ZGlmZiAtLWdpdCBhL05PVElDRSBiL05PVElDRQppbmRleCA4YTQwZGU4Li5iMWRjYzAyIDEwMDY0NAotLS0gYS9OT1RJQ0UKKysrIGIvTk9USUNFCkBAIC0zMzksNiArMzM5LDM4MyBAQAogbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCiBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KIAorQ29weXJpZ2h0IChDKSBMdWNlbnQgVGVjaG5vbG9naWVzIDE5OTcKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBMdWNlbnQgVGVjaG5vbG9naWVzIG9yIGFueSBvZgoraXRzIGVudGl0aWVzIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nCit0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCitDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCitMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKK3lvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KK1lvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgICAgICAgICAgICAgICAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgICAgICAgICAgICAgICAgICAgICAgICAwMjExMS0xMzA3LCBVU0EuCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorDAorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisMCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisMCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorCUFwcGVuZGl4OiBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDE5eXkgIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSAxOXl5IG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCisKIEEuIEhJU1RPUlkgT0YgVEhFIFNPRlRXQVJFCiA9PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC02MTgsMyArOTk1LDE0NTAgQEAKIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciAgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKworQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cit5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCitZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK1lhc20gaXMgQ29weXJpZ2h0IChjKSAyMDAxLTIwMTQgUGV0ZXIgSm9obnNvbiBhbmQgb3RoZXIgWWFzbSBkZXZlbG9wZXJzLgorCitZYXNtIGRldmVsb3BlcnMgYW5kL29yIGNvbnRyaWJ1dG9ycyBpbmNsdWRlOgorICBQZXRlciBKb2huc29uCisgIE1pY2hhZWwgVXJtYW4KKyAgQnJpYW4gR2xhZG1hbiAoVmlzdWFsIFN0dWRpbyBidWlsZCBmaWxlcywgb3RoZXIgZml4ZXMpCisgIFN0YW5pc2xhdiBLYXJjaGVibnkgKG9wdGlvbnMgcGFyc2VyKQorICBNYXRoaWV1IE1vbm5pZXIgKFNTRTQgaW5zdHJ1Y3Rpb24gcGF0Y2hlcywgTkFTTSBwcmVwcm9jZXNzb3IgYWRkaXRpb25zKQorICBBbm9ueW1vdXMgIk5BU002NCIgZGV2ZWxvcGVyIChOQVNNIHByZXByb2Nlc3NvciBmaXhlcykKKyAgU3RlcGhlbiBQb2xrb3dza2kgKHg4NiBpbnN0cnVjdGlvbiBwYXRjaGVzKQorICBIZW5yeWsgUmljaHRlciAoTWFjaC1PIG9iamVjdCBmb3JtYXQpCisgIEJlbiBTa2VnZ3MgKHBhdGNoZXMsIGJ1ZyByZXBvcnRzKQorICBBbGV4ZWkgU3ZpdGtpbmUgKEdBUyBwcmVwcm9jZXNzb3IpCisgIFNhbXVlbCBUaGliYXVsdCAoVEFTTSBwYXJzZXIgYW5kIGZyb250ZW5kKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWWFzbSBsaWNlbnNpbmcgb3ZlcnZpZXcgYW5kIHN1bW1hcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGU6IFRoaXMgZG9jdW1lbnQgZG9lcyBub3QgcHJvdmlkZSBsZWdhbCBhZHZpY2Ugbm9yIGlzIGl0IHRoZSBhY3R1YWwKK2xpY2Vuc2Ugb2YgYW55IHBhcnQgb2YgWWFzbS4gIFNlZSB0aGUgaW5kaXZpZHVhbCBsaWNlbnNlcyBmb3IgY29tcGxldGUKK2RldGFpbHMuICBDb25zdWx0IGEgbGF3eWVyIGZvciBsZWdhbCBhZHZpY2UuCisKK1RoZSBwcmltYXJ5IGxpY2Vuc2Ugb2YgWWFzbSBpcyB0aGUgMi1jbGF1c2UgQlNEIGxpY2Vuc2UuICBQbGVhc2UgdXNlIHRoaXMKK2xpY2Vuc2UgaWYgeW91IHBsYW4gb24gc3VibWl0dGluZyBjb2RlIHRvIHRoZSBwcm9qZWN0LgorCitZYXNtIGhhcyBhYnNvbHV0ZWx5IG5vIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgbWVyY2hhbnRpYmlsaXR5IG9yIGZpdG5lc3MKK2ZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4KKworLS0tLS0tLQorTGlieWFzbQorLS0tLS0tLQorTGlieWFzbSBpcyAyLWNsYXVzZSBvciAzLWNsYXVzZSBCU0QgbGljZW5zZWQsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZgorYml0dmVjdCwgd2hpY2ggaXMgdHJpcGxlLWxpY2Vuc2VkIHVuZGVyIHRoZSBBcnRpc3RpYyBsaWNlbnNlLCBHUEwsIGFuZAorTEdQTC4gIExpYnlhc20gaXMgdGh1cyBHUEwgYW5kIExHUEwgY29tcGF0aWJsZS4gIEluIGFkZGl0aW9uLCB0aGlzIGFsc28KK21lYW5zIHRoYXQgbGlieWFzbSBpcyBmcmVlIGZvciBiaW5hcnktb25seSBkaXN0cmlidXRpb24gYXMgbG9uZyBhcyB0aGUKK3Rlcm1zIG9mIHRoZSAzLWNsYXVzZSBCU0QgbGljZW5zZSBhbmQgQXJ0aXN0aWMgbGljZW5zZSAoYXMgaXQgYXBwbGllcyB0bworYml0dmVjdCkgYXJlIGZ1bGZpbGxlZC4KKworLS0tLS0tLQorTW9kdWxlcworLS0tLS0tLQorVGhlIG1vZHVsZXMgYXJlIDItY2xhdXNlIG9yIDMtY2xhdXNlIEJTRCBsaWNlbnNlZC4KKworLS0tLS0tLS0tCitGcm9udGVuZHMKKy0tLS0tLS0tLQorVGhlIGZyb250ZW5kcyBhcmUgMi1jbGF1c2UgQlNEIGxpY2Vuc2VkLgorCistLS0tLS0tLS0tLS0tCitMaWNlbnNlIFRleHRzCistLS0tLS0tLS0tLS0tCitUaGUgZnVsbCB0ZXh0IG9mIGFsbCBsaWNlbnNlcyBhcmUgcHJvdmlkZWQgaW4gc2VwYXJhdGUgZmlsZXMgaW4gdGhlIHNvdXJjZQorZGlzdHJpYnV0aW9uLiAgRWFjaCBzb3VyY2UgZmlsZSBtYXkgaW5jbHVkZSB0aGUgZW50aXJlIGxpY2Vuc2UgKGluIHRoZSBjYXNlCitvZiB0aGUgQlNEIGFuZCBBcnRpc3RpYyBsaWNlbnNlcyksIG9yIG1heSByZWZlcmVuY2UgdGhlIEdQTCBvciBMR1BMIGxpY2Vuc2UKK2ZpbGUuCisKK0JTRC50eHQgLSAyLWNsYXVzZSBhbmQgMy1jbGF1c2UgQlNEIGxpY2Vuc2VzCitBcnRpc3RpYy50eHQgLSBBcnRpc3RpYyBsaWNlbnNlCitHTlVfR1BMLTIuMCAtIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitHTlVfTEdQTC0yLjAgLSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIE9USEVSIENPTlRSSUJVVE9SUyBgYEFTIElTJycKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgT1RIRVIgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2Ygb3RoZXIgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIE9USEVSIENPTlRSSUJVVE9SUyBgYEFTIElTJycKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgT1RIRVIgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05BU00gaXMgbm93IGxpY2Vuc2VkIHVuZGVyIHRoZSAyLWNsYXVzZSBCU0QgbGljZW5zZSwgYWxzbyBrbm93biBhcyB0aGUKK3NpbXBsaWZpZWQgQlNEIGxpY2Vuc2UuCisKKyAgICBDb3B5cmlnaHQgMTk5Ni0yMDA5IHRoZSBOQVNNIEF1dGhvcnMgLSBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgIAorICAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgICAgICBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICAgICAgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAgICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgICAgICBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgICAgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgICAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICAgICAgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgICAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICAgICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgICAgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKyAgICAgIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCisgICAgICBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKworCisKKwkJCSBUaGUgIkFydGlzdGljIExpY2Vuc2UiCisKKwkJCQlQcmVhbWJsZQorCitUaGUgaW50ZW50IG9mIHRoaXMgZG9jdW1lbnQgaXMgdG8gc3RhdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYQorUGFja2FnZSBtYXkgYmUgY29waWVkLCBzdWNoIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWFpbnRhaW5zIHNvbWUKK3NlbWJsYW5jZSBvZiBhcnRpc3RpYyBjb250cm9sIG92ZXIgdGhlIGRldmVsb3BtZW50IG9mIHRoZSBwYWNrYWdlLAord2hpbGUgZ2l2aW5nIHRoZSB1c2VycyBvZiB0aGUgcGFja2FnZSB0aGUgcmlnaHQgdG8gdXNlIGFuZCBkaXN0cmlidXRlCit0aGUgUGFja2FnZSBpbiBhIG1vcmUtb3ItbGVzcyBjdXN0b21hcnkgZmFzaGlvbiwgcGx1cyB0aGUgcmlnaHQgdG8gbWFrZQorcmVhc29uYWJsZSBtb2RpZmljYXRpb25zLgorCitEZWZpbml0aW9uczoKKworCSJQYWNrYWdlIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2YgZmlsZXMgZGlzdHJpYnV0ZWQgYnkgdGhlCisJQ29weXJpZ2h0IEhvbGRlciwgYW5kIGRlcml2YXRpdmVzIG9mIHRoYXQgY29sbGVjdGlvbiBvZiBmaWxlcworCWNyZWF0ZWQgdGhyb3VnaCB0ZXh0dWFsIG1vZGlmaWNhdGlvbi4KKworCSJTdGFuZGFyZCBWZXJzaW9uIiByZWZlcnMgdG8gc3VjaCBhIFBhY2thZ2UgaWYgaXQgaGFzIG5vdCBiZWVuCisJbW9kaWZpZWQsIG9yIGhhcyBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgd2lzaGVzCisJb2YgdGhlIENvcHlyaWdodCBIb2xkZXIgYXMgc3BlY2lmaWVkIGJlbG93LgorCisJIkNvcHlyaWdodCBIb2xkZXIiIGlzIHdob2V2ZXIgaXMgbmFtZWQgaW4gdGhlIGNvcHlyaWdodCBvcgorCWNvcHlyaWdodHMgZm9yIHRoZSBwYWNrYWdlLgorCisJIllvdSIgaXMgeW91LCBpZiB5b3UncmUgdGhpbmtpbmcgYWJvdXQgY29weWluZyBvciBkaXN0cmlidXRpbmcKKwl0aGlzIFBhY2thZ2UuCisKKwkiUmVhc29uYWJsZSBjb3B5aW5nIGZlZSIgaXMgd2hhdGV2ZXIgeW91IGNhbiBqdXN0aWZ5IG9uIHRoZQorCWJhc2lzIG9mIG1lZGlhIGNvc3QsIGR1cGxpY2F0aW9uIGNoYXJnZXMsIHRpbWUgb2YgcGVvcGxlIGludm9sdmVkLAorCWFuZCBzbyBvbi4gIChZb3Ugd2lsbCBub3QgYmUgcmVxdWlyZWQgdG8ganVzdGlmeSBpdCB0byB0aGUKKwlDb3B5cmlnaHQgSG9sZGVyLCBidXQgb25seSB0byB0aGUgY29tcHV0aW5nIGNvbW11bml0eSBhdCBsYXJnZQorCWFzIGEgbWFya2V0IHRoYXQgbXVzdCBiZWFyIHRoZSBmZWUuKQorCisJIkZyZWVseSBBdmFpbGFibGUiIG1lYW5zIHRoYXQgbm8gZmVlIGlzIGNoYXJnZWQgZm9yIHRoZSBpdGVtCisJaXRzZWxmLCB0aG91Z2ggdGhlcmUgbWF5IGJlIGZlZXMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlIGl0ZW0uCisJSXQgYWxzbyBtZWFucyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIGl0ZW0gbWF5IHJlZGlzdHJpYnV0ZSBpdAorCXVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgdGhleSByZWNlaXZlZCBpdC4KKworMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgZm9ybSBvZiB0aGUKK1N0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBQYWNrYWdlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91CitkdXBsaWNhdGUgYWxsIG9mIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgYXNzb2NpYXRlZCBkaXNjbGFpbWVycy4KKworMi4gWW91IG1heSBhcHBseSBidWcgZml4ZXMsIHBvcnRhYmlsaXR5IGZpeGVzIGFuZCBvdGhlciBtb2RpZmljYXRpb25zCitkZXJpdmVkIGZyb20gdGhlIFB1YmxpYyBEb21haW4gb3IgZnJvbSB0aGUgQ29weXJpZ2h0IEhvbGRlci4gIEEgUGFja2FnZQorbW9kaWZpZWQgaW4gc3VjaCBhIHdheSBzaGFsbCBzdGlsbCBiZSBjb25zaWRlcmVkIHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCiszLiBZb3UgbWF5IG90aGVyd2lzZSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoaXMgUGFja2FnZSBpbiBhbnkgd2F5LCBwcm92aWRlZAordGhhdCB5b3UgaW5zZXJ0IGEgcHJvbWluZW50IG5vdGljZSBpbiBlYWNoIGNoYW5nZWQgZmlsZSBzdGF0aW5nIGhvdyBhbmQKK3doZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZQorZm9sbG93aW5nOgorCisgICAgYSkgcGxhY2UgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBQdWJsaWMgRG9tYWluIG9yIG90aGVyd2lzZSBtYWtlIHRoZW0KKyAgICBGcmVlbHkgQXZhaWxhYmxlLCBzdWNoIGFzIGJ5IHBvc3Rpbmcgc2FpZCBtb2RpZmljYXRpb25zIHRvIFVzZW5ldCBvcgorICAgIGFuIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBwbGFjaW5nIHRoZSBtb2RpZmljYXRpb25zIG9uIGEgbWFqb3IgYXJjaGl2ZQorICAgIHNpdGUgc3VjaCBhcyB1dW5ldC51dS5uZXQsIG9yIGJ5IGFsbG93aW5nIHRoZSBDb3B5cmlnaHQgSG9sZGVyIHRvIGluY2x1ZGUKKyAgICB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIFBhY2thZ2UuCisKKyAgICBiKSB1c2UgdGhlIG1vZGlmaWVkIFBhY2thZ2Ugb25seSB3aXRoaW4geW91ciBjb3Jwb3JhdGlvbiBvciBvcmdhbml6YXRpb24uCisKKyAgICBjKSByZW5hbWUgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBzbyB0aGUgbmFtZXMgZG8gbm90IGNvbmZsaWN0CisgICAgd2l0aCBzdGFuZGFyZCBleGVjdXRhYmxlcywgd2hpY2ggbXVzdCBhbHNvIGJlIHByb3ZpZGVkLCBhbmQgcHJvdmlkZQorICAgIGEgc2VwYXJhdGUgbWFudWFsIHBhZ2UgZm9yIGVhY2ggbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGUgdGhhdCBjbGVhcmx5CisgICAgZG9jdW1lbnRzIGhvdyBpdCBkaWZmZXJzIGZyb20gdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKyAgICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKworNC4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgaW4gb2JqZWN0IGNvZGUgb3IKK2V4ZWN1dGFibGUgZm9ybSwgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBkaXN0cmlidXRlIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZXMgYW5kIGxpYnJhcnkgZmlsZXMsCisgICAgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgKGluIHRoZSBtYW51YWwgcGFnZSBvciBlcXVpdmFsZW50KSBvbiB3aGVyZQorICAgIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworICAgIGIpIGFjY29tcGFueSB0aGUgZGlzdHJpYnV0aW9uIHdpdGggdGhlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIG9mCisgICAgdGhlIFBhY2thZ2Ugd2l0aCB5b3VyIG1vZGlmaWNhdGlvbnMuCisKKyAgICBjKSBnaXZlIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBub24tc3RhbmRhcmQgbmFtZXMsIGFuZCBjbGVhcmx5CisgICAgZG9jdW1lbnQgdGhlIGRpZmZlcmVuY2VzIGluIG1hbnVhbCBwYWdlcyAob3IgZXF1aXZhbGVudCksIHRvZ2V0aGVyCisgICAgd2l0aCBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCisgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuCisKKzUuIFlvdSBtYXkgY2hhcmdlIGEgcmVhc29uYWJsZSBjb3B5aW5nIGZlZSBmb3IgYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzCitQYWNrYWdlLiAgWW91IG1heSBjaGFyZ2UgYW55IGZlZSB5b3UgY2hvb3NlIGZvciBzdXBwb3J0IG9mIHRoaXMKK1BhY2thZ2UuICBZb3UgbWF5IG5vdCBjaGFyZ2UgYSBmZWUgZm9yIHRoaXMgUGFja2FnZSBpdHNlbGYuICBIb3dldmVyLAoreW91IG1heSBkaXN0cmlidXRlIHRoaXMgUGFja2FnZSBpbiBhZ2dyZWdhdGUgd2l0aCBvdGhlciAocG9zc2libHkKK2NvbW1lcmNpYWwpIHByb2dyYW1zIGFzIHBhcnQgb2YgYSBsYXJnZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpIHNvZnR3YXJlCitkaXN0cmlidXRpb24gcHJvdmlkZWQgdGhhdCB5b3UgZG8gbm90IGFkdmVydGlzZSB0aGlzIFBhY2thZ2UgYXMgYQorcHJvZHVjdCBvZiB5b3VyIG93bi4gIFlvdSBtYXkgZW1iZWQgdGhpcyBQYWNrYWdlJ3MgaW50ZXJwcmV0ZXIgd2l0aGluCithbiBleGVjdXRhYmxlIG9mIHlvdXJzIChieSBsaW5raW5nKTsgdGhpcyBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgYSBtZXJlCitmb3JtIG9mIGFnZ3JlZ2F0aW9uLCBwcm92aWRlZCB0aGF0IHRoZSBjb21wbGV0ZSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZQoraW50ZXJwcmV0ZXIgaXMgc28gZW1iZWRkZWQuCisKKzYuIFRoZSBzY3JpcHRzIGFuZCBsaWJyYXJ5IGZpbGVzIHN1cHBsaWVkIGFzIGlucHV0IHRvIG9yIHByb2R1Y2VkIGFzCitvdXRwdXQgZnJvbSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGRvIG5vdCBhdXRvbWF0aWNhbGx5IGZhbGwKK3VuZGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYmVsb25nIHRvIHdob2V2ZXIgZ2VuZXJhdGVkCit0aGVtLCBhbmQgbWF5IGJlIHNvbGQgY29tbWVyY2lhbGx5LCBhbmQgbWF5IGJlIGFnZ3JlZ2F0ZWQgd2l0aCB0aGlzCitQYWNrYWdlLiAgSWYgc3VjaCBzY3JpcHRzIG9yIGxpYnJhcnkgZmlsZXMgYXJlIGFnZ3JlZ2F0ZWQgd2l0aCB0aGlzCitQYWNrYWdlIHZpYSB0aGUgc28tY2FsbGVkICJ1bmR1bXAiIG9yICJ1bmV4ZWMiIG1ldGhvZHMgb2YgcHJvZHVjaW5nIGEKK2JpbmFyeSBleGVjdXRhYmxlIGltYWdlLCB0aGVuIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGFuIGltYWdlIHNoYWxsCituZWl0aGVyIGJlIGNvbnN0cnVlZCBhcyBhIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2Ugbm9yIHNoYWxsIGl0CitmYWxsIHVuZGVyIHRoZSByZXN0cmljdGlvbnMgb2YgUGFyYWdyYXBocyAzIGFuZCA0LCBwcm92aWRlZCB0aGF0IHlvdSBkbworbm90IHJlcHJlc2VudCBzdWNoIGFuIGV4ZWN1dGFibGUgaW1hZ2UgYXMgYSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoaXMKK1BhY2thZ2UuCisKKzcuIEMgc3Vicm91dGluZXMgKG9yIGNvbXBhcmFibHkgY29tcGlsZWQgc3Vicm91dGluZXMgaW4gb3RoZXIKK2xhbmd1YWdlcykgc3VwcGxpZWQgYnkgeW91IGFuZCBsaW5rZWQgaW50byB0aGlzIFBhY2thZ2UgaW4gb3JkZXIgdG8KK2VtdWxhdGUgc3Vicm91dGluZXMgYW5kIHZhcmlhYmxlcyBvZiB0aGUgbGFuZ3VhZ2UgZGVmaW5lZCBieSB0aGlzCitQYWNrYWdlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYXJlIHRoZQorZXF1aXZhbGVudCBvZiBpbnB1dCBhcyBpbiBQYXJhZ3JhcGggNiwgcHJvdmlkZWQgdGhlc2Ugc3Vicm91dGluZXMgZG8KK25vdCBjaGFuZ2UgdGhlIGxhbmd1YWdlIGluIGFueSB3YXkgdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBmYWlsIHRoZQorcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlIGxhbmd1YWdlLgorCis4LiBBZ2dyZWdhdGlvbiBvZiB0aGlzIFBhY2thZ2Ugd2l0aCBhIGNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGlzIGFsd2F5cworcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIHVzZSBvZiB0aGlzIFBhY2thZ2UgaXMgZW1iZWRkZWQ7IHRoYXQgaXMsCit3aGVuIG5vIG92ZXJ0IGF0dGVtcHQgaXMgbWFkZSB0byBtYWtlIHRoaXMgUGFja2FnZSdzIGludGVyZmFjZXMgdmlzaWJsZQordG8gdGhlIGVuZCB1c2VyIG9mIHRoZSBjb21tZXJjaWFsIGRpc3RyaWJ1dGlvbi4gIFN1Y2ggdXNlIHNoYWxsIG5vdCBiZQorY29uc3RydWVkIGFzIGEgZGlzdHJpYnV0aW9uIG9mIHRoaXMgUGFja2FnZS4KKworOS4gVGhlIG5hbWUgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKzEwLiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworCQkJCVRoZSBFbmQKKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgICAgICAgICAgICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorDAorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisMCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisMCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgorCisJCSAgR05VIExJQlJBUlkgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAJCSAgICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IEdQTC4gIEl0IGlzCisgbnVtYmVyZWQgMiBiZWNhdXNlIGl0IGdvZXMgd2l0aCB2ZXJzaW9uIDIgb2YgdGhlIG9yZGluYXJ5IEdQTC5dCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCitmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCisKKyAgVGhpcyBsaWNlbnNlLCB0aGUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKK3NwZWNpYWxseSBkZXNpZ25hdGVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSwgYW5kIHRvIGFueQorb3RoZXIgbGlicmFyaWVzIHdob3NlIGF1dGhvcnMgZGVjaWRlIHRvIHVzZSBpdC4gIFlvdSBjYW4gdXNlIGl0IGZvcgoreW91ciBsaWJyYXJpZXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZgoreW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCitvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlCit5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCitjb2RlLiAgSWYgeW91IGxpbmsgYSBwcm9ncmFtIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cyBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCit3aXRoIHRoZSBsaWJyYXJ5LCBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgIE91ciBtZXRob2Qgb2YgcHJvdGVjdGluZyB5b3VyIHJpZ2h0cyBoYXMgdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0Cit0aGUgbGlicmFyeSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbAorcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCisKKyAgQWxzbywgZm9yIGVhY2ggZGlzdHJpYnV0b3IncyBwcm90ZWN0aW9uLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK2xpYnJhcnkuICBJZiB0aGUgbGlicmFyeSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwKK3ZlcnNpb24sIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24KK3RoZSBvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy4KKwwKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCBjb21wYW5pZXMgZGlzdHJpYnV0aW5nIGZyZWUKK3NvZnR3YXJlIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIHRodXMgaW4gZWZmZWN0Cit0cmFuc2Zvcm1pbmcgdGhlIHByb2dyYW0gaW50byBwcm9wcmlldGFyeSBzb2Z0d2FyZS4gIFRvIHByZXZlbnQgdGhpcywKK3dlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncworZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIHdhcyBkZXNpZ25lZCBmb3IgdXRpbGl0eSBwcm9ncmFtcy4gIFRoaXMKK2xpY2Vuc2UsIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4KK2Rlc2lnbmF0ZWQgbGlicmFyaWVzLiAgVGhpcyBsaWNlbnNlIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeQorb25lOyBiZSBzdXJlIHRvIHJlYWQgaXQgaW4gZnVsbCwgYW5kIGRvbid0IGFzc3VtZSB0aGF0IGFueXRoaW5nIGluIGl0IGlzCit0aGUgc2FtZSBhcyBpbiB0aGUgb3JkaW5hcnkgbGljZW5zZS4KKworICBUaGUgcmVhc29uIHdlIGhhdmUgYSBzZXBhcmF0ZSBwdWJsaWMgbGljZW5zZSBmb3Igc29tZSBsaWJyYXJpZXMgaXMgdGhhdAordGhleSBibHVyIHRoZSBkaXN0aW5jdGlvbiB3ZSB1c3VhbGx5IG1ha2UgYmV0d2VlbiBtb2RpZnlpbmcgb3IgYWRkaW5nIHRvIGEKK3Byb2dyYW0gYW5kIHNpbXBseSB1c2luZyBpdC4gIExpbmtpbmcgYSBwcm9ncmFtIHdpdGggYSBsaWJyYXJ5LCB3aXRob3V0CitjaGFuZ2luZyB0aGUgbGlicmFyeSwgaXMgaW4gc29tZSBzZW5zZSBzaW1wbHkgdXNpbmcgdGhlIGxpYnJhcnksIGFuZCBpcworYW5hbG9nb3VzIHRvIHJ1bm5pbmcgYSB1dGlsaXR5IHByb2dyYW0gb3IgYXBwbGljYXRpb24gcHJvZ3JhbS4gIEhvd2V2ZXIsIGluCithIHRleHR1YWwgYW5kIGxlZ2FsIHNlbnNlLCB0aGUgbGlua2VkIGV4ZWN1dGFibGUgaXMgYSBjb21iaW5lZCB3b3JrLCBhCitkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LCBhbmQgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK3RyZWF0cyBpdCBhcyBzdWNoLgorCisgIEJlY2F1c2Ugb2YgdGhpcyBibHVycmVkIGRpc3RpbmN0aW9uLCB1c2luZyB0aGUgb3JkaW5hcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgZm9yIGxpYnJhcmllcyBkaWQgbm90IGVmZmVjdGl2ZWx5IHByb21vdGUgc29mdHdhcmUKK3NoYXJpbmcsIGJlY2F1c2UgbW9zdCBkZXZlbG9wZXJzIGRpZCBub3QgdXNlIHRoZSBsaWJyYXJpZXMuICBXZQorY29uY2x1ZGVkIHRoYXQgd2Vha2VyIGNvbmRpdGlvbnMgbWlnaHQgcHJvbW90ZSBzaGFyaW5nIGJldHRlci4KKworICBIb3dldmVyLCB1bnJlc3RyaWN0ZWQgbGlua2luZyBvZiBub24tZnJlZSBwcm9ncmFtcyB3b3VsZCBkZXByaXZlIHRoZQordXNlcnMgb2YgdGhvc2UgcHJvZ3JhbXMgb2YgYWxsIGJlbmVmaXQgZnJvbSB0aGUgZnJlZSBzdGF0dXMgb2YgdGhlCitsaWJyYXJpZXMgdGhlbXNlbHZlcy4gIFRoaXMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvCitwZXJtaXQgZGV2ZWxvcGVycyBvZiBub24tZnJlZSBwcm9ncmFtcyB0byB1c2UgZnJlZSBsaWJyYXJpZXMsIHdoaWxlCitwcmVzZXJ2aW5nIHlvdXIgZnJlZWRvbSBhcyBhIHVzZXIgb2Ygc3VjaCBwcm9ncmFtcyB0byBjaGFuZ2UgdGhlIGZyZWUKK2xpYnJhcmllcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlbS4gIChXZSBoYXZlIG5vdCBzZWVuIGhvdyB0byBhY2hpZXZlCit0aGlzIGFzIHJlZ2FyZHMgY2hhbmdlcyBpbiBoZWFkZXIgZmlsZXMsIGJ1dCB3ZSBoYXZlIGFjaGlldmVkIGl0IGFzIHJlZ2FyZHMKK2NoYW5nZXMgaW4gdGhlIGFjdHVhbCBmdW5jdGlvbnMgb2YgdGhlIExpYnJhcnkuKSAgVGhlIGhvcGUgaXMgdGhhdCB0aGlzCit3aWxsIGxlYWQgdG8gZmFzdGVyIGRldmVsb3BtZW50IG9mIGZyZWUgbGlicmFyaWVzLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKKyJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCitmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoaWxlIHRoZSBsYXR0ZXIgb25seQord29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgbGlicmFyeS4KKworICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIGEgbGlicmFyeSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByYXRoZXIgdGhhbiBieSB0aGlzIHNwZWNpYWwgb25lLgorDAorCQkgIEdOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSB3aGljaAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yIG90aGVyIGF1dGhvcml6ZWQKK3BhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGlicmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLiAgRWFjaCBsaWNlbnNlZSBpcworYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKK3ByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcworKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yaword2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKK2NvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhCitwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCitzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCitpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisgICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCithbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCitzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yCit3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCithbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KKyAgCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncworY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQKK3lvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCithcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAorYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkKK3dhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCitMaWJyYXJ5LgorCisgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCithbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCitmZWUuCisMCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8KKyAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQorICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKKyAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CisgICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCisgICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCisgICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKKyAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcworICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQorICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CisgICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKKyAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCitpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQord2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwordGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwordGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAoraW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQordGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgordGhlc2Ugbm90aWNlcy4KKwwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorDAorICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tcGlsZSBvcgorbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKK3dvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Cittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKK2VuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQorTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5Cit0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmIHRoZSB3b3JrCitkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQorZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIEFsc28sIHlvdSBtdXN0IGRvIG9uZQorb2YgdGhlc2UgdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcKKyAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKKyAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgorICAgIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkCisgICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CisgICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZAorICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCisgICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCisgICAgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24KKyAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworICAgIGIpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGMpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZCkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5CitkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IKK2NvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24KK3doaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKK3RoZSBleGVjdXRhYmxlLgorCisgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCityZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5CithY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90Cit1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CitkaXN0cmlidXRlLgorDAorICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQorZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAorbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCit0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UKK3Blcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yaworICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKKyAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgICBTZWN0aW9ucyBhYm92ZS4KKworICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CisgICAgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcKKyAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKK3RoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CithdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cgorcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAorb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwordGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorDAorICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKK3BhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKK2FuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuCitTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCitidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAorImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYQorbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisMCisgIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKK3dyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCitjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgorZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cworb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKK2FuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KK0VYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgorV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKK0FORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VCitGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQorTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORworUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKK0ZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKK1NVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKyAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdAorZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCityZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKK29yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCisgIFRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiAgSXQgaXMKK3NhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKKyJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+IDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQorICBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbiBieSBKYW1lcyBSYW5kb20gSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk5MAorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQpkaWZmIC0tZ2l0IGEvYmluL2dkYi1vcmlnIGIvYmluL2dkYi1vcmlnCmluZGV4IGM0ZmZlOTYuLmM1ZDI2YzYgMTAwNzU1Ci0tLSBhL2Jpbi9nZGItb3JpZworKysgYi9iaW4vZ2RiLW9yaWcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL3B5dGhvbiBiL2Jpbi9weXRob24KZGVsZXRlZCBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDU1MWFiMjYuLjAwMDAwMDAKLS0tIGEvYmluL3B5dGhvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXB5dGhvbjIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vcHl0aG9uIGIvYmluL3B5dGhvbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYjVmYzY3Ci0tLSAvZGV2L251bGwKKysrIGIvYmluL3B5dGhvbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vcHl0aG9uLWNvbmZpZyBiL2Jpbi9weXRob24tY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEyMDAwMAppbmRleCA3NTgwMjdmLi4wMDAwMDAwCi0tLSBhL2Jpbi9weXRob24tY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotcHl0aG9uMi1jb25maWcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vcHl0aG9uLWNvbmZpZyBiL2Jpbi9weXRob24tY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE4YzE0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vcHl0aG9uLWNvbmZpZwpAQCAtMCwwICsxLDU3IEBACisjIS9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzL2Jpbi9weXRob24yLjcKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgZ2V0b3B0Citmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCisKK3ZhbGlkX29wdHMgPSBbJ3ByZWZpeCcsICdleGVjLXByZWZpeCcsICdpbmNsdWRlcycsICdsaWJzJywgJ2NmbGFncycsCisgICAgICAgICAgICAgICdsZGZsYWdzJywgJ2hlbHAnXQorCitkZWYgZXhpdF93aXRoX3VzYWdlKGNvZGU9MSk6CisgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiVXNhZ2U6ICVzIFslc10iICUgKHN5cy5hcmd2WzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfCcuam9pbignLS0nK29wdCBmb3Igb3B0IGluIHZhbGlkX29wdHMpKQorICAgIHN5cy5leGl0KGNvZGUpCisKK3RyeToKKyAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICcnLCB2YWxpZF9vcHRzKQorZXhjZXB0IGdldG9wdC5lcnJvcjoKKyAgICBleGl0X3dpdGhfdXNhZ2UoKQorCitpZiBub3Qgb3B0czoKKyAgICBleGl0X3dpdGhfdXNhZ2UoKQorCitweXZlciA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignVkVSU0lPTicpCitnZXR2YXIgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIKKworb3B0X2ZsYWdzID0gW2ZsYWcgZm9yIChmbGFnLCB2YWwpIGluIG9wdHNdCisKK2lmICctLWhlbHAnIGluIG9wdF9mbGFnczoKKyAgICBleGl0X3dpdGhfdXNhZ2UoY29kZT0wKQorCitmb3Igb3B0IGluIG9wdF9mbGFnczoKKyAgICBpZiBvcHQgPT0gJy0tcHJlZml4JzoKKyAgICAgICAgcHJpbnQgc3lzY29uZmlnLlBSRUZJWAorCisgICAgZWxpZiBvcHQgPT0gJy0tZXhlYy1wcmVmaXgnOgorICAgICAgICBwcmludCBzeXNjb25maWcuRVhFQ19QUkVGSVgKKworICAgIGVsaWYgb3B0IGluICgnLS1pbmNsdWRlcycsICctLWNmbGFncycpOgorICAgICAgICBmbGFncyA9IFsnLUknICsgc3lzY29uZmlnLmdldF9weXRob25faW5jKCksCisgICAgICAgICAgICAgICAgICctSScgKyBzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz1UcnVlKV0KKyAgICAgICAgaWYgb3B0ID09ICctLWNmbGFncyc6CisgICAgICAgICAgICBmbGFncy5leHRlbmQoZ2V0dmFyKCdDRkxBR1MnKS5zcGxpdCgpKQorICAgICAgICBwcmludCAnICcuam9pbihmbGFncykKKworICAgIGVsaWYgb3B0IGluICgnLS1saWJzJywgJy0tbGRmbGFncycpOgorICAgICAgICBsaWJzID0gZ2V0dmFyKCdMSUJTJykuc3BsaXQoKSArIGdldHZhcignU1lTTElCUycpLnNwbGl0KCkKKyAgICAgICAgbGlicy5hcHBlbmQoJy1scHl0aG9uJytweXZlcikKKyAgICAgICAgIyBhZGQgdGhlIHByZWZpeC9saWIvcHl0aG9uWC5ZL2NvbmZpZyBkaXIsIGJ1dCBvbmx5IGlmIHRoZXJlIGlzIG5vCisgICAgICAgICMgc2hhcmVkIGxpYnJhcnkgaW4gcHJlZml4L2xpYi8uCisgICAgICAgIGlmIG9wdCA9PSAnLS1sZGZsYWdzJzoKKyAgICAgICAgICAgIGlmIG5vdCBnZXR2YXIoJ1B5X0VOQUJMRV9TSEFSRUQnKToKKyAgICAgICAgICAgICAgICBsaWJzLmluc2VydCgwLCAnLUwnICsgZ2V0dmFyKCdMSUJQTCcpKQorICAgICAgICAgICAgaWYgbm90IGdldHZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisgICAgICAgICAgICAgICAgbGlicy5leHRlbmQoZ2V0dmFyKCdMSU5LRk9SU0hBUkVEJykuc3BsaXQoKSkKKyAgICAgICAgcHJpbnQgJyAnLmpvaW4obGlicykKKwpkaWZmIC0tZ2l0IGEvYmluL3B5dGhvbi1jb25maWcuc2ggYi9iaW4vcHl0aG9uLWNvbmZpZy5zaAppbmRleCAwZmMxMjkzLi4zMTNiOTlmIDEwMDc1NQotLS0gYS9iaW4vcHl0aG9uLWNvbmZpZy5zaAorKysgYi9iaW4vcHl0aG9uLWNvbmZpZy5zaApAQCAtMzEsNyArMzEsNyBAQAogICAgIGVjaG8gJFJFU1VMVAogfQogCi1wcmVmaXhfYnVpbGQ9Ii9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NCIKK3ByZWZpeF9idWlsZD0iL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL291dC9idWlsZC9idWlsZGhvc3QvZGFyd2luLXg4Nl82NC9pbnN0YWxsL2hvc3QtdG9vbHMiCiBwcmVmaXhfcmVhbD0kKGluc3RhbGxlZF9wcmVmaXggIiQwIikKIAogZXhlY19wcmVmaXhfYnVpbGQ9IiR7cHJlZml4fSIKZGlmZiAtLWdpdCBhL2Jpbi9weXRob24yIGIvYmluL3B5dGhvbjIKZGVsZXRlZCBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDhmN2EzYzEuLjAwMDAwMDAKLS0tIGEvYmluL3B5dGhvbjIKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1weXRob24yLjcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9iaW4vcHl0aG9uMiBiL2Jpbi9weXRob24yCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRiNWZjNjcKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vcHl0aG9uMgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9iaW4vcHl0aG9uMi1jb25maWcgYi9iaW4vcHl0aG9uMi1jb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDc4NWYzNmYuLjAwMDAwMDAKLS0tIGEvYmluL3B5dGhvbjItY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotcHl0aG9uMi43LWNvbmZpZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Jpbi9weXRob24yLWNvbmZpZyBiL2Jpbi9weXRob24yLWNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOGMxNDU1Ci0tLSAvZGV2L251bGwKKysrIGIvYmluL3B5dGhvbjItY29uZmlnCkBAIC0wLDAgKzEsNTcgQEAKKyMhL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL291dC9idWlsZC9idWlsZGhvc3QvZGFyd2luLXg4Nl82NC9pbnN0YWxsL2hvc3QtdG9vbHMvYmluL3B5dGhvbjIuNworCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBnZXRvcHQKK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKKwordmFsaWRfb3B0cyA9IFsncHJlZml4JywgJ2V4ZWMtcHJlZml4JywgJ2luY2x1ZGVzJywgJ2xpYnMnLCAnY2ZsYWdzJywKKyAgICAgICAgICAgICAgJ2xkZmxhZ3MnLCAnaGVscCddCisKK2RlZiBleGl0X3dpdGhfdXNhZ2UoY29kZT0xKToKKyAgICBwcmludCA+PnN5cy5zdGRlcnIsICJVc2FnZTogJXMgWyVzXSIgJSAoc3lzLmFyZ3ZbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd8Jy5qb2luKCctLScrb3B0IGZvciBvcHQgaW4gdmFsaWRfb3B0cykpCisgICAgc3lzLmV4aXQoY29kZSkKKwordHJ5OgorICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJycsIHZhbGlkX29wdHMpCitleGNlcHQgZ2V0b3B0LmVycm9yOgorICAgIGV4aXRfd2l0aF91c2FnZSgpCisKK2lmIG5vdCBvcHRzOgorICAgIGV4aXRfd2l0aF91c2FnZSgpCisKK3B5dmVyID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdWRVJTSU9OJykKK2dldHZhciA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcgorCitvcHRfZmxhZ3MgPSBbZmxhZyBmb3IgKGZsYWcsIHZhbCkgaW4gb3B0c10KKworaWYgJy0taGVscCcgaW4gb3B0X2ZsYWdzOgorICAgIGV4aXRfd2l0aF91c2FnZShjb2RlPTApCisKK2ZvciBvcHQgaW4gb3B0X2ZsYWdzOgorICAgIGlmIG9wdCA9PSAnLS1wcmVmaXgnOgorICAgICAgICBwcmludCBzeXNjb25maWcuUFJFRklYCisKKyAgICBlbGlmIG9wdCA9PSAnLS1leGVjLXByZWZpeCc6CisgICAgICAgIHByaW50IHN5c2NvbmZpZy5FWEVDX1BSRUZJWAorCisgICAgZWxpZiBvcHQgaW4gKCctLWluY2x1ZGVzJywgJy0tY2ZsYWdzJyk6CisgICAgICAgIGZsYWdzID0gWyctSScgKyBzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMoKSwKKyAgICAgICAgICAgICAgICAgJy1JJyArIHN5c2NvbmZpZy5nZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPVRydWUpXQorICAgICAgICBpZiBvcHQgPT0gJy0tY2ZsYWdzJzoKKyAgICAgICAgICAgIGZsYWdzLmV4dGVuZChnZXR2YXIoJ0NGTEFHUycpLnNwbGl0KCkpCisgICAgICAgIHByaW50ICcgJy5qb2luKGZsYWdzKQorCisgICAgZWxpZiBvcHQgaW4gKCctLWxpYnMnLCAnLS1sZGZsYWdzJyk6CisgICAgICAgIGxpYnMgPSBnZXR2YXIoJ0xJQlMnKS5zcGxpdCgpICsgZ2V0dmFyKCdTWVNMSUJTJykuc3BsaXQoKQorICAgICAgICBsaWJzLmFwcGVuZCgnLWxweXRob24nK3B5dmVyKQorICAgICAgICAjIGFkZCB0aGUgcHJlZml4L2xpYi9weXRob25YLlkvY29uZmlnIGRpciwgYnV0IG9ubHkgaWYgdGhlcmUgaXMgbm8KKyAgICAgICAgIyBzaGFyZWQgbGlicmFyeSBpbiBwcmVmaXgvbGliLy4KKyAgICAgICAgaWYgb3B0ID09ICctLWxkZmxhZ3MnOgorICAgICAgICAgICAgaWYgbm90IGdldHZhcignUHlfRU5BQkxFX1NIQVJFRCcpOgorICAgICAgICAgICAgICAgIGxpYnMuaW5zZXJ0KDAsICctTCcgKyBnZXR2YXIoJ0xJQlBMJykpCisgICAgICAgICAgICBpZiBub3QgZ2V0dmFyKCdQWVRIT05GUkFNRVdPUksnKToKKyAgICAgICAgICAgICAgICBsaWJzLmV4dGVuZChnZXR2YXIoJ0xJTktGT1JTSEFSRUQnKS5zcGxpdCgpKQorICAgICAgICBwcmludCAnICcuam9pbihsaWJzKQorCmRpZmYgLS1naXQgYS9iaW4vcHl0aG9uMi43IGIvYmluL3B5dGhvbjIuNwppbmRleCBmN2Q3OTNlLi5kYjVmYzY3IDEwMDc1NQotLS0gYS9iaW4vcHl0aG9uMi43CisrKyBiL2Jpbi9weXRob24yLjcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYmluL3B5dGhvbjIuNy1jb25maWcgYi9iaW4vcHl0aG9uMi43LWNvbmZpZwppbmRleCBjOWQ1Zjc3Li5hOGMxNDU1IDEwMDc1NQotLS0gYS9iaW4vcHl0aG9uMi43LWNvbmZpZworKysgYi9iaW4vcHl0aG9uMi43LWNvbmZpZwpAQCAtMSw0ICsxLDQgQEAKLSMhL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2Jpbi9weXRob24yLjcKKyMhL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL291dC9idWlsZC9idWlsZGhvc3QvZGFyd2luLXg4Nl82NC9pbnN0YWxsL2hvc3QtdG9vbHMvYmluL3B5dGhvbjIuNwogCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKZGlmZiAtLWdpdCBhL2xpYi9saWJweXRob24yLjcuYSBiL2xpYi9saWJweXRob24yLjcuYQppbmRleCAzMjBkNmRmLi5hYzkzY2U1IDEwMDc1NQotLS0gYS9saWIvbGlicHl0aG9uMi43LmEKKysrIGIvbGliL2xpYnB5dGhvbjIuNy5hCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9wa2djb25maWcvcHl0aG9uLTIuNy5wYyBiL2xpYi9wa2djb25maWcvcHl0aG9uLTIuNy5wYwppbmRleCA0NWVmYzNjLi42MDAzYzE4IDEwMDY0NAotLS0gYS9saWIvcGtnY29uZmlnL3B5dGhvbi0yLjcucGMKKysrIGIvbGliL3BrZ2NvbmZpZy9weXRob24tMi43LnBjCkBAIC0xLDQgKzEsNCBAQAotcHJlZml4PS9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NAorcHJlZml4PS9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzCiBleGVjX3ByZWZpeD0ke3ByZWZpeH0KIGxpYmRpcj0ke2V4ZWNfcHJlZml4fS9saWIKIGluY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUKZGlmZiAtLWdpdCBhL2xpYi9wa2djb25maWcvcHl0aG9uLnBjIGIvbGliL3BrZ2NvbmZpZy9weXRob24ucGMKZGVsZXRlZCBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IGI3ZGZmN2YuLjAwMDAwMDAKLS0tIGEvbGliL3BrZ2NvbmZpZy9weXRob24ucGMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1weXRob24yLnBjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGliL3BrZ2NvbmZpZy9weXRob24ucGMgYi9saWIvcGtnY29uZmlnL3B5dGhvbi5wYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDAzYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3BrZ2NvbmZpZy9weXRob24ucGMKQEAgLTAsMCArMSwxMyBAQAorcHJlZml4PS9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzCitleGVjX3ByZWZpeD0ke3ByZWZpeH0KK2xpYmRpcj0ke2V4ZWNfcHJlZml4fS9saWIKK2luY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUKKworTmFtZTogUHl0aG9uCitEZXNjcmlwdGlvbjogUHl0aG9uIGxpYnJhcnkKK1JlcXVpcmVzOiAKK1ZlcnNpb246IDIuNworTGlicy5wcml2YXRlOiAtbGRsICAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uCitMaWJzOiAtTCR7bGliZGlyfSAtbHB5dGhvbjIuNworQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vcHl0aG9uMi43IAorCmRpZmYgLS1naXQgYS9saWIvcGtnY29uZmlnL3B5dGhvbjIucGMgYi9saWIvcGtnY29uZmlnL3B5dGhvbjIucGMKZGVsZXRlZCBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IGI1YWM2MGMuLjAwMDAwMDAKLS0tIGEvbGliL3BrZ2NvbmZpZy9weXRob24yLnBjCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotcHl0aG9uLTIuNy5wYwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYi9wa2djb25maWcvcHl0aG9uMi5wYyBiL2xpYi9wa2djb25maWcvcHl0aG9uMi5wYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDAzYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3BrZ2NvbmZpZy9weXRob24yLnBjCkBAIC0wLDAgKzEsMTMgQEAKK3ByZWZpeD0vVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3NyYy9hbmRyb2lkL21hc3Rlci1uZGsvb3V0L2J1aWxkL2J1aWxkaG9zdC9kYXJ3aW4teDg2XzY0L2luc3RhbGwvaG9zdC10b29scworZXhlY19wcmVmaXg9JHtwcmVmaXh9CitsaWJkaXI9JHtleGVjX3ByZWZpeH0vbGliCitpbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRlCisKK05hbWU6IFB5dGhvbgorRGVzY3JpcHRpb246IFB5dGhvbiBsaWJyYXJ5CitSZXF1aXJlczogCitWZXJzaW9uOiAyLjcKK0xpYnMucHJpdmF0ZTogLWxkbCAgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbgorTGliczogLUwke2xpYmRpcn0gLWxweXRob24yLjcKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9L3B5dGhvbjIuNyAKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9fc3lzY29uZmlnZGF0YS5weSBiL2xpYi9weXRob24yLjcvX3N5c2NvbmZpZ2RhdGEucHkKaW5kZXggMGU3MDAyNC4uYzIzMDU5OCAxMDA2NDQKLS0tIGEvbGliL3B5dGhvbjIuNy9fc3lzY29uZmlnZGF0YS5weQorKysgYi9saWIvcHl0aG9uMi43L19zeXNjb25maWdkYXRhLnB5CkBAIC0zLDkgKzMsOSBAQAogICdBSVhfR0VOVUlORV9DUExVU1BMVVMnOiAwLAogICdBUic6ICd4ODZfNjQtYXBwbGUtZGFyd2luLWFyJywKICAnQVJGTEFHUyc6ICdyYycsCi0gJ0FTRExHRU4nOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9yZXBvX2NsaWVudHMvaHR0cHNfX19hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb21fYV9wbGF0Zm9ybV9tYW5pZmVzdC5naXQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNS9QYXJzZXIvYXNkbF9jLnB5JywKLSAnQVNETEdFTl9GSUxFUyc6ICcvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3JlcG9fY2xpZW50cy9odHRwc19fX2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbV9hX3BsYXRmb3JtX21hbmlmZXN0LmdpdC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41L1BhcnNlci9hc2RsLnB5IC9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3QvcmVwb19jbGllbnRzL2h0dHBzX19fYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tX2FfcGxhdGZvcm1fbWFuaWZlc3QuZ2l0L21hc3Rlci1uZGsvdG9vbGNoYWluL3B5dGhvbi9QeXRob24tMi43LjUvUGFyc2VyL2FzZGxfYy5weScsCi0gJ0FTVF9BU0RMJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3QvcmVwb19jbGllbnRzL2h0dHBzX19fYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tX2FfcGxhdGZvcm1fbWFuaWZlc3QuZ2l0L21hc3Rlci1uZGsvdG9vbGNoYWluL3B5dGhvbi9QeXRob24tMi43LjUvUGFyc2VyL1B5dGhvbi5hc2RsJywKKyAnQVNETEdFTic6ICcvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3NyYy9hbmRyb2lkL21hc3Rlci1uZGsvdG9vbGNoYWluL3B5dGhvbi9QeXRob24tMi43LjUvUGFyc2VyL2FzZGxfYy5weScsCisgJ0FTRExHRU5fRklMRVMnOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41L1BhcnNlci9hc2RsLnB5IC9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNS9QYXJzZXIvYXNkbF9jLnB5JywKKyAnQVNUX0FTREwnOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41L1BhcnNlci9QeXRob24uYXNkbCcsCiAgJ0FTVF9DJzogJ1B5dGhvbi9QeXRob24tYXN0LmMnLAogICdBU1RfQ19ESVInOiAnUHl0aG9uJywKICAnQVNUX0gnOiAnSW5jbHVkZS9QeXRob24tYXN0LmgnLApAQCAtMTQsOCArMTQsOCBAQAogICdCQVNFQ0ZMQUdTJzogJy1mbm8tc3RyaWN0LWFsaWFzaW5nJywKICAnQkFTRU1PRExJQlMnOiAnJywKICAnQkVPU19USFJFQURTJzogMCwKLSAnQklORElSJzogJy9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9iaW4nLAotICdCSU5MSUJERVNUJzogJy9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43JywKKyAnQklORElSJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzL2JpbicsCisgJ0JJTkxJQkRFU1QnOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL291dC9idWlsZC9idWlsZGhvc3QvZGFyd2luLXg4Nl82NC9pbnN0YWxsL2hvc3QtdG9vbHMvbGliL3B5dGhvbjIuNycsCiAgJ0JMRExJQlJBUlknOiAnbGlicHl0aG9uMi43LmEnLAogICdCTERTSEFSRUQnOiAneDg2XzY0LWFwcGxlLWRhcndpbi1nY2MgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJywKICAnQlVJTERFWEUnOiAnJywKQEAgLTI1LDE4ICsyNSwxOCBAQAogICdDRkxBR1MnOiAnLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1PcyAtZm9taXQtZnJhbWUtcG9pbnRlciAtcyAtRE5ERUJVRyAtZndyYXB2IC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzJywKICAnQ0ZMQUdTRk9SU0hBUkVEJzogJycsCiAgJ0NPTkZJR0ZJTEVTJzogJ2NvbmZpZ3VyZSBjb25maWd1cmUuYWMgYWNjb25maWcuaCBweWNvbmZpZy5oLmluIE1ha2VmaWxlLnByZS5pbicsCi0gJ0NPTkZJR19BUkdTJzogIictLXByZWZpeD0vYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQnICctLWJ1aWxkPXg4Nl82NC1hcHBsZS1kYXJ3aW4nICctLWhvc3Q9eDg2XzY0LWFwcGxlLWRhcndpbicgJy0td2l0aC1idWlsZC1zeXNyb290JyAnLS1kaXNhYmxlLWlwdjYnICdidWlsZF9hbGlhcz14ODZfNjQtYXBwbGUtZGFyd2luJyAnaG9zdF9hbGlhcz14ODZfNjQtYXBwbGUtZGFyd2luJyAnQ0M9eDg2XzY0LWFwcGxlLWRhcndpbi1nY2MnICdDRkxBR1M9LU8yIC1PcyAtZm9taXQtZnJhbWUtcG9pbnRlciAtcycgJ0xERkxBR1M9JyIsCi0gJ0NPTkZJTkNMVURFRElSJzogJy9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9pbmNsdWRlJywKLSAnQ09ORklOQ0xVREVQWSc6ICcvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvaW5jbHVkZS9weXRob24yLjcnLAorICdDT05GSUdfQVJHUyc6ICInLS1wcmVmaXg9L1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL291dC9idWlsZC9idWlsZGhvc3QvZGFyd2luLXg4Nl82NC9pbnN0YWxsL2hvc3QtdG9vbHMnICctLWJ1aWxkPXg4Nl82NC1hcHBsZS1kYXJ3aW4nICctLWhvc3Q9eDg2XzY0LWFwcGxlLWRhcndpbicgJy0td2l0aC1idWlsZC1zeXNyb290JyAnLS1kaXNhYmxlLWlwdjYnICdidWlsZF9hbGlhcz14ODZfNjQtYXBwbGUtZGFyd2luJyAnaG9zdF9hbGlhcz14ODZfNjQtYXBwbGUtZGFyd2luJyAnQ0M9eDg2XzY0LWFwcGxlLWRhcndpbi1nY2MnICdDRkxBR1M9LU8yIC1PcyAtZm9taXQtZnJhbWUtcG9pbnRlciAtcycgJ0xERkxBR1M9JyIsCisgJ0NPTkZJTkNMVURFRElSJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzL2luY2x1ZGUnLAorICdDT05GSU5DTFVERVBZJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzL2luY2x1ZGUvcHl0aG9uMi43JywKICAnQ09SRVBZVEhPTlBBVEgnOiAnOnBsYXQtZGFyd2luOnBsYXQtbWFjOnBsYXQtbWFjL2xpYi1zY3JpcHRwYWNrYWdlczpsaWItdGs6bGliLW9sZCcsCi0gJ0NQUEZMQUdTJzogJy1JLiAtSUluY2x1ZGUgLUkvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3JlcG9fY2xpZW50cy9odHRwc19fX2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbV9hX3BsYXRmb3JtX21hbmlmZXN0LmdpdC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41L0luY2x1ZGUnLAorICdDUFBGTEFHUyc6ICctSS4gLUlJbmNsdWRlIC1JL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41L0luY2x1ZGUnLAogICdDWFgnOiAneDg2XzY0LWFwcGxlLWRhcndpbi1nKysnLAogICdDX1RIUkVBRFMnOiAwLAogICdERUxJTSc6ICc6JywKLSAnREVTVERJUlMnOiAnL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0IC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIgL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcgL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvbGliLWR5bmxvYWQnLAotICdERVNUTElCJzogJy9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43JywKKyAnREVTVERJUlMnOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL291dC9idWlsZC9idWlsZGhvc3QvZGFyd2luLXg4Nl82NC9pbnN0YWxsL2hvc3QtdG9vbHMgL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL291dC9idWlsZC9idWlsZGhvc3QvZGFyd2luLXg4Nl82NC9pbnN0YWxsL2hvc3QtdG9vbHMvbGliIC9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzL2xpYi9weXRob24yLjcgL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL291dC9idWlsZC9idWlsZGhvc3QvZGFyd2luLXg4Nl82NC9pbnN0YWxsL2hvc3QtdG9vbHMvbGliL3B5dGhvbjIuNy9saWItZHlubG9hZCcsCisgJ0RFU1RMSUInOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL291dC9idWlsZC9idWlsZGhvc3QvZGFyd2luLXg4Nl82NC9pbnN0YWxsL2hvc3QtdG9vbHMvbGliL3B5dGhvbjIuNycsCiAgJ0RFU1RQQVRIJzogJycsCi0gJ0RFU1RTSEFSRUQnOiAnL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvbGliLWR5bmxvYWQnLAorICdERVNUU0hBUkVEJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzL2xpYi9weXRob24yLjcvbGliLWR5bmxvYWQnLAogICdESVJNT0RFJzogNzU1LAogICdESVNUJzogJ1JFQURNRSBDaGFuZ2VMb2cgY29uZmlndXJlIGNvbmZpZ3VyZS5hYyBhY2NvbmZpZy5oIHB5Y29uZmlnLmguaW4gTWFrZWZpbGUucHJlLmluIEluY2x1ZGUgTGliIE1pc2MgRGVtbyBFeHQtZHVtbXknLAogICdESVNURElSUyc6ICdJbmNsdWRlIExpYiBNaXNjIERlbW8gRXh0LWR1bW15JywKQEAgLTYyLDcgKzYyLDcgQEAKICAnR05VTEQnOiAnbm8nLAogICdHUkFNTUFSX0MnOiAnUHl0aG9uL2dyYW1pbml0LmMnLAogICdHUkFNTUFSX0gnOiAnSW5jbHVkZS9ncmFtaW5pdC5oJywKLSAnR1JBTU1BUl9JTlBVVCc6ICcvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3JlcG9fY2xpZW50cy9odHRwc19fX2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbV9hX3BsYXRmb3JtX21hbmlmZXN0LmdpdC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41L0dyYW1tYXIvR3JhbW1hcicsCisgJ0dSQU1NQVJfSU5QVVQnOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41L0dyYW1tYXIvR3JhbW1hcicsCiAgJ0hBVkVfQUNPU0gnOiAxLAogICdIQVZFX0FERFJJTkZPJzogMSwKICAnSEFWRV9BTEFSTSc6IDEsCkBAIC0zNTEsOSArMzUxLDkgQEAKICAnSEdWRVJTSU9OJzogJycsCiAgJ0hPU1RfR05VX1RZUEUnOiAneDg2XzY0LWFwcGxlLWRhcndpbicsCiAgJ0hVUkRfQ19USFJFQURTJzogMCwKLSAnSU5DTERJUlNUT01BS0UnOiAnL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2luY2x1ZGUgL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2luY2x1ZGUgL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2luY2x1ZGUvcHl0aG9uMi43IC9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9pbmNsdWRlL3B5dGhvbjIuNycsCi0gJ0lOQ0xVREVESVInOiAnL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2luY2x1ZGUnLAotICdJTkNMVURFUFknOiAnL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2luY2x1ZGUvcHl0aG9uMi43JywKKyAnSU5DTERJUlNUT01BS0UnOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL291dC9idWlsZC9idWlsZGhvc3QvZGFyd2luLXg4Nl82NC9pbnN0YWxsL2hvc3QtdG9vbHMvaW5jbHVkZSAvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3NyYy9hbmRyb2lkL21hc3Rlci1uZGsvb3V0L2J1aWxkL2J1aWxkaG9zdC9kYXJ3aW4teDg2XzY0L2luc3RhbGwvaG9zdC10b29scy9pbmNsdWRlIC9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzL2luY2x1ZGUvcHl0aG9uMi43IC9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzL2luY2x1ZGUvcHl0aG9uMi43JywKKyAnSU5DTFVERURJUic6ICcvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3NyYy9hbmRyb2lkL21hc3Rlci1uZGsvb3V0L2J1aWxkL2J1aWxkaG9zdC9kYXJ3aW4teDg2XzY0L2luc3RhbGwvaG9zdC10b29scy9pbmNsdWRlJywKKyAnSU5DTFVERVBZJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzL2luY2x1ZGUvcHl0aG9uMi43JywKICAnSU5TVEFMTCc6ICcvdXNyL2Jpbi9pbnN0YWxsIC1jJywKICAnSU5TVEFMTF9EQVRBJzogJy91c3IvYmluL2luc3RhbGwgLWMgLW0gNjQ0JywKICAnSU5TVEFMTF9QUk9HUkFNJzogJy91c3IvYmluL2luc3RhbGwgLWMnLApAQCAtMzY3LDE1ICszNjcsMTUgQEAKICAnTERMSUJSQVJZRElSJzogJycsCiAgJ0xEU0hBUkVEJzogJ3g4Nl82NC1hcHBsZS1kYXJ3aW4tZ2NjIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcsCiAgJ0xJQkMnOiAnJywKLSAnTElCREVTVCc6ICcvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNycsCi0gJ0xJQkRJUic6ICcvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliJywKKyAnTElCREVTVCc6ICcvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3NyYy9hbmRyb2lkL21hc3Rlci1uZGsvb3V0L2J1aWxkL2J1aWxkaG9zdC9kYXJ3aW4teDg2XzY0L2luc3RhbGwvaG9zdC10b29scy9saWIvcHl0aG9uMi43JywKKyAnTElCRElSJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzL2xpYicsCiAgJ0xJQkZGSV9JTkNMVURFRElSJzogJycsCiAgJ0xJQk0nOiAnJywKICAnTElCT0JKRElSJzogJ1B5dGhvbi8nLAogICdMSUJPQkpTJzogJycsCi0gJ0xJQlAnOiAnL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcnLAotICdMSUJQQyc6ICcvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3BrZ2NvbmZpZycsCi0gJ0xJQlBMJzogJy9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2NvbmZpZycsCisgJ0xJQlAnOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL291dC9idWlsZC9idWlsZGhvc3QvZGFyd2luLXg4Nl82NC9pbnN0YWxsL2hvc3QtdG9vbHMvbGliL3B5dGhvbjIuNycsCisgJ0xJQlBDJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzL2xpYi9wa2djb25maWcnLAorICdMSUJQTCc6ICcvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3NyYy9hbmRyb2lkL21hc3Rlci1uZGsvb3V0L2J1aWxkL2J1aWxkaG9zdC9kYXJ3aW4teDg2XzY0L2luc3RhbGwvaG9zdC10b29scy9saWIvcHl0aG9uMi43L2NvbmZpZycsCiAgJ0xJQlJBUlknOiAnbGlicHl0aG9uMi43LmEnLAogICdMSUJSQVJZX09CSlMnOiAnXFwnLAogICdMSUJTJzogJy1sZGwgIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24nLApAQCAtMzg4LDIwICszODgsMjAgQEAKICAnTUFDSERFUFBBVEgnOiAnOnBsYXQtZGFyd2luJywKICAnTUFDSERFUFMnOiAncGxhdC1kYXJ3aW4gcGxhdC1tYWMgcGxhdC1tYWMvQ2FyYm9uIHBsYXQtbWFjL2xpYi1zY3JpcHRwYWNrYWdlcyBcXCcsCiAgJ01BQ0hERVBfT0JKUyc6ICdQeXRob24vbWFjdG9vbGJveGdsdWUubycsCi0gJ01BQ0hERVNUTElCJzogJy9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43JywKKyAnTUFDSERFU1RMSUInOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL291dC9idWlsZC9idWlsZGhvc3QvZGFyd2luLXg4Nl82NC9pbnN0YWxsL2hvc3QtdG9vbHMvbGliL3B5dGhvbjIuNycsCiAgJ01BQ0hfQ19USFJFQURTJzogMCwKICAnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJzogJzEwLjgnLAogICdNQUlOQ0MnOiAneDg2XzY0LWFwcGxlLWRhcndpbi1nY2MnLAogICdNQUpPUl9JTl9NS0RFVic6IDAsCiAgJ01BSk9SX0lOX1NZU01BQ1JPUyc6IDAsCi0gJ01BS0VTRVRVUCc6ICcvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3JlcG9fY2xpZW50cy9odHRwc19fX2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbV9hX3BsYXRmb3JtX21hbmlmZXN0LmdpdC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41L01vZHVsZXMvbWFrZXNldHVwJywKLSAnTUFORElSJzogJy9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9zaGFyZS9tYW4nLAorICdNQUtFU0VUVVAnOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41L01vZHVsZXMvbWFrZXNldHVwJywKKyAnTUFORElSJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzL3NoYXJlL21hbicsCiAgJ01FTVRFU1RPUFRTJzogJy1sIC14IHRlc3Rfc3VicHJvY2VzcyB0ZXN0X2lvIHRlc3RfbGliMnRvMyBcXCAteCB0ZXN0X2RsIHRlc3RfX19hbGxfXyB0ZXN0X2ZvcmsxIFxcJywKLSAnTUtESVJfUCc6ICcvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3JlcG9fY2xpZW50cy9odHRwc19fX2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbV9hX3BsYXRmb3JtX21hbmlmZXN0LmdpdC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41L2luc3RhbGwtc2ggLWMgLWQnLAorICdNS0RJUl9QJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNS9pbnN0YWxsLXNoIC1jIC1kJywKICAnTU9ETElCUyc6ICcnLAogICdNT0RPQkpTJzogJ01vZHVsZXMvcG9zaXhtb2R1bGUubyAgTW9kdWxlcy90aHJlYWRtb2R1bGUubyAgTW9kdWxlcy9zaWduYWxtb2R1bGUubyAgTW9kdWxlcy9lcnJub21vZHVsZS5vICBNb2R1bGVzL19zcmUubyAgTW9kdWxlcy9fY29kZWNzbW9kdWxlLm8gIE1vZHVsZXMvX3dlYWtyZWYubyAgTW9kdWxlcy96aXBpbXBvcnQubyAgTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5vICBNb2R1bGVzL3h4c3VidHlwZS5vJywKICAnTU9EVUxFX09CSlMnOiAnXFwnLAotICdNU1lTVlBBVEgnOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9yZXBvX2NsaWVudHMvaHR0cHNfX19hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb21fYV9wbGF0Zm9ybV9tYW5pZmVzdC5naXQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNScsCisgJ01TWVNWUEFUSCc6ICcvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3NyYy9hbmRyb2lkL21hc3Rlci1uZGsvdG9vbGNoYWluL3B5dGhvbi9QeXRob24tMi43LjUnLAogICdNVUxUSUFSQ0gnOiAnJywKICAnTVZXREVMQ0hfSVNfRVhQUkVTU0lPTic6IDEsCiAgJ05UX1RIUkVBRFMnOiAwLApAQCAtNDI3LDcgKzQyNyw3IEBACiAgJ1BMQVRNQUNQQVRIJzogJzpwbGF0LW1hYzpwbGF0LW1hYy9saWItc2NyaXB0cGFja2FnZXMnLAogICdQT0JKUyc6ICdcXCcsCiAgJ1BPU0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQnOiAwLAotICdQUk9GSUxFX1RBU0snOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9yZXBvX2NsaWVudHMvaHR0cHNfX19hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb21fYV9wbGF0Zm9ybV9tYW5pZmVzdC5naXQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNS9Ub29scy9weWJlbmNoL3B5YmVuY2gucHkgLW4gMiAtLXdpdGgtZ2MgLS13aXRoLXN5c2NoZWNrJywKKyAnUFJPRklMRV9UQVNLJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNS9Ub29scy9weWJlbmNoL3B5YmVuY2gucHkgLW4gMiAtLXdpdGgtZ2MgLS13aXRoLXN5c2NoZWNrJywKICAnUFNSQ1MnOiAnXFwnLAogICdQVEhSRUFEX1NZU1RFTV9TQ0hFRF9TVVBQT1JURUQnOiAxLAogICdQVVJJRlknOiAnJywKQEAgLTQ0MSw3ICs0NDEsNyBAQAogICdQWVRIT05fRk9SX0JVSUxEJzogJy4vcHl0aG9uIC1FJywKICAnUFlUSE9OX0hFQURFUlMnOiAnXFwnLAogICdQWVRIT05fT0JKUyc6ICdcXCcsCi0gJ1BZX0NGTEFHUyc6ICctZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLU9zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1zIC1ETkRFQlVHIC1md3JhcHYgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLUkuIC1JSW5jbHVkZSAtSS9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3QvcmVwb19jbGllbnRzL2h0dHBzX19fYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tX2FfcGxhdGZvcm1fbWFuaWZlc3QuZ2l0L21hc3Rlci1uZGsvdG9vbGNoYWluL3B5dGhvbi9QeXRob24tMi43LjUvSW5jbHVkZSAgLURQeV9CVUlMRF9DT1JFJywKKyAnUFlfQ0ZMQUdTJzogJy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtT3MgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLXMgLUROREVCVUcgLWZ3cmFwdiAtTzMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtSS4gLUlJbmNsdWRlIC1JL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41L0luY2x1ZGUgIC1EUHlfQlVJTERfQ09SRScsCiAgJ1BZX0ZPUk1BVF9MT05HX0xPTkcnOiAnImxsIicsCiAgJ1BZX0ZPUk1BVF9TSVpFX1QnOiAnInoiJywKICAnUFlfVU5JQ09ERV9UWVBFJzogJ3Vuc2lnbmVkIHNob3J0JywKQEAgLTQ1NSw3ICs0NTUsNyBAQAogICdSRVNTUkNESVInOiAnTWFjL1Jlc291cmNlcy9mcmFtZXdvcmsnLAogICdSRVRTSUdUWVBFJzogJ3ZvaWQnLAogICdSVU5TSEFSRUQnOiAnJywKLSAnU0NSSVBURElSJzogJy9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWInLAorICdTQ1JJUFRESVInOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL291dC9idWlsZC9idWlsZGhvc3QvZGFyd2luLXg4Nl82NC9pbnN0YWxsL2hvc3QtdG9vbHMvbGliJywKICAnU0VUUEdSUF9IQVZFX0FSRyc6IDAsCiAgJ1NHSV9BQkknOiAnJywKICAnU0hFTEwnOiAnL2Jpbi9zaCcsCkBAIC00ODMsMTkgKzQ4MywxOSBAQAogICdTSVpFT0ZfX0JPT0wnOiAxLAogICdTTyc6ICcuc28nLAogICdTUkNESVJTJzogJ1BhcnNlciBHcmFtbWFyIE9iamVjdHMgUHl0aG9uIE1vZHVsZXMgTWFjJywKLSAnU1JDX0dEQl9IT09LUyc6ICcvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3JlcG9fY2xpZW50cy9odHRwc19fX2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbV9hX3BsYXRmb3JtX21hbmlmZXN0LmdpdC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41L1Rvb2xzL2dkYi9saWJweXRob24ucHknLAorICdTUkNfR0RCX0hPT0tTJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNS9Ub29scy9nZGIvbGlicHl0aG9uLnB5JywKICAnU1REQ19IRUFERVJTJzogMSwKICAnU1RSSUNUX1NZU1ZfQ1VSU0VTJzogIi8qIERvbid0IHVzZSBuY3Vyc2VzIGV4dGVuc2lvbnMgKi8iLAogICdTVFJJTkdMSUJfSEVBREVSUyc6ICdcXCcsCiAgJ1NVQkRJUlMnOiAnJywKICAnU1VCRElSU1RPTyc6ICdJbmNsdWRlIExpYiBNaXNjIERlbW8nLAotICdTVk5WRVJTSU9OJzogJ3N2bnZlcnNpb24gL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9yZXBvX2NsaWVudHMvaHR0cHNfX19hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb21fYV9wbGF0Zm9ybV9tYW5pZmVzdC5naXQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNScsCisgJ1NWTlZFUlNJT04nOiAnc3ZudmVyc2lvbiAvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3NyYy9hbmRyb2lkL21hc3Rlci1uZGsvdG9vbGNoYWluL3B5dGhvbi9QeXRob24tMi43LjUnLAogICdTWVNMSUJTJzogJycsCiAgJ1NZU19TRUxFQ1RfV0lUSF9TWVNfVElNRSc6IDEsCiAgJ1RBTkhfUFJFU0VSVkVTX1pFUk9fU0lHTic6IDEsCiAgJ1RFU1RPUFRTJzogJy1sJywKICAnVEVTVFBBVEgnOiAnJywKLSAnVEVTVFBST0cnOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9yZXBvX2NsaWVudHMvaHR0cHNfX19hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb21fYV9wbGF0Zm9ybV9tYW5pZmVzdC5naXQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9yZWdydGVzdC5weScsCisgJ1RFU1RQUk9HJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNS9MaWIvdGVzdC9yZWdydGVzdC5weScsCiAgJ1RFU1RQWVRIT04nOiAnLi9weXRob24gLVdkIC0zIC1FIC10dCcsCiAgJ1RFU1RQWVRIT05PUFRTJzogJycsCiAgJ1RIUkVBRE9CSic6ICdQeXRob24vdGhyZWFkLm8nLApAQCAtNTA3LDcgKzUwNyw3IEBACiAgJ1VTRV9UT09MQk9YX09CSkVDVF9HTFVFJzogMSwKICAnVkFfTElTVF9JU19BUlJBWSc6IDEsCiAgJ1ZFUlNJT04nOiAnMi43JywKLSAnVlBBVEgnOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9yZXBvX2NsaWVudHMvaHR0cHNfX19hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb21fYV9wbGF0Zm9ybV9tYW5pZmVzdC5naXQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNScsCisgJ1ZQQVRIJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNScsCiAgJ1dBTlRfU0lHRlBFX0hBTkRMRVInOiAwLAogICdXQU5UX1dDVFlQRV9GVU5DVElPTlMnOiAwLAogICdXSU5ET1dfSEFTX0ZMQUdTJzogMCwKQEAgLTUyMiwxMSArNTIyLDExIEBACiAgJ1dJVEhfVkFMR1JJTkQnOiAwLAogICdYODdfRE9VQkxFX1JPVU5ESU5HJzogMCwKICAnWE1MTElCU1VCRElSUyc6ICd4bWwgeG1sL2RvbSB4bWwvZXRyZWUgeG1sL3BhcnNlcnMgeG1sL3NheCcsCi0gJ2Fic19idWlsZGRpcic6ICcvYnVpbGRib3QvdG1wL2J1aWxkaG9zdC9idWlsZC1weXRob24tZGFyd2luLXg4Nl82NC0yLjcuNScsCi0gJ2Fic19zcmNkaXInOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9yZXBvX2NsaWVudHMvaHR0cHNfX19hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb21fYV9wbGF0Zm9ybV9tYW5pZmVzdC5naXQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNScsCisgJ2Fic19idWlsZGRpcic6ICcvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3NyYy9hbmRyb2lkL21hc3Rlci1uZGsvb3V0L2J1aWxkL2J1aWxkaG9zdC9idWlsZC1weXRob24tZGFyd2luLXg4Nl82NC0yLjcuNScsCisgJ2Fic19zcmNkaXInOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41JywKICAnYnVpbGQnOiAneDg2XzY0LWFwcGxlLWRhcndpbicsCi0gJ2RhdGFyb290ZGlyJzogJy9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9zaGFyZScsCi0gJ2V4ZWNfcHJlZml4JzogJy9idWlsZGJvdC90bXAvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NCcsCisgJ2RhdGFyb290ZGlyJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzL3NoYXJlJywKKyAnZXhlY19wcmVmaXgnOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL291dC9idWlsZC9idWlsZGhvc3QvZGFyd2luLXg4Nl82NC9pbnN0YWxsL2hvc3QtdG9vbHMnLAogICdob3N0JzogJ3g4Nl82NC1hcHBsZS1kYXJ3aW4nLAotICdwcmVmaXgnOiAnL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0JywKLSAnc3JjZGlyJzogJy9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3QvcmVwb19jbGllbnRzL2h0dHBzX19fYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tX2FfcGxhdGZvcm1fbWFuaWZlc3QuZ2l0L21hc3Rlci1uZGsvdG9vbGNoYWluL3B5dGhvbi9QeXRob24tMi43LjUnfQorICdwcmVmaXgnOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL291dC9idWlsZC9idWlsZGhvc3QvZGFyd2luLXg4Nl82NC9pbnN0YWxsL2hvc3QtdG9vbHMnLAorICdzcmNkaXInOiAnL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41J30KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2ZpeGVycy9teWZpeGVzL19faW5pdF9fLnB5IGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L19faW5pdF9fLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL215Zml4ZXMvX19pbml0X18ucHkKY29weSB0byBsaWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2FsbC5weSBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2FsbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWVmMWFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfYWxsLnB5CkBAIC0wLDAgKzEsNjIzIEBACisiIiJSdW4gYWxsIHRlc3QgY2FzZXMuCisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK3RyeToKKyAgICAjIEZvciBQeXRob25zIHcvZGlzdHV0aWxzIHB5YnNkZGIKKyAgICBpbXBvcnQgYnNkZGIzIGFzIGJzZGRiCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyBGb3IgUHl0aG9uIDIuMworICAgIGltcG9ydCBic2RkYgorCisKK2lmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMyA6CisgICAgY2hhcnNldCA9ICJpc284ODU5LTEiICAjIEZ1bGwgOCBiaXQKKworICAgIGNsYXNzIGxvZ2N1cnNvcl9weTNrKG9iamVjdCkgOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZW52KSA6CisgICAgICAgICAgICBzZWxmLl9sb2djdXJzb3IgPSBlbnYubG9nX2N1cnNvcigpCisKKyAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIHYpIDoKKyAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX2xvZ2N1cnNvciwgdikKKworICAgICAgICBkZWYgX19uZXh0X18oc2VsZikgOgorICAgICAgICAgICAgdiA9IGdldGF0dHIoc2VsZi5fbG9nY3Vyc29yLCAibmV4dCIpKCkKKyAgICAgICAgICAgIGlmIHYgaXMgbm90IE5vbmUgOgorICAgICAgICAgICAgICAgIHYgPSAodlswXSwgdlsxXS5kZWNvZGUoY2hhcnNldCkpCisgICAgICAgICAgICByZXR1cm4gdgorCisgICAgICAgIG5leHQgPSBfX25leHRfXworCisgICAgICAgIGRlZiBmaXJzdChzZWxmKSA6CisgICAgICAgICAgICB2ID0gc2VsZi5fbG9nY3Vyc29yLmZpcnN0KCkKKyAgICAgICAgICAgIGlmIHYgaXMgbm90IE5vbmUgOgorICAgICAgICAgICAgICAgIHYgPSAodlswXSwgdlsxXS5kZWNvZGUoY2hhcnNldCkpCisgICAgICAgICAgICByZXR1cm4gdgorCisgICAgICAgIGRlZiBsYXN0KHNlbGYpIDoKKyAgICAgICAgICAgIHYgPSBzZWxmLl9sb2djdXJzb3IubGFzdCgpCisgICAgICAgICAgICBpZiB2IGlzIG5vdCBOb25lIDoKKyAgICAgICAgICAgICAgICB2ID0gKHZbMF0sIHZbMV0uZGVjb2RlKGNoYXJzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHYKKworICAgICAgICBkZWYgcHJldihzZWxmKSA6CisgICAgICAgICAgICB2ID0gc2VsZi5fbG9nY3Vyc29yLnByZXYoKQorICAgICAgICAgICAgaWYgdiBpcyBub3QgTm9uZSA6CisgICAgICAgICAgICAgICAgdiA9ICh2WzBdLCB2WzFdLmRlY29kZShjaGFyc2V0KSkKKyAgICAgICAgICAgIHJldHVybiB2CisKKyAgICAgICAgZGVmIGN1cnJlbnQoc2VsZikgOgorICAgICAgICAgICAgdiA9IHNlbGYuX2xvZ2N1cnNvci5jdXJyZW50KCkKKyAgICAgICAgICAgIGlmIHYgaXMgbm90IE5vbmUgOgorICAgICAgICAgICAgICAgIHYgPSAodlswXSwgdlsxXS5kZWNvZGUoY2hhcnNldCkpCisgICAgICAgICAgICByZXR1cm4gdgorCisgICAgICAgIGRlZiBzZXQoc2VsZiwgbHNuKSA6CisgICAgICAgICAgICB2ID0gc2VsZi5fbG9nY3Vyc29yLnNldChsc24pCisgICAgICAgICAgICBpZiB2IGlzIG5vdCBOb25lIDoKKyAgICAgICAgICAgICAgICB2ID0gKHZbMF0sIHZbMV0uZGVjb2RlKGNoYXJzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHYKKworICAgIGNsYXNzIGN1cnNvcl9weTNrKG9iamVjdCkgOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZGIsICphcmdzLCAqKmt3YXJncykgOgorICAgICAgICAgICAgc2VsZi5fZGJjdXJzb3IgPSBkYi5jdXJzb3IoKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCB2KSA6CisgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9kYmN1cnNvciwgdikKKworICAgICAgICBkZWYgX2ZpeChzZWxmLCB2KSA6CisgICAgICAgICAgICBpZiB2IGlzIE5vbmUgOiByZXR1cm4gTm9uZQorICAgICAgICAgICAga2V5LCB2YWx1ZSA9IHYKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBieXRlcykgOgorICAgICAgICAgICAgICAgIGtleSA9IGtleS5kZWNvZGUoY2hhcnNldCkKKyAgICAgICAgICAgIHJldHVybiAoa2V5LCB2YWx1ZS5kZWNvZGUoY2hhcnNldCkpCisKKyAgICAgICAgZGVmIF9fbmV4dF9fKHNlbGYpIDoKKyAgICAgICAgICAgIHYgPSBnZXRhdHRyKHNlbGYuX2RiY3Vyc29yLCAibmV4dCIpKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9maXgodikKKworICAgICAgICBuZXh0ID0gX19uZXh0X18KKworICAgICAgICBkZWYgcHJldmlvdXMoc2VsZikgOgorICAgICAgICAgICAgdiA9IHNlbGYuX2RiY3Vyc29yLnByZXZpb3VzKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9maXgodikKKworICAgICAgICBkZWYgbGFzdChzZWxmKSA6CisgICAgICAgICAgICB2ID0gc2VsZi5fZGJjdXJzb3IubGFzdCgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZml4KHYpCisKKyAgICAgICAgZGVmIHNldChzZWxmLCBrKSA6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGssIHN0cikgOgorICAgICAgICAgICAgICAgIGsgPSBieXRlcyhrLCBjaGFyc2V0KQorICAgICAgICAgICAgdiA9IHNlbGYuX2RiY3Vyc29yLnNldChrKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpeCh2KQorCisgICAgICAgIGRlZiBzZXRfcmVjbm8oc2VsZiwgbnVtKSA6CisgICAgICAgICAgICB2ID0gc2VsZi5fZGJjdXJzb3Iuc2V0X3JlY25vKG51bSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9maXgodikKKworICAgICAgICBkZWYgc2V0X3JhbmdlKHNlbGYsIGssIGRsZW49LTEsIGRvZmY9LTEpIDoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoaywgc3RyKSA6CisgICAgICAgICAgICAgICAgayA9IGJ5dGVzKGssIGNoYXJzZXQpCisgICAgICAgICAgICB2ID0gc2VsZi5fZGJjdXJzb3Iuc2V0X3JhbmdlKGssIGRsZW49ZGxlbiwgZG9mZj1kb2ZmKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpeCh2KQorCisgICAgICAgIGRlZiBkdXAoc2VsZiwgZmxhZ3M9MCkgOgorICAgICAgICAgICAgY3Vyc29yID0gc2VsZi5fZGJjdXJzb3IuZHVwKGZsYWdzKQorICAgICAgICAgICAgcmV0dXJuIGR1cF9jdXJzb3JfcHkzayhjdXJzb3IpCisKKyAgICAgICAgZGVmIG5leHRfZHVwKHNlbGYpIDoKKyAgICAgICAgICAgIHYgPSBzZWxmLl9kYmN1cnNvci5uZXh0X2R1cCgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZml4KHYpCisKKyAgICAgICAgZGVmIG5leHRfbm9kdXAoc2VsZikgOgorICAgICAgICAgICAgdiA9IHNlbGYuX2RiY3Vyc29yLm5leHRfbm9kdXAoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpeCh2KQorCisgICAgICAgIGRlZiBwdXQoc2VsZiwga2V5LCBkYXRhLCBmbGFncz0wLCBkbGVuPS0xLCBkb2ZmPS0xKSA6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgc3RyKSA6CisgICAgICAgICAgICAgICAga2V5ID0gYnl0ZXMoa2V5LCBjaGFyc2V0KQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkYXRhLCBzdHIpIDoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGJ5dGVzKGRhdGEsIGNoYXJzZXQpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGJjdXJzb3IucHV0KGtleSwgZGF0YSwgZmxhZ3M9ZmxhZ3MsIGRsZW49ZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgZG9mZj1kb2ZmKQorCisgICAgICAgIGRlZiBjdXJyZW50KHNlbGYsIGZsYWdzPTAsIGRsZW49LTEsIGRvZmY9LTEpIDoKKyAgICAgICAgICAgIHYgPSBzZWxmLl9kYmN1cnNvci5jdXJyZW50KGZsYWdzPWZsYWdzLCBkbGVuPWRsZW4sIGRvZmY9ZG9mZikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9maXgodikKKworICAgICAgICBkZWYgZmlyc3Qoc2VsZikgOgorICAgICAgICAgICAgdiA9IHNlbGYuX2RiY3Vyc29yLmZpcnN0KCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9maXgodikKKworICAgICAgICBkZWYgcGdldChzZWxmLCBrZXk9Tm9uZSwgZGF0YT1Ob25lLCBmbGFncz0wKSA6CisgICAgICAgICAgICAjIEluY29ycmVjdCBiZWNhdXNlIGtleSBjYW4gYmUgYSBiYXJlIG51bWJlciwKKyAgICAgICAgICAgICMgYnV0IGVub3VnaCB0byBwYXNzIHRlc3RzdWl0ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIGludCkgYW5kIChkYXRhIGlzIE5vbmUpIGFuZCAoZmxhZ3MgPT0gMCkgOgorICAgICAgICAgICAgICAgIGZsYWdzID0ga2V5CisgICAgICAgICAgICAgICAga2V5ID0gTm9uZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cikgOgorICAgICAgICAgICAgICAgIGtleSA9IGJ5dGVzKGtleSwgY2hhcnNldCkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgaW50KSBhbmQgKGZsYWdzPT0wKSA6CisgICAgICAgICAgICAgICAgZmxhZ3MgPSBkYXRhCisgICAgICAgICAgICAgICAgZGF0YSA9IE5vbmUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgc3RyKSA6CisgICAgICAgICAgICAgICAgZGF0YSA9IGJ5dGVzKGRhdGEsIGNoYXJzZXQpCisgICAgICAgICAgICB2PXNlbGYuX2RiY3Vyc29yLnBnZXQoa2V5PWtleSwgZGF0YT1kYXRhLCBmbGFncz1mbGFncykKKyAgICAgICAgICAgIGlmIHYgaXMgbm90IE5vbmUgOgorICAgICAgICAgICAgICAgIHYxLCB2MiwgdjMgPSB2CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2MSwgYnl0ZXMpIDoKKyAgICAgICAgICAgICAgICAgICAgdjEgPSB2MS5kZWNvZGUoY2hhcnNldCkKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHYyLCBieXRlcykgOgorICAgICAgICAgICAgICAgICAgICB2MiA9IHYyLmRlY29kZShjaGFyc2V0KQorCisgICAgICAgICAgICAgICAgdiA9ICh2MSwgdjIsIHYzLmRlY29kZShjaGFyc2V0KSkKKworICAgICAgICAgICAgcmV0dXJuIHYKKworICAgICAgICBkZWYgam9pbl9pdGVtKHNlbGYpIDoKKyAgICAgICAgICAgIHYgPSBzZWxmLl9kYmN1cnNvci5qb2luX2l0ZW0oKQorICAgICAgICAgICAgaWYgdiBpcyBub3QgTm9uZSA6CisgICAgICAgICAgICAgICAgdiA9IHYuZGVjb2RlKGNoYXJzZXQpCisgICAgICAgICAgICByZXR1cm4gdgorCisgICAgICAgIGRlZiBnZXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKSA6CisgICAgICAgICAgICBsID0gbGVuKGFyZ3MpCisgICAgICAgICAgICBpZiBsID09IDIgOgorICAgICAgICAgICAgICAgIGssIGYgPSBhcmdzCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrLCBzdHIpIDoKKyAgICAgICAgICAgICAgICAgICAgayA9IGJ5dGVzKGssICJpc284ODU5LTEiKQorICAgICAgICAgICAgICAgIGFyZ3MgPSAoaywgZikKKyAgICAgICAgICAgIGVsaWYgbCA9PSAzIDoKKyAgICAgICAgICAgICAgICBrLCBkLCBmID0gYXJncworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoaywgc3RyKSA6CisgICAgICAgICAgICAgICAgICAgIGsgPSBieXRlcyhrLCBjaGFyc2V0KQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZCwgc3RyKSA6CisgICAgICAgICAgICAgICAgICAgIGQgPSBieXRlcyhkLCBjaGFyc2V0KQorICAgICAgICAgICAgICAgIGFyZ3MgPShrLCBkLCBmKQorCisgICAgICAgICAgICB2ID0gc2VsZi5fZGJjdXJzb3IuZ2V0KCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIGlmIHYgaXMgbm90IE5vbmUgOgorICAgICAgICAgICAgICAgIGssIHYgPSB2CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrLCBieXRlcykgOgorICAgICAgICAgICAgICAgICAgICBrID0gay5kZWNvZGUoY2hhcnNldCkKKyAgICAgICAgICAgICAgICB2ID0gKGssIHYuZGVjb2RlKGNoYXJzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHYKKworICAgICAgICBkZWYgZ2V0X2JvdGgoc2VsZiwga2V5LCB2YWx1ZSkgOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cikgOgorICAgICAgICAgICAgICAgIGtleSA9IGJ5dGVzKGtleSwgY2hhcnNldCkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cikgOgorICAgICAgICAgICAgICAgIHZhbHVlID0gYnl0ZXModmFsdWUsIGNoYXJzZXQpCisgICAgICAgICAgICB2PXNlbGYuX2RiY3Vyc29yLmdldF9ib3RoKGtleSwgdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZml4KHYpCisKKyAgICBjbGFzcyBkdXBfY3Vyc29yX3B5M2soY3Vyc29yX3B5M2spIDoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRiY3Vyc29yKSA6CisgICAgICAgICAgICBzZWxmLl9kYmN1cnNvciA9IGRiY3Vyc29yCisKKyAgICBjbGFzcyBEQl9weTNrKG9iamVjdCkgOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKSA6CisgICAgICAgICAgICBhcmdzMj1bXQorICAgICAgICAgICAgZm9yIGkgaW4gYXJncyA6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpLCBEQkVudl9weTNrKSA6CisgICAgICAgICAgICAgICAgICAgIGkgPSBpLl9kYmVudgorICAgICAgICAgICAgICAgIGFyZ3MyLmFwcGVuZChpKQorICAgICAgICAgICAgYXJncyA9IHR1cGxlKGFyZ3MyKQorICAgICAgICAgICAgZm9yIGssIHYgaW4ga3dhcmdzLml0ZW1zKCkgOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodiwgREJFbnZfcHkzaykgOgorICAgICAgICAgICAgICAgICAgICBrd2FyZ3Nba10gPSB2Ll9kYmVudgorCisgICAgICAgICAgICBzZWxmLl9kYiA9IGJzZGRiLl9kYi5EQl9vcmlnKCphcmdzLCAqKmt3YXJncykKKworICAgICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGspIDoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoaywgc3RyKSA6CisgICAgICAgICAgICAgICAgayA9IGJ5dGVzKGssIGNoYXJzZXQpCisgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9kYiwgImhhc19rZXkiKShrKQorCisgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrKSA6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGssIHN0cikgOgorICAgICAgICAgICAgICAgIGsgPSBieXRlcyhrLCBjaGFyc2V0KQorICAgICAgICAgICAgdiA9IHNlbGYuX2RiW2tdCisgICAgICAgICAgICBpZiB2IGlzIG5vdCBOb25lIDoKKyAgICAgICAgICAgICAgICB2ID0gdi5kZWNvZGUoY2hhcnNldCkKKyAgICAgICAgICAgIHJldHVybiB2CisKKyAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGssIHYpIDoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoaywgc3RyKSA6CisgICAgICAgICAgICAgICAgayA9IGJ5dGVzKGssIGNoYXJzZXQpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHYsIHN0cikgOgorICAgICAgICAgICAgICAgIHYgPSBieXRlcyh2LCBjaGFyc2V0KQorICAgICAgICAgICAgc2VsZi5fZGJba10gPSB2CisKKyAgICAgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGspIDoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoaywgc3RyKSA6CisgICAgICAgICAgICAgICAgayA9IGJ5dGVzKGssIGNoYXJzZXQpCisgICAgICAgICAgICBkZWwgc2VsZi5fZGJba10KKworICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgdikgOgorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fZGIsIHYpCisKKyAgICAgICAgZGVmIF9fbGVuX18oc2VsZikgOgorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9kYikKKworICAgICAgICBkZWYgaGFzX2tleShzZWxmLCBrLCB0eG49Tm9uZSkgOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrLCBzdHIpIDoKKyAgICAgICAgICAgICAgICBrID0gYnl0ZXMoaywgY2hhcnNldCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kYi5oYXNfa2V5KGssIHR4bj10eG4pCisKKyAgICAgICAgZGVmIHNldF9yZV9kZWxpbShzZWxmLCBjKSA6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGMsIHN0cikgOiAgIyBXZSBjYW4gdXNlIGEgbnVtZXJpYyB2YWx1ZSBieXRlIHRvbworICAgICAgICAgICAgICAgIGMgPSBieXRlcyhjLCBjaGFyc2V0KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RiLnNldF9yZV9kZWxpbShjKQorCisgICAgICAgIGRlZiBzZXRfcmVfcGFkKHNlbGYsIGMpIDoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYywgc3RyKSA6ICAjIFdlIGNhbiB1c2UgYSBudW1lcmljIHZhbHVlIGJ5dGUgdG9vCisgICAgICAgICAgICAgICAgYyA9IGJ5dGVzKGMsIGNoYXJzZXQpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGIuc2V0X3JlX3BhZChjKQorCisgICAgICAgIGRlZiBnZXRfcmVfc291cmNlKHNlbGYpIDoKKyAgICAgICAgICAgIHNvdXJjZSA9IHNlbGYuX2RiLmdldF9yZV9zb3VyY2UoKQorICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5kZWNvZGUoY2hhcnNldCkKKworICAgICAgICBkZWYgcHV0KHNlbGYsIGtleSwgZGF0YSwgdHhuPU5vbmUsIGZsYWdzPTAsIGRsZW49LTEsIGRvZmY9LTEpIDoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpIDoKKyAgICAgICAgICAgICAgICBrZXkgPSBieXRlcyhrZXksIGNoYXJzZXQpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRhdGEsIHN0cikgOgorICAgICAgICAgICAgICAgIHZhbHVlID0gYnl0ZXMoZGF0YSwgY2hhcnNldCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kYi5wdXQoa2V5LCBkYXRhLCBmbGFncz1mbGFncywgdHhuPXR4biwgZGxlbj1kbGVuLAorICAgICAgICAgICAgICAgICAgICBkb2ZmPWRvZmYpCisKKyAgICAgICAgZGVmIGFwcGVuZChzZWxmLCB2YWx1ZSwgdHhuPU5vbmUpIDoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cikgOgorICAgICAgICAgICAgICAgIHZhbHVlID0gYnl0ZXModmFsdWUsIGNoYXJzZXQpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGIuYXBwZW5kKHZhbHVlLCB0eG49dHhuKQorCisgICAgICAgIGRlZiBnZXRfc2l6ZShzZWxmLCBrZXkpIDoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpIDoKKyAgICAgICAgICAgICAgICBrZXkgPSBieXRlcyhrZXksIGNoYXJzZXQpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGIuZ2V0X3NpemUoa2V5KQorCisgICAgICAgIGRlZiBleGlzdHMoc2VsZiwga2V5LCAqYXJncywgKiprd2FyZ3MpIDoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpIDoKKyAgICAgICAgICAgICAgICBrZXkgPSBieXRlcyhrZXksIGNoYXJzZXQpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGIuZXhpc3RzKGtleSwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PSJNYWdpY0Nvb2tpZSIsIHR4bj1Ob25lLCBmbGFncz0wLCBkbGVuPS0xLCBkb2ZmPS0xKSA6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgc3RyKSA6CisgICAgICAgICAgICAgICAga2V5ID0gYnl0ZXMoa2V5LCBjaGFyc2V0KQorICAgICAgICAgICAgaWYgZGVmYXVsdCAhPSAiTWFnaWNDb29raWUiIDogICMgTWFnaWMgZm9yICd0ZXN0X2dldF9ub25lLnB5JworICAgICAgICAgICAgICAgIHY9c2VsZi5fZGIuZ2V0KGtleSwgZGVmYXVsdD1kZWZhdWx0LCB0eG49dHhuLCBmbGFncz1mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRsZW49ZGxlbiwgZG9mZj1kb2ZmKQorICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgdj1zZWxmLl9kYi5nZXQoa2V5LCB0eG49dHhuLCBmbGFncz1mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRsZW49ZGxlbiwgZG9mZj1kb2ZmKQorICAgICAgICAgICAgaWYgKHYgaXMgbm90IE5vbmUpIGFuZCBpc2luc3RhbmNlKHYsIGJ5dGVzKSA6CisgICAgICAgICAgICAgICAgdiA9IHYuZGVjb2RlKGNoYXJzZXQpCisgICAgICAgICAgICByZXR1cm4gdgorCisgICAgICAgIGRlZiBwZ2V0KHNlbGYsIGtleSwgdHhuPU5vbmUpIDoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpIDoKKyAgICAgICAgICAgICAgICBrZXkgPSBieXRlcyhrZXksIGNoYXJzZXQpCisgICAgICAgICAgICB2PXNlbGYuX2RiLnBnZXQoa2V5LCB0eG49dHhuKQorICAgICAgICAgICAgaWYgdiBpcyBub3QgTm9uZSA6CisgICAgICAgICAgICAgICAgdjEsIHYyID0gdgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodjEsIGJ5dGVzKSA6CisgICAgICAgICAgICAgICAgICAgIHYxID0gdjEuZGVjb2RlKGNoYXJzZXQpCisKKyAgICAgICAgICAgICAgICB2ID0gKHYxLCB2Mi5kZWNvZGUoY2hhcnNldCkpCisgICAgICAgICAgICByZXR1cm4gdgorCisgICAgICAgIGRlZiBnZXRfYm90aChzZWxmLCBrZXksIHZhbHVlLCB0eG49Tm9uZSwgZmxhZ3M9MCkgOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cikgOgorICAgICAgICAgICAgICAgIGtleSA9IGJ5dGVzKGtleSwgY2hhcnNldCkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cikgOgorICAgICAgICAgICAgICAgIHZhbHVlID0gYnl0ZXModmFsdWUsIGNoYXJzZXQpCisgICAgICAgICAgICB2PXNlbGYuX2RiLmdldF9ib3RoKGtleSwgdmFsdWUsIHR4bj10eG4sIGZsYWdzPWZsYWdzKQorICAgICAgICAgICAgaWYgdiBpcyBub3QgTm9uZSA6CisgICAgICAgICAgICAgICAgdiA9IHYuZGVjb2RlKGNoYXJzZXQpCisgICAgICAgICAgICByZXR1cm4gdgorCisgICAgICAgIGRlZiBkZWxldGUoc2VsZiwga2V5LCB0eG49Tm9uZSkgOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cikgOgorICAgICAgICAgICAgICAgIGtleSA9IGJ5dGVzKGtleSwgY2hhcnNldCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kYi5kZWxldGUoa2V5LCB0eG49dHhuKQorCisgICAgICAgIGRlZiBrZXlzKHNlbGYpIDoKKyAgICAgICAgICAgIGsgPSBzZWxmLl9kYi5rZXlzKCkKKyAgICAgICAgICAgIGlmIGxlbihrKSBhbmQgaXNpbnN0YW5jZShrWzBdLCBieXRlcykgOgorICAgICAgICAgICAgICAgIHJldHVybiBbaS5kZWNvZGUoY2hhcnNldCkgZm9yIGkgaW4gc2VsZi5fZGIua2V5cygpXQorICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgcmV0dXJuIGsKKworICAgICAgICBkZWYgaXRlbXMoc2VsZikgOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2RiLml0ZW1zKCkKKyAgICAgICAgICAgIGlmIG5vdCBsZW4oZGF0YSkgOiByZXR1cm4gZGF0YQorICAgICAgICAgICAgZGF0YTIgPSBbXQorICAgICAgICAgICAgZm9yIGssIHYgaW4gZGF0YSA6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrLCBieXRlcykgOgorICAgICAgICAgICAgICAgICAgICBrID0gay5kZWNvZGUoY2hhcnNldCkKKyAgICAgICAgICAgICAgICBkYXRhMi5hcHBlbmQoKGssIHYuZGVjb2RlKGNoYXJzZXQpKSkKKyAgICAgICAgICAgIHJldHVybiBkYXRhMgorCisgICAgICAgIGRlZiBhc3NvY2lhdGUoc2VsZiwgc2Vjb25kYXJ5ZGIsIGNhbGxiYWNrLCBmbGFncz0wLCB0eG49Tm9uZSkgOgorICAgICAgICAgICAgY2xhc3MgYXNzb2NpYXRlX2NhbGxiYWNrKG9iamVjdCkgOgorICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWxsYmFjaykgOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsYmFjayA9IGNhbGxiYWNrCisKKyAgICAgICAgICAgICAgICBkZWYgY2FsbGJhY2soc2VsZiwga2V5LCBkYXRhKSA6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5kZWNvZGUoY2hhcnNldCkKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZGVjb2RlKGNoYXJzZXQpCisgICAgICAgICAgICAgICAgICAgIGtleSA9IHNlbGYuX2NhbGxiYWNrKGtleSwgZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPSBic2RkYi5fZGIuREJfRE9OT1RJTkRFWCkgOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cikgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGJ5dGVzKGtleSwgY2hhcnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIGxpc3QpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkyID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiBrZXkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGksIHN0cikgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGJ5dGVzKGksIGNoYXJzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTIuYXBwZW5kKGkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5MgorICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kYi5hc3NvY2lhdGUoc2Vjb25kYXJ5ZGIuX2RiLAorICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGVfY2FsbGJhY2soY2FsbGJhY2spLmNhbGxiYWNrLCBmbGFncz1mbGFncywKKyAgICAgICAgICAgICAgICAgICAgdHhuPXR4bikKKworICAgICAgICBkZWYgY3Vyc29yKHNlbGYsIHR4bj1Ob25lLCBmbGFncz0wKSA6CisgICAgICAgICAgICByZXR1cm4gY3Vyc29yX3B5M2soc2VsZi5fZGIsIHR4bj10eG4sIGZsYWdzPWZsYWdzKQorCisgICAgICAgIGRlZiBqb2luKHNlbGYsIGN1cnNvcl9saXN0KSA6CisgICAgICAgICAgICBjdXJzb3JfbGlzdCA9IFtpLl9kYmN1cnNvciBmb3IgaSBpbiBjdXJzb3JfbGlzdF0KKyAgICAgICAgICAgIHJldHVybiBkdXBfY3Vyc29yX3B5M2soc2VsZi5fZGIuam9pbihjdXJzb3JfbGlzdCkpCisKKyAgICBjbGFzcyBEQkVudl9weTNrKG9iamVjdCkgOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKSA6CisgICAgICAgICAgICBzZWxmLl9kYmVudiA9IGJzZGRiLl9kYi5EQkVudl9vcmlnKCphcmdzLCAqKmt3YXJncykKKworICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgdikgOgorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fZGJlbnYsIHYpCisKKyAgICAgICAgZGVmIGxvZ19jdXJzb3Ioc2VsZiwgZmxhZ3M9MCkgOgorICAgICAgICAgICAgcmV0dXJuIGxvZ2N1cnNvcl9weTNrKHNlbGYuX2RiZW52KQorCisgICAgICAgIGRlZiBnZXRfbGdfZGlyKHNlbGYpIDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kYmVudi5nZXRfbGdfZGlyKCkuZGVjb2RlKGNoYXJzZXQpCisKKyAgICAgICAgZGVmIGdldF90bXBfZGlyKHNlbGYpIDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kYmVudi5nZXRfdG1wX2RpcigpLmRlY29kZShjaGFyc2V0KQorCisgICAgICAgIGRlZiBnZXRfZGF0YV9kaXJzKHNlbGYpIDoKKyAgICAgICAgICAgIHJldHVybiB0dXBsZSgKKyAgICAgICAgICAgICAgICAoaS5kZWNvZGUoY2hhcnNldCkgZm9yIGkgaW4gc2VsZi5fZGJlbnYuZ2V0X2RhdGFfZGlycygpKSkKKworICAgIGNsYXNzIERCU2VxdWVuY2VfcHkzayhvYmplY3QpIDoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRiLCAqYXJncywgKiprd2FyZ3MpIDoKKyAgICAgICAgICAgIHNlbGYuX2RiPWRiCisgICAgICAgICAgICBzZWxmLl9kYnNlcXVlbmNlID0gYnNkZGIuX2RiLkRCU2VxdWVuY2Vfb3JpZyhkYi5fZGIsICphcmdzLCAqKmt3YXJncykKKworICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgdikgOgorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fZGJzZXF1ZW5jZSwgdikKKworICAgICAgICBkZWYgb3BlbihzZWxmLCBrZXksICphcmdzLCAqKmt3YXJncykgOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Ric2VxdWVuY2Uub3BlbihieXRlcyhrZXksIGNoYXJzZXQpLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgZGVmIGdldF9rZXkoc2VsZikgOgorICAgICAgICAgICAgcmV0dXJuICBzZWxmLl9kYnNlcXVlbmNlLmdldF9rZXkoKS5kZWNvZGUoY2hhcnNldCkKKworICAgICAgICBkZWYgZ2V0X2RicChzZWxmKSA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGIKKworICAgIGltcG9ydCBzdHJpbmcKKyAgICBzdHJpbmcubGV0dGVycz1bY2hyKGkpIGZvciBpIGluIHhyYW5nZSg2NSw5MSldCisKKyAgICBic2RkYi5fZGIuREJFbnZfb3JpZyA9IGJzZGRiLl9kYi5EQkVudgorICAgIGJzZGRiLl9kYi5EQl9vcmlnID0gYnNkZGIuX2RiLkRCCisgICAgaWYgYnNkZGIuZGIudmVyc2lvbigpIDw9ICg0LCAzKSA6CisgICAgICAgIGJzZGRiLl9kYi5EQlNlcXVlbmNlX29yaWcgPSBOb25lCisgICAgZWxzZSA6CisgICAgICAgIGJzZGRiLl9kYi5EQlNlcXVlbmNlX29yaWcgPSBic2RkYi5fZGIuREJTZXF1ZW5jZQorCisgICAgZGVmIGRvX3Byb3h5X2RiX3B5M2soZmxhZykgOgorICAgICAgICBmbGFnMiA9IGRvX3Byb3h5X2RiX3B5M2suZmxhZworICAgICAgICBkb19wcm94eV9kYl9weTNrLmZsYWcgPSBmbGFnCisgICAgICAgIGlmIGZsYWcgOgorICAgICAgICAgICAgYnNkZGIuREJFbnYgPSBic2RkYi5kYi5EQkVudiA9IGJzZGRiLl9kYi5EQkVudiA9IERCRW52X3B5M2sKKyAgICAgICAgICAgIGJzZGRiLkRCID0gYnNkZGIuZGIuREIgPSBic2RkYi5fZGIuREIgPSBEQl9weTNrCisgICAgICAgICAgICBic2RkYi5fZGIuREJTZXF1ZW5jZSA9IERCU2VxdWVuY2VfcHkzaworICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgIGJzZGRiLkRCRW52ID0gYnNkZGIuZGIuREJFbnYgPSBic2RkYi5fZGIuREJFbnYgPSBic2RkYi5fZGIuREJFbnZfb3JpZworICAgICAgICAgICAgYnNkZGIuREIgPSBic2RkYi5kYi5EQiA9IGJzZGRiLl9kYi5EQiA9IGJzZGRiLl9kYi5EQl9vcmlnCisgICAgICAgICAgICBic2RkYi5fZGIuREJTZXF1ZW5jZSA9IGJzZGRiLl9kYi5EQlNlcXVlbmNlX29yaWcKKyAgICAgICAgcmV0dXJuIGZsYWcyCisKKyAgICBkb19wcm94eV9kYl9weTNrLmZsYWcgPSBGYWxzZQorICAgIGRvX3Byb3h5X2RiX3B5M2soVHJ1ZSkKKwordHJ5OgorICAgICMgRm9yIFB5dGhvbnMgdy9kaXN0dXRpbHMgcHlic2RkYgorICAgIGZyb20gYnNkZGIzIGltcG9ydCBkYiwgZGJ0YWJsZXMsIGRidXRpbHMsIGRic2hlbHZlLCBcCisgICAgICAgICAgICBoYXNob3BlbiwgYnRvcGVuLCBybm9wZW4sIGRib2JqCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyBGb3IgUHl0aG9uIDIuMworICAgIGZyb20gYnNkZGIgaW1wb3J0IGRiLCBkYnRhYmxlcywgZGJ1dGlscywgZGJzaGVsdmUsIFwKKyAgICAgICAgICAgIGhhc2hvcGVuLCBidG9wZW4sIHJub3BlbiwgZGJvYmoKKwordHJ5OgorICAgIGZyb20gYnNkZGIzIGltcG9ydCB0ZXN0X3N1cHBvcnQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisgICAgZWxzZSA6CisgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCBhcyB0ZXN0X3N1cHBvcnQKKworCit0cnk6CisgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgorICAgICAgICBmcm9tIHRocmVhZGluZyBpbXBvcnQgVGhyZWFkLCBjdXJyZW50VGhyZWFkCisgICAgICAgIGRlbCBUaHJlYWQsIGN1cnJlbnRUaHJlYWQKKyAgICBlbHNlIDoKKyAgICAgICAgZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZCwgY3VycmVudF90aHJlYWQKKyAgICAgICAgZGVsIFRocmVhZCwgY3VycmVudF90aHJlYWQKKyAgICBoYXZlX3RocmVhZHMgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaGF2ZV90aHJlYWRzID0gRmFsc2UKKwordmVyYm9zZSA9IDAKK2lmICd2ZXJib3NlJyBpbiBzeXMuYXJndjoKKyAgICB2ZXJib3NlID0gMQorICAgIHN5cy5hcmd2LnJlbW92ZSgndmVyYm9zZScpCisKK2lmICdzaWxlbnQnIGluIHN5cy5hcmd2OiAgIyB0YWtlIGNhcmUgb2Ygb2xkIGZsYWcsIGp1c3QgaW4gY2FzZQorICAgIHZlcmJvc2UgPSAwCisgICAgc3lzLmFyZ3YucmVtb3ZlKCdzaWxlbnQnKQorCisKK2RlZiBwcmludF92ZXJzaW9ucygpOgorICAgIHByaW50CisgICAgcHJpbnQgJy09JyAqIDM4CisgICAgcHJpbnQgZGIuREJfVkVSU0lPTl9TVFJJTkcKKyAgICBwcmludCAnYnNkZGIuZGIudmVyc2lvbigpOiAgICVzJyAlIChkYi52ZXJzaW9uKCksICkKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDUsIDApIDoKKyAgICAgICAgcHJpbnQgJ2JzZGRiLmRiLmZ1bGxfdmVyc2lvbigpOiAlcycgJXJlcHIoZGIuZnVsbF92ZXJzaW9uKCkpCisgICAgcHJpbnQgJ2JzZGRiLmRiLl9fdmVyc2lvbl9fOiAlcycgJSBkYi5fX3ZlcnNpb25fXworICAgIHByaW50ICdic2RkYi5kYi5jdnNpZDogICAgICAgJXMnICUgZGIuY3ZzaWQKKworICAgICMgV29ya2Fyb3VuZCBmb3IgYWxsb3dpbmcgZ2VuZXJhdGluZyBhbiBFR0dzIGFzIGEgWklQIGZpbGVzLgorICAgIHN1ZmZpeD0iX18iCisgICAgcHJpbnQgJ3B5IG1vZHVsZTogICAgICAgICAgICAlcycgJSBnZXRhdHRyKGJzZGRiLCAiX19maWxlIitzdWZmaXgpCisgICAgcHJpbnQgJ2V4dGVuc2lvbiBtb2R1bGU6ICAgICAlcycgJSBnZXRhdHRyKGJzZGRiLCAiX19maWxlIitzdWZmaXgpCisKKyAgICBwcmludCAncHl0aG9uIHZlcnNpb246ICAgICAgICVzJyAlIHN5cy52ZXJzaW9uCisgICAgcHJpbnQgJ015IHBpZDogICAgICAgICAgICAgICAlcycgJSBvcy5nZXRwaWQoKQorICAgIHByaW50ICctPScgKiAzOAorCisKK2RlZiBnZXRfbmV3X3BhdGgobmFtZSkgOgorICAgIGdldF9uZXdfcGF0aC5tdXRleC5hY3F1aXJlKCkKKyAgICB0cnkgOgorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgcGF0aD1vcy5wYXRoLmpvaW4oZ2V0X25ld19wYXRoLnByZWZpeCwKKyAgICAgICAgICAgICAgICBuYW1lKyJfIitzdHIob3MuZ2V0cGlkKCkpKyJfIitzdHIoZ2V0X25ld19wYXRoLm51bSkpCisgICAgICAgIGdldF9uZXdfcGF0aC5udW0rPTEKKyAgICBmaW5hbGx5IDoKKyAgICAgICAgZ2V0X25ld19wYXRoLm11dGV4LnJlbGVhc2UoKQorICAgIHJldHVybiBwYXRoCisKK2RlZiBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgoKSA6CisgICAgcGF0aD1nZXRfbmV3X3BhdGgoImVudmlyb25tZW50IikKKyAgICBpbXBvcnQgb3MKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKHBhdGgsbW9kZT0wNzAwKQorICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJtdHJlZShwYXRoKQorICAgICAgICBvcy5tYWtlZGlycyhwYXRoKQorICAgIHJldHVybiBwYXRoCisKK2RlZiBnZXRfbmV3X2RhdGFiYXNlX3BhdGgoKSA6CisgICAgcGF0aD1nZXRfbmV3X3BhdGgoImRhdGFiYXNlIikKKyAgICBpbXBvcnQgb3MKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKSA6CisgICAgICAgIG9zLnJlbW92ZShwYXRoKQorICAgIHJldHVybiBwYXRoCisKKworIyBUaGlzIHBhdGggY2FuIGJlIG92ZXJyaWRlbiB2aWEgInNldF90ZXN0X3BhdGhfcHJlZml4KCkiLgoraW1wb3J0IG9zLCBvcy5wYXRoCitnZXRfbmV3X3BhdGgucHJlZml4PW9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgiVE1QRElSIiwKKyAgICBvcy5wYXRoLmpvaW4ob3Muc2VwLCJ0bXAiKSksICJ6LUJlcmtlbGV5X0RCIikKK2dldF9uZXdfcGF0aC5udW09MAorCitkZWYgZ2V0X3Rlc3RfcGF0aF9wcmVmaXgoKSA6CisgICAgcmV0dXJuIGdldF9uZXdfcGF0aC5wcmVmaXgKKworZGVmIHNldF90ZXN0X3BhdGhfcHJlZml4KHBhdGgpIDoKKyAgICBnZXRfbmV3X3BhdGgucHJlZml4PXBhdGgKKworZGVmIHJlbW92ZV90ZXN0X3BhdGhfZGlyZWN0b3J5KCkgOgorICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUoZ2V0X25ld19wYXRoLnByZWZpeCkKKworaWYgaGF2ZV90aHJlYWRzIDoKKyAgICBpbXBvcnQgdGhyZWFkaW5nCisgICAgZ2V0X25ld19wYXRoLm11dGV4PXRocmVhZGluZy5Mb2NrKCkKKyAgICBkZWwgdGhyZWFkaW5nCitlbHNlIDoKKyAgICBjbGFzcyBMb2NrKG9iamVjdCkgOgorICAgICAgICBkZWYgYWNxdWlyZShzZWxmKSA6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiByZWxlYXNlKHNlbGYpIDoKKyAgICAgICAgICAgIHBhc3MKKyAgICBnZXRfbmV3X3BhdGgubXV0ZXg9TG9jaygpCisgICAgZGVsIExvY2sKKworCisKK2NsYXNzIFByaW50SW5mb0Zha2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdFByaW50VmVyc2lvbnMoc2VsZik6CisgICAgICAgIHByaW50X3ZlcnNpb25zKCkKKworCisjIFRoaXMgbGl0dGxlIGhhY2sgaXMgZm9yIHdoZW4gdGhpcyBtb2R1bGUgaXMgcnVuIGFzIG1haW4gYW5kIGFsbCB0aGUKKyMgb3RoZXIgbW9kdWxlcyBpbXBvcnQgaXQgc28gdGhleSB3aWxsIHN0aWxsIGJlIGFibGUgdG8gZ2V0IHRoZSByaWdodAorIyB2ZXJib3NlIHNldHRpbmcuICBJdCdzIGNvbmZ1c2luZyBidXQgaXQgd29ya3MuCitpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgaW1wb3J0IHRlc3RfYWxsCisgICAgdGVzdF9hbGwudmVyYm9zZSA9IHZlcmJvc2UKK2Vsc2UgOgorICAgIGltcG9ydCBzeXMKKyAgICBwcmludCA+PnN5cy5zdGRlcnIsICJXb3JrIHRvIGRvISIKKworCitkZWYgc3VpdGUobW9kdWxlX3ByZWZpeD0nJywgdGltaW5nX2NoZWNrPU5vbmUpOgorICAgIHRlc3RfbW9kdWxlcyA9IFsKKyAgICAgICAgJ3Rlc3RfYXNzb2NpYXRlJywKKyAgICAgICAgJ3Rlc3RfYmFzaWNzJywKKyAgICAgICAgJ3Rlc3RfZGJlbnYnLAorICAgICAgICAndGVzdF9kYicsCisgICAgICAgICd0ZXN0X2NvbXBhcmUnLAorICAgICAgICAndGVzdF9jb21wYXQnLAorICAgICAgICAndGVzdF9jdXJzb3JfcGdldF9idWcnLAorICAgICAgICAndGVzdF9kYm9iaicsCisgICAgICAgICd0ZXN0X2Ric2hlbHZlJywKKyAgICAgICAgJ3Rlc3RfZGJ0YWJsZXMnLAorICAgICAgICAndGVzdF9kaXN0cmlidXRlZF90cmFuc2FjdGlvbnMnLAorICAgICAgICAndGVzdF9lYXJseV9jbG9zZScsCisgICAgICAgICd0ZXN0X2ZpbGVpZCcsCisgICAgICAgICd0ZXN0X2dldF9ub25lJywKKyAgICAgICAgJ3Rlc3Rfam9pbicsCisgICAgICAgICd0ZXN0X2xvY2snLAorICAgICAgICAndGVzdF9taXNjJywKKyAgICAgICAgJ3Rlc3RfcGlja2xlJywKKyAgICAgICAgJ3Rlc3RfcXVldWUnLAorICAgICAgICAndGVzdF9yZWNubycsCisgICAgICAgICd0ZXN0X3JlcGxpY2F0aW9uJywKKyAgICAgICAgJ3Rlc3Rfc2VxdWVuY2UnLAorICAgICAgICAndGVzdF90aHJlYWQnLAorICAgICAgICBdCisKKyAgICBhbGx0ZXN0cyA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgZm9yIG5hbWUgaW4gdGVzdF9tb2R1bGVzOgorICAgICAgICAjbW9kdWxlID0gX19pbXBvcnRfXyhuYW1lKQorICAgICAgICAjIERvIGl0IHRoaXMgd2F5IHNvIHRoYXQgc3VpdGUgbWF5IGJlIGNhbGxlZCBleHRlcm5hbGx5IHZpYQorICAgICAgICAjIHB5dGhvbidzIExpYi90ZXN0L3Rlc3RfYnNkZGIzLgorICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKG1vZHVsZV9wcmVmaXgrbmFtZSwgZ2xvYmFscygpLCBsb2NhbHMoKSwgbmFtZSkKKworICAgICAgICBhbGx0ZXN0cy5hZGRUZXN0KG1vZHVsZS50ZXN0X3N1aXRlKCkpCisgICAgICAgIGlmIHRpbWluZ19jaGVjazoKKyAgICAgICAgICAgIGFsbHRlc3RzLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKHRpbWluZ19jaGVjaykpCisgICAgcmV0dXJuIGFsbHRlc3RzCisKKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoUHJpbnRJbmZvRmFrZVRlc3QpKQorICAgIHJldHVybiBzdWl0ZQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcHJpbnRfdmVyc2lvbnMoKQorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3N1aXRlJykKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2Fzc29jaWF0ZS5weSBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2Fzc29jaWF0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTQ5ZTExCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfYXNzb2NpYXRlLnB5CkBAIC0wLDAgKzEsNDY1IEBACisiIiIKK1Rlc3RDYXNlcyBmb3IgREIuYXNzb2NpYXRlLgorIiIiCisKK2ltcG9ydCBzeXMsIG9zLCBzdHJpbmcKK2ltcG9ydCB0aW1lCitmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIGRic2hlbHZlLCB0ZXN0X3N1cHBvcnQsIHZlcmJvc2UsIGhhdmVfdGhyZWFkcywgXAorICAgICAgICBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK211c2ljZGF0YSA9IHsKKzEgOiAoIkJhZCBFbmdsaXNoIiwgIlRoZSBQcmljZSBPZiBMb3ZlIiwgIlJvY2siKSwKKzIgOiAoIkROQSBmZWF0dXJpbmcgU3V6YW5uZSBWZWdhIiwgIlRvbSdzIERpbmVyIiwgIlJvY2siKSwKKzMgOiAoIkdlb3JnZSBNaWNoYWVsIiwgIlByYXlpbmcgRm9yIFRpbWUiLCAiUm9jayIpLAorNCA6ICgiR2xvcmlhIEVzdGVmYW4iLCAiSGVyZSBXZSBBcmUiLCAiUm9jayIpLAorNSA6ICgiTGluZGEgUm9uc3RhZHQiLCAiRG9uJ3QgS25vdyBNdWNoIiwgIlJvY2siKSwKKzYgOiAoIk1pY2hhZWwgQm9sdG9uIiwgIkhvdyBBbSBJIFN1cHBvc2VkIFRvIExpdmUgV2l0aG91dCBZb3UiLCAiQmx1ZXMiKSwKKzcgOiAoIlBhdWwgWW91bmciLCAiT2ggR2lybCIsICJSb2NrIiksCis4IDogKCJQYXVsYSBBYmR1bCIsICJPcHBvc2l0ZXMgQXR0cmFjdCIsICJSb2NrIiksCis5IDogKCJSaWNoYXJkIE1hcngiLCAiU2hvdWxkJ3ZlIEtub3duIEJldHRlciIsICJSb2NrIiksCisxMDogKCJSb2QgU3Rld2FydCIsICJGb3JldmVyIFlvdW5nIiwgIlJvY2siKSwKKzExOiAoIlJveGV0dGUiLCAiRGFuZ2Vyb3VzIiwgIlJvY2siKSwKKzEyOiAoIlNoZWVuYSBFYXN0b24iLCAiVGhlIExvdmVyIEluIE1lIiwgIlJvY2siKSwKKzEzOiAoIlNpbmVhZCBPJ0Nvbm5vciIsICJOb3RoaW5nIENvbXBhcmVzIDIgVSIsICJSb2NrIiksCisxNDogKCJTdGV2aWUgQi4iLCAiQmVjYXVzZSBJIExvdmUgWW91IiwgIlJvY2siKSwKKzE1OiAoIlRheWxvciBEYXluZSIsICJMb3ZlIFdpbGwgTGVhZCBZb3UgQmFjayIsICJSb2NrIiksCisxNjogKCJUaGUgQmFuZ2xlcyIsICJFdGVybmFsIEZsYW1lIiwgIlJvY2siKSwKKzE3OiAoIldpbHNvbiBQaGlsbGlwcyIsICJSZWxlYXNlIE1lIiwgIlJvY2siKSwKKzE4OiAoIkJpbGx5IEpvZWwiLCAiQmxvbmRlIE92ZXIgQmx1ZSIsICJSb2NrIiksCisxOTogKCJCaWxseSBKb2VsIiwgIkZhbW91cyBMYXN0IFdvcmRzIiwgIlJvY2siKSwKKzIwOiAoIkJpbGx5IEpvZWwiLCAiTHVsbGFieWUgKEdvb2RuaWdodCwgTXkgQW5nZWwpIiwgIlJvY2siKSwKKzIxOiAoIkJpbGx5IEpvZWwiLCAiVGhlIFJpdmVyIE9mIERyZWFtcyIsICJSb2NrIiksCisyMjogKCJCaWxseSBKb2VsIiwgIlR3byBUaG91c2FuZCBZZWFycyIsICJSb2NrIiksCisyMzogKCJKYW5ldCBKYWNrc29uIiwgIkFscmlnaHQiLCAiUm9jayIpLAorMjQ6ICgiSmFuZXQgSmFja3NvbiIsICJCbGFjayBDYXQiLCAiUm9jayIpLAorMjU6ICgiSmFuZXQgSmFja3NvbiIsICJDb21lIEJhY2sgVG8gTWUiLCAiUm9jayIpLAorMjY6ICgiSmFuZXQgSmFja3NvbiIsICJFc2NhcGFkZSIsICJSb2NrIiksCisyNzogKCJKYW5ldCBKYWNrc29uIiwgIkxvdmUgV2lsbCBOZXZlciBEbyAoV2l0aG91dCBZb3UpIiwgIlJvY2siKSwKKzI4OiAoIkphbmV0IEphY2tzb24iLCAiTWlzcyBZb3UgTXVjaCIsICJSb2NrIiksCisyOTogKCJKYW5ldCBKYWNrc29uIiwgIlJoeXRobSBOYXRpb24iLCAiUm9jayIpLAorMzA6ICgiSmFuZXQgSmFja3NvbiIsICJTdGF0ZSBPZiBUaGUgV29ybGQiLCAiUm9jayIpLAorMzE6ICgiSmFuZXQgSmFja3NvbiIsICJUaGUgS25vd2xlZGdlIiwgIlJvY2siKSwKKzMyOiAoIlNweXJvIEd5cmEiLCAiRW5kIG9mIFJvbWFudGljaXNtIiwgIkphenoiKSwKKzMzOiAoIlNweXJvIEd5cmEiLCAiSGVsaW9wb2xpcyIsICJKYXp6IiksCiszNDogKCJTcHlybyBHeXJhIiwgIkp1YmlsZWUiLCAiSmF6eiIpLAorMzU6ICgiU3B5cm8gR3lyYSIsICJMaXR0bGUgTGluZGEiLCAiSmF6eiIpLAorMzY6ICgiU3B5cm8gR3lyYSIsICJNb3JuaW5nIERhbmNlIiwgIkphenoiKSwKKzM3OiAoIlNweXJvIEd5cmEiLCAiU29uZyBmb3IgTG9ycmFpbmUiLCAiSmF6eiIpLAorMzg6ICgiWWVzIiwgIk93bmVyIE9mIEEgTG9uZWx5IEhlYXJ0IiwgIlJvY2siKSwKKzM5OiAoIlllcyIsICJSaHl0aG0gT2YgTG92ZSIsICJSb2NrIiksCis0MDogKCJDdXNjbyIsICJEcmVhbSBDYXRjaGVyIiwgIk5ldyBBZ2UiKSwKKzQxOiAoIkN1c2NvIiwgIkdlcm9uaW1vcyBMYXVnaHRlciIsICJOZXcgQWdlIiksCis0MjogKCJDdXNjbyIsICJHaG9zdCBEYW5jZSIsICJOZXcgQWdlIiksCis0MzogKCJCbHVlIE1hbiBHcm91cCIsICJEcnVtYm9uZSIsICJOZXcgQWdlIiksCis0NDogKCJCbHVlIE1hbiBHcm91cCIsICJFbmRsZXNzIENvbHVtbiIsICJOZXcgQWdlIiksCis0NTogKCJCbHVlIE1hbiBHcm91cCIsICJLbGVpbiBNYW5kZWxicm90IiwgIk5ldyBBZ2UiKSwKKzQ2OiAoIktlbm55IEciLCAiU2lsaG91ZXR0ZSIsICJKYXp6IiksCis0NzogKCJTYWRlIiwgIlNtb290aCBPcGVyYXRvciIsICJKYXp6IiksCis0ODogKCJEYXZpZCBBcmtlbnN0b25lIiwgIlBhcGlsbG9uIChPbiBUaGUgV2luZ3MgT2YgVGhlIEJ1dHRlcmZseSkiLAorICAgICAiTmV3IEFnZSIpLAorNDk6ICgiRGF2aWQgQXJrZW5zdG9uZSIsICJTdGVwcGluZyBTdGFycyIsICJOZXcgQWdlIiksCis1MDogKCJEYXZpZCBBcmtlbnN0b25lIiwgIkNhcm5hdGlvbiBMaWx5IExpbHkgUm9zZSIsICJOZXcgQWdlIiksCis1MTogKCJEYXZpZCBMYW56IiwgIkJlaGluZCBUaGUgV2F0ZXJmYWxsIiwgIk5ldyBBZ2UiKSwKKzUyOiAoIkRhdmlkIExhbnoiLCAiQ3Jpc3RvZm9yaSdzIERyZWFtIiwgIk5ldyBBZ2UiKSwKKzUzOiAoIkRhdmlkIExhbnoiLCAiSGVhcnRzb3VuZHMiLCAiTmV3IEFnZSIpLAorNTQ6ICgiRGF2aWQgTGFueiIsICJMZWF2ZXMgb24gdGhlIFNlaW5lIiwgIk5ldyBBZ2UiKSwKKzk5OiAoInVua25vd24gYXJ0aXN0IiwgIlVubmFtZWQgc29uZyIsICJVbmtub3duIiksCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIEFzc29jaWF0ZUVycm9yVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IHNlbGYuX19jbGFzc19fLl9fbmFtZV9fICsgJy5kYicKKyAgICAgICAgc2VsZi5ob21lRGlyID0gZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoKCkKKyAgICAgICAgc2VsZi5lbnYgPSBkYi5EQkVudigpCisgICAgICAgIHNlbGYuZW52Lm9wZW4oc2VsZi5ob21lRGlyLCBkYi5EQl9DUkVBVEUgfCBkYi5EQl9JTklUX01QT09MKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmVudi5jbG9zZSgpCisgICAgICAgIHNlbGYuZW52ID0gTm9uZQorICAgICAgICB0ZXN0X3N1cHBvcnQucm10cmVlKHNlbGYuaG9tZURpcikKKworICAgIGRlZiB0ZXN0MDBfYXNzb2NpYXRlREJFcnJvcihzZWxmKToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdcbicsICctPScgKiAzMAorICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDAwX2Fzc29jaWF0ZURCRXJyb3IuLi4iICUgXAorICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBkdXBEQiA9IGRiLkRCKHNlbGYuZW52KQorICAgICAgICBkdXBEQi5zZXRfZmxhZ3MoZGIuREJfRFVQKQorICAgICAgICBkdXBEQi5vcGVuKHNlbGYuZmlsZW5hbWUsICJwcmltYXJ5IiwgZGIuREJfQlRSRUUsIGRiLkRCX0NSRUFURSkKKworICAgICAgICBzZWNEQiA9IGRiLkRCKHNlbGYuZW52KQorICAgICAgICBzZWNEQi5vcGVuKHNlbGYuZmlsZW5hbWUsICJzZWNvbmRhcnkiLCBkYi5EQl9CVFJFRSwgZGIuREJfQ1JFQVRFKQorCisgICAgICAgICMgZHVwREIgaGFzIGJlZW4gY29uZmlndXJlZCB0byBhbGxvdyBkdXBsaWNhdGVzLCBpdCBjYW4ndAorICAgICAgICAjIGFzc29jaWF0ZSB3aXRoIGEgc2Vjb25kYXJ5LiAgQmVya2VsZXkgREIgd2lsbCByZXR1cm4gYW4gZXJyb3IuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZiBmKGEsYik6IHJldHVybiBhK2IKKyAgICAgICAgICAgIGR1cERCLmFzc29jaWF0ZShzZWNEQiwgZikKKyAgICAgICAgZXhjZXB0IGRiLkRCRXJyb3I6CisgICAgICAgICAgICAjIGdvb2QKKyAgICAgICAgICAgIHNlY0RCLmNsb3NlKCkKKyAgICAgICAgICAgIGR1cERCLmNsb3NlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlY0RCLmNsb3NlKCkKKyAgICAgICAgICAgIGR1cERCLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiREJFcnJvciBleGNlcHRpb24gd2FzIGV4cGVjdGVkIikKKworCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworY2xhc3MgQXNzb2NpYXRlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGtleXR5cGUgPSAnJworICAgIGVudkZsYWdzID0gMAorICAgIGRiRmxhZ3MgPSAwCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyArICcuZGInCisgICAgICAgIHNlbGYuaG9tZURpciA9IGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCgpCisgICAgICAgIHNlbGYuZW52ID0gZGIuREJFbnYoKQorICAgICAgICBzZWxmLmVudi5vcGVuKHNlbGYuaG9tZURpciwgZGIuREJfQ1JFQVRFIHwgZGIuREJfSU5JVF9NUE9PTCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9MT0NLIHwgZGIuREJfVEhSRUFEIHwgc2VsZi5lbnZGbGFncykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZURCKCkKKyAgICAgICAgc2VsZi5lbnYuY2xvc2UoKQorICAgICAgICBzZWxmLmVudiA9IE5vbmUKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJtdHJlZShzZWxmLmhvbWVEaXIpCisKKyAgICBkZWYgYWRkRGF0YVRvREIoc2VsZiwgZCwgdHhuPU5vbmUpOgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBtdXNpY2RhdGEuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIHR5cGUoc2VsZi5rZXl0eXBlKSA9PSB0eXBlKCcnKToKKyAgICAgICAgICAgICAgICBrZXkgPSAiJTAyZCIgJSBrZXkKKyAgICAgICAgICAgIGQucHV0KGtleSwgJ3wnLmpvaW4odmFsdWUpLCB0eG49dHhuKQorCisgICAgZGVmIGNyZWF0ZURCKHNlbGYsIHR4bj1Ob25lKToKKyAgICAgICAgc2VsZi5jdXIgPSBOb25lCisgICAgICAgIHNlbGYuc2VjREIgPSBOb25lCisgICAgICAgIHNlbGYucHJpbWFyeSA9IGRiLkRCKHNlbGYuZW52KQorICAgICAgICBzZWxmLnByaW1hcnkuc2V0X2dldF9yZXR1cm5zX25vbmUoMikKKyAgICAgICAgc2VsZi5wcmltYXJ5Lm9wZW4oc2VsZi5maWxlbmFtZSwgInByaW1hcnkiLCBzZWxmLmRidHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICBkYi5EQl9DUkVBVEUgfCBkYi5EQl9USFJFQUQgfCBzZWxmLmRiRmxhZ3MsIHR4bj10eG4pCisKKyAgICBkZWYgY2xvc2VEQihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jdXI6CisgICAgICAgICAgICBzZWxmLmN1ci5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmN1ciA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5zZWNEQjoKKyAgICAgICAgICAgIHNlbGYuc2VjREIuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5zZWNEQiA9IE5vbmUKKyAgICAgICAgc2VsZi5wcmltYXJ5LmNsb3NlKCkKKyAgICAgICAgc2VsZi5wcmltYXJ5ID0gTm9uZQorCisgICAgZGVmIGdldERCKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wcmltYXJ5CisKKworICAgIGRlZiBfYXNzb2NpYXRlV2l0aERCKHNlbGYsIGdldEdlbnJlKToKKyAgICAgICAgc2VsZi5jcmVhdGVEQigpCisKKyAgICAgICAgc2VsZi5zZWNEQiA9IGRiLkRCKHNlbGYuZW52KQorICAgICAgICBzZWxmLnNlY0RCLnNldF9mbGFncyhkYi5EQl9EVVApCisgICAgICAgIHNlbGYuc2VjREIuc2V0X2dldF9yZXR1cm5zX25vbmUoMikKKyAgICAgICAgc2VsZi5zZWNEQi5vcGVuKHNlbGYuZmlsZW5hbWUsICJzZWNvbmRhcnkiLCBkYi5EQl9CVFJFRSwKKyAgICAgICAgICAgICAgICAgICBkYi5EQl9DUkVBVEUgfCBkYi5EQl9USFJFQUQgfCBzZWxmLmRiRmxhZ3MpCisgICAgICAgIHNlbGYuZ2V0REIoKS5hc3NvY2lhdGUoc2VsZi5zZWNEQiwgZ2V0R2VucmUpCisKKyAgICAgICAgc2VsZi5hZGREYXRhVG9EQihzZWxmLmdldERCKCkpCisKKyAgICAgICAgc2VsZi5maW5pc2hfdGVzdChzZWxmLnNlY0RCKQorCisgICAgZGVmIHRlc3QwMV9hc3NvY2lhdGVXaXRoREIoc2VsZik6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwMV9hc3NvY2lhdGVXaXRoREIuLi4iICUgXAorICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICByZXR1cm4gc2VsZi5fYXNzb2NpYXRlV2l0aERCKHNlbGYuZ2V0R2VucmUpCisKKyAgICBkZWYgX2Fzc29jaWF0ZUFmdGVyREIoc2VsZiwgZ2V0R2VucmUpIDoKKyAgICAgICAgc2VsZi5jcmVhdGVEQigpCisgICAgICAgIHNlbGYuYWRkRGF0YVRvREIoc2VsZi5nZXREQigpKQorCisgICAgICAgIHNlbGYuc2VjREIgPSBkYi5EQihzZWxmLmVudikKKyAgICAgICAgc2VsZi5zZWNEQi5zZXRfZmxhZ3MoZGIuREJfRFVQKQorICAgICAgICBzZWxmLnNlY0RCLm9wZW4oc2VsZi5maWxlbmFtZSwgInNlY29uZGFyeSIsIGRiLkRCX0JUUkVFLAorICAgICAgICAgICAgICAgICAgIGRiLkRCX0NSRUFURSB8IGRiLkRCX1RIUkVBRCB8IHNlbGYuZGJGbGFncykKKworICAgICAgICAjIGFkZGluZyB0aGUgREJfQ1JFQVRFIGZsYWcgd2lsbCBjYXVzZSBpdCB0byBpbmRleCBleGlzdGluZyByZWNvcmRzCisgICAgICAgIHNlbGYuZ2V0REIoKS5hc3NvY2lhdGUoc2VsZi5zZWNEQiwgZ2V0R2VucmUsIGRiLkRCX0NSRUFURSkKKworICAgICAgICBzZWxmLmZpbmlzaF90ZXN0KHNlbGYuc2VjREIpCisKKyAgICBkZWYgdGVzdDAyX2Fzc29jaWF0ZUFmdGVyREIoc2VsZik6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwMl9hc3NvY2lhdGVBZnRlckRCLi4uIiAlIFwKKyAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Fzc29jaWF0ZUFmdGVyREIoc2VsZi5nZXRHZW5yZSkKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNik6CisgICAgICAgIGRlZiB0ZXN0MDNfYXNzb2NpYXRlV2l0aERCKHNlbGYpOgorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKKyAgICAgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDNfYXNzb2NpYXRlV2l0aERCLi4uIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fYXNzb2NpYXRlV2l0aERCKHNlbGYuZ2V0R2VucmVMaXN0KQorCisgICAgICAgIGRlZiB0ZXN0MDRfYXNzb2NpYXRlQWZ0ZXJEQihzZWxmKToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDA0X2Fzc29jaWF0ZUFmdGVyREIuLi4iICUgXAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9hc3NvY2lhdGVBZnRlckRCKHNlbGYuZ2V0R2VucmVMaXN0KQorCisKKyAgICBkZWYgZmluaXNoX3Rlc3Qoc2VsZiwgc2VjREIsIHR4bj1Ob25lKToKKyAgICAgICAgIyAnQmx1ZXMnIHNob3VsZCBub3QgYmUgaW4gdGhlIHNlY29uZGFyeSBkYXRhYmFzZQorICAgICAgICB2YWxzID0gc2VjREIucGdldCgnQmx1ZXMnLCB0eG49dHhuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHMsIE5vbmUsIHZhbHMpCisKKyAgICAgICAgdmFscyA9IHNlY0RCLnBnZXQoJ1Vua25vd24nLCB0eG49dHhuKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsc1swXSA9PSA5OSBvciB2YWxzWzBdID09ICc5OScsIHZhbHMpCisgICAgICAgIHZhbHNbMV0uaW5kZXgoJ1Vua25vd24nKQorICAgICAgICB2YWxzWzFdLmluZGV4KCdVbm5hbWVkJykKKyAgICAgICAgdmFsc1sxXS5pbmRleCgndW5rbm93bicpCisKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJQcmltYXJ5IGtleSB0cmF2ZXJzYWw6IgorICAgICAgICBzZWxmLmN1ciA9IHNlbGYuZ2V0REIoKS5jdXJzb3IodHhuKQorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgcmVjID0gc2VsZi5jdXIuZmlyc3QoKQorICAgICAgICB3aGlsZSByZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiB0eXBlKHNlbGYua2V5dHlwZSkgPT0gdHlwZSgnJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludChyZWNbMF0pKSAgIyBmb3IgcHJpbWFyeSBkYiwga2V5IGlzIGEgbnVtYmVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWNbMF0gYW5kIHR5cGUocmVjWzBdKSA9PSB0eXBlKDApKQorICAgICAgICAgICAgY291bnQgPSBjb3VudCArIDEKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgcmVjCisgICAgICAgICAgICByZWMgPSBnZXRhdHRyKHNlbGYuY3VyLCAibmV4dCIpKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgbGVuKG11c2ljZGF0YSkpICAjIGFsbCBpdGVtcyBhY2NvdW50ZWQgZm9yCisKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIlNlY29uZGFyeSBrZXkgdHJhdmVyc2FsOiIKKyAgICAgICAgc2VsZi5jdXIgPSBzZWNEQi5jdXJzb3IodHhuKQorICAgICAgICBjb3VudCA9IDAKKworICAgICAgICAjIHRlc3QgY3Vyc29yIHBnZXQKKyAgICAgICAgdmFscyA9IHNlbGYuY3VyLnBnZXQoJ1Vua25vd24nLCBmbGFncz1kYi5EQl9MQVNUKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsc1sxXSA9PSA5OSBvciB2YWxzWzFdID09ICc5OScsIHZhbHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsc1swXSwgJ1Vua25vd24nKQorICAgICAgICB2YWxzWzJdLmluZGV4KCdVbmtub3duJykKKyAgICAgICAgdmFsc1syXS5pbmRleCgnVW5uYW1lZCcpCisgICAgICAgIHZhbHNbMl0uaW5kZXgoJ3Vua25vd24nKQorCisgICAgICAgIHZhbHMgPSBzZWxmLmN1ci5wZ2V0KCdVbmtub3duJywgZGF0YT0nd3JvbmcgdmFsdWUnLCBmbGFncz1kYi5EQl9HRVRfQk9USCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxzLCBOb25lLCB2YWxzKQorCisgICAgICAgIHJlYyA9IHNlbGYuY3VyLmZpcnN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNbMF0sICJKYXp6IikKKyAgICAgICAgd2hpbGUgcmVjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY291bnQgPSBjb3VudCArIDEKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgcmVjCisgICAgICAgICAgICByZWMgPSBnZXRhdHRyKHNlbGYuY3VyLCAibmV4dCIpKCkKKyAgICAgICAgIyBhbGwgaXRlbXMgYWNjb3VudGVkIGZvciBFWENFUFQgZm9yIDEgd2l0aCAiQmx1ZXMiIGdlbnJlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnQsIGxlbihtdXNpY2RhdGEpLTEpCisKKyAgICAgICAgc2VsZi5jdXIgPSBOb25lCisKKyAgICBkZWYgZ2V0R2VucmUoc2VsZiwgcHJpS2V5LCBwcmlEYXRhKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHByaURhdGEpLCB0eXBlKCIiKSkKKyAgICAgICAgZ2VucmUgPSBwcmlEYXRhLnNwbGl0KCd8JylbMl0KKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ2dldEdlbnJlIGtleTogJXIgZGF0YTogJXInICUgKHByaUtleSwgcHJpRGF0YSkKKworICAgICAgICBpZiBnZW5yZSA9PSAnQmx1ZXMnOgorICAgICAgICAgICAgcmV0dXJuIGRiLkRCX0RPTk9USU5ERVgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBnZW5yZQorCisgICAgZGVmIGdldEdlbnJlTGlzdChzZWxmLCBwcmlLZXksIFByaURhdGEpIDoKKyAgICAgICAgdiA9IHNlbGYuZ2V0R2VucmUocHJpS2V5LCBQcmlEYXRhKQorICAgICAgICBpZiB0eXBlKHYpID09IHR5cGUoIiIpIDoKKyAgICAgICAgICAgIHYgPSBbdl0KKyAgICAgICAgcmV0dXJuIHYKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK2NsYXNzIEFzc29jaWF0ZUhhc2hUZXN0Q2FzZShBc3NvY2lhdGVUZXN0Q2FzZSk6CisgICAgZGJ0eXBlID0gZGIuREJfSEFTSAorCitjbGFzcyBBc3NvY2lhdGVCVHJlZVRlc3RDYXNlKEFzc29jaWF0ZVRlc3RDYXNlKToKKyAgICBkYnR5cGUgPSBkYi5EQl9CVFJFRQorCitjbGFzcyBBc3NvY2lhdGVSZWNub1Rlc3RDYXNlKEFzc29jaWF0ZVRlc3RDYXNlKToKKyAgICBkYnR5cGUgPSBkYi5EQl9SRUNOTworICAgIGtleXR5cGUgPSAwCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIEFzc29jaWF0ZUJUcmVlVHhuVGVzdENhc2UoQXNzb2NpYXRlQlRyZWVUZXN0Q2FzZSk6CisgICAgZW52RmxhZ3MgPSBkYi5EQl9JTklUX1RYTgorICAgIGRiRmxhZ3MgPSAwCisKKyAgICBkZWYgdHhuX2ZpbmlzaF90ZXN0KHNlbGYsIHNEQiwgdHhuKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5maW5pc2hfdGVzdChzREIsIHR4bj10eG4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBzZWxmLmN1cjoKKyAgICAgICAgICAgICAgICBzZWxmLmN1ci5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5jdXIgPSBOb25lCisgICAgICAgICAgICBpZiB0eG46CisgICAgICAgICAgICAgICAgdHhuLmNvbW1pdCgpCisKKyAgICBkZWYgdGVzdDEzX2Fzc29jaWF0ZV9pbl90cmFuc2FjdGlvbihzZWxmKToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdcbicsICctPScgKiAzMAorICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDEzX2Fzc29jaWF0ZUF1dG9Db21taXQuLi4iICUgXAorICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICB0eG4gPSBzZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNyZWF0ZURCKHR4bj10eG4pCisKKyAgICAgICAgICAgIHNlbGYuc2VjREIgPSBkYi5EQihzZWxmLmVudikKKyAgICAgICAgICAgIHNlbGYuc2VjREIuc2V0X2ZsYWdzKGRiLkRCX0RVUCkKKyAgICAgICAgICAgIHNlbGYuc2VjREIuc2V0X2dldF9yZXR1cm5zX25vbmUoMikKKyAgICAgICAgICAgIHNlbGYuc2VjREIub3BlbihzZWxmLmZpbGVuYW1lLCAic2Vjb25kYXJ5IiwgZGIuREJfQlRSRUUsCisgICAgICAgICAgICAgICAgICAgICAgIGRiLkRCX0NSRUFURSB8IGRiLkRCX1RIUkVBRCwgdHhuPXR4bikKKyAgICAgICAgICAgIHNlbGYuZ2V0REIoKS5hc3NvY2lhdGUoc2VsZi5zZWNEQiwgc2VsZi5nZXRHZW5yZSwgdHhuPXR4bikKKworICAgICAgICAgICAgc2VsZi5hZGREYXRhVG9EQihzZWxmLmdldERCKCksIHR4bj10eG4pCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHR4bi5hYm9ydCgpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHNlbGYudHhuX2ZpbmlzaF90ZXN0KHNlbGYuc2VjREIsIHR4bj10eG4pCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgU2hlbHZlQXNzb2NpYXRlVGVzdENhc2UoQXNzb2NpYXRlVGVzdENhc2UpOgorCisgICAgZGVmIGNyZWF0ZURCKHNlbGYpOgorICAgICAgICBzZWxmLnByaW1hcnkgPSBkYnNoZWx2ZS5vcGVuKHNlbGYuZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJuYW1lPSJwcmltYXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYmVudj1zZWxmLmVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxldHlwZT1zZWxmLmRidHlwZSkKKworICAgIGRlZiBhZGREYXRhVG9EQihzZWxmLCBkKToKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gbXVzaWNkYXRhLml0ZW1zKCk6CisgICAgICAgICAgICBpZiB0eXBlKHNlbGYua2V5dHlwZSkgPT0gdHlwZSgnJyk6CisgICAgICAgICAgICAgICAga2V5ID0gIiUwMmQiICUga2V5CisgICAgICAgICAgICBkLnB1dChrZXksIHZhbHVlKSAgICAjIHNhdmUgdGhlIHZhbHVlIGFzIGlzIHRoaXMgdGltZQorCisKKyAgICBkZWYgZ2V0R2VucmUoc2VsZiwgcHJpS2V5LCBwcmlEYXRhKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHByaURhdGEpLCB0eXBlKCgpKSkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdnZXRHZW5yZSBrZXk6ICVyIGRhdGE6ICVyJyAlIChwcmlLZXksIHByaURhdGEpCisgICAgICAgIGdlbnJlID0gcHJpRGF0YVsyXQorICAgICAgICBpZiBnZW5yZSA9PSAnQmx1ZXMnOgorICAgICAgICAgICAgcmV0dXJuIGRiLkRCX0RPTk9USU5ERVgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBnZW5yZQorCisKK2NsYXNzIFNoZWx2ZUFzc29jaWF0ZUhhc2hUZXN0Q2FzZShTaGVsdmVBc3NvY2lhdGVUZXN0Q2FzZSk6CisgICAgZGJ0eXBlID0gZGIuREJfSEFTSAorCitjbGFzcyBTaGVsdmVBc3NvY2lhdGVCVHJlZVRlc3RDYXNlKFNoZWx2ZUFzc29jaWF0ZVRlc3RDYXNlKToKKyAgICBkYnR5cGUgPSBkYi5EQl9CVFJFRQorCitjbGFzcyBTaGVsdmVBc3NvY2lhdGVSZWNub1Rlc3RDYXNlKFNoZWx2ZUFzc29jaWF0ZVRlc3RDYXNlKToKKyAgICBkYnR5cGUgPSBkYi5EQl9SRUNOTworICAgIGtleXR5cGUgPSAwCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGhyZWFkZWRBc3NvY2lhdGVUZXN0Q2FzZShBc3NvY2lhdGVUZXN0Q2FzZSk6CisKKyAgICBkZWYgYWRkRGF0YVRvREIoc2VsZiwgZCk6CisgICAgICAgIHQxID0gVGhyZWFkKHRhcmdldCA9IHNlbGYud3JpdGVyMSwKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9IChkLCApKQorICAgICAgICB0MiA9IFRocmVhZCh0YXJnZXQgPSBzZWxmLndyaXRlcjIsCisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSAoZCwgKSkKKworICAgICAgICB0MS5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgdDIuc2V0RGFlbW9uKFRydWUpCisgICAgICAgIHQxLnN0YXJ0KCkKKyAgICAgICAgdDIuc3RhcnQoKQorICAgICAgICB0MS5qb2luKCkKKyAgICAgICAgdDIuam9pbigpCisKKyAgICBkZWYgd3JpdGVyMShzZWxmLCBkKToKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gbXVzaWNkYXRhLml0ZW1zKCk6CisgICAgICAgICAgICBpZiB0eXBlKHNlbGYua2V5dHlwZSkgPT0gdHlwZSgnJyk6CisgICAgICAgICAgICAgICAga2V5ID0gIiUwMmQiICUga2V5CisgICAgICAgICAgICBkLnB1dChrZXksICd8Jy5qb2luKHZhbHVlKSkKKworICAgIGRlZiB3cml0ZXIyKHNlbGYsIGQpOgorICAgICAgICBmb3IgeCBpbiByYW5nZSgxMDAsIDYwMCk6CisgICAgICAgICAgICBrZXkgPSAneiUyZCcgJSB4CisgICAgICAgICAgICB2YWx1ZSA9IFtrZXldICogNAorICAgICAgICAgICAgZC5wdXQoa2V5LCAnfCcuam9pbih2YWx1ZSkpCisKKworY2xhc3MgVGhyZWFkZWRBc3NvY2lhdGVIYXNoVGVzdENhc2UoU2hlbHZlQXNzb2NpYXRlVGVzdENhc2UpOgorICAgIGRidHlwZSA9IGRiLkRCX0hBU0gKKworY2xhc3MgVGhyZWFkZWRBc3NvY2lhdGVCVHJlZVRlc3RDYXNlKFNoZWx2ZUFzc29jaWF0ZVRlc3RDYXNlKToKKyAgICBkYnR5cGUgPSBkYi5EQl9CVFJFRQorCitjbGFzcyBUaHJlYWRlZEFzc29jaWF0ZVJlY25vVGVzdENhc2UoU2hlbHZlQXNzb2NpYXRlVGVzdENhc2UpOgorICAgIGRidHlwZSA9IGRiLkRCX1JFQ05PCisgICAga2V5dHlwZSA9IDAKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEFzc29jaWF0ZUVycm9yVGVzdENhc2UpKQorCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoQXNzb2NpYXRlSGFzaFRlc3RDYXNlKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShBc3NvY2lhdGVCVHJlZVRlc3RDYXNlKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShBc3NvY2lhdGVSZWNub1Rlc3RDYXNlKSkKKworICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEFzc29jaWF0ZUJUcmVlVHhuVGVzdENhc2UpKQorCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoU2hlbHZlQXNzb2NpYXRlSGFzaFRlc3RDYXNlKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShTaGVsdmVBc3NvY2lhdGVCVHJlZVRlc3RDYXNlKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShTaGVsdmVBc3NvY2lhdGVSZWNub1Rlc3RDYXNlKSkKKworICAgIGlmIGhhdmVfdGhyZWFkczoKKyAgICAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoVGhyZWFkZWRBc3NvY2lhdGVIYXNoVGVzdENhc2UpKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShUaHJlYWRlZEFzc29jaWF0ZUJUcmVlVGVzdENhc2UpKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShUaHJlYWRlZEFzc29jaWF0ZVJlY25vVGVzdENhc2UpKQorCisgICAgcmV0dXJuIHN1aXRlCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSd0ZXN0X3N1aXRlJykKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2Jhc2ljcy5weSBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2Jhc2ljcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzU3YmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfYmFzaWNzLnB5CkBAIC0wLDAgKzEsMTE1OCBAQAorIiIiCitCYXNpYyBUZXN0Q2FzZXMgZm9yIEJUcmVlIGFuZCBoYXNoIERCcywgd2l0aCBhbmQgd2l0aG91dCBhIERCRW52LCB3aXRoCit2YXJpb3VzIERCIGZsYWdzLCBldGMuCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzdHJpbmcKK2Zyb20gcHByaW50IGltcG9ydCBwcHJpbnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRpbWUKK2ltcG9ydCBzeXMKKworZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIHRlc3Rfc3VwcG9ydCwgdmVyYm9zZSwgZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoLCBcCisgICAgICAgIGdldF9uZXdfZGF0YWJhc2VfcGF0aAorCitEQVNIID0gJy0nCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVmVyc2lvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdDAwX3ZlcnNpb24oc2VsZik6CisgICAgICAgIGluZm8gPSBkYi52ZXJzaW9uKCkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdcbicsICctPScgKiAyMAorICAgICAgICAgICAgcHJpbnQgJ2JzZGRiLmRiLnZlcnNpb24oKTogJXMnICUgKGluZm8sICkKKyAgICAgICAgICAgIHByaW50IGRiLkRCX1ZFUlNJT05fU1RSSU5HCisgICAgICAgICAgICBwcmludCAnLT0nICogMjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLCAoZGIuREJfVkVSU0lPTl9NQUpPUiwgZGIuREJfVkVSU0lPTl9NSU5PUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRiLkRCX1ZFUlNJT05fUEFUQ0gpKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBCYXNpY1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkYnR5cGUgICAgICAgPSBkYi5EQl9VTktOT1dOICAjIG11c3QgYmUgc2V0IGluIGRlcml2ZWQgY2xhc3MKKyAgICBjYWNoZXNpemUgICAgPSAoMCwgMTAyNCoxMDI0LCAxKQorICAgIGRib3BlbmZsYWdzICA9IDAKKyAgICBkYnNldGZsYWdzICAgPSAwCisgICAgZGJtb2RlICAgICAgID0gMDY2MAorICAgIGRibmFtZSAgICAgICA9IE5vbmUKKyAgICB1c2VFbnYgICAgICAgPSAwCisgICAgZW52ZmxhZ3MgICAgID0gMAorICAgIGVudnNldGZsYWdzICA9IDAKKworICAgIF9udW1LZXlzICAgICAgPSAxMDAyICAgICMgUFJJVkFURS4gIE5PVEU6IG11c3QgYmUgYW4gZXZlbiB2YWx1ZQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnVzZUVudjoKKyAgICAgICAgICAgIHNlbGYuaG9tZURpcj1nZXRfbmV3X2Vudmlyb25tZW50X3BhdGgoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZW52ID0gZGIuREJFbnYoKQorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9sZ19tYXgoMTAyNCoxMDI0KQorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF90eF9tYXgoMzApCisgICAgICAgICAgICAgICAgc2VsZi5fdCA9IGludCh0aW1lLnRpbWUoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfdHhfdGltZXN0YW1wKHNlbGYuX3QpCisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2ZsYWdzKHNlbGYuZW52c2V0ZmxhZ3MsIDEpCisgICAgICAgICAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIHNlbGYuZW52ZmxhZ3MgfCBkYi5EQl9DUkVBVEUpCisgICAgICAgICAgICAgICAgc2VsZi5maWxlbmFtZSA9ICJ0ZXN0IgorICAgICAgICAgICAgIyBZZXMsIGEgYmFyZSBleGNlcHQgaXMgaW50ZW5kZWQsIHNpbmNlIHdlJ3JlIHJlLXJhaXNpbmcgdGhlIGV4Yy4KKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQucm10cmVlKHNlbGYuaG9tZURpcikKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5lbnYgPSBOb25lCisgICAgICAgICAgICBzZWxmLmZpbGVuYW1lID0gZ2V0X25ld19kYXRhYmFzZV9wYXRoKCkKKworICAgICAgICAjIGNyZWF0ZSBhbmQgb3BlbiB0aGUgREIKKyAgICAgICAgc2VsZi5kID0gZGIuREIoc2VsZi5lbnYpCisgICAgICAgIGlmIG5vdCBzZWxmLnVzZUVudiA6CisgICAgICAgICAgICBzZWxmLmQuc2V0X2NhY2hlc2l6ZSgqc2VsZi5jYWNoZXNpemUpCisgICAgICAgICAgICBjYWNoZXNpemUgPSBzZWxmLmQuZ2V0X2NhY2hlc2l6ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhY2hlc2l6ZVswXSwgc2VsZi5jYWNoZXNpemVbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhY2hlc2l6ZVsyXSwgc2VsZi5jYWNoZXNpemVbMl0pCisgICAgICAgICAgICAjIEJlcmtlbGV5IERCIGV4cGFuZHMgdGhlIGNhY2hlIDI1JSBhY2NvdW50aW5nIG92ZXJoZWFkLAorICAgICAgICAgICAgIyBpZiB0aGUgY2FjaGUgaXMgc21hbGwuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEyNSwgaW50KDEwMC4wKmNhY2hlc2l6ZVsxXS9zZWxmLmNhY2hlc2l6ZVsxXSkpCisgICAgICAgIHNlbGYuZC5zZXRfZmxhZ3Moc2VsZi5kYnNldGZsYWdzKQorICAgICAgICBpZiBzZWxmLmRibmFtZToKKyAgICAgICAgICAgIHNlbGYuZC5vcGVuKHNlbGYuZmlsZW5hbWUsIHNlbGYuZGJuYW1lLCBzZWxmLmRidHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGJvcGVuZmxhZ3N8ZGIuREJfQ1JFQVRFLCBzZWxmLmRibW9kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZC5vcGVuKHNlbGYuZmlsZW5hbWUsICAgIyB0cnkgb3V0IGtleXdvcmQgYXJncworICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IHNlbGYuZGJtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgZGJ0eXBlID0gc2VsZi5kYnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyA9IHNlbGYuZGJvcGVuZmxhZ3N8ZGIuREJfQ1JFQVRFKQorCisgICAgICAgIGlmIG5vdCBzZWxmLnVzZUVudjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmQuc2V0X2NhY2hlc2l6ZSwgKnNlbGYuY2FjaGVzaXplKQorCisgICAgICAgIHNlbGYucG9wdWxhdGVEQigpCisKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5kLmNsb3NlKCkKKyAgICAgICAgaWYgc2VsZi5lbnYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmVudi5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQucm10cmVlKHNlbGYuaG9tZURpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLmZpbGVuYW1lKQorCisKKworICAgIGRlZiBwb3B1bGF0ZURCKHNlbGYsIF90eG49Tm9uZSk6CisgICAgICAgIGQgPSBzZWxmLmQKKworICAgICAgICBmb3IgeCBpbiByYW5nZShzZWxmLl9udW1LZXlzLy8yKToKKyAgICAgICAgICAgIGtleSA9ICclMDRkJyAlIChzZWxmLl9udW1LZXlzIC0geCkgICMgaW5zZXJ0IGtleXMgaW4gcmV2ZXJzZSBvcmRlcgorICAgICAgICAgICAgZGF0YSA9IHNlbGYubWFrZURhdGEoa2V5KQorICAgICAgICAgICAgZC5wdXQoa2V5LCBkYXRhLCBfdHhuKQorCisgICAgICAgIGQucHV0KCdlbXB0eSB2YWx1ZScsICcnLCBfdHhuKQorCisgICAgICAgIGZvciB4IGluIHJhbmdlKHNlbGYuX251bUtleXMvLzItMSk6CisgICAgICAgICAgICBrZXkgPSAnJTA0ZCcgJSB4ICAjIGFuZCBub3cgc29tZSBpbiBmb3J3YXJkIG9yZGVyCisgICAgICAgICAgICBkYXRhID0gc2VsZi5tYWtlRGF0YShrZXkpCisgICAgICAgICAgICBkLnB1dChrZXksIGRhdGEsIF90eG4pCisKKyAgICAgICAgaWYgX3R4bjoKKyAgICAgICAgICAgIF90eG4uY29tbWl0KCkKKworICAgICAgICBudW0gPSBsZW4oZCkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJjcmVhdGVkICVkIHJlY29yZHMiICUgbnVtCisKKworICAgIGRlZiBtYWtlRGF0YShzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4gREFTSC5qb2luKFtrZXldICogNSkKKworCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHRlc3QwMV9HZXRzQW5kUHV0cyhzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuZAorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwMV9HZXRzQW5kUHV0cy4uLiIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgICAgIGZvciBrZXkgaW4gWycwMDAxJywgJzAxMDAnLCAnMDQwMCcsICcwNzAwJywgJzA5OTknXToKKyAgICAgICAgICAgIGRhdGEgPSBkLmdldChrZXkpCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50IGRhdGEKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCcwMzIxJyksICcwMzIxLTAzMjEtMDMyMS0wMzIxLTAzMjEnKQorCisgICAgICAgICMgQnkgZGVmYXVsdCBub24tZXhpc3RlbnQga2V5cyByZXR1cm4gTm9uZS4uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdhYmNkJyksIE5vbmUpCisKKyAgICAgICAgIyAuLi5idXQgdGhleSByYWlzZSBleGNlcHRpb25zIGluIG90aGVyIHNpdHVhdGlvbnMuICBDYWxsCisgICAgICAgICMgc2V0X2dldF9yZXR1cm5zX25vbmUoKSB0byBjaGFuZ2UgaXQuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGQuZGVsZXRlKCdhYmNkJykKKyAgICAgICAgZXhjZXB0IGRiLkRCTm90Rm91bmRFcnJvciwgdmFsOgorICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA2KSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxbMF0sIGRiLkRCX05PVEZPVU5EKQorICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgZGIuREJfTk9URk9VTkQpCisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIikKKworCisgICAgICAgIGQucHV0KCdhYmNkJywgJ2EgbmV3IHJlY29yZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ2FiY2QnKSwgJ2EgbmV3IHJlY29yZCcpCisKKyAgICAgICAgZC5wdXQoJ2FiY2QnLCAnc2FtZSBrZXknKQorICAgICAgICBpZiBzZWxmLmRic2V0ZmxhZ3MgJiBkYi5EQl9EVVA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdhYmNkJyksICdhIG5ldyByZWNvcmQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnYWJjZCcpLCAnc2FtZSBrZXknKQorCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZC5wdXQoJ2FiY2QnLCAndGhpcyBzaG91bGQgZmFpbCcsIGZsYWdzPWRiLkRCX05PT1ZFUldSSVRFKQorICAgICAgICBleGNlcHQgZGIuREJLZXlFeGlzdEVycm9yLCB2YWw6CisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbFswXSwgZGIuREJfS0VZRVhJU1QpCisgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5EQl9LRVlFWElTVCkKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50IHZhbAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24iKQorCisgICAgICAgIGlmIHNlbGYuZGJzZXRmbGFncyAmIGRiLkRCX0RVUDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ2FiY2QnKSwgJ2EgbmV3IHJlY29yZCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdhYmNkJyksICdzYW1lIGtleScpCisKKworICAgICAgICBkLnN5bmMoKQorICAgICAgICBkLmNsb3NlKCkKKyAgICAgICAgZGVsIGQKKworICAgICAgICBzZWxmLmQgPSBkYi5EQihzZWxmLmVudikKKyAgICAgICAgaWYgc2VsZi5kYm5hbWU6CisgICAgICAgICAgICBzZWxmLmQub3BlbihzZWxmLmZpbGVuYW1lLCBzZWxmLmRibmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZC5vcGVuKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGQgPSBzZWxmLmQKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCcwMzIxJyksICcwMzIxLTAzMjEtMDMyMS0wMzIxLTAzMjEnKQorICAgICAgICBpZiBzZWxmLmRic2V0ZmxhZ3MgJiBkYi5EQl9EVVA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdhYmNkJyksICdhIG5ldyByZWNvcmQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnYWJjZCcpLCAnc2FtZSBrZXknKQorCisgICAgICAgIHJlYyA9IGQuZ2V0X2JvdGgoJzA1NTUnLCAnMDU1NS0wNTU1LTA1NTUtMDU1NS0wNTU1JykKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50IHJlYworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRfYm90aCgnMDU1NScsICdiYWQgZGF0YScpLCBOb25lKQorCisgICAgICAgICMgdGVzdCBkZWZhdWx0IHZhbHVlCisgICAgICAgIGRhdGEgPSBkLmdldCgnYmFkIGtleScsICdiYWQgZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgJ2JhZCBkYXRhJykKKworICAgICAgICAjIGFueSBvYmplY3QgY2FuIHBhc3MgdGhyb3VnaAorICAgICAgICBkYXRhID0gZC5nZXQoJ2JhZCBrZXknLCBzZWxmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHNlbGYpCisKKyAgICAgICAgcyA9IGQuc3RhdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzKSwgdHlwZSh7fSkpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnZC5zdGF0KCkgcmV0dXJuZWQgdGhpcyBkaWN0aW9uYXJ5OicKKyAgICAgICAgICAgIHBwcmludChzKQorCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHRlc3QwMl9EaWN0aW9uYXJ5TWV0aG9kcyhzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuZAorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwMl9EaWN0aW9uYXJ5TWV0aG9kcy4uLiIgJSBcCisgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgICAgIGZvciBrZXkgaW4gWycwMDAyJywgJzAxMDEnLCAnMDQwMScsICcwNzAxJywgJzA5OTgnXToKKyAgICAgICAgICAgIGRhdGEgPSBkW2tleV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc2VsZi5tYWtlRGF0YShrZXkpKQorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCBkYXRhCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIHNlbGYuX251bUtleXMpCisgICAgICAgIGtleXMgPSBkLmtleXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihrZXlzKSwgc2VsZi5fbnVtS2V5cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGtleXMpLCB0eXBlKFtdKSkKKworICAgICAgICBkWyduZXcgcmVjb3JkJ10gPSAnYSBuZXcgcmVjb3JkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgc2VsZi5fbnVtS2V5cysxKQorICAgICAgICBrZXlzID0gZC5rZXlzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5cyksIHNlbGYuX251bUtleXMrMSkKKworICAgICAgICBkWyduZXcgcmVjb3JkJ10gPSAnYSByZXBsYWNlbWVudCByZWNvcmQnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCBzZWxmLl9udW1LZXlzKzEpCisgICAgICAgIGtleXMgPSBkLmtleXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihrZXlzKSwgc2VsZi5fbnVtS2V5cysxKQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAidGhlIGZpcnN0IDEwIGtleXMgYXJlOiIKKyAgICAgICAgICAgIHBwcmludChrZXlzWzoxMF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWyduZXcgcmVjb3JkJ10sICdhIHJlcGxhY2VtZW50IHJlY29yZCcpCisKKyMgV2UgY2hlY2sgYWxzbyB0aGUgcG9zaXRpb25hbCBwYXJhbWV0ZXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmhhc19rZXkoJzAwMDEnLCBOb25lKSwgMSkKKyMgV2UgY2hlY2sgYWxzbyB0aGUga2V5d29yZCBwYXJhbWV0ZXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmhhc19rZXkoJ3NwYW0nLCB0eG49Tm9uZSksIDApCisKKyAgICAgICAgaXRlbXMgPSBkLml0ZW1zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXRlbXMpLCBzZWxmLl9udW1LZXlzKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdGVtcyksIHR5cGUoW10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXRlbXNbMF0pLCB0eXBlKCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXRlbXNbMF0pLCAyKQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAidGhlIGZpcnN0IDEwIGl0ZW1zIGFyZToiCisgICAgICAgICAgICBwcHJpbnQoaXRlbXNbOjEwXSkKKworICAgICAgICB2YWx1ZXMgPSBkLnZhbHVlcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZhbHVlcyksIHNlbGYuX251bUtleXMrMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbHVlcyksIHR5cGUoW10pKQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAidGhlIGZpcnN0IDEwIHZhbHVlcyBhcmU6IgorICAgICAgICAgICAgcHByaW50KHZhbHVlc1s6MTBdKQorCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHRlc3QwMmJfU2VxdWVuY2VNZXRob2RzKHNlbGYpOgorICAgICAgICBkID0gc2VsZi5kCisKKyAgICAgICAgZm9yIGtleSBpbiBbJzAwMDInLCAnMDEwMScsICcwNDAxJywgJzA3MDEnLCAnMDk5OCddOgorICAgICAgICAgICAgZGF0YSA9IGRba2V5XQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBzZWxmLm1ha2VEYXRhKGtleSkpCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50IGRhdGEKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihkLCAiX19jb250YWluc19fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiMDQwMSIgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgiMTIzNCIgaW4gZCkKKworCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiB0ZXN0MDNfU2ltcGxlQ3Vyc29yU3R1ZmYoc2VsZiwgZ2V0X3JhaXNlc19lcnJvcj0wLCBzZXRfcmFpc2VzX2Vycm9yPTApOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDNfU2ltcGxlQ3Vyc29yU3R1ZmYgKGdldF9lcnJvciAlcywgc2V0X2Vycm9yICVzKS4uLiIgJSBcCisgICAgICAgICAgICAgICAgICAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGdldF9yYWlzZXNfZXJyb3IsIHNldF9yYWlzZXNfZXJyb3IpCisKKyAgICAgICAgaWYgc2VsZi5lbnYgYW5kIHNlbGYuZGJvcGVuZmxhZ3MgJiBkYi5EQl9BVVRPX0NPTU1JVDoKKyAgICAgICAgICAgIHR4biA9IHNlbGYuZW52LnR4bl9iZWdpbigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0eG4gPSBOb25lCisgICAgICAgIGMgPSBzZWxmLmQuY3Vyc29yKHR4bj10eG4pCisKKyAgICAgICAgcmVjID0gYy5maXJzdCgpCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICB3aGlsZSByZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQorICAgICAgICAgICAgaWYgdmVyYm9zZSBhbmQgY291bnQgJSAxMDAgPT0gMDoKKyAgICAgICAgICAgICAgICBwcmludCByZWMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWMgPSBjLm5leHQoKQorICAgICAgICAgICAgZXhjZXB0IGRiLkRCTm90Rm91bmRFcnJvciwgdmFsOgorICAgICAgICAgICAgICAgIGlmIGdldF9yYWlzZXNfZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxbMF0sIGRiLkRCX05PVEZPVU5EKQorICAgICAgICAgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX05PVEZPVU5EKQorICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKKyAgICAgICAgICAgICAgICAgICAgcmVjID0gTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgidW5leHBlY3RlZCBEQk5vdEZvdW5kRXJyb3IiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmdldF9jdXJyZW50X3NpemUoKSwgbGVuKGMuY3VycmVudCgpWzFdKSwKKyAgICAgICAgICAgICAgICAgICAgIiVzICE9IGxlbiglcikiICUgKGMuZ2V0X2N1cnJlbnRfc2l6ZSgpLCBjLmN1cnJlbnQoKVsxXSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgc2VsZi5fbnVtS2V5cykKKworCisgICAgICAgIHJlYyA9IGMubGFzdCgpCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICB3aGlsZSByZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQorICAgICAgICAgICAgaWYgdmVyYm9zZSBhbmQgY291bnQgJSAxMDAgPT0gMDoKKyAgICAgICAgICAgICAgICBwcmludCByZWMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWMgPSBjLnByZXYoKQorICAgICAgICAgICAgZXhjZXB0IGRiLkRCTm90Rm91bmRFcnJvciwgdmFsOgorICAgICAgICAgICAgICAgIGlmIGdldF9yYWlzZXNfZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxbMF0sIGRiLkRCX05PVEZPVU5EKQorICAgICAgICAgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX05PVEZPVU5EKQorICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKKyAgICAgICAgICAgICAgICAgICAgcmVjID0gTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgidW5leHBlY3RlZCBEQk5vdEZvdW5kRXJyb3IiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnQsIHNlbGYuX251bUtleXMpCisKKyAgICAgICAgcmVjID0gYy5zZXQoJzA1MDUnKQorICAgICAgICByZWMyID0gYy5jdXJyZW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWMsIHJlYzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjWzBdLCAnMDUwNScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjWzFdLCBzZWxmLm1ha2VEYXRhKCcwNTA1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5nZXRfY3VycmVudF9zaXplKCksIGxlbihyZWNbMV0pKQorCisgICAgICAgICMgbWFrZSBzdXJlIHdlIGdldCBlbXB0eSB2YWx1ZXMgcHJvcGVybHkKKyAgICAgICAgcmVjID0gYy5zZXQoJ2VtcHR5IHZhbHVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNbMV0sICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZ2V0X2N1cnJlbnRfc2l6ZSgpLCAwKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG4gPSBjLnNldCgnYmFkIGtleScpCisgICAgICAgIGV4Y2VwdCBkYi5EQk5vdEZvdW5kRXJyb3IsIHZhbDoKKyAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsWzBdLCBkYi5EQl9OT1RGT1VORCkKKyAgICAgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmFyZ3NbMF0sIGRiLkRCX05PVEZPVU5EKQorICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgdmFsCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZXRfcmFpc2VzX2Vycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIikKKyAgICAgICAgICAgIGlmIG4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBOb25lOiAlciIgJSAobiwpKQorCisgICAgICAgIHJlYyA9IGMuZ2V0X2JvdGgoJzA0MDQnLCBzZWxmLm1ha2VEYXRhKCcwNDA0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjLCAoJzA0MDQnLCBzZWxmLm1ha2VEYXRhKCcwNDA0JykpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG4gPSBjLmdldF9ib3RoKCcwNDA0JywgJ2JhZCBkYXRhJykKKyAgICAgICAgZXhjZXB0IGRiLkRCTm90Rm91bmRFcnJvciwgdmFsOgorICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA2KSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxbMF0sIGRiLkRCX05PVEZPVU5EKQorICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgZGIuREJfTk9URk9VTkQpCisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGdldF9yYWlzZXNfZXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24iKQorICAgICAgICAgICAgaWYgbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIE5vbmU6ICVyIiAlIChuLCkpCisKKyAgICAgICAgaWYgc2VsZi5kLmdldF90eXBlKCkgPT0gZGIuREJfQlRSRUU6CisgICAgICAgICAgICByZWMgPSBjLnNldF9yYW5nZSgnMDExJykKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgInNlYXJjaGVkIGZvciAnMDExJywgZm91bmQ6ICIsIHJlYworCisgICAgICAgICAgICByZWMgPSBjLnNldF9yYW5nZSgnMDExJyxkbGVuPTAsZG9mZj0wKQorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAic2VhcmNoZWQgKHBhcnRpYWwpIGZvciAnMDExJywgZm91bmQ6ICIsIHJlYworICAgICAgICAgICAgaWYgcmVjWzFdICE9ICcnOiBzZWxmLmZhaWwoJ2V4cGVjdGVkIGVtcHR5IGRhdGEgcG9ydGlvbicpCisKKyAgICAgICAgICAgIGV2ID0gYy5zZXRfcmFuZ2UoJ2VtcHR5IHZhbHVlJykKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgInNlYXJjaCBmb3IgJ2VtcHR5IHZhbHVlJyByZXR1cm5lZCIsIGV2CisgICAgICAgICAgICBpZiBldlsxXSAhPSAnJzogc2VsZi5mYWlsKCdlbXB0eSB2YWx1ZSBsb29rdXAgZmFpbGVkJykKKworICAgICAgICBjLnNldCgnMDQ5OScpCisgICAgICAgIGMuZGVsZXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVjID0gYy5jdXJyZW50KCkKKyAgICAgICAgZXhjZXB0IGRiLkRCS2V5RW1wdHlFcnJvciwgdmFsOgorICAgICAgICAgICAgaWYgZ2V0X3JhaXNlc19lcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxbMF0sIGRiLkRCX0tFWUVNUFRZKQorICAgICAgICAgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5EQl9LRVlFTVBUWSkKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmV4cGVjdGVkIERCS2V5RW1wdHlFcnJvciIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBnZXRfcmFpc2VzX2Vycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnREJLZXlFbXB0eUVycm9yIGV4Y2VwdGlvbiBleHBlY3RlZCcpCisKKyAgICAgICAgYy5uZXh0KCkKKyAgICAgICAgYzIgPSBjLmR1cChkYi5EQl9QT1NJVElPTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmN1cnJlbnQoKSwgYzIuY3VycmVudCgpKQorCisgICAgICAgIGMyLnB1dCgnJywgJ2EgbmV3IHZhbHVlJywgZGIuREJfQ1VSUkVOVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmN1cnJlbnQoKSwgYzIuY3VycmVudCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY3VycmVudCgpWzFdLCAnYSBuZXcgdmFsdWUnKQorCisgICAgICAgIGMyLnB1dCgnJywgJ2VyJywgZGIuREJfQ1VSUkVOVCwgZGxlbj0wLCBkb2ZmPTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYzIuY3VycmVudCgpWzFdLCAnYSBuZXdlciB2YWx1ZScpCisKKyAgICAgICAgYy5jbG9zZSgpCisgICAgICAgIGMyLmNsb3NlKCkKKyAgICAgICAgaWYgdHhuOgorICAgICAgICAgICAgdHhuLmNvbW1pdCgpCisKKyAgICAgICAgIyB0aW1lIHRvIGFidXNlIHRoZSBjbG9zZWQgY3Vyc29ycyBhbmQgaG9wZSB3ZSBkb24ndCBjcmFzaAorICAgICAgICBtZXRob2RzX3RvX3Rlc3QgPSB7CisgICAgICAgICAgICAnY3VycmVudCc6ICgpLAorICAgICAgICAgICAgJ2RlbGV0ZSc6ICgpLAorICAgICAgICAgICAgJ2R1cCc6IChkYi5EQl9QT1NJVElPTiwpLAorICAgICAgICAgICAgJ2ZpcnN0JzogKCksCisgICAgICAgICAgICAnZ2V0JzogKDAsKSwKKyAgICAgICAgICAgICduZXh0JzogKCksCisgICAgICAgICAgICAncHJldic6ICgpLAorICAgICAgICAgICAgJ2xhc3QnOiAoKSwKKyAgICAgICAgICAgICdwdXQnOignJywgJ3NwYW0nLCBkYi5EQl9DVVJSRU5UKSwKKyAgICAgICAgICAgICdzZXQnOiAoIjA1MDUiLCksCisgICAgICAgIH0KKyAgICAgICAgZm9yIG1ldGhvZCwgYXJncyBpbiBtZXRob2RzX3RvX3Rlc3QuaXRlbXMoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiYXR0ZW1wdGluZyB0byB1c2UgYSBjbG9zZWQgY3Vyc29yJ3MgJXMgbWV0aG9kIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kCisgICAgICAgICAgICAgICAgIyBhIGJ1ZyBtYXkgY2F1c2UgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuLi4KKyAgICAgICAgICAgICAgICBnZXRhdHRyKGMsIG1ldGhvZCkoKmFyZ3MpCisgICAgICAgICAgICBleGNlcHQgZGIuREJFcnJvciwgdmFsOgorICAgICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbFswXSwgMCkKKyAgICAgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgMCkKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBleGNlcHRpb24gcmFpc2VkIHdoZW4gdXNpbmcgYSBidWdneSBjdXJzb3IncyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIG1ldGhvZCIgJSBtZXRob2QpCisKKyAgICAgICAgIworICAgICAgICAjIGZyZWUgY3Vyc29yIHJlZmVyZW5jaW5nIGEgY2xvc2VkIGRhdGFiYXNlLCBpdCBzaG91bGQgbm90IGJhcmY6CisgICAgICAgICMKKyAgICAgICAgb2xkY3Vyc29yID0gc2VsZi5kLmN1cnNvcih0eG49dHhuKQorICAgICAgICBzZWxmLmQuY2xvc2UoKQorCisgICAgICAgICMgdGhpcyB3b3VsZCBvcmlnaW5hbGx5IGNhdXNlIGEgc2VnZmF1bHQgd2hlbiB0aGUgY3Vyc29yIGZvciBhCisgICAgICAgICMgY2xvc2VkIGRhdGFiYXNlIHdhcyBjbGVhbmVkIHVwLiAgaXQgc2hvdWxkIG5vdCBhbnltb3JlLgorICAgICAgICAjIFNGIHB5YnNkZGIgYnVnIGlkIDY2NzM0MworICAgICAgICBkZWwgb2xkY3Vyc29yCisKKyAgICBkZWYgdGVzdDAzYl9TaW1wbGVDdXJzb3JXaXRob3V0R2V0UmV0dXJuc05vbmUwKHNlbGYpOgorICAgICAgICAjIHNhbWUgdGVzdCBidXQgcmFpc2UgZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIHJldHVybmluZyBOb25lCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwM2JfU2ltcGxlQ3Vyc29yU3R1ZmZXaXRob3V0R2V0UmV0dXJuc05vbmUuLi4iICUgXAorICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBvbGQgPSBzZWxmLmQuc2V0X2dldF9yZXR1cm5zX25vbmUoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvbGQsIDIpCisgICAgICAgIHNlbGYudGVzdDAzX1NpbXBsZUN1cnNvclN0dWZmKGdldF9yYWlzZXNfZXJyb3I9MSwgc2V0X3JhaXNlc19lcnJvcj0xKQorCisgICAgZGVmIHRlc3QwM2JfU2ltcGxlQ3Vyc29yV2l0aEdldFJldHVybnNOb25lMShzZWxmKToKKyAgICAgICAgIyBzYW1lIHRlc3QgYnV0IHJhaXNlIGV4Y2VwdGlvbnMgaW5zdGVhZCBvZiByZXR1cm5pbmcgTm9uZQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDNiX1NpbXBsZUN1cnNvclN0dWZmV2l0aG91dEdldFJldHVybnNOb25lLi4uIiAlIFwKKyAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICAgICAgb2xkID0gc2VsZi5kLnNldF9nZXRfcmV0dXJuc19ub25lKDEpCisgICAgICAgIHNlbGYudGVzdDAzX1NpbXBsZUN1cnNvclN0dWZmKGdldF9yYWlzZXNfZXJyb3I9MCwgc2V0X3JhaXNlc19lcnJvcj0xKQorCisKKyAgICBkZWYgdGVzdDAzY19TaW1wbGVDdXJzb3JHZXRSZXR1cm5zTm9uZTIoc2VsZik6CisgICAgICAgICMgc2FtZSB0ZXN0IGJ1dCByYWlzZSBleGNlcHRpb25zIGluc3RlYWQgb2YgcmV0dXJuaW5nIE5vbmUKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdcbicsICctPScgKiAzMAorICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDAzY19TaW1wbGVDdXJzb3JTdHVmZldpdGhvdXRTZXRSZXR1cm5zTm9uZS4uLiIgJSBcCisgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgICAgIG9sZCA9IHNlbGYuZC5zZXRfZ2V0X3JldHVybnNfbm9uZSgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9sZCwgMikKKyAgICAgICAgb2xkID0gc2VsZi5kLnNldF9nZXRfcmV0dXJuc19ub25lKDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2xkLCAxKQorICAgICAgICBzZWxmLnRlc3QwM19TaW1wbGVDdXJzb3JTdHVmZihnZXRfcmFpc2VzX2Vycm9yPTAsIHNldF9yYWlzZXNfZXJyb3I9MCkKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNik6CisgICAgICAgIGRlZiB0ZXN0MDNkX1NpbXBsZUN1cnNvclByaW9yaXR5KHNlbGYpIDoKKyAgICAgICAgICAgIGMgPSBzZWxmLmQuY3Vyc29yKCkKKyAgICAgICAgICAgIGMuc2V0X3ByaW9yaXR5KGRiLkRCX1BSSU9SSVRZX1ZFUllfTE9XKSAgIyBQb3NpdGlvbmFsCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRiLkRCX1BSSU9SSVRZX1ZFUllfTE9XLCBjLmdldF9wcmlvcml0eSgpKQorICAgICAgICAgICAgYy5zZXRfcHJpb3JpdHkocHJpb3JpdHk9ZGIuREJfUFJJT1JJVFlfSElHSCkgICMgS2V5d29yZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYi5EQl9QUklPUklUWV9ISUdILCBjLmdldF9wcmlvcml0eSgpKQorICAgICAgICAgICAgYy5jbG9zZSgpCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHRlc3QwNF9QYXJ0aWFsR2V0QW5kUHV0KHNlbGYpOgorICAgICAgICBkID0gc2VsZi5kCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwNF9QYXJ0aWFsR2V0QW5kUHV0Li4uIiAlIFwKKyAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICAgICAga2V5ID0gInBhcnRpYWxUZXN0IgorICAgICAgICBkYXRhID0gIjEiICogMTAwMCArICIyIiAqIDEwMDAKKyAgICAgICAgZC5wdXQoa2V5LCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KGtleSksIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoa2V5LCBkbGVuPTIwLCBkb2ZmPTk5MCksCisgICAgICAgICAgICAgICAgKCIxIiAqIDEwKSArICgiMiIgKiAxMCkpCisKKyAgICAgICAgZC5wdXQoInBhcnRpYWx0ZXN0MiIsICgiMSIgKiAzMDAwMCkgKyAicm9iaW4iICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgicGFydGlhbHRlc3QyIiwgZGxlbj01LCBkb2ZmPTMwMDAwKSwgInJvYmluIikKKworICAgICAgICAjIFRoZXJlIHNlZW1zIHRvIGJlIGEgYnVnIGluIERCIGhlcmUuLi4gIENvbW1lbnRlZCBvdXQgdGhlIHRlc3QgZm9yCisgICAgICAgICMgbm93LgorICAgICAgICAjI3NlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoInBhcnRpYWx0ZXN0MiIsIGRsZW49NSwgZG9mZj0zMDAxMCksICIiKQorCisgICAgICAgIGlmIHNlbGYuZGJzZXRmbGFncyAhPSBkYi5EQl9EVVA6CisgICAgICAgICAgICAjIFBhcnRpYWwgcHV0IHdpdGggZHVwbGljYXRlIHJlY29yZHMgcmVxdWlyZXMgYSBjdXJzb3IKKyAgICAgICAgICAgIGQucHV0KGtleSwgIjAwMDAiLCBkbGVuPTIwMDAsIGRvZmY9MCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoa2V5KSwgIjAwMDAiKQorCisgICAgICAgICAgICBkLnB1dChrZXksICIxMTExIiwgZGxlbj0xLCBkb2ZmPTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KGtleSksICIwMDExMTEwIikKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBkZWYgdGVzdDA1X0dldFNpemUoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLmQKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdcbicsICctPScgKiAzMAorICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDA1X0dldFNpemUuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCA1MDAwMCwgNTAwKToKKyAgICAgICAgICAgIGtleSA9ICJzaXplJXMiICUgaQorICAgICAgICAgICAgI3ByaW50ICJiZWZvcmUgIiwgaSwKKyAgICAgICAgICAgIGQucHV0KGtleSwgIjEiICogaSkKKyAgICAgICAgICAgICNwcmludCAiYWZ0ZXIiLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldF9zaXplKGtleSksIGkpCisgICAgICAgICAgICAjcHJpbnQgImRvbmUiCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHRlc3QwNl9UcnVuY2F0ZShzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuZAorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDZfVHJ1bmNhdGUuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBkLnB1dCgiYWJjZGUiLCAiQUJDREUiKTsKKyAgICAgICAgbnVtID0gZC50cnVuY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudW0gPj0gMSwgInRydW5jYXRlIHJldHVybmVkIDw9IDAgb24gbm9uLWVtcHR5IGRhdGFiYXNlIikKKyAgICAgICAgbnVtID0gZC50cnVuY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtLCAwLAorICAgICAgICAgICAgICAgICJ0cnVuY2F0ZSBvbiBlbXB0eSBEQiByZXR1cm5lZCBub256ZXJvICglcikiICUgKG51bSwpKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiB0ZXN0MDdfdmVyaWZ5KHNlbGYpOgorICAgICAgICAjIFZlcmlmeSBidWcgc29sdmVkIGluIDQuNy4zcHJlOAorICAgICAgICBzZWxmLmQuY2xvc2UoKQorICAgICAgICBkID0gZGIuREIoc2VsZi5lbnYpCisgICAgICAgIGQudmVyaWZ5KHNlbGYuZmlsZW5hbWUpCisKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDYpOgorICAgICAgICBkZWYgdGVzdDA4X2V4aXN0cyhzZWxmKSA6CisgICAgICAgICAgICBzZWxmLmQucHV0KCJhYmNkZSIsICJBQkNERSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kLmV4aXN0cygiYWJjZGUiKSA9PSBUcnVlLAorICAgICAgICAgICAgICAgICAgICAiREItPmV4aXN0cygpIHJldHVybnMgd3JvbmcgdmFsdWUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZC5leGlzdHMoIngiKSA9PSBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgIkRCLT5leGlzdHMoKSByZXR1cm5zIHdyb25nIHZhbHVlIikKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDcpOgorICAgICAgICBkZWYgdGVzdF9jb21wYWN0KHNlbGYpIDoKKyAgICAgICAgICAgIGQgPSBzZWxmLmQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZC5jb21wYWN0KGZsYWdzPWRiLkRCX0ZSRUVMSVNUX09OTFkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBkLmNvbXBhY3QoZmxhZ3M9ZGIuREJfRlJFRUxJU1RfT05MWSkpCisgICAgICAgICAgICBkLnB1dCgiYWJjZGUiLCAiQUJDREUiKTsKKyAgICAgICAgICAgIGQucHV0KCJiY2RlIiwgIkJDREUiKTsKKyAgICAgICAgICAgIGQucHV0KCJhYmMiLCAiQUJDIik7CisgICAgICAgICAgICBkLnB1dCgibW9udHkiLCAicHl0aG9uIik7CisgICAgICAgICAgICBkLmRlbGV0ZSgiYWJjIikKKyAgICAgICAgICAgIGQuZGVsZXRlKCJiY2RlIikKKyAgICAgICAgICAgIGQuY29tcGFjdChzdGFydD0nYWJjZGUnLCBzdG9wPSdtb250eScsIHR4bj1Ob25lLAorICAgICAgICAgICAgICAgICAgICBjb21wYWN0X2ZpbGxwZXJjZW50PTQyLCBjb21wYWN0X3BhZ2VzPTEsCisgICAgICAgICAgICAgICAgICAgIGNvbXBhY3RfdGltZW91dD01MDAwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgZmxhZ3M9ZGIuREJfRlJFRUxJU1RfT05MWXxkYi5EQl9GUkVFX1NQQUNFKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitjbGFzcyBCYXNpY0JUcmVlVGVzdENhc2UoQmFzaWNUZXN0Q2FzZSk6CisgICAgZGJ0eXBlID0gZGIuREJfQlRSRUUKKworCitjbGFzcyBCYXNpY0hhc2hUZXN0Q2FzZShCYXNpY1Rlc3RDYXNlKToKKyAgICBkYnR5cGUgPSBkYi5EQl9IQVNICisKKworY2xhc3MgQmFzaWNCVHJlZVdpdGhUaHJlYWRGbGFnVGVzdENhc2UoQmFzaWNUZXN0Q2FzZSk6CisgICAgZGJ0eXBlID0gZGIuREJfQlRSRUUKKyAgICBkYm9wZW5mbGFncyA9IGRiLkRCX1RIUkVBRAorCisKK2NsYXNzIEJhc2ljSGFzaFdpdGhUaHJlYWRGbGFnVGVzdENhc2UoQmFzaWNUZXN0Q2FzZSk6CisgICAgZGJ0eXBlID0gZGIuREJfSEFTSAorICAgIGRib3BlbmZsYWdzID0gZGIuREJfVEhSRUFECisKKworY2xhc3MgQmFzaWNXaXRoRW52VGVzdENhc2UoQmFzaWNUZXN0Q2FzZSk6CisgICAgZGJvcGVuZmxhZ3MgPSBkYi5EQl9USFJFQUQKKyAgICB1c2VFbnYgPSAxCisgICAgZW52ZmxhZ3MgPSBkYi5EQl9USFJFQUQgfCBkYi5EQl9JTklUX01QT09MIHwgZGIuREJfSU5JVF9MT0NLCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHRlc3QwOV9FbnZSZW1vdmVBbmRSZW5hbWUoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmVudjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwOV9FbnZSZW1vdmVBbmRSZW5hbWUuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICAjIGNhbid0IHJlbmFtZSBvciByZW1vdmUgYW4gb3BlbiBEQgorICAgICAgICBzZWxmLmQuY2xvc2UoKQorCisgICAgICAgIG5ld25hbWUgPSBzZWxmLmZpbGVuYW1lICsgJy5yZW5hbWVkJworICAgICAgICBzZWxmLmVudi5kYnJlbmFtZShzZWxmLmZpbGVuYW1lLCBOb25lLCBuZXduYW1lKQorICAgICAgICBzZWxmLmVudi5kYnJlbW92ZShuZXduYW1lKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgQmFzaWNCVHJlZVdpdGhFbnZUZXN0Q2FzZShCYXNpY1dpdGhFbnZUZXN0Q2FzZSk6CisgICAgZGJ0eXBlID0gZGIuREJfQlRSRUUKKworCitjbGFzcyBCYXNpY0hhc2hXaXRoRW52VGVzdENhc2UoQmFzaWNXaXRoRW52VGVzdENhc2UpOgorICAgIGRidHlwZSA9IGRiLkRCX0hBU0gKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBCYXNpY1RyYW5zYWN0aW9uVGVzdENhc2UoQmFzaWNUZXN0Q2FzZSk6CisgICAgaWYgKHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNykpIG9yICgoc3lzLnZlcnNpb25faW5mbyA+PSAoMywgMCkpIGFuZAorICAgICAgICAgICAgKHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMikpKSA6CisgICAgICAgIGRlZiBhc3NlcnRJbihzZWxmLCBhLCBiLCBtc2c9Tm9uZSkgOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXNzZXJ0VHJ1ZShhIGluIGIsIG1zZz1tc2cpCisKKyAgICBkYm9wZW5mbGFncyA9IGRiLkRCX1RIUkVBRCB8IGRiLkRCX0FVVE9fQ09NTUlUCisgICAgdXNlRW52ID0gMQorICAgIGVudmZsYWdzID0gKGRiLkRCX1RIUkVBRCB8IGRiLkRCX0lOSVRfTVBPT0wgfCBkYi5EQl9JTklUX0xPQ0sgfAorICAgICAgICAgICAgICAgIGRiLkRCX0lOSVRfVFhOKQorICAgIGVudnNldGZsYWdzID0gZGIuREJfQVVUT19DT01NSVQKKworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnR4bi5jb21taXQoKQorICAgICAgICBCYXNpY1Rlc3RDYXNlLnRlYXJEb3duKHNlbGYpCisKKworICAgIGRlZiBwb3B1bGF0ZURCKHNlbGYpOgorICAgICAgICB0eG4gPSBzZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICBCYXNpY1Rlc3RDYXNlLnBvcHVsYXRlREIoc2VsZiwgX3R4bj10eG4pCisKKyAgICAgICAgc2VsZi50eG4gPSBzZWxmLmVudi50eG5fYmVnaW4oKQorCisKKyAgICBkZWYgdGVzdDA2X1RyYW5zYWN0aW9ucyhzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuZAorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDZfVHJhbnNhY3Rpb25zLi4uIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnbmV3IHJlYycsIHR4bj1zZWxmLnR4biksIE5vbmUpCisgICAgICAgIGQucHV0KCduZXcgcmVjJywgJ3RoaXMgaXMgYSBuZXcgcmVjb3JkJywgc2VsZi50eG4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ25ldyByZWMnLCB0eG49c2VsZi50eG4pLAorICAgICAgICAgICAgICAgICd0aGlzIGlzIGEgbmV3IHJlY29yZCcpCisgICAgICAgIHNlbGYudHhuLmFib3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnbmV3IHJlYycpLCBOb25lKQorCisgICAgICAgIHNlbGYudHhuID0gc2VsZi5lbnYudHhuX2JlZ2luKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCduZXcgcmVjJywgdHhuPXNlbGYudHhuKSwgTm9uZSkKKyAgICAgICAgZC5wdXQoJ25ldyByZWMnLCAndGhpcyBpcyBhIG5ldyByZWNvcmQnLCBzZWxmLnR4bikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnbmV3IHJlYycsIHR4bj1zZWxmLnR4biksCisgICAgICAgICAgICAgICAgJ3RoaXMgaXMgYSBuZXcgcmVjb3JkJykKKyAgICAgICAgc2VsZi50eG4uY29tbWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnbmV3IHJlYycpLCAndGhpcyBpcyBhIG5ldyByZWNvcmQnKQorCisgICAgICAgIHNlbGYudHhuID0gc2VsZi5lbnYudHhuX2JlZ2luKCkKKyAgICAgICAgYyA9IGQuY3Vyc29yKHNlbGYudHhuKQorICAgICAgICByZWMgPSBjLmZpcnN0KCkKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIHdoaWxlIHJlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxCisgICAgICAgICAgICBpZiB2ZXJib3NlIGFuZCBjb3VudCAlIDEwMCA9PSAwOgorICAgICAgICAgICAgICAgIHByaW50IHJlYworICAgICAgICAgICAgcmVjID0gYy5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgc2VsZi5fbnVtS2V5cysxKQorCisgICAgICAgIGMuY2xvc2UoKSAgICAgICAgICAgICAgICAjIEN1cnNvcnMgKk1VU1QqIGJlIGNsb3NlZCBiZWZvcmUgY29tbWl0IQorICAgICAgICBzZWxmLnR4bi5jb21taXQoKQorCisgICAgICAgICMgZmx1c2ggcGVuZGluZyB1cGRhdGVzCisgICAgICAgIHNlbGYuZW52LnR4bl9jaGVja3BvaW50ICgwLCAwLCAwKQorCisgICAgICAgIHN0YXREaWN0ID0gc2VsZi5lbnYubG9nX3N0YXQoMCk7CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ21hZ2ljJywgc3RhdERpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3ZlcnNpb24nLCBzdGF0RGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignY3VyX2ZpbGUnLCBzdGF0RGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigncmVnaW9uX25vd2FpdCcsIHN0YXREaWN0KQorCisgICAgICAgICMgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBsb2cgZmlsZSBwcmVzZW50OgorICAgICAgICBsb2dzID0gc2VsZi5lbnYubG9nX2FyY2hpdmUoZGIuREJfQVJDSF9BQlMgfCBkYi5EQl9BUkNIX0xPRykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsb2dzLCBOb25lKQorICAgICAgICBmb3IgbG9nIGluIGxvZ3M6CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICdsb2cgZmlsZTogJyArIGxvZworICAgICAgICAgICAgbG9ncyA9IHNlbGYuZW52LmxvZ19hcmNoaXZlKGRiLkRCX0FSQ0hfUkVNT1ZFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBsb2dzKQorCisgICAgICAgIHNlbGYudHhuID0gc2VsZi5lbnYudHhuX2JlZ2luKCkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDYpOgorICAgICAgICBkZWYgdGVzdDA4X2V4aXN0cyhzZWxmKSA6CisgICAgICAgICAgICB0eG4gPSBzZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICAgICAgc2VsZi5kLnB1dCgiYWJjZGUiLCAiQUJDREUiLCB0eG49dHhuKQorICAgICAgICAgICAgdHhuLmNvbW1pdCgpCisgICAgICAgICAgICB0eG4gPSBzZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZC5leGlzdHMoImFiY2RlIiwgdHhuPXR4bikgPT0gVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgIkRCLT5leGlzdHMoKSByZXR1cm5zIHdyb25nIHZhbHVlIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmQuZXhpc3RzKCJ4IiwgdHhuPXR4bikgPT0gRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICJEQi0+ZXhpc3RzKCkgcmV0dXJucyB3cm9uZyB2YWx1ZSIpCisgICAgICAgICAgICB0eG4uYWJvcnQoKQorCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiB0ZXN0MDlfVHhuVHJ1bmNhdGUoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLmQKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdcbicsICctPScgKiAzMAorICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDA5X1R4blRydW5jYXRlLi4uIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICAgICAgZC5wdXQoImFiY2RlIiwgIkFCQ0RFIik7CisgICAgICAgIHR4biA9IHNlbGYuZW52LnR4bl9iZWdpbigpCisgICAgICAgIG51bSA9IGQudHJ1bmNhdGUodHhuKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnVtID49IDEsICJ0cnVuY2F0ZSByZXR1cm5lZCA8PSAwIG9uIG5vbi1lbXB0eSBkYXRhYmFzZSIpCisgICAgICAgIG51bSA9IGQudHJ1bmNhdGUodHhuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bSwgMCwKKyAgICAgICAgICAgICAgICAidHJ1bmNhdGUgb24gZW1wdHkgREIgcmV0dXJuZWQgbm9uemVybyAoJXIpIiAlIChudW0sKSkKKyAgICAgICAgdHhuLmNvbW1pdCgpCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZGVmIHRlc3QxMF9UeG5MYXRlVXNlKHNlbGYpOgorICAgICAgICB0eG4gPSBzZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICB0eG4uYWJvcnQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0eG4uYWJvcnQoKQorICAgICAgICBleGNlcHQgZGIuREJFcnJvciwgZToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIkRCVHhuLmFib3J0KCkgY2FsbGVkIGFmdGVyIERCX1RYTiBubyBsb25nZXIgdmFsaWQgdy9vIGFuIGV4Y2VwdGlvbiIKKworICAgICAgICB0eG4gPSBzZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICB0eG4uY29tbWl0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHhuLmNvbW1pdCgpCisgICAgICAgIGV4Y2VwdCBkYi5EQkVycm9yLCBlOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiREJUeG4uY29tbWl0KCkgY2FsbGVkIGFmdGVyIERCX1RYTiBubyBsb25nZXIgdmFsaWQgdy9vIGFuIGV4Y2VwdGlvbiIKKworCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCA0KToKKyAgICAgICAgZGVmIHRlc3RfdHhuX25hbWUoc2VsZikgOgorICAgICAgICAgICAgdHhuPXNlbGYuZW52LnR4bl9iZWdpbigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4bi5nZXRfbmFtZSgpLCAiIikKKyAgICAgICAgICAgIHR4bi5zZXRfbmFtZSgiWFhZWSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4bi5nZXRfbmFtZSgpLCAiWFhZWSIpCisgICAgICAgICAgICB0eG4uc2V0X25hbWUoIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4bi5nZXRfbmFtZSgpLCAiIikKKyAgICAgICAgICAgIHR4bi5hYm9ydCgpCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKyAgICAgICAgZGVmIHRlc3RfdHhuX3NldF90aW1lb3V0KHNlbGYpIDoKKyAgICAgICAgICAgIHR4bj1zZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICAgICAgdHhuLnNldF90aW1lb3V0KDEyMzQ1NjcsIGRiLkRCX1NFVF9MT0NLX1RJTUVPVVQpCisgICAgICAgICAgICB0eG4uc2V0X3RpbWVvdXQoMjM0NTY3OCwgZmxhZ3M9ZGIuREJfU0VUX1RYTl9USU1FT1VUKQorICAgICAgICAgICAgdHhuLmFib3J0KCkKKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgZGVmIHRlc3RfZ2V0X3R4X21heChzZWxmKSA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW52LmdldF90eF9tYXgoKSwgMzApCisKKyAgICAgICAgZGVmIHRlc3RfZ2V0X3R4X3RpbWVzdGFtcChzZWxmKSA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW52LmdldF90eF90aW1lc3RhbXAoKSwgc2VsZi5fdCkKKworCisKK2NsYXNzIEJUcmVlVHJhbnNhY3Rpb25UZXN0Q2FzZShCYXNpY1RyYW5zYWN0aW9uVGVzdENhc2UpOgorICAgIGRidHlwZSA9IGRiLkRCX0JUUkVFCisKK2NsYXNzIEhhc2hUcmFuc2FjdGlvblRlc3RDYXNlKEJhc2ljVHJhbnNhY3Rpb25UZXN0Q2FzZSk6CisgICAgZGJ0eXBlID0gZGIuREJfSEFTSAorCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgQlRyZWVSZWNub1Rlc3RDYXNlKEJhc2ljVGVzdENhc2UpOgorICAgIGRidHlwZSAgICAgPSBkYi5EQl9CVFJFRQorICAgIGRic2V0ZmxhZ3MgPSBkYi5EQl9SRUNOVU0KKworICAgIGRlZiB0ZXN0MDlfUmVjbm9JbkJUcmVlKHNlbGYpOgorICAgICAgICBkID0gc2VsZi5kCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwOV9SZWNub0luQlRyZWUuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICByZWMgPSBkLmdldCgyMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZWMpLCB0eXBlKCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVjKSwgMikKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJSZWNvcmQgIzIwMCBpcyAiLCByZWMKKworICAgICAgICBjID0gZC5jdXJzb3IoKQorICAgICAgICBjLnNldCgnMDIwMCcpCisgICAgICAgIG51bSA9IGMuZ2V0X3JlY25vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKG51bSksIHR5cGUoMSkpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAicmVjbm8gb2YgZFsnMDIwMCddIGlzICIsIG51bQorCisgICAgICAgIHJlYyA9IGMuY3VycmVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zZXRfcmVjbm8obnVtKSwgcmVjKQorCisgICAgICAgIGMuY2xvc2UoKQorCisKKworY2xhc3MgQlRyZWVSZWNub1dpdGhUaHJlYWRGbGFnVGVzdENhc2UoQlRyZWVSZWNub1Rlc3RDYXNlKToKKyAgICBkYm9wZW5mbGFncyA9IGRiLkRCX1RIUkVBRAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBCYXNpY0RVUFRlc3RDYXNlKEJhc2ljVGVzdENhc2UpOgorICAgIGRic2V0ZmxhZ3MgPSBkYi5EQl9EVVAKKworICAgIGRlZiB0ZXN0MTBfRHVwbGljYXRlS2V5cyhzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuZAorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MTBfRHVwbGljYXRlS2V5cy4uLiIgJSBcCisgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgICAgIGQucHV0KCJkdXAwIiwgImJlZm9yZSIpCisgICAgICAgIGZvciB4IGluICJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIHRoZSBsYXp5IGRvZy4iLnNwbGl0KCk6CisgICAgICAgICAgICBkLnB1dCgiZHVwMSIsIHgpCisgICAgICAgIGQucHV0KCJkdXAyIiwgImFmdGVyIikKKworICAgICAgICBkYXRhID0gZC5nZXQoImR1cDEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICJUaGUiKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgZGF0YQorCisgICAgICAgIGMgPSBkLmN1cnNvcigpCisgICAgICAgIHJlYyA9IGMuc2V0KCJkdXAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWMsICgnZHVwMScsICdUaGUnKSkKKworICAgICAgICBuZXh0X3JlZyA9IGMubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dF9yZWcsICgnZHVwMScsICdxdWljaycpKQorCisgICAgICAgIHJlYyA9IGMuc2V0KCJkdXAxIikKKyAgICAgICAgY291bnQgPSBjLmNvdW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgOSkKKworICAgICAgICBuZXh0X2R1cCA9IGMubmV4dF9kdXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHRfZHVwLCAoJ2R1cDEnLCAncXVpY2snKSkKKworICAgICAgICByZWMgPSBjLnNldCgnZHVwMScpCisgICAgICAgIHdoaWxlIHJlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgcmVjCisgICAgICAgICAgICByZWMgPSBjLm5leHRfZHVwKCkKKworICAgICAgICBjLnNldCgnZHVwMScpCisgICAgICAgIHJlYyA9IGMubmV4dF9ub2R1cCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVjWzBdLCAnZHVwMScpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCByZWMKKworICAgICAgICBjLmNsb3NlKCkKKworCisKK2NsYXNzIEJUcmVlRFVQVGVzdENhc2UoQmFzaWNEVVBUZXN0Q2FzZSk6CisgICAgZGJ0eXBlID0gZGIuREJfQlRSRUUKKworY2xhc3MgSGFzaERVUFRlc3RDYXNlKEJhc2ljRFVQVGVzdENhc2UpOgorICAgIGRidHlwZSA9IGRiLkRCX0hBU0gKKworY2xhc3MgQlRyZWVEVVBXaXRoVGhyZWFkVGVzdENhc2UoQmFzaWNEVVBUZXN0Q2FzZSk6CisgICAgZGJ0eXBlID0gZGIuREJfQlRSRUUKKyAgICBkYm9wZW5mbGFncyA9IGRiLkRCX1RIUkVBRAorCitjbGFzcyBIYXNoRFVQV2l0aFRocmVhZFRlc3RDYXNlKEJhc2ljRFVQVGVzdENhc2UpOgorICAgIGRidHlwZSA9IGRiLkRCX0hBU0gKKyAgICBkYm9wZW5mbGFncyA9IGRiLkRCX1RIUkVBRAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIEJhc2ljTXVsdGlEQlRlc3RDYXNlKEJhc2ljVGVzdENhc2UpOgorICAgIGRibmFtZSA9ICdmaXJzdCcKKworICAgIGRlZiBvdGhlclR5cGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGJ0eXBlID09IGRiLkRCX0JUUkVFOgorICAgICAgICAgICAgcmV0dXJuIGRiLkRCX0hBU0gKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBkYi5EQl9CVFJFRQorCisgICAgZGVmIHRlc3QxMV9NdWx0aURCKHNlbGYpOgorICAgICAgICBkMSA9IHNlbGYuZAorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MTFfTXVsdGlEQi4uLiIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgICAgIGQyID0gZGIuREIoc2VsZi5lbnYpCisgICAgICAgIGQyLm9wZW4oc2VsZi5maWxlbmFtZSwgInNlY29uZCIsIHNlbGYuZGJ0eXBlLAorICAgICAgICAgICAgICAgIHNlbGYuZGJvcGVuZmxhZ3N8ZGIuREJfQ1JFQVRFKQorICAgICAgICBkMyA9IGRiLkRCKHNlbGYuZW52KQorICAgICAgICBkMy5vcGVuKHNlbGYuZmlsZW5hbWUsICJ0aGlyZCIsIHNlbGYub3RoZXJUeXBlKCksCisgICAgICAgICAgICAgICAgc2VsZi5kYm9wZW5mbGFnc3xkYi5EQl9DUkVBVEUpCisKKyAgICAgICAgZm9yIHggaW4gIlRoZSBxdWljayBicm93biBmb3gganVtcGVkIG92ZXIgdGhlIGxhenkgZG9nIi5zcGxpdCgpOgorICAgICAgICAgICAgZDIucHV0KHgsIHNlbGYubWFrZURhdGEoeCkpCisKKyAgICAgICAgZm9yIHggaW4gc3RyaW5nLmxldHRlcnM6CisgICAgICAgICAgICBkMy5wdXQoeCwgeCo3MCkKKworICAgICAgICBkMS5zeW5jKCkKKyAgICAgICAgZDIuc3luYygpCisgICAgICAgIGQzLnN5bmMoKQorICAgICAgICBkMS5jbG9zZSgpCisgICAgICAgIGQyLmNsb3NlKCkKKyAgICAgICAgZDMuY2xvc2UoKQorCisgICAgICAgIHNlbGYuZCA9IGQxID0gZDIgPSBkMyA9IE5vbmUKKworICAgICAgICBzZWxmLmQgPSBkMSA9IGRiLkRCKHNlbGYuZW52KQorICAgICAgICBkMS5vcGVuKHNlbGYuZmlsZW5hbWUsIHNlbGYuZGJuYW1lLCBmbGFncyA9IHNlbGYuZGJvcGVuZmxhZ3MpCisgICAgICAgIGQyID0gZGIuREIoc2VsZi5lbnYpCisgICAgICAgIGQyLm9wZW4oc2VsZi5maWxlbmFtZSwgInNlY29uZCIsICBmbGFncyA9IHNlbGYuZGJvcGVuZmxhZ3MpCisgICAgICAgIGQzID0gZGIuREIoc2VsZi5lbnYpCisgICAgICAgIGQzLm9wZW4oc2VsZi5maWxlbmFtZSwgInRoaXJkIiwgZmxhZ3MgPSBzZWxmLmRib3BlbmZsYWdzKQorCisgICAgICAgIGMxID0gZDEuY3Vyc29yKCkKKyAgICAgICAgYzIgPSBkMi5jdXJzb3IoKQorICAgICAgICBjMyA9IGQzLmN1cnNvcigpCisKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIHJlYyA9IGMxLmZpcnN0KCkKKyAgICAgICAgd2hpbGUgcmVjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY291bnQgPSBjb3VudCArIDEKKyAgICAgICAgICAgIGlmIHZlcmJvc2UgYW5kIChjb3VudCAlIDUwKSA9PSAwOgorICAgICAgICAgICAgICAgIHByaW50IHJlYworICAgICAgICAgICAgcmVjID0gYzEubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnQsIHNlbGYuX251bUtleXMpCisKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIHJlYyA9IGMyLmZpcnN0KCkKKyAgICAgICAgd2hpbGUgcmVjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY291bnQgPSBjb3VudCArIDEKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgcmVjCisgICAgICAgICAgICByZWMgPSBjMi5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgOSkKKworICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgcmVjID0gYzMuZmlyc3QoKQorICAgICAgICB3aGlsZSByZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCByZWMKKyAgICAgICAgICAgIHJlYyA9IGMzLm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCBsZW4oc3RyaW5nLmxldHRlcnMpKQorCisKKyAgICAgICAgYzEuY2xvc2UoKQorICAgICAgICBjMi5jbG9zZSgpCisgICAgICAgIGMzLmNsb3NlKCkKKworICAgICAgICBkMi5jbG9zZSgpCisgICAgICAgIGQzLmNsb3NlKCkKKworCisKKyMgU3RyYW5nZSB0aGluZ3MgaGFwcGVuIGlmIHlvdSB0cnkgdG8gdXNlIE11bHRpcGxlIERCcyBwZXIgZmlsZSB3aXRob3V0IGEKKyMgREJFbnYgd2l0aCBNUE9PTCBhbmQgTE9DS2luZy4uLgorCitjbGFzcyBCVHJlZU11bHRpREJUZXN0Q2FzZShCYXNpY011bHRpREJUZXN0Q2FzZSk6CisgICAgZGJ0eXBlID0gZGIuREJfQlRSRUUKKyAgICBkYm9wZW5mbGFncyA9IGRiLkRCX1RIUkVBRAorICAgIHVzZUVudiA9IDEKKyAgICBlbnZmbGFncyA9IGRiLkRCX1RIUkVBRCB8IGRiLkRCX0lOSVRfTVBPT0wgfCBkYi5EQl9JTklUX0xPQ0sKKworY2xhc3MgSGFzaE11bHRpREJUZXN0Q2FzZShCYXNpY011bHRpREJUZXN0Q2FzZSk6CisgICAgZGJ0eXBlID0gZGIuREJfSEFTSAorICAgIGRib3BlbmZsYWdzID0gZGIuREJfVEhSRUFECisgICAgdXNlRW52ID0gMQorICAgIGVudmZsYWdzID0gZGIuREJfVEhSRUFEIHwgZGIuREJfSU5JVF9NUE9PTCB8IGRiLkRCX0lOSVRfTE9DSworCisKK2NsYXNzIFByaXZhdGVPYmplY3QodW5pdHRlc3QuVGVzdENhc2UpIDoKKyAgICBkZWYgdGVhckRvd24oc2VsZikgOgorICAgICAgICBkZWwgc2VsZi5vYmoKKworICAgIGRlZiB0ZXN0MDFfRGVmYXVsdElzTm9uZShzZWxmKSA6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vYmouZ2V0X3ByaXZhdGUoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0MDJfYXNzaWdubWVudChzZWxmKSA6CisgICAgICAgIGEgPSAiZXhhbXBsZSBvZiBwcml2YXRlIG9iamVjdCIKKyAgICAgICAgc2VsZi5vYmouc2V0X3ByaXZhdGUoYSkKKyAgICAgICAgYiA9IHNlbGYub2JqLmdldF9wcml2YXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaXMgYikgICMgT2JqZWN0IGlkZW50aXR5CisKKyAgICBkZWYgdGVzdDAzX2xlYWtfYXNzaWdubWVudChzZWxmKSA6CisgICAgICAgIGEgPSAiZXhhbXBsZSBvZiBwcml2YXRlIG9iamVjdCIKKyAgICAgICAgcmVmY291bnQgPSBzeXMuZ2V0cmVmY291bnQoYSkKKyAgICAgICAgc2VsZi5vYmouc2V0X3ByaXZhdGUoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWZjb3VudCsxLCBzeXMuZ2V0cmVmY291bnQoYSkpCisgICAgICAgIHNlbGYub2JqLnNldF9wcml2YXRlKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVmY291bnQsIHN5cy5nZXRyZWZjb3VudChhKSkKKworICAgIGRlZiB0ZXN0MDRfbGVha19HQyhzZWxmKSA6CisgICAgICAgIGEgPSAiZXhhbXBsZSBvZiBwcml2YXRlIG9iamVjdCIKKyAgICAgICAgcmVmY291bnQgPSBzeXMuZ2V0cmVmY291bnQoYSkKKyAgICAgICAgc2VsZi5vYmouc2V0X3ByaXZhdGUoYSkKKyAgICAgICAgc2VsZi5vYmogPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVmY291bnQsIHN5cy5nZXRyZWZjb3VudChhKSkKKworY2xhc3MgREJFbnZQcml2YXRlT2JqZWN0KFByaXZhdGVPYmplY3QpIDoKKyAgICBkZWYgc2V0VXAoc2VsZikgOgorICAgICAgICBzZWxmLm9iaiA9IGRiLkRCRW52KCkKKworY2xhc3MgREJQcml2YXRlT2JqZWN0KFByaXZhdGVPYmplY3QpIDoKKyAgICBkZWYgc2V0VXAoc2VsZikgOgorICAgICAgICBzZWxmLm9iaiA9IGRiLkRCKCkKKworY2xhc3MgQ3Jhc2hBbmRCdXJuKHVuaXR0ZXN0LlRlc3RDYXNlKSA6CisgICAgI2RlZiB0ZXN0MDFfT3BlbkNyYXNoKHNlbGYpIDoKKyAgICAjICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzMzA3CisgICAgIyAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwgZGIuREIsIE5vbmUsIDY1NTM1KQorCisgICAgaWYgZGIudmVyc2lvbigpIDwgKDQsIDgpIDoKKyAgICAgICAgZGVmIHRlc3QwMl9EQkVudl9kZWFsbG9jKHNlbGYpOgorICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMzg4NQorICAgICAgICAgICAgaW1wb3J0IGdjCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwgZGIuREJFbnYsIH5kYi5EQl9SUENDTElFTlQpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShWZXJzaW9uVGVzdENhc2UpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEJhc2ljQlRyZWVUZXN0Q2FzZSkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoQmFzaWNIYXNoVGVzdENhc2UpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEJhc2ljQlRyZWVXaXRoVGhyZWFkRmxhZ1Rlc3RDYXNlKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShCYXNpY0hhc2hXaXRoVGhyZWFkRmxhZ1Rlc3RDYXNlKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShCYXNpY0JUcmVlV2l0aEVudlRlc3RDYXNlKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShCYXNpY0hhc2hXaXRoRW52VGVzdENhc2UpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEJUcmVlVHJhbnNhY3Rpb25UZXN0Q2FzZSkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoSGFzaFRyYW5zYWN0aW9uVGVzdENhc2UpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEJUcmVlUmVjbm9UZXN0Q2FzZSkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoQlRyZWVSZWNub1dpdGhUaHJlYWRGbGFnVGVzdENhc2UpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEJUcmVlRFVQVGVzdENhc2UpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEhhc2hEVVBUZXN0Q2FzZSkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoQlRyZWVEVVBXaXRoVGhyZWFkVGVzdENhc2UpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEhhc2hEVVBXaXRoVGhyZWFkVGVzdENhc2UpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEJUcmVlTXVsdGlEQlRlc3RDYXNlKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShIYXNoTXVsdGlEQlRlc3RDYXNlKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShEQkVudlByaXZhdGVPYmplY3QpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCUHJpdmF0ZU9iamVjdCkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoQ3Jhc2hBbmRCdXJuKSkKKworICAgIHJldHVybiBzdWl0ZQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0ndGVzdF9zdWl0ZScpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9jb21wYXJlLnB5IGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfY29tcGFyZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjNiNDYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfY29tcGFyZS5weQpAQCAtMCwwICsxLDQ0NyBAQAorIiIiCitUZXN0Q2FzZXMgZm9yIHB5dGhvbiBEQiBkdXBsaWNhdGUgYW5kIEJ0cmVlIGtleSBjb21wYXJpc29uIGZ1bmN0aW9uLgorIiIiCisKK2ltcG9ydCBzeXMsIG9zLCByZQoraW1wb3J0IHRlc3RfYWxsCitmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdF9hbGwgaW1wb3J0IGRiLCBkYnNoZWx2ZSwgdGVzdF9zdXBwb3J0LCBcCisgICAgICAgIGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCwgZ2V0X25ld19kYXRhYmFzZV9wYXRoCisKKworIyBOZWVkZWQgZm9yIHB5dGhvbiAzLiAiY21wIiB2YW5pc2hlZCBpbiAzLjAuMQorZGVmIGNtcChhLCBiKSA6CisgICAgaWYgYT09YiA6IHJldHVybiAwCisgICAgaWYgYTxiIDogcmV0dXJuIC0xCisgICAgcmV0dXJuIDEKKworbGV4aWNhbF9jbXAgPSBjbXAKKworZGVmIGxvd2VyY2FzZV9jbXAobGVmdCwgcmlnaHQpIDoKKyAgICByZXR1cm4gY21wKGxlZnQubG93ZXIoKSwgcmlnaHQubG93ZXIoKSkKKworZGVmIG1ha2VfcmV2ZXJzZV9jb21wYXJhdG9yKGNtcCkgOgorICAgIGRlZiByZXZlcnNlKGxlZnQsIHJpZ2h0LCBkZWxlZ2F0ZT1jbXApIDoKKyAgICAgICAgcmV0dXJuIC0gZGVsZWdhdGUobGVmdCwgcmlnaHQpCisgICAgcmV0dXJuIHJldmVyc2UKKworX2V4cGVjdGVkX2xleGljYWxfdGVzdF9kYXRhID0gWycnLCAnQ0NDUCcsICdhJywgJ2FhYScsICdiJywgJ2MnLCAnY2NjY2UnLCAnY2NjY2YnXQorX2V4cGVjdGVkX2xvd2VyY2FzZV90ZXN0X2RhdGEgPSBbJycsICdhJywgJ2FhYScsICdiJywgJ2MnLCAnQ0MnLCAnY2NjY2UnLCAnY2NjY2YnLCAnQ0NDUCddCisKK2NsYXNzIENvbXBhcmF0b3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSkgOgorICAgIGRlZiBjb21wYXJhdG9yX3Rlc3RfaGVscGVyKHNlbGYsIGNvbXBhcmF0b3IsIGV4cGVjdGVkX2RhdGEpIDoKKyAgICAgICAgZGF0YSA9IGV4cGVjdGVkX2RhdGFbOl0KKworICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgZGF0YS5zb3J0KGNtcD1jb21wYXJhdG9yKQorICAgICAgICBlbHNlIDogICMgSW5zZXJ0aW9uIFNvcnQuIFBsZWFzZSwgaW1wcm92ZQorICAgICAgICAgICAgZGF0YTIgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gZGF0YSA6CisgICAgICAgICAgICAgICAgZm9yIGosIGsgaW4gZW51bWVyYXRlKGRhdGEyKSA6CisgICAgICAgICAgICAgICAgICAgIHIgPSBjb21wYXJhdG9yKGssIGkpCisgICAgICAgICAgICAgICAgICAgIGlmIHIgPT0gMSA6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhMi5pbnNlcnQoaiwgaSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgICAgIGRhdGEyLmFwcGVuZChpKQorICAgICAgICAgICAgZGF0YSA9IGRhdGEyCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBleHBlY3RlZF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wYXJhdG9yIGAlcycgaXMgbm90IHJpZ2h0OiAlcyB2cy4gJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgJSAoY29tcGFyYXRvciwgZXhwZWN0ZWRfZGF0YSwgZGF0YSkpCisgICAgZGVmIHRlc3RfbGV4aWNhbF9jb21wYXJhdG9yKHNlbGYpIDoKKyAgICAgICAgc2VsZi5jb21wYXJhdG9yX3Rlc3RfaGVscGVyKGxleGljYWxfY21wLCBfZXhwZWN0ZWRfbGV4aWNhbF90ZXN0X2RhdGEpCisgICAgZGVmIHRlc3RfcmV2ZXJzZV9sZXhpY2FsX2NvbXBhcmF0b3Ioc2VsZikgOgorICAgICAgICByZXYgPSBfZXhwZWN0ZWRfbGV4aWNhbF90ZXN0X2RhdGFbOl0KKyAgICAgICAgcmV2LnJldmVyc2UoKQorICAgICAgICBzZWxmLmNvbXBhcmF0b3JfdGVzdF9oZWxwZXIobWFrZV9yZXZlcnNlX2NvbXBhcmF0b3IobGV4aWNhbF9jbXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldikKKyAgICBkZWYgdGVzdF9sb3dlcmNhc2VfY29tcGFyYXRvcihzZWxmKSA6CisgICAgICAgIHNlbGYuY29tcGFyYXRvcl90ZXN0X2hlbHBlcihsb3dlcmNhc2VfY21wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9leHBlY3RlZF9sb3dlcmNhc2VfdGVzdF9kYXRhKQorCitjbGFzcyBBYnN0cmFjdEJ0cmVlS2V5Q29tcGFyZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKSA6CisgICAgZW52ID0gTm9uZQorICAgIGRiID0gTm9uZQorCisgICAgaWYgKHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNykpIG9yICgoc3lzLnZlcnNpb25faW5mbyA+PSAoMywwKSkgYW5kCisgICAgICAgICAgICAoc3lzLnZlcnNpb25faW5mbyA8ICgzLCAyKSkpIDoKKyAgICAgICAgZGVmIGFzc2VydExlc3Moc2VsZiwgYSwgYiwgbXNnPU5vbmUpIDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmFzc2VydFRydWUoYTxiLCBtc2c9bXNnKQorCisgICAgZGVmIHNldFVwKHNlbGYpIDoKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IHNlbGYuX19jbGFzc19fLl9fbmFtZV9fICsgJy5kYicKKyAgICAgICAgc2VsZi5ob21lRGlyID0gZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoKCkKKyAgICAgICAgZW52ID0gZGIuREJFbnYoKQorICAgICAgICBlbnYub3BlbihzZWxmLmhvbWVEaXIsCisgICAgICAgICAgICAgICAgICBkYi5EQl9DUkVBVEUgfCBkYi5EQl9JTklUX01QT09MCisgICAgICAgICAgICAgICAgICB8IGRiLkRCX0lOSVRfTE9DSyB8IGRiLkRCX1RIUkVBRCkKKyAgICAgICAgc2VsZi5lbnYgPSBlbnYKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKSA6CisgICAgICAgIHNlbGYuY2xvc2VEQigpCisgICAgICAgIGlmIHNlbGYuZW52IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5lbnYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5lbnYgPSBOb25lCisgICAgICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUoc2VsZi5ob21lRGlyKQorCisgICAgZGVmIGFkZERhdGFUb0RCKHNlbGYsIGRhdGEpIDoKKyAgICAgICAgaSA9IDAKKyAgICAgICAgZm9yIGl0ZW0gaW4gZGF0YToKKyAgICAgICAgICAgIHNlbGYuZGIucHV0KGl0ZW0sIHN0cihpKSkKKyAgICAgICAgICAgIGkgPSBpICsgMQorCisgICAgZGVmIGNyZWF0ZURCKHNlbGYsIGtleV9jb21wYXJhdG9yKSA6CisgICAgICAgIHNlbGYuZGIgPSBkYi5EQihzZWxmLmVudikKKyAgICAgICAgc2VsZi5zZXR1cERCKGtleV9jb21wYXJhdG9yKQorICAgICAgICBzZWxmLmRiLm9wZW4oc2VsZi5maWxlbmFtZSwgInRlc3QiLCBkYi5EQl9CVFJFRSwgZGIuREJfQ1JFQVRFKQorCisgICAgZGVmIHNldHVwREIoc2VsZiwga2V5X2NvbXBhcmF0b3IpIDoKKyAgICAgICAgc2VsZi5kYi5zZXRfYnRfY29tcGFyZShrZXlfY29tcGFyYXRvcikKKworICAgIGRlZiBjbG9zZURCKHNlbGYpIDoKKyAgICAgICAgaWYgc2VsZi5kYiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZGIuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5kYiA9IE5vbmUKKworICAgIGRlZiBzdGFydFRlc3Qoc2VsZikgOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZmluaXNoVGVzdChzZWxmLCBleHBlY3RlZCA9IE5vbmUpIDoKKyAgICAgICAgaWYgZXhwZWN0ZWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3Jlc3VsdHMoZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuY2xvc2VEQigpCisKKyAgICBkZWYgY2hlY2tfcmVzdWx0cyhzZWxmLCBleHBlY3RlZCkgOgorICAgICAgICBjdXJzID0gc2VsZi5kYi5jdXJzb3IoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbmRleCA9IDAKKyAgICAgICAgICAgIHJlYyA9IGN1cnMuZmlyc3QoKQorICAgICAgICAgICAgd2hpbGUgcmVjOgorICAgICAgICAgICAgICAgIGtleSwgaWdub3JlID0gcmVjCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGluZGV4LCBsZW4oZXhwZWN0ZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIG1hbnkgdmFsdWVzIHJldHVybmVkIGZyb20gY3Vyc29yIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkW2luZGV4XSwga2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHZhbHVlIGAlcycgYXQgJWQgYnV0IGdvdCBgJXMnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZXhwZWN0ZWRbaW5kZXhdLCBpbmRleCwga2V5KSkKKyAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4ICsgMQorICAgICAgICAgICAgICAgIHJlYyA9IGN1cnMubmV4dCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGV4LCBsZW4oZXhwZWN0ZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBjdXJzb3IiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY3Vycy5jbG9zZSgpCisKK2NsYXNzIEJ0cmVlS2V5Q29tcGFyZVRlc3RDYXNlKEFic3RyYWN0QnRyZWVLZXlDb21wYXJlVGVzdENhc2UpIDoKKyAgICBkZWYgcnVuQ29tcGFyZVRlc3Qoc2VsZiwgY29tcGFyYXRvciwgZGF0YSkgOgorICAgICAgICBzZWxmLnN0YXJ0VGVzdCgpCisgICAgICAgIHNlbGYuY3JlYXRlREIoY29tcGFyYXRvcikKKyAgICAgICAgc2VsZi5hZGREYXRhVG9EQihkYXRhKQorICAgICAgICBzZWxmLmZpbmlzaFRlc3QoZGF0YSkKKworICAgIGRlZiB0ZXN0X2xleGljYWxfb3JkZXJpbmcoc2VsZikgOgorICAgICAgICBzZWxmLnJ1bkNvbXBhcmVUZXN0KGxleGljYWxfY21wLCBfZXhwZWN0ZWRfbGV4aWNhbF90ZXN0X2RhdGEpCisKKyAgICBkZWYgdGVzdF9yZXZlcnNlX2xleGljYWxfb3JkZXJpbmcoc2VsZikgOgorICAgICAgICBleHBlY3RlZF9yZXZfZGF0YSA9IF9leHBlY3RlZF9sZXhpY2FsX3Rlc3RfZGF0YVs6XQorICAgICAgICBleHBlY3RlZF9yZXZfZGF0YS5yZXZlcnNlKCkKKyAgICAgICAgc2VsZi5ydW5Db21wYXJlVGVzdChtYWtlX3JldmVyc2VfY29tcGFyYXRvcihsZXhpY2FsX2NtcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3Jldl9kYXRhKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV9mdW5jdGlvbl91c2VsZXNzKHNlbGYpIDoKKyAgICAgICAgc2VsZi5zdGFydFRlc3QoKQorICAgICAgICBkZWYgc29jaWFsaXN0X2NvbXBhcmF0b3IobCwgcikgOgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgc2VsZi5jcmVhdGVEQihzb2NpYWxpc3RfY29tcGFyYXRvcikKKyAgICAgICAgc2VsZi5hZGREYXRhVG9EQihbJ2InLCAnYScsICdkJ10pCisgICAgICAgICMgYWxsIHRoaW5ncyBiZWluZyBlcXVhbCB0aGUgZmlyc3Qga2V5IHdpbGwgYmUgdGhlIG9ubHkga2V5CisgICAgICAgICMgaW4gdGhlIGRhdGFiYXNlLi4uICAod2l0aCB0aGUgbGFzdCBrZXkncyB2YWx1ZSBmd2l3KQorICAgICAgICBzZWxmLmZpbmlzaFRlc3QoWydiJ10pCisKKworY2xhc3MgQnRyZWVFeGNlcHRpb25zVGVzdENhc2UoQWJzdHJhY3RCdHJlZUtleUNvbXBhcmVUZXN0Q2FzZSkgOgorICAgIGRlZiB0ZXN0X3JhaXNlc19ub25fY2FsbGFibGUoc2VsZikgOgorICAgICAgICBzZWxmLnN0YXJ0VGVzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5jcmVhdGVEQiwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5jcmVhdGVEQiwgTm9uZSkKKyAgICAgICAgc2VsZi5maW5pc2hUZXN0KCkKKworICAgIGRlZiB0ZXN0X3NldF9idF9jb21wYXJlX3dpdGhfZnVuY3Rpb24oc2VsZikgOgorICAgICAgICBzZWxmLnN0YXJ0VGVzdCgpCisgICAgICAgIHNlbGYuY3JlYXRlREIobGV4aWNhbF9jbXApCisgICAgICAgIHNlbGYuZmluaXNoVGVzdCgpCisKKyAgICBkZWYgY2hlY2tfcmVzdWx0cyhzZWxmLCByZXN1bHRzKSA6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfZnVuY3Rpb25faW5jb3JyZWN0KHNlbGYpIDoKKyAgICAgICAgc2VsZi5zdGFydFRlc3QoKQorICAgICAgICBkZWYgYmFkX2NvbXBhcmF0b3IobCwgcikgOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCBzZXRfYnRfY29tcGFyZSBjaGVja3MgdGhhdCBjb21wYXJhdG9yKCcnLCAnJykgPT0gMAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuY3JlYXRlREIsIGJhZF9jb21wYXJhdG9yKQorICAgICAgICBzZWxmLmZpbmlzaFRlc3QoKQorCisgICAgZGVmIHZlcmlmeVN0ZGVycihzZWxmLCBtZXRob2QsIHN1Y2Nlc3NSZSkgOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbCBtZXRob2QoKSB3aGlsZSBjYXB0dXJpbmcgc3lzLnN0ZGVyciBvdXRwdXQgaW50ZXJuYWxseSBhbmQKKyAgICAgICAgY2FsbCBzZWxmLmZhaWwoKSBpZiBzdWNjZXNzUmUuc2VhcmNoKCkgZG9lcyBub3QgbWF0Y2ggdGhlIHN0ZGVycgorICAgICAgICBvdXRwdXQuICBUaGlzIGlzIHVzZWQgdG8gdGVzdCBmb3IgdW5jYXRjaGFibGUgZXhjZXB0aW9ucy4KKyAgICAgICAgIiIiCisgICAgICAgIHN0ZEVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgc3lzLnN0ZGVyciA9IFN0cmluZ0lPKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWV0aG9kKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRlbXAgPSBzeXMuc3RkZXJyCisgICAgICAgICAgICBzeXMuc3RkZXJyID0gc3RkRXJyCisgICAgICAgICAgICBlcnJvck91dCA9IHRlbXAuZ2V0dmFsdWUoKQorICAgICAgICAgICAgaWYgbm90IHN1Y2Nlc3NSZS5zZWFyY2goZXJyb3JPdXQpIDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInVuZXhwZWN0ZWQgc3RkZXJyIG91dHB1dDpcbiIrZXJyb3JPdXQpCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMCkgOiAgIyBYWFg6IEhvdyB0byBkbyB0aGlzIGluIFB5M2sgPz8/CisgICAgICAgICAgICBzeXMuZXhjX3RyYWNlYmFjayA9IHN5cy5sYXN0X3RyYWNlYmFjayA9IE5vbmUKKworICAgIGRlZiBfdGVzdF9jb21wYXJlX2Z1bmN0aW9uX2V4Y2VwdGlvbihzZWxmKSA6CisgICAgICAgIHNlbGYuc3RhcnRUZXN0KCkKKyAgICAgICAgZGVmIGJhZF9jb21wYXJhdG9yKGwsIHIpIDoKKyAgICAgICAgICAgIGlmIGwgPT0gcjoKKyAgICAgICAgICAgICAgICAjIHBhc3MgdGhlIHNldF9idF9jb21wYXJlIHRlc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiaSdtIGEgbmF1Z2h0eSBjb21wYXJpc29uIGZ1bmN0aW9uIgorICAgICAgICBzZWxmLmNyZWF0ZURCKGJhZF9jb21wYXJhdG9yKQorICAgICAgICAjcHJpbnQgIlxuKioqIHRlc3Qgc2hvdWxkIHByaW50IDIgdW5jYXRjaGFibGUgdHJhY2ViYWNrcyAqKioiCisgICAgICAgIHNlbGYuYWRkRGF0YVRvREIoWydhJywgJ2InLCAnYyddKSAgIyB0aGlzIHNob3VsZCByYWlzZSwgYnV0Li4uCisgICAgICAgIHNlbGYuZmluaXNoVGVzdCgpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlX2Z1bmN0aW9uX2V4Y2VwdGlvbihzZWxmKSA6CisgICAgICAgIHNlbGYudmVyaWZ5U3RkZXJyKAorICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfY29tcGFyZV9mdW5jdGlvbl9leGNlcHRpb24sCisgICAgICAgICAgICAgICAgcmUuY29tcGlsZSgnKF5SdW50aW1lRXJyb3I6LiogbmF1Z2h0eS4qKXsyfScsIHJlLk18cmUuUykKKyAgICAgICAgKQorCisgICAgZGVmIF90ZXN0X2NvbXBhcmVfZnVuY3Rpb25fYmFkX3JldHVybihzZWxmKSA6CisgICAgICAgIHNlbGYuc3RhcnRUZXN0KCkKKyAgICAgICAgZGVmIGJhZF9jb21wYXJhdG9yKGwsIHIpIDoKKyAgICAgICAgICAgIGlmIGwgPT0gcjoKKyAgICAgICAgICAgICAgICAjIHBhc3MgdGhlIHNldF9idF9jb21wYXJlIHRlc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgcmV0dXJuIGwKKyAgICAgICAgc2VsZi5jcmVhdGVEQihiYWRfY29tcGFyYXRvcikKKyAgICAgICAgI3ByaW50ICJcbioqKiB0ZXN0IHNob3VsZCBwcmludCAyIGVycm9ycyBhYm91dCByZXR1cm5pbmcgYW4gaW50ICoqKiIKKyAgICAgICAgc2VsZi5hZGREYXRhVG9EQihbJ2EnLCAnYicsICdjJ10pICAjIHRoaXMgc2hvdWxkIHJhaXNlLCBidXQuLi4KKyAgICAgICAgc2VsZi5maW5pc2hUZXN0KCkKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfZnVuY3Rpb25fYmFkX3JldHVybihzZWxmKSA6CisgICAgICAgIHNlbGYudmVyaWZ5U3RkZXJyKAorICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RfY29tcGFyZV9mdW5jdGlvbl9iYWRfcmV0dXJuLAorICAgICAgICAgICAgICAgIHJlLmNvbXBpbGUoJyheVHlwZUVycm9yOi4qIHJldHVybiBhbiBpbnQuKil7Mn0nLCByZS5NfHJlLlMpCisgICAgICAgICkKKworCisgICAgZGVmIHRlc3RfY2Fubm90X2Fzc2lnbl90d2ljZShzZWxmKSA6CisKKyAgICAgICAgZGVmIG15X2NvbXBhcmUoYSwgYikgOgorICAgICAgICAgICAgcmV0dXJuIDAKKworICAgICAgICBzZWxmLnN0YXJ0VGVzdCgpCisgICAgICAgIHNlbGYuY3JlYXRlREIobXlfY29tcGFyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLmRiLnNldF9idF9jb21wYXJlLCBteV9jb21wYXJlKQorCitjbGFzcyBBYnN0cmFjdER1cGxpY2F0ZUNvbXBhcmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSkgOgorICAgIGVudiA9IE5vbmUKKyAgICBkYiA9IE5vbmUKKworICAgIGlmIChzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDcpKSBvciAoKHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsMCkpIGFuZAorICAgICAgICAgICAgKHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMikpKSA6CisgICAgICAgIGRlZiBhc3NlcnRMZXNzKHNlbGYsIGEsIGIsIG1zZz1Ob25lKSA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5hc3NlcnRUcnVlKGE8YiwgbXNnPW1zZykKKworICAgIGRlZiBzZXRVcChzZWxmKSA6CisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyArICcuZGInCisgICAgICAgIHNlbGYuaG9tZURpciA9IGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCgpCisgICAgICAgIGVudiA9IGRiLkRCRW52KCkKKyAgICAgICAgZW52Lm9wZW4oc2VsZi5ob21lRGlyLAorICAgICAgICAgICAgICAgICAgZGIuREJfQ1JFQVRFIHwgZGIuREJfSU5JVF9NUE9PTAorICAgICAgICAgICAgICAgICAgfCBkYi5EQl9JTklUX0xPQ0sgfCBkYi5EQl9USFJFQUQpCisgICAgICAgIHNlbGYuZW52ID0gZW52CisKKyAgICBkZWYgdGVhckRvd24oc2VsZikgOgorICAgICAgICBzZWxmLmNsb3NlREIoKQorICAgICAgICBpZiBzZWxmLmVudiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZW52LmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuZW52ID0gTm9uZQorICAgICAgICB0ZXN0X3N1cHBvcnQucm10cmVlKHNlbGYuaG9tZURpcikKKworICAgIGRlZiBhZGREYXRhVG9EQihzZWxmLCBkYXRhKSA6CisgICAgICAgIGZvciBpdGVtIGluIGRhdGE6CisgICAgICAgICAgICBzZWxmLmRiLnB1dCgia2V5IiwgaXRlbSkKKworICAgIGRlZiBjcmVhdGVEQihzZWxmLCBkdXBfY29tcGFyYXRvcikgOgorICAgICAgICBzZWxmLmRiID0gZGIuREIoc2VsZi5lbnYpCisgICAgICAgIHNlbGYuc2V0dXBEQihkdXBfY29tcGFyYXRvcikKKyAgICAgICAgc2VsZi5kYi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ0ZXN0IiwgZGIuREJfQlRSRUUsIGRiLkRCX0NSRUFURSkKKworICAgIGRlZiBzZXR1cERCKHNlbGYsIGR1cF9jb21wYXJhdG9yKSA6CisgICAgICAgIHNlbGYuZGIuc2V0X2ZsYWdzKGRiLkRCX0RVUFNPUlQpCisgICAgICAgIHNlbGYuZGIuc2V0X2R1cF9jb21wYXJlKGR1cF9jb21wYXJhdG9yKQorCisgICAgZGVmIGNsb3NlREIoc2VsZikgOgorICAgICAgICBpZiBzZWxmLmRiIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5kYi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmRiID0gTm9uZQorCisgICAgZGVmIHN0YXJ0VGVzdChzZWxmKSA6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBmaW5pc2hUZXN0KHNlbGYsIGV4cGVjdGVkID0gTm9uZSkgOgorICAgICAgICBpZiBleHBlY3RlZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcmVzdWx0cyhleHBlY3RlZCkKKyAgICAgICAgc2VsZi5jbG9zZURCKCkKKworICAgIGRlZiBjaGVja19yZXN1bHRzKHNlbGYsIGV4cGVjdGVkKSA6CisgICAgICAgIGN1cnMgPSBzZWxmLmRiLmN1cnNvcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGluZGV4ID0gMAorICAgICAgICAgICAgcmVjID0gY3Vycy5maXJzdCgpCisgICAgICAgICAgICB3aGlsZSByZWM6CisgICAgICAgICAgICAgICAgaWdub3JlLCBkYXRhID0gcmVjCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGluZGV4LCBsZW4oZXhwZWN0ZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvIG1hbnkgdmFsdWVzIHJldHVybmVkIGZyb20gY3Vyc29yIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkW2luZGV4XSwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCB2YWx1ZSBgJXMnIGF0ICVkIGJ1dCBnb3QgYCVzJyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGV4cGVjdGVkW2luZGV4XSwgaW5kZXgsIGRhdGEpKQorICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxCisgICAgICAgICAgICAgICAgcmVjID0gY3Vycy5uZXh0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5kZXgsIGxlbihleHBlY3RlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIHZhbHVlcyByZXR1cm5lZCBmcm9tIGN1cnNvciIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBjdXJzLmNsb3NlKCkKKworY2xhc3MgRHVwbGljYXRlQ29tcGFyZVRlc3RDYXNlKEFic3RyYWN0RHVwbGljYXRlQ29tcGFyZVRlc3RDYXNlKSA6CisgICAgZGVmIHJ1bkNvbXBhcmVUZXN0KHNlbGYsIGNvbXBhcmF0b3IsIGRhdGEpIDoKKyAgICAgICAgc2VsZi5zdGFydFRlc3QoKQorICAgICAgICBzZWxmLmNyZWF0ZURCKGNvbXBhcmF0b3IpCisgICAgICAgIHNlbGYuYWRkRGF0YVRvREIoZGF0YSkKKyAgICAgICAgc2VsZi5maW5pc2hUZXN0KGRhdGEpCisKKyAgICBkZWYgdGVzdF9sZXhpY2FsX29yZGVyaW5nKHNlbGYpIDoKKyAgICAgICAgc2VsZi5ydW5Db21wYXJlVGVzdChsZXhpY2FsX2NtcCwgX2V4cGVjdGVkX2xleGljYWxfdGVzdF9kYXRhKQorCisgICAgZGVmIHRlc3RfcmV2ZXJzZV9sZXhpY2FsX29yZGVyaW5nKHNlbGYpIDoKKyAgICAgICAgZXhwZWN0ZWRfcmV2X2RhdGEgPSBfZXhwZWN0ZWRfbGV4aWNhbF90ZXN0X2RhdGFbOl0KKyAgICAgICAgZXhwZWN0ZWRfcmV2X2RhdGEucmV2ZXJzZSgpCisgICAgICAgIHNlbGYucnVuQ29tcGFyZVRlc3QobWFrZV9yZXZlcnNlX2NvbXBhcmF0b3IobGV4aWNhbF9jbXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9yZXZfZGF0YSkKKworY2xhc3MgRHVwbGljYXRlRXhjZXB0aW9uc1Rlc3RDYXNlKEFic3RyYWN0RHVwbGljYXRlQ29tcGFyZVRlc3RDYXNlKSA6CisgICAgZGVmIHRlc3RfcmFpc2VzX25vbl9jYWxsYWJsZShzZWxmKSA6CisgICAgICAgIHNlbGYuc3RhcnRUZXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmNyZWF0ZURCLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmNyZWF0ZURCLCBOb25lKQorICAgICAgICBzZWxmLmZpbmlzaFRlc3QoKQorCisgICAgZGVmIHRlc3Rfc2V0X2R1cF9jb21wYXJlX3dpdGhfZnVuY3Rpb24oc2VsZikgOgorICAgICAgICBzZWxmLnN0YXJ0VGVzdCgpCisgICAgICAgIHNlbGYuY3JlYXRlREIobGV4aWNhbF9jbXApCisgICAgICAgIHNlbGYuZmluaXNoVGVzdCgpCisKKyAgICBkZWYgY2hlY2tfcmVzdWx0cyhzZWxmLCByZXN1bHRzKSA6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfZnVuY3Rpb25faW5jb3JyZWN0KHNlbGYpIDoKKyAgICAgICAgc2VsZi5zdGFydFRlc3QoKQorICAgICAgICBkZWYgYmFkX2NvbXBhcmF0b3IobCwgcikgOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCBzZXRfZHVwX2NvbXBhcmUgY2hlY2tzIHRoYXQgY29tcGFyYXRvcignJywgJycpID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmNyZWF0ZURCLCBiYWRfY29tcGFyYXRvcikKKyAgICAgICAgc2VsZi5maW5pc2hUZXN0KCkKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfZnVuY3Rpb25fdXNlbGVzcyhzZWxmKSA6CisgICAgICAgIHNlbGYuc3RhcnRUZXN0KCkKKyAgICAgICAgZGVmIHNvY2lhbGlzdF9jb21wYXJhdG9yKGwsIHIpIDoKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHNlbGYuY3JlYXRlREIoc29jaWFsaXN0X2NvbXBhcmF0b3IpCisgICAgICAgICMgRFVQU09SVCBkb2VzIG5vdCBhbGxvdyAiZHVwbGljYXRlIGR1cGxpY2F0ZXMiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCS2V5RXhpc3RFcnJvciwgc2VsZi5hZGREYXRhVG9EQiwgWydiJywgJ2EnLCAnZCddKQorICAgICAgICBzZWxmLmZpbmlzaFRlc3QoKQorCisgICAgZGVmIHZlcmlmeVN0ZGVycihzZWxmLCBtZXRob2QsIHN1Y2Nlc3NSZSkgOgorICAgICAgICAiIiIKKyAgICAgICAgQ2FsbCBtZXRob2QoKSB3aGlsZSBjYXB0dXJpbmcgc3lzLnN0ZGVyciBvdXRwdXQgaW50ZXJuYWxseSBhbmQKKyAgICAgICAgY2FsbCBzZWxmLmZhaWwoKSBpZiBzdWNjZXNzUmUuc2VhcmNoKCkgZG9lcyBub3QgbWF0Y2ggdGhlIHN0ZGVycgorICAgICAgICBvdXRwdXQuICBUaGlzIGlzIHVzZWQgdG8gdGVzdCBmb3IgdW5jYXRjaGFibGUgZXhjZXB0aW9ucy4KKyAgICAgICAgIiIiCisgICAgICAgIHN0ZEVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgc3lzLnN0ZGVyciA9IFN0cmluZ0lPKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWV0aG9kKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRlbXAgPSBzeXMuc3RkZXJyCisgICAgICAgICAgICBzeXMuc3RkZXJyID0gc3RkRXJyCisgICAgICAgICAgICBlcnJvck91dCA9IHRlbXAuZ2V0dmFsdWUoKQorICAgICAgICAgICAgaWYgbm90IHN1Y2Nlc3NSZS5zZWFyY2goZXJyb3JPdXQpIDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInVuZXhwZWN0ZWQgc3RkZXJyIG91dHB1dDpcbiIrZXJyb3JPdXQpCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMCkgOiAgIyBYWFg6IEhvdyB0byBkbyB0aGlzIGluIFB5M2sgPz8/CisgICAgICAgICAgICBzeXMuZXhjX3RyYWNlYmFjayA9IHN5cy5sYXN0X3RyYWNlYmFjayA9IE5vbmUKKworICAgIGRlZiBfdGVzdF9jb21wYXJlX2Z1bmN0aW9uX2V4Y2VwdGlvbihzZWxmKSA6CisgICAgICAgIHNlbGYuc3RhcnRUZXN0KCkKKyAgICAgICAgZGVmIGJhZF9jb21wYXJhdG9yKGwsIHIpIDoKKyAgICAgICAgICAgIGlmIGwgPT0gcjoKKyAgICAgICAgICAgICAgICAjIHBhc3MgdGhlIHNldF9kdXBfY29tcGFyZSB0ZXN0CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgImknbSBhIG5hdWdodHkgY29tcGFyaXNvbiBmdW5jdGlvbiIKKyAgICAgICAgc2VsZi5jcmVhdGVEQihiYWRfY29tcGFyYXRvcikKKyAgICAgICAgI3ByaW50ICJcbioqKiB0ZXN0IHNob3VsZCBwcmludCAyIHVuY2F0Y2hhYmxlIHRyYWNlYmFja3MgKioqIgorICAgICAgICBzZWxmLmFkZERhdGFUb0RCKFsnYScsICdiJywgJ2MnXSkgICMgdGhpcyBzaG91bGQgcmFpc2UsIGJ1dC4uLgorICAgICAgICBzZWxmLmZpbmlzaFRlc3QoKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV9mdW5jdGlvbl9leGNlcHRpb24oc2VsZikgOgorICAgICAgICBzZWxmLnZlcmlmeVN0ZGVycigKKyAgICAgICAgICAgICAgICBzZWxmLl90ZXN0X2NvbXBhcmVfZnVuY3Rpb25fZXhjZXB0aW9uLAorICAgICAgICAgICAgICAgIHJlLmNvbXBpbGUoJyheUnVudGltZUVycm9yOi4qIG5hdWdodHkuKil7Mn0nLCByZS5NfHJlLlMpCisgICAgICAgICkKKworICAgIGRlZiBfdGVzdF9jb21wYXJlX2Z1bmN0aW9uX2JhZF9yZXR1cm4oc2VsZikgOgorICAgICAgICBzZWxmLnN0YXJ0VGVzdCgpCisgICAgICAgIGRlZiBiYWRfY29tcGFyYXRvcihsLCByKSA6CisgICAgICAgICAgICBpZiBsID09IHI6CisgICAgICAgICAgICAgICAgIyBwYXNzIHRoZSBzZXRfZHVwX2NvbXBhcmUgdGVzdAorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICByZXR1cm4gbAorICAgICAgICBzZWxmLmNyZWF0ZURCKGJhZF9jb21wYXJhdG9yKQorICAgICAgICAjcHJpbnQgIlxuKioqIHRlc3Qgc2hvdWxkIHByaW50IDIgZXJyb3JzIGFib3V0IHJldHVybmluZyBhbiBpbnQgKioqIgorICAgICAgICBzZWxmLmFkZERhdGFUb0RCKFsnYScsICdiJywgJ2MnXSkgICMgdGhpcyBzaG91bGQgcmFpc2UsIGJ1dC4uLgorICAgICAgICBzZWxmLmZpbmlzaFRlc3QoKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV9mdW5jdGlvbl9iYWRfcmV0dXJuKHNlbGYpIDoKKyAgICAgICAgc2VsZi52ZXJpZnlTdGRlcnIoCisgICAgICAgICAgICAgICAgc2VsZi5fdGVzdF9jb21wYXJlX2Z1bmN0aW9uX2JhZF9yZXR1cm4sCisgICAgICAgICAgICAgICAgcmUuY29tcGlsZSgnKF5UeXBlRXJyb3I6LiogcmV0dXJuIGFuIGludC4qKXsyfScsIHJlLk18cmUuUykKKyAgICAgICAgKQorCisKKyAgICBkZWYgdGVzdF9jYW5ub3RfYXNzaWduX3R3aWNlKHNlbGYpIDoKKworICAgICAgICBkZWYgbXlfY29tcGFyZShhLCBiKSA6CisgICAgICAgICAgICByZXR1cm4gMAorCisgICAgICAgIHNlbGYuc3RhcnRUZXN0KCkKKyAgICAgICAgc2VsZi5jcmVhdGVEQihteV9jb21wYXJlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYuZGIuc2V0X2R1cF9jb21wYXJlLCBteV9jb21wYXJlKQorCitkZWYgdGVzdF9zdWl0ZSgpIDoKKyAgICByZXMgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorCisgICAgcmVzLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKENvbXBhcmF0b3JUZXN0cykpCisgICAgcmVzLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEJ0cmVlRXhjZXB0aW9uc1Rlc3RDYXNlKSkKKyAgICByZXMuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoQnRyZWVLZXlDb21wYXJlVGVzdENhc2UpKQorICAgIHJlcy5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShEdXBsaWNhdGVFeGNlcHRpb25zVGVzdENhc2UpKQorICAgIHJlcy5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShEdXBsaWNhdGVDb21wYXJlVGVzdENhc2UpKQorICAgIHJldHVybiByZXMKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0ID0gJ3N1aXRlJykKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2NvbXBhdC5weSBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2NvbXBhdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njc5ZjE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfY29tcGF0LnB5CkBAIC0wLDAgKzEsMTg0IEBACisiIiIKK1Rlc3QgY2FzZXMgYWRhcHRlZCBmcm9tIHRoZSB0ZXN0X2JzZGRiLnB5IG1vZHVsZSBpbiBQeXRob24ncworcmVncmVzc2lvbiB0ZXN0IHN1aXRlLgorIiIiCisKK2ltcG9ydCBvcywgc3RyaW5nCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIGhhc2hvcGVuLCBidG9wZW4sIHJub3BlbiwgdmVyYm9zZSwgXAorICAgICAgICBnZXRfbmV3X2RhdGFiYXNlX3BhdGgKKworCitjbGFzcyBDb21wYXRpYmlsaXR5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGdldF9uZXdfZGF0YWJhc2VfcGF0aCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLmZpbGVuYW1lKQorICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKworICAgIGRlZiB0ZXN0MDFfYnRvcGVuKHNlbGYpOgorICAgICAgICBzZWxmLmRvX2J0aGFzaF90ZXN0KGJ0b3BlbiwgJ2J0b3BlbicpCisKKyAgICBkZWYgdGVzdDAyX2hhc2hvcGVuKHNlbGYpOgorICAgICAgICBzZWxmLmRvX2J0aGFzaF90ZXN0KGhhc2hvcGVuLCAnaGFzaG9wZW4nKQorCisgICAgZGVmIHRlc3QwM19ybm9wZW4oc2VsZik6CisgICAgICAgIGRhdGEgPSAiVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cuIi5zcGxpdCgpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiXG5UZXN0aW5nOiBybm9wZW4iCisKKyAgICAgICAgZiA9IHJub3BlbihzZWxmLmZpbGVuYW1lLCAnYycpCisgICAgICAgIGZvciB4IGluIHJhbmdlKGxlbihkYXRhKSk6CisgICAgICAgICAgICBmW3grMV0gPSBkYXRhW3hdCisKKyAgICAgICAgZ2V0VGVzdCA9IChmWzFdLCBmWzJdLCBmWzNdKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJyVzICVzICVzJyAlIGdldFRlc3QKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldFRlc3RbMV0sICdxdWljaycsICdkYXRhIG1pc21hdGNoIScpCisKKyAgICAgICAgcnYgPSBmLnNldF9sb2NhdGlvbigzKQorICAgICAgICBpZiBydiAhPSAoMywgJ2Jyb3duJyk6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ3JlY25vIGRhdGFiYXNlIHNldF9sb2NhdGlvbiBmYWlsZWQ6ICcrcmVwcihydikpCisKKyAgICAgICAgZlsyNV0gPSAndHdlbnR5LWZpdmUnCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBkZWwgZgorCisgICAgICAgIGYgPSBybm9wZW4oc2VsZi5maWxlbmFtZSwgJ3cnKQorICAgICAgICBmWzIwXSA9ICd0d2VudHknCisKKyAgICAgICAgZGVmIG5vUmVjKGYpOgorICAgICAgICAgICAgcmVjID0gZlsxNV0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIG5vUmVjLCBmKQorCisgICAgICAgIGRlZiBiYWRLZXkoZik6CisgICAgICAgICAgICByZWMgPSBmWydhIHN0cmluZyddCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFkS2V5LCBmKQorCisgICAgICAgIGRlbCBmWzNdCisKKyAgICAgICAgcmVjID0gZi5maXJzdCgpCisgICAgICAgIHdoaWxlIHJlYzoKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgcmVjCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVjID0gZi5uZXh0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGYuY2xvc2UoKQorCisKKyAgICBkZWYgdGVzdDA0X25fZmxhZyhzZWxmKToKKyAgICAgICAgZiA9IGhhc2hvcGVuKHNlbGYuZmlsZW5hbWUsICduJykKKyAgICAgICAgZi5jbG9zZSgpCisKKworICAgIGRlZiBkb19idGhhc2hfdGVzdChzZWxmLCBmYWN0b3J5LCB3aGF0KToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdcblRlc3Rpbmc6ICcsIHdoYXQKKworICAgICAgICBmID0gZmFjdG9yeShzZWxmLmZpbGVuYW1lLCAnYycpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnY3JlYXRpb24uLi4nCisKKyAgICAgICAgIyB0cnV0aCB0ZXN0CisgICAgICAgIGlmIGY6CisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAidHJ1dGggdGVzdDogdHJ1ZSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJ0cnV0aCB0ZXN0OiBmYWxzZSIKKworICAgICAgICBmWycwJ10gPSAnJworICAgICAgICBmWydhJ10gPSAnR3VpZG8nCisgICAgICAgIGZbJ2InXSA9ICd2YW4nCisgICAgICAgIGZbJ2MnXSA9ICdSb3NzdW0nCisgICAgICAgIGZbJ2QnXSA9ICdpbnZlbnRlZCcKKyAgICAgICAgIyAnZScgaW50ZW50aW9uYWxseSBsZWZ0IG91dAorICAgICAgICBmWydmJ10gPSAnUHl0aG9uJworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJyVzICVzICVzJyAlIChmWydhJ10sIGZbJ2InXSwgZlsnYyddKQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAna2V5IG9yZGVyaW5nLi4uJworICAgICAgICBzdGFydCA9IGYuc2V0X2xvY2F0aW9uKGYuZmlyc3QoKVswXSkKKyAgICAgICAgaWYgc3RhcnQgIT0gKCcwJywgJycpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJpbmNvcnJlY3QgZmlyc3QoKSByZXN1bHQ6ICIrcmVwcihzdGFydCkpCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVjID0gZi5uZXh0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYywgZi5sYXN0KCksICdFcnJvciwgbGFzdCA8PiBsYXN0IScpCisgICAgICAgICAgICAgICAgZi5wcmV2aW91cygpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgcmVjCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuaGFzX2tleSgnZicpLCAnRXJyb3IsIG1pc3Npbmcga2V5IScpCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgc2V0X2xvY2F0aW9uKCkgcmV0dXJucyB0aGUgbmV4dCBuZWFyZXN0IGtleSwgdmFsdWUKKyAgICAgICAgIyBvbiBidHJlZSBkYXRhYmFzZXMgYW5kIHJhaXNlcyBLZXlFcnJvciBvbiBvdGhlcnMuCisgICAgICAgIGlmIGZhY3RvcnkgPT0gYnRvcGVuOgorICAgICAgICAgICAgZSA9IGYuc2V0X2xvY2F0aW9uKCdlJykKKyAgICAgICAgICAgIGlmIGUgIT0gKCdmJywgJ1B5dGhvbicpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnd3Jvbmcga2V5LHZhbHVlIHJldHVybmVkOiAnK3JlcHIoZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZSA9IGYuc2V0X2xvY2F0aW9uKCdlJykKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2V0X2xvY2F0aW9uIG9uIG5vbi1leGlzdGVudCBrZXkgZGlkIG5vdCByYWlzZSBLZXlFcnJvciIpCisKKyAgICAgICAgZi5zeW5jKCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICMgdHJ1dGggdGVzdAorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBmOgorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJ0cnV0aCB0ZXN0OiB0cnVlIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAidHJ1dGggdGVzdDogZmFsc2UiCisgICAgICAgIGV4Y2VwdCBkYi5EQkVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeGNlcHRpb24gZXhwZWN0ZWQiKQorCisgICAgICAgIGRlbCBmCisKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdtb2RpZmljYXRpb24uLi4nCisgICAgICAgIGYgPSBmYWN0b3J5KHNlbGYuZmlsZW5hbWUsICd3JykKKyAgICAgICAgZlsnZCddID0gJ2Rpc2NvdmVyZWQnCisKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdhY2Nlc3MuLi4nCisgICAgICAgIGZvciBrZXkgaW4gZi5rZXlzKCk6CisgICAgICAgICAgICB3b3JkID0gZltrZXldCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50IHdvcmQKKworICAgICAgICBkZWYgbm9SZWMoZik6CisgICAgICAgICAgICByZWMgPSBmWydubyBzdWNoIGtleSddCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBub1JlYywgZikKKworICAgICAgICBkZWYgYmFkS2V5KGYpOgorICAgICAgICAgICAgcmVjID0gZlsxNV0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYWRLZXksIGYpCisKKyAgICAgICAgZi5jbG9zZSgpCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQ29tcGF0aWJpbGl0eVRlc3RDYXNlKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0ndGVzdF9zdWl0ZScpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9jdXJzb3JfcGdldF9idWcucHkgYi9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9jdXJzb3JfcGdldF9idWcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJkM2RjMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2N1cnNvcl9wZ2V0X2J1Zy5weQpAQCAtMCwwICsxLDU0IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcywgZ2xvYgorCitmcm9tIHRlc3RfYWxsIGltcG9ydCBkYiwgdGVzdF9zdXBwb3J0LCBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgsIFwKKyAgICAgICAgZ2V0X25ld19kYXRhYmFzZV9wYXRoCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIHBnZXRfYnVnVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlZlcmlmeSB0aGF0IGN1cnNvci5wZ2V0IHdvcmtzIHByb3Blcmx5IiIiCisgICAgZGJfbmFtZSA9ICd0ZXN0LWN1cnNvcl9wZ2V0LmRiJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmhvbWVEaXIgPSBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgoKQorICAgICAgICBzZWxmLmVudiA9IGRiLkRCRW52KCkKKyAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSB8IGRiLkRCX0lOSVRfTVBPT0wpCisgICAgICAgIHNlbGYucHJpbWFyeV9kYiA9IGRiLkRCKHNlbGYuZW52KQorICAgICAgICBzZWxmLnByaW1hcnlfZGIub3BlbihzZWxmLmRiX25hbWUsICdwcmltYXJ5JywgZGIuREJfQlRSRUUsIGRiLkRCX0NSRUFURSkKKyAgICAgICAgc2VsZi5zZWNvbmRhcnlfZGIgPSBkYi5EQihzZWxmLmVudikKKyAgICAgICAgc2VsZi5zZWNvbmRhcnlfZGIuc2V0X2ZsYWdzKGRiLkRCX0RVUCkKKyAgICAgICAgc2VsZi5zZWNvbmRhcnlfZGIub3BlbihzZWxmLmRiX25hbWUsICdzZWNvbmRhcnknLCBkYi5EQl9CVFJFRSwgZGIuREJfQ1JFQVRFKQorICAgICAgICBzZWxmLnByaW1hcnlfZGIuYXNzb2NpYXRlKHNlbGYuc2Vjb25kYXJ5X2RiLCBsYW1iZGEga2V5LCBkYXRhOiBkYXRhKQorICAgICAgICBzZWxmLnByaW1hcnlfZGIucHV0KCdzYWxhZCcsICdlZ2dzJykKKyAgICAgICAgc2VsZi5wcmltYXJ5X2RiLnB1dCgnc3BhbScsICdoYW0nKQorICAgICAgICBzZWxmLnByaW1hcnlfZGIucHV0KCdvbWVsZXQnLCAnZWdncycpCisKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zZWNvbmRhcnlfZGIuY2xvc2UoKQorICAgICAgICBzZWxmLnByaW1hcnlfZGIuY2xvc2UoKQorICAgICAgICBzZWxmLmVudi5jbG9zZSgpCisgICAgICAgIGRlbCBzZWxmLnNlY29uZGFyeV9kYgorICAgICAgICBkZWwgc2VsZi5wcmltYXJ5X2RiCisgICAgICAgIGRlbCBzZWxmLmVudgorICAgICAgICB0ZXN0X3N1cHBvcnQucm10cmVlKHNlbGYuaG9tZURpcikKKworICAgIGRlZiB0ZXN0X3BnZXQoc2VsZik6CisgICAgICAgIGN1cnNvciA9IHNlbGYuc2Vjb25kYXJ5X2RiLmN1cnNvcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ2VnZ3MnLCAnc2FsYWQnLCAnZWdncycpLCBjdXJzb3IucGdldChrZXk9J2VnZ3MnLCBmbGFncz1kYi5EQl9TRVQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnZWdncycsICdvbWVsZXQnLCAnZWdncycpLCBjdXJzb3IucGdldChkYi5EQl9ORVhUX0RVUCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgY3Vyc29yLnBnZXQoZGIuREJfTkVYVF9EVVApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCdoYW0nLCAnc3BhbScsICdoYW0nKSwgY3Vyc29yLnBnZXQoJ2hhbScsICdzcGFtJywgZmxhZ3M9ZGIuREJfU0VUKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBjdXJzb3IucGdldChkYi5EQl9ORVhUX0RVUCkpCisKKyAgICAgICAgY3Vyc29yLmNsb3NlKCkKKworCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUocGdldF9idWdUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSd0ZXN0X3N1aXRlJykKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2RiLnB5IGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfZGIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJjMTA5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2RiLnB5CkBAIC0wLDAgKzEsMTYzIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcywgZ2xvYgorCitmcm9tIHRlc3RfYWxsIGltcG9ydCBkYiwgdGVzdF9zdXBwb3J0LCBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgsIFwKKyAgICAgICAgZ2V0X25ld19kYXRhYmFzZV9wYXRoCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIERCKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucGF0aCA9IGdldF9uZXdfZGF0YWJhc2VfcGF0aCgpCisgICAgICAgIHNlbGYuZGIgPSBkYi5EQigpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZGIuY2xvc2UoKQorICAgICAgICBkZWwgc2VsZi5kYgorICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHNlbGYucGF0aCkKKworY2xhc3MgREJfZ2VuZXJhbChEQikgOgorICAgIGRlZiB0ZXN0X2dldF9vcGVuX2ZsYWdzKHNlbGYpIDoKKyAgICAgICAgc2VsZi5kYi5vcGVuKHNlbGYucGF0aCwgZGJ0eXBlPWRiLkRCX0hBU0gsIGZsYWdzID0gZGIuREJfQ1JFQVRFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRiLkRCX0NSRUFURSwgc2VsZi5kYi5nZXRfb3Blbl9mbGFncygpKQorCisgICAgZGVmIHRlc3RfZ2V0X29wZW5fZmxhZ3MyKHNlbGYpIDoKKyAgICAgICAgc2VsZi5kYi5vcGVuKHNlbGYucGF0aCwgZGJ0eXBlPWRiLkRCX0hBU0gsIGZsYWdzID0gZGIuREJfQ1JFQVRFIHwKKyAgICAgICAgICAgICAgICBkYi5EQl9USFJFQUQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFELCBzZWxmLmRiLmdldF9vcGVuX2ZsYWdzKCkpCisKKyAgICBkZWYgdGVzdF9nZXRfZGJuYW1lX2ZpbGVuYW1lKHNlbGYpIDoKKyAgICAgICAgc2VsZi5kYi5vcGVuKHNlbGYucGF0aCwgZGJ0eXBlPWRiLkRCX0hBU0gsIGZsYWdzID0gZGIuREJfQ1JFQVRFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzZWxmLnBhdGgsIE5vbmUpLCBzZWxmLmRiLmdldF9kYm5hbWUoKSkKKworICAgIGRlZiB0ZXN0X2dldF9kYm5hbWVfZmlsZW5hbWVfZGF0YWJhc2Uoc2VsZikgOgorICAgICAgICBuYW1lID0gImpjZWEtcmFuZG9tLW5hbWUiCisgICAgICAgIHNlbGYuZGIub3BlbihzZWxmLnBhdGgsIGRibmFtZT1uYW1lLCBkYnR5cGU9ZGIuREJfSEFTSCwKKyAgICAgICAgICAgICAgICBmbGFncyA9IGRiLkRCX0NSRUFURSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoc2VsZi5wYXRoLCBuYW1lKSwgc2VsZi5kYi5nZXRfZGJuYW1lKCkpCisKKyAgICAgICAgZGVmIHRlc3RfYnRfbWlua2V5KHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFsxNywgMTA4LCAxMDMwXSA6CisgICAgICAgICAgICAgICAgc2VsZi5kYi5zZXRfYnRfbWlua2V5KGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmRiLmdldF9idF9taW5rZXkoKSkKKworICAgICAgICBkZWYgdGVzdF9sb3JkZXIoc2VsZikgOgorICAgICAgICAgICAgc2VsZi5kYi5zZXRfbG9yZGVyKDEyMzQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEyMzQsIHNlbGYuZGIuZ2V0X2xvcmRlcigpKQorICAgICAgICAgICAgc2VsZi5kYi5zZXRfbG9yZGVyKDQzMjEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQzMjEsIHNlbGYuZGIuZ2V0X2xvcmRlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsIHNlbGYuZGIuc2V0X2xvcmRlciwgOTE4MikKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNikgOgorICAgICAgICBkZWYgdGVzdF9wcmlvcml0eShzZWxmKSA6CisgICAgICAgICAgICBmbGFncyA9IFtkYi5EQl9QUklPUklUWV9WRVJZX0xPVywgZGIuREJfUFJJT1JJVFlfTE9XLAorICAgICAgICAgICAgICAgICAgICBkYi5EQl9QUklPUklUWV9ERUZBVUxULCBkYi5EQl9QUklPUklUWV9ISUdILAorICAgICAgICAgICAgICAgICAgICBkYi5EQl9QUklPUklUWV9WRVJZX0hJR0hdCisgICAgICAgICAgICBmb3IgZmxhZyBpbiBmbGFncyA6CisgICAgICAgICAgICAgICAgc2VsZi5kYi5zZXRfcHJpb3JpdHkoZmxhZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsYWcsIHNlbGYuZGIuZ2V0X3ByaW9yaXR5KCkpCisKKyAgICBkZWYgdGVzdF9nZXRfdHJhbnNhY3Rpb25hbChzZWxmKSA6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5kYi5nZXRfdHJhbnNhY3Rpb25hbCgpKQorICAgICAgICBzZWxmLmRiLm9wZW4oc2VsZi5wYXRoLCBkYnR5cGU9ZGIuREJfSEFTSCwgZmxhZ3MgPSBkYi5EQl9DUkVBVEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5kYi5nZXRfdHJhbnNhY3Rpb25hbCgpKQorCitjbGFzcyBEQl9oYXNoKERCKSA6CisgICAgZGVmIHRlc3RfaF9mZmFjdG9yKHNlbGYpIDoKKyAgICAgICAgZm9yIGZmYWN0b3IgaW4gWzQsIDE2LCAyNTZdIDoKKyAgICAgICAgICAgIHNlbGYuZGIuc2V0X2hfZmZhY3RvcihmZmFjdG9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZmFjdG9yLCBzZWxmLmRiLmdldF9oX2ZmYWN0b3IoKSkKKworICAgIGRlZiB0ZXN0X2hfbmVsZW0oc2VsZikgOgorICAgICAgICBmb3IgbmVsZW0gaW4gWzEsIDIsIDRdIDoKKyAgICAgICAgICAgIG5lbGVtID0gbmVsZW0qMTAyNCoxMDI0ICAjIE1pbGxpb25zCisgICAgICAgICAgICBzZWxmLmRiLnNldF9oX25lbGVtKG5lbGVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZWxlbSwgc2VsZi5kYi5nZXRfaF9uZWxlbSgpKQorCisgICAgZGVmIHRlc3RfcGFnZXNpemUoc2VsZikgOgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoOSwgMTcpIDogICMgRnJvbSA1MTIgdG8gNjU1MzYKKyAgICAgICAgICAgIGkgPSAxPDxpCisgICAgICAgICAgICBzZWxmLmRiLnNldF9wYWdlc2l6ZShpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmRiLmdldF9wYWdlc2l6ZSgpKQorCisgICAgICAgICMgVGhlIHZhbGlkIHZhbHVlcyBnb2VzIGZyb20gNTEyIHRvIDY1NTM2CisgICAgICAgICMgVGVzdCAxMzEwNzIgYnl0ZXMuLi4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsIHNlbGYuZGIuc2V0X3BhZ2VzaXplLCAxPDwxNykKKyAgICAgICAgIyBUZXN0IDI1NiBieXRlcy4uLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwgc2VsZi5kYi5zZXRfcGFnZXNpemUsIDE8PDgpCisKK2NsYXNzIERCX3R4bihEQikgOgorICAgIGRlZiBzZXRVcChzZWxmKSA6CisgICAgICAgIHNlbGYuaG9tZURpciA9IGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCgpCisgICAgICAgIHNlbGYuZW52ID0gZGIuREJFbnYoKQorICAgICAgICBzZWxmLmVudi5vcGVuKHNlbGYuaG9tZURpciwgZGIuREJfQ1JFQVRFIHwgZGIuREJfSU5JVF9NUE9PTCB8CisgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9MT0cgfCBkYi5EQl9JTklUX1RYTikKKyAgICAgICAgc2VsZi5kYiA9IGRiLkRCKHNlbGYuZW52KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpIDoKKyAgICAgICAgc2VsZi5kYi5jbG9zZSgpCisgICAgICAgIGRlbCBzZWxmLmRiCisgICAgICAgIHNlbGYuZW52LmNsb3NlKCkKKyAgICAgICAgZGVsIHNlbGYuZW52CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUoc2VsZi5ob21lRGlyKQorCisgICAgICAgIGRlZiB0ZXN0X2ZsYWdzKHNlbGYpIDoKKyAgICAgICAgICAgIHNlbGYuZGIuc2V0X2ZsYWdzKGRiLkRCX0NIS1NVTSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGIuREJfQ0hLU1VNLCBzZWxmLmRiLmdldF9mbGFncygpKQorICAgICAgICAgICAgc2VsZi5kYi5zZXRfZmxhZ3MoZGIuREJfVFhOX05PVF9EVVJBQkxFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYi5EQl9UWE5fTk9UX0RVUkFCTEUgfCBkYi5EQl9DSEtTVU0sCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGIuZ2V0X2ZsYWdzKCkpCisKKyAgICBkZWYgdGVzdF9nZXRfdHJhbnNhY3Rpb25hbChzZWxmKSA6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5kYi5nZXRfdHJhbnNhY3Rpb25hbCgpKQorICAgICAgICAjIERCX0FVVE9fQ09NTUlUID0gSW1wbGljaXQgdHJhbnNhY3Rpb24KKyAgICAgICAgc2VsZi5kYi5vcGVuKCJYWFgiLCBkYnR5cGU9ZGIuREJfSEFTSCwKKyAgICAgICAgICAgICAgICBmbGFncyA9IGRiLkRCX0NSRUFURSB8IGRiLkRCX0FVVE9fQ09NTUlUKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kYi5nZXRfdHJhbnNhY3Rpb25hbCgpKQorCitjbGFzcyBEQl9yZWNubyhEQikgOgorICAgIGRlZiB0ZXN0X3JlX3BhZChzZWxmKSA6CisgICAgICAgIGZvciBpIGluIFsnICcsICcqJ10gOiAgIyBDaGVjayBjaGFycworICAgICAgICAgICAgc2VsZi5kYi5zZXRfcmVfcGFkKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZChpKSwgc2VsZi5kYi5nZXRfcmVfcGFkKCkpCisgICAgICAgIGZvciBpIGluIFs5NywgNjVdIDogICMgQ2hlY2sgaW50ZWdlcnMKKyAgICAgICAgICAgIHNlbGYuZGIuc2V0X3JlX3BhZChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmRiLmdldF9yZV9wYWQoKSkKKworICAgIGRlZiB0ZXN0X3JlX2RlbGltKHNlbGYpIDoKKyAgICAgICAgZm9yIGkgaW4gWycgJywgJyonXSA6ICAjIENoZWNrIGNoYXJzCisgICAgICAgICAgICBzZWxmLmRiLnNldF9yZV9kZWxpbShpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmQoaSksIHNlbGYuZGIuZ2V0X3JlX2RlbGltKCkpCisgICAgICAgIGZvciBpIGluIFs5NywgNjVdIDogICMgQ2hlY2sgaW50ZWdlcnMKKyAgICAgICAgICAgIHNlbGYuZGIuc2V0X3JlX2RlbGltKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIHNlbGYuZGIuZ2V0X3JlX2RlbGltKCkpCisKKyAgICBkZWYgdGVzdF9yZV9zb3VyY2Uoc2VsZikgOgorICAgICAgICBmb3IgaSBpbiBbInRlc3QiLCAidGVzdDIiLCAidGVzdDMiXSA6CisgICAgICAgICAgICBzZWxmLmRiLnNldF9yZV9zb3VyY2UoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5kYi5nZXRfcmVfc291cmNlKCkpCisKK2NsYXNzIERCX3F1ZXVlKERCKSA6CisgICAgZGVmIHRlc3RfcmVfbGVuKHNlbGYpIDoKKyAgICAgICAgZm9yIGkgaW4gWzMzLCA2NSwgMzAwLCAyMDAwXSA6CisgICAgICAgICAgICBzZWxmLmRiLnNldF9yZV9sZW4oaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5kYi5nZXRfcmVfbGVuKCkpCisKKyAgICBkZWYgdGVzdF9xX2V4dGVudHNpemUoc2VsZikgOgorICAgICAgICBmb3IgaSBpbiBbMSwgNjAsIDEwMF0gOgorICAgICAgICAgICAgc2VsZi5kYi5zZXRfcV9leHRlbnRzaXplKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIHNlbGYuZGIuZ2V0X3FfZXh0ZW50c2l6ZSgpKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCX2dlbmVyYWwpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCX3R4bikpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoREJfaGFzaCkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoREJfcmVjbm8pKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCX3F1ZXVlKSkKKworICAgIHJldHVybiBzdWl0ZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3Rlc3Rfc3VpdGUnKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfZGJlbnYucHkgYi9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9kYmVudi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmVmN2RiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfZGJlbnYucHkKQEAgLTAsMCArMSw1MjUgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zLCBnbG9iCisKK2Zyb20gdGVzdF9hbGwgaW1wb3J0IGRiLCB0ZXN0X3N1cHBvcnQsIGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCwgXAorICAgICAgICBnZXRfbmV3X2RhdGFiYXNlX3BhdGgKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgREJFbnYodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ob21lRGlyID0gZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoKCkKKyAgICAgICAgc2VsZi5lbnYgPSBkYi5EQkVudigpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZW52LmNsb3NlKCkKKyAgICAgICAgZGVsIHNlbGYuZW52CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUoc2VsZi5ob21lRGlyKQorCitjbGFzcyBEQkVudl9nZW5lcmFsKERCRW52KSA6CisgICAgZGVmIHRlc3RfZ2V0X29wZW5fZmxhZ3Moc2VsZikgOgorICAgICAgICBmbGFncyA9IGRiLkRCX0NSRUFURSB8IGRiLkRCX0lOSVRfTVBPT0wKKyAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGZsYWdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsYWdzLCBzZWxmLmVudi5nZXRfb3Blbl9mbGFncygpKQorCisgICAgZGVmIHRlc3RfZ2V0X29wZW5fZmxhZ3MyKHNlbGYpIDoKKyAgICAgICAgZmxhZ3MgPSBkYi5EQl9DUkVBVEUgfCBkYi5EQl9JTklUX01QT09MIHwgXAorICAgICAgICAgICAgICAgIGRiLkRCX0lOSVRfTE9DSyB8IGRiLkRCX1RIUkVBRAorICAgICAgICBzZWxmLmVudi5vcGVuKHNlbGYuaG9tZURpciwgZmxhZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxhZ3MsIHNlbGYuZW52LmdldF9vcGVuX2ZsYWdzKCkpCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDcpIDoKKyAgICAgICAgZGVmIHRlc3RfbGtfcGFydGl0aW9ucyhzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbMTAsIDIwLCA0MF0gOgorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9sa19wYXJ0aXRpb25zKGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmVudi5nZXRfbGtfcGFydGl0aW9ucygpKQorCisgICAgICAgIGRlZiB0ZXN0X2dldHNldF9pbnRlcm1lZGlhdGVfZGlyX21vZGUoc2VsZikgOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLmVudi5nZXRfaW50ZXJtZWRpYXRlX2Rpcl9tb2RlKCkpCisgICAgICAgICAgICBmb3IgbW9kZSBpbiBbInJ3eC0tLS0tLSIsICJydy1ydy1ydy0iLCAicnctci0tci0tIl0gOgorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9pbnRlcm1lZGlhdGVfZGlyX21vZGUobW9kZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGUsIHNlbGYuZW52LmdldF9pbnRlcm1lZGlhdGVfZGlyX21vZGUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfaW50ZXJtZWRpYXRlX2Rpcl9tb2RlLCAiYWJjZGUiKQorCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCA2KSA6CisgICAgICAgIGRlZiB0ZXN0X3RocmVhZChzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbMTYsIDEwMCwgMTAwMF0gOgorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF90aHJlYWRfY291bnQoaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIHNlbGYuZW52LmdldF90aHJlYWRfY291bnQoKSkKKworICAgICAgICBkZWYgdGVzdF9jYWNoZV9tYXgoc2VsZikgOgorICAgICAgICAgICAgZm9yIHNpemUgaW4gWzY0LCAxMjhdIDoKKyAgICAgICAgICAgICAgICBzaXplID0gc2l6ZSoxMDI0KjEwMjQgICMgTWVnYWJ5dGVzCisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2NhY2hlX21heCgwLCBzaXplKQorICAgICAgICAgICAgICAgIHNpemUyID0gc2VsZi5lbnYuZ2V0X2NhY2hlX21heCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzaXplMlswXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2l6ZSA8PSBzaXplMlsxXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMipzaXplID4gc2l6ZTJbMV0pCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDQpIDoKKyAgICAgICAgZGVmIHRlc3RfbXV0ZXhfc3RhdChzZWxmKSA6CisgICAgICAgICAgICBzZWxmLmVudi5vcGVuKHNlbGYuaG9tZURpciwgZGIuREJfQ1JFQVRFIHwgZGIuREJfSU5JVF9NUE9PTCB8CisgICAgICAgICAgICAgICAgICAgIGRiLkRCX0lOSVRfTE9DSykKKyAgICAgICAgICAgIHN0YXQgPSBzZWxmLmVudi5tdXRleF9zdGF0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgibXV0ZXhfaW51c2VfbWF4IiBpbiBzdGF0KQorCisgICAgICAgIGRlZiB0ZXN0X2xnX2ZpbGVtb2RlKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFswNjAwLCAwNjYwLCAwNjY2XSA6CisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2xnX2ZpbGVtb2RlKGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmVudi5nZXRfbGdfZmlsZW1vZGUoKSkKKworICAgIGRlZiB0ZXN0X21wX21heF9vcGVuZmQoc2VsZikgOgorICAgICAgICBmb3IgaSBpbiBbMTcsIDMxLCA0Ml0gOgorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X21wX21heF9vcGVuZmQoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5lbnYuZ2V0X21wX21heF9vcGVuZmQoKSkKKworICAgIGRlZiB0ZXN0X21wX21heF93cml0ZShzZWxmKSA6CisgICAgICAgIGZvciBpIGluIFsxMDAsIDIwMCwgMzAwXSA6CisgICAgICAgICAgICBmb3IgaiBpbiBbMSwgMiwgM10gOgorICAgICAgICAgICAgICAgIGogKj0gMTAwMDAwMAorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9tcF9tYXhfd3JpdGUoaSwgaikKKyAgICAgICAgICAgICAgICB2PXNlbGYuZW52LmdldF9tcF9tYXhfd3JpdGUoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGksIGopLCB2KQorCisgICAgICAgIGRlZiB0ZXN0X2ludmFsaWRfdHhuKHNlbGYpIDoKKyAgICAgICAgICAgICMgVGhpcyBlbnZpcm9ubWVudCBkb2Vzbid0IHN1cHBvcnQgdHJhbnNhY3Rpb25zCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwgc2VsZi5lbnYudHhuX2JlZ2luKQorCisgICAgICAgIGRlZiB0ZXN0X21wX21tYXBzaXplKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFsxNiwgMzIsIDY0XSA6CisgICAgICAgICAgICAgICAgaSAqPSAxMDI0KjEwMjQKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfbXBfbW1hcHNpemUoaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIHNlbGYuZW52LmdldF9tcF9tbWFwc2l6ZSgpKQorCisgICAgICAgIGRlZiB0ZXN0X3RtcF9kaXIoc2VsZikgOgorICAgICAgICAgICAgZm9yIGkgaW4gWyJhIiwgImJiIiwgImNjYyJdIDoKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfdG1wX2RpcihpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5lbnYuZ2V0X3RtcF9kaXIoKSkKKworICAgICAgICBkZWYgdGVzdF9mbGFncyhzZWxmKSA6CisgICAgICAgICAgICBzZWxmLmVudi5zZXRfZmxhZ3MoZGIuREJfQVVUT19DT01NSVQsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRiLkRCX0FVVE9fQ09NTUlULCBzZWxmLmVudi5nZXRfZmxhZ3MoKSkKKyAgICAgICAgICAgIHNlbGYuZW52LnNldF9mbGFncyhkYi5EQl9UWE5fTk9TWU5DLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYi5EQl9BVVRPX0NPTU1JVCB8IGRiLkRCX1RYTl9OT1NZTkMsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZW52LmdldF9mbGFncygpKQorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2ZsYWdzKGRiLkRCX0FVVE9fQ09NTUlULCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYi5EQl9UWE5fTk9TWU5DLCBzZWxmLmVudi5nZXRfZmxhZ3MoKSkKKyAgICAgICAgICAgIHNlbGYuZW52LnNldF9mbGFncyhkYi5EQl9UWE5fTk9TWU5DLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZWxmLmVudi5nZXRfZmxhZ3MoKSkKKworICAgICAgICBkZWYgdGVzdF9sa19tYXhfb2JqZWN0cyhzZWxmKSA6CisgICAgICAgICAgICBmb3IgaSBpbiBbMTAwMCwgMjAwMCwgMzAwMF0gOgorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9sa19tYXhfb2JqZWN0cyhpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5lbnYuZ2V0X2xrX21heF9vYmplY3RzKCkpCisKKyAgICAgICAgZGVmIHRlc3RfbGtfbWF4X2xvY2tzKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFsxMDAwLCAyMDAwLCAzMDAwXSA6CisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2xrX21heF9sb2NrcyhpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgc2VsZi5lbnYuZ2V0X2xrX21heF9sb2NrcygpKQorCisgICAgICAgIGRlZiB0ZXN0X2xrX21heF9sb2NrZXJzKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFsxMDAwLCAyMDAwLCAzMDAwXSA6CisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2xrX21heF9sb2NrZXJzKGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmVudi5nZXRfbGtfbWF4X2xvY2tlcnMoKSkKKworICAgICAgICBkZWYgdGVzdF9sZ19yZWdpb25tYXgoc2VsZikgOgorICAgICAgICAgICAgZm9yIGkgaW4gWzEyOCwgMjU2LCAxMDAwXSA6CisgICAgICAgICAgICAgICAgaSA9IGkqMTAyNCoxMDI0CisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2xnX3JlZ2lvbm1heChpKQorICAgICAgICAgICAgICAgIGogPSBzZWxmLmVudi5nZXRfbGdfcmVnaW9ubWF4KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaSA8PSBqKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKmkgPiBqKQorCisgICAgICAgIGRlZiB0ZXN0X2xrX2RldGVjdChzZWxmKSA6CisgICAgICAgICAgICBmbGFncz0gW2RiLkRCX0xPQ0tfREVGQVVMVCwgZGIuREJfTE9DS19FWFBJUkUsIGRiLkRCX0xPQ0tfTUFYTE9DS1MsCisgICAgICAgICAgICAgICAgICAgIGRiLkRCX0xPQ0tfTUlOTE9DS1MsIGRiLkRCX0xPQ0tfTUlOV1JJVEUsCisgICAgICAgICAgICAgICAgICAgIGRiLkRCX0xPQ0tfT0xERVNULCBkYi5EQl9MT0NLX1JBTkRPTSwgZGIuREJfTE9DS19ZT1VOR0VTVF0KKworICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKGRiLkRCX0xPQ0tfTUFYV1JJVEUpCisKKyAgICAgICAgICAgIGZvciBpIGluIGZsYWdzIDoKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfbGtfZGV0ZWN0KGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmVudi5nZXRfbGtfZGV0ZWN0KCkpCisKKyAgICAgICAgZGVmIHRlc3RfbGdfZGlyKHNlbGYpIDoKKyAgICAgICAgICAgIGZvciBpIGluIFsiYSIsICJiYiIsICJjY2MiLCAiZGRkZCJdIDoKKyAgICAgICAgICAgICAgICBzZWxmLmVudi5zZXRfbGdfZGlyKGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBzZWxmLmVudi5nZXRfbGdfZGlyKCkpCisKKyAgICAgICAgZGVmIHRlc3RfbGdfYnNpemUoc2VsZikgOgorICAgICAgICAgICAgbG9nX3NpemUgPSA3MCoxMDI0CisgICAgICAgICAgICBzZWxmLmVudi5zZXRfbGdfYnNpemUobG9nX3NpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5lbnYuZ2V0X2xnX2JzaXplKCkgPj0gbG9nX3NpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5lbnYuZ2V0X2xnX2JzaXplKCkgPCA0KmxvZ19zaXplKQorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2xnX2JzaXplKDQqbG9nX3NpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5lbnYuZ2V0X2xnX2JzaXplKCkgPj0gNCpsb2dfc2l6ZSkKKworICAgICAgICBkZWYgdGVzdF9zZXRnZXRfZGF0YV9kaXJzKHNlbGYpIDoKKyAgICAgICAgICAgIGRpcnMgPSAoImEiLCAiYiIsICJjIiwgImQiKQorICAgICAgICAgICAgZm9yIGkgaW4gZGlycyA6CisgICAgICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2RhdGFfZGlyKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnMsIHNlbGYuZW52LmdldF9kYXRhX2RpcnMoKSkKKworICAgICAgICBkZWYgdGVzdF9zZXRnZXRfY2FjaGVzaXplKHNlbGYpIDoKKyAgICAgICAgICAgIGNhY2hlc2l6ZSA9ICgwLCA1MTIqMTAyNCoxMDI0LCAzKQorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2NhY2hlc2l6ZSgqY2FjaGVzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWNoZXNpemUsIHNlbGYuZW52LmdldF9jYWNoZXNpemUoKSkKKworICAgICAgICAgICAgY2FjaGVzaXplID0gKDAsIDEqMTAyNCoxMDI0LCA1KQorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X2NhY2hlc2l6ZSgqY2FjaGVzaXplKQorICAgICAgICAgICAgY2FjaGVzaXplMiA9IHNlbGYuZW52LmdldF9jYWNoZXNpemUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWNoZXNpemVbMF0sIGNhY2hlc2l6ZTJbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhY2hlc2l6ZVsyXSwgY2FjaGVzaXplMlsyXSkKKyAgICAgICAgICAgICMgQmVya2VsZXkgREIgZXhwYW5kcyB0aGUgY2FjaGUgMjUlIGFjY291bnRpbmcgb3ZlcmhlYWQsCisgICAgICAgICAgICAjIGlmIHRoZSBjYWNoZSBpcyBzbWFsbC4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTI1LCBpbnQoMTAwLjAqY2FjaGVzaXplMlsxXS9jYWNoZXNpemVbMV0pKQorCisgICAgICAgICAgICAjIFlvdSBjYW4gbm90IGNoYW5nZSBjb25maWd1cmF0aW9uIGFmdGVyIG9wZW5pbmcKKyAgICAgICAgICAgICMgdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSB8IGRiLkRCX0lOSVRfTVBPT0wpCisgICAgICAgICAgICBjYWNoZXNpemUgPSAoMCwgMioxMDI0KjEwMjQsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9jYWNoZXNpemUsICpjYWNoZXNpemUpCisgICAgICAgICAgICBjYWNoZXNpemUzID0gc2VsZi5lbnYuZ2V0X2NhY2hlc2l6ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhY2hlc2l6ZTJbMF0sIGNhY2hlc2l6ZTNbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhY2hlc2l6ZTJbMl0sIGNhY2hlc2l6ZTNbMl0pCisgICAgICAgICAgICAjIEluIEJlcmtlbGV5IERCIDUuMSwgdGhlIGNhY2hlc2l6ZSBjYW4gY2hhbmdlIHdoZW4gb3BlbmluZyB0aGUgRW52CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FjaGVzaXplMlsxXSA8PSBjYWNoZXNpemUzWzFdKQorCisgICAgICAgIGRlZiB0ZXN0X3NldF9jYWNoZXNpemVfZGJlbnZfZGIoc2VsZikgOgorICAgICAgICAgICAgIyBZb3UgY2FuIG5vdCBjb25maWd1cmUgdGhlIGNhY2hlc2l6ZSB1c2luZworICAgICAgICAgICAgIyB0aGUgZGF0YWJhc2UgaGFuZGxlLCBpZiB5b3UgYXJlIHVzaW5nIGFuIGVudmlyb25tZW50LgorICAgICAgICAgICAgZCA9IGRiLkRCKHNlbGYuZW52KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsCisgICAgICAgICAgICAgICAgZC5zZXRfY2FjaGVzaXplLCAwLCAxMDI0KjEwMjQsIDEpCisKKyAgICAgICAgZGVmIHRlc3Rfc2V0Z2V0X3NobV9rZXkoc2VsZikgOgorICAgICAgICAgICAgc2htX2tleT0xMzcKKyAgICAgICAgICAgIHNlbGYuZW52LnNldF9zaG1fa2V5KHNobV9rZXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNobV9rZXksIHNlbGYuZW52LmdldF9zaG1fa2V5KCkpCisgICAgICAgICAgICBzZWxmLmVudi5zZXRfc2htX2tleShzaG1fa2V5KzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNobV9rZXkrMSwgc2VsZi5lbnYuZ2V0X3NobV9rZXkoKSkKKworICAgICAgICAgICAgIyBZb3UgY2FuIG5vdCBjaGFuZ2UgY29uZmlndXJhdGlvbiBhZnRlciBvcGVuaW5nCisgICAgICAgICAgICAjIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIHNlbGYuZW52Lm9wZW4oc2VsZi5ob21lRGlyLCBkYi5EQl9DUkVBVEUgfCBkYi5EQl9JTklUX01QT09MKQorICAgICAgICAgICAgIyBJZiB3ZSB0cnkgdG8gcmVjb25maWd1cmUgY2FjaGUgYWZ0ZXIgb3BlbmluZyB0aGUKKyAgICAgICAgICAgICMgZW52aXJvbm1lbnQsIGNvcmUgZHVtcC4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLAorICAgICAgICAgICAgICAgIHNlbGYuZW52LnNldF9zaG1fa2V5LCBzaG1fa2V5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaG1fa2V5KzEsIHNlbGYuZW52LmdldF9zaG1fa2V5KCkpCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDQpIDoKKyAgICAgICAgZGVmIHRlc3RfbXV0ZXhfc2V0Z2V0X21heChzZWxmKSA6CisgICAgICAgICAgICB2ID0gc2VsZi5lbnYubXV0ZXhfZ2V0X21heCgpCisgICAgICAgICAgICB2MiA9IHYqMisxCisKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF9tYXgodjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYyLCBzZWxmLmVudi5tdXRleF9nZXRfbWF4KCkpCisKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF9tYXgodikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgc2VsZi5lbnYubXV0ZXhfZ2V0X21heCgpKQorCisgICAgICAgICAgICAjIFlvdSBjYW4gbm90IGNoYW5nZSBjb25maWd1cmF0aW9uIGFmdGVyIG9wZW5pbmcKKyAgICAgICAgICAgICMgdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVudi5tdXRleF9zZXRfbWF4LCB2MikKKworICAgICAgICBkZWYgdGVzdF9tdXRleF9zZXRnZXRfaW5jcmVtZW50KHNlbGYpIDoKKyAgICAgICAgICAgIHYgPSBzZWxmLmVudi5tdXRleF9nZXRfaW5jcmVtZW50KCkKKyAgICAgICAgICAgIHYyID0gMTI3CisKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF9pbmNyZW1lbnQodjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYyLCBzZWxmLmVudi5tdXRleF9nZXRfaW5jcmVtZW50KCkpCisKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF9pbmNyZW1lbnQodikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgc2VsZi5lbnYubXV0ZXhfZ2V0X2luY3JlbWVudCgpKQorCisgICAgICAgICAgICAjIFlvdSBjYW4gbm90IGNoYW5nZSBjb25maWd1cmF0aW9uIGFmdGVyIG9wZW5pbmcKKyAgICAgICAgICAgICMgdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVudi5tdXRleF9zZXRfaW5jcmVtZW50LCB2MikKKworICAgICAgICBkZWYgdGVzdF9tdXRleF9zZXRnZXRfdGFzX3NwaW5zKHNlbGYpIDoKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF90YXNfc3BpbnMoMCkgICMgRGVmYXVsdCA9IEJEQiBkZWNpZGVzCisgICAgICAgICAgICB2ID0gc2VsZi5lbnYubXV0ZXhfZ2V0X3Rhc19zcGlucygpCisgICAgICAgICAgICB2MiA9IHYqMisxCisKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF90YXNfc3BpbnModjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYyLCBzZWxmLmVudi5tdXRleF9nZXRfdGFzX3NwaW5zKCkpCisKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF90YXNfc3BpbnModikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgc2VsZi5lbnYubXV0ZXhfZ2V0X3Rhc19zcGlucygpKQorCisgICAgICAgICAgICAjIEluIHRoaXMgY2FzZSwgeW91IGNhbiBjaGFuZ2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgIyBhZnRlciBvcGVuaW5nIHRoZSBlbnZpcm9ubWVudC4KKyAgICAgICAgICAgIHNlbGYuZW52Lm9wZW4oc2VsZi5ob21lRGlyLCBkYi5EQl9DUkVBVEUpCisgICAgICAgICAgICBzZWxmLmVudi5tdXRleF9zZXRfdGFzX3NwaW5zKHYyKQorCisgICAgICAgIGRlZiB0ZXN0X211dGV4X3NldGdldF9hbGlnbihzZWxmKSA6CisgICAgICAgICAgICB2ID0gc2VsZi5lbnYubXV0ZXhfZ2V0X2FsaWduKCkKKyAgICAgICAgICAgIHYyID0gNjQKKyAgICAgICAgICAgIGlmIHYgPT0gNjQgOgorICAgICAgICAgICAgICAgIHYyID0gMTI4CisKKyAgICAgICAgICAgIHNlbGYuZW52Lm11dGV4X3NldF9hbGlnbih2MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodjIsIHNlbGYuZW52Lm11dGV4X2dldF9hbGlnbigpKQorCisgICAgICAgICAgICAjIFJlcXVpcmVzIGEgbm9uemVybyBwb3dlciBvZiB0d28KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVudi5tdXRleF9zZXRfYWxpZ24sIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lbnYubXV0ZXhfc2V0X2FsaWduLCAxNykKKworICAgICAgICAgICAgc2VsZi5lbnYubXV0ZXhfc2V0X2FsaWduKDIqdjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIqdjIsIHNlbGYuZW52Lm11dGV4X2dldF9hbGlnbigpKQorCisgICAgICAgICAgICAjIFlvdSBjYW4gbm90IGNoYW5nZSBjb25maWd1cmF0aW9uIGFmdGVyIG9wZW5pbmcKKyAgICAgICAgICAgICMgdGhlIGVudmlyb25tZW50LgorICAgICAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCSW52YWxpZEFyZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmVudi5tdXRleF9zZXRfYWxpZ24sIHYyKQorCisKK2NsYXNzIERCRW52X2xvZyhEQkVudikgOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgREJFbnYuc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSB8IGRiLkRCX0lOSVRfTVBPT0wgfCBkYi5EQl9JTklUX0xPRykKKworICAgIGRlZiB0ZXN0X2xvZ19maWxlKHNlbGYpIDoKKyAgICAgICAgbG9nX2ZpbGUgPSBzZWxmLmVudi5sb2dfZmlsZSgoMSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImxvZy4wMDAwMDAwMDAxIiwgbG9nX2ZpbGVbLTE0Ol0pCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDQpIDoKKyAgICAgICAgIyBUaGUgdmVyc2lvbiB3aXRoIHRyYW5zYWN0aW9ucyBpcyBjaGVja2VkIGluIG90aGVyIHRlc3Qgb2JqZWN0CisgICAgICAgIGRlZiB0ZXN0X2xvZ19wcmludGYoc2VsZikgOgorICAgICAgICAgICAgbXNnID0gIlRoaXMgaXMgYSB0ZXN0Li4uIgorICAgICAgICAgICAgc2VsZi5lbnYubG9nX3ByaW50Zihtc2cpCisgICAgICAgICAgICBsb2djID0gc2VsZi5lbnYubG9nX2N1cnNvcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnIGluIChsb2djLmxhc3QoKVsxXSkpCisKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDcpIDoKKyAgICAgICAgZGVmIHRlc3RfbG9nX2NvbmZpZyhzZWxmKSA6CisgICAgICAgICAgICBzZWxmLmVudi5sb2dfc2V0X2NvbmZpZyhkYi5EQl9MT0dfRFNZTkMgfCBkYi5EQl9MT0dfWkVSTywgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmVudi5sb2dfZ2V0X2NvbmZpZyhkYi5EQl9MT0dfRFNZTkMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZW52LmxvZ19nZXRfY29uZmlnKGRiLkRCX0xPR19aRVJPKSkKKyAgICAgICAgICAgIHNlbGYuZW52LmxvZ19zZXRfY29uZmlnKGRiLkRCX0xPR19aRVJPLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZW52LmxvZ19nZXRfY29uZmlnKGRiLkRCX0xPR19EU1lOQykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZW52LmxvZ19nZXRfY29uZmlnKGRiLkRCX0xPR19aRVJPKSkKKworCitjbGFzcyBEQkVudl9sb2dfdHhuKERCRW52KSA6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBEQkVudi5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLmVudi5vcGVuKHNlbGYuaG9tZURpciwgZGIuREJfQ1JFQVRFIHwgZGIuREJfSU5JVF9NUE9PTCB8CisgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9MT0cgfCBkYi5EQl9JTklUX1RYTikKKworICAgIGlmIChkYi52ZXJzaW9uKCkgPj0gKDQsIDUpKSBhbmQgKGRiLnZlcnNpb24oKSA8ICg1LCAyKSkgOgorICAgICAgICBkZWYgdGVzdF90eF9tYXgoc2VsZikgOgorICAgICAgICAgICAgdHhucz1bXQorICAgICAgICAgICAgZGVmIHR4KCkgOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmVudi5nZXRfdHhfbWF4KCkpIDoKKyAgICAgICAgICAgICAgICAgICAgdHhucy5hcHBlbmQoc2VsZi5lbnYudHhuX2JlZ2luKCkpCisKKyAgICAgICAgICAgIHR4KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE1lbW9yeUVycm9yLCB0eCkKKworICAgICAgICAgICAgIyBBYm9ydCB0aGUgdHJhbnNhY3Rpb25zIGJlZm9yZSBnYXJiYWdlIGNvbGxlY3Rpb24sCisgICAgICAgICAgICAjIHRvIGF2b2lkICJ3YXJuaW5ncyIuCisgICAgICAgICAgICBmb3IgaSBpbiB0eG5zIDoKKyAgICAgICAgICAgICAgICBpLmFib3J0KCkKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCwgNCkgOgorICAgICAgICAjIFRoZSB2ZXJzaW9uIHdpdGhvdXQgdHJhbnNhY3Rpb25zIGlzIGNoZWNrZWQgaW4gb3RoZXIgdGVzdCBvYmplY3QKKyAgICAgICAgZGVmIHRlc3RfbG9nX3ByaW50ZihzZWxmKSA6CisgICAgICAgICAgICBtc2cgPSAiVGhpcyBpcyBhIHRlc3QuLi4iCisgICAgICAgICAgICB0eG4gPSBzZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICAgICAgc2VsZi5lbnYubG9nX3ByaW50Zihtc2csIHR4bj10eG4pCisgICAgICAgICAgICB0eG4uY29tbWl0KCkKKyAgICAgICAgICAgIGxvZ2MgPSBzZWxmLmVudi5sb2dfY3Vyc29yKCkKKyAgICAgICAgICAgIGxvZ2MubGFzdCgpICAjIFNraXAgdGhlIGNvbW1pdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZyBpbiAobG9nYy5wcmV2KClbMV0pKQorCisgICAgICAgICAgICBtc2cgPSAiVGhpcyBpcyBhbm90aGVyIHRlc3QuLi4iCisgICAgICAgICAgICB0eG4gPSBzZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICAgICAgc2VsZi5lbnYubG9nX3ByaW50Zihtc2csIHR4bj10eG4pCisgICAgICAgICAgICB0eG4uYWJvcnQoKSAgIyBEbyBub3Qgc3RvcmUgdGhlIG5ldyBtZXNzYWdlCisgICAgICAgICAgICBsb2djLmxhc3QoKSAgIyBTa2lwIHRoZSBhYm9ydAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZyBub3QgaW4gKGxvZ2MucHJldigpWzFdKSkKKworICAgICAgICAgICAgbXNnID0gIlRoaXMgaXMgYSB0aGlyZCB0ZXN0Li4uIgorICAgICAgICAgICAgdHhuID0gc2VsZi5lbnYudHhuX2JlZ2luKCkKKyAgICAgICAgICAgIHNlbGYuZW52LmxvZ19wcmludGYobXNnLCB0eG49dHhuKQorICAgICAgICAgICAgdHhuLmNvbW1pdCgpICAjIERvIG5vdCBzdG9yZSB0aGUgbmV3IG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2MubGFzdCgpICAjIFNraXAgdGhlIGNvbW1pdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZyBpbiAobG9nYy5wcmV2KClbMV0pKQorCisKK2NsYXNzIERCRW52X21lbXAoREJFbnYpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgREJFbnYuc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSB8IGRiLkRCX0lOSVRfTVBPT0wgfCBkYi5EQl9JTklUX0xPRykKKyAgICAgICAgc2VsZi5kYiA9IGRiLkRCKHNlbGYuZW52KQorICAgICAgICBzZWxmLmRiLm9wZW4oInRlc3QiLCBkYi5EQl9IQVNILCBkYi5EQl9DUkVBVEUsIDA2NjApCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZGIuY2xvc2UoKQorICAgICAgICBkZWwgc2VsZi5kYgorICAgICAgICBEQkVudi50ZWFyRG93bihzZWxmKQorCisgICAgZGVmIHRlc3RfbWVtcF8xX3RyaWNrbGUoc2VsZikgOgorICAgICAgICBzZWxmLmRiLnB1dCgiaGkiLCAiYnllIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZW52Lm1lbXBfdHJpY2tsZSgxMDApID4gMCkKKworIyBQcmVzZXJ2ZSB0aGUgb3JkZXIsIGRvICJtZW1wX3RyaWNrbGUiIHRlc3QgZmlyc3QKKyAgICBkZWYgdGVzdF9tZW1wXzJfc3luYyhzZWxmKSA6CisgICAgICAgIHNlbGYuZGIucHV0KCJoaSIsICJieWUiKQorICAgICAgICBzZWxmLmVudi5tZW1wX3N5bmMoKSAgIyBGdWxsIGZsdXNoCisgICAgICAgICMgTm90aGluZyB0byBkby4uLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5lbnYubWVtcF90cmlja2xlKDEwMCkgPT0gMCkKKworICAgICAgICBzZWxmLmRiLnB1dCgiaGkiLCAiYnllMiIpCisgICAgICAgIHNlbGYuZW52Lm1lbXBfc3luYygoMSwgMCkpICAjIE5PUCwgcHJvYmFibHkKKyAgICAgICAgIyBTb21ldGhpbmcgdG8gZG8uLi4gb3Igbm90CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmVudi5tZW1wX3RyaWNrbGUoMTAwKSA+PSAwKQorCisgICAgICAgIHNlbGYuZGIucHV0KCJoaSIsICJieWUzIikKKyAgICAgICAgc2VsZi5lbnYubWVtcF9zeW5jKCgxMjMsIDk5KSkgICMgRnVsbCBmbHVzaAorICAgICAgICAjIE5vdGhpbmcgdG8gZG8uLi4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZW52Lm1lbXBfdHJpY2tsZSgxMDApID09IDApCisKKyAgICBkZWYgdGVzdF9tZW1wX3N0YXRfMShzZWxmKSA6CisgICAgICAgIHN0YXRzID0gc2VsZi5lbnYubWVtcF9zdGF0KCkgICMgTm8gcGFyYW0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihzdGF0cyk9PTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiY2FjaGVfbWlzcyIgaW4gc3RhdHNbMF0pCisgICAgICAgIHN0YXRzID0gc2VsZi5lbnYubWVtcF9zdGF0KGRiLkRCX1NUQVRfQ0xFQVIpICAjIFBvc2l0aW9uYWwgcGFyYW0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJjYWNoZV9taXNzIiBpbiBzdGF0c1swXSkKKyAgICAgICAgc3RhdHMgPSBzZWxmLmVudi5tZW1wX3N0YXQoZmxhZ3M9MCkgICMgS2V5d29yZCBwYXJhbQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImNhY2hlX21pc3MiIGluIHN0YXRzWzBdKQorCisgICAgZGVmIHRlc3RfbWVtcF9zdGF0XzIoc2VsZikgOgorICAgICAgICBzdGF0cz1zZWxmLmVudi5tZW1wX3N0YXQoKVsxXQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHN0YXRzKSk9PTEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJ0ZXN0IiBpbiBzdGF0cykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJwYWdlX2luIiBpbiBzdGF0c1sidGVzdCJdKQorCitjbGFzcyBEQkVudl9sb2djdXJzb3IoREJFbnYpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgREJFbnYuc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSB8IGRiLkRCX0lOSVRfTVBPT0wgfAorICAgICAgICAgICAgICAgIGRiLkRCX0lOSVRfTE9HIHwgZGIuREJfSU5JVF9UWE4pCisgICAgICAgIHR4biA9IHNlbGYuZW52LnR4bl9iZWdpbigpCisgICAgICAgIHNlbGYuZGIgPSBkYi5EQihzZWxmLmVudikKKyAgICAgICAgc2VsZi5kYi5vcGVuKCJ0ZXN0IiwgZGIuREJfSEFTSCwgZGIuREJfQ1JFQVRFLCAwNjYwLCB0eG49dHhuKQorICAgICAgICB0eG4uY29tbWl0KCkKKyAgICAgICAgZm9yIGkgaW4gWyIyIiwgIjgiLCAiMjAiXSA6CisgICAgICAgICAgICB0eG4gPSBzZWxmLmVudi50eG5fYmVnaW4oKQorICAgICAgICAgICAgc2VsZi5kYi5wdXQoa2V5ID0gaSwgZGF0YSA9IGkqaW50KGkpLCB0eG49dHhuKQorICAgICAgICAgICAgdHhuLmNvbW1pdCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZGIuY2xvc2UoKQorICAgICAgICBkZWwgc2VsZi5kYgorICAgICAgICBEQkVudi50ZWFyRG93bihzZWxmKQorCisgICAgZGVmIF9jaGVja19yZXR1cm4oc2VsZiwgdmFsdWUpIDoKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmFsdWUsIHR1cGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWUpLCAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh2YWx1ZVswXSwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2YWx1ZVswXSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHZhbHVlWzBdWzBdLCBpbnQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh2YWx1ZVswXVsxXSwgaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmFsdWVbMV0sIHN0cikpCisKKyAgICAjIFByZXNlcnZlIHRlc3Qgb3JkZXIKKyAgICBkZWYgdGVzdF8xX2ZpcnN0KHNlbGYpIDoKKyAgICAgICAgbG9nYyA9IHNlbGYuZW52LmxvZ19jdXJzb3IoKQorICAgICAgICB2ID0gbG9nYy5maXJzdCgpCisgICAgICAgIHNlbGYuX2NoZWNrX3JldHVybih2KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKDEsIDEpIDwgdlswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbih2WzFdKT4wKQorCisgICAgZGVmIHRlc3RfMl9sYXN0KHNlbGYpIDoKKyAgICAgICAgbG9nYyA9IHNlbGYuZW52LmxvZ19jdXJzb3IoKQorICAgICAgICBsc25fZmlyc3QgPSBsb2djLmZpcnN0KClbMF0KKyAgICAgICAgdiA9IGxvZ2MubGFzdCgpCisgICAgICAgIHNlbGYuX2NoZWNrX3JldHVybih2KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHNuX2ZpcnN0IDwgdlswXSkKKworICAgIGRlZiB0ZXN0XzNfbmV4dChzZWxmKSA6CisgICAgICAgIGxvZ2MgPSBzZWxmLmVudi5sb2dfY3Vyc29yKCkKKyAgICAgICAgbHNuX2xhc3QgPSBsb2djLmxhc3QoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2MubmV4dCgpLCBOb25lKQorICAgICAgICBsc25fZmlyc3QgPSBsb2djLmZpcnN0KClbMF0KKyAgICAgICAgdiA9IGxvZ2MubmV4dCgpCisgICAgICAgIHNlbGYuX2NoZWNrX3JldHVybih2KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHNuX2ZpcnN0IDwgdlswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxzbl9sYXN0ID4gdlswXSkKKworICAgICAgICB2MiA9IGxvZ2MubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2MlswXSA+IHZbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc25fbGFzdCA+IHYyWzBdKQorCisgICAgICAgIHYzID0gbG9nYy5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYzWzBdID4gdjJbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc25fbGFzdCA+IHYzWzBdKQorCisgICAgZGVmIHRlc3RfNF9wcmV2KHNlbGYpIDoKKyAgICAgICAgbG9nYyA9IHNlbGYuZW52LmxvZ19jdXJzb3IoKQorICAgICAgICBsc25fZmlyc3QgPSBsb2djLmZpcnN0KClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2djLnByZXYoKSwgTm9uZSkKKyAgICAgICAgbHNuX2xhc3QgPSBsb2djLmxhc3QoKVswXQorICAgICAgICB2ID0gbG9nYy5wcmV2KCkKKyAgICAgICAgc2VsZi5fY2hlY2tfcmV0dXJuKHYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc25fZmlyc3QgPCB2WzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHNuX2xhc3QgPiB2WzBdKQorCisgICAgICAgIHYyID0gbG9nYy5wcmV2KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYyWzBdIDwgdlswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxzbl9maXJzdCA8IHYyWzBdKQorCisgICAgICAgIHYzID0gbG9nYy5wcmV2KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYzWzBdIDwgdjJbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc25fZmlyc3QgPCB2M1swXSkKKworICAgIGRlZiB0ZXN0XzVfY3VycmVudChzZWxmKSA6CisgICAgICAgIGxvZ2MgPSBzZWxmLmVudi5sb2dfY3Vyc29yKCkKKyAgICAgICAgbG9nYy5maXJzdCgpCisgICAgICAgIHYgPSBsb2djLm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsIGxvZ2MuY3VycmVudCgpKQorCisgICAgZGVmIHRlc3RfNl9zZXQoc2VsZikgOgorICAgICAgICBsb2djID0gc2VsZi5lbnYubG9nX2N1cnNvcigpCisgICAgICAgIGxvZ2MuZmlyc3QoKQorICAgICAgICB2ID0gbG9nYy5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh2LCBsb2djLm5leHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh2LCBsb2djLm5leHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCBsb2djLnNldCh2WzBdKSkKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2Nsb3NlKHNlbGYpIDoKKyAgICAgICAgbG9nYyA9IHNlbGYuZW52LmxvZ19jdXJzb3IoKQorICAgICAgICBsb2djLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJDdXJzb3JDbG9zZWRFcnJvciwgbG9nYy5uZXh0KQorCisgICAgZGVmIHRlc3RfaW1wbGljaXRfY2xvc2Uoc2VsZikgOgorICAgICAgICBsb2djID0gIFtzZWxmLmVudi5sb2dfY3Vyc29yKCkgZm9yIGkgaW4geHJhbmdlKDEwKV0KKyAgICAgICAgc2VsZi5lbnYuY2xvc2UoKSAgIyBUaGlzIGNsb3NlIHNob3VsZCBjbG9zZSB0b28gYWxsIGl0cyB0cmVlCisgICAgICAgIGZvciBpIGluIGxvZ2MgOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJDdXJzb3JDbG9zZWRFcnJvciwgaS5uZXh0KQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCRW52X2dlbmVyYWwpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCRW52X21lbXApKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCRW52X2xvZ2N1cnNvcikpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoREJFbnZfbG9nKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShEQkVudl9sb2dfdHhuKSkKKworICAgIHJldHVybiBzdWl0ZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3Rlc3Rfc3VpdGUnKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfZGJvYmoucHkgYi9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9kYm9iai5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzAxYTVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfZGJvYmoucHkKQEAgLTAsMCArMSw3MCBAQAorCitpbXBvcnQgb3MsIHN0cmluZworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdF9hbGwgaW1wb3J0IGRiLCBkYm9iaiwgdGVzdF9zdXBwb3J0LCBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgsIFwKKyAgICAgICAgZ2V0X25ld19kYXRhYmFzZV9wYXRoCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIGRib2JqVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlZlcmlmeSB0aGF0IGRib2JqLkRCIGFuZCBkYm9iai5EQkVudiB3b3JrIHByb3Blcmx5IiIiCisgICAgZGJfbmFtZSA9ICd0ZXN0LWRib2JqLmRiJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmhvbWVEaXIgPSBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdkYicpOgorICAgICAgICAgICAgZGVsIHNlbGYuZGIKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnZW52Jyk6CisgICAgICAgICAgICBkZWwgc2VsZi5lbnYKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJtdHJlZShzZWxmLmhvbWVEaXIpCisKKyAgICBkZWYgdGVzdDAxX2JvdGgoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3REQkVudihkYm9iai5EQkVudik6IHBhc3MKKyAgICAgICAgY2xhc3MgVGVzdERCKGRib2JqLkRCKToKKyAgICAgICAgICAgIGRlZiBwdXQoc2VsZiwga2V5LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIGtleSA9IGtleS51cHBlcigpCisgICAgICAgICAgICAgICAgIyBjYWxsIG91ciBwYXJlbnQgY2xhc3NlcyBwdXQgbWV0aG9kIHdpdGggYW4gdXBwZXIgY2FzZSBrZXkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGJvYmouREIucHV0KHNlbGYsIGtleSwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmVudiA9IFRlc3REQkVudigpCisgICAgICAgIHNlbGYuZW52Lm9wZW4oc2VsZi5ob21lRGlyLCBkYi5EQl9DUkVBVEUgfCBkYi5EQl9JTklUX01QT09MKQorICAgICAgICBzZWxmLmRiID0gVGVzdERCKHNlbGYuZW52KQorICAgICAgICBzZWxmLmRiLm9wZW4oc2VsZi5kYl9uYW1lLCBkYi5EQl9IQVNILCBkYi5EQl9DUkVBVEUpCisgICAgICAgIHNlbGYuZGIucHV0KCdzcGFtJywgJ2VnZ3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuZ2V0KCdzcGFtJyksIE5vbmUsCisgICAgICAgICAgICAgICAib3ZlcnJpZGRlbiBkYm9iai5EQi5wdXQoKSBtZXRob2QgZmFpbGVkIFsxXSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5nZXQoJ1NQQU0nKSwgJ2VnZ3MnLAorICAgICAgICAgICAgICAgIm92ZXJyaWRkZW4gZGJvYmouREIucHV0KCkgbWV0aG9kIGZhaWxlZCBbMl0iKQorICAgICAgICBzZWxmLmRiLmNsb3NlKCkKKyAgICAgICAgc2VsZi5lbnYuY2xvc2UoKQorCisgICAgZGVmIHRlc3QwMl9kYm9ial9kaWN0X2ludGVyZmFjZShzZWxmKToKKyAgICAgICAgc2VsZi5lbnYgPSBkYm9iai5EQkVudigpCisgICAgICAgIHNlbGYuZW52Lm9wZW4oc2VsZi5ob21lRGlyLCBkYi5EQl9DUkVBVEUgfCBkYi5EQl9JTklUX01QT09MKQorICAgICAgICBzZWxmLmRiID0gZGJvYmouREIoc2VsZi5lbnYpCisgICAgICAgIHNlbGYuZGIub3BlbihzZWxmLmRiX25hbWUrJzAyJywgZGIuREJfSEFTSCwgZGIuREJfQ1JFQVRFKQorICAgICAgICAjIF9fc2V0aXRlbV9fCisgICAgICAgIHNlbGYuZGJbJ3NwYW0nXSA9ICdlZ2dzJworICAgICAgICAjIF9fbGVuX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5kYiksIDEpCisgICAgICAgICMgX19nZXRpdGVtX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiWydzcGFtJ10sICdlZ2dzJykKKyAgICAgICAgIyBfX2RlbF9fCisgICAgICAgIGRlbCBzZWxmLmRiWydzcGFtJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmdldCgnc3BhbScpLCBOb25lLCAiZGJvYmogX19kZWxfXyBmYWlsZWQiKQorICAgICAgICBzZWxmLmRiLmNsb3NlKCkKKyAgICAgICAgc2VsZi5lbnYuY2xvc2UoKQorCisgICAgZGVmIHRlc3QwM19kYm9ial90eXBlX2JlZm9yZV9vcGVuKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGlzIGRvZXNuJ3QgY2F1c2UgYSBzZWdmYXVsdC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJJbnZhbGlkQXJnRXJyb3IsIGRiLkRCKCkudHlwZSkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKGRib2JqVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0ndGVzdF9zdWl0ZScpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9kYnNoZWx2ZS5weSBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2Ric2hlbHZlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzAxZTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9kYnNoZWx2ZS5weQpAQCAtMCwwICsxLDM5OCBAQAorIiIiCitUZXN0Q2FzZXMgZm9yIGNoZWNraW5nIGRiU2hlbHZlIG9iamVjdHMuCisiIiIKKworaW1wb3J0IG9zLCBzdHJpbmcsIHN5cworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHVuaXR0ZXN0CisKKworZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIGRic2hlbHZlLCB0ZXN0X3N1cHBvcnQsIHZlcmJvc2UsIFwKKyAgICAgICAgZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoLCBnZXRfbmV3X2RhdGFiYXNlX3BhdGgKKworCisKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFdlIHdhbnQgdGhlIG9iamVjdHMgdG8gYmUgY29tcGFyYWJsZSBzbyB3ZSBjYW4gdGVzdCBkYnNoZWx2ZS52YWx1ZXMKKyMgbGF0ZXIgb24uCitjbGFzcyBEYXRhQ2xhc3M6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnZhbHVlID0gcmFuZG9tLnJhbmRvbSgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZikgOiAgIyBGb3IgUHl0aG9uIDMuMCBjb21wYXJpc29uCisgICAgICAgIHJldHVybiAiRGF0YUNsYXNzICVmIiAlc2VsZi52YWx1ZQorCisgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOiAgIyBGb3IgUHl0aG9uIDIueCBjb21wYXJpc29uCisgICAgICAgIHJldHVybiBjbXAoc2VsZi52YWx1ZSwgb3RoZXIpCisKKworY2xhc3MgREJTaGVsdmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaWYgKHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNykpIG9yICgoc3lzLnZlcnNpb25faW5mbyA+PSAoMywgMCkpIGFuZAorICAgICAgICAgICAgKHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMikpKSA6CisgICAgICAgIGRlZiBhc3NlcnRJbihzZWxmLCBhLCBiLCBtc2c9Tm9uZSkgOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXNzZXJ0VHJ1ZShhIGluIGIsIG1zZz1tc2cpCisKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA+PSAzIDoKKyAgICAgICAgICAgIGZyb20gdGVzdF9hbGwgaW1wb3J0IGRvX3Byb3h5X2RiX3B5M2sKKyAgICAgICAgICAgIHNlbGYuX2ZsYWdfcHJveHlfZGJfcHkzayA9IGRvX3Byb3h5X2RiX3B5M2soRmFsc2UpCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBnZXRfbmV3X2RhdGFiYXNlX3BhdGgoKQorICAgICAgICBzZWxmLmRvX29wZW4oKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID49IDMgOgorICAgICAgICAgICAgZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZG9fcHJveHlfZGJfcHkzaworICAgICAgICAgICAgZG9fcHJveHlfZGJfcHkzayhzZWxmLl9mbGFnX3Byb3h5X2RiX3B5M2spCisgICAgICAgIHNlbGYuZG9fY2xvc2UoKQorICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisKKyAgICBkZWYgbWsoc2VsZiwga2V5KToKKyAgICAgICAgIiIiVHVybiBrZXkgaW50byBhbiBhcHByb3ByaWF0ZSBrZXkgdHlwZSBmb3IgdGhpcyBkYiIiIgorICAgICAgICAjIG92ZXJyaWRlIGluIGNoaWxkIGNsYXNzIGZvciBSRUNOTworICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgICAgICAgICByZXR1cm4ga2V5CisgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgcmV0dXJuIGJ5dGVzKGtleSwgImlzbzg4NTktMSIpICAjIDggYml0cworCisgICAgZGVmIHBvcHVsYXRlREIoc2VsZiwgZCk6CisgICAgICAgIGZvciB4IGluIHN0cmluZy5sZXR0ZXJzOgorICAgICAgICAgICAgZFtzZWxmLm1rKCdTJyArIHgpXSA9IDEwICogeCAgICAgICAgICAgIyBhZGQgYSBzdHJpbmcKKyAgICAgICAgICAgIGRbc2VsZi5taygnSScgKyB4KV0gPSBvcmQoeCkgICAgICAgICAgICMgYWRkIGFuIGludGVnZXIKKyAgICAgICAgICAgIGRbc2VsZi5taygnTCcgKyB4KV0gPSBbeF0gKiAxMCAgICAgICAgICMgYWRkIGEgbGlzdAorCisgICAgICAgICAgICBpbnN0ID0gRGF0YUNsYXNzKCkgICAgICAgICAgICAjIGFkZCBhbiBpbnN0YW5jZQorICAgICAgICAgICAgaW5zdC5TID0gMTAgKiB4CisgICAgICAgICAgICBpbnN0LkkgPSBvcmQoeCkKKyAgICAgICAgICAgIGluc3QuTCA9IFt4XSAqIDEwCisgICAgICAgICAgICBkW3NlbGYubWsoJ08nICsgeCldID0gaW5zdAorCisKKyAgICAjIG92ZXJyaWRhYmxlIGluIGRlcml2ZWQgY2xhc3NlcyB0byBhZmZlY3QgaG93IHRoZSBzaGVsZiBpcyBjcmVhdGVkL29wZW5lZAorICAgIGRlZiBkb19vcGVuKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBkYnNoZWx2ZS5vcGVuKHNlbGYuZmlsZW5hbWUpCisKKyAgICAjIGFuZCBjbG9zZWQuLi4KKyAgICBkZWYgZG9fY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuZC5jbG9zZSgpCisKKworCisgICAgZGVmIHRlc3QwMV9iYXNpY3Moc2VsZik6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwMV9iYXNpY3MuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBzZWxmLnBvcHVsYXRlREIoc2VsZi5kKQorICAgICAgICBzZWxmLmQuc3luYygpCisgICAgICAgIHNlbGYuZG9fY2xvc2UoKQorICAgICAgICBzZWxmLmRvX29wZW4oKQorICAgICAgICBkID0gc2VsZi5kCisKKyAgICAgICAgbCA9IGxlbihkKQorICAgICAgICBrID0gZC5rZXlzKCkKKyAgICAgICAgcyA9IGQuc3RhdCgpCisgICAgICAgIGYgPSBkLmZkKCkKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgImxlbmd0aDoiLCBsCisgICAgICAgICAgICBwcmludCAia2V5czoiLCBrCisgICAgICAgICAgICBwcmludCAic3RhdHM6IiwgcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZC5oYXNfa2V5KHNlbGYubWsoJ2JhZCBrZXknKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZC5oYXNfa2V5KHNlbGYubWsoJ0lBJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGQuaGFzX2tleShzZWxmLm1rKCdPQScpKSkKKworICAgICAgICBkLmRlbGV0ZShzZWxmLm1rKCdJQScpKQorICAgICAgICBkZWwgZFtzZWxmLm1rKCdPQScpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGQuaGFzX2tleShzZWxmLm1rKCdJQScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBkLmhhc19rZXkoc2VsZi5taygnT0EnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCBsLTIpCisKKyAgICAgICAgdmFsdWVzID0gW10KKyAgICAgICAgZm9yIGtleSBpbiBkLmtleXMoKToKKyAgICAgICAgICAgIHZhbHVlID0gZFtrZXldCisgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKHZhbHVlKQorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAiJXM6ICVzIiAlIChrZXksIHZhbHVlKQorICAgICAgICAgICAgc2VsZi5jaGVja3JlYyhrZXksIHZhbHVlKQorCisgICAgICAgIGRidmFsdWVzID0gZC52YWx1ZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkYnZhbHVlcyksIGxlbihkLmtleXMoKSkpCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgdmFsdWVzLnNvcnQoKQorICAgICAgICAgICAgZGJ2YWx1ZXMuc29ydCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcywgZGJ2YWx1ZXMpCisgICAgICAgIGVsc2UgOiAgIyBYWFg6IENvbnZlcnQgYWxsIHRvIHN0cmluZ3MuIFBsZWFzZSwgaW1wcm92ZQorICAgICAgICAgICAgdmFsdWVzLnNvcnQoa2V5PWxhbWJkYSB4IDogc3RyKHgpKQorICAgICAgICAgICAgZGJ2YWx1ZXMuc29ydChrZXk9bGFtYmRhIHggOiBzdHIoeCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodmFsdWVzKSwgcmVwcihkYnZhbHVlcykpCisKKyAgICAgICAgaXRlbXMgPSBkLml0ZW1zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXRlbXMpLCBsZW4odmFsdWVzKSkKKworICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBpdGVtczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tyZWMoa2V5LCB2YWx1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KHNlbGYubWsoJ2JhZCBrZXknKSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoc2VsZi5taygnYmFkIGtleScpLCBOb25lKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChzZWxmLm1rKCdiYWQga2V5JyksICdhIHN0cmluZycpLCAnYSBzdHJpbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KHNlbGYubWsoJ2JhZCBrZXknKSwgWzEsIDIsIDNdKSwgWzEsIDIsIDNdKQorCisgICAgICAgIGQuc2V0X2dldF9yZXR1cm5zX25vbmUoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJOb3RGb3VuZEVycm9yLCBkLmdldCwgc2VsZi5taygnYmFkIGtleScpKQorICAgICAgICBkLnNldF9nZXRfcmV0dXJuc19ub25lKDEpCisKKyAgICAgICAgZC5wdXQoc2VsZi5taygnbmV3IGtleScpLCAnbmV3IGRhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KHNlbGYubWsoJ25ldyBrZXknKSksICduZXcgZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtzZWxmLm1rKCduZXcga2V5JyldLCAnbmV3IGRhdGEnKQorCisKKworICAgIGRlZiB0ZXN0MDJfY3Vyc29ycyhzZWxmKToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdcbicsICctPScgKiAzMAorICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDAyX2N1cnNvcnMuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBzZWxmLnBvcHVsYXRlREIoc2VsZi5kKQorICAgICAgICBkID0gc2VsZi5kCisKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGMgPSBkLmN1cnNvcigpCisgICAgICAgIHJlYyA9IGMuZmlyc3QoKQorICAgICAgICB3aGlsZSByZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCByZWMKKyAgICAgICAgICAgIGtleSwgdmFsdWUgPSByZWMKKyAgICAgICAgICAgIHNlbGYuY2hlY2tyZWMoa2V5LCB2YWx1ZSkKKyAgICAgICAgICAgICMgSGFjayB0byBhdm9pZCBjb252ZXJzaW9uIGJ5IDJ0bzMgdG9vbAorICAgICAgICAgICAgcmVjID0gZ2V0YXR0cihjLCAibmV4dCIpKCkKKyAgICAgICAgZGVsIGMKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCBsZW4oZCkpCisKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGMgPSBkLmN1cnNvcigpCisgICAgICAgIHJlYyA9IGMubGFzdCgpCisgICAgICAgIHdoaWxlIHJlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50IHJlYworICAgICAgICAgICAga2V5LCB2YWx1ZSA9IHJlYworICAgICAgICAgICAgc2VsZi5jaGVja3JlYyhrZXksIHZhbHVlKQorICAgICAgICAgICAgcmVjID0gYy5wcmV2KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCBsZW4oZCkpCisKKyAgICAgICAgYy5zZXQoc2VsZi5taygnU1MnKSkKKyAgICAgICAga2V5LCB2YWx1ZSA9IGMuY3VycmVudCgpCisgICAgICAgIHNlbGYuY2hlY2tyZWMoa2V5LCB2YWx1ZSkKKyAgICAgICAgZGVsIGMKKworCisgICAgZGVmIHRlc3QwM19hcHBlbmQoc2VsZik6CisgICAgICAgICMgTk9URTogdGhpcyBpcyBvdmVycmlkZGVuIGluIFJFQ05PIHN1YmNsYXNzLCBkb24ndCBjaGFuZ2UgaXRzIG5hbWUuCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwM19hcHBlbmQuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYnNoZWx2ZS5EQlNoZWx2ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuYXBwZW5kLCAndW5pdCB0ZXN0IHdhcyBoZXJlJykKKworCisgICAgZGVmIHRlc3QwNF9pdGVyYWJsZShzZWxmKSA6CisgICAgICAgIHNlbGYucG9wdWxhdGVEQihzZWxmLmQpCisgICAgICAgIGQgPSBzZWxmLmQKKyAgICAgICAga2V5cyA9IGQua2V5cygpCisgICAgICAgIGtleXNldCA9IHNldChrZXlzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihrZXlzZXQpLCBsZW4oa2V5cykpCisKKyAgICAgICAgZm9yIGtleSBpbiBkIDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCBrZXlzZXQpCisgICAgICAgICAgICBrZXlzZXQucmVtb3ZlKGtleSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5c2V0KSwgMCkKKworICAgIGRlZiBjaGVja3JlYyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgIyBvdmVycmlkZSB0aGlzIGluIGEgc3ViY2xhc3MgaWYgdGhlIGtleSB0eXBlIGlzIGRpZmZlcmVudAorCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMyA6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgYnl0ZXMpIDoKKyAgICAgICAgICAgICAgICBrZXkgPSBrZXkuZGVjb2RlKCJpc284ODU5LTEiKSAgIyA4IGJpdHMKKworICAgICAgICB4ID0ga2V5WzFdCisgICAgICAgIGlmIGtleVswXSA9PSAnUyc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsdWUpLCBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCAxMCAqIHgpCisKKyAgICAgICAgZWxpZiBrZXlbMF0gPT0gJ0knOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbHVlKSwgaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgb3JkKHgpKQorCisgICAgICAgIGVsaWYga2V5WzBdID09ICdMJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2YWx1ZSksIGxpc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBbeF0gKiAxMCkKKworICAgICAgICBlbGlmIGtleVswXSA9PSAnTyc6CisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgICAgICAgICAgICAgZnJvbSB0eXBlcyBpbXBvcnQgSW5zdGFuY2VUeXBlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbHVlKSwgSW5zdGFuY2VUeXBlKQorICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbHVlKSwgRGF0YUNsYXNzKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLlMsIDEwICogeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUuSSwgb3JkKHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZS5MLCBbeF0gKiAxMCkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAsICdVbmtub3duIGtleSB0eXBlLCBmaXggdGhlIHRlc3QnKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBCYXNpY1NoZWx2ZVRlc3RDYXNlKERCU2hlbHZlVGVzdENhc2UpOgorICAgIGRlZiBkb19vcGVuKHNlbGYpOgorICAgICAgICBzZWxmLmQgPSBkYnNoZWx2ZS5EQlNoZWxmKCkKKyAgICAgICAgc2VsZi5kLm9wZW4oc2VsZi5maWxlbmFtZSwgc2VsZi5kYnR5cGUsIHNlbGYuZGJmbGFncykKKworICAgIGRlZiBkb19jbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5kLmNsb3NlKCkKKworCitjbGFzcyBCVHJlZVNoZWx2ZVRlc3RDYXNlKEJhc2ljU2hlbHZlVGVzdENhc2UpOgorICAgIGRidHlwZSA9IGRiLkRCX0JUUkVFCisgICAgZGJmbGFncyA9IGRiLkRCX0NSRUFURQorCisKK2NsYXNzIEhhc2hTaGVsdmVUZXN0Q2FzZShCYXNpY1NoZWx2ZVRlc3RDYXNlKToKKyAgICBkYnR5cGUgPSBkYi5EQl9IQVNICisgICAgZGJmbGFncyA9IGRiLkRCX0NSRUFURQorCisKK2NsYXNzIFRocmVhZEJUcmVlU2hlbHZlVGVzdENhc2UoQmFzaWNTaGVsdmVUZXN0Q2FzZSk6CisgICAgZGJ0eXBlID0gZGIuREJfQlRSRUUKKyAgICBkYmZsYWdzID0gZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFECisKKworY2xhc3MgVGhyZWFkSGFzaFNoZWx2ZVRlc3RDYXNlKEJhc2ljU2hlbHZlVGVzdENhc2UpOgorICAgIGRidHlwZSA9IGRiLkRCX0hBU0gKKyAgICBkYmZsYWdzID0gZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFECisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgQmFzaWNFbnZTaGVsdmVUZXN0Q2FzZShEQlNoZWx2ZVRlc3RDYXNlKToKKyAgICBkZWYgZG9fb3BlbihzZWxmKToKKyAgICAgICAgc2VsZi5lbnYgPSBkYi5EQkVudigpCisgICAgICAgIHNlbGYuZW52Lm9wZW4oc2VsZi5ob21lRGlyLAorICAgICAgICAgICAgICAgIHNlbGYuZW52ZmxhZ3MgfCBkYi5EQl9JTklUX01QT09MIHwgZGIuREJfQ1JFQVRFKQorCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0KHNlbGYuZmlsZW5hbWUpWzFdCisgICAgICAgIHNlbGYuZCA9IGRic2hlbHZlLkRCU2hlbGYoc2VsZi5lbnYpCisgICAgICAgIHNlbGYuZC5vcGVuKHNlbGYuZmlsZW5hbWUsIHNlbGYuZGJ0eXBlLCBzZWxmLmRiZmxhZ3MpCisKKworICAgIGRlZiBkb19jbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5kLmNsb3NlKCkKKyAgICAgICAgc2VsZi5lbnYuY2xvc2UoKQorCisKKyAgICBkZWYgc2V0VXAoc2VsZikgOgorICAgICAgICBzZWxmLmhvbWVEaXIgPSBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgoKQorICAgICAgICBEQlNoZWx2ZVRlc3RDYXNlLnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMyA6CisgICAgICAgICAgICBmcm9tIHRlc3RfYWxsIGltcG9ydCBkb19wcm94eV9kYl9weTNrCisgICAgICAgICAgICBkb19wcm94eV9kYl9weTNrKHNlbGYuX2ZsYWdfcHJveHlfZGJfcHkzaykKKyAgICAgICAgc2VsZi5kb19jbG9zZSgpCisgICAgICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUoc2VsZi5ob21lRGlyKQorCisKK2NsYXNzIEVudkJUcmVlU2hlbHZlVGVzdENhc2UoQmFzaWNFbnZTaGVsdmVUZXN0Q2FzZSk6CisgICAgZW52ZmxhZ3MgPSAwCisgICAgZGJ0eXBlID0gZGIuREJfQlRSRUUKKyAgICBkYmZsYWdzID0gZGIuREJfQ1JFQVRFCisKKworY2xhc3MgRW52SGFzaFNoZWx2ZVRlc3RDYXNlKEJhc2ljRW52U2hlbHZlVGVzdENhc2UpOgorICAgIGVudmZsYWdzID0gMAorICAgIGRidHlwZSA9IGRiLkRCX0hBU0gKKyAgICBkYmZsYWdzID0gZGIuREJfQ1JFQVRFCisKKworY2xhc3MgRW52VGhyZWFkQlRyZWVTaGVsdmVUZXN0Q2FzZShCYXNpY0VudlNoZWx2ZVRlc3RDYXNlKToKKyAgICBlbnZmbGFncyA9IGRiLkRCX1RIUkVBRAorICAgIGRidHlwZSA9IGRiLkRCX0JUUkVFCisgICAgZGJmbGFncyA9IGRiLkRCX0NSRUFURSB8IGRiLkRCX1RIUkVBRAorCisKK2NsYXNzIEVudlRocmVhZEhhc2hTaGVsdmVUZXN0Q2FzZShCYXNpY0VudlNoZWx2ZVRlc3RDYXNlKToKKyAgICBlbnZmbGFncyA9IGRiLkRCX1RIUkVBRAorICAgIGRidHlwZSA9IGRiLkRCX0hBU0gKKyAgICBkYmZsYWdzID0gZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFECisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgdGVzdCBjYXNlcyBmb3IgYSBEQlNoZWxmIGluIGEgUkVDTk8gREIuCisKK2NsYXNzIFJlY05vU2hlbHZlVGVzdENhc2UoQmFzaWNTaGVsdmVUZXN0Q2FzZSk6CisgICAgZGJ0eXBlID0gZGIuREJfUkVDTk8KKyAgICBkYmZsYWdzID0gZGIuREJfQ1JFQVRFCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIEJhc2ljU2hlbHZlVGVzdENhc2Uuc2V0VXAoc2VsZikKKworICAgICAgICAjIHBvb2wgdG8gYXNzaWduIGludGVnZXIga2V5IHZhbHVlcyBvdXQgb2YKKyAgICAgICAgc2VsZi5rZXlfcG9vbCA9IGxpc3QocmFuZ2UoMSwgNTAwMCkpCisgICAgICAgIHNlbGYua2V5X21hcCA9IHt9ICAgICAjIG1hcCBzdHJpbmcga2V5cyB0byB0aGUgbnVtYmVyIHdlIGdhdmUgdGhlbQorICAgICAgICBzZWxmLmludGtleV9tYXAgPSB7fSAgIyByZXZlcnNlIG1hcCBvZiBhYm92ZQorCisgICAgZGVmIG1rKHNlbGYsIGtleSk6CisgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZi5rZXlfbWFwOgorICAgICAgICAgICAgc2VsZi5rZXlfbWFwW2tleV0gPSBzZWxmLmtleV9wb29sLnBvcCgwKQorICAgICAgICAgICAgc2VsZi5pbnRrZXlfbWFwW3NlbGYua2V5X21hcFtrZXldXSA9IGtleQorICAgICAgICByZXR1cm4gc2VsZi5rZXlfbWFwW2tleV0KKworICAgIGRlZiBjaGVja3JlYyhzZWxmLCBpbnRrZXksIHZhbHVlKToKKyAgICAgICAga2V5ID0gc2VsZi5pbnRrZXlfbWFwW2ludGtleV0KKyAgICAgICAgQmFzaWNTaGVsdmVUZXN0Q2FzZS5jaGVja3JlYyhzZWxmLCBrZXksIHZhbHVlKQorCisgICAgZGVmIHRlc3QwM19hcHBlbmQoc2VsZik6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwM19hcHBlbmQuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBzZWxmLmRbMV0gPSAnc3BhbScKKyAgICAgICAgc2VsZi5kWzVdID0gJ2VnZ3MnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNiwgc2VsZi5kLmFwcGVuZCgnc3BhbScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIHNlbGYuZC5hcHBlbmQoJ2Jha2VkIGJlYW5zJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NwYW0nLCBzZWxmLmQuZ2V0KDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzcGFtJywgc2VsZi5kLmdldCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYmFrZWQgYmVhbnMnLCBzZWxmLmQuZ2V0KDcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdlZ2dzJywgc2VsZi5kLmdldCg1KSkKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCU2hlbHZlVGVzdENhc2UpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEJUcmVlU2hlbHZlVGVzdENhc2UpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEhhc2hTaGVsdmVUZXN0Q2FzZSkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoVGhyZWFkQlRyZWVTaGVsdmVUZXN0Q2FzZSkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoVGhyZWFkSGFzaFNoZWx2ZVRlc3RDYXNlKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShFbnZCVHJlZVNoZWx2ZVRlc3RDYXNlKSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShFbnZIYXNoU2hlbHZlVGVzdENhc2UpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEVudlRocmVhZEJUcmVlU2hlbHZlVGVzdENhc2UpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEVudlRocmVhZEhhc2hTaGVsdmVUZXN0Q2FzZSkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoUmVjTm9TaGVsdmVUZXN0Q2FzZSkpCisKKyAgICByZXR1cm4gc3VpdGUKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3Rlc3Rfc3VpdGUnKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfZGJ0YWJsZXMucHkgYi9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9kYnRhYmxlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjMxMzgxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfZGJ0YWJsZXMucHkKQEAgLTAsMCArMSw0MDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEEgdGVzdCBzdWl0ZSBmb3IgdGhlIHRhYmxlIGludGVyZmFjZSBidWlsdCBvbiBic2RkYi5kYgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSBieSBBdXRvbm9tb3VzIFpvbmUgSW5kdXN0cmllcworIyBDb3B5cmlnaHQgKEMpIDIwMDIgR3JlZ29yeSBQLiBTbWl0aAorIworIyBNYXJjaCAyMCwgMjAwMAorIworIyBMaWNlbnNlOiAgICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZS4gIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorIyAgICAgICAgICAgICAgIHB1cnBvc2UgaW5jbHVkaW5nIG1vZGlmaWNhdGlvbi9yZWRpc3RyaWJ1dGlvbiwgc28gbG9uZyBhcworIyAgICAgICAgICAgICAgIHRoaXMgaGVhZGVyIHJlbWFpbnMgaW50YWN0IGFuZCB0aGF0IHlvdSBkbyBub3QgY2xhaW0gYW55CisjICAgICAgICAgICAgICAgcmlnaHRzIG9mIG93bmVyc2hpcCBvciBhdXRob3JzaGlwIG9mIHRoaXMgc29mdHdhcmUuICBUaGlzCisjICAgICAgICAgICAgICAgc29mdHdhcmUgaGFzIGJlZW4gdGVzdGVkLCBidXQgbm8gd2FycmFudHkgaXMgZXhwcmVzc2VkIG9yCisjICAgICAgICAgICAgICAgaW1wbGllZC4KKyMKKyMgICAtLSAgR3JlZ29yeSBQLiBTbWl0aCA8Z3JlZ0BrcnlwdG8ub3JnPgorIworIyAkSWQkCisKK2ltcG9ydCBvcywgcmUsIHN5cworCitpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgY1BpY2tsZQorICAgICAgICBwaWNrbGUgPSBjUGlja2xlCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBpbXBvcnQgcGlja2xlCitlbHNlIDoKKyAgICBpbXBvcnQgcGlja2xlCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIGRidGFibGVzLCB0ZXN0X3N1cHBvcnQsIHZlcmJvc2UsIFwKKyAgICAgICAgZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoLCBnZXRfbmV3X2RhdGFiYXNlX3BhdGgKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGFibGVEQlRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkYl9uYW1lID0gJ3Rlc3QtdGFibGUuZGInCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA+PSAzIDoKKyAgICAgICAgICAgIGZyb20gdGVzdF9hbGwgaW1wb3J0IGRvX3Byb3h5X2RiX3B5M2sKKyAgICAgICAgICAgIHNlbGYuX2ZsYWdfcHJveHlfZGJfcHkzayA9IGRvX3Byb3h5X2RiX3B5M2soRmFsc2UpCisKKyAgICAgICAgc2VsZi50ZXN0SG9tZURpciA9IGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCgpCisgICAgICAgIHNlbGYudGRiID0gZGJ0YWJsZXMuYnNkVGFibGVEQigKKyAgICAgICAgICAgIGZpbGVuYW1lPSd0YWJsZXRlc3QuZGInLCBkYmhvbWU9c2VsZi50ZXN0SG9tZURpciwgY3JlYXRlPTEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYudGRiLmNsb3NlKCkKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdID49IDMgOgorICAgICAgICAgICAgZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZG9fcHJveHlfZGJfcHkzaworICAgICAgICAgICAgZG9fcHJveHlfZGJfcHkzayhzZWxmLl9mbGFnX3Byb3h5X2RiX3B5M2spCisgICAgICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUoc2VsZi50ZXN0SG9tZURpcikKKworICAgIGRlZiB0ZXN0MDEoc2VsZik6CisgICAgICAgIHRhYm5hbWUgPSAidGVzdDAxIgorICAgICAgICBjb2xuYW1lID0gJ2Nvb2wgbnVtYmVycycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi50ZGIuRHJvcCh0YWJuYW1lKQorICAgICAgICBleGNlcHQgZGJ0YWJsZXMuVGFibGVEQkVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLnRkYi5DcmVhdGVUYWJsZSh0YWJuYW1lLCBbY29sbmFtZV0pCisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgorICAgICAgICAgICAgc2VsZi50ZGIuSW5zZXJ0KHRhYm5hbWUsIHtjb2xuYW1lOiBwaWNrbGUuZHVtcHMoMy4xNDE1OSwgMSl9KQorICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgIHNlbGYudGRiLkluc2VydCh0YWJuYW1lLCB7Y29sbmFtZTogcGlja2xlLmR1bXBzKDMuMTQxNTksCisgICAgICAgICAgICAgICAgMSkuZGVjb2RlKCJpc284ODU5LTEiKX0pICAjIDggYml0cworCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBzZWxmLnRkYi5fZGJfcHJpbnQoKQorCisgICAgICAgIHZhbHVlcyA9IHNlbGYudGRiLlNlbGVjdCgKKyAgICAgICAgICAgIHRhYm5hbWUsIFtjb2xuYW1lXSwgY29uZGl0aW9ucz17Y29sbmFtZTogTm9uZX0pCisKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgICAgICAgICBjb2x2YWwgPSBwaWNrbGUubG9hZHModmFsdWVzWzBdW2NvbG5hbWVdKQorICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgIGNvbHZhbCA9IHBpY2tsZS5sb2FkcyhieXRlcyh2YWx1ZXNbMF1bY29sbmFtZV0sICJpc284ODU5LTEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbHZhbCA+IDMuMTQxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sdmFsIDwgMy4xNDIpCisKKworICAgIGRlZiB0ZXN0MDIoc2VsZik6CisgICAgICAgIHRhYm5hbWUgPSAidGVzdDAyIgorICAgICAgICBjb2wwID0gJ2Nvb2xuZXNzIGZhY3RvcicKKyAgICAgICAgY29sMSA9ICdidXQgY2FuIGl0IGZseT8nCisgICAgICAgIGNvbDIgPSAnU3BlY2llcycKKworICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKKyAgICAgICAgICAgIHRlc3RpbmZvID0gWworICAgICAgICAgICAgICAgIHtjb2wwOiBwaWNrbGUuZHVtcHMoOCwgMSksIGNvbDE6ICdubycsIGNvbDI6ICdQZW5ndWluJ30sCisgICAgICAgICAgICAgICAge2NvbDA6IHBpY2tsZS5kdW1wcygtMSwgMSksIGNvbDE6ICdubycsIGNvbDI6ICdUdXJrZXknfSwKKyAgICAgICAgICAgICAgICB7Y29sMDogcGlja2xlLmR1bXBzKDksIDEpLCBjb2wxOiAneWVzJywgY29sMjogJ1NSLTcxQSBCbGFja2JpcmQnfQorICAgICAgICAgICAgXQorICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgIHRlc3RpbmZvID0gWworICAgICAgICAgICAgICAgIHtjb2wwOiBwaWNrbGUuZHVtcHMoOCwgMSkuZGVjb2RlKCJpc284ODU5LTEiKSwKKyAgICAgICAgICAgICAgICAgICAgY29sMTogJ25vJywgY29sMjogJ1Blbmd1aW4nfSwKKyAgICAgICAgICAgICAgICB7Y29sMDogcGlja2xlLmR1bXBzKC0xLCAxKS5kZWNvZGUoImlzbzg4NTktMSIpLAorICAgICAgICAgICAgICAgICAgICBjb2wxOiAnbm8nLCBjb2wyOiAnVHVya2V5J30sCisgICAgICAgICAgICAgICAge2NvbDA6IHBpY2tsZS5kdW1wcyg5LCAxKS5kZWNvZGUoImlzbzg4NTktMSIpLAorICAgICAgICAgICAgICAgICAgICBjb2wxOiAneWVzJywgY29sMjogJ1NSLTcxQSBCbGFja2JpcmQnfQorICAgICAgICAgICAgXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYudGRiLkRyb3AodGFibmFtZSkKKyAgICAgICAgZXhjZXB0IGRidGFibGVzLlRhYmxlREJFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi50ZGIuQ3JlYXRlVGFibGUodGFibmFtZSwgW2NvbDAsIGNvbDEsIGNvbDJdKQorICAgICAgICBmb3Igcm93IGluIHRlc3RpbmZvIDoKKyAgICAgICAgICAgIHNlbGYudGRiLkluc2VydCh0YWJuYW1lLCByb3cpCisKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgICAgICAgICB2YWx1ZXMgPSBzZWxmLnRkYi5TZWxlY3QodGFibmFtZSwgW2NvbDJdLAorICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM9e2NvbDA6IGxhbWJkYSB4OiBwaWNrbGUubG9hZHMoeCkgPj0gOH0pCisgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgdmFsdWVzID0gc2VsZi50ZGIuU2VsZWN0KHRhYm5hbWUsIFtjb2wyXSwKKyAgICAgICAgICAgICAgICBjb25kaXRpb25zPXtjb2wwOiBsYW1iZGEgeDoKKyAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKGJ5dGVzKHgsICJpc284ODU5LTEiKSkgPj0gOH0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWVzKSwgMikKKyAgICAgICAgaWYgdmFsdWVzWzBdWydTcGVjaWVzJ10gPT0gJ1Blbmd1aW4nIDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzFdWydTcGVjaWVzJ10sICdTUi03MUEgQmxhY2tiaXJkJykKKyAgICAgICAgZWxpZiB2YWx1ZXNbMF1bJ1NwZWNpZXMnXSA9PSAnU1ItNzFBIEJsYWNrYmlyZCcgOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMV1bJ1NwZWNpZXMnXSwgJ1Blbmd1aW4nKQorICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgInZhbHVlcz0gJXIiICUgKHZhbHVlcywpCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIldyb25nIHZhbHVlcyByZXR1cm5lZCEiKQorCisgICAgZGVmIHRlc3QwMyhzZWxmKToKKyAgICAgICAgdGFibmFtZSA9ICJ0ZXN0MDMiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYudGRiLkRyb3AodGFibmFtZSkKKyAgICAgICAgZXhjZXB0IGRidGFibGVzLlRhYmxlREJFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICcuLi5iZWZvcmUgQ3JlYXRlVGFibGUuLi4nCisgICAgICAgICAgICBzZWxmLnRkYi5fZGJfcHJpbnQoKQorICAgICAgICBzZWxmLnRkYi5DcmVhdGVUYWJsZSh0YWJuYW1lLCBbJ2EnLCAnYicsICdjJywgJ2QnLCAnZSddKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJy4uLmFmdGVyIENyZWF0ZVRhYmxlLi4uJworICAgICAgICAgICAgc2VsZi50ZGIuX2RiX3ByaW50KCkKKyAgICAgICAgc2VsZi50ZGIuRHJvcCh0YWJuYW1lKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJy4uLmFmdGVyIERyb3AuLi4nCisgICAgICAgICAgICBzZWxmLnRkYi5fZGJfcHJpbnQoKQorICAgICAgICBzZWxmLnRkYi5DcmVhdGVUYWJsZSh0YWJuYW1lLCBbJ2EnLCAnYicsICdjJywgJ2QnLCAnZSddKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYudGRiLkluc2VydCh0YWJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZSc6IHBpY2tsZS5kdW1wcyhbezQ6NSwgNjo3fSwgJ2ZvbyddLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2YnOiAiWmVybyJ9KQorICAgICAgICAgICAgc2VsZi5mYWlsKCdFeHBlY3RlZCBhbiBleGNlcHRpb24nKQorICAgICAgICBleGNlcHQgZGJ0YWJsZXMuVGFibGVEQkVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYudGRiLlNlbGVjdCh0YWJuYW1lLCBbXSwgY29uZGl0aW9ucz17J2Zvbyc6ICcxMjMnfSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnRXhwZWN0ZWQgYW4gZXhjZXB0aW9uJykKKyAgICAgICAgZXhjZXB0IGRidGFibGVzLlRhYmxlREJFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLnRkYi5JbnNlcnQodGFibmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICc0MicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2InOiAiYmFkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYyc6ICJtZWVwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZSc6ICdGdXp6eSB3dXp6eSB3YXMgYSBiZWFyJ30pCisgICAgICAgIHNlbGYudGRiLkluc2VydCh0YWJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogJzU4MTc1MCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2InOiAiZ29vZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2QnOiAiYmxhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYyc6ICJibGFjayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2UnOiAnZnV6enkgd2FzIGhlcmUnfSkKKyAgICAgICAgc2VsZi50ZGIuSW5zZXJ0KHRhYm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAnODAwMDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYic6ICJnb29kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZCc6ICJibGEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICdjJzogImJsYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZSc6ICdGdXp6eSB3dXp6eSBpcyBhIGJlYXInfSkKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgc2VsZi50ZGIuX2RiX3ByaW50KCkKKworICAgICAgICAjIHRoaXMgc2hvdWxkIHJldHVybiB0d28gcm93cworICAgICAgICB2YWx1ZXMgPSBzZWxmLnRkYi5TZWxlY3QodGFibmFtZSwgWydiJywgJ2EnLCAnZCddLAorICAgICAgICAgICAgY29uZGl0aW9ucz17J2UnOiByZS5jb21waWxlKCd3dXp6eScpLnNlYXJjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICdhJzogcmUuY29tcGlsZSgnXlswLTldKyQnKS5tYXRjaH0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZhbHVlcyksIDIpCisKKyAgICAgICAgIyBub3cgbGV0cyBkZWxldGUgb25lIG9mIHRoZW0gYW5kIHRyeSBhZ2FpbgorICAgICAgICBzZWxmLnRkYi5EZWxldGUodGFibmFtZSwgY29uZGl0aW9ucz17J2InOiBkYnRhYmxlcy5FeGFjdENvbmQoJ2dvb2QnKX0pCisgICAgICAgIHZhbHVlcyA9IHNlbGYudGRiLlNlbGVjdCgKKyAgICAgICAgICAgIHRhYm5hbWUsIFsnYScsICdkJywgJ2InXSwKKyAgICAgICAgICAgIGNvbmRpdGlvbnM9eydlJzogZGJ0YWJsZXMuUHJlZml4Q29uZCgnRnV6enknKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZhbHVlcyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzBdWydkJ10sIE5vbmUpCisKKyAgICAgICAgdmFsdWVzID0gc2VsZi50ZGIuU2VsZWN0KHRhYm5hbWUsIFsnYiddLAorICAgICAgICAgICAgY29uZGl0aW9ucz17J2MnOiBsYW1iZGEgYzogYyA9PSAnbWVlcCd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2YWx1ZXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1swXVsnYiddLCAiYmFkIikKKworCisgICAgZGVmIHRlc3QwNF9NdWx0aUNvbmRTZWxlY3Qoc2VsZik6CisgICAgICAgIHRhYm5hbWUgPSAidGVzdDA0X011bHRpQ29uZFNlbGVjdCIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi50ZGIuRHJvcCh0YWJuYW1lKQorICAgICAgICBleGNlcHQgZGJ0YWJsZXMuVGFibGVEQkVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLnRkYi5DcmVhdGVUYWJsZSh0YWJuYW1lLCBbJ2EnLCAnYicsICdjJywgJ2QnLCAnZSddKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYudGRiLkluc2VydCh0YWJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZSc6IHBpY2tsZS5kdW1wcyhbezQ6NSwgNjo3fSwgJ2ZvbyddLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2YnOiAiWmVybyJ9KQorICAgICAgICAgICAgc2VsZi5mYWlsKCdFeHBlY3RlZCBhbiBleGNlcHRpb24nKQorICAgICAgICBleGNlcHQgZGJ0YWJsZXMuVGFibGVEQkVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYudGRiLkluc2VydCh0YWJuYW1lLCB7J2EnOiAiQSIsICdiJzogIkIiLCAnYyc6ICJDIiwgJ2QnOiAiRCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2UnOiAiRSJ9KQorICAgICAgICBzZWxmLnRkYi5JbnNlcnQodGFibmFtZSwgeydhJzogIi1BIiwgJ2InOiAiLUIiLCAnYyc6ICItQyIsICdkJzogIi1EIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZSc6ICItRSJ9KQorICAgICAgICBzZWxmLnRkYi5JbnNlcnQodGFibmFtZSwgeydhJzogIkEtIiwgJ2InOiAiQi0iLCAnYyc6ICJDLSIsICdkJzogIkQtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZSc6ICJFLSJ9KQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBzZWxmLnRkYi5fZGJfcHJpbnQoKQorCisgICAgICAgICMgVGhpcyBzZWxlY3Qgc2hvdWxkIHJldHVybiAwIHJvd3MuICBpdCBpcyBkZXNpZ25lZCB0byB0ZXN0CisgICAgICAgICMgdGhlIGJ1ZyBpZGVudGlmaWVkIGFuZCBmaXhlZCBpbiBzb3VyY2Vmb3JnZSBidWcgIyA1OTA0NDkKKyAgICAgICAgIyAoQmlnIFRoYW5rcyB0byAiUm9iIFRpbGxvdHNvbiAobjltdGIpIiBmb3IgdHJhY2tpbmcgdGhpcyBkb3duCisgICAgICAgICMgYW5kIHN1cHBseWluZyBhIGZpeCEhICBUaGlzIG9uZSBjYXVzZWQgbWFueSBoZWFkYWNoZXMgdG8gc2F5CisgICAgICAgICMgdGhlIGxlYXN0Li4uKQorICAgICAgICB2YWx1ZXMgPSBzZWxmLnRkYi5TZWxlY3QodGFibmFtZSwgWydiJywgJ2EnLCAnZCddLAorICAgICAgICAgICAgY29uZGl0aW9ucz17J2UnOiBkYnRhYmxlcy5FeGFjdENvbmQoJ0UnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdhJzogZGJ0YWJsZXMuRXhhY3RDb25kKCdBJyksCisgICAgICAgICAgICAgICAgICAgICAgICAnZCc6IGRidGFibGVzLlByZWZpeENvbmQoJy0nKQorICAgICAgICAgICAgICAgICAgICAgICB9ICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWVzKSwgMCwgdmFsdWVzKQorCisKKyAgICBkZWYgdGVzdF9DcmVhdGVPckV4dGVuZChzZWxmKToKKyAgICAgICAgdGFibmFtZSA9ICJ0ZXN0X0NyZWF0ZU9yRXh0ZW5kIgorCisgICAgICAgIHNlbGYudGRiLkNyZWF0ZU9yRXh0ZW5kVGFibGUoCisgICAgICAgICAgICB0YWJuYW1lLCBbJ25hbWUnLCAndGFzdGUnLCAnZmlsbGluZycsICdhbGNvaG9sIGNvbnRlbnQnLCAncHJpY2UnXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi50ZGIuSW5zZXJ0KHRhYm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyd0YXN0ZSc6ICdjcmFwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGxpbmcnOiAnbm8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMgaXQgR3Vpbm5lc3M/JzogJ25vJ30pCisgICAgICAgICAgICBzZWxmLmZhaWwoIkluc2VydCBzaG91bGQndmUgZmFpbGVkIGR1ZSB0byBiYWQgY29sdW1uIG5hbWUiKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYudGRiLkNyZWF0ZU9yRXh0ZW5kVGFibGUodGFibmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ25hbWUnLCAndGFzdGUnLCAnaXMgaXQgR3Vpbm5lc3M/J10pCisKKyAgICAgICAgIyB0aGVzZSBzaG91bGQgYm90aCBzdWNjZWVkIGFzIHRoZSB0YWJsZSBzaG91bGQgY29udGFpbiB0aGUgdW5pb24gb2YgYm90aCBzZXRzIG9mIGNvbHVtbnMuCisgICAgICAgIHNlbGYudGRiLkluc2VydCh0YWJuYW1lLCB7J3Rhc3RlJzogJ2NyYXAnLCAnZmlsbGluZyc6ICdubycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzIGl0IEd1aW5uZXNzPyc6ICdubyd9KQorICAgICAgICBzZWxmLnRkYi5JbnNlcnQodGFibmFtZSwgeyd0YXN0ZSc6ICdncmVhdCcsICdmaWxsaW5nJzogJ3llcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzIGl0IEd1aW5uZXNzPyc6ICd5ZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lJzogJ0d1aW5uZXNzJ30pCisKKworICAgIGRlZiB0ZXN0X0NvbmRPYmpzKHNlbGYpOgorICAgICAgICB0YWJuYW1lID0gInRlc3RfQ29uZE9ianMiCisKKyAgICAgICAgc2VsZi50ZGIuQ3JlYXRlVGFibGUodGFibmFtZSwgWydhJywgJ2InLCAnYycsICdkJywgJ2UnLCAncCddKQorCisgICAgICAgIHNlbGYudGRiLkluc2VydCh0YWJuYW1lLCB7J2EnOiAidGhlIGxldHRlciBBIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYic6ICJ0aGUgbGV0dGVyIEIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjJzogImlzIGZvciBjb29raWUifSkKKyAgICAgICAgc2VsZi50ZGIuSW5zZXJ0KHRhYm5hbWUsIHsnYSc6ICJpcyBmb3IgYWFyZHZhcmsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlJzogInRoZSBsZXR0ZXIgRSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2MnOiAiaXMgZm9yIGNvb2tpZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2QnOiAiaXMgZm9yIGRvZyJ9KQorICAgICAgICBzZWxmLnRkYi5JbnNlcnQodGFibmFtZSwgeydhJzogInRoZSBsZXR0ZXIgQSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2UnOiAidGhlIGxldHRlciBFIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYyc6ICJpcyBmb3IgY29va2llIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncCc6ICJpcyBmb3IgUHl0aG9uIn0pCisKKyAgICAgICAgdmFsdWVzID0gc2VsZi50ZGIuU2VsZWN0KAorICAgICAgICAgICAgdGFibmFtZSwgWydwJywgJ2UnXSwKKyAgICAgICAgICAgIGNvbmRpdGlvbnM9eydlJzogZGJ0YWJsZXMuUHJlZml4Q29uZCgndGhlIGwnKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZhbHVlcyksIDIsIHZhbHVlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMF1bJ2UnXSwgdmFsdWVzWzFdWydlJ10sIHZhbHVlcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh2YWx1ZXNbMF1bJ3AnXSwgdmFsdWVzWzFdWydwJ10sIHZhbHVlcykKKworICAgICAgICB2YWx1ZXMgPSBzZWxmLnRkYi5TZWxlY3QoCisgICAgICAgICAgICB0YWJuYW1lLCBbJ2QnLCAnYSddLAorICAgICAgICAgICAgY29uZGl0aW9ucz17J2EnOiBkYnRhYmxlcy5MaWtlQ29uZCgnJWFhcmR2YXJrJScpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWVzKSwgMSwgdmFsdWVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1swXVsnZCddLCAiaXMgZm9yIGRvZyIsIHZhbHVlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMF1bJ2EnXSwgImlzIGZvciBhYXJkdmFyayIsIHZhbHVlcykKKworICAgICAgICB2YWx1ZXMgPSBzZWxmLnRkYi5TZWxlY3QodGFibmFtZSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYic6IGRidGFibGVzLkNvbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZSc6ZGJ0YWJsZXMuTGlrZUNvbmQoJyVsZXR0ZXIlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2EnOmRidGFibGVzLlByZWZpeENvbmQoJ2lzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2QnOmRidGFibGVzLkV4YWN0Q29uZCgnaXMgZm9yIGRvZycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjJzpkYnRhYmxlcy5QcmVmaXhDb25kKCdpcyBmb3InKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncCc6bGFtYmRhIHM6IG5vdCBzfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWVzKSwgMSwgdmFsdWVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1swXVsnZCddLCAiaXMgZm9yIGRvZyIsIHZhbHVlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMF1bJ2EnXSwgImlzIGZvciBhYXJkdmFyayIsIHZhbHVlcykKKworICAgIGRlZiB0ZXN0X0RlbGV0ZShzZWxmKToKKyAgICAgICAgdGFibmFtZSA9ICJ0ZXN0X0RlbGV0ZSIKKyAgICAgICAgc2VsZi50ZGIuQ3JlYXRlVGFibGUodGFibmFtZSwgWyd4JywgJ3knLCAneiddKQorCisgICAgICAgICMgcHJpb3IgdG8gMjAwMS0wNS0wOSB0aGVyZSB3YXMgYSBidWcgd2hlcmUgRGVsZXRlKCkgd291bGQKKyAgICAgICAgIyBmYWlsIGlmIGl0IGVuY291bnRlcmVkIGFueSByb3dzIHRoYXQgZGlkIG5vdCBoYXZlIHZhbHVlcyBpbgorICAgICAgICAjIGV2ZXJ5IGNvbHVtbi4KKyAgICAgICAgIyBIdW50ZWQgYW5kIFNxdWFzaGVkIGJ5IDxEb253dWxmZj4gKEp1a2thIFNhbnRhbGEgLSBkb253dWxmZkBuaWMuZmkpCisgICAgICAgIHNlbGYudGRiLkluc2VydCh0YWJuYW1lLCB7J3gnOiAnWDEnLCAneSc6J1kxJ30pCisgICAgICAgIHNlbGYudGRiLkluc2VydCh0YWJuYW1lLCB7J3gnOiAnWDInLCAneSc6J1kyJywgJ3onOiAnWjInfSkKKworICAgICAgICBzZWxmLnRkYi5EZWxldGUodGFibmFtZSwgY29uZGl0aW9ucz17J3gnOiBkYnRhYmxlcy5QcmVmaXhDb25kKCdYJyl9KQorICAgICAgICB2YWx1ZXMgPSBzZWxmLnRkYi5TZWxlY3QodGFibmFtZSwgWyd5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25zPXsneCc6IGRidGFibGVzLlByZWZpeENvbmQoJ1gnKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZhbHVlcyksIDApCisKKyAgICBkZWYgdGVzdF9Nb2RpZnkoc2VsZik6CisgICAgICAgIHRhYm5hbWUgPSAidGVzdF9Nb2RpZnkiCisgICAgICAgIHNlbGYudGRiLkNyZWF0ZVRhYmxlKHRhYm5hbWUsIFsnTmFtZScsICdUeXBlJywgJ0FjY2VzcyddKQorCisgICAgICAgIHNlbGYudGRiLkluc2VydCh0YWJuYW1lLCB7J05hbWUnOiAnSW5kZXggdG8gTVAzIGZpbGVzLmRvYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1R5cGUnOiAnV29yZCcsICdBY2Nlc3MnOiAnOCd9KQorICAgICAgICBzZWxmLnRkYi5JbnNlcnQodGFibmFtZSwgeydOYW1lJzogJ05pZnR5Lk1QMycsICdBY2Nlc3MnOiAnMSd9KQorICAgICAgICBzZWxmLnRkYi5JbnNlcnQodGFibmFtZSwgeydUeXBlJzogJ1Vua25vd24nLCAnQWNjZXNzJzogJzAnfSkKKworICAgICAgICBkZWYgc2V0X3R5cGUodHlwZSk6CisgICAgICAgICAgICBpZiB0eXBlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuICdNUDMnCisgICAgICAgICAgICByZXR1cm4gdHlwZQorCisgICAgICAgIGRlZiBpbmNyZW1lbnRfYWNjZXNzKGNvdW50KToKKyAgICAgICAgICAgIHJldHVybiBzdHIoaW50KGNvdW50KSsxKQorCisgICAgICAgIGRlZiByZW1vdmVfdmFsdWUodmFsdWUpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBzZWxmLnRkYi5Nb2RpZnkodGFibmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM9eydBY2Nlc3MnOiBkYnRhYmxlcy5FeGFjdENvbmQoJzAnKX0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5ncz17J0FjY2Vzcyc6IHJlbW92ZV92YWx1ZX0pCisgICAgICAgIHNlbGYudGRiLk1vZGlmeSh0YWJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9ucz17J05hbWUnOiBkYnRhYmxlcy5MaWtlQ29uZCgnJU1QMyUnKX0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5ncz17J1R5cGUnOiBzZXRfdHlwZX0pCisgICAgICAgIHNlbGYudGRiLk1vZGlmeSh0YWJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9ucz17J05hbWUnOiBkYnRhYmxlcy5MaWtlQ29uZCgnJScpfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdzPXsnQWNjZXNzJzogaW5jcmVtZW50X2FjY2Vzc30pCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi50ZGIuTW9kaWZ5KHRhYm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9ucz17J05hbWUnOiBkYnRhYmxlcy5MaWtlQ29uZCgnJScpfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5ncz17J0FjY2Vzcyc6ICdXaGF0IGlzIHlvdXIgcXVlc3Q/J30pCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAjIHN1Y2Nlc3MsIHRoZSBzdHJpbmcgdmFsdWUgaW4gbWFwcGluZ3MgaXNuJ3QgY2FsbGFibGUKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIndoeSB3YXMgVHlwZUVycm9yIG5vdCByYWlzZWQgZm9yIGJhZCBjYWxsYWJsZT8iCisKKyAgICAgICAgIyBEZWxldGUga2V5IGluIHNlbGVjdCBjb25kaXRpb25zCisgICAgICAgIHZhbHVlcyA9IHNlbGYudGRiLlNlbGVjdCgKKyAgICAgICAgICAgIHRhYm5hbWUsIE5vbmUsCisgICAgICAgICAgICBjb25kaXRpb25zPXsnVHlwZSc6IGRidGFibGVzLkV4YWN0Q29uZCgnVW5rbm93bicpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWVzKSwgMSwgdmFsdWVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1swXVsnTmFtZSddLCBOb25lLCB2YWx1ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzBdWydBY2Nlc3MnXSwgTm9uZSwgdmFsdWVzKQorCisgICAgICAgICMgTW9kaWZ5IHZhbHVlIGJ5IHNlbGVjdCBjb25kaXRpb25zCisgICAgICAgIHZhbHVlcyA9IHNlbGYudGRiLlNlbGVjdCgKKyAgICAgICAgICAgIHRhYm5hbWUsIE5vbmUsCisgICAgICAgICAgICBjb25kaXRpb25zPXsnTmFtZSc6IGRidGFibGVzLkV4YWN0Q29uZCgnTmlmdHkuTVAzJyl9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2YWx1ZXMpLCAxLCB2YWx1ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzBdWydUeXBlJ10sICJNUDMiLCB2YWx1ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzBdWydBY2Nlc3MnXSwgIjIiLCB2YWx1ZXMpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgY2hhbmdlIGFwcGxpZWQgb25seSB0byBzZWxlY3QgY29uZGl0aW9ucworICAgICAgICB2YWx1ZXMgPSBzZWxmLnRkYi5TZWxlY3QoCisgICAgICAgICAgICB0YWJuYW1lLCBOb25lLCBjb25kaXRpb25zPXsnTmFtZSc6IGRidGFibGVzLkxpa2VDb25kKCclZG9jJScpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWVzKSwgMSwgdmFsdWVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1swXVsnVHlwZSddLCAiV29yZCIsIHZhbHVlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMF1bJ0FjY2VzcyddLCAiOSIsIHZhbHVlcykKKworCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShUYWJsZURCVGVzdENhc2UpKQorICAgIHJldHVybiBzdWl0ZQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0ndGVzdF9zdWl0ZScpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9kaXN0cmlidXRlZF90cmFuc2FjdGlvbnMucHkgYi9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9kaXN0cmlidXRlZF90cmFuc2FjdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1ODU3NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2Rpc3RyaWJ1dGVkX3RyYW5zYWN0aW9ucy5weQpAQCAtMCwwICsxLDE1MiBAQAorIiIiVGVzdENhc2VzIGZvciBkaXN0cmlidXRlZCB0cmFuc2FjdGlvbnMuCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIHRlc3Rfc3VwcG9ydCwgZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoLCBcCisgICAgICAgIGdldF9uZXdfZGF0YWJhc2VfcGF0aAorCitmcm9tIHRlc3RfYWxsIGltcG9ydCB2ZXJib3NlCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIERCVHhuX2Rpc3RyaWJ1dGVkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBudW1fdHhucz0xMjM0CisgICAgbm9zeW5jPVRydWUKKyAgICBtdXN0X29wZW5fZGI9RmFsc2UKKyAgICBkZWYgX2NyZWF0ZV9lbnYoc2VsZiwgbXVzdF9vcGVuX2RiKSA6CisgICAgICAgIHNlbGYuZGJlbnYgPSBkYi5EQkVudigpCisgICAgICAgIHNlbGYuZGJlbnYuc2V0X3R4X21heChzZWxmLm51bV90eG5zKQorICAgICAgICBzZWxmLmRiZW52LnNldF9sa19tYXhfbG9ja2VycyhzZWxmLm51bV90eG5zKjIpCisgICAgICAgIHNlbGYuZGJlbnYuc2V0X2xrX21heF9sb2NrcyhzZWxmLm51bV90eG5zKjIpCisgICAgICAgIHNlbGYuZGJlbnYuc2V0X2xrX21heF9vYmplY3RzKHNlbGYubnVtX3R4bnMqMikKKyAgICAgICAgaWYgc2VsZi5ub3N5bmMgOgorICAgICAgICAgICAgc2VsZi5kYmVudi5zZXRfZmxhZ3MoZGIuREJfVFhOX05PU1lOQyxUcnVlKQorICAgICAgICBzZWxmLmRiZW52Lm9wZW4oc2VsZi5ob21lRGlyLCBkYi5EQl9DUkVBVEUgfCBkYi5EQl9USFJFQUQgfAorICAgICAgICAgICAgICAgIGRiLkRCX1JFQ09WRVIgfAorICAgICAgICAgICAgICAgIGRiLkRCX0lOSVRfVFhOIHwgZGIuREJfSU5JVF9MT0cgfCBkYi5EQl9JTklUX01QT09MIHwKKyAgICAgICAgICAgICAgICBkYi5EQl9JTklUX0xPQ0ssIDA2NjYpCisgICAgICAgIHNlbGYuZGIgPSBkYi5EQihzZWxmLmRiZW52KQorICAgICAgICBzZWxmLmRiLnNldF9yZV9sZW4oZGIuREJfR0lEX1NJWkUpCisgICAgICAgIGlmIG11c3Rfb3Blbl9kYiA6CisgICAgICAgICAgICB0eG49c2VsZi5kYmVudi50eG5fYmVnaW4oKQorICAgICAgICAgICAgc2VsZi5kYi5vcGVuKHNlbGYuZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgIGRiLkRCX1FVRVVFLCBkYi5EQl9DUkVBVEUgfCBkYi5EQl9USFJFQUQsIDA2NjYsCisgICAgICAgICAgICAgICAgICAgIHR4bj10eG4pCisgICAgICAgICAgICB0eG4uY29tbWl0KCkKKworICAgIGRlZiBzZXRVcChzZWxmKSA6CisgICAgICAgIHNlbGYuaG9tZURpciA9IGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCgpCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSAidGVzdCIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NyZWF0ZV9lbnYobXVzdF9vcGVuX2RiPVRydWUpCisKKyAgICBkZWYgX2Rlc3Ryb3lfZW52KHNlbGYpOgorICAgICAgICBpZiBzZWxmLm5vc3luYyBvciAoZGIudmVyc2lvbigpWzoyXSA9PSAoNCw2KSk6ICAjIEtub3duIGJ1ZworICAgICAgICAgICAgc2VsZi5kYmVudi5sb2dfZmx1c2goKQorICAgICAgICBzZWxmLmRiLmNsb3NlKCkKKyAgICAgICAgc2VsZi5kYmVudi5jbG9zZSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuX2Rlc3Ryb3lfZW52KCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJtdHJlZShzZWxmLmhvbWVEaXIpCisKKyAgICBkZWYgX3JlY3JlYXRlX2VudihzZWxmLG11c3Rfb3Blbl9kYikgOgorICAgICAgICBzZWxmLl9kZXN0cm95X2VudigpCisgICAgICAgIHNlbGYuX2NyZWF0ZV9lbnYobXVzdF9vcGVuX2RiKQorCisgICAgZGVmIHRlc3QwMV9kaXN0cmlidXRlZF90cmFuc2FjdGlvbnMoc2VsZikgOgorICAgICAgICB0eG5zPXNldCgpCisgICAgICAgIGFkYXB0ID0gbGFtYmRhIHggOiB4CisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA+PSAzIDoKKyAgICAgICAgICAgIGFkYXB0ID0gbGFtYmRhIHggOiBieXRlcyh4LCAiYXNjaWkiKQorICAgICMgQ3JlYXRlIHRyYW5zYWN0aW9ucywgInByZXBhcmUiIHRoZW0sIGFuZAorICAgICMgbGV0IHRoZW0gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuCisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLm51bV90eG5zKSA6CisgICAgICAgICAgICB0eG4gPSBzZWxmLmRiZW52LnR4bl9iZWdpbigpCisgICAgICAgICAgICBnaWQgPSAiJSUlZGQiICVkYi5EQl9HSURfU0laRQorICAgICAgICAgICAgZ2lkID0gYWRhcHQoZ2lkICVpKQorICAgICAgICAgICAgc2VsZi5kYi5wdXQoaSwgZ2lkLCB0eG49dHhuLCBmbGFncz1kYi5EQl9BUFBFTkQpCisgICAgICAgICAgICB0eG5zLmFkZChnaWQpCisgICAgICAgICAgICB0eG4ucHJlcGFyZShnaWQpCisgICAgICAgIGRlbCB0eG4KKworICAgICAgICBzZWxmLl9yZWNyZWF0ZV9lbnYoc2VsZi5tdXN0X29wZW5fZGIpCisKKyAgICAjIEdldCAidG8gYmUgcmVjb3ZlcmVkIiB0cmFuc2FjdGlvbnMgYnV0CisgICAgIyBsZXQgdGhlbSBiZSBnYXJiYWdlIGNvbGxlY3RlZC4KKyAgICAgICAgcmVjb3ZlcmVkX3R4bnM9c2VsZi5kYmVudi50eG5fcmVjb3ZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5udW1fdHhucyxsZW4ocmVjb3ZlcmVkX3R4bnMpKQorICAgICAgICBmb3IgZ2lkLHR4biBpbiByZWNvdmVyZWRfdHhucyA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2lkIGluIHR4bnMpCisgICAgICAgIGRlbCB0eG4KKyAgICAgICAgZGVsIHJlY292ZXJlZF90eG5zCisKKyAgICAgICAgc2VsZi5fcmVjcmVhdGVfZW52KHNlbGYubXVzdF9vcGVuX2RiKQorCisgICAgIyBHZXQgInRvIGJlIHJlY292ZXJlZCIgdHJhbnNhY3Rpb25zLiBDb21taXQsIGFib3J0IGFuZAorICAgICMgZGlzY2FyZCB0aGVtLgorICAgICAgICByZWNvdmVyZWRfdHhucz1zZWxmLmRiZW52LnR4bl9yZWNvdmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm51bV90eG5zLGxlbihyZWNvdmVyZWRfdHhucykpCisgICAgICAgIGRpc2NhcmRfdHhucz1zZXQoKQorICAgICAgICBjb21taXR0ZWRfdHhucz1zZXQoKQorICAgICAgICBzdGF0ZT0wCisgICAgICAgIGZvciBnaWQsdHhuIGluIHJlY292ZXJlZF90eG5zIDoKKyAgICAgICAgICAgIGlmIHN0YXRlPT0wIG9yIHN0YXRlPT0xOgorICAgICAgICAgICAgICAgIGNvbW1pdHRlZF90eG5zLmFkZChnaWQpCisgICAgICAgICAgICAgICAgdHhuLmNvbW1pdCgpCisgICAgICAgICAgICBlbGlmIHN0YXRlPT0yIDoKKyAgICAgICAgICAgICAgICB0eG4uYWJvcnQoKQorICAgICAgICAgICAgZWxpZiBzdGF0ZT09MyA6CisgICAgICAgICAgICAgICAgdHhuLmRpc2NhcmQoKQorICAgICAgICAgICAgICAgIGRpc2NhcmRfdHhucy5hZGQoZ2lkKQorICAgICAgICAgICAgICAgIHN0YXRlPS0xCisgICAgICAgICAgICBzdGF0ZSs9MQorICAgICAgICBkZWwgdHhuCisgICAgICAgIGRlbCByZWNvdmVyZWRfdHhucworCisgICAgICAgIHNlbGYuX3JlY3JlYXRlX2VudihzZWxmLm11c3Rfb3Blbl9kYikKKworICAgICMgVmVyaWZ5IHRoZSBkaXNjYXJkZWQgdHJhbnNhY3Rpb25zIGFyZSBzdGlsbAorICAgICMgYXJvdW5kLCBhbmQgZGlzcG9zZSB0aGVtLgorICAgICAgICByZWNvdmVyZWRfdHhucz1zZWxmLmRiZW52LnR4bl9yZWNvdmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlzY2FyZF90eG5zKSxsZW4ocmVjb3ZlcmVkX3R4bnMpKQorICAgICAgICBmb3IgZ2lkLHR4biBpbiByZWNvdmVyZWRfdHhucyA6CisgICAgICAgICAgICB0eG4uYWJvcnQoKQorICAgICAgICBkZWwgdHhuCisgICAgICAgIGRlbCByZWNvdmVyZWRfdHhucworCisgICAgICAgIHNlbGYuX3JlY3JlYXRlX2VudihtdXN0X29wZW5fZGI9VHJ1ZSkKKworICAgICMgQmUgc3VyZSB0aGVyZSBhcmUgbm90IHBlbmRpbmcgdHJhbnNhY3Rpb25zLgorICAgICMgQ2hlY2sgYWxzbyBkYXRhYmFzZSBzaXplLgorICAgICAgICByZWNvdmVyZWRfdHhucz1zZWxmLmRiZW52LnR4bl9yZWNvdmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihyZWNvdmVyZWRfdHhucyk9PTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNvbW1pdHRlZF90eG5zKSxzZWxmLmRiLnN0YXQoKVsibmtleXMiXSkKKworY2xhc3MgREJUeG5fZGlzdHJpYnV0ZWRTWU5DKERCVHhuX2Rpc3RyaWJ1dGVkKToKKyAgICBub3N5bmM9RmFsc2UKKworY2xhc3MgREJUeG5fZGlzdHJpYnV0ZWRfbXVzdF9vcGVuX2RiKERCVHhuX2Rpc3RyaWJ1dGVkKToKKyAgICBtdXN0X29wZW5fZGI9VHJ1ZQorCitjbGFzcyBEQlR4bl9kaXN0cmlidXRlZFNZTkNfbXVzdF9vcGVuX2RiKERCVHhuX2Rpc3RyaWJ1dGVkKToKKyAgICBub3N5bmM9RmFsc2UKKyAgICBtdXN0X29wZW5fZGI9VHJ1ZQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsNSkgOgorICAgICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShEQlR4bl9kaXN0cmlidXRlZCkpCisgICAgICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCVHhuX2Rpc3RyaWJ1dGVkU1lOQykpCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LDYpIDoKKyAgICAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoREJUeG5fZGlzdHJpYnV0ZWRfbXVzdF9vcGVuX2RiKSkKKyAgICAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoREJUeG5fZGlzdHJpYnV0ZWRTWU5DX211c3Rfb3Blbl9kYikpCisgICAgcmV0dXJuIHN1aXRlCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSd0ZXN0X3N1aXRlJykKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2Vhcmx5X2Nsb3NlLnB5IGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfZWFybHlfY2xvc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkyNTI3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2Vhcmx5X2Nsb3NlLnB5CkBAIC0wLDAgKzEsMjE1IEBACisiIiJUZXN0Q2FzZXMgZm9yIGNoZWNraW5nIHRoYXQgaXQgZG9lcyBub3Qgc2VnZmF1bHQgd2hlbiBhIERCRW52IG9iamVjdAoraXMgY2xvc2VkIGJlZm9yZSBpdHMgREIgb2JqZWN0cy4KKyIiIgorCitpbXBvcnQgb3MsIHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdF9hbGwgaW1wb3J0IGRiLCB0ZXN0X3N1cHBvcnQsIHZlcmJvc2UsIGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCwgZ2V0X25ld19kYXRhYmFzZV9wYXRoCisKKyMgV2UncmUgZ29pbmcgdG8gZ2V0IHdhcm5pbmdzIGluIHRoaXMgbW9kdWxlIGFib3V0IHRyeWluZyB0byBjbG9zZSB0aGUgZGIgd2hlbgorIyBpdHMgZW52IGlzIGFscmVhZHkgY2xvc2VkLiAgTGV0J3MganVzdCBpZ25vcmUgdGhvc2UuCit0cnk6CisgICAgaW1wb3J0IHdhcm5pbmdzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygnaWdub3JlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSdEQiBjb3VsZCBub3QgYmUgY2xvc2VkIGluJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT1SdW50aW1lV2FybmluZykKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBEQkVudkNsb3NlZEVhcmx5Q3Jhc2godW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ob21lRGlyID0gZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoKCkKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9ICJ0ZXN0IgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucm10cmVlKHNlbGYuaG9tZURpcikKKworICAgIGRlZiB0ZXN0MDFfY2xvc2VfZGJlbnZfYmVmb3JlX2RiKHNlbGYpOgorICAgICAgICBkYmVudiA9IGRiLkRCRW52KCkKKyAgICAgICAgZGJlbnYub3BlbihzZWxmLmhvbWVEaXIsCisgICAgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9DREJ8IGRiLkRCX0NSRUFURSB8ZGIuREJfVEhSRUFEfGRiLkRCX0lOSVRfTVBPT0wsCisgICAgICAgICAgICAgICAgICAgMDY2NikKKworICAgICAgICBkID0gZGIuREIoZGJlbnYpCisgICAgICAgIGQyID0gZGIuREIoZGJlbnYpCisgICAgICAgIGQub3BlbihzZWxmLmZpbGVuYW1lLCBkYi5EQl9CVFJFRSwgZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFELCAwNjY2KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCTm9TdWNoRmlsZUVycm9yLCBkMi5vcGVuLAorICAgICAgICAgICAgICAgIHNlbGYuZmlsZW5hbWUrIjIiLCBkYi5EQl9CVFJFRSwgZGIuREJfVEhSRUFELCAwNjY2KQorCisgICAgICAgIGQucHV0KCJ0ZXN0IiwidGhpcyBpcyBhIHRlc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCJ0ZXN0IiksICJ0aGlzIGlzIGEgdGVzdCIsICJwdXQhPWdldCIpCisgICAgICAgIGRiZW52LmNsb3NlKCkgICMgVGhpcyAiY2xvc2UiIHNob3VsZCBjbG9zZSB0aGUgY2hpbGQgZGIgaGFuZGxlIGFsc28KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJFcnJvciwgZC5nZXQsICJ0ZXN0IikKKworICAgIGRlZiB0ZXN0MDJfY2xvc2VfZGJlbnZfYmVmb3JlX2RiY3Vyc29yKHNlbGYpOgorICAgICAgICBkYmVudiA9IGRiLkRCRW52KCkKKyAgICAgICAgZGJlbnYub3BlbihzZWxmLmhvbWVEaXIsCisgICAgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9DREJ8IGRiLkRCX0NSRUFURSB8ZGIuREJfVEhSRUFEfGRiLkRCX0lOSVRfTVBPT0wsCisgICAgICAgICAgICAgICAgICAgMDY2NikKKworICAgICAgICBkID0gZGIuREIoZGJlbnYpCisgICAgICAgIGQub3BlbihzZWxmLmZpbGVuYW1lLCBkYi5EQl9CVFJFRSwgZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFELCAwNjY2KQorCisgICAgICAgIGQucHV0KCJ0ZXN0IiwidGhpcyBpcyBhIHRlc3QiKQorICAgICAgICBkLnB1dCgidGVzdDIiLCJhbm90aGVyIHRlc3QiKQorICAgICAgICBkLnB1dCgidGVzdDMiLCJhbm90aGVyIG9uZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoInRlc3QiKSwgInRoaXMgaXMgYSB0ZXN0IiwgInB1dCE9Z2V0IikKKyAgICAgICAgYz1kLmN1cnNvcigpCisgICAgICAgIGMuZmlyc3QoKQorICAgICAgICBjLm5leHQoKQorICAgICAgICBkLmNsb3NlKCkgICMgVGhpcyAiY2xvc2UiIHNob3VsZCBjbG9zZSB0aGUgY2hpbGQgZGIgaGFuZGxlIGFsc28KKyAgICAgIyBkYi5jbG9zZSBzaG91bGQgY2xvc2UgdGhlIGNoaWxkIGN1cnNvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkVycm9yLGMubmV4dCkKKworICAgICAgICBkID0gZGIuREIoZGJlbnYpCisgICAgICAgIGQub3BlbihzZWxmLmZpbGVuYW1lLCBkYi5EQl9CVFJFRSwgZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFELCAwNjY2KQorICAgICAgICBjPWQuY3Vyc29yKCkKKyAgICAgICAgYy5maXJzdCgpCisgICAgICAgIGMubmV4dCgpCisgICAgICAgIGRiZW52LmNsb3NlKCkKKyAgICAjIFRoZSAiY2xvc2UiIHNob3VsZCBjbG9zZSB0aGUgY2hpbGQgZGIgaGFuZGxlIGFsc28sIHdpdGggY3Vyc29ycworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkVycm9yLCBjLm5leHQpCisKKyAgICBkZWYgdGVzdDAzX2Nsb3NlX2RiX2JlZm9yZV9kYmN1cnNvcl93aXRob3V0X2VudihzZWxmKToKKyAgICAgICAgaW1wb3J0IG9zLnBhdGgKKyAgICAgICAgcGF0aD1vcy5wYXRoLmpvaW4oc2VsZi5ob21lRGlyLHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGQgPSBkYi5EQigpCisgICAgICAgIGQub3BlbihwYXRoLCBkYi5EQl9CVFJFRSwgZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFELCAwNjY2KQorCisgICAgICAgIGQucHV0KCJ0ZXN0IiwidGhpcyBpcyBhIHRlc3QiKQorICAgICAgICBkLnB1dCgidGVzdDIiLCJhbm90aGVyIHRlc3QiKQorICAgICAgICBkLnB1dCgidGVzdDMiLCJhbm90aGVyIG9uZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoInRlc3QiKSwgInRoaXMgaXMgYSB0ZXN0IiwgInB1dCE9Z2V0IikKKyAgICAgICAgYz1kLmN1cnNvcigpCisgICAgICAgIGMuZmlyc3QoKQorICAgICAgICBjLm5leHQoKQorICAgICAgICBkLmNsb3NlKCkKKyAgICAjIFRoZSAiY2xvc2UiIHNob3VsZCBjbG9zZSB0aGUgY2hpbGQgZGIgaGFuZGxlIGFsc28KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJFcnJvciwgYy5uZXh0KQorCisgICAgZGVmIHRlc3QwNF9jbG9zZV9tYXNzaXZlKHNlbGYpOgorICAgICAgICBkYmVudiA9IGRiLkRCRW52KCkKKyAgICAgICAgZGJlbnYub3BlbihzZWxmLmhvbWVEaXIsCisgICAgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9DREJ8IGRiLkRCX0NSRUFURSB8ZGIuREJfVEhSRUFEfGRiLkRCX0lOSVRfTVBPT0wsCisgICAgICAgICAgICAgICAgICAgMDY2NikKKworICAgICAgICBkYnM9W2RiLkRCKGRiZW52KSBmb3IgaSBpbiB4cmFuZ2UoMTYpXQorICAgICAgICBjdXJzb3JzPVtdCisgICAgICAgIGZvciBpIGluIGRicyA6CisgICAgICAgICAgICBpLm9wZW4oc2VsZi5maWxlbmFtZSwgZGIuREJfQlRSRUUsIGRiLkRCX0NSRUFURSB8IGRiLkRCX1RIUkVBRCwgMDY2NikKKworICAgICAgICBkYnNbMTBdLnB1dCgidGVzdCIsInRoaXMgaXMgYSB0ZXN0IikKKyAgICAgICAgZGJzWzEwXS5wdXQoInRlc3QyIiwiYW5vdGhlciB0ZXN0IikKKyAgICAgICAgZGJzWzEwXS5wdXQoInRlc3QzIiwiYW5vdGhlciBvbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRic1s0XS5nZXQoInRlc3QiKSwgInRoaXMgaXMgYSB0ZXN0IiwgInB1dCE9Z2V0IikKKworICAgICAgICBmb3IgaSBpbiBkYnMgOgorICAgICAgICAgICAgY3Vyc29ycy5leHRlbmQoW2kuY3Vyc29yKCkgZm9yIGogaW4geHJhbmdlKDMyKV0pCisKKyAgICAgICAgZm9yIGkgaW4gZGJzWzo6M10gOgorICAgICAgICAgICAgaS5jbG9zZSgpCisgICAgICAgIGZvciBpIGluIGN1cnNvcnNbOjozXSA6CisgICAgICAgICAgICBpLmNsb3NlKCkKKworICAgICMgQ2hlY2sgZm9yIG1pc3NpbmcgZXhjZXB0aW9uIGluIERCISAoYWZ0ZXIgREIgY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCRXJyb3IsIGRic1s5XS5nZXQsICJ0ZXN0IikKKworICAgICMgQ2hlY2sgZm9yIG1pc3NpbmcgZXhjZXB0aW9uIGluIERCQ3Vyc29yISAoYWZ0ZXIgREIgY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCRXJyb3IsIGN1cnNvcnNbMTAxXS5maXJzdCkKKworICAgICAgICBjdXJzb3JzWzgwXS5maXJzdCgpCisgICAgICAgIGN1cnNvcnNbODBdLm5leHQoKQorICAgICAgICBkYmVudi5jbG9zZSgpICAjIFRoaXMgImNsb3NlIiBzaG91bGQgY2xvc2UgdGhlIGNoaWxkIGRiIGhhbmRsZSBhbHNvCisgICAgIyBDaGVjayBmb3IgbWlzc2luZyBleGNlcHRpb24hIChhZnRlciBEQkVudiBjbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJFcnJvciwgY3Vyc29yc1s4MF0ubmV4dCkKKworICAgIGRlZiB0ZXN0MDVfY2xvc2VfZGJlbnZfZGVsZXRlX2RiX3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIGRiZW52ID0gZGIuREJFbnYoKQorICAgICAgICBkYmVudi5vcGVuKHNlbGYuaG9tZURpciwKKyAgICAgICAgICAgICAgICAgICBkYi5EQl9JTklUX0NEQnwgZGIuREJfQ1JFQVRFIHxkYi5EQl9USFJFQUR8ZGIuREJfSU5JVF9NUE9PTCwKKyAgICAgICAgICAgICAgICAgICAwNjY2KQorCisgICAgICAgIGQgPSBkYi5EQihkYmVudikKKyAgICAgICAgZC5vcGVuKHNlbGYuZmlsZW5hbWUsIGRiLkRCX0JUUkVFLCBkYi5EQl9DUkVBVEUgfCBkYi5EQl9USFJFQUQsIDA2NjYpCisKKyAgICAgICAgZGJlbnYuY2xvc2UoKSAgIyBUaGlzICJjbG9zZSIgc2hvdWxkIGNsb3NlIHRoZSBjaGlsZCBkYiBoYW5kbGUgYWxzbworCisgICAgICAgIGRlbCBkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBnYworICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBnYyA9IE5vbmUKKyAgICAgICAgaWYgZ2M6CisgICAgICAgICAgICAjIGZvcmNlIGQuX19kZWxfXyBbREJfZGVhbGxvY10gdG8gYmUgY2FsbGVkCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIGRlZiB0ZXN0MDZfY2xvc2VfdHhuX2JlZm9yZV9kdXBfY3Vyc29yKHNlbGYpIDoKKyAgICAgICAgZGJlbnYgPSBkYi5EQkVudigpCisgICAgICAgIGRiZW52Lm9wZW4oc2VsZi5ob21lRGlyLGRiLkRCX0lOSVRfVFhOIHwgZGIuREJfSU5JVF9NUE9PTCB8CisgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9MT0cgfCBkYi5EQl9DUkVBVEUpCisgICAgICAgIGQgPSBkYi5EQihkYmVudikKKyAgICAgICAgdHhuID0gZGJlbnYudHhuX2JlZ2luKCkKKyAgICAgICAgZC5vcGVuKHNlbGYuZmlsZW5hbWUsIGRidHlwZSA9IGRiLkRCX0hBU0gsIGZsYWdzID0gZGIuREJfQ1JFQVRFLAorICAgICAgICAgICAgICAgIHR4bj10eG4pCisgICAgICAgIGQucHV0KCJYWFgiLCAieXl5IiwgdHhuPXR4bikKKyAgICAgICAgdHhuLmNvbW1pdCgpCisgICAgICAgIHR4biA9IGRiZW52LnR4bl9iZWdpbigpCisgICAgICAgIGMxID0gZC5jdXJzb3IodHhuKQorICAgICAgICBjMiA9IGMxLmR1cCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCJYWFgiLCAieXl5IiksIGMxLmZpcnN0KCkpCisKKyAgICAgICAgIyBOb3QgaW50ZXJlc3RlZCBpbiB3YXJuaW5ncyBhYm91dCBpbXBsaWNpdCBjbG9zZS4KKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgIyBDb21wbGV0ZWx5IHJlc2V0dGluZyB0aGUgd2FybmluZyBzdGF0ZSBpcworICAgICAgICAgICAgIyBwcm9ibGVtYXRpYyB3aXRoIHB5dGhvbiA+PTIuNiB3aXRoIC0zIChweTNrIHdhcm5pbmcpLAorICAgICAgICAgICAgIyBiZWNhdXNlIHNvbWUgc3RkbGliIG1vZHVsZXMgc2VsZWN0aXZlbHkgaWdub3JlcyB3YXJuaW5ncy4KKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIikKKyAgICAgICAgICAgIHR4bi5jb21taXQoKQorICAgICAgICAgICAgd2FybmluZ3MucmVzZXR3YXJuaW5ncygpCisgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgIyBXaGVuIHdlIGRyb3Agc3VwcG9ydCBmb3IgcHl0aG9uIDIuNAorICAgICAgICAgICAgIyB3ZSBjb3VsZCB1c2U6IChpbiAyLjUgd2UgbmVlZCBhIF9fZnV0dXJlX18gc3RhdGVtZW50KQorICAgICAgICAgICAgIworICAgICAgICAgICAgIyAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAjICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIpCisgICAgICAgICAgICAjICAgICAgICB0eG4uY29tbWl0KCkKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgV2UgY2FuIG5vdCB1c2UgIndpdGgiIGFzIGlzLCBiZWNhdXNlIGl0IHdvdWxkIGJlIGludmFsaWQgc3ludGF4CisgICAgICAgICAgICAjIGluIHB5dGhvbiAyLjQgYW5kICh3aXRoIG5vIF9fZnV0dXJlX18pIDIuNS4KKyAgICAgICAgICAgICMgSGVyZSB3ZSBzaW11bGF0ZSAid2l0aCIgZm9sbG93aW5nIFBFUCAzNDMgOgorICAgICAgICAgICAgdyA9IHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCkKKyAgICAgICAgICAgIHcuX19lbnRlcl9fKCkKKyAgICAgICAgICAgIHRyeSA6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiKQorICAgICAgICAgICAgICAgIHR4bi5jb21taXQoKQorICAgICAgICAgICAgZmluYWxseSA6CisgICAgICAgICAgICAgICAgdy5fX2V4aXRfXygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJDdXJzb3JDbG9zZWRFcnJvciwgYzIuZmlyc3QpCisKKyAgICBkZWYgdGVzdDA3X2Nsb3NlX2RiX2JlZm9yZV9zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgaW1wb3J0IG9zLnBhdGgKKyAgICAgICAgcGF0aD1vcy5wYXRoLmpvaW4oc2VsZi5ob21lRGlyLHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGQgPSBkYi5EQigpCisgICAgICAgIGQub3BlbihwYXRoLCBkYi5EQl9CVFJFRSwgZGIuREJfQ1JFQVRFIHwgZGIuREJfVEhSRUFELCAwNjY2KQorICAgICAgICBkYnM9ZGIuREJTZXF1ZW5jZShkKQorICAgICAgICBkLmNsb3NlKCkgICMgVGhpcyAiY2xvc2UiIHNob3VsZCBjbG9zZSB0aGUgY2hpbGQgREJTZXF1ZW5jZSBhbHNvCisgICAgICAgIGRicy5jbG9zZSgpICAjIElmIG5vdCBjbG9zZWQsIGNvcmUgZHVtcCAoaW4gQmVya2VsZXkgREIgNC42LiopCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKERCRW52Q2xvc2VkRWFybHlDcmFzaCkpCisgICAgcmV0dXJuIHN1aXRlCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSd0ZXN0X3N1aXRlJykKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2ZpbGVpZC5weSBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2ZpbGVpZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTVlYzgzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfZmlsZWlkLnB5CkBAIC0wLDAgKzEsNjEgQEAKKyIiIlRlc3RDYXNlIGZvciByZXNldGluZyBGaWxlIElELgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdF9hbGwgaW1wb3J0IGRiLCB0ZXN0X3N1cHBvcnQsIGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCwgZ2V0X25ld19kYXRhYmFzZV9wYXRoCisKK2NsYXNzIEZpbGVpZFJlc2V0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kYl9wYXRoXzEgPSBnZXRfbmV3X2RhdGFiYXNlX3BhdGgoKQorICAgICAgICBzZWxmLmRiX3BhdGhfMiA9IGdldF9uZXdfZGF0YWJhc2VfcGF0aCgpCisgICAgICAgIHNlbGYuZGJfZW52X3BhdGggPSBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgoKQorCisgICAgZGVmIHRlc3RfZmlsZWlkX3Jlc2V0KHNlbGYpOgorICAgICAgICAjIGNyZWF0ZSBEQiAxCisgICAgICAgIHNlbGYuZGIxID0gZGIuREIoKQorICAgICAgICBzZWxmLmRiMS5vcGVuKHNlbGYuZGJfcGF0aF8xLCBkYnR5cGU9ZGIuREJfSEFTSCwgZmxhZ3M9KGRiLkRCX0NSRUFURXxkYi5EQl9FWENMKSkKKyAgICAgICAgc2VsZi5kYjEucHV0KCdzcGFtJywgJ2VnZ3MnKQorICAgICAgICBzZWxmLmRiMS5jbG9zZSgpCisKKyAgICAgICAgc2h1dGlsLmNvcHkoc2VsZi5kYl9wYXRoXzEsIHNlbGYuZGJfcGF0aF8yKQorCisgICAgICAgIHNlbGYuZGIyID0gZGIuREIoKQorICAgICAgICBzZWxmLmRiMi5vcGVuKHNlbGYuZGJfcGF0aF8yLCBkYnR5cGU9ZGIuREJfSEFTSCkKKyAgICAgICAgc2VsZi5kYjIucHV0KCdzcGFtJywgJ3NwYW0nKQorICAgICAgICBzZWxmLmRiMi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5kYl9lbnYgPSBkYi5EQkVudigpCisgICAgICAgIHNlbGYuZGJfZW52Lm9wZW4oc2VsZi5kYl9lbnZfcGF0aCwgZGIuREJfQ1JFQVRFfGRiLkRCX0lOSVRfTVBPT0wpCisKKyAgICAgICAgIyB1c2UgZmlsZWlkX3Jlc2V0KCkgaGVyZQorICAgICAgICBzZWxmLmRiX2Vudi5maWxlaWRfcmVzZXQoc2VsZi5kYl9wYXRoXzIpCisKKyAgICAgICAgc2VsZi5kYjEgPSBkYi5EQihzZWxmLmRiX2VudikKKyAgICAgICAgc2VsZi5kYjEub3BlbihzZWxmLmRiX3BhdGhfMSwgZGJ0eXBlPWRiLkRCX0hBU0gsIGZsYWdzPWRiLkRCX1JET05MWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiMS5nZXQoJ3NwYW0nKSwgJ2VnZ3MnKQorCisgICAgICAgIHNlbGYuZGIyID0gZGIuREIoc2VsZi5kYl9lbnYpCisgICAgICAgIHNlbGYuZGIyLm9wZW4oc2VsZi5kYl9wYXRoXzIsIGRidHlwZT1kYi5EQl9IQVNILCBmbGFncz1kYi5EQl9SRE9OTFkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYjIuZ2V0KCdzcGFtJyksICdzcGFtJykKKworICAgICAgICBzZWxmLmRiMS5jbG9zZSgpCisgICAgICAgIHNlbGYuZGIyLmNsb3NlKCkKKworICAgICAgICBzZWxmLmRiX2Vudi5jbG9zZSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoc2VsZi5kYl9wYXRoXzEpCisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoc2VsZi5kYl9wYXRoXzIpCisgICAgICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUoc2VsZi5kYl9lbnZfcGF0aCkKKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LCA0KToKKyAgICAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoRmlsZWlkUmVzZXRUZXN0Q2FzZSkpCisgICAgcmV0dXJuIHN1aXRlCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0ndGVzdF9zdWl0ZScpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9nZXRfbm9uZS5weSBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2dldF9ub25lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NjNiNTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9nZXRfbm9uZS5weQpAQCAtMCwwICsxLDkyIEBACisiIiIKK1Rlc3RDYXNlcyBmb3IgY2hlY2tpbmcgc2V0X2dldF9yZXR1cm5zX25vbmUuCisiIiIKKworaW1wb3J0IG9zLCBzdHJpbmcKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRlc3RfYWxsIGltcG9ydCBkYiwgdmVyYm9zZSwgZ2V0X25ld19kYXRhYmFzZV9wYXRoCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgR2V0UmV0dXJuc05vbmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gZ2V0X25ld19kYXRhYmFzZV9wYXRoKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworCisgICAgZGVmIHRlc3QwMV9nZXRfcmV0dXJuc19ub25lKHNlbGYpOgorICAgICAgICBkID0gZGIuREIoKQorICAgICAgICBkLm9wZW4oc2VsZi5maWxlbmFtZSwgZGIuREJfQlRSRUUsIGRiLkRCX0NSRUFURSkKKyAgICAgICAgZC5zZXRfZ2V0X3JldHVybnNfbm9uZSgxKQorCisgICAgICAgIGZvciB4IGluIHN0cmluZy5sZXR0ZXJzOgorICAgICAgICAgICAgZC5wdXQoeCwgeCAqIDQwKQorCisgICAgICAgIGRhdGEgPSBkLmdldCgnYmFkIGtleScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgTm9uZSkKKworICAgICAgICBkYXRhID0gZC5nZXQoc3RyaW5nLmxldHRlcnNbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc3RyaW5nLmxldHRlcnNbMF0qNDApCisKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGMgPSBkLmN1cnNvcigpCisgICAgICAgIHJlYyA9IGMuZmlyc3QoKQorICAgICAgICB3aGlsZSByZWM6CisgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQorICAgICAgICAgICAgcmVjID0gYy5uZXh0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgbGVuKHN0cmluZy5sZXR0ZXJzKSkKKworICAgICAgICBjLmNsb3NlKCkKKyAgICAgICAgZC5jbG9zZSgpCisKKworICAgIGRlZiB0ZXN0MDJfZ2V0X3JhaXNlc19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGQgPSBkYi5EQigpCisgICAgICAgIGQub3BlbihzZWxmLmZpbGVuYW1lLCBkYi5EQl9CVFJFRSwgZGIuREJfQ1JFQVRFKQorICAgICAgICBkLnNldF9nZXRfcmV0dXJuc19ub25lKDApCisKKyAgICAgICAgZm9yIHggaW4gc3RyaW5nLmxldHRlcnM6CisgICAgICAgICAgICBkLnB1dCh4LCB4ICogNDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJOb3RGb3VuZEVycm9yLCBkLmdldCwgJ2JhZCBrZXknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5nZXQsICdiYWQga2V5JykKKworICAgICAgICBkYXRhID0gZC5nZXQoc3RyaW5nLmxldHRlcnNbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc3RyaW5nLmxldHRlcnNbMF0qNDApCisKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGV4Y2VwdGlvbkhhcHBlbmVkID0gMAorICAgICAgICBjID0gZC5jdXJzb3IoKQorICAgICAgICByZWMgPSBjLmZpcnN0KCkKKyAgICAgICAgd2hpbGUgcmVjOgorICAgICAgICAgICAgY291bnQgPSBjb3VudCArIDEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWMgPSBjLm5leHQoKQorICAgICAgICAgICAgZXhjZXB0IGRiLkRCTm90Rm91bmRFcnJvcjogICMgZW5kIG9mIHRoZSByZWNvcmRzCisgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFwcGVuZWQgPSAxCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlYywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4Y2VwdGlvbkhhcHBlbmVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCBsZW4oc3RyaW5nLmxldHRlcnMpKQorCisgICAgICAgIGMuY2xvc2UoKQorICAgICAgICBkLmNsb3NlKCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEdldFJldHVybnNOb25lVGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSd0ZXN0X3N1aXRlJykKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2pvaW4ucHkgYi9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9qb2luLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMGRmZmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9qb2luLnB5CkBAIC0wLDAgKzEsOTkgQEAKKyIiIlRlc3RDYXNlcyBmb3IgdXNpbmcgdGhlIERCLmpvaW4gYW5kIERCQ3Vyc29yLmpvaW5faXRlbSBtZXRob2RzLgorIiIiCisKK2ltcG9ydCBvcworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIGRic2hlbHZlLCB0ZXN0X3N1cHBvcnQsIHZlcmJvc2UsIFwKKyAgICAgICAgZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoLCBnZXRfbmV3X2RhdGFiYXNlX3BhdGgKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHJvZHVjdEluZGV4ID0gWworICAgICgnYXBwbGUnLCAiQ29udmVuaWVuY2UgU3RvcmUiKSwKKyAgICAoJ2JsdWViZXJyeScsICJGYXJtZXIncyBNYXJrZXQiKSwKKyAgICAoJ3Nob3RndW4nLCAiUy1NYXJ0IiksICAgICAgICAgICAgICAjIEFpc2xlIDEyCisgICAgKCdwZWFyJywgIkZhcm1lcidzIE1hcmtldCIpLAorICAgICgnY2hhaW5zYXcnLCAiUy1NYXJ0IiksICAgICAgICAgICAgICMgIlNob3Agc21hcnQuICBTaG9wIFMtTWFydCEiCisgICAgKCdzdHJhd2JlcnJ5JywgIkZhcm1lcidzIE1hcmtldCIpLAorXQorCitDb2xvckluZGV4ID0gWworICAgICgnYmx1ZScsICJibHVlYmVycnkiKSwKKyAgICAoJ3JlZCcsICJhcHBsZSIpLAorICAgICgncmVkJywgImNoYWluc2F3IiksCisgICAgKCdyZWQnLCAic3RyYXdiZXJyeSIpLAorICAgICgneWVsbG93JywgInBlYWNoIiksCisgICAgKCd5ZWxsb3cnLCAicGVhciIpLAorICAgICgnYmxhY2snLCAic2hvdGd1biIpLAorXQorCitjbGFzcyBKb2luVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGtleXR5cGUgPSAnJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18gKyAnLmRiJworICAgICAgICBzZWxmLmhvbWVEaXIgPSBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgoKQorICAgICAgICBzZWxmLmVudiA9IGRiLkRCRW52KCkKKyAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSB8IGRiLkRCX0lOSVRfTVBPT0wgfCBkYi5EQl9JTklUX0xPQ0sgKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmVudi5jbG9zZSgpCisgICAgICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUoc2VsZi5ob21lRGlyKQorCisgICAgZGVmIHRlc3QwMV9qb2luKHNlbGYpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDFfam9pbi4uLiIgJSBcCisgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgICAgICMgY3JlYXRlIGFuZCBwb3B1bGF0ZSBwcmltYXJ5IGluZGV4CisgICAgICAgIHByaURCID0gZGIuREIoc2VsZi5lbnYpCisgICAgICAgIHByaURCLm9wZW4oc2VsZi5maWxlbmFtZSwgInByaW1hcnkiLCBkYi5EQl9CVFJFRSwgZGIuREJfQ1JFQVRFKQorICAgICAgICBtYXAobGFtYmRhIHQsIHByaURCPXByaURCOiBwcmlEQi5wdXQoKnQpLCBQcm9kdWN0SW5kZXgpCisKKyAgICAgICAgIyBjcmVhdGUgYW5kIHBvcHVsYXRlIHNlY29uZGFyeSBpbmRleAorICAgICAgICBzZWNEQiA9IGRiLkRCKHNlbGYuZW52KQorICAgICAgICBzZWNEQi5zZXRfZmxhZ3MoZGIuREJfRFVQIHwgZGIuREJfRFVQU09SVCkKKyAgICAgICAgc2VjREIub3BlbihzZWxmLmZpbGVuYW1lLCAic2Vjb25kYXJ5IiwgZGIuREJfQlRSRUUsIGRiLkRCX0NSRUFURSkKKyAgICAgICAgbWFwKGxhbWJkYSB0LCBzZWNEQj1zZWNEQjogc2VjREIucHV0KCp0KSwgQ29sb3JJbmRleCkKKworICAgICAgICBzQ3Vyc29yID0gTm9uZQorICAgICAgICBqQ3Vyc29yID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGxldHMgbG9vayB1cCBhbGwgb2YgdGhlIHJlZCBQcm9kdWN0cworICAgICAgICAgICAgc0N1cnNvciA9IHNlY0RCLmN1cnNvcigpCisgICAgICAgICAgICAjIERvbid0IGRvIHRoZSAuc2V0KCkgaW4gYW4gYXNzZXJ0LCBvciB5b3UgY2FuIGdldCBhIGJvZ3VzIGZhaWx1cmUKKyAgICAgICAgICAgICMgd2hlbiBydW5uaW5nIHB5dGhvbiAtTworICAgICAgICAgICAgdG1wID0gc0N1cnNvci5zZXQoJ3JlZCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodG1wKQorCisgICAgICAgICAgICAjIEZJWE1FOiBqQ3Vyc29yIGRvZXNuJ3QgcHJvcGVybHkgaG9sZCBhIHJlZmVyZW5jZSB0byBpdHMKKyAgICAgICAgICAgICMgY3Vyc29ycywgaWYgdGhleSBhcmUgY2xvc2VkIGJlZm9yZSBqY3Vyc29yIGlzIHVzZWQgaXQKKyAgICAgICAgICAgICMgY2FuIGNhdXNlIGEgY3Jhc2guCisgICAgICAgICAgICBqQ3Vyc29yID0gcHJpREIuam9pbihbc0N1cnNvcl0pCisKKyAgICAgICAgICAgIGlmIGpDdXJzb3IuZ2V0KDApICE9ICgnYXBwbGUnLCAiQ29udmVuaWVuY2UgU3RvcmUiKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4gY3Vyc29yIHBvc2l0aW9uZWQgd3JvbmciKQorICAgICAgICAgICAgaWYgakN1cnNvci5qb2luX2l0ZW0oKSAhPSAnY2hhaW5zYXcnOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiREJDdXJzb3Iuam9pbl9pdGVtIHJldHVybmVkIHdyb25nIGl0ZW0iKQorICAgICAgICAgICAgaWYgakN1cnNvci5nZXQoMClbMF0gIT0gJ3N0cmF3YmVycnknOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbiBjdXJzb3IgcmV0dXJuZWQgd3JvbmcgdGhpbmciKQorICAgICAgICAgICAgaWYgakN1cnNvci5nZXQoMCk6ICAjIHRoZXJlIHdlcmUgb25seSB0aHJlZSByZWQgaXRlbXMgdG8gcmV0dXJuCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luIGN1cnNvciByZXR1cm5lZCB0b28gbWFueSBpdGVtcyIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBqQ3Vyc29yOgorICAgICAgICAgICAgICAgIGpDdXJzb3IuY2xvc2UoKQorICAgICAgICAgICAgaWYgc0N1cnNvcjoKKyAgICAgICAgICAgICAgICBzQ3Vyc29yLmNsb3NlKCkKKyAgICAgICAgICAgIHByaURCLmNsb3NlKCkKKyAgICAgICAgICAgIHNlY0RCLmNsb3NlKCkKKworCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEpvaW5UZXN0Q2FzZSkpCisKKyAgICByZXR1cm4gc3VpdGUKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X2xvY2sucHkgYi9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9sb2NrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwY2E4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9sb2NrLnB5CkBAIC0wLDAgKzEsMTg0IEBACisiIiIKK1Rlc3RDYXNlcyBmb3IgdGVzdGluZyB0aGUgbG9ja2luZyBzdWItc3lzdGVtLgorIiIiCisKK2ltcG9ydCB0aW1lCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIHRlc3Rfc3VwcG9ydCwgdmVyYm9zZSwgaGF2ZV90aHJlYWRzLCBcCisgICAgICAgIGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCwgZ2V0X25ld19kYXRhYmFzZV9wYXRoCisKK2lmIGhhdmVfdGhyZWFkcyA6CisgICAgZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAorICAgIGltcG9ydCBzeXMKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgICAgIGZyb20gdGhyZWFkaW5nIGltcG9ydCBjdXJyZW50VGhyZWFkCisgICAgZWxzZSA6CisgICAgICAgIGZyb20gdGhyZWFkaW5nIGltcG9ydCBjdXJyZW50X3RocmVhZCBhcyBjdXJyZW50VGhyZWFkCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIExvY2tpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmhvbWVEaXIgPSBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgoKQorICAgICAgICBzZWxmLmVudiA9IGRiLkRCRW52KCkKKyAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX1RIUkVBRCB8IGRiLkRCX0lOSVRfTVBPT0wgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9MT0NLIHwgZGIuREJfQ1JFQVRFKQorCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZW52LmNsb3NlKCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJtdHJlZShzZWxmLmhvbWVEaXIpCisKKworICAgIGRlZiB0ZXN0MDFfc2ltcGxlKHNlbGYpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDFfc2ltcGxlLi4uIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICAgICAgYW5JRCA9IHNlbGYuZW52LmxvY2tfaWQoKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgImxvY2tlciBJRDogJXMiICUgYW5JRAorICAgICAgICBsb2NrID0gc2VsZi5lbnYubG9ja19nZXQoYW5JRCwgInNvbWUgbG9ja2VkIHRoaW5nIiwgZGIuREJfTE9DS19XUklURSkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJBcXVpcmVkIGxvY2s6ICVzIiAlIGxvY2sKKyAgICAgICAgc2VsZi5lbnYubG9ja19wdXQobG9jaykKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJSZWxlYXNlZCBsb2NrOiAlcyIgJSBsb2NrCisgICAgICAgIHNlbGYuZW52LmxvY2tfaWRfZnJlZShhbklEKQorCisKKyAgICBkZWYgdGVzdDAyX3RocmVhZGVkKHNlbGYpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDJfdGhyZWFkZWQuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICB0aHJlYWRzID0gW10KKyAgICAgICAgdGhyZWFkcy5hcHBlbmQoVGhyZWFkKHRhcmdldCA9IHNlbGYudGhlVGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oZGIuREJfTE9DS19XUklURSwpKSkKKyAgICAgICAgdGhyZWFkcy5hcHBlbmQoVGhyZWFkKHRhcmdldCA9IHNlbGYudGhlVGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oZGIuREJfTE9DS19SRUFELCkpKQorICAgICAgICB0aHJlYWRzLmFwcGVuZChUaHJlYWQodGFyZ2V0ID0gc2VsZi50aGVUaHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShkYi5EQl9MT0NLX1JFQUQsKSkpCisgICAgICAgIHRocmVhZHMuYXBwZW5kKFRocmVhZCh0YXJnZXQgPSBzZWxmLnRoZVRocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KGRiLkRCX0xPQ0tfV1JJVEUsKSkpCisgICAgICAgIHRocmVhZHMuYXBwZW5kKFRocmVhZCh0YXJnZXQgPSBzZWxmLnRoZVRocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KGRiLkRCX0xPQ0tfUkVBRCwpKSkKKyAgICAgICAgdGhyZWFkcy5hcHBlbmQoVGhyZWFkKHRhcmdldCA9IHNlbGYudGhlVGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oZGIuREJfTE9DS19SRUFELCkpKQorICAgICAgICB0aHJlYWRzLmFwcGVuZChUaHJlYWQodGFyZ2V0ID0gc2VsZi50aGVUaHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShkYi5EQl9MT0NLX1dSSVRFLCkpKQorICAgICAgICB0aHJlYWRzLmFwcGVuZChUaHJlYWQodGFyZ2V0ID0gc2VsZi50aGVUaHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShkYi5EQl9MT0NLX1dSSVRFLCkpKQorICAgICAgICB0aHJlYWRzLmFwcGVuZChUaHJlYWQodGFyZ2V0ID0gc2VsZi50aGVUaHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShkYi5EQl9MT0NLX1dSSVRFLCkpKQorCisgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgICAgICAgICAgICAgdC5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgICAgIHQuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICB0LmpvaW4oKQorCisgICAgICAgIGRlZiB0ZXN0MDNfbG9ja190aW1lb3V0KHNlbGYpOgorICAgICAgICAgICAgc2VsZi5lbnYuc2V0X3RpbWVvdXQoMCwgZGIuREJfU0VUX0xPQ0tfVElNRU9VVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbnYuZ2V0X3RpbWVvdXQoZGIuREJfU0VUX0xPQ0tfVElNRU9VVCksIDApCisgICAgICAgICAgICBzZWxmLmVudi5zZXRfdGltZW91dCgwLCBkYi5EQl9TRVRfVFhOX1RJTUVPVVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW52LmdldF90aW1lb3V0KGRiLkRCX1NFVF9UWE5fVElNRU9VVCksIDApCisgICAgICAgICAgICBzZWxmLmVudi5zZXRfdGltZW91dCgxMjM0NTYsIGRiLkRCX1NFVF9MT0NLX1RJTUVPVVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW52LmdldF90aW1lb3V0KGRiLkRCX1NFVF9MT0NLX1RJTUVPVVQpLCAxMjM0NTYpCisgICAgICAgICAgICBzZWxmLmVudi5zZXRfdGltZW91dCg3ODkwMTIzLCBkYi5EQl9TRVRfVFhOX1RJTUVPVVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW52LmdldF90aW1lb3V0KGRiLkRCX1NFVF9UWE5fVElNRU9VVCksIDc4OTAxMjMpCisKKyAgICBkZWYgdGVzdDA0X2xvY2tfdGltZW91dDIoc2VsZik6CisgICAgICAgIHNlbGYuZW52LnNldF90aW1lb3V0KDAsIGRiLkRCX1NFVF9MT0NLX1RJTUVPVVQpCisgICAgICAgIHNlbGYuZW52LnNldF90aW1lb3V0KDAsIGRiLkRCX1NFVF9UWE5fVElNRU9VVCkKKyAgICAgICAgc2VsZi5lbnYuc2V0X3RpbWVvdXQoMTIzNDU2LCBkYi5EQl9TRVRfTE9DS19USU1FT1VUKQorICAgICAgICBzZWxmLmVudi5zZXRfdGltZW91dCg3ODkwMTIzLCBkYi5EQl9TRVRfVFhOX1RJTUVPVVQpCisKKyAgICAgICAgZGVmIGRlYWRsb2NrX2RldGVjdGlvbigpIDoKKyAgICAgICAgICAgIHdoaWxlIG5vdCBkZWFkbG9ja19kZXRlY3Rpb24uZW5kIDoKKyAgICAgICAgICAgICAgICBkZWFkbG9ja19kZXRlY3Rpb24uY291bnQgPSBcCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZW52LmxvY2tfZGV0ZWN0KGRiLkRCX0xPQ0tfRVhQSVJFKQorICAgICAgICAgICAgICAgIGlmIGRlYWRsb2NrX2RldGVjdGlvbi5jb3VudCA6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBkZWFkbG9ja19kZXRlY3Rpb24uZW5kIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisKKyAgICAgICAgZGVhZGxvY2tfZGV0ZWN0aW9uLmVuZD1GYWxzZQorICAgICAgICBkZWFkbG9ja19kZXRlY3Rpb24uY291bnQ9MAorICAgICAgICB0PVRocmVhZCh0YXJnZXQ9ZGVhZGxvY2tfZGV0ZWN0aW9uKQorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKKyAgICAgICAgICAgIHQuc2V0RGFlbW9uKFRydWUpCisgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgdC5kYWVtb24gPSBUcnVlCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBzZWxmLmVudi5zZXRfdGltZW91dCgxMDAwMDAsIGRiLkRCX1NFVF9MT0NLX1RJTUVPVVQpCisgICAgICAgIGFuSUQgPSBzZWxmLmVudi5sb2NrX2lkKCkKKyAgICAgICAgYW5JRDIgPSBzZWxmLmVudi5sb2NrX2lkKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhbklELCBhbklEMikKKyAgICAgICAgbG9jayA9IHNlbGYuZW52LmxvY2tfZ2V0KGFuSUQsICJzaGFyZWQgbG9jayIsIGRiLkRCX0xPQ0tfV1JJVEUpCisgICAgICAgIHN0YXJ0X3RpbWU9dGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJMb2NrTm90R3JhbnRlZEVycm9yLAorICAgICAgICAgICAgICAgIHNlbGYuZW52LmxvY2tfZ2V0LGFuSUQyLCAic2hhcmVkIGxvY2siLCBkYi5EQl9MT0NLX1JFQUQpCisgICAgICAgIGVuZF90aW1lPXRpbWUudGltZSgpCisgICAgICAgIGRlYWRsb2NrX2RldGVjdGlvbi5lbmQ9VHJ1ZQorICAgICAgICAjIEZsb2F0aW5nIHBvaW50IHJvdW5kaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoZW5kX3RpbWUtc3RhcnRfdGltZSkgPj0gMC4wOTk5KQorICAgICAgICBzZWxmLmVudi5sb2NrX3B1dChsb2NrKQorICAgICAgICB0LmpvaW4oKQorCisgICAgICAgIHNlbGYuZW52LmxvY2tfaWRfZnJlZShhbklEKQorICAgICAgICBzZWxmLmVudi5sb2NrX2lkX2ZyZWUoYW5JRDIpCisKKyAgICAgICAgaWYgZGIudmVyc2lvbigpID49ICg0LDYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlYWRsb2NrX2RldGVjdGlvbi5jb3VudD4wKQorCisgICAgZGVmIHRoZVRocmVhZChzZWxmLCBsb2NrVHlwZSk6CisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgorICAgICAgICAgICAgbmFtZSA9IGN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkKKyAgICAgICAgZWxzZSA6CisgICAgICAgICAgICBuYW1lID0gY3VycmVudFRocmVhZCgpLm5hbWUKKworICAgICAgICBpZiBsb2NrVHlwZSA9PSAgZGIuREJfTE9DS19XUklURToKKyAgICAgICAgICAgIGx0ID0gIndyaXRlIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbHQgPSAicmVhZCIKKworICAgICAgICBhbklEID0gc2VsZi5lbnYubG9ja19pZCgpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiJXM6IGxvY2tlciBJRDogJXMiICUgKG5hbWUsIGFuSUQpCisKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMDApIDoKKyAgICAgICAgICAgIGxvY2sgPSBzZWxmLmVudi5sb2NrX2dldChhbklELCAic29tZSBsb2NrZWQgdGhpbmciLCBsb2NrVHlwZSkKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIiVzOiBBcXVpcmVkICVzIGxvY2s6ICVzIiAlIChuYW1lLCBsdCwgbG9jaykKKworICAgICAgICAgICAgc2VsZi5lbnYubG9ja19wdXQobG9jaykKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIiVzOiBSZWxlYXNlZCAlcyBsb2NrOiAlcyIgJSAobmFtZSwgbHQsIGxvY2spCisKKyAgICAgICAgc2VsZi5lbnYubG9ja19pZF9mcmVlKGFuSUQpCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICBpZiBoYXZlX3RocmVhZHM6CisgICAgICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKExvY2tpbmdUZXN0Q2FzZSkpCisgICAgZWxzZToKKyAgICAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoTG9ja2luZ1Rlc3RDYXNlLCAndGVzdDAxJykpCisKKyAgICByZXR1cm4gc3VpdGUKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3Rlc3Rfc3VpdGUnKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfbWlzYy5weSBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X21pc2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFlOTI4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X21pc2MucHkKQEAgLTAsMCArMSwxMzggQEAKKyIiIk1pc2NlbGxhbmVvdXMgYnNkZGIgbW9kdWxlIHRlc3QgY2FzZXMKKyIiIgorCitpbXBvcnQgb3MsIHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdF9hbGwgaW1wb3J0IGRiLCBkYnNoZWx2ZSwgaGFzaG9wZW4sIHRlc3Rfc3VwcG9ydCwgZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoLCBnZXRfbmV3X2RhdGFiYXNlX3BhdGgKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgTWlzY1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBnZXRfbmV3X2RhdGFiYXNlX3BhdGgoKQorICAgICAgICBzZWxmLmhvbWVEaXIgPSBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUoc2VsZi5ob21lRGlyKQorCisgICAgZGVmIHRlc3QwMV9iYWRwb2ludGVyKHNlbGYpOgorICAgICAgICBkYnMgPSBkYnNoZWx2ZS5vcGVuKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGRicy5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRiLkRCRXJyb3IsIGRicy5nZXQsICJmb28iKQorCisgICAgZGVmIHRlc3QwMl9kYl9ob21lKHNlbGYpOgorICAgICAgICBlbnYgPSBkYi5EQkVudigpCisgICAgICAgICMgY2hlY2sgZm9yIGNyYXNoIGZpeGVkIHdoZW4gZGJfaG9tZSBpcyB1c2VkIGJlZm9yZSBvcGVuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudi5kYl9ob21lIGlzIE5vbmUpCisgICAgICAgIGVudi5vcGVuKHNlbGYuaG9tZURpciwgZGIuREJfQ1JFQVRFKQorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaG9tZURpciwgZW52LmRiX2hvbWUpCisgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhzZWxmLmhvbWVEaXIsICJhc2NpaSIpLCBlbnYuZGJfaG9tZSkKKworICAgIGRlZiB0ZXN0MDNfcmVwcl9jbG9zZWRfZGIoc2VsZik6CisgICAgICAgIGRiID0gaGFzaG9wZW4oc2VsZi5maWxlbmFtZSkKKyAgICAgICAgZGIuY2xvc2UoKQorICAgICAgICBycCA9IHJlcHIoZGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnAsICJ7fSIpCisKKyAgICBkZWYgdGVzdDA0X3JlcHJfZGIoc2VsZikgOgorICAgICAgICBkYiA9IGhhc2hvcGVuKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGQgPSB7fQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwKSA6CisgICAgICAgICAgICBkYltyZXByKGkpXSA9IHJlcHIoMTAwKmkpCisgICAgICAgICAgICBkW3JlcHIoaSldID0gcmVwcigxMDAqaSkKKyAgICAgICAgZGIuY2xvc2UoKQorICAgICAgICBkYiA9IGhhc2hvcGVuKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHJwID0gcmVwcihkYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChycCwgcmVwcihkKSkKKyAgICAgICAgZGIuY2xvc2UoKQorCisgICAgIyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvaW5kZXgucGhwP2Z1bmM9ZGV0YWlsJmFpZD0xNzA4ODY4Jmdyb3VwX2lkPTEzOTAwJmF0aWQ9MzEzOTAwCisgICAgIworICAgICMgU2VlIHRoZSBidWcgcmVwb3J0IGZvciBkZXRhaWxzLgorICAgICMKKyAgICAjIFRoZSBwcm9ibGVtIHdhcyB0aGF0IG1ha2Vfa2V5X2RidCgpIHdhcyBub3QgYWxsb2NhdGluZyBhIGNvcHkgb2YKKyAgICAjIHN0cmluZyBrZXlzIGJ1dCBGUkVFX0RCVCgpIHdhcyBhbHdheXMgYmVpbmcgdG9sZCB0byBmcmVlIGl0IHdoZW4gdGhlCisgICAgIyBkYXRhYmFzZSB3YXMgb3BlbmVkIHdpdGggREJfVEhSRUFELgorICAgIGRlZiB0ZXN0MDVfZG91YmxlX2ZyZWVfbWFrZV9rZXlfZGJ0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYjEgPSBkYi5EQigpCisgICAgICAgICAgICBkYjEub3BlbihzZWxmLmZpbGVuYW1lLCBOb25lLCBkYi5EQl9CVFJFRSwKKyAgICAgICAgICAgICAgICAgICAgIGRiLkRCX0NSRUFURSB8IGRiLkRCX1RIUkVBRCkKKworICAgICAgICAgICAgY3VycyA9IGRiMS5jdXJzb3IoKQorICAgICAgICAgICAgdCA9IGN1cnMuZ2V0KCIvZm9vIiwgZGIuREJfU0VUKQorICAgICAgICAgICAgIyBkb3VibGUgZnJlZSBoYXBwZW5lZCBkdXJpbmcgZXhpdCBmcm9tIERCQ19nZXQKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRiMS5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisKKyAgICBkZWYgdGVzdDA2X2tleV93aXRoX251bGxfYnl0ZXMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRiMSA9IGRiLkRCKCkKKyAgICAgICAgICAgIGRiMS5vcGVuKHNlbGYuZmlsZW5hbWUsIE5vbmUsIGRiLkRCX0hBU0gsIGRiLkRCX0NSRUFURSkKKyAgICAgICAgICAgIGRiMVsnYSddID0gJ2VoPycKKyAgICAgICAgICAgIGRiMVsnYVx4MDAnXSA9ICdlaCB6ZWQuJworICAgICAgICAgICAgZGIxWydhXHgwMGEnXSA9ICdlaCB6ZWQgZWg/JworICAgICAgICAgICAgZGIxWydhYWEnXSA9ICdlaCBlaCBlaCEnCisgICAgICAgICAgICBrZXlzID0gZGIxLmtleXMoKQorICAgICAgICAgICAga2V5cy5zb3J0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydhJywgJ2FceDAwJywgJ2FceDAwYScsICdhYWEnXSwga2V5cykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGIxWydhJ10sICdlaD8nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYjFbJ2FceDAwJ10sICdlaCB6ZWQuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGIxWydhXHgwMGEnXSwgJ2VoIHplZCBlaD8nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYjFbJ2FhYSddLCAnZWggZWggZWghJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRiMS5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisKKyAgICBkZWYgdGVzdDA3X0RCX3NldF9mbGFnc19wZXJzaXN0cyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGIxID0gZGIuREIoKQorICAgICAgICAgICAgZGIxLnNldF9mbGFncyhkYi5EQl9EVVBTT1JUKQorICAgICAgICAgICAgZGIxLm9wZW4oc2VsZi5maWxlbmFtZSwgZGIuREJfSEFTSCwgZGIuREJfQ1JFQVRFKQorICAgICAgICAgICAgZGIxWydhJ10gPSAnZWgnCisgICAgICAgICAgICBkYjFbJ2EnXSA9ICdBJworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKCdhJywgJ0EnKV0sIGRiMS5pdGVtcygpKQorICAgICAgICAgICAgZGIxLnB1dCgnYScsICdBYScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoJ2EnLCAnQScpLCAoJ2EnLCAnQWEnKV0sIGRiMS5pdGVtcygpKQorICAgICAgICAgICAgZGIxLmNsb3NlKCkKKyAgICAgICAgICAgIGRiMSA9IGRiLkRCKCkKKyAgICAgICAgICAgICMgbm8gc2V0X2ZsYWdzIGNhbGwsIHdlJ3JlIHRlc3RpbmcgdGhhdCBpdCByZWFkcyBhbmQgb2JleXMKKyAgICAgICAgICAgICMgdGhlIGZsYWdzIG9uIG9wZW4uCisgICAgICAgICAgICBkYjEub3BlbihzZWxmLmZpbGVuYW1lLCBkYi5EQl9IQVNIKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKCdhJywgJ0EnKSwgKCdhJywgJ0FhJyldLCBkYjEuaXRlbXMoKSkKKyAgICAgICAgICAgICMgaWYgaXQgcmVhZCB0aGUgZmxhZ3MgcmlnaHQgdGhpcyB3aWxsIHJlcGxhY2UgYWxsIHZhbHVlcworICAgICAgICAgICAgIyBmb3Iga2V5ICdhJyBpbnN0ZWFkIG9mIGFkZGluZyBhIG5ldyBvbmUuICAoYXMgYSBkaWN0IHNob3VsZCkKKyAgICAgICAgICAgIGRiMVsnYSddID0gJ25ldyBBJworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKCdhJywgJ25ldyBBJyldLCBkYjEuaXRlbXMoKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRiMS5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisKKworICAgIGRlZiB0ZXN0MDhfRXhjZXB0aW9uVHlwZXMoc2VsZikgOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhkYi5EQkVycm9yLCBFeGNlcHRpb24pKQorICAgICAgICBmb3IgaSwgaiBpbiBkYi5fX2RpY3RfXy5pdGVtcygpIDoKKyAgICAgICAgICAgIGlmIGkuc3RhcnRzd2l0aCgiREIiKSBhbmQgaS5lbmRzd2l0aCgiRXJyb3IiKSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoaiwgZGIuREJFcnJvciksIG1zZz1pKQorICAgICAgICAgICAgICAgIGlmIGkgbm90IGluICgiREJLZXlFbXB0eUVycm9yIiwgIkRCTm90Rm91bmRFcnJvciIpIDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKGosIEtleUVycm9yKSwgbXNnPWkpCisKKyAgICAgICAgIyBUaGlzIHR3byBleGNlcHRpb25zIGhhdmUgdHdvIGJhc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGRiLkRCS2V5RW1wdHlFcnJvciwgS2V5RXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhkYi5EQk5vdEZvdW5kRXJyb3IsIEtleUVycm9yKSkKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShNaXNjVGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSd0ZXN0X3N1aXRlJykKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X3BpY2tsZS5weSBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X3BpY2tsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTg0NzhkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfcGlja2xlLnB5CkBAIC0wLDAgKzEsNjggQEAKKworaW1wb3J0IG9zCitpbXBvcnQgcGlja2xlCitpbXBvcnQgc3lzCisKK2lmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBjUGlja2xlCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBjUGlja2xlID0gTm9uZQorZWxzZSA6CisgICAgY1BpY2tsZSA9IE5vbmUKKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdF9hbGwgaW1wb3J0IGRiLCB0ZXN0X3N1cHBvcnQsIGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCwgZ2V0X25ld19kYXRhYmFzZV9wYXRoCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIHBpY2tsZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJWZXJpZnkgdGhhdCBEQkVycm9yIGNhbiBiZSBwaWNrbGVkIGFuZCB1bnBpY2tsZWQiIiIKKyAgICBkYl9uYW1lID0gJ3Rlc3QtZGJvYmouZGInCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuaG9tZURpciA9IGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ2RiJyk6CisgICAgICAgICAgICBkZWwgc2VsZi5kYgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdlbnYnKToKKyAgICAgICAgICAgIGRlbCBzZWxmLmVudgorICAgICAgICB0ZXN0X3N1cHBvcnQucm10cmVlKHNlbGYuaG9tZURpcikKKworICAgIGRlZiBfYmFzZV90ZXN0X3BpY2tsZV9EQkVycm9yKHNlbGYsIHBpY2tsZSk6CisgICAgICAgIHNlbGYuZW52ID0gZGIuREJFbnYoKQorICAgICAgICBzZWxmLmVudi5vcGVuKHNlbGYuaG9tZURpciwgZGIuREJfQ1JFQVRFIHwgZGIuREJfSU5JVF9NUE9PTCkKKyAgICAgICAgc2VsZi5kYiA9IGRiLkRCKHNlbGYuZW52KQorICAgICAgICBzZWxmLmRiLm9wZW4oc2VsZi5kYl9uYW1lLCBkYi5EQl9IQVNILCBkYi5EQl9DUkVBVEUpCisgICAgICAgIHNlbGYuZGIucHV0KCdzcGFtJywgJ2VnZ3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGJbJ3NwYW0nXSwgJ2VnZ3MnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRiLnB1dCgnc3BhbScsICdoYW0nLCBmbGFncz1kYi5EQl9OT09WRVJXUklURSkKKyAgICAgICAgZXhjZXB0IGRiLkRCRXJyb3IsIGVnZzoKKyAgICAgICAgICAgIHBpY2tsZWRFZ2cgPSBwaWNrbGUuZHVtcHMoZWdnKQorICAgICAgICAgICAgI3ByaW50IHJlcHIocGlja2xlZEVnZykKKyAgICAgICAgICAgIHJvdHRlbkVnZyA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkRWdnKQorICAgICAgICAgICAgaWYgcm90dGVuRWdnLmFyZ3MgIT0gZWdnLmFyZ3Mgb3IgdHlwZShyb3R0ZW5FZ2cpICE9IHR5cGUoZWdnKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24sIChyb3R0ZW5FZ2csICchPScsIGVnZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbiwgIndoZXJlJ3MgbXkgREJFcnJvciBleGNlcHRpb24/IT8iCisKKyAgICAgICAgc2VsZi5kYi5jbG9zZSgpCisgICAgICAgIHNlbGYuZW52LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0MDFfcGlja2xlX0RCRXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuX2Jhc2VfdGVzdF9waWNrbGVfREJFcnJvcihwaWNrbGU9cGlja2xlKQorCisgICAgaWYgY1BpY2tsZToKKyAgICAgICAgZGVmIHRlc3QwMl9jUGlja2xlX0RCRXJyb3Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLl9iYXNlX3Rlc3RfcGlja2xlX0RCRXJyb3IocGlja2xlPWNQaWNrbGUpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShwaWNrbGVUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSd0ZXN0X3N1aXRlJykKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X3F1ZXVlLnB5IGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfcXVldWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxM2ZmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X3F1ZXVlLnB5CkBAIC0wLDAgKzEsMTYzIEBACisiIiIKK1Rlc3RDYXNlcyBmb3IgZXhlcmNpc2luZyBhIFF1ZXVlIERCLgorIiIiCisKK2ltcG9ydCBvcywgc3RyaW5nCitmcm9tIHBwcmludCBpbXBvcnQgcHByaW50CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIHZlcmJvc2UsIGdldF9uZXdfZGF0YWJhc2VfcGF0aAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBTaW1wbGVRdWV1ZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBnZXRfbmV3X2RhdGFiYXNlX3BhdGgoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgcGFzcworCisKKyAgICBkZWYgdGVzdDAxX2Jhc2ljKHNlbGYpOgorICAgICAgICAjIEJhc2ljIFF1ZXVlIHRlc3RzIHVzaW5nIHRoZSBkZXByZWNhdGVkIERCQ3Vyc29yLmNvbnN1bWUgbWV0aG9kLgorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnXG4nLCAnLT0nICogMzAKKyAgICAgICAgICAgIHByaW50ICJSdW5uaW5nICVzLnRlc3QwMV9iYXNpYy4uLiIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworCisgICAgICAgIGQgPSBkYi5EQigpCisgICAgICAgIGQuc2V0X3JlX2xlbig0MCkgICMgUXVldWVzIG11c3QgYmUgZml4ZWQgbGVuZ3RoCisgICAgICAgIGQub3BlbihzZWxmLmZpbGVuYW1lLCBkYi5EQl9RVUVVRSwgZGIuREJfQ1JFQVRFKQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiYmVmb3JlIGFwcGVuZHMiICsgJy0nICogMzAKKyAgICAgICAgICAgIHBwcmludChkLnN0YXQoKSkKKworICAgICAgICBmb3IgeCBpbiBzdHJpbmcubGV0dGVyczoKKyAgICAgICAgICAgIGQuYXBwZW5kKHggKiA0MCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgbGVuKHN0cmluZy5sZXR0ZXJzKSkKKworICAgICAgICBkLnB1dCgxMDAsICJzb21lIG1vcmUgZGF0YSIpCisgICAgICAgIGQucHV0KDEwMSwgImFuZCBzb21lIG1vcmUgIikKKyAgICAgICAgZC5wdXQoNzUsICAib3V0IG9mIG9yZGVyIikKKyAgICAgICAgZC5wdXQoMSwgICAicmVwbGFjZW1lbnQgZGF0YSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIGxlbihzdHJpbmcubGV0dGVycykrMykKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgImJlZm9yZSBjbG9zZSIgKyAnLScgKiAzMAorICAgICAgICAgICAgcHByaW50KGQuc3RhdCgpKQorCisgICAgICAgIGQuY2xvc2UoKQorICAgICAgICBkZWwgZAorICAgICAgICBkID0gZGIuREIoKQorICAgICAgICBkLm9wZW4oc2VsZi5maWxlbmFtZSkKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgImFmdGVyIG9wZW4iICsgJy0nICogMzAKKyAgICAgICAgICAgIHBwcmludChkLnN0YXQoKSkKKworICAgICAgICAjIFRlc3QgInR4biIgYXMgYSBwb3NpdGlvbmFsIHBhcmFtZXRlcgorICAgICAgICBkLmFwcGVuZCgib25lIG1vcmUiLCBOb25lKQorICAgICAgICAjIFRlc3QgInR4biIgYXMgYSBrZXl3b3JkIHBhcmFtZXRlcgorICAgICAgICBkLmFwcGVuZCgiYW5vdGhlciBvbmUiLCB0eG49Tm9uZSkKKworICAgICAgICBjID0gZC5jdXJzb3IoKQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiYWZ0ZXIgYXBwZW5kIiArICctJyAqIDMwCisgICAgICAgICAgICBwcHJpbnQoZC5zdGF0KCkpCisKKyAgICAgICAgcmVjID0gYy5jb25zdW1lKCkKKyAgICAgICAgd2hpbGUgcmVjOgorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCByZWMKKyAgICAgICAgICAgIHJlYyA9IGMuY29uc3VtZSgpCisgICAgICAgIGMuY2xvc2UoKQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiYWZ0ZXIgY29uc3VtZSBsb29wIiArICctJyAqIDMwCisgICAgICAgICAgICBwcHJpbnQoZC5zdGF0KCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDAsIFwKKyAgICAgICAgICAgICAgICJpZiB5b3Ugc2VlIHRoaXMgbWVzc2FnZSB0aGVuIHlvdSBuZWVkIHRvIHJlYnVpbGQgIiBcCisgICAgICAgICAgICAgICAiQmVya2VsZXkgREIgMy4xLjE3IHdpdGggdGhlIHBhdGNoIGluIHBhdGNoZXMvcWFtX3N0YXQuZGlmZiIpCisKKyAgICAgICAgZC5jbG9zZSgpCisKKworCisgICAgZGVmIHRlc3QwMl9iYXNpY1Bvc3QzMihzZWxmKToKKyAgICAgICAgIyBCYXNpYyBRdWV1ZSB0ZXN0cyB1c2luZyB0aGUgbmV3IERCLmNvbnN1bWUgbWV0aG9kIGluIERCIDMuMisKKyAgICAgICAgIyAoTm8gY3Vyc29yIG5lZWRlZCkKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDJfYmFzaWNQb3N0MzIuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBkID0gZGIuREIoKQorICAgICAgICBkLnNldF9yZV9sZW4oNDApICAjIFF1ZXVlcyBtdXN0IGJlIGZpeGVkIGxlbmd0aAorICAgICAgICBkLm9wZW4oc2VsZi5maWxlbmFtZSwgZGIuREJfUVVFVUUsIGRiLkRCX0NSRUFURSkKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgImJlZm9yZSBhcHBlbmRzIiArICctJyAqIDMwCisgICAgICAgICAgICBwcHJpbnQoZC5zdGF0KCkpCisKKyAgICAgICAgZm9yIHggaW4gc3RyaW5nLmxldHRlcnM6CisgICAgICAgICAgICBkLmFwcGVuZCh4ICogNDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIGxlbihzdHJpbmcubGV0dGVycykpCisKKyAgICAgICAgZC5wdXQoMTAwLCAic29tZSBtb3JlIGRhdGEiKQorICAgICAgICBkLnB1dCgxMDEsICJhbmQgc29tZSBtb3JlICIpCisgICAgICAgIGQucHV0KDc1LCAgIm91dCBvZiBvcmRlciIpCisgICAgICAgIGQucHV0KDEsICAgInJlcGxhY2VtZW50IGRhdGEiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCBsZW4oc3RyaW5nLmxldHRlcnMpKzMpCisKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJiZWZvcmUgY2xvc2UiICsgJy0nICogMzAKKyAgICAgICAgICAgIHBwcmludChkLnN0YXQoKSkKKworICAgICAgICBkLmNsb3NlKCkKKyAgICAgICAgZGVsIGQKKyAgICAgICAgZCA9IGRiLkRCKCkKKyAgICAgICAgZC5vcGVuKHNlbGYuZmlsZW5hbWUpCisgICAgICAgICNkLnNldF9nZXRfcmV0dXJuc19ub25lKHRydWUpCisKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJhZnRlciBvcGVuIiArICctJyAqIDMwCisgICAgICAgICAgICBwcHJpbnQoZC5zdGF0KCkpCisKKyAgICAgICAgZC5hcHBlbmQoIm9uZSBtb3JlIikKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgImFmdGVyIGFwcGVuZCIgKyAnLScgKiAzMAorICAgICAgICAgICAgcHByaW50KGQuc3RhdCgpKQorCisgICAgICAgIHJlYyA9IGQuY29uc3VtZSgpCisgICAgICAgIHdoaWxlIHJlYzoKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgcmVjCisgICAgICAgICAgICByZWMgPSBkLmNvbnN1bWUoKQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiYWZ0ZXIgY29uc3VtZSBsb29wIiArICctJyAqIDMwCisgICAgICAgICAgICBwcHJpbnQoZC5zdGF0KCkpCisKKyAgICAgICAgZC5jbG9zZSgpCisKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU2ltcGxlUXVldWVUZXN0Q2FzZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3Rlc3Rfc3VpdGUnKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfcmVjbm8ucHkgYi9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9yZWNuby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjY5NTZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfcmVjbm8ucHkKQEAgLTAsMCArMSwzMjAgQEAKKyIiIlRlc3RDYXNlcyBmb3IgZXhlcmNpc2luZyBhIFJlY25vIERCLgorIiIiCisKK2ltcG9ydCBvcywgc3lzCitpbXBvcnQgZXJybm8KK2Zyb20gcHByaW50IGltcG9ydCBwcHJpbnQKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRlc3RfYWxsIGltcG9ydCBkYiwgdGVzdF9zdXBwb3J0LCB2ZXJib3NlLCBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgsIGdldF9uZXdfZGF0YWJhc2VfcGF0aAorCitsZXR0ZXJzID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgU2ltcGxlUmVjbm9UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaWYgKHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNykpIG9yICgoc3lzLnZlcnNpb25faW5mbyA+PSAoMywgMCkpIGFuZAorICAgICAgICAgICAgKHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMikpKSA6CisgICAgICAgIGRlZiBhc3NlcnRJc0luc3RhbmNlKHNlbGYsIG9iaiwgZGF0YXR5cGUsIG1zZz1Ob25lKSA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5hc3NlcnRFcXVhbCh0eXBlKG9iaiksIGRhdGF0eXBlLCBtc2c9bXNnKQorICAgICAgICBkZWYgYXNzZXJ0R3JlYXRlckVxdWFsKHNlbGYsIGEsIGIsIG1zZz1Ob25lKSA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5hc3NlcnRUcnVlKGE+PWIsIG1zZz1tc2cpCisKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGdldF9uZXdfZGF0YWJhc2VfcGF0aCgpCisgICAgICAgIHNlbGYuaG9tZURpciA9IE5vbmUKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICBpZiBzZWxmLmhvbWVEaXI6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQucm10cmVlKHNlbGYuaG9tZURpcikKKworICAgIGRlZiB0ZXN0MDFfYmFzaWMoc2VsZik6CisgICAgICAgIGQgPSBkYi5EQigpCisKKyAgICAgICAgZ2V0X3JldHVybnNfbm9uZSA9IGQuc2V0X2dldF9yZXR1cm5zX25vbmUoMikKKyAgICAgICAgZC5zZXRfZ2V0X3JldHVybnNfbm9uZShnZXRfcmV0dXJuc19ub25lKQorCisgICAgICAgIGQub3BlbihzZWxmLmZpbGVuYW1lLCBkYi5EQl9SRUNOTywgZGIuREJfQ1JFQVRFKQorCisgICAgICAgIGZvciB4IGluIGxldHRlcnM6CisgICAgICAgICAgICByZWNubyA9IGQuYXBwZW5kKHggKiA2MCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZWNubywgaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocmVjbm8sIDEpCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50IHJlY25vLAorCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50CisKKyAgICAgICAgc3RhdCA9IGQuc3RhdCgpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcHJpbnQoc3RhdCkKKworICAgICAgICBmb3IgcmVjbm8gaW4gcmFuZ2UoMSwgbGVuKGQpKzEpOgorICAgICAgICAgICAgZGF0YSA9IGRbcmVjbm9dCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50IGRhdGEKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRhdGEsIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZC5nZXQocmVjbm8pKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBkWzBdICAjIFRoaXMgc2hvdWxkIHJhaXNlIGEgS2V5RXJyb3IhPyE/IQorICAgICAgICBleGNlcHQgZGIuREJJbnZhbGlkQXJnRXJyb3IsIHZhbDoKKyAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNikgOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsWzBdLCBkYi5FSU5WQUwpCisgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5FSU5WQUwpCisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIikKKworICAgICAgICAjIHRlc3QgdGhhdCBoYXNfa2V5IHJhaXNlcyBEQiBleGNlcHRpb25zIChmaXhlZCBpbiBweWJzZGRiIDQuMy4yKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkLmhhc19rZXkoMCkKKyAgICAgICAgZXhjZXB0IGRiLkRCRXJyb3IsIHZhbDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiaGFzX2tleSBkaWQgbm90IHJhaXNlIGEgcHJvcGVyIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IGRbMTAwXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IGQuZ2V0KDEwMCkKKyAgICAgICAgZXhjZXB0IGRiLkRCTm90Rm91bmRFcnJvciwgdmFsOgorICAgICAgICAgICAgaWYgZ2V0X3JldHVybnNfbm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInVuZXhwZWN0ZWQgZXhjZXB0aW9uIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgTm9uZSkKKworICAgICAgICBrZXlzID0gZC5rZXlzKCkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50IGtleXMKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGtleXMsIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShrZXlzWzBdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXMpLCBsZW4oZCkpCisKKyAgICAgICAgaXRlbXMgPSBkLml0ZW1zKCkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHBwcmludChpdGVtcykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0ZW1zLCBsaXN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXRlbXNbMF0sIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdGVtc1swXSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdGVtc1swXVswXSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXRlbXNbMF1bMV0sIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXRlbXMpLCBsZW4oZCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuaGFzX2tleSgyNSkpCisKKyAgICAgICAgZGVsIGRbMjVdCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZC5oYXNfa2V5KDI1KSkKKworICAgICAgICBkLmRlbGV0ZSgxMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkLmhhc19rZXkoMTMpKQorCisgICAgICAgIGRhdGEgPSBkLmdldF9ib3RoKDI2LCAieiIgKiA2MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAieiIgKiA2MCwgJ3dhcyAlcicgJSBkYXRhKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgZGF0YQorCisgICAgICAgIGZkID0gZC5mZCgpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCBmZAorCisgICAgICAgIGMgPSBkLmN1cnNvcigpCisgICAgICAgIHJlYyA9IGMuZmlyc3QoKQorICAgICAgICB3aGlsZSByZWM6CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50IHJlYworICAgICAgICAgICAgcmVjID0gYy5uZXh0KCkKKworICAgICAgICBjLnNldCg1MCkKKyAgICAgICAgcmVjID0gYy5jdXJyZW50KCkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50IHJlYworCisgICAgICAgIGMucHV0KC0xLCAiYSByZXBsYWNlbWVudCByZWNvcmQiLCBkYi5EQl9DVVJSRU5UKQorCisgICAgICAgIGMuc2V0KDUwKQorICAgICAgICByZWMgPSBjLmN1cnJlbnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYywgKDUwLCAiYSByZXBsYWNlbWVudCByZWNvcmQiKSkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50IHJlYworCisgICAgICAgIHJlYyA9IGMuc2V0X3JhbmdlKDMwKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgcmVjCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgbm9uLWV4aXN0ZW50IGtleSBsb29rdXBzIHdvcmsgKGFuZCB0aGF0CisgICAgICAgICMgREJDX3NldF9yYW5nZSBkb2Vzbid0IGhhdmUgYSBtZW1sZWFrIHVuZGVyIHZhbGdyaW5kKQorICAgICAgICByZWMgPSBjLnNldF9yYW5nZSg5OTk5OTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjLCBOb25lKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgcmVjCisKKyAgICAgICAgYy5jbG9zZSgpCisgICAgICAgIGQuY2xvc2UoKQorCisgICAgICAgIGQgPSBkYi5EQigpCisgICAgICAgIGQub3BlbihzZWxmLmZpbGVuYW1lKQorICAgICAgICBjID0gZC5jdXJzb3IoKQorCisgICAgICAgICMgcHV0IGEgcmVjb3JkIGJleW9uZCB0aGUgY29uc2VjdXRpdmUgZW5kIG9mIHRoZSByZWNubydzCisgICAgICAgIGRbMTAwXSA9ICJ3YXkgb3V0IHRoZXJlIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMTAwXSwgIndheSBvdXQgdGhlcmUiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBkWzk5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZC5nZXQoOTkpCisgICAgICAgIGV4Y2VwdCBkYi5EQktleUVtcHR5RXJyb3IsIHZhbDoKKyAgICAgICAgICAgIGlmIGdldF9yZXR1cm5zX25vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmV4cGVjdGVkIERCS2V5RW1wdHlFcnJvciBleGNlcHRpb24iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxbMF0sIGRiLkRCX0tFWUVNUFRZKQorICAgICAgICAgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5hcmdzWzBdLCBkYi5EQl9LRVlFTVBUWSkKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCB2YWwKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBnZXRfcmV0dXJuc19ub25lOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIikKKworICAgICAgICByZWMgPSBjLnNldCg0MCkKKyAgICAgICAgd2hpbGUgcmVjOgorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCByZWMKKyAgICAgICAgICAgIHJlYyA9IGMubmV4dCgpCisKKyAgICAgICAgYy5jbG9zZSgpCisgICAgICAgIGQuY2xvc2UoKQorCisgICAgZGVmIHRlc3QwMl9XaXRoU291cmNlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQSBSZWNubyBmaWxlIHRoYXQgaXMgZ2l2ZW4gYSAiYmFja2luZyBzb3VyY2UgZmlsZSIgaXMgZXNzZW50aWFsbHkgYQorICAgICAgICBzaW1wbGUgQVNDSUkgZmlsZS4gIE5vcm1hbGx5IGVhY2ggcmVjb3JkIGlzIGRlbGltaXRlZCBieSBcbiBhbmQgc28gaXMKKyAgICAgICAganVzdCBhIGxpbmUgaW4gdGhlIGZpbGUsIGJ1dCB5b3UgY2FuIHNldCBhIGRpZmZlcmVudCByZWNvcmQgZGVsaW1pdGVyCisgICAgICAgIGlmIG5lZWRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGhvbWVEaXIgPSBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgoKQorICAgICAgICBzZWxmLmhvbWVEaXIgPSBob21lRGlyCisgICAgICAgIHNvdXJjZSA9IG9zLnBhdGguam9pbihob21lRGlyLCAndGVzdF9yZWNuby50eHQnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihob21lRGlyKToKKyAgICAgICAgICAgIG9zLm1rZGlyKGhvbWVEaXIpCisgICAgICAgIGYgPSBvcGVuKHNvdXJjZSwgJ3cnKSAjIGNyZWF0ZSB0aGUgZmlsZQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBkID0gZGIuREIoKQorICAgICAgICAjIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUsIGp1c3QgY2hlY2tpbmcgaWYgYm90aCBpbnQKKyAgICAgICAgZC5zZXRfcmVfZGVsaW0oMHgwQSkKKyAgICAgICAgZC5zZXRfcmVfZGVsaW0oJ1xuJykgICMgYW5kIGNoYXIgY2FuIGJlIHVzZWQuLi4KKyAgICAgICAgZC5zZXRfcmVfc291cmNlKHNvdXJjZSkKKyAgICAgICAgZC5vcGVuKHNlbGYuZmlsZW5hbWUsIGRiLkRCX1JFQ05PLCBkYi5EQl9DUkVBVEUpCisKKyAgICAgICAgZGF0YSA9ICJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIHRoZSBsYXp5IGRvZyIuc3BsaXQoKQorICAgICAgICBmb3IgZGF0dW0gaW4gZGF0YToKKyAgICAgICAgICAgIGQuYXBwZW5kKGRhdHVtKQorICAgICAgICBkLnN5bmMoKQorICAgICAgICBkLmNsb3NlKCkKKworICAgICAgICAjIGdldCB0aGUgdGV4dCBmcm9tIHRoZSBiYWNraW5nIHNvdXJjZQorICAgICAgICBmID0gb3Blbihzb3VyY2UsICdyJykKKyAgICAgICAgdGV4dCA9IGYucmVhZCgpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICB0ZXh0ID0gdGV4dC5zdHJpcCgpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCB0ZXh0CisgICAgICAgICAgICBwcmludCBkYXRhCisgICAgICAgICAgICBwcmludCB0ZXh0LnNwbGl0KCdcbicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LnNwbGl0KCdcbicpLCBkYXRhKQorCisgICAgICAgICMgb3BlbiBhcyBhIERCIGFnYWluCisgICAgICAgIGQgPSBkYi5EQigpCisgICAgICAgIGQuc2V0X3JlX3NvdXJjZShzb3VyY2UpCisgICAgICAgIGQub3BlbihzZWxmLmZpbGVuYW1lLCBkYi5EQl9SRUNOTykKKworICAgICAgICBkWzNdID0gJ3JlZGRpc2gtYnJvd24nCisgICAgICAgIGRbOF0gPSAnY29tYXRvc2UnCisKKyAgICAgICAgZC5zeW5jKCkKKyAgICAgICAgZC5jbG9zZSgpCisKKyAgICAgICAgZiA9IG9wZW4oc291cmNlLCAncicpCisgICAgICAgIHRleHQgPSBmLnJlYWQoKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgdGV4dCA9IHRleHQuc3RyaXAoKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgdGV4dAorICAgICAgICAgICAgcHJpbnQgdGV4dC5zcGxpdCgnXG4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC5zcGxpdCgnXG4nKSwKKyAgICAgICAgICAgIlRoZSBxdWljayByZWRkaXNoLWJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgY29tYXRvc2UgZG9nIi5zcGxpdCgpKQorCisgICAgZGVmIHRlc3QwM19GaXhlZExlbmd0aChzZWxmKToKKyAgICAgICAgZCA9IGRiLkRCKCkKKyAgICAgICAgZC5zZXRfcmVfbGVuKDQwKSAgIyBmaXhlZCBsZW5ndGggcmVjb3JkcywgNDAgYnl0ZXMgbG9uZworICAgICAgICBkLnNldF9yZV9wYWQoJy0nKSAjIHNldHMgdGhlIHBhZCBjaGFyYWN0ZXIuLi4KKyAgICAgICAgZC5zZXRfcmVfcGFkKDQ1KSAgIyAuLi50ZXN0IGJvdGggaW50IGFuZCBjaGFyCisgICAgICAgIGQub3BlbihzZWxmLmZpbGVuYW1lLCBkYi5EQl9SRUNOTywgZGIuREJfQ1JFQVRFKQorCisgICAgICAgIGZvciB4IGluIGxldHRlcnM6CisgICAgICAgICAgICBkLmFwcGVuZCh4ICogMzUpICAgICMgVGhlc2Ugd2lsbCBiZSBwYWRkZWQKKworICAgICAgICBkLmFwcGVuZCgnLicgKiA0MCkgICAgICAjIHRoaXMgb25lIHdpbGwgYmUgZXhhY3QKKworICAgICAgICB0cnk6ICAgICAgICAgICAgICAgICAgICAjIHRoaXMgb25lIHdpbGwgZmFpbAorICAgICAgICAgICAgZC5hcHBlbmQoJ2JhZCcgKiAyMCkKKyAgICAgICAgZXhjZXB0IGRiLkRCSW52YWxpZEFyZ0Vycm9yLCB2YWw6CisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbFswXSwgZGIuRUlOVkFMKQorICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuYXJnc1swXSwgZGIuRUlOVkFMKQorICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgdmFsCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgYyA9IGQuY3Vyc29yKCkKKyAgICAgICAgcmVjID0gYy5maXJzdCgpCisgICAgICAgIHdoaWxlIHJlYzoKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgcmVjCisgICAgICAgICAgICByZWMgPSBjLm5leHQoKQorCisgICAgICAgIGMuY2xvc2UoKQorICAgICAgICBkLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0MDRfZ2V0X3NpemVfZW1wdHkoc2VsZikgOgorICAgICAgICBkID0gZGIuREIoKQorICAgICAgICBkLm9wZW4oc2VsZi5maWxlbmFtZSwgZGJ0eXBlPWRiLkRCX1JFQ05PLCBmbGFncz1kYi5EQl9DUkVBVEUpCisKKyAgICAgICAgcm93X2lkID0gZC5hcHBlbmQoJyAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGQuZ2V0X3NpemUoa2V5PXJvd19pZCkpCisgICAgICAgIHJvd19pZCA9IGQuYXBwZW5kKCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGQuZ2V0X3NpemUoa2V5PXJvd19pZCkpCisKKworCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU2ltcGxlUmVjbm9UZXN0Q2FzZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3Rlc3Rfc3VpdGUnKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfcmVwbGljYXRpb24ucHkgYi9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9yZXBsaWNhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmFiMmRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3RfcmVwbGljYXRpb24ucHkKQEAgLTAsMCArMSw1NDMgQEAKKyIiIlRlc3RDYXNlcyBmb3IgZGlzdHJpYnV0ZWQgdHJhbnNhY3Rpb25zLgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRlc3RfYWxsIGltcG9ydCBkYiwgdGVzdF9zdXBwb3J0LCBoYXZlX3RocmVhZHMsIHZlcmJvc2UsIFwKKyAgICAgICAgZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoLCBnZXRfbmV3X2RhdGFiYXNlX3BhdGgKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBEQlJlcGxpY2F0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKSA6CisgICAgZGVmIHNldFVwKHNlbGYpIDoKKyAgICAgICAgc2VsZi5ob21lRGlyTWFzdGVyID0gZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoKCkKKyAgICAgICAgc2VsZi5ob21lRGlyQ2xpZW50ID0gZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoKCkKKworICAgICAgICBzZWxmLmRiZW52TWFzdGVyID0gZGIuREJFbnYoKQorICAgICAgICBzZWxmLmRiZW52Q2xpZW50ID0gZGIuREJFbnYoKQorCisgICAgICAgICMgTXVzdCB1c2UgIkRCX1RIUkVBRCIgYmVjYXVzZSB0aGUgUmVwbGljYXRpb24gTWFuYWdlciB3aWxsCisgICAgICAgICMgYmUgZXhlY3V0ZWQgaW4gb3RoZXIgdGhyZWFkcyBidXQgd2lsbCB1c2UgdGhlIHNhbWUgZW52aXJvbm1lbnQuCisgICAgICAgICMgaHR0cDovL2ZvcnVtcy5vcmFjbGUuY29tL2ZvcnVtcy90aHJlYWQuanNwYT90aHJlYWRJRD02NDU3ODgmdHN0YXJ0PTAKKyAgICAgICAgc2VsZi5kYmVudk1hc3Rlci5vcGVuKHNlbGYuaG9tZURpck1hc3RlciwgZGIuREJfQ1JFQVRFIHwgZGIuREJfSU5JVF9UWE4KKyAgICAgICAgICAgICAgICB8IGRiLkRCX0lOSVRfTE9HIHwgZGIuREJfSU5JVF9NUE9PTCB8IGRiLkRCX0lOSVRfTE9DSyB8CisgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9SRVAgfCBkYi5EQl9SRUNPVkVSIHwgZGIuREJfVEhSRUFELCAwNjY2KQorICAgICAgICBzZWxmLmRiZW52Q2xpZW50Lm9wZW4oc2VsZi5ob21lRGlyQ2xpZW50LCBkYi5EQl9DUkVBVEUgfCBkYi5EQl9JTklUX1RYTgorICAgICAgICAgICAgICAgIHwgZGIuREJfSU5JVF9MT0cgfCBkYi5EQl9JTklUX01QT09MIHwgZGIuREJfSU5JVF9MT0NLIHwKKyAgICAgICAgICAgICAgICBkYi5EQl9JTklUX1JFUCB8IGRiLkRCX1JFQ09WRVIgfCBkYi5EQl9USFJFQUQsIDA2NjYpCisKKyAgICAgICAgc2VsZi5jb25maXJtZWRfbWFzdGVyPXNlbGYuY2xpZW50X3N0YXJ0dXBkb25lPUZhbHNlCisgICAgICAgIGRlZiBjb25maXJtZWRfbWFzdGVyKGEsYixjKSA6CisgICAgICAgICAgICBpZiBiPT1kYi5EQl9FVkVOVF9SRVBfTUFTVEVSIDoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpcm1lZF9tYXN0ZXI9VHJ1ZQorCisgICAgICAgIGRlZiBjbGllbnRfc3RhcnR1cGRvbmUoYSxiLGMpIDoKKyAgICAgICAgICAgIGlmIGI9PWRiLkRCX0VWRU5UX1JFUF9TVEFSVFVQRE9ORSA6CisgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRfc3RhcnR1cGRvbmU9VHJ1ZQorCisgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIuc2V0X2V2ZW50X25vdGlmeShjb25maXJtZWRfbWFzdGVyKQorICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnNldF9ldmVudF9ub3RpZnkoY2xpZW50X3N0YXJ0dXBkb25lKQorCisgICAgICAgICNzZWxmLmRiZW52TWFzdGVyLnNldF92ZXJib3NlKGRiLkRCX1ZFUkJfUkVQTElDQVRJT04sIFRydWUpCisgICAgICAgICNzZWxmLmRiZW52TWFzdGVyLnNldF92ZXJib3NlKGRiLkRCX1ZFUkJfRklMRU9QU19BTEwsIFRydWUpCisgICAgICAgICNzZWxmLmRiZW52Q2xpZW50LnNldF92ZXJib3NlKGRiLkRCX1ZFUkJfUkVQTElDQVRJT04sIFRydWUpCisgICAgICAgICNzZWxmLmRiZW52Q2xpZW50LnNldF92ZXJib3NlKGRiLkRCX1ZFUkJfRklMRU9QU19BTEwsIFRydWUpCisKKyAgICAgICAgc2VsZi5kYk1hc3RlciA9IHNlbGYuZGJDbGllbnQgPSBOb25lCisKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kYkNsaWVudCA6CisgICAgICAgICAgICBzZWxmLmRiQ2xpZW50LmNsb3NlKCkKKyAgICAgICAgaWYgc2VsZi5kYk1hc3RlciA6CisgICAgICAgICAgICBzZWxmLmRiTWFzdGVyLmNsb3NlKCkKKworICAgICAgICAjIEhlcmUgd2UgYXNzaWduIGR1bW15IGV2ZW50IGhhbmRsZXJzIHRvIGFsbG93IEdDIG9mIHRoZSB0ZXN0IG9iamVjdC4KKyAgICAgICAgIyBTaW5jZSB0aGUgZHVtbXkgaGFuZGxlciBkb2Vzbid0IHVzZSBhbnkgb3V0ZXIgc2NvcGUgdmFyaWFibGUsIGl0CisgICAgICAgICMgZG9lc24ndCBrZWVwIGFueSByZWZlcmVuY2UgdG8gdGhlIHRlc3Qgb2JqZWN0LgorICAgICAgICBkZWYgZHVtbXkoKmFyZ3MpIDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5kYmVudk1hc3Rlci5zZXRfZXZlbnRfbm90aWZ5KGR1bW15KQorICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnNldF9ldmVudF9ub3RpZnkoZHVtbXkpCisKKyAgICAgICAgc2VsZi5kYmVudkNsaWVudC5jbG9zZSgpCisgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIuY2xvc2UoKQorICAgICAgICB0ZXN0X3N1cHBvcnQucm10cmVlKHNlbGYuaG9tZURpckNsaWVudCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJtdHJlZShzZWxmLmhvbWVEaXJNYXN0ZXIpCisKK2NsYXNzIERCUmVwbGljYXRpb25NYW5hZ2VyKERCUmVwbGljYXRpb24pIDoKKyAgICBkZWYgdGVzdDAxX2Jhc2ljX3JlcGxpY2F0aW9uKHNlbGYpIDoKKyAgICAgICAgbWFzdGVyX3BvcnQgPSB0ZXN0X3N1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCisgICAgICAgIGNsaWVudF9wb3J0ID0gdGVzdF9zdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQorICAgICAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDUsIDIpIDoKKyAgICAgICAgICAgIHNlbGYuc2l0ZSA9IHNlbGYuZGJlbnZNYXN0ZXIucmVwbWdyX3NpdGUoIjEyNy4wLjAuMSIsIG1hc3Rlcl9wb3J0KQorICAgICAgICAgICAgc2VsZi5zaXRlLnNldF9jb25maWcoZGIuREJfR1JPVVBfQ1JFQVRPUiwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuc2l0ZS5zZXRfY29uZmlnKGRiLkRCX0xPQ0FMX1NJVEUsIFRydWUpCisgICAgICAgICAgICBzZWxmLnNpdGUyID0gc2VsZi5kYmVudk1hc3Rlci5yZXBtZ3Jfc2l0ZSgiMTI3LjAuMC4xIiwgY2xpZW50X3BvcnQpCisKKyAgICAgICAgICAgIHNlbGYuc2l0ZTMgPSBzZWxmLmRiZW52Q2xpZW50LnJlcG1ncl9zaXRlKCIxMjcuMC4wLjEiLCBtYXN0ZXJfcG9ydCkKKyAgICAgICAgICAgIHNlbGYuc2l0ZTMuc2V0X2NvbmZpZyhkYi5EQl9CT09UU1RSQVBfSEVMUEVSLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5zaXRlNCA9IHNlbGYuZGJlbnZDbGllbnQucmVwbWdyX3NpdGUoIjEyNy4wLjAuMSIsIGNsaWVudF9wb3J0KQorICAgICAgICAgICAgc2VsZi5zaXRlNC5zZXRfY29uZmlnKGRiLkRCX0xPQ0FMX1NJVEUsIFRydWUpCisKKyAgICAgICAgICAgIGQgPSB7CisgICAgICAgICAgICAgICAgICAgIGRiLkRCX0JPT1RTVFJBUF9IRUxQRVI6IFtGYWxzZSwgRmFsc2UsIFRydWUsIEZhbHNlXSwKKyAgICAgICAgICAgICAgICAgICAgZGIuREJfR1JPVVBfQ1JFQVRPUjogW1RydWUsIEZhbHNlLCBGYWxzZSwgRmFsc2VdLAorICAgICAgICAgICAgICAgICAgICBkYi5EQl9MRUdBQ1k6IFtGYWxzZSwgRmFsc2UsIEZhbHNlLCBGYWxzZV0sCisgICAgICAgICAgICAgICAgICAgIGRiLkRCX0xPQ0FMX1NJVEU6IFtUcnVlLCBGYWxzZSwgRmFsc2UsIFRydWVdLAorICAgICAgICAgICAgICAgICAgICBkYi5EQl9SRVBNR1JfUEVFUjogW0ZhbHNlLCBGYWxzZSwgRmFsc2UsIEZhbHNlIF0sCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgaSwgaiBpbiBkLml0ZW1zKCkgOgorICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHppcChbc2VsZi5zaXRlLCBzZWxmLnNpdGUyLCBzZWxmLnNpdGUzLCBzZWxmLnNpdGU0XSwgaikgOgorICAgICAgICAgICAgICAgICAgICBpZiB2IDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrLmdldF9jb25maWcoaSkpCisgICAgICAgICAgICAgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShrLmdldF9jb25maWcoaSkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5zaXRlLmdldF9laWQoKSwgc2VsZi5zaXRlMi5nZXRfZWlkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYuc2l0ZTMuZ2V0X2VpZCgpLCBzZWxmLnNpdGU0LmdldF9laWQoKSkKKworICAgICAgICAgICAgZm9yIGksIGogaW4gemlwKFtzZWxmLnNpdGUsIHNlbGYuc2l0ZTIsIHNlbGYuc2l0ZTMsIHNlbGYuc2l0ZTRdLCBcCisgICAgICAgICAgICAgICAgICAgIFttYXN0ZXJfcG9ydCwgY2xpZW50X3BvcnQsIG1hc3Rlcl9wb3J0LCBjbGllbnRfcG9ydF0pIDoKKyAgICAgICAgICAgICAgICBhZGRyID0gaS5nZXRfYWRkcmVzcygpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRyLCAoIjEyNy4wLjAuMSIsIGopKQorCisgICAgICAgICAgICBmb3IgaSBpbiBbc2VsZi5zaXRlLCBzZWxmLnNpdGUyXSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLmdldF9hZGRyZXNzKCksCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcG1ncl9zaXRlX2J5X2VpZChpLmdldF9laWQoKSkuZ2V0X2FkZHJlc3MoKSkKKyAgICAgICAgICAgIGZvciBpIGluIFtzZWxmLnNpdGUzLCBzZWxmLnNpdGU0XSA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLmdldF9hZGRyZXNzKCksCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnJlcG1ncl9zaXRlX2J5X2VpZChpLmdldF9laWQoKSkuZ2V0X2FkZHJlc3MoKSkKKyAgICAgICAgZWxzZSA6CisgICAgICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcG1ncl9zZXRfbG9jYWxfc2l0ZSgiMTI3LjAuMC4xIiwgbWFzdGVyX3BvcnQpCisgICAgICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnJlcG1ncl9zZXRfbG9jYWxfc2l0ZSgiMTI3LjAuMC4xIiwgY2xpZW50X3BvcnQpCisgICAgICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcG1ncl9hZGRfcmVtb3RlX3NpdGUoIjEyNy4wLjAuMSIsIGNsaWVudF9wb3J0KQorICAgICAgICAgICAgc2VsZi5kYmVudkNsaWVudC5yZXBtZ3JfYWRkX3JlbW90ZV9zaXRlKCIxMjcuMC4wLjEiLCBtYXN0ZXJfcG9ydCkKKworICAgICAgICAgICAgc2VsZi5kYmVudk1hc3Rlci5yZXBfc2V0X25zaXRlcygyKQorICAgICAgICAgICAgc2VsZi5kYmVudkNsaWVudC5yZXBfc2V0X25zaXRlcygyKQorCisgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIucmVwX3NldF9wcmlvcml0eSgxMCkKKyAgICAgICAgc2VsZi5kYmVudkNsaWVudC5yZXBfc2V0X3ByaW9yaXR5KDApCisKKyAgICAgICAgc2VsZi5kYmVudk1hc3Rlci5yZXBfc2V0X3RpbWVvdXQoZGIuREJfUkVQX0NPTk5FQ1RJT05fUkVUUlksMTAwMTIzKQorICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnJlcF9zZXRfdGltZW91dChkYi5EQl9SRVBfQ09OTkVDVElPTl9SRVRSWSwxMDAzMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYmVudk1hc3Rlci5yZXBfZ2V0X3RpbWVvdXQoCisgICAgICAgICAgICBkYi5EQl9SRVBfQ09OTkVDVElPTl9SRVRSWSksIDEwMDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52Q2xpZW50LnJlcF9nZXRfdGltZW91dCgKKyAgICAgICAgICAgIGRiLkRCX1JFUF9DT05ORUNUSU9OX1JFVFJZKSwgMTAwMzIxKQorCisgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIucmVwX3NldF90aW1lb3V0KGRiLkRCX1JFUF9FTEVDVElPTl9USU1FT1VULCAxMDAyMzQpCisgICAgICAgIHNlbGYuZGJlbnZDbGllbnQucmVwX3NldF90aW1lb3V0KGRiLkRCX1JFUF9FTEVDVElPTl9USU1FT1VULCAxMDA0MzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYmVudk1hc3Rlci5yZXBfZ2V0X3RpbWVvdXQoCisgICAgICAgICAgICBkYi5EQl9SRVBfRUxFQ1RJT05fVElNRU9VVCksIDEwMDIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52Q2xpZW50LnJlcF9nZXRfdGltZW91dCgKKyAgICAgICAgICAgIGRiLkRCX1JFUF9FTEVDVElPTl9USU1FT1VUKSwgMTAwNDMyKQorCisgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIucmVwX3NldF90aW1lb3V0KGRiLkRCX1JFUF9FTEVDVElPTl9SRVRSWSwgMTAwMzQ1KQorICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnJlcF9zZXRfdGltZW91dChkYi5EQl9SRVBfRUxFQ1RJT05fUkVUUlksIDEwMDU0MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52TWFzdGVyLnJlcF9nZXRfdGltZW91dCgKKyAgICAgICAgICAgIGRiLkRCX1JFUF9FTEVDVElPTl9SRVRSWSksIDEwMDM0NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52Q2xpZW50LnJlcF9nZXRfdGltZW91dCgKKyAgICAgICAgICAgIGRiLkRCX1JFUF9FTEVDVElPTl9SRVRSWSksIDEwMDU0MykKKworICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcG1ncl9zZXRfYWNrX3BvbGljeShkYi5EQl9SRVBNR1JfQUNLU19BTEwpCisgICAgICAgIHNlbGYuZGJlbnZDbGllbnQucmVwbWdyX3NldF9hY2tfcG9saWN5KGRiLkRCX1JFUE1HUl9BQ0tTX0FMTCkKKworICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcG1ncl9zdGFydCgxLCBkYi5EQl9SRVBfTUFTVEVSKTsKKyAgICAgICAgc2VsZi5kYmVudkNsaWVudC5yZXBtZ3Jfc3RhcnQoMSwgZGIuREJfUkVQX0NMSUVOVCk7CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52TWFzdGVyLnJlcF9nZXRfbnNpdGVzKCksMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52Q2xpZW50LnJlcF9nZXRfbnNpdGVzKCksMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52TWFzdGVyLnJlcF9nZXRfcHJpb3JpdHkoKSwxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52Q2xpZW50LnJlcF9nZXRfcHJpb3JpdHkoKSwwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGJlbnZNYXN0ZXIucmVwbWdyX2dldF9hY2tfcG9saWN5KCksCisgICAgICAgICAgICAgICAgZGIuREJfUkVQTUdSX0FDS1NfQUxMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGJlbnZDbGllbnQucmVwbWdyX2dldF9hY2tfcG9saWN5KCksCisgICAgICAgICAgICAgICAgZGIuREJfUkVQTUdSX0FDS1NfQUxMKQorCisgICAgICAgICMgVGhlIHRpbWVvdXQgaXMgbmVjZXNzYXJ5IGluIEJEQiA0LjUsIHNpbmNlIERCX0VWRU5UX1JFUF9TVEFSVFVQRE9ORQorICAgICAgICAjIGlzIG5vdCBnZW5lcmF0ZWQgaWYgdGhlIG1hc3RlciBoYXMgbm8gbmV3IHRyYW5zYWN0aW9ucy4KKyAgICAgICAgIyBUaGlzIGlzIHNvbHZlZCBpbiBCREIgNC42ICgjMTU1NDIpLgorICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICB0aW1lb3V0ID0gdGltZS50aW1lKCkrNjAKKyAgICAgICAgd2hpbGUgKHRpbWUudGltZSgpPHRpbWVvdXQpIGFuZCBub3QgKHNlbGYuY29uZmlybWVkX21hc3RlciBhbmQgc2VsZi5jbGllbnRfc3RhcnR1cGRvbmUpIDoKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMikKKyAgICAgICAgIyBzZWxmLmNsaWVudF9zdGFydHVwZG9uZSBkb2VzIG5vdCBhbHdheXMgZ2V0IHNldCB0byBUcnVlIHdpdGhpbgorICAgICAgICAjIHRoZSB0aW1lb3V0LiAgT24gd2luZG93cyB0aGlzIG1heSBiZSBhIGRlZXAgaXNzdWUsIG9uIG90aGVyCisgICAgICAgICMgcGxhdGZvcm1zIGl0IGlzIGxpa2VseSBqdXN0IGEgdGltaW5nIGlzc3VlLCBlc3BlY2lhbGx5IG9uIHNsb3cKKyAgICAgICAgIyB2aXJ0aG9zdCBidWlsZGJvdHMgKHNlZSBpc3N1ZSAzODkyIGZvciBtb3JlKS4gIEV2ZW4gdGhvdWdoCisgICAgICAgICMgdGhlIHRpbWVvdXQgdHJpZ2dlcnMsIHRoZSByZXN0IG9mIHRoaXMgdGVzdCBtZXRob2QgdXN1YWxseSBwYXNzZXMKKyAgICAgICAgIyAoYnV0IG5vdCBhbGwgb2YgaXQgYWx3YXlzLCBzZWUgYmVsb3cpLiAgU28gd2UganVzdCBub3RlIHRoZQorICAgICAgICAjIHRpbWVvdXQgb24gc3RkZXJyIGFuZCBrZWVwIHNvbGRlcmluZyBvbi4KKyAgICAgICAgaWYgdGltZS50aW1lKCk+dGltZW91dDoKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICgiWFhYOiB0aW1lb3V0IGhhcHBlbmVkIGJlZm9yZSIKKyAgICAgICAgICAgICAgICAic3RhcnR1cCB3YXMgY29uZmlybWVkIC0gc2VlIGlzc3VlIDM4OTIiKQorICAgICAgICAgICAgc3RhcnR1cF90aW1lb3V0ID0gVHJ1ZQorCisgICAgICAgIGQgPSBzZWxmLmRiZW52TWFzdGVyLnJlcG1ncl9zaXRlX2xpc3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMSkKKyAgICAgICAgZCA9IGQudmFsdWVzKClbMF0gICMgVGhlcmUgaXMgb25seSBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzBdLCAiMTI3LjAuMC4xIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzFdLCBjbGllbnRfcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChkWzJdPT1kYi5EQl9SRVBNR1JfQ09OTkVDVEVEKSBvciBcCisgICAgICAgICAgICAgICAgKGRbMl09PWRiLkRCX1JFUE1HUl9ESVNDT05ORUNURUQpKQorCisgICAgICAgIGQgPSBzZWxmLmRiZW52Q2xpZW50LnJlcG1ncl9zaXRlX2xpc3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMSkKKyAgICAgICAgZCA9IGQudmFsdWVzKClbMF0gICMgVGhlcmUgaXMgb25seSBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzBdLCAiMTI3LjAuMC4xIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzFdLCBtYXN0ZXJfcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChkWzJdPT1kYi5EQl9SRVBNR1JfQ09OTkVDVEVEKSBvciBcCisgICAgICAgICAgICAgICAgKGRbMl09PWRiLkRCX1JFUE1HUl9ESVNDT05ORUNURUQpKQorCisgICAgICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCw2KSA6CisgICAgICAgICAgICBkID0gc2VsZi5kYmVudk1hc3Rlci5yZXBtZ3Jfc3RhdChmbGFncz1kYi5EQl9TVEFUX0NMRUFSKTsKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgibXNnc19xdWV1ZWQiIGluIGQpCisKKyAgICAgICAgc2VsZi5kYk1hc3Rlcj1kYi5EQihzZWxmLmRiZW52TWFzdGVyKQorICAgICAgICB0eG49c2VsZi5kYmVudk1hc3Rlci50eG5fYmVnaW4oKQorICAgICAgICBzZWxmLmRiTWFzdGVyLm9wZW4oInRlc3QiLCBkYi5EQl9IQVNILCBkYi5EQl9DUkVBVEUsIDA2NjYsIHR4bj10eG4pCisgICAgICAgIHR4bi5jb21taXQoKQorCisgICAgICAgIGltcG9ydCB0aW1lLG9zLnBhdGgKKyAgICAgICAgdGltZW91dD10aW1lLnRpbWUoKSsxMAorICAgICAgICB3aGlsZSAodGltZS50aW1lKCk8dGltZW91dCkgYW5kIFwKKyAgICAgICAgICBub3QgKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmhvbWVEaXJDbGllbnQsInRlc3QiKSkpIDoKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKworICAgICAgICBzZWxmLmRiQ2xpZW50PWRiLkRCKHNlbGYuZGJlbnZDbGllbnQpCisgICAgICAgIHdoaWxlIFRydWUgOgorICAgICAgICAgICAgdHhuPXNlbGYuZGJlbnZDbGllbnQudHhuX2JlZ2luKCkKKyAgICAgICAgICAgIHRyeSA6CisgICAgICAgICAgICAgICAgc2VsZi5kYkNsaWVudC5vcGVuKCJ0ZXN0IiwgZGIuREJfSEFTSCwgZmxhZ3M9ZGIuREJfUkRPTkxZLAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZT0wNjY2LCB0eG49dHhuKQorICAgICAgICAgICAgZXhjZXB0IGRiLkRCUmVwSGFuZGxlRGVhZEVycm9yIDoKKyAgICAgICAgICAgICAgICB0eG4uYWJvcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuZGJDbGllbnQuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuZGJDbGllbnQ9ZGIuREIoc2VsZi5kYmVudkNsaWVudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB0eG4uY29tbWl0KCkKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgdHhuPXNlbGYuZGJlbnZNYXN0ZXIudHhuX2JlZ2luKCkKKyAgICAgICAgc2VsZi5kYk1hc3Rlci5wdXQoIkFCQyIsICIxMjMiLCB0eG49dHhuKQorICAgICAgICB0eG4uY29tbWl0KCkKKyAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgdGltZW91dD10aW1lLnRpbWUoKSsxMAorICAgICAgICB2PU5vbmUKKyAgICAgICAgd2hpbGUgKHRpbWUudGltZSgpPHRpbWVvdXQpIGFuZCAodiBpcyBOb25lKSA6CisgICAgICAgICAgICB0eG49c2VsZi5kYmVudkNsaWVudC50eG5fYmVnaW4oKQorICAgICAgICAgICAgdj1zZWxmLmRiQ2xpZW50LmdldCgiQUJDIiwgdHhuPXR4bikKKyAgICAgICAgICAgIHR4bi5jb21taXQoKQorICAgICAgICAgICAgaWYgdiBpcyBOb25lIDoKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDIpCisgICAgICAgICMgSWYgc3RhcnR1cCBkaWQgbm90IGhhcHBlbiBiZWZvcmUgdGhlIHRpbWVvdXQgYWJvdmUsIHRoZW4gdGhpcyB0ZXN0CisgICAgICAgICMgc29tZXRpbWVzIGZhaWxzLiAgVGhpcyBoYXBwZW5zIHJhbmRvbWx5LCB3aGljaCBjYXVzZXMgYnVpbGRib3QKKyAgICAgICAgIyBpbnN0YWJpbGl0eSwgYnV0IGFsbCB0aGUgb3RoZXIgYnNkZGIgdGVzdHMgcGFzcy4gIFNpbmNlIGJzZGRiMyBpbiB0aGUKKyAgICAgICAgIyBzdGRsaWIgaXMgY3VycmVudGx5IG5vdCBnZXR0aW5nIGFjdGl2ZSBtYWludGVuYW5jZSwgYW5kIGlzIGdvbmUgaW4KKyAgICAgICAgIyBweTNrLCB3ZSBqdXN0IHNraXAgdGhlIGVuZCBvZiB0aGUgdGVzdCBpbiB0aGF0IGNhc2UuCisgICAgICAgIGlmIHRpbWUudGltZSgpPj10aW1lb3V0IGFuZCBzdGFydHVwX3RpbWVvdXQ6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJyZXBsaWNhdGlvbiB0ZXN0IHNraXBwZWQgZHVlIHRvIHJhbmRvbSBmYWlsdXJlLCAiCisgICAgICAgICAgICAgICAgInNlZSBpc3N1ZSAzODkyIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUudGltZSgpPHRpbWVvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIHYpCisKKyAgICAgICAgdHhuPXNlbGYuZGJlbnZNYXN0ZXIudHhuX2JlZ2luKCkKKyAgICAgICAgc2VsZi5kYk1hc3Rlci5kZWxldGUoIkFCQyIsIHR4bj10eG4pCisgICAgICAgIHR4bi5jb21taXQoKQorICAgICAgICB0aW1lb3V0PXRpbWUudGltZSgpKzEwCisgICAgICAgIHdoaWxlICh0aW1lLnRpbWUoKTx0aW1lb3V0KSBhbmQgKHYgaXMgbm90IE5vbmUpIDoKKyAgICAgICAgICAgIHR4bj1zZWxmLmRiZW52Q2xpZW50LnR4bl9iZWdpbigpCisgICAgICAgICAgICB2PXNlbGYuZGJDbGllbnQuZ2V0KCJBQkMiLCB0eG49dHhuKQorICAgICAgICAgICAgdHhuLmNvbW1pdCgpCisgICAgICAgICAgICBpZiB2IGlzIE5vbmUgOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUudGltZSgpPHRpbWVvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgdikKKworY2xhc3MgREJCYXNlUmVwbGljYXRpb24oREJSZXBsaWNhdGlvbikgOgorICAgIGRlZiBzZXRVcChzZWxmKSA6CisgICAgICAgIERCUmVwbGljYXRpb24uc2V0VXAoc2VsZikKKyAgICAgICAgZGVmIGNvbmZpcm1lZF9tYXN0ZXIoYSxiLGMpIDoKKyAgICAgICAgICAgIGlmIChiID09IGRiLkRCX0VWRU5UX1JFUF9NQVNURVIpIG9yIChiID09IGRiLkRCX0VWRU5UX1JFUF9FTEVDVEVEKSA6CisgICAgICAgICAgICAgICAgc2VsZi5jb25maXJtZWRfbWFzdGVyID0gVHJ1ZQorCisgICAgICAgIGRlZiBjbGllbnRfc3RhcnR1cGRvbmUoYSxiLGMpIDoKKyAgICAgICAgICAgIGlmIGIgPT0gZGIuREJfRVZFTlRfUkVQX1NUQVJUVVBET05FIDoKKyAgICAgICAgICAgICAgICBzZWxmLmNsaWVudF9zdGFydHVwZG9uZSA9IFRydWUKKworICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnNldF9ldmVudF9ub3RpZnkoY29uZmlybWVkX21hc3RlcikKKyAgICAgICAgc2VsZi5kYmVudkNsaWVudC5zZXRfZXZlbnRfbm90aWZ5KGNsaWVudF9zdGFydHVwZG9uZSkKKworICAgICAgICBpbXBvcnQgUXVldWUKKyAgICAgICAgc2VsZi5tMmMgPSBRdWV1ZS5RdWV1ZSgpCisgICAgICAgIHNlbGYuYzJtID0gUXVldWUuUXVldWUoKQorCisgICAgICAgICMgVGhlcmUgYXJlIG9ubHkgdHdvIG5vZGVzLCBzbyB3ZSBkb24ndCBuZWVkIHRvCisgICAgICAgICMgZG8gYW55IHJvdXRpbmcgZGVjaXNpb24KKyAgICAgICAgZGVmIG0yYyhkYmVudiwgY29udHJvbCwgcmVjLCBsc25wLCBlbnZpZCwgZmxhZ3MpIDoKKyAgICAgICAgICAgIHNlbGYubTJjLnB1dCgoY29udHJvbCwgcmVjKSkKKworICAgICAgICBkZWYgYzJtKGRiZW52LCBjb250cm9sLCByZWMsIGxzbnAsIGVudmlkLCBmbGFncykgOgorICAgICAgICAgICAgc2VsZi5jMm0ucHV0KChjb250cm9sLCByZWMpKQorCisgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIucmVwX3NldF90cmFuc3BvcnQoMTMsbTJjKQorICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcF9zZXRfcHJpb3JpdHkoMTApCisgICAgICAgIHNlbGYuZGJlbnZDbGllbnQucmVwX3NldF90cmFuc3BvcnQoMyxjMm0pCisgICAgICAgIHNlbGYuZGJlbnZDbGllbnQucmVwX3NldF9wcmlvcml0eSgwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYmVudk1hc3Rlci5yZXBfZ2V0X3ByaW9yaXR5KCksMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYmVudkNsaWVudC5yZXBfZ2V0X3ByaW9yaXR5KCksMCkKKworICAgICAgICAjc2VsZi5kYmVudk1hc3Rlci5zZXRfdmVyYm9zZShkYi5EQl9WRVJCX1JFUExJQ0FUSU9OLCBUcnVlKQorICAgICAgICAjc2VsZi5kYmVudk1hc3Rlci5zZXRfdmVyYm9zZShkYi5EQl9WRVJCX0ZJTEVPUFNfQUxMLCBUcnVlKQorICAgICAgICAjc2VsZi5kYmVudkNsaWVudC5zZXRfdmVyYm9zZShkYi5EQl9WRVJCX1JFUExJQ0FUSU9OLCBUcnVlKQorICAgICAgICAjc2VsZi5kYmVudkNsaWVudC5zZXRfdmVyYm9zZShkYi5EQl9WRVJCX0ZJTEVPUFNfQUxMLCBUcnVlKQorCisgICAgICAgIGRlZiB0aHJlYWRfbWFzdGVyKCkgOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudGhyZWFkX2RvKHNlbGYuZGJlbnZNYXN0ZXIsIHNlbGYuYzJtLCAzLAorICAgICAgICAgICAgICAgICAgICBzZWxmLm1hc3Rlcl9kb2luZ19lbGVjdGlvbiwgVHJ1ZSkKKworICAgICAgICBkZWYgdGhyZWFkX2NsaWVudCgpIDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRocmVhZF9kbyhzZWxmLmRiZW52Q2xpZW50LCBzZWxmLm0yYywgMTMsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X2RvaW5nX2VsZWN0aW9uLCBGYWxzZSkKKworICAgICAgICBmcm9tIHRocmVhZGluZyBpbXBvcnQgVGhyZWFkCisgICAgICAgIHRfbT1UaHJlYWQodGFyZ2V0PXRocmVhZF9tYXN0ZXIpCisgICAgICAgIHRfYz1UaHJlYWQodGFyZ2V0PXRocmVhZF9jbGllbnQpCisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgorICAgICAgICAgICAgdF9tLnNldERhZW1vbihUcnVlKQorICAgICAgICAgICAgdF9jLnNldERhZW1vbihUcnVlKQorICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgIHRfbS5kYWVtb24gPSBUcnVlCisgICAgICAgICAgICB0X2MuZGFlbW9uID0gVHJ1ZQorCisgICAgICAgIHNlbGYudF9tID0gdF9tCisgICAgICAgIHNlbGYudF9jID0gdF9jCisKKyAgICAgICAgc2VsZi5kYk1hc3RlciA9IHNlbGYuZGJDbGllbnQgPSBOb25lCisKKyAgICAgICAgc2VsZi5tYXN0ZXJfZG9pbmdfZWxlY3Rpb249W0ZhbHNlXQorICAgICAgICBzZWxmLmNsaWVudF9kb2luZ19lbGVjdGlvbj1bRmFsc2VdCisKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kYkNsaWVudCA6CisgICAgICAgICAgICBzZWxmLmRiQ2xpZW50LmNsb3NlKCkKKyAgICAgICAgaWYgc2VsZi5kYk1hc3RlciA6CisgICAgICAgICAgICBzZWxmLmRiTWFzdGVyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5tMmMucHV0KE5vbmUpCisgICAgICAgIHNlbGYuYzJtLnB1dChOb25lKQorICAgICAgICBzZWxmLnRfbS5qb2luKCkKKyAgICAgICAgc2VsZi50X2Muam9pbigpCisKKyAgICAgICAgIyBIZXJlIHdlIGFzc2lnbiBkdW1teSBldmVudCBoYW5kbGVycyB0byBhbGxvdyBHQyBvZiB0aGUgdGVzdCBvYmplY3QuCisgICAgICAgICMgU2luY2UgdGhlIGR1bW15IGhhbmRsZXIgZG9lc24ndCB1c2UgYW55IG91dGVyIHNjb3BlIHZhcmlhYmxlLCBpdAorICAgICAgICAjIGRvZXNuJ3Qga2VlcCBhbnkgcmVmZXJlbmNlIHRvIHRoZSB0ZXN0IG9iamVjdC4KKyAgICAgICAgZGVmIGR1bW15KCphcmdzKSA6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIuc2V0X2V2ZW50X25vdGlmeShkdW1teSkKKyAgICAgICAgc2VsZi5kYmVudkNsaWVudC5zZXRfZXZlbnRfbm90aWZ5KGR1bW15KQorICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcF9zZXRfdHJhbnNwb3J0KDEzLGR1bW15KQorICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnJlcF9zZXRfdHJhbnNwb3J0KDMsZHVtbXkpCisKKyAgICAgICAgc2VsZi5kYmVudkNsaWVudC5jbG9zZSgpCisgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIuY2xvc2UoKQorICAgICAgICB0ZXN0X3N1cHBvcnQucm10cmVlKHNlbGYuaG9tZURpckNsaWVudCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJtdHJlZShzZWxmLmhvbWVEaXJNYXN0ZXIpCisKKyAgICBkZWYgYmFzaWNfcmVwX3RocmVhZGluZyhzZWxmKSA6CisgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIucmVwX3N0YXJ0KGZsYWdzPWRiLkRCX1JFUF9NQVNURVIpCisgICAgICAgIHNlbGYuZGJlbnZDbGllbnQucmVwX3N0YXJ0KGZsYWdzPWRiLkRCX1JFUF9DTElFTlQpCisKKyAgICAgICAgZGVmIHRocmVhZF9kbyhlbnYsIHEsIGVudmlkLCBlbGVjdGlvbl9zdGF0dXMsIG11c3RfYmVfbWFzdGVyKSA6CisgICAgICAgICAgICB3aGlsZSBUcnVlIDoKKyAgICAgICAgICAgICAgICB2PXEuZ2V0KCkKKyAgICAgICAgICAgICAgICBpZiB2IGlzIE5vbmUgOiByZXR1cm4KKyAgICAgICAgICAgICAgICBlbnYucmVwX3Byb2Nlc3NfbWVzc2FnZSh2WzBdLCB2WzFdLCBlbnZpZCkKKworICAgICAgICBzZWxmLnRocmVhZF9kbyA9IHRocmVhZF9kbworCisgICAgICAgIHNlbGYudF9tLnN0YXJ0KCkKKyAgICAgICAgc2VsZi50X2Muc3RhcnQoKQorCisgICAgZGVmIHRlc3QwMV9iYXNpY19yZXBsaWNhdGlvbihzZWxmKSA6CisgICAgICAgIHNlbGYuYmFzaWNfcmVwX3RocmVhZGluZygpCisKKyAgICAgICAgIyBUaGUgdGltZW91dCBpcyBuZWNlc3NhcnkgaW4gQkRCIDQuNSwgc2luY2UgREJfRVZFTlRfUkVQX1NUQVJUVVBET05FCisgICAgICAgICMgaXMgbm90IGdlbmVyYXRlZCBpZiB0aGUgbWFzdGVyIGhhcyBubyBuZXcgdHJhbnNhY3Rpb25zLgorICAgICAgICAjIFRoaXMgaXMgc29sdmVkIGluIEJEQiA0LjYgKCMxNTU0MikuCisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIHRpbWVvdXQgPSB0aW1lLnRpbWUoKSs2MAorICAgICAgICB3aGlsZSAodGltZS50aW1lKCk8dGltZW91dCkgYW5kIG5vdCAoc2VsZi5jb25maXJtZWRfbWFzdGVyIGFuZAorICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50X3N0YXJ0dXBkb25lKSA6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lLnRpbWUoKTx0aW1lb3V0KQorCisgICAgICAgIHNlbGYuZGJNYXN0ZXI9ZGIuREIoc2VsZi5kYmVudk1hc3RlcikKKyAgICAgICAgdHhuPXNlbGYuZGJlbnZNYXN0ZXIudHhuX2JlZ2luKCkKKyAgICAgICAgc2VsZi5kYk1hc3Rlci5vcGVuKCJ0ZXN0IiwgZGIuREJfSEFTSCwgZGIuREJfQ1JFQVRFLCAwNjY2LCB0eG49dHhuKQorICAgICAgICB0eG4uY29tbWl0KCkKKworICAgICAgICBpbXBvcnQgdGltZSxvcy5wYXRoCisgICAgICAgIHRpbWVvdXQ9dGltZS50aW1lKCkrMTAKKyAgICAgICAgd2hpbGUgKHRpbWUudGltZSgpPHRpbWVvdXQpIGFuZCBcCisgICAgICAgICAgbm90IChvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5ob21lRGlyQ2xpZW50LCJ0ZXN0IikpKSA6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisKKyAgICAgICAgc2VsZi5kYkNsaWVudD1kYi5EQihzZWxmLmRiZW52Q2xpZW50KQorICAgICAgICB3aGlsZSBUcnVlIDoKKyAgICAgICAgICAgIHR4bj1zZWxmLmRiZW52Q2xpZW50LnR4bl9iZWdpbigpCisgICAgICAgICAgICB0cnkgOgorICAgICAgICAgICAgICAgIHNlbGYuZGJDbGllbnQub3BlbigidGVzdCIsIGRiLkRCX0hBU0gsIGZsYWdzPWRiLkRCX1JET05MWSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9MDY2NiwgdHhuPXR4bikKKyAgICAgICAgICAgIGV4Y2VwdCBkYi5EQlJlcEhhbmRsZURlYWRFcnJvciA6CisgICAgICAgICAgICAgICAgdHhuLmFib3J0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmRiQ2xpZW50LmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmRiQ2xpZW50PWRiLkRCKHNlbGYuZGJlbnZDbGllbnQpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgdHhuLmNvbW1pdCgpCisgICAgICAgICAgICBicmVhaworCisgICAgICAgIGQgPSBzZWxmLmRiZW52TWFzdGVyLnJlcF9zdGF0KGZsYWdzPWRiLkRCX1NUQVRfQ0xFQVIpOworICAgICAgICBzZWxmLmFzc2VydFRydWUoIm1hc3Rlcl9jaGFuZ2VzIiBpbiBkKQorCisgICAgICAgIHR4bj1zZWxmLmRiZW52TWFzdGVyLnR4bl9iZWdpbigpCisgICAgICAgIHNlbGYuZGJNYXN0ZXIucHV0KCJBQkMiLCAiMTIzIiwgdHhuPXR4bikKKyAgICAgICAgdHhuLmNvbW1pdCgpCisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIHRpbWVvdXQ9dGltZS50aW1lKCkrMTAKKyAgICAgICAgdj1Ob25lCisgICAgICAgIHdoaWxlICh0aW1lLnRpbWUoKTx0aW1lb3V0KSBhbmQgKHYgaXMgTm9uZSkgOgorICAgICAgICAgICAgdHhuPXNlbGYuZGJlbnZDbGllbnQudHhuX2JlZ2luKCkKKyAgICAgICAgICAgIHY9c2VsZi5kYkNsaWVudC5nZXQoIkFCQyIsIHR4bj10eG4pCisgICAgICAgICAgICB0eG4uY29tbWl0KCkKKyAgICAgICAgICAgIGlmIHYgaXMgTm9uZSA6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZS50aW1lKCk8dGltZW91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgdikKKworICAgICAgICB0eG49c2VsZi5kYmVudk1hc3Rlci50eG5fYmVnaW4oKQorICAgICAgICBzZWxmLmRiTWFzdGVyLmRlbGV0ZSgiQUJDIiwgdHhuPXR4bikKKyAgICAgICAgdHhuLmNvbW1pdCgpCisgICAgICAgIHRpbWVvdXQ9dGltZS50aW1lKCkrMTAKKyAgICAgICAgd2hpbGUgKHRpbWUudGltZSgpPHRpbWVvdXQpIGFuZCAodiBpcyBub3QgTm9uZSkgOgorICAgICAgICAgICAgdHhuPXNlbGYuZGJlbnZDbGllbnQudHhuX2JlZ2luKCkKKyAgICAgICAgICAgIHY9c2VsZi5kYkNsaWVudC5nZXQoIkFCQyIsIHR4bj10eG4pCisgICAgICAgICAgICB0eG4uY29tbWl0KCkKKyAgICAgICAgICAgIGlmIHYgaXMgTm9uZSA6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZS50aW1lKCk8dGltZW91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCB2KQorCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LDcpIDoKKyAgICAgICAgZGVmIHRlc3QwMl90ZXN0X3JlcXVlc3Qoc2VsZikgOgorICAgICAgICAgICAgc2VsZi5iYXNpY19yZXBfdGhyZWFkaW5nKCkKKyAgICAgICAgICAgIChtaW5pbXVtLCBtYXhpbXVtKSA9IHNlbGYuZGJlbnZDbGllbnQucmVwX2dldF9yZXF1ZXN0KCkKKyAgICAgICAgICAgIHNlbGYuZGJlbnZDbGllbnQucmVwX3NldF9yZXF1ZXN0KG1pbmltdW0tMSwgbWF4aW11bSsxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiZW52Q2xpZW50LnJlcF9nZXRfcmVxdWVzdCgpLAorICAgICAgICAgICAgICAgICAgICAobWluaW11bS0xLCBtYXhpbXVtKzEpKQorCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LDYpIDoKKyAgICAgICAgZGVmIHRlc3QwM19tYXN0ZXJfZWxlY3Rpb24oc2VsZikgOgorICAgICAgICAgICAgIyBHZXQgcmVhZHkgdG8gaG9sZCBhbiBlbGVjdGlvbgorICAgICAgICAgICAgI3NlbGYuZGJlbnZNYXN0ZXIucmVwX3N0YXJ0KGZsYWdzPWRiLkRCX1JFUF9NQVNURVIpCisgICAgICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcF9zdGFydChmbGFncz1kYi5EQl9SRVBfQ0xJRU5UKQorICAgICAgICAgICAgc2VsZi5kYmVudkNsaWVudC5yZXBfc3RhcnQoZmxhZ3M9ZGIuREJfUkVQX0NMSUVOVCkKKworICAgICAgICAgICAgZGVmIHRocmVhZF9kbyhlbnYsIHEsIGVudmlkLCBlbGVjdGlvbl9zdGF0dXMsIG11c3RfYmVfbWFzdGVyKSA6CisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZSA6CisgICAgICAgICAgICAgICAgICAgIHY9cS5nZXQoKQorICAgICAgICAgICAgICAgICAgICBpZiB2IGlzIE5vbmUgOiByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgciA9IGVudi5yZXBfcHJvY2Vzc19tZXNzYWdlKHZbMF0sdlsxXSxlbnZpZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbXVzdF9iZV9tYXN0ZXIgYW5kIHNlbGYuY29uZmlybWVkX21hc3RlciA6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcF9zdGFydChmbGFncyA9IGRiLkRCX1JFUF9NQVNURVIpCisgICAgICAgICAgICAgICAgICAgICAgICBtdXN0X2JlX21hc3RlciA9IEZhbHNlCisKKyAgICAgICAgICAgICAgICAgICAgaWYgclswXSA9PSBkYi5EQl9SRVBfSE9MREVMRUNUSU9OIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBlbGVjdCgpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudi5yZXBfZWxlY3QoMiwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZWN0aW9uX3N0YXR1c1swXSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgZGIuREJSZXBVbmF2YWlsRXJyb3IgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGVsZWN0aW9uX3N0YXR1c1swXSBhbmQgbm90IHNlbGYuY29uZmlybWVkX21hc3RlciA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZWN0aW9uX3N0YXR1c1swXSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0PVRocmVhZCh0YXJnZXQ9ZWxlY3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5kYWVtb24gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgICAgIHNlbGYudGhyZWFkX2RvID0gdGhyZWFkX2RvCisKKyAgICAgICAgICAgIHNlbGYudF9tLnN0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYudF9jLnN0YXJ0KCkKKworICAgICAgICAgICAgc2VsZi5kYmVudk1hc3Rlci5yZXBfc2V0X3RpbWVvdXQoZGIuREJfUkVQX0VMRUNUSU9OX1RJTUVPVVQsIDUwMDAwKQorICAgICAgICAgICAgc2VsZi5kYmVudkNsaWVudC5yZXBfc2V0X3RpbWVvdXQoZGIuREJfUkVQX0VMRUNUSU9OX1RJTUVPVVQsIDUwMDAwKQorICAgICAgICAgICAgc2VsZi5jbGllbnRfZG9pbmdfZWxlY3Rpb25bMF0gPSBUcnVlCisgICAgICAgICAgICB3aGlsZSBUcnVlIDoKKyAgICAgICAgICAgICAgICB0cnkgOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRiZW52Q2xpZW50LnJlcF9lbGVjdCgyLCAxKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudF9kb2luZ19lbGVjdGlvblswXSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZXhjZXB0IGRiLkRCUmVwVW5hdmFpbEVycm9yIDoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jb25maXJtZWRfbWFzdGVyKQorCisgICAgICAgICAgICAjIFJhY2UgY29uZGl0aW9uIHNob3dlZCB1cCBhZnRlciB1cGdyYWRpbmcgdG8gU29sYXJpcyAxMCBVcGRhdGUgMTAKKyAgICAgICAgICAgICMgaHR0cHM6Ly9mb3J1bXMub3JhY2xlLmNvbS9mb3J1bXMvdGhyZWFkLmpzcGE/bWVzc2FnZUlEPTk5MDI4NjAKKyAgICAgICAgICAgICMgamNlYUBqY2VhLmVzOiBTZWUgcHJpdmF0ZSBlbWFpbCBmcm9tIFBhdWxhIEJpbmdoYW0gKE9yYWNsZSksCisgICAgICAgICAgICAjIGluIDIwMTEwOTI5LgorICAgICAgICAgICAgd2hpbGUgbm90IChzZWxmLmRiZW52Q2xpZW50LnJlcF9zdGF0KClbInN0YXJ0dXBfY29tcGxldGUiXSkgOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGlmIGRiLnZlcnNpb24oKSA+PSAoNCw3KSA6CisgICAgICAgIGRlZiB0ZXN0MDRfdGVzdF9jbG9ja3NrZXcoc2VsZikgOgorICAgICAgICAgICAgZmFzdCwgc2xvdyA9IDEyMzQsIDEyMzAKKyAgICAgICAgICAgIHNlbGYuZGJlbnZNYXN0ZXIucmVwX3NldF9jbG9ja3NrZXcoZmFzdCwgc2xvdykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGZhc3QsIHNsb3cpLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmRiZW52TWFzdGVyLnJlcF9nZXRfY2xvY2tza2V3KCkpCisgICAgICAgICAgICBzZWxmLmJhc2ljX3JlcF90aHJlYWRpbmcoKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBpZiBkYi52ZXJzaW9uKCkgPj0gKDQsIDYpIDoKKyAgICAgICAgZGJlbnYgPSBkYi5EQkVudigpCisgICAgICAgIHRyeSA6CisgICAgICAgICAgICBkYmVudi5yZXBtZ3JfZ2V0X2Fja19wb2xpY3koKQorICAgICAgICAgICAgUmVwbGljYXRpb25NYW5hZ2VyX2F2YWlsYWJsZT1UcnVlCisgICAgICAgIGV4Y2VwdCA6CisgICAgICAgICAgICBSZXBsaWNhdGlvbk1hbmFnZXJfYXZhaWxhYmxlPUZhbHNlCisgICAgICAgIGRiZW52LmNsb3NlKCkKKyAgICAgICAgZGVsIGRiZW52CisgICAgICAgIGlmIFJlcGxpY2F0aW9uTWFuYWdlcl9hdmFpbGFibGUgOgorICAgICAgICAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoREJSZXBsaWNhdGlvbk1hbmFnZXIpKQorCisgICAgICAgIGlmIGhhdmVfdGhyZWFkcyA6CisgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShEQkJhc2VSZXBsaWNhdGlvbikpCisKKyAgICByZXR1cm4gc3VpdGUKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3Rlc3Rfc3VpdGUnKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3Rfc2VxdWVuY2UucHkgYi9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF9zZXF1ZW5jZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGFhMTJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9ic2RkYi90ZXN0L3Rlc3Rfc2VxdWVuY2UucHkKQEAgLTAsMCArMSwxMzYgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCisKK2Zyb20gdGVzdF9hbGwgaW1wb3J0IGRiLCB0ZXN0X3N1cHBvcnQsIGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCwgZ2V0X25ld19kYXRhYmFzZV9wYXRoCisKKworY2xhc3MgREJTZXF1ZW5jZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5pbnRfMzJfbWF4ID0gMHgxMDAwMDAwMDAKKyAgICAgICAgc2VsZi5ob21lRGlyID0gZ2V0X25ld19lbnZpcm9ubWVudF9wYXRoKCkKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9ICJ0ZXN0IgorCisgICAgICAgIHNlbGYuZGJlbnYgPSBkYi5EQkVudigpCisgICAgICAgIHNlbGYuZGJlbnYub3BlbihzZWxmLmhvbWVEaXIsIGRiLkRCX0NSRUFURSB8IGRiLkRCX0lOSVRfTVBPT0wsIDA2NjYpCisgICAgICAgIHNlbGYuZCA9IGRiLkRCKHNlbGYuZGJlbnYpCisgICAgICAgIHNlbGYuZC5vcGVuKHNlbGYuZmlsZW5hbWUsIGRiLkRCX0JUUkVFLCBkYi5EQl9DUkVBVEUsIDA2NjYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3NlcScpOgorICAgICAgICAgICAgc2VsZi5zZXEuY2xvc2UoKQorICAgICAgICAgICAgZGVsIHNlbGYuc2VxCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ2QnKToKKyAgICAgICAgICAgIHNlbGYuZC5jbG9zZSgpCisgICAgICAgICAgICBkZWwgc2VsZi5kCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ2RiZW52Jyk6CisgICAgICAgICAgICBzZWxmLmRiZW52LmNsb3NlKCkKKyAgICAgICAgICAgIGRlbCBzZWxmLmRiZW52CisKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJtdHJlZShzZWxmLmhvbWVEaXIpCisKKyAgICBkZWYgdGVzdF9nZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2VxID0gZGIuREJTZXF1ZW5jZShzZWxmLmQsIGZsYWdzPTApCisgICAgICAgIHN0YXJ0X3ZhbHVlID0gMTAgKiBzZWxmLmludF8zMl9tYXgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweEEwMDAwMDAwMCwgc3RhcnRfdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEuaW5pdGlhbF92YWx1ZShzdGFydF92YWx1ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9J2lkJywgdHhuPU5vbmUsIGZsYWdzPWRiLkRCX0NSRUFURSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnRfdmFsdWUsIHNlbGYuc2VxLmdldCg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydF92YWx1ZSArIDUsIHNlbGYuc2VxLmdldCgpKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgorICAgICAgICBzZWxmLnNlcSA9IGRiLkRCU2VxdWVuY2Uoc2VsZi5kLCBmbGFncz0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuc2VxLm9wZW4oa2V5PSdmb28nLCB0eG49Tm9uZSwgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5yZW1vdmUodHhuPU5vbmUsIGZsYWdzPTApKQorICAgICAgICBkZWwgc2VsZi5zZXEKKworICAgIGRlZiB0ZXN0X2dldF9rZXkoc2VsZik6CisgICAgICAgIHNlbGYuc2VxID0gZGIuREJTZXF1ZW5jZShzZWxmLmQsIGZsYWdzPTApCisgICAgICAgIGtleSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9a2V5LCB0eG49Tm9uZSwgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXksIHNlbGYuc2VxLmdldF9rZXkoKSkKKworICAgIGRlZiB0ZXN0X2dldF9kYnAoc2VsZik6CisgICAgICAgIHNlbGYuc2VxID0gZGIuREJTZXF1ZW5jZShzZWxmLmQsIGZsYWdzPTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9J2ZvbycsIHR4bj1Ob25lLCBmbGFncz1kYi5EQl9DUkVBVEUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZCwgc2VsZi5zZXEuZ2V0X2RicCgpKQorCisgICAgZGVmIHRlc3RfY2FjaGVzaXplKHNlbGYpOgorICAgICAgICBzZWxmLnNlcSA9IGRiLkRCU2VxdWVuY2Uoc2VsZi5kLCBmbGFncz0wKQorICAgICAgICBjYXNoZV9zaXplID0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5zZXRfY2FjaGVzaXplKGNhc2hlX3NpemUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuc2VxLm9wZW4oa2V5PSdmb28nLCB0eG49Tm9uZSwgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXNoZV9zaXplLCBzZWxmLnNlcS5nZXRfY2FjaGVzaXplKCkpCisKKyAgICBkZWYgdGVzdF9mbGFncyhzZWxmKToKKyAgICAgICAgc2VsZi5zZXEgPSBkYi5EQlNlcXVlbmNlKHNlbGYuZCwgZmxhZ3M9MCkKKyAgICAgICAgZmxhZyA9IGRiLkRCX1NFUV9XUkFQOworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuc2VxLnNldF9mbGFncyhmbGFnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0nZm9vJywgdHhuPU5vbmUsIGZsYWdzPWRiLkRCX0NSRUFURSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxhZywgc2VsZi5zZXEuZ2V0X2ZsYWdzKCkgJiBmbGFnKQorCisgICAgZGVmIHRlc3RfcmFuZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuc2VxID0gZGIuREJTZXF1ZW5jZShzZWxmLmQsIGZsYWdzPTApCisgICAgICAgIHNlcV9yYW5nZSA9ICgxMCAqIHNlbGYuaW50XzMyX21heCwgMTEgKiBzZWxmLmludF8zMl9tYXggLSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuc2VxLnNldF9yYW5nZShzZXFfcmFuZ2UpKQorICAgICAgICBzZWxmLnNlcS5pbml0aWFsX3ZhbHVlKHNlcV9yYW5nZVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0nZm9vJywgdHhuPU5vbmUsIGZsYWdzPWRiLkRCX0NSRUFURSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VxX3JhbmdlLCBzZWxmLnNlcS5nZXRfcmFuZ2UoKSkKKworICAgIGRlZiB0ZXN0X3N0YXQoc2VsZik6CisgICAgICAgIHNlbGYuc2VxID0gZGIuREJTZXF1ZW5jZShzZWxmLmQsIGZsYWdzPTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5zZXEub3BlbihrZXk9J2ZvbycsIHR4bj1Ob25lLCBmbGFncz1kYi5EQl9DUkVBVEUpKQorICAgICAgICBzdGF0ID0gc2VsZi5zZXEuc3RhdCgpCisgICAgICAgIGZvciBwYXJhbSBpbiAoJ25vd2FpdCcsICdtaW4nLCAnbWF4JywgJ3ZhbHVlJywgJ2N1cnJlbnQnLAorICAgICAgICAgICAgICAgICAgICAgICdmbGFncycsICdjYWNoZV9zaXplJywgJ2xhc3RfdmFsdWUnLCAnd2FpdCcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhcmFtIGluIHN0YXQsICJwYXJhbWV0ZXIgJXMgaXNuJ3QgaW4gc3RhdCBpbmZvIiAlIHBhcmFtKQorCisgICAgaWYgZGIudmVyc2lvbigpID49ICg0LDcpIDoKKyAgICAgICAgIyBUaGlzIGNvZGUgY2hlY2tzIGEgY3Jhc2ggc29sdmVkIGluIEJlcmtlbGV5IERCIDQuNworICAgICAgICBkZWYgdGVzdF9zdGF0X2NyYXNoKHNlbGYpIDoKKyAgICAgICAgICAgIGQ9ZGIuREIoKQorICAgICAgICAgICAgZC5vcGVuKE5vbmUsZGJ0eXBlPWRiLkRCX0hBU0gsZmxhZ3M9ZGIuREJfQ1JFQVRFKSAgIyBJbiBSQU0KKyAgICAgICAgICAgIHNlcSA9IGRiLkRCU2VxdWVuY2UoZCwgZmxhZ3M9MCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZGIuREJOb3RGb3VuZEVycm9yLCBzZXEub3BlbiwKKyAgICAgICAgICAgICAgICAgICAga2V5PSdpZCcsIHR4bj1Ob25lLCBmbGFncz0wKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYi5EQkludmFsaWRBcmdFcnJvciwgc2VxLnN0YXQpCisKKyAgICAgICAgICAgIGQuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfNjRiaXRzKHNlbGYpIDoKKyAgICAgICAgIyBXZSBkb24ndCB1c2UgYm90aCBleHRyZW1lcyBiZWNhdXNlIHRoZXkgYXJlIHByb2JsZW1hdGljCisgICAgICAgIHZhbHVlX3BsdXM9KDFMPDw2MyktMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDkyMjMzNzIwMzY4NTQ3NzU4MDZMLHZhbHVlX3BsdXMpCisgICAgICAgIHZhbHVlX21pbnVzPSgtMUw8PDYzKSsxICAjIFR3byBjb21wbGVtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMLHZhbHVlX21pbnVzKQorICAgICAgICBzZWxmLnNlcSA9IGRiLkRCU2VxdWVuY2Uoc2VsZi5kLCBmbGFncz0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuc2VxLmluaXRpYWxfdmFsdWUodmFsdWVfcGx1cy0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLnNlcS5vcGVuKGtleT0naWQnLCB0eG49Tm9uZSwKKyAgICAgICAgICAgIGZsYWdzPWRiLkRCX0NSRUFURSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVfcGx1cy0xLCBzZWxmLnNlcS5nZXQoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVfcGx1cywgc2VsZi5zZXEuZ2V0KDEpKQorCisgICAgICAgIHNlbGYuc2VxLnJlbW92ZSh0eG49Tm9uZSwgZmxhZ3M9MCkKKworICAgICAgICBzZWxmLnNlcSA9IGRiLkRCU2VxdWVuY2Uoc2VsZi5kLCBmbGFncz0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuc2VxLmluaXRpYWxfdmFsdWUodmFsdWVfbWludXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHNlbGYuc2VxLm9wZW4oa2V5PSdpZCcsIHR4bj1Ob25lLAorICAgICAgICAgICAgZmxhZ3M9ZGIuREJfQ1JFQVRFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZV9taW51cywgc2VsZi5zZXEuZ2V0KDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlX21pbnVzKzEsIHNlbGYuc2VxLmdldCgxKSkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLnNlcSA9IGRiLkRCU2VxdWVuY2Uoc2VsZi5kKQorICAgICAgICBzZWxmLnNlcS5jbG9zZSgpICAjIFlvdSBjYW4gY2xvc2UgYSBTZXF1ZW5jZSBtdWx0aXBsZSB0aW1lcworICAgICAgICBzZWxmLnNlcS5jbG9zZSgpCisgICAgICAgIHNlbGYuc2VxLmNsb3NlKCkKKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoREJTZXF1ZW5jZVRlc3QpKQorICAgIHJldHVybiBzdWl0ZQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0ndGVzdF9zdWl0ZScpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF90aHJlYWQucHkgYi9saWIvcHl0aG9uMi43L2JzZGRiL3Rlc3QvdGVzdF90aHJlYWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyMTJlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvYnNkZGIvdGVzdC90ZXN0X3RocmVhZC5weQpAQCAtMCwwICsxLDUxNyBAQAorIiIiVGVzdENhc2VzIGZvciBtdWx0aS10aHJlYWRlZCBhY2Nlc3MgdG8gYSBEQi4KKyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgZXJybm8KK2Zyb20gcmFuZG9tIGltcG9ydCByYW5kb20KKworREFTSCA9ICctJworCit0cnk6CisgICAgV2luZG93c0Vycm9yCitleGNlcHQgTmFtZUVycm9yOgorICAgIGNsYXNzIFdpbmRvd3NFcnJvcihFeGNlcHRpb24pOgorICAgICAgICBwYXNzCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0X2FsbCBpbXBvcnQgZGIsIGRidXRpbHMsIHRlc3Rfc3VwcG9ydCwgdmVyYm9zZSwgaGF2ZV90aHJlYWRzLCBcCisgICAgICAgIGdldF9uZXdfZW52aXJvbm1lbnRfcGF0aCwgZ2V0X25ld19kYXRhYmFzZV9wYXRoCisKK2lmIGhhdmVfdGhyZWFkcyA6CisgICAgZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAorICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKKyAgICAgICAgZnJvbSB0aHJlYWRpbmcgaW1wb3J0IGN1cnJlbnRUaHJlYWQKKyAgICBlbHNlIDoKKyAgICAgICAgZnJvbSB0aHJlYWRpbmcgaW1wb3J0IGN1cnJlbnRfdGhyZWFkIGFzIGN1cnJlbnRUaHJlYWQKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBCYXNlVGhyZWFkZWRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGJ0eXBlICAgICAgID0gZGIuREJfVU5LTk9XTiAgIyBtdXN0IGJlIHNldCBpbiBkZXJpdmVkIGNsYXNzCisgICAgZGJvcGVuZmxhZ3MgID0gMAorICAgIGRic2V0ZmxhZ3MgICA9IDAKKyAgICBlbnZmbGFncyAgICAgPSAwCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBkYnV0aWxzLl9kZWFkbG9ja19WZXJib3NlRmlsZSA9IHN5cy5zdGRvdXQKKworICAgICAgICBzZWxmLmhvbWVEaXIgPSBnZXRfbmV3X2Vudmlyb25tZW50X3BhdGgoKQorICAgICAgICBzZWxmLmVudiA9IGRiLkRCRW52KCkKKyAgICAgICAgc2VsZi5zZXRFbnZPcHRzKCkKKyAgICAgICAgc2VsZi5lbnYub3BlbihzZWxmLmhvbWVEaXIsIHNlbGYuZW52ZmxhZ3MgfCBkYi5EQl9DUkVBVEUpCisKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IHNlbGYuX19jbGFzc19fLl9fbmFtZV9fICsgJy5kYicKKyAgICAgICAgc2VsZi5kID0gZGIuREIoc2VsZi5lbnYpCisgICAgICAgIGlmIHNlbGYuZGJzZXRmbGFnczoKKyAgICAgICAgICAgIHNlbGYuZC5zZXRfZmxhZ3Moc2VsZi5kYnNldGZsYWdzKQorICAgICAgICBzZWxmLmQub3BlbihzZWxmLmZpbGVuYW1lLCBzZWxmLmRidHlwZSwgc2VsZi5kYm9wZW5mbGFnc3xkYi5EQl9DUkVBVEUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZC5jbG9zZSgpCisgICAgICAgIHNlbGYuZW52LmNsb3NlKCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJtdHJlZShzZWxmLmhvbWVEaXIpCisKKyAgICBkZWYgc2V0RW52T3B0cyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIG1ha2VEYXRhKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBEQVNILmpvaW4oW2tleV0gKiA1KQorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworY2xhc3MgQ29uY3VycmVudERhdGFTdG9yZUJhc2UoQmFzZVRocmVhZGVkVGVzdENhc2UpOgorICAgIGRib3BlbmZsYWdzID0gZGIuREJfVEhSRUFECisgICAgZW52ZmxhZ3MgICAgPSBkYi5EQl9USFJFQUQgfCBkYi5EQl9JTklUX0NEQiB8IGRiLkRCX0lOSVRfTVBPT0wKKyAgICByZWFkZXJzICAgICA9IDAgIyBkZXJpdmVkIGNsYXNzIHNob3VsZCBzZXQKKyAgICB3cml0ZXJzICAgICA9IDAKKyAgICByZWNvcmRzICAgICA9IDEwMDAKKworICAgIGRlZiB0ZXN0MDFfMVdyaXRlck11bHRpUmVhZGVycyhzZWxmKToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdcbicsICctPScgKiAzMAorICAgICAgICAgICAgcHJpbnQgIlJ1bm5pbmcgJXMudGVzdDAxXzFXcml0ZXJNdWx0aVJlYWRlcnMuLi4iICUgXAorICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBrZXlzPXJhbmdlKHNlbGYucmVjb3JkcykKKyAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICByYW5kb20uc2h1ZmZsZShrZXlzKQorICAgICAgICByZWNvcmRzX3Blcl93cml0ZXI9c2VsZi5yZWNvcmRzLy9zZWxmLndyaXRlcnMKKyAgICAgICAgcmVhZGVyc19wZXJfd3JpdGVyPXNlbGYucmVhZGVycy8vc2VsZi53cml0ZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWNvcmRzLHNlbGYud3JpdGVycypyZWNvcmRzX3Blcl93cml0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWFkZXJzLHNlbGYud3JpdGVycypyZWFkZXJzX3Blcl93cml0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgocmVjb3Jkc19wZXJfd3JpdGVyJXJlYWRlcnNfcGVyX3dyaXRlcik9PTApCisgICAgICAgIHJlYWRlcnMgPSBbXQorCisgICAgICAgIGZvciB4IGluIHhyYW5nZShzZWxmLnJlYWRlcnMpOgorICAgICAgICAgICAgcnQgPSBUaHJlYWQodGFyZ2V0ID0gc2VsZi5yZWFkZXJUaHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gKHNlbGYuZCwgeCksCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gJ3JlYWRlciAlZCcgJSB4LAorICAgICAgICAgICAgICAgICAgICAgICAgKSN2ZXJib3NlID0gdmVyYm9zZSkKKyAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKKyAgICAgICAgICAgICAgICBydC5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgICAgIHJ0LmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHJlYWRlcnMuYXBwZW5kKHJ0KQorCisgICAgICAgIHdyaXRlcnM9W10KKyAgICAgICAgZm9yIHggaW4geHJhbmdlKHNlbGYud3JpdGVycyk6CisgICAgICAgICAgICBhPWtleXNbcmVjb3Jkc19wZXJfd3JpdGVyKng6cmVjb3Jkc19wZXJfd3JpdGVyKih4KzEpXQorICAgICAgICAgICAgYS5zb3J0KCkgICMgR2VuZXJhdGUgY29uZmxpY3RzCisgICAgICAgICAgICBiPXJlYWRlcnNbcmVhZGVyc19wZXJfd3JpdGVyKng6cmVhZGVyc19wZXJfd3JpdGVyKih4KzEpXQorICAgICAgICAgICAgd3QgPSBUaHJlYWQodGFyZ2V0ID0gc2VsZi53cml0ZXJUaHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gKHNlbGYuZCwgYSwgYiksCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gJ3dyaXRlciAlZCcgJSB4LAorICAgICAgICAgICAgICAgICAgICAgICAgKSN2ZXJib3NlID0gdmVyYm9zZSkKKyAgICAgICAgICAgIHdyaXRlcnMuYXBwZW5kKHd0KQorCisgICAgICAgIGZvciB0IGluIHdyaXRlcnM6CisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgICAgICAgICAgICAgdC5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgICAgIHQuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgZm9yIHQgaW4gd3JpdGVyczoKKyAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgIGZvciB0IGluIHJlYWRlcnM6CisgICAgICAgICAgICB0LmpvaW4oKQorCisgICAgZGVmIHdyaXRlclRocmVhZChzZWxmLCBkLCBrZXlzLCByZWFkZXJzKToKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgorICAgICAgICAgICAgbmFtZSA9IGN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkKKyAgICAgICAgZWxzZSA6CisgICAgICAgICAgICBuYW1lID0gY3VycmVudFRocmVhZCgpLm5hbWUKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIiVzOiBjcmVhdGluZyByZWNvcmRzICVkIC0gJWQiICUgKG5hbWUsIHN0YXJ0LCBzdG9wKQorCisgICAgICAgIGNvdW50PWxlbihrZXlzKS8vbGVuKHJlYWRlcnMpCisgICAgICAgIGNvdW50Mj1jb3VudAorICAgICAgICBmb3IgeCBpbiBrZXlzIDoKKyAgICAgICAgICAgIGtleSA9ICclMDRkJyAlIHgKKyAgICAgICAgICAgIGRidXRpbHMuRGVhZGxvY2tXcmFwKGQucHV0LCBrZXksIHNlbGYubWFrZURhdGEoa2V5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9yZXRyaWVzPTEyKQorICAgICAgICAgICAgaWYgdmVyYm9zZSBhbmQgeCAlIDEwMCA9PSAwOgorICAgICAgICAgICAgICAgIHByaW50ICIlczogcmVjb3JkcyAlZCAtICVkIGZpbmlzaGVkIiAlIChuYW1lLCBzdGFydCwgeCkKKworICAgICAgICAgICAgY291bnQyLT0xCisgICAgICAgICAgICBpZiBub3QgY291bnQyIDoKKyAgICAgICAgICAgICAgICByZWFkZXJzLnBvcCgpLnN0YXJ0KCkKKyAgICAgICAgICAgICAgICBjb3VudDI9Y291bnQKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIiVzOiBmaW5pc2hlZCBjcmVhdGluZyByZWNvcmRzIiAlIG5hbWUKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIiVzOiB0aHJlYWQgZmluaXNoZWQiICUgbmFtZQorCisgICAgZGVmIHJlYWRlclRocmVhZChzZWxmLCBkLCByZWFkZXJOdW0pOgorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgICAgICAgICBuYW1lID0gY3VycmVudFRocmVhZCgpLmdldE5hbWUoKQorICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgIG5hbWUgPSBjdXJyZW50VGhyZWFkKCkubmFtZQorCisgICAgICAgIGZvciBpIGluIHhyYW5nZSg1KSA6CisgICAgICAgICAgICBjID0gZC5jdXJzb3IoKQorICAgICAgICAgICAgY291bnQgPSAwCisgICAgICAgICAgICByZWMgPSBjLmZpcnN0KCkKKyAgICAgICAgICAgIHdoaWxlIHJlYzoKKyAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICAgICAga2V5LCBkYXRhID0gcmVjCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VEYXRhKGtleSksIGRhdGEpCisgICAgICAgICAgICAgICAgcmVjID0gYy5uZXh0KCkKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIiVzOiBmb3VuZCAlZCByZWNvcmRzIiAlIChuYW1lLCBjb3VudCkKKyAgICAgICAgICAgIGMuY2xvc2UoKQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiJXM6IHRocmVhZCBmaW5pc2hlZCIgJSBuYW1lCisKKworY2xhc3MgQlRyZWVDb25jdXJyZW50RGF0YVN0b3JlKENvbmN1cnJlbnREYXRhU3RvcmVCYXNlKToKKyAgICBkYnR5cGUgID0gZGIuREJfQlRSRUUKKyAgICB3cml0ZXJzID0gMgorICAgIHJlYWRlcnMgPSAxMAorICAgIHJlY29yZHMgPSAxMDAwCisKKworY2xhc3MgSGFzaENvbmN1cnJlbnREYXRhU3RvcmUoQ29uY3VycmVudERhdGFTdG9yZUJhc2UpOgorICAgIGRidHlwZSAgPSBkYi5EQl9IQVNICisgICAgd3JpdGVycyA9IDIKKyAgICByZWFkZXJzID0gMTAKKyAgICByZWNvcmRzID0gMTAwMAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFNpbXBsZVRocmVhZGVkQmFzZShCYXNlVGhyZWFkZWRUZXN0Q2FzZSk6CisgICAgZGJvcGVuZmxhZ3MgPSBkYi5EQl9USFJFQUQKKyAgICBlbnZmbGFncyAgICA9IGRiLkRCX1RIUkVBRCB8IGRiLkRCX0lOSVRfTVBPT0wgfCBkYi5EQl9JTklUX0xPQ0sKKyAgICByZWFkZXJzID0gMTAKKyAgICB3cml0ZXJzID0gMgorICAgIHJlY29yZHMgPSAxMDAwCisKKyAgICBkZWYgc2V0RW52T3B0cyhzZWxmKToKKyAgICAgICAgc2VsZi5lbnYuc2V0X2xrX2RldGVjdChkYi5EQl9MT0NLX0RFRkFVTFQpCisKKyAgICBkZWYgdGVzdDAyX1NpbXBsZUxvY2tzKHNlbGYpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDJfU2ltcGxlTG9ja3MuLi4iICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworCisgICAgICAgIGtleXM9cmFuZ2Uoc2VsZi5yZWNvcmRzKQorICAgICAgICBpbXBvcnQgcmFuZG9tCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGtleXMpCisgICAgICAgIHJlY29yZHNfcGVyX3dyaXRlcj1zZWxmLnJlY29yZHMvL3NlbGYud3JpdGVycworICAgICAgICByZWFkZXJzX3Blcl93cml0ZXI9c2VsZi5yZWFkZXJzLy9zZWxmLndyaXRlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlY29yZHMsc2VsZi53cml0ZXJzKnJlY29yZHNfcGVyX3dyaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlYWRlcnMsc2VsZi53cml0ZXJzKnJlYWRlcnNfcGVyX3dyaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChyZWNvcmRzX3Blcl93cml0ZXIlcmVhZGVyc19wZXJfd3JpdGVyKT09MCkKKworICAgICAgICByZWFkZXJzID0gW10KKyAgICAgICAgZm9yIHggaW4geHJhbmdlKHNlbGYucmVhZGVycyk6CisgICAgICAgICAgICBydCA9IFRocmVhZCh0YXJnZXQgPSBzZWxmLnJlYWRlclRocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSAoc2VsZi5kLCB4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAncmVhZGVyICVkJyAlIHgsCisgICAgICAgICAgICAgICAgICAgICAgICApI3ZlcmJvc2UgPSB2ZXJib3NlKQorICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgorICAgICAgICAgICAgICAgIHJ0LnNldERhZW1vbihUcnVlKQorICAgICAgICAgICAgZWxzZSA6CisgICAgICAgICAgICAgICAgcnQuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgcmVhZGVycy5hcHBlbmQocnQpCisKKyAgICAgICAgd3JpdGVycyA9IFtdCisgICAgICAgIGZvciB4IGluIHhyYW5nZShzZWxmLndyaXRlcnMpOgorICAgICAgICAgICAgYT1rZXlzW3JlY29yZHNfcGVyX3dyaXRlcip4OnJlY29yZHNfcGVyX3dyaXRlciooeCsxKV0KKyAgICAgICAgICAgIGEuc29ydCgpICAjIEdlbmVyYXRlIGNvbmZsaWN0cworICAgICAgICAgICAgYj1yZWFkZXJzW3JlYWRlcnNfcGVyX3dyaXRlcip4OnJlYWRlcnNfcGVyX3dyaXRlciooeCsxKV0KKyAgICAgICAgICAgIHd0ID0gVGhyZWFkKHRhcmdldCA9IHNlbGYud3JpdGVyVGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IChzZWxmLmQsIGEsIGIpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICd3cml0ZXIgJWQnICUgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkjdmVyYm9zZSA9IHZlcmJvc2UpCisgICAgICAgICAgICB3cml0ZXJzLmFwcGVuZCh3dCkKKworICAgICAgICBmb3IgdCBpbiB3cml0ZXJzOgorICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgorICAgICAgICAgICAgICAgIHQuc2V0RGFlbW9uKFRydWUpCisgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICB0LmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgIGZvciB0IGluIHdyaXRlcnM6CisgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICBmb3IgdCBpbiByZWFkZXJzOgorICAgICAgICAgICAgdC5qb2luKCkKKworICAgIGRlZiB3cml0ZXJUaHJlYWQoc2VsZiwgZCwga2V5cywgcmVhZGVycyk6CisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzIDoKKyAgICAgICAgICAgIG5hbWUgPSBjdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpCisgICAgICAgIGVsc2UgOgorICAgICAgICAgICAgbmFtZSA9IGN1cnJlbnRUaHJlYWQoKS5uYW1lCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiJXM6IGNyZWF0aW5nIHJlY29yZHMgJWQgLSAlZCIgJSAobmFtZSwgc3RhcnQsIHN0b3ApCisKKyAgICAgICAgY291bnQ9bGVuKGtleXMpLy9sZW4ocmVhZGVycykKKyAgICAgICAgY291bnQyPWNvdW50CisgICAgICAgIGZvciB4IGluIGtleXMgOgorICAgICAgICAgICAga2V5ID0gJyUwNGQnICUgeAorICAgICAgICAgICAgZGJ1dGlscy5EZWFkbG9ja1dyYXAoZC5wdXQsIGtleSwgc2VsZi5tYWtlRGF0YShrZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3JldHJpZXM9MTIpCisKKyAgICAgICAgICAgIGlmIHZlcmJvc2UgYW5kIHggJSAxMDAgPT0gMDoKKyAgICAgICAgICAgICAgICBwcmludCAiJXM6IHJlY29yZHMgJWQgLSAlZCBmaW5pc2hlZCIgJSAobmFtZSwgc3RhcnQsIHgpCisKKyAgICAgICAgICAgIGNvdW50Mi09MQorICAgICAgICAgICAgaWYgbm90IGNvdW50MiA6CisgICAgICAgICAgICAgICAgcmVhZGVycy5wb3AoKS5zdGFydCgpCisgICAgICAgICAgICAgICAgY291bnQyPWNvdW50CisKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICIlczogdGhyZWFkIGZpbmlzaGVkIiAlIG5hbWUKKworICAgIGRlZiByZWFkZXJUaHJlYWQoc2VsZiwgZCwgcmVhZGVyTnVtKToKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgorICAgICAgICAgICAgbmFtZSA9IGN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkKKyAgICAgICAgZWxzZSA6CisgICAgICAgICAgICBuYW1lID0gY3VycmVudFRocmVhZCgpLm5hbWUKKworICAgICAgICBjID0gZC5jdXJzb3IoKQorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgcmVjID0gZGJ1dGlscy5EZWFkbG9ja1dyYXAoYy5maXJzdCwgbWF4X3JldHJpZXM9MTApCisgICAgICAgIHdoaWxlIHJlYzoKKyAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgICAgIGtleSwgZGF0YSA9IHJlYworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1ha2VEYXRhKGtleSksIGRhdGEpCisgICAgICAgICAgICByZWMgPSBkYnV0aWxzLkRlYWRsb2NrV3JhcChjLm5leHQsIG1heF9yZXRyaWVzPTEwKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIiVzOiBmb3VuZCAlZCByZWNvcmRzIiAlIChuYW1lLCBjb3VudCkKKyAgICAgICAgYy5jbG9zZSgpCisKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICIlczogdGhyZWFkIGZpbmlzaGVkIiAlIG5hbWUKKworCitjbGFzcyBCVHJlZVNpbXBsZVRocmVhZGVkKFNpbXBsZVRocmVhZGVkQmFzZSk6CisgICAgZGJ0eXBlID0gZGIuREJfQlRSRUUKKworCitjbGFzcyBIYXNoU2ltcGxlVGhyZWFkZWQoU2ltcGxlVGhyZWFkZWRCYXNlKToKKyAgICBkYnR5cGUgPSBkYi5EQl9IQVNICisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitjbGFzcyBUaHJlYWRlZFRyYW5zYWN0aW9uc0Jhc2UoQmFzZVRocmVhZGVkVGVzdENhc2UpOgorICAgIGRib3BlbmZsYWdzID0gZGIuREJfVEhSRUFEIHwgZGIuREJfQVVUT19DT01NSVQKKyAgICBlbnZmbGFncyAgICA9IChkYi5EQl9USFJFQUQgfAorICAgICAgICAgICAgICAgICAgIGRiLkRCX0lOSVRfTVBPT0wgfAorICAgICAgICAgICAgICAgICAgIGRiLkRCX0lOSVRfTE9DSyB8CisgICAgICAgICAgICAgICAgICAgZGIuREJfSU5JVF9MT0cgfAorICAgICAgICAgICAgICAgICAgIGRiLkRCX0lOSVRfVFhOCisgICAgICAgICAgICAgICAgICAgKQorICAgIHJlYWRlcnMgPSAwCisgICAgd3JpdGVycyA9IDAKKyAgICByZWNvcmRzID0gMjAwMAorICAgIHR4bkZsYWcgPSAwCisKKyAgICBkZWYgc2V0RW52T3B0cyhzZWxmKToKKyAgICAgICAgI3NlbGYuZW52LnNldF9sa19kZXRlY3QoZGIuREJfTE9DS19ERUZBVUxUKQorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdDAzX1RocmVhZGVkVHJhbnNhY3Rpb25zKHNlbGYpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1xuJywgJy09JyAqIDMwCisgICAgICAgICAgICBwcmludCAiUnVubmluZyAlcy50ZXN0MDNfVGhyZWFkZWRUcmFuc2FjdGlvbnMuLi4iICUgXAorICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18KKworICAgICAgICBrZXlzPXJhbmdlKHNlbGYucmVjb3JkcykKKyAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICByYW5kb20uc2h1ZmZsZShrZXlzKQorICAgICAgICByZWNvcmRzX3Blcl93cml0ZXI9c2VsZi5yZWNvcmRzLy9zZWxmLndyaXRlcnMKKyAgICAgICAgcmVhZGVyc19wZXJfd3JpdGVyPXNlbGYucmVhZGVycy8vc2VsZi53cml0ZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWNvcmRzLHNlbGYud3JpdGVycypyZWNvcmRzX3Blcl93cml0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWFkZXJzLHNlbGYud3JpdGVycypyZWFkZXJzX3Blcl93cml0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgocmVjb3Jkc19wZXJfd3JpdGVyJXJlYWRlcnNfcGVyX3dyaXRlcik9PTApCisKKyAgICAgICAgcmVhZGVycz1bXQorICAgICAgICBmb3IgeCBpbiB4cmFuZ2Uoc2VsZi5yZWFkZXJzKToKKyAgICAgICAgICAgIHJ0ID0gVGhyZWFkKHRhcmdldCA9IHNlbGYucmVhZGVyVGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IChzZWxmLmQsIHgpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICdyZWFkZXIgJWQnICUgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkjdmVyYm9zZSA9IHZlcmJvc2UpCisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgICAgICAgICAgICAgcnQuc2V0RGFlbW9uKFRydWUpCisgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICBydC5kYWVtb24gPSBUcnVlCisgICAgICAgICAgICByZWFkZXJzLmFwcGVuZChydCkKKworICAgICAgICB3cml0ZXJzID0gW10KKyAgICAgICAgZm9yIHggaW4geHJhbmdlKHNlbGYud3JpdGVycyk6CisgICAgICAgICAgICBhPWtleXNbcmVjb3Jkc19wZXJfd3JpdGVyKng6cmVjb3Jkc19wZXJfd3JpdGVyKih4KzEpXQorICAgICAgICAgICAgYj1yZWFkZXJzW3JlYWRlcnNfcGVyX3dyaXRlcip4OnJlYWRlcnNfcGVyX3dyaXRlciooeCsxKV0KKyAgICAgICAgICAgIHd0ID0gVGhyZWFkKHRhcmdldCA9IHNlbGYud3JpdGVyVGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IChzZWxmLmQsIGEsIGIpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICd3cml0ZXIgJWQnICUgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkjdmVyYm9zZSA9IHZlcmJvc2UpCisgICAgICAgICAgICB3cml0ZXJzLmFwcGVuZCh3dCkKKworICAgICAgICBkdCA9IFRocmVhZCh0YXJnZXQgPSBzZWxmLmRlYWRsb2NrVGhyZWFkKQorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgICAgICAgICBkdC5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgZWxzZSA6CisgICAgICAgICAgICBkdC5kYWVtb24gPSBUcnVlCisgICAgICAgIGR0LnN0YXJ0KCkKKworICAgICAgICBmb3IgdCBpbiB3cml0ZXJzOgorICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgorICAgICAgICAgICAgICAgIHQuc2V0RGFlbW9uKFRydWUpCisgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICB0LmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgIGZvciB0IGluIHdyaXRlcnM6CisgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICBmb3IgdCBpbiByZWFkZXJzOgorICAgICAgICAgICAgdC5qb2luKCkKKworICAgICAgICBzZWxmLmRvTG9ja0RldGVjdCA9IEZhbHNlCisgICAgICAgIGR0LmpvaW4oKQorCisgICAgZGVmIHdyaXRlclRocmVhZChzZWxmLCBkLCBrZXlzLCByZWFkZXJzKToKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDMgOgorICAgICAgICAgICAgbmFtZSA9IGN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkKKyAgICAgICAgZWxzZSA6CisgICAgICAgICAgICBuYW1lID0gY3VycmVudFRocmVhZCgpLm5hbWUKKworICAgICAgICBjb3VudD1sZW4oa2V5cykvL2xlbihyZWFkZXJzKQorICAgICAgICB3aGlsZSBsZW4oa2V5cyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdHhuID0gc2VsZi5lbnYudHhuX2JlZ2luKE5vbmUsIHNlbGYudHhuRmxhZykKKyAgICAgICAgICAgICAgICBrZXlzMj1rZXlzWzpjb3VudF0KKyAgICAgICAgICAgICAgICBmb3IgeCBpbiBrZXlzMiA6CisgICAgICAgICAgICAgICAgICAgIGtleSA9ICclMDRkJyAlIHgKKyAgICAgICAgICAgICAgICAgICAgZC5wdXQoa2V5LCBzZWxmLm1ha2VEYXRhKGtleSksIHR4bikKKyAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZSBhbmQgeCAlIDEwMCA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiVzOiByZWNvcmRzICVkIC0gJWQgZmluaXNoZWQiICUgKG5hbWUsIHN0YXJ0LCB4KQorICAgICAgICAgICAgICAgIHR4bi5jb21taXQoKQorICAgICAgICAgICAgICAgIGtleXM9a2V5c1tjb3VudDpdCisgICAgICAgICAgICAgICAgcmVhZGVycy5wb3AoKS5zdGFydCgpCisgICAgICAgICAgICBleGNlcHQgKGRiLkRCTG9ja0RlYWRsb2NrRXJyb3IsIGRiLkRCTG9ja05vdEdyYW50ZWRFcnJvciksIHZhbDoKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIlczogQWJvcnRpbmcgdHJhbnNhY3Rpb24gKCVzKSIgJSAobmFtZSwgdmFsWzFdKQorICAgICAgICAgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIlczogQWJvcnRpbmcgdHJhbnNhY3Rpb24gKCVzKSIgJSAobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLmFyZ3NbMV0pCisgICAgICAgICAgICAgICAgdHhuLmFib3J0KCkKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIiVzOiB0aHJlYWQgZmluaXNoZWQiICUgbmFtZQorCisgICAgZGVmIHJlYWRlclRocmVhZChzZWxmLCBkLCByZWFkZXJOdW0pOgorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzBdIDwgMyA6CisgICAgICAgICAgICBuYW1lID0gY3VycmVudFRocmVhZCgpLmdldE5hbWUoKQorICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgIG5hbWUgPSBjdXJyZW50VGhyZWFkKCkubmFtZQorCisgICAgICAgIGZpbmlzaGVkID0gRmFsc2UKKyAgICAgICAgd2hpbGUgbm90IGZpbmlzaGVkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHR4biA9IHNlbGYuZW52LnR4bl9iZWdpbihOb25lLCBzZWxmLnR4bkZsYWcpCisgICAgICAgICAgICAgICAgYyA9IGQuY3Vyc29yKHR4bikKKyAgICAgICAgICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgICAgICAgICByZWMgPSBjLmZpcnN0KCkKKyAgICAgICAgICAgICAgICB3aGlsZSByZWM6CisgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICAgICAga2V5LCBkYXRhID0gcmVjCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYWtlRGF0YShrZXkpLCBkYXRhKQorICAgICAgICAgICAgICAgICAgICByZWMgPSBjLm5leHQoKQorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICIlczogZm91bmQgJWQgcmVjb3JkcyIgJSAobmFtZSwgY291bnQpCisgICAgICAgICAgICAgICAgYy5jbG9zZSgpCisgICAgICAgICAgICAgICAgdHhuLmNvbW1pdCgpCisgICAgICAgICAgICAgICAgZmluaXNoZWQgPSBUcnVlCisgICAgICAgICAgICBleGNlcHQgKGRiLkRCTG9ja0RlYWRsb2NrRXJyb3IsIGRiLkRCTG9ja05vdEdyYW50ZWRFcnJvciksIHZhbDoKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDYpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIlczogQWJvcnRpbmcgdHJhbnNhY3Rpb24gKCVzKSIgJSAobmFtZSwgdmFsWzFdKQorICAgICAgICAgICAgICAgICAgICBlbHNlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIlczogQWJvcnRpbmcgdHJhbnNhY3Rpb24gKCVzKSIgJSAobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLmFyZ3NbMV0pCisgICAgICAgICAgICAgICAgYy5jbG9zZSgpCisgICAgICAgICAgICAgICAgdHhuLmFib3J0KCkKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIiVzOiB0aHJlYWQgZmluaXNoZWQiICUgbmFtZQorCisgICAgZGVmIGRlYWRsb2NrVGhyZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmRvTG9ja0RldGVjdCA9IFRydWUKKyAgICAgICAgd2hpbGUgc2VsZi5kb0xvY2tEZXRlY3Q6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYWJvcnRlZCA9IHNlbGYuZW52LmxvY2tfZGV0ZWN0KAorICAgICAgICAgICAgICAgICAgICBkYi5EQl9MT0NLX1JBTkRPTSwgZGIuREJfTE9DS19DT05GTElDVCkKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlIGFuZCBhYm9ydGVkOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiZGVhZGxvY2s6IEFib3J0ZWQgJWQgZGVhZGxvY2tlZCB0cmFuc2FjdGlvbihzKSIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAlIGFib3J0ZWQKKyAgICAgICAgICAgIGV4Y2VwdCBkYi5EQkVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworCitjbGFzcyBCVHJlZVRocmVhZGVkVHJhbnNhY3Rpb25zKFRocmVhZGVkVHJhbnNhY3Rpb25zQmFzZSk6CisgICAgZGJ0eXBlID0gZGIuREJfQlRSRUUKKyAgICB3cml0ZXJzID0gMgorICAgIHJlYWRlcnMgPSAxMAorICAgIHJlY29yZHMgPSAxMDAwCisKK2NsYXNzIEhhc2hUaHJlYWRlZFRyYW5zYWN0aW9ucyhUaHJlYWRlZFRyYW5zYWN0aW9uc0Jhc2UpOgorICAgIGRidHlwZSA9IGRiLkRCX0hBU0gKKyAgICB3cml0ZXJzID0gMgorICAgIHJlYWRlcnMgPSAxMAorICAgIHJlY29yZHMgPSAxMDAwCisKK2NsYXNzIEJUcmVlVGhyZWFkZWROb1dhaXRUcmFuc2FjdGlvbnMoVGhyZWFkZWRUcmFuc2FjdGlvbnNCYXNlKToKKyAgICBkYnR5cGUgPSBkYi5EQl9CVFJFRQorICAgIHdyaXRlcnMgPSAyCisgICAgcmVhZGVycyA9IDEwCisgICAgcmVjb3JkcyA9IDEwMDAKKyAgICB0eG5GbGFnID0gZGIuREJfVFhOX05PV0FJVAorCitjbGFzcyBIYXNoVGhyZWFkZWROb1dhaXRUcmFuc2FjdGlvbnMoVGhyZWFkZWRUcmFuc2FjdGlvbnNCYXNlKToKKyAgICBkYnR5cGUgPSBkYi5EQl9IQVNICisgICAgd3JpdGVycyA9IDIKKyAgICByZWFkZXJzID0gMTAKKyAgICByZWNvcmRzID0gMTAwMAorICAgIHR4bkZsYWcgPSBkYi5EQl9UWE5fTk9XQUlUCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHRlc3Rfc3VpdGUoKToKKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICBpZiBoYXZlX3RocmVhZHM6CisgICAgICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEJUcmVlQ29uY3VycmVudERhdGFTdG9yZSkpCisgICAgICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEhhc2hDb25jdXJyZW50RGF0YVN0b3JlKSkKKyAgICAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoQlRyZWVTaW1wbGVUaHJlYWRlZCkpCisgICAgICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEhhc2hTaW1wbGVUaHJlYWRlZCkpCisgICAgICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKEJUcmVlVGhyZWFkZWRUcmFuc2FjdGlvbnMpKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShIYXNoVGhyZWFkZWRUcmFuc2FjdGlvbnMpKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShCVHJlZVRocmVhZGVkTm9XYWl0VHJhbnNhY3Rpb25zKSkKKyAgICAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoSGFzaFRocmVhZGVkTm9XYWl0VHJhbnNhY3Rpb25zKSkKKworICAgIGVsc2U6CisgICAgICAgIHByaW50ICJUaHJlYWRzIG5vdCBhdmFpbGFibGUsIHNraXBwaW5nIHRocmVhZCB0ZXN0cy4iCisKKyAgICByZXR1cm4gc3VpdGUKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3Rlc3Rfc3VpdGUnKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jb25maWcvTWFrZWZpbGUgYi9saWIvcHl0aG9uMi43L2NvbmZpZy9NYWtlZmlsZQppbmRleCBlZTIwNTliLi5lMmM2NmFjIDEwMDY0NAotLS0gYS9saWIvcHl0aG9uMi43L2NvbmZpZy9NYWtlZmlsZQorKysgYi9saWIvcHl0aG9uMi43L2NvbmZpZy9NYWtlZmlsZQpAQCAtMjYsMTEgKzI2LDExIEBACiAKICMgPT09IFZhcmlhYmxlcyBzZXQgYnkgY29uZmlndXJlCiBWRVJTSU9OPQkyLjcKLXNyY2Rpcj0JCS9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3QvcmVwb19jbGllbnRzL2h0dHBzX19fYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tX2FfcGxhdGZvcm1fbWFuaWZlc3QuZ2l0L21hc3Rlci1uZGsvdG9vbGNoYWluL3B5dGhvbi9QeXRob24tMi43LjUKLVZQQVRIPQkJL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9yZXBvX2NsaWVudHMvaHR0cHNfX19hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb21fYV9wbGF0Zm9ybV9tYW5pZmVzdC5naXQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNQotTVNZU1ZQQVRIPQkvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3JlcG9fY2xpZW50cy9odHRwc19fX2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbV9hX3BsYXRmb3JtX21hbmlmZXN0LmdpdC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41Ci1hYnNfc3JjZGlyPQkvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3JlcG9fY2xpZW50cy9odHRwc19fX2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbV9hX3BsYXRmb3JtX21hbmlmZXN0LmdpdC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41Ci1hYnNfYnVpbGRkaXI9CS9idWlsZGJvdC90bXAvYnVpbGRob3N0L2J1aWxkLXB5dGhvbi1kYXJ3aW4teDg2XzY0LTIuNy41CitzcmNkaXI9CQkvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3NyYy9hbmRyb2lkL21hc3Rlci1uZGsvdG9vbGNoYWluL3B5dGhvbi9QeXRob24tMi43LjUKK1ZQQVRIPQkJL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41CitNU1lTVlBBVEg9CS9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNQorYWJzX3NyY2Rpcj0JL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9zcmMvYW5kcm9pZC9tYXN0ZXItbmRrL3Rvb2xjaGFpbi9weXRob24vUHl0aG9uLTIuNy41CithYnNfYnVpbGRkaXI9CS9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2J1aWxkLXB5dGhvbi1kYXJ3aW4teDg2XzY0LTIuNy41CiBidWlsZD0JCXg4Nl82NC1hcHBsZS1kYXJ3aW4KIGhvc3Q9CQl4ODZfNjQtYXBwbGUtZGFyd2luCiAKQEAgLTYzLDcgKzYzLDcgQEAKICMgQWxzbywgbWFraW5nIHRoZW0gcmVhZC1vbmx5IHNlZW1zIHRvIGJlIGEgZ29vZCBpZGVhLi4uCiBJTlNUQUxMX1NIQVJFRD0gJHtJTlNUQUxMfSAtbSA1NTUKIAotTUtESVJfUD0JL1ZvbHVtZXMvQW5kcm9pZC9idWlsZGJvdC9yZXBvX2NsaWVudHMvaHR0cHNfX19hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb21fYV9wbGF0Zm9ybV9tYW5pZmVzdC5naXQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNS9pbnN0YWxsLXNoIC1jIC1kCitNS0RJUl9QPQkvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3NyYy9hbmRyb2lkL21hc3Rlci1uZGsvdG9vbGNoYWluL3B5dGhvbi9QeXRob24tMi43LjUvaW5zdGFsbC1zaCAtYyAtZAogCiBNQUtFU0VUVVA9ICAgICAgJChzcmNkaXIpL01vZHVsZXMvbWFrZXNldHVwCiAKQEAgLTk1LDcgKzk1LDcgQEAKIE1VTFRJQVJDSD0JCiAKICMgSW5zdGFsbCBwcmVmaXggZm9yIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcwotcHJlZml4PQkJL2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0CitwcmVmaXg9CQkvVm9sdW1lcy9BbmRyb2lkL2J1aWxkYm90L3NyYy9hbmRyb2lkL21hc3Rlci1uZGsvb3V0L2J1aWxkL2J1aWxkaG9zdC9kYXJ3aW4teDg2XzY0L2luc3RhbGwvaG9zdC10b29scwogCiAjIEluc3RhbGwgcHJlZml4IGZvciBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzCiBleGVjX3ByZWZpeD0JJHtwcmVmaXh9CkBAIC0xNTQsNyArMTU0LDcgQEAKIEZJTEVNT0RFPQk2NDQKIAogIyBjb25maWd1cmUgc2NyaXB0IGFyZ3VtZW50cwotQ09ORklHX0FSR1M9CSAnLS1wcmVmaXg9L2J1aWxkYm90L3RtcC9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0JyAnLS1idWlsZD14ODZfNjQtYXBwbGUtZGFyd2luJyAnLS1ob3N0PXg4Nl82NC1hcHBsZS1kYXJ3aW4nICctLXdpdGgtYnVpbGQtc3lzcm9vdCcgJy0tZGlzYWJsZS1pcHY2JyAnYnVpbGRfYWxpYXM9eDg2XzY0LWFwcGxlLWRhcndpbicgJ2hvc3RfYWxpYXM9eDg2XzY0LWFwcGxlLWRhcndpbicgJ0NDPXg4Nl82NC1hcHBsZS1kYXJ3aW4tZ2NjJyAnQ0ZMQUdTPS1PMiAtT3MgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLXMnICdMREZMQUdTPScKK0NPTkZJR19BUkdTPQkgJy0tcHJlZml4PS9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay9vdXQvYnVpbGQvYnVpbGRob3N0L2Rhcndpbi14ODZfNjQvaW5zdGFsbC9ob3N0LXRvb2xzJyAnLS1idWlsZD14ODZfNjQtYXBwbGUtZGFyd2luJyAnLS1ob3N0PXg4Nl82NC1hcHBsZS1kYXJ3aW4nICctLXdpdGgtYnVpbGQtc3lzcm9vdCcgJy0tZGlzYWJsZS1pcHY2JyAnYnVpbGRfYWxpYXM9eDg2XzY0LWFwcGxlLWRhcndpbicgJ2hvc3RfYWxpYXM9eDg2XzY0LWFwcGxlLWRhcndpbicgJ0NDPXg4Nl82NC1hcHBsZS1kYXJ3aW4tZ2NjJyAnQ0ZMQUdTPS1PMiAtT3MgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLXMnICdMREZMQUdTPScKIAogCiAjIFN1YmRpcmVjdG9yaWVzIHdpdGggY29kZQpAQCAtNTQwLDcgKzU0MCw3IEBACiAjIGZvciBhIHNoYXJlZCBjb3JlIGxpYnJhcnk7IG90aGVyd2lzZSwgdGhpcyBydWxlIGlzIGEgbm9vcC4KICQoRExMTElCUkFSWSkgbGlicHl0aG9uJChWRVJTSU9OKS5kbGwuYTogJChMSUJSQVJZX09CSlMpCiAJaWYgdGVzdCAtbiAiJChETExMSUJSQVJZKSI7IHRoZW4gXAotCQkkKExEU0hBUkVEKSAtV2wsLS1vdXQtaW1wbGliPSRAIC1vICQoRExMTElCUkFSWSkgJF4gXAorCQkkKExEU0hBUkVEKSAtV2wsLS1vdXQtaW1wbGliPSRAIC1vICQoRExMTElCUkFSWSkgLXN0YXRpYy1saWJnY2MgJF4gXAogCQkJJChMSUJTKSAkKE1PRExJQlMpICQoU1lTTElCUykgJChMRExBU1QpOyBcCiAJZWxzZSB0cnVlOyBcCiAJZmkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY29uZmlnL2NvbmZpZy5jIGIvbGliL3B5dGhvbjIuNy9jb25maWcvY29uZmlnLmMKaW5kZXggNjcxYTRmNC4uYzcyN2VkZCAxMDA2NDQKLS0tIGEvbGliL3B5dGhvbjIuNy9jb25maWcvY29uZmlnLmMKKysrIGIvbGliL3B5dGhvbjIuNy9jb25maWcvY29uZmlnLmMKQEAgLTEsNCArMSw0IEBACi0vKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIC9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3QvcmVwb19jbGllbnRzL2h0dHBzX19fYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tX2FfcGxhdGZvcm1fbWFuaWZlc3QuZ2l0L21hc3Rlci1uZGsvdG9vbGNoYWluL3B5dGhvbi9QeXRob24tMi43LjUvTW9kdWxlcy9jb25maWcuYy5pbiBieSBtYWtlc2V0dXAuICovCisvKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIC9Wb2x1bWVzL0FuZHJvaWQvYnVpbGRib3Qvc3JjL2FuZHJvaWQvbWFzdGVyLW5kay90b29sY2hhaW4vcHl0aG9uL1B5dGhvbi0yLjcuNS9Nb2R1bGVzL2NvbmZpZy5jLmluIGJ5IG1ha2VzZXR1cC4gKi8KIC8qIC0qLSBDIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogQ29weXJpZ2h0IChjKSAyMDAwLCBCZU9wZW4uY29tLgogQ29weXJpZ2h0IChjKSAxOTk1LTIwMDAsIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcy4KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY29uZmlnL2xpYnB5dGhvbjIuNy5hIGIvbGliL3B5dGhvbjIuNy9jb25maWcvbGlicHl0aG9uMi43LmEKaW5kZXggNTFjMTZiMy4uOGFiMDdlZSAxMDA2NDQKLS0tIGEvbGliL3B5dGhvbjIuNy9jb25maWcvbGlicHl0aG9uMi43LmEKKysrIGIvbGliL3B5dGhvbjIuNy9jb25maWcvbGlicHl0aG9uMi43LmEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC9fX2luaXRfXy5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4ZTQxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvX19pbml0X18ucHkKQEAgLTAsMCArMSwyMDggQEAKK2ltcG9ydCBvcywgc3lzLCB1bml0dGVzdCwgZ2V0b3B0LCB0aW1lCisKK3VzZV9yZXNvdXJjZXMgPSBbXQorCitjbGFzcyBSZXNvdXJjZURlbmllZChFeGNlcHRpb24pOgorICAgICIiIlRlc3Qgc2tpcHBlZCBiZWNhdXNlIGl0IHJlcXVlc3RlZCBhIGRpc2FsbG93ZWQgcmVzb3VyY2UuCisKKyAgICBUaGlzIGlzIHJhaXNlZCB3aGVuIGEgdGVzdCBjYWxscyByZXF1aXJlcygpIGZvciBhIHJlc291cmNlIHRoYXQKKyAgICBoYXMgbm90IGJlIGVuYWJsZWQuICBSZXNvdXJjZXMgYXJlIGRlZmluZWQgYnkgdGVzdCBtb2R1bGVzLgorICAgICIiIgorCitkZWYgaXNfcmVzb3VyY2VfZW5hYmxlZChyZXNvdXJjZSk6CisgICAgIiIiVGVzdCB3aGV0aGVyIGEgcmVzb3VyY2UgaXMgZW5hYmxlZC4KKworICAgIElmIHRoZSBjYWxsZXIncyBtb2R1bGUgaXMgX19tYWluX18gdGhlbiBhdXRvbWF0aWNhbGx5IHJldHVybiBUcnVlLiIiIgorICAgIGlmIHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2suZl9nbG9iYWxzLmdldCgiX19uYW1lX18iKSA9PSAiX19tYWluX18iOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJlc3VsdCA9IHVzZV9yZXNvdXJjZXMgaXMgbm90IE5vbmUgYW5kIFwKKyAgICAgICAgICAgKHJlc291cmNlIGluIHVzZV9yZXNvdXJjZXMgb3IgIioiIGluIHVzZV9yZXNvdXJjZXMpCisgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAgX3VuYXZhaWxbcmVzb3VyY2VdID0gTm9uZQorICAgIHJldHVybiByZXN1bHQKKworX3VuYXZhaWwgPSB7fQorZGVmIHJlcXVpcmVzKHJlc291cmNlLCBtc2c9Tm9uZSk6CisgICAgIiIiUmFpc2UgUmVzb3VyY2VEZW5pZWQgaWYgdGhlIHNwZWNpZmllZCByZXNvdXJjZSBpcyBub3QgYXZhaWxhYmxlLgorCisgICAgSWYgdGhlIGNhbGxlcidzIG1vZHVsZSBpcyBfX21haW5fXyB0aGVuIGF1dG9tYXRpY2FsbHkgcmV0dXJuIFRydWUuIiIiCisgICAgIyBzZWUgaWYgdGhlIGNhbGxlcidzIG1vZHVsZSBpcyBfX21haW5fXyAtIGlmIHNvLCB0cmVhdCBhcyBpZgorICAgICMgdGhlIHJlc291cmNlIHdhcyBzZXQKKyAgICBpZiBzeXMuX2dldGZyYW1lKCkuZl9iYWNrLmZfZ2xvYmFscy5nZXQoIl9fbmFtZV9fIikgPT0gIl9fbWFpbl9fIjoKKyAgICAgICAgcmV0dXJuCisgICAgaWYgbm90IGlzX3Jlc291cmNlX2VuYWJsZWQocmVzb3VyY2UpOgorICAgICAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgICAgIG1zZyA9ICJVc2Ugb2YgdGhlIGAlcycgcmVzb3VyY2Ugbm90IGVuYWJsZWQiICUgcmVzb3VyY2UKKyAgICAgICAgcmFpc2UgUmVzb3VyY2VEZW5pZWQobXNnKQorCitkZWYgZmluZF9wYWNrYWdlX21vZHVsZXMocGFja2FnZSwgbWFzayk6CisgICAgaW1wb3J0IGZubWF0Y2gKKyAgICBpZiAoaGFzYXR0cihwYWNrYWdlLCAiX19sb2FkZXJfXyIpIGFuZAorICAgICAgICAgICAgaGFzYXR0cihwYWNrYWdlLl9fbG9hZGVyX18sICdfZmlsZXMnKSk6CisgICAgICAgIHBhdGggPSBwYWNrYWdlLl9fbmFtZV9fLnJlcGxhY2UoIi4iLCBvcy5wYXRoLnNlcCkKKyAgICAgICAgbWFzayA9IG9zLnBhdGguam9pbihwYXRoLCBtYXNrKQorICAgICAgICBmb3IgZm5tIGluIHBhY2thZ2UuX19sb2FkZXJfXy5fZmlsZXMuaXRlcmtleXMoKToKKyAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2UoZm5tLCBtYXNrKToKKyAgICAgICAgICAgICAgICB5aWVsZCBvcy5wYXRoLnNwbGl0ZXh0KGZubSlbMF0ucmVwbGFjZShvcy5wYXRoLnNlcCwgIi4iKQorICAgIGVsc2U6CisgICAgICAgIHBhdGggPSBwYWNrYWdlLl9fcGF0aF9fWzBdCisgICAgICAgIGZvciBmbm0gaW4gb3MubGlzdGRpcihwYXRoKToKKyAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2UoZm5tLCBtYXNrKToKKyAgICAgICAgICAgICAgICB5aWVsZCAiJXMuJXMiICUgKHBhY2thZ2UuX19uYW1lX18sIG9zLnBhdGguc3BsaXRleHQoZm5tKVswXSkKKworZGVmIGdldF90ZXN0cyhwYWNrYWdlLCBtYXNrLCB2ZXJib3NpdHksIGV4Y2x1ZGU9KCkpOgorICAgICIiIlJldHVybiBhIGxpc3Qgb2Ygc2tpcHBlZCB0ZXN0IG1vZHVsZXMsIGFuZCBhIGxpc3Qgb2YgdGVzdCBjYXNlcy4iIiIKKyAgICB0ZXN0cyA9IFtdCisgICAgc2tpcHBlZCA9IFtdCisgICAgZm9yIG1vZG5hbWUgaW4gZmluZF9wYWNrYWdlX21vZHVsZXMocGFja2FnZSwgbWFzayk6CisgICAgICAgIGlmIG1vZG5hbWUuc3BsaXQoIi4iKVstMV0gaW4gZXhjbHVkZToKKyAgICAgICAgICAgIHNraXBwZWQuYXBwZW5kKG1vZG5hbWUpCisgICAgICAgICAgICBpZiB2ZXJib3NpdHkgPiAxOgorICAgICAgICAgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICJTa2lwcGVkICVzOiBleGNsdWRlZCIgJSBtb2RuYW1lCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2QgPSBfX2ltcG9ydF9fKG1vZG5hbWUsIGdsb2JhbHMoKSwgbG9jYWxzKCksIFsnKiddKQorICAgICAgICBleGNlcHQgKFJlc291cmNlRGVuaWVkLCB1bml0dGVzdC5Ta2lwVGVzdCkgYXMgZGV0YWlsOgorICAgICAgICAgICAgc2tpcHBlZC5hcHBlbmQobW9kbmFtZSkKKyAgICAgICAgICAgIGlmIHZlcmJvc2l0eSA+IDE6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIlNraXBwZWQgJXM6ICVzIiAlIChtb2RuYW1lLCBkZXRhaWwpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgbmFtZSBpbiBkaXIobW9kKToKKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiXyIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBvID0gZ2V0YXR0cihtb2QsIG5hbWUpCisgICAgICAgICAgICBpZiB0eXBlKG8pIGlzIHR5cGUodW5pdHRlc3QuVGVzdENhc2UpIGFuZCBpc3N1YmNsYXNzKG8sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgICAgICB0ZXN0cy5hcHBlbmQobykKKyAgICByZXR1cm4gc2tpcHBlZCwgdGVzdHMKKworZGVmIHVzYWdlKCk6CisgICAgcHJpbnQgX19kb2NfXworICAgIHJldHVybiAxCisKK2RlZiB0ZXN0X3dpdGhfcmVmY291bnRzKHJ1bm5lciwgdmVyYm9zaXR5LCB0ZXN0Y2FzZSk6CisgICAgIiIiUnVuIHRlc3RjYXNlIHNldmVyYWwgdGltZXMsIHRyYWNraW5nIHJlZmVyZW5jZSBjb3VudHMuIiIiCisgICAgaW1wb3J0IGdjCisgICAgaW1wb3J0IGN0eXBlcworICAgIHB0YyA9IGN0eXBlcy5fcG9pbnRlcl90eXBlX2NhY2hlLmNvcHkoKQorICAgIGNmYyA9IGN0eXBlcy5fY19mdW5jdHlwZV9jYWNoZS5jb3B5KCkKKyAgICB3ZmMgPSBjdHlwZXMuX3dpbl9mdW5jdHlwZV9jYWNoZS5jb3B5KCkKKworICAgICMgd2hlbiBzZWFyY2hpbmcgZm9yIHJlZmNvdW50IGxlYWtzLCB3ZSBoYXZlIHRvIG1hbnVhbGx5IHJlc2V0IGFueQorICAgICMgY2FjaGVzIHRoYXQgY3R5cGVzIGhhcy4KKyAgICBkZWYgY2xlYW51cCgpOgorICAgICAgICBjdHlwZXMuX3BvaW50ZXJfdHlwZV9jYWNoZSA9IHB0Yy5jb3B5KCkKKyAgICAgICAgY3R5cGVzLl9jX2Z1bmN0eXBlX2NhY2hlID0gY2ZjLmNvcHkoKQorICAgICAgICBjdHlwZXMuX3dpbl9mdW5jdHlwZV9jYWNoZSA9IHdmYy5jb3B5KCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICB0ZXN0ID0gdW5pdHRlc3QubWFrZVN1aXRlKHRlc3RjYXNlKQorICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICByYyA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgcnVubmVyLnJ1bih0ZXN0KQorICAgICAgICBjbGVhbnVwKCkKKyAgICBDT1VOVCA9IDUKKyAgICByZWZjb3VudHMgPSBbTm9uZV0gKiBDT1VOVAorICAgIGZvciBpIGluIHJhbmdlKENPVU5UKToKKyAgICAgICAgcmMgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgIHJ1bm5lci5ydW4odGVzdCkKKyAgICAgICAgY2xlYW51cCgpCisgICAgICAgIHJlZmNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkgLSByYworICAgIGlmIGZpbHRlcihOb25lLCByZWZjb3VudHMpOgorICAgICAgICBwcmludCAiJXMgbGVha3M6XG5cdCIgJSB0ZXN0Y2FzZSwgcmVmY291bnRzCisgICAgZWxpZiB2ZXJib3NpdHk6CisgICAgICAgIHByaW50ICIlczogb2suIiAlIHRlc3RjYXNlCisKK2NsYXNzIFRlc3RSdW5uZXIodW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIpOgorICAgIGRlZiBydW4oc2VsZiwgdGVzdCwgc2tpcHBlZCk6CisgICAgICAgICJSdW4gdGhlIGdpdmVuIHRlc3QgY2FzZSBvciB0ZXN0IHN1aXRlLiIKKyAgICAgICAgIyBTYW1lIGFzIHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyLnJ1biwgZXhjZXB0IHRoYXQgaXQgcmVwb3J0cworICAgICAgICAjIHNraXBwZWQgdGVzdHMuCisgICAgICAgIHJlc3VsdCA9IHNlbGYuX21ha2VSZXN1bHQoKQorICAgICAgICBzdGFydFRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICB0ZXN0KHJlc3VsdCkKKyAgICAgICAgc3RvcFRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICB0aW1lVGFrZW4gPSBzdG9wVGltZSAtIHN0YXJ0VGltZQorICAgICAgICByZXN1bHQucHJpbnRFcnJvcnMoKQorICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKHJlc3VsdC5zZXBhcmF0b3IyKQorICAgICAgICBydW4gPSByZXN1bHQudGVzdHNSdW4KKyAgICAgICAgaWYgX3VuYXZhaWw6ICNza2lwcGVkOgorICAgICAgICAgICAgcmVxdWVzdGVkID0gX3VuYXZhaWwua2V5cygpCisgICAgICAgICAgICByZXF1ZXN0ZWQuc29ydCgpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJSYW4gJWQgdGVzdCVzIGluICUuM2ZzICglcyBtb2R1bGUlcyBza2lwcGVkKSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnVuLCBydW4gIT0gMSBhbmQgInMiIG9yICIiLCB0aW1lVGFrZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2tpcHBlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2tpcHBlZCkgIT0gMSBhbmQgInMiIG9yICIiKSkKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIlVuYXZhaWxhYmxlIHJlc291cmNlczogJXMiICUgIiwgIi5qb2luKHJlcXVlc3RlZCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJSYW4gJWQgdGVzdCVzIGluICUuM2ZzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydW4sIHJ1biAhPSAxIGFuZCAicyIgb3IgIiIsIHRpbWVUYWtlbikpCisgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oKQorICAgICAgICBpZiBub3QgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKToKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCJGQUlMRUQgKCIpCisgICAgICAgICAgICBmYWlsZWQsIGVycm9yZWQgPSBtYXAobGVuLCAocmVzdWx0LmZhaWx1cmVzLCByZXN1bHQuZXJyb3JzKSkKKyAgICAgICAgICAgIGlmIGZhaWxlZDoKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgiZmFpbHVyZXM9JWQiICUgZmFpbGVkKQorICAgICAgICAgICAgaWYgZXJyb3JlZDoKKyAgICAgICAgICAgICAgICBpZiBmYWlsZWQ6IHNlbGYuc3RyZWFtLndyaXRlKCIsICIpCisgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoImVycm9ycz0lZCIgJSBlcnJvcmVkKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiKSIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJPSyIpCisgICAgICAgIHJldHVybiByZXN1bHQKKworCitkZWYgbWFpbigqcGFja2FnZXMpOgorICAgIHRyeToKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAicnF2dTp4OiIpCisgICAgZXhjZXB0IGdldG9wdC5lcnJvcjoKKyAgICAgICAgcmV0dXJuIHVzYWdlKCkKKworICAgIHZlcmJvc2l0eSA9IDEKKyAgICBzZWFyY2hfbGVha3MgPSBGYWxzZQorICAgIGV4Y2x1ZGUgPSBbXQorICAgIGZvciBmbGFnLCB2YWx1ZSBpbiBvcHRzOgorICAgICAgICBpZiBmbGFnID09ICItcSI6CisgICAgICAgICAgICB2ZXJib3NpdHkgLT0gMQorICAgICAgICBlbGlmIGZsYWcgPT0gIi12IjoKKyAgICAgICAgICAgIHZlcmJvc2l0eSArPSAxCisgICAgICAgIGVsaWYgZmxhZyA9PSAiLXIiOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN5cy5nZXR0b3RhbHJlZmNvdW50CisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIi1yIGZsYWcgcmVxdWlyZXMgUHl0aG9uIGRlYnVnIGJ1aWxkIgorICAgICAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICAgICAgc2VhcmNoX2xlYWtzID0gVHJ1ZQorICAgICAgICBlbGlmIGZsYWcgPT0gIi11IjoKKyAgICAgICAgICAgIHVzZV9yZXNvdXJjZXMuZXh0ZW5kKHZhbHVlLnNwbGl0KCIsIikpCisgICAgICAgIGVsaWYgZmxhZyA9PSAiLXgiOgorICAgICAgICAgICAgZXhjbHVkZS5leHRlbmQodmFsdWUuc3BsaXQoIiwiKSkKKworICAgIG1hc2sgPSAidGVzdF8qLnB5IgorICAgIGlmIGFyZ3M6CisgICAgICAgIG1hc2sgPSBhcmdzWzBdCisKKyAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgcnVuX3Rlc3RzKHBhY2thZ2UsIG1hc2ssIHZlcmJvc2l0eSwgc2VhcmNoX2xlYWtzLCBleGNsdWRlKQorCisKK2RlZiBydW5fdGVzdHMocGFja2FnZSwgbWFzaywgdmVyYm9zaXR5LCBzZWFyY2hfbGVha3MsIGV4Y2x1ZGUpOgorICAgIHNraXBwZWQsIHRlc3RjYXNlcyA9IGdldF90ZXN0cyhwYWNrYWdlLCBtYXNrLCB2ZXJib3NpdHksIGV4Y2x1ZGUpCisgICAgcnVubmVyID0gVGVzdFJ1bm5lcih2ZXJib3NpdHk9dmVyYm9zaXR5KQorCisgICAgc3VpdGVzID0gW3VuaXR0ZXN0Lm1ha2VTdWl0ZShvKSBmb3IgbyBpbiB0ZXN0Y2FzZXNdCisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoc3VpdGVzKQorICAgIHJlc3VsdCA9IHJ1bm5lci5ydW4oc3VpdGUsIHNraXBwZWQpCisKKyAgICBpZiBzZWFyY2hfbGVha3M6CisgICAgICAgICMgaHVudCBmb3IgcmVmY291bnQgbGVha3MKKyAgICAgICAgcnVubmVyID0gQmFzaWNUZXN0UnVubmVyKCkKKyAgICAgICAgZm9yIHQgaW4gdGVzdGNhc2VzOgorICAgICAgICAgICAgdGVzdF93aXRoX3JlZmNvdW50cyhydW5uZXIsIHZlcmJvc2l0eSwgdCkKKworICAgIHJldHVybiBib29sKHJlc3VsdC5lcnJvcnMpCisKK2NsYXNzIEJhc2ljVGVzdFJ1bm5lcjoKKyAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdGVzdChyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvcnVudGVzdHMucHkgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3J1bnRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMzFmYzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3J1bnRlc3RzLnB5CkBAIC0wLDAgKzEsMTkgQEAKKyIiIlVzYWdlOiBydW50ZXN0cy5weSBbLXFdIFstcl0gWy12XSBbLXUgcmVzb3VyY2VzXSBbbWFza10KKworUnVuIGFsbCB0ZXN0cyBmb3VuZCBpbiB0aGlzIGRpcmVjdG9yeSwgYW5kIHByaW50IGEgc3VtbWFyeSBvZiB0aGUgcmVzdWx0cy4KK0NvbW1hbmQgbGluZSBmbGFnczoKKyAgLXEgICAgIHF1aWV0IG1vZGU6IGRvbid0IHBybnQgYW55dGhpbmcgd2hpbGUgdGhlIHRlc3RzIGFyZSBydW5uaW5nCisgIC1yICAgICBydW4gdGVzdHMgcmVwZWF0ZWRseSwgbG9vayBmb3IgcmVmY291bnQgbGVha3MKKyAgLXU8cmVzb3VyY2VzPgorICAgICAgICAgQWRkIHJlc291cmNlcyB0byB0aGUgbGl0cyBvZiBhbGxvd2VkIHJlc291cmNlcy4gJyonIGFsbG93cyBhbGwKKyAgICAgICAgIHJlc291cmNlcy4KKyAgLXYgICAgIHZlcmJvc2UgbW9kZTogcHJpbnQgdGhlIHRlc3QgY3VycmVudGx5IGV4ZWN1dGVkCisgIC14PHRlc3QxWyx0ZXN0Mi4uLl0+CisgICAgICAgICBFeGNsdWRlIHNwZWNpZmllZCB0ZXN0cy4KKyAgbWFzayAgIG1hc2sgdG8gc2VsZWN0IGZpbGVuYW1lcyBjb250YWluaW5nIHRlc3RjYXNlcywgd2lsZGNhcmRzIGFsbG93ZWQKKyIiIgoraW1wb3J0IHN5cworaW1wb3J0IGN0eXBlcy50ZXN0CisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgc3lzLmV4aXQoY3R5cGVzLnRlc3QubWFpbihjdHlwZXMudGVzdCkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfYW5vbi5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9hbm9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4OTJiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfYW5vbi5weQpAQCAtMCwwICsxLDYwIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY3R5cGVzIGltcG9ydCAqCisKK2NsYXNzIEFub25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Fub24oc2VsZik6CisgICAgICAgIGNsYXNzIEFOT04oVW5pb24pOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19pbnQpXQorCisgICAgICAgIGNsYXNzIFkoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiXyIsIEFOT04pLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJ5IiwgY19pbnQpXQorICAgICAgICAgICAgX2Fub255bW91c18gPSBbIl8iXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWS5hLm9mZnNldCwgc2l6ZW9mKGNfaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChZLmIub2Zmc2V0LCBzaXplb2YoY19pbnQpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQU5PTi5hLm9mZnNldCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBTk9OLmIub2Zmc2V0LCAwKQorCisgICAgZGVmIHRlc3RfYW5vbl9ub25zZXEoc2VsZik6CisgICAgICAgICMgVHlwZUVycm9yOiBfYW5vbnltb3VzXyBtdXN0IGJlIGEgc2VxdWVuY2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiB0eXBlKFN0cnVjdHVyZSkoIk5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFN0cnVjdHVyZSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJfZmllbGRzXyI6IFtdLCAiX2Fub255bW91c18iOiA0Mn0pKQorCisgICAgZGVmIHRlc3RfYW5vbl9ub25tZW1iZXIoc2VsZik6CisgICAgICAgICMgQXR0cmlidXRlRXJyb3I6IHR5cGUgb2JqZWN0ICdOYW1lJyBoYXMgbm8gYXR0cmlidXRlICd4JworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogdHlwZShTdHJ1Y3R1cmUpKCJOYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTdHJ1Y3R1cmUsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiX2ZpZWxkc18iOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX2Fub255bW91c18iOiBbIngiXX0pKQorCisgICAgZGVmIHRlc3RfbmVzdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBBTk9OX1MoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfaW50KV0KKworICAgICAgICBjbGFzcyBBTk9OX1UoVW5pb24pOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJfIiwgQU5PTl9TKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfaW50KV0KKyAgICAgICAgICAgIF9hbm9ueW1vdXNfID0gWyJfIl0KKworICAgICAgICBjbGFzcyBZKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAoIl8iLCBBTk9OX1UpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJ5IiwgY19pbnQpXQorICAgICAgICAgICAgX2Fub255bW91c18gPSBbIl8iXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWS54Lm9mZnNldCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChZLmEub2Zmc2V0LCBzaXplb2YoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkuYi5vZmZzZXQsIHNpemVvZihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWS5fLm9mZnNldCwgc2l6ZW9mKGNfaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChZLnkub2Zmc2V0LCBzaXplb2YoY19pbnQpICogMikKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheV9pbl9wb2ludGVyLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2FycmF5X2luX3BvaW50ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU3ODYzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheV9pbl9wb2ludGVyLnB5CkBAIC0wLDAgKzEsNjQgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gYmluYXNjaWkgaW1wb3J0IGhleGxpZnkKK2ltcG9ydCByZQorCitkZWYgZHVtcChvYmopOgorICAgICMgaGVscGVyIGZ1bmN0aW9uIHRvIGR1bXAgbWVtb3J5IGNvbnRlbnRzIGluIGhleCwgd2l0aCBhIGh5cGhlbgorICAgICMgYmV0d2VlbiB0aGUgYnl0ZXMuCisgICAgaCA9IGhleGxpZnkobWVtb3J5dmlldyhvYmopKQorICAgIHJldHVybiByZS5zdWIociIoLi4pIiwgciJcMS0iLCBoKVs6LTFdCisKKworY2xhc3MgVmFsdWUoU3RydWN0dXJlKToKKyAgICBfZmllbGRzXyA9IFsoInZhbCIsIGNfYnl0ZSldCisKK2NsYXNzIENvbnRhaW5lcihTdHJ1Y3R1cmUpOgorICAgIF9maWVsZHNfID0gWygicHZhbHVlcyIsIFBPSU5URVIoVmFsdWUpKV0KKworY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICMgY3JlYXRlIGFuIGFycmF5IG9mIDQgdmFsdWVzCisgICAgICAgIHZhbF9hcnJheSA9IChWYWx1ZSAqIDQpKCkKKworICAgICAgICAjIGNyZWF0ZSBhIGNvbnRhaW5lciwgd2hpY2ggaG9sZHMgYSBwb2ludGVyIHRvIHRoZSBwdmFsdWVzIGFycmF5LgorICAgICAgICBjID0gQ29udGFpbmVyKCkKKyAgICAgICAgYy5wdmFsdWVzID0gdmFsX2FycmF5CisKKyAgICAgICAgIyBtZW1vcnkgY29udGFpbnMgNCBOVUwgYnl0ZXMgbm93LCB0aGF0J3MgY29ycmVjdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIwMC0wMC0wMC0wMCIsIGR1bXAodmFsX2FycmF5KSkKKworICAgICAgICAjIHNldCB0aGUgdmFsdWVzIG9mIHRoZSBhcnJheSB0aHJvdWdoIHRoZSBwb2ludGVyOgorICAgICAgICBmb3IgaSBpbiByYW5nZSg0KToKKyAgICAgICAgICAgIGMucHZhbHVlc1tpXS52YWwgPSBpICsgMQorCisgICAgICAgIHZhbHVlcyA9IFtjLnB2YWx1ZXNbaV0udmFsIGZvciBpIGluIHJhbmdlKDQpXQorCisgICAgICAgICMgVGhlc2UgYXJlIHRoZSBleHBlY3RlZCByZXN1bHRzOiBoZXJlIHMgdGhlIGJ1ZyEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICh2YWx1ZXMsIGR1bXAodmFsX2FycmF5KSksCisgICAgICAgICAgICAoWzEsIDIsIDMsIDRdLCAiMDEtMDItMDMtMDQiKQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF8yKHNlbGYpOgorCisgICAgICAgIHZhbF9hcnJheSA9IChWYWx1ZSAqIDQpKCkKKworICAgICAgICAjIG1lbW9yeSBjb250YWlucyA0IE5VTCBieXRlcyBub3csIHRoYXQncyBjb3JyZWN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjAwLTAwLTAwLTAwIiwgZHVtcCh2YWxfYXJyYXkpKQorCisgICAgICAgIHB0ciA9IGNhc3QodmFsX2FycmF5LCBQT0lOVEVSKFZhbHVlKSkKKyAgICAgICAgIyBzZXQgdGhlIHZhbHVlcyBvZiB0aGUgYXJyYXkgdGhyb3VnaCB0aGUgcG9pbnRlcjoKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNCk6CisgICAgICAgICAgICBwdHJbaV0udmFsID0gaSArIDEKKworICAgICAgICB2YWx1ZXMgPSBbcHRyW2ldLnZhbCBmb3IgaSBpbiByYW5nZSg0KV0KKworICAgICAgICAjIFRoZXNlIGFyZSB0aGUgZXhwZWN0ZWQgcmVzdWx0czogaGVyZSBzIHRoZSBidWchCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAodmFsdWVzLCBkdW1wKHZhbF9hcnJheSkpLAorICAgICAgICAgICAgKFsxLCAyLCAzLCA0XSwgIjAxLTAyLTAzLTA0IikKKyAgICAgICAgKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2FycmF5cy5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1ZjhiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheXMucHkKQEAgLTAsMCArMSwxMzQgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjdHlwZXMgaW1wb3J0ICoKKworZm9ybWF0cyA9ICJiQmhIaUlsTHFRZmQiCisKK2Zvcm1hdHMgPSBjX2J5dGUsIGNfdWJ5dGUsIGNfc2hvcnQsIGNfdXNob3J0LCBjX2ludCwgY191aW50LCBcCisgICAgICAgICAgY19sb25nLCBjX3Vsb25nbG9uZywgY19mbG9hdCwgY19kb3VibGUsIGNfbG9uZ2RvdWJsZQorCitjbGFzcyBBcnJheVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgICMgY3JlYXRlIGNsYXNzZXMgaG9sZGluZyBzaW1wbGUgbnVtZXJpYyB0eXBlcywgYW5kIGNoZWNrCisgICAgICAgICMgdmFyaW91cyBwcm9wZXJ0aWVzLgorCisgICAgICAgIGluaXQgPSByYW5nZSgxNSwgMjUpCisKKyAgICAgICAgZm9yIGZtdCBpbiBmb3JtYXRzOgorICAgICAgICAgICAgYWxlbiA9IGxlbihpbml0KQorICAgICAgICAgICAgaW50X2FycmF5ID0gQVJSQVkoZm10LCBhbGVuKQorCisgICAgICAgICAgICBpYSA9IGludF9hcnJheSgqaW5pdCkKKyAgICAgICAgICAgICMgbGVuZ3RoIG9mIGluc3RhbmNlIG9rPworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaWEpLCBhbGVuKQorCisgICAgICAgICAgICAjIHNsb3QgdmFsdWVzIG9rPworICAgICAgICAgICAgdmFsdWVzID0gW2lhW2ldIGZvciBpIGluIHJhbmdlKGxlbihpbml0KSldCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcywgaW5pdCkKKworICAgICAgICAgICAgIyBjaGFuZ2UgdGhlIGl0ZW1zCisgICAgICAgICAgICBmcm9tIG9wZXJhdG9yIGltcG9ydCBzZXRpdGVtCisgICAgICAgICAgICBuZXdfdmFsdWVzID0gcmFuZ2UoNDIsIDQyK2FsZW4pCisgICAgICAgICAgICBbc2V0aXRlbShpYSwgbiwgbmV3X3ZhbHVlc1tuXSkgZm9yIG4gaW4gcmFuZ2UoYWxlbildCisgICAgICAgICAgICB2YWx1ZXMgPSBbaWFbaV0gZm9yIGkgaW4gcmFuZ2UobGVuKGluaXQpKV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzLCBuZXdfdmFsdWVzKQorCisgICAgICAgICAgICAjIGFyZSB0aGUgaXRlbXMgaW5pdGlhbGl6ZWQgdG8gMD8KKyAgICAgICAgICAgIGlhID0gaW50X2FycmF5KCkKKyAgICAgICAgICAgIHZhbHVlcyA9IFtpYVtpXSBmb3IgaSBpbiByYW5nZShsZW4oaW5pdCkpXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXMsIFswXSAqIGxlbihpbml0KSkKKworICAgICAgICAgICAgIyBUb28gbWFueSBpbml0aWFsaXplcnMgc2hvdWxkIGJlIGNhdWdodAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgaW50X2FycmF5LCAqcmFuZ2UoYWxlbioyKSkKKworICAgICAgICBDaGFyQXJyYXkgPSBBUlJBWShjX2NoYXIsIDMpCisKKyAgICAgICAgY2EgPSBDaGFyQXJyYXkoImEiLCAiYiIsICJjIikKKworICAgICAgICAjIFNob3VsZCB0aGlzIHdvcms/IEl0IGRvZXNuJ3Q6CisgICAgICAgICMgQ2hhckFycmF5KCJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIENoYXJBcnJheSwgImFiYyIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYVswXSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhWzFdLCAiYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FbMl0sICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYVstM10sICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYVstMl0sICJiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYVstMV0sICJjIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjYSksIDMpCisKKyAgICAgICAgIyBzbGljaW5nIGlzIG5vdyBzdXBwb3J0ZWQsIGJ1dCBub3QgZXh0ZW5kZWQgc2xpY2luZyAoMy1hcmd1bWVudCkhCisgICAgICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IGdldHNsaWNlLCBkZWxpdGVtCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0c2xpY2UsIGNhLCAwLCAxLCAtMSkKKworICAgICAgICAjIGNhbm5vdCBkZWxldGUgaXRlbXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkZWxpdGVtLCBjYSwgMCkKKworICAgIGRlZiB0ZXN0X251bWVyaWNfYXJyYXlzKHNlbGYpOgorCisgICAgICAgIGFsZW4gPSA1CisKKyAgICAgICAgbnVtYXJyYXkgPSBBUlJBWShjX2ludCwgYWxlbikKKworICAgICAgICBuYSA9IG51bWFycmF5KCkKKyAgICAgICAgdmFsdWVzID0gW25hW2ldIGZvciBpIGluIHJhbmdlKGFsZW4pXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcywgWzBdICogYWxlbikKKworICAgICAgICBuYSA9IG51bWFycmF5KCpbY19pbnQoKV0gKiBhbGVuKQorICAgICAgICB2YWx1ZXMgPSBbbmFbaV0gZm9yIGkgaW4gcmFuZ2UoYWxlbildCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzLCBbMF0qYWxlbikKKworICAgICAgICBuYSA9IG51bWFycmF5KDEsIDIsIDMsIDQsIDUpCisgICAgICAgIHZhbHVlcyA9IFtpIGZvciBpIGluIG5hXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcywgWzEsIDIsIDMsIDQsIDVdKQorCisgICAgICAgIG5hID0gbnVtYXJyYXkoKm1hcChjX2ludCwgKDEsIDIsIDMsIDQsIDUpKSkKKyAgICAgICAgdmFsdWVzID0gW2kgZm9yIGkgaW4gbmFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzLCBbMSwgMiwgMywgNCwgNV0pCisKKyAgICBkZWYgdGVzdF9jbGFzc2NhY2hlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IEFSUkFZKGNfaW50LCAzKSBpcyBBUlJBWShjX2ludCwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBUlJBWShjX2ludCwgMykgaXMgQVJSQVkoY19pbnQsIDMpKQorCisgICAgZGVmIHRlc3RfZnJvbV9hZGRyZXNzKHNlbGYpOgorICAgICAgICAjIEZhaWxlZCB3aXRoIDAuOS44LCByZXBvcnRlZCBieSBKVXJuZXIKKyAgICAgICAgcCA9IGNyZWF0ZV9zdHJpbmdfYnVmZmVyKCJmb28iKQorICAgICAgICBzeiA9IChjX2NoYXIgKiAzKS5mcm9tX2FkZHJlc3MoYWRkcmVzc29mKHApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6WzpdLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6Ol0sICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6Wzo6LTFdLCAib29mIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6OjNdLCAiZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbMTo0OjJdLCAibyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3oudmFsdWUsICJmb28iKQorCisgICAgdHJ5OgorICAgICAgICBjcmVhdGVfdW5pY29kZV9idWZmZXIKKyAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgZGVmIHRlc3RfZnJvbV9hZGRyZXNzVyhzZWxmKToKKyAgICAgICAgICAgIHAgPSBjcmVhdGVfdW5pY29kZV9idWZmZXIoImZvbyIpCisgICAgICAgICAgICBzeiA9IChjX3djaGFyICogMykuZnJvbV9hZGRyZXNzKGFkZHJlc3NvZihwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOl0sICJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6Ol0sICJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6Oi0xXSwgIm9vZiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6Wzo6M10sICJmIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbMTo0OjJdLCAibyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6LnZhbHVlLCAiZm9vIikKKworICAgIGRlZiB0ZXN0X2NhY2hlKHNlbGYpOgorICAgICAgICAjIEFycmF5IHR5cGVzIGFyZSBjYWNoZWQgaW50ZXJuYWxseSBpbiB0aGUgX2N0eXBlcyBleHRlbnNpb24sCisgICAgICAgICMgaW4gYSBXZWFrVmFsdWVEaWN0aW9uYXJ5LiAgTWFrZSBzdXJlIHRoZSBhcnJheSB0eXBlIGlzCisgICAgICAgICMgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSB3aGVuIHRoZSBpdGVtdHlwZSBnb2VzIGF3YXkuICBUaGlzCisgICAgICAgICMgdGVzdCB3aWxsIG5vdCBmYWlsLCBidXQgd2lsbCBzaG93IGEgbGVhayBpbiB0aGUgdGVzdHN1aXRlLgorCisgICAgICAgICMgQ3JlYXRlIGEgbmV3IHR5cGU6CisgICAgICAgIGNsYXNzIG15X2ludChjX2ludCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgQ3JlYXRlIGEgbmV3IGFycmF5IHR5cGUgYmFzZWQgb24gaXQ6CisgICAgICAgIHQxID0gbXlfaW50ICogMQorICAgICAgICB0MiA9IG15X2ludCAqIDEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIGlzIHQyKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2FzX3BhcmFtZXRlci5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9hc19wYXJhbWV0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1M2U2NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9hc19wYXJhbWV0ZXIucHkKQEAgLTAsMCArMSwyMzMgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2ltcG9ydCBfY3R5cGVzX3Rlc3QKK2ltcG9ydCBzeXMKKworZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisKK3RyeToKKyAgICBDQUxMQkFDS19GVU5DVFlQRSA9IFdJTkZVTkNUWVBFCitleGNlcHQgTmFtZUVycm9yOgorICAgICMgZmFrZSB0byBlbmFibGUgdGhpcyB0ZXN0IG9uIExpbnV4CisgICAgQ0FMTEJBQ0tfRlVOQ1RZUEUgPSBDRlVOQ1RZUEUKKworY2xhc3MgUE9JTlQoU3RydWN0dXJlKToKKyAgICBfZmllbGRzXyA9IFsoIngiLCBjX2ludCksICgieSIsIGNfaW50KV0KKworY2xhc3MgQmFzaWNXcmFwVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB3cmFwKHNlbGYsIHBhcmFtKToKKyAgICAgICAgcmV0dXJuIHBhcmFtCisKKyAgICBkZWYgdGVzdF93Y2hhcl9wYXJtKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjX3djaGFyCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfaV9iaGlsZmQKKyAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfd2NoYXIsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfZG91YmxlXQorICAgICAgICByZXN1bHQgPSBmKHNlbGYud3JhcCgxKSwgc2VsZi53cmFwKHUieCIpLCBzZWxmLndyYXAoMyksIHNlbGYud3JhcCg0KSwgc2VsZi53cmFwKDUuMCksIHNlbGYud3JhcCg2LjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMTM5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShyZXN1bHQpLCBpbnQpCisKKyAgICBkZWYgdGVzdF9wb2ludGVycyhzZWxmKToKKyAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfcF9wCisgICAgICAgIGYucmVzdHlwZSA9IFBPSU5URVIoY19pbnQpCisgICAgICAgIGYuYXJndHlwZXMgPSBbUE9JTlRFUihjX2ludCldCisKKyAgICAgICAgIyBUaGlzIG9ubHkgd29ya3MgaWYgdGhlIHZhbHVlIGNfaW50KDQyKSBwYXNzZWQgdG8gdGhlCisgICAgICAgICMgZnVuY3Rpb24gaXMgc3RpbGwgYWxpdmUgd2hpbGUgdGhlIHBvaW50ZXIgKHRoZSByZXN1bHQpIGlzCisgICAgICAgICMgdXNlZC4KKworICAgICAgICB2ID0gY19pbnQoNDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb2ludGVyKHYpLmNvbnRlbnRzLnZhbHVlLCA0MikKKyAgICAgICAgcmVzdWx0ID0gZihzZWxmLndyYXAocG9pbnRlcih2KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCBQT0lOVEVSKGNfaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuY29udGVudHMudmFsdWUsIDQyKQorCisgICAgICAgICMgVGhpcyBvbiB3b3Jrcy4uLgorICAgICAgICByZXN1bHQgPSBmKHNlbGYud3JhcChwb2ludGVyKHYpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuY29udGVudHMudmFsdWUsIHYudmFsdWUpCisKKyAgICAgICAgcCA9IHBvaW50ZXIoY19pbnQoOTkpKQorICAgICAgICByZXN1bHQgPSBmKHNlbGYud3JhcChwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuY29udGVudHMudmFsdWUsIDk5KQorCisgICAgZGVmIHRlc3Rfc2hvcnRzKHNlbGYpOgorICAgICAgICBmID0gZGxsLl90ZXN0ZnVuY19jYWxsYmFja19pX2lmCisKKyAgICAgICAgYXJncyA9IFtdCisgICAgICAgIGV4cGVjdGVkID0gWzI2MjE0NCwgMTMxMDcyLCA2NTUzNiwgMzI3NjgsIDE2Mzg0LCA4MTkyLCA0MDk2LCAyMDQ4LAorICAgICAgICAgICAgICAgICAgICAxMDI0LCA1MTIsIDI1NiwgMTI4LCA2NCwgMzIsIDE2LCA4LCA0LCAyLCAxXQorCisgICAgICAgIGRlZiBjYWxsYmFjayh2KToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHYpCisgICAgICAgICAgICByZXR1cm4gdgorCisgICAgICAgIENhbGxCYWNrID0gQ0ZVTkNUWVBFKGNfaW50LCBjX2ludCkKKworICAgICAgICBjYiA9IENhbGxCYWNrKGNhbGxiYWNrKQorICAgICAgICBmKHNlbGYud3JhcCgyKioxOCksIHNlbGYud3JhcChjYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgZXhwZWN0ZWQpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3Moc2VsZik6CisgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX2NhbGxiYWNrX2lfaWYKKyAgICAgICAgZi5yZXN0eXBlID0gY19pbnQKKyAgICAgICAgZi5hcmd0eXBlcyA9IE5vbmUKKworICAgICAgICBNeUNhbGxiYWNrID0gQ0ZVTkNUWVBFKGNfaW50LCBjX2ludCkKKworICAgICAgICBkZWYgY2FsbGJhY2sodmFsdWUpOgorICAgICAgICAgICAgI3ByaW50ICJjYWxsZWQgYmFjayB3aXRoIiwgdmFsdWUKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgICAgIGNiID0gTXlDYWxsYmFjayhjYWxsYmFjaykKKworICAgICAgICByZXN1bHQgPSBmKHNlbGYud3JhcCgtMTApLCBzZWxmLndyYXAoY2IpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTE4KQorCisgICAgICAgICMgdGVzdCB3aXRoIHByb3RvdHlwZQorICAgICAgICBmLmFyZ3R5cGVzID0gW2NfaW50LCBNeUNhbGxiYWNrXQorICAgICAgICBjYiA9IE15Q2FsbGJhY2soY2FsbGJhY2spCisKKyAgICAgICAgcmVzdWx0ID0gZihzZWxmLndyYXAoLTEwKSwgc2VsZi53cmFwKGNiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIC0xOCkKKworICAgICAgICByZXN1bHQgPSBmKHNlbGYud3JhcCgtMTApLCBzZWxmLndyYXAoY2IpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTE4KQorCisgICAgICAgIEFub3RoZXJDYWxsYmFjayA9IENBTExCQUNLX0ZVTkNUWVBFKGNfaW50LCBjX2ludCwgY19pbnQsIGNfaW50LCBjX2ludCkKKworICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIHByb3RvdHlwZSB3b3Jrczogd2UgY2FsbCBmIHdpdGggd3JvbmcKKyAgICAgICAgIyBhcmd1bWVudCB0eXBlcworICAgICAgICBjYiA9IEFub3RoZXJDYWxsYmFjayhjYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRFcnJvciwgZiwgc2VsZi53cmFwKC0xMCksIHNlbGYud3JhcChjYikpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3NfMihzZWxmKToKKyAgICAgICAgIyBDYW4gYWxzbyB1c2Ugc2ltcGxlIGRhdGF0eXBlcyBhcyBhcmd1bWVudCB0eXBlIHNwZWNpZmllcnMKKyAgICAgICAgIyBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorICAgICAgICAjIEluIHRoaXMgY2FzZSB0aGUgY2FsbCByZWNlaXZlcyBhbiBpbnN0YW5jZSBvZiB0aGF0IHR5cGUKKyAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfY2FsbGJhY2tfaV9pZgorICAgICAgICBmLnJlc3R5cGUgPSBjX2ludAorCisgICAgICAgIE15Q2FsbGJhY2sgPSBDRlVOQ1RZUEUoY19pbnQsIGNfaW50KQorCisgICAgICAgIGYuYXJndHlwZXMgPSBbY19pbnQsIE15Q2FsbGJhY2tdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKHZhbHVlKToKKyAgICAgICAgICAgICNwcmludCAiY2FsbGVkIGJhY2sgd2l0aCIsIHZhbHVlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsdWUpLCBpbnQpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworICAgICAgICBjYiA9IE15Q2FsbGJhY2soY2FsbGJhY2spCisgICAgICAgIHJlc3VsdCA9IGYoc2VsZi53cmFwKC0xMCksIHNlbGYud3JhcChjYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAtMTgpCisKKyAgICBkZWYgdGVzdF9sb25nbG9uZ19jYWxsYmFja3Moc2VsZik6CisKKyAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfY2FsbGJhY2tfcV9xZgorICAgICAgICBmLnJlc3R5cGUgPSBjX2xvbmdsb25nCisKKyAgICAgICAgTXlDYWxsYmFjayA9IENGVU5DVFlQRShjX2xvbmdsb25nLCBjX2xvbmdsb25nKQorCisgICAgICAgIGYuYXJndHlwZXMgPSBbY19sb25nbG9uZywgTXlDYWxsYmFja10KKworICAgICAgICBkZWYgY2FsbGJhY2sodmFsdWUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmFsdWUsIChpbnQsIGxvbmcpKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSAmIDB4N0ZGRkZGRkYKKworICAgICAgICBjYiA9IE15Q2FsbGJhY2soY2FsbGJhY2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMzU3NzYyNTU4NywgaW50KGYoc2VsZi53cmFwKDEwMDAwMDAwMDAwMDApLCBzZWxmLndyYXAoY2IpKSkpCisKKyAgICBkZWYgdGVzdF9ieXZhbChzZWxmKToKKyAgICAgICAgIyB3aXRob3V0IHByb3RvdHlwZQorICAgICAgICBwdGluID0gUE9JTlQoMSwgMikKKyAgICAgICAgcHRvdXQgPSBQT0lOVCgpCisgICAgICAgICMgRVhQT1JUIGludCBfdGVzdGZ1bmNfYnl2YWwocG9pbnQgaW4sIHBvaW50ICpwb3V0KQorICAgICAgICByZXN1bHQgPSBkbGwuX3Rlc3RmdW5jX2J5dmFsKHB0aW4sIGJ5cmVmKHB0b3V0KSkKKyAgICAgICAgZ290ID0gcmVzdWx0LCBwdG91dC54LCBwdG91dC55CisgICAgICAgIGV4cGVjdGVkID0gMywgMSwgMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCisKKyAgICAgICAgIyB3aXRoIHByb3RvdHlwZQorICAgICAgICBwdGluID0gUE9JTlQoMTAxLCAxMDIpCisgICAgICAgIHB0b3V0ID0gUE9JTlQoKQorICAgICAgICBkbGwuX3Rlc3RmdW5jX2J5dmFsLmFyZ3R5cGVzID0gKFBPSU5ULCBQT0lOVEVSKFBPSU5UKSkKKyAgICAgICAgZGxsLl90ZXN0ZnVuY19ieXZhbC5yZXN0eXBlID0gY19pbnQKKyAgICAgICAgcmVzdWx0ID0gZGxsLl90ZXN0ZnVuY19ieXZhbChzZWxmLndyYXAocHRpbiksIGJ5cmVmKHB0b3V0KSkKKyAgICAgICAgZ290ID0gcmVzdWx0LCBwdG91dC54LCBwdG91dC55CisgICAgICAgIGV4cGVjdGVkID0gMjAzLCAxMDEsIDEwMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zdHJ1Y3RfcmV0dXJuXzJIKHNlbGYpOgorICAgICAgICBjbGFzcyBTMkgoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfc2hvcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJ5IiwgY19zaG9ydCldCisgICAgICAgIGRsbC5yZXRfMmhfZnVuYy5yZXN0eXBlID0gUzJICisgICAgICAgIGRsbC5yZXRfMmhfZnVuYy5hcmd0eXBlcyA9IFtTMkhdCisgICAgICAgIGlucCA9IFMySCg5OSwgODgpCisgICAgICAgIHMyaCA9IGRsbC5yZXRfMmhfZnVuYyhzZWxmLndyYXAoaW5wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoczJoLngsIHMyaC55KSwgKDk5KjIsIDg4KjMpKQorCisgICAgIyBUaGlzIGlzIGtub3duIGNkZWNsIGluY29tcGF0aWJpbGl0eSBiZXR3ZWVuIEdDQworICAgICMgYW5kIE1TVkMuIEl0IGlzIGFkZHJlc3NlZCBpbiBHQ0MgaXNzdWUgIzM2ODM0LgorICAgICMgUHl0aG9uIGxpYmZmaSBkZXRlY3QgaXQgYW5kIGNvbXBsYWluLgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIgYW5kIHN5cy52ZXJzaW9uLmZpbmQoIkdDQyIpID49IDAsICdYRkFJTCBHQ0MobWluZ3cpJykKKyAgICBkZWYgdGVzdF9zdHJ1Y3RfcmV0dXJuXzhIKHNlbGYpOgorICAgICAgICBjbGFzcyBTOEkoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYyIsIGNfaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiZCIsIGNfaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiZSIsIGNfaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiZiIsIGNfaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiZyIsIGNfaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiaCIsIGNfaW50KV0KKyAgICAgICAgZGxsLnJldF84aV9mdW5jLnJlc3R5cGUgPSBTOEkKKyAgICAgICAgZGxsLnJldF84aV9mdW5jLmFyZ3R5cGVzID0gW1M4SV0KKyAgICAgICAgaW5wID0gUzhJKDksIDgsIDcsIDYsIDUsIDQsIDMsIDIpCisgICAgICAgIHM4aSA9IGRsbC5yZXRfOGlfZnVuYyhzZWxmLndyYXAoaW5wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoczhpLmEsIHM4aS5iLCBzOGkuYywgczhpLmQsIHM4aS5lLCBzOGkuZiwgczhpLmcsIHM4aS5oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDkqMiwgOCozLCA3KjQsIDYqNSwgNSo2LCA0KjcsIDMqOCwgMio5KSkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9hc19wYXJhbShzZWxmKToKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfaW50CisKKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGEgPSBBKCkKKyAgICAgICAgYS5fYXNfcGFyYW1ldGVyXyA9IGEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgY19pbnQuZnJvbV9wYXJhbShhKQorCisKKyN+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2NsYXNzIEFzUGFyYW1XcmFwcGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmFtKToKKyAgICAgICAgc2VsZi5fYXNfcGFyYW1ldGVyXyA9IHBhcmFtCisKK2NsYXNzIEFzUGFyYW1XcmFwcGVyVGVzdENhc2UoQmFzaWNXcmFwVGVzdENhc2UpOgorICAgIHdyYXAgPSBBc1BhcmFtV3JhcHBlcgorCisjfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitjbGFzcyBBc1BhcmFtUHJvcGVydHlXcmFwcGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmFtKToKKyAgICAgICAgc2VsZi5fcGFyYW0gPSBwYXJhbQorCisgICAgZGVmIGdldFBhcmFtZXRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhcmFtCisgICAgX2FzX3BhcmFtZXRlcl8gPSBwcm9wZXJ0eShnZXRQYXJhbWV0ZXIpCisKK2NsYXNzIEFzUGFyYW1Qcm9wZXJ0eVdyYXBwZXJUZXN0Q2FzZShCYXNpY1dyYXBUZXN0Q2FzZSk6CisgICAgd3JhcCA9IEFzUGFyYW1Qcm9wZXJ0eVdyYXBwZXIKKworI35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9iaXRmaWVsZHMucHkgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfYml0ZmllbGRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiY2M2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfYml0ZmllbGRzLnB5CkBAIC0wLDAgKzEsMjY0IEBACitmcm9tIGN0eXBlcyBpbXBvcnQgKgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKKworaW1wb3J0IGN0eXBlcworaW1wb3J0IF9jdHlwZXNfdGVzdAorCitjbGFzcyBCSVRTKFN0cnVjdHVyZSk6CisgICAgX2ZpZWxkc18gPSBbKCJBIiwgY19pbnQsIDEpLAorICAgICAgICAgICAgICAgICgiQiIsIGNfaW50LCAyKSwKKyAgICAgICAgICAgICAgICAoIkMiLCBjX2ludCwgMyksCisgICAgICAgICAgICAgICAgKCJEIiwgY19pbnQsIDQpLAorICAgICAgICAgICAgICAgICgiRSIsIGNfaW50LCA1KSwKKyAgICAgICAgICAgICAgICAoIkYiLCBjX2ludCwgNiksCisgICAgICAgICAgICAgICAgKCJHIiwgY19pbnQsIDcpLAorICAgICAgICAgICAgICAgICgiSCIsIGNfaW50LCA4KSwKKyAgICAgICAgICAgICAgICAoIkkiLCBjX2ludCwgOSksCisKKyAgICAgICAgICAgICAgICAoIk0iLCBjX3Nob3J0LCAxKSwKKyAgICAgICAgICAgICAgICAoIk4iLCBjX3Nob3J0LCAyKSwKKyAgICAgICAgICAgICAgICAoIk8iLCBjX3Nob3J0LCAzKSwKKyAgICAgICAgICAgICAgICAoIlAiLCBjX3Nob3J0LCA0KSwKKyAgICAgICAgICAgICAgICAoIlEiLCBjX3Nob3J0LCA1KSwKKyAgICAgICAgICAgICAgICAoIlIiLCBjX3Nob3J0LCA2KSwKKyAgICAgICAgICAgICAgICAoIlMiLCBjX3Nob3J0LCA3KV0KKworZnVuYyA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKS51bnBhY2tfYml0ZmllbGRzCitmdW5jLmFyZ3R5cGVzID0gUE9JTlRFUihCSVRTKSwgY19jaGFyCisKKyMjZm9yIG4gaW4gIkFCQ0RFRkdISU1OT1BRUlMiOgorIyMgICAgcHJpbnQgbiwgaGV4KGdldGF0dHIoQklUUywgbikuc2l6ZSksIGdldGF0dHIoQklUUywgbikub2Zmc2V0CisKK2NsYXNzIENfVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiByYW5nZSg1MTIpOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gIkFCQ0RFRkdISSI6CisgICAgICAgICAgICAgICAgYiA9IEJJVFMoKQorICAgICAgICAgICAgICAgIHNldGF0dHIoYiwgbmFtZSwgaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChuYW1lLCBpLCBnZXRhdHRyKGIsIG5hbWUpKSwgKG5hbWUsIGksIGZ1bmMoYnlyZWYoYiksIG5hbWUpKSkKKworICAgIGRlZiB0ZXN0X3Nob3J0cyhzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMjU2KToKKyAgICAgICAgICAgIGZvciBuYW1lIGluICJNTk9QUVJTIjoKKyAgICAgICAgICAgICAgICBiID0gQklUUygpCisgICAgICAgICAgICAgICAgc2V0YXR0cihiLCBuYW1lLCBpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIGksIGdldGF0dHIoYiwgbmFtZSkpLCAobmFtZSwgaSwgZnVuYyhieXJlZihiKSwgbmFtZSkpKQorCitzaWduZWRfaW50X3R5cGVzID0gKGNfYnl0ZSwgY19zaG9ydCwgY19pbnQsIGNfbG9uZywgY19sb25nbG9uZykKK3Vuc2lnbmVkX2ludF90eXBlcyA9IChjX3VieXRlLCBjX3VzaG9ydCwgY191aW50LCBjX3Vsb25nLCBjX3Vsb25nbG9uZykKK2ludF90eXBlcyA9IHVuc2lnbmVkX2ludF90eXBlcyArIHNpZ25lZF9pbnRfdHlwZXMKKworY2xhc3MgQml0RmllbGRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2xvbmdsb25nKHNlbGYpOgorICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX2xvbmdsb25nLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfbG9uZ2xvbmcsIDYyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYyIsIGNfbG9uZ2xvbmcsIDEpXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19sb25nbG9uZykpCisgICAgICAgIHggPSBYKCkKKyAgICAgICAgeC5hLCB4LmIsIHguYyA9IC0xLCA3LCAtMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh4LmEsIHguYiwgeC5jKSwgKC0xLCA3LCAtMSkpCisKKyAgICBkZWYgdGVzdF91bG9uZ2xvbmcoc2VsZik6CisgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfdWxvbmdsb25nLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfdWxvbmdsb25nLCA2MiksCisgICAgICAgICAgICAgICAgICAgICAgICAoImMiLCBjX3Vsb25nbG9uZywgMSldCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2xvbmdsb25nKSkKKyAgICAgICAgeCA9IFgoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh4LmEsIHguYiwgeC5jKSwgKDAsIDAsIDApKQorICAgICAgICB4LmEsIHguYiwgeC5jID0gNywgNywgNworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh4LmEsIHguYiwgeC5jKSwgKDEsIDcsIDEpKQorCisgICAgZGVmIHRlc3Rfc2lnbmVkKHNlbGYpOgorICAgICAgICBmb3IgY190eXAgaW4gc2lnbmVkX2ludF90eXBlczoKKyAgICAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImR1bW15IiwgY190eXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiYSIsIGNfdHlwLCAzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX3R5cCwgMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgY190eXAsIDEpXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX3R5cCkqMikKKworICAgICAgICAgICAgeCA9IFgoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoY190eXAsIHguYSwgeC5iLCB4LmMpLCAoY190eXAsIDAsIDAsIDApKQorICAgICAgICAgICAgeC5hID0gLTEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNfdHlwLCB4LmEsIHguYiwgeC5jKSwgKGNfdHlwLCAtMSwgMCwgMCkpCisgICAgICAgICAgICB4LmEsIHguYiA9IDAsIC0xCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjX3R5cCwgeC5hLCB4LmIsIHguYyksIChjX3R5cCwgMCwgLTEsIDApKQorCisKKyAgICBkZWYgdGVzdF91bnNpZ25lZChzZWxmKToKKyAgICAgICAgZm9yIGNfdHlwIGluIHVuc2lnbmVkX2ludF90eXBlczoKKyAgICAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX3R5cCwgMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY190eXAsIDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiYyIsIGNfdHlwLCAxKV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY190eXApKQorCisgICAgICAgICAgICB4ID0gWCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjX3R5cCwgeC5hLCB4LmIsIHguYyksIChjX3R5cCwgMCwgMCwgMCkpCisgICAgICAgICAgICB4LmEgPSAtMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoY190eXAsIHguYSwgeC5iLCB4LmMpLCAoY190eXAsIDcsIDAsIDApKQorICAgICAgICAgICAgeC5hLCB4LmIgPSAwLCAtMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoY190eXAsIHguYSwgeC5iLCB4LmMpLCAoY190eXAsIDAsIDcsIDApKQorCisKKyAgICBkZWYgZmFpbF9maWVsZHMoc2VsZiwgKmZpZWxkcyk6CisgICAgICAgIHJldHVybiBzZWxmLmdldF9leGNlcHQodHlwZShTdHJ1Y3R1cmUpLCAiWCIsICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiX2ZpZWxkc18iOiBmaWVsZHN9KQorCisgICAgZGVmIHRlc3Rfbm9uaW50X3R5cGVzKHNlbGYpOgorICAgICAgICAjIGJpdCBmaWVsZHMgYXJlIG5vdCBhbGxvd2VkIG9uIG5vbi1pbnRlZ2VyIHR5cGVzLgorICAgICAgICByZXN1bHQgPSBzZWxmLmZhaWxfZmllbGRzKCgiYSIsIGNfY2hhcl9wLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIGNfY2hhcl9wJykpCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mYWlsX2ZpZWxkcygoImEiLCBjX3ZvaWRfcCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoVHlwZUVycm9yLCAnYml0IGZpZWxkcyBub3QgYWxsb3dlZCBmb3IgdHlwZSBjX3ZvaWRfcCcpKQorCisgICAgICAgIGlmIGNfaW50ICE9IGNfbG9uZzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZmFpbF9maWVsZHMoKCJhIiwgUE9JTlRFUihjX2ludCksIDEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIExQX2NfaW50JykpCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mYWlsX2ZpZWxkcygoImEiLCBjX2NoYXIsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKFR5cGVFcnJvciwgJ2JpdCBmaWVsZHMgbm90IGFsbG93ZWQgZm9yIHR5cGUgY19jaGFyJykpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY193Y2hhcgorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mYWlsX2ZpZWxkcygoImEiLCBjX3djaGFyLCAxKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoVHlwZUVycm9yLCAnYml0IGZpZWxkcyBub3QgYWxsb3dlZCBmb3IgdHlwZSBjX3djaGFyJykpCisKKyAgICAgICAgY2xhc3MgRHVtbXkoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gW10KKworICAgICAgICByZXN1bHQgPSBzZWxmLmZhaWxfZmllbGRzKCgiYSIsIER1bW15LCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIER1bW15JykpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfYml0ZmllbGRfc2l6ZShzZWxmKToKKyAgICAgICAgZm9yIGNfdHlwIGluIGludF90eXBlczoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZmFpbF9maWVsZHMoKCJhIiwgY190eXAsIC0xKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoVmFsdWVFcnJvciwgJ251bWJlciBvZiBiaXRzIGludmFsaWQgZm9yIGJpdCBmaWVsZCcpKQorCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZhaWxfZmllbGRzKCgiYSIsIGNfdHlwLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoVmFsdWVFcnJvciwgJ251bWJlciBvZiBiaXRzIGludmFsaWQgZm9yIGJpdCBmaWVsZCcpKQorCisgICAgICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CisgICAgICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY190eXAsIDEpXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX3R5cCkpCisKKyAgICAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX3R5cCwgc2l6ZW9mKGNfdHlwKSo4KV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY190eXApKQorCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZhaWxfZmllbGRzKCgiYSIsIGNfdHlwLCBzaXplb2YoY190eXApKjggKyAxKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoVmFsdWVFcnJvciwgJ251bWJlciBvZiBiaXRzIGludmFsaWQgZm9yIGJpdCBmaWVsZCcpKQorCisgICAgZGVmIHRlc3RfbXVsdGlfYml0ZmllbGRzX3NpemUoc2VsZik6CisgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfc2hvcnQsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19zaG9ydCwgMTQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgY19zaG9ydCwgMSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19zaG9ydCkpCisKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19zaG9ydCwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAoImExIiwgY19zaG9ydCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX3Nob3J0LCAxNCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImMiLCBjX3Nob3J0LCAxKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX3Nob3J0KSozKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYS5vZmZzZXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5hMS5vZmZzZXQsIHNpemVvZihjX3Nob3J0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLmIub2Zmc2V0LCBzaXplb2YoY19zaG9ydCkqMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLmMub2Zmc2V0LCBzaXplb2YoY19zaG9ydCkqMikKKworICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX3Nob3J0LCAzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfc2hvcnQsIDE0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYyIsIGNfc2hvcnQsIDE0KV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX3Nob3J0KSozKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYS5vZmZzZXQsIHNpemVvZihjX3Nob3J0KSowKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYi5vZmZzZXQsIHNpemVvZihjX3Nob3J0KSoxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYy5vZmZzZXQsIHNpemVvZihjX3Nob3J0KSoyKQorCisKKyAgICBkZWYgZ2V0X2V4Y2VwdChzZWxmLCBmdW5jLCAqYXJncywgKiprdyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3cpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGRldGFpbDoKKyAgICAgICAgICAgIHJldHVybiBkZXRhaWwuX19jbGFzc19fLCBzdHIoZGV0YWlsKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfMShzZWxmKToKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19ieXRlLCA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfaW50LCA0KV0KKyAgICAgICAgaWYgb3MubmFtZSBpbiAoIm50IiwgImNlIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfaW50KSoyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2ludCkpCisKKyAgICBkZWYgdGVzdF9taXhlZF8yKHNlbGYpOgorICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX2J5dGUsIDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19pbnQsIDMyKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2ludCkqMikKKworICAgIGRlZiB0ZXN0X21peGVkXzMoc2VsZik6CisgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfYnl0ZSwgNCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX3VieXRlLCA0KV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2J5dGUpKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfNChzZWxmKToKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19zaG9ydCwgNCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX3Nob3J0LCA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYyIsIGNfaW50LCAyNCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImQiLCBjX3Nob3J0LCA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiZSIsIGNfc2hvcnQsIDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJmIiwgY19pbnQsIDI0KV0KKyAgICAgICAgIyBNU1ZDIGRvZXMgTk9UIGNvbWJpbmUgY19zaG9ydCBhbmQgY19pbnQgaW50byBvbmUgZmllbGQsIEdDQworICAgICAgICAjIGRvZXMgKHVubGVzcyBHQ0MgaXMgcnVuIHdpdGggJy1tbXMtYml0ZmllbGRzJyB3aGljaAorICAgICAgICAjIHByb2R1Y2VzIGNvZGUgY29tcGF0aWJsZSB3aXRoIE1TVkMpLgorICAgICAgICBpZiBvcy5uYW1lIGluICgibnQiLCAiY2UiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19pbnQpICogNCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19pbnQpICogMikKKworICAgIGRlZiB0ZXN0X2Fub25fYml0ZmllbGRzKHNlbGYpOgorICAgICAgICAjIGFub255bW91cyBiaXQtZmllbGRzIGdhdmUgYSBzdHJhbmdlIGVycm9yIG1lc3NhZ2UKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19ieXRlLCA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfdWJ5dGUsIDQpXQorICAgICAgICBjbGFzcyBZKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfYW5vbnltb3VzXyA9IFsiXyJdCisgICAgICAgICAgICBfZmllbGRzXyA9IFsoIl8iLCBYKV0KKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoY3R5cGVzLCAiY191aW50MzIiKSwgImNfaW50MzIgaXMgcmVxdWlyZWQiKQorICAgIGRlZiB0ZXN0X3VpbnQzMihzZWxmKToKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY191aW50MzIsIDMyKV0KKyAgICAgICAgeCA9IFgoKQorICAgICAgICB4LmEgPSAxMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYSwgMTApCisgICAgICAgIHguYSA9IDB4RkRDQkE5ODcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsIDB4RkRDQkE5ODcpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGN0eXBlcywgImNfdWludDY0IiksICJjX2ludDY0IGlzIHJlcXVpcmVkIikKKyAgICBkZWYgdGVzdF91aW50NjQoc2VsZik6CisgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfdWludDY0LCA2NCldCisgICAgICAgIHggPSBYKCkKKyAgICAgICAgeC5hID0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsIDEwKQorICAgICAgICB4LmEgPSAweEZFRENCQTk4NzY1NDMyMTEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsIDB4RkVEQ0JBOTg3NjU0MzIxMSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9idWZmZXJzLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2J1ZmZlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI5NDVlZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9idWZmZXJzLnB5CkBAIC0wLDAgKzEsNzQgQEAKK2Zyb20gY3R5cGVzIGltcG9ydCAqCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgU3RyaW5nQnVmZmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYnVmZmVyKHNlbGYpOgorICAgICAgICBiID0gY3JlYXRlX3N0cmluZ19idWZmZXIoMzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGIpLCAzMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoYiksIDMyICogc2l6ZW9mKGNfY2hhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGJbMF0pIGlzIHN0cikKKworICAgICAgICBiID0gY3JlYXRlX3N0cmluZ19idWZmZXIoImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGIpLCA0KSAjIHRyYWlsaW5nIG51bCBjaGFyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfY2hhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGJbMF0pIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzBdLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgImFiY1wwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6XSwgImFiY1wwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6LTFdLCAiXDBjYmEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjoyXSwgImFjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6NV0sICJhIikKKworICAgIGRlZiB0ZXN0X2J1ZmZlcl9pbnRlcmZhY2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ5dGVhcnJheShjcmVhdGVfc3RyaW5nX2J1ZmZlcigwKSkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihieXRlYXJyYXkoY3JlYXRlX3N0cmluZ19idWZmZXIoMSkpKSwgMSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ19jb252ZXJzaW9uKHNlbGYpOgorICAgICAgICBiID0gY3JlYXRlX3N0cmluZ19idWZmZXIodSJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiKSwgNCkgIyB0cmFpbGluZyBudWwgY2hhcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihiKSwgNCAqIHNpemVvZihjX2NoYXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShiWzBdKSBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYlswXSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOl0sICJhYmNcMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6Ol0sICJhYmNcMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6Oi0xXSwgIlwwY2JhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6Ml0sICJhYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjVdLCAiYSIpCisKKyAgICB0cnk6CisgICAgICAgIGNfd2NoYXIKKyAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgZGVmIHRlc3RfdW5pY29kZV9idWZmZXIoc2VsZik6CisgICAgICAgICAgICBiID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKDMyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDMyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoYiksIDMyICogc2l6ZW9mKGNfd2NoYXIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoYlswXSkgaXMgdW5pY29kZSkKKworICAgICAgICAgICAgYiA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcih1ImFiYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiKSwgNCkgIyB0cmFpbGluZyBudWwgY2hhcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoYiksIDQgKiBzaXplb2YoY193Y2hhcikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShiWzBdKSBpcyB1bmljb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzBdLCB1ImEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzpdLCAiYWJjXDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6XSwgImFiY1wwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6Oi0xXSwgIlwwY2JhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjJdLCAiYWMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6NV0sICJhIikKKworICAgICAgICBkZWYgdGVzdF91bmljb2RlX2NvbnZlcnNpb24oc2VsZik6CisgICAgICAgICAgICBiID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfd2NoYXIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoYlswXSkgaXMgdW5pY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYlswXSwgdSJhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgImFiY1wwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6Ol0sICJhYmNcMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjotMV0sICJcMGNiYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjoyXSwgImFjIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjVdLCAiYSIpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXN3YXAucHkgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXN3YXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJkNzVjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9ieXRlc3dhcC5weQpAQCAtMCwwICsxLDI5NCBAQAoraW1wb3J0IHN5cywgdW5pdHRlc3QsIHN0cnVjdCwgbWF0aCwgY3R5cGVzCitmcm9tIGJpbmFzY2lpIGltcG9ydCBoZXhsaWZ5CisKK2Zyb20gY3R5cGVzIGltcG9ydCAqCisKK2RlZiBiaW4ocyk6CisgICAgcmV0dXJuIGhleGxpZnkobWVtb3J5dmlldyhzKSkudXBwZXIoKQorCisjIEVhY2ggKnNpbXBsZSogdHlwZSB0aGF0IHN1cHBvcnRzIGRpZmZlcmVudCBieXRlIG9yZGVycyBoYXMgYW4KKyMgX19jdHlwZV9iZV9fIGF0dHJpYnV0ZSB0aGF0IHNwZWNpZmllcyB0aGUgc2FtZSB0eXBlIGluIEJJRyBFTkRJQU4KKyMgYnl0ZSBvcmRlciwgYW5kIGEgX19jdHlwZV9sZV9fIGF0dHJpYnV0ZSB0aGF0IGlzIHRoZSBzYW1lIHR5cGUgaW4KKyMgTElUVExFIEVORElBTiBieXRlIG9yZGVyLgorIworIyBGb3IgU3RydWN0dXJlcyBhbmQgVW5pb25zLCB0aGVzZSB0eXBlcyBhcmUgY3JlYXRlZCBvbiBkZW1hbmQuCisKK2NsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBYX3Rlc3Qoc2VsZik6CisgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICBzeXMuYnl0ZW9yZGVyCisgICAgICAgIGZvciBpIGluIHJhbmdlKDMyKToKKyAgICAgICAgICAgIGJpdHMgPSBCSVRTKCkKKyAgICAgICAgICAgIHNldGF0dHIoYml0cywgImklcyIgJSBpLCAxKQorICAgICAgICAgICAgZHVtcChiaXRzKQorCisgICAgZGVmIHRlc3RfZW5kaWFuX3Nob3J0KHNlbGYpOgorICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfc2hvcnQuX19jdHlwZV9sZV9fIGlzIGNfc2hvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19zaG9ydC5fX2N0eXBlX2JlX18uX19jdHlwZV9sZV9fIGlzIGNfc2hvcnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19zaG9ydC5fX2N0eXBlX2JlX18gaXMgY19zaG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3Nob3J0Ll9fY3R5cGVfbGVfXy5fX2N0eXBlX2JlX18gaXMgY19zaG9ydCkKKyAgICAgICAgcyA9IGNfc2hvcnQuX19jdHlwZV9iZV9fKDB4MTIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIj5oIiwgMHgxMjM0KSksICIxMjM0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4ocyksICIxMjM0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlLCAweDEyMzQpCisKKyAgICAgICAgcyA9IGNfc2hvcnQuX19jdHlwZV9sZV9fKDB4MTIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIjxoIiwgMHgxMjM0KSksICIzNDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4ocyksICIzNDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlLCAweDEyMzQpCisKKyAgICAgICAgcyA9IGNfdXNob3J0Ll9fY3R5cGVfYmVfXygweDEyMzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+aCIsIDB4MTIzNCkpLCAiMTIzNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHMpLCAiMTIzNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgMHgxMjM0KQorCisgICAgICAgIHMgPSBjX3VzaG9ydC5fX2N0eXBlX2xlX18oMHgxMjM0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzdHJ1Y3QucGFjaygiPGgiLCAweDEyMzQpKSwgIjM0MTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzKSwgIjM0MTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudmFsdWUsIDB4MTIzNCkKKworICAgIGRlZiB0ZXN0X2VuZGlhbl9pbnQoc2VsZik6CisgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gImxpdHRsZSI6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19pbnQuX19jdHlwZV9sZV9fIGlzIGNfaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfaW50Ll9fY3R5cGVfYmVfXy5fX2N0eXBlX2xlX18gaXMgY19pbnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19pbnQuX19jdHlwZV9iZV9fIGlzIGNfaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfaW50Ll9fY3R5cGVfbGVfXy5fX2N0eXBlX2JlX18gaXMgY19pbnQpCisKKyAgICAgICAgcyA9IGNfaW50Ll9fY3R5cGVfYmVfXygweDEyMzQ1Njc4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzdHJ1Y3QucGFjaygiPmkiLCAweDEyMzQ1Njc4KSksICIxMjM0NTY3OCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHMpLCAiMTIzNDU2NzgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudmFsdWUsIDB4MTIzNDU2NzgpCisKKyAgICAgICAgcyA9IGNfaW50Ll9fY3R5cGVfbGVfXygweDEyMzQ1Njc4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzdHJ1Y3QucGFjaygiPGkiLCAweDEyMzQ1Njc4KSksICI3ODU2MzQxMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHMpLCAiNzg1NjM0MTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudmFsdWUsIDB4MTIzNDU2NzgpCisKKyAgICAgICAgcyA9IGNfdWludC5fX2N0eXBlX2JlX18oMHgxMjM0NTY3OCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIj5JIiwgMHgxMjM0NTY3OCkpLCAiMTIzNDU2NzgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzKSwgIjEyMzQ1Njc4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlLCAweDEyMzQ1Njc4KQorCisgICAgICAgIHMgPSBjX3VpbnQuX19jdHlwZV9sZV9fKDB4MTIzNDU2NzgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI8SSIsIDB4MTIzNDU2NzgpKSwgIjc4NTYzNDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4ocyksICI3ODU2MzQxMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgMHgxMjM0NTY3OCkKKworICAgIGRlZiB0ZXN0X2VuZGlhbl9sb25nbG9uZyhzZWxmKToKKyAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAibGl0dGxlIjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2xvbmdsb25nLl9fY3R5cGVfbGVfXyBpcyBjX2xvbmdsb25nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfbG9uZ2xvbmcuX19jdHlwZV9iZV9fLl9fY3R5cGVfbGVfXyBpcyBjX2xvbmdsb25nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfbG9uZ2xvbmcuX19jdHlwZV9iZV9fIGlzIGNfbG9uZ2xvbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19sb25nbG9uZy5fX2N0eXBlX2xlX18uX19jdHlwZV9iZV9fIGlzIGNfbG9uZ2xvbmcpCisKKyAgICAgICAgcyA9IGNfbG9uZ2xvbmcuX19jdHlwZV9iZV9fKDB4MTIzNDU2Nzg5MEFCQ0RFRikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIj5xIiwgMHgxMjM0NTY3ODkwQUJDREVGKSksICIxMjM0NTY3ODkwQUJDREVGIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4ocyksICIxMjM0NTY3ODkwQUJDREVGIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlLCAweDEyMzQ1Njc4OTBBQkNERUYpCisKKyAgICAgICAgcyA9IGNfbG9uZ2xvbmcuX19jdHlwZV9sZV9fKDB4MTIzNDU2Nzg5MEFCQ0RFRikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIjxxIiwgMHgxMjM0NTY3ODkwQUJDREVGKSksICJFRkNEQUI5MDc4NTYzNDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4ocyksICJFRkNEQUI5MDc4NTYzNDEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlLCAweDEyMzQ1Njc4OTBBQkNERUYpCisKKyAgICAgICAgcyA9IGNfdWxvbmdsb25nLl9fY3R5cGVfYmVfXygweDEyMzQ1Njc4OTBBQkNERUYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+USIsIDB4MTIzNDU2Nzg5MEFCQ0RFRikpLCAiMTIzNDU2Nzg5MEFCQ0RFRiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHMpLCAiMTIzNDU2Nzg5MEFCQ0RFRiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgMHgxMjM0NTY3ODkwQUJDREVGKQorCisgICAgICAgIHMgPSBjX3Vsb25nbG9uZy5fX2N0eXBlX2xlX18oMHgxMjM0NTY3ODkwQUJDREVGKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzdHJ1Y3QucGFjaygiPFEiLCAweDEyMzQ1Njc4OTBBQkNERUYpKSwgIkVGQ0RBQjkwNzg1NjM0MTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzKSwgIkVGQ0RBQjkwNzg1NjM0MTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudmFsdWUsIDB4MTIzNDU2Nzg5MEFCQ0RFRikKKworICAgIGRlZiB0ZXN0X2VuZGlhbl9mbG9hdChzZWxmKToKKyAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAibGl0dGxlIjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2Zsb2F0Ll9fY3R5cGVfbGVfXyBpcyBjX2Zsb2F0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfZmxvYXQuX19jdHlwZV9iZV9fLl9fY3R5cGVfbGVfXyBpcyBjX2Zsb2F0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfZmxvYXQuX19jdHlwZV9iZV9fIGlzIGNfZmxvYXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19mbG9hdC5fX2N0eXBlX2xlX18uX19jdHlwZV9iZV9fIGlzIGNfZmxvYXQpCisgICAgICAgIHMgPSBjX2Zsb2F0KG1hdGgucGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCJmIiwgbWF0aC5waSkpLCBiaW4ocykpCisgICAgICAgICMgSG0sIHdoYXQncyB0aGUgcHJlY2lzaW9uIG9mIGEgZmxvYXQgY29tcGFyZWQgdG8gYSBkb3VibGU/CisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocy52YWx1ZSwgbWF0aC5waSwgNikKKyAgICAgICAgcyA9IGNfZmxvYXQuX19jdHlwZV9sZV9fKG1hdGgucGkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocy52YWx1ZSwgbWF0aC5waSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIjxmIiwgbWF0aC5waSkpLCBiaW4ocykpCisgICAgICAgIHMgPSBjX2Zsb2F0Ll9fY3R5cGVfYmVfXyhtYXRoLnBpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHMudmFsdWUsIG1hdGgucGksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI+ZiIsIG1hdGgucGkpKSwgYmluKHMpKQorCisgICAgZGVmIHRlc3RfZW5kaWFuX2RvdWJsZShzZWxmKToKKyAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAibGl0dGxlIjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2RvdWJsZS5fX2N0eXBlX2xlX18gaXMgY19kb3VibGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19kb3VibGUuX19jdHlwZV9iZV9fLl9fY3R5cGVfbGVfXyBpcyBjX2RvdWJsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2RvdWJsZS5fX2N0eXBlX2JlX18gaXMgY19kb3VibGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY19kb3VibGUuX19jdHlwZV9sZV9fLl9fY3R5cGVfYmVfXyBpcyBjX2RvdWJsZSkKKyAgICAgICAgcyA9IGNfZG91YmxlKG1hdGgucGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgbWF0aC5waSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soImQiLCBtYXRoLnBpKSksIGJpbihzKSkKKyAgICAgICAgcyA9IGNfZG91YmxlLl9fY3R5cGVfbGVfXyhtYXRoLnBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudmFsdWUsIG1hdGgucGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKHN0cnVjdC5wYWNrKCI8ZCIsIG1hdGgucGkpKSwgYmluKHMpKQorICAgICAgICBzID0gY19kb3VibGUuX19jdHlwZV9iZV9fKG1hdGgucGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy52YWx1ZSwgbWF0aC5waSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oc3RydWN0LnBhY2soIj5kIiwgbWF0aC5waSkpLCBiaW4ocykpCisKKyAgICBkZWYgdGVzdF9lbmRpYW5fb3RoZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2J5dGUuX19jdHlwZV9sZV9fIGlzIGNfYnl0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfYnl0ZS5fX2N0eXBlX2JlX18gaXMgY19ieXRlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3VieXRlLl9fY3R5cGVfbGVfXyBpcyBjX3VieXRlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY191Ynl0ZS5fX2N0eXBlX2JlX18gaXMgY191Ynl0ZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoY19jaGFyLl9fY3R5cGVfbGVfXyBpcyBjX2NoYXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2NoYXIuX19jdHlwZV9iZV9fIGlzIGNfY2hhcikKKworICAgIGRlZiB0ZXN0X3N0cnVjdF9maWVsZHNfMShzZWxmKToKKyAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAibGl0dGxlIjoKKyAgICAgICAgICAgIGJhc2UgPSBCaWdFbmRpYW5TdHJ1Y3R1cmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJhc2UgPSBMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUKKworICAgICAgICBjbGFzcyBUKGJhc2UpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX3VieXRlKSwKKyAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19ieXRlKSwKKyAgICAgICAgICAgICAgICAgICAgKCJjIiwgY19zaG9ydCksCisgICAgICAgICAgICAgICAgICAgICgiZCIsIGNfdXNob3J0KSwKKyAgICAgICAgICAgICAgICAgICAgKCJlIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAoImYiLCBjX3VpbnQpLAorICAgICAgICAgICAgICAgICAgICAoImciLCBjX2xvbmcpLAorICAgICAgICAgICAgICAgICAgICAoImgiLCBjX3Vsb25nKSwKKyAgICAgICAgICAgICAgICAgICAgKCJpIiwgY19sb25nbG9uZyksCisgICAgICAgICAgICAgICAgICAgICgiayIsIGNfdWxvbmdsb25nKSwKKyAgICAgICAgICAgICAgICAgICAgKCJsIiwgY19mbG9hdCksCisgICAgICAgICAgICAgICAgICAgICgibSIsIGNfZG91YmxlKSwKKyAgICAgICAgICAgICAgICAgICAgKCJuIiwgY19jaGFyKSwKKworICAgICAgICAgICAgICAgICAgICAoImIxIiwgY19ieXRlLCAzKSwKKyAgICAgICAgICAgICAgICAgICAgKCJiMiIsIGNfYnl0ZSwgMyksCisgICAgICAgICAgICAgICAgICAgICgiYjMiLCBjX2J5dGUsIDIpLAorICAgICAgICAgICAgICAgICAgICAoImEiLCBjX2ludCAqIDMgKiAzICogMyldCisgICAgICAgIFQuX2ZpZWxkc18gPSBfZmllbGRzXworCisgICAgICAgICMgdGhlc2UgZmllbGRzIGRvIG5vdCBzdXBwb3J0IGRpZmZlcmVudCBieXRlIG9yZGVyOgorICAgICAgICBmb3IgdHlwIGluIGNfd2NoYXIsIGNfdm9pZF9wLCBQT0lOVEVSKGNfaW50KToKKyAgICAgICAgICAgIF9maWVsZHNfLmFwcGVuZCgoIngiLCB0eXApKQorICAgICAgICAgICAgY2xhc3MgVChiYXNlKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIFQsICJfZmllbGRzXyIsIFsoIngiLCB0eXApXSkKKworICAgIGRlZiB0ZXN0X3N0cnVjdF9zdHJ1Y3Qoc2VsZik6CisgICAgICAgICMgbmVzdGVkIHN0cnVjdHVyZXMgd2l0aCBkaWZmZXJlbnQgYnl0ZW9yZGVycworCisgICAgICAgICMgY3JlYXRlIG5lc3RlZCBzdHJ1Y3R1cmVzIHdpdGggZ2l2ZW4gYnl0ZW9yZGVycyBhbmQgc2V0IG1lbW9yeSB0byBkYXRhCisKKyAgICAgICAgZm9yIG5lc3RlZCwgZGF0YSBpbiAoCisgICAgICAgICAgICAoQmlnRW5kaWFuU3RydWN0dXJlLCBiJ1wwXDBcMFwxXDBcMFwwXDInKSwKKyAgICAgICAgICAgIChMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUsIGInXDFcMFwwXDBcMlwwXDBcMCcpLAorICAgICAgICApOgorICAgICAgICAgICAgZm9yIHBhcmVudCBpbiAoCisgICAgICAgICAgICAgICAgQmlnRW5kaWFuU3RydWN0dXJlLAorICAgICAgICAgICAgICAgIExpdHRsZUVuZGlhblN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUsCisgICAgICAgICAgICApOgorICAgICAgICAgICAgICAgIGNsYXNzIE5lc3RlZFN0cnVjdHVyZShuZXN0ZWQpOgorICAgICAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBjX3VpbnQzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgieSIsIGNfdWludDMyKV0KKworICAgICAgICAgICAgICAgIGNsYXNzIFRlc3RTdHJ1Y3R1cmUocGFyZW50KToKKyAgICAgICAgICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJwb2ludCIsIE5lc3RlZFN0cnVjdHVyZSldCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkYXRhKSwgc2l6ZW9mKFRlc3RTdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgIHB0ciA9IFBPSU5URVIoVGVzdFN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICBzID0gY2FzdChkYXRhLCBwdHIpWzBdCisgICAgICAgICAgICAgICAgZGVsIGN0eXBlcy5fcG9pbnRlcl90eXBlX2NhY2hlW1Rlc3RTdHJ1Y3R1cmVdCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnBvaW50LngsIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnBvaW50LnksIDIpCisKKyAgICBkZWYgdGVzdF9zdHJ1Y3RfZmllbGRzXzIoc2VsZik6CisgICAgICAgICMgc3RhbmRhcmQgcGFja2luZyBpbiBzdHJ1Y3QgdXNlcyBubyBhbGlnbm1lbnQuCisgICAgICAgICMgU28sIHdlIGhhdmUgdG8gYWxpZ24gdXNpbmcgcGFkIGJ5dGVzLgorICAgICAgICAjCisgICAgICAgICMgVW5hbGlnbmVkIGFjY2Vzc2VzIHdpbGwgY3Jhc2ggUHl0aG9uIChvbiB0aG9zZSBwbGF0Zm9ybXMgdGhhdAorICAgICAgICAjIGRvbid0IGFsbG93IGl0LCBsaWtlIHNwYXJjIHNvbGFyaXMpLgorICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgorICAgICAgICAgICAgYmFzZSA9IEJpZ0VuZGlhblN0cnVjdHVyZQorICAgICAgICAgICAgZm10ID0gIj5ieGhpZCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJhc2UgPSBMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUKKyAgICAgICAgICAgIGZtdCA9ICI8YnhoaWQiCisKKyAgICAgICAgY2xhc3MgUyhiYXNlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYiIsIGNfYnl0ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAoImgiLCBjX3Nob3J0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiaSIsIGNfaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiZCIsIGNfZG91YmxlKV0KKworICAgICAgICBzMSA9IFMoMHgxMiwgMHgxMjM0LCAweDEyMzQ1Njc4LCAzLjE0KQorICAgICAgICBzMiA9IHN0cnVjdC5wYWNrKGZtdCwgMHgxMiwgMHgxMjM0LCAweDEyMzQ1Njc4LCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbihzMSksIGJpbihzMikpCisKKyAgICBkZWYgdGVzdF91bmFsaWduZWRfbm9ubmF0aXZlX3N0cnVjdF9maWVsZHMoc2VsZik6CisgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gImxpdHRsZSI6CisgICAgICAgICAgICBiYXNlID0gQmlnRW5kaWFuU3RydWN0dXJlCisgICAgICAgICAgICBmbXQgPSAiPmIgaCB4aSB4ZCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJhc2UgPSBMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUKKyAgICAgICAgICAgIGZtdCA9ICI8YiBoIHhpIHhkIgorCisgICAgICAgIGNsYXNzIFMoYmFzZSk6CisgICAgICAgICAgICBfcGFja18gPSAxCisgICAgICAgICAgICBfZmllbGRzXyA9IFsoImIiLCBjX2J5dGUpLAorCisgICAgICAgICAgICAgICAgICAgICAgICAoImgiLCBjX3Nob3J0KSwKKworICAgICAgICAgICAgICAgICAgICAgICAgKCJfMSIsIGNfYnl0ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAoImkiLCBjX2ludCksCisKKyAgICAgICAgICAgICAgICAgICAgICAgICgiXzIiLCBjX2J5dGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJkIiwgY19kb3VibGUpXQorCisgICAgICAgIHMxID0gUygpCisgICAgICAgIHMxLmIgPSAweDEyCisgICAgICAgIHMxLmggPSAweDEyMzQKKyAgICAgICAgczEuaSA9IDB4MTIzNDU2NzgKKyAgICAgICAgczEuZCA9IDMuMTQKKyAgICAgICAgczIgPSBzdHJ1Y3QucGFjayhmbXQsIDB4MTIsIDB4MTIzNCwgMHgxMjM0NTY3OCwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oczEpLCBiaW4oczIpKQorCisgICAgZGVmIHRlc3RfdW5hbGlnbmVkX25hdGl2ZV9zdHJ1Y3RfZmllbGRzKHNlbGYpOgorICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgorICAgICAgICAgICAgZm10ID0gIjxiIGggeGkgeGQiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYXNlID0gTGl0dGxlRW5kaWFuU3RydWN0dXJlCisgICAgICAgICAgICBmbXQgPSAiPmIgaCB4aSB4ZCIKKworICAgICAgICBjbGFzcyBTKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfcGFja18gPSAxCisgICAgICAgICAgICBfZmllbGRzXyA9IFsoImIiLCBjX2J5dGUpLAorCisgICAgICAgICAgICAgICAgICAgICAgICAoImgiLCBjX3Nob3J0KSwKKworICAgICAgICAgICAgICAgICAgICAgICAgKCJfMSIsIGNfYnl0ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAoImkiLCBjX2ludCksCisKKyAgICAgICAgICAgICAgICAgICAgICAgICgiXzIiLCBjX2J5dGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJkIiwgY19kb3VibGUpXQorCisgICAgICAgIHMxID0gUygpCisgICAgICAgIHMxLmIgPSAweDEyCisgICAgICAgIHMxLmggPSAweDEyMzQKKyAgICAgICAgczEuaSA9IDB4MTIzNDU2NzgKKyAgICAgICAgczEuZCA9IDMuMTQKKyAgICAgICAgczIgPSBzdHJ1Y3QucGFjayhmbXQsIDB4MTIsIDB4MTIzNCwgMHgxMjM0NTY3OCwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oczEpLCBiaW4oczIpKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2NhbGxiYWNrcy5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9jYWxsYmFja3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwYzE3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9jYWxsYmFja3MucHkKQEAgLTAsMCArMSwyNTYgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2ltcG9ydCBfY3R5cGVzX3Rlc3QKKworY2xhc3MgQ2FsbGJhY2tzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBmdW5jdHlwZSA9IENGVU5DVFlQRQorCisjIyAgICBkZWYgdGVhckRvd24oc2VsZik6CisjIyAgICAgICAgaW1wb3J0IGdjCisjIyAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICBkZWYgY2FsbGJhY2soc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmdvdF9hcmdzID0gYXJncworICAgICAgICByZXR1cm4gYXJnc1stMV0KKworICAgIGRlZiBjaGVja190eXBlKHNlbGYsIHR5cCwgYXJnKToKKyAgICAgICAgUFJPVE8gPSBzZWxmLmZ1bmN0eXBlLmltX2Z1bmModHlwLCB0eXApCisgICAgICAgIHJlc3VsdCA9IFBST1RPKHNlbGYuY2FsbGJhY2spKGFyZykKKyAgICAgICAgaWYgdHlwID09IGNfZmxvYXQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJlc3VsdCwgYXJnLCBwbGFjZXM9NSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nb3RfYXJncywgKGFyZywpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGFyZykKKworICAgICAgICBQUk9UTyA9IHNlbGYuZnVuY3R5cGUuaW1fZnVuYyh0eXAsIGNfYnl0ZSwgdHlwKQorICAgICAgICByZXN1bHQgPSBQUk9UTyhzZWxmLmNhbGxiYWNrKSgtMywgYXJnKQorICAgICAgICBpZiB0eXAgPT0gY19mbG9hdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmVzdWx0LCBhcmcsIHBsYWNlcz01KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdvdF9hcmdzLCAoLTMsIGFyZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgYXJnKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIworCisgICAgZGVmIHRlc3RfYnl0ZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja190eXBlKGNfYnl0ZSwgNDIpCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX2J5dGUsIC00MikKKworICAgIGRlZiB0ZXN0X3VieXRlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY191Ynl0ZSwgNDIpCisKKyAgICBkZWYgdGVzdF9zaG9ydChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja190eXBlKGNfc2hvcnQsIDQyKQorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY19zaG9ydCwgLTQyKQorCisgICAgZGVmIHRlc3RfdXNob3J0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY191c2hvcnQsIDQyKQorCisgICAgZGVmIHRlc3RfaW50KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY19pbnQsIDQyKQorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY19pbnQsIC00MikKKworICAgIGRlZiB0ZXN0X3VpbnQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX3VpbnQsIDQyKQorCisgICAgZGVmIHRlc3RfbG9uZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja190eXBlKGNfbG9uZywgNDIpCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX2xvbmcsIC00MikKKworICAgIGRlZiB0ZXN0X3Vsb25nKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY191bG9uZywgNDIpCisKKyAgICBkZWYgdGVzdF9sb25nbG9uZyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHNvbWUgNjQtYml0IHZhbHVlcywgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX2xvbmdsb25nLCA1OTQ4MjkxNzU3MjQ1Mjc3NDY3KQorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY19sb25nbG9uZywgLTUyMjkzODg5MDk3ODQxOTA1ODApCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX2xvbmdsb25nLCA0MikKKyAgICAgICAgc2VsZi5jaGVja190eXBlKGNfbG9uZ2xvbmcsIC00MikKKworICAgIGRlZiB0ZXN0X3Vsb25nbG9uZyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHNvbWUgNjQtYml0IHZhbHVlcywgd2l0aCBhbmQgd2l0aG91dCBtc2Igc2V0LgorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY191bG9uZ2xvbmcsIDEwOTU1NDEyMjQyMTcwMzM5NzgyKQorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY191bG9uZ2xvbmcsIDM2NjU4ODU0OTk4NDExNjc0NTgpCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX3Vsb25nbG9uZywgNDIpCisKKyAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKKyAgICAgICAgIyBvbmx5IGFsbW9zdCBlcXVhbDogZG91YmxlIC0+IGZsb2F0IC0+IGRvdWJsZQorICAgICAgICBpbXBvcnQgbWF0aAorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY19mbG9hdCwgbWF0aC5lKQorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY19mbG9hdCwgLW1hdGguZSkKKworICAgIGRlZiB0ZXN0X2RvdWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja190eXBlKGNfZG91YmxlLCAzLjE0KQorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY19kb3VibGUsIC0zLjE0KQorCisgICAgZGVmIHRlc3RfbG9uZ2RvdWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja190eXBlKGNfbG9uZ2RvdWJsZSwgMy4xNCkKKyAgICAgICAgc2VsZi5jaGVja190eXBlKGNfbG9uZ2RvdWJsZSwgLTMuMTQpCisKKyAgICBkZWYgdGVzdF9jaGFyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY19jaGFyLCAieCIpCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX2NoYXIsICJhIikKKworICAgICMgZGlzYWJsZWQ6IHdvdWxkIG5vdyAoY29ycmVjdGx5KSByYWlzZSBhIFJ1bnRpbWVXYXJuaW5nIGFib3V0CisgICAgIyBhIG1lbW9yeSBsZWFrLiAgQSBjYWxsYmFjayBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgbm9uLWludGVncmFsCisgICAgIyBDIHR5cGUgd2l0aG91dCBjYXVzaW5nIGEgbWVtb3J5IGxlYWsuCisjIyAgICBkZWYgdGVzdF9jaGFyX3Aoc2VsZik6CisjIyAgICAgICAgc2VsZi5jaGVja190eXBlKGNfY2hhcl9wLCAiYWJjIikKKyMjICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY19jaGFyX3AsICJkZWYiKQorCisgICAgZGVmIHRlc3RfcHlvYmplY3Qoc2VsZik6CisgICAgICAgIG8gPSAoKQorICAgICAgICBmcm9tIHN5cyBpbXBvcnQgZ2V0cmVmY291bnQgYXMgZ3JjCisgICAgICAgIGZvciBvIGluICgpLCBbXSwgb2JqZWN0KCk6CisgICAgICAgICAgICBpbml0aWFsID0gZ3JjKG8pCisgICAgICAgICAgICAjIFRoaXMgY2FsbCBsZWFrcyBhIHJlZmVyZW5jZSB0byAnbycuLi4KKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHlwZShweV9vYmplY3QsIG8pCisgICAgICAgICAgICBiZWZvcmUgPSBncmMobykKKyAgICAgICAgICAgICMgLi4uYnV0IHRoaXMgY2FsbCBkb2Vzbid0IGxlYWsgYW55IG1vcmUuICBXaGVyZSBpcyB0aGUgcmVmY291bnQ/CisgICAgICAgICAgICBzZWxmLmNoZWNrX3R5cGUocHlfb2JqZWN0LCBvKQorICAgICAgICAgICAgYWZ0ZXIgPSBncmMobykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGFmdGVyLCBvKSwgKGJlZm9yZSwgbykpCisKKyAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF9yZXN0eXBlXzEoc2VsZik6CisgICAgICAgICMgT25seSAiZnVuZGFtZW50YWwiIHJlc3VsdCB0eXBlcyBhcmUgc3VwcG9ydGVkIGZvciBjYWxsYmFjaworICAgICAgICAjIGZ1bmN0aW9ucywgdGhlIHR5cGUgbXVzdCBoYXZlIGEgbm9uLU5VTEwgc3RnZGljdC0+c2V0ZnVuYy4KKyAgICAgICAgIyBQT0lOVEVSKGNfZG91YmxlKSwgZm9yIGV4YW1wbGUsIGlzIG5vdCBzdXBwb3J0ZWQuCisKKyAgICAgICAgcHJvdG90eXBlID0gc2VsZi5mdW5jdHlwZS5pbV9mdW5jKFBPSU5URVIoY19kb3VibGUpKQorICAgICAgICAjIFRoZSB0eXBlIGlzIGNoZWNrZWQgd2hlbiB0aGUgcHJvdG90eXBlIGlzIGNhbGxlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHByb3RvdHlwZSwgbGFtYmRhOiBOb25lKQorCisgICAgZGVmIHRlc3RfdW5zdXBwb3J0ZWRfcmVzdHlwZV8yKHNlbGYpOgorICAgICAgICBwcm90b3R5cGUgPSBzZWxmLmZ1bmN0eXBlLmltX2Z1bmMob2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHByb3RvdHlwZSwgbGFtYmRhOiBOb25lKQorCisgICAgZGVmIHRlc3RfaXNzdWVfNzk1OShzZWxmKToKKyAgICAgICAgcHJvdG8gPSBzZWxmLmZ1bmN0eXBlLmltX2Z1bmMoTm9uZSkKKworICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZnVuYyhzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYudiA9IHByb3RvKHNlbGYuZnVuYykKKworICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMzIpOgorICAgICAgICAgICAgWCgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBsaXZlID0gW3ggZm9yIHggaW4gZ2MuZ2V0X29iamVjdHMoKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoeCwgWCldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpdmUpLCAwKQorCisgICAgZGVmIHRlc3RfaXNzdWUxMjQ4MyhzZWxmKToKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGNsYXNzIE5hc3R5OgorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIENGVU5DVFlQRShOb25lKShsYW1iZGEgeD1OYXN0eSgpOiBOb25lKQorCisKK3RyeToKKyAgICBXSU5GVU5DVFlQRQorZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBwYXNzCitlbHNlOgorICAgIGNsYXNzIFN0ZGNhbGxDYWxsYmFja3MoQ2FsbGJhY2tzKToKKyAgICAgICAgZnVuY3R5cGUgPSBXSU5GVU5DVFlQRQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIFNhbXBsZUNhbGxiYWNrc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2ludGVncmF0ZShzZWxmKToKKyAgICAgICAgIyBEZXJpdmVkIGZyb20gc29tZSB0aGVuIG5vbi13b3JraW5nIGNvZGUsIHBvc3RlZCBieSBEYXZpZCBGb3N0ZXIKKyAgICAgICAgZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisKKyAgICAgICAgIyBUaGUgZnVuY3Rpb24gcHJvdG90eXBlIGNhbGxlZCBieSAnaW50ZWdyYXRlJzogZG91YmxlIGZ1bmMoZG91YmxlKTsKKyAgICAgICAgQ0FMTEJBQ0sgPSBDRlVOQ1RZUEUoY19kb3VibGUsIGNfZG91YmxlKQorCisgICAgICAgICMgVGhlIGludGVncmF0ZSBmdW5jdGlvbiBpdHNlbGYsIGV4cG9zZWQgZnJvbSB0aGUgX2N0eXBlc190ZXN0IGRsbAorICAgICAgICBpbnRlZ3JhdGUgPSBkbGwuaW50ZWdyYXRlCisgICAgICAgIGludGVncmF0ZS5hcmd0eXBlcyA9IChjX2RvdWJsZSwgY19kb3VibGUsIENBTExCQUNLLCBjX2xvbmcpCisgICAgICAgIGludGVncmF0ZS5yZXN0eXBlID0gY19kb3VibGUKKworICAgICAgICBkZWYgZnVuYyh4KToKKyAgICAgICAgICAgIHJldHVybiB4KioyCisKKyAgICAgICAgcmVzdWx0ID0gaW50ZWdyYXRlKDAuMCwgMS4wLCBDQUxMQkFDSyhmdW5jKSwgMTApCisgICAgICAgIGRpZmYgPSBhYnMocmVzdWx0IC0gMS4vMy4pCisKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGRpZmYsIDAuMDEsICIlcyBub3QgbGVzcyB0aGFuIDAuMDEiICUgZGlmZikKKworICAgIGRlZiB0ZXN0X2lzc3VlXzg5NTlfYShzZWxmKToKKyAgICAgICAgZnJvbSBjdHlwZXMudXRpbCBpbXBvcnQgZmluZF9saWJyYXJ5CisgICAgICAgIGxpYmNfcGF0aCA9IGZpbmRfbGlicmFyeSgiYyIpCisgICAgICAgIGlmIG5vdCBsaWJjX3BhdGg6CisgICAgICAgICAgICByZXR1cm4gIyBjYW5ub3QgdGVzdAorICAgICAgICBsaWJjID0gQ0RMTChsaWJjX3BhdGgpCisKKyAgICAgICAgQENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihjX2ludCksIFBPSU5URVIoY19pbnQpKQorICAgICAgICBkZWYgY21wX2Z1bmMoYSwgYik6CisgICAgICAgICAgICByZXR1cm4gYVswXSAtIGJbMF0KKworICAgICAgICBhcnJheSA9IChjX2ludCAqIDUpKDUsIDEsIDk5LCA3LCAzMykKKworICAgICAgICBsaWJjLnFzb3J0KGFycmF5LCBsZW4oYXJyYXkpLCBzaXplb2YoY19pbnQpLCBjbXBfZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcnJheVs6XSwgWzEsIDUsIDcsIDMzLCA5OV0pCisKKyAgICB0cnk6CisgICAgICAgIFdJTkZVTkNUWVBFCisgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGRlZiB0ZXN0X2lzc3VlXzg5NTlfYihzZWxmKToKKyAgICAgICAgICAgIGZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBCT09MLCBIV05ELCBMUEFSQU0KKyAgICAgICAgICAgIGdsb2JhbCB3aW5kb3dDb3VudAorICAgICAgICAgICAgd2luZG93Q291bnQgPSAwCisKKyAgICAgICAgICAgIEBXSU5GVU5DVFlQRShCT09MLCBIV05ELCBMUEFSQU0pCisgICAgICAgICAgICBkZWYgRW51bVdpbmRvd3NDYWxsYmFja0Z1bmMoaHduZCwgbFBhcmFtKToKKyAgICAgICAgICAgICAgICBnbG9iYWwgd2luZG93Q291bnQKKyAgICAgICAgICAgICAgICB3aW5kb3dDb3VudCArPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUgI0FsbG93IHdpbmRvd3MgdG8ga2VlcCBlbnVtZXJhdGluZworCisgICAgICAgICAgICB3aW5kbGwudXNlcjMyLkVudW1XaW5kb3dzKEVudW1XaW5kb3dzQ2FsbGJhY2tGdW5jLCAwKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfcmVnaXN0ZXJfaW50KHNlbGYpOgorICAgICAgICAjIElzc3VlICM4Mjc1OiBidWdneSBoYW5kbGluZyBvZiBjYWxsYmFjayBhcmdzIHVuZGVyIFdpbjY0CisgICAgICAgICMgTk9URTogc2hvdWxkIGJlIHJ1biBvbiByZWxlYXNlIGJ1aWxkcyBhcyB3ZWxsCisgICAgICAgIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQorICAgICAgICBDQUxMQkFDSyA9IENGVU5DVFlQRShjX2ludCwgY19pbnQsIGNfaW50LCBjX2ludCwgY19pbnQsIGNfaW50KQorICAgICAgICAjIEFsbCB0aGlzIGZ1bmN0aW9uIGRvZXMgaXMgY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCBpdHMgYXJncyBzcXVhcmVkCisgICAgICAgIGZ1bmMgPSBkbGwuX3Rlc3RmdW5jX2Nia19yZWdfaW50CisgICAgICAgIGZ1bmMuYXJndHlwZXMgPSAoY19pbnQsIGNfaW50LCBjX2ludCwgY19pbnQsIGNfaW50LCBDQUxMQkFDSykKKyAgICAgICAgZnVuYy5yZXN0eXBlID0gY19pbnQKKworICAgICAgICBkZWYgY2FsbGJhY2soYSwgYiwgYywgZCwgZSk6CisgICAgICAgICAgICByZXR1cm4gYSArIGIgKyBjICsgZCArIGUKKworICAgICAgICByZXN1bHQgPSBmdW5jKDIsIDMsIDQsIDUsIDYsIENBTExCQUNLKGNhbGxiYWNrKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGNhbGxiYWNrKDIqMiwgMyozLCA0KjQsIDUqNSwgNio2KSkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX3JlZ2lzdGVyX2RvdWJsZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjODI3NTogYnVnZ3kgaGFuZGxpbmcgb2YgY2FsbGJhY2sgYXJncyB1bmRlciBXaW42NAorICAgICAgICAjIE5PVEU6IHNob3VsZCBiZSBydW4gb24gcmVsZWFzZSBidWlsZHMgYXMgd2VsbAorICAgICAgICBkbGwgPSBDRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKyAgICAgICAgQ0FMTEJBQ0sgPSBDRlVOQ1RZUEUoY19kb3VibGUsIGNfZG91YmxlLCBjX2RvdWJsZSwgY19kb3VibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfZG91YmxlLCBjX2RvdWJsZSkKKyAgICAgICAgIyBBbGwgdGhpcyBmdW5jdGlvbiBkb2VzIGlzIGNhbGwgdGhlIGNhbGxiYWNrIHdpdGggaXRzIGFyZ3Mgc3F1YXJlZAorICAgICAgICBmdW5jID0gZGxsLl90ZXN0ZnVuY19jYmtfcmVnX2RvdWJsZQorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gKGNfZG91YmxlLCBjX2RvdWJsZSwgY19kb3VibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY19kb3VibGUsIGNfZG91YmxlLCBDQUxMQkFDSykKKyAgICAgICAgZnVuYy5yZXN0eXBlID0gY19kb3VibGUKKworICAgICAgICBkZWYgY2FsbGJhY2soYSwgYiwgYywgZCwgZSk6CisgICAgICAgICAgICByZXR1cm4gYSArIGIgKyBjICsgZCArIGUKKworICAgICAgICByZXN1bHQgPSBmdW5jKDEuMSwgMi4yLCAzLjMsIDQuNCwgNS41LCBDQUxMQkFDSyhjYWxsYmFjaykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKDEuMSoxLjEsIDIuMioyLjIsIDMuMyozLjMsIDQuNCo0LjQsIDUuNSo1LjUpKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9jYXN0LnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2Nhc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2ZmZmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9jYXN0LnB5CkBAIC0wLDAgKzEsODkgQEAKK2Zyb20gY3R5cGVzIGltcG9ydCAqCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKKworY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hcnJheTJwb2ludGVyKHNlbGYpOgorICAgICAgICBhcnJheSA9IChjX2ludCAqIDMpKDQyLCAxNywgMikKKworICAgICAgICAjIGNhc3RpbmcgYW4gYXJyYXkgdG8gYSBwb2ludGVyIHdvcmtzLgorICAgICAgICBwdHIgPSBjYXN0KGFycmF5LCBQT0lOVEVSKGNfaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbcHRyW2ldIGZvciBpIGluIHJhbmdlKDMpXSwgWzQyLCAxNywgMl0pCisKKyAgICAgICAgaWYgMipzaXplb2YoY19zaG9ydCkgPT0gc2l6ZW9mKGNfaW50KToKKyAgICAgICAgICAgIHB0ciA9IGNhc3QoYXJyYXksIFBPSU5URVIoY19zaG9ydCkpCisgICAgICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3B0cltpXSBmb3IgaSBpbiByYW5nZSg2KV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzQyLCAwLCAxNywgMCwgMiwgMF0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3B0cltpXSBmb3IgaSBpbiByYW5nZSg2KV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAsIDQyLCAwLCAxNywgMCwgMl0pCisKKyAgICBkZWYgdGVzdF9hZGRyZXNzMnBvaW50ZXIoc2VsZik6CisgICAgICAgIGFycmF5ID0gKGNfaW50ICogMykoNDIsIDE3LCAyKQorCisgICAgICAgIGFkZHJlc3MgPSBhZGRyZXNzb2YoYXJyYXkpCisgICAgICAgIHB0ciA9IGNhc3QoY192b2lkX3AoYWRkcmVzcyksIFBPSU5URVIoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtwdHJbaV0gZm9yIGkgaW4gcmFuZ2UoMyldLCBbNDIsIDE3LCAyXSkKKworICAgICAgICBwdHIgPSBjYXN0KGFkZHJlc3MsIFBPSU5URVIoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtwdHJbaV0gZm9yIGkgaW4gcmFuZ2UoMyldLCBbNDIsIDE3LCAyXSkKKworICAgIGRlZiB0ZXN0X3AyYV9vYmplY3RzKHNlbGYpOgorICAgICAgICBhcnJheSA9IChjX2NoYXJfcCAqIDUpKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcnJheS5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgYXJyYXlbMF0gPSAiZm9vIGJhciIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcnJheS5fb2JqZWN0cywgeycwJzogImZvbyBiYXIifSkKKworICAgICAgICBwID0gY2FzdChhcnJheSwgUE9JTlRFUihjX2NoYXJfcCkpCisgICAgICAgICMgYXJyYXkgYW5kIHAgc2hhcmUgYSBjb21tb24gX29iamVjdHMgYXR0cmlidXRlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLl9vYmplY3RzIGlzIGFycmF5Ll9vYmplY3RzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFycmF5Ll9vYmplY3RzLCB7JzAnOiAiZm9vIGJhciIsIGlkKGFycmF5KTogYXJyYXl9KQorICAgICAgICBwWzBdID0gInNwYW0gc3BhbSIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLl9vYmplY3RzLCB7JzAnOiAic3BhbSBzcGFtIiwgaWQoYXJyYXkpOiBhcnJheX0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcnJheS5fb2JqZWN0cyBpcyBwLl9vYmplY3RzKQorICAgICAgICBwWzFdID0gImZvbyBiYXIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5fb2JqZWN0cywgeycxJzogJ2ZvbyBiYXInLCAnMCc6ICJzcGFtIHNwYW0iLCBpZChhcnJheSk6IGFycmF5fSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFycmF5Ll9vYmplY3RzIGlzIHAuX29iamVjdHMpCisKKyAgICBkZWYgdGVzdF9vdGhlcihzZWxmKToKKyAgICAgICAgcCA9IGNhc3QoKGNfaW50ICogNCkoMSwgMiwgMywgNCksIFBPSU5URVIoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbOjRdLCBbMSwyLCAzLCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0Ol0sIFsxLCAyLCAzLCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzM6LTE6LTFdLCBbNCwgMywgMiwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFs6NDozXSwgWzEsIDRdKQorICAgICAgICBjX2ludCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFs6NF0sIFsxLCAyLCAzLCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0Ol0sIFsxLCAyLCAzLCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzM6LTE6LTFdLCBbNCwgMywgMiwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFs6NDozXSwgWzEsIDRdKQorICAgICAgICBwWzJdID0gOTYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0XSwgWzEsIDIsIDk2LCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0Ol0sIFsxLCAyLCA5NiwgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFszOi0xOi0xXSwgWzQsIDk2LCAyLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0OjNdLCBbMSwgNF0pCisgICAgICAgIGNfaW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0XSwgWzEsIDIsIDk2LCA0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0Ol0sIFsxLCAyLCA5NiwgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFszOi0xOi0xXSwgWzQsIDk2LCAyLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzo0OjNdLCBbMSwgNF0pCisKKyAgICBkZWYgdGVzdF9jaGFyX3Aoc2VsZik6CisgICAgICAgICMgVGhpcyBkaWRuJ3Qgd29yazogYmFkIGFyZ3VtZW50IHRvIGludGVybmFsIGZ1bmN0aW9uCisgICAgICAgIHMgPSBjX2NoYXJfcCgiaGlobyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FzdChjYXN0KHMsIGNfdm9pZF9wKSwgY19jaGFyX3ApLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGlobyIpCisKKyAgICB0cnk6CisgICAgICAgIGNfd2NoYXJfcAorICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBkZWYgdGVzdF93Y2hhcl9wKHNlbGYpOgorICAgICAgICAgICAgcyA9IGNfd2NoYXJfcCgiaGlobyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc3QoY2FzdChzLCBjX3ZvaWRfcCksIGNfd2NoYXJfcCkudmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGlobyIpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfY2Z1bmNzLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2NmdW5jcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTNjYmU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2NmdW5jcy5weQpAQCAtMCwwICsxLDIxMSBAQAorIyBBIGxvdCBvZiBmYWlsdXJlcyBpbiB0aGVzZSB0ZXN0cyBvbiBNYWMgT1MgWC4KKyMgQnl0ZSBvcmRlciByZWxhdGVkPworCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY3R5cGVzIGltcG9ydCAqCisKK2ltcG9ydCBfY3R5cGVzX3Rlc3QKKworY2xhc3MgQ0Z1bmN0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgX2RsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQorCisgICAgZGVmIFMoc2VsZik6CisgICAgICAgIHJldHVybiBjX2xvbmdsb25nLmluX2RsbChzZWxmLl9kbGwsICJsYXN0X3RmX2FyZ19zIikudmFsdWUKKyAgICBkZWYgVShzZWxmKToKKyAgICAgICAgcmV0dXJuIGNfdWxvbmdsb25nLmluX2RsbChzZWxmLl9kbGwsICJsYXN0X3RmX2FyZ191IikudmFsdWUKKworICAgIGRlZiB0ZXN0X2J5dGUoc2VsZik6CisgICAgICAgIHNlbGYuX2RsbC50Zl9iLnJlc3R5cGUgPSBjX2J5dGUKKyAgICAgICAgc2VsZi5fZGxsLnRmX2IuYXJndHlwZXMgPSAoY19ieXRlLCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYigtMTI2KSwgLTQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCAtMTI2KQorCisgICAgZGVmIHRlc3RfYnl0ZV9wbHVzKHNlbGYpOgorICAgICAgICBzZWxmLl9kbGwudGZfYmIucmVzdHlwZSA9IGNfYnl0ZQorICAgICAgICBzZWxmLl9kbGwudGZfYmIuYXJndHlwZXMgPSAoY19ieXRlLCBjX2J5dGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2JiKDAsIC0xMjYpLCAtNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIC0xMjYpCisKKyAgICBkZWYgdGVzdF91Ynl0ZShzZWxmKToKKyAgICAgICAgc2VsZi5fZGxsLnRmX0IucmVzdHlwZSA9IGNfdWJ5dGUKKyAgICAgICAgc2VsZi5fZGxsLnRmX0IuYXJndHlwZXMgPSAoY191Ynl0ZSwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX0IoMjU1KSwgODUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5VKCksIDI1NSkKKworICAgIGRlZiB0ZXN0X3VieXRlX3BsdXMoc2VsZik6CisgICAgICAgIHNlbGYuX2RsbC50Zl9iQi5yZXN0eXBlID0gY191Ynl0ZQorICAgICAgICBzZWxmLl9kbGwudGZfYkIuYXJndHlwZXMgPSAoY19ieXRlLCBjX3VieXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9iQigwLCAyNTUpLCA4NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlUoKSwgMjU1KQorCisgICAgZGVmIHRlc3Rfc2hvcnQoc2VsZik6CisgICAgICAgIHNlbGYuX2RsbC50Zl9oLnJlc3R5cGUgPSBjX3Nob3J0CisgICAgICAgIHNlbGYuX2RsbC50Zl9oLmFyZ3R5cGVzID0gKGNfc2hvcnQsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9oKC0zMjc2NiksIC0xMDkyMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgLTMyNzY2KQorCisgICAgZGVmIHRlc3Rfc2hvcnRfcGx1cyhzZWxmKToKKyAgICAgICAgc2VsZi5fZGxsLnRmX2JoLnJlc3R5cGUgPSBjX3Nob3J0CisgICAgICAgIHNlbGYuX2RsbC50Zl9iaC5hcmd0eXBlcyA9IChjX2J5dGUsIGNfc2hvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2JoKDAsIC0zMjc2NiksIC0xMDkyMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgLTMyNzY2KQorCisgICAgZGVmIHRlc3RfdXNob3J0KHNlbGYpOgorICAgICAgICBzZWxmLl9kbGwudGZfSC5yZXN0eXBlID0gY191c2hvcnQKKyAgICAgICAgc2VsZi5fZGxsLnRmX0guYXJndHlwZXMgPSAoY191c2hvcnQsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9IKDY1NTM1KSwgMjE4NDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5VKCksIDY1NTM1KQorCisgICAgZGVmIHRlc3RfdXNob3J0X3BsdXMoc2VsZik6CisgICAgICAgIHNlbGYuX2RsbC50Zl9iSC5yZXN0eXBlID0gY191c2hvcnQKKyAgICAgICAgc2VsZi5fZGxsLnRmX2JILmFyZ3R5cGVzID0gKGNfYnl0ZSwgY191c2hvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2JIKDAsIDY1NTM1KSwgMjE4NDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5VKCksIDY1NTM1KQorCisgICAgZGVmIHRlc3RfaW50KHNlbGYpOgorICAgICAgICBzZWxmLl9kbGwudGZfaS5yZXN0eXBlID0gY19pbnQKKyAgICAgICAgc2VsZi5fZGxsLnRmX2kuYXJndHlwZXMgPSAoY19pbnQsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9pKC0yMTQ3NDgzNjQ2KSwgLTcxNTgyNzg4MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgLTIxNDc0ODM2NDYpCisKKyAgICBkZWYgdGVzdF9pbnRfcGx1cyhzZWxmKToKKyAgICAgICAgc2VsZi5fZGxsLnRmX2JpLnJlc3R5cGUgPSBjX2ludAorICAgICAgICBzZWxmLl9kbGwudGZfYmkuYXJndHlwZXMgPSAoY19ieXRlLCBjX2ludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYmkoMCwgLTIxNDc0ODM2NDYpLCAtNzE1ODI3ODgyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCAtMjE0NzQ4MzY0NikKKworICAgIGRlZiB0ZXN0X3VpbnQoc2VsZik6CisgICAgICAgIHNlbGYuX2RsbC50Zl9JLnJlc3R5cGUgPSBjX3VpbnQKKyAgICAgICAgc2VsZi5fZGxsLnRmX0kuYXJndHlwZXMgPSAoY191aW50LCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfSSg0Mjk0OTY3Mjk1KSwgMTQzMTY1NTc2NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlUoKSwgNDI5NDk2NzI5NSkKKworICAgIGRlZiB0ZXN0X3VpbnRfcGx1cyhzZWxmKToKKyAgICAgICAgc2VsZi5fZGxsLnRmX2JJLnJlc3R5cGUgPSBjX3VpbnQKKyAgICAgICAgc2VsZi5fZGxsLnRmX2JJLmFyZ3R5cGVzID0gKGNfYnl0ZSwgY191aW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9iSSgwLCA0Mjk0OTY3Mjk1KSwgMTQzMTY1NTc2NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlUoKSwgNDI5NDk2NzI5NSkKKworICAgIGRlZiB0ZXN0X2xvbmcoc2VsZik6CisgICAgICAgIHNlbGYuX2RsbC50Zl9sLnJlc3R5cGUgPSBjX2xvbmcKKyAgICAgICAgc2VsZi5fZGxsLnRmX2wuYXJndHlwZXMgPSAoY19sb25nLCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfbCgtMjE0NzQ4MzY0NiksIC03MTU4Mjc4ODIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIC0yMTQ3NDgzNjQ2KQorCisgICAgZGVmIHRlc3RfbG9uZ19wbHVzKHNlbGYpOgorICAgICAgICBzZWxmLl9kbGwudGZfYmwucmVzdHlwZSA9IGNfbG9uZworICAgICAgICBzZWxmLl9kbGwudGZfYmwuYXJndHlwZXMgPSAoY19ieXRlLCBjX2xvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2JsKDAsIC0yMTQ3NDgzNjQ2KSwgLTcxNTgyNzg4MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgLTIxNDc0ODM2NDYpCisKKyAgICBkZWYgdGVzdF91bG9uZyhzZWxmKToKKyAgICAgICAgc2VsZi5fZGxsLnRmX0wucmVzdHlwZSA9IGNfdWxvbmcKKyAgICAgICAgc2VsZi5fZGxsLnRmX0wuYXJndHlwZXMgPSAoY191bG9uZywpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX0woNDI5NDk2NzI5NSksIDE0MzE2NTU3NjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5VKCksIDQyOTQ5NjcyOTUpCisKKyAgICBkZWYgdGVzdF91bG9uZ19wbHVzKHNlbGYpOgorICAgICAgICBzZWxmLl9kbGwudGZfYkwucmVzdHlwZSA9IGNfdWxvbmcKKyAgICAgICAgc2VsZi5fZGxsLnRmX2JMLmFyZ3R5cGVzID0gKGNfY2hhciwgY191bG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYkwoJyAnLCA0Mjk0OTY3Mjk1KSwgMTQzMTY1NTc2NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlUoKSwgNDI5NDk2NzI5NSkKKworICAgIGRlZiB0ZXN0X2xvbmdsb25nKHNlbGYpOgorICAgICAgICBzZWxmLl9kbGwudGZfcS5yZXN0eXBlID0gY19sb25nbG9uZworICAgICAgICBzZWxmLl9kbGwudGZfcS5hcmd0eXBlcyA9IChjX2xvbmdsb25nLCApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX3EoLTkyMjMzNzIwMzY4NTQ3NzU4MDYpLCAtMzA3NDQ1NzM0NTYxODI1ODYwMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgLTkyMjMzNzIwMzY4NTQ3NzU4MDYpCisKKyAgICBkZWYgdGVzdF9sb25nbG9uZ19wbHVzKHNlbGYpOgorICAgICAgICBzZWxmLl9kbGwudGZfYnEucmVzdHlwZSA9IGNfbG9uZ2xvbmcKKyAgICAgICAgc2VsZi5fZGxsLnRmX2JxLmFyZ3R5cGVzID0gKGNfYnl0ZSwgY19sb25nbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYnEoMCwgLTkyMjMzNzIwMzY4NTQ3NzU4MDYpLCAtMzA3NDQ1NzM0NTYxODI1ODYwMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgLTkyMjMzNzIwMzY4NTQ3NzU4MDYpCisKKyAgICBkZWYgdGVzdF91bG9uZ2xvbmcoc2VsZik6CisgICAgICAgIHNlbGYuX2RsbC50Zl9RLnJlc3R5cGUgPSBjX3Vsb25nbG9uZworICAgICAgICBzZWxmLl9kbGwudGZfUS5hcmd0eXBlcyA9IChjX3Vsb25nbG9uZywgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9RKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KSwgNjE0ODkxNDY5MTIzNjUxNzIwNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlUoKSwgMTg0NDY3NDQwNzM3MDk1NTE2MTUpCisKKyAgICBkZWYgdGVzdF91bG9uZ2xvbmdfcGx1cyhzZWxmKToKKyAgICAgICAgc2VsZi5fZGxsLnRmX2JRLnJlc3R5cGUgPSBjX3Vsb25nbG9uZworICAgICAgICBzZWxmLl9kbGwudGZfYlEuYXJndHlwZXMgPSAoY19ieXRlLCBjX3Vsb25nbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYlEoMCwgMTg0NDY3NDQwNzM3MDk1NTE2MTUpLCA2MTQ4OTE0NjkxMjM2NTE3MjA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuVSgpLCAxODQ0Njc0NDA3MzcwOTU1MTYxNSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgorICAgICAgICBzZWxmLl9kbGwudGZfZi5yZXN0eXBlID0gY19mbG9hdAorICAgICAgICBzZWxmLl9kbGwudGZfZi5hcmd0eXBlcyA9IChjX2Zsb2F0LCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfZigtNDIuKSwgLTE0LikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgLTQyKQorCisgICAgZGVmIHRlc3RfZmxvYXRfcGx1cyhzZWxmKToKKyAgICAgICAgc2VsZi5fZGxsLnRmX2JmLnJlc3R5cGUgPSBjX2Zsb2F0CisgICAgICAgIHNlbGYuX2RsbC50Zl9iZi5hcmd0eXBlcyA9IChjX2J5dGUsIGNfZmxvYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2JmKDAsIC00Mi4pLCAtMTQuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCAtNDIpCisKKyAgICBkZWYgdGVzdF9kb3VibGUoc2VsZik6CisgICAgICAgIHNlbGYuX2RsbC50Zl9kLnJlc3R5cGUgPSBjX2RvdWJsZQorICAgICAgICBzZWxmLl9kbGwudGZfZC5hcmd0eXBlcyA9IChjX2RvdWJsZSwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2QoNDIuKSwgMTQuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCA0MikKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9wbHVzKHNlbGYpOgorICAgICAgICBzZWxmLl9kbGwudGZfYmQucmVzdHlwZSA9IGNfZG91YmxlCisgICAgICAgIHNlbGYuX2RsbC50Zl9iZC5hcmd0eXBlcyA9IChjX2J5dGUsIGNfZG91YmxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9iZCgwLCA0Mi4pLCAxNC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5TKCksIDQyKQorCisgICAgZGVmIHRlc3RfbG9uZ2RvdWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5fZGxsLnRmX0QucmVzdHlwZSA9IGNfbG9uZ2RvdWJsZQorICAgICAgICBzZWxmLl9kbGwudGZfRC5hcmd0eXBlcyA9IChjX2xvbmdkb3VibGUsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2RsbC50Zl9EKDQyLiksIDE0LikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgNDIpCisKKyAgICBkZWYgdGVzdF9sb25nZG91YmxlX3BsdXMoc2VsZik6CisgICAgICAgIHNlbGYuX2RsbC50Zl9iRC5yZXN0eXBlID0gY19sb25nZG91YmxlCisgICAgICAgIHNlbGYuX2RsbC50Zl9iRC5hcmd0eXBlcyA9IChjX2J5dGUsIGNfbG9uZ2RvdWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYkQoMCwgNDIuKSwgMTQuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCA0MikKKworICAgIGRlZiB0ZXN0X2NhbGx3aXRocmVzdWx0KHNlbGYpOgorICAgICAgICBkZWYgcHJvY2Vzc19yZXN1bHQocmVzdWx0KToKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQgKiAyCisgICAgICAgIHNlbGYuX2RsbC50Zl9pLnJlc3R5cGUgPSBwcm9jZXNzX3Jlc3VsdAorICAgICAgICBzZWxmLl9kbGwudGZfaS5hcmd0eXBlcyA9IChjX2ludCwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2koNDIpLCAyOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLlMoKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnRmX2koLTQyKSwgLTI4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCAtNDIpCisKKyAgICBkZWYgdGVzdF92b2lkKHNlbGYpOgorICAgICAgICBzZWxmLl9kbGwudHZfaS5yZXN0eXBlID0gTm9uZQorICAgICAgICBzZWxmLl9kbGwudHZfaS5hcmd0eXBlcyA9IChjX2ludCwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGxsLnR2X2koNDIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudHZfaSgtNDIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuUygpLCAtNDIpCisKKyMgVGhlIGZvbGxvd2luZyByZXBlYXRlcyB0aGUgYWJvdmUgdGVzdHMgd2l0aCBzdGRjYWxsIGZ1bmN0aW9ucyAod2hlcmUKKyMgdGhleSBhcmUgYXZhaWxhYmxlKQordHJ5OgorICAgIFdpbkRMTAorZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBwYXNzCitlbHNlOgorICAgIGNsYXNzIHN0ZGNhbGxfZGxsKFdpbkRMTCk6CisgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgIGlmIG5hbWVbOjJdID09ICdfXycgYW5kIG5hbWVbLTI6XSA9PSAnX18nOgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpCisgICAgICAgICAgICBmdW5jID0gc2VsZi5fRnVuY1B0cigoInNfIiArIG5hbWUsIHNlbGYpKQorICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBuYW1lLCBmdW5jKQorICAgICAgICAgICAgcmV0dXJuIGZ1bmMKKworICAgIGNsYXNzIHN0ZGNhbGxDRnVuY3Rpb25zKENGdW5jdGlvbnMpOgorICAgICAgICBfZGxsID0gc3RkY2FsbF9kbGwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQorICAgICAgICBwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjY2M1NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQpAQCAtMCwwICsxLDM5IEBACitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBjdHlwZXMgaW1wb3J0ICoKKworY2xhc3MgQ0hFQ0tFRChjX2ludCk6CisgICAgZGVmIF9jaGVja19yZXR2YWxfKHZhbHVlKToKKyAgICAgICAgIyBSZWNlaXZlcyBhIENIRUNLRUQgaW5zdGFuY2UuCisgICAgICAgIHJldHVybiBzdHIodmFsdWUudmFsdWUpCisgICAgX2NoZWNrX3JldHZhbF8gPSBzdGF0aWNtZXRob2QoX2NoZWNrX3JldHZhbF8pCisKK2NsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY2hlY2tyZXR2YWwoc2VsZik6CisKKyAgICAgICAgaW1wb3J0IF9jdHlwZXNfdGVzdAorICAgICAgICBkbGwgPSBDRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZGxsLl90ZXN0ZnVuY19wX3AoNDIpKQorCisgICAgICAgIGRsbC5fdGVzdGZ1bmNfcF9wLnJlc3R5cGUgPSBDSEVDS0VECisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjQyIiwgZGxsLl90ZXN0ZnVuY19wX3AoNDIpKQorCisgICAgICAgIGRsbC5fdGVzdGZ1bmNfcF9wLnJlc3R5cGUgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZGxsLl90ZXN0ZnVuY19wX3AoNDIpKQorCisgICAgICAgIGRlbCBkbGwuX3Rlc3RmdW5jX3BfcC5yZXN0eXBlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGRsbC5fdGVzdGZ1bmNfcF9wKDQyKSkKKworICAgIHRyeToKKyAgICAgICAgb2xlZGxsCisgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGRlZiB0ZXN0X29sZWRsbChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGVkbGwub2xlYXV0MzIuQ3JlYXRlVHlwZUxpYjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgTm9uZSwgTm9uZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9kZWxhdHRyLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2RlbGF0dHIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY0ZDU4NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9kZWxhdHRyLnB5CkBAIC0wLDAgKzEsMjEgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjdHlwZXMgaW1wb3J0ICoKKworY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgIF9maWVsZHNfID0gWygiZm9vIiwgY19pbnQpXQorCitjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF0dHIsIGNfaW50KDQyKSwgInZhbHVlIikKKworICAgIGRlZiB0ZXN0X2NoYXJhcnJheShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxhdHRyLCAoY19jaGFyICogNSkoKSwgInZhbHVlIikKKworICAgIGRlZiB0ZXN0X3N0cnVjdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxhdHRyLCBYKCksICJmb28iKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2VycmNoZWNrLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2VycmNoZWNrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0OTEzZjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfZXJyY2hlY2sucHkKQEAgLTAsMCArMSwxOSBAQAoraW1wb3J0IHN5cworZnJvbSBjdHlwZXMgaW1wb3J0ICoKKworIyNjbGFzcyBITU9EVUxFKFN0cnVjdHVyZSk6CisjIyAgICBfZmllbGRzXyA9IFsoInZhbHVlIiwgY192b2lkX3ApXQorCisjIyAgICBkZWYgX19yZXByX18oc2VsZik6CisjIyAgICAgICAgcmV0dXJuICI8SE1PRFVMRSAlcz4iICUgc2VsZi52YWx1ZQorCisjI3dpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBLnJlc3R5cGUgPSBITU9EVUxFCisKKyMjcHJpbnQgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEoInB5dGhvbjIzLmRsbCIpCisjI3ByaW50IGhleChzeXMuZGxsaGFuZGxlKQorCisjI2RlZiBub256ZXJvKGhhbmRsZSk6CisjIyAgICByZXR1cm4gKEdldExhc3RFcnJvcigpLCBoYW5kbGUpCisKKyMjd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEuZXJyY2hlY2sgPSBub256ZXJvCisjI3ByaW50IHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKCJzcGFtIikKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9lcnJuby5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9lcnJuby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2E1YmYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2Vycm5vLnB5CkBAIC0wLDAgKzEsODAgQEAKK2ltcG9ydCB1bml0dGVzdCwgb3MsIGVycm5vCitmcm9tIGN0eXBlcyBpbXBvcnQgKgorZnJvbSBjdHlwZXMudXRpbCBpbXBvcnQgZmluZF9saWJyYXJ5Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKK2NsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X29wZW4oc2VsZik6CisgICAgICAgIGxpYmNfbmFtZSA9IGZpbmRfbGlicmFyeSgiYyIpCisgICAgICAgIGlmIGxpYmNfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlVuYWJsZSB0byBmaW5kIEMgbGlicmFyeSIpCisgICAgICAgIGxpYmMgPSBDRExMKGxpYmNfbmFtZSwgdXNlX2Vycm5vPVRydWUpCisgICAgICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKKyAgICAgICAgICAgIGxpYmNfb3BlbiA9IGxpYmMuX29wZW4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpYmNfb3BlbiA9IGxpYmMub3BlbgorCisgICAgICAgIGxpYmNfb3Blbi5hcmd0eXBlcyA9IGNfY2hhcl9wLCBjX2ludAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGliY19vcGVuKCIiLCAwKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2Vycm5vKCksIGVycm5vLkVOT0VOVCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldF9lcnJubygzMiksIGVycm5vLkVOT0VOVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJybm8oKSwgMzIpCisKKyAgICAgICAgaWYgdGhyZWFkaW5nOgorICAgICAgICAgICAgZGVmIF93b3JrZXIoKToKKyAgICAgICAgICAgICAgICBzZXRfZXJybm8oMCkKKworICAgICAgICAgICAgICAgIGxpYmMgPSBDRExMKGxpYmNfbmFtZSwgdXNlX2Vycm5vPUZhbHNlKQorICAgICAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKKyAgICAgICAgICAgICAgICAgICAgbGliY19vcGVuID0gbGliYy5fb3BlbgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxpYmNfb3BlbiA9IGxpYmMub3BlbgorICAgICAgICAgICAgICAgIGxpYmNfb3Blbi5hcmd0eXBlcyA9IGNfY2hhcl9wLCBjX2ludAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGliY19vcGVuKCIiLCAwKSwgLTEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJybm8oKSwgMCkKKworICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PV93b3JrZXIpCisgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgIHQuam9pbigpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2Vycm5vKCksIDMyKQorICAgICAgICAgICAgc2V0X2Vycm5vKDApCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICJudCIsICdUZXN0IHNwZWNpZmljIHRvIFdpbmRvd3MnKQorICAgIGRlZiB0ZXN0X0dldExhc3RFcnJvcihzZWxmKToKKyAgICAgICAgZGxsID0gV2luRExMKCJrZXJuZWwzMiIsIHVzZV9sYXN0X2Vycm9yPVRydWUpCisgICAgICAgIEdldE1vZHVsZUhhbmRsZSA9IGRsbC5HZXRNb2R1bGVIYW5kbGVBCisgICAgICAgIEdldE1vZHVsZUhhbmRsZS5hcmd0eXBlcyA9IFtjX3djaGFyX3BdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBHZXRNb2R1bGVIYW5kbGUoImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9sYXN0X2Vycm9yKCksIDEyNikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldF9sYXN0X2Vycm9yKDMyKSwgMTI2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9sYXN0X2Vycm9yKCksIDMyKQorCisgICAgICAgIGRlZiBfd29ya2VyKCk6CisgICAgICAgICAgICBzZXRfbGFzdF9lcnJvcigwKQorCisgICAgICAgICAgICBkbGwgPSBXaW5ETEwoImtlcm5lbDMyIiwgdXNlX2xhc3RfZXJyb3I9RmFsc2UpCisgICAgICAgICAgICBHZXRNb2R1bGVIYW5kbGUgPSBkbGwuR2V0TW9kdWxlSGFuZGxlVworICAgICAgICAgICAgR2V0TW9kdWxlSGFuZGxlLmFyZ3R5cGVzID0gW2Nfd2NoYXJfcF0KKyAgICAgICAgICAgIEdldE1vZHVsZUhhbmRsZSgiYmFyIikKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfbGFzdF9lcnJvcigpLCAwKQorCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1fd29ya2VyKQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgdC5qb2luKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9sYXN0X2Vycm9yKCksIDMyKQorCisgICAgICAgIHNldF9sYXN0X2Vycm9yKDApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfZmluZC5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9maW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZTc4OWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfZmluZC5weQpAQCAtMCwwICsxLDgyIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2Zyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy51dGlsIGltcG9ydCBmaW5kX2xpYnJhcnkKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IGlzX3Jlc291cmNlX2VuYWJsZWQKKworaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgbGliX2dsID0gZmluZF9saWJyYXJ5KCJPcGVuR0wzMiIpCisgICAgbGliX2dsdSA9IGZpbmRfbGlicmFyeSgiR2x1MzIiKQorICAgIGxpYl9nbGUgPSBOb25lCitlbGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKKyAgICBsaWJfZ2wgPSBsaWJfZ2x1ID0gZmluZF9saWJyYXJ5KCJPcGVuR0wiKQorICAgIGxpYl9nbGUgPSBOb25lCitlbHNlOgorICAgIGxpYl9nbCA9IGZpbmRfbGlicmFyeSgiR0wiKQorICAgIGxpYl9nbHUgPSBmaW5kX2xpYnJhcnkoIkdMVSIpCisgICAgbGliX2dsZSA9IGZpbmRfbGlicmFyeSgiZ2xlIikKKworIyMgcHJpbnQsIGZvciBkZWJ1Z2dpbmcKK2lmIGlzX3Jlc291cmNlX2VuYWJsZWQoInByaW50aW5nIik6CisgICAgaWYgbGliX2dsIG9yIGxpYl9nbHUgb3IgbGliX2dsZToKKyAgICAgICAgcHJpbnQgIk9wZW5HTCBsaWJyYXJpZXM6IgorICAgICAgICBmb3IgaXRlbSBpbiAoKCJHTCIsIGxpYl9nbCksCisgICAgICAgICAgICAgICAgICAgICAoIkdMVSIsIGxpYl9nbHUpLAorICAgICAgICAgICAgICAgICAgICAgKCJnbGUiLCBsaWJfZ2xlKSk6CisgICAgICAgICAgICBwcmludCAiXHQiLCBpdGVtCisKKworIyBPbiBzb21lIHN5c3RlbXMsIGxvYWRpbmcgdGhlIE9wZW5HTCBsaWJyYXJpZXMgbmVlZHMgdGhlIFJUTERfR0xPQkFMIG1vZGUuCitjbGFzcyBUZXN0X09wZW5HTF9saWJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZ2wgPSBzZWxmLmdsdSA9IHNlbGYuZ2xlID0gTm9uZQorICAgICAgICBpZiBsaWJfZ2w6CisgICAgICAgICAgICBzZWxmLmdsID0gQ0RMTChsaWJfZ2wsIG1vZGU9UlRMRF9HTE9CQUwpCisgICAgICAgIGlmIGxpYl9nbHU6CisgICAgICAgICAgICBzZWxmLmdsdSA9IENETEwobGliX2dsdSwgUlRMRF9HTE9CQUwpCisgICAgICAgIGlmIGxpYl9nbGU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5nbGUgPSBDRExMKGxpYl9nbGUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBpZiBsaWJfZ2w6CisgICAgICAgIGRlZiB0ZXN0X2dsKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5nbDoKKyAgICAgICAgICAgICAgICBzZWxmLmdsLmdsQ2xlYXJJbmRleAorCisgICAgaWYgbGliX2dsdToKKyAgICAgICAgZGVmIHRlc3RfZ2x1KHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5nbHU6CisgICAgICAgICAgICAgICAgc2VsZi5nbHUuZ2x1QmVnaW5DdXJ2ZQorCisgICAgaWYgbGliX2dsZToKKyAgICAgICAgZGVmIHRlc3RfZ2xlKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5nbGU6CisgICAgICAgICAgICAgICAgc2VsZi5nbGUuZ2xlR2V0Sm9pblN0eWxlCisKKyMjaWYgb3MubmFtZSA9PSAicG9zaXgiIGFuZCBzeXMucGxhdGZvcm0gIT0gImRhcndpbiI6CisKKyMjICAgICMgT24gcGxhdGZvcm1zIHdoZXJlIHRoZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCBpcyAnLnNvJywKKyMjICAgICMgYXQgbGVhc3Qgc29tZSBsaWJyYXJpZXMgY2FuIGJlIGxvYWRlZCBhcyBhdHRyaWJ1dGVzIG9mIHRoZSBjZGxsCisjIyAgICAjIG9iamVjdCwgc2luY2UgY3R5cGVzIG5vdyB0cmllcyBsb2FkaW5nIHRoZSBsaWIgYWdhaW4KKyMjICAgICMgd2l0aCAnLnNvJyBhcHBlbmRlZCBvZiB0aGUgZmlyc3QgdHJ5IGZhaWxzLgorIyMgICAgIworIyMgICAgIyBXb24ndCB3b3JrIGZvciBsaWJjLCB1bmZvcnR1bmF0ZWx5LiAgT1RPSCwgaXQgaXNuJ3QKKyMjICAgICMgbmVlZGVkIGZvciBsaWJjIHNpbmNlIHRoaXMgaXMgYWxyZWFkeSBtYXBwZWQgaW50byB0aGUgY3VycmVudAorIyMgICAgIyBwcm9jZXNzICg/KQorIyMgICAgIworIyMgICAgIyBPbiBNQUMgT1NYLCBpdCB3b24ndCB3b3JrIGVpdGhlciwgYmVjYXVzZSBkbG9wZW4oKSBuZWVkcyBhIGZ1bGwgcGF0aCwKKyMjICAgICMgYW5kIHRoZSBkZWZhdWx0IHN1ZmZpeCBpcyBlaXRoZXIgbm9uZSBvciAnLmR5bGliJy4KKworIyMgICAgY2xhc3MgTG9hZExpYnModW5pdHRlc3QuVGVzdENhc2UpOgorIyMgICAgICAgIGRlZiB0ZXN0X2xpYm0oc2VsZik6CisjIyAgICAgICAgICAgIGltcG9ydCBtYXRoCisjIyAgICAgICAgICAgIGxpYm0gPSBjZGxsLmxpYm0KKyMjICAgICAgICAgICAgc3FydCA9IGxpYm0uc3FydAorIyMgICAgICAgICAgICBzcXJ0LmFyZ3R5cGVzID0gKGNfZG91YmxlLCkKKyMjICAgICAgICAgICAgc3FydC5yZXN0eXBlID0gY19kb3VibGUKKyMjICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcXJ0KDIpLCBtYXRoLnNxcnQoMikpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfZnJvbWJ1ZmZlci5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9mcm9tYnVmZmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNGZiNzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfZnJvbWJ1ZmZlci5weQpAQCAtMCwwICsxLDgxIEBACitmcm9tIGN0eXBlcyBpbXBvcnQgKgoraW1wb3J0IGFycmF5CitpbXBvcnQgZ2MKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBYKFN0cnVjdHVyZSk6CisgICAgX2ZpZWxkc18gPSBbKCJjX2ludCIsIGNfaW50KV0KKyAgICBpbml0X2NhbGxlZCA9IEZhbHNlCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9pbml0X2NhbGxlZCA9IFRydWUKKworY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZm9tX2J1ZmZlcihzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KCJpIiwgcmFuZ2UoMTYpKQorICAgICAgICB4ID0gKGNfaW50ICogMTYpLmZyb21fYnVmZmVyKGEpCisKKyAgICAgICAgeSA9IFguZnJvbV9idWZmZXIoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmNfaW50LCBhWzBdKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHkuaW5pdF9jYWxsZWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzpdLCBhLnRvbGlzdCgpKQorCisgICAgICAgIGFbMF0sIGFbLTFdID0gMjAwLCAtMjAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFs6XSwgYS50b2xpc3QoKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoYSBpbiB4Ll9vYmplY3RzLnZhbHVlcygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNfaW50LmZyb21fYnVmZmVyLCBhLCAtMSkKKworICAgICAgICBleHBlY3RlZCA9IHhbOl0KKyAgICAgICAgZGVsIGE7IGdjLmNvbGxlY3QoKTsgZ2MuY29sbGVjdCgpOyBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzpdLCBleHBlY3RlZCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjX2NoYXIgKiAxNikuZnJvbV9idWZmZXIsICJhIiAqIDE2KQorCisgICAgZGVmIHRlc3RfZm9tX2J1ZmZlcl93aXRoX29mZnNldChzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KCJpIiwgcmFuZ2UoMTYpKQorICAgICAgICB4ID0gKGNfaW50ICogMTUpLmZyb21fYnVmZmVyKGEsIHNpemVvZihjX2ludCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzpdLCBhLnRvbGlzdCgpWzE6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiAoY19pbnQgKiAxNikuZnJvbV9idWZmZXIoYSwgc2l6ZW9mKGNfaW50KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogKGNfaW50ICogMSkuZnJvbV9idWZmZXIoYSwgMTYgKiBzaXplb2YoY19pbnQpKSkKKworICAgIGRlZiB0ZXN0X2Zyb21fYnVmZmVyX2NvcHkoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheSgiaSIsIHJhbmdlKDE2KSkKKyAgICAgICAgeCA9IChjX2ludCAqIDE2KS5mcm9tX2J1ZmZlcl9jb3B5KGEpCisKKyAgICAgICAgeSA9IFguZnJvbV9idWZmZXJfY29weShhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuY19pbnQsIGFbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeS5pbml0X2NhbGxlZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbOl0sIHJhbmdlKDE2KSkKKworICAgICAgICBhWzBdLCBhWy0xXSA9IDIwMCwgLTIwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbOl0sIHJhbmdlKDE2KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX29iamVjdHMsIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY19pbnQuZnJvbV9idWZmZXIsIGEsIC0xKQorCisgICAgICAgIGRlbCBhOyBnYy5jb2xsZWN0KCk7IGdjLmNvbGxlY3QoKTsgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFs6XSwgcmFuZ2UoMTYpKQorCisgICAgICAgIHggPSAoY19jaGFyICogMTYpLmZyb21fYnVmZmVyX2NvcHkoImEiICogMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFs6XSwgImEiICogMTYpCisKKyAgICBkZWYgdGVzdF9mb21fYnVmZmVyX2NvcHlfd2l0aF9vZmZzZXQoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheSgiaSIsIHJhbmdlKDE2KSkKKyAgICAgICAgeCA9IChjX2ludCAqIDE1KS5mcm9tX2J1ZmZlcl9jb3B5KGEsIHNpemVvZihjX2ludCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzpdLCBhLnRvbGlzdCgpWzE6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNfaW50ICogMTYpLmZyb21fYnVmZmVyX2NvcHksIGEsIHNpemVvZihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjX2ludCAqIDEpLmZyb21fYnVmZmVyX2NvcHksIGEsIDE2ICogc2l6ZW9mKGNfaW50KSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9mdW5jcHRyLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2Z1bmNwdHIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlhZjVlZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9mdW5jcHRyLnB5CkBAIC0wLDAgKzEsMTI3IEBACitpbXBvcnQgb3MsIHVuaXR0ZXN0Citmcm9tIGN0eXBlcyBpbXBvcnQgKgorCit0cnk6CisgICAgV0lORlVOQ1RZUEUKK2V4Y2VwdCBOYW1lRXJyb3I6CisgICAgIyBmYWtlIHRvIGVuYWJsZSB0aGlzIHRlc3Qgb24gTGludXgKKyAgICBXSU5GVU5DVFlQRSA9IENGVU5DVFlQRQorCitpbXBvcnQgX2N0eXBlc190ZXN0CitsaWIgPSBDRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKworY2xhc3MgQ0Z1bmNQdHJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIFggPSBXSU5GVU5DVFlQRShjX2ludCwgY19pbnQsIGNfaW50KQorCisgICAgICAgIGRlZiBmdW5jKCphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBsZW4oYXJncykKKworICAgICAgICB4ID0gWChmdW5jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgucmVzdHlwZSwgY19pbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5hcmd0eXBlcywgKGNfaW50LCBjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHgpLCBzaXplb2YoY192b2lkcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY192b2lkcCkpCisKKyAgICBkZWYgdGVzdF9maXJzdChzZWxmKToKKyAgICAgICAgU3RkQ2FsbGJhY2sgPSBXSU5GVU5DVFlQRShjX2ludCwgY19pbnQsIGNfaW50KQorICAgICAgICBDZGVjbENhbGxiYWNrID0gQ0ZVTkNUWVBFKGNfaW50LCBjX2ludCwgY19pbnQpCisKKyAgICAgICAgZGVmIGZ1bmMoYSwgYik6CisgICAgICAgICAgICByZXR1cm4gYSArIGIKKworICAgICAgICBzID0gU3RkQ2FsbGJhY2soZnVuYykKKyAgICAgICAgYyA9IENkZWNsQ2FsbGJhY2soZnVuYykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMoMSwgMiksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYygxLCAyKSwgMykKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIG5vIGxvbmdlciByYWlzZXMgYSBUeXBlRXJyb3IgLSBpdCBpcyBub3cKKyAgICAgICAgIyBwb3NzaWJsZSwgYXMgaW4gQywgdG8gY2FsbCBjZGVjbCBmdW5jdGlvbnMgd2l0aCBtb3JlIHBhcmFtZXRlcnMuCisgICAgICAgICNzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMsIDEsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYygxLCAyLCAzLCA0LCA1LCA2KSwgMykKKyAgICAgICAgaWYgbm90IFdJTkZVTkNUWVBFIGlzIENGVU5DVFlQRSBhbmQgb3MubmFtZSAhPSAiY2UiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzLCAxLCAyLCAzKQorCisgICAgZGVmIHRlc3Rfc3RydWN0dXJlcyhzZWxmKToKKyAgICAgICAgV05EUFJPQyA9IFdJTkZVTkNUWVBFKGNfbG9uZywgY19pbnQsIGNfaW50LCBjX2ludCwgY19pbnQpCisKKyAgICAgICAgZGVmIHduZHByb2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk6CisgICAgICAgICAgICByZXR1cm4gaHduZCArIG1zZyArIHdQYXJhbSArIGxQYXJhbQorCisgICAgICAgIEhJTlNUQU5DRSA9IGNfaW50CisgICAgICAgIEhJQ09OID0gY19pbnQKKyAgICAgICAgSENVUlNPUiA9IGNfaW50CisgICAgICAgIExQQ1RTVFIgPSBjX2NoYXJfcAorCisgICAgICAgIGNsYXNzIFdORENMQVNTKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoInN0eWxlIiwgY191aW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgibHBmblduZFByb2MiLCBXTkRQUk9DKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiY2JDbHNFeHRyYSIsIGNfaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiY2JXbmRFeHRyYSIsIGNfaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiaEluc3RhbmNlIiwgSElOU1RBTkNFKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiaEljb24iLCBISUNPTiksCisgICAgICAgICAgICAgICAgICAgICAgICAoImhDdXJzb3IiLCBIQ1VSU09SKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgibHBzek1lbnVOYW1lIiwgTFBDVFNUUiksCisgICAgICAgICAgICAgICAgICAgICAgICAoImxwc3pDbGFzc05hbWUiLCBMUENUU1RSKV0KKworICAgICAgICB3bmRjbGFzcyA9IFdORENMQVNTKCkKKyAgICAgICAgd25kY2xhc3MubHBmblduZFByb2MgPSBXTkRQUk9DKHduZHByb2MpCisKKyAgICAgICAgV05EUFJPQ18yID0gV0lORlVOQ1RZUEUoY19sb25nLCBjX2ludCwgY19pbnQsIGNfaW50LCBjX2ludCkKKworICAgICAgICAjIFRoaXMgaXMgbm8gbG9uZ2VyIHRydWUsIG5vdyB0aGF0IFdJTkZVTkNUWVBFIGNhY2hlcyBjcmVhdGVkIHR5cGVzIGludGVybmFsbHkuCisgICAgICAgICMjICMgQ0Z1bmNQdHIgc3ViY2xhc3NlcyBhcmUgY29tcGFyZWQgYnkgaWRlbnRpdHksIHNvIHRoaXMgcmFpc2VzIGEgVHlwZUVycm9yOgorICAgICAgICAjIyBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIHduZGNsYXNzLAorICAgICAgICAjIyAgICAgICAgICAgICAgICAgICJscGZuV25kUHJvYyIsIFdORFBST0NfMih3bmRwcm9jKSkKKyAgICAgICAgIyBpbnN0ZWFkOgorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShXTkRQUk9DIGlzIFdORFBST0NfMikKKyAgICAgICAgIyAnd25kY2xhc3MubHBmblduZFByb2MnIGxlYWtzIDk0IHJlZmVyZW5jZXMuICBXaHk/CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod25kY2xhc3MubHBmblduZFByb2MoMSwgMiwgMywgNCksIDEwKQorCisKKyAgICAgICAgZiA9IHduZGNsYXNzLmxwZm5XbmRQcm9jCisKKyAgICAgICAgZGVsIHduZGNsYXNzCisgICAgICAgIGRlbCB3bmRwcm9jCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKDEwLCAxMSwgMTIsIDEzKSwgNDYpCisKKyAgICBkZWYgdGVzdF9kbGxmdW5jdGlvbnMoc2VsZik6CisKKyAgICAgICAgZGVmIE5vTnVsbEhhbmRsZSh2YWx1ZSk6CisgICAgICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICAgICAgcmFpc2UgV2luRXJyb3IoKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICAgICAgc3RyY2hyID0gbGliLm15X3N0cmNocgorICAgICAgICBzdHJjaHIucmVzdHlwZSA9IGNfY2hhcl9wCisgICAgICAgIHN0cmNoci5hcmd0eXBlcyA9IChjX2NoYXJfcCwgY19jaGFyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmNocigiYWJjZGVmZ2hpIiwgImIiKSwgImJjZGVmZ2hpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJjaHIoImFiY2RlZmdoaSIsICJ4IiksIE5vbmUpCisKKworICAgICAgICBzdHJ0b2sgPSBsaWIubXlfc3RydG9rCisgICAgICAgIHN0cnRvay5yZXN0eXBlID0gY19jaGFyX3AKKyAgICAgICAgIyBOZWl0aGVyIG9mIHRoaXMgZG9lcyB3b3JrOiBzdHJ0b2sgY2hhbmdlcyB0aGUgYnVmZmVyIGl0IGlzIHBhc3NlZAorIyMgICAgICAgIHN0cnRvay5hcmd0eXBlcyA9IChjX2NoYXJfcCwgY19jaGFyX3ApCisjIyAgICAgICAgc3RydG9rLmFyZ3R5cGVzID0gKGNfc3RyaW5nLCBjX2NoYXJfcCkKKworICAgICAgICBkZWYgY19zdHJpbmcoaW5pdCk6CisgICAgICAgICAgICBzaXplID0gbGVuKGluaXQpICsgMQorICAgICAgICAgICAgcmV0dXJuIChjX2NoYXIqc2l6ZSkoKmluaXQpCisKKyAgICAgICAgcyA9ICJhXG5iXG5jIgorICAgICAgICBiID0gY19zdHJpbmcocykKKworIyMgICAgICAgIGIgPSAoY19jaGFyICogKGxlbihzKSsxKSkoKQorIyMgICAgICAgIGIudmFsdWUgPSBzCisKKyMjICAgICAgICBiID0gY19zdHJpbmcocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ0b2soYiwgIlxuIiksICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ0b2soTm9uZSwgIlxuIiksICJiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ0b2soTm9uZSwgIlxuIiksICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ0b2soTm9uZSwgIlxuIiksIE5vbmUpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfZnVuY3Rpb25zLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2Z1bmN0aW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2JkM2VjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2Z1bmN0aW9ucy5weQpAQCAtMCwwICsxLDQxMiBAQAorIiIiCitIZXJlIGlzIHByb2JhYmx5IHRoZSBwbGFjZSB0byB3cml0ZSB0aGUgZG9jcywgc2luY2UgdGhlIHRlc3QtY2FzZXMKK3Nob3cgaG93IHRoZSB0eXBlIGJlaGF2ZS4KKworTGF0ZXIuLi4KKyIiIgorCitmcm9tIGN0eXBlcyBpbXBvcnQgKgoraW1wb3J0IHN5cywgdW5pdHRlc3QKKwordHJ5OgorICAgIFdJTkZVTkNUWVBFCitleGNlcHQgTmFtZUVycm9yOgorICAgICMgZmFrZSB0byBlbmFibGUgdGhpcyB0ZXN0IG9uIExpbnV4CisgICAgV0lORlVOQ1RZUEUgPSBDRlVOQ1RZUEUKKworaW1wb3J0IF9jdHlwZXNfdGVzdAorZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCitpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICB3aW5kbGwgPSBXaW5ETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQorCitjbGFzcyBQT0lOVChTdHJ1Y3R1cmUpOgorICAgIF9maWVsZHNfID0gWygieCIsIGNfaW50KSwgKCJ5IiwgY19pbnQpXQorY2xhc3MgUkVDVChTdHJ1Y3R1cmUpOgorICAgIF9maWVsZHNfID0gWygibGVmdCIsIGNfaW50KSwgKCJ0b3AiLCBjX2ludCksCisgICAgICAgICAgICAgICAgKCJyaWdodCIsIGNfaW50KSwgKCJib3R0b20iLCBjX2ludCldCitjbGFzcyBGdW5jdGlvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X21ybyhzZWxmKToKKyAgICAgICAgIyBpbiBQeXRob24gMi4zLCB0aGlzIHJhaXNlcyBUeXBlRXJyb3I6IE1STyBjb25mbGljdCBhbW9uZyBiYXNlcyBjbGFzc2VzLAorICAgICAgICAjIGluIFB5dGhvbiAyLjIgaXQgd29ya3MuCisgICAgICAgICMKKyAgICAgICAgIyBCdXQgaW4gZWFybHkgdmVyc2lvbnMgb2YgX2N0eXBlcy5jLCB0aGUgcmVzdWx0IG9mIHRwX25ldworICAgICAgICAjIHdhc24ndCBjaGVja2VkLCBhbmQgaXQgZXZlbiBjcmFzaGVkIFB5dGhvbi4KKyAgICAgICAgIyBGb3VuZCBieSBHcmVnIENoYXBtYW4uCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgWChvYmplY3QsIEFycmF5KToKKyAgICAgICAgICAgICAgICBfbGVuZ3RoXyA9IDUKKyAgICAgICAgICAgICAgICBfdHlwZV8gPSAiaSIKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworCisgICAgICAgIGZyb20gX2N0eXBlcyBpbXBvcnQgX1BvaW50ZXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgWChvYmplY3QsIF9Qb2ludGVyKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBfU2ltcGxlQ0RhdGEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgWChvYmplY3QsIF9TaW1wbGVDRGF0YSk6CisgICAgICAgICAgICAgICAgX3R5cGVfID0gImkiCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgWChvYmplY3QsIFN0cnVjdHVyZSk6CisgICAgICAgICAgICAgICAgX2ZpZWxkc18gPSBbXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisKKyAgICBkZWYgdGVzdF93Y2hhcl9wYXJtKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjX3djaGFyCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfaV9iaGlsZmQKKyAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfd2NoYXIsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfZG91YmxlXQorICAgICAgICByZXN1bHQgPSBmKDEsIHUieCIsIDMsIDQsIDUuMCwgNi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMTM5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgaW50KQorCisgICAgZGVmIHRlc3Rfd2NoYXJfcmVzdWx0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjX3djaGFyCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfaV9iaGlsZmQKKyAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfc2hvcnQsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfZG91YmxlXQorICAgICAgICBmLnJlc3R5cGUgPSBjX3djaGFyCisgICAgICAgIHJlc3VsdCA9IGYoMCwgMCwgMCwgMCwgMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHUnXHgwMCcpCisKKyAgICBkZWYgdGVzdF92b2lkcmVzdWx0KHNlbGYpOgorICAgICAgICBmID0gZGxsLl90ZXN0ZnVuY192CisgICAgICAgIGYucmVzdHlwZSA9IE5vbmUKKyAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2ludCwgY19pbnQsIFBPSU5URVIoY19pbnQpXQorICAgICAgICByZXN1bHQgPSBjX2ludCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZigxLCAyLCBieXJlZihyZXN1bHQpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudmFsdWUsIDMpCisKKyAgICBkZWYgdGVzdF9pbnRyZXN1bHQoc2VsZik6CisgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX2lfYmhpbGZkCisgICAgICAgIGYuYXJndHlwZXMgPSBbY19ieXRlLCBjX3Nob3J0LCBjX2ludCwgY19sb25nLCBjX2Zsb2F0LCBjX2RvdWJsZV0KKyAgICAgICAgZi5yZXN0eXBlID0gY19pbnQKKyAgICAgICAgcmVzdWx0ID0gZigxLCAyLCAzLCA0LCA1LjAsIDYuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgaW50KQorCisgICAgICAgIHJlc3VsdCA9IGYoLTEsIC0yLCAtMywgLTQsIC01LjAsIC02LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAtMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCBpbnQpCisKKyAgICAgICAgIyBJZiB3ZSBkZWNsYXJlIHRoZSBmdW5jdGlvbiB0byByZXR1cm4gYSBzaG9ydCwKKyAgICAgICAgIyBpcyB0aGUgaGlnaCBwYXJ0IHNwbGl0IG9mZj8KKyAgICAgICAgZi5yZXN0eXBlID0gY19zaG9ydAorICAgICAgICByZXN1bHQgPSBmKDEsIDIsIDMsIDQsIDUuMCwgNi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCBpbnQpCisKKyAgICAgICAgcmVzdWx0ID0gZigxLCAyLCAzLCAweDEwMDA0LCA1LjAsIDYuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgaW50KQorCisgICAgICAgICMgWW91IGNhbm5vdCBhc3NpZ24gY2hhcmFjdGVyIGZvcm1hdCBjb2RlcyBhcyByZXN0eXBlIGFueSBsb25nZXIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCBmLCAicmVzdHlwZSIsICJpIikKKworICAgIGRlZiB0ZXN0X2Zsb2F0cmVzdWx0KHNlbGYpOgorICAgICAgICBmID0gZGxsLl90ZXN0ZnVuY19mX2JoaWxmZAorICAgICAgICBmLmFyZ3R5cGVzID0gW2NfYnl0ZSwgY19zaG9ydCwgY19pbnQsIGNfbG9uZywgY19mbG9hdCwgY19kb3VibGVdCisgICAgICAgIGYucmVzdHlwZSA9IGNfZmxvYXQKKyAgICAgICAgcmVzdWx0ID0gZigxLCAyLCAzLCA0LCA1LjAsIDYuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgZmxvYXQpCisKKyAgICAgICAgcmVzdWx0ID0gZigtMSwgLTIsIC0zLCAtNCwgLTUuMCwgLTYuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIC0yMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIGZsb2F0KQorCisgICAgZGVmIHRlc3RfZG91YmxlcmVzdWx0KHNlbGYpOgorICAgICAgICBmID0gZGxsLl90ZXN0ZnVuY19kX2JoaWxmZAorICAgICAgICBmLmFyZ3R5cGVzID0gW2NfYnl0ZSwgY19zaG9ydCwgY19pbnQsIGNfbG9uZywgY19mbG9hdCwgY19kb3VibGVdCisgICAgICAgIGYucmVzdHlwZSA9IGNfZG91YmxlCisgICAgICAgIHJlc3VsdCA9IGYoMSwgMiwgMywgNCwgNS4wLCA2LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIGZsb2F0KQorCisgICAgICAgIHJlc3VsdCA9IGYoLTEsIC0yLCAtMywgLTQsIC01LjAsIC02LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAtMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCBmbG9hdCkKKworICAgIGRlZiB0ZXN0X2xvbmdkb3VibGVyZXN1bHQoc2VsZik6CisgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX0RfYmhpbGZECisgICAgICAgIGYuYXJndHlwZXMgPSBbY19ieXRlLCBjX3Nob3J0LCBjX2ludCwgY19sb25nLCBjX2Zsb2F0LCBjX2xvbmdkb3VibGVdCisgICAgICAgIGYucmVzdHlwZSA9IGNfbG9uZ2RvdWJsZQorICAgICAgICByZXN1bHQgPSBmKDEsIDIsIDMsIDQsIDUuMCwgNi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCBmbG9hdCkKKworICAgICAgICByZXN1bHQgPSBmKC0xLCAtMiwgLTMsIC00LCAtNS4wLCAtNi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgZmxvYXQpCisKKyAgICBkZWYgdGVzdF9sb25nbG9uZ3Jlc3VsdChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY19sb25nbG9uZworICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX3FfYmhpbGZkCisgICAgICAgIGYucmVzdHlwZSA9IGNfbG9uZ2xvbmcKKyAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfc2hvcnQsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfZG91YmxlXQorICAgICAgICByZXN1bHQgPSBmKDEsIDIsIDMsIDQsIDUuMCwgNi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMjEpCisKKyAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfcV9iaGlsZmRxCisgICAgICAgIGYucmVzdHlwZSA9IGNfbG9uZ2xvbmcKKyAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfc2hvcnQsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfZG91YmxlLCBjX2xvbmdsb25nXQorICAgICAgICByZXN1bHQgPSBmKDEsIDIsIDMsIDQsIDUuMCwgNi4wLCAyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDQyKQorCisgICAgZGVmIHRlc3Rfc3RyaW5ncmVzdWx0KHNlbGYpOgorICAgICAgICBmID0gZGxsLl90ZXN0ZnVuY19wX3AKKyAgICAgICAgZi5hcmd0eXBlcyA9IE5vbmUKKyAgICAgICAgZi5yZXN0eXBlID0gY19jaGFyX3AKKyAgICAgICAgcmVzdWx0ID0gZigiMTIzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsICIxMjMiKQorCisgICAgICAgIHJlc3VsdCA9IGYoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9wb2ludGVycyhzZWxmKToKKyAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfcF9wCisgICAgICAgIGYucmVzdHlwZSA9IFBPSU5URVIoY19pbnQpCisgICAgICAgIGYuYXJndHlwZXMgPSBbUE9JTlRFUihjX2ludCldCisKKyAgICAgICAgIyBUaGlzIG9ubHkgd29ya3MgaWYgdGhlIHZhbHVlIGNfaW50KDQyKSBwYXNzZWQgdG8gdGhlCisgICAgICAgICMgZnVuY3Rpb24gaXMgc3RpbGwgYWxpdmUgd2hpbGUgdGhlIHBvaW50ZXIgKHRoZSByZXN1bHQpIGlzCisgICAgICAgICMgdXNlZC4KKworICAgICAgICB2ID0gY19pbnQoNDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb2ludGVyKHYpLmNvbnRlbnRzLnZhbHVlLCA0MikKKyAgICAgICAgcmVzdWx0ID0gZihwb2ludGVyKHYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgUE9JTlRFUihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmNvbnRlbnRzLnZhbHVlLCA0MikKKworICAgICAgICAjIFRoaXMgb24gd29ya3MuLi4KKyAgICAgICAgcmVzdWx0ID0gZihwb2ludGVyKHYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5jb250ZW50cy52YWx1ZSwgdi52YWx1ZSkKKworICAgICAgICBwID0gcG9pbnRlcihjX2ludCg5OSkpCisgICAgICAgIHJlc3VsdCA9IGYocCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuY29udGVudHMudmFsdWUsIDk5KQorCisgICAgICAgIGFyZyA9IGJ5cmVmKHYpCisgICAgICAgIHJlc3VsdCA9IGYoYXJnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5jb250ZW50cywgdi52YWx1ZSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBcmd1bWVudEVycm9yLCBmLCBieXJlZihjX3Nob3J0KDIyKSkpCisKKyAgICAgICAgIyBJdCBpcyBkYW5nZXJvdXMsIGhvd2V2ZXIsIGJlY2F1c2UgeW91IGRvbid0IGNvbnRyb2wgdGhlIGxpZmV0aW1lCisgICAgICAgICMgb2YgdGhlIHBvaW50ZXI6CisgICAgICAgIHJlc3VsdCA9IGYoYnlyZWYoY19pbnQoOTkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQuY29udGVudHMsIDk5KQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICBmID0gZGxsLl90ZXN0ZnVuY19wX3AKKyAgICAgICAgZi5yZXN0eXBlID0gY19pbnQKKworICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoInkiLCBjX2ludCldCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBYKCkpICNjYW5ub3QgY29udmVydCBwYXJhbWV0ZXIKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICBkZWYgdGVzdF9zaG9ydHMoc2VsZik6CisgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX2NhbGxiYWNrX2lfaWYKKworICAgICAgICBhcmdzID0gW10KKyAgICAgICAgZXhwZWN0ZWQgPSBbMjYyMTQ0LCAxMzEwNzIsIDY1NTM2LCAzMjc2OCwgMTYzODQsIDgxOTIsIDQwOTYsIDIwNDgsCisgICAgICAgICAgICAgICAgICAgIDEwMjQsIDUxMiwgMjU2LCAxMjgsIDY0LCAzMiwgMTYsIDgsIDQsIDIsIDFdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKHYpOgorICAgICAgICAgICAgYXJncy5hcHBlbmQodikKKyAgICAgICAgICAgIHJldHVybiB2CisKKyAgICAgICAgQ2FsbEJhY2sgPSBDRlVOQ1RZUEUoY19pbnQsIGNfaW50KQorCisgICAgICAgIGNiID0gQ2FsbEJhY2soY2FsbGJhY2spCisgICAgICAgIGYoMioqMTgsIGNiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIGV4cGVjdGVkKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3Moc2VsZik6CisgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX2NhbGxiYWNrX2lfaWYKKyAgICAgICAgZi5yZXN0eXBlID0gY19pbnQKKyAgICAgICAgZi5hcmd0eXBlcyA9IE5vbmUKKworICAgICAgICBNeUNhbGxiYWNrID0gQ0ZVTkNUWVBFKGNfaW50LCBjX2ludCkKKworICAgICAgICBkZWYgY2FsbGJhY2sodmFsdWUpOgorICAgICAgICAgICAgI3ByaW50ICJjYWxsZWQgYmFjayB3aXRoIiwgdmFsdWUKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgICAgIGNiID0gTXlDYWxsYmFjayhjYWxsYmFjaykKKyAgICAgICAgcmVzdWx0ID0gZigtMTAsIGNiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTE4KQorCisgICAgICAgICMgdGVzdCB3aXRoIHByb3RvdHlwZQorICAgICAgICBmLmFyZ3R5cGVzID0gW2NfaW50LCBNeUNhbGxiYWNrXQorICAgICAgICBjYiA9IE15Q2FsbGJhY2soY2FsbGJhY2spCisgICAgICAgIHJlc3VsdCA9IGYoLTEwLCBjYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIC0xOCkKKworICAgICAgICBBbm90aGVyQ2FsbGJhY2sgPSBXSU5GVU5DVFlQRShjX2ludCwgY19pbnQsIGNfaW50LCBjX2ludCwgY19pbnQpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBwcm90b3R5cGUgd29ya3M6IHdlIGNhbGwgZiB3aXRoIHdyb25nCisgICAgICAgICMgYXJndW1lbnQgdHlwZXMKKyAgICAgICAgY2IgPSBBbm90aGVyQ2FsbGJhY2soY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50RXJyb3IsIGYsIC0xMCwgY2IpCisKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrc18yKHNlbGYpOgorICAgICAgICAjIENhbiBhbHNvIHVzZSBzaW1wbGUgZGF0YXR5cGVzIGFzIGFyZ3VtZW50IHR5cGUgc3BlY2lmaWVycworICAgICAgICAjIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisgICAgICAgICMgSW4gdGhpcyBjYXNlIHRoZSBjYWxsIHJlY2VpdmVzIGFuIGluc3RhbmNlIG9mIHRoYXQgdHlwZQorICAgICAgICBmID0gZGxsLl90ZXN0ZnVuY19jYWxsYmFja19pX2lmCisgICAgICAgIGYucmVzdHlwZSA9IGNfaW50CisKKyAgICAgICAgTXlDYWxsYmFjayA9IENGVU5DVFlQRShjX2ludCwgY19pbnQpCisKKyAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2ludCwgTXlDYWxsYmFja10KKworICAgICAgICBkZWYgY2FsbGJhY2sodmFsdWUpOgorICAgICAgICAgICAgI3ByaW50ICJjYWxsZWQgYmFjayB3aXRoIiwgdmFsdWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2YWx1ZSksIGludCkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgICAgIGNiID0gTXlDYWxsYmFjayhjYWxsYmFjaykKKyAgICAgICAgcmVzdWx0ID0gZigtMTAsIGNiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTE4KQorCisgICAgZGVmIHRlc3RfbG9uZ2xvbmdfY2FsbGJhY2tzKHNlbGYpOgorCisgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX2NhbGxiYWNrX3FfcWYKKyAgICAgICAgZi5yZXN0eXBlID0gY19sb25nbG9uZworCisgICAgICAgIE15Q2FsbGJhY2sgPSBDRlVOQ1RZUEUoY19sb25nbG9uZywgY19sb25nbG9uZykKKworICAgICAgICBmLmFyZ3R5cGVzID0gW2NfbG9uZ2xvbmcsIE15Q2FsbGJhY2tdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKHZhbHVlKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHZhbHVlLCAoaW50LCBsb25nKSkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUgJiAweDdGRkZGRkZGCisKKyAgICAgICAgY2IgPSBNeUNhbGxiYWNrKGNhbGxiYWNrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTM1Nzc2MjU1ODcsIGYoMTAwMDAwMDAwMDAwMCwgY2IpKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgZGxsLCAiX3h4eF95eXkiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjX2ludC5pbl9kbGwsIGRsbCwgIl94eHhfeXl5IikKKworICAgIGRlZiB0ZXN0X2J5dmFsKHNlbGYpOgorCisgICAgICAgICMgd2l0aG91dCBwcm90b3R5cGUKKyAgICAgICAgcHRpbiA9IFBPSU5UKDEsIDIpCisgICAgICAgIHB0b3V0ID0gUE9JTlQoKQorICAgICAgICAjIEVYUE9SVCBpbnQgX3Rlc3RmdW5jX2J5dmFsKHBvaW50IGluLCBwb2ludCAqcG91dCkKKyAgICAgICAgcmVzdWx0ID0gZGxsLl90ZXN0ZnVuY19ieXZhbChwdGluLCBieXJlZihwdG91dCkpCisgICAgICAgIGdvdCA9IHJlc3VsdCwgcHRvdXQueCwgcHRvdXQueQorICAgICAgICBleHBlY3RlZCA9IDMsIDEsIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQorCisgICAgICAgICMgd2l0aCBwcm90b3R5cGUKKyAgICAgICAgcHRpbiA9IFBPSU5UKDEwMSwgMTAyKQorICAgICAgICBwdG91dCA9IFBPSU5UKCkKKyAgICAgICAgZGxsLl90ZXN0ZnVuY19ieXZhbC5hcmd0eXBlcyA9IChQT0lOVCwgUE9JTlRFUihQT0lOVCkpCisgICAgICAgIGRsbC5fdGVzdGZ1bmNfYnl2YWwucmVzdHlwZSA9IGNfaW50CisgICAgICAgIHJlc3VsdCA9IGRsbC5fdGVzdGZ1bmNfYnl2YWwocHRpbiwgYnlyZWYocHRvdXQpKQorICAgICAgICBnb3QgPSByZXN1bHQsIHB0b3V0LngsIHB0b3V0LnkKKyAgICAgICAgZXhwZWN0ZWQgPSAyMDMsIDEwMSwgMTAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3N0cnVjdF9yZXR1cm5fMkgoc2VsZik6CisgICAgICAgIGNsYXNzIFMySChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19zaG9ydCksCisgICAgICAgICAgICAgICAgICAgICAgICAoInkiLCBjX3Nob3J0KV0KKyAgICAgICAgZGxsLnJldF8yaF9mdW5jLnJlc3R5cGUgPSBTMkgKKyAgICAgICAgZGxsLnJldF8yaF9mdW5jLmFyZ3R5cGVzID0gW1MySF0KKyAgICAgICAgaW5wID0gUzJIKDk5LCA4OCkKKyAgICAgICAgczJoID0gZGxsLnJldF8yaF9mdW5jKGlucCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoczJoLngsIHMyaC55KSwgKDk5KjIsIDg4KjMpKQorCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgIGRlZiB0ZXN0X3N0cnVjdF9yZXR1cm5fMkhfc3RkY2FsbChzZWxmKToKKyAgICAgICAgICAgIGNsYXNzIFMySChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfc2hvcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgieSIsIGNfc2hvcnQpXQorCisgICAgICAgICAgICB3aW5kbGwuc19yZXRfMmhfZnVuYy5yZXN0eXBlID0gUzJICisgICAgICAgICAgICB3aW5kbGwuc19yZXRfMmhfZnVuYy5hcmd0eXBlcyA9IFtTMkhdCisgICAgICAgICAgICBzMmggPSB3aW5kbGwuc19yZXRfMmhfZnVuYyhTMkgoOTksIDg4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHMyaC54LCBzMmgueSksICg5OSoyLCA4OCozKSkKKworICAgICMgVGhpcyBpcyBrbm93biBjZGVjbCBpbmNvbXBhdGliaWxpdHkgYmV0d2VlbiBHQ0MKKyAgICAjIGFuZCBNU1ZDLiBJdCBpcyBhZGRyZXNzZWQgaW4gR0NDIGlzc3VlICMzNjgzNC4KKyAgICAjIFB5dGhvbiBsaWJmZmkgZGV0ZWN0IGl0IGFuZCBjb21wbGFpbi4KKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiIGFuZCBzeXMudmVyc2lvbi5maW5kKCJHQ0MiKSA+PSAwLCAnWEZBSUwgR0NDKG1pbmd3KScpCisgICAgZGVmIHRlc3Rfc3RydWN0X3JldHVybl84SChzZWxmKToKKyAgICAgICAgY2xhc3MgUzhJKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImMiLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImQiLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImUiLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImYiLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImciLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImgiLCBjX2ludCldCisgICAgICAgIGRsbC5yZXRfOGlfZnVuYy5yZXN0eXBlID0gUzhJCisgICAgICAgIGRsbC5yZXRfOGlfZnVuYy5hcmd0eXBlcyA9IFtTOEldCisgICAgICAgIGlucCA9IFM4SSg5LCA4LCA3LCA2LCA1LCA0LCAzLCAyKQorICAgICAgICBzOGkgPSBkbGwucmV0XzhpX2Z1bmMoaW5wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzOGkuYSwgczhpLmIsIHM4aS5jLCBzOGkuZCwgczhpLmUsIHM4aS5mLCBzOGkuZywgczhpLmgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOSoyLCA4KjMsIDcqNCwgNio1LCA1KjYsIDQqNywgMyo4LCAyKjkpKQorCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgIGRlZiB0ZXN0X3N0cnVjdF9yZXR1cm5fOEhfc3RkY2FsbChzZWxmKToKKyAgICAgICAgICAgIGNsYXNzIFM4SShTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZCIsIGNfaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImUiLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJmIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZyIsIGNfaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImgiLCBjX2ludCldCisgICAgICAgICAgICB3aW5kbGwuc19yZXRfOGlfZnVuYy5yZXN0eXBlID0gUzhJCisgICAgICAgICAgICB3aW5kbGwuc19yZXRfOGlfZnVuYy5hcmd0eXBlcyA9IFtTOEldCisgICAgICAgICAgICBpbnAgPSBTOEkoOSwgOCwgNywgNiwgNSwgNCwgMywgMikKKyAgICAgICAgICAgIHM4aSA9IHdpbmRsbC5zX3JldF84aV9mdW5jKGlucCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHM4aS5hLCBzOGkuYiwgczhpLmMsIHM4aS5kLCBzOGkuZSwgczhpLmYsIHM4aS5nLCBzOGkuaCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOSoyLCA4KjMsIDcqNCwgNio1LCA1KjYsIDQqNywgMyo4LCAyKjkpKQorCisgICAgZGVmIHRlc3Rfc2YxNjUxMjM1KHNlbGYpOgorICAgICAgICAjIHNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2YvMTY1MTIzNQorCisgICAgICAgIHByb3RvID0gQ0ZVTkNUWVBFKGNfaW50LCBSRUNULCBQT0lOVCkKKyAgICAgICAgZGVmIGNhbGxiYWNrKCphcmdzKToKKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgY2FsbGJhY2sgPSBwcm90byhjYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRFcnJvciwgbGFtYmRhOiBjYWxsYmFjaygoMSwgMiwgMywgNCksIFBPSU5UKCkpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2luY29tcGxldGUucHkgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfaW5jb21wbGV0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTAzZTlmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2luY29tcGxldGUucHkKQEAgLTAsMCArMSw0MiBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIGN0eXBlcyBpbXBvcnQgKgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoZSBpbmNvbXBsZXRlIHBvaW50ZXIgZXhhbXBsZSBmcm9tIHRoZSB0dXRvcmlhbAorIworCitjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2luY29tcGxldGVfZXhhbXBsZShzZWxmKToKKyAgICAgICAgbHBjZWxsID0gUE9JTlRFUigiY2VsbCIpCisgICAgICAgIGNsYXNzIGNlbGwoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygibmFtZSIsIGNfY2hhcl9wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgibmV4dCIsIGxwY2VsbCldCisKKyAgICAgICAgU2V0UG9pbnRlclR5cGUobHBjZWxsLCBjZWxsKQorCisgICAgICAgIGMxID0gY2VsbCgpCisgICAgICAgIGMxLm5hbWUgPSAiZm9vIgorICAgICAgICBjMiA9IGNlbGwoKQorICAgICAgICBjMi5uYW1lID0gImJhciIKKworICAgICAgICBjMS5uZXh0ID0gcG9pbnRlcihjMikKKyAgICAgICAgYzIubmV4dCA9IHBvaW50ZXIoYzEpCisKKyAgICAgICAgcCA9IGMxCisKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoOCk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHAubmFtZSkKKyAgICAgICAgICAgIHAgPSBwLm5leHRbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFsiZm9vIiwgImJhciJdICogNCkKKworICAgICAgICAjIHRvIG5vdCBsZWFrIHJlZmVyZW5jZXMsIHdlIG11c3QgY2xlYW4gX3BvaW50ZXJfdHlwZV9jYWNoZQorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgX3BvaW50ZXJfdHlwZV9jYWNoZQorICAgICAgICBkZWwgX3BvaW50ZXJfdHlwZV9jYWNoZVtjZWxsXQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfaW5pdC5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9pbml0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYmQxZjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfaW5pdC5weQpAQCAtMCwwICsxLDQwIEBACitmcm9tIGN0eXBlcyBpbXBvcnQgKgoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFgoU3RydWN0dXJlKToKKyAgICBfZmllbGRzXyA9IFsoImEiLCBjX2ludCksCisgICAgICAgICAgICAgICAgKCJiIiwgY19pbnQpXQorICAgIG5ld193YXNfY2FsbGVkID0gRmFsc2UKKworICAgIGRlZiBfX25ld19fKGNscyk6CisgICAgICAgIHJlc3VsdCA9IHN1cGVyKFgsIGNscykuX19uZXdfXyhjbHMpCisgICAgICAgIHJlc3VsdC5uZXdfd2FzX2NhbGxlZCA9IFRydWUKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmEgPSA5CisgICAgICAgIHNlbGYuYiA9IDEyCisKK2NsYXNzIFkoU3RydWN0dXJlKToKKyAgICBfZmllbGRzXyA9IFsoIngiLCBYKV0KKworCitjbGFzcyBJbml0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgb25seSBhY2Nlc3NpbmcgYSBuZXN0ZWQgc3RydWN0dXJlCisgICAgICAgICMgZG9lc24ndCBjYWxsIHRoZSBzdHJ1Y3R1cmUncyBfX25ld19fIGFuZCBfX2luaXRfXworICAgICAgICB5ID0gWSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHkueC5hLCB5LnguYiksICgwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LngubmV3X3dhc19jYWxsZWQsIEZhbHNlKQorCisgICAgICAgICMgQnV0IGV4cGxpY2l0bHkgY3JlYXRpbmcgYW4gWCBzdHJ1Y3R1cmUgY2FsbHMgX19uZXdfXyBhbmQgX19pbml0X18sIG9mIGNvdXJzZS4KKyAgICAgICAgeCA9IFgoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh4LmEsIHguYiksICg5LCAxMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5uZXdfd2FzX2NhbGxlZCwgVHJ1ZSkKKworICAgICAgICB5LnggPSB4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHkueC5hLCB5LnguYiksICg5LCAxMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS54Lm5ld193YXNfY2FsbGVkLCBGYWxzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlZ2Vycy5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlZ2Vycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjY0NTNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2ludGVnZXJzLnB5CkBAIC0wLDAgKzEsNSBAQAorIyBzdXBlcnNlZWRlZCBieSB0ZXN0X251bWJlcnMucHkKK2ltcG9ydCB1bml0dGVzdAorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU1YjFmZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkKQEAgLTAsMCArMSwxMDMgQEAKKyMgVGhpcyB0ZXN0cyB0aGUgaW50ZXJuYWwgX29iamVjdHMgYXR0cmlidXRlCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIHN5cyBpbXBvcnQgZ2V0cmVmY291bnQgYXMgZ3JjCisKKyMgWFhYIFRoaXMgdGVzdCBtdXN0IGJlIHJldmlld2VkIGZvciBjb3JyZWN0bmVzcyEhIQorCisiIiIKK2N0eXBlcycgdHlwZXMgYXJlIGNvbnRhaW5lciB0eXBlcy4KKworVGhleSBoYXZlIGFuIGludGVybmFsIG1lbW9yeSBibG9jaywgd2hpY2ggb25seSBjb25zaXN0cyBvZiBzb21lIGJ5dGVzLAorYnV0IGl0IGhhcyB0byBrZWVwIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cyBhcyB3ZWxsLiBUaGlzIGlzIG5vdAorcmVhbGx5IG5lZWRlZCBmb3IgdHJpdmlhbCBDIHR5cGVzIGxpa2UgaW50IG9yIGNoYXIsIGJ1dCBpdCBpcyBpbXBvcnRhbnQKK2ZvciBhZ2dyZWdhdGUgdHlwZXMgbGlrZSBzdHJpbmdzIG9yIHBvaW50ZXJzIGluIHBhcnRpY3VsYXIuCisKK1doYXQgYWJvdXQgcG9pbnRlcnM/CisKKyIiIgorCitjbGFzcyBPYmplY3RzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBhc3NlcnRTYW1lKHNlbGYsIGEsIGIpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKGEpLCBpZChiKSkKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgIGkgPSA0MjAwMDEyMworICAgICAgICByZWZjbnQgPSBncmMoaSkKKyAgICAgICAgY2kgPSBjX2ludChpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZmNudCwgZ3JjKGkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNpLl9vYmplY3RzLCBOb25lKQorCisgICAgZGVmIHRlc3RfY19jaGFyX3Aoc2VsZik6CisgICAgICAgIHMgPSAiSGVsbG8sIFdvcmxkIgorICAgICAgICByZWZjbnQgPSBncmMocykKKyAgICAgICAgY3MgPSBjX2NoYXJfcChzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZmNudCArIDEsIGdyYyhzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRTYW1lKGNzLl9vYmplY3RzLCBzKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX3N0cnVjdChzZWxmKToKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19pbnQpLCAoImIiLCBjX2ludCldCisKKyAgICAgICAgYSA9IDQyMTIzNAorICAgICAgICBiID0gNDIxMjM1CisgICAgICAgIHggPSBYKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCBOb25lKQorICAgICAgICB4LmEgPSBhCisgICAgICAgIHguYiA9IGIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCBOb25lKQorCisgICAgZGVmIHRlc3RfZW1iZWRkZWRfc3RydWN0cyhzZWxmKToKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19pbnQpLCAoImIiLCBjX2ludCldCisKKyAgICAgICAgY2xhc3MgWShTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgWCksICgieSIsIFgpXQorCisgICAgICAgIHkgPSBZKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9vYmplY3RzLCBOb25lKQorCisgICAgICAgIHgxLCB4MiA9IFgoKSwgWCgpCisgICAgICAgIHkueCwgeS55ID0geDEsIHgyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fb2JqZWN0cywgeyIwIjoge30sICIxIjoge319KQorICAgICAgICB4MS5hLCB4Mi5iID0gNDIsIDkzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fb2JqZWN0cywgeyIwIjoge30sICIxIjoge319KQorCisgICAgZGVmIHRlc3RfeHh4KHNlbGYpOgorICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX2NoYXJfcCksICgiYiIsIGNfY2hhcl9wKV0KKworICAgICAgICBjbGFzcyBZKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBYKSwgKCJ5IiwgWCldCisKKyAgICAgICAgczEgPSAiSGVsbG8sIFdvcmxkIgorICAgICAgICBzMiA9ICJIYWxsbywgV2VsdCIKKworICAgICAgICB4ID0gWCgpCisgICAgICAgIHguYSA9IHMxCisgICAgICAgIHguYiA9IHMyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgeyIwIjogczEsICIxIjogczJ9KQorCisgICAgICAgIHkgPSBZKCkKKyAgICAgICAgeS54ID0geAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX29iamVjdHMsIHsiMCI6IHsiMCI6IHMxLCAiMSI6IHMyfX0pCisjIyAgICAgICAgeCA9IHkueAorIyMgICAgICAgIGRlbCB5CisjIyAgICAgICAgcHJpbnQgeC5fYl9iYXNlXy5fb2JqZWN0cworCisgICAgZGVmIHRlc3RfcHRyX3N0cnVjdChzZWxmKToKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJkYXRhIiwgUE9JTlRFUihjX2ludCkpXQorCisgICAgICAgIEEgPSBjX2ludCo0CisgICAgICAgIGEgPSBBKDExLCAyMiwgMzMsIDQ0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX29iamVjdHMsIE5vbmUpCisKKyAgICAgICAgeCA9IFgoKQorICAgICAgICB4LmRhdGEgPSBhCisjI1hYWCAgICAgICAgcHJpbnQgeC5fb2JqZWN0cworIyNYWFggICAgICAgIHByaW50IHguZGF0YVswXQorIyNYWFggICAgICAgIHByaW50IHguZGF0YS5fb2JqZWN0cworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2tlZXByZWZzLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2tlZXByZWZzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MDRjMGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3Rfa2VlcHJlZnMucHkKQEAgLTAsMCArMSwxNTIgQEAKK2Zyb20gY3R5cGVzIGltcG9ydCAqCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgU2ltcGxlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2NpbnQoc2VsZik6CisgICAgICAgIHggPSBjX2ludCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgeC52YWx1ZSA9IDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgeCA9IGNfaW50KDk5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX29iamVjdHMsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jY2hhcnAoc2VsZik6CisgICAgICAgIHggPSBjX2NoYXJfcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgeC52YWx1ZSA9ICJhYmMiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgImFiYyIpCisgICAgICAgIHggPSBjX2NoYXJfcCgic3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgInNwYW0iKQorCitjbGFzcyBTdHJ1Y3R1cmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY2ludF9zdHJ1Y3Qoc2VsZik6CisgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfaW50KV0KKworICAgICAgICB4ID0gWCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgeC5hID0gNDIKKyAgICAgICAgeC5iID0gOTkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCBOb25lKQorCisgICAgZGVmIHRlc3RfY2NoYXJwX3N0cnVjdChzZWxmKToKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19jaGFyX3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19jaGFyX3ApXQorICAgICAgICB4ID0gWCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKKworICAgICAgICB4LmEgPSAic3BhbSIKKyAgICAgICAgeC5iID0gImZvbyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCB7IjAiOiAic3BhbSIsICIxIjogImZvbyJ9KQorCisgICAgZGVmIHRlc3Rfc3RydWN0X3N0cnVjdChzZWxmKToKKyAgICAgICAgY2xhc3MgUE9JTlQoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfaW50KSwgKCJ5IiwgY19pbnQpXQorICAgICAgICBjbGFzcyBSRUNUKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoInVsIiwgUE9JTlQpLCAoImxyIiwgUE9JTlQpXQorCisgICAgICAgIHIgPSBSRUNUKCkKKyAgICAgICAgci51bC54ID0gMAorICAgICAgICByLnVsLnkgPSAxCisgICAgICAgIHIubHIueCA9IDIKKyAgICAgICAgci5sci55ID0gMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuX29iamVjdHMsIE5vbmUpCisKKyAgICAgICAgciA9IFJFQ1QoKQorICAgICAgICBwdCA9IFBPSU5UKDEsIDIpCisgICAgICAgIHIudWwgPSBwdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuX29iamVjdHMsIHsnMCc6IHt9fSkKKyAgICAgICAgci51bC54ID0gMjIKKyAgICAgICAgci51bC55ID0gNDQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLl9vYmplY3RzLCB7JzAnOiB7fX0pCisgICAgICAgIHIubHIgPSBQT0lOVCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5fb2JqZWN0cywgeycwJzoge30sICcxJzoge319KQorCitjbGFzcyBBcnJheVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jaW50X2FycmF5KHNlbGYpOgorICAgICAgICBJTlRBUlIgPSBjX2ludCAqIDMKKworICAgICAgICBpYSA9IElOVEFSUigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWEuX29iamVjdHMsIE5vbmUpCisgICAgICAgIGlhWzBdID0gMQorICAgICAgICBpYVsxXSA9IDIKKyAgICAgICAgaWFbMl0gPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWEuX29iamVjdHMsIE5vbmUpCisKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJhIiwgSU5UQVJSKV0KKworICAgICAgICB4ID0gWCgpCisgICAgICAgIHgueCA9IDEwMDAKKyAgICAgICAgeC5hWzBdID0gNDIKKyAgICAgICAgeC5hWzFdID0gOTYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCBOb25lKQorICAgICAgICB4LmEgPSBpYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX29iamVjdHMsIHsnMSc6IHt9fSkKKworY2xhc3MgUG9pbnRlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9wX2NpbnQoc2VsZik6CisgICAgICAgIGkgPSBjX2ludCg0MikKKyAgICAgICAgeCA9IHBvaW50ZXIoaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCB7JzEnOiBpfSkKKworY2xhc3MgRGVsZXRlUG9pbnRlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgWF90ZXN0KHNlbGYpOgorICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoInAiLCBQT0lOVEVSKGNfY2hhcl9wKSldCisgICAgICAgIHggPSBYKCkKKyAgICAgICAgaSA9IGNfY2hhcl9wKCJhYmMgZGVmIikKKyAgICAgICAgZnJvbSBzeXMgaW1wb3J0IGdldHJlZmNvdW50IGFzIGdyYworICAgICAgICBwcmludCAiMj8iLCBncmMoaSkKKyAgICAgICAgeC5wID0gcG9pbnRlcihpKQorICAgICAgICBwcmludCAiMz8iLCBncmMoaSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMzIwKToKKyAgICAgICAgICAgIGNfaW50KDk5KQorICAgICAgICAgICAgeC5wWzBdCisgICAgICAgIHByaW50IHgucFswXQorIyMgICAgICAgIGRlbCB4CisjIyAgICAgICAgcHJpbnQgIjI/IiwgZ3JjKGkpCisjIyAgICAgICAgZGVsIGkKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgzMjApOgorICAgICAgICAgICAgY19pbnQoOTkpCisgICAgICAgICAgICB4LnBbMF0KKyAgICAgICAgcHJpbnQgeC5wWzBdCisgICAgICAgIHByaW50IHgucC5jb250ZW50cworIyMgICAgICAgIHByaW50IHguX29iamVjdHMKKworICAgICAgICB4LnBbMF0gPSAic3BhbSBzcGFtIgorIyMgICAgICAgIHByaW50IHgucFswXQorICAgICAgICBwcmludCAiKyIgKiA0MgorICAgICAgICBwcmludCB4Ll9vYmplY3RzCisKK2NsYXNzIFBvaW50ZXJUb1N0cnVjdHVyZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIGNsYXNzIFBPSU5UKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBjX2ludCksICgieSIsIGNfaW50KV0KKyAgICAgICAgY2xhc3MgUkVDVChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgUE9JTlRFUihQT0lOVCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgUE9JTlRFUihQT0lOVCkpXQorICAgICAgICByID0gUkVDVCgpCisgICAgICAgIHAxID0gUE9JTlQoMSwgMikKKworICAgICAgICByLmEgPSBwb2ludGVyKHAxKQorICAgICAgICByLmIgPSBwb2ludGVyKHAxKQorIyMgICAgICAgIGZyb20gcHByaW50IGltcG9ydCBwcHJpbnQgYXMgcHAKKyMjICAgICAgICBwcChwMS5fb2JqZWN0cykKKyMjICAgICAgICBwcChyLl9vYmplY3RzKQorCisgICAgICAgIHIuYVswXS54ID0gNDIKKyAgICAgICAgci5hWzBdLnkgPSA5OQorCisgICAgICAgICMgdG8gYXZvaWQgbGVha2luZyB3aGVuIHRlc3RzIGFyZSBydW4gc2V2ZXJhbCB0aW1lcworICAgICAgICAjIGNsZWFuIHVwIHRoZSB0eXBlcyBsZWZ0IGluIHRoZSBjYWNoZS4KKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IF9wb2ludGVyX3R5cGVfY2FjaGUKKyAgICAgICAgZGVsIF9wb2ludGVyX3R5cGVfY2FjaGVbUE9JTlRdCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfbGliYy5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9saWJjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYzQ2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfbGliYy5weQpAQCAtMCwwICsxLDI5IEBACitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2ltcG9ydCBfY3R5cGVzX3Rlc3QKKworbGliID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisKK2NsYXNzIExpYlRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3NxcnQoc2VsZik6CisgICAgICAgIGxpYi5teV9zcXJ0LmFyZ3R5cGVzID0gY19kb3VibGUsCisgICAgICAgIGxpYi5teV9zcXJ0LnJlc3R5cGUgPSBjX2RvdWJsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpYi5teV9zcXJ0KDQuMCksIDIuMCkKKyAgICAgICAgaW1wb3J0IG1hdGgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaWIubXlfc3FydCgyLjApLCBtYXRoLnNxcnQoMi4wKSkKKworICAgIGRlZiB0ZXN0X3Fzb3J0KHNlbGYpOgorICAgICAgICBjb21wYXJlZnVuYyA9IENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihjX2NoYXIpLCBQT0lOVEVSKGNfY2hhcikpCisgICAgICAgIGxpYi5teV9xc29ydC5hcmd0eXBlcyA9IGNfdm9pZF9wLCBjX3NpemVfdCwgY19zaXplX3QsIGNvbXBhcmVmdW5jCisgICAgICAgIGxpYi5teV9xc29ydC5yZXN0eXBlID0gTm9uZQorCisgICAgICAgIGRlZiBzb3J0KGEsIGIpOgorICAgICAgICAgICAgcmV0dXJuIGNtcChhWzBdLCBiWzBdKQorCisgICAgICAgIGNoYXJzID0gY3JlYXRlX3N0cmluZ19idWZmZXIoInNwYW0sIHNwYW0sIGFuZCBzcGFtIikKKyAgICAgICAgbGliLm15X3Fzb3J0KGNoYXJzLCBsZW4oY2hhcnMpLTEsIHNpemVvZihjX2NoYXIpLCBjb21wYXJlZnVuYyhzb3J0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGFycy5yYXcsICIgICAsLGFhYWFkbW1tbnBwcHNzc1x4MDAiKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2xvYWRpbmcucHkgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfbG9hZGluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjY4M2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X2xvYWRpbmcucHkKQEAgLTAsMCArMSwxMDYgQEAKK2Zyb20gY3R5cGVzIGltcG9ydCAqCitpbXBvcnQgc3lzLCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIGN0eXBlcy51dGlsIGltcG9ydCBmaW5kX2xpYnJhcnkKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IGlzX3Jlc291cmNlX2VuYWJsZWQKKworbGliY19uYW1lID0gTm9uZQoraWYgb3MubmFtZSA9PSAibnQiOgorICAgIGxpYmNfbmFtZSA9IGZpbmRfbGlicmFyeSgiYyIpCitlbGlmIG9zLm5hbWUgPT0gImNlIjoKKyAgICBsaWJjX25hbWUgPSAiY29yZWRsbCIKK2VsaWYgc3lzLnBsYXRmb3JtID09ICJjeWd3aW4iOgorICAgIGxpYmNfbmFtZSA9ICJjeWd3aW4xLmRsbCIKK2Vsc2U6CisgICAgbGliY19uYW1lID0gZmluZF9saWJyYXJ5KCJjIikKKworaWYgaXNfcmVzb3VyY2VfZW5hYmxlZCgicHJpbnRpbmciKToKKyAgICBwcmludCAibGliY19uYW1lIGlzIiwgbGliY19uYW1lCisKK2NsYXNzIExvYWRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgdW5rbm93bmRsbCA9ICJ4eHJhbmRvbW5hbWV4eCIKKworICAgIGlmIGxpYmNfbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgZGVmIHRlc3RfbG9hZChzZWxmKToKKyAgICAgICAgICAgIENETEwobGliY19uYW1lKQorICAgICAgICAgICAgQ0RMTChvcy5wYXRoLmJhc2VuYW1lKGxpYmNfbmFtZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBDRExMLCBzZWxmLnVua25vd25kbGwpCisKKyAgICBpZiBsaWJjX25hbWUgaXMgbm90IE5vbmUgYW5kIG9zLnBhdGguYmFzZW5hbWUobGliY19uYW1lKSA9PSAibGliYy5zby42IjoKKyAgICAgICAgZGVmIHRlc3RfbG9hZF92ZXJzaW9uKHNlbGYpOgorICAgICAgICAgICAgY2RsbC5Mb2FkTGlicmFyeSgibGliYy5zby42IikKKyAgICAgICAgICAgICMgbGludXggdXNlcyB2ZXJzaW9uLCBsaWJjIDkgc2hvdWxkIG5vdCBleGlzdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY2RsbC5Mb2FkTGlicmFyeSwgImxpYmMuc28uOSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBjZGxsLkxvYWRMaWJyYXJ5LCBzZWxmLnVua25vd25kbGwpCisKKyAgICBkZWYgdGVzdF9maW5kKHNlbGYpOgorICAgICAgICBmb3IgbmFtZSBpbiAoImMiLCAibSIpOgorICAgICAgICAgICAgbGliID0gZmluZF9saWJyYXJ5KG5hbWUpCisgICAgICAgICAgICBpZiBsaWI6CisgICAgICAgICAgICAgICAgY2RsbC5Mb2FkTGlicmFyeShsaWIpCisgICAgICAgICAgICAgICAgQ0RMTChsaWIpCisKKyAgICBpZiBvcy5uYW1lIGluICgibnQiLCAiY2UiKToKKyAgICAgICAgZGVmIHRlc3RfbG9hZF9saWJyYXJ5KHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsaWJjX25hbWUgaXMgTm9uZSkKKyAgICAgICAgICAgIGlmIGlzX3Jlc291cmNlX2VuYWJsZWQoInByaW50aW5nIik6CisgICAgICAgICAgICAgICAgcHJpbnQgZmluZF9saWJyYXJ5KCJrZXJuZWwzMiIpCisgICAgICAgICAgICAgICAgcHJpbnQgZmluZF9saWJyYXJ5KCJ1c2VyMzIiKQorCisgICAgICAgICAgICBpZiBvcy5uYW1lID09ICJudCI6CisgICAgICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgICAgICB3aW5kbGxbImtlcm5lbDMyIl0uR2V0TW9kdWxlSGFuZGxlVworICAgICAgICAgICAgICAgIHdpbmRsbC5Mb2FkTGlicmFyeSgia2VybmVsMzIiKS5HZXRNb2R1bGVIYW5kbGVXCisgICAgICAgICAgICAgICAgV2luRExMKCJrZXJuZWwzMiIpLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgIGVsaWYgb3MubmFtZSA9PSAiY2UiOgorICAgICAgICAgICAgICAgIHdpbmRsbC5jb3JlZGxsLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgICAgICB3aW5kbGxbImNvcmVkbGwiXS5HZXRNb2R1bGVIYW5kbGVXCisgICAgICAgICAgICAgICAgd2luZGxsLkxvYWRMaWJyYXJ5KCJjb3JlZGxsIikuR2V0TW9kdWxlSGFuZGxlVworICAgICAgICAgICAgICAgIFdpbkRMTCgiY29yZWRsbCIpLkdldE1vZHVsZUhhbmRsZVcKKworICAgICAgICBkZWYgdGVzdF9sb2FkX29yZGluYWxfZnVuY3Rpb25zKHNlbGYpOgorICAgICAgICAgICAgaW1wb3J0IF9jdHlwZXNfdGVzdAorICAgICAgICAgICAgZGxsID0gV2luRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKyAgICAgICAgICAgICMgV2UgbG9hZCB0aGUgc2FtZSBmdW5jdGlvbiBib3RoIHZpYSBvcmRpbmFsIGFuZCBuYW1lCisgICAgICAgICAgICBmdW5jX29yZCA9IGRsbFsyXQorICAgICAgICAgICAgZnVuY19uYW1lID0gZGxsLkdldFN0cmluZworICAgICAgICAgICAgIyBhZGRyZXNzb2YgZ2V0cyB0aGUgYWRkcmVzcyB3aGVyZSB0aGUgZnVuY3Rpb24gcG9pbnRlciBpcyBzdG9yZWQKKyAgICAgICAgICAgIGFfb3JkID0gYWRkcmVzc29mKGZ1bmNfb3JkKQorICAgICAgICAgICAgYV9uYW1lID0gYWRkcmVzc29mKGZ1bmNfbmFtZSkKKyAgICAgICAgICAgIGZfb3JkX2FkZHIgPSBjX3ZvaWRfcC5mcm9tX2FkZHJlc3MoYV9vcmQpLnZhbHVlCisgICAgICAgICAgICBmX25hbWVfYWRkciA9IGNfdm9pZF9wLmZyb21fYWRkcmVzcyhhX25hbWUpLnZhbHVlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleChmX29yZF9hZGRyKSwgaGV4KGZfbmFtZV9hZGRyKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGRsbC5fX2dldGl0ZW1fXywgMTIzNCkKKworICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKKyAgICAgICAgZGVmIHRlc3RfMTcwMzI4Nl9BKHNlbGYpOgorICAgICAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBMb2FkTGlicmFyeSwgRnJlZUxpYnJhcnkKKyAgICAgICAgICAgICMgT24gd2luWFAgNjQtYml0LCBhZHZhcGkzMiBsb2FkcyBhdCBhbiBhZGRyZXNzIHRoYXQgZG9lcworICAgICAgICAgICAgIyBOT1QgZml0IGludG8gYSAzMi1iaXQgaW50ZWdlci4gIEZyZWVMaWJyYXJ5IG11c3QgYmUgYWJsZQorICAgICAgICAgICAgIyB0byBhY2NlcHQgdGhpcyBhZGRyZXNzLgorCisgICAgICAgICAgICAjIFRoZXNlIGFyZSB0ZXN0cyBmb3IgaHR0cDovL3d3dy5weXRob24ub3JnL3NmLzE3MDMyODYKKyAgICAgICAgICAgIGhhbmRsZSA9IExvYWRMaWJyYXJ5KCJhZHZhcGkzMiIpCisgICAgICAgICAgICBGcmVlTGlicmFyeShoYW5kbGUpCisKKyAgICAgICAgZGVmIHRlc3RfMTcwMzI4Nl9CKHNlbGYpOgorICAgICAgICAgICAgIyBTaW5jZSBvbiB3aW5YUCA2NC1iaXQgYWR2YXBpMzIgbG9hZHMgbGlrZSBkZXNjcmliZWQKKyAgICAgICAgICAgICMgYWJvdmUsIHRoZSAoYXJiaXRyYXJpbHkgc2VsZWN0ZWQpIENsb3NlRXZlbnRMb2cgZnVuY3Rpb24KKyAgICAgICAgICAgICMgYWxzbyBoYXMgYSBoaWdoIGFkZHJlc3MuICAnY2FsbF9mdW5jdGlvbicgc2hvdWxkIGFjY2VwdAorICAgICAgICAgICAgIyBhZGRyZXNzZXMgc28gbGFyZ2UuCisgICAgICAgICAgICBmcm9tIF9jdHlwZXMgaW1wb3J0IGNhbGxfZnVuY3Rpb24KKyAgICAgICAgICAgIGFkdmFwaTMyID0gd2luZGxsLmFkdmFwaTMyCisgICAgICAgICAgICAjIENhbGxpbmcgQ2xvc2VFdmVudExvZyB3aXRoIGEgTlVMTCBhcmd1bWVudCBzaG91bGQgZmFpbCwKKyAgICAgICAgICAgICMgYnV0IHRoZSBjYWxsIHNob3VsZCBub3Qgc2VnZmF1bHQgb3Igc28uCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGFkdmFwaTMyLkNsb3NlRXZlbnRMb2coTm9uZSkpCisgICAgICAgICAgICB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MuYXJndHlwZXMgPSBjX3ZvaWRfcCwgY19jaGFyX3AKKyAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5yZXN0eXBlID0gY192b2lkX3AKKyAgICAgICAgICAgIHByb2MgPSB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MoYWR2YXBpMzIuX2hhbmRsZSwgIkNsb3NlRXZlbnRMb2ciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2MpCisgICAgICAgICAgICAjIFRoaXMgaXMgdGhlIHJlYWwgdGVzdDogY2FsbCB0aGUgZnVuY3Rpb24gdmlhICdjYWxsX2Z1bmN0aW9uJworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBjYWxsX2Z1bmN0aW9uKHByb2MsIChOb25lLCkpKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X21hY2hvbGliLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X21hY2hvbGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTg0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfbWFjaG9saWIucHkKQEAgLTAsMCArMSw2MiBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworIyBCb2IgSXBwb2xpdG86CisiIiIKK09rLi4gdGhlIGNvZGUgdG8gZmluZCB0aGUgZmlsZW5hbWUgZm9yIF9fZ2V0YXR0cl9fIHNob3VsZCBsb29rCitzb21ldGhpbmcgbGlrZToKKworaW1wb3J0IG9zCitmcm9tIG1hY2hvbGliLmR5bGQgaW1wb3J0IGR5bGRfZmluZAorCitkZWYgZmluZF9saWIobmFtZSk6CisgICAgIHBvc3NpYmxlID0gWydsaWInK25hbWUrJy5keWxpYicsIG5hbWUrJy5keWxpYicsCisgICAgIG5hbWUrJy5mcmFtZXdvcmsvJytuYW1lXQorICAgICBmb3IgZHlsaWIgaW4gcG9zc2libGU6CisgICAgICAgICB0cnk6CisgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGgucmVhbHBhdGgoZHlsZF9maW5kKGR5bGliKSkKKyAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgIHBhc3MKKyAgICAgcmFpc2UgVmFsdWVFcnJvciwgIiVzIG5vdCBmb3VuZCIgJSAobmFtZSwpCisKK0l0J2xsIGhhdmUgb3V0cHV0IGxpa2UgdGhpczoKKworID4+PiBmaW5kX2xpYigncHRocmVhZCcpCisnL3Vzci9saWIvbGliU3lzdGVtLkIuZHlsaWInCisgPj4+IGZpbmRfbGliKCd6JykKKycvdXNyL2xpYi9saWJ6LjEuZHlsaWInCisgPj4+IGZpbmRfbGliKCdJT0tpdCcpCisnL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSU9LaXQnCisKKy1ib2IKKworIiIiCisKK2Zyb20gY3R5cGVzLm1hY2hvbGliLmR5bGQgaW1wb3J0IGR5bGRfZmluZAorCitkZWYgZmluZF9saWIobmFtZSk6CisgICAgcG9zc2libGUgPSBbJ2xpYicrbmFtZSsnLmR5bGliJywgbmFtZSsnLmR5bGliJywgbmFtZSsnLmZyYW1ld29yay8nK25hbWVdCisgICAgZm9yIGR5bGliIGluIHBvc3NpYmxlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5yZWFscGF0aChkeWxkX2ZpbmQoZHlsaWIpKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICByYWlzZSBWYWx1ZUVycm9yKCIlcyBub3QgZm91bmQiICUgKG5hbWUsKSkKKworY2xhc3MgTWFjaE9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6CisgICAgICAgIGRlZiB0ZXN0X2ZpbmQoc2VsZik6CisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZF9saWIoJ3B0aHJlYWQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2xpYi9saWJTeXN0ZW0uQi5keWxpYicpCisKKyAgICAgICAgICAgIHJlc3VsdCA9IGZpbmRfbGliKCd6JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuc3RhcnRzd2l0aCgnL3Vzci9saWIvbGliei4xJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LmVuZHN3aXRoKCcuZHlsaWInKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaW5kX2xpYignSU9LaXQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JT0tpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9JT0tpdCcpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfbWVtZnVuY3Rpb25zLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X21lbWZ1bmN0aW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDcyNjAzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X21lbWZ1bmN0aW9ucy5weQpAQCAtMCwwICsxLDc5IEBACitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY3R5cGVzIGltcG9ydCAqCisKK2NsYXNzIE1lbUZ1bmN0aW9uc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorIyMgICAgZGVmIHRlc3Rfb3ZlcmZsb3coc2VsZik6CisjIyAgICAgICAgIyBzdHJpbmdfYXQgYW5kIHdzdHJpbmdfYXQgbXVzdCB1c2UgdGhlIFB5dGhvbiBjYWxsaW5nCisjIyAgICAgICAgIyBjb252ZW50aW9uICh3aGljaCBhY3F1aXJlcyB0aGUgR0lMIGFuZCBjaGVja3MgdGhlIFB5dGhvbgorIyMgICAgICAgICMgZXJyb3IgZmxhZykuICBQcm92b2tlIGFuIGVycm9yIGFuZCBjYXRjaCBpdDsgc2VlIGFsc28gaXNzdWUKKyMjICAgICAgICAjICMzNTU0OiA8aHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM1NTQ+CisjIyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE92ZXJmbG93RXJyb3IsIE1lbW9yeUVycm9yLCBTeXN0ZW1FcnJvciksCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiB3c3RyaW5nX2F0KHUiZm9vIiwgc3lzLm1heGludCAtIDEpKQorIyMgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvciwgU3lzdGVtRXJyb3IpLAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogc3RyaW5nX2F0KCJmb28iLCBzeXMubWF4aW50IC0gMSkpCisKKyAgICBkZWYgdGVzdF9tZW1tb3ZlKHNlbGYpOgorICAgICAgICAjIGxhcmdlIGJ1ZmZlcnMgYXBwYXJlbnRseSBpbmNyZWFzZSB0aGUgY2hhbmNlIHRoYXQgdGhlIG1lbW9yeQorICAgICAgICAjIGlzIGFsbG9jYXRlZCBpbiBoaWdoIGFkZHJlc3Mgc3BhY2UuCisgICAgICAgIGEgPSBjcmVhdGVfc3RyaW5nX2J1ZmZlcigxMDAwMDAwKQorICAgICAgICBwID0gIkhlbGxvLCBXb3JsZCIKKyAgICAgICAgcmVzdWx0ID0gbWVtbW92ZShhLCBwLCBsZW4ocCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS52YWx1ZSwgIkhlbGxvLCBXb3JsZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmdfYXQocmVzdWx0KSwgIkhlbGxvLCBXb3JsZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nX2F0KHJlc3VsdCwgNSksICJIZWxsbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nX2F0KHJlc3VsdCwgMTYpLCAiSGVsbG8sIFdvcmxkXDBcMFwwXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZ19hdChyZXN1bHQsIDApLCAiIikKKworICAgIGRlZiB0ZXN0X21lbXNldChzZWxmKToKKyAgICAgICAgYSA9IGNyZWF0ZV9zdHJpbmdfYnVmZmVyKDEwMDAwMDApCisgICAgICAgIHJlc3VsdCA9IG1lbXNldChhLCBvcmQoJ3gnKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS52YWx1ZSwgInh4eHh4eHh4eHh4eHh4eHgiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nX2F0KHJlc3VsdCksICJ4eHh4eHh4eHh4eHh4eHh4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmdfYXQoYSksICJ4eHh4eHh4eHh4eHh4eHh4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmdfYXQoYSwgMjApLCAieHh4eHh4eHh4eHh4eHh4eFwwXDBcMFwwIikKKworICAgIGRlZiB0ZXN0X2Nhc3Qoc2VsZik6CisgICAgICAgIGEgPSAoY191Ynl0ZSAqIDMyKSgqbWFwKG9yZCwgImFiY2RlZiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc3QoYSwgY19jaGFyX3ApLnZhbHVlLCAiYWJjZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXN0KGEsIFBPSU5URVIoY19ieXRlKSlbOjddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FzdChhLCBQT0lOVEVSKGNfYnl0ZSkpWzo3Ol0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs5NywgOTgsIDk5LCAxMDAsIDEwMSwgMTAyLCAwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXN0KGEsIFBPSU5URVIoY19ieXRlKSlbNjotMTotMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswLCAxMDIsIDEwMSwgMTAwLCA5OSwgOTgsIDk3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXN0KGEsIFBPSU5URVIoY19ieXRlKSlbOjc6Ml0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs5NywgOTksIDEwMSwgMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FzdChhLCBQT0lOVEVSKGNfYnl0ZSkpWzo3OjddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbOTddKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX2F0KHNlbGYpOgorICAgICAgICBzID0gc3RyaW5nX2F0KCJmb28gYmFyIikKKyAgICAgICAgIyBYWFggVGhlIGZvbGxvd2luZyBtYXkgYmUgd3JvbmcsIGRlcGVuZGluZyBvbiBob3cgUHl0aG9uCisgICAgICAgICMgbWFuYWdlcyBzdHJpbmcgaW5zdGFuY2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocywgImZvbyBiYXIiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nX2F0KCJmb28gYmFyIiwgOCksICJmb28gYmFyXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZ19hdCgiZm9vIGJhciIsIDMpLCAiZm9vIikKKworICAgIHRyeToKKyAgICAgICAgY3JlYXRlX3VuaWNvZGVfYnVmZmVyCisgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGRlZiB0ZXN0X3dzdHJpbmdfYXQoc2VsZik6CisgICAgICAgICAgICBwID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJIZWxsbywgV29ybGQiKQorICAgICAgICAgICAgYSA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigxMDAwMDAwKQorICAgICAgICAgICAgcmVzdWx0ID0gbWVtbW92ZShhLCBwLCBsZW4ocCkgKiBzaXplb2YoY193Y2hhcikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEudmFsdWUsICJIZWxsbywgV29ybGQiKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdzdHJpbmdfYXQoYSksICJIZWxsbywgV29ybGQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDUpLCAiSGVsbG8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDE2KSwgIkhlbGxvLCBXb3JsZFwwXDBcMFwwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3N0cmluZ19hdChhLCAwKSwgIiIpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfbnVtYmVycy5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9udW1iZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MjM5MDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfbnVtYmVycy5weQpAQCAtMCwwICsxLDI4NiBAQAorZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN0cnVjdAorCitkZWYgdmFsaWRfcmFuZ2VzKCp0eXBlcyk6CisgICAgIyBnaXZlbiBhIHNlcXVlbmNlIG9mIG51bWVyaWMgdHlwZXMsIGNvbGxlY3QgdGhlaXIgX3R5cGVfCisgICAgIyBhdHRyaWJ1dGUsIHdoaWNoIGlzIGEgc2luZ2xlIGZvcm1hdCBjaGFyYWN0ZXIgY29tcGF0aWJsZSB3aXRoCisgICAgIyB0aGUgc3RydWN0IG1vZHVsZSwgdXNlIHRoZSBzdHJ1Y3QgbW9kdWxlIHRvIGNhbGN1bGF0ZSB0aGUKKyAgICAjIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWUgYWxsb3dlZCBmb3IgdGhpcyBmb3JtYXQuCisgICAgIyBSZXR1cm5zIGEgbGlzdCBvZiAobWluLCBtYXgpIHZhbHVlcy4KKyAgICByZXN1bHQgPSBbXQorICAgIGZvciB0IGluIHR5cGVzOgorICAgICAgICBmbXQgPSB0Ll90eXBlXworICAgICAgICBzaXplID0gc3RydWN0LmNhbGNzaXplKGZtdCkKKyAgICAgICAgYSA9IHN0cnVjdC51bnBhY2soZm10LCAoIlx4MDAiKjMyKVs6c2l6ZV0pWzBdCisgICAgICAgIGIgPSBzdHJ1Y3QudW5wYWNrKGZtdCwgKCJceEZGIiozMilbOnNpemVdKVswXQorICAgICAgICBjID0gc3RydWN0LnVucGFjayhmbXQsICgiXHg3RiIrIlx4MDAiKjMyKVs6c2l6ZV0pWzBdCisgICAgICAgIGQgPSBzdHJ1Y3QudW5wYWNrKGZtdCwgKCJceDgwIisiXHhGRiIqMzIpWzpzaXplXSlbMF0KKyAgICAgICAgcmVzdWx0LmFwcGVuZCgobWluKGEsIGIsIGMsIGQpLCBtYXgoYSwgYiwgYywgZCkpKQorICAgIHJldHVybiByZXN1bHQKKworQXJnVHlwZSA9IHR5cGUoYnlyZWYoY19pbnQoMCkpKQorCit1bnNpZ25lZF90eXBlcyA9IFtjX3VieXRlLCBjX3VzaG9ydCwgY191aW50LCBjX3Vsb25nXQorc2lnbmVkX3R5cGVzID0gW2NfYnl0ZSwgY19zaG9ydCwgY19pbnQsIGNfbG9uZywgY19sb25nbG9uZ10KKworYm9vbF90eXBlcyA9IFtdCisKK2Zsb2F0X3R5cGVzID0gW2NfZG91YmxlLCBjX2Zsb2F0XQorCit0cnk6CisgICAgY191bG9uZ2xvbmcKKyAgICBjX2xvbmdsb25nCitleGNlcHQgTmFtZUVycm9yOgorICAgIHBhc3MKK2Vsc2U6CisgICAgdW5zaWduZWRfdHlwZXMuYXBwZW5kKGNfdWxvbmdsb25nKQorICAgIHNpZ25lZF90eXBlcy5hcHBlbmQoY19sb25nbG9uZykKKwordHJ5OgorICAgIGNfYm9vbAorZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBwYXNzCitlbHNlOgorICAgIGJvb2xfdHlwZXMuYXBwZW5kKGNfYm9vbCkKKwordW5zaWduZWRfcmFuZ2VzID0gdmFsaWRfcmFuZ2VzKCp1bnNpZ25lZF90eXBlcykKK3NpZ25lZF9yYW5nZXMgPSB2YWxpZF9yYW5nZXMoKnNpZ25lZF90eXBlcykKK2Jvb2xfdmFsdWVzID0gW1RydWUsIEZhbHNlLCAwLCAxLCAtMSwgNTAwMCwgJ3Rlc3QnLCBbXSwgWzFdXQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIE51bWJlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfaW5pdChzZWxmKToKKyAgICAgICAgIyBkZWZhdWx0IHZhbHVlcyBhcmUgc2V0IHRvIHplcm8KKyAgICAgICAgZm9yIHQgaW4gc2lnbmVkX3R5cGVzICsgdW5zaWduZWRfdHlwZXMgKyBmbG9hdF90eXBlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCgpLnZhbHVlLCAwKQorCisgICAgZGVmIHRlc3RfdW5zaWduZWRfdmFsdWVzKHNlbGYpOgorICAgICAgICAjIHRoZSB2YWx1ZSBnaXZlbiB0byB0aGUgY29uc3RydWN0b3IgaXMgYXZhaWxhYmxlCisgICAgICAgICMgYXMgdGhlICd2YWx1ZScgYXR0cmlidXRlCisgICAgICAgIGZvciB0LCAobCwgaCkgaW4gemlwKHVuc2lnbmVkX3R5cGVzLCB1bnNpZ25lZF9yYW5nZXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KGwpLnZhbHVlLCBsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KGgpLnZhbHVlLCBoKQorCisgICAgZGVmIHRlc3Rfc2lnbmVkX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBzZWUgYWJvdmUKKyAgICAgICAgZm9yIHQsIChsLCBoKSBpbiB6aXAoc2lnbmVkX3R5cGVzLCBzaWduZWRfcmFuZ2VzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodChsKS52YWx1ZSwgbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodChoKS52YWx1ZSwgaCkKKworICAgIGRlZiB0ZXN0X2Jvb2xfdmFsdWVzKHNlbGYpOgorICAgICAgICBmcm9tIG9wZXJhdG9yIGltcG9ydCB0cnV0aAorICAgICAgICBmb3IgdCwgdiBpbiB6aXAoYm9vbF90eXBlcywgYm9vbF92YWx1ZXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KHYpLnZhbHVlLCB0cnV0aCh2KSkKKworICAgIGRlZiB0ZXN0X3R5cGVlcnJvcihzZWxmKToKKyAgICAgICAgIyBPbmx5IG51bWJlcnMgYXJlIGFsbG93ZWQgaW4gdGhlIGNvbnRydWN0b3IsCisgICAgICAgICMgb3RoZXJ3aXNlIFR5cGVFcnJvciBpcyByYWlzZWQKKyAgICAgICAgZm9yIHQgaW4gc2lnbmVkX3R5cGVzICsgdW5zaWduZWRfdHlwZXMgKyBmbG9hdF90eXBlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdCwgIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQsIE5vbmUpCisKKyMjICAgIGRlZiB0ZXN0X3ZhbGlkX3JhbmdlcyhzZWxmKToKKyMjICAgICAgICAjIGludmFsaWQgdmFsdWVzIG9mIHRoZSBjb3JyZWN0IHR5cGUKKyMjICAgICAgICAjIHJhaXNlIFZhbHVlRXJyb3IgKG5vdCBPdmVyZmxvd0Vycm9yKQorIyMgICAgICAgIGZvciB0LCAobCwgaCkgaW4gemlwKHVuc2lnbmVkX3R5cGVzLCB1bnNpZ25lZF9yYW5nZXMpOgorIyMgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LCBsLTEpCisjIyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQsIGgrMSkKKworICAgIGRlZiB0ZXN0X2Zyb21fcGFyYW0oc2VsZik6CisgICAgICAgICMgdGhlIGZyb21fcGFyYW0gY2xhc3MgbWV0aG9kIGF0dHJpYnV0ZSBhbHdheXMKKyAgICAgICAgIyByZXR1cm5zIFB5Q0FyZ09iamVjdCBpbnN0YW5jZXMKKyAgICAgICAgZm9yIHQgaW4gc2lnbmVkX3R5cGVzICsgdW5zaWduZWRfdHlwZXMgKyBmbG9hdF90eXBlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQXJnVHlwZSwgdHlwZSh0LmZyb21fcGFyYW0oMCkpKQorCisgICAgZGVmIHRlc3RfYnlyZWYoc2VsZik6CisgICAgICAgICMgY2FsbGluZyBieXJlZiByZXR1cm5zIGFsc28gYSBQeUNBcmdPYmplY3QgaW5zdGFuY2UKKyAgICAgICAgZm9yIHQgaW4gc2lnbmVkX3R5cGVzICsgdW5zaWduZWRfdHlwZXMgKyBmbG9hdF90eXBlcyArIGJvb2xfdHlwZXM6CisgICAgICAgICAgICBwYXJtID0gYnlyZWYodCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBcmdUeXBlLCB0eXBlKHBhcm0pKQorCisKKyAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6CisgICAgICAgICMgY19mbG9hdCBhbmQgY19kb3VibGUgY2FuIGJlIGNyZWF0ZWQgZnJvbQorICAgICAgICAjIFB5dGhvbiBpbnQsIGxvbmcgYW5kIGZsb2F0CisgICAgICAgIGNsYXNzIEZsb2F0TGlrZShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMi4wCisgICAgICAgIGYgPSBGbG9hdExpa2UoKQorICAgICAgICBmb3IgdCBpbiBmbG9hdF90eXBlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCgyLjApLnZhbHVlLCAyLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQoMikudmFsdWUsIDIuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCgyTCkudmFsdWUsIDIuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodChmKS52YWx1ZSwgMi4wKQorCisgICAgZGVmIHRlc3RfaW50ZWdlcnMoc2VsZik6CisgICAgICAgIGNsYXNzIEZsb2F0TGlrZShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMi4wCisgICAgICAgIGYgPSBGbG9hdExpa2UoKQorICAgICAgICBjbGFzcyBJbnRMaWtlKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMgorICAgICAgICBpID0gSW50TGlrZSgpCisgICAgICAgICMgaW50ZWdlcnMgY2Fubm90IGJlIGNvbnN0cnVjdGVkIGZyb20gZmxvYXRzLAorICAgICAgICAjIGJ1dCBmcm9tIGludGVnZXItbGlrZSBvYmplY3RzCisgICAgICAgIGZvciB0IGluIHNpZ25lZF90eXBlcyArIHVuc2lnbmVkX3R5cGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LCAzLjE0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LCBmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KGkpLnZhbHVlLCAyKQorCisgICAgZGVmIHRlc3Rfc2l6ZXMoc2VsZik6CisgICAgICAgIGZvciB0IGluIHNpZ25lZF90eXBlcyArIHVuc2lnbmVkX3R5cGVzICsgZmxvYXRfdHlwZXMgKyBib29sX3R5cGVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNpemUgPSBzdHJ1Y3QuY2FsY3NpemUodC5fdHlwZV8pCisgICAgICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjIHNpemVvZiBvZiB0aGUgdHlwZS4uLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YodCksIHNpemUpCisgICAgICAgICAgICAjIGFuZCBzaXplb2Ygb2YgYW4gaW5zdGFuY2UKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHQoKSksIHNpemUpCisKKyAgICBkZWYgdGVzdF9hbGlnbm1lbnRzKHNlbGYpOgorICAgICAgICBmb3IgdCBpbiBzaWduZWRfdHlwZXMgKyB1bnNpZ25lZF90eXBlcyArIGZsb2F0X3R5cGVzOgorICAgICAgICAgICAgY29kZSA9IHQuX3R5cGVfICMgdGhlIHR5cGVjb2RlCisgICAgICAgICAgICBhbGlnbiA9IHN0cnVjdC5jYWxjc2l6ZSgiYyVjIiAlIGNvZGUpIC0gc3RydWN0LmNhbGNzaXplKGNvZGUpCisKKyAgICAgICAgICAgICMgYWxpZ25tZW50IG9mIHRoZSB0eXBlLi4uCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjb2RlLCBhbGlnbm1lbnQodCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvZGUsIGFsaWduKSkKKyAgICAgICAgICAgICMgYW5kIGFsaWdubWVudCBvZiBhbiBpbnN0YW5jZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoY29kZSwgYWxpZ25tZW50KHQoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvZGUsIGFsaWduKSkKKworICAgIGRlZiB0ZXN0X2ludF9mcm9tX2FkZHJlc3Moc2VsZik6CisgICAgICAgIGZyb20gYXJyYXkgaW1wb3J0IGFycmF5CisgICAgICAgIGZvciB0IGluIHNpZ25lZF90eXBlcyArIHVuc2lnbmVkX3R5cGVzOgorICAgICAgICAgICAgIyB0aGUgYXJyYXkgbW9kdWxlIGRvZXNuJ3Qgc3VwcG9ydCBhbGwgZm9ybWF0IGNvZGVzCisgICAgICAgICAgICAjIChubyAncScgb3IgJ1EnKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGFycmF5KHQuX3R5cGVfKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGEgPSBhcnJheSh0Ll90eXBlXywgWzEwMF0pCisKKyAgICAgICAgICAgICMgdiBub3cgaXMgYW4gaW50ZWdlciBhdCBhbiAnZXh0ZXJuYWwnIG1lbW9yeSBsb2NhdGlvbgorICAgICAgICAgICAgdiA9IHQuZnJvbV9hZGRyZXNzKGEuYnVmZmVyX2luZm8oKVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2KSwgdCkKKworICAgICAgICAgICAgIyBjaGFuZ2luZyB0aGUgdmFsdWUgYXQgdGhlIG1lbW9yeSBsb2NhdGlvbiBjaGFuZ2VzIHYncyB2YWx1ZSBhbHNvCisgICAgICAgICAgICBhWzBdID0gNDIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKKworCisgICAgZGVmIHRlc3RfZmxvYXRfZnJvbV9hZGRyZXNzKHNlbGYpOgorICAgICAgICBmcm9tIGFycmF5IGltcG9ydCBhcnJheQorICAgICAgICBmb3IgdCBpbiBmbG9hdF90eXBlczoKKyAgICAgICAgICAgIGEgPSBhcnJheSh0Ll90eXBlXywgWzMuMTRdKQorICAgICAgICAgICAgdiA9IHQuZnJvbV9hZGRyZXNzKGEuYnVmZmVyX2luZm8oKVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHYpIGlzIHQpCisgICAgICAgICAgICBhWzBdID0gMi4zNDU2ZTE3CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYudmFsdWUsIGFbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh2KSBpcyB0KQorCisgICAgZGVmIHRlc3RfY2hhcl9mcm9tX2FkZHJlc3Moc2VsZik6CisgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBjX2NoYXIKKyAgICAgICAgZnJvbSBhcnJheSBpbXBvcnQgYXJyYXkKKworICAgICAgICBhID0gYXJyYXkoJ2MnLCAneCcpCisgICAgICAgIHYgPSBjX2NoYXIuZnJvbV9hZGRyZXNzKGEuYnVmZmVyX2luZm8oKVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnZhbHVlLCBhWzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh2KSBpcyBjX2NoYXIpCisKKyAgICAgICAgYVswXSA9ICc/JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYudmFsdWUsIGFbMF0pCisKKyAgICAjIGFycmF5IGRvZXMgbm90IHN1cHBvcnQgY19ib29sIC8gJ3QnCisgICAgIyBkZWYgdGVzdF9ib29sX2Zyb21fYWRkcmVzcyhzZWxmKToKKyAgICAjICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY19ib29sCisgICAgIyAgICAgZnJvbSBhcnJheSBpbXBvcnQgYXJyYXkKKyAgICAjICAgICBhID0gYXJyYXkoY19ib29sLl90eXBlXywgW1RydWVdKQorICAgICMgICAgIHYgPSB0LmZyb21fYWRkcmVzcyhhLmJ1ZmZlcl9pbmZvKClbMF0pCisgICAgIyAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnZhbHVlLCBhWzBdKQorICAgICMgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2KSBpcyB0KQorICAgICMgICAgIGFbMF0gPSBGYWxzZQorICAgICMgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKKyAgICAjICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodikgaXMgdCkKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgICMgY19pbnQoKSBjYW4gYmUgaW5pdGlhbGl6ZWQgZnJvbSBQeXRob24ncyBpbnQsIGFuZCBjX2ludC4KKyAgICAgICAgIyBOb3QgZnJvbSBjX2xvbmcgb3Igc28sIHdoaWNoIHNlZW1zIHN0cmFuZ2UsIGFiZCBzaG91bGQKKyAgICAgICAgIyBwcm9iYWJseSBiZSBjaGFuZ2VkOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfaW50LCBjX2xvbmcoNDIpKQorCisgICAgZGVmIHRlc3RfZmxvYXRfb3ZlcmZsb3coc2VsZik6CisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgYmlnX2ludCA9IGludChzeXMuZmxvYXRfaW5mby5tYXgpICogMgorICAgICAgICBmb3IgdCBpbiBmbG9hdF90eXBlcyArIFtjX2xvbmdkb3VibGVdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgdCwgYmlnX2ludCkKKyAgICAgICAgICAgIGlmIChoYXNhdHRyKHQsICJfX2N0eXBlX2JlX18iKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgdC5fX2N0eXBlX2JlX18sIGJpZ19pbnQpCisgICAgICAgICAgICBpZiAoaGFzYXR0cih0LCAiX19jdHlwZV9sZV9fIikpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHQuX19jdHlwZV9sZV9fLCBiaWdfaW50KQorCisjIyAgICBkZWYgdGVzdF9wZXJmKHNlbGYpOgorIyMgICAgICAgIGNoZWNrX3BlcmYoKQorCitmcm9tIGN0eXBlcyBpbXBvcnQgX1NpbXBsZUNEYXRhCitjbGFzcyBjX2ludF9TKF9TaW1wbGVDRGF0YSk6CisgICAgX3R5cGVfID0gImkiCisgICAgX19zbG90c19fID0gW10KKworZGVmIHJ1bl90ZXN0KHJlcCwgbXNnLCBmdW5jLCBhcmc9Tm9uZSk6CisjIyAgICBpdGVtcyA9IFtOb25lXSAqIHJlcAorICAgIGl0ZW1zID0gcmFuZ2UocmVwKQorICAgIGZyb20gdGltZSBpbXBvcnQgY2xvY2sKKyAgICBpZiBhcmcgaXMgbm90IE5vbmU6CisgICAgICAgIHN0YXJ0ID0gY2xvY2soKQorICAgICAgICBmb3IgaSBpbiBpdGVtczoKKyAgICAgICAgICAgIGZ1bmMoYXJnKTsgZnVuYyhhcmcpOyBmdW5jKGFyZyk7IGZ1bmMoYXJnKTsgZnVuYyhhcmcpCisgICAgICAgIHN0b3AgPSBjbG9jaygpCisgICAgZWxzZToKKyAgICAgICAgc3RhcnQgPSBjbG9jaygpCisgICAgICAgIGZvciBpIGluIGl0ZW1zOgorICAgICAgICAgICAgZnVuYygpOyBmdW5jKCk7IGZ1bmMoKTsgZnVuYygpOyBmdW5jKCkKKyAgICAgICAgc3RvcCA9IGNsb2NrKCkKKyAgICBwcmludCAiJTE1czogJS4yZiB1cyIgJSAobXNnLCAoKHN0b3Atc3RhcnQpKjFlNi81L3JlcCkpCisKK2RlZiBjaGVja19wZXJmKCk6CisgICAgIyBDb25zdHJ1Y3QgNSBvYmplY3RzCisgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfaW50CisKKyAgICBSRVAgPSAyMDAwMDAKKworICAgIHJ1bl90ZXN0KFJFUCwgImludCgpIiwgaW50KQorICAgIHJ1bl90ZXN0KFJFUCwgImludCg5OTkpIiwgaW50KQorICAgIHJ1bl90ZXN0KFJFUCwgImNfaW50KCkiLCBjX2ludCkKKyAgICBydW5fdGVzdChSRVAsICJjX2ludCg5OTkpIiwgY19pbnQpCisgICAgcnVuX3Rlc3QoUkVQLCAiY19pbnRfUygpIiwgY19pbnRfUykKKyAgICBydW5fdGVzdChSRVAsICJjX2ludF9TKDk5OSkiLCBjX2ludF9TKQorCisjIFB5dGhvbiAyLjMgLU9PLCB3aW4yaywgUDQgNzAwIE1IejoKKyMKKyMgICAgICAgICAgaW50KCk6IDAuODcgdXMKKyMgICAgICAgaW50KDk5OSk6IDAuODcgdXMKKyMgICAgICAgIGNfaW50KCk6IDMuMzUgdXMKKyMgICAgIGNfaW50KDk5OSk6IDMuMzQgdXMKKyMgICAgICBjX2ludF9TKCk6IDMuMjMgdXMKKyMgICBjX2ludF9TKDk5OSk6IDMuMjQgdXMKKworIyBQeXRob24gMi4yIC1PTywgd2luMmssIFA0IDcwMCBNSHo6CisjCisjICAgICAgICAgIGludCgpOiAwLjg5IHVzCisjICAgICAgIGludCg5OTkpOiAwLjg5IHVzCisjICAgICAgICBjX2ludCgpOiA5Ljk5IHVzCisjICAgICBjX2ludCg5OTkpOiAxMC4wMiB1cworIyAgICAgIGNfaW50X1MoKTogOS44NyB1cworIyAgIGNfaW50X1MoOTk5KTogOS44NSB1cworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorIyMgICAgY2hlY2tfcGVyZigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3Rfb2JqZWN0cy5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9vYmplY3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkOTIxZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3Rfb2JqZWN0cy5weQpAQCAtMCwwICsxLDcwIEBACityJycnCitUaGlzIHRlc3RzIHRoZSAnX29iamVjdHMnIGF0dHJpYnV0ZSBvZiBjdHlwZXMgaW5zdGFuY2VzLiAgJ19vYmplY3RzJworaG9sZHMgcmVmZXJlbmNlcyB0byBvYmplY3RzIHRoYXQgbXVzdCBiZSBrZXB0IGFsaXZlIGFzIGxvbmcgYXMgdGhlCitjdHlwZXMgaW5zdGFuY2UsIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBtZW1vcnkgYnVmZmVyIGlzIHZhbGlkLgorCitXQVJOSU5HOiBUaGUgJ19vYmplY3RzJyBhdHRyaWJ1dGUgaXMgZXhwb3NlZCBPTkxZIGZvciBkZWJ1Z2dpbmcgY3R5cGVzIGl0c2VsZiwKK2l0IE1VU1QgTkVWRVIgQkUgTU9ESUZJRUQhCisKKydfb2JqZWN0cycgaXMgaW5pdGlhbGl6ZWQgdG8gYSBkaWN0aW9uYXJ5IG9uIGZpcnN0IHVzZSwgYmVmb3JlIHRoYXQgaXQKK2lzIE5vbmUuCisKK0hlcmUgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHBvaW50ZXJzOgorCis+Pj4gZnJvbSBjdHlwZXMgaW1wb3J0ICoKKz4+PiBhcnJheSA9IChjX2NoYXJfcCAqIDUpKCkKKz4+PiBwcmludCBhcnJheS5fb2JqZWN0cworTm9uZQorPj4+CisKK1RoZSBtZW1vcnkgYmxvY2sgc3RvcmVzIHBvaW50ZXJzIHRvIHN0cmluZ3MsIGFuZCB0aGUgc3RyaW5ncyBpdHNlbGYKK2Fzc2lnbmVkIGZyb20gUHl0aG9uIG11c3QgYmUga2VwdC4KKworPj4+IGFycmF5WzRdID0gJ2ZvbyBiYXInCis+Pj4gYXJyYXkuX29iamVjdHMKK3snNCc6ICdmb28gYmFyJ30KKz4+PiBhcnJheVs0XQorJ2ZvbyBiYXInCis+Pj4KKworSXQgZ2V0cyBtb3JlIGNvbXBsaWNhdGVkIHdoZW4gdGhlIGN0eXBlcyBpbnN0YW5jZSBpdHNlbGYgaXMgY29udGFpbmVkCitpbiBhICdiYXNlJyBvYmplY3QuCisKKz4+PiBjbGFzcyBYKFN0cnVjdHVyZSk6CisuLi4gICAgIF9maWVsZHNfID0gWygieCIsIGNfaW50KSwgKCJ5IiwgY19pbnQpLCAoImFycmF5IiwgY19jaGFyX3AgKiA1KV0KKy4uLgorPj4+IHggPSBYKCkKKz4+PiBwcmludCB4Ll9vYmplY3RzCitOb25lCis+Pj4KKworVGhlJ2FycmF5JyBhdHRyaWJ1dGUgb2YgdGhlICd4JyBvYmplY3Qgc2hhcmVzIHBhcnQgb2YgdGhlIG1lbW9yeSBidWZmZXIKK29mICd4JyAoJ19iX2Jhc2VfJyBpcyBlaXRoZXIgTm9uZSwgb3IgdGhlIHJvb3Qgb2JqZWN0IG93bmluZyB0aGUgbWVtb3J5IGJsb2NrKToKKworPj4+IHByaW50IHguYXJyYXkuX2JfYmFzZV8gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKzxjdHlwZXMudGVzdC50ZXN0X29iamVjdHMuWCBvYmplY3QgYXQgMHguLi4+Cis+Pj4KKworPj4+IHguYXJyYXlbMF0gPSAnc3BhbSBzcGFtIHNwYW0nCis+Pj4geC5fb2JqZWN0cworeycwOjInOiAnc3BhbSBzcGFtIHNwYW0nfQorPj4+IHguYXJyYXkuX2JfYmFzZV8uX29iamVjdHMKK3snMDoyJzogJ3NwYW0gc3BhbSBzcGFtJ30KKz4+PgorCisnJycKKworaW1wb3J0IHVuaXR0ZXN0LCBkb2N0ZXN0LCBzeXMKKworaW1wb3J0IGN0eXBlcy50ZXN0LnRlc3Rfb2JqZWN0cworCitjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaWYgc3lzLmhleHZlcnNpb24gPiAweDAyMDQwMDAwOgorICAgICAgICAjIFB5dGhvbiAyLjMgaGFzIG5vIEVMTElQU0lTIGZsYWcsIHNvIHdlIGRvbid0IHRlc3Qgd2l0aCB0aGlzCisgICAgICAgICMgdmVyc2lvbjoKKyAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICBkb2N0ZXN0LnRlc3Rtb2QoY3R5cGVzLnRlc3QudGVzdF9vYmplY3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGlmIHN5cy5oZXh2ZXJzaW9uID4gMHgwMjA0MDAwMDoKKyAgICAgICAgZG9jdGVzdC50ZXN0bW9kKGN0eXBlcy50ZXN0LnRlc3Rfb2JqZWN0cykKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9wYXJhbWV0ZXJzLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3BhcmFtZXRlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI3MDRkNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9wYXJhbWV0ZXJzLnB5CkBAIC0wLDAgKzEsMTg4IEBACitpbXBvcnQgdW5pdHRlc3QsIHN5cworCitjbGFzcyBTaW1wbGVUeXBlc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaW1wb3J0IGN0eXBlcworICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIF9jdHlwZXMgaW1wb3J0IHNldF9jb252ZXJzaW9uX21vZGUKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wcmV2X2NvbnZfbW9kZSA9IHNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInN0cmljdCIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gX2N0eXBlcyBpbXBvcnQgc2V0X2NvbnZlcnNpb25fbW9kZQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZXRfY29udmVyc2lvbl9tb2RlKCpzZWxmLnByZXZfY29udl9tb2RlKQorCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2VzKHNlbGYpOgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY192b2lkX3AsIGNfY2hhcl9wCisgICAgICAgICMgY3R5cGVzIDAuOS41IGFuZCBiZWZvcmUgZGlkIG92ZXJ3cml0ZSBmcm9tX3BhcmFtIGluIFNpbXBsZVR5cGVfbmV3CisgICAgICAgIGNsYXNzIENWT0lEUChjX3ZvaWRfcCk6CisgICAgICAgICAgICBkZWYgZnJvbV9wYXJhbShjbHMsIHZhbHVlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKiAyCisgICAgICAgICAgICBmcm9tX3BhcmFtID0gY2xhc3NtZXRob2QoZnJvbV9wYXJhbSkKKworICAgICAgICBjbGFzcyBDQ0hBUlAoY19jaGFyX3ApOgorICAgICAgICAgICAgZGVmIGZyb21fcGFyYW0oY2xzLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICogNAorICAgICAgICAgICAgZnJvbV9wYXJhbSA9IGNsYXNzbWV0aG9kKGZyb21fcGFyYW0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDVk9JRFAuZnJvbV9wYXJhbSgiYWJjIiksICJhYmNhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENDSEFSUC5mcm9tX3BhcmFtKCJhYmMiKSwgImFiY2FiY2FiY2FiYyIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfd2NoYXJfcAorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjbGFzcyBDV0NIQVJQKGNfd2NoYXJfcCk6CisgICAgICAgICAgICBkZWYgZnJvbV9wYXJhbShjbHMsIHZhbHVlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKiAzCisgICAgICAgICAgICBmcm9tX3BhcmFtID0gY2xhc3NtZXRob2QoZnJvbV9wYXJhbSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENXQ0hBUlAuZnJvbV9wYXJhbSgiYWJjIiksICJhYmNhYmNhYmMiKQorCisgICAgIyBYWFggUmVwbGFjZSBieSBjX2NoYXJfcCB0ZXN0cworICAgIGRlZiB0ZXN0X2NzdHJpbmdzKHNlbGYpOgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY19jaGFyX3AsIGJ5cmVmCisKKyAgICAgICAgIyBjX2NoYXJfcC5mcm9tX3BhcmFtIG9uIGEgUHl0aG9uIFN0cmluZyBwYWNrcyB0aGUgc3RyaW5nCisgICAgICAgICMgaW50byBhIGNwYXJhbSBvYmplY3QKKyAgICAgICAgcyA9ICIxMjMiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2NoYXJfcC5mcm9tX3BhcmFtKHMpLl9vYmogaXMgcykKKworICAgICAgICAjIG5ldyBpbiAwLjkuMTogY29udmVydCAoZW5jb2RlKSB1bmljb2RlIHRvIGFzY2lpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY19jaGFyX3AuZnJvbV9wYXJhbSh1IjEyMyIpLl9vYmosICIxMjMiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsIGNfY2hhcl9wLmZyb21fcGFyYW0sIHUiMTIzXDM3NyIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX2NoYXJfcC5mcm9tX3BhcmFtLCA0MikKKworICAgICAgICAjIGNhbGxpbmcgY19jaGFyX3AuZnJvbV9wYXJhbSB3aXRoIGEgY19jaGFyX3AgaW5zdGFuY2UKKyAgICAgICAgIyByZXR1cm5zIHRoZSBhcmd1bWVudCBpdHNlbGY6CisgICAgICAgIGEgPSBjX2NoYXJfcCgiMTIzIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfY2hhcl9wLmZyb21fcGFyYW0oYSkgaXMgYSkKKworICAgIGRlZiB0ZXN0X2N3X3N0cmluZ3Moc2VsZik6CisgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBieXJlZgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY193Y2hhcl9wCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyMjICAgICAgICAgICAgcHJpbnQgIihObyBjX3djaGFyX3ApIgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHMgPSB1IjEyMyIKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY193Y2hhcl9wLmZyb21fcGFyYW0ocykuX29iaiBpcyBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX3djaGFyX3AuZnJvbV9wYXJhbSwgNDIpCisKKyAgICAgICAgICAgICMgbmV3IGluIDAuOS4xOiBjb252ZXJ0IChkZWNvZGUpIGFzY2lpIHRvIHVuaWNvZGUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY193Y2hhcl9wLmZyb21fcGFyYW0oIjEyMyIpLl9vYmosIHUiMTIzIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjX3djaGFyX3AuZnJvbV9wYXJhbSwgIjEyM1wzNzciKQorCisgICAgICAgIHBhID0gY193Y2hhcl9wLmZyb21fcGFyYW0oY193Y2hhcl9wKHUiMTIzIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShwYSksIGNfd2NoYXJfcCkKKworICAgIGRlZiB0ZXN0X2ludF9wb2ludGVycyhzZWxmKToKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfc2hvcnQsIGNfdWludCwgY19pbnQsIGNfbG9uZywgUE9JTlRFUiwgcG9pbnRlcgorICAgICAgICBMUElOVCA9IFBPSU5URVIoY19pbnQpCisKKyMjICAgICAgICBwID0gcG9pbnRlcihjX2ludCg0MikpCisjIyAgICAgICAgeCA9IExQSU5ULmZyb21fcGFyYW0ocCkKKyAgICAgICAgeCA9IExQSU5ULmZyb21fcGFyYW0ocG9pbnRlcihjX2ludCg0MikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguY29udGVudHMudmFsdWUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExQSU5UKGNfaW50KDQyKSkuY29udGVudHMudmFsdWUsIDQyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTFBJTlQuZnJvbV9wYXJhbShOb25lKSwgTm9uZSkKKworICAgICAgICBpZiBjX2ludCAhPSBjX2xvbmc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIExQSU5ULmZyb21fcGFyYW0sIHBvaW50ZXIoY19sb25nKDQyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgTFBJTlQuZnJvbV9wYXJhbSwgcG9pbnRlcihjX3VpbnQoNDIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBMUElOVC5mcm9tX3BhcmFtLCBwb2ludGVyKGNfc2hvcnQoNDIpKSkKKworICAgIGRlZiB0ZXN0X2J5cmVmX3BvaW50ZXIoc2VsZik6CisgICAgICAgICMgVGhlIGZyb21fcGFyYW0gY2xhc3MgbWV0aG9kIG9mIFBPSU5URVIodHlwKSBjbGFzc2VzIGFjY2VwdHMgd2hhdCBpcworICAgICAgICAjIHJldHVybmVkIGJ5IGJ5cmVmKG9iaiksIGl0IHR5cGUob2JqKSA9PSB0eXAKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfc2hvcnQsIGNfdWludCwgY19pbnQsIGNfbG9uZywgcG9pbnRlciwgUE9JTlRFUiwgYnlyZWYKKyAgICAgICAgTFBJTlQgPSBQT0lOVEVSKGNfaW50KQorCisgICAgICAgIExQSU5ULmZyb21fcGFyYW0oYnlyZWYoY19pbnQoNDIpKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIExQSU5ULmZyb21fcGFyYW0sIGJ5cmVmKGNfc2hvcnQoMjIpKSkKKyAgICAgICAgaWYgY19pbnQgIT0gY19sb25nOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBMUElOVC5mcm9tX3BhcmFtLCBieXJlZihjX2xvbmcoMjIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBMUElOVC5mcm9tX3BhcmFtLCBieXJlZihjX3VpbnQoMjIpKSkKKworICAgIGRlZiB0ZXN0X2J5cmVmX3BvaW50ZXJwb2ludGVyKHNlbGYpOgorICAgICAgICAjIFNlZSBhYm92ZQorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY19zaG9ydCwgY191aW50LCBjX2ludCwgY19sb25nLCBwb2ludGVyLCBQT0lOVEVSLCBieXJlZgorCisgICAgICAgIExQTFBJTlQgPSBQT0lOVEVSKFBPSU5URVIoY19pbnQpKQorICAgICAgICBMUExQSU5ULmZyb21fcGFyYW0oYnlyZWYocG9pbnRlcihjX2ludCg0MikpKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIExQTFBJTlQuZnJvbV9wYXJhbSwgYnlyZWYocG9pbnRlcihjX3Nob3J0KDIyKSkpKQorICAgICAgICBpZiBjX2ludCAhPSBjX2xvbmc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIExQTFBJTlQuZnJvbV9wYXJhbSwgYnlyZWYocG9pbnRlcihjX2xvbmcoMjIpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgTFBMUElOVC5mcm9tX3BhcmFtLCBieXJlZihwb2ludGVyKGNfdWludCgyMikpKSkKKworICAgIGRlZiB0ZXN0X2FycmF5X3BvaW50ZXJzKHNlbGYpOgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY19zaG9ydCwgY191aW50LCBjX2ludCwgY19sb25nLCBQT0lOVEVSCisgICAgICAgIElOVEFSUkFZID0gY19pbnQgKiAzCisgICAgICAgIGlhID0gSU5UQVJSQVkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpYSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2lhW2ldIGZvciBpIGluIHJhbmdlKDMpXSwgWzAsIDAsIDBdKQorCisgICAgICAgICMgUG9pbnRlcnMgYXJlIG9ubHkgY29tcGF0aWJsZSB3aXRoIGFycmF5cyBjb250YWluaW5nIGl0ZW1zIG9mCisgICAgICAgICMgdGhlIHNhbWUgdHlwZSEKKyAgICAgICAgTFBJTlQgPSBQT0lOVEVSKGNfaW50KQorICAgICAgICBMUElOVC5mcm9tX3BhcmFtKChjX2ludCozKSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIExQSU5ULmZyb21fcGFyYW0sIGNfc2hvcnQqMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBMUElOVC5mcm9tX3BhcmFtLCBjX2xvbmcqMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBMUElOVC5mcm9tX3BhcmFtLCBjX3VpbnQqMykKKworIyMgICAgZGVmIHRlc3RfcGVyZm9ybWFuY2Uoc2VsZik6CisjIyAgICAgICAgY2hlY2tfcGVyZigpCisKKyAgICBkZWYgdGVzdF9ub2N0eXBlc19hcmd0eXBlKHNlbGYpOgorICAgICAgICBpbXBvcnQgX2N0eXBlc190ZXN0CisgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBDRExMLCBjX3ZvaWRfcCwgQXJndW1lbnRFcnJvcgorCisgICAgICAgIGZ1bmMgPSBDRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykuX3Rlc3RmdW5jX3BfcAorICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX3ZvaWRfcAorICAgICAgICAjIFR5cGVFcnJvcjogaGFzIG5vIGZyb21fcGFyYW0gbWV0aG9kCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgZnVuYywgImFyZ3R5cGVzIiwgKG9iamVjdCwpKQorCisgICAgICAgIGNsYXNzIEFkYXB0ZXIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBmcm9tX3BhcmFtKGNscywgb2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGZ1bmMuYXJndHlwZXMgPSAoQWRhcHRlcigpLCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKE5vbmUpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMob2JqZWN0KCkpLCBOb25lKQorCisgICAgICAgIGNsYXNzIEFkYXB0ZXIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBmcm9tX3BhcmFtKGNscywgb2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisKKyAgICAgICAgZnVuYy5hcmd0eXBlcyA9IChBZGFwdGVyKCksKQorICAgICAgICAjIGRvbid0IGtub3cgaG93IHRvIGNvbnZlcnQgcGFyYW1ldGVyIDEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRFcnJvciwgZnVuYywgb2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYyhjX3ZvaWRfcCg0MikpLCA0MikKKworICAgICAgICBjbGFzcyBBZGFwdGVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZnJvbV9wYXJhbShjbHMsIG9iaik6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihvYmopCisKKyAgICAgICAgZnVuYy5hcmd0eXBlcyA9IChBZGFwdGVyKCksKQorICAgICAgICAjIEFyZ3VtZW50RXJyb3I6IGFyZ3VtZW50IDE6IFZhbHVlRXJyb3I6IDk5CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50RXJyb3IsIGZ1bmMsIDk5KQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9wZXAzMTE4LnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3BlcDMxMTgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2NDczYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9wZXAzMTE4LnB5CkBAIC0wLDAgKzEsMTk2IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY3R5cGVzIGltcG9ydCAqCitpbXBvcnQgcmUsIHN5cworCitpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgorICAgIFRISVNfRU5ESUFOID0gIjwiCisgICAgT1RIRVJfRU5ESUFOID0gIj4iCitlbHNlOgorICAgIFRISVNfRU5ESUFOID0gIj4iCisgICAgT1RIRVJfRU5ESUFOID0gIjwiCisKK2RlZiBub3JtYWxpemUoZm9ybWF0KToKKyAgICAjIFJlbW92ZSBjdXJyZW50IGVuZGlhbiBzcGVjaWZpZXIgYW5kIHdoaXRlIHNwYWNlIGZyb20gYSBmb3JtYXQKKyAgICAjIHN0cmluZworICAgIGlmIGZvcm1hdCBpcyBOb25lOgorICAgICAgICByZXR1cm4gIiIKKyAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShPVEhFUl9FTkRJQU4sIFRISVNfRU5ESUFOKQorICAgIHJldHVybiByZS5zdWIociJccyIsICIiLCBmb3JtYXQpCisKK2NsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfbmF0aXZlX3R5cGVzKHNlbGYpOgorICAgICAgICBmb3IgdHAsIGZtdCwgc2hhcGUsIGl0ZW10cCBpbiBuYXRpdmVfdHlwZXM6CisgICAgICAgICAgICBvYiA9IHRwKCkKKyAgICAgICAgICAgIHYgPSBtZW1vcnl2aWV3KG9iKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm9ybWFsaXplKHYuZm9ybWF0KSwgbm9ybWFsaXplKGZtdCkpCisgICAgICAgICAgICAgICAgaWYgc2hhcGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpLCBzaGFwZVswXSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2KSAqIHNpemVvZihpdGVtdHApLCBzaXplb2Yob2IpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5pdGVtc2l6ZSwgc2l6ZW9mKGl0ZW10cCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnNoYXBlLCBzaGFwZSkKKyAgICAgICAgICAgICAgICAjIGN0eXBlcyBvYmplY3QgYWx3YXlzIGhhdmUgYSBub24tc3RyaWRlZCBtZW1vcnkgYmxvY2sKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYuc3RyaWRlcywgTm9uZSkKKyAgICAgICAgICAgICAgICAjIHRoZXkgYXJlIGFsd2F5cyByZWFkL3dyaXRlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh2LnJlYWRvbmx5KQorCisgICAgICAgICAgICAgICAgaWYgdi5zaGFwZToKKyAgICAgICAgICAgICAgICAgICAgbiA9IDEKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRpbSBpbiB2LnNoYXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4gKiBkaW0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuICogdi5pdGVtc2l6ZSwgbGVuKHYudG9ieXRlcygpKSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAjIHNvIHRoYXQgd2UgY2FuIHNlZSB0aGUgZmFpbGluZyB0eXBlCisgICAgICAgICAgICAgICAgcHJpbnQodHApCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiB0ZXN0X2VuZGlhbl90eXBlcyhzZWxmKToKKyAgICAgICAgZm9yIHRwLCBmbXQsIHNoYXBlLCBpdGVtdHAgaW4gZW5kaWFuX3R5cGVzOgorICAgICAgICAgICAgb2IgPSB0cCgpCisgICAgICAgICAgICB2ID0gbWVtb3J5dmlldyhvYikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYuZm9ybWF0LCBmbXQpCisgICAgICAgICAgICAgICAgaWYgc2hhcGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpLCBzaGFwZVswXSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2KSAqIHNpemVvZihpdGVtdHApLCBzaXplb2Yob2IpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi5pdGVtc2l6ZSwgc2l6ZW9mKGl0ZW10cCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnNoYXBlLCBzaGFwZSkKKyAgICAgICAgICAgICAgICAjIGN0eXBlcyBvYmplY3QgYWx3YXlzIGhhdmUgYSBub24tc3RyaWRlZCBtZW1vcnkgYmxvY2sKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYuc3RyaWRlcywgTm9uZSkKKyAgICAgICAgICAgICAgICAjIHRoZXkgYXJlIGFsd2F5cyByZWFkL3dyaXRlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh2LnJlYWRvbmx5KQorCisgICAgICAgICAgICAgICAgaWYgdi5zaGFwZToKKyAgICAgICAgICAgICAgICAgICAgbiA9IDEKKyAgICAgICAgICAgICAgICAgICAgZm9yIGRpbSBpbiB2LnNoYXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4gKiBkaW0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCBsZW4odikpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgIyBzbyB0aGF0IHdlIGNhbiBzZWUgdGhlIGZhaWxpbmcgdHlwZQorICAgICAgICAgICAgICAgIHByaW50KHRwKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyMgZGVmaW5lIHNvbWUgc3RydWN0dXJlIGNsYXNzZXMKKworY2xhc3MgUG9pbnQoU3RydWN0dXJlKToKKyAgICBfZmllbGRzXyA9IFsoIngiLCBjX2xvbmcpLCAoInkiLCBjX2xvbmcpXQorCitjbGFzcyBQYWNrZWRQb2ludChTdHJ1Y3R1cmUpOgorICAgIF9wYWNrXyA9IDIKKyAgICBfZmllbGRzXyA9IFsoIngiLCBjX2xvbmcpLCAoInkiLCBjX2xvbmcpXQorCitjbGFzcyBQb2ludDIoU3RydWN0dXJlKToKKyAgICBwYXNzCitQb2ludDIuX2ZpZWxkc18gPSBbKCJ4IiwgY19sb25nKSwgKCJ5IiwgY19sb25nKV0KKworY2xhc3MgRW1wdHlTdHJ1Y3QoU3RydWN0dXJlKToKKyAgICBfZmllbGRzXyA9IFtdCisKK2NsYXNzIGFVbmlvbihVbmlvbik6CisgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19pbnQpXQorCitjbGFzcyBJbmNvbXBsZXRlKFN0cnVjdHVyZSk6CisgICAgcGFzcworCitjbGFzcyBDb21wbGV0ZShTdHJ1Y3R1cmUpOgorICAgIHBhc3MKK1BDb21wbGV0ZSA9IFBPSU5URVIoQ29tcGxldGUpCitDb21wbGV0ZS5fZmllbGRzXyA9IFsoImEiLCBjX2xvbmcpXQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoaXMgdGFibGUgY29udGFpbnMgZm9ybWF0IHN0cmluZ3MgYXMgdGhleSBsb29rIG9uIGxpdHRsZSBlbmRpYW4KKyMgbWFjaGluZXMuICBUaGUgdGVzdCByZXBsYWNlcyAnPCcgd2l0aCAnPicgb24gYmlnIGVuZGlhbiBtYWNoaW5lcy4KKyMKK25hdGl2ZV90eXBlcyA9IFsKKyAgICAjIHR5cGUgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ICAgICAgICAgICAgICAgICAgc2hhcGUgICAgICAgICAgIGNhbGMgaXRlbXNpemUKKworICAgICMjIHNpbXBsZSB0eXBlcworCisgICAgKGNfY2hhciwgICAgICAgICAgICAgICAgICAgICI8YyIsICAgICAgICAgICAgICAgICAgIE5vbmUsICAgICAgICAgICBjX2NoYXIpLAorICAgIChjX2J5dGUsICAgICAgICAgICAgICAgICAgICAiPGIiLCAgICAgICAgICAgICAgICAgICBOb25lLCAgICAgICAgICAgY19ieXRlKSwKKyAgICAoY191Ynl0ZSwgICAgICAgICAgICAgICAgICAgIjxCIiwgICAgICAgICAgICAgICAgICAgTm9uZSwgICAgICAgICAgIGNfdWJ5dGUpLAorICAgIChjX3Nob3J0LCAgICAgICAgICAgICAgICAgICAiPGgiLCAgICAgICAgICAgICAgICAgICBOb25lLCAgICAgICAgICAgY19zaG9ydCksCisgICAgKGNfdXNob3J0LCAgICAgICAgICAgICAgICAgICI8SCIsICAgICAgICAgICAgICAgICAgIE5vbmUsICAgICAgICAgICBjX3VzaG9ydCksCisKKyAgICAjIGNfaW50IGFuZCBjX3VpbnQgbWF5IGJlIGFsaWFzZXMgdG8gY19sb25nCisgICAgIyhjX2ludCwgICAgICAgICAgICAgICAgICAgICAiPGkiLCAgICAgICAgICAgICAgICAgICBOb25lLCAgICAgICAgICAgY19pbnQpLAorICAgICMoY191aW50LCAgICAgICAgICAgICAgICAgICAgIjxJIiwgICAgICAgICAgICAgICAgICAgTm9uZSwgICAgICAgICAgIGNfdWludCksCisKKyAgICAoY19sb25nLCAgICAgICAgICAgICAgICAgICAgIjxsIiwgICAgICAgICAgICAgICAgICAgTm9uZSwgICAgICAgICAgIGNfbG9uZyksCisgICAgKGNfdWxvbmcsICAgICAgICAgICAgICAgICAgICI8TCIsICAgICAgICAgICAgICAgICAgIE5vbmUsICAgICAgICAgICBjX3Vsb25nKSwKKworICAgICMgY19sb25nbG9uZyBhbmQgY191bG9uZ2xvbmcgYXJlIGFsaWFzZXMgb24gNjQtYml0IHBsYXRmb3JtcworICAgICMoY19sb25nbG9uZywgICAgICAgICAgICAgICAgIjxxIiwgICAgICAgICAgICAgICAgICAgTm9uZSwgICAgICAgICAgIGNfbG9uZ2xvbmcpLAorICAgICMoY191bG9uZ2xvbmcsICAgICAgICAgICAgICAgIjxRIiwgICAgICAgICAgICAgICAgICAgTm9uZSwgICAgICAgICAgIGNfdWxvbmdsb25nKSwKKworICAgIChjX2Zsb2F0LCAgICAgICAgICAgICAgICAgICAiPGYiLCAgICAgICAgICAgICAgICAgICBOb25lLCAgICAgICAgICAgY19mbG9hdCksCisgICAgKGNfZG91YmxlLCAgICAgICAgICAgICAgICAgICI8ZCIsICAgICAgICAgICAgICAgICAgIE5vbmUsICAgICAgICAgICBjX2RvdWJsZSksCisgICAgIyBjX2xvbmdkb3VibGUgbWF5IGJlIGFuIGFsaWFzIHRvIGNfZG91YmxlCisKKyAgICAoY19ib29sLCAgICAgICAgICAgICAgICAgICAgIjw/IiwgICAgICAgICAgICAgICAgICAgTm9uZSwgICAgICAgICAgIGNfYm9vbCksCisgICAgKHB5X29iamVjdCwgICAgICAgICAgICAgICAgICI8TyIsICAgICAgICAgICAgICAgICAgIE5vbmUsICAgICAgICAgICBweV9vYmplY3QpLAorCisgICAgIyMgcG9pbnRlcnMKKworICAgIChQT0lOVEVSKGNfYnl0ZSksICAgICAgICAgICAiJjxiIiwgICAgICAgICAgICAgICAgICBOb25lLCAgICAgICAgICAgUE9JTlRFUihjX2J5dGUpKSwKKyAgICAoUE9JTlRFUihQT0lOVEVSKGNfbG9uZykpLCAgIiYmPGwiLCAgICAgICAgICAgICAgICAgTm9uZSwgICAgICAgICAgIFBPSU5URVIoUE9JTlRFUihjX2xvbmcpKSksCisKKyAgICAjIyBhcnJheXMgYW5kIHBvaW50ZXJzCisKKyAgICAoY19kb3VibGUgKiA0LCAgICAgICAgICAgICAgIig0KTxkIiwgICAgICAgICAgICAgICAgKDQsKSwgICAgICAgICAgIGNfZG91YmxlKSwKKyAgICAoY19mbG9hdCAqIDQgKiAzICogMiwgICAgICAgIigyLDMsNCk8ZiIsICAgICAgICAgICAgKDIsMyw0KSwgICAgICAgIGNfZmxvYXQpLAorICAgIChQT0lOVEVSKGNfc2hvcnQpICogMiwgICAgICAiKDIpJjxoIiwgICAgICAgICAgICAgICAoMiwpLCAgICAgICAgICAgUE9JTlRFUihjX3Nob3J0KSksCisgICAgKFBPSU5URVIoY19zaG9ydCkgKiAyICogMywgICIoMywyKSY8aCIsICAgICAgICAgICAgICgzLDIsKSwgICAgICAgICBQT0lOVEVSKGNfc2hvcnQpKSwKKyAgICAoUE9JTlRFUihjX3Nob3J0ICogMiksICAgICAgIiYoMik8aCIsICAgICAgICAgICAgICAgTm9uZSwgICAgICAgICAgIFBPSU5URVIoY19zaG9ydCkpLAorCisgICAgIyMgc3RydWN0dXJlcyBhbmQgdW5pb25zCisKKyAgICAoUG9pbnQsICAgICAgICAgICAgICAgICAgICAgIlR7PGw6eDo8bDp5On0iLCAgICAgICAgTm9uZSwgICAgICAgICAgIFBvaW50KSwKKyAgICAjIHBhY2tlZCBzdHJ1Y3R1cmVzIGRvIG5vdCBpbXBsZW1lbnQgdGhlIHBlcAorICAgIChQYWNrZWRQb2ludCwgICAgICAgICAgICAgICAiQiIsICAgICAgICAgICAgICAgICAgICBOb25lLCAgICAgICAgICAgUGFja2VkUG9pbnQpLAorICAgIChQb2ludDIsICAgICAgICAgICAgICAgICAgICAiVHs8bDp4OjxsOnk6fSIsICAgICAgICBOb25lLCAgICAgICAgICAgUG9pbnQyKSwKKyAgICAoRW1wdHlTdHJ1Y3QsICAgICAgICAgICAgICAgIlR7fSIsICAgICAgICAgICAgICAgICAgTm9uZSwgICAgICAgICAgIEVtcHR5U3RydWN0KSwKKyAgICAjIHRoZSBwZXAgZG9lcyd0IHN1cHBvcnQgdW5pb25zCisgICAgKGFVbmlvbiwgICAgICAgICAgICAgICAgICAgICJCIiwgICAgICAgICAgICAgICAgICAgIE5vbmUsICAgICAgICAgICBhVW5pb24pLAorCisgICAgIyMgcG9pbnRlciB0byBpbmNvbXBsZXRlIHN0cnVjdHVyZQorICAgIChJbmNvbXBsZXRlLCAgICAgICAgICAgICAgICAiQiIsICAgICAgICAgICAgICAgICAgICBOb25lLCAgICAgICAgICAgSW5jb21wbGV0ZSksCisgICAgKFBPSU5URVIoSW5jb21wbGV0ZSksICAgICAgICImQiIsICAgICAgICAgICAgICAgICAgIE5vbmUsICAgICAgICAgICBQT0lOVEVSKEluY29tcGxldGUpKSwKKworICAgICMgJ0NvbXBsZXRlJyBpcyBhIHN0cnVjdHVyZSB0aGF0IHN0YXJ0cyBpbmNvbXBsZXRlLCBidXQgaXMgY29tcGxldGVkIGFmdGVyIHRoZQorICAgICMgcG9pbnRlciB0eXBlIHRvIGl0IGhhcyBiZWVuIGNyZWF0ZWQuCisgICAgKENvbXBsZXRlLCAgICAgICAgICAgICAgICAgICJUezxsOmE6fSIsICAgICAgICAgICAgIE5vbmUsICAgICAgICAgICBDb21wbGV0ZSksCisgICAgIyBVbmZvcnR1bmF0ZWx5IHRoZSBwb2ludGVyIGZvcm1hdCBzdHJpbmcgaXMgbm90IGZpeGVkLi4uCisgICAgKFBPSU5URVIoQ29tcGxldGUpLCAgICAgICAgICImQiIsICAgICAgICAgICAgICAgICAgIE5vbmUsICAgICAgICAgICBQT0lOVEVSKENvbXBsZXRlKSksCisKKyAgICAjIyBvdGhlcgorCisgICAgIyBmdW5jdGlvbiBzaWduYXR1cmVzIGFyZSBub3QgaW1wbGVtZW50ZWQKKyAgICAoQ0ZVTkNUWVBFKE5vbmUpLCAgICAgICAgICAgIlh7fSIsICAgICAgICAgICAgICAgICAgTm9uZSwgICAgICAgICAgIENGVU5DVFlQRShOb25lKSksCisKKyAgICBdCisKK2NsYXNzIEJFUG9pbnQoQmlnRW5kaWFuU3RydWN0dXJlKToKKyAgICBfZmllbGRzXyA9IFsoIngiLCBjX2xvbmcpLCAoInkiLCBjX2xvbmcpXQorCitjbGFzcyBMRVBvaW50KExpdHRsZUVuZGlhblN0cnVjdHVyZSk6CisgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19sb25nKSwgKCJ5IiwgY19sb25nKV0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBUaGlzIHRhYmxlIGNvbnRhaW5zIGZvcm1hdCBzdHJpbmdzIGFzIHRoZXkgcmVhbGx5IGxvb2ssIG9uIGJvdGggYmlnCisjIGFuZCBsaXR0bGUgZW5kaWFuIG1hY2hpbmVzLgorIworZW5kaWFuX3R5cGVzID0gWworICAgIChCRVBvaW50LCAgICAgICAgICAgICAgICAgICAiVHs+bDp4Oj5sOnk6fSIsICAgICAgICBOb25lLCAgICAgICAgICAgQkVQb2ludCksCisgICAgKExFUG9pbnQsICAgICAgICAgICAgICAgICAgICJUezxsOng6PGw6eTp9IiwgICAgICAgIE5vbmUsICAgICAgICAgICBMRVBvaW50KSwKKyAgICAoUE9JTlRFUihCRVBvaW50KSwgICAgICAgICAgIiZUez5sOng6Pmw6eTp9IiwgICAgICAgTm9uZSwgICAgICAgICAgIFBPSU5URVIoQkVQb2ludCkpLAorICAgIChQT0lOVEVSKExFUG9pbnQpLCAgICAgICAgICAiJlR7PGw6eDo8bDp5On0iLCAgICAgICBOb25lLCAgICAgICAgICAgUE9JTlRFUihMRVBvaW50KSksCisgICAgXQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3BpY2tsaW5nLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3BpY2tsaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNmNiZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfcGlja2xpbmcucHkKQEAgLTAsMCArMSw4MyBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgcGlja2xlCitmcm9tIGN0eXBlcyBpbXBvcnQgKgoraW1wb3J0IF9jdHlwZXNfdGVzdAorZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisKK2NsYXNzIFgoU3RydWN0dXJlKToKKyAgICBfZmllbGRzXyA9IFsoImEiLCBjX2ludCksICgiYiIsIGNfZG91YmxlKV0KKyAgICBpbml0X2NhbGxlZCA9IDAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBYLmluaXRfY2FsbGVkICs9IDEKKyAgICAgICAgc2VsZi54ID0gNDIKKworY2xhc3MgWShYKToKKyAgICBfZmllbGRzXyA9IFsoInN0ciIsIGNfY2hhcl9wKV0KKworY2xhc3MgUGlja2xlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGR1bXBzKHNlbGYsIGl0ZW0pOgorICAgICAgICByZXR1cm4gcGlja2xlLmR1bXBzKGl0ZW0pCisKKyAgICBkZWYgbG9hZHMoc2VsZiwgaXRlbSk6CisgICAgICAgIHJldHVybiBwaWNrbGUubG9hZHMoaXRlbSkKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgZm9yIHNyYyBpbiBbCisgICAgICAgICAgICBjX2ludCg0MiksCisgICAgICAgICAgICBjX2RvdWJsZSgzLjE0KSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICBkc3QgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMoc3JjKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjLl9fZGljdF9fLCBkc3QuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbW9yeXZpZXcoc3JjKS50b2J5dGVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnl2aWV3KGRzdCkudG9ieXRlcygpKQorCisgICAgZGVmIHRlc3Rfc3RydWN0KHNlbGYpOgorICAgICAgICBYLmluaXRfY2FsbGVkID0gMAorCisgICAgICAgIHggPSBYKCkKKyAgICAgICAgeC5hID0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLmluaXRfY2FsbGVkLCAxKQorCisgICAgICAgIHkgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMoeCkpCisKKyAgICAgICAgIyBsb2FkcyBtdXN0IE5PVCBjYWxsIF9faW5pdF9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5pbml0X2NhbGxlZCwgMSkKKworICAgICAgICAjIGN0eXBlcyBpbnN0YW5jZXMgYXJlIGlkZW50aWNhbCB3aGVuIHRoZSBpbnN0YW5jZSBfX2RpY3RfXworICAgICAgICAjIGFuZCB0aGUgbWVtb3J5IGJ1ZmZlciBhcmUgaWRlbnRpY2FsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fX2RpY3RfXywgeC5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1vcnl2aWV3KHkpLnRvYnl0ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyh4KS50b2J5dGVzKCkpCisKKyAgICBkZWYgdGVzdF91bnBpY2thYmxlKHNlbGYpOgorICAgICAgICAjIGN0eXBlcyBvYmplY3RzIHRoYXQgYXJlIHBvaW50ZXJzIG9yIGNvbnRhaW4gcG9pbnRlcnMgYXJlCisgICAgICAgICMgdW5waWNrYWJsZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBzZWxmLmR1bXBzKFkoKSkpCisKKyAgICAgICAgcHJvdG90eXBlID0gQ0ZVTkNUWVBFKGNfaW50KQorCisgICAgICAgIGZvciBpdGVtIGluIFsKKyAgICAgICAgICAgIGNfY2hhcl9wKCksCisgICAgICAgICAgICBjX3djaGFyX3AoKSwKKyAgICAgICAgICAgIGNfdm9pZF9wKCksCisgICAgICAgICAgICBwb2ludGVyKGNfaW50KDQyKSksCisgICAgICAgICAgICBkbGwuX3Rlc3RmdW5jX3BfcCwKKyAgICAgICAgICAgIHByb3RvdHlwZShsYW1iZGE6IDQyKSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IHNlbGYuZHVtcHMoaXRlbSkpCisKKyAgICBkZWYgdGVzdF93Y2hhcihzZWxmKToKKyAgICAgICAgcGlja2xlLmR1bXBzKGNfY2hhcigieCIpKQorICAgICAgICAjIElzc3VlIDUwNDkKKyAgICAgICAgcGlja2xlLmR1bXBzKGNfd2NoYXIodSJ4IikpCisKK2NsYXNzIFBpY2tsZVRlc3RfMShQaWNrbGVUZXN0KToKKyAgICBkZWYgZHVtcHMoc2VsZiwgaXRlbSk6CisgICAgICAgIHJldHVybiBwaWNrbGUuZHVtcHMoaXRlbSwgMSkKKworY2xhc3MgUGlja2xlVGVzdF8yKFBpY2tsZVRlc3QpOgorICAgIGRlZiBkdW1wcyhzZWxmLCBpdGVtKToKKyAgICAgICAgcmV0dXJuIHBpY2tsZS5kdW1wcyhpdGVtLCAyKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3BvaW50ZXJzLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3BvaW50ZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjhjZTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfcG9pbnRlcnMucHkKQEAgLTAsMCArMSwxOTIgQEAKK2ltcG9ydCB1bml0dGVzdCwgc3lzCisKK2Zyb20gY3R5cGVzIGltcG9ydCAqCitpbXBvcnQgX2N0eXBlc190ZXN0CisKK2N0eXBlX3R5cGVzID0gW2NfYnl0ZSwgY191Ynl0ZSwgY19zaG9ydCwgY191c2hvcnQsIGNfaW50LCBjX3VpbnQsCisgICAgICAgICAgICAgICAgIGNfbG9uZywgY191bG9uZywgY19sb25nbG9uZywgY191bG9uZ2xvbmcsIGNfZG91YmxlLCBjX2Zsb2F0XQorcHl0aG9uX3R5cGVzID0gW2ludCwgaW50LCBpbnQsIGludCwgaW50LCBsb25nLAorICAgICAgICAgICAgICAgIGludCwgbG9uZywgbG9uZywgbG9uZywgZmxvYXQsIGZsb2F0XQorCitjbGFzcyBQb2ludGVyc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3BvaW50ZXJfY3Jhc2goc2VsZik6CisKKyAgICAgICAgY2xhc3MgQShQT0lOVEVSKGNfdWxvbmcpKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBQT0lOVEVSKGNfdWxvbmcpKGNfdWxvbmcoMjIpKQorICAgICAgICAjIFBvaW50ZXIgY2FuJ3Qgc2V0IGNvbnRlbnRzOiBoYXMgbm8gX3R5cGVfCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQSwgY191bG9uZygzMykpCisKKyAgICBkZWYgdGVzdF9wYXNzX3BvaW50ZXJzKHNlbGYpOgorICAgICAgICBkbGwgPSBDRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKyAgICAgICAgZnVuYyA9IGRsbC5fdGVzdGZ1bmNfcF9wCisgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfbG9uZworCisgICAgICAgIGkgPSBjX2ludCgxMjM0NTY3OCkKKyMjICAgICAgICBmdW5jLmFyZ3R5cGVzID0gKFBPSU5URVIoY19pbnQpLCkKKyAgICAgICAgYWRkcmVzcyA9IGZ1bmMoYnlyZWYoaSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY19pbnQuZnJvbV9hZGRyZXNzKGFkZHJlc3MpLnZhbHVlLCAxMjM0NTY3OCkKKworICAgICAgICBmdW5jLnJlc3R5cGUgPSBQT0lOVEVSKGNfaW50KQorICAgICAgICByZXMgPSBmdW5jKHBvaW50ZXIoaSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLmNvbnRlbnRzLnZhbHVlLCAxMjM0NTY3OCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMF0sIDEyMzQ1Njc4KQorCisgICAgZGVmIHRlc3RfY2hhbmdlX3BvaW50ZXJzKHNlbGYpOgorICAgICAgICBkbGwgPSBDRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKyAgICAgICAgZnVuYyA9IGRsbC5fdGVzdGZ1bmNfcF9wCisKKyAgICAgICAgaSA9IGNfaW50KDg3NjU0KQorICAgICAgICBmdW5jLnJlc3R5cGUgPSBQT0lOVEVSKGNfaW50KQorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gKFBPSU5URVIoY19pbnQpLCkKKworICAgICAgICByZXMgPSBmdW5jKHBvaW50ZXIoaSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzBdLCA4NzY1NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuY29udGVudHMudmFsdWUsIDg3NjU0KQorCisgICAgICAgICMgQyBjb2RlOiAqcmVzID0gNTQzNDUKKyAgICAgICAgcmVzWzBdID0gNTQzNDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLnZhbHVlLCA1NDM0NSkKKworICAgICAgICAjIEMgY29kZToKKyAgICAgICAgIyAgIGludCB4ID0gMTIzMjE7CisgICAgICAgICMgICByZXMgPSAmeAorICAgICAgICByZXMuY29udGVudHMgPSBjX2ludCgxMjMyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLnZhbHVlLCA1NDM0NSkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrc193aXRoX3BvaW50ZXJzKHNlbGYpOgorICAgICAgICAjIGEgZnVuY3Rpb24gdHlwZSByZWNlaXZpbmcgYSBwb2ludGVyCisgICAgICAgIFBST1RPVFlQRSA9IENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihjX2ludCkpCisKKyAgICAgICAgc2VsZi5yZXN1bHQgPSBbXQorCisgICAgICAgIGRlZiBmdW5jKGFyZyk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisjIyAgICAgICAgICAgICAgICBwcmludCBhcmdbaV0sCisgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQuYXBwZW5kKGFyZ1tpXSkKKyMjICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGNhbGxiYWNrID0gUFJPVE9UWVBFKGZ1bmMpCisKKyAgICAgICAgZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisgICAgICAgICMgVGhpcyBmdW5jdGlvbiBleHBlY3RzIGEgZnVuY3Rpb24gcG9pbnRlciwKKyAgICAgICAgIyBhbmQgY2FsbHMgdGhpcyB3aXRoIGFuIGludGVnZXIgcG9pbnRlciBhcyBwYXJhbWV0ZXIuCisgICAgICAgICMgVGhlIGludCBwb2ludGVyIHBvaW50cyB0byBhIHRhYmxlIGNvbnRhaW5pbmcgdGhlIG51bWJlcnMgMS4uMTAKKyAgICAgICAgZG9pdCA9IGRsbC5fdGVzdGZ1bmNfY2FsbGJhY2tfd2l0aF9wb2ludGVyCisKKyMjICAgICAgICBpID0gY19pbnQoNDIpCisjIyAgICAgICAgY2FsbGJhY2soYnlyZWYoaSkpCisjIyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGkudmFsdWUgPT0gODQpCisKKyAgICAgICAgZG9pdChjYWxsYmFjaykKKyMjICAgICAgICBwcmludCBzZWxmLnJlc3VsdAorICAgICAgICBkb2l0KGNhbGxiYWNrKQorIyMgICAgICAgIHByaW50IHNlbGYucmVzdWx0CisKKyAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CisgICAgICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IGRlbGl0ZW0KKyAgICAgICAgZm9yIGN0LCBwdCBpbiB6aXAoY3R5cGVfdHlwZXMsIHB5dGhvbl90eXBlcyk6CisgICAgICAgICAgICBpID0gY3QoNDIpCisgICAgICAgICAgICBwID0gcG9pbnRlcihpKQorIyMgICAgICAgICAgICBwcmludCB0eXBlKHAuY29udGVudHMpLCBjdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocC5jb250ZW50cykgaXMgY3QpCisgICAgICAgICAgICAjIHAuY29udGVudHMgaXMgdGhlIHNhbWUgYXMgcFswXQorIyMgICAgICAgICAgICBwcmludCBwLmNvbnRlbnRzCisjIyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmNvbnRlbnRzID09IDQyKQorIyMgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocFswXSA9PSA0MikKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkZWxpdGVtLCBwLCAwKQorCisgICAgZGVmIHRlc3RfZnJvbV9hZGRyZXNzKHNlbGYpOgorICAgICAgICBmcm9tIGFycmF5IGltcG9ydCBhcnJheQorICAgICAgICBhID0gYXJyYXkoJ2knLCBbMTAwLCAyMDAsIDMwMCwgNDAwLCA1MDBdKQorICAgICAgICBhZGRyID0gYS5idWZmZXJfaW5mbygpWzBdCisKKyAgICAgICAgcCA9IFBPSU5URVIoUE9JTlRFUihjX2ludCkpCisjIyAgICAgICAgcHJpbnQgZGlyKHApCisjIyAgICAgICAgcHJpbnQgcC5mcm9tX2FkZHJlc3MKKyMjICAgICAgICBwcmludCBwLmZyb21fYWRkcmVzcyhhZGRyKVswXVswXQorCisgICAgZGVmIHRlc3Rfb3RoZXIoc2VsZik6CisgICAgICAgIGNsYXNzIFRhYmxlKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImMiLCBjX2ludCldCisKKyAgICAgICAgcHQgPSBwb2ludGVyKFRhYmxlKDEsIDIsIDMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHQuY29udGVudHMuYSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwdC5jb250ZW50cy5iLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB0LmNvbnRlbnRzLmMsIDMpCisKKyAgICAgICAgcHQuY29udGVudHMuYyA9IDMzCisKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IF9wb2ludGVyX3R5cGVfY2FjaGUKKyAgICAgICAgZGVsIF9wb2ludGVyX3R5cGVfY2FjaGVbVGFibGVdCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgcCA9IHBvaW50ZXIoY19pbnQoNDIpKQorICAgICAgICAjIEFsdGhvdWdoIGEgcG9pbnRlciBjYW4gYmUgaW5kZXhlZCwgaXQgaGEgbm8gbGVuZ3RoCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGVuLCBwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbMF0sIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuY29udGVudHMudmFsdWUsIDQyKQorCisgICAgZGVmIHRlc3RfY2hhcnBwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHRoYXQgYSBjaGFyYWN0ZXIgcG9pbnRlci10by1wb2ludGVyIGlzIGNvcnJlY3RseSBwYXNzZWQiIiIKKyAgICAgICAgZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisgICAgICAgIGZ1bmMgPSBkbGwuX3Rlc3RmdW5jX2NfcF9wCisgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfY2hhcl9wCisgICAgICAgIGFyZ3YgPSAoY19jaGFyX3AgKiAyKSgpCisgICAgICAgIGFyZ2MgPSBjX2ludCggMiApCisgICAgICAgIGFyZ3ZbMF0gPSAnaGVsbG8nCisgICAgICAgIGFyZ3ZbMV0gPSAnd29ybGQnCisgICAgICAgIHJlc3VsdCA9IGZ1bmMoIGJ5cmVmKGFyZ2MpLCBhcmd2ICkKKyAgICAgICAgYXNzZXJ0IHJlc3VsdCA9PSAnd29ybGQnLCByZXN1bHQKKworICAgIGRlZiB0ZXN0X2J1Z18xNDY3ODUyKHNlbGYpOgorICAgICAgICAjIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/ZnVuYz1kZXRhaWwmYXRpZD01MzIxNTQmYWlkPTE0Njc4NTImZ3JvdXBfaWQ9NzE3MDIKKyAgICAgICAgeCA9IGNfaW50KDUpCisgICAgICAgIGR1bW15ID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMzIwMDApOgorICAgICAgICAgICAgZHVtbXkuYXBwZW5kKGNfaW50KGkpKQorICAgICAgICB5ID0gY19pbnQoNikKKyAgICAgICAgcCA9IHBvaW50ZXIoeCkKKyAgICAgICAgcHAgPSBwb2ludGVyKHApCisgICAgICAgIHEgPSBwb2ludGVyKHkpCisgICAgICAgIHBwWzBdID0gcSAgICAgICAgICMgPD09CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFswXSwgNikKKyAgICBkZWYgdGVzdF9jX3ZvaWRfcChzZWxmKToKKyAgICAgICAgIyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmFpZD0xNTE4MTkwJmdyb3VwX2lkPTU0NzAmYXRpZD0xMDU0NzAKKyAgICAgICAgaWYgc2l6ZW9mKGNfdm9pZF9wKSA9PSA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3ZvaWRfcCgweEZGRkZGRkZGTCkudmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX3ZvaWRfcCgtMSkudmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfdm9pZF9wKDB4RkZGRkZGRkZGRkZGRkZGRkwpLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY192b2lkX3AoLTEpLnZhbHVlKQorICAgICAgICBlbGlmIHNpemVvZihjX3ZvaWRfcCkgPT0gODoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY192b2lkX3AoMHhGRkZGRkZGRkwpLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRkwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfdm9pZF9wKDB4RkZGRkZGRkZGRkZGRkZGRkwpLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY192b2lkX3AoLTEpLnZhbHVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3ZvaWRfcCgweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkwpLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY192b2lkX3AoLTEpLnZhbHVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY192b2lkX3AsIDMuMTQpICMgbWFrZSBzdXJlIGZsb2F0cyBhcmUgTk9UIGFjY2VwdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY192b2lkX3AsIG9iamVjdCgpKSAjIG5vciBvdGhlciBvYmplY3RzCisKKyAgICBkZWYgdGVzdF9wb2ludGVyc19ib29sKHNlbGYpOgorICAgICAgICAjIE5VTEwgcG9pbnRlcnMgaGF2ZSBhIGJvb2xlYW4gRmFsc2UgdmFsdWUsIG5vbi1OVUxMIHBvaW50ZXJzIFRydWUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9vbChQT0lOVEVSKGNfaW50KSgpKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9vbChwb2ludGVyKGNfaW50KCkpKSwgVHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvb2woQ0ZVTkNUWVBFKE5vbmUpKDApKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9vbChDRlVOQ1RZUEUoTm9uZSkoNDIpKSwgVHJ1ZSkKKworICAgICAgICAjIENPTSBtZXRob2RzIGFyZSBib29sZWFuIFRydWU6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgbXRoID0gV0lORlVOQ1RZUEUoTm9uZSkoNDIsICJuYW1lIiwgKCksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvb2wobXRoKSwgVHJ1ZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9wcm90b3R5cGVzLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3Byb3RvdHlwZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDliYTY1NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9wcm90b3R5cGVzLnB5CkBAIC0wLDAgKzEsMjIxIEBACitmcm9tIGN0eXBlcyBpbXBvcnQgKgoraW1wb3J0IHVuaXR0ZXN0CisKKyMgSU1QT1JUQU5UIElORk86CisjCisjIENvbnNpZGVyIHRoaXMgY2FsbDoKKyMgICAgZnVuYy5yZXN0eXBlID0gY19jaGFyX3AKKyMgICAgZnVuYyhjX2NoYXJfcCgiMTIzIikpCisjIEl0IHJldHVybnMKKyMgICAgIjEyMyIKKyMKKyMgV0hZIElTIFRISVMgU08/CisjCisjIGFyZ3VtZW50IHR1cGxlIChjX2NoYXJfcCgiMTIzIiksICkgaXMgZGVzdHJveWVkIGFmdGVyIHRoZSBmdW5jdGlvbgorIyBmdW5jIGlzIGNhbGxlZCwgYnV0IE5PVCBiZWZvcmUgdGhlIHJlc3VsdCBpcyBhY3R1YWxseSBidWlsdC4KKyMKKyMgSWYgdGhlIGFyZ2xpc3Qgd291bGQgYmUgZGVzdHJveWVkIEJFRk9SRSB0aGUgcmVzdWx0IGhhcyBiZWVuIGJ1aWx0LAorIyB0aGUgY19jaGFyX3AoIjEyMyIpIG9iamVjdCB3b3VsZCBhbHJlYWR5IGhhdmUgYSB6ZXJvIHJlZmNvdW50LAorIyBhbmQgdGhlIHBvaW50ZXIgcGFzc2VkIHRvIChhbmQgcmV0dXJuZWQgYnkpIHRoZSBmdW5jdGlvbiB3b3VsZAorIyBwcm9iYWJseSBwb2ludCB0byBkZWFsbG9jYXRlZCBzcGFjZS4KKyMKKyMgSW4gdGhpcyBjYXNlLCB0aGVyZSB3b3VsZCBoYXZlIHRvIGJlIGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIHRvIHRoZSBhcmd1bWVudC4uLgorCitpbXBvcnQgX2N0eXBlc190ZXN0Cit0ZXN0ZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisKKyMgUmV0dXJuIG1hY2hpbmUgYWRkcmVzcyBgYWAgYXMgYSAocG9zc2libHkgbG9uZykgbm9uLW5lZ2F0aXZlIGludGVnZXIuCisjIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDIuNSwgaWQoYW55dGhpbmcpIGlzIGFsd2F5cyBub24tbmVnYXRpdmUsIGFuZAorIyB0aGUgY3R5cGVzIGFkZHJlc3NvZigpIGluaGVyaXRzIHRoYXQgdmlhIFB5TG9uZ19Gcm9tVm9pZFB0cigpLgorZGVmIHBvc2l0aXZlX2FkZHJlc3MoYSk6CisgICAgaWYgYSA+PSAwOgorICAgICAgICByZXR1cm4gYQorICAgICMgVmlldyB0aGUgYml0cyBpbiBgYWAgYXMgdW5zaWduZWQgaW5zdGVhZC4KKyAgICBpbXBvcnQgc3RydWN0CisgICAgbnVtX2JpdHMgPSBzdHJ1Y3QuY2FsY3NpemUoIlAiKSAqIDggIyBudW0gYml0cyBpbiBuYXRpdmUgbWFjaGluZSBhZGRyZXNzCisgICAgYSArPSAxTCA8PCBudW1fYml0cworICAgIGFzc2VydCBhID49IDAKKyAgICByZXR1cm4gYQorCitkZWYgY193YnVmZmVyKGluaXQpOgorICAgIG4gPSBsZW4oaW5pdCkgKyAxCisgICAgcmV0dXJuIChjX3djaGFyICogbikoKmluaXQpCisKK2NsYXNzIENoYXJQb2ludGVyc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcAorICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX2xvbmcKKyAgICAgICAgZnVuYy5hcmd0eXBlcyA9IE5vbmUKKworICAgIGRlZiB0ZXN0X3BhcmFtZmxhZ3Moc2VsZik6CisgICAgICAgICMgZnVuY3Rpb24gcmV0dXJucyBjX3ZvaWRfcCByZXN1bHQsCisgICAgICAgICMgYW5kIGhhcyBhIHJlcXVpcmVkIHBhcmFtZXRlciBuYW1lZCAnaW5wdXQnCisgICAgICAgIHByb3RvdHlwZSA9IENGVU5DVFlQRShjX3ZvaWRfcCwgY192b2lkX3ApCisgICAgICAgIGZ1bmMgPSBwcm90b3R5cGUoKCJfdGVzdGZ1bmNfcF9wIiwgdGVzdGRsbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgxLCAiaW5wdXQiKSwpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmMoKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBkZXRhaWxzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZGV0YWlscyksICJyZXF1aXJlZCBhcmd1bWVudCAnaW5wdXQnIG1pc3NpbmciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUeXBlRXJyb3Igbm90IHJhaXNlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKE5vbmUpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoaW5wdXQ9Tm9uZSksIE5vbmUpCisKKworICAgIGRlZiB0ZXN0X2ludF9wb2ludGVyX2FyZyhzZWxmKToKKyAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcAorICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX2xvbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBmdW5jKDApKQorCisgICAgICAgIGNpID0gY19pbnQoMCkKKworICAgICAgICBmdW5jLmFyZ3R5cGVzID0gUE9JTlRFUihjX2ludCksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXRpdmVfYWRkcmVzcyhhZGRyZXNzb2YoY2kpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpdmVfYWRkcmVzcyhmdW5jKGJ5cmVmKGNpKSkpKQorCisgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBjX2NoYXJfcCwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRFcnJvciwgZnVuYywgYnlyZWYoY2kpKQorCisgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBQT0lOVEVSKGNfc2hvcnQpLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBcmd1bWVudEVycm9yLCBmdW5jLCBieXJlZihjaSkpCisKKyAgICAgICAgZnVuYy5hcmd0eXBlcyA9IFBPSU5URVIoY19kb3VibGUpLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBcmd1bWVudEVycm9yLCBmdW5jLCBieXJlZihjaSkpCisKKyAgICBkZWYgdGVzdF9QT0lOVEVSX2NfY2hhcl9hcmcoc2VsZik6CisgICAgICAgIGZ1bmMgPSB0ZXN0ZGxsLl90ZXN0ZnVuY19wX3AKKyAgICAgICAgZnVuYy5yZXN0eXBlID0gY19jaGFyX3AKKyAgICAgICAgZnVuYy5hcmd0eXBlcyA9IFBPSU5URVIoY19jaGFyKSwKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoY19jaGFyX3AoTm9uZSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfY2hhcl9wKCIxMjMiKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX2J1ZmZlcigiMTIzIikpKQorICAgICAgICBjYSA9IGNfY2hhcigiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImEiLCBmdW5jKHBvaW50ZXIoY2EpKVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGZ1bmMoYnlyZWYoY2EpKVswXSkKKworICAgIGRlZiB0ZXN0X2NfY2hhcl9wX2FyZyhzZWxmKToKKyAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcAorICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX2NoYXJfcAorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gY19jaGFyX3AsCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKCIxMjMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfY2hhcl9wKE5vbmUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX2NoYXJfcCgiMTIzIikpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoY19idWZmZXIoIjEyMyIpKSkKKyAgICAgICAgY2EgPSBjX2NoYXIoImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImEiLCBmdW5jKGJ5cmVmKGNhKSlbMF0pCisKKyAgICBkZWYgdGVzdF9jX3ZvaWRfcF9hcmcoc2VsZik6CisgICAgICAgIGZ1bmMgPSB0ZXN0ZGxsLl90ZXN0ZnVuY19wX3AKKyAgICAgICAgZnVuYy5yZXN0eXBlID0gY19jaGFyX3AKKyAgICAgICAgZnVuYy5hcmd0eXBlcyA9IGNfdm9pZF9wLAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYygiMTIzIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoY19jaGFyX3AoIjEyMyIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfY2hhcl9wKE5vbmUpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfYnVmZmVyKCIxMjMiKSkpCisgICAgICAgIGNhID0gY19jaGFyKCJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGZ1bmMocG9pbnRlcihjYSkpWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhieXJlZihjYSkpWzBdKQorCisgICAgICAgIGZ1bmMoYnlyZWYoY19pbnQoKSkpCisgICAgICAgIGZ1bmMocG9pbnRlcihjX2ludCgpKSkKKyAgICAgICAgZnVuYygoY19pbnQgKiAzKSgpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfd2NoYXJfcAorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiMTIzIiwgZnVuYyhjX3djaGFyX3AodSIxMjMiKSkpCisKKyAgICBkZWYgdGVzdF9pbnN0YW5jZShzZWxmKToKKyAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcAorICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX3ZvaWRfcAorCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBfYXNfcGFyYW1ldGVyXyA9IE5vbmUKKworICAgICAgICBmdW5jLmFyZ3R5cGVzID0gY192b2lkX3AsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhYKCkpKQorCisgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhYKCkpKQorCit0cnk6CisgICAgY193Y2hhcgorZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBwYXNzCitlbHNlOgorICAgIGNsYXNzIFdDaGFyUG9pbnRlcnNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcAorICAgICAgICAgICAgZnVuYy5yZXN0eXBlID0gY19pbnQKKyAgICAgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBOb25lCisKKworICAgICAgICBkZWYgdGVzdF9QT0lOVEVSX2Nfd2NoYXJfYXJnKHNlbGYpOgorICAgICAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcAorICAgICAgICAgICAgZnVuYy5yZXN0eXBlID0gY193Y2hhcl9wCisgICAgICAgICAgICBmdW5jLmFyZ3R5cGVzID0gUE9JTlRFUihjX3djaGFyKSwKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKE5vbmUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IjEyMyIsIGZ1bmModSIxMjMiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhjX3djaGFyX3AoTm9uZSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IjEyMyIsIGZ1bmMoY193Y2hhcl9wKHUiMTIzIikpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiMTIzIiwgZnVuYyhjX3didWZmZXIodSIxMjMiKSkpCisgICAgICAgICAgICBjYSA9IGNfd2NoYXIoImEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ImEiLCBmdW5jKHBvaW50ZXIoY2EpKVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJhIiwgZnVuYyhieXJlZihjYSkpWzBdKQorCisgICAgICAgIGRlZiB0ZXN0X2Nfd2NoYXJfcF9hcmcoc2VsZik6CisgICAgICAgICAgICBmdW5jID0gdGVzdGRsbC5fdGVzdGZ1bmNfcF9wCisgICAgICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX3djaGFyX3AKKyAgICAgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBjX3djaGFyX3AsCisKKyAgICAgICAgICAgIGNfd2NoYXJfcC5mcm9tX3BhcmFtKHUiMTIzIikKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKE5vbmUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyh1IjEyMyIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfd2NoYXJfcCgiMTIzIikpKQorCisgICAgICAgICAgICAjIFhYWCBDdXJyZW50bHksIHRoZXNlIHJhaXNlIFR5cGVFcnJvcnMsIGFsdGhvdWdoIHRoZXkgc2hvdWxkbid0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3didWZmZXIoIjEyMyIpKSkKKyAgICAgICAgICAgIGNhID0gY193Y2hhcigiYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhieXJlZihjYSkpWzBdKQorCitjbGFzcyBBcnJheVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBmdW5jID0gdGVzdGRsbC5fdGVzdGZ1bmNfYWk4CisgICAgICAgIGZ1bmMucmVzdHlwZSA9IFBPSU5URVIoY19pbnQpCisgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBjX2ludCAqIDgsCisKKyAgICAgICAgZnVuYygoY19pbnQgKiA4KSgxLCAyLCAzLCA0LCA1LCA2LCA3LCA4KSkKKworICAgICAgICAjIFRoaXMgZGlkIGNyYXNoIGJlZm9yZToKKworICAgICAgICBkZWYgZnVuYygpOiBwYXNzCisgICAgICAgIENGVU5DVFlQRShOb25lLCBjX2ludCAqIDMpKGZ1bmMpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9weXRob25fYXBpLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3B5dGhvbl9hcGkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4MTcwZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9weXRob25fYXBpLnB5CkBAIC0wLDAgKzEsOTAgQEAKK2Zyb20gY3R5cGVzIGltcG9ydCAqCitpbXBvcnQgdW5pdHRlc3QsIHN5cworZnJvbSBjdHlwZXMudGVzdCBpbXBvcnQgaXNfcmVzb3VyY2VfZW5hYmxlZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoaXMgc2VjdGlvbiBzaG91bGQgYmUgbW92ZWQgaW50byBjdHlwZXNcX19pbml0X18ucHksIHdoZW4gaXQncyByZWFkeS4KKworZnJvbSBfY3R5cGVzIGltcG9ydCBQeU9ial9Gcm9tUHRyCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZnJvbSBzeXMgaW1wb3J0IGdldHJlZmNvdW50IGFzIGdyYworaWYgc3lzLnZlcnNpb25faW5mbyA+ICgyLCA0KToKKyAgICBjX3B5X3NzaXplX3QgPSBjX3NpemVfdAorZWxzZToKKyAgICBjX3B5X3NzaXplX3QgPSBjX2ludAorCitjbGFzcyBQeXRob25BUElUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9QeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmKToKKyAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUgPSBweXRob25hcGkuUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUKKworICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZS5yZXN0eXBlID0gcHlfb2JqZWN0CisgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplLmFyZ3R5cGVzID0gY19jaGFyX3AsIGNfcHlfc3NpemVfdAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlTdHJpbmdfRnJvbVN0cmluZ0FuZFNpemUoImFiY2RlZmdoaSIsIDMpLCAiYWJjIikKKworICAgIGRlZiB0ZXN0X1B5U3RyaW5nX0Zyb21TdHJpbmcoc2VsZik6CisgICAgICAgIHB5dGhvbmFwaS5QeVN0cmluZ19Gcm9tU3RyaW5nLnJlc3R5cGUgPSBweV9vYmplY3QKKyAgICAgICAgcHl0aG9uYXBpLlB5U3RyaW5nX0Zyb21TdHJpbmcuYXJndHlwZXMgPSAoY19jaGFyX3AsKQorCisgICAgICAgIHMgPSAiYWJjIgorICAgICAgICByZWZjbnQgPSBncmMocykKKyAgICAgICAgcHlvYiA9IHB5dGhvbmFwaS5QeVN0cmluZ19Gcm9tU3RyaW5nKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKHMpLCByZWZjbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgcHlvYikKKyAgICAgICAgZGVsIHB5b2IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMocyksIHJlZmNudCkKKworICAgIGlmIGlzX3Jlc291cmNlX2VuYWJsZWQoInJlZmNvdW50Iik6CisgICAgICAgICMgVGhpcyB0ZXN0IGlzIHVucmVsaWFibGUsIGJlY2F1c2UgaXQgaXMgcG9zc2libGUgdGhhdCBjb2RlIGluCisgICAgICAgICMgdW5pdHRlc3QgY2hhbmdlcyB0aGUgcmVmY291bnQgb2YgdGhlICc0MicgaW50ZWdlci4gIFNvLCBpdAorICAgICAgICAjIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisgICAgICAgIGRlZiB0ZXN0X1B5SW50X0xvbmcoc2VsZik6CisgICAgICAgICAgICByZWY0MiA9IGdyYyg0MikKKyAgICAgICAgICAgIHB5dGhvbmFwaS5QeUludF9Gcm9tTG9uZy5yZXN0eXBlID0gcHlfb2JqZWN0CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5dGhvbmFwaS5QeUludF9Gcm9tTG9uZyg0MiksIDQyKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdyYyg0MiksIHJlZjQyKQorCisgICAgICAgICAgICBweXRob25hcGkuUHlJbnRfQXNMb25nLmFyZ3R5cGVzID0gKHB5X29iamVjdCwpCisgICAgICAgICAgICBweXRob25hcGkuUHlJbnRfQXNMb25nLnJlc3R5cGUgPSBjX2xvbmcKKworICAgICAgICAgICAgcmVzID0gcHl0aG9uYXBpLlB5SW50X0FzTG9uZyg0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKHJlcyksIHJlZjQyICsgMSkKKyAgICAgICAgICAgIGRlbCByZXMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKDQyKSwgcmVmNDIpCisKKyAgICBkZWYgdGVzdF9QeU9ial9Gcm9tUHRyKHNlbGYpOgorICAgICAgICBzID0gImFiYyBkZWYgZ2hpIGprbCIKKyAgICAgICAgcmVmID0gZ3JjKHMpCisgICAgICAgICMgaWQocHl0aG9uLW9iamVjdCkgaXMgdGhlIGFkZHJlc3MKKyAgICAgICAgcHlvYmogPSBQeU9ial9Gcm9tUHRyKGlkKHMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocyBpcyBweW9iaikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdyYyhzKSwgcmVmICsgMSkKKyAgICAgICAgZGVsIHB5b2JqCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKHMpLCByZWYpCisKKyAgICBkZWYgdGVzdF9QeU9TX3NucHJpbnRmKHNlbGYpOgorICAgICAgICBQeU9TX3NucHJpbnRmID0gcHl0aG9uYXBpLlB5T1Nfc25wcmludGYKKyAgICAgICAgUHlPU19zbnByaW50Zi5hcmd0eXBlcyA9IFBPSU5URVIoY19jaGFyKSwgY19zaXplX3QsIGNfY2hhcl9wCisKKyAgICAgICAgYnVmID0gY19idWZmZXIoMjU2KQorICAgICAgICBQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJIZWxsbyBmcm9tICVzIiwgImN0eXBlcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAiSGVsbG8gZnJvbSBjdHlwZXMiKQorCisgICAgICAgIFB5T1Nfc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIkhlbGxvIGZyb20gJXMiLCAiY3R5cGVzIiwgMSwgMiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJIZWxsbyBmcm9tIGN0eXBlcyIpCisKKyAgICAgICAgIyBub3QgZW5vdWdoIGFyZ3VtZW50cworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFB5T1Nfc25wcmludGYsIGJ1ZikKKworICAgIGRlZiB0ZXN0X3B5b2JqZWN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihweV9vYmplY3QoKSksICJweV9vYmplY3QoPE5VTEw+KSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihweV9vYmplY3QoNDIpKSwgInB5X29iamVjdCg0MikiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocHlfb2JqZWN0KG9iamVjdCkpLCAicHlfb2JqZWN0KCVyKSIgJSBvYmplY3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfcmFuZG9tX3RoaW5ncy5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9yYW5kb21fdGhpbmdzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMjE3YzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfcmFuZG9tX3RoaW5ncy5weQpAQCAtMCwwICsxLDc1IEBACitmcm9tIGN0eXBlcyBpbXBvcnQgKgoraW1wb3J0IHVuaXR0ZXN0LCBzeXMKKworZGVmIGNhbGxiYWNrX2Z1bmMoYXJnKToKKyAgICA0MiAvLyBhcmcKKyAgICByYWlzZSBWYWx1ZUVycm9yKGFyZykKKworaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisKKyAgICBjbGFzcyBjYWxsX2Z1bmN0aW9uX1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgIyBfY3R5cGVzLmNhbGxfZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBhbmQgcHJpdmF0ZSwgYnV0IHVzZWQgYnkKKyAgICAgICAgIyBHYXJ5IEJpc2hwJ3MgcmVhZGxpbmUgbW9kdWxlLiAgSWYgd2UgaGF2ZSBpdCwgd2UgbXVzdCB0ZXN0IGl0IGFzIHdlbGwuCisKKyAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICBmcm9tIF9jdHlwZXMgaW1wb3J0IGNhbGxfZnVuY3Rpb24KKyAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5Mb2FkTGlicmFyeUEucmVzdHlwZSA9IGNfdm9pZF9wCisgICAgICAgICAgICB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MuYXJndHlwZXMgPSBjX3ZvaWRfcCwgY19jaGFyX3AKKyAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5yZXN0eXBlID0gY192b2lkX3AKKworICAgICAgICAgICAgaGRsbCA9IHdpbmRsbC5rZXJuZWwzMi5Mb2FkTGlicmFyeUEoImtlcm5lbDMyIikKKyAgICAgICAgICAgIGZ1bmNhZGRyID0gd2luZGxsLmtlcm5lbDMyLkdldFByb2NBZGRyZXNzKGhkbGwsICJHZXRNb2R1bGVIYW5kbGVBIikKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxsX2Z1bmN0aW9uKGZ1bmNhZGRyLCAoTm9uZSwpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKE5vbmUpKQorCitjbGFzcyBDYWxsYmFja1RyYWNiYWNrVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgV2hlbiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluIGEgY3R5cGVzIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgQworICAgICMgY29kZSBwcmludHMgYSB0cmFjZWJhY2suCisgICAgIworICAgICMgVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhlIGV4Y2VwdGlvbiB0eXBlcyAqYW5kKiB0aGUgZXhjZXB0aW9uCisgICAgIyB2YWx1ZSBpcyBwcmludGVkIGNvcnJlY3RseS4KKyAgICAjCisgICAgIyBDaGFuZ2VkIGluIDAuOS4zOiBObyBsb25nZXIgaXMgJyhpbiBjYWxsYmFjayknIHByZXBlbmRlZCB0byB0aGUKKyAgICAjIGVycm9yIG1lc3NhZ2UgLSBpbnN0ZWFkIGEgYWRkaXRpb25hbCBmcmFtZSBmb3IgdGhlIEMgY29kZSBpcworICAgICMgY3JlYXRlZCwgdGhlbiBhIGZ1bGwgdHJhY2ViYWNrIHByaW50ZWQuICBXaGVuIFN5c3RlbUV4aXQgaXMKKyAgICAjIHJhaXNlZCBpbiBhIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuCisKKyAgICBkZWYgY2FwdHVyZV9zdGRlcnIoc2VsZiwgZnVuYywgKmFyZ3MsICoqa3cpOgorICAgICAgICAjIGhlbHBlciAtIGNhbGwgZnVuY3Rpb24gJ2Z1bmMnLCBhbmQgcmV0dXJuIHRoZSBjYXB0dXJlZCBzdGRlcnIKKyAgICAgICAgaW1wb3J0IFN0cmluZ0lPCisgICAgICAgIG9sZF9zdGRlcnIgPSBzeXMuc3RkZXJyCisgICAgICAgIGxvZ2dlciA9IHN5cy5zdGRlcnIgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3cpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc3RkZXJyID0gb2xkX3N0ZGVycgorICAgICAgICByZXR1cm4gbG9nZ2VyLmdldHZhbHVlKCkKKworICAgIGRlZiB0ZXN0X1ZhbHVlRXJyb3Ioc2VsZik6CisgICAgICAgIGNiID0gQ0ZVTkNUWVBFKGNfaW50LCBjX2ludCkoY2FsbGJhY2tfZnVuYykKKyAgICAgICAgb3V0ID0gc2VsZi5jYXB0dXJlX3N0ZGVycihjYiwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnNwbGl0bGluZXMoKVstMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWYWx1ZUVycm9yOiA0MiIpCisKKyAgICBkZWYgdGVzdF9JbnRlZ2VyRGl2aXNpb25FcnJvcihzZWxmKToKKyAgICAgICAgY2IgPSBDRlVOQ1RZUEUoY19pbnQsIGNfaW50KShjYWxsYmFja19mdW5jKQorICAgICAgICBvdXQgPSBzZWxmLmNhcHR1cmVfc3RkZXJyKGNiLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zcGxpdGxpbmVzKClbLTFdWzoxOV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJaZXJvRGl2aXNpb25FcnJvcjogIikKKworICAgIGRlZiB0ZXN0X0Zsb2F0RGl2aXNpb25FcnJvcihzZWxmKToKKyAgICAgICAgY2IgPSBDRlVOQ1RZUEUoY19pbnQsIGNfZG91YmxlKShjYWxsYmFja19mdW5jKQorICAgICAgICBvdXQgPSBzZWxmLmNhcHR1cmVfc3RkZXJyKGNiLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnNwbGl0bGluZXMoKVstMV1bOjE5XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlplcm9EaXZpc2lvbkVycm9yOiAiKQorCisgICAgZGVmIHRlc3RfVHlwZUVycm9yRGl2aXNpb25FcnJvcihzZWxmKToKKyAgICAgICAgY2IgPSBDRlVOQ1RZUEUoY19pbnQsIGNfY2hhcl9wKShjYWxsYmFja19mdW5jKQorICAgICAgICBvdXQgPSBzZWxmLmNhcHR1cmVfc3RkZXJyKGNiLCAic3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnNwbGl0bGluZXMoKVstMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUeXBlRXJyb3I6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIG9wZXJhbmQgdHlwZShzKSBmb3IgLy86ICdpbnQnIGFuZCAnc3RyJyIpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfcmVmY291bnRzLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3JlZmNvdW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWE4MWFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3JlZmNvdW50cy5weQpAQCAtMCwwICsxLDk4IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBjdHlwZXMKK2ltcG9ydCBnYworCitNeUNhbGxiYWNrID0gY3R5cGVzLkNGVU5DVFlQRShjdHlwZXMuY19pbnQsIGN0eXBlcy5jX2ludCkKK090aGVyQ2FsbGJhY2sgPSBjdHlwZXMuQ0ZVTkNUWVBFKGN0eXBlcy5jX2ludCwgY3R5cGVzLmNfaW50LCBjdHlwZXMuY191bG9uZ2xvbmcpCisKK2ltcG9ydCBfY3R5cGVzX3Rlc3QKK2RsbCA9IGN0eXBlcy5DRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKworY2xhc3MgUmVmY291bnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICBmcm9tIHN5cyBpbXBvcnQgZ2V0cmVmY291bnQgYXMgZ3JjCisKKyAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfY2FsbGJhY2tfaV9pZgorICAgICAgICBmLnJlc3R5cGUgPSBjdHlwZXMuY19pbnQKKyAgICAgICAgZi5hcmd0eXBlcyA9IFtjdHlwZXMuY19pbnQsIE15Q2FsbGJhY2tdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKHZhbHVlKToKKyAgICAgICAgICAgICNwcmludCAiY2FsbGVkIGJhY2sgd2l0aCIsIHZhbHVlCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdyYyhjYWxsYmFjayksIDIpCisgICAgICAgIGNiID0gTXlDYWxsYmFjayhjYWxsYmFjaykKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZ3JjKGNhbGxiYWNrKSA+IDIpCisgICAgICAgIHJlc3VsdCA9IGYoLTEwLCBjYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIC0xOCkKKyAgICAgICAgY2IgPSBOb25lCisKKyAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoY2FsbGJhY2spLCAyKQorCisKKyAgICBkZWYgdGVzdF9yZWZjb3VudChzZWxmKToKKyAgICAgICAgZnJvbSBzeXMgaW1wb3J0IGdldHJlZmNvdW50IGFzIGdyYworICAgICAgICBkZWYgZnVuYygqYXJncyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgdGhpcyBpcyB0aGUgc3RhbmRhcmQgcmVmY291bnQgZm9yIGZ1bmMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoZnVuYyksIDIpCisKKyAgICAgICAgIyB0aGUgQ0Z1bmNQdHIgaW5zdGFuY2UgaG9sZHMgYXRyIGxlYXN0IG9uZSByZWZjb3VudCBvbiBmdW5jOgorICAgICAgICBmID0gT3RoZXJDYWxsYmFjayhmdW5jKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ3JjKGZ1bmMpID4gMikKKworICAgICAgICAjIGFuZCBtYXkgcmVsZWFzZSBpdCBhZ2FpbgorICAgICAgICBkZWwgZgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ3JjKGZ1bmMpID49IDIpCisKKyAgICAgICAgIyBidXQgbm93IGl0IG11c3QgYmUgZ29uZQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdyYyhmdW5jKSA9PSAyKQorCisgICAgICAgIGNsYXNzIFgoY3R5cGVzLlN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBPdGhlckNhbGxiYWNrKV0KKyAgICAgICAgeCA9IFgoKQorICAgICAgICB4LmEgPSBPdGhlckNhbGxiYWNrKGZ1bmMpCisKKyAgICAgICAgIyB0aGUgQ0Z1bmNQdHIgaW5zdGFuY2UgaG9sZHMgYXRyIGxlYXN0IG9uZSByZWZjb3VudCBvbiBmdW5jOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ3JjKGZ1bmMpID4gMikKKworICAgICAgICAjIGFuZCBtYXkgcmVsZWFzZSBpdCBhZ2FpbgorICAgICAgICBkZWwgeAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ3JjKGZ1bmMpID49IDIpCisKKyAgICAgICAgIyBhbmQgbm93IGl0IG11c3QgYmUgZ29uZSBhZ2FpbgorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoZnVuYyksIDIpCisKKyAgICAgICAgZiA9IE90aGVyQ2FsbGJhY2soZnVuYykKKworICAgICAgICAjIHRoZSBDRnVuY1B0ciBpbnN0YW5jZSBob2xkcyBhdHIgbGVhc3Qgb25lIHJlZmNvdW50IG9uIGZ1bmM6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShncmMoZnVuYykgPiAyKQorCisgICAgICAgICMgY3JlYXRlIGEgY3ljbGUKKyAgICAgICAgZi5jeWNsZSA9IGYKKworICAgICAgICBkZWwgZgorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoZnVuYyksIDIpCisKK2NsYXNzIEFub3RoZXJMZWFrKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgaW1wb3J0IHN5cworCisgICAgICAgIHByb3RvID0gY3R5cGVzLkNGVU5DVFlQRShjdHlwZXMuY19pbnQsIGN0eXBlcy5jX2ludCwgY3R5cGVzLmNfaW50KQorICAgICAgICBkZWYgZnVuYyhhLCBiKToKKyAgICAgICAgICAgIHJldHVybiBhICogYiAqIDIKKyAgICAgICAgZiA9IHByb3RvKGZ1bmMpCisKKyAgICAgICAgYSA9IHN5cy5nZXRyZWZjb3VudChjdHlwZXMuY19pbnQpCisgICAgICAgIGYoMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQoY3R5cGVzLmNfaW50KSwgYSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9yZXByLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3JlcHIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTljYzU1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9yZXByLnB5CkBAIC0wLDAgKzEsMjkgQEAKK2Zyb20gY3R5cGVzIGltcG9ydCAqCitpbXBvcnQgdW5pdHRlc3QKKworc3ViY2xhc3NlcyA9IFtdCitmb3IgYmFzZSBpbiBbY19ieXRlLCBjX3Nob3J0LCBjX2ludCwgY19sb25nLCBjX2xvbmdsb25nLAorICAgICAgICBjX3VieXRlLCBjX3VzaG9ydCwgY191aW50LCBjX3Vsb25nLCBjX3Vsb25nbG9uZywKKyAgICAgICAgY19mbG9hdCwgY19kb3VibGUsIGNfbG9uZ2RvdWJsZSwgY19ib29sXToKKyAgICBjbGFzcyBYKGJhc2UpOgorICAgICAgICBwYXNzCisgICAgc3ViY2xhc3Nlcy5hcHBlbmQoWCkKKworY2xhc3MgWChjX2NoYXIpOgorICAgIHBhc3MKKworIyBUaGlzIHRlc3QgY2hlY2tzIGlmIHRoZSBfX3JlcHJfXyBpcyBjb3JyZWN0IGZvciBzdWJjbGFzc2VzIG9mIHNpbXBsZSB0eXBlcworCitjbGFzcyBSZXByVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbnVtYmVycyhzZWxmKToKKyAgICAgICAgZm9yIHR5cCBpbiBzdWJjbGFzc2VzOgorICAgICAgICAgICAgYmFzZSA9IHR5cC5fX2Jhc2VzX19bMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGJhc2UoNDIpKS5zdGFydHN3aXRoKGJhc2UuX19uYW1lX18pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiPFggb2JqZWN0IGF0IiwgcmVwcih0eXAoNDIpKVs6MTJdKQorCisgICAgZGVmIHRlc3RfY2hhcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiY19jaGFyKCd4JykiLCByZXByKGNfY2hhcigneCcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiPFggb2JqZWN0IGF0IiwgcmVwcihYKCd4JykpWzoxMl0pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfcmV0dXJuZnVuY3B0cnMucHkgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfcmV0dXJuZnVuY3B0cnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgyN2YwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9yZXR1cm5mdW5jcHRycy5weQpAQCAtMCwwICsxLDY1IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY3R5cGVzIGltcG9ydCAqCitpbXBvcnQgb3MKKworaW1wb3J0IF9jdHlwZXNfdGVzdAorCitjbGFzcyBSZXR1cm5GdW5jUHRyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfd2l0aF9wcm90b3R5cGUoc2VsZik6CisgICAgICAgICMgVGhlIF9jdHlwZXNfdGVzdCBzaGFyZWQgbGliL2RsbCBleHBvcnRzIHF1aXRlIHNvbWUgZnVuY3Rpb25zIGZvciB0ZXN0aW5nLgorICAgICAgICAjIFRoZSBnZXRfc3RyY2hyIGZ1bmN0aW9uIHJldHVybnMgYSAqcG9pbnRlciogdG8gdGhlIEMgc3RyY2hyIGZ1bmN0aW9uLgorICAgICAgICBkbGwgPSBDRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKyAgICAgICAgZ2V0X3N0cmNociA9IGRsbC5nZXRfc3RyY2hyCisgICAgICAgIGdldF9zdHJjaHIucmVzdHlwZSA9IENGVU5DVFlQRShjX2NoYXJfcCwgY19jaGFyX3AsIGNfY2hhcikKKyAgICAgICAgc3RyY2hyID0gZ2V0X3N0cmNocigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyY2hyKCJhYmNkZWYiLCAiYiIpLCAiYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmNocigiYWJjZGVmIiwgIngiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRFcnJvciwgc3RyY2hyLCAiYWJjZGVmIiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdHJjaHIsICJhYmNkZWYiKQorCisgICAgZGVmIHRlc3Rfd2l0aG91dF9wcm90b3R5cGUoc2VsZik6CisgICAgICAgIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQorICAgICAgICBnZXRfc3RyY2hyID0gZGxsLmdldF9zdHJjaHIKKyAgICAgICAgIyB0aGUgZGVmYXVsdCAnY19pbnQnIHdvdWxkIG5vdCB3b3JrIG9uIHN5c3RlbXMgd2hlcmUgc2l6ZW9mKGludCkgIT0gc2l6ZW9mKHZvaWQgKikKKyAgICAgICAgZ2V0X3N0cmNoci5yZXN0eXBlID0gY192b2lkX3AKKyAgICAgICAgYWRkciA9IGdldF9zdHJjaHIoKQorICAgICAgICAjIF9DRnVuY1B0ciBpbnN0YW5jZXMgYXJlIG5vdyBjYWxsYWJsZSB3aXRoIGFuIGludGVnZXIgYXJndW1lbnQKKyAgICAgICAgIyB3aGljaCBkZW5vdGVzIGEgZnVuY3Rpb24gYWRkcmVzczoKKyAgICAgICAgc3RyY2hyID0gQ0ZVTkNUWVBFKGNfY2hhcl9wLCBjX2NoYXJfcCwgY19jaGFyKShhZGRyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyY2hyKCJhYmNkZWYiLCAiYiIpLCAiYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmNocigiYWJjZGVmIiwgIngiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRFcnJvciwgc3RyY2hyLCAiYWJjZGVmIiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdHJjaHIsICJhYmNkZWYiKQorCisgICAgZGVmIHRlc3RfZnJvbV9kbGwoc2VsZik6CisgICAgICAgIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQorICAgICAgICAjIF9DRnVuY1B0ciBpbnN0YW5jZXMgYXJlIG5vdyBjYWxsYWJsZSB3aXRoIGEgdHVwbGUgYXJndW1lbnQKKyAgICAgICAgIyB3aGljaCBkZW5vdGVzIGEgZnVuY3Rpb24gbmFtZSBhbmQgYSBkbGw6CisgICAgICAgIHN0cmNociA9IENGVU5DVFlQRShjX2NoYXJfcCwgY19jaGFyX3AsIGNfY2hhcikoKCJteV9zdHJjaHIiLCBkbGwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyY2hyKGIiYWJjZGVmIiwgYiJiIiksICJiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyY2hyKGIiYWJjZGVmIiwgYiJ4IiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50RXJyb3IsIHN0cmNociwgYiJhYmNkZWYiLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3RyY2hyLCBiImFiY2RlZiIpCisKKyAgICAjIElzc3VlIDYwODM6IFJlZmVyZW5jZSBjb3VudGluZyBidWcKKyAgICBkZWYgdGVzdF9mcm9tX2RsbF9yZWZjb3VudChzZWxmKToKKyAgICAgICAgY2xhc3MgQmFkU2VxdWVuY2UodHVwbGUpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgaWYga2V5ID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAibXlfc3RyY2hyIgorICAgICAgICAgICAgICAgIGlmIGtleSA9PSAxOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorCisgICAgICAgICMgX0NGdW5jUHRyIGluc3RhbmNlcyBhcmUgbm93IGNhbGxhYmxlIHdpdGggYSB0dXBsZSBhcmd1bWVudAorICAgICAgICAjIHdoaWNoIGRlbm90ZXMgYSBmdW5jdGlvbiBuYW1lIGFuZCBhIGRsbDoKKyAgICAgICAgc3RyY2hyID0gQ0ZVTkNUWVBFKGNfY2hhcl9wLCBjX2NoYXJfcCwgY19jaGFyKSgKKyAgICAgICAgICAgICAgICBCYWRTZXF1ZW5jZSgoIm15X3N0cmNociIsIENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyY2hyKGIiYWJjZGVmIiwgYiJiIiksICJiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyY2hyKGIiYWJjZGVmIiwgYiJ4IiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50RXJyb3IsIHN0cmNociwgYiJhYmNkZWYiLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3RyY2hyLCBiImFiY2RlZiIpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3Rfc2ltcGxlc3ViY2xhc3Nlcy5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9zaW1wbGVzdWJjbGFzc2VzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNzNmYjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3Rfc2ltcGxlc3ViY2xhc3Nlcy5weQpAQCAtMCwwICsxLDU3IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY3R5cGVzIGltcG9ydCAqCisKK2NsYXNzIE15SW50KGNfaW50KToKKyAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHR5cGUob3RoZXIpICE9IE15SW50OgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIHJldHVybiBjbXAoc2VsZi52YWx1ZSwgb3RoZXIudmFsdWUpCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOiAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisgICAgICAgIHJldHVybiBoYXNoKHNlbGYudmFsdWUpCisKK2NsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY29tcGFyZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNeUludCgzKSwgTXlJbnQoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoTXlJbnQoNDIpLCBNeUludCg0MykpCisKKyAgICBkZWYgdGVzdF9pZ25vcmVfcmV0dmFsKHNlbGYpOgorICAgICAgICAjIFRlc3QgaWYgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGNhbGxiYWNrIGlzIGlnbm9yZWQKKyAgICAgICAgIyBpZiByZXN0eXBlIGlzIE5vbmUKKyAgICAgICAgcHJvdG8gPSBDRlVOQ1RZUEUoTm9uZSkKKyAgICAgICAgZGVmIGZ1bmMoKToKKyAgICAgICAgICAgIHJldHVybiAoMSwgImFiYyIsIE5vbmUpCisKKyAgICAgICAgY2IgPSBwcm90byhmdW5jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGNiKCkpCisKKworICAgIGRlZiB0ZXN0X2ludF9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgYXJncyA9IFtdCisgICAgICAgIGRlZiBmdW5jKGFyZyk6CisgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpCisgICAgICAgICAgICByZXR1cm4gYXJnCisKKyAgICAgICAgY2IgPSBDRlVOQ1RZUEUoTm9uZSwgTXlJbnQpKGZ1bmMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBjYig0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShhcmdzWy0xXSksIE15SW50KQorCisgICAgICAgIGNiID0gQ0ZVTkNUWVBFKGNfaW50LCBjX2ludCkoZnVuYykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBjYig0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShhcmdzWy0xXSksIGludCkKKworICAgIGRlZiB0ZXN0X2ludF9zdHJ1Y3Qoc2VsZik6CisgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIE15SW50KV0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKS54LCBNeUludCgpKQorCisgICAgICAgIHMgPSBYKCkKKyAgICAgICAgcy54ID0gTXlJbnQoNDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLngsIE15SW50KDQyKSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9zaXplcy5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9zaXplcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWI1ZTk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3NpemVzLnB5CkBAIC0wLDAgKzEsMzQgQEAKKyMgVGVzdCBzcGVjaWZpY2FsbHktc2l6ZWQgY29udGFpbmVycy4KKworZnJvbSBjdHlwZXMgaW1wb3J0ICoKKworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKKworY2xhc3MgU2l6ZXNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfOChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzaXplb2YoY19pbnQ4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzaXplb2YoY191aW50OCkpCisKKyAgICBkZWYgdGVzdF8xNihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzaXplb2YoY19pbnQxNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc2l6ZW9mKGNfdWludDE2KSkKKworICAgIGRlZiB0ZXN0XzMyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQsIHNpemVvZihjX2ludDMyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0LCBzaXplb2YoY191aW50MzIpKQorCisgICAgZGVmIHRlc3RfNjQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOCwgc2l6ZW9mKGNfaW50NjQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDgsIHNpemVvZihjX3VpbnQ2NCkpCisKKyAgICBkZWYgdGVzdF9zaXplX3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGNfdm9pZF9wKSwgc2l6ZW9mKGNfc2l6ZV90KSkKKworICAgIGRlZiB0ZXN0X3NzaXplX3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGNfdm9pZF9wKSwgc2l6ZW9mKGNfc3NpemVfdCkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9zbGljaW5nLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3NsaWNpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU2MzJlYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9zbGljaW5nLnB5CkBAIC0wLDAgKzEsMTc4IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY3R5cGVzIGltcG9ydCAqCisKK2ltcG9ydCBfY3R5cGVzX3Rlc3QKKworY2xhc3MgU2xpY2VzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2dldHNsaWNlX2NpbnQoc2VsZik6CisgICAgICAgIGEgPSAoY19pbnQgKiAxMDApKCp4cmFuZ2UoMTEwMCwgMTIwMCkpCisgICAgICAgIGIgPSByYW5nZSgxMTAwLCAxMjAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMDoyXSwgYlswOjJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMDoyOl0sIGJbMDoyOl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGEpLCBsZW4oYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs1OjddLCBiWzU6N10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs1Ojc6XSwgYls1Ojc6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWy0xXSwgYlstMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6XSwgYls6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzo6XSwgYls6Ol0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVsxMDo6LTFdLCBiWzEwOjotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVszMDoyMDotMV0sIGJbMzA6MjA6LTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOjEyOjZdLCBiWzoxMjo2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzI6Njo0XSwgYlsyOjY6NF0pCisKKyAgICAgICAgYVswOjVdID0gcmFuZ2UoNSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVswOjVdLCByYW5nZSg1LCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVswOjU6XSwgcmFuZ2UoNSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbNDo6LTFdLCByYW5nZSg5LCA0LCAtMSkpCisKKyAgICBkZWYgdGVzdF9zZXRzbGljZV9jaW50KHNlbGYpOgorICAgICAgICBhID0gKGNfaW50ICogMTAwKSgqeHJhbmdlKDExMDAsIDEyMDApKQorICAgICAgICBiID0gcmFuZ2UoMTEwMCwgMTIwMCkKKworICAgICAgICBhWzMyOjQ3XSA9IHJhbmdlKDMyLCA0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzMyOjQ3XSwgcmFuZ2UoMzIsIDQ3KSkKKyAgICAgICAgYVszMjo0N10gPSByYW5nZSgxMzIsIDE0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzMyOjQ3Ol0sIHJhbmdlKDEzMiwgMTQ3KSkKKyAgICAgICAgYVs0NjozMTotMV0gPSByYW5nZSgyMzIsIDI0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzMyOjQ3OjFdLCByYW5nZSgyNDYsIDIzMSwgLTEpKQorCisgICAgICAgIGFbMzI6NDddID0gcmFuZ2UoMTEzMiwgMTE0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzpdLCBiKQorICAgICAgICBhWzMyOjQ3OjddID0gcmFuZ2UoMykKKyAgICAgICAgYlszMjo0Nzo3XSA9IHJhbmdlKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6XSwgYikKKyAgICAgICAgYVszMzo6LTNdID0gcmFuZ2UoMTIpCisgICAgICAgIGJbMzM6Oi0zXSA9IHJhbmdlKDEyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOl0sIGIpCisKKyAgICAgICAgZnJvbSBvcGVyYXRvciBpbXBvcnQgc2V0c2xpY2UsIHNldGl0ZW0KKworICAgICAgICAjIFR5cGVFcnJvcjogaW50IGV4cGVjdGVkIGluc3RlYWQgb2Ygc3RyIGluc3RhbmNlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0c2xpY2UsIGEsIDAsIDUsICJhYmNkZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0aXRlbSwgYSwgc2xpY2UoMCwgNSksICJhYmNkZSIpCisgICAgICAgICMgVHlwZUVycm9yOiBpbnQgZXhwZWN0ZWQgaW5zdGVhZCBvZiBzdHIgaW5zdGFuY2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRzbGljZSwgYSwgMCwgNSwgWyJhIiwgImIiLCAiYyIsICJkIiwgImUiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRpdGVtLCBhLCBzbGljZSgwLCA1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWyJhIiwgImIiLCAiYyIsICJkIiwgImUiXSkKKyAgICAgICAgIyBUeXBlRXJyb3I6IGludCBleHBlY3RlZCBpbnN0ZWFkIG9mIGZsb2F0IGluc3RhbmNlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0c2xpY2UsIGEsIDAsIDUsIFsxLCAyLCAzLCA0LCAzLjE0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRpdGVtLCBhLCBzbGljZSgwLCA1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWzEsIDIsIDMsIDQsIDMuMTRdKQorICAgICAgICAjIFZhbHVlRXJyb3I6IENhbiBvbmx5IGFzc2lnbiBzZXF1ZW5jZSBvZiBzYW1lIHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0c2xpY2UsIGEsIDAsIDUsIHJhbmdlKDMyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0aXRlbSwgYSwgc2xpY2UoMCwgNSksIHJhbmdlKDMyKSkKKworICAgIGRlZiB0ZXN0X2NoYXJfcHRyKHNlbGYpOgorICAgICAgICBzID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorCisgICAgICAgIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQorICAgICAgICBkbGwubXlfc3RyZHVwLnJlc3R5cGUgPSBQT0lOVEVSKGNfY2hhcikKKyAgICAgICAgZGxsLm15X2ZyZWUucmVzdHlwZSA9IE5vbmUKKyAgICAgICAgcmVzID0gZGxsLm15X3N0cmR1cChzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1s6bGVuKHMpXSwgcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbOjNdLCBzWzozXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbOmxlbihzKTpdLCBzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1tsZW4ocyktMTotMTotMV0sIHNbOjotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzW2xlbihzKS0xOjU6LTddLCBzWzo1Oi03XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMDotMTotMV0sIHNbMDo6LTFdKQorCisgICAgICAgIGltcG9ydCBvcGVyYXRvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5nZXRpdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXMsIHNsaWNlKE5vbmUsIE5vbmUsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5nZXRpdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXMsIHNsaWNlKDAsIE5vbmUsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5nZXRpdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXMsIHNsaWNlKE5vbmUsIDUsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLCBzbGljZSgtNSwgTm9uZSwgTm9uZSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRzbGljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLCAwLCA1LCB1ImFiY2RlIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRpdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXMsIHNsaWNlKDAsIDUpLCB1ImFiY2RlIikKKyAgICAgICAgZGxsLm15X2ZyZWUocmVzKQorCisgICAgICAgIGRsbC5teV9zdHJkdXAucmVzdHlwZSA9IFBPSU5URVIoY19ieXRlKQorICAgICAgICByZXMgPSBkbGwubXlfc3RyZHVwKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyldLCByYW5nZShvcmQoImEiKSwgb3JkKCJ6IikrMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyk6XSwgcmFuZ2Uob3JkKCJhIiksIG9yZCgieiIpKzEpKQorICAgICAgICBkbGwubXlfZnJlZShyZXMpCisKKyAgICBkZWYgdGVzdF9jaGFyX3B0cl93aXRoX2ZyZWUoc2VsZik6CisgICAgICAgIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQorICAgICAgICBzID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorCisgICAgICAgIGNsYXNzIGFsbG9jYXRlZF9jX2NoYXJfcChjX2NoYXJfcCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGxsLm15X2ZyZWUucmVzdHlwZSA9IE5vbmUKKyAgICAgICAgZGVmIGVycmNoZWNrKHJlc3VsdCwgZnVuYywgYXJncyk6CisgICAgICAgICAgICByZXR2YWwgPSByZXN1bHQudmFsdWUKKyAgICAgICAgICAgIGRsbC5teV9mcmVlKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiByZXR2YWwKKworICAgICAgICBkbGwubXlfc3RyZHVwLnJlc3R5cGUgPSBhbGxvY2F0ZWRfY19jaGFyX3AKKyAgICAgICAgZGxsLm15X3N0cmR1cC5lcnJjaGVjayA9IGVycmNoZWNrCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlcyA9IGRsbC5teV9zdHJkdXAocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIGRsbC5teV9zdHJkdXAuZXJyY2hlY2sKKworCisgICAgZGVmIHRlc3RfY2hhcl9hcnJheShzZWxmKToKKyAgICAgICAgcyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwwIgorCisgICAgICAgIHAgPSAoY19jaGFyICogMjcpKCpzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbOl0sIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFs6Ol0sIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFs6Oi0xXSwgc1s6Oi0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWzU6Oi0yXSwgc1s1OjotMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsyOjU6LTNdLCBzWzI6NTotM10pCisKKworICAgIHRyeToKKyAgICAgICAgY193Y2hhcgorICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBkZWYgdGVzdF93Y2hhcl9wdHIoc2VsZik6CisgICAgICAgICAgICBzID0gdSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwwIgorCisgICAgICAgICAgICBkbGwgPSBDRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKyAgICAgICAgICAgIGRsbC5teV93Y3NkdXAucmVzdHlwZSA9IFBPSU5URVIoY193Y2hhcikKKyAgICAgICAgICAgIGRsbC5teV93Y3NkdXAuYXJndHlwZXMgPSBQT0lOVEVSKGNfd2NoYXIpLAorICAgICAgICAgICAgZGxsLm15X2ZyZWUucmVzdHlwZSA9IE5vbmUKKyAgICAgICAgICAgIHJlcyA9IGRsbC5teV93Y3NkdXAocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyldLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbOmxlbihzKTpdLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbbGVuKHMpLTE6LTE6LTFdLCBzWzo6LTFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbbGVuKHMpLTE6NTotN10sIHNbOjU6LTddKQorCisgICAgICAgICAgICBpbXBvcnQgb3BlcmF0b3IKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0c2xpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMsIDAsIDUsIHUiYWJjZGUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRpdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLCBzbGljZSgwLCA1KSwgdSJhYmNkZSIpCisgICAgICAgICAgICBkbGwubXlfZnJlZShyZXMpCisKKyAgICAgICAgICAgIGlmIHNpemVvZihjX3djaGFyKSA9PSBzaXplb2YoY19zaG9ydCk6CisgICAgICAgICAgICAgICAgZGxsLm15X3djc2R1cC5yZXN0eXBlID0gUE9JTlRFUihjX3Nob3J0KQorICAgICAgICAgICAgZWxpZiBzaXplb2YoY193Y2hhcikgPT0gc2l6ZW9mKGNfaW50KToKKyAgICAgICAgICAgICAgICBkbGwubXlfd2NzZHVwLnJlc3R5cGUgPSBQT0lOVEVSKGNfaW50KQorICAgICAgICAgICAgZWxpZiBzaXplb2YoY193Y2hhcikgPT0gc2l6ZW9mKGNfbG9uZyk6CisgICAgICAgICAgICAgICAgZGxsLm15X3djc2R1cC5yZXN0eXBlID0gUE9JTlRFUihjX2xvbmcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgcmVzID0gZGxsLm15X3djc2R1cChzKQorICAgICAgICAgICAgdG1wbCA9IHJhbmdlKG9yZCgiYSIpLCBvcmQoInoiKSsxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbOmxlbihzKS0xXSwgdG1wbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyktMTpdLCB0bXBsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbbGVuKHMpLTI6LTE6LTFdLCB0bXBsWzo6LTFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbbGVuKHMpLTI6NTotN10sIHRtcGxbOjU6LTddKQorICAgICAgICAgICAgZGxsLm15X2ZyZWUocmVzKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3Rfc3RyaW5ncHRyLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3N0cmluZ3B0ci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmVkNThiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3N0cmluZ3B0ci5weQpAQCAtMCwwICsxLDc1IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY3R5cGVzIGltcG9ydCAqCisKK2ltcG9ydCBfY3R5cGVzX3Rlc3QKKworbGliID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisKK2NsYXNzIFN0cmluZ1B0clRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X19QT0lOVEVSX2NfY2hhcihzZWxmKToKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJzdHIiLCBQT0lOVEVSKGNfY2hhcikpXQorICAgICAgICB4ID0gWCgpCisKKyAgICAgICAgIyBOVUxMIHBvaW50ZXIgYWNjZXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGdldGF0dHIsIHguc3RyLCAiY29udGVudHMiKQorICAgICAgICBiID0gY19idWZmZXIoIkhlbGxvLCBXb3JsZCIpCisgICAgICAgIGZyb20gc3lzIGltcG9ydCBnZXRyZWZjb3VudCBhcyBncmMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoYiksIDIpCisgICAgICAgIHguc3RyID0gYgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdyYyhiKSwgMykKKworICAgICAgICAjIFBPSU5URVIoY19jaGFyKSBhbmQgUHl0aG9uIHN0cmluZyBpcyBOT1QgY29tcGF0aWJsZQorICAgICAgICAjIFBPSU5URVIoY19jaGFyKSBhbmQgY19idWZmZXIoKSBpcyBjb21wYXRpYmxlCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihiKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbaV0sIHguc3RyW2ldKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgeCwgInN0ciIsICJIZWxsbywgV29ybGQiKQorCisgICAgZGVmIHRlc3RfX2NfY2hhcl9wKHNlbGYpOgorICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoInN0ciIsIGNfY2hhcl9wKV0KKyAgICAgICAgeCA9IFgoKQorCisgICAgICAgICMgY19jaGFyX3AgYW5kIFB5dGhvbiBzdHJpbmcgaXMgY29tcGF0aWJsZQorICAgICAgICAjIGNfY2hhcl9wIGFuZCBjX2J1ZmZlciBpcyBOT1QgY29tcGF0aWJsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguc3RyLCBOb25lKQorICAgICAgICB4LnN0ciA9ICJIZWxsbywgV29ybGQiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5zdHIsICJIZWxsbywgV29ybGQiKQorICAgICAgICBiID0gY19idWZmZXIoIkhlbGxvLCBXb3JsZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgeCwgInN0ciIsIGIpCisKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9ucyhzZWxmKToKKyAgICAgICAgc3RyY2hyID0gbGliLm15X3N0cmNocgorICAgICAgICBzdHJjaHIucmVzdHlwZSA9IGNfY2hhcl9wCisKKyAgICAgICAgIyBjX2NoYXJfcCBhbmQgUHl0aG9uIHN0cmluZyBpcyBjb21wYXRpYmxlCisgICAgICAgICMgY19jaGFyX3AgYW5kIGNfYnVmZmVyIGFyZSBub3cgY29tcGF0aWJsZQorICAgICAgICBzdHJjaHIuYXJndHlwZXMgPSBjX2NoYXJfcCwgY19jaGFyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyY2hyKCJhYmNkZWYiLCAiYyIpLCAiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyY2hyKGNfYnVmZmVyKCJhYmNkZWYiKSwgImMiKSwgImNkZWYiKQorCisgICAgICAgICMgUE9JTlRFUihjX2NoYXIpIGFuZCBQeXRob24gc3RyaW5nIGlzIE5PVCBjb21wYXRpYmxlCisgICAgICAgICMgUE9JTlRFUihjX2NoYXIpIGFuZCBjX2J1ZmZlcigpIGlzIGNvbXBhdGlibGUKKyAgICAgICAgc3RyY2hyLmFyZ3R5cGVzID0gUE9JTlRFUihjX2NoYXIpLCBjX2NoYXIKKyAgICAgICAgYnVmID0gY19idWZmZXIoImFiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyY2hyKGJ1ZiwgImMiKSwgImNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmNocigiYWJjZGVmIiwgImMiKSwgImNkZWYiKQorCisgICAgICAgICMgWFhYIFRoZXNlIGNhbGxzIGFyZSBkYW5nZXJvdXMsIGJlY2F1c2UgdGhlIGZpcnN0IGFyZ3VtZW50CisgICAgICAgICMgdG8gc3RyY2hyIGlzIG5vIGxvbmdlciB2YWxpZCBhZnRlciB0aGUgZnVuY3Rpb24gcmV0dXJucyEKKyAgICAgICAgIyBTbyB3ZSBtdXN0IGtlZXAgYSByZWZlcmVuY2UgdG8gYnVmIHNlcGFyYXRlbHkKKworICAgICAgICBzdHJjaHIucmVzdHlwZSA9IFBPSU5URVIoY19jaGFyKQorICAgICAgICBidWYgPSBjX2J1ZmZlcigiYWJjZGVmIikKKyAgICAgICAgciA9IHN0cmNocihidWYsICJjIikKKyAgICAgICAgeCA9IHJbMF0sIHJbMV0sIHJbMl0sIHJbM10sIHJbNF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAoImMiLCAiZCIsICJlIiwgImYiLCAiXDAwMCIpKQorICAgICAgICBkZWwgYnVmCisgICAgICAgICMgeDEgd2lsbCBOT1QgYmUgdGhlIHNhbWUgYXMgeCwgdXN1YWxseToKKyAgICAgICAgeDEgPSByWzBdLCByWzFdLCByWzJdLCByWzNdLCByWzRdCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3Rfc3RyaW5ncy5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9zdHJpbmdzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NDVkMGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3Rfc3RyaW5ncy5weQpAQCAtMCwwICsxLDIyNSBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIGN0eXBlcyBpbXBvcnQgKgorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgU3RyaW5nQXJyYXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIEJVRiA9IGNfY2hhciAqIDQKKworICAgICAgICBidWYgPSBCVUYoImEiLCAiYiIsICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi5yYXcsICJhYmNcMDAwIikKKworICAgICAgICBidWYudmFsdWUgPSAiQUJDRCIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJBQkNEIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYucmF3LCAiQUJDRCIpCisKKyAgICAgICAgYnVmLnZhbHVlID0gIngiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnJhdywgInhcMDAwQ0QiKQorCisgICAgICAgIGJ1ZlsxXSA9ICJaIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgInhaQ0QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi5yYXcsICJ4WkNEIikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZXRhdHRyLCBidWYsICJ2YWx1ZSIsICJhYWFhYWFhYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgYnVmLCAidmFsdWUiLCA0MikKKworICAgIGRlZiB0ZXN0X2NfYnVmZmVyX3ZhbHVlKHNlbGYsIG1lbW9yeXZpZXc9bWVtb3J5dmlldyk6CisgICAgICAgIGJ1ZiA9IGNfYnVmZmVyKDMyKQorCisgICAgICAgIGJ1Zi52YWx1ZSA9ICJIZWxsbywgV29ybGQiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAiSGVsbG8sIFdvcmxkIikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIGJ1ZiwgInZhbHVlIiwgbWVtb3J5dmlldygiSGVsbG8sIFdvcmxkIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgYnVmLCAidmFsdWUiLCBtZW1vcnl2aWV3KCJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0YXR0ciwgYnVmLCAicmF3IiwgbWVtb3J5dmlldygieCIgKiAxMDApKQorCisgICAgZGVmIHRlc3RfY19idWZmZXJfcmF3KHNlbGYsIG1lbW9yeXZpZXc9bWVtb3J5dmlldyk6CisgICAgICAgIGJ1ZiA9IGNfYnVmZmVyKDMyKQorCisgICAgICAgIGJ1Zi5yYXcgPSBtZW1vcnl2aWV3KCJIZWxsbywgV29ybGQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgIkhlbGxvLCBXb3JsZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgYnVmLCAidmFsdWUiLCBtZW1vcnl2aWV3KCJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0YXR0ciwgYnVmLCAicmF3IiwgbWVtb3J5dmlldygieCIgKiAxMDApKQorCisgICAgZGVmIHRlc3RfY19idWZmZXJfZGVwcmVjYXRlZChzZWxmKToKKyAgICAgICAgIyBDb21wYXRpYmlsaXR5IHdpdGggMi54CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYudGVzdF9jX2J1ZmZlcl92YWx1ZShidWZmZXIpCisgICAgICAgICAgICBzZWxmLnRlc3RfY19idWZmZXJfcmF3KGJ1ZmZlcikKKworICAgIGRlZiB0ZXN0X3BhcmFtXzEoc2VsZik6CisgICAgICAgIEJVRiA9IGNfY2hhciAqIDQKKyAgICAgICAgYnVmID0gQlVGKCkKKyMjICAgICAgICBwcmludCBjX2NoYXJfcC5mcm9tX3BhcmFtKGJ1ZikKKworICAgIGRlZiB0ZXN0X3BhcmFtXzIoc2VsZik6CisgICAgICAgIEJVRiA9IGNfY2hhciAqIDQKKyAgICAgICAgYnVmID0gQlVGKCkKKyMjICAgICAgICBwcmludCBCVUYuZnJvbV9wYXJhbShjX2NoYXJfcCgicHl0aG9uIikpCisjIyAgICAgICAgcHJpbnQgQlVGLmZyb21fcGFyYW0oQlVGKCoicHl0aCIpKQorCit0cnk6CisgICAgY193Y2hhcgorZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBwYXNzCitlbHNlOgorICAgIGNsYXNzIFdTdHJpbmdBcnJheVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICBCVUYgPSBjX3djaGFyICogNAorCisgICAgICAgICAgICBidWYgPSBCVUYodSJhIiwgdSJiIiwgdSJjIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCB1ImFiYyIpCisKKyAgICAgICAgICAgIGJ1Zi52YWx1ZSA9IHUiQUJDRCIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCB1IkFCQ0QiKQorCisgICAgICAgICAgICBidWYudmFsdWUgPSB1IngiCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgdSJ4IikKKworICAgICAgICAgICAgYnVmWzFdID0gdSJaIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsIHUieFpDRCIpCisKK2NsYXNzIFN0cmluZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgWFhfdGVzdF9iYXNpY19zdHJpbmdzKHNlbGYpOgorICAgICAgICBjcyA9IGNfc3RyaW5nKCJhYmNkZWYiKQorCisgICAgICAgICMgQ2Fubm90IGNhbGwgbGVuIG9uIGEgY19zdHJpbmcgYW55IGxvbmdlcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxlbiwgY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGNzKSwgNykKKworICAgICAgICAjIFRoZSB2YWx1ZSBwcm9wZXJ0eSBpcyB0aGUgc3RyaW5nIHVwIHRvIHRoZSBmaXJzdCB0ZXJtaW5hdGluZyBOVUwuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3MudmFsdWUsICJhYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfc3RyaW5nKCJhYmNcMDAwZGVmIikudmFsdWUsICJhYmMiKQorCisgICAgICAgICMgVGhlIHJhdyBwcm9wZXJ0eSBpcyB0aGUgdG90YWwgYnVmZmVyIGNvbnRlbnRzOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNzLnJhdywgImFiY2RlZlwwMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfc3RyaW5nKCJhYmNcMDAwZGVmIikucmF3LCAiYWJjXDAwMGRlZlwwMDAiKQorCisgICAgICAgICMgV2UgY2FuIGNoYW5nZSB0aGUgdmFsdWU6CisgICAgICAgIGNzLnZhbHVlID0gImFiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNzLnZhbHVlLCAiYWIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNzLnJhdywgImFiXDAwMFwwMDBcMDAwXDAwMFwwMDAiKQorCisgICAgICAgIGNzLnJhdyA9ICJYWSIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy52YWx1ZSwgIlhZIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy5yYXcsICJYWVwwMDBcMDAwXDAwMFwwMDBcMDAwIikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfc3RyaW5nLCB1IjEyMyIpCisKKyAgICBkZWYgWFhfdGVzdF9zaXplZF9zdHJpbmdzKHNlbGYpOgorCisgICAgICAgICMgTmV3IGluIHJlbGVhc2VzIGxhdGVyIHRoYW4gMC40LjA6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY19zdHJpbmcsIE5vbmUpCisKKyAgICAgICAgIyBOZXcgaW4gcmVsZWFzZXMgbGF0ZXIgdGhhbiAwLjQuMDoKKyAgICAgICAgIyBjX3N0cmluZyhudW1iZXIpIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nIG9mIHNpemUgbnVtYmVyCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oY19zdHJpbmcoMzIpLnJhdykgPT0gMzIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNfc3RyaW5nLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY19zdHJpbmcsIDApCisKKyAgICAgICAgIyBUaGVzZSB0ZXN0cyBmYWlsLCBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlciBpbml0aWFsaXplZAorIyMgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3N0cmluZygyKS52YWx1ZSA9PSAiIikKKyMjICAgICAgICBzZWxmLmFzc2VydFRydWUoY19zdHJpbmcoMikucmF3ID09ICJcMDAwXDAwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3N0cmluZygyKS5yYXdbLTFdID09ICJcMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihjX3N0cmluZygyKS5yYXcpID09IDIpCisKKyAgICBkZWYgWFhfdGVzdF9pbml0aWFsaXplZF9zdHJpbmdzKHNlbGYpOgorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3N0cmluZygiYWIiLCA0KS5yYXdbOjJdID09ICJhYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3N0cmluZygiYWIiLCA0KS5yYXdbOjI6XSA9PSAiYWIiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY19zdHJpbmcoImFiIiwgNCkucmF3WzoyOi0xXSA9PSAiYmEiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY19zdHJpbmcoImFiIiwgNCkucmF3WzoyOjJdID09ICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfc3RyaW5nKCJhYiIsIDQpLnJhd1stMV0gPT0gIlwwMDAiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY19zdHJpbmcoImFiIiwgMikucmF3ID09ICJhXDAwMCIpCisKKyAgICBkZWYgWFhfdGVzdF90b29sb25nKHNlbGYpOgorICAgICAgICBjcyA9IGNfc3RyaW5nKCJhYmNkZWYiKQorICAgICAgICAjIE11Y2ggdG9vIGxvbmcgc3RyaW5nOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZXRhdHRyLCBjcywgInZhbHVlIiwgIjEyMzQ1Njc4OTAxMjM0NSIpCisKKyAgICAgICAgIyBPbmUgY2hhciB0b28gbG9uZyB2YWx1ZXM6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGF0dHIsIGNzLCAidmFsdWUiLCAiMTIzNDU2NyIpCisKKyMjICAgIGRlZiB0ZXN0X3BlcmYoc2VsZik6CisjIyAgICAgICAgY2hlY2tfcGVyZigpCisKK3RyeToKKyAgICBjX3djaGFyCitleGNlcHQgTmFtZUVycm9yOgorICAgIHBhc3MKK2Vsc2U6CisgICAgY2xhc3MgV1N0cmluZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgZGVmIHRlc3Rfd2NoYXIoc2VsZik6CisgICAgICAgICAgICBjX3djaGFyKHUieCIpCisgICAgICAgICAgICByZXByKGJ5cmVmKGNfd2NoYXIodSJ4IikpKQorICAgICAgICAgICAgY193Y2hhcigieCIpCisKKworICAgICAgICBkZWYgWF90ZXN0X2Jhc2ljX3dzdHJpbmdzKHNlbGYpOgorICAgICAgICAgICAgY3MgPSBjX3dzdHJpbmcodSJhYmNkZWYiKQorCisgICAgICAgICAgICAjIFhYWCBUaGlzIGJlaGF2aW91ciBpcyBhYm91dCB0byBjaGFuZ2U6CisgICAgICAgICAgICAjIGxlbiByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBpbnRlcm5hbCBidWZmZXIgaW4gYnl0ZXMuCisgICAgICAgICAgICAjIFRoaXMgaW5jbHVkZXMgdGhlIHRlcm1pbmF0aW5nIE5VTCBjaGFyYWN0ZXIuCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2l6ZW9mKGNzKSA9PSAxNCkKKworICAgICAgICAgICAgIyBUaGUgdmFsdWUgcHJvcGVydHkgaXMgdGhlIHN0cmluZyB1cCB0byB0aGUgZmlyc3QgdGVybWluYXRpbmcgTlVMLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNzLnZhbHVlID09IHUiYWJjZGVmIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX3dzdHJpbmcodSJhYmNcMDAwZGVmIikudmFsdWUgPT0gdSJhYmMiKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY193c3RyaW5nKHUiYWJjXDAwMGRlZiIpLnZhbHVlID09IHUiYWJjIikKKworICAgICAgICAgICAgIyBUaGUgcmF3IHByb3BlcnR5IGlzIHRoZSB0b3RhbCBidWZmZXIgY29udGVudHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY3MucmF3ID09IHUiYWJjZGVmXDAwMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY193c3RyaW5nKHUiYWJjXDAwMGRlZiIpLnJhdyA9PSB1ImFiY1wwMDBkZWZcMDAwIikKKworICAgICAgICAgICAgIyBXZSBjYW4gY2hhbmdlIHRoZSB2YWx1ZToKKyAgICAgICAgICAgIGNzLnZhbHVlID0gdSJhYiIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcy52YWx1ZSA9PSB1ImFiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcy5yYXcgPT0gdSJhYlwwMDBcMDAwXDAwMFwwMDBcMDAwIikKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX3dzdHJpbmcsICIxMjMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY193c3RyaW5nLCAwKQorCisgICAgICAgIGRlZiBYX3Rlc3RfdG9vbG9uZyhzZWxmKToKKyAgICAgICAgICAgIGNzID0gY193c3RyaW5nKHUiYWJjZGVmIikKKyAgICAgICAgICAgICMgTXVjaCB0b28gbG9uZyBzdHJpbmc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZXRhdHRyLCBjcywgInZhbHVlIiwgdSIxMjM0NTY3ODkwMTIzNDUiKQorCisgICAgICAgICAgICAjIE9uZSBjaGFyIHRvbyBsb25nIHZhbHVlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGF0dHIsIGNzLCAidmFsdWUiLCB1IjEyMzQ1NjciKQorCisKK2RlZiBydW5fdGVzdChyZXAsIG1zZywgZnVuYywgYXJnKToKKyAgICBpdGVtcyA9IHJhbmdlKHJlcCkKKyAgICBmcm9tIHRpbWUgaW1wb3J0IGNsb2NrCisgICAgc3RhcnQgPSBjbG9jaygpCisgICAgZm9yIGkgaW4gaXRlbXM6CisgICAgICAgIGZ1bmMoYXJnKTsgZnVuYyhhcmcpOyBmdW5jKGFyZyk7IGZ1bmMoYXJnKTsgZnVuYyhhcmcpCisgICAgc3RvcCA9IGNsb2NrKCkKKyAgICBwcmludCAiJTIwczogJS4yZiB1cyIgJSAobXNnLCAoKHN0b3Atc3RhcnQpKjFlNi81L3JlcCkpCisKK2RlZiBjaGVja19wZXJmKCk6CisgICAgIyBDb25zdHJ1Y3QgNSBvYmplY3RzCisKKyAgICBSRVAgPSAyMDAwMDAKKworICAgIHJ1bl90ZXN0KFJFUCwgImNfc3RyaW5nKE5vbmUpIiwgY19zdHJpbmcsIE5vbmUpCisgICAgcnVuX3Rlc3QoUkVQLCAiY19zdHJpbmcoJ2FiYycpIiwgY19zdHJpbmcsICdhYmMnKQorCisjIFB5dGhvbiAyLjMgLU9PLCB3aW4yaywgUDQgNzAwIE1IejoKKyMKKyMgICAgICBjX3N0cmluZyhOb25lKTogMS43NSB1cworIyAgICAgY19zdHJpbmcoJ2FiYycpOiAyLjc0IHVzCisKKyMgUHl0aG9uIDIuMiAtT08sIHdpbjJrLCBQNCA3MDAgTUh6OgorIworIyAgICAgIGNfc3RyaW5nKE5vbmUpOiAyLjk1IHVzCisjICAgICBjX3N0cmluZygnYWJjJyk6IDMuNjcgdXMKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorIyMgICAgY2hlY2tfcGVyZigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0X2ZpZWxkcy5weSBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3RfZmllbGRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZWIzYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0X2ZpZWxkcy5weQpAQCAtMCwwICsxLDUwIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY3R5cGVzIGltcG9ydCAqCisKK2NsYXNzIFN0cnVjdEZpZWxkc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFN0cnVjdHVyZS9VbmlvbiBjbGFzc2VzIG11c3QgZ2V0ICdmaW5hbGl6ZWQnIHNvb25lciBvcgorICAgICMgbGF0ZXIsIHdoZW4gb25lIG9mIHRoZXNlIHRoaW5ncyBoYXBwZW46CisgICAgIworICAgICMgMS4gX2ZpZWxkc18gaXMgc2V0LgorICAgICMgMi4gQW4gaW5zdGFuY2UgaXMgY3JlYXRlZC4KKyAgICAjIDMuIFRoZSB0eXBlIGlzIHVzZWQgYXMgZmllbGQgb2YgYW5vdGhlciBTdHJ1Y3R1cmUvVW5pb24uCisgICAgIyA0LiBUaGUgdHlwZSBpcyBzdWJjbGFzc2VkCisgICAgIworICAgICMgV2hlbiB0aGV5IGFyZSBmaW5hbGl6ZWQsIGFzc2lnbmluZyBfZmllbGRzXyBpcyBubyBsb25nZXIgYWxsb3dlZC4KKworICAgIGRlZiB0ZXN0XzFfQShzZWxmKToKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgMCkgIyBub3QgZmluYWxpemVkCisgICAgICAgIFguX2ZpZWxkc18gPSBbXSAjIGZpbmFsaXplZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgWCwgIl9maWVsZHNfIiwgW10pCisKKyAgICBkZWYgdGVzdF8xX0Ioc2VsZik6CisgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gW10gIyBmaW5hbGl6ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIFgsICJfZmllbGRzXyIsIFtdKQorCisgICAgZGVmIHRlc3RfMihzZWxmKToKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBYKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIFgsICJfZmllbGRzXyIsIFtdKQorCisgICAgZGVmIHRlc3RfMyhzZWxmKToKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBZKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBYKV0gIyBmaW5hbGl6ZXMgWAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgWCwgIl9maWVsZHNfIiwgW10pCisKKyAgICBkZWYgdGVzdF80KHNlbGYpOgorICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIFkoWCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBYLCAiX2ZpZWxkc18iLCBbXSkKKyAgICAgICAgWS5fZmllbGRzXyA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBYLCAiX2ZpZWxkc18iLCBbXSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3R1cmVzLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdHVyZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ3YzgxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3R1cmVzLnB5CkBAIC0wLDAgKzEsNDc4IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIHN0cnVjdCBpbXBvcnQgY2FsY3NpemUKK2ltcG9ydCBfdGVzdGNhcGkKKworY2xhc3MgU3ViY2xhc3Nlc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX2ludCldCisKKyAgICAgICAgY2xhc3MgWShYKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYiIsIGNfaW50KV0KKworICAgICAgICBjbGFzcyBaKFgpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFgpLCBzaXplb2YoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihZKSwgc2l6ZW9mKGNfaW50KSoyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihaKSwgc2l6ZW9mKGNfaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLl9maWVsZHNfLCBbKCJhIiwgY19pbnQpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChZLl9maWVsZHNfLCBbKCJiIiwgY19pbnQpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChaLl9maWVsZHNfLCBbKCJhIiwgY19pbnQpXSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX2RlbGF5ZWQoc2VsZik6CisgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIDApCisgICAgICAgIFguX2ZpZWxkc18gPSBbKCJhIiwgY19pbnQpXQorCisgICAgICAgIGNsYXNzIFkoWCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFkpLCBzaXplb2YoWCkpCisgICAgICAgIFkuX2ZpZWxkc18gPSBbKCJiIiwgY19pbnQpXQorCisgICAgICAgIGNsYXNzIFooWCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIHNpemVvZihjX2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFkpLCBzaXplb2YoY19pbnQpKjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFopLCBzaXplb2YoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguX2ZpZWxkc18sIFsoImEiLCBjX2ludCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkuX2ZpZWxkc18sIFsoImIiLCBjX2ludCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFouX2ZpZWxkc18sIFsoImEiLCBjX2ludCldKQorCitjbGFzcyBTdHJ1Y3R1cmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZm9ybWF0cyA9IHsiYyI6IGNfY2hhciwKKyAgICAgICAgICAgICAgICJiIjogY19ieXRlLAorICAgICAgICAgICAgICAgIkIiOiBjX3VieXRlLAorICAgICAgICAgICAgICAgImgiOiBjX3Nob3J0LAorICAgICAgICAgICAgICAgIkgiOiBjX3VzaG9ydCwKKyAgICAgICAgICAgICAgICJpIjogY19pbnQsCisgICAgICAgICAgICAgICAiSSI6IGNfdWludCwKKyAgICAgICAgICAgICAgICJsIjogY19sb25nLAorICAgICAgICAgICAgICAgIkwiOiBjX3Vsb25nLAorICAgICAgICAgICAgICAgInEiOiBjX2xvbmdsb25nLAorICAgICAgICAgICAgICAgIlEiOiBjX3Vsb25nbG9uZywKKyAgICAgICAgICAgICAgICJmIjogY19mbG9hdCwKKyAgICAgICAgICAgICAgICJkIjogY19kb3VibGUsCisgICAgICAgICAgICAgICB9CisKKyAgICBkZWYgdGVzdF9zaW1wbGVfc3RydWN0cyhzZWxmKToKKyAgICAgICAgZm9yIGNvZGUsIHRwIGluIHNlbGYuZm9ybWF0cy5pdGVtcygpOgorICAgICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfY2hhciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ5IiwgdHApXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoc2l6ZW9mKFgpLCBjb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWxjc2l6ZSgiYyVjMCVjIiAlIChjb2RlLCBjb2RlKSksIGNvZGUpKQorCisgICAgZGVmIHRlc3RfdW5pb25zKHNlbGYpOgorICAgICAgICBmb3IgY29kZSwgdHAgaW4gc2VsZi5mb3JtYXRzLml0ZW1zKCk6CisgICAgICAgICAgICBjbGFzcyBYKFVuaW9uKToKKyAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBjX2NoYXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgieSIsIHRwKV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHNpemVvZihYKSwgY29kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FsY3NpemUoIiVjIiAlIChjb2RlKSksIGNvZGUpKQorCisgICAgZGVmIHRlc3Rfc3RydWN0X2FsaWdubWVudChzZWxmKToKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19jaGFyICogMyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxpZ25tZW50KFgpLCBjYWxjc2l6ZSgicyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgY2FsY3NpemUoIjNzIikpCisKKyAgICAgICAgY2xhc3MgWShTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19jaGFyICogMyksCisgICAgICAgICAgICAgICAgICAgICAgICAoInkiLCBjX2ludCldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxpZ25tZW50KFkpLCBjYWxjc2l6ZSgiaSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihZKSwgY2FsY3NpemUoIjNzaSIpKQorCisgICAgICAgIGNsYXNzIFNJKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBYKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIFkpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsaWdubWVudChTSSksIG1heChhbGlnbm1lbnQoWSksIGFsaWdubWVudChYKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFNJKSwgY2FsY3NpemUoIjNzMGkgM3NpIDBpIikpCisKKyAgICAgICAgY2xhc3MgSVMoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYiIsIFkpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJhIiwgWCldCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGlnbm1lbnQoU0kpLCBtYXgoYWxpZ25tZW50KFgpLCBhbGlnbm1lbnQoWSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihJUyksIGNhbGNzaXplKCIzc2kgM3MgMGkiKSkKKworICAgICAgICBjbGFzcyBYWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgWCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBYKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGlnbm1lbnQoWFgpLCBhbGlnbm1lbnQoWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKFhYKSwgY2FsY3NpemUoIjNzIDNzIDBzIikpCisKKyAgICBkZWYgdGVzdF9lbXRweShzZWxmKToKKyAgICAgICAgIyBJIGhhZCBwcm9ibGVtcyB3aXRoIHRoZXNlCisgICAgICAgICMKKyAgICAgICAgIyBBbHRob3VnaCB0aGVzZSBhcmUgcGF0b2xvZ2ljYWwgY2FzZXM6IEVtcHR5IFN0cnVjdHVyZXMhCisgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gW10KKworICAgICAgICBjbGFzcyBZKFVuaW9uKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gW10KKworICAgICAgICAjIElzIHRoaXMgcmVhbGx5IHRoZSBjb3JyZWN0IGFsaWdubWVudCwgb3Igc2hvdWxkIGl0IGJlIDA/CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGlnbm1lbnQoWCkgPT0gYWxpZ25tZW50KFkpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaXplb2YoWCkgPT0gc2l6ZW9mKFkpID09IDApCisKKyAgICAgICAgY2xhc3MgWFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIFgpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgWCldCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGlnbm1lbnQoWFgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYWCksIDApCisKKyAgICBkZWYgdGVzdF9maWVsZHMoc2VsZik6CisgICAgICAgICMgdGVzdCB0aGUgb2Zmc2V0IGFuZCBzaXplIGF0dHJpYnV0ZXMgb2YgU3RydWN0dXJlL1Vub2luIGZpZWxkcy4KKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJ5IiwgY19jaGFyKV0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgueC5vZmZzZXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC54LnNpemUsIHNpemVvZihjX2ludCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLnkub2Zmc2V0LCBzaXplb2YoY19pbnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgueS5zaXplLCBzaXplb2YoY19jaGFyKSkKKworICAgICAgICAjIHJlYWRvbmx5CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSwgc2V0YXR0ciwgWC54LCAib2Zmc2V0IiwgOTIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSwgc2V0YXR0ciwgWC54LCAic2l6ZSIsIDkyKQorCisgICAgICAgIGNsYXNzIFgoVW5pb24pOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJ5IiwgY19jaGFyKV0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgueC5vZmZzZXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC54LnNpemUsIHNpemVvZihjX2ludCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLnkub2Zmc2V0LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgueS5zaXplLCBzaXplb2YoY19jaGFyKSkKKworICAgICAgICAjIHJlYWRvbmx5CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSwgc2V0YXR0ciwgWC54LCAib2Zmc2V0IiwgOTIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSwgc2V0YXR0ciwgWC54LCAic2l6ZSIsIDkyKQorCisgICAgICAgICMgWFhYIFNob3VsZCB3ZSBjaGVjayBuZXN0ZWQgZGF0YSB0eXBlcyBhbHNvPworICAgICAgICAjIG9mZnNldCBpcyBhbHdheXMgcmVsYXRpdmUgdG8gdGhlIGNsYXNzLi4uCisKKyAgICBkZWYgdGVzdF9wYWNrZWQoc2VsZik6CisgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfYnl0ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX2xvbmdsb25nKV0KKyAgICAgICAgICAgIF9wYWNrXyA9IDEKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLmIub2Zmc2V0LCAxKQorCisgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfYnl0ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX2xvbmdsb25nKV0KKyAgICAgICAgICAgIF9wYWNrXyA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYi5vZmZzZXQsIDIpCisKKyAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19ieXRlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfbG9uZ2xvbmcpXQorICAgICAgICAgICAgX3BhY2tfID0gNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5iLm9mZnNldCwgNCkKKworICAgICAgICBpbXBvcnQgc3RydWN0CisgICAgICAgIGxvbmdsb25nX3NpemUgPSBzdHJ1Y3QuY2FsY3NpemUoInEiKQorICAgICAgICBsb25nbG9uZ19hbGlnbiA9IHN0cnVjdC5jYWxjc2l6ZSgiYnEiKSAtIGxvbmdsb25nX3NpemUKKworICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX2J5dGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19sb25nbG9uZyldCisgICAgICAgICAgICBfcGFja18gPSA4CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoWCksIGxvbmdsb25nX2FsaWduICsgbG9uZ2xvbmdfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLmIub2Zmc2V0LCBtaW4oOCwgbG9uZ2xvbmdfYWxpZ24pKQorCisKKyAgICAgICAgZCA9IHsiX2ZpZWxkc18iOiBbKCJhIiwgImIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgInEiKV0sCisgICAgICAgICAgICAgIl9wYWNrXyI6IC0xfQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0eXBlKFN0cnVjdHVyZSksICJYIiwgKFN0cnVjdHVyZSwpLCBkKQorCisgICAgICAgICMgSXNzdWUgMTU5ODkKKyAgICAgICAgZCA9IHsiX2ZpZWxkc18iOiBbKCJhIiwgY19ieXRlKV0sCisgICAgICAgICAgICAgIl9wYWNrXyI6IF90ZXN0Y2FwaS5JTlRfTUFYICsgMX0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHlwZShTdHJ1Y3R1cmUpLCAiWCIsIChTdHJ1Y3R1cmUsKSwgZCkKKyAgICAgICAgZCA9IHsiX2ZpZWxkc18iOiBbKCJhIiwgY19ieXRlKV0sCisgICAgICAgICAgICAgIl9wYWNrXyI6IF90ZXN0Y2FwaS5VSU5UX01BWCArIDJ9CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHR5cGUoU3RydWN0dXJlKSwgIlgiLCAoU3RydWN0dXJlLCksIGQpCisKKyAgICBkZWYgdGVzdF9pbml0aWFsaXplcnMoc2VsZik6CisgICAgICAgIGNsYXNzIFBlcnNvbihTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJuYW1lIiwgY19jaGFyKjYpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJhZ2UiLCBjX2ludCldCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBQZXJzb24sIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQZXJzb24sICJhc2xka2phc2xrZGphc2xrZGoiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFBlcnNvbiwgIk5hbWUiLCAiSEkiKQorCisgICAgICAgICMgc2hvcnQgZW5vdWdoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUGVyc29uKCIxMjM0NSIsIDUpLm5hbWUsICIxMjM0NSIpCisgICAgICAgICMgZXhhY3QgZml0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUGVyc29uKCIxMjM0NTYiLCA1KS5uYW1lLCAiMTIzNDU2IikKKyAgICAgICAgIyB0b28gbG9uZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQZXJzb24sICIxMjM0NTY3IiwgNSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0aW5nX2luaXRpYWxpemVycyhzZWxmKToKKyAgICAgICAgY2xhc3MgUE9JTlQoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfaW50KSwgKCJ5IiwgY19pbnQpXQorICAgICAgICAjIGNvbmZsaWN0aW5nIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFBPSU5ULCAyLCAzLCB4PTQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgUE9JTlQsIDIsIDMsIHk9NCkKKworICAgICAgICAjIHRvbyBtYW55IGluaXRpYWxpemVycworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFBPSU5ULCAyLCAzLCA0KQorCisgICAgZGVmIHRlc3Rfa2V5d29yZF9pbml0aWFsaXplcnMoc2VsZik6CisgICAgICAgIGNsYXNzIFBPSU5UKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBjX2ludCksICgieSIsIGNfaW50KV0KKyAgICAgICAgcHQgPSBQT0lOVCgxLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChwdC54LCBwdC55KSwgKDEsIDIpKQorCisgICAgICAgIHB0ID0gUE9JTlQoeT0yLCB4PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHB0LngsIHB0LnkpLCAoMSwgMikpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2ZpZWxkX3R5cGVzKHNlbGYpOgorICAgICAgICBjbGFzcyBQT0lOVChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIFBPSU5ULCAiX2ZpZWxkc18iLCBbKCJ4IiwgMSksICgieSIsIDIpXSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfbmFtZShzZWxmKToKKyAgICAgICAgIyBmaWVsZCBuYW1lIG11c3QgYmUgc3RyaW5nCisgICAgICAgIGRlZiBkZWNsYXJlX3dpdGhfbmFtZShuYW1lKToKKyAgICAgICAgICAgIGNsYXNzIFMoU3RydWN0dXJlKToKKyAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsobmFtZSwgY19pbnQpXQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGVjbGFyZV93aXRoX25hbWUsIHUieFx4ZTkiKQorCisgICAgZGVmIHRlc3RfaW50YXJyYXlfZmllbGRzKHNlbGYpOgorICAgICAgICBjbGFzcyBTb21lSW50cyhTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19pbnQgKiA0KV0KKworICAgICAgICAjIGNhbiB1c2UgdHVwbGUgdG8gaW5pdGlhbGl6ZSBhcnJheSAoYnV0IG5vdCBsaXN0ISkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTb21lSW50cygoMSwgMikpLmFbOl0sIFsxLCAyLCAwLCAwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTb21lSW50cygoMSwgMikpLmFbOjpdLCBbMSwgMiwgMCwgMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU29tZUludHMoKDEsIDIpKS5hWzo6LTFdLCBbMCwgMCwgMiwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU29tZUludHMoKDEsIDIpKS5hWzo6Ml0sIFsxLCAwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTb21lSW50cygoMSwgMikpLmFbMTo1OjZdLCBbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU29tZUludHMoKDEsIDIpKS5hWzY6NDotMV0sIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNvbWVJbnRzKCgxLCAyLCAzLCA0KSkuYVs6XSwgWzEsIDIsIDMsIDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNvbWVJbnRzKCgxLCAyLCAzLCA0KSkuYVs6Ol0sIFsxLCAyLCAzLCA0XSkKKyAgICAgICAgIyB0b28gbG9uZworICAgICAgICAjIFhYWCBTaG91bGQgcmFpc2UgVmFsdWVFcnJvcj8sIG5vdCBSdW50aW1lRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBTb21lSW50cywgKDEsIDIsIDMsIDQsIDUpKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2luaXRpYWxpemVycyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IGluaXRpYWxpemluZyBuZXN0ZWQgc3RydWN0dXJlcworICAgICAgICBjbGFzcyBQaG9uZShTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhcmVhY29kZSIsIGNfY2hhcio2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgibnVtYmVyIiwgY19jaGFyKjEyKV0KKworICAgICAgICBjbGFzcyBQZXJzb24oU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygibmFtZSIsIGNfY2hhciAqIDEyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgicGhvbmUiLCBQaG9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAoImFnZSIsIGNfaW50KV0KKworICAgICAgICBwID0gUGVyc29uKCJTb21lb25lIiwgKCIxMjM0IiwgIjU2NzgiKSwgNSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubmFtZSwgIlNvbWVvbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGhvbmUuYXJlYWNvZGUsICIxMjM0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBob25lLm51bWJlciwgIjU2NzgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYWdlLCA1KQorCisgICAgZGVmIHRlc3Rfc3RydWN0dXJlc193aXRoX3djaGFyKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjX3djaGFyCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gIyBubyB1bmljb2RlCisKKyAgICAgICAgY2xhc3MgUGVyc29uVyhTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJuYW1lIiwgY193Y2hhciAqIDEyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYWdlIiwgY19pbnQpXQorCisgICAgICAgIHAgPSBQZXJzb25XKHUiU29tZW9uZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5uYW1lLCAiU29tZW9uZSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQZXJzb25XKHUiMTIzNDU2Nzg5MCIpLm5hbWUsIHUiMTIzNDU2Nzg5MCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUGVyc29uVyh1IjEyMzQ1Njc4OTAxIikubmFtZSwgdSIxMjM0NTY3ODkwMSIpCisgICAgICAgICMgZXhhY3QgZml0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUGVyc29uVyh1IjEyMzQ1Njc4OTAxMiIpLm5hbWUsIHUiMTIzNDU2Nzg5MDEyIikKKyAgICAgICAgI3RvbyBsb25nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFBlcnNvblcsIHUiMTIzNDU2Nzg5MDEyMyIpCisKKyAgICBkZWYgdGVzdF9pbml0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgY2xhc3MgUGhvbmUoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYXJlYWNvZGUiLCBjX2NoYXIqNiksCisgICAgICAgICAgICAgICAgICAgICAgICAoIm51bWJlciIsIGNfY2hhcioxMildCisKKyAgICAgICAgY2xhc3MgUGVyc29uKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoIm5hbWUiLCBjX2NoYXIgKiAxMiksCisgICAgICAgICAgICAgICAgICAgICAgICAoInBob25lIiwgUGhvbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJhZ2UiLCBjX2ludCldCisKKyAgICAgICAgY2xzLCBtc2cgPSBzZWxmLmdldF9leGNlcHQoUGVyc29uLCAiU29tZW9uZSIsICgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbHMsIFJ1bnRpbWVFcnJvcikKKyAgICAgICAgIyBJbiBQeXRob24gMi41LCBFeGNlcHRpb24gaXMgYSBuZXctc3R5bGUgY2xhc3MsIGFuZCB0aGUgcmVwciBjaGFuZ2VkCisgICAgICAgIGlmIGlzc3ViY2xhc3MoRXhjZXB0aW9uLCBvYmplY3QpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKFBob25lKSA8dHlwZSAnZXhjZXB0aW9ucy5UeXBlRXJyb3InPjogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCwgaW50IGZvdW5kIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihQaG9uZSkgZXhjZXB0aW9ucy5UeXBlRXJyb3I6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBzdHJpbmcgb3IgVW5pY29kZSBvYmplY3QsIGludCBmb3VuZCIpCisKKyAgICAgICAgY2xzLCBtc2cgPSBzZWxmLmdldF9leGNlcHQoUGVyc29uLCAiU29tZW9uZSIsICgiYSIsICJiIiwgImMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbHMsIFJ1bnRpbWVFcnJvcikKKyAgICAgICAgaWYgaXNzdWJjbGFzcyhFeGNlcHRpb24sIG9iamVjdCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoUGhvbmUpIDx0eXBlICdleGNlcHRpb25zLlR5cGVFcnJvcic+OiB0b28gbWFueSBpbml0aWFsaXplcnMiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csICIoUGhvbmUpIGV4Y2VwdGlvbnMuVHlwZUVycm9yOiB0b28gbWFueSBpbml0aWFsaXplcnMiKQorCisgICAgZGVmIHRlc3RfaHVnZV9maWVsZF9uYW1lKHNlbGYpOgorICAgICAgICAjIGlzc3VlMTI4ODE6IHNlZ2ZhdWx0IHdpdGggbGFyZ2Ugc3RydWN0dXJlIGZpZWxkIG5hbWVzCisgICAgICAgIGRlZiBjcmVhdGVfY2xhc3MobGVuZ3RoKToKKyAgICAgICAgICAgIGNsYXNzIFMoU3RydWN0dXJlKToKKyAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoJ3gnICogbGVuZ3RoLCBjX2ludCldCisKKyAgICAgICAgZm9yIGxlbmd0aCBpbiBbMTAgKiogaSBmb3IgaSBpbiByYW5nZSgwLCA4KV06CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY3JlYXRlX2NsYXNzKGxlbmd0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBNZW1vcnlFcnJvcjoKKyAgICAgICAgICAgICAgICAjIE1lbW9yeUVycm9ycyBhcmUgT0ssIHdlIGp1c3QgZG9uJ3Qgd2FudCB0byBzZWdmYXVsdAorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBnZXRfZXhjZXB0KHNlbGYsIGZ1bmMsICphcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnVuYygqYXJncykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZGV0YWlsOgorICAgICAgICAgICAgcmV0dXJuIGRldGFpbC5fX2NsYXNzX18sIHN0cihkZXRhaWwpCisKKworIyMgICAgZGVmIHRlc3Rfc3ViY2xhc3NfY3JlYXRpb24oc2VsZik6CisjIyAgICAgICAgbWV0YSA9IHR5cGUoU3RydWN0dXJlKQorIyMgICAgICAgICMgc2FtZSBhcyAnY2xhc3MgWChTdHJ1Y3R1cmUpOiBwYXNzJworIyMgICAgICAgICMgZmFpbHMsIHNpbmNlIHdlIG5lZWQgZWl0aGVyIGEgX2ZpZWxkc18gb3IgYSBfYWJzdHJhY3RfIGF0dHJpYnV0ZQorIyMgICAgICAgIGNscywgbXNnID0gc2VsZi5nZXRfZXhjZXB0KG1ldGEsICJYIiwgKFN0cnVjdHVyZSwpLCB7fSkKKyMjICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjbHMsIG1zZyksCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEF0dHJpYnV0ZUVycm9yLCAiY2xhc3MgbXVzdCBkZWZpbmUgYSAnX2ZpZWxkc18nIGF0dHJpYnV0ZSIpKQorCisgICAgZGVmIHRlc3RfYWJzdHJhY3RfY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9hYnN0cmFjdF8gPSAic29tZXRoaW5nIgorICAgICAgICAjIHRyeSAnWCgpJworICAgICAgICBjbHMsIG1zZyA9IHNlbGYuZ2V0X2V4Y2VwdChldmFsLCAiWCgpIiwgbG9jYWxzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNscywgbXNnKSwgKFR5cGVFcnJvciwgImFic3RyYWN0IGNsYXNzIikpCisKKyAgICBkZWYgdGVzdF9tZXRob2RzKHNlbGYpOgorIyMgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyMjICAgICAgICAgICAgX2ZpZWxkc18gPSBbXQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiaW5fZGxsIiBpbiBkaXIodHlwZShTdHJ1Y3R1cmUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJmcm9tX2FkZHJlc3MiIGluIGRpcih0eXBlKFN0cnVjdHVyZSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImluX2RsbCIgaW4gZGlyKHR5cGUoU3RydWN0dXJlKSkpCisKKyAgICBkZWYgdGVzdF9wb3NpdGlvbmFsX2FyZ3Moc2VsZik6CisgICAgICAgICMgc2VlIGFsc28gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTUwNDIKKyAgICAgICAgY2xhc3MgVyhTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19pbnQpLCAoImIiLCBjX2ludCldCisgICAgICAgIGNsYXNzIFgoVyk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoImMiLCBjX2ludCldCisgICAgICAgIGNsYXNzIFkoWCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIFooWSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoImQiLCBjX2ludCksICgiZSIsIGNfaW50KSwgKCJmIiwgY19pbnQpXQorCisgICAgICAgIHogPSBaKDEsIDIsIDMsIDQsIDUsIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHouYSwgei5iLCB6LmMsIHouZCwgei5lLCB6LmYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAyLCAzLCA0LCA1LCA2KSkKKyAgICAgICAgeiA9IFooMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoei5hLCB6LmIsIHouYywgei5kLCB6LmUsIHouZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIDAsIDAsIDAsIDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogWigxLCAyLCAzLCA0LCA1LCA2LCA3KSkKKworY2xhc3MgUG9pbnRlck1lbWJlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAjIGEgU3RydWN0dXJlIHdpdGggYSBQT0lOVEVSIGZpZWxkCisgICAgICAgIGNsYXNzIFMoU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYXJyYXkiLCBQT0lOVEVSKGNfaW50KSldCisKKyAgICAgICAgcyA9IFMoKQorICAgICAgICAjIFdlIGNhbiBhc3NpZ24gYXJyYXlzIG9mIHRoZSBjb3JyZWN0IHR5cGUKKyAgICAgICAgcy5hcnJheSA9IChjX2ludCAqIDMpKDEsIDIsIDMpCisgICAgICAgIGl0ZW1zID0gW3MuYXJyYXlbaV0gZm9yIGkgaW4gcmFuZ2UoMyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbXMsIFsxLCAyLCAzXSkKKworICAgICAgICAjIFRoZSBmb2xsb3dpbmcgYXJlIGJ1Z3MsIGJ1dCBhcmUgaW5jbHVkZWQgaGVyZSBiZWNhdXNlIHRoZSB1bml0dGVzdHMKKyAgICAgICAgIyBhbHNvIGRlc2NyaWJlIHRoZSBjdXJyZW50IGJlaGF2aW91ci4KKyAgICAgICAgIworICAgICAgICAjIFRoaXMgZmFpbHMgd2l0aCBTeXN0ZW1FcnJvcjogYmFkIGFyZyB0byBpbnRlcm5hbCBmdW5jdGlvbgorICAgICAgICAjIG9yIHdpdGggSW5kZXhFcnJvciAod2l0aCBhIHBhdGNoIEkgaGF2ZSkKKworICAgICAgICBzLmFycmF5WzBdID0gNDIKKworICAgICAgICBpdGVtcyA9IFtzLmFycmF5W2ldIGZvciBpIGluIHJhbmdlKDMpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBbNDIsIDIsIDNdKQorCisgICAgICAgIHMuYXJyYXlbMF0gPSAxCisKKyMjICAgICAgICBzLmFycmF5WzFdID0gNDIKKworICAgICAgICBpdGVtcyA9IFtzLmFycmF5W2ldIGZvciBpIGluIHJhbmdlKDMpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBbMSwgMiwgM10pCisKKyAgICBkZWYgdGVzdF9ub25lX3RvX3BvaW50ZXJfZmllbGRzKHNlbGYpOgorICAgICAgICBjbGFzcyBTKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAoInAiLCBQT0lOVEVSKGNfaW50KSldCisKKyAgICAgICAgcyA9IFMoKQorICAgICAgICBzLnggPSAxMjM0NTY3OAorICAgICAgICBzLnAgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy54LCAxMjM0NTY3OCkKKworY2xhc3MgVGVzdFJlY3Vyc2l2ZVN0cnVjdHVyZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY29udGFpbnNfaXRzZWxmKHNlbGYpOgorICAgICAgICBjbGFzcyBSZWN1cnNpdmUoU3RydWN0dXJlKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBSZWN1cnNpdmUuX2ZpZWxkc18gPSBbKCJuZXh0IiwgUmVjdXJzaXZlKV0KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBkZXRhaWxzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJTdHJ1Y3R1cmUgb3IgdW5pb24gY2Fubm90IGNvbnRhaW4gaXRzZWxmIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihkZXRhaWxzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU3RydWN0dXJlIG9yIHVuaW9uIGNhbm5vdCBjb250YWluIGl0c2VsZiIpCisKKworICAgIGRlZiB0ZXN0X3ZpY2VfdmVyc2Eoc2VsZik6CisgICAgICAgIGNsYXNzIEZpcnN0KFN0cnVjdHVyZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIFNlY29uZChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIEZpcnN0Ll9maWVsZHNfID0gWygic2Vjb25kIiwgU2Vjb25kKV0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBTZWNvbmQuX2ZpZWxkc18gPSBbKCJmaXJzdCIsIEZpcnN0KV0KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCBkZXRhaWxzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJfZmllbGRzXyBpcyBmaW5hbCIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoZGV0YWlscykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkF0dHJpYnV0ZUVycm9yIG5vdCByYWlzZWQiKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3VuYWxpZ25lZF9zdHJ1Y3R1cmVzLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3VuYWxpZ25lZF9zdHJ1Y3R1cmVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYWNmYzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfdW5hbGlnbmVkX3N0cnVjdHVyZXMucHkKQEAgLTAsMCArMSw0NSBAQAoraW1wb3J0IHN5cywgdW5pdHRlc3QKK2Zyb20gY3R5cGVzIGltcG9ydCAqCisKK3N0cnVjdHVyZXMgPSBbXQorYnl0ZXN3YXBwZWRfc3RydWN0dXJlcyA9IFtdCisKKworaWYgc3lzLmJ5dGVvcmRlciA9PSAibGl0dGxlIjoKKyAgICBTd2FwcGVkU3RydWN0dXJlID0gQmlnRW5kaWFuU3RydWN0dXJlCitlbHNlOgorICAgIFN3YXBwZWRTdHJ1Y3R1cmUgPSBMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUKKworZm9yIHR5cCBpbiBbY19zaG9ydCwgY19pbnQsIGNfbG9uZywgY19sb25nbG9uZywKKyAgICAgICAgICAgIGNfZmxvYXQsIGNfZG91YmxlLAorICAgICAgICAgICAgY191c2hvcnQsIGNfdWludCwgY191bG9uZywgY191bG9uZ2xvbmddOgorICAgIGNsYXNzIFgoU3RydWN0dXJlKToKKyAgICAgICAgX3BhY2tfID0gMQorICAgICAgICBfZmllbGRzXyA9IFsoInBhZCIsIGNfYnl0ZSksCisgICAgICAgICAgICAgICAgICAgICgidmFsdWUiLCB0eXApXQorICAgIGNsYXNzIFkoU3dhcHBlZFN0cnVjdHVyZSk6CisgICAgICAgIF9wYWNrXyA9IDEKKyAgICAgICAgX2ZpZWxkc18gPSBbKCJwYWQiLCBjX2J5dGUpLAorICAgICAgICAgICAgICAgICAgICAoInZhbHVlIiwgdHlwKV0KKyAgICBzdHJ1Y3R1cmVzLmFwcGVuZChYKQorICAgIGJ5dGVzd2FwcGVkX3N0cnVjdHVyZXMuYXBwZW5kKFkpCisKK2NsYXNzIFRlc3RTdHJ1Y3R1cmVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9uYXRpdmUoc2VsZik6CisgICAgICAgIGZvciB0eXAgaW4gc3RydWN0dXJlczoKKyMjICAgICAgICAgICAgcHJpbnQgdHlwLnZhbHVlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cC52YWx1ZS5vZmZzZXQsIDEpCisgICAgICAgICAgICBvID0gdHlwKCkKKyAgICAgICAgICAgIG8udmFsdWUgPSA0CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8udmFsdWUsIDQpCisKKyAgICBkZWYgdGVzdF9zd2FwcGVkKHNlbGYpOgorICAgICAgICBmb3IgdHlwIGluIGJ5dGVzd2FwcGVkX3N0cnVjdHVyZXM6CisjIyAgICAgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsIHR5cC52YWx1ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXAudmFsdWUub2Zmc2V0LCAxKQorICAgICAgICAgICAgbyA9IHR5cCgpCisgICAgICAgICAgICBvLnZhbHVlID0gNAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLnZhbHVlLCA0KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3VuaWNvZGUucHkgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfdW5pY29kZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTU3NDc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3VuaWNvZGUucHkKQEAgLTAsMCArMSwxMjkgQEAKKyMgY29kaW5nOiBsYXRpbi0xCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBjdHlwZXMKKwordHJ5OgorICAgIGN0eXBlcy5jX3djaGFyCitleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBpbXBvcnQgX2N0eXBlc190ZXN0CisgICAgZGxsID0gY3R5cGVzLkNETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQorICAgIHdjc2xlbiA9IGRsbC5teV93Y3NsZW4KKyAgICB3Y3NsZW4uYXJndHlwZXMgPSBbY3R5cGVzLmNfd2NoYXJfcF0KKworCisgICAgY2xhc3MgVW5pY29kZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5wcmV2X2NvbnZfbW9kZSA9IGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJhc2NpaSIsICJzdHJpY3QiKQorCisgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCpzZWxmLnByZXZfY29udl9tb2RlKQorCisgICAgICAgIGRlZiB0ZXN0X2FzY2lpX3N0cmljdChzZWxmKToKKyAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJhc2NpaSIsICJzdHJpY3QiKQorICAgICAgICAgICAgIyBubyBjb252ZXJzaW9ucyB0YWtlIHBsYWNlIHdpdGggdW5pY29kZSBhcmd1bWVudHMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKHUiYWJjIiksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbih1ImFiXHUyMDcwIiksIDMpCisgICAgICAgICAgICAjIHN0cmluZyBhcmdzIGFyZSBjb252ZXJ0ZWQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCJhYmMiKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGN0eXBlcy5Bcmd1bWVudEVycm9yLCB3Y3NsZW4sICJhYuQiKQorCisgICAgICAgIGRlZiB0ZXN0X2FzY2lpX3JlcGxhY2Uoc2VsZik6CisgICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAicmVwbGFjZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbih1ImFiYyIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4odSJhYlx1MjA3MCIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oImFiYyIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oImFi5CIpLCAzKQorCisgICAgICAgIGRlZiB0ZXN0X2FzY2lpX2lnbm9yZShzZWxmKToKKyAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJhc2NpaSIsICJpZ25vcmUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4odSJhYmMiKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKHUiYWJcdTIwNzAiKSwgMykKKyAgICAgICAgICAgICMgaWdub3JlIGVycm9yIG1vZGUgc2tpcHMgbm9uLWFzY2lpIGNoYXJhY3RlcnMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCJhYmMiKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCLk9vzfIiksIDApCisKKyAgICAgICAgZGVmIHRlc3RfbGF0aW4xX3N0cmljdChzZWxmKToKKyAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJsYXRpbi0xIiwgInN0cmljdCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbih1ImFiYyIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4odSJhYlx1MjA3MCIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oImFiYyIpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oIuT2/N8iKSwgNCkKKworICAgICAgICBkZWYgdGVzdF9idWZmZXJzKHNlbGYpOgorICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInN0cmljdCIpCisgICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYnVmKSwgMysxKQorCisgICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAicmVwbGFjZSIpCisgICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYuT2/CIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6XSwgdSJhYlx1RkZGRFx1RkZGRFx1RkZGRFwwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6XSwgdSJhYlx1RkZGRFx1RkZGRFx1RkZGRFwwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCB1IlwwXHVGRkZEXHVGRkZEXHVGRkZEYmEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjoyXSwgdSJhXHVGRkZEXHVGRkZEIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzY6NTotMV0sIHUiIikKKworICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgImlnbm9yZSIpCisgICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYuT2/CIpCisgICAgICAgICAgICAjIGlzIHRoYXQgY29ycmVjdD8gbm90IHN1cmUuICBCdXQgd2l0aCAnaWdub3JlJywgeW91IGdldCB3aGF0IHlvdSBwYXkgZm9yLi4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzpdLCB1ImFiXDBcMFwwXDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjpdLCB1ImFiXDBcMFwwXDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjotMV0sIHUiXDBcMFwwXDBiYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6OjJdLCB1ImFcMFwwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzY6NTotMV0sIHUiIikKKworICAgIGltcG9ydCBfY3R5cGVzX3Rlc3QKKyAgICBmdW5jID0gY3R5cGVzLkNETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKS5fdGVzdGZ1bmNfcF9wCisKKyAgICBjbGFzcyBTdHJpbmdUZXN0Q2FzZShVbmljb2RlVGVzdENhc2UpOgorICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICBzZWxmLnByZXZfY29udl9tb2RlID0gY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInN0cmljdCIpCisgICAgICAgICAgICBmdW5jLmFyZ3R5cGVzID0gW2N0eXBlcy5jX2NoYXJfcF0KKyAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGN0eXBlcy5jX2NoYXJfcAorCisgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCpzZWxmLnByZXZfY29udl9tb2RlKQorICAgICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IE5vbmUKKyAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGN0eXBlcy5jX2ludAorCisgICAgICAgIGRlZiB0ZXN0X2FzY2lpX3JlcGxhY2Uoc2VsZik6CisgICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAic3RyaWN0IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYygiYWJjIiksICJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKHUiYWJjIiksICJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3R5cGVzLkFyZ3VtZW50RXJyb3IsIGZ1bmMsIHUiYWLkIikKKworICAgICAgICBkZWYgdGVzdF9hc2NpaV9pZ25vcmUoc2VsZik6CisgICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAiaWdub3JlIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYygiYWJjIiksICJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKHUiYWJjIiksICJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKHUi5Pb83yIpLCAiIikKKworICAgICAgICBkZWYgdGVzdF9hc2NpaV9yZXBsYWNlKHNlbGYpOgorICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInJlcGxhY2UiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKCJhYmMiKSwgImFiYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmModSJhYmMiKSwgImFiYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmModSLk9vzfIiksICI/Pz8/IikKKworICAgICAgICBkZWYgdGVzdF9idWZmZXJzKHNlbGYpOgorICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInN0cmljdCIpCisgICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIodSJhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYnVmKSwgMysxKQorCisgICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAicmVwbGFjZSIpCisgICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIodSJhYuT2/CIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6XSwgImFiPz8/XDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjpdLCAiYWI/Pz9cMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Oi0xXSwgIlwwPz8/YmEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjoyXSwgImE/PyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls2OjU6LTFdLCAiIikKKworICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgImlnbm9yZSIpCisgICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIodSJhYuT2/CIpCisgICAgICAgICAgICAjIGlzIHRoYXQgY29ycmVjdD8gbm90IHN1cmUuICBCdXQgd2l0aCAnaWdub3JlJywgeW91IGdldCB3aGF0IHlvdSBwYXkgZm9yLi4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzpdLCAiYWJcMFwwXDBcMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Ol0sICJhYlwwXDBcMFwwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCAiXDBcMFwwXDBiYSIpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfdmFsdWVzLnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3ZhbHVlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2JmZDRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3ZhbHVlcy5weQpAQCAtMCwwICsxLDgyIEBACisiIiIKK0EgdGVzdGNhc2Ugd2hpY2ggYWNjZXNzZXMgKnZhbHVlcyogaW4gYSBkbGwuCisiIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIGN0eXBlcyBpbXBvcnQgKgorCitpbXBvcnQgX2N0eXBlc190ZXN0CisKK2NsYXNzIFZhbHVlc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2FuX2ludGVnZXIoc2VsZik6CisgICAgICAgIGN0ZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisgICAgICAgIGFuX2ludGVnZXIgPSBjX2ludC5pbl9kbGwoY3RkbGwsICJhbl9pbnRlZ2VyIikKKyAgICAgICAgeCA9IGFuX2ludGVnZXIudmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBjdGRsbC5nZXRfYW5faW50ZWdlcigpKQorICAgICAgICBhbl9pbnRlZ2VyLnZhbHVlICo9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4KjIsIGN0ZGxsLmdldF9hbl9pbnRlZ2VyKCkpCisKKyAgICBkZWYgdGVzdF91bmRlZmluZWQoc2VsZik6CisgICAgICAgIGN0ZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNfaW50LmluX2RsbCwgY3RkbGwsICJVbmRlZmluZWRfU3ltYm9sIikKKworICAgIGNsYXNzIFdpbl9WYWx1ZXNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICIiIlRoaXMgdGVzdCBvbmx5IHdvcmtzIHdoZW4gcHl0aG9uIGl0c2VsZiBpcyBhIGRsbC9zaGFyZWQgbGlicmFyeSIiIgorCisgICAgICAgIGRlZiB0ZXN0X29wdGltaXplZmxhZyhzZWxmKToKKyAgICAgICAgICAgICMgVGhpcyB0ZXN0IGFjY2Vzc2VzIHRoZSBQeV9PcHRpbWl6ZUZsYWcgaW50Z2VyLCB3aGljaCBpcworICAgICAgICAgICAgIyBleHBvcnRlZCBieSB0aGUgUHl0aG9uIGRsbC4KKworICAgICAgICAgICAgIyBJdCdzIHZhbHVlIGlzIHNldCBkZXBlbmRpbmcgb24gdGhlIC1PIGFuZCAtT08gZmxhZ3M6CisgICAgICAgICAgICAjIGlmIG5vdCBnaXZlbiwgaXQgaXMgMCBhbmQgX19kZWJ1Z19fIGlzIDEuCisgICAgICAgICAgICAjIElmIC1PIGlzIGdpdmVuLCB0aGUgZmxhZyBpcyAxLCBmb3IgLU9PIGl0IGlzIDIuCisgICAgICAgICAgICAjIGRvY3N0cmluZ3MgYXJlIGFsc28gcmVtb3ZlZCBpbiB0aGUgbGF0dGVyIGNhc2UuCisgICAgICAgICAgICBvcHQgPSBjX2ludC5pbl9kbGwocHlkbGwsICJQeV9PcHRpbWl6ZUZsYWciKS52YWx1ZQorICAgICAgICAgICAgaWYgX19kZWJ1Z19fOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0LCAwKQorICAgICAgICAgICAgZWxpZiBWYWx1ZXNUZXN0Q2FzZS5fX2RvY19fIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0LCAxKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdCwgMikKKworICAgICAgICBkZWYgdGVzdF9mcm96ZW50YWJsZShzZWxmKToKKyAgICAgICAgICAgICMgUHl0aG9uIGV4cG9ydHMgYSBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzIHN5bWJvbC4gVGhpcyBpcyBhCisgICAgICAgICAgICAjIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygc3RydWN0IF9mcm96ZW4gZW50cmllcy4gIFRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgICAjIGFycmF5IGlzIG1hcmtlZCBieSBhbiBlbnRyeSBjb250YWluaW5nIGEgTlVMTCBuYW1lIGFuZCB6ZXJvCisgICAgICAgICAgICAjIHNpemUuCisKKyAgICAgICAgICAgICMgSW4gc3RhbmRhcmQgUHl0aG9uLCB0aGlzIHRhYmxlIGNvbnRhaW5zIGEgX19oZWxsb19fCisgICAgICAgICAgICAjIG1vZHVsZSwgYW5kIGEgX19waGVsbG9fXyBwYWNrYWdlIGNvbnRhaW5pbmcgYSBzcGFtCisgICAgICAgICAgICAjIG1vZHVsZS4KKyAgICAgICAgICAgIGNsYXNzIHN0cnVjdF9mcm96ZW4oU3RydWN0dXJlKToKKyAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIm5hbWUiLCBjX2NoYXJfcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJjb2RlIiwgUE9JTlRFUihjX3VieXRlKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJzaXplIiwgY19pbnQpXQorICAgICAgICAgICAgRnJvemVuVGFibGUgPSBQT0lOVEVSKHN0cnVjdF9mcm96ZW4pCisKKyAgICAgICAgICAgIGZ0ID0gRnJvemVuVGFibGUuaW5fZGxsKHB5ZGxsLCAiUHlJbXBvcnRfRnJvemVuTW9kdWxlcyIpCisgICAgICAgICAgICAjIGZ0IGlzIGEgcG9pbnRlciB0byB0aGUgc3RydWN0X2Zyb3plbiBlbnRyaWVzOgorICAgICAgICAgICAgaXRlbXMgPSBbXQorICAgICAgICAgICAgZm9yIGVudHJ5IGluIGZ0OgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyBkYW5nZXJvdXMuIFdlICpjYW4qIGl0ZXJhdGUgb3ZlciBhIHBvaW50ZXIsIGJ1dAorICAgICAgICAgICAgICAgICMgdGhlIGxvb3Agd2lsbCBub3QgdGVybWluYXRlIChtYXliZSB3aXRoIGFuIGFjY2VzcworICAgICAgICAgICAgICAgICMgdmlvbGF0aW9uOy0pIGJlY2F1c2UgdGhlIHBvaW50ZXIgaW5zdGFuY2UgaGFzIG5vIHNpemUuCisgICAgICAgICAgICAgICAgaWYgZW50cnkubmFtZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGl0ZW1zLmFwcGVuZCgoZW50cnkubmFtZSwgZW50cnkuc2l6ZSkpCisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzoyXSA+PSAoMiwgMyk6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbKCJfX2hlbGxvX18iLCAxMDQpLCAoIl9fcGhlbGxvX18iLCAtMTA0KSwgKCJfX3BoZWxsb19fLnNwYW0iLCAxMDQpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IFsoIl9faGVsbG9fXyIsIDEwMCksICgiX19waGVsbG9fXyIsIC0xMDApLCAoIl9fcGhlbGxvX18uc3BhbSIsIDEwMCldCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBleHBlY3RlZCkKKworICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IF9wb2ludGVyX3R5cGVfY2FjaGUKKyAgICAgICAgICAgIGRlbCBfcG9pbnRlcl90eXBlX2NhY2hlW3N0cnVjdF9mcm96ZW5dCisKKyAgICAgICAgZGVmIHRlc3RfdW5kZWZpbmVkKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY19pbnQuaW5fZGxsLCBweWRsbCwgIlVuZGVmaW5lZF9TeW1ib2wiKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3ZhcnNpemVfc3RydWN0LnB5IGIvbGliL3B5dGhvbjIuNy9jdHlwZXMvdGVzdC90ZXN0X3ZhcnNpemVfc3RydWN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MDk1MDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3RfdmFyc2l6ZV9zdHJ1Y3QucHkKQEAgLTAsMCArMSw1MCBAQAorZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBWYXJTaXplVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcmVzaXplKHNlbGYpOgorICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoIml0ZW0iLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImFycmF5IiwgY19pbnQgKiAxKV0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihYKSwgc2l6ZW9mKGNfaW50KSAqIDIpCisgICAgICAgIHggPSBYKCkKKyAgICAgICAgeC5pdGVtID0gNDIKKyAgICAgICAgeC5hcnJheVswXSA9IDEwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZih4KSwgc2l6ZW9mKGNfaW50KSAqIDIpCisKKyAgICAgICAgIyBtYWtlIHJvb20gZm9yIG9uZSBhZGRpdGlvbmFsIGl0ZW0KKyAgICAgICAgbmV3X3NpemUgPSBzaXplb2YoWCkgKyBzaXplb2YoY19pbnQpICogMQorICAgICAgICByZXNpemUoeCwgbmV3X3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHgpLCBuZXdfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoeC5pdGVtLCB4LmFycmF5WzBdKSwgKDQyLCAxMDApKQorCisgICAgICAgICMgbWFrZSByb29tIGZvciAxMCBhZGRpdGlvbmFsIGl0ZW1zCisgICAgICAgIG5ld19zaXplID0gc2l6ZW9mKFgpICsgc2l6ZW9mKGNfaW50KSAqIDkKKyAgICAgICAgcmVzaXplKHgsIG5ld19zaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZih4KSwgbmV3X3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHguaXRlbSwgeC5hcnJheVswXSksICg0MiwgMTAwKSkKKworICAgICAgICAjIG1ha2Ugcm9vbSBmb3Igb25lIGFkZGl0aW9uYWwgaXRlbQorICAgICAgICBuZXdfc2l6ZSA9IHNpemVvZihYKSArIHNpemVvZihjX2ludCkgKiAxCisgICAgICAgIHJlc2l6ZSh4LCBuZXdfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoeCksIG5ld19zaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh4Lml0ZW0sIHguYXJyYXlbMF0pLCAoNDIsIDEwMCkpCisKKyAgICBkZWYgdGVzdF9hcnJheV9pbnZhbGlkX2xlbmd0aChzZWxmKToKKyAgICAgICAgIyBjYW5ub3QgY3JlYXRlIGFycmF5cyB3aXRoIG5vbi1wb3NpdGl2ZSBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogY19pbnQgKiAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBjX2ludCAqIC0zKQorCisgICAgZGVmIHRlc3RfemVyb3NpemVkX2FycmF5KHNlbGYpOgorICAgICAgICBhcnJheSA9IChjX2ludCAqIDApKCkKKyAgICAgICAgIyBhY2Nlc3NpbmcgZWxlbWVudHMgb2YgemVyby1zaXplZCBhcnJheXMgcmFpc2UgSW5kZXhFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhcnJheS5fX3NldGl0ZW1fXywgMCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYXJyYXkuX19nZXRpdGVtX18sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGFycmF5Ll9fc2V0aXRlbV9fLCAxLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhcnJheS5fX2dldGl0ZW1fXywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYXJyYXkuX19zZXRpdGVtX18sIC0xLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhcnJheS5fX2dldGl0ZW1fXywgLTEpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdlNmZlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF93aW4zMi5weQpAQCAtMCwwICsxLDkzIEBACisjIFdpbmRvd3Mgc3BlY2lmaWMgdGVzdHMKKworZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IGlzX3Jlc291cmNlX2VuYWJsZWQKK2ltcG9ydCB1bml0dGVzdCwgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CisKK2ltcG9ydCBfY3R5cGVzX3Rlc3QKKworaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIgYW5kIHNpemVvZihjX3ZvaWRfcCkgPT0gc2l6ZW9mKGNfaW50KToKKyAgICAjIE9ubHkgd2luZG93cyAzMi1iaXQgaGFzIGRpZmZlcmVudCBjYWxsaW5nIGNvbnZlbnRpb25zLgorCisgICAgY2xhc3MgV2luZG93c1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgZGVmIHRlc3RfY2FsbGNvbnZfMShzZWxmKToKKyAgICAgICAgICAgICMgVGVzdGluZyBzdGRjYWxsIGZ1bmN0aW9uCisKKyAgICAgICAgICAgIElzV2luZG93ID0gd2luZGxsLnVzZXIzMi5Jc1dpbmRvdworICAgICAgICAgICAgIyBWYWx1ZUVycm9yOiBQcm9jZWR1cmUgcHJvYmFibHkgY2FsbGVkIHdpdGggbm90IGVub3VnaCBhcmd1bWVudHMgKDQgYnl0ZXMgbWlzc2luZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIElzV2luZG93KQorCisgICAgICAgICAgICAjIFRoaXMgb25lIHNob3VsZCBzdWNjZWVkLi4uCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIElzV2luZG93KDApKQorCisgICAgICAgICAgICAjIFZhbHVlRXJyb3I6IFByb2NlZHVyZSBwcm9iYWJseSBjYWxsZWQgd2l0aCB0b28gbWFueSBhcmd1bWVudHMgKDggYnl0ZXMgaW4gZXhjZXNzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgSXNXaW5kb3csIDAsIDAsIDApCisKKyAgICAgICAgZGVmIHRlc3RfY2FsbGNvbnZfMihzZWxmKToKKyAgICAgICAgICAgICMgQ2FsbGluZyBzdGRjYWxsIGZ1bmN0aW9uIGFzIGNkZWNsCisKKyAgICAgICAgICAgIElzV2luZG93ID0gY2RsbC51c2VyMzIuSXNXaW5kb3cKKworICAgICAgICAgICAgIyBWYWx1ZUVycm9yOiBQcm9jZWR1cmUgY2FsbGVkIHdpdGggbm90IGVub3VnaCBhcmd1bWVudHMgKDQgYnl0ZXMgbWlzc2luZykKKyAgICAgICAgICAgICMgb3Igd3JvbmcgY2FsbGluZyBjb252ZW50aW9uCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBJc1dpbmRvdywgTm9uZSkKKworaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgY2xhc3MgRnVuY3Rpb25DYWxsVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgIGlmIGlzX3Jlc291cmNlX2VuYWJsZWQoIlNFSCIpOgorICAgICAgICAgICAgZGVmIHRlc3RfU0VIKHNlbGYpOgorICAgICAgICAgICAgICAgICMgQ2FsbCBmdW5jdGlvbnMgd2l0aCBpbnZhbGlkIGFyZ3VtZW50cywgYW5kIG1ha2Ugc3VyZQorICAgICAgICAgICAgICAgICMgdGhhdCBhY2Nlc3MgdmlvbGF0aW9ucyBhcmUgdHJhcHBlZCBhbmQgcmFpc2UgYW4KKyAgICAgICAgICAgICAgICAjIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBLCAzMikKKworICAgICAgICBkZWYgdGVzdF9ub2FyZ3Moc2VsZik6CisgICAgICAgICAgICAjIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugb24gd2luMzIgeDY0CisgICAgICAgICAgICB3aW5kbGwudXNlcjMyLkdldERlc2t0b3BXaW5kb3coKQorCisgICAgY2xhc3MgVGVzdFdpbnR5cGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgZGVmIHRlc3RfSFdORChzZWxmKToKKyAgICAgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCB3aW50eXBlcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2Yod2ludHlwZXMuSFdORCksIHNpemVvZihjX3ZvaWRfcCkpCisKKyAgICAgICAgZGVmIHRlc3RfUEFSQU0oc2VsZik6CisgICAgICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgd2ludHlwZXMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHdpbnR5cGVzLldQQVJBTSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY192b2lkX3ApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2Yod2ludHlwZXMuTFBBUkFNKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjX3ZvaWRfcCkpCisKKyAgICAgICAgZGVmIHRlc3RfQ09NRXJyb3Ioc2VsZik6CisgICAgICAgICAgICBmcm9tIF9jdHlwZXMgaW1wb3J0IENPTUVycm9yCisgICAgICAgICAgICBpZiBzdXBwb3J0LkhBVkVfRE9DU1RSSU5HUzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENPTUVycm9yLl9fZG9jX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmFpc2VkIHdoZW4gYSBDT00gbWV0aG9kIGNhbGwgZmFpbGVkLiIpCisKKyAgICAgICAgICAgIGV4ID0gQ09NRXJyb3IoLTEsICJ0ZXh0IiwgKCJkZXRhaWxzIiwpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC5ocmVzdWx0LCAtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXgudGV4dCwgInRleHQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC5kZXRhaWxzLCAoImRldGFpbHMiLCkpCisKK2NsYXNzIFN0cnVjdHVyZXModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc3RydWN0X2J5X3ZhbHVlKHNlbGYpOgorICAgICAgICBjbGFzcyBQT0lOVChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19sb25nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgieSIsIGNfbG9uZyldCisKKyAgICAgICAgY2xhc3MgUkVDVChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJsZWZ0IiwgY19sb25nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgidG9wIiwgY19sb25nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgicmlnaHQiLCBjX2xvbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJib3R0b20iLCBjX2xvbmcpXQorCisgICAgICAgIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQorCisgICAgICAgIHB0ID0gUE9JTlQoMTAsIDEwKQorICAgICAgICByZWN0ID0gUkVDVCgwLCAwLCAyMCwgMjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZGxsLlBvaW50SW5SZWN0KGJ5cmVmKHJlY3QpLCBwdCkpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3Rfd2ludHlwZXMucHkgYi9saWIvcHl0aG9uMi43L2N0eXBlcy90ZXN0L3Rlc3Rfd2ludHlwZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA2ZmNjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvY3R5cGVzL3Rlc3QvdGVzdF93aW50eXBlcy5weQpAQCAtMCwwICsxLDQzIEBACitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnV2luZG93cy1vbmx5IHRlc3QnKQorCitmcm9tIGN0eXBlcyBpbXBvcnQgKgorZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCisKK2NsYXNzIFdpblR5cGVzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdmFyaWFudF9ib29sKHNlbGYpOgorICAgICAgICAjIHJlYWRzIDE2LWJpdHMgZnJvbSBtZW1vcnksIGFueXRoaW5nIG5vbi16ZXJvIGlzIFRydWUKKyAgICAgICAgZm9yIHRydWVfdmFsdWUgaW4gKDEsIDMyNzY3LCAzMjc2OCwgNjU1MzUsIDY1NTM3KToKKyAgICAgICAgICAgIHRydWUgPSBQT0lOVEVSKGNfaW50MTYpKGNfaW50MTYodHJ1ZV92YWx1ZSkpCisgICAgICAgICAgICB2YWx1ZSA9IGNhc3QodHJ1ZSwgUE9JTlRFUih3aW50eXBlcy5WQVJJQU5UX0JPT0wpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHZhbHVlLmNvbnRlbnRzKSwgJ1ZBUklBTlRfQk9PTChUcnVlKScpCisKKyAgICAgICAgICAgIHZiID0gd2ludHlwZXMuVkFSSUFOVF9CT09MKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModmIudmFsdWUsIEZhbHNlKQorICAgICAgICAgICAgdmIudmFsdWUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHZiLnZhbHVlLCBUcnVlKQorICAgICAgICAgICAgdmIudmFsdWUgPSB0cnVlX3ZhbHVlCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHZiLnZhbHVlLCBUcnVlKQorCisgICAgICAgIGZvciBmYWxzZV92YWx1ZSBpbiAoMCwgNjU1MzYsIDI2MjE0NCwgMioqMzMpOgorICAgICAgICAgICAgZmFsc2UgPSBQT0lOVEVSKGNfaW50MTYpKGNfaW50MTYoZmFsc2VfdmFsdWUpKQorICAgICAgICAgICAgdmFsdWUgPSBjYXN0KGZhbHNlLCBQT0lOVEVSKHdpbnR5cGVzLlZBUklBTlRfQk9PTCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodmFsdWUuY29udGVudHMpLCAnVkFSSUFOVF9CT09MKEZhbHNlKScpCisKKyAgICAgICAgIyBhbGxvdyBhbnkgYm9vbCBjb252ZXJzaW9uIG9uIGFzc2lnbm1lbnQgdG8gdmFsdWUKKyAgICAgICAgZm9yIHNldF92YWx1ZSBpbiAoNjU1MzYsIDI2MjE0NCwgMioqMzMpOgorICAgICAgICAgICAgdmIgPSB3aW50eXBlcy5WQVJJQU5UX0JPT0woKQorICAgICAgICAgICAgdmIudmFsdWUgPSBzZXRfdmFsdWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModmIudmFsdWUsIFRydWUpCisKKyAgICAgICAgdmIgPSB3aW50eXBlcy5WQVJJQU5UX0JPT0woKQorICAgICAgICB2Yi52YWx1ZSA9IFsyLCAzXQorICAgICAgICBzZWxmLmFzc2VydElzKHZiLnZhbHVlLCBUcnVlKQorICAgICAgICB2Yi52YWx1ZSA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0SXModmIudmFsdWUsIEZhbHNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvU2V0dXAuc2FtcGxlIGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvU2V0dXAuc2FtcGxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmM0MjkwLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL1NldHVwLnNhbXBsZQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLSMgU2V0dXAgZmlsZSBmcm9tIHRoZSBweWdhbWUgcHJvamVjdAotCi0jLS1TdGFydENvbmZpZwotU0RMID0gLUkvdXNyL2luY2x1ZGUvU0RMIC1EX1JFRU5UUkFOVCAtbFNETAotRk9OVCA9IC1sU0RMX3R0ZgotSU1BR0UgPSAtbFNETF9pbWFnZQotTUlYRVIgPSAtbFNETF9taXhlcgotU01QRUcgPSAtbHNtcGVnCi1QTkcgPSAtbHBuZwotSlBFRyA9IC1sanBlZwotU0NSQVAgPSAtbFgxMQotUE9SVE1JREkgPSAtbHBvcnRtaWRpCi1QT1JUVElNRSA9IC1scG9ydHRpbWUKLSMtLUVuZENvbmZpZwotCi0jREVCVUcgPSAtQy1XIC1DLVdhbGwKLURFQlVHID0gCi0KLSN0aGUgZm9sbG93aW5nIG1vZHVsZXMgYXJlIG9wdGlvbmFsLiB5b3Ugd2lsbCB3YW50IHRvIGNvbXBpbGUKLSNldmVyeXRoaW5nIHlvdSBjYW4sIGJ1dCB5b3UgY2FuIGlnbm9yZSBvbmVzIHlvdSBkb24ndCBoYXZlCi0jZGVwZW5kZW5jaWVzIGZvciwganVzdCBjb21tZW50IHRoZW0gb3V0Ci0KLWltYWdlZXh0IHNyYy9pbWFnZWV4dC5jICQoU0RMKSAkKElNQUdFKSAkKFBORykgJChKUEVHKSAkKERFQlVHKQotZm9udCBzcmMvZm9udC5jICQoU0RMKSAkKEZPTlQpICQoREVCVUcpCi1taXhlciBzcmMvbWl4ZXIuYyAkKFNETCkgJChNSVhFUikgJChERUJVRykKLW1peGVyX211c2ljIHNyYy9tdXNpYy5jICQoU0RMKSAkKE1JWEVSKSAkKERFQlVHKQotX251bWVyaWNzdXJmYXJyYXkgc3JjL19udW1lcmljc3VyZmFycmF5LmMgJChTREwpICQoREVCVUcpCi1fbnVtZXJpY3NuZGFycmF5IHNyYy9fbnVtZXJpY3NuZGFycmF5LmMgJChTREwpICQoTUlYRVIpICQoREVCVUcpCi1tb3ZpZSBzcmMvbW92aWUuYyAkKFNETCkgJChTTVBFRykgJChERUJVRykKLXNjcmFwIHNyYy9zY3JhcC5jICQoU0RMKSAkKFNDUkFQKSAkKERFQlVHKQotX2NhbWVyYSBzcmMvX2NhbWVyYS5jIHNyYy9jYW1lcmFfdjRsMi5jIHNyYy9jYW1lcmFfdjRsLmMgJChTREwpICQoREVCVUcpCi1weXBtIHNyYy9weXBtLmMgJChTREwpICQoUE9SVE1JREkpICQoUE9SVFRJTUUpICQoREVCVUcpCi0KLUdGWCA9IHNyYy9TRExfZ2Z4L1NETF9nZnhQcmltaXRpdmVzLmMgCi0jR0ZYID0gc3JjL1NETF9nZngvU0RMX2dmeEJsaXRGdW5jLmMgc3JjL1NETF9nZngvU0RMX2dmeFByaW1pdGl2ZXMuYyAKLWdmeGRyYXcgc3JjL2dmeGRyYXcuYyAkKFNETCkgJChHRlgpICQoREVCVUcpCi0KLQotCi0jdGhlc2UgbW9kdWxlcyBhcmUgcmVxdWlyZWQgZm9yIHB5Z2FtZSB0byBydW4uIHRoZXkgb25seSByZXF1aXJlCi0jU0RMIGFzIGEgZGVwZW5kZW5jeS4gdGhlc2Ugc2hvdWxkIG5vdCBiZSBhbHRlcmVkCi0KLWJhc2Ugc3JjL2Jhc2UuYyAkKFNETCkgJChERUJVRykKLWNkcm9tIHNyYy9jZHJvbS5jICQoU0RMKSAkKERFQlVHKQotY29sb3Igc3JjL2NvbG9yLmMgJChTREwpICQoREVCVUcpCi1jb25zdGFudHMgc3JjL2NvbnN0YW50cy5jICQoU0RMKSAkKERFQlVHKQotZGlzcGxheSBzcmMvZGlzcGxheS5jICQoU0RMKSAkKERFQlVHKQotZXZlbnQgc3JjL2V2ZW50LmMgJChTREwpICQoREVCVUcpCi1mYXN0ZXZlbnQgc3JjL2Zhc3RldmVudC5jIHNyYy9mYXN0ZXZlbnRzLmMgJChTREwpICQoREVCVUcpCi1rZXkgc3JjL2tleS5jICQoU0RMKSAkKERFQlVHKQotbW91c2Ugc3JjL21vdXNlLmMgJChTREwpICQoREVCVUcpCi1yZWN0IHNyYy9yZWN0LmMgJChTREwpICQoREVCVUcpCi1yd29iamVjdCBzcmMvcndvYmplY3QuYyAkKFNETCkgJChERUJVRykKLXN1cmZhY2Ugc3JjL3N1cmZhY2UuYyBzcmMvYWxwaGFibGl0LmMgc3JjL3N1cmZhY2VfZmlsbC5jICQoU0RMKSAkKERFQlVHKQotc3VyZmxvY2sgc3JjL3N1cmZsb2NrLmMgJChTREwpICQoREVCVUcpCi10aW1lIHNyYy90aW1lLmMgJChTREwpICQoREVCVUcpCi1qb3lzdGljayBzcmMvam95c3RpY2suYyAkKFNETCkgJChERUJVRykKLWRyYXcgc3JjL2RyYXcuYyAkKFNETCkgJChERUJVRykKLWltYWdlIHNyYy9pbWFnZS5jICQoU0RMKSAkKERFQlVHKQotb3ZlcmxheSBzcmMvb3ZlcmxheS5jICQoU0RMKSAkKERFQlVHKQotdHJhbnNmb3JtIHNyYy90cmFuc2Zvcm0uYyBzcmMvcm90b3pvb20uYyBzcmMvc2NhbGUyeC5jIHNyYy9zY2FsZV9tbXguYyAkKFNETCkgJChERUJVRykKLW1hc2sgc3JjL21hc2suYyBzcmMvYml0bWFzay5jICQoU0RMKSAkKERFQlVHKQotYnVmZmVycHJveHkgc3JjL2J1ZmZlcnByb3h5LmMgJChTREwpICQoREVCVUcpCi1waXhlbGFycmF5IHNyYy9waXhlbGFycmF5LmMgJChTREwpICQoREVCVUcpCi1fYXJyYXlzdXJmYXJyYXkgc3JjL19hcnJheXN1cmZhcnJheS5jICQoU0RMKSAkKERFQlVHKQotCi0KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL19faW5pdF9fLnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5N2ZmODQuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0iIiJUZXN0IHN1aXRlIGZvciBkaXN0dXRpbHMuCi0KLVRoaXMgdGVzdCBzdWl0ZSBjb25zaXN0cyBvZiBhIGNvbGxlY3Rpb24gb2YgdGVzdCBtb2R1bGVzIGluIHRoZQotZGlzdHV0aWxzLnRlc3RzIHBhY2thZ2UuICBFYWNoIHRlc3QgbW9kdWxlIGhhcyBhIG5hbWUgc3RhcnRpbmcgd2l0aAotJ3Rlc3QnIGFuZCBjb250YWlucyBhIGZ1bmN0aW9uIHRlc3Rfc3VpdGUoKS4gIFRoZSBmdW5jdGlvbiBpcyBleHBlY3RlZAotdG8gcmV0dXJuIGFuIGluaXRpYWxpemVkIHVuaXR0ZXN0LlRlc3RTdWl0ZSBpbnN0YW5jZS4KLQotVGVzdHMgZm9yIHRoZSBjb21tYW5kIGNsYXNzZXMgaW4gdGhlIGRpc3R1dGlscy5jb21tYW5kIHBhY2thZ2UgYXJlCi1pbmNsdWRlZCBpbiBkaXN0dXRpbHMudGVzdHMgYXMgd2VsbCwgaW5zdGVhZCBvZiB1c2luZyBhIHNlcGFyYXRlCi1kaXN0dXRpbHMuY29tbWFuZC50ZXN0cyBwYWNrYWdlLCBzaW5jZSBjb21tYW5kIGlkZW50aWZpY2F0aW9uIGlzIGRvbmUKLWJ5IGltcG9ydCByYXRoZXIgdGhhbiBtYXRjaGluZyBwcmUtZGVmaW5lZCBuYW1lcy4KLQotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLQotCi1oZXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIKLQotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLSAgICBmb3IgZm4gaW4gb3MubGlzdGRpcihoZXJlKToKLSAgICAgICAgaWYgZm4uc3RhcnRzd2l0aCgidGVzdCIpIGFuZCBmbi5lbmRzd2l0aCgiLnB5Iik6Ci0gICAgICAgICAgICBtb2RuYW1lID0gImRpc3R1dGlscy50ZXN0cy4iICsgZm5bOi0zXQotICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RuYW1lKQotICAgICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbW9kbmFtZV0KLSAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QobW9kdWxlLnRlc3Rfc3VpdGUoKSkKLSAgICByZXR1cm4gc3VpdGUKLQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy9zZXR1cHRvb2xzX2J1aWxkX2V4dC5weSBiL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3NldHVwdG9vbHNfYnVpbGRfZXh0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWZhOWU4Li4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3NldHVwdG9vbHNfYnVpbGRfZXh0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjg3ICswLDAgQEAKLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfZXh0IGltcG9ydCBidWlsZF9leHQgYXMgX2R1X2J1aWxkX2V4dAotdHJ5OgotICAgICMgQXR0ZW1wdCB0byB1c2UgUHlyZXggZm9yIGJ1aWxkaW5nIGV4dGVuc2lvbnMsIGlmIGF2YWlsYWJsZQotICAgIGZyb20gUHlyZXguRGlzdHV0aWxzLmJ1aWxkX2V4dCBpbXBvcnQgYnVpbGRfZXh0IGFzIF9idWlsZF9leHQKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBfYnVpbGRfZXh0ID0gX2R1X2J1aWxkX2V4dAotCi1pbXBvcnQgb3MsIHN5cwotZnJvbSBkaXN0dXRpbHMuZmlsZV91dGlsIGltcG9ydCBjb3B5X2ZpbGUKLQotZnJvbSBkaXN0dXRpbHMudGVzdHMuc2V0dXB0b29sc19leHRlbnNpb24gaW1wb3J0IExpYnJhcnkKLQotZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBuZXdfY29tcGlsZXIKLWZyb20gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbXBvcnQgY3VzdG9taXplX2NvbXBpbGVyLCBnZXRfY29uZmlnX3ZhcgotZ2V0X2NvbmZpZ192YXIoIkxEU0hBUkVEIikgICMgbWFrZSBzdXJlIF9jb25maWdfdmFycyBpcyBpbml0aWFsaXplZAotZnJvbSBkaXN0dXRpbHMuc3lzY29uZmlnIGltcG9ydCBfY29uZmlnX3ZhcnMKLWZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKgotCi1oYXZlX3J0bGQgPSBGYWxzZQotdXNlX3N0dWJzID0gRmFsc2UKLWxpYnR5cGUgPSAnc2hhcmVkJwotCi1pZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6Ci0gICAgdXNlX3N0dWJzID0gVHJ1ZQotZWxpZiBvcy5uYW1lICE9ICdudCc6Ci0gICAgdHJ5OgotICAgICAgICBmcm9tIGRsIGltcG9ydCBSVExEX05PVwotICAgICAgICBoYXZlX3J0bGQgPSBUcnVlCi0gICAgICAgIHVzZV9zdHVicyA9IFRydWUKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MKLQotZGVmIGlmX2RsKHMpOgotICAgIGlmIGhhdmVfcnRsZDoKLSAgICAgICAgcmV0dXJuIHMKLSAgICByZXR1cm4gJycKLQotCi0KLQotCi0KLWNsYXNzIGJ1aWxkX2V4dChfYnVpbGRfZXh0KToKLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICAiIiJCdWlsZCBleHRlbnNpb25zIGluIGJ1aWxkIGRpcmVjdG9yeSwgdGhlbiBjb3B5IGlmIC0taW5wbGFjZSIiIgotICAgICAgICBvbGRfaW5wbGFjZSwgc2VsZi5pbnBsYWNlID0gc2VsZi5pbnBsYWNlLCAwCi0gICAgICAgIF9idWlsZF9leHQucnVuKHNlbGYpCi0gICAgICAgIHNlbGYuaW5wbGFjZSA9IG9sZF9pbnBsYWNlCi0gICAgICAgIGlmIG9sZF9pbnBsYWNlOgotICAgICAgICAgICAgc2VsZi5jb3B5X2V4dGVuc2lvbnNfdG9fc291cmNlKCkKLQotICAgIGRlZiBjb3B5X2V4dGVuc2lvbnNfdG9fc291cmNlKHNlbGYpOgotICAgICAgICBidWlsZF9weSA9IHNlbGYuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdidWlsZF9weScpCi0gICAgICAgIGZvciBleHQgaW4gc2VsZi5leHRlbnNpb25zOgotICAgICAgICAgICAgZnVsbG5hbWUgPSBzZWxmLmdldF9leHRfZnVsbG5hbWUoZXh0Lm5hbWUpCi0gICAgICAgICAgICBmaWxlbmFtZSA9IHNlbGYuZ2V0X2V4dF9maWxlbmFtZShmdWxsbmFtZSkKLSAgICAgICAgICAgIG1vZHBhdGggPSBmdWxsbmFtZS5zcGxpdCgnLicpCi0gICAgICAgICAgICBwYWNrYWdlID0gJy4nLmpvaW4obW9kcGF0aFs6LTFdKQotICAgICAgICAgICAgcGFja2FnZV9kaXIgPSBidWlsZF9weS5nZXRfcGFja2FnZV9kaXIocGFja2FnZSkKLSAgICAgICAgICAgIGRlc3RfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocGFja2FnZV9kaXIsb3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpCi0gICAgICAgICAgICBzcmNfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9saWIsZmlsZW5hbWUpCi0KLSAgICAgICAgICAgICMgQWx3YXlzIGNvcHksIGV2ZW4gaWYgc291cmNlIGlzIG9sZGVyIHRoYW4gZGVzdGluYXRpb24sIHRvIGVuc3VyZQotICAgICAgICAgICAgIyB0aGF0IHRoZSByaWdodCBleHRlbnNpb25zIGZvciB0aGUgY3VycmVudCBQeXRob24vcGxhdGZvcm0gYXJlCi0gICAgICAgICAgICAjIHVzZWQuCi0gICAgICAgICAgICBjb3B5X2ZpbGUoCi0gICAgICAgICAgICAgICAgc3JjX2ZpbGVuYW1lLCBkZXN0X2ZpbGVuYW1lLCB2ZXJib3NlPXNlbGYudmVyYm9zZSwKLSAgICAgICAgICAgICAgICBkcnlfcnVuPXNlbGYuZHJ5X3J1bgotICAgICAgICAgICAgKQotICAgICAgICAgICAgaWYgZXh0Ll9uZWVkc19zdHViOgotICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfc3R1YihwYWNrYWdlX2RpciBvciBvcy5jdXJkaXIsIGV4dCwgVHJ1ZSkKLQotCi0gICAgaWYgX2J1aWxkX2V4dCBpcyBub3QgX2R1X2J1aWxkX2V4dCBhbmQgbm90IGhhc2F0dHIoX2J1aWxkX2V4dCwncHlyZXhfc291cmNlcycpOgotICAgICAgICAjIFdvcmthcm91bmQgZm9yIHByb2JsZW1zIHVzaW5nIHNvbWUgUHlyZXggdmVyc2lvbnMgdy9TV0lHIGFuZC9vciAyLjQKLSAgICAgICAgZGVmIHN3aWdfc291cmNlcyhzZWxmLCBzb3VyY2VzLCAqb3RoZXJhcmdzKToKLSAgICAgICAgICAgICMgZmlyc3QgZG8gYW55IFB5cmV4IHByb2Nlc3NpbmcKLSAgICAgICAgICAgIHNvdXJjZXMgPSBfYnVpbGRfZXh0LnN3aWdfc291cmNlcyhzZWxmLCBzb3VyY2VzKSBvciBzb3VyY2VzCi0gICAgICAgICAgICAjIFRoZW4gZG8gYW55IGFjdHVhbCBTV0lHIHN0dWZmIG9uIHRoZSByZW1haW5kZXIKLSAgICAgICAgICAgIHJldHVybiBfZHVfYnVpbGRfZXh0LnN3aWdfc291cmNlcyhzZWxmLCBzb3VyY2VzLCAqb3RoZXJhcmdzKQotCi0KLQotICAgIGRlZiBnZXRfZXh0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgZmlsZW5hbWUgPSBfYnVpbGRfZXh0LmdldF9leHRfZmlsZW5hbWUoc2VsZixmdWxsbmFtZSkKLSAgICAgICAgZXh0ID0gc2VsZi5leHRfbWFwW2Z1bGxuYW1lXQotICAgICAgICBpZiBpc2luc3RhbmNlKGV4dCxMaWJyYXJ5KToKLSAgICAgICAgICAgIGZuLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2hsaWJfY29tcGlsZXIubGlicmFyeV9maWxlbmFtZShmbixsaWJ0eXBlKQotICAgICAgICBlbGlmIHVzZV9zdHVicyBhbmQgZXh0Ll9saW5rc190b19keW5hbWljOgotICAgICAgICAgICAgZCxmbiA9IG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpCi0gICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKGQsJ2RsLScrZm4pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gZmlsZW5hbWUKLQotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIF9idWlsZF9leHQuaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpCi0gICAgICAgIHNlbGYuc2hsaWJfY29tcGlsZXIgPSBOb25lCi0gICAgICAgIHNlbGYuc2hsaWJzID0gW10KLSAgICAgICAgc2VsZi5leHRfbWFwID0ge30KLQotICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBfYnVpbGRfZXh0LmZpbmFsaXplX29wdGlvbnMoc2VsZikKLSAgICAgICAgc2VsZi5leHRlbnNpb25zID0gc2VsZi5leHRlbnNpb25zIG9yIFtdCi0gICAgICAgIHNlbGYuY2hlY2tfZXh0ZW5zaW9uc19saXN0KHNlbGYuZXh0ZW5zaW9ucykKLSAgICAgICAgc2VsZi5zaGxpYnMgPSBbZXh0IGZvciBleHQgaW4gc2VsZi5leHRlbnNpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4dCxMaWJyYXJ5KV0KLSAgICAgICAgaWYgc2VsZi5zaGxpYnM6Ci0gICAgICAgICAgICBzZWxmLnNldHVwX3NobGliX2NvbXBpbGVyKCkKLSAgICAgICAgZm9yIGV4dCBpbiBzZWxmLmV4dGVuc2lvbnM6Ci0gICAgICAgICAgICBleHQuX2Z1bGxfbmFtZSA9IHNlbGYuZ2V0X2V4dF9mdWxsbmFtZShleHQubmFtZSkKLSAgICAgICAgZm9yIGV4dCBpbiBzZWxmLmV4dGVuc2lvbnM6Ci0gICAgICAgICAgICBmdWxsbmFtZSA9IGV4dC5fZnVsbF9uYW1lCi0gICAgICAgICAgICBzZWxmLmV4dF9tYXBbZnVsbG5hbWVdID0gZXh0Ci0gICAgICAgICAgICBsdGQgPSBleHQuX2xpbmtzX3RvX2R5bmFtaWMgPSBcCi0gICAgICAgICAgICAgICAgc2VsZi5zaGxpYnMgYW5kIHNlbGYubGlua3NfdG9fZHluYW1pYyhleHQpIG9yIEZhbHNlCi0gICAgICAgICAgICBleHQuX25lZWRzX3N0dWIgPSBsdGQgYW5kIHVzZV9zdHVicyBhbmQgbm90IGlzaW5zdGFuY2UoZXh0LExpYnJhcnkpCi0gICAgICAgICAgICBmaWxlbmFtZSA9IGV4dC5fZmlsZV9uYW1lID0gc2VsZi5nZXRfZXh0X2ZpbGVuYW1lKGZ1bGxuYW1lKQotICAgICAgICAgICAgbGliZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2xpYixmaWxlbmFtZSkpCi0gICAgICAgICAgICBpZiBsdGQgYW5kIGxpYmRpciBub3QgaW4gZXh0LmxpYnJhcnlfZGlyczoKLSAgICAgICAgICAgICAgICBleHQubGlicmFyeV9kaXJzLmFwcGVuZChsaWJkaXIpCi0gICAgICAgICAgICBpZiBsdGQgYW5kIHVzZV9zdHVicyBhbmQgb3MuY3VyZGlyIG5vdCBpbiBleHQucnVudGltZV9saWJyYXJ5X2RpcnM6Ci0gICAgICAgICAgICAgICAgZXh0LnJ1bnRpbWVfbGlicmFyeV9kaXJzLmFwcGVuZChvcy5jdXJkaXIpCi0KLSAgICBkZWYgc2V0dXBfc2hsaWJfY29tcGlsZXIoc2VsZik6Ci0gICAgICAgIGNvbXBpbGVyID0gc2VsZi5zaGxpYl9jb21waWxlciA9IG5ld19jb21waWxlcigKLSAgICAgICAgICAgIGNvbXBpbGVyPXNlbGYuY29tcGlsZXIsIGRyeV9ydW49c2VsZi5kcnlfcnVuLCBmb3JjZT1zZWxmLmZvcmNlCi0gICAgICAgICkKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgotICAgICAgICAgICAgdG1wID0gX2NvbmZpZ192YXJzLmNvcHkoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgWFhYIEhlbHAhICBJIGRvbid0IGhhdmUgYW55IGlkZWEgd2hldGhlciB0aGVzZSBhcmUgcmlnaHQuLi4KLSAgICAgICAgICAgICAgICBfY29uZmlnX3ZhcnNbJ0xEU0hBUkVEJ10gPSAiZ2NjIC1XbCwteCAtZHluYW1pY2xpYiAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwIgotICAgICAgICAgICAgICAgIF9jb25maWdfdmFyc1snQ0NTSEFSRUQnXSA9ICIgLWR5bmFtaWNsaWIiCi0gICAgICAgICAgICAgICAgX2NvbmZpZ192YXJzWydTTyddID0gIi5keWxpYiIKLSAgICAgICAgICAgICAgICBjdXN0b21pemVfY29tcGlsZXIoY29tcGlsZXIpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIF9jb25maWdfdmFycy5jbGVhcigpCi0gICAgICAgICAgICAgICAgX2NvbmZpZ192YXJzLnVwZGF0ZSh0bXApCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjdXN0b21pemVfY29tcGlsZXIoY29tcGlsZXIpCi0KLSAgICAgICAgaWYgc2VsZi5pbmNsdWRlX2RpcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBjb21waWxlci5zZXRfaW5jbHVkZV9kaXJzKHNlbGYuaW5jbHVkZV9kaXJzKQotICAgICAgICBpZiBzZWxmLmRlZmluZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICMgJ2RlZmluZScgb3B0aW9uIGlzIGEgbGlzdCBvZiAobmFtZSx2YWx1ZSkgdHVwbGVzCi0gICAgICAgICAgICBmb3IgKG5hbWUsdmFsdWUpIGluIHNlbGYuZGVmaW5lOgotICAgICAgICAgICAgICAgIGNvbXBpbGVyLmRlZmluZV9tYWNybyhuYW1lLCB2YWx1ZSkKLSAgICAgICAgaWYgc2VsZi51bmRlZiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGZvciBtYWNybyBpbiBzZWxmLnVuZGVmOgotICAgICAgICAgICAgICAgIGNvbXBpbGVyLnVuZGVmaW5lX21hY3JvKG1hY3JvKQotICAgICAgICBpZiBzZWxmLmxpYnJhcmllcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGNvbXBpbGVyLnNldF9saWJyYXJpZXMoc2VsZi5saWJyYXJpZXMpCi0gICAgICAgIGlmIHNlbGYubGlicmFyeV9kaXJzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgY29tcGlsZXIuc2V0X2xpYnJhcnlfZGlycyhzZWxmLmxpYnJhcnlfZGlycykKLSAgICAgICAgaWYgc2VsZi5ycGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGNvbXBpbGVyLnNldF9ydW50aW1lX2xpYnJhcnlfZGlycyhzZWxmLnJwYXRoKQotICAgICAgICBpZiBzZWxmLmxpbmtfb2JqZWN0cyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGNvbXBpbGVyLnNldF9saW5rX29iamVjdHMoc2VsZi5saW5rX29iamVjdHMpCi0KLSAgICAgICAgIyBoYWNrIHNvIGRpc3R1dGlscycgYnVpbGRfZXh0ZW5zaW9uKCkgYnVpbGRzIGEgbGlicmFyeSBpbnN0ZWFkCi0gICAgICAgIGNvbXBpbGVyLmxpbmtfc2hhcmVkX29iamVjdCA9IGxpbmtfc2hhcmVkX29iamVjdC5fX2dldF9fKGNvbXBpbGVyKQotCi0KLQotICAgIGRlZiBnZXRfZXhwb3J0X3N5bWJvbHMoc2VsZiwgZXh0KToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShleHQsTGlicmFyeSk6Ci0gICAgICAgICAgICByZXR1cm4gZXh0LmV4cG9ydF9zeW1ib2xzCi0gICAgICAgIHJldHVybiBfYnVpbGRfZXh0LmdldF9leHBvcnRfc3ltYm9scyhzZWxmLGV4dCkKLQotICAgIGRlZiBidWlsZF9leHRlbnNpb24oc2VsZiwgZXh0KToKLSAgICAgICAgX2NvbXBpbGVyID0gc2VsZi5jb21waWxlcgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4dCxMaWJyYXJ5KToKLSAgICAgICAgICAgICAgICBzZWxmLmNvbXBpbGVyID0gc2VsZi5zaGxpYl9jb21waWxlcgotICAgICAgICAgICAgX2J1aWxkX2V4dC5idWlsZF9leHRlbnNpb24oc2VsZixleHQpCi0gICAgICAgICAgICBpZiBleHQuX25lZWRzX3N0dWI6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZV9zdHViKAotICAgICAgICAgICAgICAgICAgICBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYnVpbGRfcHknKS5idWlsZF9saWIsIGV4dAotICAgICAgICAgICAgICAgICkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuY29tcGlsZXIgPSBfY29tcGlsZXIKLQotICAgIGRlZiBsaW5rc190b19keW5hbWljKHNlbGYsIGV4dCk6Ci0gICAgICAgICIiIlJldHVybiB0cnVlIGlmICdleHQnIGxpbmtzIHRvIGEgZHluYW1pYyBsaWIgaW4gdGhlIHNhbWUgcGFja2FnZSIiIgotICAgICAgICAjIFhYWCB0aGlzIHNob3VsZCBjaGVjayB0byBlbnN1cmUgdGhlIGxpYiBpcyBhY3R1YWxseSBiZWluZyBidWlsdAotICAgICAgICAjIFhYWCBhcyBkeW5hbWljLCBhbmQgbm90IGp1c3QgdXNpbmcgYSBsb2NhbGx5LWZvdW5kIHZlcnNpb24gb3IgYQotICAgICAgICAjIFhYWCBzdGF0aWMtY29tcGlsZWQgdmVyc2lvbgotICAgICAgICBsaWJuYW1lcyA9IGRpY3QuZnJvbWtleXMoW2xpYi5fZnVsbF9uYW1lIGZvciBsaWIgaW4gc2VsZi5zaGxpYnNdKQotICAgICAgICBwa2cgPSAnLicuam9pbihleHQuX2Z1bGxfbmFtZS5zcGxpdCgnLicpWzotMV0rWycnXSkKLSAgICAgICAgZm9yIGxpYm5hbWUgaW4gZXh0LmxpYnJhcmllczoKLSAgICAgICAgICAgIGlmIHBrZytsaWJuYW1lIGluIGxpYm5hbWVzOiByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBnZXRfb3V0cHV0cyhzZWxmKToKLSAgICAgICAgb3V0cHV0cyA9IF9idWlsZF9leHQuZ2V0X291dHB1dHMoc2VsZikKLSAgICAgICAgb3B0aW1pemUgPSBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYnVpbGRfcHknKS5vcHRpbWl6ZQotICAgICAgICBmb3IgZXh0IGluIHNlbGYuZXh0ZW5zaW9uczoKLSAgICAgICAgICAgIGlmIGV4dC5fbmVlZHNfc3R1YjoKLSAgICAgICAgICAgICAgICBiYXNlID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfbGliLCAqZXh0Ll9mdWxsX25hbWUuc3BsaXQoJy4nKSkKLSAgICAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChiYXNlKycucHknKQotICAgICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGJhc2UrJy5weWMnKQotICAgICAgICAgICAgICAgIGlmIG9wdGltaXplOgotICAgICAgICAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChiYXNlKycucHlvJykKLSAgICAgICAgcmV0dXJuIG91dHB1dHMKLQotICAgIGRlZiB3cml0ZV9zdHViKHNlbGYsIG91dHB1dF9kaXIsIGV4dCwgY29tcGlsZT1GYWxzZSk6Ci0gICAgICAgIGxvZy5pbmZvKCJ3cml0aW5nIHN0dWIgbG9hZGVyIGZvciAlcyB0byAlcyIsZXh0Ll9mdWxsX25hbWUsIG91dHB1dF9kaXIpCi0gICAgICAgIHN0dWJfZmlsZSA9IG9zLnBhdGguam9pbihvdXRwdXRfZGlyLCAqZXh0Ll9mdWxsX25hbWUuc3BsaXQoJy4nKSkrJy5weScKLSAgICAgICAgaWYgY29tcGlsZSBhbmQgb3MucGF0aC5leGlzdHMoc3R1Yl9maWxlKToKLSAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0Vycm9yKHN0dWJfZmlsZSsiIGFscmVhZHkgZXhpc3RzISBQbGVhc2UgZGVsZXRlLiIpCi0gICAgICAgIGlmIG5vdCBzZWxmLmRyeV9ydW46Ci0gICAgICAgICAgICBmID0gb3BlbihzdHViX2ZpbGUsJ3cnKQotICAgICAgICAgICAgZi53cml0ZSgnXG4nLmpvaW4oWwotICAgICAgICAgICAgICAgICJkZWYgX19ib290c3RyYXBfXygpOiIsCi0gICAgICAgICAgICAgICAgIiAgIGdsb2JhbCBfX2Jvb3RzdHJhcF9fLCBfX2ZpbGVfXywgX19sb2FkZXJfXyIsCi0gICAgICAgICAgICAgICAgIiAgIGltcG9ydCBzeXMsIG9zLCBwa2dfcmVzb3VyY2VzLCBpbXAiK2lmX2RsKCIsIGRsIiksCi0gICAgICAgICAgICAgICAgIiAgIF9fZmlsZV9fID0gcGtnX3Jlc291cmNlcy5yZXNvdXJjZV9maWxlbmFtZShfX25hbWVfXywlcikiCi0gICAgICAgICAgICAgICAgICAgJSBvcy5wYXRoLmJhc2VuYW1lKGV4dC5fZmlsZV9uYW1lKSwKLSAgICAgICAgICAgICAgICAiICAgZGVsIF9fYm9vdHN0cmFwX18iLAotICAgICAgICAgICAgICAgICIgICBpZiAnX19sb2FkZXJfXycgaW4gZ2xvYmFscygpOiIsCi0gICAgICAgICAgICAgICAgIiAgICAgICBkZWwgX19sb2FkZXJfXyIsCi0gICAgICAgICAgICAgICAgaWZfZGwoIiAgIG9sZF9mbGFncyA9IHN5cy5nZXRkbG9wZW5mbGFncygpIiksCi0gICAgICAgICAgICAgICAgIiAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKSIsCi0gICAgICAgICAgICAgICAgIiAgIHRyeToiLAotICAgICAgICAgICAgICAgICIgICAgIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpIiwKLSAgICAgICAgICAgICAgICBpZl9kbCgiICAgICBzeXMuc2V0ZGxvcGVuZmxhZ3MoZGwuUlRMRF9OT1cpIiksCi0gICAgICAgICAgICAgICAgIiAgICAgaW1wLmxvYWRfZHluYW1pYyhfX25hbWVfXyxfX2ZpbGVfXykiLAotICAgICAgICAgICAgICAgICIgICBmaW5hbGx5OiIsCi0gICAgICAgICAgICAgICAgaWZfZGwoIiAgICAgc3lzLnNldGRsb3BlbmZsYWdzKG9sZF9mbGFncykiKSwKLSAgICAgICAgICAgICAgICAiICAgICBvcy5jaGRpcihvbGRfZGlyKSIsCi0gICAgICAgICAgICAgICAgIl9fYm9vdHN0cmFwX18oKSIsCi0gICAgICAgICAgICAgICAgIiIgIyB0ZXJtaW5hbCBcbgotICAgICAgICAgICAgXSkpCi0gICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgaWYgY29tcGlsZToKLSAgICAgICAgICAgIGZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGJ5dGVfY29tcGlsZQotICAgICAgICAgICAgYnl0ZV9jb21waWxlKFtzdHViX2ZpbGVdLCBvcHRpbWl6ZT0wLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlPVRydWUsIGRyeV9ydW49c2VsZi5kcnlfcnVuKQotICAgICAgICAgICAgb3B0aW1pemUgPSBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnaW5zdGFsbF9saWInKS5vcHRpbWl6ZQotICAgICAgICAgICAgaWYgb3B0aW1pemUgPiAwOgotICAgICAgICAgICAgICAgIGJ5dGVfY29tcGlsZShbc3R1Yl9maWxlXSwgb3B0aW1pemU9b3B0aW1pemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlPVRydWUsIGRyeV9ydW49c2VsZi5kcnlfcnVuKQotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3R1Yl9maWxlKSBhbmQgbm90IHNlbGYuZHJ5X3J1bjoKLSAgICAgICAgICAgICAgICBvcy51bmxpbmsoc3R1Yl9maWxlKQotCi0KLWlmIHVzZV9zdHVicyBvciBvcy5uYW1lPT0nbnQnOgotICAgICMgQnVpbGQgc2hhcmVkIGxpYnJhcmllcwotICAgICMKLSAgICBkZWYgbGlua19zaGFyZWRfb2JqZWN0KHNlbGYsIG9iamVjdHMsIG91dHB1dF9saWJuYW1lLCBvdXRwdXRfZGlyPU5vbmUsCi0gICAgICAgIGxpYnJhcmllcz1Ob25lLCBsaWJyYXJ5X2RpcnM9Tm9uZSwgcnVudGltZV9saWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgZXhwb3J0X3N5bWJvbHM9Tm9uZSwgZGVidWc9MCwgZXh0cmFfcHJlYXJncz1Ob25lLAotICAgICAgICBleHRyYV9wb3N0YXJncz1Ob25lLCBidWlsZF90ZW1wPU5vbmUsIHRhcmdldF9sYW5nPU5vbmUKLSAgICApOiAgc2VsZi5saW5rKAotICAgICAgICAgICAgc2VsZi5TSEFSRURfTElCUkFSWSwgb2JqZWN0cywgb3V0cHV0X2xpYm5hbWUsCi0gICAgICAgICAgICBvdXRwdXRfZGlyLCBsaWJyYXJpZXMsIGxpYnJhcnlfZGlycywgcnVudGltZV9saWJyYXJ5X2RpcnMsCi0gICAgICAgICAgICBleHBvcnRfc3ltYm9scywgZGVidWcsIGV4dHJhX3ByZWFyZ3MsIGV4dHJhX3Bvc3RhcmdzLAotICAgICAgICAgICAgYnVpbGRfdGVtcCwgdGFyZ2V0X2xhbmcKLSAgICAgICAgKQotZWxzZToKLSAgICAjIEJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgZXZlcnl3aGVyZSBlbHNlCi0gICAgbGlidHlwZSA9ICdzdGF0aWMnCi0KLSAgICBkZWYgbGlua19zaGFyZWRfb2JqZWN0KHNlbGYsIG9iamVjdHMsIG91dHB1dF9saWJuYW1lLCBvdXRwdXRfZGlyPU5vbmUsCi0gICAgICAgIGxpYnJhcmllcz1Ob25lLCBsaWJyYXJ5X2RpcnM9Tm9uZSwgcnVudGltZV9saWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgZXhwb3J0X3N5bWJvbHM9Tm9uZSwgZGVidWc9MCwgZXh0cmFfcHJlYXJncz1Ob25lLAotICAgICAgICBleHRyYV9wb3N0YXJncz1Ob25lLCBidWlsZF90ZW1wPU5vbmUsIHRhcmdldF9sYW5nPU5vbmUKLSAgICApOgotICAgICAgICAjIFhYWCB3ZSBuZWVkIHRvIGVpdGhlciBkaXNhbGxvdyB0aGVzZSBhdHRycyBvbiBMaWJyYXJ5IGluc3RhbmNlcywKLSAgICAgICAgIyAgICAgb3Igd2Fybi9hYm9ydCBoZXJlIGlmIHNldCwgb3Igc29tZXRoaW5nLi4uCi0gICAgICAgICNsaWJyYXJpZXM9Tm9uZSwgbGlicmFyeV9kaXJzPU5vbmUsIHJ1bnRpbWVfbGlicmFyeV9kaXJzPU5vbmUsCi0gICAgICAgICNleHBvcnRfc3ltYm9scz1Ob25lLCBleHRyYV9wcmVhcmdzPU5vbmUsIGV4dHJhX3Bvc3RhcmdzPU5vbmUsCi0gICAgICAgICNidWlsZF90ZW1wPU5vbmUKLQotICAgICAgICBhc3NlcnQgb3V0cHV0X2RpciBpcyBOb25lICAgIyBkaXN0dXRpbHMgYnVpbGRfZXh0IGRvZXNuJ3QgcGFzcyB0aGlzCi0gICAgICAgIG91dHB1dF9kaXIsZmlsZW5hbWUgPSBvcy5wYXRoLnNwbGl0KG91dHB1dF9saWJuYW1lKQotICAgICAgICBiYXNlbmFtZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKLSAgICAgICAgaWYgc2VsZi5saWJyYXJ5X2ZpbGVuYW1lKCJ4Iikuc3RhcnRzd2l0aCgnbGliJyk6Ci0gICAgICAgICAgICAjIHN0cmlwICdsaWInIHByZWZpeDsgdGhpcyBpcyBrbHVkZ3kgaWYgc29tZSBwbGF0Zm9ybSB1c2VzCi0gICAgICAgICAgICAjIGEgZGlmZmVyZW50IHByZWZpeAotICAgICAgICAgICAgYmFzZW5hbWUgPSBiYXNlbmFtZVszOl0KLQotICAgICAgICBzZWxmLmNyZWF0ZV9zdGF0aWNfbGliKAotICAgICAgICAgICAgb2JqZWN0cywgYmFzZW5hbWUsIG91dHB1dF9kaXIsIGRlYnVnLCB0YXJnZXRfbGFuZwotICAgICAgICApCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy9zZXR1cHRvb2xzX2V4dGVuc2lvbi5weSBiL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3NldHVwdG9vbHNfZXh0ZW5zaW9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzZiNjkwLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3NldHVwdG9vbHNfZXh0ZW5zaW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRXh0ZW5zaW9uIGFzIF9FeHRlbnNpb24KLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbiBhcyBfRGlzdHJpYnV0aW9uCi0KLWRlZiBfZ2V0X3VucGF0Y2hlZChjbHMpOgotICAgICIiIlByb3RlY3QgYWdhaW5zdCByZS1wYXRjaGluZyB0aGUgZGlzdHV0aWxzIGlmIHJlbG9hZGVkCi0KLSAgICBBbHNvIGVuc3VyZXMgdGhhdCBubyBvdGhlciBkaXN0dXRpbHMgZXh0ZW5zaW9uIG1vbmtleXBhdGNoZWQgdGhlIGRpc3R1dGlscwotICAgIGZpcnN0LgotICAgICIiIgotICAgIHdoaWxlIGNscy5fX21vZHVsZV9fLnN0YXJ0c3dpdGgoJ3NldHVwdG9vbHMnKToKLSAgICAgICAgY2xzLCA9IGNscy5fX2Jhc2VzX18KLSAgICBpZiBub3QgY2xzLl9fbW9kdWxlX18uc3RhcnRzd2l0aCgnZGlzdHV0aWxzJyk6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAotICAgICAgICAgICAgImRpc3R1dGlscyBoYXMgYWxyZWFkeSBiZWVuIHBhdGNoZWQgYnkgJXIiICUgY2xzCi0gICAgICAgICkKLSAgICByZXR1cm4gY2xzCi0KLV9EaXN0cmlidXRpb24gPSBfZ2V0X3VucGF0Y2hlZChfRGlzdHJpYnV0aW9uKQotX0V4dGVuc2lvbiA9IF9nZXRfdW5wYXRjaGVkKF9FeHRlbnNpb24pCi0KLXRyeToKLSAgICBmcm9tIFB5cmV4LkRpc3R1dGlscy5idWlsZF9leHQgaW1wb3J0IGJ1aWxkX2V4dAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGhhdmVfcHlyZXggPSBGYWxzZQotZWxzZToKLSAgICBoYXZlX3B5cmV4ID0gVHJ1ZQotCi0KLWNsYXNzIEV4dGVuc2lvbihfRXh0ZW5zaW9uKToKLSAgICAiIiJFeHRlbnNpb24gdGhhdCB1c2VzICcuYycgZmlsZXMgaW4gcGxhY2Ugb2YgJy5weXgnIGZpbGVzIiIiCi0KLSAgICBpZiBub3QgaGF2ZV9weXJleDoKLSAgICAgICAgIyBjb252ZXJ0IC5weXggZXh0ZW5zaW9ucyB0byAuYwotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwqYXJncywqKmt3KToKLSAgICAgICAgICAgIF9FeHRlbnNpb24uX19pbml0X18oc2VsZiwqYXJncywqKmt3KQotICAgICAgICAgICAgc291cmNlcyA9IFtdCi0gICAgICAgICAgICBmb3IgcyBpbiBzZWxmLnNvdXJjZXM6Ci0gICAgICAgICAgICAgICAgaWYgcy5lbmRzd2l0aCgnLnB5eCcpOgotICAgICAgICAgICAgICAgICAgICBzb3VyY2VzLmFwcGVuZChzWzotM10rJ2MnKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZXMuYXBwZW5kKHMpCi0gICAgICAgICAgICBzZWxmLnNvdXJjZXMgPSBzb3VyY2VzCi0KLWNsYXNzIExpYnJhcnkoRXh0ZW5zaW9uKToKLSAgICAiIiJKdXN0IGxpa2UgYSByZWd1bGFyIEV4dGVuc2lvbiwgYnV0IGJ1aWx0IGFzIGEgbGlicmFyeSBpbnN0ZWFkIiIiCi0KLWltcG9ydCBzeXMsIGRpc3R1dGlscy5jb3JlLCBkaXN0dXRpbHMuZXh0ZW5zaW9uCi1kaXN0dXRpbHMuY29yZS5FeHRlbnNpb24gPSBFeHRlbnNpb24KLWRpc3R1dGlscy5leHRlbnNpb24uRXh0ZW5zaW9uID0gRXh0ZW5zaW9uCi1pZiAnZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfZXh0JyBpbiBzeXMubW9kdWxlczoKLSAgICBzeXMubW9kdWxlc1snZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfZXh0J10uRXh0ZW5zaW9uID0gRXh0ZW5zaW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy9zdXBwb3J0LnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvc3VwcG9ydC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU2MDU4ZC4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy9zdXBwb3J0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLSIiIlN1cHBvcnQgY29kZSBmb3IgZGlzdHV0aWxzIHRlc3QgY2FzZXMuIiIiCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCBzaHV0aWwKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgc3lzY29uZmlnCi1mcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5Ci1pbXBvcnQgd2FybmluZ3MKLQotZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwotZnJvbSBkaXN0dXRpbHMubG9nIGltcG9ydCBERUJVRywgSU5GTywgV0FSTiwgRVJST1IsIEZBVEFMCi1mcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBEaXN0cmlidXRpb24KLQotCi1kZWYgY2FwdHVyZV93YXJuaW5ncyhmdW5jKToKLSAgICBkZWYgX2NhcHR1cmVfd2FybmluZ3MoKmFyZ3MsICoqa3cpOgotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIpCi0gICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprdykKLSAgICByZXR1cm4gX2NhcHR1cmVfd2FybmluZ3MKLQotCi1jbGFzcyBMb2dnaW5nU2lsZW5jZXIob2JqZWN0KToKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1NpbGVuY2VyLCBzZWxmKS5zZXRVcCgpCi0gICAgICAgIHNlbGYudGhyZXNob2xkID0gbG9nLnNldF90aHJlc2hvbGQobG9nLkZBVEFMKQotICAgICAgICAjIGNhdGNoaW5nIHdhcm5pbmdzCi0gICAgICAgICMgd2hlbiBsb2cgd2lsbCBiZSByZXBsYWNlZCBieSBsb2dnaW5nCi0gICAgICAgICMgd2Ugd29uJ3QgbmVlZCBzdWNoIG1vbmtleS1wYXRjaCBhbnltb3JlCi0gICAgICAgIHNlbGYuX29sZF9sb2cgPSBsb2cuTG9nLl9sb2cKLSAgICAgICAgbG9nLkxvZy5fbG9nID0gc2VsZi5fbG9nCi0gICAgICAgIHNlbGYubG9ncyA9IFtdCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIGxvZy5zZXRfdGhyZXNob2xkKHNlbGYudGhyZXNob2xkKQotICAgICAgICBsb2cuTG9nLl9sb2cgPSBzZWxmLl9vbGRfbG9nCi0gICAgICAgIHN1cGVyKExvZ2dpbmdTaWxlbmNlciwgc2VsZikudGVhckRvd24oKQotCi0gICAgZGVmIF9sb2coc2VsZiwgbGV2ZWwsIG1zZywgYXJncyk6Ci0gICAgICAgIGlmIGxldmVsIG5vdCBpbiAoREVCVUcsIElORk8sIFdBUk4sIEVSUk9SLCBGQVRBTCk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCclcyB3cm9uZyBsb2cgbGV2ZWwnICUgc3RyKGxldmVsKSkKLSAgICAgICAgc2VsZi5sb2dzLmFwcGVuZCgobGV2ZWwsIG1zZywgYXJncykpCi0KLSAgICBkZWYgZ2V0X2xvZ3Moc2VsZiwgKmxldmVscyk6Ci0gICAgICAgIGRlZiBfZm9ybWF0KG1zZywgYXJncyk6Ci0gICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKLSAgICAgICAgICAgICAgICByZXR1cm4gbXNnCi0gICAgICAgICAgICByZXR1cm4gbXNnICUgYXJncwotICAgICAgICByZXR1cm4gW19mb3JtYXQobXNnLCBhcmdzKSBmb3IgbGV2ZWwsIG1zZywgYXJncwotICAgICAgICAgICAgICAgIGluIHNlbGYubG9ncyBpZiBsZXZlbCBpbiBsZXZlbHNdCi0KLSAgICBkZWYgY2xlYXJfbG9ncyhzZWxmKToKLSAgICAgICAgc2VsZi5sb2dzID0gW10KLQotCi1jbGFzcyBUZW1wZGlyTWFuYWdlcihvYmplY3QpOgotICAgICIiIk1peC1pbiBjbGFzcyB0aGF0IGhhbmRsZXMgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIGZvciB0ZXN0IGNhc2VzLgotCi0gICAgVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggdW5pdHRlc3QuVGVzdENhc2UuCi0gICAgIiIiCi0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cGVyKFRlbXBkaXJNYW5hZ2VyLCBzZWxmKS5zZXRVcCgpCi0gICAgICAgIHNlbGYub2xkX2N3ZCA9IG9zLmdldGN3ZCgpCi0gICAgICAgIHNlbGYudGVtcGRpcnMgPSBbXQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICAjIFJlc3RvcmUgd29ya2luZyBkaXIsIGZvciBTb2xhcmlzIGFuZCBkZXJpdmF0aXZlcywgd2hlcmUgcm1kaXIoKQotICAgICAgICAjIG9uIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmYWlscy4KLSAgICAgICAgb3MuY2hkaXIoc2VsZi5vbGRfY3dkKQotICAgICAgICBzdXBlcihUZW1wZGlyTWFuYWdlciwgc2VsZikudGVhckRvd24oKQotICAgICAgICB3aGlsZSBzZWxmLnRlbXBkaXJzOgotICAgICAgICAgICAgZCA9IHNlbGYudGVtcGRpcnMucG9wKCkKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZCwgb3MubmFtZSBpbiAoJ250JywgJ2N5Z3dpbicpKQotCi0gICAgZGVmIG1rZHRlbXAoc2VsZik6Ci0gICAgICAgICIiIkNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIGNsZWFuZWQgdXAuCi0KLSAgICAgICAgUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgZGlyZWN0b3J5LgotICAgICAgICAiIiIKLSAgICAgICAgZCA9IHRlbXBmaWxlLm1rZHRlbXAoKQotICAgICAgICBzZWxmLnRlbXBkaXJzLmFwcGVuZChkKQotICAgICAgICByZXR1cm4gZAotCi0gICAgZGVmIHdyaXRlX2ZpbGUoc2VsZiwgcGF0aCwgY29udGVudD0neHh4Jyk6Ci0gICAgICAgICIiIldyaXRlcyBhIGZpbGUgaW4gdGhlIGdpdmVuIHBhdGguCi0KLQotICAgICAgICBwYXRoIGNhbiBiZSBhIHN0cmluZyBvciBhIHNlcXVlbmNlLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgaXNpbnN0YW5jZShwYXRoLCAobGlzdCwgdHVwbGUpKToKLSAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oKnBhdGgpCi0gICAgICAgIGYgPSBvcGVuKHBhdGgsICd3JykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZi53cml0ZShjb250ZW50KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCi0KLSAgICBkZWYgY3JlYXRlX2Rpc3Qoc2VsZiwgcGtnX25hbWU9J2ZvbycsICoqa3cpOgotICAgICAgICAiIiJXaWxsIGdlbmVyYXRlIGEgdGVzdCBlbnZpcm9ubWVudC4KLQotICAgICAgICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXM6Ci0gICAgICAgICAtIGEgRGlzdHJpYnV0aW9uIGluc3RhbmNlIHVzaW5nIGtleXdvcmRzCi0gICAgICAgICAtIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB3aXRoIGEgcGFja2FnZSBzdHJ1Y3R1cmUKLQotICAgICAgICBJdCByZXR1cm5zIHRoZSBwYWNrYWdlIGRpcmVjdG9yeSBhbmQgdGhlIGRpc3RyaWJ1dGlvbgotICAgICAgICBpbnN0YW5jZS4KLSAgICAgICAgIiIiCi0gICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHRtcF9kaXIsIHBrZ19uYW1lKQotICAgICAgICBvcy5ta2Rpcihwa2dfZGlyKQotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKGF0dHJzPWt3KQotCi0gICAgICAgIHJldHVybiBwa2dfZGlyLCBkaXN0Ci0KLQotY2xhc3MgRHVtbXlDb21tYW5kOgotICAgICIiIkNsYXNzIHRvIHN0b3JlIG9wdGlvbnMgZm9yIHJldHJpZXZhbCB2aWEgc2V0X3VuZGVmaW5lZF9vcHRpb25zKCkuIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICBmb3Iga3csIHZhbCBpbiBrd2FyZ3MuaXRlbXMoKToKLSAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga3csIHZhbCkKLQotICAgIGRlZiBlbnN1cmVfZmluYWxpemVkKHNlbGYpOgotICAgICAgICBwYXNzCi0KLQotY2xhc3MgRW52aXJvbkd1YXJkKG9iamVjdCk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cGVyKEVudmlyb25HdWFyZCwgc2VsZikuc2V0VXAoKQotICAgICAgICBzZWxmLm9sZF9lbnZpcm9uID0gZGVlcGNvcHkob3MuZW52aXJvbikKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5vbGRfZW52aXJvbi5pdGVtcygpOgotICAgICAgICAgICAgaWYgb3MuZW52aXJvbi5nZXQoa2V5KSAhPSB2YWx1ZToKLSAgICAgICAgICAgICAgICBvcy5lbnZpcm9uW2tleV0gPSB2YWx1ZQotCi0gICAgICAgIGZvciBrZXkgaW4gb3MuZW52aXJvbi5rZXlzKCk6Ci0gICAgICAgICAgICBpZiBrZXkgbm90IGluIHNlbGYub2xkX2Vudmlyb246Ci0gICAgICAgICAgICAgICAgZGVsIG9zLmVudmlyb25ba2V5XQotCi0gICAgICAgIHN1cGVyKEVudmlyb25HdWFyZCwgc2VsZikudGVhckRvd24oKQotCi0KLWRlZiBjb3B5X3h4bW9kdWxlX2MoZGlyZWN0b3J5KToKLSAgICAiIiJIZWxwZXIgZm9yIHRlc3RzIHRoYXQgbmVlZCB0aGUgeHhtb2R1bGUuYyBzb3VyY2UgZmlsZS4KLQotICAgIEV4YW1wbGUgdXNlOgotCi0gICAgICAgIGRlZiB0ZXN0X2NvbXBpbGUoc2VsZik6Ci0gICAgICAgICAgICBjb3B5X3h4bW9kdWxlX2Moc2VsZi50bXBkaXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKCd4eG1vZHVsZS5jJywgb3MubGlzdGRpcihzZWxmLnRtcGRpcikpCi0KLSAgICBJZiB0aGUgc291cmNlIGZpbGUgY2FuIGJlIGZvdW5kLCBpdCB3aWxsIGJlIGNvcGllZCB0byAqZGlyZWN0b3J5Ki4gIElmIG5vdCwKLSAgICB0aGUgdGVzdCB3aWxsIGJlIHNraXBwZWQuICBFcnJvcnMgZHVyaW5nIGNvcHkgYXJlIG5vdCBjYXVnaHQuCi0gICAgIiIiCi0gICAgZmlsZW5hbWUgPSBfZ2V0X3h4bW9kdWxlX3BhdGgoKQotICAgIGlmIGZpbGVuYW1lIGlzIE5vbmU6Ci0gICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdjYW5ub3QgZmluZCB4eG1vZHVsZS5jICh0ZXN0IG11c3QgcnVuIGluICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBweXRob24gYnVpbGQgZGlyKScpCi0gICAgc2h1dGlsLmNvcHkoZmlsZW5hbWUsIGRpcmVjdG9yeSkKLQotCi1kZWYgX2dldF94eG1vZHVsZV9wYXRoKCk6Ci0gICAgIyBGSVhNRSB3aGVuIHJ1biBmcm9tIHJlZ3J0ZXN0LCBzcmNkaXIgc2VlbXMgdG8gYmUgJy4nLCB3aGljaCBkb2VzIG5vdCBoZWxwCi0gICAgIyB1cyBmaW5kIHRoZSB4eG1vZHVsZS5jIGZpbGUKLSAgICBzcmNkaXIgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpCi0gICAgY2FuZGlkYXRlcyA9IFsKLSAgICAgICAgIyB1c2UgaW5zdGFsbGVkIGNvcHkgaWYgYXZhaWxhYmxlCi0gICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAneHhtb2R1bGUuYycpLAotICAgICAgICAjIG90aGVyd2lzZSB0cnkgdXNpbmcgY29weSBmcm9tIGJ1aWxkIGRpcmVjdG9yeQotICAgICAgICBvcy5wYXRoLmpvaW4oc3JjZGlyLCAnTW9kdWxlcycsICd4eG1vZHVsZS5jJyksCi0gICAgICAgICMgc3JjZGlyIG15c3RlcmlvdXNseSBjYW4gYmUgJHNyY2Rpci9MaWIvZGlzdHV0aWxzL3Rlc3RzIHdoZW4KLSAgICAgICAgIyB0aGlzIGZpbGUgaXMgcnVuIGZyb20gaXRzIHBhcmVudCBkaXJlY3RvcnksIHNvIHdhbGsgdXAgdGhlCi0gICAgICAgICMgdHJlZSB0byBmaW5kIHRoZSByZWFsIHNyY2RpcgotICAgICAgICBvcy5wYXRoLmpvaW4oc3JjZGlyLCAnLi4nLCAnLi4nLCAnLi4nLCAnTW9kdWxlcycsICd4eG1vZHVsZS5jJyksCi0gICAgXQotICAgIGZvciBwYXRoIGluIGNhbmRpZGF0ZXM6Ci0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgotICAgICAgICAgICAgcmV0dXJuIHBhdGgKLQotCi1kZWYgZml4dXBfYnVpbGRfZXh0KGNtZCk6Ci0gICAgIiIiRnVuY3Rpb24gbmVlZGVkIHRvIG1ha2UgYnVpbGRfZXh0IHRlc3RzIHBhc3MuCi0KLSAgICBXaGVuIFB5dGhvbiB3YXMgYnVpbGQgd2l0aCAtLWVuYWJsZS1zaGFyZWQgb24gVW5peCwgLUwuIGlzIG5vdCBnb29kCi0gICAgZW5vdWdoIHRvIGZpbmQgdGhlIGxpYnB5dGhvbjxibGFoPi5zby4gIFRoaXMgaXMgYmVjYXVzZSByZWdydGVzdCBydW5zCi0gICAgaXQgdW5kZXIgYSB0ZW1wZGlyLCBub3QgaW4gdGhlIHRvcCBsZXZlbCB3aGVyZSB0aGUgLnNvIGxpdmVzLiAgQnkgdGhlCi0gICAgdGltZSB3ZSd2ZSBnb3R0ZW4gaGVyZSwgUHl0aG9uJ3MgYWxyZWFkeSBiZWVuIGNoZGlyJ2QgdG8gdGhlIHRlbXBkaXIuCi0KLSAgICBXaGVuIFB5dGhvbiB3YXMgYnVpbHQgd2l0aCBpbiBkZWJ1ZyBtb2RlIG9uIFdpbmRvd3MsIGJ1aWxkX2V4dCBjb21tYW5kcwotICAgIG5lZWQgdGhlaXIgZGVidWcgYXR0cmlidXRlIHNldCwgYW5kIGl0IGlzIG5vdCBkb25lIGF1dG9tYXRpY2FsbHkgZm9yCi0gICAgc29tZSByZWFzb24uCi0KLSAgICBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgYm90aCBvZiB0aGVzZSB0aGluZ3MuICBFeGFtcGxlIHVzZToKLQotICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKLSAgICAgICAgc3VwcG9ydC5maXh1cF9idWlsZF9leHQoY21kKQotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0KLSAgICBVbmxpa2UgbW9zdCBvdGhlciBVbml4IHBsYXRmb3JtcywgTWFjIE9TIFggZW1iZWRzIGFic29sdXRlIHBhdGhzCi0gICAgdG8gc2hhcmVkIGxpYnJhcmllcyBpbnRvIGV4ZWN1dGFibGVzLCBzbyB0aGUgZml4dXAgaXMgbm90IG5lZWRlZCB0aGVyZS4KLSAgICAiIiIKLSAgICBpZiBvcy5uYW1lID09ICdudCc6Ci0gICAgICAgIGNtZC5kZWJ1ZyA9IHN5cy5leGVjdXRhYmxlLmVuZHN3aXRoKCdfZC5leGUnKQotICAgIGVsaWYgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQeV9FTkFCTEVfU0hBUkVEJyk6Ci0gICAgICAgICMgVG8gZnVydGhlciBhZGQgdG8gdGhlIHNoYXJlZCBidWlsZHMgZnVuIG9uIFVuaXgsIHdlIGNhbid0IGp1c3QgYWRkCi0gICAgICAgICMgbGlicmFyeV9kaXJzIHRvIHRoZSBFeHRlbnNpb24oKSBpbnN0YW5jZSBiZWNhdXNlIHRoYXQgZG9lc24ndCBnZXQKLSAgICAgICAgIyBwbHVtYmVkIHRocm91Z2ggdG8gdGhlIGZpbmFsIGNvbXBpbGVyIGNvbW1hbmQuCi0gICAgICAgIHJ1bnNoYXJlZCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUlVOU0hBUkVEJykKLSAgICAgICAgaWYgcnVuc2hhcmVkIGlzIE5vbmU6Ci0gICAgICAgICAgICBjbWQubGlicmFyeV9kaXJzID0gWycuJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgICAgICBjbWQubGlicmFyeV9kaXJzID0gW10KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbmFtZSwgZXF1YWxzLCB2YWx1ZSA9IHJ1bnNoYXJlZC5wYXJ0aXRpb24oJz0nKQotICAgICAgICAgICAgICAgIGNtZC5saWJyYXJ5X2RpcnMgPSB2YWx1ZS5zcGxpdChvcy5wYXRoc2VwKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9hcmNoaXZlX3V0aWwucHkgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2FyY2hpdmVfdXRpbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAxY2VjMy4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2FyY2hpdmVfdXRpbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi0jIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQotIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5hcmNoaXZlX3V0aWwuIiIiCi1fX3JldmlzaW9uX18gPSAiJElkJCIKLQotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCB0YXJmaWxlCi1mcm9tIG9zLnBhdGggaW1wb3J0IHNwbGl0ZHJpdmUKLWltcG9ydCB3YXJuaW5ncwotCi1mcm9tIGRpc3R1dGlscy5hcmNoaXZlX3V0aWwgaW1wb3J0IChjaGVja19hcmNoaXZlX2Zvcm1hdHMsIG1ha2VfdGFyYmFsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfemlwZmlsZSwgbWFrZV9hcmNoaXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJDSElWRV9GT1JNQVRTKQotZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZSwgc3Bhd24KLWZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjaGVja193YXJuaW5ncywgcnVuX3VuaXR0ZXN0Ci0KLXRyeToKLSAgICBpbXBvcnQgZ3JwCi0gICAgaW1wb3J0IHB3ZAotICAgIFVJRF9HSURfU1VQUE9SVCA9IFRydWUKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBVSURfR0lEX1NVUFBPUlQgPSBGYWxzZQotCi10cnk6Ci0gICAgaW1wb3J0IHppcGZpbGUKLSAgICBaSVBfU1VQUE9SVCA9IFRydWUKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBaSVBfU1VQUE9SVCA9IGZpbmRfZXhlY3V0YWJsZSgnemlwJykKLQotIyBzb21lIHRlc3RzIHdpbGwgZmFpbCBpZiB6bGliIGlzIG5vdCBhdmFpbGFibGUKLXRyeToKLSAgICBpbXBvcnQgemxpYgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHpsaWIgPSBOb25lCi0KLWRlZiBjYW5fZnNfZW5jb2RlKGZpbGVuYW1lKToKLSAgICAiIiIKLSAgICBSZXR1cm4gVHJ1ZSBpZiB0aGUgZmlsZW5hbWUgY2FuIGJlIHNhdmVkIGluIHRoZSBmaWxlIHN5c3RlbS4KLSAgICAiIiIKLSAgICBpZiBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzOgotICAgICAgICByZXR1cm4gVHJ1ZQotICAgIHRyeToKLSAgICAgICAgZmlsZW5hbWUuZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKLSAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgotICAgICAgICByZXR1cm4gRmFsc2UKLSAgICByZXR1cm4gVHJ1ZQotCi0KLWNsYXNzIEFyY2hpdmVVdGlsVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKLSAgICBkZWYgdGVzdF9tYWtlX3RhcmJhbGwoc2VsZik6Ci0gICAgICAgIHNlbGYuX21ha2VfdGFyYmFsbCgnYXJjaGl2ZScpCi0KLSAgICBkZWYgX21ha2VfdGFyYmFsbChzZWxmLCB0YXJnZXRfbmFtZSk6Ci0gICAgICAgICMgY3JlYXRpbmcgc29tZXRoaW5nIHRvIHRhcgotICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW3RtcGRpciwgJ2ZpbGUxJ10sICd4eHgnKQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW3RtcGRpciwgJ2ZpbGUyJ10sICd4eHgnKQotICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4odG1wZGlyLCAnc3ViJykpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnc3ViJywgJ2ZpbGUzJ10sICd4eHgnKQotCi0gICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICB1bml0dGVzdC5za2lwVW5sZXNzKHNwbGl0ZHJpdmUodG1wZGlyKVswXSA9PSBzcGxpdGRyaXZlKHRtcGRpcjIpWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UgYW5kIHRhcmdldCBzaG91bGQgYmUgb24gc2FtZSBkcml2ZSIpCi0KLSAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsIHRhcmdldF9uYW1lKQotCi0gICAgICAgICMgd29ya2luZyB3aXRoIHJlbGF0aXZlIHBhdGhzIHRvIGF2b2lkIHRhciB3YXJuaW5ncwotICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIodG1wZGlyKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtYWtlX3RhcmJhbGwoc3BsaXRkcml2ZShiYXNlX25hbWUpWzFdLCAnLicpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQotCi0gICAgICAgICMgY2hlY2sgaWYgdGhlIGNvbXByZXNzZWQgdGFyYmFsbCB3YXMgY3JlYXRlZAotICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXIuZ3onCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKLQotICAgICAgICAjIHRyeWluZyBhbiB1bmNvbXByZXNzZWQgb25lCi0gICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCB0YXJnZXRfbmFtZSkKLSAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCi0gICAgICAgIG9zLmNoZGlyKHRtcGRpcikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbWFrZV90YXJiYWxsKHNwbGl0ZHJpdmUoYmFzZV9uYW1lKVsxXSwgJy4nLCBjb21wcmVzcz1Ob25lKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKLSAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyJwotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCi0KLSAgICBkZWYgX3RhcmluZm8oc2VsZiwgcGF0aCk6Ci0gICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihwYXRoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBuYW1lcyA9IHRhci5nZXRuYW1lcygpCi0gICAgICAgICAgICBuYW1lcy5zb3J0KCkKLSAgICAgICAgICAgIHJldHVybiB0dXBsZShuYW1lcykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHRhci5jbG9zZSgpCi0KLSAgICBkZWYgX2NyZWF0ZV9maWxlcyhzZWxmKToKLSAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgdG8gdGFyCi0gICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIGRpc3QgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlzdCcpCi0gICAgICAgIG9zLm1rZGlyKGRpc3QpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZShbZGlzdCwgJ2ZpbGUxJ10sICd4eHgnKQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW2Rpc3QsICdmaWxlMiddLCAneHh4JykKLSAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGRpc3QsICdzdWInKSkKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKFtkaXN0LCAnc3ViJywgJ2ZpbGUzJ10sICd4eHgnKQotICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oZGlzdCwgJ3N1YjInKSkKLSAgICAgICAgdG1wZGlyMiA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCi0gICAgICAgIHJldHVybiB0bXBkaXIsIHRtcGRpcjIsIGJhc2VfbmFtZQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZpbmRfZXhlY3V0YWJsZSgndGFyJykgYW5kIGZpbmRfZXhlY3V0YWJsZSgnZ3ppcCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICdOZWVkIHRoZSB0YXIgY29tbWFuZCB0byBydW4nKQotICAgIGRlZiB0ZXN0X3RhcmZpbGVfdnNfdGFyKHNlbGYpOgotICAgICAgICB0bXBkaXIsIHRtcGRpcjIsIGJhc2VfbmFtZSA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQotICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIodG1wZGlyKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQotCi0gICAgICAgICMgY2hlY2sgaWYgdGhlIGNvbXByZXNzZWQgdGFyYmFsbCB3YXMgY3JlYXRlZAotICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXIuZ3onCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKLQotICAgICAgICAjIG5vdyBjcmVhdGUgYW5vdGhlciB0YXJiYWxsIHVzaW5nIGB0YXJgCi0gICAgICAgIHRhcmJhbGwyID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2FyY2hpdmUyLnRhci5neicpCi0gICAgICAgIHRhcl9jbWQgPSBbJ3RhcicsICctY2YnLCAnYXJjaGl2ZTIudGFyJywgJ2Rpc3QnXQotICAgICAgICBnemlwX2NtZCA9IFsnZ3ppcCcsICctZjknLCAnYXJjaGl2ZTIudGFyJ10KLSAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCi0gICAgICAgIG9zLmNoZGlyKHRtcGRpcikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3Bhd24odGFyX2NtZCkKLSAgICAgICAgICAgIHNwYXduKGd6aXBfY21kKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKLQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbDIpKQotICAgICAgICAjIGxldCdzIGNvbXBhcmUgYm90aCB0YXJiYWxscwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3RhcmluZm8odGFyYmFsbCksIHNlbGYuX3RhcmluZm8odGFyYmFsbDIpKQotCi0gICAgICAgICMgdHJ5aW5nIGFuIHVuY29tcHJlc3NlZCBvbmUKLSAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKLSAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCi0gICAgICAgIG9zLmNoZGlyKHRtcGRpcikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz1Ob25lKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKLSAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyJwotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCi0KLSAgICAgICAgIyBub3cgZm9yIGEgZHJ5X3J1bgotICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQotICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIodG1wZGlyKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPU5vbmUsIGRyeV9ydW49VHJ1ZSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCi0gICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhcicKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmluZF9leGVjdXRhYmxlKCdjb21wcmVzcycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgY29tcHJlc3MgcHJvZ3JhbSBpcyByZXF1aXJlZCcpCi0gICAgZGVmIHRlc3RfY29tcHJlc3NfZGVwcmVjYXRlZChzZWxmKToKLSAgICAgICAgdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKLQotICAgICAgICAjIHVzaW5nIGNvbXByZXNzIGFuZCB0ZXN0aW5nIHRoZSBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nCi0gICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQotICAgICAgICBvcy5jaGRpcih0bXBkaXIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgotICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKLSAgICAgICAgICAgICAgICBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPSdjb21wcmVzcycpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQotICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXIuWicKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3Lndhcm5pbmdzKSwgMSkKLQotICAgICAgICAjIHNhbWUgdGVzdCB3aXRoIGRyeV9ydW4KLSAgICAgICAgb3MucmVtb3ZlKHRhcmJhbGwpCi0gICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQotICAgICAgICBvcy5jaGRpcih0bXBkaXIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgotICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKLSAgICAgICAgICAgICAgICBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPSdjb21wcmVzcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyeV9ydW49VHJ1ZSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHModGFyYmFsbCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAxKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFpJUF9TVVBQT1JULCAnTmVlZCB6aXAgc3VwcG9ydCB0byBydW4nKQotICAgIGRlZiB0ZXN0X21ha2VfemlwZmlsZShzZWxmKToKLSAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgdG8gdGFyCi0gICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnZmlsZTEnXSwgJ3h4eCcpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnZmlsZTInXSwgJ3h4eCcpCi0KLSAgICAgICAgdG1wZGlyMiA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCi0gICAgICAgIG1ha2VfemlwZmlsZShiYXNlX25hbWUsIHRtcGRpcikKLQotICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb21wcmVzc2VkIHRhcmJhbGwgd2FzIGNyZWF0ZWQKLSAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcuemlwJwotCi0gICAgZGVmIHRlc3RfY2hlY2tfYXJjaGl2ZV9mb3JtYXRzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoZWNrX2FyY2hpdmVfZm9ybWF0cyhbJ2d6dGFyJywgJ3h4eCcsICd6aXAnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3h4eCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hlY2tfYXJjaGl2ZV9mb3JtYXRzKFsnZ3p0YXInLCAnemlwJ10pLCBOb25lKQotCi0gICAgZGVmIHRlc3RfbWFrZV9hcmNoaXZlKHNlbGYpOgotICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnYXJjaGl2ZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1ha2VfYXJjaGl2ZSwgYmFzZV9uYW1lLCAneHh4JykKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJSZXF1aXJlcyB6bGliIikKLSAgICBkZWYgdGVzdF9tYWtlX2FyY2hpdmVfb3duZXJfZ3JvdXAoc2VsZik6Ci0gICAgICAgICMgdGVzdGluZyBtYWtlX2FyY2hpdmUgd2l0aCBvd25lciBhbmQgZ3JvdXAsIHdpdGggdmFyaW91cyBjb21iaW5hdGlvbnMKLSAgICAgICAgIyB0aGlzIHdvcmtzIGV2ZW4gaWYgdGhlcmUncyBub3QgZ2lkL3VpZCBzdXBwb3J0Ci0gICAgICAgIGlmIFVJRF9HSURfU1VQUE9SVDoKLSAgICAgICAgICAgIGdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCi0gICAgICAgICAgICBvd25lciA9IHB3ZC5nZXRwd3VpZCgwKVswXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZ3JvdXAgPSBvd25lciA9ICdyb290JwotCi0gICAgICAgIGJhc2VfZGlyLCByb290X2RpciwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCi0gICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSAsICdhcmNoaXZlJykKLSAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2Rpciwgb3duZXI9b3duZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cD1ncm91cCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCi0KLSAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2RpcikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCi0KLSAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCi0KLSAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPSdramhramhramcnLCBncm91cD0nb2lob2hvaCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFVJRF9HSURfU1VQUE9SVCwgIlJlcXVpcmVzIGdycCBhbmQgcHdkIHN1cHBvcnQiKQotICAgIGRlZiB0ZXN0X3RhcmZpbGVfcm9vdF9vd25lcihzZWxmKToKLSAgICAgICAgdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKLSAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCi0gICAgICAgIG9zLmNoZGlyKHRtcGRpcikKLSAgICAgICAgZ3JvdXAgPSBncnAuZ2V0Z3JnaWQoMClbMF0KLSAgICAgICAgb3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYXJjaGl2ZV9uYW1lID0gbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCi0KLSAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhhcmNoaXZlX25hbWUpKQotCi0gICAgICAgICMgbm93IGNoZWNrcyB0aGUgcmlnaHRzCi0gICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci5naWQsIDApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKLQotICAgIGRlZiB0ZXN0X21ha2VfYXJjaGl2ZV9jd2Qoc2VsZik6Ci0gICAgICAgIGN1cnJlbnRfZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgZGVmIF9icmVha3MoKmFyZ3MsICoqa3cpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKLSAgICAgICAgQVJDSElWRV9GT1JNQVRTWyd4eHgnXSA9IChfYnJlYWtzLCBbXSwgJ3h4eCBmaWxlJykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG1ha2VfYXJjaGl2ZSgneHh4JywgJ3h4eCcsIHJvb3RfZGlyPXNlbGYubWtkdGVtcCgpKQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0Y3dkKCksIGN1cnJlbnRfZGlyKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZGVsIEFSQ0hJVkVfRk9STUFUU1sneHh4J10KLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKLSAgICBkZWYgdGVzdF9tYWtlX3RhcmJhbGxfdW5pY29kZShzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIE1pcnJvciB0ZXN0X21ha2VfdGFyYmFsbCwgZXhjZXB0IGZpbGVuYW1lIGlzIHVuaWNvZGUuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl9tYWtlX3RhcmJhbGwodSdhcmNoaXZlJykKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhjYW5fZnNfZW5jb2RlKHUnw6VyY2hpdicpLAotICAgICAgICAnRmlsZSBzeXN0ZW0gY2Fubm90IGhhbmRsZSB0aGlzIGZpbGVuYW1lJykKLSAgICBkZWYgdGVzdF9tYWtlX3RhcmJhbGxfdW5pY29kZV9sYXRpbjEoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBNaXJyb3IgdGVzdF9tYWtlX3RhcmJhbGwsIGV4Y2VwdCBmaWxlbmFtZSBpcyB1bmljb2RlIGFuZCBjb250YWlucwotICAgICAgICBsYXRpbiBjaGFyYWN0ZXJzLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fbWFrZV90YXJiYWxsKHUnw6VyY2hpdicpICMgbm90ZSB0aGlzIGlzbid0IGEgcmVhbCB3b3JkCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoY2FuX2ZzX2VuY29kZSh1J+OBruOCouODvOOCq+OCpOODlicpLAotICAgICAgICAnRmlsZSBzeXN0ZW0gY2Fubm90IGhhbmRsZSB0aGlzIGZpbGVuYW1lJykKLSAgICBkZWYgdGVzdF9tYWtlX3RhcmJhbGxfdW5pY29kZV9leHRlbmRlZChzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIE1pcnJvciB0ZXN0X21ha2VfdGFyYmFsbCwgZXhjZXB0IGZpbGVuYW1lIGlzIHVuaWNvZGUgYW5kIGNvbnRhaW5zCi0gICAgICAgIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgbGF0aW4gY2hhcnNldC4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX21ha2VfdGFyYmFsbCh1J+OBruOCouODvOOCq+OCpOODlicpICMgamFwYW5lc2UgZm9yIGFyY2hpdmUKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEFyY2hpdmVVdGlsVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3QucHkgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjFkMDk5Li4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3QuIiIiCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLQotZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdCBpbXBvcnQgYmRpc3QKLWZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Ci0KLQotY2xhc3MgQnVpbGRUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAotICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9mb3JtYXRzKHNlbGYpOgotICAgICAgICAjIGxldCdzIGNyZWF0ZSBhIGNvbW1hbmQgYW5kIG1ha2Ugc3VyZQotICAgICAgICAjIHdlIGNhbiBzZXQgdGhlIGZvcm1hdAotICAgICAgICBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpWzFdCi0gICAgICAgIGNtZCA9IGJkaXN0KGRpc3QpCi0gICAgICAgIGNtZC5mb3JtYXRzID0gWydtc2knXQotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmZvcm1hdHMsIFsnbXNpJ10pCi0KLSAgICAgICAgIyB3aGF0IGZvcm1hdHMgZG9lcyBiZGlzdCBvZmZlcj8KLSAgICAgICAgZm9ybWF0cyA9IFsnYnp0YXInLCAnZ3p0YXInLCAnbXNpJywgJ3JwbScsICd0YXInLAotICAgICAgICAgICAgICAgICAgICd3aW5pbnN0JywgJ3ppcCcsICd6dGFyJ10KLSAgICAgICAgZm91bmQgPSBzb3J0ZWQoY21kLmZvcm1hdF9jb21tYW5kKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBmb3JtYXRzKQotCi0gICAgZGVmIHRlc3Rfc2tpcF9idWlsZChzZWxmKToKLSAgICAgICAgIyBidWcgIzEwOTQ2OiBiZGlzdCAtLXNraXAtYnVpbGQgc2hvdWxkIHRyaWNrbGUgZG93biB0byBzdWJjb21tYW5kcwotICAgICAgICBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpWzFdCi0gICAgICAgIGNtZCA9IGJkaXN0KGRpc3QpCi0gICAgICAgIGNtZC5za2lwX2J1aWxkID0gMQotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIGRpc3QuY29tbWFuZF9vYmpbJ2JkaXN0J10gPSBjbWQKLQotICAgICAgICBuYW1lcyA9IFsnYmRpc3RfZHVtYicsICdiZGlzdF93aW5pbnN0J10KLSAgICAgICAgIyBiZGlzdF9ycG0gZG9lcyBub3Qgc3VwcG9ydCAtLXNraXAtYnVpbGQKLSAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgotICAgICAgICAgICAgbmFtZXMuYXBwZW5kKCdiZGlzdF9tc2knKQotCi0gICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgotICAgICAgICAgICAgc3ViY21kID0gY21kLmdldF9maW5hbGl6ZWRfY29tbWFuZChuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1YmNtZC5za2lwX2J1aWxkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcyBzaG91bGQgdGFrZSAtLXNraXAtYnVpbGQgZnJvbSBiZGlzdCcgJSBuYW1lKQotCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShCdWlsZFRlc3RDYXNlKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYjNhODUuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9kdW1iLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLSIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9kdW1iLiIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCB6aXBmaWxlCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotCi0jIHpsaWIgaXMgbm90IHVzZWQgaGVyZSwgYnV0IGlmIGl0J3Mgbm90IGF2YWlsYWJsZQotIyB0ZXN0X3NpbXBsZV9idWlsdCB3aWxsIGZhaWwKLXRyeToKLSAgICBpbXBvcnQgemxpYgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHpsaWIgPSBOb25lCi0KLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgotZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9kdW1iIGltcG9ydCBiZGlzdF9kdW1iCi1mcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAotCi1TRVRVUF9QWSA9ICIiIlwKLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCi1pbXBvcnQgZm9vCi0KLXNldHVwKG5hbWU9J2ZvbycsIHZlcnNpb249JzAuMScsIHB5X21vZHVsZXM9Wydmb28nXSwKLSAgICAgIHVybD0neHh4JywgYXV0aG9yPSd4eHgnLCBhdXRob3JfZW1haWw9J3h4eCcpCi0KLSIiIgotCi1jbGFzcyBCdWlsZER1bWJUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkVudmlyb25HdWFyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwZXIoQnVpbGREdW1iVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKLSAgICAgICAgc2VsZi5vbGRfbG9jYXRpb24gPSBvcy5nZXRjd2QoKQotICAgICAgICBzZWxmLm9sZF9zeXNfYXJndiA9IHN5cy5hcmd2LCBzeXMuYXJndls6XQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBvcy5jaGRpcihzZWxmLm9sZF9sb2NhdGlvbikKLSAgICAgICAgc3lzLmFyZ3YgPSBzZWxmLm9sZF9zeXNfYXJndlswXQotICAgICAgICBzeXMuYXJndls6XSA9IHNlbGYub2xkX3N5c19hcmd2WzFdCi0gICAgICAgIHN1cGVyKEJ1aWxkRHVtYlRlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCi0gICAgZGVmIHRlc3Rfc2ltcGxlX2J1aWx0KHNlbGYpOgotCi0gICAgICAgICMgbGV0J3MgY3JlYXRlIGEgc2ltcGxlIHBhY2thZ2UKLSAgICAgICAgdG1wX2RpciA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ2ZvbycpCi0gICAgICAgIG9zLm1rZGlyKHBrZ19kaXIpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZSgocGtnX2RpciwgJ3NldHVwLnB5JyksIFNFVFVQX1BZKQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHBrZ19kaXIsICdmb28ucHknKSwgJyMnKQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHBrZ19kaXIsICdNQU5JRkVTVC5pbicpLCAnaW5jbHVkZSBmb28ucHknKQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHBrZ19kaXIsICdSRUFETUUnKSwgJycpCi0KLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAnZm9vJywgJ3ZlcnNpb24nOiAnMC4xJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5X21vZHVsZXMnOiBbJ2ZvbyddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogJ3h4eCcsICdhdXRob3InOiAneHh4JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICd4eHgnfSkKLSAgICAgICAgZGlzdC5zY3JpcHRfbmFtZSA9ICdzZXR1cC5weScKLSAgICAgICAgb3MuY2hkaXIocGtnX2RpcikKLQotICAgICAgICBzeXMuYXJndiA9IFsnc2V0dXAucHknXQotICAgICAgICBjbWQgPSBiZGlzdF9kdW1iKGRpc3QpCi0KLSAgICAgICAgIyBzbyB0aGUgb3V0cHV0IGlzIHRoZSBzYW1lIG5vIG1hdHRlcgotICAgICAgICAjIHdoYXQgaXMgdGhlIHBsYXRmb3JtCi0gICAgICAgIGNtZC5mb3JtYXQgPSAnemlwJwotCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLnJ1bigpCi0KLSAgICAgICAgIyBzZWUgd2hhdCB3ZSBoYXZlCi0gICAgICAgIGRpc3RfY3JlYXRlZCA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKHBrZ19kaXIsICdkaXN0JykpCi0gICAgICAgIGJhc2UgPSAiJXMuJXMuemlwIiAlIChkaXN0LmdldF9mdWxsbmFtZSgpLCBjbWQucGxhdF9uYW1lKQotICAgICAgICBpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICAgICAgYmFzZSA9IGJhc2UucmVwbGFjZSgnOicsICctJykKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3RfY3JlYXRlZCwgW2Jhc2VdKQotCi0gICAgICAgICMgbm93IGxldCdzIGNoZWNrIHdoYXQgd2UgaGF2ZSBpbiB0aGUgemlwIGZpbGUKLSAgICAgICAgZnAgPSB6aXBmaWxlLlppcEZpbGUob3MucGF0aC5qb2luKCdkaXN0JywgYmFzZSkpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvbnRlbnRzID0gZnAubmFtZWxpc3QoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZnAuY2xvc2UoKQotCi0gICAgICAgIGNvbnRlbnRzID0gc29ydGVkKG9zLnBhdGguYmFzZW5hbWUoZm4pIGZvciBmbiBpbiBjb250ZW50cykKLSAgICAgICAgd2FudGVkID0gWydmb28tMC4xLXB5JXMuJXMuZWdnLWluZm8nICUgc3lzLnZlcnNpb25faW5mb1s6Ml0sICdmb28ucHknXQotICAgICAgICBpZiBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGU6Ci0gICAgICAgICAgICB3YW50ZWQuYXBwZW5kKCdmb28ucHljJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywgc29ydGVkKHdhbnRlZCkpCi0KLSAgICBkZWYgdGVzdF9maW5hbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBwa2dfZGlyLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCi0gICAgICAgIG9zLmNoZGlyKHBrZ19kaXIpCi0gICAgICAgIGNtZCA9IGJkaXN0X2R1bWIoZGlzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuYmRpc3RfZGlyLCBOb25lKQotICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0KLSAgICAgICAgIyBiZGlzdF9kaXIgaXMgaW5pdGlhbGl6ZWQgdG8gYmRpc3RfYmFzZS9kdW1iIGlmIG5vdCBzZXQKLSAgICAgICAgYmFzZSA9IGNtZC5nZXRfZmluYWxpemVkX2NvbW1hbmQoJ2JkaXN0JykuYmRpc3RfYmFzZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5iZGlzdF9kaXIsIG9zLnBhdGguam9pbihiYXNlLCAnZHVtYicpKQotCi0gICAgICAgICMgdGhlIGZvcm1hdCBpcyBzZXQgdG8gYSBkZWZhdWx0IHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgb3MubmFtZQotICAgICAgICBkZWZhdWx0ID0gY21kLmRlZmF1bHRfZm9ybWF0W29zLm5hbWVdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmZvcm1hdCwgZGVmYXVsdCkKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEJ1aWxkRHVtYlRlc3RDYXNlKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X21zaS5weSBiL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfbXNpLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGY3YzMwLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfbXNpLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X21zaS4iIiIKLWltcG9ydCBzeXMKLWltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci1mcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAotCi0KLUB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInLCAndGhlc2UgdGVzdHMgcmVxdWlyZSBXaW5kb3dzJykKLWNsYXNzIEJEaXN0TVNJVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIEB1bml0dGVzdC5za2lwKCJSZXF1aXJlIGJkaXN0X21zaSIpCi0gICAgZGVmIHRlc3RfbWluaW1hbChzZWxmKToKLSAgICAgICAgIyBtaW5pbWFsIHRlc3QgWFhYIG5lZWQgbW9yZSB0ZXN0cwotICAgICAgICBmcm9tIGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X21zaSBpbXBvcnQgYmRpc3RfbXNpCi0gICAgICAgIHByb2plY3RfZGlyLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCi0gICAgICAgIGNtZCA9IGJkaXN0X21zaShkaXN0KQotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0KLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEJEaXN0TVNJVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfcnBtLnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9ycG0ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZDg5MTUuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9ycG0ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X3JwbS4iIiIKLQotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgc3lzCi1pbXBvcnQgb3MKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHNodXRpbAotCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLQotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRGlzdHJpYnV0aW9uCi1mcm9tIGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X3JwbSBpbXBvcnQgYmRpc3RfcnBtCi1mcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAotZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZQotZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHNwYXduCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0V4ZWNFcnJvcgotCi1TRVRVUF9QWSA9ICIiIlwKLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCi1pbXBvcnQgZm9vCi0KLXNldHVwKG5hbWU9J2ZvbycsIHZlcnNpb249JzAuMScsIHB5X21vZHVsZXM9Wydmb28nXSwKLSAgICAgIHVybD0neHh4JywgYXV0aG9yPSd4eHgnLCBhdXRob3JfZW1haWw9J3h4eCcpCi0KLSIiIgotCi1jbGFzcyBCdWlsZFJwbVRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAotICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cGVyKEJ1aWxkUnBtVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKLSAgICAgICAgc2VsZi5vbGRfbG9jYXRpb24gPSBvcy5nZXRjd2QoKQotICAgICAgICBzZWxmLm9sZF9zeXNfYXJndiA9IHN5cy5hcmd2LCBzeXMuYXJndls6XQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBvcy5jaGRpcihzZWxmLm9sZF9sb2NhdGlvbikKLSAgICAgICAgc3lzLmFyZ3YgPSBzZWxmLm9sZF9zeXNfYXJndlswXQotICAgICAgICBzeXMuYXJndls6XSA9IHNlbGYub2xkX3N5c19hcmd2WzFdCi0gICAgICAgIHN1cGVyKEJ1aWxkUnBtVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKLQotICAgIGRlZiB0ZXN0X3F1aWV0KHNlbGYpOgotCi0gICAgICAgICMgWFhYIEkgYW0gdW5hYmxlIHlldCB0byBtYWtlIHRoaXMgdGVzdCB3b3JrIHdpdGhvdXQKLSAgICAgICAgIyBzcHVyaW91cyBzZHRvdXQvc3RkZXJyIG91dHB1dCB1bmRlciBNYWMgT1MgWAotICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ2xpbnV4Mic6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAjIHRoaXMgdGVzdCB3aWxsIHJ1biBvbmx5IGlmIHRoZSBycG0gY29tbWFuZHMgYXJlIGZvdW5kCi0gICAgICAgIGlmIChmaW5kX2V4ZWN1dGFibGUoJ3JwbScpIGlzIE5vbmUgb3IKLSAgICAgICAgICAgIGZpbmRfZXhlY3V0YWJsZSgncnBtYnVpbGQnKSBpcyBOb25lKToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICMgbGV0J3MgY3JlYXRlIGEgcGFja2FnZQotICAgICAgICB0bXBfZGlyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbih0bXBfZGlyLCAnZm9vJykKLSAgICAgICAgb3MubWtkaXIocGtnX2RpcikKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKChwa2dfZGlyLCAnc2V0dXAucHknKSwgU0VUVVBfUFkpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZSgocGtnX2RpciwgJ2Zvby5weScpLCAnIycpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZSgocGtnX2RpciwgJ01BTklGRVNULmluJyksICdpbmNsdWRlIGZvby5weScpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZSgocGtnX2RpciwgJ1JFQURNRScpLCAnJykKLQotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICdmb28nLCAndmVyc2lvbic6ICcwLjEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHlfbW9kdWxlcyc6IFsnZm9vJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiAneHh4JywgJ2F1dGhvcic6ICd4eHgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0aG9yX2VtYWlsJzogJ3h4eCd9KQotICAgICAgICBkaXN0LnNjcmlwdF9uYW1lID0gJ3NldHVwLnB5JwotICAgICAgICBvcy5jaGRpcihwa2dfZGlyKQotCi0gICAgICAgIHN5cy5hcmd2ID0gWydzZXR1cC5weSddCi0gICAgICAgIGNtZCA9IGJkaXN0X3JwbShkaXN0KQotICAgICAgICBjbWQuZml4X3B5dGhvbiA9IFRydWUKLQotICAgICAgICAjIHJ1bm5pbmcgaW4gcXVpZXQgbW9kZQotICAgICAgICBjbWQucXVpZXQgPSAxCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLnJ1bigpCi0KLSAgICAgICAgZGlzdF9jcmVhdGVkID0gb3MubGlzdGRpcihvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ2Rpc3QnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdmb28tMC4xLTEubm9hcmNoLnJwbScgaW4gZGlzdF9jcmVhdGVkKQotCi0gICAgICAgICMgYnVnICMyOTQ1OiB1cGxvYWQgaWdub3JlcyBiZGlzdF9ycG0gZmlsZXMKLSAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2JkaXN0X3JwbScsICdhbnknLCAnZGlzdC9mb28tMC4xLTEuc3JjLnJwbScpLCBkaXN0LmRpc3RfZmlsZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdiZGlzdF9ycG0nLCAnYW55JywgJ2Rpc3QvZm9vLTAuMS0xLm5vYXJjaC5ycG0nKSwgZGlzdC5kaXN0X2ZpbGVzKQotCi0gICAgZGVmIHRlc3Rfbm9fb3B0aW1pemVfZmxhZyhzZWxmKToKLQotICAgICAgICAjIFhYWCBJIGFtIHVuYWJsZSB5ZXQgdG8gbWFrZSB0aGlzIHRlc3Qgd29yayB3aXRob3V0Ci0gICAgICAgICMgc3B1cmlvdXMgc2R0b3V0L3N0ZGVyciBvdXRwdXQgdW5kZXIgTWFjIE9TIFgKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdsaW51eDInOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTUzMzE2NAotICAgICAgICAjIHRoaXMgdGVzdCB3aWxsIHJ1biBvbmx5IGlmIHRoZSBycG0gY29tbWFuZCBpcyBmb3VuZAotICAgICAgICBpZiAoZmluZF9leGVjdXRhYmxlKCdycG0nKSBpcyBOb25lIG9yCi0gICAgICAgICAgICBmaW5kX2V4ZWN1dGFibGUoJ3JwbWJ1aWxkJykgaXMgTm9uZSk6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAjIGxldCdzIGNyZWF0ZSBhIHBhY2thZ2UgdGhhdCBicmFrZXMgYmRpc3RfcnBtCi0gICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdmb28nKQotICAgICAgICBvcy5ta2Rpcihwa2dfZGlyKQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHBrZ19kaXIsICdzZXR1cC5weScpLCBTRVRVUF9QWSkKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKChwa2dfZGlyLCAnZm9vLnB5JyksICcjJykKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKChwa2dfZGlyLCAnTUFOSUZFU1QuaW4nKSwgJ2luY2x1ZGUgZm9vLnB5JykKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKChwa2dfZGlyLCAnUkVBRE1FJyksICcnKQotCi0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oeyduYW1lJzogJ2ZvbycsICd2ZXJzaW9uJzogJzAuMScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweV9tb2R1bGVzJzogWydmb28nXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6ICd4eHgnLCAnYXV0aG9yJzogJ3h4eCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAneHh4J30pCi0gICAgICAgIGRpc3Quc2NyaXB0X25hbWUgPSAnc2V0dXAucHknCi0gICAgICAgIG9zLmNoZGlyKHBrZ19kaXIpCi0KLSAgICAgICAgc3lzLmFyZ3YgPSBbJ3NldHVwLnB5J10KLSAgICAgICAgY21kID0gYmRpc3RfcnBtKGRpc3QpCi0gICAgICAgIGNtZC5maXhfcHl0aG9uID0gVHJ1ZQotCi0gICAgICAgIGNtZC5xdWlldCA9IDEKLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBjbWQucnVuKCkKLQotICAgICAgICBkaXN0X2NyZWF0ZWQgPSBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihwa2dfZGlyLCAnZGlzdCcpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2Zvby0wLjEtMS5ub2FyY2gucnBtJyBpbiBkaXN0X2NyZWF0ZWQpCi0KLSAgICAgICAgIyBidWcgIzI5NDU6IHVwbG9hZCBpZ25vcmVzIGJkaXN0X3JwbSBmaWxlcwotICAgICAgICBzZWxmLmFzc2VydEluKCgnYmRpc3RfcnBtJywgJ2FueScsICdkaXN0L2Zvby0wLjEtMS5zcmMucnBtJyksIGRpc3QuZGlzdF9maWxlcykKLSAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2JkaXN0X3JwbScsICdhbnknLCAnZGlzdC9mb28tMC4xLTEubm9hcmNoLnJwbScpLCBkaXN0LmRpc3RfZmlsZXMpCi0KLSAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihwa2dfZGlyLCAnZGlzdCcsICdmb28tMC4xLTEubm9hcmNoLnJwbScpKQotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQnVpbGRScG1UZXN0Q2FzZSkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF93aW5pbnN0LnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF93aW5pbnN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmIxM2IzLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3Rfd2luaW5zdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF93aW5pbnN0LiIiIgotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotCi1mcm9tIGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X3dpbmluc3QgaW1wb3J0IGJkaXN0X3dpbmluc3QKLWZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Ci0KLWNsYXNzIEJ1aWxkV2luSW5zdFRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X2dldF9leGVfYnl0ZXMoc2VsZik6Ci0KLSAgICAgICAgIyBpc3N1ZTU3MzE6IGNvbW1hbmQgd2FzIGJyb2tlbiBvbiBub24td2luZG93cyBwbGF0Zm9ybXMKLSAgICAgICAgIyB0aGlzIHRlc3QgbWFrZXMgc3VyZSBpdCB3b3JrcyBub3cgZm9yIGV2ZXJ5IHBsYXRmb3JtCi0gICAgICAgICMgbGV0J3MgY3JlYXRlIGEgY29tbWFuZAotICAgICAgICBwa2dfcHRoLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCi0gICAgICAgIGNtZCA9IGJkaXN0X3dpbmluc3QoZGlzdCkKLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotCi0gICAgICAgICMgbGV0J3MgcnVuIHRoZSBjb2RlIHRoYXQgZmluZHMgdGhlIHJpZ2h0IHdpbmluc3QqLmV4ZSBmaWxlCi0gICAgICAgICMgYW5kIG1ha2Ugc3VyZSBpdCBmaW5kcyBpdCBhbmQgcmV0dXJucyBpdHMgY29udGVudAotICAgICAgICAjIG5vIG1hdHRlciB3aGF0IHBsYXRmb3JtIHdlIGhhdmUKLSAgICAgICAgZXhlX2ZpbGUgPSBjbWQuZ2V0X2V4ZV9ieXRlcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZXhlX2ZpbGUpID4gMTApCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShCdWlsZFdpbkluc3RUZXN0Q2FzZSkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZC5weSBiL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlYjhkNzMuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZC5weQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLSIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5idWlsZC4iIiIKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLQotZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZCBpbXBvcnQgYnVpbGQKLWZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Ci1mcm9tIHN5c2NvbmZpZyBpbXBvcnQgZ2V0X3BsYXRmb3JtCi0KLWNsYXNzIEJ1aWxkVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKLSAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCi0gICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X2ZpbmFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKLSAgICAgICAgY21kID0gYnVpbGQoZGlzdCkKLSAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQotCi0gICAgICAgICMgaWYgbm90IHNwZWNpZmllZCwgcGxhdF9uYW1lIGdldHMgdGhlIGN1cnJlbnQgcGxhdGZvcm0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQucGxhdF9uYW1lLCBnZXRfcGxhdGZvcm0oKSkKLQotICAgICAgICAjIGJ1aWxkX3B1cmVsaWIgaXMgYnVpbGQgKyBsaWIKLSAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKGNtZC5idWlsZF9iYXNlLCAnbGliJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuYnVpbGRfcHVyZWxpYiwgd2FudGVkKQotCi0gICAgICAgICMgYnVpbGRfcGxhdGxpYiBpcyAnYnVpbGQvbGliLnBsYXRmb3JtLXgueFstcHlkZWJ1Z10nCi0gICAgICAgICMgZXhhbXBsZXM6Ci0gICAgICAgICMgICBidWlsZC9saWIubWFjb3N4LTEwLjMtaTM4Ni0yLjcKLSAgICAgICAgcGxhdF9zcGVjID0gJy4lcy0lcycgJSAoY21kLnBsYXRfbmFtZSwgc3lzLnZlcnNpb25bMDozXSkKLSAgICAgICAgaWYgaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50Jyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY21kLmJ1aWxkX3BsYXRsaWIuZW5kc3dpdGgoJy1weWRlYnVnJykpCi0gICAgICAgICAgICBwbGF0X3NwZWMgKz0gJy1weWRlYnVnJwotICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY21kLmJ1aWxkX2Jhc2UsICdsaWInICsgcGxhdF9zcGVjKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5idWlsZF9wbGF0bGliLCB3YW50ZWQpCi0KLSAgICAgICAgIyBieSBkZWZhdWx0LCBidWlsZF9saWIgPSBidWlsZF9wdXJlbGliCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmJ1aWxkX2xpYiwgY21kLmJ1aWxkX3B1cmVsaWIpCi0KLSAgICAgICAgIyBidWlsZF90ZW1wIGlzIGJ1aWxkL3RlbXAuPHBsYXQ+Ci0gICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbihjbWQuYnVpbGRfYmFzZSwgJ3RlbXAnICsgcGxhdF9zcGVjKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5idWlsZF90ZW1wLCB3YW50ZWQpCi0KLSAgICAgICAgIyBidWlsZF9zY3JpcHRzIGlzIGJ1aWxkL3NjcmlwdHMteC54Ci0gICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbihjbWQuYnVpbGRfYmFzZSwgJ3NjcmlwdHMtJyArICBzeXMudmVyc2lvblswOjNdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5idWlsZF9zY3JpcHRzLCB3YW50ZWQpCi0KLSAgICAgICAgIyBleGVjdXRhYmxlIGlzIG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWN1dGFibGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmV4ZWN1dGFibGUsIG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWN1dGFibGUpKQotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQnVpbGRUZXN0Q2FzZSkKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9jbGliLnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9jbGliLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWYxYmQ5Li4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfY2xpYi5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfY2xpYi4iIiIKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotCi1mcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX2NsaWIgaW1wb3J0IGJ1aWxkX2NsaWIKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzU2V0dXBFcnJvcgotZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLWZyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBmaW5kX2V4ZWN1dGFibGUKLQotY2xhc3MgQnVpbGRDTGliVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfY2hlY2tfbGlicmFyeV9kaXN0KHNlbGYpOgotICAgICAgICBwa2dfZGlyLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCi0gICAgICAgIGNtZCA9IGJ1aWxkX2NsaWIoZGlzdCkKLQotICAgICAgICAjICdsaWJyYXJpZXMnIG9wdGlvbiBtdXN0IGJlIGEgbGlzdAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBjbWQuY2hlY2tfbGlicmFyeV9saXN0LCAnZm9vJykKLQotICAgICAgICAjIGVhY2ggZWxlbWVudCBvZiAnbGlicmFyaWVzJyBtdXN0IGEgMi10dXBsZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBjbWQuY2hlY2tfbGlicmFyeV9saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2ZvbzEnLCAnZm9vMiddKQotCi0gICAgICAgICMgZmlyc3QgZWxlbWVudCBvZiBlYWNoIHR1cGxlIGluICdsaWJyYXJpZXMnCi0gICAgICAgICMgbXVzdCBiZSBhIHN0cmluZyAodGhlIGxpYnJhcnkgbmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgY21kLmNoZWNrX2xpYnJhcnlfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWygxLCAnZm9vMScpLCAoJ25hbWUnLCAnZm9vMicpXSkKLQotICAgICAgICAjIGxpYnJhcnkgbmFtZSBtYXkgbm90IGNvbnRhaW4gZGlyZWN0b3J5IHNlcGFyYXRvcnMKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgY21kLmNoZWNrX2xpYnJhcnlfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWygnbmFtZScsICdmb28xJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2Fub3RoZXIvbmFtZScsICdmb28yJyldKQotCi0gICAgICAgICMgc2Vjb25kIGVsZW1lbnQgb2YgZWFjaCB0dXBsZSBtdXN0IGJlIGEgZGljdGlvbmFyeSAoYnVpbGQgaW5mbykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgY21kLmNoZWNrX2xpYnJhcnlfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWygnbmFtZScsIHt9KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYW5vdGhlcicsICdmb28yJyldKQotCi0gICAgICAgICMgdGhvc2Ugd29yawotICAgICAgICBsaWJzID0gWygnbmFtZScsIHt9KSwgKCduYW1lJywgeydvayc6ICdnb29kJ30pXQotICAgICAgICBjbWQuY2hlY2tfbGlicmFyeV9saXN0KGxpYnMpCi0KLSAgICBkZWYgdGVzdF9nZXRfc291cmNlX2ZpbGVzKHNlbGYpOgotICAgICAgICBwa2dfZGlyLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCi0gICAgICAgIGNtZCA9IGJ1aWxkX2NsaWIoZGlzdCkKLQotICAgICAgICAjICJpbiAnbGlicmFyaWVzJyBvcHRpb24gJ3NvdXJjZXMnIG11c3QgYmUgcHJlc2VudCBhbmQgbXVzdCBiZQotICAgICAgICAjIGEgbGlzdCBvZiBzb3VyY2UgZmlsZW5hbWVzCi0gICAgICAgIGNtZC5saWJyYXJpZXMgPSBbKCduYW1lJywge30pXQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBjbWQuZ2V0X3NvdXJjZV9maWxlcykKLQotICAgICAgICBjbWQubGlicmFyaWVzID0gWygnbmFtZScsIHsnc291cmNlcyc6IDF9KV0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgY21kLmdldF9zb3VyY2VfZmlsZXMpCi0KLSAgICAgICAgY21kLmxpYnJhcmllcyA9IFsoJ25hbWUnLCB7J3NvdXJjZXMnOiBbJ2EnLCAnYiddfSldCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmdldF9zb3VyY2VfZmlsZXMoKSwgWydhJywgJ2InXSkKLQotICAgICAgICBjbWQubGlicmFyaWVzID0gWygnbmFtZScsIHsnc291cmNlcyc6ICgnYScsICdiJyl9KV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZ2V0X3NvdXJjZV9maWxlcygpLCBbJ2EnLCAnYiddKQotCi0gICAgICAgIGNtZC5saWJyYXJpZXMgPSBbKCduYW1lJywgeydzb3VyY2VzJzogKCdhJywgJ2InKX0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICgnbmFtZTInLCB7J3NvdXJjZXMnOiBbJ2MnLCAnZCddfSldCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmdldF9zb3VyY2VfZmlsZXMoKSwgWydhJywgJ2InLCAnYycsICdkJ10pCi0KLSAgICBkZWYgdGVzdF9idWlsZF9saWJyYXJpZXMoc2VsZik6Ci0KLSAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQotICAgICAgICBjbWQgPSBidWlsZF9jbGliKGRpc3QpCi0gICAgICAgIGNsYXNzIEZha2VDb21waWxlcjoKLSAgICAgICAgICAgIGRlZiBjb21waWxlKCphcmdzLCAqKmt3KToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBjcmVhdGVfc3RhdGljX2xpYiA9IGNvbXBpbGUKLQotICAgICAgICBjbWQuY29tcGlsZXIgPSBGYWtlQ29tcGlsZXIoKQotCi0gICAgICAgICMgYnVpbGRfbGlicmFyaWVzIGlzIGFsc28gZG9pbmcgYSBiaXQgb2YgdHlwb2UgY2hlY2tpbmcKLSAgICAgICAgbGliID0gWygnbmFtZScsIHsnc291cmNlcyc6ICdub3R2YWxpZCd9KV0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgY21kLmJ1aWxkX2xpYnJhcmllcywgbGliKQotCi0gICAgICAgIGxpYiA9IFsoJ25hbWUnLCB7J3NvdXJjZXMnOiBsaXN0KCl9KV0KLSAgICAgICAgY21kLmJ1aWxkX2xpYnJhcmllcyhsaWIpCi0KLSAgICAgICAgbGliID0gWygnbmFtZScsIHsnc291cmNlcyc6IHR1cGxlKCl9KV0KLSAgICAgICAgY21kLmJ1aWxkX2xpYnJhcmllcyhsaWIpCi0KLSAgICBkZWYgdGVzdF9maW5hbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBwa2dfZGlyLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCi0gICAgICAgIGNtZCA9IGJ1aWxkX2NsaWIoZGlzdCkKLQotICAgICAgICBjbWQuaW5jbHVkZV9kaXJzID0gJ29uZS1kaXInCi0gICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuaW5jbHVkZV9kaXJzLCBbJ29uZS1kaXInXSkKLQotICAgICAgICBjbWQuaW5jbHVkZV9kaXJzID0gTm9uZQotICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmluY2x1ZGVfZGlycywgW10pCi0KLSAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5saWJyYXJpZXMgPSAnV09OVFdPUksnCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIGNtZC5maW5hbGl6ZV9vcHRpb25zKQotCi0gICAgZGVmIHRlc3RfcnVuKHNlbGYpOgotICAgICAgICAjIGNhbid0IHRlc3Qgb24gd2luZG93cwotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKLSAgICAgICAgY21kID0gYnVpbGRfY2xpYihkaXN0KQotCi0gICAgICAgIGZvb19jID0gb3MucGF0aC5qb2luKHBrZ19kaXIsICdmb28uYycpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZShmb29fYywgJ2ludCBtYWluKHZvaWQpIHsgcmV0dXJuIDE7fVxuJykKLSAgICAgICAgY21kLmxpYnJhcmllcyA9IFsoJ2ZvbycsIHsnc291cmNlcyc6IFtmb29fY119KV0KLQotICAgICAgICBidWlsZF90ZW1wID0gb3MucGF0aC5qb2luKHBrZ19kaXIsICdidWlsZCcpCi0gICAgICAgIG9zLm1rZGlyKGJ1aWxkX3RlbXApCi0gICAgICAgIGNtZC5idWlsZF90ZW1wID0gYnVpbGRfdGVtcAotICAgICAgICBjbWQuYnVpbGRfY2xpYiA9IGJ1aWxkX3RlbXAKLQotICAgICAgICAjIGJlZm9yZSB3ZSBydW4gdGhlIGNvbW1hbmQsIHdlIHdhbnQgdG8gbWFrZSBzdXJlCi0gICAgICAgICMgYWxsIGNvbW1hbmRzIGFyZSBwcmVzZW50IG9uIHRoZSBzeXN0ZW0KLSAgICAgICAgIyBieSBjcmVhdGluZyBhIGNvbXBpbGVyIGFuZCBjaGVja2luZyBpdHMgZXhlY3V0YWJsZXMKLSAgICAgICAgZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBuZXdfY29tcGlsZXIKLSAgICAgICAgZnJvbSBkaXN0dXRpbHMuc3lzY29uZmlnIGltcG9ydCBjdXN0b21pemVfY29tcGlsZXIKLQotICAgICAgICBjb21waWxlciA9IG5ld19jb21waWxlcigpCi0gICAgICAgIGN1c3RvbWl6ZV9jb21waWxlcihjb21waWxlcikKLSAgICAgICAgZm9yIGNjbWQgaW4gY29tcGlsZXIuZXhlY3V0YWJsZXMudmFsdWVzKCk6Ci0gICAgICAgICAgICBpZiBjY21kIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIGZpbmRfZXhlY3V0YWJsZShjY21kWzBdKSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHJldHVybiAjIGNhbid0IHRlc3QKLQotICAgICAgICAjIHRoaXMgc2hvdWxkIHdvcmsKLSAgICAgICAgY21kLnJ1bigpCi0KLSAgICAgICAgIyBsZXQncyBjaGVjayB0aGUgcmVzdWx0Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbGliZm9vLmEnIGluIG9zLmxpc3RkaXIoYnVpbGRfdGVtcCkpCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShCdWlsZENMaWJUZXN0Q2FzZSkKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9leHQucHkgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2V4dC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRjNmVlYS4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2V4dC5weQorKysgL2Rldi9udWxsCkBAIC0xLDUyMiArMCwwIEBACi1pbXBvcnQgc3lzCi1pbXBvcnQgb3MKLWZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCi1pbXBvcnQgdGV4dHdyYXAKLQotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRXh0ZW5zaW9uLCBEaXN0cmlidXRpb24KLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfZXh0IGltcG9ydCBidWlsZF9leHQKLWZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKLWZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Ci1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IChEaXN0dXRpbHNTZXR1cEVycm9yLCBDb21waWxlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKQotCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Ci0KLSMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTQzNzMKLSMgRG9uJ3QgbG9hZCB0aGUgeHggbW9kdWxlIG1vcmUgdGhhbiBvbmNlLgotQUxSRUFEWV9URVNURUQgPSBGYWxzZQotCi0KLWNsYXNzIEJ1aWxkRXh0VGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cGVyKEJ1aWxkRXh0VGVzdENhc2UsIHNlbGYpLnNldFVwKCkKLSAgICAgICAgc2VsZi50bXBfZGlyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgc2VsZi54eF9jcmVhdGVkID0gRmFsc2UKLSAgICAgICAgc3lzLnBhdGguYXBwZW5kKHNlbGYudG1wX2RpcikKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN5cy5wYXRoLnJlbW92ZSwgc2VsZi50bXBfZGlyKQotICAgICAgICBpZiBzeXMudmVyc2lvbiA+ICIyLjYiOgotICAgICAgICAgICAgaW1wb3J0IHNpdGUKLSAgICAgICAgICAgIHNlbGYub2xkX3VzZXJfYmFzZSA9IHNpdGUuVVNFUl9CQVNFCi0gICAgICAgICAgICBzaXRlLlVTRVJfQkFTRSA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgICAgICBmcm9tIGRpc3R1dGlscy5jb21tYW5kIGltcG9ydCBidWlsZF9leHQKLSAgICAgICAgICAgIGJ1aWxkX2V4dC5VU0VSX0JBU0UgPSBzaXRlLlVTRVJfQkFTRQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBpZiBzZWxmLnh4X2NyZWF0ZWQ6Ci0gICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5sb2FkKCd4eCcpCi0gICAgICAgICAgICAjIFhYWCBvbiBXaW5kb3dzIHRoZSB0ZXN0IGxlYXZlcyBhIGRpcmVjdG9yeQotICAgICAgICAgICAgIyB3aXRoIHh4IG1vZHVsZSBpbiBURU1QCi0gICAgICAgIHN1cGVyKEJ1aWxkRXh0VGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKLQotICAgIGRlZiB0ZXN0X2J1aWxkX2V4dChzZWxmKToKLSAgICAgICAgZ2xvYmFsIEFMUkVBRFlfVEVTVEVECi0gICAgICAgIHN1cHBvcnQuY29weV94eG1vZHVsZV9jKHNlbGYudG1wX2RpcikKLSAgICAgICAgc2VsZi54eF9jcmVhdGVkID0gVHJ1ZQotICAgICAgICB4eF9jID0gb3MucGF0aC5qb2luKHNlbGYudG1wX2RpciwgJ3h4bW9kdWxlLmMnKQotICAgICAgICB4eF9leHQgPSBFeHRlbnNpb24oJ3h4JywgW3h4X2NdKQotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICd4eCcsICdleHRfbW9kdWxlcyc6IFt4eF9leHRdfSkKLSAgICAgICAgZGlzdC5wYWNrYWdlX2RpciA9IHNlbGYudG1wX2RpcgotICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKLSAgICAgICAgc3VwcG9ydC5maXh1cF9idWlsZF9leHQoY21kKQotICAgICAgICBjbWQuYnVpbGRfbGliID0gc2VsZi50bXBfZGlyCi0gICAgICAgIGNtZC5idWlsZF90ZW1wID0gc2VsZi50bXBfZGlyCi0KLSAgICAgICAgb2xkX3N0ZG91dCA9IHN5cy5zdGRvdXQKLSAgICAgICAgaWYgbm90IHRlc3Rfc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgIyBzaWxlbmNlIGNvbXBpbGVyIG91dHB1dAotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IFN0cmluZ0lPKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICAgICAgI0Jyb2tlbiBhZnRlciBpc3N1ZSA3NzEyKHI3ODEzNikgOiBhZGQgYSB0ZW1wX2N3ZCBjb250ZXh0IG1hbmFnZXIgdG8gdGVzdF9zdXBwb3J0IC4uLgotICAgICAgICAgICAgI1dpdGhvdXQgY3VycmVudCB3b3JraW5nIGRpcjogIi4uLmNhbm5vdCBmaW5kIC1scHl0aG9uMjciCi0gICAgICAgICAgICAjTk9URTogW3B5M2sgc3ZuIHI4NTU1OV0gRmlyc3QgKHVuY29udHJvdmVyc2lhbCkgcGFydCBvZiBpc3N1ZSA5ODA3LCBiYXJyeS53YXJzYXcsIDIwMTAtMTAtMTYgOgotICAgICAgICAgICAgIyAgbmV3IF9maXh1cF9jb21tYW5kIGlzIGJvZ3VzLCBzbyB3ZSB3aWxsIHVzZSBvd24gd29yay1hcm91bmQKLSAgICAgICAgICAgIGNtZC5saWJyYXJ5X2RpcnMuaW5zZXJ0KDAsIHRlc3Rfc3VwcG9ydC5TQVZFRENXRCkKLSAgICAgICAgICAgIGNtZC5ydW4oKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IG9sZF9zdGRvdXQKLQotICAgICAgICBpZiBBTFJFQURZX1RFU1RFRDoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgQUxSRUFEWV9URVNURUQgPSBUcnVlCi0KLSAgICAgICAgaW1wb3J0IHh4Ci0KLSAgICAgICAgZm9yIGF0dHIgaW4gKCdlcnJvcicsICdmb28nLCAnbmV3JywgJ3JvaicpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoeHgsIGF0dHIpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeHguZm9vKDIsIDUpLCA3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHh4LmZvbygxMywxNSksIDI4KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHh4Lm5ldygpLmRlbW8oKSwgTm9uZSkKLSAgICAgICAgaWYgdGVzdF9zdXBwb3J0LkhBVkVfRE9DU1RSSU5HUzoKLSAgICAgICAgICAgIGRvYyA9ICdUaGlzIGlzIGEgdGVtcGxhdGUgbW9kdWxlIGp1c3QgZm9yIGluc3RydWN0aW9uLicKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeHguX19kb2NfXywgZG9jKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh4eC5OdWxsKCksIHh4Lk51bGwpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh4eC5TdHIoKSwgeHguU3RyKSkKLQotICAgIGRlZiB0ZXN0X3NvbGFyaXNfZW5hYmxlX3NoYXJlZChzZWxmKToKLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAneHgnfSkKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCi0gICAgICAgIG9sZCA9IHN5cy5wbGF0Zm9ybQotCi0gICAgICAgIHN5cy5wbGF0Zm9ybSA9ICdzdW5vcycgIyBmb29saW5nIGZpbmFsaXplX29wdGlvbnMKLSAgICAgICAgZnJvbSBkaXN0dXRpbHMuc3lzY29uZmlnIGltcG9ydCAgX2NvbmZpZ192YXJzCi0gICAgICAgIG9sZF92YXIgPSBfY29uZmlnX3ZhcnMuZ2V0KCdQeV9FTkFCTEVfU0hBUkVEJykKLSAgICAgICAgX2NvbmZpZ192YXJzWydQeV9FTkFCTEVfU0hBUkVEJ10gPSAxCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5wbGF0Zm9ybSA9IG9sZAotICAgICAgICAgICAgaWYgb2xkX3ZhciBpcyBOb25lOgotICAgICAgICAgICAgICAgIGRlbCBfY29uZmlnX3ZhcnNbJ1B5X0VOQUJMRV9TSEFSRUQnXQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBfY29uZmlnX3ZhcnNbJ1B5X0VOQUJMRV9TSEFSRUQnXSA9IG9sZF92YXIKLQotICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBnZXQgc29tZSBsaWJyYXJ5IGRpcnMgdW5kZXIgc29sYXJpcwotICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGNtZC5saWJyYXJ5X2RpcnMpID4gMCkKLQotICAgIGRlZiB0ZXN0X3VzZXJfc2l0ZShzZWxmKToKLSAgICAgICAgIyBzaXRlLlVTRVJfU0lURSB3YXMgaW50cm9kdWNlZCBpbiAyLjYKLSAgICAgICAgaWYgc3lzLnZlcnNpb24gPCAnMi42JzoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGltcG9ydCBzaXRlCi0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oeyduYW1lJzogJ3h4J30pCi0gICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQotCi0gICAgICAgICMgbWFraW5nIHN1cmUgdGhlIHVzZXIgb3B0aW9uIGlzIHRoZXJlCi0gICAgICAgIG9wdGlvbnMgPSBbbmFtZSBmb3IgbmFtZSwgc2hvcnQsIGxhYmVsIGluCi0gICAgICAgICAgICAgICAgICAgY21kLnVzZXJfb3B0aW9uc10KLSAgICAgICAgc2VsZi5hc3NlcnRJbigndXNlcicsIG9wdGlvbnMpCi0KLSAgICAgICAgIyBzZXR0aW5nIGEgdmFsdWUKLSAgICAgICAgY21kLnVzZXIgPSAxCi0KLSAgICAgICAgIyBzZXR0aW5nIHVzZXIgYmFzZWQgbGliIGFuZCBpbmNsdWRlCi0gICAgICAgIGxpYiA9IG9zLnBhdGguam9pbihzaXRlLlVTRVJfQkFTRSwgJ2xpYicpCi0gICAgICAgIGluY2wgPSBvcy5wYXRoLmpvaW4oc2l0ZS5VU0VSX0JBU0UsICdpbmNsdWRlJykKLSAgICAgICAgb3MubWtkaXIobGliKQotICAgICAgICBvcy5ta2RpcihpbmNsKQotCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLQotICAgICAgICAjIHNlZSBpZiBpbmNsdWRlX2RpcnMgYW5kIGxpYnJhcnlfZGlycyB3ZXJlIHNldAotICAgICAgICBzZWxmLmFzc2VydEluKGxpYiwgY21kLmxpYnJhcnlfZGlycykKLSAgICAgICAgc2VsZi5hc3NlcnRJbihsaWIsIGNtZC5ycGF0aCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihpbmNsLCBjbWQuaW5jbHVkZV9kaXJzKQotCi0gICAgZGVmIHRlc3RfZmluYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgIyBNYWtlIHN1cmUgUHl0aG9uJ3MgaW5jbHVkZSBkaXJlY3RvcmllcyAoZm9yIFB5dGhvbi5oLCBweWNvbmZpZy5oLAotICAgICAgICAjIGV0Yy4pIGFyZSBpbiB0aGUgaW5jbHVkZSBzZWFyY2ggcGF0aC4KLSAgICAgICAgbW9kdWxlcyA9IFtFeHRlbnNpb24oJ2ZvbycsIFsneHh4J10pXQotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICd4eCcsICdleHRfbW9kdWxlcyc6IG1vZHVsZXN9KQotICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKLSAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQotCi0gICAgICAgIHB5X2luY2x1ZGUgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocHlfaW5jbHVkZSBpbiBjbWQuaW5jbHVkZV9kaXJzKQotCi0gICAgICAgIHBsYXRfcHlfaW5jbHVkZSA9IHN5c2NvbmZpZy5nZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwbGF0X3B5X2luY2x1ZGUgaW4gY21kLmluY2x1ZGVfZGlycykKLQotICAgICAgICAjIG1ha2Ugc3VyZSBjbWQubGlicmFyaWVzIGlzIHR1cm5lZCBpbnRvIGEgbGlzdAotICAgICAgICAjIGlmIGl0J3MgYSBzdHJpbmcKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCi0gICAgICAgIGNtZC5saWJyYXJpZXMgPSAnbXlfbGliLCBvdGhlcl9saWIgbGFzdGxpYicKLSAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5saWJyYXJpZXMsIFsnbXlfbGliJywgJ290aGVyX2xpYicsICdsYXN0bGliJ10pCi0KLSAgICAgICAgIyBtYWtlIHN1cmUgY21kLmxpYnJhcnlfZGlycyBpcyB0dXJuZWQgaW50byBhIGxpc3QKLSAgICAgICAgIyBpZiBpdCdzIGEgc3RyaW5nCi0gICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQotICAgICAgICBjbWQubGlicmFyeV9kaXJzID0gJ215X2xpYl9kaXIlc290aGVyX2xpYl9kaXInICUgb3MucGF0aHNlcAotICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ215X2xpYl9kaXInLCBjbWQubGlicmFyeV9kaXJzKQotICAgICAgICBzZWxmLmFzc2VydEluKCdvdGhlcl9saWJfZGlyJywgY21kLmxpYnJhcnlfZGlycykKLQotICAgICAgICAjIG1ha2Ugc3VyZSBycGF0aCBpcyB0dXJuZWQgaW50byBhIGxpc3QKLSAgICAgICAgIyBpZiBpdCdzIGEgc3RyaW5nCi0gICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQotICAgICAgICBjbWQucnBhdGggPSAnb25lJXN0d28nICUgb3MucGF0aHNlcAotICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLnJwYXRoLCBbJ29uZScsICd0d28nXSkKLQotICAgICAgICAjIFhYWCBtb3JlIHRlc3RzIHRvIHBlcmZvcm0gZm9yIHdpbjMyCi0KLSAgICAgICAgIyBtYWtlIHN1cmUgZGVmaW5lIGlzIHR1cm5lZCBpbnRvIDItdHVwbGVzCi0gICAgICAgICMgc3RyaW5ncyBpZiB0aGV5IGFyZSAnLCctc2VwYXJhdGVkIHN0cmluZ3MKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCi0gICAgICAgIGNtZC5kZWZpbmUgPSAnb25lLHR3bycKLSAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5kZWZpbmUsIFsoJ29uZScsICcxJyksICgndHdvJywgJzEnKV0pCi0KLSAgICAgICAgIyBtYWtlIHN1cmUgdW5kZWYgaXMgdHVybmVkIGludG8gYSBsaXN0IG9mCi0gICAgICAgICMgc3RyaW5ncyBpZiB0aGV5IGFyZSAnLCctc2VwYXJhdGVkIHN0cmluZ3MKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCi0gICAgICAgIGNtZC51bmRlZiA9ICdvbmUsdHdvJwotICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLnVuZGVmLCBbJ29uZScsICd0d28nXSkKLQotICAgICAgICAjIG1ha2Ugc3VyZSBzd2lnX29wdHMgaXMgdHVybmVkIGludG8gYSBsaXN0Ci0gICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQotICAgICAgICBjbWQuc3dpZ19vcHRzID0gTm9uZQotICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLnN3aWdfb3B0cywgW10pCi0KLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCi0gICAgICAgIGNtZC5zd2lnX29wdHMgPSAnMSAyJwotICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLnN3aWdfb3B0cywgWycxJywgJzInXSkKLQotICAgIGRlZiB0ZXN0X2NoZWNrX2V4dGVuc2lvbnNfbGlzdChzZWxmKToKLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbigpCi0gICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQotICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0KLSAgICAgICAgIydleHRlbnNpb25zJyBvcHRpb24gbXVzdCBiZSBhIGxpc3Qgb2YgRXh0ZW5zaW9uIGluc3RhbmNlcwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBjbWQuY2hlY2tfZXh0ZW5zaW9uc19saXN0LCAnZm9vJykKLQotICAgICAgICAjIGVhY2ggZWxlbWVudCBvZiAnZXh0X21vZHVsZXMnIG9wdGlvbiBtdXN0IGJlIGFuCi0gICAgICAgICMgRXh0ZW5zaW9uIGluc3RhbmNlIG9yIDItdHVwbGUKLSAgICAgICAgZXh0cyA9IFsoJ2JhcicsICdmb28nLCAnYmFyJyksICdmb28nXQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBjbWQuY2hlY2tfZXh0ZW5zaW9uc19saXN0LCBleHRzKQotCi0gICAgICAgICMgZmlyc3QgZWxlbWVudCBvZiBlYWNoIHR1cGxlIGluICdleHRfbW9kdWxlcycKLSAgICAgICAgIyBtdXN0IGJlIHRoZSBleHRlbnNpb24gbmFtZSAoYSBzdHJpbmcpIGFuZCBtYXRjaAotICAgICAgICAjIGEgcHl0aG9uIGRvdHRlZC1zZXBhcmF0ZWQgbmFtZQotICAgICAgICBleHRzID0gWygnZm9vLWJhcicsICcnKV0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgY21kLmNoZWNrX2V4dGVuc2lvbnNfbGlzdCwgZXh0cykKLQotICAgICAgICAjIHNlY29uZCBlbGVtZW50IG9mIGVhY2ggdHVwbGUgaW4gJ2V4dF9tb2R1bGVzJwotICAgICAgICAjIG11c3QgYmUgYSBhcnkgKGJ1aWxkIGluZm8pCi0gICAgICAgIGV4dHMgPSBbKCdmb28uYmFyJywgJycpXQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBjbWQuY2hlY2tfZXh0ZW5zaW9uc19saXN0LCBleHRzKQotCi0gICAgICAgICMgb2sgdGhpcyBvbmUgc2hvdWxkIHBhc3MKLSAgICAgICAgZXh0cyA9IFsoJ2Zvby5iYXInLCB7J3NvdXJjZXMnOiBbJyddLCAnbGlicmFyaWVzJzogJ2ZvbycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb21lJzogJ2Jhcid9KV0KLSAgICAgICAgY21kLmNoZWNrX2V4dGVuc2lvbnNfbGlzdChleHRzKQotICAgICAgICBleHQgPSBleHRzWzBdCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGV4dCwgRXh0ZW5zaW9uKSkKLQotICAgICAgICAjIGNoZWNrX2V4dGVuc2lvbnNfbGlzdCBhZGRzIGluIGV4dCB0aGUgdmFsdWVzIHBhc3NlZAotICAgICAgICAjIHdoZW4gdGhleSBhcmUgaW4gKCdpbmNsdWRlX2RpcnMnLCAnbGlicmFyeV9kaXJzJywgJ2xpYnJhcmllcycKLSAgICAgICAgIyAnZXh0cmFfb2JqZWN0cycsICdleHRyYV9jb21waWxlX2FyZ3MnLCAnZXh0cmFfbGlua19hcmdzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHQubGlicmFyaWVzLCAnZm9vJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKGV4dCwgJ3NvbWUnKSkKLQotICAgICAgICAjICdtYWNyb3MnIGVsZW1lbnQgb2YgYnVpbGQgaW5mbyBkaWN0IG11c3QgYmUgMS0gb3IgMi10dXBsZQotICAgICAgICBleHRzID0gWygnZm9vLmJhcicsIHsnc291cmNlcyc6IFsnJ10sICdsaWJyYXJpZXMnOiAnZm9vJywKLSAgICAgICAgICAgICAgICAnc29tZSc6ICdiYXInLCAnbWFjcm9zJzogWygnMScsICcyJywgJzMnKSwgJ2ZvbyddfSldCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIGNtZC5jaGVja19leHRlbnNpb25zX2xpc3QsIGV4dHMpCi0KLSAgICAgICAgZXh0c1swXVsxXVsnbWFjcm9zJ10gPSBbKCcxJywgJzInKSwgKCczJywpXQotICAgICAgICBjbWQuY2hlY2tfZXh0ZW5zaW9uc19saXN0KGV4dHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXh0c1swXS51bmRlZl9tYWNyb3MsIFsnMyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHNbMF0uZGVmaW5lX21hY3JvcywgWygnMScsICcyJyldKQotCi0gICAgZGVmIHRlc3RfZ2V0X3NvdXJjZV9maWxlcyhzZWxmKToKLSAgICAgICAgbW9kdWxlcyA9IFtFeHRlbnNpb24oJ2ZvbycsIFsneHh4J10pXQotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICd4eCcsICdleHRfbW9kdWxlcyc6IG1vZHVsZXN9KQotICAgICAgICBjbWQgPSBidWlsZF9leHQoZGlzdCkKLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5nZXRfc291cmNlX2ZpbGVzKCksIFsneHh4J10pCi0KLSAgICBkZWYgdGVzdF9jb21waWxlcl9vcHRpb24oc2VsZik6Ci0gICAgICAgICMgY21kLmNvbXBpbGVyIGlzIGFuIG9wdGlvbiBhbmQKLSAgICAgICAgIyBzaG91bGQgbm90IGJlIG92ZXJyaWRlbiBieSBhIGNvbXBpbGVyIGluc3RhbmNlCi0gICAgICAgICMgd2hlbiB0aGUgY29tbWFuZCBpcyBydW4KLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbigpCi0gICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQotICAgICAgICBjbWQuY29tcGlsZXIgPSAndW5peCcKLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBjbWQucnVuKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuY29tcGlsZXIsICd1bml4JykKLQotICAgIGRlZiB0ZXN0X2dldF9vdXRwdXRzKHNlbGYpOgotICAgICAgICB0bXBfZGlyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgY19maWxlID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdmb28uYycpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZShjX2ZpbGUsICd2b2lkIGluaXRmb28odm9pZCkge307XG4nKQotICAgICAgICBleHQgPSBFeHRlbnNpb24oJ2ZvbycsIFtjX2ZpbGVdKQotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICd4eCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRfbW9kdWxlcyc6IFtleHRdfSkKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCi0gICAgICAgIHN1cHBvcnQuZml4dXBfYnVpbGRfZXh0KGNtZCkKLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbWQuZ2V0X291dHB1dHMoKSksIDEpCi0KLSAgICAgICAgY21kLmJ1aWxkX2xpYiA9IG9zLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICdidWlsZCcpCi0gICAgICAgIGNtZC5idWlsZF90ZW1wID0gb3MucGF0aC5qb2luKHNlbGYudG1wX2RpciwgJ3RlbXB0JykKLQotICAgICAgICAjIGlzc3VlICM1OTc3IDogZGlzdHV0aWxzIGJ1aWxkX2V4dC5nZXRfb3V0cHV0cwotICAgICAgICAjIHJldHVybnMgd3JvbmcgcmVzdWx0IHdpdGggLS1pbnBsYWNlCi0gICAgICAgIG90aGVyX3RtcF9kaXIgPSBvcy5wYXRoLnJlYWxwYXRoKHNlbGYubWtkdGVtcCgpKQotICAgICAgICBvbGRfd2QgPSBvcy5nZXRjd2QoKQotICAgICAgICAjV2l0aG91dCBjdXJyZW50IHdvcmtpbmcgZGlyOiAiLi4uY2Fubm90IGZpbmQgLWxweXRob24yNyIKLSAgICAgICAgI05PVEU6IEFmdGVyIGlzc3VlICM3NzEyKHI3ODEzNikgdGVzdCBjYW5ub3QgdXNlIG9sZF93ZCAhCi0gICAgICAgICNjbWQubGlicmFyeV9kaXJzLmluc2VydCgwLCBvbGRfd2QpCi0gICAgICAgICNOT1RFOiBbcHkzayBzdm4gcjg1NTU5XSBGaXJzdCAodW5jb250cm92ZXJzaWFsKSBwYXJ0IG9mIGlzc3VlIDk4MDcsIGJhcnJ5LndhcnNhdywgMjAxMC0xMC0xNiA6Ci0gICAgICAgICMgIG5ldyBfZml4dXBfY29tbWFuZCBpcyBib2d1cywgc28gd2Ugd2lsbCB1c2Ugb3duIHdvcmstYXJvdW5kCi0gICAgICAgIGNtZC5saWJyYXJ5X2RpcnMuaW5zZXJ0KDAsIHRlc3Rfc3VwcG9ydC5TQVZFRENXRCkKLSAgICAgICAgb3MuY2hkaXIob3RoZXJfdG1wX2RpcikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY21kLmlucGxhY2UgPSAxCi0gICAgICAgICAgICBjbWQucnVuKCkKLSAgICAgICAgICAgIHNvX2ZpbGUgPSBjbWQuZ2V0X291dHB1dHMoKVswXQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkX3dkKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc29fZmlsZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5zcGxpdGV4dChzb19maWxlKVstMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTTycpKQotICAgICAgICBzb19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoc29fZmlsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb19kaXIsIG90aGVyX3RtcF9kaXIpCi0gICAgICAgIGNtZC5jb21waWxlciA9IE5vbmUKLSAgICAgICAgY21kLmlucGxhY2UgPSAwCi0gICAgICAgIGNtZC5ydW4oKQotICAgICAgICBzb19maWxlID0gY21kLmdldF9vdXRwdXRzKClbMF0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNvX2ZpbGUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguc3BsaXRleHQoc29fZmlsZSlbLTFdLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU08nKSkKLSAgICAgICAgc29fZGlyID0gb3MucGF0aC5kaXJuYW1lKHNvX2ZpbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29fZGlyLCBjbWQuYnVpbGRfbGliKQotCi0gICAgICAgICMgaW5wbGFjZSA9IDAsIGNtZC5wYWNrYWdlID0gJ2JhcicKLSAgICAgICAgYnVpbGRfcHkgPSBjbWQuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdidWlsZF9weScpCi0gICAgICAgIGJ1aWxkX3B5LnBhY2thZ2VfZGlyID0geycnOiAnYmFyJ30KLSAgICAgICAgcGF0aCA9IGNtZC5nZXRfZXh0X2Z1bGxwYXRoKCdmb28nKQotICAgICAgICAjIGNoZWNraW5nIHRoYXQgdGhlIGxhc3QgZGlyZWN0b3J5IGlzIHRoZSBidWlsZF9kaXIKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguc3BsaXQocGF0aClbMF0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRoLCBjbWQuYnVpbGRfbGliKQotCi0gICAgICAgICMgaW5wbGFjZSA9IDEsIGNtZC5wYWNrYWdlID0gJ2JhcicKLSAgICAgICAgY21kLmlucGxhY2UgPSAxCi0gICAgICAgIG90aGVyX3RtcF9kaXIgPSBvcy5wYXRoLnJlYWxwYXRoKHNlbGYubWtkdGVtcCgpKQotICAgICAgICBvbGRfd2QgPSBvcy5nZXRjd2QoKQotICAgICAgICBvcy5jaGRpcihvdGhlcl90bXBfZGlyKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwYXRoID0gY21kLmdldF9leHRfZnVsbHBhdGgoJ2ZvbycpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfd2QpCi0gICAgICAgICMgY2hlY2tpbmcgdGhhdCB0aGUgbGFzdCBkaXJlY3RvcnkgaXMgYmFyCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLnNwbGl0KHBhdGgpWzBdCi0gICAgICAgIGxhc3RkaXIgPSBvcy5wYXRoLnNwbGl0KHBhdGgpWy0xXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxhc3RkaXIsICdiYXInKQotCi0gICAgZGVmIHRlc3RfZXh0X2Z1bGxwYXRoKHNlbGYpOgotICAgICAgICBleHQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKClbJ1NPJ10KLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbigpCi0gICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQotICAgICAgICBjbWQuaW5wbGFjZSA9IDEKLSAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5wYWNrYWdlX2RpciA9IHsnJzogJ3NyYyd9Ci0gICAgICAgIGNtZC5kaXN0cmlidXRpb24ucGFja2FnZXMgPSBbJ2x4bWwnLCAnbHhtbC5odG1sJ10KLSAgICAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKGN1cmRpciwgJ3NyYycsICdseG1sJywgJ2V0cmVlJyArIGV4dCkKLSAgICAgICAgcGF0aCA9IGNtZC5nZXRfZXh0X2Z1bGxwYXRoKCdseG1sLmV0cmVlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YW50ZWQsIHBhdGgpCi0KLSAgICAgICAgIyBidWlsZGluZyBseG1sLmV0cmVlIG5vdCBpbnBsYWNlCi0gICAgICAgIGNtZC5pbnBsYWNlID0gMAotICAgICAgICBjbWQuYnVpbGRfbGliID0gb3MucGF0aC5qb2luKGN1cmRpciwgJ3RtcGRpcicpCi0gICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbihjdXJkaXIsICd0bXBkaXInLCAnbHhtbCcsICdldHJlZScgKyBleHQpCi0gICAgICAgIHBhdGggPSBjbWQuZ2V0X2V4dF9mdWxscGF0aCgnbHhtbC5ldHJlZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FudGVkLCBwYXRoKQotCi0gICAgICAgICMgYnVpbGRpbmcgdHdpc3RlZC5ydW5uZXIucG9ydG1hcCBub3QgaW5wbGFjZQotICAgICAgICBidWlsZF9weSA9IGNtZC5nZXRfZmluYWxpemVkX2NvbW1hbmQoJ2J1aWxkX3B5JykKLSAgICAgICAgYnVpbGRfcHkucGFja2FnZV9kaXIgPSB7fQotICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLnBhY2thZ2VzID0gWyd0d2lzdGVkJywgJ3R3aXN0ZWQucnVubmVyLnBvcnRtYXAnXQotICAgICAgICBwYXRoID0gY21kLmdldF9leHRfZnVsbHBhdGgoJ3R3aXN0ZWQucnVubmVyLnBvcnRtYXAnKQotICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY3VyZGlyLCAndG1wZGlyJywgJ3R3aXN0ZWQnLCAncnVubmVyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3J0bWFwJyArIGV4dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YW50ZWQsIHBhdGgpCi0KLSAgICAgICAgIyBidWlsZGluZyB0d2lzdGVkLnJ1bm5lci5wb3J0bWFwIGlucGxhY2UKLSAgICAgICAgY21kLmlucGxhY2UgPSAxCi0gICAgICAgIHBhdGggPSBjbWQuZ2V0X2V4dF9mdWxscGF0aCgndHdpc3RlZC5ydW5uZXIucG9ydG1hcCcpCi0gICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbihjdXJkaXIsICd0d2lzdGVkJywgJ3J1bm5lcicsICdwb3J0bWFwJyArIGV4dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YW50ZWQsIHBhdGgpCi0KLSAgICBkZWYgdGVzdF9idWlsZF9leHRfaW5wbGFjZShzZWxmKToKLSAgICAgICAgZXRyZWVfYyA9IG9zLnBhdGguam9pbihzZWxmLnRtcF9kaXIsICdseG1sLmV0cmVlLmMnKQotICAgICAgICBldHJlZV9leHQgPSBFeHRlbnNpb24oJ2x4bWwuZXRyZWUnLCBbZXRyZWVfY10pCi0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oeyduYW1lJzogJ2x4bWwnLCAnZXh0X21vZHVsZXMnOiBbZXRyZWVfZXh0XX0pCi0gICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIGNtZC5pbnBsYWNlID0gMQotICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLnBhY2thZ2VfZGlyID0geycnOiAnc3JjJ30KLSAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5wYWNrYWdlcyA9IFsnbHhtbCcsICdseG1sLmh0bWwnXQotICAgICAgICBjdXJkaXIgPSBvcy5nZXRjd2QoKQotICAgICAgICBleHQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlNPIikKLSAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKGN1cmRpciwgJ3NyYycsICdseG1sJywgJ2V0cmVlJyArIGV4dCkKLSAgICAgICAgcGF0aCA9IGNtZC5nZXRfZXh0X2Z1bGxwYXRoKCdseG1sLmV0cmVlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YW50ZWQsIHBhdGgpCi0KLSAgICBkZWYgdGVzdF9zZXR1cHRvb2xzX2NvbXBhdChzZWxmKToKLSAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb3JlLCBkaXN0dXRpbHMuZXh0ZW5zaW9uLCBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9leHQKLSAgICAgICAgc2F2ZWRfZXh0ID0gZGlzdHV0aWxzLmV4dGVuc2lvbi5FeHRlbnNpb24KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBvbiBzb21lIHBsYXRmb3JtcywgaXQgbG9hZHMgdGhlIGRlcHJlY2F0ZWQgImRsIiBtb2R1bGUKLSAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdzZXR1cHRvb2xzX2J1aWxkX2V4dCcsIGRlcHJlY2F0ZWQ9VHJ1ZSkKLQotICAgICAgICAgICAgIyB0aGVzZXMgaW1wb3J0IHBhdGNoIERpc3R1dGlscycgRXh0ZW5zaW9uIGNsYXNzCi0gICAgICAgICAgICBmcm9tIHNldHVwdG9vbHNfYnVpbGRfZXh0IGltcG9ydCBidWlsZF9leHQgYXMgc2V0dXB0b29sc19idWlsZF9leHQKLSAgICAgICAgICAgIGZyb20gc2V0dXB0b29sc19leHRlbnNpb24gaW1wb3J0IEV4dGVuc2lvbgotCi0gICAgICAgICAgICBldHJlZV9jID0gb3MucGF0aC5qb2luKHNlbGYudG1wX2RpciwgJ2x4bWwuZXRyZWUuYycpCi0gICAgICAgICAgICBldHJlZV9leHQgPSBFeHRlbnNpb24oJ2x4bWwuZXRyZWUnLCBbZXRyZWVfY10pCi0gICAgICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICdseG1sJywgJ2V4dF9tb2R1bGVzJzogW2V0cmVlX2V4dF19KQotICAgICAgICAgICAgY21kID0gc2V0dXB0b29sc19idWlsZF9leHQoZGlzdCkKLSAgICAgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgICAgIGNtZC5pbnBsYWNlID0gMQotICAgICAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5wYWNrYWdlX2RpciA9IHsnJzogJ3NyYyd9Ci0gICAgICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLnBhY2thZ2VzID0gWydseG1sJywgJ2x4bWwuaHRtbCddCi0gICAgICAgICAgICBjdXJkaXIgPSBvcy5nZXRjd2QoKQotICAgICAgICAgICAgZXh0ID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJTTyIpCi0gICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY3VyZGlyLCAnc3JjJywgJ2x4bWwnLCAnZXRyZWUnICsgZXh0KQotICAgICAgICAgICAgcGF0aCA9IGNtZC5nZXRfZXh0X2Z1bGxwYXRoKCdseG1sLmV0cmVlJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FudGVkLCBwYXRoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgIyByZXN0b3JpbmcgRGlzdHV0aWxzJyBFeHRlbnNpb24gY2xhc3Mgb3RoZXJ3aXNlIGl0cyBicm9rZW4KLSAgICAgICAgICAgIGRpc3R1dGlscy5leHRlbnNpb24uRXh0ZW5zaW9uID0gc2F2ZWRfZXh0Ci0gICAgICAgICAgICBkaXN0dXRpbHMuY29yZS5FeHRlbnNpb24gPSBzYXZlZF9leHQKLSAgICAgICAgICAgIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX2V4dC5FeHRlbnNpb24gPSBzYXZlZF9leHQKLQotICAgIGRlZiB0ZXN0X2J1aWxkX2V4dF9wYXRoX3dpdGhfb3Nfc2VwKHNlbGYpOgotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICdVcGRhdGVNYW5hZ2VyJ30pCi0gICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIGV4dCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiU08iKQotICAgICAgICBleHRfbmFtZSA9IG9zLnBhdGguam9pbignVXBkYXRlTWFuYWdlcicsICdmZHNlbmQnKQotICAgICAgICBleHRfcGF0aCA9IGNtZC5nZXRfZXh0X2Z1bGxwYXRoKGV4dF9uYW1lKQotICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY21kLmJ1aWxkX2xpYiwgJ1VwZGF0ZU1hbmFnZXInLCAnZmRzZW5kJyArIGV4dCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRfcGF0aCwgd2FudGVkKQotCi0gICAgZGVmIHRlc3RfYnVpbGRfZXh0X3BhdGhfY3Jvc3NfcGxhdGZvcm0oc2VsZik6Ci0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oeyduYW1lJzogJ1VwZGF0ZU1hbmFnZXInfSkKLSAgICAgICAgY21kID0gYnVpbGRfZXh0KGRpc3QpCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgZXh0ID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJTTyIpCi0gICAgICAgICMgdGhpcyBuZWVkcyB0byB3b3JrIGV2ZW4gdW5kZXIgd2luMzIKLSAgICAgICAgZXh0X25hbWUgPSAnVXBkYXRlTWFuYWdlci9mZHNlbmQnCi0gICAgICAgIGV4dF9wYXRoID0gY21kLmdldF9leHRfZnVsbHBhdGgoZXh0X25hbWUpCi0gICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbihjbWQuYnVpbGRfbGliLCAnVXBkYXRlTWFuYWdlcicsICdmZHNlbmQnICsgZXh0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dF9wYXRoLCB3YW50ZWQpCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicsICd0ZXN0IG9ubHkgcmVsZXZhbnQgZm9yIE1hY09TWCcpCi0gICAgZGVmIHRlc3RfZGVwbG95bWVudF90YXJnZXRfZGVmYXVsdChzZWxmKToKLSAgICAgICAgIyBJc3N1ZSA5NTE2OiBUZXN0IHRoYXQsIGluIHRoZSBhYnNlbmNlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwKLSAgICAgICAgIyBhbiBleHRlbnNpb24gbW9kdWxlIGlzIGNvbXBpbGVkIHdpdGggdGhlIHNhbWUgZGVwbG95bWVudCB0YXJnZXQgYXMKLSAgICAgICAgIyAgdGhlIGludGVycHJldGVyLgotICAgICAgICBzZWxmLl90cnlfY29tcGlsZV9kZXBsb3ltZW50X3RhcmdldCgnPT0nLCBOb25lKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nLCAndGVzdCBvbmx5IHJlbGV2YW50IGZvciBNYWNPU1gnKQotICAgIGRlZiB0ZXN0X2RlcGxveW1lbnRfdGFyZ2V0X3Rvb19sb3coc2VsZik6Ci0gICAgICAgICMgSXNzdWUgOTUxNjogVGVzdCB0aGF0IGFuIGV4dGVuc2lvbiBtb2R1bGUgaXMgbm90IGFsbG93ZWQgdG8gYmUKLSAgICAgICAgIyBjb21waWxlZCB3aXRoIGEgZGVwbG95bWVudCB0YXJnZXQgbGVzcyB0aGFuIHRoYXQgb2YgdGhlIGludGVycHJldGVyLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNQbGF0Zm9ybUVycm9yLAotICAgICAgICAgICAgc2VsZi5fdHJ5X2NvbXBpbGVfZGVwbG95bWVudF90YXJnZXQsICc+JywgJzEwLjEnKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nLCAndGVzdCBvbmx5IHJlbGV2YW50IGZvciBNYWNPU1gnKQotICAgIGRlZiB0ZXN0X2RlcGxveW1lbnRfdGFyZ2V0X2hpZ2hlcl9vayhzZWxmKToKLSAgICAgICAgIyBJc3N1ZSA5NTE2OiBUZXN0IHRoYXQgYW4gZXh0ZW5zaW9uIG1vZHVsZSBjYW4gYmUgY29tcGlsZWQgd2l0aCBhCi0gICAgICAgICMgZGVwbG95bWVudCB0YXJnZXQgaGlnaGVyIHRoYW4gdGhhdCBvZiB0aGUgaW50ZXJwcmV0ZXI6IHRoZSBleHQKLSAgICAgICAgIyBtb2R1bGUgbWF5IGRlcGVuZCBvbiBzb21lIG5ld2VyIE9TIGZlYXR1cmUuCi0gICAgICAgIGRlcHRhcmdldCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJykKLSAgICAgICAgaWYgZGVwdGFyZ2V0OgotICAgICAgICAgICAgIyBpbmNyZW1lbnQgdGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyIChpLmUuIDEwLjYgLT4gMTAuNykKLSAgICAgICAgICAgIGRlcHRhcmdldCA9IFtpbnQoeCkgZm9yIHggaW4gZGVwdGFyZ2V0LnNwbGl0KCcuJyldCi0gICAgICAgICAgICBkZXB0YXJnZXRbLTFdICs9IDEKLSAgICAgICAgICAgIGRlcHRhcmdldCA9ICcuJy5qb2luKHN0cihpKSBmb3IgaSBpbiBkZXB0YXJnZXQpCi0gICAgICAgICAgICBzZWxmLl90cnlfY29tcGlsZV9kZXBsb3ltZW50X3RhcmdldCgnPCcsIGRlcHRhcmdldCkKLQotICAgIGRlZiBfdHJ5X2NvbXBpbGVfZGVwbG95bWVudF90YXJnZXQoc2VsZiwgb3BlcmF0b3IsIHRhcmdldCk6Ci0gICAgICAgIG9yaWdfZW52aXJvbiA9IG9zLmVudmlyb24KLSAgICAgICAgb3MuZW52aXJvbiA9IG9yaWdfZW52aXJvbi5jb3B5KCkKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNldGF0dHIsIG9zLCAnZW52aXJvbicsIG9yaWdfZW52aXJvbikKLQotICAgICAgICBpZiB0YXJnZXQgaXMgTm9uZToKLSAgICAgICAgICAgIGlmIG9zLmVudmlyb24uZ2V0KCdNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnKToKLSAgICAgICAgICAgICAgICBkZWwgb3MuZW52aXJvblsnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9zLmVudmlyb25bJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddID0gdGFyZ2V0Ci0KLSAgICAgICAgZGVwdGFyZ2V0X2MgPSBvcy5wYXRoLmpvaW4oc2VsZi50bXBfZGlyLCAnZGVwdGFyZ2V0bW9kdWxlLmMnKQotCi0gICAgICAgIHdpdGggb3BlbihkZXB0YXJnZXRfYywgJ3cnKSBhcyBmcDoKLSAgICAgICAgICAgIGZwLndyaXRlKHRleHR3cmFwLmRlZGVudCgnJydcCi0gICAgICAgICAgICAgICAgI2luY2x1ZGUgPEF2YWlsYWJpbGl0eU1hY3Jvcy5oPgotCi0gICAgICAgICAgICAgICAgaW50IGR1bW15OwotCi0gICAgICAgICAgICAgICAgI2lmIFRBUkdFVCAlcyBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRAotICAgICAgICAgICAgICAgICNlbHNlCi0gICAgICAgICAgICAgICAgI2Vycm9yICJVbmV4cGVjdGVkIHRhcmdldCIKLSAgICAgICAgICAgICAgICAjZW5kaWYKLQotICAgICAgICAgICAgJycnICUgb3BlcmF0b3IpKQotCi0gICAgICAgICMgZ2V0IHRoZSBkZXBsb3ltZW50IHRhcmdldCB0aGF0IHRoZSBpbnRlcnByZXRlciB3YXMgYnVpbHQgd2l0aAotICAgICAgICB0YXJnZXQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcpCi0gICAgICAgIHRhcmdldCA9IHR1cGxlKG1hcChpbnQsIHRhcmdldC5zcGxpdCgnLicpKSkKLSAgICAgICAgdGFyZ2V0ID0gJyUwMmQlMDFkMCcgJSB0YXJnZXQKLSAgICAgICAgZGVwdGFyZ2V0X2V4dCA9IEV4dGVuc2lvbigKLSAgICAgICAgICAgICdkZXB0YXJnZXQnLAotICAgICAgICAgICAgW2RlcHRhcmdldF9jXSwKLSAgICAgICAgICAgIGV4dHJhX2NvbXBpbGVfYXJncz1bJy1EVEFSR0VUPSVzJyUodGFyZ2V0LCldLAotICAgICAgICApCi0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oewotICAgICAgICAgICAgJ25hbWUnOiAnZGVwdGFyZ2V0JywKLSAgICAgICAgICAgICdleHRfbW9kdWxlcyc6IFtkZXB0YXJnZXRfZXh0XQotICAgICAgICB9KQotICAgICAgICBkaXN0LnBhY2thZ2VfZGlyID0gc2VsZi50bXBfZGlyCi0gICAgICAgIGNtZCA9IGJ1aWxkX2V4dChkaXN0KQotICAgICAgICBjbWQuYnVpbGRfbGliID0gc2VsZi50bXBfZGlyCi0gICAgICAgIGNtZC5idWlsZF90ZW1wID0gc2VsZi50bXBfZGlyCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICAgICAgY21kLnJ1bigpCi0gICAgICAgIGV4Y2VwdCBDb21waWxlRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIldyb25nIGRlcGxveW1lbnQgdGFyZ2V0IGR1cmluZyBjb21waWxhdGlvbiIpCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShCdWlsZEV4dFRlc3RDYXNlKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weSBiL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfcHkucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNmVjMjAuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfcHkuIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IFN0cmluZ0lPCi1pbXBvcnQgdW5pdHRlc3QKLQotZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weSBpbXBvcnQgYnVpbGRfcHkKLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNGaWxlRXJyb3IKLQotZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotCi0KLWNsYXNzIEJ1aWxkUHlUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAotICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAotICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X3BhY2thZ2VfZGF0YShzZWxmKToKLSAgICAgICAgc291cmNlcyA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzb3VyY2VzLCAiX19pbml0X18ucHkiKSwgInciKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmLndyaXRlKCIjIFByZXRlbmQgdGhpcyBpcyBhIHBhY2thZ2UuIikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc291cmNlcywgIlJFQURNRS50eHQiKSwgInciKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmLndyaXRlKCJJbmZvIGFib3V0IHRoaXMgcGFja2FnZSIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICBkZXN0aW5hdGlvbiA9IHNlbGYubWtkdGVtcCgpCi0KLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7InBhY2thZ2VzIjogWyJwa2ciXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2VfZGlyIjogeyJwa2ciOiBzb3VyY2VzfX0pCi0gICAgICAgICMgc2NyaXB0X25hbWUgbmVlZCBub3QgZXhpc3QsIGl0IGp1c3QgbmVlZCB0byBiZSBpbml0aWFsaXplZAotICAgICAgICBkaXN0LnNjcmlwdF9uYW1lID0gb3MucGF0aC5qb2luKHNvdXJjZXMsICJzZXR1cC5weSIpCi0gICAgICAgIGRpc3QuY29tbWFuZF9vYmpbImJ1aWxkIl0gPSBzdXBwb3J0LkR1bW15Q29tbWFuZCgKLSAgICAgICAgICAgIGZvcmNlPTAsCi0gICAgICAgICAgICBidWlsZF9saWI9ZGVzdGluYXRpb24pCi0gICAgICAgIGRpc3QucGFja2FnZXMgPSBbInBrZyJdCi0gICAgICAgIGRpc3QucGFja2FnZV9kYXRhID0geyJwa2ciOiBbIlJFQURNRS50eHQiXX0KLSAgICAgICAgZGlzdC5wYWNrYWdlX2RpciA9IHsicGtnIjogc291cmNlc30KLQotICAgICAgICBjbWQgPSBidWlsZF9weShkaXN0KQotICAgICAgICBjbWQuY29tcGlsZSA9IDEKLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5wYWNrYWdlX2RhdGEsIGRpc3QucGFja2FnZV9kYXRhKQotCi0gICAgICAgIGNtZC5ydW4oKQotCi0gICAgICAgICMgVGhpcyBtYWtlcyBzdXJlIHRoZSBsaXN0IG9mIG91dHB1dHMgaW5jbHVkZXMgYnl0ZS1jb21waWxlZAotICAgICAgICAjIGZpbGVzIGZvciBQeXRob24gbW9kdWxlcyBidXQgbm90IGZvciBwYWNrYWdlIGRhdGEgZmlsZXMKLSAgICAgICAgIyAodGhlcmUgc2hvdWxkbid0ICpiZSogYnl0ZS1jb2RlIGZpbGVzIGZvciB0aG9zZSEpLgotICAgICAgICAjCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNtZC5nZXRfb3V0cHV0cygpKSwgMykKLSAgICAgICAgcGtnZGVzdCA9IG9zLnBhdGguam9pbihkZXN0aW5hdGlvbiwgInBrZyIpCi0gICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihwa2dkZXN0KQotICAgICAgICBzZWxmLmFzc2VydEluKCJfX2luaXRfXy5weSIsIGZpbGVzKQotICAgICAgICBzZWxmLmFzc2VydEluKCJSRUFETUUudHh0IiwgZmlsZXMpCi0gICAgICAgICMgWFhYIGV2ZW4gd2l0aCAtTywgZGlzdHV0aWxzIHdyaXRlcyBweWMsIG5vdCBweW87IGJ1Zz8KLSAgICAgICAgaWYgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJfX2luaXRfXy5weWMiLCBmaWxlcykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9faW5pdF9fLnB5YyIsIGZpbGVzKQotCi0gICAgZGVmIHRlc3RfZW1wdHlfcGFja2FnZV9kaXIoc2VsZik6Ci0gICAgICAgICMgU2VlIFNGIDE2Njg1OTYvMTcyMDg5Ny4KLSAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKLQotICAgICAgICAjIGNyZWF0ZSB0aGUgZGlzdHJpYnV0aW9uIGZpbGVzLgotICAgICAgICBzb3VyY2VzID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgb3Blbihvcy5wYXRoLmpvaW4oc291cmNlcywgIl9faW5pdF9fLnB5IiksICJ3IikuY2xvc2UoKQotCi0gICAgICAgIHRlc3RkaXIgPSBvcy5wYXRoLmpvaW4oc291cmNlcywgImRvYyIpCi0gICAgICAgIG9zLm1rZGlyKHRlc3RkaXIpCi0gICAgICAgIG9wZW4ob3MucGF0aC5qb2luKHRlc3RkaXIsICJ0ZXN0ZmlsZSIpLCAidyIpLmNsb3NlKCkKLQotICAgICAgICBvcy5jaGRpcihzb3VyY2VzKQotICAgICAgICBvbGRfc3Rkb3V0ID0gc3lzLnN0ZG91dAotICAgICAgICBzeXMuc3Rkb3V0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oeyJwYWNrYWdlcyI6IFsicGtnIl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFja2FnZV9kaXIiOiB7InBrZyI6ICIifSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlX2RhdGEiOiB7InBrZyI6IFsiZG9jLyoiXX19KQotICAgICAgICAgICAgIyBzY3JpcHRfbmFtZSBuZWVkIG5vdCBleGlzdCwgaXQganVzdCBuZWVkIHRvIGJlIGluaXRpYWxpemVkCi0gICAgICAgICAgICBkaXN0LnNjcmlwdF9uYW1lID0gb3MucGF0aC5qb2luKHNvdXJjZXMsICJzZXR1cC5weSIpCi0gICAgICAgICAgICBkaXN0LnNjcmlwdF9hcmdzID0gWyJidWlsZCJdCi0gICAgICAgICAgICBkaXN0LnBhcnNlX2NvbW1hbmRfbGluZSgpCi0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBkaXN0LnJ1bl9jb21tYW5kcygpCi0gICAgICAgICAgICBleGNlcHQgRGlzdHV0aWxzRmlsZUVycm9yOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZmFpbGVkIHBhY2thZ2VfZGF0YSB0ZXN0IHdoZW4gcGFja2FnZV9kaXIgaXMgJyciKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgIyBSZXN0b3JlIHN0YXRlLgotICAgICAgICAgICAgb3MuY2hkaXIoY3dkKQotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IG9sZF9zdGRvdXQKLQotICAgIGRlZiB0ZXN0X2RvbnRfd3JpdGVfYnl0ZWNvZGUoc2VsZik6Ci0gICAgICAgICMgbWFrZXMgc3VyZSBieXRlX2NvbXBpbGUgaXMgbm90IHVzZWQKLSAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQotICAgICAgICBjbWQgPSBidWlsZF9weShkaXN0KQotICAgICAgICBjbWQuY29tcGlsZSA9IDEKLSAgICAgICAgY21kLm9wdGltaXplID0gMQotCi0gICAgICAgIG9sZF9kb250X3dyaXRlX2J5dGVjb2RlID0gc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUKLSAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNtZC5ieXRlX2NvbXBpbGUoW10pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IG9sZF9kb250X3dyaXRlX2J5dGVjb2RlCi0KLSAgICAgICAgc2VsZi5hc3NlcnRJbignYnl0ZS1jb21waWxpbmcgaXMgZGlzYWJsZWQnLCBzZWxmLmxvZ3NbMF1bMV0pCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShCdWlsZFB5VGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfc2NyaXB0cy5weSBiL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfc2NyaXB0cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRhOTNjYy4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX3NjcmlwdHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX3NjcmlwdHMuIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfc2NyaXB0cyBpbXBvcnQgYnVpbGRfc2NyaXB0cwotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRGlzdHJpYnV0aW9uCi1pbXBvcnQgc3lzY29uZmlnCi0KLWZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLQotCi1jbGFzcyBCdWlsZFNjcmlwdHNUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9kZWZhdWx0X3NldHRpbmdzKHNlbGYpOgotICAgICAgICBjbWQgPSBzZWxmLmdldF9idWlsZF9zY3JpcHRzX2NtZCgiL2Zvby9iYXIiLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjbWQuZm9yY2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWQuYnVpbGRfZGlyIGlzIE5vbmUpCi0KLSAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWQuZm9yY2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmJ1aWxkX2RpciwgIi9mb28vYmFyIikKLQotICAgIGRlZiB0ZXN0X2J1aWxkKHNlbGYpOgotICAgICAgICBzb3VyY2UgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICB0YXJnZXQgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBleHBlY3RlZCA9IHNlbGYud3JpdGVfc2FtcGxlX3NjcmlwdHMoc291cmNlKQotCi0gICAgICAgIGNtZCA9IHNlbGYuZ2V0X2J1aWxkX3NjcmlwdHNfY21kKHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29zLnBhdGguam9pbihzb3VyY2UsIGZuKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZuIGluIGV4cGVjdGVkXSkKLSAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQotICAgICAgICBjbWQucnVuKCkKLQotICAgICAgICBidWlsdCA9IG9zLmxpc3RkaXIodGFyZ2V0KQotICAgICAgICBmb3IgbmFtZSBpbiBleHBlY3RlZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuYW1lIGluIGJ1aWx0KQotCi0gICAgZGVmIGdldF9idWlsZF9zY3JpcHRzX2NtZChzZWxmLCB0YXJnZXQsIHNjcmlwdHMpOgotICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oKQotICAgICAgICBkaXN0LnNjcmlwdHMgPSBzY3JpcHRzCi0gICAgICAgIGRpc3QuY29tbWFuZF9vYmpbImJ1aWxkIl0gPSBzdXBwb3J0LkR1bW15Q29tbWFuZCgKLSAgICAgICAgICAgIGJ1aWxkX3NjcmlwdHM9dGFyZ2V0LAotICAgICAgICAgICAgZm9yY2U9MSwKLSAgICAgICAgICAgIGV4ZWN1dGFibGU9c3lzLmV4ZWN1dGFibGUKLSAgICAgICAgICAgICkKLSAgICAgICAgcmV0dXJuIGJ1aWxkX3NjcmlwdHMoZGlzdCkKLQotICAgIGRlZiB3cml0ZV9zYW1wbGVfc2NyaXB0cyhzZWxmLCBkaXIpOgotICAgICAgICBleHBlY3RlZCA9IFtdCi0gICAgICAgIGV4cGVjdGVkLmFwcGVuZCgic2NyaXB0MS5weSIpCi0gICAgICAgIHNlbGYud3JpdGVfc2NyaXB0KGRpciwgInNjcmlwdDEucHkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoIiMhIC91c3IvYmluL2VudiBweXRob24yLjNcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIjIGJvZ3VzIHNjcmlwdCB3LyBQeXRob24gc2gtYmFuZ1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhc3NcbiIpKQotICAgICAgICBleHBlY3RlZC5hcHBlbmQoInNjcmlwdDIucHkiKQotICAgICAgICBzZWxmLndyaXRlX3NjcmlwdChkaXIsICJzY3JpcHQyLnB5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKCIjIS91c3IvYmluL3B5dGhvblxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiMgYm9ndXMgc2NyaXB0IHcvIFB5dGhvbiBzaC1iYW5nXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicGFzc1xuIikpCi0gICAgICAgIGV4cGVjdGVkLmFwcGVuZCgic2hlbGwuc2giKQotICAgICAgICBzZWxmLndyaXRlX3NjcmlwdChkaXIsICJzaGVsbC5zaCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgiIyEvYmluL3NoXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiIyBib2d1cyBzaGVsbCBzY3JpcHQgdy8gc2gtYmFuZ1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4aXQgMFxuIikpCi0gICAgICAgIHJldHVybiBleHBlY3RlZAotCi0gICAgZGVmIHdyaXRlX3NjcmlwdChzZWxmLCBkaXIsIG5hbWUsIHRleHQpOgotICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oZGlyLCBuYW1lKSwgInciKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmLndyaXRlKHRleHQpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKLQotICAgIGRlZiB0ZXN0X3ZlcnNpb25faW50KHNlbGYpOgotICAgICAgICBzb3VyY2UgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICB0YXJnZXQgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBleHBlY3RlZCA9IHNlbGYud3JpdGVfc2FtcGxlX3NjcmlwdHMoc291cmNlKQotCi0KLSAgICAgICAgY21kID0gc2VsZi5nZXRfYnVpbGRfc2NyaXB0c19jbWQodGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3MucGF0aC5qb2luKHNvdXJjZSwgZm4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZm4gaW4gZXhwZWN0ZWRdKQotICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0KLSAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNDUyNAotICAgICAgICAjCi0gICAgICAgICMgT24gbGludXgtZysrLTMyIHdpdGggY29tbWFuZCBsaW5lIGAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1pcHY2Ci0gICAgICAgICMgLS13aXRoLXN1ZmZpeD0zYCwgcHl0aG9uIGlzIGNvbXBpbGVkIG9rYXkgYnV0IHRoZSBidWlsZCBzY3JpcHRzCi0gICAgICAgICMgZmFpbGVkIHdoZW4gd3JpdGluZyB0aGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZQotICAgICAgICBvbGQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KCdWRVJTSU9OJykKLSAgICAgICAgc3lzY29uZmlnLl9DT05GSUdfVkFSU1snVkVSU0lPTiddID0gNAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjbWQucnVuKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGlmIG9sZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzeXNjb25maWcuX0NPTkZJR19WQVJTWydWRVJTSU9OJ10gPSBvbGQKLQotICAgICAgICBidWlsdCA9IG9zLmxpc3RkaXIodGFyZ2V0KQotICAgICAgICBmb3IgbmFtZSBpbiBleHBlY3RlZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuYW1lIGluIGJ1aWx0KQotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQnVpbGRTY3JpcHRzVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY2NvbXBpbGVyLnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jY29tcGlsZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZTQ3N2EuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jY29tcGlsZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNjb21waWxlci4iIiIKLWltcG9ydCBvcwotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQKLQotZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCAoZ2VuX2xpYl9vcHRpb25zLCBDQ29tcGlsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfZGVmYXVsdF9jb21waWxlcikKLWZyb20gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbXBvcnQgY3VzdG9taXplX2NvbXBpbGVyCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgZGVidWcKLWZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Ci0KLWNsYXNzIEZha2VDb21waWxlcihvYmplY3QpOgotICAgIGRlZiBsaWJyYXJ5X2Rpcl9vcHRpb24oc2VsZiwgZGlyKToKLSAgICAgICAgcmV0dXJuICItTCIgKyBkaXIKLQotICAgIGRlZiBydW50aW1lX2xpYnJhcnlfZGlyX29wdGlvbihzZWxmLCBkaXIpOgotICAgICAgICByZXR1cm4gWyItY29vbCIsICItUiIgKyBkaXJdCi0KLSAgICBkZWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgZGlycywgbGliLCBkZWJ1Zz0wKToKLSAgICAgICAgcmV0dXJuICdmb3VuZCcKLQotICAgIGRlZiBsaWJyYXJ5X29wdGlvbihzZWxmLCBsaWIpOgotICAgICAgICByZXR1cm4gIi1sIiArIGxpYgotCi1jbGFzcyBDQ29tcGlsZXJUZXN0Q2FzZShzdXBwb3J0LkVudmlyb25HdWFyZCwgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfZ2VuX2xpYl9vcHRpb25zKHNlbGYpOgotICAgICAgICBjb21waWxlciA9IEZha2VDb21waWxlcigpCi0gICAgICAgIGxpYmRpcnMgPSBbJ2xpYjEnLCAnbGliMiddCi0gICAgICAgIHJ1bmxpYmRpcnMgPSBbJ3J1bmxpYjEnXQotICAgICAgICBsaWJzID0gW29zLnBhdGguam9pbignZGlyJywgJ25hbWUnKSwgJ25hbWUyJ10KLQotICAgICAgICBvcHRzID0gZ2VuX2xpYl9vcHRpb25zKGNvbXBpbGVyLCBsaWJkaXJzLCBydW5saWJkaXJzLCBsaWJzKQotICAgICAgICB3YW50ZWQgPSBbJy1MbGliMScsICctTGxpYjInLCAnLWNvb2wnLCAnLVJydW5saWIxJywgJ2ZvdW5kJywKLSAgICAgICAgICAgICAgICAgICctbG5hbWUyJ10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCB3YW50ZWQpCi0KLSAgICBkZWYgdGVzdF9kZWJ1Z19wcmludChzZWxmKToKLQotICAgICAgICBjbGFzcyBNeUNDb21waWxlcihDQ29tcGlsZXIpOgotICAgICAgICAgICAgZXhlY3V0YWJsZXMgPSB7fQotCi0gICAgICAgIGNvbXBpbGVyID0gTXlDQ29tcGlsZXIoKQotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIGNvbXBpbGVyLmRlYnVnX3ByaW50KCd4eHgnKQotICAgICAgICBzdGRvdXQuc2VlaygwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yZWFkKCksICcnKQotCi0gICAgICAgIGRlYnVnLkRFQlVHID0gVHJ1ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgICAgICBjb21waWxlci5kZWJ1Z19wcmludCgneHh4JykKLSAgICAgICAgICAgIHN0ZG91dC5zZWVrKDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yZWFkKCksICd4eHhcbicpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBkZWJ1Zy5ERUJVRyA9IEZhbHNlCi0KLSAgICBkZWYgdGVzdF9jdXN0b21pemVfY29tcGlsZXIoc2VsZik6Ci0KLSAgICAgICAgIyBub3QgdGVzdGluZyBpZiBkZWZhdWx0IGNvbXBpbGVyIGlzIG5vdCB1bml4Ci0gICAgICAgIGlmIGdldF9kZWZhdWx0X2NvbXBpbGVyKCkgIT0gJ3VuaXgnOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgb3MuZW52aXJvblsnQVInXSA9ICdteV9hcicKLSAgICAgICAgb3MuZW52aXJvblsnQVJGTEFHUyddID0gJy1hcmZsYWdzJwotCi0gICAgICAgICMgbWFrZSBzdXJlIEFSIGdldHMgY2F1Z2h0Ci0gICAgICAgIGNsYXNzIGNvbXBpbGVyOgotICAgICAgICAgICAgY29tcGlsZXJfdHlwZSA9ICd1bml4JwotCi0gICAgICAgICAgICBkZWYgc2V0X2V4ZWN1dGFibGVzKHNlbGYsICoqa3cpOgotICAgICAgICAgICAgICAgIHNlbGYuZXhlcyA9IGt3Ci0KLSAgICAgICAgY29tcCA9IGNvbXBpbGVyKCkKLSAgICAgICAgY3VzdG9taXplX2NvbXBpbGVyKGNvbXApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcC5leGVzWydhcmNoaXZlciddLCAnbXlfYXIgLWFyZmxhZ3MnKQotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQ0NvbXBpbGVyVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0idGVzdF9zdWl0ZSIpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NoZWNrLnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jaGVjay5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczMzQyYS4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NoZWNrLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLSMgLSotIGVuY29kaW5nOiB1dGY4IC0qLQotIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmNoZWNrLiIiIgotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLQotZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5jaGVjayBpbXBvcnQgY2hlY2ssIEhBU19ET0NVVElMUwotZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzU2V0dXBFcnJvcgotCi1jbGFzcyBDaGVja1Rlc3RDYXNlKHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAotICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAotICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgX3J1bihzZWxmLCBtZXRhZGF0YT1Ob25lLCAqKm9wdGlvbnMpOgotICAgICAgICBpZiBtZXRhZGF0YSBpcyBOb25lOgotICAgICAgICAgICAgbWV0YWRhdGEgPSB7fQotICAgICAgICBwa2dfaW5mbywgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKiptZXRhZGF0YSkKLSAgICAgICAgY21kID0gY2hlY2soZGlzdCkKLSAgICAgICAgY21kLmluaXRpYWxpemVfb3B0aW9ucygpCi0gICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBvcHRpb25zLml0ZW1zKCk6Ci0gICAgICAgICAgICBzZXRhdHRyKGNtZCwgbmFtZSwgdmFsdWUpCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLnJ1bigpCi0gICAgICAgIHJldHVybiBjbWQKLQotICAgIGRlZiB0ZXN0X2NoZWNrX21ldGFkYXRhKHNlbGYpOgotICAgICAgICAjIGxldCdzIHJ1biB0aGUgY29tbWFuZCB3aXRoIG5vIG1ldGFkYXRhIGF0IGFsbAotICAgICAgICAjIGJ5IGRlZmF1bHQsIGNoZWNrIGlzIGNoZWNraW5nIHRoZSBtZXRhZGF0YQotICAgICAgICAjIHNob3VsZCBoYXZlIHNvbWUgd2FybmluZ3MKLSAgICAgICAgY21kID0gc2VsZi5fcnVuKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuX3dhcm5pbmdzLCAyKQotCi0gICAgICAgICMgbm93IGxldCdzIGFkZCB0aGUgcmVxdWlyZWQgZmllbGRzCi0gICAgICAgICMgYW5kIHJ1biBpdCBhZ2FpbiwgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGdldAotICAgICAgICAjIGFueSB3YXJuaW5nIGFueW1vcmUKLSAgICAgICAgbWV0YWRhdGEgPSB7J3VybCc6ICd4eHgnLCAnYXV0aG9yJzogJ3h4eCcsCi0gICAgICAgICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAneHh4JywKLSAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAneHh4JywgJ3ZlcnNpb24nOiAneHh4J30KLSAgICAgICAgY21kID0gc2VsZi5fcnVuKG1ldGFkYXRhKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5fd2FybmluZ3MsIDApCi0KLSAgICAgICAgIyBub3cgd2l0aCB0aGUgc3RyaWN0IG1vZGUsIHdlIHNob3VsZAotICAgICAgICAjIGdldCBhbiBlcnJvciBpZiB0aGVyZSBhcmUgbWlzc2luZyBtZXRhZGF0YQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBzZWxmLl9ydW4sIHt9LCAqKnsnc3RyaWN0JzogMX0pCi0KLSAgICAgICAgIyBhbmQgb2YgY291cnNlLCBubyBlcnJvciB3aGVuIGFsbCBtZXRhZGF0YSBhcmUgcHJlc2VudAotICAgICAgICBjbWQgPSBzZWxmLl9ydW4obWV0YWRhdGEsIHN0cmljdD0xKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5fd2FybmluZ3MsIDApCi0KLSAgICAgICAgIyBub3cgYSB0ZXN0IHdpdGggVW5pY29kZSBlbnRyaWVzCi0gICAgICAgIG1ldGFkYXRhID0geyd1cmwnOiB1J3h4eCcsICdhdXRob3InOiB1J1x1MDBjOXJpYycsCi0gICAgICAgICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiB1J3h4eCcsIHUnbmFtZSc6ICd4eHgnLAotICAgICAgICAgICAgICAgICAgICAndmVyc2lvbic6IHUneHh4JywKLSAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogdSdTb21ldGhpbmcgYWJvdXQgZXNzemV0IFx1MDBkZicsCi0gICAgICAgICAgICAgICAgICAgICdsb25nX2Rlc2NyaXB0aW9uJzogdSdNb3JlIHRoaW5ncyBhYm91dCBlc3N6ZXQgXHUwMGRmJ30KLSAgICAgICAgY21kID0gc2VsZi5fcnVuKG1ldGFkYXRhKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5fd2FybmluZ3MsIDApCi0KLSAgICBkZWYgdGVzdF9jaGVja19kb2N1bWVudChzZWxmKToKLSAgICAgICAgaWYgbm90IEhBU19ET0NVVElMUzogIyB3b24ndCB0ZXN0IHdpdGhvdXQgZG9jdXRpbHMKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBwa2dfaW5mbywgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQotICAgICAgICBjbWQgPSBjaGVjayhkaXN0KQotCi0gICAgICAgICMgbGV0J3Mgc2VlIGlmIGl0IGRldGVjdHMgYnJva2VuIHJlc3QKLSAgICAgICAgYnJva2VuX3Jlc3QgPSAndGl0bGVcbj09PVxuXG50ZXN0JwotICAgICAgICBtc2dzID0gY21kLl9jaGVja19yc3RfZGF0YShicm9rZW5fcmVzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obXNncyksIDEpCi0KLSAgICAgICAgIyBhbmQgbm9uLWJyb2tlbiByZXN0Ci0gICAgICAgIHJlc3QgPSAndGl0bGVcbj09PT09XG5cbnRlc3QnCi0gICAgICAgIG1zZ3MgPSBjbWQuX2NoZWNrX3JzdF9kYXRhKHJlc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1zZ3MpLCAwKQotCi0gICAgZGVmIHRlc3RfY2hlY2tfcmVzdHJ1Y3R1cmVkdGV4dChzZWxmKToKLSAgICAgICAgaWYgbm90IEhBU19ET0NVVElMUzogIyB3b24ndCB0ZXN0IHdpdGhvdXQgZG9jdXRpbHMKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICAjIGxldCdzIHNlZSBpZiBpdCBkZXRlY3RzIGJyb2tlbiByZXN0IGluIGxvbmdfZGVzY3JpcHRpb24KLSAgICAgICAgYnJva2VuX3Jlc3QgPSAndGl0bGVcbj09PVxuXG50ZXN0JwotICAgICAgICBwa2dfaW5mbywgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QobG9uZ19kZXNjcmlwdGlvbj1icm9rZW5fcmVzdCkKLSAgICAgICAgY21kID0gY2hlY2soZGlzdCkKLSAgICAgICAgY21kLmNoZWNrX3Jlc3RydWN0dXJlZHRleHQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5fd2FybmluZ3MsIDEpCi0KLSAgICAgICAgIyBsZXQncyBzZWUgaWYgd2UgaGF2ZSBhbiBlcnJvciB3aXRoIHN0cmljdD0xCi0gICAgICAgIG1ldGFkYXRhID0geyd1cmwnOiAneHh4JywgJ2F1dGhvcic6ICd4eHgnLAotICAgICAgICAgICAgICAgICAgICAnYXV0aG9yX2VtYWlsJzogJ3h4eCcsCi0gICAgICAgICAgICAgICAgICAgICduYW1lJzogJ3h4eCcsICd2ZXJzaW9uJzogJ3h4eCcsCi0gICAgICAgICAgICAgICAgICAgICdsb25nX2Rlc2NyaXB0aW9uJzogYnJva2VuX3Jlc3R9Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsIHNlbGYuX3J1biwgbWV0YWRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICoqeydzdHJpY3QnOiAxLCAncmVzdHJ1Y3R1cmVkdGV4dCc6IDF9KQotCi0gICAgICAgICMgYW5kIG5vbi1icm9rZW4gcmVzdCwgaW5jbHVkaW5nIGEgbm9uLUFTQ0lJIGNoYXJhY3RlciB0byB0ZXN0ICMxMjExNAotICAgICAgICBtZXRhZGF0YVsnbG9uZ19kZXNjcmlwdGlvbiddID0gdSd0aXRsZVxuPT09PT1cblxudGVzdCBcdTAwZGYnCi0gICAgICAgIGNtZCA9IHNlbGYuX3J1bihtZXRhZGF0YSwgc3RyaWN0PTEsIHJlc3RydWN0dXJlZHRleHQ9MSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuX3dhcm5pbmdzLCAwKQotCi0gICAgZGVmIHRlc3RfY2hlY2tfYWxsKHNlbGYpOgotCi0gICAgICAgIG1ldGFkYXRhID0geyd1cmwnOiAneHh4JywgJ2F1dGhvcic6ICd4eHgnfQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBzZWxmLl9ydW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHt9LCAqKnsnc3RyaWN0JzogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXN0cnVjdHVyZWR0ZXh0JzogMX0pCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShDaGVja1Rlc3RDYXNlKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NsZWFuLnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jbGVhbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I5ODhmNy4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NsZWFuLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmNsZWFuLiIiIgotaW1wb3J0IHN5cwotaW1wb3J0IG9zCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBnZXRwYXNzCi0KLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQuY2xlYW4gaW1wb3J0IGNsZWFuCi1mcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0KLWNsYXNzIGNsZWFuVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKLSAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCi0gICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X3NpbXBsZV9ydW4oc2VsZik6Ci0gICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKLSAgICAgICAgY21kID0gY2xlYW4oZGlzdCkKLQotICAgICAgICAjIGxldCdzIGFkZCBzb21lIGVsZW1lbnRzIGNsZWFuIHNob3VsZCByZW1vdmUKLSAgICAgICAgZGlycyA9IFsoZCwgb3MucGF0aC5qb2luKHBrZ19kaXIsIGQpKQotICAgICAgICAgICAgICAgIGZvciBkIGluICgnYnVpbGRfdGVtcCcsICdidWlsZF9saWInLCAnYmRpc3RfYmFzZScsCi0gICAgICAgICAgICAgICAgJ2J1aWxkX3NjcmlwdHMnLCAnYnVpbGRfYmFzZScpXQotCi0gICAgICAgIGZvciBuYW1lLCBwYXRoIGluIGRpcnM6Ci0gICAgICAgICAgICBvcy5ta2RpcihwYXRoKQotICAgICAgICAgICAgc2V0YXR0cihjbWQsIG5hbWUsIHBhdGgpCi0gICAgICAgICAgICBpZiBuYW1lID09ICdidWlsZF9iYXNlJzoKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZm9yIGYgaW4gKCdvbmUnLCAndHdvJywgJ3RocmVlJyk6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZV9maWxlKG9zLnBhdGguam9pbihwYXRoLCBmKSkKLQotICAgICAgICAjIGxldCdzIHJ1biB0aGUgY29tbWFuZAotICAgICAgICBjbWQuYWxsID0gMQotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIGNtZC5ydW4oKQotCi0gICAgICAgICMgbWFrZSBzdXJlIHRoZSBmaWxlcyB3aGVyZSByZW1vdmVkCi0gICAgICAgIGZvciBuYW1lLCBwYXRoIGluIGRpcnM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHBhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICclcyB3YXMgbm90IHJlbW92ZWQnICUgcGF0aCkKLQotICAgICAgICAjIGxldCdzIHJ1biB0aGUgY29tbWFuZCBhZ2FpbiAoc2hvdWxkIHNwaXQgd2FybmluZ3MgYnV0IHN1Y2NlZWQpCi0gICAgICAgIGNtZC5hbGwgPSAxCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLnJ1bigpCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShjbGVhblRlc3RDYXNlKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NtZC5weSBiL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY21kLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDc0MDk5Li4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY21kLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLSIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY21kLiIiIgotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgb3MKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZG91dCwgcnVuX3VuaXR0ZXN0Ci0KLWZyb20gZGlzdHV0aWxzLmNtZCBpbXBvcnQgQ29tbWFuZAotZnJvbSBkaXN0dXRpbHMuZGlzdCBpbXBvcnQgRGlzdHJpYnV0aW9uCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc09wdGlvbkVycm9yCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgZGVidWcKLQotY2xhc3MgTXlDbWQoQ29tbWFuZCk6Ci0gICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgcGFzcwotCi1jbGFzcyBDb21tYW5kVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKLSAgICAgICAgc2VsZi5jbWQgPSBNeUNtZChkaXN0KQotCi0gICAgZGVmIHRlc3RfZW5zdXJlX3N0cmluZ19saXN0KHNlbGYpOgotCi0gICAgICAgIGNtZCA9IHNlbGYuY21kCi0gICAgICAgIGNtZC5ub3Rfc3RyaW5nX2xpc3QgPSBbJ29uZScsIDIsICd0aHJlZSddCi0gICAgICAgIGNtZC55ZXNfc3RyaW5nX2xpc3QgPSBbJ29uZScsICd0d28nLCAndGhyZWUnXQotICAgICAgICBjbWQubm90X3N0cmluZ19saXN0MiA9IG9iamVjdCgpCi0gICAgICAgIGNtZC55ZXNfc3RyaW5nX2xpc3QyID0gJ29rJwotICAgICAgICBjbWQuZW5zdXJlX3N0cmluZ19saXN0KCd5ZXNfc3RyaW5nX2xpc3QnKQotICAgICAgICBjbWQuZW5zdXJlX3N0cmluZ19saXN0KCd5ZXNfc3RyaW5nX2xpc3QyJykKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNPcHRpb25FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLmVuc3VyZV9zdHJpbmdfbGlzdCwgJ25vdF9zdHJpbmdfbGlzdCcpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzT3B0aW9uRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC5lbnN1cmVfc3RyaW5nX2xpc3QsICdub3Rfc3RyaW5nX2xpc3QyJykKLQotICAgIGRlZiB0ZXN0X21ha2VfZmlsZShzZWxmKToKLQotICAgICAgICBjbWQgPSBzZWxmLmNtZAotCi0gICAgICAgICMgbWFraW5nIHN1cmUgaXQgcmFpc2VzIHdoZW4gaW5maWxlcyBpcyBub3QgYSBzdHJpbmcgb3IgYSBsaXN0L3R1cGxlCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY21kLm1ha2VfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW5maWxlcz0xLCBvdXRmaWxlPScnLCBmdW5jPSdmdW5jJywgYXJncz0oKSkKLQotICAgICAgICAjIG1ha2luZyBzdXJlIGV4ZWN1dGUgZ2V0cyBjYWxsZWQgcHJvcGVybHkKLSAgICAgICAgZGVmIF9leGVjdXRlKGZ1bmMsIGFyZ3MsIGV4ZWNfbXNnLCBsZXZlbCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4ZWNfbXNnLCAnZ2VuZXJhdGluZyBvdXQgZnJvbSBpbicpCi0gICAgICAgIGNtZC5mb3JjZSA9IFRydWUKLSAgICAgICAgY21kLmV4ZWN1dGUgPSBfZXhlY3V0ZQotICAgICAgICBjbWQubWFrZV9maWxlKGluZmlsZXM9J2luJywgb3V0ZmlsZT0nb3V0JywgZnVuYz0nZnVuYycsIGFyZ3M9KCkpCi0KLSAgICBkZWYgdGVzdF9kdW1wX29wdGlvbnMoc2VsZik6Ci0KLSAgICAgICAgbXNncyA9IFtdCi0gICAgICAgIGRlZiBfYW5ub3VuY2UobXNnLCBsZXZlbCk6Ci0gICAgICAgICAgICBtc2dzLmFwcGVuZChtc2cpCi0gICAgICAgIGNtZCA9IHNlbGYuY21kCi0gICAgICAgIGNtZC5hbm5vdW5jZSA9IF9hbm5vdW5jZQotICAgICAgICBjbWQub3B0aW9uMSA9IDEKLSAgICAgICAgY21kLm9wdGlvbjIgPSAxCi0gICAgICAgIGNtZC51c2VyX29wdGlvbnMgPSBbKCdvcHRpb24xJywgJycsICcnKSwgKCdvcHRpb24yJywgJycsICcnKV0KLSAgICAgICAgY21kLmR1bXBfb3B0aW9ucygpCi0KLSAgICAgICAgd2FudGVkID0gWyJjb21tYW5kIG9wdGlvbnMgZm9yICdNeUNtZCc6IiwgJyAgb3B0aW9uMSA9IDEnLAotICAgICAgICAgICAgICAgICAgJyAgb3B0aW9uMiA9IDEnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ3MsIHdhbnRlZCkKLQotICAgIGRlZiB0ZXN0X2Vuc3VyZV9zdHJpbmcoc2VsZik6Ci0gICAgICAgIGNtZCA9IHNlbGYuY21kCi0gICAgICAgIGNtZC5vcHRpb24xID0gJ29rJwotICAgICAgICBjbWQuZW5zdXJlX3N0cmluZygnb3B0aW9uMScpCi0KLSAgICAgICAgY21kLm9wdGlvbjIgPSBOb25lCi0gICAgICAgIGNtZC5lbnN1cmVfc3RyaW5nKCdvcHRpb24yJywgJ3h4eCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGNtZCwgJ29wdGlvbjInKSkKLQotICAgICAgICBjbWQub3B0aW9uMyA9IDEKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzT3B0aW9uRXJyb3IsIGNtZC5lbnN1cmVfc3RyaW5nLCAnb3B0aW9uMycpCi0KLSAgICBkZWYgdGVzdF9lbnN1cmVfc3RyaW5nX2xpc3Qoc2VsZik6Ci0gICAgICAgIGNtZCA9IHNlbGYuY21kCi0gICAgICAgIGNtZC5vcHRpb24xID0gJ29rLGRvaycKLSAgICAgICAgY21kLmVuc3VyZV9zdHJpbmdfbGlzdCgnb3B0aW9uMScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLm9wdGlvbjEsIFsnb2snLCAnZG9rJ10pCi0KLSAgICAgICAgY21kLm9wdGlvbjIgPSBbJ3h4eCcsICd3d3cnXQotICAgICAgICBjbWQuZW5zdXJlX3N0cmluZ19saXN0KCdvcHRpb24yJykKLQotICAgICAgICBjbWQub3B0aW9uMyA9IFsnb2snLCAyXQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNPcHRpb25FcnJvciwgY21kLmVuc3VyZV9zdHJpbmdfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbjMnKQotCi0gICAgZGVmIHRlc3RfZW5zdXJlX2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICBjbWQgPSBzZWxmLmNtZAotICAgICAgICBjbWQub3B0aW9uMSA9IF9fZmlsZV9fCi0gICAgICAgIGNtZC5lbnN1cmVfZmlsZW5hbWUoJ29wdGlvbjEnKQotICAgICAgICBjbWQub3B0aW9uMiA9ICd4eHgnCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc09wdGlvbkVycm9yLCBjbWQuZW5zdXJlX2ZpbGVuYW1lLCAnb3B0aW9uMicpCi0KLSAgICBkZWYgdGVzdF9lbnN1cmVfZGlybmFtZShzZWxmKToKLSAgICAgICAgY21kID0gc2VsZi5jbWQKLSAgICAgICAgY21kLm9wdGlvbjEgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpcgotICAgICAgICBjbWQuZW5zdXJlX2Rpcm5hbWUoJ29wdGlvbjEnKQotICAgICAgICBjbWQub3B0aW9uMiA9ICd4eHgnCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc09wdGlvbkVycm9yLCBjbWQuZW5zdXJlX2Rpcm5hbWUsICdvcHRpb24yJykKLQotICAgIGRlZiB0ZXN0X2RlYnVnX3ByaW50KHNlbGYpOgotICAgICAgICBjbWQgPSBzZWxmLmNtZAotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIGNtZC5kZWJ1Z19wcmludCgneHh4JykKLSAgICAgICAgc3Rkb3V0LnNlZWsoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucmVhZCgpLCAnJykKLQotICAgICAgICBkZWJ1Zy5ERUJVRyA9IFRydWUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICAgICAgY21kLmRlYnVnX3ByaW50KCd4eHgnKQotICAgICAgICAgICAgc3Rkb3V0LnNlZWsoMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJlYWQoKSwgJ3h4eFxuJykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGRlYnVnLkRFQlVHID0gRmFsc2UKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKENvbW1hbmRUZXN0Q2FzZSkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWcucHkgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZkMDk2ZS4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLnB5cGlyYy5weXBpcmMuIiIiCi1pbXBvcnQgc3lzCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgc2h1dGlsCi0KLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IFB5UElSQ0NvbW1hbmQKLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgotZnJvbSBkaXN0dXRpbHMubG9nIGltcG9ydCBzZXRfdGhyZXNob2xkCi1mcm9tIGRpc3R1dGlscy5sb2cgaW1wb3J0IFdBUk4KLQotZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotCi1QWVBJUkMgPSAiIiJcCi1bZGlzdHV0aWxzXQotCi1pbmRleC1zZXJ2ZXJzID0KLSAgICBzZXJ2ZXIxCi0gICAgc2VydmVyMgotCi1bc2VydmVyMV0KLXVzZXJuYW1lOm1lCi1wYXNzd29yZDpzZWNyZXQKLQotW3NlcnZlcjJdCi11c2VybmFtZTptZWFnYWluCi1wYXNzd29yZDogc2VjcmV0Ci1yZWFsbTphY21lCi1yZXBvc2l0b3J5Omh0dHA6Ly9hbm90aGVyLnB5cGkvCi0iIiIKLQotUFlQSVJDX09MRCA9ICIiIlwKLVtzZXJ2ZXItbG9naW5dCi11c2VybmFtZTp0YXJlawotcGFzc3dvcmQ6c2VjcmV0Ci0iIiIKLQotV0FOVEVEID0gIiIiXAotW2Rpc3R1dGlsc10KLWluZGV4LXNlcnZlcnMgPQotICAgIHB5cGkKLQotW3B5cGldCi11c2VybmFtZTp0YXJlawotcGFzc3dvcmQ6eHh4Ci0iIiIKLQotCi1jbGFzcyBQeVBJUkNDb21tYW5kVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkVudmlyb25HdWFyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgICIiIlBhdGNoZXMgdGhlIGVudmlyb25tZW50LiIiIgotICAgICAgICBzdXBlcihQeVBJUkNDb21tYW5kVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKLSAgICAgICAgc2VsZi50bXBfZGlyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgb3MuZW52aXJvblsnSE9NRSddID0gc2VsZi50bXBfZGlyCi0gICAgICAgIHNlbGYucmMgPSBvcy5wYXRoLmpvaW4oc2VsZi50bXBfZGlyLCAnLnB5cGlyYycpCi0gICAgICAgIHNlbGYuZGlzdCA9IERpc3RyaWJ1dGlvbigpCi0KLSAgICAgICAgY2xhc3MgY29tbWFuZChQeVBJUkNDb21tYW5kKToKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXN0KToKLSAgICAgICAgICAgICAgICBQeVBJUkNDb21tYW5kLl9faW5pdF9fKHNlbGYsIGRpc3QpCi0gICAgICAgICAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGZpbmFsaXplX29wdGlvbnMgPSBpbml0aWFsaXplX29wdGlvbnMKLQotICAgICAgICBzZWxmLl9jbWQgPSBjb21tYW5kCi0gICAgICAgIHNlbGYub2xkX3RocmVzaG9sZCA9IHNldF90aHJlc2hvbGQoV0FSTikKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgIiIiUmVtb3ZlcyB0aGUgcGF0Y2guIiIiCi0gICAgICAgIHNldF90aHJlc2hvbGQoc2VsZi5vbGRfdGhyZXNob2xkKQotICAgICAgICBzdXBlcihQeVBJUkNDb21tYW5kVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKLQotICAgIGRlZiB0ZXN0X3NlcnZlcl9yZWdpc3RyYXRpb24oc2VsZik6Ci0gICAgICAgICMgVGhpcyB0ZXN0IG1ha2VzIHN1cmUgUHlQSVJDQ29tbWFuZCBrbm93cyBob3cgdG86Ci0gICAgICAgICMgMS4gaGFuZGxlIHNldmVyYWwgc2VjdGlvbnMgaW4gLnB5cGlyYwotICAgICAgICAjIDIuIGhhbmRsZSB0aGUgb2xkIGZvcm1hdAotCi0gICAgICAgICMgbmV3IGZvcm1hdAotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoc2VsZi5yYywgUFlQSVJDKQotICAgICAgICBjbWQgPSBzZWxmLl9jbWQoc2VsZi5kaXN0KQotICAgICAgICBjb25maWcgPSBjbWQuX3JlYWRfcHlwaXJjKCkKLQotICAgICAgICBjb25maWcgPSBjb25maWcuaXRlbXMoKQotICAgICAgICBjb25maWcuc29ydCgpCi0gICAgICAgIHdhaXRlZCA9IFsoJ3Bhc3N3b3JkJywgJ3NlY3JldCcpLCAoJ3JlYWxtJywgJ3B5cGknKSwKLSAgICAgICAgICAgICAgICAgICgncmVwb3NpdG9yeScsICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGknKSwKLSAgICAgICAgICAgICAgICAgICgnc2VydmVyJywgJ3NlcnZlcjEnKSwgKCd1c2VybmFtZScsICdtZScpXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbmZpZywgd2FpdGVkKQotCi0gICAgICAgICMgb2xkIGZvcm1hdAotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoc2VsZi5yYywgUFlQSVJDX09MRCkKLSAgICAgICAgY29uZmlnID0gY21kLl9yZWFkX3B5cGlyYygpCi0gICAgICAgIGNvbmZpZyA9IGNvbmZpZy5pdGVtcygpCi0gICAgICAgIGNvbmZpZy5zb3J0KCkKLSAgICAgICAgd2FpdGVkID0gWygncGFzc3dvcmQnLCAnc2VjcmV0JyksICgncmVhbG0nLCAncHlwaScpLAotICAgICAgICAgICAgICAgICAgKCdyZXBvc2l0b3J5JywgJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpLAotICAgICAgICAgICAgICAgICAgKCdzZXJ2ZXInLCAnc2VydmVyLWxvZ2luJyksICgndXNlcm5hbWUnLCAndGFyZWsnKV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25maWcsIHdhaXRlZCkKLQotICAgIGRlZiB0ZXN0X3NlcnZlcl9lbXB0eV9yZWdpc3RyYXRpb24oc2VsZik6Ci0gICAgICAgIGNtZCA9IHNlbGYuX2NtZChzZWxmLmRpc3QpCi0gICAgICAgIHJjID0gY21kLl9nZXRfcmNfZmlsZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMocmMpKQotICAgICAgICBjbWQuX3N0b3JlX3B5cGlyYygndGFyZWsnLCAneHh4JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJjKSkKLSAgICAgICAgZiA9IG9wZW4ocmMpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvbnRlbnQgPSBmLnJlYWQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50LCBXQU5URUQpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFB5UElSQ0NvbW1hbmRUZXN0Q2FzZSkKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWdfY21kLnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWdfY21kLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTZjOGVlLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnX2NtZC5weQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLSIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5jb25maWcuIiIiCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0KLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQuY29uZmlnIGltcG9ydCBkdW1wX2ZpbGUsIGNvbmZpZwotZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLWZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKLQotY2xhc3MgQ29uZmlnVGVzdENhc2Uoc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCi0gICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAotICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIF9pbmZvKHNlbGYsIG1zZywgKmFyZ3MpOgotICAgICAgICBmb3IgbGluZSBpbiBtc2cuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgc2VsZi5fbG9ncy5hcHBlbmQobGluZSkKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwZXIoQ29uZmlnVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKLSAgICAgICAgc2VsZi5fbG9ncyA9IFtdCi0gICAgICAgIHNlbGYub2xkX2xvZyA9IGxvZy5pbmZvCi0gICAgICAgIGxvZy5pbmZvID0gc2VsZi5faW5mbwotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBsb2cuaW5mbyA9IHNlbGYub2xkX2xvZwotICAgICAgICBzdXBlcihDb25maWdUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQotCi0gICAgZGVmIHRlc3RfZHVtcF9maWxlKHNlbGYpOgotICAgICAgICB0aGlzX2ZpbGUgPSBvcy5wYXRoLnNwbGl0ZXh0KF9fZmlsZV9fKVswXSArICcucHknCi0gICAgICAgIGYgPSBvcGVuKHRoaXNfZmlsZSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbnVtbGluZXMgPSBsZW4oZi5yZWFkbGluZXMoKSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgICAgIGR1bXBfZmlsZSh0aGlzX2ZpbGUsICdJIGFtIHRoZSBoZWFkZXInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9sb2dzKSwgbnVtbGluZXMrMSkKLQotICAgIGRlZiB0ZXN0X3NlYXJjaF9jcHAoc2VsZik6Ci0gICAgICAgICMgVE9ETzogbWluZ3cgaG9zdCA/Ci0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKLSAgICAgICAgY21kID0gY29uZmlnKGRpc3QpCi0KLSAgICAgICAgIyBzaW1wbGUgcGF0dGVybiBzZWFyY2hlcwotICAgICAgICBtYXRjaCA9IGNtZC5zZWFyY2hfY3BwKHBhdHRlcm49J3h4eCcsIGJvZHk9Jy8qIHh4eCAqLycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0Y2gsIDApCi0KLSAgICAgICAgbWF0Y2ggPSBjbWQuc2VhcmNoX2NwcChwYXR0ZXJuPSdfY29uZmlndGVzdCcsIGJvZHk9Jy8qIHh4eCAqLycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0Y2gsIDEpCi0KLSAgICBkZWYgdGVzdF9maW5hbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICAjIGZpbmFsaXplX29wdGlvbnMgZG9lcyBhIGJpdCBvZiB0cmFuc2Zvcm1hdGlvbgotICAgICAgICAjIG9uIG9wdGlvbnMKLSAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQotICAgICAgICBjbWQgPSBjb25maWcoZGlzdCkKLSAgICAgICAgY21kLmluY2x1ZGVfZGlycyA9ICdvbmUlc3R3bycgJSBvcy5wYXRoc2VwCi0gICAgICAgIGNtZC5saWJyYXJpZXMgPSAnb25lJwotICAgICAgICBjbWQubGlicmFyeV9kaXJzID0gJ3RocmVlJXNmb3VyJyAlIG9zLnBhdGhzZXAKLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmluY2x1ZGVfZGlycywgWydvbmUnLCAndHdvJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmxpYnJhcmllcywgWydvbmUnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQubGlicmFyeV9kaXJzLCBbJ3RocmVlJywgJ2ZvdXInXSkKLQotICAgIGRlZiB0ZXN0X2NsZWFuKHNlbGYpOgotICAgICAgICAjIF9jbGVhbiByZW1vdmVzIGZpbGVzCi0gICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBmMSA9IG9zLnBhdGguam9pbih0bXBfZGlyLCAnb25lJykKLSAgICAgICAgZjIgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ3R3bycpCi0KLSAgICAgICAgc2VsZi53cml0ZV9maWxlKGYxLCAneHh4JykKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKGYyLCAneHh4JykKLQotICAgICAgICBmb3IgZiBpbiAoZjEsIGYyKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmKSkKLQotICAgICAgICBwa2dfZGlyLCBkaXN0ID0gc2VsZi5jcmVhdGVfZGlzdCgpCi0gICAgICAgIGNtZCA9IGNvbmZpZyhkaXN0KQotICAgICAgICBjbWQuX2NsZWFuKGYxLCBmMikKLQotICAgICAgICBmb3IgZiBpbiAoZjEsIGYyKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoZikpCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShDb25maWdUZXN0Q2FzZSkKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb3JlLnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb3JlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDk3OWJjLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29yZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvcmUuIiIiCi0KLWltcG9ydCBTdHJpbmdJTwotaW1wb3J0IGRpc3R1dGlscy5jb3JlCi1pbXBvcnQgb3MKLWltcG9ydCBzaHV0aWwKLWltcG9ydCBzeXMKLWltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0LCBydW5fdW5pdHRlc3QKLWltcG9ydCB1bml0dGVzdAotZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLQotIyBzZXR1cCBzY3JpcHQgdGhhdCB1c2VzIF9fZmlsZV9fCi1zZXR1cF91c2luZ19fX2ZpbGVfXyA9ICIiIlwKLQotX19maWxlX18KLQotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAKLXNldHVwKCkKLSIiIgotCi1zZXR1cF9wcmludHNfY3dkID0gIiIiXAotCi1pbXBvcnQgb3MKLXByaW50IG9zLmdldGN3ZCgpCi0KLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCi1zZXR1cCgpCi0iIiIKLQotCi1jbGFzcyBDb3JlVGVzdENhc2Uoc3VwcG9ydC5FbnZpcm9uR3VhcmQsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwZXIoQ29yZVRlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCi0gICAgICAgIHNlbGYub2xkX3N0ZG91dCA9IHN5cy5zdGRvdXQKLSAgICAgICAgc2VsZi5jbGVhbnVwX3Rlc3RmbigpCi0gICAgICAgIHNlbGYub2xkX2FyZ3YgPSBzeXMuYXJndiwgc3lzLmFyZ3ZbOl0KLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYub2xkX3N0ZG91dAotICAgICAgICBzZWxmLmNsZWFudXBfdGVzdGZuKCkKLSAgICAgICAgc3lzLmFyZ3YgPSBzZWxmLm9sZF9hcmd2WzBdCi0gICAgICAgIHN5cy5hcmd2WzpdID0gc2VsZi5vbGRfYXJndlsxXQotICAgICAgICBzdXBlcihDb3JlVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKLQotICAgIGRlZiBjbGVhbnVwX3Rlc3RmbihzZWxmKToKLSAgICAgICAgcGF0aCA9IHRlc3QudGVzdF9zdXBwb3J0LlRFU1RGTgotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKToKLSAgICAgICAgICAgIG9zLnJlbW92ZShwYXRoKQotICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIocGF0aCk6Ci0gICAgICAgICAgICBzaHV0aWwucm10cmVlKHBhdGgpCi0KLSAgICBkZWYgd3JpdGVfc2V0dXAoc2VsZiwgdGV4dCwgcGF0aD10ZXN0LnRlc3Rfc3VwcG9ydC5URVNURk4pOgotICAgICAgICBmID0gb3BlbihwYXRoLCAidyIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICByZXR1cm4gcGF0aAotCi0gICAgZGVmIHRlc3RfcnVuX3NldHVwX3Byb3ZpZGVzX2ZpbGUoc2VsZik6Ci0gICAgICAgICMgTWFrZSBzdXJlIHRoZSBzY3JpcHQgY2FuIHVzZSBfX2ZpbGVfXzsgaWYgdGhhdCdzIG1pc3NpbmcsIHRoZSB0ZXN0Ci0gICAgICAgICMgc2V0dXAucHkgc2NyaXB0IHdpbGwgcmFpc2UgTmFtZUVycm9yLgotICAgICAgICBkaXN0dXRpbHMuY29yZS5ydW5fc2V0dXAoCi0gICAgICAgICAgICBzZWxmLndyaXRlX3NldHVwKHNldHVwX3VzaW5nX19fZmlsZV9fKSkKLQotICAgIGRlZiB0ZXN0X3J1bl9zZXR1cF91c2VzX2N1cnJlbnRfZGlyKHNlbGYpOgotICAgICAgICAjIFRoaXMgdGVzdHMgdGhhdCB0aGUgc2V0dXAgc2NyaXB0IGlzIHJ1biB3aXRoIHRoZSBjdXJyZW50IGRpcmVjdG9yeQotICAgICAgICAjIGFzIGl0cyBvd24gY3VycmVudCBkaXJlY3Rvcnk7IHRoaXMgd2FzIHRlbXBvcmFyaWx5IGJyb2tlbiBieSBhCi0gICAgICAgICMgcHJldmlvdXMgcGF0Y2ggd2hlbiBURVNURk4gZGlkIG5vdCB1c2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotICAgICAgICBzeXMuc3Rkb3V0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQotCi0gICAgICAgICMgQ3JlYXRlIGEgZGlyZWN0b3J5IGFuZCB3cml0ZSB0aGUgc2V0dXAucHkgZmlsZSB0aGVyZToKLSAgICAgICAgb3MubWtkaXIodGVzdC50ZXN0X3N1cHBvcnQuVEVTVEZOKQotICAgICAgICBzZXR1cF9weSA9IG9zLnBhdGguam9pbih0ZXN0LnRlc3Rfc3VwcG9ydC5URVNURk4sICJzZXR1cC5weSIpCi0gICAgICAgIGRpc3R1dGlscy5jb3JlLnJ1bl9zZXR1cCgKLSAgICAgICAgICAgIHNlbGYud3JpdGVfc2V0dXAoc2V0dXBfcHJpbnRzX2N3ZCwgcGF0aD1zZXR1cF9weSkpCi0KLSAgICAgICAgb3V0cHV0ID0gc3lzLnN0ZG91dC5nZXR2YWx1ZSgpCi0gICAgICAgIGlmIG91dHB1dC5lbmRzd2l0aCgiXG4iKToKLSAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dFs6LTFdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3dkLCBvdXRwdXQpCi0KLSAgICBkZWYgdGVzdF9kZWJ1Z19tb2RlKHNlbGYpOgotICAgICAgICAjIHRoaXMgY292ZXJzIHRoZSBjb2RlIGNhbGxlZCB3aGVuIERFQlVHIGlzIHNldAotICAgICAgICBzeXMuYXJndiA9IFsnc2V0dXAucHknLCAnLS1uYW1lJ10KLSAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICBkaXN0dXRpbHMuY29yZS5zZXR1cChuYW1lPSdiYXInKQotICAgICAgICBzdGRvdXQuc2VlaygwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yZWFkKCksICdiYXJcbicpCi0KLSAgICAgICAgZGlzdHV0aWxzLmNvcmUuREVCVUcgPSBUcnVlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgICAgIGRpc3R1dGlscy5jb3JlLnNldHVwKG5hbWU9J2JhcicpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBkaXN0dXRpbHMuY29yZS5ERUJVRyA9IEZhbHNlCi0gICAgICAgIHN0ZG91dC5zZWVrKDApCi0gICAgICAgIHdhbnRlZCA9ICJvcHRpb25zIChhZnRlciBwYXJzaW5nIGNvbmZpZyBmaWxlcyk6XG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJlYWRsaW5lcygpWzBdLCB3YW50ZWQpCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShDb3JlVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGVwX3V0aWwucHkgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2RlcF91dGlsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTEwNDM0Li4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGVwX3V0aWwucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmRlcF91dGlsLiIiIgotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgb3MKLWltcG9ydCB0aW1lCi0KLWZyb20gZGlzdHV0aWxzLmRlcF91dGlsIGltcG9ydCBuZXdlciwgbmV3ZXJfcGFpcndpc2UsIG5ld2VyX2dyb3VwCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0ZpbGVFcnJvcgotZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotCi1jbGFzcyBEZXBVdGlsVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfbmV3ZXIoc2VsZik6Ci0KLSAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgbmV3X2ZpbGUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnbmV3JykKLSAgICAgICAgb2xkX2ZpbGUgPSBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pCi0KLSAgICAgICAgIyBSYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IgaWYgJ25ld19maWxlJyBkb2VzIG5vdCBleGlzdC4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzRmlsZUVycm9yLCBuZXdlciwgbmV3X2ZpbGUsIG9sZF9maWxlKQotCi0gICAgICAgICMgUmV0dXJuIHRydWUgaWYgJ25ld19maWxlJyBleGlzdHMgYW5kIGlzIG1vcmUgcmVjZW50bHkgbW9kaWZpZWQgdGhhbgotICAgICAgICAjICdvbGRfZmlsZScsIG9yIGlmICduZXdfZmlsZScgZXhpc3RzIGFuZCAnb2xkX2ZpbGUnIGRvZXNuJ3QuCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZShuZXdfZmlsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5ld2VyKG5ld19maWxlLCAnSV9kb250X2V4aXN0JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdlcihuZXdfZmlsZSwgb2xkX2ZpbGUpKQotCi0gICAgICAgICMgUmV0dXJuIGZhbHNlIGlmIGJvdGggZXhpc3QgYW5kICdvbGRfZmlsZScgaXMgdGhlIHNhbWUgYWdlIG9yIHlvdW5nZXIKLSAgICAgICAgIyB0aGFuICduZXdfZmlsZScuCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobmV3ZXIob2xkX2ZpbGUsIG5ld19maWxlKSkKLQotICAgIGRlZiB0ZXN0X25ld2VyX3BhaXJ3aXNlKHNlbGYpOgotICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBzb3VyY2VzID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ3NvdXJjZXMnKQotICAgICAgICB0YXJnZXRzID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ3RhcmdldHMnKQotICAgICAgICBvcy5ta2Rpcihzb3VyY2VzKQotICAgICAgICBvcy5ta2Rpcih0YXJnZXRzKQotICAgICAgICBvbmUgPSBvcy5wYXRoLmpvaW4oc291cmNlcywgJ29uZScpCi0gICAgICAgIHR3byA9IG9zLnBhdGguam9pbihzb3VyY2VzLCAndHdvJykKLSAgICAgICAgdGhyZWUgPSBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pICAgICMgSSBhbSB0aGUgb2xkIGZpbGUKLSAgICAgICAgZm91ciA9IG9zLnBhdGguam9pbih0YXJnZXRzLCAnZm91cicpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZShvbmUpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZSh0d28pCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZShmb3VyKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3ZXJfcGFpcndpc2UoW29uZSwgdHdvXSwgW3RocmVlLCBmb3VyXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKFtvbmVdLFt0aHJlZV0pKQotCi0gICAgZGVmIHRlc3RfbmV3ZXJfZ3JvdXAoc2VsZik6Ci0gICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIHNvdXJjZXMgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnc291cmNlcycpCi0gICAgICAgIG9zLm1rZGlyKHNvdXJjZXMpCi0gICAgICAgIG9uZSA9IG9zLnBhdGguam9pbihzb3VyY2VzLCAnb25lJykKLSAgICAgICAgdHdvID0gb3MucGF0aC5qb2luKHNvdXJjZXMsICd0d28nKQotICAgICAgICB0aHJlZSA9IG9zLnBhdGguam9pbihzb3VyY2VzLCAndGhyZWUnKQotICAgICAgICBvbGRfZmlsZSA9IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykKLQotICAgICAgICAjIHJldHVybiB0cnVlIGlmICdvbGRfZmlsZScgaXMgb3V0LW9mLWRhdGUgd2l0aCByZXNwZWN0IHRvIGFueSBmaWxlCi0gICAgICAgICMgbGlzdGVkIGluICdzb3VyY2VzJy4KLSAgICAgICAgc2VsZi53cml0ZV9maWxlKG9uZSkKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKHR3bykKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKHRocmVlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3ZXJfZ3JvdXAoW29uZSwgdHdvLCB0aHJlZV0sIG9sZF9maWxlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuZXdlcl9ncm91cChbb25lLCB0d28sIG9sZF9maWxlXSwgdGhyZWUpKQotCi0gICAgICAgICMgbWlzc2luZyBoYW5kbGluZwotICAgICAgICBvcy5yZW1vdmUob25lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBuZXdlcl9ncm91cCwgW29uZSwgdHdvLCBvbGRfZmlsZV0sIHRocmVlKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobmV3ZXJfZ3JvdXAoW29uZSwgdHdvLCBvbGRfZmlsZV0sIHRocmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3Npbmc9J2lnbm9yZScpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdlcl9ncm91cChbb25lLCB0d28sIG9sZF9maWxlXSwgdGhyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nPSduZXdlcicpKQotCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShEZXBVdGlsVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlyX3V0aWwucHkgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpcl91dGlsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODJkOTEzLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlyX3V0aWwucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5kaXJfdXRpbC4iIiIKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9zCi1pbXBvcnQgc3RhdAotaW1wb3J0IHNodXRpbAotaW1wb3J0IHN5cwotCi1mcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgKG1rcGF0aCwgcmVtb3ZlX3RyZWUsIGNyZWF0ZV90cmVlLCBjb3B5X3RyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuc3VyZV9yZWxhdGl2ZSkKLQotZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwotZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotCi1jbGFzcyBEaXJVdGlsVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIF9sb2coc2VsZiwgbXNnLCAqYXJncyk6Ci0gICAgICAgIGlmIGxlbihhcmdzKSA+IDA6Ci0gICAgICAgICAgICBzZWxmLl9sb2dzLmFwcGVuZChtc2cgJSBhcmdzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fbG9ncy5hcHBlbmQobXNnKQotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzdXBlcihEaXJVdGlsVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKLSAgICAgICAgc2VsZi5fbG9ncyA9IFtdCi0gICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBzZWxmLnJvb3RfdGFyZ2V0ID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdkZWVwJykKLSAgICAgICAgc2VsZi50YXJnZXQgPSBvcy5wYXRoLmpvaW4oc2VsZi5yb290X3RhcmdldCwgJ2hlcmUnKQotICAgICAgICBzZWxmLnRhcmdldDIgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ2RlZXAyJykKLSAgICAgICAgc2VsZi5vbGRfbG9nID0gbG9nLmluZm8KLSAgICAgICAgbG9nLmluZm8gPSBzZWxmLl9sb2cKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgbG9nLmluZm8gPSBzZWxmLm9sZF9sb2cKLSAgICAgICAgc3VwZXIoRGlyVXRpbFRlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCi0KLSAgICBkZWYgdGVzdF9ta3BhdGhfcmVtb3ZlX3RyZWVfdmVyYm9zaXR5KHNlbGYpOgotCi0gICAgICAgIG1rcGF0aChzZWxmLnRhcmdldCwgdmVyYm9zZT0wKQotICAgICAgICB3YW50ZWQgPSBbXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvZ3MsIHdhbnRlZCkKLSAgICAgICAgcmVtb3ZlX3RyZWUoc2VsZi5yb290X3RhcmdldCwgdmVyYm9zZT0wKQotCi0gICAgICAgIG1rcGF0aChzZWxmLnRhcmdldCwgdmVyYm9zZT0xKQotICAgICAgICB3YW50ZWQgPSBbJ2NyZWF0aW5nICVzJyAlIHNlbGYucm9vdF90YXJnZXQsCi0gICAgICAgICAgICAgICAgICAnY3JlYXRpbmcgJXMnICUgc2VsZi50YXJnZXRdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fbG9ncywgd2FudGVkKQotICAgICAgICBzZWxmLl9sb2dzID0gW10KLQotICAgICAgICByZW1vdmVfdHJlZShzZWxmLnJvb3RfdGFyZ2V0LCB2ZXJib3NlPTEpCi0gICAgICAgIHdhbnRlZCA9IFsicmVtb3ZpbmcgJyVzJyAoYW5kIGV2ZXJ5dGhpbmcgdW5kZXIgaXQpIiAlIHNlbGYucm9vdF90YXJnZXRdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fbG9ncywgd2FudGVkKQotCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyB0ZXN0IGlzIG9ubHkgYXBwcm9wcmlhdGUgZm9yIFBPU0lYLWxpa2Ugc3lzdGVtcy4iKQotICAgIGRlZiB0ZXN0X21rcGF0aF93aXRoX2N1c3RvbV9tb2RlKHNlbGYpOgotICAgICAgICAjIEdldCBhbmQgc2V0IHRoZSBjdXJyZW50IHVtYXNrIHZhbHVlIGZvciB0ZXN0aW5nIG1vZGUgYml0cy4KLSAgICAgICAgdW1hc2sgPSBvcy51bWFzaygwbzAwMikKLSAgICAgICAgb3MudW1hc2sodW1hc2spCi0gICAgICAgIG1rcGF0aChzZWxmLnRhcmdldCwgMG83MDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBzdGF0LlNfSU1PREUob3Muc3RhdChzZWxmLnRhcmdldCkuc3RfbW9kZSksIDBvNzAwICYgfnVtYXNrKQotICAgICAgICBta3BhdGgoc2VsZi50YXJnZXQyLCAwbzU1NSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHN0YXQuU19JTU9ERShvcy5zdGF0KHNlbGYudGFyZ2V0Mikuc3RfbW9kZSksIDBvNTU1ICYgfnVtYXNrKQotCi0gICAgZGVmIHRlc3RfY3JlYXRlX3RyZWVfdmVyYm9zaXR5KHNlbGYpOgotCi0gICAgICAgIGNyZWF0ZV90cmVlKHNlbGYucm9vdF90YXJnZXQsIFsnb25lJywgJ3R3bycsICd0aHJlZSddLCB2ZXJib3NlPTApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fbG9ncywgW10pCi0gICAgICAgIHJlbW92ZV90cmVlKHNlbGYucm9vdF90YXJnZXQsIHZlcmJvc2U9MCkKLQotICAgICAgICB3YW50ZWQgPSBbJ2NyZWF0aW5nICVzJyAlIHNlbGYucm9vdF90YXJnZXRdCi0gICAgICAgIGNyZWF0ZV90cmVlKHNlbGYucm9vdF90YXJnZXQsIFsnb25lJywgJ3R3bycsICd0aHJlZSddLCB2ZXJib3NlPTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fbG9ncywgd2FudGVkKQotCi0gICAgICAgIHJlbW92ZV90cmVlKHNlbGYucm9vdF90YXJnZXQsIHZlcmJvc2U9MCkKLQotCi0gICAgZGVmIHRlc3RfY29weV90cmVlX3ZlcmJvc2l0eShzZWxmKToKLQotICAgICAgICBta3BhdGgoc2VsZi50YXJnZXQsIHZlcmJvc2U9MCkKLQotICAgICAgICBjb3B5X3RyZWUoc2VsZi50YXJnZXQsIHNlbGYudGFyZ2V0MiwgdmVyYm9zZT0wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvZ3MsIFtdKQotCi0gICAgICAgIHJlbW92ZV90cmVlKHNlbGYucm9vdF90YXJnZXQsIHZlcmJvc2U9MCkKLQotICAgICAgICBta3BhdGgoc2VsZi50YXJnZXQsIHZlcmJvc2U9MCkKLSAgICAgICAgYV9maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGFyZ2V0LCAnb2sudHh0JykKLSAgICAgICAgZiA9IG9wZW4oYV9maWxlLCAndycpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGYud3JpdGUoJ3NvbWUgY29udGVudCcpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICB3YW50ZWQgPSBbJ2NvcHlpbmcgJXMgLT4gJXMnICUgKGFfZmlsZSwgc2VsZi50YXJnZXQyKV0KLSAgICAgICAgY29weV90cmVlKHNlbGYudGFyZ2V0LCBzZWxmLnRhcmdldDIsIHZlcmJvc2U9MSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9sb2dzLCB3YW50ZWQpCi0KLSAgICAgICAgcmVtb3ZlX3RyZWUoc2VsZi5yb290X3RhcmdldCwgdmVyYm9zZT0wKQotICAgICAgICByZW1vdmVfdHJlZShzZWxmLnRhcmdldDIsIHZlcmJvc2U9MCkKLQotICAgIGRlZiB0ZXN0X2NvcHlfdHJlZV9za2lwc19uZnNfdGVtcF9maWxlcyhzZWxmKToKLSAgICAgICAgbWtwYXRoKHNlbGYudGFyZ2V0LCB2ZXJib3NlPTApCi0KLSAgICAgICAgYV9maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGFyZ2V0LCAnb2sudHh0JykKLSAgICAgICAgbmZzX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXQsICcubmZzMTIzYWJjJykKLSAgICAgICAgZm9yIGYgaW4gYV9maWxlLCBuZnNfZmlsZToKLSAgICAgICAgICAgIGZoID0gb3BlbihmLCAndycpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZmgud3JpdGUoJ3NvbWUgY29udGVudCcpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGZoLmNsb3NlKCkKLQotICAgICAgICBjb3B5X3RyZWUoc2VsZi50YXJnZXQsIHNlbGYudGFyZ2V0MikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5saXN0ZGlyKHNlbGYudGFyZ2V0MiksIFsnb2sudHh0J10pCi0KLSAgICAgICAgcmVtb3ZlX3RyZWUoc2VsZi5yb290X3RhcmdldCwgdmVyYm9zZT0wKQotICAgICAgICByZW1vdmVfdHJlZShzZWxmLnRhcmdldDIsIHZlcmJvc2U9MCkKLQotICAgIGRlZiB0ZXN0X2Vuc3VyZV9yZWxhdGl2ZShzZWxmKToKLSAgICAgICAgaWYgb3Muc2VwID09ICcvJzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5zdXJlX3JlbGF0aXZlKCcvaG9tZS9mb28nKSwgJ2hvbWUvZm9vJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5zdXJlX3JlbGF0aXZlKCdzb21lL3BhdGgnKSwgJ3NvbWUvcGF0aCcpCi0gICAgICAgIGVsc2U6ICAgIyBcXAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnN1cmVfcmVsYXRpdmUoJ2M6XFxob21lXFxmb28nKSwgJ2M6aG9tZVxcZm9vJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5zdXJlX3JlbGF0aXZlKCdob21lXFxmb28nKSwgJ2hvbWVcXGZvbycpCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShEaXJVdGlsVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weSBiL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI3YmJlYi4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0NDUgKzAsMCBAQAotIyAtKi0gY29kaW5nOiB1dGY4IC0qLQotCi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmRpc3QuIiIiCi1pbXBvcnQgb3MKLWltcG9ydCBTdHJpbmdJTwotaW1wb3J0IHN5cwotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgd2FybmluZ3MKLWltcG9ydCB0ZXh0d3JhcAotCi1mcm9tIGRpc3R1dGlscy5kaXN0IGltcG9ydCBEaXN0cmlidXRpb24sIGZpeF9oZWxwX29wdGlvbnMKLWZyb20gZGlzdHV0aWxzLmNtZCBpbXBvcnQgQ29tbWFuZAotaW1wb3J0IGRpc3R1dGlscy5kaXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIGNhcHR1cmVkX3N0ZG91dCwgcnVuX3VuaXR0ZXN0Ci1mcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAotCi0KLWNsYXNzIHRlc3RfZGlzdChDb21tYW5kKToKLSAgICAiIiJTYW1wbGUgZGlzdHV0aWxzIGV4dGVuc2lvbiBjb21tYW5kLiIiIgotCi0gICAgdXNlcl9vcHRpb25zID0gWwotICAgICAgICAoInNhbXBsZS1vcHRpb249IiwgIlMiLCAiaGVscCB0ZXh0IiksCi0gICAgICAgIF0KLQotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIHNlbGYuc2FtcGxlX29wdGlvbiA9IE5vbmUKLQotCi1jbGFzcyBUZXN0RGlzdHJpYnV0aW9uKERpc3RyaWJ1dGlvbik6Ci0gICAgIiIiRGlzdHJpYnV0aW9uIHN1YmNsYXNzZXMgdGhhdCBhdm9pZHMgdGhlIGRlZmF1bHQgc2VhcmNoIGZvcgotICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMuCi0KLSAgICBUaGUgLl9jb25maWdfZmlsZXMgYXR0cmlidXRlIG11c3QgYmUgc2V0IGJlZm9yZQotICAgIC5wYXJzZV9jb25maWdfZmlsZXMoKSBpcyBjYWxsZWQuCi0gICAgIiIiCi0KLSAgICBkZWYgZmluZF9jb25maWdfZmlsZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9jb25maWdfZmlsZXMKLQotCi1jbGFzcyBEaXN0cmlidXRpb25UZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkVudmlyb25HdWFyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwZXIoRGlzdHJpYnV0aW9uVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKLSAgICAgICAgc2VsZi5hcmd2ID0gc3lzLmFyZ3YsIHN5cy5hcmd2WzpdCi0gICAgICAgIGRlbCBzeXMuYXJndlsxOl0KLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc3lzLmFyZ3YgPSBzZWxmLmFyZ3ZbMF0KLSAgICAgICAgc3lzLmFyZ3ZbOl0gPSBzZWxmLmFyZ3ZbMV0KLSAgICAgICAgc3VwZXIoRGlzdHJpYnV0aW9uVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKLQotICAgIGRlZiBjcmVhdGVfZGlzdHJpYnV0aW9uKHNlbGYsIGNvbmZpZ2ZpbGVzPSgpKToKLSAgICAgICAgZCA9IFRlc3REaXN0cmlidXRpb24oKQotICAgICAgICBkLl9jb25maWdfZmlsZXMgPSBjb25maWdmaWxlcwotICAgICAgICBkLnBhcnNlX2NvbmZpZ19maWxlcygpCi0gICAgICAgIGQucGFyc2VfY29tbWFuZF9saW5lKCkKLSAgICAgICAgcmV0dXJuIGQKLQotICAgIGRlZiB0ZXN0X2RlYnVnX21vZGUoc2VsZik6Ci0gICAgICAgIHdpdGggb3BlbihURVNURk4sICJ3IikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoIltnbG9iYWxdXG4iKQotICAgICAgICAgICAgZi53cml0ZSgiY29tbWFuZF9wYWNrYWdlcyA9IGZvby5iYXIsIHNwbGF0IikKLQotICAgICAgICBmaWxlcyA9IFtURVNURk5dCi0gICAgICAgIHN5cy5hcmd2LmFwcGVuZCgiYnVpbGQiKQotCi0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgc2VsZi5jcmVhdGVfZGlzdHJpYnV0aW9uKGZpbGVzKQotICAgICAgICBzdGRvdXQuc2VlaygwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yZWFkKCksICcnKQotICAgICAgICBkaXN0dXRpbHMuZGlzdC5ERUJVRyA9IFRydWUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVfZGlzdHJpYnV0aW9uKGZpbGVzKQotICAgICAgICAgICAgc3Rkb3V0LnNlZWsoMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJlYWQoKSwgJycpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBkaXN0dXRpbHMuZGlzdC5ERUJVRyA9IEZhbHNlCi0KLSAgICBkZWYgdGVzdF9jb21tYW5kX3BhY2thZ2VzX3Vuc3BlY2lmaWVkKHNlbGYpOgotICAgICAgICBzeXMuYXJndi5hcHBlbmQoImJ1aWxkIikKLSAgICAgICAgZCA9IHNlbGYuY3JlYXRlX2Rpc3RyaWJ1dGlvbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRfY29tbWFuZF9wYWNrYWdlcygpLCBbImRpc3R1dGlscy5jb21tYW5kIl0pCi0KLSAgICBkZWYgdGVzdF9jb21tYW5kX3BhY2thZ2VzX2NtZGxpbmUoc2VsZik6Ci0gICAgICAgIGZyb20gZGlzdHV0aWxzLnRlc3RzLnRlc3RfZGlzdCBpbXBvcnQgdGVzdF9kaXN0Ci0gICAgICAgIHN5cy5hcmd2LmV4dGVuZChbIi0tY29tbWFuZC1wYWNrYWdlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImZvby5iYXIsZGlzdHV0aWxzLnRlc3RzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9kaXN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiLVNzb21ldGV4dCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgXSkKLSAgICAgICAgZCA9IHNlbGYuY3JlYXRlX2Rpc3RyaWJ1dGlvbigpCi0gICAgICAgICMgbGV0J3MgYWN0dWFsbHkgdHJ5IHRvIGxvYWQgb3VyIHRlc3QgY29tbWFuZDoKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldF9jb21tYW5kX3BhY2thZ2VzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgWyJkaXN0dXRpbHMuY29tbWFuZCIsICJmb28uYmFyIiwgImRpc3R1dGlscy50ZXN0cyJdKQotICAgICAgICBjbWQgPSBkLmdldF9jb21tYW5kX29iaigidGVzdF9kaXN0IikKLSAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNtZCwgdGVzdF9kaXN0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5zYW1wbGVfb3B0aW9uLCAic29tZXRleHQiKQotCi0gICAgZGVmIHRlc3RfY29tbWFuZF9wYWNrYWdlc19jb25maWdmaWxlKHNlbGYpOgotICAgICAgICBzeXMuYXJndi5hcHBlbmQoImJ1aWxkIikKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLnVubGluaywgVEVTVEZOKQotICAgICAgICBmID0gb3BlbihURVNURk4sICJ3IikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcHJpbnQgPj4gZiwgIltnbG9iYWxdIgotICAgICAgICAgICAgcHJpbnQgPj4gZiwgImNvbW1hbmRfcGFja2FnZXMgPSBmb28uYmFyLCBzcGxhdCIKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgICAgIGQgPSBzZWxmLmNyZWF0ZV9kaXN0cmlidXRpb24oW1RFU1RGTl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRfY29tbWFuZF9wYWNrYWdlcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsiZGlzdHV0aWxzLmNvbW1hbmQiLCAiZm9vLmJhciIsICJzcGxhdCJdKQotCi0gICAgICAgICMgZW5zdXJlIGNvbW1hbmQgbGluZSBvdmVycmlkZXMgY29uZmlnOgotICAgICAgICBzeXMuYXJndlsxOl0gPSBbIi0tY29tbWFuZC1wYWNrYWdlcyIsICJzcG9yayIsICJidWlsZCJdCi0gICAgICAgIGQgPSBzZWxmLmNyZWF0ZV9kaXN0cmlidXRpb24oW1RFU1RGTl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRfY29tbWFuZF9wYWNrYWdlcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsiZGlzdHV0aWxzLmNvbW1hbmQiLCAic3BvcmsiXSkKLQotICAgICAgICAjIFNldHRpbmcgLS1jb21tYW5kLXBhY2thZ2VzIHRvICcnIHNob3VsZCBjYXVzZSB0aGUgZGVmYXVsdCB0bwotICAgICAgICAjIGJlIHVzZWQgZXZlbiBpZiBhIGNvbmZpZyBmaWxlIHNwZWNpZmllZCBzb21ldGhpbmcgZWxzZToKLSAgICAgICAgc3lzLmFyZ3ZbMTpdID0gWyItLWNvbW1hbmQtcGFja2FnZXMiLCAiIiwgImJ1aWxkIl0KLSAgICAgICAgZCA9IHNlbGYuY3JlYXRlX2Rpc3RyaWJ1dGlvbihbVEVTVEZOXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldF9jb21tYW5kX3BhY2thZ2VzKCksIFsiZGlzdHV0aWxzLmNvbW1hbmQiXSkKLQotICAgIGRlZiB0ZXN0X3dyaXRlX3BrZ19maWxlKHNlbGYpOgotICAgICAgICAjIENoZWNrIERpc3RyaWJ1dGlvbk1ldGFkYXRhIGhhbmRsaW5nIG9mIFVuaWNvZGUgZmllbGRzCi0gICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBteV9maWxlID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdmJykKLSAgICAgICAga2xhc3MgPSBEaXN0cmlidXRpb24KLQotICAgICAgICBkaXN0ID0ga2xhc3MoYXR0cnM9eydhdXRob3InOiB1J01pc3RlciBDYWbDqScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAnbXkucGFja2FnZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21haW50YWluZXInOiB1J0NhZsOpIEp1bmlvcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogdSdDYWbDqSB0b3Jyw6lmacOpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9uZ19kZXNjcmlwdGlvbic6IHUnSMOpaMOpaMOpJ30pCi0KLSAgICAgICAgIyBsZXQncyBtYWtlIHN1cmUgdGhlIGZpbGUgY2FuIGJlIHdyaXR0ZW4KLSAgICAgICAgIyB3aXRoIFVuaWNvZGUgZmllbGRzLiB0aGV5IGFyZSBlbmNvZGVkIHdpdGgKLSAgICAgICAgIyBQS0dfSU5GT19FTkNPRElORwotICAgICAgICBkaXN0Lm1ldGFkYXRhLndyaXRlX3BrZ19maWxlKG9wZW4obXlfZmlsZSwgJ3cnKSkKLQotICAgICAgICAjIHJlZ3VsYXIgYXNjaWkgaXMgb2YgY291cnNlIGFsd2F5cyB1c2FibGUKLSAgICAgICAgZGlzdCA9IGtsYXNzKGF0dHJzPXsnYXV0aG9yJzogJ01pc3RlciBDYWZlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6ICdteS5wYWNrYWdlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFpbnRhaW5lcic6ICdDYWZlIEp1bmlvcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ0NhZmUgdG9ycmVmaWUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsb25nX2Rlc2NyaXB0aW9uJzogJ0hlaGVoZSd9KQotCi0gICAgICAgIG15X2ZpbGUyID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdmMicpCi0gICAgICAgIGRpc3QubWV0YWRhdGEud3JpdGVfcGtnX2ZpbGUob3BlbihteV9maWxlMiwgJ3cnKSkKLQotICAgIGRlZiB0ZXN0X2VtcHR5X29wdGlvbnMoc2VsZik6Ci0gICAgICAgICMgYW4gZW1wdHkgb3B0aW9ucyBkaWN0aW9uYXJ5IHNob3VsZCBub3Qgc3RheSBpbiB0aGUKLSAgICAgICAgIyBsaXN0IG9mIGF0dHJpYnV0ZXMKLQotICAgICAgICAjIGNhdGNoaW5nIHdhcm5pbmdzCi0gICAgICAgIHdhcm5zID0gW10KLQotICAgICAgICBkZWYgX3dhcm4obXNnKToKLSAgICAgICAgICAgIHdhcm5zLmFwcGVuZChtc2cpCi0KLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNldGF0dHIsIHdhcm5pbmdzLCAnd2FybicsIHdhcm5pbmdzLndhcm4pCi0gICAgICAgIHdhcm5pbmdzLndhcm4gPSBfd2FybgotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKGF0dHJzPXsnYXV0aG9yJzogJ3h4eCcsICduYW1lJzogJ3h4eCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJzaW9uJzogJ3h4eCcsICd1cmwnOiAneHh4eCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJzoge319KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHdhcm5zKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignb3B0aW9ucycsIGRpcihkaXN0KSkKLQotICAgIGRlZiB0ZXN0X2ZpbmFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIGF0dHJzID0geydrZXl3b3Jkcyc6ICdvbmUsdHdvJywKLSAgICAgICAgICAgICAgICAgJ3BsYXRmb3Jtcyc6ICdvbmUsdHdvJ30KLQotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKGF0dHJzPWF0dHJzKQotICAgICAgICBkaXN0LmZpbmFsaXplX29wdGlvbnMoKQotCi0gICAgICAgICMgZmluYWxpemVfb3B0aW9uIHNwbGl0cyBwbGF0Zm9ybXMgYW5kIGtleXdvcmRzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdC5tZXRhZGF0YS5wbGF0Zm9ybXMsIFsnb25lJywgJ3R3byddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3QubWV0YWRhdGEua2V5d29yZHMsIFsnb25lJywgJ3R3byddKQotCi0gICAgZGVmIHRlc3RfZ2V0X2NvbW1hbmRfcGFja2FnZXMoc2VsZik6Ci0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3QuY29tbWFuZF9wYWNrYWdlcywgTm9uZSkKLSAgICAgICAgY21kcyA9IGRpc3QuZ2V0X2NvbW1hbmRfcGFja2FnZXMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZHMsIFsnZGlzdHV0aWxzLmNvbW1hbmQnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0LmNvbW1hbmRfcGFja2FnZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgWydkaXN0dXRpbHMuY29tbWFuZCddKQotCi0gICAgICAgIGRpc3QuY29tbWFuZF9wYWNrYWdlcyA9ICdvbmUsdHdvJwotICAgICAgICBjbWRzID0gZGlzdC5nZXRfY29tbWFuZF9wYWNrYWdlcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kcywgWydkaXN0dXRpbHMuY29tbWFuZCcsICdvbmUnLCAndHdvJ10pCi0KLSAgICBkZWYgdGVzdF9hbm5vdW5jZShzZWxmKToKLSAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGxldmVsIGlzIGtub3duCi0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oKQotICAgICAgICBhcmdzID0gKCdvaycsKQotICAgICAgICBrd2FyZ3MgPSB7J2xldmVsJzogJ29rMid9Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRpc3QuYW5ub3VuY2UsIGFyZ3MsIGt3YXJncykKLQotICAgIGRlZiB0ZXN0X2ZpbmRfY29uZmlnX2ZpbGVzX2Rpc2FibGUoc2VsZik6Ci0gICAgICAgICMgVGlja2V0ICMxMTgwOiBBbGxvdyB1c2VyIHRvIGRpc2FibGUgdGhlaXIgaG9tZSBjb25maWcgZmlsZS4KLSAgICAgICAgdGVtcF9ob21lID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgotICAgICAgICAgICAgdXNlcl9maWxlbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wX2hvbWUsICIucHlkaXN0dXRpbHMuY2ZnIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHVzZXJfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4odGVtcF9ob21lLCAicHlkaXN0dXRpbHMuY2ZnIikKLQotICAgICAgICB3aXRoIG9wZW4odXNlcl9maWxlbmFtZSwgJ3cnKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZSgnW2Rpc3R1dGlsc11cbicpCi0KLSAgICAgICAgZGVmIF9leHBhbmRlcihwYXRoKToKLSAgICAgICAgICAgIHJldHVybiB0ZW1wX2hvbWUKLQotICAgICAgICBvbGRfZXhwYW5kZXIgPSBvcy5wYXRoLmV4cGFuZHVzZXIKLSAgICAgICAgb3MucGF0aC5leHBhbmR1c2VyID0gX2V4cGFuZGVyCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGQgPSBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb24oKQotICAgICAgICAgICAgYWxsX2ZpbGVzID0gZC5maW5kX2NvbmZpZ19maWxlcygpCi0KLSAgICAgICAgICAgIGQgPSBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb24oYXR0cnM9eydzY3JpcHRfYXJncyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnLS1uby11c2VyLWNmZyddfSkKLSAgICAgICAgICAgIGZpbGVzID0gZC5maW5kX2NvbmZpZ19maWxlcygpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5wYXRoLmV4cGFuZHVzZXIgPSBvbGRfZXhwYW5kZXIKLQotICAgICAgICAjIG1ha2Ugc3VyZSAtLW5vLXVzZXItY2ZnIGRpc2FibGVzIHRoZSB1c2VyIGNmZyBmaWxlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFsbF9maWxlcyktMSwgbGVuKGZpbGVzKSkKLQotCi1jbGFzcyBNZXRhZGF0YVRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsIHN1cHBvcnQuRW52aXJvbkd1YXJkLAotICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cGVyKE1ldGFkYXRhVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKLSAgICAgICAgc2VsZi5hcmd2ID0gc3lzLmFyZ3YsIHN5cy5hcmd2WzpdCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHN5cy5hcmd2ID0gc2VsZi5hcmd2WzBdCi0gICAgICAgIHN5cy5hcmd2WzpdID0gc2VsZi5hcmd2WzFdCi0gICAgICAgIHN1cGVyKE1ldGFkYXRhVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKLQotICAgIGRlZiB0ZXN0X2NsYXNzaWZpZXIoc2VsZik6Ci0gICAgICAgIGF0dHJzID0geyduYW1lJzogJ0JvYScsICd2ZXJzaW9uJzogJzMuMCcsCi0gICAgICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMnXX0KLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbihhdHRycykKLSAgICAgICAgbWV0YSA9IHNlbGYuZm9ybWF0X21ldGFkYXRhKGRpc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ01ldGFkYXRhLVZlcnNpb246IDEuMScsIG1ldGEpCi0KLSAgICBkZWYgdGVzdF9kb3dubG9hZF91cmwoc2VsZik6Ci0gICAgICAgIGF0dHJzID0geyduYW1lJzogJ0JvYScsICd2ZXJzaW9uJzogJzMuMCcsCi0gICAgICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnaHR0cDovL2V4YW1wbGUub3JnL2JvYSd9Ci0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oYXR0cnMpCi0gICAgICAgIG1ldGEgPSBzZWxmLmZvcm1hdF9tZXRhZGF0YShkaXN0KQotICAgICAgICBzZWxmLmFzc2VydEluKCdNZXRhZGF0YS1WZXJzaW9uOiAxLjEnLCBtZXRhKQotCi0gICAgZGVmIHRlc3RfbG9uZ19kZXNjcmlwdGlvbihzZWxmKToKLSAgICAgICAgbG9uZ19kZXNjID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKLSAgICAgICAgZXhhbXBsZTo6Ci0gICAgICAgICAgICAgIFdlIHN0YXJ0IGhlcmUKLSAgICAgICAgICAgIGFuZCBjb250aW51ZSBoZXJlCi0gICAgICAgICAgYW5kIGVuZCBoZXJlLiIiIikKLSAgICAgICAgYXR0cnMgPSB7Im5hbWUiOiAicGFja2FnZSIsCi0gICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMCIsCi0gICAgICAgICAgICAgICAgICJsb25nX2Rlc2NyaXB0aW9uIjogbG9uZ19kZXNjfQotCi0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oYXR0cnMpCi0gICAgICAgIG1ldGEgPSBzZWxmLmZvcm1hdF9tZXRhZGF0YShkaXN0KQotICAgICAgICBtZXRhID0gbWV0YS5yZXBsYWNlKCdcbicgKyA4ICogJyAnLCAnXG4nKQotICAgICAgICBzZWxmLmFzc2VydEluKGxvbmdfZGVzYywgbWV0YSkKLQotICAgIGRlZiB0ZXN0X3NpbXBsZV9tZXRhZGF0YShzZWxmKToKLSAgICAgICAgYXR0cnMgPSB7Im5hbWUiOiAicGFja2FnZSIsCi0gICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMCJ9Ci0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oYXR0cnMpCi0gICAgICAgIG1ldGEgPSBzZWxmLmZvcm1hdF9tZXRhZGF0YShkaXN0KQotICAgICAgICBzZWxmLmFzc2VydEluKCJNZXRhZGF0YS1WZXJzaW9uOiAxLjAiLCBtZXRhKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJwcm92aWRlczoiLCBtZXRhLmxvd2VyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oInJlcXVpcmVzOiIsIG1ldGEubG93ZXIoKSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbigib2Jzb2xldGVzOiIsIG1ldGEubG93ZXIoKSkKLQotICAgIGRlZiB0ZXN0X3Byb3ZpZGVzKHNlbGYpOgotICAgICAgICBhdHRycyA9IHsibmFtZSI6ICJwYWNrYWdlIiwKLSAgICAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wIiwKLSAgICAgICAgICAgICAgICAgInByb3ZpZGVzIjogWyJwYWNrYWdlIiwgInBhY2thZ2Uuc3ViIl19Ci0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oYXR0cnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdC5tZXRhZGF0YS5nZXRfcHJvdmlkZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbInBhY2thZ2UiLCAicGFja2FnZS5zdWIiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0LmdldF9wcm92aWRlcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsicGFja2FnZSIsICJwYWNrYWdlLnN1YiJdKQotICAgICAgICBtZXRhID0gc2VsZi5mb3JtYXRfbWV0YWRhdGEoZGlzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbigiTWV0YWRhdGEtVmVyc2lvbjogMS4xIiwgbWV0YSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbigicmVxdWlyZXM6IiwgbWV0YS5sb3dlcigpKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJvYnNvbGV0ZXM6IiwgbWV0YS5sb3dlcigpKQotCi0gICAgZGVmIHRlc3RfcHJvdmlkZXNfaWxsZWdhbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRGlzdHJpYnV0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICB7Im5hbWUiOiAicGFja2FnZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyc2lvbiI6ICIxLjAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3ZpZGVzIjogWyJteS5wa2cgKHNwbGF0KSJdfSkKLQotICAgIGRlZiB0ZXN0X3JlcXVpcmVzKHNlbGYpOgotICAgICAgICBhdHRycyA9IHsibmFtZSI6ICJwYWNrYWdlIiwKLSAgICAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wIiwKLSAgICAgICAgICAgICAgICAgInJlcXVpcmVzIjogWyJvdGhlciIsICJhbm90aGVyICg9PTEuMCkiXX0KLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbihhdHRycykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0Lm1ldGFkYXRhLmdldF9yZXF1aXJlcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsib3RoZXIiLCAiYW5vdGhlciAoPT0xLjApIl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdC5nZXRfcmVxdWlyZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbIm90aGVyIiwgImFub3RoZXIgKD09MS4wKSJdKQotICAgICAgICBtZXRhID0gc2VsZi5mb3JtYXRfbWV0YWRhdGEoZGlzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbigiTWV0YWRhdGEtVmVyc2lvbjogMS4xIiwgbWV0YSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbigicHJvdmlkZXM6IiwgbWV0YS5sb3dlcigpKQotICAgICAgICBzZWxmLmFzc2VydEluKCJSZXF1aXJlczogb3RoZXIiLCBtZXRhKQotICAgICAgICBzZWxmLmFzc2VydEluKCJSZXF1aXJlczogYW5vdGhlciAoPT0xLjApIiwgbWV0YSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbigib2Jzb2xldGVzOiIsIG1ldGEubG93ZXIoKSkKLQotICAgIGRlZiB0ZXN0X3JlcXVpcmVzX2lsbGVnYWwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIERpc3RyaWJ1dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogInBhY2thZ2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlcyI6IFsibXkucGtnIChzcGxhdCkiXX0pCi0KLSAgICBkZWYgdGVzdF9vYnNvbGV0ZXMoc2VsZik6Ci0gICAgICAgIGF0dHJzID0geyJuYW1lIjogInBhY2thZ2UiLAotICAgICAgICAgICAgICAgICAidmVyc2lvbiI6ICIxLjAiLAotICAgICAgICAgICAgICAgICAib2Jzb2xldGVzIjogWyJvdGhlciIsICJhbm90aGVyICg8MS4wKSJdfQotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKGF0dHJzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3QubWV0YWRhdGEuZ2V0X29ic29sZXRlcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsib3RoZXIiLCAiYW5vdGhlciAoPDEuMCkiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0LmdldF9vYnNvbGV0ZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbIm90aGVyIiwgImFub3RoZXIgKDwxLjApIl0pCi0gICAgICAgIG1ldGEgPSBzZWxmLmZvcm1hdF9tZXRhZGF0YShkaXN0KQotICAgICAgICBzZWxmLmFzc2VydEluKCJNZXRhZGF0YS1WZXJzaW9uOiAxLjEiLCBtZXRhKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJwcm92aWRlczoiLCBtZXRhLmxvd2VyKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oInJlcXVpcmVzOiIsIG1ldGEubG93ZXIoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbigiT2Jzb2xldGVzOiBvdGhlciIsIG1ldGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oIk9ic29sZXRlczogYW5vdGhlciAoPDEuMCkiLCBtZXRhKQotCi0gICAgZGVmIHRlc3Rfb2Jzb2xldGVzX2lsbGVnYWwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIERpc3RyaWJ1dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeyJuYW1lIjogInBhY2thZ2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYnNvbGV0ZXMiOiBbIm15LnBrZyAoc3BsYXQpIl19KQotCi0gICAgZGVmIGZvcm1hdF9tZXRhZGF0YShzZWxmLCBkaXN0KToKLSAgICAgICAgc2lvID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICAgICAgICBkaXN0Lm1ldGFkYXRhLndyaXRlX3BrZ19maWxlKHNpbykKLSAgICAgICAgcmV0dXJuIHNpby5nZXR2YWx1ZSgpCi0KLSAgICBkZWYgdGVzdF9jdXN0b21fcHlkaXN0dXRpbHMoc2VsZik6Ci0gICAgICAgICMgZml4ZXMgIzIxNjYKLSAgICAgICAgIyBtYWtlIHN1cmUgcHlkaXN0dXRpbHMuY2ZnIGlzIGZvdW5kCi0gICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKLSAgICAgICAgICAgIHVzZXJfZmlsZW5hbWUgPSAiLnB5ZGlzdHV0aWxzLmNmZyIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHVzZXJfZmlsZW5hbWUgPSAicHlkaXN0dXRpbHMuY2ZnIgotCi0gICAgICAgIHRlbXBfZGlyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgdXNlcl9maWxlbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wX2RpciwgdXNlcl9maWxlbmFtZSkKLSAgICAgICAgZiA9IG9wZW4odXNlcl9maWxlbmFtZSwgJ3cnKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmLndyaXRlKCcuJykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oKQotCi0gICAgICAgICAgICAjIGxpbnV4LXN0eWxlCi0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdsaW51eCcsICdkYXJ3aW4nKToKLSAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydIT01FJ10gPSB0ZW1wX2RpcgotICAgICAgICAgICAgICAgIGZpbGVzID0gZGlzdC5maW5kX2NvbmZpZ19maWxlcygpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih1c2VyX2ZpbGVuYW1lLCBmaWxlcykKLQotICAgICAgICAgICAgIyB3aW4zMi1zdHlsZQotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgICAgICAgICAgIyBob21lIGRyaXZlIHNob3VsZCBiZSBmb3VuZAotICAgICAgICAgICAgICAgIG9zLmVudmlyb25bJ0hPTUUnXSA9IHRlbXBfZGlyCi0gICAgICAgICAgICAgICAgZmlsZXMgPSBkaXN0LmZpbmRfY29uZmlnX2ZpbGVzKCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHVzZXJfZmlsZW5hbWUsIGZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXIgbm90IGZvdW5kIGluICVyJyAlICh1c2VyX2ZpbGVuYW1lLCBmaWxlcykpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5yZW1vdmUodXNlcl9maWxlbmFtZSkKLQotICAgIGRlZiB0ZXN0X2ZpeF9oZWxwX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIGhlbHBfdHVwbGVzID0gWygnYScsICdiJywgJ2MnLCAnZCcpLCAoMSwgMiwgMywgNCldCi0gICAgICAgIGZhbmN5X29wdGlvbnMgPSBmaXhfaGVscF9vcHRpb25zKGhlbHBfdHVwbGVzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhbmN5X29wdGlvbnNbMF0sICgnYScsICdiJywgJ2MnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmYW5jeV9vcHRpb25zWzFdLCAoMSwgMiwgMykpCi0KLSAgICBkZWYgdGVzdF9zaG93X2hlbHAoc2VsZik6Ci0gICAgICAgICMgc21va2UgdGVzdCwganVzdCBtYWtlcyBzdXJlIHNvbWUgaGVscCBpcyBkaXNwbGF5ZWQKLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbigpCi0gICAgICAgIHN5cy5hcmd2ID0gW10KLSAgICAgICAgZGlzdC5oZWxwID0gMQotICAgICAgICBkaXN0LnNjcmlwdF9uYW1lID0gJ3NldHVwLnB5JwotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHM6Ci0gICAgICAgICAgICBkaXN0LnBhcnNlX2NvbW1hbmRfbGluZSgpCi0KLSAgICAgICAgb3V0cHV0ID0gW2xpbmUgZm9yIGxpbmUgaW4gcy5nZXR2YWx1ZSgpLnNwbGl0KCdcbicpCi0gICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkgIT0gJyddCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXRwdXQpCi0KLSAgICBkZWYgdGVzdF9yZWFkX21ldGFkYXRhKHNlbGYpOgotICAgICAgICBhdHRycyA9IHsibmFtZSI6ICJwYWNrYWdlIiwKLSAgICAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wIiwKLSAgICAgICAgICAgICAgICAgImxvbmdfZGVzY3JpcHRpb24iOiAiZGVzYyIsCi0gICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ4eHgiLAotICAgICAgICAgICAgICAgICAiZG93bmxvYWRfdXJsIjogImh0dHA6Ly9leGFtcGxlLmNvbSIsCi0gICAgICAgICAgICAgICAgICJrZXl3b3JkcyI6IFsnb25lJywgJ3R3byddLAotICAgICAgICAgICAgICAgICAicmVxdWlyZXMiOiBbJ2ZvbyddfQotCi0gICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oYXR0cnMpCi0gICAgICAgIG1ldGFkYXRhID0gZGlzdC5tZXRhZGF0YQotCi0gICAgICAgICMgd3JpdGUgaXQgdGhlbiByZWxvYWRzIGl0Ci0gICAgICAgIFBLR19JTkZPID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICAgICAgICBtZXRhZGF0YS53cml0ZV9wa2dfZmlsZShQS0dfSU5GTykKLSAgICAgICAgUEtHX0lORk8uc2VlaygwKQotICAgICAgICBtZXRhZGF0YS5yZWFkX3BrZ19maWxlKFBLR19JTkZPKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0YWRhdGEubmFtZSwgInBhY2thZ2UiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLnZlcnNpb24sICIxLjAiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLmRlc2NyaXB0aW9uLCAieHh4IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRhZGF0YS5kb3dubG9hZF91cmwsICdodHRwOi8vZXhhbXBsZS5jb20nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLmtleXdvcmRzLCBbJ29uZScsICd0d28nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRhZGF0YS5wbGF0Zm9ybXMsIFsnVU5LTk9XTiddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLm9ic29sZXRlcywgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRhZGF0YS5yZXF1aXJlcywgWydmb28nXSkKLQotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLSAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShEaXN0cmlidXRpb25UZXN0Q2FzZSkpCi0gICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoTWV0YWRhdGFUZXN0Q2FzZSkpCi0gICAgcmV0dXJuIHN1aXRlCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZmlsZV91dGlsLnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9maWxlX3V0aWwucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkYmNmNTIuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9maWxlX3V0aWwucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmZpbGVfdXRpbC4iIiIKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9zCi1pbXBvcnQgc2h1dGlsCi0KLWZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgbW92ZV9maWxlLCB3cml0ZV9maWxlLCBjb3B5X2ZpbGUKLWZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKLWZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLQotY2xhc3MgRmlsZVV0aWxUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgX2xvZyhzZWxmLCBtc2csICphcmdzKToKLSAgICAgICAgaWYgbGVuKGFyZ3MpID4gMDoKLSAgICAgICAgICAgIHNlbGYuX2xvZ3MuYXBwZW5kKG1zZyAlIGFyZ3MpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9sb2dzLmFwcGVuZChtc2cpCi0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cGVyKEZpbGVVdGlsVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKLSAgICAgICAgc2VsZi5fbG9ncyA9IFtdCi0gICAgICAgIHNlbGYub2xkX2xvZyA9IGxvZy5pbmZvCi0gICAgICAgIGxvZy5pbmZvID0gc2VsZi5fbG9nCi0gICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBzZWxmLnNvdXJjZSA9IG9zLnBhdGguam9pbih0bXBfZGlyLCAnZjEnKQotICAgICAgICBzZWxmLnRhcmdldCA9IG9zLnBhdGguam9pbih0bXBfZGlyLCAnZjInKQotICAgICAgICBzZWxmLnRhcmdldF9kaXIgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ2QxJykKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgbG9nLmluZm8gPSBzZWxmLm9sZF9sb2cKLSAgICAgICAgc3VwZXIoRmlsZVV0aWxUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQotCi0gICAgZGVmIHRlc3RfbW92ZV9maWxlX3ZlcmJvc2l0eShzZWxmKToKLSAgICAgICAgZiA9IG9wZW4oc2VsZi5zb3VyY2UsICd3JykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZi53cml0ZSgnc29tZSBjb250ZW50JykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgICAgIG1vdmVfZmlsZShzZWxmLnNvdXJjZSwgc2VsZi50YXJnZXQsIHZlcmJvc2U9MCkKLSAgICAgICAgd2FudGVkID0gW10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9sb2dzLCB3YW50ZWQpCi0KLSAgICAgICAgIyBiYWNrIHRvIG9yaWdpbmFsIHN0YXRlCi0gICAgICAgIG1vdmVfZmlsZShzZWxmLnRhcmdldCwgc2VsZi5zb3VyY2UsIHZlcmJvc2U9MCkKLQotICAgICAgICBtb3ZlX2ZpbGUoc2VsZi5zb3VyY2UsIHNlbGYudGFyZ2V0LCB2ZXJib3NlPTEpCi0gICAgICAgIHdhbnRlZCA9IFsnbW92aW5nICVzIC0+ICVzJyAlIChzZWxmLnNvdXJjZSwgc2VsZi50YXJnZXQpXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvZ3MsIHdhbnRlZCkKLQotICAgICAgICAjIGJhY2sgdG8gb3JpZ2luYWwgc3RhdGUKLSAgICAgICAgbW92ZV9maWxlKHNlbGYudGFyZ2V0LCBzZWxmLnNvdXJjZSwgdmVyYm9zZT0wKQotCi0gICAgICAgIHNlbGYuX2xvZ3MgPSBbXQotICAgICAgICAjIG5vdyB0aGUgdGFyZ2V0IGlzIGEgZGlyCi0gICAgICAgIG9zLm1rZGlyKHNlbGYudGFyZ2V0X2RpcikKLSAgICAgICAgbW92ZV9maWxlKHNlbGYuc291cmNlLCBzZWxmLnRhcmdldF9kaXIsIHZlcmJvc2U9MSkKLSAgICAgICAgd2FudGVkID0gWydtb3ZpbmcgJXMgLT4gJXMnICUgKHNlbGYuc291cmNlLCBzZWxmLnRhcmdldF9kaXIpXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2xvZ3MsIHdhbnRlZCkKLQotICAgIGRlZiB0ZXN0X3dyaXRlX2ZpbGUoc2VsZik6Ci0gICAgICAgIGxpbmVzID0gWydhJywgJ2InLCAnYyddCi0gICAgICAgIGRpciA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIGZvbyA9IG9zLnBhdGguam9pbihkaXIsICdmb28nKQotICAgICAgICB3cml0ZV9maWxlKGZvbywgbGluZXMpCi0gICAgICAgIGNvbnRlbnQgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIG9wZW4oZm9vKS5yZWFkbGluZXMoKV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50LCBsaW5lcykKLQotICAgIGRlZiB0ZXN0X2NvcHlfZmlsZShzZWxmKToKLSAgICAgICAgc3JjX2RpciA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIGZvbyA9IG9zLnBhdGguam9pbihzcmNfZGlyLCAnZm9vJykKLSAgICAgICAgd3JpdGVfZmlsZShmb28sICdjb250ZW50JykKLSAgICAgICAgZHN0X2RpciA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIGNvcHlfZmlsZShmb28sIGRzdF9kaXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZHN0X2RpciwgJ2ZvbycpKSkKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEZpbGVVdGlsVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZmlsZWxpc3QucHkgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2ZpbGVsaXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWI4OGYyLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZmlsZWxpc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyOTkgKzAsMCBAQAotIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5maWxlbGlzdC4iIiIKLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gZGlzdHV0aWxzIGltcG9ydCBkZWJ1ZwotZnJvbSBkaXN0dXRpbHMubG9nIGltcG9ydCBXQVJOCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1RlbXBsYXRlRXJyb3IKLWZyb20gZGlzdHV0aWxzLmZpbGVsaXN0IGltcG9ydCBnbG9iX3RvX3JlLCB0cmFuc2xhdGVfcGF0dGVybiwgRmlsZUxpc3QKLQotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0LCBydW5fdW5pdHRlc3QKLWZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Ci0KLU1BTklGRVNUX0lOID0gIiIiXAotaW5jbHVkZSBvawotaW5jbHVkZSB4bwotZXhjbHVkZSB4bwotaW5jbHVkZSBmb28udG1wCi1pbmNsdWRlIGJ1aWxkb3V0LmNmZwotZ2xvYmFsLWluY2x1ZGUgKi54Ci1nbG9iYWwtaW5jbHVkZSAqLnR4dAotZ2xvYmFsLWV4Y2x1ZGUgKi50bXAKLXJlY3Vyc2l2ZS1pbmNsdWRlIGYgKi5vbwotcmVjdXJzaXZlLWV4Y2x1ZGUgZ2xvYmFsICoueAotZ3JhZnQgZGlyCi1wcnVuZSBkaXIzCi0iIiIKLQotCi1kZWYgbWFrZV9sb2NhbF9wYXRoKHMpOgotICAgICIiIkNvbnZlcnRzICcvJyBpbiBhIHN0cmluZyB0byBvcy5zZXAiIiIKLSAgICByZXR1cm4gcy5yZXBsYWNlKCcvJywgb3Muc2VwKQotCi0KLWNsYXNzIEZpbGVMaXN0VGVzdENhc2Uoc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiBhc3NlcnROb1dhcm5pbmdzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2xvZ3MoV0FSTiksIFtdKQotICAgICAgICBzZWxmLmNsZWFyX2xvZ3MoKQotCi0gICAgZGVmIGFzc2VydFdhcm5pbmdzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKHNlbGYuZ2V0X2xvZ3MoV0FSTikpLCAwKQotICAgICAgICBzZWxmLmNsZWFyX2xvZ3MoKQotCi0gICAgZGVmIHRlc3RfZ2xvYl90b19yZShzZWxmKToKLSAgICAgICAgc2VwID0gb3Muc2VwCi0gICAgICAgIGlmIG9zLnNlcCA9PSAnXFwnOgotICAgICAgICAgICAgc2VwID0gcmUuZXNjYXBlKG9zLnNlcCkKLQotICAgICAgICBmb3IgZ2xvYiwgcmVnZXggaW4gKAotICAgICAgICAgICAgIyBzaW1wbGUgY2FzZXMKLSAgICAgICAgICAgICgnZm9vKicsIHInZm9vW14lKHNlcClzXSpcWig/bXMpJyksCi0gICAgICAgICAgICAoJ2Zvbz8nLCByJ2Zvb1teJShzZXApc11cWig/bXMpJyksCi0gICAgICAgICAgICAoJ2Zvbz8/Jywgcidmb29bXiUoc2VwKXNdW14lKHNlcClzXVxaKD9tcyknKSwKLSAgICAgICAgICAgICMgc3BlY2lhbCBjYXNlcwotICAgICAgICAgICAgKHInZm9vXFwqJywgcidmb29cXFxcW14lKHNlcClzXSpcWig/bXMpJyksCi0gICAgICAgICAgICAocidmb29cXFwqJywgcidmb29cXFxcXFxbXiUoc2VwKXNdKlxaKD9tcyknKSwKLSAgICAgICAgICAgICgnZm9vPz8/PycsIHInZm9vW14lKHNlcClzXVteJShzZXApc11bXiUoc2VwKXNdW14lKHNlcClzXVxaKD9tcyknKSwKLSAgICAgICAgICAgIChyJ2Zvb1xcPz8nLCByJ2Zvb1xcXFxbXiUoc2VwKXNdW14lKHNlcClzXVxaKD9tcyknKSk6Ci0gICAgICAgICAgICByZWdleCA9IHJlZ2V4ICUgeydzZXAnOiBzZXB9Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JfdG9fcmUoZ2xvYiksIHJlZ2V4KQotCi0gICAgZGVmIHRlc3RfcHJvY2Vzc190ZW1wbGF0ZV9saW5lKHNlbGYpOgotICAgICAgICAjIHRlc3RpbmcgIGFsbCBNQU5JRkVTVC5pbiB0ZW1wbGF0ZSBwYXR0ZXJucwotICAgICAgICBmaWxlX2xpc3QgPSBGaWxlTGlzdCgpCi0gICAgICAgIGwgPSBtYWtlX2xvY2FsX3BhdGgKLQotICAgICAgICAjIHNpbXVsYXRlZCBmaWxlIGxpc3QKLSAgICAgICAgZmlsZV9saXN0LmFsbGZpbGVzID0gWydmb28udG1wJywgJ29rJywgJ3hvJywgJ2ZvdXIudHh0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidWlsZG91dC5jZmcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWxlbGlzdCBkb2VzIG5vdCBmaWx0ZXIgb3V0IFZDUyBkaXJlY3RvcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaXQncyBzZGlzdCB0aGF0IGRvZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwoJy5oZy9sYXN0LW1lc3NhZ2UudHh0JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsKCdnbG9iYWwvb25lLnR4dCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCgnZ2xvYmFsL3R3by50eHQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwoJ2dsb2JhbC9maWxlcy54JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsKCdnbG9iYWwvaGVyZS50bXAnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwoJ2Yvby9mLm9vJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsKCdkaXIvZ3JhZnQtb25lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsKCdkaXIvZGlyMi9ncmFmdDInKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwoJ2RpcjMvb2snKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwoJ2RpcjMvc3ViL29rLnR4dCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCi0KLSAgICAgICAgZm9yIGxpbmUgaW4gTUFOSUZFU1RfSU4uc3BsaXQoJ1xuJyk6Ci0gICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkgPT0gJyc6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGZpbGVfbGlzdC5wcm9jZXNzX3RlbXBsYXRlX2xpbmUobGluZSkKLQotICAgICAgICB3YW50ZWQgPSBbJ29rJywKLSAgICAgICAgICAgICAgICAgICdidWlsZG91dC5jZmcnLAotICAgICAgICAgICAgICAgICAgJ2ZvdXIudHh0JywKLSAgICAgICAgICAgICAgICAgIGwoJy5oZy9sYXN0LW1lc3NhZ2UudHh0JyksCi0gICAgICAgICAgICAgICAgICBsKCdnbG9iYWwvb25lLnR4dCcpLAotICAgICAgICAgICAgICAgICAgbCgnZ2xvYmFsL3R3by50eHQnKSwKLSAgICAgICAgICAgICAgICAgIGwoJ2Yvby9mLm9vJyksCi0gICAgICAgICAgICAgICAgICBsKCdkaXIvZ3JhZnQtb25lJyksCi0gICAgICAgICAgICAgICAgICBsKCdkaXIvZGlyMi9ncmFmdDInKSwKLSAgICAgICAgICAgICAgICAgXQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9saXN0LmZpbGVzLCB3YW50ZWQpCi0KLSAgICBkZWYgdGVzdF9kZWJ1Z19wcmludChzZWxmKToKLSAgICAgICAgZmlsZV9saXN0ID0gRmlsZUxpc3QoKQotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIGZpbGVfbGlzdC5kZWJ1Z19wcmludCgneHh4JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJycpCi0KLSAgICAgICAgZGVidWcuREVCVUcgPSBUcnVlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgICAgIGZpbGVfbGlzdC5kZWJ1Z19wcmludCgneHh4JykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICd4eHhcbicpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBkZWJ1Zy5ERUJVRyA9IEZhbHNlCi0KLSAgICBkZWYgdGVzdF9zZXRfYWxsZmlsZXMoc2VsZik6Ci0gICAgICAgIGZpbGVfbGlzdCA9IEZpbGVMaXN0KCkKLSAgICAgICAgZmlsZXMgPSBbJ2EnLCAnYicsICdjJ10KLSAgICAgICAgZmlsZV9saXN0LnNldF9hbGxmaWxlcyhmaWxlcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2xpc3QuYWxsZmlsZXMsIGZpbGVzKQotCi0gICAgZGVmIHRlc3RfcmVtb3ZlX2R1cGxpY2F0ZXMoc2VsZik6Ci0gICAgICAgIGZpbGVfbGlzdCA9IEZpbGVMaXN0KCkKLSAgICAgICAgZmlsZV9saXN0LmZpbGVzID0gWydhJywgJ2InLCAnYScsICdnJywgJ2MnLCAnZyddCi0gICAgICAgICMgZmlsZXMgbXVzdCBiZSBzb3J0ZWQgYmVmb3JlaGFuZCAoc2Rpc3QgZG9lcyBpdCkKLSAgICAgICAgZmlsZV9saXN0LnNvcnQoKQotICAgICAgICBmaWxlX2xpc3QucmVtb3ZlX2R1cGxpY2F0ZXMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfbGlzdC5maWxlcywgWydhJywgJ2InLCAnYycsICdnJ10pCi0KLSAgICBkZWYgdGVzdF90cmFuc2xhdGVfcGF0dGVybihzZWxmKToKLSAgICAgICAgIyBub3QgcmVnZXgKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoCi0gICAgICAgICAgICB0cmFuc2xhdGVfcGF0dGVybignYScsIGFuY2hvcj1UcnVlLCBpc19yZWdleD1GYWxzZSksCi0gICAgICAgICAgICAnc2VhcmNoJykpCi0KLSAgICAgICAgIyBpcyBhIHJlZ2V4Ci0gICAgICAgIHJlZ2V4ID0gcmUuY29tcGlsZSgnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICB0cmFuc2xhdGVfcGF0dGVybihyZWdleCwgYW5jaG9yPVRydWUsIGlzX3JlZ2V4PVRydWUpLAotICAgICAgICAgICAgcmVnZXgpCi0KLSAgICAgICAgIyBwbGFpbiBzdHJpbmcgZmxhZ2dlZCBhcyByZWdleAotICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cigKLSAgICAgICAgICAgIHRyYW5zbGF0ZV9wYXR0ZXJuKCdhJywgYW5jaG9yPVRydWUsIGlzX3JlZ2V4PVRydWUpLAotICAgICAgICAgICAgJ3NlYXJjaCcpKQotCi0gICAgICAgICMgZ2xvYiBzdXBwb3J0Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc2xhdGVfcGF0dGVybigKLSAgICAgICAgICAgICcqLnB5JywgYW5jaG9yPVRydWUsIGlzX3JlZ2V4PUZhbHNlKS5zZWFyY2goJ2ZpbGVsaXN0LnB5JykpCi0KLSAgICBkZWYgdGVzdF9leGNsdWRlX3BhdHRlcm4oc2VsZik6Ci0gICAgICAgICMgcmV0dXJuIEZhbHNlIGlmIG5vIG1hdGNoCi0gICAgICAgIGZpbGVfbGlzdCA9IEZpbGVMaXN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWxlX2xpc3QuZXhjbHVkZV9wYXR0ZXJuKCcqLnB5JykpCi0KLSAgICAgICAgIyByZXR1cm4gVHJ1ZSBpZiBmaWxlcyBtYXRjaAotICAgICAgICBmaWxlX2xpc3QgPSBGaWxlTGlzdCgpCi0gICAgICAgIGZpbGVfbGlzdC5maWxlcyA9IFsnYS5weScsICdiLnB5J10KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVfbGlzdC5leGNsdWRlX3BhdHRlcm4oJyoucHknKSkKLQotICAgICAgICAjIHRlc3QgZXhjbHVkZXMKLSAgICAgICAgZmlsZV9saXN0ID0gRmlsZUxpc3QoKQotICAgICAgICBmaWxlX2xpc3QuZmlsZXMgPSBbJ2EucHknLCAnYS50eHQnXQotICAgICAgICBmaWxlX2xpc3QuZXhjbHVkZV9wYXR0ZXJuKCcqLnB5JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2xpc3QuZmlsZXMsIFsnYS50eHQnXSkKLQotICAgIGRlZiB0ZXN0X2luY2x1ZGVfcGF0dGVybihzZWxmKToKLSAgICAgICAgIyByZXR1cm4gRmFsc2UgaWYgbm8gbWF0Y2gKLSAgICAgICAgZmlsZV9saXN0ID0gRmlsZUxpc3QoKQotICAgICAgICBmaWxlX2xpc3Quc2V0X2FsbGZpbGVzKFtdKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbGVfbGlzdC5pbmNsdWRlX3BhdHRlcm4oJyoucHknKSkKLQotICAgICAgICAjIHJldHVybiBUcnVlIGlmIGZpbGVzIG1hdGNoCi0gICAgICAgIGZpbGVfbGlzdCA9IEZpbGVMaXN0KCkKLSAgICAgICAgZmlsZV9saXN0LnNldF9hbGxmaWxlcyhbJ2EucHknLCAnYi50eHQnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVfbGlzdC5pbmNsdWRlX3BhdHRlcm4oJyoucHknKSkKLQotICAgICAgICAjIHRlc3QgKiBtYXRjaGVzIGFsbCBmaWxlcwotICAgICAgICBmaWxlX2xpc3QgPSBGaWxlTGlzdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZpbGVfbGlzdC5hbGxmaWxlcykKLSAgICAgICAgZmlsZV9saXN0LnNldF9hbGxmaWxlcyhbJ2EucHknLCAnYi50eHQnXSkKLSAgICAgICAgZmlsZV9saXN0LmluY2x1ZGVfcGF0dGVybignKicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9saXN0LmFsbGZpbGVzLCBbJ2EucHknLCAnYi50eHQnXSkKLQotICAgIGRlZiB0ZXN0X3Byb2Nlc3NfdGVtcGxhdGUoc2VsZik6Ci0gICAgICAgIGwgPSBtYWtlX2xvY2FsX3BhdGgKLSAgICAgICAgIyBpbnZhbGlkIGxpbmVzCi0gICAgICAgIGZpbGVfbGlzdCA9IEZpbGVMaXN0KCkKLSAgICAgICAgZm9yIGFjdGlvbiBpbiAoJ2luY2x1ZGUnLCAnZXhjbHVkZScsICdnbG9iYWwtaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgICAgICAgICdnbG9iYWwtZXhjbHVkZScsICdyZWN1cnNpdmUtaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgICAgICAgICdyZWN1cnNpdmUtZXhjbHVkZScsICdncmFmdCcsICdwcnVuZScsICdibGFyZycpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzVGVtcGxhdGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbGlzdC5wcm9jZXNzX3RlbXBsYXRlX2xpbmUsIGFjdGlvbikKLQotICAgICAgICAjIGluY2x1ZGUKLSAgICAgICAgZmlsZV9saXN0ID0gRmlsZUxpc3QoKQotICAgICAgICBmaWxlX2xpc3Quc2V0X2FsbGZpbGVzKFsnYS5weScsICdiLnR4dCcsIGwoJ2QvYy5weScpXSkKLQotICAgICAgICBmaWxlX2xpc3QucHJvY2Vzc190ZW1wbGF0ZV9saW5lKCdpbmNsdWRlICoucHknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfbGlzdC5maWxlcywgWydhLnB5J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm9XYXJuaW5ncygpCi0KLSAgICAgICAgZmlsZV9saXN0LnByb2Nlc3NfdGVtcGxhdGVfbGluZSgnaW5jbHVkZSAqLnJiJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2xpc3QuZmlsZXMsIFsnYS5weSddKQotICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmdzKCkKLQotICAgICAgICAjIGV4Y2x1ZGUKLSAgICAgICAgZmlsZV9saXN0ID0gRmlsZUxpc3QoKQotICAgICAgICBmaWxlX2xpc3QuZmlsZXMgPSBbJ2EucHknLCAnYi50eHQnLCBsKCdkL2MucHknKV0KLQotICAgICAgICBmaWxlX2xpc3QucHJvY2Vzc190ZW1wbGF0ZV9saW5lKCdleGNsdWRlICoucHknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfbGlzdC5maWxlcywgWydiLnR4dCcsIGwoJ2QvYy5weScpXSkKLSAgICAgICAgc2VsZi5hc3NlcnROb1dhcm5pbmdzKCkKLQotICAgICAgICBmaWxlX2xpc3QucHJvY2Vzc190ZW1wbGF0ZV9saW5lKCdleGNsdWRlICoucmInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfbGlzdC5maWxlcywgWydiLnR4dCcsIGwoJ2QvYy5weScpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5ncygpCi0KLSAgICAgICAgIyBnbG9iYWwtaW5jbHVkZQotICAgICAgICBmaWxlX2xpc3QgPSBGaWxlTGlzdCgpCi0gICAgICAgIGZpbGVfbGlzdC5zZXRfYWxsZmlsZXMoWydhLnB5JywgJ2IudHh0JywgbCgnZC9jLnB5JyldKQotCi0gICAgICAgIGZpbGVfbGlzdC5wcm9jZXNzX3RlbXBsYXRlX2xpbmUoJ2dsb2JhbC1pbmNsdWRlICoucHknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfbGlzdC5maWxlcywgWydhLnB5JywgbCgnZC9jLnB5JyldKQotICAgICAgICBzZWxmLmFzc2VydE5vV2FybmluZ3MoKQotCi0gICAgICAgIGZpbGVfbGlzdC5wcm9jZXNzX3RlbXBsYXRlX2xpbmUoJ2dsb2JhbC1pbmNsdWRlICoucmInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfbGlzdC5maWxlcywgWydhLnB5JywgbCgnZC9jLnB5JyldKQotICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmdzKCkKLQotICAgICAgICAjIGdsb2JhbC1leGNsdWRlCi0gICAgICAgIGZpbGVfbGlzdCA9IEZpbGVMaXN0KCkKLSAgICAgICAgZmlsZV9saXN0LmZpbGVzID0gWydhLnB5JywgJ2IudHh0JywgbCgnZC9jLnB5JyldCi0KLSAgICAgICAgZmlsZV9saXN0LnByb2Nlc3NfdGVtcGxhdGVfbGluZSgnZ2xvYmFsLWV4Y2x1ZGUgKi5weScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9saXN0LmZpbGVzLCBbJ2IudHh0J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm9XYXJuaW5ncygpCi0KLSAgICAgICAgZmlsZV9saXN0LnByb2Nlc3NfdGVtcGxhdGVfbGluZSgnZ2xvYmFsLWV4Y2x1ZGUgKi5yYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9saXN0LmZpbGVzLCBbJ2IudHh0J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZ3MoKQotCi0gICAgICAgICMgcmVjdXJzaXZlLWluY2x1ZGUKLSAgICAgICAgZmlsZV9saXN0ID0gRmlsZUxpc3QoKQotICAgICAgICBmaWxlX2xpc3Quc2V0X2FsbGZpbGVzKFsnYS5weScsIGwoJ2QvYi5weScpLCBsKCdkL2MudHh0JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwoJ2QvZC9lLnB5JyldKQotCi0gICAgICAgIGZpbGVfbGlzdC5wcm9jZXNzX3RlbXBsYXRlX2xpbmUoJ3JlY3Vyc2l2ZS1pbmNsdWRlIGQgKi5weScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9saXN0LmZpbGVzLCBbbCgnZC9iLnB5JyksIGwoJ2QvZC9lLnB5JyldKQotICAgICAgICBzZWxmLmFzc2VydE5vV2FybmluZ3MoKQotCi0gICAgICAgIGZpbGVfbGlzdC5wcm9jZXNzX3RlbXBsYXRlX2xpbmUoJ3JlY3Vyc2l2ZS1pbmNsdWRlIGUgKi5weScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9saXN0LmZpbGVzLCBbbCgnZC9iLnB5JyksIGwoJ2QvZC9lLnB5JyldKQotICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmdzKCkKLQotICAgICAgICAjIHJlY3Vyc2l2ZS1leGNsdWRlCi0gICAgICAgIGZpbGVfbGlzdCA9IEZpbGVMaXN0KCkKLSAgICAgICAgZmlsZV9saXN0LmZpbGVzID0gWydhLnB5JywgbCgnZC9iLnB5JyksIGwoJ2QvYy50eHQnKSwgbCgnZC9kL2UucHknKV0KLQotICAgICAgICBmaWxlX2xpc3QucHJvY2Vzc190ZW1wbGF0ZV9saW5lKCdyZWN1cnNpdmUtZXhjbHVkZSBkICoucHknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfbGlzdC5maWxlcywgWydhLnB5JywgbCgnZC9jLnR4dCcpXSkKLSAgICAgICAgc2VsZi5hc3NlcnROb1dhcm5pbmdzKCkKLQotICAgICAgICBmaWxlX2xpc3QucHJvY2Vzc190ZW1wbGF0ZV9saW5lKCdyZWN1cnNpdmUtZXhjbHVkZSBlICoucHknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfbGlzdC5maWxlcywgWydhLnB5JywgbCgnZC9jLnR4dCcpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5ncygpCi0KLSAgICAgICAgIyBncmFmdAotICAgICAgICBmaWxlX2xpc3QgPSBGaWxlTGlzdCgpCi0gICAgICAgIGZpbGVfbGlzdC5zZXRfYWxsZmlsZXMoWydhLnB5JywgbCgnZC9iLnB5JyksIGwoJ2QvZC9lLnB5JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwoJ2YvZi5weScpXSkKLQotICAgICAgICBmaWxlX2xpc3QucHJvY2Vzc190ZW1wbGF0ZV9saW5lKCdncmFmdCBkJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2xpc3QuZmlsZXMsIFtsKCdkL2IucHknKSwgbCgnZC9kL2UucHknKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm9XYXJuaW5ncygpCi0KLSAgICAgICAgZmlsZV9saXN0LnByb2Nlc3NfdGVtcGxhdGVfbGluZSgnZ3JhZnQgZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9saXN0LmZpbGVzLCBbbCgnZC9iLnB5JyksIGwoJ2QvZC9lLnB5JyldKQotICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmdzKCkKLQotICAgICAgICAjIHBydW5lCi0gICAgICAgIGZpbGVfbGlzdCA9IEZpbGVMaXN0KCkKLSAgICAgICAgZmlsZV9saXN0LmZpbGVzID0gWydhLnB5JywgbCgnZC9iLnB5JyksIGwoJ2QvZC9lLnB5JyksIGwoJ2YvZi5weScpXQotCi0gICAgICAgIGZpbGVfbGlzdC5wcm9jZXNzX3RlbXBsYXRlX2xpbmUoJ3BydW5lIGQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfbGlzdC5maWxlcywgWydhLnB5JywgbCgnZi9mLnB5JyldKQotICAgICAgICBzZWxmLmFzc2VydE5vV2FybmluZ3MoKQotCi0gICAgICAgIGZpbGVfbGlzdC5wcm9jZXNzX3RlbXBsYXRlX2xpbmUoJ3BydW5lIGUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfbGlzdC5maWxlcywgWydhLnB5JywgbCgnZi9mLnB5JyldKQotICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmdzKCkKLQotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoRmlsZUxpc3RUZXN0Q2FzZSkKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTk2MTYxLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbC4iIiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBzaXRlCi0KLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZG91dCwgcnVuX3VuaXR0ZXN0Ci0KLWZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbCBpbXBvcnQgaW5zdGFsbAotZnJvbSBkaXN0dXRpbHMuY29tbWFuZCBpbXBvcnQgaW5zdGFsbCBhcyBpbnN0YWxsX21vZHVsZQotZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9leHQgaW1wb3J0IGJ1aWxkX2V4dAotZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsIGltcG9ydCBJTlNUQUxMX1NDSEVNRVMKLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNPcHRpb25FcnJvcgotZnJvbSBkaXN0dXRpbHMuZXh0ZW5zaW9uIGltcG9ydCBFeHRlbnNpb24KLQotZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLQotCi1kZWYgX21ha2VfZXh0X25hbWUobW9kbmFtZSk6Ci0gICAgaWYgb3MubmFtZSA9PSAnbnQnIGFuZCBzeXMuZXhlY3V0YWJsZS5lbmRzd2l0aCgnX2QuZXhlJyk6Ci0gICAgICAgIG1vZG5hbWUgKz0gJ19kJwotICAgIHJldHVybiBtb2RuYW1lICsgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTTycpCi0KLQotY2xhc3MgSW5zdGFsbFRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCi0gICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfaG9tZV9pbnN0YWxsYXRpb25fc2NoZW1lKHNlbGYpOgotICAgICAgICAjIFRoaXMgZW5zdXJlIHR3byB0aGluZ3M6Ci0gICAgICAgICMgLSB0aGF0IC0taG9tZSBnZW5lcmF0ZXMgdGhlIGRlc2lyZWQgc2V0IG9mIGRpcmVjdG9yeSBuYW1lcwotICAgICAgICAjIC0gdGVzdCAtLWhvbWUgaXMgc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMKLSAgICAgICAgYnVpbGRkaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBkZXN0aW5hdGlvbiA9IG9zLnBhdGguam9pbihidWlsZGRpciwgImluc3RhbGxhdGlvbiIpCi0KLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7Im5hbWUiOiAiZm9vcGtnIn0pCi0gICAgICAgICMgc2NyaXB0X25hbWUgbmVlZCBub3QgZXhpc3QsIGl0IGp1c3QgbmVlZCB0byBiZSBpbml0aWFsaXplZAotICAgICAgICBkaXN0LnNjcmlwdF9uYW1lID0gb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAic2V0dXAucHkiKQotICAgICAgICBkaXN0LmNvbW1hbmRfb2JqWyJidWlsZCJdID0gc3VwcG9ydC5EdW1teUNvbW1hbmQoCi0gICAgICAgICAgICBidWlsZF9iYXNlPWJ1aWxkZGlyLAotICAgICAgICAgICAgYnVpbGRfbGliPW9zLnBhdGguam9pbihidWlsZGRpciwgImxpYiIpLAotICAgICAgICAgICAgKQotCi0gICAgICAgIGNtZCA9IGluc3RhbGwoZGlzdCkKLSAgICAgICAgY21kLmhvbWUgPSBkZXN0aW5hdGlvbgotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuaW5zdGFsbF9iYXNlLCBkZXN0aW5hdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuaW5zdGFsbF9wbGF0YmFzZSwgZGVzdGluYXRpb24pCi0KLSAgICAgICAgZGVmIGNoZWNrX3BhdGgoZ290LCBleHBlY3RlZCk6Ci0gICAgICAgICAgICBnb3QgPSBvcy5wYXRoLm5vcm1wYXRoKGdvdCkKLSAgICAgICAgICAgIGV4cGVjdGVkID0gb3MucGF0aC5ub3JtcGF0aChleHBlY3RlZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKLQotICAgICAgICBsaWJkaXIgPSBvcy5wYXRoLmpvaW4oZGVzdGluYXRpb24sICJsaWIiLCAicHl0aG9uIikKLSAgICAgICAgY2hlY2tfcGF0aChjbWQuaW5zdGFsbF9saWIsIGxpYmRpcikKLSAgICAgICAgY2hlY2tfcGF0aChjbWQuaW5zdGFsbF9wbGF0bGliLCBsaWJkaXIpCi0gICAgICAgIGNoZWNrX3BhdGgoY21kLmluc3RhbGxfcHVyZWxpYiwgbGliZGlyKQotICAgICAgICBjaGVja19wYXRoKGNtZC5pbnN0YWxsX2hlYWRlcnMsCi0gICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGRlc3RpbmF0aW9uLCAiaW5jbHVkZSIsICJweXRob24iLCAiZm9vcGtnIikpCi0gICAgICAgIGNoZWNrX3BhdGgoY21kLmluc3RhbGxfc2NyaXB0cywgb3MucGF0aC5qb2luKGRlc3RpbmF0aW9uLCAiYmluIikpCi0gICAgICAgIGNoZWNrX3BhdGgoY21kLmluc3RhbGxfZGF0YSwgZGVzdGluYXRpb24pCi0KLSAgICBkZWYgdGVzdF91c2VyX3NpdGUoc2VsZik6Ci0gICAgICAgICMgc2l0ZS5VU0VSX1NJVEUgd2FzIGludHJvZHVjZWQgaW4gMi42Ci0gICAgICAgIGlmIHN5cy52ZXJzaW9uIDwgJzIuNic6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAjIHByZXBhcmluZyB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSB0ZXN0Ci0gICAgICAgIHNlbGYub2xkX3VzZXJfYmFzZSA9IHNpdGUuVVNFUl9CQVNFCi0gICAgICAgIHNlbGYub2xkX3VzZXJfc2l0ZSA9IHNpdGUuVVNFUl9TSVRFCi0gICAgICAgIHNlbGYudG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgc2VsZi51c2VyX2Jhc2UgPSBvcy5wYXRoLmpvaW4oc2VsZi50bXBkaXIsICdCJykKLSAgICAgICAgc2VsZi51c2VyX3NpdGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50bXBkaXIsICdTJykKLSAgICAgICAgc2l0ZS5VU0VSX0JBU0UgPSBzZWxmLnVzZXJfYmFzZQotICAgICAgICBzaXRlLlVTRVJfU0lURSA9IHNlbGYudXNlcl9zaXRlCi0gICAgICAgIGluc3RhbGxfbW9kdWxlLlVTRVJfQkFTRSA9IHNlbGYudXNlcl9iYXNlCi0gICAgICAgIGluc3RhbGxfbW9kdWxlLlVTRVJfU0lURSA9IHNlbGYudXNlcl9zaXRlCi0KLSAgICAgICAgZGVmIF9leHBhbmR1c2VyKHBhdGgpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYudG1wZGlyCi0gICAgICAgIHNlbGYub2xkX2V4cGFuZCA9IG9zLnBhdGguZXhwYW5kdXNlcgotICAgICAgICBvcy5wYXRoLmV4cGFuZHVzZXIgPSBfZXhwYW5kdXNlcgotCi0gICAgICAgIGRlZiBjbGVhbnVwKCk6Ci0gICAgICAgICAgICBzaXRlLlVTRVJfQkFTRSA9IHNlbGYub2xkX3VzZXJfYmFzZQotICAgICAgICAgICAgc2l0ZS5VU0VSX1NJVEUgPSBzZWxmLm9sZF91c2VyX3NpdGUKLSAgICAgICAgICAgIGluc3RhbGxfbW9kdWxlLlVTRVJfQkFTRSA9IHNlbGYub2xkX3VzZXJfYmFzZQotICAgICAgICAgICAgaW5zdGFsbF9tb2R1bGUuVVNFUl9TSVRFID0gc2VsZi5vbGRfdXNlcl9zaXRlCi0gICAgICAgICAgICBvcy5wYXRoLmV4cGFuZHVzZXIgPSBzZWxmLm9sZF9leHBhbmQKLQotICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCkKLQotICAgICAgICBmb3Iga2V5IGluICgnbnRfdXNlcicsICd1bml4X3VzZXInLCAnb3MyX2hvbWUnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCBJTlNUQUxMX1NDSEVNRVMpCi0KLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAneHgnfSkKLSAgICAgICAgY21kID0gaW5zdGFsbChkaXN0KQotCi0gICAgICAgICMgbWFraW5nIHN1cmUgdGhlIHVzZXIgb3B0aW9uIGlzIHRoZXJlCi0gICAgICAgIG9wdGlvbnMgPSBbbmFtZSBmb3IgbmFtZSwgc2hvcnQsIGxhYmxlIGluCi0gICAgICAgICAgICAgICAgICAgY21kLnVzZXJfb3B0aW9uc10KLSAgICAgICAgc2VsZi5hc3NlcnRJbigndXNlcicsIG9wdGlvbnMpCi0KLSAgICAgICAgIyBzZXR0aW5nIGEgdmFsdWUKLSAgICAgICAgY21kLnVzZXIgPSAxCi0KLSAgICAgICAgIyB1c2VyIGJhc2UgYW5kIHNpdGUgc2hvdWxkbid0IGJlIGNyZWF0ZWQgeWV0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi51c2VyX2Jhc2UpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNlbGYudXNlcl9zaXRlKSkKLQotICAgICAgICAjIGxldCdzIHJ1biBmaW5hbGl6ZQotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0KLSAgICAgICAgIyBub3cgdGhleSBzaG91bGQKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYudXNlcl9iYXNlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYudXNlcl9zaXRlKSkKLQotICAgICAgICBzZWxmLmFzc2VydEluKCd1c2VyYmFzZScsIGNtZC5jb25maWdfdmFycykKLSAgICAgICAgc2VsZi5hc3NlcnRJbigndXNlcnNpdGUnLCBjbWQuY29uZmlnX3ZhcnMpCi0KLSAgICBkZWYgdGVzdF9oYW5kbGVfZXh0cmFfcGF0aChzZWxmKToKLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAneHgnLCAnZXh0cmFfcGF0aCc6ICdwYXRoLGRpcnMnfSkKLSAgICAgICAgY21kID0gaW5zdGFsbChkaXN0KQotCi0gICAgICAgICMgdHdvIGVsZW1lbnRzCi0gICAgICAgIGNtZC5oYW5kbGVfZXh0cmFfcGF0aCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmV4dHJhX3BhdGgsIFsncGF0aCcsICdkaXJzJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmV4dHJhX2RpcnMsICdkaXJzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQucGF0aF9maWxlLCAncGF0aCcpCi0KLSAgICAgICAgIyBvbmUgZWxlbWVudAotICAgICAgICBjbWQuZXh0cmFfcGF0aCA9IFsncGF0aCddCi0gICAgICAgIGNtZC5oYW5kbGVfZXh0cmFfcGF0aCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmV4dHJhX3BhdGgsIFsncGF0aCddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5leHRyYV9kaXJzLCAncGF0aCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLnBhdGhfZmlsZSwgJ3BhdGgnKQotCi0gICAgICAgICMgbm9uZQotICAgICAgICBkaXN0LmV4dHJhX3BhdGggPSBjbWQuZXh0cmFfcGF0aCA9IE5vbmUKLSAgICAgICAgY21kLmhhbmRsZV9leHRyYV9wYXRoKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZXh0cmFfcGF0aCwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZXh0cmFfZGlycywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLnBhdGhfZmlsZSwgTm9uZSkKLQotICAgICAgICAjIHRocmVlIGVsZW1lbnRzIChubyB3YXkgISkKLSAgICAgICAgY21kLmV4dHJhX3BhdGggPSAncGF0aCxkaXJzLGFnYWluJwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNPcHRpb25FcnJvciwgY21kLmhhbmRsZV9leHRyYV9wYXRoKQotCi0gICAgZGVmIHRlc3RfZmluYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAneHgnfSkKLSAgICAgICAgY21kID0gaW5zdGFsbChkaXN0KQotCi0gICAgICAgICMgbXVzdCBzdXBwbHkgZWl0aGVyIHByZWZpeC9leGVjLXByZWZpeC9ob21lIG9yCi0gICAgICAgICMgaW5zdGFsbC1iYXNlL2luc3RhbGwtcGxhdGJhc2UgLS0gbm90IGJvdGgKLSAgICAgICAgY21kLnByZWZpeCA9ICdwcmVmaXgnCi0gICAgICAgIGNtZC5pbnN0YWxsX2Jhc2UgPSAnYmFzZScKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzT3B0aW9uRXJyb3IsIGNtZC5maW5hbGl6ZV9vcHRpb25zKQotCi0gICAgICAgICMgbXVzdCBzdXBwbHkgZWl0aGVyIGhvbWUgb3IgcHJlZml4L2V4ZWMtcHJlZml4IC0tIG5vdCBib3RoCi0gICAgICAgIGNtZC5pbnN0YWxsX2Jhc2UgPSBOb25lCi0gICAgICAgIGNtZC5ob21lID0gJ2hvbWUnCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc09wdGlvbkVycm9yLCBjbWQuZmluYWxpemVfb3B0aW9ucykKLQotICAgICAgICAjIGNhbid0IGNvbWJpbmUgdXNlciB3aXRoIHByZWZpeC9leGVjX3ByZWZpeC9ob21lIG9yCi0gICAgICAgICMgaW5zdGFsbF8ocGxhdCliYXNlCi0gICAgICAgIGNtZC5wcmVmaXggPSBOb25lCi0gICAgICAgIGNtZC51c2VyID0gJ3VzZXInCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc09wdGlvbkVycm9yLCBjbWQuZmluYWxpemVfb3B0aW9ucykKLQotICAgIGRlZiB0ZXN0X3JlY29yZChzZWxmKToKLSAgICAgICAgaW5zdGFsbF9kaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBwcm9qZWN0X2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QocHlfbW9kdWxlcz1bJ2hlbGxvJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRzPVsnc2F5aGknXSkKLSAgICAgICAgb3MuY2hkaXIocHJvamVjdF9kaXIpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZSgnaGVsbG8ucHknLCAiZGVmIG1haW4oKTogcHJpbnQgJ28gaGFpJyIpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZSgnc2F5aGknLCAnZnJvbSBoZWxsbyBpbXBvcnQgbWFpbjsgbWFpbigpJykKLQotICAgICAgICBjbWQgPSBpbnN0YWxsKGRpc3QpCi0gICAgICAgIGRpc3QuY29tbWFuZF9vYmpbJ2luc3RhbGwnXSA9IGNtZAotICAgICAgICBjbWQucm9vdCA9IGluc3RhbGxfZGlyCi0gICAgICAgIGNtZC5yZWNvcmQgPSBvcy5wYXRoLmpvaW4ocHJvamVjdF9kaXIsICdmaWxlbGlzdCcpCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLnJ1bigpCi0KLSAgICAgICAgZiA9IG9wZW4oY21kLnJlY29yZCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY29udGVudCA9IGYucmVhZCgpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICBmb3VuZCA9IFtvcy5wYXRoLmJhc2VuYW1lKGxpbmUpIGZvciBsaW5lIGluIGNvbnRlbnQuc3BsaXRsaW5lcygpXQotICAgICAgICBleHBlY3RlZCA9IFsnaGVsbG8ucHknLCAnaGVsbG8ucHljJywgJ3NheWhpJywKLSAgICAgICAgICAgICAgICAgICAgJ1VOS05PV04tMC4wLjAtcHklcy4lcy5lZ2ctaW5mbycgJSBzeXMudmVyc2lvbl9pbmZvWzoyXV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgZXhwZWN0ZWQpCi0KLSAgICBkZWYgdGVzdF9yZWNvcmRfZXh0ZW5zaW9ucyhzZWxmKToKLSAgICAgICAgaW5zdGFsbF9kaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBwcm9qZWN0X2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoZXh0X21vZHVsZXM9WwotICAgICAgICAgICAgRXh0ZW5zaW9uKCd4eCcsIFsneHhtb2R1bGUuYyddKV0pCi0gICAgICAgIG9zLmNoZGlyKHByb2plY3RfZGlyKQotICAgICAgICBzdXBwb3J0LmNvcHlfeHhtb2R1bGVfYyhwcm9qZWN0X2RpcikKLQotICAgICAgICBidWlsZGV4dGNtZCA9IGJ1aWxkX2V4dChkaXN0KQotICAgICAgICBzdXBwb3J0LmZpeHVwX2J1aWxkX2V4dChidWlsZGV4dGNtZCkKLSAgICAgICAgYnVpbGRleHRjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0KLSAgICAgICAgY21kID0gaW5zdGFsbChkaXN0KQotICAgICAgICBkaXN0LmNvbW1hbmRfb2JqWydpbnN0YWxsJ10gPSBjbWQKLSAgICAgICAgZGlzdC5jb21tYW5kX29ialsnYnVpbGRfZXh0J10gPSBidWlsZGV4dGNtZAotICAgICAgICBjbWQucm9vdCA9IGluc3RhbGxfZGlyCi0gICAgICAgIGNtZC5yZWNvcmQgPSBvcy5wYXRoLmpvaW4ocHJvamVjdF9kaXIsICdmaWxlbGlzdCcpCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLnJ1bigpCi0KLSAgICAgICAgZiA9IG9wZW4oY21kLnJlY29yZCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY29udGVudCA9IGYucmVhZCgpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICBmb3VuZCA9IFtvcy5wYXRoLmJhc2VuYW1lKGxpbmUpIGZvciBsaW5lIGluIGNvbnRlbnQuc3BsaXRsaW5lcygpXQotICAgICAgICBleHBlY3RlZCA9IFtfbWFrZV9leHRfbmFtZSgneHgnKSwKLSAgICAgICAgICAgICAgICAgICAgJ1VOS05PV04tMC4wLjAtcHklcy4lcy5lZ2ctaW5mbycgJSBzeXMudmVyc2lvbl9pbmZvWzoyXV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgZXhwZWN0ZWQpCi0KLSAgICBkZWYgdGVzdF9kZWJ1Z19tb2RlKHNlbGYpOgotICAgICAgICAjIHRoaXMgY292ZXJzIHRoZSBjb2RlIGNhbGxlZCB3aGVuIERFQlVHIGlzIHNldAotICAgICAgICBvbGRfbG9nc19sZW4gPSBsZW4oc2VsZi5sb2dzKQotICAgICAgICBpbnN0YWxsX21vZHVsZS5ERUJVRyA9IFRydWUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKToKLSAgICAgICAgICAgICAgICBzZWxmLnRlc3RfcmVjb3JkKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGluc3RhbGxfbW9kdWxlLkRFQlVHID0gRmFsc2UKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLmxvZ3MpID4gb2xkX2xvZ3NfbGVuKQotCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShJbnN0YWxsVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9kYXRhLnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2RhdGEucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NzU2OTQuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2RhdGEucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9kYXRhLiIiIgotaW1wb3J0IHN5cwotaW1wb3J0IG9zCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBnZXRwYXNzCi0KLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9kYXRhIGltcG9ydCBpbnN0YWxsX2RhdGEKLWZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLQotY2xhc3MgSW5zdGFsbERhdGFUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5FbnZpcm9uR3VhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X3NpbXBsZV9ydW4oc2VsZik6Ci0gICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKLSAgICAgICAgY21kID0gaW5zdGFsbF9kYXRhKGRpc3QpCi0gICAgICAgIGNtZC5pbnN0YWxsX2RpciA9IGluc3QgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ2luc3QnKQotCi0gICAgICAgICMgZGF0YV9maWxlcyBjYW4gY29udGFpbgotICAgICAgICAjICAtIHNpbXBsZSBmaWxlcwotICAgICAgICAjICAtIGEgdHVwbGUgd2l0aCBhIHBhdGgsIGFuZCBhIGxpc3Qgb2YgZmlsZQotICAgICAgICBvbmUgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ29uZScpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZShvbmUsICd4eHgnKQotICAgICAgICBpbnN0MiA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnaW5zdDInKQotICAgICAgICB0d28gPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ3R3bycpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZSh0d28sICd4eHgnKQotCi0gICAgICAgIGNtZC5kYXRhX2ZpbGVzID0gW29uZSwgKGluc3QyLCBbdHdvXSldCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmdldF9pbnB1dHMoKSwgW29uZSwgKGluc3QyLCBbdHdvXSldKQotCi0gICAgICAgICMgbGV0J3MgcnVuIHRoZSBjb21tYW5kCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLnJ1bigpCi0KLSAgICAgICAgIyBsZXQncyBjaGVjayB0aGUgcmVzdWx0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNtZC5nZXRfb3V0cHV0cygpKSwgMikKLSAgICAgICAgcnR3byA9IG9zLnBhdGguc3BsaXQodHdvKVstMV0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihpbnN0MiwgcnR3bykpKQotICAgICAgICByb25lID0gb3MucGF0aC5zcGxpdChvbmUpWy0xXQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGluc3QsIHJvbmUpKSkKLSAgICAgICAgY21kLm91dGZpbGVzID0gW10KLQotICAgICAgICAjIGxldCdzIHRyeSB3aXRoIHdhcm5fZGlyIG9uZQotICAgICAgICBjbWQud2Fybl9kaXIgPSAxCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLnJ1bigpCi0KLSAgICAgICAgIyBsZXQncyBjaGVjayB0aGUgcmVzdWx0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNtZC5nZXRfb3V0cHV0cygpKSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihpbnN0MiwgcnR3bykpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGluc3QsIHJvbmUpKSkKLSAgICAgICAgY21kLm91dGZpbGVzID0gW10KLQotICAgICAgICAjIG5vdyB1c2luZyByb290IGFuZCBlbXB0eSBkaXIKLSAgICAgICAgY21kLnJvb3QgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ3Jvb3QnKQotICAgICAgICBpbnN0MyA9IG9zLnBhdGguam9pbihjbWQuaW5zdGFsbF9kaXIsICdpbnN0MycpCi0gICAgICAgIGluc3Q0ID0gb3MucGF0aC5qb2luKHBrZ19kaXIsICdpbnN0NCcpCi0gICAgICAgIHRocmVlID0gb3MucGF0aC5qb2luKGNtZC5pbnN0YWxsX2RpciwgJ3RocmVlJykKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKHRocmVlLCAneHgnKQotICAgICAgICBjbWQuZGF0YV9maWxlcyA9IFtvbmUsIChpbnN0MiwgW3R3b10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2luc3QzJywgW3RocmVlXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChpbnN0NCwgW10pXQotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIGNtZC5ydW4oKQotCi0gICAgICAgICMgbGV0J3MgY2hlY2sgdGhlIHJlc3VsdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbWQuZ2V0X291dHB1dHMoKSksIDQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oaW5zdDIsIHJ0d28pKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihpbnN0LCByb25lKSkpCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShJbnN0YWxsRGF0YVRlc3RDYXNlKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfaGVhZGVycy5weSBiL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9oZWFkZXJzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzcyMjRiLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9oZWFkZXJzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfaGVhZGVycy4iIiIKLWltcG9ydCBzeXMKLWltcG9ydCBvcwotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgZ2V0cGFzcwotCi1mcm9tIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfaGVhZGVycyBpbXBvcnQgaW5zdGFsbF9oZWFkZXJzCi1mcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0KLWNsYXNzIEluc3RhbGxIZWFkZXJzVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuRW52aXJvbkd1YXJkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9zaW1wbGVfcnVuKHNlbGYpOgotICAgICAgICAjIHdlIGhhdmUgdHdvIGhlYWRlcnMKLSAgICAgICAgaGVhZGVyX2xpc3QgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICBoZWFkZXIxID0gb3MucGF0aC5qb2luKGhlYWRlcl9saXN0LCAnaGVhZGVyMScpCi0gICAgICAgIGhlYWRlcjIgPSBvcy5wYXRoLmpvaW4oaGVhZGVyX2xpc3QsICdoZWFkZXIyJykKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKGhlYWRlcjEpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZShoZWFkZXIyKQotICAgICAgICBoZWFkZXJzID0gW2hlYWRlcjEsIGhlYWRlcjJdCi0KLSAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoaGVhZGVycz1oZWFkZXJzKQotICAgICAgICBjbWQgPSBpbnN0YWxsX2hlYWRlcnMoZGlzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZ2V0X2lucHV0cygpLCBoZWFkZXJzKQotCi0gICAgICAgICMgbGV0J3MgcnVuIHRoZSBjb21tYW5kCi0gICAgICAgIGNtZC5pbnN0YWxsX2RpciA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnaW5zdCcpCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLnJ1bigpCi0KLSAgICAgICAgIyBsZXQncyBjaGVjayB0aGUgcmVzdWx0cwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbWQuZ2V0X291dHB1dHMoKSksIDIpCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShJbnN0YWxsSGVhZGVyc1Rlc3RDYXNlKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2xpYi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ4NjMwOC4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLSIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2RhdGEuIiIiCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfbGliIGltcG9ydCBpbnN0YWxsX2xpYgotZnJvbSBkaXN0dXRpbHMuZXh0ZW5zaW9uIGltcG9ydCBFeHRlbnNpb24KLWZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Ci1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc09wdGlvbkVycm9yCi1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLQotY2xhc3MgSW5zdGFsbExpYlRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5FbnZpcm9uR3VhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfZmluYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQotICAgICAgICBjbWQgPSBpbnN0YWxsX2xpYihkaXN0KQotCi0gICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuY29tcGlsZSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQub3B0aW1pemUsIDApCi0KLSAgICAgICAgIyBvcHRpbWl6ZSBtdXN0IGJlIDAsIDEsIG9yIDIKLSAgICAgICAgY21kLm9wdGltaXplID0gJ2ZvbycKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzT3B0aW9uRXJyb3IsIGNtZC5maW5hbGl6ZV9vcHRpb25zKQotICAgICAgICBjbWQub3B0aW1pemUgPSAnNCcKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzT3B0aW9uRXJyb3IsIGNtZC5maW5hbGl6ZV9vcHRpb25zKQotCi0gICAgICAgIGNtZC5vcHRpbWl6ZSA9ICcyJwotICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLm9wdGltaXplLCAyKQotCi0gICAgZGVmIF9zZXR1cF9ieXRlX2NvbXBpbGUoc2VsZik6Ci0gICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKLSAgICAgICAgY21kID0gaW5zdGFsbF9saWIoZGlzdCkKLSAgICAgICAgY21kLmNvbXBpbGUgPSBjbWQub3B0aW1pemUgPSAxCi0KLSAgICAgICAgZiA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnZm9vLnB5JykKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKGYsICcjIHB5dGhvbiBmaWxlJykKLSAgICAgICAgY21kLmJ5dGVfY29tcGlsZShbZl0pCi0gICAgICAgIHJldHVybiBwa2dfZGlyCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLCAnYnl0ZS1jb21waWxlIG5vdCBlbmFibGVkJykKLSAgICBkZWYgdGVzdF9ieXRlX2NvbXBpbGUoc2VsZik6Ci0gICAgICAgIHBrZ19kaXIgPSBzZWxmLl9zZXR1cF9ieXRlX2NvbXBpbGUoKQotICAgICAgICBpZiBzeXMuZmxhZ3Mub3B0aW1pemUgPCAxOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwa2dfZGlyLCAnZm9vLnB5YycpKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ2Zvby5weW8nKSkpCi0KLSAgICBkZWYgdGVzdF9nZXRfb3V0cHV0cyhzZWxmKToKLSAgICAgICAgcGtnX2RpciwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQotICAgICAgICBjbWQgPSBpbnN0YWxsX2xpYihkaXN0KQotCi0gICAgICAgICMgc2V0dGluZyB1cCBhIGRpc3QgZW52aXJvbm1lbnQKLSAgICAgICAgY21kLmNvbXBpbGUgPSBjbWQub3B0aW1pemUgPSAxCi0gICAgICAgIGNtZC5pbnN0YWxsX2RpciA9IHBrZ19kaXIKLSAgICAgICAgZiA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnZm9vLnB5JykKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKGYsICcjIHB5dGhvbiBmaWxlJykKLSAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5weV9tb2R1bGVzID0gW3BrZ19kaXJdCi0gICAgICAgIGNtZC5kaXN0cmlidXRpb24uZXh0X21vZHVsZXMgPSBbRXh0ZW5zaW9uKCdmb28nLCBbJ3h4eCddKV0KLSAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5wYWNrYWdlcyA9IFtwa2dfZGlyXQotICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLnNjcmlwdF9uYW1lID0gJ3NldHVwLnB5JwotCi0gICAgICAgICMgZ2V0X291dHB1dCBzaG91bGQgcmV0dXJuIDQgZWxlbWVudHMKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihjbWQuZ2V0X291dHB1dHMoKSkgPj0gMikKLQotICAgIGRlZiB0ZXN0X2dldF9pbnB1dHMoc2VsZik6Ci0gICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKLSAgICAgICAgY21kID0gaW5zdGFsbF9saWIoZGlzdCkKLQotICAgICAgICAjIHNldHRpbmcgdXAgYSBkaXN0IGVudmlyb25tZW50Ci0gICAgICAgIGNtZC5jb21waWxlID0gY21kLm9wdGltaXplID0gMQotICAgICAgICBjbWQuaW5zdGFsbF9kaXIgPSBwa2dfZGlyCi0gICAgICAgIGYgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ2Zvby5weScpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZShmLCAnIyBweXRob24gZmlsZScpCi0gICAgICAgIGNtZC5kaXN0cmlidXRpb24ucHlfbW9kdWxlcyA9IFtwa2dfZGlyXQotICAgICAgICBjbWQuZGlzdHJpYnV0aW9uLmV4dF9tb2R1bGVzID0gW0V4dGVuc2lvbignZm9vJywgWyd4eHgnXSldCi0gICAgICAgIGNtZC5kaXN0cmlidXRpb24ucGFja2FnZXMgPSBbcGtnX2Rpcl0KLSAgICAgICAgY21kLmRpc3RyaWJ1dGlvbi5zY3JpcHRfbmFtZSA9ICdzZXR1cC5weScKLQotICAgICAgICAjIGdldF9pbnB1dCBzaG91bGQgcmV0dXJuIDIgZWxlbWVudHMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY21kLmdldF9pbnB1dHMoKSksIDIpCi0KLSAgICBkZWYgdGVzdF9kb250X3dyaXRlX2J5dGVjb2RlKHNlbGYpOgotICAgICAgICAjIG1ha2VzIHN1cmUgYnl0ZV9jb21waWxlIGlzIG5vdCB1c2VkCi0gICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKLSAgICAgICAgY21kID0gaW5zdGFsbF9saWIoZGlzdCkKLSAgICAgICAgY21kLmNvbXBpbGUgPSAxCi0gICAgICAgIGNtZC5vcHRpbWl6ZSA9IDEKLQotICAgICAgICBvbGRfZG9udF93cml0ZV9ieXRlY29kZSA9IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlCi0gICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gVHJ1ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjbWQuYnl0ZV9jb21waWxlKFtdKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBvbGRfZG9udF93cml0ZV9ieXRlY29kZQotCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYnl0ZS1jb21waWxpbmcgaXMgZGlzYWJsZWQnIGluIHNlbGYubG9nc1swXVsxXSkKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEluc3RhbGxMaWJUZXN0Q2FzZSkKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX3NjcmlwdHMucHkgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfc2NyaXB0cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYwODU0NS4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfc2NyaXB0cy5weQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLSIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX3NjcmlwdHMuIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHVuaXR0ZXN0Ci0KLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9zY3JpcHRzIGltcG9ydCBpbnN0YWxsX3NjcmlwdHMKLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgotCi1mcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0KLQotY2xhc3MgSW5zdGFsbFNjcmlwdHNUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkxvZ2dpbmdTaWxlbmNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfZGVmYXVsdF9zZXR0aW5ncyhzZWxmKToKLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbigpCi0gICAgICAgIGRpc3QuY29tbWFuZF9vYmpbImJ1aWxkIl0gPSBzdXBwb3J0LkR1bW15Q29tbWFuZCgKLSAgICAgICAgICAgIGJ1aWxkX3NjcmlwdHM9Ii9mb28vYmFyIikKLSAgICAgICAgZGlzdC5jb21tYW5kX29ialsiaW5zdGFsbCJdID0gc3VwcG9ydC5EdW1teUNvbW1hbmQoCi0gICAgICAgICAgICBpbnN0YWxsX3NjcmlwdHM9Ii9zcGxhdC9mdW5rIiwKLSAgICAgICAgICAgIGZvcmNlPTEsCi0gICAgICAgICAgICBza2lwX2J1aWxkPTEsCi0gICAgICAgICAgICApCi0gICAgICAgIGNtZCA9IGluc3RhbGxfc2NyaXB0cyhkaXN0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNtZC5mb3JjZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjbWQuc2tpcF9idWlsZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtZC5idWlsZF9kaXIgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtZC5pbnN0YWxsX2RpciBpcyBOb25lKQotCi0gICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKLQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY21kLmZvcmNlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY21kLnNraXBfYnVpbGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmJ1aWxkX2RpciwgIi9mb28vYmFyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuaW5zdGFsbF9kaXIsICIvc3BsYXQvZnVuayIpCi0KLSAgICBkZWYgdGVzdF9pbnN0YWxsYXRpb24oc2VsZik6Ci0gICAgICAgIHNvdXJjZSA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIGV4cGVjdGVkID0gW10KLQotICAgICAgICBkZWYgd3JpdGVfc2NyaXB0KG5hbWUsIHRleHQpOgotICAgICAgICAgICAgZXhwZWN0ZWQuYXBwZW5kKG5hbWUpCi0gICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc291cmNlLCBuYW1lKSwgInciKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0KLSAgICAgICAgd3JpdGVfc2NyaXB0KCJzY3JpcHQxLnB5IiwgKCIjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMi4zXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIyBib2d1cyBzY3JpcHQgdy8gUHl0aG9uIHNoLWJhbmdcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXNzXG4iKSkKLSAgICAgICAgd3JpdGVfc2NyaXB0KCJzY3JpcHQyLnB5IiwgKCIjIS91c3IvYmluL3B5dGhvblxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiMgYm9ndXMgc2NyaXB0IHcvIFB5dGhvbiBzaC1iYW5nXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFzc1xuIikpCi0gICAgICAgIHdyaXRlX3NjcmlwdCgic2hlbGwuc2giLCAoIiMhL2Jpbi9zaFxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjIGJvZ3VzIHNoZWxsIHNjcmlwdCB3LyBzaC1iYW5nXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4aXQgMFxuIikpCi0KLSAgICAgICAgdGFyZ2V0ID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbigpCi0gICAgICAgIGRpc3QuY29tbWFuZF9vYmpbImJ1aWxkIl0gPSBzdXBwb3J0LkR1bW15Q29tbWFuZChidWlsZF9zY3JpcHRzPXNvdXJjZSkKLSAgICAgICAgZGlzdC5jb21tYW5kX29ialsiaW5zdGFsbCJdID0gc3VwcG9ydC5EdW1teUNvbW1hbmQoCi0gICAgICAgICAgICBpbnN0YWxsX3NjcmlwdHM9dGFyZ2V0LAotICAgICAgICAgICAgZm9yY2U9MSwKLSAgICAgICAgICAgIHNraXBfYnVpbGQ9MSwKLSAgICAgICAgICAgICkKLSAgICAgICAgY21kID0gaW5zdGFsbF9zY3JpcHRzKGRpc3QpCi0gICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKLSAgICAgICAgY21kLnJ1bigpCi0KLSAgICAgICAgaW5zdGFsbGVkID0gb3MubGlzdGRpcih0YXJnZXQpCi0gICAgICAgIGZvciBuYW1lIGluIGV4cGVjdGVkOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUgaW4gaW5zdGFsbGVkKQotCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShJbnN0YWxsU2NyaXB0c1Rlc3RDYXNlKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X21zdmM5Y29tcGlsZXIucHkgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X21zdmM5Y29tcGlsZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkOTRhMTEuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9tc3ZjOWNvbXBpbGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLSIiIlRlc3RzIGZvciBkaXN0dXRpbHMubXN2Yzljb21waWxlci4iIiIKLWltcG9ydCBzeXMKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9zCi0KLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcgotZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotCi0jIEEgbWFuaWZlc3Qgd2l0aCB0aGUgb25seSBhc3NlbWJseSByZWZlcmVuY2UgYmVpbmcgdGhlIG1zdmNydCBhc3NlbWJseSwgc28KLSMgc2hvdWxkIGhhdmUgdGhlIGFzc2VtYmx5IGNvbXBsZXRlbHkgc3RyaXBwZWQuICBOb3RlIHRoYXQgYWx0aG91Z2ggdGhlCi0jIGFzc2VtYmx5IGhhcyBhIDxzZWN1cml0eT4gcmVmZXJlbmNlIHRoZSBhc3NlbWJseSBpcyByZW1vdmVkIC0gdGhhdCBpcwotIyBjdXJyZW50bHkgYSAiZmVhdHVyZSIsIG5vdCBhIGJ1ZyA6KQotX01BTklGRVNUX1dJVEhfT05MWV9NU1ZDX1JFRkVSRU5DRSA9ICIiIlwKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KLTxhc3NlbWJseSB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjEiCi0gICAgICAgICAgbWFuaWZlc3RWZXJzaW9uPSIxLjAiPgotICA8dHJ1c3RJbmZvIHhtbG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmFzbS52MyI+Ci0gICAgPHNlY3VyaXR5PgotICAgICAgPHJlcXVlc3RlZFByaXZpbGVnZXM+Ci0gICAgICAgIDxyZXF1ZXN0ZWRFeGVjdXRpb25MZXZlbCBsZXZlbD0iYXNJbnZva2VyIiB1aUFjY2Vzcz0iZmFsc2UiPgotICAgICAgICA8L3JlcXVlc3RlZEV4ZWN1dGlvbkxldmVsPgotICAgICAgPC9yZXF1ZXN0ZWRQcml2aWxlZ2VzPgotICAgIDwvc2VjdXJpdHk+Ci0gIDwvdHJ1c3RJbmZvPgotICA8ZGVwZW5kZW5jeT4KLSAgICA8ZGVwZW5kZW50QXNzZW1ibHk+Ci0gICAgICA8YXNzZW1ibHlJZGVudGl0eSB0eXBlPSJ3aW4zMiIgbmFtZT0iTWljcm9zb2Z0LlZDOTAuQ1JUIgotICAgICAgICAgdmVyc2lvbj0iOS4wLjIxMDIyLjgiIHByb2Nlc3NvckFyY2hpdGVjdHVyZT0ieDg2IgotICAgICAgICAgcHVibGljS2V5VG9rZW49IlhYWFgiPgotICAgICAgPC9hc3NlbWJseUlkZW50aXR5PgotICAgIDwvZGVwZW5kZW50QXNzZW1ibHk+Ci0gIDwvZGVwZW5kZW5jeT4KLTwvYXNzZW1ibHk+Ci0iIiIKLQotIyBBIG1hbmlmZXN0IHdpdGggcmVmZXJlbmNlcyB0byBhc3NlbWJsaWVzIG90aGVyIHRoYW4gbXN2Y3J0LiAgV2hlbiBwcm9jZXNzZWQsCi0jIHRoaXMgYXNzZW1ibHkgc2hvdWxkIGJlIHJldHVybmVkIHdpdGgganVzdCB0aGUgbXN2Y3J0IHBhcnQgcmVtb3ZlZC4KLV9NQU5JRkVTVF9XSVRIX01VTFRJUExFX1JFRkVSRU5DRVMgPSAiIiJcCi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+Ci08YXNzZW1ibHkgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYxIgotICAgICAgICAgIG1hbmlmZXN0VmVyc2lvbj0iMS4wIj4KLSAgPHRydXN0SW5mbyB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjMiPgotICAgIDxzZWN1cml0eT4KLSAgICAgIDxyZXF1ZXN0ZWRQcml2aWxlZ2VzPgotICAgICAgICA8cmVxdWVzdGVkRXhlY3V0aW9uTGV2ZWwgbGV2ZWw9ImFzSW52b2tlciIgdWlBY2Nlc3M9ImZhbHNlIj4KLSAgICAgICAgPC9yZXF1ZXN0ZWRFeGVjdXRpb25MZXZlbD4KLSAgICAgIDwvcmVxdWVzdGVkUHJpdmlsZWdlcz4KLSAgICA8L3NlY3VyaXR5PgotICA8L3RydXN0SW5mbz4KLSAgPGRlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVudEFzc2VtYmx5PgotICAgICAgPGFzc2VtYmx5SWRlbnRpdHkgdHlwZT0id2luMzIiIG5hbWU9Ik1pY3Jvc29mdC5WQzkwLkNSVCIKLSAgICAgICAgIHZlcnNpb249IjkuMC4yMTAyMi44IiBwcm9jZXNzb3JBcmNoaXRlY3R1cmU9Ing4NiIKLSAgICAgICAgIHB1YmxpY0tleVRva2VuPSJYWFhYIj4KLSAgICAgIDwvYXNzZW1ibHlJZGVudGl0eT4KLSAgICA8L2RlcGVuZGVudEFzc2VtYmx5PgotICA8L2RlcGVuZGVuY3k+Ci0gIDxkZXBlbmRlbmN5PgotICAgIDxkZXBlbmRlbnRBc3NlbWJseT4KLSAgICAgIDxhc3NlbWJseUlkZW50aXR5IHR5cGU9IndpbjMyIiBuYW1lPSJNaWNyb3NvZnQuVkM5MC5NRkMiCi0gICAgICAgIHZlcnNpb249IjkuMC4yMTAyMi44IiBwcm9jZXNzb3JBcmNoaXRlY3R1cmU9Ing4NiIKLSAgICAgICAgcHVibGljS2V5VG9rZW49IlhYWFgiPjwvYXNzZW1ibHlJZGVudGl0eT4KLSAgICA8L2RlcGVuZGVudEFzc2VtYmx5PgotICA8L2RlcGVuZGVuY3k+Ci08L2Fzc2VtYmx5PgotIiIiCi0KLV9DTEVBTkVEX01BTklGRVNUID0gIiIiXAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PgotPGFzc2VtYmx5IHhtbG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOmFzbS52MSIKLSAgICAgICAgICBtYW5pZmVzdFZlcnNpb249IjEuMCI+Ci0gIDx0cnVzdEluZm8geG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYzIj4KLSAgICA8c2VjdXJpdHk+Ci0gICAgICA8cmVxdWVzdGVkUHJpdmlsZWdlcz4KLSAgICAgICAgPHJlcXVlc3RlZEV4ZWN1dGlvbkxldmVsIGxldmVsPSJhc0ludm9rZXIiIHVpQWNjZXNzPSJmYWxzZSI+Ci0gICAgICAgIDwvcmVxdWVzdGVkRXhlY3V0aW9uTGV2ZWw+Ci0gICAgICA8L3JlcXVlc3RlZFByaXZpbGVnZXM+Ci0gICAgPC9zZWN1cml0eT4KLSAgPC90cnVzdEluZm8+Ci0gIDxkZXBlbmRlbmN5PgotCi0gIDwvZGVwZW5kZW5jeT4KLSAgPGRlcGVuZGVuY3k+Ci0gICAgPGRlcGVuZGVudEFzc2VtYmx5PgotICAgICAgPGFzc2VtYmx5SWRlbnRpdHkgdHlwZT0id2luMzIiIG5hbWU9Ik1pY3Jvc29mdC5WQzkwLk1GQyIKLSAgICAgICAgdmVyc2lvbj0iOS4wLjIxMDIyLjgiIHByb2Nlc3NvckFyY2hpdGVjdHVyZT0ieDg2IgotICAgICAgICBwdWJsaWNLZXlUb2tlbj0iWFhYWCI+PC9hc3NlbWJseUlkZW50aXR5PgotICAgIDwvZGVwZW5kZW50QXNzZW1ibHk+Ci0gIDwvZGVwZW5kZW5jeT4KLTwvYXNzZW1ibHk+IiIiCi0KLWlmIHN5cy5wbGF0Zm9ybT09IndpbjMyIjoKLSAgICBmcm9tIGRpc3R1dGlscy5tc3ZjY29tcGlsZXIgaW1wb3J0IGdldF9idWlsZF92ZXJzaW9uCi0gICAgaWYgZ2V0X2J1aWxkX3ZlcnNpb24oKT49OC4wOgotICAgICAgICBTS0lQX01FU1NBR0UgPSBOb25lCi0gICAgZWxzZToKLSAgICAgICAgU0tJUF9NRVNTQUdFID0gIlRoZXNlIHRlc3RzIGFyZSBvbmx5IGZvciBNU1ZDOC4wIG9yIGFib3ZlIgotZWxzZToKLSAgICBTS0lQX01FU1NBR0UgPSAiVGhlc2UgdGVzdHMgYXJlIG9ubHkgZm9yIHdpbjMyIgotCi1AdW5pdHRlc3Quc2tpcFVubGVzcyhTS0lQX01FU1NBR0UgaXMgTm9uZSwgU0tJUF9NRVNTQUdFKQotY2xhc3MgbXN2Yzljb21waWxlclRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3Rfbm9fY29tcGlsZXIoc2VsZik6Ci0gICAgICAgICMgbWFrZXMgc3VyZSBxdWVyeV92Y3ZhcnNhbGwgcmFpc2VzCi0gICAgICAgICMgYSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yIGlmIHRoZSBjb21waWxlcgotICAgICAgICAjIGlzIG5vdCBmb3VuZAotICAgICAgICBmcm9tIGRpc3R1dGlscy5tc3ZjOWNvbXBpbGVyIGltcG9ydCBxdWVyeV92Y3ZhcnNhbGwKLSAgICAgICAgZGVmIF9maW5kX3ZjdmFyc2FsbCh2ZXJzaW9uKToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IG1zdmM5Y29tcGlsZXIKLSAgICAgICAgb2xkX2ZpbmRfdmN2YXJzYWxsID0gbXN2Yzljb21waWxlci5maW5kX3ZjdmFyc2FsbAotICAgICAgICBtc3ZjOWNvbXBpbGVyLmZpbmRfdmN2YXJzYWxsID0gX2ZpbmRfdmN2YXJzYWxsCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsIHF1ZXJ5X3ZjdmFyc2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dvbnQgZmluZCB0aGlzIHZlcnNpb24nKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgbXN2Yzljb21waWxlci5maW5kX3ZjdmFyc2FsbCA9IG9sZF9maW5kX3ZjdmFyc2FsbAotCi0gICAgZGVmIHRlc3RfcmVnX2NsYXNzKHNlbGYpOgotICAgICAgICBmcm9tIGRpc3R1dGlscy5tc3ZjOWNvbXBpbGVyIGltcG9ydCBSZWcKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIFJlZy5nZXRfdmFsdWUsICd4eHgnLCAneHh4JykKLQotICAgICAgICAjIGxvb2tpbmcgZm9yIHZhbHVlcyB0aGF0IHNob3VsZCBleGlzdCBvbiBhbGwKLSAgICAgICAgIyB3aW5kb3dzIHJlZ2lzdGVyaWVzIHZlcnNpb25zLgotICAgICAgICBwYXRoID0gcidDb250cm9sIFBhbmVsXERlc2t0b3AnCi0gICAgICAgIHYgPSBSZWcuZ2V0X3ZhbHVlKHBhdGgsIHUnZHJhZ2Z1bGx3aW5kb3dzJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYgaW4gKHUnMCcsIHUnMScsIHUnMicpKQotCi0gICAgICAgIGltcG9ydCBfd2lucmVnCi0gICAgICAgIEhLQ1UgPSBfd2lucmVnLkhLRVlfQ1VSUkVOVF9VU0VSCi0gICAgICAgIGtleXMgPSBSZWcucmVhZF9rZXlzKEhLQ1UsICd4eHh4JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBOb25lKQotCi0gICAgICAgIGtleXMgPSBSZWcucmVhZF9rZXlzKEhLQ1UsIHInQ29udHJvbCBQYW5lbCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRGVza3RvcCcgaW4ga2V5cykKLQotICAgIGRlZiB0ZXN0X3JlbW92ZV92aXN1YWxfY19yZWYoc2VsZik6Ci0gICAgICAgIGZyb20gZGlzdHV0aWxzLm1zdmM5Y29tcGlsZXIgaW1wb3J0IE1TVkNDb21waWxlcgotICAgICAgICB0ZW1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ21hbmlmZXN0JykKLSAgICAgICAgZiA9IG9wZW4obWFuaWZlc3QsICd3JykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZi53cml0ZShfTUFOSUZFU1RfV0lUSF9NVUxUSVBMRV9SRUZFUkVOQ0VTKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCi0KLSAgICAgICAgY29tcGlsZXIgPSBNU1ZDQ29tcGlsZXIoKQotICAgICAgICBjb21waWxlci5fcmVtb3ZlX3Zpc3VhbF9jX3JlZihtYW5pZmVzdCkKLQotICAgICAgICAjIHNlZSB3aGF0IHdlIGdvdAotICAgICAgICBmID0gb3BlbihtYW5pZmVzdCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyByZW1vdmluZyB0cmFpbGluZyBzcGFjZXMKLSAgICAgICAgICAgIGNvbnRlbnQgPSAnXG4nLmpvaW4oW2xpbmUucnN0cmlwKCkgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKV0pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICAjIG1ha2VzIHN1cmUgdGhlIG1hbmlmZXN0IHdhcyBwcm9wZXJseSBjbGVhbmVkCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudCwgX0NMRUFORURfTUFOSUZFU1QpCi0KLSAgICBkZWYgdGVzdF9yZW1vdmVfZW50aXJlX21hbmlmZXN0KHNlbGYpOgotICAgICAgICBmcm9tIGRpc3R1dGlscy5tc3ZjOWNvbXBpbGVyIGltcG9ydCBNU1ZDQ29tcGlsZXIKLSAgICAgICAgdGVtcGRpciA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIG1hbmlmZXN0ID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdtYW5pZmVzdCcpCi0gICAgICAgIGYgPSBvcGVuKG1hbmlmZXN0LCAndycpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGYud3JpdGUoX01BTklGRVNUX1dJVEhfT05MWV9NU1ZDX1JFRkVSRU5DRSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgICAgIGNvbXBpbGVyID0gTVNWQ0NvbXBpbGVyKCkKLSAgICAgICAgZ290ID0gY29tcGlsZXIuX3JlbW92ZV92aXN1YWxfY19yZWYobWFuaWZlc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMoZ290LCBOb25lKQotCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShtc3ZjOWNvbXBpbGVyVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfcmVnaXN0ZXIucHkgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X3JlZ2lzdGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjM0YjE4Li4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfcmVnaXN0ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyOTAgKzAsMCBAQAotIyAtKi0gZW5jb2Rpbmc6IHV0ZjggLSotCi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQucmVnaXN0ZXIuIiIiCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IGdldHBhc3MKLWltcG9ydCB1cmxsaWIyCi1pbXBvcnQgd2FybmluZ3MKLQotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2hlY2tfd2FybmluZ3MsIHJ1bl91bml0dGVzdAotCi1mcm9tIGRpc3R1dGlscy5jb21tYW5kIGltcG9ydCByZWdpc3RlciBhcyByZWdpc3Rlcl9tb2R1bGUKLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQucmVnaXN0ZXIgaW1wb3J0IHJlZ2lzdGVyCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1NldHVwRXJyb3IKLQotZnJvbSBkaXN0dXRpbHMudGVzdHMudGVzdF9jb25maWcgaW1wb3J0IFB5UElSQ0NvbW1hbmRUZXN0Q2FzZQotCi10cnk6Ci0gICAgaW1wb3J0IGRvY3V0aWxzCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgZG9jdXRpbHMgPSBOb25lCi0KLVBZUElSQ19OT1BBU1NXT1JEID0gIiIiXAotW2Rpc3R1dGlsc10KLQotaW5kZXgtc2VydmVycyA9Ci0gICAgc2VydmVyMQotCi1bc2VydmVyMV0KLXVzZXJuYW1lOm1lCi0iIiIKLQotV0FOVEVEX1BZUElSQyA9ICIiIlwKLVtkaXN0dXRpbHNdCi1pbmRleC1zZXJ2ZXJzID0KLSAgICBweXBpCi0KLVtweXBpXQotdXNlcm5hbWU6dGFyZWsKLXBhc3N3b3JkOnBhc3N3b3JkCi0iIiIKLQotY2xhc3MgUmF3SW5wdXRzKG9iamVjdCk6Ci0gICAgIiIiRmFrZXMgdXNlciBpbnB1dHMuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICphbnN3ZXJzKToKLSAgICAgICAgc2VsZi5hbnN3ZXJzID0gYW5zd2VycwotICAgICAgICBzZWxmLmluZGV4ID0gMAotCi0gICAgZGVmIF9fY2FsbF9fKHNlbGYsIHByb21wdD0nJyk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmFuc3dlcnNbc2VsZi5pbmRleF0KLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuaW5kZXggKz0gMQotCi1jbGFzcyBGYWtlT3BlbmVyKG9iamVjdCk6Ci0gICAgIiIiRmFrZXMgYSBQeVBJIHNlcnZlciIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5yZXFzID0gW10KLQotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgb3BlbihzZWxmLCByZXEpOgotICAgICAgICBzZWxmLnJlcXMuYXBwZW5kKHJlcSkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiByZWFkKHNlbGYpOgotICAgICAgICByZXR1cm4gJ3h4eCcKLQotY2xhc3MgUmVnaXN0ZXJUZXN0Q2FzZShQeVBJUkNDb21tYW5kVGVzdENhc2UpOgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzdXBlcihSZWdpc3RlclRlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCi0gICAgICAgICMgcGF0Y2hpbmcgdGhlIHBhc3N3b3JkIHByb21wdAotICAgICAgICBzZWxmLl9vbGRfZ2V0cGFzcyA9IGdldHBhc3MuZ2V0cGFzcwotICAgICAgICBkZWYgX2dldHBhc3MocHJvbXB0KToKLSAgICAgICAgICAgIHJldHVybiAncGFzc3dvcmQnCi0gICAgICAgIGdldHBhc3MuZ2V0cGFzcyA9IF9nZXRwYXNzCi0gICAgICAgIHNlbGYub2xkX29wZW5lciA9IHVybGxpYjIuYnVpbGRfb3BlbmVyCi0gICAgICAgIHNlbGYuY29ubiA9IHVybGxpYjIuYnVpbGRfb3BlbmVyID0gRmFrZU9wZW5lcigpCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIGdldHBhc3MuZ2V0cGFzcyA9IHNlbGYuX29sZF9nZXRwYXNzCi0gICAgICAgIHVybGxpYjIuYnVpbGRfb3BlbmVyID0gc2VsZi5vbGRfb3BlbmVyCi0gICAgICAgIHN1cGVyKFJlZ2lzdGVyVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKLQotICAgIGRlZiBfZ2V0X2NtZChzZWxmLCBtZXRhZGF0YT1Ob25lKToKLSAgICAgICAgaWYgbWV0YWRhdGEgaXMgTm9uZToKLSAgICAgICAgICAgIG1ldGFkYXRhID0geyd1cmwnOiAneHh4JywgJ2F1dGhvcic6ICd4eHgnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICd4eHgnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAneHh4JywgJ3ZlcnNpb24nOiAneHh4J30KLSAgICAgICAgcGtnX2luZm8sIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCoqbWV0YWRhdGEpCi0gICAgICAgIHJldHVybiByZWdpc3RlcihkaXN0KQotCi0gICAgZGVmIHRlc3RfY3JlYXRlX3B5cGlyYyhzZWxmKToKLSAgICAgICAgIyB0aGlzIHRlc3QgbWFrZXMgc3VyZSBhIC5weXBpcmMgZmlsZQotICAgICAgICAjIGlzIGNyZWF0ZWQgd2hlbiByZXF1ZXN0ZWQuCi0KLSAgICAgICAgIyBsZXQncyBjcmVhdGUgYSByZWdpc3RlciBpbnN0YW5jZQotICAgICAgICBjbWQgPSBzZWxmLl9nZXRfY21kKCkKLQotICAgICAgICAjIHdlIHNob3VsZG4ndCBoYXZlIGEgLnB5cGlyYyBmaWxlIHlldAotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHNlbGYucmMpKQotCi0gICAgICAgICMgcGF0Y2hpbmcgcmF3X2lucHV0IGFuZCBnZXRwYXNzLmdldHBhc3MKLSAgICAgICAgIyBzbyByZWdpc3RlciBnZXRzIGhhcHB5Ci0gICAgICAgICMKLSAgICAgICAgIyBIZXJlJ3Mgd2hhdCB3ZSBhcmUgZmFraW5nIDoKLSAgICAgICAgIyB1c2UgeW91ciBleGlzdGluZyBsb2dpbiAoY2hvaWNlIDEuKQotICAgICAgICAjIFVzZXJuYW1lIDogJ3RhcmVrJwotICAgICAgICAjIFBhc3N3b3JkIDogJ3Bhc3N3b3JkJwotICAgICAgICAjIFNhdmUgeW91ciBsb2dpbiAoeS9OKT8gOiAneScKLSAgICAgICAgaW5wdXRzID0gUmF3SW5wdXRzKCcxJywgJ3RhcmVrJywgJ3knKQotICAgICAgICByZWdpc3Rlcl9tb2R1bGUucmF3X2lucHV0ID0gaW5wdXRzLl9fY2FsbF9fCi0gICAgICAgICMgbGV0J3MgcnVuIHRoZSBjb21tYW5kCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNtZC5ydW4oKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZGVsIHJlZ2lzdGVyX21vZHVsZS5yYXdfaW5wdXQKLQotICAgICAgICAjIHdlIHNob3VsZCBoYXZlIGEgYnJhbmQgbmV3IC5weXBpcmMgZmlsZQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5yYykpCi0KLSAgICAgICAgIyB3aXRoIHRoZSBjb250ZW50IHNpbWlsYXIgdG8gV0FOVEVEX1BZUElSQwotICAgICAgICBmID0gb3BlbihzZWxmLnJjKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjb250ZW50ID0gZi5yZWFkKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudCwgV0FOVEVEX1BZUElSQykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgICAgICMgbm93IGxldCdzIG1ha2Ugc3VyZSB0aGUgLnB5cGlyYyBmaWxlIGdlbmVyYXRlZAotICAgICAgICAjIHJlYWxseSB3b3JrcyA6IHdlIHNob3VsZG4ndCBiZSBhc2tlZCBhbnl0aGluZwotICAgICAgICAjIGlmIHdlIHJ1biB0aGUgY29tbWFuZCBhZ2FpbgotICAgICAgICBkZWYgX25vX3dheShwcm9tcHQ9JycpOgotICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IocHJvbXB0KQotICAgICAgICByZWdpc3Rlcl9tb2R1bGUucmF3X2lucHV0ID0gX25vX3dheQotCi0gICAgICAgIGNtZC5zaG93X3Jlc3BvbnNlID0gMQotICAgICAgICBjbWQucnVuKCkKLQotICAgICAgICAjIGxldCdzIHNlZSB3aGF0IHRoZSBzZXJ2ZXIgcmVjZWl2ZWQgOiB3ZSBzaG91bGQKLSAgICAgICAgIyBoYXZlIDIgc2ltaWxhciByZXF1ZXN0cwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmNvbm4ucmVxcyksIDIpCi0gICAgICAgIHJlcTEgPSBkaWN0KHNlbGYuY29ubi5yZXFzWzBdLmhlYWRlcnMpCi0gICAgICAgIHJlcTIgPSBkaWN0KHNlbGYuY29ubi5yZXFzWzFdLmhlYWRlcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxMlsnQ29udGVudC1sZW5ndGgnXSwgcmVxMVsnQ29udGVudC1sZW5ndGgnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd4eHgnIGluIHNlbGYuY29ubi5yZXFzWzFdLmRhdGEpCi0KLSAgICBkZWYgdGVzdF9wYXNzd29yZF9ub3RfaW5fZmlsZShzZWxmKToKLQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoc2VsZi5yYywgUFlQSVJDX05PUEFTU1dPUkQpCi0gICAgICAgIGNtZCA9IHNlbGYuX2dldF9jbWQoKQotICAgICAgICBjbWQuX3NldF9jb25maWcoKQotICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIGNtZC5zZW5kX21ldGFkYXRhKCkKLQotICAgICAgICAjIGRpc3QucGFzc3dvcmQgc2hvdWxkIGJlIHNldAotICAgICAgICAjIHRoZXJlZm9yZSB1c2VkIGFmdGVyd2FyZHMgYnkgb3RoZXIgY29tbWFuZHMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZGlzdHJpYnV0aW9uLnBhc3N3b3JkLCAncGFzc3dvcmQnKQotCi0gICAgZGVmIHRlc3RfcmVnaXN0ZXJpbmcoc2VsZik6Ci0gICAgICAgICMgdGhpcyB0ZXN0IHJ1bnMgY2hvaWNlIDIKLSAgICAgICAgY21kID0gc2VsZi5fZ2V0X2NtZCgpCi0gICAgICAgIGlucHV0cyA9IFJhd0lucHV0cygnMicsICd0YXJlaycsICd0YXJla0B6aWFkZS5vcmcnKQotICAgICAgICByZWdpc3Rlcl9tb2R1bGUucmF3X2lucHV0ID0gaW5wdXRzLl9fY2FsbF9fCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgbGV0J3MgcnVuIHRoZSBjb21tYW5kCi0gICAgICAgICAgICBjbWQucnVuKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGRlbCByZWdpc3Rlcl9tb2R1bGUucmF3X2lucHV0Ci0KLSAgICAgICAgIyB3ZSBzaG91bGQgaGF2ZSBzZW5kIGEgcmVxdWVzdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmNvbm4ucmVxcyksIDEpCi0gICAgICAgIHJlcSA9IHNlbGYuY29ubi5yZXFzWzBdCi0gICAgICAgIGhlYWRlcnMgPSBkaWN0KHJlcS5oZWFkZXJzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYWRlcnNbJ0NvbnRlbnQtbGVuZ3RoJ10sICc2MDgnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3RhcmVrJyBpbiByZXEuZGF0YSkKLQotICAgIGRlZiB0ZXN0X3Bhc3N3b3JkX3Jlc2V0KHNlbGYpOgotICAgICAgICAjIHRoaXMgdGVzdCBydW5zIGNob2ljZSAzCi0gICAgICAgIGNtZCA9IHNlbGYuX2dldF9jbWQoKQotICAgICAgICBpbnB1dHMgPSBSYXdJbnB1dHMoJzMnLCAndGFyZWtAemlhZGUub3JnJykKLSAgICAgICAgcmVnaXN0ZXJfbW9kdWxlLnJhd19pbnB1dCA9IGlucHV0cy5fX2NhbGxfXwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIGxldCdzIHJ1biB0aGUgY29tbWFuZAotICAgICAgICAgICAgY21kLnJ1bigpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBkZWwgcmVnaXN0ZXJfbW9kdWxlLnJhd19pbnB1dAotCi0gICAgICAgICMgd2Ugc2hvdWxkIGhhdmUgc2VuZCBhIHJlcXVlc3QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5jb25uLnJlcXMpLCAxKQotICAgICAgICByZXEgPSBzZWxmLmNvbm4ucmVxc1swXQotICAgICAgICBoZWFkZXJzID0gZGljdChyZXEuaGVhZGVycykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFkZXJzWydDb250ZW50LWxlbmd0aCddLCAnMjkwJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd0YXJlaycgaW4gcmVxLmRhdGEpCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhkb2N1dGlscyBpcyBub3QgTm9uZSwgJ25lZWRzIGRvY3V0aWxzJykKLSAgICBkZWYgdGVzdF9zdHJpY3Qoc2VsZik6Ci0gICAgICAgICMgdGVzdGluZyB0aGUgc2NyaXB0IG9wdGlvbgotICAgICAgICAjIHdoZW4gb24sIHRoZSByZWdpc3RlciBjb21tYW5kIHN0b3BzIGlmCi0gICAgICAgICMgdGhlIG1ldGFkYXRhIGlzIGluY29tcGxldGUgb3IgaWYKLSAgICAgICAgIyBsb25nX2Rlc2NyaXB0aW9uIGlzIG5vdCByZVN0IGNvbXBsaWFudAotCi0gICAgICAgICMgZW1wdHkgbWV0YWRhdGEKLSAgICAgICAgY21kID0gc2VsZi5fZ2V0X2NtZCh7fSkKLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBjbWQuc3RyaWN0ID0gMQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBjbWQucnVuKQotCi0gICAgICAgICMgbWV0YWRhdGEgYXJlIE9LIGJ1dCBsb25nX2Rlc2NyaXB0aW9uIGlzIGJyb2tlbgotICAgICAgICBtZXRhZGF0YSA9IHsndXJsJzogJ3h4eCcsICdhdXRob3InOiAneHh4JywKLSAgICAgICAgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6IHUnw6l4w6l4w6knLAotICAgICAgICAgICAgICAgICAgICAnbmFtZSc6ICd4eHgnLCAndmVyc2lvbic6ICd4eHgnLAotICAgICAgICAgICAgICAgICAgICAnbG9uZ19kZXNjcmlwdGlvbic6ICd0aXRsZVxuPT1cblxudGV4dCd9Ci0KLSAgICAgICAgY21kID0gc2VsZi5fZ2V0X2NtZChtZXRhZGF0YSkKLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBjbWQuc3RyaWN0ID0gMQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNTZXR1cEVycm9yLCBjbWQucnVuKQotCi0gICAgICAgICMgbm93IHNvbWV0aGluZyB0aGF0IHdvcmtzCi0gICAgICAgIG1ldGFkYXRhWydsb25nX2Rlc2NyaXB0aW9uJ10gPSAndGl0bGVcbj09PT09XG5cbnRleHQnCi0gICAgICAgIGNtZCA9IHNlbGYuX2dldF9jbWQobWV0YWRhdGEpCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLnN0cmljdCA9IDEKLSAgICAgICAgaW5wdXRzID0gUmF3SW5wdXRzKCcxJywgJ3RhcmVrJywgJ3knKQotICAgICAgICByZWdpc3Rlcl9tb2R1bGUucmF3X2lucHV0ID0gaW5wdXRzLl9fY2FsbF9fCi0gICAgICAgICMgbGV0J3MgcnVuIHRoZSBjb21tYW5kCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNtZC5ydW4oKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZGVsIHJlZ2lzdGVyX21vZHVsZS5yYXdfaW5wdXQKLQotICAgICAgICAjIHN0cmljdCBpcyBub3QgYnkgZGVmYXVsdAotICAgICAgICBjbWQgPSBzZWxmLl9nZXRfY21kKCkKLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBpbnB1dHMgPSBSYXdJbnB1dHMoJzEnLCAndGFyZWsnLCAneScpCi0gICAgICAgIHJlZ2lzdGVyX21vZHVsZS5yYXdfaW5wdXQgPSBpbnB1dHMuX19jYWxsX18KLSAgICAgICAgIyBsZXQncyBydW4gdGhlIGNvbW1hbmQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY21kLnJ1bigpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBkZWwgcmVnaXN0ZXJfbW9kdWxlLnJhd19pbnB1dAotCi0gICAgICAgICMgYW5kIGZpbmFsbHkgYSBVbmljb2RlIHRlc3QgKGJ1ZyAjMTIxMTQpCi0gICAgICAgIG1ldGFkYXRhID0geyd1cmwnOiB1J3h4eCcsICdhdXRob3InOiB1J1x1MDBjOXJpYycsCi0gICAgICAgICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiB1J3h4eCcsIHUnbmFtZSc6ICd4eHgnLAotICAgICAgICAgICAgICAgICAgICAndmVyc2lvbic6IHUneHh4JywKLSAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogdSdTb21ldGhpbmcgYWJvdXQgZXNzemV0IFx1MDBkZicsCi0gICAgICAgICAgICAgICAgICAgICdsb25nX2Rlc2NyaXB0aW9uJzogdSdNb3JlIHRoaW5ncyBhYm91dCBlc3N6ZXQgXHUwMGRmJ30KLQotICAgICAgICBjbWQgPSBzZWxmLl9nZXRfY21kKG1ldGFkYXRhKQotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIGNtZC5zdHJpY3QgPSAxCi0gICAgICAgIGlucHV0cyA9IFJhd0lucHV0cygnMScsICd0YXJlaycsICd5JykKLSAgICAgICAgcmVnaXN0ZXJfbW9kdWxlLnJhd19pbnB1dCA9IGlucHV0cy5fX2NhbGxfXwotICAgICAgICAjIGxldCdzIHJ1biB0aGUgY29tbWFuZAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjbWQucnVuKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGRlbCByZWdpc3Rlcl9tb2R1bGUucmF3X2lucHV0Ci0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhkb2N1dGlscyBpcyBub3QgTm9uZSwgJ25lZWRzIGRvY3V0aWxzJykKLSAgICBkZWYgdGVzdF9yZWdpc3Rlcl9pbnZhbGlkX2xvbmdfZGVzY3JpcHRpb24oc2VsZik6Ci0gICAgICAgIGRlc2NyaXB0aW9uID0gJzpmdW5raWU6YHN0cmAnICAjIG1pbWljIFNwaGlueC1zcGVjaWZpYyBtYXJrdXAKLSAgICAgICAgbWV0YWRhdGEgPSB7J3VybCc6ICd4eHgnLCAnYXV0aG9yJzogJ3h4eCcsCi0gICAgICAgICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAneHh4JywKLSAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiAneHh4JywgJ3ZlcnNpb24nOiAneHh4JywKLSAgICAgICAgICAgICAgICAgICAgJ2xvbmdfZGVzY3JpcHRpb24nOiBkZXNjcmlwdGlvbn0KLSAgICAgICAgY21kID0gc2VsZi5fZ2V0X2NtZChtZXRhZGF0YSkKLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBjbWQuc3RyaWN0ID0gVHJ1ZQotICAgICAgICBpbnB1dHMgPSBSYXdJbnB1dHMoJzInLCAndGFyZWsnLCAndGFyZWtAemlhZGUub3JnJykKLSAgICAgICAgcmVnaXN0ZXJfbW9kdWxlLnJhd19pbnB1dCA9IGlucHV0cwotICAgICAgICBzZWxmLmFkZENsZWFudXAoZGVsYXR0ciwgcmVnaXN0ZXJfbW9kdWxlLCAncmF3X2lucHV0JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgY21kLnJ1bikKLQotICAgIGRlZiB0ZXN0X2NoZWNrX21ldGFkYXRhX2RlcHJlY2F0ZWQoc2VsZik6Ci0gICAgICAgICMgbWFrZXMgc3VyZSBtYWtlX21ldGFkYXRhIGlzIGRlcHJlY2F0ZWQKLSAgICAgICAgY21kID0gc2VsZi5fZ2V0X2NtZCgpCi0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQotICAgICAgICAgICAgY21kLmNoZWNrX21ldGFkYXRhKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAxKQotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoUmVnaXN0ZXJUZXN0Q2FzZSkKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weSBiL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlN2Q5OGQuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDUxMiArMCwwIEBACi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuc2Rpc3QuIiIiCi1pbXBvcnQgb3MKLWltcG9ydCB0YXJmaWxlCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCB3YXJuaW5ncwotaW1wb3J0IHppcGZpbGUKLWZyb20gb3MucGF0aCBpbXBvcnQgam9pbgotZnJvbSB0ZXh0d3JhcCBpbXBvcnQgZGVkZW50Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQsIGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QKLQotIyB6bGliIGlzIG5vdCB1c2VkIGhlcmUsIGJ1dCBpZiBpdCdzIG5vdCBhdmFpbGFibGUKLSMgdGhlIHRlc3RzIHRoYXQgdXNlIHppcGZpbGUgbWF5IGZhaWwKLXRyeToKLSAgICBpbXBvcnQgemxpYgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHpsaWIgPSBOb25lCi0KLXRyeToKLSAgICBpbXBvcnQgZ3JwCi0gICAgaW1wb3J0IHB3ZAotICAgIFVJRF9HSURfU1VQUE9SVCA9IFRydWUKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBVSURfR0lEX1NVUFBPUlQgPSBGYWxzZQotCi0KLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQuc2Rpc3QgaW1wb3J0IHNkaXN0LCBzaG93X2Zvcm1hdHMKLWZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgotZnJvbSBkaXN0dXRpbHMudGVzdHMudGVzdF9jb25maWcgaW1wb3J0IFB5UElSQ0NvbW1hbmRUZXN0Q2FzZQotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNPcHRpb25FcnJvcgotZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZQotZnJvbSBkaXN0dXRpbHMubG9nIGltcG9ydCBXQVJOCi1mcm9tIGRpc3R1dGlscy5maWxlbGlzdCBpbXBvcnQgRmlsZUxpc3QKLWZyb20gZGlzdHV0aWxzLmFyY2hpdmVfdXRpbCBpbXBvcnQgQVJDSElWRV9GT1JNQVRTCi0KLVNFVFVQX1BZID0gIiIiCi1mcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cAotaW1wb3J0IHNvbWVjb2RlCi0KLXNldHVwKG5hbWU9J2Zha2UnKQotIiIiCi0KLU1BTklGRVNUID0gIiIiXAotIyBmaWxlIEdFTkVSQVRFRCBieSBkaXN0dXRpbHMsIGRvIE5PVCBlZGl0Ci1SRUFETUUKLWJ1aWxkb3V0LmNmZwotaW5yb290LnR4dAotc2V0dXAucHkKLWRhdGElKHNlcClzZGF0YS5kdAotc2NyaXB0cyUoc2VwKXNzY3JpcHQucHkKLXNvbWUlKHNlcClzZmlsZS50eHQKLXNvbWUlKHNlcClzb3RoZXJfZmlsZS50eHQKLXNvbWVjb2RlJShzZXApc19faW5pdF9fLnB5Ci1zb21lY29kZSUoc2VwKXNkb2MuZGF0Ci1zb21lY29kZSUoc2VwKXNkb2MudHh0Ci0iIiIKLQotY2xhc3MgU0Rpc3RUZXN0Q2FzZShQeVBJUkNDb21tYW5kVGVzdENhc2UpOgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAjIFB5UElSQ0NvbW1hbmRUZXN0Q2FzZSBjcmVhdGVzIGEgdGVtcCBkaXIgYWxyZWFkeQotICAgICAgICAjIGFuZCBwdXQgaXQgaW4gc2VsZi50bXBfZGlyCi0gICAgICAgIHN1cGVyKFNEaXN0VGVzdENhc2UsIHNlbGYpLnNldFVwKCkKLSAgICAgICAgIyBzZXR0aW5nIHVwIGFuIGVudmlyb25tZW50Ci0gICAgICAgIHNlbGYub2xkX3BhdGggPSBvcy5nZXRjd2QoKQotICAgICAgICBvcy5ta2Rpcihqb2luKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJykpCi0gICAgICAgIG9zLm1rZGlyKGpvaW4oc2VsZi50bXBfZGlyLCAnZGlzdCcpKQotICAgICAgICAjIGEgcGFja2FnZSwgYW5kIGEgUkVBRE1FCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZSgoc2VsZi50bXBfZGlyLCAnUkVBRE1FJyksICd4eHgnKQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJywgJ19faW5pdF9fLnB5JyksICcjJykKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKChzZWxmLnRtcF9kaXIsICdzZXR1cC5weScpLCBTRVRVUF9QWSkKLSAgICAgICAgb3MuY2hkaXIoc2VsZi50bXBfZGlyKQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICAjIGJhY2sgdG8gbm9ybWFsCi0gICAgICAgIG9zLmNoZGlyKHNlbGYub2xkX3BhdGgpCi0gICAgICAgIHN1cGVyKFNEaXN0VGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKLQotICAgIGRlZiBnZXRfY21kKHNlbGYsIG1ldGFkYXRhPU5vbmUpOgotICAgICAgICAiIiJSZXR1cm5zIGEgY21kIiIiCi0gICAgICAgIGlmIG1ldGFkYXRhIGlzIE5vbmU6Ci0gICAgICAgICAgICBtZXRhZGF0YSA9IHsnbmFtZSc6ICdmYWtlJywgJ3ZlcnNpb24nOiAnMS4wJywKLSAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiAneHh4JywgJ2F1dGhvcic6ICd4eHgnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICd4eHgnfQotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKG1ldGFkYXRhKQotICAgICAgICBkaXN0LnNjcmlwdF9uYW1lID0gJ3NldHVwLnB5JwotICAgICAgICBkaXN0LnBhY2thZ2VzID0gWydzb21lY29kZSddCi0gICAgICAgIGRpc3QuaW5jbHVkZV9wYWNrYWdlX2RhdGEgPSBUcnVlCi0gICAgICAgIGNtZCA9IHNkaXN0KGRpc3QpCi0gICAgICAgIGNtZC5kaXN0X2RpciA9ICdkaXN0JwotICAgICAgICByZXR1cm4gZGlzdCwgY21kCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCi0gICAgZGVmIHRlc3RfcHJ1bmVfZmlsZV9saXN0KHNlbGYpOgotICAgICAgICAjIHRoaXMgdGVzdCBjcmVhdGVzIGEgcHJvamVjdCB3aXRoIHNvbWUgVkNTIGRpcnMgYW5kIGFuIE5GUyByZW5hbWUKLSAgICAgICAgIyBmaWxlLCB0aGVuIGxhdW5jaGVzIHNkaXN0IHRvIGNoZWNrIHRoZXkgZ2V0IHBydW5lZCBvbiBhbGwgc3lzdGVtcwotCi0gICAgICAgICMgY3JlYXRpbmcgVkNTIGRpcmVjdG9yaWVzIHdpdGggc29tZSBmaWxlcyBpbiB0aGVtCi0gICAgICAgIG9zLm1rZGlyKGpvaW4oc2VsZi50bXBfZGlyLCAnc29tZWNvZGUnLCAnLnN2bicpKQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJywgJy5zdm4nLCAnb2sucHknKSwgJ3h4eCcpCi0KLSAgICAgICAgb3MubWtkaXIoam9pbihzZWxmLnRtcF9kaXIsICdzb21lY29kZScsICcuaGcnKSkKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKChzZWxmLnRtcF9kaXIsICdzb21lY29kZScsICcuaGcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdvaycpLCAneHh4JykKLQotICAgICAgICBvcy5ta2Rpcihqb2luKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJywgJy5naXQnKSkKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKChzZWxmLnRtcF9kaXIsICdzb21lY29kZScsICcuZ2l0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnb2snKSwgJ3h4eCcpCi0KLSAgICAgICAgc2VsZi53cml0ZV9maWxlKChzZWxmLnRtcF9kaXIsICdzb21lY29kZScsICcubmZzMDAwMScpLCAneHh4JykKLQotICAgICAgICAjIG5vdyBidWlsZGluZyBhIHNkaXN0Ci0gICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCi0KLSAgICAgICAgIyB6aXAgaXMgYXZhaWxhYmxlIHVuaXZlcnNhbGx5Ci0gICAgICAgICMgKHRhciBtaWdodCBub3QgYmUgaW5zdGFsbGVkIHVuZGVyIHdpbjMyKQotICAgICAgICBjbWQuZm9ybWF0cyA9IFsnemlwJ10KLQotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIGNtZC5ydW4oKQotCi0gICAgICAgICMgbm93IGxldCdzIGNoZWNrIHdoYXQgd2UgaGF2ZQotICAgICAgICBkaXN0X2ZvbGRlciA9IGpvaW4oc2VsZi50bXBfZGlyLCAnZGlzdCcpCi0gICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihkaXN0X2ZvbGRlcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlcywgWydmYWtlLTEuMC56aXAnXSkKLQotICAgICAgICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZShqb2luKGRpc3RfZm9sZGVyLCAnZmFrZS0xLjAuemlwJykpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvbnRlbnQgPSB6aXBfZmlsZS5uYW1lbGlzdCgpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICB6aXBfZmlsZS5jbG9zZSgpCi0KLSAgICAgICAgIyBtYWtpbmcgc3VyZSBldmVyeXRoaW5nIGhhcyBiZWVuIHBydW5lZCBjb3JyZWN0bHkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY29udGVudCksIDQpCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCi0gICAgZGVmIHRlc3RfbWFrZV9kaXN0cmlidXRpb24oc2VsZik6Ci0KLSAgICAgICAgIyBjaGVjayBpZiB0YXIgYW5kIGd6aXAgYXJlIGluc3RhbGxlZAotICAgICAgICBpZiAoZmluZF9leGVjdXRhYmxlKCd0YXInKSBpcyBOb25lIG9yCi0gICAgICAgICAgICBmaW5kX2V4ZWN1dGFibGUoJ2d6aXAnKSBpcyBOb25lKToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICMgbm93IGJ1aWxkaW5nIGEgc2Rpc3QKLSAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKLQotICAgICAgICAjIGNyZWF0aW5nIGEgZ3p0YXIgdGhlbiBhIHRhcgotICAgICAgICBjbWQuZm9ybWF0cyA9IFsnZ3p0YXInLCAndGFyJ10KLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBjbWQucnVuKCkKLQotICAgICAgICAjIG1ha2luZyBzdXJlIHdlIGhhdmUgdHdvIGZpbGVzCi0gICAgICAgIGRpc3RfZm9sZGVyID0gam9pbihzZWxmLnRtcF9kaXIsICdkaXN0JykKLSAgICAgICAgcmVzdWx0ID0gb3MubGlzdGRpcihkaXN0X2ZvbGRlcikKLSAgICAgICAgcmVzdWx0LnNvcnQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWydmYWtlLTEuMC50YXInLCAnZmFrZS0xLjAudGFyLmd6J10pCi0KLSAgICAgICAgb3MucmVtb3ZlKGpvaW4oZGlzdF9mb2xkZXIsICdmYWtlLTEuMC50YXInKSkKLSAgICAgICAgb3MucmVtb3ZlKGpvaW4oZGlzdF9mb2xkZXIsICdmYWtlLTEuMC50YXIuZ3onKSkKLQotICAgICAgICAjIG5vdyB0cnlpbmcgYSB0YXIgdGhlbiBhIGd6dGFyCi0gICAgICAgIGNtZC5mb3JtYXRzID0gWyd0YXInLCAnZ3p0YXInXQotCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLnJ1bigpCi0KLSAgICAgICAgcmVzdWx0ID0gb3MubGlzdGRpcihkaXN0X2ZvbGRlcikKLSAgICAgICAgcmVzdWx0LnNvcnQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWydmYWtlLTEuMC50YXInLCAnZmFrZS0xLjAudGFyLmd6J10pCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCi0gICAgZGVmIHRlc3RfdW5pY29kZV9tZXRhZGF0YV90Z3ooc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBVbmljb2RlIG5hbWUgb3IgdmVyc2lvbiBzaG91bGQgbm90IGJyZWFrIGJ1aWxkaW5nIHRvIHRhci5neiBmb3JtYXQuCi0gICAgICAgIFJlZmVyZW5jZSBpc3N1ZSAjMTE2MzguCi0gICAgICAgICIiIgotCi0gICAgICAgICMgY3JlYXRlIHRoZSBzZGlzdCBjb21tYW5kIHdpdGggdW5pY29kZSBwYXJhbWV0ZXJzCi0gICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCh7J25hbWUnOiB1J2Zha2UnLCAndmVyc2lvbic6IHUnMS4wJ30pCi0KLSAgICAgICAgIyBjcmVhdGUgdGhlIHNkaXN0IGFzIGd6dGFyIGFuZCBydW4gdGhlIGNvbW1hbmQKLSAgICAgICAgY21kLmZvcm1hdHMgPSBbJ2d6dGFyJ10KLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBjbWQucnVuKCkKLQotICAgICAgICAjIFRoZSBjb21tYW5kIHNob3VsZCBoYXZlIGNyZWF0ZWQgdGhlIC50YXIuZ3ogZmlsZQotICAgICAgICBkaXN0X2ZvbGRlciA9IGpvaW4oc2VsZi50bXBfZGlyLCAnZGlzdCcpCi0gICAgICAgIHJlc3VsdCA9IG9zLmxpc3RkaXIoZGlzdF9mb2xkZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbJ2Zha2UtMS4wLnRhci5neiddKQotCi0gICAgICAgIG9zLnJlbW92ZShqb2luKGRpc3RfZm9sZGVyLCAnZmFrZS0xLjAudGFyLmd6JykpCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCi0gICAgZGVmIHRlc3RfYWRkX2RlZmF1bHRzKHNlbGYpOgotCi0gICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIyNzkKLQotICAgICAgICAjIGFkZF9kZWZhdWx0IHNob3VsZCBhbHNvIGluY2x1ZGUKLSAgICAgICAgIyBkYXRhX2ZpbGVzIGFuZCBwYWNrYWdlX2RhdGEKLSAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKLQotICAgICAgICAjIGZpbGxpbmcgZGF0YV9maWxlcyBieSBwb2ludGluZyBmaWxlcwotICAgICAgICAjIGluIHBhY2thZ2VfZGF0YQotICAgICAgICBkaXN0LnBhY2thZ2VfZGF0YSA9IHsnJzogWycqLmNmZycsICcqLmRhdCddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc29tZWNvZGUnOiBbJyoudHh0J119Ci0gICAgICAgIHNlbGYud3JpdGVfZmlsZSgoc2VsZi50bXBfZGlyLCAnc29tZWNvZGUnLCAnZG9jLnR4dCcpLCAnIycpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZSgoc2VsZi50bXBfZGlyLCAnc29tZWNvZGUnLCAnZG9jLmRhdCcpLCAnIycpCi0KLSAgICAgICAgIyBhZGRpbmcgc29tZSBkYXRhIGluIGRhdGFfZmlsZXMKLSAgICAgICAgZGF0YV9kaXIgPSBqb2luKHNlbGYudG1wX2RpciwgJ2RhdGEnKQotICAgICAgICBvcy5ta2RpcihkYXRhX2RpcikKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKChkYXRhX2RpciwgJ2RhdGEuZHQnKSwgJyMnKQotICAgICAgICBzb21lX2RpciA9IGpvaW4oc2VsZi50bXBfZGlyLCAnc29tZScpCi0gICAgICAgIG9zLm1rZGlyKHNvbWVfZGlyKQotICAgICAgICAjIG1ha2Ugc3VyZSBWQ1MgZGlyZWN0b3JpZXMgYXJlIHBydW5lZCAoIzE0MDA0KQotICAgICAgICBoZ19kaXIgPSBqb2luKHNlbGYudG1wX2RpciwgJy5oZycpCi0gICAgICAgIG9zLm1rZGlyKGhnX2RpcikKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKChoZ19kaXIsICdsYXN0LW1lc3NhZ2UudHh0JyksICcjJykKLSAgICAgICAgIyBhIGJ1Z2d5IHJlZ2V4IHVzZWQgdG8gcHJldmVudCB0aGlzIGZyb20gd29ya2luZyBvbiB3aW5kb3dzICgjNjg4NCkKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKChzZWxmLnRtcF9kaXIsICdidWlsZG91dC5jZmcnKSwgJyMnKQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNlbGYudG1wX2RpciwgJ2lucm9vdC50eHQnKSwgJyMnKQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNvbWVfZGlyLCAnZmlsZS50eHQnKSwgJyMnKQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNvbWVfZGlyLCAnb3RoZXJfZmlsZS50eHQnKSwgJyMnKQotCi0gICAgICAgIGRpc3QuZGF0YV9maWxlcyA9IFsoJ2RhdGEnLCBbJ2RhdGEvZGF0YS5kdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J1aWxkb3V0LmNmZycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lucm9vdC50eHQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub3RleGlzdGluZyddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb21lL2ZpbGUudHh0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb21lL290aGVyX2ZpbGUudHh0J10KLQotICAgICAgICAjIGFkZGluZyBhIHNjcmlwdAotICAgICAgICBzY3JpcHRfZGlyID0gam9pbihzZWxmLnRtcF9kaXIsICdzY3JpcHRzJykKLSAgICAgICAgb3MubWtkaXIoc2NyaXB0X2RpcikKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKChzY3JpcHRfZGlyLCAnc2NyaXB0LnB5JyksICcjJykKLSAgICAgICAgZGlzdC5zY3JpcHRzID0gW2pvaW4oJ3NjcmlwdHMnLCAnc2NyaXB0LnB5JyldCi0KLSAgICAgICAgY21kLmZvcm1hdHMgPSBbJ3ppcCddCi0gICAgICAgIGNtZC51c2VfZGVmYXVsdHMgPSBUcnVlCi0KLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBjbWQucnVuKCkKLQotICAgICAgICAjIG5vdyBsZXQncyBjaGVjayB3aGF0IHdlIGhhdmUKLSAgICAgICAgZGlzdF9mb2xkZXIgPSBqb2luKHNlbGYudG1wX2RpciwgJ2Rpc3QnKQotICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIoZGlzdF9mb2xkZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXMsIFsnZmFrZS0xLjAuemlwJ10pCi0KLSAgICAgICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoam9pbihkaXN0X2ZvbGRlciwgJ2Zha2UtMS4wLnppcCcpKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjb250ZW50ID0gemlwX2ZpbGUubmFtZWxpc3QoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgemlwX2ZpbGUuY2xvc2UoKQotCi0gICAgICAgICMgbWFraW5nIHN1cmUgZXZlcnl0aGluZyB3YXMgYWRkZWQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY29udGVudCksIDEyKQotCi0gICAgICAgICMgY2hlY2tpbmcgdGhlIE1BTklGRVNUCi0gICAgICAgIGYgPSBvcGVuKGpvaW4oc2VsZi50bXBfZGlyLCAnTUFOSUZFU1QnKSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbWFuaWZlc3QgPSBmLnJlYWQoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFuaWZlc3QsIE1BTklGRVNUICUgeydzZXAnOiBvcy5zZXB9KQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQotICAgIGRlZiB0ZXN0X21ldGFkYXRhX2NoZWNrX29wdGlvbihzZWxmKToKLSAgICAgICAgIyB0ZXN0aW5nIHRoZSBgbWVkYXRhLWNoZWNrYCBvcHRpb24KLSAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKG1ldGFkYXRhPXt9KQotCi0gICAgICAgICMgdGhpcyBzaG91bGQgcmFpc2Ugc29tZSB3YXJuaW5ncyAhCi0gICAgICAgICMgd2l0aCB0aGUgYGNoZWNrYCBzdWJjb21tYW5kCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLnJ1bigpCi0gICAgICAgIHdhcm5pbmdzID0gW21zZyBmb3IgbXNnIGluIHNlbGYuZ2V0X2xvZ3MoV0FSTikgaWYKLSAgICAgICAgICAgICAgICAgICAgbXNnLnN0YXJ0c3dpdGgoJ3dhcm5pbmc6IGNoZWNrOicpXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3YXJuaW5ncyksIDIpCi0KLSAgICAgICAgIyB0cnlpbmcgd2l0aCBhIGNvbXBsZXRlIHNldCBvZiBtZXRhZGF0YQotICAgICAgICBzZWxmLmNsZWFyX2xvZ3MoKQotICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIGNtZC5tZXRhZGF0YV9jaGVjayA9IDAKLSAgICAgICAgY21kLnJ1bigpCi0gICAgICAgIHdhcm5pbmdzID0gW21zZyBmb3IgbXNnIGluIHNlbGYuZ2V0X2xvZ3MoV0FSTikgaWYKLSAgICAgICAgICAgICAgICAgICAgbXNnLnN0YXJ0c3dpdGgoJ3dhcm5pbmc6IGNoZWNrOicpXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3YXJuaW5ncyksIDApCi0KLSAgICBkZWYgdGVzdF9jaGVja19tZXRhZGF0YV9kZXByZWNhdGVkKHNlbGYpOgotICAgICAgICAjIG1ha2VzIHN1cmUgbWFrZV9tZXRhZGF0YSBpcyBkZXByZWNhdGVkCi0gICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCi0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQotICAgICAgICAgICAgY21kLmNoZWNrX21ldGFkYXRhKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAxKQotCi0gICAgZGVmIHRlc3Rfc2hvd19mb3JtYXRzKHNlbGYpOgotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIHNob3dfZm9ybWF0cygpCi0KLSAgICAgICAgIyB0aGUgb3V0cHV0IHNob3VsZCBiZSBhIGhlYWRlciBsaW5lICsgb25lIGxpbmUgcGVyIGZvcm1hdAotICAgICAgICBudW1fZm9ybWF0cyA9IGxlbihBUkNISVZFX0ZPUk1BVFMua2V5cygpKQotICAgICAgICBvdXRwdXQgPSBbbGluZSBmb3IgbGluZSBpbiBzdGRvdXQuZ2V0dmFsdWUoKS5zcGxpdCgnXG4nKQotICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpLnN0YXJ0c3dpdGgoJy0tZm9ybWF0cz0nKV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3V0cHV0KSwgbnVtX2Zvcm1hdHMpCi0KLSAgICBkZWYgdGVzdF9maW5hbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQotICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0KLSAgICAgICAgIyBkZWZhdWx0IG9wdGlvbnMgc2V0IGJ5IGZpbmFsaXplCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLm1hbmlmZXN0LCAnTUFOSUZFU1QnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC50ZW1wbGF0ZSwgJ01BTklGRVNULmluJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZGlzdF9kaXIsICdkaXN0JykKLQotICAgICAgICAjIGZvcm1hdHMgaGFzIHRvIGJlIGEgc3RyaW5nIHNwbGl0YWJsZSBvbiAoJyAnLCAnLCcpIG9yCi0gICAgICAgICMgYSBzdHJpbmdsaXN0Ci0gICAgICAgIGNtZC5mb3JtYXRzID0gMQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNPcHRpb25FcnJvciwgY21kLmZpbmFsaXplX29wdGlvbnMpCi0gICAgICAgIGNtZC5mb3JtYXRzID0gWyd6aXAnXQotICAgICAgICBjbWQuZmluYWxpemVfb3B0aW9ucygpCi0KLSAgICAgICAgIyBmb3JtYXRzIGhhcyB0byBiZSBrbm93bgotICAgICAgICBjbWQuZm9ybWF0cyA9ICdzdXBhemlwYScKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzT3B0aW9uRXJyb3IsIGNtZC5maW5hbGl6ZV9vcHRpb25zKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFVJRF9HSURfU1VQUE9SVCwgIlJlcXVpcmVzIGdycCBhbmQgcHdkIHN1cHBvcnQiKQotICAgIGRlZiB0ZXN0X21ha2VfZGlzdHJpYnV0aW9uX293bmVyX2dyb3VwKHNlbGYpOgotCi0gICAgICAgICMgY2hlY2sgaWYgdGFyIGFuZCBnemlwIGFyZSBpbnN0YWxsZWQKLSAgICAgICAgaWYgKGZpbmRfZXhlY3V0YWJsZSgndGFyJykgaXMgTm9uZSBvcgotICAgICAgICAgICAgZmluZF9leGVjdXRhYmxlKCdnemlwJykgaXMgTm9uZSk6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAjIG5vdyBidWlsZGluZyBhIHNkaXN0Ci0gICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCi0KLSAgICAgICAgIyBjcmVhdGluZyBhIGd6dGFyIGFuZCBzcGVjaWZ5aW5nIHRoZSBvd25lcitncm91cAotICAgICAgICBjbWQuZm9ybWF0cyA9IFsnZ3p0YXInXQotICAgICAgICBjbWQub3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KLSAgICAgICAgY21kLmdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLnJ1bigpCi0KLSAgICAgICAgIyBtYWtpbmcgc3VyZSB3ZSBoYXZlIHRoZSBnb29kIHJpZ2h0cwotICAgICAgICBhcmNoaXZlX25hbWUgPSBqb2luKHNlbGYudG1wX2RpciwgJ2Rpc3QnLCAnZmFrZS0xLjAudGFyLmd6JykKLSAgICAgICAgYXJjaGl2ZSA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gYXJjaGl2ZS5nZXRtZW1iZXJzKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIudWlkLCAwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLmdpZCwgMCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGFyY2hpdmUuY2xvc2UoKQotCi0gICAgICAgICMgYnVpbGRpbmcgYSBzZGlzdCBhZ2FpbgotICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQotCi0gICAgICAgICMgY3JlYXRpbmcgYSBnenRhcgotICAgICAgICBjbWQuZm9ybWF0cyA9IFsnZ3p0YXInXQotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIGNtZC5ydW4oKQotCi0gICAgICAgICMgbWFraW5nIHN1cmUgd2UgaGF2ZSB0aGUgZ29vZCByaWdodHMKLSAgICAgICAgYXJjaGl2ZV9uYW1lID0gam9pbihzZWxmLnRtcF9kaXIsICdkaXN0JywgJ2Zha2UtMS4wLnRhci5neicpCi0gICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQotCi0gICAgICAgICMgbm90ZSB0aGF0IHdlIGFyZSBub3QgdGVzdGluZyB0aGUgZ3JvdXAgb3duZXJzaGlwIGhlcmUKLSAgICAgICAgIyBiZWNhdXNlLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtcyBhbmQgdGhlIGNvbnRhaW5lcgotICAgICAgICAjIHJpZ2h0cyAoc2VlICM3NDA4KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgb3MuZ2V0dWlkKCkpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKLQotICAgICMgdGhlIGZvbGxvd2luZyB0ZXN0cyBtYWtlIHN1cmUgdGhlcmUgaXMgYSBuaWNlIGVycm9yIG1lc3NhZ2UgaW5zdGVhZAotICAgICMgb2YgYSB0cmFjZWJhY2sgd2hlbiBwYXJzaW5nIGFuIGludmFsaWQgbWFuaWZlc3QgdGVtcGxhdGUKLQotICAgIGRlZiBfY2hlY2tfdGVtcGxhdGUoc2VsZiwgY29udGVudCk6Ci0gICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCi0gICAgICAgIG9zLmNoZGlyKHNlbGYudG1wX2RpcikKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKCdNQU5JRkVTVC5pbicsIGNvbnRlbnQpCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLmZpbGVsaXN0ID0gRmlsZUxpc3QoKQotICAgICAgICBjbWQucmVhZF90ZW1wbGF0ZSgpCi0gICAgICAgIHdhcm5pbmdzID0gc2VsZi5nZXRfbG9ncyhXQVJOKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3YXJuaW5ncyksIDEpCi0KLSAgICBkZWYgdGVzdF9pbnZhbGlkX3RlbXBsYXRlX3Vua25vd25fY29tbWFuZChzZWxmKToKLSAgICAgICAgc2VsZi5fY2hlY2tfdGVtcGxhdGUoJ3RhdW50IGtuaWdodHMgKicpCi0KLSAgICBkZWYgdGVzdF9pbnZhbGlkX3RlbXBsYXRlX3dyb25nX2FyZ3VtZW50cyhzZWxmKToKLSAgICAgICAgIyB0aGlzIG1hbmlmZXN0IGNvbW1hbmQgdGFrZXMgb25lIGFyZ3VtZW50Ci0gICAgICAgIHNlbGYuX2NoZWNrX3RlbXBsYXRlKCdwcnVuZScpCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgIT0gJ250JywgJ3Rlc3QgcmVsZXZhbnQgZm9yIFdpbmRvd3Mgb25seScpCi0gICAgZGVmIHRlc3RfaW52YWxpZF90ZW1wbGF0ZV93cm9uZ19wYXRoKHNlbGYpOgotICAgICAgICAjIG9uIFdpbmRvd3MsIHRyYWlsaW5nIHNsYXNoZXMgYXJlIG5vdCBhbGxvd2VkCi0gICAgICAgICMgdGhpcyB1c2VkIHRvIGNyYXNoIGluc3RlYWQgb2YgcmFpc2luZyBhIHdhcm5pbmc6ICM4Mjg2Ci0gICAgICAgIHNlbGYuX2NoZWNrX3RlbXBsYXRlKCdpbmNsdWRlIGV4YW1wbGVzLycpCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCi0gICAgZGVmIHRlc3RfZ2V0X2ZpbGVfbGlzdChzZWxmKToKLSAgICAgICAgIyBtYWtlIHN1cmUgTUFOSUZFU1QgaXMgcmVjYWxjdWxhdGVkCi0gICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCi0KLSAgICAgICAgIyBmaWxsaW5nIGRhdGFfZmlsZXMgYnkgcG9pbnRpbmcgZmlsZXMgaW4gcGFja2FnZV9kYXRhCi0gICAgICAgIGRpc3QucGFja2FnZV9kYXRhID0geydzb21lY29kZSc6IFsnKi50eHQnXX0KLSAgICAgICAgc2VsZi53cml0ZV9maWxlKChzZWxmLnRtcF9kaXIsICdzb21lY29kZScsICdkb2MudHh0JyksICcjJykKLSAgICAgICAgY21kLmZvcm1hdHMgPSBbJ2d6dGFyJ10KLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBjbWQucnVuKCkKLQotICAgICAgICBmID0gb3BlbihjbWQubWFuaWZlc3QpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG1hbmlmZXN0ID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBmLnJlYWQoKS5zcGxpdCgnXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpICE9ICcnXQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obWFuaWZlc3QpLCA1KQotCi0gICAgICAgICMgYWRkaW5nIGEgZmlsZQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJywgJ2RvYzIudHh0JyksICcjJykKLQotICAgICAgICAjIG1ha2Ugc3VyZSBidWlsZF9weSBpcyByZWluaXRpYWxpemVkLCBsaWtlIGEgZnJlc2ggcnVuCi0gICAgICAgIGJ1aWxkX3B5ID0gZGlzdC5nZXRfY29tbWFuZF9vYmooJ2J1aWxkX3B5JykKLSAgICAgICAgYnVpbGRfcHkuZmluYWxpemVkID0gRmFsc2UKLSAgICAgICAgYnVpbGRfcHkuZW5zdXJlX2ZpbmFsaXplZCgpCi0KLSAgICAgICAgY21kLnJ1bigpCi0KLSAgICAgICAgZiA9IG9wZW4oY21kLm1hbmlmZXN0KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtYW5pZmVzdDIgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIGYucmVhZCgpLnNwbGl0KCdcbicpCi0gICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdHJpcCgpICE9ICcnXQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCi0KLSAgICAgICAgIyBkbyB3ZSBoYXZlIHRoZSBuZXcgZmlsZSBpbiBNQU5JRkVTVCA/Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1hbmlmZXN0MiksIDYpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2RvYzIudHh0JywgbWFuaWZlc3QyWy0xXSkKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKLSAgICBkZWYgdGVzdF9tYW5pZmVzdF9tYXJrZXIoc2VsZik6Ci0gICAgICAgICMgY2hlY2sgdGhhdCBhdXRvZ2VuZXJhdGVkIE1BTklGRVNUcyBoYXZlIGEgbWFya2VyCi0gICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLnJ1bigpCi0KLSAgICAgICAgZiA9IG9wZW4oY21kLm1hbmlmZXN0KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtYW5pZmVzdCA9IFtsaW5lLnN0cmlwKCkgZm9yIGxpbmUgaW4gZi5yZWFkKCkuc3BsaXQoJ1xuJykKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAoKSAhPSAnJ10KLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFuaWZlc3RbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyMgZmlsZSBHRU5FUkFURUQgYnkgZGlzdHV0aWxzLCBkbyBOT1QgZWRpdCcpCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAncmVxdWlyZXMgemxpYicpCi0gICAgZGVmIHRlc3RfbWFuaWZlc3RfY29tbWVudHMoc2VsZik6Ci0gICAgICAgICMgbWFrZSBzdXJlIGNvbW1lbnRzIGRvbid0IGNhdXNlIGV4Y2VwdGlvbnMgb3Igd3JvbmcgaW5jbHVkZXMKLSAgICAgICAgY29udGVudHMgPSBkZWRlbnQoIiIiXAotICAgICAgICAgICAgIyBiYWQucHkKLSAgICAgICAgICAgICNiYWQucHkKLSAgICAgICAgICAgIGdvb2QucHkKLSAgICAgICAgICAgICIiIikKLSAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKLSAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoKHNlbGYudG1wX2RpciwgY21kLm1hbmlmZXN0KSwgY29udGVudHMpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZSgoc2VsZi50bXBfZGlyLCAnZ29vZC5weScpLCAnIyBwaWNrIG1lIScpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZSgoc2VsZi50bXBfZGlyLCAnYmFkLnB5JyksICIjIGRvbid0IHBpY2sgbWUhIikKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKChzZWxmLnRtcF9kaXIsICcjYmFkLnB5JyksICIjIGRvbid0IHBpY2sgbWUhIikKLSAgICAgICAgY21kLnJ1bigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmZpbGVsaXN0LmZpbGVzLCBbJ2dvb2QucHknXSkKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKLSAgICBkZWYgdGVzdF9tYW51YWxfbWFuaWZlc3Qoc2VsZik6Ci0gICAgICAgICMgY2hlY2sgdGhhdCBhIE1BTklGRVNUIHdpdGhvdXQgYSBtYXJrZXIgaXMgbGVmdCBhbG9uZQotICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQotICAgICAgICBjbWQuZm9ybWF0cyA9IFsnZ3p0YXInXQotICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZSgoc2VsZi50bXBfZGlyLCBjbWQubWFuaWZlc3QpLCAnUkVBRE1FLm1hbnVhbCcpCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZSgoc2VsZi50bXBfZGlyLCAnUkVBRE1FLm1hbnVhbCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICdUaGlzIHByb2plY3QgbWFpbnRhaW5zIGl0cyBNQU5JRkVTVCBmaWxlIGl0c2VsZi4nKQotICAgICAgICBjbWQucnVuKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuZmlsZWxpc3QuZmlsZXMsIFsnUkVBRE1FLm1hbnVhbCddKQotCi0gICAgICAgIGYgPSBvcGVuKGNtZC5tYW5pZmVzdCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbWFuaWZlc3QgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIGYucmVhZCgpLnNwbGl0KCdcbicpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkgIT0gJyddCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hbmlmZXN0LCBbJ1JFQURNRS5tYW51YWwnXSkKLQotICAgICAgICBhcmNoaXZlX25hbWUgPSBqb2luKHNlbGYudG1wX2RpciwgJ2Rpc3QnLCAnZmFrZS0xLjAudGFyLmd6JykKLSAgICAgICAgYXJjaGl2ZSA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZpbGVuYW1lcyA9IFt0YXJpbmZvLm5hbWUgZm9yIHRhcmluZm8gaW4gYXJjaGl2ZV0KLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGFyY2hpdmUuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmaWxlbmFtZXMpLCBbJ2Zha2UtMS4wJywgJ2Zha2UtMS4wL1BLRy1JTkZPJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWtlLTEuMC9SRUFETUUubWFudWFsJ10pCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgcmV0dXJuIHVuaXR0ZXN0Lm1ha2VTdWl0ZShTRGlzdFRlc3RDYXNlKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NwYXduLnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zcGF3bi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVmYTU0ZC4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NwYXduLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5zcGF3bi4iIiIKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9zCi1pbXBvcnQgdGltZQotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0LCBydW5fdW5pdHRlc3QKLQotZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IF9udF9xdW90ZV9hcmdzCi1mcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgc3Bhd24sIGZpbmRfZXhlY3V0YWJsZQotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFeGVjRXJyb3IKLWZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Ci0KLWNsYXNzIFNwYXduVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKLSAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCi0gICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X250X3F1b3RlX2FyZ3Moc2VsZik6Ci0KLSAgICAgICAgZm9yIChhcmdzLCB3YW50ZWQpIGluICgoWyd3aXRoIHNwYWNlJywgJ25vc3BhY2UnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycid2l0aCBzcGFjZSInLCAnbm9zcGFjZSddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWydub2NoYW5nZScsICdub3NwYWNlJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnbm9jaGFuZ2UnLCAnbm9zcGFjZSddKSk6Ci0gICAgICAgICAgICByZXMgPSBfbnRfcXVvdGVfYXJncyhhcmdzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHdhbnRlZCkKLQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSBpbiAoJ250JywgJ3Bvc2l4JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ1J1bnMgb25seSB1bmRlciBwb3NpeCBvciBudCcpCi0gICAgZGVmIHRlc3Rfc3Bhd24oc2VsZik6Ci0gICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCi0KLSAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgZXhlY3V0YWJsZQotICAgICAgICAjIHRocm91Z2ggdGhlIHNoZWxsIHRoYXQgcmV0dXJucyAxCi0gICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKLSAgICAgICAgICAgIGV4ZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICdmb28uc2gnKQotICAgICAgICAgICAgc2VsZi53cml0ZV9maWxlKGV4ZSwgJyMhL2Jpbi9zaFxuZXhpdCAxJykKLSAgICAgICAgICAgIG9zLmNobW9kKGV4ZSwgMDc3NykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGV4ZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICdmb28uYmF0JykKLSAgICAgICAgICAgIHNlbGYud3JpdGVfZmlsZShleGUsICdleGl0IDEnKQotCi0gICAgICAgIG9zLmNobW9kKGV4ZSwgMDc3NykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzRXhlY0Vycm9yLCBzcGF3biwgW2V4ZV0pCi0KLSAgICAgICAgIyBub3cgc29tZXRoaW5nIHRoYXQgd29ya3MKLSAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgotICAgICAgICAgICAgZXhlID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2Zvby5zaCcpCi0gICAgICAgICAgICBzZWxmLndyaXRlX2ZpbGUoZXhlLCAnIyEvYmluL3NoXG5leGl0IDAnKQotICAgICAgICAgICAgb3MuY2htb2QoZXhlLCAwNzc3KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZXhlID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2Zvby5iYXQnKQotICAgICAgICAgICAgc2VsZi53cml0ZV9maWxlKGV4ZSwgJ2V4aXQgMCcpCi0KLSAgICAgICAgb3MuY2htb2QoZXhlLCAwNzc3KQotICAgICAgICBzcGF3bihbZXhlXSkgICMgc2hvdWxkIHdvcmsgd2l0aG91dCBhbnkgZXJyb3IKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFNwYXduVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3lzY29uZmlnLnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYjQwZDkuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5zeXNjb25maWcuIiIiCi1pbXBvcnQgb3MKLWltcG9ydCB0ZXN0Ci1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBzaHV0aWwKLQotZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwotZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTgotCi1jbGFzcyBTeXNjb25maWdUZXN0Q2FzZShzdXBwb3J0LkVudmlyb25HdWFyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cGVyKFN5c2NvbmZpZ1Rlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCi0gICAgICAgIHNlbGYubWFrZWZpbGUgPSBOb25lCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYubWFrZWZpbGUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5tYWtlZmlsZSkKLSAgICAgICAgc2VsZi5jbGVhbnVwX3Rlc3RmbigpCi0gICAgICAgIHN1cGVyKFN5c2NvbmZpZ1Rlc3RDYXNlLCBzZWxmKS50ZWFyRG93bigpCi0KLSAgICBkZWYgY2xlYW51cF90ZXN0Zm4oc2VsZik6Ci0gICAgICAgIHBhdGggPSB0ZXN0LnRlc3Rfc3VwcG9ydC5URVNURk4KLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCk6Ci0gICAgICAgICAgICBvcy5yZW1vdmUocGF0aCkKLSAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRoKQotCi0gICAgZGVmIHRlc3RfZ2V0X3B5dGhvbl9saWIoc2VsZik6Ci0gICAgICAgIGxpYl9kaXIgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoKQotICAgICAgICAjIFhYWCBkb2Vzbid0IHdvcmsgb24gTGludXggd2hlbiBQeXRob24gd2FzIG5ldmVyIGluc3RhbGxlZCBiZWZvcmUKLSAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKGxpYl9kaXIpLCBsaWJfZGlyKQotICAgICAgICAjIHRlc3QgZm9yIHB5dGhvbnh4LmxpYj8KLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIocHJlZml4PVRFU1RGTikpCi0gICAgICAgIF9zeXNjb25maWcgPSBfX2ltcG9ydF9fKCdzeXNjb25maWcnKQotICAgICAgICByZXMgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoVHJ1ZSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfc3lzY29uZmlnLmdldF9wYXRoKCdwbGF0c3RkbGliJyksIHJlcykKLQotICAgIGRlZiB0ZXN0X2dldF9weXRob25faW5jKHNlbGYpOgotICAgICAgICBpbmNfZGlyID0gc3lzY29uZmlnLmdldF9weXRob25faW5jKCkKLSAgICAgICAgIyBUaGlzIGlzIG5vdCBtdWNoIG9mIGEgdGVzdC4gIFdlIG1ha2Ugc3VyZSBQeXRob24uaCBleGlzdHMKLSAgICAgICAgIyBpbiB0aGUgZGlyZWN0b3J5IHJldHVybmVkIGJ5IGdldF9weXRob25faW5jKCkgYnV0IHdlIGRvbid0IGtub3cKLSAgICAgICAgIyBpdCBpcyB0aGUgY29ycmVjdCBmaWxlLgotICAgICAgICAjQnJva2VuIGFmdGVyIGlzc3VlIDc3MTIocjc4MTM2KSA6IGFkZCBhIHRlbXBfY3dkIGNvbnRleHQgbWFuYWdlciB0byB0ZXN0X3N1cHBvcnQgLi4uCi0gICAgICAgICNOT1RFOiBJdHMgZmFpbCBvbiBwbGF0Zm9ybXMgd2l0aG91dCByb290IGRpcmVjdG9yeSBzdXBwb3J0KGxpa2Ugd2luZG93cykKLSAgICAgICAgI3doZXJlIHRlbXAgYW5kIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcmllcyBtYXkgc3RheSBvbiBkaWZmZXJlbnQgZHJpdmVycy4KLSAgICAgICAgb2xkX3dkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIoU0FWRURDV0QpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKGluY19kaXIpLCBpbmNfZGlyKQotICAgICAgICBweXRob25faCA9IG9zLnBhdGguam9pbihpbmNfZGlyLCAiUHl0aG9uLmgiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocHl0aG9uX2gpLCBweXRob25faCkKLSAgICAgICAgb3MuY2hkaXIob2xkX3dkKQotCi0gICAgZGVmIHRlc3RfcGFyc2VfbWFrZWZpbGVfYmFzZShzZWxmKToKLSAgICAgICAgc2VsZi5tYWtlZmlsZSA9IHRlc3QudGVzdF9zdXBwb3J0LlRFU1RGTgotICAgICAgICBmZCA9IG9wZW4oc2VsZi5tYWtlZmlsZSwgJ3cnKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmZC53cml0ZShyIkNPTkZJR19BUkdTPSAgJy0tYXJnMT1vcHRhcmcxJyAnRU5WPUxJQiciICdcbicpCi0gICAgICAgICAgICBmZC53cml0ZSgnVkFSPSRPVEhFUlxuT1RIRVI9Zm9vJykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZkLmNsb3NlKCkKLSAgICAgICAgZCA9IHN5c2NvbmZpZy5wYXJzZV9tYWtlZmlsZShzZWxmLm1ha2VmaWxlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsnQ09ORklHX0FSR1MnOiAiJy0tYXJnMT1vcHRhcmcxJyAnRU5WPUxJQiciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnT1RIRVInOiAnZm9vJ30pCi0KLSAgICBkZWYgdGVzdF9wYXJzZV9tYWtlZmlsZV9saXRlcmFsX2RvbGxhcihzZWxmKToKLSAgICAgICAgc2VsZi5tYWtlZmlsZSA9IHRlc3QudGVzdF9zdXBwb3J0LlRFU1RGTgotICAgICAgICBmZCA9IG9wZW4oc2VsZi5tYWtlZmlsZSwgJ3cnKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmZC53cml0ZShyIkNPTkZJR19BUkdTPSAgJy0tYXJnMT1vcHRhcmcxJyAnRU5WPVwkJExJQiciICdcbicpCi0gICAgICAgICAgICBmZC53cml0ZSgnVkFSPSRPVEhFUlxuT1RIRVI9Zm9vJykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZkLmNsb3NlKCkKLSAgICAgICAgZCA9IHN5c2NvbmZpZy5wYXJzZV9tYWtlZmlsZShzZWxmLm1ha2VmaWxlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsnQ09ORklHX0FSR1MnOiByIictLWFyZzE9b3B0YXJnMScgJ0VOVj1cJExJQiciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnT1RIRVInOiAnZm9vJ30pCi0KLQotICAgIGRlZiB0ZXN0X3N5c2NvbmZpZ19tb2R1bGUoc2VsZik6Ci0gICAgICAgIGltcG9ydCBzeXNjb25maWcgYXMgZ2xvYmFsX3N5c2NvbmZpZwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NGTEFHUycpLCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NGTEFHUycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xERkxBR1MnKSwgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMREZMQUdTJykpCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ1VTVE9NSVpFRF9PU1hfQ09NUElMRVInKSwnY29tcGlsZXIgZmxhZ3MgY3VzdG9taXplZCcpCi0gICAgZGVmIHRlc3Rfc3lzY29uZmlnX2NvbXBpbGVyX3ZhcnMoc2VsZik6Ci0gICAgICAgICMgT24gT1MgWCwgYmluYXJ5IGluc3RhbGxlcnMgc3VwcG9ydCBleHRlbnNpb24gbW9kdWxlIGJ1aWxkaW5nIG9uCi0gICAgICAgICMgdmFyaW91cyBsZXZlbHMgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2l0aCBkaWZmZXJpbmcgWGNvZGUKLSAgICAgICAgIyBjb25maWd1cmF0aW9ucy4gIFRoaXMgcmVxdWlyZXMgY3VzdG9taXphdGlvbiBvZiBzb21lIG9mIHRoZQotICAgICAgICAjIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlcyB0byBzdWl0IHRoZSBlbnZpcm9ubWVudCBvbgotICAgICAgICAjIHRoZSBpbnN0YWxsZWQgbWFjaGluZS4gIFNvbWUgb2YgdGhlc2UgY3VzdG9taXphdGlvbnMgbWF5IHJlcXVpcmUKLSAgICAgICAgIyBydW5uaW5nIGV4dGVybmFsIHByb2dyYW1zIGFuZCwgc28sIGFyZSBkZWZlcnJlZCB1bnRpbCBuZWVkZWQgYnkKLSAgICAgICAgIyB0aGUgZmlyc3QgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZC4gIFdpdGggUHl0aG9uIDMuMywgb25seQotICAgICAgICAjIHRoZSBEaXN0dXRpbHMgdmVyc2lvbiBvZiBzeXNjb25maWcgaXMgdXNlZCBmb3IgZXh0ZW5zaW9uIG1vZHVsZQotICAgICAgICAjIGJ1aWxkcywgd2hpY2ggaGFwcGVucyBlYXJsaWVyIGluIHRoZSBEaXN0dXRpbHMgdGVzdHMuICBUaGlzIG1heQotICAgICAgICAjIGNhdXNlIHRoZSBmb2xsb3dpbmcgdGVzdHMgdG8gZmFpbCBzaW5jZSBubyB0ZXN0cyBoYXZlIGNhdXNlZAotICAgICAgICAjIHRoZSBnbG9iYWwgdmVyc2lvbiBvZiBzeXNjb25maWcgdG8gY2FsbCB0aGUgY3VzdG9taXphdGlvbiB5ZXQuCi0gICAgICAgICMgVGhlIHNvbHV0aW9uIGZvciBub3cgaXMgdG8gc2ltcGx5IHNraXAgdGhpcyB0ZXN0IGluIHRoaXMgY2FzZS4KLSAgICAgICAgIyBUaGUgbG9uZ2VyLXRlcm0gc29sdXRpb24gaXMgdG8gb25seSBoYXZlIG9uZSB2ZXJzaW9uIG9mIHN5c2NvbmZpZy4KLQotICAgICAgICBpbXBvcnQgc3lzY29uZmlnIGFzIGdsb2JhbF9zeXNjb25maWcKLSAgICAgICAgaWYgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDVVNUT01JWkVEX09TWF9DT01QSUxFUicpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERTSEFSRUQnKSwgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMRFNIQVJFRCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NDJyksIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0MnKSkKLQotCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKFN5c2NvbmZpZ1Rlc3RDYXNlKSkKLSAgICByZXR1cm4gc3VpdGUKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X3RleHRfZmlsZS5weSBiL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdGV4dF9maWxlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTE5Y2Q0Li4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdGV4dF9maWxlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLSIiIlRlc3RzIGZvciBkaXN0dXRpbHMudGV4dF9maWxlLiIiIgotaW1wb3J0IG9zCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gZGlzdHV0aWxzLnRleHRfZmlsZSBpbXBvcnQgVGV4dEZpbGUKLWZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLQotVEVTVF9EQVRBID0gIiIiIyB0ZXN0IGZpbGUKLQotbGluZSAzIFxcCi0jIGludGVydmVuaW5nIGNvbW1lbnQKLSAgY29udGludWVzIG9uIG5leHQgbGluZQotIiIiCi0KLWNsYXNzIFRleHRGaWxlVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfY2xhc3Moc2VsZik6Ci0gICAgICAgICMgb2xkIHRlc3RzIG1vdmVkIGZyb20gdGV4dF9maWxlLl9fbWFpbl9fCi0gICAgICAgICMgc28gdGhleSBhcmUgcmVhbGx5IGNhbGxlZCBieSB0aGUgYnVpbGRib3RzCi0KLSAgICAgICAgIyByZXN1bHQgMTogbm8gZmFuY3kgb3B0aW9ucwotICAgICAgICByZXN1bHQxID0gWycjIHRlc3QgZmlsZVxuJywgJ1xuJywgJ2xpbmUgMyBcXFxuJywKLSAgICAgICAgICAgICAgICAgICAnIyBpbnRlcnZlbmluZyBjb21tZW50XG4nLAotICAgICAgICAgICAgICAgICAgICcgIGNvbnRpbnVlcyBvbiBuZXh0IGxpbmVcbiddCi0KLSAgICAgICAgIyByZXN1bHQgMjoganVzdCBzdHJpcCBjb21tZW50cwotICAgICAgICByZXN1bHQyID0gWyJcbiIsCi0gICAgICAgICAgICAgICAgICAgImxpbmUgMyBcXFxuIiwKLSAgICAgICAgICAgICAgICAgICAiICBjb250aW51ZXMgb24gbmV4dCBsaW5lXG4iXQotCi0gICAgICAgICMgcmVzdWx0IDM6IGp1c3Qgc3RyaXAgYmxhbmsgbGluZXMKLSAgICAgICAgcmVzdWx0MyA9IFsiIyB0ZXN0IGZpbGVcbiIsCi0gICAgICAgICAgICAgICAgICAgImxpbmUgMyBcXFxuIiwKLSAgICAgICAgICAgICAgICAgICAiIyBpbnRlcnZlbmluZyBjb21tZW50XG4iLAotICAgICAgICAgICAgICAgICAgICIgIGNvbnRpbnVlcyBvbiBuZXh0IGxpbmVcbiJdCi0KLSAgICAgICAgIyByZXN1bHQgNDogZGVmYXVsdCwgc3RyaXAgY29tbWVudHMsIGJsYW5rIGxpbmVzLAotICAgICAgICAjIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlCi0gICAgICAgIHJlc3VsdDQgPSBbImxpbmUgMyBcXCIsCi0gICAgICAgICAgICAgICAgICAgIiAgY29udGludWVzIG9uIG5leHQgbGluZSJdCi0KLSAgICAgICAgIyByZXN1bHQgNTogc3RyaXAgY29tbWVudHMgYW5kIGJsYW5rcywgcGx1cyBqb2luIGxpbmVzIChidXQgZG9uJ3QKLSAgICAgICAgIyAiY29sbGFwc2UiIGpvaW5lZCBsaW5lcwotICAgICAgICByZXN1bHQ1ID0gWyJsaW5lIDMgICBjb250aW51ZXMgb24gbmV4dCBsaW5lIl0KLQotICAgICAgICAjIHJlc3VsdCA2OiBzdHJpcCBjb21tZW50cyBhbmQgYmxhbmtzLCBwbHVzIGpvaW4gbGluZXMgKGFuZAotICAgICAgICAjICJjb2xsYXBzZSIgam9pbmVkIGxpbmVzCi0gICAgICAgIHJlc3VsdDYgPSBbImxpbmUgMyBjb250aW51ZXMgb24gbmV4dCBsaW5lIl0KLQotICAgICAgICBkZWYgdGVzdF9pbnB1dChjb3VudCwgZGVzY3JpcHRpb24sIGZpbGUsIGV4cGVjdGVkX3Jlc3VsdCk6Ci0gICAgICAgICAgICByZXN1bHQgPSBmaWxlLnJlYWRsaW5lcygpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWRfcmVzdWx0KQotCi0gICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRtcGRpciwgInRlc3QudHh0IikKLSAgICAgICAgb3V0X2ZpbGUgPSBvcGVuKGZpbGVuYW1lLCAidyIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG91dF9maWxlLndyaXRlKFRFU1RfREFUQSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG91dF9maWxlLmNsb3NlKCkKLQotICAgICAgICBpbl9maWxlID0gVGV4dEZpbGUoZmlsZW5hbWUsIHN0cmlwX2NvbW1lbnRzPTAsIHNraXBfYmxhbmtzPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsc3RyaXBfd3M9MCwgcnN0cmlwX3dzPTApCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRlc3RfaW5wdXQoMSwgIm5vIHByb2Nlc3NpbmciLCBpbl9maWxlLCByZXN1bHQxKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgaW5fZmlsZS5jbG9zZSgpCi0KLSAgICAgICAgaW5fZmlsZSA9IFRleHRGaWxlKGZpbGVuYW1lLCBzdHJpcF9jb21tZW50cz0xLCBza2lwX2JsYW5rcz0wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbHN0cmlwX3dzPTAsIHJzdHJpcF93cz0wKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0ZXN0X2lucHV0KDIsICJzdHJpcCBjb21tZW50cyIsIGluX2ZpbGUsIHJlc3VsdDIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpbl9maWxlLmNsb3NlKCkKLQotICAgICAgICBpbl9maWxlID0gVGV4dEZpbGUoZmlsZW5hbWUsIHN0cmlwX2NvbW1lbnRzPTAsIHNraXBfYmxhbmtzPTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsc3RyaXBfd3M9MCwgcnN0cmlwX3dzPTApCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRlc3RfaW5wdXQoMywgInN0cmlwIGJsYW5rcyIsIGluX2ZpbGUsIHJlc3VsdDMpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpbl9maWxlLmNsb3NlKCkKLQotICAgICAgICBpbl9maWxlID0gVGV4dEZpbGUoZmlsZW5hbWUpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRlc3RfaW5wdXQoNCwgImRlZmF1bHQgcHJvY2Vzc2luZyIsIGluX2ZpbGUsIHJlc3VsdDQpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpbl9maWxlLmNsb3NlKCkKLQotICAgICAgICBpbl9maWxlID0gVGV4dEZpbGUoZmlsZW5hbWUsIHN0cmlwX2NvbW1lbnRzPTEsIHNraXBfYmxhbmtzPTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBqb2luX2xpbmVzPTEsIHJzdHJpcF93cz0xKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0ZXN0X2lucHV0KDUsICJqb2luIGxpbmVzIHdpdGhvdXQgY29sbGFwc2luZyIsIGluX2ZpbGUsIHJlc3VsdDUpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpbl9maWxlLmNsb3NlKCkKLQotICAgICAgICBpbl9maWxlID0gVGV4dEZpbGUoZmlsZW5hbWUsIHN0cmlwX2NvbW1lbnRzPTEsIHNraXBfYmxhbmtzPTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBqb2luX2xpbmVzPTEsIHJzdHJpcF93cz0xLCBjb2xsYXBzZV9qb2luPTEpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRlc3RfaW5wdXQoNiwgImpvaW4gbGluZXMgd2l0aCBjb2xsYXBzaW5nIiwgaW5fZmlsZSwgcmVzdWx0NikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGluX2ZpbGUuY2xvc2UoKQotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoVGV4dEZpbGVUZXN0Q2FzZSkKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF91bml4Y2NvbXBpbGVyLnB5IGIvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF91bml4Y2NvbXBpbGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmY5MmY4Li4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdW5peGNjb21waWxlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIuIiIiCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCi1mcm9tIGRpc3R1dGlscy51bml4Y2NvbXBpbGVyIGltcG9ydCBVbml4Q0NvbXBpbGVyCi0KLWNsYXNzIFVuaXhDQ29tcGlsZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYuX2JhY2t1cF9wbGF0Zm9ybSA9IHN5cy5wbGF0Zm9ybQotICAgICAgICBzZWxmLl9iYWNrdXBfZ2V0X2NvbmZpZ192YXIgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIKLSAgICAgICAgY2xhc3MgQ29tcGlsZXJXcmFwcGVyKFVuaXhDQ29tcGlsZXIpOgotICAgICAgICAgICAgZGVmIHJwYXRoX2ZvbyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5ydW50aW1lX2xpYnJhcnlfZGlyX29wdGlvbignL2ZvbycpCi0gICAgICAgIHNlbGYuY2MgPSBDb21waWxlcldyYXBwZXIoKQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzeXMucGxhdGZvcm0gPSBzZWxmLl9iYWNrdXBfcGxhdGZvcm0KLSAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyID0gc2VsZi5fYmFja3VwX2dldF9jb25maWdfdmFyCi0KLSAgICBkZWYgdGVzdF9ydW50aW1lX2xpYmRpcl9vcHRpb24oc2VsZik6Ci0KLSAgICAgICAgIyBub3QgdGVzdGVkIHVuZGVyIHdpbmRvd3MKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAjIElzc3VlIzU5MDAKLSAgICAgICAgIwotICAgICAgICAjIEVuc3VyZSBSVU5QQVRIIGlzIGFkZGVkIHRvIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggUlBBVEggaWYKLSAgICAgICAgIyBHTlUgbGQgaXMgdXNlZAotCi0gICAgICAgICMgZGFyd2luCi0gICAgICAgIHN5cy5wbGF0Zm9ybSA9ICdkYXJ3aW4nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYy5ycGF0aF9mb28oKSwgJy1ML2ZvbycpCi0KLSAgICAgICAgIyBocC11eAotICAgICAgICBzeXMucGxhdGZvcm0gPSAnaHAtdXgnCi0gICAgICAgIG9sZF9nY3YgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIKLSAgICAgICAgZGVmIGdjdih2KToKLSAgICAgICAgICAgIHJldHVybiAneHh4JwotICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIgPSBnY3YKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNjLnJwYXRoX2ZvbygpLCBbJytzJywgJy1ML2ZvbyddKQotCi0gICAgICAgIGRlZiBnY3Yodik6Ci0gICAgICAgICAgICByZXR1cm4gJ2djYycKLSAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyID0gZ2N2Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYy5ycGF0aF9mb28oKSwgWyctV2wsK3MnLCAnLUwvZm9vJ10pCi0KLSAgICAgICAgZGVmIGdjdih2KToKLSAgICAgICAgICAgIHJldHVybiAnZysrJwotICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIgPSBnY3YKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNjLnJwYXRoX2ZvbygpLCBbJy1XbCwrcycsICctTC9mb28nXSkKLQotICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIgPSBvbGRfZ2N2Ci0KLSAgICAgICAgIyBpcml4NjQ2Ci0gICAgICAgIHN5cy5wbGF0Zm9ybSA9ICdpcml4NjQ2JwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2MucnBhdGhfZm9vKCksIFsnLXJwYXRoJywgJy9mb28nXSkKLQotICAgICAgICAjIG9zZjFWNQotICAgICAgICBzeXMucGxhdGZvcm0gPSAnb3NmMVY1JwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2MucnBhdGhfZm9vKCksIFsnLXJwYXRoJywgJy9mb28nXSkKLQotICAgICAgICAjIEdDQyBHTlVMRAotICAgICAgICBzeXMucGxhdGZvcm0gPSAnYmFyJwotICAgICAgICBkZWYgZ2N2KHYpOgotICAgICAgICAgICAgaWYgdiA9PSAnQ0MnOgotICAgICAgICAgICAgICAgIHJldHVybiAnZ2NjJwotICAgICAgICAgICAgZWxpZiB2ID09ICdHTlVMRCc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICd5ZXMnCi0gICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhciA9IGdjdgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2MucnBhdGhfZm9vKCksICctV2wsLVIvZm9vJykKLQotICAgICAgICAjIEdDQyBub24tR05VTEQKLSAgICAgICAgc3lzLnBsYXRmb3JtID0gJ2JhcicKLSAgICAgICAgZGVmIGdjdih2KToKLSAgICAgICAgICAgIGlmIHYgPT0gJ0NDJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2djYycKLSAgICAgICAgICAgIGVsaWYgdiA9PSAnR05VTEQnOgotICAgICAgICAgICAgICAgIHJldHVybiAnbm8nCi0gICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhciA9IGdjdgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2MucnBhdGhfZm9vKCksICctV2wsLVIvZm9vJykKLQotICAgICAgICAjIEdDQyBHTlVMRCB3aXRoIGZ1bGx5IHF1YWxpZmllZCBjb25maWd1cmF0aW9uIHByZWZpeAotICAgICAgICAjIHNlZSAjNzYxNwotICAgICAgICBzeXMucGxhdGZvcm0gPSAnYmFyJwotICAgICAgICBkZWYgZ2N2KHYpOgotICAgICAgICAgICAgaWYgdiA9PSAnQ0MnOgotICAgICAgICAgICAgICAgIHJldHVybiAneDg2XzY0LXBjLWxpbnV4LWdudS1nY2MtNC40LjInCi0gICAgICAgICAgICBlbGlmIHYgPT0gJ0dOVUxEJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3llcycKLSAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyID0gZ2N2Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYy5ycGF0aF9mb28oKSwgJy1XbCwtUi9mb28nKQotCi0KLSAgICAgICAgIyBub24tR0NDIEdOVUxECi0gICAgICAgIHN5cy5wbGF0Zm9ybSA9ICdiYXInCi0gICAgICAgIGRlZiBnY3Yodik6Ci0gICAgICAgICAgICBpZiB2ID09ICdDQyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjYycKLSAgICAgICAgICAgIGVsaWYgdiA9PSAnR05VTEQnOgotICAgICAgICAgICAgICAgIHJldHVybiAneWVzJwotICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIgPSBnY3YKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNjLnJwYXRoX2ZvbygpLCAnLVIvZm9vJykKLQotICAgICAgICAjIG5vbi1HQ0Mgbm9uLUdOVUxECi0gICAgICAgIHN5cy5wbGF0Zm9ybSA9ICdiYXInCi0gICAgICAgIGRlZiBnY3Yodik6Ci0gICAgICAgICAgICBpZiB2ID09ICdDQyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjYycKLSAgICAgICAgICAgIGVsaWYgdiA9PSAnR05VTEQnOgotICAgICAgICAgICAgICAgIHJldHVybiAnbm8nCi0gICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhciA9IGdjdgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2MucnBhdGhfZm9vKCksICctUi9mb28nKQotCi0gICAgICAgICMgQUlYIEMvQysrIGxpbmtlcgotICAgICAgICBzeXMucGxhdGZvcm0gPSAnYWl4JwotICAgICAgICBkZWYgZ2N2KHYpOgotICAgICAgICAgICAgcmV0dXJuICd4eHgnCi0gICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhciA9IGdjdgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2MucnBhdGhfZm9vKCksICctYmxpYnBhdGg6L2ZvbycpCi0KLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFVuaXhDQ29tcGlsZXJUZXN0Q2FzZSkKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF91cGxvYWQucHkgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTkxMTE5OS4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weQorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0jIC0qLSBlbmNvZGluZzogdXRmOCAtKi0KLSIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC51cGxvYWQuIiIiCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0KLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQgaW1wb3J0IHVwbG9hZCBhcyB1cGxvYWRfbW9kCi1mcm9tIGRpc3R1dGlscy5jb21tYW5kLnVwbG9hZCBpbXBvcnQgdXBsb2FkCi1mcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBEaXN0cmlidXRpb24KLQotZnJvbSBkaXN0dXRpbHMudGVzdHMudGVzdF9jb25maWcgaW1wb3J0IFBZUElSQywgUHlQSVJDQ29tbWFuZFRlc3RDYXNlCi0KLVBZUElSQ19MT05HX1BBU1NXT1JEID0gIiIiXAotW2Rpc3R1dGlsc10KLQotaW5kZXgtc2VydmVycyA9Ci0gICAgc2VydmVyMQotICAgIHNlcnZlcjIKLQotW3NlcnZlcjFdCi11c2VybmFtZTptZQotcGFzc3dvcmQ6YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQotCi1bc2VydmVyMl0KLXVzZXJuYW1lOm1lYWdhaW4KLXBhc3N3b3JkOiBzZWNyZXQKLXJlYWxtOmFjbWUKLXJlcG9zaXRvcnk6aHR0cDovL2Fub3RoZXIucHlwaS8KLSIiIgotCi0KLVBZUElSQ19OT1BBU1NXT1JEID0gIiIiXAotW2Rpc3R1dGlsc10KLQotaW5kZXgtc2VydmVycyA9Ci0gICAgc2VydmVyMQotCi1bc2VydmVyMV0KLXVzZXJuYW1lOm1lCi0iIiIKLQotY2xhc3MgRmFrZU9wZW4ob2JqZWN0KToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwpOgotICAgICAgICBzZWxmLnVybCA9IHVybAotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh1cmwsIHN0cik6Ci0gICAgICAgICAgICBzZWxmLnJlcSA9IHVybAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5yZXEgPSBOb25lCi0gICAgICAgIHNlbGYubXNnID0gJ09LJwotCi0gICAgZGVmIGdldGNvZGUoc2VsZik6Ci0gICAgICAgIHJldHVybiAyMDAKLQotCi1jbGFzcyB1cGxvYWRUZXN0Q2FzZShQeVBJUkNDb21tYW5kVGVzdENhc2UpOgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzdXBlcih1cGxvYWRUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQotICAgICAgICBzZWxmLm9sZF9vcGVuID0gdXBsb2FkX21vZC51cmxvcGVuCi0gICAgICAgIHVwbG9hZF9tb2QudXJsb3BlbiA9IHNlbGYuX3VybG9wZW4KLSAgICAgICAgc2VsZi5sYXN0X29wZW4gPSBOb25lCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHVwbG9hZF9tb2QudXJsb3BlbiA9IHNlbGYub2xkX29wZW4KLSAgICAgICAgc3VwZXIodXBsb2FkVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKLQotICAgIGRlZiBfdXJsb3BlbihzZWxmLCB1cmwpOgotICAgICAgICBzZWxmLmxhc3Rfb3BlbiA9IEZha2VPcGVuKHVybCkKLSAgICAgICAgcmV0dXJuIHNlbGYubGFzdF9vcGVuCi0KLSAgICBkZWYgdGVzdF9maW5hbGl6ZV9vcHRpb25zKHNlbGYpOgotCi0gICAgICAgICMgbmV3IGZvcm1hdAotICAgICAgICBzZWxmLndyaXRlX2ZpbGUoc2VsZi5yYywgUFlQSVJDKQotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKLSAgICAgICAgY21kID0gdXBsb2FkKGRpc3QpCi0gICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKLSAgICAgICAgZm9yIGF0dHIsIHdhaXRlZCBpbiAoKCd1c2VybmFtZScsICdtZScpLCAoJ3Bhc3N3b3JkJywgJ3NlY3JldCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JlYWxtJywgJ3B5cGknKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdyZXBvc2l0b3J5JywgJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihjbWQsIGF0dHIpLCB3YWl0ZWQpCi0KLSAgICBkZWYgdGVzdF9zYXZlZF9wYXNzd29yZChzZWxmKToKLSAgICAgICAgIyBmaWxlIHdpdGggbm8gcGFzc3dvcmQKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKHNlbGYucmMsIFBZUElSQ19OT1BBU1NXT1JEKQotCi0gICAgICAgICMgbWFrZSBzdXJlIGl0IHBhc3NlcwotICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKLSAgICAgICAgY21kID0gdXBsb2FkKGRpc3QpCi0gICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQucGFzc3dvcmQsIE5vbmUpCi0KLSAgICAgICAgIyBtYWtlIHN1cmUgd2UgZ2V0IGl0IGFzIHdlbGwsIGlmIGFub3RoZXIgY29tbWFuZAotICAgICAgICAjIGluaXRpYWxpemVkIGl0IGF0IHRoZSBkaXN0IGxldmVsCi0gICAgICAgIGRpc3QucGFzc3dvcmQgPSAneHh4JwotICAgICAgICBjbWQgPSB1cGxvYWQoZGlzdCkKLSAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5wYXNzd29yZCwgJ3h4eCcpCi0KLSAgICBkZWYgdGVzdF91cGxvYWQoc2VsZik6Ci0gICAgICAgIHRtcCA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4odG1wLCAneHh4JykKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKHBhdGgpCi0gICAgICAgIGNvbW1hbmQsIHB5dmVyc2lvbiwgZmlsZW5hbWUgPSAneHh4JywgJzIuNicsIHBhdGgKLSAgICAgICAgZGlzdF9maWxlcyA9IFsoY29tbWFuZCwgcHl2ZXJzaW9uLCBmaWxlbmFtZSldCi0gICAgICAgIHNlbGYud3JpdGVfZmlsZShzZWxmLnJjLCBQWVBJUkNfTE9OR19QQVNTV09SRCkKLQotICAgICAgICAjIGxldHMgcnVuIGl0Ci0gICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KGRpc3RfZmlsZXM9ZGlzdF9maWxlcywgYXV0aG9yPXUnZMOpZMOpJykKLSAgICAgICAgY21kID0gdXBsb2FkKGRpc3QpCi0gICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgY21kLnJ1bigpCi0KLSAgICAgICAgIyB3aGF0IGRpZCB3ZSBzZW5kID8KLSAgICAgICAgc2VsZi5hc3NlcnRJbignZMOpZMOpJywgc2VsZi5sYXN0X29wZW4ucmVxLmRhdGEpCi0gICAgICAgIGhlYWRlcnMgPSBkaWN0KHNlbGYubGFzdF9vcGVuLnJlcS5oZWFkZXJzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYWRlcnNbJ0NvbnRlbnQtbGVuZ3RoJ10sICcyMDg1JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhlYWRlcnNbJ0NvbnRlbnQtdHlwZSddLnN0YXJ0c3dpdGgoJ211bHRpcGFydC9mb3JtLWRhdGEnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxhc3Rfb3Blbi5yZXEuZ2V0X21ldGhvZCgpLCAnUE9TVCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sYXN0X29wZW4ucmVxLmdldF9mdWxsX3VybCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGknKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3h4eCcgaW4gc2VsZi5sYXN0X29wZW4ucmVxLmRhdGEpCi0gICAgICAgIGF1dGggPSBzZWxmLmxhc3Rfb3Blbi5yZXEuaGVhZGVyc1snQXV0aG9yaXphdGlvbiddCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ1xuJyBpbiBhdXRoKQotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUodXBsb2FkVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weSBiL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdjZDRjYy4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X3V0aWwucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0iIiJUZXN0cyBmb3IgZGlzdHV0aWxzLnV0aWwuIiIiCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsIERpc3R1dGlsc0J5dGVDb21waWxlRXJyb3IKLWZyb20gZGlzdHV0aWxzLnV0aWwgaW1wb3J0IGJ5dGVfY29tcGlsZQotCi1jbGFzcyBVdGlsVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfZG9udF93cml0ZV9ieXRlY29kZShzZWxmKToKLSAgICAgICAgIyBtYWtlcyBzdXJlIGJ5dGVfY29tcGlsZSByYWlzZSBhIERpc3R1dGlsc0Vycm9yCi0gICAgICAgICMgaWYgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgaXMgVHJ1ZQotICAgICAgICBvbGRfZG9udF93cml0ZV9ieXRlY29kZSA9IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlCi0gICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gVHJ1ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNCeXRlQ29tcGlsZUVycm9yLCBieXRlX2NvbXBpbGUsIFtdKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBvbGRfZG9udF93cml0ZV9ieXRlY29kZQotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoVXRpbFRlc3RDYXNlKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X3ZlcnNpb24ucHkgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X3ZlcnNpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxODk5NTYuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF92ZXJzaW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotIiIiVGVzdHMgZm9yIGRpc3R1dGlscy52ZXJzaW9uLiIiIgotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIGRpc3R1dGlscy52ZXJzaW9uIGltcG9ydCBMb29zZVZlcnNpb24KLWZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IFN0cmljdFZlcnNpb24KLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotCi1jbGFzcyBWZXJzaW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfcHJlcmVsZWFzZShzZWxmKToKLSAgICAgICAgdmVyc2lvbiA9IFN0cmljdFZlcnNpb24oJzEuMi4zYTEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZlcnNpb24udmVyc2lvbiwgKDEsIDIsIDMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZlcnNpb24ucHJlcmVsZWFzZSwgKCdhJywgMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHZlcnNpb24pLCAnMS4yLjNhMScpCi0KLSAgICAgICAgdmVyc2lvbiA9IFN0cmljdFZlcnNpb24oJzEuMi4wJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodmVyc2lvbiksICcxLjInKQotCi0gICAgZGVmIHRlc3RfY21wX3N0cmljdChzZWxmKToKLSAgICAgICAgdmVyc2lvbnMgPSAoKCcxLjUuMScsICcxLjUuMmIyJywgLTEpLAotICAgICAgICAgICAgICAgICAgICAoJzE2MScsICczLjEwYScsIFZhbHVlRXJyb3IpLAotICAgICAgICAgICAgICAgICAgICAoJzguMDInLCAnOC4wMicsIDApLAotICAgICAgICAgICAgICAgICAgICAoJzMuNGonLCAnMTk5Ni4wNy4xMicsIFZhbHVlRXJyb3IpLAotICAgICAgICAgICAgICAgICAgICAoJzMuMi5wbDAnLCAnMy4xLjEuNicsIFZhbHVlRXJyb3IpLAotICAgICAgICAgICAgICAgICAgICAoJzJnNicsICcxMWcnLCBWYWx1ZUVycm9yKSwKLSAgICAgICAgICAgICAgICAgICAgKCcwLjknLCAnMi4yJywgLTEpLAotICAgICAgICAgICAgICAgICAgICAoJzEuMi4xJywgJzEuMicsIDEpLAotICAgICAgICAgICAgICAgICAgICAoJzEuMScsICcxLjIuMicsIC0xKSwKLSAgICAgICAgICAgICAgICAgICAgKCcxLjInLCAnMS4xJywgMSksCi0gICAgICAgICAgICAgICAgICAgICgnMS4yLjEnLCAnMS4yLjInLCAtMSksCi0gICAgICAgICAgICAgICAgICAgICgnMS4yLjInLCAnMS4yJywgMSksCi0gICAgICAgICAgICAgICAgICAgICgnMS4yJywgJzEuMi4yJywgLTEpLAotICAgICAgICAgICAgICAgICAgICAoJzAuNC4wJywgJzAuNCcsIDApLAotICAgICAgICAgICAgICAgICAgICAoJzEuMTMrKycsICc1LjUua3cnLCBWYWx1ZUVycm9yKSkKLQotICAgICAgICBmb3IgdjEsIHYyLCB3YW50ZWQgaW4gdmVyc2lvbnM6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmVzID0gU3RyaWN0VmVyc2lvbih2MSkuX19jbXBfXyhTdHJpY3RWZXJzaW9uKHYyKSkKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgIGlmIHdhbnRlZCBpcyBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCgiY21wKCVzLCAlcykgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZG4ndCByYWlzZSBWYWx1ZUVycm9yIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAodjEsIHYyKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCB3YW50ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbXAoJXMsICVzKSBzaG91bGQgYmUgJXMsIGdvdCAlcycgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodjEsIHYyLCB3YW50ZWQsIHJlcykpCi0KLQotICAgIGRlZiB0ZXN0X2NtcChzZWxmKToKLSAgICAgICAgdmVyc2lvbnMgPSAoKCcxLjUuMScsICcxLjUuMmIyJywgLTEpLAotICAgICAgICAgICAgICAgICAgICAoJzE2MScsICczLjEwYScsIDEpLAotICAgICAgICAgICAgICAgICAgICAoJzguMDInLCAnOC4wMicsIDApLAotICAgICAgICAgICAgICAgICAgICAoJzMuNGonLCAnMTk5Ni4wNy4xMicsIC0xKSwKLSAgICAgICAgICAgICAgICAgICAgKCczLjIucGwwJywgJzMuMS4xLjYnLCAxKSwKLSAgICAgICAgICAgICAgICAgICAgKCcyZzYnLCAnMTFnJywgLTEpLAotICAgICAgICAgICAgICAgICAgICAoJzAuOTYwOTIzJywgJzIuMmJldGEyOScsIC0xKSwKLSAgICAgICAgICAgICAgICAgICAgKCcxLjEzKysnLCAnNS41Lmt3JywgLTEpKQotCi0KLSAgICAgICAgZm9yIHYxLCB2Miwgd2FudGVkIGluIHZlcnNpb25zOgotICAgICAgICAgICAgcmVzID0gTG9vc2VWZXJzaW9uKHYxKS5fX2NtcF9fKExvb3NlVmVyc2lvbih2MikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgd2FudGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY21wKCVzLCAlcykgc2hvdWxkIGJlICVzLCBnb3QgJXMnICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHYxLCB2Miwgd2FudGVkLCByZXMpKQotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoVmVyc2lvblRlc3RDYXNlKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X3ZlcnNpb25wcmVkaWNhdGUucHkgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy90ZXN0X3ZlcnNpb25wcmVkaWNhdGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkNmM4ZDUuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdGVzdHMvdGVzdF92ZXJzaW9ucHJlZGljYXRlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIiIiVGVzdHMgaGFybmVzcyBmb3IgZGlzdHV0aWxzLnZlcnNpb25wcmVkaWNhdGUuCi0KLSIiIgotCi1pbXBvcnQgZGlzdHV0aWxzLnZlcnNpb25wcmVkaWNhdGUKLWltcG9ydCBkb2N0ZXN0Ci1mcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICByZXR1cm4gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoZGlzdHV0aWxzLnZlcnNpb25wcmVkaWNhdGUpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3h4bW9kdWxlLmMgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy90ZXN0cy94eG1vZHVsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDliMDhhLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3Rlc3RzL3h4bW9kdWxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzkgKzAsMCBAQAotCi0vKiBVc2UgdGhpcyBmaWxlIGFzIGEgdGVtcGxhdGUgdG8gc3RhcnQgaW1wbGVtZW50aW5nIGEgbW9kdWxlIHRoYXQKLSAgIGFsc28gZGVjbGFyZXMgb2JqZWN0IHR5cGVzLiBBbGwgb2NjdXJyZW5jZXMgb2YgJ1h4bycgc2hvdWxkIGJlIGNoYW5nZWQKLSAgIHRvIHNvbWV0aGluZyByZWFzb25hYmxlIGZvciB5b3VyIG9iamVjdHMuIEFmdGVyIHRoYXQsIGFsbCBvdGhlcgotICAgb2NjdXJyZW5jZXMgb2YgJ3h4JyBzaG91bGQgYmUgY2hhbmdlZCB0byBzb21ldGhpbmcgcmVhc29uYWJsZSBmb3IgeW91cgotICAgbW9kdWxlLiBJZiB5b3VyIG1vZHVsZSBpcyBuYW1lZCBmb28geW91ciBzb3VyY2VmaWxlIHNob3VsZCBiZSBuYW1lZAotICAgZm9vbW9kdWxlLmMuCi0KLSAgIFlvdSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gZGVsZXRlIGFsbCByZWZlcmVuY2VzIHRvICd4X2F0dHInIGFuZCBhZGQKLSAgIHlvdXIgb3duIHR5cGVzIG9mIGF0dHJpYnV0ZXMgaW5zdGVhZC4gIE1heWJlIHlvdSB3YW50IHRvIG5hbWUgeW91cgotICAgbG9jYWwgdmFyaWFibGVzIG90aGVyIHRoYW4gJ3NlbGYnLiAgSWYgeW91ciBvYmplY3QgdHlwZSBpcyBuZWVkZWQgaW4KLSAgIG90aGVyIGZpbGVzLCB5b3UnbGwgaGF2ZSB0byBjcmVhdGUgYSBmaWxlICJmb29iYXJvYmplY3QuaCI7IHNlZQotICAgaW50b2JqZWN0LmggZm9yIGFuIGV4YW1wbGUuICovCi0KLS8qIFh4byBvYmplY3RzICovCi0KLSNpbmNsdWRlICJQeXRob24uaCIKLQotc3RhdGljIFB5T2JqZWN0ICpFcnJvck9iamVjdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIFB5T2JqZWN0X0hFQUQKLSAgICBQeU9iamVjdCAgICAgICAgICAgICp4X2F0dHI7ICAgICAgICAvKiBBdHRyaWJ1dGVzIGRpY3Rpb25hcnkgKi8KLX0gWHhvT2JqZWN0OwotCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFh4b19UeXBlOwotCi0jZGVmaW5lIFh4b09iamVjdF9DaGVjayh2KSAgICAgIChQeV9UWVBFKHYpID09ICZYeG9fVHlwZSkKLQotc3RhdGljIFh4b09iamVjdCAqCi1uZXdYeG9PYmplY3QoUHlPYmplY3QgKmFyZykKLXsKLSAgICBYeG9PYmplY3QgKnNlbGY7Ci0gICAgc2VsZiA9IFB5T2JqZWN0X05ldyhYeG9PYmplY3QsICZYeG9fVHlwZSk7Ci0gICAgaWYgKHNlbGYgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgc2VsZi0+eF9hdHRyID0gTlVMTDsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLyogWHhvIG1ldGhvZHMgKi8KLQotc3RhdGljIHZvaWQKLVh4b19kZWFsbG9jKFh4b09iamVjdCAqc2VsZikKLXsKLSAgICBQeV9YREVDUkVGKHNlbGYtPnhfYXR0cik7Ci0gICAgUHlPYmplY3RfRGVsKHNlbGYpOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotWHhvX2RlbW8oWHhvT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIjpkZW1vIikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKLX0KLQotc3RhdGljIFB5TWV0aG9kRGVmIFh4b19tZXRob2RzW10gPSB7Ci0gICAgeyJkZW1vIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pWHhvX2RlbW8sICBNRVRIX1ZBUkFSR1MsCi0gICAgICAgIFB5RG9jX1NUUigiZGVtbygpIC0+IE5vbmUiKX0sCi0gICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KLX07Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1YeG9fZ2V0YXR0cihYeG9PYmplY3QgKnNlbGYsIGNoYXIgKm5hbWUpCi17Ci0gICAgaWYgKHNlbGYtPnhfYXR0ciAhPSBOVUxMKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp2ID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoc2VsZi0+eF9hdHRyLCBuYW1lKTsKLSAgICAgICAgaWYgKHYgIT0gTlVMTCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKHYpOwotICAgICAgICAgICAgcmV0dXJuIHY7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFB5X0ZpbmRNZXRob2QoWHhvX21ldGhvZHMsIChQeU9iamVjdCAqKXNlbGYsIG5hbWUpOwotfQotCi1zdGF0aWMgaW50Ci1YeG9fc2V0YXR0cihYeG9PYmplY3QgKnNlbGYsIGNoYXIgKm5hbWUsIFB5T2JqZWN0ICp2KQotewotICAgIGlmIChzZWxmLT54X2F0dHIgPT0gTlVMTCkgewotICAgICAgICBzZWxmLT54X2F0dHIgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgIGlmIChzZWxmLT54X2F0dHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICBpbnQgcnYgPSBQeURpY3RfRGVsSXRlbVN0cmluZyhzZWxmLT54X2F0dHIsIG5hbWUpOwotICAgICAgICBpZiAocnYgPCAwKQotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0F0dHJpYnV0ZUVycm9yLAotICAgICAgICAgICAgICAgICJkZWxldGUgbm9uLWV4aXN0aW5nIFh4byBhdHRyaWJ1dGUiKTsKLSAgICAgICAgcmV0dXJuIHJ2OwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBQeURpY3RfU2V0SXRlbVN0cmluZyhzZWxmLT54X2F0dHIsIG5hbWUsIHYpOwotfQotCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFh4b19UeXBlID0gewotICAgIC8qIFRoZSBvYl90eXBlIGZpZWxkIG11c3QgYmUgaW5pdGlhbGl6ZWQgaW4gdGhlIG1vZHVsZSBpbml0IGZ1bmN0aW9uCi0gICAgICogdG8gYmUgcG9ydGFibGUgdG8gV2luZG93cyB3aXRob3V0IHVzaW5nIEMrKy4gKi8KLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAieHhtb2R1bGUuWHhvIiwgICAgICAgICAgICAgLyp0cF9uYW1lKi8KLSAgICBzaXplb2YoWHhvT2JqZWN0KSwgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KLSAgICAvKiBtZXRob2RzICovCi0gICAgKGRlc3RydWN0b3IpWHhvX2RlYWxsb2MsIC8qdHBfZGVhbGxvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLwotICAgIChnZXRhdHRyZnVuYylYeG9fZ2V0YXR0ciwgLyp0cF9nZXRhdHRyKi8KLSAgICAoc2V0YXR0cmZ1bmMpWHhvX3NldGF0dHIsIC8qdHBfc2V0YXR0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgIC8qdHBfZmxhZ3MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldHNldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3QqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3JfZ2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX3NldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2luaXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYWxsb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2ZyZWUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXNfZ2MqLwotfTsKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBGdW5jdGlvbiBvZiB0d28gaW50ZWdlcnMgcmV0dXJuaW5nIGludGVnZXIgKi8KLQotUHlEb2NfU1RSVkFSKHh4X2Zvb19kb2MsCi0iZm9vKGksailcblwKLVxuXAotUmV0dXJuIHRoZSBzdW0gb2YgaSBhbmQgai4iKTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLXh4X2ZvbyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgbG9uZyBpLCBqOwotICAgIGxvbmcgcmVzOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibGw6Zm9vIiwgJmksICZqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmVzID0gaStqOyAvKiBYWFggRG8gc29tZXRoaW5nIGhlcmUgKi8KLSAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcocmVzKTsKLX0KLQotCi0vKiBGdW5jdGlvbiBvZiBubyBhcmd1bWVudHMgcmV0dXJuaW5nIG5ldyBYeG8gb2JqZWN0ICovCi0KLXN0YXRpYyBQeU9iamVjdCAqCi14eF9uZXcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFh4b09iamVjdCAqcnY7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIjpuZXciKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcnYgPSBuZXdYeG9PYmplY3QoYXJncyk7Ci0gICAgaWYgKHJ2ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiAoUHlPYmplY3QgKilydjsKLX0KLQotLyogRXhhbXBsZSB3aXRoIHN1YnRsZSBidWcgZnJvbSBleHRlbnNpb25zIG1hbnVhbCAoIlRoaW4gSWNlIikuICovCi0KLXN0YXRpYyBQeU9iamVjdCAqCi14eF9idWcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpsaXN0LCAqaXRlbTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpidWciLCAmbGlzdCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaXRlbSA9IFB5TGlzdF9HZXRJdGVtKGxpc3QsIDApOwotICAgIC8qIFB5X0lOQ1JFRihpdGVtKTsgKi8KLSAgICBQeUxpc3RfU2V0SXRlbShsaXN0LCAxLCBQeUludF9Gcm9tTG9uZygwTCkpOwotICAgIFB5T2JqZWN0X1ByaW50KGl0ZW0sIHN0ZG91dCwgMCk7Ci0gICAgcHJpbnRmKCJcbiIpOwotICAgIC8qIFB5X0RFQ1JFRihpdGVtKTsgKi8KLQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKLX0KLQotLyogVGVzdCBiYWQgZm9ybWF0IGNoYXJhY3RlciAqLwotCi1zdGF0aWMgUHlPYmplY3QgKgoteHhfcm9qKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqYTsKLSAgICBsb25nIGI7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIzpyb2oiLCAmYSwgJmIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7Ci19Ci0KLQotLyogLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFN0cl9UeXBlID0gewotICAgIC8qIFRoZSBvYl90eXBlIGZpZWxkIG11c3QgYmUgaW5pdGlhbGl6ZWQgaW4gdGhlIG1vZHVsZSBpbml0IGZ1bmN0aW9uCi0gICAgICogdG8gYmUgcG9ydGFibGUgdG8gV2luZG93cyB3aXRob3V0IHVzaW5nIEMrKy4gKi8KLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAieHhtb2R1bGUuU3RyIiwgICAgICAgICAgICAgLyp0cF9uYW1lKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KLSAgICAvKiBtZXRob2RzICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVhbGxvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NvbXBhcmUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2gqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qdHBfZmxhZ3MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQqLwotICAgIDAsIC8qIHNlZSBpbml0eHggKi8gICAgICAgICAvKnRwX2Jhc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3QqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX2dldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3Jfc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pbml0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9mcmVlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pc19nYyovCi19OwotCi0vKiAtLS0tLS0tLS0tICovCi0KLXN0YXRpYyBQeU9iamVjdCAqCi1udWxsX3JpY2hjb21wYXJlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb3RoZXIsIGludCBvcCkKLXsKLSAgICBQeV9JTkNSRUYoUHlfTm90SW1wbGVtZW50ZWQpOwotICAgIHJldHVybiBQeV9Ob3RJbXBsZW1lbnRlZDsKLX0KLQotc3RhdGljIFB5VHlwZU9iamVjdCBOdWxsX1R5cGUgPSB7Ci0gICAgLyogVGhlIG9iX3R5cGUgZmllbGQgbXVzdCBiZSBpbml0aWFsaXplZCBpbiB0aGUgbW9kdWxlIGluaXQgZnVuY3Rpb24KLSAgICAgKiB0byBiZSBwb3J0YWJsZSB0byBXaW5kb3dzIHdpdGhvdXQgdXNpbmcgQysrLiAqLwotICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICJ4eG1vZHVsZS5OdWxsIiwgICAgICAgICAgICAvKnRwX25hbWUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLwotICAgIC8qIG1ldGhvZHMgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZWFsbG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY29tcGFyZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgLyp0cF9mbGFncyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwotICAgIG51bGxfcmljaGNvbXBhcmUsICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21lbWJlcnMqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldHNldCovCi0gICAgMCwgLyogc2VlIGluaXR4eCAqLyAgICAgICAgIC8qdHBfYmFzZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGljdCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3JfZ2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9zZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2luaXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FsbG9jKi8KLSAgICAwLCAvKiBzZWUgaW5pdHh4ICovICAgICAgICAgLyp0cF9uZXcqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2ZyZWUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2lzX2djKi8KLX07Ci0KLQotLyogLS0tLS0tLS0tLSAqLwotCi0KLS8qIExpc3Qgb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1vZHVsZSAqLwotCi1zdGF0aWMgUHlNZXRob2REZWYgeHhfbWV0aG9kc1tdID0gewotICAgIHsicm9qIiwgICAgICAgICAgICAgeHhfcm9qLCAgICAgICAgIE1FVEhfVkFSQVJHUywKLSAgICAgICAgUHlEb2NfU1RSKCJyb2ooYSxiKSAtPiBOb25lIil9LAotICAgIHsiZm9vIiwgICAgICAgICAgICAgeHhfZm9vLCAgICAgICAgIE1FVEhfVkFSQVJHUywKLSAgICAgICAgeHhfZm9vX2RvY30sCi0gICAgeyJuZXciLCAgICAgICAgICAgICB4eF9uZXcsICAgICAgICAgTUVUSF9WQVJBUkdTLAotICAgICAgICBQeURvY19TVFIoIm5ldygpIC0+IG5ldyBYeCBvYmplY3QiKX0sCi0gICAgeyJidWciLCAgICAgICAgICAgICB4eF9idWcsICAgICAgICAgTUVUSF9WQVJBUkdTLAotICAgICAgICBQeURvY19TVFIoImJ1ZyhvKSAtPiBOb25lIil9LAotICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCi19OwotCi1QeURvY19TVFJWQVIobW9kdWxlX2RvYywKLSJUaGlzIGlzIGEgdGVtcGxhdGUgbW9kdWxlIGp1c3QgZm9yIGluc3RydWN0aW9uLiIpOwotCi0vKiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlIG1vZHVsZSAoKm11c3QqIGJlIGNhbGxlZCBpbml0eHgpICovCi0KLVB5TU9ESU5JVF9GVU5DCi1pbml0eHgodm9pZCkKLXsKLSAgICBQeU9iamVjdCAqbTsKLQotICAgIC8qIER1ZSB0byBjcm9zcyBwbGF0Zm9ybSBjb21waWxlciBpc3N1ZXMgdGhlIHNsb3RzIG11c3QgYmUgZmlsbGVkCi0gICAgICogaGVyZS4gSXQncyByZXF1aXJlZCBmb3IgcG9ydGFiaWxpdHkgdG8gV2luZG93cyB3aXRob3V0IHJlcXVpcmluZwotICAgICAqIEMrKy4gKi8KLSAgICBOdWxsX1R5cGUudHBfYmFzZSA9ICZQeUJhc2VPYmplY3RfVHlwZTsKLSAgICBOdWxsX1R5cGUudHBfbmV3ID0gUHlUeXBlX0dlbmVyaWNOZXc7Ci0gICAgU3RyX1R5cGUudHBfYmFzZSA9ICZQeVVuaWNvZGVfVHlwZTsKLQotICAgIC8qIEZpbmFsaXplIHRoZSB0eXBlIG9iamVjdCBpbmNsdWRpbmcgc2V0dGluZyB0eXBlIG9mIHRoZSBuZXcgdHlwZQotICAgICAqIG9iamVjdDsgZG9pbmcgaXQgaGVyZSBpcyByZXF1aXJlZCBmb3IgcG9ydGFiaWxpdHksIHRvby4gKi8KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZYeG9fVHlwZSkgPCAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvKiBDcmVhdGUgdGhlIG1vZHVsZSBhbmQgYWRkIHRoZSBmdW5jdGlvbnMgKi8KLSAgICBtID0gUHlfSW5pdE1vZHVsZTMoInh4IiwgeHhfbWV0aG9kcywgbW9kdWxlX2RvYyk7Ci0gICAgaWYgKG0gPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLyogQWRkIHNvbWUgc3ltYm9saWMgY29uc3RhbnRzIHRvIHRoZSBtb2R1bGUgKi8KLSAgICBpZiAoRXJyb3JPYmplY3QgPT0gTlVMTCkgewotICAgICAgICBFcnJvck9iamVjdCA9IFB5RXJyX05ld0V4Y2VwdGlvbigieHguZXJyb3IiLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgaWYgKEVycm9yT2JqZWN0ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFB5X0lOQ1JFRihFcnJvck9iamVjdCk7Ci0gICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJlcnJvciIsIEVycm9yT2JqZWN0KTsKLQotICAgIC8qIEFkZCBTdHIgKi8KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZTdHJfVHlwZSkgPCAwKQotICAgICAgICByZXR1cm47Ci0gICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTdHIiLCAoUHlPYmplY3QgKikmU3RyX1R5cGUpOwotCi0gICAgLyogQWRkIE51bGwgKi8KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZOdWxsX1R5cGUpIDwgMCkKLSAgICAgICAgcmV0dXJuOwotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiTnVsbCIsIChQeU9iamVjdCAqKSZOdWxsX1R5cGUpOwotfQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weSBiL2xpYi9weXRob24yLjcvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkKaW5kZXggZDMwYWI0Zi4uOWZiYmIzMSAxMDA2NDQKLS0tIGEvbGliL3B5dGhvbjIuNy9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQorKysgYi9saWIvcHl0aG9uMi43L2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CkBAIC0xNzIsNiArMTcyLDE2IEBACiAgICAgICAgICAgICAgICAgbGRfYXJnc1s6MF0gPSBleHRyYV9wcmVhcmdzCiAgICAgICAgICAgICBpZiBleHRyYV9wb3N0YXJnczoKICAgICAgICAgICAgICAgICBsZF9hcmdzLmV4dGVuZChleHRyYV9wb3N0YXJncykKKworICAgICAgICAgICAgIyBOREsgSEFDSzoKKyAgICAgICAgICAgICMgQXZvaWQgZGVwZW5kZW5jeSBvbiBsaWJnY2MgZGxsIG9uIG1pbmd3LiAtc3RhdGljLWxpYmdjYyB3b3JrcworICAgICAgICAgICAgIyB3aGlsZSBjb21waWxpbmcgZm9yIHRoZSBob3N0IGFuZCB3aW5kb3dzLCBidXQgbm90IGRhcndpbi4gV2UKKyAgICAgICAgICAgICMgY2FuJ3QgZWFzaWx5IHRlbGwgd2hldGhlciB3ZSdyZSBjb21waWxpbmcgZm9yIHdpbmRvd3Mgb3IgdGhlCisgICAgICAgICAgICAjIGhvc3QsIHNvIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB3ZSBkb24ndCBjcm9zcy1jb21waWxlIGRhcndpbgorICAgICAgICAgICAgIyBiaW5hcmllcyBvbiBsaW51eC4KKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6Nl0gIT0gImRhcndpbiI6CisgICAgICAgICAgICAgICAgbGRfYXJncy5leHRlbmQoWyItc3RhdGljLWxpYmdjYyJdKQorCiAgICAgICAgICAgICBzZWxmLm1rcGF0aChvcy5wYXRoLmRpcm5hbWUob3V0cHV0X2ZpbGVuYW1lKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBpZiB0YXJnZXRfZGVzYyA9PSBDQ29tcGlsZXIuRVhFQ1VUQUJMRToKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2ZpeGVycy9teWZpeGVzL19faW5pdF9fLnB5IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L19faW5pdF9fLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL215Zml4ZXMvX19pbml0X18ucHkKY29weSB0byBsaWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL1B5QmFubmVyMDQ4LmdpZiBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL1B5QmFubmVyMDQ4LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTVjODdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvUHlCYW5uZXIwNDguZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL2F1ZGlvdGVzdC5hdSBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL2F1ZGlvdGVzdC5hdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzZiMDUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvYXVkaW90ZXN0LmF1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18wMS50eHQgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMzNiY2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMDEudHh0CkBAIC0wLDAgKzEsMTkgQEAKK1JldHVybi1QYXRoOiA8YmJiQHp6ei5vcmc+CitEZWxpdmVyZWQtVG86IGJiYkB6enoub3JnCitSZWNlaXZlZDogYnkgbWFpbC56enoub3JnIChQb3N0Zml4LCBmcm9tIHVzZXJpZCA4ODkpCisJaWQgMjdDRUFEMzhDQzsgRnJpLCAgNCBNYXkgMjAwMSAxNDowNTo0NCAtMDQwMCAoRURUKQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorTWVzc2FnZS1JRDogPDE1MDkwLjYxMzA0LjExMDkyOS40NTY4NEBhYWEuenp6Lm9yZz4KK0Zyb206IGJiYkBkZGQuY29tIChKb2huIFguIERvZSkKK1RvOiBiYmJAenp6Lm9yZworU3ViamVjdDogVGhpcyBpcyBhIHRlc3QgbWVzc2FnZQorRGF0ZTogRnJpLCA0IE1heSAyMDAxIDE0OjA1OjQ0IC0wNDAwCisKKworSGksCisKK0RvIHlvdSBsaWtlIHRoaXMgbWVzc2FnZT8KKworLU1lCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMDIudHh0IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzAyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2YyNDgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzAyLnR4dApAQCAtMCwwICsxLDEzNSBAQAorTUlNRS12ZXJzaW9uOiAxLjAKK0Zyb206IHBwcC1yZXF1ZXN0QHp6ei5vcmcKK1NlbmRlcjogcHBwLWFkbWluQHp6ei5vcmcKK1RvOiBwcHBAenp6Lm9yZworU3ViamVjdDogUHBwIGRpZ2VzdCwgVm9sIDEgIzIgLSA1IG1zZ3MKK0RhdGU6IEZyaSwgMjAgQXByIDIwMDEgMjA6MTg6MDAgLTA0MDAgKEVEVCkKK1gtTWFpbGVyOiBNYWlsbWFuIHYyLjAuNAorWC1NYWlsbWFuLVZlcnNpb246IDIuMC40CitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9IjE5Mi4xNjguMS4yLjg4OS4zMjYxNC45ODc4MTIyNTUuNTAwLjIxODE0IgorCistLTE5Mi4xNjguMS4yLjg4OS4zMjYxNC45ODc4MTIyNTUuNTAwLjIxODE0CitDb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkKK0NvbnRlbnQtZGVzY3JpcHRpb246IE1hc3RoZWFkIChQcHAgZGlnZXN0LCBWb2wgMSAjMikKKworU2VuZCBQcHAgbWFpbGluZyBsaXN0IHN1Ym1pc3Npb25zIHRvCisJcHBwQHp6ei5vcmcKKworVG8gc3Vic2NyaWJlIG9yIHVuc3Vic2NyaWJlIHZpYSB0aGUgV29ybGQgV2lkZSBXZWIsIHZpc2l0CisJaHR0cDovL3d3dy56enoub3JnL21haWxtYW4vbGlzdGluZm8vcHBwCitvciwgdmlhIGVtYWlsLCBzZW5kIGEgbWVzc2FnZSB3aXRoIHN1YmplY3Qgb3IgYm9keSAnaGVscCcgdG8KKwlwcHAtcmVxdWVzdEB6enoub3JnCisKK1lvdSBjYW4gcmVhY2ggdGhlIHBlcnNvbiBtYW5hZ2luZyB0aGUgbGlzdCBhdAorCXBwcC1hZG1pbkB6enoub3JnCisKK1doZW4gcmVwbHlpbmcsIHBsZWFzZSBlZGl0IHlvdXIgU3ViamVjdCBsaW5lIHNvIGl0IGlzIG1vcmUgc3BlY2lmaWMKK3RoYW4gIlJlOiBDb250ZW50cyBvZiBQcHAgZGlnZXN0Li4uIgorCisKKy0tMTkyLjE2OC4xLjIuODg5LjMyNjE0Ljk4NzgxMjI1NS41MDAuMjE4MTQKK0NvbnRlbnQtdHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1kZXNjcmlwdGlvbjogVG9kYXkncyBUb3BpY3MgKDUgbXNncykKKworVG9kYXkncyBUb3BpY3M6CisKKyAgIDEuIHRlc3RpbmcgIzEgKEJhcnJ5IEEuIFdhcnNhdykKKyAgIDIuIHRlc3RpbmcgIzIgKEJhcnJ5IEEuIFdhcnNhdykKKyAgIDMuIHRlc3RpbmcgIzMgKEJhcnJ5IEEuIFdhcnNhdykKKyAgIDQuIHRlc3RpbmcgIzQgKEJhcnJ5IEEuIFdhcnNhdykKKyAgIDUuIHRlc3RpbmcgIzUgKEJhcnJ5IEEuIFdhcnNhdykKKworLS0xOTIuMTY4LjEuMi44ODkuMzI2MTQuOTg3ODEyMjU1LjUwMC4yMTgxNAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvZGlnZXN0OyBib3VuZGFyeT0iX18tLV9fLS0iCisKKy0tX18tLV9fLS0KKworTWVzc2FnZTogMQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitEYXRlOiBGcmksIDIwIEFwciAyMDAxIDIwOjE2OjEzIC0wNDAwCitUbzogcHBwQHp6ei5vcmcKK0Zyb206IGJhcnJ5QGRpZ2ljb29sLmNvbSAoQmFycnkgQS4gV2Fyc2F3KQorU3ViamVjdDogW1BwcF0gdGVzdGluZyAjMQorUHJlY2VkZW5jZTogYnVsaworCisKK2hlbGxvCisKKworLS1fXy0tX18tLQorCitNZXNzYWdlOiAyCitEYXRlOiBGcmksIDIwIEFwciAyMDAxIDIwOjE2OjIxIC0wNDAwCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKK1RvOiBwcHBAenp6Lm9yZworRnJvbTogYmFycnlAZGlnaWNvb2wuY29tIChCYXJyeSBBLiBXYXJzYXcpCitQcmVjZWRlbmNlOiBidWxrCisKKworaGVsbG8KKworCistLV9fLS1fXy0tCisKK01lc3NhZ2U6IDMKK0RhdGU6IEZyaSwgMjAgQXByIDIwMDEgMjA6MTY6MjUgLTA0MDAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorVG86IHBwcEB6enoub3JnCitGcm9tOiBiYXJyeUBkaWdpY29vbC5jb20gKEJhcnJ5IEEuIFdhcnNhdykKK1N1YmplY3Q6IFtQcHBdIHRlc3RpbmcgIzMKK1ByZWNlZGVuY2U6IGJ1bGsKKworCitoZWxsbworCisKKy0tX18tLV9fLS0KKworTWVzc2FnZTogNAorRGF0ZTogRnJpLCAyMCBBcHIgMjAwMSAyMDoxNjoyOCAtMDQwMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitUbzogcHBwQHp6ei5vcmcKK0Zyb206IGJhcnJ5QGRpZ2ljb29sLmNvbSAoQmFycnkgQS4gV2Fyc2F3KQorU3ViamVjdDogW1BwcF0gdGVzdGluZyAjNAorUHJlY2VkZW5jZTogYnVsaworCisKK2hlbGxvCisKKworLS1fXy0tX18tLQorCitNZXNzYWdlOiA1CitEYXRlOiBGcmksIDIwIEFwciAyMDAxIDIwOjE2OjMyIC0wNDAwCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKK1RvOiBwcHBAenp6Lm9yZworRnJvbTogYmFycnlAZGlnaWNvb2wuY29tIChCYXJyeSBBLiBXYXJzYXcpCitTdWJqZWN0OiBbUHBwXSB0ZXN0aW5nICM1CitQcmVjZWRlbmNlOiBidWxrCisKKworaGVsbG8KKworCisKKworLS1fXy0tX18tLS0tCistLTE5Mi4xNjguMS4yLjg4OS4zMjYxNC45ODc4MTIyNTUuNTAwLjIxODE0CitDb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkKK0NvbnRlbnQtZGVzY3JpcHRpb246IERpZ2VzdCBGb290ZXIKKworX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KK1BwcCBtYWlsaW5nIGxpc3QKK1BwcEB6enoub3JnCitodHRwOi8vd3d3Lnp6ei5vcmcvbWFpbG1hbi9saXN0aW5mby9wcHAKKworCistLTE5Mi4xNjguMS4yLjg4OS4zMjYxNC45ODc4MTIyNTUuNTAwLjIxODE0LS0KKworRW5kIG9mIFBwcCBEaWdlc3QKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzAzLnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18wMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc0OGViZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18wMy50eHQKQEAgLTAsMCArMSwxNiBAQAorUmV0dXJuLVBhdGg6IDxiYmJAenp6Lm9yZz4KK0RlbGl2ZXJlZC1UbzogYmJiQHp6ei5vcmcKK1JlY2VpdmVkOiBieSBtYWlsLnp6ei5vcmcgKFBvc3RmaXgsIGZyb20gdXNlcmlkIDg4OSkKKwlpZCAyN0NFQUQzOENDOyBGcmksICA0IE1heSAyMDAxIDE0OjA1OjQ0IC0wNDAwIChFRFQpCitNZXNzYWdlLUlEOiA8MTUwOTAuNjEzMDQuMTEwOTI5LjQ1Njg0QGFhYS56enoub3JnPgorRnJvbTogYmJiQGRkZC5jb20gKEpvaG4gWC4gRG9lKQorVG86IGJiYkB6enoub3JnCitTdWJqZWN0OiBUaGlzIGlzIGEgdGVzdCBtZXNzYWdlCitEYXRlOiBGcmksIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAKKworCitIaSwKKworRG8geW91IGxpa2UgdGhpcyBtZXNzYWdlPworCistTWUKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18wNC50eHQgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNjMzYzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMDQudHh0CkBAIC0wLDAgKzEsMzcgQEAKK1JldHVybi1QYXRoOiA8YmFycnlAcHl0aG9uLm9yZz4KK0RlbGl2ZXJlZC1UbzogYmFycnlAcHl0aG9uLm9yZworUmVjZWl2ZWQ6IGJ5IG1haWwucHl0aG9uLm9yZyAoUG9zdGZpeCwgZnJvbSB1c2VyaWQgODg5KQorCWlkIEMyQkYwRDM3QzY7IFR1ZSwgMTEgU2VwIDIwMDEgMDA6MDU6MDUgLTA0MDAgKEVEVCkKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Img5MFZJSUlLbXgiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitNZXNzYWdlLUlEOiA8MTUyNjEuMzYyMDkuMzU4ODQ2LjExODY3NEBhbnRoZW0ucHl0aG9uLm9yZz4KK0Zyb206IGJhcnJ5QHB5dGhvbi5vcmcgKEJhcnJ5IEEuIFdhcnNhdykKK1RvOiBiYXJyeUBweXRob24ub3JnCitTdWJqZWN0OiBhIHNpbXBsZSBtdWx0aXBhcnQKK0RhdGU6IFR1ZSwgMTEgU2VwIDIwMDEgMDA6MDU6MDUgLTA0MDAKK1gtTWFpbGVyOiBWTSA2Ljk1IHVuZGVyIDIxLjQgKHBhdGNoIDQpICJBcnRpZmljaWFsIEludGVsbGlnZW5jZSIgWEVtYWNzIEx1Y2lkCitYLUF0dHJpYnV0aW9uOiBCQVcKK1gtT2JsaXF1ZS1TdHJhdGVneTogTWFrZSBhIGRvb3IgaW50byBhIHdpbmRvdworCisKKy0taDkwVklJSUtteAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7CisJZmlsZW5hbWU9Im1zZy50eHQiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKK2Egc2ltcGxlIGtpbmQgb2YgbWlycm9yCit0byByZWZsZWN0IHVwb24gb3VyIG93bgorCistLWg5MFZJSUlLbXgKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOworCWZpbGVuYW1lPSJtc2cudHh0IgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCithIHNpbXBsZSBraW5kIG9mIG1pcnJvcgordG8gcmVmbGVjdCB1cG9uIG91ciBvd24KKworLS1oOTBWSUlJS214LS0KKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzA1LnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18wNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkNWU5YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18wNS50eHQKQEAgLTAsMCArMSwyOCBAQAorRnJvbTogZm9vCitTdWJqZWN0OiBiYXIKK1RvOiBiYXoKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZXBvcnQ7IHJlcG9ydC10eXBlPWRlbGl2ZXJ5LXN0YXR1czsKKwlib3VuZGFyeT0iRDE2OTBBN0FDMS45OTY4NTYwOTAvbWFpbC5leGFtcGxlLmNvbSIKK01lc3NhZ2UtSWQ6IDwyMDAxMDgwMzE2MjgxMC4wQ0E4QUE3QUNDQG1haWwuZXhhbXBsZS5jb20+CisKK1RoaXMgaXMgYSBNSU1FLWVuY2Fwc3VsYXRlZCBtZXNzYWdlLgorCistLUQxNjkwQTdBQzEuOTk2ODU2MDkwL21haWwuZXhhbXBsZS5jb20KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCitZYWRkYSB5YWRkYSB5YWRkYQorCistLUQxNjkwQTdBQzEuOTk2ODU2MDkwL21haWwuZXhhbXBsZS5jb20KKworWWFkZGEgeWFkZGEgeWFkZGEKKworLS1EMTY5MEE3QUMxLjk5Njg1NjA5MC9tYWlsLmV4YW1wbGUuY29tCitDb250ZW50LVR5cGU6IG1lc3NhZ2UvcmZjODIyCisKK0Zyb206IG5vYm9keUBweXRob24ub3JnCisKK1lhZGRhIHlhZGRhIHlhZGRhCisKKy0tRDE2OTBBN0FDMS45OTY4NTYwOTAvbWFpbC5leGFtcGxlLmNvbS0tCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18wNi50eHQgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMDYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZjNhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMDYudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1JldHVybi1QYXRoOiA8YmFycnlAcHl0aG9uLm9yZz4KK0RlbGl2ZXJlZC1UbzogYmFycnlAcHl0aG9uLm9yZworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKK0NvbnRlbnQtRGVzY3JpcHRpb246IGZvcndhcmRlZCBtZXNzYWdlCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitNZXNzYWdlLUlEOiA8MTUyNjUuOTQ4Mi42NDEzMzguNTU1MzUyQHB5dGhvbi5vcmc+CitGcm9tOiBiYXJyeUB6b3BlLmNvbSAoQmFycnkgQS4gV2Fyc2F3KQorU2VuZGVyOiBiYXJyeUBweXRob24ub3JnCitUbzogYmFycnlAcHl0aG9uLm9yZworU3ViamVjdDogZm9yd2FyZGVkIG1lc3NhZ2UgZnJvbSBCYXJyeSBBLiBXYXJzYXcKK0RhdGU6IFRodSwgMTMgU2VwIDIwMDEgMTc6Mjg6NDIgLTA0MDAKK1gtTWFpbGVyOiBWTSA2Ljk1IHVuZGVyIDIxLjQgKHBhdGNoIDQpICJBcnRpZmljaWFsIEludGVsbGlnZW5jZSIgWEVtYWNzIEx1Y2lkCitYLUF0dHJpYnV0aW9uOiBCQVcKK1gtT2JsaXF1ZS1TdHJhdGVneTogQmUgZGlydHkKK1gtVXJsOiBodHRwOi8vYmFycnkud29vei5vcmcKKworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQorUmV0dXJuLVBhdGg6IDxiYXJyeUBweXRob24ub3JnPgorRGVsaXZlcmVkLVRvOiBiYXJyeUBweXRob24ub3JnCitNZXNzYWdlLUlEOiA8MTUyNjUuOTQ2OC43MTM1MzAuOTg0NDFAcHl0aG9uLm9yZz4KK0Zyb206IGJhcnJ5QHpvcGUuY29tIChCYXJyeSBBLiBXYXJzYXcpCitTZW5kZXI6IGJhcnJ5QHB5dGhvbi5vcmcKK1RvOiBiYXJyeUBweXRob24ub3JnCitTdWJqZWN0OiB0ZXN0aW5nCitEYXRlOiBUaHUsIDEzIFNlcCAyMDAxIDE3OjI4OjI4IC0wNDAwCitYLU1haWxlcjogVk0gNi45NSB1bmRlciAyMS40IChwYXRjaCA0KSAiQXJ0aWZpY2lhbCBJbnRlbGxpZ2VuY2UiIFhFbWFjcyBMdWNpZAorWC1BdHRyaWJ1dGlvbjogQkFXCitYLU9ibGlxdWUtU3RyYXRlZ3k6IFNwZWN0cnVtIGFuYWx5c2lzCitYLVVybDogaHR0cDovL2JhcnJ5Lndvb3oub3JnCisKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzA3LnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18wNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIxZjNhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18wNy50eHQKQEAgLTAsMCArMSw4MyBAQAorTUlNRS1WZXJzaW9uOiAxLjAKK0Zyb206IEJhcnJ5IDxiYXJyeUBkaWdpY29vbC5jb20+CitUbzogRGluZ3VzIExvdmVycyA8Y3JhdmluZG9nc0BjcmF2aW5kb2dzLmNvbT4KK1N1YmplY3Q6IEhlcmUgaXMgeW91ciBkaW5ndXMgZmlzaAorRGF0ZTogRnJpLCAyMCBBcHIgMjAwMSAxOTozNTowMiAtMDQwMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJCT1VOREFSWSIKKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKKworSGkgdGhlcmUsCisKK1RoaXMgaXMgdGhlIGRpbmd1cyBmaXNoLgorCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IGltYWdlL2dpZjsgbmFtZT0iZGluZ3VzZmlzaC5naWYiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKK2NvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSJkaW5ndXNmaXNoLmdpZiIKKworUjBsR09EZGhBQUVBQWZBQUFQLy8vd0FBQUN3QUFBQUFBQUVBQVFBQy9vU1BxY3Z0RDZPY3ROcUxzOTY4K3crRzRraVc1b21tNnNxMgorN2d2SDhrelg5bzNuK3M3My9nOE1Db2ZFb3ZHSVRHSUNUS2J5Q1YwRkROT285U3FwUXFwT3JKZlh6VFFqMnZEM1RHdHFMK050R1EyZgorcVRYbXh6dU9kN1dYZGNjOUR5alU1M2V3Rm5pNHMwZkdoZGlZYUVoR0JlbElDVE5vVjFqNU5VbkZjcm1VcWVtak5pZkpWV3BhT3FhSQorb0ZxM1NzcFpzU3JhRTdzSHEzanIxTVpxV3ZpNjYydnhWNHREK3B2S1c2YUxET0NMeXVyOFBEd2JhbnlEZXEwTjNEY3RiUVllTER2UgorUlk2dDk1bTZVQjBkM213SXJWN2UyVkdOdmpqZmZ1a2VKcDR3N0Y2NUtlY0dGc1RIUUdBeWdPcmdyV3MxanQyOFJjODhLRVNZY0dMQQorL29idlRrSDZwK0NpbldKaUptSU1xWEdRd0gveTRxazBTWWpnUVRjelQzYWpLWkdmdUkwdUo0a2tWSS9EVDVzMy9lamt4STBhVDRZKworWVRZZ1diSW1VYVhrOW5sTG1uU2gxcUppSkZsME9wVXFSSzRvT3k3TnlSUXRIV29maG9ZVnhrd1dYS1VTbjBZc1MrZlVWNmxocWZZYgorNmF5ZDNaNXFRZEcxQjdidlF6YUpqd1VWMmxpeE1VWjdKVnNPbGZqV1ZyLzNOQi91RnZueVNCTjZEY2I2ckd3YVJNM3dzb3JtdzVjQworTTlOeFd5L2JXZHVmdWRDdnk4Yk9BalhqVlZ3dGEvdU8yMXNFNVJIQkN6TkZYdGdxOU9SdEg0ZVlqVlA0WXJ5bzAyNm52a0ZtQ2V5QQorQjI5ZWZWNnJhdkNNSzVKd1dkNTg5N1FyeDdsbDM4bzZpSERaL3JYUFIvL2ZlZXZoRjRsN3dqVUdYM3hxMWVlUmZNNFJTSkdCSVYxRAorejFnS1BrZldhZzNtVkJWdnZhMVJsWDViQUpUUFIvMllxTnR3L0ZrSVlZRWkvcElaaUFkcGN4cG9IdG1uWVlvWnR2aFVmdHpkeDVaWAorSlNLRFc0MDV6a0djWnp6R1o2S0V2NEZJMjI0b0RtaWpsRWYreHA2TUpLNW9qWS9BU2VWVVIrd3NLUnVKK1hGWjVvN1plRWltZTh0MQorb3VVc1U2WWpGNVp0VWloaGtHZkNkRlFMV1FGSjNVWHhtRWxmaFFuUitlQ2RjRGJrRlpwNnZUUm1qNTZBcENpaG41UUdwYVRvTlptUgorbjNOVlNwWmNRcFoyS0VPTnVzYWlDc0tBdWcwd2tRYkpTRk8rUFRTam5lR3hPdUZqUGxVazNvdld2ZEllcmpVZzlaR0lPdEdxL3FlWAorZUNZcnJDWCsxVVBzZ1RLR0dSU2J6ZDVxMTU2ZC9ncGZiSnhlNjZlRDVpUUtyWGo3UkdncnVHeHM2MnFlYkJIVUtTMzJDS2x1Q2lxWgorcWgrcG1laG1FYjcxbm9BVW9lNWU5Wm0xN1M3NzczVjEwcGpydEc0Q211dXJDVi9uNnpMSzV0dXJXTmhxT3ZGWGJqaFpyTUQwWWhLZQord1Iwek95dXZzaDZNV3JHb0l1enZ5V3U1eTFXSUZBcW1Kc2VseXB4WGg2ZEtMTk9LRUI5OEw4OGJTMnJrTnFxbEt6Q05KcDljMEcwagorR3poMGlSckNiSFNYbVBSNjQzUVMrNHJXaGdGbW5TYlN1WENqUzB4QU9Xa1UyVWRMcXl1VU5mSFNGZFVvdXkzYm01aTVHbkRNM3RHOAorZG9KNHI1dHF1M3BQYlJTVmZ2czh1SnplTlhocDNuNGovdFo0MlN3SDdlYVdVVU9qYzNxRlY5NDUzVUhUWFpmY0xIK09lTnM1ZzM2eAorbEJuSHZUbTdFYk1iTGV1YUxuY2FvOHZXQ1hpbWZvMW8rODQzQWs2eTRDaE5lR250dkFZdmZMSzRlem1veU5JYk5DTFRDWE85WlYzQQorRTgvczg4UmN6UHpEd0k0T2I3WFp5bDcrOU1pYmFuMjloK3RKWlByRTIxd2d2QnBoRGZycmZQZENUUEtKRC95OThMMXJad0hjVjZKcQorWmFiMG1ldHB1TklYL3FBRlBvejE3MVdVYVViNEhBaEJTekh1SGZqekhiM2toYS8yQ2N0aXMvT1JBclZITllmRnlZUkgycFlJUnppYworaXNWT2ZQV0QxYjZtUlRxcENSQm96em9mNlVaVnZGWFJ4V0lyM0dHckV2aUdZZ3lQTWZhaGhlaVNhTHMvOVFlRnU3b1ovbmRTWThERAoreWE5eCt1UGVkKzdteE4ySXpJSVNCT01MRllXVnFDM1BldzFUMm5GdXVDaXdaUzUvdjZJSTEwaTR0MU9KY1VIMlU5enhLb2RIc0dHdgorT2Eremt2TlVZVU9hL1RDQ1J1dEY5TXpEd2RsVU1KQURUQ0dTYkRRNU9WNFBUYW1Eb1BFaTZFY2MvUkY1Uld3a2NkU1h2U09hRFdTbgorSTlMbHZ1YkZUUXB1YzZKS1hMY0tlYit4ZGJLUkJud1JFZW1YeWpnNk1FNjVhSmlPdUJncmt0enlrZlBMSkJLUjlDbE1hdko2Mi9GZgorQmxOSXlvZDl5WDl3Y1NYZXhuWEZwdmtyYlhrNjR4c3g1RGI3d1hLUDVmU2dzdndJTU0vOTYzMVZMQmZrbXRiSFJYcHFtdGVpNTJoRworcFV3U2xvK0JBU1FvZUlMRE9CZ1JFRUN4QkJoNS9pWW1Oc1E5ZEl2NStPSSsrUWtxZHNKUGMzdXlrejVma00rT3JhZWVrY1FGN1g0bgorQjVTNjd6YTVVOTY3UG1vb0dRaFVYZkY3YWZYeUNEN09OZFJlMTdRb2dZalZ4Mzh1THd0clM2bmhUbm0xNUxRVW51OUUydUs2Q05JLworMUhPQUJqMEVTd09qdXQ0RkVwRlFwZE5BbTRLMkxIbkRXSE5jbUtCMmlvS0JvZ3lzVlp0TU8yblN4VWRaOFlrMmtKYzdVUmlvTFZJMAorWWdtdEl3Wmo0TG9lS2VtZ25PbmJVZEduelo0T2E2c2NxaW9sQkdxUzZSZ1dOTHUwUk1oY2FFNnJoaFU0aGl1cUZYUEFHOGZHd1RQVworRktlTE10ZFZtWExTczVZSkdGL1llVm03clJFTWxZM1VZRSt5Q3hiYU1YWDh5MTVtNXpWSHE2R09LRE15bnpJSS9qZFVIZHlWcUl5MAoraWZYMityL0VndFpjdlJ6U2I3MmdVOXVpODdNMlZlY2pLaWxkVy9hRnFhWWhLb3J5VWpmQi9nNHF0eVZ1YzYweEZER21DeHdqVytxdQoremp1d2wyR2tPV242NiszUWlpRWN0dmQwNE9WdmNDVnpqZ1Q3bHJrdmpWR0tLSG1tbERVS293U2Vpa2I1a0svbUpSZXVXT3hPTngrcworVUxzbCtMcWIwQ1ZuMFNyVnlKNnd0NHQ2eVRlU0NhZmhQaEFmME9YbjZMNjBVTXhpTG9sRkF0bU4zNVMyT2IxbFpwUTFyL24wUWI1RAorb1ExekppUlZEZ0Y4TjNROFRZZmJpM0R5V0N5M2xUMW54eUJzNkZUM1MyR096V1JseHdLdmxSUDBSUEpBOVNqeEV5MFVvRW5rQStNNAorY256TE1KckJHV0xGRWFhVWI1bHZwcWJxL2xvT2FVNStERnVIUHhvODIvT1p1TThGWEczb1ZOWmh0V3BNcGIvMFh1NW0vTGZMaEhaUQorN3l1VkkwTXFaN05FNDNpbUM4akgzSXdHWmxiUG0weGtKWXM3KzJVNDhoWFRzRlNNcWdHRHZhaTBrTHh5eW5LTlQvd2FqK3ExYzF0egorR2pPcFBCZ2RDU3EzVUtaeENTc3FGSVkrTzZKYkFXR1djVjFwd3FMeWo1c0dxQ0YxeGIxRjN2YXJVV3FySnY2Y04zUHJVWHppanRmWgorRnNocEJMM1h3cjRHSVB2VTJOOEVqckpnUzF6bDIxcmJYUU1YZVhjNWpqRnlyaHBDemlqU3YvUlF0eVBTekhDRk1obE1FOTVmSGdsdAorcFJzWCtkZlNRalVlSEFscFd6SjVpT283OUxkbmF4YWk2YlhUY0dPM2ZwMDdyaTdITEVtWFhQbFlpOGJ2L3FWeHZOY2RyYTZtN1JsYgorNkpCVGI1ZmQ2NlZoRlJqR0FyaDJuN1IxckRXNFA1Tk9UOUswSTE4M1Qyc2NZa2VaM3EvVkZ5TGIwOVU5YWp6WEJTOEtna2hjNG1CUwora1lZOWN5M1Z5OWxVbnVOSkg4SEdJY2xVaWx3bkJ0alVPSDBndGVHT1o0Yy9YTnJoWExTWUR5eGZuRDh6MXBEeTdyWVJ2RG9saG5iZQorVU16eENaVXM0MHM2czdVSXZCbkxnYzArdkt1T2tJWGVPckR5bWxwK1p4cmE0TVpMQmJWcnFEL2pUSjU5N3BEbW53NWM0K0RieUI4OAorOUNnOURvZFljU3VNWlQvMTE0cHB0cWMvRXVUalJQdkgvejVzbHpJM3RsdU9FQkJMcU9YTE9YKzBJNTkyOXRPOTd3a3ZsL2F0Q3oreQoreEpyZHd0ZVcyRk5XL05TbUJQK2YvbWFZdFZzL2JZeUJDN094M2pzWVpITDA1Q0lyQmEvblMrYjNiSGZpWW00VWVpbDFZWlpTZ0FVSQorZkZaMWR4VW1lQTJvUVJRM1J1R1hOR0xGVjkvWGJHRkdQVjZrZnprMVRCQkNkK2l6YzdxMUgrT0hNSndtYUJYMklRTllWQUtIWWVwVgorU1NHQ2U2Q25iWUhIRVRLR05lNDNFRHZGZ1pyMGdCL25WSFBIWjgwVlYxb2pPaUkzWER2WUlrbDRheW80YnhRSWdyRlhXVHZCSTBuSAorVkVsV011dzJhTFVXQ1JISGY4eW1WQ0hqRmxKbk9Tb2pmZXZDWXl5eVpESDBJY3ZIaHJzblE1TzFPc1d6T051VlZLSXhTeGlGWi90UgorZktEQWY2eEZUbnc0TzlRaWcyVkNmVzJoSlFybU1PdUhXMFczZExRbUNNTzJjY2RVZC94eWZmbEgvb2xUaUhaVmRHd2I4bkl3UnpTRQorSjE1akZsT0p1QlpCWjRDaXlIeWQySUZ5bEZsQitIZ0hoWWFiaFdPR3dZTzFaSC9PZzFkdFFsRk1rMzUyQ0dSU0lGVGFwbldRRVV0TgorbDR6djhTMGFhQ0ZEeUdDQnFEVXhaWXB4R0hYMDF5L0p1SDF4aG43VE9Dbk5DSTRlS0RzNVdHWDRSNDI1RjR2RjFvM0JKNHZPMG90cQorSTNyaW1JN2pKWTFqSVNxbkJ4a25DSXZydUY4M21GNXdONFg3cUdMSWhSOEEyVmcweUZFUlNJWG45VnYzR0h5M1ZqL1dJa0tkZGxZaQoreUlNdjJJL1ZNalRMcFc3cHQwNVNXSVpSMFJQeXhwQjRTSVVNOWxCUEdCbDBHQzdvU0VFd1JZTGU0cEpwWlkyUDB6YkkxbitPYzQ0dworcVkzUFVubUYwaXhqVnBERC9tSjl3cE9CR1RWZ1hsYUNhWmlQY0lXSzVOaUtCSWlQZEdhUTBUV0d2QWlHN25NY2hkWmI3VmdmOHpOaQorTXVNeXpSZHkvbGVQZTlpQzRUUng3V2hoT1FJL1FpU1ZOQW1BYTJsVC9waUZidWg3b2ZKb1lTWnpyU1oxYnZtV3czZU4ybktVUFZreQordVBONS9WUmZvaFJkMFZZWm9xaEtJbFU2VFhZaEp4bVBVSWxvQXdjMWJQbUhFcGFaWVpPUkhObFhVSk0wN2hBVHdIUjhNSllxa3dXUgorV2FJZXpGaHhTRmxjOC9GcTgyaEVucGVSb3pnM1VMaGhyOWxBR3RWRWtDZzVaTlJ1dVZsZUJQYVphZGhHMFpna3lQbURPVE9LelZpTQorWWdPY3B1a0txUWNiakFXUzBJbGVRMlJPamRoNkErbWQxcVdkQlJTWDdpU1lnRlJUdFJtQnBKaW9pZVhKaUhmSmlNR0lSOWZKT244SQorTVNmWFloc3BuNG9vU2EybVNBajRuKzhCbWcwM2ZCSlpvUE9KZ3NWWlJ4dTFvT01SUFhZWWpkcWppaEZhRW9acFhCUkVhbnVKb1JJNgorY2liRmlucTRuZ1VLaC93UWQvSDVvZllDWjBISlhSNjJvcFpGYUFUMGlGSVpvNERJaVVvamtqZXFLaXVvWmlyS281WTFhN0FXY2tHYQorQmt1WW9ENWxwREs2ZVVzNkNrRHFwRVR3bDFFcXBmaEpwVmVLcFZsNkVnVUFBRHM9CisKKy0tQk9VTkRBUlktLQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzA4LnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18wOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU2MzA4MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18wOC50eHQKQEAgLTAsMCArMSwyNCBAQAorTUlNRS1WZXJzaW9uOiAxLjAKK0Zyb206IEJhcnJ5IFdhcnNhdyA8YmFycnlAem9wZS5jb20+CitUbzogRGluZ3VzIExvdmVycyA8Y3JhdmluZG9nc0BjcmF2aW5kb2dzLmNvbT4KK1N1YmplY3Q6IEx5cmljcworRGF0ZTogRnJpLCAyMCBBcHIgMjAwMSAxOTozNTowMiAtMDQwMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJCT1VOREFSWSIKKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKKworCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0iaXNvLTg4NTktMSIKKworCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Imlzby04ODU5LTIiCisKKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJrb2k4LXIiCisKKworLS1CT1VOREFSWS0tCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMDkudHh0IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzA5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzVjNGMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzA5LnR4dApAQCAtMCwwICsxLDI0IEBACitNSU1FLVZlcnNpb246IDEuMAorRnJvbTogQmFycnkgV2Fyc2F3IDxiYXJyeUB6b3BlLmNvbT4KK1RvOiBEaW5ndXMgTG92ZXJzIDxjcmF2aW5kb2dzQGNyYXZpbmRvZ3MuY29tPgorU3ViamVjdDogTHlyaWNzCitEYXRlOiBGcmksIDIwIEFwciAyMDAxIDE5OjM1OjAyIC0wNDAwCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9IkJPVU5EQVJZIgorCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIgorCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PSJpc28tODg1OS0xIgorCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0ia29pOC1yIgorCisKKy0tQk9VTkRBUlktLQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzEwLnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18xMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc5MDM5NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18xMC50eHQKQEAgLTAsMCArMSwzOSBAQAorTUlNRS1WZXJzaW9uOiAxLjAKK0Zyb206IEJhcnJ5IFdhcnNhdyA8YmFycnlAem9wZS5jb20+CitUbzogRGluZ3VzIExvdmVycyA8Y3JhdmluZG9nc0BjcmF2aW5kb2dzLmNvbT4KK1N1YmplY3Q6IEx5cmljcworRGF0ZTogRnJpLCAyMCBBcHIgMjAwMSAxOTozNTowMiAtMDQwMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJCT1VOREFSWSIKKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworVGhpcyBpcyBhIDdiaXQgZW5jb2RlZCBtZXNzYWdlLgorCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0iaXNvLTg4NTktMSIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IFF1b3RlZC1QcmludGFibGUKKworPUExVGhpcyBpcyBhIFF1b3RlZCBQcmludGFibGUgZW5jb2RlZCBtZXNzYWdlIQorCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Imlzby04ODU5LTEiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBCYXNlNjQKKworVkdocGN5QnBjeUJoSUVKaGMyVTJOQ0JsYm1OdlpHVmtJRzFsYzNOaFoyVXUKKworCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Imlzby04ODU5LTEiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBCYXNlNjQKKworVkdocGN5QnBjeUJoSUVKaGMyVTJOQ0JsYm1OdlpHVmtJRzFsYzNOaFoyVXVDZz09CisKKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIgorCitUaGlzIGhhcyBubyBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBoZWFkZXIuCisKKy0tQk9VTkRBUlktLQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzExLnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18xMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY3ZjE5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18xMS50eHQKQEAgLTAsMCArMSw3IEBACitDb250ZW50LVR5cGU6IG1lc3NhZ2UvcmZjODIyCitNSU1FLVZlcnNpb246IDEuMAorU3ViamVjdDogVGhlIGVuY2xvc2luZyBtZXNzYWdlCisKK1N1YmplY3Q6IEFuIGVuY2xvc2VkIG1lc3NhZ2UKKworSGVyZSBpcyB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZS4KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18xMi50eHQgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZWM4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMTIudHh0CkBAIC0wLDAgKzEsMzYgQEAKK01JTUUtVmVyc2lvbjogMS4wCitGcm9tOiBCYXJyeSBXYXJzYXcgPGJhcnJ5QHpvcGUuY29tPgorVG86IERpbmd1cyBMb3ZlcnMgPGNyYXZpbmRvZ3NAY3JhdmluZG9ncy5jb20+CitTdWJqZWN0OiBMeXJpY3MKK0RhdGU6IEZyaSwgMjAgQXByIDIwMDEgMTk6MzU6MDIgLTA0MDAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iQk9VTkRBUlkiCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCisKKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9Imlzby04ODU5LTEiCisKKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJBTk9USEVSIgorCistLUFOT1RIRVIKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iaXNvLTg4NTktMiIKKworCistLUFOT1RIRVIKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iaXNvLTg4NTktMyIKKworLS1BTk9USEVSLS0KKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKKworCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9ImtvaTgtciIKKworCistLUJPVU5EQVJZLS0KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18xMmEudHh0IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzEyYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0MjI0ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18xMmEudHh0CkBAIC0wLDAgKzEsMzggQEAKK01JTUUtVmVyc2lvbjogMS4wCitGcm9tOiBCYXJyeSBXYXJzYXcgPGJhcnJ5QHpvcGUuY29tPgorVG86IERpbmd1cyBMb3ZlcnMgPGNyYXZpbmRvZ3NAY3JhdmluZG9ncy5jb20+CitTdWJqZWN0OiBMeXJpY3MKK0RhdGU6IEZyaSwgMjAgQXByIDIwMDEgMTk6MzU6MDIgLTA0MDAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iQk9VTkRBUlkiCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCisKKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9Imlzby04ODU5LTEiCisKKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJBTk9USEVSIgorCistLUFOT1RIRVIKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iaXNvLTg4NTktMiIKKworCistLUFOT1RIRVIKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iaXNvLTg4NTktMyIKKworCistLUFOT1RIRVItLQorCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCisKKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJrb2k4LXIiCisKKworLS1CT1VOREFSWS0tCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMTMudHh0IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzEzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTZkNTJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzEzLnR4dApAQCAtMCwwICsxLDk0IEBACitNSU1FLVZlcnNpb246IDEuMAorRnJvbTogQmFycnkgPGJhcnJ5QGRpZ2ljb29sLmNvbT4KK1RvOiBEaW5ndXMgTG92ZXJzIDxjcmF2aW5kb2dzQGNyYXZpbmRvZ3MuY29tPgorU3ViamVjdDogSGVyZSBpcyB5b3VyIGRpbmd1cyBmaXNoCitEYXRlOiBGcmksIDIwIEFwciAyMDAxIDE5OjM1OjAyIC0wNDAwCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ik9VVEVSIgorCistLU9VVEVSCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIgorCitBIHRleHQvcGxhaW4gcGFydAorCistLU9VVEVSCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Qk9VTkRBUlkKKworCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIgorCitIaSB0aGVyZSwKKworVGhpcyBpcyB0aGUgZGluZ3VzIGZpc2guCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogaW1hZ2UvZ2lmOyBuYW1lPSJkaW5ndXNmaXNoLmdpZiIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorY29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ImRpbmd1c2Zpc2guZ2lmIgorCitSMGxHT0RkaEFBRUFBZkFBQVAvLy93QUFBQ3dBQUFBQUFBRUFBUUFDL29TUHFjdnRENk9jdE5xTHM5NjgrdytHNGtpVzVvbW02c3EyCis3Z3ZIOGt6WDlvM24rczczL2c4TUNvZkVvdkdJVEdJQ1RLYnlDVjBGRE5PbzlTcXBRcXBPckpmWHpUUWoydkQzVEd0cUwrTnRHUTJmCitxVFhteHp1T2Q3V1hkY2M5RHlqVTUzZXdGbmk0czBmR2hkaVlhRWhHQmVsSUNUTm9WMWo1TlVuRmNybVVxZW1qTmlmSlZXcGFPcWFJCitvRnEzU3NwWnNTcmFFN3NIcTNqcjFNWnFXdmk2NjJ2eFY0dEQrcHZLVzZhTERPQ0x5dXI4UER3YmFueURlcTBOM0RjdGJRWWVMRHZSCitSWTZ0OTVtNlVCMGQzbXdJclY3ZTJWR052ampmZnVrZUpwNHc3RjY1S2VjR0ZzVEhRR0F5Z09yZ3JXczFqdDI4UmM4OEtFU1ljR0xBCisvb2J2VGtINnArQ2luV0ppSm1JTXFYR1F3SC95NHFrMFNZamdRVGN6VDNhaktaR2Z1STB1SjRra1ZJL0RUNXMzL2Vqa3hJMGFUNFkrCitZVFlnV2JJbVVhWGs5bmxMbW5TaDFxSmlKRmwwT3BVcVJLNG9PeTdOeVJRdEhXb2Zob1lWeGt3V1hLVVNuMFlzUytmVVY2bGhxZlliCis2YXlkM1o1cVFkRzFCN2J2UXphSmp3VVYybGl4TVVaN0pWc09sZmpXVnIvM05CL3VGdm55U0JONkRjYjZyR3dhUk0zd3Nvcm13NWNDCitNOU54V3kvYldkdWZ1ZEN2eThiT0FqWGpWVnd0YS91TzIxc0U1UkhCQ3pORlh0Z3E5T1J0SDRlWWpWUDRZcnlvMDI2bnZrRm1DZXlBCitCMjllZlY2cmF2Q01LNUp3V2Q1ODk3UXJ4N2xsMzhvNmlIRFovclhQUi8vZmVldmhGNGw3d2pVR1gzeHExZWVSZk00UlNKR0JJVjFECit6MWdLUGtmV2FnM21WQlZ2dmExUmxYNWJBSlRQUi8yWXFOdHcvRmtJWVlFaS9wSVppQWRwY3hwb0h0bW5ZWW9adHZoVWZ0emR4NVpYCitKU0tEVzQwNXprR2NaenpHWjZLRXY0RkkyMjRvRG1pamxFZit4cDZNSks1b2pZL0FTZVZVUit3c0tSdUorWEZaNW83WmVFaW1lOHQxCitvdVVzVTZZakY1WnRVaWhoa0dmQ2RGUUxXUUZKM1VYeG1FbGZoUW5SK2VDZGNEYmtGWnA2dlRSbWo1NkFwQ2lobjVRR3BhVG9OWm1SCituM05WU3BaY1FwWjJLRU9OdXNhaUNzS0F1ZzB3a1FiSlNGTytQVFNqbmVHeE91RmpQbFVrM292V3ZkSWVyalVnOVpHSU90R3EvcWVYCitlQ1lyckNYKzFVUHNnVEtHR1JTYnpkNXExNTZkL2dwZmJKeGU2NmVENWlRS3JYajdSR2dydUd4czYycWViQkhVS1MzMkNLbHVDaXFaCitxaCtwbWVobUViNzFub0FVb2U1ZTlabTE3Uzc3NzNWMTBwanJ0RzRDbXV1ckNWL242ekxLNXR1cldOaHFPdkZYYmpoWnJNRDBZaEtlCit3UjB6T3l1dnNoNk1XckdvSXV6dnlXdTV5MVdJRkFxbUpzZWx5cHhYaDZkS0xOT0tFQjk4TDg4YlMycmtOcXFsS3pDTkpwOWMwRzBqCitHemgwaVJyQ2JIU1htUFI2NDNRUys0cldoZ0ZtblNiU3VYQ2pTMHhBT1drVTJVZExxeXVVTmZIU0ZkVW91eTNibTVpNUduRE0zdEc4Citkb0o0cjV0cXUzcFBiUlNWZnZzOHVKemVOWGhwM240ai90WjQyU3dIN2VhV1VVT2pjM3FGVjk0NTNVSFRYWmZjTEgrT2VOczVnMzZ4CitsQm5IdlRtN0ViTWJMZXVhTG5jYW84dldDWGltZm8xbys4NDNBazZ5NENoTmVHbnR2QVl2ZkxLNGV6bW95TkliTkNMVENYTzlaVjNBCitFOC9zODhSY3pQekR3STRPYjdYWnlsNys5TWliYW4yOWgrdEpaUHJFMjF3Z3ZCcGhEZnJyZlBkQ1RQS0pEL3k5OEwxclp3SGNWNkpxCitaYWIwbWV0cHVOSVgvcUFGUG96MTcxV1VhVWI0SEFoQlN6SHVIZmp6SGIza2hhLzJDY3Rpcy9PUkFyVkhOWWZGeVlSSDJwWUlSemljCitpc1ZPZlBXRDFiNm1SVHFwQ1JCb3p6b2Y2VVpWdkZYUnhXSXIzR0dyRXZpR1lneVBNZmFoaGVpU2FMcy85UWVGdTdvWi9uZFNZOERECit5YTl4K3VQZWQrN214TjJJeklJU0JPTUxGWVdWcUMzUGV3MVQybkZ1dUNpd1pTNS92NklJMTBpNHQxT0pjVUgyVTl6eEtvZEhzR0d2CitPYSt6a3ZOVVlVT2EvVENDUnV0RjlNekR3ZGxVTUpBRFRDR1NiRFE1T1Y0UFRhbURvUEVpNkVjYy9SRjVSV3drY2RTWHZTT2FEV1NuCitJOUxsdnViRlRRcHVjNkpLWExjS2ViK3hkYktSQm53UkVlbVh5amc2TUU2NWFKaU91Qmdya3R6eWtmUExKQktSOUNsTWF2SjYyL0ZmCitCbE5JeW9kOXlYOXdjU1hleG5YRnB2a3JiWGs2NHhzeDVEYjd3WEtQNWZTZ3N2d0lNTS85NjMxVkxCZmttdGJIUlhwcW10ZWk1MmhHCitwVXdTbG8rQkFTUW9lSUxET0JnUkVFQ3hCQmg1L2lZbU5zUTlkSXY1K09JKytRa3Fkc0pQYzN1eWt6NWZrTStPcmFlZWtjUUY3WDRuCitCNVM2N3phNVU5NjdQbW9vR1FoVVhmRjdhZlh5Q0Q3T05kUmUxN1FvZ1lqVngzOHVMd3RyUzZuaFRubTE1TFFVbnU5RTJ1SzZDTkkvCisxSE9BQmowRVN3T2p1dDRGRXBGUXBkTkFtNEsyTEhuRFdITmNtS0IyaW9LQm9neXNWWnRNTzJuU3hVZFo4WWsya0pjN1VSaW9MVkkwCitZZ210SXdaajRMb2VLZW1nbk9uYlVkR256WjRPYTZzY3Fpb2xCR3FTNlJnV05MdTBSTWhjYUU2cmhoVTRoaXVxRlhQQUc4Zkd3VFBXCitGS2VMTXRkVm1YTFNzNVlKR0YvWWVWbTdyUkVNbFkzVVlFK3lDeGJhTVhYOHkxNW01elZIcTZHT0tETXlueklJL2pkVUhkeVZxSXkwCitpZlgyK3IvRWd0WmN2UnpTYjcyZ1U5dWk4N00yVmVjaktpbGRXL2FGcWFZaEtvcnlVamZCL2c0cXR5VnVjNjB4RkRHbUN4d2pXK3F1Cit6anV3bDJHa09XbjY2KzNRaWlFY3R2ZDA0T1Z2Y0NWempnVDdscmt2alZHS0tIbW1sRFVLb3dTZWlrYjVrSy9tSlJldVdPeE9OeCtzCitVTHNsK0xxYjBDVm4wU3JWeUo2d3Q0dDZ5VGVTQ2FmaFBoQWYwT1huNkw2MFVNeGlMb2xGQXRtTjM1UzJPYjFsWnBRMXIvbjBRYjVECitvUTF6SmlSVkRnRjhOM1E4VFlmYmkzRHlXQ3kzbFQxbnh5QnM2RlQzUzJHT3pXUmx4d0t2bFJQMFJQSkE5U2p4RXkwVW9FbmtBK000CitjbnpMTUpyQkdXTEZFYWFVYjVsdnBxYnEvbG9PYVU1K0RGdUhQeG84Mi9PWnVNOEZYRzNvVk5aaHRXcE1wYi8wWHU1bS9MZkxoSFpRCis3eXVWSTBNcVo3TkU0M2ltQzhqSDNJd0dabGJQbTB4a0pZczcrMlU0OGhYVHNGU01xZ0dEdmFpMGtMeHl5bktOVC93YWorcTFjMXR6CitHak9wUEJnZENTcTNVS1p4Q1NzcUZJWStPNkpiQVdHV2NWMXB3cUx5ajVzR3FDRjF4YjFGM3ZhclVXcXJKdjZjTjNQclVYemlqdGZaCitGc2hwQkwzWHdyNEdJUHZVMk44RWpySmdTMXpsMjFyYlhRTVhlWGM1ampGeXJocEN6aWpTdi9SUXR5UFN6SENGTWhsTUU5NWZIZ2x0CitwUnNYK2RmU1FqVWVIQWxwV3pKNWlPbzc5TGRuYXhhaTZiWFRjR08zZnAwN3JpN0hMRW1YWFBsWWk4YnYvcVZ4dk5jZHJhNm03UmxiCis2SkJUYjVmZDY2VmhGUmpHQXJoMm43UjFyRFc0UDVOT1Q5SzBJMTgzVDJzY1lrZVozcS9WRnlMYjA5VTlhanpYQlM4S2draGM0bUJTCitrWVk5Y3kzVnk5bFVudU5KSDhIR0ljbFVpbHduQnRqVU9IMGd0ZUdPWjRjL1hOcmhYTFNZRHl4Zm5EOHoxcER5N3JZUnZEb2xobmJlCitVTXp4Q1pVczQwczZzN1VJdkJuTGdjMCt2S3VPa0lYZU9yRHltbHArWnhyYTRNWkxCYlZycUQvalRKNTk3cERtbnc1YzQrRGJ5Qjg4Cis5Q2c5RG9kWWNTdU1aVC8xMTRwcHRxYy9FdVRqUlB2SC96NXNsekkzdGx1T0VCQkxxT1hMT1grMEk1OTI5dE85N3drdmwvYXRDeit5Cit4SnJkd3RlVzJGTlcvTlNtQlArZi9tYVl0VnMvYll5QkM3T3gzanNZWkhMMDVDSXJCYS9uUytiM2JIZmlZbTRVZWlsMVlaWlNnQVVJCitmRloxZHhVbWVBMm9RUlEzUnVHWE5HTEZWOS9YYkdGR1BWNmtmemsxVEJCQ2QraXpjN3ExSCtPSE1Kd21hQlgySVFOWVZBS0hZZXBWCitTU0dDZTZDbmJZSEhFVEtHTmU0M0VEdkZnWnIwZ0IvblZIUEhaODBWVjFvak9pSTNYRHZZSWtsNGF5bzRieFFJZ3JGWFdUdkJJMG5ICitWRWxXTXV3MmFMVVdDUkhIZjh5bVZDSGpGbEpuT1NvamZldkNZeXl5WkRIMEljdkhocnNuUTVPMU9zV3pPTnVWVktJeFN4aUZaL3RSCitmS0RBZjZ4RlRudzRPOVFpZzJWQ2ZXMmhKUXJtTU91SFcwVzNkTFFtQ01PMmNjZFVkL3h5ZmZsSC9vbFRpSFpWZEd3YjhuSXdSelNFCitKMTVqRmxPSnVCWkJaNENpeUh5ZDJJRnlsRmxCK0hnSGhZYWJoV09Hd1lPMVpIL09nMWR0UWxGTWszNTJDR1JTSUZUYXBuV1FFVXROCitsNHp2OFMwYWFDRkR5R0NCcURVeFpZcHhHSFgwMXkvSnVIMXhobjdUT0NuTkNJNGVLRHM1V0dYNFI0MjVGNHZGMW8zQko0dk8wb3RxCitJM3JpbUk3akpZMWpJU3FuQnhrbkNJdnJ1RjgzbUY1d040WDdxR0xJaFI4QTJWZzB5RkVSU0lYbjlWdjNHSHkzVmovV0lrS2RkbFlpCit5SU12MkkvVk1qVExwVzdwdDA1U1dJWlIwUlB5eHBCNFNJVU05bEJQR0JsMEdDN29TRUV3UllMZTRwSnBaWTJQMHpiSTFuK09jNDR3CitxWTNQVW5tRjBpeGpWcEREL21KOXdwT0JHVFZnWGxhQ2FaaVBjSVdLNU5pS0JJaVBkR2FRMFRXR3ZBaUc3bk1jaGRaYjdWZ2Y4ek5pCitNdU15elJkeS9sZVBlOWlDNFRSeDdXaGhPUUkvUWlTVk5BbUFhMmxUL3BpRmJ1aDdvZkpvWVNaenJTWjFidm1XdzNlTjJuS1VQVmt5Cit1UE41L1ZSZm9oUmQwVllab3FoS0lsVTZUWFloSnhtUFVJbG9Bd2MxYlBtSEVwYVpZWk9SSE5sWFVKTTA3aEFUd0hSOE1KWXFrd1dSCitXYUllekZoeFNGbGM4L0ZxODJoRW5wZVJvemczVUxoaHI5bEFHdFZFa0NnNVpOUnV1VmxlQlBhWmFkaEcwWmdreVBtRE9UT0t6VmlNCitZZ09jcHVrS3FRY2JqQVdTMElsZVEyUk9qZGg2QSttZDFxV2RCUlNYN2lTWWdGUlR0Um1CcEppb2llWEppSGZKaU1HSVI5ZkpPbjhJCitNU2ZYWWhzcG40b29TYTJtU0FqNG4rOEJtZzAzZkJKWm9QT0pnc1ZaUnh1MW9PTVJQWFlZamRxamloRmFFb1pwWEJSRWFudUpvUkk2CitjaWJGaW5xNG5nVUtoL3dRZC9INW9mWUNaMEhKWFI2Mm9wWkZhQVQwaUZJWm80RElpVW9qa2plcUtpdW9aaXJLbzVZMWE3QVdja0dhCitCa3VZb0Q1bHBESzZlVXM2Q2tEcXBFVHdsMUVxcGZoSnBWZUtwVmw2RWdVQUFEcz0KKworLS1CT1VOREFSWS0tCisKKy0tT1VURVItLQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzE0LnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18xNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5OGQyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18xNC50eHQKQEAgLTAsMCArMSwyMyBAQAorUmV0dXJuLVBhdGg6IDxiYmJAenp6Lm9yZz4KK0RlbGl2ZXJlZC1UbzogYmJiQHp6ei5vcmcKK1JlY2VpdmVkOiBieSBtYWlsLnp6ei5vcmcgKFBvc3RmaXgsIGZyb20gdXNlcmlkIDg4OSkKKwlpZCAyN0NFQUQzOENDOyBGcmksICA0IE1heSAyMDAxIDE0OjA1OjQ0IC0wNDAwIChFRFQpCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0OyBjaGFyc2V0PXVzLWFzY2lpCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitNZXNzYWdlLUlEOiA8MTUwOTAuNjEzMDQuMTEwOTI5LjQ1Njg0QGFhYS56enoub3JnPgorRnJvbTogYmJiQGRkZC5jb20gKEpvaG4gWC4gRG9lKQorVG86IGJiYkB6enoub3JnCitTdWJqZWN0OiBUaGlzIGlzIGEgdGVzdCBtZXNzYWdlCitEYXRlOiBGcmksIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAKKworCitIaSwKKworSSdtIHNvcnJ5IGJ1dCBJJ20gdXNpbmcgYSBkcmFpbmJyZWFkIElTUCwgd2hpY2ggYWx0aG91Z2ggYmlnIGFuZAord2VhbHRoeSBjYW4ndCBzZWVtIHRvIGdlbmVyYXRlIHN0YW5kYXJkIGNvbXBsaWFudCBlbWFpbC4gOigKKworVGhpcyBtZXNzYWdlIGhhcyBhIENvbnRlbnQtVHlwZTogaGVhZGVyIHdpdGggbm8gc3VidHlwZS4gIEkgaG9wZSB5b3UKK2NhbiBzdGlsbCByZWFkIGl0LgorCistTWUKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18xNS50eHQgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMTUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYjg0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMTUudHh0CkBAIC0wLDAgKzEsNTIgQEAKK1JldHVybi1QYXRoOiA8eHhAeHguZGs+CitSZWNlaXZlZDogZnJvbSBmZXBELnBvc3QudGVsZS5kayAoMTk1LjQxLjQ2LjE0OSkgYnkgbWFpbC5ncm91cGNhcmUuZGsgKExTTVRQIGZvciBXaW5kb3dzIE5UIHYxLjFiKSB3aXRoIFNNVFAgaWQgPDAuMDAxNEY4QTJAbWFpbC5ncm91cGNhcmUuZGs+OyBNb24sIDMwIEFwciAyMDAxIDEyOjE3OjUwICswMjAwCitVc2VyLUFnZW50OiBNaWNyb3NvZnQtT3V0bG9vay1FeHByZXNzLU1hY2ludG9zaC1FZGl0aW9uLzUuMDIuMjEwNgorU3ViamVjdDogWFgKK0Zyb206IHh4QHh4LmRrCitUbzogWFgKK01lc3NhZ2UtSUQ6IDx4eHh4PgorTWltZS12ZXJzaW9uOiAxLjAKK0NvbnRlbnQtdHlwZTogbXVsdGlwYXJ0L21peGVkOworICAgYm91bmRhcnk9Ik1TX01hY19PRV8zMDcxNDc3ODQ3XzcyMDI1Ml9NSU1FX1BhcnQiCisKKz4gRGVubmUgbWVkZGVsZWxzZSBlciBpIE1JTUUtZm9ybWF0LiBEYSBkaXQgcG9zdGy+c25pbmdzcHJvZ3JhbSBpa2tlIGZvcnN0jHIgZGV0dGUgZm9ybWF0LCBrYW4gZGVsIGFmIGVsbGVyIGhlbGUgbWVkZGVsZWxzZW4gdr5yZSB1bL5zZWxpZy4KKworLS1NU19NYWNfT0VfMzA3MTQ3Nzg0N183MjAyNTJfTUlNRV9QYXJ0CitDb250ZW50LXR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsKKyAgIGJvdW5kYXJ5PSJNU19NYWNfT0VfMzA3MTQ3Nzg0N183MjAyNTJfTUlNRV9QYXJ0IgorCisKKy0tTVNfTWFjX09FXzMwNzE0Nzc4NDdfNzIwMjUyX01JTUVfUGFydAorQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJJU08tODg1OS0xIgorQ29udGVudC10cmFuc2Zlci1lbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorCitTb21lIHJlbW92ZWQgdGVzdC4gCisKKy0tTVNfTWFjX09FXzMwNzE0Nzc4NDdfNzIwMjUyX01JTUVfUGFydAorQ29udGVudC10eXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9IklTTy04ODU5LTEiCitDb250ZW50LXRyYW5zZmVyLWVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisKKzxIVE1MPgorPEhFQUQ+Cis8VElUTEU+U29tZSByZW1vdmVkIEhUTUw8L1RJVExFPgorPC9IRUFEPgorPEJPRFk+CitTb21lIHJlbW92ZWQgdGV4dC4KKzwvQk9EWT4KKzwvSFRNTD4KKworCistLU1TX01hY19PRV8zMDcxNDc3ODQ3XzcyMDI1Ml9NSU1FX1BhcnQtLQorCisKKy0tTVNfTWFjX09FXzMwNzE0Nzc4NDdfNzIwMjUyX01JTUVfUGFydAorQ29udGVudC10eXBlOiBpbWFnZS9naWY7IG5hbWU9Inh4LmdpZiI7CisgeC1tYWMtY3JlYXRvcj0iNkY2NzZDNjUiOworIHgtbWFjLXR5cGU9IjQ3NDk0NjY2IgorQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudAorQ29udGVudC10cmFuc2Zlci1lbmNvZGluZzogYmFzZTY0CisKK1NvbWUgcmVtb3ZlZCBiYXNlNjQgZW5jb2RlZCBjaGFycy4KKworLS1NU19NYWNfT0VfMzA3MTQ3Nzg0N183MjAyNTJfTUlNRV9QYXJ0LS0KKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzE2LnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18xNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYxNjdlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18xNi50eHQKQEAgLTAsMCArMSwxMjMgQEAKK1JldHVybi1QYXRoOiA8PgorRGVsaXZlcmVkLVRvOiBzY3ItYWRtaW5Ac29jYWwtcmF2ZXMub3JnCitSZWNlaXZlZDogZnJvbSBjb3VnYXIubm9jLnVjbGEuZWR1IChjb3VnYXIubm9jLnVjbGEuZWR1IFsxNjkuMjMyLjEwLjE4XSkKKwlieSBiYWJ5bG9uLnNvY2FsLXJhdmVzLm9yZyAoUG9zdGZpeCkgd2l0aCBFU01UUCBpZCBDQ0MyQzUxQjg0CisJZm9yIDxzY3ItYWRtaW5Ac29jYWwtcmF2ZXMub3JnPjsgU3VuLCAyMyBTZXAgMjAwMSAyMDoxMzo1NCAtMDcwMCAoUERUKQorUmVjZWl2ZWQ6IGZyb20gc2ltcy1tcy1kYWVtb24gYnkgY291Z2FyLm5vYy51Y2xhLmVkdQorIChTdW4gSW50ZXJuZXQgTWFpbCBTZXJ2ZXIgc2ltcy4zLjUuMjAwMC4wMy4yMy4xOC4wMy5wMTApCisgaWQgPDBHSzUwMEIwMUQwQjhZQGNvdWdhci5ub2MudWNsYS5lZHU+IGZvciBzY3ItYWRtaW5Ac29jYWwtcmF2ZXMub3JnOyBTdW4sCisgMjMgU2VwIDIwMDEgMjA6MTQ6MzUgLTA3MDAgKFBEVCkKK1JlY2VpdmVkOiBmcm9tIGNvdWdhci5ub2MudWNsYS5lZHUKKyAoU3VuIEludGVybmV0IE1haWwgU2VydmVyIHNpbXMuMy41LjIwMDAuMDMuMjMuMTguMDMucDEwKQorIGlkIDwwR0s1MDBCMDFEMEI4WEBjb3VnYXIubm9jLnVjbGEuZWR1PjsgU3VuLCAyMyBTZXAgMjAwMSAyMDoxNDozNSAtMDcwMCAoUERUKQorRGF0ZTogU3VuLCAyMyBTZXAgMjAwMSAyMDoxNDozNSAtMDcwMCAoUERUKQorRnJvbTogSW50ZXJuZXQgTWFpbCBEZWxpdmVyeSA8cG9zdG1hc3RlckB1Y2xhLmVkdT4KK1N1YmplY3Q6IERlbGl2ZXJ5IE5vdGlmaWNhdGlvbjogRGVsaXZlcnkgaGFzIGZhaWxlZAorVG86IHNjci1hZG1pbkBzb2NhbC1yYXZlcy5vcmcKK01lc3NhZ2UtaWQ6IDwwR0s1MDBCMDREMEI4WEBjb3VnYXIubm9jLnVjbGEuZWR1PgorTUlNRS12ZXJzaW9uOiAxLjAKK1NlbmRlcjogc2NyLW93bmVyQHNvY2FsLXJhdmVzLm9yZworRXJyb3JzLVRvOiBzY3Itb3duZXJAc29jYWwtcmF2ZXMub3JnCitYLUJlZW5UaGVyZTogc2NyQHNvY2FsLXJhdmVzLm9yZworWC1NYWlsbWFuLVZlcnNpb246IDIuMWEzCitQcmVjZWRlbmNlOiBidWxrCitMaXN0LUhlbHA6IDxtYWlsdG86c2NyLXJlcXVlc3RAc29jYWwtcmF2ZXMub3JnP3N1YmplY3Q9aGVscD4KK0xpc3QtUG9zdDogPG1haWx0bzpzY3JAc29jYWwtcmF2ZXMub3JnPgorTGlzdC1TdWJzY3JpYmU6IDxodHRwOi8vc29jYWwtcmF2ZXMub3JnL21haWxtYW4vbGlzdGluZm8vc2NyPiwKKwk8bWFpbHRvOnNjci1yZXF1ZXN0QHNvY2FsLXJhdmVzLm9yZz9zdWJqZWN0PXN1YnNjcmliZT4KK0xpc3QtSWQ6IFNvQ2FsLVJhdmVzIDxzY3Iuc29jYWwtcmF2ZXMub3JnPgorTGlzdC1VbnN1YnNjcmliZTogPGh0dHA6Ly9zb2NhbC1yYXZlcy5vcmcvbWFpbG1hbi9saXN0aW5mby9zY3I+LAorCTxtYWlsdG86c2NyLXJlcXVlc3RAc29jYWwtcmF2ZXMub3JnP3N1YmplY3Q9dW5zdWJzY3JpYmU+CitMaXN0LUFyY2hpdmU6IDxodHRwOi8vc29jYWwtcmF2ZXMub3JnL21haWxtYW4vcHJpdmF0ZS9zY3IvPgorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvcmVwb3J0OyBib3VuZGFyeT0iQm91bmRhcnlfKElEX1BHUzJGMmEreisvakw3aHVwS2dSaEEpIgorCisKKy0tQm91bmRhcnlfKElEX1BHUzJGMmEreisvakw3aHVwS2dSaEEpCitDb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMQorCitUaGlzIHJlcG9ydCByZWxhdGVzIHRvIGEgbWVzc2FnZSB5b3Ugc2VudCB3aXRoIHRoZSBmb2xsb3dpbmcgaGVhZGVyIGZpZWxkczoKKworICBNZXNzYWdlLWlkOiA8MDAyMDAxYzE0NGE2JDg3NTJlMDYwJDU2MTA0NTg2QG94eS5lZHU+CisgIERhdGU6IFN1biwgMjMgU2VwIDIwMDEgMjA6MTA6NTUgLTA3MDAKKyAgRnJvbTogIklhbiBULiBIZW5yeSIgPGhlbnJ5aUBveHkuZWR1PgorICBUbzogU29DYWwgUmF2ZXMgPHNjckBzb2NhbC1yYXZlcy5vcmc+CisgIFN1YmplY3Q6IFtzY3JdIHllYWggZm9yIElhbnMhIQorCitZb3VyIG1lc3NhZ2UgY2Fubm90IGJlIGRlbGl2ZXJlZCB0byB0aGUgZm9sbG93aW5nIHJlY2lwaWVudHM6CisKKyAgUmVjaXBpZW50IGFkZHJlc3M6IGphbmdlbDFAY291Z2FyLm5vYy51Y2xhLmVkdQorICBSZWFzb246IHJlY2lwaWVudCByZWFjaGVkIGRpc2sgcXVvdGEKKworCistLUJvdW5kYXJ5XyhJRF9QR1MyRjJhK3orL2pMN2h1cEtnUmhBKQorQ29udGVudC10eXBlOiBtZXNzYWdlL0RFTElWRVJZLVNUQVRVUworCitPcmlnaW5hbC1lbnZlbG9wZS1pZDogMEdLNTAwQjRIRDA4ODhAY291Z2FyLm5vYy51Y2xhLmVkdQorUmVwb3J0aW5nLU1UQTogZG5zOyBjb3VnYXIubm9jLnVjbGEuZWR1CisKK0FjdGlvbjogZmFpbGVkCitTdGF0dXM6IDUuMC4wIChyZWNpcGllbnQgcmVhY2hlZCBkaXNrIHF1b3RhKQorT3JpZ2luYWwtcmVjaXBpZW50OiByZmM4MjI7amFuZ2VsMUBjb3VnYXIubm9jLnVjbGEuZWR1CitGaW5hbC1yZWNpcGllbnQ6IHJmYzgyMjtqYW5nZWwxQGNvdWdhci5ub2MudWNsYS5lZHUKKworLS1Cb3VuZGFyeV8oSURfUEdTMkYyYSt6Ky9qTDdodXBLZ1JoQSkKK0NvbnRlbnQtdHlwZTogTUVTU0FHRS9SRkM4MjIKKworUmV0dXJuLXBhdGg6IHNjci1hZG1pbkBzb2NhbC1yYXZlcy5vcmcKK1JlY2VpdmVkOiBmcm9tIHNpbXMtbXMtZGFlbW9uIGJ5IGNvdWdhci5ub2MudWNsYS5lZHUKKyAoU3VuIEludGVybmV0IE1haWwgU2VydmVyIHNpbXMuMy41LjIwMDAuMDMuMjMuMTguMDMucDEwKQorIGlkIDwwR0s1MDBCMDFEMEI4WEBjb3VnYXIubm9jLnVjbGEuZWR1PjsgU3VuLCAyMyBTZXAgMjAwMSAyMDoxNDozNSAtMDcwMCAoUERUKQorUmVjZWl2ZWQ6IGZyb20gcGFudGhlci5ub2MudWNsYS5lZHUgYnkgY291Z2FyLm5vYy51Y2xhLmVkdQorIChTdW4gSW50ZXJuZXQgTWFpbCBTZXJ2ZXIgc2ltcy4zLjUuMjAwMC4wMy4yMy4xOC4wMy5wMTApCisgd2l0aCBFU01UUCBpZCA8MEdLNTAwQjRHRDA4ODhAY291Z2FyLm5vYy51Y2xhLmVkdT4gZm9yIGphbmdlbDFAc2ltcy1tcy1kYWVtb247CisgU3VuLCAyMyBTZXAgMjAwMSAyMDoxNDozMyAtMDcwMCAoUERUKQorUmVjZWl2ZWQ6IGZyb20gYmFieWxvbi5zb2NhbC1yYXZlcy5vcmcKKyAoaXAtMjA5LTg1LTIyMi0xMTcuZHJlYW1ob3N0LmNvbSBbMjA5Ljg1LjIyMi4xMTddKQorIGJ5IHBhbnRoZXIubm9jLnVjbGEuZWR1ICg4LjkuMWEvOC45LjEpIHdpdGggRVNNVFAgaWQgVUFBMDk3OTMgZm9yCisgPGphbmdlbDFAdWNsYS5lZHU+OyBTdW4sIDIzIFNlcCAyMDAxIDIwOjE0OjMyIC0wNzAwIChQRFQpCitSZWNlaXZlZDogZnJvbSBiYWJ5bG9uIChsb2NhbGhvc3QgWzEyNy4wLjAuMV0pIGJ5IGJhYnlsb24uc29jYWwtcmF2ZXMub3JnCisgKFBvc3RmaXgpIHdpdGggRVNNVFAgaWQgRDNCMjk1MUI3MDsgU3VuLCAyMyBTZXAgMjAwMSAyMDoxMzo0NyAtMDcwMCAoUERUKQorUmVjZWl2ZWQ6IGJ5IGJhYnlsb24uc29jYWwtcmF2ZXMub3JnIChQb3N0Zml4LCBmcm9tIHVzZXJpZCA2MDAwMSkKKyBpZCBBNjExRjUxQjgyOyBTdW4sIDIzIFNlcCAyMDAxIDIwOjEzOjQ2IC0wNzAwIChQRFQpCitSZWNlaXZlZDogZnJvbSB0aWdlci5jYy5veHkuZWR1ICh0aWdlci5jYy5veHkuZWR1IFsxMzQuNjkuMy4xMTJdKQorIGJ5IGJhYnlsb24uc29jYWwtcmF2ZXMub3JnIChQb3N0Zml4KSB3aXRoIEVTTVRQIGlkIEFEQTczNTFCNzAgZm9yCisgPHNjckBzb2NhbC1yYXZlcy5vcmc+OyBTdW4sIDIzIFNlcCAyMDAxIDIwOjEzOjQ0IC0wNzAwIChQRFQpCitSZWNlaXZlZDogZnJvbSBlbnQgKG4xNmg4Ni5kaGNwLm94eS5lZHUgWzEzNC42OS4xNi44Nl0pCisgYnkgdGlnZXIuY2Mub3h5LmVkdSAoOC44LjgvOC44LjgpIHdpdGggU01UUCBpZCBVQUEwODEwMCBmb3IKKyA8c2NyQHNvY2FsLXJhdmVzLm9yZz47IFN1biwgMjMgU2VwIDIwMDEgMjA6MTQ6MjQgLTA3MDAgKFBEVCkKK0RhdGU6IFN1biwgMjMgU2VwIDIwMDEgMjA6MTA6NTUgLTA3MDAKK0Zyb206ICJJYW4gVC4gSGVucnkiIDxoZW5yeWlAb3h5LmVkdT4KK1N1YmplY3Q6IFtzY3JdIHllYWggZm9yIElhbnMhIQorU2VuZGVyOiBzY3ItYWRtaW5Ac29jYWwtcmF2ZXMub3JnCitUbzogU29DYWwgUmF2ZXMgPHNjckBzb2NhbC1yYXZlcy5vcmc+CitFcnJvcnMtdG86IHNjci1hZG1pbkBzb2NhbC1yYXZlcy5vcmcKK01lc3NhZ2UtaWQ6IDwwMDIwMDFjMTQ0YTYkODc1MmUwNjAkNTYxMDQ1ODZAb3h5LmVkdT4KK01JTUUtdmVyc2lvbjogMS4wCitYLU1haWxlcjogTWljcm9zb2Z0IE91dGxvb2sgRXhwcmVzcyA1LjUwLjQ1MjIuMTIwMAorQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitQcmVjZWRlbmNlOiBidWxrCitEZWxpdmVyZWQtdG86IHNjci1wb3N0QGJhYnlsb24uc29jYWwtcmF2ZXMub3JnCitEZWxpdmVyZWQtdG86IHNjckBzb2NhbC1yYXZlcy5vcmcKK1gtQ29udmVydGVkLVRvLVBsYWluLVRleHQ6IGZyb20gbXVsdGlwYXJ0L2FsdGVybmF0aXZlIGJ5IGRlbWltZSAwLjk4ZQorWC1Db252ZXJ0ZWQtVG8tUGxhaW4tVGV4dDogQWx0ZXJuYXRpdmUgc2VjdGlvbiB1c2VkIHdhcyB0ZXh0L3BsYWluCitYLUJlZW5UaGVyZTogc2NyQHNvY2FsLXJhdmVzLm9yZworWC1NYWlsbWFuLVZlcnNpb246IDIuMWEzCitMaXN0LUhlbHA6IDxtYWlsdG86c2NyLXJlcXVlc3RAc29jYWwtcmF2ZXMub3JnP3N1YmplY3Q9aGVscD4KK0xpc3QtUG9zdDogPG1haWx0bzpzY3JAc29jYWwtcmF2ZXMub3JnPgorTGlzdC1TdWJzY3JpYmU6IDxodHRwOi8vc29jYWwtcmF2ZXMub3JnL21haWxtYW4vbGlzdGluZm8vc2NyPiwKKyA8bWFpbHRvOnNjci1yZXF1ZXN0QHNvY2FsLXJhdmVzLm9yZz9zdWJqZWN0PXN1YnNjcmliZT4KK0xpc3QtSWQ6IFNvQ2FsLVJhdmVzIDxzY3Iuc29jYWwtcmF2ZXMub3JnPgorTGlzdC1VbnN1YnNjcmliZTogPGh0dHA6Ly9zb2NhbC1yYXZlcy5vcmcvbWFpbG1hbi9saXN0aW5mby9zY3I+LAorIDxtYWlsdG86c2NyLXJlcXVlc3RAc29jYWwtcmF2ZXMub3JnP3N1YmplY3Q9dW5zdWJzY3JpYmU+CitMaXN0LUFyY2hpdmU6IDxodHRwOi8vc29jYWwtcmF2ZXMub3JnL21haWxtYW4vcHJpdmF0ZS9zY3IvPgorCitJIGFsd2F5cyBsb3ZlIHRvIGZpbmQgbW9yZSBJYW4ncyB0aGF0IGFyZSBvdmVyIDMgeWVhcnMgb2xkISEKKworSWFuCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworRm9yIGV2ZW50IGluZm8sIGxpc3QgcXVlc3Rpb25zLCBvciB0byB1bnN1YnNjcmliZSwgc2VlIGh0dHA6Ly93d3cuc29jYWwtcmF2ZXMub3JnLworCisKKworLS1Cb3VuZGFyeV8oSURfUEdTMkYyYSt6Ky9qTDdodXBLZ1JoQSktLQorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMTcudHh0IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzE3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDg2ZTQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzE3LnR4dApAQCAtMCwwICsxLDEyIEBACitNSU1FLVZlcnNpb246IDEuMAorRnJvbTogQmFycnkgPGJhcnJ5QGRpZ2ljb29sLmNvbT4KK1RvOiBEaW5ndXMgTG92ZXJzIDxjcmF2aW5kb2dzQGNyYXZpbmRvZ3MuY29tPgorU3ViamVjdDogSGVyZSBpcyB5b3VyIGRpbmd1cyBmaXNoCitEYXRlOiBGcmksIDIwIEFwciAyMDAxIDE5OjM1OjAyIC0wNDAwCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9IkJPVU5EQVJZIgorCitIaSB0aGVyZSwKKworVGhpcyBpcyB0aGUgZGluZ3VzIGZpc2guCisKK1tOb24tdGV4dCAoaW1hZ2UvZ2lmKSBwYXJ0IG9mIG1lc3NhZ2Ugb21pdHRlZCwgZmlsZW5hbWUgZGluZ3VzZmlzaC5naWZdCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMTgudHh0IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzE4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWY0OTA0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzE4LnR4dApAQCAtMCwwICsxLDYgQEAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorWC1Gb29iYXItU3BvaW5rLURlZnJvYm5pdDogd2Fzbmlwb29wOyBnaXJhZmZlcz0idmVyeS1sb25nLW5lY2tlZC1hbmltYWxzIjsKKwlzcG9vZ2U9Inl1bW15IjsgaGlwcG9zPSJnYXJnYW50dWFuIjsgbWFyc2htYWxsb3dzPSJnb29leSIKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzE5LnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18xOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliZjdmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18xOS50eHQKQEAgLTAsMCArMSw0MyBAQAorU2VuZCBQcHAgbWFpbGluZyBsaXN0IHN1Ym1pc3Npb25zIHRvCisJcHBwQHp6ei5vcmcKKworVG8gc3Vic2NyaWJlIG9yIHVuc3Vic2NyaWJlIHZpYSB0aGUgV29ybGQgV2lkZSBXZWIsIHZpc2l0CisJaHR0cDovL3d3dy56enoub3JnL21haWxtYW4vbGlzdGluZm8vcHBwCitvciwgdmlhIGVtYWlsLCBzZW5kIGEgbWVzc2FnZSB3aXRoIHN1YmplY3Qgb3IgYm9keSAnaGVscCcgdG8KKwlwcHAtcmVxdWVzdEB6enoub3JnCisKK1lvdSBjYW4gcmVhY2ggdGhlIHBlcnNvbiBtYW5hZ2luZyB0aGUgbGlzdCBhdAorCXBwcC1hZG1pbkB6enoub3JnCisKK1doZW4gcmVwbHlpbmcsIHBsZWFzZSBlZGl0IHlvdXIgU3ViamVjdCBsaW5lIHNvIGl0IGlzIG1vcmUgc3BlY2lmaWMKK3RoYW4gIlJlOiBDb250ZW50cyBvZiBQcHAgZGlnZXN0Li4uIgorCitUb2RheSdzIFRvcGljczoKKworICAgMS4gdGVzdGluZyAjMSAoQmFycnkgQS4gV2Fyc2F3KQorICAgMi4gdGVzdGluZyAjMiAoQmFycnkgQS4gV2Fyc2F3KQorICAgMy4gdGVzdGluZyAjMyAoQmFycnkgQS4gV2Fyc2F3KQorICAgNC4gdGVzdGluZyAjNCAoQmFycnkgQS4gV2Fyc2F3KQorICAgNS4gdGVzdGluZyAjNSAoQmFycnkgQS4gV2Fyc2F3KQorCitoZWxsbworCisKK2hlbGxvCisKKworaGVsbG8KKworCitoZWxsbworCisKK2hlbGxvCisKKworCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworUHBwIG1haWxpbmcgbGlzdAorUHBwQHp6ei5vcmcKK2h0dHA6Ly93d3cuenp6Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3BwcAorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMjAudHh0IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzIwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTZhODg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzIwLnR4dApAQCAtMCwwICsxLDIyIEBACitSZXR1cm4tUGF0aDogPGJiYkB6enoub3JnPgorRGVsaXZlcmVkLVRvOiBiYmJAenp6Lm9yZworUmVjZWl2ZWQ6IGJ5IG1haWwuenp6Lm9yZyAoUG9zdGZpeCwgZnJvbSB1c2VyaWQgODg5KQorCWlkIDI3Q0VBRDM4Q0M7IEZyaSwgIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAgKEVEVCkKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKK01lc3NhZ2UtSUQ6IDwxNTA5MC42MTMwNC4xMTA5MjkuNDU2ODRAYWFhLnp6ei5vcmc+CitGcm9tOiBiYmJAZGRkLmNvbSAoSm9obiBYLiBEb2UpCitUbzogYmJiQHp6ei5vcmcKK0NjOiBjY2NAenp6Lm9yZworQ0M6IGRkZEB6enoub3JnCitjYzogZWVlQHp6ei5vcmcKK1N1YmplY3Q6IFRoaXMgaXMgYSB0ZXN0IG1lc3NhZ2UKK0RhdGU6IEZyaSwgNCBNYXkgMjAwMSAxNDowNTo0NCAtMDQwMAorCisKK0hpLAorCitEbyB5b3UgbGlrZSB0aGlzIG1lc3NhZ2U/CisKKy1NZQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzIxLnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18yMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1OTBiMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18yMS50eHQKQEAgLTAsMCArMSwyMCBAQAorRnJvbTogYXBlcnNvbkBkb20uYWluCitUbzogYnBlcnNvbkBkb20uYWluCitTdWJqZWN0OiBUZXN0CitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9IkJPVU5EQVJZIgorCitNSU1FIG1lc3NhZ2UKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCitPbmUKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCitUd28KKy0tQk9VTkRBUlktLQorRW5kIG9mIE1JTUUgbWVzc2FnZQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzIyLnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18yMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY5ZGU1ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18yMi50eHQKQEAgLTAsMCArMSw0NiBAQAorTWltZS1WZXJzaW9uOiAxLjAKK01lc3NhZ2UtSWQ6IDxhMDUwMDE5MDJiN2YxYzMzNzczZTlAWzEzNC44NC4xODMuMTM4XT4KK0RhdGU6IFR1ZSwgMTYgT2N0IDIwMDEgMTM6NTk6MjUgKzAzMDAKK1RvOiBhQGV4YW1wbGUuY29tCitGcm9tOiBiQGV4YW1wbGUuY29tCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PT09PT09PT09PV8tMTIwODg5MjUyMz09Xz09PT09PT09PT09PSIKKworLS09PT09PT09PT09PT1fLTEyMDg4OTI1MjM9PV89PT09PT09PT09PT0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiIDsgZm9ybWF0PSJmbG93ZWQiCisKK1RleHQgdGV4dCB0ZXh0LgorLS09PT09PT09PT09PT1fLTEyMDg4OTI1MjM9PV89PT09PT09PT09PT0KK0NvbnRlbnQtSWQ6IDxhMDUwMDE5MDJiN2YxYzMzNzczZTlAWzEzNC44NC4xODMuMTM4XS4wLjA+CitDb250ZW50LVR5cGU6IGltYWdlL2pwZWc7IG5hbWU9IndpYmJsZS5KUEciCisgOyB4LW1hYy10eXBlPSI0QTUwNDU0NyIKKyA7IHgtbWFjLWNyZWF0b3I9IjQ3NEI0RjRFIgorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IndpYmJsZS5KUEciCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworLzlqLzRBQVFTa1pKUmdBQkFRQUFBUUFCQUFELzJ3QkRBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUIKK0FRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRSC93QUFMQ0FYQUJJRUJBUkVBCitnNmJDamp3L3BJWlNqTzZGV0ZwbGRqeVNPbUNOck83REJaaWJVWGhUd3RDaXh3K0d0QWlqVmRxeHhhUHAwYUt2bUdYYQorcXJiQlF2bXMwbUFNZVlTLzNpVFYxZEcwaEhhUk5LMDFYYmxuV3h0VmRqa0hMTUlnVHlxbms5VkI3Q3JQMkt6SUlOcGEKKzRPN0krenhZTzlXVjhqWmc3MVpsYis4ck1Ea0VpckFWUUZBVUFLQUZBQUFVQVlBVURnQURnWTZEanBSdFhqNVJ4akhBCis0d1FSajB3UUNNZENBZXdwYUtLSy85az0KKy0tPT09PT09PT09PT09Xy0xMjA4ODkyNTIzPT1fPT09PT09PT09PT09CitDb250ZW50LUlkOiA8YTA1MDAxOTAyYjdmMWMzMzc3M2U5QFsxMzQuODQuMTgzLjEzOF0uMC4xPgorQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnOyBuYW1lPSJ3aWJibGUyLkpQRyIKKyA7IHgtbWFjLXR5cGU9IjRBNTA0NTQ3IgorIDsgeC1tYWMtY3JlYXRvcj0iNDc0QjRGNEUiCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0id2liYmxlMi5KUEciCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworLzlqLzRBQVFTa1pKUmdBQkFRQUFBUUFCQUFELzJ3QkRBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUIKK0FRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRSC93QUFMQ0FYQUJKMEJBUkVBCisvOFFBSHdBQUFRVUJBUUVCQVFFQUFBQUFBQUFBQUFFQ0F3UUZCZ2NJQ1FvTC84UUF0UkFBQWdFREF3SUVBd1VGQkFRQQorVzZORkpKQkVrVTEwa0tHVGNXTUR3eHVVKzBKSHZrOHFBdE9wTndxU1IwbjhjM0JsRHlYSGxxc1VsdEhFaVR2ZFhMeFIKKzd2TWlHRE5KQUpXa0FNazhaa0NGcDVHMm9vNVcrK0lOcmJRdE5mVFF4SkF1WGx1cHo5b1M0ZDVZMVcrRTJYbFdaSkpFCitZN0xXWVF4VExFMXp1TWJmQlB4dzhYMmZpYlZkSWJTYkk2bkxaeFg2MzV0OVRqdFlyZVdSN1dHS0pUTEpGRktTbG96TworMFNoeElYTTQzdUMzLzlrPQorLS09PT09PT09PT09PT1fLTEyMDg4OTI1MjM9PV89PT09PT09PT09PT0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiIDsgZm9ybWF0PSJmbG93ZWQiCisKK1RleHQgdGV4dCB0ZXh0LgorLS09PT09PT09PT09PT1fLTEyMDg4OTI1MjM9PV89PT09PT09PT09PT0tLQorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMjMudHh0IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzIzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjJlOGVjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzIzLnR4dApAQCAtMCwwICsxLDggQEAKK0Zyb206IGFwZXJzb25AZG9tLmFpbgorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJCT1VOREFSWSIKKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKK0EgbWVzc2FnZSBwYXJ0CistLUJPVU5EQVJZLS0KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18yNC50eHQgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNTIzMzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMjQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iQk9VTkRBUlkiCitNSU1FLVZlcnNpb246IDEuMAorU3ViamVjdDogQSBzdWJqZWN0CitUbzogYXBlcnNvbkBkb20uYWluCitGcm9tOiBicGVyc29uQGRvbS5haW4KKworLS1CT1VOREFSWQorCisKKy0tQk9VTkRBUlktLQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzI1LnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18yNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzNTI3NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18yNS50eHQKQEAgLTAsMCArMSwxMTcgQEAKK0Zyb20gTUFJTEVSLURBRU1PTiBGcmkgQXByIDA2IDE2OjQ2OjA5IDIwMDEKK1JlY2VpdmVkOiBmcm9tIFsyMDQuMjQ1LjE5OS45OF0gKGhlbG89emluZmFuZGVsLmxhY2l0YS5jb20pCisJYnkgd3d3LmxpbnV4Lm9yZy51ayB3aXRoIGVzbXRwIChFeGltIDMuMTMgIzEpCisJaWQgMTRsWVI2LTAwMDhJdi0wMAorCWZvciBsaW51eHVzZXItYWRtaW5Ad3d3LmxpbnV4Lm9yZy51azsgRnJpLCAwNiBBcHIgMjAwMSAxNjo0NjowOSArMDEwMAorUmVjZWl2ZWQ6IGZyb20gbG9jYWxob3N0IChsb2NhbGhvc3QpIGJ5IHppbmZhbmRlbC5sYWNpdGEuY29tICg4LjcuMy84LjYuMTAtTVQ0LjAwKSB3aXRoIGludGVybmFsIGlkIEpBQjAzMjI1OyBGcmksIDYgQXByIDIwMDEgMDk6MjM6MDYgLTA4MDAgKEdNVC0wODAwKQorRGF0ZTogRnJpLCA2IEFwciAyMDAxIDA5OjIzOjA2IC0wODAwIChHTVQtMDgwMCkKK0Zyb206IE1haWwgRGVsaXZlcnkgU3Vic3lzdGVtIDxNQUlMRVItREFFTU9OQHppbmZhbmRlbC5sYWNpdGEuY29tPgorU3ViamVjdDogUmV0dXJuZWQgbWFpbDogVG9vIG1hbnkgaG9wcyAxOSAoMTcgbWF4KTogZnJvbSA8bGludXh1c2VyLWFkbWluQHd3dy5saW51eC5vcmcudWs+IHZpYSBbMTk5LjE2NC4yMzUuMjI2XSwgdG8gPHNjb2ZmbWFuQHdlbGxwYXJ0bmVyLmNvbT4KK01lc3NhZ2UtSWQ6IDwyMDAxMDQwNjE3MjMuSkFCMDMyMjVAemluZmFuZGVsLmxhY2l0YS5jb20+CitUbzogPGxpbnV4dXNlci1hZG1pbkB3d3cubGludXgub3JnLnVrPgorVG86IHBvc3RtYXN0ZXJAemluZmFuZGVsLmxhY2l0YS5jb20KK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZXBvcnQ7IHJlcG9ydC10eXBlPWRlbGl2ZXJ5LXN0YXR1czsKKwlibworQXV0by1TdWJtaXR0ZWQ6IGF1dG8tZ2VuZXJhdGVkIChmYWlsdXJlKQorCitUaGlzIGlzIGEgTUlNRS1lbmNhcHN1bGF0ZWQgbWVzc2FnZQorCistLUpBQjAzMjI1Ljk4NjU3Nzc4Ni96aW5mYW5kZWwubGFjaXRhLmNvbQorCitUaGUgb3JpZ2luYWwgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgYXQgRnJpLCA2IEFwciAyMDAxIDA5OjIzOjAzIC0wODAwIChHTVQtMDgwMCkKK2Zyb20gWzE5OS4xNjQuMjM1LjIyNl0KKworICAgLS0tLS0gVGhlIGZvbGxvd2luZyBhZGRyZXNzZXMgaGF2ZSBkZWxpdmVyeSBub3RpZmljYXRpb25zIC0tLS0tCis8c2NvZmZtYW5Ad2VsbHBhcnRuZXIuY29tPiAgKHVucmVjb3ZlcmFibGUgZXJyb3IpCisKKyAgIC0tLS0tIFRyYW5zY3JpcHQgb2Ygc2Vzc2lvbiBmb2xsb3dzIC0tLS0tCis1NTQgVG9vIG1hbnkgaG9wcyAxOSAoMTcgbWF4KTogZnJvbSA8bGludXh1c2VyLWFkbWluQHd3dy5saW51eC5vcmcudWs+IHZpYSBbMTk5LjE2NC4yMzUuMjI2XSwgdG8gPHNjb2ZmbWFuQHdlbGxwYXJ0bmVyLmNvbT4KKworLS1KQUIwMzIyNS45ODY1Nzc3ODYvemluZmFuZGVsLmxhY2l0YS5jb20KK0NvbnRlbnQtVHlwZTogbWVzc2FnZS9kZWxpdmVyeS1zdGF0dXMKKworUmVwb3J0aW5nLU1UQTogZG5zOyB6aW5mYW5kZWwubGFjaXRhLmNvbQorUmVjZWl2ZWQtRnJvbS1NVEE6IGRuczsgWzE5OS4xNjQuMjM1LjIyNl0KK0Fycml2YWwtRGF0ZTogRnJpLCA2IEFwciAyMDAxIDA5OjIzOjAzIC0wODAwIChHTVQtMDgwMCkKKworRmluYWwtUmVjaXBpZW50OiByZmM4MjI7IHNjb2ZmbWFuQHdlbGxwYXJ0bmVyLmNvbQorQWN0aW9uOiBmYWlsZWQKK1N0YXR1czogNS40LjYKK0xhc3QtQXR0ZW1wdC1EYXRlOiBGcmksIDYgQXByIDIwMDEgMDk6MjM6MDYgLTA4MDAgKEdNVC0wODAwKQorCistLUpBQjAzMjI1Ljk4NjU3Nzc4Ni96aW5mYW5kZWwubGFjaXRhLmNvbQorQ29udGVudC1UeXBlOiB0ZXh0L3JmYzgyMi1oZWFkZXJzCisKK1JldHVybi1QYXRoOiBsaW51eHVzZXItYWRtaW5Ad3d3LmxpbnV4Lm9yZy51aworUmVjZWl2ZWQ6IGZyb20gbnMxLndlbGxwYXJ0bmVyLm5ldCAoWzE5OS4xNjQuMjM1LjIyNl0pIGJ5IHppbmZhbmRlbC5sYWNpdGEuY29tICg4LjcuMy84LjYuMTAtTVQ0LjAwKSB3aXRoIEVTTVRQIGlkIEpBQTAzMjI1IGZvciA8c2NvZmZtYW5Ad2VsbHBhcnRuZXIuY29tPjsgRnJpLCA2IEFwciAyMDAxIDA5OjIzOjAzIC0wODAwIChHTVQtMDgwMCkKK1JlY2VpdmVkOiBmcm9tIHppbmZhbmRlbC5sYWNpdGEuY29tIChbMjA0LjI0NS4xOTkuOThdKQorCWJ5CisJZm8KK1JlY2VpdmVkOiBmcm9tIG5zMS53ZWxscGFydG5lci5uZXQgKFsxOTkuMTY0LjIzNS4yMjZdKSBieSB6aW5mYW5kZWwubGFjaXRhLmNvbSAoOC43LjMvOC42LjEwLU1UNC4wMCkgd2l0aCBFU01UUCBpZCBKQUEwMzIyMSBmb3IgPHNjb2ZmbWFuQHdlbGxwYXJ0bmVyLmNvbT47IEZyaSwgNiBBcHIgMjAwMSAwOToyMjoxOCAtMDgwMCAoR01ULTA4MDApCitSZWNlaXZlZDogZnJvbSB6aW5mYW5kZWwubGFjaXRhLmNvbSAoWzIwNC4yNDUuMTk5Ljk4XSkKKwlieQorCWZvCitSZWNlaXZlZDogZnJvbSBuczEud2VsbHBhcnRuZXIubmV0IChbMTk5LjE2NC4yMzUuMjI2XSkgYnkgemluZmFuZGVsLmxhY2l0YS5jb20gKDguNy4zLzguNi4xMC1NVDQuMDApIHdpdGggRVNNVFAgaWQgSkFBMDMyMTcgZm9yIDxzY29mZm1hbkB3ZWxscGFydG5lci5jb20+OyBGcmksIDYgQXByIDIwMDEgMDk6MjE6MzcgLTA4MDAgKEdNVC0wODAwKQorUmVjZWl2ZWQ6IGZyb20gemluZmFuZGVsLmxhY2l0YS5jb20gKFsyMDQuMjQ1LjE5OS45OF0pCisJYnkKKwlmbworUmVjZWl2ZWQ6IGZyb20gbnMxLndlbGxwYXJ0bmVyLm5ldCAoWzE5OS4xNjQuMjM1LjIyNl0pIGJ5IHppbmZhbmRlbC5sYWNpdGEuY29tICg4LjcuMy84LjYuMTAtTVQ0LjAwKSB3aXRoIEVTTVRQIGlkIEpBQTAzMjEzIGZvciA8c2NvZmZtYW5Ad2VsbHBhcnRuZXIuY29tPjsgRnJpLCA2IEFwciAyMDAxIDA5OjIwOjU2IC0wODAwIChHTVQtMDgwMCkKK1JlY2VpdmVkOiBmcm9tIHppbmZhbmRlbC5sYWNpdGEuY29tIChbMjA0LjI0NS4xOTkuOThdKQorCWJ5CisJZm8KK1JlY2VpdmVkOiBmcm9tIG5zMS53ZWxscGFydG5lci5uZXQgKFsxOTkuMTY0LjIzNS4yMjZdKSBieSB6aW5mYW5kZWwubGFjaXRhLmNvbSAoOC43LjMvOC42LjEwLU1UNC4wMCkgd2l0aCBFU01UUCBpZCBKQUEwMzIwOSBmb3IgPHNjb2ZmbWFuQHdlbGxwYXJ0bmVyLmNvbT47IEZyaSwgNiBBcHIgMjAwMSAwOToyMDoxNSAtMDgwMCAoR01ULTA4MDApCitSZWNlaXZlZDogZnJvbSB6aW5mYW5kZWwubGFjaXRhLmNvbSAoWzIwNC4yNDUuMTk5Ljk4XSkKKwlieQorCWZvCitSZWNlaXZlZDogZnJvbSBuczEud2VsbHBhcnRuZXIubmV0IChbMTk5LjE2NC4yMzUuMjI2XSkgYnkgemluZmFuZGVsLmxhY2l0YS5jb20gKDguNy4zLzguNi4xMC1NVDQuMDApIHdpdGggRVNNVFAgaWQgSkFBMDMyMDUgZm9yIDxzY29mZm1hbkB3ZWxscGFydG5lci5jb20+OyBGcmksIDYgQXByIDIwMDEgMDk6MTk6MzMgLTA4MDAgKEdNVC0wODAwKQorUmVjZWl2ZWQ6IGZyb20gemluZmFuZGVsLmxhY2l0YS5jb20gKFsyMDQuMjQ1LjE5OS45OF0pCisJYnkKKwlmbworUmVjZWl2ZWQ6IGZyb20gbnMxLndlbGxwYXJ0bmVyLm5ldCAoWzE5OS4xNjQuMjM1LjIyNl0pIGJ5IHppbmZhbmRlbC5sYWNpdGEuY29tICg4LjcuMy84LjYuMTAtTVQ0LjAwKSB3aXRoIEVTTVRQIGlkIEpBQTAzMjAxIGZvciA8c2NvZmZtYW5Ad2VsbHBhcnRuZXIuY29tPjsgRnJpLCA2IEFwciAyMDAxIDA5OjE4OjUyIC0wODAwIChHTVQtMDgwMCkKK1JlY2VpdmVkOiBmcm9tIHppbmZhbmRlbC5sYWNpdGEuY29tIChbMjA0LjI0NS4xOTkuOThdKQorCWJ5CisJZm8KK1JlY2VpdmVkOiBmcm9tIG5zMS53ZWxscGFydG5lci5uZXQgKFsxOTkuMTY0LjIzNS4yMjZdKSBieSB6aW5mYW5kZWwubGFjaXRhLmNvbSAoOC43LjMvOC42LjEwLU1UNC4wMCkgd2l0aCBFU01UUCBpZCBKQUEwMzE5NyBmb3IgPHNjb2ZmbWFuQHdlbGxwYXJ0bmVyLmNvbT47IEZyaSwgNiBBcHIgMjAwMSAwOToxNzo1NCAtMDgwMCAoR01ULTA4MDApCitSZWNlaXZlZDogZnJvbSB3d3cubGludXgub3JnLnVrIChwYXJjZWxmYXJjZS5saW51eC50aGVwbGFuZXQuY28udWsgWzE5NS45Mi4yNDkuMjUyXSkKKwlieQorCWZvCitSZWNlaXZlZDogZnJvbSBsb2NhbGhvc3QubG9jYWxkb21haW4KKwkoWworCWJ5CisJaWQKK1JlY2VpdmVkOiBmcm9tIFsyMTIuMS4xMzAuMTFdIChoZWxvPXMxLnVrbGludXgubmV0IGlkZW50PXJvb3QpCisJYnkKKwlpZAorCWZvCitSZWNlaXZlZDogZnJvbSBzZXJ2ZXIgKHBwcC0yLTIyLmN2eDQudGVsaW5jby5uZXQgWzIxMi4xLjE0OS4yMl0pCisJYnkKKwlmbworRnJvbTogRGFuaWVsIEphbWVzIDxkYW5pZWxAbGludXh1c2VyLmNvLnVrPgorT3JnYW5pemF0aW9uOiBMaW51eFVzZXIKK1RvOiBsaW51eHVzZXJAd3d3LmxpbnV4Lm9yZy51aworWC1NYWlsZXI6IEtNYWlsIFt2ZXJzaW9uIDEuMS45OV0KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsKKyAgYworTUlNRS1WZXJzaW9uOiAxLjAKK01lc3NhZ2UtSWQ6IDwwMTA0MDYxNjAzMzkwMy4wMDk2MkBzZXJ2ZXI+CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitTdWJqZWN0OiBbTGludXhVc2VyXSBidWxsZXRpbiBuby4gNDUKK1NlbmRlcjogbGludXh1c2VyLWFkbWluQHd3dy5saW51eC5vcmcudWsKK0Vycm9ycy1UbzogbGludXh1c2VyLWFkbWluQHd3dy5saW51eC5vcmcudWsKK1gtQmVlblRoZXJlOiBsaW51eHVzZXJAd3d3LmxpbnV4Lm9yZy51aworWC1NYWlsbWFuLVZlcnNpb246IDIuMC4zCitQcmVjZWRlbmNlOiBidWxrCitMaXN0LUhlbHA6IDxtYWlsdG86bGludXh1c2VyLXJlcXVlc3RAd3d3LmxpbnV4Lm9yZy51az9zdWJqZWN0PWhlbHA+CitMaXN0LVBvc3Q6IDxtYWlsdG86bGludXh1c2VyQHd3dy5saW51eC5vcmcudWs+CitMaXN0LVN1YnNjcmliZTogPGh0dHA6Ly93d3cubGludXgub3JnLnVrL21haWxtYW4vbGlzdGluZm8vbGludXh1c2VyPiwKKwk8bQorTGlzdC1JZDogYnVsbGV0aW5zIGZyb20gTGludXhVc2VyIG1hZ2F6aW5lIDxsaW51eHVzZXIud3d3LmxpbnV4Lm9yZy51az4KK0xpc3QtVW5zdWJzY3JpYmU6IDxodHRwOi8vd3d3LmxpbnV4Lm9yZy51ay9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4dXNlcj4sCisJPG0KK0xpc3QtQXJjaGl2ZTogPGh0dHA6Ly93d3cubGludXgub3JnLnVrL3BpcGVybWFpbC9saW51eHVzZXIvPgorRGF0ZTogRnJpLCA2IEFwciAyMDAxIDE2OjAzOjM5ICswMTAwCisKKy0tSkFCMDMyMjUuOTg2NTc3Nzg2L3ppbmZhbmRlbC5sYWNpdGEuY29tLS0KKworCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMjYudHh0IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzI2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTMyMDNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzI2LnR4dApAQCAtMCwwICsxLDQ1IEBACitSZWNlaXZlZDogZnJvbSB4Y2FyIFsxOTIuMTY4LjAuMl0gYnkgamVldmVzLndvb3N0ZXIubG9jYWwNCisgIChTTVRQRDMyLTcuMDcgRVZBTCkgaWQgQUZGOTJGMDIxNDsgU3VuLCAxMiBNYXkgMjAwMiAwODo1NTozNyArMDEwMA0KK0RhdGU6IFN1biwgMTIgTWF5IDIwMDIgMDg6NTY6MTUgKzAxMDANCitGcm9tOiBGYXRoZXIgVGltZSA8ZmF0aGVyLnRpbWVAeGNhci53b29zdGVyLmxvY2FsPg0KK1RvOiB0aW1ib0BqZWV2ZXMud29vc3Rlci5sb2NhbA0KK1N1YmplY3Q6IElNQVAgZmlsZSB0ZXN0DQorTWVzc2FnZS1JRDogPDZkZjY1ZDM1NGIuZmF0aGVyLnRpbWVAcnBjLndvb3N0ZXIubG9jYWw+DQorWC1Pcmdhbml6YXRpb246IEhvbWUNCitVc2VyLUFnZW50OiBNZXNzZW5nZXItUHJvLzIuNTBhIChNc2dTZXJ2ZS8xLjUwKSAoUklTQy1PUy80LjAyKSBQT1BzdGFyLzIuMDMNCitNSU1FLVZlcnNpb246IDEuMA0KK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iMTYxODQ5Mjg2MC0tMjA1MTMwMTE5MC0tMTEzODUzNjgwIg0KK1N0YXR1czogUg0KK1gtVUlETDogMzE5OTk4MzAyDQorDQorVGhpcyBtZXNzYWdlIGlzIGluIE1JTUUgZm9ybWF0IHdoaWNoIHlvdXIgbWFpbGVyIGFwcGFyZW50bHkgZG9lcyBub3Qgc3VwcG9ydC4NCitZb3UgZWl0aGVyIHJlcXVpcmUgYSBuZXdlciB2ZXJzaW9uIG9mIHlvdXIgc29mdHdhcmUgd2hpY2ggc3VwcG9ydHMgTUlNRSwgb3INCithIHNlcGFyYXRlIE1JTUUgZGVjb2RpbmcgdXRpbGl0eS4gIEFsdGVybmF0aXZlbHksIGFzayB0aGUgc2VuZGVyIG9mIHRoaXMNCittZXNzYWdlIHRvIHJlc2VuZCBpdCBpbiBhIGRpZmZlcmVudCBmb3JtYXQuDQorDQorLS0xNjE4NDkyODYwLS0yMDUxMzAxMTkwLS0xMTM4NTM2ODANCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkNCisNCitTaW1wbGUgZW1haWwgd2l0aCBhdHRhY2htZW50Lg0KKw0KKw0KKy0tMTYxODQ5Mjg2MC0tMjA1MTMwMTE5MC0tMTEzODUzNjgwDQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9yaXNjb3M7IG5hbWU9ImNsb2NrLmJtcCw2OWMiOyB0eXBlPUJNUDsgbG9hZD0mZmZmNjljNGI7IGV4ZWM9JjM1NWRkNGQxOyBhY2Nlc3M9JjAzDQorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ImNsb2NrLmJtcCINCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQNCisNCitRazEyQWdBQUFBQUFBSFlBQUFBb0FBQUFJQUFBQUNBQUFBQUJBQVFBQUFBQUFBQUFBQURYRFFBQTF3MEFBQUFBQUFBQQ0KK0FBQUFBQUFBQUFBQWlBQUFpQUFBQUlpSUFJZ0FBQUNJQUlnQWlJZ0FBTHU3dXdDSWlJZ0FFUkhkQUNMdUlnQXovLzhBDQorekFBQUFOMFIzUUR1N2lJQS8vLy9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWkzQUFBQUFBQUFBRGVBQUFBQUFBQUENCitDM0FETXpNek1BTndBQUFBQUFBQUFBQUhNQUFBQUFOd0FBQUFBQUFBQUFDQU1BZDN6UGZ3QXdnQUFBQUFBQUFJQXdkLw0KK2Y4eC9mM0F3Z0FBQUFBQUFnREIweC9mMy8velBBd2dBQUFBQUFBY0hmTTkvLy8vOHovQXdBQUFBQUFpd2QvZjMvLy8vDQorLy8vL0E0QUFBQUFBY0V4L2YvLy8vLy8vekFNQUFBQUFpd2ZNOS8vLy8zLy8vOHp3T0FBQUFBY0hmMy8vLy9CLy8vLy8NCis4REFBQUFBTEIvZjMvLy93ZDNkMy8vQXdBQUFBQndUUGYvL3dDUUFBRC96QU1BQUFBQXNFeC9mLy8vQi8vLy84d0RBQQ0KK0FBQUhCMzkvLy8vd2YvLy8vL0F3QUFBQUN3ZjM5Ly8vOEgvLy8vL3dNQUFBQUljSGZNOS8vL0IvLy8vTThEZ0FBQUFBDQorc0hUSC8vL3dmLy8veEFNQUFBQUFDSEIzZjMvLzhILy8vL2NEZ0FBQUFBQUxCM3pILy9ELy9NOXdNQUFBQUFBQWdMQjANCit6MzkvLy94SEF3Z0FBQUFBQUFnTEIzZDNSSGQzY0RDQUFBQUFBQUFBZ0xBSGQwUjNjQU1JQUFBQUFBQUFnQWdMY0FBQQ0KK0FBTXdnQWdBQUFBQUNEQUFBQXU3dDdjd0FBZ0RnQUFBQUFCemNJQUFBQUFBQUFnRE13QUFBQUFBTjd1d2dBQUFBQWdIDQorTXpNQUFBQUFDSDk3dHpBQUFBQUx1M2MzZ0FBQUFBQUwrN3R6REFCQXU3ZjdjQUFBQUFBQUNBKzNNQTdFUUF2L3NJQUENCitBQUFBQUFBSUFBQUFBQUFBQUlBQUFBQUENCisNCistLTE2MTg0OTI4NjAtLTIwNTEzMDExOTAtLTExMzg1MzY4MC0tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzI3LnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18yNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxOTE3NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18yNy50eHQKQEAgLTAsMCArMSwxNSBAQAorUmV0dXJuLVBhdGg6IDxhcGVyc29uQGRvbS5haW4+CitSZWNlaXZlZDogYnkgbWFpbC5kb20uYWluIChQb3N0Zml4LCBmcm9tIHVzZXJpZCA4ODkpCisJaWQgQjlEMEFEMzVEQjsgVHVlLCAgNCBKdW4gMjAwMiAyMTo0Njo1OSAtMDQwMCAoRURUKQorTWVzc2FnZS1JRDogPDE1NjEzLjI4MDUxLjcwNzEyNi41Njk2OTNAZG9tLmFpbj4KK0RhdGU6IFR1ZSwgNCBKdW4gMjAwMiAyMTo0Njo1OSAtMDQwMAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorU3ViamVjdDogYnVnIGRlbW9uc3RyYXRpb24KKwkxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjM0NTY3ODk3MTIzNDU2Nzg5ODExMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTExMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OQorCW1vcmUgdGV4dAorRnJvbTogYXBlcnNvbkBkb20uYWluIChBbm5lIFAuIEVyc29uKQorVG86IGJwZXJzb25AZG9tLmFpbiAoQmFybmV5IFAuIEVyc29uKQorCit0ZXN0CmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMjgudHh0IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzI4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTQ4MjRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzI4LnR4dApAQCAtMCwwICsxLDI1IEBACitGcm9tOiBhcGVyc29uQGRvbS5haW4KK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9kaWdlc3Q7IGJvdW5kYXJ5PUJPVU5EQVJZCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKKworQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitUbzogYWFAYmIub3JnCitGcm9tOiBjY0BkZC5vcmcKK1N1YmplY3Q6IGVlCisKK21lc3NhZ2UgMQorCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IG1lc3NhZ2UvcmZjODIyCisKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQorVG86IGFhQGJiLm9yZworRnJvbTogY2NAZGQub3JnCitTdWJqZWN0OiBlZQorCittZXNzYWdlIDIKKworLS1CT1VOREFSWS0tCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMjkudHh0IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzI5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmFiNTYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzI5LnR4dApAQCAtMCwwICsxLDIyIEBACitSZXR1cm4tUGF0aDogPGJiYkB6enoub3JnPgorRGVsaXZlcmVkLVRvOiBiYmJAenp6Lm9yZworUmVjZWl2ZWQ6IGJ5IG1haWwuenp6Lm9yZyAoUG9zdGZpeCwgZnJvbSB1c2VyaWQgODg5KQorCWlkIDI3Q0VBRDM4Q0M7IEZyaSwgIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAgKEVEVCkKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWk7CisgICAgIHRpdGxlKjAqPSJ1cy1hc2NpaSdlbidUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCI7CisgICAgIHRpdGxlKjEqPSIlMkElMkElMkFmdW4lMkElMkElMkElMjAiOworICAgICB0aXRsZSoyPSJpc24ndCBpdCEiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitNZXNzYWdlLUlEOiA8MTUwOTAuNjEzMDQuMTEwOTI5LjQ1Njg0QGFhYS56enoub3JnPgorRnJvbTogYmJiQGRkZC5jb20gKEpvaG4gWC4gRG9lKQorVG86IGJiYkB6enoub3JnCitTdWJqZWN0OiBUaGlzIGlzIGEgdGVzdCBtZXNzYWdlCitEYXRlOiBGcmksIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAKKworCitIaSwKKworRG8geW91IGxpa2UgdGhpcyBtZXNzYWdlPworCistTWUKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18zMC50eHQgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMzAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMzRiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMzAudHh0CkBAIC0wLDAgKzEsMjMgQEAKK0Zyb206IGFwZXJzb25AZG9tLmFpbgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2RpZ2VzdDsgYm91bmRhcnk9Qk9VTkRBUlkKKworLS1CT1VOREFSWQorCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkKK1RvOiBhYUBiYi5vcmcKK0Zyb206IGNjQGRkLm9yZworU3ViamVjdDogZWUKKworbWVzc2FnZSAxCisKKy0tQk9VTkRBUlkKKworQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpCitUbzogYWFAYmIub3JnCitGcm9tOiBjY0BkZC5vcmcKK1N1YmplY3Q6IGVlCisKK21lc3NhZ2UgMgorCistLUJPVU5EQVJZLS0KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18zMS50eHQgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMzEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNThlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMzEudHh0CkBAIC0wLDAgKzEsMTUgQEAKK0Zyb206IGFwZXJzb25AZG9tLmFpbgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1CT1VOREFSWV8KKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKK21lc3NhZ2UgMQorCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworbWVzc2FnZSAyCisKKy0tQk9VTkRBUlktLQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzMyLnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18zMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdlYzVhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18zMi50eHQKQEAgLTAsMCArMSwxNCBAQAorRGVsaXZlcmVkLVRvOiBmcmVlYnNkLWlzcEBmcmVlYnNkLm9yZworRGF0ZTogVHVlLCAyNiBTZXAgMjAwMCAxMjoyMzowMyAtMDUwMAorRnJvbTogQW5uZSBQZXJzb24gPGFwZXJzb25AZXhhbXBsZS5jb20+CitUbzogQmFybmV5IER1ZGUgPGJkdWRlQGV4YW1wbGUuY29tPgorU3ViamVjdDogUmU6IExpbWl0aW5nIFBlcmwgQ1BVIFV0aWxpemF0aW9uLi4uCitNaW1lLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0Kj1hbnNpLXgzLjQtMTk2OCcndXMtYXNjaWkKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorVXNlci1BZ2VudDogTXV0dC8xLjMuOGkKK1NlbmRlcjogb3duZXItZnJlZWJzZC1pc3BARnJlZUJTRC5PUkcKK1ByZWNlZGVuY2U6IGJ1bGsKK1gtTG9vcDogRnJlZUJTRC5vcmcKKworU29tZSBtZXNzYWdlLgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzMzLnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18zMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyNzg3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18zMy50eHQKQEAgLTAsMCArMSwyOSBAQAorRGVsaXZlcmVkLVRvOiBmcmVlYnNkLWlzcEBmcmVlYnNkLm9yZworRGF0ZTogV2VkLCAyNyBTZXAgMjAwMCAxMToxMTowOSAtMDUwMAorRnJvbTogQW5uZSBQZXJzb24gPGFwZXJzb25AZXhhbXBsZS5jb20+CitUbzogQmFybmV5IER1ZGUgPGJkdWRlQGV4YW1wbGUuY29tPgorU3ViamVjdDogUmU6IExpbWl0aW5nIFBlcmwgQ1BVIFV0aWxpemF0aW9uLi4uCitNaW1lLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvc2lnbmVkOyBtaWNhbGcqPWFuc2kteDMuNC0xOTY4JydwZ3AtbWQ1OworCXByb3RvY29sKj1hbnNpLXgzLjQtMTk2OCcnYXBwbGljYXRpb24lMkZwZ3Atc2lnbmF0dXJlOworCWJvdW5kYXJ5Kj0iYW5zaS14My40LTE5NjgnJ0VlUWZHd1BjUVNPSkJhUVUiCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKK1NlbmRlcjogb3duZXItZnJlZWJzZC1pc3BARnJlZUJTRC5PUkcKK1ByZWNlZGVuY2U6IGJ1bGsKK1gtTG9vcDogRnJlZUJTRC5vcmcKKworCistLUVlUWZHd1BjUVNPSkJhUVUKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldCo9YW5zaS14My40LTE5NjgnJ3VzLWFzY2lpCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworcGFydCAxCisKKy0tRWVRZkd3UGNRU09KQmFRVQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKKworcGFydCAyCisKKy0tRWVRZkd3UGNRU09KQmFRVS0tCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMzQudHh0IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzM0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTVkZmVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzM0LnR4dApAQCAtMCwwICsxLDE5IEBACitGcm9tOiBhcGVyc29uQGRvbS5haW4KK1RvOiBicGVyc29uQGRvbS5haW4KK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2RpZ2VzdDsgYm91bmRhcnk9WFlaCisKKy0tWFlaCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworCitUaGlzIGlzIGEgdGV4dCBwbGFpbiBwYXJ0IHRoYXQgaXMgY291bnRlciB0byByZWNvbW1lbmRlZCBwcmFjdGljZSBpbgorUkZDIDIwNDYsICQ1LjEuNSwgYnV0IGlzIG5vdCBpbGxlZ2FsCisKKy0tWFlaCisKK0Zyb206IGNwZXJzb25AZG9tLmFpbgorVG86IGRwZXJzb25AZG9tLmFpbgorCitBIHN1Ym1lc3NhZ2UKKworLS1YWVotLQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzM1LnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18zNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3ZDVhMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18zNS50eHQKQEAgLTAsMCArMSw0IEBACitGcm9tOiBhcGVyc29uQGRvbS5haW4KK1RvOiBicGVyc29uQGRvbS5haW4KK1N1YmplY3Q6IGhlcmUncyBzb21ldGhpbmcgaW50ZXJlc3RpbmcKK2NvdW50ZXIgdG8gUkZDIDI4MjIsIHRoZXJlJ3Mgbm8gc2VwYXJhdGluZyBuZXdsaW5lIGhlcmUKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18zNi50eHQgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMzYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzJjMzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMzYudHh0CkBAIC0wLDAgKzEsNDAgQEAKK01pbWUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IE11bHRpcGFydC9NaXhlZDsgQm91bmRhcnk9Ik5leHRQYXJ0IgorVG86IElFVEYtQW5ub3VuY2U6OworRnJvbTogSW50ZXJuZXQtRHJhZnRzQGlldGYub3JnCitTdWJqZWN0OiBJLUQgQUNUSU9OOmRyYWZ0LWlldGYtbWJvbmVkLW1peC0wMC50eHQKK0RhdGU6IFR1ZSwgMjIgRGVjIDE5OTggMTY6NTU6MDYgLTA1MDAKKworLS1OZXh0UGFydAorCitCbGFoIGJsYWggYmxhaAorCistLU5leHRQYXJ0CitDb250ZW50LVR5cGU6IE11bHRpcGFydC9BbHRlcm5hdGl2ZTsgQm91bmRhcnk9Ik90aGVyQWNjZXNzIgorCistLU90aGVyQWNjZXNzCitDb250ZW50LVR5cGU6IE1lc3NhZ2UvRXh0ZXJuYWwtYm9keTsKKwlhY2Nlc3MtdHlwZT0ibWFpbC1zZXJ2ZXIiOworCXNlcnZlcj0ibWFpbHNlcnZAaWV0Zi5vcmciCisKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorQ29udGVudC1JRDogPDE5OTgxMjIyMTUxNDA2LkktREBpZXRmLm9yZz4KKworRU5DT0RJTkcgbWltZQorRklMRSAvaW50ZXJuZXQtZHJhZnRzL2RyYWZ0LWlldGYtbWJvbmVkLW1peC0wMC50eHQKKworLS1PdGhlckFjY2VzcworQ29udGVudC1UeXBlOiBNZXNzYWdlL0V4dGVybmFsLWJvZHk7CisJbmFtZT0iZHJhZnQtaWV0Zi1tYm9uZWQtbWl4LTAwLnR4dCI7CisJc2l0ZT0iZnRwLmlldGYub3JnIjsKKwlhY2Nlc3MtdHlwZT0iYW5vbi1mdHAiOworCWRpcmVjdG9yeT0iaW50ZXJuZXQtZHJhZnRzIgorCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KK0NvbnRlbnQtSUQ6IDwxOTk4MTIyMjE1MTQwNi5JLURAaWV0Zi5vcmc+CisKKworLS1PdGhlckFjY2Vzcy0tCisKKy0tTmV4dFBhcnQtLQorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMzcudHh0IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzM3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzhkMzRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzM3LnR4dApAQCAtMCwwICsxLDIyIEBACitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9QUJDREUKKworLS1BQkNERQorQ29udGVudC1UeXBlOiB0ZXh0L3gtb25lCisKK0JsYWgKKworLS1BQkNERQorLS1BQkNERQorQ29udGVudC1UeXBlOiB0ZXh0L3gtdHdvCisKK0JsYWgKKworLS1BQkNERQorLS1BQkNERQorLS1BQkNERQorLS1BQkNERQorQ29udGVudC1UeXBlOiB0ZXh0L3gtdHdvCisKK0JsYWgKKworLS1BQkNERS0tCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfMzgudHh0IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzM4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDZkZjgxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzM4LnR4dApAQCAtMCwwICsxLDEwMSBAQAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0gPV9hYWFhYWFhYWFhMCIKKworLS0tLS0tLSA9X2FhYWFhYWFhYWEwCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tID1fYWFhYWFhYWFhYTEiCitDb250ZW50LUlEOiA8MjA1OTIuMTAyMjU4NjkyOS4xQGV4YW1wbGUuY29tPgorCistLS0tLS0tID1fYWFhYWFhYWFhYTEKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iLS0tLS0gPV9hYWFhYWFhYWFhMiIKK0NvbnRlbnQtSUQ6IDwyMDU5Mi4xMDIyNTg2OTI5LjJAZXhhbXBsZS5jb20+CisKKy0tLS0tLS0gPV9hYWFhYWFhYWFhMgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCitDb250ZW50LUlEOiA8MjA1OTIuMTAyMjU4NjkyOS4zQGV4YW1wbGUuY29tPgorQ29udGVudC1EZXNjcmlwdGlvbjogdmVyeSB0cmlja3kKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworCitVbmxpa2UgdGhlIHRlc3QgdGVzdF9uZXN0ZWQtbXVsdGlwbGVzLXdpdGgtaW50ZXJuYWwtYm91bmRhcnksIHRoaXMKK3BpZWNlIG9mIHRleHQgbm90IG9ubHkgY29udGFpbnMgdGhlIG91dGVyIGJvdW5kYXJ5IHRhZ3MgCistLS0tLS0tID1fYWFhYWFhYWFhYTEgCithbmQgCistLS0tLS0tID1fYWFhYWFhYWFhYTAgCitidXQgcHV0cyB0aGVtIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUhIEFuZCwgdG8gYmUgZXZlbiBuYXN0aWVyLCBpdAorZXZlbiBpbmNsdWRlcyBhIGNvdXBsZSBvZiBlbmQgdGFncywgc3VjaCBhcyB0aGlzIG9uZToKKworLS0tLS0tLSA9X2FhYWFhYWFhYWExLS0KKworYW5kIHRoaXMgb25lLCB3aGljaCBpcyBmcm9tIGEgbXVsdGlwYXJ0IHdlIGhhdmVuJ3QgZXZlbiBzZWVuIHlldCEKKworLS0tLS0tLSA9X2FhYWFhYWFhYWE0LS0KKworVGhpcyB3aWxsLCBJJ20gc3VyZSwgY2F1c2UgbXVjaCBicmVha2FnZSBvZiBNSU1FIHBhcnNlcnMuIEJ1dCwgYXMgCitmYXIgYXMgSSBjYW4gdGVsbCwgaXQncyBwZXJmZWN0bHkgbGVnYWwuIEkgaGF2ZSBub3QgeWV0IGV2ZXIgc2VlbgorYSBjYXNlIG9mIHRoaXMgaW4gdGhlIHdpbGQsIGJ1dCBJJ3ZlIHNlZW4gKnNpbWlsYXIqIHRoaW5ncy4KKworCistLS0tLS0tID1fYWFhYWFhYWFhYTIKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCitDb250ZW50LUlEOiA8MjA1OTIuMTAyMjU4NjkyOS40QGV4YW1wbGUuY29tPgorQ29udGVudC1EZXNjcmlwdGlvbjogcGF0Y2gyCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworWFhYCisKKy0tLS0tLS0gPV9hYWFhYWFhYWFhMi0tCisKKy0tLS0tLS0gPV9hYWFhYWFhYWFhMQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7IGJvdW5kYXJ5PSItLS0tLSA9X2FhYWFhYWFhYWEzIgorQ29udGVudC1JRDogPDIwNTkyLjEwMjI1ODY5MjkuNkBleGFtcGxlLmNvbT4KKworLS0tLS0tLSA9X2FhYWFhYWFhYWEzCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorQ29udGVudC1JRDogPDIwNTkyLjEwMjI1ODY5MjkuN0BleGFtcGxlLmNvbT4KK0NvbnRlbnQtRGVzY3JpcHRpb246IHBhdGNoMworQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKK1hYWAorCistLS0tLS0tID1fYWFhYWFhYWFhYTMKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCitDb250ZW50LUlEOiA8MjA1OTIuMTAyMjU4NjkyOS44QGV4YW1wbGUuY29tPgorQ29udGVudC1EZXNjcmlwdGlvbjogcGF0Y2g0CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworWFhYCisKKy0tLS0tLS0gPV9hYWFhYWFhYWFhMy0tCisKKy0tLS0tLS0gPV9hYWFhYWFhYWFhMQorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7IGJvdW5kYXJ5PSItLS0tLSA9X2FhYWFhYWFhYWE0IgorQ29udGVudC1JRDogPDIwNTkyLjEwMjI1ODY5MjkuMTBAZXhhbXBsZS5jb20+CisKKy0tLS0tLS0gPV9hYWFhYWFhYWFhNAorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KK0NvbnRlbnQtSUQ6IDwyMDU5Mi4xMDIyNTg2OTI5LjExQGV4YW1wbGUuY29tPgorQ29udGVudC1EZXNjcmlwdGlvbjogcGF0Y2g1CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworWFhYCisKKy0tLS0tLS0gPV9hYWFhYWFhYWFhNAorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KK0NvbnRlbnQtSUQ6IDwyMDU5Mi4xMDIyNTg2OTI5LjEyQGV4YW1wbGUuY29tPgorQ29udGVudC1EZXNjcmlwdGlvbjogcGF0Y2g2CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworWFhYCisKKy0tLS0tLS0gPV9hYWFhYWFhYWFhNC0tCisKKy0tLS0tLS0gPV9hYWFhYWFhYWFhMS0tCisKKy0tLS0tLS0gPV9hYWFhYWFhYWFhMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKK0NvbnRlbnQtSUQ6IDwyMDU5Mi4xMDIyNTg2OTI5LjE1QGV4YW1wbGUuY29tPgorCistLQorSXQncyBuZXZlciB0b28gbGF0ZSB0byBoYXZlIGEgaGFwcHkgY2hpbGRob29kLgorCistLS0tLS0tID1fYWFhYWFhYWFhYTAtLQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzM5LnR4dCBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18zOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI0YjI2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ18zOS50eHQKQEAgLTAsMCArMSw4MyBAQAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0gPV9hYWFhYWFhYWFhMCIKKworLS0tLS0tLSA9X2FhYWFhYWFhYWEwCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tID1fYWFhYWFhYWFhYTEiCitDb250ZW50LUlEOiA8MjA1OTIuMTAyMjU4NjkyOS4xQGV4YW1wbGUuY29tPgorCistLS0tLS0tID1fYWFhYWFhYWFhYTEKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iLS0tLS0gPV9hYWFhYWFhYWFhMSIKK0NvbnRlbnQtSUQ6IDwyMDU5Mi4xMDIyNTg2OTI5LjJAZXhhbXBsZS5jb20+CisKKy0tLS0tLS0gPV9hYWFhYWFhYWFhMQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KK0NvbnRlbnQtSUQ6IDwyMDU5Mi4xMDIyNTg2OTI5LjNAZXhhbXBsZS5jb20+CitDb250ZW50LURlc2NyaXB0aW9uOiBwYXRjaDEKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorCitYWFgKKworLS0tLS0tLSA9X2FhYWFhYWFhYWExCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorQ29udGVudC1JRDogPDIwNTkyLjEwMjI1ODY5MjkuNEBleGFtcGxlLmNvbT4KK0NvbnRlbnQtRGVzY3JpcHRpb246IHBhdGNoMgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKK1hYWAorCistLS0tLS0tID1fYWFhYWFhYWFhYTEtLQorCistLS0tLS0tID1fYWFhYWFhYWFhYTEKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iLS0tLS0gPV9hYWFhYWFhYWFhMSIKK0NvbnRlbnQtSUQ6IDwyMDU5Mi4xMDIyNTg2OTI5LjZAZXhhbXBsZS5jb20+CisKKy0tLS0tLS0gPV9hYWFhYWFhYWFhMQorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KK0NvbnRlbnQtSUQ6IDwyMDU5Mi4xMDIyNTg2OTI5LjdAZXhhbXBsZS5jb20+CitDb250ZW50LURlc2NyaXB0aW9uOiBwYXRjaDMKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorCitYWFgKKworLS0tLS0tLSA9X2FhYWFhYWFhYWExCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorQ29udGVudC1JRDogPDIwNTkyLjEwMjI1ODY5MjkuOEBleGFtcGxlLmNvbT4KK0NvbnRlbnQtRGVzY3JpcHRpb246IHBhdGNoNAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKK1hYWAorCistLS0tLS0tID1fYWFhYWFhYWFhYTEtLQorCistLS0tLS0tID1fYWFhYWFhYWFhYTEKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iLS0tLS0gPV9hYWFhYWFhYWFhMSIKK0NvbnRlbnQtSUQ6IDwyMDU5Mi4xMDIyNTg2OTI5LjEwQGV4YW1wbGUuY29tPgorCistLS0tLS0tID1fYWFhYWFhYWFhYTEKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCitDb250ZW50LUlEOiA8MjA1OTIuMTAyMjU4NjkyOS4xMUBleGFtcGxlLmNvbT4KK0NvbnRlbnQtRGVzY3JpcHRpb246IHBhdGNoNQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKK1hYWAorCistLS0tLS0tID1fYWFhYWFhYWFhYTEKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCitDb250ZW50LUlEOiA8MjA1OTIuMTAyMjU4NjkyOS4xMkBleGFtcGxlLmNvbT4KK0NvbnRlbnQtRGVzY3JpcHRpb246IHBhdGNoNgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKK1hYWAorCistLS0tLS0tID1fYWFhYWFhYWFhYTEtLQorCistLS0tLS0tID1fYWFhYWFhYWFhYTEtLQorCistLS0tLS0tID1fYWFhYWFhYWFhYTAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCitDb250ZW50LUlEOiA8MjA1OTIuMTAyMjU4NjkyOS4xNUBleGFtcGxlLmNvbT4KKworLS0KK0l0J3MgbmV2ZXIgdG9vIGxhdGUgdG8gaGF2ZSBhIGhhcHB5IGNoaWxkaG9vZC4KKworLS0tLS0tLSA9X2FhYWFhYWFhYWEwLS0KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ180MC50eHQgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfNDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MzVmYTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfNDAudHh0CkBAIC0wLDAgKzEsMTAgQEAKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgYm91bmRhcnk9Ii0tOTYxMjg0MjM2NTUyNTIyMjY5IgorCistLS0tOTYxMjg0MjM2NTUyNTIyMjY5CitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdCaXQKKworPGh0bWw+PC9odG1sPgorCistLS0tOTYxMjg0MjM2NTUyNTIyMjY5LS0KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ180MS50eHQgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfNDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2Y2RkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfNDEudHh0CkBAIC0wLDAgKzEsOCBAQAorRnJvbTogIkFsbGlzb24gRHVubGFwIiA8eHh4QGV4YW1wbGUuY29tPgorVG86IHl5eUBleGFtcGxlLmNvbQorU3ViamVjdDogNjQ0MjMKK0RhdGU6IFN1biwgMTEgSnVsIDIwMDQgMTY6MDk6MjcgLTAzMDAKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsKKworQmxhaCBibGFoIGJsYWgKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ180Mi50eHQgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfNDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NWY4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfNDIudHh0CkBAIC0wLDAgKzEsMjAgQEAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iQUFBIgorRnJvbTogTWFpbCBEZWxpdmVyeSBTdWJzeXN0ZW0gPHh4eEBleGFtcGxlLmNvbT4KK1RvOiB5eXlAZXhhbXBsZS5jb20KKworVGhpcyBpcyBhIE1JTUUtZW5jYXBzdWxhdGVkIG1lc3NhZ2UKKworLS1BQUEKKworU3R1ZmYKKworLS1BQUEKK0NvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKKworRnJvbTogd2VibWFzdGVyQHB5dGhvbi5vcmcKK1RvOiB6enpAZXhhbXBsZS5jb20KK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iQkJCIgorCistLUJCQi0tCisKKy0tQUFBLS0KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ180My50eHQgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfNDMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5N2QxMmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfNDMudHh0CkBAIC0wLDAgKzEsMjE3IEBACitGcm9tIFNSUzA9YU8vcD1PTj1iYWcucHl0aG9uLm9yZz1Ob25lQGJvdW5jZTIucG9ib3guY29tICBGcmkgTm92IDI2IDIxOjQwOjM2IDIwMDQKK1gtVk0tdjUtRGF0YTogKFtuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0KKwlbbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsICJNQUlMRVIgREFFTU9OIDw+IiAiTUFJTEVSIERBRU1PTiA8PiIgbmlsIG5pbCAiQmFubmVkIGZpbGU6IGF1dG9fX21haWwucHl0aG9uLmJhdCBpbiBtYWlsIGZyb20geW91IiAiXkZyb206IiBuaWwgbmlsIG5pbCBuaWwgIkJhbm5lZCBmaWxlOiBhdXRvX19tYWlsLnB5dGhvbi5iYXQgaW4gbWFpbCBmcm9tIHlvdSIgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXQorCW5pbCkKK01JTUUtVmVyc2lvbjogMS4wCitNZXNzYWdlLUlkOiA8ZWRhYi43ODA0ZjVjYjgwNzBAcHl0aG9uLm9yZz4KK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlcG9ydDsgcmVwb3J0LXR5cGU9ZGVsaXZlcnktc3RhdHVzOworICAgIGNoYXJzZXQ9dXRmLTg7CisgICAgYm91bmRhcnk9Ii0tLS0tLS0tLS09XzExMDE1MjY5MDQtMTk1Ni01IgorWC1WaXJ1cy1TY2FubmVkOiBieSBYUzRBTEwgVmlydXMgU2Nhbm5lcgorWC1VSURMOiA0XEchISE8YyIhVVZbIiFNN0MhIQorRnJvbTogTUFJTEVSIERBRU1PTiA8PgorVG86IDx3ZWJtYXN0ZXJAcHl0aG9uLm9yZz4KK1N1YmplY3Q6IEJhbm5lZCBmaWxlOiBhdXRvX19tYWlsLnB5dGhvbi5iYXQgaW4gbWFpbCBmcm9tIHlvdQorRGF0ZTogRnJpLCAyNiBOb3YgMjAwNCAxOTo0MTo0NCAtMDgwMCAoUFNUKQorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0Li4uCisKKy0tLS0tLS0tLS0tLT1fMTEwMTUyNjkwNC0xOTU2LTUKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworQkFOTkVEIEZJTEVOQU1FIEFMRVJUCisKK1lvdXIgbWVzc2FnZSB0bzogeHh4eHh4eEBkb3QuY2EuZ292LCB4eHh4eHh4eHh4eHh4QGRvdC5jYS5nb3YsIHh4eHh4eHh4eHhAZG90LmNhLmdvdiwgeHh4eHh4eHhAZG90LmNhLmdvdiwgeHh4eHh4eHh4eEBkb3QuY2EuZ292LCB4eHh4eHhAZG90LmNhLmdvdiwgeHh4eHh4eHh4eEBkb3QuY2EuZ292LCB4eHh4eHhAZG90LmNhLmdvdiwgeHh4eHh4QGRvdC5jYS5nb3YsIHh4eHh4eHh4eHh4eHh4eHhAZG90LmNhLmdvdiwgeHh4eHh4eHh4eHhAZG90LmNhLmdvdiwgeHh4eHh4eHh4eEBkb3QuY2EuZ292LCB4eHh4eHh4eHh4QGRvdC5jYS5nb3YsIHh4eHh4eHh4eHh4eEBkb3QuY2EuZ292LCB4eHh4eHh4eHh4eHhAZG90LmNhLmdvdiwgeHh4eHh4eEBkb3QuY2EuZ292LCB4eHh4eHh4eHhAZG90LmNhLmdvdiwgeHh4eHh4eHh4eEBkb3QuY2EuZ292LCB4eHh4eHhAZG90LmNhLmdvdiwgeHh4QGRvdC5jYS5nb3YsIHh4eHh4eHhAZG90LmNhLmdvdiwgeHh4eHh4eEBkb3QuY2EuZ292LCB4eHh4eHh4eHh4eHh4eHhAZG90LmNhLmdvdiwgeHh4eHh4eHh4eEBkb3QuY2EuZ292LCB4eHh4eHh4QGRvdC5jYS5nb3YsIHh4eEBkb3QuY2EuZ292LCB4eHh4eHh4eEBkb3QuY2EuZ292LCB4eHh4eHh4eHh4eHh4QGRvdC5jYS5nb3YsIHh4eHh4eHh4eHh4eHhAZG90LmNhLmdvdiwgeHh4eHh4eHh4eHhAZG90LmNhLmdvdiwgeHh4eHh4eHh4QGRvdC5jYS5nb3YsIHh4eHh4eHh4eHhAZG90LmNhLmdvdiwgeHh4eHh4eHh4eHh4QGRvdC5jYS5nb3YsIHh4eHh4eHhAZG90LmNhLmdvdiwgeHh4eHh4eHh4eHh4eHh4QGRvdC5jYS5nb3YsIHh4eHh4eHh4eHh4eHhAZG90LmNhLmdvdiwgeHh4eEBkb3QuY2EuZ292LCB4eHh4eHh4eEBkb3QuY2EuZ292LCB4eHh4eHh4eHh4QGRvdC5jYS5nb3YsIHh4eHh4eHh4eHh4eHh4eHh4eEBkb3QuY2EuZ292Cit3YXMgYmxvY2tlZCBieSBvdXIgU3BhbSBGaXJld2FsbC4gVGhlIGVtYWlsIHlvdSBzZW50IHdpdGggdGhlIGZvbGxvd2luZyBzdWJqZWN0IGhhcyBOT1QgQkVFTiBERUxJVkVSRUQ6CisKK1N1YmplY3Q6IERlbGl2ZXJ5X2ZhaWx1cmVfbm90aWNlCisKK0FuIGF0dGFjaG1lbnQgaW4gdGhhdCBtYWlsIHdhcyBvZiBhIGZpbGUgdHlwZSB0aGF0IHRoZSBTcGFtIEZpcmV3YWxsIGlzIHNldCB0byBibG9jay4KKworCisKKy0tLS0tLS0tLS0tLT1fMTEwMTUyNjkwNC0xOTU2LTUKK0NvbnRlbnQtVHlwZTogbWVzc2FnZS9kZWxpdmVyeS1zdGF0dXMKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorQ29udGVudC1EZXNjcmlwdGlvbjogRGVsaXZlcnkgZXJyb3IgcmVwb3J0CisKK1JlcG9ydGluZy1NVEE6IGRuczsgc2Fjc3BhbTAxLmRvdC5jYS5nb3YKK1JlY2VpdmVkLUZyb20tTVRBOiBzbXRwOyBzYWNzcGFtMDEuZG90LmNhLmdvdiAoWzEyNy4wLjAuMV0pCitBcnJpdmFsLURhdGU6IEZyaSwgMjYgTm92IDIwMDQgMTk6NDE6NDQgLTA4MDAgKFBTVCkKKworRmluYWwtUmVjaXBpZW50OiByZmM4MjI7IHh4eHh4eHhAZG90LmNhLmdvdgorQWN0aW9uOiBmYWlsZWQKK1N0YXR1czogNS43LjEKK0RpYWdub3N0aWMtQ29kZTogc210cDsgNTUwIDUuNy4xIE1lc3NhZ2UgY29udGVudCByZWplY3RlZCwgaWQ9MDE5NTYtMDItMiAtIEJBTk5FRDogYXV0b19fbWFpbC5weXRob24uYmF0CitMYXN0LUF0dGVtcHQtRGF0ZTogRnJpLCAyNiBOb3YgMjAwNCAxOTo0MTo0NCAtMDgwMCAoUFNUKQorCitGaW5hbC1SZWNpcGllbnQ6IHJmYzgyMjsgeHh4eHh4eHh4eHh4eEBkb3QuY2EuZ292CitBY3Rpb246IGZhaWxlZAorU3RhdHVzOiA1LjcuMQorRGlhZ25vc3RpYy1Db2RlOiBzbXRwOyA1NTAgNS43LjEgTWVzc2FnZSBjb250ZW50IHJlamVjdGVkLCBpZD0wMTk1Ni0wMi0yIC0gQkFOTkVEOiBhdXRvX19tYWlsLnB5dGhvbi5iYXQKK0xhc3QtQXR0ZW1wdC1EYXRlOiBGcmksIDI2IE5vdiAyMDA0IDE5OjQxOjQ0IC0wODAwIChQU1QpCisKK0ZpbmFsLVJlY2lwaWVudDogcmZjODIyOyB4eHh4eHh4eHh4QGRvdC5jYS5nb3YKK0FjdGlvbjogZmFpbGVkCitTdGF0dXM6IDUuNy4xCitEaWFnbm9zdGljLUNvZGU6IHNtdHA7IDU1MCA1LjcuMSBNZXNzYWdlIGNvbnRlbnQgcmVqZWN0ZWQsIGlkPTAxOTU2LTAyLTIgLSBCQU5ORUQ6IGF1dG9fX21haWwucHl0aG9uLmJhdAorTGFzdC1BdHRlbXB0LURhdGU6IEZyaSwgMjYgTm92IDIwMDQgMTk6NDE6NDQgLTA4MDAgKFBTVCkKKworRmluYWwtUmVjaXBpZW50OiByZmM4MjI7IHh4eHh4eHh4QGRvdC5jYS5nb3YKK0FjdGlvbjogZmFpbGVkCitTdGF0dXM6IDUuNy4xCitEaWFnbm9zdGljLUNvZGU6IHNtdHA7IDU1MCA1LjcuMSBNZXNzYWdlIGNvbnRlbnQgcmVqZWN0ZWQsIGlkPTAxOTU2LTAyLTIgLSBCQU5ORUQ6IGF1dG9fX21haWwucHl0aG9uLmJhdAorTGFzdC1BdHRlbXB0LURhdGU6IEZyaSwgMjYgTm92IDIwMDQgMTk6NDE6NDQgLTA4MDAgKFBTVCkKKworRmluYWwtUmVjaXBpZW50OiByZmM4MjI7IHh4eHh4eHh4eHhAZG90LmNhLmdvdgorQWN0aW9uOiBmYWlsZWQKK1N0YXR1czogNS43LjEKK0RpYWdub3N0aWMtQ29kZTogc210cDsgNTUwIDUuNy4xIE1lc3NhZ2UgY29udGVudCByZWplY3RlZCwgaWQ9MDE5NTYtMDItMiAtIEJBTk5FRDogYXV0b19fbWFpbC5weXRob24uYmF0CitMYXN0LUF0dGVtcHQtRGF0ZTogRnJpLCAyNiBOb3YgMjAwNCAxOTo0MTo0NCAtMDgwMCAoUFNUKQorCitGaW5hbC1SZWNpcGllbnQ6IHJmYzgyMjsgeHh4eHh4QGRvdC5jYS5nb3YKK0FjdGlvbjogZmFpbGVkCitTdGF0dXM6IDUuNy4xCitEaWFnbm9zdGljLUNvZGU6IHNtdHA7IDU1MCA1LjcuMSBNZXNzYWdlIGNvbnRlbnQgcmVqZWN0ZWQsIGlkPTAxOTU2LTAyLTIgLSBCQU5ORUQ6IGF1dG9fX21haWwucHl0aG9uLmJhdAorTGFzdC1BdHRlbXB0LURhdGU6IEZyaSwgMjYgTm92IDIwMDQgMTk6NDE6NDQgLTA4MDAgKFBTVCkKKworRmluYWwtUmVjaXBpZW50OiByZmM4MjI7IHh4eHh4eHh4eHhAZG90LmNhLmdvdgorQWN0aW9uOiBmYWlsZWQKK1N0YXR1czogNS43LjEKK0RpYWdub3N0aWMtQ29kZTogc210cDsgNTUwIDUuNy4xIE1lc3NhZ2UgY29udGVudCByZWplY3RlZCwgaWQ9MDE5NTYtMDItMiAtIEJBTk5FRDogYXV0b19fbWFpbC5weXRob24uYmF0CitMYXN0LUF0dGVtcHQtRGF0ZTogRnJpLCAyNiBOb3YgMjAwNCAxOTo0MTo0NCAtMDgwMCAoUFNUKQorCitGaW5hbC1SZWNpcGllbnQ6IHJmYzgyMjsgeHh4eHh4QGRvdC5jYS5nb3YKK0FjdGlvbjogZmFpbGVkCitTdGF0dXM6IDUuNy4xCitEaWFnbm9zdGljLUNvZGU6IHNtdHA7IDU1MCA1LjcuMSBNZXNzYWdlIGNvbnRlbnQgcmVqZWN0ZWQsIGlkPTAxOTU2LTAyLTIgLSBCQU5ORUQ6IGF1dG9fX21haWwucHl0aG9uLmJhdAorTGFzdC1BdHRlbXB0LURhdGU6IEZyaSwgMjYgTm92IDIwMDQgMTk6NDE6NDQgLTA4MDAgKFBTVCkKKworRmluYWwtUmVjaXBpZW50OiByZmM4MjI7IHh4eHh4eEBkb3QuY2EuZ292CitBY3Rpb246IGZhaWxlZAorU3RhdHVzOiA1LjcuMQorRGlhZ25vc3RpYy1Db2RlOiBzbXRwOyA1NTAgNS43LjEgTWVzc2FnZSBjb250ZW50IHJlamVjdGVkLCBpZD0wMTk1Ni0wMi0yIC0gQkFOTkVEOiBhdXRvX19tYWlsLnB5dGhvbi5iYXQKK0xhc3QtQXR0ZW1wdC1EYXRlOiBGcmksIDI2IE5vdiAyMDA0IDE5OjQxOjQ0IC0wODAwIChQU1QpCisKK0ZpbmFsLVJlY2lwaWVudDogcmZjODIyOyB4eHh4eHh4eHh4eHh4eHh4QGRvdC5jYS5nb3YKK0FjdGlvbjogZmFpbGVkCitTdGF0dXM6IDUuNy4xCitEaWFnbm9zdGljLUNvZGU6IHNtdHA7IDU1MCA1LjcuMSBNZXNzYWdlIGNvbnRlbnQgcmVqZWN0ZWQsIGlkPTAxOTU2LTAyLTIgLSBCQU5ORUQ6IGF1dG9fX21haWwucHl0aG9uLmJhdAorTGFzdC1BdHRlbXB0LURhdGU6IEZyaSwgMjYgTm92IDIwMDQgMTk6NDE6NDQgLTA4MDAgKFBTVCkKKworRmluYWwtUmVjaXBpZW50OiByZmM4MjI7IHh4eHh4eHh4eHh4QGRvdC5jYS5nb3YKK0FjdGlvbjogZmFpbGVkCitTdGF0dXM6IDUuNy4xCitEaWFnbm9zdGljLUNvZGU6IHNtdHA7IDU1MCA1LjcuMSBNZXNzYWdlIGNvbnRlbnQgcmVqZWN0ZWQsIGlkPTAxOTU2LTAyLTIgLSBCQU5ORUQ6IGF1dG9fX21haWwucHl0aG9uLmJhdAorTGFzdC1BdHRlbXB0LURhdGU6IEZyaSwgMjYgTm92IDIwMDQgMTk6NDE6NDQgLTA4MDAgKFBTVCkKKworRmluYWwtUmVjaXBpZW50OiByZmM4MjI7IHh4eHh4eHh4eHhAZG90LmNhLmdvdgorQWN0aW9uOiBmYWlsZWQKK1N0YXR1czogNS43LjEKK0RpYWdub3N0aWMtQ29kZTogc210cDsgNTUwIDUuNy4xIE1lc3NhZ2UgY29udGVudCByZWplY3RlZCwgaWQ9MDE5NTYtMDItMiAtIEJBTk5FRDogYXV0b19fbWFpbC5weXRob24uYmF0CitMYXN0LUF0dGVtcHQtRGF0ZTogRnJpLCAyNiBOb3YgMjAwNCAxOTo0MTo0NCAtMDgwMCAoUFNUKQorCitGaW5hbC1SZWNpcGllbnQ6IHJmYzgyMjsgeHh4eHh4eHh4eEBkb3QuY2EuZ292CitBY3Rpb246IGZhaWxlZAorU3RhdHVzOiA1LjcuMQorRGlhZ25vc3RpYy1Db2RlOiBzbXRwOyA1NTAgNS43LjEgTWVzc2FnZSBjb250ZW50IHJlamVjdGVkLCBpZD0wMTk1Ni0wMi0yIC0gQkFOTkVEOiBhdXRvX19tYWlsLnB5dGhvbi5iYXQKK0xhc3QtQXR0ZW1wdC1EYXRlOiBGcmksIDI2IE5vdiAyMDA0IDE5OjQxOjQ0IC0wODAwIChQU1QpCisKK0ZpbmFsLVJlY2lwaWVudDogcmZjODIyOyB4eHh4eHh4eHh4eHhAZG90LmNhLmdvdgorQWN0aW9uOiBmYWlsZWQKK1N0YXR1czogNS43LjEKK0RpYWdub3N0aWMtQ29kZTogc210cDsgNTUwIDUuNy4xIE1lc3NhZ2UgY29udGVudCByZWplY3RlZCwgaWQ9MDE5NTYtMDItMiAtIEJBTk5FRDogYXV0b19fbWFpbC5weXRob24uYmF0CitMYXN0LUF0dGVtcHQtRGF0ZTogRnJpLCAyNiBOb3YgMjAwNCAxOTo0MTo0NCAtMDgwMCAoUFNUKQorCitGaW5hbC1SZWNpcGllbnQ6IHJmYzgyMjsgeHh4eHh4eHh4eHh4QGRvdC5jYS5nb3YKK0FjdGlvbjogZmFpbGVkCitTdGF0dXM6IDUuNy4xCitEaWFnbm9zdGljLUNvZGU6IHNtdHA7IDU1MCA1LjcuMSBNZXNzYWdlIGNvbnRlbnQgcmVqZWN0ZWQsIGlkPTAxOTU2LTAyLTIgLSBCQU5ORUQ6IGF1dG9fX21haWwucHl0aG9uLmJhdAorTGFzdC1BdHRlbXB0LURhdGU6IEZyaSwgMjYgTm92IDIwMDQgMTk6NDE6NDQgLTA4MDAgKFBTVCkKKworRmluYWwtUmVjaXBpZW50OiByZmM4MjI7IHh4eHh4eHhAZG90LmNhLmdvdgorQWN0aW9uOiBmYWlsZWQKK1N0YXR1czogNS43LjEKK0RpYWdub3N0aWMtQ29kZTogc210cDsgNTUwIDUuNy4xIE1lc3NhZ2UgY29udGVudCByZWplY3RlZCwgaWQ9MDE5NTYtMDItMiAtIEJBTk5FRDogYXV0b19fbWFpbC5weXRob24uYmF0CitMYXN0LUF0dGVtcHQtRGF0ZTogRnJpLCAyNiBOb3YgMjAwNCAxOTo0MTo0NCAtMDgwMCAoUFNUKQorCitGaW5hbC1SZWNpcGllbnQ6IHJmYzgyMjsgeHh4eHh4eHh4QGRvdC5jYS5nb3YKK0FjdGlvbjogZmFpbGVkCitTdGF0dXM6IDUuNy4xCitEaWFnbm9zdGljLUNvZGU6IHNtdHA7IDU1MCA1LjcuMSBNZXNzYWdlIGNvbnRlbnQgcmVqZWN0ZWQsIGlkPTAxOTU2LTAyLTIgLSBCQU5ORUQ6IGF1dG9fX21haWwucHl0aG9uLmJhdAorTGFzdC1BdHRlbXB0LURhdGU6IEZyaSwgMjYgTm92IDIwMDQgMTk6NDE6NDQgLTA4MDAgKFBTVCkKKworRmluYWwtUmVjaXBpZW50OiByZmM4MjI7IHh4eHh4eHh4eHhAZG90LmNhLmdvdgorQWN0aW9uOiBmYWlsZWQKK1N0YXR1czogNS43LjEKK0RpYWdub3N0aWMtQ29kZTogc210cDsgNTUwIDUuNy4xIE1lc3NhZ2UgY29udGVudCByZWplY3RlZCwgaWQ9MDE5NTYtMDItMiAtIEJBTk5FRDogYXV0b19fbWFpbC5weXRob24uYmF0CitMYXN0LUF0dGVtcHQtRGF0ZTogRnJpLCAyNiBOb3YgMjAwNCAxOTo0MTo0NCAtMDgwMCAoUFNUKQorCitGaW5hbC1SZWNpcGllbnQ6IHJmYzgyMjsgeHh4eHh4QGRvdC5jYS5nb3YKK0FjdGlvbjogZmFpbGVkCitTdGF0dXM6IDUuNy4xCitEaWFnbm9zdGljLUNvZGU6IHNtdHA7IDU1MCA1LjcuMSBNZXNzYWdlIGNvbnRlbnQgcmVqZWN0ZWQsIGlkPTAxOTU2LTAyLTIgLSBCQU5ORUQ6IGF1dG9fX21haWwucHl0aG9uLmJhdAorTGFzdC1BdHRlbXB0LURhdGU6IEZyaSwgMjYgTm92IDIwMDQgMTk6NDE6NDQgLTA4MDAgKFBTVCkKKworRmluYWwtUmVjaXBpZW50OiByZmM4MjI7IHh4eEBkb3QuY2EuZ292CitBY3Rpb246IGZhaWxlZAorU3RhdHVzOiA1LjcuMQorRGlhZ25vc3RpYy1Db2RlOiBzbXRwOyA1NTAgNS43LjEgTWVzc2FnZSBjb250ZW50IHJlamVjdGVkLCBpZD0wMTk1Ni0wMi0yIC0gQkFOTkVEOiBhdXRvX19tYWlsLnB5dGhvbi5iYXQKK0xhc3QtQXR0ZW1wdC1EYXRlOiBGcmksIDI2IE5vdiAyMDA0IDE5OjQxOjQ0IC0wODAwIChQU1QpCisKK0ZpbmFsLVJlY2lwaWVudDogcmZjODIyOyB4eHh4eHh4QGRvdC5jYS5nb3YKK0FjdGlvbjogZmFpbGVkCitTdGF0dXM6IDUuNy4xCitEaWFnbm9zdGljLUNvZGU6IHNtdHA7IDU1MCA1LjcuMSBNZXNzYWdlIGNvbnRlbnQgcmVqZWN0ZWQsIGlkPTAxOTU2LTAyLTIgLSBCQU5ORUQ6IGF1dG9fX21haWwucHl0aG9uLmJhdAorTGFzdC1BdHRlbXB0LURhdGU6IEZyaSwgMjYgTm92IDIwMDQgMTk6NDE6NDQgLTA4MDAgKFBTVCkKKworRmluYWwtUmVjaXBpZW50OiByZmM4MjI7IHh4eHh4eHhAZG90LmNhLmdvdgorQWN0aW9uOiBmYWlsZWQKK1N0YXR1czogNS43LjEKK0RpYWdub3N0aWMtQ29kZTogc210cDsgNTUwIDUuNy4xIE1lc3NhZ2UgY29udGVudCByZWplY3RlZCwgaWQ9MDE5NTYtMDItMiAtIEJBTk5FRDogYXV0b19fbWFpbC5weXRob24uYmF0CitMYXN0LUF0dGVtcHQtRGF0ZTogRnJpLCAyNiBOb3YgMjAwNCAxOTo0MTo0NCAtMDgwMCAoUFNUKQorCitGaW5hbC1SZWNpcGllbnQ6IHJmYzgyMjsgeHh4eHh4eHh4eHh4eHh4QGRvdC5jYS5nb3YKK0FjdGlvbjogZmFpbGVkCitTdGF0dXM6IDUuNy4xCitEaWFnbm9zdGljLUNvZGU6IHNtdHA7IDU1MCA1LjcuMSBNZXNzYWdlIGNvbnRlbnQgcmVqZWN0ZWQsIGlkPTAxOTU2LTAyLTIgLSBCQU5ORUQ6IGF1dG9fX21haWwucHl0aG9uLmJhdAorTGFzdC1BdHRlbXB0LURhdGU6IEZyaSwgMjYgTm92IDIwMDQgMTk6NDE6NDQgLTA4MDAgKFBTVCkKKworRmluYWwtUmVjaXBpZW50OiByZmM4MjI7IHh4eHh4eHh4eHhAZG90LmNhLmdvdgorQWN0aW9uOiBmYWlsZWQKK1N0YXR1czogNS43LjEKK0RpYWdub3N0aWMtQ29kZTogc210cDsgNTUwIDUuNy4xIE1lc3NhZ2UgY29udGVudCByZWplY3RlZCwgaWQ9MDE5NTYtMDItMiAtIEJBTk5FRDogYXV0b19fbWFpbC5weXRob24uYmF0CitMYXN0LUF0dGVtcHQtRGF0ZTogRnJpLCAyNiBOb3YgMjAwNCAxOTo0MTo0NCAtMDgwMCAoUFNUKQorCitGaW5hbC1SZWNpcGllbnQ6IHJmYzgyMjsgeHh4eHh4eEBkb3QuY2EuZ292CitBY3Rpb246IGZhaWxlZAorU3RhdHVzOiA1LjcuMQorRGlhZ25vc3RpYy1Db2RlOiBzbXRwOyA1NTAgNS43LjEgTWVzc2FnZSBjb250ZW50IHJlamVjdGVkLCBpZD0wMTk1Ni0wMi0yIC0gQkFOTkVEOiBhdXRvX19tYWlsLnB5dGhvbi5iYXQKK0xhc3QtQXR0ZW1wdC1EYXRlOiBGcmksIDI2IE5vdiAyMDA0IDE5OjQxOjQ0IC0wODAwIChQU1QpCisKKy0tLS0tLS0tLS0tLT1fMTEwMTUyNjkwNC0xOTU2LTUKK0NvbnRlbnQtVHlwZTogdGV4dC9yZmM4MjItaGVhZGVycworQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitDb250ZW50LURlc2NyaXB0aW9uOiBVbmRlbGl2ZXJlZC1tZXNzYWdlIGhlYWRlcnMKKworUmVjZWl2ZWQ6IGZyb20ga2dzYXYub3JnIChwcHAtNzAtMjQyLTE2Mi02My5kc2wuc3BmZG1vLnN3YmVsbC5uZXQgWzcwLjI0Mi4xNjIuNjNdKQorCWJ5IHNhY3NwYW0wMS5kb3QuY2EuZ292IChTcGFtIEZpcmV3YWxsKSB3aXRoIFNNVFAKKwlpZCBBMjMyQUQwM0RFM0E7IEZyaSwgMjYgTm92IDIwMDQgMTk6NDE6MzUgLTA4MDAgKFBTVCkKK0Zyb206IHdlYm1hc3RlckBweXRob24ub3JnCitUbzogeHh4eHhAZG90LmNhLmdvdgorRGF0ZTogU2F0LCAyNyBOb3YgMjAwNCAwMzozNTozMCBVVEMKK1N1YmplY3Q6IERlbGl2ZXJ5X2ZhaWx1cmVfbm90aWNlCitJbXBvcnRhbmNlOiBOb3JtYWwKK1gtUHJpb3JpdHk6IDMgKE5vcm1hbCkKK1gtTVNNYWlsLVByaW9yaXR5OiBOb3JtYWwKK01lc3NhZ2UtSUQ6IDxlZGFiLjc4MDRmNWNiODA3MEBweXRob24ub3JnPgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09PTY3YmQyYjdhNS5mOTlmNyIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworLS0tLS0tLS0tLS0tPV8xMTAxNTI2OTA0LTE5NTYtNS0tCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ180NC50eHQgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfNDQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YTIyNTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfNDQudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1JldHVybi1QYXRoOiA8YmFycnlAcHl0aG9uLm9yZz4KK0RlbGl2ZXJlZC1UbzogYmFycnlAcHl0aG9uLm9yZworUmVjZWl2ZWQ6IGJ5IG1haWwucHl0aG9uLm9yZyAoUG9zdGZpeCwgZnJvbSB1c2VyaWQgODg5KQorCWlkIEMyQkYwRDM3QzY7IFR1ZSwgMTEgU2VwIDIwMDEgMDA6MDU6MDUgLTA0MDAgKEVEVCkKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Img5MFZJSUlLbXgiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitNZXNzYWdlLUlEOiA8MTUyNjEuMzYyMDkuMzU4ODQ2LjExODY3NEBhbnRoZW0ucHl0aG9uLm9yZz4KK0Zyb206IGJhcnJ5QHB5dGhvbi5vcmcgKEJhcnJ5IEEuIFdhcnNhdykKK1RvOiBiYXJyeUBweXRob24ub3JnCitTdWJqZWN0OiBhIHNpbXBsZSBtdWx0aXBhcnQKK0RhdGU6IFR1ZSwgMTEgU2VwIDIwMDEgMDA6MDU6MDUgLTA0MDAKK1gtTWFpbGVyOiBWTSA2Ljk1IHVuZGVyIDIxLjQgKHBhdGNoIDQpICJBcnRpZmljaWFsIEludGVsbGlnZW5jZSIgWEVtYWNzIEx1Y2lkCitYLUF0dHJpYnV0aW9uOiBCQVcKK1gtT2JsaXF1ZS1TdHJhdGVneTogTWFrZSBhIGRvb3IgaW50byBhIHdpbmRvdworCisKKy0taDkwVklJSUtteAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBuYW1lPSJtc2cudHh0IgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCithIHNpbXBsZSBraW5kIG9mIG1pcnJvcgordG8gcmVmbGVjdCB1cG9uIG91ciBvd24KKworLS1oOTBWSUlJS214CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IG5hbWU9Im1zZy50eHQiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKK2Egc2ltcGxlIGtpbmQgb2YgbWlycm9yCit0byByZWZsZWN0IHVwb24gb3VyIG93bgorCistLWg5MFZJSUlLbXgtLQorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfNDUudHh0IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzQ1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGZkZTk1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L2RhdGEvbXNnXzQ1LnR4dApAQCAtMCwwICsxLDMzIEBACitGcm9tOiA8Zm9vQGJhci5iYXo+CitUbzogPGJhekBiYXIuZm9vPgorU3ViamVjdDogdGVzdAorWC1Mb25nLUxpbmU6IFNvbWUgcmVhbGx5IGxvbmcgbGluZSBjb250YWlucyBhIGxvdCBvZiB0ZXh0IGFuZCB0aHVzIGhhcyB0byBiZSByZXdyYXBwZWQgYmVjYXVzZSBpdCBpcyBzb21lCisJcmVhbGx5IGxvbmcKKyAgICAgICAgbGluZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3NpZ25lZDsgYm91bmRhcnk9ImJvcmRlcmxpbmUiOworCXByb3RvY29sPSJhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlIjsgbWljYWxnPXBncC1zaGExCisKK1RoaXMgaXMgYW4gT3BlblBHUC9NSU1FIHNpZ25lZCBtZXNzYWdlIChSRkMgMjQ0MCBhbmQgMzE1NikKKy0tYm9yZGVybGluZQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCitYLUxvbmctTGluZTogQW5vdGhlciByZWFsbHkgbG9uZyBsaW5lIGNvbnRhaW5zIGEgbG90IG9mIHRleHQgYW5kIHRodXMgaGFzIHRvIGJlIHJld3JhcHBlZCBiZWNhdXNlIGl0IGlzIGFub3RoZXIKKwlyZWFsbHkgbG9uZworICAgICAgICBsaW5lCisKK1RoaXMgaXMgdGhlIHNpZ25lZCBjb250ZW50cy4KKworLS1ib3JkZXJsaW5lCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3BncC1zaWduYXR1cmU7IG5hbWU9InNpZ25hdHVyZS5hc2MiCitDb250ZW50LURlc2NyaXB0aW9uOiBPcGVuUEdQIGRpZ2l0YWwgc2lnbmF0dXJlCitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0ic2lnbmF0dXJlLmFzYyIKKworLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KK1ZlcnNpb246IEdudVBHIHYyLjAuNiAoR05VL0xpbnV4KQorCitpRDhEQlFGRzAzdm9SaHA2bzRtOWRGc1JBcFNaQUtDQ0FOM0lrSmxWUmc2TnZBaU1IbHZ2SXVNR1BRQ2VMWnRqCitGR3dmblJIRkJGTy9TNC9ES3lzbTBsST0KKz10NytzCistLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0KKworLS1ib3JkZXJsaW5lLS0KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC9kYXRhL21zZ180Ni50eHQgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfNDYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMjJjNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvZGF0YS9tc2dfNDYudHh0CkBAIC0wLDAgKzEsMjMgQEAKK1JldHVybi1QYXRoOiA8c2VuZGVyQGV4YW1wbGUubmV0PgorRGVsaXZlcnktRGF0ZTogTW9uLCAwOCBGZWIgMjAxMCAxNDowNToxNiArMDEwMAorUmVjZWl2ZWQ6IGZyb20gZXhhbXBsZS5vcmcgKGV4YW1wbGUub3JnIFs2NC41LjUzLjU4XSkKKyAgICBieSBleGFtcGxlLm5ldCAobm9kZT1teGJhcDIpIHdpdGggRVNNVFAgKE5lbWVzaXMpCisgICAgaWQgVU5JUVVFIGZvciBzb21lb25lQGV4YW1wbGUuY29tOyBNb24sIDA4IEZlYiAyMDEwIDE0OjA1OjE2ICswMTAwCitEYXRlOiBNb24sIDAxIEZlYiAyMDEwIDEyOjIxOjE2ICswMTAwCitGcm9tOiAiU2VuZGVyIiA8c2VuZGVyQGV4YW1wbGUubmV0PgorVG86IDxzb21lb25lQGV4YW1wbGUuY29tPgorU3ViamVjdDogR3JvdXB3aXNlRm9yd2FyZGluZ1Rlc3QKK01pbWUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG1lc3NhZ2UvcmZjODIyCisKK1JldHVybi1wYXRoOiA8c2VuZGVyQGV4YW1wbGUubmV0PgorTWVzc2FnZS1JRDogPDRCNjZCODkwLjQwNzA0MDhAdGVjb25jZXB0LmRlPgorRGF0ZTogTW9uLCAwMSBGZWIgMjAxMCAxMjoxODo0MCArMDEwMAorRnJvbTogIkRyLiBTZW5kZXIiIDxzZW5kZXJAZXhhbXBsZS5uZXQ+CitNSU1FLVZlcnNpb246IDEuMAorVG86ICJSZWNpcGllbnQiIDxyZWNpcGllbnRAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBHcm91cHdpc2VGb3J3YXJkaW5nVGVzdAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTE1CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKK1Rlc3RpbmcgZW1haWwgZm9yd2FyZGluZyB3aXRoIEdyb3Vwd2lzZSAxLjIuMjAxMApkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L3Rlc3RfZW1haWwucHkgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvdGVzdF9lbWFpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzJkYTlkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L3Rlc3RfZW1haWwucHkKQEAgLTAsMCArMSwzNTU4IEBACisjIENvcHlyaWdodCAoQykgMjAwMS0yMDEwIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIENvbnRhY3Q6IGVtYWlsLXNpZ0BweXRob24ub3JnCisjIGVtYWlsIHBhY2thZ2UgdW5pdCB0ZXN0cworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgYmFzZTY0CitpbXBvcnQgZGlmZmxpYgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCB0ZXh0d3JhcAorZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKK2ltcG9ydCBlbWFpbAorCitmcm9tIGVtYWlsLkNoYXJzZXQgaW1wb3J0IENoYXJzZXQKK2Zyb20gZW1haWwuSGVhZGVyIGltcG9ydCBIZWFkZXIsIGRlY29kZV9oZWFkZXIsIG1ha2VfaGVhZGVyCitmcm9tIGVtYWlsLlBhcnNlciBpbXBvcnQgUGFyc2VyLCBIZWFkZXJQYXJzZXIKK2Zyb20gZW1haWwuR2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIERlY29kZWRHZW5lcmF0b3IKK2Zyb20gZW1haWwuTWVzc2FnZSBpbXBvcnQgTWVzc2FnZQorZnJvbSBlbWFpbC5NSU1FQXVkaW8gaW1wb3J0IE1JTUVBdWRpbworZnJvbSBlbWFpbC5NSU1FVGV4dCBpbXBvcnQgTUlNRVRleHQKK2Zyb20gZW1haWwuTUlNRUltYWdlIGltcG9ydCBNSU1FSW1hZ2UKK2Zyb20gZW1haWwuTUlNRUJhc2UgaW1wb3J0IE1JTUVCYXNlCitmcm9tIGVtYWlsLk1JTUVNZXNzYWdlIGltcG9ydCBNSU1FTWVzc2FnZQorZnJvbSBlbWFpbC5NSU1FTXVsdGlwYXJ0IGltcG9ydCBNSU1FTXVsdGlwYXJ0Citmcm9tIGVtYWlsIGltcG9ydCBVdGlscworZnJvbSBlbWFpbCBpbXBvcnQgRXJyb3JzCitmcm9tIGVtYWlsIGltcG9ydCBFbmNvZGVycworZnJvbSBlbWFpbCBpbXBvcnQgSXRlcmF0b3JzCitmcm9tIGVtYWlsIGltcG9ydCBiYXNlNjRNSU1FCitmcm9tIGVtYWlsIGltcG9ydCBxdW9wcmlNSU1FCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGZpbmRmaWxlLCBydW5fdW5pdHRlc3QKK2Zyb20gZW1haWwudGVzdCBpbXBvcnQgX19maWxlX18gYXMgbGFuZG1hcmsKKworCitOTCA9ICdcbicKK0VNUFRZU1RSSU5HID0gJycKK1NQQUNFID0gJyAnCisKKworCitkZWYgb3BlbmZpbGUoZmlsZW5hbWUsIG1vZGU9J3InKToKKyAgICBwYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShsYW5kbWFyayksICdkYXRhJywgZmlsZW5hbWUpCisgICAgcmV0dXJuIG9wZW4ocGF0aCwgbW9kZSkKKworCisKKyMgQmFzZSB0ZXN0IGNsYXNzCitjbGFzcyBUZXN0RW1haWxCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgbmRpZmZBc3NlcnRFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kKToKKyAgICAgICAgIiIiTGlrZSBhc3NlcnRFcXVhbCBleGNlcHQgdXNlIG5kaWZmIGZvciByZWFkYWJsZSBvdXRwdXQuIiIiCisgICAgICAgIGlmIGZpcnN0ICE9IHNlY29uZDoKKyAgICAgICAgICAgIHNmaXJzdCA9IHN0cihmaXJzdCkKKyAgICAgICAgICAgIHNzZWNvbmQgPSBzdHIoc2Vjb25kKQorICAgICAgICAgICAgZGlmZiA9IGRpZmZsaWIubmRpZmYoc2ZpcnN0LnNwbGl0bGluZXMoKSwgc3NlY29uZC5zcGxpdGxpbmVzKCkpCisgICAgICAgICAgICBmcCA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHByaW50ID4+IGZwLCBOTCwgTkwuam9pbihkaWZmKQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBmcC5nZXR2YWx1ZSgpCisKKyAgICBkZWYgX21zZ29iaihzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGZwID0gb3BlbmZpbGUoZmluZGZpbGUoZmlsZW5hbWUpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fZmlsZShmcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIG1zZworCisKKworIyBUZXN0IHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgTWVzc2FnZSBjbGFzcydzIEFQSQorY2xhc3MgVGVzdE1lc3NhZ2VBUEkoVGVzdEVtYWlsQmFzZSk6CisgICAgZGVmIHRlc3RfZ2V0X2FsbChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzIwLnR4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfYWxsKCdjYycpLCBbJ2NjY0B6enoub3JnJywgJ2RkZEB6enoub3JnJywgJ2VlZUB6enoub3JnJ10pCisgICAgICAgIGVxKG1zZy5nZXRfYWxsKCd4eCcsICduL2EnKSwgJ24vYScpCisKKyAgICBkZWYgdGVzdF9nZXRzZXRfY2hhcnNldChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBlcShtc2cuZ2V0X2NoYXJzZXQoKSwgTm9uZSkKKyAgICAgICAgY2hhcnNldCA9IENoYXJzZXQoJ2lzby04ODU5LTEnKQorICAgICAgICBtc2cuc2V0X2NoYXJzZXQoY2hhcnNldCkKKyAgICAgICAgZXEobXNnWydtaW1lLXZlcnNpb24nXSwgJzEuMCcpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgZXEobXNnWydjb250ZW50LXR5cGUnXSwgJ3RleHQvcGxhaW47IGNoYXJzZXQ9Imlzby04ODU5LTEiJykKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbSgnY2hhcnNldCcpLCAnaXNvLTg4NTktMScpCisgICAgICAgIGVxKG1zZ1snY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddLCAncXVvdGVkLXByaW50YWJsZScpCisgICAgICAgIGVxKG1zZy5nZXRfY2hhcnNldCgpLmlucHV0X2NoYXJzZXQsICdpc28tODg1OS0xJykKKyAgICAgICAgIyBSZW1vdmUgdGhlIGNoYXJzZXQKKyAgICAgICAgbXNnLnNldF9jaGFyc2V0KE5vbmUpCisgICAgICAgIGVxKG1zZy5nZXRfY2hhcnNldCgpLCBOb25lKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHlwZSddLCAndGV4dC9wbGFpbicpCisgICAgICAgICMgVHJ5IGFkZGluZyBhIGNoYXJzZXQgd2hlbiB0aGVyZSdzIGFscmVhZHkgTUlNRSBoZWFkZXJzIHByZXNlbnQKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snTUlNRS1WZXJzaW9uJ10gPSAnMi4wJworICAgICAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQveC13ZWlyZCcKKyAgICAgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSAncXVpbnRlZC1wdW50YWJsZScKKyAgICAgICAgbXNnLnNldF9jaGFyc2V0KGNoYXJzZXQpCisgICAgICAgIGVxKG1zZ1snbWltZS12ZXJzaW9uJ10sICcyLjAnKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHlwZSddLCAndGV4dC94LXdlaXJkOyBjaGFyc2V0PSJpc28tODg1OS0xIicpCisgICAgICAgIGVxKG1zZ1snY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddLCAncXVpbnRlZC1wdW50YWJsZScpCisKKyAgICBkZWYgdGVzdF9zZXRfY2hhcnNldF9mcm9tX3N0cmluZyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2cuc2V0X2NoYXJzZXQoJ3VzLWFzY2lpJykKKyAgICAgICAgZXEobXNnLmdldF9jaGFyc2V0KCkuaW5wdXRfY2hhcnNldCwgJ3VzLWFzY2lpJykKKyAgICAgICAgZXEobXNnWydjb250ZW50LXR5cGUnXSwgJ3RleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIicpCisKKyAgICBkZWYgdGVzdF9zZXRfcGF5bG9hZF93aXRoX2NoYXJzZXQoc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBjaGFyc2V0ID0gQ2hhcnNldCgnaXNvLTg4NTktMScpCisgICAgICAgIG1zZy5zZXRfcGF5bG9hZCgnVGhpcyBpcyBhIHN0cmluZyBwYXlsb2FkJywgY2hhcnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NoYXJzZXQoKS5pbnB1dF9jaGFyc2V0LCAnaXNvLTg4NTktMScpCisKKyAgICBkZWYgdGVzdF9nZXRfY2hhcnNldHMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzA4LnR4dCcpCisgICAgICAgIGNoYXJzZXRzID0gbXNnLmdldF9jaGFyc2V0cygpCisgICAgICAgIGVxKGNoYXJzZXRzLCBbTm9uZSwgJ3VzLWFzY2lpJywgJ2lzby04ODU5LTEnLCAnaXNvLTg4NTktMicsICdrb2k4LXInXSkKKworICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wOS50eHQnKQorICAgICAgICBjaGFyc2V0cyA9IG1zZy5nZXRfY2hhcnNldHMoJ2RpbmdiYXQnKQorICAgICAgICBlcShjaGFyc2V0cywgWydkaW5nYmF0JywgJ3VzLWFzY2lpJywgJ2lzby04ODU5LTEnLCAnZGluZ2JhdCcsCisgICAgICAgICAgICAgICAgICAgICAgJ2tvaTgtciddKQorCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzEyLnR4dCcpCisgICAgICAgIGNoYXJzZXRzID0gbXNnLmdldF9jaGFyc2V0cygpCisgICAgICAgIGVxKGNoYXJzZXRzLCBbTm9uZSwgJ3VzLWFzY2lpJywgJ2lzby04ODU5LTEnLCBOb25lLCAnaXNvLTg4NTktMicsCisgICAgICAgICAgICAgICAgICAgICAgJ2lzby04ODU5LTMnLCAndXMtYXNjaWknLCAna29pOC1yJ10pCisKKyAgICBkZWYgdGVzdF9nZXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzA0LnR4dCcpCisgICAgICAgIGZpbGVuYW1lcyA9IFtwLmdldF9maWxlbmFtZSgpIGZvciBwIGluIG1zZy5nZXRfcGF5bG9hZCgpXQorICAgICAgICBlcShmaWxlbmFtZXMsIFsnbXNnLnR4dCcsICdtc2cudHh0J10pCisKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDcudHh0JykKKyAgICAgICAgc3VicGFydCA9IG1zZy5nZXRfcGF5bG9hZCgxKQorICAgICAgICBlcShzdWJwYXJ0LmdldF9maWxlbmFtZSgpLCAnZGluZ3VzZmlzaC5naWYnKQorCisgICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lX3dpdGhfbmFtZV9wYXJhbWV0ZXIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzQ0LnR4dCcpCisgICAgICAgIGZpbGVuYW1lcyA9IFtwLmdldF9maWxlbmFtZSgpIGZvciBwIGluIG1zZy5nZXRfcGF5bG9hZCgpXQorICAgICAgICBlcShmaWxlbmFtZXMsIFsnbXNnLnR4dCcsICdtc2cudHh0J10pCisKKyAgICBkZWYgdGVzdF9nZXRfYm91bmRhcnkoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wNy50eHQnKQorICAgICAgICAjIE5vIHF1b3RlcyEKKyAgICAgICAgZXEobXNnLmdldF9ib3VuZGFyeSgpLCAnQk9VTkRBUlknKQorCisgICAgZGVmIHRlc3Rfc2V0X2JvdW5kYXJ5KHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgIyBUaGlzIG9uZSBoYXMgbm8gZXhpc3RpbmcgYm91bmRhcnkgcGFyYW1ldGVyLCBidXQgdGhlIENvbnRlbnQtVHlwZToKKyAgICAgICAgIyBoZWFkZXIgYXBwZWFycyBmaWZ0aC4KKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgbXNnLnNldF9ib3VuZGFyeSgnQk9VTkRBUlknKQorICAgICAgICBoZWFkZXIsIHZhbHVlID0gbXNnLml0ZW1zKClbNF0KKyAgICAgICAgZXEoaGVhZGVyLmxvd2VyKCksICdjb250ZW50LXR5cGUnKQorICAgICAgICBlcSh2YWx1ZSwgJ3RleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIjsgYm91bmRhcnk9IkJPVU5EQVJZIicpCisgICAgICAgICMgVGhpcyBvbmUgaGFzIGEgQ29udGVudC1UeXBlOiBoZWFkZXIsIHdpdGggYSBib3VuZGFyeSwgc3R1Y2sgaW4gdGhlCisgICAgICAgICMgbWlkZGxlIG9mIGl0cyBoZWFkZXJzLiAgTWFrZSBzdXJlIHRoZSBvcmRlciBpcyBwcmVzZXJ2ZWQ7IGl0IHNob3VsZAorICAgICAgICAjIGJlIGZpZnRoLgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wNC50eHQnKQorICAgICAgICBtc2cuc2V0X2JvdW5kYXJ5KCdCT1VOREFSWScpCisgICAgICAgIGhlYWRlciwgdmFsdWUgPSBtc2cuaXRlbXMoKVs0XQorICAgICAgICBlcShoZWFkZXIubG93ZXIoKSwgJ2NvbnRlbnQtdHlwZScpCisgICAgICAgIGVxKHZhbHVlLCAnbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iQk9VTkRBUlkiJykKKyAgICAgICAgIyBBbmQgdGhpcyBvbmUgaGFzIG5vIENvbnRlbnQtVHlwZTogaGVhZGVyIGF0IGFsbC4KKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDMudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXJyb3JzLkhlYWRlclBhcnNlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5zZXRfYm91bmRhcnksICdCT1VOREFSWScpCisKKyAgICBkZWYgdGVzdF9tYWtlX2JvdW5kYXJ5KHNlbGYpOgorICAgICAgICBtc2cgPSBNSU1FTXVsdGlwYXJ0KCdmb3JtLWRhdGEnKQorICAgICAgICAjIE5vdGUgdGhhdCB3aGVuIHRoZSBib3VuZGFyeSBnZXRzIGNyZWF0ZWQgaXMgYW4gaW1wbGVtZW50YXRpb24KKyAgICAgICAgIyBkZXRhaWwgYW5kIG1pZ2h0IGNoYW5nZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuaXRlbXMoKVswXVsxXSwgJ211bHRpcGFydC9mb3JtLWRhdGEnKQorICAgICAgICAjIFRyaWdnZXIgY3JlYXRpb24gb2YgYm91bmRhcnkKKyAgICAgICAgbXNnLmFzX3N0cmluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLml0ZW1zKClbMF1bMV1bOjMzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iPT0nKQorICAgICAgICAjIFhYWDogdGhlcmUgb3VnaHQgdG8gYmUgdGVzdHMgb2YgdGhlIHVuaXF1ZW5lc3Mgb2YgdGhlIGJvdW5kYXJ5LCB0b28uCisKKyAgICBkZWYgdGVzdF9tZXNzYWdlX3JmYzgyMl9vbmx5KHNlbGYpOgorICAgICAgICAjIElzc3VlIDc5NzA6IG1lc3NhZ2UvcmZjODIyIG5vdCBpbiBtdWx0aXBhcnQgcGFyc2VkIGJ5CisgICAgICAgICMgSGVhZGVyUGFyc2VyIGNhdXNlZCBhbiBleGNlcHRpb24gd2hlbiBmbGF0dGVuZWQuCisgICAgICAgIGZwID0gb3BlbmZpbGUoZmluZGZpbGUoJ21zZ180Ni50eHQnKSkKKyAgICAgICAgbXNnZGF0YSA9IGZwLnJlYWQoKQorICAgICAgICBwYXJzZXIgPSBlbWFpbC5QYXJzZXIuSGVhZGVyUGFyc2VyKCkKKyAgICAgICAgbXNnID0gcGFyc2VyLnBhcnNlc3RyKG1zZ2RhdGEpCisgICAgICAgIG91dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgZ2VuID0gZW1haWwuR2VuZXJhdG9yLkdlbmVyYXRvcihvdXQsIFRydWUsIDApCisgICAgICAgIGdlbi5mbGF0dGVuKG1zZywgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmdldHZhbHVlKCksIG1zZ2RhdGEpCisKKyAgICBkZWYgdGVzdF9nZXRfZGVjb2RlZF9wYXlsb2FkKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMTAudHh0JykKKyAgICAgICAgIyBUaGUgb3V0ZXIgbWVzc2FnZSBpcyBhIG11bHRpcGFydAorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBOb25lKQorICAgICAgICAjIFN1YnBhcnQgMSBpcyA3Yml0IGVuY29kZWQKKyAgICAgICAgZXEobXNnLmdldF9wYXlsb2FkKDApLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwKKyAgICAgICAgICAgJ1RoaXMgaXMgYSA3Yml0IGVuY29kZWQgbWVzc2FnZS5cbicpCisgICAgICAgICMgU3VicGFydCAyIGlzIHF1b3ByaQorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoMSkuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLAorICAgICAgICAgICAnXHhhMVRoaXMgaXMgYSBRdW90ZWQgUHJpbnRhYmxlIGVuY29kZWQgbWVzc2FnZSFcbicpCisgICAgICAgICMgU3VicGFydCAzIGlzIGJhc2U2NAorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoMikuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLAorICAgICAgICAgICAnVGhpcyBpcyBhIEJhc2U2NCBlbmNvZGVkIG1lc3NhZ2UuJykKKyAgICAgICAgIyBTdWJwYXJ0IDQgaXMgYmFzZTY0IHdpdGggYSB0cmFpbGluZyBuZXdsaW5lLCB3aGljaAorICAgICAgICAjIHVzZWQgdG8gYmUgc3RyaXBwZWQgKGlzc3VlIDcxNDMpLgorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoMykuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLAorICAgICAgICAgICAnVGhpcyBpcyBhIEJhc2U2NCBlbmNvZGVkIG1lc3NhZ2UuXG4nKQorICAgICAgICAjIFN1YnBhcnQgNSBoYXMgbm8gQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogaGVhZGVyLgorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoNCkuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLAorICAgICAgICAgICAnVGhpcyBoYXMgbm8gQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogaGVhZGVyLlxuJykKKworICAgIGRlZiB0ZXN0X2dldF9kZWNvZGVkX3V1X3BheWxvYWQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLnNldF9wYXlsb2FkKCdiZWdpbiA2NjYgLVxuKzomNUw7JlxcQD1WXVI7JjAgXG4gXG5lbmRcbicpCisgICAgICAgIGZvciBjdGUgaW4gKCd4LXV1ZW5jb2RlJywgJ3V1ZW5jb2RlJywgJ3V1ZScsICd4LXV1ZScpOgorICAgICAgICAgICAgbXNnWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ10gPSBjdGUKKyAgICAgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksICdoZWxsbyB3b3JsZCcpCisgICAgICAgICMgTm93IHRyeSBzb21lIGJvZ3VzIGRhdGEKKyAgICAgICAgbXNnLnNldF9wYXlsb2FkKCdmb28nKQorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCAnZm9vJykKKworICAgIGRlZiB0ZXN0X2RlY29kZV9ib2d1c191dV9wYXlsb2FkX3F1aWV0bHkoc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2cuc2V0X3BheWxvYWQoJ2JlZ2luIDY2NCBmb28udHh0XG4lPFcxRj0wMDAwSCBcbiBcbmVuZFxuJykKKyAgICAgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSAneC11dWVuY29kZScKKyAgICAgICAgb2xkX3N0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHNmcCA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgICMgV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgcGF5bG9hZAorICAgICAgICAgICAgbXNnLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnN0ZGVyciA9IG9sZF9zdGRlcnIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZnAuZ2V0dmFsdWUoKSwgJycpCisKKyAgICBkZWYgdGVzdF9kZWNvZGVkX2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzA3LnR4dCcpCisgICAgICAgIGZwID0gb3BlbmZpbGUoJ21zZ18xNy50eHQnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHMgPSBTdHJpbmdJTygpCisgICAgICAgIGcgPSBEZWNvZGVkR2VuZXJhdG9yKHMpCisgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgIGVxKHMuZ2V0dmFsdWUoKSwgdGV4dCkKKworICAgIGRlZiB0ZXN0X19jb250YWluc19fKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnWydGcm9tJ10gPSAnTWUnCisgICAgICAgIG1zZ1sndG8nXSA9ICdZb3UnCisgICAgICAgICMgQ2hlY2sgZm9yIGNhc2UgaW5zZW5zaXRpdml0eQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2Zyb20nIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdGcm9tJyBpbiBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRlJPTScgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3RvJyBpbiBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnVG8nIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdUTycgaW4gbXNnKQorCisgICAgZGVmIHRlc3RfYXNfc3RyaW5nKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgZnAgPSBvcGVuZmlsZSgnbXNnXzAxLnR4dCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgQkFXIDMwLU1hci0yMDA5IEV2aWwgYmUgaGVyZS4gIFNvLCB0aGUgZ2VuZXJhdG9yIGlzIGJyb2tlbiB3aXRoCisgICAgICAgICAgICAjIHJlc3BlY3QgdG8gbG9uZyBsaW5lIGJyZWFraW5nLiAgSXQncyBhbHNvIG5vdCBpZGVtcG90ZW50IHdoZW4gYQorICAgICAgICAgICAgIyBoZWFkZXIgZnJvbSBhIHBhcnNlZCBtZXNzYWdlIGlzIGNvbnRpbnVlZCB3aXRoIHRhYnMgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICMgc3BhY2VzLiAgQmVmb3JlIHdlIGZpeGVkIGJ1ZyAxOTc0IGl0IHdhcyByZXZlcnNlZGx5IGJyb2tlbiwKKyAgICAgICAgICAgICMgaS5lLiBoZWFkZXJzIHRoYXQgd2VyZSBjb250aW51ZWQgd2l0aCBzcGFjZXMgZ290IGNvbnRpbnVlZCB3aXRoCisgICAgICAgICAgICAjIHRhYnMuICBGb3IgUHl0aG9uIDIueCB0aGVyZSdzIHJlYWxseSBubyBnb29kIGZpeCBhbmQgaW4gUHl0aG9uCisgICAgICAgICAgICAjIDMueCBhbGwgdGhpcyBzdHVmZiBpcyByZS13cml0dGVuIHRvIGJlIHJpZ2h0KGVyKS4gIENocmlzIFdpdGhlcnMKKyAgICAgICAgICAgICMgY29udmluY2VkIG1lIHRoYXQgdXNpbmcgc3BhY2UgYXMgdGhlIGRlZmF1bHQgY29udGludWF0aW9uCisgICAgICAgICAgICAjIGNoYXJhY3RlciBpcyBsZXNzIGJhZCBmb3IgbW9yZSBhcHBsaWNhdGlvbnMuCisgICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpLnJlcGxhY2UoJ1x0JywgJyAnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICBlcSh0ZXh0LCBtc2cuYXNfc3RyaW5nKCkpCisgICAgICAgIGZ1bGxyZXByID0gc3RyKG1zZykKKyAgICAgICAgbGluZXMgPSBmdWxscmVwci5zcGxpdCgnXG4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXNbMF0uc3RhcnRzd2l0aCgnRnJvbSAnKSkKKyAgICAgICAgZXEodGV4dCwgTkwuam9pbihsaW5lc1sxOl0pKQorCisgICAgZGVmIHRlc3RfYmFkX3BhcmFtKHNlbGYpOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKCJDb250ZW50LVR5cGU6IGJsYXJnOyBiYXo7IGJvb1xuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BhcmFtKCdiYXonKSwgJycpCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKCJGcm9tOiBmb29cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9maWxlbmFtZSgpLCBOb25lKQorCisgICAgZGVmIHRlc3RfYm9ndXNfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoCisgICAgICAgICJDb250ZW50LURpc3Bvc2l0aW9uOiBibGFyZzsgZmlsZW5hbWVcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9maWxlbmFtZSgpLCAnJykKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfYm91bmRhcnkoc2VsZik6CisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoIkZyb206IGZvb1xuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2JvdW5kYXJ5KCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9nZXRfcGFyYW1zKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZygKKyAgICAgICAgICAgICdYLUhlYWRlcjogZm9vPW9uZTsgYmFyPXR3bzsgYmF6PXRocmVlXG4nKQorICAgICAgICBlcShtc2cuZ2V0X3BhcmFtcyhoZWFkZXI9J3gtaGVhZGVyJyksCisgICAgICAgICAgIFsoJ2ZvbycsICdvbmUnKSwgKCdiYXInLCAndHdvJyksICgnYmF6JywgJ3RocmVlJyldKQorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKAorICAgICAgICAgICAgJ1gtSGVhZGVyOiBmb287IGJhcj1vbmU7IGJhej10d29cbicpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW1zKGhlYWRlcj0neC1oZWFkZXInKSwKKyAgICAgICAgICAgWygnZm9vJywgJycpLCAoJ2JhcicsICdvbmUnKSwgKCdiYXonLCAndHdvJyldKQorICAgICAgICBlcShtc2cuZ2V0X3BhcmFtcygpLCBOb25lKQorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKAorICAgICAgICAgICAgJ1gtSGVhZGVyOiBmb287IGJhcj0ib25lIjsgYmF6PXR3b1xuJykKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbXMoaGVhZGVyPSd4LWhlYWRlcicpLAorICAgICAgICAgICBbKCdmb28nLCAnJyksICgnYmFyJywgJ29uZScpLCAoJ2JheicsICd0d28nKV0pCisKKyAgICBkZWYgdGVzdF9nZXRfcGFyYW1fbGliZXJhbChzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snQ29udGVudC1UeXBlJ10gPSAnQ29udGVudC1UeXBlOiBNdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5ID0gIkNQSU1TU01UUEMwNnA1ZjN0RyInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXJhbSgnYm91bmRhcnknKSwgJ0NQSU1TU01UUEMwNnA1ZjN0RycpCisKKyAgICBkZWYgdGVzdF9nZXRfcGFyYW0oc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKAorICAgICAgICAgICAgIlgtSGVhZGVyOiBmb289b25lOyBiYXI9dHdvOyBiYXo9dGhyZWVcbiIpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ2JhcicsIGhlYWRlcj0neC1oZWFkZXInKSwgJ3R3bycpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ3F1dXonLCBoZWFkZXI9J3gtaGVhZGVyJyksIE5vbmUpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ3F1dXonKSwgTm9uZSkKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZygKKyAgICAgICAgICAgICdYLUhlYWRlcjogZm9vOyBiYXI9Im9uZSI7IGJhej10d29cbicpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ2ZvbycsIGhlYWRlcj0neC1oZWFkZXInKSwgJycpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ2JhcicsIGhlYWRlcj0neC1oZWFkZXInKSwgJ29uZScpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ2JheicsIGhlYWRlcj0neC1oZWFkZXInKSwgJ3R3bycpCisgICAgICAgICMgWFhYOiBXZSBhcmUgbm90IFJGQy0yMDQ1IGNvbXBsaWFudCEgIFdlIGNhbm5vdCBwYXJzZToKKyAgICAgICAgIyBtc2dbIkNvbnRlbnQtVHlwZSJdID0gJ3RleHQvcGxhaW47IHdlaXJkPSJoZXk7IGRvbGx5PyBbeW91XSBAIDxcXCJob21lXFwiPj8iJworICAgICAgICAjIG1zZy5nZXRfcGFyYW0oIndlaXJkIikKKyAgICAgICAgIyB5ZXQuCisKKyAgICBkZWYgdGVzdF9nZXRfcGFyYW1fZnVua3lfY29udGludWF0aW9uX2xpbmVzKHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18yMi50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZCgxKS5nZXRfcGFyYW0oJ25hbWUnKSwgJ3dpYmJsZS5KUEcnKQorCisgICAgZGVmIHRlc3RfZ2V0X3BhcmFtX3dpdGhfc2VtaXNfaW5fcXVvdGVzKHNlbGYpOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKAorICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZTogaW1hZ2UvcGpwZWc7IG5hbWU9IkppbSZhbXA7JmFtcDtKaWxsIlxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BhcmFtKCduYW1lJyksICdKaW0mYW1wOyZhbXA7SmlsbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXJhbSgnbmFtZScsIHVucXVvdGU9RmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICciSmltJmFtcDsmYW1wO0ppbGwiJykKKworICAgIGRlZiB0ZXN0X2dldF9wYXJhbV93aXRoX3F1b3RlcyhzZWxmKToKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZygKKyAgICAgICAgICAgICdDb250ZW50LVR5cGU6IGZvbzsgYmFyKjA9ImJhelxcImZvb2JhciI7IGJhcioxPSJcXCJiYXoiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BhcmFtKCdiYXInKSwgJ2JheiJmb29iYXIiYmF6JykKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZygKKyAgICAgICAgICAgICJDb250ZW50LVR5cGU6IGZvbzsgYmFyKjA9XCJiYXpcXFwiZm9vYmFyXCI7IGJhcioxPVwiXFxcImJhelwiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BhcmFtKCdiYXInKSwgJ2JheiJmb29iYXIiYmF6JykKKworICAgIGRlZiB0ZXN0X2hhc19rZXkoc2VsZik6CisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoJ0hlYWRlcjogZXhpc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5oYXNfa2V5KCdoZWFkZXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5oYXNfa2V5KCdIZWFkZXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5oYXNfa2V5KCdIRUFERVInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtc2cuaGFzX2tleSgnaGVhZGVyaScpKQorCisgICAgZGVmIHRlc3Rfc2V0X3BhcmFtKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZy5zZXRfcGFyYW0oJ2NoYXJzZXQnLCAnaXNvLTIwMjItanAnKQorICAgICAgICBlcShtc2cuZ2V0X3BhcmFtKCdjaGFyc2V0JyksICdpc28tMjAyMi1qcCcpCisgICAgICAgIG1zZy5zZXRfcGFyYW0oJ2ltcG9ydGFuY2UnLCAnaGlnaCB2YWx1ZScpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ2ltcG9ydGFuY2UnKSwgJ2hpZ2ggdmFsdWUnKQorICAgICAgICBlcShtc2cuZ2V0X3BhcmFtKCdpbXBvcnRhbmNlJywgdW5xdW90ZT1GYWxzZSksICciaGlnaCB2YWx1ZSInKQorICAgICAgICBlcShtc2cuZ2V0X3BhcmFtcygpLCBbKCd0ZXh0L3BsYWluJywgJycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjaGFyc2V0JywgJ2lzby0yMDIyLWpwJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2ltcG9ydGFuY2UnLCAnaGlnaCB2YWx1ZScpXSkKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbXModW5xdW90ZT1GYWxzZSksIFsoJ3RleHQvcGxhaW4nLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2NoYXJzZXQnLCAnImlzby0yMDIyLWpwIicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdpbXBvcnRhbmNlJywgJyJoaWdoIHZhbHVlIicpXSkKKyAgICAgICAgbXNnLnNldF9wYXJhbSgnY2hhcnNldCcsICdpc28tOTk5OS14eCcsIGhlYWRlcj0nWC1KaW1teScpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ2NoYXJzZXQnLCBoZWFkZXI9J1gtSmltbXknKSwgJ2lzby05OTk5LXh4JykKKworICAgIGRlZiB0ZXN0X2RlbF9wYXJhbShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzA1LnR4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW1zKCksCisgICAgICAgICAgIFsoJ211bHRpcGFydC9yZXBvcnQnLCAnJyksICgncmVwb3J0LXR5cGUnLCAnZGVsaXZlcnktc3RhdHVzJyksCisgICAgICAgICAgICAoJ2JvdW5kYXJ5JywgJ0QxNjkwQTdBQzEuOTk2ODU2MDkwL21haWwuZXhhbXBsZS5jb20nKV0pCisgICAgICAgIG9sZF92YWwgPSBtc2cuZ2V0X3BhcmFtKCJyZXBvcnQtdHlwZSIpCisgICAgICAgIG1zZy5kZWxfcGFyYW0oInJlcG9ydC10eXBlIikKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbXMoKSwKKyAgICAgICAgICAgWygnbXVsdGlwYXJ0L3JlcG9ydCcsICcnKSwKKyAgICAgICAgICAgICgnYm91bmRhcnknLCAnRDE2OTBBN0FDMS45OTY4NTYwOTAvbWFpbC5leGFtcGxlLmNvbScpXSkKKyAgICAgICAgbXNnLnNldF9wYXJhbSgicmVwb3J0LXR5cGUiLCBvbGRfdmFsKQorICAgICAgICBlcShtc2cuZ2V0X3BhcmFtcygpLAorICAgICAgICAgICBbKCdtdWx0aXBhcnQvcmVwb3J0JywgJycpLAorICAgICAgICAgICAgKCdib3VuZGFyeScsICdEMTY5MEE3QUMxLjk5Njg1NjA5MC9tYWlsLmV4YW1wbGUuY29tJyksCisgICAgICAgICAgICAoJ3JlcG9ydC10eXBlJywgb2xkX3ZhbCldKQorCisgICAgZGVmIHRlc3RfZGVsX3BhcmFtX29uX290aGVyX2hlYWRlcihzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZy5hZGRfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnLCBmaWxlbmFtZT0nYnVkLmdpZicpCisgICAgICAgIG1zZy5kZWxfcGFyYW0oJ2ZpbGVuYW1lJywgJ2NvbnRlbnQtZGlzcG9zaXRpb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ1snY29udGVudC1kaXNwb3NpdGlvbiddLCAnYXR0YWNobWVudCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdHlwZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtc2cuc2V0X3R5cGUsICd0ZXh0JykKKyAgICAgICAgbXNnLnNldF90eXBlKCd0ZXh0L3BsYWluJykKKyAgICAgICAgZXEobXNnWydjb250ZW50LXR5cGUnXSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBtc2cuc2V0X3BhcmFtKCdjaGFyc2V0JywgJ3VzLWFzY2lpJykKKyAgICAgICAgZXEobXNnWydjb250ZW50LXR5cGUnXSwgJ3RleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIicpCisgICAgICAgIG1zZy5zZXRfdHlwZSgndGV4dC9odG1sJykKKyAgICAgICAgZXEobXNnWydjb250ZW50LXR5cGUnXSwgJ3RleHQvaHRtbDsgY2hhcnNldD0idXMtYXNjaWkiJykKKworICAgIGRlZiB0ZXN0X3NldF90eXBlX29uX290aGVyX2hlYWRlcihzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snWC1Db250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICBtc2cuc2V0X3R5cGUoJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsICdYLUNvbnRlbnQtVHlwZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnWyd4LWNvbnRlbnQtdHlwZSddLCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJykKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X3R5cGVfbWlzc2luZyhzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfdHlwZV9taXNzaW5nX3dpdGhfZGVmYXVsdF90eXBlKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLnNldF9kZWZhdWx0X3R5cGUoJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfdHlwZV9mcm9tX21lc3NhZ2VfaW1wbGljaXQoc2VsZik6CisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzMwLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKDApLmdldF9jb250ZW50X3R5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZS9yZmM4MjInKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfdHlwZV9mcm9tX21lc3NhZ2VfZXhwbGljaXQoc2VsZik6CisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzI4LnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKDApLmdldF9jb250ZW50X3R5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZS9yZmM4MjInKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfdHlwZV9mcm9tX21lc3NhZ2VfdGV4dF9wbGFpbl9pbXBsaWNpdChzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDMudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF90eXBlX2Zyb21fbWVzc2FnZV90ZXh0X3BsYWluX2V4cGxpY2l0KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X21haW50eXBlX21pc3Npbmcoc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpLCAndGV4dCcpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9tYWludHlwZV9taXNzaW5nX3dpdGhfZGVmYXVsdF90eXBlKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLnNldF9kZWZhdWx0X3R5cGUoJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSwgJ21lc3NhZ2UnKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfbWFpbnR5cGVfZnJvbV9tZXNzYWdlX2ltcGxpY2l0KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18zMC50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZCgwKS5nZXRfY29udGVudF9tYWludHlwZSgpLCAnbWVzc2FnZScpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9tYWludHlwZV9mcm9tX21lc3NhZ2VfZXhwbGljaXQoc2VsZik6CisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzI4LnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKDApLmdldF9jb250ZW50X21haW50eXBlKCksICdtZXNzYWdlJykKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X21haW50eXBlX2Zyb21fbWVzc2FnZV90ZXh0X3BsYWluX2ltcGxpY2l0KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMy50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpLCAndGV4dCcpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9tYWludHlwZV9mcm9tX21lc3NhZ2VfdGV4dF9wbGFpbl9leHBsaWNpdChzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSwgJ3RleHQnKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfc3VidHlwZV9taXNzaW5nKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfc3VidHlwZSgpLCAncGxhaW4nKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfc3VidHlwZV9taXNzaW5nX3dpdGhfZGVmYXVsdF90eXBlKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLnNldF9kZWZhdWx0X3R5cGUoJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfc3VidHlwZSgpLCAncmZjODIyJykKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X3N1YnR5cGVfZnJvbV9tZXNzYWdlX2ltcGxpY2l0KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18zMC50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZCgwKS5nZXRfY29udGVudF9zdWJ0eXBlKCksICdyZmM4MjInKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfc3VidHlwZV9mcm9tX21lc3NhZ2VfZXhwbGljaXQoc2VsZik6CisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzI4LnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKDApLmdldF9jb250ZW50X3N1YnR5cGUoKSwgJ3JmYzgyMicpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9zdWJ0eXBlX2Zyb21fbWVzc2FnZV90ZXh0X3BsYWluX2ltcGxpY2l0KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMy50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfY29udGVudF9zdWJ0eXBlKCksICdwbGFpbicpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9zdWJ0eXBlX2Zyb21fbWVzc2FnZV90ZXh0X3BsYWluX2V4cGxpY2l0KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfY29udGVudF9zdWJ0eXBlKCksICdwbGFpbicpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9tYWludHlwZV9lcnJvcihzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snQ29udGVudC1UeXBlJ10gPSAnbm8tc2xhc2gtaW4tdGhpcy1zdHJpbmcnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9jb250ZW50X21haW50eXBlKCksICd0ZXh0JykKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X3N1YnR5cGVfZXJyb3Ioc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJ25vLXNsYXNoLWluLXRoaXMtc3RyaW5nJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfY29udGVudF9zdWJ0eXBlKCksICdwbGFpbicpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX2hlYWRlcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2cuYWRkX2hlYWRlcignRmlyc3QnLCAnT25lJykKKyAgICAgICAgbXNnLmFkZF9oZWFkZXIoJ1NlY29uZCcsICdUd28nKQorICAgICAgICBtc2cuYWRkX2hlYWRlcignVGhpcmQnLCAnVGhyZWUnKQorICAgICAgICBlcShtc2cua2V5cygpLCBbJ0ZpcnN0JywgJ1NlY29uZCcsICdUaGlyZCddKQorICAgICAgICBlcShtc2cudmFsdWVzKCksIFsnT25lJywgJ1R3bycsICdUaHJlZSddKQorICAgICAgICBtc2cucmVwbGFjZV9oZWFkZXIoJ1NlY29uZCcsICdUd2VudHknKQorICAgICAgICBlcShtc2cua2V5cygpLCBbJ0ZpcnN0JywgJ1NlY29uZCcsICdUaGlyZCddKQorICAgICAgICBlcShtc2cudmFsdWVzKCksIFsnT25lJywgJ1R3ZW50eScsICdUaHJlZSddKQorICAgICAgICBtc2cuYWRkX2hlYWRlcignRmlyc3QnLCAnRWxldmVuJykKKyAgICAgICAgbXNnLnJlcGxhY2VfaGVhZGVyKCdGaXJzdCcsICdPbmUgSHVuZHJlZCcpCisgICAgICAgIGVxKG1zZy5rZXlzKCksIFsnRmlyc3QnLCAnU2Vjb25kJywgJ1RoaXJkJywgJ0ZpcnN0J10pCisgICAgICAgIGVxKG1zZy52YWx1ZXMoKSwgWydPbmUgSHVuZHJlZCcsICdUd2VudHknLCAnVGhyZWUnLCAnRWxldmVuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBtc2cucmVwbGFjZV9oZWFkZXIsICdGb3VydGgnLCAnTWlzc2luZycpCisKKyAgICBkZWYgdGVzdF9icm9rZW5fYmFzZTY0X3BheWxvYWQoc2VsZik6CisgICAgICAgIHggPSAnQXdEcDBQNy8veTZMd0tFQWNQYS82UT05JworICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnWydjb250ZW50LXR5cGUnXSA9ICdhdWRpby94LW1pZGknCisgICAgICAgIG1zZ1snY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddID0gJ2Jhc2U2NCcKKyAgICAgICAgbXNnLnNldF9wYXlsb2FkKHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwgeCkKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X2NoYXJzZXQoc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2cuc2V0X2NoYXJzZXQoJ3VzLWFzY2lpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgndXMtYXNjaWknLCBtc2cuZ2V0X2NvbnRlbnRfY2hhcnNldCgpKQorICAgICAgICBtc2cuc2V0X2NoYXJzZXQodSd1cy1hc2NpaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3VzLWFzY2lpJywgbXNnLmdldF9jb250ZW50X2NoYXJzZXQoKSkKKworICAgICMgSXNzdWUgNTg3MTogcmVqZWN0IGFuIGF0dGVtcHQgdG8gZW1iZWQgYSBoZWFkZXIgaW5zaWRlIGEgaGVhZGVyIHZhbHVlCisgICAgIyAoaGVhZGVyIGluamVjdGlvbiBhdHRhY2spLgorICAgIGRlZiB0ZXN0X2VtYmVkZWRfaGVhZGVyX3ZpYV9IZWFkZXJfcmVqZWN0ZWQoc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ0R1bW15J10gPSBIZWFkZXIoJ2R1bW15XG5YLUluamVjdGVkLUhlYWRlcjogdGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVycm9ycy5IZWFkZXJQYXJzZUVycm9yLCBtc2cuYXNfc3RyaW5nKQorCisgICAgZGVmIHRlc3RfZW1iZWRlZF9oZWFkZXJfdmlhX3N0cmluZ19yZWplY3RlZChzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snRHVtbXknXSA9ICdkdW1teVxuWC1JbmplY3RlZC1IZWFkZXI6IHRlc3QnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVycm9ycy5IZWFkZXJQYXJzZUVycm9yLCBtc2cuYXNfc3RyaW5nKQorCisKKyMgVGVzdCB0aGUgZW1haWwuRW5jb2RlcnMgbW9kdWxlCitjbGFzcyBUZXN0RW5jb2RlcnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2VuY29kZV9lbXB0eV9wYXlsb2FkKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZy5zZXRfY2hhcnNldCgndXMtYXNjaWknKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSwgJzdiaXQnKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9jdGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIDdiaXQgZGF0YSBhbmQgdGhlIGRlZmF1bHQgdXMtYXNjaWkgX2NoYXJzZXQKKyAgICAgICAgbXNnID0gTUlNRVRleHQoJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgZXEobXNnWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ10sICc3Yml0JykKKyAgICAgICAgIyBTaW1pbGFyLCBidXQgd2l0aCA4Yml0IGRhdGEKKyAgICAgICAgbXNnID0gTUlNRVRleHQoJ2hlbGxvIFx4Zjggd29ybGQnKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSwgJzhiaXQnKQorICAgICAgICAjIEFuZCBub3cgd2l0aCBhIGRpZmZlcmVudCBjaGFyc2V0CisgICAgICAgIG1zZyA9IE1JTUVUZXh0KCdoZWxsbyBceGY4IHdvcmxkJywgX2NoYXJzZXQ9J2lzby04ODU5LTEnKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSwgJ3F1b3RlZC1wcmludGFibGUnKQorCisgICAgZGVmIHRlc3RfZW5jb2RlN29yOGJpdChzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgYSBjaGFyc2V0IHdob3NlIGlucHV0IGNoYXJhY3RlciBzZXQgaXMgOGJpdCBidXQKKyAgICAgICAgIyB3aG9zZSBvdXRwdXQgY2hhcmFjdGVyIHNldCBpcyA3Yml0IGdldHMgYSB0cmFuc2Zlci1lbmNvZGluZworICAgICAgICAjIG9mIDdiaXQuCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBlbWFpbC5NSU1FVGV4dC5NSU1FVGV4dCgnXHhjYVx4YjgnLCBfY2hhcnNldD0nZXVjLWpwJykKKyAgICAgICAgZXEobXNnWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ10sICc3Yml0JykKKworCisjIFRlc3QgbG9uZyBoZWFkZXIgd3JhcHBpbmcKK2NsYXNzIFRlc3RMb25nSGVhZGVycyhUZXN0RW1haWxCYXNlKToKKyAgICBkZWYgdGVzdF9zcGxpdF9sb25nX2NvbnRpbnVhdGlvbihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZygiIiJcCitTdWJqZWN0OiBidWcgZGVtb25zdHJhdGlvbgorXHQxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjM0NTY3ODk3MTIzNDU2Nzg5ODExMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTExMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OQorXHRtb3JlIHRleHQKKwordGVzdAorIiIiKQorICAgICAgICBzZnAgPSBTdHJpbmdJTygpCisgICAgICAgIGcgPSBHZW5lcmF0b3Ioc2ZwKQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICBlcShzZnAuZ2V0dmFsdWUoKSwgIiIiXAorU3ViamVjdDogYnVnIGRlbW9uc3RyYXRpb24KKyAxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjM0NTY3ODk3MTIzNDU2Nzg5ODExMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTExMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OQorIG1vcmUgdGV4dAorCit0ZXN0CisiIiIpCisKKyAgICBkZWYgdGVzdF9hbm90aGVyX2xvbmdfYWxtb3N0X3Vuc3BsaXR0YWJsZV9oZWFkZXIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIGhzdHIgPSAiIiJcCitidWcgZGVtb25zdHJhdGlvbgorXHQxMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTMxMjM0NTY3ODk0MTIzNDU2Nzg5NTEyMzQ1Njc4OTYxMjM0NTY3ODk3MTIzNDU2Nzg5ODExMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OTExMjM0NTY3ODkxMTIzNDU2Nzg5MjEyMzQ1Njc4OQorXHRtb3JlIHRleHQiIiIKKyAgICAgICAgaCA9IEhlYWRlcihoc3RyLCBjb250aW51YXRpb25fd3M9J1x0JykKKyAgICAgICAgZXEoaC5lbmNvZGUoKSwgIiIiXAorYnVnIGRlbW9uc3RyYXRpb24KK1x0MTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzNDU2Nzg5NzEyMzQ1Njc4OTgxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkKK1x0bW9yZSB0ZXh0IiIiKQorICAgICAgICBoID0gSGVhZGVyKGhzdHIpCisgICAgICAgIGVxKGguZW5jb2RlKCksICIiIlwKK2J1ZyBkZW1vbnN0cmF0aW9uCisgMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzNDU2Nzg5NzEyMzQ1Njc4OTgxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkKKyBtb3JlIHRleHQiIiIpCisKKyAgICBkZWYgdGVzdF9sb25nX25vbnN0cmluZyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgZyA9IENoYXJzZXQoImlzby04ODU5LTEiKQorICAgICAgICBjeiA9IENoYXJzZXQoImlzby04ODU5LTIiKQorICAgICAgICB1dGY4ID0gQ2hhcnNldCgidXRmLTgiKQorICAgICAgICBnX2hlYWQgPSAiRGllIE1pZXRlciB0cmV0ZW4gaGllciBlaW4gd2VyZGVuIG1pdCBlaW5lbSBGb2VyZGVyYmFuZCBrb21mb3J0YWJlbCBkZW4gS29ycmlkb3IgZW50bGFuZywgYW4gc1x4ZmNkbFx4ZmNuZGlzY2hlbiBXYW5kZ2VtXHhlNGxkZW4gdm9yYmVpLCBnZWdlbiBkaWUgcm90aWVyZW5kZW4gS2xpbmdlbiBiZWZceGY2cmRlcnQuICIKKyAgICAgICAgY3pfaGVhZCA9ICJGaW5hblx4ZThuaSBtZXRyb3BvbGUgc2UgaHJvdXRpbHkgcG9kIHRsYWtlbSBqZWppY2ggZFx4Zjl2dGlwdS4uICIKKyAgICAgICAgdXRmOF9oZWFkID0gdSJcdTZiNjNcdTc4YmFcdTMwNmJcdThhMDBcdTMwNDZcdTMwNjhcdTdmZmJcdThhMzNcdTMwNmZcdTMwNTVcdTMwOGNcdTMwNjZcdTMwNDRcdTMwN2VcdTMwNWJcdTMwOTNcdTMwMDJcdTRlMDBcdTkwZThcdTMwNmZcdTMwYzlcdTMwYTRcdTMwYzRcdThhOWVcdTMwNjdcdTMwNTlcdTMwNGNcdTMwMDFcdTMwNDJcdTMwNjhcdTMwNmZcdTMwNjdcdTMwNWZcdTMwODlcdTMwODFcdTMwNjdcdTMwNTlcdTMwMDJcdTViOWZcdTk2OWJcdTMwNmJcdTMwNmZcdTMwMGNXZW5uIGlzdCBkYXMgTnVuc3R1Y2sgZ2l0IHVuZCBTbG90ZXJtZXllcj8gSmEhIEJlaWhlcmh1bmQgZGFzIE9kZXIgZGllIEZsaXBwZXJ3YWxkdCBnZXJzcHV0Llx1MzAwZFx1MzA2OFx1OGEwMFx1MzA2M1x1MzA2Nlx1MzA0NFx1MzA3ZVx1MzA1OVx1MzAwMiIuZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgIGggPSBIZWFkZXIoZ19oZWFkLCBnLCBoZWFkZXJfbmFtZT0nU3ViamVjdCcpCisgICAgICAgIGguYXBwZW5kKGN6X2hlYWQsIGN6KQorICAgICAgICBoLmFwcGVuZCh1dGY4X2hlYWQsIHV0ZjgpCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ1N1YmplY3QnXSA9IGgKKyAgICAgICAgc2ZwID0gU3RyaW5nSU8oKQorICAgICAgICBnID0gR2VuZXJhdG9yKHNmcCkKKyAgICAgICAgZy5mbGF0dGVuKG1zZykKKyAgICAgICAgZXEoc2ZwLmdldHZhbHVlKCksICIiIlwKK1N1YmplY3Q6ID0/aXNvLTg4NTktMT9xP0RpZV9NaWV0ZXJfdHJldGVuX2hpZXJfZWluX3dlcmRlbl9taXRfZWluZW1fRm9lcmQ/PQorID0/aXNvLTg4NTktMT9xP2VyYmFuZF9rb21mb3J0YWJlbF9kZW5fS29ycmlkb3JfZW50bGFuZz0yQ19hbl9zPUZDZGw9RkNuZGk/PQorID0/aXNvLTg4NTktMT9xP3NjaGVuX1dhbmRnZW09RTRsZGVuX3ZvcmJlaT0yQ19nZWdlbl9kaWVfcm90aWVyZW5kZW5fS2xpbmc/PQorID0/aXNvLTg4NTktMT9xP2VuX2JlZj1GNnJkZXJ0PTJFXz89ID0/aXNvLTg4NTktMj9xP0ZpbmFuPUU4bmlfbWV0Pz0KKyA9P2lzby04ODU5LTI/cT9yb3BvbGVfc2VfaHJvdXRpbHlfcG9kX3RsYWtlbV9qZWppY2hfZD1GOXZ0aXB1PTJFPTJFXz89CisgPT91dGYtOD9iPzVxMmo1Nks2NDRHcjZLaUE0NEdHNDRHbzU3Kzc2S2l6NDRHdjQ0R1Y0NEtNNDRHbTQ0R0U/PQorID0/dXRmLTg/Yj80NEcrNDRHYjQ0S1Q0NENDNUxpQTZZT280NEd2NDRPSjQ0S2s0NE9FNktxZTQ0R240NEdaNDRHTTQ0Q0I/PQorID0/dXRmLTg/Yj80NEdDNDRHbzQ0R3Y0NEduNDRHZjQ0S0o0NEtCNDRHbjQ0R1o0NENDNWE2ZjZacWI0NEdyNDRHdjQ0Q00/PQorID0/dXRmLTg/cT9XZW5uX2lzdF9kYXNfTnVuc3R1Y2tfZ2l0X3VuZF9TbG90ZXJtZXllcj0zRl9KYSFfQmVpaGVyaHVuZF9kYXM/PQorID0/dXRmLTg/Yj9JRTlrWlhJZ1pHbGxJRVpzYVhCd1pYSjNZV3hrZENCblpYSnpjSFYwTHVPQWplT0JxT2lvZ09PQm93PT0/PQorID0/dXRmLTg/Yj80NEdtNDRHRTQ0Rys0NEdaNDRDQz89CisKKyIiIikKKyAgICAgICAgZXEoaC5lbmNvZGUoKSwgIiIiXAorPT9pc28tODg1OS0xP3E/RGllX01pZXRlcl90cmV0ZW5faGllcl9laW5fd2VyZGVuX21pdF9laW5lbV9Gb2VyZD89CisgPT9pc28tODg1OS0xP3E/ZXJiYW5kX2tvbWZvcnRhYmVsX2Rlbl9Lb3JyaWRvcl9lbnRsYW5nPTJDX2FuX3M9RkNkbD1GQ25kaT89CisgPT9pc28tODg1OS0xP3E/c2NoZW5fV2FuZGdlbT1FNGxkZW5fdm9yYmVpPTJDX2dlZ2VuX2RpZV9yb3RpZXJlbmRlbl9LbGluZz89CisgPT9pc28tODg1OS0xP3E/ZW5fYmVmPUY2cmRlcnQ9MkVfPz0gPT9pc28tODg1OS0yP3E/RmluYW49RThuaV9tZXQ/PQorID0/aXNvLTg4NTktMj9xP3JvcG9sZV9zZV9ocm91dGlseV9wb2RfdGxha2VtX2plamljaF9kPUY5dnRpcHU9MkU9MkVfPz0KKyA9P3V0Zi04P2I/NXEyajU2SzY0NEdyNktpQTQ0R0c0NEdvNTcrNzZLaXo0NEd2NDRHVjQ0S000NEdtNDRHRT89CisgPT91dGYtOD9iPzQ0Rys0NEdiNDRLVDQ0Q0M1TGlBNllPbzQ0R3Y0NE9KNDRLazQ0T0U2S3FlNDRHbjQ0R1o0NEdNNDRDQj89CisgPT91dGYtOD9iPzQ0R0M0NEdvNDRHdjQ0R240NEdmNDRLSjQ0S0I0NEduNDRHWjQ0Q0M1YTZmNlpxYjQ0R3I0NEd2NDRDTT89CisgPT91dGYtOD9xP1dlbm5faXN0X2Rhc19OdW5zdHVja19naXRfdW5kX1Nsb3Rlcm1leWVyPTNGX0phIV9CZWloZXJodW5kX2Rhcz89CisgPT91dGYtOD9iP0lFOWtaWElnWkdsbElFWnNhWEJ3WlhKM1lXeGtkQ0JuWlhKemNIVjBMdU9BamVPQnFPaW9nT09Cb3c9PT89CisgPT91dGYtOD9iPzQ0R200NEdFNDRHKzQ0R1o0NENDPz0iIiIpCisKKyAgICBkZWYgdGVzdF9sb25nX2hlYWRlcl9lbmNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIGggPSBIZWFkZXIoJ3dhc25pcG9vcDsgZ2lyYWZmZXM9InZlcnktbG9uZy1uZWNrZWQtYW5pbWFscyI7ICcKKyAgICAgICAgICAgICAgICAgICAnc3Bvb2dlPSJ5dW1teSI7IGhpcHBvcz0iZ2FyZ2FudHVhbiI7IG1hcnNobWFsbG93cz0iZ29vZXkiJywKKyAgICAgICAgICAgICAgICAgICBoZWFkZXJfbmFtZT0nWC1Gb29iYXItU3BvaW5rLURlZnJvYm5pdCcpCisgICAgICAgIGVxKGguZW5jb2RlKCksICcnJ1wKK3dhc25pcG9vcDsgZ2lyYWZmZXM9InZlcnktbG9uZy1uZWNrZWQtYW5pbWFscyI7Cisgc3Bvb2dlPSJ5dW1teSI7IGhpcHBvcz0iZ2FyZ2FudHVhbiI7IG1hcnNobWFsbG93cz0iZ29vZXkiJycnKQorCisgICAgZGVmIHRlc3RfbG9uZ19oZWFkZXJfZW5jb2RlX3dpdGhfdGFiX2NvbnRpbnVhdGlvbihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgaCA9IEhlYWRlcignd2Fzbmlwb29wOyBnaXJhZmZlcz0idmVyeS1sb25nLW5lY2tlZC1hbmltYWxzIjsgJworICAgICAgICAgICAgICAgICAgICdzcG9vZ2U9Inl1bW15IjsgaGlwcG9zPSJnYXJnYW50dWFuIjsgbWFyc2htYWxsb3dzPSJnb29leSInLAorICAgICAgICAgICAgICAgICAgIGhlYWRlcl9uYW1lPSdYLUZvb2Jhci1TcG9pbmstRGVmcm9ibml0JywKKyAgICAgICAgICAgICAgICAgICBjb250aW51YXRpb25fd3M9J1x0JykKKyAgICAgICAgZXEoaC5lbmNvZGUoKSwgJycnXAord2Fzbmlwb29wOyBnaXJhZmZlcz0idmVyeS1sb25nLW5lY2tlZC1hbmltYWxzIjsKK1x0c3Bvb2dlPSJ5dW1teSI7IGhpcHBvcz0iZ2FyZ2FudHVhbiI7IG1hcnNobWFsbG93cz0iZ29vZXkiJycnKQorCisgICAgZGVmIHRlc3RfaGVhZGVyX3NwbGl0dGVyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNSU1FVGV4dCgnJykKKyAgICAgICAgIyBJdCdkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIHVzZSBhZGRfaGVhZGVyKCkgaGVyZSwgYnV0IHRoYXQgZG9lc24ndAorICAgICAgICAjIGd1YXJhbnRlZSBhbiBvcmRlciBvZiB0aGUgcGFyYW1ldGVycy4KKyAgICAgICAgbXNnWydYLUZvb2Jhci1TcG9pbmstRGVmcm9ibml0J10gPSAoCisgICAgICAgICAgICAnd2Fzbmlwb29wOyBnaXJhZmZlcz0idmVyeS1sb25nLW5lY2tlZC1hbmltYWxzIjsgJworICAgICAgICAgICAgJ3Nwb29nZT0ieXVtbXkiOyBoaXBwb3M9ImdhcmdhbnR1YW4iOyBtYXJzaG1hbGxvd3M9Imdvb2V5IicpCisgICAgICAgIHNmcCA9IFN0cmluZ0lPKCkKKyAgICAgICAgZyA9IEdlbmVyYXRvcihzZnApCisgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgIGVxKHNmcC5nZXR2YWx1ZSgpLCAnJydcCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKK1gtRm9vYmFyLVNwb2luay1EZWZyb2JuaXQ6IHdhc25pcG9vcDsgZ2lyYWZmZXM9InZlcnktbG9uZy1uZWNrZWQtYW5pbWFscyI7Cisgc3Bvb2dlPSJ5dW1teSI7IGhpcHBvcz0iZ2FyZ2FudHVhbiI7IG1hcnNobWFsbG93cz0iZ29vZXkiCisKKycnJykKKworICAgIGRlZiB0ZXN0X25vX3NlbWlzX2hlYWRlcl9zcGxpdHRlcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snRnJvbSddID0gJ3Rlc3RAZG9tLmFpbicKKyAgICAgICAgbXNnWydSZWZlcmVuY2VzJ10gPSBTUEFDRS5qb2luKFsnPCVkQGRvbS5haW4+JyAlIGkgZm9yIGkgaW4gcmFuZ2UoMTApXSkKKyAgICAgICAgbXNnLnNldF9wYXlsb2FkKCdUZXN0JykKKyAgICAgICAgc2ZwID0gU3RyaW5nSU8oKQorICAgICAgICBnID0gR2VuZXJhdG9yKHNmcCkKKyAgICAgICAgZy5mbGF0dGVuKG1zZykKKyAgICAgICAgZXEoc2ZwLmdldHZhbHVlKCksICIiIlwKK0Zyb206IHRlc3RAZG9tLmFpbgorUmVmZXJlbmNlczogPDBAZG9tLmFpbj4gPDFAZG9tLmFpbj4gPDJAZG9tLmFpbj4gPDNAZG9tLmFpbj4gPDRAZG9tLmFpbj4KKyA8NUBkb20uYWluPiA8NkBkb20uYWluPiA8N0Bkb20uYWluPiA8OEBkb20uYWluPiA8OUBkb20uYWluPgorCitUZXN0IiIiKQorCisgICAgZGVmIHRlc3Rfbm9fc3BsaXRfbG9uZ19oZWFkZXIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIGhzdHIgPSAnUmVmZXJlbmNlczogJyArICd4JyAqIDgwCisgICAgICAgIGggPSBIZWFkZXIoaHN0ciwgY29udGludWF0aW9uX3dzPSdcdCcpCisgICAgICAgIGVxKGguZW5jb2RlKCksICIiIlwKK1JlZmVyZW5jZXM6IHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4IiIiKQorCisgICAgZGVmIHRlc3Rfc3BsaXR0aW5nX211bHRpcGxlX2xvbmdfbGluZXMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIGhzdHIgPSAiIiJcCitmcm9tIGJhYnlsb24uc29jYWwtcmF2ZXMub3JnIChsb2NhbGhvc3QgWzEyNy4wLjAuMV0pOyBieSBiYWJ5bG9uLnNvY2FsLXJhdmVzLm9yZyAoUG9zdGZpeCkgd2l0aCBFU01UUCBpZCBCNTcwRTUxQjgxOyBmb3IgPG1haWxtYW4tYWRtaW5AYmFieWxvbi5zb2NhbC1yYXZlcy5vcmc+OyBTYXQsIDIgRmViIDIwMDIgMTc6MDA6MDYgLTA4MDAgKFBTVCkKK1x0ZnJvbSBiYWJ5bG9uLnNvY2FsLXJhdmVzLm9yZyAobG9jYWxob3N0IFsxMjcuMC4wLjFdKTsgYnkgYmFieWxvbi5zb2NhbC1yYXZlcy5vcmcgKFBvc3RmaXgpIHdpdGggRVNNVFAgaWQgQjU3MEU1MUI4MTsgZm9yIDxtYWlsbWFuLWFkbWluQGJhYnlsb24uc29jYWwtcmF2ZXMub3JnPjsgU2F0LCAyIEZlYiAyMDAyIDE3OjAwOjA2IC0wODAwIChQU1QpCitcdGZyb20gYmFieWxvbi5zb2NhbC1yYXZlcy5vcmcgKGxvY2FsaG9zdCBbMTI3LjAuMC4xXSk7IGJ5IGJhYnlsb24uc29jYWwtcmF2ZXMub3JnIChQb3N0Zml4KSB3aXRoIEVTTVRQIGlkIEI1NzBFNTFCODE7IGZvciA8bWFpbG1hbi1hZG1pbkBiYWJ5bG9uLnNvY2FsLXJhdmVzLm9yZz47IFNhdCwgMiBGZWIgMjAwMiAxNzowMDowNiAtMDgwMCAoUFNUKQorIiIiCisgICAgICAgIGggPSBIZWFkZXIoaHN0ciwgY29udGludWF0aW9uX3dzPSdcdCcpCisgICAgICAgIGVxKGguZW5jb2RlKCksICIiIlwKK2Zyb20gYmFieWxvbi5zb2NhbC1yYXZlcy5vcmcgKGxvY2FsaG9zdCBbMTI3LjAuMC4xXSk7CitcdGJ5IGJhYnlsb24uc29jYWwtcmF2ZXMub3JnIChQb3N0Zml4KSB3aXRoIEVTTVRQIGlkIEI1NzBFNTFCODE7CitcdGZvciA8bWFpbG1hbi1hZG1pbkBiYWJ5bG9uLnNvY2FsLXJhdmVzLm9yZz47CitcdFNhdCwgMiBGZWIgMjAwMiAxNzowMDowNiAtMDgwMCAoUFNUKQorXHRmcm9tIGJhYnlsb24uc29jYWwtcmF2ZXMub3JnIChsb2NhbGhvc3QgWzEyNy4wLjAuMV0pOworXHRieSBiYWJ5bG9uLnNvY2FsLXJhdmVzLm9yZyAoUG9zdGZpeCkgd2l0aCBFU01UUCBpZCBCNTcwRTUxQjgxOworXHRmb3IgPG1haWxtYW4tYWRtaW5AYmFieWxvbi5zb2NhbC1yYXZlcy5vcmc+OworXHRTYXQsIDIgRmViIDIwMDIgMTc6MDA6MDYgLTA4MDAgKFBTVCkKK1x0ZnJvbSBiYWJ5bG9uLnNvY2FsLXJhdmVzLm9yZyAobG9jYWxob3N0IFsxMjcuMC4wLjFdKTsKK1x0YnkgYmFieWxvbi5zb2NhbC1yYXZlcy5vcmcgKFBvc3RmaXgpIHdpdGggRVNNVFAgaWQgQjU3MEU1MUI4MTsKK1x0Zm9yIDxtYWlsbWFuLWFkbWluQGJhYnlsb24uc29jYWwtcmF2ZXMub3JnPjsKK1x0U2F0LCAyIEZlYiAyMDAyIDE3OjAwOjA2IC0wODAwIChQU1QpIiIiKQorCisgICAgZGVmIHRlc3Rfc3BsaXR0aW5nX2ZpcnN0X2xpbmVfb25seV9pc19sb25nKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBoc3RyID0gIiIiXAorZnJvbSBtb2RlbWNhYmxlMDkzLjEzOS0yMDEtMjQucXVlLm1jLnZpZGVvdHJvbi5jYSAoWzI0LjIwMS4xMzkuOTNdIGhlbG89Y3RodWxodS5nZXJnLmNhKQorXHRieSBrcm9ub3MubWVtcy1leGNoYW5nZS5vcmcgd2l0aCBlc210cCAoRXhpbSA0LjA1KQorXHRpZCAxN2s0aDUtMDAwMzRpLTAwCitcdGZvciB0ZXN0QG1lbXMtZXhjaGFuZ2Uub3JnOyBXZWQsIDI4IEF1ZyAyMDAyIDExOjI1OjIwIC0wNDAwIiIiCisgICAgICAgIGggPSBIZWFkZXIoaHN0ciwgbWF4bGluZWxlbj03OCwgaGVhZGVyX25hbWU9J1JlY2VpdmVkJywKKyAgICAgICAgICAgICAgICAgICBjb250aW51YXRpb25fd3M9J1x0JykKKyAgICAgICAgZXEoaC5lbmNvZGUoKSwgIiIiXAorZnJvbSBtb2RlbWNhYmxlMDkzLjEzOS0yMDEtMjQucXVlLm1jLnZpZGVvdHJvbi5jYSAoWzI0LjIwMS4xMzkuOTNdCitcdGhlbG89Y3RodWxodS5nZXJnLmNhKQorXHRieSBrcm9ub3MubWVtcy1leGNoYW5nZS5vcmcgd2l0aCBlc210cCAoRXhpbSA0LjA1KQorXHRpZCAxN2s0aDUtMDAwMzRpLTAwCitcdGZvciB0ZXN0QG1lbXMtZXhjaGFuZ2Uub3JnOyBXZWQsIDI4IEF1ZyAyMDAyIDExOjI1OjIwIC0wNDAwIiIiKQorCisgICAgZGVmIHRlc3RfbG9uZ184Yml0X2hlYWRlcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIGggPSBIZWFkZXIoJ0JyaXRpc2NoZSBSZWdpZXJ1bmcgZ2lidCcsICdpc28tODg1OS0xJywKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyX25hbWU9J1N1YmplY3QnKQorICAgICAgICBoLmFwcGVuZCgnZ3JceGZjbmVzIExpY2h0IGZceGZjciBPZmZzaG9yZS1XaW5ka3JhZnRwcm9qZWt0ZScpCisgICAgICAgIG1zZ1snU3ViamVjdCddID0gaAorICAgICAgICBlcShtc2cuYXNfc3RyaW5nKCksICIiIlwKK1N1YmplY3Q6ID0/aXNvLTg4NTktMT9xP0JyaXRpc2NoZV9SZWdpZXJ1bmdfZ2lidD89ID0/aXNvLTg4NTktMT9xP2dyPUZDbmVzPz0KKyA9P2lzby04ODU5LTE/cT9fTGljaHRfZj1GQ3JfT2Zmc2hvcmUtV2luZGtyYWZ0cHJvamVrdGU/PQorCisiIiIpCisKKyAgICBkZWYgdGVzdF9sb25nXzhiaXRfaGVhZGVyX25vX2NoYXJzZXQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ1JlcGx5LVRvJ10gPSAnQnJpdGlzY2hlIFJlZ2llcnVuZyBnaWJ0IGdyXHhmY25lcyBMaWNodCBmXHhmY3IgT2Zmc2hvcmUtV2luZGtyYWZ0cHJvamVrdGUgPGEtdmVyeS1sb25nLWFkZHJlc3NAZXhhbXBsZS5jb20+JworICAgICAgICBlcShtc2cuYXNfc3RyaW5nKCksICIiIlwKK1JlcGx5LVRvOiBCcml0aXNjaGUgUmVnaWVydW5nIGdpYnQgZ3JceGZjbmVzIExpY2h0IGZceGZjciBPZmZzaG9yZS1XaW5ka3JhZnRwcm9qZWt0ZSA8YS12ZXJ5LWxvbmctYWRkcmVzc0BleGFtcGxlLmNvbT4KKworIiIiKQorCisgICAgZGVmIHRlc3RfbG9uZ190b19oZWFkZXIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIHRvID0gJyJTb21lb25lIFRlc3QgI0EiIDxzb21lb25lQGVlY3MudW1pY2guZWR1Piw8c29tZW9uZUBlZWNzLnVtaWNoLmVkdT4sIlNvbWVvbmUgVGVzdCAjQiIgPHNvbWVvbmVAdW1pY2guZWR1PiwgIlNvbWVvbmUgVGVzdCAjQyIgPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+LCAiU29tZW9uZSBUZXN0ICNEIiA8c29tZW9uZUBlZWNzLnVtaWNoLmVkdT4nCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ1RvJ10gPSB0bworICAgICAgICBlcShtc2cuYXNfc3RyaW5nKDApLCAnJydcCitUbzogIlNvbWVvbmUgVGVzdCAjQSIgPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+LCA8c29tZW9uZUBlZWNzLnVtaWNoLmVkdT4sCisgIlNvbWVvbmUgVGVzdCAjQiIgPHNvbWVvbmVAdW1pY2guZWR1PiwKKyAiU29tZW9uZSBUZXN0ICNDIiA8c29tZW9uZUBlZWNzLnVtaWNoLmVkdT4sCisgIlNvbWVvbmUgVGVzdCAjRCIgPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+CisKKycnJykKKworICAgIGRlZiB0ZXN0X2xvbmdfbGluZV9hZnRlcl9hcHBlbmQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIHMgPSAnVGhpcyBpcyBhbiBleGFtcGxlIG9mIHN0cmluZyB3aGljaCBoYXMgYWxtb3N0IHRoZSBsaW1pdCBvZiBoZWFkZXIgbGVuZ3RoLicKKyAgICAgICAgaCA9IEhlYWRlcihzKQorICAgICAgICBoLmFwcGVuZCgnQWRkIGFub3RoZXIgbGluZS4nKQorICAgICAgICBlcShoLmVuY29kZSgpLCAiIiJcCitUaGlzIGlzIGFuIGV4YW1wbGUgb2Ygc3RyaW5nIHdoaWNoIGhhcyBhbG1vc3QgdGhlIGxpbWl0IG9mIGhlYWRlciBsZW5ndGguCisgQWRkIGFub3RoZXIgbGluZS4iIiIpCisKKyAgICBkZWYgdGVzdF9zaG9ydGVyX2xpbmVfd2l0aF9hcHBlbmQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIHMgPSAnVGhpcyBpcyBhIHNob3J0ZXIgbGluZS4nCisgICAgICAgIGggPSBIZWFkZXIocykKKyAgICAgICAgaC5hcHBlbmQoJ0FkZCBhbm90aGVyIHNlbnRlbmNlLiAoU3VycHJpc2U/KScpCisgICAgICAgIGVxKGguZW5jb2RlKCksCisgICAgICAgICAgICdUaGlzIGlzIGEgc2hvcnRlciBsaW5lLiBBZGQgYW5vdGhlciBzZW50ZW5jZS4gKFN1cnByaXNlPyknKQorCisgICAgZGVmIHRlc3RfbG9uZ19maWVsZF9uYW1lKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBmbiA9ICdYLVZlcnktVmVyeS1WZXJ5LUxvbmctSGVhZGVyLU5hbWUnCisgICAgICAgIGdzID0gIkRpZSBNaWV0ZXIgdHJldGVuIGhpZXIgZWluIHdlcmRlbiBtaXQgZWluZW0gRm9lcmRlcmJhbmQga29tZm9ydGFiZWwgZGVuIEtvcnJpZG9yIGVudGxhbmcsIGFuIHNceGZjZGxceGZjbmRpc2NoZW4gV2FuZGdlbVx4ZTRsZGVuIHZvcmJlaSwgZ2VnZW4gZGllIHJvdGllcmVuZGVuIEtsaW5nZW4gYmVmXHhmNnJkZXJ0LiAiCisgICAgICAgIGggPSBIZWFkZXIoZ3MsICdpc28tODg1OS0xJywgaGVhZGVyX25hbWU9Zm4pCisgICAgICAgICMgQkFXOiB0aGlzIHNlZW1zIGJyb2tlbiBiZWNhdXNlIHRoZSBmaXJzdCBsaW5lIGlzIHRvbyBsb25nCisgICAgICAgIGVxKGguZW5jb2RlKCksICIiIlwKKz0/aXNvLTg4NTktMT9xP0RpZV9NaWV0ZXJfdHJldGVuX2hpZXJfPz0KKyA9P2lzby04ODU5LTE/cT9laW5fd2VyZGVuX21pdF9laW5lbV9Gb2VyZGVyYmFuZF9rb21mb3J0YWJlbF9kZW5fS29ycmlkb3JfPz0KKyA9P2lzby04ODU5LTE/cT9lbnRsYW5nPTJDX2FuX3M9RkNkbD1GQ25kaXNjaGVuX1dhbmRnZW09RTRsZGVuX3ZvcmJlaT0yQ19nPz0KKyA9P2lzby04ODU5LTE/cT9lZ2VuX2RpZV9yb3RpZXJlbmRlbl9LbGluZ2VuX2JlZj1GNnJkZXJ0PTJFXz89IiIiKQorCisgICAgZGVmIHRlc3RfbG9uZ19yZWNlaXZlZF9oZWFkZXIoc2VsZik6CisgICAgICAgIGggPSAnZnJvbSBGT08uVExEICh2aXp3b3JsZC5hY2wuZm9vLnRsZCBbMTIzLjQ1Mi42NzguOV0pIGJ5IGhyb3RoZ2FyLmxhLm1hc3RhbGVyLmNvbSAodG1kYS1vZm1pcGQpIHdpdGggRVNNVFA7IFdlZCwgMDUgTWFyIDIwMDMgMTg6MTA6MTggLTA3MDAnCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ1JlY2VpdmVkLTEnXSA9IEhlYWRlcihoLCBjb250aW51YXRpb25fd3M9J1x0JykKKyAgICAgICAgbXNnWydSZWNlaXZlZC0yJ10gPSBoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmFzX3N0cmluZygpLCAiIiJcCitSZWNlaXZlZC0xOiBmcm9tIEZPTy5UTEQgKHZpendvcmxkLmFjbC5mb28udGxkIFsxMjMuNDUyLjY3OC45XSkgYnkKK1x0aHJvdGhnYXIubGEubWFzdGFsZXIuY29tICh0bWRhLW9mbWlwZCkgd2l0aCBFU01UUDsKK1x0V2VkLCAwNSBNYXIgMjAwMyAxODoxMDoxOCAtMDcwMAorUmVjZWl2ZWQtMjogZnJvbSBGT08uVExEICh2aXp3b3JsZC5hY2wuZm9vLnRsZCBbMTIzLjQ1Mi42NzguOV0pIGJ5CisgaHJvdGhnYXIubGEubWFzdGFsZXIuY29tICh0bWRhLW9mbWlwZCkgd2l0aCBFU01UUDsKKyBXZWQsIDA1IE1hciAyMDAzIDE4OjEwOjE4IC0wNzAwCisKKyIiIikKKworICAgIGRlZiB0ZXN0X3N0cmluZ19oZWFkZXJpbnN0X2VxKHNlbGYpOgorICAgICAgICBoID0gJzwxNTk3NS4xNzkwMS4yMDcyNDAuNDE0NjA0QHNnaWdyaXR6bWFubjEubWF0aGVtYXRpay50dS1tdWVuY2hlbi5kZT4gKERhdmlkIEJyZW1uZXJcJ3MgbWVzc2FnZSBvZiAiVGh1LCA2IE1hciAyMDAzIDEzOjU4OjIxICswMTAwIiknCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ1JlY2VpdmVkJ10gPSBIZWFkZXIoaCwgaGVhZGVyX25hbWU9J1JlY2VpdmVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVhdGlvbl93cz0nXHQnKQorICAgICAgICBtc2dbJ1JlY2VpdmVkJ10gPSBoCisgICAgICAgIHNlbGYubmRpZmZBc3NlcnRFcXVhbChtc2cuYXNfc3RyaW5nKCksICIiIlwKK1JlY2VpdmVkOiA8MTU5NzUuMTc5MDEuMjA3MjQwLjQxNDYwNEBzZ2lncml0em1hbm4xLm1hdGhlbWF0aWsudHUtbXVlbmNoZW4uZGU+CitcdChEYXZpZCBCcmVtbmVyJ3MgbWVzc2FnZSBvZiAiVGh1LCA2IE1hciAyMDAzIDEzOjU4OjIxICswMTAwIikKK1JlY2VpdmVkOiA8MTU5NzUuMTc5MDEuMjA3MjQwLjQxNDYwNEBzZ2lncml0em1hbm4xLm1hdGhlbWF0aWsudHUtbXVlbmNoZW4uZGU+CisgKERhdmlkIEJyZW1uZXIncyBtZXNzYWdlIG9mICJUaHUsIDYgTWFyIDIwMDMgMTM6NTg6MjEgKzAxMDAiKQorCisiIiIpCisKKyAgICBkZWYgdGVzdF9sb25nX3VuYnJlYWthYmxlX2xpbmVzX3dpdGhfY29udGludWF0aW9uKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgdCA9ICIiIlwKKyBpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0JBTUFBQUNsTE9TMEFBQUFHRkJNVkVVQUFBQWtIaUplUlVJY0dCaTkKKyBsb2NRRFE0ekp5a0ZCQVhKZldEakFBQUNZVWxFUVZSNG5GMlRRWS9qSUF5RmM2bHlkbEc1eDhOeXAxWTY5d2oxUE4ySTVnenAiIiIKKyAgICAgICAgbXNnWydGYWNlLTEnXSA9IHQKKyAgICAgICAgbXNnWydGYWNlLTInXSA9IEhlYWRlcih0LCBoZWFkZXJfbmFtZT0nRmFjZS0yJykKKyAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCAiIiJcCitGYWNlLTE6IGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3QkFNQUFBQ2xMT1MwQUFBQUdGQk1WRVVBQUFBa0hpSmVSVUljR0JpOQorIGxvY1FEUTR6SnlrRkJBWEpmV0RqQUFBQ1lVbEVRVlI0bkYyVFFZL2pJQXlGYzZseWRsRzV4OE55cDFZNjl3ajFQTjJJNWd6cAorRmFjZS0yOiBpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0JBTUFBQUNsTE9TMEFBQUFHRkJNVkVVQUFBQWtIaUplUlVJY0dCaTkKKyBsb2NRRFE0ekp5a0ZCQVhKZldEakFBQUNZVWxFUVZSNG5GMlRRWS9qSUF5RmM2bHlkbEc1eDhOeXAxWTY5d2oxUE4ySTVnenAKKworIiIiKQorCisgICAgZGVmIHRlc3RfYW5vdGhlcl9sb25nX211bHRpbGluZV9oZWFkZXIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIG0gPSAnJydcCitSZWNlaXZlZDogZnJvbSBzaWltYWdlLmNvbSAoWzE3Mi4yNS4xLjNdKSBieSB6aW1hLnNpbGljb25pbWFnZS5jb20gd2l0aCBNaWNyb3NvZnQgU01UUFNWQyg1LjAuMjE5NS40OTA1KTsKKyBXZWQsIDE2IE9jdCAyMDAyIDA3OjQxOjExIC0wNzAwJycnCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKKyAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCAnJydcCitSZWNlaXZlZDogZnJvbSBzaWltYWdlLmNvbSAoWzE3Mi4yNS4xLjNdKSBieSB6aW1hLnNpbGljb25pbWFnZS5jb20gd2l0aAorIE1pY3Jvc29mdCBTTVRQU1ZDKDUuMC4yMTk1LjQ5MDUpOyBXZWQsIDE2IE9jdCAyMDAyIDA3OjQxOjExIC0wNzAwCisKKycnJykKKworICAgIGRlZiB0ZXN0X2xvbmdfbGluZXNfd2l0aF9kaWZmZXJlbnRfaGVhZGVyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBoID0gIiIiXAorTGlzdC1VbnN1YnNjcmliZTogPGh0dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL3NwYW1hc3Nhc3Npbi10YWxrPiwKKyAgICAgICAgPG1haWx0bzpzcGFtYXNzYXNzaW4tdGFsay1yZXF1ZXN0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD9zdWJqZWN0PXVuc3Vic2NyaWJlPiIiIgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnWydMaXN0J10gPSBoCisgICAgICAgIG1zZ1snTGlzdCddID0gSGVhZGVyKGgsIGhlYWRlcl9uYW1lPSdMaXN0JykKKyAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCAiIiJcCitMaXN0OiBMaXN0LVVuc3Vic2NyaWJlOiA8aHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vc3BhbWFzc2Fzc2luLXRhbGs+LAorIDxtYWlsdG86c3BhbWFzc2Fzc2luLXRhbGstcmVxdWVzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ/c3ViamVjdD11bnN1YnNjcmliZT4KK0xpc3Q6IExpc3QtVW5zdWJzY3JpYmU6IDxodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9zcGFtYXNzYXNzaW4tdGFsaz4sCisgPG1haWx0bzpzcGFtYXNzYXNzaW4tdGFsay1yZXF1ZXN0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD9zdWJqZWN0PXVuc3Vic2NyaWJlPgorCisiIiIpCisKKworCisjIFRlc3QgbWFuZ2xpbmcgb2YgIkZyb20gIiBsaW5lcyBpbiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UKK2NsYXNzIFRlc3RGcm9tTWFuZ2xpbmcodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5tc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgc2VsZi5tc2dbJ0Zyb20nXSA9ICdhYWFAYmJiLm9yZycKKyAgICAgICAgc2VsZi5tc2cuc2V0X3BheWxvYWQoIiIiXAorRnJvbSB0aGUgZGVzayBvZiBBLkEuQS46CitCbGFoIGJsYWggYmxhaAorIiIiKQorCisgICAgZGVmIHRlc3RfbWFuZ2xlZF9mcm9tKHNlbGYpOgorICAgICAgICBzID0gU3RyaW5nSU8oKQorICAgICAgICBnID0gR2VuZXJhdG9yKHMsIG1hbmdsZV9mcm9tXz1UcnVlKQorICAgICAgICBnLmZsYXR0ZW4oc2VsZi5tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCAiIiJcCitGcm9tOiBhYWFAYmJiLm9yZworCis+RnJvbSB0aGUgZGVzayBvZiBBLkEuQS46CitCbGFoIGJsYWggYmxhaAorIiIiKQorCisgICAgZGVmIHRlc3RfZG9udF9tYW5nbGVfZnJvbShzZWxmKToKKyAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgZyA9IEdlbmVyYXRvcihzLCBtYW5nbGVfZnJvbV89RmFsc2UpCisgICAgICAgIGcuZmxhdHRlbihzZWxmLm1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksICIiIlwKK0Zyb206IGFhYUBiYmIub3JnCisKK0Zyb20gdGhlIGRlc2sgb2YgQS5BLkEuOgorQmxhaCBibGFoIGJsYWgKKyIiIikKKworICAgIGRlZiB0ZXN0X21hbmdsZV9mcm9tX2luX3ByZWFtYmxlX2FuZF9lcGlsb2coc2VsZik6CisgICAgICAgIHMgPSBTdHJpbmdJTygpCisgICAgICAgIGcgPSBHZW5lcmF0b3IocywgbWFuZ2xlX2Zyb21fPVRydWUpCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcodGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIEZyb206IGZvb0BiYXIuY29tCisgICAgICAgICAgICBNaW1lLVZlcnNpb246IDEuMAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PVhYWAorCisgICAgICAgICAgICBGcm9tIHNvbWV3aGVyZSB1bmtub3duCisKKyAgICAgICAgICAgIC0tWFhYCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgZm9vCisKKyAgICAgICAgICAgIC0tWFhYLS0KKworICAgICAgICAgICAgRnJvbSBzb21ld2hlcmUgdW5rbm93YWJsZQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgZy5mbGF0dGVuKG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oWzEgZm9yIHggaW4gcy5nZXR2YWx1ZSgpLnNwbGl0KCdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeC5zdGFydHN3aXRoKCc+RnJvbSAnKV0pLCAyKQorCisKKyMgVGVzdCB0aGUgYmFzaWMgTUlNRUF1ZGlvIGNsYXNzCitjbGFzcyBUZXN0TUlNRUF1ZGlvKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHdlIHBpY2sgdXAgdGhlIGF1ZGlvdGVzdC5hdSB0aGF0IGxpdmVzIGluIGVtYWlsL3Rlc3QvZGF0YS4KKyAgICAgICAgIyBJbiBQeXRob24sIHRoZXJlJ3MgYW4gYXVkaW90ZXN0LmF1IGxpdmluZyBpbiBMaWIvdGVzdCBidXQgdGhhdCBpc24ndAorICAgICAgICAjIGluY2x1ZGVkIGluIHNvbWUgYmluYXJ5IGRpc3Ryb3MgdGhhdCBkb24ndCBpbmNsdWRlIHRoZSB0ZXN0CisgICAgICAgICMgcGFja2FnZS4gIFRoZSB0cmFpbGluZyBlbXB0eSBzdHJpbmcgb24gdGhlIC5qb2luKCkgaXMgc2lnbmlmaWNhbnQKKyAgICAgICAgIyBzaW5jZSBmaW5kZmlsZSgpIHdpbGwgZG8gYSBkaXJuYW1lKCkuCisgICAgICAgIGRhdGFkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGxhbmRtYXJrKSwgJ2RhdGEnLCAnJykKKyAgICAgICAgZnAgPSBvcGVuKGZpbmRmaWxlKCdhdWRpb3Rlc3QuYXUnLCBkYXRhZGlyKSwgJ3JiJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fYXVkaW9kYXRhID0gZnAucmVhZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHNlbGYuX2F1ID0gTUlNRUF1ZGlvKHNlbGYuX2F1ZGlvZGF0YSkKKworICAgIGRlZiB0ZXN0X2d1ZXNzX21pbm9yX3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYXUuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnYXVkaW8vYmFzaWMnKQorCisgICAgZGVmIHRlc3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHBheWxvYWQgPSBzZWxmLl9hdS5nZXRfcGF5bG9hZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZTY0LmRlY29kZXN0cmluZyhwYXlsb2FkKSwgc2VsZi5fYXVkaW9kYXRhKQorCisgICAgZGVmIHRlc3RfY2hlY2tTZXRNaW5vcihzZWxmKToKKyAgICAgICAgYXUgPSBNSU1FQXVkaW8oc2VsZi5fYXVkaW9kYXRhLCAnZmlzaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXUuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnYXVkaW8vZmlzaCcpCisKKyAgICBkZWYgdGVzdF9hZGRfaGVhZGVyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCisgICAgICAgIHNlbGYuX2F1LmFkZF9oZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9J2F1ZGlvdGVzdC5hdScpCisgICAgICAgIGVxKHNlbGYuX2F1Wydjb250ZW50LWRpc3Bvc2l0aW9uJ10sCisgICAgICAgICAgICdhdHRhY2htZW50OyBmaWxlbmFtZT0iYXVkaW90ZXN0LmF1IicpCisgICAgICAgIGVxKHNlbGYuX2F1LmdldF9wYXJhbXMoaGVhZGVyPSdjb250ZW50LWRpc3Bvc2l0aW9uJyksCisgICAgICAgICAgIFsoJ2F0dGFjaG1lbnQnLCAnJyksICgnZmlsZW5hbWUnLCAnYXVkaW90ZXN0LmF1JyldKQorICAgICAgICBlcShzZWxmLl9hdS5nZXRfcGFyYW0oJ2ZpbGVuYW1lJywgaGVhZGVyPSdjb250ZW50LWRpc3Bvc2l0aW9uJyksCisgICAgICAgICAgICdhdWRpb3Rlc3QuYXUnKQorICAgICAgICBtaXNzaW5nID0gW10KKyAgICAgICAgZXEoc2VsZi5fYXUuZ2V0X3BhcmFtKCdhdHRhY2htZW50JywgaGVhZGVyPSdjb250ZW50LWRpc3Bvc2l0aW9uJyksICcnKQorICAgICAgICB1bmxlc3Moc2VsZi5fYXUuZ2V0X3BhcmFtKCdmb28nLCBmYWlsb2JqPW1pc3NpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyPSdjb250ZW50LWRpc3Bvc2l0aW9uJykgaXMgbWlzc2luZykKKyAgICAgICAgIyBUcnkgc29tZSBtaXNzaW5nIHN0dWZmCisgICAgICAgIHVubGVzcyhzZWxmLl9hdS5nZXRfcGFyYW0oJ2Zvb2JhcicsIG1pc3NpbmcpIGlzIG1pc3NpbmcpCisgICAgICAgIHVubGVzcyhzZWxmLl9hdS5nZXRfcGFyYW0oJ2F0dGFjaG1lbnQnLCBtaXNzaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcj0nZm9vYmFyJykgaXMgbWlzc2luZykKKworCisKKyMgVGVzdCB0aGUgYmFzaWMgTUlNRUltYWdlIGNsYXNzCitjbGFzcyBUZXN0TUlNRUltYWdlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGZwID0gb3BlbmZpbGUoJ1B5QmFubmVyMDQ4LmdpZicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2ltZ2RhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5faW0gPSBNSU1FSW1hZ2Uoc2VsZi5faW1nZGF0YSkKKworICAgIGRlZiB0ZXN0X2d1ZXNzX21pbm9yX3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5faW0uZ2V0X2NvbnRlbnRfdHlwZSgpLCAnaW1hZ2UvZ2lmJykKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgorICAgICAgICBwYXlsb2FkID0gc2VsZi5faW0uZ2V0X3BheWxvYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2U2NC5kZWNvZGVzdHJpbmcocGF5bG9hZCksIHNlbGYuX2ltZ2RhdGEpCisKKyAgICBkZWYgdGVzdF9jaGVja1NldE1pbm9yKHNlbGYpOgorICAgICAgICBpbSA9IE1JTUVJbWFnZShzZWxmLl9pbWdkYXRhLCAnZmlzaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW0uZ2V0X2NvbnRlbnRfdHlwZSgpLCAnaW1hZ2UvZmlzaCcpCisKKyAgICBkZWYgdGVzdF9hZGRfaGVhZGVyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCisgICAgICAgIHNlbGYuX2ltLmFkZF9oZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9J2Rpbmd1c2Zpc2guZ2lmJykKKyAgICAgICAgZXEoc2VsZi5faW1bJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSwKKyAgICAgICAgICAgJ2F0dGFjaG1lbnQ7IGZpbGVuYW1lPSJkaW5ndXNmaXNoLmdpZiInKQorICAgICAgICBlcShzZWxmLl9pbS5nZXRfcGFyYW1zKGhlYWRlcj0nY29udGVudC1kaXNwb3NpdGlvbicpLAorICAgICAgICAgICBbKCdhdHRhY2htZW50JywgJycpLCAoJ2ZpbGVuYW1lJywgJ2Rpbmd1c2Zpc2guZ2lmJyldKQorICAgICAgICBlcShzZWxmLl9pbS5nZXRfcGFyYW0oJ2ZpbGVuYW1lJywgaGVhZGVyPSdjb250ZW50LWRpc3Bvc2l0aW9uJyksCisgICAgICAgICAgICdkaW5ndXNmaXNoLmdpZicpCisgICAgICAgIG1pc3NpbmcgPSBbXQorICAgICAgICBlcShzZWxmLl9pbS5nZXRfcGFyYW0oJ2F0dGFjaG1lbnQnLCBoZWFkZXI9J2NvbnRlbnQtZGlzcG9zaXRpb24nKSwgJycpCisgICAgICAgIHVubGVzcyhzZWxmLl9pbS5nZXRfcGFyYW0oJ2ZvbycsIGZhaWxvYmo9bWlzc2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI9J2NvbnRlbnQtZGlzcG9zaXRpb24nKSBpcyBtaXNzaW5nKQorICAgICAgICAjIFRyeSBzb21lIG1pc3Npbmcgc3R1ZmYKKyAgICAgICAgdW5sZXNzKHNlbGYuX2ltLmdldF9wYXJhbSgnZm9vYmFyJywgbWlzc2luZykgaXMgbWlzc2luZykKKyAgICAgICAgdW5sZXNzKHNlbGYuX2ltLmdldF9wYXJhbSgnYXR0YWNobWVudCcsIG1pc3NpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyPSdmb29iYXInKSBpcyBtaXNzaW5nKQorCisKKworIyBUZXN0IHRoZSBiYXNpYyBNSU1FVGV4dCBjbGFzcworY2xhc3MgVGVzdE1JTUVUZXh0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX21zZyA9IE1JTUVUZXh0KCdoZWxsbyB0aGVyZScpCisKKyAgICBkZWYgdGVzdF90eXBlcyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICBlcShzZWxmLl9tc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIGVxKHNlbGYuX21zZy5nZXRfcGFyYW0oJ2NoYXJzZXQnKSwgJ3VzLWFzY2lpJykKKyAgICAgICAgbWlzc2luZyA9IFtdCisgICAgICAgIHVubGVzcyhzZWxmLl9tc2cuZ2V0X3BhcmFtKCdmb29iYXInLCBtaXNzaW5nKSBpcyBtaXNzaW5nKQorICAgICAgICB1bmxlc3Moc2VsZi5fbXNnLmdldF9wYXJhbSgnY2hhcnNldCcsIG1pc3NpbmcsIGhlYWRlcj0nZm9vYmFyJykKKyAgICAgICAgICAgICAgIGlzIG1pc3NpbmcpCisKKyAgICBkZWYgdGVzdF9wYXlsb2FkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX21zZy5nZXRfcGF5bG9hZCgpLCAnaGVsbG8gdGhlcmUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYuX21zZy5pc19tdWx0aXBhcnQoKSkKKworICAgIGRlZiB0ZXN0X2NoYXJzZXQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNSU1FVGV4dCgnaGVsbG8gdGhlcmUnLCBfY2hhcnNldD0ndXMtYXNjaWknKQorICAgICAgICBlcShtc2cuZ2V0X2NoYXJzZXQoKS5pbnB1dF9jaGFyc2V0LCAndXMtYXNjaWknKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHlwZSddLCAndGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiJykKKworICAgIGRlZiB0ZXN0XzdiaXRfdW5pY29kZV9pbnB1dChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1JTUVUZXh0KHUnaGVsbG8gdGhlcmUnLCBfY2hhcnNldD0ndXMtYXNjaWknKQorICAgICAgICBlcShtc2cuZ2V0X2NoYXJzZXQoKS5pbnB1dF9jaGFyc2V0LCAndXMtYXNjaWknKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHlwZSddLCAndGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiJykKKworICAgIGRlZiB0ZXN0XzdiaXRfdW5pY29kZV9pbnB1dF9ub19jaGFyc2V0KHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gTUlNRVRleHQodSdoZWxsbyB0aGVyZScpCisgICAgICAgIGVxKG1zZy5nZXRfY2hhcnNldCgpLCAndXMtYXNjaWknKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHlwZSddLCAndGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdoZWxsbyB0aGVyZScgaW4gbXNnLmFzX3N0cmluZygpKQorCisgICAgZGVmIHRlc3RfOGJpdF91bmljb2RlX2lucHV0KHNlbGYpOgorICAgICAgICB0ZXN0c3RyID0gdSdcdTA0M2FcdTA0MzhcdTA0NDBcdTA0MzhcdTA0M2JcdTA0MzhcdTA0NDZcdTA0MzAnCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNSU1FVGV4dCh0ZXN0c3RyLCBfY2hhcnNldD0ndXRmLTgnKQorICAgICAgICBlcShtc2cuZ2V0X2NoYXJzZXQoKS5vdXRwdXRfY2hhcnNldCwgJ3V0Zi04JykKKyAgICAgICAgZXEobXNnWydjb250ZW50LXR5cGUnXSwgJ3RleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IicpCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksIHRlc3RzdHIuZW5jb2RlKCd1dGYtOCcpKQorCisgICAgZGVmIHRlc3RfOGJpdF91bmljb2RlX2lucHV0X25vX2NoYXJzZXQoc2VsZik6CisgICAgICAgIHRlc3RzdHIgPSB1J1x1MDQzYVx1MDQzOFx1MDQ0MFx1MDQzOFx1MDQzYlx1MDQzOFx1MDQ0Nlx1MDQzMCcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBNSU1FVGV4dCwgdGVzdHN0cikKKworCisKKyMgVGVzdCBjb21wbGljYXRlZCBtdWx0aXBhcnQvKiBtZXNzYWdlcworY2xhc3MgVGVzdE11bHRpcGFydChUZXN0RW1haWxCYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGZwID0gb3BlbmZpbGUoJ1B5QmFubmVyMDQ4LmdpZicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKworICAgICAgICBjb250YWluZXIgPSBNSU1FQmFzZSgnbXVsdGlwYXJ0JywgJ21peGVkJywgYm91bmRhcnk9J0JPVU5EQVJZJykKKyAgICAgICAgaW1hZ2UgPSBNSU1FSW1hZ2UoZGF0YSwgbmFtZT0nZGluZ3VzZmlzaC5naWYnKQorICAgICAgICBpbWFnZS5hZGRfaGVhZGVyKCdjb250ZW50LWRpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPSdkaW5ndXNmaXNoLmdpZicpCisgICAgICAgIGludHJvID0gTUlNRVRleHQoJycnXAorSGkgdGhlcmUsCisKK1RoaXMgaXMgdGhlIGRpbmd1cyBmaXNoLgorJycnKQorICAgICAgICBjb250YWluZXIuYXR0YWNoKGludHJvKQorICAgICAgICBjb250YWluZXIuYXR0YWNoKGltYWdlKQorICAgICAgICBjb250YWluZXJbJ0Zyb20nXSA9ICdCYXJyeSA8YmFycnlAZGlnaWNvb2wuY29tPicKKyAgICAgICAgY29udGFpbmVyWydUbyddID0gJ0Rpbmd1cyBMb3ZlcnMgPGNyYXZpbmRvZ3NAY3JhdmluZG9ncy5jb20+JworICAgICAgICBjb250YWluZXJbJ1N1YmplY3QnXSA9ICdIZXJlIGlzIHlvdXIgZGluZ3VzIGZpc2gnCisKKyAgICAgICAgbm93ID0gOTg3ODA5NzAyLjU0ODQ4NTk5CisgICAgICAgIHRpbWV0dXBsZSA9IHRpbWUubG9jYWx0aW1lKG5vdykKKyAgICAgICAgaWYgdGltZXR1cGxlWy0xXSA9PSAwOgorICAgICAgICAgICAgdHpzZWNzID0gdGltZS50aW1lem9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHpzZWNzID0gdGltZS5hbHR6b25lCisgICAgICAgIGlmIHR6c2VjcyA+IDA6CisgICAgICAgICAgICBzaWduID0gJy0nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaWduID0gJysnCisgICAgICAgIHR6b2Zmc2V0ID0gJyAlcyUwNGQnICUgKHNpZ24sIHR6c2VjcyAvLyAzNikKKyAgICAgICAgY29udGFpbmVyWydEYXRlJ10gPSB0aW1lLnN0cmZ0aW1lKAorICAgICAgICAgICAgJyVhLCAlZCAlYiAlWSAlSDolTTolUycsCisgICAgICAgICAgICB0aW1lLmxvY2FsdGltZShub3cpKSArIHR6b2Zmc2V0CisgICAgICAgIHNlbGYuX21zZyA9IGNvbnRhaW5lcgorICAgICAgICBzZWxmLl9pbSA9IGltYWdlCisgICAgICAgIHNlbGYuX3R4dCA9IGludHJvCisKKyAgICBkZWYgdGVzdF9oaWVyYXJjaHkoc2VsZik6CisgICAgICAgICMgY29udmVuaWVuY2UKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICByYWlzZXMgPSBzZWxmLmFzc2VydFJhaXNlcworICAgICAgICAjIHRlc3RzCisgICAgICAgIG0gPSBzZWxmLl9tc2cKKyAgICAgICAgdW5sZXNzKG0uaXNfbXVsdGlwYXJ0KCkpCisgICAgICAgIGVxKG0uZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbXVsdGlwYXJ0L21peGVkJykKKyAgICAgICAgZXEobGVuKG0uZ2V0X3BheWxvYWQoKSksIDIpCisgICAgICAgIHJhaXNlcyhJbmRleEVycm9yLCBtLmdldF9wYXlsb2FkLCAyKQorICAgICAgICBtMCA9IG0uZ2V0X3BheWxvYWQoMCkKKyAgICAgICAgbTEgPSBtLmdldF9wYXlsb2FkKDEpCisgICAgICAgIHVubGVzcyhtMCBpcyBzZWxmLl90eHQpCisgICAgICAgIHVubGVzcyhtMSBpcyBzZWxmLl9pbSkKKyAgICAgICAgZXEobS5nZXRfcGF5bG9hZCgpLCBbbTAsIG0xXSkKKyAgICAgICAgdW5sZXNzKG5vdCBtMC5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgdW5sZXNzKG5vdCBtMS5pc19tdWx0aXBhcnQoKSkKKworICAgIGRlZiB0ZXN0X2VtcHR5X211bHRpcGFydF9pZGVtcG90ZW50KHNlbGYpOgorICAgICAgICB0ZXh0ID0gIiIiXAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJCT1VOREFSWSIKK01JTUUtVmVyc2lvbjogMS4wCitTdWJqZWN0OiBBIHN1YmplY3QKK1RvOiBhcGVyc29uQGRvbS5haW4KK0Zyb206IGJwZXJzb25AZG9tLmFpbgorCisKKy0tQk9VTkRBUlkKKworCistLUJPVU5EQVJZLS0KKyIiIgorICAgICAgICBtc2cgPSBQYXJzZXIoKS5wYXJzZXN0cih0ZXh0KQorICAgICAgICBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwodGV4dCwgbXNnLmFzX3N0cmluZygpKQorCisgICAgZGVmIHRlc3Rfbm9fcGFydHNfaW5fYV9tdWx0aXBhcnRfd2l0aF9ub25lX2VwaWxvZ3VlKHNlbGYpOgorICAgICAgICBvdXRlciA9IE1JTUVCYXNlKCdtdWx0aXBhcnQnLCAnbWl4ZWQnKQorICAgICAgICBvdXRlclsnU3ViamVjdCddID0gJ0Egc3ViamVjdCcKKyAgICAgICAgb3V0ZXJbJ1RvJ10gPSAnYXBlcnNvbkBkb20uYWluJworICAgICAgICBvdXRlclsnRnJvbSddID0gJ2JwZXJzb25AZG9tLmFpbicKKyAgICAgICAgb3V0ZXIuc2V0X2JvdW5kYXJ5KCdCT1VOREFSWScpCisgICAgICAgIHNlbGYubmRpZmZBc3NlcnRFcXVhbChvdXRlci5hc19zdHJpbmcoKSwgJycnXAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJCT1VOREFSWSIKK01JTUUtVmVyc2lvbjogMS4wCitTdWJqZWN0OiBBIHN1YmplY3QKK1RvOiBhcGVyc29uQGRvbS5haW4KK0Zyb206IGJwZXJzb25AZG9tLmFpbgorCistLUJPVU5EQVJZCisKKy0tQk9VTkRBUlktLScnJykKKworICAgIGRlZiB0ZXN0X25vX3BhcnRzX2luX2FfbXVsdGlwYXJ0X3dpdGhfZW1wdHlfZXBpbG9ndWUoc2VsZik6CisgICAgICAgIG91dGVyID0gTUlNRUJhc2UoJ211bHRpcGFydCcsICdtaXhlZCcpCisgICAgICAgIG91dGVyWydTdWJqZWN0J10gPSAnQSBzdWJqZWN0JworICAgICAgICBvdXRlclsnVG8nXSA9ICdhcGVyc29uQGRvbS5haW4nCisgICAgICAgIG91dGVyWydGcm9tJ10gPSAnYnBlcnNvbkBkb20uYWluJworICAgICAgICBvdXRlci5wcmVhbWJsZSA9ICcnCisgICAgICAgIG91dGVyLmVwaWxvZ3VlID0gJycKKyAgICAgICAgb3V0ZXIuc2V0X2JvdW5kYXJ5KCdCT1VOREFSWScpCisgICAgICAgIHNlbGYubmRpZmZBc3NlcnRFcXVhbChvdXRlci5hc19zdHJpbmcoKSwgJycnXAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJCT1VOREFSWSIKK01JTUUtVmVyc2lvbjogMS4wCitTdWJqZWN0OiBBIHN1YmplY3QKK1RvOiBhcGVyc29uQGRvbS5haW4KK0Zyb206IGJwZXJzb25AZG9tLmFpbgorCisKKy0tQk9VTkRBUlkKKworLS1CT1VOREFSWS0tCisnJycpCisKKyAgICBkZWYgdGVzdF9vbmVfcGFydF9pbl9hX211bHRpcGFydChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgb3V0ZXIgPSBNSU1FQmFzZSgnbXVsdGlwYXJ0JywgJ21peGVkJykKKyAgICAgICAgb3V0ZXJbJ1N1YmplY3QnXSA9ICdBIHN1YmplY3QnCisgICAgICAgIG91dGVyWydUbyddID0gJ2FwZXJzb25AZG9tLmFpbicKKyAgICAgICAgb3V0ZXJbJ0Zyb20nXSA9ICdicGVyc29uQGRvbS5haW4nCisgICAgICAgIG91dGVyLnNldF9ib3VuZGFyeSgnQk9VTkRBUlknKQorICAgICAgICBtc2cgPSBNSU1FVGV4dCgnaGVsbG8gd29ybGQnKQorICAgICAgICBvdXRlci5hdHRhY2gobXNnKQorICAgICAgICBlcShvdXRlci5hc19zdHJpbmcoKSwgJycnXAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJCT1VOREFSWSIKK01JTUUtVmVyc2lvbjogMS4wCitTdWJqZWN0OiBBIHN1YmplY3QKK1RvOiBhcGVyc29uQGRvbS5haW4KK0Zyb206IGJwZXJzb25AZG9tLmFpbgorCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworaGVsbG8gd29ybGQKKy0tQk9VTkRBUlktLScnJykKKworICAgIGRlZiB0ZXN0X3NlcV9wYXJ0c19pbl9hX211bHRpcGFydF93aXRoX2VtcHR5X3ByZWFtYmxlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBvdXRlciA9IE1JTUVCYXNlKCdtdWx0aXBhcnQnLCAnbWl4ZWQnKQorICAgICAgICBvdXRlclsnU3ViamVjdCddID0gJ0Egc3ViamVjdCcKKyAgICAgICAgb3V0ZXJbJ1RvJ10gPSAnYXBlcnNvbkBkb20uYWluJworICAgICAgICBvdXRlclsnRnJvbSddID0gJ2JwZXJzb25AZG9tLmFpbicKKyAgICAgICAgb3V0ZXIucHJlYW1ibGUgPSAnJworICAgICAgICBtc2cgPSBNSU1FVGV4dCgnaGVsbG8gd29ybGQnKQorICAgICAgICBvdXRlci5hdHRhY2gobXNnKQorICAgICAgICBvdXRlci5zZXRfYm91bmRhcnkoJ0JPVU5EQVJZJykKKyAgICAgICAgZXEob3V0ZXIuYXNfc3RyaW5nKCksICcnJ1wKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iQk9VTkRBUlkiCitNSU1FLVZlcnNpb246IDEuMAorU3ViamVjdDogQSBzdWJqZWN0CitUbzogYXBlcnNvbkBkb20uYWluCitGcm9tOiBicGVyc29uQGRvbS5haW4KKworCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworaGVsbG8gd29ybGQKKy0tQk9VTkRBUlktLScnJykKKworCisgICAgZGVmIHRlc3Rfc2VxX3BhcnRzX2luX2FfbXVsdGlwYXJ0X3dpdGhfbm9uZV9wcmVhbWJsZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgb3V0ZXIgPSBNSU1FQmFzZSgnbXVsdGlwYXJ0JywgJ21peGVkJykKKyAgICAgICAgb3V0ZXJbJ1N1YmplY3QnXSA9ICdBIHN1YmplY3QnCisgICAgICAgIG91dGVyWydUbyddID0gJ2FwZXJzb25AZG9tLmFpbicKKyAgICAgICAgb3V0ZXJbJ0Zyb20nXSA9ICdicGVyc29uQGRvbS5haW4nCisgICAgICAgIG91dGVyLnByZWFtYmxlID0gTm9uZQorICAgICAgICBtc2cgPSBNSU1FVGV4dCgnaGVsbG8gd29ybGQnKQorICAgICAgICBvdXRlci5hdHRhY2gobXNnKQorICAgICAgICBvdXRlci5zZXRfYm91bmRhcnkoJ0JPVU5EQVJZJykKKyAgICAgICAgZXEob3V0ZXIuYXNfc3RyaW5nKCksICcnJ1wKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iQk9VTkRBUlkiCitNSU1FLVZlcnNpb246IDEuMAorU3ViamVjdDogQSBzdWJqZWN0CitUbzogYXBlcnNvbkBkb20uYWluCitGcm9tOiBicGVyc29uQGRvbS5haW4KKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKK2hlbGxvIHdvcmxkCistLUJPVU5EQVJZLS0nJycpCisKKworICAgIGRlZiB0ZXN0X3NlcV9wYXJ0c19pbl9hX211bHRpcGFydF93aXRoX25vbmVfZXBpbG9ndWUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIG91dGVyID0gTUlNRUJhc2UoJ211bHRpcGFydCcsICdtaXhlZCcpCisgICAgICAgIG91dGVyWydTdWJqZWN0J10gPSAnQSBzdWJqZWN0JworICAgICAgICBvdXRlclsnVG8nXSA9ICdhcGVyc29uQGRvbS5haW4nCisgICAgICAgIG91dGVyWydGcm9tJ10gPSAnYnBlcnNvbkBkb20uYWluJworICAgICAgICBvdXRlci5lcGlsb2d1ZSA9IE5vbmUKKyAgICAgICAgbXNnID0gTUlNRVRleHQoJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgb3V0ZXIuYXR0YWNoKG1zZykKKyAgICAgICAgb3V0ZXIuc2V0X2JvdW5kYXJ5KCdCT1VOREFSWScpCisgICAgICAgIGVxKG91dGVyLmFzX3N0cmluZygpLCAnJydcCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9IkJPVU5EQVJZIgorTUlNRS1WZXJzaW9uOiAxLjAKK1N1YmplY3Q6IEEgc3ViamVjdAorVG86IGFwZXJzb25AZG9tLmFpbgorRnJvbTogYnBlcnNvbkBkb20uYWluCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCitoZWxsbyB3b3JsZAorLS1CT1VOREFSWS0tJycnKQorCisKKyAgICBkZWYgdGVzdF9zZXFfcGFydHNfaW5fYV9tdWx0aXBhcnRfd2l0aF9lbXB0eV9lcGlsb2d1ZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgb3V0ZXIgPSBNSU1FQmFzZSgnbXVsdGlwYXJ0JywgJ21peGVkJykKKyAgICAgICAgb3V0ZXJbJ1N1YmplY3QnXSA9ICdBIHN1YmplY3QnCisgICAgICAgIG91dGVyWydUbyddID0gJ2FwZXJzb25AZG9tLmFpbicKKyAgICAgICAgb3V0ZXJbJ0Zyb20nXSA9ICdicGVyc29uQGRvbS5haW4nCisgICAgICAgIG91dGVyLmVwaWxvZ3VlID0gJycKKyAgICAgICAgbXNnID0gTUlNRVRleHQoJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgb3V0ZXIuYXR0YWNoKG1zZykKKyAgICAgICAgb3V0ZXIuc2V0X2JvdW5kYXJ5KCdCT1VOREFSWScpCisgICAgICAgIGVxKG91dGVyLmFzX3N0cmluZygpLCAnJydcCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9IkJPVU5EQVJZIgorTUlNRS1WZXJzaW9uOiAxLjAKK1N1YmplY3Q6IEEgc3ViamVjdAorVG86IGFwZXJzb25AZG9tLmFpbgorRnJvbTogYnBlcnNvbkBkb20uYWluCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCitoZWxsbyB3b3JsZAorLS1CT1VOREFSWS0tCisnJycpCisKKworICAgIGRlZiB0ZXN0X3NlcV9wYXJ0c19pbl9hX211bHRpcGFydF93aXRoX25sX2VwaWxvZ3VlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBvdXRlciA9IE1JTUVCYXNlKCdtdWx0aXBhcnQnLCAnbWl4ZWQnKQorICAgICAgICBvdXRlclsnU3ViamVjdCddID0gJ0Egc3ViamVjdCcKKyAgICAgICAgb3V0ZXJbJ1RvJ10gPSAnYXBlcnNvbkBkb20uYWluJworICAgICAgICBvdXRlclsnRnJvbSddID0gJ2JwZXJzb25AZG9tLmFpbicKKyAgICAgICAgb3V0ZXIuZXBpbG9ndWUgPSAnXG4nCisgICAgICAgIG1zZyA9IE1JTUVUZXh0KCdoZWxsbyB3b3JsZCcpCisgICAgICAgIG91dGVyLmF0dGFjaChtc2cpCisgICAgICAgIG91dGVyLnNldF9ib3VuZGFyeSgnQk9VTkRBUlknKQorICAgICAgICBlcShvdXRlci5hc19zdHJpbmcoKSwgJycnXAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJCT1VOREFSWSIKK01JTUUtVmVyc2lvbjogMS4wCitTdWJqZWN0OiBBIHN1YmplY3QKK1RvOiBhcGVyc29uQGRvbS5haW4KK0Zyb206IGJwZXJzb25AZG9tLmFpbgorCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworaGVsbG8gd29ybGQKKy0tQk9VTkRBUlktLQorCisnJycpCisKKyAgICBkZWYgdGVzdF9tZXNzYWdlX2V4dGVybmFsX2JvZHkoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18zNi50eHQnKQorICAgICAgICBlcShsZW4obXNnLmdldF9wYXlsb2FkKCkpLCAyKQorICAgICAgICBtc2cxID0gbXNnLmdldF9wYXlsb2FkKDEpCisgICAgICAgIGVxKG1zZzEuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbXVsdGlwYXJ0L2FsdGVybmF0aXZlJykKKyAgICAgICAgZXEobGVuKG1zZzEuZ2V0X3BheWxvYWQoKSksIDIpCisgICAgICAgIGZvciBzdWJwYXJ0IGluIG1zZzEuZ2V0X3BheWxvYWQoKToKKyAgICAgICAgICAgIGVxKHN1YnBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9leHRlcm5hbC1ib2R5JykKKyAgICAgICAgICAgIGVxKGxlbihzdWJwYXJ0LmdldF9wYXlsb2FkKCkpLCAxKQorICAgICAgICAgICAgc3Vic3VicGFydCA9IHN1YnBhcnQuZ2V0X3BheWxvYWQoMCkKKyAgICAgICAgICAgIGVxKHN1YnN1YnBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisKKyAgICBkZWYgdGVzdF9kb3VibGVfYm91bmRhcnkoc2VsZik6CisgICAgICAgICMgbXNnXzM3LnR4dCBpcyBhIG11bHRpcGFydCB0aGF0IGNvbnRhaW5zIHR3byBkYXNoLWJvdW5kYXJ5J3MgaW4gYQorICAgICAgICAjIHJvdy4gIE91ciBpbnRlcnByZXRhdGlvbiBvZiBSRkMgMjA0NiBjYWxscyBmb3IgaWdub3JpbmcgdGhlIHNlY29uZAorICAgICAgICAjIGFuZCBzdWJzZXF1ZW50IGJvdW5kYXJpZXMuCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzM3LnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1zZy5nZXRfcGF5bG9hZCgpKSwgMykKKworICAgIGRlZiB0ZXN0X25lc3RlZF9pbm5lcl9jb250YWluc19vdXRlcl9ib3VuZGFyeShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgIyBtc2dfMzgudHh0IGhhcyBhbiBpbm5lciBwYXJ0IHRoYXQgY29udGFpbnMgb3V0ZXIgYm91bmRhcmllcy4gIE15CisgICAgICAgICMgaW50ZXJwcmV0YXRpb24gb2YgUkZDIDIwNDYgKGJhc2VkIG9uIHNlY3Rpb25zIDUuMSBhbmQgNS4xLjIpIHNheQorICAgICAgICAjIHRoZXNlIGFyZSBpbGxlZ2FsIGFuZCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgdW50ZXJtaW5hdGVkIGlubmVyCisgICAgICAgICMgcGFydHMuCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzM4LnR4dCcpCisgICAgICAgIHNmcCA9IFN0cmluZ0lPKCkKKyAgICAgICAgSXRlcmF0b3JzLl9zdHJ1Y3R1cmUobXNnLCBzZnApCisgICAgICAgIGVxKHNmcC5nZXR2YWx1ZSgpLCAiIiJcCittdWx0aXBhcnQvbWl4ZWQKKyAgICBtdWx0aXBhcnQvbWl4ZWQKKyAgICAgICAgbXVsdGlwYXJ0L2FsdGVybmF0aXZlCisgICAgICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICB0ZXh0L3BsYWluCisgICAgdGV4dC9wbGFpbgorIiIiKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX3dpdGhfc2FtZV9ib3VuZGFyeShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgIyBtc2cgMzkudHh0IGlzIHNpbWlsYXJseSBldmlsIGluIHRoYXQgaXQncyBnb3QgaW5uZXIgcGFydHMgdGhhdCB1c2UKKyAgICAgICAgIyB0aGUgc2FtZSBib3VuZGFyeSBhcyBvdXRlciBwYXJ0cy4gIEFnYWluLCBJIGJlbGlldmUgdGhlIHdheSB0aGlzIGlzCisgICAgICAgICMgcGFyc2VkIGlzIGNsb3Nlc3QgdG8gdGhlIHNwaXJpdCBvZiBSRkMgMjA0NgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18zOS50eHQnKQorICAgICAgICBzZnAgPSBTdHJpbmdJTygpCisgICAgICAgIEl0ZXJhdG9ycy5fc3RydWN0dXJlKG1zZywgc2ZwKQorICAgICAgICBlcShzZnAuZ2V0dmFsdWUoKSwgIiIiXAorbXVsdGlwYXJ0L21peGVkCisgICAgbXVsdGlwYXJ0L21peGVkCisgICAgICAgIG11bHRpcGFydC9hbHRlcm5hdGl2ZQorICAgICAgICBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KKyAgICAgICAgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCisgICAgdGV4dC9wbGFpbgorIiIiKQorCisgICAgZGVmIHRlc3RfYm91bmRhcnlfaW5fbm9uX211bHRpcGFydChzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfNDAudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuYXNfc3RyaW5nKCksICcnJ1wKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgYm91bmRhcnk9Ii0tOTYxMjg0MjM2NTUyNTIyMjY5IgorCistLS0tOTYxMjg0MjM2NTUyNTIyMjY5CitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdCaXQKKworPGh0bWw+PC9odG1sPgorCistLS0tOTYxMjg0MjM2NTUyNTIyMjY5LS0KKycnJykKKworICAgIGRlZiB0ZXN0X2JvdW5kYXJ5X3dpdGhfbGVhZGluZ19zcGFjZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoJycnXAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iICAgIFhYWFgiCisKKy0tICAgIFhYWFgKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisKKy0tICAgIFhYWFgKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCistLSAgICBYWFhYLS0KKycnJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgZXEobXNnLmdldF9ib3VuZGFyeSgpLCAnICAgIFhYWFgnKQorICAgICAgICBlcShsZW4obXNnLmdldF9wYXlsb2FkKCkpLCAyKQorCisgICAgZGVmIHRlc3RfYm91bmRhcnlfd2l0aG91dF90cmFpbGluZ19uZXdsaW5lKHNlbGYpOgorICAgICAgICBtID0gUGFyc2VyKCkucGFyc2VzdHIoIiIiXAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0wMDEyMzk0MTY0PT0iCitNSU1FLVZlcnNpb246IDEuMAorCistLT09PT09PT09PT09PT09PTAwMTIzOTQxNjQ9PQorQ29udGVudC1UeXBlOiBpbWFnZS9maWxlMS5qcGcKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworWVhOa1pnPT0KKy0tPT09PT09PT09PT09PT09MDAxMjM5NDE2ND09LS0iIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZCgwKS5nZXRfcGF5bG9hZCgpLCAnWVhOa1pnPT0nKQorCisKKworIyBUZXN0IHNvbWUgYmFkbHkgZm9ybWF0dGVkIG1lc3NhZ2VzCitjbGFzcyBUZXN0Tm9uQ29uZm9ybWFudChUZXN0RW1haWxCYXNlKToKKyAgICBkZWYgdGVzdF9wYXJzZV9taXNzaW5nX21pbm9yX3R5cGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18xNC50eHQnKQorICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpLCAndGV4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9zdWJ0eXBlKCksICdwbGFpbicpCisKKyAgICBkZWYgdGVzdF9zYW1lX2JvdW5kYXJ5X2lubmVyX291dGVyKHNlbGYpOgorICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMTUudHh0JykKKyAgICAgICAgIyBYWFggV2UgY2FuIHByb2JhYmx5IGV2ZW50dWFsbHkgZG8gYmV0dGVyCisgICAgICAgIGlubmVyID0gbXNnLmdldF9wYXlsb2FkKDApCisgICAgICAgIHVubGVzcyhoYXNhdHRyKGlubmVyLCAnZGVmZWN0cycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpbm5lci5kZWZlY3RzKSwgMSkKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UoaW5uZXIuZGVmZWN0c1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3JzLlN0YXJ0Qm91bmRhcnlOb3RGb3VuZERlZmVjdCkpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBhcnRfbm9fYm91bmRhcnkoc2VsZik6CisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18yNS50eHQnKQorICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShtc2cuZ2V0X3BheWxvYWQoKSwgc3RyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obXNnLmRlZmVjdHMpLCAyKQorICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShtc2cuZGVmZWN0c1swXSwgRXJyb3JzLk5vQm91bmRhcnlJbk11bHRpcGFydERlZmVjdCkpCisgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKG1zZy5kZWZlY3RzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvcnMuTXVsdGlwYXJ0SW52YXJpYW50VmlvbGF0aW9uRGVmZWN0KSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfY29udGVudF90eXBlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbmVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICAjIFJGQyAyMDQ1LCAkNS4yIHNheXMgaW52YWxpZCB5aWVsZHMgdGV4dC9wbGFpbgorICAgICAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQnCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpLCAndGV4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9zdWJ0eXBlKCksICdwbGFpbicpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgIyBDbGVhciB0aGUgb2xkIHZhbHVlIGFuZCB0cnkgc29tZXRoaW5nIC9yZWFsbHkvIGludmFsaWQKKyAgICAgICAgZGVsIG1zZ1snY29udGVudC10eXBlJ10KKyAgICAgICAgbXNnWydDb250ZW50LVR5cGUnXSA9ICdmb28nCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpLCAndGV4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9zdWJ0eXBlKCksICdwbGFpbicpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgIyBTdGlsbCwgbWFrZSBzdXJlIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaWRlbXBvdGVudGx5IGdlbmVyYXRlZAorICAgICAgICBzID0gU3RyaW5nSU8oKQorICAgICAgICBnID0gR2VuZXJhdG9yKHMpCisgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgIG5lcShzLmdldHZhbHVlKCksICdDb250ZW50LVR5cGU6IGZvb1xuXG4nKQorCisgICAgZGVmIHRlc3Rfbm9fc3RhcnRfYm91bmRhcnkoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzMxLnR4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgpLCAiIiJcCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworbWVzc2FnZSAxCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCittZXNzYWdlIDIKKworLS1CT1VOREFSWS0tCisiIiIpCisKKyAgICBkZWYgdGVzdF9ub19zZXBhcmF0aW5nX2JsYW5rX2xpbmUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzM1LnR4dCcpCisgICAgICAgIGVxKG1zZy5hc19zdHJpbmcoKSwgIiIiXAorRnJvbTogYXBlcnNvbkBkb20uYWluCitUbzogYnBlcnNvbkBkb20uYWluCitTdWJqZWN0OiBoZXJlJ3Mgc29tZXRoaW5nIGludGVyZXN0aW5nCisKK2NvdW50ZXIgdG8gUkZDIDI4MjIsIHRoZXJlJ3Mgbm8gc2VwYXJhdGluZyBuZXdsaW5lIGhlcmUKKyIiIikKKworICAgIGRlZiB0ZXN0X2x5aW5nX211bHRpcGFydChzZWxmKToKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzQxLnR4dCcpCisgICAgICAgIHVubGVzcyhoYXNhdHRyKG1zZywgJ2RlZmVjdHMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obXNnLmRlZmVjdHMpLCAyKQorICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShtc2cuZGVmZWN0c1swXSwgRXJyb3JzLk5vQm91bmRhcnlJbk11bHRpcGFydERlZmVjdCkpCisgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKG1zZy5kZWZlY3RzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvcnMuTXVsdGlwYXJ0SW52YXJpYW50VmlvbGF0aW9uRGVmZWN0KSkKKworICAgIGRlZiB0ZXN0X21pc3Npbmdfc3RhcnRfYm91bmRhcnkoc2VsZik6CisgICAgICAgIG91dGVyID0gc2VsZi5fbXNnb2JqKCdtc2dfNDIudHh0JykKKyAgICAgICAgIyBUaGUgbWVzc2FnZSBzdHJ1Y3R1cmUgaXM6CisgICAgICAgICMKKyAgICAgICAgIyBtdWx0aXBhcnQvbWl4ZWQKKyAgICAgICAgIyAgICB0ZXh0L3BsYWluCisgICAgICAgICMgICAgbWVzc2FnZS9yZmM4MjIKKyAgICAgICAgIyAgICAgICAgbXVsdGlwYXJ0L21peGVkIFsqXQorICAgICAgICAjCisgICAgICAgICMgWypdIFRoaXMgbWVzc2FnZSBpcyBtaXNzaW5nIGl0cyBzdGFydCBib3VuZGFyeQorICAgICAgICBiYWQgPSBvdXRlci5nZXRfcGF5bG9hZCgxKS5nZXRfcGF5bG9hZCgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiYWQuZGVmZWN0cyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGJhZC5kZWZlY3RzWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvcnMuU3RhcnRCb3VuZGFyeU5vdEZvdW5kRGVmZWN0KSkKKworICAgIGRlZiB0ZXN0X2ZpcnN0X2xpbmVfaXNfY29udGludWF0aW9uX2hlYWRlcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG0gPSAnIExpbmUgMVxuTGluZSAyXG5MaW5lIDMnCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKKyAgICAgICAgZXEobXNnLmtleXMoKSwgW10pCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgpLCAnTGluZSAyXG5MaW5lIDMnKQorICAgICAgICBlcShsZW4obXNnLmRlZmVjdHMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2cuZGVmZWN0c1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3JzLkZpcnN0SGVhZGVyTGluZUlzQ29udGludWF0aW9uRGVmZWN0KSkKKyAgICAgICAgZXEobXNnLmRlZmVjdHNbMF0ubGluZSwgJyBMaW5lIDFcbicpCisKKworCisKKyMgVGVzdCBSRkMgMjA0NyBoZWFkZXIgZW5jb2RpbmcgYW5kIGRlY29kaW5nCitjbGFzcyBUZXN0UkZDMjA0Nyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcmZjMjA0N19tdWx0aWxpbmUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBzID0gIiIiUmU6ID0/bWFjLWljZWxhbmQ/cT9yPThBa3NtPTlBcmc9OENzPz0gYmF6CisgZm9vIGJhciA9P21hYy1pY2VsYW5kP3E/cj04QWtzbT05QXJnPThDcz89IiIiCisgICAgICAgIGRoID0gZGVjb2RlX2hlYWRlcihzKQorICAgICAgICBlcShkaCwgWworICAgICAgICAgICAgKCdSZTonLCBOb25lKSwKKyAgICAgICAgICAgICgnclx4OGFrc21ceDlhcmdceDhjcycsICdtYWMtaWNlbGFuZCcpLAorICAgICAgICAgICAgKCdiYXogZm9vIGJhcicsIE5vbmUpLAorICAgICAgICAgICAgKCdyXHg4YWtzbVx4OWFyZ1x4OGNzJywgJ21hYy1pY2VsYW5kJyldKQorICAgICAgICBlcShzdHIobWFrZV9oZWFkZXIoZGgpKSwKKyAgICAgICAgICAgIiIiUmU6ID0/bWFjLWljZWxhbmQ/cT9yPThBa3NtPTlBcmc9OENzPz0gYmF6IGZvbyBiYXIKKyA9P21hYy1pY2VsYW5kP3E/cj04QWtzbT05QXJnPThDcz89IiIiKQorCisgICAgZGVmIHRlc3Rfd2hpdGVzcGFjZV9lYXRlcl91bmljb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgcyA9ICc9P0lTTy04ODU5LTE/UT9BbmRyPUU5Pz0gUGlyYXJkIDxwaXJhcmRAZG9tLmFpbj4nCisgICAgICAgIGRoID0gZGVjb2RlX2hlYWRlcihzKQorICAgICAgICBlcShkaCwgWygnQW5kclx4ZTknLCAnaXNvLTg4NTktMScpLCAoJ1BpcmFyZCA8cGlyYXJkQGRvbS5haW4+JywgTm9uZSldKQorICAgICAgICBodSA9IHVuaWNvZGUobWFrZV9oZWFkZXIoZGgpKS5lbmNvZGUoJ2xhdGluLTEnKQorICAgICAgICBlcShodSwgJ0FuZHJceGU5IFBpcmFyZCA8cGlyYXJkQGRvbS5haW4+JykKKworICAgIGRlZiB0ZXN0X3doaXRlc3BhY2VfZWF0ZXJfdW5pY29kZV8yKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgcyA9ICdUaGUgPT9pc28tODg1OS0xP2I/Y1hWcFkyc2dZbkp2ZDI0Z1ptOTQ/PSBqdW1wZWQgb3ZlciB0aGUgPT9pc28tODg1OS0xP2I/YkdGNmVTQmtiMmM9Pz0nCisgICAgICAgIGRoID0gZGVjb2RlX2hlYWRlcihzKQorICAgICAgICBlcShkaCwgWygnVGhlJywgTm9uZSksICgncXVpY2sgYnJvd24gZm94JywgJ2lzby04ODU5LTEnKSwKKyAgICAgICAgICAgICAgICAoJ2p1bXBlZCBvdmVyIHRoZScsIE5vbmUpLCAoJ2xhenkgZG9nJywgJ2lzby04ODU5LTEnKV0pCisgICAgICAgIGh1ID0gbWFrZV9oZWFkZXIoZGgpLl9fdW5pY29kZV9fKCkKKyAgICAgICAgZXEoaHUsIHUnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cnKQorCisgICAgZGVmIHRlc3RfcmZjMjA0N193aXRob3V0X3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgIHMgPSAnU209P0lTTy04ODU5LTE/Qj85Zz09Pz1yZz0/SVNPLTg4NTktMT9CPzVRPT0/PXNib3JkJworICAgICAgICBkaCA9IGRlY29kZV9oZWFkZXIocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaCwgWyhzLCBOb25lKV0pCisKKyAgICBkZWYgdGVzdF9yZmMyMDQ3X3dpdGhfd2hpdGVzcGFjZShzZWxmKToKKyAgICAgICAgcyA9ICdTbSA9P0lTTy04ODU5LTE/Qj85Zz09Pz0gcmcgPT9JU08tODg1OS0xP0I/NVE9PT89IHNib3JkJworICAgICAgICBkaCA9IGRlY29kZV9oZWFkZXIocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaCwgWygnU20nLCBOb25lKSwgKCdceGY2JywgJ2lzby04ODU5LTEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncmcnLCBOb25lKSwgKCdceGU1JywgJ2lzby04ODU5LTEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnc2JvcmQnLCBOb25lKV0pCisKKyAgICBkZWYgdGVzdF9yZmMyMDQ3X0JfYmFkX3BhZGRpbmcoc2VsZik6CisgICAgICAgIHMgPSAnPT9pc28tODg1OS0xP0I/JXM/PScKKyAgICAgICAgZGF0YSA9IFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb25seSB0ZXN0IGNvbXBsZXRlIGJ5dGVzCisgICAgICAgICAgICAoJ2RtPT0nLCAndicpLCAoJ2RtPScsICd2JyksICgnZG0nLCAndicpLAorICAgICAgICAgICAgKCdkbWs9JywgJ3ZpJyksICgnZG1rJywgJ3ZpJykKKyAgICAgICAgICBdCisgICAgICAgIGZvciBxLCBhIGluIGRhdGE6CisgICAgICAgICAgICBkaCA9IGRlY29kZV9oZWFkZXIocyAlIHEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRoLCBbKGEsICdpc28tODg1OS0xJyldKQorCisgICAgZGVmIHRlc3RfcmZjMjA0N19RX2ludmFsaWRfZGlnaXRzKHNlbGYpOgorICAgICAgICAjIGlzc3VlIDEwMDA0LgorICAgICAgICBzID0gJz0/aXNvLTg2NTktMT9RP2FuZHI9ZTk9eno/PScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVfaGVhZGVyKHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgWyhiJ2FuZHJceGU5PXp6JywgJ2lzby04NjU5LTEnKV0pCisKKworIyBUZXN0IHRoZSBNSU1FTWVzc2FnZSBjbGFzcworY2xhc3MgVGVzdE1JTUVNZXNzYWdlKFRlc3RFbWFpbEJhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZnAgPSBvcGVuZmlsZSgnbXNnXzExLnR4dCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3RleHQgPSBmcC5yZWFkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3R5cGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgTUlNRU1lc3NhZ2UsICdhIHBsYWluIHN0cmluZycpCisKKyAgICBkZWYgdGVzdF92YWxpZF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICBzdWJqZWN0ID0gJ0Egc3ViLW1lc3NhZ2UnCisgICAgICAgIG0gPSBNZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gc3ViamVjdAorICAgICAgICByID0gTUlNRU1lc3NhZ2UobSkKKyAgICAgICAgZXEoci5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIHBheWxvYWQgPSByLmdldF9wYXlsb2FkKCkKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UocGF5bG9hZCwgbGlzdCkpCisgICAgICAgIGVxKGxlbihwYXlsb2FkKSwgMSkKKyAgICAgICAgc3VicGFydCA9IHBheWxvYWRbMF0KKyAgICAgICAgdW5sZXNzKHN1YnBhcnQgaXMgbSkKKyAgICAgICAgZXEoc3VicGFydFsnc3ViamVjdCddLCBzdWJqZWN0KQorCisgICAgZGVmIHRlc3RfYmFkX211bHRpcGFydChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZzEgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnMVsnU3ViamVjdCddID0gJ3N1YnBhcnQgMScKKyAgICAgICAgbXNnMiA9IE1lc3NhZ2UoKQorICAgICAgICBtc2cyWydTdWJqZWN0J10gPSAnc3VicGFydCAyJworICAgICAgICByID0gTUlNRU1lc3NhZ2UobXNnMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXJyb3JzLk11bHRpcGFydENvbnZlcnNpb25FcnJvciwgci5hdHRhY2gsIG1zZzIpCisKKyAgICBkZWYgdGVzdF9nZW5lcmF0ZShzZWxmKToKKyAgICAgICAgIyBGaXJzdCBjcmFmdCB0aGUgbWVzc2FnZSB0byBiZSBlbmNhcHN1bGF0ZWQKKyAgICAgICAgbSA9IE1lc3NhZ2UoKQorICAgICAgICBtWydTdWJqZWN0J10gPSAnQW4gZW5jbG9zZWQgbWVzc2FnZScKKyAgICAgICAgbS5zZXRfcGF5bG9hZCgnSGVyZSBpcyB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZS5cbicpCisgICAgICAgIHIgPSBNSU1FTWVzc2FnZShtKQorICAgICAgICByWydTdWJqZWN0J10gPSAnVGhlIGVuY2xvc2luZyBtZXNzYWdlJworICAgICAgICBzID0gU3RyaW5nSU8oKQorICAgICAgICBnID0gR2VuZXJhdG9yKHMpCisgICAgICAgIGcuZmxhdHRlbihyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgIiIiXAorQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorTUlNRS1WZXJzaW9uOiAxLjAKK1N1YmplY3Q6IFRoZSBlbmNsb3NpbmcgbWVzc2FnZQorCitTdWJqZWN0OiBBbiBlbmNsb3NlZCBtZXNzYWdlCisKK0hlcmUgaXMgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UuCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9tZXNzYWdlX3JmYzgyMihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18xMS50eHQnKQorICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICBwYXlsb2FkID0gbXNnLmdldF9wYXlsb2FkKCkKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UocGF5bG9hZCwgbGlzdCkpCisgICAgICAgIGVxKGxlbihwYXlsb2FkKSwgMSkKKyAgICAgICAgc3VibXNnID0gcGF5bG9hZFswXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdWJtc2csIE1lc3NhZ2UpKQorICAgICAgICBlcShzdWJtc2dbJ3N1YmplY3QnXSwgJ0FuIGVuY2xvc2VkIG1lc3NhZ2UnKQorICAgICAgICBlcShzdWJtc2cuZ2V0X3BheWxvYWQoKSwgJ0hlcmUgaXMgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UuXG4nKQorCisgICAgZGVmIHRlc3RfZHNuKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCisgICAgICAgICMgbXNnIDE2IGlzIGEgRGVsaXZlcnkgU3RhdHVzIE5vdGlmaWNhdGlvbiwgc2VlIFJGQyAxODk0CisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzE2LnR4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICdtdWx0aXBhcnQvcmVwb3J0JykKKyAgICAgICAgdW5sZXNzKG1zZy5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgZXEobGVuKG1zZy5nZXRfcGF5bG9hZCgpKSwgMykKKyAgICAgICAgIyBTdWJwYXJ0IDEgaXMgYSB0ZXh0L3BsYWluLCBodW1hbiByZWFkYWJsZSBzZWN0aW9uCisgICAgICAgIHN1YnBhcnQgPSBtc2cuZ2V0X3BheWxvYWQoMCkKKyAgICAgICAgZXEoc3VicGFydC5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgZXEoc3VicGFydC5nZXRfcGF5bG9hZCgpLCAiIiJcCitUaGlzIHJlcG9ydCByZWxhdGVzIHRvIGEgbWVzc2FnZSB5b3Ugc2VudCB3aXRoIHRoZSBmb2xsb3dpbmcgaGVhZGVyIGZpZWxkczoKKworICBNZXNzYWdlLWlkOiA8MDAyMDAxYzE0NGE2JDg3NTJlMDYwJDU2MTA0NTg2QG94eS5lZHU+CisgIERhdGU6IFN1biwgMjMgU2VwIDIwMDEgMjA6MTA6NTUgLTA3MDAKKyAgRnJvbTogIklhbiBULiBIZW5yeSIgPGhlbnJ5aUBveHkuZWR1PgorICBUbzogU29DYWwgUmF2ZXMgPHNjckBzb2NhbC1yYXZlcy5vcmc+CisgIFN1YmplY3Q6IFtzY3JdIHllYWggZm9yIElhbnMhIQorCitZb3VyIG1lc3NhZ2UgY2Fubm90IGJlIGRlbGl2ZXJlZCB0byB0aGUgZm9sbG93aW5nIHJlY2lwaWVudHM6CisKKyAgUmVjaXBpZW50IGFkZHJlc3M6IGphbmdlbDFAY291Z2FyLm5vYy51Y2xhLmVkdQorICBSZWFzb246IHJlY2lwaWVudCByZWFjaGVkIGRpc2sgcXVvdGEKKworIiIiKQorICAgICAgICAjIFN1YnBhcnQgMiBjb250YWlucyB0aGUgbWFjaGluZSBwYXJzYWJsZSBEU04gaW5mb3JtYXRpb24uICBJdAorICAgICAgICAjIGNvbnNpc3RzIG9mIHR3byBibG9ja3Mgb2YgaGVhZGVycywgcmVwcmVzZW50ZWQgYnkgdHdvIG5lc3RlZCBNZXNzYWdlCisgICAgICAgICMgb2JqZWN0cy4KKyAgICAgICAgc3VicGFydCA9IG1zZy5nZXRfcGF5bG9hZCgxKQorICAgICAgICBlcShzdWJwYXJ0LmdldF9jb250ZW50X3R5cGUoKSwgJ21lc3NhZ2UvZGVsaXZlcnktc3RhdHVzJykKKyAgICAgICAgZXEobGVuKHN1YnBhcnQuZ2V0X3BheWxvYWQoKSksIDIpCisgICAgICAgICMgbWVzc2FnZS9kZWxpdmVyeS1zdGF0dXMgc2hvdWxkIHRyZWF0IGVhY2ggYmxvY2sgYXMgYSBidW5jaCBvZgorICAgICAgICAjIGhlYWRlcnMsIGkuZS4gYSBidW5jaCBvZiBNZXNzYWdlIG9iamVjdHMuCisgICAgICAgIGRzbjEgPSBzdWJwYXJ0LmdldF9wYXlsb2FkKDApCisgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKGRzbjEsIE1lc3NhZ2UpKQorICAgICAgICBlcShkc24xWydvcmlnaW5hbC1lbnZlbG9wZS1pZCddLCAnMEdLNTAwQjRIRDA4ODhAY291Z2FyLm5vYy51Y2xhLmVkdScpCisgICAgICAgIGVxKGRzbjEuZ2V0X3BhcmFtKCdkbnMnLCBoZWFkZXI9J3JlcG9ydGluZy1tdGEnKSwgJycpCisgICAgICAgICMgVHJ5IGEgbWlzc2luZyBvbmUgPHdpbms+CisgICAgICAgIGVxKGRzbjEuZ2V0X3BhcmFtKCduc2QnLCBoZWFkZXI9J3JlcG9ydGluZy1tdGEnKSwgTm9uZSkKKyAgICAgICAgZHNuMiA9IHN1YnBhcnQuZ2V0X3BheWxvYWQoMSkKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UoZHNuMiwgTWVzc2FnZSkpCisgICAgICAgIGVxKGRzbjJbJ2FjdGlvbiddLCAnZmFpbGVkJykKKyAgICAgICAgZXEoZHNuMi5nZXRfcGFyYW1zKGhlYWRlcj0nb3JpZ2luYWwtcmVjaXBpZW50JyksCisgICAgICAgICAgIFsoJ3JmYzgyMicsICcnKSwgKCdqYW5nZWwxQGNvdWdhci5ub2MudWNsYS5lZHUnLCAnJyldKQorICAgICAgICBlcShkc24yLmdldF9wYXJhbSgncmZjODIyJywgaGVhZGVyPSdmaW5hbC1yZWNpcGllbnQnKSwgJycpCisgICAgICAgICMgU3VicGFydCAzIGlzIHRoZSBvcmlnaW5hbCBtZXNzYWdlCisgICAgICAgIHN1YnBhcnQgPSBtc2cuZ2V0X3BheWxvYWQoMikKKyAgICAgICAgZXEoc3VicGFydC5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIHBheWxvYWQgPSBzdWJwYXJ0LmdldF9wYXlsb2FkKCkKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UocGF5bG9hZCwgbGlzdCkpCisgICAgICAgIGVxKGxlbihwYXlsb2FkKSwgMSkKKyAgICAgICAgc3Vic3VicGFydCA9IHBheWxvYWRbMF0KKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2Uoc3Vic3VicGFydCwgTWVzc2FnZSkpCisgICAgICAgIGVxKHN1YnN1YnBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIGVxKHN1YnN1YnBhcnRbJ21lc3NhZ2UtaWQnXSwKKyAgICAgICAgICAgJzwwMDIwMDFjMTQ0YTYkODc1MmUwNjAkNTYxMDQ1ODZAb3h5LmVkdT4nKQorCisgICAgZGVmIHRlc3RfZXBpbG9ndWUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIGZwID0gb3BlbmZpbGUoJ21zZ18yMS50eHQnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ0Zyb20nXSA9ICdhcGVyc29uQGRvbS5haW4nCisgICAgICAgIG1zZ1snVG8nXSA9ICdicGVyc29uQGRvbS5haW4nCisgICAgICAgIG1zZ1snU3ViamVjdCddID0gJ1Rlc3QnCisgICAgICAgIG1zZy5wcmVhbWJsZSA9ICdNSU1FIG1lc3NhZ2UnCisgICAgICAgIG1zZy5lcGlsb2d1ZSA9ICdFbmQgb2YgTUlNRSBtZXNzYWdlXG4nCisgICAgICAgIG1zZzEgPSBNSU1FVGV4dCgnT25lJykKKyAgICAgICAgbXNnMiA9IE1JTUVUZXh0KCdUd28nKQorICAgICAgICBtc2cuYWRkX2hlYWRlcignQ29udGVudC1UeXBlJywgJ211bHRpcGFydC9taXhlZCcsIGJvdW5kYXJ5PSdCT1VOREFSWScpCisgICAgICAgIG1zZy5hdHRhY2gobXNnMSkKKyAgICAgICAgbXNnLmF0dGFjaChtc2cyKQorICAgICAgICBzZnAgPSBTdHJpbmdJTygpCisgICAgICAgIGcgPSBHZW5lcmF0b3Ioc2ZwKQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICBlcShzZnAuZ2V0dmFsdWUoKSwgdGV4dCkKKworICAgIGRlZiB0ZXN0X25vX25sX3ByZWFtYmxlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnWydGcm9tJ10gPSAnYXBlcnNvbkBkb20uYWluJworICAgICAgICBtc2dbJ1RvJ10gPSAnYnBlcnNvbkBkb20uYWluJworICAgICAgICBtc2dbJ1N1YmplY3QnXSA9ICdUZXN0JworICAgICAgICBtc2cucHJlYW1ibGUgPSAnTUlNRSBtZXNzYWdlJworICAgICAgICBtc2cuZXBpbG9ndWUgPSAnJworICAgICAgICBtc2cxID0gTUlNRVRleHQoJ09uZScpCisgICAgICAgIG1zZzIgPSBNSU1FVGV4dCgnVHdvJykKKyAgICAgICAgbXNnLmFkZF9oZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdtdWx0aXBhcnQvbWl4ZWQnLCBib3VuZGFyeT0nQk9VTkRBUlknKQorICAgICAgICBtc2cuYXR0YWNoKG1zZzEpCisgICAgICAgIG1zZy5hdHRhY2gobXNnMikKKyAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCAiIiJcCitGcm9tOiBhcGVyc29uQGRvbS5haW4KK1RvOiBicGVyc29uQGRvbS5haW4KK1N1YmplY3Q6IFRlc3QKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iQk9VTkRBUlkiCisKK01JTUUgbWVzc2FnZQorLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKK09uZQorLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKK1R3bworLS1CT1VOREFSWS0tCisiIiIpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3R5cGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBmcCA9IG9wZW5maWxlKCdtc2dfMzAudHh0JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIGNvbnRhaW5lcjEgPSBtc2cuZ2V0X3BheWxvYWQoMCkKKyAgICAgICAgZXEoY29udGFpbmVyMS5nZXRfZGVmYXVsdF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIGVxKGNvbnRhaW5lcjEuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICBjb250YWluZXIyID0gbXNnLmdldF9wYXlsb2FkKDEpCisgICAgICAgIGVxKGNvbnRhaW5lcjIuZ2V0X2RlZmF1bHRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICBlcShjb250YWluZXIyLmdldF9jb250ZW50X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgY29udGFpbmVyMWEgPSBjb250YWluZXIxLmdldF9wYXlsb2FkKDApCisgICAgICAgIGVxKGNvbnRhaW5lcjFhLmdldF9kZWZhdWx0X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBlcShjb250YWluZXIxYS5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgY29udGFpbmVyMmEgPSBjb250YWluZXIyLmdldF9wYXlsb2FkKDApCisgICAgICAgIGVxKGNvbnRhaW5lcjJhLmdldF9kZWZhdWx0X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBlcShjb250YWluZXIyYS5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfdHlwZV93aXRoX2V4cGxpY2l0X2NvbnRhaW5lcl90eXBlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZnAgPSBvcGVuZmlsZSgnbXNnXzI4LnR4dCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9maWxlKGZwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICBjb250YWluZXIxID0gbXNnLmdldF9wYXlsb2FkKDApCisgICAgICAgIGVxKGNvbnRhaW5lcjEuZ2V0X2RlZmF1bHRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICBlcShjb250YWluZXIxLmdldF9jb250ZW50X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgY29udGFpbmVyMiA9IG1zZy5nZXRfcGF5bG9hZCgxKQorICAgICAgICBlcShjb250YWluZXIyLmdldF9kZWZhdWx0X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgZXEoY29udGFpbmVyMi5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIGNvbnRhaW5lcjFhID0gY29udGFpbmVyMS5nZXRfcGF5bG9hZCgwKQorICAgICAgICBlcShjb250YWluZXIxYS5nZXRfZGVmYXVsdF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgZXEoY29udGFpbmVyMWEuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIGNvbnRhaW5lcjJhID0gY29udGFpbmVyMi5nZXRfcGF5bG9hZCgwKQorICAgICAgICBlcShjb250YWluZXIyYS5nZXRfZGVmYXVsdF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgZXEoY29udGFpbmVyMmEuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3R5cGVfbm9uX3BhcnNlZChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG5lcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICAjIFNldCB1cCBjb250YWluZXIKKyAgICAgICAgY29udGFpbmVyID0gTUlNRU11bHRpcGFydCgnZGlnZXN0JywgJ0JPVU5EQVJZJykKKyAgICAgICAgY29udGFpbmVyLmVwaWxvZ3VlID0gJycKKyAgICAgICAgIyBTZXQgdXAgc3VicGFydHMKKyAgICAgICAgc3VicGFydDFhID0gTUlNRVRleHQoJ21lc3NhZ2UgMVxuJykKKyAgICAgICAgc3VicGFydDJhID0gTUlNRVRleHQoJ21lc3NhZ2UgMlxuJykKKyAgICAgICAgc3VicGFydDEgPSBNSU1FTWVzc2FnZShzdWJwYXJ0MWEpCisgICAgICAgIHN1YnBhcnQyID0gTUlNRU1lc3NhZ2Uoc3VicGFydDJhKQorICAgICAgICBjb250YWluZXIuYXR0YWNoKHN1YnBhcnQxKQorICAgICAgICBjb250YWluZXIuYXR0YWNoKHN1YnBhcnQyKQorICAgICAgICBlcShzdWJwYXJ0MS5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIGVxKHN1YnBhcnQxLmdldF9kZWZhdWx0X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgZXEoc3VicGFydDIuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICBlcShzdWJwYXJ0Mi5nZXRfZGVmYXVsdF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIG5lcShjb250YWluZXIuYXNfc3RyaW5nKDApLCAnJydcCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9kaWdlc3Q7IGJvdW5kYXJ5PSJCT1VOREFSWSIKK01JTUUtVmVyc2lvbjogMS4wCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKK01JTUUtVmVyc2lvbjogMS4wCisKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCittZXNzYWdlIDEKKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorTUlNRS1WZXJzaW9uOiAxLjAKKworQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKK21lc3NhZ2UgMgorCistLUJPVU5EQVJZLS0KKycnJykKKyAgICAgICAgZGVsIHN1YnBhcnQxWydjb250ZW50LXR5cGUnXQorICAgICAgICBkZWwgc3VicGFydDFbJ21pbWUtdmVyc2lvbiddCisgICAgICAgIGRlbCBzdWJwYXJ0MlsnY29udGVudC10eXBlJ10KKyAgICAgICAgZGVsIHN1YnBhcnQyWydtaW1lLXZlcnNpb24nXQorICAgICAgICBlcShzdWJwYXJ0MS5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIGVxKHN1YnBhcnQxLmdldF9kZWZhdWx0X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgZXEoc3VicGFydDIuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICBlcShzdWJwYXJ0Mi5nZXRfZGVmYXVsdF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIG5lcShjb250YWluZXIuYXNfc3RyaW5nKDApLCAnJydcCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9kaWdlc3Q7IGJvdW5kYXJ5PSJCT1VOREFSWSIKK01JTUUtVmVyc2lvbjogMS4wCisKKy0tQk9VTkRBUlkKKworQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKK21lc3NhZ2UgMQorCistLUJPVU5EQVJZCisKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCittZXNzYWdlIDIKKworLS1CT1VOREFSWS0tCisnJycpCisKKyAgICBkZWYgdGVzdF9taW1lX2F0dGFjaG1lbnRzX2luX2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgdGV4dDEgPSBNSU1FVGV4dCgnJykKKyAgICAgICAgdGV4dDIgPSBNSU1FVGV4dCgnJykKKyAgICAgICAgbXNnID0gTUlNRU11bHRpcGFydChfc3VicGFydHM9KHRleHQxLCB0ZXh0MikpCisgICAgICAgIGVxKGxlbihtc2cuZ2V0X3BheWxvYWQoKSksIDIpCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgwKSwgdGV4dDEpCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgxKSwgdGV4dDIpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X211bHRpcGFydF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgbXNnID0gTUlNRU11bHRpcGFydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuaXNfbXVsdGlwYXJ0KCkpCisKKworIyBBIGdlbmVyYWwgdGVzdCBvZiBwYXJzZXItPm1vZGVsLT5nZW5lcmF0b3IgaWRlbXBvdGVuY3kuICBJT1csIHJlYWQgYSBtZXNzYWdlCisjIGluLCBwYXJzZSBpdCBpbnRvIGEgbWVzc2FnZSBvYmplY3QgdHJlZSwgdGhlbiB3aXRob3V0IHRvdWNoaW5nIHRoZSB0cmVlLAorIyByZWdlbmVyYXRlIHRoZSBwbGFpbiB0ZXh0LiAgVGhlIG9yaWdpbmFsIHRleHQgYW5kIHRoZSB0cmFuc2Zvcm1lZCB0ZXh0CisjIHNob3VsZCBiZSBpZGVudGljYWwuICBOb3RlOiB0aGF0IHdlIGlnbm9yZSB0aGUgVW5peC1Gcm9tIHNpbmNlIHRoYXQgbWF5CisjIGNvbnRhaW4gYSBjaGFuZ2VkIGRhdGUuCitjbGFzcyBUZXN0SWRlbXBvdGVudChUZXN0RW1haWxCYXNlKToKKyAgICBkZWYgX21zZ29iaihzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGZwID0gb3BlbmZpbGUoZmlsZW5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhkYXRhKQorICAgICAgICByZXR1cm4gbXNnLCBkYXRhCisKKyAgICBkZWYgX2lkZW1wb3RlbnQoc2VsZiwgbXNnLCB0ZXh0KToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgZyA9IEdlbmVyYXRvcihzLCBtYXhoZWFkZXJsZW49MCkKKyAgICAgICAgZy5mbGF0dGVuKG1zZykKKyAgICAgICAgZXEodGV4dCwgcy5nZXR2YWx1ZSgpKQorCisgICAgZGVmIHRlc3RfcGFyc2VfdGV4dF9tZXNzYWdlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgZXEobXNnLmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSwgJ3RleHQnKQorICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfc3VidHlwZSgpLCAncGxhaW4nKQorICAgICAgICBlcShtc2cuZ2V0X3BhcmFtcygpWzFdLCAoJ2NoYXJzZXQnLCAndXMtYXNjaWknKSkKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbSgnY2hhcnNldCcpLCAndXMtYXNjaWknKQorICAgICAgICBlcShtc2cucHJlYW1ibGUsIE5vbmUpCisgICAgICAgIGVxKG1zZy5lcGlsb2d1ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5faWRlbXBvdGVudChtc2csIHRleHQpCisKKyAgICBkZWYgdGVzdF9wYXJzZV91bnR5cGVkX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18wMy50eHQnKQorICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW1zKCksIE5vbmUpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ2NoYXJzZXQnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5faWRlbXBvdGVudChtc2csIHRleHQpCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfbXVsdGlwYXJ0KHNlbGYpOgorICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18wNC50eHQnKQorICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKKworICAgIGRlZiB0ZXN0X01JTUVfZGlnZXN0KHNlbGYpOgorICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18wMi50eHQnKQorICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKKworICAgIGRlZiB0ZXN0X2xvbmdfaGVhZGVyKHNlbGYpOgorICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18yNy50eHQnKQorICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKKworICAgIGRlZiB0ZXN0X01JTUVfZGlnZXN0X3dpdGhfcGFydF9oZWFkZXJzKHNlbGYpOgorICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18yOC50eHQnKQorICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKKworICAgIGRlZiB0ZXN0X21peGVkX3dpdGhfaW1hZ2Uoc2VsZik6CisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzA2LnR4dCcpCisgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQorCisgICAgZGVmIHRlc3RfbXVsdGlwYXJ0X3JlcG9ydChzZWxmKToKKyAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMDUudHh0JykKKyAgICAgICAgc2VsZi5faWRlbXBvdGVudChtc2csIHRleHQpCisKKyAgICBkZWYgdGVzdF9kc24oc2VsZik6CisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzE2LnR4dCcpCisgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQorCisgICAgZGVmIHRlc3RfcHJlYW1ibGVfZXBpbG9ndWUoc2VsZik6CisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzIxLnR4dCcpCisgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQorCisgICAgZGVmIHRlc3RfbXVsdGlwYXJ0X29uZV9wYXJ0KHNlbGYpOgorICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18yMy50eHQnKQorICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKKworICAgIGRlZiB0ZXN0X211bHRpcGFydF9ub19wYXJ0cyhzZWxmKToKKyAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMjQudHh0JykKKyAgICAgICAgc2VsZi5faWRlbXBvdGVudChtc2csIHRleHQpCisKKyAgICBkZWYgdGVzdF9ub19zdGFydF9ib3VuZGFyeShzZWxmKToKKyAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMzEudHh0JykKKyAgICAgICAgc2VsZi5faWRlbXBvdGVudChtc2csIHRleHQpCisKKyAgICBkZWYgdGVzdF9yZmMyMjMxX2NoYXJzZXQoc2VsZik6CisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzMyLnR4dCcpCisgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQorCisgICAgZGVmIHRlc3RfbW9yZV9yZmMyMjMxX3BhcmFtZXRlcnMoc2VsZik6CisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzMzLnR4dCcpCisgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQorCisgICAgZGVmIHRlc3RfdGV4dF9wbGFpbl9pbl9hX211bHRpcGFydF9kaWdlc3Qoc2VsZik6CisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzM0LnR4dCcpCisgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQorCisgICAgZGVmIHRlc3RfbmVzdGVkX211bHRpcGFydF9taXhlZHMoc2VsZik6CisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzEyYS50eHQnKQorICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKKworICAgIGRlZiB0ZXN0X21lc3NhZ2VfZXh0ZXJuYWxfYm9keV9pZGVtcG90ZW50KHNlbGYpOgorICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18zNi50eHQnKQorICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKKworICAgIGRlZiB0ZXN0X2NvbnRlbnRfdHlwZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICAjIEdldCBhIG1lc3NhZ2Ugb2JqZWN0IGFuZCByZXNldCB0aGUgc2VlayBwb2ludGVyIGZvciBvdGhlciB0ZXN0cworICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18wNS50eHQnKQorICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbXVsdGlwYXJ0L3JlcG9ydCcpCisgICAgICAgICMgVGVzdCB0aGUgQ29udGVudC1UeXBlOiBwYXJhbWV0ZXJzCisgICAgICAgIHBhcmFtcyA9IHt9CisgICAgICAgIGZvciBwaywgcHYgaW4gbXNnLmdldF9wYXJhbXMoKToKKyAgICAgICAgICAgIHBhcmFtc1twa10gPSBwdgorICAgICAgICBlcShwYXJhbXNbJ3JlcG9ydC10eXBlJ10sICdkZWxpdmVyeS1zdGF0dXMnKQorICAgICAgICBlcShwYXJhbXNbJ2JvdW5kYXJ5J10sICdEMTY5MEE3QUMxLjk5Njg1NjA5MC9tYWlsLmV4YW1wbGUuY29tJykKKyAgICAgICAgZXEobXNnLnByZWFtYmxlLCAnVGhpcyBpcyBhIE1JTUUtZW5jYXBzdWxhdGVkIG1lc3NhZ2UuXG4nKQorICAgICAgICBlcShtc2cuZXBpbG9ndWUsICdcbicpCisgICAgICAgIGVxKGxlbihtc2cuZ2V0X3BheWxvYWQoKSksIDMpCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSBzdWJwYXJ0cyBhcmUgd2hhdCB3ZSBleHBlY3QKKyAgICAgICAgbXNnMSA9IG1zZy5nZXRfcGF5bG9hZCgwKQorICAgICAgICBlcShtc2cxLmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBlcShtc2cxLmdldF9wYXlsb2FkKCksICdZYWRkYSB5YWRkYSB5YWRkYVxuJykKKyAgICAgICAgbXNnMiA9IG1zZy5nZXRfcGF5bG9hZCgxKQorICAgICAgICBlcShtc2cyLmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBlcShtc2cyLmdldF9wYXlsb2FkKCksICdZYWRkYSB5YWRkYSB5YWRkYVxuJykKKyAgICAgICAgbXNnMyA9IG1zZy5nZXRfcGF5bG9hZCgyKQorICAgICAgICBlcShtc2czLmdldF9jb250ZW50X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobXNnMywgTWVzc2FnZSkpCisgICAgICAgIHBheWxvYWQgPSBtc2czLmdldF9wYXlsb2FkKCkKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UocGF5bG9hZCwgbGlzdCkpCisgICAgICAgIGVxKGxlbihwYXlsb2FkKSwgMSkKKyAgICAgICAgbXNnNCA9IHBheWxvYWRbMF0KKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UobXNnNCwgTWVzc2FnZSkpCisgICAgICAgIGVxKG1zZzQuZ2V0X3BheWxvYWQoKSwgJ1lhZGRhIHlhZGRhIHlhZGRhXG4nKQorCisgICAgZGVmIHRlc3RfcGFyc2VyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzA2LnR4dCcpCisgICAgICAgICMgQ2hlY2sgc29tZSBvZiB0aGUgb3V0ZXIgaGVhZGVycworICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgcGF5bG9hZCBpcyBhIGxpc3Qgb2YgZXhhY3RseSBvbmUgc3ViLU1lc3NhZ2UsIGFuZCB0aGF0CisgICAgICAgICMgdGhhdCBzdWJtZXNzYWdlIGhhcyBhIHR5cGUgb2YgdGV4dC9wbGFpbgorICAgICAgICBwYXlsb2FkID0gbXNnLmdldF9wYXlsb2FkKCkKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UocGF5bG9hZCwgbGlzdCkpCisgICAgICAgIGVxKGxlbihwYXlsb2FkKSwgMSkKKyAgICAgICAgbXNnMSA9IHBheWxvYWRbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobXNnMSwgTWVzc2FnZSkpCisgICAgICAgIGVxKG1zZzEuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1zZzEuZ2V0X3BheWxvYWQoKSwgc3RyKSkKKyAgICAgICAgZXEobXNnMS5nZXRfcGF5bG9hZCgpLCAnXG4nKQorCisKKworIyBUZXN0IHZhcmlvdXMgb3RoZXIgYml0cyBvZiB0aGUgcGFja2FnZSdzIGZ1bmN0aW9uYWxpdHkKK2NsYXNzIFRlc3RNaXNjZWxsYW5lb3VzKFRlc3RFbWFpbEJhc2UpOgorICAgIGRlZiB0ZXN0X21lc3NhZ2VfZnJvbV9zdHJpbmcoc2VsZik6CisgICAgICAgIGZwID0gb3BlbmZpbGUoJ21zZ18wMS50eHQnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcodGV4dCkKKyAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgIyBEb24ndCB3cmFwL2NvbnRpbnVlIGxvbmcgaGVhZGVycyBzaW5jZSB3ZSdyZSB0cnlpbmcgdG8gdGVzdAorICAgICAgICAjIGlkZW1wb3RlbmN5LgorICAgICAgICBnID0gR2VuZXJhdG9yKHMsIG1heGhlYWRlcmxlbj0wKQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsIHMuZ2V0dmFsdWUoKSkKKworICAgIGRlZiB0ZXN0X21lc3NhZ2VfZnJvbV9maWxlKHNlbGYpOgorICAgICAgICBmcCA9IG9wZW5maWxlKCdtc2dfMDEudHh0JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGV4dCA9IGZwLnJlYWQoKQorICAgICAgICAgICAgZnAuc2VlaygwKQorICAgICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnApCisgICAgICAgICAgICBzID0gU3RyaW5nSU8oKQorICAgICAgICAgICAgIyBEb24ndCB3cmFwL2NvbnRpbnVlIGxvbmcgaGVhZGVycyBzaW5jZSB3ZSdyZSB0cnlpbmcgdG8gdGVzdAorICAgICAgICAgICAgIyBpZGVtcG90ZW5jeS4KKyAgICAgICAgICAgIGcgPSBHZW5lcmF0b3IocywgbWF4aGVhZGVybGVuPTApCisgICAgICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBzLmdldHZhbHVlKCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9tZXNzYWdlX2Zyb21fc3RyaW5nX3dpdGhfY2xhc3Moc2VsZik6CisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICBmcCA9IG9wZW5maWxlKCdtc2dfMDEudHh0JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGV4dCA9IGZwLnJlYWQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAjIENyZWF0ZSBhIHN1YmNsYXNzCisgICAgICAgIGNsYXNzIE15TWVzc2FnZShNZXNzYWdlKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKHRleHQsIE15TWVzc2FnZSkKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UobXNnLCBNeU1lc3NhZ2UpKQorICAgICAgICAjIFRyeSBzb21ldGhpbmcgbW9yZSBjb21wbGljYXRlZAorICAgICAgICBmcCA9IG9wZW5maWxlKCdtc2dfMDIudHh0JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGV4dCA9IGZwLnJlYWQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKHRleHQsIE15TWVzc2FnZSkKKyAgICAgICAgZm9yIHN1YnBhcnQgaW4gbXNnLndhbGsoKToKKyAgICAgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKHN1YnBhcnQsIE15TWVzc2FnZSkpCisKKyAgICBkZWYgdGVzdF9tZXNzYWdlX2Zyb21fZmlsZV93aXRoX2NsYXNzKHNlbGYpOgorICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKKyAgICAgICAgIyBDcmVhdGUgYSBzdWJjbGFzcworICAgICAgICBjbGFzcyBNeU1lc3NhZ2UoTWVzc2FnZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZnAgPSBvcGVuZmlsZSgnbXNnXzAxLnR4dCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9maWxlKGZwLCBNeU1lc3NhZ2UpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKG1zZywgTXlNZXNzYWdlKSkKKyAgICAgICAgIyBUcnkgc29tZXRoaW5nIG1vcmUgY29tcGxpY2F0ZWQKKyAgICAgICAgZnAgPSBvcGVuZmlsZSgnbXNnXzAyLnR4dCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9maWxlKGZwLCBNeU1lc3NhZ2UpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIGZvciBzdWJwYXJ0IGluIG1zZy53YWxrKCk6CisgICAgICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShzdWJwYXJ0LCBNeU1lc3NhZ2UpKQorCisgICAgZGVmIHRlc3RfX2FsbF9fKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKCdlbWFpbCcpCisgICAgICAgIGFsbCA9IG1vZHVsZS5fX2FsbF9fCisgICAgICAgIGFsbC5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGwsIFsKKyAgICAgICAgICAgICMgT2xkIG5hbWVzCisgICAgICAgICAgICAnQ2hhcnNldCcsICdFbmNvZGVycycsICdFcnJvcnMnLCAnR2VuZXJhdG9yJywKKyAgICAgICAgICAgICdIZWFkZXInLCAnSXRlcmF0b3JzJywgJ01JTUVBdWRpbycsICdNSU1FQmFzZScsCisgICAgICAgICAgICAnTUlNRUltYWdlJywgJ01JTUVNZXNzYWdlJywgJ01JTUVNdWx0aXBhcnQnLAorICAgICAgICAgICAgJ01JTUVOb25NdWx0aXBhcnQnLCAnTUlNRVRleHQnLCAnTWVzc2FnZScsCisgICAgICAgICAgICAnUGFyc2VyJywgJ1V0aWxzJywgJ2Jhc2U2NE1JTUUnLAorICAgICAgICAgICAgIyBuZXcgbmFtZXMKKyAgICAgICAgICAgICdiYXNlNjRtaW1lJywgJ2NoYXJzZXQnLCAnZW5jb2RlcnMnLCAnZXJyb3JzJywgJ2dlbmVyYXRvcicsCisgICAgICAgICAgICAnaGVhZGVyJywgJ2l0ZXJhdG9ycycsICdtZXNzYWdlJywgJ21lc3NhZ2VfZnJvbV9maWxlJywKKyAgICAgICAgICAgICdtZXNzYWdlX2Zyb21fc3RyaW5nJywgJ21pbWUnLCAncGFyc2VyJywKKyAgICAgICAgICAgICdxdW9wcmlNSU1FJywgJ3F1b3ByaW1pbWUnLCAndXRpbHMnLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdGRhdGUoc2VsZik6CisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXRpbHMucGFyc2VkYXRlKFV0aWxzLmZvcm1hdGRhdGUobm93KSlbOjZdLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuZ210aW1lKG5vdylbOjZdKQorCisgICAgZGVmIHRlc3RfZm9ybWF0ZGF0ZV9sb2NhbHRpbWUoc2VsZik6CisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBVdGlscy5wYXJzZWRhdGUoVXRpbHMuZm9ybWF0ZGF0ZShub3csIGxvY2FsdGltZT1UcnVlKSlbOjZdLAorICAgICAgICAgICAgdGltZS5sb2NhbHRpbWUobm93KVs6Nl0pCisKKyAgICBkZWYgdGVzdF9mb3JtYXRkYXRlX3VzZWdtdChzZWxmKToKKyAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFV0aWxzLmZvcm1hdGRhdGUobm93LCBsb2NhbHRpbWU9RmFsc2UpLAorICAgICAgICAgICAgdGltZS5zdHJmdGltZSgnJWEsICVkICViICVZICVIOiVNOiVTIC0wMDAwJywgdGltZS5nbXRpbWUobm93KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBVdGlscy5mb3JtYXRkYXRlKG5vdywgbG9jYWx0aW1lPUZhbHNlLCB1c2VnbXQ9VHJ1ZSksCisgICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKCclYSwgJWQgJWIgJVkgJUg6JU06JVMgR01UJywgdGltZS5nbXRpbWUobm93KSkpCisKKyAgICBkZWYgdGVzdF9wYXJzZWRhdGVfbm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVdGlscy5wYXJzZWRhdGUoJycpLCBOb25lKQorCisgICAgZGVmIHRlc3RfcGFyc2VkYXRlX2NvbXBhY3Qoc2VsZik6CisgICAgICAgICMgVGhlIEZXUyBhZnRlciB0aGUgY29tbWEgaXMgb3B0aW9uYWwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVdGlscy5wYXJzZWRhdGUoJ1dlZCwzIEFwciAyMDAyIDE0OjU4OjI2ICswODAwJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMucGFyc2VkYXRlKCdXZWQsIDMgQXByIDIwMDIgMTQ6NTg6MjYgKzA4MDAnKSkKKworICAgIGRlZiB0ZXN0X3BhcnNlZGF0ZV9ub19kYXlvZndlZWsoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShVdGlscy5wYXJzZWRhdGVfdHooJzI1IEZlYiAyMDAzIDEzOjQ3OjI2IC0wODAwJyksCisgICAgICAgICAgICgyMDAzLCAyLCAyNSwgMTMsIDQ3LCAyNiwgMCwgMSwgLTEsIC0yODgwMCkpCisKKyAgICBkZWYgdGVzdF9wYXJzZWRhdGVfY29tcGFjdF9ub19kYXlvZndlZWsoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShVdGlscy5wYXJzZWRhdGVfdHooJzUgRmViIDIwMDMgMTM6NDc6MjYgLTA4MDAnKSwKKyAgICAgICAgICAgKDIwMDMsIDIsIDUsIDEzLCA0NywgMjYsIDAsIDEsIC0xLCAtMjg4MDApKQorCisgICAgZGVmIHRlc3RfcGFyc2VkYXRlX2FjY2VwdGFibGVfdG9fdGltZV9mdW5jdGlvbnMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICB0aW1ldHVwID0gVXRpbHMucGFyc2VkYXRlKCc1IEZlYiAyMDAzIDEzOjQ3OjI2IC0wODAwJykKKyAgICAgICAgdCA9IGludCh0aW1lLm1rdGltZSh0aW1ldHVwKSkKKyAgICAgICAgZXEodGltZS5sb2NhbHRpbWUodClbOjZdLCB0aW1ldHVwWzo2XSkKKyAgICAgICAgZXEoaW50KHRpbWUuc3RyZnRpbWUoJyVZJywgdGltZXR1cCkpLCAyMDAzKQorICAgICAgICB0aW1ldHVwID0gVXRpbHMucGFyc2VkYXRlX3R6KCc1IEZlYiAyMDAzIDEzOjQ3OjI2IC0wODAwJykKKyAgICAgICAgdCA9IGludCh0aW1lLm1rdGltZSh0aW1ldHVwWzo5XSkpCisgICAgICAgIGVxKHRpbWUubG9jYWx0aW1lKHQpWzo2XSwgdGltZXR1cFs6Nl0pCisgICAgICAgIGVxKGludCh0aW1lLnN0cmZ0aW1lKCclWScsIHRpbWV0dXBbOjldKSksIDIwMDMpCisKKyAgICBkZWYgdGVzdF9ta3RpbWVfdHooc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXRpbHMubWt0aW1lX3R6KCgxOTcwLCAxLCAxLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIC0xLCAtMSwgMCkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFV0aWxzLm1rdGltZV90eigoMTk3MCwgMSwgMSwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgLTEsIDEyMzQpKSwgLTEyMzQpCisKKyAgICBkZWYgdGVzdF9wYXJzZWRhdGVfeTJrKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGZvciBwYXJzaW5nIGEgZGF0ZSB3aXRoIGEgdHdvLWRpZ2l0IHllYXIuCisKKyAgICAgICAgUGFyc2luZyBhIGRhdGUgd2l0aCBhIHR3by1kaWdpdCB5ZWFyIHNob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QKKyAgICAgICAgZm91ci1kaWdpdCB5ZWFyLiBSRkM4MjIgYWxsb3dzIHR3by1kaWdpdCB5ZWFycywgYnV0IFJGQzI4MjIgKHdoaWNoCisgICAgICAgIG9ic29sZXRlcyBSRkM4MjIpIHJlcXVpcmVzIGZvdXItZGlnaXQgeWVhcnMuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXRpbHMucGFyc2VkYXRlX3R6KCcyNSBGZWIgMDMgMTM6NDc6MjYgLTA4MDAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5wYXJzZWRhdGVfdHooJzI1IEZlYiAyMDAzIDEzOjQ3OjI2IC0wODAwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXRpbHMucGFyc2VkYXRlX3R6KCcyNSBGZWIgNzEgMTM6NDc6MjYgLTA4MDAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5wYXJzZWRhdGVfdHooJzI1IEZlYiAxOTcxIDEzOjQ3OjI2IC0wODAwJykpCisKKyAgICBkZWYgdGVzdF9wYXJzZWFkZHJfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXRpbHMucGFyc2VhZGRyKCc8PicpLCAoJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVdGlscy5mb3JtYXRhZGRyKFV0aWxzLnBhcnNlYWRkcignPD4nKSksICcnKQorCisgICAgZGVmIHRlc3Rfbm9xdW90ZV9kdW1wKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgVXRpbHMuZm9ybWF0YWRkcigoJ0EgU2lsbHkgUGVyc29uJywgJ3BlcnNvbkBkb20uYWluJykpLAorICAgICAgICAgICAgJ0EgU2lsbHkgUGVyc29uIDxwZXJzb25AZG9tLmFpbj4nKQorCisgICAgZGVmIHRlc3RfZXNjYXBlX2R1bXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBVdGlscy5mb3JtYXRhZGRyKCgnQSAoVmVyeSkgU2lsbHkgUGVyc29uJywgJ3BlcnNvbkBkb20uYWluJykpLAorICAgICAgICAgICAgciciQSBcKFZlcnlcKSBTaWxseSBQZXJzb24iIDxwZXJzb25AZG9tLmFpbj4nKQorICAgICAgICBhID0gcidBIFwoU3BlY2lhbFwpIFBlcnNvbicKKyAgICAgICAgYiA9ICdwZXJzb25AZG9tLmFpbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVdGlscy5wYXJzZWFkZHIoVXRpbHMuZm9ybWF0YWRkcigoYSwgYikpKSwgKGEsIGIpKQorCisgICAgZGVmIHRlc3RfZXNjYXBlX2JhY2tzbGFzaGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgVXRpbHMuZm9ybWF0YWRkcigoJ0FydGh1ciBcQmFja3NsYXNoXCBGb29iYXInLCAncGVyc29uQGRvbS5haW4nKSksCisgICAgICAgICAgICByJyJBcnRodXIgXFxCYWNrc2xhc2hcXCBGb29iYXIiIDxwZXJzb25AZG9tLmFpbj4nKQorICAgICAgICBhID0gcidBcnRodXIgXEJhY2tzbGFzaFwgRm9vYmFyJworICAgICAgICBiID0gJ3BlcnNvbkBkb20uYWluJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFV0aWxzLnBhcnNlYWRkcihVdGlscy5mb3JtYXRhZGRyKChhLCBiKSkpLCAoYSwgYikpCisKKyAgICBkZWYgdGVzdF9uYW1lX3dpdGhfZG90KHNlbGYpOgorICAgICAgICB4ID0gJ0pvaG4gWC4gRG9lIDxqeGRAZXhhbXBsZS5jb20+JworICAgICAgICB5ID0gJyJKb2huIFguIERvZSIgPGp4ZEBleGFtcGxlLmNvbT4nCisgICAgICAgIGEsIGIgPSAoJ0pvaG4gWC4gRG9lJywgJ2p4ZEBleGFtcGxlLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXRpbHMucGFyc2VhZGRyKHgpLCAoYSwgYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXRpbHMucGFyc2VhZGRyKHkpLCAoYSwgYikpCisgICAgICAgICMgZm9ybWF0YWRkcigpIHF1b3RlcyB0aGUgbmFtZSBpZiB0aGVyZSdzIGEgZG90IGluIGl0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXRpbHMuZm9ybWF0YWRkcigoYSwgYikpLCB5KQorCisgICAgZGVmIHRlc3RfcGFyc2VhZGRyX3ByZXNlcnZlc19xdW90ZWRfcGFpcnNfaW5fYWRkcmVzc2VzKHNlbGYpOgorICAgICAgICAjIGlzc3VlIDEwMDA1LiAgTm90ZSB0aGF0IGluIHRoZSB0aGlyZCB0ZXN0IHRoZSBzZWNvbmQgcGFpciBvZgorICAgICAgICAjIGJhY2tzbGFzaGVzIGlzIG5vdCBhY3R1YWxseSBhIHF1b3RlZCBwYWlyIGJlY2F1c2UgaXQgaXMgbm90IGluc2lkZSBhCisgICAgICAgICMgY29tbWVudCBvciBxdW90ZWQgc3RyaW5nOiB0aGUgYWRkcmVzcyBiZWluZyBwYXJzZWQgaGFzIGEgcXVvdGVkCisgICAgICAgICMgc3RyaW5nIGNvbnRhaW5pbmcgYSBxdW90ZWQgYmFja3NsYXNoLCBmb2xsb3dlZCBieSAnZXhhbXBsZScgYW5kIHR3bworICAgICAgICAjIGJhY2tzbGFzaGVzLCBmb2xsb3dlZCBieSBhbm90aGVyIHF1b3RlZCBzdHJpbmcgY29udGFpbmluZyBhIHNwYWNlIGFuZAorICAgICAgICAjIHRoZSB3b3JkICdleGFtcGxlJy4gIHBhcnNlYWRkciBjb3BpZXMgdGhvc2UgdHdvIGJhY2tzbGFzaGVzCisgICAgICAgICMgbGl0ZXJhbGx5LiAgUGVyIHJmYzUzMjIgdGhpcyBpcyBub3QgdGVjaG5pY2FsbHkgY29ycmVjdCBzaW5jZSBhIFwgbWF5CisgICAgICAgICMgbm90IGFwcGVhciBpbiBhbiBhZGRyZXNzIG91dHNpZGUgb2YgYSBxdW90ZWQgc3RyaW5nLiAgSXQgaXMgcHJvYmFibHkKKyAgICAgICAgIyBhIHNlbnNpYmxlIFBvc3RlbCBpbnRlcnByZXRhdGlvbiwgdGhvdWdoLgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoVXRpbHMucGFyc2VhZGRyKCciImV4YW1wbGUiIGV4YW1wbGUiQGV4YW1wbGUuY29tJyksCisgICAgICAgICAgKCcnLCAnIiJleGFtcGxlIiBleGFtcGxlIkBleGFtcGxlLmNvbScpKQorICAgICAgICBlcShVdGlscy5wYXJzZWFkZHIoJyJcXCJleGFtcGxlXFwiIGV4YW1wbGUiQGV4YW1wbGUuY29tJyksCisgICAgICAgICAgKCcnLCAnIlxcImV4YW1wbGVcXCIgZXhhbXBsZSJAZXhhbXBsZS5jb20nKSkKKyAgICAgICAgZXEoVXRpbHMucGFyc2VhZGRyKCciXFxcXCJleGFtcGxlXFxcXCIgZXhhbXBsZSJAZXhhbXBsZS5jb20nKSwKKyAgICAgICAgICAoJycsICciXFxcXCJleGFtcGxlXFxcXCIgZXhhbXBsZSJAZXhhbXBsZS5jb20nKSkKKworICAgIGRlZiB0ZXN0X211bHRpbGluZV9mcm9tX2NvbW1lbnQoc2VsZik6CisgICAgICAgIHggPSAiIiJcCitGb28KK1x0QmFyIDxmb29AZXhhbXBsZS5jb20+IiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXRpbHMucGFyc2VhZGRyKHgpLCAoJ0ZvbyBCYXInLCAnZm9vQGV4YW1wbGUuY29tJykpCisKKyAgICBkZWYgdGVzdF9xdW90ZV9kdW1wKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgVXRpbHMuZm9ybWF0YWRkcigoJ0EgU2lsbHk7IFBlcnNvbicsICdwZXJzb25AZG9tLmFpbicpKSwKKyAgICAgICAgICAgIHInIkEgU2lsbHk7IFBlcnNvbiIgPHBlcnNvbkBkb20uYWluPicpCisKKyAgICBkZWYgdGVzdF9maXhfZW9scyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKFV0aWxzLmZpeF9lb2xzKCdoZWxsbycpLCAnaGVsbG8nKQorICAgICAgICBlcShVdGlscy5maXhfZW9scygnaGVsbG9cbicpLCAnaGVsbG9cclxuJykKKyAgICAgICAgZXEoVXRpbHMuZml4X2VvbHMoJ2hlbGxvXHInKSwgJ2hlbGxvXHJcbicpCisgICAgICAgIGVxKFV0aWxzLmZpeF9lb2xzKCdoZWxsb1xyXG4nKSwgJ2hlbGxvXHJcbicpCisgICAgICAgIGVxKFV0aWxzLmZpeF9lb2xzKCdoZWxsb1xuXHInKSwgJ2hlbGxvXHJcblxyXG4nKQorCisgICAgZGVmIHRlc3RfY2hhcnNldF9yaWNoY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBuZSA9IHNlbGYuYXNzZXJ0Tm90RXF1YWwKKyAgICAgICAgY3NldDEgPSBDaGFyc2V0KCkKKyAgICAgICAgY3NldDIgPSBDaGFyc2V0KCkKKyAgICAgICAgZXEoY3NldDEsICd1cy1hc2NpaScpCisgICAgICAgIGVxKGNzZXQxLCAnVVMtQVNDSUknKQorICAgICAgICBlcShjc2V0MSwgJ1VzLUFzQ2lJJykKKyAgICAgICAgZXEoJ3VzLWFzY2lpJywgY3NldDEpCisgICAgICAgIGVxKCdVUy1BU0NJSScsIGNzZXQxKQorICAgICAgICBlcSgnVXMtQXNDaUknLCBjc2V0MSkKKyAgICAgICAgbmUoY3NldDEsICd1c2FzY2lpJykKKyAgICAgICAgbmUoY3NldDEsICdVU0FTQ0lJJykKKyAgICAgICAgbmUoY3NldDEsICdVc0FzQ2lJJykKKyAgICAgICAgbmUoJ3VzYXNjaWknLCBjc2V0MSkKKyAgICAgICAgbmUoJ1VTQVNDSUknLCBjc2V0MSkKKyAgICAgICAgbmUoJ1VzQXNDaUknLCBjc2V0MSkKKyAgICAgICAgZXEoY3NldDEsIGNzZXQyKQorICAgICAgICBlcShjc2V0MiwgY3NldDEpCisKKyAgICBkZWYgdGVzdF9nZXRhZGRyZXNzZXMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShVdGlscy5nZXRhZGRyZXNzZXMoWydhcGVyc29uQGRvbS5haW4gKEFsIFBlcnNvbiknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCdWQgUGVyc29uIDxicGVyc29uQGRvbS5haW4+J10pLAorICAgICAgICAgICBbKCdBbCBQZXJzb24nLCAnYXBlcnNvbkBkb20uYWluJyksCisgICAgICAgICAgICAoJ0J1ZCBQZXJzb24nLCAnYnBlcnNvbkBkb20uYWluJyldKQorCisgICAgZGVmIHRlc3RfZ2V0YWRkcmVzc2VzX25hc3R5KHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoVXRpbHMuZ2V0YWRkcmVzc2VzKFsnZm9vOiA7J10pLCBbKCcnLCAnJyldKQorICAgICAgICBlcShVdGlscy5nZXRhZGRyZXNzZXMoCisgICAgICAgICAgIFsnW10qLS0gPX4kJ10pLAorICAgICAgICAgICBbKCcnLCAnJyksICgnJywgJycpLCAoJycsICcqLS0nKV0pCisgICAgICAgIGVxKFV0aWxzLmdldGFkZHJlc3NlcygKKyAgICAgICAgICAgWydmb286IDsnLCAnIkphc29uIFIuIE1hc3RhbGVyIiA8amFzb25AZG9tLmFpbj4nXSksCisgICAgICAgICAgIFsoJycsICcnKSwgKCdKYXNvbiBSLiBNYXN0YWxlcicsICdqYXNvbkBkb20uYWluJyldKQorCisgICAgZGVmIHRlc3RfZ2V0YWRkcmVzc2VzX2VtYmVkZGVkX2NvbW1lbnQoc2VsZik6CisgICAgICAgICIiIlRlc3QgcHJvcGVyIGhhbmRsaW5nIG9mIGEgbmVzdGVkIGNvbW1lbnQiIiIKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGFkZHJzID0gVXRpbHMuZ2V0YWRkcmVzc2VzKFsnVXNlciAoKG5lc3RlZCBjb21tZW50KSkgPGZvb0BiYXIuY29tPiddKQorICAgICAgICBlcShhZGRyc1swXVsxXSwgJ2Zvb0BiYXIuY29tJykKKworICAgIGRlZiB0ZXN0X3V0aWxzX3F1b3RlX3VucXVvdGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLmFkZF9oZWFkZXIoJ2NvbnRlbnQtZGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPSdmb29cXHdhY2t5Im5hbWUnKQorICAgICAgICBlcShtc2cuZ2V0X2ZpbGVuYW1lKCksICdmb29cXHdhY2t5Im5hbWUnKQorCisgICAgZGVmIHRlc3RfZ2V0X2JvZHlfZW5jb2Rpbmdfd2l0aF9ib2d1c19jaGFyc2V0KHNlbGYpOgorICAgICAgICBjaGFyc2V0ID0gQ2hhcnNldCgnbm90IGEgY2hhcnNldCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hhcnNldC5nZXRfYm9keV9lbmNvZGluZygpLCAnYmFzZTY0JykKKworICAgIGRlZiB0ZXN0X2dldF9ib2R5X2VuY29kaW5nX3dpdGhfdXBwZXJjYXNlX2NoYXJzZXQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04JworICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHlwZSddLCAndGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCcpCisgICAgICAgIGNoYXJzZXRzID0gbXNnLmdldF9jaGFyc2V0cygpCisgICAgICAgIGVxKGxlbihjaGFyc2V0cyksIDEpCisgICAgICAgIGVxKGNoYXJzZXRzWzBdLCAndXRmLTgnKQorICAgICAgICBjaGFyc2V0ID0gQ2hhcnNldChjaGFyc2V0c1swXSkKKyAgICAgICAgZXEoY2hhcnNldC5nZXRfYm9keV9lbmNvZGluZygpLCAnYmFzZTY0JykKKyAgICAgICAgbXNnLnNldF9wYXlsb2FkKCdoZWxsbyB3b3JsZCcsIGNoYXJzZXQ9Y2hhcnNldCkKKyAgICAgICAgZXEobXNnLmdldF9wYXlsb2FkKCksICdhR1ZzYkc4Z2QyOXliR1E9XG4nKQorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCAnaGVsbG8gd29ybGQnKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSwgJ2Jhc2U2NCcpCisgICAgICAgICMgVHJ5IGFub3RoZXIgb25lCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW47IGNoYXJzZXQ9IlVTLUFTQ0lJIicKKyAgICAgICAgY2hhcnNldHMgPSBtc2cuZ2V0X2NoYXJzZXRzKCkKKyAgICAgICAgZXEobGVuKGNoYXJzZXRzKSwgMSkKKyAgICAgICAgZXEoY2hhcnNldHNbMF0sICd1cy1hc2NpaScpCisgICAgICAgIGNoYXJzZXQgPSBDaGFyc2V0KGNoYXJzZXRzWzBdKQorICAgICAgICBlcShjaGFyc2V0LmdldF9ib2R5X2VuY29kaW5nKCksIEVuY29kZXJzLmVuY29kZV83b3I4Yml0KQorICAgICAgICBtc2cuc2V0X3BheWxvYWQoJ2hlbGxvIHdvcmxkJywgY2hhcnNldD1jaGFyc2V0KQorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoKSwgJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgZXEobXNnWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ10sICc3Yml0JykKKworICAgIGRlZiB0ZXN0X2NoYXJzZXRzX2Nhc2VfaW5zZW5zaXRpdmUoc2VsZik6CisgICAgICAgIGxjID0gQ2hhcnNldCgndXMtYXNjaWknKQorICAgICAgICB1YyA9IENoYXJzZXQoJ1VTLUFTQ0lJJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsYy5nZXRfYm9keV9lbmNvZGluZygpLCB1Yy5nZXRfYm9keV9lbmNvZGluZygpKQorCisgICAgZGVmIHRlc3RfcGFydGlhbF9mYWxsc19pbnNpZGVfbWVzc2FnZV9kZWxpdmVyeV9zdGF0dXMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgICMgVGhlIFBhcnNlciBpbnRlcmZhY2UgcHJvdmlkZXMgY2h1bmtzIG9mIGRhdGEgdG8gRmVlZFBhcnNlciBpbiA4MTkyCisgICAgICAgICMgYnl0ZSBndWxwcy4gIFNGIGJ1ZyAjMTA3NjQ4NSBmb3VuZCBvbmUgb2YgdGhvc2UgY2h1bmtzIGluc2lkZQorICAgICAgICAjIG1lc3NhZ2UvZGVsaXZlcnktc3RhdHVzIGhlYWRlciBibG9jaywgd2hpY2ggdHJpZ2dlcmVkIGFuCisgICAgICAgICMgdW5yZWFkbGluZSgpIG9mIE5lZWRNb3JlRGF0YS4KKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfNDMudHh0JykKKyAgICAgICAgc2ZwID0gU3RyaW5nSU8oKQorICAgICAgICBJdGVyYXRvcnMuX3N0cnVjdHVyZShtc2csIHNmcCkKKyAgICAgICAgZXEoc2ZwLmdldHZhbHVlKCksICIiIlwKK211bHRpcGFydC9yZXBvcnQKKyAgICB0ZXh0L3BsYWluCisgICAgbWVzc2FnZS9kZWxpdmVyeS1zdGF0dXMKKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgdGV4dC9yZmM4MjItaGVhZGVycworIiIiKQorCisKKworIyBUZXN0IHRoZSBpdGVyYXRvci9nZW5lcmF0b3JzCitjbGFzcyBUZXN0SXRlcmF0b3JzKFRlc3RFbWFpbEJhc2UpOgorICAgIGRlZiB0ZXN0X2JvZHlfbGluZV9pdGVyYXRvcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG5lcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICAjIEZpcnN0IGEgc2ltcGxlIG5vbi1tdWx0aXBhcnQgbWVzc2FnZQorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBpdCA9IEl0ZXJhdG9ycy5ib2R5X2xpbmVfaXRlcmF0b3IobXNnKQorICAgICAgICBsaW5lcyA9IGxpc3QoaXQpCisgICAgICAgIGVxKGxlbihsaW5lcyksIDYpCisgICAgICAgIG5lcShFTVBUWVNUUklORy5qb2luKGxpbmVzKSwgbXNnLmdldF9wYXlsb2FkKCkpCisgICAgICAgICMgTm93IGEgbW9yZSBjb21wbGljYXRlZCBtdWx0aXBhcnQKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDIudHh0JykKKyAgICAgICAgaXQgPSBJdGVyYXRvcnMuYm9keV9saW5lX2l0ZXJhdG9yKG1zZykKKyAgICAgICAgbGluZXMgPSBsaXN0KGl0KQorICAgICAgICBlcShsZW4obGluZXMpLCA0MykKKyAgICAgICAgZnAgPSBvcGVuZmlsZSgnbXNnXzE5LnR4dCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5lcShFTVBUWVNUUklORy5qb2luKGxpbmVzKSwgZnAucmVhZCgpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZnAuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfdHlwZWRfc3VicGFydF9pdGVyYXRvcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzA0LnR4dCcpCisgICAgICAgIGl0ID0gSXRlcmF0b3JzLnR5cGVkX3N1YnBhcnRfaXRlcmF0b3IobXNnLCAndGV4dCcpCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgc3VicGFydHMgPSAwCisgICAgICAgIGZvciBzdWJwYXJ0IGluIGl0OgorICAgICAgICAgICAgc3VicGFydHMgKz0gMQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHN1YnBhcnQuZ2V0X3BheWxvYWQoKSkKKyAgICAgICAgZXEoc3VicGFydHMsIDIpCisgICAgICAgIGVxKEVNUFRZU1RSSU5HLmpvaW4obGluZXMpLCAiIiJcCithIHNpbXBsZSBraW5kIG9mIG1pcnJvcgordG8gcmVmbGVjdCB1cG9uIG91ciBvd24KK2Egc2ltcGxlIGtpbmQgb2YgbWlycm9yCit0byByZWZsZWN0IHVwb24gb3VyIG93bgorIiIiKQorCisgICAgZGVmIHRlc3RfdHlwZWRfc3VicGFydF9pdGVyYXRvcl9kZWZhdWx0X3R5cGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMy50eHQnKQorICAgICAgICBpdCA9IEl0ZXJhdG9ycy50eXBlZF9zdWJwYXJ0X2l0ZXJhdG9yKG1zZywgJ3RleHQnLCAncGxhaW4nKQorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIHN1YnBhcnRzID0gMAorICAgICAgICBmb3Igc3VicGFydCBpbiBpdDoKKyAgICAgICAgICAgIHN1YnBhcnRzICs9IDEKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzdWJwYXJ0LmdldF9wYXlsb2FkKCkpCisgICAgICAgIGVxKHN1YnBhcnRzLCAxKQorICAgICAgICBlcShFTVBUWVNUUklORy5qb2luKGxpbmVzKSwgIiIiXAorCitIaSwKKworRG8geW91IGxpa2UgdGhpcyBtZXNzYWdlPworCistTWUKKyIiIikKKworICAgIGRlZiB0ZXN0X3B1c2hDUl9MRihzZWxmKToKKyAgICAgICAgJycnRmVlZFBhcnNlciBCdWZmZXJlZFN1YkZpbGUucHVzaCgpIGFzc3VtZWQgaXQgcmVjZWl2ZWQgY29tcGxldGUKKyAgICAgICAgICAgbGluZSBlbmRpbmdzLiAgQSBDUiBlbmRpbmcgb25lIHB1c2goKSBmb2xsb3dlZCBieSBhIExGIHN0YXJ0aW5nCisgICAgICAgICAgIHRoZSBuZXh0IHB1c2goKSBhZGRlZCBhbiBlbXB0eSBsaW5lLgorICAgICAgICAnJycKKyAgICAgICAgaW10ID0gWworICAgICAgICAgICAgKCJhXHIgXG4iLCAgMiksCisgICAgICAgICAgICAoImIiLCAgICAgICAwKSwKKyAgICAgICAgICAgICgiY1xuIiwgICAgIDEpLAorICAgICAgICAgICAgKCIiLCAgICAgICAgMCksCisgICAgICAgICAgICAoImRcclxuIiwgICAxKSwKKyAgICAgICAgICAgICgiZVxyIiwgICAgIDApLAorICAgICAgICAgICAgKCJcbmYiLCAgICAgMSksCisgICAgICAgICAgICAoIlxyXG4iLCAgICAxKSwKKyAgICAgICAgICBdCisgICAgICAgIGZyb20gZW1haWwuZmVlZHBhcnNlciBpbXBvcnQgQnVmZmVyZWRTdWJGaWxlLCBOZWVkTW9yZURhdGEKKyAgICAgICAgYnNmID0gQnVmZmVyZWRTdWJGaWxlKCkKKyAgICAgICAgb20gPSBbXQorICAgICAgICBudCA9IDAKKyAgICAgICAgZm9yIGlsLCBuIGluIGltdDoKKyAgICAgICAgICAgIGJzZi5wdXNoKGlsKQorICAgICAgICAgICAgbnQgKz0gbgorICAgICAgICAgICAgbjEgPSAwCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIG9sID0gYnNmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBpZiBvbCA9PSBOZWVkTW9yZURhdGE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgb20uYXBwZW5kKG9sKQorICAgICAgICAgICAgICAgIG4xICs9IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuID09IG4xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG9tKSA9PSBudCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcnLmpvaW4oW2lsIGZvciBpbCwgbiBpbiBpbXRdKSA9PSAnJy5qb2luKG9tKSkKKworCisKK2NsYXNzIFRlc3RQYXJzZXJzKFRlc3RFbWFpbEJhc2UpOgorICAgIGRlZiB0ZXN0X2hlYWRlcl9wYXJzZXIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIFBhcnNlIG9ubHkgdGhlIGhlYWRlcnMgb2YgYSBjb21wbGV4IG11bHRpcGFydCBNSU1FIGRvY3VtZW50CisgICAgICAgIGZwID0gb3BlbmZpbGUoJ21zZ18wMi50eHQnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtc2cgPSBIZWFkZXJQYXJzZXIoKS5wYXJzZShmcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgZXEobXNnWydmcm9tJ10sICdwcHAtcmVxdWVzdEB6enoub3JnJykKKyAgICAgICAgZXEobXNnWyd0byddLCAncHBwQHp6ei5vcmcnKQorICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbXVsdGlwYXJ0L21peGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtc2cuaXNfbXVsdGlwYXJ0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1zZy5nZXRfcGF5bG9hZCgpLCBzdHIpKQorCisgICAgZGVmIHRlc3Rfd2hpdGVzcGFjZV9jb250aW51YXRpb24oc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIFRoaXMgbWVzc2FnZSBjb250YWlucyBhIGxpbmUgYWZ0ZXIgdGhlIFN1YmplY3Q6IGhlYWRlciB0aGF0IGhhcyBvbmx5CisgICAgICAgICMgd2hpdGVzcGFjZSwgYnV0IGl0IGlzIG5vdCBlbXB0eSEKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZygiIiJcCitGcm9tOiBhcGVyc29uQGRvbS5haW4KK1RvOiBicGVyc29uQGRvbS5haW4KK1N1YmplY3Q6IHRoZSBuZXh0IGxpbmUgaGFzIGEgc3BhY2Ugb24gaXQKK1x4MjAKK0RhdGU6IE1vbiwgOCBBcHIgMjAwMiAxNTowOToxOSAtMDQwMAorTWVzc2FnZS1JRDogc3BhbQorCitIZXJlJ3MgdGhlIG1lc3NhZ2UgYm9keQorIiIiKQorICAgICAgICBlcShtc2dbJ3N1YmplY3QnXSwgJ3RoZSBuZXh0IGxpbmUgaGFzIGEgc3BhY2Ugb24gaXRcbiAnKQorICAgICAgICBlcShtc2dbJ21lc3NhZ2UtaWQnXSwgJ3NwYW0nKQorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoKSwgIkhlcmUncyB0aGUgbWVzc2FnZSBib2R5XG4iKQorCisgICAgZGVmIHRlc3Rfd2hpdGVzcGFjZV9jb250aW51YXRpb25fbGFzdF9oZWFkZXIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIExpa2UgdGhlIHByZXZpb3VzIHRlc3QsIGJ1dCB0aGUgc3ViamVjdCBsaW5lIGlzIHRoZSBsYXN0CisgICAgICAgICMgaGVhZGVyLgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKCIiIlwKK0Zyb206IGFwZXJzb25AZG9tLmFpbgorVG86IGJwZXJzb25AZG9tLmFpbgorRGF0ZTogTW9uLCA4IEFwciAyMDAyIDE1OjA5OjE5IC0wNDAwCitNZXNzYWdlLUlEOiBzcGFtCitTdWJqZWN0OiB0aGUgbmV4dCBsaW5lIGhhcyBhIHNwYWNlIG9uIGl0CitceDIwCisKK0hlcmUncyB0aGUgbWVzc2FnZSBib2R5CisiIiIpCisgICAgICAgIGVxKG1zZ1snc3ViamVjdCddLCAndGhlIG5leHQgbGluZSBoYXMgYSBzcGFjZSBvbiBpdFxuICcpCisgICAgICAgIGVxKG1zZ1snbWVzc2FnZS1pZCddLCAnc3BhbScpCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgpLCAiSGVyZSdzIHRoZSBtZXNzYWdlIGJvZHlcbiIpCisKKyAgICBkZWYgdGVzdF9jcmxmX3NlcGFyYXRpb24oc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBmcCA9IG9wZW5maWxlKCdtc2dfMjYudHh0JywgbW9kZT0ncmInKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtc2cgPSBQYXJzZXIoKS5wYXJzZShmcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgZXEobGVuKG1zZy5nZXRfcGF5bG9hZCgpKSwgMikKKyAgICAgICAgcGFydDEgPSBtc2cuZ2V0X3BheWxvYWQoMCkKKyAgICAgICAgZXEocGFydDEuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIGVxKHBhcnQxLmdldF9wYXlsb2FkKCksICdTaW1wbGUgZW1haWwgd2l0aCBhdHRhY2htZW50LlxyXG5cclxuJykKKyAgICAgICAgcGFydDIgPSBtc2cuZ2V0X3BheWxvYWQoMSkKKyAgICAgICAgZXEocGFydDIuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnYXBwbGljYXRpb24vcmlzY29zJykKKworICAgIGRlZiB0ZXN0X211bHRpcGFydF9kaWdlc3Rfd2l0aF9leHRyYV9taW1lX2hlYWRlcnMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBuZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgZnAgPSBvcGVuZmlsZSgnbXNnXzI4LnR4dCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9maWxlKGZwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAjIFN0cnVjdHVyZSBpczoKKyAgICAgICAgIyBtdWx0aXBhcnQvZGlnZXN0CisgICAgICAgICMgICBtZXNzYWdlL3JmYzgyMgorICAgICAgICAjICAgICB0ZXh0L3BsYWluCisgICAgICAgICMgICBtZXNzYWdlL3JmYzgyMgorICAgICAgICAjICAgICB0ZXh0L3BsYWluCisgICAgICAgIGVxKG1zZy5pc19tdWx0aXBhcnQoKSwgMSkKKyAgICAgICAgZXEobGVuKG1zZy5nZXRfcGF5bG9hZCgpKSwgMikKKyAgICAgICAgcGFydDEgPSBtc2cuZ2V0X3BheWxvYWQoMCkKKyAgICAgICAgZXEocGFydDEuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICBlcShwYXJ0MS5pc19tdWx0aXBhcnQoKSwgMSkKKyAgICAgICAgZXEobGVuKHBhcnQxLmdldF9wYXlsb2FkKCkpLCAxKQorICAgICAgICBwYXJ0MWEgPSBwYXJ0MS5nZXRfcGF5bG9hZCgwKQorICAgICAgICBlcShwYXJ0MWEuaXNfbXVsdGlwYXJ0KCksIDApCisgICAgICAgIGVxKHBhcnQxYS5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgbmVxKHBhcnQxYS5nZXRfcGF5bG9hZCgpLCAnbWVzc2FnZSAxXG4nKQorICAgICAgICAjIG5leHQgbWVzc2FnZS9yZmM4MjIKKyAgICAgICAgcGFydDIgPSBtc2cuZ2V0X3BheWxvYWQoMSkKKyAgICAgICAgZXEocGFydDIuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICBlcShwYXJ0Mi5pc19tdWx0aXBhcnQoKSwgMSkKKyAgICAgICAgZXEobGVuKHBhcnQyLmdldF9wYXlsb2FkKCkpLCAxKQorICAgICAgICBwYXJ0MmEgPSBwYXJ0Mi5nZXRfcGF5bG9hZCgwKQorICAgICAgICBlcShwYXJ0MmEuaXNfbXVsdGlwYXJ0KCksIDApCisgICAgICAgIGVxKHBhcnQyYS5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgbmVxKHBhcnQyYS5nZXRfcGF5bG9hZCgpLCAnbWVzc2FnZSAyXG4nKQorCisgICAgZGVmIHRlc3RfdGhyZWVfbGluZXMoc2VsZik6CisgICAgICAgICMgQSBidWcgcmVwb3J0IGJ5IEFuZHJldyBNY05hbWFyYQorICAgICAgICBsaW5lcyA9IFsnRnJvbTogQW5kcmV3IFBlcnNvbiA8YXBlcnNvbkBkb20uYWluJywKKyAgICAgICAgICAgICAgICAgJ1N1YmplY3Q6IFRlc3QnLAorICAgICAgICAgICAgICAgICAnRGF0ZTogVHVlLCAyMCBBdWcgMjAwMiAxNjo0Mzo0NSArMTAwMCddCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoTkwuam9pbihsaW5lcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnWydkYXRlJ10sICdUdWUsIDIwIEF1ZyAyMDAyIDE2OjQzOjQ1ICsxMDAwJykKKworICAgIGRlZiB0ZXN0X3N0cmlwX2xpbmVfZmVlZF9hbmRfY2FycmlhZ2VfcmV0dXJuX2luX2hlYWRlcnMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIEZvciBbIDEwMDI0NzUgXSBlbWFpbCBtZXNzYWdlIHBhcnNlciBkb2Vzbid0IGhhbmRsZSBcclxuIGNvcnJlY3RseQorICAgICAgICB2YWx1ZTEgPSAndGV4dCcKKyAgICAgICAgdmFsdWUyID0gJ21vcmUgdGV4dCcKKyAgICAgICAgbSA9ICdIZWFkZXI6ICVzXHJcbk5leHQtSGVhZGVyOiAlc1xyXG5cclxuQm9keVxyXG5cclxuJyAlICgKKyAgICAgICAgICAgIHZhbHVlMSwgdmFsdWUyKQorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIGVxKG1zZy5nZXQoJ0hlYWRlcicpLCB2YWx1ZTEpCisgICAgICAgIGVxKG1zZy5nZXQoJ05leHQtSGVhZGVyJyksIHZhbHVlMikKKworICAgIGRlZiB0ZXN0X3JmYzI4MjJfaGVhZGVyX3N5bnRheChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG0gPSAnPkZyb206IGZvb1xuRnJvbTogYmFyXG4hIiNRVVg7fjogem9vXG5cbmJvZHknCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKKyAgICAgICAgZXEobGVuKG1zZy5rZXlzKCkpLCAzKQorICAgICAgICBrZXlzID0gbXNnLmtleXMoKQorICAgICAgICBrZXlzLnNvcnQoKQorICAgICAgICBlcShrZXlzLCBbJyEiI1FVWDt+JywgJz5Gcm9tJywgJ0Zyb20nXSkKKyAgICAgICAgZXEobXNnLmdldF9wYXlsb2FkKCksICdib2R5JykKKworICAgIGRlZiB0ZXN0X3JmYzI4MjJfc3BhY2Vfbm90X2FsbG93ZWRfaW5faGVhZGVyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbSA9ICc+RnJvbSBmb29AZXhhbXBsZS5jb20gMTE6MjU6NTNcbkZyb206IGJhclxuISIjUVVYO346IHpvb1xuXG5ib2R5JworICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIGVxKGxlbihtc2cua2V5cygpKSwgMCkKKworICAgIGRlZiB0ZXN0X3JmYzI4MjJfb25lX2NoYXJhY3Rlcl9oZWFkZXIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtID0gJ0E6IGZpcnN0IGhlYWRlclxuQjogc2Vjb25kIGhlYWRlclxuQ0M6IHRoaXJkIGhlYWRlclxuXG5ib2R5JworICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIGhlYWRlcnMgPSBtc2cua2V5cygpCisgICAgICAgIGhlYWRlcnMuc29ydCgpCisgICAgICAgIGVxKGhlYWRlcnMsIFsnQScsICdCJywgJ0NDJ10pCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgpLCAnYm9keScpCisKKyAgICBkZWYgdGVzdF9DUkxGTEZfYXRfZW5kX29mX3BhcnQoc2VsZik6CisgICAgICAgICMgaXNzdWUgNTYxMDogZmVlZHBhcnNlciBzaG91bGQgbm90IGVhdCB0d28gY2hhcnMgZnJvbSBib2R5IHBhcnQgZW5kaW5nCisgICAgICAgICMgd2l0aCAiXHJcblxuIi4KKyAgICAgICAgbSA9ICgKKyAgICAgICAgICAgICJGcm9tOiBmb29AYmFyLmNvbVxuIgorICAgICAgICAgICAgIlRvOiBiYXpcbiIKKyAgICAgICAgICAgICJNaW1lLVZlcnNpb246IDEuMFxuIgorICAgICAgICAgICAgIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1CT1VOREFSWVxuIgorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgIi0tQk9VTkRBUllcbiIKKyAgICAgICAgICAgICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW5cbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJib2R5IGVuZGluZyB3aXRoIENSTEYgbmV3bGluZVxyXG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiLS1CT1VOREFSWS0tXG4iCisgICAgICAgICAgKQorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuZ2V0X3BheWxvYWQoMCkuZ2V0X3BheWxvYWQoKS5lbmRzd2l0aCgnXHJcbicpKQorCisKK2NsYXNzIFRlc3RCYXNlNjQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKGJhc2U2NE1JTUUuYmFzZTY0X2xlbignaGVsbG8nKSwKKyAgICAgICAgICAgbGVuKGJhc2U2NE1JTUUuZW5jb2RlKCdoZWxsbycsIGVvbD0nJykpKQorICAgICAgICBmb3Igc2l6ZSBpbiByYW5nZSgxNSk6CisgICAgICAgICAgICBpZiAgIHNpemUgPT0gMCA6IGJzaXplID0gMAorICAgICAgICAgICAgZWxpZiBzaXplIDw9IDMgOiBic2l6ZSA9IDQKKyAgICAgICAgICAgIGVsaWYgc2l6ZSA8PSA2IDogYnNpemUgPSA4CisgICAgICAgICAgICBlbGlmIHNpemUgPD0gOSA6IGJzaXplID0gMTIKKyAgICAgICAgICAgIGVsaWYgc2l6ZSA8PSAxMjogYnNpemUgPSAxNgorICAgICAgICAgICAgZWxzZSAgICAgICAgICAgOiBic2l6ZSA9IDIwCisgICAgICAgICAgICBlcShiYXNlNjRNSU1FLmJhc2U2NF9sZW4oJ3gnKnNpemUpLCBic2l6ZSkKKworICAgIGRlZiB0ZXN0X2RlY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKGJhc2U2NE1JTUUuZGVjb2RlKCcnKSwgJycpCisgICAgICAgIGVxKGJhc2U2NE1JTUUuZGVjb2RlKCdhR1ZzYkc4PScpLCAnaGVsbG8nKQorICAgICAgICBlcShiYXNlNjRNSU1FLmRlY29kZSgnYUdWc2JHOD0nLCAnWCcpLCAnaGVsbG8nKQorICAgICAgICBlcShiYXNlNjRNSU1FLmRlY29kZSgnYUdWc2JHOE5DbmR2Y214a1xuJywgJ1gnKSwgJ2hlbGxvWHdvcmxkJykKKworICAgIGRlZiB0ZXN0X2VuY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKGJhc2U2NE1JTUUuZW5jb2RlKCcnKSwgJycpCisgICAgICAgIGVxKGJhc2U2NE1JTUUuZW5jb2RlKCdoZWxsbycpLCAnYUdWc2JHOD1cbicpCisgICAgICAgICMgVGVzdCB0aGUgYmluYXJ5IGZsYWcKKyAgICAgICAgZXEoYmFzZTY0TUlNRS5lbmNvZGUoJ2hlbGxvXG4nKSwgJ2FHVnNiRzhLXG4nKQorICAgICAgICBlcShiYXNlNjRNSU1FLmVuY29kZSgnaGVsbG9cbicsIDApLCAnYUdWc2JHOE5DZz09XG4nKQorICAgICAgICAjIFRlc3QgdGhlIG1heGxpbmVsZW4gYXJnCisgICAgICAgIGVxKGJhc2U2NE1JTUUuZW5jb2RlKCd4eHh4ICcgKiAyMCwgbWF4bGluZWxlbj00MCksICIiIlwKK2VIaDRlQ0I0ZUhoNElIaDRlSGdnZUhoNGVDQjRlSGg0SUhoNGVIZ2cKK2VIaDRlQ0I0ZUhoNElIaDRlSGdnZUhoNGVDQjRlSGg0SUhoNGVIZ2cKK2VIaDRlQ0I0ZUhoNElIaDRlSGdnZUhoNGVDQjRlSGg0SUhoNGVIZ2cKK2VIaDRlQ0I0ZUhoNElBPT0KKyIiIikKKyAgICAgICAgIyBUZXN0IHRoZSBlb2wgYXJndW1lbnQKKyAgICAgICAgZXEoYmFzZTY0TUlNRS5lbmNvZGUoJ3h4eHggJyAqIDIwLCBtYXhsaW5lbGVuPTQwLCBlb2w9J1xyXG4nKSwgIiIiXAorZUhoNGVDQjRlSGg0SUhoNGVIZ2dlSGg0ZUNCNGVIaDRJSGg0ZUhnZ1xyCitlSGg0ZUNCNGVIaDRJSGg0ZUhnZ2VIaDRlQ0I0ZUhoNElIaDRlSGdnXHIKK2VIaDRlQ0I0ZUhoNElIaDRlSGdnZUhoNGVDQjRlSGg0SUhoNGVIZ2dccgorZUhoNGVDQjRlSGg0SUE9PVxyCisiIiIpCisKKyAgICBkZWYgdGVzdF9oZWFkZXJfZW5jb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgaGUgPSBiYXNlNjRNSU1FLmhlYWRlcl9lbmNvZGUKKyAgICAgICAgZXEoaGUoJ2hlbGxvJyksICc9P2lzby04ODU5LTE/Yj9hR1ZzYkc4PT89JykKKyAgICAgICAgZXEoaGUoJ2hlbGxvXG53b3JsZCcpLCAnPT9pc28tODg1OS0xP2I/YUdWc2JHOE5DbmR2Y214az89JykKKyAgICAgICAgIyBUZXN0IHRoZSBjaGFyc2V0IG9wdGlvbgorICAgICAgICBlcShoZSgnaGVsbG8nLCBjaGFyc2V0PSdpc28tODg1OS0yJyksICc9P2lzby04ODU5LTI/Yj9hR1ZzYkc4PT89JykKKyAgICAgICAgIyBUZXN0IHRoZSBrZWVwX2VvbHMgZmxhZworICAgICAgICBlcShoZSgnaGVsbG9cbndvcmxkJywga2VlcF9lb2xzPVRydWUpLAorICAgICAgICAgICAnPT9pc28tODg1OS0xP2I/YUdWc2JHOEtkMjl5YkdRPT89JykKKyAgICAgICAgIyBUZXN0IHRoZSBtYXhsaW5lbGVuIGFyZ3VtZW50CisgICAgICAgIGVxKGhlKCd4eHh4ICcgKiAyMCwgbWF4bGluZWxlbj00MCksICIiIlwKKz0/aXNvLTg4NTktMT9iP2VIaDRlQ0I0ZUhoNElIaDRlSGdnZUhnPT89CisgPT9pc28tODg1OS0xP2I/ZUhnZ2VIaDRlQ0I0ZUhoNElIaDRlSGc9Pz0KKyA9P2lzby04ODU5LTE/Yj9JSGg0ZUhnZ2VIaDRlQ0I0ZUhoNElIZz0/PQorID0/aXNvLTg4NTktMT9iP2VIaDRJSGg0ZUhnZ2VIaDRlQ0I0ZUhnPT89CisgPT9pc28tODg1OS0xP2I/ZUNCNGVIaDRJSGg0ZUhnZ2VIaDRlQ0E9Pz0KKyA9P2lzby04ODU5LTE/Yj9lSGg0ZUNCNGVIaDRJSGg0ZUhnZz89IiIiKQorICAgICAgICAjIFRlc3QgdGhlIGVvbCBhcmd1bWVudAorICAgICAgICBlcShoZSgneHh4eCAnICogMjAsIG1heGxpbmVsZW49NDAsIGVvbD0nXHJcbicpLCAiIiJcCis9P2lzby04ODU5LTE/Yj9lSGg0ZUNCNGVIaDRJSGg0ZUhnZ2VIZz0/PVxyCisgPT9pc28tODg1OS0xP2I/ZUhnZ2VIaDRlQ0I0ZUhoNElIaDRlSGc9Pz1ccgorID0/aXNvLTg4NTktMT9iP0lIaDRlSGdnZUhoNGVDQjRlSGg0SUhnPT89XHIKKyA9P2lzby04ODU5LTE/Yj9lSGg0SUhoNGVIZ2dlSGg0ZUNCNGVIZz0/PVxyCisgPT9pc28tODg1OS0xP2I/ZUNCNGVIaDRJSGg0ZUhnZ2VIaDRlQ0E9Pz1ccgorID0/aXNvLTg4NTktMT9iP2VIaDRlQ0I0ZUhoNElIaDRlSGdnPz0iIiIpCisKKworCitjbGFzcyBUZXN0UXVvcHJpKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuaGxpdCA9IFtjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdhJyksIG9yZCgneicpKzEpXSArIFwKKyAgICAgICAgICAgICAgICAgICAgW2Nocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ0EnKSwgb3JkKCdaJykrMSldICsgXAorICAgICAgICAgICAgICAgICAgICBbY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnMCcpLCBvcmQoJzknKSsxKV0gKyBcCisgICAgICAgICAgICAgICAgICAgIFsnIScsICcqJywgJysnLCAnLScsICcvJywgJyAnXQorICAgICAgICBzZWxmLmhub24gPSBbY2hyKHgpIGZvciB4IGluIHJhbmdlKDI1NikgaWYgY2hyKHgpIG5vdCBpbiBzZWxmLmhsaXRdCisgICAgICAgIGFzc2VydCBsZW4oc2VsZi5obGl0KSArIGxlbihzZWxmLmhub24pID09IDI1NgorICAgICAgICBzZWxmLmJsaXQgPSBbY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnICcpLCBvcmQoJ34nKSsxKV0gKyBbJ1x0J10KKyAgICAgICAgc2VsZi5ibGl0LnJlbW92ZSgnPScpCisgICAgICAgIHNlbGYuYm5vbiA9IFtjaHIoeCkgZm9yIHggaW4gcmFuZ2UoMjU2KSBpZiBjaHIoeCkgbm90IGluIHNlbGYuYmxpdF0KKyAgICAgICAgYXNzZXJ0IGxlbihzZWxmLmJsaXQpICsgbGVuKHNlbGYuYm5vbikgPT0gMjU2CisKKyAgICBkZWYgdGVzdF9oZWFkZXJfcXVvcHJpX2NoZWNrKHNlbGYpOgorICAgICAgICBmb3IgYyBpbiBzZWxmLmhsaXQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHF1b3ByaU1JTUUuaGVhZGVyX3F1b3ByaV9jaGVjayhjKSkKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5obm9uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1b3ByaU1JTUUuaGVhZGVyX3F1b3ByaV9jaGVjayhjKSkKKworICAgIGRlZiB0ZXN0X2JvZHlfcXVvcHJpX2NoZWNrKHNlbGYpOgorICAgICAgICBmb3IgYyBpbiBzZWxmLmJsaXQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHF1b3ByaU1JTUUuYm9keV9xdW9wcmlfY2hlY2soYykpCisgICAgICAgIGZvciBjIGluIHNlbGYuYm5vbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdW9wcmlNSU1FLmJvZHlfcXVvcHJpX2NoZWNrKGMpKQorCisgICAgZGVmIHRlc3RfaGVhZGVyX3F1b3ByaV9sZW4oc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBocWwgPSBxdW9wcmlNSU1FLmhlYWRlcl9xdW9wcmlfbGVuCisgICAgICAgIGVuYyA9IHF1b3ByaU1JTUUuaGVhZGVyX2VuY29kZQorICAgICAgICBmb3IgcyBpbiAoJ2hlbGxvJywgJ2hAZUBsQGxAb0AnKToKKyAgICAgICAgICAgICMgRW1wdHkgY2hhcnNldCBhbmQgbm8gbGluZS1lbmRpbmdzLiAgNyA9PSBSRkMgY2hyb21lCisgICAgICAgICAgICBlcShocWwocyksIGxlbihlbmMocywgY2hhcnNldD0nJywgZW9sPScnKSktNykKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5obGl0OgorICAgICAgICAgICAgZXEoaHFsKGMpLCAxKQorICAgICAgICBmb3IgYyBpbiBzZWxmLmhub246CisgICAgICAgICAgICBlcShocWwoYyksIDMpCisKKyAgICBkZWYgdGVzdF9ib2R5X3F1b3ByaV9sZW4oc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBicWwgPSBxdW9wcmlNSU1FLmJvZHlfcXVvcHJpX2xlbgorICAgICAgICBmb3IgYyBpbiBzZWxmLmJsaXQ6CisgICAgICAgICAgICBlcShicWwoYyksIDEpCisgICAgICAgIGZvciBjIGluIHNlbGYuYm5vbjoKKyAgICAgICAgICAgIGVxKGJxbChjKSwgMykKKworICAgIGRlZiB0ZXN0X3F1b3RlX3VucXVvdGVfaWRlbXBvdGVudChzZWxmKToKKyAgICAgICAgZm9yIHggaW4gcmFuZ2UoMjU2KToKKyAgICAgICAgICAgIGMgPSBjaHIoeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvcHJpTUlNRS51bnF1b3RlKHF1b3ByaU1JTUUucXVvdGUoYykpLCBjKQorCisgICAgZGVmIHRlc3RfaGVhZGVyX2VuY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGhlID0gcXVvcHJpTUlNRS5oZWFkZXJfZW5jb2RlCisgICAgICAgIGVxKGhlKCdoZWxsbycpLCAnPT9pc28tODg1OS0xP3E/aGVsbG8/PScpCisgICAgICAgIGVxKGhlKCdoZWxsb1xud29ybGQnKSwgJz0/aXNvLTg4NTktMT9xP2hlbGxvPTBEPTBBd29ybGQ/PScpCisgICAgICAgICMgVGVzdCB0aGUgY2hhcnNldCBvcHRpb24KKyAgICAgICAgZXEoaGUoJ2hlbGxvJywgY2hhcnNldD0naXNvLTg4NTktMicpLCAnPT9pc28tODg1OS0yP3E/aGVsbG8/PScpCisgICAgICAgICMgVGVzdCB0aGUga2VlcF9lb2xzIGZsYWcKKyAgICAgICAgZXEoaGUoJ2hlbGxvXG53b3JsZCcsIGtlZXBfZW9scz1UcnVlKSwgJz0/aXNvLTg4NTktMT9xP2hlbGxvPTBBd29ybGQ/PScpCisgICAgICAgICMgVGVzdCBhIG5vbi1BU0NJSSBjaGFyYWN0ZXIKKyAgICAgICAgZXEoaGUoJ2hlbGxvXHhjN3RoZXJlJyksICc9P2lzby04ODU5LTE/cT9oZWxsbz1DN3RoZXJlPz0nKQorICAgICAgICAjIFRlc3QgdGhlIG1heGxpbmVsZW4gYXJndW1lbnQKKyAgICAgICAgZXEoaGUoJ3h4eHggJyAqIDIwLCBtYXhsaW5lbGVuPTQwKSwgIiIiXAorPT9pc28tODg1OS0xP3E/eHh4eF94eHh4X3h4eHhfeHh4eF94eD89CisgPT9pc28tODg1OS0xP3E/eHhfeHh4eF94eHh4X3h4eHhfeHh4eD89CisgPT9pc28tODg1OS0xP3E/X3h4eHhfeHh4eF94eHh4X3h4eHhfeD89CisgPT9pc28tODg1OS0xP3E/eHh4X3h4eHhfeHh4eF94eHh4X3h4eD89CisgPT9pc28tODg1OS0xP3E/eF94eHh4X3h4eHhfPz0iIiIpCisgICAgICAgICMgVGVzdCB0aGUgZW9sIGFyZ3VtZW50CisgICAgICAgIGVxKGhlKCd4eHh4ICcgKiAyMCwgbWF4bGluZWxlbj00MCwgZW9sPSdcclxuJyksICIiIlwKKz0/aXNvLTg4NTktMT9xP3h4eHhfeHh4eF94eHh4X3h4eHhfeHg/PVxyCisgPT9pc28tODg1OS0xP3E/eHhfeHh4eF94eHh4X3h4eHhfeHh4eD89XHIKKyA9P2lzby04ODU5LTE/cT9feHh4eF94eHh4X3h4eHhfeHh4eF94Pz1ccgorID0/aXNvLTg4NTktMT9xP3h4eF94eHh4X3h4eHhfeHh4eF94eHg/PVxyCisgPT9pc28tODg1OS0xP3E/eF94eHh4X3h4eHhfPz0iIiIpCisKKyAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShxdW9wcmlNSU1FLmRlY29kZSgnJyksICcnKQorICAgICAgICBlcShxdW9wcmlNSU1FLmRlY29kZSgnaGVsbG8nKSwgJ2hlbGxvJykKKyAgICAgICAgZXEocXVvcHJpTUlNRS5kZWNvZGUoJ2hlbGxvJywgJ1gnKSwgJ2hlbGxvJykKKyAgICAgICAgZXEocXVvcHJpTUlNRS5kZWNvZGUoJ2hlbGxvXG53b3JsZCcsICdYJyksICdoZWxsb1h3b3JsZCcpCisKKyAgICBkZWYgdGVzdF9lbmNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShxdW9wcmlNSU1FLmVuY29kZSgnJyksICcnKQorICAgICAgICBlcShxdW9wcmlNSU1FLmVuY29kZSgnaGVsbG8nKSwgJ2hlbGxvJykKKyAgICAgICAgIyBUZXN0IHRoZSBiaW5hcnkgZmxhZworICAgICAgICBlcShxdW9wcmlNSU1FLmVuY29kZSgnaGVsbG9cclxud29ybGQnKSwgJ2hlbGxvXG53b3JsZCcpCisgICAgICAgIGVxKHF1b3ByaU1JTUUuZW5jb2RlKCdoZWxsb1xyXG53b3JsZCcsIDApLCAnaGVsbG9cbndvcmxkJykKKyAgICAgICAgIyBUZXN0IHRoZSBtYXhsaW5lbGVuIGFyZworICAgICAgICBlcShxdW9wcmlNSU1FLmVuY29kZSgneHh4eCAnICogMjAsIG1heGxpbmVsZW49NDApLCAiIiJcCit4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHg9CisgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHg9Cit4IHh4eHggeHh4eCB4eHh4IHh4eHg9MjAiIiIpCisgICAgICAgICMgVGVzdCB0aGUgZW9sIGFyZ3VtZW50CisgICAgICAgIGVxKHF1b3ByaU1JTUUuZW5jb2RlKCd4eHh4ICcgKiAyMCwgbWF4bGluZWxlbj00MCwgZW9sPSdcclxuJyksICIiIlwKK3h4eHggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eD1ccgorIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4PVxyCit4IHh4eHggeHh4eCB4eHh4IHh4eHg9MjAiIiIpCisgICAgICAgIGVxKHF1b3ByaU1JTUUuZW5jb2RlKCIiIlwKK29uZSBsaW5lCisKK3R3byBsaW5lIiIiKSwgIiIiXAorb25lIGxpbmUKKwordHdvIGxpbmUiIiIpCisKKworCisjIFRlc3QgdGhlIENoYXJzZXQgY2xhc3MKK2NsYXNzIFRlc3RDaGFyc2V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZyb20gZW1haWwgaW1wb3J0IENoYXJzZXQgYXMgQ2hhcnNldE1vZHVsZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgQ2hhcnNldE1vZHVsZS5DSEFSU0VUU1snZmFrZSddCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2lkZW1wb3RlbnQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIE1ha2Ugc3VyZSB1cy1hc2NpaSA9IG5vIFVuaWNvZGUgY29udmVyc2lvbgorICAgICAgICBjID0gQ2hhcnNldCgndXMtYXNjaWknKQorICAgICAgICBzID0gJ0hlbGxvIFdvcmxkIScKKyAgICAgICAgc3AgPSBjLnRvX3NwbGl0dGFibGUocykKKyAgICAgICAgZXEocywgYy5mcm9tX3NwbGl0dGFibGUoc3ApKQorICAgICAgICAjIHRlc3QgOC1iaXQgaWRlbXBvdGVuY3kgd2l0aCB1cy1hc2NpaQorICAgICAgICBzID0gJ1x4YTRceGEyXHhhNFx4YTRceGE0XHhhNlx4YTRceGE4XHhhNFx4YWEnCisgICAgICAgIHNwID0gYy50b19zcGxpdHRhYmxlKHMpCisgICAgICAgIGVxKHMsIGMuZnJvbV9zcGxpdHRhYmxlKHNwKSkKKworICAgIGRlZiB0ZXN0X2JvZHlfZW5jb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgIyBUcnkgYSBjaGFyc2V0IHdpdGggUVAgYm9keSBlbmNvZGluZworICAgICAgICBjID0gQ2hhcnNldCgnaXNvLTg4NTktMScpCisgICAgICAgIGVxKCdoZWxsbyB3PUY2cmxkJywgYy5ib2R5X2VuY29kZSgnaGVsbG8gd1x4ZjZybGQnKSkKKyAgICAgICAgIyBUcnkgYSBjaGFyc2V0IHdpdGggQmFzZTY0IGJvZHkgZW5jb2RpbmcKKyAgICAgICAgYyA9IENoYXJzZXQoJ3V0Zi04JykKKyAgICAgICAgZXEoJ2FHVnNiRzhnZDI5eWJHUT1cbicsIGMuYm9keV9lbmNvZGUoJ2hlbGxvIHdvcmxkJykpCisgICAgICAgICMgVHJ5IGEgY2hhcnNldCB3aXRoIE5vbmUgYm9keSBlbmNvZGluZworICAgICAgICBjID0gQ2hhcnNldCgndXMtYXNjaWknKQorICAgICAgICBlcSgnaGVsbG8gd29ybGQnLCBjLmJvZHlfZW5jb2RlKCdoZWxsbyB3b3JsZCcpKQorICAgICAgICAjIFRyeSB0aGUgY29udmVydCBhcmd1bWVudCwgd2hlcmUgaW5wdXQgY29kZWMgIT0gb3V0cHV0IGNvZGVjCisgICAgICAgIGMgPSBDaGFyc2V0KCdldWMtanAnKQorICAgICAgICAjIFdpdGggYXBvbG9naWVzIHRvIFRva2lvIEtpa3VjaGkgOykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXEoJ1x4MWIkQjVGQ087fklXXHgxYihCJywKKyAgICAgICAgICAgICAgIGMuYm9keV9lbmNvZGUoJ1x4YjVceGM2XHhjM1x4Y2ZceGJiXHhmZVx4YzlceGQ3JykpCisgICAgICAgICAgICBlcSgnXHhiNVx4YzZceGMzXHhjZlx4YmJceGZlXHhjOVx4ZDcnLAorICAgICAgICAgICAgICAgYy5ib2R5X2VuY29kZSgnXHhiNVx4YzZceGMzXHhjZlx4YmJceGZlXHhjOVx4ZDcnLCBGYWxzZSkpCisgICAgICAgIGV4Y2VwdCBMb29rdXBFcnJvcjoKKyAgICAgICAgICAgICMgV2UgcHJvYmFibHkgZG9uJ3QgaGF2ZSB0aGUgSmFwYW5lc2UgY29kZWNzIGluc3RhbGxlZAorICAgICAgICAgICAgcGFzcworICAgICAgICAjIFRlc3RpbmcgU0YgYnVnICM2MjU1MDksIHdoaWNoIHdlIGhhdmUgdG8gZmFrZSwgc2luY2UgdGhlcmUgYXJlIG5vCisgICAgICAgICMgYnVpbHQtaW4gZW5jb2RpbmdzIHdoZXJlIHRoZSBoZWFkZXIgZW5jb2RpbmcgaXMgUVAgYnV0IHRoZSBib2R5CisgICAgICAgICMgZW5jb2RpbmcgaXMgbm90LgorICAgICAgICBmcm9tIGVtYWlsIGltcG9ydCBDaGFyc2V0IGFzIENoYXJzZXRNb2R1bGUKKyAgICAgICAgQ2hhcnNldE1vZHVsZS5hZGRfY2hhcnNldCgnZmFrZScsIENoYXJzZXRNb2R1bGUuUVAsIE5vbmUpCisgICAgICAgIGMgPSBDaGFyc2V0KCdmYWtlJykKKyAgICAgICAgZXEoJ2hlbGxvIHdceGY2cmxkJywgYy5ib2R5X2VuY29kZSgnaGVsbG8gd1x4ZjZybGQnKSkKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfY2hhcnNldF9uYW1lKHNlbGYpOgorICAgICAgICBjaGFyc2V0ID0gQ2hhcnNldCh1J3VzLWFzY2lpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY2hhcnNldCksICd1cy1hc2NpaScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVycm9ycy5DaGFyc2V0RXJyb3IsIENoYXJzZXQsICdhc2NceGZmaWknKQorCisgICAgZGVmIHRlc3RfY29kZWNzX2FsaWFzZXNfYWNjZXB0ZWQoc2VsZik6CisgICAgICAgIGNoYXJzZXQgPSBDaGFyc2V0KCd1dGY4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY2hhcnNldCksICd1dGYtOCcpCisKKworIyBUZXN0IG11bHRpbGluZ3VhbCBNSU1FIGhlYWRlcnMuCitjbGFzcyBUZXN0SGVhZGVyKFRlc3RFbWFpbEJhc2UpOgorICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgaCA9IEhlYWRlcignSGVsbG8gV29ybGQhJykKKyAgICAgICAgZXEoaC5lbmNvZGUoKSwgJ0hlbGxvIFdvcmxkIScpCisgICAgICAgIGguYXBwZW5kKCcgR29vZGJ5ZSBXb3JsZCEnKQorICAgICAgICBlcShoLmVuY29kZSgpLCAnSGVsbG8gV29ybGQhICBHb29kYnllIFdvcmxkIScpCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfc3VycHJpc2Uoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIGggPSBIZWFkZXIoJ0hlbGxvIFdvcmxkIScpCisgICAgICAgIGVxKGguZW5jb2RlKCksICdIZWxsbyBXb3JsZCEnKQorICAgICAgICBoLmFwcGVuZCgnR29vZGJ5ZSBXb3JsZCEnKQorICAgICAgICBlcShoLmVuY29kZSgpLCAnSGVsbG8gV29ybGQhIEdvb2RieWUgV29ybGQhJykKKworICAgIGRlZiB0ZXN0X2hlYWRlcl9uZWVkc19ub19kZWNvZGluZyhzZWxmKToKKyAgICAgICAgaCA9ICdubyBkZWNvZGluZyBuZWVkZWQnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlX2hlYWRlcihoKSwgWyhoLCBOb25lKV0pCisKKyAgICBkZWYgdGVzdF9sb25nKHNlbGYpOgorICAgICAgICBoID0gSGVhZGVyKCJJIGFtIHRoZSB2ZXJ5IG1vZGVsIG9mIGEgbW9kZXJuIE1ham9yLUdlbmVyYWw7IEkndmUgaW5mb3JtYXRpb24gdmVnZXRhYmxlLCBhbmltYWwsIGFuZCBtaW5lcmFsOyBJIGtub3cgdGhlIGtpbmdzIG9mIEVuZ2xhbmQsIGFuZCBJIHF1b3RlIHRoZSBmaWdodHMgaGlzdG9yaWNhbCBmcm9tIE1hcmF0aG9uIHRvIFdhdGVybG9vLCBpbiBvcmRlciBjYXRlZ29yaWNhbDsgSSdtIHZlcnkgd2VsbCBhY3F1YWludGVkLCB0b28sIHdpdGggbWF0dGVycyBtYXRoZW1hdGljYWw7IEkgdW5kZXJzdGFuZCBlcXVhdGlvbnMsIGJvdGggdGhlIHNpbXBsZSBhbmQgcXVhZHJhdGljYWw7IGFib3V0IGJpbm9taWFsIHRoZW9yZW0gSSdtIHRlZW1pbmcgd2l0aCBhIGxvdCBvJyBuZXdzLCB3aXRoIG1hbnkgY2hlZXJmdWwgZmFjdHMgYWJvdXQgdGhlIHNxdWFyZSBvZiB0aGUgaHlwb3RlbnVzZS4iLAorICAgICAgICAgICAgICAgICAgIG1heGxpbmVsZW49NzYpCisgICAgICAgIGZvciBsIGluIGguZW5jb2RlKHNwbGl0Y2hhcnM9JyAnKS5zcGxpdCgnXG4gJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGwpIDw9IDc2KQorCisgICAgZGVmIHRlc3RfbXVsdGlsaW5ndWFsKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBnID0gQ2hhcnNldCgiaXNvLTg4NTktMSIpCisgICAgICAgIGN6ID0gQ2hhcnNldCgiaXNvLTg4NTktMiIpCisgICAgICAgIHV0ZjggPSBDaGFyc2V0KCJ1dGYtOCIpCisgICAgICAgIGdfaGVhZCA9ICJEaWUgTWlldGVyIHRyZXRlbiBoaWVyIGVpbiB3ZXJkZW4gbWl0IGVpbmVtIEZvZXJkZXJiYW5kIGtvbWZvcnRhYmVsIGRlbiBLb3JyaWRvciBlbnRsYW5nLCBhbiBzXHhmY2RsXHhmY25kaXNjaGVuIFdhbmRnZW1ceGU0bGRlbiB2b3JiZWksIGdlZ2VuIGRpZSByb3RpZXJlbmRlbiBLbGluZ2VuIGJlZlx4ZjZyZGVydC4gIgorICAgICAgICBjel9oZWFkID0gIkZpbmFuXHhlOG5pIG1ldHJvcG9sZSBzZSBocm91dGlseSBwb2QgdGxha2VtIGplamljaCBkXHhmOXZ0aXB1Li4gIgorICAgICAgICB1dGY4X2hlYWQgPSB1Ilx1NmI2M1x1NzhiYVx1MzA2Ylx1OGEwMFx1MzA0Nlx1MzA2OFx1N2ZmYlx1OGEzM1x1MzA2Zlx1MzA1NVx1MzA4Y1x1MzA2Nlx1MzA0NFx1MzA3ZVx1MzA1Ylx1MzA5M1x1MzAwMlx1NGUwMFx1OTBlOFx1MzA2Zlx1MzBjOVx1MzBhNFx1MzBjNFx1OGE5ZVx1MzA2N1x1MzA1OVx1MzA0Y1x1MzAwMVx1MzA0Mlx1MzA2OFx1MzA2Zlx1MzA2N1x1MzA1Zlx1MzA4OVx1MzA4MVx1MzA2N1x1MzA1OVx1MzAwMlx1NWI5Zlx1OTY5Ylx1MzA2Ylx1MzA2Zlx1MzAwY1dlbm4gaXN0IGRhcyBOdW5zdHVjayBnaXQgdW5kIFNsb3Rlcm1leWVyPyBKYSEgQmVpaGVyaHVuZCBkYXMgT2RlciBkaWUgRmxpcHBlcndhbGR0IGdlcnNwdXQuXHUzMDBkXHUzMDY4XHU4YTAwXHUzMDYzXHUzMDY2XHUzMDQ0XHUzMDdlXHUzMDU5XHUzMDAyIi5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgaCA9IEhlYWRlcihnX2hlYWQsIGcpCisgICAgICAgIGguYXBwZW5kKGN6X2hlYWQsIGN6KQorICAgICAgICBoLmFwcGVuZCh1dGY4X2hlYWQsIHV0ZjgpCisgICAgICAgIGVuYyA9IGguZW5jb2RlKCkKKyAgICAgICAgZXEoZW5jLCAiIiJcCis9P2lzby04ODU5LTE/cT9EaWVfTWlldGVyX3RyZXRlbl9oaWVyX2Vpbl93ZXJkZW5fbWl0X2VpbmVtX0ZvZXJkZXJiYW5kX2tvPz0KKyA9P2lzby04ODU5LTE/cT9tZm9ydGFiZWxfZGVuX0tvcnJpZG9yX2VudGxhbmc9MkNfYW5fcz1GQ2RsPUZDbmRpc2NoZW5fV2FuPz0KKyA9P2lzby04ODU5LTE/cT9kZ2VtPUU0bGRlbl92b3JiZWk9MkNfZ2VnZW5fZGllX3JvdGllcmVuZGVuX0tsaW5nZW5fYmVmPUY2Pz0KKyA9P2lzby04ODU5LTE/cT9yZGVydD0yRV8/PSA9P2lzby04ODU5LTI/cT9GaW5hbj1FOG5pX21ldHJvcG9sZV9zZV9ocm91dGlseT89CisgPT9pc28tODg1OS0yP3E/X3BvZF90bGFrZW1famVqaWNoX2Q9Rjl2dGlwdT0yRT0yRV8/PSA9P3V0Zi04P2I/NXEyajU2SzY/PQorID0/dXRmLTg/Yj80NEdyNktpQTQ0R0c0NEdvNTcrNzZLaXo0NEd2NDRHVjQ0S000NEdtNDRHRTQ0Rys0NEdiNDRLVDQ0Q0M/PQorID0/dXRmLTg/Yj81TGlBNllPbzQ0R3Y0NE9KNDRLazQ0T0U2S3FlNDRHbjQ0R1o0NEdNNDRDQjQ0R0M0NEdvNDRHdjQ0R24/PQorID0/dXRmLTg/Yj80NEdmNDRLSjQ0S0I0NEduNDRHWjQ0Q0M1YTZmNlpxYjQ0R3I0NEd2NDRDTVYyVnViaUJwYzNRZ1pHRno/PQorID0/dXRmLTg/cT9fTnVuc3R1Y2tfZ2l0X3VuZF9TbG90ZXJtZXllcj0zRl9KYSFfQmVpaGVyaHVuZF9kYXNfT2Rlcl9kaWVfRmw/PQorID0/dXRmLTg/Yj9hWEJ3WlhKM1lXeGtkQ0JuWlhKemNIVjBMdU9BamVPQnFPaW9nT09CbytPQnB1T0JoT09CdnVPQm1RPT0/PQorID0/dXRmLTg/Yj80NENDPz0iIiIpCisgICAgICAgIGVxKGRlY29kZV9oZWFkZXIoZW5jKSwKKyAgICAgICAgICAgWyhnX2hlYWQsICJpc28tODg1OS0xIiksIChjel9oZWFkLCAiaXNvLTg4NTktMiIpLAorICAgICAgICAgICAgKHV0ZjhfaGVhZCwgInV0Zi04IildKQorICAgICAgICB1c3RyID0gdW5pY29kZShoKQorICAgICAgICBlcSh1c3RyLmVuY29kZSgndXRmLTgnKSwKKyAgICAgICAgICAgJ0RpZSBNaWV0ZXIgdHJldGVuIGhpZXIgZWluIHdlcmRlbiBtaXQgZWluZW0gRm9lcmRlcmJhbmQgJworICAgICAgICAgICAna29tZm9ydGFiZWwgZGVuIEtvcnJpZG9yIGVudGxhbmcsIGFuIHNceGMzXHhiY2RsXHhjM1x4YmNuZGlzY2hlbiAnCisgICAgICAgICAgICdXYW5kZ2VtXHhjM1x4YTRsZGVuIHZvcmJlaSwgZ2VnZW4gZGllIHJvdGllcmVuZGVuIEtsaW5nZW4gJworICAgICAgICAgICAnYmVmXHhjM1x4YjZyZGVydC4gRmluYW5ceGM0XHg4ZG5pIG1ldHJvcG9sZSBzZSBocm91dGlseSBwb2QgJworICAgICAgICAgICAndGxha2VtIGplamljaCBkXHhjNVx4YWZ2dGlwdS4uIFx4ZTZceGFkXHhhM1x4ZTdceGEyXHhiYVx4ZTNceDgxJworICAgICAgICAgICAnXHhhYlx4ZThceGE4XHg4MFx4ZTNceDgxXHg4Nlx4ZTNceDgxXHhhOFx4ZTdceGJmXHhiYlx4ZThceGE4XHhiMycKKyAgICAgICAgICAgJ1x4ZTNceDgxXHhhZlx4ZTNceDgxXHg5NVx4ZTNceDgyXHg4Y1x4ZTNceDgxXHhhNlx4ZTNceDgxXHg4NFx4ZTMnCisgICAgICAgICAgICdceDgxXHhiZVx4ZTNceDgxXHg5Ylx4ZTNceDgyXHg5M1x4ZTNceDgwXHg4Mlx4ZTRceGI4XHg4MFx4ZTlceDgzJworICAgICAgICAgICAnXHhhOFx4ZTNceDgxXHhhZlx4ZTNceDgzXHg4OVx4ZTNceDgyXHhhNFx4ZTNceDgzXHg4NFx4ZThceGFhXHg5ZScKKyAgICAgICAgICAgJ1x4ZTNceDgxXHhhN1x4ZTNceDgxXHg5OVx4ZTNceDgxXHg4Y1x4ZTNceDgwXHg4MVx4ZTNceDgxXHg4Mlx4ZTMnCisgICAgICAgICAgICdceDgxXHhhOFx4ZTNceDgxXHhhZlx4ZTNceDgxXHhhN1x4ZTNceDgxXHg5Zlx4ZTNceDgyXHg4OVx4ZTNceDgyJworICAgICAgICAgICAnXHg4MVx4ZTNceDgxXHhhN1x4ZTNceDgxXHg5OVx4ZTNceDgwXHg4Mlx4ZTVceGFlXHg5Zlx4ZTlceDlhXHg5YicKKyAgICAgICAgICAgJ1x4ZTNceDgxXHhhYlx4ZTNceDgxXHhhZlx4ZTNceDgwXHg4Y1dlbm4gaXN0IGRhcyBOdW5zdHVjayBnaXQgJworICAgICAgICAgICAndW5kIFNsb3Rlcm1leWVyPyBKYSEgQmVpaGVyaHVuZCBkYXMgT2RlciBkaWUgRmxpcHBlcndhbGR0ICcKKyAgICAgICAgICAgJ2dlcnNwdXQuXHhlM1x4ODBceDhkXHhlM1x4ODFceGE4XHhlOFx4YThceDgwXHhlM1x4ODFceGEzXHhlM1x4ODEnCisgICAgICAgICAgICdceGE2XHhlM1x4ODFceDg0XHhlM1x4ODFceGJlXHhlM1x4ODFceDk5XHhlM1x4ODBceDgyJykKKyAgICAgICAgIyBUZXN0IG1ha2VfaGVhZGVyKCkKKyAgICAgICAgbmV3aCA9IG1ha2VfaGVhZGVyKGRlY29kZV9oZWFkZXIoZW5jKSkKKyAgICAgICAgZXEobmV3aCwgZW5jKQorCisgICAgZGVmIHRlc3RfaGVhZGVyX2N0b3JfZGVmYXVsdF9hcmdzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBoID0gSGVhZGVyKCkKKyAgICAgICAgZXEoaCwgJycpCisgICAgICAgIGguYXBwZW5kKCdmb28nLCBDaGFyc2V0KCdpc28tODg1OS0xJykpCisgICAgICAgIGVxKGgsICc9P2lzby04ODU5LTE/cT9mb28/PScpCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9tYXhsaW5lbGVuKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBoc3RyID0gJ0EgdmVyeSBsb25nIGxpbmUgdGhhdCBtdXN0IGdldCBzcGxpdCB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBhdCB0aGUgNzZ0aCBjaGFyYWN0ZXIgYm91bmRhcnkgdG8gdGVzdCB0aGUgbm9uLWRlZmF1bHQgYmVoYXZpb3InCisgICAgICAgIGggPSBIZWFkZXIoaHN0cikKKyAgICAgICAgZXEoaC5lbmNvZGUoKSwgJycnXAorQSB2ZXJ5IGxvbmcgbGluZSB0aGF0IG11c3QgZ2V0IHNwbGl0IHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIGF0IHRoZSA3NnRoCisgY2hhcmFjdGVyIGJvdW5kYXJ5IHRvIHRlc3QgdGhlIG5vbi1kZWZhdWx0IGJlaGF2aW9yJycnKQorICAgICAgICBoID0gSGVhZGVyKGhzdHIsIGhlYWRlcl9uYW1lPSdTdWJqZWN0JykKKyAgICAgICAgZXEoaC5lbmNvZGUoKSwgJycnXAorQSB2ZXJ5IGxvbmcgbGluZSB0aGF0IG11c3QgZ2V0IHNwbGl0IHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIGF0IHRoZQorIDc2dGggY2hhcmFjdGVyIGJvdW5kYXJ5IHRvIHRlc3QgdGhlIG5vbi1kZWZhdWx0IGJlaGF2aW9yJycnKQorICAgICAgICBoID0gSGVhZGVyKGhzdHIsIG1heGxpbmVsZW49MTAyNCwgaGVhZGVyX25hbWU9J1N1YmplY3QnKQorICAgICAgICBlcShoLmVuY29kZSgpLCBoc3RyKQorCisgICAgZGVmIHRlc3RfdXNfYXNjaWlfaGVhZGVyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgcyA9ICdoZWxsbycKKyAgICAgICAgeCA9IGRlY29kZV9oZWFkZXIocykKKyAgICAgICAgZXEoeCwgWygnaGVsbG8nLCBOb25lKV0pCisgICAgICAgIGggPSBtYWtlX2hlYWRlcih4KQorICAgICAgICBlcShzLCBoLmVuY29kZSgpKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX2NoYXJzZXQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBoID0gSGVhZGVyKCkKKyAgICAgICAgaC5hcHBlbmQoJ2hlbGxvJywgJ2lzby04ODU5LTEnKQorICAgICAgICBlcShoLCAnPT9pc28tODg1OS0xP3E/aGVsbG8/PScpCisKKyMjICAgIGRlZiB0ZXN0X3VuaWNvZGVfZXJyb3Ioc2VsZik6CisjIyAgICAgICAgcmFpc2VzID0gc2VsZi5hc3NlcnRSYWlzZXMKKyMjICAgICAgICByYWlzZXMoVW5pY29kZUVycm9yLCBIZWFkZXIsIHUnW1BceGY2c3RhbF0nLCAndXMtYXNjaWknKQorIyMgICAgICAgIHJhaXNlcyhVbmljb2RlRXJyb3IsIEhlYWRlciwgJ1tQXHhmNnN0YWxdJywgJ3VzLWFzY2lpJykKKyMjICAgICAgICBoID0gSGVhZGVyKCkKKyMjICAgICAgICByYWlzZXMoVW5pY29kZUVycm9yLCBoLmFwcGVuZCwgdSdbUFx4ZjZzdGFsXScsICd1cy1hc2NpaScpCisjIyAgICAgICAgcmFpc2VzKFVuaWNvZGVFcnJvciwgaC5hcHBlbmQsICdbUFx4ZjZzdGFsXScsICd1cy1hc2NpaScpCisjIyAgICAgICAgcmFpc2VzKFVuaWNvZGVFcnJvciwgSGVhZGVyLCB1J1x1ODNjYVx1NTczMFx1NjY0Mlx1NTkyYicsICdpc28tODg1OS0xJykKKworICAgIGRlZiB0ZXN0X3V0Zjhfc2hvcnRlc3Qoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBoID0gSGVhZGVyKHUncFx4ZjZzdGFsJywgJ3V0Zi04JykKKyAgICAgICAgZXEoaC5lbmNvZGUoKSwgJz0/dXRmLTg/cT9wPUMzPUI2c3RhbD89JykKKyAgICAgICAgaCA9IEhlYWRlcih1J1x1ODNjYVx1NTczMFx1NjY0Mlx1NTkyYicsICd1dGYtOCcpCisgICAgICAgIGVxKGguZW5jb2RlKCksICc9P3V0Zi04P2I/NkkrSzVaeXc1cG1DNWFTcj89JykKKworICAgIGRlZiB0ZXN0X2JhZF84Yml0X2hlYWRlcihzZWxmKToKKyAgICAgICAgcmFpc2VzID0gc2VsZi5hc3NlcnRSYWlzZXMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHggPSAnWW53cDRkVUViYXkgQXVjdGlvbiBTZW1pYXItIE5vIENoYXJnZSBceDk2IEVhcm4gQmlnJworICAgICAgICByYWlzZXMoVW5pY29kZUVycm9yLCBIZWFkZXIsIHgpCisgICAgICAgIGggPSBIZWFkZXIoKQorICAgICAgICByYWlzZXMoVW5pY29kZUVycm9yLCBoLmFwcGVuZCwgeCkKKyAgICAgICAgZXEoc3RyKEhlYWRlcih4LCBlcnJvcnM9J3JlcGxhY2UnKSksIHgpCisgICAgICAgIGguYXBwZW5kKHgsIGVycm9ycz0ncmVwbGFjZScpCisgICAgICAgIGVxKHN0cihoKSwgeCkKKworICAgIGRlZiB0ZXN0X2VuY29kZWRfYWRqYWNlbnRfbm9uZW5jb2RlZChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGggPSBIZWFkZXIoKQorICAgICAgICBoLmFwcGVuZCgnaGVsbG8nLCAnaXNvLTg4NTktMScpCisgICAgICAgIGguYXBwZW5kKCd3b3JsZCcpCisgICAgICAgIHMgPSBoLmVuY29kZSgpCisgICAgICAgIGVxKHMsICc9P2lzby04ODU5LTE/cT9oZWxsbz89IHdvcmxkJykKKyAgICAgICAgaCA9IG1ha2VfaGVhZGVyKGRlY29kZV9oZWFkZXIocykpCisgICAgICAgIGVxKGguZW5jb2RlKCksIHMpCisKKyAgICBkZWYgdGVzdF93aGl0ZXNwYWNlX2VhdGVyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgcyA9ICdTdWJqZWN0OiA9P2tvaTgtcj9iPzhOTFAxOFhTeThFZ3pzRWd4c25Pd2N6WXp0az0/PSA9P2tvaTgtcj9xPz1DQT89IHp6LicKKyAgICAgICAgcGFydHMgPSBkZWNvZGVfaGVhZGVyKHMpCisgICAgICAgIGVxKHBhcnRzLCBbKCdTdWJqZWN0OicsIE5vbmUpLCAoJ1x4ZjBceGQyXHhjZlx4ZDdceGM1XHhkMlx4Y2JceGMxIFx4Y2VceGMxIFx4YzZceGM5XHhjZVx4YzFceGNjXHhkOFx4Y2VceGQ5XHhjYScsICdrb2k4LXInKSwgKCd6ei4nLCBOb25lKV0pCisgICAgICAgIGhkciA9IG1ha2VfaGVhZGVyKHBhcnRzKQorICAgICAgICBlcShoZHIuZW5jb2RlKCksCisgICAgICAgICAgICdTdWJqZWN0OiA9P2tvaTgtcj9iPzhOTFAxOFhTeThFZ3pzRWd4c25Pd2N6WXp0bks/PSB6ei4nKQorCisgICAgZGVmIHRlc3RfYnJva2VuX2Jhc2U2NF9oZWFkZXIoc2VsZik6CisgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCisgICAgICAgIHMgPSAnU3ViamVjdDogPT9FVUMtS1I/Qj9DU2l4cExEdEtTQy83TGl1dnNheDRpQzZ1TG13TWNpaklLSGFJTHpTd2QvSDBTQzgrTENqd0xzZ3Y3Vy8rTWozSSA/PScKKyAgICAgICAgcmFpc2VzKEVycm9ycy5IZWFkZXJQYXJzZUVycm9yLCBkZWNvZGVfaGVhZGVyLCBzKQorCisgICAgIyBJc3N1ZSAxMDc4OTE5CisgICAgZGVmIHRlc3RfYXNjaWlfYWRkX2hlYWRlcihzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZy5hZGRfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZT0nYnVkLmdpZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2F0dGFjaG1lbnQ7IGZpbGVuYW1lPSJidWQuZ2lmIicsCisgICAgICAgICAgICBtc2dbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSkKKworICAgIGRlZiB0ZXN0X25vbmFzY2lpX2FkZF9oZWFkZXJfdmlhX3RyaXBsZShzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZy5hZGRfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnLAorICAgICAgICAgICAgZmlsZW5hbWU9KCdpc28tODg1OS0xJywgJycsICdGdVx4ZGZiYWxsZXIucHB0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAnYXR0YWNobWVudDsgZmlsZW5hbWUqPSJpc28tODg1OS0xXCdcJ0Z1JURGYmFsbGVyLnBwdCInLAorICAgICAgICAgICAgbXNnWydDb250ZW50LURpc3Bvc2l0aW9uJ10pCisKKyAgICBkZWYgdGVzdF9lbmNvZGVfdW5hbGlhc2VkX2NoYXJzZXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTM3OTQxNjogd2hlbiB0aGUgY2hhcnNldCBoYXMgbm8gb3V0cHV0IGNvbnZlcnNpb24sCisgICAgICAgICMgb3V0cHV0IHdhcyBhY2NpZGVudGFsbHkgZ2V0dGluZyBjb2VyY2VkIHRvIHVuaWNvZGUuCisgICAgICAgIHJlcyA9IEhlYWRlcignYWJjJywnaXNvLTg4NTktMicpLmVuY29kZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAnPT9pc28tODg1OS0yP3E/YWJjPz0nKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzLCBzdHIpCisKKworIyBUZXN0IFJGQyAyMjMxIGhlYWRlciBwYXJhbWV0ZXJzIChlbi9kZSljb2RpbmcKK2NsYXNzIFRlc3RSRkMyMjMxKFRlc3RFbWFpbEJhc2UpOgorICAgIGRlZiB0ZXN0X2dldF9wYXJhbShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzI5LnR4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ3RpdGxlJyksCisgICAgICAgICAgICgndXMtYXNjaWknLCAnZW4nLCAnVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzblwndCBpdCEnKSkKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbSgndGl0bGUnLCB1bnF1b3RlPUZhbHNlKSwKKyAgICAgICAgICAgKCd1cy1hc2NpaScsICdlbicsICciVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzblwndCBpdCEiJykpCisKKyAgICBkZWYgdGVzdF9zZXRfcGFyYW0oc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLnNldF9wYXJhbSgndGl0bGUnLCAnVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzblwndCBpdCEnLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQ9J3VzLWFzY2lpJykKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbSgndGl0bGUnKSwKKyAgICAgICAgICAgKCd1cy1hc2NpaScsICcnLCAnVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzblwndCBpdCEnKSkKKyAgICAgICAgbXNnLnNldF9wYXJhbSgndGl0bGUnLCAnVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzblwndCBpdCEnLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQ9J3VzLWFzY2lpJywgbGFuZ3VhZ2U9J2VuJykKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbSgndGl0bGUnKSwKKyAgICAgICAgICAgKCd1cy1hc2NpaScsICdlbicsICdUaGlzIGlzIGV2ZW4gbW9yZSAqKipmdW4qKiogaXNuXCd0IGl0IScpKQorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBtc2cuc2V0X3BhcmFtKCd0aXRsZScsICdUaGlzIGlzIGV2ZW4gbW9yZSAqKipmdW4qKiogaXNuXCd0IGl0IScsCisgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldD0ndXMtYXNjaWknLCBsYW5ndWFnZT0nZW4nKQorICAgICAgICBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwobXNnLmFzX3N0cmluZygpLCAiIiJcCitSZXR1cm4tUGF0aDogPGJiYkB6enoub3JnPgorRGVsaXZlcmVkLVRvOiBiYmJAenp6Lm9yZworUmVjZWl2ZWQ6IGJ5IG1haWwuenp6Lm9yZyAoUG9zdGZpeCwgZnJvbSB1c2VyaWQgODg5KQorIGlkIDI3Q0VBRDM4Q0M7IEZyaSwgIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAgKEVEVCkKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitNZXNzYWdlLUlEOiA8MTUwOTAuNjEzMDQuMTEwOTI5LjQ1Njg0QGFhYS56enoub3JnPgorRnJvbTogYmJiQGRkZC5jb20gKEpvaG4gWC4gRG9lKQorVG86IGJiYkB6enoub3JnCitTdWJqZWN0OiBUaGlzIGlzIGEgdGVzdCBtZXNzYWdlCitEYXRlOiBGcmksIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaTsKKyB0aXRsZSo9InVzLWFzY2lpJ2VuJ1RoaXMlMjBpcyUyMGV2ZW4lMjBtb3JlJTIwJTJBJTJBJTJBZnVuJTJBJTJBJTJBJTIwaXNuJTI3dCUyMGl0JTIxIgorCisKK0hpLAorCitEbyB5b3UgbGlrZSB0aGlzIG1lc3NhZ2U/CisKKy1NZQorIiIiKQorCisgICAgZGVmIHRlc3RfZGVsX3BhcmFtKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBtc2cuc2V0X3BhcmFtKCdmb28nLCAnYmFyJywgY2hhcnNldD0ndXMtYXNjaWknLCBsYW5ndWFnZT0nZW4nKQorICAgICAgICBtc2cuc2V0X3BhcmFtKCd0aXRsZScsICdUaGlzIGlzIGV2ZW4gbW9yZSAqKipmdW4qKiogaXNuXCd0IGl0IScsCisgICAgICAgICAgICBjaGFyc2V0PSd1cy1hc2NpaScsIGxhbmd1YWdlPSdlbicpCisgICAgICAgIG1zZy5kZWxfcGFyYW0oJ2ZvbycsIGhlYWRlcj0nQ29udGVudC1UeXBlJykKKyAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCAiIiJcCitSZXR1cm4tUGF0aDogPGJiYkB6enoub3JnPgorRGVsaXZlcmVkLVRvOiBiYmJAenp6Lm9yZworUmVjZWl2ZWQ6IGJ5IG1haWwuenp6Lm9yZyAoUG9zdGZpeCwgZnJvbSB1c2VyaWQgODg5KQorIGlkIDI3Q0VBRDM4Q0M7IEZyaSwgIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAgKEVEVCkKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitNZXNzYWdlLUlEOiA8MTUwOTAuNjEzMDQuMTEwOTI5LjQ1Njg0QGFhYS56enoub3JnPgorRnJvbTogYmJiQGRkZC5jb20gKEpvaG4gWC4gRG9lKQorVG86IGJiYkB6enoub3JnCitTdWJqZWN0OiBUaGlzIGlzIGEgdGVzdCBtZXNzYWdlCitEYXRlOiBGcmksIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiOworIHRpdGxlKj0idXMtYXNjaWknZW4nVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjAlMkElMkElMkFmdW4lMkElMkElMkElMjBpc24lMjd0JTIwaXQlMjEiCisKKworSGksCisKK0RvIHlvdSBsaWtlIHRoaXMgbWVzc2FnZT8KKworLU1lCisiIiIpCisKKyAgICBkZWYgdGVzdF9yZmMyMjMxX2dldF9jb250ZW50X2NoYXJzZXQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18zMi50eHQnKQorICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfY2hhcnNldCgpLCAndXMtYXNjaWknKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9ub19sYW5ndWFnZV9vcl9jaGFyc2V0KHNlbGYpOgorICAgICAgICBtID0gJycnXAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iZmlsZV9fX19DX19ET0NVTUVOVFNfMjBBTkRfMjBTRVRUSU5HU19GQUJJRU5fTE9DQUxfMjBTRVRUSU5HU19URU1QX25zbWFpbC5odG0iCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgTkFNRSowPWZpbGVfX19fQ19fRE9DVU1FTlRTXzIwQU5EXzIwU0VUVElOR1NfRkFCSUVOX0xPQ0FMXzIwU0VUVElOR1NfVEVNOyBOQU1FKjE9UF9uc21haWwuaHRtCisKKycnJworICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIHBhcmFtID0gbXNnLmdldF9wYXJhbSgnTkFNRScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShwYXJhbSwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcGFyYW0sCisgICAgICAgICAgICAnZmlsZV9fX19DX19ET0NVTUVOVFNfMjBBTkRfMjBTRVRUSU5HU19GQUJJRU5fTE9DQUxfMjBTRVRUSU5HU19URU1QX25zbWFpbC5odG0nKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9ub19sYW5ndWFnZV9vcl9jaGFyc2V0X2luX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gJycnXAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOworXHRmaWxlbmFtZSowKj0iJydUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCI7CitcdGZpbGVuYW1lKjEqPSIlMkElMkElMkFmdW4lMkElMkElMkElMjAiOworXHRmaWxlbmFtZSoyPSJpcyBpdCBub3QucGRmIgorCisnJycKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmlsZW5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzIGl0IG5vdC5wZGYnKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9ub19sYW5ndWFnZV9vcl9jaGFyc2V0X2luX2ZpbGVuYW1lX2VuY29kZWQoc2VsZik6CisgICAgICAgIG0gPSAnJydcCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7CitcdGZpbGVuYW1lKjAqPSInJ1RoaXMlMjBpcyUyMGV2ZW4lMjBtb3JlJTIwIjsKK1x0ZmlsZW5hbWUqMSo9IiUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMCI7CitcdGZpbGVuYW1lKjI9ImlzIGl0IG5vdC5wZGYiCisKKycnJworICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9maWxlbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdUaGlzIGlzIGV2ZW4gbW9yZSAqKipmdW4qKiogaXMgaXQgbm90LnBkZicpCisKKyAgICBkZWYgdGVzdF9yZmMyMjMxX3BhcnRseV9lbmNvZGVkKHNlbGYpOgorICAgICAgICBtID0gJycnXAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOworXHRmaWxlbmFtZSowPSInJ1RoaXMlMjBpcyUyMGV2ZW4lMjBtb3JlJTIwIjsKK1x0ZmlsZW5hbWUqMSo9IiUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMCI7CitcdGZpbGVuYW1lKjI9ImlzIGl0IG5vdC5wZGYiCisKKycnJworICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtc2cuZ2V0X2ZpbGVuYW1lKCksCisgICAgICAgICAgICAnVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjAqKipmdW4qKiogaXMgaXQgbm90LnBkZicpCisKKyAgICBkZWYgdGVzdF9yZmMyMjMxX3BhcnRseV9ub25lbmNvZGVkKHNlbGYpOgorICAgICAgICBtID0gJycnXAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOworXHRmaWxlbmFtZSowPSJUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCI7CitcdGZpbGVuYW1lKjE9IiUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMCI7CitcdGZpbGVuYW1lKjI9ImlzIGl0IG5vdC5wZGYiCisKKycnJworICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtc2cuZ2V0X2ZpbGVuYW1lKCksCisgICAgICAgICAgICAnVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjAlMkElMkElMkFmdW4lMkElMkElMkElMjBpcyBpdCBub3QucGRmJykKKworICAgIGRlZiB0ZXN0X3JmYzIyMzFfbm9fbGFuZ3VhZ2Vfb3JfY2hhcnNldF9pbl9ib3VuZGFyeShzZWxmKToKKyAgICAgICAgbSA9ICcnJ1wKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOworXHRib3VuZGFyeSowKj0iJydUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCI7CitcdGJvdW5kYXJ5KjEqPSIlMkElMkElMkFmdW4lMkElMkElMkElMjAiOworXHRib3VuZGFyeSoyPSJpcyBpdCBub3QucGRmIgorCisnJycKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfYm91bmRhcnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzIGl0IG5vdC5wZGYnKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9ub19sYW5ndWFnZV9vcl9jaGFyc2V0X2luX2NoYXJzZXQoc2VsZik6CisgICAgICAgICMgVGhpcyBpcyBhIG5vbnNlbnNpY2FsIGNoYXJzZXQgdmFsdWUsIGJ1dCB0ZXN0cyB0aGUgY29kZSBhbnl3YXkKKyAgICAgICAgbSA9ICcnJ1wKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsKK1x0Y2hhcnNldCowKj0iVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjAiOworXHRjaGFyc2V0KjEqPSIlMkElMkElMkFmdW4lMkElMkElMkElMjAiOworXHRjaGFyc2V0KjI9ImlzIGl0IG5vdC5wZGYiCisKKycnJworICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9jb250ZW50X2NoYXJzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzIGl0IG5vdC5wZGYnKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9iYWRfZW5jb2RpbmdfaW5fZmlsZW5hbWUoc2VsZik6CisgICAgICAgIG0gPSAnJydcCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7CitcdGZpbGVuYW1lKjAqPSJib2d1cyd4eCdUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCI7CitcdGZpbGVuYW1lKjEqPSIlMkElMkElMkFmdW4lMkElMkElMkElMjAiOworXHRmaWxlbmFtZSoyPSJpcyBpdCBub3QucGRmIgorCisnJycKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmlsZW5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzIGl0IG5vdC5wZGYnKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9iYWRfZW5jb2RpbmdfaW5fY2hhcnNldChzZWxmKToKKyAgICAgICAgbSA9ICIiIlwKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldCo9Ym9ndXMnJ3V0Zi04JUUyJTgwJTlECisKKyIiIgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgICMgVGhpcyBzaG91bGQgcmV0dXJuIE5vbmUgYmVjYXVzZSBub24tYXNjaWkgY2hhcmFjdGVycyBpbiB0aGUgY2hhcnNldAorICAgICAgICAjIGFyZSBub3QgYWxsb3dlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfY2hhcnNldCgpLCBOb25lKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9iYWRfY2hhcmFjdGVyX2luX2NoYXJzZXQoc2VsZik6CisgICAgICAgIG0gPSAiIiJcCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQqPWFzY2lpJyd1dGYtOCVFMiU4MCU5RAorCisiIiIKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICAjIFRoaXMgc2hvdWxkIHJldHVybiBOb25lIGJlY2F1c2Ugbm9uLWFzY2lpIGNoYXJhY3RlcnMgaW4gdGhlIGNoYXJzZXQKKyAgICAgICAgIyBhcmUgbm90IGFsbG93ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9jb250ZW50X2NoYXJzZXQoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3JmYzIyMzFfYmFkX2NoYXJhY3Rlcl9pbl9maWxlbmFtZShzZWxmKToKKyAgICAgICAgbSA9ICcnJ1wKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsKK1x0ZmlsZW5hbWUqMCo9ImFzY2lpJ3h4J1RoaXMlMjBpcyUyMGV2ZW4lMjBtb3JlJTIwIjsKK1x0ZmlsZW5hbWUqMSo9IiUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMCI7CitcdGZpbGVuYW1lKjIqPSJpcyBpdCBub3QucGRmJUUyIgorCisnJycKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmlsZW5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1RoaXMgaXMgZXZlbiBtb3JlICoqKmZ1bioqKiBpcyBpdCBub3QucGRmXHVmZmZkJykKKworICAgIGRlZiB0ZXN0X3JmYzIyMzFfdW5rbm93bl9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgbSA9ICIiIlwKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWUqPVgtVU5LTk9XTicnbXlmaWxlLnR4dAorCisiIiIKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmlsZW5hbWUoKSwgJ215ZmlsZS50eHQnKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9zaW5nbGVfdGlja19pbl9maWxlbmFtZV9leHRlbmRlZChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG0gPSAiIiJcCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZm9vOworXHRuYW1lKjAqPVwiRnJhbmsnc1wiOyBuYW1lKjEqPVwiIERvY3VtZW50XCIKKworIiIiCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKKyAgICAgICAgY2hhcnNldCwgbGFuZ3VhZ2UsIHMgPSBtc2cuZ2V0X3BhcmFtKCduYW1lJykKKyAgICAgICAgZXEoY2hhcnNldCwgTm9uZSkKKyAgICAgICAgZXEobGFuZ3VhZ2UsIE5vbmUpCisgICAgICAgIGVxKHMsICJGcmFuaydzIERvY3VtZW50IikKKworICAgIGRlZiB0ZXN0X3JmYzIyMzFfc2luZ2xlX3RpY2tfaW5fZmlsZW5hbWUoc2VsZik6CisgICAgICAgIG0gPSAiIiJcCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZm9vOyBuYW1lKjA9XCJGcmFuaydzXCI7IG5hbWUqMT1cIiBEb2N1bWVudFwiCisKKyIiIgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIHBhcmFtID0gbXNnLmdldF9wYXJhbSgnbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShwYXJhbSwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtLCAiRnJhbmsncyBEb2N1bWVudCIpCisKKyAgICBkZWYgdGVzdF9yZmMyMjMxX3RpY2tfYXR0YWNrX2V4dGVuZGVkKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbSA9ICIiIlwKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1mb287CitcdG5hbWUqMCo9XCJ1cy1hc2NpaSdlbi11cydGcmFuaydzXCI7IG5hbWUqMSo9XCIgRG9jdW1lbnRcIgorCisiIiIKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBjaGFyc2V0LCBsYW5ndWFnZSwgcyA9IG1zZy5nZXRfcGFyYW0oJ25hbWUnKQorICAgICAgICBlcShjaGFyc2V0LCAndXMtYXNjaWknKQorICAgICAgICBlcShsYW5ndWFnZSwgJ2VuLXVzJykKKyAgICAgICAgZXEocywgIkZyYW5rJ3MgRG9jdW1lbnQiKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV90aWNrX2F0dGFjayhzZWxmKToKKyAgICAgICAgbSA9ICIiIlwKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1mb287CitcdG5hbWUqMD1cInVzLWFzY2lpJ2VuLXVzJ0ZyYW5rJ3NcIjsgbmFtZSoxPVwiIERvY3VtZW50XCIKKworIiIiCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKKyAgICAgICAgcGFyYW0gPSBtc2cuZ2V0X3BhcmFtKCduYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKHBhcmFtLCB0dXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW0sICJ1cy1hc2NpaSdlbi11cydGcmFuaydzIERvY3VtZW50IikKKworICAgIGRlZiB0ZXN0X3JmYzIyMzFfbm9fZXh0ZW5kZWRfdmFsdWVzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbSA9ICIiIlwKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1mb287IG5hbWU9XCJGcmFuaydzIERvY3VtZW50XCIKKworIiIiCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbSgnbmFtZScpLCAiRnJhbmsncyBEb2N1bWVudCIpCisKKyAgICBkZWYgdGVzdF9yZmMyMjMxX2VuY29kZWRfdGhlbl91bmVuY29kZWRfc2VnbWVudHMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtID0gIiIiXAorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWZvbzsKK1x0bmFtZSowKj1cInVzLWFzY2lpJ2VuLXVzJ015XCI7CitcdG5hbWUqMT1cIiBEb2N1bWVudFwiOworXHRuYW1lKjIqPVwiIEZvciBZb3VcIgorCisiIiIKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBjaGFyc2V0LCBsYW5ndWFnZSwgcyA9IG1zZy5nZXRfcGFyYW0oJ25hbWUnKQorICAgICAgICBlcShjaGFyc2V0LCAndXMtYXNjaWknKQorICAgICAgICBlcShsYW5ndWFnZSwgJ2VuLXVzJykKKyAgICAgICAgZXEocywgJ015IERvY3VtZW50IEZvciBZb3UnKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV91bmVuY29kZWRfdGhlbl9lbmNvZGVkX3NlZ21lbnRzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbSA9ICIiIlwKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1mb287CitcdG5hbWUqMD1cInVzLWFzY2lpJ2VuLXVzJ015XCI7CitcdG5hbWUqMSo9XCIgRG9jdW1lbnRcIjsKK1x0bmFtZSoyKj1cIiBGb3IgWW91XCIKKworIiIiCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKKyAgICAgICAgY2hhcnNldCwgbGFuZ3VhZ2UsIHMgPSBtc2cuZ2V0X3BhcmFtKCduYW1lJykKKyAgICAgICAgZXEoY2hhcnNldCwgJ3VzLWFzY2lpJykKKyAgICAgICAgZXEobGFuZ3VhZ2UsICdlbi11cycpCisgICAgICAgIGVxKHMsICdNeSBEb2N1bWVudCBGb3IgWW91JykKKworCisKKyMgVGVzdHMgdG8gZW5zdXJlIHRoYXQgc2lnbmVkIHBhcnRzIG9mIGFuIGVtYWlsIGFyZSBjb21wbGV0ZWx5IHByZXNlcnZlZCwgYXMKKyMgcmVxdWlyZWQgYnkgUkZDMTg0NyBzZWN0aW9uIDIuMS4gIE5vdGUgdGhhdCB0aGVzZSBhcmUgaW5jb21wbGV0ZSwgYmVjYXVzZSB0aGUKKyMgZW1haWwgcGFja2FnZSBkb2VzIG5vdCBjdXJyZW50bHkgYWx3YXlzIHByZXNlcnZlIHRoZSBib2R5LiAgU2VlIGlzc3VlIDE2NzA3NjUuCitjbGFzcyBUZXN0U2lnbmVkKFRlc3RFbWFpbEJhc2UpOgorCisgICAgZGVmIF9tc2dfYW5kX29iaihzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGZwID0gb3BlbmZpbGUoZmluZGZpbGUoZmlsZW5hbWUpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcmlnaW5hbCA9IGZwLnJlYWQoKQorICAgICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhvcmlnaW5hbCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIG9yaWdpbmFsLCBtc2cKKworICAgIGRlZiBfc2lnbmVkX3BhcnRzX2VxKHNlbGYsIG9yaWdpbmFsLCByZXN1bHQpOgorICAgICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IG1pbWUgcGFydCBvZiBlYWNoIG1lc3NhZ2UKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIHJlcGFydCA9IHJlLmNvbXBpbGUocideLS0oW15cbl0rKVxuKC4qPylcbi0tXDEkJywgcmUuUyB8IHJlLk0pCisgICAgICAgIGlucGFydCA9IHJlcGFydC5zZWFyY2gob3JpZ2luYWwpLmdyb3VwKDIpCisgICAgICAgIG91dHBhcnQgPSByZXBhcnQuc2VhcmNoKHJlc3VsdCkuZ3JvdXAoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwYXJ0LCBpbnBhcnQpCisKKyAgICBkZWYgdGVzdF9sb25nX2hlYWRlcnNfYXNfc3RyaW5nKHNlbGYpOgorICAgICAgICBvcmlnaW5hbCwgbXNnID0gc2VsZi5fbXNnX2FuZF9vYmooJ21zZ180NS50eHQnKQorICAgICAgICByZXN1bHQgPSBtc2cuYXNfc3RyaW5nKCkKKyAgICAgICAgc2VsZi5fc2lnbmVkX3BhcnRzX2VxKG9yaWdpbmFsLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9sb25nX2hlYWRlcnNfZmxhdHRlbihzZWxmKToKKyAgICAgICAgb3JpZ2luYWwsIG1zZyA9IHNlbGYuX21zZ19hbmRfb2JqKCdtc2dfNDUudHh0JykKKyAgICAgICAgZnAgPSBTdHJpbmdJTygpCisgICAgICAgIEdlbmVyYXRvcihmcCkuZmxhdHRlbihtc2cpCisgICAgICAgIHJlc3VsdCA9IGZwLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5fc2lnbmVkX3BhcnRzX2VxKG9yaWdpbmFsLCByZXN1bHQpCisKKworCitkZWYgX3Rlc3RjbGFzc2VzKCk6CisgICAgbW9kID0gc3lzLm1vZHVsZXNbX19uYW1lX19dCisgICAgcmV0dXJuIFtnZXRhdHRyKG1vZCwgbmFtZSkgZm9yIG5hbWUgaW4gZGlyKG1vZCkgaWYgbmFtZS5zdGFydHN3aXRoKCdUZXN0JyldCisKKworZGVmIHN1aXRlKCk6CisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIGZvciB0ZXN0Y2xhc3MgaW4gX3Rlc3RjbGFzc2VzKCk6CisgICAgICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKHRlc3RjbGFzcykpCisgICAgcmV0dXJuIHN1aXRlCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGZvciB0ZXN0Y2xhc3MgaW4gX3Rlc3RjbGFzc2VzKCk6CisgICAgICAgIHJ1bl91bml0dGVzdCh0ZXN0Y2xhc3MpCisKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3N1aXRlJykKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC90ZXN0X2VtYWlsX2NvZGVjcy5weSBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC90ZXN0X2VtYWlsX2NvZGVjcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzI3NTBhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L3Rlc3RfZW1haWxfY29kZWNzLnB5CkBAIC0wLDAgKzEsNzcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDYgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgQ29udGFjdDogZW1haWwtc2lnQHB5dGhvbi5vcmcKKyMgZW1haWwgcGFja2FnZSB1bml0IHRlc3RzIGZvciAob3B0aW9uYWwpIEFzaWFuIGNvZGVjcworCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitmcm9tIGVtYWlsLnRlc3QudGVzdF9lbWFpbCBpbXBvcnQgVGVzdEVtYWlsQmFzZQorZnJvbSBlbWFpbC5jaGFyc2V0IGltcG9ydCBDaGFyc2V0Citmcm9tIGVtYWlsLmhlYWRlciBpbXBvcnQgSGVhZGVyLCBkZWNvZGVfaGVhZGVyCitmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IE1lc3NhZ2UKKworIyBXZSdyZSBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMywgYnV0IGl0IGRvZXNuJ3QgaGF2ZSB0aGUgYnVpbHQtaW4gQXNpYW4KKyMgY29kZWNzLCBzbyB3ZSBoYXZlIHRvIHNraXAgYWxsIHRoZXNlIHRlc3RzLgordHJ5OgorICAgIHVuaWNvZGUoJ2ZvbycsICdldWMtanAnKQorZXhjZXB0IExvb2t1cEVycm9yOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0CisKKworDAorY2xhc3MgVGVzdEVtYWlsQXNpYW5Db2RlY3MoVGVzdEVtYWlsQmFzZSk6CisgICAgZGVmIHRlc3RfamFwYW5lc2VfY29kZWNzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBqID0gQ2hhcnNldCgiZXVjLWpwIikKKyAgICAgICAgZyA9IENoYXJzZXQoImlzby04ODU5LTEiKQorICAgICAgICBoID0gSGVhZGVyKCJIZWxsbyBXb3JsZCEiKQorICAgICAgICBqaGVsbG8gPSAnXHhhNVx4Y2ZceGE1XHhlZFx4YTFceGJjXHhhNVx4ZWZceGExXHhiY1x4YTVceGViXHhhNVx4YzlceGExXHhhYScKKyAgICAgICAgZ2hlbGxvID0gJ0dyXHhmY1x4ZGYgR290dCEnCisgICAgICAgIGguYXBwZW5kKGpoZWxsbywgaikKKyAgICAgICAgaC5hcHBlbmQoZ2hlbGxvLCBnKQorICAgICAgICAjIEJBVzogVGhpcyB1c2VkIHRvIC0tIGFuZCBtYXliZSBzaG91bGQgLS0gZm9sZCB0aGUgdHdvIGlzby04ODU5LTEKKyAgICAgICAgIyBjaHVua3MgaW50byBhIHNpbmdsZSBlbmNvZGVkIHdvcmQuICBIb3dldmVyIGl0IGRvZXNuJ3QgdmlvbGF0ZSB0aGUKKyAgICAgICAgIyBzdGFuZGFyZCB0byBoYXZlIHRoZW0gYXMgdHdvIGVuY29kZWQgY2h1bmtzIGFuZCBtYXliZSBpdCdzCisgICAgICAgICMgcmVhc29uYWJsZSA8d2luaz4gZm9yIGVhY2ggLmFwcGVuZCgpIGNhbGwgdG8gcmVzdWx0IGluIGEgc2VwYXJhdGUKKyAgICAgICAgIyBlbmNvZGVkIHdvcmQuCisgICAgICAgIGVxKGguZW5jb2RlKCksICIiIlwKK0hlbGxvIFdvcmxkISA9P2lzby0yMDIyLWpwP2I/R3lSQ0pVOGxiU0U4Slc4aFBDVnJKVWtoS2hzb1FnPT0/PQorID0/aXNvLTg4NTktMT9xP0dyPUZDPURGPz0gPT9pc28tODg1OS0xP3E/X0dvdHQhPz0iIiIpCisgICAgICAgIGVxKGRlY29kZV9oZWFkZXIoaC5lbmNvZGUoKSksCisgICAgICAgICAgIFsoJ0hlbGxvIFdvcmxkIScsIE5vbmUpLAorICAgICAgICAgICAgKCdceDFiJEIlTyVtITwlbyE8JWslSSEqXHgxYihCJywgJ2lzby0yMDIyLWpwJyksCisgICAgICAgICAgICAoJ0dyXHhmY1x4ZGYgR290dCEnLCAnaXNvLTg4NTktMScpXSkKKyAgICAgICAgbG9uZyA9ICd0ZXN0LWphIFx4YTRceGQ4XHhjNVx4ZWFceGI5XHhjNlx4YTRceGI1XHhhNFx4ZWNceGE0XHhiZlx4YTVceGUxXHhhMVx4YmNceGE1XHhlYlx4YTRceGNmXHhiYlx4Y2FceGIyXHhmMVx4YmNceGQ0XHhhNFx4Y2VceGJlXHhiNVx4YzdceGE3XHhhNFx4ZjJceGMyXHhkNFx4YTRceGMzXHhhNFx4YzZceGE0XHhhNFx4YTRceGRlXHhhNFx4YjknCisgICAgICAgIGggPSBIZWFkZXIobG9uZywgaiwgaGVhZGVyX25hbWU9IlN1YmplY3QiKQorICAgICAgICAjIHRlc3QgYSB2ZXJ5IGxvbmcgaGVhZGVyCisgICAgICAgIGVuYyA9IGguZW5jb2RlKCkKKyAgICAgICAgIyBUSzogc3BsaXR0aW5nIHBvaW50IG1heSBkaWZmZXIgYnkgY29kZWMgZGVzaWduIGFuZC9vciBIZWFkZXIgZW5jb2RpbmcKKyAgICAgICAgZXEoZW5jICwgIiIiXAorPT9pc28tMjAyMi1qcD9iP2RHVnpkQzFxWVNBYkpFSWtXRVZxT1VZa05TUnNKRDhsWVNFOEpXc2tUenRLR3loQz89CisgPT9pc28tMjAyMi1qcD9iP0d5UkNNbkU4VkNST1BqVkhKeVJ5UWxRa1F5UkdKQ1FrWGlRNUd5aEM/PSIiIikKKyAgICAgICAgIyBUSzogZnVsbCBkZWNvZGUgY29tcGFyaXNvbgorICAgICAgICBlcShoLl9fdW5pY29kZV9fKCkuZW5jb2RlKCdldWMtanAnKSwgbG9uZykKKworICAgIGRlZiB0ZXN0X3BheWxvYWRfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIGpoZWxsbyA9ICdceGE1XHhjZlx4YTVceGVkXHhhMVx4YmNceGE1XHhlZlx4YTFceGJjXHhhNVx4ZWJceGE1XHhjOVx4YTFceGFhJworICAgICAgICBqY29kZSAgPSAnZXVjLWpwJworICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLnNldF9wYXlsb2FkKGpoZWxsbywgamNvZGUpCisgICAgICAgIHVzdHIgPSB1bmljb2RlKG1zZy5nZXRfcGF5bG9hZCgpLCBtc2cuZ2V0X2NvbnRlbnRfY2hhcnNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpoZWxsbywgdXN0ci5lbmNvZGUoamNvZGUpKQorCisKKwwKK2RlZiBzdWl0ZSgpOgorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShUZXN0RW1haWxBc2lhbkNvZGVjcykpCisgICAgcmV0dXJuIHN1aXRlCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChUZXN0RW1haWxBc2lhbkNvZGVjcykKKworCisMCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3N1aXRlJykKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC90ZXN0X2VtYWlsX2NvZGVjc19yZW5hbWVkLnB5IGIvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L3Rlc3RfZW1haWxfY29kZWNzX3JlbmFtZWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMyNzUwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC90ZXN0X2VtYWlsX2NvZGVjc19yZW5hbWVkLnB5CkBAIC0wLDAgKzEsNzcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDYgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgQ29udGFjdDogZW1haWwtc2lnQHB5dGhvbi5vcmcKKyMgZW1haWwgcGFja2FnZSB1bml0IHRlc3RzIGZvciAob3B0aW9uYWwpIEFzaWFuIGNvZGVjcworCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitmcm9tIGVtYWlsLnRlc3QudGVzdF9lbWFpbCBpbXBvcnQgVGVzdEVtYWlsQmFzZQorZnJvbSBlbWFpbC5jaGFyc2V0IGltcG9ydCBDaGFyc2V0Citmcm9tIGVtYWlsLmhlYWRlciBpbXBvcnQgSGVhZGVyLCBkZWNvZGVfaGVhZGVyCitmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IE1lc3NhZ2UKKworIyBXZSdyZSBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMywgYnV0IGl0IGRvZXNuJ3QgaGF2ZSB0aGUgYnVpbHQtaW4gQXNpYW4KKyMgY29kZWNzLCBzbyB3ZSBoYXZlIHRvIHNraXAgYWxsIHRoZXNlIHRlc3RzLgordHJ5OgorICAgIHVuaWNvZGUoJ2ZvbycsICdldWMtanAnKQorZXhjZXB0IExvb2t1cEVycm9yOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0CisKKworDAorY2xhc3MgVGVzdEVtYWlsQXNpYW5Db2RlY3MoVGVzdEVtYWlsQmFzZSk6CisgICAgZGVmIHRlc3RfamFwYW5lc2VfY29kZWNzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBqID0gQ2hhcnNldCgiZXVjLWpwIikKKyAgICAgICAgZyA9IENoYXJzZXQoImlzby04ODU5LTEiKQorICAgICAgICBoID0gSGVhZGVyKCJIZWxsbyBXb3JsZCEiKQorICAgICAgICBqaGVsbG8gPSAnXHhhNVx4Y2ZceGE1XHhlZFx4YTFceGJjXHhhNVx4ZWZceGExXHhiY1x4YTVceGViXHhhNVx4YzlceGExXHhhYScKKyAgICAgICAgZ2hlbGxvID0gJ0dyXHhmY1x4ZGYgR290dCEnCisgICAgICAgIGguYXBwZW5kKGpoZWxsbywgaikKKyAgICAgICAgaC5hcHBlbmQoZ2hlbGxvLCBnKQorICAgICAgICAjIEJBVzogVGhpcyB1c2VkIHRvIC0tIGFuZCBtYXliZSBzaG91bGQgLS0gZm9sZCB0aGUgdHdvIGlzby04ODU5LTEKKyAgICAgICAgIyBjaHVua3MgaW50byBhIHNpbmdsZSBlbmNvZGVkIHdvcmQuICBIb3dldmVyIGl0IGRvZXNuJ3QgdmlvbGF0ZSB0aGUKKyAgICAgICAgIyBzdGFuZGFyZCB0byBoYXZlIHRoZW0gYXMgdHdvIGVuY29kZWQgY2h1bmtzIGFuZCBtYXliZSBpdCdzCisgICAgICAgICMgcmVhc29uYWJsZSA8d2luaz4gZm9yIGVhY2ggLmFwcGVuZCgpIGNhbGwgdG8gcmVzdWx0IGluIGEgc2VwYXJhdGUKKyAgICAgICAgIyBlbmNvZGVkIHdvcmQuCisgICAgICAgIGVxKGguZW5jb2RlKCksICIiIlwKK0hlbGxvIFdvcmxkISA9P2lzby0yMDIyLWpwP2I/R3lSQ0pVOGxiU0U4Slc4aFBDVnJKVWtoS2hzb1FnPT0/PQorID0/aXNvLTg4NTktMT9xP0dyPUZDPURGPz0gPT9pc28tODg1OS0xP3E/X0dvdHQhPz0iIiIpCisgICAgICAgIGVxKGRlY29kZV9oZWFkZXIoaC5lbmNvZGUoKSksCisgICAgICAgICAgIFsoJ0hlbGxvIFdvcmxkIScsIE5vbmUpLAorICAgICAgICAgICAgKCdceDFiJEIlTyVtITwlbyE8JWslSSEqXHgxYihCJywgJ2lzby0yMDIyLWpwJyksCisgICAgICAgICAgICAoJ0dyXHhmY1x4ZGYgR290dCEnLCAnaXNvLTg4NTktMScpXSkKKyAgICAgICAgbG9uZyA9ICd0ZXN0LWphIFx4YTRceGQ4XHhjNVx4ZWFceGI5XHhjNlx4YTRceGI1XHhhNFx4ZWNceGE0XHhiZlx4YTVceGUxXHhhMVx4YmNceGE1XHhlYlx4YTRceGNmXHhiYlx4Y2FceGIyXHhmMVx4YmNceGQ0XHhhNFx4Y2VceGJlXHhiNVx4YzdceGE3XHhhNFx4ZjJceGMyXHhkNFx4YTRceGMzXHhhNFx4YzZceGE0XHhhNFx4YTRceGRlXHhhNFx4YjknCisgICAgICAgIGggPSBIZWFkZXIobG9uZywgaiwgaGVhZGVyX25hbWU9IlN1YmplY3QiKQorICAgICAgICAjIHRlc3QgYSB2ZXJ5IGxvbmcgaGVhZGVyCisgICAgICAgIGVuYyA9IGguZW5jb2RlKCkKKyAgICAgICAgIyBUSzogc3BsaXR0aW5nIHBvaW50IG1heSBkaWZmZXIgYnkgY29kZWMgZGVzaWduIGFuZC9vciBIZWFkZXIgZW5jb2RpbmcKKyAgICAgICAgZXEoZW5jICwgIiIiXAorPT9pc28tMjAyMi1qcD9iP2RHVnpkQzFxWVNBYkpFSWtXRVZxT1VZa05TUnNKRDhsWVNFOEpXc2tUenRLR3loQz89CisgPT9pc28tMjAyMi1qcD9iP0d5UkNNbkU4VkNST1BqVkhKeVJ5UWxRa1F5UkdKQ1FrWGlRNUd5aEM/PSIiIikKKyAgICAgICAgIyBUSzogZnVsbCBkZWNvZGUgY29tcGFyaXNvbgorICAgICAgICBlcShoLl9fdW5pY29kZV9fKCkuZW5jb2RlKCdldWMtanAnKSwgbG9uZykKKworICAgIGRlZiB0ZXN0X3BheWxvYWRfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIGpoZWxsbyA9ICdceGE1XHhjZlx4YTVceGVkXHhhMVx4YmNceGE1XHhlZlx4YTFceGJjXHhhNVx4ZWJceGE1XHhjOVx4YTFceGFhJworICAgICAgICBqY29kZSAgPSAnZXVjLWpwJworICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLnNldF9wYXlsb2FkKGpoZWxsbywgamNvZGUpCisgICAgICAgIHVzdHIgPSB1bmljb2RlKG1zZy5nZXRfcGF5bG9hZCgpLCBtc2cuZ2V0X2NvbnRlbnRfY2hhcnNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpoZWxsbywgdXN0ci5lbmNvZGUoamNvZGUpKQorCisKKwwKK2RlZiBzdWl0ZSgpOgorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShUZXN0RW1haWxBc2lhbkNvZGVjcykpCisgICAgcmV0dXJuIHN1aXRlCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChUZXN0RW1haWxBc2lhbkNvZGVjcykKKworCisMCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9J3N1aXRlJykKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC90ZXN0X2VtYWlsX3JlbmFtZWQucHkgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvdGVzdF9lbWFpbF9yZW5hbWVkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOTdlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2VtYWlsL3Rlc3QvdGVzdF9lbWFpbF9yZW5hbWVkLnB5CkBAIC0wLDAgKzEsMzMyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorIyBDb250YWN0OiBlbWFpbC1zaWdAcHl0aG9uLm9yZworIyBlbWFpbCBwYWNrYWdlIHVuaXQgdGVzdHMKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IGJhc2U2NAoraW1wb3J0IGRpZmZsaWIKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCitmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworaW1wb3J0IGVtYWlsCisKK2Zyb20gZW1haWwuY2hhcnNldCBpbXBvcnQgQ2hhcnNldAorZnJvbSBlbWFpbC5oZWFkZXIgaW1wb3J0IEhlYWRlciwgZGVjb2RlX2hlYWRlciwgbWFrZV9oZWFkZXIKK2Zyb20gZW1haWwucGFyc2VyIGltcG9ydCBQYXJzZXIsIEhlYWRlclBhcnNlcgorZnJvbSBlbWFpbC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgRGVjb2RlZEdlbmVyYXRvcgorZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBNZXNzYWdlCitmcm9tIGVtYWlsLm1pbWUuYXBwbGljYXRpb24gaW1wb3J0IE1JTUVBcHBsaWNhdGlvbgorZnJvbSBlbWFpbC5taW1lLmF1ZGlvIGltcG9ydCBNSU1FQXVkaW8KK2Zyb20gZW1haWwubWltZS50ZXh0IGltcG9ydCBNSU1FVGV4dAorZnJvbSBlbWFpbC5taW1lLmltYWdlIGltcG9ydCBNSU1FSW1hZ2UKK2Zyb20gZW1haWwubWltZS5iYXNlIGltcG9ydCBNSU1FQmFzZQorZnJvbSBlbWFpbC5taW1lLm1lc3NhZ2UgaW1wb3J0IE1JTUVNZXNzYWdlCitmcm9tIGVtYWlsLm1pbWUubXVsdGlwYXJ0IGltcG9ydCBNSU1FTXVsdGlwYXJ0Citmcm9tIGVtYWlsIGltcG9ydCB1dGlscworZnJvbSBlbWFpbCBpbXBvcnQgZXJyb3JzCitmcm9tIGVtYWlsIGltcG9ydCBlbmNvZGVycworZnJvbSBlbWFpbCBpbXBvcnQgaXRlcmF0b3JzCitmcm9tIGVtYWlsIGltcG9ydCBiYXNlNjRtaW1lCitmcm9tIGVtYWlsIGltcG9ydCBxdW9wcmltaW1lCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGZpbmRmaWxlLCBydW5fdW5pdHRlc3QKK2Zyb20gZW1haWwudGVzdCBpbXBvcnQgX19maWxlX18gYXMgbGFuZG1hcmsKKworCitOTCA9ICdcbicKK0VNUFRZU1RSSU5HID0gJycKK1NQQUNFID0gJyAnCisKKworCitkZWYgb3BlbmZpbGUoZmlsZW5hbWUsIG1vZGU9J3InKToKKyAgICBwYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShsYW5kbWFyayksICdkYXRhJywgZmlsZW5hbWUpCisgICAgcmV0dXJuIG9wZW4ocGF0aCwgbW9kZSkKKworCisKKyMgQmFzZSB0ZXN0IGNsYXNzCitjbGFzcyBUZXN0RW1haWxCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgbmRpZmZBc3NlcnRFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kKToKKyAgICAgICAgIiIiTGlrZSBhc3NlcnRFcXVhbCBleGNlcHQgdXNlIG5kaWZmIGZvciByZWFkYWJsZSBvdXRwdXQuIiIiCisgICAgICAgIGlmIGZpcnN0ICE9IHNlY29uZDoKKyAgICAgICAgICAgIHNmaXJzdCA9IHN0cihmaXJzdCkKKyAgICAgICAgICAgIHNzZWNvbmQgPSBzdHIoc2Vjb25kKQorICAgICAgICAgICAgZGlmZiA9IGRpZmZsaWIubmRpZmYoc2ZpcnN0LnNwbGl0bGluZXMoKSwgc3NlY29uZC5zcGxpdGxpbmVzKCkpCisgICAgICAgICAgICBmcCA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHByaW50ID4+IGZwLCBOTCwgTkwuam9pbihkaWZmKQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBmcC5nZXR2YWx1ZSgpCisKKyAgICBkZWYgX21zZ29iaihzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGZwID0gb3BlbmZpbGUoZmluZGZpbGUoZmlsZW5hbWUpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fZmlsZShmcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIG1zZworCisKKworIyBUZXN0IHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgTWVzc2FnZSBjbGFzcydzIEFQSQorY2xhc3MgVGVzdE1lc3NhZ2VBUEkoVGVzdEVtYWlsQmFzZSk6CisgICAgZGVmIHRlc3RfZ2V0X2FsbChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzIwLnR4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfYWxsKCdjYycpLCBbJ2NjY0B6enoub3JnJywgJ2RkZEB6enoub3JnJywgJ2VlZUB6enoub3JnJ10pCisgICAgICAgIGVxKG1zZy5nZXRfYWxsKCd4eCcsICduL2EnKSwgJ24vYScpCisKKyAgICBkZWYgdGVzdF9nZXRzZXRfY2hhcnNldChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBlcShtc2cuZ2V0X2NoYXJzZXQoKSwgTm9uZSkKKyAgICAgICAgY2hhcnNldCA9IENoYXJzZXQoJ2lzby04ODU5LTEnKQorICAgICAgICBtc2cuc2V0X2NoYXJzZXQoY2hhcnNldCkKKyAgICAgICAgZXEobXNnWydtaW1lLXZlcnNpb24nXSwgJzEuMCcpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgZXEobXNnWydjb250ZW50LXR5cGUnXSwgJ3RleHQvcGxhaW47IGNoYXJzZXQ9Imlzby04ODU5LTEiJykKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbSgnY2hhcnNldCcpLCAnaXNvLTg4NTktMScpCisgICAgICAgIGVxKG1zZ1snY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddLCAncXVvdGVkLXByaW50YWJsZScpCisgICAgICAgIGVxKG1zZy5nZXRfY2hhcnNldCgpLmlucHV0X2NoYXJzZXQsICdpc28tODg1OS0xJykKKyAgICAgICAgIyBSZW1vdmUgdGhlIGNoYXJzZXQKKyAgICAgICAgbXNnLnNldF9jaGFyc2V0KE5vbmUpCisgICAgICAgIGVxKG1zZy5nZXRfY2hhcnNldCgpLCBOb25lKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHlwZSddLCAndGV4dC9wbGFpbicpCisgICAgICAgICMgVHJ5IGFkZGluZyBhIGNoYXJzZXQgd2hlbiB0aGVyZSdzIGFscmVhZHkgTUlNRSBoZWFkZXJzIHByZXNlbnQKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snTUlNRS1WZXJzaW9uJ10gPSAnMi4wJworICAgICAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQveC13ZWlyZCcKKyAgICAgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSAncXVpbnRlZC1wdW50YWJsZScKKyAgICAgICAgbXNnLnNldF9jaGFyc2V0KGNoYXJzZXQpCisgICAgICAgIGVxKG1zZ1snbWltZS12ZXJzaW9uJ10sICcyLjAnKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHlwZSddLCAndGV4dC94LXdlaXJkOyBjaGFyc2V0PSJpc28tODg1OS0xIicpCisgICAgICAgIGVxKG1zZ1snY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddLCAncXVpbnRlZC1wdW50YWJsZScpCisKKyAgICBkZWYgdGVzdF9zZXRfY2hhcnNldF9mcm9tX3N0cmluZyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2cuc2V0X2NoYXJzZXQoJ3VzLWFzY2lpJykKKyAgICAgICAgZXEobXNnLmdldF9jaGFyc2V0KCkuaW5wdXRfY2hhcnNldCwgJ3VzLWFzY2lpJykKKyAgICAgICAgZXEobXNnWydjb250ZW50LXR5cGUnXSwgJ3RleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIicpCisKKyAgICBkZWYgdGVzdF9zZXRfcGF5bG9hZF93aXRoX2NoYXJzZXQoc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBjaGFyc2V0ID0gQ2hhcnNldCgnaXNvLTg4NTktMScpCisgICAgICAgIG1zZy5zZXRfcGF5bG9hZCgnVGhpcyBpcyBhIHN0cmluZyBwYXlsb2FkJywgY2hhcnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NoYXJzZXQoKS5pbnB1dF9jaGFyc2V0LCAnaXNvLTg4NTktMScpCisKKyAgICBkZWYgdGVzdF9nZXRfY2hhcnNldHMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzA4LnR4dCcpCisgICAgICAgIGNoYXJzZXRzID0gbXNnLmdldF9jaGFyc2V0cygpCisgICAgICAgIGVxKGNoYXJzZXRzLCBbTm9uZSwgJ3VzLWFzY2lpJywgJ2lzby04ODU5LTEnLCAnaXNvLTg4NTktMicsICdrb2k4LXInXSkKKworICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wOS50eHQnKQorICAgICAgICBjaGFyc2V0cyA9IG1zZy5nZXRfY2hhcnNldHMoJ2RpbmdiYXQnKQorICAgICAgICBlcShjaGFyc2V0cywgWydkaW5nYmF0JywgJ3VzLWFzY2lpJywgJ2lzby04ODU5LTEnLCAnZGluZ2JhdCcsCisgICAgICAgICAgICAgICAgICAgICAgJ2tvaTgtciddKQorCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzEyLnR4dCcpCisgICAgICAgIGNoYXJzZXRzID0gbXNnLmdldF9jaGFyc2V0cygpCisgICAgICAgIGVxKGNoYXJzZXRzLCBbTm9uZSwgJ3VzLWFzY2lpJywgJ2lzby04ODU5LTEnLCBOb25lLCAnaXNvLTg4NTktMicsCisgICAgICAgICAgICAgICAgICAgICAgJ2lzby04ODU5LTMnLCAndXMtYXNjaWknLCAna29pOC1yJ10pCisKKyAgICBkZWYgdGVzdF9nZXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzA0LnR4dCcpCisgICAgICAgIGZpbGVuYW1lcyA9IFtwLmdldF9maWxlbmFtZSgpIGZvciBwIGluIG1zZy5nZXRfcGF5bG9hZCgpXQorICAgICAgICBlcShmaWxlbmFtZXMsIFsnbXNnLnR4dCcsICdtc2cudHh0J10pCisKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDcudHh0JykKKyAgICAgICAgc3VicGFydCA9IG1zZy5nZXRfcGF5bG9hZCgxKQorICAgICAgICBlcShzdWJwYXJ0LmdldF9maWxlbmFtZSgpLCAnZGluZ3VzZmlzaC5naWYnKQorCisgICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lX3dpdGhfbmFtZV9wYXJhbWV0ZXIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzQ0LnR4dCcpCisgICAgICAgIGZpbGVuYW1lcyA9IFtwLmdldF9maWxlbmFtZSgpIGZvciBwIGluIG1zZy5nZXRfcGF5bG9hZCgpXQorICAgICAgICBlcShmaWxlbmFtZXMsIFsnbXNnLnR4dCcsICdtc2cudHh0J10pCisKKyAgICBkZWYgdGVzdF9nZXRfYm91bmRhcnkoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wNy50eHQnKQorICAgICAgICAjIE5vIHF1b3RlcyEKKyAgICAgICAgZXEobXNnLmdldF9ib3VuZGFyeSgpLCAnQk9VTkRBUlknKQorCisgICAgZGVmIHRlc3Rfc2V0X2JvdW5kYXJ5KHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgIyBUaGlzIG9uZSBoYXMgbm8gZXhpc3RpbmcgYm91bmRhcnkgcGFyYW1ldGVyLCBidXQgdGhlIENvbnRlbnQtVHlwZToKKyAgICAgICAgIyBoZWFkZXIgYXBwZWFycyBmaWZ0aC4KKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgbXNnLnNldF9ib3VuZGFyeSgnQk9VTkRBUlknKQorICAgICAgICBoZWFkZXIsIHZhbHVlID0gbXNnLml0ZW1zKClbNF0KKyAgICAgICAgZXEoaGVhZGVyLmxvd2VyKCksICdjb250ZW50LXR5cGUnKQorICAgICAgICBlcSh2YWx1ZSwgJ3RleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIjsgYm91bmRhcnk9IkJPVU5EQVJZIicpCisgICAgICAgICMgVGhpcyBvbmUgaGFzIGEgQ29udGVudC1UeXBlOiBoZWFkZXIsIHdpdGggYSBib3VuZGFyeSwgc3R1Y2sgaW4gdGhlCisgICAgICAgICMgbWlkZGxlIG9mIGl0cyBoZWFkZXJzLiAgTWFrZSBzdXJlIHRoZSBvcmRlciBpcyBwcmVzZXJ2ZWQ7IGl0IHNob3VsZAorICAgICAgICAjIGJlIGZpZnRoLgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wNC50eHQnKQorICAgICAgICBtc2cuc2V0X2JvdW5kYXJ5KCdCT1VOREFSWScpCisgICAgICAgIGhlYWRlciwgdmFsdWUgPSBtc2cuaXRlbXMoKVs0XQorICAgICAgICBlcShoZWFkZXIubG93ZXIoKSwgJ2NvbnRlbnQtdHlwZScpCisgICAgICAgIGVxKHZhbHVlLCAnbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iQk9VTkRBUlkiJykKKyAgICAgICAgIyBBbmQgdGhpcyBvbmUgaGFzIG5vIENvbnRlbnQtVHlwZTogaGVhZGVyIGF0IGFsbC4KKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDMudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLkhlYWRlclBhcnNlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5zZXRfYm91bmRhcnksICdCT1VOREFSWScpCisKKyAgICBkZWYgdGVzdF9nZXRfZGVjb2RlZF9wYXlsb2FkKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMTAudHh0JykKKyAgICAgICAgIyBUaGUgb3V0ZXIgbWVzc2FnZSBpcyBhIG11bHRpcGFydAorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBOb25lKQorICAgICAgICAjIFN1YnBhcnQgMSBpcyA3Yml0IGVuY29kZWQKKyAgICAgICAgZXEobXNnLmdldF9wYXlsb2FkKDApLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwKKyAgICAgICAgICAgJ1RoaXMgaXMgYSA3Yml0IGVuY29kZWQgbWVzc2FnZS5cbicpCisgICAgICAgICMgU3VicGFydCAyIGlzIHF1b3ByaQorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoMSkuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLAorICAgICAgICAgICAnXHhhMVRoaXMgaXMgYSBRdW90ZWQgUHJpbnRhYmxlIGVuY29kZWQgbWVzc2FnZSFcbicpCisgICAgICAgICMgU3VicGFydCAzIGlzIGJhc2U2NAorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoMikuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLAorICAgICAgICAgICAnVGhpcyBpcyBhIEJhc2U2NCBlbmNvZGVkIG1lc3NhZ2UuJykKKyAgICAgICAgIyBTdWJwYXJ0IDQgaXMgYmFzZTY0IHdpdGggYSB0cmFpbGluZyBuZXdsaW5lLCB3aGljaAorICAgICAgICAjIHVzZWQgdG8gYmUgc3RyaXBwZWQgKGlzc3VlIDcxNDMpLgorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoMykuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLAorICAgICAgICAgICAnVGhpcyBpcyBhIEJhc2U2NCBlbmNvZGVkIG1lc3NhZ2UuXG4nKQorICAgICAgICAjIFN1YnBhcnQgNSBoYXMgbm8gQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogaGVhZGVyLgorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoNCkuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLAorICAgICAgICAgICAnVGhpcyBoYXMgbm8gQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogaGVhZGVyLlxuJykKKworICAgIGRlZiB0ZXN0X2dldF9kZWNvZGVkX3V1X3BheWxvYWQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLnNldF9wYXlsb2FkKCdiZWdpbiA2NjYgLVxuKzomNUw7JlxcQD1WXVI7JjAgXG4gXG5lbmRcbicpCisgICAgICAgIGZvciBjdGUgaW4gKCd4LXV1ZW5jb2RlJywgJ3V1ZW5jb2RlJywgJ3V1ZScsICd4LXV1ZScpOgorICAgICAgICAgICAgbXNnWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ10gPSBjdGUKKyAgICAgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksICdoZWxsbyB3b3JsZCcpCisgICAgICAgICMgTm93IHRyeSBzb21lIGJvZ3VzIGRhdGEKKyAgICAgICAgbXNnLnNldF9wYXlsb2FkKCdmb28nKQorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCAnZm9vJykKKworICAgIGRlZiB0ZXN0X2RlY29kZWRfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDcudHh0JykKKyAgICAgICAgZnAgPSBvcGVuZmlsZSgnbXNnXzE3LnR4dCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRleHQgPSBmcC5yZWFkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgZyA9IERlY29kZWRHZW5lcmF0b3IocykKKyAgICAgICAgZy5mbGF0dGVuKG1zZykKKyAgICAgICAgZXEocy5nZXR2YWx1ZSgpLCB0ZXh0KQorCisgICAgZGVmIHRlc3RfX2NvbnRhaW5zX18oc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ0Zyb20nXSA9ICdNZScKKyAgICAgICAgbXNnWyd0byddID0gJ1lvdScKKyAgICAgICAgIyBDaGVjayBmb3IgY2FzZSBpbnNlbnNpdGl2aXR5CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnZnJvbScgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0Zyb20nIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdGUk9NJyBpbiBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgndG8nIGluIG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdUbycgaW4gbXNnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1RPJyBpbiBtc2cpCisKKyAgICBkZWYgdGVzdF9hc19zdHJpbmcoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBmcCA9IG9wZW5maWxlKCdtc2dfMDEudHh0JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBCQVcgMzAtTWFyLTIwMDkgRXZpbCBiZSBoZXJlLiAgU28sIHRoZSBnZW5lcmF0b3IgaXMgYnJva2VuIHdpdGgKKyAgICAgICAgICAgICMgcmVzcGVjdCB0byBsb25nIGxpbmUgYnJlYWtpbmcuICBJdCdzIGFsc28gbm90IGlkZW1wb3RlbnQgd2hlbiBhCisgICAgICAgICAgICAjIGhlYWRlciBmcm9tIGEgcGFyc2VkIG1lc3NhZ2UgaXMgY29udGludWVkIHdpdGggdGFicyByYXRoZXIgdGhhbgorICAgICAgICAgICAgIyBzcGFjZXMuICBCZWZvcmUgd2UgZml4ZWQgYnVnIDE5NzQgaXQgd2FzIHJldmVyc2VkbHkgYnJva2VuLAorICAgICAgICAgICAgIyBpLmUuIGhlYWRlcnMgdGhhdCB3ZXJlIGNvbnRpbnVlZCB3aXRoIHNwYWNlcyBnb3QgY29udGludWVkIHdpdGgKKyAgICAgICAgICAgICMgdGFicy4gIEZvciBQeXRob24gMi54IHRoZXJlJ3MgcmVhbGx5IG5vIGdvb2QgZml4IGFuZCBpbiBQeXRob24KKyAgICAgICAgICAgICMgMy54IGFsbCB0aGlzIHN0dWZmIGlzIHJlLXdyaXR0ZW4gdG8gYmUgcmlnaHQoZXIpLiAgQ2hyaXMgV2l0aGVycworICAgICAgICAgICAgIyBjb252aW5jZWQgbWUgdGhhdCB1c2luZyBzcGFjZSBhcyB0aGUgZGVmYXVsdCBjb250aW51YXRpb24KKyAgICAgICAgICAgICMgY2hhcmFjdGVyIGlzIGxlc3MgYmFkIGZvciBtb3JlIGFwcGxpY2F0aW9ucy4KKyAgICAgICAgICAgIHRleHQgPSBmcC5yZWFkKCkucmVwbGFjZSgnXHQnLCAnICcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHNlbGYubmRpZmZBc3NlcnRFcXVhbCh0ZXh0LCBtc2cuYXNfc3RyaW5nKCkpCisgICAgICAgIGZ1bGxyZXByID0gc3RyKG1zZykKKyAgICAgICAgbGluZXMgPSBmdWxscmVwci5zcGxpdCgnXG4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXNbMF0uc3RhcnRzd2l0aCgnRnJvbSAnKSkKKyAgICAgICAgZXEodGV4dCwgTkwuam9pbihsaW5lc1sxOl0pKQorCisgICAgZGVmIHRlc3RfYmFkX3BhcmFtKHNlbGYpOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKCJDb250ZW50LVR5cGU6IGJsYXJnOyBiYXo7IGJvb1xuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BhcmFtKCdiYXonKSwgJycpCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKCJGcm9tOiBmb29cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9maWxlbmFtZSgpLCBOb25lKQorCisgICAgZGVmIHRlc3RfYm9ndXNfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoCisgICAgICAgICJDb250ZW50LURpc3Bvc2l0aW9uOiBibGFyZzsgZmlsZW5hbWVcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9maWxlbmFtZSgpLCAnJykKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfYm91bmRhcnkoc2VsZik6CisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoIkZyb206IGZvb1xuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2JvdW5kYXJ5KCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9nZXRfcGFyYW1zKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZygKKyAgICAgICAgICAgICdYLUhlYWRlcjogZm9vPW9uZTsgYmFyPXR3bzsgYmF6PXRocmVlXG4nKQorICAgICAgICBlcShtc2cuZ2V0X3BhcmFtcyhoZWFkZXI9J3gtaGVhZGVyJyksCisgICAgICAgICAgIFsoJ2ZvbycsICdvbmUnKSwgKCdiYXInLCAndHdvJyksICgnYmF6JywgJ3RocmVlJyldKQorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKAorICAgICAgICAgICAgJ1gtSGVhZGVyOiBmb287IGJhcj1vbmU7IGJhej10d29cbicpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW1zKGhlYWRlcj0neC1oZWFkZXInKSwKKyAgICAgICAgICAgWygnZm9vJywgJycpLCAoJ2JhcicsICdvbmUnKSwgKCdiYXonLCAndHdvJyldKQorICAgICAgICBlcShtc2cuZ2V0X3BhcmFtcygpLCBOb25lKQorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKAorICAgICAgICAgICAgJ1gtSGVhZGVyOiBmb287IGJhcj0ib25lIjsgYmF6PXR3b1xuJykKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbXMoaGVhZGVyPSd4LWhlYWRlcicpLAorICAgICAgICAgICBbKCdmb28nLCAnJyksICgnYmFyJywgJ29uZScpLCAoJ2JheicsICd0d28nKV0pCisKKyAgICBkZWYgdGVzdF9nZXRfcGFyYW1fbGliZXJhbChzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snQ29udGVudC1UeXBlJ10gPSAnQ29udGVudC1UeXBlOiBNdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5ID0gIkNQSU1TU01UUEMwNnA1ZjN0RyInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXJhbSgnYm91bmRhcnknKSwgJ0NQSU1TU01UUEMwNnA1ZjN0RycpCisKKyAgICBkZWYgdGVzdF9nZXRfcGFyYW0oc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKAorICAgICAgICAgICAgIlgtSGVhZGVyOiBmb289b25lOyBiYXI9dHdvOyBiYXo9dGhyZWVcbiIpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ2JhcicsIGhlYWRlcj0neC1oZWFkZXInKSwgJ3R3bycpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ3F1dXonLCBoZWFkZXI9J3gtaGVhZGVyJyksIE5vbmUpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ3F1dXonKSwgTm9uZSkKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZygKKyAgICAgICAgICAgICdYLUhlYWRlcjogZm9vOyBiYXI9Im9uZSI7IGJhej10d29cbicpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ2ZvbycsIGhlYWRlcj0neC1oZWFkZXInKSwgJycpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ2JhcicsIGhlYWRlcj0neC1oZWFkZXInKSwgJ29uZScpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ2JheicsIGhlYWRlcj0neC1oZWFkZXInKSwgJ3R3bycpCisgICAgICAgICMgWFhYOiBXZSBhcmUgbm90IFJGQy0yMDQ1IGNvbXBsaWFudCEgIFdlIGNhbm5vdCBwYXJzZToKKyAgICAgICAgIyBtc2dbIkNvbnRlbnQtVHlwZSJdID0gJ3RleHQvcGxhaW47IHdlaXJkPSJoZXk7IGRvbGx5PyBbeW91XSBAIDxcXCJob21lXFwiPj8iJworICAgICAgICAjIG1zZy5nZXRfcGFyYW0oIndlaXJkIikKKyAgICAgICAgIyB5ZXQuCisKKyAgICBkZWYgdGVzdF9nZXRfcGFyYW1fZnVua3lfY29udGludWF0aW9uX2xpbmVzKHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18yMi50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZCgxKS5nZXRfcGFyYW0oJ25hbWUnKSwgJ3dpYmJsZS5KUEcnKQorCisgICAgZGVmIHRlc3RfZ2V0X3BhcmFtX3dpdGhfc2VtaXNfaW5fcXVvdGVzKHNlbGYpOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKAorICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZTogaW1hZ2UvcGpwZWc7IG5hbWU9IkppbSZhbXA7JmFtcDtKaWxsIlxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BhcmFtKCduYW1lJyksICdKaW0mYW1wOyZhbXA7SmlsbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXJhbSgnbmFtZScsIHVucXVvdGU9RmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICciSmltJmFtcDsmYW1wO0ppbGwiJykKKworICAgIGRlZiB0ZXN0X2hhc19rZXkoc2VsZik6CisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoJ0hlYWRlcjogZXhpc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5oYXNfa2V5KCdoZWFkZXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5oYXNfa2V5KCdIZWFkZXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5oYXNfa2V5KCdIRUFERVInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtc2cuaGFzX2tleSgnaGVhZGVyaScpKQorCisgICAgZGVmIHRlc3Rfc2V0X3BhcmFtKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZy5zZXRfcGFyYW0oJ2NoYXJzZXQnLCAnaXNvLTIwMjItanAnKQorICAgICAgICBlcShtc2cuZ2V0X3BhcmFtKCdjaGFyc2V0JyksICdpc28tMjAyMi1qcCcpCisgICAgICAgIG1zZy5zZXRfcGFyYW0oJ2ltcG9ydGFuY2UnLCAnaGlnaCB2YWx1ZScpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ2ltcG9ydGFuY2UnKSwgJ2hpZ2ggdmFsdWUnKQorICAgICAgICBlcShtc2cuZ2V0X3BhcmFtKCdpbXBvcnRhbmNlJywgdW5xdW90ZT1GYWxzZSksICciaGlnaCB2YWx1ZSInKQorICAgICAgICBlcShtc2cuZ2V0X3BhcmFtcygpLCBbKCd0ZXh0L3BsYWluJywgJycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjaGFyc2V0JywgJ2lzby0yMDIyLWpwJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2ltcG9ydGFuY2UnLCAnaGlnaCB2YWx1ZScpXSkKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbXModW5xdW90ZT1GYWxzZSksIFsoJ3RleHQvcGxhaW4nLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2NoYXJzZXQnLCAnImlzby0yMDIyLWpwIicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdpbXBvcnRhbmNlJywgJyJoaWdoIHZhbHVlIicpXSkKKyAgICAgICAgbXNnLnNldF9wYXJhbSgnY2hhcnNldCcsICdpc28tOTk5OS14eCcsIGhlYWRlcj0nWC1KaW1teScpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ2NoYXJzZXQnLCBoZWFkZXI9J1gtSmltbXknKSwgJ2lzby05OTk5LXh4JykKKworICAgIGRlZiB0ZXN0X2RlbF9wYXJhbShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzA1LnR4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW1zKCksCisgICAgICAgICAgIFsoJ211bHRpcGFydC9yZXBvcnQnLCAnJyksICgncmVwb3J0LXR5cGUnLCAnZGVsaXZlcnktc3RhdHVzJyksCisgICAgICAgICAgICAoJ2JvdW5kYXJ5JywgJ0QxNjkwQTdBQzEuOTk2ODU2MDkwL21haWwuZXhhbXBsZS5jb20nKV0pCisgICAgICAgIG9sZF92YWwgPSBtc2cuZ2V0X3BhcmFtKCJyZXBvcnQtdHlwZSIpCisgICAgICAgIG1zZy5kZWxfcGFyYW0oInJlcG9ydC10eXBlIikKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbXMoKSwKKyAgICAgICAgICAgWygnbXVsdGlwYXJ0L3JlcG9ydCcsICcnKSwKKyAgICAgICAgICAgICgnYm91bmRhcnknLCAnRDE2OTBBN0FDMS45OTY4NTYwOTAvbWFpbC5leGFtcGxlLmNvbScpXSkKKyAgICAgICAgbXNnLnNldF9wYXJhbSgicmVwb3J0LXR5cGUiLCBvbGRfdmFsKQorICAgICAgICBlcShtc2cuZ2V0X3BhcmFtcygpLAorICAgICAgICAgICBbKCdtdWx0aXBhcnQvcmVwb3J0JywgJycpLAorICAgICAgICAgICAgKCdib3VuZGFyeScsICdEMTY5MEE3QUMxLjk5Njg1NjA5MC9tYWlsLmV4YW1wbGUuY29tJyksCisgICAgICAgICAgICAoJ3JlcG9ydC10eXBlJywgb2xkX3ZhbCldKQorCisgICAgZGVmIHRlc3RfZGVsX3BhcmFtX29uX290aGVyX2hlYWRlcihzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZy5hZGRfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnLCBmaWxlbmFtZT0nYnVkLmdpZicpCisgICAgICAgIG1zZy5kZWxfcGFyYW0oJ2ZpbGVuYW1lJywgJ2NvbnRlbnQtZGlzcG9zaXRpb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ1snY29udGVudC1kaXNwb3NpdGlvbiddLCAnYXR0YWNobWVudCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdHlwZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtc2cuc2V0X3R5cGUsICd0ZXh0JykKKyAgICAgICAgbXNnLnNldF90eXBlKCd0ZXh0L3BsYWluJykKKyAgICAgICAgZXEobXNnWydjb250ZW50LXR5cGUnXSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBtc2cuc2V0X3BhcmFtKCdjaGFyc2V0JywgJ3VzLWFzY2lpJykKKyAgICAgICAgZXEobXNnWydjb250ZW50LXR5cGUnXSwgJ3RleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIicpCisgICAgICAgIG1zZy5zZXRfdHlwZSgndGV4dC9odG1sJykKKyAgICAgICAgZXEobXNnWydjb250ZW50LXR5cGUnXSwgJ3RleHQvaHRtbDsgY2hhcnNldD0idXMtYXNjaWkiJykKKworICAgIGRlZiB0ZXN0X3NldF90eXBlX29uX290aGVyX2hlYWRlcihzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snWC1Db250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICBtc2cuc2V0X3R5cGUoJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsICdYLUNvbnRlbnQtVHlwZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnWyd4LWNvbnRlbnQtdHlwZSddLCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJykKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X3R5cGVfbWlzc2luZyhzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfdHlwZV9taXNzaW5nX3dpdGhfZGVmYXVsdF90eXBlKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLnNldF9kZWZhdWx0X3R5cGUoJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfdHlwZV9mcm9tX21lc3NhZ2VfaW1wbGljaXQoc2VsZik6CisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzMwLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKDApLmdldF9jb250ZW50X3R5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZS9yZmM4MjInKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfdHlwZV9mcm9tX21lc3NhZ2VfZXhwbGljaXQoc2VsZik6CisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzI4LnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKDApLmdldF9jb250ZW50X3R5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZS9yZmM4MjInKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfdHlwZV9mcm9tX21lc3NhZ2VfdGV4dF9wbGFpbl9pbXBsaWNpdChzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDMudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF90eXBlX2Zyb21fbWVzc2FnZV90ZXh0X3BsYWluX2V4cGxpY2l0KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X21haW50eXBlX21pc3Npbmcoc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpLCAndGV4dCcpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9tYWludHlwZV9taXNzaW5nX3dpdGhfZGVmYXVsdF90eXBlKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLnNldF9kZWZhdWx0X3R5cGUoJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSwgJ21lc3NhZ2UnKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfbWFpbnR5cGVfZnJvbV9tZXNzYWdlX2ltcGxpY2l0KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18zMC50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZCgwKS5nZXRfY29udGVudF9tYWludHlwZSgpLCAnbWVzc2FnZScpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9tYWludHlwZV9mcm9tX21lc3NhZ2VfZXhwbGljaXQoc2VsZik6CisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzI4LnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKDApLmdldF9jb250ZW50X21haW50eXBlKCksICdtZXNzYWdlJykKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X21haW50eXBlX2Zyb21fbWVzc2FnZV90ZXh0X3BsYWluX2ltcGxpY2l0KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMy50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpLCAndGV4dCcpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9tYWludHlwZV9mcm9tX21lc3NhZ2VfdGV4dF9wbGFpbl9leHBsaWNpdChzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSwgJ3RleHQnKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfc3VidHlwZV9taXNzaW5nKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfc3VidHlwZSgpLCAncGxhaW4nKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfc3VidHlwZV9taXNzaW5nX3dpdGhfZGVmYXVsdF90eXBlKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLnNldF9kZWZhdWx0X3R5cGUoJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfc3VidHlwZSgpLCAncmZjODIyJykKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X3N1YnR5cGVfZnJvbV9tZXNzYWdlX2ltcGxpY2l0KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18zMC50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZCgwKS5nZXRfY29udGVudF9zdWJ0eXBlKCksICdyZmM4MjInKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfc3VidHlwZV9mcm9tX21lc3NhZ2VfZXhwbGljaXQoc2VsZik6CisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzI4LnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKDApLmdldF9jb250ZW50X3N1YnR5cGUoKSwgJ3JmYzgyMicpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9zdWJ0eXBlX2Zyb21fbWVzc2FnZV90ZXh0X3BsYWluX2ltcGxpY2l0KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMy50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfY29udGVudF9zdWJ0eXBlKCksICdwbGFpbicpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9zdWJ0eXBlX2Zyb21fbWVzc2FnZV90ZXh0X3BsYWluX2V4cGxpY2l0KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfY29udGVudF9zdWJ0eXBlKCksICdwbGFpbicpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9tYWludHlwZV9lcnJvcihzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snQ29udGVudC1UeXBlJ10gPSAnbm8tc2xhc2gtaW4tdGhpcy1zdHJpbmcnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9jb250ZW50X21haW50eXBlKCksICd0ZXh0JykKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X3N1YnR5cGVfZXJyb3Ioc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJ25vLXNsYXNoLWluLXRoaXMtc3RyaW5nJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfY29udGVudF9zdWJ0eXBlKCksICdwbGFpbicpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlX2hlYWRlcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2cuYWRkX2hlYWRlcignRmlyc3QnLCAnT25lJykKKyAgICAgICAgbXNnLmFkZF9oZWFkZXIoJ1NlY29uZCcsICdUd28nKQorICAgICAgICBtc2cuYWRkX2hlYWRlcignVGhpcmQnLCAnVGhyZWUnKQorICAgICAgICBlcShtc2cua2V5cygpLCBbJ0ZpcnN0JywgJ1NlY29uZCcsICdUaGlyZCddKQorICAgICAgICBlcShtc2cudmFsdWVzKCksIFsnT25lJywgJ1R3bycsICdUaHJlZSddKQorICAgICAgICBtc2cucmVwbGFjZV9oZWFkZXIoJ1NlY29uZCcsICdUd2VudHknKQorICAgICAgICBlcShtc2cua2V5cygpLCBbJ0ZpcnN0JywgJ1NlY29uZCcsICdUaGlyZCddKQorICAgICAgICBlcShtc2cudmFsdWVzKCksIFsnT25lJywgJ1R3ZW50eScsICdUaHJlZSddKQorICAgICAgICBtc2cuYWRkX2hlYWRlcignRmlyc3QnLCAnRWxldmVuJykKKyAgICAgICAgbXNnLnJlcGxhY2VfaGVhZGVyKCdGaXJzdCcsICdPbmUgSHVuZHJlZCcpCisgICAgICAgIGVxKG1zZy5rZXlzKCksIFsnRmlyc3QnLCAnU2Vjb25kJywgJ1RoaXJkJywgJ0ZpcnN0J10pCisgICAgICAgIGVxKG1zZy52YWx1ZXMoKSwgWydPbmUgSHVuZHJlZCcsICdUd2VudHknLCAnVGhyZWUnLCAnRWxldmVuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBtc2cucmVwbGFjZV9oZWFkZXIsICdGb3VydGgnLCAnTWlzc2luZycpCisKKyAgICBkZWYgdGVzdF9icm9rZW5fYmFzZTY0X3BheWxvYWQoc2VsZik6CisgICAgICAgIHggPSAnQXdEcDBQNy8veTZMd0tFQWNQYS82UT05JworICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnWydjb250ZW50LXR5cGUnXSA9ICdhdWRpby94LW1pZGknCisgICAgICAgIG1zZ1snY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddID0gJ2Jhc2U2NCcKKyAgICAgICAgbXNnLnNldF9wYXlsb2FkKHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwgeCkKKworCisKKyMgVGVzdCB0aGUgZW1haWwuZW5jb2RlcnMgbW9kdWxlCitjbGFzcyBUZXN0RW5jb2RlcnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2VuY29kZV9lbXB0eV9wYXlsb2FkKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZy5zZXRfY2hhcnNldCgndXMtYXNjaWknKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSwgJzdiaXQnKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9jdGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNSU1FVGV4dCgnaGVsbG8gd29ybGQnKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSwgJzdiaXQnKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9jdGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIFdpdGggbm8gZXhwbGljaXQgX2NoYXJzZXQgaXRzIHVzLWFzY2lpLCBhbmQgYWxsIGFyZSA3LWJpdAorICAgICAgICBtc2cgPSBNSU1FVGV4dCgnaGVsbG8gd29ybGQnKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSwgJzdiaXQnKQorICAgICAgICAjIFNpbWlsYXIsIGJ1dCB3aXRoIDgtYml0IGRhdGEKKyAgICAgICAgbXNnID0gTUlNRVRleHQoJ2hlbGxvIFx4Zjggd29ybGQnKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSwgJzhiaXQnKQorICAgICAgICAjIEFuZCBub3cgd2l0aCBhIGRpZmZlcmVudCBjaGFyc2V0CisgICAgICAgIG1zZyA9IE1JTUVUZXh0KCdoZWxsbyBceGY4IHdvcmxkJywgX2NoYXJzZXQ9J2lzby04ODU5LTEnKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSwgJ3F1b3RlZC1wcmludGFibGUnKQorCisKKworIyBUZXN0IGxvbmcgaGVhZGVyIHdyYXBwaW5nCitjbGFzcyBUZXN0TG9uZ0hlYWRlcnMoVGVzdEVtYWlsQmFzZSk6CisgICAgZGVmIHRlc3Rfc3BsaXRfbG9uZ19jb250aW51YXRpb24oc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoIiIiXAorU3ViamVjdDogYnVnIGRlbW9uc3RyYXRpb24KK1x0MTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzNDU2Nzg5NzEyMzQ1Njc4OTgxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkKK1x0bW9yZSB0ZXh0CisKK3Rlc3QKKyIiIikKKyAgICAgICAgc2ZwID0gU3RyaW5nSU8oKQorICAgICAgICBnID0gR2VuZXJhdG9yKHNmcCkKKyAgICAgICAgZy5mbGF0dGVuKG1zZykKKyAgICAgICAgZXEoc2ZwLmdldHZhbHVlKCksICIiIlwKK1N1YmplY3Q6IGJ1ZyBkZW1vbnN0cmF0aW9uCisgMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzNDU2Nzg5NzEyMzQ1Njc4OTgxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkKKyBtb3JlIHRleHQKKwordGVzdAorIiIiKQorCisgICAgZGVmIHRlc3RfYW5vdGhlcl9sb25nX2FsbW9zdF91bnNwbGl0dGFibGVfaGVhZGVyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBoc3RyID0gIiIiXAorYnVnIGRlbW9uc3RyYXRpb24KK1x0MTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkzMTIzNDU2Nzg5NDEyMzQ1Njc4OTUxMjM0NTY3ODk2MTIzNDU2Nzg5NzEyMzQ1Njc4OTgxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkxMTIzNDU2Nzg5MTEyMzQ1Njc4OTIxMjM0NTY3ODkKK1x0bW9yZSB0ZXh0IiIiCisgICAgICAgIGggPSBIZWFkZXIoaHN0ciwgY29udGludWF0aW9uX3dzPSdcdCcpCisgICAgICAgIGVxKGguZW5jb2RlKCksICIiIlwKK2J1ZyBkZW1vbnN0cmF0aW9uCitcdDEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyMzQ1Njc4OTcxMjM0NTY3ODk4MTEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MTEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5CitcdG1vcmUgdGV4dCIiIikKKyAgICAgICAgaCA9IEhlYWRlcihoc3RyKQorICAgICAgICBlcShoLmVuY29kZSgpLCAiIiJcCitidWcgZGVtb25zdHJhdGlvbgorIDEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MzEyMzQ1Njc4OTQxMjM0NTY3ODk1MTIzNDU2Nzg5NjEyMzQ1Njc4OTcxMjM0NTY3ODk4MTEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5MTEyMzQ1Njc4OTExMjM0NTY3ODkyMTIzNDU2Nzg5CisgbW9yZSB0ZXh0IiIiKQorCisgICAgZGVmIHRlc3RfbG9uZ19ub25zdHJpbmcoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIGcgPSBDaGFyc2V0KCJpc28tODg1OS0xIikKKyAgICAgICAgY3ogPSBDaGFyc2V0KCJpc28tODg1OS0yIikKKyAgICAgICAgdXRmOCA9IENoYXJzZXQoInV0Zi04IikKKyAgICAgICAgZ19oZWFkID0gIkRpZSBNaWV0ZXIgdHJldGVuIGhpZXIgZWluIHdlcmRlbiBtaXQgZWluZW0gRm9lcmRlcmJhbmQga29tZm9ydGFiZWwgZGVuIEtvcnJpZG9yIGVudGxhbmcsIGFuIHNceGZjZGxceGZjbmRpc2NoZW4gV2FuZGdlbVx4ZTRsZGVuIHZvcmJlaSwgZ2VnZW4gZGllIHJvdGllcmVuZGVuIEtsaW5nZW4gYmVmXHhmNnJkZXJ0LiAiCisgICAgICAgIGN6X2hlYWQgPSAiRmluYW5ceGU4bmkgbWV0cm9wb2xlIHNlIGhyb3V0aWx5IHBvZCB0bGFrZW0gamVqaWNoIGRceGY5dnRpcHUuLiAiCisgICAgICAgIHV0ZjhfaGVhZCA9IHUiXHU2YjYzXHU3OGJhXHUzMDZiXHU4YTAwXHUzMDQ2XHUzMDY4XHU3ZmZiXHU4YTMzXHUzMDZmXHUzMDU1XHUzMDhjXHUzMDY2XHUzMDQ0XHUzMDdlXHUzMDViXHUzMDkzXHUzMDAyXHU0ZTAwXHU5MGU4XHUzMDZmXHUzMGM5XHUzMGE0XHUzMGM0XHU4YTllXHUzMDY3XHUzMDU5XHUzMDRjXHUzMDAxXHUzMDQyXHUzMDY4XHUzMDZmXHUzMDY3XHUzMDVmXHUzMDg5XHUzMDgxXHUzMDY3XHUzMDU5XHUzMDAyXHU1YjlmXHU5NjliXHUzMDZiXHUzMDZmXHUzMDBjV2VubiBpc3QgZGFzIE51bnN0dWNrIGdpdCB1bmQgU2xvdGVybWV5ZXI/IEphISBCZWloZXJodW5kIGRhcyBPZGVyIGRpZSBGbGlwcGVyd2FsZHQgZ2Vyc3B1dC5cdTMwMGRcdTMwNjhcdThhMDBcdTMwNjNcdTMwNjZcdTMwNDRcdTMwN2VcdTMwNTlcdTMwMDIiLmVuY29kZSgidXRmLTgiKQorICAgICAgICBoID0gSGVhZGVyKGdfaGVhZCwgZywgaGVhZGVyX25hbWU9J1N1YmplY3QnKQorICAgICAgICBoLmFwcGVuZChjel9oZWFkLCBjeikKKyAgICAgICAgaC5hcHBlbmQodXRmOF9oZWFkLCB1dGY4KQorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnWydTdWJqZWN0J10gPSBoCisgICAgICAgIHNmcCA9IFN0cmluZ0lPKCkKKyAgICAgICAgZyA9IEdlbmVyYXRvcihzZnApCisgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgIGVxKHNmcC5nZXR2YWx1ZSgpLCAiIiJcCitTdWJqZWN0OiA9P2lzby04ODU5LTE/cT9EaWVfTWlldGVyX3RyZXRlbl9oaWVyX2Vpbl93ZXJkZW5fbWl0X2VpbmVtX0ZvZXJkPz0KKyA9P2lzby04ODU5LTE/cT9lcmJhbmRfa29tZm9ydGFiZWxfZGVuX0tvcnJpZG9yX2VudGxhbmc9MkNfYW5fcz1GQ2RsPUZDbmRpPz0KKyA9P2lzby04ODU5LTE/cT9zY2hlbl9XYW5kZ2VtPUU0bGRlbl92b3JiZWk9MkNfZ2VnZW5fZGllX3JvdGllcmVuZGVuX0tsaW5nPz0KKyA9P2lzby04ODU5LTE/cT9lbl9iZWY9RjZyZGVydD0yRV8/PSA9P2lzby04ODU5LTI/cT9GaW5hbj1FOG5pX21ldD89CisgPT9pc28tODg1OS0yP3E/cm9wb2xlX3NlX2hyb3V0aWx5X3BvZF90bGFrZW1famVqaWNoX2Q9Rjl2dGlwdT0yRT0yRV8/PQorID0/dXRmLTg/Yj81cTJqNTZLNjQ0R3I2S2lBNDRHRzQ0R281Nys3NktpejQ0R3Y0NEdWNDRLTTQ0R200NEdFPz0KKyA9P3V0Zi04P2I/NDRHKzQ0R2I0NEtUNDRDQzVMaUE2WU9vNDRHdjQ0T0o0NEtrNDRPRTZLcWU0NEduNDRHWjQ0R000NENCPz0KKyA9P3V0Zi04P2I/NDRHQzQ0R280NEd2NDRHbjQ0R2Y0NEtKNDRLQjQ0R240NEdaNDRDQzVhNmY2WnFiNDRHcjQ0R3Y0NENNPz0KKyA9P3V0Zi04P3E/V2Vubl9pc3RfZGFzX051bnN0dWNrX2dpdF91bmRfU2xvdGVybWV5ZXI9M0ZfSmEhX0JlaWhlcmh1bmRfZGFzPz0KKyA9P3V0Zi04P2I/SUU5a1pYSWdaR2xsSUVac2FYQndaWEozWVd4a2RDQm5aWEp6Y0hWMEx1T0FqZU9CcU9pb2dPT0Jvdz09Pz0KKyA9P3V0Zi04P2I/NDRHbTQ0R0U0NEcrNDRHWjQ0Q0M/PQorCisiIiIpCisgICAgICAgIGVxKGguZW5jb2RlKCksICIiIlwKKz0/aXNvLTg4NTktMT9xP0RpZV9NaWV0ZXJfdHJldGVuX2hpZXJfZWluX3dlcmRlbl9taXRfZWluZW1fRm9lcmQ/PQorID0/aXNvLTg4NTktMT9xP2VyYmFuZF9rb21mb3J0YWJlbF9kZW5fS29ycmlkb3JfZW50bGFuZz0yQ19hbl9zPUZDZGw9RkNuZGk/PQorID0/aXNvLTg4NTktMT9xP3NjaGVuX1dhbmRnZW09RTRsZGVuX3ZvcmJlaT0yQ19nZWdlbl9kaWVfcm90aWVyZW5kZW5fS2xpbmc/PQorID0/aXNvLTg4NTktMT9xP2VuX2JlZj1GNnJkZXJ0PTJFXz89ID0/aXNvLTg4NTktMj9xP0ZpbmFuPUU4bmlfbWV0Pz0KKyA9P2lzby04ODU5LTI/cT9yb3BvbGVfc2VfaHJvdXRpbHlfcG9kX3RsYWtlbV9qZWppY2hfZD1GOXZ0aXB1PTJFPTJFXz89CisgPT91dGYtOD9iPzVxMmo1Nks2NDRHcjZLaUE0NEdHNDRHbzU3Kzc2S2l6NDRHdjQ0R1Y0NEtNNDRHbTQ0R0U/PQorID0/dXRmLTg/Yj80NEcrNDRHYjQ0S1Q0NENDNUxpQTZZT280NEd2NDRPSjQ0S2s0NE9FNktxZTQ0R240NEdaNDRHTTQ0Q0I/PQorID0/dXRmLTg/Yj80NEdDNDRHbzQ0R3Y0NEduNDRHZjQ0S0o0NEtCNDRHbjQ0R1o0NENDNWE2ZjZacWI0NEdyNDRHdjQ0Q00/PQorID0/dXRmLTg/cT9XZW5uX2lzdF9kYXNfTnVuc3R1Y2tfZ2l0X3VuZF9TbG90ZXJtZXllcj0zRl9KYSFfQmVpaGVyaHVuZF9kYXM/PQorID0/dXRmLTg/Yj9JRTlrWlhJZ1pHbGxJRVpzYVhCd1pYSjNZV3hrZENCblpYSnpjSFYwTHVPQWplT0JxT2lvZ09PQm93PT0/PQorID0/dXRmLTg/Yj80NEdtNDRHRTQ0Rys0NEdaNDRDQz89IiIiKQorCisgICAgZGVmIHRlc3RfbG9uZ19oZWFkZXJfZW5jb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBoID0gSGVhZGVyKCd3YXNuaXBvb3A7IGdpcmFmZmVzPSJ2ZXJ5LWxvbmctbmVja2VkLWFuaW1hbHMiOyAnCisgICAgICAgICAgICAgICAgICAgJ3Nwb29nZT0ieXVtbXkiOyBoaXBwb3M9ImdhcmdhbnR1YW4iOyBtYXJzaG1hbGxvd3M9Imdvb2V5IicsCisgICAgICAgICAgICAgICAgICAgaGVhZGVyX25hbWU9J1gtRm9vYmFyLVNwb2luay1EZWZyb2JuaXQnKQorICAgICAgICBlcShoLmVuY29kZSgpLCAnJydcCit3YXNuaXBvb3A7IGdpcmFmZmVzPSJ2ZXJ5LWxvbmctbmVja2VkLWFuaW1hbHMiOworIHNwb29nZT0ieXVtbXkiOyBoaXBwb3M9ImdhcmdhbnR1YW4iOyBtYXJzaG1hbGxvd3M9Imdvb2V5IicnJykKKworICAgIGRlZiB0ZXN0X2xvbmdfaGVhZGVyX2VuY29kZV93aXRoX3RhYl9jb250aW51YXRpb24oc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIGggPSBIZWFkZXIoJ3dhc25pcG9vcDsgZ2lyYWZmZXM9InZlcnktbG9uZy1uZWNrZWQtYW5pbWFscyI7ICcKKyAgICAgICAgICAgICAgICAgICAnc3Bvb2dlPSJ5dW1teSI7IGhpcHBvcz0iZ2FyZ2FudHVhbiI7IG1hcnNobWFsbG93cz0iZ29vZXkiJywKKyAgICAgICAgICAgICAgICAgICBoZWFkZXJfbmFtZT0nWC1Gb29iYXItU3BvaW5rLURlZnJvYm5pdCcsCisgICAgICAgICAgICAgICAgICAgY29udGludWF0aW9uX3dzPSdcdCcpCisgICAgICAgIGVxKGguZW5jb2RlKCksICcnJ1wKK3dhc25pcG9vcDsgZ2lyYWZmZXM9InZlcnktbG9uZy1uZWNrZWQtYW5pbWFscyI7CitcdHNwb29nZT0ieXVtbXkiOyBoaXBwb3M9ImdhcmdhbnR1YW4iOyBtYXJzaG1hbGxvd3M9Imdvb2V5IicnJykKKworICAgIGRlZiB0ZXN0X2hlYWRlcl9zcGxpdHRlcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gTUlNRVRleHQoJycpCisgICAgICAgICMgSXQnZCBiZSBncmVhdCBpZiB3ZSBjb3VsZCB1c2UgYWRkX2hlYWRlcigpIGhlcmUsIGJ1dCB0aGF0IGRvZXNuJ3QKKyAgICAgICAgIyBndWFyYW50ZWUgYW4gb3JkZXIgb2YgdGhlIHBhcmFtZXRlcnMuCisgICAgICAgIG1zZ1snWC1Gb29iYXItU3BvaW5rLURlZnJvYm5pdCddID0gKAorICAgICAgICAgICAgJ3dhc25pcG9vcDsgZ2lyYWZmZXM9InZlcnktbG9uZy1uZWNrZWQtYW5pbWFscyI7ICcKKyAgICAgICAgICAgICdzcG9vZ2U9Inl1bW15IjsgaGlwcG9zPSJnYXJnYW50dWFuIjsgbWFyc2htYWxsb3dzPSJnb29leSInKQorICAgICAgICBzZnAgPSBTdHJpbmdJTygpCisgICAgICAgIGcgPSBHZW5lcmF0b3Ioc2ZwKQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICBlcShzZnAuZ2V0dmFsdWUoKSwgJycnXAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitYLUZvb2Jhci1TcG9pbmstRGVmcm9ibml0OiB3YXNuaXBvb3A7IGdpcmFmZmVzPSJ2ZXJ5LWxvbmctbmVja2VkLWFuaW1hbHMiOworIHNwb29nZT0ieXVtbXkiOyBoaXBwb3M9ImdhcmdhbnR1YW4iOyBtYXJzaG1hbGxvd3M9Imdvb2V5IgorCisnJycpCisKKyAgICBkZWYgdGVzdF9ub19zZW1pc19oZWFkZXJfc3BsaXR0ZXIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ0Zyb20nXSA9ICd0ZXN0QGRvbS5haW4nCisgICAgICAgIG1zZ1snUmVmZXJlbmNlcyddID0gU1BBQ0Uuam9pbihbJzwlZEBkb20uYWluPicgJSBpIGZvciBpIGluIHJhbmdlKDEwKV0pCisgICAgICAgIG1zZy5zZXRfcGF5bG9hZCgnVGVzdCcpCisgICAgICAgIHNmcCA9IFN0cmluZ0lPKCkKKyAgICAgICAgZyA9IEdlbmVyYXRvcihzZnApCisgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgIGVxKHNmcC5nZXR2YWx1ZSgpLCAiIiJcCitGcm9tOiB0ZXN0QGRvbS5haW4KK1JlZmVyZW5jZXM6IDwwQGRvbS5haW4+IDwxQGRvbS5haW4+IDwyQGRvbS5haW4+IDwzQGRvbS5haW4+IDw0QGRvbS5haW4+CisgPDVAZG9tLmFpbj4gPDZAZG9tLmFpbj4gPDdAZG9tLmFpbj4gPDhAZG9tLmFpbj4gPDlAZG9tLmFpbj4KKworVGVzdCIiIikKKworICAgIGRlZiB0ZXN0X25vX3NwbGl0X2xvbmdfaGVhZGVyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBoc3RyID0gJ1JlZmVyZW5jZXM6ICcgKyAneCcgKiA4MAorICAgICAgICBoID0gSGVhZGVyKGhzdHIsIGNvbnRpbnVhdGlvbl93cz0nXHQnKQorICAgICAgICBlcShoLmVuY29kZSgpLCAiIiJcCitSZWZlcmVuY2VzOiB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCIiIikKKworICAgIGRlZiB0ZXN0X3NwbGl0dGluZ19tdWx0aXBsZV9sb25nX2xpbmVzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBoc3RyID0gIiIiXAorZnJvbSBiYWJ5bG9uLnNvY2FsLXJhdmVzLm9yZyAobG9jYWxob3N0IFsxMjcuMC4wLjFdKTsgYnkgYmFieWxvbi5zb2NhbC1yYXZlcy5vcmcgKFBvc3RmaXgpIHdpdGggRVNNVFAgaWQgQjU3MEU1MUI4MTsgZm9yIDxtYWlsbWFuLWFkbWluQGJhYnlsb24uc29jYWwtcmF2ZXMub3JnPjsgU2F0LCAyIEZlYiAyMDAyIDE3OjAwOjA2IC0wODAwIChQU1QpCitcdGZyb20gYmFieWxvbi5zb2NhbC1yYXZlcy5vcmcgKGxvY2FsaG9zdCBbMTI3LjAuMC4xXSk7IGJ5IGJhYnlsb24uc29jYWwtcmF2ZXMub3JnIChQb3N0Zml4KSB3aXRoIEVTTVRQIGlkIEI1NzBFNTFCODE7IGZvciA8bWFpbG1hbi1hZG1pbkBiYWJ5bG9uLnNvY2FsLXJhdmVzLm9yZz47IFNhdCwgMiBGZWIgMjAwMiAxNzowMDowNiAtMDgwMCAoUFNUKQorXHRmcm9tIGJhYnlsb24uc29jYWwtcmF2ZXMub3JnIChsb2NhbGhvc3QgWzEyNy4wLjAuMV0pOyBieSBiYWJ5bG9uLnNvY2FsLXJhdmVzLm9yZyAoUG9zdGZpeCkgd2l0aCBFU01UUCBpZCBCNTcwRTUxQjgxOyBmb3IgPG1haWxtYW4tYWRtaW5AYmFieWxvbi5zb2NhbC1yYXZlcy5vcmc+OyBTYXQsIDIgRmViIDIwMDIgMTc6MDA6MDYgLTA4MDAgKFBTVCkKKyIiIgorICAgICAgICBoID0gSGVhZGVyKGhzdHIsIGNvbnRpbnVhdGlvbl93cz0nXHQnKQorICAgICAgICBlcShoLmVuY29kZSgpLCAiIiJcCitmcm9tIGJhYnlsb24uc29jYWwtcmF2ZXMub3JnIChsb2NhbGhvc3QgWzEyNy4wLjAuMV0pOworXHRieSBiYWJ5bG9uLnNvY2FsLXJhdmVzLm9yZyAoUG9zdGZpeCkgd2l0aCBFU01UUCBpZCBCNTcwRTUxQjgxOworXHRmb3IgPG1haWxtYW4tYWRtaW5AYmFieWxvbi5zb2NhbC1yYXZlcy5vcmc+OworXHRTYXQsIDIgRmViIDIwMDIgMTc6MDA6MDYgLTA4MDAgKFBTVCkKK1x0ZnJvbSBiYWJ5bG9uLnNvY2FsLXJhdmVzLm9yZyAobG9jYWxob3N0IFsxMjcuMC4wLjFdKTsKK1x0YnkgYmFieWxvbi5zb2NhbC1yYXZlcy5vcmcgKFBvc3RmaXgpIHdpdGggRVNNVFAgaWQgQjU3MEU1MUI4MTsKK1x0Zm9yIDxtYWlsbWFuLWFkbWluQGJhYnlsb24uc29jYWwtcmF2ZXMub3JnPjsKK1x0U2F0LCAyIEZlYiAyMDAyIDE3OjAwOjA2IC0wODAwIChQU1QpCitcdGZyb20gYmFieWxvbi5zb2NhbC1yYXZlcy5vcmcgKGxvY2FsaG9zdCBbMTI3LjAuMC4xXSk7CitcdGJ5IGJhYnlsb24uc29jYWwtcmF2ZXMub3JnIChQb3N0Zml4KSB3aXRoIEVTTVRQIGlkIEI1NzBFNTFCODE7CitcdGZvciA8bWFpbG1hbi1hZG1pbkBiYWJ5bG9uLnNvY2FsLXJhdmVzLm9yZz47CitcdFNhdCwgMiBGZWIgMjAwMiAxNzowMDowNiAtMDgwMCAoUFNUKSIiIikKKworICAgIGRlZiB0ZXN0X3NwbGl0dGluZ19maXJzdF9saW5lX29ubHlfaXNfbG9uZyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgaHN0ciA9ICIiIlwKK2Zyb20gbW9kZW1jYWJsZTA5My4xMzktMjAxLTI0LnF1ZS5tYy52aWRlb3Ryb24uY2EgKFsyNC4yMDEuMTM5LjkzXSBoZWxvPWN0aHVsaHUuZ2VyZy5jYSkKK1x0Ynkga3Jvbm9zLm1lbXMtZXhjaGFuZ2Uub3JnIHdpdGggZXNtdHAgKEV4aW0gNC4wNSkKK1x0aWQgMTdrNGg1LTAwMDM0aS0wMAorXHRmb3IgdGVzdEBtZW1zLWV4Y2hhbmdlLm9yZzsgV2VkLCAyOCBBdWcgMjAwMiAxMToyNToyMCAtMDQwMCIiIgorICAgICAgICBoID0gSGVhZGVyKGhzdHIsIG1heGxpbmVsZW49NzgsIGhlYWRlcl9uYW1lPSdSZWNlaXZlZCcsCisgICAgICAgICAgICAgICAgICAgY29udGludWF0aW9uX3dzPSdcdCcpCisgICAgICAgIGVxKGguZW5jb2RlKCksICIiIlwKK2Zyb20gbW9kZW1jYWJsZTA5My4xMzktMjAxLTI0LnF1ZS5tYy52aWRlb3Ryb24uY2EgKFsyNC4yMDEuMTM5LjkzXQorXHRoZWxvPWN0aHVsaHUuZ2VyZy5jYSkKK1x0Ynkga3Jvbm9zLm1lbXMtZXhjaGFuZ2Uub3JnIHdpdGggZXNtdHAgKEV4aW0gNC4wNSkKK1x0aWQgMTdrNGg1LTAwMDM0aS0wMAorXHRmb3IgdGVzdEBtZW1zLWV4Y2hhbmdlLm9yZzsgV2VkLCAyOCBBdWcgMjAwMiAxMToyNToyMCAtMDQwMCIiIikKKworICAgIGRlZiB0ZXN0X2xvbmdfOGJpdF9oZWFkZXIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBoID0gSGVhZGVyKCdCcml0aXNjaGUgUmVnaWVydW5nIGdpYnQnLCAnaXNvLTg4NTktMScsCisgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9uYW1lPSdTdWJqZWN0JykKKyAgICAgICAgaC5hcHBlbmQoJ2dyXHhmY25lcyBMaWNodCBmXHhmY3IgT2Zmc2hvcmUtV2luZGtyYWZ0cHJvamVrdGUnKQorICAgICAgICBtc2dbJ1N1YmplY3QnXSA9IGgKKyAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCAiIiJcCitTdWJqZWN0OiA9P2lzby04ODU5LTE/cT9Ccml0aXNjaGVfUmVnaWVydW5nX2dpYnQ/PSA9P2lzby04ODU5LTE/cT9ncj1GQ25lcz89CisgPT9pc28tODg1OS0xP3E/X0xpY2h0X2Y9RkNyX09mZnNob3JlLVdpbmRrcmFmdHByb2pla3RlPz0KKworIiIiKQorCisgICAgZGVmIHRlc3RfbG9uZ184Yml0X2hlYWRlcl9ub19jaGFyc2V0KHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnWydSZXBseS1UbyddID0gJ0JyaXRpc2NoZSBSZWdpZXJ1bmcgZ2lidCBnclx4ZmNuZXMgTGljaHQgZlx4ZmNyIE9mZnNob3JlLVdpbmRrcmFmdHByb2pla3RlIDxhLXZlcnktbG9uZy1hZGRyZXNzQGV4YW1wbGUuY29tPicKKyAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCAiIiJcCitSZXBseS1UbzogQnJpdGlzY2hlIFJlZ2llcnVuZyBnaWJ0IGdyXHhmY25lcyBMaWNodCBmXHhmY3IgT2Zmc2hvcmUtV2luZGtyYWZ0cHJvamVrdGUgPGEtdmVyeS1sb25nLWFkZHJlc3NAZXhhbXBsZS5jb20+CisKKyIiIikKKworICAgIGRlZiB0ZXN0X2xvbmdfdG9faGVhZGVyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICB0byA9ICciU29tZW9uZSBUZXN0ICNBIiA8c29tZW9uZUBlZWNzLnVtaWNoLmVkdT4sPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+LCJTb21lb25lIFRlc3QgI0IiIDxzb21lb25lQHVtaWNoLmVkdT4sICJTb21lb25lIFRlc3QgI0MiIDxzb21lb25lQGVlY3MudW1pY2guZWR1PiwgIlNvbWVvbmUgVGVzdCAjRCIgPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+JworICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnWydUbyddID0gdG8KKyAgICAgICAgZXEobXNnLmFzX3N0cmluZygwKSwgJycnXAorVG86ICJTb21lb25lIFRlc3QgI0EiIDxzb21lb25lQGVlY3MudW1pY2guZWR1PiwgPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+LAorICJTb21lb25lIFRlc3QgI0IiIDxzb21lb25lQHVtaWNoLmVkdT4sCisgIlNvbWVvbmUgVGVzdCAjQyIgPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+LAorICJTb21lb25lIFRlc3QgI0QiIDxzb21lb25lQGVlY3MudW1pY2guZWR1PgorCisnJycpCisKKyAgICBkZWYgdGVzdF9sb25nX2xpbmVfYWZ0ZXJfYXBwZW5kKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBzID0gJ1RoaXMgaXMgYW4gZXhhbXBsZSBvZiBzdHJpbmcgd2hpY2ggaGFzIGFsbW9zdCB0aGUgbGltaXQgb2YgaGVhZGVyIGxlbmd0aC4nCisgICAgICAgIGggPSBIZWFkZXIocykKKyAgICAgICAgaC5hcHBlbmQoJ0FkZCBhbm90aGVyIGxpbmUuJykKKyAgICAgICAgZXEoaC5lbmNvZGUoKSwgIiIiXAorVGhpcyBpcyBhbiBleGFtcGxlIG9mIHN0cmluZyB3aGljaCBoYXMgYWxtb3N0IHRoZSBsaW1pdCBvZiBoZWFkZXIgbGVuZ3RoLgorIEFkZCBhbm90aGVyIGxpbmUuIiIiKQorCisgICAgZGVmIHRlc3Rfc2hvcnRlcl9saW5lX3dpdGhfYXBwZW5kKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBzID0gJ1RoaXMgaXMgYSBzaG9ydGVyIGxpbmUuJworICAgICAgICBoID0gSGVhZGVyKHMpCisgICAgICAgIGguYXBwZW5kKCdBZGQgYW5vdGhlciBzZW50ZW5jZS4gKFN1cnByaXNlPyknKQorICAgICAgICBlcShoLmVuY29kZSgpLAorICAgICAgICAgICAnVGhpcyBpcyBhIHNob3J0ZXIgbGluZS4gQWRkIGFub3RoZXIgc2VudGVuY2UuIChTdXJwcmlzZT8pJykKKworICAgIGRlZiB0ZXN0X2xvbmdfZmllbGRfbmFtZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgZm4gPSAnWC1WZXJ5LVZlcnktVmVyeS1Mb25nLUhlYWRlci1OYW1lJworICAgICAgICBncyA9ICJEaWUgTWlldGVyIHRyZXRlbiBoaWVyIGVpbiB3ZXJkZW4gbWl0IGVpbmVtIEZvZXJkZXJiYW5kIGtvbWZvcnRhYmVsIGRlbiBLb3JyaWRvciBlbnRsYW5nLCBhbiBzXHhmY2RsXHhmY25kaXNjaGVuIFdhbmRnZW1ceGU0bGRlbiB2b3JiZWksIGdlZ2VuIGRpZSByb3RpZXJlbmRlbiBLbGluZ2VuIGJlZlx4ZjZyZGVydC4gIgorICAgICAgICBoID0gSGVhZGVyKGdzLCAnaXNvLTg4NTktMScsIGhlYWRlcl9uYW1lPWZuKQorICAgICAgICAjIEJBVzogdGhpcyBzZWVtcyBicm9rZW4gYmVjYXVzZSB0aGUgZmlyc3QgbGluZSBpcyB0b28gbG9uZworICAgICAgICBlcShoLmVuY29kZSgpLCAiIiJcCis9P2lzby04ODU5LTE/cT9EaWVfTWlldGVyX3RyZXRlbl9oaWVyXz89CisgPT9pc28tODg1OS0xP3E/ZWluX3dlcmRlbl9taXRfZWluZW1fRm9lcmRlcmJhbmRfa29tZm9ydGFiZWxfZGVuX0tvcnJpZG9yXz89CisgPT9pc28tODg1OS0xP3E/ZW50bGFuZz0yQ19hbl9zPUZDZGw9RkNuZGlzY2hlbl9XYW5kZ2VtPUU0bGRlbl92b3JiZWk9MkNfZz89CisgPT9pc28tODg1OS0xP3E/ZWdlbl9kaWVfcm90aWVyZW5kZW5fS2xpbmdlbl9iZWY9RjZyZGVydD0yRV8/PSIiIikKKworICAgIGRlZiB0ZXN0X2xvbmdfcmVjZWl2ZWRfaGVhZGVyKHNlbGYpOgorICAgICAgICBoID0gJ2Zyb20gRk9PLlRMRCAodml6d29ybGQuYWNsLmZvby50bGQgWzEyMy40NTIuNjc4LjldKSBieSBocm90aGdhci5sYS5tYXN0YWxlci5jb20gKHRtZGEtb2ZtaXBkKSB3aXRoIEVTTVRQOyBXZWQsIDA1IE1hciAyMDAzIDE4OjEwOjE4IC0wNzAwJworICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnWydSZWNlaXZlZC0xJ10gPSBIZWFkZXIoaCwgY29udGludWF0aW9uX3dzPSdcdCcpCisgICAgICAgIG1zZ1snUmVjZWl2ZWQtMiddID0gaAorICAgICAgICBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwobXNnLmFzX3N0cmluZygpLCAiIiJcCitSZWNlaXZlZC0xOiBmcm9tIEZPTy5UTEQgKHZpendvcmxkLmFjbC5mb28udGxkIFsxMjMuNDUyLjY3OC45XSkgYnkKK1x0aHJvdGhnYXIubGEubWFzdGFsZXIuY29tICh0bWRhLW9mbWlwZCkgd2l0aCBFU01UUDsKK1x0V2VkLCAwNSBNYXIgMjAwMyAxODoxMDoxOCAtMDcwMAorUmVjZWl2ZWQtMjogZnJvbSBGT08uVExEICh2aXp3b3JsZC5hY2wuZm9vLnRsZCBbMTIzLjQ1Mi42NzguOV0pIGJ5CisgaHJvdGhnYXIubGEubWFzdGFsZXIuY29tICh0bWRhLW9mbWlwZCkgd2l0aCBFU01UUDsKKyBXZWQsIDA1IE1hciAyMDAzIDE4OjEwOjE4IC0wNzAwCisKKyIiIikKKworICAgIGRlZiB0ZXN0X3N0cmluZ19oZWFkZXJpbnN0X2VxKHNlbGYpOgorICAgICAgICBoID0gJzwxNTk3NS4xNzkwMS4yMDcyNDAuNDE0NjA0QHNnaWdyaXR6bWFubjEubWF0aGVtYXRpay50dS1tdWVuY2hlbi5kZT4gKERhdmlkIEJyZW1uZXJcJ3MgbWVzc2FnZSBvZiAiVGh1LCA2IE1hciAyMDAzIDEzOjU4OjIxICswMTAwIiknCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ1JlY2VpdmVkJ10gPSBIZWFkZXIoaCwgaGVhZGVyX25hbWU9J1JlY2VpdmVkLTEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWF0aW9uX3dzPSdcdCcpCisgICAgICAgIG1zZ1snUmVjZWl2ZWQnXSA9IGgKKyAgICAgICAgc2VsZi5uZGlmZkFzc2VydEVxdWFsKG1zZy5hc19zdHJpbmcoKSwgIiIiXAorUmVjZWl2ZWQ6IDwxNTk3NS4xNzkwMS4yMDcyNDAuNDE0NjA0QHNnaWdyaXR6bWFubjEubWF0aGVtYXRpay50dS1tdWVuY2hlbi5kZT4KK1x0KERhdmlkIEJyZW1uZXIncyBtZXNzYWdlIG9mICJUaHUsIDYgTWFyIDIwMDMgMTM6NTg6MjEgKzAxMDAiKQorUmVjZWl2ZWQ6IDwxNTk3NS4xNzkwMS4yMDcyNDAuNDE0NjA0QHNnaWdyaXR6bWFubjEubWF0aGVtYXRpay50dS1tdWVuY2hlbi5kZT4KKyAoRGF2aWQgQnJlbW5lcidzIG1lc3NhZ2Ugb2YgIlRodSwgNiBNYXIgMjAwMyAxMzo1ODoyMSArMDEwMCIpCisKKyIiIikKKworICAgIGRlZiB0ZXN0X2xvbmdfdW5icmVha2FibGVfbGluZXNfd2l0aF9jb250aW51YXRpb24oc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICB0ID0gIiIiXAorIGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3QkFNQUFBQ2xMT1MwQUFBQUdGQk1WRVVBQUFBa0hpSmVSVUljR0JpOQorIGxvY1FEUTR6SnlrRkJBWEpmV0RqQUFBQ1lVbEVRVlI0bkYyVFFZL2pJQXlGYzZseWRsRzV4OE55cDFZNjl3ajFQTjJJNWd6cCIiIgorICAgICAgICBtc2dbJ0ZhY2UtMSddID0gdAorICAgICAgICBtc2dbJ0ZhY2UtMiddID0gSGVhZGVyKHQsIGhlYWRlcl9uYW1lPSdGYWNlLTInKQorICAgICAgICBlcShtc2cuYXNfc3RyaW5nKCksICIiIlwKK0ZhY2UtMTogaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdCQU1BQUFDbExPUzBBQUFBR0ZCTVZFVUFBQUFrSGlKZVJVSWNHQmk5CisgbG9jUURRNHpKeWtGQkFYSmZXRGpBQUFDWVVsRVFWUjRuRjJUUVkvaklBeUZjNmx5ZGxHNXg4TnlwMVk2OXdqMVBOMkk1Z3pwCitGYWNlLTI6IGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3QkFNQUFBQ2xMT1MwQUFBQUdGQk1WRVVBQUFBa0hpSmVSVUljR0JpOQorIGxvY1FEUTR6SnlrRkJBWEpmV0RqQUFBQ1lVbEVRVlI0bkYyVFFZL2pJQXlGYzZseWRsRzV4OE55cDFZNjl3ajFQTjJJNWd6cAorCisiIiIpCisKKyAgICBkZWYgdGVzdF9hbm90aGVyX2xvbmdfbXVsdGlsaW5lX2hlYWRlcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgbSA9ICcnJ1wKK1JlY2VpdmVkOiBmcm9tIHNpaW1hZ2UuY29tIChbMTcyLjI1LjEuM10pIGJ5IHppbWEuc2lsaWNvbmltYWdlLmNvbSB3aXRoIE1pY3Jvc29mdCBTTVRQU1ZDKDUuMC4yMTk1LjQ5MDUpOworIFdlZCwgMTYgT2N0IDIwMDIgMDc6NDE6MTEgLTA3MDAnJycKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBlcShtc2cuYXNfc3RyaW5nKCksICcnJ1wKK1JlY2VpdmVkOiBmcm9tIHNpaW1hZ2UuY29tIChbMTcyLjI1LjEuM10pIGJ5IHppbWEuc2lsaWNvbmltYWdlLmNvbSB3aXRoCisgTWljcm9zb2Z0IFNNVFBTVkMoNS4wLjIxOTUuNDkwNSk7IFdlZCwgMTYgT2N0IDIwMDIgMDc6NDE6MTEgLTA3MDAKKworJycnKQorCisgICAgZGVmIHRlc3RfbG9uZ19saW5lc193aXRoX2RpZmZlcmVudF9oZWFkZXIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIGggPSAiIiJcCitMaXN0LVVuc3Vic2NyaWJlOiA8aHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vc3BhbWFzc2Fzc2luLXRhbGs+LAorICAgICAgICA8bWFpbHRvOnNwYW1hc3Nhc3Npbi10YWxrLXJlcXVlc3RAbGlzdHMuc291cmNlZm9yZ2UubmV0P3N1YmplY3Q9dW5zdWJzY3JpYmU+IiIiCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ0xpc3QnXSA9IGgKKyAgICAgICAgbXNnWydMaXN0J10gPSBIZWFkZXIoaCwgaGVhZGVyX25hbWU9J0xpc3QnKQorICAgICAgICBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwobXNnLmFzX3N0cmluZygpLCAiIiJcCitMaXN0OiBMaXN0LVVuc3Vic2NyaWJlOiA8aHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vc3BhbWFzc2Fzc2luLXRhbGs+LAorIDxtYWlsdG86c3BhbWFzc2Fzc2luLXRhbGstcmVxdWVzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ/c3ViamVjdD11bnN1YnNjcmliZT4KK0xpc3Q6IExpc3QtVW5zdWJzY3JpYmU6IDxodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9zcGFtYXNzYXNzaW4tdGFsaz4sCisgPG1haWx0bzpzcGFtYXNzYXNzaW4tdGFsay1yZXF1ZXN0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD9zdWJqZWN0PXVuc3Vic2NyaWJlPgorCisiIiIpCisKKworCisjIFRlc3QgbWFuZ2xpbmcgb2YgIkZyb20gIiBsaW5lcyBpbiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UKK2NsYXNzIFRlc3RGcm9tTWFuZ2xpbmcodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5tc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgc2VsZi5tc2dbJ0Zyb20nXSA9ICdhYWFAYmJiLm9yZycKKyAgICAgICAgc2VsZi5tc2cuc2V0X3BheWxvYWQoIiIiXAorRnJvbSB0aGUgZGVzayBvZiBBLkEuQS46CitCbGFoIGJsYWggYmxhaAorIiIiKQorCisgICAgZGVmIHRlc3RfbWFuZ2xlZF9mcm9tKHNlbGYpOgorICAgICAgICBzID0gU3RyaW5nSU8oKQorICAgICAgICBnID0gR2VuZXJhdG9yKHMsIG1hbmdsZV9mcm9tXz1UcnVlKQorICAgICAgICBnLmZsYXR0ZW4oc2VsZi5tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCAiIiJcCitGcm9tOiBhYWFAYmJiLm9yZworCis+RnJvbSB0aGUgZGVzayBvZiBBLkEuQS46CitCbGFoIGJsYWggYmxhaAorIiIiKQorCisgICAgZGVmIHRlc3RfZG9udF9tYW5nbGVfZnJvbShzZWxmKToKKyAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgZyA9IEdlbmVyYXRvcihzLCBtYW5nbGVfZnJvbV89RmFsc2UpCisgICAgICAgIGcuZmxhdHRlbihzZWxmLm1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksICIiIlwKK0Zyb206IGFhYUBiYmIub3JnCisKK0Zyb20gdGhlIGRlc2sgb2YgQS5BLkEuOgorQmxhaCBibGFoIGJsYWgKKyIiIikKKworCisKKyMgVGVzdCB0aGUgYmFzaWMgTUlNRUF1ZGlvIGNsYXNzCitjbGFzcyBUZXN0TUlNRUF1ZGlvKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHdlIHBpY2sgdXAgdGhlIGF1ZGlvdGVzdC5hdSB0aGF0IGxpdmVzIGluIGVtYWlsL3Rlc3QvZGF0YS4KKyAgICAgICAgIyBJbiBQeXRob24sIHRoZXJlJ3MgYW4gYXVkaW90ZXN0LmF1IGxpdmluZyBpbiBMaWIvdGVzdCBidXQgdGhhdCBpc24ndAorICAgICAgICAjIGluY2x1ZGVkIGluIHNvbWUgYmluYXJ5IGRpc3Ryb3MgdGhhdCBkb24ndCBpbmNsdWRlIHRoZSB0ZXN0CisgICAgICAgICMgcGFja2FnZS4gIFRoZSB0cmFpbGluZyBlbXB0eSBzdHJpbmcgb24gdGhlIC5qb2luKCkgaXMgc2lnbmlmaWNhbnQKKyAgICAgICAgIyBzaW5jZSBmaW5kZmlsZSgpIHdpbGwgZG8gYSBkaXJuYW1lKCkuCisgICAgICAgIGRhdGFkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGxhbmRtYXJrKSwgJ2RhdGEnLCAnJykKKyAgICAgICAgZnAgPSBvcGVuKGZpbmRmaWxlKCdhdWRpb3Rlc3QuYXUnLCBkYXRhZGlyKSwgJ3JiJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fYXVkaW9kYXRhID0gZnAucmVhZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHNlbGYuX2F1ID0gTUlNRUF1ZGlvKHNlbGYuX2F1ZGlvZGF0YSkKKworICAgIGRlZiB0ZXN0X2d1ZXNzX21pbm9yX3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYXUuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnYXVkaW8vYmFzaWMnKQorCisgICAgZGVmIHRlc3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHBheWxvYWQgPSBzZWxmLl9hdS5nZXRfcGF5bG9hZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZTY0LmRlY29kZXN0cmluZyhwYXlsb2FkKSwgc2VsZi5fYXVkaW9kYXRhKQorCisgICAgZGVmIHRlc3RfY2hlY2tTZXRNaW5vcihzZWxmKToKKyAgICAgICAgYXUgPSBNSU1FQXVkaW8oc2VsZi5fYXVkaW9kYXRhLCAnZmlzaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXUuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnYXVkaW8vZmlzaCcpCisKKyAgICBkZWYgdGVzdF9hZGRfaGVhZGVyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCisgICAgICAgIHNlbGYuX2F1LmFkZF9oZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9J2F1ZGlvdGVzdC5hdScpCisgICAgICAgIGVxKHNlbGYuX2F1Wydjb250ZW50LWRpc3Bvc2l0aW9uJ10sCisgICAgICAgICAgICdhdHRhY2htZW50OyBmaWxlbmFtZT0iYXVkaW90ZXN0LmF1IicpCisgICAgICAgIGVxKHNlbGYuX2F1LmdldF9wYXJhbXMoaGVhZGVyPSdjb250ZW50LWRpc3Bvc2l0aW9uJyksCisgICAgICAgICAgIFsoJ2F0dGFjaG1lbnQnLCAnJyksICgnZmlsZW5hbWUnLCAnYXVkaW90ZXN0LmF1JyldKQorICAgICAgICBlcShzZWxmLl9hdS5nZXRfcGFyYW0oJ2ZpbGVuYW1lJywgaGVhZGVyPSdjb250ZW50LWRpc3Bvc2l0aW9uJyksCisgICAgICAgICAgICdhdWRpb3Rlc3QuYXUnKQorICAgICAgICBtaXNzaW5nID0gW10KKyAgICAgICAgZXEoc2VsZi5fYXUuZ2V0X3BhcmFtKCdhdHRhY2htZW50JywgaGVhZGVyPSdjb250ZW50LWRpc3Bvc2l0aW9uJyksICcnKQorICAgICAgICB1bmxlc3Moc2VsZi5fYXUuZ2V0X3BhcmFtKCdmb28nLCBmYWlsb2JqPW1pc3NpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyPSdjb250ZW50LWRpc3Bvc2l0aW9uJykgaXMgbWlzc2luZykKKyAgICAgICAgIyBUcnkgc29tZSBtaXNzaW5nIHN0dWZmCisgICAgICAgIHVubGVzcyhzZWxmLl9hdS5nZXRfcGFyYW0oJ2Zvb2JhcicsIG1pc3NpbmcpIGlzIG1pc3NpbmcpCisgICAgICAgIHVubGVzcyhzZWxmLl9hdS5nZXRfcGFyYW0oJ2F0dGFjaG1lbnQnLCBtaXNzaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcj0nZm9vYmFyJykgaXMgbWlzc2luZykKKworCisKKyMgVGVzdCB0aGUgYmFzaWMgTUlNRUltYWdlIGNsYXNzCitjbGFzcyBUZXN0TUlNRUltYWdlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGZwID0gb3BlbmZpbGUoJ1B5QmFubmVyMDQ4LmdpZicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2ltZ2RhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5faW0gPSBNSU1FSW1hZ2Uoc2VsZi5faW1nZGF0YSkKKworICAgIGRlZiB0ZXN0X2d1ZXNzX21pbm9yX3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5faW0uZ2V0X2NvbnRlbnRfdHlwZSgpLCAnaW1hZ2UvZ2lmJykKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgorICAgICAgICBwYXlsb2FkID0gc2VsZi5faW0uZ2V0X3BheWxvYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2U2NC5kZWNvZGVzdHJpbmcocGF5bG9hZCksIHNlbGYuX2ltZ2RhdGEpCisKKyAgICBkZWYgdGVzdF9jaGVja1NldE1pbm9yKHNlbGYpOgorICAgICAgICBpbSA9IE1JTUVJbWFnZShzZWxmLl9pbWdkYXRhLCAnZmlzaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW0uZ2V0X2NvbnRlbnRfdHlwZSgpLCAnaW1hZ2UvZmlzaCcpCisKKyAgICBkZWYgdGVzdF9hZGRfaGVhZGVyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCisgICAgICAgIHNlbGYuX2ltLmFkZF9oZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9J2Rpbmd1c2Zpc2guZ2lmJykKKyAgICAgICAgZXEoc2VsZi5faW1bJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSwKKyAgICAgICAgICAgJ2F0dGFjaG1lbnQ7IGZpbGVuYW1lPSJkaW5ndXNmaXNoLmdpZiInKQorICAgICAgICBlcShzZWxmLl9pbS5nZXRfcGFyYW1zKGhlYWRlcj0nY29udGVudC1kaXNwb3NpdGlvbicpLAorICAgICAgICAgICBbKCdhdHRhY2htZW50JywgJycpLCAoJ2ZpbGVuYW1lJywgJ2Rpbmd1c2Zpc2guZ2lmJyldKQorICAgICAgICBlcShzZWxmLl9pbS5nZXRfcGFyYW0oJ2ZpbGVuYW1lJywgaGVhZGVyPSdjb250ZW50LWRpc3Bvc2l0aW9uJyksCisgICAgICAgICAgICdkaW5ndXNmaXNoLmdpZicpCisgICAgICAgIG1pc3NpbmcgPSBbXQorICAgICAgICBlcShzZWxmLl9pbS5nZXRfcGFyYW0oJ2F0dGFjaG1lbnQnLCBoZWFkZXI9J2NvbnRlbnQtZGlzcG9zaXRpb24nKSwgJycpCisgICAgICAgIHVubGVzcyhzZWxmLl9pbS5nZXRfcGFyYW0oJ2ZvbycsIGZhaWxvYmo9bWlzc2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI9J2NvbnRlbnQtZGlzcG9zaXRpb24nKSBpcyBtaXNzaW5nKQorICAgICAgICAjIFRyeSBzb21lIG1pc3Npbmcgc3R1ZmYKKyAgICAgICAgdW5sZXNzKHNlbGYuX2ltLmdldF9wYXJhbSgnZm9vYmFyJywgbWlzc2luZykgaXMgbWlzc2luZykKKyAgICAgICAgdW5sZXNzKHNlbGYuX2ltLmdldF9wYXJhbSgnYXR0YWNobWVudCcsIG1pc3NpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyPSdmb29iYXInKSBpcyBtaXNzaW5nKQorCisKKworIyBUZXN0IHRoZSBiYXNpYyBNSU1FQXBwbGljYXRpb24gY2xhc3MKK2NsYXNzIFRlc3RNSU1FQXBwbGljYXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2hlYWRlcnMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNSU1FQXBwbGljYXRpb24oJ1x4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZicpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSwgJ2Jhc2U2NCcpCisKKyAgICBkZWYgdGVzdF9ib2R5KHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgYnl0ZXMgPSAnXHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmJworICAgICAgICBtc2cgPSBNSU1FQXBwbGljYXRpb24oYnl0ZXMpCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgpLCAnK3Z2OC9mNy8nKQorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBieXRlcykKKworICAgIGRlZiB0ZXN0X2JpbmFyeV9ib2R5X3dpdGhfZW5jb2RlXzdvcjhiaXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTcxNzEuCisgICAgICAgIGJ5dGVzZGF0YSA9IGInXHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmJworICAgICAgICBtc2cgPSBNSU1FQXBwbGljYXRpb24oYnl0ZXNkYXRhLCBfZW5jb2Rlcj1lbmNvZGVycy5lbmNvZGVfN29yOGJpdCkKKyAgICAgICAgIyBUcmVhdGVkIGFzIGEgc3RyaW5nLCB0aGlzIHdpbGwgYmUgaW52YWxpZCBjb2RlIHBvaW50cy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BheWxvYWQoKSwgYnl0ZXNkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksIGJ5dGVzZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSwgJzhiaXQnKQorICAgICAgICBzID0gU3RyaW5nSU8oKQorICAgICAgICBnID0gR2VuZXJhdG9yKHMpCisgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgIHdpcmVmb3JtID0gcy5nZXR2YWx1ZSgpCisgICAgICAgIG1zZzIgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKHdpcmVmb3JtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZCgpLCBieXRlc2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnMi5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksIGJ5dGVzZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cyWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10sICc4Yml0JykKKworICAgIGRlZiB0ZXN0X2JpbmFyeV9ib2R5X3dpdGhfZW5jb2RlX25vb3Aoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTY1NjQ6IFRoaXMgZG9lcyBub3QgcHJvZHVjZSBhbiBSRkMgdmFsaWQgbWVzc2FnZSwgc2luY2UgdG8gYmUKKyAgICAgICAgIyB2YWxpZCBpdCBzaG91bGQgaGF2ZSBhIENURSBvZiBiaW5hcnkuICBCdXQgdGhlIGJlbG93IHdvcmtzLCBhbmQgaXMKKyAgICAgICAgIyBkb2N1bWVudGVkIGFzIHdvcmtpbmcgdGhpcyB3YXkuCisgICAgICAgIGJ5dGVzZGF0YSA9IGInXHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmJworICAgICAgICBtc2cgPSBNSU1FQXBwbGljYXRpb24oYnl0ZXNkYXRhLCBfZW5jb2Rlcj1lbmNvZGVycy5lbmNvZGVfbm9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BheWxvYWQoKSwgYnl0ZXNkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksIGJ5dGVzZGF0YSkKKyAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgZyA9IEdlbmVyYXRvcihzKQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICB3aXJlZm9ybSA9IHMuZ2V0dmFsdWUoKQorICAgICAgICBtc2cyID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyh3aXJlZm9ybSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BheWxvYWQoKSwgYnl0ZXNkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZzIuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBieXRlc2RhdGEpCisKKworIyBUZXN0IHRoZSBiYXNpYyBNSU1FVGV4dCBjbGFzcworY2xhc3MgVGVzdE1JTUVUZXh0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX21zZyA9IE1JTUVUZXh0KCdoZWxsbyB0aGVyZScpCisKKyAgICBkZWYgdGVzdF90eXBlcyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICBlcShzZWxmLl9tc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIGVxKHNlbGYuX21zZy5nZXRfcGFyYW0oJ2NoYXJzZXQnKSwgJ3VzLWFzY2lpJykKKyAgICAgICAgbWlzc2luZyA9IFtdCisgICAgICAgIHVubGVzcyhzZWxmLl9tc2cuZ2V0X3BhcmFtKCdmb29iYXInLCBtaXNzaW5nKSBpcyBtaXNzaW5nKQorICAgICAgICB1bmxlc3Moc2VsZi5fbXNnLmdldF9wYXJhbSgnY2hhcnNldCcsIG1pc3NpbmcsIGhlYWRlcj0nZm9vYmFyJykKKyAgICAgICAgICAgICAgIGlzIG1pc3NpbmcpCisKKyAgICBkZWYgdGVzdF9wYXlsb2FkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX21zZy5nZXRfcGF5bG9hZCgpLCAnaGVsbG8gdGhlcmUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYuX21zZy5pc19tdWx0aXBhcnQoKSkKKworICAgIGRlZiB0ZXN0X2NoYXJzZXQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNSU1FVGV4dCgnaGVsbG8gdGhlcmUnLCBfY2hhcnNldD0ndXMtYXNjaWknKQorICAgICAgICBlcShtc2cuZ2V0X2NoYXJzZXQoKS5pbnB1dF9jaGFyc2V0LCAndXMtYXNjaWknKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHlwZSddLCAndGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiJykKKworCisKKyMgVGVzdCBjb21wbGljYXRlZCBtdWx0aXBhcnQvKiBtZXNzYWdlcworY2xhc3MgVGVzdE11bHRpcGFydChUZXN0RW1haWxCYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGZwID0gb3BlbmZpbGUoJ1B5QmFubmVyMDQ4LmdpZicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKworICAgICAgICBjb250YWluZXIgPSBNSU1FQmFzZSgnbXVsdGlwYXJ0JywgJ21peGVkJywgYm91bmRhcnk9J0JPVU5EQVJZJykKKyAgICAgICAgaW1hZ2UgPSBNSU1FSW1hZ2UoZGF0YSwgbmFtZT0nZGluZ3VzZmlzaC5naWYnKQorICAgICAgICBpbWFnZS5hZGRfaGVhZGVyKCdjb250ZW50LWRpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPSdkaW5ndXNmaXNoLmdpZicpCisgICAgICAgIGludHJvID0gTUlNRVRleHQoJycnXAorSGkgdGhlcmUsCisKK1RoaXMgaXMgdGhlIGRpbmd1cyBmaXNoLgorJycnKQorICAgICAgICBjb250YWluZXIuYXR0YWNoKGludHJvKQorICAgICAgICBjb250YWluZXIuYXR0YWNoKGltYWdlKQorICAgICAgICBjb250YWluZXJbJ0Zyb20nXSA9ICdCYXJyeSA8YmFycnlAZGlnaWNvb2wuY29tPicKKyAgICAgICAgY29udGFpbmVyWydUbyddID0gJ0Rpbmd1cyBMb3ZlcnMgPGNyYXZpbmRvZ3NAY3JhdmluZG9ncy5jb20+JworICAgICAgICBjb250YWluZXJbJ1N1YmplY3QnXSA9ICdIZXJlIGlzIHlvdXIgZGluZ3VzIGZpc2gnCisKKyAgICAgICAgbm93ID0gOTg3ODA5NzAyLjU0ODQ4NTk5CisgICAgICAgIHRpbWV0dXBsZSA9IHRpbWUubG9jYWx0aW1lKG5vdykKKyAgICAgICAgaWYgdGltZXR1cGxlWy0xXSA9PSAwOgorICAgICAgICAgICAgdHpzZWNzID0gdGltZS50aW1lem9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHpzZWNzID0gdGltZS5hbHR6b25lCisgICAgICAgIGlmIHR6c2VjcyA+IDA6CisgICAgICAgICAgICBzaWduID0gJy0nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaWduID0gJysnCisgICAgICAgIHR6b2Zmc2V0ID0gJyAlcyUwNGQnICUgKHNpZ24sIHR6c2VjcyAvLyAzNikKKyAgICAgICAgY29udGFpbmVyWydEYXRlJ10gPSB0aW1lLnN0cmZ0aW1lKAorICAgICAgICAgICAgJyVhLCAlZCAlYiAlWSAlSDolTTolUycsCisgICAgICAgICAgICB0aW1lLmxvY2FsdGltZShub3cpKSArIHR6b2Zmc2V0CisgICAgICAgIHNlbGYuX21zZyA9IGNvbnRhaW5lcgorICAgICAgICBzZWxmLl9pbSA9IGltYWdlCisgICAgICAgIHNlbGYuX3R4dCA9IGludHJvCisKKyAgICBkZWYgdGVzdF9oaWVyYXJjaHkoc2VsZik6CisgICAgICAgICMgY29udmVuaWVuY2UKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICByYWlzZXMgPSBzZWxmLmFzc2VydFJhaXNlcworICAgICAgICAjIHRlc3RzCisgICAgICAgIG0gPSBzZWxmLl9tc2cKKyAgICAgICAgdW5sZXNzKG0uaXNfbXVsdGlwYXJ0KCkpCisgICAgICAgIGVxKG0uZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbXVsdGlwYXJ0L21peGVkJykKKyAgICAgICAgZXEobGVuKG0uZ2V0X3BheWxvYWQoKSksIDIpCisgICAgICAgIHJhaXNlcyhJbmRleEVycm9yLCBtLmdldF9wYXlsb2FkLCAyKQorICAgICAgICBtMCA9IG0uZ2V0X3BheWxvYWQoMCkKKyAgICAgICAgbTEgPSBtLmdldF9wYXlsb2FkKDEpCisgICAgICAgIHVubGVzcyhtMCBpcyBzZWxmLl90eHQpCisgICAgICAgIHVubGVzcyhtMSBpcyBzZWxmLl9pbSkKKyAgICAgICAgZXEobS5nZXRfcGF5bG9hZCgpLCBbbTAsIG0xXSkKKyAgICAgICAgdW5sZXNzKG5vdCBtMC5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgdW5sZXNzKG5vdCBtMS5pc19tdWx0aXBhcnQoKSkKKworICAgIGRlZiB0ZXN0X2VtcHR5X211bHRpcGFydF9pZGVtcG90ZW50KHNlbGYpOgorICAgICAgICB0ZXh0ID0gIiIiXAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJCT1VOREFSWSIKK01JTUUtVmVyc2lvbjogMS4wCitTdWJqZWN0OiBBIHN1YmplY3QKK1RvOiBhcGVyc29uQGRvbS5haW4KK0Zyb206IGJwZXJzb25AZG9tLmFpbgorCisKKy0tQk9VTkRBUlkKKworCistLUJPVU5EQVJZLS0KKyIiIgorICAgICAgICBtc2cgPSBQYXJzZXIoKS5wYXJzZXN0cih0ZXh0KQorICAgICAgICBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwodGV4dCwgbXNnLmFzX3N0cmluZygpKQorCisgICAgZGVmIHRlc3Rfbm9fcGFydHNfaW5fYV9tdWx0aXBhcnRfd2l0aF9ub25lX2VwaWxvZ3VlKHNlbGYpOgorICAgICAgICBvdXRlciA9IE1JTUVCYXNlKCdtdWx0aXBhcnQnLCAnbWl4ZWQnKQorICAgICAgICBvdXRlclsnU3ViamVjdCddID0gJ0Egc3ViamVjdCcKKyAgICAgICAgb3V0ZXJbJ1RvJ10gPSAnYXBlcnNvbkBkb20uYWluJworICAgICAgICBvdXRlclsnRnJvbSddID0gJ2JwZXJzb25AZG9tLmFpbicKKyAgICAgICAgb3V0ZXIuc2V0X2JvdW5kYXJ5KCdCT1VOREFSWScpCisgICAgICAgIHNlbGYubmRpZmZBc3NlcnRFcXVhbChvdXRlci5hc19zdHJpbmcoKSwgJycnXAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJCT1VOREFSWSIKK01JTUUtVmVyc2lvbjogMS4wCitTdWJqZWN0OiBBIHN1YmplY3QKK1RvOiBhcGVyc29uQGRvbS5haW4KK0Zyb206IGJwZXJzb25AZG9tLmFpbgorCistLUJPVU5EQVJZCisKKy0tQk9VTkRBUlktLScnJykKKworICAgIGRlZiB0ZXN0X25vX3BhcnRzX2luX2FfbXVsdGlwYXJ0X3dpdGhfZW1wdHlfZXBpbG9ndWUoc2VsZik6CisgICAgICAgIG91dGVyID0gTUlNRUJhc2UoJ211bHRpcGFydCcsICdtaXhlZCcpCisgICAgICAgIG91dGVyWydTdWJqZWN0J10gPSAnQSBzdWJqZWN0JworICAgICAgICBvdXRlclsnVG8nXSA9ICdhcGVyc29uQGRvbS5haW4nCisgICAgICAgIG91dGVyWydGcm9tJ10gPSAnYnBlcnNvbkBkb20uYWluJworICAgICAgICBvdXRlci5wcmVhbWJsZSA9ICcnCisgICAgICAgIG91dGVyLmVwaWxvZ3VlID0gJycKKyAgICAgICAgb3V0ZXIuc2V0X2JvdW5kYXJ5KCdCT1VOREFSWScpCisgICAgICAgIHNlbGYubmRpZmZBc3NlcnRFcXVhbChvdXRlci5hc19zdHJpbmcoKSwgJycnXAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJCT1VOREFSWSIKK01JTUUtVmVyc2lvbjogMS4wCitTdWJqZWN0OiBBIHN1YmplY3QKK1RvOiBhcGVyc29uQGRvbS5haW4KK0Zyb206IGJwZXJzb25AZG9tLmFpbgorCisKKy0tQk9VTkRBUlkKKworLS1CT1VOREFSWS0tCisnJycpCisKKyAgICBkZWYgdGVzdF9vbmVfcGFydF9pbl9hX211bHRpcGFydChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgb3V0ZXIgPSBNSU1FQmFzZSgnbXVsdGlwYXJ0JywgJ21peGVkJykKKyAgICAgICAgb3V0ZXJbJ1N1YmplY3QnXSA9ICdBIHN1YmplY3QnCisgICAgICAgIG91dGVyWydUbyddID0gJ2FwZXJzb25AZG9tLmFpbicKKyAgICAgICAgb3V0ZXJbJ0Zyb20nXSA9ICdicGVyc29uQGRvbS5haW4nCisgICAgICAgIG91dGVyLnNldF9ib3VuZGFyeSgnQk9VTkRBUlknKQorICAgICAgICBtc2cgPSBNSU1FVGV4dCgnaGVsbG8gd29ybGQnKQorICAgICAgICBvdXRlci5hdHRhY2gobXNnKQorICAgICAgICBlcShvdXRlci5hc19zdHJpbmcoKSwgJycnXAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJCT1VOREFSWSIKK01JTUUtVmVyc2lvbjogMS4wCitTdWJqZWN0OiBBIHN1YmplY3QKK1RvOiBhcGVyc29uQGRvbS5haW4KK0Zyb206IGJwZXJzb25AZG9tLmFpbgorCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworaGVsbG8gd29ybGQKKy0tQk9VTkRBUlktLScnJykKKworICAgIGRlZiB0ZXN0X3NlcV9wYXJ0c19pbl9hX211bHRpcGFydF93aXRoX2VtcHR5X3ByZWFtYmxlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBvdXRlciA9IE1JTUVCYXNlKCdtdWx0aXBhcnQnLCAnbWl4ZWQnKQorICAgICAgICBvdXRlclsnU3ViamVjdCddID0gJ0Egc3ViamVjdCcKKyAgICAgICAgb3V0ZXJbJ1RvJ10gPSAnYXBlcnNvbkBkb20uYWluJworICAgICAgICBvdXRlclsnRnJvbSddID0gJ2JwZXJzb25AZG9tLmFpbicKKyAgICAgICAgb3V0ZXIucHJlYW1ibGUgPSAnJworICAgICAgICBtc2cgPSBNSU1FVGV4dCgnaGVsbG8gd29ybGQnKQorICAgICAgICBvdXRlci5hdHRhY2gobXNnKQorICAgICAgICBvdXRlci5zZXRfYm91bmRhcnkoJ0JPVU5EQVJZJykKKyAgICAgICAgZXEob3V0ZXIuYXNfc3RyaW5nKCksICcnJ1wKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iQk9VTkRBUlkiCitNSU1FLVZlcnNpb246IDEuMAorU3ViamVjdDogQSBzdWJqZWN0CitUbzogYXBlcnNvbkBkb20uYWluCitGcm9tOiBicGVyc29uQGRvbS5haW4KKworCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworaGVsbG8gd29ybGQKKy0tQk9VTkRBUlktLScnJykKKworCisgICAgZGVmIHRlc3Rfc2VxX3BhcnRzX2luX2FfbXVsdGlwYXJ0X3dpdGhfbm9uZV9wcmVhbWJsZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgb3V0ZXIgPSBNSU1FQmFzZSgnbXVsdGlwYXJ0JywgJ21peGVkJykKKyAgICAgICAgb3V0ZXJbJ1N1YmplY3QnXSA9ICdBIHN1YmplY3QnCisgICAgICAgIG91dGVyWydUbyddID0gJ2FwZXJzb25AZG9tLmFpbicKKyAgICAgICAgb3V0ZXJbJ0Zyb20nXSA9ICdicGVyc29uQGRvbS5haW4nCisgICAgICAgIG91dGVyLnByZWFtYmxlID0gTm9uZQorICAgICAgICBtc2cgPSBNSU1FVGV4dCgnaGVsbG8gd29ybGQnKQorICAgICAgICBvdXRlci5hdHRhY2gobXNnKQorICAgICAgICBvdXRlci5zZXRfYm91bmRhcnkoJ0JPVU5EQVJZJykKKyAgICAgICAgZXEob3V0ZXIuYXNfc3RyaW5nKCksICcnJ1wKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iQk9VTkRBUlkiCitNSU1FLVZlcnNpb246IDEuMAorU3ViamVjdDogQSBzdWJqZWN0CitUbzogYXBlcnNvbkBkb20uYWluCitGcm9tOiBicGVyc29uQGRvbS5haW4KKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKK2hlbGxvIHdvcmxkCistLUJPVU5EQVJZLS0nJycpCisKKworICAgIGRlZiB0ZXN0X3NlcV9wYXJ0c19pbl9hX211bHRpcGFydF93aXRoX25vbmVfZXBpbG9ndWUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIG91dGVyID0gTUlNRUJhc2UoJ211bHRpcGFydCcsICdtaXhlZCcpCisgICAgICAgIG91dGVyWydTdWJqZWN0J10gPSAnQSBzdWJqZWN0JworICAgICAgICBvdXRlclsnVG8nXSA9ICdhcGVyc29uQGRvbS5haW4nCisgICAgICAgIG91dGVyWydGcm9tJ10gPSAnYnBlcnNvbkBkb20uYWluJworICAgICAgICBvdXRlci5lcGlsb2d1ZSA9IE5vbmUKKyAgICAgICAgbXNnID0gTUlNRVRleHQoJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgb3V0ZXIuYXR0YWNoKG1zZykKKyAgICAgICAgb3V0ZXIuc2V0X2JvdW5kYXJ5KCdCT1VOREFSWScpCisgICAgICAgIGVxKG91dGVyLmFzX3N0cmluZygpLCAnJydcCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9IkJPVU5EQVJZIgorTUlNRS1WZXJzaW9uOiAxLjAKK1N1YmplY3Q6IEEgc3ViamVjdAorVG86IGFwZXJzb25AZG9tLmFpbgorRnJvbTogYnBlcnNvbkBkb20uYWluCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCitoZWxsbyB3b3JsZAorLS1CT1VOREFSWS0tJycnKQorCisKKyAgICBkZWYgdGVzdF9zZXFfcGFydHNfaW5fYV9tdWx0aXBhcnRfd2l0aF9lbXB0eV9lcGlsb2d1ZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgb3V0ZXIgPSBNSU1FQmFzZSgnbXVsdGlwYXJ0JywgJ21peGVkJykKKyAgICAgICAgb3V0ZXJbJ1N1YmplY3QnXSA9ICdBIHN1YmplY3QnCisgICAgICAgIG91dGVyWydUbyddID0gJ2FwZXJzb25AZG9tLmFpbicKKyAgICAgICAgb3V0ZXJbJ0Zyb20nXSA9ICdicGVyc29uQGRvbS5haW4nCisgICAgICAgIG91dGVyLmVwaWxvZ3VlID0gJycKKyAgICAgICAgbXNnID0gTUlNRVRleHQoJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgb3V0ZXIuYXR0YWNoKG1zZykKKyAgICAgICAgb3V0ZXIuc2V0X2JvdW5kYXJ5KCdCT1VOREFSWScpCisgICAgICAgIGVxKG91dGVyLmFzX3N0cmluZygpLCAnJydcCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9IkJPVU5EQVJZIgorTUlNRS1WZXJzaW9uOiAxLjAKK1N1YmplY3Q6IEEgc3ViamVjdAorVG86IGFwZXJzb25AZG9tLmFpbgorRnJvbTogYnBlcnNvbkBkb20uYWluCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCitoZWxsbyB3b3JsZAorLS1CT1VOREFSWS0tCisnJycpCisKKworICAgIGRlZiB0ZXN0X3NlcV9wYXJ0c19pbl9hX211bHRpcGFydF93aXRoX25sX2VwaWxvZ3VlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBvdXRlciA9IE1JTUVCYXNlKCdtdWx0aXBhcnQnLCAnbWl4ZWQnKQorICAgICAgICBvdXRlclsnU3ViamVjdCddID0gJ0Egc3ViamVjdCcKKyAgICAgICAgb3V0ZXJbJ1RvJ10gPSAnYXBlcnNvbkBkb20uYWluJworICAgICAgICBvdXRlclsnRnJvbSddID0gJ2JwZXJzb25AZG9tLmFpbicKKyAgICAgICAgb3V0ZXIuZXBpbG9ndWUgPSAnXG4nCisgICAgICAgIG1zZyA9IE1JTUVUZXh0KCdoZWxsbyB3b3JsZCcpCisgICAgICAgIG91dGVyLmF0dGFjaChtc2cpCisgICAgICAgIG91dGVyLnNldF9ib3VuZGFyeSgnQk9VTkRBUlknKQorICAgICAgICBlcShvdXRlci5hc19zdHJpbmcoKSwgJycnXAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJCT1VOREFSWSIKK01JTUUtVmVyc2lvbjogMS4wCitTdWJqZWN0OiBBIHN1YmplY3QKK1RvOiBhcGVyc29uQGRvbS5haW4KK0Zyb206IGJwZXJzb25AZG9tLmFpbgorCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworaGVsbG8gd29ybGQKKy0tQk9VTkRBUlktLQorCisnJycpCisKKyAgICBkZWYgdGVzdF9tZXNzYWdlX2V4dGVybmFsX2JvZHkoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18zNi50eHQnKQorICAgICAgICBlcShsZW4obXNnLmdldF9wYXlsb2FkKCkpLCAyKQorICAgICAgICBtc2cxID0gbXNnLmdldF9wYXlsb2FkKDEpCisgICAgICAgIGVxKG1zZzEuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbXVsdGlwYXJ0L2FsdGVybmF0aXZlJykKKyAgICAgICAgZXEobGVuKG1zZzEuZ2V0X3BheWxvYWQoKSksIDIpCisgICAgICAgIGZvciBzdWJwYXJ0IGluIG1zZzEuZ2V0X3BheWxvYWQoKToKKyAgICAgICAgICAgIGVxKHN1YnBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9leHRlcm5hbC1ib2R5JykKKyAgICAgICAgICAgIGVxKGxlbihzdWJwYXJ0LmdldF9wYXlsb2FkKCkpLCAxKQorICAgICAgICAgICAgc3Vic3VicGFydCA9IHN1YnBhcnQuZ2V0X3BheWxvYWQoMCkKKyAgICAgICAgICAgIGVxKHN1YnN1YnBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisKKyAgICBkZWYgdGVzdF9kb3VibGVfYm91bmRhcnkoc2VsZik6CisgICAgICAgICMgbXNnXzM3LnR4dCBpcyBhIG11bHRpcGFydCB0aGF0IGNvbnRhaW5zIHR3byBkYXNoLWJvdW5kYXJ5J3MgaW4gYQorICAgICAgICAjIHJvdy4gIE91ciBpbnRlcnByZXRhdGlvbiBvZiBSRkMgMjA0NiBjYWxscyBmb3IgaWdub3JpbmcgdGhlIHNlY29uZAorICAgICAgICAjIGFuZCBzdWJzZXF1ZW50IGJvdW5kYXJpZXMuCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzM3LnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1zZy5nZXRfcGF5bG9hZCgpKSwgMykKKworICAgIGRlZiB0ZXN0X25lc3RlZF9pbm5lcl9jb250YWluc19vdXRlcl9ib3VuZGFyeShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgIyBtc2dfMzgudHh0IGhhcyBhbiBpbm5lciBwYXJ0IHRoYXQgY29udGFpbnMgb3V0ZXIgYm91bmRhcmllcy4gIE15CisgICAgICAgICMgaW50ZXJwcmV0YXRpb24gb2YgUkZDIDIwNDYgKGJhc2VkIG9uIHNlY3Rpb25zIDUuMSBhbmQgNS4xLjIpIHNheQorICAgICAgICAjIHRoZXNlIGFyZSBpbGxlZ2FsIGFuZCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgdW50ZXJtaW5hdGVkIGlubmVyCisgICAgICAgICMgcGFydHMuCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzM4LnR4dCcpCisgICAgICAgIHNmcCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaXRlcmF0b3JzLl9zdHJ1Y3R1cmUobXNnLCBzZnApCisgICAgICAgIGVxKHNmcC5nZXR2YWx1ZSgpLCAiIiJcCittdWx0aXBhcnQvbWl4ZWQKKyAgICBtdWx0aXBhcnQvbWl4ZWQKKyAgICAgICAgbXVsdGlwYXJ0L2FsdGVybmF0aXZlCisgICAgICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICB0ZXh0L3BsYWluCisgICAgdGV4dC9wbGFpbgorIiIiKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX3dpdGhfc2FtZV9ib3VuZGFyeShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgIyBtc2cgMzkudHh0IGlzIHNpbWlsYXJseSBldmlsIGluIHRoYXQgaXQncyBnb3QgaW5uZXIgcGFydHMgdGhhdCB1c2UKKyAgICAgICAgIyB0aGUgc2FtZSBib3VuZGFyeSBhcyBvdXRlciBwYXJ0cy4gIEFnYWluLCBJIGJlbGlldmUgdGhlIHdheSB0aGlzIGlzCisgICAgICAgICMgcGFyc2VkIGlzIGNsb3Nlc3QgdG8gdGhlIHNwaXJpdCBvZiBSRkMgMjA0NgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18zOS50eHQnKQorICAgICAgICBzZnAgPSBTdHJpbmdJTygpCisgICAgICAgIGl0ZXJhdG9ycy5fc3RydWN0dXJlKG1zZywgc2ZwKQorICAgICAgICBlcShzZnAuZ2V0dmFsdWUoKSwgIiIiXAorbXVsdGlwYXJ0L21peGVkCisgICAgbXVsdGlwYXJ0L21peGVkCisgICAgICAgIG11bHRpcGFydC9hbHRlcm5hdGl2ZQorICAgICAgICBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KKyAgICAgICAgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCisgICAgdGV4dC9wbGFpbgorIiIiKQorCisgICAgZGVmIHRlc3RfYm91bmRhcnlfaW5fbm9uX211bHRpcGFydChzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfNDAudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuYXNfc3RyaW5nKCksICcnJ1wKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgYm91bmRhcnk9Ii0tOTYxMjg0MjM2NTUyNTIyMjY5IgorCistLS0tOTYxMjg0MjM2NTUyNTIyMjY5CitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdCaXQKKworPGh0bWw+PC9odG1sPgorCistLS0tOTYxMjg0MjM2NTUyNTIyMjY5LS0KKycnJykKKworICAgIGRlZiB0ZXN0X2JvdW5kYXJ5X3dpdGhfbGVhZGluZ19zcGFjZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoJycnXAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iICAgIFhYWFgiCisKKy0tICAgIFhYWFgKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisKKy0tICAgIFhYWFgKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCistLSAgICBYWFhYLS0KKycnJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgZXEobXNnLmdldF9ib3VuZGFyeSgpLCAnICAgIFhYWFgnKQorICAgICAgICBlcShsZW4obXNnLmdldF9wYXlsb2FkKCkpLCAyKQorCisgICAgZGVmIHRlc3RfYm91bmRhcnlfd2l0aG91dF90cmFpbGluZ19uZXdsaW5lKHNlbGYpOgorICAgICAgICBtID0gUGFyc2VyKCkucGFyc2VzdHIoIiIiXAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT09PT09PT09PT09PT0wMDEyMzk0MTY0PT0iCitNSU1FLVZlcnNpb246IDEuMAorCistLT09PT09PT09PT09PT09PTAwMTIzOTQxNjQ9PQorQ29udGVudC1UeXBlOiBpbWFnZS9maWxlMS5qcGcKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworWVhOa1pnPT0KKy0tPT09PT09PT09PT09PT09MDAxMjM5NDE2ND09LS0iIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZCgwKS5nZXRfcGF5bG9hZCgpLCAnWVhOa1pnPT0nKQorCisKKworIyBUZXN0IHNvbWUgYmFkbHkgZm9ybWF0dGVkIG1lc3NhZ2VzCitjbGFzcyBUZXN0Tm9uQ29uZm9ybWFudChUZXN0RW1haWxCYXNlKToKKyAgICBkZWYgdGVzdF9wYXJzZV9taXNzaW5nX21pbm9yX3R5cGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18xNC50eHQnKQorICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpLCAndGV4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9zdWJ0eXBlKCksICdwbGFpbicpCisKKyAgICBkZWYgdGVzdF9zYW1lX2JvdW5kYXJ5X2lubmVyX291dGVyKHNlbGYpOgorICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMTUudHh0JykKKyAgICAgICAgIyBYWFggV2UgY2FuIHByb2JhYmx5IGV2ZW50dWFsbHkgZG8gYmV0dGVyCisgICAgICAgIGlubmVyID0gbXNnLmdldF9wYXlsb2FkKDApCisgICAgICAgIHVubGVzcyhoYXNhdHRyKGlubmVyLCAnZGVmZWN0cycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpbm5lci5kZWZlY3RzKSwgMSkKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UoaW5uZXIuZGVmZWN0c1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLlN0YXJ0Qm91bmRhcnlOb3RGb3VuZERlZmVjdCkpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBhcnRfbm9fYm91bmRhcnkoc2VsZik6CisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18yNS50eHQnKQorICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShtc2cuZ2V0X3BheWxvYWQoKSwgc3RyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obXNnLmRlZmVjdHMpLCAyKQorICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShtc2cuZGVmZWN0c1swXSwgZXJyb3JzLk5vQm91bmRhcnlJbk11bHRpcGFydERlZmVjdCkpCisgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKG1zZy5kZWZlY3RzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuTXVsdGlwYXJ0SW52YXJpYW50VmlvbGF0aW9uRGVmZWN0KSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfY29udGVudF90eXBlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbmVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICAjIFJGQyAyMDQ1LCAkNS4yIHNheXMgaW52YWxpZCB5aWVsZHMgdGV4dC9wbGFpbgorICAgICAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQnCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpLCAndGV4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9zdWJ0eXBlKCksICdwbGFpbicpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgIyBDbGVhciB0aGUgb2xkIHZhbHVlIGFuZCB0cnkgc29tZXRoaW5nIC9yZWFsbHkvIGludmFsaWQKKyAgICAgICAgZGVsIG1zZ1snY29udGVudC10eXBlJ10KKyAgICAgICAgbXNnWydDb250ZW50LVR5cGUnXSA9ICdmb28nCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpLCAndGV4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9zdWJ0eXBlKCksICdwbGFpbicpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgIyBTdGlsbCwgbWFrZSBzdXJlIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaWRlbXBvdGVudGx5IGdlbmVyYXRlZAorICAgICAgICBzID0gU3RyaW5nSU8oKQorICAgICAgICBnID0gR2VuZXJhdG9yKHMpCisgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgIG5lcShzLmdldHZhbHVlKCksICdDb250ZW50LVR5cGU6IGZvb1xuXG4nKQorCisgICAgZGVmIHRlc3Rfbm9fc3RhcnRfYm91bmRhcnkoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzMxLnR4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgpLCAiIiJcCistLUJPVU5EQVJZCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworbWVzc2FnZSAxCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCittZXNzYWdlIDIKKworLS1CT1VOREFSWS0tCisiIiIpCisKKyAgICBkZWYgdGVzdF9ub19zZXBhcmF0aW5nX2JsYW5rX2xpbmUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzM1LnR4dCcpCisgICAgICAgIGVxKG1zZy5hc19zdHJpbmcoKSwgIiIiXAorRnJvbTogYXBlcnNvbkBkb20uYWluCitUbzogYnBlcnNvbkBkb20uYWluCitTdWJqZWN0OiBoZXJlJ3Mgc29tZXRoaW5nIGludGVyZXN0aW5nCisKK2NvdW50ZXIgdG8gUkZDIDI4MjIsIHRoZXJlJ3Mgbm8gc2VwYXJhdGluZyBuZXdsaW5lIGhlcmUKKyIiIikKKworICAgIGRlZiB0ZXN0X2x5aW5nX211bHRpcGFydChzZWxmKToKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzQxLnR4dCcpCisgICAgICAgIHVubGVzcyhoYXNhdHRyKG1zZywgJ2RlZmVjdHMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obXNnLmRlZmVjdHMpLCAyKQorICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShtc2cuZGVmZWN0c1swXSwgZXJyb3JzLk5vQm91bmRhcnlJbk11bHRpcGFydERlZmVjdCkpCisgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKG1zZy5kZWZlY3RzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuTXVsdGlwYXJ0SW52YXJpYW50VmlvbGF0aW9uRGVmZWN0KSkKKworICAgIGRlZiB0ZXN0X21pc3Npbmdfc3RhcnRfYm91bmRhcnkoc2VsZik6CisgICAgICAgIG91dGVyID0gc2VsZi5fbXNnb2JqKCdtc2dfNDIudHh0JykKKyAgICAgICAgIyBUaGUgbWVzc2FnZSBzdHJ1Y3R1cmUgaXM6CisgICAgICAgICMKKyAgICAgICAgIyBtdWx0aXBhcnQvbWl4ZWQKKyAgICAgICAgIyAgICB0ZXh0L3BsYWluCisgICAgICAgICMgICAgbWVzc2FnZS9yZmM4MjIKKyAgICAgICAgIyAgICAgICAgbXVsdGlwYXJ0L21peGVkIFsqXQorICAgICAgICAjCisgICAgICAgICMgWypdIFRoaXMgbWVzc2FnZSBpcyBtaXNzaW5nIGl0cyBzdGFydCBib3VuZGFyeQorICAgICAgICBiYWQgPSBvdXRlci5nZXRfcGF5bG9hZCgxKS5nZXRfcGF5bG9hZCgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiYWQuZGVmZWN0cyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGJhZC5kZWZlY3RzWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuU3RhcnRCb3VuZGFyeU5vdEZvdW5kRGVmZWN0KSkKKworICAgIGRlZiB0ZXN0X2ZpcnN0X2xpbmVfaXNfY29udGludWF0aW9uX2hlYWRlcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG0gPSAnIExpbmUgMVxuTGluZSAyXG5MaW5lIDMnCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKKyAgICAgICAgZXEobXNnLmtleXMoKSwgW10pCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgpLCAnTGluZSAyXG5MaW5lIDMnKQorICAgICAgICBlcShsZW4obXNnLmRlZmVjdHMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2cuZGVmZWN0c1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLkZpcnN0SGVhZGVyTGluZUlzQ29udGludWF0aW9uRGVmZWN0KSkKKyAgICAgICAgZXEobXNnLmRlZmVjdHNbMF0ubGluZSwgJyBMaW5lIDFcbicpCisKKworCisjIFRlc3QgUkZDIDIwNDcgaGVhZGVyIGVuY29kaW5nIGFuZCBkZWNvZGluZworY2xhc3MgVGVzdFJGQzIwNDcodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3JmYzIwNDdfbXVsdGlsaW5lKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgcyA9ICIiIlJlOiA9P21hYy1pY2VsYW5kP3E/cj04QWtzbT05QXJnPThDcz89IGJhegorIGZvbyBiYXIgPT9tYWMtaWNlbGFuZD9xP3I9OEFrc209OUFyZz04Q3M/PSIiIgorICAgICAgICBkaCA9IGRlY29kZV9oZWFkZXIocykKKyAgICAgICAgZXEoZGgsIFsKKyAgICAgICAgICAgICgnUmU6JywgTm9uZSksCisgICAgICAgICAgICAoJ3JceDhha3NtXHg5YXJnXHg4Y3MnLCAnbWFjLWljZWxhbmQnKSwKKyAgICAgICAgICAgICgnYmF6IGZvbyBiYXInLCBOb25lKSwKKyAgICAgICAgICAgICgnclx4OGFrc21ceDlhcmdceDhjcycsICdtYWMtaWNlbGFuZCcpXSkKKyAgICAgICAgZXEoc3RyKG1ha2VfaGVhZGVyKGRoKSksCisgICAgICAgICAgICIiIlJlOiA9P21hYy1pY2VsYW5kP3E/cj04QWtzbT05QXJnPThDcz89IGJheiBmb28gYmFyCisgPT9tYWMtaWNlbGFuZD9xP3I9OEFrc209OUFyZz04Q3M/PSIiIikKKworICAgIGRlZiB0ZXN0X3doaXRlc3BhY2VfZWF0ZXJfdW5pY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHMgPSAnPT9JU08tODg1OS0xP1E/QW5kcj1FOT89IFBpcmFyZCA8cGlyYXJkQGRvbS5haW4+JworICAgICAgICBkaCA9IGRlY29kZV9oZWFkZXIocykKKyAgICAgICAgZXEoZGgsIFsoJ0FuZHJceGU5JywgJ2lzby04ODU5LTEnKSwgKCdQaXJhcmQgPHBpcmFyZEBkb20uYWluPicsIE5vbmUpXSkKKyAgICAgICAgaHUgPSB1bmljb2RlKG1ha2VfaGVhZGVyKGRoKSkuZW5jb2RlKCdsYXRpbi0xJykKKyAgICAgICAgZXEoaHUsICdBbmRyXHhlOSBQaXJhcmQgPHBpcmFyZEBkb20uYWluPicpCisKKyAgICBkZWYgdGVzdF93aGl0ZXNwYWNlX2VhdGVyX3VuaWNvZGVfMihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHMgPSAnVGhlID0/aXNvLTg4NTktMT9iP2NYVnBZMnNnWW5KdmQyNGdabTk0Pz0ganVtcGVkIG92ZXIgdGhlID0/aXNvLTg4NTktMT9iP2JHRjZlU0JrYjJjPT89JworICAgICAgICBkaCA9IGRlY29kZV9oZWFkZXIocykKKyAgICAgICAgZXEoZGgsIFsoJ1RoZScsIE5vbmUpLCAoJ3F1aWNrIGJyb3duIGZveCcsICdpc28tODg1OS0xJyksCisgICAgICAgICAgICAgICAgKCdqdW1wZWQgb3ZlciB0aGUnLCBOb25lKSwgKCdsYXp5IGRvZycsICdpc28tODg1OS0xJyldKQorICAgICAgICBodSA9IG1ha2VfaGVhZGVyKGRoKS5fX3VuaWNvZGVfXygpCisgICAgICAgIGVxKGh1LCB1J1RoZSBxdWljayBicm93biBmb3gganVtcGVkIG92ZXIgdGhlIGxhenkgZG9nJykKKworICAgIGRlZiB0ZXN0X3JmYzIwNDdfbWlzc2luZ193aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICBzID0gJ1NtPT9JU08tODg1OS0xP0I/OWc9PT89cmc9P0lTTy04ODU5LTE/Qj81UT09Pz1zYm9yZCcKKyAgICAgICAgZGggPSBkZWNvZGVfaGVhZGVyKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGgsIFsocywgTm9uZSldKQorCisgICAgZGVmIHRlc3RfcmZjMjA0N193aXRoX3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgIHMgPSAnU20gPT9JU08tODg1OS0xP0I/OWc9PT89IHJnID0/SVNPLTg4NTktMT9CPzVRPT0/PSBzYm9yZCcKKyAgICAgICAgZGggPSBkZWNvZGVfaGVhZGVyKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGgsIFsoJ1NtJywgTm9uZSksICgnXHhmNicsICdpc28tODg1OS0xJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JnJywgTm9uZSksICgnXHhlNScsICdpc28tODg1OS0xJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3Nib3JkJywgTm9uZSldKQorCisKKworIyBUZXN0IHRoZSBNSU1FTWVzc2FnZSBjbGFzcworY2xhc3MgVGVzdE1JTUVNZXNzYWdlKFRlc3RFbWFpbEJhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZnAgPSBvcGVuZmlsZSgnbXNnXzExLnR4dCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3RleHQgPSBmcC5yZWFkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3R5cGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgTUlNRU1lc3NhZ2UsICdhIHBsYWluIHN0cmluZycpCisKKyAgICBkZWYgdGVzdF92YWxpZF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICBzdWJqZWN0ID0gJ0Egc3ViLW1lc3NhZ2UnCisgICAgICAgIG0gPSBNZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gc3ViamVjdAorICAgICAgICByID0gTUlNRU1lc3NhZ2UobSkKKyAgICAgICAgZXEoci5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIHBheWxvYWQgPSByLmdldF9wYXlsb2FkKCkKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UocGF5bG9hZCwgbGlzdCkpCisgICAgICAgIGVxKGxlbihwYXlsb2FkKSwgMSkKKyAgICAgICAgc3VicGFydCA9IHBheWxvYWRbMF0KKyAgICAgICAgdW5sZXNzKHN1YnBhcnQgaXMgbSkKKyAgICAgICAgZXEoc3VicGFydFsnc3ViamVjdCddLCBzdWJqZWN0KQorCisgICAgZGVmIHRlc3RfYmFkX211bHRpcGFydChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZzEgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnMVsnU3ViamVjdCddID0gJ3N1YnBhcnQgMScKKyAgICAgICAgbXNnMiA9IE1lc3NhZ2UoKQorICAgICAgICBtc2cyWydTdWJqZWN0J10gPSAnc3VicGFydCAyJworICAgICAgICByID0gTUlNRU1lc3NhZ2UobXNnMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzLk11bHRpcGFydENvbnZlcnNpb25FcnJvciwgci5hdHRhY2gsIG1zZzIpCisKKyAgICBkZWYgdGVzdF9nZW5lcmF0ZShzZWxmKToKKyAgICAgICAgIyBGaXJzdCBjcmFmdCB0aGUgbWVzc2FnZSB0byBiZSBlbmNhcHN1bGF0ZWQKKyAgICAgICAgbSA9IE1lc3NhZ2UoKQorICAgICAgICBtWydTdWJqZWN0J10gPSAnQW4gZW5jbG9zZWQgbWVzc2FnZScKKyAgICAgICAgbS5zZXRfcGF5bG9hZCgnSGVyZSBpcyB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZS5cbicpCisgICAgICAgIHIgPSBNSU1FTWVzc2FnZShtKQorICAgICAgICByWydTdWJqZWN0J10gPSAnVGhlIGVuY2xvc2luZyBtZXNzYWdlJworICAgICAgICBzID0gU3RyaW5nSU8oKQorICAgICAgICBnID0gR2VuZXJhdG9yKHMpCisgICAgICAgIGcuZmxhdHRlbihyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgIiIiXAorQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorTUlNRS1WZXJzaW9uOiAxLjAKK1N1YmplY3Q6IFRoZSBlbmNsb3NpbmcgbWVzc2FnZQorCitTdWJqZWN0OiBBbiBlbmNsb3NlZCBtZXNzYWdlCisKK0hlcmUgaXMgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UuCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9tZXNzYWdlX3JmYzgyMihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18xMS50eHQnKQorICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICBwYXlsb2FkID0gbXNnLmdldF9wYXlsb2FkKCkKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UocGF5bG9hZCwgbGlzdCkpCisgICAgICAgIGVxKGxlbihwYXlsb2FkKSwgMSkKKyAgICAgICAgc3VibXNnID0gcGF5bG9hZFswXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdWJtc2csIE1lc3NhZ2UpKQorICAgICAgICBlcShzdWJtc2dbJ3N1YmplY3QnXSwgJ0FuIGVuY2xvc2VkIG1lc3NhZ2UnKQorICAgICAgICBlcShzdWJtc2cuZ2V0X3BheWxvYWQoKSwgJ0hlcmUgaXMgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UuXG4nKQorCisgICAgZGVmIHRlc3RfZHNuKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCisgICAgICAgICMgbXNnIDE2IGlzIGEgRGVsaXZlcnkgU3RhdHVzIE5vdGlmaWNhdGlvbiwgc2VlIFJGQyAxODk0CisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzE2LnR4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICdtdWx0aXBhcnQvcmVwb3J0JykKKyAgICAgICAgdW5sZXNzKG1zZy5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgZXEobGVuKG1zZy5nZXRfcGF5bG9hZCgpKSwgMykKKyAgICAgICAgIyBTdWJwYXJ0IDEgaXMgYSB0ZXh0L3BsYWluLCBodW1hbiByZWFkYWJsZSBzZWN0aW9uCisgICAgICAgIHN1YnBhcnQgPSBtc2cuZ2V0X3BheWxvYWQoMCkKKyAgICAgICAgZXEoc3VicGFydC5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgZXEoc3VicGFydC5nZXRfcGF5bG9hZCgpLCAiIiJcCitUaGlzIHJlcG9ydCByZWxhdGVzIHRvIGEgbWVzc2FnZSB5b3Ugc2VudCB3aXRoIHRoZSBmb2xsb3dpbmcgaGVhZGVyIGZpZWxkczoKKworICBNZXNzYWdlLWlkOiA8MDAyMDAxYzE0NGE2JDg3NTJlMDYwJDU2MTA0NTg2QG94eS5lZHU+CisgIERhdGU6IFN1biwgMjMgU2VwIDIwMDEgMjA6MTA6NTUgLTA3MDAKKyAgRnJvbTogIklhbiBULiBIZW5yeSIgPGhlbnJ5aUBveHkuZWR1PgorICBUbzogU29DYWwgUmF2ZXMgPHNjckBzb2NhbC1yYXZlcy5vcmc+CisgIFN1YmplY3Q6IFtzY3JdIHllYWggZm9yIElhbnMhIQorCitZb3VyIG1lc3NhZ2UgY2Fubm90IGJlIGRlbGl2ZXJlZCB0byB0aGUgZm9sbG93aW5nIHJlY2lwaWVudHM6CisKKyAgUmVjaXBpZW50IGFkZHJlc3M6IGphbmdlbDFAY291Z2FyLm5vYy51Y2xhLmVkdQorICBSZWFzb246IHJlY2lwaWVudCByZWFjaGVkIGRpc2sgcXVvdGEKKworIiIiKQorICAgICAgICAjIFN1YnBhcnQgMiBjb250YWlucyB0aGUgbWFjaGluZSBwYXJzYWJsZSBEU04gaW5mb3JtYXRpb24uICBJdAorICAgICAgICAjIGNvbnNpc3RzIG9mIHR3byBibG9ja3Mgb2YgaGVhZGVycywgcmVwcmVzZW50ZWQgYnkgdHdvIG5lc3RlZCBNZXNzYWdlCisgICAgICAgICMgb2JqZWN0cy4KKyAgICAgICAgc3VicGFydCA9IG1zZy5nZXRfcGF5bG9hZCgxKQorICAgICAgICBlcShzdWJwYXJ0LmdldF9jb250ZW50X3R5cGUoKSwgJ21lc3NhZ2UvZGVsaXZlcnktc3RhdHVzJykKKyAgICAgICAgZXEobGVuKHN1YnBhcnQuZ2V0X3BheWxvYWQoKSksIDIpCisgICAgICAgICMgbWVzc2FnZS9kZWxpdmVyeS1zdGF0dXMgc2hvdWxkIHRyZWF0IGVhY2ggYmxvY2sgYXMgYSBidW5jaCBvZgorICAgICAgICAjIGhlYWRlcnMsIGkuZS4gYSBidW5jaCBvZiBNZXNzYWdlIG9iamVjdHMuCisgICAgICAgIGRzbjEgPSBzdWJwYXJ0LmdldF9wYXlsb2FkKDApCisgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKGRzbjEsIE1lc3NhZ2UpKQorICAgICAgICBlcShkc24xWydvcmlnaW5hbC1lbnZlbG9wZS1pZCddLCAnMEdLNTAwQjRIRDA4ODhAY291Z2FyLm5vYy51Y2xhLmVkdScpCisgICAgICAgIGVxKGRzbjEuZ2V0X3BhcmFtKCdkbnMnLCBoZWFkZXI9J3JlcG9ydGluZy1tdGEnKSwgJycpCisgICAgICAgICMgVHJ5IGEgbWlzc2luZyBvbmUgPHdpbms+CisgICAgICAgIGVxKGRzbjEuZ2V0X3BhcmFtKCduc2QnLCBoZWFkZXI9J3JlcG9ydGluZy1tdGEnKSwgTm9uZSkKKyAgICAgICAgZHNuMiA9IHN1YnBhcnQuZ2V0X3BheWxvYWQoMSkKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UoZHNuMiwgTWVzc2FnZSkpCisgICAgICAgIGVxKGRzbjJbJ2FjdGlvbiddLCAnZmFpbGVkJykKKyAgICAgICAgZXEoZHNuMi5nZXRfcGFyYW1zKGhlYWRlcj0nb3JpZ2luYWwtcmVjaXBpZW50JyksCisgICAgICAgICAgIFsoJ3JmYzgyMicsICcnKSwgKCdqYW5nZWwxQGNvdWdhci5ub2MudWNsYS5lZHUnLCAnJyldKQorICAgICAgICBlcShkc24yLmdldF9wYXJhbSgncmZjODIyJywgaGVhZGVyPSdmaW5hbC1yZWNpcGllbnQnKSwgJycpCisgICAgICAgICMgU3VicGFydCAzIGlzIHRoZSBvcmlnaW5hbCBtZXNzYWdlCisgICAgICAgIHN1YnBhcnQgPSBtc2cuZ2V0X3BheWxvYWQoMikKKyAgICAgICAgZXEoc3VicGFydC5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIHBheWxvYWQgPSBzdWJwYXJ0LmdldF9wYXlsb2FkKCkKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UocGF5bG9hZCwgbGlzdCkpCisgICAgICAgIGVxKGxlbihwYXlsb2FkKSwgMSkKKyAgICAgICAgc3Vic3VicGFydCA9IHBheWxvYWRbMF0KKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2Uoc3Vic3VicGFydCwgTWVzc2FnZSkpCisgICAgICAgIGVxKHN1YnN1YnBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIGVxKHN1YnN1YnBhcnRbJ21lc3NhZ2UtaWQnXSwKKyAgICAgICAgICAgJzwwMDIwMDFjMTQ0YTYkODc1MmUwNjAkNTYxMDQ1ODZAb3h5LmVkdT4nKQorCisgICAgZGVmIHRlc3RfZXBpbG9ndWUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIGZwID0gb3BlbmZpbGUoJ21zZ18yMS50eHQnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ0Zyb20nXSA9ICdhcGVyc29uQGRvbS5haW4nCisgICAgICAgIG1zZ1snVG8nXSA9ICdicGVyc29uQGRvbS5haW4nCisgICAgICAgIG1zZ1snU3ViamVjdCddID0gJ1Rlc3QnCisgICAgICAgIG1zZy5wcmVhbWJsZSA9ICdNSU1FIG1lc3NhZ2UnCisgICAgICAgIG1zZy5lcGlsb2d1ZSA9ICdFbmQgb2YgTUlNRSBtZXNzYWdlXG4nCisgICAgICAgIG1zZzEgPSBNSU1FVGV4dCgnT25lJykKKyAgICAgICAgbXNnMiA9IE1JTUVUZXh0KCdUd28nKQorICAgICAgICBtc2cuYWRkX2hlYWRlcignQ29udGVudC1UeXBlJywgJ211bHRpcGFydC9taXhlZCcsIGJvdW5kYXJ5PSdCT1VOREFSWScpCisgICAgICAgIG1zZy5hdHRhY2gobXNnMSkKKyAgICAgICAgbXNnLmF0dGFjaChtc2cyKQorICAgICAgICBzZnAgPSBTdHJpbmdJTygpCisgICAgICAgIGcgPSBHZW5lcmF0b3Ioc2ZwKQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICBlcShzZnAuZ2V0dmFsdWUoKSwgdGV4dCkKKworICAgIGRlZiB0ZXN0X25vX25sX3ByZWFtYmxlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnWydGcm9tJ10gPSAnYXBlcnNvbkBkb20uYWluJworICAgICAgICBtc2dbJ1RvJ10gPSAnYnBlcnNvbkBkb20uYWluJworICAgICAgICBtc2dbJ1N1YmplY3QnXSA9ICdUZXN0JworICAgICAgICBtc2cucHJlYW1ibGUgPSAnTUlNRSBtZXNzYWdlJworICAgICAgICBtc2cuZXBpbG9ndWUgPSAnJworICAgICAgICBtc2cxID0gTUlNRVRleHQoJ09uZScpCisgICAgICAgIG1zZzIgPSBNSU1FVGV4dCgnVHdvJykKKyAgICAgICAgbXNnLmFkZF9oZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdtdWx0aXBhcnQvbWl4ZWQnLCBib3VuZGFyeT0nQk9VTkRBUlknKQorICAgICAgICBtc2cuYXR0YWNoKG1zZzEpCisgICAgICAgIG1zZy5hdHRhY2gobXNnMikKKyAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCAiIiJcCitGcm9tOiBhcGVyc29uQGRvbS5haW4KK1RvOiBicGVyc29uQGRvbS5haW4KK1N1YmplY3Q6IFRlc3QKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iQk9VTkRBUlkiCisKK01JTUUgbWVzc2FnZQorLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKK09uZQorLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKK1R3bworLS1CT1VOREFSWS0tCisiIiIpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3R5cGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBmcCA9IG9wZW5maWxlKCdtc2dfMzAudHh0JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIGNvbnRhaW5lcjEgPSBtc2cuZ2V0X3BheWxvYWQoMCkKKyAgICAgICAgZXEoY29udGFpbmVyMS5nZXRfZGVmYXVsdF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIGVxKGNvbnRhaW5lcjEuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICBjb250YWluZXIyID0gbXNnLmdldF9wYXlsb2FkKDEpCisgICAgICAgIGVxKGNvbnRhaW5lcjIuZ2V0X2RlZmF1bHRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICBlcShjb250YWluZXIyLmdldF9jb250ZW50X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgY29udGFpbmVyMWEgPSBjb250YWluZXIxLmdldF9wYXlsb2FkKDApCisgICAgICAgIGVxKGNvbnRhaW5lcjFhLmdldF9kZWZhdWx0X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBlcShjb250YWluZXIxYS5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgY29udGFpbmVyMmEgPSBjb250YWluZXIyLmdldF9wYXlsb2FkKDApCisgICAgICAgIGVxKGNvbnRhaW5lcjJhLmdldF9kZWZhdWx0X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBlcShjb250YWluZXIyYS5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfdHlwZV93aXRoX2V4cGxpY2l0X2NvbnRhaW5lcl90eXBlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZnAgPSBvcGVuZmlsZSgnbXNnXzI4LnR4dCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9maWxlKGZwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICBjb250YWluZXIxID0gbXNnLmdldF9wYXlsb2FkKDApCisgICAgICAgIGVxKGNvbnRhaW5lcjEuZ2V0X2RlZmF1bHRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICBlcShjb250YWluZXIxLmdldF9jb250ZW50X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgY29udGFpbmVyMiA9IG1zZy5nZXRfcGF5bG9hZCgxKQorICAgICAgICBlcShjb250YWluZXIyLmdldF9kZWZhdWx0X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgZXEoY29udGFpbmVyMi5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIGNvbnRhaW5lcjFhID0gY29udGFpbmVyMS5nZXRfcGF5bG9hZCgwKQorICAgICAgICBlcShjb250YWluZXIxYS5nZXRfZGVmYXVsdF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgZXEoY29udGFpbmVyMWEuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIGNvbnRhaW5lcjJhID0gY29udGFpbmVyMi5nZXRfcGF5bG9hZCgwKQorICAgICAgICBlcShjb250YWluZXIyYS5nZXRfZGVmYXVsdF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgZXEoY29udGFpbmVyMmEuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3R5cGVfbm9uX3BhcnNlZChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG5lcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICAjIFNldCB1cCBjb250YWluZXIKKyAgICAgICAgY29udGFpbmVyID0gTUlNRU11bHRpcGFydCgnZGlnZXN0JywgJ0JPVU5EQVJZJykKKyAgICAgICAgY29udGFpbmVyLmVwaWxvZ3VlID0gJycKKyAgICAgICAgIyBTZXQgdXAgc3VicGFydHMKKyAgICAgICAgc3VicGFydDFhID0gTUlNRVRleHQoJ21lc3NhZ2UgMVxuJykKKyAgICAgICAgc3VicGFydDJhID0gTUlNRVRleHQoJ21lc3NhZ2UgMlxuJykKKyAgICAgICAgc3VicGFydDEgPSBNSU1FTWVzc2FnZShzdWJwYXJ0MWEpCisgICAgICAgIHN1YnBhcnQyID0gTUlNRU1lc3NhZ2Uoc3VicGFydDJhKQorICAgICAgICBjb250YWluZXIuYXR0YWNoKHN1YnBhcnQxKQorICAgICAgICBjb250YWluZXIuYXR0YWNoKHN1YnBhcnQyKQorICAgICAgICBlcShzdWJwYXJ0MS5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIGVxKHN1YnBhcnQxLmdldF9kZWZhdWx0X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgZXEoc3VicGFydDIuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICBlcShzdWJwYXJ0Mi5nZXRfZGVmYXVsdF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIG5lcShjb250YWluZXIuYXNfc3RyaW5nKDApLCAnJydcCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9kaWdlc3Q7IGJvdW5kYXJ5PSJCT1VOREFSWSIKK01JTUUtVmVyc2lvbjogMS4wCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKK01JTUUtVmVyc2lvbjogMS4wCisKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCittZXNzYWdlIDEKKworLS1CT1VOREFSWQorQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorTUlNRS1WZXJzaW9uOiAxLjAKKworQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKK21lc3NhZ2UgMgorCistLUJPVU5EQVJZLS0KKycnJykKKyAgICAgICAgZGVsIHN1YnBhcnQxWydjb250ZW50LXR5cGUnXQorICAgICAgICBkZWwgc3VicGFydDFbJ21pbWUtdmVyc2lvbiddCisgICAgICAgIGRlbCBzdWJwYXJ0MlsnY29udGVudC10eXBlJ10KKyAgICAgICAgZGVsIHN1YnBhcnQyWydtaW1lLXZlcnNpb24nXQorICAgICAgICBlcShzdWJwYXJ0MS5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIGVxKHN1YnBhcnQxLmdldF9kZWZhdWx0X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKKyAgICAgICAgZXEoc3VicGFydDIuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICBlcShzdWJwYXJ0Mi5nZXRfZGVmYXVsdF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIG5lcShjb250YWluZXIuYXNfc3RyaW5nKDApLCAnJydcCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9kaWdlc3Q7IGJvdW5kYXJ5PSJCT1VOREFSWSIKK01JTUUtVmVyc2lvbjogMS4wCisKKy0tQk9VTkRBUlkKKworQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKK21lc3NhZ2UgMQorCistLUJPVU5EQVJZCisKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCittZXNzYWdlIDIKKworLS1CT1VOREFSWS0tCisnJycpCisKKyAgICBkZWYgdGVzdF9taW1lX2F0dGFjaG1lbnRzX2luX2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgdGV4dDEgPSBNSU1FVGV4dCgnJykKKyAgICAgICAgdGV4dDIgPSBNSU1FVGV4dCgnJykKKyAgICAgICAgbXNnID0gTUlNRU11bHRpcGFydChfc3VicGFydHM9KHRleHQxLCB0ZXh0MikpCisgICAgICAgIGVxKGxlbihtc2cuZ2V0X3BheWxvYWQoKSksIDIpCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgwKSwgdGV4dDEpCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgxKSwgdGV4dDIpCisKKworCisjIEEgZ2VuZXJhbCB0ZXN0IG9mIHBhcnNlci0+bW9kZWwtPmdlbmVyYXRvciBpZGVtcG90ZW5jeS4gIElPVywgcmVhZCBhIG1lc3NhZ2UKKyMgaW4sIHBhcnNlIGl0IGludG8gYSBtZXNzYWdlIG9iamVjdCB0cmVlLCB0aGVuIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHRyZWUsCisjIHJlZ2VuZXJhdGUgdGhlIHBsYWluIHRleHQuICBUaGUgb3JpZ2luYWwgdGV4dCBhbmQgdGhlIHRyYW5zZm9ybWVkIHRleHQKKyMgc2hvdWxkIGJlIGlkZW50aWNhbC4gIE5vdGU6IHRoYXQgd2UgaWdub3JlIHRoZSBVbml4LUZyb20gc2luY2UgdGhhdCBtYXkKKyMgY29udGFpbiBhIGNoYW5nZWQgZGF0ZS4KK2NsYXNzIFRlc3RJZGVtcG90ZW50KFRlc3RFbWFpbEJhc2UpOgorICAgIGRlZiBfbXNnb2JqKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgZnAgPSBvcGVuZmlsZShmaWxlbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKGRhdGEpCisgICAgICAgIHJldHVybiBtc2csIGRhdGEKKworICAgIGRlZiBfaWRlbXBvdGVudChzZWxmLCBtc2csIHRleHQpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBzID0gU3RyaW5nSU8oKQorICAgICAgICBnID0gR2VuZXJhdG9yKHMsIG1heGhlYWRlcmxlbj0wKQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICBlcSh0ZXh0LCBzLmdldHZhbHVlKCkpCisKKyAgICBkZWYgdGVzdF9wYXJzZV90ZXh0X21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpLCAndGV4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF9zdWJ0eXBlKCksICdwbGFpbicpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW1zKClbMV0sICgnY2hhcnNldCcsICd1cy1hc2NpaScpKQorICAgICAgICBlcShtc2cuZ2V0X3BhcmFtKCdjaGFyc2V0JyksICd1cy1hc2NpaScpCisgICAgICAgIGVxKG1zZy5wcmVhbWJsZSwgTm9uZSkKKyAgICAgICAgZXEobXNnLmVwaWxvZ3VlLCBOb25lKQorICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKKworICAgIGRlZiB0ZXN0X3BhcnNlX3VudHlwZWRfbWVzc2FnZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzAzLnR4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbXMoKSwgTm9uZSkKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbSgnY2hhcnNldCcpLCBOb25lKQorICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9tdWx0aXBhcnQoc2VsZik6CisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzA0LnR4dCcpCisgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQorCisgICAgZGVmIHRlc3RfTUlNRV9kaWdlc3Qoc2VsZik6CisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzAyLnR4dCcpCisgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQorCisgICAgZGVmIHRlc3RfbG9uZ19oZWFkZXIoc2VsZik6CisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzI3LnR4dCcpCisgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQorCisgICAgZGVmIHRlc3RfTUlNRV9kaWdlc3Rfd2l0aF9wYXJ0X2hlYWRlcnMoc2VsZik6CisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzI4LnR4dCcpCisgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQorCisgICAgZGVmIHRlc3RfbWl4ZWRfd2l0aF9pbWFnZShzZWxmKToKKyAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMDYudHh0JykKKyAgICAgICAgc2VsZi5faWRlbXBvdGVudChtc2csIHRleHQpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBhcnRfcmVwb3J0KHNlbGYpOgorICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18wNS50eHQnKQorICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKKworICAgIGRlZiB0ZXN0X2RzbihzZWxmKToKKyAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMTYudHh0JykKKyAgICAgICAgc2VsZi5faWRlbXBvdGVudChtc2csIHRleHQpCisKKyAgICBkZWYgdGVzdF9wcmVhbWJsZV9lcGlsb2d1ZShzZWxmKToKKyAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMjEudHh0JykKKyAgICAgICAgc2VsZi5faWRlbXBvdGVudChtc2csIHRleHQpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBhcnRfb25lX3BhcnQoc2VsZik6CisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzIzLnR4dCcpCisgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQorCisgICAgZGVmIHRlc3RfbXVsdGlwYXJ0X25vX3BhcnRzKHNlbGYpOgorICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18yNC50eHQnKQorICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKKworICAgIGRlZiB0ZXN0X25vX3N0YXJ0X2JvdW5kYXJ5KHNlbGYpOgorICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18zMS50eHQnKQorICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKKworICAgIGRlZiB0ZXN0X3JmYzIyMzFfY2hhcnNldChzZWxmKToKKyAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMzIudHh0JykKKyAgICAgICAgc2VsZi5faWRlbXBvdGVudChtc2csIHRleHQpCisKKyAgICBkZWYgdGVzdF9tb3JlX3JmYzIyMzFfcGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMzMudHh0JykKKyAgICAgICAgc2VsZi5faWRlbXBvdGVudChtc2csIHRleHQpCisKKyAgICBkZWYgdGVzdF90ZXh0X3BsYWluX2luX2FfbXVsdGlwYXJ0X2RpZ2VzdChzZWxmKToKKyAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMzQudHh0JykKKyAgICAgICAgc2VsZi5faWRlbXBvdGVudChtc2csIHRleHQpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfbXVsdGlwYXJ0X21peGVkcyhzZWxmKToKKyAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMTJhLnR4dCcpCisgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQorCisgICAgZGVmIHRlc3RfbWVzc2FnZV9leHRlcm5hbF9ib2R5X2lkZW1wb3RlbnQoc2VsZik6CisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzM2LnR4dCcpCisgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQorCisgICAgZGVmIHRlc3RfY29udGVudF90eXBlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCisgICAgICAgICMgR2V0IGEgbWVzc2FnZSBvYmplY3QgYW5kIHJlc2V0IHRoZSBzZWVrIHBvaW50ZXIgZm9yIG90aGVyIHRlc3RzCisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzA1LnR4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICdtdWx0aXBhcnQvcmVwb3J0JykKKyAgICAgICAgIyBUZXN0IHRoZSBDb250ZW50LVR5cGU6IHBhcmFtZXRlcnMKKyAgICAgICAgcGFyYW1zID0ge30KKyAgICAgICAgZm9yIHBrLCBwdiBpbiBtc2cuZ2V0X3BhcmFtcygpOgorICAgICAgICAgICAgcGFyYW1zW3BrXSA9IHB2CisgICAgICAgIGVxKHBhcmFtc1sncmVwb3J0LXR5cGUnXSwgJ2RlbGl2ZXJ5LXN0YXR1cycpCisgICAgICAgIGVxKHBhcmFtc1snYm91bmRhcnknXSwgJ0QxNjkwQTdBQzEuOTk2ODU2MDkwL21haWwuZXhhbXBsZS5jb20nKQorICAgICAgICBlcShtc2cucHJlYW1ibGUsICdUaGlzIGlzIGEgTUlNRS1lbmNhcHN1bGF0ZWQgbWVzc2FnZS5cbicpCisgICAgICAgIGVxKG1zZy5lcGlsb2d1ZSwgJ1xuJykKKyAgICAgICAgZXEobGVuKG1zZy5nZXRfcGF5bG9hZCgpKSwgMykKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHN1YnBhcnRzIGFyZSB3aGF0IHdlIGV4cGVjdAorICAgICAgICBtc2cxID0gbXNnLmdldF9wYXlsb2FkKDApCisgICAgICAgIGVxKG1zZzEuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIGVxKG1zZzEuZ2V0X3BheWxvYWQoKSwgJ1lhZGRhIHlhZGRhIHlhZGRhXG4nKQorICAgICAgICBtc2cyID0gbXNnLmdldF9wYXlsb2FkKDEpCisgICAgICAgIGVxKG1zZzIuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIGVxKG1zZzIuZ2V0X3BheWxvYWQoKSwgJ1lhZGRhIHlhZGRhIHlhZGRhXG4nKQorICAgICAgICBtc2czID0gbXNnLmdldF9wYXlsb2FkKDIpCisgICAgICAgIGVxKG1zZzMuZ2V0X2NvbnRlbnRfdHlwZSgpLCAnbWVzc2FnZS9yZmM4MjInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2czLCBNZXNzYWdlKSkKKyAgICAgICAgcGF5bG9hZCA9IG1zZzMuZ2V0X3BheWxvYWQoKQorICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShwYXlsb2FkLCBsaXN0KSkKKyAgICAgICAgZXEobGVuKHBheWxvYWQpLCAxKQorICAgICAgICBtc2c0ID0gcGF5bG9hZFswXQorICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShtc2c0LCBNZXNzYWdlKSkKKyAgICAgICAgZXEobXNnNC5nZXRfcGF5bG9hZCgpLCAnWWFkZGEgeWFkZGEgeWFkZGFcbicpCisKKyAgICBkZWYgdGVzdF9wYXJzZXIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKKyAgICAgICAgbXNnLCB0ZXh0ID0gc2VsZi5fbXNnb2JqKCdtc2dfMDYudHh0JykKKyAgICAgICAgIyBDaGVjayBzb21lIG9mIHRoZSBvdXRlciBoZWFkZXJzCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSBwYXlsb2FkIGlzIGEgbGlzdCBvZiBleGFjdGx5IG9uZSBzdWItTWVzc2FnZSwgYW5kIHRoYXQKKyAgICAgICAgIyB0aGF0IHN1Ym1lc3NhZ2UgaGFzIGEgdHlwZSBvZiB0ZXh0L3BsYWluCisgICAgICAgIHBheWxvYWQgPSBtc2cuZ2V0X3BheWxvYWQoKQorICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShwYXlsb2FkLCBsaXN0KSkKKyAgICAgICAgZXEobGVuKHBheWxvYWQpLCAxKQorICAgICAgICBtc2cxID0gcGF5bG9hZFswXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2cxLCBNZXNzYWdlKSkKKyAgICAgICAgZXEobXNnMS5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobXNnMS5nZXRfcGF5bG9hZCgpLCBzdHIpKQorICAgICAgICBlcShtc2cxLmdldF9wYXlsb2FkKCksICdcbicpCisKKworCisjIFRlc3QgdmFyaW91cyBvdGhlciBiaXRzIG9mIHRoZSBwYWNrYWdlJ3MgZnVuY3Rpb25hbGl0eQorY2xhc3MgVGVzdE1pc2NlbGxhbmVvdXMoVGVzdEVtYWlsQmFzZSk6CisgICAgZGVmIHRlc3RfbWVzc2FnZV9mcm9tX3N0cmluZyhzZWxmKToKKyAgICAgICAgZnAgPSBvcGVuZmlsZSgnbXNnXzAxLnR4dCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRleHQgPSBmcC5yZWFkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyh0ZXh0KQorICAgICAgICBzID0gU3RyaW5nSU8oKQorICAgICAgICAjIERvbid0IHdyYXAvY29udGludWUgbG9uZyBoZWFkZXJzIHNpbmNlIHdlJ3JlIHRyeWluZyB0byB0ZXN0CisgICAgICAgICMgaWRlbXBvdGVuY3kuCisgICAgICAgIGcgPSBHZW5lcmF0b3IocywgbWF4aGVhZGVybGVuPTApCisgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgcy5nZXR2YWx1ZSgpKQorCisgICAgZGVmIHRlc3RfbWVzc2FnZV9mcm9tX2ZpbGUoc2VsZik6CisgICAgICAgIGZwID0gb3BlbmZpbGUoJ21zZ18wMS50eHQnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpCisgICAgICAgICAgICBmcC5zZWVrKDApCisgICAgICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fZmlsZShmcCkKKyAgICAgICAgICAgIHMgPSBTdHJpbmdJTygpCisgICAgICAgICAgICAjIERvbid0IHdyYXAvY29udGludWUgbG9uZyBoZWFkZXJzIHNpbmNlIHdlJ3JlIHRyeWluZyB0byB0ZXN0CisgICAgICAgICAgICAjIGlkZW1wb3RlbmN5LgorICAgICAgICAgICAgZyA9IEdlbmVyYXRvcihzLCBtYXhoZWFkZXJsZW49MCkKKyAgICAgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsIHMuZ2V0dmFsdWUoKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X21lc3NhZ2VfZnJvbV9zdHJpbmdfd2l0aF9jbGFzcyhzZWxmKToKKyAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCisgICAgICAgIGZwID0gb3BlbmZpbGUoJ21zZ18wMS50eHQnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICMgQ3JlYXRlIGEgc3ViY2xhc3MKKyAgICAgICAgY2xhc3MgTXlNZXNzYWdlKE1lc3NhZ2UpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcodGV4dCwgTXlNZXNzYWdlKQorICAgICAgICB1bmxlc3MoaXNpbnN0YW5jZShtc2csIE15TWVzc2FnZSkpCisgICAgICAgICMgVHJ5IHNvbWV0aGluZyBtb3JlIGNvbXBsaWNhdGVkCisgICAgICAgIGZwID0gb3BlbmZpbGUoJ21zZ18wMi50eHQnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcodGV4dCwgTXlNZXNzYWdlKQorICAgICAgICBmb3Igc3VicGFydCBpbiBtc2cud2FsaygpOgorICAgICAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2Uoc3VicGFydCwgTXlNZXNzYWdlKSkKKworICAgIGRlZiB0ZXN0X21lc3NhZ2VfZnJvbV9maWxlX3dpdGhfY2xhc3Moc2VsZik6CisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICAjIENyZWF0ZSBhIHN1YmNsYXNzCisgICAgICAgIGNsYXNzIE15TWVzc2FnZShNZXNzYWdlKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBmcCA9IG9wZW5maWxlKCdtc2dfMDEudHh0JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnAsIE15TWVzc2FnZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2UobXNnLCBNeU1lc3NhZ2UpKQorICAgICAgICAjIFRyeSBzb21ldGhpbmcgbW9yZSBjb21wbGljYXRlZAorICAgICAgICBmcCA9IG9wZW5maWxlKCdtc2dfMDIudHh0JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnAsIE15TWVzc2FnZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgZm9yIHN1YnBhcnQgaW4gbXNnLndhbGsoKToKKyAgICAgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKHN1YnBhcnQsIE15TWVzc2FnZSkpCisKKyAgICBkZWYgdGVzdF9fYWxsX18oc2VsZik6CisgICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18oJ2VtYWlsJykKKyAgICAgICAgIyBDYW4ndCB1c2Ugc29ydGVkKCkgaGVyZSBkdWUgdG8gUHl0aG9uIDIuMyBjb21wYXRpYmlsaXR5CisgICAgICAgIGFsbCA9IG1vZHVsZS5fX2FsbF9fWzpdCisgICAgICAgIGFsbC5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGwsIFsKKyAgICAgICAgICAgICMgT2xkIG5hbWVzCisgICAgICAgICAgICAnQ2hhcnNldCcsICdFbmNvZGVycycsICdFcnJvcnMnLCAnR2VuZXJhdG9yJywKKyAgICAgICAgICAgICdIZWFkZXInLCAnSXRlcmF0b3JzJywgJ01JTUVBdWRpbycsICdNSU1FQmFzZScsCisgICAgICAgICAgICAnTUlNRUltYWdlJywgJ01JTUVNZXNzYWdlJywgJ01JTUVNdWx0aXBhcnQnLAorICAgICAgICAgICAgJ01JTUVOb25NdWx0aXBhcnQnLCAnTUlNRVRleHQnLCAnTWVzc2FnZScsCisgICAgICAgICAgICAnUGFyc2VyJywgJ1V0aWxzJywgJ2Jhc2U2NE1JTUUnLAorICAgICAgICAgICAgIyBuZXcgbmFtZXMKKyAgICAgICAgICAgICdiYXNlNjRtaW1lJywgJ2NoYXJzZXQnLCAnZW5jb2RlcnMnLCAnZXJyb3JzJywgJ2dlbmVyYXRvcicsCisgICAgICAgICAgICAnaGVhZGVyJywgJ2l0ZXJhdG9ycycsICdtZXNzYWdlJywgJ21lc3NhZ2VfZnJvbV9maWxlJywKKyAgICAgICAgICAgICdtZXNzYWdlX2Zyb21fc3RyaW5nJywgJ21pbWUnLCAncGFyc2VyJywKKyAgICAgICAgICAgICdxdW9wcmlNSU1FJywgJ3F1b3ByaW1pbWUnLCAndXRpbHMnLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdGRhdGUoc2VsZik6CisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXRpbHMucGFyc2VkYXRlKHV0aWxzLmZvcm1hdGRhdGUobm93KSlbOjZdLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuZ210aW1lKG5vdylbOjZdKQorCisgICAgZGVmIHRlc3RfZm9ybWF0ZGF0ZV9sb2NhbHRpbWUoc2VsZik6CisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1dGlscy5wYXJzZWRhdGUodXRpbHMuZm9ybWF0ZGF0ZShub3csIGxvY2FsdGltZT1UcnVlKSlbOjZdLAorICAgICAgICAgICAgdGltZS5sb2NhbHRpbWUobm93KVs6Nl0pCisKKyAgICBkZWYgdGVzdF9mb3JtYXRkYXRlX3VzZWdtdChzZWxmKToKKyAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHV0aWxzLmZvcm1hdGRhdGUobm93LCBsb2NhbHRpbWU9RmFsc2UpLAorICAgICAgICAgICAgdGltZS5zdHJmdGltZSgnJWEsICVkICViICVZICVIOiVNOiVTIC0wMDAwJywgdGltZS5nbXRpbWUobm93KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1dGlscy5mb3JtYXRkYXRlKG5vdywgbG9jYWx0aW1lPUZhbHNlLCB1c2VnbXQ9VHJ1ZSksCisgICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKCclYSwgJWQgJWIgJVkgJUg6JU06JVMgR01UJywgdGltZS5nbXRpbWUobm93KSkpCisKKyAgICBkZWYgdGVzdF9wYXJzZWRhdGVfbm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1dGlscy5wYXJzZWRhdGUoJycpLCBOb25lKQorCisgICAgZGVmIHRlc3RfcGFyc2VkYXRlX2NvbXBhY3Qoc2VsZik6CisgICAgICAgICMgVGhlIEZXUyBhZnRlciB0aGUgY29tbWEgaXMgb3B0aW9uYWwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1dGlscy5wYXJzZWRhdGUoJ1dlZCwzIEFwciAyMDAyIDE0OjU4OjI2ICswODAwJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbHMucGFyc2VkYXRlKCdXZWQsIDMgQXByIDIwMDIgMTQ6NTg6MjYgKzA4MDAnKSkKKworICAgIGRlZiB0ZXN0X3BhcnNlZGF0ZV9ub19kYXlvZndlZWsoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcSh1dGlscy5wYXJzZWRhdGVfdHooJzI1IEZlYiAyMDAzIDEzOjQ3OjI2IC0wODAwJyksCisgICAgICAgICAgICgyMDAzLCAyLCAyNSwgMTMsIDQ3LCAyNiwgMCwgMSwgLTEsIC0yODgwMCkpCisKKyAgICBkZWYgdGVzdF9wYXJzZWRhdGVfY29tcGFjdF9ub19kYXlvZndlZWsoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcSh1dGlscy5wYXJzZWRhdGVfdHooJzUgRmViIDIwMDMgMTM6NDc6MjYgLTA4MDAnKSwKKyAgICAgICAgICAgKDIwMDMsIDIsIDUsIDEzLCA0NywgMjYsIDAsIDEsIC0xLCAtMjg4MDApKQorCisgICAgZGVmIHRlc3RfcGFyc2VkYXRlX2FjY2VwdGFibGVfdG9fdGltZV9mdW5jdGlvbnMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICB0aW1ldHVwID0gdXRpbHMucGFyc2VkYXRlKCc1IEZlYiAyMDAzIDEzOjQ3OjI2IC0wODAwJykKKyAgICAgICAgdCA9IGludCh0aW1lLm1rdGltZSh0aW1ldHVwKSkKKyAgICAgICAgZXEodGltZS5sb2NhbHRpbWUodClbOjZdLCB0aW1ldHVwWzo2XSkKKyAgICAgICAgZXEoaW50KHRpbWUuc3RyZnRpbWUoJyVZJywgdGltZXR1cCkpLCAyMDAzKQorICAgICAgICB0aW1ldHVwID0gdXRpbHMucGFyc2VkYXRlX3R6KCc1IEZlYiAyMDAzIDEzOjQ3OjI2IC0wODAwJykKKyAgICAgICAgdCA9IGludCh0aW1lLm1rdGltZSh0aW1ldHVwWzo5XSkpCisgICAgICAgIGVxKHRpbWUubG9jYWx0aW1lKHQpWzo2XSwgdGltZXR1cFs6Nl0pCisgICAgICAgIGVxKGludCh0aW1lLnN0cmZ0aW1lKCclWScsIHRpbWV0dXBbOjldKSksIDIwMDMpCisKKyAgICBkZWYgdGVzdF9wYXJzZWFkZHJfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXRpbHMucGFyc2VhZGRyKCc8PicpLCAoJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1dGlscy5mb3JtYXRhZGRyKHV0aWxzLnBhcnNlYWRkcignPD4nKSksICcnKQorCisgICAgZGVmIHRlc3Rfbm9xdW90ZV9kdW1wKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdXRpbHMuZm9ybWF0YWRkcigoJ0EgU2lsbHkgUGVyc29uJywgJ3BlcnNvbkBkb20uYWluJykpLAorICAgICAgICAgICAgJ0EgU2lsbHkgUGVyc29uIDxwZXJzb25AZG9tLmFpbj4nKQorCisgICAgZGVmIHRlc3RfZXNjYXBlX2R1bXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1dGlscy5mb3JtYXRhZGRyKCgnQSAoVmVyeSkgU2lsbHkgUGVyc29uJywgJ3BlcnNvbkBkb20uYWluJykpLAorICAgICAgICAgICAgciciQSBcKFZlcnlcKSBTaWxseSBQZXJzb24iIDxwZXJzb25AZG9tLmFpbj4nKQorICAgICAgICBhID0gcidBIFwoU3BlY2lhbFwpIFBlcnNvbicKKyAgICAgICAgYiA9ICdwZXJzb25AZG9tLmFpbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1dGlscy5wYXJzZWFkZHIodXRpbHMuZm9ybWF0YWRkcigoYSwgYikpKSwgKGEsIGIpKQorCisgICAgZGVmIHRlc3RfZXNjYXBlX2JhY2tzbGFzaGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdXRpbHMuZm9ybWF0YWRkcigoJ0FydGh1ciBcQmFja3NsYXNoXCBGb29iYXInLCAncGVyc29uQGRvbS5haW4nKSksCisgICAgICAgICAgICByJyJBcnRodXIgXFxCYWNrc2xhc2hcXCBGb29iYXIiIDxwZXJzb25AZG9tLmFpbj4nKQorICAgICAgICBhID0gcidBcnRodXIgXEJhY2tzbGFzaFwgRm9vYmFyJworICAgICAgICBiID0gJ3BlcnNvbkBkb20uYWluJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHV0aWxzLnBhcnNlYWRkcih1dGlscy5mb3JtYXRhZGRyKChhLCBiKSkpLCAoYSwgYikpCisKKyAgICBkZWYgdGVzdF9uYW1lX3dpdGhfZG90KHNlbGYpOgorICAgICAgICB4ID0gJ0pvaG4gWC4gRG9lIDxqeGRAZXhhbXBsZS5jb20+JworICAgICAgICB5ID0gJyJKb2huIFguIERvZSIgPGp4ZEBleGFtcGxlLmNvbT4nCisgICAgICAgIGEsIGIgPSAoJ0pvaG4gWC4gRG9lJywgJ2p4ZEBleGFtcGxlLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXRpbHMucGFyc2VhZGRyKHgpLCAoYSwgYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXRpbHMucGFyc2VhZGRyKHkpLCAoYSwgYikpCisgICAgICAgICMgZm9ybWF0YWRkcigpIHF1b3RlcyB0aGUgbmFtZSBpZiB0aGVyZSdzIGEgZG90IGluIGl0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXRpbHMuZm9ybWF0YWRkcigoYSwgYikpLCB5KQorCisgICAgZGVmIHRlc3RfbXVsdGlsaW5lX2Zyb21fY29tbWVudChzZWxmKToKKyAgICAgICAgeCA9ICIiIlwKK0ZvbworXHRCYXIgPGZvb0BleGFtcGxlLmNvbT4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1dGlscy5wYXJzZWFkZHIoeCksICgnRm9vIEJhcicsICdmb29AZXhhbXBsZS5jb20nKSkKKworICAgIGRlZiB0ZXN0X3F1b3RlX2R1bXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1dGlscy5mb3JtYXRhZGRyKCgnQSBTaWxseTsgUGVyc29uJywgJ3BlcnNvbkBkb20uYWluJykpLAorICAgICAgICAgICAgciciQSBTaWxseTsgUGVyc29uIiA8cGVyc29uQGRvbS5haW4+JykKKworICAgIGRlZiB0ZXN0X2ZpeF9lb2xzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEodXRpbHMuZml4X2VvbHMoJ2hlbGxvJyksICdoZWxsbycpCisgICAgICAgIGVxKHV0aWxzLmZpeF9lb2xzKCdoZWxsb1xuJyksICdoZWxsb1xyXG4nKQorICAgICAgICBlcSh1dGlscy5maXhfZW9scygnaGVsbG9ccicpLCAnaGVsbG9cclxuJykKKyAgICAgICAgZXEodXRpbHMuZml4X2VvbHMoJ2hlbGxvXHJcbicpLCAnaGVsbG9cclxuJykKKyAgICAgICAgZXEodXRpbHMuZml4X2VvbHMoJ2hlbGxvXG5ccicpLCAnaGVsbG9cclxuXHJcbicpCisKKyAgICBkZWYgdGVzdF9jaGFyc2V0X3JpY2hjb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG5lID0gc2VsZi5hc3NlcnROb3RFcXVhbAorICAgICAgICBjc2V0MSA9IENoYXJzZXQoKQorICAgICAgICBjc2V0MiA9IENoYXJzZXQoKQorICAgICAgICBlcShjc2V0MSwgJ3VzLWFzY2lpJykKKyAgICAgICAgZXEoY3NldDEsICdVUy1BU0NJSScpCisgICAgICAgIGVxKGNzZXQxLCAnVXMtQXNDaUknKQorICAgICAgICBlcSgndXMtYXNjaWknLCBjc2V0MSkKKyAgICAgICAgZXEoJ1VTLUFTQ0lJJywgY3NldDEpCisgICAgICAgIGVxKCdVcy1Bc0NpSScsIGNzZXQxKQorICAgICAgICBuZShjc2V0MSwgJ3VzYXNjaWknKQorICAgICAgICBuZShjc2V0MSwgJ1VTQVNDSUknKQorICAgICAgICBuZShjc2V0MSwgJ1VzQXNDaUknKQorICAgICAgICBuZSgndXNhc2NpaScsIGNzZXQxKQorICAgICAgICBuZSgnVVNBU0NJSScsIGNzZXQxKQorICAgICAgICBuZSgnVXNBc0NpSScsIGNzZXQxKQorICAgICAgICBlcShjc2V0MSwgY3NldDIpCisgICAgICAgIGVxKGNzZXQyLCBjc2V0MSkKKworICAgIGRlZiB0ZXN0X2dldGFkZHJlc3NlcyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKHV0aWxzLmdldGFkZHJlc3NlcyhbJ2FwZXJzb25AZG9tLmFpbiAoQWwgUGVyc29uKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0J1ZCBQZXJzb24gPGJwZXJzb25AZG9tLmFpbj4nXSksCisgICAgICAgICAgIFsoJ0FsIFBlcnNvbicsICdhcGVyc29uQGRvbS5haW4nKSwKKyAgICAgICAgICAgICgnQnVkIFBlcnNvbicsICdicGVyc29uQGRvbS5haW4nKV0pCisKKyAgICBkZWYgdGVzdF9nZXRhZGRyZXNzZXNfbmFzdHkoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcSh1dGlscy5nZXRhZGRyZXNzZXMoWydmb286IDsnXSksIFsoJycsICcnKV0pCisgICAgICAgIGVxKHV0aWxzLmdldGFkZHJlc3NlcygKKyAgICAgICAgICAgWydbXSotLSA9fiQnXSksCisgICAgICAgICAgIFsoJycsICcnKSwgKCcnLCAnJyksICgnJywgJyotLScpXSkKKyAgICAgICAgZXEodXRpbHMuZ2V0YWRkcmVzc2VzKAorICAgICAgICAgICBbJ2ZvbzogOycsICciSmFzb24gUi4gTWFzdGFsZXIiIDxqYXNvbkBkb20uYWluPiddKSwKKyAgICAgICAgICAgWygnJywgJycpLCAoJ0phc29uIFIuIE1hc3RhbGVyJywgJ2phc29uQGRvbS5haW4nKV0pCisKKyAgICBkZWYgdGVzdF9nZXRhZGRyZXNzZXNfZW1iZWRkZWRfY29tbWVudChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBwcm9wZXIgaGFuZGxpbmcgb2YgYSBuZXN0ZWQgY29tbWVudCIiIgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgYWRkcnMgPSB1dGlscy5nZXRhZGRyZXNzZXMoWydVc2VyICgobmVzdGVkIGNvbW1lbnQpKSA8Zm9vQGJhci5jb20+J10pCisgICAgICAgIGVxKGFkZHJzWzBdWzFdLCAnZm9vQGJhci5jb20nKQorCisgICAgZGVmIHRlc3RfdXRpbHNfcXVvdGVfdW5xdW90ZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2cuYWRkX2hlYWRlcignY29udGVudC1kaXNwb3NpdGlvbicsICdhdHRhY2htZW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9J2Zvb1xcd2Fja3kibmFtZScpCisgICAgICAgIGVxKG1zZy5nZXRfZmlsZW5hbWUoKSwgJ2Zvb1xcd2Fja3kibmFtZScpCisKKyAgICBkZWYgdGVzdF9nZXRfYm9keV9lbmNvZGluZ193aXRoX2JvZ3VzX2NoYXJzZXQoc2VsZik6CisgICAgICAgIGNoYXJzZXQgPSBDaGFyc2V0KCdub3QgYSBjaGFyc2V0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGFyc2V0LmdldF9ib2R5X2VuY29kaW5nKCksICdiYXNlNjQnKQorCisgICAgZGVmIHRlc3RfZ2V0X2JvZHlfZW5jb2Rpbmdfd2l0aF91cHBlcmNhc2VfY2hhcnNldChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgnCisgICAgICAgIGVxKG1zZ1snY29udGVudC10eXBlJ10sICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04JykKKyAgICAgICAgY2hhcnNldHMgPSBtc2cuZ2V0X2NoYXJzZXRzKCkKKyAgICAgICAgZXEobGVuKGNoYXJzZXRzKSwgMSkKKyAgICAgICAgZXEoY2hhcnNldHNbMF0sICd1dGYtOCcpCisgICAgICAgIGNoYXJzZXQgPSBDaGFyc2V0KGNoYXJzZXRzWzBdKQorICAgICAgICBlcShjaGFyc2V0LmdldF9ib2R5X2VuY29kaW5nKCksICdiYXNlNjQnKQorICAgICAgICBtc2cuc2V0X3BheWxvYWQoJ2hlbGxvIHdvcmxkJywgY2hhcnNldD1jaGFyc2V0KQorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoKSwgJ2FHVnNiRzhnZDI5eWJHUT1cbicpCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksICdoZWxsbyB3b3JsZCcpCisgICAgICAgIGVxKG1zZ1snY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddLCAnYmFzZTY0JykKKyAgICAgICAgIyBUcnkgYW5vdGhlciBvbmUKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbjsgY2hhcnNldD0iVVMtQVNDSUkiJworICAgICAgICBjaGFyc2V0cyA9IG1zZy5nZXRfY2hhcnNldHMoKQorICAgICAgICBlcShsZW4oY2hhcnNldHMpLCAxKQorICAgICAgICBlcShjaGFyc2V0c1swXSwgJ3VzLWFzY2lpJykKKyAgICAgICAgY2hhcnNldCA9IENoYXJzZXQoY2hhcnNldHNbMF0pCisgICAgICAgIGVxKGNoYXJzZXQuZ2V0X2JvZHlfZW5jb2RpbmcoKSwgZW5jb2RlcnMuZW5jb2RlXzdvcjhiaXQpCisgICAgICAgIG1zZy5zZXRfcGF5bG9hZCgnaGVsbG8gd29ybGQnLCBjaGFyc2V0PWNoYXJzZXQpCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgpLCAnaGVsbG8gd29ybGQnKQorICAgICAgICBlcShtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSwgJzdiaXQnKQorCisgICAgZGVmIHRlc3RfY2hhcnNldHNfY2FzZV9pbnNlbnNpdGl2ZShzZWxmKToKKyAgICAgICAgbGMgPSBDaGFyc2V0KCd1cy1hc2NpaScpCisgICAgICAgIHVjID0gQ2hhcnNldCgnVVMtQVNDSUknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxjLmdldF9ib2R5X2VuY29kaW5nKCksIHVjLmdldF9ib2R5X2VuY29kaW5nKCkpCisKKyAgICBkZWYgdGVzdF9wYXJ0aWFsX2ZhbGxzX2luc2lkZV9tZXNzYWdlX2RlbGl2ZXJ5X3N0YXR1cyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgIyBUaGUgUGFyc2VyIGludGVyZmFjZSBwcm92aWRlcyBjaHVua3Mgb2YgZGF0YSB0byBGZWVkUGFyc2VyIGluIDgxOTIKKyAgICAgICAgIyBieXRlIGd1bHBzLiAgU0YgYnVnICMxMDc2NDg1IGZvdW5kIG9uZSBvZiB0aG9zZSBjaHVua3MgaW5zaWRlCisgICAgICAgICMgbWVzc2FnZS9kZWxpdmVyeS1zdGF0dXMgaGVhZGVyIGJsb2NrLCB3aGljaCB0cmlnZ2VyZWQgYW4KKyAgICAgICAgIyB1bnJlYWRsaW5lKCkgb2YgTmVlZE1vcmVEYXRhLgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ180My50eHQnKQorICAgICAgICBzZnAgPSBTdHJpbmdJTygpCisgICAgICAgIGl0ZXJhdG9ycy5fc3RydWN0dXJlKG1zZywgc2ZwKQorICAgICAgICBlcShzZnAuZ2V0dmFsdWUoKSwgIiIiXAorbXVsdGlwYXJ0L3JlcG9ydAorICAgIHRleHQvcGxhaW4KKyAgICBtZXNzYWdlL2RlbGl2ZXJ5LXN0YXR1cworICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgIHRleHQvcGxhaW4KKyAgICB0ZXh0L3JmYzgyMi1oZWFkZXJzCisiIiIpCisKKworCisjIFRlc3QgdGhlIGl0ZXJhdG9yL2dlbmVyYXRvcnMKK2NsYXNzIFRlc3RJdGVyYXRvcnMoVGVzdEVtYWlsQmFzZSk6CisgICAgZGVmIHRlc3RfYm9keV9saW5lX2l0ZXJhdG9yKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbmVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgICMgRmlyc3QgYSBzaW1wbGUgbm9uLW11bHRpcGFydCBtZXNzYWdlCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzAxLnR4dCcpCisgICAgICAgIGl0ID0gaXRlcmF0b3JzLmJvZHlfbGluZV9pdGVyYXRvcihtc2cpCisgICAgICAgIGxpbmVzID0gbGlzdChpdCkKKyAgICAgICAgZXEobGVuKGxpbmVzKSwgNikKKyAgICAgICAgbmVxKEVNUFRZU1RSSU5HLmpvaW4obGluZXMpLCBtc2cuZ2V0X3BheWxvYWQoKSkKKyAgICAgICAgIyBOb3cgYSBtb3JlIGNvbXBsaWNhdGVkIG11bHRpcGFydAorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMi50eHQnKQorICAgICAgICBpdCA9IGl0ZXJhdG9ycy5ib2R5X2xpbmVfaXRlcmF0b3IobXNnKQorICAgICAgICBsaW5lcyA9IGxpc3QoaXQpCisgICAgICAgIGVxKGxlbihsaW5lcyksIDQzKQorICAgICAgICBmcCA9IG9wZW5maWxlKCdtc2dfMTkudHh0JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmVxKEVNUFRZU1RSSU5HLmpvaW4obGluZXMpLCBmcC5yZWFkKCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF90eXBlZF9zdWJwYXJ0X2l0ZXJhdG9yKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDQudHh0JykKKyAgICAgICAgaXQgPSBpdGVyYXRvcnMudHlwZWRfc3VicGFydF9pdGVyYXRvcihtc2csICd0ZXh0JykKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBzdWJwYXJ0cyA9IDAKKyAgICAgICAgZm9yIHN1YnBhcnQgaW4gaXQ6CisgICAgICAgICAgICBzdWJwYXJ0cyArPSAxCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc3VicGFydC5nZXRfcGF5bG9hZCgpKQorICAgICAgICBlcShzdWJwYXJ0cywgMikKKyAgICAgICAgZXEoRU1QVFlTVFJJTkcuam9pbihsaW5lcyksICIiIlwKK2Egc2ltcGxlIGtpbmQgb2YgbWlycm9yCit0byByZWZsZWN0IHVwb24gb3VyIG93bgorYSBzaW1wbGUga2luZCBvZiBtaXJyb3IKK3RvIHJlZmxlY3QgdXBvbiBvdXIgb3duCisiIiIpCisKKyAgICBkZWYgdGVzdF90eXBlZF9zdWJwYXJ0X2l0ZXJhdG9yX2RlZmF1bHRfdHlwZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzAzLnR4dCcpCisgICAgICAgIGl0ID0gaXRlcmF0b3JzLnR5cGVkX3N1YnBhcnRfaXRlcmF0b3IobXNnLCAndGV4dCcsICdwbGFpbicpCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgc3VicGFydHMgPSAwCisgICAgICAgIGZvciBzdWJwYXJ0IGluIGl0OgorICAgICAgICAgICAgc3VicGFydHMgKz0gMQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHN1YnBhcnQuZ2V0X3BheWxvYWQoKSkKKyAgICAgICAgZXEoc3VicGFydHMsIDEpCisgICAgICAgIGVxKEVNUFRZU1RSSU5HLmpvaW4obGluZXMpLCAiIiJcCisKK0hpLAorCitEbyB5b3UgbGlrZSB0aGlzIG1lc3NhZ2U/CisKKy1NZQorIiIiKQorCisKKworY2xhc3MgVGVzdFBhcnNlcnMoVGVzdEVtYWlsQmFzZSk6CisgICAgZGVmIHRlc3RfaGVhZGVyX3BhcnNlcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgUGFyc2Ugb25seSB0aGUgaGVhZGVycyBvZiBhIGNvbXBsZXggbXVsdGlwYXJ0IE1JTUUgZG9jdW1lbnQKKyAgICAgICAgZnAgPSBvcGVuZmlsZSgnbXNnXzAyLnR4dCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1zZyA9IEhlYWRlclBhcnNlcigpLnBhcnNlKGZwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICBlcShtc2dbJ2Zyb20nXSwgJ3BwcC1yZXF1ZXN0QHp6ei5vcmcnKQorICAgICAgICBlcShtc2dbJ3RvJ10sICdwcHBAenp6Lm9yZycpCisgICAgICAgIGVxKG1zZy5nZXRfY29udGVudF90eXBlKCksICdtdWx0aXBhcnQvbWl4ZWQnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1zZy5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobXNnLmdldF9wYXlsb2FkKCksIHN0cikpCisKKyAgICBkZWYgdGVzdF93aGl0ZXNwYWNlX2NvbnRpbnVhdGlvbihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgVGhpcyBtZXNzYWdlIGNvbnRhaW5zIGEgbGluZSBhZnRlciB0aGUgU3ViamVjdDogaGVhZGVyIHRoYXQgaGFzIG9ubHkKKyAgICAgICAgIyB3aGl0ZXNwYWNlLCBidXQgaXQgaXMgbm90IGVtcHR5IQorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKCIiIlwKK0Zyb206IGFwZXJzb25AZG9tLmFpbgorVG86IGJwZXJzb25AZG9tLmFpbgorU3ViamVjdDogdGhlIG5leHQgbGluZSBoYXMgYSBzcGFjZSBvbiBpdAorXHgyMAorRGF0ZTogTW9uLCA4IEFwciAyMDAyIDE1OjA5OjE5IC0wNDAwCitNZXNzYWdlLUlEOiBzcGFtCisKK0hlcmUncyB0aGUgbWVzc2FnZSBib2R5CisiIiIpCisgICAgICAgIGVxKG1zZ1snc3ViamVjdCddLCAndGhlIG5leHQgbGluZSBoYXMgYSBzcGFjZSBvbiBpdFxuICcpCisgICAgICAgIGVxKG1zZ1snbWVzc2FnZS1pZCddLCAnc3BhbScpCisgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgpLCAiSGVyZSdzIHRoZSBtZXNzYWdlIGJvZHlcbiIpCisKKyAgICBkZWYgdGVzdF93aGl0ZXNwYWNlX2NvbnRpbnVhdGlvbl9sYXN0X2hlYWRlcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgTGlrZSB0aGUgcHJldmlvdXMgdGVzdCwgYnV0IHRoZSBzdWJqZWN0IGxpbmUgaXMgdGhlIGxhc3QKKyAgICAgICAgIyBoZWFkZXIuCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoIiIiXAorRnJvbTogYXBlcnNvbkBkb20uYWluCitUbzogYnBlcnNvbkBkb20uYWluCitEYXRlOiBNb24sIDggQXByIDIwMDIgMTU6MDk6MTkgLTA0MDAKK01lc3NhZ2UtSUQ6IHNwYW0KK1N1YmplY3Q6IHRoZSBuZXh0IGxpbmUgaGFzIGEgc3BhY2Ugb24gaXQKK1x4MjAKKworSGVyZSdzIHRoZSBtZXNzYWdlIGJvZHkKKyIiIikKKyAgICAgICAgZXEobXNnWydzdWJqZWN0J10sICd0aGUgbmV4dCBsaW5lIGhhcyBhIHNwYWNlIG9uIGl0XG4gJykKKyAgICAgICAgZXEobXNnWydtZXNzYWdlLWlkJ10sICdzcGFtJykKKyAgICAgICAgZXEobXNnLmdldF9wYXlsb2FkKCksICJIZXJlJ3MgdGhlIG1lc3NhZ2UgYm9keVxuIikKKworICAgIGRlZiB0ZXN0X2NybGZfc2VwYXJhdGlvbihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGZwID0gb3BlbmZpbGUoJ21zZ18yNi50eHQnLCBtb2RlPSdyYicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1zZyA9IFBhcnNlcigpLnBhcnNlKGZwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICBlcShsZW4obXNnLmdldF9wYXlsb2FkKCkpLCAyKQorICAgICAgICBwYXJ0MSA9IG1zZy5nZXRfcGF5bG9hZCgwKQorICAgICAgICBlcShwYXJ0MS5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKKyAgICAgICAgZXEocGFydDEuZ2V0X3BheWxvYWQoKSwgJ1NpbXBsZSBlbWFpbCB3aXRoIGF0dGFjaG1lbnQuXHJcblxyXG4nKQorICAgICAgICBwYXJ0MiA9IG1zZy5nZXRfcGF5bG9hZCgxKQorICAgICAgICBlcShwYXJ0Mi5nZXRfY29udGVudF90eXBlKCksICdhcHBsaWNhdGlvbi9yaXNjb3MnKQorCisgICAgZGVmIHRlc3RfbXVsdGlwYXJ0X2RpZ2VzdF93aXRoX2V4dHJhX21pbWVfaGVhZGVycyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG5lcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBmcCA9IG9wZW5maWxlKCdtc2dfMjgudHh0JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICMgU3RydWN0dXJlIGlzOgorICAgICAgICAjIG11bHRpcGFydC9kaWdlc3QKKyAgICAgICAgIyAgIG1lc3NhZ2UvcmZjODIyCisgICAgICAgICMgICAgIHRleHQvcGxhaW4KKyAgICAgICAgIyAgIG1lc3NhZ2UvcmZjODIyCisgICAgICAgICMgICAgIHRleHQvcGxhaW4KKyAgICAgICAgZXEobXNnLmlzX211bHRpcGFydCgpLCAxKQorICAgICAgICBlcShsZW4obXNnLmdldF9wYXlsb2FkKCkpLCAyKQorICAgICAgICBwYXJ0MSA9IG1zZy5nZXRfcGF5bG9hZCgwKQorICAgICAgICBlcShwYXJ0MS5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIGVxKHBhcnQxLmlzX211bHRpcGFydCgpLCAxKQorICAgICAgICBlcShsZW4ocGFydDEuZ2V0X3BheWxvYWQoKSksIDEpCisgICAgICAgIHBhcnQxYSA9IHBhcnQxLmdldF9wYXlsb2FkKDApCisgICAgICAgIGVxKHBhcnQxYS5pc19tdWx0aXBhcnQoKSwgMCkKKyAgICAgICAgZXEocGFydDFhLmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBuZXEocGFydDFhLmdldF9wYXlsb2FkKCksICdtZXNzYWdlIDFcbicpCisgICAgICAgICMgbmV4dCBtZXNzYWdlL3JmYzgyMgorICAgICAgICBwYXJ0MiA9IG1zZy5nZXRfcGF5bG9hZCgxKQorICAgICAgICBlcShwYXJ0Mi5nZXRfY29udGVudF90eXBlKCksICdtZXNzYWdlL3JmYzgyMicpCisgICAgICAgIGVxKHBhcnQyLmlzX211bHRpcGFydCgpLCAxKQorICAgICAgICBlcShsZW4ocGFydDIuZ2V0X3BheWxvYWQoKSksIDEpCisgICAgICAgIHBhcnQyYSA9IHBhcnQyLmdldF9wYXlsb2FkKDApCisgICAgICAgIGVxKHBhcnQyYS5pc19tdWx0aXBhcnQoKSwgMCkKKyAgICAgICAgZXEocGFydDJhLmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBuZXEocGFydDJhLmdldF9wYXlsb2FkKCksICdtZXNzYWdlIDJcbicpCisKKyAgICBkZWYgdGVzdF90aHJlZV9saW5lcyhzZWxmKToKKyAgICAgICAgIyBBIGJ1ZyByZXBvcnQgYnkgQW5kcmV3IE1jTmFtYXJhCisgICAgICAgIGxpbmVzID0gWydGcm9tOiBBbmRyZXcgUGVyc29uIDxhcGVyc29uQGRvbS5haW4nLAorICAgICAgICAgICAgICAgICAnU3ViamVjdDogVGVzdCcsCisgICAgICAgICAgICAgICAgICdEYXRlOiBUdWUsIDIwIEF1ZyAyMDAyIDE2OjQzOjQ1ICsxMDAwJ10KKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhOTC5qb2luKGxpbmVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dbJ2RhdGUnXSwgJ1R1ZSwgMjAgQXVnIDIwMDIgMTY6NDM6NDUgKzEwMDAnKQorCisgICAgZGVmIHRlc3Rfc3RyaXBfbGluZV9mZWVkX2FuZF9jYXJyaWFnZV9yZXR1cm5faW5faGVhZGVycyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgRm9yIFsgMTAwMjQ3NSBdIGVtYWlsIG1lc3NhZ2UgcGFyc2VyIGRvZXNuJ3QgaGFuZGxlIFxyXG4gY29ycmVjdGx5CisgICAgICAgIHZhbHVlMSA9ICd0ZXh0JworICAgICAgICB2YWx1ZTIgPSAnbW9yZSB0ZXh0JworICAgICAgICBtID0gJ0hlYWRlcjogJXNcclxuTmV4dC1IZWFkZXI6ICVzXHJcblxyXG5Cb2R5XHJcblxyXG4nICUgKAorICAgICAgICAgICAgdmFsdWUxLCB2YWx1ZTIpCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKKyAgICAgICAgZXEobXNnLmdldCgnSGVhZGVyJyksIHZhbHVlMSkKKyAgICAgICAgZXEobXNnLmdldCgnTmV4dC1IZWFkZXInKSwgdmFsdWUyKQorCisgICAgZGVmIHRlc3RfcmZjMjgyMl9oZWFkZXJfc3ludGF4KHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbSA9ICc+RnJvbTogZm9vXG5Gcm9tOiBiYXJcbiEiI1FVWDt+OiB6b29cblxuYm9keScKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBlcShsZW4obXNnLmtleXMoKSksIDMpCisgICAgICAgIGtleXMgPSBtc2cua2V5cygpCisgICAgICAgIGtleXMuc29ydCgpCisgICAgICAgIGVxKGtleXMsIFsnISIjUVVYO34nLCAnPkZyb20nLCAnRnJvbSddKQorICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoKSwgJ2JvZHknKQorCisgICAgZGVmIHRlc3RfcmZjMjgyMl9zcGFjZV9ub3RfYWxsb3dlZF9pbl9oZWFkZXIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtID0gJz5Gcm9tIGZvb0BleGFtcGxlLmNvbSAxMToyNTo1M1xuRnJvbTogYmFyXG4hIiNRVVg7fjogem9vXG5cbmJvZHknCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKKyAgICAgICAgZXEobGVuKG1zZy5rZXlzKCkpLCAwKQorCisgICAgZGVmIHRlc3RfcmZjMjgyMl9vbmVfY2hhcmFjdGVyX2hlYWRlcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG0gPSAnQTogZmlyc3QgaGVhZGVyXG5COiBzZWNvbmQgaGVhZGVyXG5DQzogdGhpcmQgaGVhZGVyXG5cbmJvZHknCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKKyAgICAgICAgaGVhZGVycyA9IG1zZy5rZXlzKCkKKyAgICAgICAgaGVhZGVycy5zb3J0KCkKKyAgICAgICAgZXEoaGVhZGVycywgWydBJywgJ0InLCAnQ0MnXSkKKyAgICAgICAgZXEobXNnLmdldF9wYXlsb2FkKCksICdib2R5JykKKworCisKK2NsYXNzIFRlc3RCYXNlNjQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKGJhc2U2NG1pbWUuYmFzZTY0X2xlbignaGVsbG8nKSwKKyAgICAgICAgICAgbGVuKGJhc2U2NG1pbWUuZW5jb2RlKCdoZWxsbycsIGVvbD0nJykpKQorICAgICAgICBmb3Igc2l6ZSBpbiByYW5nZSgxNSk6CisgICAgICAgICAgICBpZiAgIHNpemUgPT0gMCA6IGJzaXplID0gMAorICAgICAgICAgICAgZWxpZiBzaXplIDw9IDMgOiBic2l6ZSA9IDQKKyAgICAgICAgICAgIGVsaWYgc2l6ZSA8PSA2IDogYnNpemUgPSA4CisgICAgICAgICAgICBlbGlmIHNpemUgPD0gOSA6IGJzaXplID0gMTIKKyAgICAgICAgICAgIGVsaWYgc2l6ZSA8PSAxMjogYnNpemUgPSAxNgorICAgICAgICAgICAgZWxzZSAgICAgICAgICAgOiBic2l6ZSA9IDIwCisgICAgICAgICAgICBlcShiYXNlNjRtaW1lLmJhc2U2NF9sZW4oJ3gnKnNpemUpLCBic2l6ZSkKKworICAgIGRlZiB0ZXN0X2RlY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKGJhc2U2NG1pbWUuZGVjb2RlKCcnKSwgJycpCisgICAgICAgIGVxKGJhc2U2NG1pbWUuZGVjb2RlKCdhR1ZzYkc4PScpLCAnaGVsbG8nKQorICAgICAgICBlcShiYXNlNjRtaW1lLmRlY29kZSgnYUdWc2JHOD0nLCAnWCcpLCAnaGVsbG8nKQorICAgICAgICBlcShiYXNlNjRtaW1lLmRlY29kZSgnYUdWc2JHOE5DbmR2Y214a1xuJywgJ1gnKSwgJ2hlbGxvWHdvcmxkJykKKworICAgIGRlZiB0ZXN0X2VuY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKGJhc2U2NG1pbWUuZW5jb2RlKCcnKSwgJycpCisgICAgICAgIGVxKGJhc2U2NG1pbWUuZW5jb2RlKCdoZWxsbycpLCAnYUdWc2JHOD1cbicpCisgICAgICAgICMgVGVzdCB0aGUgYmluYXJ5IGZsYWcKKyAgICAgICAgZXEoYmFzZTY0bWltZS5lbmNvZGUoJ2hlbGxvXG4nKSwgJ2FHVnNiRzhLXG4nKQorICAgICAgICBlcShiYXNlNjRtaW1lLmVuY29kZSgnaGVsbG9cbicsIDApLCAnYUdWc2JHOE5DZz09XG4nKQorICAgICAgICAjIFRlc3QgdGhlIG1heGxpbmVsZW4gYXJnCisgICAgICAgIGVxKGJhc2U2NG1pbWUuZW5jb2RlKCd4eHh4ICcgKiAyMCwgbWF4bGluZWxlbj00MCksICIiIlwKK2VIaDRlQ0I0ZUhoNElIaDRlSGdnZUhoNGVDQjRlSGg0SUhoNGVIZ2cKK2VIaDRlQ0I0ZUhoNElIaDRlSGdnZUhoNGVDQjRlSGg0SUhoNGVIZ2cKK2VIaDRlQ0I0ZUhoNElIaDRlSGdnZUhoNGVDQjRlSGg0SUhoNGVIZ2cKK2VIaDRlQ0I0ZUhoNElBPT0KKyIiIikKKyAgICAgICAgIyBUZXN0IHRoZSBlb2wgYXJndW1lbnQKKyAgICAgICAgZXEoYmFzZTY0bWltZS5lbmNvZGUoJ3h4eHggJyAqIDIwLCBtYXhsaW5lbGVuPTQwLCBlb2w9J1xyXG4nKSwgIiIiXAorZUhoNGVDQjRlSGg0SUhoNGVIZ2dlSGg0ZUNCNGVIaDRJSGg0ZUhnZ1xyCitlSGg0ZUNCNGVIaDRJSGg0ZUhnZ2VIaDRlQ0I0ZUhoNElIaDRlSGdnXHIKK2VIaDRlQ0I0ZUhoNElIaDRlSGdnZUhoNGVDQjRlSGg0SUhoNGVIZ2dccgorZUhoNGVDQjRlSGg0SUE9PVxyCisiIiIpCisKKyAgICBkZWYgdGVzdF9oZWFkZXJfZW5jb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgaGUgPSBiYXNlNjRtaW1lLmhlYWRlcl9lbmNvZGUKKyAgICAgICAgZXEoaGUoJ2hlbGxvJyksICc9P2lzby04ODU5LTE/Yj9hR1ZzYkc4PT89JykKKyAgICAgICAgZXEoaGUoJ2hlbGxvXG53b3JsZCcpLCAnPT9pc28tODg1OS0xP2I/YUdWc2JHOE5DbmR2Y214az89JykKKyAgICAgICAgIyBUZXN0IHRoZSBjaGFyc2V0IG9wdGlvbgorICAgICAgICBlcShoZSgnaGVsbG8nLCBjaGFyc2V0PSdpc28tODg1OS0yJyksICc9P2lzby04ODU5LTI/Yj9hR1ZzYkc4PT89JykKKyAgICAgICAgIyBUZXN0IHRoZSBrZWVwX2VvbHMgZmxhZworICAgICAgICBlcShoZSgnaGVsbG9cbndvcmxkJywga2VlcF9lb2xzPVRydWUpLAorICAgICAgICAgICAnPT9pc28tODg1OS0xP2I/YUdWc2JHOEtkMjl5YkdRPT89JykKKyAgICAgICAgIyBUZXN0IHRoZSBtYXhsaW5lbGVuIGFyZ3VtZW50CisgICAgICAgIGVxKGhlKCd4eHh4ICcgKiAyMCwgbWF4bGluZWxlbj00MCksICIiIlwKKz0/aXNvLTg4NTktMT9iP2VIaDRlQ0I0ZUhoNElIaDRlSGdnZUhnPT89CisgPT9pc28tODg1OS0xP2I/ZUhnZ2VIaDRlQ0I0ZUhoNElIaDRlSGc9Pz0KKyA9P2lzby04ODU5LTE/Yj9JSGg0ZUhnZ2VIaDRlQ0I0ZUhoNElIZz0/PQorID0/aXNvLTg4NTktMT9iP2VIaDRJSGg0ZUhnZ2VIaDRlQ0I0ZUhnPT89CisgPT9pc28tODg1OS0xP2I/ZUNCNGVIaDRJSGg0ZUhnZ2VIaDRlQ0E9Pz0KKyA9P2lzby04ODU5LTE/Yj9lSGg0ZUNCNGVIaDRJSGg0ZUhnZz89IiIiKQorICAgICAgICAjIFRlc3QgdGhlIGVvbCBhcmd1bWVudAorICAgICAgICBlcShoZSgneHh4eCAnICogMjAsIG1heGxpbmVsZW49NDAsIGVvbD0nXHJcbicpLCAiIiJcCis9P2lzby04ODU5LTE/Yj9lSGg0ZUNCNGVIaDRJSGg0ZUhnZ2VIZz0/PVxyCisgPT9pc28tODg1OS0xP2I/ZUhnZ2VIaDRlQ0I0ZUhoNElIaDRlSGc9Pz1ccgorID0/aXNvLTg4NTktMT9iP0lIaDRlSGdnZUhoNGVDQjRlSGg0SUhnPT89XHIKKyA9P2lzby04ODU5LTE/Yj9lSGg0SUhoNGVIZ2dlSGg0ZUNCNGVIZz0/PVxyCisgPT9pc28tODg1OS0xP2I/ZUNCNGVIaDRJSGg0ZUhnZ2VIaDRlQ0E9Pz1ccgorID0/aXNvLTg4NTktMT9iP2VIaDRlQ0I0ZUhoNElIaDRlSGdnPz0iIiIpCisKKworCitjbGFzcyBUZXN0UXVvcHJpKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuaGxpdCA9IFtjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdhJyksIG9yZCgneicpKzEpXSArIFwKKyAgICAgICAgICAgICAgICAgICAgW2Nocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ0EnKSwgb3JkKCdaJykrMSldICsgXAorICAgICAgICAgICAgICAgICAgICBbY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnMCcpLCBvcmQoJzknKSsxKV0gKyBcCisgICAgICAgICAgICAgICAgICAgIFsnIScsICcqJywgJysnLCAnLScsICcvJywgJyAnXQorICAgICAgICBzZWxmLmhub24gPSBbY2hyKHgpIGZvciB4IGluIHJhbmdlKDI1NikgaWYgY2hyKHgpIG5vdCBpbiBzZWxmLmhsaXRdCisgICAgICAgIGFzc2VydCBsZW4oc2VsZi5obGl0KSArIGxlbihzZWxmLmhub24pID09IDI1NgorICAgICAgICBzZWxmLmJsaXQgPSBbY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnICcpLCBvcmQoJ34nKSsxKV0gKyBbJ1x0J10KKyAgICAgICAgc2VsZi5ibGl0LnJlbW92ZSgnPScpCisgICAgICAgIHNlbGYuYm5vbiA9IFtjaHIoeCkgZm9yIHggaW4gcmFuZ2UoMjU2KSBpZiBjaHIoeCkgbm90IGluIHNlbGYuYmxpdF0KKyAgICAgICAgYXNzZXJ0IGxlbihzZWxmLmJsaXQpICsgbGVuKHNlbGYuYm5vbikgPT0gMjU2CisKKyAgICBkZWYgdGVzdF9oZWFkZXJfcXVvcHJpX2NoZWNrKHNlbGYpOgorICAgICAgICBmb3IgYyBpbiBzZWxmLmhsaXQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHF1b3ByaW1pbWUuaGVhZGVyX3F1b3ByaV9jaGVjayhjKSkKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5obm9uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1b3ByaW1pbWUuaGVhZGVyX3F1b3ByaV9jaGVjayhjKSkKKworICAgIGRlZiB0ZXN0X2JvZHlfcXVvcHJpX2NoZWNrKHNlbGYpOgorICAgICAgICBmb3IgYyBpbiBzZWxmLmJsaXQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHF1b3ByaW1pbWUuYm9keV9xdW9wcmlfY2hlY2soYykpCisgICAgICAgIGZvciBjIGluIHNlbGYuYm5vbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdW9wcmltaW1lLmJvZHlfcXVvcHJpX2NoZWNrKGMpKQorCisgICAgZGVmIHRlc3RfaGVhZGVyX3F1b3ByaV9sZW4oc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBocWwgPSBxdW9wcmltaW1lLmhlYWRlcl9xdW9wcmlfbGVuCisgICAgICAgIGVuYyA9IHF1b3ByaW1pbWUuaGVhZGVyX2VuY29kZQorICAgICAgICBmb3IgcyBpbiAoJ2hlbGxvJywgJ2hAZUBsQGxAb0AnKToKKyAgICAgICAgICAgICMgRW1wdHkgY2hhcnNldCBhbmQgbm8gbGluZS1lbmRpbmdzLiAgNyA9PSBSRkMgY2hyb21lCisgICAgICAgICAgICBlcShocWwocyksIGxlbihlbmMocywgY2hhcnNldD0nJywgZW9sPScnKSktNykKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5obGl0OgorICAgICAgICAgICAgZXEoaHFsKGMpLCAxKQorICAgICAgICBmb3IgYyBpbiBzZWxmLmhub246CisgICAgICAgICAgICBlcShocWwoYyksIDMpCisKKyAgICBkZWYgdGVzdF9ib2R5X3F1b3ByaV9sZW4oc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBicWwgPSBxdW9wcmltaW1lLmJvZHlfcXVvcHJpX2xlbgorICAgICAgICBmb3IgYyBpbiBzZWxmLmJsaXQ6CisgICAgICAgICAgICBlcShicWwoYyksIDEpCisgICAgICAgIGZvciBjIGluIHNlbGYuYm5vbjoKKyAgICAgICAgICAgIGVxKGJxbChjKSwgMykKKworICAgIGRlZiB0ZXN0X3F1b3RlX3VucXVvdGVfaWRlbXBvdGVudChzZWxmKToKKyAgICAgICAgZm9yIHggaW4gcmFuZ2UoMjU2KToKKyAgICAgICAgICAgIGMgPSBjaHIoeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvcHJpbWltZS51bnF1b3RlKHF1b3ByaW1pbWUucXVvdGUoYykpLCBjKQorCisgICAgZGVmIHRlc3RfaGVhZGVyX2VuY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGhlID0gcXVvcHJpbWltZS5oZWFkZXJfZW5jb2RlCisgICAgICAgIGVxKGhlKCdoZWxsbycpLCAnPT9pc28tODg1OS0xP3E/aGVsbG8/PScpCisgICAgICAgIGVxKGhlKCdoZWxsb1xud29ybGQnKSwgJz0/aXNvLTg4NTktMT9xP2hlbGxvPTBEPTBBd29ybGQ/PScpCisgICAgICAgICMgVGVzdCB0aGUgY2hhcnNldCBvcHRpb24KKyAgICAgICAgZXEoaGUoJ2hlbGxvJywgY2hhcnNldD0naXNvLTg4NTktMicpLCAnPT9pc28tODg1OS0yP3E/aGVsbG8/PScpCisgICAgICAgICMgVGVzdCB0aGUga2VlcF9lb2xzIGZsYWcKKyAgICAgICAgZXEoaGUoJ2hlbGxvXG53b3JsZCcsIGtlZXBfZW9scz1UcnVlKSwgJz0/aXNvLTg4NTktMT9xP2hlbGxvPTBBd29ybGQ/PScpCisgICAgICAgICMgVGVzdCBhIG5vbi1BU0NJSSBjaGFyYWN0ZXIKKyAgICAgICAgZXEoaGUoJ2hlbGxvXHhjN3RoZXJlJyksICc9P2lzby04ODU5LTE/cT9oZWxsbz1DN3RoZXJlPz0nKQorICAgICAgICAjIFRlc3QgdGhlIG1heGxpbmVsZW4gYXJndW1lbnQKKyAgICAgICAgZXEoaGUoJ3h4eHggJyAqIDIwLCBtYXhsaW5lbGVuPTQwKSwgIiIiXAorPT9pc28tODg1OS0xP3E/eHh4eF94eHh4X3h4eHhfeHh4eF94eD89CisgPT9pc28tODg1OS0xP3E/eHhfeHh4eF94eHh4X3h4eHhfeHh4eD89CisgPT9pc28tODg1OS0xP3E/X3h4eHhfeHh4eF94eHh4X3h4eHhfeD89CisgPT9pc28tODg1OS0xP3E/eHh4X3h4eHhfeHh4eF94eHh4X3h4eD89CisgPT9pc28tODg1OS0xP3E/eF94eHh4X3h4eHhfPz0iIiIpCisgICAgICAgICMgVGVzdCB0aGUgZW9sIGFyZ3VtZW50CisgICAgICAgIGVxKGhlKCd4eHh4ICcgKiAyMCwgbWF4bGluZWxlbj00MCwgZW9sPSdcclxuJyksICIiIlwKKz0/aXNvLTg4NTktMT9xP3h4eHhfeHh4eF94eHh4X3h4eHhfeHg/PVxyCisgPT9pc28tODg1OS0xP3E/eHhfeHh4eF94eHh4X3h4eHhfeHh4eD89XHIKKyA9P2lzby04ODU5LTE/cT9feHh4eF94eHh4X3h4eHhfeHh4eF94Pz1ccgorID0/aXNvLTg4NTktMT9xP3h4eF94eHh4X3h4eHhfeHh4eF94eHg/PVxyCisgPT9pc28tODg1OS0xP3E/eF94eHh4X3h4eHhfPz0iIiIpCisKKyAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShxdW9wcmltaW1lLmRlY29kZSgnJyksICcnKQorICAgICAgICBlcShxdW9wcmltaW1lLmRlY29kZSgnaGVsbG8nKSwgJ2hlbGxvJykKKyAgICAgICAgZXEocXVvcHJpbWltZS5kZWNvZGUoJ2hlbGxvJywgJ1gnKSwgJ2hlbGxvJykKKyAgICAgICAgZXEocXVvcHJpbWltZS5kZWNvZGUoJ2hlbGxvXG53b3JsZCcsICdYJyksICdoZWxsb1h3b3JsZCcpCisKKyAgICBkZWYgdGVzdF9lbmNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShxdW9wcmltaW1lLmVuY29kZSgnJyksICcnKQorICAgICAgICBlcShxdW9wcmltaW1lLmVuY29kZSgnaGVsbG8nKSwgJ2hlbGxvJykKKyAgICAgICAgIyBUZXN0IHRoZSBiaW5hcnkgZmxhZworICAgICAgICBlcShxdW9wcmltaW1lLmVuY29kZSgnaGVsbG9cclxud29ybGQnKSwgJ2hlbGxvXG53b3JsZCcpCisgICAgICAgIGVxKHF1b3ByaW1pbWUuZW5jb2RlKCdoZWxsb1xyXG53b3JsZCcsIDApLCAnaGVsbG9cbndvcmxkJykKKyAgICAgICAgIyBUZXN0IHRoZSBtYXhsaW5lbGVuIGFyZworICAgICAgICBlcShxdW9wcmltaW1lLmVuY29kZSgneHh4eCAnICogMjAsIG1heGxpbmVsZW49NDApLCAiIiJcCit4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHg9CisgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHg9Cit4IHh4eHggeHh4eCB4eHh4IHh4eHg9MjAiIiIpCisgICAgICAgICMgVGVzdCB0aGUgZW9sIGFyZ3VtZW50CisgICAgICAgIGVxKHF1b3ByaW1pbWUuZW5jb2RlKCd4eHh4ICcgKiAyMCwgbWF4bGluZWxlbj00MCwgZW9sPSdcclxuJyksICIiIlwKK3h4eHggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eD1ccgorIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4PVxyCit4IHh4eHggeHh4eCB4eHh4IHh4eHg9MjAiIiIpCisgICAgICAgIGVxKHF1b3ByaW1pbWUuZW5jb2RlKCIiIlwKK29uZSBsaW5lCisKK3R3byBsaW5lIiIiKSwgIiIiXAorb25lIGxpbmUKKwordHdvIGxpbmUiIiIpCisKKworCisjIFRlc3QgdGhlIENoYXJzZXQgY2xhc3MKK2NsYXNzIFRlc3RDaGFyc2V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZyb20gZW1haWwgaW1wb3J0IGNoYXJzZXQgYXMgQ2hhcnNldE1vZHVsZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgQ2hhcnNldE1vZHVsZS5DSEFSU0VUU1snZmFrZSddCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2lkZW1wb3RlbnQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIE1ha2Ugc3VyZSB1cy1hc2NpaSA9IG5vIFVuaWNvZGUgY29udmVyc2lvbgorICAgICAgICBjID0gQ2hhcnNldCgndXMtYXNjaWknKQorICAgICAgICBzID0gJ0hlbGxvIFdvcmxkIScKKyAgICAgICAgc3AgPSBjLnRvX3NwbGl0dGFibGUocykKKyAgICAgICAgZXEocywgYy5mcm9tX3NwbGl0dGFibGUoc3ApKQorICAgICAgICAjIHRlc3QgOC1iaXQgaWRlbXBvdGVuY3kgd2l0aCB1cy1hc2NpaQorICAgICAgICBzID0gJ1x4YTRceGEyXHhhNFx4YTRceGE0XHhhNlx4YTRceGE4XHhhNFx4YWEnCisgICAgICAgIHNwID0gYy50b19zcGxpdHRhYmxlKHMpCisgICAgICAgIGVxKHMsIGMuZnJvbV9zcGxpdHRhYmxlKHNwKSkKKworICAgIGRlZiB0ZXN0X2JvZHlfZW5jb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgIyBUcnkgYSBjaGFyc2V0IHdpdGggUVAgYm9keSBlbmNvZGluZworICAgICAgICBjID0gQ2hhcnNldCgnaXNvLTg4NTktMScpCisgICAgICAgIGVxKCdoZWxsbyB3PUY2cmxkJywgYy5ib2R5X2VuY29kZSgnaGVsbG8gd1x4ZjZybGQnKSkKKyAgICAgICAgIyBUcnkgYSBjaGFyc2V0IHdpdGggQmFzZTY0IGJvZHkgZW5jb2RpbmcKKyAgICAgICAgYyA9IENoYXJzZXQoJ3V0Zi04JykKKyAgICAgICAgZXEoJ2FHVnNiRzhnZDI5eWJHUT1cbicsIGMuYm9keV9lbmNvZGUoJ2hlbGxvIHdvcmxkJykpCisgICAgICAgICMgVHJ5IGEgY2hhcnNldCB3aXRoIE5vbmUgYm9keSBlbmNvZGluZworICAgICAgICBjID0gQ2hhcnNldCgndXMtYXNjaWknKQorICAgICAgICBlcSgnaGVsbG8gd29ybGQnLCBjLmJvZHlfZW5jb2RlKCdoZWxsbyB3b3JsZCcpKQorICAgICAgICAjIFRyeSB0aGUgY29udmVydCBhcmd1bWVudCwgd2hlcmUgaW5wdXQgY29kZWMgIT0gb3V0cHV0IGNvZGVjCisgICAgICAgIGMgPSBDaGFyc2V0KCdldWMtanAnKQorICAgICAgICAjIFdpdGggYXBvbG9naWVzIHRvIFRva2lvIEtpa3VjaGkgOykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXEoJ1x4MWIkQjVGQ087fklXXHgxYihCJywKKyAgICAgICAgICAgICAgIGMuYm9keV9lbmNvZGUoJ1x4YjVceGM2XHhjM1x4Y2ZceGJiXHhmZVx4YzlceGQ3JykpCisgICAgICAgICAgICBlcSgnXHhiNVx4YzZceGMzXHhjZlx4YmJceGZlXHhjOVx4ZDcnLAorICAgICAgICAgICAgICAgYy5ib2R5X2VuY29kZSgnXHhiNVx4YzZceGMzXHhjZlx4YmJceGZlXHhjOVx4ZDcnLCBGYWxzZSkpCisgICAgICAgIGV4Y2VwdCBMb29rdXBFcnJvcjoKKyAgICAgICAgICAgICMgV2UgcHJvYmFibHkgZG9uJ3QgaGF2ZSB0aGUgSmFwYW5lc2UgY29kZWNzIGluc3RhbGxlZAorICAgICAgICAgICAgcGFzcworICAgICAgICAjIFRlc3RpbmcgU0YgYnVnICM2MjU1MDksIHdoaWNoIHdlIGhhdmUgdG8gZmFrZSwgc2luY2UgdGhlcmUgYXJlIG5vCisgICAgICAgICMgYnVpbHQtaW4gZW5jb2RpbmdzIHdoZXJlIHRoZSBoZWFkZXIgZW5jb2RpbmcgaXMgUVAgYnV0IHRoZSBib2R5CisgICAgICAgICMgZW5jb2RpbmcgaXMgbm90LgorICAgICAgICBmcm9tIGVtYWlsIGltcG9ydCBjaGFyc2V0IGFzIENoYXJzZXRNb2R1bGUKKyAgICAgICAgQ2hhcnNldE1vZHVsZS5hZGRfY2hhcnNldCgnZmFrZScsIENoYXJzZXRNb2R1bGUuUVAsIE5vbmUpCisgICAgICAgIGMgPSBDaGFyc2V0KCdmYWtlJykKKyAgICAgICAgZXEoJ2hlbGxvIHdceGY2cmxkJywgYy5ib2R5X2VuY29kZSgnaGVsbG8gd1x4ZjZybGQnKSkKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfY2hhcnNldF9uYW1lKHNlbGYpOgorICAgICAgICBjaGFyc2V0ID0gQ2hhcnNldCh1J3VzLWFzY2lpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY2hhcnNldCksICd1cy1hc2NpaScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5DaGFyc2V0RXJyb3IsIENoYXJzZXQsICdhc2NceGZmaWknKQorCisKKworIyBUZXN0IG11bHRpbGluZ3VhbCBNSU1FIGhlYWRlcnMuCitjbGFzcyBUZXN0SGVhZGVyKFRlc3RFbWFpbEJhc2UpOgorICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgaCA9IEhlYWRlcignSGVsbG8gV29ybGQhJykKKyAgICAgICAgZXEoaC5lbmNvZGUoKSwgJ0hlbGxvIFdvcmxkIScpCisgICAgICAgIGguYXBwZW5kKCcgR29vZGJ5ZSBXb3JsZCEnKQorICAgICAgICBlcShoLmVuY29kZSgpLCAnSGVsbG8gV29ybGQhICBHb29kYnllIFdvcmxkIScpCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfc3VycHJpc2Uoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCisgICAgICAgIGggPSBIZWFkZXIoJ0hlbGxvIFdvcmxkIScpCisgICAgICAgIGVxKGguZW5jb2RlKCksICdIZWxsbyBXb3JsZCEnKQorICAgICAgICBoLmFwcGVuZCgnR29vZGJ5ZSBXb3JsZCEnKQorICAgICAgICBlcShoLmVuY29kZSgpLCAnSGVsbG8gV29ybGQhIEdvb2RieWUgV29ybGQhJykKKworICAgIGRlZiB0ZXN0X2hlYWRlcl9uZWVkc19ub19kZWNvZGluZyhzZWxmKToKKyAgICAgICAgaCA9ICdubyBkZWNvZGluZyBuZWVkZWQnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlX2hlYWRlcihoKSwgWyhoLCBOb25lKV0pCisKKyAgICBkZWYgdGVzdF9sb25nKHNlbGYpOgorICAgICAgICBoID0gSGVhZGVyKCJJIGFtIHRoZSB2ZXJ5IG1vZGVsIG9mIGEgbW9kZXJuIE1ham9yLUdlbmVyYWw7IEkndmUgaW5mb3JtYXRpb24gdmVnZXRhYmxlLCBhbmltYWwsIGFuZCBtaW5lcmFsOyBJIGtub3cgdGhlIGtpbmdzIG9mIEVuZ2xhbmQsIGFuZCBJIHF1b3RlIHRoZSBmaWdodHMgaGlzdG9yaWNhbCBmcm9tIE1hcmF0aG9uIHRvIFdhdGVybG9vLCBpbiBvcmRlciBjYXRlZ29yaWNhbDsgSSdtIHZlcnkgd2VsbCBhY3F1YWludGVkLCB0b28sIHdpdGggbWF0dGVycyBtYXRoZW1hdGljYWw7IEkgdW5kZXJzdGFuZCBlcXVhdGlvbnMsIGJvdGggdGhlIHNpbXBsZSBhbmQgcXVhZHJhdGljYWw7IGFib3V0IGJpbm9taWFsIHRoZW9yZW0gSSdtIHRlZW1pbmcgd2l0aCBhIGxvdCBvJyBuZXdzLCB3aXRoIG1hbnkgY2hlZXJmdWwgZmFjdHMgYWJvdXQgdGhlIHNxdWFyZSBvZiB0aGUgaHlwb3RlbnVzZS4iLAorICAgICAgICAgICAgICAgICAgIG1heGxpbmVsZW49NzYpCisgICAgICAgIGZvciBsIGluIGguZW5jb2RlKHNwbGl0Y2hhcnM9JyAnKS5zcGxpdCgnXG4gJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGwpIDw9IDc2KQorCisgICAgZGVmIHRlc3RfbXVsdGlsaW5ndWFsKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBnID0gQ2hhcnNldCgiaXNvLTg4NTktMSIpCisgICAgICAgIGN6ID0gQ2hhcnNldCgiaXNvLTg4NTktMiIpCisgICAgICAgIHV0ZjggPSBDaGFyc2V0KCJ1dGYtOCIpCisgICAgICAgIGdfaGVhZCA9ICJEaWUgTWlldGVyIHRyZXRlbiBoaWVyIGVpbiB3ZXJkZW4gbWl0IGVpbmVtIEZvZXJkZXJiYW5kIGtvbWZvcnRhYmVsIGRlbiBLb3JyaWRvciBlbnRsYW5nLCBhbiBzXHhmY2RsXHhmY25kaXNjaGVuIFdhbmRnZW1ceGU0bGRlbiB2b3JiZWksIGdlZ2VuIGRpZSByb3RpZXJlbmRlbiBLbGluZ2VuIGJlZlx4ZjZyZGVydC4gIgorICAgICAgICBjel9oZWFkID0gIkZpbmFuXHhlOG5pIG1ldHJvcG9sZSBzZSBocm91dGlseSBwb2QgdGxha2VtIGplamljaCBkXHhmOXZ0aXB1Li4gIgorICAgICAgICB1dGY4X2hlYWQgPSB1Ilx1NmI2M1x1NzhiYVx1MzA2Ylx1OGEwMFx1MzA0Nlx1MzA2OFx1N2ZmYlx1OGEzM1x1MzA2Zlx1MzA1NVx1MzA4Y1x1MzA2Nlx1MzA0NFx1MzA3ZVx1MzA1Ylx1MzA5M1x1MzAwMlx1NGUwMFx1OTBlOFx1MzA2Zlx1MzBjOVx1MzBhNFx1MzBjNFx1OGE5ZVx1MzA2N1x1MzA1OVx1MzA0Y1x1MzAwMVx1MzA0Mlx1MzA2OFx1MzA2Zlx1MzA2N1x1MzA1Zlx1MzA4OVx1MzA4MVx1MzA2N1x1MzA1OVx1MzAwMlx1NWI5Zlx1OTY5Ylx1MzA2Ylx1MzA2Zlx1MzAwY1dlbm4gaXN0IGRhcyBOdW5zdHVjayBnaXQgdW5kIFNsb3Rlcm1leWVyPyBKYSEgQmVpaGVyaHVuZCBkYXMgT2RlciBkaWUgRmxpcHBlcndhbGR0IGdlcnNwdXQuXHUzMDBkXHUzMDY4XHU4YTAwXHUzMDYzXHUzMDY2XHUzMDQ0XHUzMDdlXHUzMDU5XHUzMDAyIi5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgaCA9IEhlYWRlcihnX2hlYWQsIGcpCisgICAgICAgIGguYXBwZW5kKGN6X2hlYWQsIGN6KQorICAgICAgICBoLmFwcGVuZCh1dGY4X2hlYWQsIHV0ZjgpCisgICAgICAgIGVuYyA9IGguZW5jb2RlKCkKKyAgICAgICAgZXEoZW5jLCAiIiJcCis9P2lzby04ODU5LTE/cT9EaWVfTWlldGVyX3RyZXRlbl9oaWVyX2Vpbl93ZXJkZW5fbWl0X2VpbmVtX0ZvZXJkZXJiYW5kX2tvPz0KKyA9P2lzby04ODU5LTE/cT9tZm9ydGFiZWxfZGVuX0tvcnJpZG9yX2VudGxhbmc9MkNfYW5fcz1GQ2RsPUZDbmRpc2NoZW5fV2FuPz0KKyA9P2lzby04ODU5LTE/cT9kZ2VtPUU0bGRlbl92b3JiZWk9MkNfZ2VnZW5fZGllX3JvdGllcmVuZGVuX0tsaW5nZW5fYmVmPUY2Pz0KKyA9P2lzby04ODU5LTE/cT9yZGVydD0yRV8/PSA9P2lzby04ODU5LTI/cT9GaW5hbj1FOG5pX21ldHJvcG9sZV9zZV9ocm91dGlseT89CisgPT9pc28tODg1OS0yP3E/X3BvZF90bGFrZW1famVqaWNoX2Q9Rjl2dGlwdT0yRT0yRV8/PSA9P3V0Zi04P2I/NXEyajU2SzY/PQorID0/dXRmLTg/Yj80NEdyNktpQTQ0R0c0NEdvNTcrNzZLaXo0NEd2NDRHVjQ0S000NEdtNDRHRTQ0Rys0NEdiNDRLVDQ0Q0M/PQorID0/dXRmLTg/Yj81TGlBNllPbzQ0R3Y0NE9KNDRLazQ0T0U2S3FlNDRHbjQ0R1o0NEdNNDRDQjQ0R0M0NEdvNDRHdjQ0R24/PQorID0/dXRmLTg/Yj80NEdmNDRLSjQ0S0I0NEduNDRHWjQ0Q0M1YTZmNlpxYjQ0R3I0NEd2NDRDTVYyVnViaUJwYzNRZ1pHRno/PQorID0/dXRmLTg/cT9fTnVuc3R1Y2tfZ2l0X3VuZF9TbG90ZXJtZXllcj0zRl9KYSFfQmVpaGVyaHVuZF9kYXNfT2Rlcl9kaWVfRmw/PQorID0/dXRmLTg/Yj9hWEJ3WlhKM1lXeGtkQ0JuWlhKemNIVjBMdU9BamVPQnFPaW9nT09CbytPQnB1T0JoT09CdnVPQm1RPT0/PQorID0/dXRmLTg/Yj80NENDPz0iIiIpCisgICAgICAgIGVxKGRlY29kZV9oZWFkZXIoZW5jKSwKKyAgICAgICAgICAgWyhnX2hlYWQsICJpc28tODg1OS0xIiksIChjel9oZWFkLCAiaXNvLTg4NTktMiIpLAorICAgICAgICAgICAgKHV0ZjhfaGVhZCwgInV0Zi04IildKQorICAgICAgICB1c3RyID0gdW5pY29kZShoKQorICAgICAgICBlcSh1c3RyLmVuY29kZSgndXRmLTgnKSwKKyAgICAgICAgICAgJ0RpZSBNaWV0ZXIgdHJldGVuIGhpZXIgZWluIHdlcmRlbiBtaXQgZWluZW0gRm9lcmRlcmJhbmQgJworICAgICAgICAgICAna29tZm9ydGFiZWwgZGVuIEtvcnJpZG9yIGVudGxhbmcsIGFuIHNceGMzXHhiY2RsXHhjM1x4YmNuZGlzY2hlbiAnCisgICAgICAgICAgICdXYW5kZ2VtXHhjM1x4YTRsZGVuIHZvcmJlaSwgZ2VnZW4gZGllIHJvdGllcmVuZGVuIEtsaW5nZW4gJworICAgICAgICAgICAnYmVmXHhjM1x4YjZyZGVydC4gRmluYW5ceGM0XHg4ZG5pIG1ldHJvcG9sZSBzZSBocm91dGlseSBwb2QgJworICAgICAgICAgICAndGxha2VtIGplamljaCBkXHhjNVx4YWZ2dGlwdS4uIFx4ZTZceGFkXHhhM1x4ZTdceGEyXHhiYVx4ZTNceDgxJworICAgICAgICAgICAnXHhhYlx4ZThceGE4XHg4MFx4ZTNceDgxXHg4Nlx4ZTNceDgxXHhhOFx4ZTdceGJmXHhiYlx4ZThceGE4XHhiMycKKyAgICAgICAgICAgJ1x4ZTNceDgxXHhhZlx4ZTNceDgxXHg5NVx4ZTNceDgyXHg4Y1x4ZTNceDgxXHhhNlx4ZTNceDgxXHg4NFx4ZTMnCisgICAgICAgICAgICdceDgxXHhiZVx4ZTNceDgxXHg5Ylx4ZTNceDgyXHg5M1x4ZTNceDgwXHg4Mlx4ZTRceGI4XHg4MFx4ZTlceDgzJworICAgICAgICAgICAnXHhhOFx4ZTNceDgxXHhhZlx4ZTNceDgzXHg4OVx4ZTNceDgyXHhhNFx4ZTNceDgzXHg4NFx4ZThceGFhXHg5ZScKKyAgICAgICAgICAgJ1x4ZTNceDgxXHhhN1x4ZTNceDgxXHg5OVx4ZTNceDgxXHg4Y1x4ZTNceDgwXHg4MVx4ZTNceDgxXHg4Mlx4ZTMnCisgICAgICAgICAgICdceDgxXHhhOFx4ZTNceDgxXHhhZlx4ZTNceDgxXHhhN1x4ZTNceDgxXHg5Zlx4ZTNceDgyXHg4OVx4ZTNceDgyJworICAgICAgICAgICAnXHg4MVx4ZTNceDgxXHhhN1x4ZTNceDgxXHg5OVx4ZTNceDgwXHg4Mlx4ZTVceGFlXHg5Zlx4ZTlceDlhXHg5YicKKyAgICAgICAgICAgJ1x4ZTNceDgxXHhhYlx4ZTNceDgxXHhhZlx4ZTNceDgwXHg4Y1dlbm4gaXN0IGRhcyBOdW5zdHVjayBnaXQgJworICAgICAgICAgICAndW5kIFNsb3Rlcm1leWVyPyBKYSEgQmVpaGVyaHVuZCBkYXMgT2RlciBkaWUgRmxpcHBlcndhbGR0ICcKKyAgICAgICAgICAgJ2dlcnNwdXQuXHhlM1x4ODBceDhkXHhlM1x4ODFceGE4XHhlOFx4YThceDgwXHhlM1x4ODFceGEzXHhlM1x4ODEnCisgICAgICAgICAgICdceGE2XHhlM1x4ODFceDg0XHhlM1x4ODFceGJlXHhlM1x4ODFceDk5XHhlM1x4ODBceDgyJykKKyAgICAgICAgIyBUZXN0IG1ha2VfaGVhZGVyKCkKKyAgICAgICAgbmV3aCA9IG1ha2VfaGVhZGVyKGRlY29kZV9oZWFkZXIoZW5jKSkKKyAgICAgICAgZXEobmV3aCwgZW5jKQorCisgICAgZGVmIHRlc3RfaGVhZGVyX2N0b3JfZGVmYXVsdF9hcmdzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBoID0gSGVhZGVyKCkKKyAgICAgICAgZXEoaCwgJycpCisgICAgICAgIGguYXBwZW5kKCdmb28nLCBDaGFyc2V0KCdpc28tODg1OS0xJykpCisgICAgICAgIGVxKGgsICc9P2lzby04ODU5LTE/cT9mb28/PScpCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9tYXhsaW5lbGVuKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBoc3RyID0gJ0EgdmVyeSBsb25nIGxpbmUgdGhhdCBtdXN0IGdldCBzcGxpdCB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBhdCB0aGUgNzZ0aCBjaGFyYWN0ZXIgYm91bmRhcnkgdG8gdGVzdCB0aGUgbm9uLWRlZmF1bHQgYmVoYXZpb3InCisgICAgICAgIGggPSBIZWFkZXIoaHN0cikKKyAgICAgICAgZXEoaC5lbmNvZGUoKSwgJycnXAorQSB2ZXJ5IGxvbmcgbGluZSB0aGF0IG11c3QgZ2V0IHNwbGl0IHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIGF0IHRoZSA3NnRoCisgY2hhcmFjdGVyIGJvdW5kYXJ5IHRvIHRlc3QgdGhlIG5vbi1kZWZhdWx0IGJlaGF2aW9yJycnKQorICAgICAgICBoID0gSGVhZGVyKGhzdHIsIGhlYWRlcl9uYW1lPSdTdWJqZWN0JykKKyAgICAgICAgZXEoaC5lbmNvZGUoKSwgJycnXAorQSB2ZXJ5IGxvbmcgbGluZSB0aGF0IG11c3QgZ2V0IHNwbGl0IHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIGF0IHRoZQorIDc2dGggY2hhcmFjdGVyIGJvdW5kYXJ5IHRvIHRlc3QgdGhlIG5vbi1kZWZhdWx0IGJlaGF2aW9yJycnKQorICAgICAgICBoID0gSGVhZGVyKGhzdHIsIG1heGxpbmVsZW49MTAyNCwgaGVhZGVyX25hbWU9J1N1YmplY3QnKQorICAgICAgICBlcShoLmVuY29kZSgpLCBoc3RyKQorCisgICAgZGVmIHRlc3RfdXNfYXNjaWlfaGVhZGVyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgcyA9ICdoZWxsbycKKyAgICAgICAgeCA9IGRlY29kZV9oZWFkZXIocykKKyAgICAgICAgZXEoeCwgWygnaGVsbG8nLCBOb25lKV0pCisgICAgICAgIGggPSBtYWtlX2hlYWRlcih4KQorICAgICAgICBlcShzLCBoLmVuY29kZSgpKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX2NoYXJzZXQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBoID0gSGVhZGVyKCkKKyAgICAgICAgaC5hcHBlbmQoJ2hlbGxvJywgJ2lzby04ODU5LTEnKQorICAgICAgICBlcShoLCAnPT9pc28tODg1OS0xP3E/aGVsbG8/PScpCisKKyMjICAgIGRlZiB0ZXN0X3VuaWNvZGVfZXJyb3Ioc2VsZik6CisjIyAgICAgICAgcmFpc2VzID0gc2VsZi5hc3NlcnRSYWlzZXMKKyMjICAgICAgICByYWlzZXMoVW5pY29kZUVycm9yLCBIZWFkZXIsIHUnW1BceGY2c3RhbF0nLCAndXMtYXNjaWknKQorIyMgICAgICAgIHJhaXNlcyhVbmljb2RlRXJyb3IsIEhlYWRlciwgJ1tQXHhmNnN0YWxdJywgJ3VzLWFzY2lpJykKKyMjICAgICAgICBoID0gSGVhZGVyKCkKKyMjICAgICAgICByYWlzZXMoVW5pY29kZUVycm9yLCBoLmFwcGVuZCwgdSdbUFx4ZjZzdGFsXScsICd1cy1hc2NpaScpCisjIyAgICAgICAgcmFpc2VzKFVuaWNvZGVFcnJvciwgaC5hcHBlbmQsICdbUFx4ZjZzdGFsXScsICd1cy1hc2NpaScpCisjIyAgICAgICAgcmFpc2VzKFVuaWNvZGVFcnJvciwgSGVhZGVyLCB1J1x1ODNjYVx1NTczMFx1NjY0Mlx1NTkyYicsICdpc28tODg1OS0xJykKKworICAgIGRlZiB0ZXN0X3V0Zjhfc2hvcnRlc3Qoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBoID0gSGVhZGVyKHUncFx4ZjZzdGFsJywgJ3V0Zi04JykKKyAgICAgICAgZXEoaC5lbmNvZGUoKSwgJz0/dXRmLTg/cT9wPUMzPUI2c3RhbD89JykKKyAgICAgICAgaCA9IEhlYWRlcih1J1x1ODNjYVx1NTczMFx1NjY0Mlx1NTkyYicsICd1dGYtOCcpCisgICAgICAgIGVxKGguZW5jb2RlKCksICc9P3V0Zi04P2I/NkkrSzVaeXc1cG1DNWFTcj89JykKKworICAgIGRlZiB0ZXN0X2JhZF84Yml0X2hlYWRlcihzZWxmKToKKyAgICAgICAgcmFpc2VzID0gc2VsZi5hc3NlcnRSYWlzZXMKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHggPSAnWW53cDRkVUViYXkgQXVjdGlvbiBTZW1pYXItIE5vIENoYXJnZSBceDk2IEVhcm4gQmlnJworICAgICAgICByYWlzZXMoVW5pY29kZUVycm9yLCBIZWFkZXIsIHgpCisgICAgICAgIGggPSBIZWFkZXIoKQorICAgICAgICByYWlzZXMoVW5pY29kZUVycm9yLCBoLmFwcGVuZCwgeCkKKyAgICAgICAgZXEoc3RyKEhlYWRlcih4LCBlcnJvcnM9J3JlcGxhY2UnKSksIHgpCisgICAgICAgIGguYXBwZW5kKHgsIGVycm9ycz0ncmVwbGFjZScpCisgICAgICAgIGVxKHN0cihoKSwgeCkKKworICAgIGRlZiB0ZXN0X2VuY29kZWRfYWRqYWNlbnRfbm9uZW5jb2RlZChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGggPSBIZWFkZXIoKQorICAgICAgICBoLmFwcGVuZCgnaGVsbG8nLCAnaXNvLTg4NTktMScpCisgICAgICAgIGguYXBwZW5kKCd3b3JsZCcpCisgICAgICAgIHMgPSBoLmVuY29kZSgpCisgICAgICAgIGVxKHMsICc9P2lzby04ODU5LTE/cT9oZWxsbz89IHdvcmxkJykKKyAgICAgICAgaCA9IG1ha2VfaGVhZGVyKGRlY29kZV9oZWFkZXIocykpCisgICAgICAgIGVxKGguZW5jb2RlKCksIHMpCisKKyAgICBkZWYgdGVzdF93aGl0ZXNwYWNlX2VhdGVyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgcyA9ICdTdWJqZWN0OiA9P2tvaTgtcj9iPzhOTFAxOFhTeThFZ3pzRWd4c25Pd2N6WXp0az0/PSA9P2tvaTgtcj9xPz1DQT89IHp6LicKKyAgICAgICAgcGFydHMgPSBkZWNvZGVfaGVhZGVyKHMpCisgICAgICAgIGVxKHBhcnRzLCBbKCdTdWJqZWN0OicsIE5vbmUpLCAoJ1x4ZjBceGQyXHhjZlx4ZDdceGM1XHhkMlx4Y2JceGMxIFx4Y2VceGMxIFx4YzZceGM5XHhjZVx4YzFceGNjXHhkOFx4Y2VceGQ5XHhjYScsICdrb2k4LXInKSwgKCd6ei4nLCBOb25lKV0pCisgICAgICAgIGhkciA9IG1ha2VfaGVhZGVyKHBhcnRzKQorICAgICAgICBlcShoZHIuZW5jb2RlKCksCisgICAgICAgICAgICdTdWJqZWN0OiA9P2tvaTgtcj9iPzhOTFAxOFhTeThFZ3pzRWd4c25Pd2N6WXp0bks/PSB6ei4nKQorCisgICAgZGVmIHRlc3RfYnJva2VuX2Jhc2U2NF9oZWFkZXIoc2VsZik6CisgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCisgICAgICAgIHMgPSAnU3ViamVjdDogPT9FVUMtS1I/Qj9DU2l4cExEdEtTQy83TGl1dnNheDRpQzZ1TG13TWNpaklLSGFJTHpTd2QvSDBTQzgrTENqd0xzZ3Y3Vy8rTWozSSA/PScKKyAgICAgICAgcmFpc2VzKGVycm9ycy5IZWFkZXJQYXJzZUVycm9yLCBkZWNvZGVfaGVhZGVyLCBzKQorCisKKworIyBUZXN0IFJGQyAyMjMxIGhlYWRlciBwYXJhbWV0ZXJzIChlbi9kZSljb2RpbmcKK2NsYXNzIFRlc3RSRkMyMjMxKFRlc3RFbWFpbEJhc2UpOgorICAgIGRlZiB0ZXN0X2dldF9wYXJhbShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzI5LnR4dCcpCisgICAgICAgIGVxKG1zZy5nZXRfcGFyYW0oJ3RpdGxlJyksCisgICAgICAgICAgICgndXMtYXNjaWknLCAnZW4nLCAnVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzblwndCBpdCEnKSkKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbSgndGl0bGUnLCB1bnF1b3RlPUZhbHNlKSwKKyAgICAgICAgICAgKCd1cy1hc2NpaScsICdlbicsICciVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzblwndCBpdCEiJykpCisKKyAgICBkZWYgdGVzdF9zZXRfcGFyYW0oc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLnNldF9wYXJhbSgndGl0bGUnLCAnVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzblwndCBpdCEnLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQ9J3VzLWFzY2lpJykKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbSgndGl0bGUnKSwKKyAgICAgICAgICAgKCd1cy1hc2NpaScsICcnLCAnVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzblwndCBpdCEnKSkKKyAgICAgICAgbXNnLnNldF9wYXJhbSgndGl0bGUnLCAnVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzblwndCBpdCEnLAorICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQ9J3VzLWFzY2lpJywgbGFuZ3VhZ2U9J2VuJykKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbSgndGl0bGUnKSwKKyAgICAgICAgICAgKCd1cy1hc2NpaScsICdlbicsICdUaGlzIGlzIGV2ZW4gbW9yZSAqKipmdW4qKiogaXNuXCd0IGl0IScpKQorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBtc2cuc2V0X3BhcmFtKCd0aXRsZScsICdUaGlzIGlzIGV2ZW4gbW9yZSAqKipmdW4qKiogaXNuXCd0IGl0IScsCisgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldD0ndXMtYXNjaWknLCBsYW5ndWFnZT0nZW4nKQorICAgICAgICBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwobXNnLmFzX3N0cmluZygpLCAiIiJcCitSZXR1cm4tUGF0aDogPGJiYkB6enoub3JnPgorRGVsaXZlcmVkLVRvOiBiYmJAenp6Lm9yZworUmVjZWl2ZWQ6IGJ5IG1haWwuenp6Lm9yZyAoUG9zdGZpeCwgZnJvbSB1c2VyaWQgODg5KQorIGlkIDI3Q0VBRDM4Q0M7IEZyaSwgIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAgKEVEVCkKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitNZXNzYWdlLUlEOiA8MTUwOTAuNjEzMDQuMTEwOTI5LjQ1Njg0QGFhYS56enoub3JnPgorRnJvbTogYmJiQGRkZC5jb20gKEpvaG4gWC4gRG9lKQorVG86IGJiYkB6enoub3JnCitTdWJqZWN0OiBUaGlzIGlzIGEgdGVzdCBtZXNzYWdlCitEYXRlOiBGcmksIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaTsKKyB0aXRsZSo9InVzLWFzY2lpJ2VuJ1RoaXMlMjBpcyUyMGV2ZW4lMjBtb3JlJTIwJTJBJTJBJTJBZnVuJTJBJTJBJTJBJTIwaXNuJTI3dCUyMGl0JTIxIgorCisKK0hpLAorCitEbyB5b3UgbGlrZSB0aGlzIG1lc3NhZ2U/CisKKy1NZQorIiIiKQorCisgICAgZGVmIHRlc3RfZGVsX3BhcmFtKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBtc2cuc2V0X3BhcmFtKCdmb28nLCAnYmFyJywgY2hhcnNldD0ndXMtYXNjaWknLCBsYW5ndWFnZT0nZW4nKQorICAgICAgICBtc2cuc2V0X3BhcmFtKCd0aXRsZScsICdUaGlzIGlzIGV2ZW4gbW9yZSAqKipmdW4qKiogaXNuXCd0IGl0IScsCisgICAgICAgICAgICBjaGFyc2V0PSd1cy1hc2NpaScsIGxhbmd1YWdlPSdlbicpCisgICAgICAgIG1zZy5kZWxfcGFyYW0oJ2ZvbycsIGhlYWRlcj0nQ29udGVudC1UeXBlJykKKyAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCAiIiJcCitSZXR1cm4tUGF0aDogPGJiYkB6enoub3JnPgorRGVsaXZlcmVkLVRvOiBiYmJAenp6Lm9yZworUmVjZWl2ZWQ6IGJ5IG1haWwuenp6Lm9yZyAoUG9zdGZpeCwgZnJvbSB1c2VyaWQgODg5KQorIGlkIDI3Q0VBRDM4Q0M7IEZyaSwgIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAgKEVEVCkKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitNZXNzYWdlLUlEOiA8MTUwOTAuNjEzMDQuMTEwOTI5LjQ1Njg0QGFhYS56enoub3JnPgorRnJvbTogYmJiQGRkZC5jb20gKEpvaG4gWC4gRG9lKQorVG86IGJiYkB6enoub3JnCitTdWJqZWN0OiBUaGlzIGlzIGEgdGVzdCBtZXNzYWdlCitEYXRlOiBGcmksIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiOworIHRpdGxlKj0idXMtYXNjaWknZW4nVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjAlMkElMkElMkFmdW4lMkElMkElMkElMjBpc24lMjd0JTIwaXQlMjEiCisKKworSGksCisKK0RvIHlvdSBsaWtlIHRoaXMgbWVzc2FnZT8KKworLU1lCisiIiIpCisKKyAgICBkZWYgdGVzdF9yZmMyMjMxX2dldF9jb250ZW50X2NoYXJzZXQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18zMi50eHQnKQorICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfY2hhcnNldCgpLCAndXMtYXNjaWknKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9ub19sYW5ndWFnZV9vcl9jaGFyc2V0KHNlbGYpOgorICAgICAgICBtID0gJycnXAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iZmlsZV9fX19DX19ET0NVTUVOVFNfMjBBTkRfMjBTRVRUSU5HU19GQUJJRU5fTE9DQUxfMjBTRVRUSU5HU19URU1QX25zbWFpbC5odG0iCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgTkFNRSowPWZpbGVfX19fQ19fRE9DVU1FTlRTXzIwQU5EXzIwU0VUVElOR1NfRkFCSUVOX0xPQ0FMXzIwU0VUVElOR1NfVEVNOyBOQU1FKjE9UF9uc21haWwuaHRtCisKKycnJworICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIHBhcmFtID0gbXNnLmdldF9wYXJhbSgnTkFNRScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShwYXJhbSwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcGFyYW0sCisgICAgICAgICAgICAnZmlsZV9fX19DX19ET0NVTUVOVFNfMjBBTkRfMjBTRVRUSU5HU19GQUJJRU5fTE9DQUxfMjBTRVRUSU5HU19URU1QX25zbWFpbC5odG0nKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9ub19sYW5ndWFnZV9vcl9jaGFyc2V0X2luX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gJycnXAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOworXHRmaWxlbmFtZSowKj0iJydUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCI7CitcdGZpbGVuYW1lKjEqPSIlMkElMkElMkFmdW4lMkElMkElMkElMjAiOworXHRmaWxlbmFtZSoyPSJpcyBpdCBub3QucGRmIgorCisnJycKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmlsZW5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzIGl0IG5vdC5wZGYnKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9ub19sYW5ndWFnZV9vcl9jaGFyc2V0X2luX2ZpbGVuYW1lX2VuY29kZWQoc2VsZik6CisgICAgICAgIG0gPSAnJydcCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7CitcdGZpbGVuYW1lKjAqPSInJ1RoaXMlMjBpcyUyMGV2ZW4lMjBtb3JlJTIwIjsKK1x0ZmlsZW5hbWUqMSo9IiUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMCI7CitcdGZpbGVuYW1lKjI9ImlzIGl0IG5vdC5wZGYiCisKKycnJworICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9maWxlbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdUaGlzIGlzIGV2ZW4gbW9yZSAqKipmdW4qKiogaXMgaXQgbm90LnBkZicpCisKKyAgICBkZWYgdGVzdF9yZmMyMjMxX3BhcnRseV9lbmNvZGVkKHNlbGYpOgorICAgICAgICBtID0gJycnXAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOworXHRmaWxlbmFtZSowPSInJ1RoaXMlMjBpcyUyMGV2ZW4lMjBtb3JlJTIwIjsKK1x0ZmlsZW5hbWUqMSo9IiUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMCI7CitcdGZpbGVuYW1lKjI9ImlzIGl0IG5vdC5wZGYiCisKKycnJworICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtc2cuZ2V0X2ZpbGVuYW1lKCksCisgICAgICAgICAgICAnVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjAqKipmdW4qKiogaXMgaXQgbm90LnBkZicpCisKKyAgICBkZWYgdGVzdF9yZmMyMjMxX3BhcnRseV9ub25lbmNvZGVkKHNlbGYpOgorICAgICAgICBtID0gJycnXAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOworXHRmaWxlbmFtZSowPSJUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCI7CitcdGZpbGVuYW1lKjE9IiUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMCI7CitcdGZpbGVuYW1lKjI9ImlzIGl0IG5vdC5wZGYiCisKKycnJworICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtc2cuZ2V0X2ZpbGVuYW1lKCksCisgICAgICAgICAgICAnVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjAlMkElMkElMkFmdW4lMkElMkElMkElMjBpcyBpdCBub3QucGRmJykKKworICAgIGRlZiB0ZXN0X3JmYzIyMzFfbm9fbGFuZ3VhZ2Vfb3JfY2hhcnNldF9pbl9ib3VuZGFyeShzZWxmKToKKyAgICAgICAgbSA9ICcnJ1wKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOworXHRib3VuZGFyeSowKj0iJydUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCI7CitcdGJvdW5kYXJ5KjEqPSIlMkElMkElMkFmdW4lMkElMkElMkElMjAiOworXHRib3VuZGFyeSoyPSJpcyBpdCBub3QucGRmIgorCisnJycKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfYm91bmRhcnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzIGl0IG5vdC5wZGYnKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9ub19sYW5ndWFnZV9vcl9jaGFyc2V0X2luX2NoYXJzZXQoc2VsZik6CisgICAgICAgICMgVGhpcyBpcyBhIG5vbnNlbnNpY2FsIGNoYXJzZXQgdmFsdWUsIGJ1dCB0ZXN0cyB0aGUgY29kZSBhbnl3YXkKKyAgICAgICAgbSA9ICcnJ1wKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsKK1x0Y2hhcnNldCowKj0iVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjAiOworXHRjaGFyc2V0KjEqPSIlMkElMkElMkFmdW4lMkElMkElMkElMjAiOworXHRjaGFyc2V0KjI9ImlzIGl0IG5vdC5wZGYiCisKKycnJworICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9jb250ZW50X2NoYXJzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzIGl0IG5vdC5wZGYnKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9iYWRfZW5jb2RpbmdfaW5fZmlsZW5hbWUoc2VsZik6CisgICAgICAgIG0gPSAnJydcCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7CitcdGZpbGVuYW1lKjAqPSJib2d1cyd4eCdUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCI7CitcdGZpbGVuYW1lKjEqPSIlMkElMkElMkFmdW4lMkElMkElMkElMjAiOworXHRmaWxlbmFtZSoyPSJpcyBpdCBub3QucGRmIgorCisnJycKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmlsZW5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnVGhpcyBpcyBldmVuIG1vcmUgKioqZnVuKioqIGlzIGl0IG5vdC5wZGYnKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9iYWRfZW5jb2RpbmdfaW5fY2hhcnNldChzZWxmKToKKyAgICAgICAgbSA9ICIiIlwKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldCo9Ym9ndXMnJ3V0Zi04JUUyJTgwJTlECisKKyIiIgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgICMgVGhpcyBzaG91bGQgcmV0dXJuIE5vbmUgYmVjYXVzZSBub24tYXNjaWkgY2hhcmFjdGVycyBpbiB0aGUgY2hhcnNldAorICAgICAgICAjIGFyZSBub3QgYWxsb3dlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfY2hhcnNldCgpLCBOb25lKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9iYWRfY2hhcmFjdGVyX2luX2NoYXJzZXQoc2VsZik6CisgICAgICAgIG0gPSAiIiJcCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQqPWFzY2lpJyd1dGYtOCVFMiU4MCU5RAorCisiIiIKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICAjIFRoaXMgc2hvdWxkIHJldHVybiBOb25lIGJlY2F1c2Ugbm9uLWFzY2lpIGNoYXJhY3RlcnMgaW4gdGhlIGNoYXJzZXQKKyAgICAgICAgIyBhcmUgbm90IGFsbG93ZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9jb250ZW50X2NoYXJzZXQoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3JmYzIyMzFfYmFkX2NoYXJhY3Rlcl9pbl9maWxlbmFtZShzZWxmKToKKyAgICAgICAgbSA9ICcnJ1wKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsKK1x0ZmlsZW5hbWUqMCo9ImFzY2lpJ3h4J1RoaXMlMjBpcyUyMGV2ZW4lMjBtb3JlJTIwIjsKK1x0ZmlsZW5hbWUqMSo9IiUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMCI7CitcdGZpbGVuYW1lKjIqPSJpcyBpdCBub3QucGRmJUUyIgorCisnJycKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmlsZW5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1RoaXMgaXMgZXZlbiBtb3JlICoqKmZ1bioqKiBpcyBpdCBub3QucGRmXHVmZmZkJykKKworICAgIGRlZiB0ZXN0X3JmYzIyMzFfdW5rbm93bl9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgbSA9ICIiIlwKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWUqPVgtVU5LTk9XTicnbXlmaWxlLnR4dAorCisiIiIKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmlsZW5hbWUoKSwgJ215ZmlsZS50eHQnKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9zaW5nbGVfdGlja19pbl9maWxlbmFtZV9leHRlbmRlZChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG0gPSAiIiJcCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZm9vOworXHRuYW1lKjAqPVwiRnJhbmsnc1wiOyBuYW1lKjEqPVwiIERvY3VtZW50XCIKKworIiIiCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKKyAgICAgICAgY2hhcnNldCwgbGFuZ3VhZ2UsIHMgPSBtc2cuZ2V0X3BhcmFtKCduYW1lJykKKyAgICAgICAgZXEoY2hhcnNldCwgTm9uZSkKKyAgICAgICAgZXEobGFuZ3VhZ2UsIE5vbmUpCisgICAgICAgIGVxKHMsICJGcmFuaydzIERvY3VtZW50IikKKworICAgIGRlZiB0ZXN0X3JmYzIyMzFfc2luZ2xlX3RpY2tfaW5fZmlsZW5hbWUoc2VsZik6CisgICAgICAgIG0gPSAiIiJcCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZm9vOyBuYW1lKjA9XCJGcmFuaydzXCI7IG5hbWUqMT1cIiBEb2N1bWVudFwiCisKKyIiIgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIHBhcmFtID0gbXNnLmdldF9wYXJhbSgnbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShwYXJhbSwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtLCAiRnJhbmsncyBEb2N1bWVudCIpCisKKyAgICBkZWYgdGVzdF9yZmMyMjMxX3RpY2tfYXR0YWNrX2V4dGVuZGVkKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbSA9ICIiIlwKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1mb287CitcdG5hbWUqMCo9XCJ1cy1hc2NpaSdlbi11cydGcmFuaydzXCI7IG5hbWUqMSo9XCIgRG9jdW1lbnRcIgorCisiIiIKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBjaGFyc2V0LCBsYW5ndWFnZSwgcyA9IG1zZy5nZXRfcGFyYW0oJ25hbWUnKQorICAgICAgICBlcShjaGFyc2V0LCAndXMtYXNjaWknKQorICAgICAgICBlcShsYW5ndWFnZSwgJ2VuLXVzJykKKyAgICAgICAgZXEocywgIkZyYW5rJ3MgRG9jdW1lbnQiKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV90aWNrX2F0dGFjayhzZWxmKToKKyAgICAgICAgbSA9ICIiIlwKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1mb287CitcdG5hbWUqMD1cInVzLWFzY2lpJ2VuLXVzJ0ZyYW5rJ3NcIjsgbmFtZSoxPVwiIERvY3VtZW50XCIKKworIiIiCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKKyAgICAgICAgcGFyYW0gPSBtc2cuZ2V0X3BhcmFtKCduYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKHBhcmFtLCB0dXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW0sICJ1cy1hc2NpaSdlbi11cydGcmFuaydzIERvY3VtZW50IikKKworICAgIGRlZiB0ZXN0X3JmYzIyMzFfbm9fZXh0ZW5kZWRfdmFsdWVzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbSA9ICIiIlwKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1mb287IG5hbWU9XCJGcmFuaydzIERvY3VtZW50XCIKKworIiIiCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKKyAgICAgICAgZXEobXNnLmdldF9wYXJhbSgnbmFtZScpLCAiRnJhbmsncyBEb2N1bWVudCIpCisKKyAgICBkZWYgdGVzdF9yZmMyMjMxX2VuY29kZWRfdGhlbl91bmVuY29kZWRfc2VnbWVudHMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBtID0gIiIiXAorQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWZvbzsKK1x0bmFtZSowKj1cInVzLWFzY2lpJ2VuLXVzJ015XCI7CitcdG5hbWUqMT1cIiBEb2N1bWVudFwiOworXHRuYW1lKjIqPVwiIEZvciBZb3VcIgorCisiIiIKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtKQorICAgICAgICBjaGFyc2V0LCBsYW5ndWFnZSwgcyA9IG1zZy5nZXRfcGFyYW0oJ25hbWUnKQorICAgICAgICBlcShjaGFyc2V0LCAndXMtYXNjaWknKQorICAgICAgICBlcShsYW5ndWFnZSwgJ2VuLXVzJykKKyAgICAgICAgZXEocywgJ015IERvY3VtZW50IEZvciBZb3UnKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV91bmVuY29kZWRfdGhlbl9lbmNvZGVkX3NlZ21lbnRzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgbSA9ICIiIlwKK0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1mb287CitcdG5hbWUqMD1cInVzLWFzY2lpJ2VuLXVzJ015XCI7CitcdG5hbWUqMSo9XCIgRG9jdW1lbnRcIjsKK1x0bmFtZSoyKj1cIiBGb3IgWW91XCIKKworIiIiCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcobSkKKyAgICAgICAgY2hhcnNldCwgbGFuZ3VhZ2UsIHMgPSBtc2cuZ2V0X3BhcmFtKCduYW1lJykKKyAgICAgICAgZXEoY2hhcnNldCwgJ3VzLWFzY2lpJykKKyAgICAgICAgZXEobGFuZ3VhZ2UsICdlbi11cycpCisgICAgICAgIGVxKHMsICdNeSBEb2N1bWVudCBGb3IgWW91JykKKworCisKK2RlZiBfdGVzdGNsYXNzZXMoKToKKyAgICBtb2QgPSBzeXMubW9kdWxlc1tfX25hbWVfX10KKyAgICByZXR1cm4gW2dldGF0dHIobW9kLCBuYW1lKSBmb3IgbmFtZSBpbiBkaXIobW9kKSBpZiBuYW1lLnN0YXJ0c3dpdGgoJ1Rlc3QnKV0KKworCitkZWYgc3VpdGUoKToKKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgZm9yIHRlc3RjbGFzcyBpbiBfdGVzdGNsYXNzZXMoKToKKyAgICAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUodGVzdGNsYXNzKSkKKyAgICByZXR1cm4gc3VpdGUKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgZm9yIHRlc3RjbGFzcyBpbiBfdGVzdGNsYXNzZXMoKToKKyAgICAgICAgcnVuX3VuaXR0ZXN0KHRlc3RjbGFzcykKKworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0nc3VpdGUnKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9lbWFpbC90ZXN0L3Rlc3RfZW1haWxfdG9ydHVyZS5weSBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC90ZXN0X2VtYWlsX3RvcnR1cmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRmYTYwMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvZW1haWwvdGVzdC90ZXN0X2VtYWlsX3RvcnR1cmUucHkKQEAgLTAsMCArMSwxMzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDQgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMKKyMgQSB0b3J0dXJlIHRlc3Qgb2YgdGhlIGVtYWlsIHBhY2thZ2UuICBUaGlzIHNob3VsZCBub3QgYmUgcnVuIGFzIHBhcnQgb2YgdGhlCisjIHN0YW5kYXJkIFB5dGhvbiB0ZXN0IHN1aXRlIHNpbmNlIGl0IHJlcXVpcmVzIHNldmVyYWwgbWVnIG9mIGVtYWlsIG1lc3NhZ2VzCisjIGNvbGxlY3RlZCBpbiB0aGUgd2lsZC4gIFRoZXNlIHNvdXJjZSBtZXNzYWdlcyBhcmUgbm90IGNoZWNrZWQgaW50byB0aGUKKyMgUHl0aG9uIGRpc3RybywgYnV0IGFyZSBhdmFpbGFibGUgYXMgcGFydCBvZiB0aGUgc3RhbmRhbG9uZSBlbWFpbCBwYWNrYWdlIGF0CisjIGh0dHA6Ly9zZi5uZXQvcHJvamVjdHMvbWltZWxpYgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIHR5cGVzIGltcG9ydCBMaXN0VHlwZQorCitmcm9tIGVtYWlsLnRlc3QudGVzdF9lbWFpbCBpbXBvcnQgVGVzdEVtYWlsQmFzZQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdFNraXBwZWQsIHJ1bl91bml0dGVzdAorCitpbXBvcnQgZW1haWwKK2Zyb20gZW1haWwgaW1wb3J0IF9fZmlsZV9fIGFzIHRlc3RmaWxlCitmcm9tIGVtYWlsLml0ZXJhdG9ycyBpbXBvcnQgX3N0cnVjdHVyZQorCitkZWYgb3BlbmZpbGUoZmlsZW5hbWUpOgorICAgIGZyb20gb3MucGF0aCBpbXBvcnQgam9pbiwgZGlybmFtZSwgYWJzcGF0aAorICAgIHBhdGggPSBhYnNwYXRoKGpvaW4oZGlybmFtZSh0ZXN0ZmlsZSksIG9zLnBhcmRpciwgJ21vcmVkYXRhJywgZmlsZW5hbWUpKQorICAgIHJldHVybiBvcGVuKHBhdGgsICdyJykKKworIyBQcmV2ZW50IHRoaXMgdGVzdCBmcm9tIHJ1bm5pbmcgaW4gdGhlIFB5dGhvbiBkaXN0cm8KK3RyeToKKyAgICBvcGVuZmlsZSgnY3Jpc3Bpbi10b3J0dXJlLnR4dCcpCitleGNlcHQgSU9FcnJvcjoKKyAgICByYWlzZSBUZXN0U2tpcHBlZAorCisKKwwKK2NsYXNzIFRvcnR1cmVCYXNlKFRlc3RFbWFpbEJhc2UpOgorICAgIGRlZiBfbXNnb2JqKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgZnAgPSBvcGVuZmlsZShmaWxlbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHJldHVybiBtc2cKKworCisMCitjbGFzcyBUZXN0Q3Jpc3BpblRvcnR1cmUoVG9ydHVyZUJhc2UpOgorICAgICMgTWFyayBDcmlzcGluJ3MgdG9ydHVyZSB0ZXN0IGZyb20gdGhlIFNxdWlycmVsTWFpbCBwcm9qZWN0CisgICAgZGVmIHRlc3RfbW9uZG9fbWVzc2FnZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG5lcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ2NyaXNwaW4tdG9ydHVyZS50eHQnKQorICAgICAgICBwYXlsb2FkID0gbXNnLmdldF9wYXlsb2FkKCkKKyAgICAgICAgZXEodHlwZShwYXlsb2FkKSwgTGlzdFR5cGUpCisgICAgICAgIGVxKGxlbihwYXlsb2FkKSwgMTIpCisgICAgICAgIGVxKG1zZy5wcmVhbWJsZSwgTm9uZSkKKyAgICAgICAgZXEobXNnLmVwaWxvZ3VlLCAnXG4nKQorICAgICAgICAjIFByb2JhYmx5IHRoZSBiZXN0IHdheSB0byB2ZXJpZnkgdGhlIG1lc3NhZ2UgaXMgcGFyc2VkIGNvcnJlY3RseSBpcyB0bworICAgICAgICAjIGR1bXAgaXRzIHN0cnVjdHVyZSBhbmQgY29tcGFyZSBpdCBhZ2FpbnN0IHRoZSBrbm93biBzdHJ1Y3R1cmUuCisgICAgICAgIGZwID0gU3RyaW5nSU8oKQorICAgICAgICBfc3RydWN0dXJlKG1zZywgZnA9ZnApCisgICAgICAgIG5lcShmcC5nZXR2YWx1ZSgpLCAiIiJcCittdWx0aXBhcnQvbWl4ZWQKKyAgICB0ZXh0L3BsYWluCisgICAgbWVzc2FnZS9yZmM4MjIKKyAgICAgICAgbXVsdGlwYXJ0L2FsdGVybmF0aXZlCisgICAgICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgICAgICBtdWx0aXBhcnQvbWl4ZWQKKyAgICAgICAgICAgICAgICB0ZXh0L3JpY2h0ZXh0CisgICAgICAgICAgICBhcHBsaWNhdGlvbi9hbmRyZXctaW5zZXQKKyAgICBtZXNzYWdlL3JmYzgyMgorICAgICAgICBhdWRpby9iYXNpYworICAgIGF1ZGlvL2Jhc2ljCisgICAgaW1hZ2UvcGJtCisgICAgbWVzc2FnZS9yZmM4MjIKKyAgICAgICAgbXVsdGlwYXJ0L21peGVkCisgICAgICAgICAgICBtdWx0aXBhcnQvbWl4ZWQKKyAgICAgICAgICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgICAgICAgICAgYXVkaW8veC1zdW4KKyAgICAgICAgICAgIG11bHRpcGFydC9taXhlZAorICAgICAgICAgICAgICAgIGltYWdlL2dpZgorICAgICAgICAgICAgICAgIGltYWdlL2dpZgorICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uL3gtYmUyCisgICAgICAgICAgICAgICAgYXBwbGljYXRpb24vYXRvbWljbWFpbAorICAgICAgICAgICAgYXVkaW8veC1zdW4KKyAgICBtZXNzYWdlL3JmYzgyMgorICAgICAgICBtdWx0aXBhcnQvbWl4ZWQKKyAgICAgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgICAgIGltYWdlL3BnbQorICAgICAgICAgICAgdGV4dC9wbGFpbgorICAgIG1lc3NhZ2UvcmZjODIyCisgICAgICAgIG11bHRpcGFydC9taXhlZAorICAgICAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICAgICAgaW1hZ2UvcGJtCisgICAgbWVzc2FnZS9yZmM4MjIKKyAgICAgICAgYXBwbGljYXRpb24vcG9zdHNjcmlwdAorICAgIGltYWdlL2dpZgorICAgIG1lc3NhZ2UvcmZjODIyCisgICAgICAgIG11bHRpcGFydC9taXhlZAorICAgICAgICAgICAgYXVkaW8vYmFzaWMKKyAgICAgICAgICAgIGF1ZGlvL2Jhc2ljCisgICAgbWVzc2FnZS9yZmM4MjIKKyAgICAgICAgbXVsdGlwYXJ0L21peGVkCisgICAgICAgICAgICBhcHBsaWNhdGlvbi9wb3N0c2NyaXB0CisgICAgICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgICAgICBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgICAgIG11bHRpcGFydC9taXhlZAorICAgICAgICAgICAgICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgICAgICAgICAgICAgIG11bHRpcGFydC9wYXJhbGxlbAorICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UvZ2lmCisgICAgICAgICAgICAgICAgICAgICAgICBhdWRpby9iYXNpYworICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbi9hdG9taWNtYWlsCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UvcmZjODIyCisgICAgICAgICAgICAgICAgICAgICAgICBhdWRpby94LXN1bgorIiIiKQorCisMCitkZWYgX3Rlc3RjbGFzc2VzKCk6CisgICAgbW9kID0gc3lzLm1vZHVsZXNbX19uYW1lX19dCisgICAgcmV0dXJuIFtnZXRhdHRyKG1vZCwgbmFtZSkgZm9yIG5hbWUgaW4gZGlyKG1vZCkgaWYgbmFtZS5zdGFydHN3aXRoKCdUZXN0JyldCisKKworZGVmIHN1aXRlKCk6CisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIGZvciB0ZXN0Y2xhc3MgaW4gX3Rlc3RjbGFzc2VzKCk6CisgICAgICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKHRlc3RjbGFzcykpCisgICAgcmV0dXJuIHN1aXRlCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGZvciB0ZXN0Y2xhc3MgaW4gX3Rlc3RjbGFzc2VzKCk6CisgICAgICAgIHJ1bl91bml0dGVzdCh0ZXN0Y2xhc3MpCisKKworDAoraWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKGRlZmF1bHRUZXN0PSdzdWl0ZScpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvX19pbml0X18ucHkgYi9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwY2IyYjcuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9qc29uL3Rlc3RzL19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQganNvbgotaW1wb3J0IGRvY3Rlc3QKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAotCi0jIGltcG9ydCBqc29uIHdpdGggYW5kIHdpdGhvdXQgYWNjZWxlcmF0aW9ucwotY2pzb24gPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnanNvbicsIGZyZXNoPVsnX2pzb24nXSkKLXB5anNvbiA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdqc29uJywgYmxvY2tlZD1bJ19qc29uJ10pCi0KLSMgY3JlYXRlIHR3byBiYXNlIGNsYXNzZXMgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlIG90aGVyIHRlc3RzCi1jbGFzcyBQeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGpzb24gPSBweWpzb24KLSAgICBsb2FkcyA9IHN0YXRpY21ldGhvZChweWpzb24ubG9hZHMpCi0gICAgZHVtcHMgPSBzdGF0aWNtZXRob2QocHlqc29uLmR1bXBzKQotCi1AdW5pdHRlc3Quc2tpcFVubGVzcyhjanNvbiwgJ3JlcXVpcmVzIF9qc29uJykKLWNsYXNzIENUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBpZiBjanNvbiBpcyBub3QgTm9uZToKLSAgICAgICAganNvbiA9IGNqc29uCi0gICAgICAgIGxvYWRzID0gc3RhdGljbWV0aG9kKGNqc29uLmxvYWRzKQotICAgICAgICBkdW1wcyA9IHN0YXRpY21ldGhvZChjanNvbi5kdW1wcykKLQotIyB0ZXN0IFB5VGVzdCBhbmQgQ1Rlc3QgY2hlY2tpbmcgaWYgdGhlIGZ1bmN0aW9ucyBjb21lIGZyb20gdGhlIHJpZ2h0IG1vZHVsZQotY2xhc3MgVGVzdFB5VGVzdChQeVRlc3QpOgotICAgIGRlZiB0ZXN0X3B5anNvbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmpzb24uc2Nhbm5lci5tYWtlX3NjYW5uZXIuX19tb2R1bGVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnanNvbi5zY2FubmVyJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmpzb24uZGVjb2Rlci5zY2Fuc3RyaW5nLl9fbW9kdWxlX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2pzb24uZGVjb2RlcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5qc29uLmVuY29kZXIuZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkuX19tb2R1bGVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnanNvbi5lbmNvZGVyJykKLQotY2xhc3MgVGVzdENUZXN0KENUZXN0KToKLSAgICBkZWYgdGVzdF9janNvbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmpzb24uc2Nhbm5lci5tYWtlX3NjYW5uZXIuX19tb2R1bGVfXywgJ19qc29uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmpzb24uZGVjb2Rlci5zY2Fuc3RyaW5nLl9fbW9kdWxlX18sICdfanNvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5qc29uLmVuY29kZXIuY19tYWtlX2VuY29kZXIuX19tb2R1bGVfXywgJ19qc29uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmpzb24uZW5jb2Rlci5lbmNvZGVfYmFzZXN0cmluZ19hc2NpaS5fX21vZHVsZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICdfanNvbicpCi0KLQotaGVyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICBzdWl0ZSA9IGFkZGl0aW9uYWxfdGVzdHMoKQotICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKGhlcmUpOgotICAgICAgICBpZiBmbi5zdGFydHN3aXRoKCJ0ZXN0IikgYW5kIGZuLmVuZHN3aXRoKCIucHkiKToKLSAgICAgICAgICAgIG1vZG5hbWUgPSAianNvbi50ZXN0cy4iICsgZm5bOi0zXQotICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RuYW1lKQotICAgICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbW9kbmFtZV0KLSAgICAgICAgICAgIHN1aXRlLmFkZFRlc3RzKGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSkpCi0gICAgcmV0dXJuIHN1aXRlCi0KLWRlZiBhZGRpdGlvbmFsX3Rlc3RzKCk6Ci0gICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgIGZvciBtb2QgaW4gKGpzb24sIGpzb24uZW5jb2RlciwganNvbi5kZWNvZGVyKToKLSAgICAgICAgc3VpdGUuYWRkVGVzdChkb2N0ZXN0LkRvY1Rlc3RTdWl0ZShtb2QpKQotICAgIHN1aXRlLmFkZFRlc3QoVGVzdFB5VGVzdCgndGVzdF9weWpzb24nKSkKLSAgICBzdWl0ZS5hZGRUZXN0KFRlc3RDVGVzdCgndGVzdF9janNvbicpKQotICAgIHJldHVybiBzdWl0ZQotCi1kZWYgbWFpbigpOgotICAgIHN1aXRlID0gdGVzdF9zdWl0ZSgpCi0gICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoKQotICAgIHJ1bm5lci5ydW4oc3VpdGUpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSkpCi0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9jaGVja19jaXJjdWxhci5weSBiL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X2NoZWNrX2NpcmN1bGFyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWQzZDI0Li4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X2NoZWNrX2NpcmN1bGFyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotZnJvbSBqc29uLnRlc3RzIGltcG9ydCBQeVRlc3QsIENUZXN0Ci0KLQotZGVmIGRlZmF1bHRfaXRlcmFibGUob2JqKToKLSAgICByZXR1cm4gbGlzdChvYmopCi0KLWNsYXNzIFRlc3RDaGVja0NpcmN1bGFyKG9iamVjdCk6Ci0gICAgZGVmIHRlc3RfY2lyY3VsYXJfZGljdChzZWxmKToKLSAgICAgICAgZGN0ID0ge30KLSAgICAgICAgZGN0WydhJ10gPSBkY3QKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5kdW1wcywgZGN0KQotCi0gICAgZGVmIHRlc3RfY2lyY3VsYXJfbGlzdChzZWxmKToKLSAgICAgICAgbHN0ID0gW10KLSAgICAgICAgbHN0LmFwcGVuZChsc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZHVtcHMsIGxzdCkKLQotICAgIGRlZiB0ZXN0X2NpcmN1bGFyX2NvbXBvc2l0ZShzZWxmKToKLSAgICAgICAgZGN0MiA9IHt9Ci0gICAgICAgIGRjdDJbJ2EnXSA9IFtdCi0gICAgICAgIGRjdDJbJ2EnXS5hcHBlbmQoZGN0MikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5kdW1wcywgZGN0MikKLQotICAgIGRlZiB0ZXN0X2NpcmN1bGFyX2RlZmF1bHQoc2VsZik6Ci0gICAgICAgIHNlbGYuZHVtcHMoW3NldCgpXSwgZGVmYXVsdD1kZWZhdWx0X2l0ZXJhYmxlKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZHVtcHMsIFtzZXQoKV0pCi0KLSAgICBkZWYgdGVzdF9jaXJjdWxhcl9vZmZfZGVmYXVsdChzZWxmKToKLSAgICAgICAgc2VsZi5kdW1wcyhbc2V0KCldLCBkZWZhdWx0PWRlZmF1bHRfaXRlcmFibGUsIGNoZWNrX2NpcmN1bGFyPUZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZHVtcHMsIFtzZXQoKV0sIGNoZWNrX2NpcmN1bGFyPUZhbHNlKQotCi0KLWNsYXNzIFRlc3RQeUNoZWNrQ2lyY3VsYXIoVGVzdENoZWNrQ2lyY3VsYXIsIFB5VGVzdCk6IHBhc3MKLWNsYXNzIFRlc3RDQ2hlY2tDaXJjdWxhcihUZXN0Q2hlY2tDaXJjdWxhciwgQ1Rlc3QpOiBwYXNzCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9kZWNvZGUucHkgYi9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9kZWNvZGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZDFhYTQuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9qc29uL3Rlc3RzL3Rlc3RfZGVjb2RlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotaW1wb3J0IGRlY2ltYWwKLWZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCi1mcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAotZnJvbSBqc29uLnRlc3RzIGltcG9ydCBQeVRlc3QsIENUZXN0Ci0KLQotY2xhc3MgVGVzdERlY29kZShvYmplY3QpOgotICAgIGRlZiB0ZXN0X2RlY2ltYWwoc2VsZik6Ci0gICAgICAgIHJ2YWwgPSBzZWxmLmxvYWRzKCcxLjEnLCBwYXJzZV9mbG9hdD1kZWNpbWFsLkRlY2ltYWwpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHJ2YWwsIGRlY2ltYWwuRGVjaW1hbCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnZhbCwgZGVjaW1hbC5EZWNpbWFsKCcxLjEnKSkKLQotICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgotICAgICAgICBydmFsID0gc2VsZi5sb2FkcygnMScsIHBhcnNlX2ludD1mbG9hdCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocnZhbCwgZmxvYXQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ2YWwsIDEuMCkKLQotICAgIGRlZiB0ZXN0X2RlY29kZXJfb3B0aW1pemF0aW9ucyhzZWxmKToKLSAgICAgICAgIyBTZXZlcmFsIG9wdGltaXphdGlvbnMgd2VyZSBtYWRlIHRoYXQgc2tpcCBvdmVyIGNhbGxzIHRvCi0gICAgICAgICMgdGhlIHdoaXRlc3BhY2UgcmVnZXgsIHNvIHRoaXMgdGVzdCBpcyBkZXNpZ25lZCB0byB0cnkgYW5kCi0gICAgICAgICMgZXhlcmNpc2UgdGhlIHVuY29tbW9uIGNhc2VzLiBUaGUgYXJyYXkgY2FzZXMgYXJlIGFscmVhZHkgY292ZXJlZC4KLSAgICAgICAgcnZhbCA9IHNlbGYubG9hZHMoJ3sgICAia2V5IiAgICA6ICAgICJ2YWx1ZSIgICAgLCAgImsiOiJ2IiAgICB9JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydmFsLCB7ImtleSI6InZhbHVlIiwgImsiOiJ2In0pCi0KLSAgICBkZWYgdGVzdF9lbXB0eV9vYmplY3RzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoJ3t9JyksIHt9KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoJ1tdJyksIFtdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoJyIiJyksIHUiIikKLSAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYubG9hZHMoJyIiJyksIHVuaWNvZGUpCi0KLSAgICBkZWYgdGVzdF9vYmplY3RfcGFpcnNfaG9vayhzZWxmKToKLSAgICAgICAgcyA9ICd7InhrZCI6MSwgImtjdyI6MiwgImFydCI6MywgImh4bSI6NCwgInFydCI6NSwgInBhZCI6NiwgImhveSI6N30nCi0gICAgICAgIHAgPSBbKCJ4a2QiLCAxKSwgKCJrY3ciLCAyKSwgKCJhcnQiLCAzKSwgKCJoeG0iLCA0KSwKLSAgICAgICAgICAgICAoInFydCIsIDUpLCAoInBhZCIsIDYpLCAoImhveSIsIDcpXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMocyksIGV2YWwocykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzLCBvYmplY3RfcGFpcnNfaG9vaz1sYW1iZGEgeDogeCksIHApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5qc29uLmxvYWQoU3RyaW5nSU8ocyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X3BhaXJzX2hvb2s9bGFtYmRhIHg6IHgpLCBwKQotICAgICAgICBvZCA9IHNlbGYubG9hZHMocywgb2JqZWN0X3BhaXJzX2hvb2s9T3JkZXJlZERpY3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QsIE9yZGVyZWREaWN0KHApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUob2QpLCBPcmRlcmVkRGljdCkKLSAgICAgICAgIyB0aGUgb2JqZWN0X3BhaXJzX2hvb2sgdGFrZXMgcHJpb3JpdHkgb3ZlciB0aGUgb2JqZWN0X2hvb2sKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHMsIG9iamVjdF9wYWlyc19ob29rPU9yZGVyZWREaWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X2hvb2s9bGFtYmRhIHg6IE5vbmUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyZWREaWN0KHApKQotICAgICAgICAjIGNoZWNrIHRoYXQgZW1wdHkgb2JqZWN0cyBsaXRlcmFscyB3b3JrIChzZWUgIzE3MzY4KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoJ3t9Jywgb2JqZWN0X3BhaXJzX2hvb2s9T3JkZXJlZERpY3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyZWREaWN0KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcygneyJlbXB0eSI6IHt9fScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfcGFpcnNfaG9vaz1PcmRlcmVkRGljdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXJlZERpY3QoWygnZW1wdHknLCBPcmRlcmVkRGljdCgpKV0pKQotCi0gICAgZGVmIHRlc3RfZXh0cmFfZGF0YShzZWxmKToKLSAgICAgICAgcyA9ICdbMSwgMiwgM101JwotICAgICAgICBtc2cgPSAnRXh0cmEgZGF0YScKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVmFsdWVFcnJvciwgbXNnLCBzZWxmLmxvYWRzLCBzKQotCi0gICAgZGVmIHRlc3RfaW52YWxpZF9lc2NhcGUoc2VsZik6Ci0gICAgICAgIHMgPSAnWyJhYmNcXHkiXScKLSAgICAgICAgbXNnID0gJ2VzY2FwZScKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVmFsdWVFcnJvciwgbXNnLCBzZWxmLmxvYWRzLCBzKQotCi1jbGFzcyBUZXN0UHlEZWNvZGUoVGVzdERlY29kZSwgUHlUZXN0KTogcGFzcwotY2xhc3MgVGVzdENEZWNvZGUoVGVzdERlY29kZSwgQ1Rlc3QpOiBwYXNzCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9kZWZhdWx0LnB5IGIvbGliL3B5dGhvbjIuNy9qc29uL3Rlc3RzL3Rlc3RfZGVmYXVsdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJhMDdmNi4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9kZWZhdWx0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotZnJvbSBqc29uLnRlc3RzIGltcG9ydCBQeVRlc3QsIENUZXN0Ci0KLQotY2xhc3MgVGVzdERlZmF1bHQob2JqZWN0KToKLSAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgc2VsZi5kdW1wcyh0eXBlLCBkZWZhdWx0PXJlcHIpLAotICAgICAgICAgICAgc2VsZi5kdW1wcyhyZXByKHR5cGUpKSkKLQotCi1jbGFzcyBUZXN0UHlEZWZhdWx0KFRlc3REZWZhdWx0LCBQeVRlc3QpOiBwYXNzCi1jbGFzcyBUZXN0Q0RlZmF1bHQoVGVzdERlZmF1bHQsIENUZXN0KTogcGFzcwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9qc29uL3Rlc3RzL3Rlc3RfZHVtcC5weSBiL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X2R1bXAucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkOTI1NjkuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9qc29uL3Rlc3RzL3Rlc3RfZHVtcC5weQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLWZyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwotZnJvbSBqc29uLnRlc3RzIGltcG9ydCBQeVRlc3QsIENUZXN0Ci0KLQotY2xhc3MgVGVzdER1bXAob2JqZWN0KToKLSAgICBkZWYgdGVzdF9kdW1wKHNlbGYpOgotICAgICAgICBzaW8gPSBTdHJpbmdJTygpCi0gICAgICAgIHNlbGYuanNvbi5kdW1wKHt9LCBzaW8pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lvLmdldHZhbHVlKCksICd7fScpCi0KLSAgICBkZWYgdGVzdF9kdW1wcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKHt9KSwgJ3t9JykKLQotICAgIGRlZiB0ZXN0X2VuY29kZV90cnVlZmFsc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcygKLSAgICAgICAgICAgICAgICAge1RydWU6IEZhbHNlLCBGYWxzZTogVHJ1ZX0sIHNvcnRfa2V5cz1UcnVlKSwKLSAgICAgICAgICAgICAgICAgJ3siZmFsc2UiOiB0cnVlLCAidHJ1ZSI6IGZhbHNlfScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcygKLSAgICAgICAgICAgICAgICB7MjogMy4wLCA0LjA6IDVMLCBGYWxzZTogMSwgNkw6IFRydWV9LCBzb3J0X2tleXM9VHJ1ZSksCi0gICAgICAgICAgICAgICAgJ3siZmFsc2UiOiAxLCAiMiI6IDMuMCwgIjQuMCI6IDUsICI2IjogdHJ1ZX0nKQotCi0gICAgIyBJc3N1ZSAxNjIyODogQ3Jhc2ggb24gZW5jb2RpbmcgcmVzaXplZCBsaXN0Ci0gICAgZGVmIHRlc3RfZW5jb2RlX211dGF0ZWQoc2VsZik6Ci0gICAgICAgIGEgPSBbb2JqZWN0KCldICogMTAKLSAgICAgICAgZGVmIGNyYXNoZXIob2JqKToKLSAgICAgICAgICAgIGRlbCBhWy0xXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMoYSwgZGVmYXVsdD1jcmFzaGVyKSwKLSAgICAgICAgICAgICAgICAgJ1tudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsXScpCi0KLQotY2xhc3MgVGVzdFB5RHVtcChUZXN0RHVtcCwgUHlUZXN0KTogcGFzcwotY2xhc3MgVGVzdENEdW1wKFRlc3REdW1wLCBDVGVzdCk6IHBhc3MKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpLnB5IGIvbGliL3B5dGhvbjIuNy9qc29uL3Rlc3RzL3Rlc3RfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmOWQ1YTUuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9qc29uL3Rlc3RzL3Rlc3RfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1mcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAotZnJvbSBqc29uLnRlc3RzIGltcG9ydCBQeVRlc3QsIENUZXN0Ci0KLQotQ0FTRVMgPSBbCi0gICAgKHUnL1xcIlx1Y2FmZVx1YmFiZVx1YWI5OFx1ZmNkZVx1YmNkYVx1ZWY0YVx4MDhceDBjXG5cclx0YDF+IUAjJCVeJiooKV8rLT1bXXt9fDs6XCcsLi88Pj8nLCAnIi9cXFxcXFwiXFx1Y2FmZVxcdWJhYmVcXHVhYjk4XFx1ZmNkZVxcdWJjZGFcXHVlZjRhXFxiXFxmXFxuXFxyXFx0YDF+IUAjJCVeJiooKV8rLT1bXXt9fDs6XCcsLi88Pj8iJyksCi0gICAgKHUnXHUwMTIzXHU0NTY3XHU4OWFiXHVjZGVmXHVhYmNkXHVlZjRhJywgJyJcXHUwMTIzXFx1NDU2N1xcdTg5YWJcXHVjZGVmXFx1YWJjZFxcdWVmNGEiJyksCi0gICAgKHUnY29udHJvbHMnLCAnImNvbnRyb2xzIicpLAotICAgICh1J1x4MDhceDBjXG5cclx0JywgJyJcXGJcXGZcXG5cXHJcXHQiJyksCi0gICAgKHUneyJvYmplY3Qgd2l0aCAxIG1lbWJlciI6WyJhcnJheSB3aXRoIDEgZWxlbWVudCJdfScsICcie1xcIm9iamVjdCB3aXRoIDEgbWVtYmVyXFwiOltcXCJhcnJheSB3aXRoIDEgZWxlbWVudFxcIl19IicpLAotICAgICh1JyBzIHAgYSBjIGUgZCAnLCAnIiBzIHAgYSBjIGUgZCAiJyksCi0gICAgKHUnXFUwMDAxZDEyMCcsICciXFx1ZDgzNFxcdWRkMjAiJyksCi0gICAgKHUnXHUwM2IxXHUwM2E5JywgJyJcXHUwM2IxXFx1MDNhOSInKSwKLSAgICAoJ1x4Y2VceGIxXHhjZVx4YTknLCAnIlxcdTAzYjFcXHUwM2E5IicpLAotICAgICh1J1x1MDNiMVx1MDNhOScsICciXFx1MDNiMVxcdTAzYTkiJyksCi0gICAgKCdceGNlXHhiMVx4Y2VceGE5JywgJyJcXHUwM2IxXFx1MDNhOSInKSwKLSAgICAodSdcdTAzYjFcdTAzYTknLCAnIlxcdTAzYjFcXHUwM2E5IicpLAotICAgICh1J1x1MDNiMVx1MDNhOScsICciXFx1MDNiMVxcdTAzYTkiJyksCi0gICAgKHUiYDF+IUAjJCVeJiooKV8rLT17JzpbLF19fDsuPC8+PyIsICciYDF+IUAjJCVeJiooKV8rLT17XCc6WyxdfXw7LjwvPj8iJyksCi0gICAgKHUnXHgwOFx4MGNcblxyXHQnLCAnIlxcYlxcZlxcblxcclxcdCInKSwKLSAgICAodSdcdTAxMjNcdTQ1NjdcdTg5YWJcdWNkZWZcdWFiY2RcdWVmNGEnLCAnIlxcdTAxMjNcXHU0NTY3XFx1ODlhYlxcdWNkZWZcXHVhYmNkXFx1ZWY0YSInKSwKLV0KLQotY2xhc3MgVGVzdEVuY29kZUJhc2VzdHJpbmdBc2NpaShvYmplY3QpOgotICAgIGRlZiB0ZXN0X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpKHNlbGYpOgotICAgICAgICBmbmFtZSA9IHNlbGYuanNvbi5lbmNvZGVyLmVuY29kZV9iYXNlc3RyaW5nX2FzY2lpLl9fbmFtZV9fCi0gICAgICAgIGZvciBpbnB1dF9zdHJpbmcsIGV4cGVjdCBpbiBDQVNFUzoKLSAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuanNvbi5lbmNvZGVyLmVuY29kZV9iYXNlc3RyaW5nX2FzY2lpKGlucHV0X3N0cmluZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3QsCi0gICAgICAgICAgICAgICAgJ3swIXJ9ICE9IHsxIXJ9IGZvciB7Mn0oezMhcn0pJy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCwgZXhwZWN0LCBmbmFtZSwgaW5wdXRfc3RyaW5nKSkKLQotICAgIGRlZiB0ZXN0X29yZGVyZWRfZGljdChzZWxmKToKLSAgICAgICAgIyBTZWUgaXNzdWUgNjEwNQotICAgICAgICBpdGVtcyA9IFsoJ29uZScsIDEpLCAoJ3R3bycsIDIpLCAoJ3RocmVlJywgMyksICgnZm91cicsIDQpLCAoJ2ZpdmUnLCA1KV0KLSAgICAgICAgcyA9IHNlbGYuZHVtcHMoT3JkZXJlZERpY3QoaXRlbXMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICd7Im9uZSI6IDEsICJ0d28iOiAyLCAidGhyZWUiOiAzLCAiZm91ciI6IDQsICJmaXZlIjogNX0nKQotCi0KLWNsYXNzIFRlc3RQeUVuY29kZUJhc2VzdHJpbmdBc2NpaShUZXN0RW5jb2RlQmFzZXN0cmluZ0FzY2lpLCBQeVRlc3QpOiBwYXNzCi1jbGFzcyBUZXN0Q0VuY29kZUJhc2VzdHJpbmdBc2NpaShUZXN0RW5jb2RlQmFzZXN0cmluZ0FzY2lpLCBDVGVzdCk6IHBhc3MKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X2ZhaWwucHkgYi9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9mYWlsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzFiMzc5Li4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X2ZhaWwucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotZnJvbSBqc29uLnRlc3RzIGltcG9ydCBQeVRlc3QsIENUZXN0Ci0KLSMgMjAwNy0xMC0wNQotSlNPTkRPQ1MgPSBbCi0gICAgIyBodHRwOi8vanNvbi5vcmcvSlNPTl9jaGVja2VyL3Rlc3QvZmFpbDEuanNvbgotICAgICciQSBKU09OIHBheWxvYWQgc2hvdWxkIGJlIGFuIG9iamVjdCBvciBhcnJheSwgbm90IGEgc3RyaW5nLiInLAotICAgICMgaHR0cDovL2pzb24ub3JnL0pTT05fY2hlY2tlci90ZXN0L2ZhaWwyLmpzb24KLSAgICAnWyJVbmNsb3NlZCBhcnJheSInLAotICAgICMgaHR0cDovL2pzb24ub3JnL0pTT05fY2hlY2tlci90ZXN0L2ZhaWwzLmpzb24KLSAgICAne3VucXVvdGVkX2tleTogImtleXMgbXVzdCBiZSBxdW90ZWQifScsCi0gICAgIyBodHRwOi8vanNvbi5vcmcvSlNPTl9jaGVja2VyL3Rlc3QvZmFpbDQuanNvbgotICAgICdbImV4dHJhIGNvbW1hIixdJywKLSAgICAjIGh0dHA6Ly9qc29uLm9yZy9KU09OX2NoZWNrZXIvdGVzdC9mYWlsNS5qc29uCi0gICAgJ1siZG91YmxlIGV4dHJhIGNvbW1hIiwsXScsCi0gICAgIyBodHRwOi8vanNvbi5vcmcvSlNPTl9jaGVja2VyL3Rlc3QvZmFpbDYuanNvbgotICAgICdbICAgLCAiPC0tIG1pc3NpbmcgdmFsdWUiXScsCi0gICAgIyBodHRwOi8vanNvbi5vcmcvSlNPTl9jaGVja2VyL3Rlc3QvZmFpbDcuanNvbgotICAgICdbIkNvbW1hIGFmdGVyIHRoZSBjbG9zZSJdLCcsCi0gICAgIyBodHRwOi8vanNvbi5vcmcvSlNPTl9jaGVja2VyL3Rlc3QvZmFpbDguanNvbgotICAgICdbIkV4dHJhIGNsb3NlIl1dJywKLSAgICAjIGh0dHA6Ly9qc29uLm9yZy9KU09OX2NoZWNrZXIvdGVzdC9mYWlsOS5qc29uCi0gICAgJ3siRXh0cmEgY29tbWEiOiB0cnVlLH0nLAotICAgICMgaHR0cDovL2pzb24ub3JnL0pTT05fY2hlY2tlci90ZXN0L2ZhaWwxMC5qc29uCi0gICAgJ3siRXh0cmEgdmFsdWUgYWZ0ZXIgY2xvc2UiOiB0cnVlfSAibWlzcGxhY2VkIHF1b3RlZCB2YWx1ZSInLAotICAgICMgaHR0cDovL2pzb24ub3JnL0pTT05fY2hlY2tlci90ZXN0L2ZhaWwxMS5qc29uCi0gICAgJ3siSWxsZWdhbCBleHByZXNzaW9uIjogMSArIDJ9JywKLSAgICAjIGh0dHA6Ly9qc29uLm9yZy9KU09OX2NoZWNrZXIvdGVzdC9mYWlsMTIuanNvbgotICAgICd7IklsbGVnYWwgaW52b2NhdGlvbiI6IGFsZXJ0KCl9JywKLSAgICAjIGh0dHA6Ly9qc29uLm9yZy9KU09OX2NoZWNrZXIvdGVzdC9mYWlsMTMuanNvbgotICAgICd7Ik51bWJlcnMgY2Fubm90IGhhdmUgbGVhZGluZyB6ZXJvZXMiOiAwMTN9JywKLSAgICAjIGh0dHA6Ly9qc29uLm9yZy9KU09OX2NoZWNrZXIvdGVzdC9mYWlsMTQuanNvbgotICAgICd7Ik51bWJlcnMgY2Fubm90IGJlIGhleCI6IDB4MTR9JywKLSAgICAjIGh0dHA6Ly9qc29uLm9yZy9KU09OX2NoZWNrZXIvdGVzdC9mYWlsMTUuanNvbgotICAgICdbIklsbGVnYWwgYmFja3NsYXNoIGVzY2FwZTogXFx4MTUiXScsCi0gICAgIyBodHRwOi8vanNvbi5vcmcvSlNPTl9jaGVja2VyL3Rlc3QvZmFpbDE2Lmpzb24KLSAgICAnW1xcbmFrZWRdJywKLSAgICAjIGh0dHA6Ly9qc29uLm9yZy9KU09OX2NoZWNrZXIvdGVzdC9mYWlsMTcuanNvbgotICAgICdbIklsbGVnYWwgYmFja3NsYXNoIGVzY2FwZTogXFwwMTciXScsCi0gICAgIyBodHRwOi8vanNvbi5vcmcvSlNPTl9jaGVja2VyL3Rlc3QvZmFpbDE4Lmpzb24KLSAgICAnW1tbW1tbW1tbW1tbW1tbW1tbW1siVG9vIGRlZXAiXV1dXV1dXV1dXV1dXV1dXV1dXV0nLAotICAgICMgaHR0cDovL2pzb24ub3JnL0pTT05fY2hlY2tlci90ZXN0L2ZhaWwxOS5qc29uCi0gICAgJ3siTWlzc2luZyBjb2xvbiIgbnVsbH0nLAotICAgICMgaHR0cDovL2pzb24ub3JnL0pTT05fY2hlY2tlci90ZXN0L2ZhaWwyMC5qc29uCi0gICAgJ3siRG91YmxlIGNvbG9uIjo6IG51bGx9JywKLSAgICAjIGh0dHA6Ly9qc29uLm9yZy9KU09OX2NoZWNrZXIvdGVzdC9mYWlsMjEuanNvbgotICAgICd7IkNvbW1hIGluc3RlYWQgb2YgY29sb24iLCBudWxsfScsCi0gICAgIyBodHRwOi8vanNvbi5vcmcvSlNPTl9jaGVja2VyL3Rlc3QvZmFpbDIyLmpzb24KLSAgICAnWyJDb2xvbiBpbnN0ZWFkIG9mIGNvbW1hIjogZmFsc2VdJywKLSAgICAjIGh0dHA6Ly9qc29uLm9yZy9KU09OX2NoZWNrZXIvdGVzdC9mYWlsMjMuanNvbgotICAgICdbIkJhZCB2YWx1ZSIsIHRydXRoXScsCi0gICAgIyBodHRwOi8vanNvbi5vcmcvSlNPTl9jaGVja2VyL3Rlc3QvZmFpbDI0Lmpzb24KLSAgICAiWydzaW5nbGUgcXVvdGUnXSIsCi0gICAgIyBodHRwOi8vanNvbi5vcmcvSlNPTl9jaGVja2VyL3Rlc3QvZmFpbDI1Lmpzb24KLSAgICAnWyJcdHRhYlx0Y2hhcmFjdGVyXHRpblx0c3RyaW5nXHQiXScsCi0gICAgIyBodHRwOi8vanNvbi5vcmcvSlNPTl9jaGVja2VyL3Rlc3QvZmFpbDI2Lmpzb24KLSAgICAnWyJ0YWJcXCAgIGNoYXJhY3RlclxcICAgaW5cXCAgc3RyaW5nXFwgICJdJywKLSAgICAjIGh0dHA6Ly9qc29uLm9yZy9KU09OX2NoZWNrZXIvdGVzdC9mYWlsMjcuanNvbgotICAgICdbImxpbmVcbmJyZWFrIl0nLAotICAgICMgaHR0cDovL2pzb24ub3JnL0pTT05fY2hlY2tlci90ZXN0L2ZhaWwyOC5qc29uCi0gICAgJ1sibGluZVxcXG5icmVhayJdJywKLSAgICAjIGh0dHA6Ly9qc29uLm9yZy9KU09OX2NoZWNrZXIvdGVzdC9mYWlsMjkuanNvbgotICAgICdbMGVdJywKLSAgICAjIGh0dHA6Ly9qc29uLm9yZy9KU09OX2NoZWNrZXIvdGVzdC9mYWlsMzAuanNvbgotICAgICdbMGUrXScsCi0gICAgIyBodHRwOi8vanNvbi5vcmcvSlNPTl9jaGVja2VyL3Rlc3QvZmFpbDMxLmpzb24KLSAgICAnWzBlKy0xXScsCi0gICAgIyBodHRwOi8vanNvbi5vcmcvSlNPTl9jaGVja2VyL3Rlc3QvZmFpbDMyLmpzb24KLSAgICAneyJDb21tYSBpbnN0ZWFkIGlmIGNsb3NpbmcgYnJhY2UiOiB0cnVlLCcsCi0gICAgIyBodHRwOi8vanNvbi5vcmcvSlNPTl9jaGVja2VyL3Rlc3QvZmFpbDMzLmpzb24KLSAgICAnWyJtaXNtYXRjaCJ9JywKLSAgICAjIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9zaW1wbGVqc29uL2lzc3Vlcy9kZXRhaWw/aWQ9MwotICAgIHUnWyJBXHUwMDFGWiBjb250cm9sIGNoYXJhY3RlcnMgaW4gc3RyaW5nIl0nLAotXQotCi1TS0lQUyA9IHsKLSAgICAxOiAid2h5IG5vdCBoYXZlIGEgc3RyaW5nIHBheWxvYWQ/IiwKLSAgICAxODogInNwZWMgZG9lc24ndCBzcGVjaWZ5IGFueSBuZXN0aW5nIGxpbWl0YXRpb25zIiwKLX0KLQotY2xhc3MgVGVzdEZhaWwob2JqZWN0KToKLSAgICBkZWYgdGVzdF9mYWlsdXJlcyhzZWxmKToKLSAgICAgICAgZm9yIGlkeCwgZG9jIGluIGVudW1lcmF0ZShKU09ORE9DUyk6Ci0gICAgICAgICAgICBpZHggPSBpZHggKyAxCi0gICAgICAgICAgICBpZiBpZHggaW4gU0tJUFM6Ci0gICAgICAgICAgICAgICAgc2VsZi5sb2Fkcyhkb2MpCi0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLmxvYWRzKGRvYykKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBmYWlsdXJlIGZvciBmYWlsezB9Lmpzb246IHsxIXJ9Ii5mb3JtYXQoaWR4LCBkb2MpKQotCi0gICAgZGVmIHRlc3Rfbm9uX3N0cmluZ19rZXlzX2RpY3Qoc2VsZik6Ci0gICAgICAgIGRhdGEgPSB7J2EnIDogMSwgKDEsIDIpIDogMn0KLQotICAgICAgICAjVGhpcyBpcyBmb3IgYyBlbmNvZGVyCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kdW1wcywgZGF0YSkKLQotICAgICAgICAjVGhpcyBpcyBmb3IgcHl0aG9uIGVuY29kZXIKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmR1bXBzLCBkYXRhLCBpbmRlbnQ9VHJ1ZSkKLQotCi1jbGFzcyBUZXN0UHlGYWlsKFRlc3RGYWlsLCBQeVRlc3QpOiBwYXNzCi1jbGFzcyBUZXN0Q0ZhaWwoVGVzdEZhaWwsIENUZXN0KTogcGFzcwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9qc29uL3Rlc3RzL3Rlc3RfZmxvYXQucHkgYi9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9mbG9hdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ5ZjlhZS4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9mbG9hdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLWltcG9ydCBtYXRoCi1mcm9tIGpzb24udGVzdHMgaW1wb3J0IFB5VGVzdCwgQ1Rlc3QKLQotCi1jbGFzcyBUZXN0RmxvYXQob2JqZWN0KToKLSAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6Ci0gICAgICAgIGZvciBudW0gaW4gWzE2MTcxNjE3NzEuNzY1MDAwMSwgbWF0aC5waSwgbWF0aC5waSoqMTAwLAotICAgICAgICAgICAgICAgICAgICBtYXRoLnBpKiotMTAwLCAzLjFdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChzZWxmLmR1bXBzKG51bSkpLCBudW0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhudW0pKSwgbnVtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHVuaWNvZGUoc2VsZi5kdW1wcyhudW0pKSksIG51bSkKLQotICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6Ci0gICAgICAgIGZvciBudW0gaW4gWzEsIDFMLCAxPDwzMiwgMTw8NjRdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKG51bSksIHN0cihudW0pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoc2VsZi5kdW1wcyhudW0pKSwgbnVtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMobnVtKSksIG51bSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2Fkcyh1bmljb2RlKHNlbGYuZHVtcHMobnVtKSkpLCBudW0pCi0KLSAgICBkZWYgdGVzdF9vdXRfb2ZfcmFuZ2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcygnWzIzNDU2Nzg5MDEyRTY2Nl0nKSwgW2Zsb2F0KCdpbmYnKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcygnWy0yMzQ1Njc4OTAxMkU2NjZdJyksIFtmbG9hdCgnLWluZicpXSkKLQotICAgIGRlZiB0ZXN0X2FsbG93X25hbihzZWxmKToKLSAgICAgICAgZm9yIHZhbCBpbiAoZmxvYXQoJ2luZicpLCBmbG9hdCgnLWluZicpLCBmbG9hdCgnbmFuJykpOgotICAgICAgICAgICAgb3V0ID0gc2VsZi5kdW1wcyhbdmFsXSkKLSAgICAgICAgICAgIGlmIHZhbCA9PSB2YWw6ICAjIGluZgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhvdXQpLCBbdmFsXSkKLSAgICAgICAgICAgIGVsc2U6ICAjIG5hbgotICAgICAgICAgICAgICAgIHJlcyA9IHNlbGYubG9hZHMob3V0KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXNbMF0sIHJlc1swXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZHVtcHMsIFt2YWxdLCBhbGxvd19uYW49RmFsc2UpCi0KLQotY2xhc3MgVGVzdFB5RmxvYXQoVGVzdEZsb2F0LCBQeVRlc3QpOiBwYXNzCi1jbGFzcyBUZXN0Q0Zsb2F0KFRlc3RGbG9hdCwgQ1Rlc3QpOiBwYXNzCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9pbmRlbnQucHkgYi9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9pbmRlbnQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliMTg3NjEuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9qc29uL3Rlc3RzL3Rlc3RfaW5kZW50LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotaW1wb3J0IHRleHR3cmFwCi1mcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwotZnJvbSBqc29uLnRlc3RzIGltcG9ydCBQeVRlc3QsIENUZXN0Ci0KLQotY2xhc3MgVGVzdEluZGVudChvYmplY3QpOgotICAgIGRlZiB0ZXN0X2luZGVudChzZWxmKToKLSAgICAgICAgaCA9IFtbJ2Jsb3JwaWUnXSwgWyd3aG9vcHMnXSwgW10sICdkLXNodGFlb3UnLCAnZC1udGhpb3VoJywgJ2ktdmhiamtobnRoJywKLSAgICAgICAgICAgICB7J25pZnR5JzogODd9LCB7J2ZpZWxkJzogJ3llcycsICdtb3JlZmllbGQnOiBGYWxzZX0gXQotCi0gICAgICAgIGV4cGVjdCA9IHRleHR3cmFwLmRlZGVudCgiIiJcCi0gICAgICAgIFsKLSAgICAgICAgICBbCi0gICAgICAgICAgICAiYmxvcnBpZSIKLSAgICAgICAgICBdLAotICAgICAgICAgIFsKLSAgICAgICAgICAgICJ3aG9vcHMiCi0gICAgICAgICAgXSwKLSAgICAgICAgICBbXSwKLSAgICAgICAgICAiZC1zaHRhZW91IiwKLSAgICAgICAgICAiZC1udGhpb3VoIiwKLSAgICAgICAgICAiaS12aGJqa2hudGgiLAotICAgICAgICAgIHsKLSAgICAgICAgICAgICJuaWZ0eSI6IDg3Ci0gICAgICAgICAgfSwKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAiZmllbGQiOiAieWVzIiwKLSAgICAgICAgICAgICJtb3JlZmllbGQiOiBmYWxzZQotICAgICAgICAgIH0KLSAgICAgICAgXSIiIikKLQotCi0gICAgICAgIGQxID0gc2VsZi5kdW1wcyhoKQotICAgICAgICBkMiA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PTIsIHNvcnRfa2V5cz1UcnVlLCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKQotCi0gICAgICAgIGgxID0gc2VsZi5sb2FkcyhkMSkKLSAgICAgICAgaDIgPSBzZWxmLmxvYWRzKGQyKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDEsIGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDIsIGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIsIGV4cGVjdCkKLQotICAgIGRlZiB0ZXN0X2luZGVudDAoc2VsZik6Ci0gICAgICAgIGggPSB7MzogMX0KLSAgICAgICAgZGVmIGNoZWNrKGluZGVudCwgZXhwZWN0ZWQpOgotICAgICAgICAgICAgZDEgPSBzZWxmLmR1bXBzKGgsIGluZGVudD1pbmRlbnQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLCBleHBlY3RlZCkKLQotICAgICAgICAgICAgc2lvID0gU3RyaW5nSU8oKQotICAgICAgICAgICAgc2VsZi5qc29uLmR1bXAoaCwgc2lvLCBpbmRlbnQ9aW5kZW50KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaW8uZ2V0dmFsdWUoKSwgZXhwZWN0ZWQpCi0KLSAgICAgICAgIyBpbmRlbnQ9MCBzaG91bGQgZW1pdCBuZXdsaW5lcwotICAgICAgICBjaGVjaygwLCAne1xuIjMiOiAxXG59JykKLSAgICAgICAgIyBpbmRlbnQ9Tm9uZSBpcyBtb3JlIGNvbXBhY3QKLSAgICAgICAgY2hlY2soTm9uZSwgJ3siMyI6IDF9JykKLQotCi1jbGFzcyBUZXN0UHlJbmRlbnQoVGVzdEluZGVudCwgUHlUZXN0KTogcGFzcwotY2xhc3MgVGVzdENJbmRlbnQoVGVzdEluZGVudCwgQ1Rlc3QpOiBwYXNzCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9wYXNzMS5weSBiL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X3Bhc3MxLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjgyNTliLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X3Bhc3MxLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotZnJvbSBqc29uLnRlc3RzIGltcG9ydCBQeVRlc3QsIENUZXN0Ci0KLQotIyBmcm9tIGh0dHA6Ly9qc29uLm9yZy9KU09OX2NoZWNrZXIvdGVzdC9wYXNzMS5qc29uCi1KU09OID0gcicnJwotWwotICAgICJKU09OIFRlc3QgUGF0dGVybiBwYXNzMSIsCi0gICAgeyJvYmplY3Qgd2l0aCAxIG1lbWJlciI6WyJhcnJheSB3aXRoIDEgZWxlbWVudCJdfSwKLSAgICB7fSwKLSAgICBbXSwKLSAgICAtNDIsCi0gICAgdHJ1ZSwKLSAgICBmYWxzZSwKLSAgICBudWxsLAotICAgIHsKLSAgICAgICAgImludGVnZXIiOiAxMjM0NTY3ODkwLAotICAgICAgICAicmVhbCI6IC05ODc2LjU0MzIxMCwKLSAgICAgICAgImUiOiAwLjEyMzQ1Njc4OWUtMTIsCi0gICAgICAgICJFIjogMS4yMzQ1Njc4OTBFKzM0LAotICAgICAgICAiIjogIDIzNDU2Nzg5MDEyRTY2LAotICAgICAgICAiemVybyI6IDAsCi0gICAgICAgICJvbmUiOiAxLAotICAgICAgICAic3BhY2UiOiAiICIsCi0gICAgICAgICJxdW90ZSI6ICJcIiIsCi0gICAgICAgICJiYWNrc2xhc2giOiAiXFwiLAotICAgICAgICAiY29udHJvbHMiOiAiXGJcZlxuXHJcdCIsCi0gICAgICAgICJzbGFzaCI6ICIvICYgXC8iLAotICAgICAgICAiYWxwaGEiOiAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd5eiIsCi0gICAgICAgICJBTFBIQSI6ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1laIiwKLSAgICAgICAgImRpZ2l0IjogIjAxMjM0NTY3ODkiLAotICAgICAgICAiMDEyMzQ1Njc4OSI6ICJkaWdpdCIsCi0gICAgICAgICJzcGVjaWFsIjogImAxfiFAIyQlXiYqKClfKy09eyc6WyxdfXw7LjwvPj8iLAotICAgICAgICAiaGV4IjogIlx1MDEyM1x1NDU2N1x1ODlBQlx1Q0RFRlx1YWJjZFx1ZWY0QSIsCi0gICAgICAgICJ0cnVlIjogdHJ1ZSwKLSAgICAgICAgImZhbHNlIjogZmFsc2UsCi0gICAgICAgICJudWxsIjogbnVsbCwKLSAgICAgICAgImFycmF5IjpbICBdLAotICAgICAgICAib2JqZWN0Ijp7ICB9LAotICAgICAgICAiYWRkcmVzcyI6ICI1MCBTdC4gSmFtZXMgU3RyZWV0IiwKLSAgICAgICAgInVybCI6ICJodHRwOi8vd3d3LkpTT04ub3JnLyIsCi0gICAgICAgICJjb21tZW50IjogIi8vIC8qIDwhLS0gLS0iLAotICAgICAgICAiIyAtLSAtLT4gKi8iOiAiICIsCi0gICAgICAgICIgcyBwIGEgYyBlIGQgIiA6WzEsMiAsIDMKLQotLAotCi00ICwgNSAgICAgICAgLCAgICAgICAgICA2ICAgICAgICAgICAsNyAgICAgICAgXSwiY29tcGFjdCI6WzEsMiwzLDQsNSw2LDddLAotICAgICAgICAianNvbnRleHQiOiAie1wib2JqZWN0IHdpdGggMSBtZW1iZXJcIjpbXCJhcnJheSB3aXRoIDEgZWxlbWVudFwiXX0iLAotICAgICAgICAicXVvdGVzIjogIiYjMzQ7IFx1MDAyMiAlMjIgMHgyMiAwMzQgJiN4MjI7IiwKLSAgICAgICAgIlwvXFxcIlx1Q0FGRVx1QkFCRVx1QUI5OFx1RkNERVx1YmNkYVx1ZWY0QVxiXGZcblxyXHRgMX4hQCMkJV4mKigpXystPVtde318OzonLC4vPD4/IgotOiAiQSBrZXkgY2FuIGJlIGFueSBzdHJpbmciCi0gICAgfSwKLSAgICAwLjUgLDk4LjYKLSwKLTk5LjQ0Ci0sCi0KLTEwNjYsCi0xZTEsCi0wLjFlMSwKLTFlLTEsCi0xZTAwLDJlKzAwLDJlLTAwCi0sInJvc2VidWQiXQotJycnCi0KLWNsYXNzIFRlc3RQYXNzMShvYmplY3QpOgotICAgIGRlZiB0ZXN0X3BhcnNlKHNlbGYpOgotICAgICAgICAjIHRlc3QgaW4vb3V0IGVxdWl2YWxlbmNlIGFuZCBwYXJzaW5nCi0gICAgICAgIHJlcyA9IHNlbGYubG9hZHMoSlNPTikKLSAgICAgICAgb3V0ID0gc2VsZi5kdW1wcyhyZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZWxmLmxvYWRzKG91dCkpCi0KLQotY2xhc3MgVGVzdFB5UGFzczEoVGVzdFBhc3MxLCBQeVRlc3QpOiBwYXNzCi1jbGFzcyBUZXN0Q1Bhc3MxKFRlc3RQYXNzMSwgQ1Rlc3QpOiBwYXNzCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9wYXNzMi5weSBiL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X3Bhc3MyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMmJiNmQ3Li4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X3Bhc3MyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotZnJvbSBqc29uLnRlc3RzIGltcG9ydCBQeVRlc3QsIENUZXN0Ci0KLQotIyBmcm9tIGh0dHA6Ly9qc29uLm9yZy9KU09OX2NoZWNrZXIvdGVzdC9wYXNzMi5qc29uCi1KU09OID0gcicnJwotW1tbW1tbW1tbW1tbW1tbW1tbWyJOb3QgdG9vIGRlZXAiXV1dXV1dXV1dXV1dXV1dXV1dXQotJycnCi0KLWNsYXNzIFRlc3RQYXNzMihvYmplY3QpOgotICAgIGRlZiB0ZXN0X3BhcnNlKHNlbGYpOgotICAgICAgICAjIHRlc3QgaW4vb3V0IGVxdWl2YWxlbmNlIGFuZCBwYXJzaW5nCi0gICAgICAgIHJlcyA9IHNlbGYubG9hZHMoSlNPTikKLSAgICAgICAgb3V0ID0gc2VsZi5kdW1wcyhyZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZWxmLmxvYWRzKG91dCkpCi0KLQotY2xhc3MgVGVzdFB5UGFzczIoVGVzdFBhc3MyLCBQeVRlc3QpOiBwYXNzCi1jbGFzcyBUZXN0Q1Bhc3MyKFRlc3RQYXNzMiwgQ1Rlc3QpOiBwYXNzCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9wYXNzMy5weSBiL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X3Bhc3MzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjFmOWEwLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X3Bhc3MzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotZnJvbSBqc29uLnRlc3RzIGltcG9ydCBQeVRlc3QsIENUZXN0Ci0KLQotIyBmcm9tIGh0dHA6Ly9qc29uLm9yZy9KU09OX2NoZWNrZXIvdGVzdC9wYXNzMy5qc29uCi1KU09OID0gcicnJwotewotICAgICJKU09OIFRlc3QgUGF0dGVybiBwYXNzMyI6IHsKLSAgICAgICAgIlRoZSBvdXRlcm1vc3QgdmFsdWUiOiAibXVzdCBiZSBhbiBvYmplY3Qgb3IgYXJyYXkuIiwKLSAgICAgICAgIkluIHRoaXMgdGVzdCI6ICJJdCBpcyBhbiBvYmplY3QuIgotICAgIH0KLX0KLScnJwotCi0KLWNsYXNzIFRlc3RQYXNzMyhvYmplY3QpOgotICAgIGRlZiB0ZXN0X3BhcnNlKHNlbGYpOgotICAgICAgICAjIHRlc3QgaW4vb3V0IGVxdWl2YWxlbmNlIGFuZCBwYXJzaW5nCi0gICAgICAgIHJlcyA9IHNlbGYubG9hZHMoSlNPTikKLSAgICAgICAgb3V0ID0gc2VsZi5kdW1wcyhyZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZWxmLmxvYWRzKG91dCkpCi0KLQotY2xhc3MgVGVzdFB5UGFzczMoVGVzdFBhc3MzLCBQeVRlc3QpOiBwYXNzCi1jbGFzcyBUZXN0Q1Bhc3MzKFRlc3RQYXNzMywgQ1Rlc3QpOiBwYXNzCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9yZWN1cnNpb24ucHkgYi9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9yZWN1cnNpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1MjIxZTUuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9qc29uL3Rlc3RzL3Rlc3RfcmVjdXJzaW9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLWZyb20ganNvbi50ZXN0cyBpbXBvcnQgUHlUZXN0LCBDVGVzdAotCi0KLWNsYXNzIEpTT05UZXN0T2JqZWN0OgotICAgIHBhc3MKLQotCi1jbGFzcyBUZXN0UmVjdXJzaW9uKG9iamVjdCk6Ci0gICAgZGVmIHRlc3RfbGlzdHJlY3Vyc2lvbihzZWxmKToKLSAgICAgICAgeCA9IFtdCi0gICAgICAgIHguYXBwZW5kKHgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuZHVtcHMoeCkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoImRpZG4ndCByYWlzZSBWYWx1ZUVycm9yIG9uIGxpc3QgcmVjdXJzaW9uIikKLSAgICAgICAgeCA9IFtdCi0gICAgICAgIHkgPSBbeF0KLSAgICAgICAgeC5hcHBlbmQoeSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5kdW1wcyh4KQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiZGlkbid0IHJhaXNlIFZhbHVlRXJyb3Igb24gYWx0ZXJuYXRpbmcgbGlzdCByZWN1cnNpb24iKQotICAgICAgICB5ID0gW10KLSAgICAgICAgeCA9IFt5LCB5XQotICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBtYXJrZXIgaXMgY2xlYXJlZAotICAgICAgICBzZWxmLmR1bXBzKHgpCi0KLSAgICBkZWYgdGVzdF9kaWN0cmVjdXJzaW9uKHNlbGYpOgotICAgICAgICB4ID0ge30KLSAgICAgICAgeFsidGVzdCJdID0geAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmR1bXBzKHgpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJkaWRuJ3QgcmFpc2UgVmFsdWVFcnJvciBvbiBkaWN0IHJlY3Vyc2lvbiIpCi0gICAgICAgIHggPSB7fQotICAgICAgICB5ID0geyJhIjogeCwgImIiOiB4fQotICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBtYXJrZXIgaXMgY2xlYXJlZAotICAgICAgICBzZWxmLmR1bXBzKHgpCi0KLSAgICBkZWYgdGVzdF9kZWZhdWx0cmVjdXJzaW9uKHNlbGYpOgotICAgICAgICBjbGFzcyBSZWN1cnNpdmVKU09ORW5jb2RlcihzZWxmLmpzb24uSlNPTkVuY29kZXIpOgotICAgICAgICAgICAgcmVjdXJzZSA9IEZhbHNlCi0gICAgICAgICAgICBkZWYgZGVmYXVsdChzZWxmLCBvKToKLSAgICAgICAgICAgICAgICBpZiBvIGlzIEpTT05UZXN0T2JqZWN0OgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnJlY3Vyc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW0pTT05UZXN0T2JqZWN0XQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdKU09OVGVzdE9iamVjdCcKLSAgICAgICAgICAgICAgICByZXR1cm4gcHlqc29uLkpTT05FbmNvZGVyLmRlZmF1bHQobykKLQotICAgICAgICBlbmMgPSBSZWN1cnNpdmVKU09ORW5jb2RlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jLmVuY29kZShKU09OVGVzdE9iamVjdCksICciSlNPTlRlc3RPYmplY3QiJykKLSAgICAgICAgZW5jLnJlY3Vyc2UgPSBUcnVlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVuYy5lbmNvZGUoSlNPTlRlc3RPYmplY3QpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJkaWRuJ3QgcmFpc2UgVmFsdWVFcnJvciBvbiBkZWZhdWx0IHJlY3Vyc2lvbiIpCi0KLQotICAgIGRlZiB0ZXN0X2hpZ2hseV9uZXN0ZWRfb2JqZWN0c19kZWNvZGluZyhzZWxmKToKLSAgICAgICAgIyB0ZXN0IHRoYXQgbG9hZGluZyBoaWdobHktbmVzdGVkIG9iamVjdHMgZG9lc24ndCBzZWdmYXVsdCB3aGVuIEMKLSAgICAgICAgIyBhY2NlbGVyYXRpb25zIGFyZSB1c2VkLiBTZWUgIzEyMDE3Ci0gICAgICAgICMgc3RyCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKLSAgICAgICAgICAgIHNlbGYubG9hZHMoJ3siYSI6JyAqIDEwMDAwMCArICcxJyArICd9JyAqIDEwMDAwMCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgotICAgICAgICAgICAgc2VsZi5sb2FkcygneyJhIjonICogMTAwMDAwICsgJ1sxXScgKyAnfScgKiAxMDAwMDApCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKLSAgICAgICAgICAgIHNlbGYubG9hZHMoJ1snICogMTAwMDAwICsgJzEnICsgJ10nICogMTAwMDAwKQotICAgICAgICAjIHVuaWNvZGUKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgotICAgICAgICAgICAgc2VsZi5sb2Fkcyh1J3siYSI6JyAqIDEwMDAwMCArIHUnMScgKyB1J30nICogMTAwMDAwKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6Ci0gICAgICAgICAgICBzZWxmLmxvYWRzKHUneyJhIjonICogMTAwMDAwICsgdSdbMV0nICsgdSd9JyAqIDEwMDAwMCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgotICAgICAgICAgICAgc2VsZi5sb2Fkcyh1J1snICogMTAwMDAwICsgdScxJyArIHUnXScgKiAxMDAwMDApCi0KLSAgICBkZWYgdGVzdF9oaWdobHlfbmVzdGVkX29iamVjdHNfZW5jb2Rpbmcoc2VsZik6Ci0gICAgICAgICMgU2VlICMxMjA1MQotICAgICAgICBsLCBkID0gW10sIHt9Ci0gICAgICAgIGZvciB4IGluIHhyYW5nZSgxMDAwMDApOgotICAgICAgICAgICAgbCwgZCA9IFtsXSwgeydrJzpkfQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6Ci0gICAgICAgICAgICBzZWxmLmR1bXBzKGwpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKLSAgICAgICAgICAgIHNlbGYuZHVtcHMoZCkKLQotICAgIGRlZiB0ZXN0X2VuZGxlc3NfcmVjdXJzaW9uKHNlbGYpOgotICAgICAgICAjIFNlZSAjMTIwNTEKLSAgICAgICAgY2xhc3MgRW5kbGVzc0pTT05FbmNvZGVyKHNlbGYuanNvbi5KU09ORW5jb2Rlcik6Ci0gICAgICAgICAgICBkZWYgZGVmYXVsdChzZWxmLCBvKToKLSAgICAgICAgICAgICAgICAiIiJJZiBjaGVja19jaXJjdWxhciBpcyBGYWxzZSwgdGhpcyB3aWxsIGtlZXAgYWRkaW5nIGFub3RoZXIgbGlzdC4iIiIKLSAgICAgICAgICAgICAgICByZXR1cm4gW29dCi0KLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgotICAgICAgICAgICAgRW5kbGVzc0pTT05FbmNvZGVyKGNoZWNrX2NpcmN1bGFyPUZhbHNlKS5lbmNvZGUoNWopCi0KLQotY2xhc3MgVGVzdFB5UmVjdXJzaW9uKFRlc3RSZWN1cnNpb24sIFB5VGVzdCk6IHBhc3MKLWNsYXNzIFRlc3RDUmVjdXJzaW9uKFRlc3RSZWN1cnNpb24sIENUZXN0KTogcGFzcwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9qc29uL3Rlc3RzL3Rlc3Rfc2NhbnN0cmluZy5weSBiL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X3NjYW5zdHJpbmcucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmZWY4Y2IuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9qc29uL3Rlc3RzL3Rlc3Rfc2NhbnN0cmluZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi1pbXBvcnQgc3lzCi1mcm9tIGpzb24udGVzdHMgaW1wb3J0IFB5VGVzdCwgQ1Rlc3QKLQotCi1jbGFzcyBUZXN0U2NhbnN0cmluZyhvYmplY3QpOgotICAgIGRlZiB0ZXN0X3NjYW5zdHJpbmcoc2VsZik6Ci0gICAgICAgIHNjYW5zdHJpbmcgPSBzZWxmLmpzb24uZGVjb2Rlci5zY2Fuc3RyaW5nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBzY2Fuc3RyaW5nKCcielxcdWQ4MzRcXHVkZDIweCInLCAxLCBOb25lLCBUcnVlKSwKLSAgICAgICAgICAgICh1J3pcVTAwMDFkMTIweCcsIDE2KSkKLQotICAgICAgICBpZiBzeXMubWF4dW5pY29kZSA9PSA2NTUzNToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICAgICAgc2NhbnN0cmluZyh1JyJ6XFUwMDAxZDEyMHgiJywgMSwgTm9uZSwgVHJ1ZSksCi0gICAgICAgICAgICAgICAgKHUnelxVMDAwMWQxMjB4JywgNikpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgICAgIHNjYW5zdHJpbmcodScielxVMDAwMWQxMjB4IicsIDEsIE5vbmUsIFRydWUpLAotICAgICAgICAgICAgICAgICh1J3pcVTAwMDFkMTIweCcsIDUpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBzY2Fuc3RyaW5nKCciXFx1MDA3YiInLCAxLCBOb25lLCBUcnVlKSwKLSAgICAgICAgICAgICh1J3snLCA4KSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgc2NhbnN0cmluZygnIkEgSlNPTiBwYXlsb2FkIHNob3VsZCBiZSBhbiBvYmplY3Qgb3IgYXJyYXksIG5vdCBhIHN0cmluZy4iJywgMSwgTm9uZSwgVHJ1ZSksCi0gICAgICAgICAgICAodSdBIEpTT04gcGF5bG9hZCBzaG91bGQgYmUgYW4gb2JqZWN0IG9yIGFycmF5LCBub3QgYSBzdHJpbmcuJywgNjApKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBzY2Fuc3RyaW5nKCdbIlVuY2xvc2VkIGFycmF5IicsIDIsIE5vbmUsIFRydWUpLAotICAgICAgICAgICAgKHUnVW5jbG9zZWQgYXJyYXknLCAxNykpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHNjYW5zdHJpbmcoJ1siZXh0cmEgY29tbWEiLF0nLCAyLCBOb25lLCBUcnVlKSwKLSAgICAgICAgICAgICh1J2V4dHJhIGNvbW1hJywgMTQpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBzY2Fuc3RyaW5nKCdbImRvdWJsZSBleHRyYSBjb21tYSIsLF0nLCAyLCBOb25lLCBUcnVlKSwKLSAgICAgICAgICAgICh1J2RvdWJsZSBleHRyYSBjb21tYScsIDIxKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgc2NhbnN0cmluZygnWyJDb21tYSBhZnRlciB0aGUgY2xvc2UiXSwnLCAyLCBOb25lLCBUcnVlKSwKLSAgICAgICAgICAgICh1J0NvbW1hIGFmdGVyIHRoZSBjbG9zZScsIDI0KSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgc2NhbnN0cmluZygnWyJFeHRyYSBjbG9zZSJdXScsIDIsIE5vbmUsIFRydWUpLAotICAgICAgICAgICAgKHUnRXh0cmEgY2xvc2UnLCAxNCkpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHNjYW5zdHJpbmcoJ3siRXh0cmEgY29tbWEiOiB0cnVlLH0nLCAyLCBOb25lLCBUcnVlKSwKLSAgICAgICAgICAgICh1J0V4dHJhIGNvbW1hJywgMTQpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBzY2Fuc3RyaW5nKCd7IkV4dHJhIHZhbHVlIGFmdGVyIGNsb3NlIjogdHJ1ZX0gIm1pc3BsYWNlZCBxdW90ZWQgdmFsdWUiJywgMiwgTm9uZSwgVHJ1ZSksCi0gICAgICAgICAgICAodSdFeHRyYSB2YWx1ZSBhZnRlciBjbG9zZScsIDI2KSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgc2NhbnN0cmluZygneyJJbGxlZ2FsIGV4cHJlc3Npb24iOiAxICsgMn0nLCAyLCBOb25lLCBUcnVlKSwKLSAgICAgICAgICAgICh1J0lsbGVnYWwgZXhwcmVzc2lvbicsIDIxKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgc2NhbnN0cmluZygneyJJbGxlZ2FsIGludm9jYXRpb24iOiBhbGVydCgpfScsIDIsIE5vbmUsIFRydWUpLAotICAgICAgICAgICAgKHUnSWxsZWdhbCBpbnZvY2F0aW9uJywgMjEpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBzY2Fuc3RyaW5nKCd7Ik51bWJlcnMgY2Fubm90IGhhdmUgbGVhZGluZyB6ZXJvZXMiOiAwMTN9JywgMiwgTm9uZSwgVHJ1ZSksCi0gICAgICAgICAgICAodSdOdW1iZXJzIGNhbm5vdCBoYXZlIGxlYWRpbmcgemVyb2VzJywgMzcpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBzY2Fuc3RyaW5nKCd7Ik51bWJlcnMgY2Fubm90IGJlIGhleCI6IDB4MTR9JywgMiwgTm9uZSwgVHJ1ZSksCi0gICAgICAgICAgICAodSdOdW1iZXJzIGNhbm5vdCBiZSBoZXgnLCAyNCkpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHNjYW5zdHJpbmcoJ1tbW1tbW1tbW1tbW1tbW1tbW1tbIlRvbyBkZWVwIl1dXV1dXV1dXV1dXV1dXV1dXV1dJywgMjEsIE5vbmUsIFRydWUpLAotICAgICAgICAgICAgKHUnVG9vIGRlZXAnLCAzMCkpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHNjYW5zdHJpbmcoJ3siTWlzc2luZyBjb2xvbiIgbnVsbH0nLCAyLCBOb25lLCBUcnVlKSwKLSAgICAgICAgICAgICh1J01pc3NpbmcgY29sb24nLCAxNikpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHNjYW5zdHJpbmcoJ3siRG91YmxlIGNvbG9uIjo6IG51bGx9JywgMiwgTm9uZSwgVHJ1ZSksCi0gICAgICAgICAgICAodSdEb3VibGUgY29sb24nLCAxNSkpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHNjYW5zdHJpbmcoJ3siQ29tbWEgaW5zdGVhZCBvZiBjb2xvbiIsIG51bGx9JywgMiwgTm9uZSwgVHJ1ZSksCi0gICAgICAgICAgICAodSdDb21tYSBpbnN0ZWFkIG9mIGNvbG9uJywgMjUpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBzY2Fuc3RyaW5nKCdbIkNvbG9uIGluc3RlYWQgb2YgY29tbWEiOiBmYWxzZV0nLCAyLCBOb25lLCBUcnVlKSwKLSAgICAgICAgICAgICh1J0NvbG9uIGluc3RlYWQgb2YgY29tbWEnLCAyNSkpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHNjYW5zdHJpbmcoJ1siQmFkIHZhbHVlIiwgdHJ1dGhdJywgMiwgTm9uZSwgVHJ1ZSksCi0gICAgICAgICAgICAodSdCYWQgdmFsdWUnLCAxMikpCi0KLSAgICBkZWYgdGVzdF9pc3N1ZTM2MjMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuanNvbi5kZWNvZGVyLnNjYW5zdHJpbmcsIGIieHh4IiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInh4eCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5qc29uLmVuY29kZXIuZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWksIGIieHhceGZmIikKLQotICAgIGRlZiB0ZXN0X292ZXJmbG93KHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IpOgotICAgICAgICAgICAgc2VsZi5qc29uLmRlY29kZXIuc2NhbnN0cmluZyhiInh4eCIsIHN5cy5tYXhzaXplKzEpCi0KLQotY2xhc3MgVGVzdFB5U2NhbnN0cmluZyhUZXN0U2NhbnN0cmluZywgUHlUZXN0KTogcGFzcwotY2xhc3MgVGVzdENTY2Fuc3RyaW5nKFRlc3RTY2Fuc3RyaW5nLCBDVGVzdCk6IHBhc3MKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X3NlcGFyYXRvcnMucHkgYi9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF9zZXBhcmF0b3JzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDI0NmUxLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X3NlcGFyYXRvcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi1pbXBvcnQgdGV4dHdyYXAKLWZyb20ganNvbi50ZXN0cyBpbXBvcnQgUHlUZXN0LCBDVGVzdAotCi0KLWNsYXNzIFRlc3RTZXBhcmF0b3JzKG9iamVjdCk6Ci0gICAgZGVmIHRlc3Rfc2VwYXJhdG9ycyhzZWxmKToKLSAgICAgICAgaCA9IFtbJ2Jsb3JwaWUnXSwgWyd3aG9vcHMnXSwgW10sICdkLXNodGFlb3UnLCAnZC1udGhpb3VoJywgJ2ktdmhiamtobnRoJywKLSAgICAgICAgICAgICB7J25pZnR5JzogODd9LCB7J2ZpZWxkJzogJ3llcycsICdtb3JlZmllbGQnOiBGYWxzZX0gXQotCi0gICAgICAgIGV4cGVjdCA9IHRleHR3cmFwLmRlZGVudCgiIiJcCi0gICAgICAgIFsKLSAgICAgICAgICBbCi0gICAgICAgICAgICAiYmxvcnBpZSIKLSAgICAgICAgICBdICwKLSAgICAgICAgICBbCi0gICAgICAgICAgICAid2hvb3BzIgotICAgICAgICAgIF0gLAotICAgICAgICAgIFtdICwKLSAgICAgICAgICAiZC1zaHRhZW91IiAsCi0gICAgICAgICAgImQtbnRoaW91aCIgLAotICAgICAgICAgICJpLXZoYmpraG50aCIgLAotICAgICAgICAgIHsKLSAgICAgICAgICAgICJuaWZ0eSIgOiA4NwotICAgICAgICAgIH0gLAotICAgICAgICAgIHsKLSAgICAgICAgICAgICJmaWVsZCIgOiAieWVzIiAsCi0gICAgICAgICAgICAibW9yZWZpZWxkIiA6IGZhbHNlCi0gICAgICAgICAgfQotICAgICAgICBdIiIiKQotCi0KLSAgICAgICAgZDEgPSBzZWxmLmR1bXBzKGgpCi0gICAgICAgIGQyID0gc2VsZi5kdW1wcyhoLCBpbmRlbnQ9Miwgc29ydF9rZXlzPVRydWUsIHNlcGFyYXRvcnM9KCcgLCcsICcgOiAnKSkKLQotICAgICAgICBoMSA9IHNlbGYubG9hZHMoZDEpCi0gICAgICAgIGgyID0gc2VsZi5sb2FkcyhkMikKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgxLCBoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgyLCBoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLCBleHBlY3QpCi0KLQotY2xhc3MgVGVzdFB5U2VwYXJhdG9ycyhUZXN0U2VwYXJhdG9ycywgUHlUZXN0KTogcGFzcwotY2xhc3MgVGVzdENTZXBhcmF0b3JzKFRlc3RTZXBhcmF0b3JzLCBDVGVzdCk6IHBhc3MKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X3NwZWVkdXBzLnB5IGIvbGliL3B5dGhvbjIuNy9qc29uL3Rlc3RzL3Rlc3Rfc3BlZWR1cHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxODZhNDAuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9qc29uL3Rlc3RzL3Rlc3Rfc3BlZWR1cHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1mcm9tIGpzb24udGVzdHMgaW1wb3J0IENUZXN0Ci0KLQotY2xhc3MgVGVzdFNwZWVkdXBzKENUZXN0KToKLSAgICBkZWYgdGVzdF9zY2Fuc3RyaW5nKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuanNvbi5kZWNvZGVyLnNjYW5zdHJpbmcuX19tb2R1bGVfXywgIl9qc29uIikKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLmpzb24uZGVjb2Rlci5zY2Fuc3RyaW5nLCBzZWxmLmpzb24uZGVjb2Rlci5jX3NjYW5zdHJpbmcpCi0KLSAgICBkZWYgdGVzdF9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmpzb24uZW5jb2Rlci5lbmNvZGVfYmFzZXN0cmluZ19hc2NpaS5fX21vZHVsZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICJfanNvbiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5qc29uLmVuY29kZXIuZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWksCi0gICAgICAgICAgICAgICAgICAgICAgc2VsZi5qc29uLmVuY29kZXIuY19lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSkKLQotY2xhc3MgVGVzdERlY29kZShDVGVzdCk6Ci0gICAgZGVmIHRlc3RfbWFrZV9zY2FubmVyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2VsZi5qc29uLnNjYW5uZXIuY19tYWtlX3NjYW5uZXIsIDEpCi0KLSAgICBkZWYgdGVzdF9tYWtlX2VuY29kZXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5qc29uLmVuY29kZXIuY19tYWtlX2VuY29kZXIsCi0gICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgIlx4Q0RceDdEXHgzRFx4NEVceDEyXHg0Q1x4RjlceDc5XHhEN1x4NTJceEJBXHg4Mlx4RjJceDI3XHg0QVx4N0RceEEwXHhDQVx4NzUiLAotICAgICAgICAgICAgTm9uZSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X3Rvb2wucHkgYi9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF90b29sLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2RmYjg0Li4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvanNvbi90ZXN0cy90ZXN0X3Rvb2wucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCB0ZXh0d3JhcAotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgc3VicHJvY2VzcwotZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKLWZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCi0KLWNsYXNzIFRlc3RUb29sKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkYXRhID0gIiIiCi0KLSAgICAgICAgW1siYmxvcnBpZSJdLFsgIndob29wcyIgXSAsIFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXHQiZC1zaHRhZW91IixcciJkLW50aGlvdWgiLAotICAgICAgICAiaS12aGJqa2hudGgiLCB7Im5pZnR5Ijo4N30sIHsibW9yZWZpZWxkIiA6XHRmYWxzZSwiZmllbGQiCi0gICAgICAgICAgICA6InllcyJ9ICBdCi0gICAgICAgICAgICIiIgotCi0gICAgZXhwZWN0ID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKLSAgICBbCi0gICAgICAgIFsKLSAgICAgICAgICAgICJibG9ycGllIgotICAgICAgICBdLAotICAgICAgICBbCi0gICAgICAgICAgICAid2hvb3BzIgotICAgICAgICBdLAotICAgICAgICBbXSwKLSAgICAgICAgImQtc2h0YWVvdSIsCi0gICAgICAgICJkLW50aGlvdWgiLAotICAgICAgICAiaS12aGJqa2hudGgiLAotICAgICAgICB7Ci0gICAgICAgICAgICAibmlmdHkiOiA4NwotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAiZmllbGQiOiAieWVzIiwKLSAgICAgICAgICAgICJtb3JlZmllbGQiOiBmYWxzZQotICAgICAgICB9Ci0gICAgXQotICAgICIiIikKLQotICAgIGRlZiB0ZXN0X3N0ZGluX3N0ZG91dChzZWxmKToKLSAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oCi0gICAgICAgICAgICAgICAgKHN5cy5leGVjdXRhYmxlLCAnLW0nLCAnanNvbi50b29sJyksCi0gICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICBvdXQsIGVyciA9IHByb2MuY29tbXVuaWNhdGUoc2VsZi5kYXRhLmVuY29kZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zcGxpdGxpbmVzKCksIHNlbGYuZXhwZWN0LmVuY29kZSgpLnNwbGl0bGluZXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIE5vbmUpCi0KLSAgICBkZWYgX2NyZWF0ZV9pbmZpbGUoc2VsZik6Ci0gICAgICAgIGluZmlsZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KLSAgICAgICAgd2l0aCBvcGVuKGluZmlsZSwgInciKSBhcyBmcDoKLSAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5yZW1vdmUsIGluZmlsZSkKLSAgICAgICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YSkKLSAgICAgICAgcmV0dXJuIGluZmlsZQotCi0gICAgZGVmIHRlc3RfaW5maWxlX3N0ZG91dChzZWxmKToKLSAgICAgICAgaW5maWxlID0gc2VsZi5fY3JlYXRlX2luZmlsZSgpCi0gICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ2pzb24udG9vbCcsIGluZmlsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3BsaXRsaW5lcygpLCBzZWxmLmV4cGVjdC5lbmNvZGUoKS5zcGxpdGxpbmVzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCi0KLSAgICBkZWYgdGVzdF9pbmZpbGVfb3V0ZmlsZShzZWxmKToKLSAgICAgICAgaW5maWxlID0gc2VsZi5fY3JlYXRlX2luZmlsZSgpCi0gICAgICAgIG91dGZpbGUgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgJy5vdXQnCi0gICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ2pzb24udG9vbCcsIGluZmlsZSwgb3V0ZmlsZSkKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLnJlbW92ZSwgb3V0ZmlsZSkKLSAgICAgICAgd2l0aCBvcGVuKG91dGZpbGUsICJyIikgYXMgZnA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWQoKSwgc2VsZi5leHBlY3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF91bmljb2RlLnB5IGIvbGliL3B5dGhvbjIuNy9qc29uL3Rlc3RzL3Rlc3RfdW5pY29kZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkwZjE1OC4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2pzb24vdGVzdHMvdGVzdF91bmljb2RlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKLWZyb20ganNvbi50ZXN0cyBpbXBvcnQgUHlUZXN0LCBDVGVzdAotCi0KLWNsYXNzIFRlc3RVbmljb2RlKG9iamVjdCk6Ci0gICAgZGVmIHRlc3RfZW5jb2RpbmcxKHNlbGYpOgotICAgICAgICBlbmNvZGVyID0gc2VsZi5qc29uLkpTT05FbmNvZGVyKGVuY29kaW5nPSd1dGYtOCcpCi0gICAgICAgIHUgPSB1J1xOe0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQX1cTntHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQX0nCi0gICAgICAgIHMgPSB1LmVuY29kZSgndXRmLTgnKQotICAgICAgICBqdSA9IGVuY29kZXIuZW5jb2RlKHUpCi0gICAgICAgIGpzID0gZW5jb2Rlci5lbmNvZGUocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqdSwganMpCi0KLSAgICBkZWYgdGVzdF9lbmNvZGluZzIoc2VsZik6Ci0gICAgICAgIHUgPSB1J1xOe0dSRUVLIFNNQUxMIExFVFRFUiBBTFBIQX1cTntHUkVFSyBDQVBJVEFMIExFVFRFUiBPTUVHQX0nCi0gICAgICAgIHMgPSB1LmVuY29kZSgndXRmLTgnKQotICAgICAgICBqdSA9IHNlbGYuZHVtcHModSwgZW5jb2Rpbmc9J3V0Zi04JykKLSAgICAgICAganMgPSBzZWxmLmR1bXBzKHMsIGVuY29kaW5nPSd1dGYtOCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoanUsIGpzKQotCi0gICAgZGVmIHRlc3RfZW5jb2RpbmczKHNlbGYpOgotICAgICAgICB1ID0gdSdcTntHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEF9XE57R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0F9JwotICAgICAgICBqID0gc2VsZi5kdW1wcyh1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGosICciXFx1MDNiMVxcdTAzYTkiJykKLQotICAgIGRlZiB0ZXN0X2VuY29kaW5nNChzZWxmKToKLSAgICAgICAgdSA9IHUnXE57R1JFRUsgU01BTEwgTEVUVEVSIEFMUEhBfVxOe0dSRUVLIENBUElUQUwgTEVUVEVSIE9NRUdBfScKLSAgICAgICAgaiA9IHNlbGYuZHVtcHMoW3VdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGosICdbIlxcdTAzYjFcXHUwM2E5Il0nKQotCi0gICAgZGVmIHRlc3RfZW5jb2Rpbmc1KHNlbGYpOgotICAgICAgICB1ID0gdSdcTntHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEF9XE57R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0F9JwotICAgICAgICBqID0gc2VsZi5kdW1wcyh1LCBlbnN1cmVfYXNjaWk9RmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaiwgdSciezB9IicuZm9ybWF0KHUpKQotCi0gICAgZGVmIHRlc3RfZW5jb2Rpbmc2KHNlbGYpOgotICAgICAgICB1ID0gdSdcTntHUkVFSyBTTUFMTCBMRVRURVIgQUxQSEF9XE57R1JFRUsgQ0FQSVRBTCBMRVRURVIgT01FR0F9JwotICAgICAgICBqID0gc2VsZi5kdW1wcyhbdV0sIGVuc3VyZV9hc2NpaT1GYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqLCB1J1siezB9Il0nLmZvcm1hdCh1KSkKLQotICAgIGRlZiB0ZXN0X2JpZ191bmljb2RlX2VuY29kZShzZWxmKToKLSAgICAgICAgdSA9IHUnXFUwMDAxZDEyMCcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKHUpLCAnIlxcdWQ4MzRcXHVkZDIwIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcyh1LCBlbnN1cmVfYXNjaWk9RmFsc2UpLCB1JyJcVTAwMDFkMTIwIicpCi0KLSAgICBkZWYgdGVzdF9iaWdfdW5pY29kZV9kZWNvZGUoc2VsZik6Ci0gICAgICAgIHUgPSB1J3pcVTAwMDFkMTIweCcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKCciJyArIHUgKyAnIicpLCB1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoJyJ6XFx1ZDgzNFxcdWRkMjB4IicpLCB1KQotCi0gICAgZGVmIHRlc3RfdW5pY29kZV9kZWNvZGUoc2VsZik6Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKDAsIDB4ZDdmZik6Ci0gICAgICAgICAgICB1ID0gdW5pY2hyKGkpCi0gICAgICAgICAgICBzID0gJyJcXHV7MDowNHh9IicuZm9ybWF0KGkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMocyksIHUpCi0KLSAgICBkZWYgdGVzdF9vYmplY3RfcGFpcnNfaG9va193aXRoX3VuaWNvZGUoc2VsZik6Ci0gICAgICAgIHMgPSB1J3sieGtkIjoxLCAia2N3IjoyLCAiYXJ0IjozLCAiaHhtIjo0LCAicXJ0Ijo1LCAicGFkIjo2LCAiaG95Ijo3fScKLSAgICAgICAgcCA9IFsodSJ4a2QiLCAxKSwgKHUia2N3IiwgMiksICh1ImFydCIsIDMpLCAodSJoeG0iLCA0KSwKLSAgICAgICAgICAgICAodSJxcnQiLCA1KSwgKHUicGFkIiwgNiksICh1ImhveSIsIDcpXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMocyksIGV2YWwocykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzLCBvYmplY3RfcGFpcnNfaG9vayA9IGxhbWJkYSB4OiB4KSwgcCkKLSAgICAgICAgb2QgPSBzZWxmLmxvYWRzKHMsIG9iamVjdF9wYWlyc19ob29rID0gT3JkZXJlZERpY3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QsIE9yZGVyZWREaWN0KHApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUob2QpLCBPcmRlcmVkRGljdCkKLSAgICAgICAgIyB0aGUgb2JqZWN0X3BhaXJzX2hvb2sgdGFrZXMgcHJpb3JpdHkgb3ZlciB0aGUgb2JqZWN0X2hvb2sKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfcGFpcnNfaG9vayA9IE9yZGVyZWREaWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X2hvb2sgPSBsYW1iZGEgeDogTm9uZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXJlZERpY3QocCkpCi0KLSAgICBkZWYgdGVzdF9kZWZhdWx0X2VuY29kaW5nKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHModSd7ImEiOiAiXHhlOSJ9Jy5lbmNvZGUoJ3V0Zi04JykpLAotICAgICAgICAgICAgeydhJzogdSdceGU5J30pCi0KLSAgICBkZWYgdGVzdF91bmljb2RlX3ByZXNlcnZhdGlvbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHNlbGYubG9hZHModSciIicpKSwgdW5pY29kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHNlbGYubG9hZHModSciYSInKSksIHVuaWNvZGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzZWxmLmxvYWRzKHUnWyJhIl0nKVswXSksIHVuaWNvZGUpCi0gICAgICAgICMgSXNzdWUgMTAwMzguCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzZWxmLmxvYWRzKCciZm9vIicpKSwgdW5pY29kZSkKLQotICAgIGRlZiB0ZXN0X2JhZF9lbmNvZGluZyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBzZWxmLmxvYWRzLCAnImEiJywgdSJyYXRceGU5IikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmxvYWRzLCAnImEiJywgMSkKLQotCi1jbGFzcyBUZXN0UHlVbmljb2RlKFRlc3RVbmljb2RlLCBQeVRlc3QpOiBwYXNzCi1jbGFzcyBUZXN0Q1VuaWNvZGUoVGVzdFVuaWNvZGUsIENUZXN0KTogcGFzcwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWItZHlubG9hZC9fQ0Yuc28gYi9saWIvcHl0aG9uMi43L2xpYi1keW5sb2FkL19DRi5zbwppbmRleCBiZmRkMDRmLi5mMjA4ZDdmIDEwMDc1NQotLS0gYS9saWIvcHl0aG9uMi43L2xpYi1keW5sb2FkL19DRi5zbworKysgYi9saWIvcHl0aG9uMi43L2xpYi1keW5sb2FkL19DRi5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2xpYi1keW5sb2FkL19sb2NhbGUuc28gYi9saWIvcHl0aG9uMi43L2xpYi1keW5sb2FkL19sb2NhbGUuc28KaW5kZXggZjUzMjE1Mi4uNGI5ZjZkMiAxMDA3NTUKLS0tIGEvbGliL3B5dGhvbjIuNy9saWItZHlubG9hZC9fbG9jYWxlLnNvCisrKyBiL2xpYi9weXRob24yLjcvbGliLWR5bmxvYWQvX2xvY2FsZS5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2xpYi1keW5sb2FkL19zY3Byb3h5LnNvIGIvbGliL3B5dGhvbjIuNy9saWItZHlubG9hZC9fc2Nwcm94eS5zbwppbmRleCAzYTQ4NjA2Li41YmVjZmMxIDEwMDc1NQotLS0gYS9saWIvcHl0aG9uMi43L2xpYi1keW5sb2FkL19zY3Byb3h5LnNvCisrKyBiL2xpYi9weXRob24yLjcvbGliLWR5bmxvYWQvX3NjcHJveHkuc28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWItZHlubG9hZC9fc3FsaXRlMy5zbyBiL2xpYi9weXRob24yLjcvbGliLWR5bmxvYWQvX3NxbGl0ZTMuc28KaW5kZXggMDRhMzczZi4uZDM3OGI4ZSAxMDA3NTUKLS0tIGEvbGliL3B5dGhvbjIuNy9saWItZHlubG9hZC9fc3FsaXRlMy5zbworKysgYi9saWIvcHl0aG9uMi43L2xpYi1keW5sb2FkL19zcWxpdGUzLnNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliLWR5bmxvYWQvYXJyYXkuc28gYi9saWIvcHl0aG9uMi43L2xpYi1keW5sb2FkL2FycmF5LnNvCmluZGV4IDZkZTQ1YjcuLmUxOTdiN2EgMTAwNzU1Ci0tLSBhL2xpYi9weXRob24yLjcvbGliLWR5bmxvYWQvYXJyYXkuc28KKysrIGIvbGliL3B5dGhvbjIuNy9saWItZHlubG9hZC9hcnJheS5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2xpYi1keW5sb2FkL2F1dG9HSUwuc28gYi9saWIvcHl0aG9uMi43L2xpYi1keW5sb2FkL2F1dG9HSUwuc28KaW5kZXggZjBlYmRjZS4uZGEzY2IxOCAxMDA3NTUKLS0tIGEvbGliL3B5dGhvbjIuNy9saWItZHlubG9hZC9hdXRvR0lMLnNvCisrKyBiL2xpYi9weXRob24yLjcvbGliLWR5bmxvYWQvYXV0b0dJTC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2xpYi1keW5sb2FkL3B5ZXhwYXQuc28gYi9saWIvcHl0aG9uMi43L2xpYi1keW5sb2FkL3B5ZXhwYXQuc28KaW5kZXggYTdhNzZmMi4uYjA5MWFjNSAxMDA3NTUKLS0tIGEvbGliL3B5dGhvbjIuNy9saWItZHlubG9hZC9weWV4cGF0LnNvCisrKyBiL2xpYi9weXRob24yLjcvbGliLWR5bmxvYWQvcHlleHBhdC5zbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2xpYi10ay90ZXN0L1JFQURNRSBiL2xpYi9weXRob24yLjcvbGliLXRrL3Rlc3QvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5Y2QxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2xpYi10ay90ZXN0L1JFQURNRQpAQCAtMCwwICsxLDE0IEBACitXcml0aW5nIG5ldyB0ZXN0cworPT09PT09PT09PT09PT09PT0KKworUHJlY2F1dGlvbgorLS0tLS0tLS0tLQorCisgICAgTmV3IHRlc3RzIHNob3VsZCBhbHdheXMgdXNlIG9ubHkgb25lIFRrIHdpbmRvdyBhdCBvbmNlLCBsaWtlIGFsbCB0aGUKKyAgICBjdXJyZW50IHRlc3RzIGRvLiBUaGlzIG1lYW5zIHRoYXQgeW91IGhhdmUgdG8gZGVzdHJveSB0aGUgY3VycmVudCB3aW5kb3cKKyAgICBiZWZvcmUgY3JlYXRpbmcgYW5vdGhlciBvbmUsIGFuZCBjbGVhbiB1cCBhZnRlciB0aGUgdGVzdC4gVGhlIG1vdGl2YXRpb24KKyAgICBiZWhpbmQgdGhpcyBpcyB0aGF0IHNvbWUgdGVzdHMgbWF5IGRlcGVuZCBvbiBoYXZpbmcgaXRzIHdpbmRvdyBmb2N1c2VkCisgICAgd2hpbGUgaXQgaXMgcnVubmluZyB0byB3b3JrIHByb3Blcmx5LCBhbmQgaXQgbWF5IGJlIGhhcmQgdG8gZm9yY2UgZm9jdXMKKyAgICBvbiB5b3VyIHdpbmRvdyBhY3Jvc3MgcGxhdGZvcm1zIChyaWdodCBub3cgb25seSB0ZXN0X3RyYXZlcnNhbCBhdAorICAgIHRlc3RfdHRrLnRlc3Rfd2lkZ2V0cy5Ob3RlYm9va1Rlc3QgZGVwZW5kcyBvbiB0aGlzKS4KKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWItdGsvdGVzdC9ydW50a3Rlc3RzLnB5IGIvbGliL3B5dGhvbjIuNy9saWItdGsvdGVzdC9ydW50a3Rlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZTE3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2xpYi10ay90ZXN0L3J1bnRrdGVzdHMucHkKQEAgLTAsMCArMSwxMTQgQEAKKyIiIgorVXNlIHRoaXMgbW9kdWxlIHRvIGdldCBhbmQgcnVuIGFsbCB0ayB0ZXN0cy4KKworVGtpbnRlciB0ZXN0cyBzaG91bGQgbGl2ZSBpbiBhIHBhY2thZ2UgaW5zaWRlIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhpcyBmaWxlCitsaXZlcywgbGlrZSB0ZXN0X3RraW50ZXIuCitFeHRlbnNpb25zIGFsc28gc2hvdWxkIGxpdmUgaW4gcGFja2FnZXMgZm9sbG93aW5nIHRoZSBzYW1lIHJ1bGUgYXMgYWJvdmUuCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAorCit0aGlzX2Rpcl9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCisKK190a191bmF2YWlsYWJsZSA9IE5vbmUKKworZGVmIGNoZWNrX3RrX2F2YWlsYWJpbGl0eSgpOgorICAgICIiIkNoZWNrIHRoYXQgVGsgaXMgaW5zdGFsbGVkIGFuZCBhdmFpbGFibGUuIiIiCisgICAgZ2xvYmFsIF90a191bmF2YWlsYWJsZQorCisgICAgaWYgX3RrX3VuYXZhaWxhYmxlIGlzIE5vbmU6CisgICAgICAgIF90a191bmF2YWlsYWJsZSA9IEZhbHNlCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICMgVGhlIEFxdWEgVGsgaW1wbGVtZW50YXRpb25zIG9uIE9TIFggY2FuIGFib3J0IHRoZSBwcm9jZXNzIGlmCisgICAgICAgICAgICAjIGJlaW5nIGNhbGxlZCBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSBhIHdpbmRvdyBzZXJ2ZXIgY29ubmVjdGlvbgorICAgICAgICAgICAgIyBjYW5ub3QgYmUgbWFkZSwgZm9yIGluc3RhbmNlIHdoZW4gaW52b2tlZCBieSBhIGJ1aWxkYm90IG9yIHNzaAorICAgICAgICAgICAgIyBwcm9jZXNzIG5vdCBydW5uaW5nIHVuZGVyIHRoZSBzYW1lIHVzZXIgaWQgYXMgdGhlIGN1cnJlbnQgY29uc29sZQorICAgICAgICAgICAgIyB1c2VyLiAgVG8gYXZvaWQgdGhhdCwgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSB3aW5kb3cgbWFuYWdlcgorICAgICAgICAgICAgIyBjb25uZWN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisgICAgICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY2RsbCwgY19pbnQsIHBvaW50ZXIsIFN0cnVjdHVyZQorICAgICAgICAgICAgZnJvbSBjdHlwZXMudXRpbCBpbXBvcnQgZmluZF9saWJyYXJ5CisKKyAgICAgICAgICAgIGFwcF9zZXJ2aWNlcyA9IGNkbGwuTG9hZExpYnJhcnkoZmluZF9saWJyYXJ5KCJBcHBsaWNhdGlvblNlcnZpY2VzIikpCisKKyAgICAgICAgICAgIGlmIGFwcF9zZXJ2aWNlcy5DR01haW5EaXNwbGF5SUQoKSA9PSAwOgorICAgICAgICAgICAgICAgIF90a191bmF2YWlsYWJsZSA9ICJjYW5ub3QgcnVuIHdpdGhvdXQgT1MgWCB3aW5kb3cgbWFuYWdlciIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY2xhc3MgUHJvY2Vzc1NlcmlhbE51bWJlcihTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImhpZ2hMb25nT2ZQU04iLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibG93TG9uZ09mUFNOIiwgY19pbnQpXQorICAgICAgICAgICAgICAgIHBzbiA9IFByb2Nlc3NTZXJpYWxOdW1iZXIoKQorICAgICAgICAgICAgICAgIHBzbl9wID0gcG9pbnRlcihwc24pCisgICAgICAgICAgICAgICAgaWYgKCAgKGFwcF9zZXJ2aWNlcy5HZXRDdXJyZW50UHJvY2Vzcyhwc25fcCkgPCAwKSBvcgorICAgICAgICAgICAgICAgICAgICAgIChhcHBfc2VydmljZXMuU2V0RnJvbnRQcm9jZXNzKHBzbl9wKSA8IDApICk6CisgICAgICAgICAgICAgICAgICAgIF90a191bmF2YWlsYWJsZSA9ICJjYW5ub3QgcnVuIHdpdGhvdXQgT1MgWCBndWkgcHJvY2VzcyIKKyAgICAgICAgZWxzZTogICAjIG5vdCBPUyBYCisgICAgICAgICAgICBpbXBvcnQgVGtpbnRlcgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIFRraW50ZXIuQnV0dG9uKCkKKyAgICAgICAgICAgIGV4Y2VwdCBUa2ludGVyLlRjbEVycm9yIGFzIG1zZzoKKyAgICAgICAgICAgICAgICAjIGFzc3VtaW5nIHRrIGlzIG5vdCBhdmFpbGFibGUKKyAgICAgICAgICAgICAgICBfdGtfdW5hdmFpbGFibGUgPSAidGsgbm90IGF2YWlsYWJsZTogJXMiICUgbXNnCisKKyAgICBpZiBfdGtfdW5hdmFpbGFibGU6CisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KF90a191bmF2YWlsYWJsZSkKKyAgICByZXR1cm4KKworZGVmIGlzX3BhY2thZ2UocGF0aCk6CisgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihwYXRoKToKKyAgICAgICAgaWYgbmFtZSBpbiAoJ19faW5pdF9fLnB5JywgJ19faW5pdF9fLnB5YycsICdfX2luaXQucHlvJyk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitkZWYgZ2V0X3Rlc3RzX21vZHVsZXMoYmFzZXBhdGg9dGhpc19kaXJfcGF0aCwgZ3VpPVRydWUsIHBhY2thZ2VzPU5vbmUpOgorICAgICIiIlRoaXMgd2lsbCBpbXBvcnQgYW5kIHlpZWxkIG1vZHVsZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCB0ZXN0XworICAgIGFuZCBhcmUgaW5zaWRlIHBhY2thZ2VzIGZvdW5kIGluIHRoZSBwYXRoIHN0YXJ0aW5nIGF0IGJhc2VwYXRoLgorCisgICAgSWYgcGFja2FnZXMgaXMgc3BlY2lmaWVkIGl0IHNob3VsZCBjb250YWluIHBhY2thZ2UgbmFtZXMgdGhhdCB3YW50CisgICAgdGhlaXIgdGVzdHMgY29sbGV0ZWQuCisgICAgIiIiCisgICAgcHlfZXh0ID0gJy5weScKKworICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsoYmFzZXBhdGgpOgorICAgICAgICBmb3IgZGlybmFtZSBpbiBsaXN0KGRpcm5hbWVzKToKKyAgICAgICAgICAgIGlmIGRpcm5hbWVbMF0gPT0gJy4nOgorICAgICAgICAgICAgICAgIGRpcm5hbWVzLnJlbW92ZShkaXJuYW1lKQorCisgICAgICAgIGlmIGlzX3BhY2thZ2UoZGlycGF0aCkgYW5kIGZpbGVuYW1lczoKKyAgICAgICAgICAgIHBrZ19uYW1lID0gZGlycGF0aFtsZW4oYmFzZXBhdGgpICsgbGVuKG9zLnNlcCk6XS5yZXBsYWNlKCcvJywgJy4nKQorICAgICAgICAgICAgaWYgcGFja2FnZXMgYW5kIHBrZ19uYW1lIG5vdCBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmaWxlbmFtZXMgPSBmaWx0ZXIoCisgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB4OiB4LnN0YXJ0c3dpdGgoJ3Rlc3RfJykgYW5kIHguZW5kc3dpdGgocHlfZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWVzKQorCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiVzIiAlIG5hbWVbOi1sZW4ocHlfZXh0KV0sIHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCB0ZXN0LnRlc3Rfc3VwcG9ydC5SZXNvdXJjZURlbmllZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZ3VpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworZGVmIGdldF90ZXN0cyh0ZXh0PVRydWUsIGd1aT1UcnVlLCBwYWNrYWdlcz1Ob25lKToKKyAgICAiIiJZaWVsZCBhbGwgdGhlIHRlc3RzIGluIHRoZSBtb2R1bGVzIGZvdW5kIGJ5IGdldF90ZXN0c19tb2R1bGVzLgorCisgICAgSWYgbm9ndWkgaXMgVHJ1ZSwgb25seSB0ZXN0cyB0aGF0IGRvIG5vdCByZXF1aXJlIGEgR1VJIHdpbGwgYmUKKyAgICByZXR1cm5lZC4iIiIKKyAgICBhdHRycyA9IFtdCisgICAgaWYgdGV4dDoKKyAgICAgICAgYXR0cnMuYXBwZW5kKCd0ZXN0c19ub2d1aScpCisgICAgaWYgZ3VpOgorICAgICAgICBhdHRycy5hcHBlbmQoJ3Rlc3RzX2d1aScpCisgICAgZm9yIG1vZHVsZSBpbiBnZXRfdGVzdHNfbW9kdWxlcyhndWk9Z3VpLCBwYWNrYWdlcz1wYWNrYWdlcyk6CisgICAgICAgIGZvciBhdHRyIGluIGF0dHJzOgorICAgICAgICAgICAgZm9yIHRlc3QgaW4gZ2V0YXR0cihtb2R1bGUsIGF0dHIsICgpKToKKyAgICAgICAgICAgICAgICB5aWVsZCB0ZXN0CisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdC50ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlcyA9IFsnZ3VpJ10KKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKmdldF90ZXN0cygpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL215Zml4ZXMvX19pbml0X18ucHkgYi9saWIvcHl0aG9uMi43L2xpYi10ay90ZXN0L3Rlc3RfdGtpbnRlci9fX2luaXRfXy5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL215Zml4ZXMvX19pbml0X18ucHkKcmVuYW1lIHRvIGxpYi9weXRob24yLjcvbGliLXRrL3Rlc3QvdGVzdF90a2ludGVyL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2xpYi10ay90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2xvYWR0ay5weSBiL2xpYi9weXRob24yLjcvbGliLXRrL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfbG9hZHRrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYzY0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2xpYi10ay90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2xvYWR0ay5weQpAQCAtMCwwICsxLDQ1IEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gVGtpbnRlciBpbXBvcnQgVGNsLCBUY2xFcnJvcgorCit0ZXN0X3N1cHBvcnQucmVxdWlyZXMoJ2d1aScpCisKK2NsYXNzIFRrTG9hZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHVuaXR0ZXN0LnNraXBJZignRElTUExBWScgbm90IGluIG9zLmVudmlyb24sICdObyAkRElTUExBWSBzZXQuJykKKyAgICBkZWYgdGVzdExvYWRUayhzZWxmKToKKyAgICAgICAgdGNsID0gVGNsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsdGNsLndpbmZvX2dlb21ldHJ5KQorICAgICAgICB0Y2wubG9hZHRrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMXgxKzArMCcsIHRjbC53aW5mb19nZW9tZXRyeSgpKQorICAgICAgICB0Y2wuZGVzdHJveSgpCisKKyAgICBkZWYgdGVzdExvYWRUa0ZhaWx1cmUoc2VsZik6CisgICAgICAgIG9sZF9kaXNwbGF5ID0gTm9uZQorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgoJ3dpbicsICdkYXJ3aW4nLCAnY3lnd2luJykpOgorICAgICAgICAgICAgIyBubyBmYWlsdXJlIHBvc3NpYmxlIG9uIHdpbmRvd3M/CisKKyAgICAgICAgICAgICMgWFhYIE1heWJlIG9uIHRrIG9sZGVyIHRoYW4gOC40LjEzIGl0IHdvdWxkIGJlIHBvc3NpYmxlLAorICAgICAgICAgICAgIyBzZWUgdGtpbnRlci5oLgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBpZiAnRElTUExBWScgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgICAgICBkZWwgZW52WydESVNQTEFZJ10KKyAgICAgICAgICAgICAgICAjIG9uIHNvbWUgcGxhdGZvcm1zLCBkZWxldGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICAjIGRvZXNuJ3QgYWN0dWFsbHkgY2FycnkgdGhyb3VnaCB0byB0aGUgcHJvY2VzcyBsZXZlbAorICAgICAgICAgICAgICAgICMgYmVjYXVzZSB0aGV5IGRvbid0IHN1cHBvcnQgdW5zZXRlbnYKKyAgICAgICAgICAgICAgICAjIElmIHRoYXQncyB0aGUgY2FzZSwgYWJvcnQuCisgICAgICAgICAgICAgICAgZGlzcGxheSA9IG9zLnBvcGVuKCdlY2hvICRESVNQTEFZJykucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBkaXNwbGF5OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgdGNsID0gVGNsKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCB0Y2wud2luZm9fZ2VvbWV0cnkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgdGNsLmxvYWR0aykKKwordGVzdHNfZ3VpID0gKFRrTG9hZFRlc3QsICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0c19ndWkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2xpYi10ay90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3RleHQucHkgYi9saWIvcHl0aG9uMi43L2xpYi10ay90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3RleHQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjMDhiZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvbGliLXRrL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfdGV4dC5weQpAQCAtMCwwICsxLDM5IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBUa2ludGVyCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCByZXF1aXJlcywgcnVuX3VuaXR0ZXN0Citmcm9tIHR0ayBpbXBvcnQgc2V0dXBfbWFzdGVyCisKK3JlcXVpcmVzKCdndWknKQorCitjbGFzcyBUZXh0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucm9vdCA9IHNldHVwX21hc3RlcigpCisgICAgICAgIHNlbGYudGV4dCA9IFRraW50ZXIuVGV4dChzZWxmLnJvb3QpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYudGV4dC5kZXN0cm95KCkKKworCisgICAgZGVmIHRlc3Rfc2VhcmNoKHNlbGYpOgorICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0CisKKyAgICAgICAgIyBwYXR0ZXJuIGFuZCBpbmRleCBhcmUgb2JsaWdhdG9yeSBhcmd1bWVudHMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHRleHQuc2VhcmNoLCBOb25lLCAnMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgdGV4dC5zZWFyY2gsICdhJywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgdGV4dC5zZWFyY2gsIE5vbmUsIE5vbmUpCisKKyAgICAgICAgIyBJbnZhbGlkIHRleHQgaW5kZXguCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHRleHQuc2VhcmNoLCAnJywgMCkKKworICAgICAgICAjIENoZWNrIGlmIHdlIGFyZSBnZXR0aW5nIHRoZSBpbmRpY2VzIGFzIHN0cmluZ3MgLS0geW91IGFyZSBsaWtlbHkKKyAgICAgICAgIyB0byBnZXQgVGNsX09iaiB1bmRlciBUayA4LjUgaWYgVGtpbnRlciBkb2Vzbid0IGNvbnZlcnQgaXQuCisgICAgICAgIHRleHQuaW5zZXJ0KCcxLjAnLCAnaGktdGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC5zZWFyY2goJy10ZXN0JywgJzEuMCcsICdlbmQnKSwgJzEuMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC5zZWFyY2goJ3Rlc3QnLCAnMS4wJywgJ2VuZCcpLCAnMS4zJykKKworCit0ZXN0c19ndWkgPSAoVGV4dFRlc3QsICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5fdW5pdHRlc3QoKnRlc3RzX2d1aSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2ZpeGVycy9teWZpeGVzL19faW5pdF9fLnB5IGIvbGliL3B5dGhvbjIuNy9saWItdGsvdGVzdC90ZXN0X3R0ay9fX2luaXRfXy5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGxpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2ZpeGVycy9teWZpeGVzL19faW5pdF9fLnB5CmNvcHkgdG8gbGliL3B5dGhvbjIuNy9saWItdGsvdGVzdC90ZXN0X3R0ay9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWItdGsvdGVzdC90ZXN0X3R0ay9zdXBwb3J0LnB5IGIvbGliL3B5dGhvbjIuNy9saWItdGsvdGVzdC90ZXN0X3R0ay9zdXBwb3J0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZTc4MDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2xpYi10ay90ZXN0L3Rlc3RfdHRrL3N1cHBvcnQucHkKQEAgLTAsMCArMSwzMyBAQAoraW1wb3J0IFRraW50ZXIKKworZGVmIGdldF90a19yb290KCk6CisgICAgdHJ5OgorICAgICAgICByb290ID0gVGtpbnRlci5fZGVmYXVsdF9yb290CisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAjIGl0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUgZGVmYXVsdCByb290IGluIFRraW50ZXIsIGFsdGhvdWdoCisgICAgICAgICMgSSBoYXZlbid0IHNlZW4gcGVvcGxlIGRvaW5nIGl0IChidXQgYXBwYXJlbnRseSBzb21lb25lIGRpZCBpdAorICAgICAgICAjIGhlcmUpLgorICAgICAgICByb290ID0gTm9uZQorCisgICAgaWYgcm9vdCBpcyBOb25lOgorICAgICAgICAjIGNyZWF0ZSBhIG5ldyBtYXN0ZXIgb25seSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeQorICAgICAgICByb290ID0gVGtpbnRlci5UaygpCisKKyAgICByZXR1cm4gcm9vdAorCitkZWYgcm9vdF9kZWljb25pZnkoKToKKyAgICByb290ID0gZ2V0X3RrX3Jvb3QoKQorICAgIHJvb3QuZGVpY29uaWZ5KCkKKworZGVmIHJvb3Rfd2l0aGRyYXcoKToKKyAgICByb290ID0gZ2V0X3RrX3Jvb3QoKQorICAgIHJvb3Qud2l0aGRyYXcoKQorCisKK2RlZiBzaW11bGF0ZV9tb3VzZV9jbGljayh3aWRnZXQsIHgsIHkpOgorICAgICIiIkdlbmVyYXRlIHByb3BlciBldmVudHMgdG8gY2xpY2sgYXQgdGhlIHgsIHkgcG9zaXRpb24gKHRyaWVzIHRvIGFjdAorICAgIGxpa2UgYW4gWCBzZXJ2ZXIpLiIiIgorICAgIHdpZGdldC5ldmVudF9nZW5lcmF0ZSgnPEVudGVyPicsIHg9MCwgeT0wKQorICAgIHdpZGdldC5ldmVudF9nZW5lcmF0ZSgnPE1vdGlvbj4nLCB4PXgsIHk9eSkKKyAgICB3aWRnZXQuZXZlbnRfZ2VuZXJhdGUoJzxCdXR0b25QcmVzcy0xPicsIHg9eCwgeT15KQorICAgIHdpZGdldC5ldmVudF9nZW5lcmF0ZSgnPEJ1dHRvblJlbGVhc2UtMT4nLCB4PXgsIHk9eSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF9leHRlbnNpb25zLnB5IGIvbGliL3B5dGhvbjIuNy9saWItdGsvdGVzdC90ZXN0X3R0ay90ZXN0X2V4dGVuc2lvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0NmNiYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF9leHRlbnNpb25zLnB5CkBAIC0wLDAgKzEsMjc0IEBACitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBUa2ludGVyCitpbXBvcnQgdHRrCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCByZXF1aXJlcywgcnVuX3VuaXR0ZXN0CisKK2ltcG9ydCBzdXBwb3J0CisKK3JlcXVpcmVzKCdndWknKQorCitjbGFzcyBMYWJlbGVkU2NhbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCisKKworICAgIGRlZiB0ZXN0X3dpZGdldF9kZXN0cm95KHNlbGYpOgorICAgICAgICAjIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB2YXJpYWJsZQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZSgpCisgICAgICAgIHZhciA9IHguX3ZhcmlhYmxlLl9uYW1lCisgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHgudGsuZ2xvYmFsZ2V0dmFyLCB2YXIpCisKKyAgICAgICAgIyBtYW51YWxseSBjcmVhdGVkIHZhcmlhYmxlCisgICAgICAgIG15dmFyID0gVGtpbnRlci5Eb3VibGVWYXIoKQorICAgICAgICBuYW1lID0gbXl2YXIuX25hbWUKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUodmFyaWFibGU9bXl2YXIpCisgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC50ay5nbG9iYWxnZXR2YXIobmFtZSksIG15dmFyLmdldCgpKQorICAgICAgICBkZWwgbXl2YXIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgeC50ay5nbG9iYWxnZXR2YXIsIG5hbWUpCisKKyAgICAgICAgIyBjaGVja2luZyB0aGF0IHRoZSB0cmFjaW5nIGNhbGxiYWNrIGlzIHByb3Blcmx5IHJlbW92ZWQKKyAgICAgICAgbXl2YXIgPSBUa2ludGVyLkludFZhcigpCisgICAgICAgICMgTGFiZWxlZFNjYWxlIHdpbGwgc3RhcnQgdHJhY2luZyBteXZhcgorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZSh2YXJpYWJsZT1teXZhcikKKyAgICAgICAgeC5kZXN0cm95KCkKKyAgICAgICAgIyBVbmxlc3MgdGhlIHRyYWNpbmcgY2FsbGJhY2sgd2FzIHJlbW92ZWQsIGNyZWF0aW5nIGEgbmV3CisgICAgICAgICMgTGFiZWxlZFNjYWxlIHdpdGggdGhlIHNhbWUgdmFyIHdpbGwgY2F1c2UgYW4gZXJyb3Igbm93LiBUaGlzCisgICAgICAgICMgaGFwcGVucyBiZWNhdXNlIHRoZSB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byAocG9zc2libHkpIGEgbmV3CisgICAgICAgICMgdmFsdWUgd2hpY2ggY2F1c2VzIHRoZSB0cmFjaW5nIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBhbmQgdGhlbgorICAgICAgICAjIGl0IHRyaWVzIGNhbGxpbmcgaW5zdGFuY2UgYXR0cmlidXRlcyBub3QgeWV0IGRlZmluZWQuCisgICAgICAgIHR0ay5MYWJlbGVkU2NhbGUodmFyaWFibGU9bXl2YXIpCisgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAnbGFzdF90eXBlJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN5cy5sYXN0X3R5cGUgPT0gVGtpbnRlci5UY2xFcnJvcikKKworCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CisgICAgICAgICMgbWFzdGVyIHBhc3NpbmcKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubWFzdGVyLCBUa2ludGVyLl9kZWZhdWx0X3Jvb3QpCisgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgIG1hc3RlciA9IFRraW50ZXIuRnJhbWUoKQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShtYXN0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5tYXN0ZXIsIG1hc3RlcikKKyAgICAgICAgeC5kZXN0cm95KCkKKworICAgICAgICAjIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uL3Bhc3NpbmcKKyAgICAgICAgcGFzc2VkX2V4cGVjdGVkID0gKCgyLjUsIDIpLCAoJzAnLCAwKSwgKDAsIDApLCAoMTAsIDEwKSwKKyAgICAgICAgICAgICgtMSwgLTEpLCAoc3lzLm1heGludCArIDEsIHN5cy5tYXhpbnQgKyAxKSkKKyAgICAgICAgZm9yIHBhaXIgaW4gcGFzc2VkX2V4cGVjdGVkOgorICAgICAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoZnJvbV89cGFpclswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YWx1ZSwgcGFpclsxXSkKKyAgICAgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKGZyb21fPScyLjUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB4Ll92YXJpYWJsZS5nZXQpCisgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKGZyb21fPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHguX3ZhcmlhYmxlLmdldCkKKyAgICAgICAgeC5kZXN0cm95KCkKKyAgICAgICAgIyB2YXJpYWJsZSBzaG91bGQgaGF2ZSBpdHMgZGVmYXVsdCB2YWx1ZSBzZXQgdG8gdGhlIGZyb21fIHZhbHVlCisgICAgICAgIG15dmFyID0gVGtpbnRlci5Eb3VibGVWYXIodmFsdWU9MjApCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHZhcmlhYmxlPW15dmFyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudmFsdWUsIDApCisgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgICMgY2hlY2sgdGhhdCBpdCBpcyByZWFsbHkgdXNpbmcgYSBEb3VibGVWYXIKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUodmFyaWFibGU9bXl2YXIsIGZyb21fPTAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnZhbHVlLCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fdmFyaWFibGUuX25hbWUsIG15dmFyLl9uYW1lKQorICAgICAgICB4LmRlc3Ryb3koKQorCisgICAgICAgICMgd2lkZ2V0IHBvc2l0aW9ubWVudAorICAgICAgICBkZWYgY2hlY2tfcG9zaXRpb25zKHNjYWxlLCBzY2FsZV9wb3MsIGxhYmVsLCBsYWJlbF9wb3MpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY2FsZS5wYWNrX2luZm8oKVsnc2lkZSddLCBzY2FsZV9wb3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxhYmVsLnBsYWNlX2luZm8oKVsnYW5jaG9yJ10sIGxhYmVsX3BvcykKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoY29tcG91bmQ9J3RvcCcpCisgICAgICAgIGNoZWNrX3Bvc2l0aW9ucyh4LnNjYWxlLCAnYm90dG9tJywgeC5sYWJlbCwgJ24nKQorICAgICAgICB4LmRlc3Ryb3koKQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShjb21wb3VuZD0nYm90dG9tJykKKyAgICAgICAgY2hlY2tfcG9zaXRpb25zKHguc2NhbGUsICd0b3AnLCB4LmxhYmVsLCAncycpCisgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKGNvbXBvdW5kPSd1bmtub3duJykgIyBpbnZlcnQgZGVmYXVsdCBwb3NpdGlvbnMKKyAgICAgICAgY2hlY2tfcG9zaXRpb25zKHguc2NhbGUsICd0b3AnLCB4LmxhYmVsLCAncycpCisgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKCkgIyB0YWtlIGRlZmF1bHQgcG9zaXRpb25zCisgICAgICAgIGNoZWNrX3Bvc2l0aW9ucyh4LnNjYWxlLCAnYm90dG9tJywgeC5sYWJlbCwgJ24nKQorICAgICAgICB4LmRlc3Ryb3koKQorCisgICAgICAgICMgZXh0cmEsIGFuZCBpbnZhbGlkLCBrd2FyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgdHRrLkxhYmVsZWRTY2FsZSwgYT0nYicpCisKKworICAgIGRlZiB0ZXN0X2hvcml6b250YWxfcmFuZ2Uoc2VsZik6CisgICAgICAgIGxzY2FsZSA9IHR0ay5MYWJlbGVkU2NhbGUoZnJvbV89MCwgdG89MTApCisgICAgICAgIGxzY2FsZS5wYWNrKCkKKyAgICAgICAgbHNjYWxlLndhaXRfdmlzaWJpbGl0eSgpCisgICAgICAgIGxzY2FsZS51cGRhdGUoKQorCisgICAgICAgIGxpbmZvXzEgPSBsc2NhbGUubGFiZWwucGxhY2VfaW5mbygpCisgICAgICAgIHByZXZfeGNvb3JkID0gbHNjYWxlLnNjYWxlLmNvb3JkcygpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJldl94Y29vcmQsIGludChsaW5mb18xWyd4J10pKQorICAgICAgICAjIGNoYW5nZSByYW5nZSB0bzogZnJvbSAtNSB0byA1LiBUaGlzIHNob3VsZCBjaGFuZ2UgdGhlIHggY29vcmQgb2YKKyAgICAgICAgIyB0aGUgc2NhbGUgd2lkZ2V0LCBzaW5jZSAwIGlzIGF0IHRoZSBtaWRkbGUgb2YgdGhlIG5ldworICAgICAgICAjIHJhbmdlLgorICAgICAgICBsc2NhbGUuc2NhbGUuY29uZmlndXJlKGZyb21fPS01LCB0bz01KQorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgdXBkYXRlIGlzIG5lZWRlZCBzaW5jZSB0aGUgdGVzdCBkb2Vzbid0IHVzZSBtYWlubG9vcCwKKyAgICAgICAgIyBhdCB0aGUgc2FtZSB0aW1lIHRoaXMgc2hvdWxkbid0IGFmZmVjdCB0ZXN0IG91dGNvbWUKKyAgICAgICAgbHNjYWxlLnVwZGF0ZSgpCisgICAgICAgIGN1cnJfeGNvb3JkID0gbHNjYWxlLnNjYWxlLmNvb3JkcygpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcmV2X3hjb29yZCAhPSBjdXJyX3hjb29yZCkKKyAgICAgICAgIyB0aGUgbGFiZWwgd2lkZ2V0IHNob3VsZCBoYXZlIGJlZW4gcmVwb3NpdGlvbmVkIHRvbworICAgICAgICBsaW5mb18yID0gbHNjYWxlLmxhYmVsLnBsYWNlX2luZm8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzY2FsZS5sYWJlbFsndGV4dCddLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1cnJfeGNvb3JkLCBpbnQobGluZm9fMlsneCddKSkKKyAgICAgICAgIyBjaGFuZ2UgdGhlIHJhbmdlIGJhY2sKKyAgICAgICAgbHNjYWxlLnNjYWxlLmNvbmZpZ3VyZShmcm9tXz0wLCB0bz0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByZXZfeGNvb3JkICE9IGN1cnJfeGNvb3JkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByZXZfeGNvb3JkLCBpbnQobGluZm9fMVsneCddKSkKKworICAgICAgICBsc2NhbGUuZGVzdHJveSgpCisKKworICAgIGRlZiB0ZXN0X3ZhcmlhYmxlX2NoYW5nZShzZWxmKToKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoKQorICAgICAgICB4LnBhY2soKQorICAgICAgICB4LndhaXRfdmlzaWJpbGl0eSgpCisgICAgICAgIHgudXBkYXRlKCkKKworICAgICAgICBjdXJyX3hjb29yZCA9IHguc2NhbGUuY29vcmRzKClbMF0KKyAgICAgICAgbmV3dmFsID0geC52YWx1ZSArIDEKKyAgICAgICAgeC52YWx1ZSA9IG5ld3ZhbAorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgdXBkYXRlIGlzIG5lZWRlZCBzaW5jZSB0aGUgdGVzdCBkb2Vzbid0IHVzZSBtYWlubG9vcCwKKyAgICAgICAgIyBhdCB0aGUgc2FtZSB0aW1lIHRoaXMgc2hvdWxkbid0IGFmZmVjdCB0ZXN0IG91dGNvbWUKKyAgICAgICAgeC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubGFiZWxbJ3RleHQnXSwgbmV3dmFsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5zY2FsZS5jb29yZHMoKVswXSA+IGN1cnJfeGNvb3JkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguc2NhbGUuY29vcmRzKClbMF0sCisgICAgICAgICAgICBpbnQoeC5sYWJlbC5wbGFjZV9pbmZvKClbJ3gnXSkpCisKKyAgICAgICAgIyB2YWx1ZSBvdXRzaWRlIHJhbmdlCisgICAgICAgIHgudmFsdWUgPSB4LnNjYWxlWyd0byddICsgMSAjIG5vIGNoYW5nZXMgc2hvdWxkbid0IGhhcHBlbgorICAgICAgICB4LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5sYWJlbFsndGV4dCddLCBuZXd2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5zY2FsZS5jb29yZHMoKVswXSwKKyAgICAgICAgICAgIGludCh4LmxhYmVsLnBsYWNlX2luZm8oKVsneCddKSkKKworICAgICAgICB4LmRlc3Ryb3koKQorCisKKyAgICBkZWYgdGVzdF9yZXNpemUoc2VsZik6CisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKCkKKyAgICAgICAgeC5wYWNrKGV4cGFuZD1UcnVlLCBmaWxsPSdib3RoJykKKyAgICAgICAgeC53YWl0X3Zpc2liaWxpdHkoKQorICAgICAgICB4LnVwZGF0ZSgpCisKKyAgICAgICAgd2lkdGgsIGhlaWdodCA9IHgubWFzdGVyLndpbmZvX3dpZHRoKCksIHgubWFzdGVyLndpbmZvX2hlaWdodCgpCisgICAgICAgIHdpZHRoX25ldywgaGVpZ2h0X25ldyA9IHdpZHRoICogMiwgaGVpZ2h0ICogMgorCisgICAgICAgIHgudmFsdWUgPSAzCisgICAgICAgIHgudXBkYXRlKCkKKyAgICAgICAgeC5tYXN0ZXIud21fZ2VvbWV0cnkoIiVkeCVkIiAlICh3aWR0aF9uZXcsIGhlaWdodF9uZXcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCh4LmxhYmVsLnBsYWNlX2luZm8oKVsneCddKSwKKyAgICAgICAgICAgIHguc2NhbGUuY29vcmRzKClbMF0pCisKKyAgICAgICAgIyBSZXNldCBnZW9tZXRyeQorICAgICAgICB4Lm1hc3Rlci53bV9nZW9tZXRyeSgiJWR4JWQiICUgKHdpZHRoLCBoZWlnaHQpKQorICAgICAgICB4LmRlc3Ryb3koKQorCisKK2NsYXNzIE9wdGlvbk1lbnVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisgICAgICAgIHNlbGYudGV4dHZhciA9IFRraW50ZXIuU3RyaW5nVmFyKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZGVsIHNlbGYudGV4dHZhcgorICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQorCisKKyAgICBkZWYgdGVzdF93aWRnZXRfZGVzdHJveShzZWxmKToKKyAgICAgICAgdmFyID0gVGtpbnRlci5TdHJpbmdWYXIoKQorICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoTm9uZSwgdmFyKQorICAgICAgICBuYW1lID0gdmFyLl9uYW1lCisgICAgICAgIG9wdG1lbnUudXBkYXRlX2lkbGV0YXNrcygpCisgICAgICAgIG9wdG1lbnUuZGVzdHJveSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0bWVudS50ay5nbG9iYWxnZXR2YXIobmFtZSksIHZhci5nZXQoKSkKKyAgICAgICAgZGVsIHZhcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBvcHRtZW51LnRrLmdsb2JhbGdldHZhciwgbmFtZSkKKworCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsCisgICAgICAgICAgICB0dGsuT3B0aW9uTWVudSwgTm9uZSwgc2VsZi50ZXh0dmFyLCBpbnZhbGlkPSd0aGluZycpCisKKyAgICAgICAgb3B0bWVudSA9IHR0ay5PcHRpb25NZW51KE5vbmUsIHNlbGYudGV4dHZhciwgJ2InLCAnYScsICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRtZW51Ll92YXJpYWJsZS5nZXQoKSwgJ2InKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRtZW51WydtZW51J10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRtZW51Wyd0ZXh0dmFyaWFibGUnXSkKKworICAgICAgICBvcHRtZW51LmRlc3Ryb3koKQorCisKKyAgICBkZWYgdGVzdF9tZW51KHNlbGYpOgorICAgICAgICBpdGVtcyA9ICgnYScsICdiJywgJ2MnKQorICAgICAgICBkZWZhdWx0ID0gJ2EnCisgICAgICAgIG9wdG1lbnUgPSB0dGsuT3B0aW9uTWVudShOb25lLCBzZWxmLnRleHR2YXIsIGRlZmF1bHQsICppdGVtcykKKyAgICAgICAgZm91bmRfZGVmYXVsdCA9IEZhbHNlCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihpdGVtcykpOgorICAgICAgICAgICAgdmFsdWUgPSBvcHRtZW51WydtZW51J10uZW50cnljZ2V0KGksICd2YWx1ZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBpdGVtc1tpXSkKKyAgICAgICAgICAgIGlmIHZhbHVlID09IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZm91bmRfZGVmYXVsdCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kX2RlZmF1bHQpCisgICAgICAgIG9wdG1lbnUuZGVzdHJveSgpCisKKyAgICAgICAgIyBkZWZhdWx0IHNob3VsZG4ndCBiZSBpbiBtZW51IGlmIGl0IGlzIG5vdCBwYXJ0IG9mIHZhbHVlcworICAgICAgICBkZWZhdWx0ID0gJ2QnCisgICAgICAgIG9wdG1lbnUgPSB0dGsuT3B0aW9uTWVudShOb25lLCBzZWxmLnRleHR2YXIsIGRlZmF1bHQsICppdGVtcykKKyAgICAgICAgY3VyciA9IE5vbmUKKyAgICAgICAgaSA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGxhc3QsIGN1cnIgPSBjdXJyLCBvcHRtZW51WydtZW51J10uZW50cnljb25maWd1cmUoaSwgJ3ZhbHVlJykKKyAgICAgICAgICAgIGlmIGxhc3QgPT0gY3VycjoKKyAgICAgICAgICAgICAgICAjIG5vIG1vcmUgbWVudSBlbnRyaWVzCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3VyciA9PSBkZWZhdWx0KQorICAgICAgICAgICAgaSArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgbGVuKGl0ZW1zKSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgdmFyaWFibGUgaXMgdXBkYXRlZCBjb3JyZWN0bHkKKyAgICAgICAgb3B0bWVudS5wYWNrKCkKKyAgICAgICAgb3B0bWVudS53YWl0X3Zpc2liaWxpdHkoKQorICAgICAgICBvcHRtZW51WydtZW51J10uaW52b2tlKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0bWVudS5fdmFyaWFibGUuZ2V0KCksIGl0ZW1zWzBdKQorCisgICAgICAgICMgY2hhbmdpbmcgdG8gYW4gaW52YWxpZCBpbmRleCBzaG91bGRuJ3QgY2hhbmdlIHRoZSB2YXJpYWJsZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBvcHRtZW51WydtZW51J10uaW52b2tlLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRtZW51Ll92YXJpYWJsZS5nZXQoKSwgaXRlbXNbMF0pCisKKyAgICAgICAgb3B0bWVudS5kZXN0cm95KCkKKworICAgICAgICAjIHNwZWNpZnlpbmcgYSBjYWxsYmFjaworICAgICAgICBzdWNjZXNzID0gW10KKyAgICAgICAgZGVmIGNiX3Rlc3QoaXRlbSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW0sIGl0ZW1zWzFdKQorICAgICAgICAgICAgc3VjY2Vzcy5hcHBlbmQoVHJ1ZSkKKyAgICAgICAgb3B0bWVudSA9IHR0ay5PcHRpb25NZW51KE5vbmUsIHNlbGYudGV4dHZhciwgJ2EnLCBjb21tYW5kPWNiX3Rlc3QsCisgICAgICAgICAgICAqaXRlbXMpCisgICAgICAgIG9wdG1lbnVbJ21lbnUnXS5pbnZva2UoMSkKKyAgICAgICAgaWYgbm90IHN1Y2Nlc3M6CisgICAgICAgICAgICBzZWxmLmZhaWwoIk1lbnUgY2FsbGJhY2sgbm90IGludm9rZWQiKQorCisgICAgICAgIG9wdG1lbnUuZGVzdHJveSgpCisKKwordGVzdHNfZ3VpID0gKExhYmVsZWRTY2FsZVRlc3QsIE9wdGlvbk1lbnVUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHJ1bl91bml0dGVzdCgqdGVzdHNfZ3VpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWItdGsvdGVzdC90ZXN0X3R0ay90ZXN0X2Z1bmN0aW9ucy5weSBiL2xpYi9weXRob24yLjcvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF9mdW5jdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhmMDhhNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF9mdW5jdGlvbnMucHkKQEAgLTAsMCArMSw0NTggQEAKKyMgLSotIGVuY29kaW5nOiB1dGYtOCAtKi0KK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHR0aworCitjbGFzcyBNb2NrVGNsT2JqKG9iamVjdCk6CisgICAgdHlwZW5hbWUgPSAndGVzdCcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWwpOgorICAgICAgICBzZWxmLnZhbCA9IHZhbAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiB1bmljb2RlKHNlbGYudmFsKQorCisKK2NsYXNzIE1vY2tTdGF0ZVNwZWMob2JqZWN0KToKKyAgICB0eXBlbmFtZSA9ICdTdGF0ZVNwZWMnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLnZhbCA9IGFyZ3MKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJyAnLmpvaW4oc2VsZi52YWwpCisKKworY2xhc3MgSW50ZXJuYWxGdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9vcHRkaWN0KHNlbGYpOgorICAgICAgICBkZWYgY2hlY2tfYWdhaW5zdChmbXRfb3B0cywgcmVzdWx0KToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihmbXRfb3B0cyksIDIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnBvcChmbXRfb3B0c1tpXSksIGZtdF9vcHRzW2kgKyAxXSkKKyAgICAgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlc3VsdCBzdGlsbCBnb3QgZWxlbWVudHM6ICVzIiAlIHJlc3VsdCkKKworICAgICAgICAjIHBhc3NpbmcgYW4gZW1wdHkgZGljdCBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCAodHVwbGUgaGVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0dGsuX2Zvcm1hdF9vcHRkaWN0KHt9KSkKKworICAgICAgICAjIGNoZWNrIGxpc3QgZm9ybWF0dGluZworICAgICAgICBjaGVja19hZ2FpbnN0KAorICAgICAgICAgICAgdHRrLl9mb3JtYXRfb3B0ZGljdCh7J2ZnJzogJ2JsdWUnLCAncGFkZGluZyc6IFsxLCAyLCAzLCA0XX0pLAorICAgICAgICAgICAgeyctZmcnOiAnYmx1ZScsICctcGFkZGluZyc6ICcxIDIgMyA0J30pCisKKyAgICAgICAgIyBjaGVjayB0dXBsZSBmb3JtYXR0aW5nIChzYW1lIGFzIGxpc3QpCisgICAgICAgIGNoZWNrX2FnYWluc3QoCisgICAgICAgICAgICB0dGsuX2Zvcm1hdF9vcHRkaWN0KHsndGVzdCc6ICgxLCAyLCAnJywgMCl9KSwKKyAgICAgICAgICAgIHsnLXRlc3QnOiAnMSAyIHt9IDAnfSkKKworICAgICAgICAjIGNoZWNrIHVudG91Y2hlZCB2YWx1ZXMKKyAgICAgICAgY2hlY2tfYWdhaW5zdCgKKyAgICAgICAgICAgIHR0ay5fZm9ybWF0X29wdGRpY3Qoeyd0ZXN0JzogeydsZWZ0JzogJ2FzIGlzJ319KSwKKyAgICAgICAgICAgIHsnLXRlc3QnOiB7J2xlZnQnOiAnYXMgaXMnfX0pCisKKyAgICAgICAgIyBjaGVjayBzY3JpcHQgZm9ybWF0dGluZworICAgICAgICBjaGVja19hZ2FpbnN0KAorICAgICAgICAgICAgdHRrLl9mb3JtYXRfb3B0ZGljdCgKKyAgICAgICAgICAgICAgICB7J3Rlc3QnOiBbMSwgLTEsICcnLCAnMm0nLCAwXSwgJ3Rlc3QyJzogMywKKyAgICAgICAgICAgICAgICAgJ3Rlc3QzJzogJycsICd0ZXN0NCc6ICdhYmMgZGVmJywKKyAgICAgICAgICAgICAgICAgJ3Rlc3Q1JzogJyJhYmMiJywgJ3Rlc3Q2JzogJ3t9JywKKyAgICAgICAgICAgICAgICAgJ3Rlc3Q3JzogJ30gLXNwYW0geyd9LCBzY3JpcHQ9VHJ1ZSksCisgICAgICAgICAgICB7Jy10ZXN0JzogJ3sxIC0xIHt9IDJtIDB9JywgJy10ZXN0Mic6ICczJywKKyAgICAgICAgICAgICAnLXRlc3QzJzogJ3t9JywgJy10ZXN0NCc6ICd7YWJjIGRlZn0nLAorICAgICAgICAgICAgICctdGVzdDUnOiAneyJhYmMifScsICctdGVzdDYnOiByJ1x7XH0nLAorICAgICAgICAgICAgICctdGVzdDcnOiByJ1x9XCAtc3BhbVwgXHsnfSkKKworICAgICAgICBvcHRzID0ge3UnzrHOss6zJzogVHJ1ZSwgdSfDoSc6IEZhbHNlfQorICAgICAgICBvcmlnX29wdHMgPSBvcHRzLmNvcHkoKQorICAgICAgICAjIGNoZWNrIGlmIGdpdmluZyB1bmljb2RlIGtleXMgaXMgZmluZQorICAgICAgICBjaGVja19hZ2FpbnN0KHR0ay5fZm9ybWF0X29wdGRpY3Qob3B0cyksIHt1Jy3Osc6yzrMnOiBUcnVlLCB1Jy3DoSc6IEZhbHNlfSkKKyAgICAgICAgIyBvcHRzIHNob3VsZCByZW1haW4gdW5jaGFuZ2VkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywgb3JpZ19vcHRzKQorCisgICAgICAgICMgcGFzc2luZyB2YWx1ZXMgd2l0aCBzcGFjZXMgaW5zaWRlIGEgdHVwbGUvbGlzdAorICAgICAgICBjaGVja19hZ2FpbnN0KAorICAgICAgICAgICAgdHRrLl9mb3JtYXRfb3B0ZGljdCgKKyAgICAgICAgICAgICAgICB7J29wdGlvbic6ICgnb25lIHR3bycsICd0aHJlZScpfSksCisgICAgICAgICAgICB7Jy1vcHRpb24nOiAne29uZSB0d299IHRocmVlJ30pCisgICAgICAgIGNoZWNrX2FnYWluc3QoCisgICAgICAgICAgICB0dGsuX2Zvcm1hdF9vcHRkaWN0KAorICAgICAgICAgICAgICAgIHsnb3B0aW9uJzogKCdvbmVcdHR3bycsICd0aHJlZScpfSksCisgICAgICAgICAgICB7Jy1vcHRpb24nOiAne29uZVx0dHdvfSB0aHJlZSd9KQorCisgICAgICAgICMgcGFzc2luZyBlbXB0eSBzdHJpbmdzIGluc2lkZSBhIHR1cGxlL2xpc3QKKyAgICAgICAgY2hlY2tfYWdhaW5zdCgKKyAgICAgICAgICAgIHR0ay5fZm9ybWF0X29wdGRpY3QoCisgICAgICAgICAgICAgICAgeydvcHRpb24nOiAoJycsICdvbmUnKX0pLAorICAgICAgICAgICAgeyctb3B0aW9uJzogJ3t9IG9uZSd9KQorCisgICAgICAgICMgcGFzc2luZyB2YWx1ZXMgd2l0aCBicmFjZXMgaW5zaWRlIGEgdHVwbGUvbGlzdAorICAgICAgICBjaGVja19hZ2FpbnN0KAorICAgICAgICAgICAgdHRrLl9mb3JtYXRfb3B0ZGljdCgKKyAgICAgICAgICAgICAgICB7J29wdGlvbic6ICgnb25lfSB7dHdvJywgJ3RocmVlJyl9KSwKKyAgICAgICAgICAgIHsnLW9wdGlvbic6IHInb25lXH1cIFx7dHdvIHRocmVlJ30pCisKKyAgICAgICAgIyBwYXNzaW5nIHF1b3RlZCBzdHJpbmdzIGluc2lkZSBhIHR1cGxlL2xpc3QKKyAgICAgICAgY2hlY2tfYWdhaW5zdCgKKyAgICAgICAgICAgIHR0ay5fZm9ybWF0X29wdGRpY3QoCisgICAgICAgICAgICAgICAgeydvcHRpb24nOiAoJyJvbmUiJywgJ3R3bycpfSksCisgICAgICAgICAgICB7Jy1vcHRpb24nOiAneyJvbmUifSB0d28nfSkKKyAgICAgICAgY2hlY2tfYWdhaW5zdCgKKyAgICAgICAgICAgIHR0ay5fZm9ybWF0X29wdGRpY3QoCisgICAgICAgICAgICAgICAgeydvcHRpb24nOiAoJ3tvbmV9JywgJ3R3bycpfSksCisgICAgICAgICAgICB7Jy1vcHRpb24nOiByJ1x7b25lXH0gdHdvJ30pCisKKyAgICAgICAgIyBpZ25vcmUgYW4gb3B0aW9uCisgICAgICAgIGFtb3VudF9vcHRzID0gbGVuKHR0ay5fZm9ybWF0X29wdGRpY3Qob3B0cywgaWdub3JlPSh1J8OhJykpKSAvLyAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW1vdW50X29wdHMsIGxlbihvcHRzKSAtIDEpCisKKyAgICAgICAgIyBpZ25vcmUgbm9uLWV4aXN0aW5nIG9wdGlvbnMKKyAgICAgICAgYW1vdW50X29wdHMgPSBsZW4odHRrLl9mb3JtYXRfb3B0ZGljdChvcHRzLCBpZ25vcmU9KHUnw6EnLCAnYicpKSkgLy8gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFtb3VudF9vcHRzLCBsZW4ob3B0cykgLSAxKQorCisgICAgICAgICMgaWdub3JlIGV2ZXJ5IG9wdGlvbgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHR0ay5fZm9ybWF0X29wdGRpY3Qob3B0cywgaWdub3JlPW9wdHMua2V5cygpKSkKKworCisgICAgZGVmIHRlc3RfZm9ybWF0X21hcGRpY3Qoc2VsZik6CisgICAgICAgIG9wdHMgPSB7J2EnOiBbKCdiJywgJ2MnLCAndmFsJyksICgnZCcsICdvdGhlcnZhbCcpLCAoJycsICdzaW5nbGUnKV19CisgICAgICAgIHJlc3VsdCA9IHR0ay5fZm9ybWF0X21hcGRpY3Qob3B0cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgbGVuKG9wdHMua2V5cygpKSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoJy1hJywgJ3tiIGN9IHZhbCBkIG90aGVydmFsIHt9IHNpbmdsZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZm9ybWF0X21hcGRpY3Qob3B0cywgc2NyaXB0PVRydWUpLAorICAgICAgICAgICAgKCctYScsICd7e2IgY30gdmFsIGQgb3RoZXJ2YWwge30gc2luZ2xlfScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfbWFwZGljdCh7MjogW119KSwgKCctMicsICcnKSkKKworICAgICAgICBvcHRzID0ge3Unw7zDscOtxIfDs2TDqCc6IFsodSfDoScsIHUndsOjbCcpXX0KKyAgICAgICAgcmVzdWx0ID0gdHRrLl9mb3JtYXRfbWFwZGljdChvcHRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKHUnLcO8w7HDrcSHw7Nkw6gnLCB1J8OhIHbDo2wnKSkKKworICAgICAgICAjIGVtcHR5IHN0YXRlcworICAgICAgICB2YWxpZCA9IHsnb3B0JzogWygnJywgdScnLCAnaGknKV19CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfbWFwZGljdCh2YWxpZCksICgnLW9wdCcsICd7IH0gaGknKSkKKworICAgICAgICAjIHdoZW4gcGFzc2luZyBtdWx0aXBsZSBzdGF0ZXMsIHRoZXkgYWxsIG11c3QgYmUgc3RyaW5ncworICAgICAgICBpbnZhbGlkID0geydvcHQnOiBbKDEsIDIsICd2YWxpZCB2YWwnKV19CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHRrLl9mb3JtYXRfbWFwZGljdCwgaW52YWxpZCkKKyAgICAgICAgaW52YWxpZCA9IHsnb3B0JzogWyhbMV0sICcyJywgJ3ZhbGlkIHZhbCcpXX0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0dGsuX2Zvcm1hdF9tYXBkaWN0LCBpbnZhbGlkKQorICAgICAgICAjIGJ1dCB3aGVuIHBhc3NpbmcgYSBzaW5nbGUgc3RhdGUsIGl0IGNhbiBiZSBhbnl0aGluZworICAgICAgICB2YWxpZCA9IHsnb3B0JzogW1sxLCAndmFsdWUnXV19CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfbWFwZGljdCh2YWxpZCksICgnLW9wdCcsICcxIHZhbHVlJykpCisgICAgICAgICMgc3BlY2lhbCBhdHRlbnRpb24gdG8gc2luZ2xlIHN0YXRlcyB3aGljaCBldmFsdXRlIHRvIEZhbHNlCisgICAgICAgIGZvciBzdGF0ZXZhbCBpbiAoTm9uZSwgMCwgRmFsc2UsICcnLCBzZXQoKSk6ICMganVzdCBzb21lIHNhbXBsZXMKKyAgICAgICAgICAgIHZhbGlkID0geydvcHQnOiBbKHN0YXRldmFsLCAndmFsdWUnKV19CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZm9ybWF0X21hcGRpY3QodmFsaWQpLAorICAgICAgICAgICAgICAgICgnLW9wdCcsICd7fSB2YWx1ZScpKQorCisgICAgICAgICMgdmFsdWVzIG11c3QgYmUgaXRlcmFibGUKKyAgICAgICAgb3B0cyA9IHsnYSc6IE5vbmV9CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHRrLl9mb3JtYXRfbWFwZGljdCwgb3B0cykKKworICAgICAgICAjIGl0ZW1zIGluIHRoZSB2YWx1ZSBtdXN0IGhhdmUgc2l6ZSA+PSAyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHR0ay5fZm9ybWF0X21hcGRpY3QsCisgICAgICAgICAgICB7J2EnOiBbKCdpbnZhbGlkJywgKV19KQorCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZWxlbWNyZWF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR0ay5fZm9ybWF0X2VsZW1jcmVhdGUoTm9uZSksIChOb25lLCAoKSkpCisKKyAgICAgICAgIyMgVGVzdGluZyB0eXBlID0gaW1hZ2UKKyAgICAgICAgIyBpbWFnZSB0eXBlIGV4cGVjdHMgYXQgbGVhc3QgYW4gaW1hZ2UgbmFtZSwgc28gdGhpcyBzaG91bGQgcmFpc2UKKyAgICAgICAgIyBJbmRleEVycm9yIHNpbmNlIGl0IHRyaWVzIHRvIGFjY2VzcyB0aGUgaW5kZXggMCBvZiBhbiBlbXB0eSB0dXBsZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCB0dGsuX2Zvcm1hdF9lbGVtY3JlYXRlLCAnaW1hZ2UnKQorCisgICAgICAgICMgZG9uJ3QgZm9ybWF0IHJldHVybmVkIHZhbHVlcyBhcyBhIHRjbCBzY3JpcHQKKyAgICAgICAgIyBtaW5pbXVtIGFjY2VwdGFibGUgZm9yIGltYWdlIHR5cGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9lbGVtY3JlYXRlKCdpbWFnZScsIEZhbHNlLCAndGVzdCcpLAorICAgICAgICAgICAgKCJ0ZXN0ICIsICgpKSkKKyAgICAgICAgIyBzcGVjaWZ5aW5nIGEgc3RhdGUgc3BlYworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZm9ybWF0X2VsZW1jcmVhdGUoJ2ltYWdlJywgRmFsc2UsICd0ZXN0JywKKyAgICAgICAgICAgICgnJywgJ2EnKSksICgidGVzdCB7fSBhIiwgKCkpKQorICAgICAgICAjIHN0YXRlIHNwZWMgd2l0aCBtdWx0aXBsZSBzdGF0ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9lbGVtY3JlYXRlKCdpbWFnZScsIEZhbHNlLCAndGVzdCcsCisgICAgICAgICAgICAoJ2EnLCAnYicsICdjJykpLCAoInRlc3Qge2EgYn0gYyIsICgpKSkKKyAgICAgICAgIyBzdGF0ZSBzcGVjIGFuZCBvcHRpb25zCisgICAgICAgIHJlcyA9IHR0ay5fZm9ybWF0X2VsZW1jcmVhdGUoJ2ltYWdlJywgRmFsc2UsICd0ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EnLCAnYicpLCBhPSd4JywgYj0neScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzBdLCAidGVzdCBhIGIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChyZXNbMV0pLCB7Ii1hIiwgIngiLCAiLWIiLCAieSJ9KQorICAgICAgICAjIGZvcm1hdCByZXR1cm5lZCB2YWx1ZXMgYXMgYSB0Y2wgc2NyaXB0CisgICAgICAgICMgc3RhdGUgc3BlYyB3aXRoIG11bHRpcGxlIHN0YXRlcyBhbmQgYW4gb3B0aW9uIHdpdGggYSBtdWx0aXZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSgnaW1hZ2UnLCBUcnVlLCAndGVzdCcsCisgICAgICAgICAgICAoJ2EnLCAnYicsICdjJywgJ2QnKSwgeD1bMiwgM10pLCAoInt0ZXN0IHthIGIgY30gZH0iLCAiLXggezIgM30iKSkKKworICAgICAgICAjIyBUZXN0aW5nIHR5cGUgPSB2c2FwaQorICAgICAgICAjIHZzYXBpIHR5cGUgZXhwZWN0cyBhdCBsZWFzdCBhIGNsYXNzIG5hbWUgYW5kIGEgcGFydF9pZCwgc28gdGhpcworICAgICAgICAjIHNob3VsZCByYWlzZSBhbiBWYWx1ZUVycm9yIHNpbmNlIGl0IHRyaWVzIHRvIGdldCB0d28gZWxlbWVudHMgZnJvbQorICAgICAgICAjIGFuIGVtcHR5IHR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHR0ay5fZm9ybWF0X2VsZW1jcmVhdGUsICd2c2FwaScpCisKKyAgICAgICAgIyBkb24ndCBmb3JtYXQgcmV0dXJuZWQgdmFsdWVzIGFzIGEgdGNsIHNjcmlwdAorICAgICAgICAjIG1pbmltdW0gYWNjZXB0YWJsZSBmb3IgdnNhcGkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9lbGVtY3JlYXRlKCd2c2FwaScsIEZhbHNlLCAnYScsICdiJyksCisgICAgICAgICAgICAoImEgYiAiLCAoKSkpCisgICAgICAgICMgbm93IHdpdGggYSBzdGF0ZSBzcGVjIHdpdGggbXVsdGlwbGUgc3RhdGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSgndnNhcGknLCBGYWxzZSwgJ2EnLCAnYicsCisgICAgICAgICAgICAoJ2EnLCAnYicsICdjJykpLCAoImEgYiB7YSBifSBjIiwgKCkpKQorICAgICAgICAjIHN0YXRlIHNwZWMgYW5kIG9wdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZm9ybWF0X2VsZW1jcmVhdGUoJ3ZzYXBpJywgRmFsc2UsICdhJywgJ2InLAorICAgICAgICAgICAgKCdhJywgJ2InKSwgb3B0PSd4JyksICgiYSBiIGEgYiIsICgiLW9wdCIsICJ4IikpKQorICAgICAgICAjIGZvcm1hdCByZXR1cm5lZCB2YWx1ZXMgYXMgYSB0Y2wgc2NyaXB0CisgICAgICAgICMgc3RhdGUgc3BlYyB3aXRoIGEgbXVsdGl2YWx1ZSBhbmQgYW4gb3B0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSgndnNhcGknLCBUcnVlLCAnYScsICdiJywKKyAgICAgICAgICAgICgnYScsICdiJywgWzEsIDJdKSwgb3B0PSd4JyksICgie2EgYiB7YSBifSB7MSAyfX0iLCAiLW9wdCB4IikpCisKKyAgICAgICAgIyBUZXN0aW5nIHR5cGUgPSBmcm9tCisgICAgICAgICMgZnJvbSB0eXBlIGV4cGVjdHMgYXQgbGVhc3QgYSB0eXBlIG5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSwgJ2Zyb20nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSgnZnJvbScsIEZhbHNlLCAnYScpLAorICAgICAgICAgICAgKCdhJywgKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZm9ybWF0X2VsZW1jcmVhdGUoJ2Zyb20nLCBGYWxzZSwgJ2EnLCAnYicpLAorICAgICAgICAgICAgKCdhJywgKCdiJywgKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9mb3JtYXRfZWxlbWNyZWF0ZSgnZnJvbScsIFRydWUsICdhJywgJ2InKSwKKyAgICAgICAgICAgICgne2F9JywgJ2InKSkKKworCisgICAgZGVmIHRlc3RfZm9ybWF0X2xheW91dGxpc3Qoc2VsZik6CisgICAgICAgIGRlZiBzYW1wbGUoaW5kZW50PTAsIGluZGVudF9zaXplPTIpOgorICAgICAgICAgICAgcmV0dXJuIHR0ay5fZm9ybWF0X2xheW91dGxpc3QoCisgICAgICAgICAgICBbKCdhJywgeydvdGhlcic6IFsxLCAyLCAzXSwgJ2NoaWxkcmVuJzoKKyAgICAgICAgICAgICAgICBbKCdiJywgeydjaGlsZHJlbic6CisgICAgICAgICAgICAgICAgICAgIFsoJ2MnLCB7J2NoaWxkcmVuJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2QnLCB7J25pY2UnOiAnb3B0J30pXSwgJ3NvbWV0aGluZyc6ICgxLCAyKQorICAgICAgICAgICAgICAgICAgICB9KV0KKyAgICAgICAgICAgICAgICB9KV0KKyAgICAgICAgICAgIH0pXSwgaW5kZW50PWluZGVudCwgaW5kZW50X3NpemU9aW5kZW50X3NpemUpWzBdCisKKyAgICAgICAgZGVmIHNhbXBsZV9leHBlY3RlZChpbmRlbnQ9MCwgaW5kZW50X3NpemU9Mik6CisgICAgICAgICAgICBzcGFjZXMgPSBsYW1iZGEgYW1vdW50PTA6ICcgJyAqIChhbW91bnQgKyBpbmRlbnQpCisgICAgICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgICAgICIlc2EgLW90aGVyIHsxIDIgM30gLWNoaWxkcmVuIHtcbiIKKyAgICAgICAgICAgICAgICAiJXNiIC1jaGlsZHJlbiB7XG4iCisgICAgICAgICAgICAgICAgIiVzYyAtc29tZXRoaW5nIHsxIDJ9IC1jaGlsZHJlbiB7XG4iCisgICAgICAgICAgICAgICAgIiVzZCAtbmljZSBvcHRcbiIKKyAgICAgICAgICAgICAgICAiJXN9XG4iCisgICAgICAgICAgICAgICAgIiVzfVxuIgorICAgICAgICAgICAgICAgICIlc30iICUgKHNwYWNlcygpLCBzcGFjZXMoaW5kZW50X3NpemUpLAorICAgICAgICAgICAgICAgICAgICBzcGFjZXMoMiAqIGluZGVudF9zaXplKSwgc3BhY2VzKDMgKiBpbmRlbnRfc2l6ZSksCisgICAgICAgICAgICAgICAgICAgIHNwYWNlcygyICogaW5kZW50X3NpemUpLCBzcGFjZXMoaW5kZW50X3NpemUpLCBzcGFjZXMoKSkpCisKKyAgICAgICAgIyBlbXB0eSBsYXlvdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2Zvcm1hdF9sYXlvdXRsaXN0KFtdKVswXSwgJycpCisKKyAgICAgICAgIyBzbWFsbGVzdCAoYWZ0ZXIgYW4gZW1wdHkgb25lKSBhY2NlcHRhYmxlIGxheW91dAorICAgICAgICBzbWFsbGVzdCA9IHR0ay5fZm9ybWF0X2xheW91dGxpc3QoWygnYScsIE5vbmUpXSwgaW5kZW50PTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc21hbGxlc3QsCisgICAgICAgICAgICB0dGsuX2Zvcm1hdF9sYXlvdXRsaXN0KFsoJ2EnLCAnJyldLCBpbmRlbnQ9MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc21hbGxlc3RbMF0sICdhJykKKworICAgICAgICAjIHRlc3RpbmcgaW5kZW50YXRpb24gbGV2ZWxzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2FtcGxlKCksIHNhbXBsZV9leHBlY3RlZCgpKQorICAgICAgICBmb3IgaSBpbiByYW5nZSg0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2FtcGxlKGkpLCBzYW1wbGVfZXhwZWN0ZWQoaSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNhbXBsZShpLCBpKSwgc2FtcGxlX2V4cGVjdGVkKGksIGkpKQorCisgICAgICAgICMgaW52YWxpZCBsYXlvdXQgZm9ybWF0LCBkaWZmZXJlbnQga2luZCBvZiBleGNlcHRpb25zIHdpbGwgYmUKKyAgICAgICAgIyByYWlzZWQKKworICAgICAgICAjIHBsYWluIHdyb25nIGZvcm1hdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0dGsuX2Zvcm1hdF9sYXlvdXRsaXN0LAorICAgICAgICAgICAgWydiYWQnLCAnZm9ybWF0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHRrLl9mb3JtYXRfbGF5b3V0bGlzdCwgTm9uZSkKKyAgICAgICAgIyBfZm9ybWF0X2xheW91dGxpc3QgYWx3YXlzIGV4cGVjdHMgdGhlIHNlY29uZCBpdGVtIChpbiBldmVyeSBpdGVtKQorICAgICAgICAjIHRvIGFjdCBsaWtlIGEgZGljdCAoZXhjZXB0IHdoZW4gdGhlIHZhbHVlIGV2YWx1dGVzIHRvIEZhbHNlKS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICB0dGsuX2Zvcm1hdF9sYXlvdXRsaXN0LCBbKCdhJywgJ2InKV0pCisgICAgICAgICMgYmFkIGNoaWxkcmVuIGZvcm1hdHRpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9mb3JtYXRfbGF5b3V0bGlzdCwKKyAgICAgICAgICAgIFsoJ25hbWUnLCB7J2NoaWxkcmVuJzogeydhJzogTm9uZX19KV0pCisKKworICAgIGRlZiB0ZXN0X3NjcmlwdF9mcm9tX3NldHRpbmdzKHNlbGYpOgorICAgICAgICAjIGVtcHR5IG9wdGlvbnMKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0dGsuX3NjcmlwdF9mcm9tX3NldHRpbmdzKHsnbmFtZSc6CisgICAgICAgICAgICB7J2NvbmZpZ3VyZSc6IE5vbmUsICdtYXAnOiBOb25lLCAnZWxlbWVudCBjcmVhdGUnOiBOb25lfX0pKQorCisgICAgICAgICMgZW1wdHkgbGF5b3V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB0dGsuX3NjcmlwdF9mcm9tX3NldHRpbmdzKHsnbmFtZSc6IHsnbGF5b3V0JzogTm9uZX19KSwKKyAgICAgICAgICAgICJ0dGs6OnN0eWxlIGxheW91dCBuYW1lIHtcbm51bGxcbn0iKQorCisgICAgICAgIGNvbmZpZ2RpY3QgPSB7dSfOsc6yzrMnOiBUcnVlLCB1J8OhJzogRmFsc2V9CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHR0ay5fc2NyaXB0X2Zyb21fc2V0dGluZ3MoeyduYW1lJzogeydjb25maWd1cmUnOiBjb25maWdkaWN0fX0pKQorCisgICAgICAgIG1hcGRpY3QgPSB7dSfDvMOxw63Eh8OzZMOoJzogWyh1J8OhJywgdSd2w6NsJyldfQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICB0dGsuX3NjcmlwdF9mcm9tX3NldHRpbmdzKHsnbmFtZSc6IHsnbWFwJzogbWFwZGljdH19KSkKKworICAgICAgICAjIGludmFsaWQgaW1hZ2UgZWxlbWVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLAorICAgICAgICAgICAgdHRrLl9zY3JpcHRfZnJvbV9zZXR0aW5ncywgeyduYW1lJzogeydlbGVtZW50IGNyZWF0ZSc6IFsnaW1hZ2UnXX19KQorCisgICAgICAgICMgbWluaW1hbCB2YWxpZCBpbWFnZQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHRrLl9zY3JpcHRfZnJvbV9zZXR0aW5ncyh7J25hbWUnOgorICAgICAgICAgICAgeydlbGVtZW50IGNyZWF0ZSc6IFsnaW1hZ2UnLCAnbmFtZSddfX0pKQorCisgICAgICAgIGltYWdlID0geyd0aGluZyc6IHsnZWxlbWVudCBjcmVhdGUnOgorICAgICAgICAgICAgWydpbWFnZScsICduYW1lJywgKCdzdGF0ZTEnLCAnc3RhdGUyJywgJ3ZhbCcpXX19CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9zY3JpcHRfZnJvbV9zZXR0aW5ncyhpbWFnZSksCisgICAgICAgICAgICAidHRrOjpzdHlsZSBlbGVtZW50IGNyZWF0ZSB0aGluZyBpbWFnZSB7bmFtZSB7c3RhdGUxIHN0YXRlMn0gdmFsfSAiKQorCisgICAgICAgIGltYWdlWyd0aGluZyddWydlbGVtZW50IGNyZWF0ZSddLmFwcGVuZCh7J29wdCc6IDMwfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX3NjcmlwdF9mcm9tX3NldHRpbmdzKGltYWdlKSwKKyAgICAgICAgICAgICJ0dGs6OnN0eWxlIGVsZW1lbnQgY3JlYXRlIHRoaW5nIGltYWdlIHtuYW1lIHtzdGF0ZTEgc3RhdGUyfSB2YWx9ICIKKyAgICAgICAgICAgICItb3B0IDMwIikKKworICAgICAgICBpbWFnZVsndGhpbmcnXVsnZWxlbWVudCBjcmVhdGUnXVstMV1bJ29wdCddID0gW01vY2tUY2xPYmooMyksCisgICAgICAgICAgICBNb2NrVGNsT2JqKCcybScpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fc2NyaXB0X2Zyb21fc2V0dGluZ3MoaW1hZ2UpLAorICAgICAgICAgICAgInR0azo6c3R5bGUgZWxlbWVudCBjcmVhdGUgdGhpbmcgaW1hZ2Uge25hbWUge3N0YXRlMSBzdGF0ZTJ9IHZhbH0gIgorICAgICAgICAgICAgIi1vcHQgezMgMm19IikKKworCisgICAgZGVmIHRlc3RfZGljdF9mcm9tX3RjbHR1cGxlKHNlbGYpOgorICAgICAgICBmYWtldHR1cGxlID0gKCctYScsICd7MSAyIDN9JywgJy1zb21ldGhpbmcnLCAnZm9vJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZGljdF9mcm9tX3RjbHR1cGxlKGZha2V0dHVwbGUsIEZhbHNlKSwKKyAgICAgICAgICAgIHsnLWEnOiAnezEgMiAzfScsICctc29tZXRoaW5nJzogJ2Zvbyd9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9kaWN0X2Zyb21fdGNsdHVwbGUoZmFrZXR0dXBsZSksCisgICAgICAgICAgICB7J2EnOiAnezEgMiAzfScsICdzb21ldGhpbmcnOiAnZm9vJ30pCisKKyAgICAgICAgIyBwYXNzaW5nIGEgdHVwbGUgd2l0aCBhIHNpbmdsZSBpdGVtIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgZGljdCwKKyAgICAgICAgIyBzaW5jZSBpdCB0cmllcyB0byBicmVhayB0aGUgdHVwbGUgYnkgcGFpcnMuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHRrLl9kaWN0X2Zyb21fdGNsdHVwbGUoKCdzaW5nbGUnLCApKSkKKworICAgICAgICBzc3BlYyA9IE1vY2tTdGF0ZVNwZWMoJ2EnLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9kaWN0X2Zyb21fdGNsdHVwbGUoKCctYScsIChzc3BlYywgJ3ZhbCcpKSksCisgICAgICAgICAgICB7J2EnOiBbKCdhJywgJ2InLCAndmFsJyldfSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZGljdF9mcm9tX3RjbHR1cGxlKChNb2NrVGNsT2JqKCctcGFkZGluZycpLAorICAgICAgICAgICAgW01vY2tUY2xPYmooJzEnKSwgMiwgTW9ja1RjbE9iaignM20nKV0pKSwKKyAgICAgICAgICAgIHsncGFkZGluZyc6IFsxLCAyLCAnM20nXX0pCisKKworICAgIGRlZiB0ZXN0X2xpc3RfZnJvbV9zdGF0ZXNwZWMoc2VsZik6CisgICAgICAgIGRlZiB0ZXN0X2l0KHNzcGVjLCB2YWx1ZSwgcmVzX3ZhbHVlLCBzdGF0ZXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2xpc3RfZnJvbV9zdGF0ZXNwZWMoCisgICAgICAgICAgICAgICAgKHNzcGVjLCB2YWx1ZSkpLCBbc3RhdGVzICsgKHJlc192YWx1ZSwgKV0pCisKKyAgICAgICAgc3RhdGVzX2V2ZW4gPSB0dXBsZSgnc3RhdGUlZCcgJSBpIGZvciBpIGluIHJhbmdlKDYpKQorICAgICAgICBzdGF0ZXNwZWMgPSBNb2NrU3RhdGVTcGVjKCpzdGF0ZXNfZXZlbikKKyAgICAgICAgdGVzdF9pdChzdGF0ZXNwZWMsICd2YWwnLCAndmFsJywgc3RhdGVzX2V2ZW4pCisgICAgICAgIHRlc3RfaXQoc3RhdGVzcGVjLCBNb2NrVGNsT2JqKCd2YWwnKSwgJ3ZhbCcsIHN0YXRlc19ldmVuKQorCisgICAgICAgIHN0YXRlc19vZGQgPSB0dXBsZSgnc3RhdGUlZCcgJSBpIGZvciBpIGluIHJhbmdlKDUpKQorICAgICAgICBzdGF0ZXNwZWMgPSBNb2NrU3RhdGVTcGVjKCpzdGF0ZXNfb2RkKQorICAgICAgICB0ZXN0X2l0KHN0YXRlc3BlYywgJ3ZhbCcsICd2YWwnLCBzdGF0ZXNfb2RkKQorCisgICAgICAgIHRlc3RfaXQoKCdhJywgJ2InLCAnYycpLCBNb2NrVGNsT2JqKCd2YWwnKSwgJ3ZhbCcsICgnYScsICdiJywgJ2MnKSkKKworCisgICAgZGVmIHRlc3RfbGlzdF9mcm9tX2xheW91dHR1cGxlKHNlbGYpOgorICAgICAgICAjIGVtcHR5IGxheW91dCB0dXBsZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKCgpKSkKKworICAgICAgICAjIHNob3J0ZXN0IGxheW91dCB0dXBsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKCgnbmFtZScsICkpLAorICAgICAgICAgICAgWygnbmFtZScsIHt9KV0pCisKKyAgICAgICAgIyBub3Qgc28gaW50ZXJlc3RpbmcgbHR1cGxlCisgICAgICAgIHNhbXBsZV9sdHVwbGUgPSAoJ25hbWUnLCAnLW9wdGlvbicsICd2YWx1ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUoc2FtcGxlX2x0dXBsZSksCisgICAgICAgICAgICBbKCduYW1lJywgeydvcHRpb24nOiAndmFsdWUnfSldKQorCisgICAgICAgICMgZW1wdHkgY2hpbGRyZW4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSgKKyAgICAgICAgICAgICgnc29tZXRoaW5nJywgJy1jaGlsZHJlbicsICgpKSksCisgICAgICAgICAgICBbKCdzb21ldGhpbmcnLCB7J2NoaWxkcmVuJzogW119KV0KKyAgICAgICAgKQorCisgICAgICAgICMgbW9yZSBpbnRlcmVzdGluZyBsdHVwbGUKKyAgICAgICAgbHR1cGxlID0gKAorICAgICAgICAgICAgJ25hbWUnLCAnLW9wdGlvbicsICduaWNlb25lJywgJy1jaGlsZHJlbicsICgKKyAgICAgICAgICAgICAgICAoJ290aGVyb25lJywgJy1jaGlsZHJlbicsICgKKyAgICAgICAgICAgICAgICAgICAgKCdjaGlsZCcsICkpLCAnLW90aGVyb3B0JywgJ290aGVydmFsdWUnCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUobHR1cGxlKSwKKyAgICAgICAgICAgIFsoJ25hbWUnLCB7J29wdGlvbic6ICduaWNlb25lJywgJ2NoaWxkcmVuJzoKKyAgICAgICAgICAgICAgICBbKCdvdGhlcm9uZScsIHsnb3RoZXJvcHQnOiAnb3RoZXJ2YWx1ZScsICdjaGlsZHJlbic6CisgICAgICAgICAgICAgICAgICAgIFsoJ2NoaWxkJywge30pXQorICAgICAgICAgICAgICAgIH0pXQorICAgICAgICAgICAgfSldCisgICAgICAgICkKKworICAgICAgICAjIGJhZCB0dXBsZXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUsCisgICAgICAgICAgICAoJ25hbWUnLCAnbm9fbWludXMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUsCisgICAgICAgICAgICAoJ25hbWUnLCAnbm9fbWludXMnLCAndmFsdWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUsCisgICAgICAgICAgICAoJ3NvbWV0aGluZycsICctY2hpbGRyZW4nKSkgIyBubyBjaGlsZHJlbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSwKKyAgICAgICAgICAgICgnc29tZXRoaW5nJywgJy1jaGlsZHJlbicsICd2YWx1ZScpKSAjIGludmFsaWQgY2hpbGRyZW4KKworCisgICAgZGVmIHRlc3RfdmFsX29yX2RpY3Qoc2VsZik6CisgICAgICAgIGRlZiBmdW5jKG9wdCwgdmFsPU5vbmUpOgorICAgICAgICAgICAgaWYgdmFsIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuICJ0ZXN0IHZhbCIKKyAgICAgICAgICAgIHJldHVybiAob3B0LCB2YWwpCisKKyAgICAgICAgb3B0aW9ucyA9IHsndGVzdCc6IE5vbmV9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl92YWxfb3JfZGljdChvcHRpb25zLCBmdW5jKSwgInRlc3QgdmFsIikKKworICAgICAgICBvcHRpb25zID0geyd0ZXN0JzogM30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX3ZhbF9vcl9kaWN0KG9wdGlvbnMsIGZ1bmMpLCBvcHRpb25zKQorCisKKyAgICBkZWYgdGVzdF9jb252ZXJ0X3N0cmluZ3ZhbChzZWxmKToKKyAgICAgICAgdGVzdHMgPSAoCisgICAgICAgICAgICAoMCwgMCksICgnMDknLCA5KSwgKCdhJywgJ2EnKSwgKHUnw6HDmicsIHUnw6HDmicpLCAoW10sICdbXScpLAorICAgICAgICAgICAgKE5vbmUsICdOb25lJykKKyAgICAgICAgKQorICAgICAgICBmb3Igb3JpZywgZXhwZWN0ZWQgaW4gdGVzdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fY29udmVydF9zdHJpbmd2YWwob3JpZyksIGV4cGVjdGVkKQorCisgICAgICAgIGlmIHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcoKSA9PSAnYXNjaWknOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgICAgIHR0ay5fY29udmVydF9zdHJpbmd2YWwsICfDoScpCisKKworY2xhc3MgVGNsT2Jqc1RvUHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisgICAgICAgIGFkaWN0ID0geydvcHQnOiB1J3bDpGzDusOoJ30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsudGNsb2Jqc190b19weShhZGljdCksIHsnb3B0JzogdSd2w6Rsw7rDqCd9KQorCisgICAgICAgIGFkaWN0WydvcHQnXSA9IE1vY2tUY2xPYmooYWRpY3RbJ29wdCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay50Y2xvYmpzX3RvX3B5KGFkaWN0KSwgeydvcHQnOiB1J3bDpGzDusOoJ30pCisKKyAgICBkZWYgdGVzdF9tdWx0aXZhbHVlcyhzZWxmKToKKyAgICAgICAgYWRpY3QgPSB7J29wdCc6IFsxLCAyLCAzLCA0XX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsudGNsb2Jqc190b19weShhZGljdCksIHsnb3B0JzogWzEsIDIsIDMsIDRdfSkKKworICAgICAgICBhZGljdFsnb3B0J10gPSBbMSwgJ3htJywgM10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsudGNsb2Jqc190b19weShhZGljdCksIHsnb3B0JzogWzEsICd4bScsIDNdfSkKKworICAgICAgICBhZGljdFsnb3B0J10gPSAoTW9ja1N0YXRlU3BlYygnYScsICdiJyksIHUndsOhbMWpw6gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay50Y2xvYmpzX3RvX3B5KGFkaWN0KSwKKyAgICAgICAgICAgIHsnb3B0JzogWygnYScsICdiJywgdSd2w6FsxanDqCcpXX0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsudGNsb2Jqc190b19weSh7J3gnOiBbJ3kgeiddfSksCisgICAgICAgICAgICB7J3gnOiBbJ3kgeiddfSkKKworICAgIGRlZiB0ZXN0X25vc3BsaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLnRjbG9ianNfdG9fcHkoeyd0ZXh0JzogJ3NvbWUgdGV4dCd9KSwKKyAgICAgICAgICAgIHsndGV4dCc6ICdzb21lIHRleHQnfSkKKwordGVzdHNfbm9ndWkgPSAoSW50ZXJuYWxGdW5jdGlvbnNUZXN0LCBUY2xPYmpzVG9QeVRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisgICAgcnVuX3VuaXR0ZXN0KCp0ZXN0c19ub2d1aSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF9zdHlsZS5weSBiL2xpYi9weXRob24yLjcvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF9zdHlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzBlMDc1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9saWItdGsvdGVzdC90ZXN0X3R0ay90ZXN0X3N0eWxlLnB5CkBAIC0wLDAgKzEsOTEgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IFRraW50ZXIKK2ltcG9ydCB0dGsKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBydW5fdW5pdHRlc3QKKworaW1wb3J0IHN1cHBvcnQKKworcmVxdWlyZXMoJ2d1aScpCisKK2NsYXNzIFN0eWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc3R5bGUgPSB0dGsuU3R5bGUoKQorCisKKyAgICBkZWYgdGVzdF9jb25maWd1cmUoc2VsZik6CisgICAgICAgIHN0eWxlID0gc2VsZi5zdHlsZQorICAgICAgICBzdHlsZS5jb25maWd1cmUoJ1RCdXR0b24nLCBiYWNrZ3JvdW5kPSd5ZWxsb3cnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0eWxlLmNvbmZpZ3VyZSgnVEJ1dHRvbicsICdiYWNrZ3JvdW5kJyksCisgICAgICAgICAgICAneWVsbG93JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3R5bGUuY29uZmlndXJlKCdUQnV0dG9uJyksIGRpY3QpKQorCisKKyAgICBkZWYgdGVzdF9tYXAoc2VsZik6CisgICAgICAgIHN0eWxlID0gc2VsZi5zdHlsZQorICAgICAgICBzdHlsZS5tYXAoJ1RCdXR0b24nLCBiYWNrZ3JvdW5kPVsoJ2FjdGl2ZScsICdiYWNrZ3JvdW5kJywgJ2JsdWUnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3R5bGUubWFwKCdUQnV0dG9uJywgJ2JhY2tncm91bmQnKSwKKyAgICAgICAgICAgIFsoJ2FjdGl2ZScsICdiYWNrZ3JvdW5kJywgJ2JsdWUnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN0eWxlLm1hcCgnVEJ1dHRvbicpLCBkaWN0KSkKKworCisgICAgZGVmIHRlc3RfbG9va3VwKHNlbGYpOgorICAgICAgICBzdHlsZSA9IHNlbGYuc3R5bGUKKyAgICAgICAgc3R5bGUuY29uZmlndXJlKCdUQnV0dG9uJywgYmFja2dyb3VuZD0neWVsbG93JykKKyAgICAgICAgc3R5bGUubWFwKCdUQnV0dG9uJywgYmFja2dyb3VuZD1bKCdhY3RpdmUnLCAnYmFja2dyb3VuZCcsICdibHVlJyldKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3R5bGUubG9va3VwKCdUQnV0dG9uJywgJ2JhY2tncm91bmQnKSwgJ3llbGxvdycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3R5bGUubG9va3VwKCdUQnV0dG9uJywgJ2JhY2tncm91bmQnLAorICAgICAgICAgICAgWydhY3RpdmUnLCAnYmFja2dyb3VuZCddKSwgJ2JsdWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0eWxlLmxvb2t1cCgnVEJ1dHRvbicsICdvcHRpb25ub3RkZWZpbmVkJywKKyAgICAgICAgICAgIGRlZmF1bHQ9J2lrbmV3aXQnKSwgJ2lrbmV3aXQnKQorCisKKyAgICBkZWYgdGVzdF9sYXlvdXQoc2VsZik6CisgICAgICAgIHN0eWxlID0gc2VsZi5zdHlsZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzdHlsZS5sYXlvdXQsICdOb3RBTGF5b3V0JykKKyAgICAgICAgdHZfc3R5bGUgPSBzdHlsZS5sYXlvdXQoJ1RyZWV2aWV3JykKKworICAgICAgICAjICJlcmFzZSIgVHJlZXZpZXcgbGF5b3V0CisgICAgICAgIHN0eWxlLmxheW91dCgnVHJlZXZpZXcnLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHlsZS5sYXlvdXQoJ1RyZWV2aWV3JyksCisgICAgICAgICAgICBbKCdudWxsJywgeydzdGlja3knOiAnbnN3ZSd9KV0KKyAgICAgICAgKQorCisgICAgICAgICMgcmVzdG9yZSBsYXlvdXQKKyAgICAgICAgc3R5bGUubGF5b3V0KCdUcmVldmlldycsIHR2X3N0eWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0eWxlLmxheW91dCgnVHJlZXZpZXcnKSwgdHZfc3R5bGUpCisKKyAgICAgICAgIyBzaG91bGQgcmV0dXJuIGEgbGlzdAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdHlsZS5sYXlvdXQoJ1RCdXR0b24nKSwgbGlzdCkpCisKKyAgICAgICAgIyBjb3JyZWN0IGxheW91dCwgYnV0ICJvcHRpb24iIGRvZXNuJ3QgZXhpc3QgYXMgb3B0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHN0eWxlLmxheW91dCwgJ1RyZWV2aWV3JywKKyAgICAgICAgICAgIFsoJ25hbWUnLCB7J29wdGlvbic6ICdpbmV4aXN0ZW50J30pXSkKKworCisgICAgZGVmIHRlc3RfdGhlbWVfdXNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnN0eWxlLnRoZW1lX3VzZSwKKyAgICAgICAgICAgICdub25leGlzdGluZ25hbWUnKQorCisgICAgICAgIGN1cnJfdGhlbWUgPSBzZWxmLnN0eWxlLnRoZW1lX3VzZSgpCisgICAgICAgIG5ld190aGVtZSA9IE5vbmUKKyAgICAgICAgZm9yIHRoZW1lIGluIHNlbGYuc3R5bGUudGhlbWVfbmFtZXMoKToKKyAgICAgICAgICAgIGlmIHRoZW1lICE9IGN1cnJfdGhlbWU6CisgICAgICAgICAgICAgICAgbmV3X3RoZW1lID0gdGhlbWUKKyAgICAgICAgICAgICAgICBzZWxmLnN0eWxlLnRoZW1lX3VzZSh0aGVtZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBqdXN0IG9uZSB0aGVtZSBhdmFpbGFibGUsIGNhbid0IGdvIG9uIHdpdGggdGVzdHMKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3Vycl90aGVtZSA9PSBuZXdfdGhlbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobmV3X3RoZW1lICE9IHNlbGYuc3R5bGUudGhlbWVfdXNlKCkpCisKKyAgICAgICAgc2VsZi5zdHlsZS50aGVtZV91c2UoY3Vycl90aGVtZSkKKworCit0ZXN0c19ndWkgPSAoU3R5bGVUZXN0LCApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KCp0ZXN0c19ndWkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2xpYi10ay90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weSBiL2xpYi9weXRob24yLjcvbGliLXRrL3Rlc3QvdGVzdF90dGsvdGVzdF93aWRnZXRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMDZhNzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L2xpYi10ay90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weQpAQCAtMCwwICsxLDExNTggQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IFRraW50ZXIKK2ltcG9ydCB0dGsKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBydW5fdW5pdHRlc3QKK2ltcG9ydCBzeXMKKworaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdF9mdW5jdGlvbnMgaW1wb3J0IE1vY2tUY2xPYmosIE1vY2tTdGF0ZVNwZWMKKworcmVxdWlyZXMoJ2d1aScpCisKK2NsYXNzIFdpZGdldFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIG1ldGhvZHMgYXZhaWxhYmxlIGluIGV2ZXJ5IHR0ayB3aWRnZXQuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cHBvcnQucm9vdF9kZWljb25pZnkoKQorICAgICAgICBzZWxmLndpZGdldCA9IHR0ay5CdXR0b24od2lkdGg9MCwgdGV4dD0iVGV4dCIpCisgICAgICAgIHNlbGYud2lkZ2V0LnBhY2soKQorICAgICAgICBzZWxmLndpZGdldC53YWl0X3Zpc2liaWxpdHkoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLndpZGdldC5kZXN0cm95KCkKKyAgICAgICAgc3VwcG9ydC5yb290X3dpdGhkcmF3KCkKKworCisgICAgZGVmIHRlc3RfaWRlbnRpZnkoc2VsZik6CisgICAgICAgIHNlbGYud2lkZ2V0LnVwZGF0ZV9pZGxldGFza3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LmlkZW50aWZ5KAorICAgICAgICAgICAgaW50KHNlbGYud2lkZ2V0LndpbmZvX3dpZHRoKCkgLyAyKSwKKyAgICAgICAgICAgIGludChzZWxmLndpZGdldC53aW5mb19oZWlnaHQoKSAvIDIpCisgICAgICAgICAgICApLCAibGFiZWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LmlkZW50aWZ5KC0xLCAtMSksICIiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYud2lkZ2V0LmlkZW50aWZ5LCBOb25lLCA1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLndpZGdldC5pZGVudGlmeSwgNSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi53aWRnZXQuaWRlbnRpZnksIDUsICcnKQorCisKKyAgICBkZWYgdGVzdF93aWRnZXRfc3RhdGUoc2VsZik6CisgICAgICAgICMgWFhYIG5vdCBzdXJlIGFib3V0IHRoZSBwb3J0YWJpbGl0eSBvZiBhbGwgdGhlc2UgdGVzdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5zdGF0ZSgpLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5pbnN0YXRlKFsnIWRpc2FibGVkJ10pLCBUcnVlKQorCisgICAgICAgICMgY2hhbmdpbmcgZnJvbSAhZGlzYWJsZWQgdG8gZGlzYWJsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5zdGF0ZShbJ2Rpc2FibGVkJ10pLCAoJyFkaXNhYmxlZCcsICkpCisgICAgICAgICMgbm8gc3RhdGUgY2hhbmdlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuc3RhdGUoWydkaXNhYmxlZCddKSwgKCkpCisgICAgICAgICMgY2hhbmdlIGJhY2sgdG8gIWRpc2FibGUgYnV0IGFsc28gYWN0aXZlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuc3RhdGUoWychZGlzYWJsZWQnLCAnYWN0aXZlJ10pLAorICAgICAgICAgICAgKCchYWN0aXZlJywgJ2Rpc2FibGVkJykpCisgICAgICAgICMgbm8gc3RhdGUgY2hhbmdlcywgYWdhaW4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5zdGF0ZShbJyFkaXNhYmxlZCcsICdhY3RpdmUnXSksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2lkZ2V0LnN0YXRlKFsnYWN0aXZlJywgJyFkaXNhYmxlZCddKSwgKCkpCisKKyAgICAgICAgZGVmIHRlc3RfY2IoYXJnMSwgKiprdyk6CisgICAgICAgICAgICByZXR1cm4gYXJnMSwga3cKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndpZGdldC5pbnN0YXRlKFsnIWRpc2FibGVkJ10sCisgICAgICAgICAgICB0ZXN0X2NiLCAiaGkiLCAqKnsibXNnIjogInRoZXJlIn0pLAorICAgICAgICAgICAgKCdoaScsIHsnbXNnJzogJ3RoZXJlJ30pKQorCisgICAgICAgICMgYXR0ZW1wdCB0byBzZXQgaW52YWxpZCBzdGF0ZXNwZWMKKyAgICAgICAgY3VycnN0YXRlID0gc2VsZi53aWRnZXQuc3RhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLndpZGdldC5pbnN0YXRlLAorICAgICAgICAgICAgWydiYWRzdGF0ZSddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLndpZGdldC5pbnN0YXRlLAorICAgICAgICAgICAgWydkaXNhYmxlZCcsICdiYWRzdGF0ZSddKQorICAgICAgICAjIHZlcmlmeSB0aGF0IHdpZGdldCBkaWRuJ3QgY2hhbmdlIGl0cyBzdGF0ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1cnJzdGF0ZSwgc2VsZi53aWRnZXQuc3RhdGUoKSkKKworICAgICAgICAjIGVuc3VyaW5nIHRoYXQgcGFzc2luZyBOb25lIGFzIHN0YXRlIGRvZXNuJ3QgbW9kaWZ5IGN1cnJlbnQgc3RhdGUKKyAgICAgICAgc2VsZi53aWRnZXQuc3RhdGUoWydhY3RpdmUnLCAnIWRpc2FibGVkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53aWRnZXQuc3RhdGUoKSwgKCdhY3RpdmUnLCApKQorCisKK2NsYXNzIEJ1dHRvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaW52b2tlKHNlbGYpOgorICAgICAgICBzdWNjZXNzID0gW10KKyAgICAgICAgYnRuID0gdHRrLkJ1dHRvbihjb21tYW5kPWxhbWJkYTogc3VjY2Vzcy5hcHBlbmQoMSkpCisgICAgICAgIGJ0bi5pbnZva2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3VjY2VzcykKKworCitjbGFzcyBDaGVja2J1dHRvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaW52b2tlKHNlbGYpOgorICAgICAgICBzdWNjZXNzID0gW10KKyAgICAgICAgZGVmIGNiX3Rlc3QoKToKKyAgICAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKDEpCisgICAgICAgICAgICByZXR1cm4gImNiIHRlc3QgY2FsbGVkIgorCisgICAgICAgIGNidG4gPSB0dGsuQ2hlY2tidXR0b24oY29tbWFuZD1jYl90ZXN0KQorICAgICAgICAjIHRoZSB2YXJpYWJsZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgdHRrLkNoZWNrYnV0dG9uIGlzIGFjdHVhbGx5CisgICAgICAgICMgdW5kZWZpbmVkIHRpbGwgd2UgaW52b2tlIHRoZSBDaGVja2J1dHRvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNidG4uc3RhdGUoKSwgKCdhbHRlcm5hdGUnLCApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBjYnRuLnRrLmdsb2JhbGdldHZhciwKKyAgICAgICAgICAgIGNidG5bJ3ZhcmlhYmxlJ10pCisKKyAgICAgICAgcmVzID0gY2J0bi5pbnZva2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgImNiIHRlc3QgY2FsbGVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYnRuWydvbnZhbHVlJ10sCisgICAgICAgICAgICBjYnRuLnRrLmdsb2JhbGdldHZhcihjYnRuWyd2YXJpYWJsZSddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1Y2Nlc3MpCisKKyAgICAgICAgY2J0blsnY29tbWFuZCddID0gJycKKyAgICAgICAgcmVzID0gY2J0bi5pbnZva2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKHN1Y2Nlc3MpID4gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYnRuWydvZmZ2YWx1ZSddLAorICAgICAgICAgICAgY2J0bi50ay5nbG9iYWxnZXR2YXIoY2J0blsndmFyaWFibGUnXSkpCisKKworY2xhc3MgQ29tYm9ib3hUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisgICAgICAgIHNlbGYuY29tYm8gPSB0dGsuQ29tYm9ib3goKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNvbWJvLmRlc3Ryb3koKQorICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQorCisgICAgZGVmIF9zaG93X2Ryb3BfZG93bl9saXN0Ym94KHNlbGYpOgorICAgICAgICB3aWR0aCA9IHNlbGYuY29tYm8ud2luZm9fd2lkdGgoKQorICAgICAgICBzZWxmLmNvbWJvLmV2ZW50X2dlbmVyYXRlKCc8QnV0dG9uUHJlc3MtMT4nLCB4PXdpZHRoIC0gNSwgeT01KQorICAgICAgICBzZWxmLmNvbWJvLmV2ZW50X2dlbmVyYXRlKCc8QnV0dG9uUmVsZWFzZS0xPicsIHg9d2lkdGggLSA1LCB5PTUpCisgICAgICAgIHNlbGYuY29tYm8udXBkYXRlX2lkbGV0YXNrcygpCisKKworICAgIGRlZiB0ZXN0X3ZpcnR1YWxfZXZlbnQoc2VsZik6CisgICAgICAgIHN1Y2Nlc3MgPSBbXQorCisgICAgICAgIHNlbGYuY29tYm9bJ3ZhbHVlcyddID0gWzFdCisgICAgICAgIHNlbGYuY29tYm8uYmluZCgnPDxDb21ib2JveFNlbGVjdGVkPj4nLAorICAgICAgICAgICAgbGFtYmRhIGV2dDogc3VjY2Vzcy5hcHBlbmQoVHJ1ZSkpCisgICAgICAgIHNlbGYuY29tYm8ucGFjaygpCisgICAgICAgIHNlbGYuY29tYm8ud2FpdF92aXNpYmlsaXR5KCkKKworICAgICAgICBoZWlnaHQgPSBzZWxmLmNvbWJvLndpbmZvX2hlaWdodCgpCisgICAgICAgIHNlbGYuX3Nob3dfZHJvcF9kb3duX2xpc3Rib3goKQorICAgICAgICBzZWxmLmNvbWJvLnVwZGF0ZSgpCisgICAgICAgIHNlbGYuY29tYm8uZXZlbnRfZ2VuZXJhdGUoJzxSZXR1cm4+JykKKyAgICAgICAgc2VsZi5jb21iby51cGRhdGUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWNjZXNzKQorCisKKyAgICBkZWYgdGVzdF9wb3N0Y29tbWFuZChzZWxmKToKKyAgICAgICAgc3VjY2VzcyA9IFtdCisKKyAgICAgICAgc2VsZi5jb21ib1sncG9zdGNvbW1hbmQnXSA9IGxhbWJkYTogc3VjY2Vzcy5hcHBlbmQoVHJ1ZSkKKyAgICAgICAgc2VsZi5jb21iby5wYWNrKCkKKyAgICAgICAgc2VsZi5jb21iby53YWl0X3Zpc2liaWxpdHkoKQorCisgICAgICAgIHNlbGYuX3Nob3dfZHJvcF9kb3duX2xpc3Rib3goKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3VjY2VzcykKKworICAgICAgICAjIHRlc3RpbmcgcG9zdGNvbW1hbmQgcmVtb3ZhbAorICAgICAgICBzZWxmLmNvbWJvWydwb3N0Y29tbWFuZCddID0gJycKKyAgICAgICAgc2VsZi5fc2hvd19kcm9wX2Rvd25fbGlzdGJveCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN1Y2Nlc3MpLCAxKQorCisKKyAgICBkZWYgdGVzdF92YWx1ZXMoc2VsZik6CisgICAgICAgIGRlZiBjaGVja19nZXRfY3VycmVudChnZXR2YWwsIGN1cnJ2YWwpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbWJvLmdldCgpLCBnZXR2YWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tYm8uY3VycmVudCgpLCBjdXJydmFsKQorCisgICAgICAgIGNoZWNrX2dldF9jdXJyZW50KCcnLCAtMSkKKworICAgICAgICBzZWxmLmNvbWJvWyd2YWx1ZXMnXSA9IFsnYScsIDEsICdjJ10KKworICAgICAgICBzZWxmLmNvbWJvLnNldCgnYycpCisgICAgICAgIGNoZWNrX2dldF9jdXJyZW50KCdjJywgMikKKworICAgICAgICBzZWxmLmNvbWJvLmN1cnJlbnQoMCkKKyAgICAgICAgY2hlY2tfZ2V0X2N1cnJlbnQoJ2EnLCAwKQorCisgICAgICAgIHNlbGYuY29tYm8uc2V0KCdkJykKKyAgICAgICAgY2hlY2tfZ2V0X2N1cnJlbnQoJ2QnLCAtMSkKKworICAgICAgICAjIHRlc3RpbmcgdmFsdWVzIHdpdGggZW1wdHkgc3RyaW5nCisgICAgICAgIHNlbGYuY29tYm8uc2V0KCcnKQorICAgICAgICBzZWxmLmNvbWJvWyd2YWx1ZXMnXSA9ICgxLCAyLCAnJywgMykKKyAgICAgICAgY2hlY2tfZ2V0X2N1cnJlbnQoJycsIDIpCisKKyAgICAgICAgIyB0ZXN0aW5nIHZhbHVlcyB3aXRoIGVtcHR5IHN0cmluZyBzZXQgdGhyb3VnaCBjb25maWd1cmUKKyAgICAgICAgc2VsZi5jb21iby5jb25maWd1cmUodmFsdWVzPVsxLCAnJywgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb21ib1sndmFsdWVzJ10sICgnMScsICcnLCAnMicpKQorCisgICAgICAgICMgdGVzdGluZyB2YWx1ZXMgd2l0aCBzcGFjZXMKKyAgICAgICAgc2VsZi5jb21ib1sndmFsdWVzJ10gPSBbJ2EgYicsICdhXHRiJywgJ2FcbmInXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tYm9bJ3ZhbHVlcyddLCAoJ2EgYicsICdhXHRiJywgJ2FcbmInKSkKKworICAgICAgICAjIHRlc3RpbmcgdmFsdWVzIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzCisgICAgICAgIHNlbGYuY29tYm9bJ3ZhbHVlcyddID0gW3InYVx0YicsICciYSInLCAnfSB7J10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbWJvWyd2YWx1ZXMnXSwgKHInYVx0YicsICciYSInLCAnfSB7JykpCisKKyAgICAgICAgIyBvdXQgb2YgcmFuZ2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5jb21iby5jdXJyZW50LAorICAgICAgICAgICAgbGVuKHNlbGYuY29tYm9bJ3ZhbHVlcyddKSkKKyAgICAgICAgIyBpdCBleHBlY3RzIGFuIGludGVnZXIgKG9yIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gaW50KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLmNvbWJvLmN1cnJlbnQsICcnKQorCisgICAgICAgICMgdGVzdGluZyBjcmVhdGluZyBjb21ib2JveCB3aXRoIGVtcHR5IHN0cmluZyBpbiB2YWx1ZXMKKyAgICAgICAgY29tYm8yID0gdHRrLkNvbWJvYm94KHZhbHVlcz1bMSwgMiwgJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbWJvMlsndmFsdWVzJ10sICgnMScsICcyJywgJycpKQorICAgICAgICBjb21ibzIuZGVzdHJveSgpCisKKworY2xhc3MgRW50cnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisgICAgICAgIHNlbGYuZW50cnkgPSB0dGsuRW50cnkoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmVudHJ5LmRlc3Ryb3koKQorICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQorCisKKyAgICBkZWYgdGVzdF9iYm94KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmVudHJ5LmJib3goMCkpLCA0KQorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLmVudHJ5LmJib3goMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShpdGVtLCBpbnQpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYuZW50cnkuYmJveCwgJ25vaW5kZXgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLmVudHJ5LmJib3gsIE5vbmUpCisKKworICAgIGRlZiB0ZXN0X2lkZW50aWZ5KHNlbGYpOgorICAgICAgICBzZWxmLmVudHJ5LnBhY2soKQorICAgICAgICBzZWxmLmVudHJ5LndhaXRfdmlzaWJpbGl0eSgpCisgICAgICAgIHNlbGYuZW50cnkudXBkYXRlX2lkbGV0YXNrcygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudHJ5LmlkZW50aWZ5KDUsIDUpLCAidGV4dGFyZWEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW50cnkuaWRlbnRpZnkoLTEsIC0xKSwgIiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5lbnRyeS5pZGVudGlmeSwgTm9uZSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5lbnRyeS5pZGVudGlmeSwgNSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5lbnRyeS5pZGVudGlmeSwgNSwgJycpCisKKworICAgIGRlZiB0ZXN0X3ZhbGlkYXRpb25fb3B0aW9ucyhzZWxmKToKKyAgICAgICAgc3VjY2VzcyA9IFtdCisgICAgICAgIHRlc3RfaW52YWxpZCA9IGxhbWJkYTogc3VjY2Vzcy5hcHBlbmQoVHJ1ZSkKKworICAgICAgICBzZWxmLmVudHJ5Wyd2YWxpZGF0ZSddID0gJ25vbmUnCisgICAgICAgIHNlbGYuZW50cnlbJ3ZhbGlkYXRlY29tbWFuZCddID0gbGFtYmRhOiBGYWxzZQorCisgICAgICAgIHNlbGYuZW50cnlbJ2ludmFsaWRjb21tYW5kJ10gPSB0ZXN0X2ludmFsaWQKKyAgICAgICAgc2VsZi5lbnRyeS52YWxpZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWNjZXNzKQorCisgICAgICAgIHNlbGYuZW50cnlbJ2ludmFsaWRjb21tYW5kJ10gPSAnJworICAgICAgICBzZWxmLmVudHJ5LnZhbGlkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3VjY2VzcyksIDEpCisKKyAgICAgICAgc2VsZi5lbnRyeVsnaW52YWxpZGNvbW1hbmQnXSA9IHRlc3RfaW52YWxpZAorICAgICAgICBzZWxmLmVudHJ5Wyd2YWxpZGF0ZWNvbW1hbmQnXSA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmVudHJ5LnZhbGlkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3VjY2VzcyksIDEpCisKKyAgICAgICAgc2VsZi5lbnRyeVsndmFsaWRhdGVjb21tYW5kJ10gPSAnJworICAgICAgICBzZWxmLmVudHJ5LnZhbGlkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3VjY2VzcyksIDEpCisKKyAgICAgICAgc2VsZi5lbnRyeVsndmFsaWRhdGVjb21tYW5kJ10gPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYuZW50cnkudmFsaWRhdGUpCisKKworICAgIGRlZiB0ZXN0X3ZhbGlkYXRpb24oc2VsZik6CisgICAgICAgIHZhbGlkYXRpb24gPSBbXQorICAgICAgICBkZWYgdmFsaWRhdGUodG9faW5zZXJ0KToKKyAgICAgICAgICAgIGlmIG5vdCAnYScgPD0gdG9faW5zZXJ0Lmxvd2VyKCkgPD0gJ3onOgorICAgICAgICAgICAgICAgIHZhbGlkYXRpb24uYXBwZW5kKEZhbHNlKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgdmFsaWRhdGlvbi5hcHBlbmQoVHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgc2VsZi5lbnRyeVsndmFsaWRhdGUnXSA9ICdrZXknCisgICAgICAgIHNlbGYuZW50cnlbJ3ZhbGlkYXRlY29tbWFuZCddID0gc2VsZi5lbnRyeS5yZWdpc3Rlcih2YWxpZGF0ZSksICclUycKKworICAgICAgICBzZWxmLmVudHJ5Lmluc2VydCgnZW5kJywgMSkKKyAgICAgICAgc2VsZi5lbnRyeS5pbnNlcnQoJ2VuZCcsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWxpZGF0aW9uLCBbRmFsc2UsIFRydWVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZW50cnkuZ2V0KCksICdhJykKKworCisgICAgZGVmIHRlc3RfcmV2YWxpZGF0aW9uKHNlbGYpOgorICAgICAgICBkZWYgdmFsaWRhdGUoY29udGVudCk6CisgICAgICAgICAgICBmb3IgbGV0dGVyIGluIGNvbnRlbnQ6CisgICAgICAgICAgICAgICAgaWYgbm90ICdhJyA8PSBsZXR0ZXIubG93ZXIoKSA8PSAneic6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBzZWxmLmVudHJ5Wyd2YWxpZGF0ZWNvbW1hbmQnXSA9IHNlbGYuZW50cnkucmVnaXN0ZXIodmFsaWRhdGUpLCAnJVAnCisKKyAgICAgICAgc2VsZi5lbnRyeS5pbnNlcnQoJ2VuZCcsICdhdm9jYWRvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudHJ5LnZhbGlkYXRlKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbnRyeS5zdGF0ZSgpLCAoKSkKKworICAgICAgICBzZWxmLmVudHJ5LmRlbGV0ZSgwLCAnZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudHJ5LmdldCgpLCAnJykKKworICAgICAgICBzZWxmLmVudHJ5Lmluc2VydCgnZW5kJywgJ2ExYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbnRyeS52YWxpZGF0ZSgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudHJ5LnN0YXRlKCksICgnaW52YWxpZCcsICkpCisKKyAgICAgICAgc2VsZi5lbnRyeS5kZWxldGUoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVudHJ5LnZhbGlkYXRlKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbnRyeS5zdGF0ZSgpLCAoKSkKKworCitjbGFzcyBQYW5lZHdpbmRvd1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnJvb3RfZGVpY29uaWZ5KCkKKyAgICAgICAgc2VsZi5wYW5lZCA9IHR0ay5QYW5lZHdpbmRvdygpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYucGFuZWQuZGVzdHJveSgpCisgICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCisKKworICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgIyBhdHRlbXB0IHRvIGFkZCBhIGNoaWxkIHRoYXQgaXMgbm90IGEgZGlyZWN0IGNoaWxkIG9mIHRoZSBwYW5lZCB3aW5kb3cKKyAgICAgICAgbGFiZWwgPSB0dGsuTGFiZWwoc2VsZi5wYW5lZCkKKyAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwobGFiZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuYWRkLCBjaGlsZCkKKyAgICAgICAgbGFiZWwuZGVzdHJveSgpCisgICAgICAgIGNoaWxkLmRlc3Ryb3koKQorICAgICAgICAjIGFub3RoZXIgYXR0ZW1wdAorICAgICAgICBsYWJlbCA9IHR0ay5MYWJlbCgpCisgICAgICAgIGNoaWxkID0gdHRrLkxhYmVsKGxhYmVsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLmFkZCwgY2hpbGQpCisgICAgICAgIGNoaWxkLmRlc3Ryb3koKQorICAgICAgICBsYWJlbC5kZXN0cm95KCkKKworICAgICAgICBnb29kX2NoaWxkID0gdHRrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5wYW5lZC5hZGQoZ29vZF9jaGlsZCkKKyAgICAgICAgIyByZS1hZGRpbmcgYSBjaGlsZCBpcyBub3QgYWNjZXB0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5hZGQsIGdvb2RfY2hpbGQpCisKKyAgICAgICAgb3RoZXJfY2hpbGQgPSB0dGsuTGFiZWwoc2VsZi5wYW5lZCkKKyAgICAgICAgc2VsZi5wYW5lZC5hZGQob3RoZXJfY2hpbGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYW5lZC5wYW5lKDApLCBzZWxmLnBhbmVkLnBhbmUoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQucGFuZSwgMikKKyAgICAgICAgZ29vZF9jaGlsZC5kZXN0cm95KCkKKyAgICAgICAgb3RoZXJfY2hpbGQuZGVzdHJveSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQucGFuZSwgMCkKKworCisgICAgZGVmIHRlc3RfZm9yZ2V0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLmZvcmdldCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5mb3JnZXQsIDApCisKKyAgICAgICAgc2VsZi5wYW5lZC5hZGQodHRrLkxhYmVsKCkpCisgICAgICAgIHNlbGYucGFuZWQuZm9yZ2V0KDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuZm9yZ2V0LCAwKQorCisKKyAgICBkZWYgdGVzdF9pbnNlcnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuaW5zZXJ0LCBOb25lLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLmluc2VydCwgMCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5pbnNlcnQsIDAsIDApCisKKyAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwoKQorICAgICAgICBjaGlsZDIgPSB0dGsuTGFiZWwoKQorICAgICAgICBjaGlsZDMgPSB0dGsuTGFiZWwoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuaW5zZXJ0LCAwLCBjaGlsZCkKKworICAgICAgICBzZWxmLnBhbmVkLmluc2VydCgnZW5kJywgY2hpbGQyKQorICAgICAgICBzZWxmLnBhbmVkLmluc2VydCgwLCBjaGlsZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhbmVkLnBhbmVzKCksIChzdHIoY2hpbGQpLCBzdHIoY2hpbGQyKSkpCisKKyAgICAgICAgc2VsZi5wYW5lZC5pbnNlcnQoMCwgY2hpbGQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFuZWQucGFuZXMoKSwgKHN0cihjaGlsZDIpLCBzdHIoY2hpbGQpKSkKKworICAgICAgICBzZWxmLnBhbmVkLmluc2VydCgnZW5kJywgY2hpbGQzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFuZWQucGFuZXMoKSwKKyAgICAgICAgICAgIChzdHIoY2hpbGQyKSwgc3RyKGNoaWxkKSwgc3RyKGNoaWxkMykpKQorCisgICAgICAgICMgcmVpbnNlcnRpbmcgYSBjaGlsZCBzaG91bGQgbW92ZSBpdCB0byBpdHMgY3VycmVudCBwb3NpdGlvbgorICAgICAgICBwYW5lcyA9IHNlbGYucGFuZWQucGFuZXMoKQorICAgICAgICBzZWxmLnBhbmVkLmluc2VydCgnZW5kJywgY2hpbGQzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhbmVzLCBzZWxmLnBhbmVkLnBhbmVzKCkpCisKKyAgICAgICAgIyBtb3ZpbmcgY2hpbGQzIHRvIGNoaWxkMiBwb3NpdGlvbiBzaG91bGQgcmVzdWx0IGluIGNoaWxkMiBlbmRpbmcgdXAKKyAgICAgICAgIyBpbiBwcmV2aW91cyBjaGlsZCBwb3NpdGlvbiBhbmQgY2hpbGQgZW5kaW5nIHVwIGluIHByZXZpb3VzIGNoaWxkMworICAgICAgICAjIHBvc2l0aW9uCisgICAgICAgIHNlbGYucGFuZWQuaW5zZXJ0KGNoaWxkMiwgY2hpbGQzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFuZWQucGFuZXMoKSwKKyAgICAgICAgICAgIChzdHIoY2hpbGQzKSwgc3RyKGNoaWxkMiksIHN0cihjaGlsZCkpKQorCisKKyAgICBkZWYgdGVzdF9wYW5lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLnBhbmUsIDApCisKKyAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwoKQorICAgICAgICBzZWxmLnBhbmVkLmFkZChjaGlsZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi5wYW5lZC5wYW5lKDApLCBkaWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhbmVkLnBhbmUoMCwgd2VpZ2h0PU5vbmUpLCAwKQorICAgICAgICAjIG5ld2VyIGZvcm0gZm9yIHF1ZXJ5aW5nIGEgc2luZ2xlIG9wdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFuZWQucGFuZSgwLCAnd2VpZ2h0JyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYW5lZC5wYW5lKDApLCBzZWxmLnBhbmVkLnBhbmUoc3RyKGNoaWxkKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5wYW5lLCAwLAorICAgICAgICAgICAgYmFkb3B0aW9uPSdzb21ldmFsdWUnKQorCisKKyAgICBkZWYgdGVzdF9zYXNocG9zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLnNhc2hwb3MsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuc2FzaHBvcywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuc2FzaHBvcywgMCkKKworICAgICAgICBjaGlsZCA9IHR0ay5MYWJlbChzZWxmLnBhbmVkLCB0ZXh0PSdhJykKKyAgICAgICAgc2VsZi5wYW5lZC5hZGQoY2hpbGQsIHdlaWdodD0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLnNhc2hwb3MsIDApCisgICAgICAgIGNoaWxkMiA9IHR0ay5MYWJlbChzZWxmLnBhbmVkLCB0ZXh0PSdiJykKKyAgICAgICAgc2VsZi5wYW5lZC5hZGQoY2hpbGQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLnNhc2hwb3MsIDEpCisKKyAgICAgICAgc2VsZi5wYW5lZC5wYWNrKGV4cGFuZD1UcnVlLCBmaWxsPSdib3RoJykKKyAgICAgICAgc2VsZi5wYW5lZC53YWl0X3Zpc2liaWxpdHkoKQorCisgICAgICAgIGN1cnJfcG9zID0gc2VsZi5wYW5lZC5zYXNocG9zKDApCisgICAgICAgIHNlbGYucGFuZWQuc2FzaHBvcygwLCAxMDAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3Vycl9wb3MgIT0gc2VsZi5wYW5lZC5zYXNocG9zKDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLnBhbmVkLnNhc2hwb3MoMCksIGludCkpCisKKworY2xhc3MgUmFkaW9idXR0b25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2ludm9rZShzZWxmKToKKyAgICAgICAgc3VjY2VzcyA9IFtdCisgICAgICAgIGRlZiBjYl90ZXN0KCk6CisgICAgICAgICAgICBzdWNjZXNzLmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuICJjYiB0ZXN0IGNhbGxlZCIKKworICAgICAgICBteXZhciA9IFRraW50ZXIuSW50VmFyKCkKKyAgICAgICAgY2J0biA9IHR0ay5SYWRpb2J1dHRvbihjb21tYW5kPWNiX3Rlc3QsIHZhcmlhYmxlPW15dmFyLCB2YWx1ZT0wKQorICAgICAgICBjYnRuMiA9IHR0ay5SYWRpb2J1dHRvbihjb21tYW5kPWNiX3Rlc3QsIHZhcmlhYmxlPW15dmFyLCB2YWx1ZT0xKQorCisgICAgICAgIHJlcyA9IGNidG4uaW52b2tlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICJjYiB0ZXN0IGNhbGxlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2J0blsndmFsdWUnXSwgbXl2YXIuZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXl2YXIuZ2V0KCksCisgICAgICAgICAgICBjYnRuLnRrLmdsb2JhbGdldHZhcihjYnRuWyd2YXJpYWJsZSddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1Y2Nlc3MpCisKKyAgICAgICAgY2J0bjJbJ2NvbW1hbmQnXSA9ICcnCisgICAgICAgIHJlcyA9IGNidG4yLmludm9rZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsZW4oc3VjY2VzcykgPiAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNidG4yWyd2YWx1ZSddLCBteXZhci5nZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChteXZhci5nZXQoKSwKKyAgICAgICAgICAgIGNidG4udGsuZ2xvYmFsZ2V0dmFyKGNidG5bJ3ZhcmlhYmxlJ10pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNidG5bJ3ZhcmlhYmxlJ10pLCBzdHIoY2J0bjJbJ3ZhcmlhYmxlJ10pKQorCisKKworY2xhc3MgU2NhbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisgICAgICAgIHNlbGYuc2NhbGUgPSB0dGsuU2NhbGUoKQorICAgICAgICBzZWxmLnNjYWxlLnBhY2soKQorICAgICAgICBzZWxmLnNjYWxlLnVwZGF0ZSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc2NhbGUuZGVzdHJveSgpCisgICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCisKKworICAgIGRlZiB0ZXN0X2N1c3RvbV9ldmVudChzZWxmKToKKyAgICAgICAgZmFpbHVyZSA9IFsxLCAxLCAxXSAjIHdpbGwgbmVlZCB0byBiZSBlbXB0eQorCisgICAgICAgIGZ1bmNpZCA9IHNlbGYuc2NhbGUuYmluZCgnPDxSYW5nZUNoYW5nZWQ+PicsIGxhbWJkYSBldnQ6IGZhaWx1cmUucG9wKCkpCisKKyAgICAgICAgc2VsZi5zY2FsZVsnZnJvbSddID0gMTAKKyAgICAgICAgc2VsZi5zY2FsZVsnZnJvbV8nXSA9IDEwCisgICAgICAgIHNlbGYuc2NhbGVbJ3RvJ10gPSAzCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmYWlsdXJlKQorCisgICAgICAgIGZhaWx1cmUgPSBbMSwgMSwgMV0KKyAgICAgICAgc2VsZi5zY2FsZS5jb25maWd1cmUoZnJvbV89MiwgdG89NSkKKyAgICAgICAgc2VsZi5zY2FsZS5jb25maWd1cmUoZnJvbV89MCwgdG89LTIpCisgICAgICAgIHNlbGYuc2NhbGUuY29uZmlndXJlKHRvPTEwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmFpbHVyZSkKKworCisgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgorICAgICAgICBzY2FsZV93aWR0aCA9IHNlbGYuc2NhbGUud2luZm9fd2lkdGgoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NhbGUuZ2V0KHNjYWxlX3dpZHRoLCAwKSwgc2VsZi5zY2FsZVsndG8nXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NhbGUuZ2V0KDAsIDApLCBzZWxmLnNjYWxlWydmcm9tJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoKSwgc2VsZi5zY2FsZVsndmFsdWUnXSkKKyAgICAgICAgc2VsZi5zY2FsZVsndmFsdWUnXSA9IDMwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoKSwgc2VsZi5zY2FsZVsndmFsdWUnXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnNjYWxlLmdldCwgJycsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYuc2NhbGUuZ2V0LCAwLCAnJykKKworCisgICAgZGVmIHRlc3Rfc2V0KHNlbGYpOgorICAgICAgICAjIHNldCByZXN0cmljdHMgdGhlIG1heC9taW4gdmFsdWVzIGFjY29yZGluZyB0byB0aGUgY3VycmVudCByYW5nZQorICAgICAgICBtYXggPSBzZWxmLnNjYWxlWyd0byddCisgICAgICAgIG5ld19tYXggPSBtYXggKyAxMAorICAgICAgICBzZWxmLnNjYWxlLnNldChuZXdfbWF4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2NhbGUuZ2V0KCksIG1heCkKKyAgICAgICAgbWluID0gc2VsZi5zY2FsZVsnZnJvbSddCisgICAgICAgIHNlbGYuc2NhbGUuc2V0KG1pbiAtIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoKSwgbWluKQorCisgICAgICAgICMgY2hhbmdpbmcgZGlyZWN0bHkgdGhlIHZhcmlhYmxlIGRvZXNuJ3QgaW1wb3NlIHRoaXMgbGltaXRhdGlvbiB0aG8KKyAgICAgICAgdmFyID0gVGtpbnRlci5Eb3VibGVWYXIoKQorICAgICAgICBzZWxmLnNjYWxlWyd2YXJpYWJsZSddID0gdmFyCisgICAgICAgIHZhci5zZXQobWF4ICsgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjYWxlLmdldCgpLCB2YXIuZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoKSwgbWF4ICsgNSkKKyAgICAgICAgZGVsIHZhcgorCisgICAgICAgICMgdGhlIHNhbWUgaGFwcGVucyB3aXRoIHRoZSB2YWx1ZSBvcHRpb24KKyAgICAgICAgc2VsZi5zY2FsZVsndmFsdWUnXSA9IG1heCArIDEwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoKSwgbWF4ICsgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoKSwgc2VsZi5zY2FsZVsndmFsdWUnXSkKKworICAgICAgICAjIG5ldmVydGhlbGVzcywgbm90ZSB0aGF0IHRoZSBtYXgvbWluIHZhbHVlcyB3ZSBjYW4gZ2V0IHNwZWNpZnlpbmcKKyAgICAgICAgIyB4LCB5IGNvb3JkcyBhcmUgdGhlIG9uZXMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHJhbmdlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zY2FsZS5nZXQoMCwgMCksIG1pbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNjYWxlLmdldChzZWxmLnNjYWxlLndpbmZvX3dpZHRoKCksIDApLCBtYXgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5zY2FsZS5zZXQsIE5vbmUpCisKKworY2xhc3MgTm90ZWJvb2tUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisgICAgICAgIHNlbGYubmIgPSB0dGsuTm90ZWJvb2socGFkZGluZz0wKQorICAgICAgICBzZWxmLmNoaWxkMSA9IHR0ay5MYWJlbCgpCisgICAgICAgIHNlbGYuY2hpbGQyID0gdHRrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5uYi5hZGQoc2VsZi5jaGlsZDEsIHRleHQ9J2EnKQorICAgICAgICBzZWxmLm5iLmFkZChzZWxmLmNoaWxkMiwgdGV4dD0nYicpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY2hpbGQxLmRlc3Ryb3koKQorICAgICAgICBzZWxmLmNoaWxkMi5kZXN0cm95KCkKKyAgICAgICAgc2VsZi5uYi5kZXN0cm95KCkKKyAgICAgICAgc3VwcG9ydC5yb290X3dpdGhkcmF3KCkKKworCisgICAgZGVmIHRlc3RfdGFiX2lkZW50aWZpZXJzKHNlbGYpOgorICAgICAgICBzZWxmLm5iLmZvcmdldCgwKQorICAgICAgICBzZWxmLm5iLmhpZGUoc2VsZi5jaGlsZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIudGFiLCBzZWxmLmNoaWxkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLmluZGV4KCdlbmQnKSwgMSkKKyAgICAgICAgc2VsZi5uYi5hZGQoc2VsZi5jaGlsZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi5pbmRleCgnZW5kJyksIDEpCisgICAgICAgIHNlbGYubmIuc2VsZWN0KHNlbGYuY2hpbGQyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm5iLnRhYignY3VycmVudCcpKQorICAgICAgICBzZWxmLm5iLmFkZChzZWxmLmNoaWxkMSwgdGV4dD0nYScpCisKKyAgICAgICAgc2VsZi5uYi5wYWNrKCkKKyAgICAgICAgc2VsZi5uYi53YWl0X3Zpc2liaWxpdHkoKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICB0Yl9pZHggPSAiQDIwLDUiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0Yl9pZHggPSAiQDUsNSIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYih0Yl9pZHgpLCBzZWxmLm5iLnRhYignY3VycmVudCcpKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUsIDEwMCwgNSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5uYi50YWIoJ0AlZCwgNScgJSBpLCB0ZXh0PU5vbmUpID09ICdhJzoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBUa2ludGVyLlRjbEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUYWIgd2l0aCB0ZXh0ICdhJyBub3QgZm91bmQiKQorCisKKyAgICBkZWYgdGVzdF9hZGRfYW5kX2hpZGRlbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5oaWRlLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5oaWRlLCAnaGknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmhpZGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuYWRkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmFkZCwgdHRrLkxhYmVsKCksCisgICAgICAgICAgICB1bmtub3duPSdvcHRpb24nKQorCisgICAgICAgIHRhYnMgPSBzZWxmLm5iLnRhYnMoKQorICAgICAgICBzZWxmLm5iLmhpZGUoc2VsZi5jaGlsZDEpCisgICAgICAgIHNlbGYubmIuYWRkKHNlbGYuY2hpbGQxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFicygpLCB0YWJzKQorCisgICAgICAgIGNoaWxkID0gdHRrLkxhYmVsKCkKKyAgICAgICAgc2VsZi5uYi5hZGQoY2hpbGQsIHRleHQ9J2MnKQorICAgICAgICB0YWJzID0gc2VsZi5uYi50YWJzKCkKKworICAgICAgICBjdXJyID0gc2VsZi5uYi5pbmRleCgnY3VycmVudCcpCisgICAgICAgICMgdmVyaWZ5IHRoYXQgdGhlIHRhYiBnZXRzIHJlYWRkZWQgYXQgaXRzIHByZXZpb3VzIHBvc2l0aW9uCisgICAgICAgIGNoaWxkMl9pbmRleCA9IHNlbGYubmIuaW5kZXgoc2VsZi5jaGlsZDIpCisgICAgICAgIHNlbGYubmIuaGlkZShzZWxmLmNoaWxkMikKKyAgICAgICAgc2VsZi5uYi5hZGQoc2VsZi5jaGlsZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWJzKCksIHRhYnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi5pbmRleChzZWxmLmNoaWxkMiksIGNoaWxkMl9pbmRleCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihzZWxmLmNoaWxkMikgPT0gc2VsZi5uYi50YWJzKClbY2hpbGQyX2luZGV4XSkKKyAgICAgICAgIyBidXQgdGhlIHRhYiBuZXh0IHRvIGl0IChub3QgaGlkZGVuKSBpcyB0aGUgb25lIHNlbGVjdGVkIG5vdworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIuaW5kZXgoJ2N1cnJlbnQnKSwgY3VyciArIDEpCisKKworICAgIGRlZiB0ZXN0X2ZvcmdldChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5mb3JnZXQsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmZvcmdldCwgJ2hpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5mb3JnZXQsIE5vbmUpCisKKyAgICAgICAgdGFicyA9IHNlbGYubmIudGFicygpCisgICAgICAgIGNoaWxkMV9pbmRleCA9IHNlbGYubmIuaW5kZXgoc2VsZi5jaGlsZDEpCisgICAgICAgIHNlbGYubmIuZm9yZ2V0KHNlbGYuY2hpbGQxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cihzZWxmLmNoaWxkMSkgaW4gc2VsZi5uYi50YWJzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRhYnMpIC0gMSwgbGVuKHNlbGYubmIudGFicygpKSkKKworICAgICAgICBzZWxmLm5iLmFkZChzZWxmLmNoaWxkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLmluZGV4KHNlbGYuY2hpbGQxKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjaGlsZDFfaW5kZXggPT0gc2VsZi5uYi5pbmRleChzZWxmLmNoaWxkMSkpCisKKworICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmluZGV4LCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5pbmRleCwgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLm5iLmluZGV4KCdlbmQnKSwgaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLmluZGV4KHNlbGYuY2hpbGQxKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLmluZGV4KHNlbGYuY2hpbGQyKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLmluZGV4KCdlbmQnKSwgMikKKworCisgICAgZGVmIHRlc3RfaW5zZXJ0KHNlbGYpOgorICAgICAgICAjIG1vdmluZyB0YWJzCisgICAgICAgIHRhYnMgPSBzZWxmLm5iLnRhYnMoKQorICAgICAgICBzZWxmLm5iLmluc2VydCgxLCB0YWJzWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFicygpLCAodGFic1sxXSwgdGFic1swXSkpCisgICAgICAgIHNlbGYubmIuaW5zZXJ0KHNlbGYuY2hpbGQxLCBzZWxmLmNoaWxkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYnMoKSwgdGFicykKKyAgICAgICAgc2VsZi5uYi5pbnNlcnQoJ2VuZCcsIHNlbGYuY2hpbGQxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFicygpLCAodGFic1sxXSwgdGFic1swXSkpCisgICAgICAgIHNlbGYubmIuaW5zZXJ0KCdlbmQnLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFicygpLCB0YWJzKQorICAgICAgICAjIGJhZCBtb3ZlcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmluc2VydCwgMiwgdGFic1swXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5pbnNlcnQsIC0xLCB0YWJzWzBdKQorCisgICAgICAgICMgbmV3IHRhYgorICAgICAgICBjaGlsZDMgPSB0dGsuTGFiZWwoKQorICAgICAgICBzZWxmLm5iLmluc2VydCgxLCBjaGlsZDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWJzKCksICh0YWJzWzBdLCBzdHIoY2hpbGQzKSwgdGFic1sxXSkpCisgICAgICAgIHNlbGYubmIuZm9yZ2V0KGNoaWxkMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYnMoKSwgdGFicykKKyAgICAgICAgc2VsZi5uYi5pbnNlcnQoc2VsZi5jaGlsZDEsIGNoaWxkMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYnMoKSwgKHN0cihjaGlsZDMpLCApICsgdGFicykKKyAgICAgICAgc2VsZi5uYi5mb3JnZXQoY2hpbGQzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmluc2VydCwgMiwgY2hpbGQzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmluc2VydCwgLTEsIGNoaWxkMykKKworICAgICAgICAjIGJhZCBpbnNlcnRzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuaW5zZXJ0LCAnZW5kJywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5pbnNlcnQsIE5vbmUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuaW5zZXJ0LCBOb25lLCBOb25lKQorCisKKyAgICBkZWYgdGVzdF9zZWxlY3Qoc2VsZik6CisgICAgICAgIHNlbGYubmIucGFjaygpCisgICAgICAgIHNlbGYubmIud2FpdF92aXNpYmlsaXR5KCkKKworICAgICAgICBzdWNjZXNzID0gW10KKyAgICAgICAgdGFiX2NoYW5nZWQgPSBbXQorCisgICAgICAgIHNlbGYuY2hpbGQxLmJpbmQoJzxVbm1hcD4nLCBsYW1iZGEgZXZ0OiBzdWNjZXNzLmFwcGVuZChUcnVlKSkKKyAgICAgICAgc2VsZi5uYi5iaW5kKCc8PE5vdGVib29rVGFiQ2hhbmdlZD4+JywKKyAgICAgICAgICAgIGxhbWJkYSBldnQ6IHRhYl9jaGFuZ2VkLmFwcGVuZChUcnVlKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIuc2VsZWN0KCksIHN0cihzZWxmLmNoaWxkMSkpCisgICAgICAgIHNlbGYubmIuc2VsZWN0KHNlbGYuY2hpbGQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3VjY2VzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnNlbGVjdCgpLCBzdHIoc2VsZi5jaGlsZDIpKQorCisgICAgICAgIHNlbGYubmIudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhYl9jaGFuZ2VkKQorCisKKyAgICBkZWYgdGVzdF90YWIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIudGFiLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi50YWIsICdub3RhYicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIudGFiLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYubmIudGFiKHNlbGYuY2hpbGQxKSwgZGljdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWIoc2VsZi5jaGlsZDEsIHRleHQ9Tm9uZSksICdhJykKKyAgICAgICAgIyBuZXdlciBmb3JtIGZvciBxdWVyeWluZyBhIHNpbmdsZSBvcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYihzZWxmLmNoaWxkMSwgJ3RleHQnKSwgJ2EnKQorICAgICAgICBzZWxmLm5iLnRhYihzZWxmLmNoaWxkMSwgdGV4dD0nYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYihzZWxmLmNoaWxkMSwgdGV4dD1Ob25lKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWIoc2VsZi5jaGlsZDEsICd0ZXh0JyksICdhYmMnKQorCisKKyAgICBkZWYgdGVzdF90YWJzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLm5iLnRhYnMoKSksIDIpCisKKyAgICAgICAgc2VsZi5uYi5mb3JnZXQoc2VsZi5jaGlsZDEpCisgICAgICAgIHNlbGYubmIuZm9yZ2V0KHNlbGYuY2hpbGQyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWJzKCksICgpKQorCisKKyAgICBkZWYgdGVzdF90cmF2ZXJzYWwoc2VsZik6CisgICAgICAgIHNlbGYubmIucGFjaygpCisgICAgICAgIHNlbGYubmIud2FpdF92aXNpYmlsaXR5KCkKKworICAgICAgICBzZWxmLm5iLnNlbGVjdCgwKQorCisgICAgICAgIHN1cHBvcnQuc2ltdWxhdGVfbW91c2VfY2xpY2soc2VsZi5uYiwgNSwgNSkKKyAgICAgICAgc2VsZi5uYi5mb2N1c19mb3JjZSgpCisgICAgICAgIHNlbGYubmIuZXZlbnRfZ2VuZXJhdGUoJzxDb250cm9sLVRhYj4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIuc2VsZWN0KCksIHN0cihzZWxmLmNoaWxkMikpCisgICAgICAgIHNlbGYubmIuZm9jdXNfZm9yY2UoKQorICAgICAgICBzZWxmLm5iLmV2ZW50X2dlbmVyYXRlKCc8U2hpZnQtQ29udHJvbC1UYWI+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnNlbGVjdCgpLCBzdHIoc2VsZi5jaGlsZDEpKQorICAgICAgICBzZWxmLm5iLmZvY3VzX2ZvcmNlKCkKKyAgICAgICAgc2VsZi5uYi5ldmVudF9nZW5lcmF0ZSgnPFNoaWZ0LUNvbnRyb2wtVGFiPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi5zZWxlY3QoKSwgc3RyKHNlbGYuY2hpbGQyKSkKKworICAgICAgICBzZWxmLm5iLnRhYihzZWxmLmNoaWxkMSwgdGV4dD0nYScsIHVuZGVybGluZT0wKQorICAgICAgICBzZWxmLm5iLmVuYWJsZV90cmF2ZXJzYWwoKQorICAgICAgICBzZWxmLm5iLmZvY3VzX2ZvcmNlKCkKKyAgICAgICAgc3VwcG9ydC5zaW11bGF0ZV9tb3VzZV9jbGljayhzZWxmLm5iLCA1LCA1KQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICBzZWxmLm5iLmV2ZW50X2dlbmVyYXRlKCc8T3B0aW9uLWE+JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubmIuZXZlbnRfZ2VuZXJhdGUoJzxBbHQtYT4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIuc2VsZWN0KCksIHN0cihzZWxmLmNoaWxkMSkpCisKKworY2xhc3MgVHJlZXZpZXdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCisgICAgICAgIHNlbGYudHYgPSB0dGsuVHJlZXZpZXcocGFkZGluZz0wKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnR2LmRlc3Ryb3koKQorICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQorCisKKyAgICBkZWYgdGVzdF9iYm94KHNlbGYpOgorICAgICAgICBzZWxmLnR2LnBhY2soKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuYmJveCgnJyksICcnKQorICAgICAgICBzZWxmLnR2LndhaXRfdmlzaWJpbGl0eSgpCisgICAgICAgIHNlbGYudHYudXBkYXRlKCkKKworICAgICAgICBpdGVtX2lkID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnKQorICAgICAgICBjaGlsZHJlbiA9IHNlbGYudHYuZ2V0X2NoaWxkcmVuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoaWxkcmVuKQorCisgICAgICAgIGJib3ggPSBzZWxmLnR2LmJib3goY2hpbGRyZW5bMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJib3gpLCA0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiYm94LCB0dXBsZSkpCisgICAgICAgIGZvciBpdGVtIGluIGJib3g6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpdGVtLCBpbnQpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiSW52YWxpZCBib3VuZGluZyBib3g6ICVzIiAlIGJib3gpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIGNvbXBhcmUgd2lkdGggaW4gYmJveGVzCisgICAgICAgIHNlbGYudHZbJ2NvbHVtbnMnXSA9IFsndGVzdCddCisgICAgICAgIHNlbGYudHYuY29sdW1uKCd0ZXN0Jywgd2lkdGg9NTApCisgICAgICAgIGJib3hfY29sdW1uMCA9IHNlbGYudHYuYmJveChjaGlsZHJlblswXSwgMCkKKyAgICAgICAgcm9vdF93aWR0aCA9IHNlbGYudHYuY29sdW1uKCcjMCcsIHdpZHRoPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmJveF9jb2x1bW4wWzBdLCBiYm94WzBdICsgcm9vdF93aWR0aCkKKworICAgICAgICAjIHZlcmlmeSB0aGF0IGJib3ggb2YgYSBjbG9zZWQgaXRlbSBpcyB0aGUgZW1wdHkgc3RyaW5nCisgICAgICAgIGNoaWxkMSA9IHNlbGYudHYuaW5zZXJ0KGl0ZW1faWQsICdlbmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuYmJveChjaGlsZDEpLCAnJykKKworCisgICAgZGVmIHRlc3RfY2hpbGRyZW4oc2VsZik6CisgICAgICAgICMgbm8gY2hpbGRyZW4geWV0LCBzaG91bGQgZ2V0IGFuIGVtcHR5IHR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oKSwgKCkpCisKKyAgICAgICAgaXRlbV9pZCA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi50di5nZXRfY2hpbGRyZW4oKSwgdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKClbMF0sIGl0ZW1faWQpCisKKyAgICAgICAgIyBhZGQgaXRlbV9pZCBhbmQgY2hpbGQzIGFzIGNoaWxkcmVuIG9mIGNoaWxkMgorICAgICAgICBjaGlsZDIgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcpCisgICAgICAgIGNoaWxkMyA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJykKKyAgICAgICAgc2VsZi50di5zZXRfY2hpbGRyZW4oY2hpbGQyLCBpdGVtX2lkLCBjaGlsZDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oY2hpbGQyKSwgKGl0ZW1faWQsIGNoaWxkMykpCisKKyAgICAgICAgIyBjaGlsZDMgaGFzIGNoaWxkMiBhcyBwYXJlbnQsIHRodXMgdHJ5aW5nIHRvIHNldCBjaGlsZDIgYXMgYSBjaGlsZHJlbgorICAgICAgICAjIG9mIGNoaWxkMyBzaG91bGQgcmVzdWx0IGluIGFuIGVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsCisgICAgICAgICAgICBzZWxmLnR2LnNldF9jaGlsZHJlbiwgY2hpbGQzLCBjaGlsZDIpCisKKyAgICAgICAgIyByZW1vdmUgY2hpbGQyIGNoaWxkcmVuCisgICAgICAgIHNlbGYudHYuc2V0X2NoaWxkcmVuKGNoaWxkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmdldF9jaGlsZHJlbihjaGlsZDIpLCAoKSkKKworICAgICAgICAjIHJlbW92ZSByb290J3MgY2hpbGRyZW4KKyAgICAgICAgc2VsZi50di5zZXRfY2hpbGRyZW4oJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oKSwgKCkpCisKKworICAgIGRlZiB0ZXN0X2NvbHVtbihzZWxmKToKKyAgICAgICAgIyByZXR1cm4gYSBkaWN0IHdpdGggYWxsIG9wdGlvbnMvdmFsdWVzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYudHYuY29sdW1uKCcjMCcpLCBkaWN0KSkKKyAgICAgICAgIyByZXR1cm4gYSBzaW5nbGUgdmFsdWUgb2YgdGhlIGdpdmVuIG9wdGlvbgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLnR2LmNvbHVtbignIzAnLCB3aWR0aD1Ob25lKSwgaW50KSkKKyAgICAgICAgIyBzZXQgYSBuZXcgdmFsdWUgZm9yIGFuIG9wdGlvbgorICAgICAgICBzZWxmLnR2LmNvbHVtbignIzAnLCB3aWR0aD0xMCkKKyAgICAgICAgIyB0ZXN0aW5nIG5ldyB3YXkgdG8gZ2V0IG9wdGlvbiB2YWx1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuY29sdW1uKCcjMCcsICd3aWR0aCcpLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmNvbHVtbignIzAnLCB3aWR0aD1Ob25lKSwgMTApCisgICAgICAgICMgY2hlY2sgcmVhZC1vbmx5IG9wdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LmNvbHVtbiwgJyMwJywgaWQ9J1gnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuY29sdW1uLCAnaW52YWxpZCcpCisgICAgICAgIGludmFsaWRfa3dzID0gWworICAgICAgICAgICAgeyd1bmtub3duX29wdGlvbic6ICdzb21lIHZhbHVlJ30sICB7J3N0cmV0Y2gnOiAnd3JvbmcnfSwKKyAgICAgICAgICAgIHsnYW5jaG9yJzogJ3dyb25nJ30sIHsnd2lkdGgnOiAnd3JvbmcnfSwgeydtaW53aWR0aCc6ICd3cm9uZyd9CisgICAgICAgIF0KKyAgICAgICAgZm9yIGt3IGluIGludmFsaWRfa3dzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5jb2x1bW4sICcjMCcsCisgICAgICAgICAgICAgICAgKiprdykKKworCisgICAgZGVmIHRlc3RfZGVsZXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LmRlbGV0ZSwgJyMwJykKKworICAgICAgICBpdGVtX2lkID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnKQorICAgICAgICBpdGVtMiA9IHNlbGYudHYuaW5zZXJ0KGl0ZW1faWQsICdlbmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKCksIChpdGVtX2lkLCApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKGl0ZW1faWQpLCAoaXRlbTIsICkpCisKKyAgICAgICAgc2VsZi50di5kZWxldGUoaXRlbV9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnR2LmdldF9jaGlsZHJlbigpKQorCisgICAgICAgICMgcmVhdHRhY2ggc2hvdWxkIGZhaWwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwKKyAgICAgICAgICAgIHNlbGYudHYucmVhdHRhY2gsIGl0ZW1faWQsICcnLCAnZW5kJykKKworICAgICAgICAjIHRlc3QgbXVsdGlwbGUgaXRlbSBkZWxldGUKKyAgICAgICAgaXRlbTEgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcpCisgICAgICAgIGl0ZW0yID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKCksIChpdGVtMSwgaXRlbTIpKQorCisgICAgICAgIHNlbGYudHYuZGVsZXRlKGl0ZW0xLCBpdGVtMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnR2LmdldF9jaGlsZHJlbigpKQorCisKKyAgICBkZWYgdGVzdF9kZXRhY2hfcmVhdHRhY2goc2VsZik6CisgICAgICAgIGl0ZW1faWQgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcpCisgICAgICAgIGl0ZW0yID0gc2VsZi50di5pbnNlcnQoaXRlbV9pZCwgJ2VuZCcpCisKKyAgICAgICAgIyBjYWxsaW5nIGRldGFjaCB3aXRob3V0IGl0ZW1zIGlzIHZhbGlkLCBhbHRob3VnaCBpdCBkb2VzIG5vdGhpbmcKKyAgICAgICAgcHJldiA9IHNlbGYudHYuZ2V0X2NoaWxkcmVuKCkKKyAgICAgICAgc2VsZi50di5kZXRhY2goKSAjIHRoaXMgc2hvdWxkIGRvIG5vdGhpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcmV2LCBzZWxmLnR2LmdldF9jaGlsZHJlbigpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oKSwgKGl0ZW1faWQsICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oaXRlbV9pZCksIChpdGVtMiwgKSkKKworICAgICAgICAjIGRldGFjaCBpdGVtIHdpdGggY2hpbGRyZW4KKyAgICAgICAgc2VsZi50di5kZXRhY2goaXRlbV9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnR2LmdldF9jaGlsZHJlbigpKQorCisgICAgICAgICMgcmVhdHRhY2ggaXRlbSB3aXRoIGNoaWxkcmVuCisgICAgICAgIHNlbGYudHYucmVhdHRhY2goaXRlbV9pZCwgJycsICdlbmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKCksIChpdGVtX2lkLCApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKGl0ZW1faWQpLCAoaXRlbTIsICkpCisKKyAgICAgICAgIyBtb3ZlIGEgY2hpbGRyZW4gdG8gdGhlIHJvb3QKKyAgICAgICAgc2VsZi50di5tb3ZlKGl0ZW0yLCAnJywgJ2VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5nZXRfY2hpbGRyZW4oKSwgKGl0ZW1faWQsIGl0ZW0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmdldF9jaGlsZHJlbihpdGVtX2lkKSwgKCkpCisKKyAgICAgICAgIyBiYWQgdmFsdWVzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsCisgICAgICAgICAgICBzZWxmLnR2LnJlYXR0YWNoLCAnbm9uZXhpc3RlbnQnLCAnJywgJ2VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsCisgICAgICAgICAgICBzZWxmLnR2LmRldGFjaCwgJ25vbmV4aXN0ZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwKKyAgICAgICAgICAgIHNlbGYudHYucmVhdHRhY2gsIGl0ZW0yLCAnb3RoZXJwYXJlbnQnLCAnZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwKKyAgICAgICAgICAgIHNlbGYudHYucmVhdHRhY2gsIGl0ZW0yLCAnJywgJ2ludmFsaWQnKQorCisgICAgICAgICMgbXVsdGlwbGUgZGV0YWNoCisgICAgICAgIHNlbGYudHYuZGV0YWNoKGl0ZW1faWQsIGl0ZW0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKCksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZ2V0X2NoaWxkcmVuKGl0ZW1faWQpLCAoKSkKKworCisgICAgZGVmIHRlc3RfZXhpc3RzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZXhpc3RzKCdzb21ldGhpbmcnKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5leGlzdHMoJycpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZXhpc3RzKHt9KSwgRmFsc2UpCisKKyAgICAgICAgIyB0aGUgZm9sbG93aW5nIHdpbGwgbWFrZSBhIHRrLmNhbGwgZXF1aXZhbGVudCB0bworICAgICAgICAjIHRrLmNhbGwodHJlZXZpZXcsICJleGlzdHMiKSB3aGljaCBzaG91bGQgcmVzdWx0IGluIGFuIGVycm9yCisgICAgICAgICMgaW4gdGhlIHRjbCBpbnRlcnByZXRlciBzaW5jZSB0ayByZXF1aXJlcyBhbiBpdGVtLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LmV4aXN0cywgTm9uZSkKKworCisgICAgZGVmIHRlc3RfZm9jdXMoc2VsZik6CisgICAgICAgICMgbm90aGluZyBpcyBmb2N1c2VkIHJpZ2h0IG5vdworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuZm9jdXMoKSwgJycpCisKKyAgICAgICAgaXRlbTEgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcpCisgICAgICAgIHNlbGYudHYuZm9jdXMoaXRlbTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5mb2N1cygpLCBpdGVtMSkKKworICAgICAgICBzZWxmLnR2LmRlbGV0ZShpdGVtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LmZvY3VzKCksICcnKQorCisgICAgICAgICMgdHJ5IGZvY3VzaW5nIGluZXhpc3RlbnQgaXRlbQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LmZvY3VzLCAnaGknKQorCisKKyAgICBkZWYgdGVzdF9oZWFkaW5nKHNlbGYpOgorICAgICAgICAjIGNoZWNrIGEgZGljdCBpcyByZXR1cm5lZAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLnR2LmhlYWRpbmcoJyMwJyksIGRpY3QpKQorCisgICAgICAgICMgY2hlY2sgYSB2YWx1ZSBpcyByZXR1cm5lZAorICAgICAgICBzZWxmLnR2LmhlYWRpbmcoJyMwJywgdGV4dD0naGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaGVhZGluZygnIzAnLCAndGV4dCcpLCAnaGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaGVhZGluZygnIzAnLCB0ZXh0PU5vbmUpLCAnaGknKQorCisgICAgICAgICMgaW52YWxpZCBvcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5oZWFkaW5nLCAnIzAnLAorICAgICAgICAgICAgYmFja2dyb3VuZD1Ob25lKQorICAgICAgICAjIGludmFsaWQgdmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5oZWFkaW5nLCAnIzAnLAorICAgICAgICAgICAgYW5jaG9yPTEpCisKKyAgICAjIFhYWCBza2lwcGluZyBmb3Igbm93OyBzaG91bGQgYmUgZml4ZWQgdG8gd29yayB3aXRoIG5ld2VyIHR0aworICAgIEB1bml0dGVzdC5za2lwKCJza2lwcGluZyBwZW5kaW5nIHJlc29sdXRpb24gb2YgSXNzdWUgIzEwNzM0IikKKyAgICBkZWYgdGVzdF9oZWFkaW5nX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICBkZWYgc2ltdWxhdGVfaGVhZGluZ19jbGljayh4LCB5KToKKyAgICAgICAgICAgIHN1cHBvcnQuc2ltdWxhdGVfbW91c2VfY2xpY2soc2VsZi50diwgeCwgeSkKKyAgICAgICAgICAgIHNlbGYudHYudXBkYXRlX2lkbGV0YXNrcygpCisKKyAgICAgICAgc3VjY2VzcyA9IFtdICMgbm8gc3VjY2VzcyBmb3Igbm93CisKKyAgICAgICAgc2VsZi50di5wYWNrKCkKKyAgICAgICAgc2VsZi50di53YWl0X3Zpc2liaWxpdHkoKQorICAgICAgICBzZWxmLnR2LmhlYWRpbmcoJyMwJywgY29tbWFuZD1sYW1iZGE6IHN1Y2Nlc3MuYXBwZW5kKFRydWUpKQorICAgICAgICBzZWxmLnR2LmNvbHVtbignIzAnLCB3aWR0aD0xMDApCisgICAgICAgIHNlbGYudHYudXBkYXRlKCkKKworICAgICAgICAjIGFzc3VtaW5nIHRoYXQgdGhlIGNvb3JkcyAoNSwgNSkgZmFsbCBpbnRvIGhlYWRpbmcgIzAKKyAgICAgICAgc2ltdWxhdGVfaGVhZGluZ19jbGljayg1LCA1KQorICAgICAgICBpZiBub3Qgc3VjY2VzczoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGhlIGNvbW1hbmQgYXNzb2NpYXRlZCB0byB0aGUgdHJlZXZpZXcgaGVhZGluZyB3YXNuJ3QgIgorICAgICAgICAgICAgICAgICJpbnZva2VkLiIpCisKKyAgICAgICAgc3VjY2VzcyA9IFtdCisgICAgICAgIGNvbW1hbmRzID0gc2VsZi50di5tYXN0ZXIuX3RjbENvbW1hbmRzCisgICAgICAgIHNlbGYudHYuaGVhZGluZygnIzAnLCBjb21tYW5kPXN0cihzZWxmLnR2LmhlYWRpbmcoJyMwJywgY29tbWFuZD1Ob25lKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWFuZHMsIHNlbGYudHYubWFzdGVyLl90Y2xDb21tYW5kcykKKyAgICAgICAgc2ltdWxhdGVfaGVhZGluZ19jbGljayg1LCA1KQorICAgICAgICBpZiBub3Qgc3VjY2VzczoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGhlIGNvbW1hbmQgYXNzb2NpYXRlZCB0byB0aGUgdHJlZXZpZXcgaGVhZGluZyB3YXNuJ3QgIgorICAgICAgICAgICAgICAgICJpbnZva2VkLiIpCisKKyAgICAgICAgIyBYWFggVGhlIGZvbGxvd2luZyByYWlzZXMgYW4gZXJyb3IgaW4gYSB0Y2wgaW50ZXJwcmV0ZXIsIGJ1dCBub3QgaW4KKyAgICAgICAgIyBQeXRob24KKyAgICAgICAgI3NlbGYudHYuaGVhZGluZygnIzAnLCBjb21tYW5kPSdJIGRvbnQgZXhpc3QnKQorICAgICAgICAjc2ltdWxhdGVfaGVhZGluZ19jbGljayg1LCA1KQorCisKKyAgICBkZWYgdGVzdF9pbmRleChzZWxmKToKKyAgICAgICAgIyBpdGVtICd3aGF0JyBkb2Vzbid0IGV4aXN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuaW5kZXgsICd3aGF0JykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaW5kZXgoJycpLCAwKQorCisgICAgICAgIGl0ZW0xID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnKQorICAgICAgICBpdGVtMiA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJykKKyAgICAgICAgYzEgPSBzZWxmLnR2Lmluc2VydChpdGVtMSwgJ2VuZCcpCisgICAgICAgIGMyID0gc2VsZi50di5pbnNlcnQoaXRlbTEsICdlbmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaW5kZXgoaXRlbTEpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaW5kZXgoYzEpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaW5kZXgoYzIpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaW5kZXgoaXRlbTIpLCAxKQorCisgICAgICAgIHNlbGYudHYubW92ZShpdGVtMiwgJycsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pbmRleChpdGVtMiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pbmRleChpdGVtMSksIDEpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IGluZGV4IHN0aWxsIHdvcmtzIGV2ZW4gYWZ0ZXIgaXRzIHBhcmVudCBhbmQgc2libGluZ3MKKyAgICAgICAgIyBoYXZlIGJlZW4gZGV0YWNoZWQKKyAgICAgICAgc2VsZi50di5kZXRhY2goaXRlbTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pbmRleChjMiksIDEpCisgICAgICAgIHNlbGYudHYuZGV0YWNoKGMxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaW5kZXgoYzIpLCAwKQorCisgICAgICAgICMgYnV0IGl0IGZhaWxzIGFmdGVyIGl0ZW0gaGFzIGJlZW4gZGVsZXRlZAorICAgICAgICBzZWxmLnR2LmRlbGV0ZShpdGVtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5pbmRleCwgYzIpCisKKworICAgIGRlZiB0ZXN0X2luc2VydF9pdGVtKHNlbGYpOgorICAgICAgICAjIHBhcmVudCAnbm9uZScgZG9lc24ndCBleGlzdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2Lmluc2VydCwgJ25vbmUnLCAnZW5kJykKKworICAgICAgICAjIG9wZW4gdmFsdWVzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuaW5zZXJ0LCAnJywgJ2VuZCcsCisgICAgICAgICAgICBvcGVuPScnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2Lmluc2VydCwgJycsICdlbmQnLAorICAgICAgICAgICAgb3Blbj0ncGxlYXNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnR2LmRlbGV0ZShzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIG9wZW49VHJ1ZSkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYudHYuZGVsZXRlKHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJywgb3Blbj1GYWxzZSkpKQorCisgICAgICAgICMgaW52YWxpZCBpbmRleAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2Lmluc2VydCwgJycsICdtaWRkbGUnKQorCisgICAgICAgICMgdHJ5aW5nIHRvIGR1cGxpY2F0ZSBpdGVtIGlkIGlzIGludmFsaWQKKyAgICAgICAgaXRlbWlkID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnLCAnZmlyc3QtaXRlbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbWlkLCAnZmlyc3QtaXRlbScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuaW5zZXJ0LCAnJywgJ2VuZCcsCisgICAgICAgICAgICAnZmlyc3QtaXRlbScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuaW5zZXJ0LCAnJywgJ2VuZCcsCisgICAgICAgICAgICBNb2NrVGNsT2JqKCdmaXJzdC1pdGVtJykpCisKKyAgICAgICAgIyB1bmljb2RlIHZhbHVlcworICAgICAgICB2YWx1ZSA9IHUnXHhlMWJhJworICAgICAgICBpdGVtID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnLCB2YWx1ZXM9KHZhbHVlLCApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaXRlbShpdGVtLCAndmFsdWVzJyksICh2YWx1ZSwgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2Lml0ZW0oaXRlbSwgdmFsdWVzPU5vbmUpLCAodmFsdWUsICkpCisKKyAgICAgICAgc2VsZi50di5pdGVtKGl0ZW0sIHZhbHVlcz1saXN0KHNlbGYudHYuaXRlbShpdGVtLCB2YWx1ZXM9Tm9uZSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaXRlbShpdGVtLCB2YWx1ZXM9Tm9uZSksICh2YWx1ZSwgKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLnR2Lml0ZW0oaXRlbSksIGRpY3QpKQorCisgICAgICAgICMgZXJhc2UgaXRlbSB2YWx1ZXMKKyAgICAgICAgc2VsZi50di5pdGVtKGl0ZW0sIHZhbHVlcz0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnR2Lml0ZW0oaXRlbSwgdmFsdWVzPU5vbmUpKQorCisgICAgICAgICMgaXRlbSB0YWdzCisgICAgICAgIGl0ZW0gPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIHRhZ3M9WzEsIDIsIHZhbHVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2Lml0ZW0oaXRlbSwgdGFncz1Ob25lKSwgKCcxJywgJzInLCB2YWx1ZSkpCisgICAgICAgIHNlbGYudHYuaXRlbShpdGVtLCB0YWdzPVtdKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYudHYuaXRlbShpdGVtLCB0YWdzPU5vbmUpKQorICAgICAgICBzZWxmLnR2Lml0ZW0oaXRlbSwgdGFncz0oMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pdGVtKGl0ZW0sIHRhZ3M9Tm9uZSksICgnMScsICcyJykpCisKKyAgICAgICAgIyB2YWx1ZXMgd2l0aCBzcGFjZXMKKyAgICAgICAgaXRlbSA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJywgdmFsdWVzPSgnYSBiIGMnLAorICAgICAgICAgICAgJyVzICVzJyAlICh2YWx1ZSwgdmFsdWUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2Lml0ZW0oaXRlbSwgdmFsdWVzPU5vbmUpLAorICAgICAgICAgICAgKCdhIGIgYycsICclcyAlcycgJSAodmFsdWUsIHZhbHVlKSkpCisKKyAgICAgICAgIyB0ZXh0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pdGVtKAorICAgICAgICAgICAgc2VsZi50di5pbnNlcnQoJycsICdlbmQnLCB0ZXh0PSJMYWJlbCBoZXJlIiksIHRleHQ9Tm9uZSksCisgICAgICAgICAgICAiTGFiZWwgaGVyZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5pdGVtKAorICAgICAgICAgICAgc2VsZi50di5pbnNlcnQoJycsICdlbmQnLCB0ZXh0PXZhbHVlKSwgdGV4dD1Ob25lKSwKKyAgICAgICAgICAgIHZhbHVlKQorCisKKyAgICBkZWYgdGVzdF9zZXQoc2VsZik6CisgICAgICAgIHNlbGYudHZbJ2NvbHVtbnMnXSA9IFsnQScsICdCJ10KKyAgICAgICAgaXRlbSA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJywgdmFsdWVzPVsnYScsICdiJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5zZXQoaXRlbSksIHsnQSc6ICdhJywgJ0InOiAnYid9KQorCisgICAgICAgIHNlbGYudHYuc2V0KGl0ZW0sICdCJywgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaXRlbShpdGVtLCB2YWx1ZXM9Tm9uZSksICgnYScsICdhJykpCisKKyAgICAgICAgc2VsZi50dlsnY29sdW1ucyddID0gWydCJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNldChpdGVtKSwgeydCJzogJ2EnfSkKKworICAgICAgICBzZWxmLnR2LnNldChpdGVtLCAnQicsICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNldChpdGVtLCBjb2x1bW49J0InKSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaXRlbShpdGVtLCB2YWx1ZXM9Tm9uZSksICgnYicsICdhJykpCisKKyAgICAgICAgc2VsZi50di5zZXQoaXRlbSwgJ0InLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5zZXQoaXRlbSwgJ0InKSwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuaXRlbShpdGVtLCB2YWx1ZXM9Tm9uZSksICgxMjMsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5zZXQoaXRlbSksIHsnQic6IDEyM30pCisKKyAgICAgICAgIyBpbmV4aXN0ZW50IGNvbHVtbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LnNldCwgaXRlbSwgJ0EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUa2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LnNldCwgaXRlbSwgJ0EnLCAnYicpCisKKyAgICAgICAgIyBpbmV4aXN0ZW50IGl0ZW0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5zZXQsICdub3RtZScpCisKKworICAgIGRlZiB0ZXN0X3RhZ19iaW5kKHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICBpdGVtMSA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJywgdGFncz1bJ2NhbGwnXSkKKyAgICAgICAgaXRlbTIgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIHRhZ3M9WydjYWxsJ10pCisgICAgICAgIHNlbGYudHYudGFnX2JpbmQoJ2NhbGwnLCAnPEJ1dHRvblByZXNzLTE+JywKKyAgICAgICAgICAgIGxhbWJkYSBldnQ6IGV2ZW50cy5hcHBlbmQoMSkpCisgICAgICAgIHNlbGYudHYudGFnX2JpbmQoJ2NhbGwnLCAnPEJ1dHRvblJlbGVhc2UtMT4nLAorICAgICAgICAgICAgbGFtYmRhIGV2dDogZXZlbnRzLmFwcGVuZCgyKSkKKworICAgICAgICBzZWxmLnR2LnBhY2soKQorICAgICAgICBzZWxmLnR2LndhaXRfdmlzaWJpbGl0eSgpCisgICAgICAgIHNlbGYudHYudXBkYXRlKCkKKworICAgICAgICBwb3NfeSA9IHNldCgpCisgICAgICAgIGZvdW5kID0gc2V0KCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgMTAwLCAxMCk6CisgICAgICAgICAgICBpZiBsZW4oZm91bmQpID09IDI6ICMgaXRlbTEgYW5kIGl0ZW0yIGFscmVhZHkgZm91bmQKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaXRlbV9pZCA9IHNlbGYudHYuaWRlbnRpZnlfcm93KGkpCisgICAgICAgICAgICBpZiBpdGVtX2lkIGFuZCBpdGVtX2lkIG5vdCBpbiBmb3VuZDoKKyAgICAgICAgICAgICAgICBwb3NfeS5hZGQoaSkKKyAgICAgICAgICAgICAgICBmb3VuZC5hZGQoaXRlbV9pZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwb3NfeSksIDIpICMgaXRlbTEgYW5kIGl0ZW0yIHkgcG9zCisgICAgICAgIGZvciB5IGluIHBvc195OgorICAgICAgICAgICAgc3VwcG9ydC5zaW11bGF0ZV9tb3VzZV9jbGljayhzZWxmLnR2LCAwLCB5KQorCisgICAgICAgICMgYnkgbm93IHRoZXJlIHNob3VsZCBiZSA0IHRoaW5ncyBpbiB0aGUgZXZlbnRzIGxpc3QsIHNpbmNlIGVhY2gKKyAgICAgICAgIyBpdGVtIGhhZCBhIGJpbmQgZm9yIHR3byBldmVudHMgdGhhdCB3ZXJlIHNpbXVsYXRlZCBhYm92ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihldmVudHMpLCA0KQorICAgICAgICBmb3IgZXZ0IGluIHppcChldmVudHNbOjoyXSwgZXZlbnRzWzE6OjJdKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZ0LCAoMSwgMikpCisKKworICAgIGRlZiB0ZXN0X3RhZ19jb25maWd1cmUoc2VsZik6CisgICAgICAgICMgSnVzdCB0ZXN0aW5nIHBhcmFtZXRlciBwYXNzaW5nIGZvciBub3cKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR2LnRhZ19jb25maWd1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYudGFnX2NvbmZpZ3VyZSwKKyAgICAgICAgICAgICd0ZXN0Jywgc2t5PSdibHVlJykKKyAgICAgICAgc2VsZi50di50YWdfY29uZmlndXJlKCd0ZXN0JywgZm9yZWdyb3VuZD0nYmx1ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNlbGYudHYudGFnX2NvbmZpZ3VyZSgndGVzdCcsICdmb3JlZ3JvdW5kJykpLAorICAgICAgICAgICAgJ2JsdWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLnR2LnRhZ19jb25maWd1cmUoJ3Rlc3QnLCBmb3JlZ3JvdW5kPU5vbmUpKSwKKyAgICAgICAgICAgICdibHVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi50di50YWdfY29uZmlndXJlKCd0ZXN0JyksIGRpY3QpKQorCisKK3Rlc3RzX2d1aSA9ICgKKyAgICAgICAgV2lkZ2V0VGVzdCwgQnV0dG9uVGVzdCwgQ2hlY2tidXR0b25UZXN0LCBSYWRpb2J1dHRvblRlc3QsCisgICAgICAgIENvbWJvYm94VGVzdCwgRW50cnlUZXN0LCBQYW5lZHdpbmRvd1Rlc3QsIFNjYWxlVGVzdCwgTm90ZWJvb2tUZXN0LAorICAgICAgICBUcmVldmlld1Rlc3QKKyAgICAgICAgKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHJ1bl91bml0dGVzdCgqdGVzdHNfZ3VpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWIydG8zL0dyYW1tYXIyLjcuNS5maW5hbC4wLnBpY2tsZSBiL2xpYi9weXRob24yLjcvbGliMnRvMy9HcmFtbWFyMi43LjUuZmluYWwuMC5waWNrbGUKaW5kZXggZDA4YWY2NS4uYjlmYzVhZSAxMDA2NDQKLS0tIGEvbGliL3B5dGhvbjIuNy9saWIydG8zL0dyYW1tYXIyLjcuNS5maW5hbC4wLnBpY2tsZQorKysgYi9saWIvcHl0aG9uMi43L2xpYjJ0bzMvR3JhbW1hcjIuNy41LmZpbmFsLjAucGlja2xlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliMnRvMy9QYXR0ZXJuR3JhbW1hcjIuNy41LmZpbmFsLjAucGlja2xlIGIvbGliL3B5dGhvbjIuNy9saWIydG8zL1BhdHRlcm5HcmFtbWFyMi43LjUuZmluYWwuMC5waWNrbGUKaW5kZXggMmM4NjY3NS4uZGQ3ODNiMSAxMDA2NDQKLS0tIGEvbGliL3B5dGhvbjIuNy9saWIydG8zL1BhdHRlcm5HcmFtbWFyMi43LjUuZmluYWwuMC5waWNrbGUKKysrIGIvbGliL3B5dGhvbjIuNy9saWIydG8zL1BhdHRlcm5HcmFtbWFyMi43LjUuZmluYWwuMC5waWNrbGUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL19faW5pdF9fLnB5IGIvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmFlYTBkLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSIiIk1ha2UgdGVzdHMvIGludG8gYSBwYWNrYWdlLiBUaGlzIGFsbG93cyB1cyB0byAiaW1wb3J0IHRlc3RzIiBhbmQKLWhhdmUgdGVzdHMuYWxsX3Rlc3RzIGJlIGEgVGVzdFN1aXRlIHJlcHJlc2VudGluZyBhbGwgdGVzdCBjYXNlcwotZnJvbSBhbGwgdGVzdF8qLnB5IGZpbGVzIGluIHRlc3RzLy4iIiIKLSMgQXV0aG9yOiBDb2xsaW4gV2ludGVyCi0KLWltcG9ydCBvcwotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IHR5cGVzCi0KLWZyb20gLiBpbXBvcnQgc3VwcG9ydAotCi1hbGxfdGVzdHMgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotCi10ZXN0c19kaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJ3Rlc3RzJykKLXRlc3RzID0gW3RbMDotM10gZm9yIHQgaW4gb3MubGlzdGRpcih0ZXN0c19kaXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0LnN0YXJ0c3dpdGgoJ3Rlc3RfJykgYW5kIHQuZW5kc3dpdGgoJy5weScpXQotCi1sb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotZm9yIHQgaW4gdGVzdHM6Ci0gICAgX19pbXBvcnRfXygiIixnbG9iYWxzKCksbG9jYWxzKCksW3RdLGxldmVsPTEpCi0gICAgbW9kID0gZ2xvYmFscygpW3RdCi0gICAgYWxsX3Rlc3RzLmFkZFRlc3RzKGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG1vZCkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvZGF0YS9SRUFETUUgYi9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvZGF0YS9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhYTQ3ZTQuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1JbiB0aGlzIGRpcmVjdG9yeToKLS0gcHkyX3Rlc3RfZ3JhbW1hci5weSAtLSB0ZXN0IGZpbGUgdGhhdCBleGVyY2lzZXMgbW9zdC9hbGwgb2YgUHl0aG9uIDIueCdzIGdyYW1tYXIuCi0tIHB5M190ZXN0X2dyYW1tYXIucHkgLS0gdGVzdCBmaWxlIHRoYXQgZXhlcmNpc2VzIG1vc3QvYWxsIG9mIFB5dGhvbiAzLngncyBncmFtbWFyLgotLSBpbmZpbml0ZV9yZWN1cnNpb24ucHkgLS0gdGVzdCBmaWxlIHRoYXQgY2F1c2VzIGxpYjJ0bzMncyBmYXN0ZXIgcmVjdXJzaXZlIHBhdHRlcm4gbWF0Y2hpbmcKLSAgc2NoZW1lIHRvIGZhaWwsIGJ1dCBwYXNzZXMgd2hlbiBsaWIydG8zIGZhbGxzIGJhY2sgdG8gaXRlcmF0aXZlIHBhdHRlcm4gbWF0Y2hpbmcuCi0tIGZpeGVzLyAtLSBmb3IgdXNlIGJ5IHRlc3RfcmVmYWN0b3IucHkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2JvbS5weSBiL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2JvbS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJjMzk3NS4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvZGF0YS9ib20ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLe+7vyMgY29kaW5nOiB1dGYtOAotcHJpbnQgIkJPTSBCT09NISIKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2NybGYucHkgYi9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvZGF0YS9jcmxmLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmUyZDdiLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2NybGYucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLXByaW50ICJoaSIKLQotcHJpbnQgIkxpa2UgYmFkIFdpbmRvd3MgbmV3bGluZXM/IgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZGlmZmVyZW50X2VuY29kaW5nLnB5IGIvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZGlmZmVyZW50X2VuY29kaW5nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjMyYmQwLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2RpZmZlcmVudF9lbmNvZGluZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQotcHJpbnQgdSfDn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDuMO5w7rDu8O8w73DvsO/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOYw5nDmsObw5zDncOeJwotCi1kZWYgZih4KToKLSAgICBwcmludCAnJXNcdC0+ICDOsSglMmkpOiVzICDOsiglcyknCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvZGF0YS9maXhlcnMvYmFkX29yZGVyLnB5IGIvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL2JhZF9vcmRlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYxYmJmMi4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvZGF0YS9maXhlcnMvYmFkX29yZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1mcm9tIGxpYjJ0bzMuZml4ZXJfYmFzZSBpbXBvcnQgQmFzZUZpeAotCi1jbGFzcyBGaXhCYWRPcmRlcihCYXNlRml4KToKLQotICAgIG9yZGVyID0gImNyYXp5IgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL215Zml4ZXMvZml4X2V4cGxpY2l0LnB5IGIvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL215Zml4ZXMvZml4X2V4cGxpY2l0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmUxNmY2Li4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2ZpeGVycy9teWZpeGVzL2ZpeF9leHBsaWNpdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotZnJvbSBsaWIydG8zLmZpeGVyX2Jhc2UgaW1wb3J0IEJhc2VGaXgKLQotY2xhc3MgRml4RXhwbGljaXQoQmFzZUZpeCk6Ci0gICAgZXhwbGljaXQgPSBUcnVlCi0KLSAgICBkZWYgbWF0Y2goc2VsZik6IHJldHVybiBGYWxzZQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL215Zml4ZXMvZml4X2ZpcnN0LnB5IGIvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL215Zml4ZXMvZml4X2ZpcnN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODg4MjFmLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2ZpeGVycy9teWZpeGVzL2ZpeF9maXJzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotZnJvbSBsaWIydG8zLmZpeGVyX2Jhc2UgaW1wb3J0IEJhc2VGaXgKLQotY2xhc3MgRml4Rmlyc3QoQmFzZUZpeCk6Ci0gICAgcnVuX29yZGVyID0gMQotCi0gICAgZGVmIG1hdGNoKHNlbGYsIG5vZGUpOiByZXR1cm4gRmFsc2UKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2ZpeGVycy9teWZpeGVzL2ZpeF9sYXN0LnB5IGIvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL215Zml4ZXMvZml4X2xhc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMDc3ZDQuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL215Zml4ZXMvZml4X2xhc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWZyb20gbGliMnRvMy5maXhlcl9iYXNlIGltcG9ydCBCYXNlRml4Ci0KLWNsYXNzIEZpeExhc3QoQmFzZUZpeCk6Ci0KLSAgICBydW5fb3JkZXIgPSAxMAotCi0gICAgZGVmIG1hdGNoKHNlbGYsIG5vZGUpOiByZXR1cm4gRmFsc2UKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2ZpeGVycy9teWZpeGVzL2ZpeF9wYXJyb3QucHkgYi9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvZGF0YS9maXhlcnMvbXlmaXhlcy9maXhfcGFycm90LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGI3OWFkLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2ZpeGVycy9teWZpeGVzL2ZpeF9wYXJyb3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1mcm9tIGxpYjJ0bzMuZml4ZXJfYmFzZSBpbXBvcnQgQmFzZUZpeAotZnJvbSBsaWIydG8zLmZpeGVyX3V0aWwgaW1wb3J0IE5hbWUKLQotY2xhc3MgRml4UGFycm90KEJhc2VGaXgpOgotICAgICIiIgotICAgIENoYW5nZSBmdW5jdGlvbnMgbmFtZWQgJ3BhcnJvdCcgdG8gJ2NoZWVzZScuCi0gICAgIiIiCi0KLSAgICBQQVRURVJOID0gIiIiZnVuY2RlZiA8ICdkZWYnIG5hbWU9J3BhcnJvdCcgYW55KiA+IiIiCi0KLSAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgotICAgICAgICBuYW1lID0gcmVzdWx0c1sibmFtZSJdCi0gICAgICAgIG5hbWUucmVwbGFjZShOYW1lKCJjaGVlc2UiLCBuYW1lLnByZWZpeCkpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvZGF0YS9maXhlcnMvbXlmaXhlcy9maXhfcHJlb3JkZXIucHkgYi9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvZGF0YS9maXhlcnMvbXlmaXhlcy9maXhfcHJlb3JkZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YmZiYmEuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL215Zml4ZXMvZml4X3ByZW9yZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1mcm9tIGxpYjJ0bzMuZml4ZXJfYmFzZSBpbXBvcnQgQmFzZUZpeAotCi1jbGFzcyBGaXhQcmVvcmRlcihCYXNlRml4KToKLSAgICBvcmRlciA9ICJwcmUiCi0KLSAgICBkZWYgbWF0Y2goc2VsZiwgbm9kZSk6IHJldHVybiBGYWxzZQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL25vX2ZpeGVyX2Nscy5weSBiL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2ZpeGVycy9ub19maXhlcl9jbHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNmY3OTQuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL25vX2ZpeGVyX2Nscy5weQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSMgVGhpcyBpcyBlbXB0eSBzbyB0cnlpbmcgdG8gZmV0Y2ggdGhlIGZpeGVyIGNsYXNzIGdpdmVzIGFuIEF0dHJpYnV0ZUVycm9yCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvZGF0YS9maXhlcnMvcGFycm90X2V4YW1wbGUucHkgYi9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvZGF0YS9maXhlcnMvcGFycm90X2V4YW1wbGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NTI5MjguLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL3BhcnJvdF9leGFtcGxlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1kZWYgcGFycm90KCk6Ci0gICAgcGFzcwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvaW5maW5pdGVfcmVjdXJzaW9uLnB5IGIvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvaW5maW5pdGVfcmVjdXJzaW9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTcxNWVmLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2luZmluaXRlX3JlY3Vyc2lvbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2NjkgKzAsMCBAQAotIyBUaGlzIGZpbGUgaXMgdXNlZCB0byB2ZXJpZnkgdGhhdCAydG8zIGZhbGxzIGJhY2sgdG8gYSBzbG93ZXIsIGl0ZXJhdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nCi0jIHNjaGVtZSBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgZmFzdGVyIHJlY3Vyc2l2ZSBzeXN0ZW0gZmFpbHMgZHVlIHRvIGluZmluaXRlIHJlY3Vyc2lvbi4KLWZyb20gY3R5cGVzIGltcG9ydCAqCi1TVFJJTkcgPSBjX2NoYXJfcAotCi0KLU9TVW5rbm93bkJ5dGVPcmRlciA9IDAKLVVJVF9QUk9NUFQgPSAxCi1QX1BHSUQgPSAyCi1QX1BJRCA9IDEKLVVJVF9FUlJPUiA9IDUKLVVJVF9JTkZPID0gNAotVUlUX05PTkUgPSAwCi1QX0FMTCA9IDAKLVVJVF9WRVJJRlkgPSAyCi1PU0JpZ0VuZGlhbiA9IDIKLVVJVF9CT09MRUFOID0gMwotT1NMaXR0bGVFbmRpYW4gPSAxCi1fX2Rhcndpbl9ubF9pdGVtID0gY19pbnQKLV9fZGFyd2luX3djdHJhbnNfdCA9IGNfaW50Ci1fX2Rhcndpbl93Y3R5cGVfdCA9IGNfdWxvbmcKLV9faW50OF90ID0gY19ieXRlCi1fX3VpbnQ4X3QgPSBjX3VieXRlCi1fX2ludDE2X3QgPSBjX3Nob3J0Ci1fX3VpbnQxNl90ID0gY191c2hvcnQKLV9faW50MzJfdCA9IGNfaW50Ci1fX3VpbnQzMl90ID0gY191aW50Ci1fX2ludDY0X3QgPSBjX2xvbmdsb25nCi1fX3VpbnQ2NF90ID0gY191bG9uZ2xvbmcKLV9fZGFyd2luX2ludHB0cl90ID0gY19sb25nCi1fX2Rhcndpbl9uYXR1cmFsX3QgPSBjX3VpbnQKLV9fZGFyd2luX2N0X3J1bmVfdCA9IGNfaW50Ci1jbGFzcyBfX21ic3RhdGVfdChVbmlvbik6Ci0gICAgcGFzcwotX19tYnN0YXRlX3QuX3BhY2tfID0gNAotX19tYnN0YXRlX3QuX2ZpZWxkc18gPSBbCi0gICAgKCdfX21ic3RhdGU4JywgY19jaGFyICogMTI4KSwKLSAgICAoJ19tYnN0YXRlTCcsIGNfbG9uZ2xvbmcpLAotXQotYXNzZXJ0IHNpemVvZihfX21ic3RhdGVfdCkgPT0gMTI4LCBzaXplb2YoX19tYnN0YXRlX3QpCi1hc3NlcnQgYWxpZ25tZW50KF9fbWJzdGF0ZV90KSA9PSA0LCBhbGlnbm1lbnQoX19tYnN0YXRlX3QpCi1fX2Rhcndpbl9tYnN0YXRlX3QgPSBfX21ic3RhdGVfdAotX19kYXJ3aW5fcHRyZGlmZl90ID0gY19pbnQKLV9fZGFyd2luX3NpemVfdCA9IGNfdWxvbmcKLV9fZGFyd2luX3ZhX2xpc3QgPSBTVFJJTkcKLV9fZGFyd2luX3djaGFyX3QgPSBjX2ludAotX19kYXJ3aW5fcnVuZV90ID0gX19kYXJ3aW5fd2NoYXJfdAotX19kYXJ3aW5fd2ludF90ID0gY19pbnQKLV9fZGFyd2luX2Nsb2NrX3QgPSBjX3Vsb25nCi1fX2Rhcndpbl9zb2NrbGVuX3QgPSBfX3VpbnQzMl90Ci1fX2Rhcndpbl9zc2l6ZV90ID0gY19sb25nCi1fX2Rhcndpbl90aW1lX3QgPSBjX2xvbmcKLXNpZ19hdG9taWNfdCA9IGNfaW50Ci1jbGFzcyBzaWdjb250ZXh0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotc2lnY29udGV4dC5fZmllbGRzXyA9IFsKLSAgICAoJ3NjX29uc3RhY2snLCBjX2ludCksCi0gICAgKCdzY19tYXNrJywgY19pbnQpLAotICAgICgnc2NfZWF4JywgY191aW50KSwKLSAgICAoJ3NjX2VieCcsIGNfdWludCksCi0gICAgKCdzY19lY3gnLCBjX3VpbnQpLAotICAgICgnc2NfZWR4JywgY191aW50KSwKLSAgICAoJ3NjX2VkaScsIGNfdWludCksCi0gICAgKCdzY19lc2knLCBjX3VpbnQpLAotICAgICgnc2NfZWJwJywgY191aW50KSwKLSAgICAoJ3NjX2VzcCcsIGNfdWludCksCi0gICAgKCdzY19zcycsIGNfdWludCksCi0gICAgKCdzY19lZmxhZ3MnLCBjX3VpbnQpLAotICAgICgnc2NfZWlwJywgY191aW50KSwKLSAgICAoJ3NjX2NzJywgY191aW50KSwKLSAgICAoJ3NjX2RzJywgY191aW50KSwKLSAgICAoJ3NjX2VzJywgY191aW50KSwKLSAgICAoJ3NjX2ZzJywgY191aW50KSwKLSAgICAoJ3NjX2dzJywgY191aW50KSwKLV0KLWFzc2VydCBzaXplb2Yoc2lnY29udGV4dCkgPT0gNzIsIHNpemVvZihzaWdjb250ZXh0KQotYXNzZXJ0IGFsaWdubWVudChzaWdjb250ZXh0KSA9PSA0LCBhbGlnbm1lbnQoc2lnY29udGV4dCkKLXVfaW50OF90ID0gY191Ynl0ZQotdV9pbnQxNl90ID0gY191c2hvcnQKLXVfaW50MzJfdCA9IGNfdWludAotdV9pbnQ2NF90ID0gY191bG9uZ2xvbmcKLWludDMyX3QgPSBjX2ludAotcmVnaXN0ZXJfdCA9IGludDMyX3QKLXVzZXJfYWRkcl90ID0gdV9pbnQ2NF90Ci11c2VyX3NpemVfdCA9IHVfaW50NjRfdAotaW50NjRfdCA9IGNfbG9uZ2xvbmcKLXVzZXJfc3NpemVfdCA9IGludDY0X3QKLXVzZXJfbG9uZ190ID0gaW50NjRfdAotdXNlcl91bG9uZ190ID0gdV9pbnQ2NF90Ci11c2VyX3RpbWVfdCA9IGludDY0X3QKLXN5c2NhbGxfYXJnX3QgPSB1X2ludDY0X3QKLQotIyB2YWx1ZXMgZm9yIHVubmFtZWQgZW51bWVyYXRpb24KLWNsYXNzIGFlc19rZXlfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1hZXNfa2V5X3N0Ll9maWVsZHNfID0gWwotICAgICgncmRfa2V5JywgY191bG9uZyAqIDYwKSwKLSAgICAoJ3JvdW5kcycsIGNfaW50KSwKLV0KLWFzc2VydCBzaXplb2YoYWVzX2tleV9zdCkgPT0gMjQ0LCBzaXplb2YoYWVzX2tleV9zdCkKLWFzc2VydCBhbGlnbm1lbnQoYWVzX2tleV9zdCkgPT0gNCwgYWxpZ25tZW50KGFlc19rZXlfc3QpCi1BRVNfS0VZID0gYWVzX2tleV9zdAotY2xhc3MgYXNuMV9jdHhfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1hc24xX2N0eF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ3AnLCBQT0lOVEVSKGNfdWJ5dGUpKSwKLSAgICAoJ2VvcycsIGNfaW50KSwKLSAgICAoJ2Vycm9yJywgY19pbnQpLAotICAgICgnaW5mJywgY19pbnQpLAotICAgICgndGFnJywgY19pbnQpLAotICAgICgneGNsYXNzJywgY19pbnQpLAotICAgICgnc2xlbicsIGNfbG9uZyksCi0gICAgKCdtYXgnLCBQT0lOVEVSKGNfdWJ5dGUpKSwKLSAgICAoJ3EnLCBQT0lOVEVSKGNfdWJ5dGUpKSwKLSAgICAoJ3BwJywgUE9JTlRFUihQT0lOVEVSKGNfdWJ5dGUpKSksCi0gICAgKCdsaW5lJywgY19pbnQpLAotXQotYXNzZXJ0IHNpemVvZihhc24xX2N0eF9zdCkgPT0gNDQsIHNpemVvZihhc24xX2N0eF9zdCkKLWFzc2VydCBhbGlnbm1lbnQoYXNuMV9jdHhfc3QpID09IDQsIGFsaWdubWVudChhc24xX2N0eF9zdCkKLUFTTjFfQ1RYID0gYXNuMV9jdHhfc3QKLWNsYXNzIGFzbjFfb2JqZWN0X3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotYXNuMV9vYmplY3Rfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdzbicsIFNUUklORyksCi0gICAgKCdsbicsIFNUUklORyksCi0gICAgKCduaWQnLCBjX2ludCksCi0gICAgKCdsZW5ndGgnLCBjX2ludCksCi0gICAgKCdkYXRhJywgUE9JTlRFUihjX3VieXRlKSksCi0gICAgKCdmbGFncycsIGNfaW50KSwKLV0KLWFzc2VydCBzaXplb2YoYXNuMV9vYmplY3Rfc3QpID09IDI0LCBzaXplb2YoYXNuMV9vYmplY3Rfc3QpCi1hc3NlcnQgYWxpZ25tZW50KGFzbjFfb2JqZWN0X3N0KSA9PSA0LCBhbGlnbm1lbnQoYXNuMV9vYmplY3Rfc3QpCi1BU04xX09CSkVDVCA9IGFzbjFfb2JqZWN0X3N0Ci1jbGFzcyBhc24xX3N0cmluZ19zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLWFzbjFfc3RyaW5nX3N0Ll9maWVsZHNfID0gWwotICAgICgnbGVuZ3RoJywgY19pbnQpLAotICAgICgndHlwZScsIGNfaW50KSwKLSAgICAoJ2RhdGEnLCBQT0lOVEVSKGNfdWJ5dGUpKSwKLSAgICAoJ2ZsYWdzJywgY19sb25nKSwKLV0KLWFzc2VydCBzaXplb2YoYXNuMV9zdHJpbmdfc3QpID09IDE2LCBzaXplb2YoYXNuMV9zdHJpbmdfc3QpCi1hc3NlcnQgYWxpZ25tZW50KGFzbjFfc3RyaW5nX3N0KSA9PSA0LCBhbGlnbm1lbnQoYXNuMV9zdHJpbmdfc3QpCi1BU04xX1NUUklORyA9IGFzbjFfc3RyaW5nX3N0Ci1jbGFzcyBBU04xX0VOQ09ESU5HX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotQVNOMV9FTkNPRElOR19zdC5fZmllbGRzXyA9IFsKLSAgICAoJ2VuYycsIFBPSU5URVIoY191Ynl0ZSkpLAotICAgICgnbGVuJywgY19sb25nKSwKLSAgICAoJ21vZGlmaWVkJywgY19pbnQpLAotXQotYXNzZXJ0IHNpemVvZihBU04xX0VOQ09ESU5HX3N0KSA9PSAxMiwgc2l6ZW9mKEFTTjFfRU5DT0RJTkdfc3QpCi1hc3NlcnQgYWxpZ25tZW50KEFTTjFfRU5DT0RJTkdfc3QpID09IDQsIGFsaWdubWVudChBU04xX0VOQ09ESU5HX3N0KQotQVNOMV9FTkNPRElORyA9IEFTTjFfRU5DT0RJTkdfc3QKLWNsYXNzIGFzbjFfc3RyaW5nX3RhYmxlX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotYXNuMV9zdHJpbmdfdGFibGVfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCduaWQnLCBjX2ludCksCi0gICAgKCdtaW5zaXplJywgY19sb25nKSwKLSAgICAoJ21heHNpemUnLCBjX2xvbmcpLAotICAgICgnbWFzaycsIGNfdWxvbmcpLAotICAgICgnZmxhZ3MnLCBjX3Vsb25nKSwKLV0KLWFzc2VydCBzaXplb2YoYXNuMV9zdHJpbmdfdGFibGVfc3QpID09IDIwLCBzaXplb2YoYXNuMV9zdHJpbmdfdGFibGVfc3QpCi1hc3NlcnQgYWxpZ25tZW50KGFzbjFfc3RyaW5nX3RhYmxlX3N0KSA9PSA0LCBhbGlnbm1lbnQoYXNuMV9zdHJpbmdfdGFibGVfc3QpCi1BU04xX1NUUklOR19UQUJMRSA9IGFzbjFfc3RyaW5nX3RhYmxlX3N0Ci1jbGFzcyBBU04xX1RFTVBMQVRFX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotQVNOMV9URU1QTEFURV9zdC5fZmllbGRzXyA9IFsKLV0KLUFTTjFfVEVNUExBVEUgPSBBU04xX1RFTVBMQVRFX3N0Ci1jbGFzcyBBU04xX0lURU1fc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1BU04xX0lURU0gPSBBU04xX0lURU1fc3QKLUFTTjFfSVRFTV9zdC5fZmllbGRzXyA9IFsKLV0KLWNsYXNzIEFTTjFfVExDX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotQVNOMV9UTEMgPSBBU04xX1RMQ19zdAotQVNOMV9UTENfc3QuX2ZpZWxkc18gPSBbCi1dCi1jbGFzcyBBU04xX1ZBTFVFX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotQVNOMV9WQUxVRV9zdC5fZmllbGRzXyA9IFsKLV0KLUFTTjFfVkFMVUUgPSBBU04xX1ZBTFVFX3N0Ci1BU04xX0lURU1fRVhQID0gQVNOMV9JVEVNCi1jbGFzcyBhc24xX3R5cGVfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1jbGFzcyBOMTJhc24xX3R5cGVfc3Q0RE9MTEFSXzExRShVbmlvbik6Ci0gICAgcGFzcwotQVNOMV9CT09MRUFOID0gY19pbnQKLUFTTjFfSU5URUdFUiA9IGFzbjFfc3RyaW5nX3N0Ci1BU04xX0VOVU1FUkFURUQgPSBhc24xX3N0cmluZ19zdAotQVNOMV9CSVRfU1RSSU5HID0gYXNuMV9zdHJpbmdfc3QKLUFTTjFfT0NURVRfU1RSSU5HID0gYXNuMV9zdHJpbmdfc3QKLUFTTjFfUFJJTlRBQkxFU1RSSU5HID0gYXNuMV9zdHJpbmdfc3QKLUFTTjFfVDYxU1RSSU5HID0gYXNuMV9zdHJpbmdfc3QKLUFTTjFfSUE1U1RSSU5HID0gYXNuMV9zdHJpbmdfc3QKLUFTTjFfR0VORVJBTFNUUklORyA9IGFzbjFfc3RyaW5nX3N0Ci1BU04xX0JNUFNUUklORyA9IGFzbjFfc3RyaW5nX3N0Ci1BU04xX1VOSVZFUlNBTFNUUklORyA9IGFzbjFfc3RyaW5nX3N0Ci1BU04xX1VUQ1RJTUUgPSBhc24xX3N0cmluZ19zdAotQVNOMV9HRU5FUkFMSVpFRFRJTUUgPSBhc24xX3N0cmluZ19zdAotQVNOMV9WSVNJQkxFU1RSSU5HID0gYXNuMV9zdHJpbmdfc3QKLUFTTjFfVVRGOFNUUklORyA9IGFzbjFfc3RyaW5nX3N0Ci1OMTJhc24xX3R5cGVfc3Q0RE9MTEFSXzExRS5fZmllbGRzXyA9IFsKLSAgICAoJ3B0cicsIFNUUklORyksCi0gICAgKCdib29sZWFuJywgQVNOMV9CT09MRUFOKSwKLSAgICAoJ2FzbjFfc3RyaW5nJywgUE9JTlRFUihBU04xX1NUUklORykpLAotICAgICgnb2JqZWN0JywgUE9JTlRFUihBU04xX09CSkVDVCkpLAotICAgICgnaW50ZWdlcicsIFBPSU5URVIoQVNOMV9JTlRFR0VSKSksCi0gICAgKCdlbnVtZXJhdGVkJywgUE9JTlRFUihBU04xX0VOVU1FUkFURUQpKSwKLSAgICAoJ2JpdF9zdHJpbmcnLCBQT0lOVEVSKEFTTjFfQklUX1NUUklORykpLAotICAgICgnb2N0ZXRfc3RyaW5nJywgUE9JTlRFUihBU04xX09DVEVUX1NUUklORykpLAotICAgICgncHJpbnRhYmxlc3RyaW5nJywgUE9JTlRFUihBU04xX1BSSU5UQUJMRVNUUklORykpLAotICAgICgndDYxc3RyaW5nJywgUE9JTlRFUihBU04xX1Q2MVNUUklORykpLAotICAgICgnaWE1c3RyaW5nJywgUE9JTlRFUihBU04xX0lBNVNUUklORykpLAotICAgICgnZ2VuZXJhbHN0cmluZycsIFBPSU5URVIoQVNOMV9HRU5FUkFMU1RSSU5HKSksCi0gICAgKCdibXBzdHJpbmcnLCBQT0lOVEVSKEFTTjFfQk1QU1RSSU5HKSksCi0gICAgKCd1bml2ZXJzYWxzdHJpbmcnLCBQT0lOVEVSKEFTTjFfVU5JVkVSU0FMU1RSSU5HKSksCi0gICAgKCd1dGN0aW1lJywgUE9JTlRFUihBU04xX1VUQ1RJTUUpKSwKLSAgICAoJ2dlbmVyYWxpemVkdGltZScsIFBPSU5URVIoQVNOMV9HRU5FUkFMSVpFRFRJTUUpKSwKLSAgICAoJ3Zpc2libGVzdHJpbmcnLCBQT0lOVEVSKEFTTjFfVklTSUJMRVNUUklORykpLAotICAgICgndXRmOHN0cmluZycsIFBPSU5URVIoQVNOMV9VVEY4U1RSSU5HKSksCi0gICAgKCdzZXQnLCBQT0lOVEVSKEFTTjFfU1RSSU5HKSksCi0gICAgKCdzZXF1ZW5jZScsIFBPSU5URVIoQVNOMV9TVFJJTkcpKSwKLV0KLWFzc2VydCBzaXplb2YoTjEyYXNuMV90eXBlX3N0NERPTExBUl8xMUUpID09IDQsIHNpemVvZihOMTJhc24xX3R5cGVfc3Q0RE9MTEFSXzExRSkKLWFzc2VydCBhbGlnbm1lbnQoTjEyYXNuMV90eXBlX3N0NERPTExBUl8xMUUpID09IDQsIGFsaWdubWVudChOMTJhc24xX3R5cGVfc3Q0RE9MTEFSXzExRSkKLWFzbjFfdHlwZV9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ3R5cGUnLCBjX2ludCksCi0gICAgKCd2YWx1ZScsIE4xMmFzbjFfdHlwZV9zdDRET0xMQVJfMTFFKSwKLV0KLWFzc2VydCBzaXplb2YoYXNuMV90eXBlX3N0KSA9PSA4LCBzaXplb2YoYXNuMV90eXBlX3N0KQotYXNzZXJ0IGFsaWdubWVudChhc24xX3R5cGVfc3QpID09IDQsIGFsaWdubWVudChhc24xX3R5cGVfc3QpCi1BU04xX1RZUEUgPSBhc24xX3R5cGVfc3QKLWNsYXNzIGFzbjFfbWV0aG9kX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotYXNuMV9tZXRob2Rfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdpMmQnLCBDRlVOQ1RZUEUoY19pbnQpKSwKLSAgICAoJ2QyaScsIENGVU5DVFlQRShTVFJJTkcpKSwKLSAgICAoJ2NyZWF0ZScsIENGVU5DVFlQRShTVFJJTkcpKSwKLSAgICAoJ2Rlc3Ryb3knLCBDRlVOQ1RZUEUoTm9uZSkpLAotXQotYXNzZXJ0IHNpemVvZihhc24xX21ldGhvZF9zdCkgPT0gMTYsIHNpemVvZihhc24xX21ldGhvZF9zdCkKLWFzc2VydCBhbGlnbm1lbnQoYXNuMV9tZXRob2Rfc3QpID09IDQsIGFsaWdubWVudChhc24xX21ldGhvZF9zdCkKLUFTTjFfTUVUSE9EID0gYXNuMV9tZXRob2Rfc3QKLWNsYXNzIGFzbjFfaGVhZGVyX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotYXNuMV9oZWFkZXJfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdoZWFkZXInLCBQT0lOVEVSKEFTTjFfT0NURVRfU1RSSU5HKSksCi0gICAgKCdkYXRhJywgU1RSSU5HKSwKLSAgICAoJ21ldGgnLCBQT0lOVEVSKEFTTjFfTUVUSE9EKSksCi1dCi1hc3NlcnQgc2l6ZW9mKGFzbjFfaGVhZGVyX3N0KSA9PSAxMiwgc2l6ZW9mKGFzbjFfaGVhZGVyX3N0KQotYXNzZXJ0IGFsaWdubWVudChhc24xX2hlYWRlcl9zdCkgPT0gNCwgYWxpZ25tZW50KGFzbjFfaGVhZGVyX3N0KQotQVNOMV9IRUFERVIgPSBhc24xX2hlYWRlcl9zdAotY2xhc3MgQklUX1NUUklOR19CSVROQU1FX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotQklUX1NUUklOR19CSVROQU1FX3N0Ll9maWVsZHNfID0gWwotICAgICgnYml0bnVtJywgY19pbnQpLAotICAgICgnbG5hbWUnLCBTVFJJTkcpLAotICAgICgnc25hbWUnLCBTVFJJTkcpLAotXQotYXNzZXJ0IHNpemVvZihCSVRfU1RSSU5HX0JJVE5BTUVfc3QpID09IDEyLCBzaXplb2YoQklUX1NUUklOR19CSVROQU1FX3N0KQotYXNzZXJ0IGFsaWdubWVudChCSVRfU1RSSU5HX0JJVE5BTUVfc3QpID09IDQsIGFsaWdubWVudChCSVRfU1RSSU5HX0JJVE5BTUVfc3QpCi1CSVRfU1RSSU5HX0JJVE5BTUUgPSBCSVRfU1RSSU5HX0JJVE5BTUVfc3QKLWNsYXNzIGJpb19zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLUJJTyA9IGJpb19zdAotYmlvX2luZm9fY2IgPSBDRlVOQ1RZUEUoTm9uZSwgUE9JTlRFUihiaW9fc3QpLCBjX2ludCwgU1RSSU5HLCBjX2ludCwgY19sb25nLCBjX2xvbmcpCi1jbGFzcyBiaW9fbWV0aG9kX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotYmlvX21ldGhvZF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ3R5cGUnLCBjX2ludCksCi0gICAgKCduYW1lJywgU1RSSU5HKSwKLSAgICAoJ2J3cml0ZScsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihCSU8pLCBTVFJJTkcsIGNfaW50KSksCi0gICAgKCdicmVhZCcsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihCSU8pLCBTVFJJTkcsIGNfaW50KSksCi0gICAgKCdicHV0cycsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihCSU8pLCBTVFJJTkcpKSwKLSAgICAoJ2JnZXRzJywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKEJJTyksIFNUUklORywgY19pbnQpKSwKLSAgICAoJ2N0cmwnLCBDRlVOQ1RZUEUoY19sb25nLCBQT0lOVEVSKEJJTyksIGNfaW50LCBjX2xvbmcsIGNfdm9pZF9wKSksCi0gICAgKCdjcmVhdGUnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoQklPKSkpLAotICAgICgnZGVzdHJveScsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihCSU8pKSksCi0gICAgKCdjYWxsYmFja19jdHJsJywgQ0ZVTkNUWVBFKGNfbG9uZywgUE9JTlRFUihCSU8pLCBjX2ludCwgUE9JTlRFUihiaW9faW5mb19jYikpKSwKLV0KLWFzc2VydCBzaXplb2YoYmlvX21ldGhvZF9zdCkgPT0gNDAsIHNpemVvZihiaW9fbWV0aG9kX3N0KQotYXNzZXJ0IGFsaWdubWVudChiaW9fbWV0aG9kX3N0KSA9PSA0LCBhbGlnbm1lbnQoYmlvX21ldGhvZF9zdCkKLUJJT19NRVRIT0QgPSBiaW9fbWV0aG9kX3N0Ci1jbGFzcyBjcnlwdG9fZXhfZGF0YV9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLWNsYXNzIHN0YWNrX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotU1RBQ0sgPSBzdGFja19zdAotY3J5cHRvX2V4X2RhdGFfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdzaycsIFBPSU5URVIoU1RBQ0spKSwKLSAgICAoJ2R1bW15JywgY19pbnQpLAotXQotYXNzZXJ0IHNpemVvZihjcnlwdG9fZXhfZGF0YV9zdCkgPT0gOCwgc2l6ZW9mKGNyeXB0b19leF9kYXRhX3N0KQotYXNzZXJ0IGFsaWdubWVudChjcnlwdG9fZXhfZGF0YV9zdCkgPT0gNCwgYWxpZ25tZW50KGNyeXB0b19leF9kYXRhX3N0KQotQ1JZUFRPX0VYX0RBVEEgPSBjcnlwdG9fZXhfZGF0YV9zdAotYmlvX3N0Ll9maWVsZHNfID0gWwotICAgICgnbWV0aG9kJywgUE9JTlRFUihCSU9fTUVUSE9EKSksCi0gICAgKCdjYWxsYmFjaycsIENGVU5DVFlQRShjX2xvbmcsIFBPSU5URVIoYmlvX3N0KSwgY19pbnQsIFNUUklORywgY19pbnQsIGNfbG9uZywgY19sb25nKSksCi0gICAgKCdjYl9hcmcnLCBTVFJJTkcpLAotICAgICgnaW5pdCcsIGNfaW50KSwKLSAgICAoJ3NodXRkb3duJywgY19pbnQpLAotICAgICgnZmxhZ3MnLCBjX2ludCksCi0gICAgKCdyZXRyeV9yZWFzb24nLCBjX2ludCksCi0gICAgKCdudW0nLCBjX2ludCksCi0gICAgKCdwdHInLCBjX3ZvaWRfcCksCi0gICAgKCduZXh0X2JpbycsIFBPSU5URVIoYmlvX3N0KSksCi0gICAgKCdwcmV2X2JpbycsIFBPSU5URVIoYmlvX3N0KSksCi0gICAgKCdyZWZlcmVuY2VzJywgY19pbnQpLAotICAgICgnbnVtX3JlYWQnLCBjX3Vsb25nKSwKLSAgICAoJ251bV93cml0ZScsIGNfdWxvbmcpLAotICAgICgnZXhfZGF0YScsIENSWVBUT19FWF9EQVRBKSwKLV0KLWFzc2VydCBzaXplb2YoYmlvX3N0KSA9PSA2NCwgc2l6ZW9mKGJpb19zdCkKLWFzc2VydCBhbGlnbm1lbnQoYmlvX3N0KSA9PSA0LCBhbGlnbm1lbnQoYmlvX3N0KQotY2xhc3MgYmlvX2ZfYnVmZmVyX2N0eF9zdHJ1Y3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1iaW9fZl9idWZmZXJfY3R4X3N0cnVjdC5fZmllbGRzXyA9IFsKLSAgICAoJ2lidWZfc2l6ZScsIGNfaW50KSwKLSAgICAoJ29idWZfc2l6ZScsIGNfaW50KSwKLSAgICAoJ2lidWYnLCBTVFJJTkcpLAotICAgICgnaWJ1Zl9sZW4nLCBjX2ludCksCi0gICAgKCdpYnVmX29mZicsIGNfaW50KSwKLSAgICAoJ29idWYnLCBTVFJJTkcpLAotICAgICgnb2J1Zl9sZW4nLCBjX2ludCksCi0gICAgKCdvYnVmX29mZicsIGNfaW50KSwKLV0KLWFzc2VydCBzaXplb2YoYmlvX2ZfYnVmZmVyX2N0eF9zdHJ1Y3QpID09IDMyLCBzaXplb2YoYmlvX2ZfYnVmZmVyX2N0eF9zdHJ1Y3QpCi1hc3NlcnQgYWxpZ25tZW50KGJpb19mX2J1ZmZlcl9jdHhfc3RydWN0KSA9PSA0LCBhbGlnbm1lbnQoYmlvX2ZfYnVmZmVyX2N0eF9zdHJ1Y3QpCi1CSU9fRl9CVUZGRVJfQ1RYID0gYmlvX2ZfYnVmZmVyX2N0eF9zdHJ1Y3QKLWNsYXNzIGhvc3RlbnQoU3RydWN0dXJlKToKLSAgICBwYXNzCi1ob3N0ZW50Ll9maWVsZHNfID0gWwotXQotY2xhc3MgYmZfa2V5X3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotYmZfa2V5X3N0Ll9maWVsZHNfID0gWwotICAgICgnUCcsIGNfdWludCAqIDE4KSwKLSAgICAoJ1MnLCBjX3VpbnQgKiAxMDI0KSwKLV0KLWFzc2VydCBzaXplb2YoYmZfa2V5X3N0KSA9PSA0MTY4LCBzaXplb2YoYmZfa2V5X3N0KQotYXNzZXJ0IGFsaWdubWVudChiZl9rZXlfc3QpID09IDQsIGFsaWdubWVudChiZl9rZXlfc3QpCi1CRl9LRVkgPSBiZl9rZXlfc3QKLWNsYXNzIGJpZ251bV9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLWJpZ251bV9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ2QnLCBQT0lOVEVSKGNfdWxvbmcpKSwKLSAgICAoJ3RvcCcsIGNfaW50KSwKLSAgICAoJ2RtYXgnLCBjX2ludCksCi0gICAgKCduZWcnLCBjX2ludCksCi0gICAgKCdmbGFncycsIGNfaW50KSwKLV0KLWFzc2VydCBzaXplb2YoYmlnbnVtX3N0KSA9PSAyMCwgc2l6ZW9mKGJpZ251bV9zdCkKLWFzc2VydCBhbGlnbm1lbnQoYmlnbnVtX3N0KSA9PSA0LCBhbGlnbm1lbnQoYmlnbnVtX3N0KQotQklHTlVNID0gYmlnbnVtX3N0Ci1jbGFzcyBiaWdudW1fY3R4KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotYmlnbnVtX2N0eC5fZmllbGRzXyA9IFsKLV0KLUJOX0NUWCA9IGJpZ251bV9jdHgKLWNsYXNzIGJuX2JsaW5kaW5nX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotYm5fYmxpbmRpbmdfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdpbml0JywgY19pbnQpLAotICAgICgnQScsIFBPSU5URVIoQklHTlVNKSksCi0gICAgKCdBaScsIFBPSU5URVIoQklHTlVNKSksCi0gICAgKCdtb2QnLCBQT0lOVEVSKEJJR05VTSkpLAotICAgICgndGhyZWFkX2lkJywgY191bG9uZyksCi1dCi1hc3NlcnQgc2l6ZW9mKGJuX2JsaW5kaW5nX3N0KSA9PSAyMCwgc2l6ZW9mKGJuX2JsaW5kaW5nX3N0KQotYXNzZXJ0IGFsaWdubWVudChibl9ibGluZGluZ19zdCkgPT0gNCwgYWxpZ25tZW50KGJuX2JsaW5kaW5nX3N0KQotQk5fQkxJTkRJTkcgPSBibl9ibGluZGluZ19zdAotY2xhc3MgYm5fbW9udF9jdHhfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1ibl9tb250X2N0eF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ3JpJywgY19pbnQpLAotICAgICgnUlInLCBCSUdOVU0pLAotICAgICgnTicsIEJJR05VTSksCi0gICAgKCdOaScsIEJJR05VTSksCi0gICAgKCduMCcsIGNfdWxvbmcpLAotICAgICgnZmxhZ3MnLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKGJuX21vbnRfY3R4X3N0KSA9PSA3Miwgc2l6ZW9mKGJuX21vbnRfY3R4X3N0KQotYXNzZXJ0IGFsaWdubWVudChibl9tb250X2N0eF9zdCkgPT0gNCwgYWxpZ25tZW50KGJuX21vbnRfY3R4X3N0KQotQk5fTU9OVF9DVFggPSBibl9tb250X2N0eF9zdAotY2xhc3MgYm5fcmVjcF9jdHhfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1ibl9yZWNwX2N0eF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ04nLCBCSUdOVU0pLAotICAgICgnTnInLCBCSUdOVU0pLAotICAgICgnbnVtX2JpdHMnLCBjX2ludCksCi0gICAgKCdzaGlmdCcsIGNfaW50KSwKLSAgICAoJ2ZsYWdzJywgY19pbnQpLAotXQotYXNzZXJ0IHNpemVvZihibl9yZWNwX2N0eF9zdCkgPT0gNTIsIHNpemVvZihibl9yZWNwX2N0eF9zdCkKLWFzc2VydCBhbGlnbm1lbnQoYm5fcmVjcF9jdHhfc3QpID09IDQsIGFsaWdubWVudChibl9yZWNwX2N0eF9zdCkKLUJOX1JFQ1BfQ1RYID0gYm5fcmVjcF9jdHhfc3QKLWNsYXNzIGJ1Zl9tZW1fc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1idWZfbWVtX3N0Ll9maWVsZHNfID0gWwotICAgICgnbGVuZ3RoJywgY19pbnQpLAotICAgICgnZGF0YScsIFNUUklORyksCi0gICAgKCdtYXgnLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKGJ1Zl9tZW1fc3QpID09IDEyLCBzaXplb2YoYnVmX21lbV9zdCkKLWFzc2VydCBhbGlnbm1lbnQoYnVmX21lbV9zdCkgPT0gNCwgYWxpZ25tZW50KGJ1Zl9tZW1fc3QpCi1CVUZfTUVNID0gYnVmX21lbV9zdAotY2xhc3MgY2FzdF9rZXlfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1jYXN0X2tleV9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ2RhdGEnLCBjX3Vsb25nICogMzIpLAotICAgICgnc2hvcnRfa2V5JywgY19pbnQpLAotXQotYXNzZXJ0IHNpemVvZihjYXN0X2tleV9zdCkgPT0gMTMyLCBzaXplb2YoY2FzdF9rZXlfc3QpCi1hc3NlcnQgYWxpZ25tZW50KGNhc3Rfa2V5X3N0KSA9PSA0LCBhbGlnbm1lbnQoY2FzdF9rZXlfc3QpCi1DQVNUX0tFWSA9IGNhc3Rfa2V5X3N0Ci1jbGFzcyBjb21wX21ldGhvZF9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLWNvbXBfbWV0aG9kX3N0Ll9maWVsZHNfID0gWwotICAgICgndHlwZScsIGNfaW50KSwKLSAgICAoJ25hbWUnLCBTVFJJTkcpLAotICAgICgnaW5pdCcsIENGVU5DVFlQRShjX2ludCkpLAotICAgICgnZmluaXNoJywgQ0ZVTkNUWVBFKE5vbmUpKSwKLSAgICAoJ2NvbXByZXNzJywgQ0ZVTkNUWVBFKGNfaW50KSksCi0gICAgKCdleHBhbmQnLCBDRlVOQ1RZUEUoY19pbnQpKSwKLSAgICAoJ2N0cmwnLCBDRlVOQ1RZUEUoY19sb25nKSksCi0gICAgKCdjYWxsYmFja19jdHJsJywgQ0ZVTkNUWVBFKGNfbG9uZykpLAotXQotYXNzZXJ0IHNpemVvZihjb21wX21ldGhvZF9zdCkgPT0gMzIsIHNpemVvZihjb21wX21ldGhvZF9zdCkKLWFzc2VydCBhbGlnbm1lbnQoY29tcF9tZXRob2Rfc3QpID09IDQsIGFsaWdubWVudChjb21wX21ldGhvZF9zdCkKLUNPTVBfTUVUSE9EID0gY29tcF9tZXRob2Rfc3QKLWNsYXNzIGNvbXBfY3R4X3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotY29tcF9jdHhfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdtZXRoJywgUE9JTlRFUihDT01QX01FVEhPRCkpLAotICAgICgnY29tcHJlc3NfaW4nLCBjX3Vsb25nKSwKLSAgICAoJ2NvbXByZXNzX291dCcsIGNfdWxvbmcpLAotICAgICgnZXhwYW5kX2luJywgY191bG9uZyksCi0gICAgKCdleHBhbmRfb3V0JywgY191bG9uZyksCi0gICAgKCdleF9kYXRhJywgQ1JZUFRPX0VYX0RBVEEpLAotXQotYXNzZXJ0IHNpemVvZihjb21wX2N0eF9zdCkgPT0gMjgsIHNpemVvZihjb21wX2N0eF9zdCkKLWFzc2VydCBhbGlnbm1lbnQoY29tcF9jdHhfc3QpID09IDQsIGFsaWdubWVudChjb21wX2N0eF9zdCkKLUNPTVBfQ1RYID0gY29tcF9jdHhfc3QKLWNsYXNzIENSWVBUT19keW5sb2NrX3ZhbHVlKFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotQ1JZUFRPX2R5bmxvY2tfdmFsdWUuX2ZpZWxkc18gPSBbCi1dCi1jbGFzcyBDUllQVE9fZHlubG9jayhTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLUNSWVBUT19keW5sb2NrLl9maWVsZHNfID0gWwotICAgICgncmVmZXJlbmNlcycsIGNfaW50KSwKLSAgICAoJ2RhdGEnLCBQT0lOVEVSKENSWVBUT19keW5sb2NrX3ZhbHVlKSksCi1dCi1hc3NlcnQgc2l6ZW9mKENSWVBUT19keW5sb2NrKSA9PSA4LCBzaXplb2YoQ1JZUFRPX2R5bmxvY2spCi1hc3NlcnQgYWxpZ25tZW50KENSWVBUT19keW5sb2NrKSA9PSA0LCBhbGlnbm1lbnQoQ1JZUFRPX2R5bmxvY2spCi1CSU9fZHVtbXkgPSBiaW9fc3QKLUNSWVBUT19FWF9uZXcgPSBDRlVOQ1RZUEUoY19pbnQsIGNfdm9pZF9wLCBjX3ZvaWRfcCwgUE9JTlRFUihDUllQVE9fRVhfREFUQSksIGNfaW50LCBjX2xvbmcsIGNfdm9pZF9wKQotQ1JZUFRPX0VYX2ZyZWUgPSBDRlVOQ1RZUEUoTm9uZSwgY192b2lkX3AsIGNfdm9pZF9wLCBQT0lOVEVSKENSWVBUT19FWF9EQVRBKSwgY19pbnQsIGNfbG9uZywgY192b2lkX3ApCi1DUllQVE9fRVhfZHVwID0gQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKENSWVBUT19FWF9EQVRBKSwgUE9JTlRFUihDUllQVE9fRVhfREFUQSksIGNfdm9pZF9wLCBjX2ludCwgY19sb25nLCBjX3ZvaWRfcCkKLWNsYXNzIGNyeXB0b19leF9kYXRhX2Z1bmNfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1jcnlwdG9fZXhfZGF0YV9mdW5jX3N0Ll9maWVsZHNfID0gWwotICAgICgnYXJnbCcsIGNfbG9uZyksCi0gICAgKCdhcmdwJywgY192b2lkX3ApLAotICAgICgnbmV3X2Z1bmMnLCBQT0lOVEVSKENSWVBUT19FWF9uZXcpKSwKLSAgICAoJ2ZyZWVfZnVuYycsIFBPSU5URVIoQ1JZUFRPX0VYX2ZyZWUpKSwKLSAgICAoJ2R1cF9mdW5jJywgUE9JTlRFUihDUllQVE9fRVhfZHVwKSksCi1dCi1hc3NlcnQgc2l6ZW9mKGNyeXB0b19leF9kYXRhX2Z1bmNfc3QpID09IDIwLCBzaXplb2YoY3J5cHRvX2V4X2RhdGFfZnVuY19zdCkKLWFzc2VydCBhbGlnbm1lbnQoY3J5cHRvX2V4X2RhdGFfZnVuY19zdCkgPT0gNCwgYWxpZ25tZW50KGNyeXB0b19leF9kYXRhX2Z1bmNfc3QpCi1DUllQVE9fRVhfREFUQV9GVU5DUyA9IGNyeXB0b19leF9kYXRhX2Z1bmNfc3QKLWNsYXNzIHN0X0NSWVBUT19FWF9EQVRBX0lNUEwoU3RydWN0dXJlKToKLSAgICBwYXNzCi1DUllQVE9fRVhfREFUQV9JTVBMID0gc3RfQ1JZUFRPX0VYX0RBVEFfSU1QTAotc3RfQ1JZUFRPX0VYX0RBVEFfSU1QTC5fZmllbGRzXyA9IFsKLV0KLUNSWVBUT19NRU1fTEVBS19DQiA9IENGVU5DVFlQRShjX3ZvaWRfcCwgY191bG9uZywgU1RSSU5HLCBjX2ludCwgY19pbnQsIGNfdm9pZF9wKQotREVTX2NibG9jayA9IGNfdWJ5dGUgKiA4Ci1jb25zdF9ERVNfY2Jsb2NrID0gY191Ynl0ZSAqIDgKLWNsYXNzIERFU19rcyhTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLWNsYXNzIE42REVTX2tzM0RPTExBUl85RShVbmlvbik6Ci0gICAgcGFzcwotTjZERVNfa3MzRE9MTEFSXzlFLl9maWVsZHNfID0gWwotICAgICgnY2Jsb2NrJywgREVTX2NibG9jayksCi0gICAgKCdkZXNsb25nJywgY191bG9uZyAqIDIpLAotXQotYXNzZXJ0IHNpemVvZihONkRFU19rczNET0xMQVJfOUUpID09IDgsIHNpemVvZihONkRFU19rczNET0xMQVJfOUUpCi1hc3NlcnQgYWxpZ25tZW50KE42REVTX2tzM0RPTExBUl85RSkgPT0gNCwgYWxpZ25tZW50KE42REVTX2tzM0RPTExBUl85RSkKLURFU19rcy5fZmllbGRzXyA9IFsKLSAgICAoJ2tzJywgTjZERVNfa3MzRE9MTEFSXzlFICogMTYpLAotXQotYXNzZXJ0IHNpemVvZihERVNfa3MpID09IDEyOCwgc2l6ZW9mKERFU19rcykKLWFzc2VydCBhbGlnbm1lbnQoREVTX2tzKSA9PSA0LCBhbGlnbm1lbnQoREVTX2tzKQotREVTX2tleV9zY2hlZHVsZSA9IERFU19rcwotX29zc2xfb2xkX2Rlc19jYmxvY2sgPSBjX3VieXRlICogOAotY2xhc3MgX29zc2xfb2xkX2Rlc19rc19zdHJ1Y3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1jbGFzcyBOMjNfb3NzbF9vbGRfZGVzX2tzX3N0cnVjdDRET0xMQVJfMTBFKFVuaW9uKToKLSAgICBwYXNzCi1OMjNfb3NzbF9vbGRfZGVzX2tzX3N0cnVjdDRET0xMQVJfMTBFLl9maWVsZHNfID0gWwotICAgICgnXycsIF9vc3NsX29sZF9kZXNfY2Jsb2NrKSwKLSAgICAoJ3BhZCcsIGNfdWxvbmcgKiAyKSwKLV0KLWFzc2VydCBzaXplb2YoTjIzX29zc2xfb2xkX2Rlc19rc19zdHJ1Y3Q0RE9MTEFSXzEwRSkgPT0gOCwgc2l6ZW9mKE4yM19vc3NsX29sZF9kZXNfa3Nfc3RydWN0NERPTExBUl8xMEUpCi1hc3NlcnQgYWxpZ25tZW50KE4yM19vc3NsX29sZF9kZXNfa3Nfc3RydWN0NERPTExBUl8xMEUpID09IDQsIGFsaWdubWVudChOMjNfb3NzbF9vbGRfZGVzX2tzX3N0cnVjdDRET0xMQVJfMTBFKQotX29zc2xfb2xkX2Rlc19rc19zdHJ1Y3QuX2ZpZWxkc18gPSBbCi0gICAgKCdrcycsIE4yM19vc3NsX29sZF9kZXNfa3Nfc3RydWN0NERPTExBUl8xMEUpLAotXQotYXNzZXJ0IHNpemVvZihfb3NzbF9vbGRfZGVzX2tzX3N0cnVjdCkgPT0gOCwgc2l6ZW9mKF9vc3NsX29sZF9kZXNfa3Nfc3RydWN0KQotYXNzZXJ0IGFsaWdubWVudChfb3NzbF9vbGRfZGVzX2tzX3N0cnVjdCkgPT0gNCwgYWxpZ25tZW50KF9vc3NsX29sZF9kZXNfa3Nfc3RydWN0KQotX29zc2xfb2xkX2Rlc19rZXlfc2NoZWR1bGUgPSBfb3NzbF9vbGRfZGVzX2tzX3N0cnVjdCAqIDE2Ci1jbGFzcyBkaF9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLURIID0gZGhfc3QKLWNsYXNzIGRoX21ldGhvZChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLWRoX21ldGhvZC5fZmllbGRzXyA9IFsKLSAgICAoJ25hbWUnLCBTVFJJTkcpLAotICAgICgnZ2VuZXJhdGVfa2V5JywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKERIKSkpLAotICAgICgnY29tcHV0ZV9rZXknLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoY191Ynl0ZSksIFBPSU5URVIoQklHTlVNKSwgUE9JTlRFUihESCkpKSwKLSAgICAoJ2JuX21vZF9leHAnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoREgpLCBQT0lOVEVSKEJJR05VTSksIFBPSU5URVIoQklHTlVNKSwgUE9JTlRFUihCSUdOVU0pLCBQT0lOVEVSKEJJR05VTSksIFBPSU5URVIoQk5fQ1RYKSwgUE9JTlRFUihCTl9NT05UX0NUWCkpKSwKLSAgICAoJ2luaXQnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoREgpKSksCi0gICAgKCdmaW5pc2gnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoREgpKSksCi0gICAgKCdmbGFncycsIGNfaW50KSwKLSAgICAoJ2FwcF9kYXRhJywgU1RSSU5HKSwKLV0KLWFzc2VydCBzaXplb2YoZGhfbWV0aG9kKSA9PSAzMiwgc2l6ZW9mKGRoX21ldGhvZCkKLWFzc2VydCBhbGlnbm1lbnQoZGhfbWV0aG9kKSA9PSA0LCBhbGlnbm1lbnQoZGhfbWV0aG9kKQotREhfTUVUSE9EID0gZGhfbWV0aG9kCi1jbGFzcyBlbmdpbmVfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1FTkdJTkUgPSBlbmdpbmVfc3QKLWRoX3N0Ll9maWVsZHNfID0gWwotICAgICgncGFkJywgY19pbnQpLAotICAgICgndmVyc2lvbicsIGNfaW50KSwKLSAgICAoJ3AnLCBQT0lOVEVSKEJJR05VTSkpLAotICAgICgnZycsIFBPSU5URVIoQklHTlVNKSksCi0gICAgKCdsZW5ndGgnLCBjX2xvbmcpLAotICAgICgncHViX2tleScsIFBPSU5URVIoQklHTlVNKSksCi0gICAgKCdwcml2X2tleScsIFBPSU5URVIoQklHTlVNKSksCi0gICAgKCdmbGFncycsIGNfaW50KSwKLSAgICAoJ21ldGhvZF9tb250X3AnLCBTVFJJTkcpLAotICAgICgncScsIFBPSU5URVIoQklHTlVNKSksCi0gICAgKCdqJywgUE9JTlRFUihCSUdOVU0pKSwKLSAgICAoJ3NlZWQnLCBQT0lOVEVSKGNfdWJ5dGUpKSwKLSAgICAoJ3NlZWRsZW4nLCBjX2ludCksCi0gICAgKCdjb3VudGVyJywgUE9JTlRFUihCSUdOVU0pKSwKLSAgICAoJ3JlZmVyZW5jZXMnLCBjX2ludCksCi0gICAgKCdleF9kYXRhJywgQ1JZUFRPX0VYX0RBVEEpLAotICAgICgnbWV0aCcsIFBPSU5URVIoREhfTUVUSE9EKSksCi0gICAgKCdlbmdpbmUnLCBQT0lOVEVSKEVOR0lORSkpLAotXQotYXNzZXJ0IHNpemVvZihkaF9zdCkgPT0gNzYsIHNpemVvZihkaF9zdCkKLWFzc2VydCBhbGlnbm1lbnQoZGhfc3QpID09IDQsIGFsaWdubWVudChkaF9zdCkKLWNsYXNzIGRzYV9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLURTQSA9IGRzYV9zdAotY2xhc3MgRFNBX1NJR19zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLURTQV9TSUdfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdyJywgUE9JTlRFUihCSUdOVU0pKSwKLSAgICAoJ3MnLCBQT0lOVEVSKEJJR05VTSkpLAotXQotYXNzZXJ0IHNpemVvZihEU0FfU0lHX3N0KSA9PSA4LCBzaXplb2YoRFNBX1NJR19zdCkKLWFzc2VydCBhbGlnbm1lbnQoRFNBX1NJR19zdCkgPT0gNCwgYWxpZ25tZW50KERTQV9TSUdfc3QpCi1EU0FfU0lHID0gRFNBX1NJR19zdAotY2xhc3MgZHNhX21ldGhvZChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLWRzYV9tZXRob2QuX2ZpZWxkc18gPSBbCi0gICAgKCduYW1lJywgU1RSSU5HKSwKLSAgICAoJ2RzYV9kb19zaWduJywgQ0ZVTkNUWVBFKFBPSU5URVIoRFNBX1NJRyksIFBPSU5URVIoY191Ynl0ZSksIGNfaW50LCBQT0lOVEVSKERTQSkpKSwKLSAgICAoJ2RzYV9zaWduX3NldHVwJywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKERTQSksIFBPSU5URVIoQk5fQ1RYKSwgUE9JTlRFUihQT0lOVEVSKEJJR05VTSkpLCBQT0lOVEVSKFBPSU5URVIoQklHTlVNKSkpKSwKLSAgICAoJ2RzYV9kb192ZXJpZnknLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoY191Ynl0ZSksIGNfaW50LCBQT0lOVEVSKERTQV9TSUcpLCBQT0lOVEVSKERTQSkpKSwKLSAgICAoJ2RzYV9tb2RfZXhwJywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKERTQSksIFBPSU5URVIoQklHTlVNKSwgUE9JTlRFUihCSUdOVU0pLCBQT0lOVEVSKEJJR05VTSksIFBPSU5URVIoQklHTlVNKSwgUE9JTlRFUihCSUdOVU0pLCBQT0lOVEVSKEJJR05VTSksIFBPSU5URVIoQk5fQ1RYKSwgUE9JTlRFUihCTl9NT05UX0NUWCkpKSwKLSAgICAoJ2JuX21vZF9leHAnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoRFNBKSwgUE9JTlRFUihCSUdOVU0pLCBQT0lOVEVSKEJJR05VTSksIFBPSU5URVIoQklHTlVNKSwgUE9JTlRFUihCSUdOVU0pLCBQT0lOVEVSKEJOX0NUWCksIFBPSU5URVIoQk5fTU9OVF9DVFgpKSksCi0gICAgKCdpbml0JywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKERTQSkpKSwKLSAgICAoJ2ZpbmlzaCcsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihEU0EpKSksCi0gICAgKCdmbGFncycsIGNfaW50KSwKLSAgICAoJ2FwcF9kYXRhJywgU1RSSU5HKSwKLV0KLWFzc2VydCBzaXplb2YoZHNhX21ldGhvZCkgPT0gNDAsIHNpemVvZihkc2FfbWV0aG9kKQotYXNzZXJ0IGFsaWdubWVudChkc2FfbWV0aG9kKSA9PSA0LCBhbGlnbm1lbnQoZHNhX21ldGhvZCkKLURTQV9NRVRIT0QgPSBkc2FfbWV0aG9kCi1kc2Ffc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdwYWQnLCBjX2ludCksCi0gICAgKCd2ZXJzaW9uJywgY19sb25nKSwKLSAgICAoJ3dyaXRlX3BhcmFtcycsIGNfaW50KSwKLSAgICAoJ3AnLCBQT0lOVEVSKEJJR05VTSkpLAotICAgICgncScsIFBPSU5URVIoQklHTlVNKSksCi0gICAgKCdnJywgUE9JTlRFUihCSUdOVU0pKSwKLSAgICAoJ3B1Yl9rZXknLCBQT0lOVEVSKEJJR05VTSkpLAotICAgICgncHJpdl9rZXknLCBQT0lOVEVSKEJJR05VTSkpLAotICAgICgna2ludicsIFBPSU5URVIoQklHTlVNKSksCi0gICAgKCdyJywgUE9JTlRFUihCSUdOVU0pKSwKLSAgICAoJ2ZsYWdzJywgY19pbnQpLAotICAgICgnbWV0aG9kX21vbnRfcCcsIFNUUklORyksCi0gICAgKCdyZWZlcmVuY2VzJywgY19pbnQpLAotICAgICgnZXhfZGF0YScsIENSWVBUT19FWF9EQVRBKSwKLSAgICAoJ21ldGgnLCBQT0lOVEVSKERTQV9NRVRIT0QpKSwKLSAgICAoJ2VuZ2luZScsIFBPSU5URVIoRU5HSU5FKSksCi1dCi1hc3NlcnQgc2l6ZW9mKGRzYV9zdCkgPT0gNjgsIHNpemVvZihkc2Ffc3QpCi1hc3NlcnQgYWxpZ25tZW50KGRzYV9zdCkgPT0gNCwgYWxpZ25tZW50KGRzYV9zdCkKLWNsYXNzIGV2cF9wa2V5X3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotY2xhc3MgTjExZXZwX3BrZXlfc3Q0RE9MTEFSXzEyRShVbmlvbik6Ci0gICAgcGFzcwotY2xhc3MgcnNhX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotTjExZXZwX3BrZXlfc3Q0RE9MTEFSXzEyRS5fZmllbGRzXyA9IFsKLSAgICAoJ3B0cicsIFNUUklORyksCi0gICAgKCdyc2EnLCBQT0lOVEVSKHJzYV9zdCkpLAotICAgICgnZHNhJywgUE9JTlRFUihkc2Ffc3QpKSwKLSAgICAoJ2RoJywgUE9JTlRFUihkaF9zdCkpLAotXQotYXNzZXJ0IHNpemVvZihOMTFldnBfcGtleV9zdDRET0xMQVJfMTJFKSA9PSA0LCBzaXplb2YoTjExZXZwX3BrZXlfc3Q0RE9MTEFSXzEyRSkKLWFzc2VydCBhbGlnbm1lbnQoTjExZXZwX3BrZXlfc3Q0RE9MTEFSXzEyRSkgPT0gNCwgYWxpZ25tZW50KE4xMWV2cF9wa2V5X3N0NERPTExBUl8xMkUpCi1ldnBfcGtleV9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ3R5cGUnLCBjX2ludCksCi0gICAgKCdzYXZlX3R5cGUnLCBjX2ludCksCi0gICAgKCdyZWZlcmVuY2VzJywgY19pbnQpLAotICAgICgncGtleScsIE4xMWV2cF9wa2V5X3N0NERPTExBUl8xMkUpLAotICAgICgnc2F2ZV9wYXJhbWV0ZXJzJywgY19pbnQpLAotICAgICgnYXR0cmlidXRlcycsIFBPSU5URVIoU1RBQ0spKSwKLV0KLWFzc2VydCBzaXplb2YoZXZwX3BrZXlfc3QpID09IDI0LCBzaXplb2YoZXZwX3BrZXlfc3QpCi1hc3NlcnQgYWxpZ25tZW50KGV2cF9wa2V5X3N0KSA9PSA0LCBhbGlnbm1lbnQoZXZwX3BrZXlfc3QpCi1jbGFzcyBlbnZfbWRfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1jbGFzcyBlbnZfbWRfY3R4X3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotRVZQX01EX0NUWCA9IGVudl9tZF9jdHhfc3QKLWVudl9tZF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ3R5cGUnLCBjX2ludCksCi0gICAgKCdwa2V5X3R5cGUnLCBjX2ludCksCi0gICAgKCdtZF9zaXplJywgY19pbnQpLAotICAgICgnZmxhZ3MnLCBjX3Vsb25nKSwKLSAgICAoJ2luaXQnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoRVZQX01EX0NUWCkpKSwKLSAgICAoJ3VwZGF0ZScsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihFVlBfTURfQ1RYKSwgY192b2lkX3AsIGNfdWxvbmcpKSwKLSAgICAoJ2ZpbmFsJywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKEVWUF9NRF9DVFgpLCBQT0lOVEVSKGNfdWJ5dGUpKSksCi0gICAgKCdjb3B5JywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKEVWUF9NRF9DVFgpLCBQT0lOVEVSKEVWUF9NRF9DVFgpKSksCi0gICAgKCdjbGVhbnVwJywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKEVWUF9NRF9DVFgpKSksCi0gICAgKCdzaWduJywgQ0ZVTkNUWVBFKGNfaW50KSksCi0gICAgKCd2ZXJpZnknLCBDRlVOQ1RZUEUoY19pbnQpKSwKLSAgICAoJ3JlcXVpcmVkX3BrZXlfdHlwZScsIGNfaW50ICogNSksCi0gICAgKCdibG9ja19zaXplJywgY19pbnQpLAotICAgICgnY3R4X3NpemUnLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKGVudl9tZF9zdCkgPT0gNzIsIHNpemVvZihlbnZfbWRfc3QpCi1hc3NlcnQgYWxpZ25tZW50KGVudl9tZF9zdCkgPT0gNCwgYWxpZ25tZW50KGVudl9tZF9zdCkKLUVWUF9NRCA9IGVudl9tZF9zdAotZW52X21kX2N0eF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ2RpZ2VzdCcsIFBPSU5URVIoRVZQX01EKSksCi0gICAgKCdlbmdpbmUnLCBQT0lOVEVSKEVOR0lORSkpLAotICAgICgnZmxhZ3MnLCBjX3Vsb25nKSwKLSAgICAoJ21kX2RhdGEnLCBjX3ZvaWRfcCksCi1dCi1hc3NlcnQgc2l6ZW9mKGVudl9tZF9jdHhfc3QpID09IDE2LCBzaXplb2YoZW52X21kX2N0eF9zdCkKLWFzc2VydCBhbGlnbm1lbnQoZW52X21kX2N0eF9zdCkgPT0gNCwgYWxpZ25tZW50KGVudl9tZF9jdHhfc3QpCi1jbGFzcyBldnBfY2lwaGVyX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotY2xhc3MgZXZwX2NpcGhlcl9jdHhfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1FVlBfQ0lQSEVSX0NUWCA9IGV2cF9jaXBoZXJfY3R4X3N0Ci1ldnBfY2lwaGVyX3N0Ll9maWVsZHNfID0gWwotICAgICgnbmlkJywgY19pbnQpLAotICAgICgnYmxvY2tfc2l6ZScsIGNfaW50KSwKLSAgICAoJ2tleV9sZW4nLCBjX2ludCksCi0gICAgKCdpdl9sZW4nLCBjX2ludCksCi0gICAgKCdmbGFncycsIGNfdWxvbmcpLAotICAgICgnaW5pdCcsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihFVlBfQ0lQSEVSX0NUWCksIFBPSU5URVIoY191Ynl0ZSksIFBPSU5URVIoY191Ynl0ZSksIGNfaW50KSksCi0gICAgKCdkb19jaXBoZXInLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoRVZQX0NJUEhFUl9DVFgpLCBQT0lOVEVSKGNfdWJ5dGUpLCBQT0lOVEVSKGNfdWJ5dGUpLCBjX3VpbnQpKSwKLSAgICAoJ2NsZWFudXAnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoRVZQX0NJUEhFUl9DVFgpKSksCi0gICAgKCdjdHhfc2l6ZScsIGNfaW50KSwKLSAgICAoJ3NldF9hc24xX3BhcmFtZXRlcnMnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoRVZQX0NJUEhFUl9DVFgpLCBQT0lOVEVSKEFTTjFfVFlQRSkpKSwKLSAgICAoJ2dldF9hc24xX3BhcmFtZXRlcnMnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoRVZQX0NJUEhFUl9DVFgpLCBQT0lOVEVSKEFTTjFfVFlQRSkpKSwKLSAgICAoJ2N0cmwnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoRVZQX0NJUEhFUl9DVFgpLCBjX2ludCwgY19pbnQsIGNfdm9pZF9wKSksCi0gICAgKCdhcHBfZGF0YScsIGNfdm9pZF9wKSwKLV0KLWFzc2VydCBzaXplb2YoZXZwX2NpcGhlcl9zdCkgPT0gNTIsIHNpemVvZihldnBfY2lwaGVyX3N0KQotYXNzZXJ0IGFsaWdubWVudChldnBfY2lwaGVyX3N0KSA9PSA0LCBhbGlnbm1lbnQoZXZwX2NpcGhlcl9zdCkKLWNsYXNzIGV2cF9jaXBoZXJfaW5mb19zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLUVWUF9DSVBIRVIgPSBldnBfY2lwaGVyX3N0Ci1ldnBfY2lwaGVyX2luZm9fc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdjaXBoZXInLCBQT0lOVEVSKEVWUF9DSVBIRVIpKSwKLSAgICAoJ2l2JywgY191Ynl0ZSAqIDE2KSwKLV0KLWFzc2VydCBzaXplb2YoZXZwX2NpcGhlcl9pbmZvX3N0KSA9PSAyMCwgc2l6ZW9mKGV2cF9jaXBoZXJfaW5mb19zdCkKLWFzc2VydCBhbGlnbm1lbnQoZXZwX2NpcGhlcl9pbmZvX3N0KSA9PSA0LCBhbGlnbm1lbnQoZXZwX2NpcGhlcl9pbmZvX3N0KQotRVZQX0NJUEhFUl9JTkZPID0gZXZwX2NpcGhlcl9pbmZvX3N0Ci1ldnBfY2lwaGVyX2N0eF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ2NpcGhlcicsIFBPSU5URVIoRVZQX0NJUEhFUikpLAotICAgICgnZW5naW5lJywgUE9JTlRFUihFTkdJTkUpKSwKLSAgICAoJ2VuY3J5cHQnLCBjX2ludCksCi0gICAgKCdidWZfbGVuJywgY19pbnQpLAotICAgICgnb2l2JywgY191Ynl0ZSAqIDE2KSwKLSAgICAoJ2l2JywgY191Ynl0ZSAqIDE2KSwKLSAgICAoJ2J1ZicsIGNfdWJ5dGUgKiAzMiksCi0gICAgKCdudW0nLCBjX2ludCksCi0gICAgKCdhcHBfZGF0YScsIGNfdm9pZF9wKSwKLSAgICAoJ2tleV9sZW4nLCBjX2ludCksCi0gICAgKCdmbGFncycsIGNfdWxvbmcpLAotICAgICgnY2lwaGVyX2RhdGEnLCBjX3ZvaWRfcCksCi0gICAgKCdmaW5hbF91c2VkJywgY19pbnQpLAotICAgICgnYmxvY2tfbWFzaycsIGNfaW50KSwKLSAgICAoJ2ZpbmFsJywgY191Ynl0ZSAqIDMyKSwKLV0KLWFzc2VydCBzaXplb2YoZXZwX2NpcGhlcl9jdHhfc3QpID09IDE0MCwgc2l6ZW9mKGV2cF9jaXBoZXJfY3R4X3N0KQotYXNzZXJ0IGFsaWdubWVudChldnBfY2lwaGVyX2N0eF9zdCkgPT0gNCwgYWxpZ25tZW50KGV2cF9jaXBoZXJfY3R4X3N0KQotY2xhc3MgZXZwX0VuY29kZV9DdHhfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1ldnBfRW5jb2RlX0N0eF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ251bScsIGNfaW50KSwKLSAgICAoJ2xlbmd0aCcsIGNfaW50KSwKLSAgICAoJ2VuY19kYXRhJywgY191Ynl0ZSAqIDgwKSwKLSAgICAoJ2xpbmVfbnVtJywgY19pbnQpLAotICAgICgnZXhwZWN0X25sJywgY19pbnQpLAotXQotYXNzZXJ0IHNpemVvZihldnBfRW5jb2RlX0N0eF9zdCkgPT0gOTYsIHNpemVvZihldnBfRW5jb2RlX0N0eF9zdCkKLWFzc2VydCBhbGlnbm1lbnQoZXZwX0VuY29kZV9DdHhfc3QpID09IDQsIGFsaWdubWVudChldnBfRW5jb2RlX0N0eF9zdCkKLUVWUF9FTkNPREVfQ1RYID0gZXZwX0VuY29kZV9DdHhfc3QKLUVWUF9QQkVfS0VZR0VOID0gQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKEVWUF9DSVBIRVJfQ1RYKSwgU1RSSU5HLCBjX2ludCwgUE9JTlRFUihBU04xX1RZUEUpLCBQT0lOVEVSKEVWUF9DSVBIRVIpLCBQT0lOVEVSKEVWUF9NRCksIGNfaW50KQotY2xhc3MgbGhhc2hfbm9kZV9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLWxoYXNoX25vZGVfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdkYXRhJywgY192b2lkX3ApLAotICAgICgnbmV4dCcsIFBPSU5URVIobGhhc2hfbm9kZV9zdCkpLAotICAgICgnaGFzaCcsIGNfdWxvbmcpLAotXQotYXNzZXJ0IHNpemVvZihsaGFzaF9ub2RlX3N0KSA9PSAxMiwgc2l6ZW9mKGxoYXNoX25vZGVfc3QpCi1hc3NlcnQgYWxpZ25tZW50KGxoYXNoX25vZGVfc3QpID09IDQsIGFsaWdubWVudChsaGFzaF9ub2RlX3N0KQotTEhBU0hfTk9ERSA9IGxoYXNoX25vZGVfc3QKLUxIQVNIX0NPTVBfRk5fVFlQRSA9IENGVU5DVFlQRShjX2ludCwgY192b2lkX3AsIGNfdm9pZF9wKQotTEhBU0hfSEFTSF9GTl9UWVBFID0gQ0ZVTkNUWVBFKGNfdWxvbmcsIGNfdm9pZF9wKQotTEhBU0hfRE9BTExfRk5fVFlQRSA9IENGVU5DVFlQRShOb25lLCBjX3ZvaWRfcCkKLUxIQVNIX0RPQUxMX0FSR19GTl9UWVBFID0gQ0ZVTkNUWVBFKE5vbmUsIGNfdm9pZF9wLCBjX3ZvaWRfcCkKLWNsYXNzIGxoYXNoX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotbGhhc2hfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdiJywgUE9JTlRFUihQT0lOVEVSKExIQVNIX05PREUpKSksCi0gICAgKCdjb21wJywgTEhBU0hfQ09NUF9GTl9UWVBFKSwKLSAgICAoJ2hhc2gnLCBMSEFTSF9IQVNIX0ZOX1RZUEUpLAotICAgICgnbnVtX25vZGVzJywgY191aW50KSwKLSAgICAoJ251bV9hbGxvY19ub2RlcycsIGNfdWludCksCi0gICAgKCdwJywgY191aW50KSwKLSAgICAoJ3BtYXgnLCBjX3VpbnQpLAotICAgICgndXBfbG9hZCcsIGNfdWxvbmcpLAotICAgICgnZG93bl9sb2FkJywgY191bG9uZyksCi0gICAgKCdudW1faXRlbXMnLCBjX3Vsb25nKSwKLSAgICAoJ251bV9leHBhbmRzJywgY191bG9uZyksCi0gICAgKCdudW1fZXhwYW5kX3JlYWxsb2NzJywgY191bG9uZyksCi0gICAgKCdudW1fY29udHJhY3RzJywgY191bG9uZyksCi0gICAgKCdudW1fY29udHJhY3RfcmVhbGxvY3MnLCBjX3Vsb25nKSwKLSAgICAoJ251bV9oYXNoX2NhbGxzJywgY191bG9uZyksCi0gICAgKCdudW1fY29tcF9jYWxscycsIGNfdWxvbmcpLAotICAgICgnbnVtX2luc2VydCcsIGNfdWxvbmcpLAotICAgICgnbnVtX3JlcGxhY2UnLCBjX3Vsb25nKSwKLSAgICAoJ251bV9kZWxldGUnLCBjX3Vsb25nKSwKLSAgICAoJ251bV9ub19kZWxldGUnLCBjX3Vsb25nKSwKLSAgICAoJ251bV9yZXRyaWV2ZScsIGNfdWxvbmcpLAotICAgICgnbnVtX3JldHJpZXZlX21pc3MnLCBjX3Vsb25nKSwKLSAgICAoJ251bV9oYXNoX2NvbXBzJywgY191bG9uZyksCi0gICAgKCdlcnJvcicsIGNfaW50KSwKLV0KLWFzc2VydCBzaXplb2YobGhhc2hfc3QpID09IDk2LCBzaXplb2YobGhhc2hfc3QpCi1hc3NlcnQgYWxpZ25tZW50KGxoYXNoX3N0KSA9PSA0LCBhbGlnbm1lbnQobGhhc2hfc3QpCi1MSEFTSCA9IGxoYXNoX3N0Ci1jbGFzcyBNRDJzdGF0ZV9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLU1EMnN0YXRlX3N0Ll9maWVsZHNfID0gWwotICAgICgnbnVtJywgY19pbnQpLAotICAgICgnZGF0YScsIGNfdWJ5dGUgKiAxNiksCi0gICAgKCdja3NtJywgY191aW50ICogMTYpLAotICAgICgnc3RhdGUnLCBjX3VpbnQgKiAxNiksCi1dCi1hc3NlcnQgc2l6ZW9mKE1EMnN0YXRlX3N0KSA9PSAxNDgsIHNpemVvZihNRDJzdGF0ZV9zdCkKLWFzc2VydCBhbGlnbm1lbnQoTUQyc3RhdGVfc3QpID09IDQsIGFsaWdubWVudChNRDJzdGF0ZV9zdCkKLU1EMl9DVFggPSBNRDJzdGF0ZV9zdAotY2xhc3MgTUQ0c3RhdGVfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1NRDRzdGF0ZV9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ0EnLCBjX3VpbnQpLAotICAgICgnQicsIGNfdWludCksCi0gICAgKCdDJywgY191aW50KSwKLSAgICAoJ0QnLCBjX3VpbnQpLAotICAgICgnTmwnLCBjX3VpbnQpLAotICAgICgnTmgnLCBjX3VpbnQpLAotICAgICgnZGF0YScsIGNfdWludCAqIDE2KSwKLSAgICAoJ251bScsIGNfaW50KSwKLV0KLWFzc2VydCBzaXplb2YoTUQ0c3RhdGVfc3QpID09IDkyLCBzaXplb2YoTUQ0c3RhdGVfc3QpCi1hc3NlcnQgYWxpZ25tZW50KE1ENHN0YXRlX3N0KSA9PSA0LCBhbGlnbm1lbnQoTUQ0c3RhdGVfc3QpCi1NRDRfQ1RYID0gTUQ0c3RhdGVfc3QKLWNsYXNzIE1ENXN0YXRlX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotTUQ1c3RhdGVfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdBJywgY191aW50KSwKLSAgICAoJ0InLCBjX3VpbnQpLAotICAgICgnQycsIGNfdWludCksCi0gICAgKCdEJywgY191aW50KSwKLSAgICAoJ05sJywgY191aW50KSwKLSAgICAoJ05oJywgY191aW50KSwKLSAgICAoJ2RhdGEnLCBjX3VpbnQgKiAxNiksCi0gICAgKCdudW0nLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKE1ENXN0YXRlX3N0KSA9PSA5Miwgc2l6ZW9mKE1ENXN0YXRlX3N0KQotYXNzZXJ0IGFsaWdubWVudChNRDVzdGF0ZV9zdCkgPT0gNCwgYWxpZ25tZW50KE1ENXN0YXRlX3N0KQotTUQ1X0NUWCA9IE1ENXN0YXRlX3N0Ci1jbGFzcyBtZGMyX2N0eF9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLW1kYzJfY3R4X3N0Ll9maWVsZHNfID0gWwotICAgICgnbnVtJywgY19pbnQpLAotICAgICgnZGF0YScsIGNfdWJ5dGUgKiA4KSwKLSAgICAoJ2gnLCBERVNfY2Jsb2NrKSwKLSAgICAoJ2hoJywgREVTX2NibG9jayksCi0gICAgKCdwYWRfdHlwZScsIGNfaW50KSwKLV0KLWFzc2VydCBzaXplb2YobWRjMl9jdHhfc3QpID09IDMyLCBzaXplb2YobWRjMl9jdHhfc3QpCi1hc3NlcnQgYWxpZ25tZW50KG1kYzJfY3R4X3N0KSA9PSA0LCBhbGlnbm1lbnQobWRjMl9jdHhfc3QpCi1NREMyX0NUWCA9IG1kYzJfY3R4X3N0Ci1jbGFzcyBvYmpfbmFtZV9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLW9ial9uYW1lX3N0Ll9maWVsZHNfID0gWwotICAgICgndHlwZScsIGNfaW50KSwKLSAgICAoJ2FsaWFzJywgY19pbnQpLAotICAgICgnbmFtZScsIFNUUklORyksCi0gICAgKCdkYXRhJywgU1RSSU5HKSwKLV0KLWFzc2VydCBzaXplb2Yob2JqX25hbWVfc3QpID09IDE2LCBzaXplb2Yob2JqX25hbWVfc3QpCi1hc3NlcnQgYWxpZ25tZW50KG9ial9uYW1lX3N0KSA9PSA0LCBhbGlnbm1lbnQob2JqX25hbWVfc3QpCi1PQkpfTkFNRSA9IG9ial9uYW1lX3N0Ci1BU04xX1RJTUUgPSBhc24xX3N0cmluZ19zdAotQVNOMV9OVUxMID0gY19pbnQKLUVWUF9QS0VZID0gZXZwX3BrZXlfc3QKLWNsYXNzIHg1MDlfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1YNTA5ID0geDUwOV9zdAotY2xhc3MgWDUwOV9hbGdvcl9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLVg1MDlfQUxHT1IgPSBYNTA5X2FsZ29yX3N0Ci1jbGFzcyBYNTA5X2NybF9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLVg1MDlfQ1JMID0gWDUwOV9jcmxfc3QKLWNsYXNzIFg1MDlfbmFtZV9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLVg1MDlfTkFNRSA9IFg1MDlfbmFtZV9zdAotY2xhc3MgeDUwOV9zdG9yZV9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLVg1MDlfU1RPUkUgPSB4NTA5X3N0b3JlX3N0Ci1jbGFzcyB4NTA5X3N0b3JlX2N0eF9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLVg1MDlfU1RPUkVfQ1RYID0geDUwOV9zdG9yZV9jdHhfc3QKLWVuZ2luZV9zdC5fZmllbGRzXyA9IFsKLV0KLWNsYXNzIFBFTV9FbmNvZGVfU2VhbF9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLVBFTV9FbmNvZGVfU2VhbF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ2VuY29kZScsIEVWUF9FTkNPREVfQ1RYKSwKLSAgICAoJ21kJywgRVZQX01EX0NUWCksCi0gICAgKCdjaXBoZXInLCBFVlBfQ0lQSEVSX0NUWCksCi1dCi1hc3NlcnQgc2l6ZW9mKFBFTV9FbmNvZGVfU2VhbF9zdCkgPT0gMjUyLCBzaXplb2YoUEVNX0VuY29kZV9TZWFsX3N0KQotYXNzZXJ0IGFsaWdubWVudChQRU1fRW5jb2RlX1NlYWxfc3QpID09IDQsIGFsaWdubWVudChQRU1fRW5jb2RlX1NlYWxfc3QpCi1QRU1fRU5DT0RFX1NFQUxfQ1RYID0gUEVNX0VuY29kZV9TZWFsX3N0Ci1jbGFzcyBwZW1fcmVjaXBfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1wZW1fcmVjaXBfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCduYW1lJywgU1RSSU5HKSwKLSAgICAoJ2RuJywgUE9JTlRFUihYNTA5X05BTUUpKSwKLSAgICAoJ2NpcGhlcicsIGNfaW50KSwKLSAgICAoJ2tleV9lbmMnLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKHBlbV9yZWNpcF9zdCkgPT0gMTYsIHNpemVvZihwZW1fcmVjaXBfc3QpCi1hc3NlcnQgYWxpZ25tZW50KHBlbV9yZWNpcF9zdCkgPT0gNCwgYWxpZ25tZW50KHBlbV9yZWNpcF9zdCkKLVBFTV9VU0VSID0gcGVtX3JlY2lwX3N0Ci1jbGFzcyBwZW1fY3R4X3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotY2xhc3MgTjEwcGVtX2N0eF9zdDRET0xMQVJfMTZFKFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotTjEwcGVtX2N0eF9zdDRET0xMQVJfMTZFLl9maWVsZHNfID0gWwotICAgICgndmVyc2lvbicsIGNfaW50KSwKLSAgICAoJ21vZGUnLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKE4xMHBlbV9jdHhfc3Q0RE9MTEFSXzE2RSkgPT0gOCwgc2l6ZW9mKE4xMHBlbV9jdHhfc3Q0RE9MTEFSXzE2RSkKLWFzc2VydCBhbGlnbm1lbnQoTjEwcGVtX2N0eF9zdDRET0xMQVJfMTZFKSA9PSA0LCBhbGlnbm1lbnQoTjEwcGVtX2N0eF9zdDRET0xMQVJfMTZFKQotY2xhc3MgTjEwcGVtX2N0eF9zdDRET0xMQVJfMTdFKFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotTjEwcGVtX2N0eF9zdDRET0xMQVJfMTdFLl9maWVsZHNfID0gWwotICAgICgnY2lwaGVyJywgY19pbnQpLAotXQotYXNzZXJ0IHNpemVvZihOMTBwZW1fY3R4X3N0NERPTExBUl8xN0UpID09IDQsIHNpemVvZihOMTBwZW1fY3R4X3N0NERPTExBUl8xN0UpCi1hc3NlcnQgYWxpZ25tZW50KE4xMHBlbV9jdHhfc3Q0RE9MTEFSXzE3RSkgPT0gNCwgYWxpZ25tZW50KE4xMHBlbV9jdHhfc3Q0RE9MTEFSXzE3RSkKLXBlbV9jdHhfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCd0eXBlJywgY19pbnQpLAotICAgICgncHJvY190eXBlJywgTjEwcGVtX2N0eF9zdDRET0xMQVJfMTZFKSwKLSAgICAoJ2RvbWFpbicsIFNUUklORyksCi0gICAgKCdERUtfaW5mbycsIE4xMHBlbV9jdHhfc3Q0RE9MTEFSXzE3RSksCi0gICAgKCdvcmlnaW5hdG9yJywgUE9JTlRFUihQRU1fVVNFUikpLAotICAgICgnbnVtX3JlY2lwaWVudCcsIGNfaW50KSwKLSAgICAoJ3JlY2lwaWVudCcsIFBPSU5URVIoUE9JTlRFUihQRU1fVVNFUikpKSwKLSAgICAoJ3g1MDlfY2hhaW4nLCBQT0lOVEVSKFNUQUNLKSksCi0gICAgKCdtZCcsIFBPSU5URVIoRVZQX01EKSksCi0gICAgKCdtZF9lbmMnLCBjX2ludCksCi0gICAgKCdtZF9sZW4nLCBjX2ludCksCi0gICAgKCdtZF9kYXRhJywgU1RSSU5HKSwKLSAgICAoJ2RlYycsIFBPSU5URVIoRVZQX0NJUEhFUikpLAotICAgICgna2V5X2xlbicsIGNfaW50KSwKLSAgICAoJ2tleScsIFBPSU5URVIoY191Ynl0ZSkpLAotICAgICgnZGF0YV9lbmMnLCBjX2ludCksCi0gICAgKCdkYXRhX2xlbicsIGNfaW50KSwKLSAgICAoJ2RhdGEnLCBQT0lOVEVSKGNfdWJ5dGUpKSwKLV0KLWFzc2VydCBzaXplb2YocGVtX2N0eF9zdCkgPT0gNzYsIHNpemVvZihwZW1fY3R4X3N0KQotYXNzZXJ0IGFsaWdubWVudChwZW1fY3R4X3N0KSA9PSA0LCBhbGlnbm1lbnQocGVtX2N0eF9zdCkKLVBFTV9DVFggPSBwZW1fY3R4X3N0Ci1wZW1fcGFzc3dvcmRfY2IgPSBDRlVOQ1RZUEUoY19pbnQsIFNUUklORywgY19pbnQsIGNfaW50LCBjX3ZvaWRfcCkKLWNsYXNzIHBrY3M3X2lzc3Vlcl9hbmRfc2VyaWFsX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotcGtjczdfaXNzdWVyX2FuZF9zZXJpYWxfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdpc3N1ZXInLCBQT0lOVEVSKFg1MDlfTkFNRSkpLAotICAgICgnc2VyaWFsJywgUE9JTlRFUihBU04xX0lOVEVHRVIpKSwKLV0KLWFzc2VydCBzaXplb2YocGtjczdfaXNzdWVyX2FuZF9zZXJpYWxfc3QpID09IDgsIHNpemVvZihwa2NzN19pc3N1ZXJfYW5kX3NlcmlhbF9zdCkKLWFzc2VydCBhbGlnbm1lbnQocGtjczdfaXNzdWVyX2FuZF9zZXJpYWxfc3QpID09IDQsIGFsaWdubWVudChwa2NzN19pc3N1ZXJfYW5kX3NlcmlhbF9zdCkKLVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMID0gcGtjczdfaXNzdWVyX2FuZF9zZXJpYWxfc3QKLWNsYXNzIHBrY3M3X3NpZ25lcl9pbmZvX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotcGtjczdfc2lnbmVyX2luZm9fc3QuX2ZpZWxkc18gPSBbCi0gICAgKCd2ZXJzaW9uJywgUE9JTlRFUihBU04xX0lOVEVHRVIpKSwKLSAgICAoJ2lzc3Vlcl9hbmRfc2VyaWFsJywgUE9JTlRFUihQS0NTN19JU1NVRVJfQU5EX1NFUklBTCkpLAotICAgICgnZGlnZXN0X2FsZycsIFBPSU5URVIoWDUwOV9BTEdPUikpLAotICAgICgnYXV0aF9hdHRyJywgUE9JTlRFUihTVEFDSykpLAotICAgICgnZGlnZXN0X2VuY19hbGcnLCBQT0lOVEVSKFg1MDlfQUxHT1IpKSwKLSAgICAoJ2VuY19kaWdlc3QnLCBQT0lOVEVSKEFTTjFfT0NURVRfU1RSSU5HKSksCi0gICAgKCd1bmF1dGhfYXR0cicsIFBPSU5URVIoU1RBQ0spKSwKLSAgICAoJ3BrZXknLCBQT0lOVEVSKEVWUF9QS0VZKSksCi1dCi1hc3NlcnQgc2l6ZW9mKHBrY3M3X3NpZ25lcl9pbmZvX3N0KSA9PSAzMiwgc2l6ZW9mKHBrY3M3X3NpZ25lcl9pbmZvX3N0KQotYXNzZXJ0IGFsaWdubWVudChwa2NzN19zaWduZXJfaW5mb19zdCkgPT0gNCwgYWxpZ25tZW50KHBrY3M3X3NpZ25lcl9pbmZvX3N0KQotUEtDUzdfU0lHTkVSX0lORk8gPSBwa2NzN19zaWduZXJfaW5mb19zdAotY2xhc3MgcGtjczdfcmVjaXBfaW5mb19zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXBrY3M3X3JlY2lwX2luZm9fc3QuX2ZpZWxkc18gPSBbCi0gICAgKCd2ZXJzaW9uJywgUE9JTlRFUihBU04xX0lOVEVHRVIpKSwKLSAgICAoJ2lzc3Vlcl9hbmRfc2VyaWFsJywgUE9JTlRFUihQS0NTN19JU1NVRVJfQU5EX1NFUklBTCkpLAotICAgICgna2V5X2VuY19hbGdvcicsIFBPSU5URVIoWDUwOV9BTEdPUikpLAotICAgICgnZW5jX2tleScsIFBPSU5URVIoQVNOMV9PQ1RFVF9TVFJJTkcpKSwKLSAgICAoJ2NlcnQnLCBQT0lOVEVSKFg1MDkpKSwKLV0KLWFzc2VydCBzaXplb2YocGtjczdfcmVjaXBfaW5mb19zdCkgPT0gMjAsIHNpemVvZihwa2NzN19yZWNpcF9pbmZvX3N0KQotYXNzZXJ0IGFsaWdubWVudChwa2NzN19yZWNpcF9pbmZvX3N0KSA9PSA0LCBhbGlnbm1lbnQocGtjczdfcmVjaXBfaW5mb19zdCkKLVBLQ1M3X1JFQ0lQX0lORk8gPSBwa2NzN19yZWNpcF9pbmZvX3N0Ci1jbGFzcyBwa2NzN19zaWduZWRfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1jbGFzcyBwa2NzN19zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXBrY3M3X3NpZ25lZF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ3ZlcnNpb24nLCBQT0lOVEVSKEFTTjFfSU5URUdFUikpLAotICAgICgnbWRfYWxncycsIFBPSU5URVIoU1RBQ0spKSwKLSAgICAoJ2NlcnQnLCBQT0lOVEVSKFNUQUNLKSksCi0gICAgKCdjcmwnLCBQT0lOVEVSKFNUQUNLKSksCi0gICAgKCdzaWduZXJfaW5mbycsIFBPSU5URVIoU1RBQ0spKSwKLSAgICAoJ2NvbnRlbnRzJywgUE9JTlRFUihwa2NzN19zdCkpLAotXQotYXNzZXJ0IHNpemVvZihwa2NzN19zaWduZWRfc3QpID09IDI0LCBzaXplb2YocGtjczdfc2lnbmVkX3N0KQotYXNzZXJ0IGFsaWdubWVudChwa2NzN19zaWduZWRfc3QpID09IDQsIGFsaWdubWVudChwa2NzN19zaWduZWRfc3QpCi1QS0NTN19TSUdORUQgPSBwa2NzN19zaWduZWRfc3QKLWNsYXNzIHBrY3M3X2VuY19jb250ZW50X3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotcGtjczdfZW5jX2NvbnRlbnRfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdjb250ZW50X3R5cGUnLCBQT0lOVEVSKEFTTjFfT0JKRUNUKSksCi0gICAgKCdhbGdvcml0aG0nLCBQT0lOVEVSKFg1MDlfQUxHT1IpKSwKLSAgICAoJ2VuY19kYXRhJywgUE9JTlRFUihBU04xX09DVEVUX1NUUklORykpLAotICAgICgnY2lwaGVyJywgUE9JTlRFUihFVlBfQ0lQSEVSKSksCi1dCi1hc3NlcnQgc2l6ZW9mKHBrY3M3X2VuY19jb250ZW50X3N0KSA9PSAxNiwgc2l6ZW9mKHBrY3M3X2VuY19jb250ZW50X3N0KQotYXNzZXJ0IGFsaWdubWVudChwa2NzN19lbmNfY29udGVudF9zdCkgPT0gNCwgYWxpZ25tZW50KHBrY3M3X2VuY19jb250ZW50X3N0KQotUEtDUzdfRU5DX0NPTlRFTlQgPSBwa2NzN19lbmNfY29udGVudF9zdAotY2xhc3MgcGtjczdfZW52ZWxvcGVkX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotcGtjczdfZW52ZWxvcGVkX3N0Ll9maWVsZHNfID0gWwotICAgICgndmVyc2lvbicsIFBPSU5URVIoQVNOMV9JTlRFR0VSKSksCi0gICAgKCdyZWNpcGllbnRpbmZvJywgUE9JTlRFUihTVEFDSykpLAotICAgICgnZW5jX2RhdGEnLCBQT0lOVEVSKFBLQ1M3X0VOQ19DT05URU5UKSksCi1dCi1hc3NlcnQgc2l6ZW9mKHBrY3M3X2VudmVsb3BlZF9zdCkgPT0gMTIsIHNpemVvZihwa2NzN19lbnZlbG9wZWRfc3QpCi1hc3NlcnQgYWxpZ25tZW50KHBrY3M3X2VudmVsb3BlZF9zdCkgPT0gNCwgYWxpZ25tZW50KHBrY3M3X2VudmVsb3BlZF9zdCkKLVBLQ1M3X0VOVkVMT1BFID0gcGtjczdfZW52ZWxvcGVkX3N0Ci1jbGFzcyBwa2NzN19zaWduZWRhbmRlbnZlbG9wZWRfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1wa2NzN19zaWduZWRhbmRlbnZlbG9wZWRfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCd2ZXJzaW9uJywgUE9JTlRFUihBU04xX0lOVEVHRVIpKSwKLSAgICAoJ21kX2FsZ3MnLCBQT0lOVEVSKFNUQUNLKSksCi0gICAgKCdjZXJ0JywgUE9JTlRFUihTVEFDSykpLAotICAgICgnY3JsJywgUE9JTlRFUihTVEFDSykpLAotICAgICgnc2lnbmVyX2luZm8nLCBQT0lOVEVSKFNUQUNLKSksCi0gICAgKCdlbmNfZGF0YScsIFBPSU5URVIoUEtDUzdfRU5DX0NPTlRFTlQpKSwKLSAgICAoJ3JlY2lwaWVudGluZm8nLCBQT0lOVEVSKFNUQUNLKSksCi1dCi1hc3NlcnQgc2l6ZW9mKHBrY3M3X3NpZ25lZGFuZGVudmVsb3BlZF9zdCkgPT0gMjgsIHNpemVvZihwa2NzN19zaWduZWRhbmRlbnZlbG9wZWRfc3QpCi1hc3NlcnQgYWxpZ25tZW50KHBrY3M3X3NpZ25lZGFuZGVudmVsb3BlZF9zdCkgPT0gNCwgYWxpZ25tZW50KHBrY3M3X3NpZ25lZGFuZGVudmVsb3BlZF9zdCkKLVBLQ1M3X1NJR05fRU5WRUxPUEUgPSBwa2NzN19zaWduZWRhbmRlbnZlbG9wZWRfc3QKLWNsYXNzIHBrY3M3X2RpZ2VzdF9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXBrY3M3X2RpZ2VzdF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ3ZlcnNpb24nLCBQT0lOVEVSKEFTTjFfSU5URUdFUikpLAotICAgICgnbWQnLCBQT0lOVEVSKFg1MDlfQUxHT1IpKSwKLSAgICAoJ2NvbnRlbnRzJywgUE9JTlRFUihwa2NzN19zdCkpLAotICAgICgnZGlnZXN0JywgUE9JTlRFUihBU04xX09DVEVUX1NUUklORykpLAotXQotYXNzZXJ0IHNpemVvZihwa2NzN19kaWdlc3Rfc3QpID09IDE2LCBzaXplb2YocGtjczdfZGlnZXN0X3N0KQotYXNzZXJ0IGFsaWdubWVudChwa2NzN19kaWdlc3Rfc3QpID09IDQsIGFsaWdubWVudChwa2NzN19kaWdlc3Rfc3QpCi1QS0NTN19ESUdFU1QgPSBwa2NzN19kaWdlc3Rfc3QKLWNsYXNzIHBrY3M3X2VuY3J5cHRlZF9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXBrY3M3X2VuY3J5cHRlZF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ3ZlcnNpb24nLCBQT0lOVEVSKEFTTjFfSU5URUdFUikpLAotICAgICgnZW5jX2RhdGEnLCBQT0lOVEVSKFBLQ1M3X0VOQ19DT05URU5UKSksCi1dCi1hc3NlcnQgc2l6ZW9mKHBrY3M3X2VuY3J5cHRlZF9zdCkgPT0gOCwgc2l6ZW9mKHBrY3M3X2VuY3J5cHRlZF9zdCkKLWFzc2VydCBhbGlnbm1lbnQocGtjczdfZW5jcnlwdGVkX3N0KSA9PSA0LCBhbGlnbm1lbnQocGtjczdfZW5jcnlwdGVkX3N0KQotUEtDUzdfRU5DUllQVCA9IHBrY3M3X2VuY3J5cHRlZF9zdAotY2xhc3MgTjhwa2NzN19zdDRET0xMQVJfMTVFKFVuaW9uKToKLSAgICBwYXNzCi1OOHBrY3M3X3N0NERPTExBUl8xNUUuX2ZpZWxkc18gPSBbCi0gICAgKCdwdHInLCBTVFJJTkcpLAotICAgICgnZGF0YScsIFBPSU5URVIoQVNOMV9PQ1RFVF9TVFJJTkcpKSwKLSAgICAoJ3NpZ24nLCBQT0lOVEVSKFBLQ1M3X1NJR05FRCkpLAotICAgICgnZW52ZWxvcGVkJywgUE9JTlRFUihQS0NTN19FTlZFTE9QRSkpLAotICAgICgnc2lnbmVkX2FuZF9lbnZlbG9wZWQnLCBQT0lOVEVSKFBLQ1M3X1NJR05fRU5WRUxPUEUpKSwKLSAgICAoJ2RpZ2VzdCcsIFBPSU5URVIoUEtDUzdfRElHRVNUKSksCi0gICAgKCdlbmNyeXB0ZWQnLCBQT0lOVEVSKFBLQ1M3X0VOQ1JZUFQpKSwKLSAgICAoJ290aGVyJywgUE9JTlRFUihBU04xX1RZUEUpKSwKLV0KLWFzc2VydCBzaXplb2YoTjhwa2NzN19zdDRET0xMQVJfMTVFKSA9PSA0LCBzaXplb2YoTjhwa2NzN19zdDRET0xMQVJfMTVFKQotYXNzZXJ0IGFsaWdubWVudChOOHBrY3M3X3N0NERPTExBUl8xNUUpID09IDQsIGFsaWdubWVudChOOHBrY3M3X3N0NERPTExBUl8xNUUpCi1wa2NzN19zdC5fZmllbGRzXyA9IFsKLSAgICAoJ2FzbjEnLCBQT0lOVEVSKGNfdWJ5dGUpKSwKLSAgICAoJ2xlbmd0aCcsIGNfbG9uZyksCi0gICAgKCdzdGF0ZScsIGNfaW50KSwKLSAgICAoJ2RldGFjaGVkJywgY19pbnQpLAotICAgICgndHlwZScsIFBPSU5URVIoQVNOMV9PQkpFQ1QpKSwKLSAgICAoJ2QnLCBOOHBrY3M3X3N0NERPTExBUl8xNUUpLAotXQotYXNzZXJ0IHNpemVvZihwa2NzN19zdCkgPT0gMjQsIHNpemVvZihwa2NzN19zdCkKLWFzc2VydCBhbGlnbm1lbnQocGtjczdfc3QpID09IDQsIGFsaWdubWVudChwa2NzN19zdCkKLVBLQ1M3ID0gcGtjczdfc3QKLWNsYXNzIHJjMl9rZXlfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1yYzJfa2V5X3N0Ll9maWVsZHNfID0gWwotICAgICgnZGF0YScsIGNfdWludCAqIDY0KSwKLV0KLWFzc2VydCBzaXplb2YocmMyX2tleV9zdCkgPT0gMjU2LCBzaXplb2YocmMyX2tleV9zdCkKLWFzc2VydCBhbGlnbm1lbnQocmMyX2tleV9zdCkgPT0gNCwgYWxpZ25tZW50KHJjMl9rZXlfc3QpCi1SQzJfS0VZID0gcmMyX2tleV9zdAotY2xhc3MgcmM0X2tleV9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXJjNF9rZXlfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCd4JywgY191Ynl0ZSksCi0gICAgKCd5JywgY191Ynl0ZSksCi0gICAgKCdkYXRhJywgY191Ynl0ZSAqIDI1NiksCi1dCi1hc3NlcnQgc2l6ZW9mKHJjNF9rZXlfc3QpID09IDI1OCwgc2l6ZW9mKHJjNF9rZXlfc3QpCi1hc3NlcnQgYWxpZ25tZW50KHJjNF9rZXlfc3QpID09IDEsIGFsaWdubWVudChyYzRfa2V5X3N0KQotUkM0X0tFWSA9IHJjNF9rZXlfc3QKLWNsYXNzIHJjNV9rZXlfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1yYzVfa2V5X3N0Ll9maWVsZHNfID0gWwotICAgICgncm91bmRzJywgY19pbnQpLAotICAgICgnZGF0YScsIGNfdWxvbmcgKiAzNCksCi1dCi1hc3NlcnQgc2l6ZW9mKHJjNV9rZXlfc3QpID09IDE0MCwgc2l6ZW9mKHJjNV9rZXlfc3QpCi1hc3NlcnQgYWxpZ25tZW50KHJjNV9rZXlfc3QpID09IDQsIGFsaWdubWVudChyYzVfa2V5X3N0KQotUkM1XzMyX0tFWSA9IHJjNV9rZXlfc3QKLWNsYXNzIFJJUEVNRDE2MHN0YXRlX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotUklQRU1EMTYwc3RhdGVfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdBJywgY191aW50KSwKLSAgICAoJ0InLCBjX3VpbnQpLAotICAgICgnQycsIGNfdWludCksCi0gICAgKCdEJywgY191aW50KSwKLSAgICAoJ0UnLCBjX3VpbnQpLAotICAgICgnTmwnLCBjX3VpbnQpLAotICAgICgnTmgnLCBjX3VpbnQpLAotICAgICgnZGF0YScsIGNfdWludCAqIDE2KSwKLSAgICAoJ251bScsIGNfaW50KSwKLV0KLWFzc2VydCBzaXplb2YoUklQRU1EMTYwc3RhdGVfc3QpID09IDk2LCBzaXplb2YoUklQRU1EMTYwc3RhdGVfc3QpCi1hc3NlcnQgYWxpZ25tZW50KFJJUEVNRDE2MHN0YXRlX3N0KSA9PSA0LCBhbGlnbm1lbnQoUklQRU1EMTYwc3RhdGVfc3QpCi1SSVBFTUQxNjBfQ1RYID0gUklQRU1EMTYwc3RhdGVfc3QKLVJTQSA9IHJzYV9zdAotY2xhc3MgcnNhX21ldGhfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1yc2FfbWV0aF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ25hbWUnLCBTVFJJTkcpLAotICAgICgncnNhX3B1Yl9lbmMnLCBDRlVOQ1RZUEUoY19pbnQsIGNfaW50LCBQT0lOVEVSKGNfdWJ5dGUpLCBQT0lOVEVSKGNfdWJ5dGUpLCBQT0lOVEVSKFJTQSksIGNfaW50KSksCi0gICAgKCdyc2FfcHViX2RlYycsIENGVU5DVFlQRShjX2ludCwgY19pbnQsIFBPSU5URVIoY191Ynl0ZSksIFBPSU5URVIoY191Ynl0ZSksIFBPSU5URVIoUlNBKSwgY19pbnQpKSwKLSAgICAoJ3JzYV9wcml2X2VuYycsIENGVU5DVFlQRShjX2ludCwgY19pbnQsIFBPSU5URVIoY191Ynl0ZSksIFBPSU5URVIoY191Ynl0ZSksIFBPSU5URVIoUlNBKSwgY19pbnQpKSwKLSAgICAoJ3JzYV9wcml2X2RlYycsIENGVU5DVFlQRShjX2ludCwgY19pbnQsIFBPSU5URVIoY191Ynl0ZSksIFBPSU5URVIoY191Ynl0ZSksIFBPSU5URVIoUlNBKSwgY19pbnQpKSwKLSAgICAoJ3JzYV9tb2RfZXhwJywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKEJJR05VTSksIFBPSU5URVIoQklHTlVNKSwgUE9JTlRFUihSU0EpKSksCi0gICAgKCdibl9tb2RfZXhwJywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKEJJR05VTSksIFBPSU5URVIoQklHTlVNKSwgUE9JTlRFUihCSUdOVU0pLCBQT0lOVEVSKEJJR05VTSksIFBPSU5URVIoQk5fQ1RYKSwgUE9JTlRFUihCTl9NT05UX0NUWCkpKSwKLSAgICAoJ2luaXQnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoUlNBKSkpLAotICAgICgnZmluaXNoJywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKFJTQSkpKSwKLSAgICAoJ2ZsYWdzJywgY19pbnQpLAotICAgICgnYXBwX2RhdGEnLCBTVFJJTkcpLAotICAgICgncnNhX3NpZ24nLCBDRlVOQ1RZUEUoY19pbnQsIGNfaW50LCBQT0lOVEVSKGNfdWJ5dGUpLCBjX3VpbnQsIFBPSU5URVIoY191Ynl0ZSksIFBPSU5URVIoY191aW50KSwgUE9JTlRFUihSU0EpKSksCi0gICAgKCdyc2FfdmVyaWZ5JywgQ0ZVTkNUWVBFKGNfaW50LCBjX2ludCwgUE9JTlRFUihjX3VieXRlKSwgY191aW50LCBQT0lOVEVSKGNfdWJ5dGUpLCBjX3VpbnQsIFBPSU5URVIoUlNBKSkpLAotXQotYXNzZXJ0IHNpemVvZihyc2FfbWV0aF9zdCkgPT0gNTIsIHNpemVvZihyc2FfbWV0aF9zdCkKLWFzc2VydCBhbGlnbm1lbnQocnNhX21ldGhfc3QpID09IDQsIGFsaWdubWVudChyc2FfbWV0aF9zdCkKLVJTQV9NRVRIT0QgPSByc2FfbWV0aF9zdAotcnNhX3N0Ll9maWVsZHNfID0gWwotICAgICgncGFkJywgY19pbnQpLAotICAgICgndmVyc2lvbicsIGNfbG9uZyksCi0gICAgKCdtZXRoJywgUE9JTlRFUihSU0FfTUVUSE9EKSksCi0gICAgKCdlbmdpbmUnLCBQT0lOVEVSKEVOR0lORSkpLAotICAgICgnbicsIFBPSU5URVIoQklHTlVNKSksCi0gICAgKCdlJywgUE9JTlRFUihCSUdOVU0pKSwKLSAgICAoJ2QnLCBQT0lOVEVSKEJJR05VTSkpLAotICAgICgncCcsIFBPSU5URVIoQklHTlVNKSksCi0gICAgKCdxJywgUE9JTlRFUihCSUdOVU0pKSwKLSAgICAoJ2RtcDEnLCBQT0lOVEVSKEJJR05VTSkpLAotICAgICgnZG1xMScsIFBPSU5URVIoQklHTlVNKSksCi0gICAgKCdpcW1wJywgUE9JTlRFUihCSUdOVU0pKSwKLSAgICAoJ2V4X2RhdGEnLCBDUllQVE9fRVhfREFUQSksCi0gICAgKCdyZWZlcmVuY2VzJywgY19pbnQpLAotICAgICgnZmxhZ3MnLCBjX2ludCksCi0gICAgKCdfbWV0aG9kX21vZF9uJywgUE9JTlRFUihCTl9NT05UX0NUWCkpLAotICAgICgnX21ldGhvZF9tb2RfcCcsIFBPSU5URVIoQk5fTU9OVF9DVFgpKSwKLSAgICAoJ19tZXRob2RfbW9kX3EnLCBQT0lOVEVSKEJOX01PTlRfQ1RYKSksCi0gICAgKCdiaWdudW1fZGF0YScsIFNUUklORyksCi0gICAgKCdibGluZGluZycsIFBPSU5URVIoQk5fQkxJTkRJTkcpKSwKLV0KLWFzc2VydCBzaXplb2YocnNhX3N0KSA9PSA4NCwgc2l6ZW9mKHJzYV9zdCkKLWFzc2VydCBhbGlnbm1lbnQocnNhX3N0KSA9PSA0LCBhbGlnbm1lbnQocnNhX3N0KQotb3BlbnNzbF9mcHRyID0gQ0ZVTkNUWVBFKE5vbmUpCi1jbGFzcyBTSEFzdGF0ZV9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLVNIQXN0YXRlX3N0Ll9maWVsZHNfID0gWwotICAgICgnaDAnLCBjX3VpbnQpLAotICAgICgnaDEnLCBjX3VpbnQpLAotICAgICgnaDInLCBjX3VpbnQpLAotICAgICgnaDMnLCBjX3VpbnQpLAotICAgICgnaDQnLCBjX3VpbnQpLAotICAgICgnTmwnLCBjX3VpbnQpLAotICAgICgnTmgnLCBjX3VpbnQpLAotICAgICgnZGF0YScsIGNfdWludCAqIDE2KSwKLSAgICAoJ251bScsIGNfaW50KSwKLV0KLWFzc2VydCBzaXplb2YoU0hBc3RhdGVfc3QpID09IDk2LCBzaXplb2YoU0hBc3RhdGVfc3QpCi1hc3NlcnQgYWxpZ25tZW50KFNIQXN0YXRlX3N0KSA9PSA0LCBhbGlnbm1lbnQoU0hBc3RhdGVfc3QpCi1TSEFfQ1RYID0gU0hBc3RhdGVfc3QKLWNsYXNzIHNzbF9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXNzbF9jcm9ja19zdCA9IFBPSU5URVIoc3NsX3N0KQotY2xhc3Mgc3NsX2NpcGhlcl9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXNzbF9jaXBoZXJfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCd2YWxpZCcsIGNfaW50KSwKLSAgICAoJ25hbWUnLCBTVFJJTkcpLAotICAgICgnaWQnLCBjX3Vsb25nKSwKLSAgICAoJ2FsZ29yaXRobXMnLCBjX3Vsb25nKSwKLSAgICAoJ2FsZ29fc3RyZW5ndGgnLCBjX3Vsb25nKSwKLSAgICAoJ2FsZ29yaXRobTInLCBjX3Vsb25nKSwKLSAgICAoJ3N0cmVuZ3RoX2JpdHMnLCBjX2ludCksCi0gICAgKCdhbGdfYml0cycsIGNfaW50KSwKLSAgICAoJ21hc2snLCBjX3Vsb25nKSwKLSAgICAoJ21hc2tfc3RyZW5ndGgnLCBjX3Vsb25nKSwKLV0KLWFzc2VydCBzaXplb2Yoc3NsX2NpcGhlcl9zdCkgPT0gNDAsIHNpemVvZihzc2xfY2lwaGVyX3N0KQotYXNzZXJ0IGFsaWdubWVudChzc2xfY2lwaGVyX3N0KSA9PSA0LCBhbGlnbm1lbnQoc3NsX2NpcGhlcl9zdCkKLVNTTF9DSVBIRVIgPSBzc2xfY2lwaGVyX3N0Ci1TU0wgPSBzc2xfc3QKLWNsYXNzIHNzbF9jdHhfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1TU0xfQ1RYID0gc3NsX2N0eF9zdAotY2xhc3Mgc3NsX21ldGhvZF9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLWNsYXNzIHNzbDNfZW5jX21ldGhvZChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXNzbF9tZXRob2Rfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCd2ZXJzaW9uJywgY19pbnQpLAotICAgICgnc3NsX25ldycsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihTU0wpKSksCi0gICAgKCdzc2xfY2xlYXInLCBDRlVOQ1RZUEUoTm9uZSwgUE9JTlRFUihTU0wpKSksCi0gICAgKCdzc2xfZnJlZScsIENGVU5DVFlQRShOb25lLCBQT0lOVEVSKFNTTCkpKSwKLSAgICAoJ3NzbF9hY2NlcHQnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoU1NMKSkpLAotICAgICgnc3NsX2Nvbm5lY3QnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoU1NMKSkpLAotICAgICgnc3NsX3JlYWQnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoU1NMKSwgY192b2lkX3AsIGNfaW50KSksCi0gICAgKCdzc2xfcGVlaycsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihTU0wpLCBjX3ZvaWRfcCwgY19pbnQpKSwKLSAgICAoJ3NzbF93cml0ZScsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihTU0wpLCBjX3ZvaWRfcCwgY19pbnQpKSwKLSAgICAoJ3NzbF9zaHV0ZG93bicsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihTU0wpKSksCi0gICAgKCdzc2xfcmVuZWdvdGlhdGUnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoU1NMKSkpLAotICAgICgnc3NsX3JlbmVnb3RpYXRlX2NoZWNrJywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKFNTTCkpKSwKLSAgICAoJ3NzbF9jdHJsJywgQ0ZVTkNUWVBFKGNfbG9uZywgUE9JTlRFUihTU0wpLCBjX2ludCwgY19sb25nLCBjX3ZvaWRfcCkpLAotICAgICgnc3NsX2N0eF9jdHJsJywgQ0ZVTkNUWVBFKGNfbG9uZywgUE9JTlRFUihTU0xfQ1RYKSwgY19pbnQsIGNfbG9uZywgY192b2lkX3ApKSwKLSAgICAoJ2dldF9jaXBoZXJfYnlfY2hhcicsIENGVU5DVFlQRShQT0lOVEVSKFNTTF9DSVBIRVIpLCBQT0lOVEVSKGNfdWJ5dGUpKSksCi0gICAgKCdwdXRfY2lwaGVyX2J5X2NoYXInLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoU1NMX0NJUEhFUiksIFBPSU5URVIoY191Ynl0ZSkpKSwKLSAgICAoJ3NzbF9wZW5kaW5nJywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKFNTTCkpKSwKLSAgICAoJ251bV9jaXBoZXJzJywgQ0ZVTkNUWVBFKGNfaW50KSksCi0gICAgKCdnZXRfY2lwaGVyJywgQ0ZVTkNUWVBFKFBPSU5URVIoU1NMX0NJUEhFUiksIGNfdWludCkpLAotICAgICgnZ2V0X3NzbF9tZXRob2QnLCBDRlVOQ1RZUEUoUE9JTlRFUihzc2xfbWV0aG9kX3N0KSwgY19pbnQpKSwKLSAgICAoJ2dldF90aW1lb3V0JywgQ0ZVTkNUWVBFKGNfbG9uZykpLAotICAgICgnc3NsM19lbmMnLCBQT0lOVEVSKHNzbDNfZW5jX21ldGhvZCkpLAotICAgICgnc3NsX3ZlcnNpb24nLCBDRlVOQ1RZUEUoY19pbnQpKSwKLSAgICAoJ3NzbF9jYWxsYmFja19jdHJsJywgQ0ZVTkNUWVBFKGNfbG9uZywgUE9JTlRFUihTU0wpLCBjX2ludCwgQ0ZVTkNUWVBFKE5vbmUpKSksCi0gICAgKCdzc2xfY3R4X2NhbGxiYWNrX2N0cmwnLCBDRlVOQ1RZUEUoY19sb25nLCBQT0lOVEVSKFNTTF9DVFgpLCBjX2ludCwgQ0ZVTkNUWVBFKE5vbmUpKSksCi1dCi1hc3NlcnQgc2l6ZW9mKHNzbF9tZXRob2Rfc3QpID09IDEwMCwgc2l6ZW9mKHNzbF9tZXRob2Rfc3QpCi1hc3NlcnQgYWxpZ25tZW50KHNzbF9tZXRob2Rfc3QpID09IDQsIGFsaWdubWVudChzc2xfbWV0aG9kX3N0KQotc3NsM19lbmNfbWV0aG9kLl9maWVsZHNfID0gWwotXQotU1NMX01FVEhPRCA9IHNzbF9tZXRob2Rfc3QKLWNsYXNzIHNzbF9zZXNzaW9uX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotY2xhc3Mgc2Vzc19jZXJ0X3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotc3NsX3Nlc3Npb25fc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdzc2xfdmVyc2lvbicsIGNfaW50KSwKLSAgICAoJ2tleV9hcmdfbGVuZ3RoJywgY191aW50KSwKLSAgICAoJ2tleV9hcmcnLCBjX3VieXRlICogOCksCi0gICAgKCdtYXN0ZXJfa2V5X2xlbmd0aCcsIGNfaW50KSwKLSAgICAoJ21hc3Rlcl9rZXknLCBjX3VieXRlICogNDgpLAotICAgICgnc2Vzc2lvbl9pZF9sZW5ndGgnLCBjX3VpbnQpLAotICAgICgnc2Vzc2lvbl9pZCcsIGNfdWJ5dGUgKiAzMiksCi0gICAgKCdzaWRfY3R4X2xlbmd0aCcsIGNfdWludCksCi0gICAgKCdzaWRfY3R4JywgY191Ynl0ZSAqIDMyKSwKLSAgICAoJ25vdF9yZXN1bWFibGUnLCBjX2ludCksCi0gICAgKCdzZXNzX2NlcnQnLCBQT0lOVEVSKHNlc3NfY2VydF9zdCkpLAotICAgICgncGVlcicsIFBPSU5URVIoWDUwOSkpLAotICAgICgndmVyaWZ5X3Jlc3VsdCcsIGNfbG9uZyksCi0gICAgKCdyZWZlcmVuY2VzJywgY19pbnQpLAotICAgICgndGltZW91dCcsIGNfbG9uZyksCi0gICAgKCd0aW1lJywgY19sb25nKSwKLSAgICAoJ2NvbXByZXNzX21ldGgnLCBjX2ludCksCi0gICAgKCdjaXBoZXInLCBQT0lOVEVSKFNTTF9DSVBIRVIpKSwKLSAgICAoJ2NpcGhlcl9pZCcsIGNfdWxvbmcpLAotICAgICgnY2lwaGVycycsIFBPSU5URVIoU1RBQ0spKSwKLSAgICAoJ2V4X2RhdGEnLCBDUllQVE9fRVhfREFUQSksCi0gICAgKCdwcmV2JywgUE9JTlRFUihzc2xfc2Vzc2lvbl9zdCkpLAotICAgICgnbmV4dCcsIFBPSU5URVIoc3NsX3Nlc3Npb25fc3QpKSwKLV0KLWFzc2VydCBzaXplb2Yoc3NsX3Nlc3Npb25fc3QpID09IDIwMCwgc2l6ZW9mKHNzbF9zZXNzaW9uX3N0KQotYXNzZXJ0IGFsaWdubWVudChzc2xfc2Vzc2lvbl9zdCkgPT0gNCwgYWxpZ25tZW50KHNzbF9zZXNzaW9uX3N0KQotc2Vzc19jZXJ0X3N0Ll9maWVsZHNfID0gWwotXQotU1NMX1NFU1NJT04gPSBzc2xfc2Vzc2lvbl9zdAotR0VOX1NFU1NJT05fQ0IgPSBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoU1NMKSwgUE9JTlRFUihjX3VieXRlKSwgUE9JTlRFUihjX3VpbnQpKQotY2xhc3Mgc3NsX2NvbXBfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1zc2xfY29tcF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ2lkJywgY19pbnQpLAotICAgICgnbmFtZScsIFNUUklORyksCi0gICAgKCdtZXRob2QnLCBQT0lOVEVSKENPTVBfTUVUSE9EKSksCi1dCi1hc3NlcnQgc2l6ZW9mKHNzbF9jb21wX3N0KSA9PSAxMiwgc2l6ZW9mKHNzbF9jb21wX3N0KQotYXNzZXJ0IGFsaWdubWVudChzc2xfY29tcF9zdCkgPT0gNCwgYWxpZ25tZW50KHNzbF9jb21wX3N0KQotU1NMX0NPTVAgPSBzc2xfY29tcF9zdAotY2xhc3MgTjEwc3NsX2N0eF9zdDRET0xMQVJfMThFKFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotTjEwc3NsX2N0eF9zdDRET0xMQVJfMThFLl9maWVsZHNfID0gWwotICAgICgnc2Vzc19jb25uZWN0JywgY19pbnQpLAotICAgICgnc2Vzc19jb25uZWN0X3JlbmVnb3RpYXRlJywgY19pbnQpLAotICAgICgnc2Vzc19jb25uZWN0X2dvb2QnLCBjX2ludCksCi0gICAgKCdzZXNzX2FjY2VwdCcsIGNfaW50KSwKLSAgICAoJ3Nlc3NfYWNjZXB0X3JlbmVnb3RpYXRlJywgY19pbnQpLAotICAgICgnc2Vzc19hY2NlcHRfZ29vZCcsIGNfaW50KSwKLSAgICAoJ3Nlc3NfbWlzcycsIGNfaW50KSwKLSAgICAoJ3Nlc3NfdGltZW91dCcsIGNfaW50KSwKLSAgICAoJ3Nlc3NfY2FjaGVfZnVsbCcsIGNfaW50KSwKLSAgICAoJ3Nlc3NfaGl0JywgY19pbnQpLAotICAgICgnc2Vzc19jYl9oaXQnLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKE4xMHNzbF9jdHhfc3Q0RE9MTEFSXzE4RSkgPT0gNDQsIHNpemVvZihOMTBzc2xfY3R4X3N0NERPTExBUl8xOEUpCi1hc3NlcnQgYWxpZ25tZW50KE4xMHNzbF9jdHhfc3Q0RE9MTEFSXzE4RSkgPT0gNCwgYWxpZ25tZW50KE4xMHNzbF9jdHhfc3Q0RE9MTEFSXzE4RSkKLWNsYXNzIGNlcnRfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1zc2xfY3R4X3N0Ll9maWVsZHNfID0gWwotICAgICgnbWV0aG9kJywgUE9JTlRFUihTU0xfTUVUSE9EKSksCi0gICAgKCdjaXBoZXJfbGlzdCcsIFBPSU5URVIoU1RBQ0spKSwKLSAgICAoJ2NpcGhlcl9saXN0X2J5X2lkJywgUE9JTlRFUihTVEFDSykpLAotICAgICgnY2VydF9zdG9yZScsIFBPSU5URVIoeDUwOV9zdG9yZV9zdCkpLAotICAgICgnc2Vzc2lvbnMnLCBQT0lOVEVSKGxoYXNoX3N0KSksCi0gICAgKCdzZXNzaW9uX2NhY2hlX3NpemUnLCBjX3Vsb25nKSwKLSAgICAoJ3Nlc3Npb25fY2FjaGVfaGVhZCcsIFBPSU5URVIoc3NsX3Nlc3Npb25fc3QpKSwKLSAgICAoJ3Nlc3Npb25fY2FjaGVfdGFpbCcsIFBPSU5URVIoc3NsX3Nlc3Npb25fc3QpKSwKLSAgICAoJ3Nlc3Npb25fY2FjaGVfbW9kZScsIGNfaW50KSwKLSAgICAoJ3Nlc3Npb25fdGltZW91dCcsIGNfbG9uZyksCi0gICAgKCduZXdfc2Vzc2lvbl9jYicsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihzc2xfc3QpLCBQT0lOVEVSKFNTTF9TRVNTSU9OKSkpLAotICAgICgncmVtb3ZlX3Nlc3Npb25fY2InLCBDRlVOQ1RZUEUoTm9uZSwgUE9JTlRFUihzc2xfY3R4X3N0KSwgUE9JTlRFUihTU0xfU0VTU0lPTikpKSwKLSAgICAoJ2dldF9zZXNzaW9uX2NiJywgQ0ZVTkNUWVBFKFBPSU5URVIoU1NMX1NFU1NJT04pLCBQT0lOVEVSKHNzbF9zdCksIFBPSU5URVIoY191Ynl0ZSksIGNfaW50LCBQT0lOVEVSKGNfaW50KSkpLAotICAgICgnc3RhdHMnLCBOMTBzc2xfY3R4X3N0NERPTExBUl8xOEUpLAotICAgICgncmVmZXJlbmNlcycsIGNfaW50KSwKLSAgICAoJ2FwcF92ZXJpZnlfY2FsbGJhY2snLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoWDUwOV9TVE9SRV9DVFgpLCBjX3ZvaWRfcCkpLAotICAgICgnYXBwX3ZlcmlmeV9hcmcnLCBjX3ZvaWRfcCksCi0gICAgKCdkZWZhdWx0X3Bhc3N3ZF9jYWxsYmFjaycsIFBPSU5URVIocGVtX3Bhc3N3b3JkX2NiKSksCi0gICAgKCdkZWZhdWx0X3Bhc3N3ZF9jYWxsYmFja191c2VyZGF0YScsIGNfdm9pZF9wKSwKLSAgICAoJ2NsaWVudF9jZXJ0X2NiJywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKFNTTCksIFBPSU5URVIoUE9JTlRFUihYNTA5KSksIFBPSU5URVIoUE9JTlRFUihFVlBfUEtFWSkpKSksCi0gICAgKCdleF9kYXRhJywgQ1JZUFRPX0VYX0RBVEEpLAotICAgICgncnNhX21kNScsIFBPSU5URVIoRVZQX01EKSksCi0gICAgKCdtZDUnLCBQT0lOVEVSKEVWUF9NRCkpLAotICAgICgnc2hhMScsIFBPSU5URVIoRVZQX01EKSksCi0gICAgKCdleHRyYV9jZXJ0cycsIFBPSU5URVIoU1RBQ0spKSwKLSAgICAoJ2NvbXBfbWV0aG9kcycsIFBPSU5URVIoU1RBQ0spKSwKLSAgICAoJ2luZm9fY2FsbGJhY2snLCBDRlVOQ1RZUEUoTm9uZSwgUE9JTlRFUihTU0wpLCBjX2ludCwgY19pbnQpKSwKLSAgICAoJ2NsaWVudF9DQScsIFBPSU5URVIoU1RBQ0spKSwKLSAgICAoJ29wdGlvbnMnLCBjX3Vsb25nKSwKLSAgICAoJ21vZGUnLCBjX3Vsb25nKSwKLSAgICAoJ21heF9jZXJ0X2xpc3QnLCBjX2xvbmcpLAotICAgICgnY2VydCcsIFBPSU5URVIoY2VydF9zdCkpLAotICAgICgncmVhZF9haGVhZCcsIGNfaW50KSwKLSAgICAoJ21zZ19jYWxsYmFjaycsIENGVU5DVFlQRShOb25lLCBjX2ludCwgY19pbnQsIGNfaW50LCBjX3ZvaWRfcCwgY191bG9uZywgUE9JTlRFUihTU0wpLCBjX3ZvaWRfcCkpLAotICAgICgnbXNnX2NhbGxiYWNrX2FyZycsIGNfdm9pZF9wKSwKLSAgICAoJ3ZlcmlmeV9tb2RlJywgY19pbnQpLAotICAgICgndmVyaWZ5X2RlcHRoJywgY19pbnQpLAotICAgICgnc2lkX2N0eF9sZW5ndGgnLCBjX3VpbnQpLAotICAgICgnc2lkX2N0eCcsIGNfdWJ5dGUgKiAzMiksCi0gICAgKCdkZWZhdWx0X3ZlcmlmeV9jYWxsYmFjaycsIENGVU5DVFlQRShjX2ludCwgY19pbnQsIFBPSU5URVIoWDUwOV9TVE9SRV9DVFgpKSksCi0gICAgKCdnZW5lcmF0ZV9zZXNzaW9uX2lkJywgR0VOX1NFU1NJT05fQ0IpLAotICAgICgncHVycG9zZScsIGNfaW50KSwKLSAgICAoJ3RydXN0JywgY19pbnQpLAotICAgICgncXVpZXRfc2h1dGRvd24nLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKHNzbF9jdHhfc3QpID09IDI0OCwgc2l6ZW9mKHNzbF9jdHhfc3QpCi1hc3NlcnQgYWxpZ25tZW50KHNzbF9jdHhfc3QpID09IDQsIGFsaWdubWVudChzc2xfY3R4X3N0KQotY2VydF9zdC5fZmllbGRzXyA9IFsKLV0KLWNsYXNzIHNzbDJfc3RhdGVfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1jbGFzcyBzc2wzX3N0YXRlX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotc3NsX3N0Ll9maWVsZHNfID0gWwotICAgICgndmVyc2lvbicsIGNfaW50KSwKLSAgICAoJ3R5cGUnLCBjX2ludCksCi0gICAgKCdtZXRob2QnLCBQT0lOVEVSKFNTTF9NRVRIT0QpKSwKLSAgICAoJ3JiaW8nLCBQT0lOVEVSKEJJTykpLAotICAgICgnd2JpbycsIFBPSU5URVIoQklPKSksCi0gICAgKCdiYmlvJywgUE9JTlRFUihCSU8pKSwKLSAgICAoJ3J3c3RhdGUnLCBjX2ludCksCi0gICAgKCdpbl9oYW5kc2hha2UnLCBjX2ludCksCi0gICAgKCdoYW5kc2hha2VfZnVuYycsIENGVU5DVFlQRShjX2ludCkpLAotICAgICgnc2VydmVyJywgY19pbnQpLAotICAgICgnbmV3X3Nlc3Npb24nLCBjX2ludCksCi0gICAgKCdxdWlldF9zaHV0ZG93bicsIGNfaW50KSwKLSAgICAoJ3NodXRkb3duJywgY19pbnQpLAotICAgICgnc3RhdGUnLCBjX2ludCksCi0gICAgKCdyc3RhdGUnLCBjX2ludCksCi0gICAgKCdpbml0X2J1ZicsIFBPSU5URVIoQlVGX01FTSkpLAotICAgICgnaW5pdF9tc2cnLCBjX3ZvaWRfcCksCi0gICAgKCdpbml0X251bScsIGNfaW50KSwKLSAgICAoJ2luaXRfb2ZmJywgY19pbnQpLAotICAgICgncGFja2V0JywgUE9JTlRFUihjX3VieXRlKSksCi0gICAgKCdwYWNrZXRfbGVuZ3RoJywgY191aW50KSwKLSAgICAoJ3MyJywgUE9JTlRFUihzc2wyX3N0YXRlX3N0KSksCi0gICAgKCdzMycsIFBPSU5URVIoc3NsM19zdGF0ZV9zdCkpLAotICAgICgncmVhZF9haGVhZCcsIGNfaW50KSwKLSAgICAoJ21zZ19jYWxsYmFjaycsIENGVU5DVFlQRShOb25lLCBjX2ludCwgY19pbnQsIGNfaW50LCBjX3ZvaWRfcCwgY191bG9uZywgUE9JTlRFUihTU0wpLCBjX3ZvaWRfcCkpLAotICAgICgnbXNnX2NhbGxiYWNrX2FyZycsIGNfdm9pZF9wKSwKLSAgICAoJ2hpdCcsIGNfaW50KSwKLSAgICAoJ3B1cnBvc2UnLCBjX2ludCksCi0gICAgKCd0cnVzdCcsIGNfaW50KSwKLSAgICAoJ2NpcGhlcl9saXN0JywgUE9JTlRFUihTVEFDSykpLAotICAgICgnY2lwaGVyX2xpc3RfYnlfaWQnLCBQT0lOVEVSKFNUQUNLKSksCi0gICAgKCdlbmNfcmVhZF9jdHgnLCBQT0lOVEVSKEVWUF9DSVBIRVJfQ1RYKSksCi0gICAgKCdyZWFkX2hhc2gnLCBQT0lOVEVSKEVWUF9NRCkpLAotICAgICgnZXhwYW5kJywgUE9JTlRFUihDT01QX0NUWCkpLAotICAgICgnZW5jX3dyaXRlX2N0eCcsIFBPSU5URVIoRVZQX0NJUEhFUl9DVFgpKSwKLSAgICAoJ3dyaXRlX2hhc2gnLCBQT0lOVEVSKEVWUF9NRCkpLAotICAgICgnY29tcHJlc3MnLCBQT0lOVEVSKENPTVBfQ1RYKSksCi0gICAgKCdjZXJ0JywgUE9JTlRFUihjZXJ0X3N0KSksCi0gICAgKCdzaWRfY3R4X2xlbmd0aCcsIGNfdWludCksCi0gICAgKCdzaWRfY3R4JywgY191Ynl0ZSAqIDMyKSwKLSAgICAoJ3Nlc3Npb24nLCBQT0lOVEVSKFNTTF9TRVNTSU9OKSksCi0gICAgKCdnZW5lcmF0ZV9zZXNzaW9uX2lkJywgR0VOX1NFU1NJT05fQ0IpLAotICAgICgndmVyaWZ5X21vZGUnLCBjX2ludCksCi0gICAgKCd2ZXJpZnlfZGVwdGgnLCBjX2ludCksCi0gICAgKCd2ZXJpZnlfY2FsbGJhY2snLCBDRlVOQ1RZUEUoY19pbnQsIGNfaW50LCBQT0lOVEVSKFg1MDlfU1RPUkVfQ1RYKSkpLAotICAgICgnaW5mb19jYWxsYmFjaycsIENGVU5DVFlQRShOb25lLCBQT0lOVEVSKFNTTCksIGNfaW50LCBjX2ludCkpLAotICAgICgnZXJyb3InLCBjX2ludCksCi0gICAgKCdlcnJvcl9jb2RlJywgY19pbnQpLAotICAgICgnY3R4JywgUE9JTlRFUihTU0xfQ1RYKSksCi0gICAgKCdkZWJ1ZycsIGNfaW50KSwKLSAgICAoJ3ZlcmlmeV9yZXN1bHQnLCBjX2xvbmcpLAotICAgICgnZXhfZGF0YScsIENSWVBUT19FWF9EQVRBKSwKLSAgICAoJ2NsaWVudF9DQScsIFBPSU5URVIoU1RBQ0spKSwKLSAgICAoJ3JlZmVyZW5jZXMnLCBjX2ludCksCi0gICAgKCdvcHRpb25zJywgY191bG9uZyksCi0gICAgKCdtb2RlJywgY191bG9uZyksCi0gICAgKCdtYXhfY2VydF9saXN0JywgY19sb25nKSwKLSAgICAoJ2ZpcnN0X3BhY2tldCcsIGNfaW50KSwKLSAgICAoJ2NsaWVudF92ZXJzaW9uJywgY19pbnQpLAotXQotYXNzZXJ0IHNpemVvZihzc2xfc3QpID09IDI2OCwgc2l6ZW9mKHNzbF9zdCkKLWFzc2VydCBhbGlnbm1lbnQoc3NsX3N0KSA9PSA0LCBhbGlnbm1lbnQoc3NsX3N0KQotY2xhc3MgTjEzc3NsMl9zdGF0ZV9zdDRET0xMQVJfMTlFKFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotTjEzc3NsMl9zdGF0ZV9zdDRET0xMQVJfMTlFLl9maWVsZHNfID0gWwotICAgICgnY29ubl9pZF9sZW5ndGgnLCBjX3VpbnQpLAotICAgICgnY2VydF90eXBlJywgY191aW50KSwKLSAgICAoJ2NlcnRfbGVuZ3RoJywgY191aW50KSwKLSAgICAoJ2NzbCcsIGNfdWludCksCi0gICAgKCdjbGVhcicsIGNfdWludCksCi0gICAgKCdlbmMnLCBjX3VpbnQpLAotICAgICgnY2NsJywgY191Ynl0ZSAqIDMyKSwKLSAgICAoJ2NpcGhlcl9zcGVjX2xlbmd0aCcsIGNfdWludCksCi0gICAgKCdzZXNzaW9uX2lkX2xlbmd0aCcsIGNfdWludCksCi0gICAgKCdjbGVuJywgY191aW50KSwKLSAgICAoJ3JsZW4nLCBjX3VpbnQpLAotXQotYXNzZXJ0IHNpemVvZihOMTNzc2wyX3N0YXRlX3N0NERPTExBUl8xOUUpID09IDcyLCBzaXplb2YoTjEzc3NsMl9zdGF0ZV9zdDRET0xMQVJfMTlFKQotYXNzZXJ0IGFsaWdubWVudChOMTNzc2wyX3N0YXRlX3N0NERPTExBUl8xOUUpID09IDQsIGFsaWdubWVudChOMTNzc2wyX3N0YXRlX3N0NERPTExBUl8xOUUpCi1zc2wyX3N0YXRlX3N0Ll9maWVsZHNfID0gWwotICAgICgndGhyZWVfYnl0ZV9oZWFkZXInLCBjX2ludCksCi0gICAgKCdjbGVhcl90ZXh0JywgY19pbnQpLAotICAgICgnZXNjYXBlJywgY19pbnQpLAotICAgICgnc3NsMl9yb2xsYmFjaycsIGNfaW50KSwKLSAgICAoJ3dudW0nLCBjX3VpbnQpLAotICAgICgnd3BlbmRfdG90JywgY19pbnQpLAotICAgICgnd3BlbmRfYnVmJywgUE9JTlRFUihjX3VieXRlKSksCi0gICAgKCd3cGVuZF9vZmYnLCBjX2ludCksCi0gICAgKCd3cGVuZF9sZW4nLCBjX2ludCksCi0gICAgKCd3cGVuZF9yZXQnLCBjX2ludCksCi0gICAgKCdyYnVmX2xlZnQnLCBjX2ludCksCi0gICAgKCdyYnVmX29mZnMnLCBjX2ludCksCi0gICAgKCdyYnVmJywgUE9JTlRFUihjX3VieXRlKSksCi0gICAgKCd3YnVmJywgUE9JTlRFUihjX3VieXRlKSksCi0gICAgKCd3cml0ZV9wdHInLCBQT0lOVEVSKGNfdWJ5dGUpKSwKLSAgICAoJ3BhZGRpbmcnLCBjX3VpbnQpLAotICAgICgncmxlbmd0aCcsIGNfdWludCksCi0gICAgKCdyYWN0X2RhdGFfbGVuZ3RoJywgY19pbnQpLAotICAgICgnd2xlbmd0aCcsIGNfdWludCksCi0gICAgKCd3YWN0X2RhdGFfbGVuZ3RoJywgY19pbnQpLAotICAgICgncmFjdF9kYXRhJywgUE9JTlRFUihjX3VieXRlKSksCi0gICAgKCd3YWN0X2RhdGEnLCBQT0lOVEVSKGNfdWJ5dGUpKSwKLSAgICAoJ21hY19kYXRhJywgUE9JTlRFUihjX3VieXRlKSksCi0gICAgKCdyZWFkX2tleScsIFBPSU5URVIoY191Ynl0ZSkpLAotICAgICgnd3JpdGVfa2V5JywgUE9JTlRFUihjX3VieXRlKSksCi0gICAgKCdjaGFsbGVuZ2VfbGVuZ3RoJywgY191aW50KSwKLSAgICAoJ2NoYWxsZW5nZScsIGNfdWJ5dGUgKiAzMiksCi0gICAgKCdjb25uX2lkX2xlbmd0aCcsIGNfdWludCksCi0gICAgKCdjb25uX2lkJywgY191Ynl0ZSAqIDE2KSwKLSAgICAoJ2tleV9tYXRlcmlhbF9sZW5ndGgnLCBjX3VpbnQpLAotICAgICgna2V5X21hdGVyaWFsJywgY191Ynl0ZSAqIDQ4KSwKLSAgICAoJ3JlYWRfc2VxdWVuY2UnLCBjX3Vsb25nKSwKLSAgICAoJ3dyaXRlX3NlcXVlbmNlJywgY191bG9uZyksCi0gICAgKCd0bXAnLCBOMTNzc2wyX3N0YXRlX3N0NERPTExBUl8xOUUpLAotXQotYXNzZXJ0IHNpemVvZihzc2wyX3N0YXRlX3N0KSA9PSAyODgsIHNpemVvZihzc2wyX3N0YXRlX3N0KQotYXNzZXJ0IGFsaWdubWVudChzc2wyX3N0YXRlX3N0KSA9PSA0LCBhbGlnbm1lbnQoc3NsMl9zdGF0ZV9zdCkKLVNTTDJfU1RBVEUgPSBzc2wyX3N0YXRlX3N0Ci1jbGFzcyBzc2wzX3JlY29yZF9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXNzbDNfcmVjb3JkX3N0Ll9maWVsZHNfID0gWwotICAgICgndHlwZScsIGNfaW50KSwKLSAgICAoJ2xlbmd0aCcsIGNfdWludCksCi0gICAgKCdvZmYnLCBjX3VpbnQpLAotICAgICgnZGF0YScsIFBPSU5URVIoY191Ynl0ZSkpLAotICAgICgnaW5wdXQnLCBQT0lOVEVSKGNfdWJ5dGUpKSwKLSAgICAoJ2NvbXAnLCBQT0lOVEVSKGNfdWJ5dGUpKSwKLV0KLWFzc2VydCBzaXplb2Yoc3NsM19yZWNvcmRfc3QpID09IDI0LCBzaXplb2Yoc3NsM19yZWNvcmRfc3QpCi1hc3NlcnQgYWxpZ25tZW50KHNzbDNfcmVjb3JkX3N0KSA9PSA0LCBhbGlnbm1lbnQoc3NsM19yZWNvcmRfc3QpCi1TU0wzX1JFQ09SRCA9IHNzbDNfcmVjb3JkX3N0Ci1jbGFzcyBzc2wzX2J1ZmZlcl9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXNpemVfdCA9IF9fZGFyd2luX3NpemVfdAotc3NsM19idWZmZXJfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdidWYnLCBQT0lOVEVSKGNfdWJ5dGUpKSwKLSAgICAoJ2xlbicsIHNpemVfdCksCi0gICAgKCdvZmZzZXQnLCBjX2ludCksCi0gICAgKCdsZWZ0JywgY19pbnQpLAotXQotYXNzZXJ0IHNpemVvZihzc2wzX2J1ZmZlcl9zdCkgPT0gMTYsIHNpemVvZihzc2wzX2J1ZmZlcl9zdCkKLWFzc2VydCBhbGlnbm1lbnQoc3NsM19idWZmZXJfc3QpID09IDQsIGFsaWdubWVudChzc2wzX2J1ZmZlcl9zdCkKLVNTTDNfQlVGRkVSID0gc3NsM19idWZmZXJfc3QKLWNsYXNzIE4xM3NzbDNfc3RhdGVfc3Q0RE9MTEFSXzIwRShTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLU4xM3NzbDNfc3RhdGVfc3Q0RE9MTEFSXzIwRS5fZmllbGRzXyA9IFsKLSAgICAoJ2NlcnRfdmVyaWZ5X21kJywgY191Ynl0ZSAqIDcyKSwKLSAgICAoJ2ZpbmlzaF9tZCcsIGNfdWJ5dGUgKiA3MiksCi0gICAgKCdmaW5pc2hfbWRfbGVuJywgY19pbnQpLAotICAgICgncGVlcl9maW5pc2hfbWQnLCBjX3VieXRlICogNzIpLAotICAgICgncGVlcl9maW5pc2hfbWRfbGVuJywgY19pbnQpLAotICAgICgnbWVzc2FnZV9zaXplJywgY191bG9uZyksCi0gICAgKCdtZXNzYWdlX3R5cGUnLCBjX2ludCksCi0gICAgKCduZXdfY2lwaGVyJywgUE9JTlRFUihTU0xfQ0lQSEVSKSksCi0gICAgKCdkaCcsIFBPSU5URVIoREgpKSwKLSAgICAoJ25leHRfc3RhdGUnLCBjX2ludCksCi0gICAgKCdyZXVzZV9tZXNzYWdlJywgY19pbnQpLAotICAgICgnY2VydF9yZXEnLCBjX2ludCksCi0gICAgKCdjdHlwZV9udW0nLCBjX2ludCksCi0gICAgKCdjdHlwZScsIGNfY2hhciAqIDcpLAotICAgICgnY2FfbmFtZXMnLCBQT0lOVEVSKFNUQUNLKSksCi0gICAgKCd1c2VfcnNhX3RtcCcsIGNfaW50KSwKLSAgICAoJ2tleV9ibG9ja19sZW5ndGgnLCBjX2ludCksCi0gICAgKCdrZXlfYmxvY2snLCBQT0lOVEVSKGNfdWJ5dGUpKSwKLSAgICAoJ25ld19zeW1fZW5jJywgUE9JTlRFUihFVlBfQ0lQSEVSKSksCi0gICAgKCduZXdfaGFzaCcsIFBPSU5URVIoRVZQX01EKSksCi0gICAgKCduZXdfY29tcHJlc3Npb24nLCBQT0lOVEVSKFNTTF9DT01QKSksCi0gICAgKCdjZXJ0X3JlcXVlc3QnLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKE4xM3NzbDNfc3RhdGVfc3Q0RE9MTEFSXzIwRSkgPT0gMjk2LCBzaXplb2YoTjEzc3NsM19zdGF0ZV9zdDRET0xMQVJfMjBFKQotYXNzZXJ0IGFsaWdubWVudChOMTNzc2wzX3N0YXRlX3N0NERPTExBUl8yMEUpID09IDQsIGFsaWdubWVudChOMTNzc2wzX3N0YXRlX3N0NERPTExBUl8yMEUpCi1zc2wzX3N0YXRlX3N0Ll9maWVsZHNfID0gWwotICAgICgnZmxhZ3MnLCBjX2xvbmcpLAotICAgICgnZGVsYXlfYnVmX3BvcF9yZXQnLCBjX2ludCksCi0gICAgKCdyZWFkX3NlcXVlbmNlJywgY191Ynl0ZSAqIDgpLAotICAgICgncmVhZF9tYWNfc2VjcmV0JywgY191Ynl0ZSAqIDM2KSwKLSAgICAoJ3dyaXRlX3NlcXVlbmNlJywgY191Ynl0ZSAqIDgpLAotICAgICgnd3JpdGVfbWFjX3NlY3JldCcsIGNfdWJ5dGUgKiAzNiksCi0gICAgKCdzZXJ2ZXJfcmFuZG9tJywgY191Ynl0ZSAqIDMyKSwKLSAgICAoJ2NsaWVudF9yYW5kb20nLCBjX3VieXRlICogMzIpLAotICAgICgnbmVlZF9lbXB0eV9mcmFnbWVudHMnLCBjX2ludCksCi0gICAgKCdlbXB0eV9mcmFnbWVudF9kb25lJywgY19pbnQpLAotICAgICgncmJ1ZicsIFNTTDNfQlVGRkVSKSwKLSAgICAoJ3didWYnLCBTU0wzX0JVRkZFUiksCi0gICAgKCdycmVjJywgU1NMM19SRUNPUkQpLAotICAgICgnd3JlYycsIFNTTDNfUkVDT1JEKSwKLSAgICAoJ2FsZXJ0X2ZyYWdtZW50JywgY191Ynl0ZSAqIDIpLAotICAgICgnYWxlcnRfZnJhZ21lbnRfbGVuJywgY191aW50KSwKLSAgICAoJ2hhbmRzaGFrZV9mcmFnbWVudCcsIGNfdWJ5dGUgKiA0KSwKLSAgICAoJ2hhbmRzaGFrZV9mcmFnbWVudF9sZW4nLCBjX3VpbnQpLAotICAgICgnd251bScsIGNfdWludCksCi0gICAgKCd3cGVuZF90b3QnLCBjX2ludCksCi0gICAgKCd3cGVuZF90eXBlJywgY19pbnQpLAotICAgICgnd3BlbmRfcmV0JywgY19pbnQpLAotICAgICgnd3BlbmRfYnVmJywgUE9JTlRFUihjX3VieXRlKSksCi0gICAgKCdmaW5pc2hfZGdzdDEnLCBFVlBfTURfQ1RYKSwKLSAgICAoJ2ZpbmlzaF9kZ3N0MicsIEVWUF9NRF9DVFgpLAotICAgICgnY2hhbmdlX2NpcGhlcl9zcGVjJywgY19pbnQpLAotICAgICgnd2Fybl9hbGVydCcsIGNfaW50KSwKLSAgICAoJ2ZhdGFsX2FsZXJ0JywgY19pbnQpLAotICAgICgnYWxlcnRfZGlzcGF0Y2gnLCBjX2ludCksCi0gICAgKCdzZW5kX2FsZXJ0JywgY191Ynl0ZSAqIDIpLAotICAgICgncmVuZWdvdGlhdGUnLCBjX2ludCksCi0gICAgKCd0b3RhbF9yZW5lZ290aWF0aW9ucycsIGNfaW50KSwKLSAgICAoJ251bV9yZW5lZ290aWF0aW9ucycsIGNfaW50KSwKLSAgICAoJ2luX3JlYWRfYXBwX2RhdGEnLCBjX2ludCksCi0gICAgKCd0bXAnLCBOMTNzc2wzX3N0YXRlX3N0NERPTExBUl8yMEUpLAotXQotYXNzZXJ0IHNpemVvZihzc2wzX3N0YXRlX3N0KSA9PSA2NDgsIHNpemVvZihzc2wzX3N0YXRlX3N0KQotYXNzZXJ0IGFsaWdubWVudChzc2wzX3N0YXRlX3N0KSA9PSA0LCBhbGlnbm1lbnQoc3NsM19zdGF0ZV9zdCkKLVNTTDNfU1RBVEUgPSBzc2wzX3N0YXRlX3N0Ci1zdGFja19zdC5fZmllbGRzXyA9IFsKLSAgICAoJ251bScsIGNfaW50KSwKLSAgICAoJ2RhdGEnLCBQT0lOVEVSKFNUUklORykpLAotICAgICgnc29ydGVkJywgY19pbnQpLAotICAgICgnbnVtX2FsbG9jJywgY19pbnQpLAotICAgICgnY29tcCcsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihTVFJJTkcpLCBQT0lOVEVSKFNUUklORykpKSwKLV0KLWFzc2VydCBzaXplb2Yoc3RhY2tfc3QpID09IDIwLCBzaXplb2Yoc3RhY2tfc3QpCi1hc3NlcnQgYWxpZ25tZW50KHN0YWNrX3N0KSA9PSA0LCBhbGlnbm1lbnQoc3RhY2tfc3QpCi1jbGFzcyB1aV9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXVpX3N0Ll9maWVsZHNfID0gWwotXQotVUkgPSB1aV9zdAotY2xhc3MgdWlfbWV0aG9kX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotdWlfbWV0aG9kX3N0Ll9maWVsZHNfID0gWwotXQotVUlfTUVUSE9EID0gdWlfbWV0aG9kX3N0Ci1jbGFzcyB1aV9zdHJpbmdfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi11aV9zdHJpbmdfc3QuX2ZpZWxkc18gPSBbCi1dCi1VSV9TVFJJTkcgPSB1aV9zdHJpbmdfc3QKLQotIyB2YWx1ZXMgZm9yIGVudW1lcmF0aW9uICdVSV9zdHJpbmdfdHlwZXMnCi1VSV9zdHJpbmdfdHlwZXMgPSBjX2ludCAjIGVudW0KLWNsYXNzIFg1MDlfb2JqZWN0c19zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLVg1MDlfb2JqZWN0c19zdC5fZmllbGRzXyA9IFsKLSAgICAoJ25pZCcsIGNfaW50KSwKLSAgICAoJ2EyaScsIENGVU5DVFlQRShjX2ludCkpLAotICAgICgnaTJhJywgQ0ZVTkNUWVBFKGNfaW50KSksCi1dCi1hc3NlcnQgc2l6ZW9mKFg1MDlfb2JqZWN0c19zdCkgPT0gMTIsIHNpemVvZihYNTA5X29iamVjdHNfc3QpCi1hc3NlcnQgYWxpZ25tZW50KFg1MDlfb2JqZWN0c19zdCkgPT0gNCwgYWxpZ25tZW50KFg1MDlfb2JqZWN0c19zdCkKLVg1MDlfT0JKRUNUUyA9IFg1MDlfb2JqZWN0c19zdAotWDUwOV9hbGdvcl9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ2FsZ29yaXRobScsIFBPSU5URVIoQVNOMV9PQkpFQ1QpKSwKLSAgICAoJ3BhcmFtZXRlcicsIFBPSU5URVIoQVNOMV9UWVBFKSksCi1dCi1hc3NlcnQgc2l6ZW9mKFg1MDlfYWxnb3Jfc3QpID09IDgsIHNpemVvZihYNTA5X2FsZ29yX3N0KQotYXNzZXJ0IGFsaWdubWVudChYNTA5X2FsZ29yX3N0KSA9PSA0LCBhbGlnbm1lbnQoWDUwOV9hbGdvcl9zdCkKLWNsYXNzIFg1MDlfdmFsX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotWDUwOV92YWxfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdub3RCZWZvcmUnLCBQT0lOVEVSKEFTTjFfVElNRSkpLAotICAgICgnbm90QWZ0ZXInLCBQT0lOVEVSKEFTTjFfVElNRSkpLAotXQotYXNzZXJ0IHNpemVvZihYNTA5X3ZhbF9zdCkgPT0gOCwgc2l6ZW9mKFg1MDlfdmFsX3N0KQotYXNzZXJ0IGFsaWdubWVudChYNTA5X3ZhbF9zdCkgPT0gNCwgYWxpZ25tZW50KFg1MDlfdmFsX3N0KQotWDUwOV9WQUwgPSBYNTA5X3ZhbF9zdAotY2xhc3MgWDUwOV9wdWJrZXlfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1YNTA5X3B1YmtleV9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ2FsZ29yJywgUE9JTlRFUihYNTA5X0FMR09SKSksCi0gICAgKCdwdWJsaWNfa2V5JywgUE9JTlRFUihBU04xX0JJVF9TVFJJTkcpKSwKLSAgICAoJ3BrZXknLCBQT0lOVEVSKEVWUF9QS0VZKSksCi1dCi1hc3NlcnQgc2l6ZW9mKFg1MDlfcHVia2V5X3N0KSA9PSAxMiwgc2l6ZW9mKFg1MDlfcHVia2V5X3N0KQotYXNzZXJ0IGFsaWdubWVudChYNTA5X3B1YmtleV9zdCkgPT0gNCwgYWxpZ25tZW50KFg1MDlfcHVia2V5X3N0KQotWDUwOV9QVUJLRVkgPSBYNTA5X3B1YmtleV9zdAotY2xhc3MgWDUwOV9zaWdfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1YNTA5X3NpZ19zdC5fZmllbGRzXyA9IFsKLSAgICAoJ2FsZ29yJywgUE9JTlRFUihYNTA5X0FMR09SKSksCi0gICAgKCdkaWdlc3QnLCBQT0lOVEVSKEFTTjFfT0NURVRfU1RSSU5HKSksCi1dCi1hc3NlcnQgc2l6ZW9mKFg1MDlfc2lnX3N0KSA9PSA4LCBzaXplb2YoWDUwOV9zaWdfc3QpCi1hc3NlcnQgYWxpZ25tZW50KFg1MDlfc2lnX3N0KSA9PSA0LCBhbGlnbm1lbnQoWDUwOV9zaWdfc3QpCi1YNTA5X1NJRyA9IFg1MDlfc2lnX3N0Ci1jbGFzcyBYNTA5X25hbWVfZW50cnlfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1YNTA5X25hbWVfZW50cnlfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdvYmplY3QnLCBQT0lOVEVSKEFTTjFfT0JKRUNUKSksCi0gICAgKCd2YWx1ZScsIFBPSU5URVIoQVNOMV9TVFJJTkcpKSwKLSAgICAoJ3NldCcsIGNfaW50KSwKLSAgICAoJ3NpemUnLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKFg1MDlfbmFtZV9lbnRyeV9zdCkgPT0gMTYsIHNpemVvZihYNTA5X25hbWVfZW50cnlfc3QpCi1hc3NlcnQgYWxpZ25tZW50KFg1MDlfbmFtZV9lbnRyeV9zdCkgPT0gNCwgYWxpZ25tZW50KFg1MDlfbmFtZV9lbnRyeV9zdCkKLVg1MDlfTkFNRV9FTlRSWSA9IFg1MDlfbmFtZV9lbnRyeV9zdAotWDUwOV9uYW1lX3N0Ll9maWVsZHNfID0gWwotICAgICgnZW50cmllcycsIFBPSU5URVIoU1RBQ0spKSwKLSAgICAoJ21vZGlmaWVkJywgY19pbnQpLAotICAgICgnYnl0ZXMnLCBQT0lOVEVSKEJVRl9NRU0pKSwKLSAgICAoJ2hhc2gnLCBjX3Vsb25nKSwKLV0KLWFzc2VydCBzaXplb2YoWDUwOV9uYW1lX3N0KSA9PSAxNiwgc2l6ZW9mKFg1MDlfbmFtZV9zdCkKLWFzc2VydCBhbGlnbm1lbnQoWDUwOV9uYW1lX3N0KSA9PSA0LCBhbGlnbm1lbnQoWDUwOV9uYW1lX3N0KQotY2xhc3MgWDUwOV9leHRlbnNpb25fc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1YNTA5X2V4dGVuc2lvbl9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ29iamVjdCcsIFBPSU5URVIoQVNOMV9PQkpFQ1QpKSwKLSAgICAoJ2NyaXRpY2FsJywgQVNOMV9CT09MRUFOKSwKLSAgICAoJ3ZhbHVlJywgUE9JTlRFUihBU04xX09DVEVUX1NUUklORykpLAotXQotYXNzZXJ0IHNpemVvZihYNTA5X2V4dGVuc2lvbl9zdCkgPT0gMTIsIHNpemVvZihYNTA5X2V4dGVuc2lvbl9zdCkKLWFzc2VydCBhbGlnbm1lbnQoWDUwOV9leHRlbnNpb25fc3QpID09IDQsIGFsaWdubWVudChYNTA5X2V4dGVuc2lvbl9zdCkKLVg1MDlfRVhURU5TSU9OID0gWDUwOV9leHRlbnNpb25fc3QKLWNsYXNzIHg1MDlfYXR0cmlidXRlc19zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLWNsYXNzIE4xOHg1MDlfYXR0cmlidXRlc19zdDRET0xMQVJfMTNFKFVuaW9uKToKLSAgICBwYXNzCi1OMTh4NTA5X2F0dHJpYnV0ZXNfc3Q0RE9MTEFSXzEzRS5fZmllbGRzXyA9IFsKLSAgICAoJ3B0cicsIFNUUklORyksCi0gICAgKCdzZXQnLCBQT0lOVEVSKFNUQUNLKSksCi0gICAgKCdzaW5nbGUnLCBQT0lOVEVSKEFTTjFfVFlQRSkpLAotXQotYXNzZXJ0IHNpemVvZihOMTh4NTA5X2F0dHJpYnV0ZXNfc3Q0RE9MTEFSXzEzRSkgPT0gNCwgc2l6ZW9mKE4xOHg1MDlfYXR0cmlidXRlc19zdDRET0xMQVJfMTNFKQotYXNzZXJ0IGFsaWdubWVudChOMTh4NTA5X2F0dHJpYnV0ZXNfc3Q0RE9MTEFSXzEzRSkgPT0gNCwgYWxpZ25tZW50KE4xOHg1MDlfYXR0cmlidXRlc19zdDRET0xMQVJfMTNFKQoteDUwOV9hdHRyaWJ1dGVzX3N0Ll9maWVsZHNfID0gWwotICAgICgnb2JqZWN0JywgUE9JTlRFUihBU04xX09CSkVDVCkpLAotICAgICgnc2luZ2xlJywgY19pbnQpLAotICAgICgndmFsdWUnLCBOMTh4NTA5X2F0dHJpYnV0ZXNfc3Q0RE9MTEFSXzEzRSksCi1dCi1hc3NlcnQgc2l6ZW9mKHg1MDlfYXR0cmlidXRlc19zdCkgPT0gMTIsIHNpemVvZih4NTA5X2F0dHJpYnV0ZXNfc3QpCi1hc3NlcnQgYWxpZ25tZW50KHg1MDlfYXR0cmlidXRlc19zdCkgPT0gNCwgYWxpZ25tZW50KHg1MDlfYXR0cmlidXRlc19zdCkKLVg1MDlfQVRUUklCVVRFID0geDUwOV9hdHRyaWJ1dGVzX3N0Ci1jbGFzcyBYNTA5X3JlcV9pbmZvX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotWDUwOV9yZXFfaW5mb19zdC5fZmllbGRzXyA9IFsKLSAgICAoJ2VuYycsIEFTTjFfRU5DT0RJTkcpLAotICAgICgndmVyc2lvbicsIFBPSU5URVIoQVNOMV9JTlRFR0VSKSksCi0gICAgKCdzdWJqZWN0JywgUE9JTlRFUihYNTA5X05BTUUpKSwKLSAgICAoJ3B1YmtleScsIFBPSU5URVIoWDUwOV9QVUJLRVkpKSwKLSAgICAoJ2F0dHJpYnV0ZXMnLCBQT0lOVEVSKFNUQUNLKSksCi1dCi1hc3NlcnQgc2l6ZW9mKFg1MDlfcmVxX2luZm9fc3QpID09IDI4LCBzaXplb2YoWDUwOV9yZXFfaW5mb19zdCkKLWFzc2VydCBhbGlnbm1lbnQoWDUwOV9yZXFfaW5mb19zdCkgPT0gNCwgYWxpZ25tZW50KFg1MDlfcmVxX2luZm9fc3QpCi1YNTA5X1JFUV9JTkZPID0gWDUwOV9yZXFfaW5mb19zdAotY2xhc3MgWDUwOV9yZXFfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1YNTA5X3JlcV9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ3JlcV9pbmZvJywgUE9JTlRFUihYNTA5X1JFUV9JTkZPKSksCi0gICAgKCdzaWdfYWxnJywgUE9JTlRFUihYNTA5X0FMR09SKSksCi0gICAgKCdzaWduYXR1cmUnLCBQT0lOVEVSKEFTTjFfQklUX1NUUklORykpLAotICAgICgncmVmZXJlbmNlcycsIGNfaW50KSwKLV0KLWFzc2VydCBzaXplb2YoWDUwOV9yZXFfc3QpID09IDE2LCBzaXplb2YoWDUwOV9yZXFfc3QpCi1hc3NlcnQgYWxpZ25tZW50KFg1MDlfcmVxX3N0KSA9PSA0LCBhbGlnbm1lbnQoWDUwOV9yZXFfc3QpCi1YNTA5X1JFUSA9IFg1MDlfcmVxX3N0Ci1jbGFzcyB4NTA5X2NpbmZfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi14NTA5X2NpbmZfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCd2ZXJzaW9uJywgUE9JTlRFUihBU04xX0lOVEVHRVIpKSwKLSAgICAoJ3NlcmlhbE51bWJlcicsIFBPSU5URVIoQVNOMV9JTlRFR0VSKSksCi0gICAgKCdzaWduYXR1cmUnLCBQT0lOVEVSKFg1MDlfQUxHT1IpKSwKLSAgICAoJ2lzc3VlcicsIFBPSU5URVIoWDUwOV9OQU1FKSksCi0gICAgKCd2YWxpZGl0eScsIFBPSU5URVIoWDUwOV9WQUwpKSwKLSAgICAoJ3N1YmplY3QnLCBQT0lOVEVSKFg1MDlfTkFNRSkpLAotICAgICgna2V5JywgUE9JTlRFUihYNTA5X1BVQktFWSkpLAotICAgICgnaXNzdWVyVUlEJywgUE9JTlRFUihBU04xX0JJVF9TVFJJTkcpKSwKLSAgICAoJ3N1YmplY3RVSUQnLCBQT0lOVEVSKEFTTjFfQklUX1NUUklORykpLAotICAgICgnZXh0ZW5zaW9ucycsIFBPSU5URVIoU1RBQ0spKSwKLV0KLWFzc2VydCBzaXplb2YoeDUwOV9jaW5mX3N0KSA9PSA0MCwgc2l6ZW9mKHg1MDlfY2luZl9zdCkKLWFzc2VydCBhbGlnbm1lbnQoeDUwOV9jaW5mX3N0KSA9PSA0LCBhbGlnbm1lbnQoeDUwOV9jaW5mX3N0KQotWDUwOV9DSU5GID0geDUwOV9jaW5mX3N0Ci1jbGFzcyB4NTA5X2NlcnRfYXV4X3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwoteDUwOV9jZXJ0X2F1eF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ3RydXN0JywgUE9JTlRFUihTVEFDSykpLAotICAgICgncmVqZWN0JywgUE9JTlRFUihTVEFDSykpLAotICAgICgnYWxpYXMnLCBQT0lOVEVSKEFTTjFfVVRGOFNUUklORykpLAotICAgICgna2V5aWQnLCBQT0lOVEVSKEFTTjFfT0NURVRfU1RSSU5HKSksCi0gICAgKCdvdGhlcicsIFBPSU5URVIoU1RBQ0spKSwKLV0KLWFzc2VydCBzaXplb2YoeDUwOV9jZXJ0X2F1eF9zdCkgPT0gMjAsIHNpemVvZih4NTA5X2NlcnRfYXV4X3N0KQotYXNzZXJ0IGFsaWdubWVudCh4NTA5X2NlcnRfYXV4X3N0KSA9PSA0LCBhbGlnbm1lbnQoeDUwOV9jZXJ0X2F1eF9zdCkKLVg1MDlfQ0VSVF9BVVggPSB4NTA5X2NlcnRfYXV4X3N0Ci1jbGFzcyBBVVRIT1JJVFlfS0VZSURfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi14NTA5X3N0Ll9maWVsZHNfID0gWwotICAgICgnY2VydF9pbmZvJywgUE9JTlRFUihYNTA5X0NJTkYpKSwKLSAgICAoJ3NpZ19hbGcnLCBQT0lOVEVSKFg1MDlfQUxHT1IpKSwKLSAgICAoJ3NpZ25hdHVyZScsIFBPSU5URVIoQVNOMV9CSVRfU1RSSU5HKSksCi0gICAgKCd2YWxpZCcsIGNfaW50KSwKLSAgICAoJ3JlZmVyZW5jZXMnLCBjX2ludCksCi0gICAgKCduYW1lJywgU1RSSU5HKSwKLSAgICAoJ2V4X2RhdGEnLCBDUllQVE9fRVhfREFUQSksCi0gICAgKCdleF9wYXRobGVuJywgY19sb25nKSwKLSAgICAoJ2V4X2ZsYWdzJywgY191bG9uZyksCi0gICAgKCdleF9rdXNhZ2UnLCBjX3Vsb25nKSwKLSAgICAoJ2V4X3hrdXNhZ2UnLCBjX3Vsb25nKSwKLSAgICAoJ2V4X25zY2VydCcsIGNfdWxvbmcpLAotICAgICgnc2tpZCcsIFBPSU5URVIoQVNOMV9PQ1RFVF9TVFJJTkcpKSwKLSAgICAoJ2FraWQnLCBQT0lOVEVSKEFVVEhPUklUWV9LRVlJRF9zdCkpLAotICAgICgnc2hhMV9oYXNoJywgY191Ynl0ZSAqIDIwKSwKLSAgICAoJ2F1eCcsIFBPSU5URVIoWDUwOV9DRVJUX0FVWCkpLAotXQotYXNzZXJ0IHNpemVvZih4NTA5X3N0KSA9PSA4NCwgc2l6ZW9mKHg1MDlfc3QpCi1hc3NlcnQgYWxpZ25tZW50KHg1MDlfc3QpID09IDQsIGFsaWdubWVudCh4NTA5X3N0KQotQVVUSE9SSVRZX0tFWUlEX3N0Ll9maWVsZHNfID0gWwotXQotY2xhc3MgeDUwOV90cnVzdF9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXg1MDlfdHJ1c3Rfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCd0cnVzdCcsIGNfaW50KSwKLSAgICAoJ2ZsYWdzJywgY19pbnQpLAotICAgICgnY2hlY2tfdHJ1c3QnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoeDUwOV90cnVzdF9zdCksIFBPSU5URVIoWDUwOSksIGNfaW50KSksCi0gICAgKCduYW1lJywgU1RSSU5HKSwKLSAgICAoJ2FyZzEnLCBjX2ludCksCi0gICAgKCdhcmcyJywgY192b2lkX3ApLAotXQotYXNzZXJ0IHNpemVvZih4NTA5X3RydXN0X3N0KSA9PSAyNCwgc2l6ZW9mKHg1MDlfdHJ1c3Rfc3QpCi1hc3NlcnQgYWxpZ25tZW50KHg1MDlfdHJ1c3Rfc3QpID09IDQsIGFsaWdubWVudCh4NTA5X3RydXN0X3N0KQotWDUwOV9UUlVTVCA9IHg1MDlfdHJ1c3Rfc3QKLWNsYXNzIFg1MDlfcmV2b2tlZF9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLVg1MDlfcmV2b2tlZF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ3NlcmlhbE51bWJlcicsIFBPSU5URVIoQVNOMV9JTlRFR0VSKSksCi0gICAgKCdyZXZvY2F0aW9uRGF0ZScsIFBPSU5URVIoQVNOMV9USU1FKSksCi0gICAgKCdleHRlbnNpb25zJywgUE9JTlRFUihTVEFDSykpLAotICAgICgnc2VxdWVuY2UnLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKFg1MDlfcmV2b2tlZF9zdCkgPT0gMTYsIHNpemVvZihYNTA5X3Jldm9rZWRfc3QpCi1hc3NlcnQgYWxpZ25tZW50KFg1MDlfcmV2b2tlZF9zdCkgPT0gNCwgYWxpZ25tZW50KFg1MDlfcmV2b2tlZF9zdCkKLVg1MDlfUkVWT0tFRCA9IFg1MDlfcmV2b2tlZF9zdAotY2xhc3MgWDUwOV9jcmxfaW5mb19zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLVg1MDlfY3JsX2luZm9fc3QuX2ZpZWxkc18gPSBbCi0gICAgKCd2ZXJzaW9uJywgUE9JTlRFUihBU04xX0lOVEVHRVIpKSwKLSAgICAoJ3NpZ19hbGcnLCBQT0lOVEVSKFg1MDlfQUxHT1IpKSwKLSAgICAoJ2lzc3VlcicsIFBPSU5URVIoWDUwOV9OQU1FKSksCi0gICAgKCdsYXN0VXBkYXRlJywgUE9JTlRFUihBU04xX1RJTUUpKSwKLSAgICAoJ25leHRVcGRhdGUnLCBQT0lOVEVSKEFTTjFfVElNRSkpLAotICAgICgncmV2b2tlZCcsIFBPSU5URVIoU1RBQ0spKSwKLSAgICAoJ2V4dGVuc2lvbnMnLCBQT0lOVEVSKFNUQUNLKSksCi0gICAgKCdlbmMnLCBBU04xX0VOQ09ESU5HKSwKLV0KLWFzc2VydCBzaXplb2YoWDUwOV9jcmxfaW5mb19zdCkgPT0gNDAsIHNpemVvZihYNTA5X2NybF9pbmZvX3N0KQotYXNzZXJ0IGFsaWdubWVudChYNTA5X2NybF9pbmZvX3N0KSA9PSA0LCBhbGlnbm1lbnQoWDUwOV9jcmxfaW5mb19zdCkKLVg1MDlfQ1JMX0lORk8gPSBYNTA5X2NybF9pbmZvX3N0Ci1YNTA5X2NybF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ2NybCcsIFBPSU5URVIoWDUwOV9DUkxfSU5GTykpLAotICAgICgnc2lnX2FsZycsIFBPSU5URVIoWDUwOV9BTEdPUikpLAotICAgICgnc2lnbmF0dXJlJywgUE9JTlRFUihBU04xX0JJVF9TVFJJTkcpKSwKLSAgICAoJ3JlZmVyZW5jZXMnLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKFg1MDlfY3JsX3N0KSA9PSAxNiwgc2l6ZW9mKFg1MDlfY3JsX3N0KQotYXNzZXJ0IGFsaWdubWVudChYNTA5X2NybF9zdCkgPT0gNCwgYWxpZ25tZW50KFg1MDlfY3JsX3N0KQotY2xhc3MgcHJpdmF0ZV9rZXlfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1wcml2YXRlX2tleV9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ3ZlcnNpb24nLCBjX2ludCksCi0gICAgKCdlbmNfYWxnb3InLCBQT0lOVEVSKFg1MDlfQUxHT1IpKSwKLSAgICAoJ2VuY19wa2V5JywgUE9JTlRFUihBU04xX09DVEVUX1NUUklORykpLAotICAgICgnZGVjX3BrZXknLCBQT0lOVEVSKEVWUF9QS0VZKSksCi0gICAgKCdrZXlfbGVuZ3RoJywgY19pbnQpLAotICAgICgna2V5X2RhdGEnLCBTVFJJTkcpLAotICAgICgna2V5X2ZyZWUnLCBjX2ludCksCi0gICAgKCdjaXBoZXInLCBFVlBfQ0lQSEVSX0lORk8pLAotICAgICgncmVmZXJlbmNlcycsIGNfaW50KSwKLV0KLWFzc2VydCBzaXplb2YocHJpdmF0ZV9rZXlfc3QpID09IDUyLCBzaXplb2YocHJpdmF0ZV9rZXlfc3QpCi1hc3NlcnQgYWxpZ25tZW50KHByaXZhdGVfa2V5X3N0KSA9PSA0LCBhbGlnbm1lbnQocHJpdmF0ZV9rZXlfc3QpCi1YNTA5X1BLRVkgPSBwcml2YXRlX2tleV9zdAotY2xhc3MgWDUwOV9pbmZvX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotWDUwOV9pbmZvX3N0Ll9maWVsZHNfID0gWwotICAgICgneDUwOScsIFBPSU5URVIoWDUwOSkpLAotICAgICgnY3JsJywgUE9JTlRFUihYNTA5X0NSTCkpLAotICAgICgneF9wa2V5JywgUE9JTlRFUihYNTA5X1BLRVkpKSwKLSAgICAoJ2VuY19jaXBoZXInLCBFVlBfQ0lQSEVSX0lORk8pLAotICAgICgnZW5jX2xlbicsIGNfaW50KSwKLSAgICAoJ2VuY19kYXRhJywgU1RSSU5HKSwKLSAgICAoJ3JlZmVyZW5jZXMnLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKFg1MDlfaW5mb19zdCkgPT0gNDQsIHNpemVvZihYNTA5X2luZm9fc3QpCi1hc3NlcnQgYWxpZ25tZW50KFg1MDlfaW5mb19zdCkgPT0gNCwgYWxpZ25tZW50KFg1MDlfaW5mb19zdCkKLVg1MDlfSU5GTyA9IFg1MDlfaW5mb19zdAotY2xhc3MgTmV0c2NhcGVfc3BrYWNfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1OZXRzY2FwZV9zcGthY19zdC5fZmllbGRzXyA9IFsKLSAgICAoJ3B1YmtleScsIFBPSU5URVIoWDUwOV9QVUJLRVkpKSwKLSAgICAoJ2NoYWxsZW5nZScsIFBPSU5URVIoQVNOMV9JQTVTVFJJTkcpKSwKLV0KLWFzc2VydCBzaXplb2YoTmV0c2NhcGVfc3BrYWNfc3QpID09IDgsIHNpemVvZihOZXRzY2FwZV9zcGthY19zdCkKLWFzc2VydCBhbGlnbm1lbnQoTmV0c2NhcGVfc3BrYWNfc3QpID09IDQsIGFsaWdubWVudChOZXRzY2FwZV9zcGthY19zdCkKLU5FVFNDQVBFX1NQS0FDID0gTmV0c2NhcGVfc3BrYWNfc3QKLWNsYXNzIE5ldHNjYXBlX3Nwa2lfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1OZXRzY2FwZV9zcGtpX3N0Ll9maWVsZHNfID0gWwotICAgICgnc3BrYWMnLCBQT0lOVEVSKE5FVFNDQVBFX1NQS0FDKSksCi0gICAgKCdzaWdfYWxnb3InLCBQT0lOVEVSKFg1MDlfQUxHT1IpKSwKLSAgICAoJ3NpZ25hdHVyZScsIFBPSU5URVIoQVNOMV9CSVRfU1RSSU5HKSksCi1dCi1hc3NlcnQgc2l6ZW9mKE5ldHNjYXBlX3Nwa2lfc3QpID09IDEyLCBzaXplb2YoTmV0c2NhcGVfc3BraV9zdCkKLWFzc2VydCBhbGlnbm1lbnQoTmV0c2NhcGVfc3BraV9zdCkgPT0gNCwgYWxpZ25tZW50KE5ldHNjYXBlX3Nwa2lfc3QpCi1ORVRTQ0FQRV9TUEtJID0gTmV0c2NhcGVfc3BraV9zdAotY2xhc3MgTmV0c2NhcGVfY2VydGlmaWNhdGVfc2VxdWVuY2UoU3RydWN0dXJlKToKLSAgICBwYXNzCi1OZXRzY2FwZV9jZXJ0aWZpY2F0ZV9zZXF1ZW5jZS5fZmllbGRzXyA9IFsKLSAgICAoJ3R5cGUnLCBQT0lOVEVSKEFTTjFfT0JKRUNUKSksCi0gICAgKCdjZXJ0cycsIFBPSU5URVIoU1RBQ0spKSwKLV0KLWFzc2VydCBzaXplb2YoTmV0c2NhcGVfY2VydGlmaWNhdGVfc2VxdWVuY2UpID09IDgsIHNpemVvZihOZXRzY2FwZV9jZXJ0aWZpY2F0ZV9zZXF1ZW5jZSkKLWFzc2VydCBhbGlnbm1lbnQoTmV0c2NhcGVfY2VydGlmaWNhdGVfc2VxdWVuY2UpID09IDQsIGFsaWdubWVudChOZXRzY2FwZV9jZXJ0aWZpY2F0ZV9zZXF1ZW5jZSkKLU5FVFNDQVBFX0NFUlRfU0VRVUVOQ0UgPSBOZXRzY2FwZV9jZXJ0aWZpY2F0ZV9zZXF1ZW5jZQotY2xhc3MgUEJFUEFSQU1fc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1QQkVQQVJBTV9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ3NhbHQnLCBQT0lOVEVSKEFTTjFfT0NURVRfU1RSSU5HKSksCi0gICAgKCdpdGVyJywgUE9JTlRFUihBU04xX0lOVEVHRVIpKSwKLV0KLWFzc2VydCBzaXplb2YoUEJFUEFSQU1fc3QpID09IDgsIHNpemVvZihQQkVQQVJBTV9zdCkKLWFzc2VydCBhbGlnbm1lbnQoUEJFUEFSQU1fc3QpID09IDQsIGFsaWdubWVudChQQkVQQVJBTV9zdCkKLVBCRVBBUkFNID0gUEJFUEFSQU1fc3QKLWNsYXNzIFBCRTJQQVJBTV9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLVBCRTJQQVJBTV9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ2tleWZ1bmMnLCBQT0lOVEVSKFg1MDlfQUxHT1IpKSwKLSAgICAoJ2VuY3J5cHRpb24nLCBQT0lOVEVSKFg1MDlfQUxHT1IpKSwKLV0KLWFzc2VydCBzaXplb2YoUEJFMlBBUkFNX3N0KSA9PSA4LCBzaXplb2YoUEJFMlBBUkFNX3N0KQotYXNzZXJ0IGFsaWdubWVudChQQkUyUEFSQU1fc3QpID09IDQsIGFsaWdubWVudChQQkUyUEFSQU1fc3QpCi1QQkUyUEFSQU0gPSBQQkUyUEFSQU1fc3QKLWNsYXNzIFBCS0RGMlBBUkFNX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotUEJLREYyUEFSQU1fc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdzYWx0JywgUE9JTlRFUihBU04xX1RZUEUpKSwKLSAgICAoJ2l0ZXInLCBQT0lOVEVSKEFTTjFfSU5URUdFUikpLAotICAgICgna2V5bGVuZ3RoJywgUE9JTlRFUihBU04xX0lOVEVHRVIpKSwKLSAgICAoJ3ByZicsIFBPSU5URVIoWDUwOV9BTEdPUikpLAotXQotYXNzZXJ0IHNpemVvZihQQktERjJQQVJBTV9zdCkgPT0gMTYsIHNpemVvZihQQktERjJQQVJBTV9zdCkKLWFzc2VydCBhbGlnbm1lbnQoUEJLREYyUEFSQU1fc3QpID09IDQsIGFsaWdubWVudChQQktERjJQQVJBTV9zdCkKLVBCS0RGMlBBUkFNID0gUEJLREYyUEFSQU1fc3QKLWNsYXNzIHBrY3M4X3ByaXZfa2V5X2luZm9fc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1wa2NzOF9wcml2X2tleV9pbmZvX3N0Ll9maWVsZHNfID0gWwotICAgICgnYnJva2VuJywgY19pbnQpLAotICAgICgndmVyc2lvbicsIFBPSU5URVIoQVNOMV9JTlRFR0VSKSksCi0gICAgKCdwa2V5YWxnJywgUE9JTlRFUihYNTA5X0FMR09SKSksCi0gICAgKCdwa2V5JywgUE9JTlRFUihBU04xX1RZUEUpKSwKLSAgICAoJ2F0dHJpYnV0ZXMnLCBQT0lOVEVSKFNUQUNLKSksCi1dCi1hc3NlcnQgc2l6ZW9mKHBrY3M4X3ByaXZfa2V5X2luZm9fc3QpID09IDIwLCBzaXplb2YocGtjczhfcHJpdl9rZXlfaW5mb19zdCkKLWFzc2VydCBhbGlnbm1lbnQocGtjczhfcHJpdl9rZXlfaW5mb19zdCkgPT0gNCwgYWxpZ25tZW50KHBrY3M4X3ByaXZfa2V5X2luZm9fc3QpCi1QS0NTOF9QUklWX0tFWV9JTkZPID0gcGtjczhfcHJpdl9rZXlfaW5mb19zdAotY2xhc3MgeDUwOV9oYXNoX2Rpcl9zdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXg1MDlfaGFzaF9kaXJfc3QuX2ZpZWxkc18gPSBbCi0gICAgKCdudW1fZGlycycsIGNfaW50KSwKLSAgICAoJ2RpcnMnLCBQT0lOVEVSKFNUUklORykpLAotICAgICgnZGlyc190eXBlJywgUE9JTlRFUihjX2ludCkpLAotICAgICgnbnVtX2RpcnNfYWxsb2NlZCcsIGNfaW50KSwKLV0KLWFzc2VydCBzaXplb2YoeDUwOV9oYXNoX2Rpcl9zdCkgPT0gMTYsIHNpemVvZih4NTA5X2hhc2hfZGlyX3N0KQotYXNzZXJ0IGFsaWdubWVudCh4NTA5X2hhc2hfZGlyX3N0KSA9PSA0LCBhbGlnbm1lbnQoeDUwOV9oYXNoX2Rpcl9zdCkKLVg1MDlfSEFTSF9ESVJfQ1RYID0geDUwOV9oYXNoX2Rpcl9zdAotY2xhc3MgeDUwOV9maWxlX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwoteDUwOV9maWxlX3N0Ll9maWVsZHNfID0gWwotICAgICgnbnVtX3BhdGhzJywgY19pbnQpLAotICAgICgnbnVtX2FsbG9jZWQnLCBjX2ludCksCi0gICAgKCdwYXRocycsIFBPSU5URVIoU1RSSU5HKSksCi0gICAgKCdwYXRoX3R5cGUnLCBQT0lOVEVSKGNfaW50KSksCi1dCi1hc3NlcnQgc2l6ZW9mKHg1MDlfZmlsZV9zdCkgPT0gMTYsIHNpemVvZih4NTA5X2ZpbGVfc3QpCi1hc3NlcnQgYWxpZ25tZW50KHg1MDlfZmlsZV9zdCkgPT0gNCwgYWxpZ25tZW50KHg1MDlfZmlsZV9zdCkKLVg1MDlfQ0VSVF9GSUxFX0NUWCA9IHg1MDlfZmlsZV9zdAotY2xhc3MgeDUwOV9vYmplY3Rfc3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1jbGFzcyBOMTR4NTA5X29iamVjdF9zdDRET0xMQVJfMTRFKFVuaW9uKToKLSAgICBwYXNzCi1OMTR4NTA5X29iamVjdF9zdDRET0xMQVJfMTRFLl9maWVsZHNfID0gWwotICAgICgncHRyJywgU1RSSU5HKSwKLSAgICAoJ3g1MDknLCBQT0lOVEVSKFg1MDkpKSwKLSAgICAoJ2NybCcsIFBPSU5URVIoWDUwOV9DUkwpKSwKLSAgICAoJ3BrZXknLCBQT0lOVEVSKEVWUF9QS0VZKSksCi1dCi1hc3NlcnQgc2l6ZW9mKE4xNHg1MDlfb2JqZWN0X3N0NERPTExBUl8xNEUpID09IDQsIHNpemVvZihOMTR4NTA5X29iamVjdF9zdDRET0xMQVJfMTRFKQotYXNzZXJ0IGFsaWdubWVudChOMTR4NTA5X29iamVjdF9zdDRET0xMQVJfMTRFKSA9PSA0LCBhbGlnbm1lbnQoTjE0eDUwOV9vYmplY3Rfc3Q0RE9MTEFSXzE0RSkKLXg1MDlfb2JqZWN0X3N0Ll9maWVsZHNfID0gWwotICAgICgndHlwZScsIGNfaW50KSwKLSAgICAoJ2RhdGEnLCBOMTR4NTA5X29iamVjdF9zdDRET0xMQVJfMTRFKSwKLV0KLWFzc2VydCBzaXplb2YoeDUwOV9vYmplY3Rfc3QpID09IDgsIHNpemVvZih4NTA5X29iamVjdF9zdCkKLWFzc2VydCBhbGlnbm1lbnQoeDUwOV9vYmplY3Rfc3QpID09IDQsIGFsaWdubWVudCh4NTA5X29iamVjdF9zdCkKLVg1MDlfT0JKRUNUID0geDUwOV9vYmplY3Rfc3QKLWNsYXNzIHg1MDlfbG9va3VwX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotWDUwOV9MT09LVVAgPSB4NTA5X2xvb2t1cF9zdAotY2xhc3MgeDUwOV9sb29rdXBfbWV0aG9kX3N0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwoteDUwOV9sb29rdXBfbWV0aG9kX3N0Ll9maWVsZHNfID0gWwotICAgICgnbmFtZScsIFNUUklORyksCi0gICAgKCduZXdfaXRlbScsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihYNTA5X0xPT0tVUCkpKSwKLSAgICAoJ2ZyZWUnLCBDRlVOQ1RZUEUoTm9uZSwgUE9JTlRFUihYNTA5X0xPT0tVUCkpKSwKLSAgICAoJ2luaXQnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoWDUwOV9MT09LVVApKSksCi0gICAgKCdzaHV0ZG93bicsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihYNTA5X0xPT0tVUCkpKSwKLSAgICAoJ2N0cmwnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoWDUwOV9MT09LVVApLCBjX2ludCwgU1RSSU5HLCBjX2xvbmcsIFBPSU5URVIoU1RSSU5HKSkpLAotICAgICgnZ2V0X2J5X3N1YmplY3QnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoWDUwOV9MT09LVVApLCBjX2ludCwgUE9JTlRFUihYNTA5X05BTUUpLCBQT0lOVEVSKFg1MDlfT0JKRUNUKSkpLAotICAgICgnZ2V0X2J5X2lzc3Vlcl9zZXJpYWwnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoWDUwOV9MT09LVVApLCBjX2ludCwgUE9JTlRFUihYNTA5X05BTUUpLCBQT0lOVEVSKEFTTjFfSU5URUdFUiksIFBPSU5URVIoWDUwOV9PQkpFQ1QpKSksCi0gICAgKCdnZXRfYnlfZmluZ2VycHJpbnQnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoWDUwOV9MT09LVVApLCBjX2ludCwgUE9JTlRFUihjX3VieXRlKSwgY19pbnQsIFBPSU5URVIoWDUwOV9PQkpFQ1QpKSksCi0gICAgKCdnZXRfYnlfYWxpYXMnLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoWDUwOV9MT09LVVApLCBjX2ludCwgU1RSSU5HLCBjX2ludCwgUE9JTlRFUihYNTA5X09CSkVDVCkpKSwKLV0KLWFzc2VydCBzaXplb2YoeDUwOV9sb29rdXBfbWV0aG9kX3N0KSA9PSA0MCwgc2l6ZW9mKHg1MDlfbG9va3VwX21ldGhvZF9zdCkKLWFzc2VydCBhbGlnbm1lbnQoeDUwOV9sb29rdXBfbWV0aG9kX3N0KSA9PSA0LCBhbGlnbm1lbnQoeDUwOV9sb29rdXBfbWV0aG9kX3N0KQotWDUwOV9MT09LVVBfTUVUSE9EID0geDUwOV9sb29rdXBfbWV0aG9kX3N0Ci14NTA5X3N0b3JlX3N0Ll9maWVsZHNfID0gWwotICAgICgnY2FjaGUnLCBjX2ludCksCi0gICAgKCdvYmpzJywgUE9JTlRFUihTVEFDSykpLAotICAgICgnZ2V0X2NlcnRfbWV0aG9kcycsIFBPSU5URVIoU1RBQ0spKSwKLSAgICAoJ2ZsYWdzJywgY191bG9uZyksCi0gICAgKCdwdXJwb3NlJywgY19pbnQpLAotICAgICgndHJ1c3QnLCBjX2ludCksCi0gICAgKCd2ZXJpZnknLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoWDUwOV9TVE9SRV9DVFgpKSksCi0gICAgKCd2ZXJpZnlfY2InLCBDRlVOQ1RZUEUoY19pbnQsIGNfaW50LCBQT0lOVEVSKFg1MDlfU1RPUkVfQ1RYKSkpLAotICAgICgnZ2V0X2lzc3VlcicsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihQT0lOVEVSKFg1MDkpKSwgUE9JTlRFUihYNTA5X1NUT1JFX0NUWCksIFBPSU5URVIoWDUwOSkpKSwKLSAgICAoJ2NoZWNrX2lzc3VlZCcsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihYNTA5X1NUT1JFX0NUWCksIFBPSU5URVIoWDUwOSksIFBPSU5URVIoWDUwOSkpKSwKLSAgICAoJ2NoZWNrX3Jldm9jYXRpb24nLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoWDUwOV9TVE9SRV9DVFgpKSksCi0gICAgKCdnZXRfY3JsJywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKFg1MDlfU1RPUkVfQ1RYKSwgUE9JTlRFUihQT0lOVEVSKFg1MDlfQ1JMKSksIFBPSU5URVIoWDUwOSkpKSwKLSAgICAoJ2NoZWNrX2NybCcsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihYNTA5X1NUT1JFX0NUWCksIFBPSU5URVIoWDUwOV9DUkwpKSksCi0gICAgKCdjZXJ0X2NybCcsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihYNTA5X1NUT1JFX0NUWCksIFBPSU5URVIoWDUwOV9DUkwpLCBQT0lOVEVSKFg1MDkpKSksCi0gICAgKCdjbGVhbnVwJywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKFg1MDlfU1RPUkVfQ1RYKSkpLAotICAgICgnZXhfZGF0YScsIENSWVBUT19FWF9EQVRBKSwKLSAgICAoJ3JlZmVyZW5jZXMnLCBjX2ludCksCi0gICAgKCdkZXB0aCcsIGNfaW50KSwKLV0KLWFzc2VydCBzaXplb2YoeDUwOV9zdG9yZV9zdCkgPT0gNzYsIHNpemVvZih4NTA5X3N0b3JlX3N0KQotYXNzZXJ0IGFsaWdubWVudCh4NTA5X3N0b3JlX3N0KSA9PSA0LCBhbGlnbm1lbnQoeDUwOV9zdG9yZV9zdCkKLXg1MDlfbG9va3VwX3N0Ll9maWVsZHNfID0gWwotICAgICgnaW5pdCcsIGNfaW50KSwKLSAgICAoJ3NraXAnLCBjX2ludCksCi0gICAgKCdtZXRob2QnLCBQT0lOVEVSKFg1MDlfTE9PS1VQX01FVEhPRCkpLAotICAgICgnbWV0aG9kX2RhdGEnLCBTVFJJTkcpLAotICAgICgnc3RvcmVfY3R4JywgUE9JTlRFUihYNTA5X1NUT1JFKSksCi1dCi1hc3NlcnQgc2l6ZW9mKHg1MDlfbG9va3VwX3N0KSA9PSAyMCwgc2l6ZW9mKHg1MDlfbG9va3VwX3N0KQotYXNzZXJ0IGFsaWdubWVudCh4NTA5X2xvb2t1cF9zdCkgPT0gNCwgYWxpZ25tZW50KHg1MDlfbG9va3VwX3N0KQotdGltZV90ID0gX19kYXJ3aW5fdGltZV90Ci14NTA5X3N0b3JlX2N0eF9zdC5fZmllbGRzXyA9IFsKLSAgICAoJ2N0eCcsIFBPSU5URVIoWDUwOV9TVE9SRSkpLAotICAgICgnY3VycmVudF9tZXRob2QnLCBjX2ludCksCi0gICAgKCdjZXJ0JywgUE9JTlRFUihYNTA5KSksCi0gICAgKCd1bnRydXN0ZWQnLCBQT0lOVEVSKFNUQUNLKSksCi0gICAgKCdwdXJwb3NlJywgY19pbnQpLAotICAgICgndHJ1c3QnLCBjX2ludCksCi0gICAgKCdjaGVja190aW1lJywgdGltZV90KSwKLSAgICAoJ2ZsYWdzJywgY191bG9uZyksCi0gICAgKCdvdGhlcl9jdHgnLCBjX3ZvaWRfcCksCi0gICAgKCd2ZXJpZnknLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoWDUwOV9TVE9SRV9DVFgpKSksCi0gICAgKCd2ZXJpZnlfY2InLCBDRlVOQ1RZUEUoY19pbnQsIGNfaW50LCBQT0lOVEVSKFg1MDlfU1RPUkVfQ1RYKSkpLAotICAgICgnZ2V0X2lzc3VlcicsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihQT0lOVEVSKFg1MDkpKSwgUE9JTlRFUihYNTA5X1NUT1JFX0NUWCksIFBPSU5URVIoWDUwOSkpKSwKLSAgICAoJ2NoZWNrX2lzc3VlZCcsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihYNTA5X1NUT1JFX0NUWCksIFBPSU5URVIoWDUwOSksIFBPSU5URVIoWDUwOSkpKSwKLSAgICAoJ2NoZWNrX3Jldm9jYXRpb24nLCBDRlVOQ1RZUEUoY19pbnQsIFBPSU5URVIoWDUwOV9TVE9SRV9DVFgpKSksCi0gICAgKCdnZXRfY3JsJywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKFg1MDlfU1RPUkVfQ1RYKSwgUE9JTlRFUihQT0lOVEVSKFg1MDlfQ1JMKSksIFBPSU5URVIoWDUwOSkpKSwKLSAgICAoJ2NoZWNrX2NybCcsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihYNTA5X1NUT1JFX0NUWCksIFBPSU5URVIoWDUwOV9DUkwpKSksCi0gICAgKCdjZXJ0X2NybCcsIENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihYNTA5X1NUT1JFX0NUWCksIFBPSU5URVIoWDUwOV9DUkwpLCBQT0lOVEVSKFg1MDkpKSksCi0gICAgKCdjbGVhbnVwJywgQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKFg1MDlfU1RPUkVfQ1RYKSkpLAotICAgICgnZGVwdGgnLCBjX2ludCksCi0gICAgKCd2YWxpZCcsIGNfaW50KSwKLSAgICAoJ2xhc3RfdW50cnVzdGVkJywgY19pbnQpLAotICAgICgnY2hhaW4nLCBQT0lOVEVSKFNUQUNLKSksCi0gICAgKCdlcnJvcl9kZXB0aCcsIGNfaW50KSwKLSAgICAoJ2Vycm9yJywgY19pbnQpLAotICAgICgnY3VycmVudF9jZXJ0JywgUE9JTlRFUihYNTA5KSksCi0gICAgKCdjdXJyZW50X2lzc3VlcicsIFBPSU5URVIoWDUwOSkpLAotICAgICgnY3VycmVudF9jcmwnLCBQT0lOVEVSKFg1MDlfQ1JMKSksCi0gICAgKCdleF9kYXRhJywgQ1JZUFRPX0VYX0RBVEEpLAotXQotYXNzZXJ0IHNpemVvZih4NTA5X3N0b3JlX2N0eF9zdCkgPT0gMTE2LCBzaXplb2YoeDUwOV9zdG9yZV9jdHhfc3QpCi1hc3NlcnQgYWxpZ25tZW50KHg1MDlfc3RvcmVfY3R4X3N0KSA9PSA0LCBhbGlnbm1lbnQoeDUwOV9zdG9yZV9jdHhfc3QpCi12YV9saXN0ID0gX19kYXJ3aW5fdmFfbGlzdAotX19kYXJ3aW5fb2ZmX3QgPSBfX2ludDY0X3QKLWZwb3NfdCA9IF9fZGFyd2luX29mZl90Ci1jbGFzcyBfX3NidWYoU3RydWN0dXJlKToKLSAgICBwYXNzCi1fX3NidWYuX2ZpZWxkc18gPSBbCi0gICAgKCdfYmFzZScsIFBPSU5URVIoY191Ynl0ZSkpLAotICAgICgnX3NpemUnLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKF9fc2J1ZikgPT0gOCwgc2l6ZW9mKF9fc2J1ZikKLWFzc2VydCBhbGlnbm1lbnQoX19zYnVmKSA9PSA0LCBhbGlnbm1lbnQoX19zYnVmKQotY2xhc3MgX19zRklMRVgoU3RydWN0dXJlKToKLSAgICBwYXNzCi1fX3NGSUxFWC5fZmllbGRzXyA9IFsKLV0KLWNsYXNzIF9fc0ZJTEUoU3RydWN0dXJlKToKLSAgICBwYXNzCi1fX3NGSUxFLl9wYWNrXyA9IDQKLV9fc0ZJTEUuX2ZpZWxkc18gPSBbCi0gICAgKCdfcCcsIFBPSU5URVIoY191Ynl0ZSkpLAotICAgICgnX3InLCBjX2ludCksCi0gICAgKCdfdycsIGNfaW50KSwKLSAgICAoJ19mbGFncycsIGNfc2hvcnQpLAotICAgICgnX2ZpbGUnLCBjX3Nob3J0KSwKLSAgICAoJ19iZicsIF9fc2J1ZiksCi0gICAgKCdfbGJmc2l6ZScsIGNfaW50KSwKLSAgICAoJ19jb29raWUnLCBjX3ZvaWRfcCksCi0gICAgKCdfY2xvc2UnLCBDRlVOQ1RZUEUoY19pbnQsIGNfdm9pZF9wKSksCi0gICAgKCdfcmVhZCcsIENGVU5DVFlQRShjX2ludCwgY192b2lkX3AsIFNUUklORywgY19pbnQpKSwKLSAgICAoJ19zZWVrJywgQ0ZVTkNUWVBFKGZwb3NfdCwgY192b2lkX3AsIGNfbG9uZ2xvbmcsIGNfaW50KSksCi0gICAgKCdfd3JpdGUnLCBDRlVOQ1RZUEUoY19pbnQsIGNfdm9pZF9wLCBTVFJJTkcsIGNfaW50KSksCi0gICAgKCdfdWInLCBfX3NidWYpLAotICAgICgnX2V4dHJhJywgUE9JTlRFUihfX3NGSUxFWCkpLAotICAgICgnX3VyJywgY19pbnQpLAotICAgICgnX3VidWYnLCBjX3VieXRlICogMyksCi0gICAgKCdfbmJ1ZicsIGNfdWJ5dGUgKiAxKSwKLSAgICAoJ19sYicsIF9fc2J1ZiksCi0gICAgKCdfYmxrc2l6ZScsIGNfaW50KSwKLSAgICAoJ19vZmZzZXQnLCBmcG9zX3QpLAotXQotYXNzZXJ0IHNpemVvZihfX3NGSUxFKSA9PSA4OCwgc2l6ZW9mKF9fc0ZJTEUpCi1hc3NlcnQgYWxpZ25tZW50KF9fc0ZJTEUpID09IDQsIGFsaWdubWVudChfX3NGSUxFKQotRklMRSA9IF9fc0ZJTEUKLWN0X3J1bmVfdCA9IF9fZGFyd2luX2N0X3J1bmVfdAotcnVuZV90ID0gX19kYXJ3aW5fcnVuZV90Ci1jbGFzcyBkaXZfdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLWRpdl90Ll9maWVsZHNfID0gWwotICAgICgncXVvdCcsIGNfaW50KSwKLSAgICAoJ3JlbScsIGNfaW50KSwKLV0KLWFzc2VydCBzaXplb2YoZGl2X3QpID09IDgsIHNpemVvZihkaXZfdCkKLWFzc2VydCBhbGlnbm1lbnQoZGl2X3QpID09IDQsIGFsaWdubWVudChkaXZfdCkKLWNsYXNzIGxkaXZfdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLWxkaXZfdC5fZmllbGRzXyA9IFsKLSAgICAoJ3F1b3QnLCBjX2xvbmcpLAotICAgICgncmVtJywgY19sb25nKSwKLV0KLWFzc2VydCBzaXplb2YobGRpdl90KSA9PSA4LCBzaXplb2YobGRpdl90KQotYXNzZXJ0IGFsaWdubWVudChsZGl2X3QpID09IDQsIGFsaWdubWVudChsZGl2X3QpCi1jbGFzcyBsbGRpdl90KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotbGxkaXZfdC5fcGFja18gPSA0Ci1sbGRpdl90Ll9maWVsZHNfID0gWwotICAgICgncXVvdCcsIGNfbG9uZ2xvbmcpLAotICAgICgncmVtJywgY19sb25nbG9uZyksCi1dCi1hc3NlcnQgc2l6ZW9mKGxsZGl2X3QpID09IDE2LCBzaXplb2YobGxkaXZfdCkKLWFzc2VydCBhbGlnbm1lbnQobGxkaXZfdCkgPT0gNCwgYWxpZ25tZW50KGxsZGl2X3QpCi1fX2Rhcndpbl9kZXZfdCA9IF9faW50MzJfdAotZGV2X3QgPSBfX2Rhcndpbl9kZXZfdAotX19kYXJ3aW5fbW9kZV90ID0gX191aW50MTZfdAotbW9kZV90ID0gX19kYXJ3aW5fbW9kZV90Ci1jbGFzcyBtY29udGV4dChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLW1jb250ZXh0Ll9maWVsZHNfID0gWwotXQotY2xhc3MgbWNvbnRleHQ2NChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLW1jb250ZXh0NjQuX2ZpZWxkc18gPSBbCi1dCi1jbGFzcyBfX2Rhcndpbl9wdGhyZWFkX2hhbmRsZXJfcmVjKFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotX19kYXJ3aW5fcHRocmVhZF9oYW5kbGVyX3JlYy5fZmllbGRzXyA9IFsKLSAgICAoJ19fcm91dGluZScsIENGVU5DVFlQRShOb25lLCBjX3ZvaWRfcCkpLAotICAgICgnX19hcmcnLCBjX3ZvaWRfcCksCi0gICAgKCdfX25leHQnLCBQT0lOVEVSKF9fZGFyd2luX3B0aHJlYWRfaGFuZGxlcl9yZWMpKSwKLV0KLWFzc2VydCBzaXplb2YoX19kYXJ3aW5fcHRocmVhZF9oYW5kbGVyX3JlYykgPT0gMTIsIHNpemVvZihfX2Rhcndpbl9wdGhyZWFkX2hhbmRsZXJfcmVjKQotYXNzZXJ0IGFsaWdubWVudChfX2Rhcndpbl9wdGhyZWFkX2hhbmRsZXJfcmVjKSA9PSA0LCBhbGlnbm1lbnQoX19kYXJ3aW5fcHRocmVhZF9oYW5kbGVyX3JlYykKLWNsYXNzIF9vcGFxdWVfcHRocmVhZF9hdHRyX3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1fb3BhcXVlX3B0aHJlYWRfYXR0cl90Ll9maWVsZHNfID0gWwotICAgICgnX19zaWcnLCBjX2xvbmcpLAotICAgICgnX19vcGFxdWUnLCBjX2NoYXIgKiAzNiksCi1dCi1hc3NlcnQgc2l6ZW9mKF9vcGFxdWVfcHRocmVhZF9hdHRyX3QpID09IDQwLCBzaXplb2YoX29wYXF1ZV9wdGhyZWFkX2F0dHJfdCkKLWFzc2VydCBhbGlnbm1lbnQoX29wYXF1ZV9wdGhyZWFkX2F0dHJfdCkgPT0gNCwgYWxpZ25tZW50KF9vcGFxdWVfcHRocmVhZF9hdHRyX3QpCi1jbGFzcyBfb3BhcXVlX3B0aHJlYWRfY29uZF90KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotX29wYXF1ZV9wdGhyZWFkX2NvbmRfdC5fZmllbGRzXyA9IFsKLSAgICAoJ19fc2lnJywgY19sb25nKSwKLSAgICAoJ19fb3BhcXVlJywgY19jaGFyICogMjQpLAotXQotYXNzZXJ0IHNpemVvZihfb3BhcXVlX3B0aHJlYWRfY29uZF90KSA9PSAyOCwgc2l6ZW9mKF9vcGFxdWVfcHRocmVhZF9jb25kX3QpCi1hc3NlcnQgYWxpZ25tZW50KF9vcGFxdWVfcHRocmVhZF9jb25kX3QpID09IDQsIGFsaWdubWVudChfb3BhcXVlX3B0aHJlYWRfY29uZF90KQotY2xhc3MgX29wYXF1ZV9wdGhyZWFkX2NvbmRhdHRyX3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1fb3BhcXVlX3B0aHJlYWRfY29uZGF0dHJfdC5fZmllbGRzXyA9IFsKLSAgICAoJ19fc2lnJywgY19sb25nKSwKLSAgICAoJ19fb3BhcXVlJywgY19jaGFyICogNCksCi1dCi1hc3NlcnQgc2l6ZW9mKF9vcGFxdWVfcHRocmVhZF9jb25kYXR0cl90KSA9PSA4LCBzaXplb2YoX29wYXF1ZV9wdGhyZWFkX2NvbmRhdHRyX3QpCi1hc3NlcnQgYWxpZ25tZW50KF9vcGFxdWVfcHRocmVhZF9jb25kYXR0cl90KSA9PSA0LCBhbGlnbm1lbnQoX29wYXF1ZV9wdGhyZWFkX2NvbmRhdHRyX3QpCi1jbGFzcyBfb3BhcXVlX3B0aHJlYWRfbXV0ZXhfdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLV9vcGFxdWVfcHRocmVhZF9tdXRleF90Ll9maWVsZHNfID0gWwotICAgICgnX19zaWcnLCBjX2xvbmcpLAotICAgICgnX19vcGFxdWUnLCBjX2NoYXIgKiA0MCksCi1dCi1hc3NlcnQgc2l6ZW9mKF9vcGFxdWVfcHRocmVhZF9tdXRleF90KSA9PSA0NCwgc2l6ZW9mKF9vcGFxdWVfcHRocmVhZF9tdXRleF90KQotYXNzZXJ0IGFsaWdubWVudChfb3BhcXVlX3B0aHJlYWRfbXV0ZXhfdCkgPT0gNCwgYWxpZ25tZW50KF9vcGFxdWVfcHRocmVhZF9tdXRleF90KQotY2xhc3MgX29wYXF1ZV9wdGhyZWFkX211dGV4YXR0cl90KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotX29wYXF1ZV9wdGhyZWFkX211dGV4YXR0cl90Ll9maWVsZHNfID0gWwotICAgICgnX19zaWcnLCBjX2xvbmcpLAotICAgICgnX19vcGFxdWUnLCBjX2NoYXIgKiA4KSwKLV0KLWFzc2VydCBzaXplb2YoX29wYXF1ZV9wdGhyZWFkX211dGV4YXR0cl90KSA9PSAxMiwgc2l6ZW9mKF9vcGFxdWVfcHRocmVhZF9tdXRleGF0dHJfdCkKLWFzc2VydCBhbGlnbm1lbnQoX29wYXF1ZV9wdGhyZWFkX211dGV4YXR0cl90KSA9PSA0LCBhbGlnbm1lbnQoX29wYXF1ZV9wdGhyZWFkX211dGV4YXR0cl90KQotY2xhc3MgX29wYXF1ZV9wdGhyZWFkX29uY2VfdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLV9vcGFxdWVfcHRocmVhZF9vbmNlX3QuX2ZpZWxkc18gPSBbCi0gICAgKCdfX3NpZycsIGNfbG9uZyksCi0gICAgKCdfX29wYXF1ZScsIGNfY2hhciAqIDQpLAotXQotYXNzZXJ0IHNpemVvZihfb3BhcXVlX3B0aHJlYWRfb25jZV90KSA9PSA4LCBzaXplb2YoX29wYXF1ZV9wdGhyZWFkX29uY2VfdCkKLWFzc2VydCBhbGlnbm1lbnQoX29wYXF1ZV9wdGhyZWFkX29uY2VfdCkgPT0gNCwgYWxpZ25tZW50KF9vcGFxdWVfcHRocmVhZF9vbmNlX3QpCi1jbGFzcyBfb3BhcXVlX3B0aHJlYWRfcndsb2NrX3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1fb3BhcXVlX3B0aHJlYWRfcndsb2NrX3QuX2ZpZWxkc18gPSBbCi0gICAgKCdfX3NpZycsIGNfbG9uZyksCi0gICAgKCdfX29wYXF1ZScsIGNfY2hhciAqIDEyNCksCi1dCi1hc3NlcnQgc2l6ZW9mKF9vcGFxdWVfcHRocmVhZF9yd2xvY2tfdCkgPT0gMTI4LCBzaXplb2YoX29wYXF1ZV9wdGhyZWFkX3J3bG9ja190KQotYXNzZXJ0IGFsaWdubWVudChfb3BhcXVlX3B0aHJlYWRfcndsb2NrX3QpID09IDQsIGFsaWdubWVudChfb3BhcXVlX3B0aHJlYWRfcndsb2NrX3QpCi1jbGFzcyBfb3BhcXVlX3B0aHJlYWRfcndsb2NrYXR0cl90KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotX29wYXF1ZV9wdGhyZWFkX3J3bG9ja2F0dHJfdC5fZmllbGRzXyA9IFsKLSAgICAoJ19fc2lnJywgY19sb25nKSwKLSAgICAoJ19fb3BhcXVlJywgY19jaGFyICogMTIpLAotXQotYXNzZXJ0IHNpemVvZihfb3BhcXVlX3B0aHJlYWRfcndsb2NrYXR0cl90KSA9PSAxNiwgc2l6ZW9mKF9vcGFxdWVfcHRocmVhZF9yd2xvY2thdHRyX3QpCi1hc3NlcnQgYWxpZ25tZW50KF9vcGFxdWVfcHRocmVhZF9yd2xvY2thdHRyX3QpID09IDQsIGFsaWdubWVudChfb3BhcXVlX3B0aHJlYWRfcndsb2NrYXR0cl90KQotY2xhc3MgX29wYXF1ZV9wdGhyZWFkX3QoU3RydWN0dXJlKToKLSAgICBwYXNzCi1fb3BhcXVlX3B0aHJlYWRfdC5fZmllbGRzXyA9IFsKLSAgICAoJ19fc2lnJywgY19sb25nKSwKLSAgICAoJ19fY2xlYW51cF9zdGFjaycsIFBPSU5URVIoX19kYXJ3aW5fcHRocmVhZF9oYW5kbGVyX3JlYykpLAotICAgICgnX19vcGFxdWUnLCBjX2NoYXIgKiA1OTYpLAotXQotYXNzZXJ0IHNpemVvZihfb3BhcXVlX3B0aHJlYWRfdCkgPT0gNjA0LCBzaXplb2YoX29wYXF1ZV9wdGhyZWFkX3QpCi1hc3NlcnQgYWxpZ25tZW50KF9vcGFxdWVfcHRocmVhZF90KSA9PSA0LCBhbGlnbm1lbnQoX29wYXF1ZV9wdGhyZWFkX3QpCi1fX2Rhcndpbl9ibGtjbnRfdCA9IF9faW50NjRfdAotX19kYXJ3aW5fYmxrc2l6ZV90ID0gX19pbnQzMl90Ci1fX2Rhcndpbl9mc2Jsa2NudF90ID0gY191aW50Ci1fX2Rhcndpbl9mc2ZpbGNudF90ID0gY191aW50Ci1fX2Rhcndpbl9naWRfdCA9IF9fdWludDMyX3QKLV9fZGFyd2luX2lkX3QgPSBfX3VpbnQzMl90Ci1fX2Rhcndpbl9pbm9fdCA9IF9fdWludDMyX3QKLV9fZGFyd2luX21hY2hfcG9ydF9uYW1lX3QgPSBfX2Rhcndpbl9uYXR1cmFsX3QKLV9fZGFyd2luX21hY2hfcG9ydF90ID0gX19kYXJ3aW5fbWFjaF9wb3J0X25hbWVfdAotX19kYXJ3aW5fbWNvbnRleHRfdCA9IFBPSU5URVIobWNvbnRleHQpCi1fX2Rhcndpbl9tY29udGV4dDY0X3QgPSBQT0lOVEVSKG1jb250ZXh0NjQpCi1fX2Rhcndpbl9waWRfdCA9IF9faW50MzJfdAotX19kYXJ3aW5fcHRocmVhZF9hdHRyX3QgPSBfb3BhcXVlX3B0aHJlYWRfYXR0cl90Ci1fX2Rhcndpbl9wdGhyZWFkX2NvbmRfdCA9IF9vcGFxdWVfcHRocmVhZF9jb25kX3QKLV9fZGFyd2luX3B0aHJlYWRfY29uZGF0dHJfdCA9IF9vcGFxdWVfcHRocmVhZF9jb25kYXR0cl90Ci1fX2Rhcndpbl9wdGhyZWFkX2tleV90ID0gY191bG9uZwotX19kYXJ3aW5fcHRocmVhZF9tdXRleF90ID0gX29wYXF1ZV9wdGhyZWFkX211dGV4X3QKLV9fZGFyd2luX3B0aHJlYWRfbXV0ZXhhdHRyX3QgPSBfb3BhcXVlX3B0aHJlYWRfbXV0ZXhhdHRyX3QKLV9fZGFyd2luX3B0aHJlYWRfb25jZV90ID0gX29wYXF1ZV9wdGhyZWFkX29uY2VfdAotX19kYXJ3aW5fcHRocmVhZF9yd2xvY2tfdCA9IF9vcGFxdWVfcHRocmVhZF9yd2xvY2tfdAotX19kYXJ3aW5fcHRocmVhZF9yd2xvY2thdHRyX3QgPSBfb3BhcXVlX3B0aHJlYWRfcndsb2NrYXR0cl90Ci1fX2Rhcndpbl9wdGhyZWFkX3QgPSBQT0lOVEVSKF9vcGFxdWVfcHRocmVhZF90KQotX19kYXJ3aW5fc2lnc2V0X3QgPSBfX3VpbnQzMl90Ci1fX2Rhcndpbl9zdXNlY29uZHNfdCA9IF9faW50MzJfdAotX19kYXJ3aW5fdWlkX3QgPSBfX3VpbnQzMl90Ci1fX2Rhcndpbl91c2Vjb25kc190ID0gX191aW50MzJfdAotX19kYXJ3aW5fdXVpZF90ID0gY191Ynl0ZSAqIDE2Ci1jbGFzcyBzaWdhbHRzdGFjayhTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXNpZ2FsdHN0YWNrLl9maWVsZHNfID0gWwotICAgICgnc3Nfc3AnLCBjX3ZvaWRfcCksCi0gICAgKCdzc19zaXplJywgX19kYXJ3aW5fc2l6ZV90KSwKLSAgICAoJ3NzX2ZsYWdzJywgY19pbnQpLAotXQotYXNzZXJ0IHNpemVvZihzaWdhbHRzdGFjaykgPT0gMTIsIHNpemVvZihzaWdhbHRzdGFjaykKLWFzc2VydCBhbGlnbm1lbnQoc2lnYWx0c3RhY2spID09IDQsIGFsaWdubWVudChzaWdhbHRzdGFjaykKLV9fZGFyd2luX3N0YWNrX3QgPSBzaWdhbHRzdGFjawotY2xhc3MgdWNvbnRleHQoU3RydWN0dXJlKToKLSAgICBwYXNzCi11Y29udGV4dC5fZmllbGRzXyA9IFsKLSAgICAoJ3VjX29uc3RhY2snLCBjX2ludCksCi0gICAgKCd1Y19zaWdtYXNrJywgX19kYXJ3aW5fc2lnc2V0X3QpLAotICAgICgndWNfc3RhY2snLCBfX2Rhcndpbl9zdGFja190KSwKLSAgICAoJ3VjX2xpbmsnLCBQT0lOVEVSKHVjb250ZXh0KSksCi0gICAgKCd1Y19tY3NpemUnLCBfX2Rhcndpbl9zaXplX3QpLAotICAgICgndWNfbWNvbnRleHQnLCBfX2Rhcndpbl9tY29udGV4dF90KSwKLV0KLWFzc2VydCBzaXplb2YodWNvbnRleHQpID09IDMyLCBzaXplb2YodWNvbnRleHQpCi1hc3NlcnQgYWxpZ25tZW50KHVjb250ZXh0KSA9PSA0LCBhbGlnbm1lbnQodWNvbnRleHQpCi1fX2Rhcndpbl91Y29udGV4dF90ID0gdWNvbnRleHQKLWNsYXNzIHVjb250ZXh0NjQoU3RydWN0dXJlKToKLSAgICBwYXNzCi11Y29udGV4dDY0Ll9maWVsZHNfID0gWwotICAgICgndWNfb25zdGFjaycsIGNfaW50KSwKLSAgICAoJ3VjX3NpZ21hc2snLCBfX2Rhcndpbl9zaWdzZXRfdCksCi0gICAgKCd1Y19zdGFjaycsIF9fZGFyd2luX3N0YWNrX3QpLAotICAgICgndWNfbGluaycsIFBPSU5URVIodWNvbnRleHQ2NCkpLAotICAgICgndWNfbWNzaXplJywgX19kYXJ3aW5fc2l6ZV90KSwKLSAgICAoJ3VjX21jb250ZXh0NjQnLCBfX2Rhcndpbl9tY29udGV4dDY0X3QpLAotXQotYXNzZXJ0IHNpemVvZih1Y29udGV4dDY0KSA9PSAzMiwgc2l6ZW9mKHVjb250ZXh0NjQpCi1hc3NlcnQgYWxpZ25tZW50KHVjb250ZXh0NjQpID09IDQsIGFsaWdubWVudCh1Y29udGV4dDY0KQotX19kYXJ3aW5fdWNvbnRleHQ2NF90ID0gdWNvbnRleHQ2NAotY2xhc3MgdGltZXZhbChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXRpbWV2YWwuX2ZpZWxkc18gPSBbCi0gICAgKCd0dl9zZWMnLCBfX2Rhcndpbl90aW1lX3QpLAotICAgICgndHZfdXNlYycsIF9fZGFyd2luX3N1c2Vjb25kc190KSwKLV0KLWFzc2VydCBzaXplb2YodGltZXZhbCkgPT0gOCwgc2l6ZW9mKHRpbWV2YWwpCi1hc3NlcnQgYWxpZ25tZW50KHRpbWV2YWwpID09IDQsIGFsaWdubWVudCh0aW1ldmFsKQotcmxpbV90ID0gX19pbnQ2NF90Ci1jbGFzcyBydXNhZ2UoU3RydWN0dXJlKToKLSAgICBwYXNzCi1ydXNhZ2UuX2ZpZWxkc18gPSBbCi0gICAgKCdydV91dGltZScsIHRpbWV2YWwpLAotICAgICgncnVfc3RpbWUnLCB0aW1ldmFsKSwKLSAgICAoJ3J1X21heHJzcycsIGNfbG9uZyksCi0gICAgKCdydV9peHJzcycsIGNfbG9uZyksCi0gICAgKCdydV9pZHJzcycsIGNfbG9uZyksCi0gICAgKCdydV9pc3JzcycsIGNfbG9uZyksCi0gICAgKCdydV9taW5mbHQnLCBjX2xvbmcpLAotICAgICgncnVfbWFqZmx0JywgY19sb25nKSwKLSAgICAoJ3J1X25zd2FwJywgY19sb25nKSwKLSAgICAoJ3J1X2luYmxvY2snLCBjX2xvbmcpLAotICAgICgncnVfb3VibG9jaycsIGNfbG9uZyksCi0gICAgKCdydV9tc2dzbmQnLCBjX2xvbmcpLAotICAgICgncnVfbXNncmN2JywgY19sb25nKSwKLSAgICAoJ3J1X25zaWduYWxzJywgY19sb25nKSwKLSAgICAoJ3J1X252Y3N3JywgY19sb25nKSwKLSAgICAoJ3J1X25pdmNzdycsIGNfbG9uZyksCi1dCi1hc3NlcnQgc2l6ZW9mKHJ1c2FnZSkgPT0gNzIsIHNpemVvZihydXNhZ2UpCi1hc3NlcnQgYWxpZ25tZW50KHJ1c2FnZSkgPT0gNCwgYWxpZ25tZW50KHJ1c2FnZSkKLWNsYXNzIHJsaW1pdChTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXJsaW1pdC5fcGFja18gPSA0Ci1ybGltaXQuX2ZpZWxkc18gPSBbCi0gICAgKCdybGltX2N1cicsIHJsaW1fdCksCi0gICAgKCdybGltX21heCcsIHJsaW1fdCksCi1dCi1hc3NlcnQgc2l6ZW9mKHJsaW1pdCkgPT0gMTYsIHNpemVvZihybGltaXQpCi1hc3NlcnQgYWxpZ25tZW50KHJsaW1pdCkgPT0gNCwgYWxpZ25tZW50KHJsaW1pdCkKLW1jb250ZXh0X3QgPSBfX2Rhcndpbl9tY29udGV4dF90Ci1tY29udGV4dDY0X3QgPSBfX2Rhcndpbl9tY29udGV4dDY0X3QKLXB0aHJlYWRfYXR0cl90ID0gX19kYXJ3aW5fcHRocmVhZF9hdHRyX3QKLXNpZ3NldF90ID0gX19kYXJ3aW5fc2lnc2V0X3QKLXVjb250ZXh0X3QgPSBfX2Rhcndpbl91Y29udGV4dF90Ci11Y29udGV4dDY0X3QgPSBfX2Rhcndpbl91Y29udGV4dDY0X3QKLXVpZF90ID0gX19kYXJ3aW5fdWlkX3QKLWNsYXNzIHNpZ3ZhbChVbmlvbik6Ci0gICAgcGFzcwotc2lndmFsLl9maWVsZHNfID0gWwotICAgICgnc2l2YWxfaW50JywgY19pbnQpLAotICAgICgnc2l2YWxfcHRyJywgY192b2lkX3ApLAotXQotYXNzZXJ0IHNpemVvZihzaWd2YWwpID09IDQsIHNpemVvZihzaWd2YWwpCi1hc3NlcnQgYWxpZ25tZW50KHNpZ3ZhbCkgPT0gNCwgYWxpZ25tZW50KHNpZ3ZhbCkKLWNsYXNzIHNpZ2V2ZW50KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotc2lnZXZlbnQuX2ZpZWxkc18gPSBbCi0gICAgKCdzaWdldl9ub3RpZnknLCBjX2ludCksCi0gICAgKCdzaWdldl9zaWdubycsIGNfaW50KSwKLSAgICAoJ3NpZ2V2X3ZhbHVlJywgc2lndmFsKSwKLSAgICAoJ3NpZ2V2X25vdGlmeV9mdW5jdGlvbicsIENGVU5DVFlQRShOb25lLCBzaWd2YWwpKSwKLSAgICAoJ3NpZ2V2X25vdGlmeV9hdHRyaWJ1dGVzJywgUE9JTlRFUihwdGhyZWFkX2F0dHJfdCkpLAotXQotYXNzZXJ0IHNpemVvZihzaWdldmVudCkgPT0gMjAsIHNpemVvZihzaWdldmVudCkKLWFzc2VydCBhbGlnbm1lbnQoc2lnZXZlbnQpID09IDQsIGFsaWdubWVudChzaWdldmVudCkKLWNsYXNzIF9fc2lnaW5mbyhTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXBpZF90ID0gX19kYXJ3aW5fcGlkX3QKLV9fc2lnaW5mby5fZmllbGRzXyA9IFsKLSAgICAoJ3NpX3NpZ25vJywgY19pbnQpLAotICAgICgnc2lfZXJybm8nLCBjX2ludCksCi0gICAgKCdzaV9jb2RlJywgY19pbnQpLAotICAgICgnc2lfcGlkJywgcGlkX3QpLAotICAgICgnc2lfdWlkJywgdWlkX3QpLAotICAgICgnc2lfc3RhdHVzJywgY19pbnQpLAotICAgICgnc2lfYWRkcicsIGNfdm9pZF9wKSwKLSAgICAoJ3NpX3ZhbHVlJywgc2lndmFsKSwKLSAgICAoJ3NpX2JhbmQnLCBjX2xvbmcpLAotICAgICgncGFkJywgY191bG9uZyAqIDcpLAotXQotYXNzZXJ0IHNpemVvZihfX3NpZ2luZm8pID09IDY0LCBzaXplb2YoX19zaWdpbmZvKQotYXNzZXJ0IGFsaWdubWVudChfX3NpZ2luZm8pID09IDQsIGFsaWdubWVudChfX3NpZ2luZm8pCi1zaWdpbmZvX3QgPSBfX3NpZ2luZm8KLWNsYXNzIF9fc2lnYWN0aW9uX3UoVW5pb24pOgotICAgIHBhc3MKLV9fc2lnYWN0aW9uX3UuX2ZpZWxkc18gPSBbCi0gICAgKCdfX3NhX2hhbmRsZXInLCBDRlVOQ1RZUEUoTm9uZSwgY19pbnQpKSwKLSAgICAoJ19fc2Ffc2lnYWN0aW9uJywgQ0ZVTkNUWVBFKE5vbmUsIGNfaW50LCBQT0lOVEVSKF9fc2lnaW5mbyksIGNfdm9pZF9wKSksCi1dCi1hc3NlcnQgc2l6ZW9mKF9fc2lnYWN0aW9uX3UpID09IDQsIHNpemVvZihfX3NpZ2FjdGlvbl91KQotYXNzZXJ0IGFsaWdubWVudChfX3NpZ2FjdGlvbl91KSA9PSA0LCBhbGlnbm1lbnQoX19zaWdhY3Rpb25fdSkKLWNsYXNzIF9fc2lnYWN0aW9uKFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotX19zaWdhY3Rpb24uX2ZpZWxkc18gPSBbCi0gICAgKCdfX3NpZ2FjdGlvbl91JywgX19zaWdhY3Rpb25fdSksCi0gICAgKCdzYV90cmFtcCcsIENGVU5DVFlQRShOb25lLCBjX3ZvaWRfcCwgY19pbnQsIGNfaW50LCBQT0lOVEVSKHNpZ2luZm9fdCksIGNfdm9pZF9wKSksCi0gICAgKCdzYV9tYXNrJywgc2lnc2V0X3QpLAotICAgICgnc2FfZmxhZ3MnLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKF9fc2lnYWN0aW9uKSA9PSAxNiwgc2l6ZW9mKF9fc2lnYWN0aW9uKQotYXNzZXJ0IGFsaWdubWVudChfX3NpZ2FjdGlvbikgPT0gNCwgYWxpZ25tZW50KF9fc2lnYWN0aW9uKQotY2xhc3Mgc2lnYWN0aW9uKFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotc2lnYWN0aW9uLl9maWVsZHNfID0gWwotICAgICgnX19zaWdhY3Rpb25fdScsIF9fc2lnYWN0aW9uX3UpLAotICAgICgnc2FfbWFzaycsIHNpZ3NldF90KSwKLSAgICAoJ3NhX2ZsYWdzJywgY19pbnQpLAotXQotYXNzZXJ0IHNpemVvZihzaWdhY3Rpb24pID09IDEyLCBzaXplb2Yoc2lnYWN0aW9uKQotYXNzZXJ0IGFsaWdubWVudChzaWdhY3Rpb24pID09IDQsIGFsaWdubWVudChzaWdhY3Rpb24pCi1zaWdfdCA9IENGVU5DVFlQRShOb25lLCBjX2ludCkKLXN0YWNrX3QgPSBfX2Rhcndpbl9zdGFja190Ci1jbGFzcyBzaWd2ZWMoU3RydWN0dXJlKToKLSAgICBwYXNzCi1zaWd2ZWMuX2ZpZWxkc18gPSBbCi0gICAgKCdzdl9oYW5kbGVyJywgQ0ZVTkNUWVBFKE5vbmUsIGNfaW50KSksCi0gICAgKCdzdl9tYXNrJywgY19pbnQpLAotICAgICgnc3ZfZmxhZ3MnLCBjX2ludCksCi1dCi1hc3NlcnQgc2l6ZW9mKHNpZ3ZlYykgPT0gMTIsIHNpemVvZihzaWd2ZWMpCi1hc3NlcnQgYWxpZ25tZW50KHNpZ3ZlYykgPT0gNCwgYWxpZ25tZW50KHNpZ3ZlYykKLWNsYXNzIHNpZ3N0YWNrKFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotc2lnc3RhY2suX2ZpZWxkc18gPSBbCi0gICAgKCdzc19zcCcsIFNUUklORyksCi0gICAgKCdzc19vbnN0YWNrJywgY19pbnQpLAotXQotYXNzZXJ0IHNpemVvZihzaWdzdGFjaykgPT0gOCwgc2l6ZW9mKHNpZ3N0YWNrKQotYXNzZXJ0IGFsaWdubWVudChzaWdzdGFjaykgPT0gNCwgYWxpZ25tZW50KHNpZ3N0YWNrKQotdV9jaGFyID0gY191Ynl0ZQotdV9zaG9ydCA9IGNfdXNob3J0Ci11X2ludCA9IGNfdWludAotdV9sb25nID0gY191bG9uZwotdXNob3J0ID0gY191c2hvcnQKLXVpbnQgPSBjX3VpbnQKLXVfcXVhZF90ID0gdV9pbnQ2NF90Ci1xdWFkX3QgPSBpbnQ2NF90Ci1xYWRkcl90ID0gUE9JTlRFUihxdWFkX3QpCi1jYWRkcl90ID0gU1RSSU5HCi1kYWRkcl90ID0gaW50MzJfdAotZml4cHRfdCA9IHVfaW50MzJfdAotYmxrY250X3QgPSBfX2Rhcndpbl9ibGtjbnRfdAotYmxrc2l6ZV90ID0gX19kYXJ3aW5fYmxrc2l6ZV90Ci1naWRfdCA9IF9fZGFyd2luX2dpZF90Ci1pbl9hZGRyX3QgPSBfX3VpbnQzMl90Ci1pbl9wb3J0X3QgPSBfX3VpbnQxNl90Ci1pbm9fdCA9IF9fZGFyd2luX2lub190Ci1rZXlfdCA9IF9faW50MzJfdAotbmxpbmtfdCA9IF9fdWludDE2X3QKLW9mZl90ID0gX19kYXJ3aW5fb2ZmX3QKLXNlZ3N6X3QgPSBpbnQzMl90Ci1zd2Jsa190ID0gaW50MzJfdAotY2xvY2tfdCA9IF9fZGFyd2luX2Nsb2NrX3QKLXNzaXplX3QgPSBfX2Rhcndpbl9zc2l6ZV90Ci11c2Vjb25kc190ID0gX19kYXJ3aW5fdXNlY29uZHNfdAotc3VzZWNvbmRzX3QgPSBfX2Rhcndpbl9zdXNlY29uZHNfdAotZmRfbWFzayA9IF9faW50MzJfdAotY2xhc3MgZmRfc2V0KFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotZmRfc2V0Ll9maWVsZHNfID0gWwotICAgICgnZmRzX2JpdHMnLCBfX2ludDMyX3QgKiAzMiksCi1dCi1hc3NlcnQgc2l6ZW9mKGZkX3NldCkgPT0gMTI4LCBzaXplb2YoZmRfc2V0KQotYXNzZXJ0IGFsaWdubWVudChmZF9zZXQpID09IDQsIGFsaWdubWVudChmZF9zZXQpCi1wdGhyZWFkX2NvbmRfdCA9IF9fZGFyd2luX3B0aHJlYWRfY29uZF90Ci1wdGhyZWFkX2NvbmRhdHRyX3QgPSBfX2Rhcndpbl9wdGhyZWFkX2NvbmRhdHRyX3QKLXB0aHJlYWRfbXV0ZXhfdCA9IF9fZGFyd2luX3B0aHJlYWRfbXV0ZXhfdAotcHRocmVhZF9tdXRleGF0dHJfdCA9IF9fZGFyd2luX3B0aHJlYWRfbXV0ZXhhdHRyX3QKLXB0aHJlYWRfb25jZV90ID0gX19kYXJ3aW5fcHRocmVhZF9vbmNlX3QKLXB0aHJlYWRfcndsb2NrX3QgPSBfX2Rhcndpbl9wdGhyZWFkX3J3bG9ja190Ci1wdGhyZWFkX3J3bG9ja2F0dHJfdCA9IF9fZGFyd2luX3B0aHJlYWRfcndsb2NrYXR0cl90Ci1wdGhyZWFkX3QgPSBfX2Rhcndpbl9wdGhyZWFkX3QKLXB0aHJlYWRfa2V5X3QgPSBfX2Rhcndpbl9wdGhyZWFkX2tleV90Ci1mc2Jsa2NudF90ID0gX19kYXJ3aW5fZnNibGtjbnRfdAotZnNmaWxjbnRfdCA9IF9fZGFyd2luX2ZzZmlsY250X3QKLQotIyB2YWx1ZXMgZm9yIGVudW1lcmF0aW9uICdpZHR5cGVfdCcKLWlkdHlwZV90ID0gY19pbnQgIyBlbnVtCi1pZF90ID0gX19kYXJ3aW5faWRfdAotY2xhc3Mgd2FpdChVbmlvbik6Ci0gICAgcGFzcwotY2xhc3MgTjR3YWl0M0RPTExBUl8zRShTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLU40d2FpdDNET0xMQVJfM0UuX2ZpZWxkc18gPSBbCi0gICAgKCd3X1Rlcm1zaWcnLCBjX3VpbnQsIDcpLAotICAgICgnd19Db3JlZHVtcCcsIGNfdWludCwgMSksCi0gICAgKCd3X1JldGNvZGUnLCBjX3VpbnQsIDgpLAotICAgICgnd19GaWxsZXInLCBjX3VpbnQsIDE2KSwKLV0KLWFzc2VydCBzaXplb2YoTjR3YWl0M0RPTExBUl8zRSkgPT0gNCwgc2l6ZW9mKE40d2FpdDNET0xMQVJfM0UpCi1hc3NlcnQgYWxpZ25tZW50KE40d2FpdDNET0xMQVJfM0UpID09IDQsIGFsaWdubWVudChONHdhaXQzRE9MTEFSXzNFKQotY2xhc3MgTjR3YWl0M0RPTExBUl80RShTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLU40d2FpdDNET0xMQVJfNEUuX2ZpZWxkc18gPSBbCi0gICAgKCd3X1N0b3B2YWwnLCBjX3VpbnQsIDgpLAotICAgICgnd19TdG9wc2lnJywgY191aW50LCA4KSwKLSAgICAoJ3dfRmlsbGVyJywgY191aW50LCAxNiksCi1dCi1hc3NlcnQgc2l6ZW9mKE40d2FpdDNET0xMQVJfNEUpID09IDQsIHNpemVvZihONHdhaXQzRE9MTEFSXzRFKQotYXNzZXJ0IGFsaWdubWVudChONHdhaXQzRE9MTEFSXzRFKSA9PSA0LCBhbGlnbm1lbnQoTjR3YWl0M0RPTExBUl80RSkKLXdhaXQuX2ZpZWxkc18gPSBbCi0gICAgKCd3X3N0YXR1cycsIGNfaW50KSwKLSAgICAoJ3dfVCcsIE40d2FpdDNET0xMQVJfM0UpLAotICAgICgnd19TJywgTjR3YWl0M0RPTExBUl80RSksCi1dCi1hc3NlcnQgc2l6ZW9mKHdhaXQpID09IDQsIHNpemVvZih3YWl0KQotYXNzZXJ0IGFsaWdubWVudCh3YWl0KSA9PSA0LCBhbGlnbm1lbnQod2FpdCkKLWNsYXNzIHRpbWVzcGVjKFN0cnVjdHVyZSk6Ci0gICAgcGFzcwotdGltZXNwZWMuX2ZpZWxkc18gPSBbCi0gICAgKCd0dl9zZWMnLCB0aW1lX3QpLAotICAgICgndHZfbnNlYycsIGNfbG9uZyksCi1dCi1hc3NlcnQgc2l6ZW9mKHRpbWVzcGVjKSA9PSA4LCBzaXplb2YodGltZXNwZWMpCi1hc3NlcnQgYWxpZ25tZW50KHRpbWVzcGVjKSA9PSA0LCBhbGlnbm1lbnQodGltZXNwZWMpCi1jbGFzcyB0bShTdHJ1Y3R1cmUpOgotICAgIHBhc3MKLXRtLl9maWVsZHNfID0gWwotICAgICgndG1fc2VjJywgY19pbnQpLAotICAgICgndG1fbWluJywgY19pbnQpLAotICAgICgndG1faG91cicsIGNfaW50KSwKLSAgICAoJ3RtX21kYXknLCBjX2ludCksCi0gICAgKCd0bV9tb24nLCBjX2ludCksCi0gICAgKCd0bV95ZWFyJywgY19pbnQpLAotICAgICgndG1fd2RheScsIGNfaW50KSwKLSAgICAoJ3RtX3lkYXknLCBjX2ludCksCi0gICAgKCd0bV9pc2RzdCcsIGNfaW50KSwKLSAgICAoJ3RtX2dtdG9mZicsIGNfbG9uZyksCi0gICAgKCd0bV96b25lJywgU1RSSU5HKSwKLV0KLWFzc2VydCBzaXplb2YodG0pID09IDQ0LCBzaXplb2YodG0pCi1hc3NlcnQgYWxpZ25tZW50KHRtKSA9PSA0LCBhbGlnbm1lbnQodG0pCi1fX2dudWNfdmFfbGlzdCA9IFNUUklORwotcHRyZGlmZl90ID0gY19pbnQKLWludDhfdCA9IGNfYnl0ZQotaW50MTZfdCA9IGNfc2hvcnQKLXVpbnQ4X3QgPSBjX3VieXRlCi11aW50MTZfdCA9IGNfdXNob3J0Ci11aW50MzJfdCA9IGNfdWludAotdWludDY0X3QgPSBjX3Vsb25nbG9uZwotaW50X2xlYXN0OF90ID0gaW50OF90Ci1pbnRfbGVhc3QxNl90ID0gaW50MTZfdAotaW50X2xlYXN0MzJfdCA9IGludDMyX3QKLWludF9sZWFzdDY0X3QgPSBpbnQ2NF90Ci11aW50X2xlYXN0OF90ID0gdWludDhfdAotdWludF9sZWFzdDE2X3QgPSB1aW50MTZfdAotdWludF9sZWFzdDMyX3QgPSB1aW50MzJfdAotdWludF9sZWFzdDY0X3QgPSB1aW50NjRfdAotaW50X2Zhc3Q4X3QgPSBpbnQ4X3QKLWludF9mYXN0MTZfdCA9IGludDE2X3QKLWludF9mYXN0MzJfdCA9IGludDMyX3QKLWludF9mYXN0NjRfdCA9IGludDY0X3QKLXVpbnRfZmFzdDhfdCA9IHVpbnQ4X3QKLXVpbnRfZmFzdDE2X3QgPSB1aW50MTZfdAotdWludF9mYXN0MzJfdCA9IHVpbnQzMl90Ci11aW50X2Zhc3Q2NF90ID0gdWludDY0X3QKLWludHB0cl90ID0gY19sb25nCi11aW50cHRyX3QgPSBjX3Vsb25nCi1pbnRtYXhfdCA9IGNfbG9uZ2xvbmcKLXVpbnRtYXhfdCA9IGNfdWxvbmdsb25nCi1fX2FsbF9fID0gWydFTkdJTkUnLCAncGtjczdfZW5jX2NvbnRlbnRfc3QnLCAnX19pbnQxNl90JywKLSAgICAgICAgICAgJ1g1MDlfUkVWT0tFRCcsICdTU0xfQ1RYJywgJ1VJVF9CT09MRUFOJywKLSAgICAgICAgICAgJ19fZGFyd2luX3RpbWVfdCcsICd1Y29udGV4dDY0X3QnLCAnaW50X2Zhc3QzMl90JywKLSAgICAgICAgICAgJ3BlbV9jdHhfc3QnLCAndWludDhfdCcsICdmcG9zX3QnLCAnWDUwOScsICdDT01QX0NUWCcsCi0gICAgICAgICAgICd0bScsICdOMTBwZW1fY3R4X3N0NERPTExBUl8xN0UnLCAnc3dibGtfdCcsCi0gICAgICAgICAgICdBU04xX1RFTVBMQVRFJywgJ19fZGFyd2luX3B0aHJlYWRfdCcsICdmaXhwdF90JywKLSAgICAgICAgICAgJ0JJT19NRVRIT0QnLCAnQVNOMV9QUklOVEFCTEVTVFJJTkcnLCAnRVZQX0VOQ09ERV9DVFgnLAotICAgICAgICAgICAnZGhfbWV0aG9kJywgJ2Jpb19mX2J1ZmZlcl9jdHhfc3RydWN0JywgJ2luX3BvcnRfdCcsCi0gICAgICAgICAgICdYNTA5X1NJRycsICdfX2Rhcndpbl9zc2l6ZV90JywgJ19fZGFyd2luX3NpZ3NldF90JywKLSAgICAgICAgICAgJ3dhaXQnLCAndWludF9mYXN0MTZfdCcsICdOMTJhc24xX3R5cGVfc3Q0RE9MTEFSXzExRScsCi0gICAgICAgICAgICd1aW50X2xlYXN0OF90JywgJ3B0aHJlYWRfcndsb2NrX3QnLCAnQVNOMV9JQTVTVFJJTkcnLAotICAgICAgICAgICAnZnNmaWxjbnRfdCcsICd1Y29udGV4dCcsICdfX3VpbnQ2NF90JywgJ3RpbWVzcGVjJywKLSAgICAgICAgICAgJ3g1MDlfY2luZl9zdCcsICdDT01QX01FVEhPRCcsICdNRDVfQ1RYJywgJ2J1Zl9tZW1fc3QnLAotICAgICAgICAgICAnQVNOMV9FTkNPRElOR19zdCcsICdQQkVQQVJBTScsICdYNTA5X05BTUVfRU5UUlknLAotICAgICAgICAgICAnX19kYXJ3aW5fdmFfbGlzdCcsICd1Y29udGV4dF90JywgJ2xoYXNoX3N0JywKLSAgICAgICAgICAgJ040d2FpdDNET0xMQVJfNEUnLCAnX19kYXJ3aW5fdXVpZF90JywKLSAgICAgICAgICAgJ19vc3NsX29sZF9kZXNfa3Nfc3RydWN0JywgJ2lkX3QnLCAnQVNOMV9CSVRfU1RSSU5HJywKLSAgICAgICAgICAgJ3ZhX2xpc3QnLCAnX19kYXJ3aW5fd2NoYXJfdCcsICdwdGhyZWFkX2tleV90JywKLSAgICAgICAgICAgJ3BrY3M3X3NpZ25lcl9pbmZvX3N0JywgJ0FTTjFfTUVUSE9EJywgJ0RTQV9TSUcnLCAnRFNBJywKLSAgICAgICAgICAgJ1VJVF9OT05FJywgJ3B0aHJlYWRfdCcsICdfX2Rhcndpbl91c2Vjb25kc190JywKLSAgICAgICAgICAgJ3VpbnRfZmFzdDhfdCcsICdVSV9TVFJJTkcnLCAnREVTX2NibG9jaycsCi0gICAgICAgICAgICdfX2Rhcndpbl9tY29udGV4dDY0X3QnLCAncmxpbV90JywgJ1BFTV9FbmNvZGVfU2VhbF9zdCcsCi0gICAgICAgICAgICdTSEFzdGF0ZV9zdCcsICd1X3F1YWRfdCcsICdvcGVuc3NsX2ZwdHInLAotICAgICAgICAgICAnX29wYXF1ZV9wdGhyZWFkX3J3bG9ja2F0dHJfdCcsCi0gICAgICAgICAgICdOMTh4NTA5X2F0dHJpYnV0ZXNfc3Q0RE9MTEFSXzEzRScsCi0gICAgICAgICAgICdfX2Rhcndpbl9wdGhyZWFkX3J3bG9ja190JywgJ2RhZGRyX3QnLCAndWlfc3RyaW5nX3N0JywKLSAgICAgICAgICAgJ3g1MDlfZmlsZV9zdCcsICdYNTA5X3JlcV9pbmZvX3N0JywgJ2ludF9sZWFzdDY0X3QnLAotICAgICAgICAgICAnZXZwX0VuY29kZV9DdHhfc3QnLCAnWDUwOV9PQkpFQ1RTJywgJ0NSWVBUT19FWF9EQVRBJywKLSAgICAgICAgICAgJ19faW50OF90JywgJ0FVVEhPUklUWV9LRVlJRF9zdCcsICdfb3BhcXVlX3B0aHJlYWRfYXR0cl90JywKLSAgICAgICAgICAgJ3NpZ3N0YWNrJywgJ0VWUF9DSVBIRVJfQ1RYJywgJ1g1MDlfZXh0ZW5zaW9uX3N0JywgJ3BpZF90JywKLSAgICAgICAgICAgJ1JTQV9NRVRIT0QnLCAnUEVNX1VTRVInLCAncGVtX3JlY2lwX3N0JywgJ2Vudl9tZF9jdHhfc3QnLAotICAgICAgICAgICAncmM1X2tleV9zdCcsICd1aV9zdCcsICdYNTA5X1BVQktFWScsICd1X2ludDhfdCcsCi0gICAgICAgICAgICdBU04xX0lURU1fc3QnLCAncGtjczdfcmVjaXBfaW5mb19zdCcsICdzc2wyX3N0YXRlX3N0JywKLSAgICAgICAgICAgJ29mZl90JywgJ04xMHNzbF9jdHhfc3Q0RE9MTEFSXzE4RScsICdjcnlwdG9fZXhfZGF0YV9zdCcsCi0gICAgICAgICAgICd1aV9tZXRob2Rfc3QnLCAnX19kYXJ3aW5fcHRocmVhZF9yd2xvY2thdHRyX3QnLAotICAgICAgICAgICAnQ1JZUFRPX0VYX2R1cCcsICdfX2Rhcndpbl9pbm9fdCcsICdfX3NGSUxFJywKLSAgICAgICAgICAgJ09TVW5rbm93bkJ5dGVPcmRlcicsICdCTl9NT05UX0NUWCcsICdBU04xX05VTEwnLCAndGltZV90JywKLSAgICAgICAgICAgJ0NSWVBUT19FWF9uZXcnLCAnYXNuMV90eXBlX3N0JywgJ0NSWVBUT19FWF9EQVRBX0ZVTkNTJywKLSAgICAgICAgICAgJ3VzZXJfdGltZV90JywgJ0JJR05VTScsICdwdGhyZWFkX3J3bG9ja2F0dHJfdCcsCi0gICAgICAgICAgICdBU04xX1ZBTFVFX3N0JywgJ0RIX01FVEhPRCcsICdfX2Rhcndpbl9vZmZfdCcsCi0gICAgICAgICAgICdfb3BhcXVlX3B0aHJlYWRfdCcsICdibl9ibGluZGluZ19zdCcsICdSU0EnLCAnc3NpemVfdCcsCi0gICAgICAgICAgICdtY29udGV4dDY0X3QnLCAndXNlcl9sb25nX3QnLCAnZnNibGtjbnRfdCcsICdjZXJ0X3N0JywKLSAgICAgICAgICAgJ19fZGFyd2luX3B0aHJlYWRfY29uZGF0dHJfdCcsICdYNTA5X1BLRVknLAotICAgICAgICAgICAnX19kYXJ3aW5faWRfdCcsICdfX2Rhcndpbl9ubF9pdGVtJywgJ1NTTDJfU1RBVEUnLCAnRklMRScsCi0gICAgICAgICAgICdwdGhyZWFkX211dGV4YXR0cl90JywgJ3NpemVfdCcsCi0gICAgICAgICAgICdfb3NzbF9vbGRfZGVzX2tleV9zY2hlZHVsZScsICdwa2NzN19pc3N1ZXJfYW5kX3NlcmlhbF9zdCcsCi0gICAgICAgICAgICdzaWd2YWwnLCAnQ1JZUFRPX01FTV9MRUFLX0NCJywgJ1g1MDlfTkFNRScsICdibGtjbnRfdCcsCi0gICAgICAgICAgICd1aW50X2xlYXN0MTZfdCcsICdfX2Rhcndpbl9kZXZfdCcsICdldnBfY2lwaGVyX2luZm9fc3QnLAotICAgICAgICAgICAnQk5fQkxJTkRJTkcnLCAnc3NsM19zdGF0ZV9zdCcsICd1aW50X2xlYXN0NjRfdCcsCi0gICAgICAgICAgICd1c2VyX2FkZHJfdCcsICdERVNfa2V5X3NjaGVkdWxlJywgJ1JJUEVNRDE2MF9DVFgnLAotICAgICAgICAgICAndV9jaGFyJywgJ1g1MDlfYWxnb3Jfc3QnLCAndWlkX3QnLCAnc2Vzc19jZXJ0X3N0JywKLSAgICAgICAgICAgJ3VfaW50NjRfdCcsICd1X2ludDE2X3QnLCAnc2lnc2V0X3QnLCAnX19kYXJ3aW5fcHRyZGlmZl90JywKLSAgICAgICAgICAgJ0FTTjFfQ1RYJywgJ1NUQUNLJywgJ19faW50MzJfdCcsICdVSV9NRVRIT0QnLAotICAgICAgICAgICAnTkVUU0NBUEVfU1BLSScsICdVSVRfUFJPTVBUJywgJ3N0X0NSWVBUT19FWF9EQVRBX0lNUEwnLAotICAgICAgICAgICAnY2FzdF9rZXlfc3QnLCAnWDUwOV9IQVNIX0RJUl9DVFgnLCAnc2lnZXZlbnQnLAotICAgICAgICAgICAndXNlcl9zc2l6ZV90JywgJ2Nsb2NrX3QnLCAnYWVzX2tleV9zdCcsCi0gICAgICAgICAgICdfX2Rhcndpbl9zb2NrbGVuX3QnLCAnX19kYXJ3aW5faW50cHRyX3QnLCAnaW50X2Zhc3Q2NF90JywKLSAgICAgICAgICAgJ2FzbjFfc3RyaW5nX3RhYmxlX3N0JywgJ3VpbnRfZmFzdDMyX3QnLAotICAgICAgICAgICAnQVNOMV9WSVNJQkxFU1RSSU5HJywgJ0RTQV9TSUdfc3QnLCAnb2JqX25hbWVfc3QnLAotICAgICAgICAgICAnWDUwOV9MT09LVVBfTUVUSE9EJywgJ3VfaW50MzJfdCcsICdFVlBfQ0lQSEVSX0lORk8nLAotICAgICAgICAgICAnX19nbnVjX3ZhX2xpc3QnLCAnQUVTX0tFWScsICdQS0NTN19JU1NVRVJfQU5EX1NFUklBTCcsCi0gICAgICAgICAgICdCTl9DVFgnLCAnX19kYXJ3aW5fYmxrY250X3QnLCAna2V5X3QnLCAnU0hBX0NUWCcsCi0gICAgICAgICAgICdwa2NzN19zaWduZWRfc3QnLCAnU1NMJywgJ04xMHBlbV9jdHhfc3Q0RE9MTEFSXzE2RScsCi0gICAgICAgICAgICdwdGhyZWFkX2F0dHJfdCcsICdFVlBfTUQnLCAndWludCcsICdBU04xX0JPT0xFQU4nLAotICAgICAgICAgICAnaW5vX3QnLCAnX19kYXJ3aW5fY2xvY2tfdCcsICdBU04xX09DVEVUX1NUUklORycsCi0gICAgICAgICAgICdhc24xX2N0eF9zdCcsICdCSU9fRl9CVUZGRVJfQ1RYJywgJ2JuX21vbnRfY3R4X3N0JywKLSAgICAgICAgICAgJ1g1MDlfUkVRX0lORk8nLCAnUEVNX0NUWCcsICdzaWd2ZWMnLAotICAgICAgICAgICAnX19kYXJ3aW5fcHRocmVhZF9tdXRleGF0dHJfdCcsICd4NTA5X2F0dHJpYnV0ZXNfc3QnLAotICAgICAgICAgICAnc3RhY2tfdCcsICdfX2Rhcndpbl9tb2RlX3QnLCAnX19tYnN0YXRlX3QnLAotICAgICAgICAgICAnYXNuMV9vYmplY3Rfc3QnLCAnQVNOMV9FTkNPRElORycsICdfX3VpbnQ4X3QnLAotICAgICAgICAgICAnTEhBU0hfTk9ERScsICdQS0NTN19TSUdORVJfSU5GTycsICdhc24xX21ldGhvZF9zdCcsCi0gICAgICAgICAgICdzdGFja19zdCcsICdiaW9faW5mb19jYicsICdkaXZfdCcsICdVSVRfVkVSSUZZJywKLSAgICAgICAgICAgJ1BCRVBBUkFNX3N0JywgJ040d2FpdDNET0xMQVJfM0UnLCAncXVhZF90JywgJ19fc2lnaW5mbycsCi0gICAgICAgICAgICdfX2Rhcndpbl9tYnN0YXRlX3QnLCAncnNhX3N0JywgJ0FTTjFfVU5JVkVSU0FMU1RSSU5HJywKLSAgICAgICAgICAgJ3VpbnQ2NF90JywgJ3NzbF9jb21wX3N0JywgJ1g1MDlfT0JKRUNUJywgJ3B0aHJlYWRfY29uZF90JywKLSAgICAgICAgICAgJ0RIJywgJ19fZGFyd2luX3djdHlwZV90JywgJ1BLQ1M3X0VOVkVMT1BFJywgJ0FTTjFfVExDX3N0JywKLSAgICAgICAgICAgJ3NpZ19hdG9taWNfdCcsICdCSU8nLCAnbmxpbmtfdCcsICdCVUZfTUVNJywgJ1NTTDNfUkVDT1JEJywKLSAgICAgICAgICAgJ2Jpb19tZXRob2Rfc3QnLCAndGltZXZhbCcsICdVSV9zdHJpbmdfdHlwZXMnLCAnQklPX2R1bW15JywKLSAgICAgICAgICAgJ3NzbF9jdHhfc3QnLCAnTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRScsCi0gICAgICAgICAgICdCSVRfU1RSSU5HX0JJVE5BTUVfc3QnLCAnX19kYXJ3aW5fcHRocmVhZF9hdHRyX3QnLAotICAgICAgICAgICAnaW50OF90JywgJ19fZGFyd2luX3dpbnRfdCcsICdPQkpfTkFNRScsCi0gICAgICAgICAgICdQS0NTOF9QUklWX0tFWV9JTkZPJywgJ1BCRTJQQVJBTV9zdCcsCi0gICAgICAgICAgICdMSEFTSF9ET0FMTF9GTl9UWVBFJywgJ3g1MDlfc3QnLCAnWDUwOV9WQUwnLCAnZGV2X3QnLAotICAgICAgICAgICAnQVNOMV9URU1QTEFURV9zdCcsICdNRDVzdGF0ZV9zdCcsICdfX3VpbnQxNl90JywKLSAgICAgICAgICAgJ0xIQVNIX0RPQUxMX0FSR19GTl9UWVBFJywgJ21kYzJfY3R4X3N0JywgJ1NTTDNfU1RBVEUnLAotICAgICAgICAgICAnc3NsM19idWZmZXJfc3QnLCAnQVNOMV9JVEVNX0VYUCcsCi0gICAgICAgICAgICdfb3BhcXVlX3B0aHJlYWRfY29uZGF0dHJfdCcsICdtb2RlX3QnLCAnQVNOMV9WQUxVRScsCi0gICAgICAgICAgICdxYWRkcl90JywgJ19fZGFyd2luX2dpZF90JywgJ0VWUF9QS0VZJywgJ0NSWVBUT19FWF9mcmVlJywKLSAgICAgICAgICAgJ19vc3NsX29sZF9kZXNfY2Jsb2NrJywgJ1g1MDlfSU5GTycsICdhc24xX3N0cmluZ19zdCcsCi0gICAgICAgICAgICdpbnRwdHJfdCcsICdVSVRfSU5GTycsICdpbnRfZmFzdDhfdCcsICdzaWdhbHRzdGFjaycsCi0gICAgICAgICAgICdlbnZfbWRfc3QnLCAnTEhBU0gnLCAnX19kYXJ3aW5fdWNvbnRleHRfdCcsCi0gICAgICAgICAgICdQS0NTN19TSUdOX0VOVkVMT1BFJywgJ19fZGFyd2luX21jb250ZXh0X3QnLCAnY3RfcnVuZV90JywKLSAgICAgICAgICAgJ01EMl9DVFgnLCAncHRocmVhZF9vbmNlX3QnLCAnU1NMM19CVUZGRVInLCAnZmRfbWFzaycsCi0gICAgICAgICAgICdBU04xX1RZUEUnLCAnUEtDUzdfU0lHTkVEJywgJ3NzbDNfcmVjb3JkX3N0JywgJ0JGX0tFWScsCi0gICAgICAgICAgICdNRDRzdGF0ZV9zdCcsICdNRDRfQ1RYJywgJ2ludDE2X3QnLCAnU1NMX0NJUEhFUicsCi0gICAgICAgICAgICdydW5lX3QnLCAnWDUwOV9UUlVTVCcsICdzaWdpbmZvX3QnLCAnWDUwOV9TVE9SRScsCi0gICAgICAgICAgICdfX3NidWYnLCAnWDUwOV9TVE9SRV9DVFgnLCAnX19kYXJ3aW5fYmxrc2l6ZV90JywgJ2xkaXZfdCcsCi0gICAgICAgICAgICdBU04xX1RJTUUnLCAnU1NMX01FVEhPRCcsICdYNTA5X0xPT0tVUCcsCi0gICAgICAgICAgICdOZXRzY2FwZV9zcGtpX3N0JywgJ1BfUElEJywgJ3NpZ2FjdGlvbicsICdzaWdfdCcsCi0gICAgICAgICAgICdob3N0ZW50JywgJ3g1MDlfY2VydF9hdXhfc3QnLCAnX29wYXF1ZV9wdGhyZWFkX2NvbmRfdCcsCi0gICAgICAgICAgICdzZWdzel90JywgJ3VzaG9ydCcsICdfX2Rhcndpbl9jdF9ydW5lX3QnLCAnZmRfc2V0JywKLSAgICAgICAgICAgJ0JOX1JFQ1BfQ1RYJywgJ3g1MDlfbG9va3VwX3N0JywgJ3VpbnQxNl90JywgJ3BrY3M3X3N0JywKLSAgICAgICAgICAgJ2FzbjFfaGVhZGVyX3N0JywgJ19fZGFyd2luX3B0aHJlYWRfa2V5X3QnLAotICAgICAgICAgICAneDUwOV90cnVzdF9zdCcsICdfX2Rhcndpbl9wdGhyZWFkX2hhbmRsZXJfcmVjJywgJ2ludDMyX3QnLAotICAgICAgICAgICAnWDUwOV9DUkxfSU5GTycsICdOMTFldnBfcGtleV9zdDRET0xMQVJfMTJFJywgJ01EQzJfQ1RYJywKLSAgICAgICAgICAgJ04yM19vc3NsX29sZF9kZXNfa3Nfc3RydWN0NERPTExBUl8xMEUnLCAnQVNOMV9IRUFERVInLAotICAgICAgICAgICAnWDUwOV9jcmxfaW5mb19zdCcsICdMSEFTSF9IQVNIX0ZOX1RZUEUnLAotICAgICAgICAgICAnX29wYXF1ZV9wdGhyZWFkX211dGV4YXR0cl90JywgJ3NzbF9zdCcsCi0gICAgICAgICAgICdOOHBrY3M3X3N0NERPTExBUl8xNUUnLCAnZXZwX3BrZXlfc3QnLAotICAgICAgICAgICAncGtjczdfc2lnbmVkYW5kZW52ZWxvcGVkX3N0JywgJ19fZGFyd2luX21hY2hfcG9ydF90JywKLSAgICAgICAgICAgJ0VWUF9QQkVfS0VZR0VOJywgJ19vcGFxdWVfcHRocmVhZF9tdXRleF90JywKLSAgICAgICAgICAgJ0FTTjFfVVRDVElNRScsICdtY29udGV4dCcsICdjcnlwdG9fZXhfZGF0YV9mdW5jX3N0JywKLSAgICAgICAgICAgJ3VfbG9uZycsICdQQktERjJQQVJBTV9zdCcsICdyYzRfa2V5X3N0JywgJ0RTQV9NRVRIT0QnLAotICAgICAgICAgICAnRVZQX0NJUEhFUicsICdCSVRfU1RSSU5HX0JJVE5BTUUnLCAnUEtDUzdfUkVDSVBfSU5GTycsCi0gICAgICAgICAgICdzc2wzX2VuY19tZXRob2QnLCAnWDUwOV9DRVJUX0FVWCcsICd1aW50bWF4X3QnLAotICAgICAgICAgICAnaW50X2Zhc3QxNl90JywgJ1JDNV8zMl9LRVknLCAndWNvbnRleHQ2NCcsICdBU04xX0lOVEVHRVInLAotICAgICAgICAgICAndV9zaG9ydCcsICdOMTR4NTA5X29iamVjdF9zdDRET0xMQVJfMTRFJywgJ21jb250ZXh0NjQnLAotICAgICAgICAgICAnWDUwOV9zaWdfc3QnLCAnQVNOMV9HRU5FUkFMU1RSSU5HJywgJ1BLQ1M3JywgJ19fc0ZJTEVYJywKLSAgICAgICAgICAgJ1g1MDlfbmFtZV9lbnRyeV9zdCcsICdzc2xfc2Vzc2lvbl9zdCcsICdjYWRkcl90JywKLSAgICAgICAgICAgJ2JpZ251bV9zdCcsICdYNTA5X0NJTkYnLCAnX19kYXJ3aW5fcHRocmVhZF9jb25kX3QnLAotICAgICAgICAgICAnQVNOMV9UTEMnLCAnUEtDUzdfRU5DUllQVCcsICdORVRTQ0FQRV9TUEtBQycsCi0gICAgICAgICAgICdOZXRzY2FwZV9zcGthY19zdCcsICdpZHR5cGVfdCcsICdVSVRfRVJST1InLAotICAgICAgICAgICAndWludF9mYXN0NjRfdCcsICdpbl9hZGRyX3QnLCAncHRocmVhZF9tdXRleF90JywKLSAgICAgICAgICAgJ19faW50NjRfdCcsICdBU04xX0JNUFNUUklORycsICd1aW50MzJfdCcsCi0gICAgICAgICAgICdQRU1fRU5DT0RFX1NFQUxfQ1RYJywgJ3N1c2Vjb25kc190JywgJ0FTTjFfT0JKRUNUJywKLSAgICAgICAgICAgJ1g1MDlfdmFsX3N0JywgJ3ByaXZhdGVfa2V5X3N0JywgJ0NSWVBUT19keW5sb2NrJywKLSAgICAgICAgICAgJ1g1MDlfb2JqZWN0c19zdCcsICdDUllQVE9fRVhfREFUQV9JTVBMJywKLSAgICAgICAgICAgJ3B0aHJlYWRfY29uZGF0dHJfdCcsICdQS0NTN19ESUdFU1QnLCAndWludF9sZWFzdDMyX3QnLAotICAgICAgICAgICAnQVNOMV9TVFJJTkcnLCAnX191aW50MzJfdCcsICdQX1BHSUQnLCAncnNhX21ldGhfc3QnLAotICAgICAgICAgICAnWDUwOV9jcmxfc3QnLCAnUkMyX0tFWScsICdfX2Rhcndpbl9mc2ZpbGNudF90JywKLSAgICAgICAgICAgJ1g1MDlfcmV2b2tlZF9zdCcsICdQQkUyUEFSQU0nLCAnYmxrc2l6ZV90JywKLSAgICAgICAgICAgJ05ldHNjYXBlX2NlcnRpZmljYXRlX3NlcXVlbmNlJywgJ3NzbF9jaXBoZXJfc3QnLAotICAgICAgICAgICAnYmlnbnVtX2N0eCcsICdyZWdpc3Rlcl90JywgJ0FTTjFfVVRGOFNUUklORycsCi0gICAgICAgICAgICdwa2NzN19lbmNyeXB0ZWRfc3QnLCAnUkM0X0tFWScsICdfX2Rhcndpbl91Y29udGV4dDY0X3QnLAotICAgICAgICAgICAnTjEzc3NsMl9zdGF0ZV9zdDRET0xMQVJfMTlFJywgJ2JuX3JlY3BfY3R4X3N0JywKLSAgICAgICAgICAgJ0NBU1RfS0VZJywgJ1g1MDlfQVRUUklCVVRFJywgJ19fZGFyd2luX3N1c2Vjb25kc190JywKLSAgICAgICAgICAgJ19fc2lnYWN0aW9uJywgJ3VzZXJfdWxvbmdfdCcsICdzeXNjYWxsX2FyZ190JywKLSAgICAgICAgICAgJ2V2cF9jaXBoZXJfY3R4X3N0JywgJ1g1MDlfQUxHT1InLCAnbWNvbnRleHRfdCcsCi0gICAgICAgICAgICdjb25zdF9ERVNfY2Jsb2NrJywgJ19fZGFyd2luX2ZzYmxrY250X3QnLCAnZHNhX3N0JywKLSAgICAgICAgICAgJ2ludF9sZWFzdDhfdCcsICdNRDJzdGF0ZV9zdCcsICdYNTA5X0VYVEVOU0lPTicsCi0gICAgICAgICAgICdHRU5fU0VTU0lPTl9DQicsICdpbnRfbGVhc3QxNl90JywgJ19fZGFyd2luX3djdHJhbnNfdCcsCi0gICAgICAgICAgICdQQktERjJQQVJBTScsICd4NTA5X2xvb2t1cF9tZXRob2Rfc3QnLCAncGVtX3Bhc3N3b3JkX2NiJywKLSAgICAgICAgICAgJ1g1MDlfaW5mb19zdCcsICd4NTA5X3N0b3JlX3N0JywgJ19fZGFyd2luX25hdHVyYWxfdCcsCi0gICAgICAgICAgICdYNTA5X3B1YmtleV9zdCcsICdwa2NzN19kaWdlc3Rfc3QnLCAnX19kYXJ3aW5fc2l6ZV90JywKLSAgICAgICAgICAgJ0FTTjFfU1RSSU5HX1RBQkxFJywgJ09TTGl0dGxlRW5kaWFuJywgJ1JJUEVNRDE2MHN0YXRlX3N0JywKLSAgICAgICAgICAgJ3BrY3M3X2VudmVsb3BlZF9zdCcsICdVSScsICdwdHJkaWZmX3QnLCAnWDUwOV9SRVEnLAotICAgICAgICAgICAnQ1JZUFRPX2R5bmxvY2tfdmFsdWUnLCAnWDUwOV9yZXFfc3QnLCAneDUwOV9zdG9yZV9jdHhfc3QnLAotICAgICAgICAgICAnTjEzc3NsM19zdGF0ZV9zdDRET0xMQVJfMjBFJywgJ2xoYXNoX25vZGVfc3QnLAotICAgICAgICAgICAnX19kYXJ3aW5fcHRocmVhZF9tdXRleF90JywgJ0xIQVNIX0NPTVBfRk5fVFlQRScsCi0gICAgICAgICAgICdfX2Rhcndpbl9ydW5lX3QnLCAncmxpbWl0JywgJ19fZGFyd2luX3B0aHJlYWRfb25jZV90JywKLSAgICAgICAgICAgJ09TQmlnRW5kaWFuJywgJ3VpbnRwdHJfdCcsICdfX2Rhcndpbl91aWRfdCcsICd1X2ludCcsCi0gICAgICAgICAgICdBU04xX1Q2MVNUUklORycsICdnaWRfdCcsICdzc2xfbWV0aG9kX3N0JywgJ0FTTjFfSVRFTScsCi0gICAgICAgICAgICdBU04xX0VOVU1FUkFURUQnLCAnX29wYXF1ZV9wdGhyZWFkX3J3bG9ja190JywKLSAgICAgICAgICAgJ3BrY3M4X3ByaXZfa2V5X2luZm9fc3QnLCAnaW50bWF4X3QnLCAnc2lnY29udGV4dCcsCi0gICAgICAgICAgICdYNTA5X0NSTCcsICdyYzJfa2V5X3N0JywgJ2VuZ2luZV9zdCcsICd4NTA5X29iamVjdF9zdCcsCi0gICAgICAgICAgICdfb3BhcXVlX3B0aHJlYWRfb25jZV90JywgJ0RFU19rcycsICdTU0xfQ09NUCcsCi0gICAgICAgICAgICdkc2FfbWV0aG9kJywgJ2ludDY0X3QnLCAnYmlvX3N0JywgJ2JmX2tleV9zdCcsCi0gICAgICAgICAgICdBU04xX0dFTkVSQUxJWkVEVElNRScsICdQS0NTN19FTkNfQ09OVEVOVCcsCi0gICAgICAgICAgICdfX2Rhcndpbl9waWRfdCcsICdsbGRpdl90JywgJ2NvbXBfbWV0aG9kX3N0JywKLSAgICAgICAgICAgJ0VWUF9NRF9DVFgnLCAnZXZwX2NpcGhlcl9zdCcsICdYNTA5X25hbWVfc3QnLAotICAgICAgICAgICAneDUwOV9oYXNoX2Rpcl9zdCcsICdfX2Rhcndpbl9tYWNoX3BvcnRfbmFtZV90JywKLSAgICAgICAgICAgJ3VzZWNvbmRzX3QnLCAndXNlcl9zaXplX3QnLCAnU1NMX1NFU1NJT04nLCAncnVzYWdlJywKLSAgICAgICAgICAgJ3NzbF9jcm9ja19zdCcsICdpbnRfbGVhc3QzMl90JywgJ19fc2lnYWN0aW9uX3UnLCAnZGhfc3QnLAotICAgICAgICAgICAnUF9BTEwnLCAnX19kYXJ3aW5fc3RhY2tfdCcsICdONkRFU19rczNET0xMQVJfOUUnLAotICAgICAgICAgICAnY29tcF9jdHhfc3QnLCAnWDUwOV9DRVJUX0ZJTEVfQ1RYJ10KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL3B5Ml90ZXN0X2dyYW1tYXIucHkgYi9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvZGF0YS9weTJfdGVzdF9ncmFtbWFyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWE0MTM3Li4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL3B5Ml90ZXN0X2dyYW1tYXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5NzQgKzAsMCBAQAotIyBQeXRob24gdGVzdCBzZXQgLS0gcGFydCAxLCBncmFtbWFyLgotIyBUaGlzIGp1c3QgdGVzdHMgd2hldGhlciB0aGUgcGFyc2VyIGFjY2VwdHMgdGhlbSBhbGwuCi0KLSMgTk9URTogV2hlbiB5b3UgcnVuIHRoaXMgdGVzdCBhcyBhIHNjcmlwdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHlvdQotIyBnZXQgd2FybmluZ3MgYWJvdXQgY2VydGFpbiBoZXgvb2N0IGNvbnN0YW50cy4gIFNpbmNlIHRob3NlIGFyZQotIyBpc3N1ZWQgYnkgdGhlIHBhcnNlciwgeW91IGNhbid0IHN1cHByZXNzIHRoZW0gYnkgYWRkaW5nIGEKLSMgZmlsdGVyd2FybmluZ3MoKSBjYWxsIHRvIHRoaXMgbW9kdWxlLiAgVGhlcmVmb3JlLCB0byBzaHV0IHVwIHRoZQotIyByZWdyZXNzaW9uIHRlc3QsIHRoZSBmaWx0ZXJ3YXJuaW5ncygpIGNhbGwgaGFzIGJlZW4gYWRkZWQgdG8KLSMgcmVncnRlc3QucHkuCi0KLWZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfc3ludGF4X2Vycm9yCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBzeXMKLSMgdGVzdGluZyBpbXBvcnQgKgotZnJvbSBzeXMgaW1wb3J0ICoKLQotY2xhc3MgVG9rZW5UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdEJhY2tzbGFzaChzZWxmKToKLSAgICAgICAgIyBCYWNrc2xhc2ggbWVhbnMgbGluZSBjb250aW51YXRpb246Ci0gICAgICAgIHggPSAxIFwKLSAgICAgICAgKyAxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIDIsICdiYWNrc2xhc2ggZm9yIGxpbmUgY29udGludWF0aW9uJykKLQotICAgICAgICAjIEJhY2tzbGFzaCBkb2VzIG5vdCBtZWFucyBjb250aW51YXRpb24gaW4gY29tbWVudHMgOlwKLSAgICAgICAgeCA9IDAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgMCwgJ2JhY2tzbGFzaCBlbmRpbmcgY29tbWVudCcpCi0KLSAgICBkZWYgdGVzdFBsYWluSW50ZWdlcnMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDB4ZmYsIDI1NSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMDM3NywgMjU1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygyMTQ3NDgzNjQ3LCAwMTc3Nzc3Nzc3NzcpCi0gICAgICAgICMgIjB4IiBpcyBub3QgYSB2YWxpZCBsaXRlcmFsCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAiMHgiKQotICAgICAgICBmcm9tIHN5cyBpbXBvcnQgbWF4aW50Ci0gICAgICAgIGlmIG1heGludCA9PSAyMTQ3NDgzNjQ3OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoLTIxNDc0ODM2NDctMSwgLTAyMDAwMDAwMDAwMCkKLSAgICAgICAgICAgICMgWFhYIC0yMTQ3NDgzNjQ4Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF8oMDM3Nzc3Nzc3Nzc3ID4gMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygweGZmZmZmZmZmID4gMCkKLSAgICAgICAgICAgIGZvciBzIGluICcyMTQ3NDgzNjQ4JywgJzA0MDAwMDAwMDAwMCcsICcweDEwMDAwMDAwMCc6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB4ID0gZXZhbChzKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk92ZXJmbG93RXJyb3Igb24gaHVnZSBpbnRlZ2VyIGxpdGVyYWwgJXIiICUgcykKLSAgICAgICAgZWxpZiBtYXhpbnQgPT0gOTIyMzM3MjAzNjg1NDc3NTgwNzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKC05MjIzMzcyMDM2ODU0Nzc1ODA3LTEsIC0wMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygwMTc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NyA+IDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oMHhmZmZmZmZmZmZmZmZmZmZmID4gMCkKLSAgICAgICAgICAgIGZvciBzIGluICc5MjIzMzcyMDM2ODU0Nzc1ODA4JywgJzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwJywgXAotICAgICAgICAgICAgICAgICAgICAgJzB4MTAwMDAwMDAwMDAwMDAwMDAnOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgeCA9IGV2YWwocykKLSAgICAgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJPdmVyZmxvd0Vycm9yIG9uIGh1Z2UgaW50ZWdlciBsaXRlcmFsICVyIiAlIHMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ1dlaXJkIG1heGludCB2YWx1ZSAlcicgJSBtYXhpbnQpCi0KLSAgICBkZWYgdGVzdExvbmdJbnRlZ2VycyhzZWxmKToKLSAgICAgICAgeCA9IDBMCi0gICAgICAgIHggPSAwbAotICAgICAgICB4ID0gMHhmZmZmZmZmZmZmZmZmZmZmTAotICAgICAgICB4ID0gMHhmZmZmZmZmZmZmZmZmZmZmbAotICAgICAgICB4ID0gMDc3Nzc3Nzc3Nzc3Nzc3Nzc3TAotICAgICAgICB4ID0gMDc3Nzc3Nzc3Nzc3Nzc3Nzc3bAotICAgICAgICB4ID0gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwTAotICAgICAgICB4ID0gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwbAotCi0gICAgZGVmIHRlc3RGbG9hdHMoc2VsZik6Ci0gICAgICAgIHggPSAzLjE0Ci0gICAgICAgIHggPSAzMTQuCi0gICAgICAgIHggPSAwLjMxNAotICAgICAgICAjIFhYWCB4ID0gMDAwLjMxNAotICAgICAgICB4ID0gLjMxNAotICAgICAgICB4ID0gM2UxNAotICAgICAgICB4ID0gM0UxNAotICAgICAgICB4ID0gM2UtMTQKLSAgICAgICAgeCA9IDNlKzE0Ci0gICAgICAgIHggPSAzLmUxNAotICAgICAgICB4ID0gLjNlMTQKLSAgICAgICAgeCA9IDMuMWU0Ci0KLSAgICBkZWYgdGVzdFN0cmluZ0xpdGVyYWxzKHNlbGYpOgotICAgICAgICB4ID0gJyc7IHkgPSAiIjsgc2VsZi5hc3NlcnRfKGxlbih4KSA9PSAwIGFuZCB4ID09IHkpCi0gICAgICAgIHggPSAnXCcnOyB5ID0gIiciOyBzZWxmLmFzc2VydF8obGVuKHgpID09IDEgYW5kIHggPT0geSBhbmQgb3JkKHgpID09IDM5KQotICAgICAgICB4ID0gJyInOyB5ID0gIlwiIjsgc2VsZi5hc3NlcnRfKGxlbih4KSA9PSAxIGFuZCB4ID09IHkgYW5kIG9yZCh4KSA9PSAzNCkKLSAgICAgICAgeCA9ICJkb2Vzbid0IFwic2hyaW5rXCIgZG9lcyBpdCIKLSAgICAgICAgeSA9ICdkb2VzblwndCAic2hyaW5rIiBkb2VzIGl0JwotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHgpID09IDI0IGFuZCB4ID09IHkpCi0gICAgICAgIHggPSAiZG9lcyBcInNocmlua1wiIGRvZXNuJ3QgaXQiCi0gICAgICAgIHkgPSAnZG9lcyAic2hyaW5rIiBkb2VzblwndCBpdCcKLSAgICAgICAgc2VsZi5hc3NlcnRfKGxlbih4KSA9PSAyNCBhbmQgeCA9PSB5KQotICAgICAgICB4ID0gIiIiCi1UaGUgInF1aWNrIgotYnJvd24gZm94Ci1qdW1wcyBvdmVyCi10aGUgJ2xhenknIGRvZy4KLSIiIgotICAgICAgICB5ID0gJ1xuVGhlICJxdWljayJcbmJyb3duIGZveFxuanVtcHMgb3ZlclxudGhlIFwnbGF6eVwnIGRvZy5cbicKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgeSkKLSAgICAgICAgeSA9ICcnJwotVGhlICJxdWljayIKLWJyb3duIGZveAotanVtcHMgb3ZlcgotdGhlICdsYXp5JyBkb2cuCi0nJycKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgeSkKLSAgICAgICAgeSA9ICJcblwKLVRoZSBcInF1aWNrXCJcblwKLWJyb3duIGZveFxuXAotanVtcHMgb3ZlclxuXAotdGhlICdsYXp5JyBkb2cuXG5cCi0iCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIHkpCi0gICAgICAgIHkgPSAnXG5cCi1UaGUgXCJxdWlja1wiXG5cCi1icm93biBmb3hcblwKLWp1bXBzIG92ZXJcblwKLXRoZSBcJ2xhenlcJyBkb2cuXG5cCi0nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIHkpCi0KLQotY2xhc3MgR3JhbW1hclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICMgc2luZ2xlX2lucHV0OiBORVdMSU5FIHwgc2ltcGxlX3N0bXQgfCBjb21wb3VuZF9zdG10IE5FV0xJTkUKLSAgICAjIFhYWCBjYW4ndCB0ZXN0IGluIGEgc2NyaXB0IC0tIHRoaXMgcnVsZSBpcyBvbmx5IHVzZWQgd2hlbiBpbnRlcmFjdGl2ZQotCi0gICAgIyBmaWxlX2lucHV0OiAoTkVXTElORSB8IHN0bXQpKiBFTkRNQVJLRVIKLSAgICAjIEJlaW5nIHRlc3RlZCBhcyB0aGlzIHZlcnkgbW9tZW50IHRoaXMgdmVyeSBtb2R1bGUKLQotICAgICMgZXhwcl9pbnB1dDogdGVzdGxpc3QgTkVXTElORQotICAgICMgWFhYIEhhcmQgdG8gdGVzdCAtLSB1c2VkIG9ubHkgaW4gY2FsbHMgdG8gaW5wdXQoKQotCi0gICAgZGVmIHRlc3RFdmFsSW5wdXQoc2VsZik6Ci0gICAgICAgICMgdGVzdGxpc3QgRU5ETUFSS0VSCi0gICAgICAgIHggPSBldmFsKCcxLCAwIG9yIDEnKQotCi0gICAgZGVmIHRlc3RGdW5jZGVmKHNlbGYpOgotICAgICAgICAjIyMgJ2RlZicgTkFNRSBwYXJhbWV0ZXJzICc6JyBzdWl0ZQotICAgICAgICAjIyMgcGFyYW1ldGVyczogJygnIFt2YXJhcmdzbGlzdF0gJyknCi0gICAgICAgICMjIyB2YXJhcmdzbGlzdDogKGZwZGVmIFsnPScgdGVzdF0gJywnKSogKCcqJyBOQU1FIFsnLCcgKCcqKid8JyonICcqJykgTkFNRV0KLSAgICAgICAgIyMjICAgICAgICAgICAgfCAoJyoqJ3wnKicgJyonKSBOQU1FKQotICAgICAgICAjIyMgICAgICAgICAgICB8IGZwZGVmIFsnPScgdGVzdF0gKCcsJyBmcGRlZiBbJz0nIHRlc3RdKSogWycsJ10KLSAgICAgICAgIyMjIGZwZGVmOiBOQU1FIHwgJygnIGZwbGlzdCAnKScKLSAgICAgICAgIyMjIGZwbGlzdDogZnBkZWYgKCcsJyBmcGRlZikqIFsnLCddCi0gICAgICAgICMjIyBhcmdsaXN0OiAoYXJndW1lbnQgJywnKSogKGFyZ3VtZW50IHwgKicgdGVzdCBbJywnICcqKicgdGVzdF0gfCAnKionIHRlc3QpCi0gICAgICAgICMjIyBhcmd1bWVudDogW3Rlc3QgJz0nXSB0ZXN0ICAgIyBSZWFsbHkgW2tleXdvcmQgJz0nXSB0ZXN0Ci0gICAgICAgIGRlZiBmMSgpOiBwYXNzCi0gICAgICAgIGYxKCkKLSAgICAgICAgZjEoKigpKQotICAgICAgICBmMSgqKCksICoqe30pCi0gICAgICAgIGRlZiBmMihvbmVfYXJndW1lbnQpOiBwYXNzCi0gICAgICAgIGRlZiBmMyh0d28sIGFyZ3VtZW50cyk6IHBhc3MKLSAgICAgICAgZGVmIGY0KHR3bywgKGNvbXBvdW5kLCAoYXJndW1lbnQsIGxpc3QpKSk6IHBhc3MKLSAgICAgICAgZGVmIGY1KChjb21wb3VuZCwgZmlyc3QpLCB0d28pOiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYyLmZ1bmNfY29kZS5jb192YXJuYW1lcywgKCdvbmVfYXJndW1lbnQnLCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYzLmZ1bmNfY29kZS5jb192YXJuYW1lcywgKCd0d28nLCAnYXJndW1lbnRzJykpCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdqYXZhJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmNC5mdW5jX2NvZGUuY29fdmFybmFtZXMsCi0gICAgICAgICAgICAgICAgICAgKCd0d28nLCAnKGNvbXBvdW5kLCAoYXJndW1lbnQsIGxpc3QpKScsICdjb21wb3VuZCcsICdhcmd1bWVudCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaXN0JywpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZjUuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLAotICAgICAgICAgICAgICAgICAgICgnKGNvbXBvdW5kLCBmaXJzdCknLCAndHdvJywgJ2NvbXBvdW5kJywgJ2ZpcnN0JykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmNC5mdW5jX2NvZGUuY29fdmFybmFtZXMsCi0gICAgICAgICAgICAgICAgICAoJ3R3bycsICcuMScsICdjb21wb3VuZCcsICdhcmd1bWVudCcsICAnbGlzdCcpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZjUuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLAotICAgICAgICAgICAgICAgICAgKCcuMCcsICd0d28nLCAnY29tcG91bmQnLCAnZmlyc3QnKSkKLSAgICAgICAgZGVmIGExKG9uZV9hcmcsKTogcGFzcwotICAgICAgICBkZWYgYTIodHdvLCBhcmdzLCk6IHBhc3MKLSAgICAgICAgZGVmIHYwKCpyZXN0KTogcGFzcwotICAgICAgICBkZWYgdjEoYSwgKnJlc3QpOiBwYXNzCi0gICAgICAgIGRlZiB2MihhLCBiLCAqcmVzdCk6IHBhc3MKLSAgICAgICAgZGVmIHYzKGEsIChiLCBjKSwgKnJlc3QpOiByZXR1cm4gYSwgYiwgYywgcmVzdAotCi0gICAgICAgIGYxKCkKLSAgICAgICAgZjIoMSkKLSAgICAgICAgZjIoMSwpCi0gICAgICAgIGYzKDEsIDIpCi0gICAgICAgIGYzKDEsIDIsKQotICAgICAgICBmNCgxLCAoMiwgKDMsIDQpKSkKLSAgICAgICAgdjAoKQotICAgICAgICB2MCgxKQotICAgICAgICB2MCgxLCkKLSAgICAgICAgdjAoMSwyKQotICAgICAgICB2MCgxLDIsMyw0LDUsNiw3LDgsOSwwKQotICAgICAgICB2MSgxKQotICAgICAgICB2MSgxLCkKLSAgICAgICAgdjEoMSwyKQotICAgICAgICB2MSgxLDIsMykKLSAgICAgICAgdjEoMSwyLDMsNCw1LDYsNyw4LDksMCkKLSAgICAgICAgdjIoMSwyKQotICAgICAgICB2MigxLDIsMykKLSAgICAgICAgdjIoMSwyLDMsNCkKLSAgICAgICAgdjIoMSwyLDMsNCw1LDYsNyw4LDksMCkKLSAgICAgICAgdjMoMSwoMiwzKSkKLSAgICAgICAgdjMoMSwoMiwzKSw0KQotICAgICAgICB2MygxLCgyLDMpLDQsNSw2LDcsOCw5LDApCi0KLSAgICAgICAgIyBjZXZhbCB1bnBhY2tzIHRoZSBmb3JtYWwgYXJndW1lbnRzIGludG8gdGhlIGZpcnN0IGFyZ2NvdW50IG5hbWVzOwotICAgICAgICAjIHRodXMsIHRoZSBuYW1lcyBuZXN0ZWQgaW5zaWRlIHR1cGxlcyBtdXN0IGFwcGVhciBhZnRlciB0aGVzZSBuYW1lcy4KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHYzLmZ1bmNfY29kZS5jb192YXJuYW1lcywgKCdhJywgJyhiLCBjKScsICdyZXN0JywgJ2InLCAnYycpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModjMuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLCAoJ2EnLCAnLjEnLCAncmVzdCcsICdiJywgJ2MnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModjMoMSwgKDIsIDMpLCA0KSwgKDEsIDIsIDMsICg0LCkpKQotICAgICAgICBkZWYgZDAxKGE9MSk6IHBhc3MKLSAgICAgICAgZDAxKCkKLSAgICAgICAgZDAxKDEpCi0gICAgICAgIGQwMSgqKDEsKSkKLSAgICAgICAgZDAxKCoqeydhJzoyfSkKLSAgICAgICAgZGVmIGQxMShhLCBiPTEpOiBwYXNzCi0gICAgICAgIGQxMSgxKQotICAgICAgICBkMTEoMSwgMikKLSAgICAgICAgZDExKDEsICoqeydiJzoyfSkKLSAgICAgICAgZGVmIGQyMShhLCBiLCBjPTEpOiBwYXNzCi0gICAgICAgIGQyMSgxLCAyKQotICAgICAgICBkMjEoMSwgMiwgMykKLSAgICAgICAgZDIxKCooMSwgMiwgMykpCi0gICAgICAgIGQyMSgxLCAqKDIsIDMpKQotICAgICAgICBkMjEoMSwgMiwgKigzLCkpCi0gICAgICAgIGQyMSgxLCAyLCAqKnsnYyc6M30pCi0gICAgICAgIGRlZiBkMDIoYT0xLCBiPTIpOiBwYXNzCi0gICAgICAgIGQwMigpCi0gICAgICAgIGQwMigxKQotICAgICAgICBkMDIoMSwgMikKLSAgICAgICAgZDAyKCooMSwgMikpCi0gICAgICAgIGQwMigxLCAqKDIsKSkKLSAgICAgICAgZDAyKDEsICoqeydiJzoyfSkKLSAgICAgICAgZDAyKCoqeydhJzogMSwgJ2InOiAyfSkKLSAgICAgICAgZGVmIGQxMihhLCBiPTEsIGM9Mik6IHBhc3MKLSAgICAgICAgZDEyKDEpCi0gICAgICAgIGQxMigxLCAyKQotICAgICAgICBkMTIoMSwgMiwgMykKLSAgICAgICAgZGVmIGQyMihhLCBiLCBjPTEsIGQ9Mik6IHBhc3MKLSAgICAgICAgZDIyKDEsIDIpCi0gICAgICAgIGQyMigxLCAyLCAzKQotICAgICAgICBkMjIoMSwgMiwgMywgNCkKLSAgICAgICAgZGVmIGQwMXYoYT0xLCAqcmVzdCk6IHBhc3MKLSAgICAgICAgZDAxdigpCi0gICAgICAgIGQwMXYoMSkKLSAgICAgICAgZDAxdigxLCAyKQotICAgICAgICBkMDF2KCooMSwgMiwgMywgNCkpCi0gICAgICAgIGQwMXYoKigxLCkpCi0gICAgICAgIGQwMXYoKip7J2EnOjJ9KQotICAgICAgICBkZWYgZDExdihhLCBiPTEsICpyZXN0KTogcGFzcwotICAgICAgICBkMTF2KDEpCi0gICAgICAgIGQxMXYoMSwgMikKLSAgICAgICAgZDExdigxLCAyLCAzKQotICAgICAgICBkZWYgZDIxdihhLCBiLCBjPTEsICpyZXN0KTogcGFzcwotICAgICAgICBkMjF2KDEsIDIpCi0gICAgICAgIGQyMXYoMSwgMiwgMykKLSAgICAgICAgZDIxdigxLCAyLCAzLCA0KQotICAgICAgICBkMjF2KCooMSwgMiwgMywgNCkpCi0gICAgICAgIGQyMXYoMSwgMiwgKip7J2MnOiAzfSkKLSAgICAgICAgZGVmIGQwMnYoYT0xLCBiPTIsICpyZXN0KTogcGFzcwotICAgICAgICBkMDJ2KCkKLSAgICAgICAgZDAydigxKQotICAgICAgICBkMDJ2KDEsIDIpCi0gICAgICAgIGQwMnYoMSwgMiwgMykKLSAgICAgICAgZDAydigxLCAqKDIsIDMsIDQpKQotICAgICAgICBkMDJ2KCoqeydhJzogMSwgJ2InOiAyfSkKLSAgICAgICAgZGVmIGQxMnYoYSwgYj0xLCBjPTIsICpyZXN0KTogcGFzcwotICAgICAgICBkMTJ2KDEpCi0gICAgICAgIGQxMnYoMSwgMikKLSAgICAgICAgZDEydigxLCAyLCAzKQotICAgICAgICBkMTJ2KDEsIDIsIDMsIDQpCi0gICAgICAgIGQxMnYoKigxLCAyLCAzLCA0KSkKLSAgICAgICAgZDEydigxLCAyLCAqKDMsIDQsIDUpKQotICAgICAgICBkMTJ2KDEsICooMiwpLCAqKnsnYyc6IDN9KQotICAgICAgICBkZWYgZDIydihhLCBiLCBjPTEsIGQ9MiwgKnJlc3QpOiBwYXNzCi0gICAgICAgIGQyMnYoMSwgMikKLSAgICAgICAgZDIydigxLCAyLCAzKQotICAgICAgICBkMjJ2KDEsIDIsIDMsIDQpCi0gICAgICAgIGQyMnYoMSwgMiwgMywgNCwgNSkKLSAgICAgICAgZDIydigqKDEsIDIsIDMsIDQpKQotICAgICAgICBkMjJ2KDEsIDIsICooMywgNCwgNSkpCi0gICAgICAgIGQyMnYoMSwgKigyLCAzKSwgKip7J2QnOiA0fSkKLSAgICAgICAgZGVmIGQzMXYoKHgpKTogcGFzcwotICAgICAgICBkMzF2KDEpCi0gICAgICAgIGRlZiBkMzJ2KCh4LCkpOiBwYXNzCi0gICAgICAgIGQzMnYoKDEsKSkKLQotICAgICAgICAjIGtleXdvcmQgYXJndW1lbnRzIGFmdGVyICphcmdsaXN0Ci0gICAgICAgIGRlZiBmKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICAgICByZXR1cm4gYXJncywga3dhcmdzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYoMSwgeD0yLCAqWzMsIDRdLCB5PTUpLCAoKDEsIDMsIDQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsneCc6MiwgJ3knOjV9KSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsICJmKDEsICooMiwzKSwgNCkiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgImYoMSwgeD0yLCAqKDMsNCksIHg9NSkiKQotCi0gICAgICAgICMgQ2hlY2sgYXN0IGVycm9ycyBpbiAqYXJncyBhbmQgKmt3YXJncwotICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImYoKmcoMT0yKSkiKQotICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImYoKipnKDE9MikpIikKLQotICAgIGRlZiB0ZXN0TGFtYmRlZihzZWxmKToKLSAgICAgICAgIyMjIGxhbWJkZWY6ICdsYW1iZGEnIFt2YXJhcmdzbGlzdF0gJzonIHRlc3QKLSAgICAgICAgbDEgPSBsYW1iZGEgOiAwCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGwxKCksIDApCi0gICAgICAgIGwyID0gbGFtYmRhIDogYVtkXSAjIFhYWCBqdXN0IHRlc3RpbmcgdGhlIGV4cHJlc3Npb24KLSAgICAgICAgbDMgPSBsYW1iZGEgOiBbMiA8IHggZm9yIHggaW4gWy0xLCAzLCAwTF1dCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGwzKCksIFswLCAxLCAwXSkKLSAgICAgICAgbDQgPSBsYW1iZGEgeCA9IGxhbWJkYSB5ID0gbGFtYmRhIHo9MSA6IHogOiB5KCkgOiB4KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobDQoKSwgMSkKLSAgICAgICAgbDUgPSBsYW1iZGEgeCwgeSwgej0yOiB4ICsgeSArIHoKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobDUoMSwgMiksIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGw1KDEsIDIsIDMpLCA2KQotICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImxhbWJkYSB4OiB4ID0gMiIpCi0gICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAibGFtYmRhIChOb25lLCk6IE5vbmUiKQotCi0gICAgIyMjIHN0bXQ6IHNpbXBsZV9zdG10IHwgY29tcG91bmRfc3RtdAotICAgICMgVGVzdGVkIGJlbG93Ci0KLSAgICBkZWYgdGVzdFNpbXBsZVN0bXQoc2VsZik6Ci0gICAgICAgICMjIyBzaW1wbGVfc3RtdDogc21hbGxfc3RtdCAoJzsnIHNtYWxsX3N0bXQpKiBbJzsnXQotICAgICAgICB4ID0gMTsgcGFzczsgZGVsIHgKLSAgICAgICAgZGVmIGZvbygpOgotICAgICAgICAgICAgIyB2ZXJpZnkgc3RhdGVtZW50cyB0aGF0IGVuZCB3aXRoIHNlbWktY29sb25zCi0gICAgICAgICAgICB4ID0gMTsgcGFzczsgZGVsIHg7Ci0gICAgICAgIGZvbygpCi0KLSAgICAjIyMgc21hbGxfc3RtdDogZXhwcl9zdG10IHwgcHJpbnRfc3RtdCAgfCBwYXNzX3N0bXQgfCBkZWxfc3RtdCB8IGZsb3dfc3RtdCB8IGltcG9ydF9zdG10IHwgZ2xvYmFsX3N0bXQgfCBhY2Nlc3Nfc3RtdCB8IGV4ZWNfc3RtdAotICAgICMgVGVzdGVkIGJlbG93Ci0KLSAgICBkZWYgdGVzdEV4cHJTdG10KHNlbGYpOgotICAgICAgICAjIChleHBybGlzdCAnPScpKiBleHBybGlzdAotICAgICAgICAxCi0gICAgICAgIDEsIDIsIDMKLSAgICAgICAgeCA9IDEKLSAgICAgICAgeCA9IDEsIDIsIDMKLSAgICAgICAgeCA9IHkgPSB6ID0gMSwgMiwgMwotICAgICAgICB4LCB5LCB6ID0gMSwgMiwgMwotICAgICAgICBhYmMgPSBhLCBiLCBjID0geCwgeSwgeiA9IHh5eiA9IDEsIDIsICgzLCA0KQotCi0gICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAieCArIDEgPSAxIikKLSAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJhICsgMSA9IGIgKyAyIikKLQotICAgIGRlZiB0ZXN0UHJpbnRTdG10KHNlbGYpOgotICAgICAgICAjICdwcmludCcgKHRlc3QgJywnKSogW3Rlc3RdCi0gICAgICAgIGltcG9ydCBTdHJpbmdJTwotCi0gICAgICAgICMgQ2FuJ3QgdGVzdCBwcmludGluZyB0byByZWFsIHN0ZG91dCB3aXRob3V0IGNvbXBhcmluZyBvdXRwdXQKLSAgICAgICAgIyB3aGljaCBpcyBub3QgYXZhaWxhYmxlIGluIHVuaXR0ZXN0LgotICAgICAgICBzYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKLSAgICAgICAgc3lzLnN0ZG91dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKLQotICAgICAgICBwcmludCAxLCAyLCAzCi0gICAgICAgIHByaW50IDEsIDIsIDMsCi0gICAgICAgIHByaW50Ci0gICAgICAgIHByaW50IDAgb3IgMSwgMCBvciAxLAotICAgICAgICBwcmludCAwIG9yIDEKLQotICAgICAgICAjICdwcmludCcgJz4+JyB0ZXN0ICcsJwotICAgICAgICBwcmludCA+PiBzeXMuc3Rkb3V0LCAxLCAyLCAzCi0gICAgICAgIHByaW50ID4+IHN5cy5zdGRvdXQsIDEsIDIsIDMsCi0gICAgICAgIHByaW50ID4+IHN5cy5zdGRvdXQKLSAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZG91dCwgMCBvciAxLCAwIG9yIDEsCi0gICAgICAgIHByaW50ID4+IHN5cy5zdGRvdXQsIDAgb3IgMQotCi0gICAgICAgICMgdGVzdCBwcmludGluZyB0byBhbiBpbnN0YW5jZQotICAgICAgICBjbGFzcyBHdWxwOgotICAgICAgICAgICAgZGVmIHdyaXRlKHNlbGYsIG1zZyk6IHBhc3MKLQotICAgICAgICBndWxwID0gR3VscCgpCi0gICAgICAgIHByaW50ID4+IGd1bHAsIDEsIDIsIDMKLSAgICAgICAgcHJpbnQgPj4gZ3VscCwgMSwgMiwgMywKLSAgICAgICAgcHJpbnQgPj4gZ3VscAotICAgICAgICBwcmludCA+PiBndWxwLCAwIG9yIDEsIDAgb3IgMSwKLSAgICAgICAgcHJpbnQgPj4gZ3VscCwgMCBvciAxCi0KLSAgICAgICAgIyB0ZXN0IHByaW50ID4+IE5vbmUKLSAgICAgICAgZGVmIGRyaXZlcigpOgotICAgICAgICAgICAgb2xkc3Rkb3V0ID0gc3lzLnN0ZG91dAotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IEd1bHAoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHRlbGxtZShHdWxwKCkpCi0gICAgICAgICAgICAgICAgdGVsbG1lKCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IG9sZHN0ZG91dAotCi0gICAgICAgICMgd2Ugc2hvdWxkIHNlZSB0aGlzIG9uY2UKLSAgICAgICAgZGVmIHRlbGxtZShmaWxlPXN5cy5zdGRvdXQpOgotICAgICAgICAgICAgcHJpbnQgPj4gZmlsZSwgJ2hlbGxvIHdvcmxkJwotCi0gICAgICAgIGRyaXZlcigpCi0KLSAgICAgICAgIyB3ZSBzaG91bGQgbm90IHNlZSB0aGlzIGF0IGFsbAotICAgICAgICBkZWYgdGVsbG1lKGZpbGU9Tm9uZSk6Ci0gICAgICAgICAgICBwcmludCA+PiBmaWxlLCAnZ29vZGJ5ZSB1bml2ZXJzZScKLQotICAgICAgICBkcml2ZXIoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLnN0ZG91dC5nZXR2YWx1ZSgpLCAnJydcCi0xIDIgMwotMSAyIDMKLTEgMSAxCi0xIDIgMwotMSAyIDMKLTEgMSAxCi1oZWxsbyB3b3JsZAotJycnKQotICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZV9zdGRvdXQKLQotICAgICAgICAjIHN5bnRheCBlcnJvcnMKLSAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICdwcmludCAsJykKLSAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICdwcmludCA+PiB4LCcpCi0KLSAgICBkZWYgdGVzdERlbFN0bXQoc2VsZik6Ci0gICAgICAgICMgJ2RlbCcgZXhwcmxpc3QKLSAgICAgICAgYWJjID0gWzEsMiwzXQotICAgICAgICB4LCB5LCB6ID0gYWJjCi0gICAgICAgIHh5eiA9IHgsIHksIHoKLQotICAgICAgICBkZWwgYWJjCi0gICAgICAgIGRlbCB4LCB5LCAoeiwgeHl6KQotCi0gICAgZGVmIHRlc3RQYXNzU3RtdChzZWxmKToKLSAgICAgICAgIyAncGFzcycKLSAgICAgICAgcGFzcwotCi0gICAgIyBmbG93X3N0bXQ6IGJyZWFrX3N0bXQgfCBjb250aW51ZV9zdG10IHwgcmV0dXJuX3N0bXQgfCByYWlzZV9zdG10Ci0gICAgIyBUZXN0ZWQgYmVsb3cKLQotICAgIGRlZiB0ZXN0QnJlYWtTdG10KHNlbGYpOgotICAgICAgICAjICdicmVhaycKLSAgICAgICAgd2hpbGUgMTogYnJlYWsKLQotICAgIGRlZiB0ZXN0Q29udGludWVTdG10KHNlbGYpOgotICAgICAgICAjICdjb250aW51ZScKLSAgICAgICAgaSA9IDEKLSAgICAgICAgd2hpbGUgaTogaSA9IDA7IGNvbnRpbnVlCi0KLSAgICAgICAgbXNnID0gIiIKLSAgICAgICAgd2hpbGUgbm90IG1zZzoKLSAgICAgICAgICAgIG1zZyA9ICJvayIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIG1zZyA9ICJjb250aW51ZSBmYWlsZWQgdG8gY29udGludWUgaW5zaWRlIHRyeSIKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBtc2cgPSAiY29udGludWUgaW5zaWRlIHRyeSBjYWxsZWQgZXhjZXB0IGJsb2NrIgotICAgICAgICBpZiBtc2cgIT0gIm9rIjoKLSAgICAgICAgICAgIHNlbGYuZmFpbChtc2cpCi0KLSAgICAgICAgbXNnID0gIiIKLSAgICAgICAgd2hpbGUgbm90IG1zZzoKLSAgICAgICAgICAgIG1zZyA9ICJmaW5hbGx5IGJsb2NrIG5vdCBjYWxsZWQiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgbXNnID0gIm9rIgotICAgICAgICBpZiBtc2cgIT0gIm9rIjoKLSAgICAgICAgICAgIHNlbGYuZmFpbChtc2cpCi0KLSAgICBkZWYgdGVzdF9icmVha19jb250aW51ZV9sb29wKHNlbGYpOgotICAgICAgICAjIFRoaXMgdGVzdCB3YXJyYW50cyBhbiBleHBsYW5hdGlvbi4gSXQgaXMgYSB0ZXN0IHNwZWNpZmljYWxseSBmb3IgU0YgYnVncwotICAgICAgICAjICM0NjMzNTkgYW5kICM0NjI5MzcuIFRoZSBidWcgaXMgdGhhdCBhICdicmVhaycgc3RhdGVtZW50IGV4ZWN1dGVkIG9yCi0gICAgICAgICMgZXhjZXB0aW9uIHJhaXNlZCBpbnNpZGUgYSB0cnkvZXhjZXB0IGluc2lkZSBhIGxvb3AsICphZnRlciogYSBjb250aW51ZQotICAgICAgICAjIHN0YXRlbWVudCBoYXMgYmVlbiBleGVjdXRlZCBpbiB0aGF0IGxvb3AsIHdpbGwgY2F1c2UgdGhlIHdyb25nIG51bWJlciBvZgotICAgICAgICAjIGFyZ3VtZW50cyB0byBiZSBwb3BwZWQgb2ZmIHRoZSBzdGFjayBhbmQgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgcmVzZXQgdG8KLSAgICAgICAgIyBhIHZlcnkgc21hbGwgbnVtYmVyICh1c3VhbGx5IDAuKSBCZWNhdXNlIG9mIHRoaXMsIHRoZSBmb2xsb3dpbmcgdGVzdAotICAgICAgICAjICptdXN0KiB3cml0dGVuIGFzIGEgZnVuY3Rpb24sIGFuZCB0aGUgdHJhY2tpbmcgdmFycyAqbXVzdCogYmUgZnVuY3Rpb24KLSAgICAgICAgIyBhcmd1bWVudHMgd2l0aCBkZWZhdWx0IHZhbHVlcy4gT3RoZXJ3aXNlLCB0aGUgdGVzdCB3aWxsIGxvb3AgYW5kIGxvb3AuCi0KLSAgICAgICAgZGVmIHRlc3RfaW5uZXIoZXh0cmFfYnVybmluZ19vaWwgPSAxLCBjb3VudD0wKToKLSAgICAgICAgICAgIGJpZ19oaXBwbyA9IDIKLSAgICAgICAgICAgIHdoaWxlIGJpZ19oaXBwbzoKLSAgICAgICAgICAgICAgICBjb3VudCArPSAxCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBpZiBleHRyYV9idXJuaW5nX29pbCBhbmQgYmlnX2hpcHBvID09IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9idXJuaW5nX29pbCAtPSAxCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBiaWdfaGlwcG8gLT0gMQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGlmIGNvdW50ID4gMiBvciBiaWdfaGlwcG8gPD4gMToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImNvbnRpbnVlIHRoZW4gYnJlYWsgaW4gdHJ5L2V4Y2VwdCBpbiBsb29wIGJyb2tlbiEiKQotICAgICAgICB0ZXN0X2lubmVyKCkKLQotICAgIGRlZiB0ZXN0UmV0dXJuKHNlbGYpOgotICAgICAgICAjICdyZXR1cm4nIFt0ZXN0bGlzdF0KLSAgICAgICAgZGVmIGcxKCk6IHJldHVybgotICAgICAgICBkZWYgZzIoKTogcmV0dXJuIDEKLSAgICAgICAgZzEoKQotICAgICAgICB4ID0gZzIoKQotICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImNsYXNzIGZvbzpyZXR1cm4gMSIpCi0KLSAgICBkZWYgdGVzdFlpZWxkKHNlbGYpOgotICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImNsYXNzIGZvbzp5aWVsZCAxIikKLQotICAgIGRlZiB0ZXN0UmFpc2Uoc2VsZik6Ci0gICAgICAgICMgJ3JhaXNlJyB0ZXN0IFsnLCcgdGVzdF0KLSAgICAgICAgdHJ5OiByYWlzZSBSdW50aW1lRXJyb3IsICdqdXN0IHRlc3RpbmcnCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6IHBhc3MKLSAgICAgICAgdHJ5OiByYWlzZSBLZXlib2FyZEludGVycnVwdAotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6IHBhc3MKLQotICAgIGRlZiB0ZXN0SW1wb3J0KHNlbGYpOgotICAgICAgICAjICdpbXBvcnQnIGRvdHRlZF9hc19uYW1lcwotICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgIGltcG9ydCB0aW1lLCBzeXMKLSAgICAgICAgIyAnZnJvbScgZG90dGVkX25hbWUgJ2ltcG9ydCcgKCcqJyB8ICcoJyBpbXBvcnRfYXNfbmFtZXMgJyknIHwgaW1wb3J0X2FzX25hbWVzKQotICAgICAgICBmcm9tIHRpbWUgaW1wb3J0IHRpbWUKLSAgICAgICAgZnJvbSB0aW1lIGltcG9ydCAodGltZSkKLSAgICAgICAgIyBub3QgdGVzdGFibGUgaW5zaWRlIGEgZnVuY3Rpb24sIGJ1dCBhbHJlYWR5IGRvbmUgYXQgdG9wIG9mIHRoZSBtb2R1bGUKLSAgICAgICAgIyBmcm9tIHN5cyBpbXBvcnQgKgotICAgICAgICBmcm9tIHN5cyBpbXBvcnQgcGF0aCwgYXJndgotICAgICAgICBmcm9tIHN5cyBpbXBvcnQgKHBhdGgsIGFyZ3YpCi0gICAgICAgIGZyb20gc3lzIGltcG9ydCAocGF0aCwgYXJndiwpCi0KLSAgICBkZWYgdGVzdEdsb2JhbChzZWxmKToKLSAgICAgICAgIyAnZ2xvYmFsJyBOQU1FICgnLCcgTkFNRSkqCi0gICAgICAgIGdsb2JhbCBhCi0gICAgICAgIGdsb2JhbCBhLCBiCi0gICAgICAgIGdsb2JhbCBvbmUsIHR3bywgdGhyZWUsIGZvdXIsIGZpdmUsIHNpeCwgc2V2ZW4sIGVpZ2h0LCBuaW5lLCB0ZW4KLQotICAgIGRlZiB0ZXN0RXhlYyhzZWxmKToKLSAgICAgICAgIyAnZXhlYycgZXhwciBbJ2luJyBleHByIFsnLCcgZXhwcl1dCi0gICAgICAgIHogPSBOb25lCi0gICAgICAgIGRlbCB6Ci0gICAgICAgIGV4ZWMgJ3o9MSsxXG4nCi0gICAgICAgIGlmIHogIT0gMjogc2VsZi5mYWlsKCdleGVjIFwnej0xKzFcJ1xcbicpCi0gICAgICAgIGRlbCB6Ci0gICAgICAgIGV4ZWMgJ3o9MSsxJwotICAgICAgICBpZiB6ICE9IDI6IHNlbGYuZmFpbCgnZXhlYyBcJ3o9MSsxXCcnKQotICAgICAgICB6ID0gTm9uZQotICAgICAgICBkZWwgegotICAgICAgICBpbXBvcnQgdHlwZXMKLSAgICAgICAgaWYgaGFzYXR0cih0eXBlcywgIlVuaWNvZGVUeXBlIik6Ci0gICAgICAgICAgICBleGVjIHIiIiJpZiAxOgotICAgICAgICAgICAgZXhlYyB1J3o9MSsxXG4nCi0gICAgICAgICAgICBpZiB6ICE9IDI6IHNlbGYuZmFpbCgnZXhlYyB1XCd6PTErMVwnXFxuJykKLSAgICAgICAgICAgIGRlbCB6Ci0gICAgICAgICAgICBleGVjIHUnej0xKzEnCi0gICAgICAgICAgICBpZiB6ICE9IDI6IHNlbGYuZmFpbCgnZXhlYyB1XCd6PTErMVwnJykiIiIKLSAgICAgICAgZyA9IHt9Ci0gICAgICAgIGV4ZWMgJ3ogPSAxJyBpbiBnCi0gICAgICAgIGlmIGcuaGFzX2tleSgnX19idWlsdGluc19fJyk6IGRlbCBnWydfX2J1aWx0aW5zX18nXQotICAgICAgICBpZiBnICE9IHsneic6IDF9OiBzZWxmLmZhaWwoJ2V4ZWMgXCd6ID0gMVwnIGluIGcnKQotICAgICAgICBnID0ge30KLSAgICAgICAgbCA9IHt9Ci0KLSAgICAgICAgaW1wb3J0IHdhcm5pbmdzCi0gICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAiZ2xvYmFsIHN0YXRlbWVudCIsIG1vZHVsZT0iPHN0cmluZz4iKQotICAgICAgICBleGVjICdnbG9iYWwgYTsgYSA9IDE7IGIgPSAyJyBpbiBnLCBsCi0gICAgICAgIGlmIGcuaGFzX2tleSgnX19idWlsdGluc19fJyk6IGRlbCBnWydfX2J1aWx0aW5zX18nXQotICAgICAgICBpZiBsLmhhc19rZXkoJ19fYnVpbHRpbnNfXycpOiBkZWwgbFsnX19idWlsdGluc19fJ10KLSAgICAgICAgaWYgKGcsIGwpICE9ICh7J2EnOjF9LCB7J2InOjJ9KToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnZXhlYyAuLi4gaW4gZyAoJXMpLCBsICglcyknICUoZyxsKSkKLQotICAgIGRlZiB0ZXN0QXNzZXJ0KHNlbGYpOgotICAgICAgICAjIGFzc2VydF9zdG10OiAnYXNzZXJ0JyB0ZXN0IFsnLCcgdGVzdF0KLSAgICAgICAgYXNzZXJ0IDEKLSAgICAgICAgYXNzZXJ0IDEsIDEKLSAgICAgICAgYXNzZXJ0IGxhbWJkYSB4OngKLSAgICAgICAgYXNzZXJ0IDEsIGxhbWJkYSB4OngrMQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBhc3NlcnQgMCwgIm1zZyIKLSAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZS5hcmdzWzBdLCAibXNnIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIF9fZGVidWdfXzoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkFzc2VydGlvbkVycm9yIG5vdCByYWlzZWQgYnkgYXNzZXJ0IDAiKQotCi0gICAgIyMjIGNvbXBvdW5kX3N0bXQ6IGlmX3N0bXQgfCB3aGlsZV9zdG10IHwgZm9yX3N0bXQgfCB0cnlfc3RtdCB8IGZ1bmNkZWYgfCBjbGFzc2RlZgotICAgICMgVGVzdGVkIGJlbG93Ci0KLSAgICBkZWYgdGVzdElmKHNlbGYpOgotICAgICAgICAjICdpZicgdGVzdCAnOicgc3VpdGUgKCdlbGlmJyB0ZXN0ICc6JyBzdWl0ZSkqIFsnZWxzZScgJzonIHN1aXRlXQotICAgICAgICBpZiAxOiBwYXNzCi0gICAgICAgIGlmIDE6IHBhc3MKLSAgICAgICAgZWxzZTogcGFzcwotICAgICAgICBpZiAwOiBwYXNzCi0gICAgICAgIGVsaWYgMDogcGFzcwotICAgICAgICBpZiAwOiBwYXNzCi0gICAgICAgIGVsaWYgMDogcGFzcwotICAgICAgICBlbGlmIDA6IHBhc3MKLSAgICAgICAgZWxpZiAwOiBwYXNzCi0gICAgICAgIGVsc2U6IHBhc3MKLQotICAgIGRlZiB0ZXN0V2hpbGUoc2VsZik6Ci0gICAgICAgICMgJ3doaWxlJyB0ZXN0ICc6JyBzdWl0ZSBbJ2Vsc2UnICc6JyBzdWl0ZV0KLSAgICAgICAgd2hpbGUgMDogcGFzcwotICAgICAgICB3aGlsZSAwOiBwYXNzCi0gICAgICAgIGVsc2U6IHBhc3MKLQotICAgICAgICAjIElzc3VlMTkyMDogIndoaWxlIDAiIGlzIG9wdGltaXplZCBhd2F5LAotICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSAiZWxzZSIgY2xhdXNlIGlzIHN0aWxsIHByZXNlbnQuCi0gICAgICAgIHggPSAwCi0gICAgICAgIHdoaWxlIDA6Ci0gICAgICAgICAgICB4ID0gMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgeCA9IDIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgMikKLQotICAgIGRlZiB0ZXN0Rm9yKHNlbGYpOgotICAgICAgICAjICdmb3InIGV4cHJsaXN0ICdpbicgZXhwcmxpc3QgJzonIHN1aXRlIFsnZWxzZScgJzonIHN1aXRlXQotICAgICAgICBmb3IgaSBpbiAxLCAyLCAzOiBwYXNzCi0gICAgICAgIGZvciBpLCBqLCBrIGluICgpOiBwYXNzCi0gICAgICAgIGVsc2U6IHBhc3MKLSAgICAgICAgY2xhc3MgU3F1YXJlczoKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXgpOgotICAgICAgICAgICAgICAgIHNlbGYubWF4ID0gbWF4Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2ZhciA9IFtdCi0gICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKTogcmV0dXJuIGxlbihzZWxmLnNvZmFyKQotICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgotICAgICAgICAgICAgICAgIGlmIG5vdCAwIDw9IGkgPCBzZWxmLm1heDogcmFpc2UgSW5kZXhFcnJvcgotICAgICAgICAgICAgICAgIG4gPSBsZW4oc2VsZi5zb2ZhcikKLSAgICAgICAgICAgICAgICB3aGlsZSBuIDw9IGk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc29mYXIuYXBwZW5kKG4qbikKLSAgICAgICAgICAgICAgICAgICAgbiA9IG4rMQotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNvZmFyW2ldCi0gICAgICAgIG4gPSAwCi0gICAgICAgIGZvciB4IGluIFNxdWFyZXMoMTApOiBuID0gbit4Ci0gICAgICAgIGlmIG4gIT0gMjg1OgotICAgICAgICAgICAgc2VsZi5mYWlsKCdmb3Igb3ZlciBncm93aW5nIHNlcXVlbmNlJykKLQotICAgICAgICByZXN1bHQgPSBbXQotICAgICAgICBmb3IgeCwgaW4gWygxLCksICgyLCksICgzLCldOgotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh4KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWzEsIDIsIDNdKQotCi0gICAgZGVmIHRlc3RUcnkoc2VsZik6Ci0gICAgICAgICMjIyB0cnlfc3RtdDogJ3RyeScgJzonIHN1aXRlIChleGNlcHRfY2xhdXNlICc6JyBzdWl0ZSkrIFsnZWxzZScgJzonIHN1aXRlXQotICAgICAgICAjIyMgICAgICAgICB8ICd0cnknICc6JyBzdWl0ZSAnZmluYWxseScgJzonIHN1aXRlCi0gICAgICAgICMjIyBleGNlcHRfY2xhdXNlOiAnZXhjZXB0JyBbZXhwciBbKCdhcycgfCAnLCcpIGV4cHJdXQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAxLzAKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGFzcwotICAgICAgICB0cnk6IDEvMAotICAgICAgICBleGNlcHQgRU9GRXJyb3I6IHBhc3MKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBtc2c6IHBhc3MKLSAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciwgbXNnOiBwYXNzCi0gICAgICAgIGV4Y2VwdDogcGFzcwotICAgICAgICBlbHNlOiBwYXNzCi0gICAgICAgIHRyeTogMS8wCi0gICAgICAgIGV4Y2VwdCAoRU9GRXJyb3IsIFR5cGVFcnJvciwgWmVyb0RpdmlzaW9uRXJyb3IpOiBwYXNzCi0gICAgICAgIHRyeTogMS8wCi0gICAgICAgIGV4Y2VwdCAoRU9GRXJyb3IsIFR5cGVFcnJvciwgWmVyb0RpdmlzaW9uRXJyb3IpLCBtc2c6IHBhc3MKLSAgICAgICAgdHJ5OiBwYXNzCi0gICAgICAgIGZpbmFsbHk6IHBhc3MKLQotICAgIGRlZiB0ZXN0U3VpdGUoc2VsZik6Ci0gICAgICAgICMgc2ltcGxlX3N0bXQgfCBORVdMSU5FIElOREVOVCBORVdMSU5FKiAoc3RtdCBORVdMSU5FKikrIERFREVOVAotICAgICAgICBpZiAxOiBwYXNzCi0gICAgICAgIGlmIDE6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGlmIDE6Ci0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAjCi0KLSAgICBkZWYgdGVzdFRlc3Qoc2VsZik6Ci0gICAgICAgICMjIyBhbmRfdGVzdCAoJ29yJyBhbmRfdGVzdCkqCi0gICAgICAgICMjIyBhbmRfdGVzdDogbm90X3Rlc3QgKCdhbmQnIG5vdF90ZXN0KSoKLSAgICAgICAgIyMjIG5vdF90ZXN0OiAnbm90JyBub3RfdGVzdCB8IGNvbXBhcmlzb24KLSAgICAgICAgaWYgbm90IDE6IHBhc3MKLSAgICAgICAgaWYgMSBhbmQgMTogcGFzcwotICAgICAgICBpZiAxIG9yIDE6IHBhc3MKLSAgICAgICAgaWYgbm90IG5vdCBub3QgMTogcGFzcwotICAgICAgICBpZiBub3QgMSBhbmQgMSBhbmQgMTogcGFzcwotICAgICAgICBpZiAxIGFuZCAxIG9yIDEgYW5kIDEgYW5kIDEgb3Igbm90IDEgYW5kIDE6IHBhc3MKLQotICAgIGRlZiB0ZXN0Q29tcGFyaXNvbihzZWxmKToKLSAgICAgICAgIyMjIGNvbXBhcmlzb246IGV4cHIgKGNvbXBfb3AgZXhwcikqCi0gICAgICAgICMjIyBjb21wX29wOiAnPCd8Jz4nfCc9PSd8Jz49J3wnPD0nfCc8Pid8JyE9J3wnaW4nfCdub3QnICdpbid8J2lzJ3wnaXMnICdub3QnCi0gICAgICAgIGlmIDE6IHBhc3MKLSAgICAgICAgeCA9ICgxID09IDEpCi0gICAgICAgIGlmIDEgPT0gMTogcGFzcwotICAgICAgICBpZiAxICE9IDE6IHBhc3MKLSAgICAgICAgaWYgMSA8PiAxOiBwYXNzCi0gICAgICAgIGlmIDEgPCAxOiBwYXNzCi0gICAgICAgIGlmIDEgPiAxOiBwYXNzCi0gICAgICAgIGlmIDEgPD0gMTogcGFzcwotICAgICAgICBpZiAxID49IDE6IHBhc3MKLSAgICAgICAgaWYgMSBpcyAxOiBwYXNzCi0gICAgICAgIGlmIDEgaXMgbm90IDE6IHBhc3MKLSAgICAgICAgaWYgMSBpbiAoKTogcGFzcwotICAgICAgICBpZiAxIG5vdCBpbiAoKTogcGFzcwotICAgICAgICBpZiAxIDwgMSA+IDEgPT0gMSA+PSAxIDw9IDEgPD4gMSAhPSAxIGluIDEgbm90IGluIDEgaXMgMSBpcyBub3QgMTogcGFzcwotCi0gICAgZGVmIHRlc3RCaW5hcnlNYXNrT3BzKHNlbGYpOgotICAgICAgICB4ID0gMSAmIDEKLSAgICAgICAgeCA9IDEgXiAxCi0gICAgICAgIHggPSAxIHwgMQotCi0gICAgZGVmIHRlc3RTaGlmdE9wcyhzZWxmKToKLSAgICAgICAgeCA9IDEgPDwgMQotICAgICAgICB4ID0gMSA+PiAxCi0gICAgICAgIHggPSAxIDw8IDEgPj4gMQotCi0gICAgZGVmIHRlc3RBZGRpdGl2ZU9wcyhzZWxmKToKLSAgICAgICAgeCA9IDEKLSAgICAgICAgeCA9IDEgKyAxCi0gICAgICAgIHggPSAxIC0gMSAtIDEKLSAgICAgICAgeCA9IDEgLSAxICsgMSAtIDEgKyAxCi0KLSAgICBkZWYgdGVzdE11bHRpcGxpY2F0aXZlT3BzKHNlbGYpOgotICAgICAgICB4ID0gMSAqIDEKLSAgICAgICAgeCA9IDEgLyAxCi0gICAgICAgIHggPSAxICUgMQotICAgICAgICB4ID0gMSAvIDEgKiAxICUgMQotCi0gICAgZGVmIHRlc3RVbmFyeU9wcyhzZWxmKToKLSAgICAgICAgeCA9ICsxCi0gICAgICAgIHggPSAtMQotICAgICAgICB4ID0gfjEKLSAgICAgICAgeCA9IH4xIF4gMSAmIDEgfCAxICYgMSBeIC0xCi0gICAgICAgIHggPSAtMSoxLzEgKyAxKjEgLSAtLS0xKjEKLQotICAgIGRlZiB0ZXN0U2VsZWN0b3JzKHNlbGYpOgotICAgICAgICAjIyMgdHJhaWxlcjogJygnIFt0ZXN0bGlzdF0gJyknIHwgJ1snIHN1YnNjcmlwdCAnXScgfCAnLicgTkFNRQotICAgICAgICAjIyMgc3Vic2NyaXB0OiBleHByIHwgW2V4cHJdICc6JyBbZXhwcl0KLQotICAgICAgICBpbXBvcnQgc3lzLCB0aW1lCi0gICAgICAgIGMgPSBzeXMucGF0aFswXQotICAgICAgICB4ID0gdGltZS50aW1lKCkKLSAgICAgICAgeCA9IHN5cy5tb2R1bGVzWyd0aW1lJ10udGltZSgpCi0gICAgICAgIGEgPSAnMDEyMzQnCi0gICAgICAgIGMgPSBhWzBdCi0gICAgICAgIGMgPSBhWy0xXQotICAgICAgICBzID0gYVswOjVdCi0gICAgICAgIHMgPSBhWzo1XQotICAgICAgICBzID0gYVswOl0KLSAgICAgICAgcyA9IGFbOl0KLSAgICAgICAgcyA9IGFbLTU6XQotICAgICAgICBzID0gYVs6LTFdCi0gICAgICAgIHMgPSBhWy00Oi0zXQotICAgICAgICAjIEEgcm91Z2ggdGVzdCBvZiBTRiBidWcgMTMzMzk4Mi4gIGh0dHA6Ly9weXRob24ub3JnL3NmLzEzMzM5ODIKLSAgICAgICAgIyBUaGUgdGVzdGluZyBoZXJlIGlzIGZhaXJseSBpbmNvbXBsZXRlLgotICAgICAgICAjIFRlc3QgY2FzZXMgc2hvdWxkIGluY2x1ZGU6IGNvbW1hcyB3aXRoIDEgYW5kIDIgY29sb25zCi0gICAgICAgIGQgPSB7fQotICAgICAgICBkWzFdID0gMQotICAgICAgICBkWzEsXSA9IDIKLSAgICAgICAgZFsxLDJdID0gMwotICAgICAgICBkWzEsMiwzXSA9IDQKLSAgICAgICAgTCA9IGxpc3QoZCkKLSAgICAgICAgTC5zb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3RyKEwpLCAnWzEsICgxLCksICgxLCAyKSwgKDEsIDIsIDMpXScpCi0KLSAgICBkZWYgdGVzdEF0b21zKHNlbGYpOgotICAgICAgICAjIyMgYXRvbTogJygnIFt0ZXN0bGlzdF0gJyknIHwgJ1snIFt0ZXN0bGlzdF0gJ10nIHwgJ3snIFtkaWN0bWFrZXJdICd9JyB8ICdgJyB0ZXN0bGlzdCAnYCcgfCBOQU1FIHwgTlVNQkVSIHwgU1RSSU5HCi0gICAgICAgICMjIyBkaWN0bWFrZXI6IHRlc3QgJzonIHRlc3QgKCcsJyB0ZXN0ICc6JyB0ZXN0KSogWycsJ10KLQotICAgICAgICB4ID0gKDEpCi0gICAgICAgIHggPSAoMSBvciAyIG9yIDMpCi0gICAgICAgIHggPSAoMSBvciAyIG9yIDMsIDIsIDMpCi0KLSAgICAgICAgeCA9IFtdCi0gICAgICAgIHggPSBbMV0KLSAgICAgICAgeCA9IFsxIG9yIDIgb3IgM10KLSAgICAgICAgeCA9IFsxIG9yIDIgb3IgMywgMiwgM10KLSAgICAgICAgeCA9IFtdCi0KLSAgICAgICAgeCA9IHt9Ci0gICAgICAgIHggPSB7J29uZSc6IDF9Ci0gICAgICAgIHggPSB7J29uZSc6IDEsfQotICAgICAgICB4ID0geydvbmUnIG9yICd0d28nOiAxIG9yIDJ9Ci0gICAgICAgIHggPSB7J29uZSc6IDEsICd0d28nOiAyfQotICAgICAgICB4ID0geydvbmUnOiAxLCAndHdvJzogMix9Ci0gICAgICAgIHggPSB7J29uZSc6IDEsICd0d28nOiAyLCAndGhyZWUnOiAzLCAnZm91cic6IDQsICdmaXZlJzogNSwgJ3NpeCc6IDZ9Ci0KLSAgICAgICAgeCA9IGB4YAotICAgICAgICB4ID0gYDEgb3IgMiBvciAzYAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGAxLDJgLCAnKDEsIDIpJykKLQotICAgICAgICB4ID0geAotICAgICAgICB4ID0gJ3gnCi0gICAgICAgIHggPSAxMjMKLQotICAgICMjIyBleHBybGlzdDogZXhwciAoJywnIGV4cHIpKiBbJywnXQotICAgICMjIyB0ZXN0bGlzdDogdGVzdCAoJywnIHRlc3QpKiBbJywnXQotICAgICMgVGhlc2UgaGF2ZSBiZWVuIGV4ZXJjaXNlZCBlbm91Z2ggYWJvdmUKLQotICAgIGRlZiB0ZXN0Q2xhc3NkZWYoc2VsZik6Ci0gICAgICAgICMgJ2NsYXNzJyBOQU1FIFsnKCcgW3Rlc3RsaXN0XSAnKSddICc6JyBzdWl0ZQotICAgICAgICBjbGFzcyBCOiBwYXNzCi0gICAgICAgIGNsYXNzIEIyKCk6IHBhc3MKLSAgICAgICAgY2xhc3MgQzEoQik6IHBhc3MKLSAgICAgICAgY2xhc3MgQzIoQik6IHBhc3MKLSAgICAgICAgY2xhc3MgRChDMSwgQzIsIEIpOiBwYXNzCi0gICAgICAgIGNsYXNzIEM6Ci0gICAgICAgICAgICBkZWYgbWV0aDEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiBtZXRoMihzZWxmLCBhcmcpOiBwYXNzCi0gICAgICAgICAgICBkZWYgbWV0aDMoc2VsZiwgYTEsIGEyKTogcGFzcwotICAgICAgICAjIGRlY29yYXRvcjogJ0AnIGRvdHRlZF9uYW1lIFsgJygnIFthcmdsaXN0XSAnKScgXSBORVdMSU5FCi0gICAgICAgICMgZGVjb3JhdG9yczogZGVjb3JhdG9yKwotICAgICAgICAjIGRlY29yYXRlZDogZGVjb3JhdG9ycyAoY2xhc3NkZWYgfCBmdW5jZGVmKQotICAgICAgICBkZWYgY2xhc3NfZGVjb3JhdG9yKHgpOgotICAgICAgICAgICAgeC5kZWNvcmF0ZWQgPSBUcnVlCi0gICAgICAgICAgICByZXR1cm4geAotICAgICAgICBAY2xhc3NfZGVjb3JhdG9yCi0gICAgICAgIGNsYXNzIEc6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRy5kZWNvcmF0ZWQsIFRydWUpCi0KLSAgICBkZWYgdGVzdExpc3Rjb21wcyhzZWxmKToKLSAgICAgICAgIyBsaXN0IGNvbXByZWhlbnNpb24gdGVzdHMKLSAgICAgICAgbnVtcyA9IFsxLCAyLCAzLCA0LCA1XQotICAgICAgICBzdHJzID0gWyJBcHBsZSIsICJCYW5hbmEiLCAiQ29jb251dCJdCi0gICAgICAgIHNwY3MgPSBbIiAgQXBwbGUiLCAiIEJhbmFuYSAiLCAiQ29jbyAgbnV0ICAiXQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3Muc3RyaXAoKSBmb3IgcyBpbiBzcGNzXSwgWydBcHBsZScsICdCYW5hbmEnLCAnQ29jbyAgbnV0J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzMgKiB4IGZvciB4IGluIG51bXNdLCBbMywgNiwgOSwgMTIsIDE1XSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbeCBmb3IgeCBpbiBudW1zIGlmIHggPiAyXSwgWzMsIDQsIDVdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoaSwgcykgZm9yIGkgaW4gbnVtcyBmb3IgcyBpbiBzdHJzXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbKDEsICdBcHBsZScpLCAoMSwgJ0JhbmFuYScpLCAoMSwgJ0NvY29udXQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdBcHBsZScpLCAoMiwgJ0JhbmFuYScpLCAoMiwgJ0NvY29udXQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdBcHBsZScpLCAoMywgJ0JhbmFuYScpLCAoMywgJ0NvY29udXQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdBcHBsZScpLCAoNCwgJ0JhbmFuYScpLCAoNCwgJ0NvY29udXQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdBcHBsZScpLCAoNSwgJ0JhbmFuYScpLCAoNSwgJ0NvY29udXQnKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyhpLCBzKSBmb3IgaSBpbiBudW1zIGZvciBzIGluIFtmIGZvciBmIGluIHN0cnMgaWYgIm4iIGluIGZdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbKDEsICdCYW5hbmEnKSwgKDEsICdDb2NvbnV0JyksICgyLCAnQmFuYW5hJyksICgyLCAnQ29jb251dCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ0JhbmFuYScpLCAoMywgJ0NvY29udXQnKSwgKDQsICdCYW5hbmEnKSwgKDQsICdDb2NvbnV0JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnQmFuYW5hJyksICg1LCAnQ29jb251dCcpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKGxhbWJkYSBhOlthKippIGZvciBpIGluIHJhbmdlKGErMSldKShqKSBmb3IgaiBpbiByYW5nZSg1KV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgW1sxXSwgWzEsIDFdLCBbMSwgMiwgNF0sIFsxLCAzLCA5LCAyN10sIFsxLCA0LCAxNiwgNjQsIDI1Nl1dKQotCi0gICAgICAgIGRlZiB0ZXN0X2luX2Z1bmMobCk6Ci0gICAgICAgICAgICByZXR1cm4gW05vbmUgPCB4IDwgMyBmb3IgeCBpbiBsIGlmIHggPiAyXQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9pbl9mdW5jKG51bXMpLCBbRmFsc2UsIEZhbHNlLCBGYWxzZV0pCi0KLSAgICAgICAgZGVmIHRlc3RfbmVzdGVkX2Zyb250KCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtbeSBmb3IgeSBpbiBbeCwgeCArIDFdXSBmb3IgeCBpbiBbMSwzLDVdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1sxLCAyXSwgWzMsIDRdLCBbNSwgNl1dKQotCi0gICAgICAgIHRlc3RfbmVzdGVkX2Zyb250KCkKLQotICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgIltpLCBzIGZvciBpIGluIG51bXMgZm9yIHMgaW4gc3Ryc10iKQotICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgIlt4IGlmIHldIikKLQotICAgICAgICBzdXBwbGllcnMgPSBbCi0gICAgICAgICAgKDEsICJCb2VpbmciKSwKLSAgICAgICAgICAoMiwgIkZvcmQiKSwKLSAgICAgICAgICAoMywgIk1hY2RvbmFsZHMiKQotICAgICAgICBdCi0KLSAgICAgICAgcGFydHMgPSBbCi0gICAgICAgICAgKDEwLCAiQWlybGluZXIiKSwKLSAgICAgICAgICAoMjAsICJFbmdpbmUiKSwKLSAgICAgICAgICAoMzAsICJDaGVlc2VidXJnZXIiKQotICAgICAgICBdCi0KLSAgICAgICAgc3VwcGFydCA9IFsKLSAgICAgICAgICAoMSwgMTApLCAoMSwgMjApLCAoMiwgMjApLCAoMywgMzApCi0gICAgICAgIF0KLQotICAgICAgICB4ID0gWwotICAgICAgICAgIChzbmFtZSwgcG5hbWUpCi0gICAgICAgICAgICBmb3IgKHNubywgc25hbWUpIGluIHN1cHBsaWVycwotICAgICAgICAgICAgICBmb3IgKHBubywgcG5hbWUpIGluIHBhcnRzCi0gICAgICAgICAgICAgICAgZm9yIChzcF9zbm8sIHNwX3BubykgaW4gc3VwcGFydAotICAgICAgICAgICAgICAgICAgaWYgc25vID09IHNwX3NubyBhbmQgcG5vID09IHNwX3BubwotICAgICAgICBdCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBbKCdCb2VpbmcnLCAnQWlybGluZXInKSwgKCdCb2VpbmcnLCAnRW5naW5lJyksICgnRm9yZCcsICdFbmdpbmUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdNYWNkb25hbGRzJywgJ0NoZWVzZWJ1cmdlcicpXSkKLQotICAgIGRlZiB0ZXN0R2VuZXhwcyhzZWxmKToKLSAgICAgICAgIyBnZW5lcmF0b3IgZXhwcmVzc2lvbiB0ZXN0cwotICAgICAgICBnID0gKFt4IGZvciB4IGluIHJhbmdlKDEwKV0gZm9yIHggaW4gcmFuZ2UoMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZy5uZXh0KCksIFt4IGZvciB4IGluIHJhbmdlKDEwKV0pCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGcubmV4dCgpCi0gICAgICAgICAgICBzZWxmLmZhaWwoJ3Nob3VsZCBwcm9kdWNlIFN0b3BJdGVyYXRpb24gZXhjZXB0aW9uJykKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgYSA9IDEKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZyA9IChhIGZvciBkIGluIGEpCi0gICAgICAgICAgICBnLm5leHQoKQotICAgICAgICAgICAgc2VsZi5mYWlsKCdzaG91bGQgcHJvZHVjZSBUeXBlRXJyb3InKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCgoeCwgeSkgZm9yIHggaW4gJ2FiY2QnIGZvciB5IGluICdhYmNkJyksIFsoeCwgeSkgZm9yIHggaW4gJ2FiY2QnIGZvciB5IGluICdhYmNkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCgoeCwgeSkgZm9yIHggaW4gJ2FiJyBmb3IgeSBpbiAneHknKSwgWyh4LCB5KSBmb3IgeCBpbiAnYWInIGZvciB5IGluICd4eSddKQotCi0gICAgICAgIGEgPSBbeCBmb3IgeCBpbiByYW5nZSgxMCldCi0gICAgICAgIGIgPSAoeCBmb3IgeCBpbiAoeSBmb3IgeSBpbiBhKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oYiksIHN1bShbeCBmb3IgeCBpbiByYW5nZSgxMCldKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bSh4KioyIGZvciB4IGluIHJhbmdlKDEwKSksIHN1bShbeCoqMiBmb3IgeCBpbiByYW5nZSgxMCldKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oeCp4IGZvciB4IGluIHJhbmdlKDEwKSBpZiB4JTIpLCBzdW0oW3gqeCBmb3IgeCBpbiByYW5nZSgxMCkgaWYgeCUyXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHggZm9yIHggaW4gKHkgZm9yIHkgaW4gcmFuZ2UoMTApKSksIHN1bShbeCBmb3IgeCBpbiByYW5nZSgxMCldKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oeCBmb3IgeCBpbiAoeSBmb3IgeSBpbiAoeiBmb3IgeiBpbiByYW5nZSgxMCkpKSksIHN1bShbeCBmb3IgeCBpbiByYW5nZSgxMCldKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oeCBmb3IgeCBpbiBbeSBmb3IgeSBpbiAoeiBmb3IgeiBpbiByYW5nZSgxMCkpXSksIHN1bShbeCBmb3IgeCBpbiByYW5nZSgxMCldKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oeCBmb3IgeCBpbiAoeSBmb3IgeSBpbiAoeiBmb3IgeiBpbiByYW5nZSgxMCkgaWYgVHJ1ZSkpIGlmIFRydWUpLCBzdW0oW3ggZm9yIHggaW4gcmFuZ2UoMTApXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHggZm9yIHggaW4gKHkgZm9yIHkgaW4gKHogZm9yIHogaW4gcmFuZ2UoMTApIGlmIFRydWUpIGlmIEZhbHNlKSBpZiBUcnVlKSwgMCkKLSAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJmb28oeCBmb3IgeCBpbiByYW5nZSgxMCksIDEwMCkiKQotICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImZvbygxMDAsIHggZm9yIHggaW4gcmFuZ2UoMTApKSIpCi0KLSAgICBkZWYgdGVzdENvbXByZWhlbnNpb25TcGVjaWFscyhzZWxmKToKLSAgICAgICAgIyB0ZXN0IGZvciBvdXRtb3N0IGl0ZXJhYmxlIHByZWNvbXB1dGF0aW9uCi0gICAgICAgIHggPSAxMDsgZyA9IChpIGZvciBpIGluIHJhbmdlKHgpKTsgeCA9IDUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGlzdChnKSksIDEwKQotCi0gICAgICAgICMgVGhpcyBzaG91bGQgaG9sZCwgc2luY2Ugd2UncmUgb25seSBwcmVjb21wdXRpbmcgb3V0bW9zdCBpdGVyYWJsZS4KLSAgICAgICAgeCA9IDEwOyB0ID0gRmFsc2U7IGcgPSAoKGksaikgZm9yIGkgaW4gcmFuZ2UoeCkgaWYgdCBmb3IgaiBpbiByYW5nZSh4KSkKLSAgICAgICAgeCA9IDU7IHQgPSBUcnVlOwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoaSxqKSBmb3IgaSBpbiByYW5nZSgxMCkgZm9yIGogaW4gcmFuZ2UoNSldLCBsaXN0KGcpKQotCi0gICAgICAgICMgR3JhbW1hciBhbGxvd3MgbXVsdGlwbGUgYWRqYWNlbnQgJ2lmJ3MgaW4gbGlzdGNvbXBzIGFuZCBnZW5leHBzLAotICAgICAgICAjIGV2ZW4gdGhvdWdoIGl0J3Mgc2lsbHkuIE1ha2Ugc3VyZSBpdCB3b3JrcyAoaWZlbHNlIGJyb2tlIHRoaXMuKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsgeCBmb3IgeCBpbiByYW5nZSgxMCkgaWYgeCAlIDIgaWYgeCAlIDMgXSwgWzEsIDUsIDddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCBmb3IgeCBpbiByYW5nZSgxMCkgaWYgeCAlIDIgaWYgeCAlIDMpLCBbMSwgNSwgN10pCi0KLSAgICAgICAgIyB2ZXJpZnkgdW5wYWNraW5nIHNpbmdsZSBlbGVtZW50IHR1cGxlcyBpbiBsaXN0Y29tcC9nZW5leHAuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3ggZm9yIHgsIGluIFsoNCwpLCAoNSwpLCAoNiwpXV0sIFs0LCA1LCA2XSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHggZm9yIHgsIGluIFsoNywpLCAoOCwpLCAoOSwpXSksIFs3LCA4LCA5XSkKLQotICAgIGRlZiB0ZXN0X3dpdGhfc3RhdGVtZW50KHNlbGYpOgotICAgICAgICBjbGFzcyBtYW5hZ2VyKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAoMSwgMikKLSAgICAgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHdpdGggbWFuYWdlcigpOgotICAgICAgICAgICAgcGFzcwotICAgICAgICB3aXRoIG1hbmFnZXIoKSBhcyB4OgotICAgICAgICAgICAgcGFzcwotICAgICAgICB3aXRoIG1hbmFnZXIoKSBhcyAoeCwgeSk6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHdpdGggbWFuYWdlcigpLCBtYW5hZ2VyKCk6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHdpdGggbWFuYWdlcigpIGFzIHgsIG1hbmFnZXIoKSBhcyB5OgotICAgICAgICAgICAgcGFzcwotICAgICAgICB3aXRoIG1hbmFnZXIoKSBhcyB4LCBtYW5hZ2VyKCk6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICBkZWYgdGVzdElmRWxzZUV4cHIoc2VsZik6Ci0gICAgICAgICMgVGVzdCBpZmVsc2UgZXhwcmVzc2lvbnMgaW4gdmFyaW91cyBjYXNlcwotICAgICAgICBkZWYgX2NoZWNrZXZhbChtc2csIHJldCk6Ci0gICAgICAgICAgICAiaGVscGVyIHRvIGNoZWNrIHRoYXQgZXZhbHVhdGlvbiBvZiBleHByZXNzaW9ucyBpcyBkb25lIGNvcnJlY3RseSIKLSAgICAgICAgICAgIHByaW50IHgKLSAgICAgICAgICAgIHJldHVybiByZXQKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsgeCgpIGZvciB4IGluIGxhbWJkYTogVHJ1ZSwgbGFtYmRhOiBGYWxzZSBpZiB4KCkgXSwgW1RydWVdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsgeCgpIGZvciB4IGluIChsYW1iZGE6IFRydWUsIGxhbWJkYTogRmFsc2UpIGlmIHgoKSBdLCBbVHJ1ZV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyB4KEZhbHNlKSBmb3IgeCBpbiAobGFtYmRhIHg6IEZhbHNlIGlmIHggZWxzZSBUcnVlLCBsYW1iZGEgeDogVHJ1ZSBpZiB4IGVsc2UgRmFsc2UpIGlmIHgoRmFsc2UpIF0sIFtUcnVlXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNSBpZiAxIGVsc2UgX2NoZWNrZXZhbCgiY2hlY2sgMSIsIDApKSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoX2NoZWNrZXZhbCgiY2hlY2sgMiIsIDApIGlmIDAgZWxzZSA1KSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNSBhbmQgNiBpZiAwIGVsc2UgMSksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCg1IGFuZCA2KSBpZiAwIGVsc2UgMSksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDUgYW5kICg2IGlmIDEgZWxzZSAxKSksIDYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAgb3IgX2NoZWNrZXZhbCgiY2hlY2sgMyIsIDIpIGlmIDAgZWxzZSAzKSwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMSBvciBfY2hlY2tldmFsKCJjaGVjayA0IiwgMikgaWYgMSBlbHNlIF9jaGVja2V2YWwoImNoZWNrIDUiLCAzKSksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAgb3IgNSBpZiAxIGVsc2UgX2NoZWNrZXZhbCgiY2hlY2sgNiIsIDMpKSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobm90IDUgaWYgMSBlbHNlIDEpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobm90IDUgaWYgMCBlbHNlIDEpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg2ICsgMSBpZiAxIGVsc2UgMiksIDcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDYgLSAxIGlmIDEgZWxzZSAyKSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNiAqIDIgaWYgMSBlbHNlIDQpLCAxMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNiAvIDIgaWYgMSBlbHNlIDMpLCAzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg2IDwgNCBpZiAwIGVsc2UgMiksIDIpCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChUb2tlblRlc3RzLCBHcmFtbWFyVGVzdHMpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL3B5M190ZXN0X2dyYW1tYXIucHkgYi9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvZGF0YS9weTNfdGVzdF9ncmFtbWFyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGJmN2YyLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL3B5M190ZXN0X2dyYW1tYXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5MjMgKzAsMCBAQAotIyBQeXRob24gdGVzdCBzZXQgLS0gcGFydCAxLCBncmFtbWFyLgotIyBUaGlzIGp1c3QgdGVzdHMgd2hldGhlciB0aGUgcGFyc2VyIGFjY2VwdHMgdGhlbSBhbGwuCi0KLSMgTk9URTogV2hlbiB5b3UgcnVuIHRoaXMgdGVzdCBhcyBhIHNjcmlwdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHlvdQotIyBnZXQgd2FybmluZ3MgYWJvdXQgY2VydGFpbiBoZXgvb2N0IGNvbnN0YW50cy4gIFNpbmNlIHRob3NlIGFyZQotIyBpc3N1ZWQgYnkgdGhlIHBhcnNlciwgeW91IGNhbid0IHN1cHByZXNzIHRoZW0gYnkgYWRkaW5nIGEKLSMgZmlsdGVyd2FybmluZ3MoKSBjYWxsIHRvIHRoaXMgbW9kdWxlLiAgVGhlcmVmb3JlLCB0byBzaHV0IHVwIHRoZQotIyByZWdyZXNzaW9uIHRlc3QsIHRoZSBmaWx0ZXJ3YXJuaW5ncygpIGNhbGwgaGFzIGJlZW4gYWRkZWQgdG8KLSMgcmVncnRlc3QucHkuCi0KLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3N5bnRheF9lcnJvcgotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgc3lzCi0jIHRlc3RpbmcgaW1wb3J0ICoKLWZyb20gc3lzIGltcG9ydCAqCi0KLWNsYXNzIFRva2VuVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RCYWNrc2xhc2goc2VsZik6Ci0gICAgICAgICMgQmFja3NsYXNoIG1lYW5zIGxpbmUgY29udGludWF0aW9uOgotICAgICAgICB4ID0gMSBcCi0gICAgICAgICsgMQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LCAyLCAnYmFja3NsYXNoIGZvciBsaW5lIGNvbnRpbnVhdGlvbicpCi0KLSAgICAgICAgIyBCYWNrc2xhc2ggZG9lcyBub3QgbWVhbnMgY29udGludWF0aW9uIGluIGNvbW1lbnRzIDpcCi0gICAgICAgIHggPSAwCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHgsIDAsICdiYWNrc2xhc2ggZW5kaW5nIGNvbW1lbnQnKQotCi0gICAgZGVmIHRlc3RQbGFpbkludGVnZXJzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh0eXBlKDAwMCksIHR5cGUoMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDB4ZmYsIDI1NSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMG8zNzcsIDI1NSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMjE0NzQ4MzY0NywgMG8xNzc3Nzc3Nzc3NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMGIxMDAxLCA5KQotICAgICAgICAjICIweCIgaXMgbm90IGEgdmFsaWQgbGl0ZXJhbAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgIjB4IikKLSAgICAgICAgZnJvbSBzeXMgaW1wb3J0IG1heHNpemUKLSAgICAgICAgaWYgbWF4c2l6ZSA9PSAyMTQ3NDgzNjQ3OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoLTIxNDc0ODM2NDctMSwgLTBvMjAwMDAwMDAwMDApCi0gICAgICAgICAgICAjIFhYWCAtMjE0NzQ4MzY0OAotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDBvMzc3Nzc3Nzc3NzcgPiAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDB4ZmZmZmZmZmYgPiAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSA+IDApCi0gICAgICAgICAgICBmb3IgcyBpbiAoJzIxNDc0ODM2NDgnLCAnMG80MDAwMDAwMDAwMCcsICcweDEwMDAwMDAwMCcsCi0gICAgICAgICAgICAgICAgICAgICAgJzBiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHggPSBldmFsKHMpCi0gICAgICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiT3ZlcmZsb3dFcnJvciBvbiBodWdlIGludGVnZXIgbGl0ZXJhbCAlciIgJSBzKQotICAgICAgICBlbGlmIG1heHNpemUgPT0gOTIyMzM3MjAzNjg1NDc3NTgwNzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKC05MjIzMzcyMDM2ODU0Nzc1ODA3LTEsIC0wbzEwMDAwMDAwMDAwMDAwMDAwMDAwMDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydF8oMG8xNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3ID4gMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0XygweGZmZmZmZmZmZmZmZmZmZmYgPiAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRfKDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgPiAwKQotICAgICAgICAgICAgZm9yIHMgaW4gJzkyMjMzNzIwMzY4NTQ3NzU4MDgnLCAnMG8yMDAwMDAwMDAwMDAwMDAwMDAwMDAwJywgXAotICAgICAgICAgICAgICAgICAgICAgJzB4MTAwMDAwMDAwMDAwMDAwMDAnLCBcCi0gICAgICAgICAgICAgICAgICAgICAnMGIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgeCA9IGV2YWwocykKLSAgICAgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJPdmVyZmxvd0Vycm9yIG9uIGh1Z2UgaW50ZWdlciBsaXRlcmFsICVyIiAlIHMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ1dlaXJkIG1heHNpemUgdmFsdWUgJXInICUgbWF4c2l6ZSkKLQotICAgIGRlZiB0ZXN0TG9uZ0ludGVnZXJzKHNlbGYpOgotICAgICAgICB4ID0gMAotICAgICAgICB4ID0gMHhmZmZmZmZmZmZmZmZmZmZmCi0gICAgICAgIHggPSAwWGZmZmZmZmZmZmZmZmZmZmYKLSAgICAgICAgeCA9IDBvNzc3Nzc3Nzc3Nzc3Nzc3NzcKLSAgICAgICAgeCA9IDBPNzc3Nzc3Nzc3Nzc3Nzc3NzcKLSAgICAgICAgeCA9IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MAotICAgICAgICB4ID0gMGIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgICAgeCA9IDBCMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi0KLSAgICBkZWYgdGVzdEZsb2F0cyhzZWxmKToKLSAgICAgICAgeCA9IDMuMTQKLSAgICAgICAgeCA9IDMxNC4KLSAgICAgICAgeCA9IDAuMzE0Ci0gICAgICAgICMgWFhYIHggPSAwMDAuMzE0Ci0gICAgICAgIHggPSAuMzE0Ci0gICAgICAgIHggPSAzZTE0Ci0gICAgICAgIHggPSAzRTE0Ci0gICAgICAgIHggPSAzZS0xNAotICAgICAgICB4ID0gM2UrMTQKLSAgICAgICAgeCA9IDMuZTE0Ci0gICAgICAgIHggPSAuM2UxNAotICAgICAgICB4ID0gMy4xZTQKLQotICAgIGRlZiB0ZXN0U3RyaW5nTGl0ZXJhbHMoc2VsZik6Ci0gICAgICAgIHggPSAnJzsgeSA9ICIiOyBzZWxmLmFzc2VydF8obGVuKHgpID09IDAgYW5kIHggPT0geSkKLSAgICAgICAgeCA9ICdcJyc7IHkgPSAiJyI7IHNlbGYuYXNzZXJ0XyhsZW4oeCkgPT0gMSBhbmQgeCA9PSB5IGFuZCBvcmQoeCkgPT0gMzkpCi0gICAgICAgIHggPSAnIic7IHkgPSAiXCIiOyBzZWxmLmFzc2VydF8obGVuKHgpID09IDEgYW5kIHggPT0geSBhbmQgb3JkKHgpID09IDM0KQotICAgICAgICB4ID0gImRvZXNuJ3QgXCJzaHJpbmtcIiBkb2VzIGl0IgotICAgICAgICB5ID0gJ2RvZXNuXCd0ICJzaHJpbmsiIGRvZXMgaXQnCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4oeCkgPT0gMjQgYW5kIHggPT0geSkKLSAgICAgICAgeCA9ICJkb2VzIFwic2hyaW5rXCIgZG9lc24ndCBpdCIKLSAgICAgICAgeSA9ICdkb2VzICJzaHJpbmsiIGRvZXNuXCd0IGl0JwotICAgICAgICBzZWxmLmFzc2VydF8obGVuKHgpID09IDI0IGFuZCB4ID09IHkpCi0gICAgICAgIHggPSAiIiIKLVRoZSAicXVpY2siCi1icm93biBmb3gKLWp1bXBzIG92ZXIKLXRoZSAnbGF6eScgZG9nLgotIiIiCi0gICAgICAgIHkgPSAnXG5UaGUgInF1aWNrIlxuYnJvd24gZm94XG5qdW1wcyBvdmVyXG50aGUgXCdsYXp5XCcgZG9nLlxuJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LCB5KQotICAgICAgICB5ID0gJycnCi1UaGUgInF1aWNrIgotYnJvd24gZm94Ci1qdW1wcyBvdmVyCi10aGUgJ2xhenknIGRvZy4KLScnJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh4LCB5KQotICAgICAgICB5ID0gIlxuXAotVGhlIFwicXVpY2tcIlxuXAotYnJvd24gZm94XG5cCi1qdW1wcyBvdmVyXG5cCi10aGUgJ2xhenknIGRvZy5cblwKLSIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgeSkKLSAgICAgICAgeSA9ICdcblwKLVRoZSBcInF1aWNrXCJcblwKLWJyb3duIGZveFxuXAotanVtcHMgb3ZlclxuXAotdGhlIFwnbGF6eVwnIGRvZy5cblwKLScKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgeSkKLQotICAgIGRlZiB0ZXN0RWxsaXBzaXMoc2VsZik6Ci0gICAgICAgIHggPSAuLi4KLSAgICAgICAgc2VsZi5hc3NlcnRfKHggaXMgRWxsaXBzaXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAiLi4gLiIpCi0KLWNsYXNzIEdyYW1tYXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAjIHNpbmdsZV9pbnB1dDogTkVXTElORSB8IHNpbXBsZV9zdG10IHwgY29tcG91bmRfc3RtdCBORVdMSU5FCi0gICAgIyBYWFggY2FuJ3QgdGVzdCBpbiBhIHNjcmlwdCAtLSB0aGlzIHJ1bGUgaXMgb25seSB1c2VkIHdoZW4gaW50ZXJhY3RpdmUKLQotICAgICMgZmlsZV9pbnB1dDogKE5FV0xJTkUgfCBzdG10KSogRU5ETUFSS0VSCi0gICAgIyBCZWluZyB0ZXN0ZWQgYXMgdGhpcyB2ZXJ5IG1vbWVudCB0aGlzIHZlcnkgbW9kdWxlCi0KLSAgICAjIGV4cHJfaW5wdXQ6IHRlc3RsaXN0IE5FV0xJTkUKLSAgICAjIFhYWCBIYXJkIHRvIHRlc3QgLS0gdXNlZCBvbmx5IGluIGNhbGxzIHRvIGlucHV0KCkKLQotICAgIGRlZiB0ZXN0RXZhbElucHV0KHNlbGYpOgotICAgICAgICAjIHRlc3RsaXN0IEVORE1BUktFUgotICAgICAgICB4ID0gZXZhbCgnMSwgMCBvciAxJykKLQotICAgIGRlZiB0ZXN0RnVuY2RlZihzZWxmKToKLSAgICAgICAgIyMjIFtkZWNvcmF0b3JzXSAnZGVmJyBOQU1FIHBhcmFtZXRlcnMgWyctPicgdGVzdF0gJzonIHN1aXRlCi0gICAgICAgICMjIyBkZWNvcmF0b3I6ICdAJyBkb3R0ZWRfbmFtZSBbICcoJyBbYXJnbGlzdF0gJyknIF0gTkVXTElORQotICAgICAgICAjIyMgZGVjb3JhdG9yczogZGVjb3JhdG9yKwotICAgICAgICAjIyMgcGFyYW1ldGVyczogJygnIFt0eXBlZGFyZ3NsaXN0XSAnKScKLSAgICAgICAgIyMjIHR5cGVkYXJnc2xpc3Q6ICgodGZwZGVmIFsnPScgdGVzdF0gJywnKSoKLSAgICAgICAgIyMjICAgICAgICAgICAgICAgICgnKicgW3RmcGRlZl0gKCcsJyB0ZnBkZWYgWyc9JyB0ZXN0XSkqIFsnLCcgJyoqJyB0ZnBkZWZdIHwgJyoqJyB0ZnBkZWYpCi0gICAgICAgICMjIyAgICAgICAgICAgICAgICB8IHRmcGRlZiBbJz0nIHRlc3RdICgnLCcgdGZwZGVmIFsnPScgdGVzdF0pKiBbJywnXSkKLSAgICAgICAgIyMjIHRmcGRlZjogTkFNRSBbJzonIHRlc3RdCi0gICAgICAgICMjIyB2YXJhcmdzbGlzdDogKCh2ZnBkZWYgWyc9JyB0ZXN0XSAnLCcpKgotICAgICAgICAjIyMgICAgICAgICAgICAgICgnKicgW3ZmcGRlZl0gKCcsJyB2ZnBkZWYgWyc9JyB0ZXN0XSkqICBbJywnICcqKicgdmZwZGVmXSB8ICcqKicgdmZwZGVmKQotICAgICAgICAjIyMgICAgICAgICAgICAgIHwgdmZwZGVmIFsnPScgdGVzdF0gKCcsJyB2ZnBkZWYgWyc9JyB0ZXN0XSkqIFsnLCddKQotICAgICAgICAjIyMgdmZwZGVmOiBOQU1FCi0gICAgICAgIGRlZiBmMSgpOiBwYXNzCi0gICAgICAgIGYxKCkKLSAgICAgICAgZjEoKigpKQotICAgICAgICBmMSgqKCksICoqe30pCi0gICAgICAgIGRlZiBmMihvbmVfYXJndW1lbnQpOiBwYXNzCi0gICAgICAgIGRlZiBmMyh0d28sIGFyZ3VtZW50cyk6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZjIuX19jb2RlX18uY29fdmFybmFtZXMsICgnb25lX2FyZ3VtZW50JywpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmMy5fX2NvZGVfXy5jb192YXJuYW1lcywgKCd0d28nLCAnYXJndW1lbnRzJykpCi0gICAgICAgIGRlZiBhMShvbmVfYXJnLCk6IHBhc3MKLSAgICAgICAgZGVmIGEyKHR3bywgYXJncywpOiBwYXNzCi0gICAgICAgIGRlZiB2MCgqcmVzdCk6IHBhc3MKLSAgICAgICAgZGVmIHYxKGEsICpyZXN0KTogcGFzcwotICAgICAgICBkZWYgdjIoYSwgYiwgKnJlc3QpOiBwYXNzCi0KLSAgICAgICAgZjEoKQotICAgICAgICBmMigxKQotICAgICAgICBmMigxLCkKLSAgICAgICAgZjMoMSwgMikKLSAgICAgICAgZjMoMSwgMiwpCi0gICAgICAgIHYwKCkKLSAgICAgICAgdjAoMSkKLSAgICAgICAgdjAoMSwpCi0gICAgICAgIHYwKDEsMikKLSAgICAgICAgdjAoMSwyLDMsNCw1LDYsNyw4LDksMCkKLSAgICAgICAgdjEoMSkKLSAgICAgICAgdjEoMSwpCi0gICAgICAgIHYxKDEsMikKLSAgICAgICAgdjEoMSwyLDMpCi0gICAgICAgIHYxKDEsMiwzLDQsNSw2LDcsOCw5LDApCi0gICAgICAgIHYyKDEsMikKLSAgICAgICAgdjIoMSwyLDMpCi0gICAgICAgIHYyKDEsMiwzLDQpCi0gICAgICAgIHYyKDEsMiwzLDQsNSw2LDcsOCw5LDApCi0KLSAgICAgICAgZGVmIGQwMShhPTEpOiBwYXNzCi0gICAgICAgIGQwMSgpCi0gICAgICAgIGQwMSgxKQotICAgICAgICBkMDEoKigxLCkpCi0gICAgICAgIGQwMSgqKnsnYSc6Mn0pCi0gICAgICAgIGRlZiBkMTEoYSwgYj0xKTogcGFzcwotICAgICAgICBkMTEoMSkKLSAgICAgICAgZDExKDEsIDIpCi0gICAgICAgIGQxMSgxLCAqKnsnYic6Mn0pCi0gICAgICAgIGRlZiBkMjEoYSwgYiwgYz0xKTogcGFzcwotICAgICAgICBkMjEoMSwgMikKLSAgICAgICAgZDIxKDEsIDIsIDMpCi0gICAgICAgIGQyMSgqKDEsIDIsIDMpKQotICAgICAgICBkMjEoMSwgKigyLCAzKSkKLSAgICAgICAgZDIxKDEsIDIsICooMywpKQotICAgICAgICBkMjEoMSwgMiwgKip7J2MnOjN9KQotICAgICAgICBkZWYgZDAyKGE9MSwgYj0yKTogcGFzcwotICAgICAgICBkMDIoKQotICAgICAgICBkMDIoMSkKLSAgICAgICAgZDAyKDEsIDIpCi0gICAgICAgIGQwMigqKDEsIDIpKQotICAgICAgICBkMDIoMSwgKigyLCkpCi0gICAgICAgIGQwMigxLCAqKnsnYic6Mn0pCi0gICAgICAgIGQwMigqKnsnYSc6IDEsICdiJzogMn0pCi0gICAgICAgIGRlZiBkMTIoYSwgYj0xLCBjPTIpOiBwYXNzCi0gICAgICAgIGQxMigxKQotICAgICAgICBkMTIoMSwgMikKLSAgICAgICAgZDEyKDEsIDIsIDMpCi0gICAgICAgIGRlZiBkMjIoYSwgYiwgYz0xLCBkPTIpOiBwYXNzCi0gICAgICAgIGQyMigxLCAyKQotICAgICAgICBkMjIoMSwgMiwgMykKLSAgICAgICAgZDIyKDEsIDIsIDMsIDQpCi0gICAgICAgIGRlZiBkMDF2KGE9MSwgKnJlc3QpOiBwYXNzCi0gICAgICAgIGQwMXYoKQotICAgICAgICBkMDF2KDEpCi0gICAgICAgIGQwMXYoMSwgMikKLSAgICAgICAgZDAxdigqKDEsIDIsIDMsIDQpKQotICAgICAgICBkMDF2KCooMSwpKQotICAgICAgICBkMDF2KCoqeydhJzoyfSkKLSAgICAgICAgZGVmIGQxMXYoYSwgYj0xLCAqcmVzdCk6IHBhc3MKLSAgICAgICAgZDExdigxKQotICAgICAgICBkMTF2KDEsIDIpCi0gICAgICAgIGQxMXYoMSwgMiwgMykKLSAgICAgICAgZGVmIGQyMXYoYSwgYiwgYz0xLCAqcmVzdCk6IHBhc3MKLSAgICAgICAgZDIxdigxLCAyKQotICAgICAgICBkMjF2KDEsIDIsIDMpCi0gICAgICAgIGQyMXYoMSwgMiwgMywgNCkKLSAgICAgICAgZDIxdigqKDEsIDIsIDMsIDQpKQotICAgICAgICBkMjF2KDEsIDIsICoqeydjJzogM30pCi0gICAgICAgIGRlZiBkMDJ2KGE9MSwgYj0yLCAqcmVzdCk6IHBhc3MKLSAgICAgICAgZDAydigpCi0gICAgICAgIGQwMnYoMSkKLSAgICAgICAgZDAydigxLCAyKQotICAgICAgICBkMDJ2KDEsIDIsIDMpCi0gICAgICAgIGQwMnYoMSwgKigyLCAzLCA0KSkKLSAgICAgICAgZDAydigqKnsnYSc6IDEsICdiJzogMn0pCi0gICAgICAgIGRlZiBkMTJ2KGEsIGI9MSwgYz0yLCAqcmVzdCk6IHBhc3MKLSAgICAgICAgZDEydigxKQotICAgICAgICBkMTJ2KDEsIDIpCi0gICAgICAgIGQxMnYoMSwgMiwgMykKLSAgICAgICAgZDEydigxLCAyLCAzLCA0KQotICAgICAgICBkMTJ2KCooMSwgMiwgMywgNCkpCi0gICAgICAgIGQxMnYoMSwgMiwgKigzLCA0LCA1KSkKLSAgICAgICAgZDEydigxLCAqKDIsKSwgKip7J2MnOiAzfSkKLSAgICAgICAgZGVmIGQyMnYoYSwgYiwgYz0xLCBkPTIsICpyZXN0KTogcGFzcwotICAgICAgICBkMjJ2KDEsIDIpCi0gICAgICAgIGQyMnYoMSwgMiwgMykKLSAgICAgICAgZDIydigxLCAyLCAzLCA0KQotICAgICAgICBkMjJ2KDEsIDIsIDMsIDQsIDUpCi0gICAgICAgIGQyMnYoKigxLCAyLCAzLCA0KSkKLSAgICAgICAgZDIydigxLCAyLCAqKDMsIDQsIDUpKQotICAgICAgICBkMjJ2KDEsICooMiwgMyksICoqeydkJzogNH0pCi0KLSAgICAgICAgIyBrZXl3b3JkIGFyZ3VtZW50IHR5cGUgdGVzdHMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3RyKCd4JywgKip7Yidmb28nOjEgfSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnQnl0ZXMgc2hvdWxkIG5vdCB3b3JrIGFzIGtleXdvcmQgYXJndW1lbnQgbmFtZXMnKQotICAgICAgICAjIGtleXdvcmQgb25seSBhcmd1bWVudCB0ZXN0cwotICAgICAgICBkZWYgcG9zMGtleTEoKiwga2V5KTogcmV0dXJuIGtleQotICAgICAgICBwb3Mwa2V5MShrZXk9MTAwKQotICAgICAgICBkZWYgcG9zMmtleTIocDEsIHAyLCAqLCBrMSwgazI9MTAwKTogcmV0dXJuIHAxLHAyLGsxLGsyCi0gICAgICAgIHBvczJrZXkyKDEsIDIsIGsxPTEwMCkKLSAgICAgICAgcG9zMmtleTIoMSwgMiwgazE9MTAwLCBrMj0yMDApCi0gICAgICAgIHBvczJrZXkyKDEsIDIsIGsyPTEwMCwgazE9MjAwKQotICAgICAgICBkZWYgcG9zMmtleTJkaWN0KHAxLCBwMiwgKiwgazE9MTAwLCBrMiwgKiprd2FyZyk6IHJldHVybiBwMSxwMixrMSxrMixrd2FyZwotICAgICAgICBwb3Mya2V5MmRpY3QoMSwyLGsyPTEwMCx0b2t3YXJnMT0xMDAsdG9rd2FyZzI9MjAwKQotICAgICAgICBwb3Mya2V5MmRpY3QoMSwyLHRva3dhcmcxPTEwMCx0b2t3YXJnMj0yMDAsIGsyPTEwMCkKLQotICAgICAgICAjIGtleXdvcmQgYXJndW1lbnRzIGFmdGVyICphcmdsaXN0Ci0gICAgICAgIGRlZiBmKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICAgICByZXR1cm4gYXJncywga3dhcmdzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYoMSwgeD0yLCAqWzMsIDRdLCB5PTUpLCAoKDEsIDMsIDQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsneCc6MiwgJ3knOjV9KSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsICJmKDEsICooMiwzKSwgNCkiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgImYoMSwgeD0yLCAqKDMsNCksIHg9NSkiKQotCi0gICAgICAgICMgYXJndW1lbnQgYW5ub3RhdGlvbiB0ZXN0cwotICAgICAgICBkZWYgZih4KSAtPiBsaXN0OiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYuX19hbm5vdGF0aW9uc19fLCB7J3JldHVybic6IGxpc3R9KQotICAgICAgICBkZWYgZih4OmludCk6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5fX2Fubm90YXRpb25zX18sIHsneCc6IGludH0pCi0gICAgICAgIGRlZiBmKCp4OnN0cik6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5fX2Fubm90YXRpb25zX18sIHsneCc6IHN0cn0pCi0gICAgICAgIGRlZiBmKCoqeDpmbG9hdCk6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5fX2Fubm90YXRpb25zX18sIHsneCc6IGZsb2F0fSkKLSAgICAgICAgZGVmIGYoeCwgeToxKzIpOiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYuX19hbm5vdGF0aW9uc19fLCB7J3knOiAzfSkKLSAgICAgICAgZGVmIGYoYSwgYjoxLCBjOjIsIGQpOiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGYuX19hbm5vdGF0aW9uc19fLCB7J2InOiAxLCAnYyc6IDJ9KQotICAgICAgICBkZWYgZihhLCBiOjEsIGM6MiwgZCwgZTozPTQsIGY9NSwgKmc6Nik6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZi5fX2Fubm90YXRpb25zX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsnYic6IDEsICdjJzogMiwgJ2UnOiAzLCAnZyc6IDZ9KQotICAgICAgICBkZWYgZihhLCBiOjEsIGM6MiwgZCwgZTozPTQsIGY9NSwgKmc6NiwgaDo3LCBpPTgsIGo6OT0xMCwKLSAgICAgICAgICAgICAgKiprOjExKSAtPiAxMjogcGFzcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLl9fYW5ub3RhdGlvbnNfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeydiJzogMSwgJ2MnOiAyLCAnZSc6IDMsICdnJzogNiwgJ2gnOiA3LCAnaic6IDksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnayc6IDExLCAncmV0dXJuJzogMTJ9KQotICAgICAgICAjIENoZWNrIGZvciBTRiBCdWcgIzE2OTcyNDggLSBtaXhpbmcgZGVjb3JhdG9ycyBhbmQgYSByZXR1cm4gYW5ub3RhdGlvbgotICAgICAgICBkZWYgbnVsbCh4KTogcmV0dXJuIHgKLSAgICAgICAgQG51bGwKLSAgICAgICAgZGVmIGYoeCkgLT4gbGlzdDogcGFzcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmLl9fYW5ub3RhdGlvbnNfXywgeydyZXR1cm4nOiBsaXN0fSkKLQotICAgICAgICAjIHRlc3QgTUFLRV9DTE9TVVJFIHdpdGggYSB2YXJpZXR5IG9mIG9wYXJnJ3MKLSAgICAgICAgY2xvc3VyZSA9IDEKLSAgICAgICAgZGVmIGYoKTogcmV0dXJuIGNsb3N1cmUKLSAgICAgICAgZGVmIGYoeD0xKTogcmV0dXJuIGNsb3N1cmUKLSAgICAgICAgZGVmIGYoKiwgaz0xKTogcmV0dXJuIGNsb3N1cmUKLSAgICAgICAgZGVmIGYoKSAtPiBpbnQ6IHJldHVybiBjbG9zdXJlCi0KLSAgICAgICAgIyBDaGVjayBhc3QgZXJyb3JzIGluICphcmdzIGFuZCAqa3dhcmdzCi0gICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiZigqZygxPTIpKSIpCi0gICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiZigqKmcoMT0yKSkiKQotCi0gICAgZGVmIHRlc3RMYW1iZGVmKHNlbGYpOgotICAgICAgICAjIyMgbGFtYmRlZjogJ2xhbWJkYScgW3ZhcmFyZ3NsaXN0XSAnOicgdGVzdAotICAgICAgICBsMSA9IGxhbWJkYSA6IDAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobDEoKSwgMCkKLSAgICAgICAgbDIgPSBsYW1iZGEgOiBhW2RdICMgWFhYIGp1c3QgdGVzdGluZyB0aGUgZXhwcmVzc2lvbgotICAgICAgICBsMyA9IGxhbWJkYSA6IFsyIDwgeCBmb3IgeCBpbiBbLTEsIDMsIDBdXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsMygpLCBbMCwgMSwgMF0pCi0gICAgICAgIGw0ID0gbGFtYmRhIHggPSBsYW1iZGEgeSA9IGxhbWJkYSB6PTEgOiB6IDogeSgpIDogeCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGw0KCksIDEpCi0gICAgICAgIGw1ID0gbGFtYmRhIHgsIHksIHo9MjogeCArIHkgKyB6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGw1KDEsIDIpLCA1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsNSgxLCAyLCAzKSwgNikKLSAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJsYW1iZGEgeDogeCA9IDIiKQotICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImxhbWJkYSAoTm9uZSwpOiBOb25lIikKLSAgICAgICAgbDYgPSBsYW1iZGEgeCwgeSwgKiwgaz0yMDogeCt5K2sKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobDYoMSwyKSwgMSsyKzIwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsNigxLDIsaz0xMCksIDErMisxMCkKLQotCi0gICAgIyMjIHN0bXQ6IHNpbXBsZV9zdG10IHwgY29tcG91bmRfc3RtdAotICAgICMgVGVzdGVkIGJlbG93Ci0KLSAgICBkZWYgdGVzdFNpbXBsZVN0bXQoc2VsZik6Ci0gICAgICAgICMjIyBzaW1wbGVfc3RtdDogc21hbGxfc3RtdCAoJzsnIHNtYWxsX3N0bXQpKiBbJzsnXQotICAgICAgICB4ID0gMTsgcGFzczsgZGVsIHgKLSAgICAgICAgZGVmIGZvbygpOgotICAgICAgICAgICAgIyB2ZXJpZnkgc3RhdGVtZW50cyB0aGF0IGVuZCB3aXRoIHNlbWktY29sb25zCi0gICAgICAgICAgICB4ID0gMTsgcGFzczsgZGVsIHg7Ci0gICAgICAgIGZvbygpCi0KLSAgICAjIyMgc21hbGxfc3RtdDogZXhwcl9zdG10IHwgcGFzc19zdG10IHwgZGVsX3N0bXQgfCBmbG93X3N0bXQgfCBpbXBvcnRfc3RtdCB8IGdsb2JhbF9zdG10IHwgYWNjZXNzX3N0bXQKLSAgICAjIFRlc3RlZCBiZWxvdwotCi0gICAgZGVmIHRlc3RFeHByU3RtdChzZWxmKToKLSAgICAgICAgIyAoZXhwcmxpc3QgJz0nKSogZXhwcmxpc3QKLSAgICAgICAgMQotICAgICAgICAxLCAyLCAzCi0gICAgICAgIHggPSAxCi0gICAgICAgIHggPSAxLCAyLCAzCi0gICAgICAgIHggPSB5ID0geiA9IDEsIDIsIDMKLSAgICAgICAgeCwgeSwgeiA9IDEsIDIsIDMKLSAgICAgICAgYWJjID0gYSwgYiwgYyA9IHgsIHksIHogPSB4eXogPSAxLCAyLCAoMywgNCkKLQotICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgInggKyAxID0gMSIpCi0gICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiYSArIDEgPSBiICsgMiIpCi0KLSAgICBkZWYgdGVzdERlbFN0bXQoc2VsZik6Ci0gICAgICAgICMgJ2RlbCcgZXhwcmxpc3QKLSAgICAgICAgYWJjID0gWzEsMiwzXQotICAgICAgICB4LCB5LCB6ID0gYWJjCi0gICAgICAgIHh5eiA9IHgsIHksIHoKLQotICAgICAgICBkZWwgYWJjCi0gICAgICAgIGRlbCB4LCB5LCAoeiwgeHl6KQotCi0gICAgZGVmIHRlc3RQYXNzU3RtdChzZWxmKToKLSAgICAgICAgIyAncGFzcycKLSAgICAgICAgcGFzcwotCi0gICAgIyBmbG93X3N0bXQ6IGJyZWFrX3N0bXQgfCBjb250aW51ZV9zdG10IHwgcmV0dXJuX3N0bXQgfCByYWlzZV9zdG10Ci0gICAgIyBUZXN0ZWQgYmVsb3cKLQotICAgIGRlZiB0ZXN0QnJlYWtTdG10KHNlbGYpOgotICAgICAgICAjICdicmVhaycKLSAgICAgICAgd2hpbGUgMTogYnJlYWsKLQotICAgIGRlZiB0ZXN0Q29udGludWVTdG10KHNlbGYpOgotICAgICAgICAjICdjb250aW51ZScKLSAgICAgICAgaSA9IDEKLSAgICAgICAgd2hpbGUgaTogaSA9IDA7IGNvbnRpbnVlCi0KLSAgICAgICAgbXNnID0gIiIKLSAgICAgICAgd2hpbGUgbm90IG1zZzoKLSAgICAgICAgICAgIG1zZyA9ICJvayIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIG1zZyA9ICJjb250aW51ZSBmYWlsZWQgdG8gY29udGludWUgaW5zaWRlIHRyeSIKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBtc2cgPSAiY29udGludWUgaW5zaWRlIHRyeSBjYWxsZWQgZXhjZXB0IGJsb2NrIgotICAgICAgICBpZiBtc2cgIT0gIm9rIjoKLSAgICAgICAgICAgIHNlbGYuZmFpbChtc2cpCi0KLSAgICAgICAgbXNnID0gIiIKLSAgICAgICAgd2hpbGUgbm90IG1zZzoKLSAgICAgICAgICAgIG1zZyA9ICJmaW5hbGx5IGJsb2NrIG5vdCBjYWxsZWQiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgbXNnID0gIm9rIgotICAgICAgICBpZiBtc2cgIT0gIm9rIjoKLSAgICAgICAgICAgIHNlbGYuZmFpbChtc2cpCi0KLSAgICBkZWYgdGVzdF9icmVha19jb250aW51ZV9sb29wKHNlbGYpOgotICAgICAgICAjIFRoaXMgdGVzdCB3YXJyYW50cyBhbiBleHBsYW5hdGlvbi4gSXQgaXMgYSB0ZXN0IHNwZWNpZmljYWxseSBmb3IgU0YgYnVncwotICAgICAgICAjICM0NjMzNTkgYW5kICM0NjI5MzcuIFRoZSBidWcgaXMgdGhhdCBhICdicmVhaycgc3RhdGVtZW50IGV4ZWN1dGVkIG9yCi0gICAgICAgICMgZXhjZXB0aW9uIHJhaXNlZCBpbnNpZGUgYSB0cnkvZXhjZXB0IGluc2lkZSBhIGxvb3AsICphZnRlciogYSBjb250aW51ZQotICAgICAgICAjIHN0YXRlbWVudCBoYXMgYmVlbiBleGVjdXRlZCBpbiB0aGF0IGxvb3AsIHdpbGwgY2F1c2UgdGhlIHdyb25nIG51bWJlciBvZgotICAgICAgICAjIGFyZ3VtZW50cyB0byBiZSBwb3BwZWQgb2ZmIHRoZSBzdGFjayBhbmQgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIgcmVzZXQgdG8KLSAgICAgICAgIyBhIHZlcnkgc21hbGwgbnVtYmVyICh1c3VhbGx5IDAuKSBCZWNhdXNlIG9mIHRoaXMsIHRoZSBmb2xsb3dpbmcgdGVzdAotICAgICAgICAjICptdXN0KiB3cml0dGVuIGFzIGEgZnVuY3Rpb24sIGFuZCB0aGUgdHJhY2tpbmcgdmFycyAqbXVzdCogYmUgZnVuY3Rpb24KLSAgICAgICAgIyBhcmd1bWVudHMgd2l0aCBkZWZhdWx0IHZhbHVlcy4gT3RoZXJ3aXNlLCB0aGUgdGVzdCB3aWxsIGxvb3AgYW5kIGxvb3AuCi0KLSAgICAgICAgZGVmIHRlc3RfaW5uZXIoZXh0cmFfYnVybmluZ19vaWwgPSAxLCBjb3VudD0wKToKLSAgICAgICAgICAgIGJpZ19oaXBwbyA9IDIKLSAgICAgICAgICAgIHdoaWxlIGJpZ19oaXBwbzoKLSAgICAgICAgICAgICAgICBjb3VudCArPSAxCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBpZiBleHRyYV9idXJuaW5nX29pbCBhbmQgYmlnX2hpcHBvID09IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9idXJuaW5nX29pbCAtPSAxCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBiaWdfaGlwcG8gLT0gMQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGlmIGNvdW50ID4gMiBvciBiaWdfaGlwcG8gIT0gMToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImNvbnRpbnVlIHRoZW4gYnJlYWsgaW4gdHJ5L2V4Y2VwdCBpbiBsb29wIGJyb2tlbiEiKQotICAgICAgICB0ZXN0X2lubmVyKCkKLQotICAgIGRlZiB0ZXN0UmV0dXJuKHNlbGYpOgotICAgICAgICAjICdyZXR1cm4nIFt0ZXN0bGlzdF0KLSAgICAgICAgZGVmIGcxKCk6IHJldHVybgotICAgICAgICBkZWYgZzIoKTogcmV0dXJuIDEKLSAgICAgICAgZzEoKQotICAgICAgICB4ID0gZzIoKQotICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImNsYXNzIGZvbzpyZXR1cm4gMSIpCi0KLSAgICBkZWYgdGVzdFlpZWxkKHNlbGYpOgotICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImNsYXNzIGZvbzp5aWVsZCAxIikKLQotICAgIGRlZiB0ZXN0UmFpc2Uoc2VsZik6Ci0gICAgICAgICMgJ3JhaXNlJyB0ZXN0IFsnLCcgdGVzdF0KLSAgICAgICAgdHJ5OiByYWlzZSBSdW50aW1lRXJyb3IoJ2p1c3QgdGVzdGluZycpCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6IHBhc3MKLSAgICAgICAgdHJ5OiByYWlzZSBLZXlib2FyZEludGVycnVwdAotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6IHBhc3MKLQotICAgIGRlZiB0ZXN0SW1wb3J0KHNlbGYpOgotICAgICAgICAjICdpbXBvcnQnIGRvdHRlZF9hc19uYW1lcwotICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgIGltcG9ydCB0aW1lLCBzeXMKLSAgICAgICAgIyAnZnJvbScgZG90dGVkX25hbWUgJ2ltcG9ydCcgKCcqJyB8ICcoJyBpbXBvcnRfYXNfbmFtZXMgJyknIHwgaW1wb3J0X2FzX25hbWVzKQotICAgICAgICBmcm9tIHRpbWUgaW1wb3J0IHRpbWUKLSAgICAgICAgZnJvbSB0aW1lIGltcG9ydCAodGltZSkKLSAgICAgICAgIyBub3QgdGVzdGFibGUgaW5zaWRlIGEgZnVuY3Rpb24sIGJ1dCBhbHJlYWR5IGRvbmUgYXQgdG9wIG9mIHRoZSBtb2R1bGUKLSAgICAgICAgIyBmcm9tIHN5cyBpbXBvcnQgKgotICAgICAgICBmcm9tIHN5cyBpbXBvcnQgcGF0aCwgYXJndgotICAgICAgICBmcm9tIHN5cyBpbXBvcnQgKHBhdGgsIGFyZ3YpCi0gICAgICAgIGZyb20gc3lzIGltcG9ydCAocGF0aCwgYXJndiwpCi0KLSAgICBkZWYgdGVzdEdsb2JhbChzZWxmKToKLSAgICAgICAgIyAnZ2xvYmFsJyBOQU1FICgnLCcgTkFNRSkqCi0gICAgICAgIGdsb2JhbCBhCi0gICAgICAgIGdsb2JhbCBhLCBiCi0gICAgICAgIGdsb2JhbCBvbmUsIHR3bywgdGhyZWUsIGZvdXIsIGZpdmUsIHNpeCwgc2V2ZW4sIGVpZ2h0LCBuaW5lLCB0ZW4KLQotICAgIGRlZiB0ZXN0Tm9ubG9jYWwoc2VsZik6Ci0gICAgICAgICMgJ25vbmxvY2FsJyBOQU1FICgnLCcgTkFNRSkqCi0gICAgICAgIHggPSAwCi0gICAgICAgIHkgPSAwCi0gICAgICAgIGRlZiBmKCk6Ci0gICAgICAgICAgICBub25sb2NhbCB4Ci0gICAgICAgICAgICBub25sb2NhbCB4LCB5Ci0KLSAgICBkZWYgdGVzdEFzc2VydChzZWxmKToKLSAgICAgICAgIyBhc3NlcnRfc3RtdDogJ2Fzc2VydCcgdGVzdCBbJywnIHRlc3RdCi0gICAgICAgIGFzc2VydCAxCi0gICAgICAgIGFzc2VydCAxLCAxCi0gICAgICAgIGFzc2VydCBsYW1iZGEgeDp4Ci0gICAgICAgIGFzc2VydCAxLCBsYW1iZGEgeDp4KzEKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYXNzZXJ0IDAsICJtc2ciCi0gICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZS5hcmdzWzBdLCAibXNnIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIF9fZGVidWdfXzoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkFzc2VydGlvbkVycm9yIG5vdCByYWlzZWQgYnkgYXNzZXJ0IDAiKQotCi0gICAgIyMjIGNvbXBvdW5kX3N0bXQ6IGlmX3N0bXQgfCB3aGlsZV9zdG10IHwgZm9yX3N0bXQgfCB0cnlfc3RtdCB8IGZ1bmNkZWYgfCBjbGFzc2RlZgotICAgICMgVGVzdGVkIGJlbG93Ci0KLSAgICBkZWYgdGVzdElmKHNlbGYpOgotICAgICAgICAjICdpZicgdGVzdCAnOicgc3VpdGUgKCdlbGlmJyB0ZXN0ICc6JyBzdWl0ZSkqIFsnZWxzZScgJzonIHN1aXRlXQotICAgICAgICBpZiAxOiBwYXNzCi0gICAgICAgIGlmIDE6IHBhc3MKLSAgICAgICAgZWxzZTogcGFzcwotICAgICAgICBpZiAwOiBwYXNzCi0gICAgICAgIGVsaWYgMDogcGFzcwotICAgICAgICBpZiAwOiBwYXNzCi0gICAgICAgIGVsaWYgMDogcGFzcwotICAgICAgICBlbGlmIDA6IHBhc3MKLSAgICAgICAgZWxpZiAwOiBwYXNzCi0gICAgICAgIGVsc2U6IHBhc3MKLQotICAgIGRlZiB0ZXN0V2hpbGUoc2VsZik6Ci0gICAgICAgICMgJ3doaWxlJyB0ZXN0ICc6JyBzdWl0ZSBbJ2Vsc2UnICc6JyBzdWl0ZV0KLSAgICAgICAgd2hpbGUgMDogcGFzcwotICAgICAgICB3aGlsZSAwOiBwYXNzCi0gICAgICAgIGVsc2U6IHBhc3MKLQotICAgICAgICAjIElzc3VlMTkyMDogIndoaWxlIDAiIGlzIG9wdGltaXplZCBhd2F5LAotICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSAiZWxzZSIgY2xhdXNlIGlzIHN0aWxsIHByZXNlbnQuCi0gICAgICAgIHggPSAwCi0gICAgICAgIHdoaWxlIDA6Ci0gICAgICAgICAgICB4ID0gMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgeCA9IDIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoeCwgMikKLQotICAgIGRlZiB0ZXN0Rm9yKHNlbGYpOgotICAgICAgICAjICdmb3InIGV4cHJsaXN0ICdpbicgZXhwcmxpc3QgJzonIHN1aXRlIFsnZWxzZScgJzonIHN1aXRlXQotICAgICAgICBmb3IgaSBpbiAxLCAyLCAzOiBwYXNzCi0gICAgICAgIGZvciBpLCBqLCBrIGluICgpOiBwYXNzCi0gICAgICAgIGVsc2U6IHBhc3MKLSAgICAgICAgY2xhc3MgU3F1YXJlczoKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXgpOgotICAgICAgICAgICAgICAgIHNlbGYubWF4ID0gbWF4Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2ZhciA9IFtdCi0gICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKTogcmV0dXJuIGxlbihzZWxmLnNvZmFyKQotICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgotICAgICAgICAgICAgICAgIGlmIG5vdCAwIDw9IGkgPCBzZWxmLm1heDogcmFpc2UgSW5kZXhFcnJvcgotICAgICAgICAgICAgICAgIG4gPSBsZW4oc2VsZi5zb2ZhcikKLSAgICAgICAgICAgICAgICB3aGlsZSBuIDw9IGk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc29mYXIuYXBwZW5kKG4qbikKLSAgICAgICAgICAgICAgICAgICAgbiA9IG4rMQotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNvZmFyW2ldCi0gICAgICAgIG4gPSAwCi0gICAgICAgIGZvciB4IGluIFNxdWFyZXMoMTApOiBuID0gbit4Ci0gICAgICAgIGlmIG4gIT0gMjg1OgotICAgICAgICAgICAgc2VsZi5mYWlsKCdmb3Igb3ZlciBncm93aW5nIHNlcXVlbmNlJykKLQotICAgICAgICByZXN1bHQgPSBbXQotICAgICAgICBmb3IgeCwgaW4gWygxLCksICgyLCksICgzLCldOgotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh4KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWzEsIDIsIDNdKQotCi0gICAgZGVmIHRlc3RUcnkoc2VsZik6Ci0gICAgICAgICMjIyB0cnlfc3RtdDogJ3RyeScgJzonIHN1aXRlIChleGNlcHRfY2xhdXNlICc6JyBzdWl0ZSkrIFsnZWxzZScgJzonIHN1aXRlXQotICAgICAgICAjIyMgICAgICAgICB8ICd0cnknICc6JyBzdWl0ZSAnZmluYWxseScgJzonIHN1aXRlCi0gICAgICAgICMjIyBleGNlcHRfY2xhdXNlOiAnZXhjZXB0JyBbZXhwciBbJ2FzJyBleHByXV0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgMS8wCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgdHJ5OiAxLzAKLSAgICAgICAgZXhjZXB0IEVPRkVycm9yOiBwYXNzCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgbXNnOiBwYXNzCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgbXNnOiBwYXNzCi0gICAgICAgIGV4Y2VwdDogcGFzcwotICAgICAgICBlbHNlOiBwYXNzCi0gICAgICAgIHRyeTogMS8wCi0gICAgICAgIGV4Y2VwdCAoRU9GRXJyb3IsIFR5cGVFcnJvciwgWmVyb0RpdmlzaW9uRXJyb3IpOiBwYXNzCi0gICAgICAgIHRyeTogMS8wCi0gICAgICAgIGV4Y2VwdCAoRU9GRXJyb3IsIFR5cGVFcnJvciwgWmVyb0RpdmlzaW9uRXJyb3IpIGFzIG1zZzogcGFzcwotICAgICAgICB0cnk6IHBhc3MKLSAgICAgICAgZmluYWxseTogcGFzcwotCi0gICAgZGVmIHRlc3RTdWl0ZShzZWxmKToKLSAgICAgICAgIyBzaW1wbGVfc3RtdCB8IE5FV0xJTkUgSU5ERU5UIE5FV0xJTkUqIChzdG10IE5FV0xJTkUqKSsgREVERU5UCi0gICAgICAgIGlmIDE6IHBhc3MKLSAgICAgICAgaWYgMToKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgaWYgMToKLSAgICAgICAgICAgICMKLSAgICAgICAgICAgICMKLSAgICAgICAgICAgICMKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICMKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICMKLQotICAgIGRlZiB0ZXN0VGVzdChzZWxmKToKLSAgICAgICAgIyMjIGFuZF90ZXN0ICgnb3InIGFuZF90ZXN0KSoKLSAgICAgICAgIyMjIGFuZF90ZXN0OiBub3RfdGVzdCAoJ2FuZCcgbm90X3Rlc3QpKgotICAgICAgICAjIyMgbm90X3Rlc3Q6ICdub3QnIG5vdF90ZXN0IHwgY29tcGFyaXNvbgotICAgICAgICBpZiBub3QgMTogcGFzcwotICAgICAgICBpZiAxIGFuZCAxOiBwYXNzCi0gICAgICAgIGlmIDEgb3IgMTogcGFzcwotICAgICAgICBpZiBub3Qgbm90IG5vdCAxOiBwYXNzCi0gICAgICAgIGlmIG5vdCAxIGFuZCAxIGFuZCAxOiBwYXNzCi0gICAgICAgIGlmIDEgYW5kIDEgb3IgMSBhbmQgMSBhbmQgMSBvciBub3QgMSBhbmQgMTogcGFzcwotCi0gICAgZGVmIHRlc3RDb21wYXJpc29uKHNlbGYpOgotICAgICAgICAjIyMgY29tcGFyaXNvbjogZXhwciAoY29tcF9vcCBleHByKSoKLSAgICAgICAgIyMjIGNvbXBfb3A6ICc8J3wnPid8Jz09J3wnPj0nfCc8PSd8JyE9J3wnaW4nfCdub3QnICdpbid8J2lzJ3wnaXMnICdub3QnCi0gICAgICAgIGlmIDE6IHBhc3MKLSAgICAgICAgeCA9ICgxID09IDEpCi0gICAgICAgIGlmIDEgPT0gMTogcGFzcwotICAgICAgICBpZiAxICE9IDE6IHBhc3MKLSAgICAgICAgaWYgMSA8IDE6IHBhc3MKLSAgICAgICAgaWYgMSA+IDE6IHBhc3MKLSAgICAgICAgaWYgMSA8PSAxOiBwYXNzCi0gICAgICAgIGlmIDEgPj0gMTogcGFzcwotICAgICAgICBpZiAxIGlzIDE6IHBhc3MKLSAgICAgICAgaWYgMSBpcyBub3QgMTogcGFzcwotICAgICAgICBpZiAxIGluICgpOiBwYXNzCi0gICAgICAgIGlmIDEgbm90IGluICgpOiBwYXNzCi0gICAgICAgIGlmIDEgPCAxID4gMSA9PSAxID49IDEgPD0gMSAhPSAxIGluIDEgbm90IGluIDEgaXMgMSBpcyBub3QgMTogcGFzcwotCi0gICAgZGVmIHRlc3RCaW5hcnlNYXNrT3BzKHNlbGYpOgotICAgICAgICB4ID0gMSAmIDEKLSAgICAgICAgeCA9IDEgXiAxCi0gICAgICAgIHggPSAxIHwgMQotCi0gICAgZGVmIHRlc3RTaGlmdE9wcyhzZWxmKToKLSAgICAgICAgeCA9IDEgPDwgMQotICAgICAgICB4ID0gMSA+PiAxCi0gICAgICAgIHggPSAxIDw8IDEgPj4gMQotCi0gICAgZGVmIHRlc3RBZGRpdGl2ZU9wcyhzZWxmKToKLSAgICAgICAgeCA9IDEKLSAgICAgICAgeCA9IDEgKyAxCi0gICAgICAgIHggPSAxIC0gMSAtIDEKLSAgICAgICAgeCA9IDEgLSAxICsgMSAtIDEgKyAxCi0KLSAgICBkZWYgdGVzdE11bHRpcGxpY2F0aXZlT3BzKHNlbGYpOgotICAgICAgICB4ID0gMSAqIDEKLSAgICAgICAgeCA9IDEgLyAxCi0gICAgICAgIHggPSAxICUgMQotICAgICAgICB4ID0gMSAvIDEgKiAxICUgMQotCi0gICAgZGVmIHRlc3RVbmFyeU9wcyhzZWxmKToKLSAgICAgICAgeCA9ICsxCi0gICAgICAgIHggPSAtMQotICAgICAgICB4ID0gfjEKLSAgICAgICAgeCA9IH4xIF4gMSAmIDEgfCAxICYgMSBeIC0xCi0gICAgICAgIHggPSAtMSoxLzEgKyAxKjEgLSAtLS0xKjEKLQotICAgIGRlZiB0ZXN0U2VsZWN0b3JzKHNlbGYpOgotICAgICAgICAjIyMgdHJhaWxlcjogJygnIFt0ZXN0bGlzdF0gJyknIHwgJ1snIHN1YnNjcmlwdCAnXScgfCAnLicgTkFNRQotICAgICAgICAjIyMgc3Vic2NyaXB0OiBleHByIHwgW2V4cHJdICc6JyBbZXhwcl0KLQotICAgICAgICBpbXBvcnQgc3lzLCB0aW1lCi0gICAgICAgIGMgPSBzeXMucGF0aFswXQotICAgICAgICB4ID0gdGltZS50aW1lKCkKLSAgICAgICAgeCA9IHN5cy5tb2R1bGVzWyd0aW1lJ10udGltZSgpCi0gICAgICAgIGEgPSAnMDEyMzQnCi0gICAgICAgIGMgPSBhWzBdCi0gICAgICAgIGMgPSBhWy0xXQotICAgICAgICBzID0gYVswOjVdCi0gICAgICAgIHMgPSBhWzo1XQotICAgICAgICBzID0gYVswOl0KLSAgICAgICAgcyA9IGFbOl0KLSAgICAgICAgcyA9IGFbLTU6XQotICAgICAgICBzID0gYVs6LTFdCi0gICAgICAgIHMgPSBhWy00Oi0zXQotICAgICAgICAjIEEgcm91Z2ggdGVzdCBvZiBTRiBidWcgMTMzMzk4Mi4gIGh0dHA6Ly9weXRob24ub3JnL3NmLzEzMzM5ODIKLSAgICAgICAgIyBUaGUgdGVzdGluZyBoZXJlIGlzIGZhaXJseSBpbmNvbXBsZXRlLgotICAgICAgICAjIFRlc3QgY2FzZXMgc2hvdWxkIGluY2x1ZGU6IGNvbW1hcyB3aXRoIDEgYW5kIDIgY29sb25zCi0gICAgICAgIGQgPSB7fQotICAgICAgICBkWzFdID0gMQotICAgICAgICBkWzEsXSA9IDIKLSAgICAgICAgZFsxLDJdID0gMwotICAgICAgICBkWzEsMiwzXSA9IDQKLSAgICAgICAgTCA9IGxpc3QoZCkKLSAgICAgICAgTC5zb3J0KGtleT1sYW1iZGEgeDogeCBpZiBpc2luc3RhbmNlKHgsIHR1cGxlKSBlbHNlICgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzdHIoTCksICdbMSwgKDEsKSwgKDEsIDIpLCAoMSwgMiwgMyldJykKLQotICAgIGRlZiB0ZXN0QXRvbXMoc2VsZik6Ci0gICAgICAgICMjIyBhdG9tOiAnKCcgW3Rlc3RsaXN0XSAnKScgfCAnWycgW3Rlc3RsaXN0XSAnXScgfCAneycgW2RpY3RzZXRtYWtlcl0gJ30nIHwgTkFNRSB8IE5VTUJFUiB8IFNUUklORwotICAgICAgICAjIyMgZGljdHNldG1ha2VyOiAodGVzdCAnOicgdGVzdCAoJywnIHRlc3QgJzonIHRlc3QpKiBbJywnXSkgfCAodGVzdCAoJywnIHRlc3QpKiBbJywnXSkKLQotICAgICAgICB4ID0gKDEpCi0gICAgICAgIHggPSAoMSBvciAyIG9yIDMpCi0gICAgICAgIHggPSAoMSBvciAyIG9yIDMsIDIsIDMpCi0KLSAgICAgICAgeCA9IFtdCi0gICAgICAgIHggPSBbMV0KLSAgICAgICAgeCA9IFsxIG9yIDIgb3IgM10KLSAgICAgICAgeCA9IFsxIG9yIDIgb3IgMywgMiwgM10KLSAgICAgICAgeCA9IFtdCi0KLSAgICAgICAgeCA9IHt9Ci0gICAgICAgIHggPSB7J29uZSc6IDF9Ci0gICAgICAgIHggPSB7J29uZSc6IDEsfQotICAgICAgICB4ID0geydvbmUnIG9yICd0d28nOiAxIG9yIDJ9Ci0gICAgICAgIHggPSB7J29uZSc6IDEsICd0d28nOiAyfQotICAgICAgICB4ID0geydvbmUnOiAxLCAndHdvJzogMix9Ci0gICAgICAgIHggPSB7J29uZSc6IDEsICd0d28nOiAyLCAndGhyZWUnOiAzLCAnZm91cic6IDQsICdmaXZlJzogNSwgJ3NpeCc6IDZ9Ci0KLSAgICAgICAgeCA9IHsnb25lJ30KLSAgICAgICAgeCA9IHsnb25lJywgMSx9Ci0gICAgICAgIHggPSB7J29uZScsICd0d28nLCAndGhyZWUnfQotICAgICAgICB4ID0gezIsIDMsIDQsfQotCi0gICAgICAgIHggPSB4Ci0gICAgICAgIHggPSAneCcKLSAgICAgICAgeCA9IDEyMwotCi0gICAgIyMjIGV4cHJsaXN0OiBleHByICgnLCcgZXhwcikqIFsnLCddCi0gICAgIyMjIHRlc3RsaXN0OiB0ZXN0ICgnLCcgdGVzdCkqIFsnLCddCi0gICAgIyBUaGVzZSBoYXZlIGJlZW4gZXhlcmNpc2VkIGVub3VnaCBhYm92ZQotCi0gICAgZGVmIHRlc3RDbGFzc2RlZihzZWxmKToKLSAgICAgICAgIyAnY2xhc3MnIE5BTUUgWycoJyBbdGVzdGxpc3RdICcpJ10gJzonIHN1aXRlCi0gICAgICAgIGNsYXNzIEI6IHBhc3MKLSAgICAgICAgY2xhc3MgQjIoKTogcGFzcwotICAgICAgICBjbGFzcyBDMShCKTogcGFzcwotICAgICAgICBjbGFzcyBDMihCKTogcGFzcwotICAgICAgICBjbGFzcyBEKEMxLCBDMiwgQik6IHBhc3MKLSAgICAgICAgY2xhc3MgQzoKLSAgICAgICAgICAgIGRlZiBtZXRoMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIG1ldGgyKHNlbGYsIGFyZyk6IHBhc3MKLSAgICAgICAgICAgIGRlZiBtZXRoMyhzZWxmLCBhMSwgYTIpOiBwYXNzCi0KLSAgICAgICAgIyBkZWNvcmF0b3I6ICdAJyBkb3R0ZWRfbmFtZSBbICcoJyBbYXJnbGlzdF0gJyknIF0gTkVXTElORQotICAgICAgICAjIGRlY29yYXRvcnM6IGRlY29yYXRvcisKLSAgICAgICAgIyBkZWNvcmF0ZWQ6IGRlY29yYXRvcnMgKGNsYXNzZGVmIHwgZnVuY2RlZikKLSAgICAgICAgZGVmIGNsYXNzX2RlY29yYXRvcih4KTogcmV0dXJuIHgKLSAgICAgICAgQGNsYXNzX2RlY29yYXRvcgotICAgICAgICBjbGFzcyBHOiBwYXNzCi0KLSAgICBkZWYgdGVzdERpY3Rjb21wcyhzZWxmKToKLSAgICAgICAgIyBkaWN0b3JzZXRtYWtlcjogKCAodGVzdCAnOicgdGVzdCAoY29tcF9mb3IgfAotICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJywnIHRlc3QgJzonIHRlc3QpKiBbJywnXSkpIHwKLSAgICAgICAgIyAgICAgICAgICAgICAgICAgICAodGVzdCAoY29tcF9mb3IgfCAoJywnIHRlc3QpKiBbJywnXSkpICkKLSAgICAgICAgbnVtcyA9IFsxLCAyLCAzXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHtpOmkrMSBmb3IgaSBpbiBudW1zfSwgezE6IDIsIDI6IDMsIDM6IDR9KQotCi0gICAgZGVmIHRlc3RMaXN0Y29tcHMoc2VsZik6Ci0gICAgICAgICMgbGlzdCBjb21wcmVoZW5zaW9uIHRlc3RzCi0gICAgICAgIG51bXMgPSBbMSwgMiwgMywgNCwgNV0KLSAgICAgICAgc3RycyA9IFsiQXBwbGUiLCAiQmFuYW5hIiwgIkNvY29udXQiXQotICAgICAgICBzcGNzID0gWyIgIEFwcGxlIiwgIiBCYW5hbmEgIiwgIkNvY28gIG51dCAgIl0KLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtzLnN0cmlwKCkgZm9yIHMgaW4gc3Bjc10sIFsnQXBwbGUnLCAnQmFuYW5hJywgJ0NvY28gIG51dCddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFszICogeCBmb3IgeCBpbiBudW1zXSwgWzMsIDYsIDksIDEyLCAxNV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3ggZm9yIHggaW4gbnVtcyBpZiB4ID4gMl0sIFszLCA0LCA1XSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKGksIHMpIGZvciBpIGluIG51bXMgZm9yIHMgaW4gc3Ryc10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgWygxLCAnQXBwbGUnKSwgKDEsICdCYW5hbmEnKSwgKDEsICdDb2NvbnV0JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnQXBwbGUnKSwgKDIsICdCYW5hbmEnKSwgKDIsICdDb2NvbnV0JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnQXBwbGUnKSwgKDMsICdCYW5hbmEnKSwgKDMsICdDb2NvbnV0JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnQXBwbGUnKSwgKDQsICdCYW5hbmEnKSwgKDQsICdDb2NvbnV0JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnQXBwbGUnKSwgKDUsICdCYW5hbmEnKSwgKDUsICdDb2NvbnV0JyldKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoaSwgcykgZm9yIGkgaW4gbnVtcyBmb3IgcyBpbiBbZiBmb3IgZiBpbiBzdHJzIGlmICJuIiBpbiBmXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgWygxLCAnQmFuYW5hJyksICgxLCAnQ29jb251dCcpLCAoMiwgJ0JhbmFuYScpLCAoMiwgJ0NvY29udXQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdCYW5hbmEnKSwgKDMsICdDb2NvbnV0JyksICg0LCAnQmFuYW5hJyksICg0LCAnQ29jb251dCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ0JhbmFuYScpLCAoNSwgJ0NvY29udXQnKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyhsYW1iZGEgYTpbYSoqaSBmb3IgaSBpbiByYW5nZShhKzEpXSkoaikgZm9yIGogaW4gcmFuZ2UoNSldLAotICAgICAgICAgICAgICAgICAgICAgICAgIFtbMV0sIFsxLCAxXSwgWzEsIDIsIDRdLCBbMSwgMywgOSwgMjddLCBbMSwgNCwgMTYsIDY0LCAyNTZdXSkKLQotICAgICAgICBkZWYgdGVzdF9pbl9mdW5jKGwpOgotICAgICAgICAgICAgcmV0dXJuIFswIDwgeCA8IDMgZm9yIHggaW4gbCBpZiB4ID4gMl0KLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RfaW5fZnVuYyhudW1zKSwgW0ZhbHNlLCBGYWxzZSwgRmFsc2VdKQotCi0gICAgICAgIGRlZiB0ZXN0X25lc3RlZF9mcm9udCgpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbW3kgZm9yIHkgaW4gW3gsIHggKyAxXV0gZm9yIHggaW4gWzEsMyw1XV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbMSwgMl0sIFszLCA0XSwgWzUsIDZdXSkKLQotICAgICAgICB0ZXN0X25lc3RlZF9mcm9udCgpCi0KLSAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJbaSwgcyBmb3IgaSBpbiBudW1zIGZvciBzIGluIHN0cnNdIikKLSAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJbeCBpZiB5XSIpCi0KLSAgICAgICAgc3VwcGxpZXJzID0gWwotICAgICAgICAgICgxLCAiQm9laW5nIiksCi0gICAgICAgICAgKDIsICJGb3JkIiksCi0gICAgICAgICAgKDMsICJNYWNkb25hbGRzIikKLSAgICAgICAgXQotCi0gICAgICAgIHBhcnRzID0gWwotICAgICAgICAgICgxMCwgIkFpcmxpbmVyIiksCi0gICAgICAgICAgKDIwLCAiRW5naW5lIiksCi0gICAgICAgICAgKDMwLCAiQ2hlZXNlYnVyZ2VyIikKLSAgICAgICAgXQotCi0gICAgICAgIHN1cHBhcnQgPSBbCi0gICAgICAgICAgKDEsIDEwKSwgKDEsIDIwKSwgKDIsIDIwKSwgKDMsIDMwKQotICAgICAgICBdCi0KLSAgICAgICAgeCA9IFsKLSAgICAgICAgICAoc25hbWUsIHBuYW1lKQotICAgICAgICAgICAgZm9yIChzbm8sIHNuYW1lKSBpbiBzdXBwbGllcnMKLSAgICAgICAgICAgICAgZm9yIChwbm8sIHBuYW1lKSBpbiBwYXJ0cwotICAgICAgICAgICAgICAgIGZvciAoc3Bfc25vLCBzcF9wbm8pIGluIHN1cHBhcnQKLSAgICAgICAgICAgICAgICAgIGlmIHNubyA9PSBzcF9zbm8gYW5kIHBubyA9PSBzcF9wbm8KLSAgICAgICAgXQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgWygnQm9laW5nJywgJ0FpcmxpbmVyJyksICgnQm9laW5nJywgJ0VuZ2luZScpLCAoJ0ZvcmQnLCAnRW5naW5lJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnTWFjZG9uYWxkcycsICdDaGVlc2VidXJnZXInKV0pCi0KLSAgICBkZWYgdGVzdEdlbmV4cHMoc2VsZik6Ci0gICAgICAgICMgZ2VuZXJhdG9yIGV4cHJlc3Npb24gdGVzdHMKLSAgICAgICAgZyA9IChbeCBmb3IgeCBpbiByYW5nZSgxMCldIGZvciB4IGluIHJhbmdlKDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksIFt4IGZvciB4IGluIHJhbmdlKDEwKV0pCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG5leHQoZykKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnc2hvdWxkIHByb2R1Y2UgU3RvcEl0ZXJhdGlvbiBleGNlcHRpb24nKQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBhID0gMQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBnID0gKGEgZm9yIGQgaW4gYSkKLSAgICAgICAgICAgIG5leHQoZykKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnc2hvdWxkIHByb2R1Y2UgVHlwZUVycm9yJykKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoKHgsIHkpIGZvciB4IGluICdhYmNkJyBmb3IgeSBpbiAnYWJjZCcpLCBbKHgsIHkpIGZvciB4IGluICdhYmNkJyBmb3IgeSBpbiAnYWJjZCddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoKHgsIHkpIGZvciB4IGluICdhYicgZm9yIHkgaW4gJ3h5JyksIFsoeCwgeSkgZm9yIHggaW4gJ2FiJyBmb3IgeSBpbiAneHknXSkKLQotICAgICAgICBhID0gW3ggZm9yIHggaW4gcmFuZ2UoMTApXQotICAgICAgICBiID0gKHggZm9yIHggaW4gKHkgZm9yIHkgaW4gYSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKGIpLCBzdW0oW3ggZm9yIHggaW4gcmFuZ2UoMTApXSkpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oeCoqMiBmb3IgeCBpbiByYW5nZSgxMCkpLCBzdW0oW3gqKjIgZm9yIHggaW4gcmFuZ2UoMTApXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHgqeCBmb3IgeCBpbiByYW5nZSgxMCkgaWYgeCUyKSwgc3VtKFt4KnggZm9yIHggaW4gcmFuZ2UoMTApIGlmIHglMl0pKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bSh4IGZvciB4IGluICh5IGZvciB5IGluIHJhbmdlKDEwKSkpLCBzdW0oW3ggZm9yIHggaW4gcmFuZ2UoMTApXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHggZm9yIHggaW4gKHkgZm9yIHkgaW4gKHogZm9yIHogaW4gcmFuZ2UoMTApKSkpLCBzdW0oW3ggZm9yIHggaW4gcmFuZ2UoMTApXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHggZm9yIHggaW4gW3kgZm9yIHkgaW4gKHogZm9yIHogaW4gcmFuZ2UoMTApKV0pLCBzdW0oW3ggZm9yIHggaW4gcmFuZ2UoMTApXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHggZm9yIHggaW4gKHkgZm9yIHkgaW4gKHogZm9yIHogaW4gcmFuZ2UoMTApIGlmIFRydWUpKSBpZiBUcnVlKSwgc3VtKFt4IGZvciB4IGluIHJhbmdlKDEwKV0pKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bSh4IGZvciB4IGluICh5IGZvciB5IGluICh6IGZvciB6IGluIHJhbmdlKDEwKSBpZiBUcnVlKSBpZiBGYWxzZSkgaWYgVHJ1ZSksIDApCi0gICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiZm9vKHggZm9yIHggaW4gcmFuZ2UoMTApLCAxMDApIikKLSAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJmb28oMTAwLCB4IGZvciB4IGluIHJhbmdlKDEwKSkiKQotCi0gICAgZGVmIHRlc3RDb21wcmVoZW5zaW9uU3BlY2lhbHMoc2VsZik6Ci0gICAgICAgICMgdGVzdCBmb3Igb3V0bW9zdCBpdGVyYWJsZSBwcmVjb21wdXRhdGlvbgotICAgICAgICB4ID0gMTA7IGcgPSAoaSBmb3IgaSBpbiByYW5nZSh4KSk7IHggPSA1Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpc3QoZykpLCAxMCkKLQotICAgICAgICAjIFRoaXMgc2hvdWxkIGhvbGQsIHNpbmNlIHdlJ3JlIG9ubHkgcHJlY29tcHV0aW5nIG91dG1vc3QgaXRlcmFibGUuCi0gICAgICAgIHggPSAxMDsgdCA9IEZhbHNlOyBnID0gKChpLGopIGZvciBpIGluIHJhbmdlKHgpIGlmIHQgZm9yIGogaW4gcmFuZ2UoeCkpCi0gICAgICAgIHggPSA1OyB0ID0gVHJ1ZTsKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKGksaikgZm9yIGkgaW4gcmFuZ2UoMTApIGZvciBqIGluIHJhbmdlKDUpXSwgbGlzdChnKSkKLQotICAgICAgICAjIEdyYW1tYXIgYWxsb3dzIG11bHRpcGxlIGFkamFjZW50ICdpZidzIGluIGxpc3Rjb21wcyBhbmQgZ2VuZXhwcywKLSAgICAgICAgIyBldmVuIHRob3VnaCBpdCdzIHNpbGx5LiBNYWtlIHN1cmUgaXQgd29ya3MgKGlmZWxzZSBicm9rZSB0aGlzLikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbIHggZm9yIHggaW4gcmFuZ2UoMTApIGlmIHggJSAyIGlmIHggJSAzIF0sIFsxLCA1LCA3XSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHggZm9yIHggaW4gcmFuZ2UoMTApIGlmIHggJSAyIGlmIHggJSAzKSwgWzEsIDUsIDddKQotCi0gICAgICAgICMgdmVyaWZ5IHVucGFja2luZyBzaW5nbGUgZWxlbWVudCB0dXBsZXMgaW4gbGlzdGNvbXAvZ2VuZXhwLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt4IGZvciB4LCBpbiBbKDQsKSwgKDUsKSwgKDYsKV1dLCBbNCwgNSwgNl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4IGZvciB4LCBpbiBbKDcsKSwgKDgsKSwgKDksKV0pLCBbNywgOCwgOV0pCi0KLSAgICBkZWYgdGVzdF93aXRoX3N0YXRlbWVudChzZWxmKToKLSAgICAgICAgY2xhc3MgbWFuYWdlcihvYmplY3QpOgotICAgICAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gKDEsIDIpCi0gICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICB3aXRoIG1hbmFnZXIoKToKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgd2l0aCBtYW5hZ2VyKCkgYXMgeDoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgd2l0aCBtYW5hZ2VyKCkgYXMgKHgsIHkpOgotICAgICAgICAgICAgcGFzcwotICAgICAgICB3aXRoIG1hbmFnZXIoKSwgbWFuYWdlcigpOgotICAgICAgICAgICAgcGFzcwotICAgICAgICB3aXRoIG1hbmFnZXIoKSBhcyB4LCBtYW5hZ2VyKCkgYXMgeToKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgd2l0aCBtYW5hZ2VyKCkgYXMgeCwgbWFuYWdlcigpOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHRlc3RJZkVsc2VFeHByKHNlbGYpOgotICAgICAgICAjIFRlc3QgaWZlbHNlIGV4cHJlc3Npb25zIGluIHZhcmlvdXMgY2FzZXMKLSAgICAgICAgZGVmIF9jaGVja2V2YWwobXNnLCByZXQpOgotICAgICAgICAgICAgImhlbHBlciB0byBjaGVjayB0aGF0IGV2YWx1YXRpb24gb2YgZXhwcmVzc2lvbnMgaXMgZG9uZSBjb3JyZWN0bHkiCi0gICAgICAgICAgICBwcmludCh4KQotICAgICAgICAgICAgcmV0dXJuIHJldAotCi0gICAgICAgICMgdGhlIG5leHQgbGluZSBpcyBub3QgYWxsb3dlZCBhbnltb3JlCi0gICAgICAgICNzZWxmLmFzc2VydEVxdWFsKFsgeCgpIGZvciB4IGluIGxhbWJkYTogVHJ1ZSwgbGFtYmRhOiBGYWxzZSBpZiB4KCkgXSwgW1RydWVdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsgeCgpIGZvciB4IGluIChsYW1iZGE6IFRydWUsIGxhbWJkYTogRmFsc2UpIGlmIHgoKSBdLCBbVHJ1ZV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyB4KEZhbHNlKSBmb3IgeCBpbiAobGFtYmRhIHg6IEZhbHNlIGlmIHggZWxzZSBUcnVlLCBsYW1iZGEgeDogVHJ1ZSBpZiB4IGVsc2UgRmFsc2UpIGlmIHgoRmFsc2UpIF0sIFtUcnVlXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNSBpZiAxIGVsc2UgX2NoZWNrZXZhbCgiY2hlY2sgMSIsIDApKSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoX2NoZWNrZXZhbCgiY2hlY2sgMiIsIDApIGlmIDAgZWxzZSA1KSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNSBhbmQgNiBpZiAwIGVsc2UgMSksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCg1IGFuZCA2KSBpZiAwIGVsc2UgMSksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDUgYW5kICg2IGlmIDEgZWxzZSAxKSksIDYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAgb3IgX2NoZWNrZXZhbCgiY2hlY2sgMyIsIDIpIGlmIDAgZWxzZSAzKSwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMSBvciBfY2hlY2tldmFsKCJjaGVjayA0IiwgMikgaWYgMSBlbHNlIF9jaGVja2V2YWwoImNoZWNrIDUiLCAzKSksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAgb3IgNSBpZiAxIGVsc2UgX2NoZWNrZXZhbCgiY2hlY2sgNiIsIDMpKSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobm90IDUgaWYgMSBlbHNlIDEpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobm90IDUgaWYgMCBlbHNlIDEpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg2ICsgMSBpZiAxIGVsc2UgMiksIDcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDYgLSAxIGlmIDEgZWxzZSAyKSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNiAqIDIgaWYgMSBlbHNlIDQpLCAxMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNiAvIDIgaWYgMSBlbHNlIDMpLCAzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg2IDwgNCBpZiAwIGVsc2UgMiksIDIpCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChUb2tlblRlc3RzLCBHcmFtbWFyVGVzdHMpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9weXRyZWVfaWRlbXBvdGVuY3kucHkgYi9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAyNDNmN2U4Li4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9weXRyZWVfaWRlbXBvdGVuY3kucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IDIwMDYgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLQotIiIiTWFpbiBwcm9ncmFtIGZvciB0ZXN0aW5nIHRoZSBpbmZyYXN0cnVjdHVyZS4iIiIKLQotX19hdXRob3JfXyA9ICJHdWlkbyB2YW4gUm9zc3VtIDxndWlkb0BweXRob24ub3JnPiIKLQotIyBTdXBwb3J0IGltcG9ydHMgKG5lZWQgdG8gYmUgaW1wb3J0ZWQgZmlyc3QpCi1mcm9tIC4gaW1wb3J0IHN1cHBvcnQKLQotIyBQeXRob24gaW1wb3J0cwotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgbG9nZ2luZwotCi0jIExvY2FsIGltcG9ydHMKLWZyb20gLi4gaW1wb3J0IHB5dHJlZQotaW1wb3J0IHBnZW4yCi1mcm9tIHBnZW4yIGltcG9ydCBkcml2ZXIKLQotbG9nZ2luZy5iYXNpY0NvbmZpZygpCi0KLWRlZiBtYWluKCk6Ci0gICAgZ3IgPSBkcml2ZXIubG9hZF9ncmFtbWFyKCJHcmFtbWFyLnR4dCIpCi0gICAgZHIgPSBkcml2ZXIuRHJpdmVyKGdyLCBjb252ZXJ0PXB5dHJlZS5jb252ZXJ0KQotCi0gICAgZm4gPSAiZXhhbXBsZS5weSIKLSAgICB0cmVlID0gZHIucGFyc2VfZmlsZShmbiwgZGVidWc9VHJ1ZSkKLSAgICBpZiBub3QgZGlmZihmbiwgdHJlZSk6Ci0gICAgICAgIHByaW50ICJObyBkaWZmcy4iCi0gICAgaWYgbm90IHN5cy5hcmd2WzE6XToKLSAgICAgICAgcmV0dXJuICMgUGFzcyBhIGR1bW15IGFyZ3VtZW50IHRvIHJ1biB0aGUgY29tcGxldGUgdGVzdCBzdWl0ZSBiZWxvdwotCi0gICAgcHJvYmxlbXMgPSBbXQotCi0gICAgIyBQcm9jZXNzIGV2ZXJ5IGltcG9ydGVkIG1vZHVsZQotICAgIGZvciBuYW1lIGluIHN5cy5tb2R1bGVzOgotICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1tuYW1lXQotICAgICAgICBpZiBtb2QgaXMgTm9uZSBvciBub3QgaGFzYXR0cihtb2QsICJfX2ZpbGVfXyIpOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZm4gPSBtb2QuX19maWxlX18KLSAgICAgICAgaWYgZm4uZW5kc3dpdGgoIi5weWMiKToKLSAgICAgICAgICAgIGZuID0gZm5bOi0xXQotICAgICAgICBpZiBub3QgZm4uZW5kc3dpdGgoIi5weSIpOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiUGFyc2luZyIsIGZuCi0gICAgICAgIHRyZWUgPSBkci5wYXJzZV9maWxlKGZuLCBkZWJ1Zz1UcnVlKQotICAgICAgICBpZiBkaWZmKGZuLCB0cmVlKToKLSAgICAgICAgICAgIHByb2JsZW1zLmFwcGVuZChmbikKLQotICAgICMgUHJvY2VzcyBldmVyeSBzaW5nbGUgbW9kdWxlIG9uIHN5cy5wYXRoIChidXQgbm90IGluIHBhY2thZ2VzKQotICAgIGZvciBkaXIgaW4gc3lzLnBhdGg6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIlNjYW5uaW5nIiwgZGlyLCAiLi4uIgotICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKLSAgICAgICAgICAgIGlmIG5vdCBuYW1lLmVuZHN3aXRoKCIucHkiKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiUGFyc2luZyIsIG5hbWUKLSAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKGRpciwgbmFtZSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0cmVlID0gZHIucGFyc2VfZmlsZShmbiwgZGVidWc9VHJ1ZSkKLSAgICAgICAgICAgIGV4Y2VwdCBwZ2VuMi5wYXJzZS5QYXJzZUVycm9yLCBlcnI6Ci0gICAgICAgICAgICAgICAgcHJpbnQgIlBhcnNlRXJyb3I6IiwgZXJyCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIGRpZmYoZm4sIHRyZWUpOgotICAgICAgICAgICAgICAgICAgICBwcm9ibGVtcy5hcHBlbmQoZm4pCi0KLSAgICAjIFNob3cgc3VtbWFyeSBvZiBwcm9ibGVtIGZpbGVzCi0gICAgaWYgbm90IHByb2JsZW1zOgotICAgICAgICBwcmludCAiTm8gcHJvYmxlbXMuICBDb25ncmF0dWxhdGlvbnMhIgotICAgIGVsc2U6Ci0gICAgICAgIHByaW50ICJQcm9ibGVtcyBpbiBmb2xsb3dpbmcgZmlsZXM6IgotICAgICAgICBmb3IgZm4gaW4gcHJvYmxlbXM6Ci0gICAgICAgICAgICBwcmludCAiKioqIiwgZm4KLQotZGVmIGRpZmYoZm4sIHRyZWUpOgotICAgIGYgPSBvcGVuKCJAIiwgInciKQotICAgIHRyeToKLSAgICAgICAgZi53cml0ZShzdHIodHJlZSkpCi0gICAgZmluYWxseToKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgdHJ5OgotICAgICAgICByZXR1cm4gb3Muc3lzdGVtKCJkaWZmIC11ICVzIEAiICUgZm4pCi0gICAgZmluYWxseToKLSAgICAgICAgb3MucmVtb3ZlKCJAIikKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9zdXBwb3J0LnB5IGIvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL3N1cHBvcnQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NDY5MzUuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL3N1cHBvcnQucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0iIiJTdXBwb3J0IGNvZGUgZm9yIHRlc3RfKi5weSBmaWxlcyIiIgotIyBBdXRob3I6IENvbGxpbiBXaW50ZXIKLQotIyBQeXRob24gaW1wb3J0cwotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgc3lzCi1pbXBvcnQgb3MKLWltcG9ydCBvcy5wYXRoCi1pbXBvcnQgcmUKLWZyb20gdGV4dHdyYXAgaW1wb3J0IGRlZGVudAotCi0jIExvY2FsIGltcG9ydHMKLWZyb20gbGliMnRvMyBpbXBvcnQgcHl0cmVlLCByZWZhY3RvcgotZnJvbSBsaWIydG8zLnBnZW4yIGltcG9ydCBkcml2ZXIKLQotdGVzdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi1wcm9qX2RpciA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKHRlc3RfZGlyLCAiLi4iKSkKLWdyYW1tYXJfcGF0aCA9IG9zLnBhdGguam9pbih0ZXN0X2RpciwgIi4uIiwgIkdyYW1tYXIudHh0IikKLWdyYW1tYXIgPSBkcml2ZXIubG9hZF9ncmFtbWFyKGdyYW1tYXJfcGF0aCkKLWRyaXZlciA9IGRyaXZlci5Ecml2ZXIoZ3JhbW1hciwgY29udmVydD1weXRyZWUuY29udmVydCkKLQotZGVmIHBhcnNlX3N0cmluZyhzdHJpbmcpOgotICAgIHJldHVybiBkcml2ZXIucGFyc2Vfc3RyaW5nKHJlZm9ybWF0KHN0cmluZyksIGRlYnVnPVRydWUpCi0KLWRlZiBydW5fYWxsX3Rlc3RzKHRlc3RfbW9kPU5vbmUsIHRlc3RzPU5vbmUpOgotICAgIGlmIHRlc3RzIGlzIE5vbmU6Ci0gICAgICAgIHRlc3RzID0gdW5pdHRlc3QuVGVzdExvYWRlcigpLmxvYWRUZXN0c0Zyb21Nb2R1bGUodGVzdF9tb2QpCi0gICAgdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIodmVyYm9zaXR5PTIpLnJ1bih0ZXN0cykKLQotZGVmIHJlZm9ybWF0KHN0cmluZyk6Ci0gICAgcmV0dXJuIGRlZGVudChzdHJpbmcpICsgdSJcblxuIgotCi1kZWYgZ2V0X3JlZmFjdG9yZXIoZml4ZXJfcGtnPSJsaWIydG8zIiwgZml4ZXJzPU5vbmUsIG9wdGlvbnM9Tm9uZSk6Ci0gICAgIiIiCi0gICAgQSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBSZWZhY3RvcmluZ1Rvb2wgZm9yIHRlc3RzLgotCi0gICAgZml4ZXJzIGlzIGEgbGlzdCBvZiBmaXhlcnMgZm9yIHRoZSBSZWZhY3RvcmluZ1Rvb2wgdG8gdXNlLiBCeSBkZWZhdWx0Ci0gICAgImxpYjJ0bzMuZml4ZXMuKiIgaXMgdXNlZC4gb3B0aW9ucyBpcyBhbiBvcHRpb25hbCBkaWN0aW9uYXJ5IG9mIG9wdGlvbnMgdG8KLSAgICBiZSBwYXNzZWQgdG8gdGhlIFJlZmFjdG9yaW5nVG9vbC4KLSAgICAiIiIKLSAgICBpZiBmaXhlcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgIGZpeGVycyA9IFtmaXhlcl9wa2cgKyAiLmZpeGVzLmZpeF8iICsgZml4IGZvciBmaXggaW4gZml4ZXJzXQotICAgIGVsc2U6Ci0gICAgICAgIGZpeGVycyA9IHJlZmFjdG9yLmdldF9maXhlcnNfZnJvbV9wYWNrYWdlKGZpeGVyX3BrZyArICIuZml4ZXMiKQotICAgIG9wdGlvbnMgPSBvcHRpb25zIG9yIHt9Ci0gICAgcmV0dXJuIHJlZmFjdG9yLlJlZmFjdG9yaW5nVG9vbChmaXhlcnMsIG9wdGlvbnMsIGV4cGxpY2l0PVRydWUpCi0KLWRlZiBhbGxfcHJvamVjdF9maWxlcygpOgotICAgIGZvciBkaXJwYXRoLCBkaXJuYW1lcywgZmlsZW5hbWVzIGluIG9zLndhbGsocHJval9kaXIpOgotICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgotICAgICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoIi5weSIpOgotICAgICAgICAgICAgICAgIHlpZWxkIG9zLnBhdGguam9pbihkaXJwYXRoLCBmaWxlbmFtZSkKLQotVGVzdENhc2UgPSB1bml0dGVzdC5UZXN0Q2FzZQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL3Rlc3RfYWxsX2ZpeGVycy5weSBiL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy90ZXN0X2FsbF9maXhlcnMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NGIzZDkuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL3Rlc3RfYWxsX2ZpeGVycy5weQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSIiIlRlc3RzIHRoYXQgcnVuIGFsbCBmaXhlciBtb2R1bGVzIG92ZXIgYW4gaW5wdXQgc3RyZWFtLgotCi1UaGlzIGhhcyBiZWVuIGJyb2tlbiBvdXQgaW50byBpdHMgb3duIHRlc3QgbW9kdWxlIGJlY2F1c2Ugb2YgaXRzCi1ydW5uaW5nIHRpbWUuCi0iIiIKLSMgQXV0aG9yOiBDb2xsaW4gV2ludGVyCi0KLSMgUHl0aG9uIGltcG9ydHMKLWltcG9ydCB1bml0dGVzdAotCi0jIExvY2FsIGltcG9ydHMKLWZyb20gbGliMnRvMyBpbXBvcnQgcmVmYWN0b3IKLWZyb20gLiBpbXBvcnQgc3VwcG9ydAotCi0KLWNsYXNzIFRlc3RfYWxsKHN1cHBvcnQuVGVzdENhc2UpOgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLnJlZmFjdG9yID0gc3VwcG9ydC5nZXRfcmVmYWN0b3JlcigpCi0KLSAgICBkZWYgdGVzdF9hbGxfcHJvamVjdF9maWxlcyhzZWxmKToKLSAgICAgICAgZm9yIGZpbGVwYXRoIGluIHN1cHBvcnQuYWxsX3Byb2plY3RfZmlsZXMoKToKLSAgICAgICAgICAgIHNlbGYucmVmYWN0b3IucmVmYWN0b3JfZmlsZShmaWxlcGF0aCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weSBiL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU0ODI4MS4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvdGVzdF9maXhlcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0NTQxICswLDAgQEAKLSIiIiBUZXN0IHN1aXRlIGZvciB0aGUgZml4ZXIgbW9kdWxlcyAiIiIKLQotIyBQeXRob24gaW1wb3J0cwotaW1wb3J0IG9zCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gaXRlcnRvb2xzIGltcG9ydCBjaGFpbgotZnJvbSBvcGVyYXRvciBpbXBvcnQgaXRlbWdldHRlcgotCi0jIExvY2FsIGltcG9ydHMKLWZyb20gbGliMnRvMyBpbXBvcnQgcHlncmFtLCBweXRyZWUsIHJlZmFjdG9yLCBmaXhlcl91dGlsCi1mcm9tIGxpYjJ0bzMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLQotCi1jbGFzcyBGaXhlclRlc3RDYXNlKHN1cHBvcnQuVGVzdENhc2UpOgotCi0gICAgIyBPdGhlciB0ZXN0IGNhc2VzIGNhbiBzdWJjbGFzcyB0aGlzIGNsYXNzIGFuZCByZXBsYWNlICJmaXhlcl9wa2ciIHdpdGgKLSAgICAjIHRoZWlyIG93bi4KLSAgICBkZWYgc2V0VXAoc2VsZiwgZml4X2xpc3Q9Tm9uZSwgZml4ZXJfcGtnPSJsaWIydG8zIiwgb3B0aW9ucz1Ob25lKToKLSAgICAgICAgaWYgZml4X2xpc3QgaXMgTm9uZToKLSAgICAgICAgICAgIGZpeF9saXN0ID0gW3NlbGYuZml4ZXJdCi0gICAgICAgIHNlbGYucmVmYWN0b3IgPSBzdXBwb3J0LmdldF9yZWZhY3RvcmVyKGZpeGVyX3BrZywgZml4X2xpc3QsIG9wdGlvbnMpCi0gICAgICAgIHNlbGYuZml4ZXJfbG9nID0gW10KLSAgICAgICAgc2VsZi5maWxlbmFtZSA9IHUiPHN0cmluZz4iCi0KLSAgICAgICAgZm9yIGZpeGVyIGluIGNoYWluKHNlbGYucmVmYWN0b3IucHJlX29yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWZhY3Rvci5wb3N0X29yZGVyKToKLSAgICAgICAgICAgIGZpeGVyLmxvZyA9IHNlbGYuZml4ZXJfbG9nCi0KLSAgICBkZWYgX2NoZWNrKHNlbGYsIGJlZm9yZSwgYWZ0ZXIpOgotICAgICAgICBiZWZvcmUgPSBzdXBwb3J0LnJlZm9ybWF0KGJlZm9yZSkKLSAgICAgICAgYWZ0ZXIgPSBzdXBwb3J0LnJlZm9ybWF0KGFmdGVyKQotICAgICAgICB0cmVlID0gc2VsZi5yZWZhY3Rvci5yZWZhY3Rvcl9zdHJpbmcoYmVmb3JlLCBzZWxmLmZpbGVuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFmdGVyLCB1bmljb2RlKHRyZWUpKQotICAgICAgICByZXR1cm4gdHJlZQotCi0gICAgZGVmIGNoZWNrKHNlbGYsIGJlZm9yZSwgYWZ0ZXIsIGlnbm9yZV93YXJuaW5ncz1GYWxzZSk6Ci0gICAgICAgIHRyZWUgPSBzZWxmLl9jaGVjayhiZWZvcmUsIGFmdGVyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodHJlZS53YXNfY2hhbmdlZCkKLSAgICAgICAgaWYgbm90IGlnbm9yZV93YXJuaW5nczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maXhlcl9sb2csIFtdKQotCi0gICAgZGVmIHdhcm5zKHNlbGYsIGJlZm9yZSwgYWZ0ZXIsIG1lc3NhZ2UsIHVuY2hhbmdlZD1GYWxzZSk6Ci0gICAgICAgIHRyZWUgPSBzZWxmLl9jaGVjayhiZWZvcmUsIGFmdGVyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobWVzc2FnZSBpbiAiIi5qb2luKHNlbGYuZml4ZXJfbG9nKSkKLSAgICAgICAgaWYgbm90IHVuY2hhbmdlZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmVlLndhc19jaGFuZ2VkKQotCi0gICAgZGVmIHdhcm5zX3VuY2hhbmdlZChzZWxmLCBiZWZvcmUsIG1lc3NhZ2UpOgotICAgICAgICBzZWxmLndhcm5zKGJlZm9yZSwgYmVmb3JlLCBtZXNzYWdlLCB1bmNoYW5nZWQ9VHJ1ZSkKLQotICAgIGRlZiB1bmNoYW5nZWQoc2VsZiwgYmVmb3JlLCBpZ25vcmVfd2FybmluZ3M9RmFsc2UpOgotICAgICAgICBzZWxmLl9jaGVjayhiZWZvcmUsIGJlZm9yZSkKLSAgICAgICAgaWYgbm90IGlnbm9yZV93YXJuaW5nczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maXhlcl9sb2csIFtdKQotCi0gICAgZGVmIGFzc2VydF9ydW5zX2FmdGVyKHNlbGYsICpuYW1lcyk6Ci0gICAgICAgIGZpeGVzID0gW3NlbGYuZml4ZXJdCi0gICAgICAgIGZpeGVzLmV4dGVuZChuYW1lcykKLSAgICAgICAgciA9IHN1cHBvcnQuZ2V0X3JlZmFjdG9yZXIoImxpYjJ0bzMiLCBmaXhlcykKLSAgICAgICAgKHByZSwgcG9zdCkgPSByLmdldF9maXhlcnMoKQotICAgICAgICBuID0gImZpeF8iICsgc2VsZi5maXhlcgotICAgICAgICBpZiBwb3N0IGFuZCBwb3N0Wy0xXS5fX2NsYXNzX18uX19tb2R1bGVfXy5lbmRzd2l0aChuKToKLSAgICAgICAgICAgICMgV2UncmUgdGhlIGxhc3QgZml4ZXIgdG8gcnVuCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgcHJlIGFuZCBwcmVbLTFdLl9fY2xhc3NfXy5fX21vZHVsZV9fLmVuZHN3aXRoKG4pIGFuZCBub3QgcG9zdDoKLSAgICAgICAgICAgICMgV2UncmUgdGhlIGxhc3QgaW4gcHJlIGFuZCBwb3N0IGlzIGVtcHR5Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5mYWlsKCJGaXhlciBydW4gb3JkZXIgKCVzKSBpcyBpbmNvcnJlY3Q7ICVzIHNob3VsZCBiZSBsYXN0LiJcCi0gICAgICAgICAgICAgICAlKCIsICIuam9pbihbeC5fX2NsYXNzX18uX19tb2R1bGVfXyBmb3IgeCBpbiAocHJlK3Bvc3QpXSksIG4pKQotCi1jbGFzcyBUZXN0X25lKEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gIm5lIgotCi0gICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJpZiB4IDw+IHk6Ci0gICAgICAgICAgICBwYXNzIiIiCi0KLSAgICAgICAgYSA9ICIiImlmIHggIT0geToKLSAgICAgICAgICAgIHBhc3MiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3Rfbm9fc3BhY2VzKHNlbGYpOgotICAgICAgICBiID0gIiIiaWYgeDw+eToKLSAgICAgICAgICAgIHBhc3MiIiIKLQotICAgICAgICBhID0gIiIiaWYgeCE9eToKLSAgICAgICAgICAgIHBhc3MiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfY2hhaW5lZChzZWxmKToKLSAgICAgICAgYiA9ICIiImlmIHg8Pnk8Pno6Ci0gICAgICAgICAgICBwYXNzIiIiCi0KLSAgICAgICAgYSA9ICIiImlmIHghPXkhPXo6Ci0gICAgICAgICAgICBwYXNzIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotY2xhc3MgVGVzdF9oYXNfa2V5KEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gImhhc19rZXkiCi0KLSAgICBkZWYgdGVzdF8xKHNlbGYpOgotICAgICAgICBiID0gIiIieCA9IGQuaGFzX2tleSgieCIpIG9yIGQuaGFzX2tleSgieSIpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gIngiIGluIGQgb3IgInkiIGluIGQiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMihzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSBhLmIuYy5kLmhhc19rZXkoIngiKSAqKiAzIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gKCJ4IiBpbiBhLmIuYy5kKSAqKiAzIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzMoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ4ID0gYS5iLmhhc19rZXkoMSArIDIpLl9fcmVwcl9fKCkiIiIKLSAgICAgICAgYSA9ICIiInggPSAoMSArIDIgaW4gYS5iKS5fX3JlcHJfXygpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzQoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ4ID0gYS5iLmhhc19rZXkoMSArIDIpLl9fcmVwcl9fKCkgKiogLTMgKiogNCIiIgotICAgICAgICBhID0gIiIieCA9ICgxICsgMiBpbiBhLmIpLl9fcmVwcl9fKCkgKiogLTMgKiogNCIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF81KHNlbGYpOgotICAgICAgICBiID0gIiIieCA9IGEuaGFzX2tleShmIG9yIGcpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gKGYgb3IgZykgaW4gYSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF82KHNlbGYpOgotICAgICAgICBiID0gIiIieCA9IGEgKyBiLmhhc19rZXkoYykiIiIKLSAgICAgICAgYSA9ICIiInggPSBhICsgKGMgaW4gYikiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfNyhzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSBhLmhhc19rZXkobGFtYmRhOiAxMikiIiIKLSAgICAgICAgYSA9ICIiInggPSAobGFtYmRhOiAxMikgaW4gYSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF84KHNlbGYpOgotICAgICAgICBiID0gIiIieCA9IGEuaGFzX2tleShhIGZvciBhIGluIGIpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gKGEgZm9yIGEgaW4gYikgaW4gYSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF85KHNlbGYpOgotICAgICAgICBiID0gIiIiaWYgbm90IGEuaGFzX2tleShiKTogcGFzcyIiIgotICAgICAgICBhID0gIiIiaWYgYiBub3QgaW4gYTogcGFzcyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8xMChzZWxmKToKLSAgICAgICAgYiA9ICIiImlmIG5vdCBhLmhhc19rZXkoYikuX19yZXByX18oKTogcGFzcyIiIgotICAgICAgICBhID0gIiIiaWYgbm90IChiIGluIGEpLl9fcmVwcl9fKCk6IHBhc3MiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMTEoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJpZiBub3QgYS5oYXNfa2V5KGIpICoqIDI6IHBhc3MiIiIKLSAgICAgICAgYSA9ICIiImlmIG5vdCAoYiBpbiBhKSAqKiAyOiBwYXNzIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotY2xhc3MgVGVzdF9hcHBseShGaXhlclRlc3RDYXNlKToKLSAgICBmaXhlciA9ICJhcHBseSIKLQotICAgIGRlZiB0ZXN0XzEoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ4ID0gYXBwbHkoZiwgZyArIGgpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gZigqZyArIGgpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzIoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ5ID0gYXBwbHkoZiwgZywgaCkiIiIKLSAgICAgICAgYSA9ICIiInkgPSBmKCpnLCAqKmgpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzMoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ6ID0gYXBwbHkoZnNbMF0sIGcgb3IgaCwgaCBvciBnKSIiIgotICAgICAgICBhID0gIiIieiA9IGZzWzBdKCpnIG9yIGgsICoqaCBvciBnKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF80KHNlbGYpOgotICAgICAgICBiID0gIiIiYXBwbHkoZiwgKHgsIHkpICsgdCkiIiIKLSAgICAgICAgYSA9ICIiImYoKih4LCB5KSArIHQpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzUoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJhcHBseShmLCBhcmdzLCkiIiIKLSAgICAgICAgYSA9ICIiImYoKmFyZ3MpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzYoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJhcHBseShmLCBhcmdzLCBrd2RzLCkiIiIKLSAgICAgICAgYSA9ICIiImYoKmFyZ3MsICoqa3dkcykiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgIyBUZXN0IHRoYXQgY29tcGxleCBmdW5jdGlvbnMgYXJlIHBhcmVudGhlc2l6ZWQKLQotICAgIGRlZiB0ZXN0X2NvbXBsZXhfMShzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSBhcHBseShmK2csIGFyZ3MpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gKGYrZykoKmFyZ3MpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2NvbXBsZXhfMihzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSBhcHBseShmKmcsIGFyZ3MpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gKGYqZykoKmFyZ3MpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2NvbXBsZXhfMyhzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSBhcHBseShmKipnLCBhcmdzKSIiIgotICAgICAgICBhID0gIiIieCA9IChmKipnKSgqYXJncykiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgIyBCdXQgZG90dGVkIG5hbWVzIGV0Yy4gbm90Ci0KLSAgICBkZWYgdGVzdF9kb3R0ZWRfbmFtZShzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSBhcHBseShmLmcsIGFyZ3MpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gZi5nKCphcmdzKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9zdWJzY3JpcHQoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ4ID0gYXBwbHkoZlt4XSwgYXJncykiIiIKLSAgICAgICAgYSA9ICIiInggPSBmW3hdKCphcmdzKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9jYWxsKHNlbGYpOgotICAgICAgICBiID0gIiIieCA9IGFwcGx5KGYoKSwgYXJncykiIiIKLSAgICAgICAgYSA9ICIiInggPSBmKCkoKmFyZ3MpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICMgRXh0cmVtZSBjYXNlCi0gICAgZGVmIHRlc3RfZXh0cmVtZShzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSBhcHBseShhLmIuYy5kLmUuZiwgYXJncywga3dkcykiIiIKLSAgICAgICAgYSA9ICIiInggPSBhLmIuYy5kLmUuZigqYXJncywgKiprd2RzKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAjIFhYWCBDb21tZW50cyBpbiB3ZWlyZCBwbGFjZXMgc3RpbGwgZ2V0IGxvc3QKLSAgICBkZWYgdGVzdF93ZWlyZF9jb21tZW50cyhzZWxmKToKLSAgICAgICAgYiA9ICIiImFwcGx5KCAgICMgZm9vCi0gICAgICAgICAgZiwgIyBiYXIKLSAgICAgICAgICBhcmdzKSIiIgotICAgICAgICBhID0gIiIiZigqYXJncykiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgIyBUaGVzZSBzaG91bGQgKm5vdCogYmUgdG91Y2hlZAotCi0gICAgZGVmIHRlc3RfdW5jaGFuZ2VkXzEoc2VsZik6Ci0gICAgICAgIHMgPSAiIiJhcHBseSgpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfMihzZWxmKToKLSAgICAgICAgcyA9ICIiImFwcGx5KGYpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfMyhzZWxmKToKLSAgICAgICAgcyA9ICIiImFwcGx5KGYsKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgZGVmIHRlc3RfdW5jaGFuZ2VkXzQoc2VsZik6Ci0gICAgICAgIHMgPSAiIiJhcHBseShmLCBhcmdzLCBrd2RzLCBleHRyYXMpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfNShzZWxmKToKLSAgICAgICAgcyA9ICIiImFwcGx5KGYsICphcmdzLCAqKmt3ZHMpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfNihzZWxmKToKLSAgICAgICAgcyA9ICIiImFwcGx5KGYsICphcmdzKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgZGVmIHRlc3RfdW5jaGFuZ2VkXzcoc2VsZik6Ci0gICAgICAgIHMgPSAiIiJhcHBseShmdW5jPWYsIGFyZ3M9YXJncywga3dkcz1rd2RzKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgZGVmIHRlc3RfdW5jaGFuZ2VkXzgoc2VsZik6Ci0gICAgICAgIHMgPSAiIiJhcHBseShmLCBhcmdzPWFyZ3MsIGt3ZHM9a3dkcykiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgIGRlZiB0ZXN0X3VuY2hhbmdlZF85KHNlbGYpOgotICAgICAgICBzID0gIiIiYXBwbHkoZiwgYXJncywga3dkcz1rd2RzKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgZGVmIHRlc3Rfc3BhY2VfMShzZWxmKToKLSAgICAgICAgYSA9ICIiImFwcGx5KCAgZiwgIGFyZ3MsICAga3dkcykiIiIKLSAgICAgICAgYiA9ICIiImYoKmFyZ3MsICoqa3dkcykiIiIKLSAgICAgICAgc2VsZi5jaGVjayhhLCBiKQotCi0gICAgZGVmIHRlc3Rfc3BhY2VfMihzZWxmKToKLSAgICAgICAgYSA9ICIiImFwcGx5KCAgZiAgLGFyZ3Msa3dkcyAgICkiIiIKLSAgICAgICAgYiA9ICIiImYoKmFyZ3MsICoqa3dkcykiIiIKLSAgICAgICAgc2VsZi5jaGVjayhhLCBiKQotCi1jbGFzcyBUZXN0X2ludGVybihGaXhlclRlc3RDYXNlKToKLSAgICBmaXhlciA9ICJpbnRlcm4iCi0KLSAgICBkZWYgdGVzdF9wcmVmaXhfcHJlc2VydmF0aW9uKHNlbGYpOgotICAgICAgICBiID0gIiIieCA9ICAgaW50ZXJuKCAgYSAgKSIiIgotICAgICAgICBhID0gIiIiaW1wb3J0IHN5c1xueCA9ICAgc3lzLmludGVybiggIGEgICkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJ5ID0gaW50ZXJuKCJiIiAjIHRlc3QKLSAgICAgICAgICAgICAgKSIiIgotICAgICAgICBhID0gIiIiaW1wb3J0IHN5c1xueSA9IHN5cy5pbnRlcm4oImIiICMgdGVzdAotICAgICAgICAgICAgICApIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIieiA9IGludGVybihhK2IrYy5kLCAgICkiIiIKLSAgICAgICAgYSA9ICIiImltcG9ydCBzeXNcbnogPSBzeXMuaW50ZXJuKGErYitjLmQsICAgKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSBpbnRlcm4oYSkiIiIKLSAgICAgICAgYSA9ICIiImltcG9ydCBzeXNcbnggPSBzeXMuaW50ZXJuKGEpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIieiA9IGludGVybihhK2IrYy5kLCkiIiIKLSAgICAgICAgYSA9ICIiImltcG9ydCBzeXNcbnogPSBzeXMuaW50ZXJuKGErYitjLmQsKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiImludGVybigieSVzIiAlIDUpLnJlcGxhY2UoInkiLCAiIikiIiIKLSAgICAgICAgYSA9ICIiImltcG9ydCBzeXNcbnN5cy5pbnRlcm4oInklcyIgJSA1KS5yZXBsYWNlKCJ5IiwgIiIpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICMgVGhlc2Ugc2hvdWxkIG5vdCBiZSByZWZhY3RvcmVkCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6Ci0gICAgICAgIHMgPSAiIiJpbnRlcm4oYT0xKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgICAgIHMgPSAiIiJpbnRlcm4oZiwgZykiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICBzID0gIiIiaW50ZXJuKCpoKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgICAgIHMgPSAiIiJpbnRlcm4oKippKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgICAgIHMgPSAiIiJpbnRlcm4oKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi1jbGFzcyBUZXN0X3JlZHVjZShGaXhlclRlc3RDYXNlKToKLSAgICBmaXhlciA9ICJyZWR1Y2UiCi0KLSAgICBkZWYgdGVzdF9zaW1wbGVfY2FsbChzZWxmKToKLSAgICAgICAgYiA9ICJyZWR1Y2UoYSwgYiwgYykiCi0gICAgICAgIGEgPSAiZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZVxucmVkdWNlKGEsIGIsIGMpIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9idWdfNzI1MyhzZWxmKToKLSAgICAgICAgIyBmaXhfdHVwbGVfcGFyYW1zIHdhcyBiZWluZyBiYWQgYW5kIG9ycGhhbmluZyBub2RlcyBpbiB0aGUgdHJlZS4KLSAgICAgICAgYiA9ICJkZWYgeChhcmcpOiByZWR1Y2Uoc3VtLCBbXSkiCi0gICAgICAgIGEgPSAiZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZVxuZGVmIHgoYXJnKTogcmVkdWNlKHN1bSwgW10pIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9jYWxsX3dpdGhfbGFtYmRhKHNlbGYpOgotICAgICAgICBiID0gInJlZHVjZShsYW1iZGEgeCwgeTogeCArIHksIHNlcSkiCi0gICAgICAgIGEgPSAiZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZVxucmVkdWNlKGxhbWJkYSB4LCB5OiB4ICsgeSwgc2VxKSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdW5jaGFuZ2VkKHNlbGYpOgotICAgICAgICBzID0gInJlZHVjZShhKSIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICBzID0gInJlZHVjZShhLCBiPTQyKSIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICBzID0gInJlZHVjZShhLCBiLCBjLCBkKSIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICBzID0gInJlZHVjZSgqKmMpIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgICAgIHMgPSAicmVkdWNlKCkiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLWNsYXNzIFRlc3RfcHJpbnQoRml4ZXJUZXN0Q2FzZSk6Ci0gICAgZml4ZXIgPSAicHJpbnQiCi0KLSAgICBkZWYgdGVzdF9wcmVmaXhfcHJlc2VydmF0aW9uKHNlbGYpOgotICAgICAgICBiID0gIiIicHJpbnQgMSwgICAxKzEsICAgMSsxKzEiIiIKLSAgICAgICAgYSA9ICIiInByaW50KDEsICAgMSsxLCAgIDErMSsxKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9pZGVtcG90ZW5jeShzZWxmKToKLSAgICAgICAgcyA9ICIiInByaW50KCkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICBzID0gIiIicHJpbnQoJycpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF9pZGVtcG90ZW5jeV9wcmludF9hc19mdW5jdGlvbihzZWxmKToKLSAgICAgICAgc2VsZi5yZWZhY3Rvci5kcml2ZXIuZ3JhbW1hciA9IHB5Z3JhbS5weXRob25fZ3JhbW1hcl9ub19wcmludF9zdGF0ZW1lbnQKLSAgICAgICAgcyA9ICIiInByaW50KDEsIDErMSwgMSsxKzEpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICAgICAgcyA9ICIiInByaW50KCkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICBzID0gIiIicHJpbnQoJycpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF8xKHNlbGYpOgotICAgICAgICBiID0gIiIicHJpbnQgMSwgMSsxLCAxKzErMSIiIgotICAgICAgICBhID0gIiIicHJpbnQoMSwgMSsxLCAxKzErMSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMihzZWxmKToKLSAgICAgICAgYiA9ICIiInByaW50IDEsIDIiIiIKLSAgICAgICAgYSA9ICIiInByaW50KDEsIDIpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzMoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJwcmludCIiIgotICAgICAgICBhID0gIiIicHJpbnQoKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF80KHNlbGYpOgotICAgICAgICAjIGZyb20gYnVnIDMwMDAKLSAgICAgICAgYiA9ICIiInByaW50IHdoYXRldmVyOyBwcmludCIiIgotICAgICAgICBhID0gIiIicHJpbnQod2hhdGV2ZXIpOyBwcmludCgpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzUoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJwcmludDsgcHJpbnQgd2hhdGV2ZXI7IiIiCi0gICAgICAgIGEgPSAiIiJwcmludCgpOyBwcmludCh3aGF0ZXZlcik7IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3R1cGxlKHNlbGYpOgotICAgICAgICBiID0gIiIicHJpbnQgKGEsIGIsIGMpIiIiCi0gICAgICAgIGEgPSAiIiJwcmludCgoYSwgYiwgYykpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICMgdHJhaWxpbmcgY29tbWFzCi0KLSAgICBkZWYgdGVzdF90cmFpbGluZ19jb21tYV8xKHNlbGYpOgotICAgICAgICBiID0gIiIicHJpbnQgMSwgMiwgMywiIiIKLSAgICAgICAgYSA9ICIiInByaW50KDEsIDIsIDMsIGVuZD0nICcpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3RyYWlsaW5nX2NvbW1hXzIoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJwcmludCAxLCAyLCIiIgotICAgICAgICBhID0gIiIicHJpbnQoMSwgMiwgZW5kPScgJykiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdHJhaWxpbmdfY29tbWFfMyhzZWxmKToKLSAgICAgICAgYiA9ICIiInByaW50IDEsIiIiCi0gICAgICAgIGEgPSAiIiJwcmludCgxLCBlbmQ9JyAnKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAjID4+IHN0dWZmCi0KLSAgICBkZWYgdGVzdF92YXJnc193aXRob3V0X3RyYWlsaW5nX2NvbW1hKHNlbGYpOgotICAgICAgICBiID0gIiIicHJpbnQgPj5zeXMuc3RkZXJyLCAxLCAyLCAzIiIiCi0gICAgICAgIGEgPSAiIiJwcmludCgxLCAyLCAzLCBmaWxlPXN5cy5zdGRlcnIpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3dpdGhfdHJhaWxpbmdfY29tbWEoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJwcmludCA+PnN5cy5zdGRlcnIsIDEsIDIsIiIiCi0gICAgICAgIGEgPSAiIiJwcmludCgxLCAyLCBlbmQ9JyAnLCBmaWxlPXN5cy5zdGRlcnIpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X25vX3RyYWlsaW5nX2NvbW1hKHNlbGYpOgotICAgICAgICBiID0gIiIicHJpbnQgPj5zeXMuc3RkZXJyLCAxKzEiIiIKLSAgICAgICAgYSA9ICIiInByaW50KDErMSwgZmlsZT1zeXMuc3RkZXJyKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9zcGFjZXNfYmVmb3JlX2ZpbGUoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJwcmludCA+PiAgc3lzLnN0ZGVyciIiIgotICAgICAgICBhID0gIiIicHJpbnQoZmlsZT1zeXMuc3RkZXJyKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF93aXRoX2Z1dHVyZV9wcmludF9mdW5jdGlvbihzZWxmKToKLSAgICAgICAgcyA9ICJmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uXG4iIFwKLSAgICAgICAgICAgICJwcmludCgnSGFpIScsIGVuZD0nICcpIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgICAgIGIgPSAicHJpbnQgJ0hlbGxvLCB3b3JsZCEnIgotICAgICAgICBhID0gInByaW50KCdIZWxsbywgd29ybGQhJykiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotCi1jbGFzcyBUZXN0X2V4ZWMoRml4ZXJUZXN0Q2FzZSk6Ci0gICAgZml4ZXIgPSAiZXhlYyIKLQotICAgIGRlZiB0ZXN0X3ByZWZpeF9wcmVzZXJ2YXRpb24oc2VsZik6Ci0gICAgICAgIGIgPSAiIiIgIGV4ZWMgY29kZSBpbiBuczEsICAgbnMyIiIiCi0gICAgICAgIGEgPSAiIiIgIGV4ZWMoY29kZSwgbnMxLCAgIG5zMikiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJleGVjIGNvZGUiIiIKLSAgICAgICAgYSA9ICIiImV4ZWMoY29kZSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3Rfd2l0aF9nbG9iYWxzKHNlbGYpOgotICAgICAgICBiID0gIiIiZXhlYyBjb2RlIGluIG5zIiIiCi0gICAgICAgIGEgPSAiIiJleGVjKGNvZGUsIG5zKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF93aXRoX2dsb2JhbHNfbG9jYWxzKHNlbGYpOgotICAgICAgICBiID0gIiIiZXhlYyBjb2RlIGluIG5zMSwgbnMyIiIiCi0gICAgICAgIGEgPSAiIiJleGVjKGNvZGUsIG5zMSwgbnMyKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9jb21wbGV4XzEoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJleGVjIChhLmIoKSkgaW4gbnMiIiIKLSAgICAgICAgYSA9ICIiImV4ZWMoKGEuYigpKSwgbnMpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2NvbXBsZXhfMihzZWxmKToKLSAgICAgICAgYiA9ICIiImV4ZWMgYS5iKCkgKyBjIGluIG5zIiIiCi0gICAgICAgIGEgPSAiIiJleGVjKGEuYigpICsgYywgbnMpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICMgVGhlc2Ugc2hvdWxkIG5vdCBiZSB0b3VjaGVkCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfMShzZWxmKToKLSAgICAgICAgcyA9ICIiImV4ZWMoY29kZSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgIGRlZiB0ZXN0X3VuY2hhbmdlZF8yKHNlbGYpOgotICAgICAgICBzID0gIiIiZXhlYyAoY29kZSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgIGRlZiB0ZXN0X3VuY2hhbmdlZF8zKHNlbGYpOgotICAgICAgICBzID0gIiIiZXhlYyhjb2RlLCBucykiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgIGRlZiB0ZXN0X3VuY2hhbmdlZF80KHNlbGYpOgotICAgICAgICBzID0gIiIiZXhlYyhjb2RlLCBuczEsIG5zMikiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotY2xhc3MgVGVzdF9yZXByKEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gInJlcHIiCi0KLSAgICBkZWYgdGVzdF9wcmVmaXhfcHJlc2VydmF0aW9uKHNlbGYpOgotICAgICAgICBiID0gIiIieCA9ICAgYDEgKyAyYCIiIgotICAgICAgICBhID0gIiIieCA9ICAgcmVwcigxICsgMikiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3Rfc2ltcGxlXzEoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ4ID0gYDEgKyAyYCIiIgotICAgICAgICBhID0gIiIieCA9IHJlcHIoMSArIDIpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3NpbXBsZV8yKHNlbGYpOgotICAgICAgICBiID0gIiIieSA9IGB4YCIiIgotICAgICAgICBhID0gIiIieSA9IHJlcHIoeCkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfY29tcGxleChzZWxmKToKLSAgICAgICAgYiA9ICIiInogPSBgeWAuX19yZXByX18oKSIiIgotICAgICAgICBhID0gIiIieiA9IHJlcHIoeSkuX19yZXByX18oKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF90dXBsZShzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSBgMSwgMiwgM2AiIiIKLSAgICAgICAgYSA9ICIiInggPSByZXByKCgxLCAyLCAzKSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfbmVzdGVkKHNlbGYpOgotICAgICAgICBiID0gIiIieCA9IGAxICsgYDJgYCIiIgotICAgICAgICBhID0gIiIieCA9IHJlcHIoMSArIHJlcHIoMikpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X25lc3RlZF90dXBsZXMoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ4ID0gYDEsIDIgKyBgMywgNGBgIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gcmVwcigoMSwgMiArIHJlcHIoKDMsIDQpKSkpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotY2xhc3MgVGVzdF9leGNlcHQoRml4ZXJUZXN0Q2FzZSk6Ci0gICAgZml4ZXIgPSAiZXhjZXB0IgotCi0gICAgZGVmIHRlc3RfcHJlZml4X3ByZXNlcnZhdGlvbihzZWxmKToKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdCAoUnVudGltZUVycm9yLCBJbXBvcnRFcnJvciksICAgIGU6Ci0gICAgICAgICAgICAgICAgcGFzcyIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZXhjZXB0IChSdW50aW1lRXJyb3IsIEltcG9ydEVycm9yKSBhcyAgICBlOgotICAgICAgICAgICAgICAgIHBhc3MiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZXhjZXB0IEZvbywgZToKLSAgICAgICAgICAgICAgICBwYXNzIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQgRm9vIGFzIGU6Ci0gICAgICAgICAgICAgICAgcGFzcyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9zaW1wbGVfbm9fc3BhY2VfYmVmb3JlX3RhcmdldChzZWxmKToKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdCBGb28sZToKLSAgICAgICAgICAgICAgICBwYXNzIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQgRm9vIGFzIGU6Ci0gICAgICAgICAgICAgICAgcGFzcyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF90dXBsZV91bnBhY2soc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIGRlZiBmb28oKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCAoZiwgZSk6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MiIiIKLQotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICBkZWYgZm9vKCk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyB4eHhfdG9kb19jaGFuZ2VtZToKLSAgICAgICAgICAgICAgICAgICAgKGYsIGUpID0geHh4X3RvZG9fY2hhbmdlbWUuYXJncwotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfbXVsdGlfY2xhc3Moc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQgKFJ1bnRpbWVFcnJvciwgSW1wb3J0RXJyb3IpLCBlOgotICAgICAgICAgICAgICAgIHBhc3MiIiIKLQotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZXhjZXB0IChSdW50aW1lRXJyb3IsIEltcG9ydEVycm9yKSBhcyBlOgotICAgICAgICAgICAgICAgIHBhc3MiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfbGlzdF91bnBhY2soc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBbYSwgYl06Ci0gICAgICAgICAgICAgICAgcGFzcyIiIgotCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIHh4eF90b2RvX2NoYW5nZW1lOgotICAgICAgICAgICAgICAgIFthLCBiXSA9IHh4eF90b2RvX2NoYW5nZW1lLmFyZ3MKLSAgICAgICAgICAgICAgICBwYXNzIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3dlaXJkX3RhcmdldF8xKHNlbGYpOgotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZFs1XToKLSAgICAgICAgICAgICAgICBwYXNzIiIiCi0KLSAgICAgICAgYSA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgeHh4X3RvZG9fY2hhbmdlbWU6Ci0gICAgICAgICAgICAgICAgZFs1XSA9IHh4eF90b2RvX2NoYW5nZW1lCi0gICAgICAgICAgICAgICAgcGFzcyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF93ZWlyZF90YXJnZXRfMihzZWxmKToKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGEuZm9vOgotICAgICAgICAgICAgICAgIHBhc3MiIiIKLQotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyB4eHhfdG9kb19jaGFuZ2VtZToKLSAgICAgICAgICAgICAgICBhLmZvbyA9IHh4eF90b2RvX2NoYW5nZW1lCi0gICAgICAgICAgICAgICAgcGFzcyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF93ZWlyZF90YXJnZXRfMyhzZWxmKToKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGEoKS5mb286Ci0gICAgICAgICAgICAgICAgcGFzcyIiIgotCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIHh4eF90b2RvX2NoYW5nZW1lOgotICAgICAgICAgICAgICAgIGEoKS5mb28gPSB4eHhfdG9kb19jaGFuZ2VtZQotICAgICAgICAgICAgICAgIHBhc3MiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfYmFyZV9leGNlcHQoc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBhOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBwYXNzIiIiCi0KLSAgICAgICAgYSA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgYToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgcGFzcyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9iYXJlX2V4Y2VwdF9hbmRfZWxzZV9maW5hbGx5KHNlbGYpOgotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgYToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHBhc3MiIiIKLQotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBhOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgcGFzcyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9tdWx0aV9maXhlZF9leGNlcHRzX2JlZm9yZV9iYXJlX2V4Y2VwdChzZWxmKToKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGI6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgYToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgcGFzcyIiIgotCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGI6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBhOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBwYXNzIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X29uZV9saW5lX3N1aXRlcyhzZWxmKToKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgdHJ5OiByYWlzZSBUeXBlRXJyb3IKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIHRyeTogcmFpc2UgVHlwZUVycm9yCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZTogcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZTogcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgdHJ5OiByYWlzZSBUeXBlRXJyb3IKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIGU6IHBhc3MKLSAgICAgICAgICAgICIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICB0cnk6IHJhaXNlIFR5cGVFcnJvcgotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOiBwYXNzCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICB0cnk6IHJhaXNlIFR5cGVFcnJvcgotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZTogcGFzcwotICAgICAgICAgICAgZWxzZTogZnVuY3Rpb24oKQotICAgICAgICAgICAgZmluYWxseTogZG9uZSgpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgYSA9ICIiIgotICAgICAgICAgICAgdHJ5OiByYWlzZSBUeXBlRXJyb3IKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZTogcGFzcwotICAgICAgICAgICAgZWxzZTogZnVuY3Rpb24oKQotICAgICAgICAgICAgZmluYWxseTogZG9uZSgpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgIyBUaGVzZSBzaG91bGQgbm90IGJlIHRvdWNoZWQ6Ci0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfMShzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBwYXNzIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfMihzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgcGFzcyIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgZGVmIHRlc3RfdW5jaGFuZ2VkXzMoc2VsZik6Ci0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQgKEV4Y2VwdGlvbiwgU3lzdGVtRXhpdCk6Ci0gICAgICAgICAgICAgICAgcGFzcyIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi1jbGFzcyBUZXN0X3JhaXNlKEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gInJhaXNlIgotCi0gICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJyYWlzZSBFeGNlcHRpb24sIDUiIiIKLSAgICAgICAgYSA9ICIiInJhaXNlIEV4Y2VwdGlvbig1KSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9wcmVmaXhfcHJlc2VydmF0aW9uKHNlbGYpOgotICAgICAgICBiID0gIiIicmFpc2UgRXhjZXB0aW9uLDUiIiIKLSAgICAgICAgYSA9ICIiInJhaXNlIEV4Y2VwdGlvbig1KSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInJhaXNlICAgRXhjZXB0aW9uLCAgICA1IiIiCi0gICAgICAgIGEgPSAiIiJyYWlzZSAgIEV4Y2VwdGlvbig1KSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF93aXRoX2NvbW1lbnRzKHNlbGYpOgotICAgICAgICBiID0gIiIicmFpc2UgRXhjZXB0aW9uLCA1ICMgZm9vIiIiCi0gICAgICAgIGEgPSAiIiJyYWlzZSBFeGNlcHRpb24oNSkgIyBmb28iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJyYWlzZSBFLCAoNSwgNikgJSAoYSwgYikgIyBmb28iIiIKLSAgICAgICAgYSA9ICIiInJhaXNlIEUoKDUsIDYpICUgKGEsIGIpKSAjIGZvbyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiImRlZiBmb28oKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uLCA1LCA2ICMgZm9vIiIiCi0gICAgICAgIGEgPSAiIiJkZWYgZm9vKCk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbig1KS53aXRoX3RyYWNlYmFjayg2KSAjIGZvbyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9Ob25lX3ZhbHVlKHNlbGYpOgotICAgICAgICBiID0gIiIicmFpc2UgRXhjZXB0aW9uKDUpLCBOb25lLCB0YiIiIgotICAgICAgICBhID0gIiIicmFpc2UgRXhjZXB0aW9uKDUpLndpdGhfdHJhY2ViYWNrKHRiKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF90dXBsZV92YWx1ZShzZWxmKToKLSAgICAgICAgYiA9ICIiInJhaXNlIEV4Y2VwdGlvbiwgKDUsIDYsIDcpIiIiCi0gICAgICAgIGEgPSAiIiJyYWlzZSBFeGNlcHRpb24oNSwgNiwgNykiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdHVwbGVfZGV0ZWN0aW9uKHNlbGYpOgotICAgICAgICBiID0gIiIicmFpc2UgRSwgKDUsIDYpICUgKGEsIGIpIiIiCi0gICAgICAgIGEgPSAiIiJyYWlzZSBFKCg1LCA2KSAlIChhLCBiKSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdHVwbGVfZXhjXzEoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJyYWlzZSAoKChFMSwgRTIpLCBFMyksIEU0KSwgViIiIgotICAgICAgICBhID0gIiIicmFpc2UgRTEoVikiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdHVwbGVfZXhjXzIoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJyYWlzZSAoRTEsIChFMiwgRTMpLCBFNCksIFYiIiIKLSAgICAgICAgYSA9ICIiInJhaXNlIEUxKFYpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICMgVGhlc2Ugc2hvdWxkIHByb2R1Y2UgYSB3YXJuaW5nCi0KLSAgICBkZWYgdGVzdF9zdHJpbmdfZXhjKHNlbGYpOgotICAgICAgICBzID0gIiIicmFpc2UgJ2ZvbyciIiIKLSAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgIlB5dGhvbiAzIGRvZXMgbm90IHN1cHBvcnQgc3RyaW5nIGV4Y2VwdGlvbnMiKQotCi0gICAgZGVmIHRlc3Rfc3RyaW5nX2V4Y192YWwoc2VsZik6Ci0gICAgICAgIHMgPSAiIiJyYWlzZSAiZm9vIiwgNSIiIgotICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCAiUHl0aG9uIDMgZG9lcyBub3Qgc3VwcG9ydCBzdHJpbmcgZXhjZXB0aW9ucyIpCi0KLSAgICBkZWYgdGVzdF9zdHJpbmdfZXhjX3ZhbF90YihzZWxmKToKLSAgICAgICAgcyA9ICIiInJhaXNlICJmb28iLCA1LCA2IiIiCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsICJQeXRob24gMyBkb2VzIG5vdCBzdXBwb3J0IHN0cmluZyBleGNlcHRpb25zIikKLQotICAgICMgVGhlc2Ugc2hvdWxkIHJlc3VsdCBpbiB0cmFjZWJhY2stYXNzaWdubWVudAotCi0gICAgZGVmIHRlc3RfdGJfMShzZWxmKToKLSAgICAgICAgYiA9ICIiImRlZiBmb28oKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uLCA1LCA2IiIiCi0gICAgICAgIGEgPSAiIiJkZWYgZm9vKCk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbig1KS53aXRoX3RyYWNlYmFjayg2KSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF90Yl8yKHNlbGYpOgotICAgICAgICBiID0gIiIiZGVmIGZvbygpOgotICAgICAgICAgICAgICAgICAgICBhID0gNQotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24sIDUsIDYKLSAgICAgICAgICAgICAgICAgICAgYiA9IDYiIiIKLSAgICAgICAgYSA9ICIiImRlZiBmb28oKToKLSAgICAgICAgICAgICAgICAgICAgYSA9IDUKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKDUpLndpdGhfdHJhY2ViYWNrKDYpCi0gICAgICAgICAgICAgICAgICAgIGIgPSA2IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3RiXzMoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJkZWYgZm9vKCk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbiw1LDYiIiIKLSAgICAgICAgYSA9ICIiImRlZiBmb28oKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKDUpLndpdGhfdHJhY2ViYWNrKDYpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3RiXzQoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJkZWYgZm9vKCk6Ci0gICAgICAgICAgICAgICAgICAgIGEgPSA1Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbiw1LDYKLSAgICAgICAgICAgICAgICAgICAgYiA9IDYiIiIKLSAgICAgICAgYSA9ICIiImRlZiBmb28oKToKLSAgICAgICAgICAgICAgICAgICAgYSA9IDUKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKDUpLndpdGhfdHJhY2ViYWNrKDYpCi0gICAgICAgICAgICAgICAgICAgIGIgPSA2IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3RiXzUoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJkZWYgZm9vKCk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbiwgKDUsIDYsIDcpLCA2IiIiCi0gICAgICAgIGEgPSAiIiJkZWYgZm9vKCk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbig1LCA2LCA3KS53aXRoX3RyYWNlYmFjayg2KSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF90Yl82KHNlbGYpOgotICAgICAgICBiID0gIiIiZGVmIGZvbygpOgotICAgICAgICAgICAgICAgICAgICBhID0gNQotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24sICg1LCA2LCA3KSwgNgotICAgICAgICAgICAgICAgICAgICBiID0gNiIiIgotICAgICAgICBhID0gIiIiZGVmIGZvbygpOgotICAgICAgICAgICAgICAgICAgICBhID0gNQotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oNSwgNiwgNykud2l0aF90cmFjZWJhY2soNikKLSAgICAgICAgICAgICAgICAgICAgYiA9IDYiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi1jbGFzcyBUZXN0X3Rocm93KEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gInRocm93IgotCi0gICAgZGVmIHRlc3RfMShzZWxmKToKLSAgICAgICAgYiA9ICIiImcudGhyb3coRXhjZXB0aW9uLCA1KSIiIgotICAgICAgICBhID0gIiIiZy50aHJvdyhFeGNlcHRpb24oNSkpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzIoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJnLnRocm93KEV4Y2VwdGlvbiw1KSIiIgotICAgICAgICBhID0gIiIiZy50aHJvdyhFeGNlcHRpb24oNSkpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzMoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJnLnRocm93KEV4Y2VwdGlvbiwgKDUsIDYsIDcpKSIiIgotICAgICAgICBhID0gIiIiZy50aHJvdyhFeGNlcHRpb24oNSwgNiwgNykpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzQoc2VsZik6Ci0gICAgICAgIGIgPSAiIiI1ICsgZy50aHJvdyhFeGNlcHRpb24sIDUpIiIiCi0gICAgICAgIGEgPSAiIiI1ICsgZy50aHJvdyhFeGNlcHRpb24oNSkpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICMgVGhlc2Ugc2hvdWxkIHByb2R1Y2Ugd2FybmluZ3MKLQotICAgIGRlZiB0ZXN0X3dhcm5fMShzZWxmKToKLSAgICAgICAgcyA9ICIiImcudGhyb3coImZvbyIpIiIiCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsICJQeXRob24gMyBkb2VzIG5vdCBzdXBwb3J0IHN0cmluZyBleGNlcHRpb25zIikKLQotICAgIGRlZiB0ZXN0X3dhcm5fMihzZWxmKToKLSAgICAgICAgcyA9ICIiImcudGhyb3coImZvbyIsIDUpIiIiCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsICJQeXRob24gMyBkb2VzIG5vdCBzdXBwb3J0IHN0cmluZyBleGNlcHRpb25zIikKLQotICAgIGRlZiB0ZXN0X3dhcm5fMyhzZWxmKToKLSAgICAgICAgcyA9ICIiImcudGhyb3coImZvbyIsIDUsIDYpIiIiCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsICJQeXRob24gMyBkb2VzIG5vdCBzdXBwb3J0IHN0cmluZyBleGNlcHRpb25zIikKLQotICAgICMgVGhlc2Ugc2hvdWxkIG5vdCBiZSB0b3VjaGVkCi0KLSAgICBkZWYgdGVzdF91bnRvdWNoZWRfMShzZWxmKToKLSAgICAgICAgcyA9ICIiImcudGhyb3coRXhjZXB0aW9uKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgZGVmIHRlc3RfdW50b3VjaGVkXzIoc2VsZik6Ci0gICAgICAgIHMgPSAiIiJnLnRocm93KEV4Y2VwdGlvbig1LCA2KSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgIGRlZiB0ZXN0X3VudG91Y2hlZF8zKHNlbGYpOgotICAgICAgICBzID0gIiIiNSArIGcudGhyb3coRXhjZXB0aW9uKDUsIDYpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgIyBUaGVzZSBzaG91bGQgcmVzdWx0IGluIHRyYWNlYmFjay1hc3NpZ25tZW50Ci0KLSAgICBkZWYgdGVzdF90Yl8xKHNlbGYpOgotICAgICAgICBiID0gIiIiZGVmIGZvbygpOgotICAgICAgICAgICAgICAgICAgICBnLnRocm93KEV4Y2VwdGlvbiwgNSwgNikiIiIKLSAgICAgICAgYSA9ICIiImRlZiBmb28oKToKLSAgICAgICAgICAgICAgICAgICAgZy50aHJvdyhFeGNlcHRpb24oNSkud2l0aF90cmFjZWJhY2soNikpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3RiXzIoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJkZWYgZm9vKCk6Ci0gICAgICAgICAgICAgICAgICAgIGEgPSA1Ci0gICAgICAgICAgICAgICAgICAgIGcudGhyb3coRXhjZXB0aW9uLCA1LCA2KQotICAgICAgICAgICAgICAgICAgICBiID0gNiIiIgotICAgICAgICBhID0gIiIiZGVmIGZvbygpOgotICAgICAgICAgICAgICAgICAgICBhID0gNQotICAgICAgICAgICAgICAgICAgICBnLnRocm93KEV4Y2VwdGlvbig1KS53aXRoX3RyYWNlYmFjayg2KSkKLSAgICAgICAgICAgICAgICAgICAgYiA9IDYiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdGJfMyhzZWxmKToKLSAgICAgICAgYiA9ICIiImRlZiBmb28oKToKLSAgICAgICAgICAgICAgICAgICAgZy50aHJvdyhFeGNlcHRpb24sNSw2KSIiIgotICAgICAgICBhID0gIiIiZGVmIGZvbygpOgotICAgICAgICAgICAgICAgICAgICBnLnRocm93KEV4Y2VwdGlvbig1KS53aXRoX3RyYWNlYmFjayg2KSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdGJfNChzZWxmKToKLSAgICAgICAgYiA9ICIiImRlZiBmb28oKToKLSAgICAgICAgICAgICAgICAgICAgYSA9IDUKLSAgICAgICAgICAgICAgICAgICAgZy50aHJvdyhFeGNlcHRpb24sNSw2KQotICAgICAgICAgICAgICAgICAgICBiID0gNiIiIgotICAgICAgICBhID0gIiIiZGVmIGZvbygpOgotICAgICAgICAgICAgICAgICAgICBhID0gNQotICAgICAgICAgICAgICAgICAgICBnLnRocm93KEV4Y2VwdGlvbig1KS53aXRoX3RyYWNlYmFjayg2KSkKLSAgICAgICAgICAgICAgICAgICAgYiA9IDYiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdGJfNShzZWxmKToKLSAgICAgICAgYiA9ICIiImRlZiBmb28oKToKLSAgICAgICAgICAgICAgICAgICAgZy50aHJvdyhFeGNlcHRpb24sICg1LCA2LCA3KSwgNikiIiIKLSAgICAgICAgYSA9ICIiImRlZiBmb28oKToKLSAgICAgICAgICAgICAgICAgICAgZy50aHJvdyhFeGNlcHRpb24oNSwgNiwgNykud2l0aF90cmFjZWJhY2soNikpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3RiXzYoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJkZWYgZm9vKCk6Ci0gICAgICAgICAgICAgICAgICAgIGEgPSA1Ci0gICAgICAgICAgICAgICAgICAgIGcudGhyb3coRXhjZXB0aW9uLCAoNSwgNiwgNyksIDYpCi0gICAgICAgICAgICAgICAgICAgIGIgPSA2IiIiCi0gICAgICAgIGEgPSAiIiJkZWYgZm9vKCk6Ci0gICAgICAgICAgICAgICAgICAgIGEgPSA1Ci0gICAgICAgICAgICAgICAgICAgIGcudGhyb3coRXhjZXB0aW9uKDUsIDYsIDcpLndpdGhfdHJhY2ViYWNrKDYpKQotICAgICAgICAgICAgICAgICAgICBiID0gNiIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF90Yl83KHNlbGYpOgotICAgICAgICBiID0gIiIiZGVmIGZvbygpOgotICAgICAgICAgICAgICAgICAgICBhICsgZy50aHJvdyhFeGNlcHRpb24sIDUsIDYpIiIiCi0gICAgICAgIGEgPSAiIiJkZWYgZm9vKCk6Ci0gICAgICAgICAgICAgICAgICAgIGEgKyBnLnRocm93KEV4Y2VwdGlvbig1KS53aXRoX3RyYWNlYmFjayg2KSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdGJfOChzZWxmKToKLSAgICAgICAgYiA9ICIiImRlZiBmb28oKToKLSAgICAgICAgICAgICAgICAgICAgYSA9IDUKLSAgICAgICAgICAgICAgICAgICAgYSArIGcudGhyb3coRXhjZXB0aW9uLCA1LCA2KQotICAgICAgICAgICAgICAgICAgICBiID0gNiIiIgotICAgICAgICBhID0gIiIiZGVmIGZvbygpOgotICAgICAgICAgICAgICAgICAgICBhID0gNQotICAgICAgICAgICAgICAgICAgICBhICsgZy50aHJvdyhFeGNlcHRpb24oNSkud2l0aF90cmFjZWJhY2soNikpCi0gICAgICAgICAgICAgICAgICAgIGIgPSA2IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotY2xhc3MgVGVzdF9sb25nKEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gImxvbmciCi0KLSAgICBkZWYgdGVzdF8xKHNlbGYpOgotICAgICAgICBiID0gIiIieCA9IGxvbmcoeCkiIiIKLSAgICAgICAgYSA9ICIiInggPSBpbnQoeCkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMihzZWxmKToKLSAgICAgICAgYiA9ICIiInkgPSBpc2luc3RhbmNlKHgsIGxvbmcpIiIiCi0gICAgICAgIGEgPSAiIiJ5ID0gaXNpbnN0YW5jZSh4LCBpbnQpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzMoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ6ID0gdHlwZSh4KSBpbiAoaW50LCBsb25nKSIiIgotICAgICAgICBhID0gIiIieiA9IHR5cGUoeCkgaW4gKGludCwgaW50KSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6Ci0gICAgICAgIHMgPSAiIiJsb25nID0gVHJ1ZSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgICAgIHMgPSAiIiJzLmxvbmcgPSBUcnVlIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICAgICAgcyA9ICIiImRlZiBsb25nKCk6IHBhc3MiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICBzID0gIiIiY2xhc3MgbG9uZygpOiBwYXNzIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICAgICAgcyA9ICIiImRlZiBmKGxvbmcpOiBwYXNzIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICAgICAgcyA9ICIiImRlZiBmKGcsIGxvbmcpOiBwYXNzIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICAgICAgcyA9ICIiImRlZiBmKHgsIGxvbmc9VHJ1ZSk6IHBhc3MiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgIGRlZiB0ZXN0X3ByZWZpeF9wcmVzZXJ2YXRpb24oc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ4ID0gICBsb25nKCAgeCAgKSIiIgotICAgICAgICBhID0gIiIieCA9ICAgaW50KCAgeCAgKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLQotY2xhc3MgVGVzdF9leGVjZmlsZShGaXhlclRlc3RDYXNlKToKLSAgICBmaXhlciA9ICJleGVjZmlsZSIKLQotICAgIGRlZiB0ZXN0X2NvbnZlcnNpb24oc2VsZik6Ci0gICAgICAgIGIgPSAiIiJleGVjZmlsZSgiZm4iKSIiIgotICAgICAgICBhID0gIiIiZXhlYyhjb21waWxlKG9wZW4oImZuIikucmVhZCgpLCAiZm4iLCAnZXhlYycpKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiImV4ZWNmaWxlKCJmbiIsIGdsb2IpIiIiCi0gICAgICAgIGEgPSAiIiJleGVjKGNvbXBpbGUob3BlbigiZm4iKS5yZWFkKCksICJmbiIsICdleGVjJyksIGdsb2IpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiZXhlY2ZpbGUoImZuIiwgZ2xvYiwgbG9jKSIiIgotICAgICAgICBhID0gIiIiZXhlYyhjb21waWxlKG9wZW4oImZuIikucmVhZCgpLCAiZm4iLCAnZXhlYycpLCBnbG9iLCBsb2MpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiZXhlY2ZpbGUoImZuIiwgZ2xvYmFscz1nbG9iKSIiIgotICAgICAgICBhID0gIiIiZXhlYyhjb21waWxlKG9wZW4oImZuIikucmVhZCgpLCAiZm4iLCAnZXhlYycpLCBnbG9iYWxzPWdsb2IpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiZXhlY2ZpbGUoImZuIiwgbG9jYWxzPWxvYykiIiIKLSAgICAgICAgYSA9ICIiImV4ZWMoY29tcGlsZShvcGVuKCJmbiIpLnJlYWQoKSwgImZuIiwgJ2V4ZWMnKSwgbG9jYWxzPWxvYykiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJleGVjZmlsZSgiZm4iLCBnbG9iYWxzPWdsb2IsIGxvY2Fscz1sb2MpIiIiCi0gICAgICAgIGEgPSAiIiJleGVjKGNvbXBpbGUob3BlbigiZm4iKS5yZWFkKCksICJmbiIsICdleGVjJyksIGdsb2JhbHM9Z2xvYiwgbG9jYWxzPWxvYykiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3Rfc3BhY2luZyhzZWxmKToKLSAgICAgICAgYiA9ICIiImV4ZWNmaWxlKCAiZm4iICkiIiIKLSAgICAgICAgYSA9ICIiImV4ZWMoY29tcGlsZShvcGVuKCAiZm4iICkucmVhZCgpLCAiZm4iLCAnZXhlYycpKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiImV4ZWNmaWxlKCJmbiIsICBnbG9iYWxzID0gZ2xvYikiIiIKLSAgICAgICAgYSA9ICIiImV4ZWMoY29tcGlsZShvcGVuKCJmbiIpLnJlYWQoKSwgImZuIiwgJ2V4ZWMnKSwgIGdsb2JhbHMgPSBnbG9iKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLQotY2xhc3MgVGVzdF9pc2luc3RhbmNlKEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gImlzaW5zdGFuY2UiCi0KLSAgICBkZWYgdGVzdF9yZW1vdmVfbXVsdGlwbGVfaXRlbXMoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJpc2luc3RhbmNlKHgsIChpbnQsIGludCwgaW50KSkiIiIKLSAgICAgICAgYSA9ICIiImlzaW5zdGFuY2UoeCwgaW50KSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiImlzaW5zdGFuY2UoeCwgKGludCwgZmxvYXQsIGludCwgaW50LCBmbG9hdCkpIiIiCi0gICAgICAgIGEgPSAiIiJpc2luc3RhbmNlKHgsIChpbnQsIGZsb2F0KSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJpc2luc3RhbmNlKHgsIChpbnQsIGZsb2F0LCBpbnQsIGludCwgZmxvYXQsIHN0cikpIiIiCi0gICAgICAgIGEgPSAiIiJpc2luc3RhbmNlKHgsIChpbnQsIGZsb2F0LCBzdHIpKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiImlzaW5zdGFuY2UoZm9vKCkgKyBiYXIoKSwgKHgoKSwgeSgpLCB4KCksIGludCwgaW50KSkiIiIKLSAgICAgICAgYSA9ICIiImlzaW5zdGFuY2UoZm9vKCkgKyBiYXIoKSwgKHgoKSwgeSgpLCB4KCksIGludCkpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3ByZWZpeF9wcmVzZXJ2YXRpb24oc2VsZik6Ci0gICAgICAgIGIgPSAiIiJpZiAgICBpc2luc3RhbmNlKCAgZm9vKCksICggIGJhciwgYmFyLCBiYXogKSkgOiBwYXNzIiIiCi0gICAgICAgIGEgPSAiIiJpZiAgICBpc2luc3RhbmNlKCAgZm9vKCksICggIGJhciwgYmF6ICkpIDogcGFzcyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6Ci0gICAgICAgIHNlbGYudW5jaGFuZ2VkKCJpc2luc3RhbmNlKHgsIChzdHIsIGludCkpIikKLQotY2xhc3MgVGVzdF9kaWN0KEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gImRpY3QiCi0KLSAgICBkZWYgdGVzdF9wcmVmaXhfcHJlc2VydmF0aW9uKHNlbGYpOgotICAgICAgICBiID0gImlmICAgZC4ga2V5cyAgKCAgKSAgOiBwYXNzIgotICAgICAgICBhID0gImlmICAgbGlzdChkLiBrZXlzICAoICApKSAgOiBwYXNzIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICJpZiAgIGQuIGl0ZW1zICAoICApICA6IHBhc3MiCi0gICAgICAgIGEgPSAiaWYgICBsaXN0KGQuIGl0ZW1zICAoICApKSAgOiBwYXNzIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICJpZiAgIGQuIGl0ZXJrZXlzICAoICkgIDogcGFzcyIKLSAgICAgICAgYSA9ICJpZiAgIGl0ZXIoZC4ga2V5cyAgKCApKSAgOiBwYXNzIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICJbaSBmb3IgaSBpbiAgICBkLiAgaXRlcmtleXMoICApICBdIgotICAgICAgICBhID0gIltpIGZvciBpIGluICAgIGQuICBrZXlzKCAgKSAgXSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiaWYgICBkLiB2aWV3a2V5cyAgKCApICA6IHBhc3MiCi0gICAgICAgIGEgPSAiaWYgICBkLiBrZXlzICAoICkgIDogcGFzcyIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiW2kgZm9yIGkgaW4gICAgZC4gIHZpZXdrZXlzKCAgKSAgXSIKLSAgICAgICAgYSA9ICJbaSBmb3IgaSBpbiAgICBkLiAga2V5cyggICkgIF0iCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3RyYWlsaW5nX2NvbW1lbnQoc2VsZik6Ci0gICAgICAgIGIgPSAiZC5rZXlzKCkgIyBmb28iCi0gICAgICAgIGEgPSAibGlzdChkLmtleXMoKSkgIyBmb28iCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gImQuaXRlbXMoKSAgIyBmb28iCi0gICAgICAgIGEgPSAibGlzdChkLml0ZW1zKCkpICAjIGZvbyIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiZC5pdGVya2V5cygpICAjIGZvbyIKLSAgICAgICAgYSA9ICJpdGVyKGQua2V5cygpKSAgIyBmb28iCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiW2kgZm9yIGkgaW4gZC5pdGVya2V5cygpICMgZm9vCi0gICAgICAgICAgICAgICBdIiIiCi0gICAgICAgIGEgPSAiIiJbaSBmb3IgaSBpbiBkLmtleXMoKSAjIGZvbwotICAgICAgICAgICAgICAgXSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiIltpIGZvciBpIGluIGQuaXRlcmtleXMoKSAjIGZvbwotICAgICAgICAgICAgICAgXSIiIgotICAgICAgICBhID0gIiIiW2kgZm9yIGkgaW4gZC5rZXlzKCkgIyBmb28KLSAgICAgICAgICAgICAgIF0iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiZC52aWV3aXRlbXMoKSAgIyBmb28iCi0gICAgICAgIGEgPSAiZC5pdGVtcygpICAjIGZvbyIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdW5jaGFuZ2VkKHNlbGYpOgotICAgICAgICBmb3Igd3JhcHBlciBpbiBmaXhlcl91dGlsLmNvbnN1bWluZ19jYWxsczoKLSAgICAgICAgICAgIHMgPSAicyA9ICVzKGQua2V5cygpKSIgJSB3cmFwcGVyCi0gICAgICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgICAgICAgICBzID0gInMgPSAlcyhkLnZhbHVlcygpKSIgJSB3cmFwcGVyCi0gICAgICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgICAgICAgICBzID0gInMgPSAlcyhkLml0ZW1zKCkpIiAlIHdyYXBwZXIKLSAgICAgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF8wMShzZWxmKToKLSAgICAgICAgYiA9ICJkLmtleXMoKSIKLSAgICAgICAgYSA9ICJsaXN0KGQua2V5cygpKSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiYVswXS5mb28oKS5rZXlzKCkiCi0gICAgICAgIGEgPSAibGlzdChhWzBdLmZvbygpLmtleXMoKSkiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzAyKHNlbGYpOgotICAgICAgICBiID0gImQuaXRlbXMoKSIKLSAgICAgICAgYSA9ICJsaXN0KGQuaXRlbXMoKSkiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzAzKHNlbGYpOgotICAgICAgICBiID0gImQudmFsdWVzKCkiCi0gICAgICAgIGEgPSAibGlzdChkLnZhbHVlcygpKSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMDQoc2VsZik6Ci0gICAgICAgIGIgPSAiZC5pdGVya2V5cygpIgotICAgICAgICBhID0gIml0ZXIoZC5rZXlzKCkpIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8wNShzZWxmKToKLSAgICAgICAgYiA9ICJkLml0ZXJpdGVtcygpIgotICAgICAgICBhID0gIml0ZXIoZC5pdGVtcygpKSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMDYoc2VsZik6Ci0gICAgICAgIGIgPSAiZC5pdGVydmFsdWVzKCkiCi0gICAgICAgIGEgPSAiaXRlcihkLnZhbHVlcygpKSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMDcoc2VsZik6Ci0gICAgICAgIHMgPSAibGlzdChkLmtleXMoKSkiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF8wOChzZWxmKToKLSAgICAgICAgcyA9ICJzb3J0ZWQoZC5rZXlzKCkpIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgZGVmIHRlc3RfMDkoc2VsZik6Ci0gICAgICAgIGIgPSAiaXRlcihkLmtleXMoKSkiCi0gICAgICAgIGEgPSAiaXRlcihsaXN0KGQua2V5cygpKSkiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzEwKHNlbGYpOgotICAgICAgICBiID0gImZvbyhkLmtleXMoKSkiCi0gICAgICAgIGEgPSAiZm9vKGxpc3QoZC5rZXlzKCkpKSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMTEoc2VsZik6Ci0gICAgICAgIGIgPSAiZm9yIGkgaW4gZC5rZXlzKCk6IHByaW50IGkiCi0gICAgICAgIGEgPSAiZm9yIGkgaW4gbGlzdChkLmtleXMoKSk6IHByaW50IGkiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzEyKHNlbGYpOgotICAgICAgICBiID0gImZvciBpIGluIGQuaXRlcmtleXMoKTogcHJpbnQgaSIKLSAgICAgICAgYSA9ICJmb3IgaSBpbiBkLmtleXMoKTogcHJpbnQgaSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMTMoc2VsZik6Ci0gICAgICAgIGIgPSAiW2kgZm9yIGkgaW4gZC5rZXlzKCldIgotICAgICAgICBhID0gIltpIGZvciBpIGluIGxpc3QoZC5rZXlzKCkpXSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMTQoc2VsZik6Ci0gICAgICAgIGIgPSAiW2kgZm9yIGkgaW4gZC5pdGVya2V5cygpXSIKLSAgICAgICAgYSA9ICJbaSBmb3IgaSBpbiBkLmtleXMoKV0iCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzE1KHNlbGYpOgotICAgICAgICBiID0gIihpIGZvciBpIGluIGQua2V5cygpKSIKLSAgICAgICAgYSA9ICIoaSBmb3IgaSBpbiBsaXN0KGQua2V5cygpKSkiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzE2KHNlbGYpOgotICAgICAgICBiID0gIihpIGZvciBpIGluIGQuaXRlcmtleXMoKSkiCi0gICAgICAgIGEgPSAiKGkgZm9yIGkgaW4gZC5rZXlzKCkpIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8xNyhzZWxmKToKLSAgICAgICAgYiA9ICJpdGVyKGQuaXRlcmtleXMoKSkiCi0gICAgICAgIGEgPSAiaXRlcihkLmtleXMoKSkiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzE4KHNlbGYpOgotICAgICAgICBiID0gImxpc3QoZC5pdGVya2V5cygpKSIKLSAgICAgICAgYSA9ICJsaXN0KGQua2V5cygpKSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMTkoc2VsZik6Ci0gICAgICAgIGIgPSAic29ydGVkKGQuaXRlcmtleXMoKSkiCi0gICAgICAgIGEgPSAic29ydGVkKGQua2V5cygpKSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMjAoc2VsZik6Ci0gICAgICAgIGIgPSAiZm9vKGQuaXRlcmtleXMoKSkiCi0gICAgICAgIGEgPSAiZm9vKGl0ZXIoZC5rZXlzKCkpKSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMjEoc2VsZik6Ci0gICAgICAgIGIgPSAicHJpbnQgaC5pdGVya2V5cygpLm5leHQoKSIKLSAgICAgICAgYSA9ICJwcmludCBpdGVyKGgua2V5cygpKS5uZXh0KCkiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzIyKHNlbGYpOgotICAgICAgICBiID0gInByaW50IGgua2V5cygpWzBdIgotICAgICAgICBhID0gInByaW50IGxpc3QoaC5rZXlzKCkpWzBdIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8yMyhzZWxmKToKLSAgICAgICAgYiA9ICJwcmludCBsaXN0KGguaXRlcmtleXMoKS5uZXh0KCkpIgotICAgICAgICBhID0gInByaW50IGxpc3QoaXRlcihoLmtleXMoKSkubmV4dCgpKSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMjQoc2VsZik6Ci0gICAgICAgIGIgPSAiZm9yIHggaW4gaC5rZXlzKClbMF06IHByaW50IHgiCi0gICAgICAgIGEgPSAiZm9yIHggaW4gbGlzdChoLmtleXMoKSlbMF06IHByaW50IHgiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzI1KHNlbGYpOgotICAgICAgICBiID0gImQudmlld2tleXMoKSIKLSAgICAgICAgYSA9ICJkLmtleXMoKSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMjYoc2VsZik6Ci0gICAgICAgIGIgPSAiZC52aWV3aXRlbXMoKSIKLSAgICAgICAgYSA9ICJkLml0ZW1zKCkiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzI3KHNlbGYpOgotICAgICAgICBiID0gImQudmlld3ZhbHVlcygpIgotICAgICAgICBhID0gImQudmFsdWVzKCkiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzE0KHNlbGYpOgotICAgICAgICBiID0gIltpIGZvciBpIGluIGQudmlld2tleXMoKV0iCi0gICAgICAgIGEgPSAiW2kgZm9yIGkgaW4gZC5rZXlzKCldIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8xNShzZWxmKToKLSAgICAgICAgYiA9ICIoaSBmb3IgaSBpbiBkLnZpZXdrZXlzKCkpIgotICAgICAgICBhID0gIihpIGZvciBpIGluIGQua2V5cygpKSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMTcoc2VsZik6Ci0gICAgICAgIGIgPSAiaXRlcihkLnZpZXdrZXlzKCkpIgotICAgICAgICBhID0gIml0ZXIoZC5rZXlzKCkpIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8xOChzZWxmKToKLSAgICAgICAgYiA9ICJsaXN0KGQudmlld2tleXMoKSkiCi0gICAgICAgIGEgPSAibGlzdChkLmtleXMoKSkiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzE5KHNlbGYpOgotICAgICAgICBiID0gInNvcnRlZChkLnZpZXdrZXlzKCkpIgotICAgICAgICBhID0gInNvcnRlZChkLmtleXMoKSkiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotY2xhc3MgVGVzdF94cmFuZ2UoRml4ZXJUZXN0Q2FzZSk6Ci0gICAgZml4ZXIgPSAieHJhbmdlIgotCi0gICAgZGVmIHRlc3RfcHJlZml4X3ByZXNlcnZhdGlvbihzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSAgICB4cmFuZ2UoICAxMCAgKSIiIgotICAgICAgICBhID0gIiIieCA9ICAgIHJhbmdlKCAgMTAgICkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJ4ID0geHJhbmdlKCAgMSAgLCAgMTAgICApIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gcmFuZ2UoICAxICAsICAxMCAgICkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJ4ID0geHJhbmdlKCAgMCAgLCAgMTAgLCAgMiApIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gcmFuZ2UoICAwICAsICAxMCAsICAyICkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3Rfc2luZ2xlX2FyZyhzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSB4cmFuZ2UoMTApIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gcmFuZ2UoMTApIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3R3b19hcmdzKHNlbGYpOgotICAgICAgICBiID0gIiIieCA9IHhyYW5nZSgxLCAxMCkiIiIKLSAgICAgICAgYSA9ICIiInggPSByYW5nZSgxLCAxMCkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdGhyZWVfYXJncyhzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSB4cmFuZ2UoMCwgMTAsIDIpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gcmFuZ2UoMCwgMTAsIDIpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3dyYXBfaW5fbGlzdChzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSByYW5nZSgxMCwgMywgOSkiIiIKLSAgICAgICAgYSA9ICIiInggPSBsaXN0KHJhbmdlKDEwLCAzLCA5KSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJ4ID0gZm9vKHJhbmdlKDEwLCAzLCA5KSkiIiIKLSAgICAgICAgYSA9ICIiInggPSBmb28obGlzdChyYW5nZSgxMCwgMywgOSkpKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInggPSByYW5nZSgxMCwgMywgOSkgKyBbNF0iIiIKLSAgICAgICAgYSA9ICIiInggPSBsaXN0KHJhbmdlKDEwLCAzLCA5KSkgKyBbNF0iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJ4ID0gcmFuZ2UoMTApWzo6LTFdIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gbGlzdChyYW5nZSgxMCkpWzo6LTFdIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIieCA9IHJhbmdlKDEwKSAgWzNdIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gbGlzdChyYW5nZSgxMCkpICBbM10iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfeHJhbmdlX2luX2ZvcihzZWxmKToKLSAgICAgICAgYiA9ICIiImZvciBpIGluIHhyYW5nZSgxMCk6XG4gICAgaj1pIiIiCi0gICAgICAgIGEgPSAiIiJmb3IgaSBpbiByYW5nZSgxMCk6XG4gICAgaj1pIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiW2kgZm9yIGkgaW4geHJhbmdlKDEwKV0iIiIKLSAgICAgICAgYSA9ICIiIltpIGZvciBpIGluIHJhbmdlKDEwKV0iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfcmFuZ2VfaW5fZm9yKHNlbGYpOgotICAgICAgICBzZWxmLnVuY2hhbmdlZCgiZm9yIGkgaW4gcmFuZ2UoMTApOiBwYXNzIikKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoIltpIGZvciBpIGluIHJhbmdlKDEwKV0iKQotCi0gICAgZGVmIHRlc3RfaW5fY29udGFpbnNfdGVzdChzZWxmKToKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoInggaW4gcmFuZ2UoMTAsIDMsIDkpIikKLQotICAgIGRlZiB0ZXN0X2luX2NvbnN1bWluZ19jb250ZXh0KHNlbGYpOgotICAgICAgICBmb3IgY2FsbCBpbiBmaXhlcl91dGlsLmNvbnN1bWluZ19jYWxsczoKLSAgICAgICAgICAgIHNlbGYudW5jaGFuZ2VkKCJhID0gJXMocmFuZ2UoMTApKSIgJSBjYWxsKQotCi1jbGFzcyBUZXN0X3hyYW5nZV93aXRoX3JlZHVjZShGaXhlclRlc3RDYXNlKToKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwZXIoVGVzdF94cmFuZ2Vfd2l0aF9yZWR1Y2UsIHNlbGYpLnNldFVwKFsieHJhbmdlIiwgInJlZHVjZSJdKQotCi0gICAgZGVmIHRlc3RfZG91YmxlX3RyYW5zZm9ybShzZWxmKToKLSAgICAgICAgYiA9ICIiInJlZHVjZSh4LCB4cmFuZ2UoNSkpIiIiCi0gICAgICAgIGEgPSAiIiJmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCi1yZWR1Y2UoeCwgcmFuZ2UoNSkpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotY2xhc3MgVGVzdF9yYXdfaW5wdXQoRml4ZXJUZXN0Q2FzZSk6Ci0gICAgZml4ZXIgPSAicmF3X2lucHV0IgotCi0gICAgZGVmIHRlc3RfcHJlZml4X3ByZXNlcnZhdGlvbihzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSAgICByYXdfaW5wdXQoICAgKSIiIgotICAgICAgICBhID0gIiIieCA9ICAgIGlucHV0KCAgICkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJ4ID0gcmF3X2lucHV0KCAgICcnICAgKSIiIgotICAgICAgICBhID0gIiIieCA9IGlucHV0KCAgICcnICAgKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8xKHNlbGYpOgotICAgICAgICBiID0gIiIieCA9IHJhd19pbnB1dCgpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gaW5wdXQoKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8yKHNlbGYpOgotICAgICAgICBiID0gIiIieCA9IHJhd19pbnB1dCgnJykiIiIKLSAgICAgICAgYSA9ICIiInggPSBpbnB1dCgnJykiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMyhzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSByYXdfaW5wdXQoJ3Byb21wdCcpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gaW5wdXQoJ3Byb21wdCcpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzQoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ4ID0gcmF3X2lucHV0KGZvbyhhKSArIDYpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gaW5wdXQoZm9vKGEpICsgNikiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfNShzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSByYXdfaW5wdXQoaW52aXRlKS5zcGxpdCgpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gaW5wdXQoaW52aXRlKS5zcGxpdCgpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzYoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ4ID0gcmF3X2lucHV0KGludml0ZSkgLiBzcGxpdCAoKSIiIgotICAgICAgICBhID0gIiIieCA9IGlucHV0KGludml0ZSkgLiBzcGxpdCAoKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF84KHNlbGYpOgotICAgICAgICBiID0gInggPSBpbnQocmF3X2lucHV0KCkpIgotICAgICAgICBhID0gInggPSBpbnQoaW5wdXQoKSkiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotY2xhc3MgVGVzdF9mdW5jYXR0cnMoRml4ZXJUZXN0Q2FzZSk6Ci0gICAgZml4ZXIgPSAiZnVuY2F0dHJzIgotCi0gICAgYXR0cnMgPSBbImNsb3N1cmUiLCAiZG9jIiwgIm5hbWUiLCAiZGVmYXVsdHMiLCAiY29kZSIsICJnbG9iYWxzIiwgImRpY3QiXQotCi0gICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgIGZvciBhdHRyIGluIHNlbGYuYXR0cnM6Ci0gICAgICAgICAgICBiID0gImEuZnVuY18lcyIgJSBhdHRyCi0gICAgICAgICAgICBhID0gImEuX18lc19fIiAlIGF0dHIKLSAgICAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICAgICAgYiA9ICJzZWxmLmZvby5mdW5jXyVzLmZvb19iYXIiICUgYXR0cgotICAgICAgICAgICAgYSA9ICJzZWxmLmZvby5fXyVzX18uZm9vX2JhciIgJSBhdHRyCi0gICAgICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6Ci0gICAgICAgIGZvciBhdHRyIGluIHNlbGYuYXR0cnM6Ci0gICAgICAgICAgICBzID0gImZvbyhmdW5jXyVzICsgNSkiICUgYXR0cgotICAgICAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICAgICAgcyA9ICJmKGZvby5fXyVzX18pIiAlIGF0dHIKLSAgICAgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICAgICAgICAgIHMgPSAiZihmb28uX18lc19fLmZvbykiICUgYXR0cgotICAgICAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotY2xhc3MgVGVzdF94cmVhZGxpbmVzKEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gInhyZWFkbGluZXMiCi0KLSAgICBkZWYgdGVzdF9jYWxsKHNlbGYpOgotICAgICAgICBiID0gImZvciB4IGluIGYueHJlYWRsaW5lcygpOiBwYXNzIgotICAgICAgICBhID0gImZvciB4IGluIGY6IHBhc3MiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gImZvciB4IGluIGZvbygpLnhyZWFkbGluZXMoKTogcGFzcyIKLSAgICAgICAgYSA9ICJmb3IgeCBpbiBmb28oKTogcGFzcyIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiZm9yIHggaW4gKDUgKyBmb28oKSkueHJlYWRsaW5lcygpOiBwYXNzIgotICAgICAgICBhID0gImZvciB4IGluICg1ICsgZm9vKCkpOiBwYXNzIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9hdHRyX3JlZihzZWxmKToKLSAgICAgICAgYiA9ICJmb28oZi54cmVhZGxpbmVzICsgNSkiCi0gICAgICAgIGEgPSAiZm9vKGYuX19pdGVyX18gKyA1KSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiZm9vKGYoKS54cmVhZGxpbmVzICsgNSkiCi0gICAgICAgIGEgPSAiZm9vKGYoKS5fX2l0ZXJfXyArIDUpIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICJmb28oKDUgKyBmKCkpLnhyZWFkbGluZXMgKyA1KSIKLSAgICAgICAgYSA9ICJmb28oKDUgKyBmKCkpLl9faXRlcl9fICsgNSkiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3VuY2hhbmdlZChzZWxmKToKLSAgICAgICAgcyA9ICJmb3IgeCBpbiBmLnhyZWFkbGluZXMoNSk6IHBhc3MiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICAgICAgcyA9ICJmb3IgeCBpbiBmLnhyZWFkbGluZXMoaz01KTogcGFzcyIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICBzID0gImZvciB4IGluIGYueHJlYWRsaW5lcygqaywgKip2KTogcGFzcyIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICBzID0gImZvbyh4cmVhZGxpbmVzKSIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotCi1jbGFzcyBJbXBvcnRzRml4ZXJUZXN0czoKLQotICAgIGRlZiB0ZXN0X2ltcG9ydF9tb2R1bGUoc2VsZik6Ci0gICAgICAgIGZvciBvbGQsIG5ldyBpbiBzZWxmLm1vZHVsZXMuaXRlbXMoKToKLSAgICAgICAgICAgIGIgPSAiaW1wb3J0ICVzIiAlIG9sZAotICAgICAgICAgICAgYSA9ICJpbXBvcnQgJXMiICUgbmV3Ci0gICAgICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgICAgIGIgPSAiaW1wb3J0IGZvbywgJXMsIGJhciIgJSBvbGQKLSAgICAgICAgICAgIGEgPSAiaW1wb3J0IGZvbywgJXMsIGJhciIgJSBuZXcKLSAgICAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2ltcG9ydF9mcm9tKHNlbGYpOgotICAgICAgICBmb3Igb2xkLCBuZXcgaW4gc2VsZi5tb2R1bGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICBiID0gImZyb20gJXMgaW1wb3J0IGZvbyIgJSBvbGQKLSAgICAgICAgICAgIGEgPSAiZnJvbSAlcyBpbXBvcnQgZm9vIiAlIG5ldwotICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgICAgICBiID0gImZyb20gJXMgaW1wb3J0IGZvbywgYmFyIiAlIG9sZAotICAgICAgICAgICAgYSA9ICJmcm9tICVzIGltcG9ydCBmb28sIGJhciIgJSBuZXcKLSAgICAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICAgICAgYiA9ICJmcm9tICVzIGltcG9ydCAoeWVzLCBubykiICUgb2xkCi0gICAgICAgICAgICBhID0gImZyb20gJXMgaW1wb3J0ICh5ZXMsIG5vKSIgJSBuZXcKLSAgICAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2ltcG9ydF9tb2R1bGVfYXMoc2VsZik6Ci0gICAgICAgIGZvciBvbGQsIG5ldyBpbiBzZWxmLm1vZHVsZXMuaXRlbXMoKToKLSAgICAgICAgICAgIGIgPSAiaW1wb3J0ICVzIGFzIGZvb19iYXIiICUgb2xkCi0gICAgICAgICAgICBhID0gImltcG9ydCAlcyBhcyBmb29fYmFyIiAlIG5ldwotICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgICAgICBiID0gImltcG9ydCAlcyBhcyBmb29fYmFyIiAlIG9sZAotICAgICAgICAgICAgYSA9ICJpbXBvcnQgJXMgYXMgZm9vX2JhciIgJSBuZXcKLSAgICAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2ltcG9ydF9mcm9tX2FzKHNlbGYpOgotICAgICAgICBmb3Igb2xkLCBuZXcgaW4gc2VsZi5tb2R1bGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICBiID0gImZyb20gJXMgaW1wb3J0IGZvbyBhcyBiYXIiICUgb2xkCi0gICAgICAgICAgICBhID0gImZyb20gJXMgaW1wb3J0IGZvbyBhcyBiYXIiICUgbmV3Ci0gICAgICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9zdGFyKHNlbGYpOgotICAgICAgICBmb3Igb2xkLCBuZXcgaW4gc2VsZi5tb2R1bGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICBiID0gImZyb20gJXMgaW1wb3J0ICoiICUgb2xkCi0gICAgICAgICAgICBhID0gImZyb20gJXMgaW1wb3J0ICoiICUgbmV3Ci0gICAgICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9pbXBvcnRfbW9kdWxlX3VzYWdlKHNlbGYpOgotICAgICAgICBmb3Igb2xkLCBuZXcgaW4gc2VsZi5tb2R1bGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICAgICAgaW1wb3J0ICVzCi0gICAgICAgICAgICAgICAgZm9vKCVzLmJhcikKLSAgICAgICAgICAgICAgICAiIiIgJSAob2xkLCBvbGQpCi0gICAgICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICAgICAgaW1wb3J0ICVzCi0gICAgICAgICAgICAgICAgZm9vKCVzLmJhcikKLSAgICAgICAgICAgICAgICAiIiIgJSAobmV3LCBuZXcpCi0gICAgICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgICAgICBmcm9tICVzIGltcG9ydCB4Ci0gICAgICAgICAgICAgICAgJXMgPSAyMwotICAgICAgICAgICAgICAgICIiIiAlIChvbGQsIG9sZCkKLSAgICAgICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgICAgICBmcm9tICVzIGltcG9ydCB4Ci0gICAgICAgICAgICAgICAgJXMgPSAyMwotICAgICAgICAgICAgICAgICIiIiAlIChuZXcsIG9sZCkKLSAgICAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgICAgIGRlZiBmKCk6Ci0gICAgICAgICAgICAgICAgICAgICVzLm1ldGhvZCgpCi0gICAgICAgICAgICAgICAgIiIiICUgKG9sZCwpCi0gICAgICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgICAgICAgICAjIHRlc3QgbmVzdGVkIHVzYWdlCi0gICAgICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICAgICAgaW1wb3J0ICVzCi0gICAgICAgICAgICAgICAgJXMuYmFyKCVzLmZvbykKLSAgICAgICAgICAgICAgICAiIiIgJSAob2xkLCBvbGQsIG9sZCkKLSAgICAgICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgICAgICBpbXBvcnQgJXMKLSAgICAgICAgICAgICAgICAlcy5iYXIoJXMuZm9vKQotICAgICAgICAgICAgICAgICIiIiAlIChuZXcsIG5ldywgbmV3KQotICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICAgICAgaW1wb3J0ICVzCi0gICAgICAgICAgICAgICAgeC4lcwotICAgICAgICAgICAgICAgICIiIiAlIChvbGQsIG9sZCkKLSAgICAgICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgICAgICBpbXBvcnQgJXMKLSAgICAgICAgICAgICAgICB4LiVzCi0gICAgICAgICAgICAgICAgIiIiICUgKG5ldywgb2xkKQotICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0KLWNsYXNzIFRlc3RfaW1wb3J0cyhGaXhlclRlc3RDYXNlLCBJbXBvcnRzRml4ZXJUZXN0cyk6Ci0gICAgZml4ZXIgPSAiaW1wb3J0cyIKLSAgICBmcm9tIC4uZml4ZXMuZml4X2ltcG9ydHMgaW1wb3J0IE1BUFBJTkcgYXMgbW9kdWxlcwotCi0gICAgZGVmIHRlc3RfbXVsdGlwbGVfaW1wb3J0cyhzZWxmKToKLSAgICAgICAgYiA9ICIiImltcG9ydCB1cmxwYXJzZSwgY1N0cmluZ0lPIiIiCi0gICAgICAgIGEgPSAiIiJpbXBvcnQgdXJsbGliLnBhcnNlLCBpbyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9tdWx0aXBsZV9pbXBvcnRzX2FzKHNlbGYpOgotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICBpbXBvcnQgY29weV9yZWcgYXMgYmFyLCBIVE1MUGFyc2VyIGFzIGZvbywgdXJscGFyc2UKLSAgICAgICAgICAgIHMgPSB1cmxwYXJzZS5zcGFtKGJhci5mb28oKSkKLSAgICAgICAgICAgICIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICBpbXBvcnQgY29weXJlZyBhcyBiYXIsIGh0bWwucGFyc2VyIGFzIGZvbywgdXJsbGliLnBhcnNlCi0gICAgICAgICAgICBzID0gdXJsbGliLnBhcnNlLnNwYW0oYmFyLmZvbygpKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotCi1jbGFzcyBUZXN0X2ltcG9ydHMyKEZpeGVyVGVzdENhc2UsIEltcG9ydHNGaXhlclRlc3RzKToKLSAgICBmaXhlciA9ICJpbXBvcnRzMiIKLSAgICBmcm9tIC4uZml4ZXMuZml4X2ltcG9ydHMyIGltcG9ydCBNQVBQSU5HIGFzIG1vZHVsZXMKLQotCi1jbGFzcyBUZXN0X2ltcG9ydHNfZml4ZXJfb3JkZXIoRml4ZXJUZXN0Q2FzZSwgSW1wb3J0c0ZpeGVyVGVzdHMpOgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzdXBlcihUZXN0X2ltcG9ydHNfZml4ZXJfb3JkZXIsIHNlbGYpLnNldFVwKFsnaW1wb3J0cycsICdpbXBvcnRzMiddKQotICAgICAgICBmcm9tIC4uZml4ZXMuZml4X2ltcG9ydHMyIGltcG9ydCBNQVBQSU5HIGFzIG1hcHBpbmcyCi0gICAgICAgIHNlbGYubW9kdWxlcyA9IG1hcHBpbmcyLmNvcHkoKQotICAgICAgICBmcm9tIC4uZml4ZXMuZml4X2ltcG9ydHMgaW1wb3J0IE1BUFBJTkcgYXMgbWFwcGluZzEKLSAgICAgICAgZm9yIGtleSBpbiAoJ2RiaGFzaCcsICdkdW1iZGJtJywgJ2RibScsICdnZGJtJyk6Ci0gICAgICAgICAgICBzZWxmLm1vZHVsZXNba2V5XSA9IG1hcHBpbmcxW2tleV0KLQotICAgIGRlZiB0ZXN0X2FmdGVyX2xvY2FsX2ltcG9ydHNfcmVmYWN0b3Jpbmcoc2VsZik6Ci0gICAgICAgIGZvciBmaXggaW4gKCJpbXBvcnRzIiwgImltcG9ydHMyIik6Ci0gICAgICAgICAgICBzZWxmLmZpeGVyID0gZml4Ci0gICAgICAgICAgICBzZWxmLmFzc2VydF9ydW5zX2FmdGVyKCJpbXBvcnQiKQotCi0KLWNsYXNzIFRlc3RfdXJsbGliKEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gInVybGxpYiIKLSAgICBmcm9tIC4uZml4ZXMuZml4X3VybGxpYiBpbXBvcnQgTUFQUElORyBhcyBtb2R1bGVzCi0KLSAgICBkZWYgdGVzdF9pbXBvcnRfbW9kdWxlKHNlbGYpOgotICAgICAgICBmb3Igb2xkLCBjaGFuZ2VzIGluIHNlbGYubW9kdWxlcy5pdGVtcygpOgotICAgICAgICAgICAgYiA9ICJpbXBvcnQgJXMiICUgb2xkCi0gICAgICAgICAgICBhID0gImltcG9ydCAlcyIgJSAiLCAiLmpvaW4obWFwKGl0ZW1nZXR0ZXIoMCksIGNoYW5nZXMpKQotICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfaW1wb3J0X2Zyb20oc2VsZik6Ci0gICAgICAgIGZvciBvbGQsIGNoYW5nZXMgaW4gc2VsZi5tb2R1bGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICBhbGxfbWVtYmVycyA9IFtdCi0gICAgICAgICAgICBmb3IgbmV3LCBtZW1iZXJzIGluIGNoYW5nZXM6Ci0gICAgICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBtZW1iZXJzOgotICAgICAgICAgICAgICAgICAgICBhbGxfbWVtYmVycy5hcHBlbmQobWVtYmVyKQotICAgICAgICAgICAgICAgICAgICBiID0gImZyb20gJXMgaW1wb3J0ICVzIiAlIChvbGQsIG1lbWJlcikKLSAgICAgICAgICAgICAgICAgICAgYSA9ICJmcm9tICVzIGltcG9ydCAlcyIgJSAobmV3LCBtZW1iZXIpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICAgICAgICAgICAgICBzID0gImZyb20gZm9vIGltcG9ydCAlcyIgJSBtZW1iZXIKLSAgICAgICAgICAgICAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICAgICAgICAgIGIgPSAiZnJvbSAlcyBpbXBvcnQgJXMiICUgKG9sZCwgIiwgIi5qb2luKG1lbWJlcnMpKQotICAgICAgICAgICAgICAgIGEgPSAiZnJvbSAlcyBpbXBvcnQgJXMiICUgKG5ldywgIiwgIi5qb2luKG1lbWJlcnMpKQotICAgICAgICAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICAgICAgICAgIHMgPSAiZnJvbSBmb28gaW1wb3J0ICVzIiAlICIsICIuam9pbihtZW1iZXJzKQotICAgICAgICAgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICAgICAgICAgICMgdGVzdCB0aGUgYnJlYWtpbmcgb2YgYSBtb2R1bGUgaW50byBtdWx0aXBsZSByZXBsYWNlbWVudHMKLSAgICAgICAgICAgIGIgPSAiZnJvbSAlcyBpbXBvcnQgJXMiICUgKG9sZCwgIiwgIi5qb2luKGFsbF9tZW1iZXJzKSkKLSAgICAgICAgICAgIGEgPSAiXG4iLmpvaW4oWyJmcm9tICVzIGltcG9ydCAlcyIgJSAobmV3LCAiLCAiLmpvaW4obWVtYmVycykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuZXcsIG1lbWJlcnMpIGluIGNoYW5nZXNdKQotICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfaW1wb3J0X21vZHVsZV9hcyhzZWxmKToKLSAgICAgICAgZm9yIG9sZCBpbiBzZWxmLm1vZHVsZXM6Ci0gICAgICAgICAgICBzID0gImltcG9ydCAlcyBhcyBmb28iICUgb2xkCi0gICAgICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCAiVGhpcyBtb2R1bGUgaXMgbm93IG11bHRpcGxlIG1vZHVsZXMiKQotCi0gICAgZGVmIHRlc3RfaW1wb3J0X2Zyb21fYXMoc2VsZik6Ci0gICAgICAgIGZvciBvbGQsIGNoYW5nZXMgaW4gc2VsZi5tb2R1bGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICBmb3IgbmV3LCBtZW1iZXJzIGluIGNoYW5nZXM6Ci0gICAgICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBtZW1iZXJzOgotICAgICAgICAgICAgICAgICAgICBiID0gImZyb20gJXMgaW1wb3J0ICVzIGFzIGZvb19iYXIiICUgKG9sZCwgbWVtYmVyKQotICAgICAgICAgICAgICAgICAgICBhID0gImZyb20gJXMgaW1wb3J0ICVzIGFzIGZvb19iYXIiICUgKG5ldywgbWVtYmVyKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0gICAgICAgICAgICAgICAgICAgIGIgPSAiZnJvbSAlcyBpbXBvcnQgJXMgYXMgYmxhaCwgJXMiICUgKG9sZCwgbWVtYmVyLCBtZW1iZXIpCi0gICAgICAgICAgICAgICAgICAgIGEgPSAiZnJvbSAlcyBpbXBvcnQgJXMgYXMgYmxhaCwgJXMiICUgKG5ldywgbWVtYmVyLCBtZW1iZXIpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3N0YXIoc2VsZik6Ci0gICAgICAgIGZvciBvbGQgaW4gc2VsZi5tb2R1bGVzOgotICAgICAgICAgICAgcyA9ICJmcm9tICVzIGltcG9ydCAqIiAlIG9sZAotICAgICAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgIkNhbm5vdCBoYW5kbGUgc3RhciBpbXBvcnRzIikKLQotICAgIGRlZiB0ZXN0X2luZGVudGVkKHNlbGYpOgotICAgICAgICBiID0gIiIiCi1kZWYgZm9vKCk6Ci0gICAgZnJvbSB1cmxsaWIgaW1wb3J0IHVybGVuY29kZSwgdXJsb3BlbgotIiIiCi0gICAgICAgIGEgPSAiIiIKLWRlZiBmb28oKToKLSAgICBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJsZW5jb2RlCi0gICAgZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbgotIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiCi1kZWYgZm9vKCk6Ci0gICAgb3RoZXIoKQotICAgIGZyb20gdXJsbGliIGltcG9ydCB1cmxlbmNvZGUsIHVybG9wZW4KLSIiIgotICAgICAgICBhID0gIiIiCi1kZWYgZm9vKCk6Ci0gICAgb3RoZXIoKQotICAgIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxlbmNvZGUKLSAgICBmcm9tIHVybGxpYi5yZXF1ZXN0IGltcG9ydCB1cmxvcGVuCi0iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0KLQotICAgIGRlZiB0ZXN0X2ltcG9ydF9tb2R1bGVfdXNhZ2Uoc2VsZik6Ci0gICAgICAgIGZvciBvbGQsIGNoYW5nZXMgaW4gc2VsZi5tb2R1bGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICBmb3IgbmV3LCBtZW1iZXJzIGluIGNoYW5nZXM6Ci0gICAgICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBtZW1iZXJzOgotICAgICAgICAgICAgICAgICAgICBuZXdfaW1wb3J0ID0gIiwgIi5qb2luKFtuIGZvciAobiwgbWVtcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gc2VsZi5tb2R1bGVzW29sZF1dKQotICAgICAgICAgICAgICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgJXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbyglcy4lcykKLSAgICAgICAgICAgICAgICAgICAgICAgICIiIiAlIChvbGQsIG9sZCwgbWVtYmVyKQotICAgICAgICAgICAgICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgJXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbyglcy4lcykKLSAgICAgICAgICAgICAgICAgICAgICAgICIiIiAlIChuZXdfaW1wb3J0LCBuZXcsIG1lbWJlcikKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotICAgICAgICAgICAgICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgJXMKLSAgICAgICAgICAgICAgICAgICAgICAgICVzLiVzKCVzLiVzKQotICAgICAgICAgICAgICAgICAgICAgICAgIiIiICUgKG9sZCwgb2xkLCBtZW1iZXIsIG9sZCwgbWVtYmVyKQotICAgICAgICAgICAgICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgJXMKLSAgICAgICAgICAgICAgICAgICAgICAgICVzLiVzKCVzLiVzKQotICAgICAgICAgICAgICAgICAgICAgICAgIiIiICUgKG5ld19pbXBvcnQsIG5ldywgbWVtYmVyLCBuZXcsIG1lbWJlcikKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0KLWNsYXNzIFRlc3RfaW5wdXQoRml4ZXJUZXN0Q2FzZSk6Ci0gICAgZml4ZXIgPSAiaW5wdXQiCi0KLSAgICBkZWYgdGVzdF9wcmVmaXhfcHJlc2VydmF0aW9uKHNlbGYpOgotICAgICAgICBiID0gIiIieCA9ICAgaW5wdXQoICAgKSIiIgotICAgICAgICBhID0gIiIieCA9ICAgZXZhbChpbnB1dCggICApKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInggPSBpbnB1dCggICAnJyAgICkiIiIKLSAgICAgICAgYSA9ICIiInggPSBldmFsKGlucHV0KCAgICcnICAgKSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdHJhaWxpbmdfY29tbWVudChzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSBpbnB1dCgpICAjICBmb28iIiIKLSAgICAgICAgYSA9ICIiInggPSBldmFsKGlucHV0KCkpICAjICBmb28iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfaWRlbXBvdGVuY3koc2VsZik6Ci0gICAgICAgIHMgPSAiIiJ4ID0gZXZhbChpbnB1dCgpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgICAgIHMgPSAiIiJ4ID0gZXZhbChpbnB1dCgnJykpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICAgICAgcyA9ICIiInggPSBldmFsKGlucHV0KGZvbyg1KSArIDkpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgZGVmIHRlc3RfMShzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSBpbnB1dCgpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gZXZhbChpbnB1dCgpKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8yKHNlbGYpOgotICAgICAgICBiID0gIiIieCA9IGlucHV0KCcnKSIiIgotICAgICAgICBhID0gIiIieCA9IGV2YWwoaW5wdXQoJycpKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8zKHNlbGYpOgotICAgICAgICBiID0gIiIieCA9IGlucHV0KCdwcm9tcHQnKSIiIgotICAgICAgICBhID0gIiIieCA9IGV2YWwoaW5wdXQoJ3Byb21wdCcpKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF80KHNlbGYpOgotICAgICAgICBiID0gIiIieCA9IGlucHV0KGZvbyg1KSArIDkpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gZXZhbChpbnB1dChmb28oNSkgKyA5KSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi1jbGFzcyBUZXN0X3R1cGxlX3BhcmFtcyhGaXhlclRlc3RDYXNlKToKLSAgICBmaXhlciA9ICJ0dXBsZV9wYXJhbXMiCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfMShzZWxmKToKLSAgICAgICAgcyA9ICIiImRlZiBmb28oKTogcGFzcyIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgZGVmIHRlc3RfdW5jaGFuZ2VkXzIoc2VsZik6Ci0gICAgICAgIHMgPSAiIiJkZWYgZm9vKGEsIGIsIGMpOiBwYXNzIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfMyhzZWxmKToKLSAgICAgICAgcyA9ICIiImRlZiBmb28oYT0zLCBiPTQsIGM9NSk6IHBhc3MiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgIGRlZiB0ZXN0XzEoc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIGRlZiBmb28oKChhLCBiKSwgYykpOgotICAgICAgICAgICAgICAgIHggPSA1IiIiCi0KLSAgICAgICAgYSA9ICIiIgotICAgICAgICAgICAgZGVmIGZvbyh4eHhfdG9kb19jaGFuZ2VtZSk6Ci0gICAgICAgICAgICAgICAgKChhLCBiKSwgYykgPSB4eHhfdG9kb19jaGFuZ2VtZQotICAgICAgICAgICAgICAgIHggPSA1IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzIoc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIGRlZiBmb28oKChhLCBiKSwgYyksIGQpOgotICAgICAgICAgICAgICAgIHggPSA1IiIiCi0KLSAgICAgICAgYSA9ICIiIgotICAgICAgICAgICAgZGVmIGZvbyh4eHhfdG9kb19jaGFuZ2VtZSwgZCk6Ci0gICAgICAgICAgICAgICAgKChhLCBiKSwgYykgPSB4eHhfdG9kb19jaGFuZ2VtZQotICAgICAgICAgICAgICAgIHggPSA1IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzMoc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIGRlZiBmb28oKChhLCBiKSwgYyksIGQpIC0+IGU6Ci0gICAgICAgICAgICAgICAgeCA9IDUiIiIKLQotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICBkZWYgZm9vKHh4eF90b2RvX2NoYW5nZW1lLCBkKSAtPiBlOgotICAgICAgICAgICAgICAgICgoYSwgYiksIGMpID0geHh4X3RvZG9fY2hhbmdlbWUKLSAgICAgICAgICAgICAgICB4ID0gNSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9zZW1pY29sb24oc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIGRlZiBmb28oKChhLCBiKSwgYykpOiB4ID0gNTsgeSA9IDciIiIKLQotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICBkZWYgZm9vKHh4eF90b2RvX2NoYW5nZW1lKTogKChhLCBiKSwgYykgPSB4eHhfdG9kb19jaGFuZ2VtZTsgeCA9IDU7IHkgPSA3IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2tleXdvcmRzKHNlbGYpOgotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICBkZWYgZm9vKCgoYSwgYiksIGMpLCBkLCBlPTUpIC0+IHo6Ci0gICAgICAgICAgICAgICAgeCA9IDUiIiIKLQotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICBkZWYgZm9vKHh4eF90b2RvX2NoYW5nZW1lLCBkLCBlPTUpIC0+IHo6Ci0gICAgICAgICAgICAgICAgKChhLCBiKSwgYykgPSB4eHhfdG9kb19jaGFuZ2VtZQotICAgICAgICAgICAgICAgIHggPSA1IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3ZhcmFyZ3Moc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIGRlZiBmb28oKChhLCBiKSwgYyksIGQsICp2YXJncywgKiprd2FyZ3MpIC0+IHo6Ci0gICAgICAgICAgICAgICAgeCA9IDUiIiIKLQotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICBkZWYgZm9vKHh4eF90b2RvX2NoYW5nZW1lLCBkLCAqdmFyZ3MsICoqa3dhcmdzKSAtPiB6OgotICAgICAgICAgICAgICAgICgoYSwgYiksIGMpID0geHh4X3RvZG9fY2hhbmdlbWUKLSAgICAgICAgICAgICAgICB4ID0gNSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9tdWx0aV8xKHNlbGYpOgotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICBkZWYgZm9vKCgoYSwgYiksIGMpLCAoZCwgZSwgZikpIC0+IHo6Ci0gICAgICAgICAgICAgICAgeCA9IDUiIiIKLQotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICBkZWYgZm9vKHh4eF90b2RvX2NoYW5nZW1lLCB4eHhfdG9kb19jaGFuZ2VtZTEpIC0+IHo6Ci0gICAgICAgICAgICAgICAgKChhLCBiKSwgYykgPSB4eHhfdG9kb19jaGFuZ2VtZQotICAgICAgICAgICAgICAgIChkLCBlLCBmKSA9IHh4eF90b2RvX2NoYW5nZW1lMQotICAgICAgICAgICAgICAgIHggPSA1IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X211bHRpXzIoc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIGRlZiBmb28oeCwgKChhLCBiKSwgYyksIGQsIChlLCBmLCBnKSwgeSkgLT4gejoKLSAgICAgICAgICAgICAgICB4ID0gNSIiIgotCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIGRlZiBmb28oeCwgeHh4X3RvZG9fY2hhbmdlbWUsIGQsIHh4eF90b2RvX2NoYW5nZW1lMSwgeSkgLT4gejoKLSAgICAgICAgICAgICAgICAoKGEsIGIpLCBjKSA9IHh4eF90b2RvX2NoYW5nZW1lCi0gICAgICAgICAgICAgICAgKGUsIGYsIGcpID0geHh4X3RvZG9fY2hhbmdlbWUxCi0gICAgICAgICAgICAgICAgeCA9IDUiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfZG9jc3RyaW5nKHNlbGYpOgotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICBkZWYgZm9vKCgoYSwgYiksIGMpLCAoZCwgZSwgZikpIC0+IHo6Ci0gICAgICAgICAgICAgICAgImZvbyBmb28gZm9vIGZvbyIKLSAgICAgICAgICAgICAgICB4ID0gNSIiIgotCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIGRlZiBmb28oeHh4X3RvZG9fY2hhbmdlbWUsIHh4eF90b2RvX2NoYW5nZW1lMSkgLT4gejoKLSAgICAgICAgICAgICAgICAiZm9vIGZvbyBmb28gZm9vIgotICAgICAgICAgICAgICAgICgoYSwgYiksIGMpID0geHh4X3RvZG9fY2hhbmdlbWUKLSAgICAgICAgICAgICAgICAoZCwgZSwgZikgPSB4eHhfdG9kb19jaGFuZ2VtZTEKLSAgICAgICAgICAgICAgICB4ID0gNSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9sYW1iZGFfbm9fY2hhbmdlKHNlbGYpOgotICAgICAgICBzID0gIiIibGFtYmRhIHg6IHggKyA1IiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF9sYW1iZGFfcGFyZW5zX3NpbmdsZV9hcmcoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJsYW1iZGEgKHgpOiB4ICsgNSIiIgotICAgICAgICBhID0gIiIibGFtYmRhIHg6IHggKyA1IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIibGFtYmRhKHgpOiB4ICsgNSIiIgotICAgICAgICBhID0gIiIibGFtYmRhIHg6IHggKyA1IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIibGFtYmRhICgoKCh4KSkpKTogeCArIDUiIiIKLSAgICAgICAgYSA9ICIiImxhbWJkYSB4OiB4ICsgNSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiImxhbWJkYSgoKCh4KSkpKTogeCArIDUiIiIKLSAgICAgICAgYSA9ICIiImxhbWJkYSB4OiB4ICsgNSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9sYW1iZGFfc2ltcGxlKHNlbGYpOgotICAgICAgICBiID0gIiIibGFtYmRhICh4LCB5KTogeCArIGYoeSkiIiIKLSAgICAgICAgYSA9ICIiImxhbWJkYSB4X3k6IHhfeVswXSArIGYoeF95WzFdKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiImxhbWJkYSh4LCB5KTogeCArIGYoeSkiIiIKLSAgICAgICAgYSA9ICIiImxhbWJkYSB4X3k6IHhfeVswXSArIGYoeF95WzFdKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiImxhbWJkYSAoKCh4LCB5KSkpOiB4ICsgZih5KSIiIgotICAgICAgICBhID0gIiIibGFtYmRhIHhfeTogeF95WzBdICsgZih4X3lbMV0pIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIibGFtYmRhKCgoeCwgeSkpKTogeCArIGYoeSkiIiIKLSAgICAgICAgYSA9ICIiImxhbWJkYSB4X3k6IHhfeVswXSArIGYoeF95WzFdKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9sYW1iZGFfb25lX3R1cGxlKHNlbGYpOgotICAgICAgICBiID0gIiIibGFtYmRhICh4LCk6IHggKyBmKHgpIiIiCi0gICAgICAgIGEgPSAiIiJsYW1iZGEgeDE6IHgxWzBdICsgZih4MVswXSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJsYW1iZGEgKCgoeCwpKSk6IHggKyBmKHgpIiIiCi0gICAgICAgIGEgPSAiIiJsYW1iZGEgeDE6IHgxWzBdICsgZih4MVswXSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfbGFtYmRhX3NpbXBsZV9tdWx0aV91c2Uoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJsYW1iZGEgKHgsIHkpOiB4ICsgeCArIGYoeCkgKyB4IiIiCi0gICAgICAgIGEgPSAiIiJsYW1iZGEgeF95OiB4X3lbMF0gKyB4X3lbMF0gKyBmKHhfeVswXSkgKyB4X3lbMF0iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfbGFtYmRhX3NpbXBsZV9yZXZlcnNlKHNlbGYpOgotICAgICAgICBiID0gIiIibGFtYmRhICh4LCB5KTogeSArIHgiIiIKLSAgICAgICAgYSA9ICIiImxhbWJkYSB4X3k6IHhfeVsxXSArIHhfeVswXSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9sYW1iZGFfbmVzdGVkKHNlbGYpOgotICAgICAgICBiID0gIiIibGFtYmRhICh4LCAoeSwgeikpOiB4ICsgeSArIHoiIiIKLSAgICAgICAgYSA9ICIiImxhbWJkYSB4X3lfejogeF95X3pbMF0gKyB4X3lfelsxXVswXSArIHhfeV96WzFdWzFdIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIibGFtYmRhICgoKHgsICh5LCB6KSkpKTogeCArIHkgKyB6IiIiCi0gICAgICAgIGEgPSAiIiJsYW1iZGEgeF95X3o6IHhfeV96WzBdICsgeF95X3pbMV1bMF0gKyB4X3lfelsxXVsxXSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9sYW1iZGFfbmVzdGVkX211bHRpX3VzZShzZWxmKToKLSAgICAgICAgYiA9ICIiImxhbWJkYSAoeCwgKHksIHopKTogeCArIHkgKyBmKHkpIiIiCi0gICAgICAgIGEgPSAiIiJsYW1iZGEgeF95X3o6IHhfeV96WzBdICsgeF95X3pbMV1bMF0gKyBmKHhfeV96WzFdWzBdKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLWNsYXNzIFRlc3RfbWV0aG9kYXR0cnMoRml4ZXJUZXN0Q2FzZSk6Ci0gICAgZml4ZXIgPSAibWV0aG9kYXR0cnMiCi0KLSAgICBhdHRycyA9IFsiZnVuYyIsICJzZWxmIiwgImNsYXNzIl0KLQotICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICBmb3IgYXR0ciBpbiBzZWxmLmF0dHJzOgotICAgICAgICAgICAgYiA9ICJhLmltXyVzIiAlIGF0dHIKLSAgICAgICAgICAgIGlmIGF0dHIgPT0gImNsYXNzIjoKLSAgICAgICAgICAgICAgICBhID0gImEuX19zZWxmX18uX19jbGFzc19fIgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBhID0gImEuX18lc19fIiAlIGF0dHIKLSAgICAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICAgICAgYiA9ICJzZWxmLmZvby5pbV8lcy5mb29fYmFyIiAlIGF0dHIKLSAgICAgICAgICAgIGlmIGF0dHIgPT0gImNsYXNzIjoKLSAgICAgICAgICAgICAgICBhID0gInNlbGYuZm9vLl9fc2VsZl9fLl9fY2xhc3NfXy5mb29fYmFyIgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBhID0gInNlbGYuZm9vLl9fJXNfXy5mb29fYmFyIiAlIGF0dHIKLSAgICAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3VuY2hhbmdlZChzZWxmKToKLSAgICAgICAgZm9yIGF0dHIgaW4gc2VsZi5hdHRyczoKLSAgICAgICAgICAgIHMgPSAiZm9vKGltXyVzICsgNSkiICUgYXR0cgotICAgICAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICAgICAgcyA9ICJmKGZvby5fXyVzX18pIiAlIGF0dHIKLSAgICAgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICAgICAgICAgIHMgPSAiZihmb28uX18lc19fLmZvbykiICUgYXR0cgotICAgICAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotY2xhc3MgVGVzdF9uZXh0KEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gIm5leHQiCi0KLSAgICBkZWYgdGVzdF8xKHNlbGYpOgotICAgICAgICBiID0gIiIiaXQubmV4dCgpIiIiCi0gICAgICAgIGEgPSAiIiJuZXh0KGl0KSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8yKHNlbGYpOgotICAgICAgICBiID0gIiIiYS5iLmMuZC5uZXh0KCkiIiIKLSAgICAgICAgYSA9ICIiIm5leHQoYS5iLmMuZCkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMyhzZWxmKToKLSAgICAgICAgYiA9ICIiIihhICsgYikubmV4dCgpIiIiCi0gICAgICAgIGEgPSAiIiJuZXh0KChhICsgYikpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzQoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJhKCkubmV4dCgpIiIiCi0gICAgICAgIGEgPSAiIiJuZXh0KGEoKSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfNShzZWxmKToKLSAgICAgICAgYiA9ICIiImEoKS5uZXh0KCkgKyBiIiIiCi0gICAgICAgIGEgPSAiIiJuZXh0KGEoKSkgKyBiIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0XzYoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJjKCAgICAgIGEoKS5uZXh0KCkgKyBiKSIiIgotICAgICAgICBhID0gIiIiYyggICAgICBuZXh0KGEoKSkgKyBiKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9wcmVmaXhfcHJlc2VydmF0aW9uXzEoc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIGZvciBhIGluIGI6Ci0gICAgICAgICAgICAgICAgZm9vKGEpCi0gICAgICAgICAgICAgICAgYS5uZXh0KCkKLSAgICAgICAgICAgICIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICBmb3IgYSBpbiBiOgotICAgICAgICAgICAgICAgIGZvbyhhKQotICAgICAgICAgICAgICAgIG5leHQoYSkKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9wcmVmaXhfcHJlc2VydmF0aW9uXzIoc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIGZvciBhIGluIGI6Ci0gICAgICAgICAgICAgICAgZm9vKGEpICMgYWJjCi0gICAgICAgICAgICAgICAgIyBkZWYKLSAgICAgICAgICAgICAgICBhLm5leHQoKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIGZvciBhIGluIGI6Ci0gICAgICAgICAgICAgICAgZm9vKGEpICMgYWJjCi0gICAgICAgICAgICAgICAgIyBkZWYKLSAgICAgICAgICAgICAgICBuZXh0KGEpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfcHJlZml4X3ByZXNlcnZhdGlvbl8zKHNlbGYpOgotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICBuZXh0ID0gNQotICAgICAgICAgICAgZm9yIGEgaW4gYjoKLSAgICAgICAgICAgICAgICBmb28oYSkKLSAgICAgICAgICAgICAgICBhLm5leHQoKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIG5leHQgPSA1Ci0gICAgICAgICAgICBmb3IgYSBpbiBiOgotICAgICAgICAgICAgICAgIGZvbyhhKQotICAgICAgICAgICAgICAgIGEuX19uZXh0X18oKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSwgaWdub3JlX3dhcm5pbmdzPVRydWUpCi0KLSAgICBkZWYgdGVzdF9wcmVmaXhfcHJlc2VydmF0aW9uXzQoc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIG5leHQgPSA1Ci0gICAgICAgICAgICBmb3IgYSBpbiBiOgotICAgICAgICAgICAgICAgIGZvbyhhKSAjIGFiYwotICAgICAgICAgICAgICAgICMgZGVmCi0gICAgICAgICAgICAgICAgYS5uZXh0KCkKLSAgICAgICAgICAgICIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICBuZXh0ID0gNQotICAgICAgICAgICAgZm9yIGEgaW4gYjoKLSAgICAgICAgICAgICAgICBmb28oYSkgIyBhYmMKLSAgICAgICAgICAgICAgICAjIGRlZgotICAgICAgICAgICAgICAgIGEuX19uZXh0X18oKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSwgaWdub3JlX3dhcm5pbmdzPVRydWUpCi0KLSAgICBkZWYgdGVzdF9wcmVmaXhfcHJlc2VydmF0aW9uXzUoc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIG5leHQgPSA1Ci0gICAgICAgICAgICBmb3IgYSBpbiBiOgotICAgICAgICAgICAgICAgIGZvbyhmb28oYSksICMgYWJjCi0gICAgICAgICAgICAgICAgICAgIGEubmV4dCgpKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIG5leHQgPSA1Ci0gICAgICAgICAgICBmb3IgYSBpbiBiOgotICAgICAgICAgICAgICAgIGZvbyhmb28oYSksICMgYWJjCi0gICAgICAgICAgICAgICAgICAgIGEuX19uZXh0X18oKSkKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEsIGlnbm9yZV93YXJuaW5ncz1UcnVlKQotCi0gICAgZGVmIHRlc3RfcHJlZml4X3ByZXNlcnZhdGlvbl82KHNlbGYpOgotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICBmb3IgYSBpbiBiOgotICAgICAgICAgICAgICAgIGZvbyhmb28oYSksICMgYWJjCi0gICAgICAgICAgICAgICAgICAgIGEubmV4dCgpKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIGZvciBhIGluIGI6Ci0gICAgICAgICAgICAgICAgZm9vKGZvbyhhKSwgIyBhYmMKLSAgICAgICAgICAgICAgICAgICAgbmV4dChhKSkKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9tZXRob2RfMShzZWxmKToKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIGNsYXNzIEE6Ci0gICAgICAgICAgICAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfbWV0aG9kXzIoc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIGNsYXNzIEEob2JqZWN0KToKLSAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIGNsYXNzIEEob2JqZWN0KToKLSAgICAgICAgICAgICAgICBkZWYgX19uZXh0X18oc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9tZXRob2RfMyhzZWxmKToKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgICAgICBkZWYgbmV4dCh4KToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIGNsYXNzIEE6Ci0gICAgICAgICAgICAgICAgZGVmIF9fbmV4dF9fKHgpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfbWV0aG9kXzQoc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIGNsYXNzIEE6Ci0gICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbyk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCi0KLSAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIGNsYXNzIEE6Ci0gICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbyk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCi0KLSAgICAgICAgICAgICAgICBkZWYgX19uZXh0X18oc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9tZXRob2RfdW5jaGFuZ2VkKHNlbGYpOgotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICBjbGFzcyBBOgotICAgICAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYsIGEsIGIpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgIGRlZiB0ZXN0X3NoYWRvd2luZ19hc3NpZ25fc2ltcGxlKHNlbGYpOgotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICBuZXh0ID0gZm9vCi0KLSAgICAgICAgICAgIGNsYXNzIEE6Ci0gICAgICAgICAgICAgICAgZGVmIG5leHQoc2VsZiwgYSwgYik6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCAiQ2FsbHMgdG8gYnVpbHRpbiBuZXh0KCkgcG9zc2libHkgc2hhZG93ZWQiKQotCi0gICAgZGVmIHRlc3Rfc2hhZG93aW5nX2Fzc2lnbl90dXBsZV8xKHNlbGYpOgotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICAobmV4dCwgYSkgPSBmb28KLQotICAgICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsICJDYWxscyB0byBidWlsdGluIG5leHQoKSBwb3NzaWJseSBzaGFkb3dlZCIpCi0KLSAgICBkZWYgdGVzdF9zaGFkb3dpbmdfYXNzaWduX3R1cGxlXzIoc2VsZik6Ci0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIChhLCAoYiwgKG5leHQsIGMpKSwgYSkgPSBmb28KLQotICAgICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsICJDYWxscyB0byBidWlsdGluIG5leHQoKSBwb3NzaWJseSBzaGFkb3dlZCIpCi0KLSAgICBkZWYgdGVzdF9zaGFkb3dpbmdfYXNzaWduX2xpc3RfMShzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgW25leHQsIGFdID0gZm9vCi0KLSAgICAgICAgICAgIGNsYXNzIEE6Ci0gICAgICAgICAgICAgICAgZGVmIG5leHQoc2VsZiwgYSwgYik6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCAiQ2FsbHMgdG8gYnVpbHRpbiBuZXh0KCkgcG9zc2libHkgc2hhZG93ZWQiKQotCi0gICAgZGVmIHRlc3Rfc2hhZG93aW5nX2Fzc2lnbl9saXN0XzIoc2VsZik6Ci0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIFthLCBbYiwgW25leHQsIGNdXSwgYV0gPSBmb28KLQotICAgICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsICJDYWxscyB0byBidWlsdGluIG5leHQoKSBwb3NzaWJseSBzaGFkb3dlZCIpCi0KLSAgICBkZWYgdGVzdF9idWlsdGluX2Fzc2lnbihzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgZGVmIGZvbygpOgotICAgICAgICAgICAgICAgIF9fYnVpbHRpbl9fLm5leHQgPSBmb28KLQotICAgICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsICJDYWxscyB0byBidWlsdGluIG5leHQoKSBwb3NzaWJseSBzaGFkb3dlZCIpCi0KLSAgICBkZWYgdGVzdF9idWlsdGluX2Fzc2lnbl9pbl90dXBsZShzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgZGVmIGZvbygpOgotICAgICAgICAgICAgICAgIChhLCBfX2J1aWx0aW5fXy5uZXh0KSA9IGZvbwotCi0gICAgICAgICAgICBjbGFzcyBBOgotICAgICAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYsIGEsIGIpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgIkNhbGxzIHRvIGJ1aWx0aW4gbmV4dCgpIHBvc3NpYmx5IHNoYWRvd2VkIikKLQotICAgIGRlZiB0ZXN0X2J1aWx0aW5fYXNzaWduX2luX2xpc3Qoc2VsZik6Ci0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIGRlZiBmb28oKToKLSAgICAgICAgICAgICAgICBbYSwgX19idWlsdGluX18ubmV4dF0gPSBmb28KLQotICAgICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsICJDYWxscyB0byBidWlsdGluIG5leHQoKSBwb3NzaWJseSBzaGFkb3dlZCIpCi0KLSAgICBkZWYgdGVzdF9hc3NpZ25fdG9fbmV4dChzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgZGVmIGZvbygpOgotICAgICAgICAgICAgICAgIEEubmV4dCA9IGZvbwotCi0gICAgICAgICAgICBjbGFzcyBBOgotICAgICAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYsIGEsIGIpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgIGRlZiB0ZXN0X2Fzc2lnbl90b19uZXh0X2luX3R1cGxlKHNlbGYpOgotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICBkZWYgZm9vKCk6Ci0gICAgICAgICAgICAgICAgKGEsIEEubmV4dCkgPSBmb28KLQotICAgICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF9hc3NpZ25fdG9fbmV4dF9pbl9saXN0KHNlbGYpOgotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICBkZWYgZm9vKCk6Ci0gICAgICAgICAgICAgICAgW2EsIEEubmV4dF0gPSBmb28KLQotICAgICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF9zaGFkb3dpbmdfaW1wb3J0XzEoc2VsZik6Ci0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIGltcG9ydCBmb28uYmFyIGFzIG5leHQKLQotICAgICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsICJDYWxscyB0byBidWlsdGluIG5leHQoKSBwb3NzaWJseSBzaGFkb3dlZCIpCi0KLSAgICBkZWYgdGVzdF9zaGFkb3dpbmdfaW1wb3J0XzIoc2VsZik6Ci0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIGltcG9ydCBiYXIsIGJhci5mb28gYXMgbmV4dAotCi0gICAgICAgICAgICBjbGFzcyBBOgotICAgICAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYsIGEsIGIpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgIkNhbGxzIHRvIGJ1aWx0aW4gbmV4dCgpIHBvc3NpYmx5IHNoYWRvd2VkIikKLQotICAgIGRlZiB0ZXN0X3NoYWRvd2luZ19pbXBvcnRfMyhzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgaW1wb3J0IGJhciwgYmFyLmZvbyBhcyBuZXh0LCBiYXoKLQotICAgICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsICJDYWxscyB0byBidWlsdGluIG5leHQoKSBwb3NzaWJseSBzaGFkb3dlZCIpCi0KLSAgICBkZWYgdGVzdF9zaGFkb3dpbmdfaW1wb3J0X2Zyb21fMShzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgZnJvbSB4IGltcG9ydCBuZXh0Ci0KLSAgICAgICAgICAgIGNsYXNzIEE6Ci0gICAgICAgICAgICAgICAgZGVmIG5leHQoc2VsZiwgYSwgYik6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCAiQ2FsbHMgdG8gYnVpbHRpbiBuZXh0KCkgcG9zc2libHkgc2hhZG93ZWQiKQotCi0gICAgZGVmIHRlc3Rfc2hhZG93aW5nX2ltcG9ydF9mcm9tXzIoc2VsZik6Ci0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIGZyb20geC5hIGltcG9ydCBuZXh0Ci0KLSAgICAgICAgICAgIGNsYXNzIEE6Ci0gICAgICAgICAgICAgICAgZGVmIG5leHQoc2VsZiwgYSwgYik6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCAiQ2FsbHMgdG8gYnVpbHRpbiBuZXh0KCkgcG9zc2libHkgc2hhZG93ZWQiKQotCi0gICAgZGVmIHRlc3Rfc2hhZG93aW5nX2ltcG9ydF9mcm9tXzMoc2VsZik6Ci0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIGZyb20geCBpbXBvcnQgYSwgbmV4dCwgYgotCi0gICAgICAgICAgICBjbGFzcyBBOgotICAgICAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYsIGEsIGIpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgIkNhbGxzIHRvIGJ1aWx0aW4gbmV4dCgpIHBvc3NpYmx5IHNoYWRvd2VkIikKLQotICAgIGRlZiB0ZXN0X3NoYWRvd2luZ19pbXBvcnRfZnJvbV80KHNlbGYpOgotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICBmcm9tIHguYSBpbXBvcnQgYSwgbmV4dCwgYgotCi0gICAgICAgICAgICBjbGFzcyBBOgotICAgICAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYsIGEsIGIpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgIkNhbGxzIHRvIGJ1aWx0aW4gbmV4dCgpIHBvc3NpYmx5IHNoYWRvd2VkIikKLQotICAgIGRlZiB0ZXN0X3NoYWRvd2luZ19mdW5jZGVmXzEoc2VsZik6Ci0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIGRlZiBuZXh0KGEpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsICJDYWxscyB0byBidWlsdGluIG5leHQoKSBwb3NzaWJseSBzaGFkb3dlZCIpCi0KLSAgICBkZWYgdGVzdF9zaGFkb3dpbmdfZnVuY2RlZl8yKHNlbGYpOgotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICBkZWYgbmV4dChhKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgIGNsYXNzIEE6Ci0gICAgICAgICAgICAgICAgZGVmIG5leHQoc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgaXQubmV4dCgpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgYSA9ICIiIgotICAgICAgICAgICAgZGVmIG5leHQoYSk6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICBjbGFzcyBBOgotICAgICAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICBpdC5fX25leHRfXygpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi53YXJucyhiLCBhLCAiQ2FsbHMgdG8gYnVpbHRpbiBuZXh0KCkgcG9zc2libHkgc2hhZG93ZWQiKQotCi0gICAgZGVmIHRlc3Rfc2hhZG93aW5nX2dsb2JhbF8xKHNlbGYpOgotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICBkZWYgZigpOgotICAgICAgICAgICAgICAgIGdsb2JhbCBuZXh0Ci0gICAgICAgICAgICAgICAgbmV4dCA9IDUKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCAiQ2FsbHMgdG8gYnVpbHRpbiBuZXh0KCkgcG9zc2libHkgc2hhZG93ZWQiKQotCi0gICAgZGVmIHRlc3Rfc2hhZG93aW5nX2dsb2JhbF8yKHNlbGYpOgotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICBkZWYgZigpOgotICAgICAgICAgICAgICAgIGdsb2JhbCBhLCBuZXh0LCBiCi0gICAgICAgICAgICAgICAgbmV4dCA9IDUKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCAiQ2FsbHMgdG8gYnVpbHRpbiBuZXh0KCkgcG9zc2libHkgc2hhZG93ZWQiKQotCi0gICAgZGVmIHRlc3Rfc2hhZG93aW5nX2Zvcl9zaW1wbGUoc2VsZik6Ci0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIGZvciBuZXh0IGluIGl0KCk6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICBiID0gNQotICAgICAgICAgICAgYyA9IDYKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCAiQ2FsbHMgdG8gYnVpbHRpbiBuZXh0KCkgcG9zc2libHkgc2hhZG93ZWQiKQotCi0gICAgZGVmIHRlc3Rfc2hhZG93aW5nX2Zvcl90dXBsZV8xKHNlbGYpOgotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICBmb3IgbmV4dCwgYiBpbiBpdCgpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgYiA9IDUKLSAgICAgICAgICAgIGMgPSA2Ci0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgIkNhbGxzIHRvIGJ1aWx0aW4gbmV4dCgpIHBvc3NpYmx5IHNoYWRvd2VkIikKLQotICAgIGRlZiB0ZXN0X3NoYWRvd2luZ19mb3JfdHVwbGVfMihzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgZm9yIGEsIChuZXh0LCBjKSwgYiBpbiBpdCgpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgYiA9IDUKLSAgICAgICAgICAgIGMgPSA2Ci0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgIkNhbGxzIHRvIGJ1aWx0aW4gbmV4dCgpIHBvc3NpYmx5IHNoYWRvd2VkIikKLQotICAgIGRlZiB0ZXN0X25vbmNhbGxfYWNjZXNzXzEoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJnbmV4dCA9IGcubmV4dCIiIgotICAgICAgICBhID0gIiIiZ25leHQgPSBnLl9fbmV4dF9fIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X25vbmNhbGxfYWNjZXNzXzIoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJmKGcubmV4dCArIDUpIiIiCi0gICAgICAgIGEgPSAiIiJmKGcuX19uZXh0X18gKyA1KSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9ub25jYWxsX2FjY2Vzc18zKHNlbGYpOgotICAgICAgICBiID0gIiIiZihnKCkubmV4dCArIDUpIiIiCi0gICAgICAgIGEgPSAiIiJmKGcoKS5fX25leHRfXyArIDUpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotY2xhc3MgVGVzdF9ub256ZXJvKEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gIm5vbnplcm8iCi0KLSAgICBkZWYgdGVzdF8xKHNlbGYpOgotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICBjbGFzcyBBOgotICAgICAgICAgICAgICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIGNsYXNzIEE6Ci0gICAgICAgICAgICAgICAgZGVmIF9fYm9vbF9fKHNlbGYpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMihzZWxmKToKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgY2xhc3MgQShvYmplY3QpOgotICAgICAgICAgICAgICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIGNsYXNzIEEob2JqZWN0KToKLSAgICAgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfMShzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgY2xhc3MgQShvYmplY3QpOgotICAgICAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfMihzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgY2xhc3MgQShvYmplY3QpOgotICAgICAgICAgICAgICAgIGRlZiBfX25vbnplcm9fXyhzZWxmLCBhKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfZnVuYyhzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi1jbGFzcyBUZXN0X251bWxpdGVyYWxzKEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gIm51bWxpdGVyYWxzIgotCi0gICAgZGVmIHRlc3Rfb2N0YWxfMShzZWxmKToKLSAgICAgICAgYiA9ICIiIjA3NTUiIiIKLSAgICAgICAgYSA9ICIiIjBvNzU1IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2xvbmdfaW50XzEoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJhID0gMTJMIiIiCi0gICAgICAgIGEgPSAiIiJhID0gMTIiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfbG9uZ19pbnRfMihzZWxmKToKLSAgICAgICAgYiA9ICIiImEgPSAxMmwiIiIKLSAgICAgICAgYSA9ICIiImEgPSAxMiIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9sb25nX2hleChzZWxmKToKLSAgICAgICAgYiA9ICIiImIgPSAweDEybCIiIgotICAgICAgICBhID0gIiIiYiA9IDB4MTIiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfY29tbWVudHNfYW5kX3NwYWNpbmcoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJiID0gICAweDEyTCIiIgotICAgICAgICBhID0gIiIiYiA9ICAgMHgxMiIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiImIgPSAwNzU1ICMgc3BhbSIiIgotICAgICAgICBhID0gIiIiYiA9IDBvNzU1ICMgc3BhbSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfaW50KHNlbGYpOgotICAgICAgICBzID0gIiIiNSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgZGVmIHRlc3RfdW5jaGFuZ2VkX2Zsb2F0KHNlbGYpOgotICAgICAgICBzID0gIiIiNS4wIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfb2N0YWwoc2VsZik6Ci0gICAgICAgIHMgPSAiIiIwbzc1NSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgZGVmIHRlc3RfdW5jaGFuZ2VkX2hleChzZWxmKToKLSAgICAgICAgcyA9ICIiIjB4QUJDIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfZXhwKHNlbGYpOgotICAgICAgICBzID0gIiIiNS4wZTEwIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfY29tcGxleF9pbnQoc2VsZik6Ci0gICAgICAgIHMgPSAiIiI1ICsgNGoiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgIGRlZiB0ZXN0X3VuY2hhbmdlZF9jb21wbGV4X2Zsb2F0KHNlbGYpOgotICAgICAgICBzID0gIiIiNS40ICsgNC45aiIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgZGVmIHRlc3RfdW5jaGFuZ2VkX2NvbXBsZXhfYmFyZShzZWxmKToKLSAgICAgICAgcyA9ICIiIjRqIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0gICAgICAgIHMgPSAiIiI0LjRqIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLWNsYXNzIFRlc3RfcmVuYW1lcyhGaXhlclRlc3RDYXNlKToKLSAgICBmaXhlciA9ICJyZW5hbWVzIgotCi0gICAgbW9kdWxlcyA9IHsic3lzIjogICgibWF4aW50IiwgIm1heHNpemUiKSwKLSAgICAgICAgICAgICAgfQotCi0gICAgZGVmIHRlc3RfaW1wb3J0X2Zyb20oc2VsZik6Ci0gICAgICAgIGZvciBtb2QsIChvbGQsIG5ldykgaW4gc2VsZi5tb2R1bGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICBiID0gImZyb20gJXMgaW1wb3J0ICVzIiAlIChtb2QsIG9sZCkKLSAgICAgICAgICAgIGEgPSAiZnJvbSAlcyBpbXBvcnQgJXMiICUgKG1vZCwgbmV3KQotICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgICAgICBzID0gImZyb20gZm9vIGltcG9ydCAlcyIgJSBvbGQKLSAgICAgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF9pbXBvcnRfZnJvbV9hcyhzZWxmKToKLSAgICAgICAgZm9yIG1vZCwgKG9sZCwgbmV3KSBpbiBzZWxmLm1vZHVsZXMuaXRlbXMoKToKLSAgICAgICAgICAgIGIgPSAiZnJvbSAlcyBpbXBvcnQgJXMgYXMgZm9vX2JhciIgJSAobW9kLCBvbGQpCi0gICAgICAgICAgICBhID0gImZyb20gJXMgaW1wb3J0ICVzIGFzIGZvb19iYXIiICUgKG1vZCwgbmV3KQotICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfaW1wb3J0X21vZHVsZV91c2FnZShzZWxmKToKLSAgICAgICAgZm9yIG1vZCwgKG9sZCwgbmV3KSBpbiBzZWxmLm1vZHVsZXMuaXRlbXMoKToKLSAgICAgICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgICAgICBpbXBvcnQgJXMKLSAgICAgICAgICAgICAgICBmb28oJXMsICVzLiVzKQotICAgICAgICAgICAgICAgICIiIiAlIChtb2QsIG1vZCwgbW9kLCBvbGQpCi0gICAgICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICAgICAgaW1wb3J0ICVzCi0gICAgICAgICAgICAgICAgZm9vKCVzLCAlcy4lcykKLSAgICAgICAgICAgICAgICAiIiIgJSAobW9kLCBtb2QsIG1vZCwgbmV3KQotICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIFhYWF90ZXN0X2Zyb21faW1wb3J0X3VzYWdlKHNlbGYpOgotICAgICAgICAjIG5vdCBpbXBsZW1lbnRlZCB5ZXQKLSAgICAgICAgZm9yIG1vZCwgKG9sZCwgbmV3KSBpbiBzZWxmLm1vZHVsZXMuaXRlbXMoKToKLSAgICAgICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgICAgICBmcm9tICVzIGltcG9ydCAlcwotICAgICAgICAgICAgICAgIGZvbyglcywgJXMpCi0gICAgICAgICAgICAgICAgIiIiICUgKG1vZCwgb2xkLCBtb2QsIG9sZCkKLSAgICAgICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgICAgICBmcm9tICVzIGltcG9ydCAlcwotICAgICAgICAgICAgICAgIGZvbyglcywgJXMpCi0gICAgICAgICAgICAgICAgIiIiICUgKG1vZCwgbmV3LCBtb2QsIG5ldykKLSAgICAgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotY2xhc3MgVGVzdF91bmljb2RlKEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gInVuaWNvZGUiCi0KLSAgICBkZWYgdGVzdF93aGl0ZXNwYWNlKHNlbGYpOgotICAgICAgICBiID0gIiIidW5pY29kZSggeCkiIiIKLSAgICAgICAgYSA9ICIiInN0ciggeCkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiIgdW5pY29kZSh4ICkiIiIKLSAgICAgICAgYSA9ICIiIiBzdHIoeCApIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiIHUnaCciIiIKLSAgICAgICAgYSA9ICIiIiAnaCciIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdW5pY29kZV9jYWxsKHNlbGYpOgotICAgICAgICBiID0gIiIidW5pY29kZSh4LCB5LCB6KSIiIgotICAgICAgICBhID0gIiIic3RyKHgsIHksIHopIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3VuaWNocihzZWxmKToKLSAgICAgICAgYiA9ICIiInVuaWNocih1J2gnKSIiIgotICAgICAgICBhID0gIiIiY2hyKCdoJykiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdW5pY29kZV9saXRlcmFsXzEoc2VsZik6Ci0gICAgICAgIGIgPSAnJyd1IngiJycnCi0gICAgICAgIGEgPSAnJycieCInJycKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdW5pY29kZV9saXRlcmFsXzIoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ1cid4JyIiIgotICAgICAgICBhID0gIiIicid4JyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF91bmljb2RlX2xpdGVyYWxfMyhzZWxmKToKLSAgICAgICAgYiA9ICIiIlVSJycneCcnJyAiIiIKLSAgICAgICAgYSA9ICIiIlInJyd4JycnICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLWNsYXNzIFRlc3RfY2FsbGFibGUoRml4ZXJUZXN0Q2FzZSk6Ci0gICAgZml4ZXIgPSAiY2FsbGFibGUiCi0KLSAgICBkZWYgdGVzdF9wcmVmaXhfcHJlc2VydmF0aW9uKHNlbGYpOgotICAgICAgICBiID0gIiIiY2FsbGFibGUoICAgIHgpIiIiCi0gICAgICAgIGEgPSAiIiJpbXBvcnQgY29sbGVjdGlvbnNcbmlzaW5zdGFuY2UoICAgIHgsIGNvbGxlY3Rpb25zLkNhbGxhYmxlKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiImlmICAgICBjYWxsYWJsZSh4KTogcGFzcyIiIgotICAgICAgICBhID0gIiIiaW1wb3J0IGNvbGxlY3Rpb25zCi1pZiAgICAgaXNpbnN0YW5jZSh4LCBjb2xsZWN0aW9ucy5DYWxsYWJsZSk6IHBhc3MiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfY2FsbGFibGVfY2FsbChzZWxmKToKLSAgICAgICAgYiA9ICIiImNhbGxhYmxlKHgpIiIiCi0gICAgICAgIGEgPSAiIiJpbXBvcnQgY29sbGVjdGlvbnNcbmlzaW5zdGFuY2UoeCwgY29sbGVjdGlvbnMuQ2FsbGFibGUpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2dsb2JhbF9pbXBvcnQoc2VsZik6Ci0gICAgICAgIGIgPSAiIiIKLWRlZiBzcGFtKGZvbyk6Ci0gICAgY2FsbGFibGUoZm9vKSIiIlsxOl0KLSAgICAgICAgYSA9ICIiIgotaW1wb3J0IGNvbGxlY3Rpb25zCi1kZWYgc3BhbShmb28pOgotICAgIGlzaW5zdGFuY2UoZm9vLCBjb2xsZWN0aW9ucy5DYWxsYWJsZSkiIiJbMTpdCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiCi1pbXBvcnQgY29sbGVjdGlvbnMKLWRlZiBzcGFtKGZvbyk6Ci0gICAgY2FsbGFibGUoZm9vKSIiIlsxOl0KLSAgICAgICAgIyBzYW1lIG91dHB1dCBpZiBpdCB3YXMgYWxyZWFkeSBpbXBvcnRlZAotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiIgotZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgKgotZGVmIHNwYW0oZm9vKToKLSAgICBjYWxsYWJsZShmb28pIiIiWzE6XQotICAgICAgICBhID0gIiIiCi1mcm9tIGNvbGxlY3Rpb25zIGltcG9ydCAqCi1pbXBvcnQgY29sbGVjdGlvbnMKLWRlZiBzcGFtKGZvbyk6Ci0gICAgaXNpbnN0YW5jZShmb28sIGNvbGxlY3Rpb25zLkNhbGxhYmxlKSIiIlsxOl0KLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiIKLWRvX3N0dWZmKCkKLWRvX3NvbWVfb3RoZXJfc3R1ZmYoKQotYXNzZXJ0IGNhbGxhYmxlKGRvX3N0dWZmKSIiIlsxOl0KLSAgICAgICAgYSA9ICIiIgotaW1wb3J0IGNvbGxlY3Rpb25zCi1kb19zdHVmZigpCi1kb19zb21lX290aGVyX3N0dWZmKCkKLWFzc2VydCBpc2luc3RhbmNlKGRvX3N0dWZmLCBjb2xsZWN0aW9ucy5DYWxsYWJsZSkiIiJbMTpdCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiCi1pZiBpc2luc3RhbmNlKGRvX3N0dWZmLCBDYWxsYWJsZSk6Ci0gICAgYXNzZXJ0IGNhbGxhYmxlKGRvX3N0dWZmKQotICAgIGRvX3N0dWZmKGRvX3N0dWZmKQotICAgIGlmIG5vdCBjYWxsYWJsZShkb19zdHVmZik6Ci0gICAgICAgIGV4aXQoMSkKLSAgICBlbHNlOgotICAgICAgICBhc3NlcnQgY2FsbGFibGUoZG9fc3R1ZmYpCi1lbHNlOgotICAgIGFzc2VydCBub3QgY2FsbGFibGUoZG9fc3R1ZmYpIiIiWzE6XQotICAgICAgICBhID0gIiIiCi1pbXBvcnQgY29sbGVjdGlvbnMKLWlmIGlzaW5zdGFuY2UoZG9fc3R1ZmYsIENhbGxhYmxlKToKLSAgICBhc3NlcnQgaXNpbnN0YW5jZShkb19zdHVmZiwgY29sbGVjdGlvbnMuQ2FsbGFibGUpCi0gICAgZG9fc3R1ZmYoZG9fc3R1ZmYpCi0gICAgaWYgbm90IGlzaW5zdGFuY2UoZG9fc3R1ZmYsIGNvbGxlY3Rpb25zLkNhbGxhYmxlKToKLSAgICAgICAgZXhpdCgxKQotICAgIGVsc2U6Ci0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRvX3N0dWZmLCBjb2xsZWN0aW9ucy5DYWxsYWJsZSkKLWVsc2U6Ci0gICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKGRvX3N0dWZmLCBjb2xsZWN0aW9ucy5DYWxsYWJsZSkiIiJbMTpdCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2NhbGxhYmxlX3Nob3VsZF9ub3RfY2hhbmdlKHNlbGYpOgotICAgICAgICBhID0gIiIiY2FsbGFibGUoKngpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0KLSAgICAgICAgYSA9ICIiImNhbGxhYmxlKHgsIHkpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0KLSAgICAgICAgYSA9ICIiImNhbGxhYmxlKHgsIGt3PXkpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0KLSAgICAgICAgYSA9ICIiImNhbGxhYmxlKCkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLQotY2xhc3MgVGVzdF9maWx0ZXIoRml4ZXJUZXN0Q2FzZSk6Ci0gICAgZml4ZXIgPSAiZmlsdGVyIgotCi0gICAgZGVmIHRlc3RfcHJlZml4X3ByZXNlcnZhdGlvbihzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSAgIGZpbHRlciggICAgZm9vLCAgICAgJ2FiYycgICApIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gICBsaXN0KGZpbHRlciggICAgZm9vLCAgICAgJ2FiYycgICApKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInggPSAgIGZpbHRlciggIE5vbmUgLCAnYWJjJyAgKSIiIgotICAgICAgICBhID0gIiIieCA9ICAgW19mIGZvciBfZiBpbiAnYWJjJyBpZiBfZl0iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfZmlsdGVyX2Jhc2ljKHNlbGYpOgotICAgICAgICBiID0gIiIieCA9IGZpbHRlcihOb25lLCAnYWJjJykiIiIKLSAgICAgICAgYSA9ICIiInggPSBbX2YgZm9yIF9mIGluICdhYmMnIGlmIF9mXSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInggPSBsZW4oZmlsdGVyKGYsICdhYmMnKSkiIiIKLSAgICAgICAgYSA9ICIiInggPSBsZW4obGlzdChmaWx0ZXIoZiwgJ2FiYycpKSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJ4ID0gZmlsdGVyKGxhbWJkYSB4OiB4JTIgPT0gMCwgcmFuZ2UoMTApKSIiIgotICAgICAgICBhID0gIiIieCA9IFt4IGZvciB4IGluIHJhbmdlKDEwKSBpZiB4JTIgPT0gMF0iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgICMgTm90ZSB0aGUgcGFyZW5zIGFyb3VuZCB4Ci0gICAgICAgIGIgPSAiIiJ4ID0gZmlsdGVyKGxhbWJkYSAoeCk6IHglMiA9PSAwLCByYW5nZSgxMCkpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gW3ggZm9yIHggaW4gcmFuZ2UoMTApIGlmIHglMiA9PSAwXSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgIyBYWFggVGhpcyAocmFyZSkgY2FzZSBpcyBub3Qgc3VwcG9ydGVkCi0jIyAgICAgICAgIGIgPSAiIiJ4ID0gZmlsdGVyKGYsICdhYmMnKVswXSIiIgotIyMgICAgICAgICBhID0gIiIieCA9IGxpc3QoZmlsdGVyKGYsICdhYmMnKSlbMF0iIiIKLSMjICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfZmlsdGVyX25vY2hhbmdlKHNlbGYpOgotICAgICAgICBhID0gIiIiYi5qb2luKGZpbHRlcihmLCAnYWJjJykpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiIoYSArIGZvbyg1KSkuam9pbihmaWx0ZXIoZiwgJ2FiYycpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIiaXRlcihmaWx0ZXIoZiwgJ2FiYycpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIibGlzdChmaWx0ZXIoZiwgJ2FiYycpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIibGlzdChmaWx0ZXIoZiwgJ2FiYycpKVswXSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIic2V0KGZpbHRlcihmLCAnYWJjJykpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiJzZXQoZmlsdGVyKGYsICdhYmMnKSkucG9wKCkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiInR1cGxlKGZpbHRlcihmLCAnYWJjJykpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiJhbnkoZmlsdGVyKGYsICdhYmMnKSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiImFsbChmaWx0ZXIoZiwgJ2FiYycpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIic3VtKGZpbHRlcihmLCAnYWJjJykpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiJzb3J0ZWQoZmlsdGVyKGYsICdhYmMnKSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiInNvcnRlZChmaWx0ZXIoZiwgJ2FiYycpLCBrZXk9YmxhaCkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiInNvcnRlZChmaWx0ZXIoZiwgJ2FiYycpLCBrZXk9YmxhaClbMF0iIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiImVudW1lcmF0ZShmaWx0ZXIoZiwgJ2FiYycpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIiZW51bWVyYXRlKGZpbHRlcihmLCAnYWJjJyksIHN0YXJ0PTEpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiJmb3IgaSBpbiBmaWx0ZXIoZiwgJ2FiYycpOiBwYXNzIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiJbeCBmb3IgeCBpbiBmaWx0ZXIoZiwgJ2FiYycpXSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIiKHggZm9yIHggaW4gZmlsdGVyKGYsICdhYmMnKSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLQotICAgIGRlZiB0ZXN0X2Z1dHVyZV9idWlsdGlucyhzZWxmKToKLSAgICAgICAgYSA9ICJmcm9tIGZ1dHVyZV9idWlsdGlucyBpbXBvcnQgc3BhbSwgZmlsdGVyOyBmaWx0ZXIoZiwgJ2hhbScpIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotCi0gICAgICAgIGIgPSAiIiJmcm9tIGZ1dHVyZV9idWlsdGlucyBpbXBvcnQgc3BhbTsgeCA9IGZpbHRlcihmLCAnYWJjJykiIiIKLSAgICAgICAgYSA9ICIiImZyb20gZnV0dXJlX2J1aWx0aW5zIGltcG9ydCBzcGFtOyB4ID0gbGlzdChmaWx0ZXIoZiwgJ2FiYycpKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYSA9ICJmcm9tIGZ1dHVyZV9idWlsdGlucyBpbXBvcnQgKjsgZmlsdGVyKGYsICdoYW0nKSIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLQotY2xhc3MgVGVzdF9tYXAoRml4ZXJUZXN0Q2FzZSk6Ci0gICAgZml4ZXIgPSAibWFwIgotCi0gICAgZGVmIGNoZWNrKHNlbGYsIGIsIGEpOgotICAgICAgICBzZWxmLnVuY2hhbmdlZCgiZnJvbSBmdXR1cmVfYnVpbHRpbnMgaW1wb3J0IG1hcDsgIiArIGIsIGEpCi0gICAgICAgIHN1cGVyKFRlc3RfbWFwLCBzZWxmKS5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfcHJlZml4X3ByZXNlcnZhdGlvbihzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSAgICBtYXAoICAgZiwgICAgJ2FiYycgICApIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gICAgbGlzdChtYXAoICAgZiwgICAgJ2FiYycgICApKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF90cmFpbGluZ19jb21tZW50KHNlbGYpOgotICAgICAgICBiID0gIiIieCA9IG1hcChmLCAnYWJjJykgICAjICAgZm9vIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gbGlzdChtYXAoZiwgJ2FiYycpKSAgICMgICBmb28iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfTm9uZV93aXRoX211bHRpcGxlX2FyZ3VtZW50cyhzZWxmKToKLSAgICAgICAgcyA9ICIiInggPSBtYXAoTm9uZSwgYSwgYiwgYykiIiIKLSAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgImNhbm5vdCBjb252ZXJ0IG1hcChOb25lLCAuLi4pIHdpdGggIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYXJndW1lbnRzIikKLQotICAgIGRlZiB0ZXN0X21hcF9iYXNpYyhzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSBtYXAoZiwgJ2FiYycpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gbGlzdChtYXAoZiwgJ2FiYycpKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInggPSBsZW4obWFwKGYsICdhYmMnLCAnZGVmJykpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gbGVuKGxpc3QobWFwKGYsICdhYmMnLCAnZGVmJykpKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInggPSBtYXAoTm9uZSwgJ2FiYycpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gbGlzdCgnYWJjJykiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJ4ID0gbWFwKGxhbWJkYSB4OiB4KzEsIHJhbmdlKDQpKSIiIgotICAgICAgICBhID0gIiIieCA9IFt4KzEgZm9yIHggaW4gcmFuZ2UoNCldIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICAjIE5vdGUgdGhlIHBhcmVucyBhcm91bmQgeAotICAgICAgICBiID0gIiIieCA9IG1hcChsYW1iZGEgKHgpOiB4KzEsIHJhbmdlKDQpKSIiIgotICAgICAgICBhID0gIiIieCA9IFt4KzEgZm9yIHggaW4gcmFuZ2UoNCldIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICBmb28oKQotICAgICAgICAgICAgIyBmb28KLSAgICAgICAgICAgIG1hcChmLCB4KQotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIGZvbygpCi0gICAgICAgICAgICAjIGZvbwotICAgICAgICAgICAgbGlzdChtYXAoZiwgeCkpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi53YXJucyhiLCBhLCAiWW91IHNob3VsZCB1c2UgYSBmb3IgbG9vcCBoZXJlIikKLQotICAgICAgICAjIFhYWCBUaGlzIChyYXJlKSBjYXNlIGlzIG5vdCBzdXBwb3J0ZWQKLSMjICAgICAgICAgYiA9ICIiInggPSBtYXAoZiwgJ2FiYycpWzBdIiIiCi0jIyAgICAgICAgIGEgPSAiIiJ4ID0gbGlzdChtYXAoZiwgJ2FiYycpKVswXSIiIgotIyMgICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9tYXBfbm9jaGFuZ2Uoc2VsZik6Ci0gICAgICAgIGEgPSAiIiJiLmpvaW4obWFwKGYsICdhYmMnKSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiIihhICsgZm9vKDUpKS5qb2luKG1hcChmLCAnYWJjJykpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiJpdGVyKG1hcChmLCAnYWJjJykpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiJsaXN0KG1hcChmLCAnYWJjJykpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiJsaXN0KG1hcChmLCAnYWJjJykpWzBdIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiJzZXQobWFwKGYsICdhYmMnKSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiInNldChtYXAoZiwgJ2FiYycpKS5wb3AoKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIidHVwbGUobWFwKGYsICdhYmMnKSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiImFueShtYXAoZiwgJ2FiYycpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIiYWxsKG1hcChmLCAnYWJjJykpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiJzdW0obWFwKGYsICdhYmMnKSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiInNvcnRlZChtYXAoZiwgJ2FiYycpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIic29ydGVkKG1hcChmLCAnYWJjJyksIGtleT1ibGFoKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIic29ydGVkKG1hcChmLCAnYWJjJyksIGtleT1ibGFoKVswXSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIiZW51bWVyYXRlKG1hcChmLCAnYWJjJykpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiJlbnVtZXJhdGUobWFwKGYsICdhYmMnKSwgc3RhcnQ9MSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiImZvciBpIGluIG1hcChmLCAnYWJjJyk6IHBhc3MiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiIlt4IGZvciB4IGluIG1hcChmLCAnYWJjJyldIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiIoeCBmb3IgeCBpbiBtYXAoZiwgJ2FiYycpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotCi0gICAgZGVmIHRlc3RfZnV0dXJlX2J1aWx0aW5zKHNlbGYpOgotICAgICAgICBhID0gImZyb20gZnV0dXJlX2J1aWx0aW5zIGltcG9ydCBzcGFtLCBtYXAsIGVnZ3M7IG1hcChmLCAnaGFtJykiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0KLSAgICAgICAgYiA9ICIiImZyb20gZnV0dXJlX2J1aWx0aW5zIGltcG9ydCBzcGFtLCBlZ2dzOyB4ID0gbWFwKGYsICdhYmMnKSIiIgotICAgICAgICBhID0gIiIiZnJvbSBmdXR1cmVfYnVpbHRpbnMgaW1wb3J0IHNwYW0sIGVnZ3M7IHggPSBsaXN0KG1hcChmLCAnYWJjJykpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBhID0gImZyb20gZnV0dXJlX2J1aWx0aW5zIGltcG9ydCAqOyBtYXAoZiwgJ2hhbScpIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotCi1jbGFzcyBUZXN0X3ppcChGaXhlclRlc3RDYXNlKToKLSAgICBmaXhlciA9ICJ6aXAiCi0KLSAgICBkZWYgY2hlY2soc2VsZiwgYiwgYSk6Ci0gICAgICAgIHNlbGYudW5jaGFuZ2VkKCJmcm9tIGZ1dHVyZV9idWlsdGlucyBpbXBvcnQgemlwOyAiICsgYiwgYSkKLSAgICAgICAgc3VwZXIoVGVzdF96aXAsIHNlbGYpLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF96aXBfYmFzaWMoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ4ID0gemlwKGEsIGIsIGMpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gbGlzdCh6aXAoYSwgYiwgYykpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIieCA9IGxlbih6aXAoYSwgYikpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gbGVuKGxpc3QoemlwKGEsIGIpKSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfemlwX25vY2hhbmdlKHNlbGYpOgotICAgICAgICBhID0gIiIiYi5qb2luKHppcChhLCBiKSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiIihhICsgZm9vKDUpKS5qb2luKHppcChhLCBiKSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiIml0ZXIoemlwKGEsIGIpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIibGlzdCh6aXAoYSwgYikpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiJsaXN0KHppcChhLCBiKSlbMF0iIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiInNldCh6aXAoYSwgYikpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiJzZXQoemlwKGEsIGIpKS5wb3AoKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIidHVwbGUoemlwKGEsIGIpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIiYW55KHppcChhLCBiKSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiImFsbCh6aXAoYSwgYikpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiJzdW0oemlwKGEsIGIpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIic29ydGVkKHppcChhLCBiKSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiInNvcnRlZCh6aXAoYSwgYiksIGtleT1ibGFoKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIic29ydGVkKHppcChhLCBiKSwga2V5PWJsYWgpWzBdIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0gICAgICAgIGEgPSAiIiJlbnVtZXJhdGUoemlwKGEsIGIpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIiZW51bWVyYXRlKHppcChhLCBiKSwgc3RhcnQ9MSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLSAgICAgICAgYSA9ICIiImZvciBpIGluIHppcChhLCBiKTogcGFzcyIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIiW3ggZm9yIHggaW4gemlwKGEsIGIpXSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotICAgICAgICBhID0gIiIiKHggZm9yIHggaW4gemlwKGEsIGIpKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChhKQotCi0gICAgZGVmIHRlc3RfZnV0dXJlX2J1aWx0aW5zKHNlbGYpOgotICAgICAgICBhID0gImZyb20gZnV0dXJlX2J1aWx0aW5zIGltcG9ydCBzcGFtLCB6aXAsIGVnZ3M7IHppcChhLCBiKSIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLQotICAgICAgICBiID0gIiIiZnJvbSBmdXR1cmVfYnVpbHRpbnMgaW1wb3J0IHNwYW0sIGVnZ3M7IHggPSB6aXAoYSwgYikiIiIKLSAgICAgICAgYSA9ICIiImZyb20gZnV0dXJlX2J1aWx0aW5zIGltcG9ydCBzcGFtLCBlZ2dzOyB4ID0gbGlzdCh6aXAoYSwgYikpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBhID0gImZyb20gZnV0dXJlX2J1aWx0aW5zIGltcG9ydCAqOyB6aXAoYSwgYikiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKGEpCi0KLWNsYXNzIFRlc3Rfc3RhbmRhcmRlcnJvcihGaXhlclRlc3RDYXNlKToKLSAgICBmaXhlciA9ICJzdGFuZGFyZGVycm9yIgotCi0gICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ4ID0gICAgU3RhbmRhcmRFcnJvcigpIiIiCi0gICAgICAgIGEgPSAiIiJ4ID0gICAgRXhjZXB0aW9uKCkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJ4ID0gU3RhbmRhcmRFcnJvcihhLCBiLCBjKSIiIgotICAgICAgICBhID0gIiIieCA9IEV4Y2VwdGlvbihhLCBiLCBjKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiImYoMiArIFN0YW5kYXJkRXJyb3IoYSwgYiwgYykpIiIiCi0gICAgICAgIGEgPSAiIiJmKDIgKyBFeGNlcHRpb24oYSwgYiwgYykpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotY2xhc3MgVGVzdF90eXBlcyhGaXhlclRlc3RDYXNlKToKLSAgICBmaXhlciA9ICJ0eXBlcyIKLQotICAgIGRlZiB0ZXN0X2Jhc2ljX3R5cGVzX2NvbnZlcnQoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ0eXBlcy5TdHJpbmdUeXBlIiIiCi0gICAgICAgIGEgPSAiIiJieXRlcyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInR5cGVzLkRpY3RUeXBlIiIiCi0gICAgICAgIGEgPSAiIiJkaWN0IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIidHlwZXMgLiBJbnRUeXBlIiIiCi0gICAgICAgIGEgPSAiIiJpbnQiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJ0eXBlcy5MaXN0VHlwZSIiIgotICAgICAgICBhID0gIiIibGlzdCIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInR5cGVzLkxvbmdUeXBlIiIiCi0gICAgICAgIGEgPSAiIiJpbnQiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJ0eXBlcy5Ob25lVHlwZSIiIgotICAgICAgICBhID0gIiIidHlwZShOb25lKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLWNsYXNzIFRlc3RfaWRpb21zKEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gImlkaW9tcyIKLQotICAgIGRlZiB0ZXN0X3doaWxlKHNlbGYpOgotICAgICAgICBiID0gIiIid2hpbGUgMTogZm9vKCkiIiIKLSAgICAgICAgYSA9ICIiIndoaWxlIFRydWU6IGZvbygpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIid2hpbGUgICAxOiBmb28oKSIiIgotICAgICAgICBhID0gIiIid2hpbGUgICBUcnVlOiBmb28oKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICBmb28oKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgZm9vKCkKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF93aGlsZV91bmNoYW5nZWQoc2VsZik6Ci0gICAgICAgIHMgPSAiIiJ3aGlsZSAxMTogZm9vKCkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICBzID0gIiIid2hpbGUgMDogZm9vKCkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICBzID0gIiIid2hpbGUgZm9vKCk6IGZvbygpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICAgICAgcyA9ICIiIndoaWxlIFtdOiBmb28oKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgZGVmIHRlc3RfZXFfc2ltcGxlKHNlbGYpOgotICAgICAgICBiID0gIiIidHlwZSh4KSA9PSBUIiIiCi0gICAgICAgIGEgPSAiIiJpc2luc3RhbmNlKHgsIFQpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiaWYgICB0eXBlKHgpID09IFQ6IHBhc3MiIiIKLSAgICAgICAgYSA9ICIiImlmICAgaXNpbnN0YW5jZSh4LCBUKTogcGFzcyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9lcV9yZXZlcnNlKHNlbGYpOgotICAgICAgICBiID0gIiIiVCA9PSB0eXBlKHgpIiIiCi0gICAgICAgIGEgPSAiIiJpc2luc3RhbmNlKHgsIFQpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiaWYgICBUID09IHR5cGUoeCk6IHBhc3MiIiIKLSAgICAgICAgYSA9ICIiImlmICAgaXNpbnN0YW5jZSh4LCBUKTogcGFzcyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9lcV9leHByZXNzaW9uKHNlbGYpOgotICAgICAgICBiID0gIiIidHlwZSh4K3kpID09IGQuZ2V0KCdUJykiIiIKLSAgICAgICAgYSA9ICIiImlzaW5zdGFuY2UoeCt5LCBkLmdldCgnVCcpKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInR5cGUoICAgeCAgKyAgeSkgPT0gZC5nZXQoJ1QnKSIiIgotICAgICAgICBhID0gIiIiaXNpbnN0YW5jZSh4ICArICB5LCBkLmdldCgnVCcpKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9pc19zaW1wbGUoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ0eXBlKHgpIGlzIFQiIiIKLSAgICAgICAgYSA9ICIiImlzaW5zdGFuY2UoeCwgVCkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJpZiAgIHR5cGUoeCkgaXMgVDogcGFzcyIiIgotICAgICAgICBhID0gIiIiaWYgICBpc2luc3RhbmNlKHgsIFQpOiBwYXNzIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2lzX3JldmVyc2Uoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJUIGlzIHR5cGUoeCkiIiIKLSAgICAgICAgYSA9ICIiImlzaW5zdGFuY2UoeCwgVCkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJpZiAgIFQgaXMgdHlwZSh4KTogcGFzcyIiIgotICAgICAgICBhID0gIiIiaWYgICBpc2luc3RhbmNlKHgsIFQpOiBwYXNzIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2lzX2V4cHJlc3Npb24oc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ0eXBlKHgreSkgaXMgZC5nZXQoJ1QnKSIiIgotICAgICAgICBhID0gIiIiaXNpbnN0YW5jZSh4K3ksIGQuZ2V0KCdUJykpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIidHlwZSggICB4ICArICB5KSBpcyBkLmdldCgnVCcpIiIiCi0gICAgICAgIGEgPSAiIiJpc2luc3RhbmNlKHggICsgIHksIGQuZ2V0KCdUJykpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2lzX25vdF9zaW1wbGUoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJ0eXBlKHgpIGlzIG5vdCBUIiIiCi0gICAgICAgIGEgPSAiIiJub3QgaXNpbnN0YW5jZSh4LCBUKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiImlmICAgdHlwZSh4KSBpcyBub3QgVDogcGFzcyIiIgotICAgICAgICBhID0gIiIiaWYgICBub3QgaXNpbnN0YW5jZSh4LCBUKTogcGFzcyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9pc19ub3RfcmV2ZXJzZShzZWxmKToKLSAgICAgICAgYiA9ICIiIlQgaXMgbm90IHR5cGUoeCkiIiIKLSAgICAgICAgYSA9ICIiIm5vdCBpc2luc3RhbmNlKHgsIFQpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiaWYgICBUIGlzIG5vdCB0eXBlKHgpOiBwYXNzIiIiCi0gICAgICAgIGEgPSAiIiJpZiAgIG5vdCBpc2luc3RhbmNlKHgsIFQpOiBwYXNzIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2lzX25vdF9leHByZXNzaW9uKHNlbGYpOgotICAgICAgICBiID0gIiIidHlwZSh4K3kpIGlzIG5vdCBkLmdldCgnVCcpIiIiCi0gICAgICAgIGEgPSAiIiJub3QgaXNpbnN0YW5jZSh4K3ksIGQuZ2V0KCdUJykpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIidHlwZSggICB4ICArICB5KSBpcyBub3QgZC5nZXQoJ1QnKSIiIgotICAgICAgICBhID0gIiIibm90IGlzaW5zdGFuY2UoeCAgKyAgeSwgZC5nZXQoJ1QnKSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfbmVfc2ltcGxlKHNlbGYpOgotICAgICAgICBiID0gIiIidHlwZSh4KSAhPSBUIiIiCi0gICAgICAgIGEgPSAiIiJub3QgaXNpbnN0YW5jZSh4LCBUKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiImlmICAgdHlwZSh4KSAhPSBUOiBwYXNzIiIiCi0gICAgICAgIGEgPSAiIiJpZiAgIG5vdCBpc2luc3RhbmNlKHgsIFQpOiBwYXNzIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X25lX3JldmVyc2Uoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJUICE9IHR5cGUoeCkiIiIKLSAgICAgICAgYSA9ICIiIm5vdCBpc2luc3RhbmNlKHgsIFQpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiaWYgICBUICE9IHR5cGUoeCk6IHBhc3MiIiIKLSAgICAgICAgYSA9ICIiImlmICAgbm90IGlzaW5zdGFuY2UoeCwgVCk6IHBhc3MiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfbmVfZXhwcmVzc2lvbihzZWxmKToKLSAgICAgICAgYiA9ICIiInR5cGUoeCt5KSAhPSBkLmdldCgnVCcpIiIiCi0gICAgICAgIGEgPSAiIiJub3QgaXNpbnN0YW5jZSh4K3ksIGQuZ2V0KCdUJykpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIidHlwZSggICB4ICArICB5KSAhPSBkLmdldCgnVCcpIiIiCi0gICAgICAgIGEgPSAiIiJub3QgaXNpbnN0YW5jZSh4ICArICB5LCBkLmdldCgnVCcpKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF90eXBlX3VuY2hhbmdlZChzZWxmKToKLSAgICAgICAgYSA9ICIiInR5cGUoeCkuX19uYW1lX18iIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoYSkKLQotICAgIGRlZiB0ZXN0X3NvcnRfbGlzdF9jYWxsKHNlbGYpOgotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICB2ID0gbGlzdCh0KQotICAgICAgICAgICAgdi5zb3J0KCkKLSAgICAgICAgICAgIGZvbyh2KQotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIHYgPSBzb3J0ZWQodCkKLSAgICAgICAgICAgIGZvbyh2KQotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICB2ID0gbGlzdChmb28oYikgKyBkKQotICAgICAgICAgICAgdi5zb3J0KCkKLSAgICAgICAgICAgIGZvbyh2KQotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIHYgPSBzb3J0ZWQoZm9vKGIpICsgZCkKLSAgICAgICAgICAgIGZvbyh2KQotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICB3aGlsZSB4OgotICAgICAgICAgICAgICAgIHYgPSBsaXN0KHQpCi0gICAgICAgICAgICAgICAgdi5zb3J0KCkKLSAgICAgICAgICAgICAgICBmb28odikKLSAgICAgICAgICAgICIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICB3aGlsZSB4OgotICAgICAgICAgICAgICAgIHYgPSBzb3J0ZWQodCkKLSAgICAgICAgICAgICAgICBmb28odikKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgdiA9IGxpc3QodCkKLSAgICAgICAgICAgICMgZm9vCi0gICAgICAgICAgICB2LnNvcnQoKQotICAgICAgICAgICAgZm9vKHYpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgYSA9ICIiIgotICAgICAgICAgICAgdiA9IHNvcnRlZCh0KQotICAgICAgICAgICAgIyBmb28KLSAgICAgICAgICAgIGZvbyh2KQotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gciIiIgotICAgICAgICAgICAgdiA9IGxpc3QoICAgdCkKLSAgICAgICAgICAgIHYuc29ydCgpCi0gICAgICAgICAgICBmb28odikKLSAgICAgICAgICAgICIiIgotICAgICAgICBhID0gciIiIgotICAgICAgICAgICAgdiA9IHNvcnRlZCggICB0KQotICAgICAgICAgICAgZm9vKHYpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSByIiIiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbSA9IGxpc3QocykKLSAgICAgICAgICAgICAgICBtLnNvcnQoKQotICAgICAgICAgICAgZXhjZXB0OiBwYXNzCi0gICAgICAgICAgICAiIiIKLQotICAgICAgICBhID0gciIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG0gPSBzb3J0ZWQocykKLSAgICAgICAgICAgIGV4Y2VwdDogcGFzcwotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gciIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG0gPSBsaXN0KHMpCi0gICAgICAgICAgICAgICAgIyBmb28KLSAgICAgICAgICAgICAgICBtLnNvcnQoKQotICAgICAgICAgICAgZXhjZXB0OiBwYXNzCi0gICAgICAgICAgICAiIiIKLQotICAgICAgICBhID0gciIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG0gPSBzb3J0ZWQocykKLSAgICAgICAgICAgICAgICAjIGZvbwotICAgICAgICAgICAgZXhjZXB0OiBwYXNzCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSByIiIiCi0gICAgICAgICAgICBtID0gbGlzdChzKQotICAgICAgICAgICAgIyBtb3JlIGNvbW1lbnRzCi0gICAgICAgICAgICBtLnNvcnQoKSIiIgotCi0gICAgICAgIGEgPSByIiIiCi0gICAgICAgICAgICBtID0gc29ydGVkKHMpCi0gICAgICAgICAgICAjIG1vcmUgY29tbWVudHMiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3Rfc29ydF9zaW1wbGVfZXhwcihzZWxmKToKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgdiA9IHQKLSAgICAgICAgICAgIHYuc29ydCgpCi0gICAgICAgICAgICBmb28odikKLSAgICAgICAgICAgICIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICB2ID0gc29ydGVkKHQpCi0gICAgICAgICAgICBmb28odikKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgdiA9IGZvbyhiKQotICAgICAgICAgICAgdi5zb3J0KCkKLSAgICAgICAgICAgIGZvbyh2KQotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIHYgPSBzb3J0ZWQoZm9vKGIpKQotICAgICAgICAgICAgZm9vKHYpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIHYgPSBiLmtleXMoKQotICAgICAgICAgICAgdi5zb3J0KCkKLSAgICAgICAgICAgIGZvbyh2KQotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIHYgPSBzb3J0ZWQoYi5rZXlzKCkpCi0gICAgICAgICAgICBmb28odikKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgdiA9IGZvbyhiKSArIGQKLSAgICAgICAgICAgIHYuc29ydCgpCi0gICAgICAgICAgICBmb28odikKLSAgICAgICAgICAgICIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICB2ID0gc29ydGVkKGZvbyhiKSArIGQpCi0gICAgICAgICAgICBmb28odikKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgd2hpbGUgeDoKLSAgICAgICAgICAgICAgICB2ID0gdAotICAgICAgICAgICAgICAgIHYuc29ydCgpCi0gICAgICAgICAgICAgICAgZm9vKHYpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgYSA9ICIiIgotICAgICAgICAgICAgd2hpbGUgeDoKLSAgICAgICAgICAgICAgICB2ID0gc29ydGVkKHQpCi0gICAgICAgICAgICAgICAgZm9vKHYpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgIHYgPSB0Ci0gICAgICAgICAgICAjIGZvbwotICAgICAgICAgICAgdi5zb3J0KCkKLSAgICAgICAgICAgIGZvbyh2KQotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIHYgPSBzb3J0ZWQodCkKLSAgICAgICAgICAgICMgZm9vCi0gICAgICAgICAgICBmb28odikKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9IHIiIiIKLSAgICAgICAgICAgIHYgPSAgIHQKLSAgICAgICAgICAgIHYuc29ydCgpCi0gICAgICAgICAgICBmb28odikKLSAgICAgICAgICAgICIiIgotICAgICAgICBhID0gciIiIgotICAgICAgICAgICAgdiA9ICAgc29ydGVkKHQpCi0gICAgICAgICAgICBmb28odikKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9zb3J0X3VuY2hhbmdlZChzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgdiA9IGxpc3QodCkKLSAgICAgICAgICAgIHcuc29ydCgpCi0gICAgICAgICAgICBmb28odykKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIHYgPSBsaXN0KHQpCi0gICAgICAgICAgICB2LnNvcnQodSkKLSAgICAgICAgICAgIGZvbyh2KQotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLWNsYXNzIFRlc3RfYmFzZXN0cmluZyhGaXhlclRlc3RDYXNlKToKLSAgICBmaXhlciA9ICJiYXNlc3RyaW5nIgotCi0gICAgZGVmIHRlc3RfYmFzZXN0cmluZyhzZWxmKToKLSAgICAgICAgYiA9ICIiImlzaW5zdGFuY2UoeCwgYmFzZXN0cmluZykiIiIKLSAgICAgICAgYSA9ICIiImlzaW5zdGFuY2UoeCwgc3RyKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLWNsYXNzIFRlc3RfYnVmZmVyKEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gImJ1ZmZlciIKLQotICAgIGRlZiB0ZXN0X2J1ZmZlcihzZWxmKToKLSAgICAgICAgYiA9ICIiInggPSBidWZmZXIoeSkiIiIKLSAgICAgICAgYSA9ICIiInggPSBtZW1vcnl2aWV3KHkpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3NsaWNpbmcoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJidWZmZXIoeSlbNDo1XSIiIgotICAgICAgICBhID0gIiIibWVtb3J5dmlldyh5KVs0OjVdIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotY2xhc3MgVGVzdF9mdXR1cmUoRml4ZXJUZXN0Q2FzZSk6Ci0gICAgZml4ZXIgPSAiZnV0dXJlIgotCi0gICAgZGVmIHRlc3RfZnV0dXJlKHNlbGYpOgotICAgICAgICBiID0gIiIiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBicmFjZXMiIiIKLSAgICAgICAgYSA9ICIiIiIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiIiMgY29tbWVudFxuZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBicmFjZXMiIiIKLSAgICAgICAgYSA9ICIiIiMgY29tbWVudFxuIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBicmFjZXNcbiMgY29tbWVudCIiIgotICAgICAgICBhID0gIiIiXG4jIGNvbW1lbnQiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfcnVuX29yZGVyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9ydW5zX2FmdGVyKCdwcmludCcpCi0KLWNsYXNzIFRlc3RfaXRlcnRvb2xzKEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gIml0ZXJ0b29scyIKLQotICAgIGRlZiBjaGVja2FsbChzZWxmLCBiZWZvcmUsIGFmdGVyKToKLSAgICAgICAgIyBCZWNhdXNlIHdlIG5lZWQgdG8gY2hlY2sgd2l0aCBhbmQgd2l0aG91dCB0aGUgaXRlcnRvb2xzIHByZWZpeAotICAgICAgICAjIGFuZCBvbiBlYWNoIG9mIHRoZSB0aHJlZSBmdW5jdGlvbnMsIHRoZXNlIGxvb3BzIG1ha2UgaXQgYWxsCi0gICAgICAgICMgbXVjaCBlYXNpZXIKLSAgICAgICAgZm9yIGkgaW4gKCdpdGVydG9vbHMuJywgJycpOgotICAgICAgICAgICAgZm9yIGYgaW4gKCdtYXAnLCAnZmlsdGVyJywgJ3ppcCcpOgotICAgICAgICAgICAgICAgIGIgPSBiZWZvcmUgJShpKydpJytmKQotICAgICAgICAgICAgICAgIGEgPSBhZnRlciAlKGYpCi0gICAgICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMChzZWxmKToKLSAgICAgICAgIyBBIHNpbXBsZSBleGFtcGxlIC0tIHRlc3RfMSBjb3ZlcnMgZXhhY3RseSB0aGUgc2FtZSB0aGluZywKLSAgICAgICAgIyBidXQgaXQncyBub3QgcXVpdGUgYXMgY2xlYXIuCi0gICAgICAgIGIgPSAiaXRlcnRvb2xzLml6aXAoYSwgYikiCi0gICAgICAgIGEgPSAiemlwKGEsIGIpIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8xKHNlbGYpOgotICAgICAgICBiID0gIiIiJXMoZiwgYSkiIiIKLSAgICAgICAgYSA9ICIiIiVzKGYsIGEpIiIiCi0gICAgICAgIHNlbGYuY2hlY2thbGwoYiwgYSkKLQotICAgIGRlZiB0ZXN0X3F1YWxpZmllZChzZWxmKToKLSAgICAgICAgYiA9ICIiIml0ZXJ0b29scy5pZmlsdGVyZmFsc2UoYSwgYikiIiIKLSAgICAgICAgYSA9ICIiIml0ZXJ0b29scy5maWx0ZXJmYWxzZShhLCBiKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiIml0ZXJ0b29scy5pemlwX2xvbmdlc3QoYSwgYikiIiIKLSAgICAgICAgYSA9ICIiIml0ZXJ0b29scy56aXBfbG9uZ2VzdChhLCBiKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8yKHNlbGYpOgotICAgICAgICBiID0gIiIiaWZpbHRlcmZhbHNlKGEsIGIpIiIiCi0gICAgICAgIGEgPSAiIiJmaWx0ZXJmYWxzZShhLCBiKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiIml6aXBfbG9uZ2VzdChhLCBiKSIiIgotICAgICAgICBhID0gIiIiemlwX2xvbmdlc3QoYSwgYikiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3Rfc3BhY2VfMShzZWxmKToKLSAgICAgICAgYiA9ICIiIiAgICAlcyhmLCBhKSIiIgotICAgICAgICBhID0gIiIiICAgICVzKGYsIGEpIiIiCi0gICAgICAgIHNlbGYuY2hlY2thbGwoYiwgYSkKLQotICAgIGRlZiB0ZXN0X3NwYWNlXzIoc2VsZik6Ci0gICAgICAgIGIgPSAiIiIgICAgaXRlcnRvb2xzLmlmaWx0ZXJmYWxzZShhLCBiKSIiIgotICAgICAgICBhID0gIiIiICAgIGl0ZXJ0b29scy5maWx0ZXJmYWxzZShhLCBiKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiIiAgICBpdGVydG9vbHMuaXppcF9sb25nZXN0KGEsIGIpIiIiCi0gICAgICAgIGEgPSAiIiIgICAgaXRlcnRvb2xzLnppcF9sb25nZXN0KGEsIGIpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3J1bl9vcmRlcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfcnVuc19hZnRlcignbWFwJywgJ3ppcCcsICdmaWx0ZXInKQotCi0KLWNsYXNzIFRlc3RfaXRlcnRvb2xzX2ltcG9ydHMoRml4ZXJUZXN0Q2FzZSk6Ci0gICAgZml4ZXIgPSAnaXRlcnRvb2xzX2ltcG9ydHMnCi0KLSAgICBkZWYgdGVzdF9yZWR1Y2VkKHNlbGYpOgotICAgICAgICBiID0gImZyb20gaXRlcnRvb2xzIGltcG9ydCBpbWFwLCBpemlwLCBmb28iCi0gICAgICAgIGEgPSAiZnJvbSBpdGVydG9vbHMgaW1wb3J0IGZvbyIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiZnJvbSBpdGVydG9vbHMgaW1wb3J0IGJhciwgaW1hcCwgaXppcCwgZm9vIgotICAgICAgICBhID0gImZyb20gaXRlcnRvb2xzIGltcG9ydCBiYXIsIGZvbyIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluLCBpbWFwLCBpemlwIgotICAgICAgICBhID0gImZyb20gaXRlcnRvb2xzIGltcG9ydCBjaGFpbiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfY29tbWVudHMoc2VsZik6Ci0gICAgICAgIGIgPSAiI2Zvb1xuZnJvbSBpdGVydG9vbHMgaW1wb3J0IGltYXAsIGl6aXAiCi0gICAgICAgIGEgPSAiI2Zvb1xuIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9ub25lKHNlbGYpOgotICAgICAgICBiID0gImZyb20gaXRlcnRvb2xzIGltcG9ydCBpbWFwLCBpemlwIgotICAgICAgICBhID0gIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiZnJvbSBpdGVydG9vbHMgaW1wb3J0IGl6aXAiCi0gICAgICAgIGEgPSAiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9pbXBvcnRfYXMoc2VsZik6Ci0gICAgICAgIGIgPSAiZnJvbSBpdGVydG9vbHMgaW1wb3J0IGl6aXAsIGJhciBhcyBiYW5nLCBpbWFwIgotICAgICAgICBhID0gImZyb20gaXRlcnRvb2xzIGltcG9ydCBiYXIgYXMgYmFuZyIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiZnJvbSBpdGVydG9vbHMgaW1wb3J0IGl6aXAgYXMgX3ppcCwgaW1hcCwgYmFyIgotICAgICAgICBhID0gImZyb20gaXRlcnRvb2xzIGltcG9ydCBiYXIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gImZyb20gaXRlcnRvb2xzIGltcG9ydCBpbWFwIGFzIF9tYXAiCi0gICAgICAgIGEgPSAiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICJmcm9tIGl0ZXJ0b29scyBpbXBvcnQgaW1hcCBhcyBfbWFwLCBpemlwIGFzIF96aXAiCi0gICAgICAgIGEgPSAiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgcyA9ICJmcm9tIGl0ZXJ0b29scyBpbXBvcnQgYmFyIGFzIGJhbmciCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF9pZmlsdGVyX2FuZF96aXBfbG9uZ2VzdChzZWxmKToKLSAgICAgICAgZm9yIG5hbWUgaW4gImZpbHRlcmZhbHNlIiwgInppcF9sb25nZXN0IjoKLSAgICAgICAgICAgIGIgPSAiZnJvbSBpdGVydG9vbHMgaW1wb3J0IGklcyIgJSAobmFtZSwpCi0gICAgICAgICAgICBhID0gImZyb20gaXRlcnRvb2xzIGltcG9ydCAlcyIgJSAobmFtZSwpCi0gICAgICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgICAgIGIgPSAiZnJvbSBpdGVydG9vbHMgaW1wb3J0IGltYXAsIGklcywgZm9vIiAlIChuYW1lLCkKLSAgICAgICAgICAgIGEgPSAiZnJvbSBpdGVydG9vbHMgaW1wb3J0ICVzLCBmb28iICUgKG5hbWUsKQotICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgICAgICBiID0gImZyb20gaXRlcnRvb2xzIGltcG9ydCBiYXIsIGklcywgZm9vIiAlIChuYW1lLCkKLSAgICAgICAgICAgIGEgPSAiZnJvbSBpdGVydG9vbHMgaW1wb3J0IGJhciwgJXMsIGZvbyIgJSAobmFtZSwpCi0gICAgICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9pbXBvcnRfc3RhcihzZWxmKToKLSAgICAgICAgcyA9ICJmcm9tIGl0ZXJ0b29scyBpbXBvcnQgKiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotCi0gICAgZGVmIHRlc3RfdW5jaGFuZ2VkKHNlbGYpOgotICAgICAgICBzID0gImZyb20gaXRlcnRvb2xzIGltcG9ydCBmb28iCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLQotY2xhc3MgVGVzdF9pbXBvcnQoRml4ZXJUZXN0Q2FzZSk6Ci0gICAgZml4ZXIgPSAiaW1wb3J0IgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzdXBlcihUZXN0X2ltcG9ydCwgc2VsZikuc2V0VXAoKQotICAgICAgICAjIE5lZWQgdG8gcmVwbGFjZSBmaXhfaW1wb3J0J3MgZXhpc3RzIG1ldGhvZAotICAgICAgICAjIHNvIHdlIGNhbiBjaGVjayB0aGF0IGl0J3MgZG9pbmcgdGhlIHJpZ2h0IHRoaW5nCi0gICAgICAgIHNlbGYuZmlsZXNfY2hlY2tlZCA9IFtdCi0gICAgICAgIHNlbGYucHJlc2VudF9maWxlcyA9IHNldCgpCi0gICAgICAgIHNlbGYuYWx3YXlzX2V4aXN0cyA9IFRydWUKLSAgICAgICAgZGVmIGZha2VfZXhpc3RzKG5hbWUpOgotICAgICAgICAgICAgc2VsZi5maWxlc19jaGVja2VkLmFwcGVuZChuYW1lKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuYWx3YXlzX2V4aXN0cyBvciAobmFtZSBpbiBzZWxmLnByZXNlbnRfZmlsZXMpCi0KLSAgICAgICAgZnJvbSBsaWIydG8zLmZpeGVzIGltcG9ydCBmaXhfaW1wb3J0Ci0gICAgICAgIGZpeF9pbXBvcnQuZXhpc3RzID0gZmFrZV9leGlzdHMKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgZnJvbSBsaWIydG8zLmZpeGVzIGltcG9ydCBmaXhfaW1wb3J0Ci0gICAgICAgIGZpeF9pbXBvcnQuZXhpc3RzID0gb3MucGF0aC5leGlzdHMKLQotICAgIGRlZiBjaGVja19ib3RoKHNlbGYsIGIsIGEpOgotICAgICAgICBzZWxmLmFsd2F5c19leGlzdHMgPSBUcnVlCi0gICAgICAgIHN1cGVyKFRlc3RfaW1wb3J0LCBzZWxmKS5jaGVjayhiLCBhKQotICAgICAgICBzZWxmLmFsd2F5c19leGlzdHMgPSBGYWxzZQotICAgICAgICBzdXBlcihUZXN0X2ltcG9ydCwgc2VsZikudW5jaGFuZ2VkKGIpCi0KLSAgICBkZWYgdGVzdF9maWxlc19jaGVja2VkKHNlbGYpOgotICAgICAgICBkZWYgcChwYXRoKToKLSAgICAgICAgICAgICMgVGFrZXMgYSB1bml4IHBhdGggYW5kIHJldHVybnMgYSBwYXRoIHdpdGggY29ycmVjdCBzZXBhcmF0b3JzCi0gICAgICAgICAgICByZXR1cm4gb3MucGF0aC5wYXRoc2VwLmpvaW4ocGF0aC5zcGxpdCgiLyIpKQotCi0gICAgICAgIHNlbGYuYWx3YXlzX2V4aXN0cyA9IEZhbHNlCi0gICAgICAgIHNlbGYucHJlc2VudF9maWxlcyA9IHNldChbJ19faW5pdF9fLnB5J10pCi0gICAgICAgIGV4cGVjdGVkX2V4dGVuc2lvbnMgPSAoJy5weScsIG9zLnBhdGguc2VwLCAnLnB5YycsICcuc28nLCAnLnNsJywgJy5weWQnKQotICAgICAgICBuYW1lc190b190ZXN0ID0gKHAoIi9zcGFtL2VnZ3MucHkiKSwgIm5pLnB5IiwgcCgiLi4vLi4vc2hydWJiZXJ5LnB5IikpCi0KLSAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXNfdG9fdGVzdDoKLSAgICAgICAgICAgIHNlbGYuZmlsZXNfY2hlY2tlZCA9IFtdCi0gICAgICAgICAgICBzZWxmLmZpbGVuYW1lID0gbmFtZQotICAgICAgICAgICAgc2VsZi51bmNoYW5nZWQoImltcG9ydCBqYW0iKQotCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmRpcm5hbWUobmFtZSk6Ci0gICAgICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguZGlybmFtZShuYW1lKSArICcvamFtJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBuYW1lID0gJ2phbScKLSAgICAgICAgICAgIGV4cGVjdGVkX2NoZWNrcyA9IHNldChuYW1lICsgZXh0IGZvciBleHQgaW4gZXhwZWN0ZWRfZXh0ZW5zaW9ucykKLSAgICAgICAgICAgIGV4cGVjdGVkX2NoZWNrcy5hZGQoIl9faW5pdF9fLnB5IikKLQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5maWxlc19jaGVja2VkKSwgZXhwZWN0ZWRfY2hlY2tzKQotCi0gICAgZGVmIHRlc3Rfbm90X2luX3BhY2thZ2Uoc2VsZik6Ci0gICAgICAgIHMgPSAiaW1wb3J0IGJhciIKLSAgICAgICAgc2VsZi5hbHdheXNfZXhpc3RzID0gRmFsc2UKLSAgICAgICAgc2VsZi5wcmVzZW50X2ZpbGVzID0gc2V0KFsiYmFyLnB5Il0pCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF93aXRoX2Fic29sdXRlX2ltcG9ydF9lbmFibGVkKHNlbGYpOgotICAgICAgICBzID0gImZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0XG5pbXBvcnQgYmFyIgotICAgICAgICBzZWxmLmFsd2F5c19leGlzdHMgPSBGYWxzZQotICAgICAgICBzZWxmLnByZXNlbnRfZmlsZXMgPSBzZXQoWyJfX2luaXRfXy5weSIsICJiYXIucHkiXSkKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgIGRlZiB0ZXN0X2luX3BhY2thZ2Uoc2VsZik6Ci0gICAgICAgIGIgPSAiaW1wb3J0IGJhciIKLSAgICAgICAgYSA9ICJmcm9tIC4gaW1wb3J0IGJhciIKLSAgICAgICAgc2VsZi5hbHdheXNfZXhpc3RzID0gRmFsc2UKLSAgICAgICAgc2VsZi5wcmVzZW50X2ZpbGVzID0gc2V0KFsiX19pbml0X18ucHkiLCAiYmFyLnB5Il0pCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2ltcG9ydF9mcm9tX3BhY2thZ2Uoc2VsZik6Ci0gICAgICAgIGIgPSAiaW1wb3J0IGJhciIKLSAgICAgICAgYSA9ICJmcm9tIC4gaW1wb3J0IGJhciIKLSAgICAgICAgc2VsZi5hbHdheXNfZXhpc3RzID0gRmFsc2UKLSAgICAgICAgc2VsZi5wcmVzZW50X2ZpbGVzID0gc2V0KFsiX19pbml0X18ucHkiLCAiYmFyIiArIG9zLnBhdGguc2VwXSkKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfYWxyZWFkeV9yZWxhdGl2ZV9pbXBvcnQoc2VsZik6Ci0gICAgICAgIHMgPSAiZnJvbSAuIGltcG9ydCBiYXIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF9jb21tZW50c19hbmRfaW5kZW50KHNlbGYpOgotICAgICAgICBiID0gImltcG9ydCBiYXIgIyBGb28iCi0gICAgICAgIGEgPSAiZnJvbSAuIGltcG9ydCBiYXIgIyBGb28iCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2Zyb20oc2VsZik6Ci0gICAgICAgIGIgPSAiZnJvbSBmb28gaW1wb3J0IGJhciwgYmF6IgotICAgICAgICBhID0gImZyb20gLmZvbyBpbXBvcnQgYmFyLCBiYXoiCi0gICAgICAgIHNlbGYuY2hlY2tfYm90aChiLCBhKQotCi0gICAgICAgIGIgPSAiZnJvbSBmb28gaW1wb3J0IGJhciIKLSAgICAgICAgYSA9ICJmcm9tIC5mb28gaW1wb3J0IGJhciIKLSAgICAgICAgc2VsZi5jaGVja19ib3RoKGIsIGEpCi0KLSAgICAgICAgYiA9ICJmcm9tIGZvbyBpbXBvcnQgKGJhciwgYmF6KSIKLSAgICAgICAgYSA9ICJmcm9tIC5mb28gaW1wb3J0IChiYXIsIGJheikiCi0gICAgICAgIHNlbGYuY2hlY2tfYm90aChiLCBhKQotCi0gICAgZGVmIHRlc3RfZG90dGVkX2Zyb20oc2VsZik6Ci0gICAgICAgIGIgPSAiZnJvbSBncmVlbi5lZ2dzIGltcG9ydCBoYW0iCi0gICAgICAgIGEgPSAiZnJvbSAuZ3JlZW4uZWdncyBpbXBvcnQgaGFtIgotICAgICAgICBzZWxmLmNoZWNrX2JvdGgoYiwgYSkKLQotICAgIGRlZiB0ZXN0X2Zyb21fYXMoc2VsZik6Ci0gICAgICAgIGIgPSAiZnJvbSBncmVlbi5lZ2dzIGltcG9ydCBoYW0gYXMgc3BhbSIKLSAgICAgICAgYSA9ICJmcm9tIC5ncmVlbi5lZ2dzIGltcG9ydCBoYW0gYXMgc3BhbSIKLSAgICAgICAgc2VsZi5jaGVja19ib3RoKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9pbXBvcnQoc2VsZik6Ci0gICAgICAgIGIgPSAiaW1wb3J0IGZvbyIKLSAgICAgICAgYSA9ICJmcm9tIC4gaW1wb3J0IGZvbyIKLSAgICAgICAgc2VsZi5jaGVja19ib3RoKGIsIGEpCi0KLSAgICAgICAgYiA9ICJpbXBvcnQgZm9vLCBiYXIiCi0gICAgICAgIGEgPSAiZnJvbSAuIGltcG9ydCBmb28sIGJhciIKLSAgICAgICAgc2VsZi5jaGVja19ib3RoKGIsIGEpCi0KLSAgICAgICAgYiA9ICJpbXBvcnQgZm9vLCBiYXIsIHgiCi0gICAgICAgIGEgPSAiZnJvbSAuIGltcG9ydCBmb28sIGJhciwgeCIKLSAgICAgICAgc2VsZi5jaGVja19ib3RoKGIsIGEpCi0KLSAgICAgICAgYiA9ICJpbXBvcnQgeCwgeSwgeiIKLSAgICAgICAgYSA9ICJmcm9tIC4gaW1wb3J0IHgsIHksIHoiCi0gICAgICAgIHNlbGYuY2hlY2tfYm90aChiLCBhKQotCi0gICAgZGVmIHRlc3RfaW1wb3J0X2FzKHNlbGYpOgotICAgICAgICBiID0gImltcG9ydCBmb28gYXMgeCIKLSAgICAgICAgYSA9ICJmcm9tIC4gaW1wb3J0IGZvbyBhcyB4IgotICAgICAgICBzZWxmLmNoZWNrX2JvdGgoYiwgYSkKLQotICAgICAgICBiID0gImltcG9ydCBhIGFzIGIsIGIgYXMgYywgYyBhcyBkIgotICAgICAgICBhID0gImZyb20gLiBpbXBvcnQgYSBhcyBiLCBiIGFzIGMsIGMgYXMgZCIKLSAgICAgICAgc2VsZi5jaGVja19ib3RoKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9sb2NhbF9hbmRfYWJzb2x1dGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYWx3YXlzX2V4aXN0cyA9IEZhbHNlCi0gICAgICAgIHNlbGYucHJlc2VudF9maWxlcyA9IHNldChbImZvby5weSIsICJfX2luaXRfXy5weSJdKQotCi0gICAgICAgIHMgPSAiaW1wb3J0IGZvbywgYmFyIgotICAgICAgICBzZWxmLndhcm5zX3VuY2hhbmdlZChzLCAiYWJzb2x1dGUgYW5kIGxvY2FsIGltcG9ydHMgdG9nZXRoZXIiKQotCi0gICAgZGVmIHRlc3RfZG90dGVkX2ltcG9ydChzZWxmKToKLSAgICAgICAgYiA9ICJpbXBvcnQgZm9vLmJhciIKLSAgICAgICAgYSA9ICJmcm9tIC4gaW1wb3J0IGZvby5iYXIiCi0gICAgICAgIHNlbGYuY2hlY2tfYm90aChiLCBhKQotCi0gICAgZGVmIHRlc3RfZG90dGVkX2ltcG9ydF9hcyhzZWxmKToKLSAgICAgICAgYiA9ICJpbXBvcnQgZm9vLmJhciBhcyBiYW5nIgotICAgICAgICBhID0gImZyb20gLiBpbXBvcnQgZm9vLmJhciBhcyBiYW5nIgotICAgICAgICBzZWxmLmNoZWNrX2JvdGgoYiwgYSkKLQotICAgIGRlZiB0ZXN0X3ByZWZpeChzZWxmKToKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAjIHByZWZpeAotICAgICAgICBpbXBvcnQgZm9vLmJhcgotICAgICAgICAiIiIKLSAgICAgICAgYSA9ICIiIgotICAgICAgICAjIHByZWZpeAotICAgICAgICBmcm9tIC4gaW1wb3J0IGZvby5iYXIKLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuY2hlY2tfYm90aChiLCBhKQotCi0KLWNsYXNzIFRlc3Rfc2V0X2xpdGVyYWwoRml4ZXJUZXN0Q2FzZSk6Ci0KLSAgICBmaXhlciA9ICJzZXRfbGl0ZXJhbCIKLQotICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgotICAgICAgICBiID0gIiIic2V0KFsxLCAyLCAzXSkiIiIKLSAgICAgICAgYSA9ICIiInsxLCAyLCAzfSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInNldCgoMSwgMiwgMykpIiIiCi0gICAgICAgIGEgPSAiIiJ7MSwgMiwgM30iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJzZXQoKDEsKSkiIiIKLSAgICAgICAgYSA9ICIiInsxfSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInNldChbMV0pIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIic2V0KChhLCBiKSkiIiIKLSAgICAgICAgYSA9ICIiInthLCBifSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInNldChbYSwgYl0pIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIic2V0KChhKjIzNCwgZihhcmdzPTIzKSkpIiIiCi0gICAgICAgIGEgPSAiIiJ7YSoyMzQsIGYoYXJncz0yMyl9IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIic2V0KFthKjIzLCBmKDIzKV0pIiIiCi0gICAgICAgIGEgPSAiIiJ7YSoyMywgZigyMyl9IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIic2V0KFthLTIzNCoqMjNdKSIiIgotICAgICAgICBhID0gIiIie2EtMjM0KioyM30iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfbGlzdGNvbXBzKHNlbGYpOgotICAgICAgICBiID0gIiIic2V0KFt4IGZvciB4IGluIHldKSIiIgotICAgICAgICBhID0gIiIie3ggZm9yIHggaW4geX0iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJzZXQoW3ggZm9yIHggaW4geSBpZiB4ID09IG1dKSIiIgotICAgICAgICBhID0gIiIie3ggZm9yIHggaW4geSBpZiB4ID09IG19IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIic2V0KFt4IGZvciB4IGluIHkgZm9yIGEgaW4gYl0pIiIiCi0gICAgICAgIGEgPSAiIiJ7eCBmb3IgeCBpbiB5IGZvciBhIGluIGJ9IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIic2V0KFtmKHgpIC0gMjMgZm9yIHggaW4geV0pIiIiCi0gICAgICAgIGEgPSAiIiJ7Zih4KSAtIDIzIGZvciB4IGluIHl9IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3doaXRlc3BhY2Uoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJzZXQoIFsxLCAyXSkiIiIKLSAgICAgICAgYSA9ICIiInsxLCAyfSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInNldChbMSAsICAyXSkiIiIKLSAgICAgICAgYSA9ICIiInsxICwgIDJ9IiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIic2V0KFsgMSBdKSIiIgotICAgICAgICBhID0gIiIieyAxIH0iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJzZXQoIFsxXSApIiIiCi0gICAgICAgIGEgPSAiIiJ7MX0iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJzZXQoWyAgMSwgIDIgIF0pIiIiCi0gICAgICAgIGEgPSAiIiJ7ICAxLCAgMiAgfSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInNldChbeCAgZm9yIHggaW4geSBdKSIiIgotICAgICAgICBhID0gIiIie3ggIGZvciB4IGluIHkgfSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiInNldCgKLSAgICAgICAgICAgICAgICAgICBbMSwgMl0KLSAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICIiIgotICAgICAgICBhID0gIiIiezEsIDJ9XG4iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfY29tbWVudHMoc2VsZik6Ci0gICAgICAgIGIgPSAiIiJzZXQoKDEsIDIpKSAjIEhpIiIiCi0gICAgICAgIGEgPSAiIiJ7MSwgMn0gIyBIaSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgIyBUaGlzIGlzbid0IG9wdGltYWwgYmVoYXZpb3IsIGJ1dCB0aGUgZml4ZXIgaXMgb3B0aW9uYWwuCi0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgICAgICMgRm9vCi0gICAgICAgICAgICBzZXQoICMgQmFyCi0gICAgICAgICAgICAgICAoMSwgMikKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgICIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICAjIEZvbwotICAgICAgICAgICAgezEsIDJ9Ci0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfdW5jaGFuZ2VkKHNlbGYpOgotICAgICAgICBzID0gIiIic2V0KCkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICBzID0gIiIic2V0KGEpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICAgICAgcyA9ICIiInNldChhLCBiLCBjKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgICAgICMgRG9uJ3QgdHJhbnNmb3JtIGdlbmVyYXRvcnMgYmVjYXVzZSB0aGV5IG1pZ2h0IGhhdmUgdG8gYmUgbGF6eS4KLSAgICAgICAgcyA9ICIiInNldCh4IGZvciB4IGluIHkpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICAgICAgcyA9ICIiInNldCh4IGZvciB4IGluIHkgaWYgeikiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICBzID0gIiIic2V0KGEqODIzLTIzKioyICsgZigyMykpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLQotY2xhc3MgVGVzdF9zeXNfZXhjKEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gInN5c19leGMiCi0KLSAgICBkZWYgdGVzdF8wKHNlbGYpOgotICAgICAgICBiID0gInN5cy5leGNfdHlwZSIKLSAgICAgICAgYSA9ICJzeXMuZXhjX2luZm8oKVswXSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMShzZWxmKToKLSAgICAgICAgYiA9ICJzeXMuZXhjX3ZhbHVlIgotICAgICAgICBhID0gInN5cy5leGNfaW5mbygpWzFdIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8yKHNlbGYpOgotICAgICAgICBiID0gInN5cy5leGNfdHJhY2ViYWNrIgotICAgICAgICBhID0gInN5cy5leGNfaW5mbygpWzJdIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8zKHNlbGYpOgotICAgICAgICBiID0gInN5cy5leGNfdHlwZSAjIEZvbyIKLSAgICAgICAgYSA9ICJzeXMuZXhjX2luZm8oKVswXSAjIEZvbyIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfNChzZWxmKToKLSAgICAgICAgYiA9ICJzeXMuICBleGNfdHlwZSIKLSAgICAgICAgYSA9ICJzeXMuICBleGNfaW5mbygpWzBdIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF81KHNlbGYpOgotICAgICAgICBiID0gInN5cyAgLmV4Y190eXBlIgotICAgICAgICBhID0gInN5cyAgLmV4Y19pbmZvKClbMF0iCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotCi1jbGFzcyBUZXN0X3BhcmVuKEZpeGVyVGVzdENhc2UpOgotICAgIGZpeGVyID0gInBhcmVuIgotCi0gICAgZGVmIHRlc3RfMChzZWxmKToKLSAgICAgICAgYiA9ICIiIltpIGZvciBpIGluIDEsIDIgXSIiIgotICAgICAgICBhID0gIiIiW2kgZm9yIGkgaW4gKDEsIDIpIF0iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMShzZWxmKToKLSAgICAgICAgYiA9ICIiIltpIGZvciBpIGluIDEsIDIsIF0iIiIKLSAgICAgICAgYSA9ICIiIltpIGZvciBpIGluICgxLCAyLCkgXSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF8yKHNlbGYpOgotICAgICAgICBiID0gIiIiW2kgZm9yIGkgIGluICAgICAxLCAyIF0iIiIKLSAgICAgICAgYSA9ICIiIltpIGZvciBpICBpbiAgICAgKDEsIDIpIF0iIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfMyhzZWxmKToKLSAgICAgICAgYiA9ICIiIltpIGZvciBpIGluIDEsIDIgaWYgaV0iIiIKLSAgICAgICAgYSA9ICIiIltpIGZvciBpIGluICgxLCAyKSBpZiBpXSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF80KHNlbGYpOgotICAgICAgICBiID0gIiIiW2kgZm9yIGkgaW4gMSwgICAgMiAgICBdIiIiCi0gICAgICAgIGEgPSAiIiJbaSBmb3IgaSBpbiAoMSwgICAgMikgICAgXSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF81KHNlbGYpOgotICAgICAgICBiID0gIiIiKGkgZm9yIGkgaW4gMSwgMikiIiIKLSAgICAgICAgYSA9ICIiIihpIGZvciBpIGluICgxLCAyKSkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfNihzZWxmKToKLSAgICAgICAgYiA9ICIiIihpIGZvciBpIGluIDEgICAsMiAgIGlmIGkpIiIiCi0gICAgICAgIGEgPSAiIiIoaSBmb3IgaSBpbiAoMSAgICwyKSAgIGlmIGkpIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X3VuY2hhbmdlZF8wKHNlbGYpOgotICAgICAgICBzID0gIiIiW2kgZm9yIGkgaW4gKDEsIDIpXSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgZGVmIHRlc3RfdW5jaGFuZ2VkXzEoc2VsZik6Ci0gICAgICAgIHMgPSAiIiJbaSBmb3IgaSBpbiBmb28oKV0iIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgIGRlZiB0ZXN0X3VuY2hhbmdlZF8yKHNlbGYpOgotICAgICAgICBzID0gIiIiW2kgZm9yIGkgaW4gKDEsIDIpIGlmIG5vdGhpbmddIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWRfMyhzZWxmKToKLSAgICAgICAgcyA9ICIiIihpIGZvciBpIGluICgxLCAyKSkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgIGRlZiB0ZXN0X3VuY2hhbmdlZF80KHNlbGYpOgotICAgICAgICBzID0gIiIiW2kgZm9yIGkgaW4gbV0iIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotY2xhc3MgVGVzdF9tZXRhY2xhc3MoRml4ZXJUZXN0Q2FzZSk6Ci0KLSAgICBmaXhlciA9ICdtZXRhY2xhc3MnCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6Ci0gICAgICAgIHNlbGYudW5jaGFuZ2VkKCJjbGFzcyBYKCk6IHBhc3MiKQotICAgICAgICBzZWxmLnVuY2hhbmdlZCgiY2xhc3MgWChvYmplY3QpOiBwYXNzIikKLSAgICAgICAgc2VsZi51bmNoYW5nZWQoImNsYXNzIFgob2JqZWN0MSwgb2JqZWN0Mik6IHBhc3MiKQotICAgICAgICBzZWxmLnVuY2hhbmdlZCgiY2xhc3MgWChvYmplY3QxLCBvYmplY3QyLCBvYmplY3QzKTogcGFzcyIpCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKCJjbGFzcyBYKG1ldGFjbGFzcz1NZXRhKTogcGFzcyIpCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKCJjbGFzcyBYKGIsIGFyZz0yMywgbWV0Y2xhc3M9TWV0YSk6IHBhc3MiKQotICAgICAgICBzZWxmLnVuY2hhbmdlZCgiY2xhc3MgWChiLCBhcmc9MjMsIG1ldGFjbGFzcz1NZXRhLCBvdGhlcj00Mik6IHBhc3MiKQotCi0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgY2xhc3MgWDoKLSAgICAgICAgICAgIGRlZiBfX21ldGFjbGFzc19fKHNlbGYpOiBwYXNzCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgY2xhc3MgWDoKLSAgICAgICAgICAgIGFbMjNdID0gNzQKLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF9jb21tZW50cyhzZWxmKToKLSAgICAgICAgYiA9ICIiIgotICAgICAgICBjbGFzcyBYOgotICAgICAgICAgICAgIyBoaQotICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IEFwcGxlTWV0YQotICAgICAgICAiIiIKLSAgICAgICAgYSA9ICIiIgotICAgICAgICBjbGFzcyBYKG1ldGFjbGFzcz1BcHBsZU1ldGEpOgotICAgICAgICAgICAgIyBoaQotICAgICAgICAgICAgcGFzcwotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgY2xhc3MgWDoKLSAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBNZXRhCi0gICAgICAgICAgICAjIEJlZHRpbWUhCi0gICAgICAgICIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgIGNsYXNzIFgobWV0YWNsYXNzPU1ldGEpOgotICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIyBCZWR0aW1lIQotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfbWV0YShzZWxmKToKLSAgICAgICAgIyBuby1wYXJlbnQgY2xhc3MsIG9kZCBib2R5Ci0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgY2xhc3MgWCgpOgotICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IFEKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgY2xhc3MgWChtZXRhY2xhc3M9USk6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgIyBvbmUgcGFyZW50IGNsYXNzLCBubyBib2R5Ci0gICAgICAgIGIgPSAiIiJjbGFzcyBYKG9iamVjdCk6IF9fbWV0YWNsYXNzX18gPSBRIiIiCi0gICAgICAgIGEgPSAiIiJjbGFzcyBYKG9iamVjdCwgbWV0YWNsYXNzPVEpOiBwYXNzIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotCi0gICAgICAgICMgb25lIHBhcmVudCwgc2ltcGxlIGJvZHkKLSAgICAgICAgYiA9ICIiIgotICAgICAgICBjbGFzcyBYKG9iamVjdCk6Ci0gICAgICAgICAgICBfX21ldGFjbGFzc19fID0gTWV0YQotICAgICAgICAgICAgYmFyID0gNwotICAgICAgICAiIiIKLSAgICAgICAgYSA9ICIiIgotICAgICAgICBjbGFzcyBYKG9iamVjdCwgbWV0YWNsYXNzPU1ldGEpOgotICAgICAgICAgICAgYmFyID0gNwotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgY2xhc3MgWDoKLSAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBNZXRhOyB4ID0gNDsgZyA9IDIzCi0gICAgICAgICIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgIGNsYXNzIFgobWV0YWNsYXNzPU1ldGEpOgotICAgICAgICAgICAgeCA9IDQ7IGcgPSAyMwotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgICMgb25lIHBhcmVudCwgc2ltcGxlIGJvZHksIF9fbWV0YWNsYXNzX18gbGFzdAotICAgICAgICBiID0gIiIiCi0gICAgICAgIGNsYXNzIFgob2JqZWN0KToKLSAgICAgICAgICAgIGJhciA9IDcKLSAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBNZXRhCi0gICAgICAgICIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgIGNsYXNzIFgob2JqZWN0LCBtZXRhY2xhc3M9TWV0YSk6Ci0gICAgICAgICAgICBiYXIgPSA3Ci0gICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgIyByZWRlZmluaW5nIF9fbWV0YWNsYXNzX18KLSAgICAgICAgYiA9ICIiIgotICAgICAgICBjbGFzcyBYKCk6Ci0gICAgICAgICAgICBfX21ldGFjbGFzc19fID0gQQotICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IEIKLSAgICAgICAgICAgIGJhciA9IDcKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgY2xhc3MgWChtZXRhY2xhc3M9Qik6Ci0gICAgICAgICAgICBiYXIgPSA3Ci0gICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgIyBtdWx0aXBsZSBpbmhlcml0YW5jZSwgc2ltcGxlIGJvZHkKLSAgICAgICAgYiA9ICIiIgotICAgICAgICBjbGFzcyBYKGNsc0EsIGNsc0IpOgotICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IE1ldGEKLSAgICAgICAgICAgIGJhciA9IDcKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgY2xhc3MgWChjbHNBLCBjbHNCLCBtZXRhY2xhc3M9TWV0YSk6Ci0gICAgICAgICAgICBiYXIgPSA3Ci0gICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgIyBrZXl3b3JkcyBpbiB0aGUgY2xhc3Mgc3RhdGVtZW50Ci0gICAgICAgIGIgPSAiIiJjbGFzcyBtKGEsIGFyZz0yMyk6IF9fbWV0YWNsYXNzX18gPSBNZXRhIiIiCi0gICAgICAgIGEgPSAiIiJjbGFzcyBtKGEsIGFyZz0yMywgbWV0YWNsYXNzPU1ldGEpOiBwYXNzIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIiCi0gICAgICAgIGNsYXNzIFgoZXhwcmVzc2lvbigyICsgNCkpOgotICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IE1ldGEKLSAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgY2xhc3MgWChleHByZXNzaW9uKDIgKyA0KSwgbWV0YWNsYXNzPU1ldGEpOgotICAgICAgICAgICAgcGFzcwotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiIKLSAgICAgICAgY2xhc3MgWChleHByZXNzaW9uKDIgKyA0KSwgeCoqNCk6Ci0gICAgICAgICAgICBfX21ldGFjbGFzc19fID0gTWV0YQotICAgICAgICAiIiIKLSAgICAgICAgYSA9ICIiIgotICAgICAgICBjbGFzcyBYKGV4cHJlc3Npb24oMiArIDQpLCB4Kio0LCBtZXRhY2xhc3M9TWV0YSk6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiIgotICAgICAgICBjbGFzcyBYOgotICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IE1ldGEKLSAgICAgICAgICAgIHNhdmUucHkgPSAyMwotICAgICAgICAiIiIKLSAgICAgICAgYSA9ICIiIgotICAgICAgICBjbGFzcyBYKG1ldGFjbGFzcz1NZXRhKToKLSAgICAgICAgICAgIHNhdmUucHkgPSAyMwotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0KLWNsYXNzIFRlc3RfZ2V0Y3dkdShGaXhlclRlc3RDYXNlKToKLQotICAgIGZpeGVyID0gJ2dldGN3ZHUnCi0KLSAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKLSAgICAgICAgYiA9ICIiIm9zLmdldGN3ZHUiIiIKLSAgICAgICAgYSA9ICIiIm9zLmdldGN3ZCIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiIm9zLmdldGN3ZHUoKSIiIgotICAgICAgICBhID0gIiIib3MuZ2V0Y3dkKCkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJtZXRoID0gb3MuZ2V0Y3dkdSIiIgotICAgICAgICBhID0gIiIibWV0aCA9IG9zLmdldGN3ZCIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiIm9zLmdldGN3ZHUoYXJncykiIiIKLSAgICAgICAgYSA9ICIiIm9zLmdldGN3ZChhcmdzKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9jb21tZW50KHNlbGYpOgotICAgICAgICBiID0gIiIib3MuZ2V0Y3dkdSgpICMgRm9vIiIiCi0gICAgICAgIGEgPSAiIiJvcy5nZXRjd2QoKSAjIEZvbyIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6Ci0gICAgICAgIHMgPSAiIiJvcy5nZXRjd2QoKSIiIgotICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQotCi0gICAgICAgIHMgPSAiIiJnZXRjd2R1KCkiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKLQotICAgICAgICBzID0gIiIib3MuZ2V0Y3dkYigpIiIiCi0gICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCi0KLSAgICBkZWYgdGVzdF9pbmRlbnRhdGlvbihzZWxmKToKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgaWYgMToKLSAgICAgICAgICAgICAgICBvcy5nZXRjd2R1KCkKLSAgICAgICAgICAgICIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICBpZiAxOgotICAgICAgICAgICAgICAgIG9zLmdldGN3ZCgpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3RfbXVsdGlsYXRpb24oc2VsZik6Ci0gICAgICAgIGIgPSAiIiJvcyAuZ2V0Y3dkdSgpIiIiCi0gICAgICAgIGEgPSAiIiJvcyAuZ2V0Y3dkKCkiIiIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAiIiJvcy4gIGdldGN3ZHUiIiIKLSAgICAgICAgYSA9ICIiIm9zLiAgZ2V0Y3dkIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIiIib3MuZ2V0Y3dkdSAoICApIiIiCi0gICAgICAgIGEgPSAiIiJvcy5nZXRjd2QgKCAgKSIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLQotY2xhc3MgVGVzdF9vcGVyYXRvcihGaXhlclRlc3RDYXNlKToKLQotICAgIGZpeGVyID0gIm9wZXJhdG9yIgotCi0gICAgZGVmIHRlc3Rfb3BlcmF0b3JfaXNDYWxsYWJsZShzZWxmKToKLSAgICAgICAgYiA9ICJvcGVyYXRvci5pc0NhbGxhYmxlKHgpIgotICAgICAgICBhID0gImhhc2F0dHIoeCwgJ19fY2FsbF9fJykiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X29wZXJhdG9yX3NlcXVlbmNlSW5jbHVkZXMoc2VsZik6Ci0gICAgICAgIGIgPSAib3BlcmF0b3Iuc2VxdWVuY2VJbmNsdWRlcyh4LCB5KSIKLSAgICAgICAgYSA9ICJvcGVyYXRvci5jb250YWlucyh4LCB5KSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAib3BlcmF0b3IgLnNlcXVlbmNlSW5jbHVkZXMoeCwgeSkiCi0gICAgICAgIGEgPSAib3BlcmF0b3IgLmNvbnRhaW5zKHgsIHkpIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICJvcGVyYXRvci4gIHNlcXVlbmNlSW5jbHVkZXMoeCwgeSkiCi0gICAgICAgIGEgPSAib3BlcmF0b3IuICBjb250YWlucyh4LCB5KSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3Rfb3BlcmF0b3JfaXNTZXF1ZW5jZVR5cGUoc2VsZik6Ci0gICAgICAgIGIgPSAib3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoeCkiCi0gICAgICAgIGEgPSAiaW1wb3J0IGNvbGxlY3Rpb25zXG5pc2luc3RhbmNlKHgsIGNvbGxlY3Rpb25zLlNlcXVlbmNlKSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3Rfb3BlcmF0b3JfaXNNYXBwaW5nVHlwZShzZWxmKToKLSAgICAgICAgYiA9ICJvcGVyYXRvci5pc01hcHBpbmdUeXBlKHgpIgotICAgICAgICBhID0gImltcG9ydCBjb2xsZWN0aW9uc1xuaXNpbnN0YW5jZSh4LCBjb2xsZWN0aW9ucy5NYXBwaW5nKSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgZGVmIHRlc3Rfb3BlcmF0b3JfaXNOdW1iZXJUeXBlKHNlbGYpOgotICAgICAgICBiID0gIm9wZXJhdG9yLmlzTnVtYmVyVHlwZSh4KSIKLSAgICAgICAgYSA9ICJpbXBvcnQgbnVtYmVyc1xuaXNpbnN0YW5jZSh4LCBudW1iZXJzLk51bWJlcikiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X29wZXJhdG9yX3JlcGVhdChzZWxmKToKLSAgICAgICAgYiA9ICJvcGVyYXRvci5yZXBlYXQoeCwgbikiCi0gICAgICAgIGEgPSAib3BlcmF0b3IubXVsKHgsIG4pIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICJvcGVyYXRvciAucmVwZWF0KHgsIG4pIgotICAgICAgICBhID0gIm9wZXJhdG9yIC5tdWwoeCwgbikiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIm9wZXJhdG9yLiAgcmVwZWF0KHgsIG4pIgotICAgICAgICBhID0gIm9wZXJhdG9yLiAgbXVsKHgsIG4pIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9vcGVyYXRvcl9pcmVwZWF0KHNlbGYpOgotICAgICAgICBiID0gIm9wZXJhdG9yLmlyZXBlYXQoeCwgbikiCi0gICAgICAgIGEgPSAib3BlcmF0b3IuaW11bCh4LCBuKSIKLSAgICAgICAgc2VsZi5jaGVjayhiLCBhKQotCi0gICAgICAgIGIgPSAib3BlcmF0b3IgLmlyZXBlYXQoeCwgbikiCi0gICAgICAgIGEgPSAib3BlcmF0b3IgLmltdWwoeCwgbikiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgICAgICBiID0gIm9wZXJhdG9yLiAgaXJlcGVhdCh4LCBuKSIKLSAgICAgICAgYSA9ICJvcGVyYXRvci4gIGltdWwoeCwgbikiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2JhcmVfaXNDYWxsYWJsZShzZWxmKToKLSAgICAgICAgcyA9ICJpc0NhbGxhYmxlKHgpIgotICAgICAgICB0ID0gIllvdSBzaG91bGQgdXNlICdoYXNhdHRyKHgsICdfX2NhbGxfXycpJyBoZXJlLiIKLSAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgdCkKLQotICAgIGRlZiB0ZXN0X2JhcmVfc2VxdWVuY2VJbmNsdWRlcyhzZWxmKToKLSAgICAgICAgcyA9ICJzZXF1ZW5jZUluY2x1ZGVzKHgsIHkpIgotICAgICAgICB0ID0gIllvdSBzaG91bGQgdXNlICdvcGVyYXRvci5jb250YWlucyh4LCB5KScgaGVyZS4iCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsIHQpCi0KLSAgICBkZWYgdGVzdF9iYXJlX29wZXJhdG9yX2lzU2VxdWVuY2VUeXBlKHNlbGYpOgotICAgICAgICBzID0gImlzU2VxdWVuY2VUeXBlKHopIgotICAgICAgICB0ID0gIllvdSBzaG91bGQgdXNlICdpc2luc3RhbmNlKHosIGNvbGxlY3Rpb25zLlNlcXVlbmNlKScgaGVyZS4iCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsIHQpCi0KLSAgICBkZWYgdGVzdF9iYXJlX29wZXJhdG9yX2lzTWFwcGluZ1R5cGUoc2VsZik6Ci0gICAgICAgIHMgPSAiaXNNYXBwaW5nVHlwZSh4KSIKLSAgICAgICAgdCA9ICJZb3Ugc2hvdWxkIHVzZSAnaXNpbnN0YW5jZSh4LCBjb2xsZWN0aW9ucy5NYXBwaW5nKScgaGVyZS4iCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsIHQpCi0KLSAgICBkZWYgdGVzdF9iYXJlX29wZXJhdG9yX2lzTnVtYmVyVHlwZShzZWxmKToKLSAgICAgICAgcyA9ICJpc051bWJlclR5cGUoeSkiCi0gICAgICAgIHQgPSAiWW91IHNob3VsZCB1c2UgJ2lzaW5zdGFuY2UoeSwgbnVtYmVycy5OdW1iZXIpJyBoZXJlLiIKLSAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgdCkKLQotICAgIGRlZiB0ZXN0X2JhcmVfb3BlcmF0b3JfcmVwZWF0KHNlbGYpOgotICAgICAgICBzID0gInJlcGVhdCh4LCBuKSIKLSAgICAgICAgdCA9ICJZb3Ugc2hvdWxkIHVzZSAnb3BlcmF0b3IubXVsKHgsIG4pJyBoZXJlLiIKLSAgICAgICAgc2VsZi53YXJuc191bmNoYW5nZWQocywgdCkKLQotICAgIGRlZiB0ZXN0X2JhcmVfb3BlcmF0b3JfaXJlcGVhdChzZWxmKToKLSAgICAgICAgcyA9ICJpcmVwZWF0KHksIDE4NykiCi0gICAgICAgIHQgPSAiWW91IHNob3VsZCB1c2UgJ29wZXJhdG9yLmltdWwoeSwgMTg3KScgaGVyZS4iCi0gICAgICAgIHNlbGYud2FybnNfdW5jaGFuZ2VkKHMsIHQpCi0KLQotY2xhc3MgVGVzdF9leGl0ZnVuYyhGaXhlclRlc3RDYXNlKToKLQotICAgIGZpeGVyID0gImV4aXRmdW5jIgotCi0gICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgICAgICBzeXMuZXhpdGZ1bmMgPSBteV9hdGV4aXQKLSAgICAgICAgICAgICIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgICAgICBpbXBvcnQgYXRleGl0Ci0gICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIobXlfYXRleGl0KQotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X25hbWVzX2ltcG9ydChzZWxmKToKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgaW1wb3J0IHN5cywgY3J1bWJzCi0gICAgICAgICAgICBzeXMuZXhpdGZ1bmMgPSBteV9mdW5jCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgYSA9ICIiIgotICAgICAgICAgICAgaW1wb3J0IHN5cywgY3J1bWJzLCBhdGV4aXQKLSAgICAgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihteV9mdW5jKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2NvbXBsZXhfZXhwcmVzc2lvbihzZWxmKToKLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICAgICAgc3lzLmV4aXRmdW5jID0gZG8oZCkvYSgpK2NvbXBsZXgoZj0yMywgZz0yMykqZXhwcmVzc2lvbgotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgICAgIGltcG9ydCBhdGV4aXQKLSAgICAgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihkbyhkKS9hKCkrY29tcGxleChmPTIzLCBnPTIzKSpleHByZXNzaW9uKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuY2hlY2soYiwgYSkKLQotICAgIGRlZiB0ZXN0X2NvbW1lbnRzKHNlbGYpOgotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICBpbXBvcnQgc3lzICMgRm9vCi0gICAgICAgICAgICBzeXMuZXhpdGZ1bmMgPSBmICMgQmxhaAotICAgICAgICAgICAgIiIiCi0gICAgICAgIGEgPSAiIiIKLSAgICAgICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgICAgIGltcG9ydCBhdGV4aXQgIyBGb28KLSAgICAgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihmKSAjIEJsYWgKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICAgICAgYiA9ICIiIgotICAgICAgICAgICAgaW1wb3J0IGFwcGxlcywgc3lzLCBjcnVtYnMsIGxhcnJ5ICMgUGxlYXNhbnQgY29tbWVudHMKLSAgICAgICAgICAgIHN5cy5leGl0ZnVuYyA9IGZ1bmMKLSAgICAgICAgICAgICIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICBpbXBvcnQgYXBwbGVzLCBzeXMsIGNydW1icywgbGFycnksIGF0ZXhpdCAjIFBsZWFzYW50IGNvbW1lbnRzCi0gICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoZnVuYykKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9pbl9hX2Z1bmN0aW9uKHNlbGYpOgotICAgICAgICBiID0gIiIiCi0gICAgICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgICAgICBkZWYgZigpOgotICAgICAgICAgICAgICAgIHN5cy5leGl0ZnVuYyA9IGZ1bmMKLSAgICAgICAgICAgICIiIgotICAgICAgICBhID0gIiIiCi0gICAgICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgICAgICBpbXBvcnQgYXRleGl0Ci0gICAgICAgICAgICBkZWYgZigpOgotICAgICAgICAgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihmdW5jKQotICAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCi0KLSAgICBkZWYgdGVzdF9ub19zeXNfaW1wb3J0KHNlbGYpOgotICAgICAgICBiID0gIiIic3lzLmV4aXRmdW5jID0gZiIiIgotICAgICAgICBhID0gIiIiYXRleGl0LnJlZ2lzdGVyKGYpIiIiCi0gICAgICAgIG1zZyA9ICgiQ2FuJ3QgZmluZCBzeXMgaW1wb3J0OyBQbGVhc2UgYWRkIGFuIGF0ZXhpdCBpbXBvcnQgYXQgdGhlICIKLSAgICAgICAgICAgICJ0b3Agb2YgeW91ciBmaWxlLiIpCi0gICAgICAgIHNlbGYud2FybnMoYiwgYSwgbXNnKQotCi0KLSAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6Ci0gICAgICAgIHMgPSAiIiJmKHN5cy5leGl0ZnVuYykiIiIKLSAgICAgICAgc2VsZi51bmNoYW5nZWQocykKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy90ZXN0X21haW4ucHkgYi9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvdGVzdF9tYWluLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjhiMjVjLi4wMDAwMDAwCi0tLSBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy90ZXN0X21haW4ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KLWltcG9ydCBzeXMKLWltcG9ydCBjb2RlY3MKLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0IHNodXRpbAotaW1wb3J0IFN0cmluZ0lPCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGVtcGZpbGUKLWltcG9ydCB1bml0dGVzdAotCi1mcm9tIGxpYjJ0bzMgaW1wb3J0IG1haW4KLQotCi1URVNUX0RBVEFfRElSID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJkYXRhIikKLVBZMl9URVNUX01PRFVMRSA9IG9zLnBhdGguam9pbihURVNUX0RBVEFfRElSLCAicHkyX3Rlc3RfZ3JhbW1hci5weSIpCi0KLQotY2xhc3MgVGVzdE1haW4odW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgaWYgbm90IGhhc2F0dHIodW5pdHRlc3QuVGVzdENhc2UsICdhc3NlcnROb3RSZWdleCcpOgotICAgICAgICAjIFRoaXMgbWV0aG9kIHdhcyBvbmx5IGludHJvZHVjZWQgaW4gMy4yLgotICAgICAgICBkZWYgYXNzZXJ0Tm90UmVnZXgoc2VsZiwgdGV4dCwgcmVnZXhwLCBtc2c9Tm9uZSk6Ci0gICAgICAgICAgICBpbXBvcnQgcmUKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHJlZ2V4cCwgJ3NlYXJjaCcpOgotICAgICAgICAgICAgICAgIHJlZ2V4cCA9IHJlLmNvbXBpbGUocmVnZXhwKQotICAgICAgICAgICAgaWYgcmVnZXhwLnNlYXJjaCh0ZXh0KToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlZ2V4cCAlcyBNQVRDSEVEIHRleHQgJXIiICUgKHJlZ2V4cC5wYXR0ZXJuLCB0ZXh0KSkKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi50ZW1wX2RpciA9IE5vbmUgICMgdGVhckRvd24oKSB3aWxsIHJtdHJlZSB0aGlzIGRpcmVjdG9yeSBpZiBzZXQuCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgICMgQ2xlYW4gdXAgbG9nZ2luZyBjb25maWd1cmF0aW9uIGRvd24gYnkgbWFpbi4KLSAgICAgICAgZGVsIGxvZ2dpbmcucm9vdC5oYW5kbGVyc1s6XQotICAgICAgICBpZiBzZWxmLnRlbXBfZGlyOgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnRlbXBfZGlyKQotCi0gICAgZGVmIHJ1bl8ydG8zX2NhcHR1cmUoc2VsZiwgYXJncywgaW5fY2FwdHVyZSwgb3V0X2NhcHR1cmUsIGVycl9jYXB0dXJlKToKLSAgICAgICAgc2F2ZV9zdGRpbiA9IHN5cy5zdGRpbgotICAgICAgICBzYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKLSAgICAgICAgc2F2ZV9zdGRlcnIgPSBzeXMuc3RkZXJyCi0gICAgICAgIHN5cy5zdGRpbiA9IGluX2NhcHR1cmUKLSAgICAgICAgc3lzLnN0ZG91dCA9IG91dF9jYXB0dXJlCi0gICAgICAgIHN5cy5zdGRlcnIgPSBlcnJfY2FwdHVyZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gbWFpbi5tYWluKCJsaWIydG8zLmZpeGVzIiwgYXJncykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zdGRpbiA9IHNhdmVfc3RkaW4KLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAotICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHNhdmVfc3RkZXJyCi0KLSAgICBkZWYgdGVzdF91bmVuY29kYWJsZV9kaWZmKHNlbGYpOgotICAgICAgICBpbnB1dF9zdHJlYW0gPSBTdHJpbmdJTy5TdHJpbmdJTyh1InByaW50ICdub3RoaW5nJ1xucHJpbnQgdSfDvGJlcidcbiIpCi0gICAgICAgIG91dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKLSAgICAgICAgb3V0X2VuYyA9IGNvZGVjcy5nZXR3cml0ZXIoImFzY2lpIikob3V0KQotICAgICAgICBlcnIgPSBTdHJpbmdJTy5TdHJpbmdJTygpCi0gICAgICAgIHJldCA9IHNlbGYucnVuXzJ0bzNfY2FwdHVyZShbIi0iXSwgaW5wdXRfc3RyZWFtLCBvdXRfZW5jLCBlcnIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LCAwKQotICAgICAgICBvdXRwdXQgPSBvdXQuZ2V0dmFsdWUoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIi1wcmludCAnbm90aGluZyciIGluIG91dHB1dCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJXQVJOSU5HOiBjb3VsZG4ndCBlbmNvZGUgPHN0ZGluPidzIGRpZmYgZm9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJ5b3VyIHRlcm1pbmFsIiBpbiBlcnIuZ2V0dmFsdWUoKSkKLQotICAgIGRlZiBzZXR1cF90ZXN0X3NvdXJjZV90cmVlcyhzZWxmKToKLSAgICAgICAgIiIiU2V0dXAgYSB0ZXN0IHNvdXJjZSB0cmVlIGFuZCBvdXRwdXQgZGVzdGluYXRpb24gdHJlZS4iIiIKLSAgICAgICAgc2VsZi50ZW1wX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKSAgIyB0ZWFyRG93bigpIGNsZWFucyB0aGlzIHVwLgotICAgICAgICBzZWxmLnB5Ml9zcmNfZGlyID0gb3MucGF0aC5qb2luKHNlbGYudGVtcF9kaXIsICJweXRob24yX3Byb2plY3QiKQotICAgICAgICBzZWxmLnB5M19kZXN0X2RpciA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBfZGlyLCAicHl0aG9uM19wcm9qZWN0IikKLSAgICAgICAgb3MubWtkaXIoc2VsZi5weTJfc3JjX2RpcikKLSAgICAgICAgb3MubWtkaXIoc2VsZi5weTNfZGVzdF9kaXIpCi0gICAgICAgICMgVHVybiBpdCBpbnRvIGEgcGFja2FnZSB3aXRoIGEgZmV3IGZpbGVzLgotICAgICAgICBzZWxmLnNldHVwX2ZpbGVzID0gW10KLSAgICAgICAgb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5weTJfc3JjX2RpciwgIl9faW5pdF9fLnB5IiksICJ3IikuY2xvc2UoKQotICAgICAgICBzZWxmLnNldHVwX2ZpbGVzLmFwcGVuZCgiX19pbml0X18ucHkiKQotICAgICAgICBzaHV0aWwuY29weShQWTJfVEVTVF9NT0RVTEUsIHNlbGYucHkyX3NyY19kaXIpCi0gICAgICAgIHNlbGYuc2V0dXBfZmlsZXMuYXBwZW5kKG9zLnBhdGguYmFzZW5hbWUoUFkyX1RFU1RfTU9EVUxFKSkKLSAgICAgICAgc2VsZi50cml2aWFsX3B5Ml9maWxlID0gb3MucGF0aC5qb2luKHNlbGYucHkyX3NyY19kaXIsICJ0cml2aWFsLnB5IikKLSAgICAgICAgc2VsZi5pbml0X3B5Ml9maWxlID0gb3MucGF0aC5qb2luKHNlbGYucHkyX3NyY19kaXIsICJfX2luaXRfXy5weSIpCi0gICAgICAgIHdpdGggb3BlbihzZWxmLnRyaXZpYWxfcHkyX2ZpbGUsICJ3IikgYXMgdHJpdmlhbDoKLSAgICAgICAgICAgIHRyaXZpYWwud3JpdGUoInByaW50ICdJIG5lZWQgYSBzaW1wbGUgY29udmVyc2lvbi4nIikKLSAgICAgICAgc2VsZi5zZXR1cF9maWxlcy5hcHBlbmQoInRyaXZpYWwucHkiKQotCi0gICAgZGVmIHRlc3RfZmlsZW5hbWVfY2hhbmdpbmdfb25fb3V0cHV0X3NpbmdsZV9kaXIoc2VsZik6Ci0gICAgICAgICIiIjJ0bzMgYSBzaW5nbGUgZGlyZWN0b3J5IHdpdGggYSBuZXcgb3V0cHV0IGRpciBhbmQgc3VmZml4LiIiIgotICAgICAgICBzZWxmLnNldHVwX3Rlc3Rfc291cmNlX3RyZWVzKCkKLSAgICAgICAgb3V0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICAgICAgICBlcnIgPSBTdHJpbmdJTy5TdHJpbmdJTygpCi0gICAgICAgIHN1ZmZpeCA9ICJURVNUIgotICAgICAgICByZXQgPSBzZWxmLnJ1bl8ydG8zX2NhcHR1cmUoCi0gICAgICAgICAgICAgICAgWyItbiIsICItLWFkZC1zdWZmaXgiLCBzdWZmaXgsICItLXdyaXRlLXVuY2hhbmdlZC1maWxlcyIsCi0gICAgICAgICAgICAgICAgICItLW5vLWRpZmZzIiwgIi0tb3V0cHV0LWRpciIsCi0gICAgICAgICAgICAgICAgIHNlbGYucHkzX2Rlc3RfZGlyLCBzZWxmLnB5Ml9zcmNfZGlyXSwKLSAgICAgICAgICAgICAgICBTdHJpbmdJTy5TdHJpbmdJTygiIiksIG91dCwgZXJyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKLSAgICAgICAgc3RkZXJyID0gZXJyLmdldHZhbHVlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRJbigiIGltcGxpZXMgLXcuIiwgc3RkZXJyKQotICAgICAgICBzZWxmLmFzc2VydEluKAotICAgICAgICAgICAgICAgICJPdXRwdXQgaW4gJXIgd2lsbCBtaXJyb3IgdGhlIGlucHV0IGRpcmVjdG9yeSAlciBsYXlvdXQiICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5weTNfZGVzdF9kaXIsIHNlbGYucHkyX3NyY19kaXIpLCBzdGRlcnIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KG5hbWUrc3VmZml4IGZvciBuYW1lIGluIHNlbGYuc2V0dXBfZmlsZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNldChvcy5saXN0ZGlyKHNlbGYucHkzX2Rlc3RfZGlyKSkpCi0gICAgICAgIGZvciBuYW1lIGluIHNlbGYuc2V0dXBfZmlsZXM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKCJXcml0aW5nIGNvbnZlcnRlZCAlcyB0byAlcyIgJSAoCi0gICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLnB5Ml9zcmNfZGlyLCBuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYucHkzX2Rlc3RfZGlyLCBuYW1lK3N1ZmZpeCkpLCBzdGRlcnIpCi0gICAgICAgIHNlcCA9IHJlLmVzY2FwZShvcy5zZXApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcygKLSAgICAgICAgICAgICAgICBzdGRlcnIsIHIiTm8gY2hhbmdlcyB0byAuKi9fX2luaXRfX1wucHkiLnJlcGxhY2UoIi8iLCBzZXApKQotICAgICAgICBzZWxmLmFzc2VydE5vdFJlZ2V4KAotICAgICAgICAgICAgICAgIHN0ZGVyciwgciJObyBjaGFuZ2VzIHRvIC4qL3RyaXZpYWxcLnB5Ii5yZXBsYWNlKCIvIiwgc2VwKSkKLQotICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX2NoYW5naW5nX29uX291dHB1dF90d29fZmlsZXMoc2VsZik6Ci0gICAgICAgICIiIjJ0bzMgdHdvIGZpbGVzIGluIG9uZSBkaXJlY3Rvcnkgd2l0aCBhIG5ldyBvdXRwdXQgZGlyLiIiIgotICAgICAgICBzZWxmLnNldHVwX3Rlc3Rfc291cmNlX3RyZWVzKCkKLSAgICAgICAgZXJyID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICAgICAgICBweTJfZmlsZXMgPSBbc2VsZi50cml2aWFsX3B5Ml9maWxlLCBzZWxmLmluaXRfcHkyX2ZpbGVdCi0gICAgICAgIGV4cGVjdGVkX2ZpbGVzID0gc2V0KG9zLnBhdGguYmFzZW5hbWUobmFtZSkgZm9yIG5hbWUgaW4gcHkyX2ZpbGVzKQotICAgICAgICByZXQgPSBzZWxmLnJ1bl8ydG8zX2NhcHR1cmUoCi0gICAgICAgICAgICAgICAgWyItbiIsICItdyIsICItLXdyaXRlLXVuY2hhbmdlZC1maWxlcyIsCi0gICAgICAgICAgICAgICAgICItLW5vLWRpZmZzIiwgIi0tb3V0cHV0LWRpciIsIHNlbGYucHkzX2Rlc3RfZGlyXSArIHB5Ml9maWxlcywKLSAgICAgICAgICAgICAgICBTdHJpbmdJTy5TdHJpbmdJTygiIiksIFN0cmluZ0lPLlN0cmluZ0lPKCksIGVycikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCi0gICAgICAgIHN0ZGVyciA9IGVyci5nZXR2YWx1ZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oCi0gICAgICAgICAgICAgICAgIk91dHB1dCBpbiAlciB3aWxsIG1pcnJvciB0aGUgaW5wdXQgZGlyZWN0b3J5ICVyIGxheW91dCIgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB5M19kZXN0X2Rpciwgc2VsZi5weTJfc3JjX2RpciksIHN0ZGVycikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9maWxlcywgc2V0KG9zLmxpc3RkaXIoc2VsZi5weTNfZGVzdF9kaXIpKSkKLQotICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX2NoYW5naW5nX29uX291dHB1dF9zaW5nbGVfZmlsZShzZWxmKToKLSAgICAgICAgIiIiMnRvMyBhIHNpbmdsZSBmaWxlIHdpdGggYSBuZXcgb3V0cHV0IGRpci4iIiIKLSAgICAgICAgc2VsZi5zZXR1cF90ZXN0X3NvdXJjZV90cmVlcygpCi0gICAgICAgIGVyciA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKLSAgICAgICAgcmV0ID0gc2VsZi5ydW5fMnRvM19jYXB0dXJlKAotICAgICAgICAgICAgICAgIFsiLW4iLCAiLXciLCAiLS1uby1kaWZmcyIsICItLW91dHB1dC1kaXIiLCBzZWxmLnB5M19kZXN0X2RpciwKLSAgICAgICAgICAgICAgICAgc2VsZi50cml2aWFsX3B5Ml9maWxlXSwKLSAgICAgICAgICAgICAgICBTdHJpbmdJTy5TdHJpbmdJTygiIiksIFN0cmluZ0lPLlN0cmluZ0lPKCksIGVycikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCi0gICAgICAgIHN0ZGVyciA9IGVyci5nZXR2YWx1ZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oCi0gICAgICAgICAgICAgICAgIk91dHB1dCBpbiAlciB3aWxsIG1pcnJvciB0aGUgaW5wdXQgZGlyZWN0b3J5ICVyIGxheW91dCIgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB5M19kZXN0X2Rpciwgc2VsZi5weTJfc3JjX2RpciksIHN0ZGVycikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoW29zLnBhdGguYmFzZW5hbWUoc2VsZi50cml2aWFsX3B5Ml9maWxlKV0pLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNldChvcy5saXN0ZGlyKHNlbGYucHkzX2Rlc3RfZGlyKSkpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy90ZXN0X3BhcnNlci5weSBiL2xpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy90ZXN0X3BhcnNlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYwMjM4MS4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvdGVzdF9wYXJzZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotIiIiVGVzdCBzdWl0ZSBmb3IgMnRvMydzIHBhcnNlciBhbmQgZ3JhbW1hciBmaWxlcy4KLQotVGhpcyBpcyB0aGUgcGxhY2UgdG8gYWRkIHRlc3RzIGZvciBjaGFuZ2VzIHRvIDJ0bzMncyBncmFtbWFyLCBzdWNoIGFzIHRob3NlCi1tZXJnaW5nIHRoZSBncmFtbWFycyBmb3IgUHl0aG9uIDIgYW5kIDMuIEluIGFkZGl0aW9uIHRvIHNwZWNpZmljIHRlc3RzIGZvcgotcGFydHMgb2YgdGhlIGdyYW1tYXIgd2UndmUgY2hhbmdlZCwgd2UgYWxzbyBtYWtlIHN1cmUgd2UgY2FuIHBhcnNlIHRoZQotdGVzdF9ncmFtbWFyLnB5IGZpbGVzIGZyb20gYm90aCBQeXRob24gMiBhbmQgUHl0aG9uIDMuCi0iIiIKLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotCi0jIFRlc3RpbmcgaW1wb3J0cwotZnJvbSAuIGltcG9ydCBzdXBwb3J0Ci1mcm9tIC5zdXBwb3J0IGltcG9ydCBkcml2ZXIsIHRlc3RfZGlyCi0KLSMgUHl0aG9uIGltcG9ydHMKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi0jIExvY2FsIGltcG9ydHMKLWZyb20gbGliMnRvMy5wZ2VuMiBpbXBvcnQgdG9rZW5pemUKLWZyb20gLi5wZ2VuMi5wYXJzZSBpbXBvcnQgUGFyc2VFcnJvcgotZnJvbSBsaWIydG8zLnB5Z3JhbSBpbXBvcnQgcHl0aG9uX3N5bWJvbHMgYXMgc3ltcwotCi0KLWNsYXNzIFRlc3REcml2ZXIoc3VwcG9ydC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9mb3JtZmVlZChzZWxmKToKLSAgICAgICAgcyA9ICIiInByaW50IDFcblx4MENwcmludCAyXG4iIiIKLSAgICAgICAgdCA9IGRyaXZlci5wYXJzZV9zdHJpbmcocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLnR5cGUsIHN5bXMucHJpbnRfc3RtdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmNoaWxkcmVuWzFdLmNoaWxkcmVuWzBdLnR5cGUsIHN5bXMucHJpbnRfc3RtdCkKLQotCi1jbGFzcyBHcmFtbWFyVGVzdChzdXBwb3J0LlRlc3RDYXNlKToKLSAgICBkZWYgdmFsaWRhdGUoc2VsZiwgY29kZSk6Ci0gICAgICAgIHN1cHBvcnQucGFyc2Vfc3RyaW5nKGNvZGUpCi0KLSAgICBkZWYgaW52YWxpZF9zeW50YXgoc2VsZiwgY29kZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYudmFsaWRhdGUoY29kZSkKLSAgICAgICAgZXhjZXB0IFBhcnNlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiU3ludGF4IHNob3VsZG4ndCBoYXZlIGJlZW4gdmFsaWQiKQotCi0KLWNsYXNzIFRlc3RSYWlzZUNoYW5nZXMoR3JhbW1hclRlc3QpOgotICAgIGRlZiB0ZXN0XzJ4X3N0eWxlXzEoc2VsZik6Ci0gICAgICAgIHNlbGYudmFsaWRhdGUoInJhaXNlIikKLQotICAgIGRlZiB0ZXN0XzJ4X3N0eWxlXzIoc2VsZik6Ci0gICAgICAgIHNlbGYudmFsaWRhdGUoInJhaXNlIEUsIFYiKQotCi0gICAgZGVmIHRlc3RfMnhfc3R5bGVfMyhzZWxmKToKLSAgICAgICAgc2VsZi52YWxpZGF0ZSgicmFpc2UgRSwgViwgVCIpCi0KLSAgICBkZWYgdGVzdF8yeF9zdHlsZV9pbnZhbGlkXzEoc2VsZik6Ci0gICAgICAgIHNlbGYuaW52YWxpZF9zeW50YXgoInJhaXNlIEUsIFYsIFQsIFoiKQotCi0gICAgZGVmIHRlc3RfM3hfc3R5bGUoc2VsZik6Ci0gICAgICAgIHNlbGYudmFsaWRhdGUoInJhaXNlIEUxIGZyb20gRTIiKQotCi0gICAgZGVmIHRlc3RfM3hfc3R5bGVfaW52YWxpZF8xKHNlbGYpOgotICAgICAgICBzZWxmLmludmFsaWRfc3ludGF4KCJyYWlzZSBFLCBWIGZyb20gRTEiKQotCi0gICAgZGVmIHRlc3RfM3hfc3R5bGVfaW52YWxpZF8yKHNlbGYpOgotICAgICAgICBzZWxmLmludmFsaWRfc3ludGF4KCJyYWlzZSBFIGZyb20gRTEsIEUyIikKLQotICAgIGRlZiB0ZXN0XzN4X3N0eWxlX2ludmFsaWRfMyhzZWxmKToKLSAgICAgICAgc2VsZi5pbnZhbGlkX3N5bnRheCgicmFpc2UgZnJvbSBFMSwgRTIiKQotCi0gICAgZGVmIHRlc3RfM3hfc3R5bGVfaW52YWxpZF80KHNlbGYpOgotICAgICAgICBzZWxmLmludmFsaWRfc3ludGF4KCJyYWlzZSBFIGZyb20iKQotCi0KLSMgQWRhcGF0ZWQgZnJvbSBQeXRob24gMydzIExpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weTpHcmFtbWFyVGVzdHMudGVzdEZ1bmNkZWYKLWNsYXNzIFRlc3RGdW5jdGlvbkFubm90YXRpb25zKEdyYW1tYXJUZXN0KToKLSAgICBkZWYgdGVzdF8xKHNlbGYpOgotICAgICAgICBzZWxmLnZhbGlkYXRlKCIiImRlZiBmKHgpIC0+IGxpc3Q6IHBhc3MiIiIpCi0KLSAgICBkZWYgdGVzdF8yKHNlbGYpOgotICAgICAgICBzZWxmLnZhbGlkYXRlKCIiImRlZiBmKHg6aW50KTogcGFzcyIiIikKLQotICAgIGRlZiB0ZXN0XzMoc2VsZik6Ci0gICAgICAgIHNlbGYudmFsaWRhdGUoIiIiZGVmIGYoKng6c3RyKTogcGFzcyIiIikKLQotICAgIGRlZiB0ZXN0XzQoc2VsZik6Ci0gICAgICAgIHNlbGYudmFsaWRhdGUoIiIiZGVmIGYoKip4OmZsb2F0KTogcGFzcyIiIikKLQotICAgIGRlZiB0ZXN0XzUoc2VsZik6Ci0gICAgICAgIHNlbGYudmFsaWRhdGUoIiIiZGVmIGYoeCwgeToxKzIpOiBwYXNzIiIiKQotCi0gICAgZGVmIHRlc3RfNihzZWxmKToKLSAgICAgICAgc2VsZi52YWxpZGF0ZSgiIiJkZWYgZihhLCAoYjoxLCBjOjIsIGQpKTogcGFzcyIiIikKLQotICAgIGRlZiB0ZXN0Xzcoc2VsZik6Ci0gICAgICAgIHNlbGYudmFsaWRhdGUoIiIiZGVmIGYoYSwgKGI6MSwgYzoyLCBkKSwgZTozPTQsIGY9NSwgKmc6Nik6IHBhc3MiIiIpCi0KLSAgICBkZWYgdGVzdF84KHNlbGYpOgotICAgICAgICBzID0gIiIiZGVmIGYoYSwgKGI6MSwgYzoyLCBkKSwgZTozPTQsIGY9NSwKLSAgICAgICAgICAgICAgICAgICAgICAgICpnOjYsIGg6NywgaT04LCBqOjk9MTAsICoqazoxMSkgLT4gMTI6IHBhc3MiIiIKLSAgICAgICAgc2VsZi52YWxpZGF0ZShzKQotCi0KLWNsYXNzIFRlc3RFeGNlcHQoR3JhbW1hclRlc3QpOgotICAgIGRlZiB0ZXN0X25ldyhzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHgKLSAgICAgICAgICAgIGV4Y2VwdCBFIGFzIE46Ci0gICAgICAgICAgICAgICAgeSIiIgotICAgICAgICBzZWxmLnZhbGlkYXRlKHMpCi0KLSAgICBkZWYgdGVzdF9vbGQoc2VsZik6Ci0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB4Ci0gICAgICAgICAgICBleGNlcHQgRSwgTjoKLSAgICAgICAgICAgICAgICB5IiIiCi0gICAgICAgIHNlbGYudmFsaWRhdGUocykKLQotCi0jIEFkYXB0ZWQgZnJvbSBQeXRob24gMydzIExpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weTpHcmFtbWFyVGVzdHMudGVzdEF0b21zCi1jbGFzcyBUZXN0U2V0TGl0ZXJhbChHcmFtbWFyVGVzdCk6Ci0gICAgZGVmIHRlc3RfMShzZWxmKToKLSAgICAgICAgc2VsZi52YWxpZGF0ZSgiIiJ4ID0geydvbmUnfSIiIikKLQotICAgIGRlZiB0ZXN0XzIoc2VsZik6Ci0gICAgICAgIHNlbGYudmFsaWRhdGUoIiIieCA9IHsnb25lJywgMSx9IiIiKQotCi0gICAgZGVmIHRlc3RfMyhzZWxmKToKLSAgICAgICAgc2VsZi52YWxpZGF0ZSgiIiJ4ID0geydvbmUnLCAndHdvJywgJ3RocmVlJ30iIiIpCi0KLSAgICBkZWYgdGVzdF80KHNlbGYpOgotICAgICAgICBzZWxmLnZhbGlkYXRlKCIiInggPSB7MiwgMywgNCx9IiIiKQotCi0KLWNsYXNzIFRlc3ROdW1lcmljTGl0ZXJhbHMoR3JhbW1hclRlc3QpOgotICAgIGRlZiB0ZXN0X25ld19vY3RhbF9ub3RhdGlvbihzZWxmKToKLSAgICAgICAgc2VsZi52YWxpZGF0ZSgiIiIwbzc3Nzc3Nzc3Nzc3NzciIiIpCi0gICAgICAgIHNlbGYuaW52YWxpZF9zeW50YXgoIiIiMG83MzI0NTI4ODg3IiIiKQotCi0gICAgZGVmIHRlc3RfbmV3X2JpbmFyeV9ub3RhdGlvbihzZWxmKToKLSAgICAgICAgc2VsZi52YWxpZGF0ZSgiIiIwYjEwMTAxMCIiIikKLSAgICAgICAgc2VsZi5pbnZhbGlkX3N5bnRheCgiIiIwYjAxMDEwMjEiIiIpCi0KLQotY2xhc3MgVGVzdENsYXNzRGVmKEdyYW1tYXJUZXN0KToKLSAgICBkZWYgdGVzdF9uZXdfc3ludGF4KHNlbGYpOgotICAgICAgICBzZWxmLnZhbGlkYXRlKCJjbGFzcyBCKHQ9Nyk6IHBhc3MiKQotICAgICAgICBzZWxmLnZhbGlkYXRlKCJjbGFzcyBCKHQsICphcmdzKTogcGFzcyIpCi0gICAgICAgIHNlbGYudmFsaWRhdGUoImNsYXNzIEIodCwgKiprd2FyZ3MpOiBwYXNzIikKLSAgICAgICAgc2VsZi52YWxpZGF0ZSgiY2xhc3MgQih0LCAqYXJncywgKiprd2FyZ3MpOiBwYXNzIikKLSAgICAgICAgc2VsZi52YWxpZGF0ZSgiY2xhc3MgQih0LCB5PTksICphcmdzLCAqKmt3YXJncyk6IHBhc3MiKQotCi0KLWNsYXNzIFRlc3RQYXJzZXJJZGVtcG90ZW5jeShzdXBwb3J0LlRlc3RDYXNlKToKLQotICAgICIiIkEgY3V0LWRvd24gdmVyc2lvbiBvZiBweXRyZWVfaWRlbXBvdGVuY3kucHkuIiIiCi0KLSAgICBkZWYgdGVzdF9hbGxfcHJvamVjdF9maWxlcyhzZWxmKToKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgotICAgICAgICAgICAgIyBYWFggc29tZXRoaW5nIHdpdGggbmV3bGluZXMgZ29lcyB3cm9uZyBvbiBXaW5kb3dzLgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGZvciBmaWxlcGF0aCBpbiBzdXBwb3J0LmFsbF9wcm9qZWN0X2ZpbGVzKCk6Ci0gICAgICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICJyYiIpIGFzIGZwOgotICAgICAgICAgICAgICAgIGVuY29kaW5nID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKGZwLnJlYWRsaW5lKVswXQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVuY29kaW5nIGlzIG5vdCBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBkZXRlY3QgZW5jb2RpbmcgZm9yICVzIiAlIGZpbGVwYXRoKQotICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVwYXRoLCAiciIpIGFzIGZwOgotICAgICAgICAgICAgICAgIHNvdXJjZSA9IGZwLnJlYWQoKQotICAgICAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5kZWNvZGUoZW5jb2RpbmcpCi0gICAgICAgICAgICB0cmVlID0gZHJpdmVyLnBhcnNlX3N0cmluZyhzb3VyY2UpCi0gICAgICAgICAgICBuZXcgPSB1bmljb2RlKHRyZWUpCi0gICAgICAgICAgICBpZiBkaWZmKGZpbGVwYXRoLCBuZXcsIGVuY29kaW5nKToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIklkZW1wb3RlbmN5IGZhaWxlZDogJXMiICUgZmlsZXBhdGgpCi0KLSAgICBkZWYgdGVzdF9leHRlbmRlZF91bnBhY2tpbmcoc2VsZik6Ci0gICAgICAgIGRyaXZlci5wYXJzZV9zdHJpbmcoImEsICpiLCBjID0geFxuIikKLSAgICAgICAgZHJpdmVyLnBhcnNlX3N0cmluZygiWyphLCBiXSA9IHhcbiIpCi0gICAgICAgIGRyaXZlci5wYXJzZV9zdHJpbmcoIih6LCAqeSwgdykgPSBtXG4iKQotICAgICAgICBkcml2ZXIucGFyc2Vfc3RyaW5nKCJmb3IgKnosIG0gaW4gZDogcGFzc1xuIikKLQotY2xhc3MgVGVzdExpdGVyYWxzKEdyYW1tYXJUZXN0KToKLQotICAgIGRlZiB2YWxpZGF0ZShzZWxmLCBzKToKLSAgICAgICAgZHJpdmVyLnBhcnNlX3N0cmluZyhzdXBwb3J0LmRlZGVudChzKSArICJcblxuIikKLQotICAgIGRlZiB0ZXN0X211bHRpbGluZV9ieXRlc19saXRlcmFscyhzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgbWQ1dGVzdChiIlx4YWEiICogODAsCi0gICAgICAgICAgICAgICAgICAgIChiIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6ZSBLZXkgIgotICAgICAgICAgICAgICAgICAgICAgYiJhbmQgTGFyZ2VyIFRoYW4gT25lIEJsb2NrLVNpemUgRGF0YSIpLAotICAgICAgICAgICAgICAgICAgICAiNmY2MzBmYWQ2N2NkYTBlZTFmYjFmNTYyZGIzYWE1M2UiKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYudmFsaWRhdGUocykKLQotICAgIGRlZiB0ZXN0X211bHRpbGluZV9ieXRlc190cmlwcXVvdGVfbGl0ZXJhbHMoc2VsZik6Ci0gICAgICAgIHMgPSAnJycKLSAgICAgICAgICAgIGIiIiIKLSAgICAgICAgICAgIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0gICAgICAgICAgICA8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZSBDb21wdXRlci8vRFREIFBMSVNUIDEuMC8vRU4iPgotICAgICAgICAgICAgIiIiCi0gICAgICAgICAgICAnJycKLSAgICAgICAgc2VsZi52YWxpZGF0ZShzKQotCi0gICAgZGVmIHRlc3RfbXVsdGlsaW5lX3N0cl9saXRlcmFscyhzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgbWQ1dGVzdCgiXHhhYSIgKiA4MCwKLSAgICAgICAgICAgICAgICAgICAgKCJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUgS2V5ICIKLSAgICAgICAgICAgICAgICAgICAgICJhbmQgTGFyZ2VyIFRoYW4gT25lIEJsb2NrLVNpemUgRGF0YSIpLAotICAgICAgICAgICAgICAgICAgICAiNmY2MzBmYWQ2N2NkYTBlZTFmYjFmNTYyZGIzYWE1M2UiKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYudmFsaWRhdGUocykKLQotCi1kZWYgZGlmZihmbiwgcmVzdWx0LCBlbmNvZGluZyk6Ci0gICAgZiA9IG9wZW4oIkAiLCAidyIpCi0gICAgdHJ5OgotICAgICAgICBmLndyaXRlKHJlc3VsdC5lbmNvZGUoZW5jb2RpbmcpKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGYuY2xvc2UoKQotICAgIHRyeToKLSAgICAgICAgZm4gPSBmbi5yZXBsYWNlKCciJywgJ1xcIicpCi0gICAgICAgIHJldHVybiBvcy5zeXN0ZW0oJ2RpZmYgLXUgIiVzIiBAJyAlIGZuKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIG9zLnJlbW92ZSgiQCIpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvdGVzdF9weXRyZWUucHkgYi9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvdGVzdF9weXRyZWUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjN2Q5MDAuLjAwMDAwMDAKLS0tIGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL3Rlc3RfcHl0cmVlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDk0ICswLDAgQEAKLSMgQ29weXJpZ2h0IDIwMDYgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLQotIiIiVW5pdCB0ZXN0cyBmb3IgcHl0cmVlLnB5LgotCi1OT1RFOiBQbGVhc2UgKmRvbid0KiBhZGQgZG9jIHN0cmluZ3MgdG8gaW5kaXZpZHVhbCB0ZXN0IG1ldGhvZHMhCi1JbiB2ZXJib3NlIG1vZGUsIHByaW50aW5nIG9mIHRoZSBtb2R1bGUsIGNsYXNzIGFuZCBtZXRob2QgbmFtZSBpcyBtdWNoCi1tb3JlIGhlbHBmdWwgdGhhbiBwcmludGluZyBvZiAodGhlIGZpcnN0IGxpbmUgb2YpIHRoZSBkb2NzdHJpbmcsCi1lc3BlY2lhbGx5IHdoZW4gZGVidWdnaW5nIGEgdGVzdC4KLSIiIgotCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50Ci0KLWltcG9ydCBzeXMKLWltcG9ydCB3YXJuaW5ncwotCi0jIFRlc3RpbmcgaW1wb3J0cwotZnJvbSAuIGltcG9ydCBzdXBwb3J0Ci0KLWZyb20gbGliMnRvMyBpbXBvcnQgcHl0cmVlCi0KLXRyeToKLSAgICBzb3J0ZWQKLWV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgZGVmIHNvcnRlZChsc3QpOgotICAgICAgICBsID0gbGlzdChsc3QpCi0gICAgICAgIGwuc29ydCgpCi0gICAgICAgIHJldHVybiBsCi0KLWNsYXNzIFRlc3ROb2RlcyhzdXBwb3J0LlRlc3RDYXNlKToKLQotICAgICIiIlVuaXQgdGVzdHMgZm9yIG5vZGVzIChCYXNlLCBMZWFmLCBOb2RlKS4iIiIKLQotICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDIsNik6Ci0gICAgICAgICMgd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MgaXMgbmV3IGluIDIuNi4KLSAgICAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9wcmVmaXhfbWV0aG9kcyhzZWxmKToKLSAgICAgICAgICAgIGwgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQotICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKLSAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIsIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwuZ2V0X3ByZWZpeCgpLCAiIikKLSAgICAgICAgICAgICAgICBsLnNldF9wcmVmaXgoImhpIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5wcmVmaXgsICJoaSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMikKLSAgICAgICAgICAgIGZvciB3YXJuaW5nIGluIHc6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhcm5pbmcuY2F0ZWdvcnkgaXMgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIod1swXS5tZXNzYWdlKSwgImdldF9wcmVmaXgoKSBpcyBkZXByZWNhdGVkOyAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgdGhlIHByZWZpeCBwcm9wZXJ0eSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3WzFdLm1lc3NhZ2UpLCAic2V0X3ByZWZpeCgpIGlzIGRlcHJlY2F0ZWQ7ICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSB0aGUgcHJlZml4IHByb3BlcnR5IikKLQotICAgIGRlZiB0ZXN0X2luc3RhbnRpYXRlX2Jhc2Uoc2VsZik6Ci0gICAgICAgIGlmIF9fZGVidWdfXzoKLSAgICAgICAgICAgICMgVGVzdCB0aGF0IGluc3RhbnRpYXRpbmcgQmFzZSgpIHJhaXNlcyBhbiBBc3NlcnRpb25FcnJvcgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHB5dHJlZS5CYXNlKQotCi0gICAgZGVmIHRlc3RfbGVhZihzZWxmKToKLSAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwxLnR5cGUsIDEwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMS52YWx1ZSwgImZvbyIpCi0KLSAgICBkZWYgdGVzdF9sZWFmX3JlcHIoc2VsZik6Ci0gICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGwxKSwgIkxlYWYoMTAwLCAnZm9vJykiKQotCi0gICAgZGVmIHRlc3RfbGVhZl9zdHIoc2VsZik6Ci0gICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobDEpLCAiZm9vIikKLSAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJmb28iLCBjb250ZXh0PSgiICIsICgxMCwgMSkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihsMiksICIgZm9vIikKLQotICAgIGRlZiB0ZXN0X2xlYWZfc3RyX251bWVyaWNfdmFsdWUoc2VsZik6Ci0gICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIExlYWYncyB2YWx1ZSBpcyBzdHJpbmdpZmllZC4gRmFpbGluZyB0bwotICAgICAgICAjICBkbyB0aGlzIGNhbiBjYXVzZSBhIFR5cGVFcnJvciBpbiBjZXJ0YWluIHNpdHVhdGlvbnMuCi0gICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMiwgNSkKLSAgICAgICAgbDEucHJlZml4ID0gImZvb18iCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGwxKSwgImZvb181IikKLQotICAgIGRlZiB0ZXN0X2xlYWZfZXF1YWxpdHkoc2VsZik6Ci0gICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKLSAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJmb28iLCBjb250ZXh0PSgiICIsICgxLCAwKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEsIGwyKQotICAgICAgICBsMyA9IHB5dHJlZS5MZWFmKDEwMSwgImZvbyIpCi0gICAgICAgIGw0ID0gcHl0cmVlLkxlYWYoMTAwLCAiYmFyIikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsMSwgbDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobDEsIGw0KQotCi0gICAgZGVmIHRlc3RfbGVhZl9wcmVmaXgoc2VsZik6Ci0gICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMS5wcmVmaXgsICIiKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGwxLndhc19jaGFuZ2VkKQotICAgICAgICBsMS5wcmVmaXggPSAiICAjI1xuXG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEucHJlZml4LCAiICAjI1xuXG4iKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobDEud2FzX2NoYW5nZWQpCi0KLSAgICBkZWYgdGVzdF9ub2RlKHNlbGYpOgotICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCi0gICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMjAwLCAiYmFyIikKLSAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS50eXBlLCAxMDAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4xLmNoaWxkcmVuLCBbbDEsIGwyXSkKLQotICAgIGRlZiB0ZXN0X25vZGVfcmVwcihzZWxmKToKLSAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQotICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDEwMCwgImJhciIsIGNvbnRleHQ9KCIgIiwgKDEsIDApKSkKLSAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG4xKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSgxMDAwLCBbJXMsICVzXSkiICUgKHJlcHIobDEpLCByZXByKGwyKSkpCi0KLSAgICBkZWYgdGVzdF9ub2RlX3N0cihzZWxmKToKLSAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQotICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDEwMCwgImJhciIsIGNvbnRleHQ9KCIgIiwgKDEsIDApKSkKLSAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobjEpLCAiZm9vIGJhciIpCi0KLSAgICBkZWYgdGVzdF9ub2RlX3ByZWZpeChzZWxmKToKLSAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwxLnByZWZpeCwgIiIpCi0gICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5wcmVmaXgsICIiKQotICAgICAgICBuMS5wcmVmaXggPSAiICIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5wcmVmaXgsICIgIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMS5wcmVmaXgsICIgIikKLQotICAgIGRlZiB0ZXN0X2dldF9zdWZmaXgoc2VsZik6Ci0gICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIiwgcHJlZml4PSJhIikKLSAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJiYXIiLCBwcmVmaXg9ImIiKQotICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsMSwgbDJdKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEuZ2V0X3N1ZmZpeCgpLCBsMi5wcmVmaXgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDIuZ2V0X3N1ZmZpeCgpLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5nZXRfc3VmZml4KCksICIiKQotCi0gICAgICAgIGwzID0gcHl0cmVlLkxlYWYoMTAwLCAiYmFyIiwgcHJlZml4PSJjIikKLSAgICAgICAgbjIgPSBweXRyZWUuTm9kZSgxMDAwLCBbbjEsIGwzXSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4xLmdldF9zdWZmaXgoKSwgbDMucHJlZml4KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwzLmdldF9zdWZmaXgoKSwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjIuZ2V0X3N1ZmZpeCgpLCAiIikKLQotICAgIGRlZiB0ZXN0X25vZGVfZXF1YWxpdHkoc2VsZik6Ci0gICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgKCkpCi0gICAgICAgIG4yID0gcHl0cmVlLk5vZGUoMTAwMCwgW10sIGNvbnRleHQ9KCIgIiwgKDEsIDApKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMSwgbjIpCi0gICAgICAgIG4zID0gcHl0cmVlLk5vZGUoMTAwMSwgKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobjEsIG4zKQotCi0gICAgZGVmIHRlc3Rfbm9kZV9yZWN1cnNpdmVfZXF1YWxpdHkoc2VsZik6Ci0gICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKLSAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQotICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsMV0pCi0gICAgICAgIG4yID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wyXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMSwgbjIpCi0gICAgICAgIGwzID0gcHl0cmVlLkxlYWYoMTAwLCAiYmFyIikKLSAgICAgICAgbjMgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDNdKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG4xLCBuMykKLQotICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6Ci0gICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKLSAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICIrIikKLSAgICAgICAgbDMgPSBweXRyZWUuTGVhZigxMDAsICJiYXIiKQotICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsMSwgbDIsIGwzXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5jaGlsZHJlbiwgW2wxLCBsMiwgbDNdKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShuMS5jaGlsZHJlbiwgbGlzdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobjEud2FzX2NoYW5nZWQpCi0gICAgICAgIGwybmV3ID0gcHl0cmVlLkxlYWYoMTAwLCAiLSIpCi0gICAgICAgIGwyLnJlcGxhY2UobDJuZXcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjEuY2hpbGRyZW4sIFtsMSwgbDJuZXcsIGwzXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobjEuY2hpbGRyZW4sIGxpc3QpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobjEud2FzX2NoYW5nZWQpCi0KLSAgICBkZWYgdGVzdF9yZXBsYWNlX3dpdGhfbGlzdChzZWxmKToKLSAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQotICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDEwMCwgIisiKQotICAgICAgICBsMyA9IHB5dHJlZS5MZWFmKDEwMCwgImJhciIpCi0gICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxLCBsMiwgbDNdKQotCi0gICAgICAgIGwyLnJlcGxhY2UoW3B5dHJlZS5MZWFmKDEwMCwgIioiKSwgcHl0cmVlLkxlYWYoMTAwLCAiKiIpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobjEpLCAiZm9vKipiYXIiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShuMS5jaGlsZHJlbiwgbGlzdCkpCi0KLSAgICBkZWYgdGVzdF9sZWF2ZXMoc2VsZik6Ci0gICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKLSAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJiYXIiKQotICAgICAgICBsMyA9IHB5dHJlZS5MZWFmKDEwMCwgImZvb2V5IikKLSAgICAgICAgbjIgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSkKLSAgICAgICAgbjMgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDNdKQotICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtuMiwgbjNdKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChuMS5sZWF2ZXMoKSksIFtsMSwgbDIsIGwzXSkKLQotICAgIGRlZiB0ZXN0X2RlcHRoKHNlbGYpOgotICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCi0gICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMTAwLCAiYmFyIikKLSAgICAgICAgbjIgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSkKLSAgICAgICAgbjMgPSBweXRyZWUuTm9kZSgxMDAwLCBbXSkKLSAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbjIsIG4zXSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwxLmRlcHRoKCksIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjMuZGVwdGgoKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5kZXB0aCgpLCAwKQotCi0gICAgZGVmIHRlc3RfcG9zdF9vcmRlcihzZWxmKToKLSAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQotICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDEwMCwgImJhciIpCi0gICAgICAgIGwzID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vZXkiKQotICAgICAgICBjMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsMSwgbDJdKQotICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtjMSwgbDNdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobjEucG9zdF9vcmRlcigpKSwgW2wxLCBsMiwgYzEsIGwzLCBuMV0pCi0KLSAgICBkZWYgdGVzdF9wcmVfb3JkZXIoc2VsZik6Ci0gICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKLSAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJiYXIiKQotICAgICAgICBsMyA9IHB5dHJlZS5MZWFmKDEwMCwgImZvb2V5IikKLSAgICAgICAgYzEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSkKLSAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbYzEsIGwzXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG4xLnByZV9vcmRlcigpKSwgW24xLCBjMSwgbDEsIGwyLCBsM10pCi0KLSAgICBkZWYgdGVzdF9jaGFuZ2VkKHNlbGYpOgotICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImYiKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGwxLndhc19jaGFuZ2VkKQotICAgICAgICBsMS5jaGFuZ2VkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGwxLndhc19jaGFuZ2VkKQotCi0gICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZiIpCi0gICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxXSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuMS53YXNfY2hhbmdlZCkKLSAgICAgICAgbjEuY2hhbmdlZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuMS53YXNfY2hhbmdlZCkKLQotICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCi0gICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMTAwLCAiKyIpCi0gICAgICAgIGwzID0gcHl0cmVlLkxlYWYoMTAwLCAiYmFyIikKLSAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyLCBsM10pCi0gICAgICAgIG4yID0gcHl0cmVlLk5vZGUoMTAwMCwgW24xXSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsMS53YXNfY2hhbmdlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuMS53YXNfY2hhbmdlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuMi53YXNfY2hhbmdlZCkKLQotICAgICAgICBuMS5jaGFuZ2VkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG4xLndhc19jaGFuZ2VkKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobjIud2FzX2NoYW5nZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobDEud2FzX2NoYW5nZWQpCi0KLSAgICBkZWYgdGVzdF9sZWFmX2NvbnN0cnVjdG9yX3ByZWZpeChzZWxmKToKLSAgICAgICAgZm9yIHByZWZpeCBpbiAoInh5el8iLCAiIik6Ci0gICAgICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgInNlbGYiLCBwcmVmaXg9cHJlZml4KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihsMSksIHByZWZpeCArICJzZWxmIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEucHJlZml4LCBwcmVmaXgpCi0KLSAgICBkZWYgdGVzdF9ub2RlX2NvbnN0cnVjdG9yX3ByZWZpeChzZWxmKToKLSAgICAgICAgZm9yIHByZWZpeCBpbiAoInh5el8iLCAiIik6Ci0gICAgICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgInNlbGYiKQotICAgICAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJmb28iLCBwcmVmaXg9Il8iKQotICAgICAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSwgcHJlZml4PXByZWZpeCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIobjEpLCBwcmVmaXggKyAic2VsZl9mb28iKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5wcmVmaXgsIHByZWZpeCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEucHJlZml4LCBwcmVmaXgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwyLnByZWZpeCwgIl8iKQotCi0gICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgotICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCi0gICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKLSAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDEsIGwyXSkKLSAgICAgICAgbjIgPSBweXRyZWUuTm9kZSgxMDAwLCBbbjFdKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjEucmVtb3ZlKCksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjIuY2hpbGRyZW4sIFtdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwxLnBhcmVudCwgbjEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjEucGFyZW50LCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4yLnBhcmVudCwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuMS53YXNfY2hhbmdlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG4yLndhc19jaGFuZ2VkKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDIucmVtb3ZlKCksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEucmVtb3ZlKCksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjEuY2hpbGRyZW4sIFtdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwxLnBhcmVudCwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5wYXJlbnQsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjIucGFyZW50LCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobjEud2FzX2NoYW5nZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuMi53YXNfY2hhbmdlZCkKLQotICAgIGRlZiB0ZXN0X3JlbW92ZV9wYXJlbnRsZXNzKHNlbGYpOgotICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtdKQotICAgICAgICBuMS5yZW1vdmUoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4xLnBhcmVudCwgTm9uZSkKLQotICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCi0gICAgICAgIGwxLnJlbW92ZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEucGFyZW50LCBOb25lKQotCi0gICAgZGVmIHRlc3Rfbm9kZV9zZXRfY2hpbGQoc2VsZik6Ci0gICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKLSAgICAgICAgbjEgPSBweXRyZWUuTm9kZSgxMDAwLCBbbDFdKQotCi0gICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMTAwLCAiYmFyIikKLSAgICAgICAgbjEuc2V0X2NoaWxkKDAsIGwyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwxLnBhcmVudCwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMi5wYXJlbnQsIG4xKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4xLmNoaWxkcmVuLCBbbDJdKQotCi0gICAgICAgIG4yID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxXSkKLSAgICAgICAgbjIuc2V0X2NoaWxkKDAsIG4xKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwxLnBhcmVudCwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5wYXJlbnQsIG4yKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4yLnBhcmVudCwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMi5jaGlsZHJlbiwgW24xXSkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBuMS5zZXRfY2hpbGQsIDQsIGwyKQotICAgICAgICAjIEkgZG9uJ3QgY2FyZSB3aGF0IGl0IHJhaXNlcywgc28gbG9uZyBhcyBpdCdzIGFuIGV4Y2VwdGlvbgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIG4xLnNldF9jaGlsZCwgMCwgbGlzdCkKLQotICAgIGRlZiB0ZXN0X25vZGVfaW5zZXJ0X2NoaWxkKHNlbGYpOgotICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCi0gICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxXSkKLQotICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDEwMCwgImJhciIpCi0gICAgICAgIG4xLmluc2VydF9jaGlsZCgwLCBsMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMi5wYXJlbnQsIG4xKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4xLmNoaWxkcmVuLCBbbDIsIGwxXSkKLQotICAgICAgICBsMyA9IHB5dHJlZS5MZWFmKDEwMCwgImFiYyIpCi0gICAgICAgIG4xLmluc2VydF9jaGlsZCgyLCBsMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5jaGlsZHJlbiwgW2wyLCBsMSwgbDNdKQotCi0gICAgICAgICMgSSBkb24ndCBjYXJlIHdoYXQgaXQgcmFpc2VzLCBzbyBsb25nIGFzIGl0J3MgYW4gZXhjZXB0aW9uCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgbjEuaW5zZXJ0X2NoaWxkLCAwLCBsaXN0KQotCi0gICAgZGVmIHRlc3Rfbm9kZV9hcHBlbmRfY2hpbGQoc2VsZik6Ci0gICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW10pCi0KLSAgICAgICAgbDEgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQotICAgICAgICBuMS5hcHBlbmRfY2hpbGQobDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEucGFyZW50LCBuMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5jaGlsZHJlbiwgW2wxXSkKLQotICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDEwMCwgImJhciIpCi0gICAgICAgIG4xLmFwcGVuZF9jaGlsZChsMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMi5wYXJlbnQsIG4xKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4xLmNoaWxkcmVuLCBbbDEsIGwyXSkKLQotICAgICAgICAjIEkgZG9uJ3QgY2FyZSB3aGF0IGl0IHJhaXNlcywgc28gbG9uZyBhcyBpdCdzIGFuIGV4Y2VwdGlvbgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIG4xLmFwcGVuZF9jaGlsZCwgbGlzdCkKLQotICAgIGRlZiB0ZXN0X25vZGVfbmV4dF9zaWJsaW5nKHNlbGYpOgotICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtdKQotICAgICAgICBuMiA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtdKQotICAgICAgICBwMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtuMSwgbjJdKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuMS5uZXh0X3NpYmxpbmcgaXMgbjIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjIubmV4dF9zaWJsaW5nLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLm5leHRfc2libGluZywgTm9uZSkKLQotICAgIGRlZiB0ZXN0X2xlYWZfbmV4dF9zaWJsaW5nKHNlbGYpOgotICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImEiKQotICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDEwMCwgImIiKQotICAgICAgICBwMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsMSwgbDJdKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsMS5uZXh0X3NpYmxpbmcgaXMgbDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDIubmV4dF9zaWJsaW5nLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLm5leHRfc2libGluZywgTm9uZSkKLQotICAgIGRlZiB0ZXN0X25vZGVfcHJldl9zaWJsaW5nKHNlbGYpOgotICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtdKQotICAgICAgICBuMiA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtdKQotICAgICAgICBwMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtuMSwgbjJdKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuMi5wcmV2X3NpYmxpbmcgaXMgbjEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjEucHJldl9zaWJsaW5nLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnByZXZfc2libGluZywgTm9uZSkKLQotICAgIGRlZiB0ZXN0X2xlYWZfcHJldl9zaWJsaW5nKHNlbGYpOgotICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImEiKQotICAgICAgICBsMiA9IHB5dHJlZS5MZWFmKDEwMCwgImIiKQotICAgICAgICBwMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsMSwgbDJdKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsMi5wcmV2X3NpYmxpbmcgaXMgbDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDEucHJldl9zaWJsaW5nLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnByZXZfc2libGluZywgTm9uZSkKLQotCi1jbGFzcyBUZXN0UGF0dGVybnMoc3VwcG9ydC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJVbml0IHRlc3RzIGZvciB0cmVlIG1hdGNoaW5nIHBhdHRlcm5zLiIiIgotCi0gICAgZGVmIHRlc3RfYmFzaWNfcGF0dGVybnMoc2VsZik6Ci0gICAgICAgICMgQnVpbGQgYSB0cmVlCi0gICAgICAgIGwxID0gcHl0cmVlLkxlYWYoMTAwLCAiZm9vIikKLSAgICAgICAgbDIgPSBweXRyZWUuTGVhZigxMDAsICJiYXIiKQotICAgICAgICBsMyA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCi0gICAgICAgIG4xID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wxLCBsMl0pCi0gICAgICAgIG4yID0gcHl0cmVlLk5vZGUoMTAwMCwgW2wzXSkKLSAgICAgICAgcm9vdCA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtuMSwgbjJdKQotICAgICAgICAjIEJ1aWxkIGEgcGF0dGVybiBtYXRjaGluZyBhIGxlYWYKLSAgICAgICAgcGwgPSBweXRyZWUuTGVhZlBhdHRlcm4oMTAwLCAiZm9vIiwgbmFtZT0icGwiKQotICAgICAgICByID0ge30KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwbC5tYXRjaChyb290LCByZXN1bHRzPXIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIHt9KQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBsLm1hdGNoKG4xLCByZXN1bHRzPXIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIHt9KQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBsLm1hdGNoKG4yLCByZXN1bHRzPXIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIHt9KQotICAgICAgICBzZWxmLmFzc2VydFRydWUocGwubWF0Y2gobDEsIHJlc3VsdHM9cikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgeyJwbCI6IGwxfSkKLSAgICAgICAgciA9IHt9Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocGwubWF0Y2gobDIsIHJlc3VsdHM9cikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwge30pCi0gICAgICAgICMgQnVpbGQgYSBwYXR0ZXJuIG1hdGNoaW5nIGEgbm9kZQotICAgICAgICBwbiA9IHB5dHJlZS5Ob2RlUGF0dGVybigxMDAwLCBbcGxdLCBuYW1lPSJwbiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG4ubWF0Y2gocm9vdCwgcmVzdWx0cz1yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCB7fSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwbi5tYXRjaChuMSwgcmVzdWx0cz1yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCB7fSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBuLm1hdGNoKG4yLCByZXN1bHRzPXIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIHsicG4iOiBuMiwgInBsIjogbDN9KQotICAgICAgICByID0ge30KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwbi5tYXRjaChsMSwgcmVzdWx0cz1yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCB7fSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwbi5tYXRjaChsMiwgcmVzdWx0cz1yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCB7fSkKLQotICAgIGRlZiB0ZXN0X3dpbGRjYXJkKHNlbGYpOgotICAgICAgICAjIEJ1aWxkIGEgdHJlZSBmb3IgdGVzdGluZwotICAgICAgICBsMSA9IHB5dHJlZS5MZWFmKDEwMCwgImZvbyIpCi0gICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMTAwLCAiYmFyIikKLSAgICAgICAgbDMgPSBweXRyZWUuTGVhZigxMDAsICJmb28iKQotICAgICAgICBuMSA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsMSwgbDJdKQotICAgICAgICBuMiA9IHB5dHJlZS5Ob2RlKDEwMDAsIFtsM10pCi0gICAgICAgIHJvb3QgPSBweXRyZWUuTm9kZSgxMDAwLCBbbjEsIG4yXSkKLSAgICAgICAgIyBCdWlsZCBhIHBhdHRlcm4KLSAgICAgICAgcGwgPSBweXRyZWUuTGVhZlBhdHRlcm4oMTAwLCAiZm9vIiwgbmFtZT0icGwiKQotICAgICAgICBwbiA9IHB5dHJlZS5Ob2RlUGF0dGVybigxMDAwLCBbcGxdLCBuYW1lPSJwbiIpCi0gICAgICAgIHB3ID0gcHl0cmVlLldpbGRjYXJkUGF0dGVybihbW3BuXSwgW3BsLCBwbF1dLCBuYW1lPSJwdyIpCi0gICAgICAgIHIgPSB7fQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHB3Lm1hdGNoX3NlcShbcm9vdF0sIHIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIHt9KQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHB3Lm1hdGNoX3NlcShbbjFdLCByKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCB7fSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHB3Lm1hdGNoX3NlcShbbjJdLCByKSkKLSAgICAgICAgIyBUaGVzZSBhcmUgZWFzaWVyIHRvIGRlYnVnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHIua2V5cygpKSwgWyJwbCIsICJwbiIsICJwdyJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbInBsIl0sIGwxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbInBuIl0sIG4yKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbInB3Il0sIFtuMl0pCi0gICAgICAgICMgQnV0IHRoaXMgaXMgZXF1aXZhbGVudAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIHsicGwiOiBsMSwgInBuIjogbjIsICJwdyI6IFtuMl19KQotICAgICAgICByID0ge30KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHB3Lm1hdGNoX3NlcShbbDEsIGwzXSwgcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgeyJwbCI6IGwzLCAicHciOiBbbDEsIGwzXX0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyWyJwbCJdIGlzIGwzKQotICAgICAgICByID0ge30KLQotICAgIGRlZiB0ZXN0X2dlbmVyYXRlX21hdGNoZXMoc2VsZik6Ci0gICAgICAgIGxhID0gcHl0cmVlLkxlYWYoMSwgImEiKQotICAgICAgICBsYiA9IHB5dHJlZS5MZWFmKDEsICJiIikKLSAgICAgICAgbGMgPSBweXRyZWUuTGVhZigxLCAiYyIpCi0gICAgICAgIGxkID0gcHl0cmVlLkxlYWYoMSwgImQiKQotICAgICAgICBsZSA9IHB5dHJlZS5MZWFmKDEsICJlIikKLSAgICAgICAgbGYgPSBweXRyZWUuTGVhZigxLCAiZiIpCi0gICAgICAgIGxlYXZlcyA9IFtsYSwgbGIsIGxjLCBsZCwgbGUsIGxmXQotICAgICAgICByb290ID0gcHl0cmVlLk5vZGUoMTAwMCwgbGVhdmVzKQotICAgICAgICBwYSA9IHB5dHJlZS5MZWFmUGF0dGVybigxLCAiYSIsICJwYSIpCi0gICAgICAgIHBiID0gcHl0cmVlLkxlYWZQYXR0ZXJuKDEsICJiIiwgInBiIikKLSAgICAgICAgcGMgPSBweXRyZWUuTGVhZlBhdHRlcm4oMSwgImMiLCAicGMiKQotICAgICAgICBwZCA9IHB5dHJlZS5MZWFmUGF0dGVybigxLCAiZCIsICJwZCIpCi0gICAgICAgIHBlID0gcHl0cmVlLkxlYWZQYXR0ZXJuKDEsICJlIiwgInBlIikKLSAgICAgICAgcGYgPSBweXRyZWUuTGVhZlBhdHRlcm4oMSwgImYiLCAicGYiKQotICAgICAgICBwdyA9IHB5dHJlZS5XaWxkY2FyZFBhdHRlcm4oW1twYSwgcGIsIHBjXSwgW3BkLCBwZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhLCBwYl0sIFtwYywgcGRdLCBbcGUsIHBmXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49MSwgbWF4PTQsIG5hbWU9InB3IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbeFswXSBmb3IgeCBpbiBwdy5nZW5lcmF0ZV9tYXRjaGVzKGxlYXZlcyldLAotICAgICAgICAgICAgICAgICAgICAgICAgIFszLCA1LCAyLCA0LCA2XSkKLSAgICAgICAgcHIgPSBweXRyZWUuTm9kZVBhdHRlcm4odHlwZT0xMDAwLCBjb250ZW50PVtwd10sIG5hbWU9InByIikKLSAgICAgICAgbWF0Y2hlcyA9IGxpc3QocHl0cmVlLmdlbmVyYXRlX21hdGNoZXMoW3ByXSwgW3Jvb3RdKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obWF0Y2hlcyksIDEpCi0gICAgICAgIGMsIHIgPSBtYXRjaGVzWzBdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoclsicHIiXSksICJhYmNkZWYiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbInB3Il0sIFtsYSwgbGIsIGxjLCBsZCwgbGUsIGxmXSkKLSAgICAgICAgZm9yIGMgaW4gImFiY2RlZiI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbInAiICsgY10sIHB5dHJlZS5MZWFmKDEsIGMpKQotCi0gICAgZGVmIHRlc3RfaGFzX2tleV9leGFtcGxlKHNlbGYpOgotICAgICAgICBwYXR0ZXJuID0gcHl0cmVlLk5vZGVQYXR0ZXJuKDMzMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHl0cmVlLkxlYWZQYXR0ZXJuKDcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweXRyZWUuV2lsZGNhcmRQYXR0ZXJuKG5hbWU9ImFyZ3MiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHl0cmVlLkxlYWZQYXR0ZXJuKDgpKSkKLSAgICAgICAgbDEgPSBweXRyZWUuTGVhZig3LCAiKCIpCi0gICAgICAgIGwyID0gcHl0cmVlLkxlYWYoMywgIngiKQotICAgICAgICBsMyA9IHB5dHJlZS5MZWFmKDgsICIpIikKLSAgICAgICAgbm9kZSA9IHB5dHJlZS5Ob2RlKDMzMSwgW2wxLCBsMiwgbDNdKQotICAgICAgICByID0ge30KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhdHRlcm4ubWF0Y2gobm9kZSwgcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoclsiYXJncyJdLCBbbDJdKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL3Rlc3RfcmVmYWN0b3IucHkgYi9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvdGVzdF9yZWZhY3Rvci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAyMGQxZi4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvdGVzdF9yZWZhY3Rvci5weQorKysgL2Rldi9udWxsCkBAIC0xLDMxNyArMCwwIEBACi0iIiIKLVVuaXQgdGVzdHMgZm9yIHJlZmFjdG9yLnB5LgotIiIiCi0KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKLQotaW1wb3J0IHN5cwotaW1wb3J0IG9zCi1pbXBvcnQgY29kZWNzCi1pbXBvcnQgb3BlcmF0b3IKLWltcG9ydCBTdHJpbmdJTwotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCB3YXJuaW5ncwotCi1mcm9tIGxpYjJ0bzMgaW1wb3J0IHJlZmFjdG9yLCBweWdyYW0sIGZpeGVyX2Jhc2UKLWZyb20gbGliMnRvMy5wZ2VuMiBpbXBvcnQgdG9rZW4KLQotZnJvbSAuIGltcG9ydCBzdXBwb3J0Ci0KLQotVEVTVF9EQVRBX0RJUiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAiZGF0YSIpCi1GSVhFUl9ESVIgPSBvcy5wYXRoLmpvaW4oVEVTVF9EQVRBX0RJUiwgImZpeGVycyIpCi0KLXN5cy5wYXRoLmFwcGVuZChGSVhFUl9ESVIpCi10cnk6Ci0gICAgX0RFRkFVTFRfRklYRVJTID0gcmVmYWN0b3IuZ2V0X2ZpeGVyc19mcm9tX3BhY2thZ2UoIm15Zml4ZXMiKQotZmluYWxseToKLSAgICBzeXMucGF0aC5wb3AoKQotCi1fMlRPM19GSVhFUlMgPSByZWZhY3Rvci5nZXRfZml4ZXJzX2Zyb21fcGFja2FnZSgibGliMnRvMy5maXhlcyIpCi0KLWNsYXNzIFRlc3RSZWZhY3RvcmluZ1Rvb2wodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzeXMucGF0aC5hcHBlbmQoRklYRVJfRElSKQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzeXMucGF0aC5wb3AoKQotCi0gICAgZGVmIGNoZWNrX2luc3RhbmNlcyhzZWxmLCBpbnN0YW5jZXMsIGNsYXNzZXMpOgotICAgICAgICBmb3IgaW5zdCwgY2xzIGluIHppcChpbnN0YW5jZXMsIGNsYXNzZXMpOgotICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaW5zdCwgY2xzKToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzIGFyZSBub3QgaW5zdGFuY2VzIG9mICVzIiAlIGluc3RhbmNlcywgY2xhc3NlcykKLQotICAgIGRlZiBydChzZWxmLCBvcHRpb25zPU5vbmUsIGZpeGVycz1fREVGQVVMVF9GSVhFUlMsIGV4cGxpY2l0PU5vbmUpOgotICAgICAgICByZXR1cm4gcmVmYWN0b3IuUmVmYWN0b3JpbmdUb29sKGZpeGVycywgb3B0aW9ucywgZXhwbGljaXQpCi0KLSAgICBkZWYgdGVzdF9wcmludF9mdW5jdGlvbl9vcHRpb24oc2VsZik6Ci0gICAgICAgIHJ0ID0gc2VsZi5ydCh7InByaW50X2Z1bmN0aW9uIiA6IFRydWV9KQotICAgICAgICBzZWxmLmFzc2VydFRydWUocnQuZ3JhbW1hciBpcyBweWdyYW0ucHl0aG9uX2dyYW1tYXJfbm9fcHJpbnRfc3RhdGVtZW50KQotICAgICAgICBzZWxmLmFzc2VydFRydWUocnQuZHJpdmVyLmdyYW1tYXIgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgIHB5Z3JhbS5weXRob25fZ3JhbW1hcl9ub19wcmludF9zdGF0ZW1lbnQpCi0KLSAgICBkZWYgdGVzdF93cml0ZV91bmNoYW5nZWRfZmlsZXNfb3B0aW9uKHNlbGYpOgotICAgICAgICBydCA9IHNlbGYucnQoKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJ0LndyaXRlX3VuY2hhbmdlZF9maWxlcykKLSAgICAgICAgcnQgPSBzZWxmLnJ0KHsid3JpdGVfdW5jaGFuZ2VkX2ZpbGVzIiA6IFRydWV9KQotICAgICAgICBzZWxmLmFzc2VydFRydWUocnQud3JpdGVfdW5jaGFuZ2VkX2ZpbGVzKQotCi0gICAgZGVmIHRlc3RfZml4ZXJfbG9hZGluZ19oZWxwZXJzKHNlbGYpOgotICAgICAgICBjb250ZW50cyA9IFsiZXhwbGljaXQiLCAiZmlyc3QiLCAibGFzdCIsICJwYXJyb3QiLCAicHJlb3JkZXIiXQotICAgICAgICBub25fcHJlZml4ZWQgPSByZWZhY3Rvci5nZXRfYWxsX2ZpeF9uYW1lcygibXlmaXhlcyIpCi0gICAgICAgIHByZWZpeGVkID0gcmVmYWN0b3IuZ2V0X2FsbF9maXhfbmFtZXMoIm15Zml4ZXMiLCBGYWxzZSkKLSAgICAgICAgZnVsbF9uYW1lcyA9IHJlZmFjdG9yLmdldF9maXhlcnNfZnJvbV9wYWNrYWdlKCJteWZpeGVzIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcmVmaXhlZCwgWyJmaXhfIiArIG5hbWUgZm9yIG5hbWUgaW4gY29udGVudHNdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vbl9wcmVmaXhlZCwgY29udGVudHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVsbF9uYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBbIm15Zml4ZXMuZml4XyIgKyBuYW1lIGZvciBuYW1lIGluIGNvbnRlbnRzXSkKLQotICAgIGRlZiB0ZXN0X2RldGVjdF9mdXR1cmVfZmVhdHVyZXMoc2VsZik6Ci0gICAgICAgIHJ1biA9IHJlZmFjdG9yLl9kZXRlY3RfZnV0dXJlX2ZlYXR1cmVzCi0gICAgICAgIGZzID0gZnJvemVuc2V0Ci0gICAgICAgIGVtcHR5ID0gZnMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bigiIiksIGVtcHR5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bigiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZzKCgicHJpbnRfZnVuY3Rpb24iLCkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bigiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBnZW5lcmF0b3JzIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZnMoKCJnZW5lcmF0b3JzIiwpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW4oImZyb20gX19mdXR1cmVfXyBpbXBvcnQgZ2VuZXJhdG9ycywgZmVhdHVyZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZzKCgiZ2VuZXJhdG9ycyIsICJmZWF0dXJlIikpKQotICAgICAgICBpbnAgPSAiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBnZW5lcmF0b3JzLCBwcmludF9mdW5jdGlvbiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW4oaW5wKSwgZnMoKCJnZW5lcmF0b3JzIiwgInByaW50X2Z1bmN0aW9uIikpKQotICAgICAgICBpbnAgPSJmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uLCBnZW5lcmF0b3JzIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bihpbnApLCBmcygoInByaW50X2Z1bmN0aW9uIiwgImdlbmVyYXRvcnMiKSkpCi0gICAgICAgIGlucCA9ICJmcm9tIF9fZnV0dXJlX18gaW1wb3J0IChwcmludF9mdW5jdGlvbiwpIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bihpbnApLCBmcygoInByaW50X2Z1bmN0aW9uIiwpKSkKLSAgICAgICAgaW5wID0gImZyb20gX19mdXR1cmVfXyBpbXBvcnQgKGdlbmVyYXRvcnMsIHByaW50X2Z1bmN0aW9uKSIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW4oaW5wKSwgZnMoKCJnZW5lcmF0b3JzIiwgInByaW50X2Z1bmN0aW9uIikpKQotICAgICAgICBpbnAgPSAiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCAoZ2VuZXJhdG9ycywgbmVzdGVkX3Njb3BlcykiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuKGlucCksIGZzKCgiZ2VuZXJhdG9ycyIsICJuZXN0ZWRfc2NvcGVzIikpKQotICAgICAgICBpbnAgPSAiIiJmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGdlbmVyYXRvcnMKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24iIiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW4oaW5wKSwgZnMoKCJnZW5lcmF0b3JzIiwgInByaW50X2Z1bmN0aW9uIikpKQotICAgICAgICBpbnZhbGlkID0gKCJmcm9tIiwKLSAgICAgICAgICAgICAgICAgICAiZnJvbSA0IiwKLSAgICAgICAgICAgICAgICAgICAiZnJvbSB4IiwKLSAgICAgICAgICAgICAgICAgICAiZnJvbSB4IDUiLAotICAgICAgICAgICAgICAgICAgICJmcm9tIHggaW0iLAotICAgICAgICAgICAgICAgICAgICJmcm9tIHggaW1wb3J0IiwKLSAgICAgICAgICAgICAgICAgICAiZnJvbSB4IGltcG9ydCA0IiwKLSAgICAgICAgICAgICAgICAgICApCi0gICAgICAgIGZvciBpbnAgaW4gaW52YWxpZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuKGlucCksIGVtcHR5KQotICAgICAgICBpbnAgPSAiJ2RvY3N0cmluZydcbmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24iCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuKGlucCksIGZzKCgicHJpbnRfZnVuY3Rpb24iLCkpKQotICAgICAgICBpbnAgPSAiJ2RvY3N0cmluZydcbidzb21uZydcbmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24iCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuKGlucCksIGVtcHR5KQotICAgICAgICBpbnAgPSAiIyBjb21tZW50XG5mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bihpbnApLCBmcygoInByaW50X2Z1bmN0aW9uIiwpKSkKLSAgICAgICAgaW5wID0gIiMgY29tbWVudFxuJ2RvYydcbmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24iCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuKGlucCksIGZzKCgicHJpbnRfZnVuY3Rpb24iLCkpKQotICAgICAgICBpbnAgPSAiY2xhc3MgeDogcGFzc1xuZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW4oaW5wKSwgZW1wdHkpCi0KLSAgICBkZWYgdGVzdF9nZXRfaGVhZG5vZGVfZGljdChzZWxmKToKLSAgICAgICAgY2xhc3MgTm9uZUZpeChmaXhlcl9iYXNlLkJhc2VGaXgpOgotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGNsYXNzIEZpbGVJbnB1dEZpeChmaXhlcl9iYXNlLkJhc2VGaXgpOgotICAgICAgICAgICAgUEFUVEVSTiA9ICJmaWxlX2lucHV0PCBhbnkgKiA+IgotCi0gICAgICAgIGNsYXNzIFNpbXBsZUZpeChmaXhlcl9iYXNlLkJhc2VGaXgpOgotICAgICAgICAgICAgUEFUVEVSTiA9ICInbmFtZSciCi0KLSAgICAgICAgbm9faGVhZCA9IE5vbmVGaXgoe30sIFtdKQotICAgICAgICB3aXRoX2hlYWQgPSBGaWxlSW5wdXRGaXgoe30sIFtdKQotICAgICAgICBzaW1wbGUgPSBTaW1wbGVGaXgoe30sIFtdKQotICAgICAgICBkID0gcmVmYWN0b3IuX2dldF9oZWFkbm9kZV9kaWN0KFtub19oZWFkLCB3aXRoX2hlYWQsIHNpbXBsZV0pCi0gICAgICAgIHRvcF9maXhlcyA9IGQucG9wKHB5Z3JhbS5weXRob25fc3ltYm9scy5maWxlX2lucHV0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRvcF9maXhlcywgW3dpdGhfaGVhZCwgbm9faGVhZF0pCi0gICAgICAgIG5hbWVfZml4ZXMgPSBkLnBvcCh0b2tlbi5OQU1FKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVfZml4ZXMsIFtzaW1wbGUsIG5vX2hlYWRdKQotICAgICAgICBmb3IgZml4ZXMgaW4gZC5pdGVydmFsdWVzKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGVzLCBbbm9faGVhZF0pCi0KLSAgICBkZWYgdGVzdF9maXhlcl9sb2FkaW5nKHNlbGYpOgotICAgICAgICBmcm9tIG15Zml4ZXMuZml4X2ZpcnN0IGltcG9ydCBGaXhGaXJzdAotICAgICAgICBmcm9tIG15Zml4ZXMuZml4X2xhc3QgaW1wb3J0IEZpeExhc3QKLSAgICAgICAgZnJvbSBteWZpeGVzLmZpeF9wYXJyb3QgaW1wb3J0IEZpeFBhcnJvdAotICAgICAgICBmcm9tIG15Zml4ZXMuZml4X3ByZW9yZGVyIGltcG9ydCBGaXhQcmVvcmRlcgotCi0gICAgICAgIHJ0ID0gc2VsZi5ydCgpCi0gICAgICAgIHByZSwgcG9zdCA9IHJ0LmdldF9maXhlcnMoKQotCi0gICAgICAgIHNlbGYuY2hlY2tfaW5zdGFuY2VzKHByZSwgW0ZpeFByZW9yZGVyXSkKLSAgICAgICAgc2VsZi5jaGVja19pbnN0YW5jZXMocG9zdCwgW0ZpeEZpcnN0LCBGaXhQYXJyb3QsIEZpeExhc3RdKQotCi0gICAgZGVmIHRlc3RfbmF1Z2h0eV9maXhlcnMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBzZWxmLnJ0LCBmaXhlcnM9WyJub3RfaGVyZSJdKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZWZhY3Rvci5GaXhlckVycm9yLCBzZWxmLnJ0LCBmaXhlcnM9WyJub19maXhlcl9jbHMiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmVmYWN0b3IuRml4ZXJFcnJvciwgc2VsZi5ydCwgZml4ZXJzPVsiYmFkX29yZGVyIl0pCi0KLSAgICBkZWYgdGVzdF9yZWZhY3Rvcl9zdHJpbmcoc2VsZik6Ci0gICAgICAgIHJ0ID0gc2VsZi5ydCgpCi0gICAgICAgIGlucHV0ID0gImRlZiBwYXJyb3QoKTogcGFzc1xuXG4iCi0gICAgICAgIHRyZWUgPSBydC5yZWZhY3Rvcl9zdHJpbmcoaW5wdXQsICI8dGVzdD4iKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHN0cih0cmVlKSwgaW5wdXQpCi0KLSAgICAgICAgaW5wdXQgPSAiZGVmIGYoKTogcGFzc1xuXG4iCi0gICAgICAgIHRyZWUgPSBydC5yZWZhY3Rvcl9zdHJpbmcoaW5wdXQsICI8dGVzdD4iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0cmVlKSwgaW5wdXQpCi0KLSAgICBkZWYgdGVzdF9yZWZhY3Rvcl9zdGRpbihzZWxmKToKLQotICAgICAgICBjbGFzcyBNeVJUKHJlZmFjdG9yLlJlZmFjdG9yaW5nVG9vbCk6Ci0KLSAgICAgICAgICAgIGRlZiBwcmludF9vdXRwdXQoc2VsZiwgb2xkX3RleHQsIG5ld190ZXh0LCBmaWxlbmFtZSwgZXF1YWwpOgotICAgICAgICAgICAgICAgIHJlc3VsdHMuZXh0ZW5kKFtvbGRfdGV4dCwgbmV3X3RleHQsIGZpbGVuYW1lLCBlcXVhbF0pCi0KLSAgICAgICAgcmVzdWx0cyA9IFtdCi0gICAgICAgIHJ0ID0gTXlSVChfREVGQVVMVF9GSVhFUlMpCi0gICAgICAgIHNhdmUgPSBzeXMuc3RkaW4KLSAgICAgICAgc3lzLnN0ZGluID0gU3RyaW5nSU8uU3RyaW5nSU8oImRlZiBwYXJyb3QoKTogcGFzc1xuXG4iKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBydC5yZWZhY3Rvcl9zdGRpbigpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuc3RkaW4gPSBzYXZlCi0gICAgICAgIGV4cGVjdGVkID0gWyJkZWYgcGFycm90KCk6IHBhc3NcblxuIiwKLSAgICAgICAgICAgICAgICAgICAgImRlZiBjaGVlc2UoKTogcGFzc1xuXG4iLAotICAgICAgICAgICAgICAgICAgICAiPHN0ZGluPiIsIEZhbHNlXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIGV4cGVjdGVkKQotCi0gICAgZGVmIGNoZWNrX2ZpbGVfcmVmYWN0b3Jpbmcoc2VsZiwgdGVzdF9maWxlLCBmaXhlcnM9XzJUTzNfRklYRVJTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9Tm9uZSwgbW9ja19sb2dfZGVidWc9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxseV93cml0ZT1UcnVlKToKLSAgICAgICAgdG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9IjJ0bzMtdGVzdF9yZWZhY3RvciIpCi0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChzaHV0aWwucm10cmVlLCB0bXBkaXIpCi0gICAgICAgICMgbWFrZSBhIGNvcHkgb2YgdGhlIHRlc3RlZCBmaWxlIHRoYXQgd2UgY2FuIHdyaXRlIHRvCi0gICAgICAgIHNodXRpbC5jb3B5KHRlc3RfZmlsZSwgdG1wZGlyKQotICAgICAgICB0ZXN0X2ZpbGUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCBvcy5wYXRoLmJhc2VuYW1lKHRlc3RfZmlsZSkpCi0gICAgICAgIG9zLmNobW9kKHRlc3RfZmlsZSwgMG82NDQpCi0KLSAgICAgICAgZGVmIHJlYWRfZmlsZSgpOgotICAgICAgICAgICAgd2l0aCBvcGVuKHRlc3RfZmlsZSwgInJiIikgYXMgZnA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZwLnJlYWQoKQotCi0gICAgICAgIG9sZF9jb250ZW50cyA9IHJlYWRfZmlsZSgpCi0gICAgICAgIHJ0ID0gc2VsZi5ydChmaXhlcnM9Zml4ZXJzLCBvcHRpb25zPW9wdGlvbnMpCi0gICAgICAgIGlmIG1vY2tfbG9nX2RlYnVnOgotICAgICAgICAgICAgcnQubG9nX2RlYnVnID0gbW9ja19sb2dfZGVidWcKLQotICAgICAgICBydC5yZWZhY3Rvcl9maWxlKHRlc3RfZmlsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvbGRfY29udGVudHMsIHJlYWRfZmlsZSgpKQotCi0gICAgICAgIGlmIG5vdCBhY3R1YWxseV93cml0ZToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBydC5yZWZhY3Rvcl9maWxlKHRlc3RfZmlsZSwgVHJ1ZSkKLSAgICAgICAgbmV3X2NvbnRlbnRzID0gcmVhZF9maWxlKCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChvbGRfY29udGVudHMsIG5ld19jb250ZW50cykKLSAgICAgICAgcmV0dXJuIG5ld19jb250ZW50cwotCi0gICAgZGVmIHRlc3RfcmVmYWN0b3JfZmlsZShzZWxmKToKLSAgICAgICAgdGVzdF9maWxlID0gb3MucGF0aC5qb2luKEZJWEVSX0RJUiwgInBhcnJvdF9leGFtcGxlLnB5IikKLSAgICAgICAgc2VsZi5jaGVja19maWxlX3JlZmFjdG9yaW5nKHRlc3RfZmlsZSwgX0RFRkFVTFRfRklYRVJTKQotCi0gICAgZGVmIHRlc3RfcmVmYWN0b3JfZmlsZV93cml0ZV91bmNoYW5nZWRfZmlsZShzZWxmKToKLSAgICAgICAgdGVzdF9maWxlID0gb3MucGF0aC5qb2luKEZJWEVSX0RJUiwgInBhcnJvdF9leGFtcGxlLnB5IikKLSAgICAgICAgZGVidWdfbWVzc2FnZXMgPSBbXQotICAgICAgICBkZWYgcmVjb3JkaW5nX2xvZ19kZWJ1Zyhtc2csICphcmdzKToKLSAgICAgICAgICAgIGRlYnVnX21lc3NhZ2VzLmFwcGVuZChtc2cgJSBhcmdzKQotICAgICAgICBzZWxmLmNoZWNrX2ZpbGVfcmVmYWN0b3JpbmcodGVzdF9maWxlLCBmaXhlcnM9KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXsid3JpdGVfdW5jaGFuZ2VkX2ZpbGVzIjogVHJ1ZX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrX2xvZ19kZWJ1Zz1yZWNvcmRpbmdfbG9nX2RlYnVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsbHlfd3JpdGU9RmFsc2UpCi0gICAgICAgICMgVGVzdGluZyB0aGF0IGl0IGxvZ2dlZCB0aGlzIG1lc3NhZ2Ugd2hlbiB3cml0ZT1GYWxzZSB3YXMgcGFzc2VkIGlzCi0gICAgICAgICMgc3VmZmljaWVudCB0byBzZWUgdGhhdCBpdCBkaWQgbm90IGJhaWwgZWFybHkgYWZ0ZXIgIk5vIGNoYW5nZXMiLgotICAgICAgICBtZXNzYWdlX3JlZ2V4ID0gciJOb3Qgd3JpdGluZyBjaGFuZ2VzIHRvIC4qJXMlcyIgJSAoCi0gICAgICAgICAgICAgICAgb3Muc2VwLCBvcy5wYXRoLmJhc2VuYW1lKHRlc3RfZmlsZSkpCi0gICAgICAgIGZvciBtZXNzYWdlIGluIGRlYnVnX21lc3NhZ2VzOgotICAgICAgICAgICAgaWYgIk5vdCB3cml0aW5nIGNoYW5nZXMiIGluIG1lc3NhZ2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKG1lc3NhZ2UsIG1lc3NhZ2VfcmVnZXgpCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiJXIgbm90IG1hdGNoZWQgaW4gJXIiICUgKG1lc3NhZ2VfcmVnZXgsIGRlYnVnX21lc3NhZ2VzKSkKLQotICAgIGRlZiB0ZXN0X3JlZmFjdG9yX2RpcihzZWxmKToKLSAgICAgICAgZGVmIGNoZWNrKHN0cnVjdHVyZSwgZXhwZWN0ZWQpOgotICAgICAgICAgICAgZGVmIG1vY2tfcmVmYWN0b3JfZmlsZShzZWxmLCBmLCAqYXJncyk6Ci0gICAgICAgICAgICAgICAgZ290LmFwcGVuZChmKQotICAgICAgICAgICAgc2F2ZV9mdW5jID0gcmVmYWN0b3IuUmVmYWN0b3JpbmdUb29sLnJlZmFjdG9yX2ZpbGUKLSAgICAgICAgICAgIHJlZmFjdG9yLlJlZmFjdG9yaW5nVG9vbC5yZWZhY3Rvcl9maWxlID0gbW9ja19yZWZhY3Rvcl9maWxlCi0gICAgICAgICAgICBydCA9IHNlbGYucnQoKQotICAgICAgICAgICAgZ290ID0gW10KLSAgICAgICAgICAgIGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSIydG8zLXRlc3RfcmVmYWN0b3IiKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihkaXIsICJhX2RpciIpKQotICAgICAgICAgICAgICAgIGZvciBmbiBpbiBzdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKGRpciwgZm4pLCAid2IiKS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgcnQucmVmYWN0b3JfZGlyKGRpcikKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgcmVmYWN0b3IuUmVmYWN0b3JpbmdUb29sLnJlZmFjdG9yX2ZpbGUgPSBzYXZlX2Z1bmMKLSAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRpcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3MucGF0aC5qb2luKGRpciwgcGF0aCkgZm9yIHBhdGggaW4gZXhwZWN0ZWRdKQotICAgICAgICBjaGVjayhbXSwgW10pCi0gICAgICAgIHRyZWUgPSBbIm5vdGhpbmciLAotICAgICAgICAgICAgICAgICJoaS5weSIsCi0gICAgICAgICAgICAgICAgIi5kdW1iIiwKLSAgICAgICAgICAgICAgICAiLmFmdGVyLnB5IiwKLSAgICAgICAgICAgICAgICAibm90cHkubnB5IiwKLSAgICAgICAgICAgICAgICAic2FwcHkiXQotICAgICAgICBleHBlY3RlZCA9IFsiaGkucHkiXQotICAgICAgICBjaGVjayh0cmVlLCBleHBlY3RlZCkKLSAgICAgICAgdHJlZSA9IFsiaGkucHkiLAotICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbigiYV9kaXIiLCAic3R1ZmYucHkiKV0KLSAgICAgICAgY2hlY2sodHJlZSwgdHJlZSkKLQotICAgIGRlZiB0ZXN0X2ZpbGVfZW5jb2Rpbmcoc2VsZik6Ci0gICAgICAgIGZuID0gb3MucGF0aC5qb2luKFRFU1RfREFUQV9ESVIsICJkaWZmZXJlbnRfZW5jb2RpbmcucHkiKQotICAgICAgICBzZWxmLmNoZWNrX2ZpbGVfcmVmYWN0b3JpbmcoZm4pCi0KLSAgICBkZWYgdGVzdF9ib20oc2VsZik6Ci0gICAgICAgIGZuID0gb3MucGF0aC5qb2luKFRFU1RfREFUQV9ESVIsICJib20ucHkiKQotICAgICAgICBkYXRhID0gc2VsZi5jaGVja19maWxlX3JlZmFjdG9yaW5nKGZuKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5zdGFydHN3aXRoKGNvZGVjcy5CT01fVVRGOCkpCi0KLSAgICBkZWYgdGVzdF9jcmxmX25ld2xpbmVzKHNlbGYpOgotICAgICAgICBvbGRfc2VwID0gb3MubGluZXNlcAotICAgICAgICBvcy5saW5lc2VwID0gIlxyXG4iCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKFRFU1RfREFUQV9ESVIsICJjcmxmLnB5IikKLSAgICAgICAgICAgIGZpeGVzID0gcmVmYWN0b3IuZ2V0X2ZpeGVyc19mcm9tX3BhY2thZ2UoImxpYjJ0bzMuZml4ZXMiKQotICAgICAgICAgICAgc2VsZi5jaGVja19maWxlX3JlZmFjdG9yaW5nKGZuLCBmaXhlcykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLmxpbmVzZXAgPSBvbGRfc2VwCi0KLSAgICBkZWYgdGVzdF9yZWZhY3Rvcl9kb2NzdHJpbmcoc2VsZik6Ci0gICAgICAgIHJ0ID0gc2VsZi5ydCgpCi0KLSAgICAgICAgZG9jID0gIiIiCi0+Pj4gZXhhbXBsZSgpCi00MgotIiIiCi0gICAgICAgIG91dCA9IHJ0LnJlZmFjdG9yX2RvY3N0cmluZyhkb2MsICI8dGVzdD4iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZG9jKQotCi0gICAgICAgIGRvYyA9ICIiIgotPj4+IGRlZiBwYXJyb3QoKToKLS4uLiAgICAgIHJldHVybiA0MwotIiIiCi0gICAgICAgIG91dCA9IHJ0LnJlZmFjdG9yX2RvY3N0cmluZyhkb2MsICI8dGVzdD4iKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG91dCwgZG9jKQotCi0gICAgZGVmIHRlc3RfZXhwbGljaXQoc2VsZik6Ci0gICAgICAgIGZyb20gbXlmaXhlcy5maXhfZXhwbGljaXQgaW1wb3J0IEZpeEV4cGxpY2l0Ci0KLSAgICAgICAgcnQgPSBzZWxmLnJ0KGZpeGVycz1bIm15Zml4ZXMuZml4X2V4cGxpY2l0Il0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJ0LnBvc3Rfb3JkZXIpLCAwKQotCi0gICAgICAgIHJ0ID0gc2VsZi5ydChleHBsaWNpdD1bIm15Zml4ZXMuZml4X2V4cGxpY2l0Il0pCi0gICAgICAgIGZvciBmaXggaW4gcnQucG9zdF9vcmRlcjoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZml4LCBGaXhFeHBsaWNpdCk6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwbGljaXQgZml4ZXIgbm90IGxvYWRlZCIpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvdGVzdF91dGlsLnB5IGIvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL3Rlc3RfdXRpbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZhYjhiOS4uMDAwMDAwMAotLS0gYS9saWIvcHl0aG9uMi43L2xpYjJ0bzMvdGVzdHMvdGVzdF91dGlsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTk0ICswLDAgQEAKLSIiIiBUZXN0IHN1aXRlIGZvciB0aGUgY29kZSBpbiBmaXhlcl91dGlsICIiIgotCi0jIFRlc3RpbmcgaW1wb3J0cwotZnJvbSAuIGltcG9ydCBzdXBwb3J0Ci0KLSMgUHl0aG9uIGltcG9ydHMKLWltcG9ydCBvcy5wYXRoCi0KLSMgTG9jYWwgaW1wb3J0cwotZnJvbSBsaWIydG8zLnB5dHJlZSBpbXBvcnQgTm9kZSwgTGVhZgotZnJvbSBsaWIydG8zIGltcG9ydCBmaXhlcl91dGlsCi1mcm9tIGxpYjJ0bzMuZml4ZXJfdXRpbCBpbXBvcnQgQXR0ciwgTmFtZSwgQ2FsbCwgQ29tbWEKLWZyb20gbGliMnRvMy5wZ2VuMiBpbXBvcnQgdG9rZW4KLQotZGVmIHBhcnNlKGNvZGUsIHN0cmlwX2xldmVscz0wKToKLSAgICAjIFRoZSB0b3Btb3N0IG5vZGUgaXMgZmlsZV9pbnB1dCwgd2hpY2ggd2UgZG9uJ3QgY2FyZSBhYm91dC4KLSAgICAjIFRoZSBuZXh0LXRvcG1vc3Qgbm9kZSBpcyBhICpfc3RtdCBub2RlLCB3aGljaCB3ZSBhbHNvIGRvbid0IGNhcmUgYWJvdXQKLSAgICB0cmVlID0gc3VwcG9ydC5wYXJzZV9zdHJpbmcoY29kZSkKLSAgICBmb3IgaSBpbiByYW5nZShzdHJpcF9sZXZlbHMpOgotICAgICAgICB0cmVlID0gdHJlZS5jaGlsZHJlblswXQotICAgIHRyZWUucGFyZW50ID0gTm9uZQotICAgIHJldHVybiB0cmVlCi0KLWNsYXNzIE1hY3JvVGVzdENhc2Uoc3VwcG9ydC5UZXN0Q2FzZSk6Ci0gICAgZGVmIGFzc2VydFN0cihzZWxmLCBub2RlLCBzdHJpbmcpOgotICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUsICh0dXBsZSwgbGlzdCkpOgotICAgICAgICAgICAgbm9kZSA9IE5vZGUoZml4ZXJfdXRpbC5zeW1zLnNpbXBsZV9zdG10LCBub2RlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihub2RlKSwgc3RyaW5nKQotCi0KLWNsYXNzIFRlc3RfaXNfdHVwbGUoc3VwcG9ydC5UZXN0Q2FzZSk6Ci0gICAgZGVmIGlzX3R1cGxlKHNlbGYsIHN0cmluZyk6Ci0gICAgICAgIHJldHVybiBmaXhlcl91dGlsLmlzX3R1cGxlKHBhcnNlKHN0cmluZywgc3RyaXBfbGV2ZWxzPTIpKQotCi0gICAgZGVmIHRlc3RfdmFsaWQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlzX3R1cGxlKCIoYSwgYikiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXNfdHVwbGUoIihhLCAoYiwgYykpIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlzX3R1cGxlKCIoKGEsIChiLCBjKSksKSIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5pc190dXBsZSgiKGEsKSIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5pc190dXBsZSgiKCkiKSkKLQotICAgIGRlZiB0ZXN0X2ludmFsaWQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5pc190dXBsZSgiKGEpIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5pc190dXBsZSgiKCdmb28nKSAlIChiLCBjKSIpKQotCi0KLWNsYXNzIFRlc3RfaXNfbGlzdChzdXBwb3J0LlRlc3RDYXNlKToKLSAgICBkZWYgaXNfbGlzdChzZWxmLCBzdHJpbmcpOgotICAgICAgICByZXR1cm4gZml4ZXJfdXRpbC5pc19saXN0KHBhcnNlKHN0cmluZywgc3RyaXBfbGV2ZWxzPTIpKQotCi0gICAgZGVmIHRlc3RfdmFsaWQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlzX2xpc3QoIltdIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmlzX2xpc3QoIlthXSIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5pc19saXN0KCJbYSwgYl0iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXNfbGlzdCgiW2EsIFtiLCBjXV0iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaXNfbGlzdCgiW1thLCBbYiwgY11dLF0iKSkKLQotICAgIGRlZiB0ZXN0X2ludmFsaWQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5pc19saXN0KCJbXStbXSIpKQotCi0KLWNsYXNzIFRlc3RfQXR0cihNYWNyb1Rlc3RDYXNlKToKLSAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgY2FsbCA9IHBhcnNlKCJmb28oKSIsIHN0cmlwX2xldmVscz0yKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0U3RyKEF0dHIoTmFtZSgiYSIpLCBOYW1lKCJiIikpLCAiYS5iIikKLSAgICAgICAgc2VsZi5hc3NlcnRTdHIoQXR0cihjYWxsLCBOYW1lKCJiIikpLCAiZm9vKCkuYiIpCi0KLSAgICBkZWYgdGVzdF9yZXR1cm5zKHNlbGYpOgotICAgICAgICBhdHRyID0gQXR0cihOYW1lKCJhIiksIE5hbWUoImIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGF0dHIpLCBsaXN0KQotCi0KLWNsYXNzIFRlc3RfTmFtZShNYWNyb1Rlc3RDYXNlKToKLSAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRTdHIoTmFtZSgiYSIpLCAiYSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0U3RyKE5hbWUoImZvby5mb28oKS5iYXIiKSwgImZvby5mb28oKS5iYXIiKQotICAgICAgICBzZWxmLmFzc2VydFN0cihOYW1lKCJhIiwgcHJlZml4PSJiIiksICJiYSIpCi0KLQotY2xhc3MgVGVzdF9DYWxsKE1hY3JvVGVzdENhc2UpOgotICAgIGRlZiBfQ2FsbChzZWxmLCBuYW1lLCBhcmdzPU5vbmUsIHByZWZpeD1Ob25lKToKLSAgICAgICAgIiIiSGVscCB0aGUgbmV4dCB0ZXN0IiIiCi0gICAgICAgIGNoaWxkcmVuID0gW10KLSAgICAgICAgaWYgaXNpbnN0YW5jZShhcmdzLCBsaXN0KToKLSAgICAgICAgICAgIGZvciBhcmcgaW4gYXJnczoKLSAgICAgICAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQoYXJnKQotICAgICAgICAgICAgICAgIGNoaWxkcmVuLmFwcGVuZChDb21tYSgpKQotICAgICAgICAgICAgY2hpbGRyZW4ucG9wKCkKLSAgICAgICAgcmV0dXJuIENhbGwoTmFtZShuYW1lKSwgY2hpbGRyZW4sIHByZWZpeCkKLQotICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICBraWRzID0gW05vbmUsCi0gICAgICAgICAgICAgICAgW0xlYWYodG9rZW4uTlVNQkVSLCAxKSwgTGVhZih0b2tlbi5OVU1CRVIsIDIpLAotICAgICAgICAgICAgICAgICBMZWFmKHRva2VuLk5VTUJFUiwgMyldLAotICAgICAgICAgICAgICAgIFtMZWFmKHRva2VuLk5VTUJFUiwgMSksIExlYWYodG9rZW4uTlVNQkVSLCAzKSwKLSAgICAgICAgICAgICAgICAgTGVhZih0b2tlbi5OVU1CRVIsIDIpLCBMZWFmKHRva2VuLk5VTUJFUiwgNCldLAotICAgICAgICAgICAgICAgIFtMZWFmKHRva2VuLlNUUklORywgImIiKSwgTGVhZih0b2tlbi5TVFJJTkcsICJqIiwgcHJlZml4PSIgIildCi0gICAgICAgICAgICAgICAgXQotICAgICAgICBzZWxmLmFzc2VydFN0cihzZWxmLl9DYWxsKCJBIiksICJBKCkiKQotICAgICAgICBzZWxmLmFzc2VydFN0cihzZWxmLl9DYWxsKCJiIiwga2lkc1sxXSksICJiKDEsMiwzKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0U3RyKHNlbGYuX0NhbGwoImEuYigpLmMiLCBraWRzWzJdKSwgImEuYigpLmMoMSwzLDIsNCkiKQotICAgICAgICBzZWxmLmFzc2VydFN0cihzZWxmLl9DYWxsKCJkIiwga2lkc1szXSwgcHJlZml4PSIgIiksICIgZChiLCBqKSIpCi0KLQotY2xhc3MgVGVzdF9kb2VzX3RyZWVfaW1wb3J0KHN1cHBvcnQuVGVzdENhc2UpOgotICAgIGRlZiBfZmluZF9iaW5kX3JlYyhzZWxmLCBuYW1lLCBub2RlKToKLSAgICAgICAgIyBTZWFyY2ggYSB0cmVlIGZvciBhIGJpbmRpbmcgLS0gdXNlZCB0byBmaW5kIHRoZSBzdGFydGluZwotICAgICAgICAjIHBvaW50IGZvciB0aGVzZSB0ZXN0cy4KLSAgICAgICAgYyA9IGZpeGVyX3V0aWwuZmluZF9iaW5kaW5nKG5hbWUsIG5vZGUpCi0gICAgICAgIGlmIGM6IHJldHVybiBjCi0gICAgICAgIGZvciBjaGlsZCBpbiBub2RlLmNoaWxkcmVuOgotICAgICAgICAgICAgYyA9IHNlbGYuX2ZpbmRfYmluZF9yZWMobmFtZSwgY2hpbGQpCi0gICAgICAgICAgICBpZiBjOiByZXR1cm4gYwotCi0gICAgZGVmIGRvZXNfdHJlZV9pbXBvcnQoc2VsZiwgcGFja2FnZSwgbmFtZSwgc3RyaW5nKToKLSAgICAgICAgbm9kZSA9IHBhcnNlKHN0cmluZykKLSAgICAgICAgIyBGaW5kIHRoZSBiaW5kaW5nIG9mIHN0YXJ0IC0tIHRoYXQncyB3aGF0IHdlJ2xsIGdvIGZyb20KLSAgICAgICAgbm9kZSA9IHNlbGYuX2ZpbmRfYmluZF9yZWMoJ3N0YXJ0Jywgbm9kZSkKLSAgICAgICAgcmV0dXJuIGZpeGVyX3V0aWwuZG9lc190cmVlX2ltcG9ydChwYWNrYWdlLCBuYW1lLCBub2RlKQotCi0gICAgZGVmIHRyeV93aXRoKHNlbGYsIHN0cmluZyk6Ci0gICAgICAgIGZhaWxpbmdfdGVzdHMgPSAoKCJhIiwgImEiLCAiZnJvbSBhIGltcG9ydCBiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCJhLmQiLCAiYSIsICJmcm9tIGEuZCBpbXBvcnQgYiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICgiZC5hIiwgImEiLCAiZnJvbSBkLmEgaW1wb3J0IGIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgImEiLCAiaW1wb3J0IGIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgImEiLCAiaW1wb3J0IGIsIGMsIGQiKSkKLSAgICAgICAgZm9yIHBhY2thZ2UsIG5hbWUsIGltcG9ydF8gaW4gZmFpbGluZ190ZXN0czoKLSAgICAgICAgICAgIG4gPSBzZWxmLmRvZXNfdHJlZV9pbXBvcnQocGFja2FnZSwgbmFtZSwgaW1wb3J0XyArICJcbiIgKyBzdHJpbmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG4pCi0gICAgICAgICAgICBuID0gc2VsZi5kb2VzX3RyZWVfaW1wb3J0KHBhY2thZ2UsIG5hbWUsIHN0cmluZyArICJcbiIgKyBpbXBvcnRfKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuKQotCi0gICAgICAgIHBhc3NpbmdfdGVzdHMgPSAoKCJhIiwgImEiLCAiZnJvbSBhIGltcG9ydCBhIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCJ4IiwgImEiLCAiZnJvbSB4IGltcG9ydCBhIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCJ4IiwgImEiLCAiZnJvbSB4IGltcG9ydCBiLCBjLCBhLCBkIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCJ4LmIiLCAiYSIsICJmcm9tIHguYiBpbXBvcnQgYSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICgieC5iIiwgImEiLCAiZnJvbSB4LmIgaW1wb3J0IGIsIGMsIGEsIGQiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgImEiLCAiaW1wb3J0IGEiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgImEiLCAiaW1wb3J0IGIsIGMsIGEsIGQiKSkKLSAgICAgICAgZm9yIHBhY2thZ2UsIG5hbWUsIGltcG9ydF8gaW4gcGFzc2luZ190ZXN0czoKLSAgICAgICAgICAgIG4gPSBzZWxmLmRvZXNfdHJlZV9pbXBvcnQocGFja2FnZSwgbmFtZSwgaW1wb3J0XyArICJcbiIgKyBzdHJpbmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobikKLSAgICAgICAgICAgIG4gPSBzZWxmLmRvZXNfdHJlZV9pbXBvcnQocGFja2FnZSwgbmFtZSwgc3RyaW5nICsgIlxuIiArIGltcG9ydF8pCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobikKLQotICAgIGRlZiB0ZXN0X2luX2Z1bmN0aW9uKHNlbGYpOgotICAgICAgICBzZWxmLnRyeV93aXRoKCJkZWYgZm9vKCk6XG5cdGJhci5iYXooKVxuXHRzdGFydD0zIikKLQotY2xhc3MgVGVzdF9maW5kX2JpbmRpbmcoc3VwcG9ydC5UZXN0Q2FzZSk6Ci0gICAgZGVmIGZpbmRfYmluZGluZyhzZWxmLCBuYW1lLCBzdHJpbmcsIHBhY2thZ2U9Tm9uZSk6Ci0gICAgICAgIHJldHVybiBmaXhlcl91dGlsLmZpbmRfYmluZGluZyhuYW1lLCBwYXJzZShzdHJpbmcpLCBwYWNrYWdlKQotCi0gICAgZGVmIHRlc3Rfc2ltcGxlX2Fzc2lnbm1lbnQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJhID0gYiIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiYSA9IFtiLCBjLCBkXSIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiYSA9IGZvbygpIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJhID0gZm9vKCkuZm9vLmZvb1s2XVtmb29dIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZm9vID0gYSIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImZvbyA9IChhLCBiLCBjKSIpKQotCi0gICAgZGVmIHRlc3RfdHVwbGVfYXNzaWdubWVudChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgIihhLCkgPSBiIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICIoYSwgYiwgYykgPSBbYiwgYywgZF0iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgIihjLCAoZCwgYSksIGIpID0gZm9vKCkiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgIihhLCBiKSA9IGZvbygpLmZvb1s2XVtmb29dIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiKGZvbywgYikgPSAoYiwgYSkiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsICIoZm9vLCAoYiwgYykpID0gKGEsIGIsIGMpIikpCi0KLSAgICBkZWYgdGVzdF9saXN0X2Fzc2lnbm1lbnQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJbYV0gPSBiIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJbYSwgYiwgY10gPSBbYiwgYywgZF0iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgIltjLCBbZCwgYV0sIGJdID0gZm9vKCkiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgIlthLCBiXSA9IGZvbygpLmZvb1thXVtmb29dIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiW2ZvbywgYl0gPSAoYiwgYSkiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJbZm9vLCBbYiwgY11dID0gKGEsIGIsIGMpIikpCi0KLSAgICBkZWYgdGVzdF9pbnZhbGlkX2Fzc2lnbm1lbnRzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImZvby5hID0gNSIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImZvb1thXSA9IDUiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJmb28oYSkgPSA1IikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZm9vKGEsIGIpID0gNSIpKQotCi0gICAgZGVmIHRlc3Rfc2ltcGxlX2ltcG9ydChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImltcG9ydCBhIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJpbXBvcnQgYiwgYywgYSwgZCIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImltcG9ydCBiIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiaW1wb3J0IGIsIGMsIGQiKSkKLQotICAgIGRlZiB0ZXN0X2Zyb21faW1wb3J0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZnJvbSB4IGltcG9ydCBhIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJmcm9tIGEgaW1wb3J0IGEiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImZyb20geCBpbXBvcnQgYiwgYywgYSwgZCIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZnJvbSB4LmIgaW1wb3J0IGEiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImZyb20geC5iIGltcG9ydCBiLCBjLCBhLCBkIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZnJvbSBhIGltcG9ydCBiIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZnJvbSBhLmQgaW1wb3J0IGIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJmcm9tIGQuYSBpbXBvcnQgYiIpKQotCi0gICAgZGVmIHRlc3RfaW1wb3J0X2FzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiaW1wb3J0IGIgYXMgYSIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiaW1wb3J0IGIgYXMgYSwgYywgYSBhcyBmLCBkIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiaW1wb3J0IGEgYXMgZiIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImltcG9ydCBiLCBjIGFzIGYsIGQgYXMgZSIpKQotCi0gICAgZGVmIHRlc3RfZnJvbV9pbXBvcnRfYXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJmcm9tIHggaW1wb3J0IGIgYXMgYSIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZnJvbSB4IGltcG9ydCBnIGFzIGEsIGQgYXMgYiIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZnJvbSB4LmIgaW1wb3J0IHQgYXMgYSIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZnJvbSB4LmIgaW1wb3J0IGcgYXMgYSwgZCIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImZyb20gYSBpbXBvcnQgYiBhcyB0IikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZnJvbSBhLmQgaW1wb3J0IGIgYXMgdCIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImZyb20gZC5hIGltcG9ydCBiIGFzIHQiKSkKLQotICAgIGRlZiB0ZXN0X3NpbXBsZV9pbXBvcnRfd2l0aF9wYWNrYWdlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImIiLCAiaW1wb3J0IGIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJiIiwgImltcG9ydCBiLCBjLCBkIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImIiLCAiaW1wb3J0IGIiLCAiYiIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJiIiwgImltcG9ydCBiLCBjLCBkIiwgImMiKSkKLQotICAgIGRlZiB0ZXN0X2Zyb21faW1wb3J0X3dpdGhfcGFja2FnZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImZyb20geCBpbXBvcnQgYSIsICJ4IikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJmcm9tIGEgaW1wb3J0IGEiLCAiYSIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZnJvbSB4IGltcG9ydCAqIiwgIngiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImZyb20geCBpbXBvcnQgYiwgYywgYSwgZCIsICJ4IikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJmcm9tIHguYiBpbXBvcnQgYSIsICJ4LmIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImZyb20geC5iIGltcG9ydCAqIiwgInguYiIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZnJvbSB4LmIgaW1wb3J0IGIsIGMsIGEsIGQiLCAieC5iIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZnJvbSBhIGltcG9ydCBiIiwgImEiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJmcm9tIGEuZCBpbXBvcnQgYiIsICJhLmQiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJmcm9tIGQuYSBpbXBvcnQgYiIsICJhLmQiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJmcm9tIHgueSBpbXBvcnQgKiIsICJhLmIiKSkKLQotICAgIGRlZiB0ZXN0X2ltcG9ydF9hc193aXRoX3BhY2thZ2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiaW1wb3J0IGIuYyBhcyBhIiwgImIuYyIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImltcG9ydCBhIGFzIGYiLCAiZiIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImltcG9ydCBhIGFzIGYiLCAiYSIpKQotCi0gICAgZGVmIHRlc3RfZnJvbV9pbXBvcnRfYXNfd2l0aF9wYWNrYWdlKHNlbGYpOgotICAgICAgICAjIEJlY2F1c2UgaXQgd291bGQgdGFrZSBhIGxvdCBvZiBzcGVjaWFsLWNhc2UgY29kZSBpbiB0aGUgZml4ZXJzCi0gICAgICAgICMgdG8gZGVhbCB3aXRoIGZyb20gZm9vIGltcG9ydCBiYXIgYXMgYmF6LCB3ZSdsbCBzaW1wbHkgYWx3YXlzCi0gICAgICAgICMgZmFpbCBpZiB0aGVyZSBpcyBhbiAiZnJvbSAuLi4gaW1wb3J0IC4uLiBhcyAuLi4iCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZnJvbSB4IGltcG9ydCBiIGFzIGEiLCAieCIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImZyb20geCBpbXBvcnQgZyBhcyBhLCBkIGFzIGIiLCAieCIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImZyb20geC5iIGltcG9ydCB0IGFzIGEiLCAieC5iIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZnJvbSB4LmIgaW1wb3J0IGcgYXMgYSwgZCIsICJ4LmIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJmcm9tIGEgaW1wb3J0IGIgYXMgdCIsICJhIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZnJvbSBhIGltcG9ydCBiIGFzIHQiLCAiYiIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImZyb20gYSBpbXBvcnQgYiBhcyB0IiwgInQiKSkKLQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2RlZihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImRlZiBhKCk6IHBhc3MiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImRlZiBhKGIsIGMsIGQpOiBwYXNzIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJkZWYgYSgpOiBiID0gNyIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImRlZiBkKGIsIChjLCBhKSwgZSk6IHBhc3MiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJkZWYgZChhPTcpOiBwYXNzIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZGVmIGQoYSk6IHBhc3MiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJkZWYgZCgpOiBhID0gNyIpKQotCi0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIGRlZiBkKCk6Ci0gICAgICAgICAgICAgICAgZGVmIGEoKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcyIiIgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgcykpCi0KLSAgICBkZWYgdGVzdF9jbGFzc19kZWYoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJjbGFzcyBhOiBwYXNzIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJjbGFzcyBhKCk6IHBhc3MiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImNsYXNzIGEoYik6IHBhc3MiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImNsYXNzIGEoYiwgYz04KTogcGFzcyIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImNsYXNzIGQ6IHBhc3MiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJjbGFzcyBkKGEpOiBwYXNzIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiY2xhc3MgZChiLCBhPTcpOiBwYXNzIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiY2xhc3MgZChiLCAqYSk6IHBhc3MiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJjbGFzcyBkKGIsICoqYSk6IHBhc3MiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJjbGFzcyBkOiBhID0gNyIpKQotCi0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIGNsYXNzIGQoKToKLSAgICAgICAgICAgICAgICBjbGFzcyBhKCk6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsIHMpKQotCi0gICAgZGVmIHRlc3RfZm9yKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZm9yIGEgaW4gcjogcGFzcyIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZm9yIGEsIGIgaW4gcjogcGFzcyIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZm9yIChhLCBiKSBpbiByOiBwYXNzIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJmb3IgYywgKGEsKSBpbiByOiBwYXNzIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJmb3IgYywgKGEsIGIpIGluIHI6IHBhc3MiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImZvciBjIGluIHI6IGEgPSBjIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiZm9yIGMgaW4gYTogcGFzcyIpKQotCi0gICAgZGVmIHRlc3RfZm9yX25lc3RlZChzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgZm9yIGIgaW4gcjoKLSAgICAgICAgICAgICAgICBmb3IgYSBpbiBiOgotICAgICAgICAgICAgICAgICAgICBwYXNzIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsIHMpKQotCi0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIGZvciBiIGluIHI6Ci0gICAgICAgICAgICAgICAgZm9yIGEsIGMgaW4gYjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcyIiIgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCBzKSkKLQotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICBmb3IgYiBpbiByOgotICAgICAgICAgICAgICAgIGZvciAoYSwgYykgaW4gYjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcyIiIgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCBzKSkKLQotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICBmb3IgYiBpbiByOgotICAgICAgICAgICAgICAgIGZvciAoYSwpIGluIGI6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgcykpCi0KLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgZm9yIGIgaW4gcjoKLSAgICAgICAgICAgICAgICBmb3IgYywgKGEsIGQpIGluIGI6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgcykpCi0KLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgZm9yIGIgaW4gcjoKLSAgICAgICAgICAgICAgICBmb3IgYyBpbiBiOgotICAgICAgICAgICAgICAgICAgICBhID0gNyIiIgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCBzKSkKLQotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICBmb3IgYiBpbiByOgotICAgICAgICAgICAgICAgIGZvciBjIGluIGI6Ci0gICAgICAgICAgICAgICAgICAgIGQgPSBhIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCBzKSkKLQotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICBmb3IgYiBpbiByOgotICAgICAgICAgICAgICAgIGZvciBjIGluIGE6Ci0gICAgICAgICAgICAgICAgICAgIGQgPSA3IiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCBzKSkKLQotICAgIGRlZiB0ZXN0X2lmKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAiaWYgYiBpbiByOiBhID0gYyIpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgImlmIGEgaW4gcjogZCA9IGUiKSkKLQotICAgIGRlZiB0ZXN0X2lmX25lc3RlZChzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgaWYgYiBpbiByOgotICAgICAgICAgICAgICAgIGlmIGMgaW4gZDoKLSAgICAgICAgICAgICAgICAgICAgYSA9IGMiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgcykpCi0KLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgaWYgYiBpbiByOgotICAgICAgICAgICAgICAgIGlmIGMgaW4gZDoKLSAgICAgICAgICAgICAgICAgICAgYyA9IGEiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsIHMpKQotCi0gICAgZGVmIHRlc3Rfd2hpbGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsICJ3aGlsZSBiIGluIHI6IGEgPSBjIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCAid2hpbGUgYSBpbiByOiBkID0gZSIpKQotCi0gICAgZGVmIHRlc3Rfd2hpbGVfbmVzdGVkKHNlbGYpOgotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICB3aGlsZSBiIGluIHI6Ci0gICAgICAgICAgICAgICAgd2hpbGUgYyBpbiBkOgotICAgICAgICAgICAgICAgICAgICBhID0gYyIiIgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCBzKSkKLQotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICB3aGlsZSBiIGluIHI6Ci0gICAgICAgICAgICAgICAgd2hpbGUgYyBpbiBkOgotICAgICAgICAgICAgICAgICAgICBjID0gYSIiIgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgcykpCi0KLSAgICBkZWYgdGVzdF90cnlfZXhjZXB0KHNlbGYpOgotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgYSA9IDYKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBiID0gOCIiIgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCBzKSkKLQotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgYiA9IDgKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBhID0gNiIiIgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCBzKSkKLQotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgYiA9IDgKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgYSA9IDYiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgcykpCi0KLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGIgPSA4Ci0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgYiA9IDYiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsIHMpKQotCi0gICAgZGVmIHRlc3RfdHJ5X2V4Y2VwdF9uZXN0ZWQoc2VsZik6Ci0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGEgPSA2Ci0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgYiA9IDgiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgcykpCi0KLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGIgPSA4Ci0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBhID0gNgotICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgcGFzcyIiIgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCBzKSkKLQotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgYiA9IDgKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgIGEgPSA2IiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsIHMpKQotCi0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGIgPSA4Ci0gICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICBhID0gNgotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHBhc3MiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgcykpCi0KLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGIgPSA4Ci0gICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICBhID0gNiIiIgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCBzKSkKLQotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgYiA9IDgKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBiID0gNiIiIgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgcykpCi0KLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgYiA9IDgKLSAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgIGMgPSBkCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBiID0gNgotICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgdCA9IDgKLSAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgIG8gPSB5IiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5maW5kX2JpbmRpbmcoImEiLCBzKSkKLQotICAgIGRlZiB0ZXN0X3RyeV9leGNlcHRfZmluYWxseShzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGMgPSA2Ci0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgYiA9IDgKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgYSA9IDkiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgcykpCi0KLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGIgPSA4Ci0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGEgPSA2IiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfYmluZGluZygiYSIsIHMpKQotCi0gICAgICAgIHMgPSAiIiIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBiID0gOAotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBiID0gNiIiIgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgcykpCi0KLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGIgPSA4Ci0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgYiA9IDkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgYiA9IDYiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZpbmRfYmluZGluZygiYSIsIHMpKQotCi0gICAgZGVmIHRlc3RfdHJ5X2V4Y2VwdF9maW5hbGx5X25lc3RlZChzZWxmKToKLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGMgPSA2Ci0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgYiA9IDgKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBhID0gOQotICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgYiA9IDkKLSAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICBjID0gOSIiIgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5maW5kX2JpbmRpbmcoImEiLCBzKSkKLQotICAgICAgICBzID0gIiIiCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgYiA9IDgKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgYSA9IDYiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgcykpCi0KLSAgICAgICAgcyA9ICIiIgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGIgPSA4Ci0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgYiA9IDYKLSAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICBiID0gNyIiIgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZmluZF9iaW5kaW5nKCJhIiwgcykpCi0KLWNsYXNzIFRlc3RfdG91Y2hfaW1wb3J0KHN1cHBvcnQuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfYWZ0ZXJfZG9jc3RyaW5nKHNlbGYpOgotICAgICAgICBub2RlID0gcGFyc2UoJyIiImZvbyIiIlxuYmFyKCknKQotICAgICAgICBmaXhlcl91dGlsLnRvdWNoX2ltcG9ydChOb25lLCAiZm9vIiwgbm9kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobm9kZSksICciIiJmb28iIiJcbmltcG9ydCBmb29cbmJhcigpXG5cbicpCi0KLSAgICBkZWYgdGVzdF9hZnRlcl9pbXBvcnRzKHNlbGYpOgotICAgICAgICBub2RlID0gcGFyc2UoJyIiImZvbyIiIlxuaW1wb3J0IGJhclxuYmFyKCknKQotICAgICAgICBmaXhlcl91dGlsLnRvdWNoX2ltcG9ydChOb25lLCAiZm9vIiwgbm9kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobm9kZSksICciIiJmb28iIiJcbmltcG9ydCBiYXJcbmltcG9ydCBmb29cbmJhcigpXG5cbicpCi0KLSAgICBkZWYgdGVzdF9iZWdpbm5pbmcoc2VsZik6Ci0gICAgICAgIG5vZGUgPSBwYXJzZSgnYmFyKCknKQotICAgICAgICBmaXhlcl91dGlsLnRvdWNoX2ltcG9ydChOb25lLCAiZm9vIiwgbm9kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobm9kZSksICdpbXBvcnQgZm9vXG5iYXIoKVxuXG4nKQotCi0gICAgZGVmIHRlc3RfZnJvbV9pbXBvcnQoc2VsZik6Ci0gICAgICAgIG5vZGUgPSBwYXJzZSgnYmFyKCknKQotICAgICAgICBmaXhlcl91dGlsLnRvdWNoX2ltcG9ydCgiaHRtbCIsICJlc2NhcGUiLCBub2RlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihub2RlKSwgJ2Zyb20gaHRtbCBpbXBvcnQgZXNjYXBlXG5iYXIoKVxuXG4nKQotCi0gICAgZGVmIHRlc3RfbmFtZV9pbXBvcnQoc2VsZik6Ci0gICAgICAgIG5vZGUgPSBwYXJzZSgnYmFyKCknKQotICAgICAgICBmaXhlcl91dGlsLnRvdWNoX2ltcG9ydChOb25lLCAiY2dpIiwgbm9kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobm9kZSksICdpbXBvcnQgY2dpXG5iYXIoKVxuXG4nKQotCi1jbGFzcyBUZXN0X2ZpbmRfaW5kZW50YXRpb24oc3VwcG9ydC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9ub3RoaW5nKHNlbGYpOgotICAgICAgICBmaSA9IGZpeGVyX3V0aWwuZmluZF9pbmRlbnRhdGlvbgotICAgICAgICBub2RlID0gcGFyc2UoIm5vZGUoKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkobm9kZSksIHUiIikKLSAgICAgICAgbm9kZSA9IHBhcnNlKCIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpKG5vZGUpLCB1IiIpCi0KLSAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6Ci0gICAgICAgIGZpID0gZml4ZXJfdXRpbC5maW5kX2luZGVudGF0aW9uCi0gICAgICAgIG5vZGUgPSBwYXJzZSgiZGVmIGYoKTpcbiAgICB4KCkiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpKG5vZGUpLCB1IiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkobm9kZS5jaGlsZHJlblswXS5jaGlsZHJlbls0XS5jaGlsZHJlblsyXSksIHUiICAgICIpCi0gICAgICAgIG5vZGUgPSBwYXJzZSgiZGVmIGYoKTpcbiAgICB4KClcbiAgICB5KCkiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpKG5vZGUuY2hpbGRyZW5bMF0uY2hpbGRyZW5bNF0uY2hpbGRyZW5bNF0pLCB1IiAgICAiKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL215Zml4ZXMvX19pbml0X18ucHkgYi9saWIvcHl0aG9uMi43L3NxbGl0ZTMvdGVzdC9fX2luaXRfXy5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGxpYi9weXRob24yLjcvbGliMnRvMy90ZXN0cy9kYXRhL2ZpeGVycy9teWZpeGVzL19faW5pdF9fLnB5CmNvcHkgdG8gbGliL3B5dGhvbjIuNy9zcWxpdGUzL3Rlc3QvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvc3FsaXRlMy90ZXN0L2RiYXBpLnB5IGIvbGliL3B5dGhvbjIuNy9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM1NmQ0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CkBAIC0wLDAgKzEsODg5IEBACisjLSotIGNvZGluZzogSVNPLTg4NTktMSAtKi0KKyMgcHlzcWxpdGUyL3Rlc3QvZGJhcGkucHk6IHRlc3RzIGZvciBEQi1BUEkgY29tcGxpYW5jZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorIyB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisjIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisjCisjIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorIyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisjIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyMKKyMgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyMgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyMgICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisjICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisjIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisjICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyMgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgc3FsaXRlMyBhcyBzcWxpdGUKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCitjbGFzcyBNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIENoZWNrQVBJTGV2ZWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3FsaXRlLmFwaWxldmVsLCAiMi4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYXBpbGV2ZWwgaXMgJXMsIHNob3VsZCBiZSAyLjAiICUgc3FsaXRlLmFwaWxldmVsKQorCisgICAgZGVmIENoZWNrVGhyZWFkU2FmZXR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNxbGl0ZS50aHJlYWRzYWZldHksIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRocmVhZHNhZmV0eSBpcyAlZCwgc2hvdWxkIGJlIDEiICUgc3FsaXRlLnRocmVhZHNhZmV0eSkKKworICAgIGRlZiBDaGVja1BhcmFtU3R5bGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3FsaXRlLnBhcmFtc3R5bGUsICJxbWFyayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtc3R5bGUgaXMgJyVzJywgc2hvdWxkIGJlICdxbWFyayciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICBzcWxpdGUucGFyYW1zdHlsZSkKKworICAgIGRlZiBDaGVja1dhcm5pbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNxbGl0ZS5XYXJuaW5nLCBTdGFuZGFyZEVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJXYXJuaW5nIGlzIG5vdCBhIHN1YmNsYXNzIG9mIFN0YW5kYXJkRXJyb3IiKQorCisgICAgZGVmIENoZWNrRXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNxbGl0ZS5FcnJvciwgU3RhbmRhcmRFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgaXMgbm90IGEgc3ViY2xhc3Mgb2YgU3RhbmRhcmRFcnJvciIpCisKKyAgICBkZWYgQ2hlY2tJbnRlcmZhY2VFcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3FsaXRlLkludGVyZmFjZUVycm9yLCBzcWxpdGUuRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgIkludGVyZmFjZUVycm9yIGlzIG5vdCBhIHN1YmNsYXNzIG9mIEVycm9yIikKKworICAgIGRlZiBDaGVja0RhdGFiYXNlRXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNxbGl0ZS5EYXRhYmFzZUVycm9yLCBzcWxpdGUuRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgIkRhdGFiYXNlRXJyb3IgaXMgbm90IGEgc3ViY2xhc3Mgb2YgRXJyb3IiKQorCisgICAgZGVmIENoZWNrRGF0YUVycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzcWxpdGUuRGF0YUVycm9yLCBzcWxpdGUuRGF0YWJhc2VFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAiRGF0YUVycm9yIGlzIG5vdCBhIHN1YmNsYXNzIG9mIERhdGFiYXNlRXJyb3IiKQorCisgICAgZGVmIENoZWNrT3BlcmF0aW9uYWxFcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IsIHNxbGl0ZS5EYXRhYmFzZUVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJPcGVyYXRpb25hbEVycm9yIGlzIG5vdCBhIHN1YmNsYXNzIG9mIERhdGFiYXNlRXJyb3IiKQorCisgICAgZGVmIENoZWNrSW50ZWdyaXR5RXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNxbGl0ZS5JbnRlZ3JpdHlFcnJvciwgc3FsaXRlLkRhdGFiYXNlRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgIkludGVncml0eUVycm9yIGlzIG5vdCBhIHN1YmNsYXNzIG9mIERhdGFiYXNlRXJyb3IiKQorCisgICAgZGVmIENoZWNrSW50ZXJuYWxFcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3FsaXRlLkludGVybmFsRXJyb3IsIHNxbGl0ZS5EYXRhYmFzZUVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJJbnRlcm5hbEVycm9yIGlzIG5vdCBhIHN1YmNsYXNzIG9mIERhdGFiYXNlRXJyb3IiKQorCisgICAgZGVmIENoZWNrUHJvZ3JhbW1pbmdFcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3FsaXRlLlByb2dyYW1taW5nRXJyb3IsIHNxbGl0ZS5EYXRhYmFzZUVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJQcm9ncmFtbWluZ0Vycm9yIGlzIG5vdCBhIHN1YmNsYXNzIG9mIERhdGFiYXNlRXJyb3IiKQorCisgICAgZGVmIENoZWNrTm90U3VwcG9ydGVkRXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNxbGl0ZS5Ob3RTdXBwb3J0ZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsaXRlLkRhdGFiYXNlRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgIk5vdFN1cHBvcnRlZEVycm9yIGlzIG5vdCBhIHN1YmNsYXNzIG9mIERhdGFiYXNlRXJyb3IiKQorCitjbGFzcyBDb25uZWN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jeCA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIGN1ID0gc2VsZi5jeC5jdXJzb3IoKQorICAgICAgICBjdS5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBuYW1lIHRleHQpIikKKyAgICAgICAgY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKD8pIiwgKCJmb28iLCkpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY3guY2xvc2UoKQorCisgICAgZGVmIENoZWNrQ29tbWl0KHNlbGYpOgorICAgICAgICBzZWxmLmN4LmNvbW1pdCgpCisKKyAgICBkZWYgQ2hlY2tDb21taXRBZnRlck5vQ2hhbmdlcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEEgY29tbWl0IHNob3VsZCBhbHNvIHdvcmsgd2hlbiBubyBjaGFuZ2VzIHdlcmUgbWFkZSB0byB0aGUgZGF0YWJhc2UuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmN4LmNvbW1pdCgpCisgICAgICAgIHNlbGYuY3guY29tbWl0KCkKKworICAgIGRlZiBDaGVja1JvbGxiYWNrKHNlbGYpOgorICAgICAgICBzZWxmLmN4LnJvbGxiYWNrKCkKKworICAgIGRlZiBDaGVja1JvbGxiYWNrQWZ0ZXJOb0NoYW5nZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBIHJvbGxiYWNrIHNob3VsZCBhbHNvIHdvcmsgd2hlbiBubyBjaGFuZ2VzIHdlcmUgbWFkZSB0byB0aGUgZGF0YWJhc2UuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmN4LnJvbGxiYWNrKCkKKyAgICAgICAgc2VsZi5jeC5yb2xsYmFjaygpCisKKyAgICBkZWYgQ2hlY2tDdXJzb3Ioc2VsZik6CisgICAgICAgIGN1ID0gc2VsZi5jeC5jdXJzb3IoKQorCisgICAgZGVmIENoZWNrRmFpbGVkT3BlbihzZWxmKToKKyAgICAgICAgWU9VX0NBTk5PVF9PUEVOX1RISVMgPSAiL2Zvby9iYXIvYmxhLzIzNTM0L215ZGIuZGIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KFlPVV9DQU5OT1RfT1BFTl9USElTKQorICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCisKKyAgICBkZWYgQ2hlY2tDbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5jeC5jbG9zZSgpCisKKyAgICBkZWYgQ2hlY2tFeGNlcHRpb25zKHNlbGYpOgorICAgICAgICAjIE9wdGlvbmFsIERCLUFQSSBleHRlbnNpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jeC5XYXJuaW5nLCBzcWxpdGUuV2FybmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN4LkVycm9yLCBzcWxpdGUuRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jeC5JbnRlcmZhY2VFcnJvciwgc3FsaXRlLkludGVyZmFjZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3guRGF0YWJhc2VFcnJvciwgc3FsaXRlLkRhdGFiYXNlRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jeC5EYXRhRXJyb3IsIHNxbGl0ZS5EYXRhRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jeC5PcGVyYXRpb25hbEVycm9yLCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN4LkludGVncml0eUVycm9yLCBzcWxpdGUuSW50ZWdyaXR5RXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jeC5JbnRlcm5hbEVycm9yLCBzcWxpdGUuSW50ZXJuYWxFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN4LlByb2dyYW1taW5nRXJyb3IsIHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3guTm90U3VwcG9ydGVkRXJyb3IsIHNxbGl0ZS5Ob3RTdXBwb3J0ZWRFcnJvcikKKworY2xhc3MgQ3Vyc29yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jeCA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIHNlbGYuY3UgPSBzZWxmLmN4LmN1cnNvcigpCisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRlc3QoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0LCBpbmNvbWUgbnVtYmVyKSIpCisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKD8pIiwgKCJmb28iLCkpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY3UuY2xvc2UoKQorICAgICAgICBzZWxmLmN4LmNsb3NlKCkKKworICAgIGRlZiBDaGVja0V4ZWN1dGVOb0FyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiZGVsZXRlIGZyb20gdGVzdCIpCisKKyAgICBkZWYgQ2hlY2tFeGVjdXRlSWxsZWdhbFNxbChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgYXNkZiIpCisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmFpc2VkIHdyb25nIGV4Y2VwdGlvbiIpCisKKyAgICBkZWYgQ2hlY2tFeGVjdXRlVG9vTXVjaFNxbChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgNSs0OyBzZWxlY3QgNCs1IikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGEgV2FybmluZyIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuV2FybmluZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoInJhaXNlZCB3cm9uZyBleGNlcHRpb24iKQorCisgICAgZGVmIENoZWNrRXhlY3V0ZVRvb011Y2hTcWwyKHNlbGYpOgorICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoInNlbGVjdCA1KzQ7IC0tIGZvbyBiYXIiKQorCisgICAgZGVmIENoZWNrRXhlY3V0ZVRvb011Y2hTcWwzKHNlbGYpOgorICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoIiIiCisgICAgICAgICAgICBzZWxlY3QgNSs0OworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgZm9vCisgICAgICAgICAgICAqLworICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIENoZWNrRXhlY3V0ZVdyb25nU3FsQXJnKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoNDIpCisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhIFZhbHVlRXJyb3IiKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoInJhaXNlZCB3cm9uZyBleGNlcHRpb24uIikKKworICAgIGRlZiBDaGVja0V4ZWN1dGVBcmdJbnQoc2VsZik6CisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpZCkgdmFsdWVzICg/KSIsICg0MiwpKQorCisgICAgZGVmIENoZWNrRXhlY3V0ZUFyZ0Zsb2F0KHNlbGYpOgorICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaW5jb21lKSB2YWx1ZXMgKD8pIiwgKDI1MDAuMzIsKSkKKworICAgIGRlZiBDaGVja0V4ZWN1dGVBcmdTdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKD8pIiwgKCJIdWdvIiwpKQorCisgICAgZGVmIENoZWNrRXhlY3V0ZUFyZ1N0cmluZ1dpdGhaZXJvQnl0ZShzZWxmKToKKyAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoPykiLCAoIkh1XHgwMGdvIiwpKQorCisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IHdoZXJlIGlkPT8iLCAoc2VsZi5jdS5sYXN0cm93aWQsKSkKKyAgICAgICAgcm93ID0gc2VsZi5jdS5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCAiSHVceDAwZ28iKQorCisgICAgZGVmIENoZWNrRXhlY3V0ZVdyb25nTm9PZkFyZ3MxKHNlbGYpOgorICAgICAgICAjIHRvbyBtYW55IHBhcmFtZXRlcnMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGlkKSB2YWx1ZXMgKD8pIiwgKDE3LCAiRWdvbiIpKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgUHJvZ3JhbW1pbmdFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBDaGVja0V4ZWN1dGVXcm9uZ05vT2ZBcmdzMihzZWxmKToKKyAgICAgICAgIyB0b28gbGl0dGxlIHBhcmFtZXRlcnMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGlkKSB2YWx1ZXMgKD8pIikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQorICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgQ2hlY2tFeGVjdXRlV3JvbmdOb09mQXJnczMoc2VsZik6CisgICAgICAgICMgbm8gcGFyYW1ldGVycywgcGFyYW1ldGVycyBhcmUgbmVlZGVkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpZCkgdmFsdWVzICg/KSIpCisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBQcm9ncmFtbWluZ0Vycm9yIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIENoZWNrRXhlY3V0ZVBhcmFtTGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoJ2ZvbycpIikKKyAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgbmFtZSBmcm9tIHRlc3Qgd2hlcmUgbmFtZT0/IiwgWyJmb28iXSkKKyAgICAgICAgcm93ID0gc2VsZi5jdS5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCAiZm9vIikKKworICAgIGRlZiBDaGVja0V4ZWN1dGVQYXJhbVNlcXVlbmNlKHNlbGYpOgorICAgICAgICBjbGFzcyBMKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIGFzc2VydCB4ID09IDAKKyAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKKworICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QobmFtZSkgdmFsdWVzICgnZm9vJykiKQorICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoInNlbGVjdCBuYW1lIGZyb20gdGVzdCB3aGVyZSBuYW1lPT8iLCBMKCkpCisgICAgICAgIHJvdyA9IHNlbGYuY3UuZmV0Y2hvbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgImZvbyIpCisKKyAgICBkZWYgQ2hlY2tFeGVjdXRlRGljdE1hcHBpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IHdoZXJlIG5hbWU9Om5hbWUiLCB7Im5hbWUiOiAiZm9vIn0pCisgICAgICAgIHJvdyA9IHNlbGYuY3UuZmV0Y2hvbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgImZvbyIpCisKKyAgICBkZWYgQ2hlY2tFeGVjdXRlRGljdE1hcHBpbmdfTWFwcGluZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG9ubHkgd29ya3Mgd2l0aCBQeXRob24gMi41IG9yIGxhdGVyCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNSwgMCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjbGFzcyBEKGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJmb28iCisKKyAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoJ2ZvbycpIikKKyAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgbmFtZSBmcm9tIHRlc3Qgd2hlcmUgbmFtZT06bmFtZSIsIEQoKSkKKyAgICAgICAgcm93ID0gc2VsZi5jdS5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCAiZm9vIikKKworICAgIGRlZiBDaGVja0V4ZWN1dGVEaWN0TWFwcGluZ1Rvb0xpdHRsZUFyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IHdoZXJlIG5hbWU9Om5hbWUgYW5kIGlkPTppZCIsIHsibmFtZSI6ICJmb28ifSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQorICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgQ2hlY2tFeGVjdXRlRGljdE1hcHBpbmdOb0FyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IHdoZXJlIG5hbWU9Om5hbWUiKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgUHJvZ3JhbW1pbmdFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBDaGVja0V4ZWN1dGVEaWN0TWFwcGluZ1VubmFtZWQoc2VsZik6CisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IHdoZXJlIG5hbWU9PyIsIHsibmFtZSI6ICJmb28ifSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQorICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgQ2hlY2tDbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5jdS5jbG9zZSgpCisKKyAgICBkZWYgQ2hlY2tSb3djb3VudEV4ZWN1dGUoc2VsZik6CisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiZGVsZXRlIGZyb20gdGVzdCIpCisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgidXBkYXRlIHRlc3Qgc2V0IG5hbWU9J2JhciciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3Uucm93Y291bnQsIDIpCisKKyAgICBkZWYgQ2hlY2tSb3djb3VudFNlbGVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHB5c3FsaXRlIGRvZXMgbm90IGtub3cgdGhlIHJvd2NvdW50IG9mIFNFTEVDVCBzdGF0ZW1lbnRzLCBiZWNhdXNlIHdlCisgICAgICAgIGRvbid0IGZldGNoIGFsbCByb3dzIGFmdGVyIGV4ZWN1dGluZyB0aGUgc2VsZWN0IHN0YXRlbWVudC4gVGhlIHJvd2NvdW50CisgICAgICAgIGhhcyB0aHVzIHRvIGJlIC0xLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgNSB1bmlvbiBzZWxlY3QgNiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jdS5yb3djb3VudCwgLTEpCisKKyAgICBkZWYgQ2hlY2tSb3djb3VudEV4ZWN1dGVtYW55KHNlbGYpOgorICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImRlbGV0ZSBmcm9tIHRlc3QiKQorICAgICAgICBzZWxmLmN1LmV4ZWN1dGVtYW55KCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoPykiLCBbKDEsKSwgKDIsKSwgKDMsKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jdS5yb3djb3VudCwgMykKKworICAgIGRlZiBDaGVja1RvdGFsQ2hhbmdlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoJ2ZvbycpIikKKyAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoJ2ZvbycpIikKKyAgICAgICAgaWYgc2VsZi5jeC50b3RhbF9jaGFuZ2VzIDwgMjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgidG90YWwgY2hhbmdlcyByZXBvcnRlZCB3cm9uZyB2YWx1ZSIpCisKKyAgICAjIENoZWNrcyBmb3IgZXhlY3V0ZW1hbnk6CisgICAgIyBTZXF1ZW5jZXMgYXJlIHJlcXVpcmVkIGJ5IHRoZSBEQi1BUEksIGl0ZXJhdG9ycworICAgICMgZW5oYW5jZW1lbnRzIGluIHB5c3FsaXRlLgorCisgICAgZGVmIENoZWNrRXhlY3V0ZU1hbnlTZXF1ZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5jdS5leGVjdXRlbWFueSgiaW5zZXJ0IGludG8gdGVzdChpbmNvbWUpIHZhbHVlcyAoPykiLCBbKHgsKSBmb3IgeCBpbiByYW5nZSgxMDAsIDExMCldKQorCisgICAgZGVmIENoZWNrRXhlY3V0ZU1hbnlJdGVyYXRvcihzZWxmKToKKyAgICAgICAgY2xhc3MgTXlJdGVyOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSA1CisKKyAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYudmFsdWUgPT0gMTA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnZhbHVlICs9IDEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLnZhbHVlLCkKKworICAgICAgICBzZWxmLmN1LmV4ZWN1dGVtYW55KCJpbnNlcnQgaW50byB0ZXN0KGluY29tZSkgdmFsdWVzICg/KSIsIE15SXRlcigpKQorCisgICAgZGVmIENoZWNrRXhlY3V0ZU1hbnlHZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGRlZiBteWdlbigpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICAgICAgeWllbGQgKGksKQorCisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZW1hbnkoImluc2VydCBpbnRvIHRlc3QoaW5jb21lKSB2YWx1ZXMgKD8pIiwgbXlnZW4oKSkKKworICAgIGRlZiBDaGVja0V4ZWN1dGVNYW55V3JvbmdTcWxBcmcoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZW1hbnkoNDIsIFsoMywpXSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGEgVmFsdWVFcnJvciIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmFpc2VkIHdyb25nIGV4Y2VwdGlvbi4iKQorCisgICAgZGVmIENoZWNrRXhlY3V0ZU1hbnlTZWxlY3Qoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZW1hbnkoInNlbGVjdCA/IiwgWygzLCldKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmFpc2VkIHdyb25nIGV4Y2VwdGlvbi4iKQorCisgICAgZGVmIENoZWNrRXhlY3V0ZU1hbnlOb3RJdGVyYWJsZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jdS5leGVjdXRlbWFueSgiaW5zZXJ0IGludG8gdGVzdChpbmNvbWUpIHZhbHVlcyAoPykiLCA0MikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGEgVHlwZUVycm9yIikKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgcHJpbnQgInJhaXNlZCIsIGUuX19jbGFzc19fCisgICAgICAgICAgICBzZWxmLmZhaWwoInJhaXNlZCB3cm9uZyBleGNlcHRpb24uIikKKworICAgIGRlZiBDaGVja0ZldGNoSXRlcihzZWxmKToKKyAgICAgICAgIyBPcHRpb25hbCBEQi1BUEkgZXh0ZW5zaW9uLgorICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImRlbGV0ZSBmcm9tIHRlc3QiKQorICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaWQpIHZhbHVlcyAoPykiLCAoNSwpKQorICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaWQpIHZhbHVlcyAoPykiLCAoNiwpKQorICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoInNlbGVjdCBpZCBmcm9tIHRlc3Qgb3JkZXIgYnkgaWQiKQorICAgICAgICBsc3QgPSBbXQorICAgICAgICBmb3Igcm93IGluIHNlbGYuY3U6CisgICAgICAgICAgICBsc3QuYXBwZW5kKHJvd1swXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3RbMF0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0WzFdLCA2KQorCisgICAgZGVmIENoZWNrRmV0Y2hvbmUoc2VsZik6CisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IikKKyAgICAgICAgcm93ID0gc2VsZi5jdS5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCAiZm9vIikKKyAgICAgICAgcm93ID0gc2VsZi5jdS5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93LCBOb25lKQorCisgICAgZGVmIENoZWNrRmV0Y2hvbmVOb1N0YXRlbWVudChzZWxmKToKKyAgICAgICAgY3VyID0gc2VsZi5jeC5jdXJzb3IoKQorICAgICAgICByb3cgPSBjdXIuZmV0Y2hvbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdywgTm9uZSkKKworICAgIGRlZiBDaGVja0FycmF5U2l6ZShzZWxmKToKKyAgICAgICAgIyBtdXN0IGRlZmF1bHQgb3QgMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY3UuYXJyYXlzaXplLCAxKQorCisgICAgICAgICMgbm93IHNldCB0byAyCisgICAgICAgIHNlbGYuY3UuYXJyYXlzaXplID0gMgorCisgICAgICAgICMgbm93IG1ha2UgdGhlIHF1ZXJ5IHJldHVybiAzIHJvd3MKKyAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJkZWxldGUgZnJvbSB0ZXN0IikKKyAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoJ0EnKSIpCisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdCJykiKQorICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QobmFtZSkgdmFsdWVzICgnQycpIikKKyAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgbmFtZSBmcm9tIHRlc3QiKQorICAgICAgICByZXMgPSBzZWxmLmN1LmZldGNobWFueSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMikKKworICAgIGRlZiBDaGVja0ZldGNobWFueShzZWxmKToKKyAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgbmFtZSBmcm9tIHRlc3QiKQorICAgICAgICByZXMgPSBzZWxmLmN1LmZldGNobWFueSgxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDEpCisgICAgICAgIHJlcyA9IHNlbGYuY3UuZmV0Y2htYW55KDEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFtdKQorCisgICAgZGVmIENoZWNrRmV0Y2htYW55S3dBcmcoc2VsZik6CisgICAgICAgICIiIkNoZWNrcyBpZiBmZXRjaG1hbnkgd29ya3Mgd2l0aCBrZXl3b3JkIGFyZ3VtZW50cyIiIgorICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoInNlbGVjdCBuYW1lIGZyb20gdGVzdCIpCisgICAgICAgIHJlcyA9IHNlbGYuY3UuZmV0Y2htYW55KHNpemU9MTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAxKQorCisgICAgZGVmIENoZWNrRmV0Y2hhbGwoc2VsZik6CisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IikKKyAgICAgICAgcmVzID0gc2VsZi5jdS5mZXRjaGFsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDEpCisgICAgICAgIHJlcyA9IHNlbGYuY3UuZmV0Y2hhbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgW10pCisKKyAgICBkZWYgQ2hlY2tTZXRpbnB1dHNpemVzKHNlbGYpOgorICAgICAgICBzZWxmLmN1LnNldGlucHV0c2l6ZXMoWzMsIDQsIDVdKQorCisgICAgZGVmIENoZWNrU2V0b3V0cHV0c2l6ZShzZWxmKToKKyAgICAgICAgc2VsZi5jdS5zZXRvdXRwdXRzaXplKDUsIDApCisKKyAgICBkZWYgQ2hlY2tTZXRvdXRwdXRzaXplTm9Db2x1bW4oc2VsZik6CisgICAgICAgIHNlbGYuY3Uuc2V0b3V0cHV0c2l6ZSg0MikKKworICAgIGRlZiBDaGVja0N1cnNvckNvbm5lY3Rpb24oc2VsZik6CisgICAgICAgICMgT3B0aW9uYWwgREItQVBJIGV4dGVuc2lvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN1LmNvbm5lY3Rpb24sIHNlbGYuY3gpCisKKyAgICBkZWYgQ2hlY2tXcm9uZ0N1cnNvckNhbGxhYmxlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWYgZigpOiBwYXNzCisgICAgICAgICAgICBjdXIgPSBzZWxmLmN4LmN1cnNvcihmKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBUeXBlRXJyb3IiKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGEgVmFsdWVFcnJvciIpCisKKyAgICBkZWYgQ2hlY2tDdXJzb3JXcm9uZ0NsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBGb286IHBhc3MKKyAgICAgICAgZm9vID0gRm9vKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyID0gc3FsaXRlLkN1cnNvcihmb28pCisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhIFZhbHVlRXJyb3IiKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaGlzIHRlc3QgcmVxdWlyZXMgdGhyZWFkaW5nLicpCitjbGFzcyBUaHJlYWRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIHNlbGYuY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRlc3QoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0LCBiaW4gYmluYXJ5LCByYXRpbyBudW1iZXIsIHRzIHRpbWVzdGFtcCkiKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmN1ci5jbG9zZSgpCisgICAgICAgIHNlbGYuY29uLmNsb3NlKCkKKworICAgIGRlZiBDaGVja0NvbkN1cnNvcihzZWxmKToKKyAgICAgICAgZGVmIHJ1bihjb24sIGVycm9ycyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgiZGlkIG5vdCByYWlzZSBQcm9ncmFtbWluZ0Vycm9yIikKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKCJyYWlzZWQgd3JvbmcgZXhjZXB0aW9uIikKKworICAgICAgICBlcnJvcnMgPSBbXQorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuLCBrd2FyZ3M9eyJjb24iOiBzZWxmLmNvbiwgImVycm9ycyI6IGVycm9yc30pCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICB0LmpvaW4oKQorICAgICAgICBpZiBsZW4oZXJyb3JzKSA+IDA6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlxuIi5qb2luKGVycm9ycykpCisKKyAgICBkZWYgQ2hlY2tDb25Db21taXQoc2VsZik6CisgICAgICAgIGRlZiBydW4oY29uLCBlcnJvcnMpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbi5jb21taXQoKQorICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoImRpZCBub3QgcmFpc2UgUHJvZ3JhbW1pbmdFcnJvciIpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgicmFpc2VkIHdyb25nIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgZXJyb3JzID0gW10KKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJ1biwga3dhcmdzPXsiY29uIjogc2VsZi5jb24sICJlcnJvcnMiOiBlcnJvcnN9KQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgdC5qb2luKCkKKyAgICAgICAgaWYgbGVuKGVycm9ycykgPiAwOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJcbiIuam9pbihlcnJvcnMpKQorCisgICAgZGVmIENoZWNrQ29uUm9sbGJhY2soc2VsZik6CisgICAgICAgIGRlZiBydW4oY29uLCBlcnJvcnMpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbi5yb2xsYmFjaygpCisgICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgiZGlkIG5vdCByYWlzZSBQcm9ncmFtbWluZ0Vycm9yIikKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKCJyYWlzZWQgd3JvbmcgZXhjZXB0aW9uIikKKworICAgICAgICBlcnJvcnMgPSBbXQorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuLCBrd2FyZ3M9eyJjb24iOiBzZWxmLmNvbiwgImVycm9ycyI6IGVycm9yc30pCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICB0LmpvaW4oKQorICAgICAgICBpZiBsZW4oZXJyb3JzKSA+IDA6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlxuIi5qb2luKGVycm9ycykpCisKKyAgICBkZWYgQ2hlY2tDb25DbG9zZShzZWxmKToKKyAgICAgICAgZGVmIHJ1bihjb24sIGVycm9ycyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY29uLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKCJkaWQgbm90IHJhaXNlIFByb2dyYW1taW5nRXJyb3IiKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoInJhaXNlZCB3cm9uZyBleGNlcHRpb24iKQorCisgICAgICAgIGVycm9ycyA9IFtdCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ydW4sIGt3YXJncz17ImNvbiI6IHNlbGYuY29uLCAiZXJyb3JzIjogZXJyb3JzfSkKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHQuam9pbigpCisgICAgICAgIGlmIGxlbihlcnJvcnMpID4gMDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiXG4iLmpvaW4oZXJyb3JzKSkKKworICAgIGRlZiBDaGVja0N1ckltcGxpY2l0QmVnaW4oc2VsZik6CisgICAgICAgIGRlZiBydW4oY3VyLCBlcnJvcnMpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoJ2EnKSIpCisgICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgiZGlkIG5vdCByYWlzZSBQcm9ncmFtbWluZ0Vycm9yIikKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKCJyYWlzZWQgd3JvbmcgZXhjZXB0aW9uIikKKworICAgICAgICBlcnJvcnMgPSBbXQorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuLCBrd2FyZ3M9eyJjdXIiOiBzZWxmLmN1ciwgImVycm9ycyI6IGVycm9yc30pCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICB0LmpvaW4oKQorICAgICAgICBpZiBsZW4oZXJyb3JzKSA+IDA6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlxuIi5qb2luKGVycm9ycykpCisKKyAgICBkZWYgQ2hlY2tDdXJDbG9zZShzZWxmKToKKyAgICAgICAgZGVmIHJ1bihjdXIsIGVycm9ycyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY3VyLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKCJkaWQgbm90IHJhaXNlIFByb2dyYW1taW5nRXJyb3IiKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoInJhaXNlZCB3cm9uZyBleGNlcHRpb24iKQorCisgICAgICAgIGVycm9ycyA9IFtdCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ydW4sIGt3YXJncz17ImN1ciI6IHNlbGYuY3VyLCAiZXJyb3JzIjogZXJyb3JzfSkKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHQuam9pbigpCisgICAgICAgIGlmIGxlbihlcnJvcnMpID4gMDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiXG4iLmpvaW4oZXJyb3JzKSkKKworICAgIGRlZiBDaGVja0N1ckV4ZWN1dGUoc2VsZik6CisgICAgICAgIGRlZiBydW4oY3VyLCBlcnJvcnMpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgbmFtZSBmcm9tIHRlc3QiKQorICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoImRpZCBub3QgcmFpc2UgUHJvZ3JhbW1pbmdFcnJvciIpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgicmFpc2VkIHdyb25nIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgZXJyb3JzID0gW10KKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdhJykiKQorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuLCBrd2FyZ3M9eyJjdXIiOiBzZWxmLmN1ciwgImVycm9ycyI6IGVycm9yc30pCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICB0LmpvaW4oKQorICAgICAgICBpZiBsZW4oZXJyb3JzKSA+IDA6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlxuIi5qb2luKGVycm9ycykpCisKKyAgICBkZWYgQ2hlY2tDdXJJdGVyTmV4dChzZWxmKToKKyAgICAgICAgZGVmIHJ1bihjdXIsIGVycm9ycyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcm93ID0gY3VyLmZldGNob25lKCkKKyAgICAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKCJkaWQgbm90IHJhaXNlIFByb2dyYW1taW5nRXJyb3IiKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoInJhaXNlZCB3cm9uZyBleGNlcHRpb24iKQorCisgICAgICAgIGVycm9ycyA9IFtdCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QobmFtZSkgdmFsdWVzICgnYScpIikKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IikKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJ1biwga3dhcmdzPXsiY3VyIjogc2VsZi5jdXIsICJlcnJvcnMiOiBlcnJvcnN9KQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgdC5qb2luKCkKKyAgICAgICAgaWYgbGVuKGVycm9ycykgPiAwOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJcbiIuam9pbihlcnJvcnMpKQorCitjbGFzcyBDb25zdHJ1Y3RvclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgQ2hlY2tEYXRlKHNlbGYpOgorICAgICAgICBkID0gc3FsaXRlLkRhdGUoMjAwNCwgMTAsIDI4KQorCisgICAgZGVmIENoZWNrVGltZShzZWxmKToKKyAgICAgICAgdCA9IHNxbGl0ZS5UaW1lKDEyLCAzOSwgMzUpCisKKyAgICBkZWYgQ2hlY2tUaW1lc3RhbXAoc2VsZik6CisgICAgICAgIHRzID0gc3FsaXRlLlRpbWVzdGFtcCgyMDA0LCAxMCwgMjgsIDEyLCAzOSwgMzUpCisKKyAgICBkZWYgQ2hlY2tEYXRlRnJvbVRpY2tzKHNlbGYpOgorICAgICAgICBkID0gc3FsaXRlLkRhdGVGcm9tVGlja3MoNDIpCisKKyAgICBkZWYgQ2hlY2tUaW1lRnJvbVRpY2tzKHNlbGYpOgorICAgICAgICB0ID0gc3FsaXRlLlRpbWVGcm9tVGlja3MoNDIpCisKKyAgICBkZWYgQ2hlY2tUaW1lc3RhbXBGcm9tVGlja3Moc2VsZik6CisgICAgICAgIHRzID0gc3FsaXRlLlRpbWVzdGFtcEZyb21UaWNrcyg0MikKKworICAgIGRlZiBDaGVja0JpbmFyeShzZWxmKToKKyAgICAgICAgYiA9IHNxbGl0ZS5CaW5hcnkoY2hyKDApICsgIiciKQorCitjbGFzcyBFeHRlbnNpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIENoZWNrU2NyaXB0U3RyaW5nU3FsKHNlbGYpOgorICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKKyAgICAgICAgY3VyLmV4ZWN1dGVzY3JpcHQoIiIiCisgICAgICAgICAgICAtLSBibGEgYmxhCisgICAgICAgICAgICAvKiBhIHN0dXBpZCBjb21tZW50ICovCisgICAgICAgICAgICBjcmVhdGUgdGFibGUgYShpKTsKKyAgICAgICAgICAgIGluc2VydCBpbnRvIGEoaSkgdmFsdWVzICg1KTsKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBpIGZyb20gYSIpCisgICAgICAgIHJlcyA9IGN1ci5mZXRjaG9uZSgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA1KQorCisgICAgZGVmIENoZWNrU2NyaXB0U3RyaW5nVW5pY29kZShzZWxmKToKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5leGVjdXRlc2NyaXB0KHUiIiIKKyAgICAgICAgICAgIGNyZWF0ZSB0YWJsZSBhKGkpOworICAgICAgICAgICAgaW5zZXJ0IGludG8gYShpKSB2YWx1ZXMgKDUpOworICAgICAgICAgICAgc2VsZWN0IGkgZnJvbSBhOworICAgICAgICAgICAgZGVsZXRlIGZyb20gYTsKKyAgICAgICAgICAgIGluc2VydCBpbnRvIGEoaSkgdmFsdWVzICg2KTsKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBpIGZyb20gYSIpCisgICAgICAgIHJlcyA9IGN1ci5mZXRjaG9uZSgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA2KQorCisgICAgZGVmIENoZWNrU2NyaXB0U3ludGF4RXJyb3Ioc2VsZik6CisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICByYWlzZWQgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIuZXhlY3V0ZXNjcmlwdCgiY3JlYXRlIHRhYmxlIHRlc3QoeCk7IGFzZGY7IGNyZWF0ZSB0YWJsZSB0ZXN0Mih4KSIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlZCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYWlzZWQsIFRydWUsICJzaG91bGQgaGF2ZSByYWlzZWQgYW4gZXhjZXB0aW9uIikKKworICAgIGRlZiBDaGVja1NjcmlwdEVycm9yTm9ybWFsKHNlbGYpOgorICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKKyAgICAgICAgcmFpc2VkID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyLmV4ZWN1dGVzY3JpcHQoImNyZWF0ZSB0YWJsZSB0ZXN0KHNhZGZzYWRmZHNhKTsgc2VsZWN0IGZvbyBmcm9tIGh1cno7IikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yOgorICAgICAgICAgICAgcmFpc2VkID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhaXNlZCwgVHJ1ZSwgInNob3VsZCBoYXZlIHJhaXNlZCBhbiBleGNlcHRpb24iKQorCisgICAgZGVmIENoZWNrQ29ubmVjdGlvbkV4ZWN1dGUoc2VsZik6CisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIHJlc3VsdCA9IGNvbi5leGVjdXRlKCJzZWxlY3QgNSIpLmZldGNob25lKClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDUsICJCYXNpYyB0ZXN0IG9mIENvbm5lY3Rpb24uZXhlY3V0ZSIpCisKKyAgICBkZWYgQ2hlY2tDb25uZWN0aW9uRXhlY3V0ZW1hbnkoc2VsZik6CisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIGNvbi5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdChmb28pIikKKyAgICAgICAgY29uLmV4ZWN1dGVtYW55KCJpbnNlcnQgaW50byB0ZXN0KGZvbykgdmFsdWVzICg/KSIsIFsoMywpLCAoNCwpXSkKKyAgICAgICAgcmVzdWx0ID0gY29uLmV4ZWN1dGUoInNlbGVjdCBmb28gZnJvbSB0ZXN0IG9yZGVyIGJ5IGZvbyIpLmZldGNoYWxsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbMF1bMF0sIDMsICJCYXNpYyB0ZXN0IG9mIENvbm5lY3Rpb24uZXhlY3V0ZW1hbnkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsxXVswXSwgNCwgIkJhc2ljIHRlc3Qgb2YgQ29ubmVjdGlvbi5leGVjdXRlbWFueSIpCisKKyAgICBkZWYgQ2hlY2tDb25uZWN0aW9uRXhlY3V0ZXNjcmlwdChzZWxmKToKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgY29uLmV4ZWN1dGVzY3JpcHQoImNyZWF0ZSB0YWJsZSB0ZXN0KGZvbyk7IGluc2VydCBpbnRvIHRlc3QoZm9vKSB2YWx1ZXMgKDUpOyIpCisgICAgICAgIHJlc3VsdCA9IGNvbi5leGVjdXRlKCJzZWxlY3QgZm9vIGZyb20gdGVzdCIpLmZldGNob25lKClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDUsICJCYXNpYyB0ZXN0IG9mIENvbm5lY3Rpb24uZXhlY3V0ZXNjcmlwdCIpCisKK2NsYXNzIENsb3NlZENvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIENoZWNrQ2xvc2VkQ29uQ3Vyc29yKHNlbGYpOgorICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICBjb24uY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKKworICAgIGRlZiBDaGVja0Nsb3NlZENvbkNvbW1pdChzZWxmKToKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgY29uLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29uLmNvbW1pdCgpCisgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQorICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCisKKyAgICBkZWYgQ2hlY2tDbG9zZWRDb25Sb2xsYmFjayhzZWxmKToKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgY29uLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29uLnJvbGxiYWNrKCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKKworICAgIGRlZiBDaGVja0Nsb3NlZEN1ckV4ZWN1dGUoc2VsZik6CisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICBjb24uY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IDQiKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQorCisgICAgZGVmIENoZWNrQ2xvc2VkQ3JlYXRlRnVuY3Rpb24oc2VsZik6CisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIGNvbi5jbG9zZSgpCisgICAgICAgIGRlZiBmKHgpOiByZXR1cm4gMTcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29uLmNyZWF0ZV9mdW5jdGlvbigiZm9vIiwgMSwgZikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKKworICAgIGRlZiBDaGVja0Nsb3NlZENyZWF0ZUFnZ3JlZ2F0ZShzZWxmKToKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgY29uLmNsb3NlKCkKKyAgICAgICAgY2xhc3MgQWdnOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiBzdGVwKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiBmaW5hbGl6ZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMTcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29uLmNyZWF0ZV9hZ2dyZWdhdGUoImZvbyIsIDEsIEFnZykKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKKworICAgIGRlZiBDaGVja0Nsb3NlZFNldEF1dGhvcml6ZXIoc2VsZik6CisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIGNvbi5jbG9zZSgpCisgICAgICAgIGRlZiBhdXRob3JpemVyKCphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBzcWxpdGUuREVOWQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb24uc2V0X2F1dGhvcml6ZXIoYXV0aG9yaXplcikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKKworICAgIGRlZiBDaGVja0Nsb3NlZFNldFByb2dyZXNzQ2FsbGJhY2soc2VsZik6CisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIGNvbi5jbG9zZSgpCisgICAgICAgIGRlZiBwcm9ncmVzcygpOiBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbi5zZXRfcHJvZ3Jlc3NfaGFuZGxlcihwcm9ncmVzcywgMTAwKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQorCisgICAgZGVmIENoZWNrQ2xvc2VkQ2FsbChzZWxmKToKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgY29uLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29uKCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKKworY2xhc3MgQ2xvc2VkQ3VyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgQ2hlY2tDbG9zZWQoc2VsZik6CisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuY2xvc2UoKQorCisgICAgICAgIGZvciBtZXRob2RfbmFtZSBpbiAoImV4ZWN1dGUiLCAiZXhlY3V0ZW1hbnkiLCAiZXhlY3V0ZXNjcmlwdCIsICJmZXRjaGFsbCIsICJmZXRjaG1hbnkiLCAiZmV0Y2hvbmUiKToKKyAgICAgICAgICAgIGlmIG1ldGhvZF9uYW1lIGluICgiZXhlY3V0ZSIsICJleGVjdXRlc2NyaXB0Iik6CisgICAgICAgICAgICAgICAgcGFyYW1zID0gKCJzZWxlY3QgNCB1bmlvbiBzZWxlY3QgNSIsKQorICAgICAgICAgICAgZWxpZiBtZXRob2RfbmFtZSA9PSAiZXhlY3V0ZW1hbnkiOgorICAgICAgICAgICAgICAgIHBhcmFtcyA9ICgiaW5zZXJ0IGludG8gZm9vKGJhcikgdmFsdWVzICg/KSIsIFsoMywpLCAoNCwpXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyYW1zID0gW10KKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoY3VyLCBtZXRob2RfbmFtZSkKKworICAgICAgICAgICAgICAgIG1ldGhvZCgqcGFyYW1zKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvcjogbWV0aG9kICIgKyBtZXRob2RfbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yOiAiICsgbWV0aG9kX25hbWUpCisKK2RlZiBzdWl0ZSgpOgorICAgIG1vZHVsZV9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShNb2R1bGVUZXN0cywgIkNoZWNrIikKKyAgICBjb25uZWN0aW9uX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKENvbm5lY3Rpb25UZXN0cywgIkNoZWNrIikKKyAgICBjdXJzb3Jfc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ3Vyc29yVGVzdHMsICJDaGVjayIpCisgICAgdGhyZWFkX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKFRocmVhZFRlc3RzLCAiQ2hlY2siKQorICAgIGNvbnN0cnVjdG9yX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKENvbnN0cnVjdG9yVGVzdHMsICJDaGVjayIpCisgICAgZXh0X3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKEV4dGVuc2lvblRlc3RzLCAiQ2hlY2siKQorICAgIGNsb3NlZF9jb25fc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ2xvc2VkQ29uVGVzdHMsICJDaGVjayIpCisgICAgY2xvc2VkX2N1cl9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShDbG9zZWRDdXJUZXN0cywgIkNoZWNrIikKKyAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKChtb2R1bGVfc3VpdGUsIGNvbm5lY3Rpb25fc3VpdGUsIGN1cnNvcl9zdWl0ZSwgdGhyZWFkX3N1aXRlLCBjb25zdHJ1Y3Rvcl9zdWl0ZSwgZXh0X3N1aXRlLCBjbG9zZWRfY29uX3N1aXRlLCBjbG9zZWRfY3VyX3N1aXRlKSkKKworZGVmIHRlc3QoKToKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAgcnVubmVyLnJ1bihzdWl0ZSgpKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9zcWxpdGUzL3Rlc3QvZHVtcC5weSBiL2xpYi9weXRob24yLjcvc3FsaXRlMy90ZXN0L2R1bXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkZTgxMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvc3FsaXRlMy90ZXN0L2R1bXAucHkKQEAgLTAsMCArMSw4MyBAQAorIyBBdXRob3I6IFBhdWwgS2lwcGVzIDxraXBwZXNwQGdtYWlsLmNvbT4KKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3FsaXRlMyBhcyBzcWxpdGUKKworY2xhc3MgRHVtcFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY3ggPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICBzZWxmLmN1ID0gc2VsZi5jeC5jdXJzb3IoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmN4LmNsb3NlKCkKKworICAgIGRlZiBDaGVja1RhYmxlRHVtcChzZWxmKToKKyAgICAgICAgZXhwZWN0ZWRfc3FscyA9IFsKKyAgICAgICAgICAgICAgICAiIiJDUkVBVEUgVEFCTEUgImluZGV4IigiaW5kZXgiIGJsb2IpOyIiIgorICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAiIiJJTlNFUlQgSU5UTyAiaW5kZXgiIFZBTFVFUyhYJzAxJyk7IiIiCisgICAgICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICIiIkNSRUFURSBUQUJMRSAicXVvdGVkIiJ0YWJsZSIoInF1b3RlZCIiZmllbGQiIHRleHQpOyIiIgorICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAiIiJJTlNFUlQgSU5UTyAicXVvdGVkIiJ0YWJsZSIgVkFMVUVTKCdxdW90ZWQnJ3ZhbHVlJyk7IiIiCisgICAgICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICJDUkVBVEUgVEFCTEUgdDEoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgczEgdGV4dCwgIiBcCisgICAgICAgICAgICAgICAgInQxX2kxIGludGVnZXIgbm90IG51bGwsIGkyIGludGVnZXIsIHVuaXF1ZSAoczEpLCAiIFwKKyAgICAgICAgICAgICAgICAiY29uc3RyYWludCB0MV9pZHgxIHVuaXF1ZSAoaTIpKTsiCisgICAgICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICJJTlNFUlQgSU5UTyBcInQxXCIgVkFMVUVTKDEsJ2ZvbycsMTAsMjApOyIKKyAgICAgICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgIklOU0VSVCBJTlRPIFwidDFcIiBWQUxVRVMoMiwnZm9vMicsMzAsMzApOyIKKyAgICAgICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgdSJJTlNFUlQgSU5UTyBcInQxXCIgVkFMVUVTKDMsJ2ZceGMzXHhiNicsNDAsMTApOyIKKyAgICAgICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgIkNSRUFURSBUQUJMRSB0MihpZCBpbnRlZ2VyLCB0Ml9pMSBpbnRlZ2VyLCAiIFwKKyAgICAgICAgICAgICAgICAidDJfaTIgaW50ZWdlciwgcHJpbWFyeSBrZXkgKGlkKSwiIFwKKyAgICAgICAgICAgICAgICAiZm9yZWlnbiBrZXkodDJfaTEpIHJlZmVyZW5jZXMgdDEodDFfaTEpKTsiCisgICAgICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICJDUkVBVEUgVFJJR0dFUiB0cmlnZ2VyXzEgdXBkYXRlIG9mIHQxX2kxIG9uIHQxICIgXAorICAgICAgICAgICAgICAgICJiZWdpbiAiIFwKKyAgICAgICAgICAgICAgICAidXBkYXRlIHQyIHNldCB0Ml9pMSA9IG5ldy50MV9pMSB3aGVyZSB0Ml9pMSA9IG9sZC50MV9pMTsgIiBcCisgICAgICAgICAgICAgICAgImVuZDsiCisgICAgICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICJDUkVBVEUgVklFVyB2MSBhcyBzZWxlY3QgKiBmcm9tIHQxIGxlZnQgam9pbiB0MiAiIFwKKyAgICAgICAgICAgICAgICAidXNpbmcgKGlkKTsiCisgICAgICAgICAgICAgICAgXQorICAgICAgICBbc2VsZi5jdS5leGVjdXRlKHMpIGZvciBzIGluIGV4cGVjdGVkX3NxbHNdCisgICAgICAgIGkgPSBzZWxmLmN4Lml0ZXJkdW1wKCkKKyAgICAgICAgYWN0dWFsX3NxbHMgPSBbcyBmb3IgcyBpbiBpXQorICAgICAgICBleHBlY3RlZF9zcWxzID0gWydCRUdJTiBUUkFOU0FDVElPTjsnXSArIGV4cGVjdGVkX3NxbHMgKyBcCisgICAgICAgICAgICBbJ0NPTU1JVDsnXQorICAgICAgICBbc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9zcWxzW2ldLCBhY3R1YWxfc3Fsc1tpXSkKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oZXhwZWN0ZWRfc3FscykpXQorCisgICAgZGVmIENoZWNrVW5vcmRlcmFibGVSb3coc2VsZik6CisgICAgICAgICMgaXRlcmR1bXAoKSBzaG91bGQgYmUgYWJsZSB0byBjb3BlIHdpdGggdW5vcmRlcmFibGUgcm93IHR5cGVzIChpc3N1ZSAjMTU1NDUpCisgICAgICAgIGNsYXNzIFVub3JkZXJhYmxlUm93OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGN1cnNvciwgcm93KToKKyAgICAgICAgICAgICAgICBzZWxmLnJvdyA9IHJvdworICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5yb3dbaW5kZXhdCisgICAgICAgIHNlbGYuY3gucm93X2ZhY3RvcnkgPSBVbm9yZGVyYWJsZVJvdworICAgICAgICBDUkVBVEVfQUxQSEEgPSAiIiJDUkVBVEUgVEFCTEUgImFscGhhIiAoIm9uZSIpOyIiIgorICAgICAgICBDUkVBVEVfQkVUQSA9ICIiIkNSRUFURSBUQUJMRSAiYmV0YSIgKCJ0d28iKTsiIiIKKyAgICAgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgICAgICAiQkVHSU4gVFJBTlNBQ1RJT047IiwKKyAgICAgICAgICAgIENSRUFURV9BTFBIQSwKKyAgICAgICAgICAgIENSRUFURV9CRVRBLAorICAgICAgICAgICAgIkNPTU1JVDsiCisgICAgICAgICAgICBdCisgICAgICAgIHNlbGYuY3UuZXhlY3V0ZShDUkVBVEVfQkVUQSkKKyAgICAgICAgc2VsZi5jdS5leGVjdXRlKENSRUFURV9BTFBIQSkKKyAgICAgICAgZ290ID0gbGlzdChzZWxmLmN4Lml0ZXJkdW1wKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKworZGVmIHN1aXRlKCk6CisgICAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RTdWl0ZSh1bml0dGVzdC5tYWtlU3VpdGUoRHVtcFRlc3RzLCAiQ2hlY2siKSkKKworZGVmIHRlc3QoKToKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAgcnVubmVyLnJ1bihzdWl0ZSgpKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9zcWxpdGUzL3Rlc3QvZmFjdG9yeS5weSBiL2xpYi9weXRob24yLjcvc3FsaXRlMy90ZXN0L2ZhY3RvcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI4NTRiZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvc3FsaXRlMy90ZXN0L2ZhY3RvcnkucHkKQEAgLTAsMCArMSwyNDQgQEAKKyMtKi0gY29kaW5nOiBJU08tODg1OS0xIC0qLQorIyBweXNxbGl0ZTIvdGVzdC9mYWN0b3J5LnB5OiB0ZXN0cyBmb3IgdGhlIHZhcmlvdXMgZmFjdG9yaWVzIGluIHB5c3FsaXRlCisjCisjIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisjIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyMgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyMKKyMgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisjIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyMgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorIworIyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorIyAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorIyAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyMgICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyMgMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyMgICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorIyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzcWxpdGUzIGFzIHNxbGl0ZQorCitjbGFzcyBNeUNvbm5lY3Rpb24oc3FsaXRlLkNvbm5lY3Rpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzcWxpdGUuQ29ubmVjdGlvbi5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisKK2RlZiBkaWN0X2ZhY3RvcnkoY3Vyc29yLCByb3cpOgorICAgIGQgPSB7fQorICAgIGZvciBpZHgsIGNvbCBpbiBlbnVtZXJhdGUoY3Vyc29yLmRlc2NyaXB0aW9uKToKKyAgICAgICAgZFtjb2xbMF1dID0gcm93W2lkeF0KKyAgICByZXR1cm4gZAorCitjbGFzcyBNeUN1cnNvcihzcWxpdGUuQ3Vyc29yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3FsaXRlLkN1cnNvci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYucm93X2ZhY3RvcnkgPSBkaWN0X2ZhY3RvcnkKKworY2xhc3MgQ29ubmVjdGlvbkZhY3RvcnlUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIsIGZhY3Rvcnk9TXlDb25uZWN0aW9uKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5jbG9zZSgpCisKKyAgICBkZWYgQ2hlY2tJc0luc3RhbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLmNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlDb25uZWN0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb25uZWN0aW9uIGlzIG5vdCBpbnN0YW5jZSBvZiBNeUNvbm5lY3Rpb24iKQorCitjbGFzcyBDdXJzb3JGYWN0b3J5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5jbG9zZSgpCisKKyAgICBkZWYgQ2hlY2tJc0luc3RhbmNlKHNlbGYpOgorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoZmFjdG9yeT1NeUN1cnNvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoY3VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUN1cnNvciksCisgICAgICAgICAgICAgICAgICAgICAgICAiY3Vyc29yIGlzIG5vdCBpbnN0YW5jZSBvZiBNeUN1cnNvciIpCisKK2NsYXNzIFJvd0ZhY3RvcnlUZXN0c0JhY2t3YXJkc0NvbXBhdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisKKyAgICBkZWYgQ2hlY2tJc1Byb2R1Y2VkQnlGYWN0b3J5KHNlbGYpOgorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoZmFjdG9yeT1NeUN1cnNvcikKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCA0KzUgYXMgZm9vIikKKyAgICAgICAgcm93ID0gY3VyLmZldGNob25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uocm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJyb3cgaXMgbm90IGluc3RhbmNlIG9mIGRpY3QiKQorICAgICAgICBjdXIuY2xvc2UoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5jbG9zZSgpCisKK2NsYXNzIFJvd0ZhY3RvcnlUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisKKyAgICBkZWYgQ2hlY2tDdXN0b21GYWN0b3J5KHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5yb3dfZmFjdG9yeSA9IGxhbWJkYSBjdXIsIHJvdzogbGlzdChyb3cpCisgICAgICAgIHJvdyA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCAxLCAyIikuZmV0Y2hvbmUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShyb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgInJvdyBpcyBub3QgaW5zdGFuY2Ugb2YgbGlzdCIpCisKKyAgICBkZWYgQ2hlY2tTcWxpdGVSb3dJbmRleChzZWxmKToKKyAgICAgICAgc2VsZi5jb24ucm93X2ZhY3RvcnkgPSBzcWxpdGUuUm93CisgICAgICAgIHJvdyA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCAxIGFzIGEsIDIgYXMgYiIpLmZldGNob25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uocm93LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWxpdGUuUm93KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJyb3cgaXMgbm90IGluc3RhbmNlIG9mIHNxbGl0ZS5Sb3ciKQorCisgICAgICAgIGNvbDEsIGNvbDIgPSByb3dbImEiXSwgcm93WyJiIl0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbDEgPT0gMSwgImJ5IG5hbWU6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uICdhJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb2wyID09IDIsICJieSBuYW1lOiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAnYSciKQorCisgICAgICAgIGNvbDEsIGNvbDIgPSByb3dbIkEiXSwgcm93WyJCIl0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbDEgPT0gMSwgImJ5IG5hbWU6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uICdBJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb2wyID09IDIsICJieSBuYW1lOiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAnQiciKQorCisgICAgICAgIGNvbDEsIGNvbDIgPSByb3dbMF0sIHJvd1sxXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sMSA9PSAxLCAiYnkgaW5kZXg6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uIDAiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sMiA9PSAyLCAiYnkgaW5kZXg6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uIDEiKQorCisgICAgZGVmIENoZWNrU3FsaXRlUm93SXRlcihzZWxmKToKKyAgICAgICAgIiIiQ2hlY2tzIGlmIHRoZSByb3cgb2JqZWN0IGlzIGl0ZXJhYmxlIiIiCisgICAgICAgIHNlbGYuY29uLnJvd19mYWN0b3J5ID0gc3FsaXRlLlJvdworICAgICAgICByb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgMSBhcyBhLCAyIGFzIGIiKS5mZXRjaG9uZSgpCisgICAgICAgIGZvciBjb2wgaW4gcm93OgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIENoZWNrU3FsaXRlUm93QXNUdXBsZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2tzIGlmIHRoZSByb3cgb2JqZWN0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSB0dXBsZSIiIgorICAgICAgICBzZWxmLmNvbi5yb3dfZmFjdG9yeSA9IHNxbGl0ZS5Sb3cKKyAgICAgICAgcm93ID0gc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0IDEgYXMgYSwgMiBhcyBiIikuZmV0Y2hvbmUoKQorICAgICAgICB0ID0gdHVwbGUocm93KQorCisgICAgZGVmIENoZWNrU3FsaXRlUm93QXNEaWN0KHNlbGYpOgorICAgICAgICAiIiJDaGVja3MgaWYgdGhlIHJvdyBvYmplY3QgY2FuIGJlIGNvcnJlY3RseSBjb252ZXJ0ZWQgdG8gYSBkaWN0aW9uYXJ5IiIiCisgICAgICAgIHNlbGYuY29uLnJvd19mYWN0b3J5ID0gc3FsaXRlLlJvdworICAgICAgICByb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgMSBhcyBhLCAyIGFzIGIiKS5mZXRjaG9uZSgpCisgICAgICAgIGQgPSBkaWN0KHJvdykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWyJhIl0sIHJvd1siYSJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbImIiXSwgcm93WyJiIl0pCisKKyAgICBkZWYgQ2hlY2tTcWxpdGVSb3dIYXNoQ21wKHNlbGYpOgorICAgICAgICAiIiJDaGVja3MgaWYgdGhlIHJvdyBvYmplY3QgY29tcGFyZXMgYW5kIGhhc2hlcyBjb3JyZWN0bHkiIiIKKyAgICAgICAgc2VsZi5jb24ucm93X2ZhY3RvcnkgPSBzcWxpdGUuUm93CisgICAgICAgIHJvd18xID0gc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0IDEgYXMgYSwgMiBhcyBiIikuZmV0Y2hvbmUoKQorICAgICAgICByb3dfMiA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCAxIGFzIGEsIDIgYXMgYiIpLmZldGNob25lKCkKKyAgICAgICAgcm93XzMgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgMSBhcyBhLCAzIGFzIGIiKS5mZXRjaG9uZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJvd18xID09IHJvd18xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocm93XzEgPT0gcm93XzIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyb3dfMiAhPSByb3dfMykKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJvd18xICE9IHJvd18xKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJvd18xICE9IHJvd18yKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJvd18yID09IHJvd18zKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93XzEsIHJvd18yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2gocm93XzEpLCBoYXNoKHJvd18yKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyb3dfMSwgcm93XzMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaGFzaChyb3dfMSksIGhhc2gocm93XzMpKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5jbG9zZSgpCisKK2NsYXNzIFRleHRGYWN0b3J5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorCisgICAgZGVmIENoZWNrVW5pY29kZShzZWxmKToKKyAgICAgICAgYXVzdHJpYSA9IHVuaWNvZGUoItZzdGVycmVpY2giLCAibGF0aW4xIikKKyAgICAgICAgcm93ID0gc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0ID8iLCAoYXVzdHJpYSwpKS5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHJvd1swXSkgPT0gdW5pY29kZSwgInR5cGUgb2Ygcm93WzBdIG11c3QgYmUgdW5pY29kZSIpCisKKyAgICBkZWYgQ2hlY2tTdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY29uLnRleHRfZmFjdG9yeSA9IHN0cgorICAgICAgICBhdXN0cmlhID0gdW5pY29kZSgi1nN0ZXJyZWljaCIsICJsYXRpbjEiKQorICAgICAgICByb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgPyIsIChhdXN0cmlhLCkpLmZldGNob25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocm93WzBdKSA9PSBzdHIsICJ0eXBlIG9mIHJvd1swXSBtdXN0IGJlIHN0ciIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyb3dbMF0gPT0gYXVzdHJpYS5lbmNvZGUoInV0Zi04IiksICJjb2x1bW4gbXVzdCBlcXVhbCBvcmlnaW5hbCBkYXRhIGluIFVURi04IikKKworICAgIGRlZiBDaGVja0N1c3RvbShzZWxmKToKKyAgICAgICAgc2VsZi5jb24udGV4dF9mYWN0b3J5ID0gbGFtYmRhIHg6IHVuaWNvZGUoeCwgInV0Zi04IiwgImlnbm9yZSIpCisgICAgICAgIGF1c3RyaWEgPSB1bmljb2RlKCLWc3RlcnJlaWNoIiwgImxhdGluMSIpCisgICAgICAgIHJvdyA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCA/IiwgKGF1c3RyaWEuZW5jb2RlKCJsYXRpbjEiKSwpKS5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHJvd1swXSkgPT0gdW5pY29kZSwgInR5cGUgb2Ygcm93WzBdIG11c3QgYmUgdW5pY29kZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyb3dbMF0uZW5kc3dpdGgodSJyZWljaCIpLCAiY29sdW1uIG11c3QgY29udGFpbiBvcmlnaW5hbCBkYXRhIikKKworICAgIGRlZiBDaGVja09wdGltaXplZFVuaWNvZGUoc2VsZik6CisgICAgICAgIHNlbGYuY29uLnRleHRfZmFjdG9yeSA9IHNxbGl0ZS5PcHRpbWl6ZWRVbmljb2RlCisgICAgICAgIGF1c3RyaWEgPSB1bmljb2RlKCLWc3RlcnJlaWNoIiwgImxhdGluMSIpCisgICAgICAgIGdlcm1hbnkgPSB1bmljb2RlKCJEZXV0Y2hsYW5kIikKKyAgICAgICAgYV9yb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgPyIsIChhdXN0cmlhLCkpLmZldGNob25lKCkKKyAgICAgICAgZF9yb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgPyIsIChnZXJtYW55LCkpLmZldGNob25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoYV9yb3dbMF0pID09IHVuaWNvZGUsICJ0eXBlIG9mIG5vbi1BU0NJSSByb3cgbXVzdCBiZSB1bmljb2RlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoZF9yb3dbMF0pID09IHN0ciwgInR5cGUgb2YgQVNDSUktb25seSByb3cgbXVzdCBiZSBzdHIiKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5jbG9zZSgpCisKK2NsYXNzIFRleHRGYWN0b3J5VGVzdHNXaXRoRW1iZWRkZWRaZXJvQnl0ZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdCAodmFsdWUgdGV4dCkiKQorICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0ICh2YWx1ZSkgdmFsdWVzICg/KSIsICgiYVx4MDBiIiwpKQorCisgICAgZGVmIENoZWNrU3RyaW5nKHNlbGYpOgorICAgICAgICAjIHRleHRfZmFjdG9yeSBkZWZhdWx0cyB0byB1bmljb2RlCisgICAgICAgIHJvdyA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCB2YWx1ZSBmcm9tIHRlc3QiKS5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyb3dbMF0pLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgImFceDAwYiIpCisKKyAgICBkZWYgQ2hlY2tDdXN0b20oc2VsZik6CisgICAgICAgICMgQSBjdXN0b20gZmFjdG9yeSBzaG91bGQgcmVjZWl2ZSBhbiBzdHIgYXJndW1lbnQKKyAgICAgICAgc2VsZi5jb24udGV4dF9mYWN0b3J5ID0gbGFtYmRhIHg6IHgKKyAgICAgICAgcm93ID0gc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0IHZhbHVlIGZyb20gdGVzdCIpLmZldGNob25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHJvd1swXSksIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sICJhXHgwMGIiKQorCisgICAgZGVmIENoZWNrT3B0aW1pemVkVW5pY29kZUFzU3RyaW5nKHNlbGYpOgorICAgICAgICAjIEFTQ0lJIC0+IHN0ciBhcmd1bWVudAorICAgICAgICBzZWxmLmNvbi50ZXh0X2ZhY3RvcnkgPSBzcWxpdGUuT3B0aW1pemVkVW5pY29kZQorICAgICAgICByb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgdmFsdWUgZnJvbSB0ZXN0IikuZmV0Y2hvbmUoKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocm93WzBdKSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgImFceDAwYiIpCisKKyAgICBkZWYgQ2hlY2tPcHRpbWl6ZWRVbmljb2RlQXNVbmljb2RlKHNlbGYpOgorICAgICAgICAjIE5vbi1BU0NJSSAtPiB1bmljb2RlIGFyZ3VtZW50CisgICAgICAgIHNlbGYuY29uLnRleHRfZmFjdG9yeSA9IHNxbGl0ZS5PcHRpbWl6ZWRVbmljb2RlCisgICAgICAgIHNlbGYuY29uLmV4ZWN1dGUoImRlbGV0ZSBmcm9tIHRlc3QiKQorICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0ICh2YWx1ZSkgdmFsdWVzICg/KSIsICh1J+RcMPYnLCkpCisgICAgICAgIHJvdyA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCB2YWx1ZSBmcm9tIHRlc3QiKS5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyb3dbMF0pLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgdSLkXHgwMPYiKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5jbG9zZSgpCisKK2RlZiBzdWl0ZSgpOgorICAgIGNvbm5lY3Rpb25fc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ29ubmVjdGlvbkZhY3RvcnlUZXN0cywgIkNoZWNrIikKKyAgICBjdXJzb3Jfc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ3Vyc29yRmFjdG9yeVRlc3RzLCAiQ2hlY2siKQorICAgIHJvd19zdWl0ZV9jb21wYXQgPSB1bml0dGVzdC5tYWtlU3VpdGUoUm93RmFjdG9yeVRlc3RzQmFja3dhcmRzQ29tcGF0LCAiQ2hlY2siKQorICAgIHJvd19zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShSb3dGYWN0b3J5VGVzdHMsICJDaGVjayIpCisgICAgdGV4dF9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShUZXh0RmFjdG9yeVRlc3RzLCAiQ2hlY2siKQorICAgIHRleHRfemVyb19ieXRlc19zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShUZXh0RmFjdG9yeVRlc3RzV2l0aEVtYmVkZGVkWmVyb0J5dGVzLCAiQ2hlY2siKQorICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoKGNvbm5lY3Rpb25fc3VpdGUsIGN1cnNvcl9zdWl0ZSwgcm93X3N1aXRlX2NvbXBhdCwgcm93X3N1aXRlLCB0ZXh0X3N1aXRlLCB0ZXh0X3plcm9fYnl0ZXNfc3VpdGUpKQorCitkZWYgdGVzdCgpOgorICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKCkKKyAgICBydW5uZXIucnVuKHN1aXRlKCkpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdCgpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3NxbGl0ZTMvdGVzdC9ob29rcy5weSBiL2xpYi9weXRob24yLjcvc3FsaXRlMy90ZXN0L2hvb2tzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZmFlMTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3NxbGl0ZTMvdGVzdC9ob29rcy5weQpAQCAtMCwwICsxLDIwNyBAQAorIy0qLSBjb2Rpbmc6IElTTy04ODU5LTEgLSotCisjIHB5c3FsaXRlMi90ZXN0L2hvb2tzLnB5OiB0ZXN0cyBmb3IgdmFyaW91cyBTUUxpdGUtc3BlY2lmaWMgaG9va3MKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyMgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworIyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorIworIyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyMgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorIyBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisjCisjIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisjICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisjICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorIyAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorIyAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorIyAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisjIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisKK2ltcG9ydCBvcywgdW5pdHRlc3QKK2ltcG9ydCBzcWxpdGUzIGFzIHNxbGl0ZQorCitjbGFzcyBDb2xsYXRpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBDaGVja0NyZWF0ZUNvbGxhdGlvbk5vdENhbGxhYmxlKHNlbGYpOgorICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb24uY3JlYXRlX2NvbGxhdGlvbigiWCIsIDQyKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBUeXBlRXJyb3IiKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sICJwYXJhbWV0ZXIgbXVzdCBiZSBjYWxsYWJsZSIpCisKKyAgICBkZWYgQ2hlY2tDcmVhdGVDb2xsYXRpb25Ob3RBc2NpaShzZWxmKToKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29uLmNyZWF0ZV9jb2xsYXRpb24oImNvbGzkIiwgY21wKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yLCBlOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIENoZWNrQ29sbGF0aW9uSXNVc2VkKHNlbGYpOgorICAgICAgICBpZiBzcWxpdGUudmVyc2lvbl9pbmZvIDwgKDMsIDIsIDEpOiAgIyBvbGQgU1FMaXRlIHZlcnNpb25zIGNyYXNoIG9uIHRoaXMgdGVzdAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRlZiBteWNvbGwoeCwgeSk6CisgICAgICAgICAgICAjIHJldmVyc2Ugb3JkZXIKKyAgICAgICAgICAgIHJldHVybiAtY21wKHgsIHkpCisKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgY29uLmNyZWF0ZV9jb2xsYXRpb24oIm15Y29sbCIsIG15Y29sbCkKKyAgICAgICAgc3FsID0gIiIiCisgICAgICAgICAgICBzZWxlY3QgeCBmcm9tICgKKyAgICAgICAgICAgIHNlbGVjdCAnYScgYXMgeAorICAgICAgICAgICAgdW5pb24KKyAgICAgICAgICAgIHNlbGVjdCAnYicgYXMgeAorICAgICAgICAgICAgdW5pb24KKyAgICAgICAgICAgIHNlbGVjdCAnYycgYXMgeAorICAgICAgICAgICAgKSBvcmRlciBieSB4IGNvbGxhdGUgbXljb2xsCisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmVzdWx0ID0gY29uLmV4ZWN1dGUoc3FsKS5mZXRjaGFsbCgpCisgICAgICAgIGlmIHJlc3VsdFswXVswXSAhPSAiYyIgb3IgcmVzdWx0WzFdWzBdICE9ICJiIiBvciByZXN1bHRbMl1bMF0gIT0gImEiOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJ0aGUgZXhwZWN0ZWQgb3JkZXIgd2FzIG5vdCByZXR1cm5lZCIpCisKKyAgICAgICAgY29uLmNyZWF0ZV9jb2xsYXRpb24oIm15Y29sbCIsIE5vbmUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IGNvbi5leGVjdXRlKHNxbCkuZmV0Y2hhbGwoKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLmxvd2VyKCksICJubyBzdWNoIGNvbGxhdGlvbiBzZXF1ZW5jZTogbXljb2xsIikKKworICAgIGRlZiBDaGVja0NvbGxhdGlvblJldHVybnNMYXJnZUludGVnZXIoc2VsZik6CisgICAgICAgIGRlZiBteWNvbGwoeCwgeSk6CisgICAgICAgICAgICAjIHJldmVyc2Ugb3JkZXIKKyAgICAgICAgICAgIHJldHVybiAtKCh4ID4geSkgLSAoeCA8IHkpKSAqIDIqKjMyCisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIGNvbi5jcmVhdGVfY29sbGF0aW9uKCJteWNvbGwiLCBteWNvbGwpCisgICAgICAgIHNxbCA9ICIiIgorICAgICAgICAgICAgc2VsZWN0IHggZnJvbSAoCisgICAgICAgICAgICBzZWxlY3QgJ2EnIGFzIHgKKyAgICAgICAgICAgIHVuaW9uCisgICAgICAgICAgICBzZWxlY3QgJ2InIGFzIHgKKyAgICAgICAgICAgIHVuaW9uCisgICAgICAgICAgICBzZWxlY3QgJ2MnIGFzIHgKKyAgICAgICAgICAgICkgb3JkZXIgYnkgeCBjb2xsYXRlIG15Y29sbAorICAgICAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdCA9IGNvbi5leGVjdXRlKHNxbCkuZmV0Y2hhbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWygnYycsKSwgKCdiJywpLCAoJ2EnLCldLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0idGhlIGV4cGVjdGVkIG9yZGVyIHdhcyBub3QgcmV0dXJuZWQiKQorCisgICAgZGVmIENoZWNrQ29sbGF0aW9uUmVnaXN0ZXJUd2ljZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlZ2lzdGVyIHR3byBkaWZmZXJlbnQgY29sbGF0aW9uIGZ1bmN0aW9ucyB1bmRlciB0aGUgc2FtZSBuYW1lLgorICAgICAgICBWZXJpZnkgdGhhdCB0aGUgbGFzdCBvbmUgaXMgYWN0dWFsbHkgdXNlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIGNvbi5jcmVhdGVfY29sbGF0aW9uKCJteWNvbGwiLCBjbXApCisgICAgICAgIGNvbi5jcmVhdGVfY29sbGF0aW9uKCJteWNvbGwiLCBsYW1iZGEgeCwgeTogLWNtcCh4LCB5KSkKKyAgICAgICAgcmVzdWx0ID0gY29uLmV4ZWN1dGUoIiIiCisgICAgICAgICAgICBzZWxlY3QgeCBmcm9tIChzZWxlY3QgJ2EnIGFzIHggdW5pb24gc2VsZWN0ICdiJyBhcyB4KSBvcmRlciBieSB4IGNvbGxhdGUgbXljb2xsCisgICAgICAgICAgICAiIiIpLmZldGNoYWxsKCkKKyAgICAgICAgaWYgcmVzdWx0WzBdWzBdICE9ICdiJyBvciByZXN1bHRbMV1bMF0gIT0gJ2EnOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJ3cm9uZyBjb2xsYXRpb24gZnVuY3Rpb24gaXMgdXNlZCIpCisKKyAgICBkZWYgQ2hlY2tEZXJlZ2lzdGVyQ29sbGF0aW9uKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVnaXN0ZXIgYSBjb2xsYXRpb24sIHRoZW4gZGVyZWdpc3RlciBpdC4gTWFrZSBzdXJlIGFuIGVycm9yIGlzIHJhaXNlZCBpZiB3ZSB0cnkKKyAgICAgICAgdG8gdXNlIGl0LgorICAgICAgICAiIiIKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgY29uLmNyZWF0ZV9jb2xsYXRpb24oIm15Y29sbCIsIGNtcCkKKyAgICAgICAgY29uLmNyZWF0ZV9jb2xsYXRpb24oIm15Y29sbCIsIE5vbmUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbi5leGVjdXRlKCJzZWxlY3QgJ2EnIGFzIHggdW5pb24gc2VsZWN0ICdiJyBhcyB4IG9yZGVyIGJ5IHggY29sbGF0ZSBteWNvbGwiKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciwgZToKKyAgICAgICAgICAgIGlmIG5vdCBlLmFyZ3NbMF0uc3RhcnRzd2l0aCgibm8gc3VjaCBjb2xsYXRpb24gc2VxdWVuY2UiKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIndyb25nIE9wZXJhdGlvbmFsRXJyb3IgcmFpc2VkIikKKworY2xhc3MgUHJvZ3Jlc3NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIENoZWNrUHJvZ3Jlc3NIYW5kbGVyVXNlZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgdGhhdCB0aGUgcHJvZ3Jlc3MgaGFuZGxlciBpcyBpbnZva2VkIG9uY2UgaXQgaXMgc2V0LgorICAgICAgICAiIiIKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgcHJvZ3Jlc3NfY2FsbHMgPSBbXQorICAgICAgICBkZWYgcHJvZ3Jlc3MoKToKKyAgICAgICAgICAgIHByb2dyZXNzX2NhbGxzLmFwcGVuZChOb25lKQorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgY29uLnNldF9wcm9ncmVzc19oYW5kbGVyKHByb2dyZXNzLCAxKQorICAgICAgICBjb24uZXhlY3V0ZSgiIiIKKyAgICAgICAgICAgIGNyZWF0ZSB0YWJsZSBmb28oYSwgYikKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2dyZXNzX2NhbGxzKQorCisKKyAgICBkZWYgQ2hlY2tPcGNvZGVDb3VudChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgdGhhdCB0aGUgb3Bjb2RlIGFyZ3VtZW50IGlzIHJlc3BlY3RlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIHByb2dyZXNzX2NhbGxzID0gW10KKyAgICAgICAgZGVmIHByb2dyZXNzKCk6CisgICAgICAgICAgICBwcm9ncmVzc19jYWxscy5hcHBlbmQoTm9uZSkKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGNvbi5zZXRfcHJvZ3Jlc3NfaGFuZGxlcihwcm9ncmVzcywgMSkKKyAgICAgICAgY3VycyA9IGNvbi5jdXJzb3IoKQorICAgICAgICBjdXJzLmV4ZWN1dGUoIiIiCisgICAgICAgICAgICBjcmVhdGUgdGFibGUgZm9vIChhLCBiKQorICAgICAgICAgICAgIiIiKQorICAgICAgICBmaXJzdF9jb3VudCA9IGxlbihwcm9ncmVzc19jYWxscykKKyAgICAgICAgcHJvZ3Jlc3NfY2FsbHMgPSBbXQorICAgICAgICBjb24uc2V0X3Byb2dyZXNzX2hhbmRsZXIocHJvZ3Jlc3MsIDIpCisgICAgICAgIGN1cnMuZXhlY3V0ZSgiIiIKKyAgICAgICAgICAgIGNyZWF0ZSB0YWJsZSBiYXIgKGEsIGIpCisgICAgICAgICAgICAiIiIpCisgICAgICAgIHNlY29uZF9jb3VudCA9IGxlbihwcm9ncmVzc19jYWxscykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpcnN0X2NvdW50ID4gc2Vjb25kX2NvdW50KQorCisgICAgZGVmIENoZWNrQ2FuY2VsT3BlcmF0aW9uKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCB0aGF0IHJldHVybmluZyBhIG5vbi16ZXJvIHZhbHVlIHN0b3BzIHRoZSBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MuCisgICAgICAgICIiIgorICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICBwcm9ncmVzc19jYWxscyA9IFtdCisgICAgICAgIGRlZiBwcm9ncmVzcygpOgorICAgICAgICAgICAgcHJvZ3Jlc3NfY2FsbHMuYXBwZW5kKE5vbmUpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBjb24uc2V0X3Byb2dyZXNzX2hhbmRsZXIocHJvZ3Jlc3MsIDEpCisgICAgICAgIGN1cnMgPSBjb24uY3Vyc29yKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciwKKyAgICAgICAgICAgIGN1cnMuZXhlY3V0ZSwKKyAgICAgICAgICAgICJjcmVhdGUgdGFibGUgYmFyIChhLCBiKSIpCisKKyAgICBkZWYgQ2hlY2tDbGVhckhhbmRsZXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUZXN0IHRoYXQgc2V0dGluZyB0aGUgcHJvZ3Jlc3MgaGFuZGxlciB0byBOb25lIGNsZWFycyB0aGUgcHJldmlvdXNseSBzZXQgaGFuZGxlci4KKyAgICAgICAgIiIiCisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIGFjdGlvbiA9IFtdCisgICAgICAgIGRlZiBwcm9ncmVzcygpOgorICAgICAgICAgICAgYWN0aW9uLmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgY29uLnNldF9wcm9ncmVzc19oYW5kbGVyKHByb2dyZXNzLCAxKQorICAgICAgICBjb24uc2V0X3Byb2dyZXNzX2hhbmRsZXIoTm9uZSwgMSkKKyAgICAgICAgY29uLmV4ZWN1dGUoInNlbGVjdCAxIHVuaW9uIHNlbGVjdCAyIHVuaW9uIHNlbGVjdCAzIikuZmV0Y2hhbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhY3Rpb24pLCAwLCAicHJvZ3Jlc3MgaGFuZGxlciB3YXMgbm90IGNsZWFyZWQiKQorCitkZWYgc3VpdGUoKToKKyAgICBjb2xsYXRpb25fc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ29sbGF0aW9uVGVzdHMsICJDaGVjayIpCisgICAgcHJvZ3Jlc3Nfc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoUHJvZ3Jlc3NUZXN0cywgIkNoZWNrIikKKyAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKChjb2xsYXRpb25fc3VpdGUsIHByb2dyZXNzX3N1aXRlKSkKKworZGVmIHRlc3QoKToKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAgcnVubmVyLnJ1bihzdWl0ZSgpKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9zcWxpdGUzL3Rlc3QvcHkyNXRlc3RzLnB5IGIvbGliL3B5dGhvbjIuNy9zcWxpdGUzL3Rlc3QvcHkyNXRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZDNjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3NxbGl0ZTMvdGVzdC9weTI1dGVzdHMucHkKQEAgLTAsMCArMSw4MCBAQAorIy0qLSBjb2Rpbmc6IElTTy04ODU5LTEgLSotCisjIHB5c3FsaXRlMi90ZXN0L3JlZ3Jlc3Npb24ucHk6IHB5c3FsaXRlIHJlZ3Jlc3Npb24gdGVzdHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCisjCisjIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisjIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKyMgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKyMKKyMgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCisjIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKyMgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorIworIyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorIyAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorIyAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyMgICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyMgMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyMgICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorIyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzcWxpdGUzIGFzIHNxbGl0ZQorCitkaWRfcm9sbGJhY2sgPSBGYWxzZQorCitjbGFzcyBNeUNvbm5lY3Rpb24oc3FsaXRlLkNvbm5lY3Rpb24pOgorICAgIGRlZiByb2xsYmFjayhzZWxmKToKKyAgICAgICAgZ2xvYmFsIGRpZF9yb2xsYmFjaworICAgICAgICBkaWRfcm9sbGJhY2sgPSBUcnVlCisgICAgICAgIHNxbGl0ZS5Db25uZWN0aW9uLnJvbGxiYWNrKHNlbGYpCisKK2NsYXNzIENvbnRleHRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBnbG9iYWwgZGlkX3JvbGxiYWNrCisgICAgICAgIHNlbGYuY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IiwgZmFjdG9yeT1NeUNvbm5lY3Rpb24pCisgICAgICAgIHNlbGYuY29uLmV4ZWN1dGUoImNyZWF0ZSB0YWJsZSB0ZXN0KGMgdW5pcXVlKSIpCisgICAgICAgIGRpZF9yb2xsYmFjayA9IEZhbHNlCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY29uLmNsb3NlKCkKKworICAgIGRlZiBDaGVja0NvbnRleHRNYW5hZ2VyKHNlbGYpOgorICAgICAgICAiIiJDYW4gdGhlIGNvbm5lY3Rpb24gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciBhdCBhbGw/IiIiCisgICAgICAgIHdpdGggc2VsZi5jb246CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgQ2hlY2tDb250ZXh0TWFuYWdlckNvbW1pdChzZWxmKToKKyAgICAgICAgIiIiSXMgYSBjb21taXQgY2FsbGVkIGluIHRoZSBjb250ZXh0IG1hbmFnZXI/IiIiCisgICAgICAgIHdpdGggc2VsZi5jb246CisgICAgICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGMpIHZhbHVlcyAoJ2ZvbycpIikKKyAgICAgICAgc2VsZi5jb24ucm9sbGJhY2soKQorICAgICAgICBjb3VudCA9IHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3QiKS5mZXRjaG9uZSgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnQsIDEpCisKKyAgICBkZWYgQ2hlY2tDb250ZXh0TWFuYWdlclJvbGxiYWNrKHNlbGYpOgorICAgICAgICAiIiJJcyBhIHJvbGxiYWNrIGNhbGxlZCBpbiB0aGUgY29udGV4dCBtYW5hZ2VyPyIiIgorICAgICAgICBnbG9iYWwgZGlkX3JvbGxiYWNrCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlkX3JvbGxiYWNrLCBGYWxzZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLmNvbjoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGMpIHZhbHVlcyAoNCkiKQorICAgICAgICAgICAgICAgIHNlbGYuY29uLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoYykgdmFsdWVzICg0KSIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuSW50ZWdyaXR5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlkX3JvbGxiYWNrLCBUcnVlKQorCitkZWYgc3VpdGUoKToKKyAgICBjdHhfc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ29udGV4dFRlc3RzLCAiQ2hlY2siKQorICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoKGN0eF9zdWl0ZSwpKQorCitkZWYgdGVzdCgpOgorICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKCkKKyAgICBydW5uZXIucnVuKHN1aXRlKCkpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdCgpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3NxbGl0ZTMvdGVzdC9yZWdyZXNzaW9uLnB5IGIvbGliL3B5dGhvbjIuNy9zcWxpdGUzL3Rlc3QvcmVncmVzc2lvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTM5ZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy9zcWxpdGUzL3Rlc3QvcmVncmVzc2lvbi5weQpAQCAtMCwwICsxLDMyNCBAQAorIy0qLSBjb2Rpbmc6IGlzby04ODU5LTEgLSotCisjIHB5c3FsaXRlMi90ZXN0L3JlZ3Jlc3Npb24ucHk6IHB5c3FsaXRlIHJlZ3Jlc3Npb24gdGVzdHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyMgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworIyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorIworIyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyMgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorIyBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisjCisjIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisjICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisjICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorIyAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorIyAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorIyAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisjIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3FsaXRlMyBhcyBzcWxpdGUKKworY2xhc3MgUmVncmVzc2lvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jb24uY2xvc2UoKQorCisgICAgZGVmIENoZWNrUHJhZ21hVXNlclZlcnNpb24oc2VsZik6CisgICAgICAgICMgVGhpcyB1c2VkIHRvIGNyYXNoIHB5c3FsaXRlIGJlY2F1c2UgdGhpcyBwcmFnbWEgY29tbWFuZCByZXR1cm5zIE5VTEwgZm9yIHRoZSBjb2x1bW4gbmFtZQorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgicHJhZ21hIHVzZXJfdmVyc2lvbiIpCisKKyAgICBkZWYgQ2hlY2tQcmFnbWFTY2hlbWFWZXJzaW9uKHNlbGYpOgorICAgICAgICAjIFRoaXMgc3RpbGwgY3Jhc2hlZCBweXNxbGl0ZSA8PSAyLjIuMQorICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiLCBkZXRlY3RfdHlwZXM9c3FsaXRlLlBBUlNFX0NPTE5BTUVTKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICAgICAgY3VyLmV4ZWN1dGUoInByYWdtYSBzY2hlbWFfdmVyc2lvbiIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBjdXIuY2xvc2UoKQorICAgICAgICAgICAgY29uLmNsb3NlKCkKKworICAgIGRlZiBDaGVja1N0YXRlbWVudFJlc2V0KHNlbGYpOgorICAgICAgICAjIHB5c3FsaXRlIDIuMS4wIHRvIDIuMi4wIGhhdmUgdGhlIHByb2JsZW0gdGhhdCBub3QgYWxsIHN0YXRlbWVudHMgYXJlCisgICAgICAgICMgcmVzZXQgYmVmb3JlIGEgcm9sbGJhY2ssIGJ1dCBvbmx5IHRob3NlIHRoYXQgYXJlIHN0aWxsIGluIHRoZQorICAgICAgICAjIHN0YXRlbWVudCBjYWNoZS4gVGhlIG90aGVycyBhcmUgbm90IGFjY2Vzc2libGUgZnJvbSB0aGUgY29ubmVjdGlvbiBvYmplY3QuCisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIsIGNhY2hlZF9zdGF0ZW1lbnRzPTUpCisgICAgICAgIGN1cnNvcnMgPSBbY29uLmN1cnNvcigpIGZvciB4IGluIHhyYW5nZSg1KV0KKyAgICAgICAgY3Vyc29yc1swXS5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdCh4KSIpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIGN1cnNvcnNbMF0uZXhlY3V0ZW1hbnkoImluc2VydCBpbnRvIHRlc3QoeCkgdmFsdWVzICg/KSIsIFsoeCwpIGZvciB4IGluIHhyYW5nZSgxMCldKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgY3Vyc29yc1tpXS5leGVjdXRlKCIgIiAqIGkgKyAic2VsZWN0IHggZnJvbSB0ZXN0IikKKworICAgICAgICBjb24ucm9sbGJhY2soKQorCisgICAgZGVmIENoZWNrQ29sdW1uTmFtZVdpdGhTcGFjZXMoc2VsZik6CisgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5leGVjdXRlKCdzZWxlY3QgMSBhcyAiZm9vIGJhciBbZGF0ZXRpbWVdIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLmRlc2NyaXB0aW9uWzBdWzBdLCAiZm9vIGJhciIpCisKKyAgICAgICAgY3VyLmV4ZWN1dGUoJ3NlbGVjdCAxIGFzICJmb28gYmF6IicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLmRlc2NyaXB0aW9uWzBdWzBdLCAiZm9vIGJheiIpCisKKyAgICBkZWYgQ2hlY2tTdGF0ZW1lbnRGaW5hbGl6YXRpb25PbkNsb3NlRGIoc2VsZik6CisgICAgICAgICMgcHlzcWxpdGUgdmVyc2lvbnMgPD0gMi4zLjMgb25seSBmaW5hbGl6ZWQgc3RhdGVtZW50cyBpbiB0aGUgc3RhdGVtZW50CisgICAgICAgICMgY2FjaGUgd2hlbiBjbG9zaW5nIHRoZSBkYXRhYmFzZS4gc3RhdGVtZW50cyB0aGF0IHdlcmUgc3RpbGwKKyAgICAgICAgIyByZWZlcmVuY2VkIGluIGN1cnNvcnMgd2VyZW4ndCBjbG9zZWQgYW4gY291bGQgcHJvdm9rZSAiCisgICAgICAgICMgIk9wZXJhdGlvbmFsRXJyb3I6IFVuYWJsZSB0byBjbG9zZSBkdWUgdG8gdW5maW5hbGlzZWQgc3RhdGVtZW50cyIuCisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIGN1cnNvcnMgPSBbXQorICAgICAgICAjIGRlZmF1bHQgc3RhdGVtZW50IGNhY2hlIHNpemUgaXMgMTAwCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwNSk6CisgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKKyAgICAgICAgICAgIGN1cnNvcnMuYXBwZW5kKGN1cikKKyAgICAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgMSB4IHVuaW9uIHNlbGVjdCAiICsgc3RyKGkpKQorICAgICAgICBjb24uY2xvc2UoKQorCisgICAgZGVmIENoZWNrT25Db25mbGljdFJvbGxiYWNrKHNlbGYpOgorICAgICAgICBpZiBzcWxpdGUuc3FsaXRlX3ZlcnNpb25faW5mbyA8ICgzLCAyLCAyKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICBjb24uZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIGZvbyh4LCB1bmlxdWUoeCkgb24gY29uZmxpY3Qgcm9sbGJhY2spIikKKyAgICAgICAgY29uLmV4ZWN1dGUoImluc2VydCBpbnRvIGZvbyh4KSB2YWx1ZXMgKDEpIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29uLmV4ZWN1dGUoImluc2VydCBpbnRvIGZvbyh4KSB2YWx1ZXMgKDEpIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5EYXRhYmFzZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjb24uZXhlY3V0ZSgiaW5zZXJ0IGludG8gZm9vKHgpIHZhbHVlcyAoMikiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb24uY29tbWl0KCkKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJweXNxbGl0ZSBrbmV3IG5vdGhpbmcgYWJvdXQgdGhlIGltcGxpY2l0IFJPTExCQUNLIikKKworICAgIGRlZiBDaGVja1dvcmthcm91bmRGb3JCdWdneVNxbGl0ZVRyYW5zZmVyQmluZGluZ3Moc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBweXNxbGl0ZSB3b3VsZCBjcmFzaCB3aXRoIG9sZGVyIFNRTGl0ZSB2ZXJzaW9ucyB1bmxlc3MKKyAgICAgICAgYSB3b3JrYXJvdW5kIGlzIGltcGxlbWVudGVkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5jb24uZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIGZvbyhiYXIpIikKKyAgICAgICAgc2VsZi5jb24uZXhlY3V0ZSgiZHJvcCB0YWJsZSBmb28iKQorICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJjcmVhdGUgdGFibGUgZm9vKGJhcikiKQorCisgICAgZGVmIENoZWNrRW1wdHlTdGF0ZW1lbnQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBweXNxbGl0ZSB1c2VkIHRvIHNlZ2ZhdWx0IHdpdGggU1FMaXRlIHZlcnNpb25zIDMuNS54LiBUaGVzZSByZXR1cm4gTlVMTAorICAgICAgICBmb3IgIm5vLW9wZXJhdGlvbiIgc3RhdGVtZW50cworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5jb24uZXhlY3V0ZSgiIikKKworICAgIGRlZiBDaGVja1VuaWNvZGVDb25uZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2l0aCBweXNxbGl0ZSAyLjQuMCB5b3UgbmVlZGVkIHRvIHVzZSBhIHN0cmluZyBvciBhIEFQU1cgY29ubmVjdGlvbgorICAgICAgICBvYmplY3QgZm9yIG9wZW5pbmcgZGF0YWJhc2UgY29ubmVjdGlvbnMuCisKKyAgICAgICAgRm9ybWVybHksIGJvdGggYnl0ZXN0cmluZ3MgYW5kIHVuaWNvZGUgc3RyaW5ncyB1c2VkIHRvIHdvcmsuCisKKyAgICAgICAgTGV0J3MgbWFrZSBzdXJlIHVuaWNvZGUgc3RyaW5ncyB3b3JrIGluIHRoZSBmdXR1cmUuCisgICAgICAgICIiIgorICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCh1IjptZW1vcnk6IikKKyAgICAgICAgY29uLmNsb3NlKCkKKworICAgIGRlZiBDaGVja1R5cGVNYXBVc2FnZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHB5c3FsaXRlIHVudGlsIDIuNC4xIGRpZCBub3QgcmVidWlsZCB0aGUgcm93X2Nhc3RfbWFwIHdoZW4gcmVjb21waWxpbmcKKyAgICAgICAgYSBzdGF0ZW1lbnQuIFRoaXMgdGVzdCBleGhpYml0cyB0aGUgcHJvYmxlbS4KKyAgICAgICAgIiIiCisgICAgICAgIFNFTEVDVCA9ICJzZWxlY3QgKiBmcm9tIGZvbyIKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IixkZXRlY3RfdHlwZXM9c3FsaXRlLlBBUlNFX0RFQ0xUWVBFUykKKyAgICAgICAgY29uLmV4ZWN1dGUoImNyZWF0ZSB0YWJsZSBmb28oYmFyIHRpbWVzdGFtcCkiKQorICAgICAgICBjb24uZXhlY3V0ZSgiaW5zZXJ0IGludG8gZm9vKGJhcikgdmFsdWVzICg/KSIsIChkYXRldGltZS5kYXRldGltZS5ub3coKSwpKQorICAgICAgICBjb24uZXhlY3V0ZShTRUxFQ1QpCisgICAgICAgIGNvbi5leGVjdXRlKCJkcm9wIHRhYmxlIGZvbyIpCisgICAgICAgIGNvbi5leGVjdXRlKCJjcmVhdGUgdGFibGUgZm9vKGJhciBpbnRlZ2VyKSIpCisgICAgICAgIGNvbi5leGVjdXRlKCJpbnNlcnQgaW50byBmb28oYmFyKSB2YWx1ZXMgKDUpIikKKyAgICAgICAgY29uLmV4ZWN1dGUoU0VMRUNUKQorCisgICAgZGVmIENoZWNrUmVnaXN0ZXJBZGFwdGVyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VlIGlzc3VlIDMzMTIuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNxbGl0ZS5yZWdpc3Rlcl9hZGFwdGVyLCB7fSwgTm9uZSkKKworICAgIGRlZiBDaGVja1NldElzb2xhdGlvbkxldmVsKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VlIGlzc3VlIDMzMTIuCisgICAgICAgICIiIgorICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsIHNldGF0dHIsIGNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImlzb2xhdGlvbl9sZXZlbCIsIHUiXHhlOSIpCisKKyAgICBkZWYgQ2hlY2tDdXJzb3JDb25zdHJ1Y3RvckNhbGxDaGVjayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFZlcmlmaWVzIHRoYXQgY3Vyc29yIG1ldGhvZHMgY2hlY2sgd2V0aGVyIGJhc2UgY2xhc3MgX19pbml0X18gd2FzIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGNsYXNzIEN1cnNvcihzcWxpdGUuQ3Vyc29yKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb24pOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICBjdXIgPSBDdXJzb3IoY29uKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IDQrNSIpLmZldGNoYWxsKCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQorICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQorCisgICAgZGVmIENoZWNrQ29ubmVjdGlvbkNvbnN0cnVjdG9yQ2FsbENoZWNrKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVmVyaWZpZXMgdGhhdCBjb25uZWN0aW9uIG1ldGhvZHMgY2hlY2sgd2V0aGVyIGJhc2UgY2xhc3MgX19pbml0X18gd2FzIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGNsYXNzIENvbm5lY3Rpb24oc3FsaXRlLkNvbm5lY3Rpb24pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjb24gPSBDb25uZWN0aW9uKCI6bWVtb3J5OiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgUHJvZ3JhbW1pbmdFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgUHJvZ3JhbW1pbmdFcnJvciIpCisKKyAgICBkZWYgQ2hlY2tDdXJzb3JSZWdpc3RyYXRpb24oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBWZXJpZmllcyB0aGF0IHN1YmNsYXNzZWQgY3Vyc29yIGNsYXNzZXMgYXJlIGNvcnJlY3RseSByZWdpc3RlcmVkIHdpdGgKKyAgICAgICAgdGhlIGNvbm5lY3Rpb24gb2JqZWN0LCB0b28uICAoZmV0Y2gtYWNyb3NzLXJvbGxiYWNrIHByb2JsZW0pCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBDb25uZWN0aW9uKHNxbGl0ZS5Db25uZWN0aW9uKToKKyAgICAgICAgICAgIGRlZiBjdXJzb3Ioc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIEN1cnNvcihzZWxmKQorCisgICAgICAgIGNsYXNzIEN1cnNvcihzcWxpdGUuQ3Vyc29yKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb24pOgorICAgICAgICAgICAgICAgIHNxbGl0ZS5DdXJzb3IuX19pbml0X18oc2VsZiwgY29uKQorCisgICAgICAgIGNvbiA9IENvbm5lY3Rpb24oIjptZW1vcnk6IikKKyAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5leGVjdXRlKCJjcmVhdGUgdGFibGUgZm9vKHgpIikKKyAgICAgICAgY3VyLmV4ZWN1dGVtYW55KCJpbnNlcnQgaW50byBmb28oeCkgdmFsdWVzICg/KSIsIFsoMywpLCAoNCwpLCAoNSwpXSkKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCB4IGZyb20gZm9vIikKKyAgICAgICAgY29uLnJvbGxiYWNrKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyLmZldGNoYWxsKCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIEludGVyZmFjZUVycm9yIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5JbnRlcmZhY2VFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgSW50ZXJmYWNlRXJyb3IiKQorCisgICAgZGVmIENoZWNrQXV0b0NvbW1pdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFZlcmlmaWVzIHRoYXQgY3JlYXRpbmcgYSBjb25uZWN0aW9uIGluIGF1dG9jb21taXQgbW9kZSB3b3Jrcy4KKyAgICAgICAgMi41LjMgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24gc28gdGhhdCB0aGVzZSBjb3VsZCBubyBsb25nZXIKKyAgICAgICAgYmUgY3JlYXRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIsIGlzb2xhdGlvbl9sZXZlbD1Ob25lKQorCisgICAgZGVmIENoZWNrUHJhZ21hQXV0b2NvbW1pdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFZlcmlmaWVzIHRoYXQgcnVubmluZyBhIFBSQUdNQSBzdGF0ZW1lbnQgdGhhdCBkb2VzIGFuIGF1dG9jb21taXQgZG9lcworICAgICAgICB3b3JrLiBUaGlzIGRpZCBub3Qgd29yayBpbiAyLjUuMy8yLjUuNC4KKyAgICAgICAgIiIiCisgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5leGVjdXRlKCJjcmVhdGUgdGFibGUgZm9vKGJhcikiKQorICAgICAgICBjdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gZm9vKGJhcikgdmFsdWVzICg1KSIpCisKKyAgICAgICAgY3VyLmV4ZWN1dGUoInByYWdtYSBwYWdlX3NpemUiKQorICAgICAgICByb3cgPSBjdXIuZmV0Y2hvbmUoKQorCisgICAgZGVmIENoZWNrU2V0RGljdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNzQ3OAorCisgICAgICAgIEl0IHdhcyBwb3NzaWJsZSB0byBzdWNjZXNzZnVsbHkgcmVnaXN0ZXIgY2FsbGJhY2tzIHRoYXQgY291bGQgbm90IGJlCisgICAgICAgIGhhc2hlZC4gUmV0dXJuIGNvZGVzIG9mIFB5RGljdF9TZXRJdGVtIHdlcmUgbm90IGNoZWNrZWQgcHJvcGVybHkuCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBOb3RIYXNoYWJsZToKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigpCisgICAgICAgIHZhciA9IE5vdEhhc2hhYmxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmNvbi5jcmVhdGVfZnVuY3Rpb24sIHZhcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmNvbi5jcmVhdGVfYWdncmVnYXRlLCB2YXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5jb24uc2V0X2F1dGhvcml6ZXIsIHZhcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmNvbi5zZXRfcHJvZ3Jlc3NfaGFuZGxlciwgdmFyKQorCisgICAgZGVmIENoZWNrQ29ubmVjdGlvbkNhbGwoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDYWxsIGEgY29ubmVjdGlvbiB3aXRoIGEgbm9uLXN0cmluZyBTUUwgcmVxdWVzdDogY2hlY2sgZXJyb3IgaGFuZGxpbmcKKyAgICAgICAgb2YgdGhlIHN0YXRlbWVudCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5XYXJuaW5nLCBzZWxmLmNvbiwgMSkKKworICAgIGRlZiBDaGVja1JlY3Vyc2l2ZUN1cnNvclVzZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMDgxMQorCisgICAgICAgIFJlY3Vyc2l2ZWx5IHVzaW5nIGEgY3Vyc29yLCBzdWNoIGFzIHdoZW4gcmV1c2luZyBpdCBmcm9tIGEgZ2VuZXJhdG9yIGxlZCB0byBzZWdmYXVsdHMuCisgICAgICAgIE5vdyB3ZSBjYXRjaCByZWN1cnNpdmUgY3Vyc29yIHVzYWdlIGFuZCByYWlzZSBhIFByb2dyYW1taW5nRXJyb3IuCisgICAgICAgICIiIgorICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorCisgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIGEgKGJhcikiKQorICAgICAgICBjdXIuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIGIgKGJheikiKQorCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGN1ci5leGVjdXRlKCJpbnNlcnQgaW50byBhIChiYXIpIHZhbHVlcyAoPykiLCAoMSwpKQorICAgICAgICAgICAgeWllbGQgMQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgorICAgICAgICAgICAgY3VyLmV4ZWN1dGVtYW55KCJpbnNlcnQgaW50byBiIChiYXopIHZhbHVlcyAoPykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaSwpIGZvciBpIGluIGZvbygpKSkKKworICAgIGRlZiBDaGVja0NvbnZlcnRUaW1lc3RhbXBNaWNyb3NlY29uZFBhZGRpbmcoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTQ3MjAKKworICAgICAgICBUaGUgbWljcm9zZWNvbmQgcGFyc2luZyBvZiBjb252ZXJ0X3RpbWVzdGFtcCgpIHNob3VsZCBwYWQgd2l0aCB6ZXJvcywKKyAgICAgICAgc2luY2UgdGhlIG1pY3Jvc2Vjb25kIHN0cmluZyAiNDU2IiBhY3R1YWxseSByZXByZXNlbnRzICI0NTYwMDAiLgorICAgICAgICAiIiIKKworICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiLCBkZXRlY3RfdHlwZXM9c3FsaXRlLlBBUlNFX0RFQ0xUWVBFUykKKyAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5leGVjdXRlKCJDUkVBVEUgVEFCTEUgdCAoeCBUSU1FU1RBTVApIikKKworICAgICAgICAjIE1pY3Jvc2Vjb25kcyBzaG91bGQgYmUgNDU2MDAwCisgICAgICAgIGN1ci5leGVjdXRlKCJJTlNFUlQgSU5UTyB0ICh4KSBWQUxVRVMgKCcyMDEyLTA0LTA0IDE1OjA2OjAwLjQ1NicpIikKKworICAgICAgICAjIE1pY3Jvc2Vjb25kcyBzaG91bGQgYmUgdHJ1bmNhdGVkIHRvIDEyMzQ1NgorICAgICAgICBjdXIuZXhlY3V0ZSgiSU5TRVJUIElOVE8gdCAoeCkgVkFMVUVTICgnMjAxMi0wNC0wNCAxNTowNjowMC4xMjM0NTY3ODknKSIpCisKKyAgICAgICAgY3VyLmV4ZWN1dGUoIlNFTEVDVCAqIEZST00gdCIpCisgICAgICAgIHZhbHVlcyA9IFt4WzBdIGZvciB4IGluIGN1ci5mZXRjaGFsbCgpXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzLCBbCisgICAgICAgICAgICBkYXRldGltZS5kYXRldGltZSgyMDEyLCA0LCA0LCAxNSwgNiwgMCwgNDU2MDAwKSwKKyAgICAgICAgICAgIGRhdGV0aW1lLmRhdGV0aW1lKDIwMTIsIDQsIDQsIDE1LCA2LCAwLCAxMjM0NTYpLAorICAgICAgICBdKQorCisKK2RlZiBzdWl0ZSgpOgorICAgIHJlZ3Jlc3Npb25fc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoUmVncmVzc2lvblRlc3RzLCAiQ2hlY2siKQorICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoKHJlZ3Jlc3Npb25fc3VpdGUsKSkKKworZGVmIHRlc3QoKToKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAgcnVubmVyLnJ1bihzdWl0ZSgpKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9zcWxpdGUzL3Rlc3QvdHJhbnNhY3Rpb25zLnB5IGIvbGliL3B5dGhvbjIuNy9zcWxpdGUzL3Rlc3QvdHJhbnNhY3Rpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MzIyNTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3NxbGl0ZTMvdGVzdC90cmFuc2FjdGlvbnMucHkKQEAgLTAsMCArMSwyMDUgQEAKKyMtKi0gY29kaW5nOiBJU08tODg1OS0xIC0qLQorIyBweXNxbGl0ZTIvdGVzdC90cmFuc2FjdGlvbnMucHk6IHRlc3RzIHRyYW5zYWN0aW9ucworIworIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgorIworIyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorIyB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCisjIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCisjCisjIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorIyBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisjIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyMKKyMgMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyMgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKKyMgICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCisjICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisjIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisjICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKyMgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworaW1wb3J0IHN5cworaW1wb3J0IG9zLCB1bml0dGVzdAoraW1wb3J0IHNxbGl0ZTMgYXMgc3FsaXRlCisKK2RlZiBnZXRfZGJfcGF0aCgpOgorICAgIHJldHVybiAic3FsaXRlX3Rlc3RkYiIKKworY2xhc3MgVHJhbnNhY3Rpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW1vdmUoZ2V0X2RiX3BhdGgoKSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5jb24xID0gc3FsaXRlLmNvbm5lY3QoZ2V0X2RiX3BhdGgoKSwgdGltZW91dD0wLjEpCisgICAgICAgIHNlbGYuY3VyMSA9IHNlbGYuY29uMS5jdXJzb3IoKQorCisgICAgICAgIHNlbGYuY29uMiA9IHNxbGl0ZS5jb25uZWN0KGdldF9kYl9wYXRoKCksIHRpbWVvdXQ9MC4xKQorICAgICAgICBzZWxmLmN1cjIgPSBzZWxmLmNvbjIuY3Vyc29yKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jdXIxLmNsb3NlKCkKKyAgICAgICAgc2VsZi5jb24xLmNsb3NlKCkKKworICAgICAgICBzZWxmLmN1cjIuY2xvc2UoKQorICAgICAgICBzZWxmLmNvbjIuY2xvc2UoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhnZXRfZGJfcGF0aCgpKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBDaGVja0RNTGRvZXNBdXRvQ29tbWl0QmVmb3JlKHNlbGYpOgorICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRlc3QoaSkiKQorICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpKSB2YWx1ZXMgKDUpIikKKyAgICAgICAgc2VsZi5jdXIxLmV4ZWN1dGUoImNyZWF0ZSB0YWJsZSB0ZXN0MihqKSIpCisgICAgICAgIHNlbGYuY3VyMi5leGVjdXRlKCJzZWxlY3QgaSBmcm9tIHRlc3QiKQorICAgICAgICByZXMgPSBzZWxmLmN1cjIuZmV0Y2hhbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAxKQorCisgICAgZGVmIENoZWNrSW5zZXJ0U3RhcnRzVHJhbnNhY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdChpKSIpCisgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoNSkiKQorICAgICAgICBzZWxmLmN1cjIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSB0ZXN0IikKKyAgICAgICAgcmVzID0gc2VsZi5jdXIyLmZldGNoYWxsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMCkKKworICAgIGRlZiBDaGVja1VwZGF0ZVN0YXJ0c1RyYW5zYWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRlc3QoaSkiKQorICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpKSB2YWx1ZXMgKDUpIikKKyAgICAgICAgc2VsZi5jb24xLmNvbW1pdCgpCisgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJ1cGRhdGUgdGVzdCBzZXQgaT02IikKKyAgICAgICAgc2VsZi5jdXIyLmV4ZWN1dGUoInNlbGVjdCBpIGZyb20gdGVzdCIpCisgICAgICAgIHJlcyA9IHNlbGYuY3VyMi5mZXRjaG9uZSgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA1KQorCisgICAgZGVmIENoZWNrRGVsZXRlU3RhcnRzVHJhbnNhY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdChpKSIpCisgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoNSkiKQorICAgICAgICBzZWxmLmNvbjEuY29tbWl0KCkKKyAgICAgICAgc2VsZi5jdXIxLmV4ZWN1dGUoImRlbGV0ZSBmcm9tIHRlc3QiKQorICAgICAgICBzZWxmLmN1cjIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSB0ZXN0IikKKyAgICAgICAgcmVzID0gc2VsZi5jdXIyLmZldGNoYWxsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMSkKKworICAgIGRlZiBDaGVja1JlcGxhY2VTdGFydHNUcmFuc2FjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5jdXIxLmV4ZWN1dGUoImNyZWF0ZSB0YWJsZSB0ZXN0KGkpIikKKyAgICAgICAgc2VsZi5jdXIxLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaSkgdmFsdWVzICg1KSIpCisgICAgICAgIHNlbGYuY29uMS5jb21taXQoKQorICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgicmVwbGFjZSBpbnRvIHRlc3QoaSkgdmFsdWVzICg2KSIpCisgICAgICAgIHNlbGYuY3VyMi5leGVjdXRlKCJzZWxlY3QgaSBmcm9tIHRlc3QiKQorICAgICAgICByZXMgPSBzZWxmLmN1cjIuZmV0Y2hhbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1swXVswXSwgNSkKKworICAgIGRlZiBDaGVja1RvZ2dsZUF1dG9Db21taXQoc2VsZik6CisgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdChpKSIpCisgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoNSkiKQorICAgICAgICBzZWxmLmNvbjEuaXNvbGF0aW9uX2xldmVsID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29uMS5pc29sYXRpb25fbGV2ZWwsIE5vbmUpCisgICAgICAgIHNlbGYuY3VyMi5leGVjdXRlKCJzZWxlY3QgaSBmcm9tIHRlc3QiKQorICAgICAgICByZXMgPSBzZWxmLmN1cjIuZmV0Y2hhbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAxKQorCisgICAgICAgIHNlbGYuY29uMS5pc29sYXRpb25fbGV2ZWwgPSAiREVGRVJSRUQiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb24xLmlzb2xhdGlvbl9sZXZlbCAsICJERUZFUlJFRCIpCisgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoNSkiKQorICAgICAgICBzZWxmLmN1cjIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSB0ZXN0IikKKyAgICAgICAgcmVzID0gc2VsZi5jdXIyLmZldGNoYWxsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMSkKKworICAgIGRlZiBDaGVja1JhaXNlVGltZW91dChzZWxmKToKKyAgICAgICAgaWYgc3FsaXRlLnNxbGl0ZV92ZXJzaW9uX2luZm8gPCAoMywgMiwgMik6CisgICAgICAgICAgICAjIFRoaXMgd2lsbCBmYWlsIChoYW5nKSBvbiBlYXJsaWVyIHZlcnNpb25zIG9mIHNxbGl0ZS4KKyAgICAgICAgICAgICMgRGV0ZXJtaW5lIGV4YWN0IHZlcnNpb24gaXQgd2FzIGZpeGVkLiAzLjIuMSBoYW5ncy4KKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRlc3QoaSkiKQorICAgICAgICBzZWxmLmN1cjEuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpKSB2YWx1ZXMgKDUpIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jdXIyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaSkgdmFsdWVzICg1KSIpCisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKKworICAgIGRlZiBDaGVja0xvY2tpbmcoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIHRlc3RzIHRoZSBpbXByb3ZlZCBjb25jdXJyZW5jeSB3aXRoIHB5c3FsaXRlIDIuMy40LiBZb3UgbmVlZGVkCisgICAgICAgIHRvIHJvbGwgYmFjayBjb24yIGJlZm9yZSB5b3UgY291bGQgY29tbWl0IGNvbjEuCisgICAgICAgICIiIgorICAgICAgICBpZiBzcWxpdGUuc3FsaXRlX3ZlcnNpb25faW5mbyA8ICgzLCAyLCAyKToKKyAgICAgICAgICAgICMgVGhpcyB3aWxsIGZhaWwgKGhhbmcpIG9uIGVhcmxpZXIgdmVyc2lvbnMgb2Ygc3FsaXRlLgorICAgICAgICAgICAgIyBEZXRlcm1pbmUgZXhhY3QgdmVyc2lvbiBpdCB3YXMgZml4ZWQuIDMuMi4xIGhhbmdzLgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdChpKSIpCisgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoNSkiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmN1cjIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpKSB2YWx1ZXMgKDUpIikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQorICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQorICAgICAgICAjIE5PIHNlbGYuY29uMi5yb2xsYmFjaygpIEhFUkUhISEKKyAgICAgICAgc2VsZi5jb24xLmNvbW1pdCgpCisKKyAgICBkZWYgQ2hlY2tSb2xsYmFja0N1cnNvckNvbnNpc3RlbmN5KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2tzIGlmIGN1cnNvcnMgb24gdGhlIGNvbm5lY3Rpb24gYXJlIHNldCBpbnRvIGEgInJlc2V0IiBzdGF0ZQorICAgICAgICB3aGVuIGEgcm9sbGJhY2sgaXMgZG9uZSBvbiB0aGUgY29ubmVjdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRlc3QoeCkiKQorICAgICAgICBjdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdCh4KSB2YWx1ZXMgKDUpIikKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCAxIHVuaW9uIHNlbGVjdCAyIHVuaW9uIHNlbGVjdCAzIikKKworICAgICAgICBjb24ucm9sbGJhY2soKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIuZmV0Y2hhbGwoKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJJbnRlcmZhY2VFcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuSW50ZXJmYWNlRXJyb3IsIGU6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiSW50ZXJmYWNlRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByYWlzZWQiKQorCitjbGFzcyBTcGVjaWFsQ29tbWFuZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgc2VsZi5jdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorCisgICAgZGVmIENoZWNrVmFjdXVtKHNlbGYpOgorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdChpKSIpCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaSkgdmFsdWVzICg1KSIpCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInZhY3V1bSIpCisKKyAgICBkZWYgQ2hlY2tEcm9wVGFibGUoc2VsZik6CisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImNyZWF0ZSB0YWJsZSB0ZXN0KGkpIikKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpKSB2YWx1ZXMgKDUpIikKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiZHJvcCB0YWJsZSB0ZXN0IikKKworICAgIGRlZiBDaGVja1ByYWdtYShzZWxmKToKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRlc3QoaSkiKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoNSkiKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJwcmFnbWEgY291bnRfY2hhbmdlcz0xIikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jdXIuY2xvc2UoKQorICAgICAgICBzZWxmLmNvbi5jbG9zZSgpCisKK2RlZiBzdWl0ZSgpOgorICAgIGRlZmF1bHRfc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoVHJhbnNhY3Rpb25UZXN0cywgIkNoZWNrIikKKyAgICBzcGVjaWFsX2NvbW1hbmRfc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoU3BlY2lhbENvbW1hbmRUZXN0cywgIkNoZWNrIikKKyAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKChkZWZhdWx0X3N1aXRlLCBzcGVjaWFsX2NvbW1hbmRfc3VpdGUpKQorCitkZWYgdGVzdCgpOgorICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKCkKKyAgICBydW5uZXIucnVuKHN1aXRlKCkpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdCgpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3NxbGl0ZTMvdGVzdC90eXBlcy5weSBiL2xpYi9weXRob24yLjcvc3FsaXRlMy90ZXN0L3R5cGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YWIzOWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3NxbGl0ZTMvdGVzdC90eXBlcy5weQpAQCAtMCwwICsxLDQxOCBAQAorIy0qLSBjb2Rpbmc6IElTTy04ODU5LTEgLSotCisjIHB5c3FsaXRlMi90ZXN0L3R5cGVzLnB5OiB0ZXN0cyBmb3IgdHlwZSBjb252ZXJzaW9uIGFuZCBkZXRlY3Rpb24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyMgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworIyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorIworIyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyMgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorIyBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisjCisjIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisjICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisjICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorIyAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorIyAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorIyAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisjIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3FsaXRlMyBhcyBzcWxpdGUKK3RyeToKKyAgICBpbXBvcnQgemxpYgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHpsaWIgPSBOb25lCisKKworY2xhc3MgU3FsaXRlVHlwZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgc2VsZi5jdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdChpIGludGVnZXIsIHMgdmFyY2hhciwgZiBudW1iZXIsIGIgYmxvYikiKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmN1ci5jbG9zZSgpCisgICAgICAgIHNlbGYuY29uLmNsb3NlKCkKKworICAgIGRlZiBDaGVja1N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChzKSB2YWx1ZXMgKD8pIiwgKHUi1nN0ZXJyZWljaCIsKSkKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IHMgZnJvbSB0ZXN0IikKKyAgICAgICAgcm93ID0gc2VsZi5jdXIuZmV0Y2hvbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgdSLWc3RlcnJlaWNoIikKKworICAgIGRlZiBDaGVja1NtYWxsSW50KHNlbGYpOgorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoPykiLCAoNDIsKSkKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSB0ZXN0IikKKyAgICAgICAgcm93ID0gc2VsZi5jdXIuZmV0Y2hvbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgNDIpCisKKyAgICBkZWYgQ2hlY2tMYXJnZUludChzZWxmKToKKyAgICAgICAgbnVtID0gMioqNDAKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpKSB2YWx1ZXMgKD8pIiwgKG51bSwpKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgaSBmcm9tIHRlc3QiKQorICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCBudW0pCisKKyAgICBkZWYgQ2hlY2tGbG9hdChzZWxmKToKKyAgICAgICAgdmFsID0gMy4xNAorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGYpIHZhbHVlcyAoPykiLCAodmFsLCkpCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCBmIGZyb20gdGVzdCIpCisgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sIHZhbCkKKworICAgIGRlZiBDaGVja0Jsb2Ioc2VsZik6CisgICAgICAgIHZhbCA9IGJ1ZmZlcigiR3VnbGh1cGYiKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGIpIHZhbHVlcyAoPykiLCAodmFsLCkpCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCBiIGZyb20gdGVzdCIpCisgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sIHZhbCkKKworICAgIGRlZiBDaGVja1VuaWNvZGVFeGVjdXRlKHNlbGYpOgorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKHUic2VsZWN0ICfWc3RlcnJlaWNoJyIpCisgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sIHUi1nN0ZXJyZWljaCIpCisKKyAgICBkZWYgQ2hlY2tOb25VdGY4X0RlZmF1bHQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCA/IiwgKGNocigxNTApLCkpCisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQorICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgQ2hlY2tOb25VdGY4X1RleHRGYWN0b3J5U3RyaW5nKHNlbGYpOgorICAgICAgICBvcmlnX3RleHRfZmFjdG9yeSA9IHNlbGYuY29uLnRleHRfZmFjdG9yeQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNvbi50ZXh0X2ZhY3RvcnkgPSBzdHIKKyAgICAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCA/IiwgKGNocigxNTApLCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmNvbi50ZXh0X2ZhY3RvcnkgPSBvcmlnX3RleHRfZmFjdG9yeQorCisgICAgZGVmIENoZWNrTm9uVXRmOF9UZXh0RmFjdG9yeU9wdGltaXplZFVuaWNvZGUoc2VsZik6CisgICAgICAgIG9yaWdfdGV4dF9mYWN0b3J5ID0gc2VsZi5jb24udGV4dF9mYWN0b3J5CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbi50ZXh0X2ZhY3RvcnkgPSBzcWxpdGUuT3B0aW1pemVkVW5pY29kZQorICAgICAgICAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCA/IiwgKGNocigxNTApLCkpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKKyAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmNvbi50ZXh0X2ZhY3RvcnkgPSBvcmlnX3RleHRfZmFjdG9yeQorCitjbGFzcyBEZWNsVHlwZXNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xhc3MgRm9vOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgX3ZhbCk6CisgICAgICAgICAgICBzZWxmLnZhbCA9IF92YWwKKworICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgRGVjbFR5cGVzVGVzdHMuRm9vKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICAgICBpZiBzZWxmLnZhbCA9PSBvdGhlci52YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBkZWYgX19jb25mb3JtX18oc2VsZiwgcHJvdG9jb2wpOgorICAgICAgICAgICAgaWYgcHJvdG9jb2wgaXMgc3FsaXRlLlByZXBhcmVQcm90b2NvbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWwKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAiPCVzPiIgJSBzZWxmLnZhbAorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIsIGRldGVjdF90eXBlcz1zcWxpdGUuUEFSU0VfREVDTFRZUEVTKQorICAgICAgICBzZWxmLmN1ciA9IHNlbGYuY29uLmN1cnNvcigpCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImNyZWF0ZSB0YWJsZSB0ZXN0KGkgaW50LCBzIHN0ciwgZiBmbG9hdCwgYiBib29sLCB1IHVuaWNvZGUsIGZvbyBmb28sIGJpbiBibG9iLCBuMSBudW1iZXIsIG4yIG51bWJlcig1KSkiKQorCisgICAgICAgICMgb3ZlcnJpZGUgZmxvYXQsIG1ha2UgdGhlbSBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIG51bWJlcgorICAgICAgICBzcWxpdGUuY29udmVydGVyc1siRkxPQVQiXSA9IGxhbWJkYSB4OiA0Ny4yCisKKyAgICAgICAgIyBhbmQgaW1wbGVtZW50IHR3byBjdXN0b20gb25lcworICAgICAgICBzcWxpdGUuY29udmVydGVyc1siQk9PTCJdID0gbGFtYmRhIHg6IGJvb2woaW50KHgpKQorICAgICAgICBzcWxpdGUuY29udmVydGVyc1siRk9PIl0gPSBEZWNsVHlwZXNUZXN0cy5Gb28KKyAgICAgICAgc3FsaXRlLmNvbnZlcnRlcnNbIldST05HIl0gPSBsYW1iZGEgeDogIldST05HIgorICAgICAgICBzcWxpdGUuY29udmVydGVyc1siTlVNQkVSIl0gPSBmbG9hdAorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBkZWwgc3FsaXRlLmNvbnZlcnRlcnNbIkZMT0FUIl0KKyAgICAgICAgZGVsIHNxbGl0ZS5jb252ZXJ0ZXJzWyJCT09MIl0KKyAgICAgICAgZGVsIHNxbGl0ZS5jb252ZXJ0ZXJzWyJGT08iXQorICAgICAgICBkZWwgc3FsaXRlLmNvbnZlcnRlcnNbIk5VTUJFUiJdCisgICAgICAgIHNlbGYuY3VyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5jb24uY2xvc2UoKQorCisgICAgZGVmIENoZWNrU3RyaW5nKHNlbGYpOgorICAgICAgICAjIGRlZmF1bHQKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChzKSB2YWx1ZXMgKD8pIiwgKCJmb28iLCkpCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoJ3NlbGVjdCBzIGFzICJzIFtXUk9OR10iIGZyb20gdGVzdCcpCisgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sICJmb28iKQorCisgICAgZGVmIENoZWNrU21hbGxJbnQoc2VsZik6CisgICAgICAgICMgZGVmYXVsdAorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoPykiLCAoNDIsKSkKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSB0ZXN0IikKKyAgICAgICAgcm93ID0gc2VsZi5jdXIuZmV0Y2hvbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgNDIpCisKKyAgICBkZWYgQ2hlY2tMYXJnZUludChzZWxmKToKKyAgICAgICAgIyBkZWZhdWx0CisgICAgICAgIG51bSA9IDIqKjQwCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaSkgdmFsdWVzICg/KSIsIChudW0sKSkKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IGkgZnJvbSB0ZXN0IikKKyAgICAgICAgcm93ID0gc2VsZi5jdXIuZmV0Y2hvbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgbnVtKQorCisgICAgZGVmIENoZWNrRmxvYXQoc2VsZik6CisgICAgICAgICMgY3VzdG9tCisgICAgICAgIHZhbCA9IDMuMTQKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChmKSB2YWx1ZXMgKD8pIiwgKHZhbCwpKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgZiBmcm9tIHRlc3QiKQorICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCA0Ny4yKQorCisgICAgZGVmIENoZWNrQm9vbChzZWxmKToKKyAgICAgICAgIyBjdXN0b20KKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChiKSB2YWx1ZXMgKD8pIiwgKEZhbHNlLCkpCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCBiIGZyb20gdGVzdCIpCisgICAgICAgIHJvdyA9IHNlbGYuY3VyLmZldGNob25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sIEZhbHNlKQorCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImRlbGV0ZSBmcm9tIHRlc3QiKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGIpIHZhbHVlcyAoPykiLCAoVHJ1ZSwpKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgYiBmcm9tIHRlc3QiKQorICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCBUcnVlKQorCisgICAgZGVmIENoZWNrVW5pY29kZShzZWxmKToKKyAgICAgICAgIyBkZWZhdWx0CisgICAgICAgIHZhbCA9IHUiXHhkNnN0ZXJyZWljaCIKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdCh1KSB2YWx1ZXMgKD8pIiwgKHZhbCwpKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgdSBmcm9tIHRlc3QiKQorICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCB2YWwpCisKKyAgICBkZWYgQ2hlY2tGb28oc2VsZik6CisgICAgICAgIHZhbCA9IERlY2xUeXBlc1Rlc3RzLkZvbygiYmxhIikKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChmb28pIHZhbHVlcyAoPykiLCAodmFsLCkpCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCBmb28gZnJvbSB0ZXN0IikKKyAgICAgICAgcm93ID0gc2VsZi5jdXIuZmV0Y2hvbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgdmFsKQorCisgICAgZGVmIENoZWNrVW5zdXBwb3J0ZWRTZXEoc2VsZik6CisgICAgICAgIGNsYXNzIEJhcjogcGFzcworICAgICAgICB2YWwgPSBCYXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGYpIHZhbHVlcyAoPykiLCAodmFsLCkpCisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBJbnRlcmZhY2VFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuSW50ZXJmYWNlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIEludGVyZmFjZUVycm9yIikKKworICAgIGRlZiBDaGVja1Vuc3VwcG9ydGVkRGljdChzZWxmKToKKyAgICAgICAgY2xhc3MgQmFyOiBwYXNzCisgICAgICAgIHZhbCA9IEJhcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoZikgdmFsdWVzICg6dmFsKSIsIHsidmFsIjogdmFsfSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIEludGVyZmFjZUVycm9yIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5JbnRlcmZhY2VFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gSW50ZXJmYWNlRXJyb3IiKQorCisgICAgZGVmIENoZWNrQmxvYihzZWxmKToKKyAgICAgICAgIyBkZWZhdWx0CisgICAgICAgIHZhbCA9IGJ1ZmZlcigiR3VnbGh1cGYiKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGJpbikgdmFsdWVzICg/KSIsICh2YWwsKSkKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IGJpbiBmcm9tIHRlc3QiKQorICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzBdLCB2YWwpCisKKyAgICBkZWYgQ2hlY2tOdW1iZXIxKHNlbGYpOgorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG4xKSB2YWx1ZXMgKDUpIikKKyAgICAgICAgdmFsdWUgPSBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgbjEgZnJvbSB0ZXN0IikuZmV0Y2hvbmUoKVswXQorICAgICAgICAjIGlmIHRoZSBjb252ZXJ0ZXIgaXMgbm90IHVzZWQsIGl0J3MgYW4gaW50IGluc3RlYWQgb2YgYSBmbG9hdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsdWUpLCBmbG9hdCkKKworICAgIGRlZiBDaGVja051bWJlcjIoc2VsZik6CisgICAgICAgICIiIkNoZWNrcyB3ZXRoZXIgY29udmVydGVyIG5hbWVzIGFyZSBjdXQgb2ZmIGF0ICcoJyBjaGFyYWN0ZXJzIiIiCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QobjIpIHZhbHVlcyAoNSkiKQorICAgICAgICB2YWx1ZSA9IHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCBuMiBmcm9tIHRlc3QiKS5mZXRjaG9uZSgpWzBdCisgICAgICAgICMgaWYgdGhlIGNvbnZlcnRlciBpcyBub3QgdXNlZCwgaXQncyBhbiBpbnQgaW5zdGVhZCBvZiBhIGZsb2F0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2YWx1ZSksIGZsb2F0KQorCitjbGFzcyBDb2xOYW1lc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IiwgZGV0ZWN0X3R5cGVzPXNxbGl0ZS5QQVJTRV9DT0xOQU1FUykKKyAgICAgICAgc2VsZi5jdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdCh4IGZvbykiKQorCisgICAgICAgIHNxbGl0ZS5jb252ZXJ0ZXJzWyJGT08iXSA9IGxhbWJkYSB4OiAiWyVzXSIgJSB4CisgICAgICAgIHNxbGl0ZS5jb252ZXJ0ZXJzWyJCQVIiXSA9IGxhbWJkYSB4OiAiPCVzPiIgJSB4CisgICAgICAgIHNxbGl0ZS5jb252ZXJ0ZXJzWyJFWEMiXSA9IGxhbWJkYSB4OiA1IC8vIDAKKyAgICAgICAgc3FsaXRlLmNvbnZlcnRlcnNbIkIxQjEiXSA9IGxhbWJkYSB4OiAiTUFSS0VSIgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBkZWwgc3FsaXRlLmNvbnZlcnRlcnNbIkZPTyJdCisgICAgICAgIGRlbCBzcWxpdGUuY29udmVydGVyc1siQkFSIl0KKyAgICAgICAgZGVsIHNxbGl0ZS5jb252ZXJ0ZXJzWyJFWEMiXQorICAgICAgICBkZWwgc3FsaXRlLmNvbnZlcnRlcnNbIkIxQjEiXQorICAgICAgICBzZWxmLmN1ci5jbG9zZSgpCisgICAgICAgIHNlbGYuY29uLmNsb3NlKCkKKworICAgIGRlZiBDaGVja0RlY2xUeXBlTm90VXNlZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEFzc3VyZXMgdGhhdCB0aGUgZGVjbGFyZWQgdHlwZSBpcyBub3QgdXNlZCB3aGVuIFBBUlNFX0RFQ0xUWVBFUworICAgICAgICBpcyBub3Qgc2V0LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdCh4KSB2YWx1ZXMgKD8pIiwgKCJ4eHgiLCkpCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCB4IGZyb20gdGVzdCIpCisgICAgICAgIHZhbCA9IHNlbGYuY3VyLmZldGNob25lKClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsICJ4eHgiKQorCisgICAgZGVmIENoZWNrTm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdCh4KSB2YWx1ZXMgKD8pIiwgKE5vbmUsKSkKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IHggZnJvbSB0ZXN0IikKKyAgICAgICAgdmFsID0gc2VsZi5jdXIuZmV0Y2hvbmUoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgTm9uZSkKKworICAgIGRlZiBDaGVja0NvbE5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoeCkgdmFsdWVzICg/KSIsICgieHh4IiwpKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCdzZWxlY3QgeCBhcyAieCBbYmFyXSIgZnJvbSB0ZXN0JykKKyAgICAgICAgdmFsID0gc2VsZi5jdXIuZmV0Y2hvbmUoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgIjx4eHg+IikKKworICAgICAgICAjIENoZWNrIGlmIHRoZSBzdHJpcHBpbmcgb2YgY29sbmFtZXMgd29ya3MuIEV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0CisgICAgICAgICMgd2hpdGVzcGFjZSBzaG91bGQgYmUgc3RyaXBwZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jdXIuZGVzY3JpcHRpb25bMF1bMF0sICJ4IikKKworICAgIGRlZiBDaGVja0Nhc2VJbkNvbnZlcnRlck5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoIiIic2VsZWN0ICdvdGhlcicgYXMgInggW2IxYjFdXCIiIiIpCisgICAgICAgIHZhbCA9IHNlbGYuY3VyLmZldGNob25lKClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsICJNQVJLRVIiKQorCisgICAgZGVmIENoZWNrQ3Vyc29yRGVzY3JpcHRpb25Ob1JvdyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIGN1cnNvci5kZXNjcmlwdGlvbiBzaG91bGQgYXQgbGVhc3QgcHJvdmlkZSB0aGUgY29sdW1uIG5hbWUocyksIGV2ZW4gaWYKKyAgICAgICAgbm8gcm93IHJldHVybmVkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0ICogZnJvbSB0ZXN0IHdoZXJlIDAgPSAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN1ci5kZXNjcmlwdGlvblswXVswXSwgIngiKQorCitjbGFzcyBPYmplY3RBZGFwdGF0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjYXN0KG9iaik6CisgICAgICAgIHJldHVybiBmbG9hdChvYmopCisgICAgY2FzdCA9IHN0YXRpY21ldGhvZChjYXN0KQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzcWxpdGUuYWRhcHRlcnNbaW50XQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNxbGl0ZS5yZWdpc3Rlcl9hZGFwdGVyKGludCwgT2JqZWN0QWRhcHRhdGlvblRlc3RzLmNhc3QpCisgICAgICAgIHNlbGYuY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZGVsIHNxbGl0ZS5hZGFwdGVyc1soaW50LCBzcWxpdGUuUHJlcGFyZVByb3RvY29sKV0KKyAgICAgICAgc2VsZi5jdXIuY2xvc2UoKQorICAgICAgICBzZWxmLmNvbi5jbG9zZSgpCisKKyAgICBkZWYgQ2hlY2tDYXN0ZXJJc1VzZWQoc2VsZik6CisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCA/IiwgKDQsKSkKKyAgICAgICAgdmFsID0gc2VsZi5jdXIuZmV0Y2hvbmUoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsKSwgZmxvYXQpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKK2NsYXNzIEJpbmFyeUNvbnZlcnRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY29udmVydChzKToKKyAgICAgICAgcmV0dXJuIHpsaWIuZGVjb21wcmVzcyhzKQorICAgIGNvbnZlcnQgPSBzdGF0aWNtZXRob2QoY29udmVydCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiLCBkZXRlY3RfdHlwZXM9c3FsaXRlLlBBUlNFX0NPTE5BTUVTKQorICAgICAgICBzcWxpdGUucmVnaXN0ZXJfY29udmVydGVyKCJiaW4iLCBCaW5hcnlDb252ZXJ0ZXJUZXN0cy5jb252ZXJ0KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5jbG9zZSgpCisKKyAgICBkZWYgQ2hlY2tCaW5hcnlJbnB1dEZvckNvbnZlcnRlcihzZWxmKToKKyAgICAgICAgdGVzdGRhdGEgPSAiYWJjZGVmZyIgKiAxMAorICAgICAgICByZXN1bHQgPSBzZWxmLmNvbi5leGVjdXRlKCdzZWxlY3QgPyBhcyAieCBbYmluXSInLCAoYnVmZmVyKHpsaWIuY29tcHJlc3ModGVzdGRhdGEpKSwpKS5mZXRjaG9uZSgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGRhdGEsIHJlc3VsdCkKKworY2xhc3MgRGF0ZVRpbWVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIsIGRldGVjdF90eXBlcz1zcWxpdGUuUEFSU0VfREVDTFRZUEVTKQorICAgICAgICBzZWxmLmN1ciA9IHNlbGYuY29uLmN1cnNvcigpCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImNyZWF0ZSB0YWJsZSB0ZXN0KGQgZGF0ZSwgdHMgdGltZXN0YW1wKSIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY3VyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5jb24uY2xvc2UoKQorCisgICAgZGVmIENoZWNrU3FsaXRlRGF0ZShzZWxmKToKKyAgICAgICAgZCA9IHNxbGl0ZS5EYXRlKDIwMDQsIDIsIDE0KQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGQpIHZhbHVlcyAoPykiLCAoZCwpKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgZCBmcm9tIHRlc3QiKQorICAgICAgICBkMiA9IHNlbGYuY3VyLmZldGNob25lKClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkMikKKworICAgIGRlZiBDaGVja1NxbGl0ZVRpbWVzdGFtcChzZWxmKToKKyAgICAgICAgdHMgPSBzcWxpdGUuVGltZXN0YW1wKDIwMDQsIDIsIDE0LCA3LCAxNSwgMCkKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdCh0cykgdmFsdWVzICg/KSIsICh0cywpKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgdHMgZnJvbSB0ZXN0IikKKyAgICAgICAgdHMyID0gc2VsZi5jdXIuZmV0Y2hvbmUoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLCB0czIpCisKKyAgICBkZWYgQ2hlY2tTcWxUaW1lc3RhbXAoc2VsZik6CisgICAgICAgICMgVGhlIGRhdGUgZnVuY3Rpb25zIGFyZSBvbmx5IGF2YWlsYWJsZSBpbiBTUUxpdGUgdmVyc2lvbiAzLjEgb3IgbGF0ZXIKKyAgICAgICAgaWYgc3FsaXRlLnNxbGl0ZV92ZXJzaW9uX2luZm8gPCAoMywgMSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIFNRTGl0ZSdzIGN1cnJlbnRfdGltZXN0YW1wIHVzZXMgVVRDIHRpbWUsIHdoaWxlIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpIHVzZXMgbG9jYWwgdGltZS4KKyAgICAgICAgbm93ID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdCh0cykgdmFsdWVzIChjdXJyZW50X3RpbWVzdGFtcCkiKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgdHMgZnJvbSB0ZXN0IikKKyAgICAgICAgdHMgPSBzZWxmLmN1ci5mZXRjaG9uZSgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh0cyksIGRhdGV0aW1lLmRhdGV0aW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLnllYXIsIG5vdy55ZWFyKQorCisgICAgZGVmIENoZWNrRGF0ZVRpbWVTdWJTZWNvbmRzKHNlbGYpOgorICAgICAgICB0cyA9IHNxbGl0ZS5UaW1lc3RhbXAoMjAwNCwgMiwgMTQsIDcsIDE1LCAwLCA1MDAwMDApCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QodHMpIHZhbHVlcyAoPykiLCAodHMsKSkKKyAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgic2VsZWN0IHRzIGZyb20gdGVzdCIpCisgICAgICAgIHRzMiA9IHNlbGYuY3VyLmZldGNob25lKClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cywgdHMyKQorCisgICAgZGVmIENoZWNrRGF0ZVRpbWVTdWJTZWNvbmRzRmxvYXRpbmdQb2ludChzZWxmKToKKyAgICAgICAgdHMgPSBzcWxpdGUuVGltZXN0YW1wKDIwMDQsIDIsIDE0LCA3LCAxNSwgMCwgNTEwMjQxKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KHRzKSB2YWx1ZXMgKD8pIiwgKHRzLCkpCisgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCB0cyBmcm9tIHRlc3QiKQorICAgICAgICB0czIgPSBzZWxmLmN1ci5mZXRjaG9uZSgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMsIHRzMikKKworZGVmIHN1aXRlKCk6CisgICAgc3FsaXRlX3R5cGVfc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoU3FsaXRlVHlwZVRlc3RzLCAiQ2hlY2siKQorICAgIGRlY2x0eXBlc190eXBlX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKERlY2xUeXBlc1Rlc3RzLCAiQ2hlY2siKQorICAgIGNvbG5hbWVzX3R5cGVfc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ29sTmFtZXNUZXN0cywgIkNoZWNrIikKKyAgICBhZGFwdGF0aW9uX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKE9iamVjdEFkYXB0YXRpb25UZXN0cywgIkNoZWNrIikKKyAgICBiaW5fc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQmluYXJ5Q29udmVydGVyVGVzdHMsICJDaGVjayIpCisgICAgZGF0ZV9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShEYXRlVGltZVRlc3RzLCAiQ2hlY2siKQorICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoKHNxbGl0ZV90eXBlX3N1aXRlLCBkZWNsdHlwZXNfdHlwZV9zdWl0ZSwgY29sbmFtZXNfdHlwZV9zdWl0ZSwgYWRhcHRhdGlvbl9zdWl0ZSwgYmluX3N1aXRlLCBkYXRlX3N1aXRlKSkKKworZGVmIHRlc3QoKToKKyAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAgcnVubmVyLnJ1bihzdWl0ZSgpKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9zcWxpdGUzL3Rlc3QvdXNlcmZ1bmN0aW9ucy5weSBiL2xpYi9weXRob24yLjcvc3FsaXRlMy90ZXN0L3VzZXJmdW5jdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM0ODEyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvc3FsaXRlMy90ZXN0L3VzZXJmdW5jdGlvbnMucHkKQEAgLTAsMCArMSw0NjcgQEAKKyMtKi0gY29kaW5nOiBJU08tODg1OS0xIC0qLQorIyBweXNxbGl0ZTIvdGVzdC91c2VyZnVuY3Rpb25zLnB5OiB0ZXN0cyBmb3IgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyBhbmQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlcy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorIworIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyMgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworIyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorIworIyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKKyMgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorIyBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisjCisjIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90CisjICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisjICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQorIyAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorIyAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorIyAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisjIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHNxbGl0ZTMgYXMgc3FsaXRlCisKK2RlZiBmdW5jX3JldHVybnRleHQoKToKKyAgICByZXR1cm4gImZvbyIKK2RlZiBmdW5jX3JldHVybnVuaWNvZGUoKToKKyAgICByZXR1cm4gdSJiYXIiCitkZWYgZnVuY19yZXR1cm5pbnQoKToKKyAgICByZXR1cm4gNDIKK2RlZiBmdW5jX3JldHVybmZsb2F0KCk6CisgICAgcmV0dXJuIDMuMTQKK2RlZiBmdW5jX3JldHVybm51bGwoKToKKyAgICByZXR1cm4gTm9uZQorZGVmIGZ1bmNfcmV0dXJuYmxvYigpOgorICAgIHJldHVybiBidWZmZXIoImJsb2IiKQorZGVmIGZ1bmNfcmV0dXJubG9uZ2xvbmcoKToKKyAgICByZXR1cm4gMTw8MzEKK2RlZiBmdW5jX3JhaXNlZXhjZXB0aW9uKCk6CisgICAgNSAvLyAwCisKK2RlZiBmdW5jX2lzc3RyaW5nKHYpOgorICAgIHJldHVybiB0eXBlKHYpIGlzIHVuaWNvZGUKK2RlZiBmdW5jX2lzaW50KHYpOgorICAgIHJldHVybiB0eXBlKHYpIGlzIGludAorZGVmIGZ1bmNfaXNmbG9hdCh2KToKKyAgICByZXR1cm4gdHlwZSh2KSBpcyBmbG9hdAorZGVmIGZ1bmNfaXNub25lKHYpOgorICAgIHJldHVybiB0eXBlKHYpIGlzIHR5cGUoTm9uZSkKK2RlZiBmdW5jX2lzYmxvYih2KToKKyAgICByZXR1cm4gdHlwZSh2KSBpcyBidWZmZXIKK2RlZiBmdW5jX2lzbG9uZ2xvbmcodik6CisgICAgcmV0dXJuIGlzaW5zdGFuY2UodiwgKGludCwgbG9uZykpIGFuZCB2ID49IDE8PDMxCisKK2NsYXNzIEFnZ3JOb1N0ZXA6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZmluYWxpemUoc2VsZik6CisgICAgICAgIHJldHVybiAxCisKK2NsYXNzIEFnZ3JOb0ZpbmFsaXplOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0ZXAoc2VsZiwgeCk6CisgICAgICAgIHBhc3MKKworY2xhc3MgQWdnckV4Y2VwdGlvbkluSW5pdDoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIDUgLy8gMAorCisgICAgZGVmIHN0ZXAoc2VsZiwgeCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBmaW5hbGl6ZShzZWxmKToKKyAgICAgICAgcGFzcworCitjbGFzcyBBZ2dyRXhjZXB0aW9uSW5TdGVwOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0ZXAoc2VsZiwgeCk6CisgICAgICAgIDUgLy8gMAorCisgICAgZGVmIGZpbmFsaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gNDIKKworY2xhc3MgQWdnckV4Y2VwdGlvbkluRmluYWxpemU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RlcChzZWxmLCB4KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGZpbmFsaXplKHNlbGYpOgorICAgICAgICA1IC8vIDAKKworY2xhc3MgQWdnckNoZWNrVHlwZToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYudmFsID0gTm9uZQorCisgICAgZGVmIHN0ZXAoc2VsZiwgd2hpY2hUeXBlLCB2YWwpOgorICAgICAgICB0aGVUeXBlID0geyJzdHIiOiB1bmljb2RlLCAiaW50IjogaW50LCAiZmxvYXQiOiBmbG9hdCwgIk5vbmUiOiB0eXBlKE5vbmUpLCAiYmxvYiI6IGJ1ZmZlcn0KKyAgICAgICAgc2VsZi52YWwgPSBpbnQodGhlVHlwZVt3aGljaFR5cGVdIGlzIHR5cGUodmFsKSkKKworICAgIGRlZiBmaW5hbGl6ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsCisKK2NsYXNzIEFnZ3JTdW06CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnZhbCA9IDAuMAorCisgICAgZGVmIHN0ZXAoc2VsZiwgdmFsKToKKyAgICAgICAgc2VsZi52YWwgKz0gdmFsCisKKyAgICBkZWYgZmluYWxpemUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbAorCitjbGFzcyBGdW5jdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKworICAgICAgICBzZWxmLmNvbi5jcmVhdGVfZnVuY3Rpb24oInJldHVybnRleHQiLCAwLCBmdW5jX3JldHVybnRleHQpCisgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9mdW5jdGlvbigicmV0dXJudW5pY29kZSIsIDAsIGZ1bmNfcmV0dXJudW5pY29kZSkKKyAgICAgICAgc2VsZi5jb24uY3JlYXRlX2Z1bmN0aW9uKCJyZXR1cm5pbnQiLCAwLCBmdW5jX3JldHVybmludCkKKyAgICAgICAgc2VsZi5jb24uY3JlYXRlX2Z1bmN0aW9uKCJyZXR1cm5mbG9hdCIsIDAsIGZ1bmNfcmV0dXJuZmxvYXQpCisgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9mdW5jdGlvbigicmV0dXJubnVsbCIsIDAsIGZ1bmNfcmV0dXJubnVsbCkKKyAgICAgICAgc2VsZi5jb24uY3JlYXRlX2Z1bmN0aW9uKCJyZXR1cm5ibG9iIiwgMCwgZnVuY19yZXR1cm5ibG9iKQorICAgICAgICBzZWxmLmNvbi5jcmVhdGVfZnVuY3Rpb24oInJldHVybmxvbmdsb25nIiwgMCwgZnVuY19yZXR1cm5sb25nbG9uZykKKyAgICAgICAgc2VsZi5jb24uY3JlYXRlX2Z1bmN0aW9uKCJyYWlzZWV4Y2VwdGlvbiIsIDAsIGZ1bmNfcmFpc2VleGNlcHRpb24pCisKKyAgICAgICAgc2VsZi5jb24uY3JlYXRlX2Z1bmN0aW9uKCJpc3N0cmluZyIsIDEsIGZ1bmNfaXNzdHJpbmcpCisgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9mdW5jdGlvbigiaXNpbnQiLCAxLCBmdW5jX2lzaW50KQorICAgICAgICBzZWxmLmNvbi5jcmVhdGVfZnVuY3Rpb24oImlzZmxvYXQiLCAxLCBmdW5jX2lzZmxvYXQpCisgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9mdW5jdGlvbigiaXNub25lIiwgMSwgZnVuY19pc25vbmUpCisgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9mdW5jdGlvbigiaXNibG9iIiwgMSwgZnVuY19pc2Jsb2IpCisgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9mdW5jdGlvbigiaXNsb25nbG9uZyIsIDEsIGZ1bmNfaXNsb25nbG9uZykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jb24uY2xvc2UoKQorCisgICAgZGVmIENoZWNrRnVuY0Vycm9yT25DcmVhdGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9mdW5jdGlvbigiYmxhIiwgLTEwMCwgbGFtYmRhIHg6IDIqeCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQorICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgQ2hlY2tGdW5jUmVmQ291bnQoc2VsZik6CisgICAgICAgIGRlZiBnZXRmdW5jKCk6CisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBmID0gZ2V0ZnVuYygpCisgICAgICAgIGdsb2JhbHMoKVsiZm9vIl0gPSBmCisgICAgICAgICMgc2VsZi5jb24uY3JlYXRlX2Z1bmN0aW9uKCJyZWZ0ZXN0IiwgMCwgZ2V0ZnVuYygpKQorICAgICAgICBzZWxmLmNvbi5jcmVhdGVfZnVuY3Rpb24oInJlZnRlc3QiLCAwLCBmKQorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IHJlZnRlc3QoKSIpCisKKyAgICBkZWYgQ2hlY2tGdW5jUmV0dXJuVGV4dChzZWxmKToKKyAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCByZXR1cm50ZXh0KCkiKQorICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsKSwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsICJmb28iKQorCisgICAgZGVmIENoZWNrRnVuY1JldHVyblVuaWNvZGUoc2VsZik6CisgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgcmV0dXJudW5pY29kZSgpIikKKyAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbCksIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCB1ImJhciIpCisKKyAgICBkZWYgQ2hlY2tGdW5jUmV0dXJuSW50KHNlbGYpOgorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IHJldHVybmludCgpIikKKyAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIDQyKQorCisgICAgZGVmIENoZWNrRnVuY1JldHVybkZsb2F0KHNlbGYpOgorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IHJldHVybmZsb2F0KCkiKQorICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsKSwgZmxvYXQpCisgICAgICAgIGlmIHZhbCA8IDMuMTM5IG9yIHZhbCA+IDMuMTQxOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJ3cm9uZyB2YWx1ZSIpCisKKyAgICBkZWYgQ2hlY2tGdW5jUmV0dXJuTnVsbChzZWxmKToKKyAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCByZXR1cm5udWxsKCkiKQorICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsKSwgdHlwZShOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIE5vbmUpCisKKyAgICBkZWYgQ2hlY2tGdW5jUmV0dXJuQmxvYihzZWxmKToKKyAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCByZXR1cm5ibG9iKCkiKQorICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsKSwgYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgYnVmZmVyKCJibG9iIikpCisKKyAgICBkZWYgQ2hlY2tGdW5jUmV0dXJuTG9uZ0xvbmcoc2VsZik6CisgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgcmV0dXJubG9uZ2xvbmcoKSIpCisgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAxPDwzMSkKKworICAgIGRlZiBDaGVja0Z1bmNFeGNlcHRpb24oc2VsZik6CisgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgcmFpc2VleGNlcHRpb24oKSIpCisgICAgICAgICAgICBjdXIuZmV0Y2hvbmUoKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgT3BlcmF0aW9uYWxFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCAndXNlci1kZWZpbmVkIGZ1bmN0aW9uIHJhaXNlZCBleGNlcHRpb24nKQorCisgICAgZGVmIENoZWNrUGFyYW1TdHJpbmcoc2VsZik6CisgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgaXNzdHJpbmcoPykiLCAoImZvbyIsKSkKKyAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIDEpCisKKyAgICBkZWYgQ2hlY2tQYXJhbUludChzZWxmKToKKyAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBpc2ludCg/KSIsICg0MiwpKQorICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgMSkKKworICAgIGRlZiBDaGVja1BhcmFtRmxvYXQoc2VsZik6CisgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgaXNmbG9hdCg/KSIsICgzLjE0LCkpCisgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAxKQorCisgICAgZGVmIENoZWNrUGFyYW1Ob25lKHNlbGYpOgorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGlzbm9uZSg/KSIsIChOb25lLCkpCisgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAxKQorCisgICAgZGVmIENoZWNrUGFyYW1CbG9iKHNlbGYpOgorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGlzYmxvYig/KSIsIChidWZmZXIoImJsb2IiKSwpKQorICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgMSkKKworICAgIGRlZiBDaGVja1BhcmFtTG9uZ0xvbmcoc2VsZik6CisgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgaXNsb25nbG9uZyg/KSIsICgxPDw0MiwpKQorICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgMSkKKworY2xhc3MgQWdncmVnYXRlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgiIiIKKyAgICAgICAgICAgIGNyZWF0ZSB0YWJsZSB0ZXN0KAorICAgICAgICAgICAgICAgIHQgdGV4dCwKKyAgICAgICAgICAgICAgICBpIGludGVnZXIsCisgICAgICAgICAgICAgICAgZiBmbG9hdCwKKyAgICAgICAgICAgICAgICBuLAorICAgICAgICAgICAgICAgIGIgYmxvYgorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QodCwgaSwgZiwgbiwgYikgdmFsdWVzICg/LCA/LCA/LCA/LCA/KSIsCisgICAgICAgICAgICAoImZvbyIsIDUsIDMuMTQsIE5vbmUsIGJ1ZmZlcigiYmxvYiIpLCkpCisKKyAgICAgICAgc2VsZi5jb24uY3JlYXRlX2FnZ3JlZ2F0ZSgibm9zdGVwIiwgMSwgQWdnck5vU3RlcCkKKyAgICAgICAgc2VsZi5jb24uY3JlYXRlX2FnZ3JlZ2F0ZSgibm9maW5hbGl6ZSIsIDEsIEFnZ3JOb0ZpbmFsaXplKQorICAgICAgICBzZWxmLmNvbi5jcmVhdGVfYWdncmVnYXRlKCJleGNJbml0IiwgMSwgQWdnckV4Y2VwdGlvbkluSW5pdCkKKyAgICAgICAgc2VsZi5jb24uY3JlYXRlX2FnZ3JlZ2F0ZSgiZXhjU3RlcCIsIDEsIEFnZ3JFeGNlcHRpb25JblN0ZXApCisgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9hZ2dyZWdhdGUoImV4Y0ZpbmFsaXplIiwgMSwgQWdnckV4Y2VwdGlvbkluRmluYWxpemUpCisgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9hZ2dyZWdhdGUoImNoZWNrVHlwZSIsIDIsIEFnZ3JDaGVja1R5cGUpCisgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9hZ2dyZWdhdGUoIm15c3VtIiwgMSwgQWdnclN1bSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgI3NlbGYuY3VyLmNsb3NlKCkKKyAgICAgICAgI3NlbGYuY29uLmNsb3NlKCkKKyAgICAgICAgcGFzcworCisgICAgZGVmIENoZWNrQWdnckVycm9yT25DcmVhdGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY29uLmNyZWF0ZV9mdW5jdGlvbigiYmxhIiwgLTEwMCwgQWdnclN1bSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQorICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgQ2hlY2tBZ2dyTm9TdGVwKHNlbGYpOgorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IG5vc3RlcCh0KSBmcm9tIHRlc3QiKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gQXR0cmlidXRlRXJyb3IiKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgIkFnZ3JOb1N0ZXAgaW5zdGFuY2UgaGFzIG5vIGF0dHJpYnV0ZSAnc3RlcCciKQorCisgICAgZGVmIENoZWNrQWdnck5vRmluYWxpemUoc2VsZik6CisgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3Qgbm9maW5hbGl6ZSh0KSBmcm9tIHRlc3QiKQorICAgICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQorICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnZmluYWxpemUnIG1ldGhvZCByYWlzZWQgZXJyb3IiKQorCisgICAgZGVmIENoZWNrQWdnckV4Y2VwdGlvbkluSW5pdChzZWxmKToKKyAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBleGNJbml0KHQpIGZyb20gdGVzdCIpCisgICAgICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCAidXNlci1kZWZpbmVkIGFnZ3JlZ2F0ZSdzICdfX2luaXRfXycgbWV0aG9kIHJhaXNlZCBlcnJvciIpCisKKyAgICBkZWYgQ2hlY2tBZ2dyRXhjZXB0aW9uSW5TdGVwKHNlbGYpOgorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGV4Y1N0ZXAodCkgZnJvbSB0ZXN0IikKKyAgICAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ3N0ZXAnIG1ldGhvZCByYWlzZWQgZXJyb3IiKQorCisgICAgZGVmIENoZWNrQWdnckV4Y2VwdGlvbkluRmluYWxpemUoc2VsZik6CisgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgZXhjRmluYWxpemUodCkgZnJvbSB0ZXN0IikKKyAgICAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ2ZpbmFsaXplJyBtZXRob2QgcmFpc2VkIGVycm9yIikKKworICAgIGRlZiBDaGVja0FnZ3JDaGVja1BhcmFtU3RyKHNlbGYpOgorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGNoZWNrVHlwZSgnc3RyJywgPykiLCAoImZvbyIsKSkKKyAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIDEpCisKKyAgICBkZWYgQ2hlY2tBZ2dyQ2hlY2tQYXJhbUludChzZWxmKToKKyAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBjaGVja1R5cGUoJ2ludCcsID8pIiwgKDQyLCkpCisgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAxKQorCisgICAgZGVmIENoZWNrQWdnckNoZWNrUGFyYW1GbG9hdChzZWxmKToKKyAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBjaGVja1R5cGUoJ2Zsb2F0JywgPykiLCAoMy4xNCwpKQorICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgMSkKKworICAgIGRlZiBDaGVja0FnZ3JDaGVja1BhcmFtTm9uZShzZWxmKToKKyAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBjaGVja1R5cGUoJ05vbmUnLCA/KSIsIChOb25lLCkpCisgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAxKQorCisgICAgZGVmIENoZWNrQWdnckNoZWNrUGFyYW1CbG9iKHNlbGYpOgorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IGNoZWNrVHlwZSgnYmxvYicsID8pIiwgKGJ1ZmZlcigiYmxvYiIpLCkpCisgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAxKQorCisgICAgZGVmIENoZWNrQWdnckNoZWNrQWdnclN1bShzZWxmKToKKyAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKKyAgICAgICAgY3VyLmV4ZWN1dGUoImRlbGV0ZSBmcm9tIHRlc3QiKQorICAgICAgICBjdXIuZXhlY3V0ZW1hbnkoImluc2VydCBpbnRvIHRlc3QoaSkgdmFsdWVzICg/KSIsIFsoMTAsKSwgKDIwLCksICgzMCwpXSkKKyAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBteXN1bShpKSBmcm9tIHRlc3QiKQorICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgNjApCisKK2NsYXNzIEF1dGhvcml6ZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBhdXRob3JpemVyX2NiKGFjdGlvbiwgYXJnMSwgYXJnMiwgZGJuYW1lLCBzb3VyY2UpOgorICAgICAgICBpZiBhY3Rpb24gIT0gc3FsaXRlLlNRTElURV9TRUxFQ1Q6CisgICAgICAgICAgICByZXR1cm4gc3FsaXRlLlNRTElURV9ERU5ZCisgICAgICAgIGlmIGFyZzIgPT0gJ2MyJyBvciBhcmcxID09ICd0Mic6CisgICAgICAgICAgICByZXR1cm4gc3FsaXRlLlNRTElURV9ERU5ZCisgICAgICAgIHJldHVybiBzcWxpdGUuU1FMSVRFX09LCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgc2VsZi5jb24uZXhlY3V0ZXNjcmlwdCgiIiIKKyAgICAgICAgICAgIGNyZWF0ZSB0YWJsZSB0MSAoYzEsIGMyKTsKKyAgICAgICAgICAgIGNyZWF0ZSB0YWJsZSB0MiAoYzEsIGMyKTsKKyAgICAgICAgICAgIGluc2VydCBpbnRvIHQxIChjMSwgYzIpIHZhbHVlcyAoMSwgMik7CisgICAgICAgICAgICBpbnNlcnQgaW50byB0MiAoYzEsIGMyKSB2YWx1ZXMgKDQsIDUpOworICAgICAgICAgICAgIiIiKQorCisgICAgICAgICMgRm9yIG91ciBzZWN1cml0eSB0ZXN0OgorICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgYzIgZnJvbSB0MiIpCisKKyAgICAgICAgc2VsZi5jb24uc2V0X2F1dGhvcml6ZXIoc2VsZi5hdXRob3JpemVyX2NiKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF90YWJsZV9hY2Nlc3Moc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCAqIGZyb20gdDIiKQorICAgICAgICBleGNlcHQgc3FsaXRlLkRhdGFiYXNlRXJyb3IsIGU6CisgICAgICAgICAgICBpZiBub3QgZS5hcmdzWzBdLmVuZHN3aXRoKCJwcm9oaWJpdGVkIik6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ3cm9uZyBleGNlcHRpb24gdGV4dDogJXMiICUgZS5hcmdzWzBdKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIGV4Y2VwdGlvbiBkdWUgdG8gbWlzc2luZyBwcml2aWxlZ2VzIikKKworICAgIGRlZiB0ZXN0X2NvbHVtbl9hY2Nlc3Moc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCBjMiBmcm9tIHQxIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5EYXRhYmFzZUVycm9yLCBlOgorICAgICAgICAgICAgaWYgbm90IGUuYXJnc1swXS5lbmRzd2l0aCgicHJvaGliaXRlZCIpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXhjZXB0aW9uIHRleHQ6ICVzIiAlIGUuYXJnc1swXSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBleGNlcHRpb24gZHVlIHRvIG1pc3NpbmcgcHJpdmlsZWdlcyIpCisKK2NsYXNzIEF1dGhvcml6ZXJSYWlzZUV4Y2VwdGlvblRlc3RzKEF1dGhvcml6ZXJUZXN0cyk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBhdXRob3JpemVyX2NiKGFjdGlvbiwgYXJnMSwgYXJnMiwgZGJuYW1lLCBzb3VyY2UpOgorICAgICAgICBpZiBhY3Rpb24gIT0gc3FsaXRlLlNRTElURV9TRUxFQ1Q6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIGlmIGFyZzIgPT0gJ2MyJyBvciBhcmcxID09ICd0Mic6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHJldHVybiBzcWxpdGUuU1FMSVRFX09LCisKK2NsYXNzIEF1dGhvcml6ZXJJbGxlZ2FsVHlwZVRlc3RzKEF1dGhvcml6ZXJUZXN0cyk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBhdXRob3JpemVyX2NiKGFjdGlvbiwgYXJnMSwgYXJnMiwgZGJuYW1lLCBzb3VyY2UpOgorICAgICAgICBpZiBhY3Rpb24gIT0gc3FsaXRlLlNRTElURV9TRUxFQ1Q6CisgICAgICAgICAgICByZXR1cm4gMC4wCisgICAgICAgIGlmIGFyZzIgPT0gJ2MyJyBvciBhcmcxID09ICd0Mic6CisgICAgICAgICAgICByZXR1cm4gMC4wCisgICAgICAgIHJldHVybiBzcWxpdGUuU1FMSVRFX09LCisKK2NsYXNzIEF1dGhvcml6ZXJMYXJnZUludGVnZXJUZXN0cyhBdXRob3JpemVyVGVzdHMpOgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgYXV0aG9yaXplcl9jYihhY3Rpb24sIGFyZzEsIGFyZzIsIGRibmFtZSwgc291cmNlKToKKyAgICAgICAgaWYgYWN0aW9uICE9IHNxbGl0ZS5TUUxJVEVfU0VMRUNUOgorICAgICAgICAgICAgcmV0dXJuIDIqKjMyCisgICAgICAgIGlmIGFyZzIgPT0gJ2MyJyBvciBhcmcxID09ICd0Mic6CisgICAgICAgICAgICByZXR1cm4gMioqMzIKKyAgICAgICAgcmV0dXJuIHNxbGl0ZS5TUUxJVEVfT0sKKworCitkZWYgc3VpdGUoKToKKyAgICBmdW5jdGlvbl9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShGdW5jdGlvblRlc3RzLCAiQ2hlY2siKQorICAgIGFnZ3JlZ2F0ZV9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShBZ2dyZWdhdGVUZXN0cywgIkNoZWNrIikKKyAgICBhdXRob3JpemVyX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKEF1dGhvcml6ZXJUZXN0cykKKyAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKCgKKyAgICAgICAgICAgIGZ1bmN0aW9uX3N1aXRlLAorICAgICAgICAgICAgYWdncmVnYXRlX3N1aXRlLAorICAgICAgICAgICAgYXV0aG9yaXplcl9zdWl0ZSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1ha2VTdWl0ZShBdXRob3JpemVyUmFpc2VFeGNlcHRpb25UZXN0cyksCisgICAgICAgICAgICB1bml0dGVzdC5tYWtlU3VpdGUoQXV0aG9yaXplcklsbGVnYWxUeXBlVGVzdHMpLAorICAgICAgICAgICAgdW5pdHRlc3QubWFrZVN1aXRlKEF1dGhvcml6ZXJMYXJnZUludGVnZXJUZXN0cyksCisgICAgICAgICkpCisKK2RlZiB0ZXN0KCk6CisgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoKQorICAgIHJ1bm5lci5ydW4oc3VpdGUoKSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC8xODV0ZXN0LmRiIGIvbGliL3B5dGhvbjIuNy90ZXN0LzE4NXRlc3QuZGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjYjVlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC8xODV0ZXN0LmRiCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9TaW5lLTEwMDBIei0zMDBtcy5haWYgYi9saWIvcHl0aG9uMi43L3Rlc3QvU2luZS0xMDAwSHotMzAwbXMuYWlmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMDhmNWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvU2luZS0xMDAwSHotMzAwbXMuYWlmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9fX2luaXRfXy5weSBiL2xpYi9weXRob24yLjcvdGVzdC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTMwNTRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEgQEAKKyMgRHVtbXkgZmlsZSB0byBtYWtlIHRoaXMgZGlyZWN0b3J5IGEgcGFja2FnZS4KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9hdWRpb3Rlc3QuYXUgYi9saWIvcHl0aG9uMi43L3Rlc3QvYXVkaW90ZXN0LmF1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NmIwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvYXVkaW90ZXN0LmF1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9hdXRvdGVzdC5weSBiL2xpYi9weXRob24yLjcvdGVzdC9hdXRvdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWMyMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2F1dG90ZXN0LnB5CkBAIC0wLDAgKzEsNiBAQAorIyBUaGlzIHNob3VsZCBiZSBlcXVpdmFsZW50IHRvIHJ1bm5pbmcgcmVncnRlc3QucHkgZnJvbSB0aGUgY21kbGluZS4KKyMgSXQgY2FuIGJlIGVzcGVjaWFsbHkgaGFuZHkgaWYgeW91J3JlIGluIGFuIGludGVyYWN0aXZlIHNoZWxsLCBlLmcuLAorIyBmcm9tIHRlc3QgaW1wb3J0IGF1dG90ZXN0LgorCitmcm9tIHRlc3QgaW1wb3J0IHJlZ3J0ZXN0CityZWdydGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9iYWRfY29kaW5nLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L2JhZF9jb2RpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcxYjBhOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9iYWRfY29kaW5nLnB5CkBAIC0wLDAgKzEgQEAKKyMgLSotIGNvZGluZzogdWZ0LTggLSotCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvYmFkX2NvZGluZzIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvYmFkX2NvZGluZzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE5MDFiNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9iYWRfY29kaW5nMi5weQpAQCAtMCwwICsxLDIgQEAKK++7vyNjb2Rpbmc6IHV0ZjgKK3ByaW50ICfmiJEnCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvYmFkY2VydC5wZW0gYi9saWIvcHl0aG9uMi43L3Rlc3QvYmFkY2VydC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxOTE0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9iYWRjZXJ0LnBlbQpAQCAtMCwwICsxLDM2IEBACistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCitNSUlDWHdJQkFBS0JnUUM4ZGRyaG0rTHV0QnZqWWNRbG5IMjFQUElzZUoxSlZHMkhNbU4yQ21aazJZdWtPKzlMCitvcGRKaFR2YkdmRWowRFFzMUlFOE0ra1RVeU9tdUtmVnJGTUt3dFZlQ0pwaHJBbmhvejdUWU91TEJTcXQ3bFZICitmaGkvVndvdkVTSmxhQk9wK1dNbmZoY2R1UEVZSFl4LzZjblZhcElrWm5MdDMwenUydW0rRHpBOWpRSURBUUFCCitBb0dCQUswRlpwYUtqNlduSlpOMFJxaGhLK2dndEJXd0JuYzBVL296Z0t6MmoxczNmc1NoWWVpR3RXNkNLNW5VCitEMWRaNXd6aGJHVGhJN0xpT1hEdlJ1Y2M5bjd2VWdpMGFscVBRL1BGb2RQeEFOL2VFWWttWFE3VzJrN3p3c0RBCitJVUswS1Voa3RRYkx1OHFGL204cU04NmJhOXk5LzlZa1h1UWJaM0NPbDVhaFRacmhBa0VBMzAxUDA4Ukt2M0tNCitvWG5HVTJVSFR1SjFNQUQyaE9yUHhqRDQvd3hBLzM5RVdHOWJaY3piSnlnZ0I0Ukh1MEkzTk9TRmpBbTNIUW0wCitBTk91NVFLOW93SkJBTmdPZUxmTk5jRjRwcCtVaWtSRnF4azVoVUxxUkFXelZ4VnJXZTg1RmxQbTBWVm1IYmIvCitsb2lmN21xalU4bzFqVGQvTE03UkQ5ZjJ1c1p5RTJwc2F3OENRUUNOTGhrcFgzS081a0tKbVM5TjdKTVpTYzRqCitvb2c1OHllWU84QkJxS0t6cHVnMExYdVF1bHRZdjJLNHZlYUlPMDRpTDlWTGU1ejlTL1ExamFDSEJCdVhBa0VBCit6OGdqR29pMUFPcDZQQkJMWk5zbmNDdmNWLzBhQysxc2U0SHhUTm8yK2R1S1NEbmJxK2xqcU9NK0U3b2RVK05xCitld3ZJV09HLy9lOGZzc2QwbXEzSHl3SkJBSjhsL2M4R1ZtcnBGVHg4ci9uWjJQeXlqdDNkSDF3aWRvb0RYWVNWCitxNkdiZjQxTGxvNXNZQXRteGRuZFRMQVN1SEtlY2FjVGdaVmh5MEZyeVpwTEtyVT0KKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK0p1c3QgYmFkIGNlcnQgZGF0YQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJQ1h3SUJBQUtCZ1FDOGRkcmhtK0x1dEJ2alljUWxuSDIxUFBJc2VKMUpWRzJITW1OMkNtWmsyWXVrTys5TAorb3BkSmhUdmJHZkVqMERRczFJRThNK2tUVXlPbXVLZlZyRk1Ld3RWZUNKcGhyQW5ob3o3VFlPdUxCU3F0N2xWSAorZmhpL1Z3b3ZFU0psYUJPcCtXTW5maGNkdVBFWUhZeC82Y25WYXBJa1puTHQzMHp1MnVtK0R6QTlqUUlEQVFBQgorQW9HQkFLMEZacGFLajZXbkpaTjBScWhoSytnZ3RCV3dCbmMwVS9vemdLejJqMXMzZnNTaFllaUd0VzZDSzVuVQorRDFkWjV3emhiR1RoSTdMaU9YRHZSdWNjOW43dlVnaTBhbHFQUS9QRm9kUHhBTi9lRVlrbVhRN1cyazd6d3NEQQorSVVLMEtVaGt0UWJMdThxRi9tOHFNODZiYTl5OS85WWtYdVFiWjNDT2w1YWhUWnJoQWtFQTMwMVAwOFJLdjNLTQorb1huR1UyVUhUdUoxTUFEMmhPclB4akQ0L3d4QS8zOUVXRzliWmN6Ykp5Z2dCNFJIdTBJM05PU0ZqQW0zSFFtMAorQU5PdTVRSzlvd0pCQU5nT2VMZk5OY0Y0cHArVWlrUkZxeGs1aFVMcVJBV3pWeFZyV2U4NUZsUG0wVlZtSGJiLworbG9pZjdtcWpVOG8xalRkL0xNN1JEOWYydXNaeUUycHNhdzhDUVFDTkxoa3BYM0tPNWtLSm1TOU43Sk1aU2M0agorb29nNTh5ZVlPOEJCcUtLenB1ZzBMWHVRdWx0WXYySzR2ZWFJTzA0aUw5VkxlNXo5Uy9RMWphQ0hCQnVYQWtFQQorejhnakdvaTFBT3A2UEJCTFpOc25jQ3ZjVi8wYUMrMXNlNEh4VE5vMitkdUtTRG5icStsanFPTStFN29kVStOcQorZXd2SVdPRy8vZThmc3NkMG1xM0h5d0pCQUo4bC9jOEdWbXJwRlR4OHIvbloyUHl5anQzZEgxd2lkb29EWFlTVgorcTZHYmY0MUxsbzVzWUF0bXhkbmRUTEFTdUhLZWNhY1RnWlZoeTBGcnlacExLclU9CistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitKdXN0IGJhZCBjZXJ0IGRhdGEKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9iYWRrZXkucGVtIGIvbGliL3B5dGhvbjIuNy90ZXN0L2JhZGtleS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM4YTk1NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9iYWRrZXkucGVtCkBAIC0wLDAgKzEsNDAgQEAKKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK0JhZCBLZXksIHRob3VnaCB0aGUgY2VydCBzaG91bGQgYmUgT0sKKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNwekNDQWhDZ0F3SUJBZ0lKQVArcVN0djFjSUdOTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUdKTVFzd0NRWUQKK1ZRUUdFd0pWVXpFUk1BOEdBMVVFQ0JNSVJHVnNZWGRoY21VeEV6QVJCZ05WQkFjVENsZHBiRzFwYm1kMGIyNHgKK0l6QWhCZ05WQkFvVEdsQjVkR2h2YmlCVGIyWjBkMkZ5WlNCR2IzVnVaR0YwYVc5dU1Rd3dDZ1lEVlFRTEV3TlQKK1Uwd3hIekFkQmdOVkJBTVRGbk52YldWdFlXTm9hVzVsTG5CNWRHaHZiaTV2Y21jd0hoY05NRGN3T0RJM01UWTEKK05EVXdXaGNOTVRNd01qRTJNVFkxTkRVd1dqQ0JpVEVMTUFrR0ExVUVCaE1DVlZNeEVUQVBCZ05WQkFnVENFUmwKK2JHRjNZWEpsTVJNd0VRWURWUVFIRXdwWGFXeHRhVzVuZEc5dU1TTXdJUVlEVlFRS0V4cFFlWFJvYjI0Z1UyOW0KK2RIZGhjbVVnUm05MWJtUmhkR2x2YmpFTU1Bb0dBMVVFQ3hNRFUxTk1NUjh3SFFZRFZRUURFeFp6YjIxbGJXRmoKK2FHbHVaUzV3ZVhSb2IyNHViM0puTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDOGRkcmgKK20rTHV0QnZqWWNRbG5IMjFQUElzZUoxSlZHMkhNbU4yQ21aazJZdWtPKzlMb3BkSmhUdmJHZkVqMERRczFJRTgKK00ra1RVeU9tdUtmVnJGTUt3dFZlQ0pwaHJBbmhvejdUWU91TEJTcXQ3bFZIZmhpL1Z3b3ZFU0psYUJPcCtXTW4KK2ZoY2R1UEVZSFl4LzZjblZhcElrWm5MdDMwenUydW0rRHpBOWpRSURBUUFCb3hVd0V6QVJCZ2xnaGtnQmh2aEMKK0FRRUVCQU1DQmtBd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQUY0UTVCVnFtQ09MdjFuOGplL0p3OUs2NjlWWGIKKzA4aHlHelFoa2VtRUJZUWQ2ZnpROUEvMVp6SGtKS2IxUDZ5cmVPTFNFaDRLY3hZUHlyTFJDMWxsOG5yNU9sQ3gKK0NNaEtrVG5SNnFCc2ROVjBYdGRVMitOMjVocVcrTWE0WmVxc04vaWlKVkNHTk9aR252UXV2Q0FHV0Y4K0ovZi8KK2lIa0M2Z0dkQkpob2dzND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKy0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KK0JhZCBLZXksIHRob3VnaCB0aGUgY2VydCBzaG91bGQgYmUgT0sKKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNwekNDQWhDZ0F3SUJBZ0lKQVArcVN0djFjSUdOTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUdKTVFzd0NRWUQKK1ZRUUdFd0pWVXpFUk1BOEdBMVVFQ0JNSVJHVnNZWGRoY21VeEV6QVJCZ05WQkFjVENsZHBiRzFwYm1kMGIyNHgKK0l6QWhCZ05WQkFvVEdsQjVkR2h2YmlCVGIyWjBkMkZ5WlNCR2IzVnVaR0YwYVc5dU1Rd3dDZ1lEVlFRTEV3TlQKK1Uwd3hIekFkQmdOVkJBTVRGbk52YldWdFlXTm9hVzVsTG5CNWRHaHZiaTV2Y21jd0hoY05NRGN3T0RJM01UWTEKK05EVXdXaGNOTVRNd01qRTJNVFkxTkRVd1dqQ0JpVEVMTUFrR0ExVUVCaE1DVlZNeEVUQVBCZ05WQkFnVENFUmwKK2JHRjNZWEpsTVJNd0VRWURWUVFIRXdwWGFXeHRhVzVuZEc5dU1TTXdJUVlEVlFRS0V4cFFlWFJvYjI0Z1UyOW0KK2RIZGhjbVVnUm05MWJtUmhkR2x2YmpFTU1Bb0dBMVVFQ3hNRFUxTk1NUjh3SFFZRFZRUURFeFp6YjIxbGJXRmoKK2FHbHVaUzV3ZVhSb2IyNHViM0puTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDOGRkcmgKK20rTHV0QnZqWWNRbG5IMjFQUElzZUoxSlZHMkhNbU4yQ21aazJZdWtPKzlMb3BkSmhUdmJHZkVqMERRczFJRTgKK00ra1RVeU9tdUtmVnJGTUt3dFZlQ0pwaHJBbmhvejdUWU91TEJTcXQ3bFZIZmhpL1Z3b3ZFU0psYUJPcCtXTW4KK2ZoY2R1UEVZSFl4LzZjblZhcElrWm5MdDMwenUydW0rRHpBOWpRSURBUUFCb3hVd0V6QVJCZ2xnaGtnQmh2aEMKK0FRRUVCQU1DQmtBd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQUY0UTVCVnFtQ09MdjFuOGplL0p3OUs2NjlWWGIKKzA4aHlHelFoa2VtRUJZUWQ2ZnpROUEvMVp6SGtKS2IxUDZ5cmVPTFNFaDRLY3hZUHlyTFJDMWxsOG5yNU9sQ3gKK0NNaEtrVG5SNnFCc2ROVjBYdGRVMitOMjVocVcrTWE0WmVxc04vaWlKVkNHTk9aR252UXV2Q0FHV0Y4K0ovZi8KK2lIa0M2Z0dkQkpob2dzND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9iYWRzeW50YXhfZnV0dXJlMy5weSBiL2xpYi9weXRob24yLjcvdGVzdC9iYWRzeW50YXhfZnV0dXJlMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWM4NDE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2JhZHN5bnRheF9mdXR1cmUzLnB5CkBAIC0wLDAgKzEsMTAgQEAKKyIiIlRoaXMgaXMgYSB0ZXN0IiIiCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IG5lc3RlZF9zY29wZXMKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcmVzdGVkX3Nub3BlcworCitkZWYgZih4KToKKyAgICBkZWYgZyh5KToKKyAgICAgICAgcmV0dXJuIHggKyB5CisgICAgcmV0dXJuIGcKKworcmVzdWx0ID0gZigyKSg0KQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2JhZHN5bnRheF9mdXR1cmU0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L2JhZHN5bnRheF9mdXR1cmU0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjRjOTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTQucHkKQEAgLTAsMCArMSwxMCBAQAorIiIiVGhpcyBpcyBhIHRlc3QiIiIKK2ltcG9ydCBfX2Z1dHVyZV9fCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IG5lc3RlZF9zY29wZXMKKworZGVmIGYoeCk6CisgICAgZGVmIGcoeSk6CisgICAgICAgIHJldHVybiB4ICsgeQorICAgIHJldHVybiBnCisKK3Jlc3VsdCA9IGYoMikoNCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9iYWRzeW50YXhfZnV0dXJlNS5weSBiL2xpYi9weXRob24yLjcvdGVzdC9iYWRzeW50YXhfZnV0dXJlNS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTdlNWZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2JhZHN5bnRheF9mdXR1cmU1LnB5CkBAIC0wLDAgKzEsMTIgQEAKKyIiIlRoaXMgaXMgYSB0ZXN0IiIiCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IG5lc3RlZF9zY29wZXMKK2ltcG9ydCBmb28KK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgbmVzdGVkX3Njb3BlcworCisKK2RlZiBmKHgpOgorICAgIGRlZiBnKHkpOgorICAgICAgICByZXR1cm4geCArIHkKKyAgICByZXR1cm4gZworCityZXN1bHQgPSBmKDIpKDQpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTYucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE4YjU1YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9iYWRzeW50YXhfZnV0dXJlNi5weQpAQCAtMCwwICsxLDEwIEBACisiIiJUaGlzIGlzIGEgdGVzdCIiIgorInRoaXMgaXNuJ3QgYSBkb2Mgc3RyaW5nIgorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBuZXN0ZWRfc2NvcGVzCisKK2RlZiBmKHgpOgorICAgIGRlZiBnKHkpOgorICAgICAgICByZXR1cm4geCArIHkKKyAgICByZXR1cm4gZworCityZXN1bHQgPSBmKDIpKDQpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTcucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMxZGIyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9iYWRzeW50YXhfZnV0dXJlNy5weQpAQCAtMCwwICsxLDExIEBACisiIiJUaGlzIGlzIGEgdGVzdCIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IG5lc3RlZF9zY29wZXM7IGltcG9ydCBzdHJpbmc7IGZyb20gX19mdXR1cmVfXyBpbXBvcnQgXAorICAgICBuZXN0ZWRfc2NvcGVzCisKK2RlZiBmKHgpOgorICAgIGRlZiBnKHkpOgorICAgICAgICByZXR1cm4geCArIHkKKyAgICByZXR1cm4gZworCityZXN1bHQgPSBmKDIpKDQpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTgucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE2N2IwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9iYWRzeW50YXhfZnV0dXJlOC5weQpAQCAtMCwwICsxLDEwIEBACisiIiJUaGlzIGlzIGEgdGVzdCIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0ICoKKworZGVmIGYoeCk6CisgICAgZGVmIGcoeSk6CisgICAgICAgIHJldHVybiB4ICsgeQorICAgIHJldHVybiBnCisKK3ByaW50IGYoMikoNCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9iYWRzeW50YXhfZnV0dXJlOS5weSBiL2xpYi9weXRob24yLjcvdGVzdC9iYWRzeW50YXhfZnV0dXJlOS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGNlMzJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2JhZHN5bnRheF9mdXR1cmU5LnB5CkBAIC0wLDAgKzEsMTAgQEAKKyIiIlRoaXMgaXMgYSB0ZXN0IiIiCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgbmVzdGVkX3Njb3BlcywgYnJhY2VzCisKK2RlZiBmKHgpOgorICAgIGRlZiBnKHkpOgorICAgICAgICByZXR1cm4geCArIHkKKyAgICByZXR1cm4gZworCitwcmludCBmKDIpKDQpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvYmFkc3ludGF4X25vY2FyZXQucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvYmFkc3ludGF4X25vY2FyZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlYzllYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9iYWRzeW50YXhfbm9jYXJldC5weQpAQCAtMCwwICsxLDIgQEAKK2RlZiBmKHgpOgorICAgIFt4IGZvciB4IGluIHhdID0geApkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2J1ZmZlcl90ZXN0cy5weSBiL2xpYi9weXRob24yLjcvdGVzdC9idWZmZXJfdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBkOGE1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9idWZmZXJfdGVzdHMucHkKQEAgLTAsMCArMSwyMDYgQEAKKyMgVGVzdHMgdGhhdCB3b3JrIGZvciBib3RoIGJ5dGVzIGFuZCBidWZmZXIgb2JqZWN0cy4KKyMgU2VlIFBFUCAzMTM3LgorCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCisKK2NsYXNzIE1peGluQnl0ZXNCdWZmZXJDb21tb25UZXN0cyhvYmplY3QpOgorICAgICIiIlRlc3RzIHRoYXQgd29yayBmb3IgYm90aCBieXRlcyBhbmQgYnVmZmVyIG9iamVjdHMuCisgICAgU2VlIFBFUCAzMTM3LgorICAgICIiIgorCisgICAgZGVmIG1hcnNoYWwoc2VsZiwgeCk6CisgICAgICAgICIiIkNvbnZlcnQgeCBpbnRvIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGZvciB0aGVzZSB0ZXN0cy4iIiIKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCd0ZXN0IGNsYXNzIG11c3QgcHJvdmlkZSBhIG1hcnNoYWwgbWV0aG9kJykKKworICAgIGRlZiB0ZXN0X2lzbG93ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInJykuaXNsb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYScpLmlzbG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidBJykuaXNsb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ1xuJykuaXNsb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYWJjJykuaXNsb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2FCYycpLmlzbG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ2FiY1xuJykuaXNsb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2FiYycpLmlzbG93ZXIsIDQyKQorCisgICAgZGVmIHRlc3RfaXN1cHBlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYicnKS5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInYScpLmlzdXBwZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ0EnKS5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInXG4nKS5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidBQkMnKS5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInQWJDJykuaXN1cHBlcigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQUJDXG4nKS5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXN1cHBlciwgNDIpCisKKyAgICBkZWYgdGVzdF9pc3RpdGxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJycpLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhJykuaXN0aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQScpLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidcbicpLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ0EgVGl0bGVjYXNlZCBMaW5lJykuaXN0aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQVxuVGl0bGVjYXNlZCBMaW5lJykuaXN0aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInQSBUaXRsZWNhc2VkLCBMaW5lJykuaXN0aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ05vdCBhIGNhcGl0YWxpemVkIFN0cmluZycpLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidOb3RcdGEgVGl0bGVjYXNlIFN0cmluZycpLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidOb3QtLWEgVGl0bGVjYXNlIFN0cmluZycpLmlzdGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidOT1QnKS5pc3RpdGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXN0aXRsZSwgNDIpCisKKyAgICBkZWYgdGVzdF9pc3NwYWNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJycpLmlzc3BhY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhJykuaXNzcGFjZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInICcpLmlzc3BhY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ1x0JykuaXNzcGFjZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInXHInKS5pc3NwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidcbicpLmlzc3BhY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJyBcdFxyXG4nKS5pc3NwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInIFx0XHJcbmEnKS5pc3NwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXNzcGFjZSwgNDIpCisKKyAgICBkZWYgdGVzdF9pc2FscGhhKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJycpLmlzYWxwaGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ2EnKS5pc2FscGhhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidBJykuaXNhbHBoYSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ1xuJykuaXNhbHBoYSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYWJjJykuaXNhbHBoYSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2FCYzEyMycpLmlzYWxwaGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhYmNcbicpLmlzYWxwaGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5pc2FscGhhLCA0MikKKworICAgIGRlZiB0ZXN0X2lzYWxudW0oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInJykuaXNhbG51bSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYXJzaGFsKGInYScpLmlzYWxudW0oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJ0EnKS5pc2FsbnVtKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInXG4nKS5pc2FsbnVtKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYicxMjNhYmM0NTYnKS5pc2FsbnVtKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYidhMWIzYycpLmlzYWxudW0oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYidhQmMwMDAgJykuaXNhbG51bSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJ2FiY1xuJykuaXNhbG51bSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2FiYycpLmlzYWxudW0sIDQyKQorCisgICAgZGVmIHRlc3RfaXNkaWdpdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLm1hcnNoYWwoYicnKS5pc2RpZ2l0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5tYXJzaGFsKGInYScpLmlzZGlnaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWFyc2hhbChiJzAnKS5pc2RpZ2l0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1hcnNoYWwoYicwMTIzNDU2Nzg5JykuaXNkaWdpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubWFyc2hhbChiJzAxMjM0NTY3ODlhJykuaXNkaWdpdCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInYWJjJykuaXNkaWdpdCwgNDIpCisKKyAgICBkZWYgdGVzdF9sb3dlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2hlbGxvJywgc2VsZi5tYXJzaGFsKGInSGVMTG8nKS5sb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInaGVsbG8nLCBzZWxmLm1hcnNoYWwoYidoZWxsbycpLmxvd2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS5sb3dlciwgNDIpCisKKyAgICBkZWYgdGVzdF91cHBlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0hFTExPJywgc2VsZi5tYXJzaGFsKGInSGVMTG8nKS51cHBlcigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInSEVMTE8nLCBzZWxmLm1hcnNoYWwoYidIRUxMTycpLnVwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS51cHBlciwgNDIpCisKKyAgICBkZWYgdGVzdF9jYXBpdGFsaXplKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInIGhlbGxvICcsIHNlbGYubWFyc2hhbChiJyBoZWxsbyAnKS5jYXBpdGFsaXplKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidIZWxsbyAnLCBzZWxmLm1hcnNoYWwoYidIZWxsbyAnKS5jYXBpdGFsaXplKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidIZWxsbyAnLCBzZWxmLm1hcnNoYWwoYidoZWxsbyAnKS5jYXBpdGFsaXplKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidBYWFhJywgc2VsZi5tYXJzaGFsKGInYWFhYScpLmNhcGl0YWxpemUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0FhYWEnLCBzZWxmLm1hcnNoYWwoYidBYUFhJykuY2FwaXRhbGl6ZSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS5jYXBpdGFsaXplLCA0MikKKworICAgIGRlZiB0ZXN0X2xqdXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjICAgICAgICcsIHNlbGYubWFyc2hhbChiJ2FiYycpLmxqdXN0KDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiYyAgICcsIHNlbGYubWFyc2hhbChiJ2FiYycpLmxqdXN0KDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjJywgc2VsZi5tYXJzaGFsKGInYWJjJykubGp1c3QoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmMnLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5sanVzdCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiYyoqKioqKionLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5sanVzdCgxMCwgJyonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5sanVzdCkKKworICAgIGRlZiB0ZXN0X3JqdXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInICAgICAgIGFiYycsIHNlbGYubWFyc2hhbChiJ2FiYycpLnJqdXN0KDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyAgIGFiYycsIHNlbGYubWFyc2hhbChiJ2FiYycpLnJqdXN0KDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjJywgc2VsZi5tYXJzaGFsKGInYWJjJykucmp1c3QoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmMnLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5yanVzdCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyoqKioqKiphYmMnLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5yanVzdCgxMCwgJyonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5yanVzdCkKKworICAgIGRlZiB0ZXN0X2NlbnRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyAgIGFiYyAgICAnLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5jZW50ZXIoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInIGFiYyAgJywgc2VsZi5tYXJzaGFsKGInYWJjJykuY2VudGVyKDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjJywgc2VsZi5tYXJzaGFsKGInYWJjJykuY2VudGVyKDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjJywgc2VsZi5tYXJzaGFsKGInYWJjJykuY2VudGVyKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInKioqYWJjKioqKicsIHNlbGYubWFyc2hhbChiJ2FiYycpLmNlbnRlcigxMCwgJyonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidhYmMnKS5jZW50ZXIpCisKKyAgICBkZWYgdGVzdF9zd2FwY2FzZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2hFbGxPIENvTVB1VEVyUycsCisgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidIZUxMbyBjT21wVXRlUnMnKS5zd2FwY2FzZSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS5zd2FwY2FzZSwgNDIpCisKKyAgICBkZWYgdGVzdF96ZmlsbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzEyMycsIHNlbGYubWFyc2hhbChiJzEyMycpLnpmaWxsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMTIzJywgc2VsZi5tYXJzaGFsKGInMTIzJykuemZpbGwoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicwMTIzJywgc2VsZi5tYXJzaGFsKGInMTIzJykuemZpbGwoNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicrMTIzJywgc2VsZi5tYXJzaGFsKGInKzEyMycpLnpmaWxsKDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInKzEyMycsIHNlbGYubWFyc2hhbChiJysxMjMnKS56ZmlsbCg0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyswMTIzJywgc2VsZi5tYXJzaGFsKGInKzEyMycpLnpmaWxsKDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInLTEyMycsIHNlbGYubWFyc2hhbChiJy0xMjMnKS56ZmlsbCgzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJy0xMjMnLCBzZWxmLm1hcnNoYWwoYictMTIzJykuemZpbGwoNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYictMDEyMycsIHNlbGYubWFyc2hhbChiJy0xMjMnKS56ZmlsbCg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzAwMCcsIHNlbGYubWFyc2hhbChiJycpLnpmaWxsKDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMzQnLCBzZWxmLm1hcnNoYWwoYiczNCcpLnpmaWxsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMDAzNCcsIHNlbGYubWFyc2hhbChiJzM0JykuemZpbGwoNCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYicxMjMnKS56ZmlsbCkKKworICAgIGRlZiB0ZXN0X2V4cGFuZHRhYnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICBkZWZcbmcgICBoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNcclxuYWIgIGRlZlxuZyAgIGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsCisgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJykuZXhwYW5kdGFicyg0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyAgYVxuIGInLCBzZWxmLm1hcnNoYWwoYicgXHRhXG5cdGInKS5leHBhbmR0YWJzKDEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS5leHBhbmR0YWJzLCA0MiwgNDIpCisgICAgICAgICMgVGhpcyB0ZXN0IGlzIG9ubHkgdmFsaWQgd2hlbiBzaXplb2YoaW50KSA9PSBzaXplb2Yodm9pZCopID09IDQuCisgICAgICAgIGlmIHN5cy5tYXhpbnQgPCAoMSA8PCAzMikgYW5kIHN0cnVjdC5jYWxjc2l6ZSgnUCcpID09IDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInXHRhXG5cdGInKS5leHBhbmR0YWJzLCBzeXMubWF4aW50KQorCisgICAgZGVmIHRlc3RfdGl0bGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicgSGVsbG8gJywgc2VsZi5tYXJzaGFsKGInIGhlbGxvICcpLnRpdGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidIZWxsbyAnLCBzZWxmLm1hcnNoYWwoYidoZWxsbyAnKS50aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInSGVsbG8gJywgc2VsZi5tYXJzaGFsKGInSGVsbG8gJykudGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0Zvcm1hdCBUaGlzIEFzIFRpdGxlIFN0cmluZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInZk9yTWFUIHRoSXMgYVMgdGl0TGUgU3RyaW5nJykudGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0Zvcm1hdCxUaGlzLUFzKlRpdGxlO1N0cmluZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInZk9yTWFULHRoSXMtYVMqdGl0TGU7U3RyaW5nJykudGl0bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0dldGludCcsIHNlbGYubWFyc2hhbChiJ2dldEludCcpLnRpdGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS50aXRsZSwgNDIpCisKKyAgICBkZWYgdGVzdF9zcGxpdGxpbmVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2FiYycsIGInZGVmJywgYicnLCBiJ2doaSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xuZGVmXG5ccmdoaScpLnNwbGl0bGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidhYmMnLCBiJ2RlZicsIGInJywgYidnaGknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcbmRlZlxuXHJcbmdoaScpLnNwbGl0bGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidhYmMnLCBiJ2RlZicsIGInZ2hpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXG5kZWZcclxuZ2hpJykuc3BsaXRsaW5lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2FiYycsIGInZGVmJywgYidnaGknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcbmRlZlxyXG5naGlcbicpLnNwbGl0bGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidhYmMnLCBiJ2RlZicsIGInZ2hpJywgYicnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcbmRlZlxyXG5naGlcblxyJykuc3BsaXRsaW5lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJycsIGInYWJjJywgYidkZWYnLCBiJ2doaScsIGInJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInXG5hYmNcbmRlZlxyXG5naGlcblxyJykuc3BsaXRsaW5lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ1xuJywgYidhYmNcbicsIGInZGVmXHJcbicsIGInZ2hpXG4nLCBiJ1xyJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInXG5hYmNcbmRlZlxyXG5naGlcblxyJykuc3BsaXRsaW5lcygxKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubWFyc2hhbChiJ2FiYycpLnNwbGl0bGluZXMsIDQyLCA0MikKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9jZmdwYXJzZXIuMSBiL2xpYi9weXRob24yLjcvdGVzdC9jZmdwYXJzZXIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzg3ZjUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2NmZ3BhcnNlci4xCkBAIC0wLDAgKzEsMiBAQAorW0ZvbyBCYXJdCitmb289bmV3YmFyCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY2hlY2tfc291bmRjYXJkLnZicyBiL2xpYi9weXRob24yLjcvdGVzdC9jaGVja19zb3VuZGNhcmQudmJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMjE4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2hlY2tfc291bmRjYXJkLnZicwpAQCAtMCwwICsxLDEzIEBACityZW0gQ2hlY2sgZm9yIGEgd29ya2luZyBzb3VuZC1jYXJkIC0gZXhpdCB3aXRoIDAgaWYgT0ssIDEgb3RoZXJ3aXNlLgorc2V0IHdtaSA9IEdldE9iamVjdCgid2lubWdtdHM6IikKK3NldCBzY3MgPSB3bWkuSW5zdGFuY2VzT2YoIndpbjMyX3NvdW5kZGV2aWNlIikKK2ZvciBlYWNoIHNjIGluIHNjcworICAgc2V0IHN0YXR1cyA9IHNjLlByb3BlcnRpZXNfKCJTdGF0dXMiKQorICAgd3NjcmlwdC5FY2hvKHNjLlByb3BlcnRpZXNfKCJOYW1lIikgKyAiLyIgKyBzdGF0dXMpCisgICBpZiBzdGF0dXMgPSAiT0siIHRoZW4KKyAgICAgICB3c2NyaXB0LlF1aXQgMCByZW0gbm9ybWFsIGV4aXQKKyAgIGVuZCBpZgorbmV4dAorcmVtIE5vIHNvdW5kIGNhcmQgZm91bmQgLSBleGl0IHdpdGggc3RhdHVzIGNvZGUgb2YgMQord3NjcmlwdC5RdWl0IDEKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9iaWc1LXV0ZjgudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9iaWc1LXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYTUzNGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2JpZzUtdXRmOC50eHQKQEAgLTAsMCArMSw5IEBACivlpoLkvZXlnKggUHl0aG9uIOS4reS9v+eUqOaXouacieeahCBDIGxpYnJhcnk/CivjgIDlnKjos4foqIrnp5HmioDlv6vpgJ/nmbzlsZXnmoTku4rlpKksIOmWi+eZvOWPiua4rOippui7n+mrlOeahOmAn+W6puaYr+S4jeWuueW/veimlueahAor6Kqy6aGMLiDngrrliqDlv6vplovnmbzlj4rmuKzoqabnmoTpgJ/luqYsIOaIkeWAkeS+v+W4uOW4jOacm+iDveWIqeeUqOS4gOS6m+W3sumWi+eZvOWlveeahAorbGlicmFyeSwg5Lim5pyJ5LiA5YCLIGZhc3QgcHJvdG90eXBpbmcg55qEIHByb2dyYW1taW5nIGxhbmd1YWdlIOWPrwor5L6b5L2/55SoLiDnm67liY3mnInoqLHoqLHlpJrlpJrnmoQgbGlicmFyeSDmmK/ku6UgQyDlr6vmiJAsIOiAjCBQeXRob24g5piv5LiA5YCLCitmYXN0IHByb3RvdHlwaW5nIOeahCBwcm9ncmFtbWluZyBsYW5ndWFnZS4g5pWF5oiR5YCR5biM5pyb6IO95bCH5pei5pyJ55qECitDIGxpYnJhcnkg5ou/5YiwIFB5dGhvbiDnmoTnkrDlooPkuK3muKzoqablj4rmlbTlkIguIOWFtuS4reacgOS4u+imgeS5n+aYr+aIkeWAkeaJgAor6KaB6KiO6KuW55qE5ZWP6aGM5bCx5pivOgorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2JpZzUudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9iaWc1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDQyNDk1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9iaWc1LnR4dApAQCAtMCwwICsxLDkgQEAKK6ZwpvOmYiBQeXRob24gpKSoz6XOrEqms6q6IEMgbGlicmFyeT8KK6FApmK46rBUrOyn3qfWs3S1b65pqrqktaTRLCC2fbVvpM60+rjVs27F6aq6s3Sr16xPpKOuZam/tfiqugorvdLDRC4grLClW6fWtn21b6TOtPq41aq6s3Sr1ywgp9qtzKtLsWCnxrHmr+CnUaXOpECox6R3tn21b6ZuqroKK2xpYnJhcnksIKjDprOkQK3TIGZhc3QgcHJvdG90eXBpbmcgqrogcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgpWkKK6jRqM+lzi4gpdirZaazs1yzXKZopmiquiBsaWJyYXJ5IKxPpUggQyC8Z6aoLCCm0yBQeXRob24grE+kQK3TCitmYXN0IHByb3RvdHlwaW5nIKq6IHByb2dyYW1taW5nIGxhbmd1YWdlLiCsR6farcynxrHmr+CxTqxKprOqugorQyBsaWJyYXJ5IK6zqOwgUHl0aG9uIKq6wPS50qSktPq41aTOvuOmWC4gqOSkpLPMpUStbqRdrE+n2q3MqdIKK61usFG916q6sN3DRLROrE86CisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvYmlnNWhrc2NzLXV0ZjgudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9iaWc1aGtzY3MtdXRmOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc0NGNlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvYmlnNWhrc2NzLXV0ZjgudHh0CkBAIC0wLDAgKzEsMiBAQAor8KCEjMSa6bWu572T5rSGCivDisOKzITDqiDDqsOqzIQKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvYmlnNWhrc2NzLnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvYmlnNWhrc2NzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWM0MmIzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9iaWc1aGtzY3MudHh0CkBAIC0wLDAgKzEsMiBAQAoriEWIXIpzi9qN2AoriGaIYoinIIiniKMKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvY3A5NDktdXRmOC50eHQgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2NwOTQ5LXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NTVlMzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2NwOTQ5LXV0ZjgudHh0CkBAIC0wLDAgKzEsOSBAQAor65ig67Cp6rCB7ZWYIO2OsuyLnOy9nOudvAorCivjia/jia/rgqkhISDlm6DkuZ3mnIjtjKjrr6TrppTqtogg4pOh4pOW7ZuAwr/Cv8K/IOq4jeuSmSDik5Trjqgg44mvLiAuCivkup7smIHik5TriqXtmrkgLiAuIC4gLiDshJzsmrjrpIQg646Q7ZWZ5LmZIOWutu2bgCAhICEgIeOFoC7jhaAKK+2dkO2dkO2dkCDjhLHjhLHjhLHimIbjhaBf44WgIOyWtOumqCDtg7jsvbDquJAg646M7J2RIOy5keS5neuTpOS5mSDjia/rk5zquJAKK+yEpOumjCDlrrbtm4AgLiAuIC4gLiDqtbTslaDsiYwg4pOU6raIIOKToeummOOJseq4kCDlm6Dku4Hlt53vpoHkuK3quYzsprwKK+yZgOySgO2bgCAhICEg5Lqe7JiB4pOUIOWutuuKpeq2iCDimIbkuIrqtIAg7JeG64ql6raI64qlIOS6nuuKpeuSiO2bgCDquIDslaDrk7QKK+KToeugpOuTgOS5nSDsi4DtkpTsiLTtm4Ag7Ja066aoIOWboOS7geW3ne+mgeS4reyLgeKRqOuTpOyVnCEhIOOJr+OJr+uCqeKZoSDijJLijJIqCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvY3A5NDkudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9jcDk0OS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1NDlhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvY3A5NDkudHh0CkBAIC0wLDAgKzEsOSBAQAorjGO55rCix88gvIS9w8TdtvMKKworqMCowLOzISEg7NfO+urFxtCS5pBwscUgqN6o08RSoq+ir6KvILHgipYgqNG1syCowC4gLgor5Ky/tajRtMnIwiAuIC4gLiAuILytv++37yC1r8fQ6+AgyqvEUiAhICEgIaTQLqTQCivI5cjlyOUgpKGkoaShodmk0F+k0CC+7pCKIMXLxOKDTyC1rsDAIK9ozvq16evgIKjAteWDTworvLOQaiDKq8RSIC4gLiAuIC4gsby+1ppmIKjRscUgqN6QdKjCg08g7Nfs0vS55fzx6bHuo44KK7/NvqzEUiAhICEg5Ky/tajRIMqrtMmxxSCh2d++sPwgvvi0ybHFtMkg5Ky0ybXYxFIgsdu+1orbCiuo3rfBteDO+iCaw8e0vaTEUiC+7pCKIOzX7NL0ueX88emaxKjvtemd2iEhIKjAqMCzs6K9IKHSodIqCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvZXVjX2ppc3gwMjEzLXV0ZjgudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9ldWNfamlzeDAyMTMtdXRmOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE1NmEyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvZXVjX2ppc3gwMjEzLXV0ZjgudHh0CkBAIC0wLDAgKzEsOCBAQAorUHl0aG9uIOOBrumWi+eZuuOBr+OAgTE5OTAg5bm044GU44KN44GL44KJ6ZaL5aeL44GV44KM44Gm44GE44G+44GZ44CCCivplovnmbrogIXjga4gR3VpZG8gdmFuIFJvc3N1bSDjga/mlZnogrLnlKjjga7jg5fjg63jgrDjg6njg5/jg7PjgrDoqIDoqp7jgIxBQkPjgI3jga7plovnmbrjgavlj4LliqDjgZfjgabjgYTjgb7jgZfjgZ/jgYzjgIFBQkMg44Gv5a6f55So5LiK44Gu55uu55qE44Gr44Gv44GC44G+44KK6YGp44GX44Gm44GE44G+44Gb44KT44Gn44GX44Gf44CCCivjgZPjga7jgZ/jgoHjgIFHdWlkbyDjga/jgojjgorlrp/nlKjnmoTjgarjg5fjg63jgrDjg6njg5/jg7PjgrDoqIDoqp7jga7plovnmbrjgpLplovlp4vjgZfjgIHoi7Hlm70gQkJTIOaUvumAgeOBruOCs+ODoeODh+OCo+eVque1hOOAjOODouODs+ODhuOCoyDjg5HjgqTjgr3jg7PjgI3jga7jg5XjgqHjg7PjgafjgYLjgosgR3VpZG8g44Gv44GT44Gu6KiA6Kqe44KS44CMUHl0aG9u44CN44Go5ZCN44Gl44GR44G+44GX44Gf44CCCivjgZPjga7jgojjgYbjgarog4zmma/jgYvjgonnlJ/jgb7jgozjgZ8gUHl0aG9uIOOBruiogOiqnuioreioiOOBr+OAgeOAjOOCt+ODs+ODl+ODq+OAjeOBp+OAjOe/kuW+l+OBjOWuueaYk+OAjeOBqOOBhOOBhuebruaomeOBq+mHjeeCueOBjOe9ruOBi+OCjOOBpuOBhOOBvuOBmeOAggor5aSa44GP44Gu44K544Kv44Oq44OX44OI57O76KiA6Kqe44Gn44Gv44Om44O844K244Gu55uu5YWI44Gu5Yip5L6/5oCn44KS5YSq5YWI44GX44Gm6Imy44CF44Gq5qmf6IO944KS6KiA6Kqe6KaB57Sg44Go44GX44Gm5Y+W44KK5YWl44KM44KL5aC05ZCI44GM5aSa44GE44Gu44Gn44GZ44GM44CBUHl0aG9uIOOBp+OBr+OBneOBhuOBhOOBo+OBn+Wwj+e0sOW3peOBjOi/veWKoOOBleOCjOOCi+OBk+OBqOOBr+OBguOBvuOCiuOBguOCiuOBvuOBm+OCk+OAggor6KiA6Kqe6Ieq5L2T44Gu5qmf6IO944Gv5pyA5bCP6ZmQ44Gr5oq844GV44GI44CB5b+F6KaB44Gq5qmf6IO944Gv5ouh5by144Oi44K444Ol44O844Or44Go44GX44Gm6L+95Yqg44GZ44KL44CB44Go44GE44GG44Gu44GMIFB5dGhvbiDjga7jg53jg6rjgrfjg7zjgafjgZnjgIIKKwor44OO44GL44KaIOODiOOCmiDjg4jjgq3vqLbvqLkg8KGatPCqjowg6bqA6b2B8KmbsApkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9ldWNfamlzeDAyMTMudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9ldWNfamlzeDAyMTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZTkyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2V1Y19qaXN4MDIxMy50eHQKQEAgLTAsMCArMSw4IEBACitQeXRob24gpM6zq8ivpM+hojE5OTAgx6+ktKTtpKuk6bOru8+ktaTspMakpKTepLmhowors6vIr7zUpM4gR3VpZG8gdmFuIFJvc3N1bSCkz7a1sOnN0aTOpdel7aWwpeml36XzpbC4wLjsodZBQkOh16TOs6vIr6TLu7Kyw6S3pMakpKTepLekv6SsoaJBQkMgpM+8ws3RvuWkzszcxaqky6TPpKKk3qTqxaykt6TGpKSk3qS7pPOkx6S3pL+howorpLOkzqS/pOGhokd1aWRvIKTPpOik6rzCzdHFqqTKpdel7aWwpeml36XzpbC4wLjspM6zq8ivpPKzq7vPpLehorHRufEgQkJTIMr8wfekzqWzpeGlx6WjyNbByKHWpeKl86XGpaMgpdGlpKW9pfOh16TOpdWloaXzpMekoqTrIEd1aWRvIKTPpLOkzrjAuOyk8qHWUHl0aG9uodekyMy+pMWksaTepLekv6GjCiuks6TOpOikpqTKx9i3yqSrpOnAuKTepOykvyBQeXRob24gpM64wLjswN+316TPoaKh1qW3pfOl16Xrodekx6HWvazGwKSszcaw16HXpMikpKSmzNzJuKTLvcXFwKSsw9akq6TspMakpKTepLmhoworwr+kr6TOpbmlr6XqpdelyLfPuMC47KTHpM+l5qG8pbakzszcwOikzs34ytjAraTyzaXA6KS3pMa/p6G5pMq1oce9pPK4wLjszdfBx6TIpLekxrzopOrG/qTspOu+7LnnpKzCv6SkpM6kx6S5pKyholB5dGhvbiCkx6TPpL2kpqSkpMOkv76uutm5qaSsxMmyw6S1pOyk66SzpMikz6SipN6k6qSipOqk3qS7pPOhoworuMC47Lyrws6kzrWhx72kz7rHvq64wqTLsqGktaSooaLJrM3XpMq1oce9pM+zyMSlpeKluKXlobyl66TIpLekxsTJssOkuaTroaKkyKSkpKakzqSsIFB5dGhvbiCkzqXdpeqlt6G8pMekuaGjCisKK6XOpPcgpf4gpcilra+sr9ogz+OP/tggj/7Uj/7oj/zWCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2V1Y19qcC11dGY4LnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvZXVjX2pwLXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NjMyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2V1Y19qcC11dGY4LnR4dApAQCAtMCwwICsxLDcgQEAKK1B5dGhvbiDjga7plovnmbrjga/jgIExOTkwIOW5tOOBlOOCjeOBi+OCiemWi+Wni+OBleOCjOOBpuOBhOOBvuOBmeOAggor6ZaL55m66ICF44GuIEd1aWRvIHZhbiBSb3NzdW0g44Gv5pWZ6IKy55So44Gu44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44CMQUJD44CN44Gu6ZaL55m644Gr5Y+C5Yqg44GX44Gm44GE44G+44GX44Gf44GM44CBQUJDIOOBr+Wun+eUqOS4iuOBruebrueahOOBq+OBr+OBguOBvuOCiumBqeOBl+OBpuOBhOOBvuOBm+OCk+OBp+OBl+OBn+OAggor44GT44Gu44Gf44KB44CBR3VpZG8g44Gv44KI44KK5a6f55So55qE44Gq44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44Gu6ZaL55m644KS6ZaL5aeL44GX44CB6Iux5Zu9IEJCUyDmlL7pgIHjga7jgrPjg6Hjg4fjgqPnlarntYTjgIzjg6Ljg7Pjg4bjgqMg44OR44Kk44K944Oz44CN44Gu44OV44Kh44Oz44Gn44GC44KLIEd1aWRvIOOBr+OBk+OBruiogOiqnuOCkuOAjFB5dGhvbuOAjeOBqOWQjeOBpeOBkeOBvuOBl+OBn+OAggor44GT44Gu44KI44GG44Gq6IOM5pmv44GL44KJ55Sf44G+44KM44GfIFB5dGhvbiDjga7oqIDoqp7oqK3oqIjjga/jgIHjgIzjgrfjg7Pjg5fjg6vjgI3jgafjgIznv5LlvpfjgYzlrrnmmJPjgI3jgajjgYTjgYbnm67mqJnjgavph43ngrnjgYznva7jgYvjgozjgabjgYTjgb7jgZnjgIIKK+WkmuOBj+OBruOCueOCr+ODquODl+ODiOezu+iogOiqnuOBp+OBr+ODpuODvOOCtuOBruebruWFiOOBruWIqeS+v+aAp+OCkuWEquWFiOOBl+OBpuiJsuOAheOBquapn+iDveOCkuiogOiqnuimgee0oOOBqOOBl+OBpuWPluOCiuWFpeOCjOOCi+WgtOWQiOOBjOWkmuOBhOOBruOBp+OBmeOBjOOAgVB5dGhvbiDjgafjga/jgZ3jgYbjgYTjgaPjgZ/lsI/ntLDlt6XjgYzov73liqDjgZXjgozjgovjgZPjgajjga/jgYLjgb7jgorjgYLjgorjgb7jgZvjgpPjgIIKK+iogOiqnuiHquS9k+OBruapn+iDveOBr+acgOWwj+mZkOOBq+aKvOOBleOBiOOAgeW/heimgeOBquapn+iDveOBr+aLoeW8teODouOCuOODpeODvOODq+OBqOOBl+OBpui/veWKoOOBmeOCi+OAgeOBqOOBhOOBhuOBruOBjCBQeXRob24g44Gu44Od44Oq44K344O844Gn44GZ44CCCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvZXVjX2pwLnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvZXVjX2pwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGE2YjVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9ldWNfanAudHh0CkBAIC0wLDAgKzEsNyBAQAorUHl0aG9uIKTOs6vIr6TPoaIxOTkwIMevpLSk7aSrpOmzq7vPpLWk7KTGpKSk3qS5oaMKK7OryK+81KTOIEd1aWRvIHZhbiBSb3NzdW0gpM+2tbDpzdGkzqXXpe2lsKXppd+l86WwuMC47KHWQUJDodekzrOryK+ky7uyssOkt6TGpKSk3qS3pL+krKGiQUJDIKTPvMLN0b7lpM7M3MWqpMukz6SipN6k6sWspLekxqSkpN6ku6TzpMekt6S/oaMKK6SzpM6kv6ThoaJHdWlkbyCkz6TopOq8ws3RxaqkyqXXpe2lsKXppd+l86WwuMC47KTOs6vIr6Tys6u7z6S3oaKx0bnxIEJCUyDK/MH3pM6ls6Xhpcelo8jWwcih1qXipfOlxqWjIKXRpaSlvaXzodekzqXVpaGl86THpKKk6yBHdWlkbyCkz6SzpM64wLjspPKh1lB5dGhvbqHXpMjMvqTFpLGk3qS3pL+howorpLOkzqTopKakysfYt8qkq6TpwLik3qTspL8gUHl0aG9uIKTOuMC47MDft9ekz6Giodalt6Xzpdel66HXpMeh1r2sxsCkrM3GsNeh16TIpKSkpszcybiky73FxcCkrMPWpKuk7KTGpKSk3qS5oaMKK8K/pK+kzqW5pa+l6qXXpci3z7jAuOykx6TPpeahvKW2pM7M3MDopM7N+MrYwK2k8s2lwOikt6TGv6ehuaTKtaHHvaTyuMC47M3XwcekyKS3pMa86KTqxv6k7KTrvuy556Sswr+kpKTOpMekuaSsoaJQeXRob24gpMekz6S9pKakpKTDpL++rrrZuamkrMTJssOktaTspOuks6TIpM+koqTepOqkoqTqpN6ku6TzoaMKK7jAuOy8q8LOpM61oce9pM+6x76uuMKky7KhpLWkqKGiyazN16TKtaHHvaTPs8jEpaXipbil5aG8peukyKS3pMbEybLDpLmk66GipMikpKSmpM6krCBQeXRob24gpM6l3aXqpbehvKTHpLmhoworCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2V1Y19rci11dGY4LnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvZXVjX2tyLXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YzM3NDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2V1Y19rci11dGY4LnR4dApAQCAtMCwwICsxLDcgQEAKK+KXjiDtjIzsnbTsjawoUHl0aG9uKeydgCDrsLDsmrDquLAg7Im96rOgLCDqsJXroKXtlZwg7ZSE66Gc6re4656Y67CNIOyWuOyWtOyeheuLiOuLpC4g7YyM7J207I2s7J2ACivtmqjsnKjsoIHsnbgg6rOg7IiY7KSAIOuNsOydtO2EsCDqtazsobDsmYAg6rCE64uo7ZWY7KeA66eMIO2aqOycqOyggeyduCDqsJ3ssrTsp4DtlqXtlITroZzqt7jrnpjrsI3snYQKK+yngOybkO2VqeuLiOuLpC4g7YyM7J207I2s7J2YIOyasOyVhCjlhKrpm4Up7ZWcIOusuOuyleqzvCDrj5nsoIEg7YOA7J207ZWRLCDqt7jrpqzqs6Ag7J247YSw7ZSE66as7YyFCivtmZjqsr3snYAg7YyM7J207I2s7J2EIOyKpO2BrOumve2MheqzvCDsl6zrn6wg67aE7JW87JeQ7ISc7JmAIOuMgOu2gOu2hOydmCDtlIzrnqvtj7zsl5DshJzsnZgg67mg66W4CivslaDtlIzrpqzsvIDsnbTshZgg6rCc67Cc7J2EIO2VoCDsiJgg7J6I64qUIOydtOyDgeyggeyduCDslrjslrTroZwg66eM65Ok7Ja07KSN64uI64ukLgorCivimIbssqvqsIDrgZ06IOuCoOyVhOudvCDsk5Tsk5Tsk6l+IOuLge2BvCEg65y96riI7JeG7J20IOyghO2ZpeuLiOuLpC4g67eBLiDqt7jrn7DqsbAg7J2O64ukLgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9ldWNfa3IudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9ldWNfa3IudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OGRkMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2V1Y19rci50eHQKQEAgLTAsMCArMSw3IEBACiuh3SDGxMDMveMoUHl0aG9uKcC6ILnov+yx4iC9sbDtLCCwrbfCx9Egx8G3zrHXt6G51iC+8L7uwNS0z7TZLiDGxMDMvePAugoryL/AssD7wM4gsO289sHYILWlwMzFzSCxuMG2v80gsKO03MfPwfa4uCDIv8CywPvAziCwtMO8wfbH4sfBt86x17ehudbAuworwfa/+MfVtM+02S4gxsTAzL3jwMcgv+y+xijp0OS6KcfRILmuuf2w+iC1v8D7IMW4wMzHziwgsde4rrDtIMDOxc3HwbiuxsMKK8ivsObAuiDGxMDMvePAuyC9usWpuLPGw7D6IL+pt68gutC+37+hvK2/zSC067rOutDAxyDHw7enxvu/obytwMcguvy4pQorvtbHw7iuxMnAzLzHILCzud/AuyDH0iC89iDA1rTCIMDMu/PA+8DOIL7wvu63ziC4uLXpvu7B3bTPtNkuCisKK6HZw7mwobOhOiCzr77GtvMgpNSktqTQpNSk1KS2pNCk1L6xfiCk1KSkpNKkt8WtISCk1KSopNGkt7HdvvjAzCDA/KTUpL6kyKSytM+02S4gpNSksqTOpKouILHXt7GwxSCk1KS3pNGktLTZLgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9nYjE4MDMwLXV0ZjgudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9nYjE4MDMwLXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNjBkMjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2diMTgwMzAtdXRmOC50eHQKQEAgLTAsMCArMSwxNSBAQAorUHl0aG9u77yI5rS+5qOu77yJ6K+t6KiA5piv5LiA56eN5Yqf6IO95by65aSn6ICM5a6M5ZaE55qE6YCa55So5Z6L6K6h566X5py656iL5bqP6K6+6K6h6K+t6KiA77yMCivlt7Lnu4/lhbfmnInljYHlpJrlubTnmoTlj5HlsZXljoblj7LvvIzmiJDnhp/kuJTnqLPlrprjgILov5nnp43or63oqIDlhbfmnInpnZ7luLjnroDmjbfogIzmuIXmmbAKK+eahOivreazleeJueeCue+8jOmAguWQiOWujOaIkOWQhOenjemrmOWxguS7u+WKoe+8jOWHoOS5juWPr+S7peWcqOaJgOacieeahOaTjeS9nOezu+e7n+S4rQor6L+Q6KGM44CC6L+Z56eN6K+t6KiA566A5Y2V6ICM5by65aSn77yM6YCC5ZCI5ZCE56eN5Lq65aOr5a2m5Lmg5L2/55So44CC55uu5YmN77yM5Z+65LqO6L+ZCivnp43or63oqIDnmoTnm7jlhbPmioDmnK/mraPlnKjpo57pgJ/nmoTlj5HlsZXvvIznlKjmiLfmlbDph4/mgKXliafmianlpKfvvIznm7jlhbPnmoTotYTmupDpnZ7luLjlpJrjgIIKK+WmguS9leWcqCBQeXRob24g5Lit5L2/55So5pei5pyJ55qEIEMgbGlicmFyeT8KK+OAgOWcqOizh+ioiuenkeaKgOW/q+mAn+eZvOWxleeahOS7iuWkqSwg6ZaL55m85Y+K5ris6Kmm6Luf6auU55qE6YCf5bqm5piv5LiN5a655b+96KaW55qECivoqrLpoYwuIOeCuuWKoOW/q+mWi+eZvOWPiua4rOippueahOmAn+W6piwg5oiR5YCR5L6/5bi45biM5pyb6IO95Yip55So5LiA5Lqb5bey6ZaL55m85aW955qECitsaWJyYXJ5LCDkuKbmnInkuIDlgIsgZmFzdCBwcm90b3R5cGluZyDnmoQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ug5Y+vCivkvpvkvb/nlKguIOebruWJjeacieioseioseWkmuWkmueahCBsaWJyYXJ5IOaYr+S7pSBDIOWvq+aIkCwg6ICMIFB5dGhvbiDmmK/kuIDlgIsKK2Zhc3QgcHJvdG90eXBpbmcg55qEIHByb2dyYW1taW5nIGxhbmd1YWdlLiDmlYXmiJHlgJHluIzmnJvog73lsIfml6LmnInnmoQKK0MgbGlicmFyeSDmi7/liLAgUHl0aG9uIOeahOeSsOWig+S4rea4rOippuWPiuaVtOWQiC4g5YW25Lit5pyA5Li76KaB5Lmf5piv5oiR5YCR5omACivopoHoqI7oq5bnmoTllY/poYzlsLHmmK86CivtjIzsnbTsjazsnYAg6rCV66Cl7ZWcIOq4sOuKpeydhCDsp4Dri4wg67KU7JqpIOy7tO2TqO2EsCDtlITroZzqt7jrnpjrsI0g7Ja47Ja064ukLgorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2diMTgwMzAudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9nYjE4MDMwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDFmNmRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9nYjE4MDMwLnR4dApAQCAtMCwwICsxLDE1IEBACitQeXRob26jqMXJya2jqdPv0dTKx9K71ta5psTcx7+087b4zerJxrXEzajTw9DNvMbL47v6s8zQ8snovMbT79HUo6wKK9LRvq2+39PQyq624MTqtcS3otW5wPrKt6Oss8nK7MfSzsi2qKGj1eLW1tPv0dS+39PQt8ezo7zyvd22+MflzvoKK7XE0++3qMzYteOjrMrKus/N6rPJuPfW1rjfsuPIzs7xo6y8uLr1v8nS1NTay/nT0LXEstnX98+1zbPW0Aor1MvQ0KGj1eLW1tPv0dS88rWltvjHv7Tzo6zKyrrPuPfW1sjLyr/Rp8+wyrnTw6GjxL/HsKOsu/nT2tXiCivW1tPv0dS1xM/gudi8vMr11f3U2rfJy9m1xLei1bmjrNPDu6fK/cG/vLG+58CptPOjrM/gudi1xNfK1LS3x7OjtuChoworyOe6ztTaIFB5dGhvbiDW0Mq508O8yNPQtcQgQyBsaWJyYXJ5PworoaHU2tlZ042/xry8v+zL2bBs1bm1xL3xzOwsIOlfsGy8sJx51Ifcm/N3tcTL2bbIyseyu8jduvbSlbXECivVbu59LiCe6bzTv+zpX7BsvLCcedSHtcTL2bbILCDO0oKDseOzo8+jzfvE3MD708PSu9Cp0tHpX7BsusO1xAorbGlicmFyeSwggUvT0NK7goAgZmFzdCBwcm90b3R5cGluZyC1xCBwcm9ncmFtbWluZyBsYW5ndWFnZSC/yQoruanKudPDLiDEv8ew09DUU9RTtuC24LXEIGxpYnJhcnkgysfS1CBDIIyRs8ksILb4IFB5dGhvbiDKx9K7goAKK2Zhc3QgcHJvdG90eXBpbmcgtcQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuILnKztKCg8+jzfvE3IyivMjT0LXECitDIGxpYnJhcnkgxMO1vSBQeXRob24gtcStaL6z1tCcedSHvLDV+7rPLiDG5NbQ1+7W99Kq0rLKx87SgoPL+Qor0qrTkdWTtcSGlu59vs3KxzoKK4M1xzGDM5ozgzKxMYMzlTEggjfRNoMwjDSDNoQzIII4iTWCOPs2gzOVNSCDM9UxgjmBNSCDMP05gzOGMCCDNNwzgzX2N4M1lzUggzX5NYMwkTmCOIM5gjn8M4Mw8DQggzLrOYMy6zWCOYM5LgorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2diMjMxMi11dGY4LnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvZ2IyMzEyLXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjdkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2diMjMxMi11dGY4LnR4dApAQCAtMCwwICsxLDYgQEAKK1B5dGhvbu+8iOa0vuajru+8ieivreiogOaYr+S4gOenjeWKn+iDveW8uuWkp+iAjOWujOWWhOeahOmAmueUqOWei+iuoeeul+acuueoi+W6j+iuvuiuoeivreiogO+8jAor5bey57uP5YW35pyJ5Y2B5aSa5bm055qE5Y+R5bGV5Y6G5Y+y77yM5oiQ54af5LiU56iz5a6a44CC6L+Z56eN6K+t6KiA5YW35pyJ6Z2e5bi4566A5o236ICM5riF5pmwCivnmoTor63ms5XnibnngrnvvIzpgILlkIjlrozmiJDlkITnp43pq5jlsYLku7vliqHvvIzlh6DkuY7lj6/ku6XlnKjmiYDmnInnmoTmk43kvZzns7vnu5/kuK0KK+i/kOihjOOAgui/meenjeivreiogOeugOWNleiAjOW8uuWkp++8jOmAguWQiOWQhOenjeS6uuWjq+WtpuS5oOS9v+eUqOOAguebruWJje+8jOWfuuS6jui/mQor56eN6K+t6KiA55qE55u45YWz5oqA5pyv5q2j5Zyo6aOe6YCf55qE5Y+R5bGV77yM55So5oi35pWw6YeP5oCl5Ymn5omp5aSn77yM55u45YWz55qE6LWE5rqQ6Z2e5bi45aSa44CCCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvZ2IyMzEyLnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvZ2IyMzEyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTM2YWMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9nYjIzMTIudHh0CkBAIC0wLDAgKzEsNiBAQAorUHl0aG9uo6jFycmto6nT79HUysfSu9bWuabE3Me/tPO2+M3qyca1xM2o08PQzbzGy+O7+rPM0PLJ6LzG0+/R1KOsCivS0b6tvt/T0MqutuDE6rXEt6LVucD6yrejrLPJyuzH0s7Itqiho9Xi1tbT79HUvt/T0LfHs6O88r3dtvjH5c76Ciu1xNPvt6jM2LXjo6zKyrrPzeqzybj31ta437LjyM7O8aOsvLi69b/J0tTU2sv509C1xLLZ1/fPtc2z1tAKK9TL0NCho9Xi1tbT79HUvPK1pbb4x7+086Osysq6z7j31tbIy8q/0afPsMq508Oho8S/x7CjrLv509rV4gor1tbT79HUtcTP4LnYvLzK9dX91Nq3ycvZtcS3otW5o6zTw7unyv3Bv7yxvufAqbTzo6zP4LnYtcTXytS0t8ezo7bgoaMKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9nYmstdXRmOC50eHQgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2diay11dGY4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWJiZDMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9nYmstdXRmOC50eHQKQEAgLTAsMCArMSwxNCBAQAorUHl0aG9u77yI5rS+5qOu77yJ6K+t6KiA5piv5LiA56eN5Yqf6IO95by65aSn6ICM5a6M5ZaE55qE6YCa55So5Z6L6K6h566X5py656iL5bqP6K6+6K6h6K+t6KiA77yMCivlt7Lnu4/lhbfmnInljYHlpJrlubTnmoTlj5HlsZXljoblj7LvvIzmiJDnhp/kuJTnqLPlrprjgILov5nnp43or63oqIDlhbfmnInpnZ7luLjnroDmjbfogIzmuIXmmbAKK+eahOivreazleeJueeCue+8jOmAguWQiOWujOaIkOWQhOenjemrmOWxguS7u+WKoe+8jOWHoOS5juWPr+S7peWcqOaJgOacieeahOaTjeS9nOezu+e7n+S4rQor6L+Q6KGM44CC6L+Z56eN6K+t6KiA566A5Y2V6ICM5by65aSn77yM6YCC5ZCI5ZCE56eN5Lq65aOr5a2m5Lmg5L2/55So44CC55uu5YmN77yM5Z+65LqO6L+ZCivnp43or63oqIDnmoTnm7jlhbPmioDmnK/mraPlnKjpo57pgJ/nmoTlj5HlsZXvvIznlKjmiLfmlbDph4/mgKXliafmianlpKfvvIznm7jlhbPnmoTotYTmupDpnZ7luLjlpJrjgIIKK+WmguS9leWcqCBQeXRob24g5Lit5L2/55So5pei5pyJ55qEIEMgbGlicmFyeT8KK+OAgOWcqOizh+ioiuenkeaKgOW/q+mAn+eZvOWxleeahOS7iuWkqSwg6ZaL55m85Y+K5ris6Kmm6Luf6auU55qE6YCf5bqm5piv5LiN5a655b+96KaW55qECivoqrLpoYwuIOeCuuWKoOW/q+mWi+eZvOWPiua4rOippueahOmAn+W6piwg5oiR5YCR5L6/5bi45biM5pyb6IO95Yip55So5LiA5Lqb5bey6ZaL55m85aW955qECitsaWJyYXJ5LCDkuKbmnInkuIDlgIsgZmFzdCBwcm90b3R5cGluZyDnmoQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ug5Y+vCivkvpvkvb/nlKguIOebruWJjeacieioseioseWkmuWkmueahCBsaWJyYXJ5IOaYr+S7pSBDIOWvq+aIkCwg6ICMIFB5dGhvbiDmmK/kuIDlgIsKK2Zhc3QgcHJvdG90eXBpbmcg55qEIHByb2dyYW1taW5nIGxhbmd1YWdlLiDmlYXmiJHlgJHluIzmnJvog73lsIfml6LmnInnmoQKK0MgbGlicmFyeSDmi7/liLAgUHl0aG9uIOeahOeSsOWig+S4rea4rOippuWPiuaVtOWQiC4g5YW25Lit5pyA5Li76KaB5Lmf5piv5oiR5YCR5omACivopoHoqI7oq5bnmoTllY/poYzlsLHmmK86CisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvZ2JrLnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvZ2JrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Nzg4ZjhhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9nYmsudHh0CkBAIC0wLDAgKzEsMTQgQEAKK1B5dGhvbqOoxcnJraOp0+/R1MrH0rvW1rmmxNzHv7TztvjN6snGtcTNqNPD0M28xsvju/qzzNDyyei8xtPv0dSjrAor0tG+rb7f09DKrrbgxOq1xLei1bnA+sq3o6yzycrsx9LOyLaooaPV4tbW0+/R1L7f09C3x7OjvPK93bb4x+XO+gortcTT77eozNi146Osysq6z83qs8m499bWuN+y48jOzvGjrLy4uvW/ydLU1NrL+dPQtcSy2df3z7XNs9bQCivUy9DQoaPV4tbW0+/R1LzytaW2+Me/tPOjrMrKus+499bWyMvKv9Gnz7DKudPDoaPEv8ewo6y7+dPa1eIKK9bW0+/R1LXEz+C52Ly8yvXV/dTat8nL2bXEt6LVuaOs08O7p8r9wb+8sb7nwKm086Osz+C52LXE18rUtLfHs6O24KGjCivI57rO1NogUHl0aG9uINbQyrnTw7zI09C1xCBDIGxpYnJhcnk/CiuhodTa2VnTjb/GvLy/7MvZsGzVubXEvfHM7Cwg6V+wbLywnHnUh9yb83e1xMvZtsjKx7K7yN269tKVtcQKK9Vu7n0uIJ7pvNO/7OlfsGy8sJx51Ie1xMvZtsgsIM7SgoOx47Ojz6PN+8TcwPvTw9K70KnS0elfsGy6w7XECitsaWJyYXJ5LCCBS9PQ0ruCgCBmYXN0IHByb3RvdHlwaW5nILXEIHByb2dyYW1taW5nIGxhbmd1YWdlIL/JCiu5qcq508MuIMS/x7DT0NRT1FO24LbgtcQgbGlicmFyeSDKx9LUIEMgjJGzySwgtvggUHl0aG9uIMrH0ruCgAorZmFzdCBwcm90b3R5cGluZyC1xCBwcm9ncmFtbWluZyBsYW5ndWFnZS4gucrO0oKDz6PN+8TcjKK8yNPQtcQKK0MgbGlicmFyeSDEw7W9IFB5dGhvbiC1xK1ovrPW0Jx51Ie8sNX7us8uIMbk1tDX7tb30qrSssrHztKCg8v5CivSqtOR1ZO1xIaW7n2+zcrHOgorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2h6LXV0ZjgudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9oei11dGY4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzExNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9oei11dGY4LnR4dApAQCAtMCwwICsxLDIgQEAKK1RoaXMgc2VudGVuY2UgaXMgaW4gQVNDSUkuCitUaGUgbmV4dCBzZW50ZW5jZSBpcyBpbiBHQi7lt7HmiYDkuI3mrLLvvIzli7/mlr3mlrzkurrjgIJCeWUuCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2h6LnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvaHoudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODJkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2h6LnR4dApAQCAtMCwwICsxLDIgQEAKK1RoaXMgc2VudGVuY2UgaXMgaW4gQVNDSUkuCitUaGUgbmV4dCBzZW50ZW5jZSBpcyBpbiBHQi5+ezw6S3kyO1N7IyxOcEopbDZISyEjfn1CeWUuCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfanAtdXRmOC50eHQgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfanAtdXRmOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2MzI1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvaXNvMjAyMl9qcC11dGY4LnR4dApAQCAtMCwwICsxLDcgQEAKK1B5dGhvbiDjga7plovnmbrjga/jgIExOTkwIOW5tOOBlOOCjeOBi+OCiemWi+Wni+OBleOCjOOBpuOBhOOBvuOBmeOAggor6ZaL55m66ICF44GuIEd1aWRvIHZhbiBSb3NzdW0g44Gv5pWZ6IKy55So44Gu44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44CMQUJD44CN44Gu6ZaL55m644Gr5Y+C5Yqg44GX44Gm44GE44G+44GX44Gf44GM44CBQUJDIOOBr+Wun+eUqOS4iuOBruebrueahOOBq+OBr+OBguOBvuOCiumBqeOBl+OBpuOBhOOBvuOBm+OCk+OBp+OBl+OBn+OAggor44GT44Gu44Gf44KB44CBR3VpZG8g44Gv44KI44KK5a6f55So55qE44Gq44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44Gu6ZaL55m644KS6ZaL5aeL44GX44CB6Iux5Zu9IEJCUyDmlL7pgIHjga7jgrPjg6Hjg4fjgqPnlarntYTjgIzjg6Ljg7Pjg4bjgqMg44OR44Kk44K944Oz44CN44Gu44OV44Kh44Oz44Gn44GC44KLIEd1aWRvIOOBr+OBk+OBruiogOiqnuOCkuOAjFB5dGhvbuOAjeOBqOWQjeOBpeOBkeOBvuOBl+OBn+OAggor44GT44Gu44KI44GG44Gq6IOM5pmv44GL44KJ55Sf44G+44KM44GfIFB5dGhvbiDjga7oqIDoqp7oqK3oqIjjga/jgIHjgIzjgrfjg7Pjg5fjg6vjgI3jgafjgIznv5LlvpfjgYzlrrnmmJPjgI3jgajjgYTjgYbnm67mqJnjgavph43ngrnjgYznva7jgYvjgozjgabjgYTjgb7jgZnjgIIKK+WkmuOBj+OBruOCueOCr+ODquODl+ODiOezu+iogOiqnuOBp+OBr+ODpuODvOOCtuOBruebruWFiOOBruWIqeS+v+aAp+OCkuWEquWFiOOBl+OBpuiJsuOAheOBquapn+iDveOCkuiogOiqnuimgee0oOOBqOOBl+OBpuWPluOCiuWFpeOCjOOCi+WgtOWQiOOBjOWkmuOBhOOBruOBp+OBmeOBjOOAgVB5dGhvbiDjgafjga/jgZ3jgYbjgYTjgaPjgZ/lsI/ntLDlt6XjgYzov73liqDjgZXjgozjgovjgZPjgajjga/jgYLjgb7jgorjgYLjgorjgb7jgZvjgpPjgIIKK+iogOiqnuiHquS9k+OBruapn+iDveOBr+acgOWwj+mZkOOBq+aKvOOBleOBiOOAgeW/heimgeOBquapn+iDveOBr+aLoeW8teODouOCuOODpeODvOODq+OBqOOBl+OBpui/veWKoOOBmeOCi+OAgeOBqOOBhOOBhuOBruOBjCBQeXRob24g44Gu44Od44Oq44K344O844Gn44GZ44CCCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvaXNvMjAyMl9qcC50eHQgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfanAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMzk4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfanAudHh0CkBAIC0wLDAgKzEsNyBAQAorUHl0aG9uIBskQiROMytILyRPISIbKEIxOTkwIBskQkcvJDQkbSQrJGkzKztPJDUkbCRGJCQkXiQ5ISMbKEIKKxskQjMrSC88VCROGyhCIEd1aWRvIHZhbiBSb3NzdW0gGyRCJE82NTBpTVEkTiVXJW0lMCVpJV8lcyUwOEA4bCFWGyhCQUJDGyRCIVckTjMrSC8kSzsyMkMkNyRGJCQkXiQ3JD8kLCEiGyhCQUJDIBskQiRPPEJNUT5lJE5MXEUqJEskTyQiJF4kakUsJDckRiQkJF4kOyRzJEckNyQ/ISMbKEIKKxskQiQzJE4kPyRhISIbKEJHdWlkbyAbJEIkTyRoJGo8Qk1RRSokSiVXJW0lMCVpJV8lcyUwOEA4bCROMytILyRyMys7TyQ3ISIxUTlxGyhCIEJCUyAbJEJKfEF3JE4lMyVhJUclI0hWQUghViViJXMlRiUjGyhCIBskQiVRJSQlPSVzIVckTiVVJSElcyRHJCIkaxsoQiBHdWlkbyAbJEIkTyQzJE44QDhsJHIhVhsoQlB5dGhvbhskQiFXJEhMPiRFJDEkXiQ3JD8hIxsoQgorGyRCJDMkTiRoJCYkSkdYN0okKyRpQDgkXiRsJD8bKEIgUHl0aG9uIBskQiROOEA4bEBfN1ckTyEiIVYlNyVzJVclayFXJEchVj0sRkAkLE1GMFchVyRIJCQkJkxcSTgkSz1FRUAkLENWJCskbCRGJCQkXiQ5ISMbKEIKKxskQkI/JC8kTiU5JS8laiVXJUg3TzhAOGwkRyRPJWYhPCU2JE5MXEBoJE5NeEpYQC0kck0lQGgkNyRGPychOSRKNSFHPSRyOEA4bE1XQUckSCQ3JEY8aCRqRn4kbCRrPmw5ZyQsQj8kJCROJEckOSQsISIbKEJQeXRob24gGyRCJEckTyQ9JCYkJCRDJD8+LjpZOSkkLERJMkMkNSRsJGskMyRIJE8kIiReJGokIiRqJF4kOyRzISMbKEIKKxskQjhAOGw8K0JOJE41IUc9JE86Rz4uOEIkSzIhJDUkKCEiSSxNVyRKNSFHPSRPM0hEJSViJTglZSE8JWskSCQ3JEZESTJDJDkkayEiJEgkJCQmJE4kLBsoQiBQeXRob24gGyRCJE4lXSVqJTchPCRHJDkhIxsoQgorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfa3ItdXRmOC50eHQgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfa3ItdXRmOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjOWQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvaXNvMjAyMl9rci11dGY4LnR4dApAQCAtMCwwICsxLDcgQEAKK+KXjiDtjIzsnbTsjawoUHl0aG9uKeydgCDrsLDsmrDquLAg7Im96rOgLCDqsJXroKXtlZwg7ZSE66Gc6re4656Y67CNIOyWuOyWtOyeheuLiOuLpC4g7YyM7J207I2s7J2ACivtmqjsnKjsoIHsnbgg6rOg7IiY7KSAIOuNsOydtO2EsCDqtazsobDsmYAg6rCE64uo7ZWY7KeA66eMIO2aqOycqOyggeyduCDqsJ3ssrTsp4DtlqXtlITroZzqt7jrnpjrsI3snYQKK+yngOybkO2VqeuLiOuLpC4g7YyM7J207I2s7J2YIOyasOyVhCjlhKrpm4Up7ZWcIOusuOuyleqzvCDrj5nsoIEg7YOA7J207ZWRLCDqt7jrpqzqs6Ag7J247YSw7ZSE66as7YyFCivtmZjqsr3snYAg7YyM7J207I2s7J2EIOyKpO2BrOumve2MheqzvCDsl6zrn6wg67aE7JW87JeQ7ISc7JmAIOuMgOu2gOu2hOydmCDtlIzrnqvtj7zsl5DshJzsnZgg67mg66W4CivslaDtlIzrpqzsvIDsnbTshZgg6rCc67Cc7J2EIO2VoCDsiJgg7J6I64qUIOydtOyDgeyggeyduCDslrjslrTroZwg66eM65Ok7Ja07KSN64uI64ukLgorCivimIbssqvqsIDrgZ06IOuCoOyVhOudvCDsk6l+IO2BvCEg6riI7JeG7J20IOyghOuLiOuLpC4g6re465+w6rGwIOuLpC4KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3MvaXNvMjAyMl9rci50eHQgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfa3IudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZWNlMjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2lzbzIwMjJfa3IudHh0CkBAIC0wLDAgKzEsNyBAQAorGyQpQw4hXQ8gDkZEQEw9Yw8oUHl0aG9uKQ5AOg8gDjloP2wxYg8gDj0xMG0PLCAOMC03QkdRDyAOR0E3TjFXNyE5Vg8gDj5wPm5AVDRPNFkPLiAORkRATD1jQDoPCisOSD9AMkB7QE4PIA4wbTx2QVgPIA41JUBMRU0PIA4xOEE2P00PIA4wIzRcR09Bdjg4DyAOSD9AMkB7QE4PIA4wNEM8QXZHYkdBN04xVzchOVZAOw8KKw5Bdj94R1U0TzRZDy4gDkZEQEw9Y0BHDyAOP2w+Rg8oDmlQZDoPKQ5HUQ8gDjkuOX0weg8gDjU/QHsPIA5FOEBMR04PLCAOMVc4LjBtDyAOQE5FTUdBOC5GQw8KKw5ILzBmQDoPIA5GREBMPWNAOw8gDj06RSk4M0ZDMHoPIA4/KTcvDyAOOlA+Xz8hPC0/TQ8gDjRrOk46UEBHDyAOR0M3J0Z7PyE8LUBHDyAOOnw4JQ8KKw4+VkdDOC5ESUBMPEcPIA4wMzlfQDsPIA5HUg8gDjx2DyAOQFY0Qg8gDkBMO3NAe0BODyAOPnA+bjdODyAOODg1aT5uQV00TzRZDy4KKworDiFZQzkwITMhDzogDjMvPkY2cw8gDj4xD34gDkUtDyEgDjFdPnhATA8gDkB8NE80WQ8uIA4xVzcxMEUPIA40WQ8uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2pvaGFiLXV0ZjgudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9qb2hhYi11dGY4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjU1ZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9qb2hhYi11dGY4LnR4dApAQCAtMCwwICsxLDkgQEAKK+uYoOuwqeqwge2VmCDtjrLsi5zsvZzrnbwKKwor44mv44mv64KpISEg5Zug5Lmd5pyI7Yyo66+k66aU6raIIOKToeKTlu2bgMK/wr/CvyDquI3rkpkg4pOU646oIOOJry4gLgor5Lqe7JiB4pOU64ql7Zq5IC4gLiAuIC4g7ISc7Jq466SEIOuOkO2VmeS5mSDlrrbtm4AgISAhICHjhaAu44WgCivtnZDtnZDtnZAg44Sx44Sx44Sx4piG44WgX+OFoCDslrTrpqgg7YO47L2w6riQIOuOjOydkSDsuZHkuZ3rk6TkuZkg44mv65Oc6riQCivshKTrpowg5a627ZuAIC4gLiAuIC4g6rW07JWg7ImMIOKTlOq2iCDik6HrppjjibHquJAg5Zug5LuB5bed76aB5Lit6rmM7Ka8CivsmYDskoDtm4AgISAhIOS6nuyYgeKTlCDlrrbriqXqtogg4piG5LiK6rSAIOyXhuuKpeq2iOuKpSDkup7riqXrkojtm4Ag6riA7JWg65O0Civik6HroKTrk4DkuZ0g7IuA7ZKU7Ii07ZuAIOyWtOumqCDlm6Dku4Hlt53vpoHkuK3si4Hikajrk6TslZwhISDjia/jia/rgqnimaEg4oyS4oySKgorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2pvaGFiLnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3Mvam9oYWIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2Nzc4MWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL2pvaGFiLnR4dApAQCAtMCwwICsxLDkgQEAKK5mxpHeIYtBhIM1cr6HFqZxhCisKK9zA3MCQcyEhIPFn4pzwVcyBo4mfhYqhINze3NPSetmv2a/ZryCLd5bTINzRlYEg3MAuIC4KK+08tXfc0ZN30nMgLiAuIC4gLiCs4baJnqEglWXQYvDgIOA70nogISAhICGHQS6HQQor02HTYdNhIIhBiEGIQdlph0Ffh0EgtOGfmiDIocXBi3oglWG3dyDDl+Kcl2nw4CDcwJdhi3oKK6zpn3og4DvSeiAuIC4gLiAuIIqJtIGuuiDc0YqhINzen4ncwot6IPFn8WL1Se388+mMYbuaCiu1wbKh0nogISAhIO08tXfc0SDgO5N3iqEg2WnqvonFILT0k3eKoZN3IO08k3eWwdJ6IItptIGXegor3N6dYZdB4pwgr4HOoa6h0nogtOGfmiDxZ/Fi9Unt/PPpr4Lc75dptHohISDcwNzAkHPZvSDZYtliKgorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL3NoaWZ0X2ppcy11dGY4LnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3Mvc2hpZnRfamlzLXV0ZjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NjMyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL3NoaWZ0X2ppcy11dGY4LnR4dApAQCAtMCwwICsxLDcgQEAKK1B5dGhvbiDjga7plovnmbrjga/jgIExOTkwIOW5tOOBlOOCjeOBi+OCiemWi+Wni+OBleOCjOOBpuOBhOOBvuOBmeOAggor6ZaL55m66ICF44GuIEd1aWRvIHZhbiBSb3NzdW0g44Gv5pWZ6IKy55So44Gu44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44CMQUJD44CN44Gu6ZaL55m644Gr5Y+C5Yqg44GX44Gm44GE44G+44GX44Gf44GM44CBQUJDIOOBr+Wun+eUqOS4iuOBruebrueahOOBq+OBr+OBguOBvuOCiumBqeOBl+OBpuOBhOOBvuOBm+OCk+OBp+OBl+OBn+OAggor44GT44Gu44Gf44KB44CBR3VpZG8g44Gv44KI44KK5a6f55So55qE44Gq44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44Gu6ZaL55m644KS6ZaL5aeL44GX44CB6Iux5Zu9IEJCUyDmlL7pgIHjga7jgrPjg6Hjg4fjgqPnlarntYTjgIzjg6Ljg7Pjg4bjgqMg44OR44Kk44K944Oz44CN44Gu44OV44Kh44Oz44Gn44GC44KLIEd1aWRvIOOBr+OBk+OBruiogOiqnuOCkuOAjFB5dGhvbuOAjeOBqOWQjeOBpeOBkeOBvuOBl+OBn+OAggor44GT44Gu44KI44GG44Gq6IOM5pmv44GL44KJ55Sf44G+44KM44GfIFB5dGhvbiDjga7oqIDoqp7oqK3oqIjjga/jgIHjgIzjgrfjg7Pjg5fjg6vjgI3jgafjgIznv5LlvpfjgYzlrrnmmJPjgI3jgajjgYTjgYbnm67mqJnjgavph43ngrnjgYznva7jgYvjgozjgabjgYTjgb7jgZnjgIIKK+WkmuOBj+OBruOCueOCr+ODquODl+ODiOezu+iogOiqnuOBp+OBr+ODpuODvOOCtuOBruebruWFiOOBruWIqeS+v+aAp+OCkuWEquWFiOOBl+OBpuiJsuOAheOBquapn+iDveOCkuiogOiqnuimgee0oOOBqOOBl+OBpuWPluOCiuWFpeOCjOOCi+WgtOWQiOOBjOWkmuOBhOOBruOBp+OBmeOBjOOAgVB5dGhvbiDjgafjga/jgZ3jgYbjgYTjgaPjgZ/lsI/ntLDlt6XjgYzov73liqDjgZXjgozjgovjgZPjgajjga/jgYLjgb7jgorjgYLjgorjgb7jgZvjgpPjgIIKK+iogOiqnuiHquS9k+OBruapn+iDveOBr+acgOWwj+mZkOOBq+aKvOOBleOBiOOAgeW/heimgeOBquapn+iDveOBr+aLoeW8teODouOCuOODpeODvOODq+OBqOOBl+OBpui/veWKoOOBmeOCi+OAgeOBqOOBhOOBhuOBruOBjCBQeXRob24g44Gu44Od44Oq44K344O844Gn44GZ44CCCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3Mvc2hpZnRfamlzLnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3Mvc2hpZnRfamlzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGI3NjBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9zaGlmdF9qaXMudHh0CkBAIC0wLDAgKzEsNyBAQAorUHl0aG9uIILMikqUrYLNgUExOTkwIJROgrKC64KpgueKSo5ugrOC6oLEgqKC3IK3gUIKK4pKlK2O0oLMIEd1aWRvIHZhbiBSb3NzdW0ggs2Ls4jnl3CCzIN2g42DT4OJg36Dk4NPjL6M6oF1QUJDgXaCzIpKlK2CyY5RicGCtYLEgqKC3IK1gr2CqoFBQUJDIILNjsCXcI/jgsyW2pNJgsmCzYKggtyC6JNLgrWCxIKigtyCuYLxgsWCtYK9gUIKK4KxgsyCvYLfgUFHdWlkbyCCzYLmguiOwJdwk0mCyIN2g42DT4OJg36Dk4NPjL6M6oLMikqUrYLwikqOboK1gUGJcI2RIEJCUyCV+pGXgsyDUoOBg2aDQpTUkWeBdYOCg5ODZYNCIINwg0ODXIOTgXaCzIN0g0CDk4LFgqCC6SBHdWlkbyCCzYKxgsyMvozqgvCBdVB5dGhvboF2gsaWvILDgq+C3IK1gr2BQgorgrGCzILmgqSCyJR3jGmCqYLnkLaC3ILqgr0gUHl0aG9uIILMjL6M6pDdjHaCzYFBgXWDVoOTg3aDi4F2gsWBdY9Lk76CqpdliNWBdoLGgqKCpJbalVeCyY9kk1+CqpJ1gqmC6oLEgqKC3IK3gUIKK5G9gq2CzINYg06DioN2g2eMboy+jOqCxYLNg4aBW4NVgsyW2pDmgsyXmJXWkKuC8JdEkOaCtYLEkEaBWILIi0CUXILwjL6M6pd2kWaCxoK1gsSO5oLok/yC6oLpj+qNh4Kqkb2CooLMgsWCt4KqgUFQeXRob24ggsWCzYK7gqSCooLBgr2PrI3XjUiCqpLHicGCs4LqgumCsYLGgs2CoILcguiCoILogtyCuYLxgUIKK4y+jOqOqZHMgsyLQJRcgs2NxY+sjMCCyYmfgrOCpoFBlUuXdoLIi0CUXILNimeSo4OCg1eDhYFbg4uCxoK1gsSSx4nBgreC6YFBgsaCooKkgsyCqiBQeXRob24ggsyDfIOKg1aBW4LFgreBQgorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY2prZW5jb2RpbmdzL3NoaWZ0X2ppc3gwMjEzLXV0ZjgudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9zaGlmdF9qaXN4MDIxMy11dGY4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTU2YTJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9zaGlmdF9qaXN4MDIxMy11dGY4LnR4dApAQCAtMCwwICsxLDggQEAKK1B5dGhvbiDjga7plovnmbrjga/jgIExOTkwIOW5tOOBlOOCjeOBi+OCiemWi+Wni+OBleOCjOOBpuOBhOOBvuOBmeOAggor6ZaL55m66ICF44GuIEd1aWRvIHZhbiBSb3NzdW0g44Gv5pWZ6IKy55So44Gu44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44CMQUJD44CN44Gu6ZaL55m644Gr5Y+C5Yqg44GX44Gm44GE44G+44GX44Gf44GM44CBQUJDIOOBr+Wun+eUqOS4iuOBruebrueahOOBq+OBr+OBguOBvuOCiumBqeOBl+OBpuOBhOOBvuOBm+OCk+OBp+OBl+OBn+OAggor44GT44Gu44Gf44KB44CBR3VpZG8g44Gv44KI44KK5a6f55So55qE44Gq44OX44Ot44Kw44Op44Of44Oz44Kw6KiA6Kqe44Gu6ZaL55m644KS6ZaL5aeL44GX44CB6Iux5Zu9IEJCUyDmlL7pgIHjga7jgrPjg6Hjg4fjgqPnlarntYTjgIzjg6Ljg7Pjg4bjgqMg44OR44Kk44K944Oz44CN44Gu44OV44Kh44Oz44Gn44GC44KLIEd1aWRvIOOBr+OBk+OBruiogOiqnuOCkuOAjFB5dGhvbuOAjeOBqOWQjeOBpeOBkeOBvuOBl+OBn+OAggor44GT44Gu44KI44GG44Gq6IOM5pmv44GL44KJ55Sf44G+44KM44GfIFB5dGhvbiDjga7oqIDoqp7oqK3oqIjjga/jgIHjgIzjgrfjg7Pjg5fjg6vjgI3jgafjgIznv5LlvpfjgYzlrrnmmJPjgI3jgajjgYTjgYbnm67mqJnjgavph43ngrnjgYznva7jgYvjgozjgabjgYTjgb7jgZnjgIIKK+WkmuOBj+OBruOCueOCr+ODquODl+ODiOezu+iogOiqnuOBp+OBr+ODpuODvOOCtuOBruebruWFiOOBruWIqeS+v+aAp+OCkuWEquWFiOOBl+OBpuiJsuOAheOBquapn+iDveOCkuiogOiqnuimgee0oOOBqOOBl+OBpuWPluOCiuWFpeOCjOOCi+WgtOWQiOOBjOWkmuOBhOOBruOBp+OBmeOBjOOAgVB5dGhvbiDjgafjga/jgZ3jgYbjgYTjgaPjgZ/lsI/ntLDlt6XjgYzov73liqDjgZXjgozjgovjgZPjgajjga/jgYLjgb7jgorjgYLjgorjgb7jgZvjgpPjgIIKK+iogOiqnuiHquS9k+OBruapn+iDveOBr+acgOWwj+mZkOOBq+aKvOOBleOBiOOAgeW/heimgeOBquapn+iDveOBr+aLoeW8teODouOCuOODpeODvOODq+OBqOOBl+OBpui/veWKoOOBmeOCi+OAgeOBqOOBhOOBhuOBruOBjCBQeXRob24g44Gu44Od44Oq44K344O844Gn44GZ44CCCisKK+ODjuOBi+OCmiDjg4jjgpog44OI44Kt76i276i5IPChmrTwqo6MIOm6gOm9gfCpm7AKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3Mvc2hpZnRfamlzeDAyMTMudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2Nqa2VuY29kaW5ncy9zaGlmdF9qaXN4MDIxMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjOWVmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9jamtlbmNvZGluZ3Mvc2hpZnRfamlzeDAyMTMudHh0CkBAIC0wLDAgKzEsOCBAQAorUHl0aG9uIILMikqUrYLNgUExOTkwIJROgrKC64KpgueKSo5ugrOC6oLEgqKC3IK3gUIKK4pKlK2O0oLMIEd1aWRvIHZhbiBSb3NzdW0ggs2Ls4jnl3CCzIN2g42DT4OJg36Dk4NPjL6M6oF1QUJDgXaCzIpKlK2CyY5RicGCtYLEgqKC3IK1gr2CqoFBQUJDIILNjsCXcI/jgsyW2pNJgsmCzYKggtyC6JNLgrWCxIKigtyCuYLxgsWCtYK9gUIKK4KxgsyCvYLfgUFHdWlkbyCCzYLmguiOwJdwk0mCyIN2g42DT4OJg36Dk4NPjL6M6oLMikqUrYLwikqOboK1gUGJcI2RIEJCUyCV+pGXgsyDUoOBg2aDQpTUkWeBdYOCg5ODZYNCIINwg0ODXIOTgXaCzIN0g0CDk4LFgqCC6SBHdWlkbyCCzYKxgsyMvozqgvCBdVB5dGhvboF2gsaWvILDgq+C3IK1gr2BQgorgrGCzILmgqSCyJR3jGmCqYLnkLaC3ILqgr0gUHl0aG9uIILMjL6M6pDdjHaCzYFBgXWDVoOTg3aDi4F2gsWBdY9Lk76CqpdliNWBdoLGgqKCpJbalVeCyY9kk1+CqpJ1gqmC6oLEgqKC3IK3gUIKK5G9gq2CzINYg06DioN2g2eMboy+jOqCxYLNg4aBW4NVgsyW2pDmgsyXmJXWkKuC8JdEkOaCtYLEkEaBWILIi0CUXILwjL6M6pd2kWaCxoK1gsSO5oLok/yC6oLpj+qNh4Kqkb2CooLMgsWCt4KqgUFQeXRob24ggsWCzYK7gqSCooLBgr2PrI3XjUiCqpLHicGCs4LqgumCsYLGgs2CoILcguiCoILogtyCuYLxgUIKK4y+jOqOqZHMgsyLQJRcgs2NxY+sjMCCyYmfgrOCpoFBlUuXdoLIi0CUXILNimeSo4OCg1eDhYFbg4uCxoK1gsSSx4nBgreC6YFBgsaCooKkgsyCqiBQeXRob24ggsyDfIOKg1aBW4LFgreBQgorCiuDbYL1IIOeIINng0yIS4h5IJiD/NYg/NL85vvUCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY21hdGhfdGVzdGNhc2VzLnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC9jbWF0aF90ZXN0Y2FzZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNTkzODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvY21hdGhfdGVzdGNhc2VzLnR4dApAQCAtMCwwICsxLDIzNjUgQEAKKy0tIFRlc3RjYXNlcyBmb3IgZnVuY3Rpb25zIGluIGNtYXRoLgorLS0KKy0tIEVhY2ggbGluZSB0YWtlcyB0aGUgZm9ybToKKy0tCistLSA8dGVzdGlkPiA8ZnVuY3Rpb24+IDxpbnB1dF92YWx1ZT4gLT4gPG91dHB1dF92YWx1ZT4gPGZsYWdzPgorLS0KKy0tIHdoZXJlOgorLS0KKy0tICAgPHRlc3RpZD4gaXMgYSBzaG9ydCBuYW1lIGlkZW50aWZ5aW5nIHRoZSB0ZXN0LAorLS0KKy0tICAgPGZ1bmN0aW9uPiBpcyB0aGUgZnVuY3Rpb24gdG8gYmUgdGVzdGVkIChleHAsIGNvcywgYXNpbmgsIC4uLiksCistLQorLS0gICA8aW5wdXRfdmFsdWU+IGlzIGEgcGFpciBvZiBmbG9hdHMgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UKKy0tICAgICByZXByZXNlbnRpbmcgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIGEgY29tcGxleCBudW1iZXIsIGFuZAorLS0KKy0tICAgPG91dHB1dF92YWx1ZT4gaXMgdGhlIGV4cGVjdGVkIChpZGVhbCkgb3V0cHV0IHZhbHVlLCBhZ2FpbgorLS0gICAgIHJlcHJlc2VudGVkIGFzIGEgcGFpciBvZiBmbG9hdHMuCistLQorLS0gICA8ZmxhZ3M+IGlzIGEgbGlzdCBvZiB0aGUgZmxvYXRpbmctcG9pbnQgZmxhZ3MgcmVxdWlyZWQgYnkgQzk5CistLQorLS0gVGhlIHBvc3NpYmxlIGZsYWdzIGFyZToKKy0tCistLSAgIGRpdmlkZS1ieS16ZXJvIDogcmFpc2VkIHdoZW4gYSBmaW5pdGUgaW5wdXQgZ2l2ZXMgYQorLS0gICAgIG1hdGhlbWF0aWNhbGx5IGluZmluaXRlIHJlc3VsdC4KKy0tCistLSAgIG92ZXJmbG93IDogcmFpc2VkIHdoZW4gYSBmaW5pdGUgaW5wdXQgZ2l2ZXMgYSBmaW5pdGUgcmVzdWx0IHdob3NlCistLSAgICAgcmVhbCBvciBpbWFnaW5hcnkgcGFydCBpcyB0b28gbGFyZ2UgdG8gZml0IGluIHRoZSB1c3VhbCByYW5nZQorLS0gICAgIG9mIGFuIElFRUUgNzU0IGRvdWJsZS4KKy0tCistLSAgIGludmFsaWQgOiByYWlzZWQgZm9yIGludmFsaWQgaW5wdXRzLgorLS0KKy0tICAgaWdub3JlLXJlYWwtc2lnbiA6IGluZGljYXRlcyB0aGF0IHRoZSBzaWduIG9mIHRoZSByZWFsIHBhcnQgb2YKKy0tICAgICB0aGUgcmVzdWx0IGlzIHVuc3BlY2lmaWVkOyBpZiB0aGUgcmVhbCBwYXJ0IG9mIHRoZSByZXN1bHQgaXMKKy0tICAgICBnaXZlbiBhcyBpbmYsIHRoZW4gYm90aCAtaW5mIGFuZCBpbmYgc2hvdWxkIGJlIGFjY2VwdGVkIGFzCistLSAgICAgY29ycmVjdC4KKy0tCistLSAgIGlnbm9yZS1pbWFnLXNpZ24gOiBpbmRpY2F0ZXMgdGhhdCB0aGUgc2lnbiBvZiB0aGUgaW1hZ2luYXJ5IHBhcnQKKy0tICAgICBvZiB0aGUgcmVzdWx0IGlzIHVuc3BlY2lmaWVkLgorLS0KKy0tIEZsYWdzIG1heSBhcHBlYXIgaW4gYW55IG9yZGVyLgorLS0KKy0tIExpbmVzIGJlZ2lubmluZyB3aXRoICctLScgKGxpa2UgdGhpcyBvbmUpIHN0YXJ0IGEgY29tbWVudCwgYW5kIGFyZQorLS0gaWdub3JlZC4gIEJsYW5rIGxpbmVzLCBvciBsaW5lcyBjb250YWluaW5nIG9ubHkgd2hpdGVzcGFjZSwgYXJlIGFsc28KKy0tIGlnbm9yZWQuCisKKy0tIFRoZSBtYWpvcml0eSBvZiB0aGUgdmFsdWVzIGJlbG93IHdlcmUgY29tcHV0ZWQgd2l0aCB0aGUgaGVscCBvZgorLS0gdmVyc2lvbiAyLjMgb2YgdGhlIE1QRlIgbGlicmFyeSBmb3IgbXVsdGlwbGUtcHJlY2lzaW9uCistLSBmbG9hdGluZy1wb2ludCBjb21wdXRhdGlvbnMgd2l0aCBjb3JyZWN0IHJvdW5kaW5nLiAgQWxsIG91dHB1dAorLS0gdmFsdWVzIGluIHRoaXMgZmlsZSBhcmUgKG1vZHVsbyB5ZXQtdG8tYmUtZGlzY292ZXJlZCBidWdzKQorLS0gY29ycmVjdGx5IHJvdW5kZWQsIHByb3ZpZGVkIHRoYXQgZWFjaCBpbnB1dCBhbmQgb3V0cHV0IGRlY2ltYWwKKy0tIGZsb2F0aW5nLXBvaW50IHZhbHVlIGJlbG93IGlzIGludGVycHJldGVkIGFzIGEgcmVwcmVzZW50YXRpb24gb2YKKy0tIHRoZSBjb3JyZXNwb25kaW5nIG5lYXJlc3QgSUVFRSA3NTQgZG91YmxlLXByZWNpc2lvbiB2YWx1ZS4gIFNlZSB0aGUKKy0tIE1QRlIgaG9tZXBhZ2UgYXQgaHR0cDovL3d3dy5tcGZyLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKy0tIE1QRlIgcHJvamVjdC4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gYWNvczogSW52ZXJzZSBjb3NpbmUgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIHplcm9zCithY29zMDAwMCBhY29zIDAuMCAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2Fjb3MwMDAxIGFjb3MgMC4wIC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYWNvczAwMDIgYWNvcyAtMC4wIDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTAuMAorYWNvczAwMDMgYWNvcyAtMC4wIC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorCistLSBicmFuY2ggcG9pbnRzOiArLy0xCithY29zMDAxMCBhY29zIDEuMCAwLjAgLT4gMC4wIC0wLjAKK2Fjb3MwMDExIGFjb3MgMS4wIC0wLjAgLT4gMC4wIDAuMAorYWNvczAwMTIgYWNvcyAtMS4wIDAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgLTAuMAorYWNvczAwMTMgYWNvcyAtMS4wIC0wLjAgLT4gMy4xNDE1OTI2NTM1ODk3OTMxIDAuMAorCistLSB2YWx1ZXMgYWxvbmcgYm90aCBzaWRlcyBvZiByZWFsIGF4aXMKK2Fjb3MwMDIwIGFjb3MgLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTAuMAorYWNvczAwMjEgYWNvcyAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithY29zMDAyMiBhY29zIC0xZS0zMDUgMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCithY29zMDAyMyBhY29zIC0xZS0zMDUgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithY29zMDAyNCBhY29zIC0xZS0xNTAgMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCithY29zMDAyNSBhY29zIC0xZS0xNTAgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithY29zMDAyNiBhY29zIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjggLTAuMAorYWNvczAwMjcgYWNvcyAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2OCAwLjAKK2Fjb3MwMDI4IGFjb3MgLTAuMDAxIDAuMCAtPiAxLjU3MTc5NjMyNjk2MTU2MzQgLTAuMAorYWNvczAwMjkgYWNvcyAtMC4wMDEgLTAuMCAtPiAxLjU3MTc5NjMyNjk2MTU2MzQgMC4wCithY29zMDAzMCBhY29zIC0wLjU3ODk5OTk5OTk5OTk5OTk2IDAuMCAtPiAyLjE4ODI5Nzk4MTYxMjA2NjcgLTAuMAorYWNvczAwMzEgYWNvcyAtMC41Nzg5OTk5OTk5OTk5OTk5NiAtMC4wIC0+IDIuMTg4Mjk3OTgxNjEyMDY2NyAwLjAKK2Fjb3MwMDMyIGFjb3MgLTAuOTk5OTk5OTk5OTk5OTk5ODkgMC4wIC0+IDMuMTQxNTkyNjM4Njg4NjMxOSAtMC4wCithY29zMDAzMyBhY29zIC0wLjk5OTk5OTk5OTk5OTk5OTg5IC0wLjAgLT4gMy4xNDE1OTI2Mzg2ODg2MzE5IDAuMAorYWNvczAwMzQgYWNvcyAtMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgLTIuMTA3MzQyNDI1NTQ0NzAxNGUtMDgKK2Fjb3MwMDM1IGFjb3MgLTEuMDAwMDAwMDAwMDAwMDAwMiAtMC4wIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSAyLjEwNzM0MjQyNTU0NDcwMTRlLTA4CithY29zMDAzNiBhY29zIC0xLjAwMDk5OTk5OTk5OTk5OTkgMC4wIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSAtMC4wNDQ3MTc2MzM2MDgzMDY4NDkKK2Fjb3MwMDM3IGFjb3MgLTEuMDAwOTk5OTk5OTk5OTk5OSAtMC4wIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSAwLjA0NDcxNzYzMzYwODMwNjg0OQorYWNvczAwMzggYWNvcyAtMi4wIDAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgLTEuMzE2OTU3ODk2OTI0ODE2OAorYWNvczAwMzkgYWNvcyAtMi4wIC0wLjAgLT4gMy4xNDE1OTI2NTM1ODk3OTMxIDEuMzE2OTU3ODk2OTI0ODE2OAorYWNvczAwNDAgYWNvcyAtMjMuMCAwLjAgLT4gMy4xNDE1OTI2NTM1ODk3OTMxIC0zLjgyODE2ODQ3MTMzMzEwMTIKK2Fjb3MwMDQxIGFjb3MgLTIzLjAgLTAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgMy44MjgxNjg0NzEzMzMxMDEyCithY29zMDA0MiBhY29zIC0xMDAwMDAwMDAwMDAwMDAwMC4wIDAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgLTM3LjUzNDUwODY2ODQ2NDY3NAorYWNvczAwNDMgYWNvcyAtMTAwMDAwMDAwMDAwMDAwMDAuMCAtMC4wIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSAzNy41MzQ1MDg2Njg0NjQ2NzQKK2Fjb3MwMDQ0IGFjb3MgLTkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IDAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgLTM0Ni4wODA5MTExMjk2NjY3OQorYWNvczAwNDUgYWNvcyAtOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgLTAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgMzQ2LjA4MDkxMTEyOTY2Njc5CithY29zMDA0NiBhY29zIC0xLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gMy4xNDE1OTI2NTM1ODk3OTMxIC02ODkuMTY2MDg5OTg1Nzc5NjUKK2Fjb3MwMDQ3IGFjb3MgLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gMy4xNDE1OTI2NTM1ODk3OTMxIDY4OS4xNjYwODk5ODU3Nzk2NQorYWNvczAwNDggYWNvcyA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2Fjb3MwMDQ5IGFjb3MgOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithY29zMDA1MCBhY29zIDFlLTMwNSAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2Fjb3MwMDUxIGFjb3MgMWUtMzA1IC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYWNvczAwNTIgYWNvcyAxZS0xNTAgMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCithY29zMDA1MyBhY29zIDFlLTE1MCAtMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAwLjAKK2Fjb3MwMDU0IGFjb3MgOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2Fjb3MwMDU1IGFjb3MgOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAwLjAKK2Fjb3MwMDU2IGFjb3MgMC4wMDEgMC4wIC0+IDEuNTY5Nzk2MzI2NjI4MjMgLTAuMAorYWNvczAwNTcgYWNvcyAwLjAwMSAtMC4wIC0+IDEuNTY5Nzk2MzI2NjI4MjMgMC4wCithY29zMDA1OCBhY29zIDAuNTc4OTk5OTk5OTk5OTk5OTYgMC4wIC0+IDAuOTUzMjk0NjcxOTc3NzI2NTUgLTAuMAorYWNvczAwNTkgYWNvcyAwLjU3ODk5OTk5OTk5OTk5OTk2IC0wLjAgLT4gMC45NTMyOTQ2NzE5Nzc3MjY1NSAwLjAKK2Fjb3MwMDYwIGFjb3MgMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAgLT4gMS40OTAxMTYxMTkzODQ3NjU2ZS0wOCAtMC4wCithY29zMDA2MSBhY29zIDAuOTk5OTk5OTk5OTk5OTk5ODkgLTAuMCAtPiAxLjQ5MDExNjExOTM4NDc2NTZlLTA4IDAuMAorYWNvczAwNjIgYWNvcyAxLjAwMDAwMDAwMDAwMDAwMDIgMC4wIC0+IDAuMCAtMi4xMDczNDI0MjU1NDQ3MDE0ZS0wOAorYWNvczAwNjMgYWNvcyAxLjAwMDAwMDAwMDAwMDAwMDIgLTAuMCAtPiAwLjAgMi4xMDczNDI0MjU1NDQ3MDE0ZS0wOAorYWNvczAwNjQgYWNvcyAxLjAwMDk5OTk5OTk5OTk5OTkgMC4wIC0+IDAuMCAtMC4wNDQ3MTc2MzM2MDgzMDY4NDkKK2Fjb3MwMDY1IGFjb3MgMS4wMDA5OTk5OTk5OTk5OTk5IC0wLjAgLT4gMC4wIDAuMDQ0NzE3NjMzNjA4MzA2ODQ5CithY29zMDA2NiBhY29zIDIuMCAwLjAgLT4gMC4wIC0xLjMxNjk1Nzg5NjkyNDgxNjgKK2Fjb3MwMDY3IGFjb3MgMi4wIC0wLjAgLT4gMC4wIDEuMzE2OTU3ODk2OTI0ODE2OAorYWNvczAwNjggYWNvcyAyMy4wIDAuMCAtPiAwLjAgLTMuODI4MTY4NDcxMzMzMTAxMgorYWNvczAwNjkgYWNvcyAyMy4wIC0wLjAgLT4gMC4wIDMuODI4MTY4NDcxMzMzMTAxMgorYWNvczAwNzAgYWNvcyAxMDAwMDAwMDAwMDAwMDAwMC4wIDAuMCAtPiAwLjAgLTM3LjUzNDUwODY2ODQ2NDY3NAorYWNvczAwNzEgYWNvcyAxMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMC4wIDM3LjUzNDUwODY2ODQ2NDY3NAorYWNvczAwNzIgYWNvcyA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAwLjAgLT4gMC4wIC0zNDYuMDgwOTExMTI5NjY2NzkKK2Fjb3MwMDczIGFjb3MgOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgLTAuMCAtPiAwLjAgMzQ2LjA4MDkxMTEyOTY2Njc5CithY29zMDA3NCBhY29zIDEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IDAuMCAtPiAwLjAgLTY4OS4xNjYwODk5ODU3Nzk2NQorYWNvczAwNzUgYWNvcyAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtMC4wIC0+IDAuMCA2ODkuMTY2MDg5OTg1Nzc5NjUKKworLS0gcmFuZG9tIGlucHV0cworYWNvczAxMDAgYWNvcyAtMy4zMzA3MTEzMzI0NTk2NjgyIC0xMC43MzIwMDc1MzA4NjMyNjYgLT4gMS44NzA2MDg1Njk0NDgyMzM5IDMuMTEzOTg2ODA2NTU0NjEzCithY29zMDEwMSBhY29zIC0yODYzLjk1Mjk5MTc0MzI5MSAtMjY4MTAxMzMxNS4yNTcxMjM5IC0+IDEuNTcwNzk3Mzk1MDMwMTY5OSAyMi40MDI2MDc4NDMyNzQ3NTgKK2Fjb3MwMTAyIGFjb3MgLTAuMzMwNzI2Mzk3OTMyMjAwODggLTAuODUwNTU0NjQ2NTgyNTMwNTUgLT4gMS44MjE5NDI2ODk1OTIyNjAxIDAuNzkyNTAxNjY3MjkzMTE5NjYKK2Fjb3MwMTAzIGFjb3MgLTIuNTcyMjMyNTg0MjA5NzgwMiAtMTIuNzAzOTQwODA5ODIxNTc0IC0+IDEuNzY5OTk0MjQxMzEwNzQwOCAzLjI1NjUxNzAxNTY1MjczMjUKK2Fjb3MwMTA0IGFjb3MgLTQyLjQ5NTIzMzc4NTQ1OTU4MyAtMC41NDAzOTMyMDc1MTMzNzE2MSAtPiAzLjEyODg3MzI1NzMxNTMzMDQgNC40NDI0ODE1NTE5NzM1NjAxCithY29zMDEwNSBhY29zIC0xLjEzNjM4MTg2MjU4NTY0MDEgOTY0MS4xMzI1NDk4NjMwMzc2IC0+IDEuNTcwOTE0MTk0ODgyMDA0OSAtOS44NjY5NDEwNTUzMjU0Mjg0CithY29zMDEwNiBhY29zIC0yLjQzOTg0MjY4MjQxNTc4NjZlLTExIDAuMzMwMDIwNTE4OTAyNjYxNjUgLT4gMS41NzA3OTYzMjY4MTgwNjYgLTAuMzI0MzA1NzgwNDE1Nzg2NjcKK2Fjb3MwMTA3IGFjb3MgLTEuMzUyMTM0MDQyODE4NjU1MiAyLjkzNjk3Mzc5MTIwNzY3NzIgLT4gMS45ODQ5MDU5MTkyMzM5MzM4IC0xLjg4MjI4OTM2NzQxMTc5NDIKK2Fjb3MwMTA4IGFjb3MgLTEuODI3MzY0NzA2NDc3OTE1IDEuMDM1NTQ1OTIzMjE0NzU1NyAtPiAyLjU3MzIyNDYzMDc5NjAwMzIgLTEuNDA5MDY4ODI2Nzg1NDk2OQorYWNvczAxMDkgYWNvcyAtMC4yNTk3ODM3MzcwNjQwMzU0NiAxMC4wOTcxMjY2OTE4NTgzMyAtPiAxLjU5NjM5NDAzODYzNzgzMDYgLTMuMDA4MTY3MzA1MDE5NjA2MworYWNvczAxMTAgYWNvcyAwLjMzNTYxNzc4NDcxMDcyNTUxIC00NTg3MzUwLjY4MjM5OTkxMTggLT4gMS41NzA3OTYyNTM2MzMzMjUxIDE2LjAzMTk2MDQwMjU3OTUzOQorYWNvczAxMTEgYWNvcyAwLjQ5MTMzNDQ0NjEwOTk4NDQ1IC0wLjgwNzE0MjIzNjI5OTAwMTUgLT4gMS4xOTA4NzYxNzEyODAxNzg4IDAuNzg1NzMzNDU4MTMxODc4NjcKK2Fjb3MwMTEyIGFjb3MgMC40MjE5NjczNDUwNzgyMzk3NCAtMi40ODEyOTY1NDMxNzQ1MTE1IC0+IDEuNDE0MDkxMTg2MTAwNjkyIDEuNjUxNzA3MjYwOTg4MTcyCithY29zMDExMyBhY29zIDIuOTYxNDI2MjEwMTAwNjU1IC0yMTkuMDMyOTU2OTUyNDg2NjQgLT4gMS41NTcyNzY4MzE5ODIyNzc4IDYuMDgyNDY1OTg4NTgyNzMwNAorYWNvczAxMTQgYWNvcyAyLjg4NjIwOTA2MzY1MjY0MSAtMjAuMzgwMTEyMDcyMjA2MDYgLT4gMS40MzAyNzY1MjUyMjk3ODg5IDMuNzE4MjAxODUzMTQ3NjQyCithY29zMDExNSBhY29zIDAuNDE4MDU2ODA3NTI3NjUwOSAxLjQ4MzM0MzM5OTA4MjM0ODQgLT4gMS4zMzkzODM0NTU4MzAzMDQyIC0xLjIwNzk4NDc3NTgzMDE1NzYKK2Fjb3MwMTE2IGFjb3MgNTIuMzc2MTExNDA1OTI0NzE4IDAuMDEzOTMwNDI5MDAxOTQxMDAxIC0+IDAuMDAwMjY2MDE3NjE4MDQwMjQxODggLTQuNjUxNTA2NjY5MTIwNDcxNAorYWNvczAxMTcgYWNvcyA0MTYzNzk0ODM4Ny42MjU5NjkgMS41NjM0MTgyOTI4OTQwNDEgLT4gMy43NTQ3OTE4NTA3ODgzNTQ4ZS0xMSAtMjUuMTQ1NDI0OTg5ODA5MzgxCithY29zMDExOCBhY29zIDAuMDYxMjI2NjU5MTIyMjQ5NTI2IDAuODQ0NzIzNDM5NDYxNTE1NCAtPiAxLjUyNDAyODAzMDYzNjczMTUgLTAuNzY3OTE3OTg5NzExNDA4MTIKK2Fjb3MwMTE5IGFjb3MgMi40NDgwNDY2NDIwNDQyOTU5ZSsyNiAwLjE4MDAyMzM5MjAxMzg0NjYyIC0+IDcuMzUzNzU2NjIwNTY0Nzk4ZS0yOCAtNjEuNDU1NjUwMDE1OTk2Mzc2CisKKy0tIHZhbHVlcyBuZWFyIGluZmluaXR5CithY29zMDIwMCBhY29zIDEuNjIwNjg2MDUxODY4MzAyMWUrMzA4IDEuMDMwODQyNjIyNjI4NTI4M2UrMzA4IC0+IDAuNTY2NTA4MjYwOTM4MjYyMjMgLTcxMC41NDIwNjg3NDI0MTU2MQorYWNvczAyMDEgYWNvcyAxLjIwNjc3MzU4NzUwNzAwNjJlKzMwOCAtMS4zNDI5MTczNzI0MzkwMjc2ZSszMDggLT4gMC44Mzg3NDM2OTM5MDg2NDg4OSA3MTAuNDgwMTc3OTQwMjc0OTgKK2Fjb3MwMjAyIGFjb3MgLTcuNDEzMDE0NTEzMjU0OTA0N2UrMzA3IDEuMTc1OTEzMDU0MzkyNzY0NWUrMzA4IC0+IDIuMTMzMjcyOTM0NjQ3ODUzNiAtNzEwLjIxODcxMTE1Njk4NzUyCithY29zMDIwMyBhY29zIC04LjYzMjk0MjY0NDIyNTcyNDllKzMwNyAtMS4yMzE2MjgyOTUyMTg0MTMzZSszMDggLT4gMi4xODIxNTExMDMyNDQ0ODM4IDcxMC4yOTc1MjE0NTY5NzE0OAorYWNvczAyMDQgYWNvcyAwLjAgMS40Mjg5NzEzODU1ODQ5NzQ2ZSszMDggLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC03MTAuMjQ2MzEwNjk3Mzg5OTYKK2Fjb3MwMjA1IGFjb3MgLTAuMCAxLjMxNTM1MjQ1NDU5ODc0MzJlKzMwOCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTcxMC4xNjM0NjA0Nzg3NTM5CithY29zMDIwNiBhY29zIDAuMCAtOS42MjI5MDM3NjY5MjY5MzIxZSszMDcgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDcwOS44NTA5MTY3OTU3MzY5MQorYWNvczAyMDcgYWNvcyAtMC4wIC00Ljk3ODM2MTY0MjExMDcwODhlKzMwNyAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgNzA5LjE5MTg3MTU3OTExMjMzCithY29zMDIwOCBhY29zIDEuMzkzNzU0MTkyNTczOTM4OWUrMzA4IDAuMCAtPiAwLjAgLTcxMC4yMjEzNTY3ODcwNzI2NAorYWNvczAyMDkgYWNvcyA5LjEzNjIzODg5NjczNzE1MzZlKzMwNyAtMC4wIC0+IDAuMCA3MDkuNzk5MDE5NTMxMjQ2MTMKK2Fjb3MwMjEwIGFjb3MgLTEuMzQ1NzM2MTIyMDY5NzQzNmUrMzA4IDAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgLTcxMC4xODYyOTY5ODg3MTg0OAorYWNvczAyMTEgYWNvcyAtNS40Njk5MDkwMDU2MTQ0Mjg0ZSszMDcgLTAuMCAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgNzA5LjI4NjAzMjcxMDg1NjQ5CithY29zMDIxMiBhY29zIDEuNTg4MDcxNjkzMjM1ODkwMWUrMzA4IDUuNTYzODQwMTI1MjMzOTkyOSAtPiAzLjUwMzUxOTQ4Nzc3Mzg3M2UtMzA4IC03MTAuMzUxODc2MzMxNDA1ODMKK2Fjb3MwMjEzIGFjb3MgMS4yNDk3MjExNjYzNDYzMTY0ZSszMDggLTMuMDQ1NjQ3NzcxNzkxMTAyNCAtPiAyLjQzNzA2MTg0NTMxOTc0ODZlLTMwOCA3MTAuMTEyMjc2MjgyMjM0MTIKK2Fjb3MwMjE0IGFjb3MgLTkuOTAxNjIyNDAwNjAyOTUyOGUrMzA3IDQuOTU3MDQyNzM0MDc4OTA1NiAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgLTcwOS44Nzk0NjkzNTIyOTQ2OAorYWNvczAyMTUgYWNvcyAtMS41ODU0MDcxMDY2ODc0MTM5ZSszMDggLTQuNDIzMzU3Nzc0MTQ5Nzc4MyAtPiAzLjE0MTU5MjY1MzU4OTc5MzEgNzEwLjM1MDE5NzA0NjcyMDA0CithY29zMDIxNiBhY29zIDkuMzY3NDYyMzA4MzY0NzYyOCAxLjUyMDk1NTkwNTE4Nzc5NzllKzMwOCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTcxMC4zMDg2OTQ4NDQ5MTA4NgorYWNvczAyMTcgYWNvcyA4LjE3NzM4MzIwMjE3ODQzODMgLTYuNjA5MzQ0NTc5NTAwMDA1NmUrMzA3IC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiA3MDkuNDc1MjU1MjIyNzc5MgorYWNvczAyMTggYWNvcyAtMy4xODQ1OTM1MDAwNjY1MTA0IDEuNTc2ODg1NjM5NjY1MDg5M2UrMzA4IC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtNzEwLjM0NDgwNzYxMDQyNjg3CithY29zMDIxOSBhY29zIC0xLjA1NzczMDM4ODA5NTM5MDMgLTYuNDU3NDYyNjgxNTczNTYxM2UrMzA3IC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiA3MDkuNDUyMDA3MTk2NjIwNDYKKworLS0gdmFsdWVzIG5lYXIgMAorYWNvczAyMjAgYWNvcyAxLjg1NjY5ODY5NzA3MTQwNDVlLTMyMCAzLjE4NjcyMzQxNTY3NjA0MDJlLTMyMSAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTMuMTg2NzIzNDE1Njc2MDQwMmUtMzIxCithY29zMDIyMSBhY29zIDcuOTA1MDUwMzMzNDU5OTQ0N2UtMzIzIC04Ljg5MzE4MTYyNTE0MjQzNzhlLTMyMyAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgOC44OTMxODE2MjUxNDI0Mzc4ZS0zMjMKK2Fjb3MwMjIyIGFjb3MgLTQuNDQ2NTkwODEyNTcxMjE4OWUtMzIzIDIuNDY1NDA2NTA5NzIyMjcyN2UtMzExIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMi40NjU0MDY1MDk3MjIyNzI3ZS0zMTEKK2Fjb3MwMjIzIGFjb3MgLTYuMTAxNjkxNjQwODE5MjYxOWUtMzExIC0yLjQ3MDMyODIyOTIwNjIzMjdlLTMyMyAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMi40NzAzMjgyMjkyMDYyMzI3ZS0zMjMKK2Fjb3MwMjI0IGFjb3MgMC4wIDMuNDMwNTc4MzYyMTg0MjcyOWUtMzExIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMy40MzA1NzgzNjIxODQyNzI5ZS0zMTEKK2Fjb3MwMjI1IGFjb3MgLTAuMCAxLjYxMTc0MDk0OTg2MzMxNDVlLTMxOSAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTEuNjExNzQwOTQ5ODYzMzE0NWUtMzE5CithY29zMDIyNiBhY29zIDAuMCAtNC45OTAwNjMwMjI5OTY1OTAxZS0zMjIgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDQuOTkwMDYzMDIyOTk2NTkwMWUtMzIyCithY29zMDIyNyBhY29zIC0wLjAgLTQuNDg4OTI3OTIxMDU5MjgxOGUtMzExIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiA0LjQ4ODkyNzkyMTA1OTI4MThlLTMxMQorYWNvczAyMjggYWNvcyA1LjMyOTc2Nzg2ODE0NzcyMTRlLTMxMiAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2Fjb3MwMjI5IGFjb3MgNi4yMDczNDI1ODk3MjExNjE0ZS0zMTMgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithY29zMDIzMCBhY29zIC00Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNCAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2Fjb3MwMjMxIGFjb3MgLTEuNzEwNzUxNzA1Mjg5OTAwM2UtMzE4IC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorCistLSBzcGVjaWFsIHZhbHVlcworYWNvczEwMDAgYWNvcyAwLjAgMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCithY29zMTAwMSBhY29zIDAuMCAtMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAwLjAKK2Fjb3MxMDAyIGFjb3MgLTAuMCAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2Fjb3MxMDAzIGFjb3MgLTAuMCAtMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAwLjAKK2Fjb3MxMDA0IGFjb3MgMC4wIG5hbiAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgbmFuCithY29zMTAwNSBhY29zIC0wLjAgbmFuIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiBuYW4KK2Fjb3MxMDA2IGFjb3MgLTIuMyBpbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC1pbmYKK2Fjb3MxMDA3IGFjb3MgLTAuMCBpbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC1pbmYKK2Fjb3MxMDA4IGFjb3MgMC4wIGluZiAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLWluZgorYWNvczEwMDkgYWNvcyAyLjMgaW5mIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtaW5mCithY29zMTAxMCBhY29zIC0yLjMgbmFuIC0+IG5hbiBuYW4KK2Fjb3MxMDExIGFjb3MgMi4zIG5hbiAtPiBuYW4gbmFuCithY29zMTAxMiBhY29zIC1pbmYgMi4zIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSAtaW5mCithY29zMTAxMyBhY29zIC1pbmYgMC4wIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSAtaW5mCithY29zMTAxNCBhY29zIGluZiAyLjMgLT4gMC4wIC1pbmYKK2Fjb3MxMDE1IGFjb3MgaW5mIDAuMCAtPiAwLjAgLWluZgorYWNvczEwMTYgYWNvcyAtaW5mIGluZiAtPiAyLjM1NjE5NDQ5MDE5MjM0NDggLWluZgorYWNvczEwMTcgYWNvcyBpbmYgaW5mIC0+IDAuNzg1Mzk4MTYzMzk3NDQ4MjggLWluZgorYWNvczEwMTggYWNvcyBpbmYgbmFuIC0+IG5hbiBpbmYgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmUtaW1hZy1zaWduCithY29zMTAxOSBhY29zIC1pbmYgbmFuIC0+IG5hbiBpbmYgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZS1pbWFnLXNpZ24KK2Fjb3MxMDIwIGFjb3MgbmFuIDAuMCAtPiBuYW4gbmFuCithY29zMTAyMSBhY29zIG5hbiAyLjMgLT4gbmFuIG5hbgorYWNvczEwMjIgYWNvcyBuYW4gaW5mIC0+IG5hbiAtaW5mCithY29zMTAyMyBhY29zIG5hbiBuYW4gLT4gbmFuIG5hbgorYWNvczEwMjQgYWNvcyAtMi4zIC1pbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IGluZgorYWNvczEwMjUgYWNvcyAtMC4wIC1pbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IGluZgorYWNvczEwMjYgYWNvcyAwLjAgLWluZiAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgaW5mCithY29zMTAyNyBhY29zIDIuMyAtaW5mIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiBpbmYKK2Fjb3MxMDI4IGFjb3MgLWluZiAtMi4zIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSBpbmYKK2Fjb3MxMDI5IGFjb3MgLWluZiAtMC4wIC0+IDMuMTQxNTkyNjUzNTg5NzkzMSBpbmYKK2Fjb3MxMDMwIGFjb3MgaW5mIC0yLjMgLT4gMC4wIGluZgorYWNvczEwMzEgYWNvcyBpbmYgLTAuMCAtPiAwLjAgaW5mCithY29zMTAzMiBhY29zIC1pbmYgLWluZiAtPiAyLjM1NjE5NDQ5MDE5MjM0NDggaW5mCithY29zMTAzMyBhY29zIGluZiAtaW5mIC0+IDAuNzg1Mzk4MTYzMzk3NDQ4MjggaW5mCithY29zMTAzNCBhY29zIG5hbiAtMC4wIC0+IG5hbiBuYW4KK2Fjb3MxMDM1IGFjb3MgbmFuIC0yLjMgLT4gbmFuIG5hbgorYWNvczEwMzYgYWNvcyBuYW4gLWluZiAtPiBuYW4gaW5mCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGFjb3NoOiBJbnZlcnNlIGh5cGVyYm9saWMgY29zaW5lIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSB6ZXJvcworYWNvc2gwMDAwIGFjb3NoIDAuMCAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDAxIGFjb3NoIDAuMCAtMC4wIC0+IDAuMCAtMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAwMDIgYWNvc2ggLTAuMCAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDAzIGFjb3NoIC0wLjAgLTAuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorCistLSBicmFuY2ggcG9pbnRzOiArLy0xCithY29zaDAwMTAgYWNvc2ggMS4wIDAuMCAtPiAwLjAgMC4wCithY29zaDAwMTEgYWNvc2ggMS4wIC0wLjAgLT4gMC4wIC0wLjAKK2Fjb3NoMDAxMiBhY29zaCAtMS4wIDAuMCAtPiAwLjAgMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAwMTMgYWNvc2ggLTEuMCAtMC4wIC0+IDAuMCAtMy4xNDE1OTI2NTM1ODk3OTMxCisKKy0tIHZhbHVlcyBhbG9uZyBib3RoIHNpZGVzIG9mIHJlYWwgYXhpcworYWNvc2gwMDIwIGFjb3NoIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDIxIGFjb3NoIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAtMC4wIC0+IDAuMCAtMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAwMjIgYWNvc2ggLTFlLTMwNSAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDIzIGFjb3NoIC0xZS0zMDUgLTAuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDI0IGFjb3NoIC0xZS0xNTAgMC4wIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDAyNSBhY29zaCAtMWUtMTUwIC0wLjAgLT4gMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDAyNiBhY29zaCAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2OAorYWNvc2gwMDI3IGFjb3NoIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0wLjAgLT4gMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjgKK2Fjb3NoMDAyOCBhY29zaCAtMC4wMDEgMC4wIC0+IDAuMCAxLjU3MTc5NjMyNjk2MTU2MzQKK2Fjb3NoMDAyOSBhY29zaCAtMC4wMDEgLTAuMCAtPiAwLjAgLTEuNTcxNzk2MzI2OTYxNTYzNAorYWNvc2gwMDMwIGFjb3NoIC0wLjU3ODk5OTk5OTk5OTk5OTk2IDAuMCAtPiAwLjAgMi4xODgyOTc5ODE2MTIwNjY3CithY29zaDAwMzEgYWNvc2ggLTAuNTc4OTk5OTk5OTk5OTk5OTYgLTAuMCAtPiAwLjAgLTIuMTg4Mjk3OTgxNjEyMDY2NworYWNvc2gwMDMyIGFjb3NoIC0wLjk5OTk5OTk5OTk5OTk5OTg5IDAuMCAtPiAwLjAgMy4xNDE1OTI2Mzg2ODg2MzE5CithY29zaDAwMzMgYWNvc2ggLTAuOTk5OTk5OTk5OTk5OTk5ODkgLTAuMCAtPiAwLjAgLTMuMTQxNTkyNjM4Njg4NjMxOQorYWNvc2gwMDM0IGFjb3NoIC0xLjAwMDAwMDAwMDAwMDAwMDIgMC4wIC0+IDIuMTA3MzQyNDI1NTQ0NzAxNGUtMDggMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAwMzUgYWNvc2ggLTEuMDAwMDAwMDAwMDAwMDAwMiAtMC4wIC0+IDIuMTA3MzQyNDI1NTQ0NzAxNGUtMDggLTMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMDM2IGFjb3NoIC0xLjAwMDk5OTk5OTk5OTk5OTkgMC4wIC0+IDAuMDQ0NzE3NjMzNjA4MzA2ODQ5IDMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMDM3IGFjb3NoIC0xLjAwMDk5OTk5OTk5OTk5OTkgLTAuMCAtPiAwLjA0NDcxNzYzMzYwODMwNjg0OSAtMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAwMzggYWNvc2ggLTIuMCAwLjAgLT4gMS4zMTY5NTc4OTY5MjQ4MTY4IDMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMDM5IGFjb3NoIC0yLjAgLTAuMCAtPiAxLjMxNjk1Nzg5NjkyNDgxNjggLTMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMDQwIGFjb3NoIC0yMy4wIDAuMCAtPiAzLjgyODE2ODQ3MTMzMzEwMTIgMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAwNDEgYWNvc2ggLTIzLjAgLTAuMCAtPiAzLjgyODE2ODQ3MTMzMzEwMTIgLTMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMDQyIGFjb3NoIC0xMDAwMDAwMDAwMDAwMDAwMC4wIDAuMCAtPiAzNy41MzQ1MDg2Njg0NjQ2NzQgMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAwNDMgYWNvc2ggLTEwMDAwMDAwMDAwMDAwMDAwLjAgLTAuMCAtPiAzNy41MzQ1MDg2Njg0NjQ2NzQgLTMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMDQ0IGFjb3NoIC05Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAwLjAgLT4gMzQ2LjA4MDkxMTEyOTY2Njc5IDMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMDQ1IGFjb3NoIC05Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtMC4wIC0+IDM0Ni4wODA5MTExMjk2NjY3OSAtMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAwNDYgYWNvc2ggLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IDAuMCAtPiA2ODkuMTY2MDg5OTg1Nzc5NjUgMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAwNDcgYWNvc2ggLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gNjg5LjE2NjA4OTk4NTc3OTY1IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2Fjb3NoMDA0OCBhY29zaCA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDQ5IGFjb3NoIDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IC0wLjAgLT4gMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDA1MCBhY29zaCAxZS0zMDUgMC4wIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDA1MSBhY29zaCAxZS0zMDUgLTAuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDUyIGFjb3NoIDFlLTE1MCAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDUzIGFjb3NoIDFlLTE1MCAtMC4wIC0+IDAuMCAtMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAwNTQgYWNvc2ggOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDU1IGFjb3NoIDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLTAuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMDU2IGFjb3NoIDAuMDAxIDAuMCAtPiAwLjAgMS41Njk3OTYzMjY2MjgyMworYWNvc2gwMDU3IGFjb3NoIDAuMDAxIC0wLjAgLT4gMC4wIC0xLjU2OTc5NjMyNjYyODIzCithY29zaDAwNTggYWNvc2ggMC41Nzg5OTk5OTk5OTk5OTk5NiAwLjAgLT4gMC4wIDAuOTUzMjk0NjcxOTc3NzI2NTUKK2Fjb3NoMDA1OSBhY29zaCAwLjU3ODk5OTk5OTk5OTk5OTk2IC0wLjAgLT4gMC4wIC0wLjk1MzI5NDY3MTk3NzcyNjU1CithY29zaDAwNjAgYWNvc2ggMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAgLT4gMC4wIDEuNDkwMTE2MTE5Mzg0NzY1NmUtMDgKK2Fjb3NoMDA2MSBhY29zaCAwLjk5OTk5OTk5OTk5OTk5OTg5IC0wLjAgLT4gMC4wIC0xLjQ5MDExNjExOTM4NDc2NTZlLTA4CithY29zaDAwNjIgYWNvc2ggMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAyLjEwNzM0MjQyNTU0NDcwMTRlLTA4IDAuMAorYWNvc2gwMDYzIGFjb3NoIDEuMDAwMDAwMDAwMDAwMDAwMiAtMC4wIC0+IDIuMTA3MzQyNDI1NTQ0NzAxNGUtMDggLTAuMAorYWNvc2gwMDY0IGFjb3NoIDEuMDAwOTk5OTk5OTk5OTk5OSAwLjAgLT4gMC4wNDQ3MTc2MzM2MDgzMDY4NDkgMC4wCithY29zaDAwNjUgYWNvc2ggMS4wMDA5OTk5OTk5OTk5OTk5IC0wLjAgLT4gMC4wNDQ3MTc2MzM2MDgzMDY4NDkgLTAuMAorYWNvc2gwMDY2IGFjb3NoIDIuMCAwLjAgLT4gMS4zMTY5NTc4OTY5MjQ4MTY4IDAuMAorYWNvc2gwMDY3IGFjb3NoIDIuMCAtMC4wIC0+IDEuMzE2OTU3ODk2OTI0ODE2OCAtMC4wCithY29zaDAwNjggYWNvc2ggMjMuMCAwLjAgLT4gMy44MjgxNjg0NzEzMzMxMDEyIDAuMAorYWNvc2gwMDY5IGFjb3NoIDIzLjAgLTAuMCAtPiAzLjgyODE2ODQ3MTMzMzEwMTIgLTAuMAorYWNvc2gwMDcwIGFjb3NoIDEwMDAwMDAwMDAwMDAwMDAwLjAgMC4wIC0+IDM3LjUzNDUwODY2ODQ2NDY3NCAwLjAKK2Fjb3NoMDA3MSBhY29zaCAxMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMzcuNTM0NTA4NjY4NDY0Njc0IC0wLjAKK2Fjb3NoMDA3MiBhY29zaCA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAwLjAgLT4gMzQ2LjA4MDkxMTEyOTY2Njc5IDAuMAorYWNvc2gwMDczIGFjb3NoIDkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0wLjAgLT4gMzQ2LjA4MDkxMTEyOTY2Njc5IC0wLjAKK2Fjb3NoMDA3NCBhY29zaCAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gNjg5LjE2NjA4OTk4NTc3OTY1IDAuMAorYWNvc2gwMDc1IGFjb3NoIDEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gNjg5LjE2NjA4OTk4NTc3OTY1IC0wLjAKKworLS0gcmFuZG9tIGlucHV0cworYWNvc2gwMTAwIGFjb3NoIC0xLjQzMjg1ODk1ODEyNTA4NDMgLTEuODM3MDM0Nzc3NTU1ODMwOSAtPiAxLjU1MjY5NjI2NDY1NDk1ODcgLTIuMTkwMjUwMTY4NDM1Nzg2CithY29zaDAxMDEgYWNvc2ggLTAuMzEwNzU4MTkxNTYyMjA5NTcgLTEuMDc3MjU1NTc4NjgzOTI5NyAtPiAwLjk1MTM5MTY4Mjg2MTkzNzA5IC0xLjc4MTIyMjgwODk2MzY0NzkKK2Fjb3NoMDEwMiBhY29zaCAtMS45MDQ0Nzc2NTc4MDcwNDUzIC0yMC40ODUzNzAxNTg5MzIxMjQgLT4gMy43MTc3NDExMDg4OTMyMzU5IC0xLjY2MzM4ODg3NDU4NjEyMjcKK2Fjb3NoMDEwMyBhY29zaCAtMC4wNzU2NDI1MDYwMDA4NTg3NDIgLTIxOTY1OTc2MzIwLjg3MzA1MSAtPiAyNC41MDU5MDc3NDI4ODE5OTEgLTEuNTcwNzk2MzI2Nzk4MzQwMgorYWNvc2gwMTA0IGFjb3NoIC0xLjYxNjIyNzExODEwNTYzMDcgLTMuMDM2OTM0MzQ1ODY5NjA5OSAtPiAxLjk0MDcwNTcyNjI4NjEyMjcgLTIuMDQyOTU0OTQ2MTc1MDIwOQorYWNvc2gwMTA1IGFjb3NoIC0wLjMxMDM3ODAyODAyOTgwNjMgMC4wMDAxODA1NDg4MDAxODA3ODk4NyAtPiAwLjAwMDE4OTkyODc3MDU4NzYxNDE2IDEuODg2Mzg2OTk1MDk2NzI4CithY29zaDAxMDYgYWNvc2ggLTkxNTk0Njg3NTEuNTg5NzY1NSA1LjgwMTQ3NDc2NjQyNzM2NDkgLT4gMjMuNjMxMjAxMTk3OTU5MTkzIDMuMTQxNTkyNjUyOTU2NDA3OAorYWNvc2gwMTA3IGFjb3NoIC0wLjAzNzczOTE1NzU1MDkzMzg4NCAwLjIxODQxMzU3NDkzNTEwNzA1IC0+IDAuMjE2ODU4NDQ5NjA2MDI0ODggMS42MDc2NzM1MTMzNDQ5NDAyCithY29zaDAxMDggYWNvc2ggLTgyMjU5OTEuMDUwODM5NDI5NyAwLjI4MzE4NTQzMDA4OTEzNjQ0IC0+IDE2LjYxNTk1NjUyMDQyMDI4NyAzLjE0MTU5MjYxOTE2NDEwMTkKK2Fjb3NoMDEwOSBhY29zaCAtMzUuNjIwMDcwNTAyMzAyNjM5IDAuMzEzMDMyMzcwMDUwMTUgLT4gNC4yNjU4OTgwMDA2OTQzOTY1IDMuMTMyODAxMzI1NTU0MTg3MworYWNvc2gwMTEwIGFjb3NoIDk2LjcyOTkzOTkwNjgyMDkxNyAtMC4wMjkzNDUyMjgzNzIzNjUzMzQgLT4gNS4yNjUwNDM0Nzc1ODYzNTQ4IC0wLjAwMDMwMzM4ODk1ODY2OTcyODQzCithY29zaDAxMTEgYWNvc2ggMC41OTY1NjAyNDAwNzk2NjQ5MSAtMi4wNDEyMjk0NjU0MTYzOTc4IC0+IDEuNDkyMzAwMjAyNDI4NzgzNSAtMS4zMTI1Njg0MjE5MDAzMzgKK2Fjb3NoMDExMiBhY29zaCAxMDkuMjkzODQxMTI2Nzc4MjggLTAuMDAwMTU0NTQ4NjMwNjE1MzM4MTIgLT4gNS4zODcxNjYyOTYxNTQ1NDc3IC0xLjQxNDEyNDUxNTQwNjEyMTRlLTA2CithY29zaDAxMTMgYWNvc2ggOC42NzA1NjUxOTY5MzYxNTk3IC0zLjY3MjM2MzE2NDk3ODc0NjUgLT4gMi45MzM2MTgwOTU4MzYzNTQ1IC0wLjQwMjY3MzYyMDMxODcyODYxCithY29zaDAxMTQgYWNvc2ggMS44MTAxNjQ2NDQ1MDUyNjg2IC0wLjAxMjM0NTEzMjcyMTg1NTQ3OCAtPiAxLjE5OTcxNDg1NjYyODU3NjkgLTAuMDA4MTgxMzkxMjc2MDE1MDI2NQorYWNvc2gwMTE1IGFjb3NoIDUyLjU2ODk3MTk1MDI1Mjg4IDAuMDAxMTEzOTE2MDY1OTg1NDQzIC0+IDQuNjU1MTgyNzYyMjI2NDEzNSAyLjExOTM0NDU4NzIwNDAzMDdlLTA1CithY29zaDAxMTYgYWNvc2ggMC4yODMzNjc4NjE2NDIxNDczOSAzNTU2NDM5OTI0NTcuNDA0ODUgLT4gMjcuMjkwMzQzMjI2ODE2NTI4IDEuNTcwNzk2MzI2Nzk0MDk5OQorYWNvc2gwMTE3IGFjb3NoIDAuNzM4NzY2MjEyOTE5MTE0MzcgMi44ODI4NTk0NTQxMTA0MzIyZS0yMCAtPiA0LjI3NzQ4MjA5NzgxNTkwNjdlLTIwIDAuNzM5NTU4NDU4MzY4Mjc5MjcKK2Fjb3NoMDExOCBhY29zaCAwLjAyNTg2NTQ3MTc4MTcxODg3OCAzNzEyNTc0NjA2NDMxOC40OTIgLT4gMzEuOTM4NDc4OTg5NDE4MDEyIDEuNTcwNzk2MzI2Nzk0ODk1OQorYWNvc2gwMTE5IGFjb3NoIDIuMjA0NzM1MzUxMTc4MDEzMiAwLjA3NDcxMjI0ODE0MzQ4OTI3MSAtPiAxLjQyODY0MDMyNDg2OTgwMjEgMC4wMzc5OTc5MDQ5NzE2MjY1OTgKKworLS0gdmFsdWVzIG5lYXIgaW5maW5pdHkKK2Fjb3NoMDIwMCBhY29zaCA4LjE1NDg1OTI4NzY0Njc3ODVlKzMwNyA5LjA5NDM3NzkzMzU5NTExMjhlKzMwNyAtPiA3MTAuMDg5NDQ2MjA4MDA2MDUgMC44Mzk4MTE2NTQyNTQ3ODk1NAorYWNvc2gwMjAxIGFjb3NoIDEuNDIzNzIyOTY4MDk3MjUzMWUrMzA4IC0xLjAzMzY5NjY2MTc4NzQ4NThlKzMwOCAtPiA3MTAuNDU0MzMzMTA5NDc1OSAtMC42Mjc5OTcyODc2MzQ4NzU1CithY29zaDAyMDIgYWNvc2ggLTEuNTAxNDUyNjg5OTczODkzOWUrMzA4IDEuNTY3MDcwMDM3ODQ0ODc5MmUrMzA4IC0+IDcxMC42NjQyMDcwNjc5NTQ2NCAyLjMzNDgxMzcyOTkxMDY2OTcKK2Fjb3NoMDIwMyBhY29zaCAtMS4wOTM5MDQwMzc1MjEzOTI4ZSszMDggLTEuMDQxNjk2MDM1MTEyNzk3OGUrMzA4IC0+IDcxMC4zMDE4Mjg2MzExNTg4NiAtMi4zODA2MzYxNDc3ODcwMjcKK2Fjb3NoMDIwNCBhY29zaCAwLjAgMS40NzYwNjI0MzM1NTk1ODhlKzMwOCAtPiA3MTAuMjc4NzMzODQ3MTY5MjkgMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAyMDUgYWNvc2ggLTAuMCA2LjIwNzcyMTAzMjYyMjEwOTRlKzMwNyAtPiA3MDkuNDEyNTY0NTc0ODQ3NjkgMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAyMDYgYWNvc2ggMC4wIC0xLjU2MjE4OTk5MDk5NjgzMDhlKzMwOCAtPiA3MTAuMzM1NDQ0NDk5OTA3MzQgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMjA3IGFjb3NoIC0wLjAgLTguMzU1NjYyNDgzMzgzOTEyMmUrMzA3IC0+IDcwOS43MDk3MTAxODA0ODMxNyAtMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAyMDggYWNvc2ggMS4zMDY3MDc5NzUyNDk5MzQyZSszMDggMC4wIC0+IDcxMC4xNTY4NjY4MDEwNzIyOCAwLjAKK2Fjb3NoMDIwOSBhY29zaCAxLjU2NTM2NDAzNDAyMTQwMjZlKzMwOCAtMC4wIC0+IDcxMC4zMzc0NzQyMjkyNjcwNiAtMC4wCithY29zaDAyMTAgYWNvc2ggLTYuOTAxMTM3NTk5MjI5MDYzNmUrMzA3IDAuMCAtPiA3MDkuNTE4NDU2OTk3MTk5MjIgMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAyMTEgYWNvc2ggLTkuOTUzOTU3NjgwOTkyNjk3M2UrMzA3IC0wLjAgLT4gNzA5Ljg4NDc0MDk1ODcwMTg1IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2Fjb3NoMDIxMiBhY29zaCA3LjY0NDk1OTg1MTg5MTQ5MjVlKzMwNyA5LjU3MDY1NDA3NjgyNjgzNTggLT4gNzA5LjYyMDgxNzMxNzU0ODAyIDEuMjUxODkwNjkxNjc2OTM0NWUtMzA3CithY29zaDAyMTMgYWNvc2ggNS40MzI1NDEwOTcyNjAyMTk3ZSszMDcgLTcuODA2NDgwNzgxNjUyMjcwNiAtPiA3MDkuMjc5MTc3NzI3OTI1IC0xLjQzNjk4NTEzMTI0NzE5NzRlLTMwNworYWNvc2gwMjE0IGFjb3NoIC0xLjE1MjM2MjYxMTIzNjA0NjVlKzMwOCA3LjA2MTc1MTAwMzg4NjkzMzYgLT4gNzEwLjAzMTE3MDEwMjE2OTA5IDMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gwMjE1IGFjb3NoIC0xLjE2ODUwMjc3ODY4NjI1OTllKzMwOCAtNS4xNTY4NTU4MzU3OTI1NjI1IC0+IDcxMC4wNDUwNzkwNzU3MTQxNyAtMy4xNDE1OTI2NTM1ODk3OTMxCithY29zaDAyMTYgYWNvc2ggMy4wMjM2MzcwMzM5Nzg4NzIxIDEuNzUwMzI0ODcyMDA5NjQxN2UrMzA4IC0+IDcxMC40NDkxNTcyMzQ1ODA2NCAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDIxNyBhY29zaCA2LjYxMDgwMDc5MjYwMzExNDkgLTkuMTQ2OTk2ODIyNTgwNjE0OWUrMzA3IC0+IDcwOS44MDAxOTYzMzkwMzMyOCAtMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAyMTggYWNvc2ggLTUuMTA5NjI2MjkwNTYyMzk1OSA2LjQ0ODQ5MjY3ODU0MTIzOTVlKzMwNyAtPiA3MDkuNDUwNjE3MTM5OTc5NzMgMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAyMTkgYWNvc2ggLTIuODA4MDkyMDYwODczNTg0NiAtMS43NzE2MTE4ODM2NTE5MzY4ZSszMDggLT4gNzEwLjQ2MTI0NTYyMzYzNDQ1IC0xLjU3MDc5NjMyNjc5NDg5NjYKKworLS0gdmFsdWVzIG5lYXIgMAorYWNvc2gwMjIwIGFjb3NoIDQuNTU2MDUzMDMyNjY5OTMwNGUtMzE3IDcuMzA0ODk4OTEyMTQzNjY1N2UtMzE4IC0+IDcuMzA0ODk4OTEyMTQzNjY1N2UtMzE4IDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMjIxIGFjb3NoIDQuODc1NDI3NDEzMzU4NTMzMWUtMzE0IC05Ljg0Njk3OTQ4OTc2ODQxOTllLTMxNSAtPiA5Ljg0Njk3OTQ4OTc2ODQxOTllLTMxNSAtMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDAyMjIgYWNvc2ggLTQuNjc0ODg3NjAwOTk2MDA5N2UtMzEyIDkuNzkwMDM0Mjg4NzU1NzYwNmUtMzE4IC0+IDkuNzkwMDM0Mjg4NzU1NzYwNmUtMzE4IDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMjIzIGFjb3NoIC00LjMxMzY4NzE1MzgzOTkyMzZlLTMyMCAtNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjMgLT4gNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjMgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMjI0IGFjb3NoIDAuMCA0LjM0MzEwMTM4NjY0OTY3NzRlLTMxNCAtPiA0LjM0MzEwMTM4NjY0OTY3NzRlLTMxNCAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDIyNSBhY29zaCAtMC4wIDYuMDE0NzMzNDMzNTgyOTE4NGUtMzE3IC0+IDYuMDE0NzMzNDMzNTgyOTE4NGUtMzE3IDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMjI2IGFjb3NoIDAuMCAtMS4yODgwMjkxMzg3MDgxMjk3ZS0zMjAgLT4gMS4yODgwMjkxMzg3MDgxMjk3ZS0zMjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMjI3IGFjb3NoIC0wLjAgLTEuNDQwMTU2Mzk3NjUzNDYyMWUtMzE3IC0+IDEuNDQwMTU2Mzk3NjUzNDYyMWUtMzE3IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDIyOCBhY29zaCAxLjM2ODk2ODA1NzA4NjMwOTFlLTMxMyAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gwMjI5IGFjb3NoIDEuNTMwNDM0Njg5MzQ5NDM3MWUtMzEyIC0wLjAgLT4gMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDIzMCBhY29zaCAtMy43NDUwMTc1OTU0NzY2NDg4ZS0zMjAgMC4wIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMDIzMSBhY29zaCAtOC40MjUwNTYzMDgwODg1ODAxZS0zMTEgLTAuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorCistLSBzcGVjaWFsIHZhbHVlcworYWNvc2gxMDAwIGFjb3NoIDAuMCAwLjAgLT4gMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gxMDAxIGFjb3NoIC0wLjAgMC4wIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMTAwMiBhY29zaCAwLjAgaW5mIC0+IGluZiAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMTAwMyBhY29zaCAyLjMgaW5mIC0+IGluZiAxLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMTAwNCBhY29zaCAtMC4wIGluZiAtPiBpbmYgMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDEwMDUgYWNvc2ggLTIuMyBpbmYgLT4gaW5mIDEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gxMDA2IGFjb3NoIDAuMCBuYW4gLT4gbmFuIG5hbgorYWNvc2gxMDA3IGFjb3NoIDIuMyBuYW4gLT4gbmFuIG5hbgorYWNvc2gxMDA4IGFjb3NoIC0wLjAgbmFuIC0+IG5hbiBuYW4KK2Fjb3NoMTAwOSBhY29zaCAtMi4zIG5hbiAtPiBuYW4gbmFuCithY29zaDEwMTAgYWNvc2ggLWluZiAwLjAgLT4gaW5mIDMuMTQxNTkyNjUzNTg5NzkzMQorYWNvc2gxMDExIGFjb3NoIC1pbmYgMi4zIC0+IGluZiAzLjE0MTU5MjY1MzU4OTc5MzEKK2Fjb3NoMTAxMiBhY29zaCBpbmYgMC4wIC0+IGluZiAwLjAKK2Fjb3NoMTAxMyBhY29zaCBpbmYgMi4zIC0+IGluZiAwLjAKK2Fjb3NoMTAxNCBhY29zaCAtaW5mIGluZiAtPiBpbmYgMi4zNTYxOTQ0OTAxOTIzNDQ4CithY29zaDEwMTUgYWNvc2ggaW5mIGluZiAtPiBpbmYgMC43ODUzOTgxNjMzOTc0NDgyOAorYWNvc2gxMDE2IGFjb3NoIGluZiBuYW4gLT4gaW5mIG5hbgorYWNvc2gxMDE3IGFjb3NoIC1pbmYgbmFuIC0+IGluZiBuYW4KK2Fjb3NoMTAxOCBhY29zaCBuYW4gMC4wIC0+IG5hbiBuYW4KK2Fjb3NoMTAxOSBhY29zaCBuYW4gMi4zIC0+IG5hbiBuYW4KK2Fjb3NoMTAyMCBhY29zaCBuYW4gaW5mIC0+IGluZiBuYW4KK2Fjb3NoMTAyMSBhY29zaCBuYW4gbmFuIC0+IG5hbiBuYW4KK2Fjb3NoMTAyMiBhY29zaCAwLjAgLTAuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gxMDIzIGFjb3NoIC0wLjAgLTAuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYWNvc2gxMDI0IGFjb3NoIDAuMCAtaW5mIC0+IGluZiAtMS41NzA3OTYzMjY3OTQ4OTY2CithY29zaDEwMjUgYWNvc2ggMi4zIC1pbmYgLT4gaW5mIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMTAyNiBhY29zaCAtMC4wIC1pbmYgLT4gaW5mIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMTAyNyBhY29zaCAtMi4zIC1pbmYgLT4gaW5mIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2Fjb3NoMTAyOCBhY29zaCAtaW5mIC0wLjAgLT4gaW5mIC0zLjE0MTU5MjY1MzU4OTc5MzEKK2Fjb3NoMTAyOSBhY29zaCAtaW5mIC0yLjMgLT4gaW5mIC0zLjE0MTU5MjY1MzU4OTc5MzEKK2Fjb3NoMTAzMCBhY29zaCBpbmYgLTAuMCAtPiBpbmYgLTAuMAorYWNvc2gxMDMxIGFjb3NoIGluZiAtMi4zIC0+IGluZiAtMC4wCithY29zaDEwMzIgYWNvc2ggLWluZiAtaW5mIC0+IGluZiAtMi4zNTYxOTQ0OTAxOTIzNDQ4CithY29zaDEwMzMgYWNvc2ggaW5mIC1pbmYgLT4gaW5mIC0wLjc4NTM5ODE2MzM5NzQ0ODI4CithY29zaDEwMzQgYWNvc2ggbmFuIC0wLjAgLT4gbmFuIG5hbgorYWNvc2gxMDM1IGFjb3NoIG5hbiAtMi4zIC0+IG5hbiBuYW4KK2Fjb3NoMTAzNiBhY29zaCBuYW4gLWluZiAtPiBpbmYgbmFuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBhc2luOiBJbnZlcnNlIHNpbmUgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSB6ZXJvcworYXNpbjAwMDAgYXNpbiAwLjAgMC4wIC0+IDAuMCAwLjAKK2FzaW4wMDAxIGFzaW4gMC4wIC0wLjAgLT4gMC4wIC0wLjAKK2FzaW4wMDAyIGFzaW4gLTAuMCAwLjAgLT4gLTAuMCAwLjAKK2FzaW4wMDAzIGFzaW4gLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorCistLSBicmFuY2ggcG9pbnRzOiArLy0xCithc2luMDAxMCBhc2luIDEuMCAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXNpbjAwMTEgYXNpbiAxLjAgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTAuMAorYXNpbjAwMTIgYXNpbiAtMS4wIDAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXNpbjAwMTMgYXNpbiAtMS4wIC0wLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCisKKy0tIHZhbHVlcyBhbG9uZyBib3RoIHNpZGVzIG9mIHJlYWwgYXhpcworYXNpbjAwMjAgYXNpbiAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgMC4wIC0+IC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAKK2FzaW4wMDIxIGFzaW4gLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IC0wLjAgLT4gLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IC0wLjAKK2FzaW4wMDIyIGFzaW4gLTFlLTMwNSAwLjAgLT4gLTFlLTMwNSAwLjAKK2FzaW4wMDIzIGFzaW4gLTFlLTMwNSAtMC4wIC0+IC0xZS0zMDUgLTAuMAorYXNpbjAwMjQgYXNpbiAtMWUtMTUwIDAuMCAtPiAtMWUtMTUwIDAuMAorYXNpbjAwMjUgYXNpbiAtMWUtMTUwIC0wLjAgLT4gLTFlLTE1MCAtMC4wCithc2luMDAyNiBhc2luIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IDAuMCAtPiAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAKK2FzaW4wMDI3IGFzaW4gLTkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLTAuMCAtPiAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wCithc2luMDAyOCBhc2luIC0wLjAwMSAwLjAgLT4gLTAuMDAxMDAwMDAwMTY2NjY2NzQxNiAwLjAKK2FzaW4wMDI5IGFzaW4gLTAuMDAxIC0wLjAgLT4gLTAuMDAxMDAwMDAwMTY2NjY2NzQxNiAtMC4wCithc2luMDAzMCBhc2luIC0wLjU3ODk5OTk5OTk5OTk5OTk2IDAuMCAtPiAtMC42MTc1MDE2NTQ4MTcxNzAwMSAwLjAKK2FzaW4wMDMxIGFzaW4gLTAuNTc4OTk5OTk5OTk5OTk5OTYgLTAuMCAtPiAtMC42MTc1MDE2NTQ4MTcxNzAwMSAtMC4wCithc2luMDAzMiBhc2luIC0wLjk5OTk5OTk5OTk5OTk5OTg5IDAuMCAtPiAtMS41NzA3OTYzMTE4OTM3MzU0IDAuMAorYXNpbjAwMzMgYXNpbiAtMC45OTk5OTk5OTk5OTk5OTk4OSAtMC4wIC0+IC0xLjU3MDc5NjMxMTg5MzczNTQgLTAuMAorYXNpbjAwMzQgYXNpbiAtMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDIuMTA3MzQyNDI1NTQ0NzAxNGUtMDgKK2FzaW4wMDM1IGFzaW4gLTEuMDAwMDAwMDAwMDAwMDAwMiAtMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTIuMTA3MzQyNDI1NTQ0NzAxNGUtMDgKK2FzaW4wMDM2IGFzaW4gLTEuMDAwOTk5OTk5OTk5OTk5OSAwLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAwLjA0NDcxNzYzMzYwODMwNjg0OQorYXNpbjAwMzcgYXNpbiAtMS4wMDA5OTk5OTk5OTk5OTk5IC0wLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wNDQ3MTc2MzM2MDgzMDY4NDkKK2FzaW4wMDM4IGFzaW4gLTIuMCAwLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAxLjMxNjk1Nzg5NjkyNDgxNjgKK2FzaW4wMDM5IGFzaW4gLTIuMCAtMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTEuMzE2OTU3ODk2OTI0ODE2OAorYXNpbjAwNDAgYXNpbiAtMjMuMCAwLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAzLjgyODE2ODQ3MTMzMzEwMTIKK2FzaW4wMDQxIGFzaW4gLTIzLjAgLTAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC0zLjgyODE2ODQ3MTMzMzEwMTIKK2FzaW4wMDQyIGFzaW4gLTEwMDAwMDAwMDAwMDAwMDAwLjAgMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgMzcuNTM0NTA4NjY4NDY0Njc0Cithc2luMDA0MyBhc2luIC0xMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMzcuNTM0NTA4NjY4NDY0Njc0Cithc2luMDA0NCBhc2luIC05Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAwLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAzNDYuMDgwOTExMTI5NjY2NzkKK2FzaW4wMDQ1IGFzaW4gLTkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0wLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMzQ2LjA4MDkxMTEyOTY2Njc5Cithc2luMDA0NiBhc2luIC0xLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiA2ODkuMTY2MDg5OTg1Nzc5NjUKK2FzaW4wMDQ3IGFzaW4gLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtNjg5LjE2NjA4OTk4NTc3OTY1Cithc2luMDA0OCBhc2luIDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IDAuMCAtPiA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAKK2FzaW4wMDQ5IGFzaW4gOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAtMC4wCithc2luMDA1MCBhc2luIDFlLTMwNSAwLjAgLT4gMWUtMzA1IDAuMAorYXNpbjAwNTEgYXNpbiAxZS0zMDUgLTAuMCAtPiAxZS0zMDUgLTAuMAorYXNpbjAwNTIgYXNpbiAxZS0xNTAgMC4wIC0+IDFlLTE1MCAwLjAKK2FzaW4wMDUzIGFzaW4gMWUtMTUwIC0wLjAgLT4gMWUtMTUwIC0wLjAKK2FzaW4wMDU0IGFzaW4gOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAgLT4gOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAKK2FzaW4wMDU1IGFzaW4gOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wIC0+IDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLTAuMAorYXNpbjAwNTYgYXNpbiAwLjAwMSAwLjAgLT4gMC4wMDEwMDAwMDAxNjY2NjY3NDE2IDAuMAorYXNpbjAwNTcgYXNpbiAwLjAwMSAtMC4wIC0+IDAuMDAxMDAwMDAwMTY2NjY2NzQxNiAtMC4wCithc2luMDA1OCBhc2luIDAuNTc4OTk5OTk5OTk5OTk5OTYgMC4wIC0+IDAuNjE3NTAxNjU0ODE3MTcwMDEgMC4wCithc2luMDA1OSBhc2luIDAuNTc4OTk5OTk5OTk5OTk5OTYgLTAuMCAtPiAwLjYxNzUwMTY1NDgxNzE3MDAxIC0wLjAKK2FzaW4wMDYwIGFzaW4gMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAgLT4gMS41NzA3OTYzMTE4OTM3MzU0IDAuMAorYXNpbjAwNjEgYXNpbiAwLjk5OTk5OTk5OTk5OTk5OTg5IC0wLjAgLT4gMS41NzA3OTYzMTE4OTM3MzU0IC0wLjAKK2FzaW4wMDYyIGFzaW4gMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMi4xMDczNDI0MjU1NDQ3MDE0ZS0wOAorYXNpbjAwNjMgYXNpbiAxLjAwMDAwMDAwMDAwMDAwMDIgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTIuMTA3MzQyNDI1NTQ0NzAxNGUtMDgKK2FzaW4wMDY0IGFzaW4gMS4wMDA5OTk5OTk5OTk5OTk5IDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wNDQ3MTc2MzM2MDgzMDY4NDkKK2FzaW4wMDY1IGFzaW4gMS4wMDA5OTk5OTk5OTk5OTk5IC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjA0NDcxNzYzMzYwODMwNjg0OQorYXNpbjAwNjYgYXNpbiAyLjAgMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAxLjMxNjk1Nzg5NjkyNDgxNjgKK2FzaW4wMDY3IGFzaW4gMi4wIC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0xLjMxNjk1Nzg5NjkyNDgxNjgKK2FzaW4wMDY4IGFzaW4gMjMuMCAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDMuODI4MTY4NDcxMzMzMTAxMgorYXNpbjAwNjkgYXNpbiAyMy4wIC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0zLjgyODE2ODQ3MTMzMzEwMTIKK2FzaW4wMDcwIGFzaW4gMTAwMDAwMDAwMDAwMDAwMDAuMCAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDM3LjUzNDUwODY2ODQ2NDY3NAorYXNpbjAwNzEgYXNpbiAxMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0zNy41MzQ1MDg2Njg0NjQ2NzQKK2FzaW4wMDcyIGFzaW4gOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAzNDYuMDgwOTExMTI5NjY2NzkKK2FzaW4wMDczIGFzaW4gOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTM0Ni4wODA5MTExMjk2NjY3OQorYXNpbjAwNzQgYXNpbiAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDY4OS4xNjYwODk5ODU3Nzk2NQorYXNpbjAwNzUgYXNpbiAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtNjg5LjE2NjA4OTk4NTc3OTY1CisKKy0tIHJhbmRvbSBpbnB1dHMKK2FzaW4wMTAwIGFzaW4gLTEuNTk3OTU1NTgzNTA4NjA4MyAtMC4xNTAwMzAwOTgxNDU5NTI0NyAtPiAtMS40NTE1MzY5NTU3NDA1Nzg4IC0xLjA1NDQ0NzYzOTk3OTA4MjMKK2FzaW4wMTAxIGFzaW4gLTAuNTc0ODgyMjU4OTUzMTc2NzkgLTkuNjA4MDM5NzgzODk1Mjc0M2UtMTMgLT4gLTAuNjEyNDYwMjQ0NjA0MTI4NTEgLTEuMTc0MjM4MDA1NDAwNDAzZS0xMgorYXNpbjAxMDIgYXNpbiAtMy42NTA4MDg3OTMwNTE2MjQ5IC0wLjM2MDI3NTI3MDkzMjIwMTUyIC0+IC0xLjQ2ODU4OTA2MDUzMDU4NzQgLTEuOTc0MjI3MzAwNzE1MjAzOAorYXNpbjAxMDMgYXNpbiAtMS41MjM4NjU5NzkyMzI2ODE5IC0xLjEzNjA4MTM1MTY5OTYzNjQgLT4gLTAuODYwODAwNTE2OTExNDcyNzUgLTEuMzIyMzc0MjIwNTY4OTE5NQorYXNpbjAxMDQgYXNpbiAtMTU5Mi4wNjM5MDQ1NTU1MzA2IC0wLjcyMzYyNDI3OTM1MDE4MjM2IC0+IC0xLjU3MDM0MTgwNzExNzUxNzkgLTguMDY1OTMzNjkxODcyOTIyOAorYXNpbjAxMDUgYXNpbiAtMC4xOTgzNTQ3MTM3MTMxMjAxOSA0LjIxMzE1MDg0MTY2OTc3MDkgLT4gLTAuMDQ1Nzc3ODMxMDE5OTM1MTQ5IDIuMTQ2MTczMjc1MTkzMzE3MQorYXNpbjAxMDYgYXNpbiAtMS45MTg0NzEwNTQ0MzAyMTMgMC40MDYwMzMwNTA3OTc3OTIzNCAtPiAtMS4zMzAxMzk2NTg1NzkxNTU2IDEuMzAyNjM2NDIzMTQ5ODEKK2FzaW4wMTA3IGFzaW4gLTI1NDQ5NS4wMTYyMzM3MzY0MiAwLjcxMDg0NDE0NDM0NDcwODIyIC0+IC0xLjU3MDc5MzUzMzYzOTQzNTkgMTMuMTQwMTgzNzEyNzYyMzIxCithc2luMDEwOCBhc2luIC0wLjMxMzE1ODgyNzE1NjkxMTU3IDMuOTY0Nzk5NDI4ODQyOTg2NiAtPiAtMC4wNzY0NTA0MDM4NDA5MTYwMDQgMi4wODg5NzYyMTM4NzEzNDU3Cithc2luMDEwOSBhc2luIC0wLjkwMDE3MDY0Mjg0NzIwODE2IDEuMjUzMDY1OTQ4NTkwNzEwNSAtPiAtMC41MzQ2NjUwOTc0MTk0MzQ0NyAxLjE3MDI4MTE1NTc1NzcKK2FzaW4wMTEwIGFzaW4gMi4xNjE1MTgxNjk2NTcxMDc1IC0wLjE0MDU4NjQ3NDg4MjI5NTIzIC0+IDEuNDk3NjE2NjMyMzg5Njg3MSAtMS40MDg1ODExMDM5MzM0NjA0Cithc2luMDExMSBhc2luIDEuMjEwNDc0OTIxMDcwNzc5NSAtMC44NTczMjQ4NDQ4NTI5ODk5OSAtPiAwLjgzOTEzMDcxNTg4MzQzOTI0IC0xLjA2ODE3MTkyNTA1MjU5MDEKK2FzaW4wMTEyIGFzaW4gMS43MDU5NzMzMTg1MTI4ODkxIC0wLjg0MDMyOTY2MzczMTU2NTgxIC0+IDEuMDUxMDkwMDgxNTgxNjIyOSAtMS4yOTY3OTc5NzkxMzYxNjUyCithc2luMDExMyBhc2luIDkuOTEzNzA4NTAxNzI5MDY4NyAtMS40NjA4MzgzOTcwMjUwODkzIC0+IDEuNDIzNzcwNDgyMDEyODg5MSAtMi45OTU0MTQ2Nzc1NjA2ODYKK2FzaW4wMTE0IGFzaW4gMTE3LjEyMzQ0NzUxMDQxNDk1IC01NDUzOTA4MDkxLjUzMzQwMTUgLT4gMi4xNDc1MTQxNDExMzkyMDEyZS0wOCAtMjMuMTEyNzQ1NDUwMjE3MDY2Cithc2luMDExNSBhc2luIDAuMDgxMDQxMTg3Nzk4MDI5MjI3IDAuMDY3MDU0MzQ5ODYwMTczMTk2IC0+IDAuMDgwOTQ2Nzg2ODU2NzcxODEzIDAuMDY3MjIzOTkxMDYwNjM5Njk4Cithc2luMDExNiBhc2luIDQ2LjYzNTQ3MjMyMjA0OTk0OSAyLjM4MzUxOTA3MTgwNTY2NzggLT4gMS41MTk3MTk0OTQwMDEwNzc5IDQuNTM2Njk4OTYwMDk3MjA4MworYXNpbjAxMTcgYXNpbiAzOTA3LjA2ODc5NjExMjcxMDUgMTkuMTQ0MDIxODg2MzkwMTgxIC0+IDEuNTY1ODk2NTIzMzA4MzIzNSA4Ljk2MzcwMTg3MTU5MjQyMTcKK2FzaW4wMTE4IGFzaW4gMS4wODg5MzEyMzIyMzA4MjczIDUwOS4wMTU3Nzg4MzU1NDc2OCAtPiAwLjAwMjEzOTI4MDM4MTc4MjkzMTYgNi45MjU2Mjk0NDk0NTI0NzA2Cithc2luMDExOSBhc2luIDAuMTA4NTE1MTgyNzc1MDkyMjQgMS41NjEyNTEwOTA4MjE3NDc2IC0+IDAuMDU4NDkxMDE0MjQzOTAyNjIxIDEuMjI5NzA3NTcyNTYyMTMyNworCistLSB2YWx1ZXMgbmVhciBpbmZpbml0eQorYXNpbjAyMDAgYXNpbiAxLjUyMzAyNDE5OTg4MjE0OTllKzMwOCA1LjU3MDcyMjg5OTQwODQ1MjVlKzMwNyAtPiAxLjIyMDE0NDYzNzA4OTIwNjggNzEwLjM3MjgzNDg2NTM1OTY2Cithc2luMDIwMSBhc2luIDguMTMzNDMxNzY5ODY3MjIwNGUrMzA3IC05LjIyNDk0MjUxOTc4NzI0NTFlKzMwNyAtPiAwLjcyMjU5OTkxMjg0MDIwMDQyIC03MTAuMDk2MjQ1MzA0OTAyNgorYXNpbjAyMDIgYXNpbiAtOS45MTM4NTA2NjU5MjQxNzY4ZSszMDcgNi43MDE1NDQ1MjY0MzQ5OTVlKzMwNyAtPiAtMC45NzYzNzUxMTc0MjE5NDU5NCA3MTAuMDY4ODc0ODY2NzEzNzEKK2FzaW4wMjAzIGFzaW4gLTEuNDE0MTI5ODg2ODE3Mzg0MmUrMzA4IC01LjQwMTUwNTEzNDUxNDE5MWUrMzA3IC0+IC0xLjIwNTkzMTkwNTUxNjA1ODcgLTcxMC4zMDM5NjQ3ODk1NDYyOAorYXNpbjAyMDQgYXNpbiAwLjAgOS4xNjE4MDkyOTc3ODk3NDMxZSszMDcgLT4gMC4wIDcwOS44MDE4MTQ0MTA1MDU5MworYXNpbjAyMDUgYXNpbiAtMC4wIDYuODA2NDM0MjU1MTkzOTc1NWUrMzA3IC0+IC0wLjAgNzA5LjUwNDYzOTEwODUzNDg5Cithc2luMDIwNiBhc2luIDAuMCAtNi40OTk3NTE2NDU0Nzk4MjE1ZSszMDcgLT4gMC4wIC03MDkuNDU4NTM0Njk3NTE1OTIKK2FzaW4wMjA3IGFzaW4gLTAuMCAtMS42NzY3NDQ5MDUzMzQ1MjQyZSszMDggLT4gLTAuMCAtNzEwLjQwNjIxMDE4MDMwMjIKK2FzaW4wMjA4IGFzaW4gNS40MjQyNzQ5OTU3Mzc4OTE2ZSszMDcgMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiA3MDkuMjc3NjU0OTc4ODg5MDIKK2FzaW4wMjA5IGFzaW4gOS41MzQyMTQ1MTIxMTY0NzQ5ZSszMDcgLTAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTcwOS44NDE2NTc1ODU5NTkwNworYXNpbjAyMTAgYXNpbiAtNy4wNDQ1Njk4MDA2MjAxODQ3ZSszMDcgMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgNzA5LjUzOTAyNzgwODcyMTM2Cithc2luMDIxMSBhc2luIC0xLjAwMTYwMjU1Njk3Njk3MDZlKzMwOCAtMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTcwOS44OTA5NTcwOTY5Nzg4MQorYXNpbjAyMTIgYXNpbiAxLjY1NTIyMDM3Nzg4NzcyMDRlKzMwOCAwLjQ4NzYxNTQzMzM2MjQ5NDkxIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiA3MTAuMzkzMjg5OTgxNTM0NzQKK2FzaW4wMjEzIGFzaW4gMS4yNDg1NzEyODMwMzg0ODY5ZSszMDggLTQuMzQ4OTMxMTE2MTI3ODg5OSAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTcxMC4xMTEzNTU3NDY3Nzg2Cithc2luMDIxNCBhc2luIC0xLjUxMTc4NDI4MTMzNTMxMjVlKzMwOCA1LjEyMzQ1MjY2NjEwMjQzNCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDcxMC4zMDI2NDY0MTkyMzAzMQorYXNpbjAyMTUgYXNpbiAtMS4zMTY3NjM0MzEzMDA4MDE2ZSszMDggLTAuNTI5Mzk2Nzk3OTM1Mjg5ODIgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtNzEwLjE2NDUzMjYwMjM5NzY4Cithc2luMDIxNiBhc2luIDAuODA4NDM5MjkxNzY5ODU5MDcgMS4wMTUwODUxODI3NzY3ODc2ZSszMDggLT4gNy45NjQyNTA3Mzk2MTEzODc1ZS0zMDkgNzA5LjkwNDMyODM1NTYxNjM3Cithc2luMDIxNyBhc2luIDguMjU0NDgwOTgyOTY4MDkwMSAtMS43NDIzNTQ4MTQwNTM5NDc0ZSszMDggLT4gNC43Mzc1NDMwNzQ2ODY1NzMzZS0zMDggLTcxMC40NDQ1OTMzNjI0MjE2NAorYXNpbjAyMTggYXNpbiAtNS4yNDk5MDAwMTE4ODI0Mjk1IDQuNjY1NTU3ODk3NzUxMjIxNGUrMzA3IC0+IC0xLjEyNTI0NTkyNDkxMTMyOTJlLTMwNyA3MDkuMTI2OTc4MTQ5MTEwMworYXNpbjAyMTkgYXNpbiAtNS45OTA0NzgyNzYwODMzNDMzIC00LjczMTU2ODkzMTQ3ODExNjNlKzMwNyAtPiAtMS4yNjYwNjU5NDE5Mzk0NjM3ZS0zMDcgLTcwOS4xNDEwMjc1NzUyMjMxMgorCistLSBzcGVjaWFsIHZhbHVlcworYXNpbjEwMDAgYXNpbiAtMC4wIDAuMCAtPiAtMC4wIDAuMAorYXNpbjEwMDEgYXNpbiAwLjAgMC4wIC0+IDAuMCAwLjAKK2FzaW4xMDAyIGFzaW4gLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorYXNpbjEwMDMgYXNpbiAwLjAgLTAuMCAtPiAwLjAgLTAuMAorYXNpbjEwMDQgYXNpbiAtaW5mIDAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IGluZgorYXNpbjEwMDUgYXNpbiAtaW5mIDIuMjk5OTk5OTk5OTk5OTk5OCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IGluZgorYXNpbjEwMDYgYXNpbiBuYW4gMC4wIC0+IG5hbiBuYW4KK2FzaW4xMDA3IGFzaW4gbmFuIDIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuCithc2luMTAwOCBhc2luIC0wLjAgaW5mIC0+IC0wLjAgaW5mCithc2luMTAwOSBhc2luIC0yLjI5OTk5OTk5OTk5OTk5OTggaW5mIC0+IC0wLjAgaW5mCithc2luMTAxMCBhc2luIC1pbmYgaW5mIC0+IC0wLjc4NTM5ODE2MzM5NzQ0ODI4IGluZgorYXNpbjEwMTEgYXNpbiBuYW4gaW5mIC0+IG5hbiBpbmYKK2FzaW4xMDEyIGFzaW4gLTAuMCBuYW4gLT4gLTAuMCBuYW4KK2FzaW4xMDEzIGFzaW4gLTIuMjk5OTk5OTk5OTk5OTk5OCBuYW4gLT4gbmFuIG5hbgorYXNpbjEwMTQgYXNpbiAtaW5mIG5hbiAtPiBuYW4gaW5mIGlnbm9yZS1pbWFnLXNpZ24KK2FzaW4xMDE1IGFzaW4gbmFuIG5hbiAtPiBuYW4gbmFuCithc2luMTAxNiBhc2luIGluZiAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IGluZgorYXNpbjEwMTcgYXNpbiBpbmYgMi4yOTk5OTk5OTk5OTk5OTk4IC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiBpbmYKK2FzaW4xMDE4IGFzaW4gMC4wIGluZiAtPiAwLjAgaW5mCithc2luMTAxOSBhc2luIDIuMjk5OTk5OTk5OTk5OTk5OCBpbmYgLT4gMC4wIGluZgorYXNpbjEwMjAgYXNpbiBpbmYgaW5mIC0+IDAuNzg1Mzk4MTYzMzk3NDQ4MjggaW5mCithc2luMTAyMSBhc2luIDAuMCBuYW4gLT4gMC4wIG5hbgorYXNpbjEwMjIgYXNpbiAyLjI5OTk5OTk5OTk5OTk5OTggbmFuIC0+IG5hbiBuYW4KK2FzaW4xMDIzIGFzaW4gaW5mIG5hbiAtPiBuYW4gaW5mIGlnbm9yZS1pbWFnLXNpZ24KK2FzaW4xMDI0IGFzaW4gaW5mIC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC1pbmYKK2FzaW4xMDI1IGFzaW4gaW5mIC0yLjI5OTk5OTk5OTk5OTk5OTggLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC1pbmYKK2FzaW4xMDI2IGFzaW4gbmFuIC0wLjAgLT4gbmFuIG5hbgorYXNpbjEwMjcgYXNpbiBuYW4gLTIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuCithc2luMTAyOCBhc2luIDAuMCAtaW5mIC0+IDAuMCAtaW5mCithc2luMTAyOSBhc2luIDIuMjk5OTk5OTk5OTk5OTk5OCAtaW5mIC0+IDAuMCAtaW5mCithc2luMTAzMCBhc2luIGluZiAtaW5mIC0+IDAuNzg1Mzk4MTYzMzk3NDQ4MjggLWluZgorYXNpbjEwMzEgYXNpbiBuYW4gLWluZiAtPiBuYW4gLWluZgorYXNpbjEwMzIgYXNpbiAtaW5mIC0wLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtaW5mCithc2luMTAzMyBhc2luIC1pbmYgLTIuMjk5OTk5OTk5OTk5OTk5OCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC1pbmYKK2FzaW4xMDM0IGFzaW4gLTAuMCAtaW5mIC0+IC0wLjAgLWluZgorYXNpbjEwMzUgYXNpbiAtMi4yOTk5OTk5OTk5OTk5OTk4IC1pbmYgLT4gLTAuMCAtaW5mCithc2luMTAzNiBhc2luIC1pbmYgLWluZiAtPiAtMC43ODUzOTgxNjMzOTc0NDgyOCAtaW5mCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBhc2luaDogSW52ZXJzZSBoeXBlcmJvbGljIHNpbmUgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSB6ZXJvcworYXNpbmgwMDAwIGFzaW5oIDAuMCAwLjAgLT4gMC4wIDAuMAorYXNpbmgwMDAxIGFzaW5oIDAuMCAtMC4wIC0+IDAuMCAtMC4wCithc2luaDAwMDIgYXNpbmggLTAuMCAwLjAgLT4gLTAuMCAwLjAKK2FzaW5oMDAwMyBhc2luaCAtMC4wIC0wLjAgLT4gLTAuMCAtMC4wCisKKy0tIGJyYW5jaCBwb2ludHM6ICsvLWkKK2FzaW5oMDAxMCBhc2luaCAwLjAgMS4wIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDAxMSBhc2luaCAwLjAgLTEuMCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDEyIGFzaW5oIC0wLjAgMS4wIC0+IC0wLjAgMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwMTMgYXNpbmggLTAuMCAtMS4wIC0+IC0wLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorCistLSB2YWx1ZXMgYWxvbmcgYm90aCBzaWRlcyBvZiBpbWFnaW5hcnkgYXhpcworYXNpbmgwMDIwIGFzaW5oIDAuMCAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLT4gMC4wIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNAorYXNpbmgwMDIxIGFzaW5oIC0wLjAgLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IC0+IC0wLjAgLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0Cithc2luaDAwMjIgYXNpbmggMC4wIC0xZS0zMDUgLT4gMC4wIC0xZS0zMDUKK2FzaW5oMDAyMyBhc2luaCAtMC4wIC0xZS0zMDUgLT4gLTAuMCAtMWUtMzA1Cithc2luaDAwMjQgYXNpbmggMC4wIC0xZS0xNTAgLT4gMC4wIC0xZS0xNTAKK2FzaW5oMDAyNSBhc2luaCAtMC4wIC0xZS0xNTAgLT4gLTAuMCAtMWUtMTUwCithc2luaDAwMjYgYXNpbmggMC4wIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0+IDAuMCAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNworYXNpbmgwMDI3IGFzaW5oIC0wLjAgLTkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLT4gLTAuMCAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNworYXNpbmgwMDI4IGFzaW5oIDAuMCAtMC4wMDEgLT4gMC4wIC0wLjAwMTAwMDAwMDE2NjY2Njc0MTYKK2FzaW5oMDAyOSBhc2luaCAtMC4wIC0wLjAwMSAtPiAtMC4wIC0wLjAwMTAwMDAwMDE2NjY2Njc0MTYKK2FzaW5oMDAzMCBhc2luaCAwLjAgLTAuNTc4OTk5OTk5OTk5OTk5OTYgLT4gMC4wIC0wLjYxNzUwMTY1NDgxNzE3MDAxCithc2luaDAwMzEgYXNpbmggLTAuMCAtMC41Nzg5OTk5OTk5OTk5OTk5NiAtPiAtMC4wIC0wLjYxNzUwMTY1NDgxNzE3MDAxCithc2luaDAwMzIgYXNpbmggMC4wIC0wLjk5OTk5OTk5OTk5OTk5OTg5IC0+IDAuMCAtMS41NzA3OTYzMTE4OTM3MzU0Cithc2luaDAwMzMgYXNpbmggLTAuMCAtMC45OTk5OTk5OTk5OTk5OTk4OSAtPiAtMC4wIC0xLjU3MDc5NjMxMTg5MzczNTQKK2FzaW5oMDAzNCBhc2luaCAwLjAgLTEuMDAwMDAwMDAwMDAwMDAwMiAtPiAyLjEwNzM0MjQyNTU0NDcwMTRlLTA4IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDAzNSBhc2luaCAtMC4wIC0xLjAwMDAwMDAwMDAwMDAwMDIgLT4gLTIuMTA3MzQyNDI1NTQ0NzAxNGUtMDggLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDM2IGFzaW5oIDAuMCAtMS4wMDA5OTk5OTk5OTk5OTk5IC0+IDAuMDQ0NzE3NjMzNjA4MzA2ODQ5IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDAzNyBhc2luaCAtMC4wIC0xLjAwMDk5OTk5OTk5OTk5OTkgLT4gLTAuMDQ0NzE3NjMzNjA4MzA2ODQ5IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDAzOCBhc2luaCAwLjAgLTIuMCAtPiAxLjMxNjk1Nzg5NjkyNDgxNjggLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDM5IGFzaW5oIC0wLjAgLTIuMCAtPiAtMS4zMTY5NTc4OTY5MjQ4MTY4IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDA0MCBhc2luaCAwLjAgLTIwLjAgLT4gMy42ODgyNTM4NjczNjEyOTY2IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDA0MSBhc2luaCAtMC4wIC0yMC4wIC0+IC0zLjY4ODI1Mzg2NzM2MTI5NjYgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDQyIGFzaW5oIDAuMCAtMTAwMDAwMDAwMDAwMDAwMDAuMCAtPiAzNy41MzQ1MDg2Njg0NjQ2NzQgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDQzIGFzaW5oIC0wLjAgLTEwMDAwMDAwMDAwMDAwMDAwLjAgLT4gLTM3LjUzNDUwODY2ODQ2NDY3NCAtMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNDQgYXNpbmggMC4wIC05Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtPiAzNDYuMDgwOTExMTI5NjY2NzkgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDQ1IGFzaW5oIC0wLjAgLTkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0+IC0zNDYuMDgwOTExMTI5NjY2NzkgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDQ2IGFzaW5oIDAuMCAtMS4wMDAwMDAwMDAwMDAwMDAxZSsyOTkgLT4gNjg5LjE2NjA4OTk4NTc3OTY1IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDA0NyBhc2luaCAtMC4wIC0xLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtPiAtNjg5LjE2NjA4OTk4NTc3OTY1IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDA0OCBhc2luaCAwLjAgOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLT4gMC4wIDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0Cithc2luaDAwNDkgYXNpbmggLTAuMCA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAtPiAtMC4wIDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0Cithc2luaDAwNTAgYXNpbmggMC4wIDFlLTMwNSAtPiAwLjAgMWUtMzA1Cithc2luaDAwNTEgYXNpbmggLTAuMCAxZS0zMDUgLT4gLTAuMCAxZS0zMDUKK2FzaW5oMDA1MiBhc2luaCAwLjAgMWUtMTUwIC0+IDAuMCAxZS0xNTAKK2FzaW5oMDA1MyBhc2luaCAtMC4wIDFlLTE1MCAtPiAtMC4wIDFlLTE1MAorYXNpbmgwMDU0IGFzaW5oIDAuMCA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0+IDAuMCA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3Cithc2luaDAwNTUgYXNpbmggLTAuMCA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0+IC0wLjAgOS45OTk5OTk5OTk5OTk5OTk4ZS0xNworYXNpbmgwMDU2IGFzaW5oIDAuMCAwLjAwMSAtPiAwLjAgMC4wMDEwMDAwMDAxNjY2NjY3NDE2Cithc2luaDAwNTcgYXNpbmggLTAuMCAwLjAwMSAtPiAtMC4wIDAuMDAxMDAwMDAwMTY2NjY2NzQxNgorYXNpbmgwMDU4IGFzaW5oIDAuMCAwLjU3ODk5OTk5OTk5OTk5OTk2IC0+IDAuMCAwLjYxNzUwMTY1NDgxNzE3MDAxCithc2luaDAwNTkgYXNpbmggLTAuMCAwLjU3ODk5OTk5OTk5OTk5OTk2IC0+IC0wLjAgMC42MTc1MDE2NTQ4MTcxNzAwMQorYXNpbmgwMDYwIGFzaW5oIDAuMCAwLjk5OTk5OTk5OTk5OTk5OTg5IC0+IDAuMCAxLjU3MDc5NjMxMTg5MzczNTQKK2FzaW5oMDA2MSBhc2luaCAtMC4wIDAuOTk5OTk5OTk5OTk5OTk5ODkgLT4gLTAuMCAxLjU3MDc5NjMxMTg5MzczNTQKK2FzaW5oMDA2MiBhc2luaCAwLjAgMS4wMDAwMDAwMDAwMDAwMDAyIC0+IDIuMTA3MzQyNDI1NTQ0NzAxNGUtMDggMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNjMgYXNpbmggLTAuMCAxLjAwMDAwMDAwMDAwMDAwMDIgLT4gLTIuMTA3MzQyNDI1NTQ0NzAxNGUtMDggMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNjQgYXNpbmggMC4wIDEuMDAwOTk5OTk5OTk5OTk5OSAtPiAwLjA0NDcxNzYzMzYwODMwNjg0OSAxLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDA2NSBhc2luaCAtMC4wIDEuMDAwOTk5OTk5OTk5OTk5OSAtPiAtMC4wNDQ3MTc2MzM2MDgzMDY4NDkgMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNjYgYXNpbmggMC4wIDIuMCAtPiAxLjMxNjk1Nzg5NjkyNDgxNjggMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNjcgYXNpbmggLTAuMCAyLjAgLT4gLTEuMzE2OTU3ODk2OTI0ODE2OCAxLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDA2OCBhc2luaCAwLjAgMjAuMCAtPiAzLjY4ODI1Mzg2NzM2MTI5NjYgMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNjkgYXNpbmggLTAuMCAyMC4wIC0+IC0zLjY4ODI1Mzg2NzM2MTI5NjYgMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNzAgYXNpbmggMC4wIDEwMDAwMDAwMDAwMDAwMDAwLjAgLT4gMzcuNTM0NTA4NjY4NDY0Njc0IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDcxIGFzaW5oIC0wLjAgMTAwMDAwMDAwMDAwMDAwMDAuMCAtPiAtMzcuNTM0NTA4NjY4NDY0Njc0IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDcyIGFzaW5oIDAuMCA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtPiAzNDYuMDgwOTExMTI5NjY2NzkgMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNzMgYXNpbmggLTAuMCA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtPiAtMzQ2LjA4MDkxMTEyOTY2Njc5IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMDc0IGFzaW5oIDAuMCAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtPiA2ODkuMTY2MDg5OTg1Nzc5NjUgMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDAwNzUgYXNpbmggLTAuMCAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtPiAtNjg5LjE2NjA4OTk4NTc3OTY1IDEuNTcwNzk2MzI2Nzk0ODk2NgorCistLSByYW5kb20gaW5wdXRzCithc2luaDAxMDAgYXNpbmggLTAuNTk0NjQwMjg1MzcxMDQyMyAtMC4wNDQ1MDY1NDg5MTAwMDAxNDUgLT4gLTAuNTY0NTk3NzUzOTI2NTMwMjIgLTAuMDM4MjU2MjIxNDQxNTM2MzU2Cithc2luaDAxMDEgYXNpbmggLTAuMTkzNTM5NTgwNDYxODA5MTYgLTAuMDE3NDg5NjI0NzkzMTkzNDU0IC0+IC0wLjE5MjM3OTI2ODA0MTk2NjUxIC0wLjAxNzE3MTc0MTg5NTMzNjc5MgorYXNpbmgwMTAyIGFzaW5oIC0wLjAzMzExNzU4NTEzODk1NTg5MyAtOC41MjU2NDE0MDE1OTMzNzU3IC0+IC0yLjgzMjc3NTgzNDg2NTA5NjkgLTEuNTY2ODg0ODc5MTA5MjQxMQorYXNpbmgwMTAzIGFzaW5oIC0xLjUxODQwNDMxODQwMzU3MTYgLTAuNzM0OTEyNDUzMzkwNzMyNzUgLT4gLTEuMjcxNTg5MTQxOTc2NDAwNSAtMC4zOTIwNDYyNDQwODU0MjM1NQorYXNpbmgwMTA0IGFzaW5oIC0wLjYwNzE2MTIwMjcxMjA4ODE4IC0wLjI4OTAwNzQzOTU4NDM2NTQyIC0+IC0wLjU5MTE5Mjk5NDIxMTg3MjMyIC0wLjI0NzQ1OTMxNjc4MTE4MTM1Cithc2luaDAxMDUgYXNpbmggLTAuMDIzNzE3Nzg2NTExMjQyOSAyLjg4MzI2MDEwNTIxNjYzMTMgLT4gLTEuNzIwNTgyMDc3MjQxMzIzNiAxLjU2MjAyNjE3MDI5NjMwOTQKK2FzaW5oMDEwNiBhc2luaCAtMi4zOTA2ODEyMzQyNzQzOTc5IDIuNjM0OTIxNjg0ODU3NDAxMyAtPiAtMS45NjA5NjM2MjQ5NDQ1MTI0IDAuODE0MjE0MjY2MDU3NDcwNgorYXNpbmgwMTA3IGFzaW5oIC0wLjAwMjc2MDUwMTk3ODc2MjA1MTcgMTgzLjg1NTg4NDc2NTUwNTU1IC0+IC01LjkwNzI5MjAwMDU0NDUwNjYgMS41NzA3ODEzMTIwODQ3ODcxCithc2luaDAxMDggYXNpbmggLTAuOTkwODM2NjExNjQ0MDQ3MTMgMC4wMjgwMDY3OTcwNTE2MTc2NDggLT4gLTAuODc1MDE4NTI1MTI4Mzk5NSAwLjAxOTg5NDA5OTYxNTk5NDY1MworYXNpbmgwMTA5IGFzaW5oIC0zLjAzNjI5NTE5Mzc5ODYzOTMgMC44NjM3NzI2Njc1ODUwNDg2NyAtPiAtMS44NjM2MDMwNzE0Njg1MjIxIDAuMjY0NzUwNTg4NTk5NTAxNjgKK2FzaW5oMDExMCBhc2luaCAwLjM0NDM4NDY0NTM2MTUyNzY5IC0wLjcxNjAzNzkwMTc0ODg1MDI5IC0+IDAuNDM5ODU0MTU2OTA3MzQxNjQgLTAuNzEwMTUwMzc0MDkyOTQzMjQKK2FzaW5oMDExMSBhc2luaCA0LjQ5MjUxMjQ0MTM4NzYyNTYgLTYwNjA0NTk1MzUyLjg3MTYxMyAtPiAyNS41MjA3ODM3Mzg2MTIwNzggLTEuNTcwNzk2MzI2NzIwNzY4MworYXNpbmgwMTEyIGFzaW5oIDIuMzIxMzk5MTQyODE3MDMzNyAtNy41NDU5NjY3MDA3MzA3MjU4IC0+IDIuNzU2MDQ2NDk5MzQ1MTY0MyAtMS4yNzAwNzMyMTA4NTYxMTcKK2FzaW5oMDExMyBhc2luaCAwLjIxMjkxOTM5NzQxNjgyMDI4IC0xLjI3MjA0Mjg4MTQ3ODQ0MDggLT4gMC43NzI3NTA4ODEzNzMzODI2NiAtMS4zMTgyMDk5MjUwODk2ODk1Cithc2luaDAxMTQgYXNpbmggNi42NDQ3MzU5Mzc5NDU1OTU3IC0wLjk3MTk2MTkxNjY2OTQ2OTk2IC0+IDIuNjAyODMwNjk1MTM5NjcyIC0wLjE0MzY4MjQ3NDEyMzE5OTY1Cithc2luaDAxMTUgYXNpbmggNy4xMzI2MjU2NjU1MDgzNzQ2IDIuMTUxNjM2MDQ1MjcwNjg1NyAtPiAyLjcwNTExNDYzNzQzNjcyMTIgMC4yOTA1MTcwMTY2OTcyNzU4MQorYXNpbmgwMTE2IGFzaW5oIDAuMTg4NDY1NTA5MDUwNjM0NDIgMy40NzA1MzQ4NTg1MzM5ODMyIC0+IDEuOTE3Njk3ODc1Nzk5Mjk2IDEuNTE0MTU1NTkzMzQ3OTI0Cithc2luaDAxMTcgYXNpbmggMC4xOTA2NTA3NTMwMzI4MTU5OCAwLjI2MjE2ODE0NTQ4MjIyMDEyIC0+IDAuMTk2MDMwNTA3ODU5MzI0NzQgMC4yNjAxMzQyMjgwOTYxNDExNworYXNpbmgwMTE4IGFzaW5oIDIuMDI0MjAwNDY2NTczOTcxOSAwLjcwNTEwMjgxNjQ3NDk1Nzg3IC0+IDEuNDk3MDM2NjIxMjg5NjAwMiAwLjMwNTI2MDA3MjAwNDgxNDUzCithc2luaDAxMTkgYXNpbmggMzcuMzM2NTk2NDYxNTc2MDU3IDcxNy4yOTE1NzM5MTY3ODIzNCAtPiA3LjI2OTk4MTk5Nzk0NTI5NCAxLjUxODc5MTAyMTk1NzYwMzMKKworLS0gdmFsdWVzIG5lYXIgaW5maW5pdHkKK2FzaW5oMDIwMCBhc2luaCAxLjA3NjA1MTc1MDA4NzQ1NDFlKzMwOCAxLjE0OTc3ODYyNDEyNDAxNjdlKzMwOCAtPiA3MTAuMzQzNDYwNTU2NTE4MTUgMC44MTg1MDkzNjk2MTc5MzQ3NQorYXNpbmgwMjAxIGFzaW5oIDEuMTc4NDgzOTMyODg0NTUyOWUrMzA4IC0xLjY0Nzg0Mjk1ODY3MTY2MzhlKzMwOCAtPiA3MTAuNTk1MzYyNTU3ODM2NzggLTAuOTQ5OTYzMTE3MzU2MDc2OTcKK2FzaW5oMDIwMiBhc2luaCAtNC44Nzc3NjgyMjQ4OTA5MTkzZSszMDcgMS40MTAzNzM2MjE3NTM4NDc0ZSszMDggLT4gLTcxMC4yODk3MDE0NzM3Njk5MiAxLjIzNzgyMzk1MTkwOTY0NDMKK2FzaW5oMDIwMyBhc2luaCAtMS4yODMyNDc4OTAzMjMzMTA4ZSszMDggLTEuNTczMjM5MjYxMzE1NTY5OGUrMzA4IC0+IC03MTAuNTk3NTAxNjQyOTA3NDUgLTAuODg2NTcxODE0MzkzMjI0NTIKK2FzaW5oMDIwNCBhc2luaCAwLjAgNi44NDMxMzgzODU2MzQ1MzcyZSszMDcgLT4gNzA5LjUxMDAxNzE4NDQ0NjA0IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMjA1IGFzaW5oIC0wLjAgOC42MDE4MjI0MzIyMzgwNTFlKzMwNyAtPiAtNzA5LjczODc0NDgyMTI2Njg5IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMjA2IGFzaW5oIDAuMCAtNS41Njk4Mzk2MDY3MzAzNzgyZSszMDcgLT4gNzA5LjMwNDEzNjk4NzMzNzQyIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDIwNyBhc2luaCAtMC4wIC03LjE1MDc3Nzc3MzQ2MjE4MDRlKzMwNyAtPiAtNzA5LjU1Mzk5MTg2MDAyNzA1IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDIwOCBhc2luaCAxLjYwMjUxMzYxMTAwMTkzNDllKzMwOCAwLjAgLT4gNzEwLjM2MDkyOTIyNjEwNzYgMC4wCithc2luaDAyMDkgYXNpbmggMS4zOTI3ODE5ODU4MjM5MTE0ZSszMDggLTAuMCAtPiA3MTAuMjIwNjU4OTk4MzI4OTkgLTAuMAorYXNpbmgwMjEwIGFzaW5oIC02LjA0NDI5OTQwNTYyMTA5OTVlKzMwNyAwLjAgLT4gLTcwOS4zODU4ODYzMTA1NzYyMSAwLjAKK2FzaW5oMDIxMSBhc2luaCAtMS4yNzc1MjcxOTc5MDQyNjM0ZSszMDggLTAuMCAtPiAtNzEwLjEzNDI4MjE1NTUzOTcyIC0wLjAKK2FzaW5oMDIxMiBhc2luaCAxLjA2ODc0OTYyNjAyNjg0ODllKzMwOCAxLjAyNTU2MTU2OTk0NzY5NjEgLT4gNzA5Ljk1NTg0NTIxNDA3ODQxIDkuNTk1OTAxMDg4MjY3OTA5M2UtMzA5Cithc2luaDAyMTMgYXNpbmggMS4wMDUwOTY3MzMzMzcwOTYyZSszMDggLTAuODc2Njg5NzAxMTczMzM0MzMgLT4gNzA5Ljg5NDQzOTYxMTY4MTgzIC04LjcyMjQ0MTA1NTYyNDI4ODJlLTMwOQorYXNpbmgwMjE0IGFzaW5oIC01LjcxNjE0NTI4MTQ4NjIzOTJlKzMwNyA4LjIzNzc4MDg0MTM0NTAxMjIgLT4gLTcwOS4zMzAwNjU0MDYxMTE2NiAxLjQ0MTE0MjY2NDQ1MDExMTZlLTMwNworYXNpbmgwMjE1IGFzaW5oIC04LjIwMDkwNDA3Mjc2NTMzMTVlKzMwNyAtNi40MDc0MDk1MjY2NTQ5NzYgLT4gLTcwOS42OTEwMTUxMzA3MDEwOSAtNy44MTMwNTI2NDYxNTEwMDg4ZS0zMDgKK2FzaW5oMDIxNiBhc2luaCA2LjQyMzkzNjg0OTY0ODM5ODIgMS42MzY1OTkwODIxNTUxNDI3ZSszMDggLT4gNzEwLjM4MTk3NjE4MTAxMjg3IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgwMjE3IGFzaW5oIDUuNDcyOTExMTQyMzMxNTg4MiAtMS4xMjI3MjM3NDM4MTQ0MjExZSszMDggLT4gNzEwLjAwNTExMzQ2OTgzNTQ2IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDIxOCBhc2luaCAtOC4zNDU1ODE4Mjk3NDEyNzIzIDEuNDQzMTcyMDIwMTgyMDE5ZSszMDggLT4gLTcxMC4yNTYxOTkzMDU1MTgxOCAxLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMDIxOSBhc2luaCAtMi42MDQ5NzI2MjMwMzcyNDQxIC0xLjc5NTIyOTExNDQwMjI3MDJlKzMwOCAtPiAtNzEwLjQ3NDQ4ODQ3Njg1NjQ0IC0xLjU3MDc5NjMyNjc5NDg5NjYKKworLS0gdmFsdWVzIG5lYXIgMAorYXNpbmgwMjIwIGFzaW5oIDEuMjk0MDExMzMzOTY2NDA4OGUtMzE0IDYuOTE2OTE5MDQxNzc3NDUxNmUtMzIzIC0+IDEuMjk0MDExMzMzOTY2NDA4OGUtMzE0IDYuOTE2OTE5MDQxNzc3NDUxNmUtMzIzCithc2luaDAyMjEgYXNpbmggMi4zODQ4NDc4ODYzODc0NjQ5ZS0zMTUgLTMuMTkwNzY1NTAyNTcxNzcxN2UtMzEwIC0+IDIuMzg0ODQ3ODg2Mzg3NDY0OWUtMzE1IC0zLjE5MDc2NTUwMjU3MTc3MTdlLTMxMAorYXNpbmgwMjIyIGFzaW5oIC0zLjAwOTc2NDM2Nzk2NDE2MjJlLTMxNiA0LjY5MzYyMzYzNTQ5MTg0MjJlLTMyMiAtPiAtMy4wMDk3NjQzNjc5NjQxNjIyZS0zMTYgNC42OTM2MjM2MzU0OTE4NDIyZS0zMjIKK2FzaW5oMDIyMyBhc2luaCAtMS43ODc5OTcwODc3NTU3NTFlLTMwOCAtOC41NjE5NjIyODM0OTAyMzQxZS0zMTAgLT4gLTEuNzg3OTk3MDg3NzU1NzUxZS0zMDggLTguNTYxOTYyMjgzNDkwMjM0MWUtMzEwCithc2luaDAyMjQgYXNpbmggMC4wIDEuMjQ5MTQzMzQ0ODQyNzMyNWUtMzE0IC0+IDAuMCAxLjI0OTE0MzM0NDg0MjczMjVlLTMxNAorYXNpbmgwMjI1IGFzaW5oIC0wLjAgMi41MDI0MDcyMTU0NTM4MDYyZS0zMDggLT4gLTAuMCAyLjUwMjQwNzIxNTQ1MzgwNjJlLTMwOAorYXNpbmgwMjI2IGFzaW5oIDAuMCAtMi45NjQzOTM4NzUwNDc0NzkzZS0zMjMgLT4gMC4wIC0yLjk2NDM5Mzg3NTA0NzQ3OTNlLTMyMworYXNpbmgwMjI3IGFzaW5oIC0wLjAgLTIuOTM5NjkwNTkyNzU1NDE2OWUtMzIwIC0+IC0wLjAgLTIuOTM5NjkwNTkyNzU1NDE2OWUtMzIwCithc2luaDAyMjggYXNpbmggNS42NDA0MjkzMDAyOTM1OWUtMzE3IDAuMCAtPiA1LjY0MDQyOTMwMDI5MzU5ZS0zMTcgMC4wCithc2luaDAyMjkgYXNpbmggMy4zODMzOTExODY2NTk2MDY4ZS0zMTggLTAuMCAtPiAzLjM4MzM5MTE4NjY1OTYwNjhlLTMxOCAtMC4wCithc2luaDAyMzAgYXNpbmggLTQuOTQwNjU2NDU4NDEyNDY1NGUtMzI0IDAuMCAtPiAtNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQgMC4wCithc2luaDAyMzEgYXNpbmggLTIuMjIxMTM3OTIyNzk5NDg0NWUtMzA4IC0wLjAgLT4gLTIuMjIxMTM3OTIyNzk5NDg0NWUtMzA4IC0wLjAKKworLS0gc3BlY2lhbCB2YWx1ZXMKK2FzaW5oMTAwMCBhc2luaCAwLjAgMC4wIC0+IDAuMCAwLjAKK2FzaW5oMTAwMSBhc2luaCAwLjAgLTAuMCAtPiAwLjAgLTAuMAorYXNpbmgxMDAyIGFzaW5oIC0wLjAgMC4wIC0+IC0wLjAgMC4wCithc2luaDEwMDMgYXNpbmggLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorYXNpbmgxMDA0IGFzaW5oIDAuMCBpbmYgLT4gaW5mIDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgxMDA1IGFzaW5oIDIuMyBpbmYgLT4gaW5mIDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgxMDA2IGFzaW5oIDAuMCBuYW4gLT4gbmFuIG5hbgorYXNpbmgxMDA3IGFzaW5oIDIuMyBuYW4gLT4gbmFuIG5hbgorYXNpbmgxMDA4IGFzaW5oIGluZiAwLjAgLT4gaW5mIDAuMAorYXNpbmgxMDA5IGFzaW5oIGluZiAyLjMgLT4gaW5mIDAuMAorYXNpbmgxMDEwIGFzaW5oIGluZiBpbmYgLT4gaW5mIDAuNzg1Mzk4MTYzMzk3NDQ4MjgKK2FzaW5oMTAxMSBhc2luaCBpbmYgbmFuIC0+IGluZiBuYW4KK2FzaW5oMTAxMiBhc2luaCBuYW4gMC4wIC0+IG5hbiAwLjAKK2FzaW5oMTAxMyBhc2luaCBuYW4gMi4zIC0+IG5hbiBuYW4KK2FzaW5oMTAxNCBhc2luaCBuYW4gaW5mIC0+IGluZiBuYW4gICAgICAgICAgICAgICAgICAgICAgaWdub3JlLXJlYWwtc2lnbgorYXNpbmgxMDE1IGFzaW5oIG5hbiBuYW4gLT4gbmFuIG5hbgorYXNpbmgxMDE2IGFzaW5oIDAuMCAtaW5mIC0+IGluZiAtMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDEwMTcgYXNpbmggMi4zIC1pbmYgLT4gaW5mIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMTAxOCBhc2luaCBpbmYgLTAuMCAtPiBpbmYgLTAuMAorYXNpbmgxMDE5IGFzaW5oIGluZiAtMi4zIC0+IGluZiAtMC4wCithc2luaDEwMjAgYXNpbmggaW5mIC1pbmYgLT4gaW5mIC0wLjc4NTM5ODE2MzM5NzQ0ODI4Cithc2luaDEwMjEgYXNpbmggbmFuIC0wLjAgLT4gbmFuIC0wLjAKK2FzaW5oMTAyMiBhc2luaCBuYW4gLTIuMyAtPiBuYW4gbmFuCithc2luaDEwMjMgYXNpbmggbmFuIC1pbmYgLT4gaW5mIG5hbiAgICAgICAgICAgICAgICAgICAgIGlnbm9yZS1yZWFsLXNpZ24KK2FzaW5oMTAyNCBhc2luaCAtMC4wIC1pbmYgLT4gLWluZiAtMS41NzA3OTYzMjY3OTQ4OTY2Cithc2luaDEwMjUgYXNpbmggLTIuMyAtaW5mIC0+IC1pbmYgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgxMDI2IGFzaW5oIC0wLjAgbmFuIC0+IG5hbiBuYW4KK2FzaW5oMTAyNyBhc2luaCAtMi4zIG5hbiAtPiBuYW4gbmFuCithc2luaDEwMjggYXNpbmggLWluZiAtMC4wIC0+IC1pbmYgLTAuMAorYXNpbmgxMDI5IGFzaW5oIC1pbmYgLTIuMyAtPiAtaW5mIC0wLjAKK2FzaW5oMTAzMCBhc2luaCAtaW5mIC1pbmYgLT4gLWluZiAtMC43ODUzOTgxNjMzOTc0NDgyOAorYXNpbmgxMDMxIGFzaW5oIC1pbmYgbmFuIC0+IC1pbmYgbmFuCithc2luaDEwMzIgYXNpbmggLTAuMCBpbmYgLT4gLWluZiAxLjU3MDc5NjMyNjc5NDg5NjYKK2FzaW5oMTAzMyBhc2luaCAtMi4zIGluZiAtPiAtaW5mIDEuNTcwNzk2MzI2Nzk0ODk2NgorYXNpbmgxMDM0IGFzaW5oIC1pbmYgMC4wIC0+IC1pbmYgMC4wCithc2luaDEwMzUgYXNpbmggLWluZiAyLjMgLT4gLWluZiAwLjAKK2FzaW5oMTAzNiBhc2luaCAtaW5mIGluZiAtPiAtaW5mIDAuNzg1Mzk4MTYzMzk3NDQ4MjgKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGF0YW46IEludmVyc2UgdGFuZ2VudCAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIHplcm9zCithdGFuMDAwMCBhdGFuIDAuMCAwLjAgLT4gMC4wIDAuMAorYXRhbjAwMDEgYXRhbiAwLjAgLTAuMCAtPiAwLjAgLTAuMAorYXRhbjAwMDIgYXRhbiAtMC4wIDAuMCAtPiAtMC4wIDAuMAorYXRhbjAwMDMgYXRhbiAtMC4wIC0wLjAgLT4gLTAuMCAtMC4wCisKKy0tIHZhbHVlcyBhbG9uZyBib3RoIHNpZGVzIG9mIGltYWdpbmFyeSBheGlzCithdGFuMDAxMCBhdGFuIDAuMCAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLT4gMC4wIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNAorYXRhbjAwMTEgYXRhbiAtMC4wIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAtPiAtMC4wIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNAorYXRhbjAwMTIgYXRhbiAwLjAgLTFlLTMwNSAtPiAwLjAgLTFlLTMwNQorYXRhbjAwMTMgYXRhbiAtMC4wIC0xZS0zMDUgLT4gLTAuMCAtMWUtMzA1CithdGFuMDAxNCBhdGFuIDAuMCAtMWUtMTUwIC0+IDAuMCAtMWUtMTUwCithdGFuMDAxNSBhdGFuIC0wLjAgLTFlLTE1MCAtPiAtMC4wIC0xZS0xNTAKK2F0YW4wMDE2IGF0YW4gMC4wIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0+IDAuMCAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNworYXRhbjAwMTcgYXRhbiAtMC4wIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0+IC0wLjAgLTkuOTk5OTk5OTk5OTk5OTk5OGUtMTcKK2F0YW4wMDE4IGF0YW4gMC4wIC0wLjAwMSAtPiAwLjAgLTAuMDAxMDAwMDAwMzMzMzMzNTMzMworYXRhbjAwMTkgYXRhbiAtMC4wIC0wLjAwMSAtPiAtMC4wIC0wLjAwMTAwMDAwMDMzMzMzMzUzMzMKK2F0YW4wMDIwIGF0YW4gMC4wIC0wLjU3ODk5OTk5OTk5OTk5OTk2IC0+IDAuMCAtMC42NjA5NTcwOTAyODY2MzAzCithdGFuMDAyMSBhdGFuIC0wLjAgLTAuNTc4OTk5OTk5OTk5OTk5OTYgLT4gLTAuMCAtMC42NjA5NTcwOTAyODY2MzAzCithdGFuMDAyMiBhdGFuIDAuMCAtMC45OTk5OTk5OTk5OTk5OTk4OSAtPiAwLjAgLTE4LjcxNDk3Mzg3NTExODUyNAorYXRhbjAwMjMgYXRhbiAtMC4wIC0wLjk5OTk5OTk5OTk5OTk5OTg5IC0+IC0wLjAgLTE4LjcxNDk3Mzg3NTExODUyNAorYXRhbjAwMjQgYXRhbiAwLjAgLTEuMDAwMDAwMDAwMDAwMDAwMiAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTE4LjM2ODQwMDI4NDgzODU1CithdGFuMDAyNSBhdGFuIC0wLjAgLTEuMDAwMDAwMDAwMDAwMDAwMiAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC0xOC4zNjg0MDAyODQ4Mzg1NQorYXRhbjAwMjYgYXRhbiAwLjAgLTEuMDAwOTk5OTk5OTk5OTk5OSAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTMuODAwNzAxMTY3MjkxOTIxOAorYXRhbjAwMjcgYXRhbiAtMC4wIC0xLjAwMDk5OTk5OTk5OTk5OTkgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMy44MDA3MDExNjcyOTE5MjE4CithdGFuMDAyOCBhdGFuIDAuMCAtMi4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMC41NDkzMDYxNDQzMzQwNTQ4OQorYXRhbjAwMjkgYXRhbiAtMC4wIC0yLjAgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMC41NDkzMDYxNDQzMzQwNTQ4OQorYXRhbjAwMzAgYXRhbiAwLjAgLTIwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjA1MDA0MTcyOTI3ODQ5MTI2NQorYXRhbjAwMzEgYXRhbiAtMC4wIC0yMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTAuMDUwMDQxNzI5Mjc4NDkxMjY1CithdGFuMDAzMiBhdGFuIDAuMCAtMTAwMDAwMDAwMDAwMDAwMDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTkuOTk5OTk5OTk5OTk5OTk5OGUtMTcKK2F0YW4wMDMzIGF0YW4gLTAuMCAtMTAwMDAwMDAwMDAwMDAwMDAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3CithdGFuMDAzNCBhdGFuIDAuMCAtOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0xZS0xNTAKK2F0YW4wMDM1IGF0YW4gLTAuMCAtOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMWUtMTUwCithdGFuMDAzNiBhdGFuIDAuMCAtMS4wMDAwMDAwMDAwMDAwMDAxZSsyOTkgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC05Ljk5OTk5OTk5OTk5OTk5OTllLTMwMAorYXRhbjAwMzcgYXRhbiAtMC4wIC0xLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC05Ljk5OTk5OTk5OTk5OTk5OTllLTMwMAorYXRhbjAwMzggYXRhbiAwLjAgOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLT4gMC4wIDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0CithdGFuMDAzOSBhdGFuIC0wLjAgOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLT4gLTAuMCA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNAorYXRhbjAwNDAgYXRhbiAwLjAgMWUtMzA1IC0+IDAuMCAxZS0zMDUKK2F0YW4wMDQxIGF0YW4gLTAuMCAxZS0zMDUgLT4gLTAuMCAxZS0zMDUKK2F0YW4wMDQyIGF0YW4gMC4wIDFlLTE1MCAtPiAwLjAgMWUtMTUwCithdGFuMDA0MyBhdGFuIC0wLjAgMWUtMTUwIC0+IC0wLjAgMWUtMTUwCithdGFuMDA0NCBhdGFuIDAuMCA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0+IDAuMCA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3CithdGFuMDA0NSBhdGFuIC0wLjAgOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtPiAtMC4wIDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcKK2F0YW4wMDQ2IGF0YW4gMC4wIDAuMDAxIC0+IDAuMCAwLjAwMTAwMDAwMDMzMzMzMzUzMzMKK2F0YW4wMDQ3IGF0YW4gLTAuMCAwLjAwMSAtPiAtMC4wIDAuMDAxMDAwMDAwMzMzMzMzNTMzMworYXRhbjAwNDggYXRhbiAwLjAgMC41Nzg5OTk5OTk5OTk5OTk5NiAtPiAwLjAgMC42NjA5NTcwOTAyODY2MzAzCithdGFuMDA0OSBhdGFuIC0wLjAgMC41Nzg5OTk5OTk5OTk5OTk5NiAtPiAtMC4wIDAuNjYwOTU3MDkwMjg2NjMwMworYXRhbjAwNTAgYXRhbiAwLjAgMC45OTk5OTk5OTk5OTk5OTk4OSAtPiAwLjAgMTguNzE0OTczODc1MTE4NTI0CithdGFuMDA1MSBhdGFuIC0wLjAgMC45OTk5OTk5OTk5OTk5OTk4OSAtPiAtMC4wIDE4LjcxNDk3Mzg3NTExODUyNAorYXRhbjAwNTIgYXRhbiAwLjAgMS4wMDAwMDAwMDAwMDAwMDAyIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAxOC4zNjg0MDAyODQ4Mzg1NQorYXRhbjAwNTMgYXRhbiAtMC4wIDEuMDAwMDAwMDAwMDAwMDAwMiAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDE4LjM2ODQwMDI4NDgzODU1CithdGFuMDA1NCBhdGFuIDAuMCAxLjAwMDk5OTk5OTk5OTk5OTkgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDMuODAwNzAxMTY3MjkxOTIxOAorYXRhbjAwNTUgYXRhbiAtMC4wIDEuMDAwOTk5OTk5OTk5OTk5OSAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDMuODAwNzAxMTY3MjkxOTIxOAorYXRhbjAwNTYgYXRhbiAwLjAgMi4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAwLjU0OTMwNjE0NDMzNDA1NDg5CithdGFuMDA1NyBhdGFuIC0wLjAgMi4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgMC41NDkzMDYxNDQzMzQwNTQ4OQorYXRhbjAwNTggYXRhbiAwLjAgMjAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wNTAwNDE3MjkyNzg0OTEyNjUKK2F0YW4wMDU5IGF0YW4gLTAuMCAyMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgMC4wNTAwNDE3MjkyNzg0OTEyNjUKK2F0YW4wMDYwIGF0YW4gMC4wIDEwMDAwMDAwMDAwMDAwMDAwLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcKK2F0YW4wMDYxIGF0YW4gLTAuMCAxMDAwMDAwMDAwMDAwMDAwMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgOS45OTk5OTk5OTk5OTk5OTk4ZS0xNworYXRhbjAwNjIgYXRhbiAwLjAgOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDFlLTE1MAorYXRhbjAwNjMgYXRhbiAtMC4wIDkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgMWUtMTUwCithdGFuMDA2NCBhdGFuIDAuMCAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgOS45OTk5OTk5OTk5OTk5OTk5ZS0zMDAKK2F0YW4wMDY1IGF0YW4gLTAuMCAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDkuOTk5OTk5OTk5OTk5OTk5OWUtMzAwCisKKy0tIHJhbmRvbSBpbnB1dHMKK2F0YW4wMTAwIGF0YW4gLTAuMzI1Mzg4NzM2NjEwNjAyMTQgLTEuNTUzMDQ2MTU1MDQxMjU3OCAtPiAtMS4zNjgyNzI4NDI3NTU0MjI3IC0wLjY5NDUxNDAxNTk4NzYyMDQxCithdGFuMDEwMSBhdGFuIC0wLjQ1ODYzMzkzNDk1MTk3OTI5IC00Nzk5LjE3NDcwOTQ5MDM1OTQgLT4gLTEuNTcwNzk2MzA2ODgyMDYyMyAtMC4wMDAyMDgzNjkxNjA1MDYzNjE0NQorYXRhbjAxMDIgYXRhbiAtOC4zMDA2OTk5Njg1OTc2MTYyIC0yLjY3ODg4OTAyNTE3OTA5MzggLT4gLTEuNDYxOTg2Mjc3MTgxMDE5OSAtMC4wMzQ4MTE2Njk2NTMzMjc4MjYKK2F0YW4wMTAzIGF0YW4gLTEuODgzNjMwNzY4Mjk4NTMxNCAtMS4xNDQxOTc2NjM4ODYxNzcxIC0+IC0xLjE4Mzk5ODQzNzA4NzE2MTIgLTAuMjA2MzA5NTYxNTczMTI3OTYKK2F0YW4wMTA0IGF0YW4gLTAuMDAwNjMyMzA0ODI0MDc0OTE2NjkgLTQuOTMxMjUyMDk2MTgyOTQ4NSAtPiAtMS41NzA3NjkyMDkzMjIzMTQ3IC0wLjIwNTYzODY3NzQzMDA4MzA0CithdGFuMDEwNSBhdGFuIC0wLjg0Mjc4MTM3MTUwMDY1OTQ2IDE3OTAxMi4zNzQ5MzE0Njk5NyAtPiAtMS41NzA3OTYzMjY3Njg1OTY5IDUuNTg2MjA1OTgzNjQyNTI3MmUtMDYKK2F0YW4wMTA2IGF0YW4gLTAuOTU0ODc4NTM5ODQwNDkyODcgMTQuMzExMzM0NTM5ODg2MTc3IC0+IC0xLjU2NjEzMjI4NTk0MzQ1NjEgMC4wNjk2NzYwMjQ1MjYyMzIwMDUKK2F0YW4wMTA3IGF0YW4gLTEuMzUxMzI1MjUzOTY2MzIzOSA2LjA1MDA3MjcwMjE2MzIxOThlLTA4IC0+IC0wLjkzMzcxNjc2MzE1MjIwOTc1IDIuMTQwODAwMjY5NzQyNjU2ZS0wOAorYXRhbjAxMDggYXRhbiAtMC4yMDU2NjI1NDQ1ODU5NTc5NSAwLjExOTMzNzcxOTQ0MTU5ODIzIC0+IC0wLjIwNTU2NDYzNzExMTc0OTE2IDAuMTE0OTM0MDUzODcxNDE3MzIKK2F0YW4wMTA5IGF0YW4gLTAuNTg1NjM3MTg3OTU0MDg1NTkgMC42NDQzODk2NTQyMzIxMjg2OCAtPiAtMC42ODM2MTA4OTMwMDIzMzEyNCAwLjQ2NzU5NzYyNzUxODAwMjQ5CithdGFuMDExMCBhdGFuIDQ4LjQ3OTI2Nzc1MTk0ODI5MiAtNzguMzg2MzgyNDYwMTEyNTQzIC0+IDEuNTY1MDg4ODc3MDkxMDUyMyAtMC4wMDkyMjc2ODExMzczMjk3NTg0CithdGFuMDExMSBhdGFuIDEuMDU3NTM3MzkxNDA1NjA2MSAtMC43NTk4ODAxMjM3NzI5Njk4NyAtPiAwLjk0NDMwODg2NzIyMDQzNTk0IC0wLjMxOTE1Njk4MTI2NzAzMTE4CithdGFuMDExMiBhdGFuIDQ0NDQ4MTAuNDMxNDY3NzIwMyAtMC41NjU1MzQwNDU5Mzk0MjU1OCAtPiAxLjU3MDc5NjEwMTgxMzQyMzEgLTIuODYyNTQ0NjQzNzcwMTkwOWUtMTQKK2F0YW4wMTEzIGF0YW4gMC4wMTAxMDE0MDUwODI1MjAwMDkgLTAuMDMyOTMyNjY4NTUwMjgyNDc4IC0+IDAuMDEwMTEyMDI2NzY2NDYzMzQgLTAuMDMyOTQxMjE0Nzc2ODM0OTk2CithdGFuMDExNCBhdGFuIDEuNTM1MzU4NTMwMDE1NDkxMSAtMi4xOTQ3MDk5MzQ2Nzk2NTE5IC0+IDEuMzQwMDMxMDczOTIwNjM5NCAtMC4yOTk5NjAwMzYwNzQ0OTA0NQorYXRhbjAxMTUgYXRhbiAwLjIxODY5NDU3MDU1NjcwODgyIDkuOTkxNTY4NDI1NDAwNzA5MyAtPiAxLjU2ODU4NDYwNzg4NzY0NDQgMC4xMDAzNzE2ODgxNzU5NDM5CithdGFuMDExNiBhdGFuIDAuMTc3ODMyOTAxNTAyNDY4MzYgMC4wNjQzMzQ2ODk4NjM2NTA5NTcgLT4gMC4xNzY2ODcyODA2NDI4NjI3NyAwLjA2MjQzNTgwODcyODg3Mzg0NgorYXRhbjAxMTcgYXRhbiAxNS43NTc0NzQwODc2MTU5MTggMzgzLjU3MjYyMTQyNTM0IC0+IDEuNTcwNjg5NDA2MDM2OTYyMSAwLjAwMjYwMjY4MTcyNzg4MjY2MDMKK2F0YW4wMTE4IGF0YW4gMTAuNTg3MDE3NDA4NTMzMzE3IDAuMjE3MjAyMzgwODE4NDM0MzggLT4gMS40NzY2NTk0NjgxMzM2MjM2IDAuMDAxOTE5OTA5NzM4MzAxMDA2MQorYXRhbjAxMTkgYXRhbiAwLjg2MDI2MDc4Njc4NzgxMjA0IDAuMTIzMDE0ODYwOTM1OTUwMiAtPiAwLjcxNDcyNTkzMjI1MzQ5MjkgMC4wNzA1NTEyMjE5NTQyODY2MDUKKworLS0gdmFsdWVzIG5lYXIgaW5maW5pdHkKK2F0YW4wMjAwIGF0YW4gNy44NzY0Mzk3MDExMTk1Nzk4ZSszMDcgOC4xNjQ3OTIxMTM3NzQ2MzA4ZSszMDcgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDYuMzQzOTQ0NjkzOTYwNDQ5M2UtMzA5CithdGFuMDIwMSBhdGFuIDEuNTg3MzY5ODY5NjEzMTQ4N2UrMzA4IC0xLjA3ODAzNjc0MjI5NjA2NDFlKzMwOCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgLTIuOTI3OTMwOTM2ODUzMDc4MWUtMzA5CithdGFuMDIwMiBhdGFuIC0xLjU4NDQ1NTE4NjQ4MjU4MzRlKzMwOCAxLjAyOTA2NTc4MDkwOTg2NzVlKzMwOCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDIuODgyOTYxNDczNjk2MTQxN2UtMzA5CithdGFuMDIwMyBhdGFuIC0xLjMxNjg3OTI1NjI1MjQwMzJlKzMwOCAtOS4wODg0MzIzNDE2MTQ4MjVlKzMwNyAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC0zLjU0OTkzNzMwNTczOTAwNTZlLTMwOQorYXRhbjAyMDQgYXRhbiAwLjAgMS4wMzYwNDY1NzQyMjU4MzM3ZSszMDggLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDkuNjUyMDc1NzM1NTY0NjAxOGUtMzA5CithdGFuMDIwNSBhdGFuIC0wLjAgMS4wMDQ1MDYzMjEwMzczMTk2ZSszMDggLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiA5Ljk1NTEzODk0NzkyOTUwM2UtMzA5CithdGFuMDIwNiBhdGFuIDAuMCAtOS41MTU1Mjk2NzE1NzYzNjk2ZSszMDcgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0xLjA1MDkxMzY0ODAyMDExOGUtMzA4CithdGFuMDIwNyBhdGFuIC0wLjAgLTEuNTU2NTcwMDQ5MDQ5NjUwMWUrMzA4IC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTYuNDI0MzgxNjExNDE4OTA3MWUtMzA5CithdGFuMDIwOCBhdGFuIDEuMjk1NjMzOTM4OTUyNTI0NGUrMzA4IDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithdGFuMDIwOSBhdGFuIDEuNDQwODEyNjI0Mzc3MjE1MWUrMzA4IC0wLjAgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4wMjEwIGF0YW4gLTEuMDYzMTc4NjQ2MTkzNjQxN2UrMzA4IDAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjAyMTEgYXRhbiAtMS4wNTE2MDU2OTY0MTcxMDY5ZSszMDggLTAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4wMjEyIGF0YW4gMS4yMzYxNjIzMTk2MDM4MzhlKzMwOCA0LjY4Mjc5NTM0OTYyNDI5MzYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjAyMTMgYXRhbiA3LjAwMDUxNjQ3Mjg5NzIxOGUrMzA3IC01Ljg2MzE2MDgwMTc4NDQxNjMgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4wMjE0IGF0YW4gLTEuNTA1MzQ0NDAwMzMzODUwOGUrMzA4IDUuMTE5OTE5NzI2ODQyMDMxMyAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjAyMTUgYXRhbiAtMS4zOTkxNzI1MTgxNDcyNTllKzMwOCAtMy41Njg3NzY2NDcyOTEzNjczIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTAuMAorYXRhbjAyMTYgYXRhbiA4LjEyNTI4MzMwNzA4MDMwMjEgNi4yNzgyOTUzOTE3MzQzODIyZSszMDcgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDEuNTkyNzg5MDI1NjkwODU2NGUtMzA4CithdGFuMDIxNyBhdGFuIDIuODAzNDI4NTk0NzUxNTE2NyAtMS4zMzc4MDQ5Nzc1NzUzODc4ZSszMDggLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC03LjQ3NDkzMTA3NTYyMTk1NjJlLTMwOQorYXRhbjAyMTggYXRhbiAtMS40MDczNTA5OTg4OTc0OTUzIDEuNjc3NjM4MTc4NTk2ODM1NWUrMzA4IC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgNS45NjA3NjA4NjQ2MzY0NTY5ZS0zMDkKK2F0YW4wMjE5IGF0YW4gLTIuNzEzNTU1MTUyNzU5MjExOSAtMS4yODE1Njc0NDU1MjU3MzhlKzMwOCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC03LjgwMjk0NDc3Mjc1NjUzMjZlLTMwOQorCistLSBpbWFnaW5hcnkgcGFydCA9ICsvLTEsIHJlYWwgcGFydCB0aW55CithdGFuMDMwMCBhdGFuIC0xZS0xNTAgLTEuMCAtPiAtMC43ODUzOTgxNjMzOTc0NDgyOCAtMTczLjA0MDQ1NTU2NDgzMzM5CithdGFuMDMwMSBhdGFuIDFlLTE1NSAxLjAgLT4gMC43ODUzOTgxNjMzOTc0NDgyOCAxNzguNzk2OTE4Mjk3MzE4NTEKK2F0YW4wMzAyIGF0YW4gOS45OTk5OTk5OTk5OTk5OTk5ZS0xNjEgLTEuMCAtPiAwLjc4NTM5ODE2MzM5NzQ0ODI4IC0xODQuNTUzMzgxMDI5ODAzNjMKK2F0YW4wMzAzIGF0YW4gLTFlLTE2NSAxLjAgLT4gLTAuNzg1Mzk4MTYzMzk3NDQ4MjggMTkwLjMwOTg0Mzc2MjI4ODc1CithdGFuMDMwNCBhdGFuIC05Ljk5OTg4ODY3MTgyNjgzMDFlLTMyMSAtMS4wIC0+IC0wLjc4NTM5ODE2MzM5NzQ0ODI4IC0zNjguNzYwMTk0MDM1NzY2OTIKKworLS0gc3BlY2lhbCB2YWx1ZXMKK2F0YW4xMDAwIGF0YW4gLTAuMCAwLjAgLT4gLTAuMCAwLjAKK2F0YW4xMDAxIGF0YW4gbmFuIDAuMCAtPiBuYW4gMC4wCithdGFuMTAwMiBhdGFuIC0wLjAgMS4wIC0+IC0wLjAgaW5mIGRpdmlkZS1ieS16ZXJvCithdGFuMTAwMyBhdGFuIC1pbmYgMC4wIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithdGFuMTAwNCBhdGFuIC1pbmYgMi4yOTk5OTk5OTk5OTk5OTk4IC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithdGFuMTAwNSBhdGFuIG5hbiAyLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbgorYXRhbjEwMDYgYXRhbiAtMC4wIGluZiAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjEwMDcgYXRhbiAtMi4yOTk5OTk5OTk5OTk5OTk4IGluZiAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjEwMDggYXRhbiAtaW5mIGluZiAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjEwMDkgYXRhbiBuYW4gaW5mIC0+IG5hbiAwLjAKK2F0YW4xMDEwIGF0YW4gLTAuMCBuYW4gLT4gbmFuIG5hbgorYXRhbjEwMTEgYXRhbiAtMi4yOTk5OTk5OTk5OTk5OTk4IG5hbiAtPiBuYW4gbmFuCithdGFuMTAxMiBhdGFuIC1pbmYgbmFuIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgMC4wIGlnbm9yZS1pbWFnLXNpZ24KK2F0YW4xMDEzIGF0YW4gbmFuIG5hbiAtPiBuYW4gbmFuCithdGFuMTAxNCBhdGFuIDAuMCAwLjAgLT4gMC4wIDAuMAorYXRhbjEwMTUgYXRhbiAwLjAgMS4wIC0+IDAuMCBpbmYgZGl2aWRlLWJ5LXplcm8KK2F0YW4xMDE2IGF0YW4gaW5mIDAuMCAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithdGFuMTAxNyBhdGFuIGluZiAyLjI5OTk5OTk5OTk5OTk5OTggLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjEwMTggYXRhbiAwLjAgaW5mIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAwLjAKK2F0YW4xMDE5IGF0YW4gMi4yOTk5OTk5OTk5OTk5OTk4IGluZiAtPiAxLjU3MDc5NjMyNjc5NDg5NjYgMC4wCithdGFuMTAyMCBhdGFuIGluZiBpbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMAorYXRhbjEwMjEgYXRhbiAwLjAgbmFuIC0+IG5hbiBuYW4KK2F0YW4xMDIyIGF0YW4gMi4yOTk5OTk5OTk5OTk5OTk4IG5hbiAtPiBuYW4gbmFuCithdGFuMTAyMyBhdGFuIGluZiBuYW4gLT4gMS41NzA3OTYzMjY3OTQ4OTY2IDAuMCBpZ25vcmUtaW1hZy1zaWduCithdGFuMTAyNCBhdGFuIDAuMCAtMC4wIC0+IDAuMCAtMC4wCithdGFuMTAyNSBhdGFuIG5hbiAtMC4wIC0+IG5hbiAtMC4wCithdGFuMTAyNiBhdGFuIDAuMCAtMS4wIC0+IDAuMCAtaW5mIGRpdmlkZS1ieS16ZXJvCithdGFuMTAyNyBhdGFuIGluZiAtMC4wIC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCithdGFuMTAyOCBhdGFuIGluZiAtMi4yOTk5OTk5OTk5OTk5OTk4IC0+IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCithdGFuMTAyOSBhdGFuIG5hbiAtMi4yOTk5OTk5OTk5OTk5OTk4IC0+IG5hbiBuYW4KK2F0YW4xMDMwIGF0YW4gMC4wIC1pbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4xMDMxIGF0YW4gMi4yOTk5OTk5OTk5OTk5OTk4IC1pbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4xMDMyIGF0YW4gaW5mIC1pbmYgLT4gMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4xMDMzIGF0YW4gbmFuIC1pbmYgLT4gbmFuIC0wLjAKK2F0YW4xMDM0IGF0YW4gLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorYXRhbjEwMzUgYXRhbiAtMC4wIC0xLjAgLT4gLTAuMCAtaW5mIGRpdmlkZS1ieS16ZXJvCithdGFuMTAzNiBhdGFuIC1pbmYgLTAuMCAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4xMDM3IGF0YW4gLWluZiAtMi4yOTk5OTk5OTk5OTk5OTk4IC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTAuMAorYXRhbjEwMzggYXRhbiAtMC4wIC1pbmYgLT4gLTEuNTcwNzk2MzI2Nzk0ODk2NiAtMC4wCithdGFuMTAzOSBhdGFuIC0yLjI5OTk5OTk5OTk5OTk5OTggLWluZiAtPiAtMS41NzA3OTYzMjY3OTQ4OTY2IC0wLjAKK2F0YW4xMDQwIGF0YW4gLWluZiAtaW5mIC0+IC0xLjU3MDc5NjMyNjc5NDg5NjYgLTAuMAorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gYXRhbmg6IEludmVyc2UgaHlwZXJib2xpYyB0YW5nZW50IC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gemVyb3MKK2F0YW5oMDAwMCBhdGFuaCAwLjAgMC4wIC0+IDAuMCAwLjAKK2F0YW5oMDAwMSBhdGFuaCAwLjAgLTAuMCAtPiAwLjAgLTAuMAorYXRhbmgwMDAyIGF0YW5oIC0wLjAgMC4wIC0+IC0wLjAgMC4wCithdGFuaDAwMDMgYXRhbmggLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorCistLSB2YWx1ZXMgYWxvbmcgYm90aCBzaWRlcyBvZiByZWFsIGF4aXMKK2F0YW5oMDAxMCBhdGFuaCAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgMC4wIC0+IC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAKK2F0YW5oMDAxMSBhdGFuaCAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMAorYXRhbmgwMDEyIGF0YW5oIC0xZS0zMDUgMC4wIC0+IC0xZS0zMDUgMC4wCithdGFuaDAwMTMgYXRhbmggLTFlLTMwNSAtMC4wIC0+IC0xZS0zMDUgLTAuMAorYXRhbmgwMDE0IGF0YW5oIC0xZS0xNTAgMC4wIC0+IC0xZS0xNTAgMC4wCithdGFuaDAwMTUgYXRhbmggLTFlLTE1MCAtMC4wIC0+IC0xZS0xNTAgLTAuMAorYXRhbmgwMDE2IGF0YW5oIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IDAuMCAtPiAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAKK2F0YW5oMDAxNyBhdGFuaCAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wIC0+IC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0wLjAKK2F0YW5oMDAxOCBhdGFuaCAtMC4wMDEgMC4wIC0+IC0wLjAwMTAwMDAwMDMzMzMzMzUzMzMgMC4wCithdGFuaDAwMTkgYXRhbmggLTAuMDAxIC0wLjAgLT4gLTAuMDAxMDAwMDAwMzMzMzMzNTMzMyAtMC4wCithdGFuaDAwMjAgYXRhbmggLTAuNTc4OTk5OTk5OTk5OTk5OTYgMC4wIC0+IC0wLjY2MDk1NzA5MDI4NjYzMDMgMC4wCithdGFuaDAwMjEgYXRhbmggLTAuNTc4OTk5OTk5OTk5OTk5OTYgLTAuMCAtPiAtMC42NjA5NTcwOTAyODY2MzAzIC0wLjAKK2F0YW5oMDAyMiBhdGFuaCAtMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAgLT4gLTE4LjcxNDk3Mzg3NTExODUyNCAwLjAKK2F0YW5oMDAyMyBhdGFuaCAtMC45OTk5OTk5OTk5OTk5OTk4OSAtMC4wIC0+IC0xOC43MTQ5NzM4NzUxMTg1MjQgLTAuMAorYXRhbmgwMDI0IGF0YW5oIC0xLjAwMDAwMDAwMDAwMDAwMDIgMC4wIC0+IC0xOC4zNjg0MDAyODQ4Mzg1NSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDAyNSBhdGFuaCAtMS4wMDAwMDAwMDAwMDAwMDAyIC0wLjAgLT4gLTE4LjM2ODQwMDI4NDgzODU1IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDAyNiBhdGFuaCAtMS4wMDA5OTk5OTk5OTk5OTk5IDAuMCAtPiAtMy44MDA3MDExNjcyOTE5MjE4IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMDI3IGF0YW5oIC0xLjAwMDk5OTk5OTk5OTk5OTkgLTAuMCAtPiAtMy44MDA3MDExNjcyOTE5MjE4IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDAyOCBhdGFuaCAtMi4wIDAuMCAtPiAtMC41NDkzMDYxNDQzMzQwNTQ4OSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDAyOSBhdGFuaCAtMi4wIC0wLjAgLT4gLTAuNTQ5MzA2MTQ0MzM0MDU0ODkgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMDMwIGF0YW5oIC0yMy4wIDAuMCAtPiAtMC4wNDM1MDU2ODg0OTQ4MTQ4ODQgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwMzEgYXRhbmggLTIzLjAgLTAuMCAtPiAtMC4wNDM1MDU2ODg0OTQ4MTQ4ODQgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMDMyIGF0YW5oIC0xMDAwMDAwMDAwMDAwMDAwMC4wIDAuMCAtPiAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDAzMyBhdGFuaCAtMTAwMDAwMDAwMDAwMDAwMDAuMCAtMC4wIC0+IC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDAzNCBhdGFuaCAtOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgMC4wIC0+IC0xZS0xNTAgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwMzUgYXRhbmggLTkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0wLjAgLT4gLTFlLTE1MCAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwMzYgYXRhbmggLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IDAuMCAtPiAtOS45OTk5OTk5OTk5OTk5OTk5ZS0zMDAgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwMzcgYXRhbmggLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OWUtMzAwIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDAzOCBhdGFuaCA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAgLT4gOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgMC4wCithdGFuaDAwMzkgYXRhbmggOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAtMC4wCithdGFuaDAwNDAgYXRhbmggMWUtMzA1IDAuMCAtPiAxZS0zMDUgMC4wCithdGFuaDAwNDEgYXRhbmggMWUtMzA1IC0wLjAgLT4gMWUtMzA1IC0wLjAKK2F0YW5oMDA0MiBhdGFuaCAxZS0xNTAgMC4wIC0+IDFlLTE1MCAwLjAKK2F0YW5oMDA0MyBhdGFuaCAxZS0xNTAgLTAuMCAtPiAxZS0xNTAgLTAuMAorYXRhbmgwMDQ0IGF0YW5oIDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgMC4wIC0+IDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgMC4wCithdGFuaDAwNDUgYXRhbmggOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wIC0+IDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLTAuMAorYXRhbmgwMDQ2IGF0YW5oIDAuMDAxIDAuMCAtPiAwLjAwMTAwMDAwMDMzMzMzMzUzMzMgMC4wCithdGFuaDAwNDcgYXRhbmggMC4wMDEgLTAuMCAtPiAwLjAwMTAwMDAwMDMzMzMzMzUzMzMgLTAuMAorYXRhbmgwMDQ4IGF0YW5oIDAuNTc4OTk5OTk5OTk5OTk5OTYgMC4wIC0+IDAuNjYwOTU3MDkwMjg2NjMwMyAwLjAKK2F0YW5oMDA0OSBhdGFuaCAwLjU3ODk5OTk5OTk5OTk5OTk2IC0wLjAgLT4gMC42NjA5NTcwOTAyODY2MzAzIC0wLjAKK2F0YW5oMDA1MCBhdGFuaCAwLjk5OTk5OTk5OTk5OTk5OTg5IDAuMCAtPiAxOC43MTQ5NzM4NzUxMTg1MjQgMC4wCithdGFuaDAwNTEgYXRhbmggMC45OTk5OTk5OTk5OTk5OTk4OSAtMC4wIC0+IDE4LjcxNDk3Mzg3NTExODUyNCAtMC4wCithdGFuaDAwNTIgYXRhbmggMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAxOC4zNjg0MDAyODQ4Mzg1NSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDA1MyBhdGFuaCAxLjAwMDAwMDAwMDAwMDAwMDIgLTAuMCAtPiAxOC4zNjg0MDAyODQ4Mzg1NSAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwNTQgYXRhbmggMS4wMDA5OTk5OTk5OTk5OTk5IDAuMCAtPiAzLjgwMDcwMTE2NzI5MTkyMTggMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwNTUgYXRhbmggMS4wMDA5OTk5OTk5OTk5OTk5IC0wLjAgLT4gMy44MDA3MDExNjcyOTE5MjE4IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDA1NiBhdGFuaCAyLjAgMC4wIC0+IDAuNTQ5MzA2MTQ0MzM0MDU0ODkgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwNTcgYXRhbmggMi4wIC0wLjAgLT4gMC41NDkzMDYxNDQzMzQwNTQ4OSAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwNTggYXRhbmggMjMuMCAwLjAgLT4gMC4wNDM1MDU2ODg0OTQ4MTQ4ODQgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwNTkgYXRhbmggMjMuMCAtMC4wIC0+IDAuMDQzNTA1Njg4NDk0ODE0ODg0IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDA2MCBhdGFuaCAxMDAwMDAwMDAwMDAwMDAwMC4wIDAuMCAtPiA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3IDEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMDYxIGF0YW5oIDEwMDAwMDAwMDAwMDAwMDAwLjAgLTAuMCAtPiA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDA2MiBhdGFuaCA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAwLjAgLT4gMWUtMTUwIDEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMDYzIGF0YW5oIDkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0wLjAgLT4gMWUtMTUwIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDA2NCBhdGFuaCAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gOS45OTk5OTk5OTk5OTk5OTk5ZS0zMDAgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAwNjUgYXRhbmggMS4wMDAwMDAwMDAwMDAwMDAxZSsyOTkgLTAuMCAtPiA5Ljk5OTk5OTk5OTk5OTk5OTllLTMwMCAtMS41NzA3OTYzMjY3OTQ4OTY2CisKKy0tIHJhbmRvbSBpbnB1dHMKK2F0YW5oMDEwMCBhdGFuaCAtMC41NDQ2MDkyNTk4MDYzMzUwMSAtMC41NDAzODA1MDEyNjcyMTAyNyAtPiAtMC40MTk4NDI2NTgwODQ0Njk3NCAtMC42MDM1NDE1MzkzODM1MjgyOAorYXRhbmgwMTAxIGF0YW5oIC0xLjY5MzQ2MTQyNjk4MjkwNTEgLTAuNDg4MDczODYxMDgxMTM2MjEgLT4gLTAuNTg1OTI3NjkxMDIyNDMyODEgLTEuMzUzNzgzNzQ3MDk3NTg5OAorYXRhbmgwMTAyIGF0YW5oIC0xLjM0NjcyOTM5ODU1MDEyMDcgLTAuNDc4NjgzNTQ4OTUzOTU4NzYgLT4gLTAuNjk5NjE2MjQzNzA3MDk5ODUgLTEuMTk5NDQ1MDE1NjU3MDA3NgorYXRhbmgwMTAzIGF0YW5oIC01LjYxNDIyMzI0MTg5ODQ4ODggLTU0NDU1MTYxMy4zOTMwNzcwMiAtPiAtMS44OTMyNjU3NTUwOTI1NzQ0ZS0xNyAtMS41NzA3OTYzMjQ5NTg1MjM1CithdGFuaDAxMDQgYXRhbmggLTAuMDExODQxNDYwMzgxMjYzNjUxIC0zLjI1OTk3ODg5OTgyMzM4NSAtPiAtMC4wMDEwMTgzOTM2NTQ3NDA1MTg4IC0xLjI3MzE2MTQwMjA3NDM4MzgKK2F0YW5oMDEwNSBhdGFuaCAtMC4wMDczMzQ1NzM2OTUwMDI5NTMyIDAuMzU4MjE5NDk2NzA5MjIyNDggLT4gLTAuMDA2NTAwNDg2OTAyNDY4MjQ2NiAwLjM0Mzk5MzU5OTcxOTIwODk1CithdGFuaDAxMDYgYXRhbmggLTEzLjg2Njc4MjI0NDMyMDAxNCAwLjk1NDExMjk1NDU4NjAyNzMgLT4gLTAuMDcxODk2ODUyMDU1MDU4ODk5IDEuNTY1ODMyMjcwNDYzMTQwOQorYXRhbmgwMTA3IGF0YW5oIC03MDguNTk5NjQ5ODI3ODA3NzUgMjEuOTg0ODAyMTU5MjY2Njc1IC0+IC0wLjAwMTQwOTg3NzkwNzQxODk3NDEgMS41NzA3NTI1ODQyODM4OTU5CithdGFuaDAxMDggYXRhbmggLTMwLjkxNjgzMjA3NjAzMDYwMiAxLjM2OTE4OTcxMzg4Mjk4NDMgLT4gLTAuMDMyMjkyNjgyMDQ1NzQzNjc2IDEuNTY5MzY1MjA5NDg0NzExNQorYXRhbmgwMTA5IGF0YW5oIC0wLjU3NDYxODA2MzM5ODYxNzU0IDAuMjk1MzQ3OTc0NDM5MTMwNjMgLT4gLTAuNTY0Njc0NjQ0NzI0ODI3NjUgMC4zOTYxNTYxMjgyNDE3MjYyNQorYXRhbmgwMTEwIGF0YW5oIDAuNDAwODkyNDY3Mzc0MTU2ODUgLTEuNjMyMjg1OTg0MzAwNjU5IC0+IDAuMTA2MzgzMjcwNzg5MDYwOCAtMS4wNDAyODIxMzM1MzI2NDgyCithdGFuaDAxMTEgYXRhbmggMjExOS42MTY3Njg4MjYyMTc2IC0xLjUzODM2NTM0MzczNzcyNDJlKzE3IC0+IDguOTU2NTAwODUxODM4MjA0OWUtMzIgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMTEyIGF0YW5oIDc1Ni44NjAxNzg1MDk0MTY0MSAtNi42MDY0MDg3MTMzMjIzODE3IC0+IDAuMDAxMzIxMTQ4MTEzNjgyMDA0NiAtMS41NzA3ODQ3OTQ4NzAyMjM0CithdGFuaDAxMTMgYXRhbmggNC4wNDkwNjE3NzE4MDQxNjAyIC0yLjU3ODQ0NTY3OTEwNDA2NTJlLTEyIC0+IDAuMjUyMTg0MjU1Mzg1NTM2MTggLTEuNTcwNzk2MzI2Nzk0NzI5MQorYXRhbmgwMTE0IGF0YW5oIDEwLjU4OTI1NDk1NzE3MzUyMyAtMC4xMzk1NjM5MTE0OTYyNDUwOSAtPiAwLjA5NDcwMDg5MDI4MjE5NzY2NCAtMS41Njk1NDA3MTQwMjE3NjIzCithdGFuaDAxMTUgYXRhbmggMS4wMTcxMTg3NTUzMTYwNDk5IDAuNzA3NjYxMTM0NjUzNTQwMTkgLT4gMC41NTI2MDI1MTk3NTM2Nzc5MSAwLjk2NjE5NzExMTE2NjQxNjgyCithdGFuaDAxMTYgYXRhbmggMC4wMzE2NDU1MDI1Mjc3NTA4NDkgMC4wNjczMTk5ODM3MjY1NDQzOTQgLT4gMC4wMzE1MTMwMTgzNDQwODY3NDIgMC4wNjcyODU0Mzc2NzA1NDkwMzYKK2F0YW5oMDExNyBhdGFuaCAwLjEzNjcwMTc3NjI0OTk0NTE3IDAuNDMyNDAwODkzNjE4NTc5NDcgLT4gMC4xMTUzODkzMzE1MTAxNzI1MyAwLjQxMzkyMDA4MTQ1MzM2MjEyCithdGFuaDAxMTggYXRhbmggMC42NDE3Mzg5OTI0MzU5NjY4OCAyLjkwMDg1Nzc2ODY2OTUyNTYgLT4gMC4wNjU2ODAxNDI0MjQxMzQ0MDUgMS4yNTE4NTM1NzI0MDUzOTIxCithdGFuaDAxMTkgYXRhbmggMC4xOTMxMzgxMzUyODAyNTk0MiAzOC43OTk2MTkxNTA3NDE4NjkgLT4gMC4wMDAxMjgyMDc2NTkxNzM2NjY0NCAxLjU0NTAyOTIyMDI4MjM2MTIKKworLS0gdmFsdWVzIG5lYXIgaW5maW5pdHkKK2F0YW5oMDIwMCBhdGFuaCA1LjMyNDI2NDY4MzEzNDc5NTRlKzMwNyAxLjM3NDAzOTYwODAwODQxNTNlKzMwOCAtPiAyLjQ1MTkyNTM2MTY2OTU1NzZlLTMwOSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIwMSBhdGFuaCAxLjE1ODcwMTY0MTI0MTM1OGUrMzA4IC02LjU1NzkyNjg4NzMzNzU4NTNlKzMwNyAtPiA2LjUzNjUzNzUyNjc3OTUwOThlLTMwOSAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAyMDIgYXRhbmggLTEuMzQzNTMyNTczNTc2MjI0N2UrMzA4IDkuODk0NzM2OTI1OTYwMTU0N2UrMzA3IC0+IC00LjgyNTY2ODA5MDY1ODk5NTZlLTMwOSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIwMyBhdGFuaCAtMS40MzU5ODU3NTIyNTk4OTQyZSszMDggLTkuNDcwMTIwNDcwMjM5MTAwNGUrMzA3IC0+IC00Ljg1MzEyODIyNjI4NzI2NDVlLTMwOSAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAyMDQgYXRhbmggMC4wIDUuNjYxNDE4MTA2ODA5ODQ5N2UrMzA3IC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIwNSBhdGFuaCAtMC4wIDYuOTgxMzIxMjcyMTQ1MDEzOWUrMzA3IC0+IC0wLjAgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAyMDYgYXRhbmggMC4wIC03LjQ5NzA2MTMwNjAzMTE0NTNlKzMwNyAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMjA3IGF0YW5oIC0wLjAgLTEuNTI4MDYwMTg4MDMxNDA2OGUrMzA4IC0+IC0wLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMjA4IGF0YW5oIDguMjIxOTQ3MjMzNjAwMDc0NWUrMzA3IDAuMCAtPiAxLjIxNjI1Njg5MzM5NTQ4MTNlLTMwOCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIwOSBhdGFuaCAxLjQ4MTE1MTk2MTcyODA4OTllKzMwOCAtMC4wIC0+IDYuNzUxNTAxNzA4Mzk1MTMyNWUtMzA5IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIxMCBhdGFuaCAtMS4yMjgyMDE2MjYzNTk4Nzg1ZSszMDggMC4wIC0+IC04LjE0MTk4NTYzNjA1Mzc2MTVlLTMwOSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIxMSBhdGFuaCAtMS4wNjE2NDI3NzYwMTU0NDI2ZSszMDggLTAuMCAtPiAtOS40MTkzNjQyMzk5NDg5NTYzZS0zMDkgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMjEyIGF0YW5oIDEuMjk3MTUzNjUxMDE4MDY4MmUrMzA4IDUuMjg0Nzk0ODQ1MjMzMzI5MyAtPiA3LjcwOTE4Njk1MTA5OTgzMjhlLTMwOSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIxMyBhdGFuaCAxLjE4NDk4NjA5Nzc0MTE4NTFlKzMwOCAtNy45NzgxOTA2NDQ3NDU5OTQ5IC0+IDguNDM4OTE3NTY5NjMzOTAxNGUtMzA5IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIxNCBhdGFuaCAtMS40MDI5OTY5NDIyNTg2NjM1ZSszMDggMC45Mzg5MTk4NjU0MzY2MzM3NSAtPiAtNy4xMjc1OTkyODMyMTgwNzNlLTMwOSAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIxNSBhdGFuaCAtNC43NTA4MDk4OTEyMjQ4MjExZSszMDcgLTguMjcwMjQyMTI0NzAzOTkwOCAtPiAtMi4xMDQ5MDQyNjQ1Mjc4MDQzZS0zMDggLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMjE2IGF0YW5oIDguMjY4MDc0MjExNTc2OTk5OCA4LjExNTM4OTg0MTA5MTgwNjVlKzMwNyAtPiAwLjAgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDAyMTcgYXRhbmggMS4yNTc1MzI1MTQ2MjE4ODg1IC0xLjQ3NDY2NzkxNDc2NjE2NDllKzMwOCAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgwMjE4IGF0YW5oIC0yLjQ2MTg4MDM2ODIzMTA4OTkgMS4zNzgxNTIyNzE3MDA1NTY4ZSszMDggLT4gLTAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMDIxOSBhdGFuaCAtNC4wOTUyMzg2Njk0Nzg4MTEyIC0xLjIzMTA4MzM3NjM1MzcwM2UrMzA4IC0+IC0wLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorCistLSB2YWx1ZXMgbmVhciAwCithdGFuaDAyMjAgYXRhbmggMy44MDE3NTYzNjU5ODExNjI4ZS0zMTQgMi42NjM1NDg0MjM5MDc0MzE5ZS0zMTIgLT4gMy44MDE3NTYzNjU5ODExNjI4ZS0zMTQgMi42NjM1NDg0MjM5MDc0MzE5ZS0zMTIKK2F0YW5oMDIyMSBhdGFuaCAxLjczOTExMTA3MzM2MTE4NzhlLTMyMSAtNC4zNTQ3ODAwNjcyNTQxNDE5ZS0zMTMgLT4gMS43MzkxMTEwNzMzNjExODc4ZS0zMjEgLTQuMzU0NzgwMDY3MjU0MTQxOWUtMzEzCithdGFuaDAyMjIgYXRhbmggLTUuOTY1NjgxNjA4MTMyNTA3OGUtMzE3IDkuOTY5MjI1MzU1NTQxNjI2M2UtMzEzIC0+IC01Ljk2NTY4MTYwODEzMjUwNzhlLTMxNyA5Ljk2OTIyNTM1NTU0MTYyNjNlLTMxMworYXRhbmgwMjIzIGF0YW5oIC02LjU2MDY2NzExNzg0MDAyMzllLTMxMyAtMi4xNjgwOTM2NDA2MzU3MzM1ZS0zMDkgLT4gLTYuNTYwNjY3MTE3ODQwMDIzOWUtMzEzIC0yLjE2ODA5MzY0MDYzNTczMzVlLTMwOQorYXRhbmgwMjI0IGF0YW5oIDAuMCAyLjUyMzA5NDQ0MDE4MjA3NzllLTMxOSAtPiAwLjAgMi41MjMwOTQ0NDAxODIwNzc5ZS0zMTkKK2F0YW5oMDIyNSBhdGFuaCAtMC4wIDUuNjA2NjU2OTQ5MDA2NDY1OGUtMzIwIC0+IC0wLjAgNS42MDY2NTY5NDkwMDY0NjU4ZS0zMjAKK2F0YW5oMDIyNiBhdGFuaCAwLjAgLTIuNDIyMjQ4NzI0OTQ2ODM3N2UtMzE3IC0+IDAuMCAtMi40MjIyNDg3MjQ5NDY4Mzc3ZS0zMTcKK2F0YW5oMDIyNyBhdGFuaCAtMC4wIC0zLjA4NjExMDEwODkyMDYwMzdlLTMxNiAtPiAtMC4wIC0zLjA4NjExMDEwODkyMDYwMzdlLTMxNgorYXRhbmgwMjI4IGF0YW5oIDMuMTIxOTIyMjg4NDM5Mzk4NmUtMzEwIDAuMCAtPiAzLjEyMTkyMjI4ODQzOTM5ODZlLTMxMCAwLjAKK2F0YW5oMDIyOSBhdGFuaCA5Ljg5MjYzMzc1NjQ5NzYxOTZlLTMwOSAtMC4wIC0+IDkuODkyNjMzNzU2NDk3NjE5NmUtMzA5IC0wLjAKK2F0YW5oMDIzMCBhdGFuaCAtMS41NDYyNTM1MDkyOTE4MTU0ZS0zMTIgMC4wIC0+IC0xLjU0NjI1MzUwOTI5MTgxNTRlLTMxMiAwLjAKK2F0YW5oMDIzMSBhdGFuaCAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMAorCistLSByZWFsIHBhcnQgPSArLy0xLCBpbWFnaW5hcnkgcGFydCB0aW55CithdGFuaDAzMDAgYXRhbmggMS4wIDFlLTE1MyAtPiAxNzYuNDk0MzMzMjA0MzI0NDggMC43ODUzOTgxNjMzOTc0NDgyOAorYXRhbmgwMzAxIGF0YW5oIDEuMCA5Ljk5OTk5OTk5OTk5OTk5OTdlLTE1NSAtPiAxNzcuNjQ1NjI1NzUwODIxNDkgMC43ODUzOTgxNjMzOTc0NDgyOAorYXRhbmgwMzAyIGF0YW5oIC0xLjAgMWUtMTYxIC0+IC0xODUuNzA0NjczNTc2MzAwNjUgMC43ODUzOTgxNjMzOTc0NDgyOAorYXRhbmgwMzAzIGF0YW5oIDEuMCAtMWUtMTY1IC0+IDE5MC4zMDk4NDM3NjIyODg3NSAtMC43ODUzOTgxNjMzOTc0NDgyOAorYXRhbmgwMzA0IGF0YW5oIC0xLjAgLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IC0+IC0zNzIuMjIwMDM1OTYwNjkwNjEgLTAuNzg1Mzk4MTYzMzk3NDQ4MjgKKworLS0gc3BlY2lhbCB2YWx1ZXMKK2F0YW5oMTAwMCBhdGFuaCAwLjAgMC4wIC0+IDAuMCAwLjAKK2F0YW5oMTAwMSBhdGFuaCAwLjAgbmFuIC0+IDAuMCBuYW4KK2F0YW5oMTAwMiBhdGFuaCAxLjAgMC4wIC0+IGluZiAwLjAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlLWJ5LXplcm8KK2F0YW5oMTAwMyBhdGFuaCAwLjAgaW5mIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAwNCBhdGFuaCAyLjMgaW5mIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAwNSBhdGFuaCAyLjMgbmFuIC0+IG5hbiBuYW4KK2F0YW5oMTAwNiBhdGFuaCBpbmYgMC4wIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAwNyBhdGFuaCBpbmYgMi4zIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAwOCBhdGFuaCBpbmYgaW5mIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAwOSBhdGFuaCBpbmYgbmFuIC0+IDAuMCBuYW4KK2F0YW5oMTAxMCBhdGFuaCBuYW4gMC4wIC0+IG5hbiBuYW4KK2F0YW5oMTAxMSBhdGFuaCBuYW4gMi4zIC0+IG5hbiBuYW4KK2F0YW5oMTAxMiBhdGFuaCBuYW4gaW5mIC0+IDAuMCAxLjU3MDc5NjMyNjc5NDg5NjYgICAgICAgaWdub3JlLXJlYWwtc2lnbgorYXRhbmgxMDEzIGF0YW5oIG5hbiBuYW4gLT4gbmFuIG5hbgorYXRhbmgxMDE0IGF0YW5oIDAuMCAtMC4wIC0+IDAuMCAtMC4wCithdGFuaDEwMTUgYXRhbmggMS4wIC0wLjAgLT4gaW5mIC0wLjAgICAgICAgICAgICAgICAgICAgIGRpdmlkZS1ieS16ZXJvCithdGFuaDEwMTYgYXRhbmggMC4wIC1pbmYgLT4gMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAxNyBhdGFuaCAyLjMgLWluZiAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgxMDE4IGF0YW5oIGluZiAtMC4wIC0+IDAuMCAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDEwMTkgYXRhbmggaW5mIC0yLjMgLT4gMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAyMCBhdGFuaCBpbmYgLWluZiAtPiAwLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgxMDIxIGF0YW5oIG5hbiAtMC4wIC0+IG5hbiBuYW4KK2F0YW5oMTAyMiBhdGFuaCBuYW4gLTIuMyAtPiBuYW4gbmFuCithdGFuaDEwMjMgYXRhbmggbmFuIC1pbmYgLT4gMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjYgICAgIGlnbm9yZS1yZWFsLXNpZ24KK2F0YW5oMTAyNCBhdGFuaCAtMC4wIC0wLjAgLT4gLTAuMCAtMC4wCithdGFuaDEwMjUgYXRhbmggLTAuMCBuYW4gLT4gLTAuMCBuYW4KK2F0YW5oMTAyNiBhdGFuaCAtMS4wIC0wLjAgLT4gLWluZiAtMC4wICAgICAgICAgICAgICAgICAgZGl2aWRlLWJ5LXplcm8KK2F0YW5oMTAyNyBhdGFuaCAtMC4wIC1pbmYgLT4gLTAuMCAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDEwMjggYXRhbmggLTIuMyAtaW5mIC0+IC0wLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgxMDI5IGF0YW5oIC0yLjMgbmFuIC0+IG5hbiBuYW4KK2F0YW5oMTAzMCBhdGFuaCAtaW5mIC0wLjAgLT4gLTAuMCAtMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDEwMzEgYXRhbmggLWluZiAtMi4zIC0+IC0wLjAgLTEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgxMDMyIGF0YW5oIC1pbmYgLWluZiAtPiAtMC4wIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAzMyBhdGFuaCAtaW5mIG5hbiAtPiAtMC4wIG5hbgorYXRhbmgxMDM0IGF0YW5oIC0wLjAgMC4wIC0+IC0wLjAgMC4wCithdGFuaDEwMzUgYXRhbmggLTEuMCAwLjAgLT4gLWluZiAwLjAgICAgICAgICAgICAgICAgICAgIGRpdmlkZS1ieS16ZXJvCithdGFuaDEwMzYgYXRhbmggLTAuMCBpbmYgLT4gLTAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTAzNyBhdGFuaCAtMi4zIGluZiAtPiAtMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorYXRhbmgxMDM4IGF0YW5oIC1pbmYgMC4wIC0+IC0wLjAgMS41NzA3OTYzMjY3OTQ4OTY2CithdGFuaDEwMzkgYXRhbmggLWluZiAyLjMgLT4gLTAuMCAxLjU3MDc5NjMyNjc5NDg5NjYKK2F0YW5oMTA0MCBhdGFuaCAtaW5mIGluZiAtPiAtMC4wIDEuNTcwNzk2MzI2Nzk0ODk2NgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGxvZzogTmF0dXJhbCBsb2dhcml0aG0gLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9nMDAwMCBsb2cgMS4wIDAuMCAtPiAwLjAgMC4wCitsb2cwMDAxIGxvZyAxLjAgLTAuMCAtPiAwLjAgLTAuMAorbG9nMDAwMiBsb2cgLTEuMCAwLjAgLT4gMC4wIDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAwMyBsb2cgLTEuMCAtMC4wIC0+IDAuMCAtMy4xNDE1OTI2NTM1ODk3OTMxCistLSB2YWx1ZXMgYWxvbmcgYm90aCBzaWRlcyBvZiByZWFsIGF4aXMKK2xvZzAwMTAgbG9nIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAgLT4gLTc0My43NDY5MjQ3NDA4MjEzMyAzLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMTEgbG9nIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAtMC4wIC0+IC03NDMuNzQ2OTI0NzQwODIxMzMgLTMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAxMiBsb2cgLTFlLTMwNSAwLjAgLT4gLTcwMi4yODg0NTMzNjMxODM5OCAzLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMTMgbG9nIC0xZS0zMDUgLTAuMCAtPiAtNzAyLjI4ODQ1MzM2MzE4Mzk4IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMTQgbG9nIC0xZS0xNTAgMC4wIC0+IC0zNDUuMzg3NzYzOTQ5MTA2ODQgMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMDE1IGxvZyAtMWUtMTUwIC0wLjAgLT4gLTM0NS4zODc3NjM5NDkxMDY4NCAtMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMDE2IGxvZyAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAgLT4gLTM2Ljg0MTM2MTQ4NzkwNDczNCAzLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMTcgbG9nIC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IC0wLjAgLT4gLTM2Ljg0MTM2MTQ4NzkwNDczNCAtMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMDE4IGxvZyAtMC4wMDEgMC4wIC0+IC02LjkwNzc1NTI3ODk4MjEzNjggMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMDE5IGxvZyAtMC4wMDEgLTAuMCAtPiAtNi45MDc3NTUyNzg5ODIxMzY4IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMjAgbG9nIC0wLjU3ODk5OTk5OTk5OTk5OTk2IDAuMCAtPiAtMC41NDY0NTI4MDE0MDkxNDE4OCAzLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMjEgbG9nIC0wLjU3ODk5OTk5OTk5OTk5OTk2IC0wLjAgLT4gLTAuNTQ2NDUyODAxNDA5MTQxODggLTMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAyMiBsb2cgLTAuOTk5OTk5OTk5OTk5OTk5ODkgMC4wIC0+IC0xLjExMDIyMzAyNDYyNTE1NjVlLTE2IDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAyMyBsb2cgLTAuOTk5OTk5OTk5OTk5OTk5ODkgLTAuMCAtPiAtMS4xMTAyMjMwMjQ2MjUxNTY1ZS0xNiAtMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMDI0IGxvZyAtMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAyLjIyMDQ0NjA0OTI1MDMxMjhlLTE2IDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAyNSBsb2cgLTEuMDAwMDAwMDAwMDAwMDAwMiAtMC4wIC0+IDIuMjIwNDQ2MDQ5MjUwMzEyOGUtMTYgLTMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAyNiBsb2cgLTEuMDAwOTk5OTk5OTk5OTk5OSAwLjAgLT4gMC4wMDA5OTk1MDAzMzMwODM0MjMyMSAzLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMjcgbG9nIC0xLjAwMDk5OTk5OTk5OTk5OTkgLTAuMCAtPiAwLjAwMDk5OTUwMDMzMzA4MzQyMzIxIC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMjggbG9nIC0yLjAgMC4wIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MjkgMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMDI5IGxvZyAtMi4wIC0wLjAgLT4gMC42OTMxNDcxODA1NTk5NDUyOSAtMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMDMwIGxvZyAtMjMuMCAwLjAgLT4gMy4xMzU0OTQyMTU5MjkxNDk3IDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAzMSBsb2cgLTIzLjAgLTAuMCAtPiAzLjEzNTQ5NDIxNTkyOTE0OTcgLTMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAzMiBsb2cgLTEwMDAwMDAwMDAwMDAwMDAwLjAgMC4wIC0+IDM2Ljg0MTM2MTQ4NzkwNDczNCAzLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMzMgbG9nIC0xMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMzYuODQxMzYxNDg3OTA0NzM0IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMzQgbG9nIC05Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAwLjAgLT4gMzQ1LjM4Nzc2Mzk0OTEwNjg0IDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAzNSBsb2cgLTkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0wLjAgLT4gMzQ1LjM4Nzc2Mzk0OTEwNjg0IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMzYgbG9nIC0xLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gNjg4LjQ3Mjk0MjgwNTIxOTY1IDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDAzNyBsb2cgLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gNjg4LjQ3Mjk0MjgwNTIxOTY1IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAwMzggbG9nIDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IDAuMCAtPiAtNzQzLjc0NjkyNDc0MDgyMTMzIDAuMAorbG9nMDAzOSBsb2cgOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiAtNzQzLjc0NjkyNDc0MDgyMTMzIC0wLjAKK2xvZzAwNDAgbG9nIDFlLTMwNSAwLjAgLT4gLTcwMi4yODg0NTMzNjMxODM5OCAwLjAKK2xvZzAwNDEgbG9nIDFlLTMwNSAtMC4wIC0+IC03MDIuMjg4NDUzMzYzMTgzOTggLTAuMAorbG9nMDA0MiBsb2cgMWUtMTUwIDAuMCAtPiAtMzQ1LjM4Nzc2Mzk0OTEwNjg0IDAuMAorbG9nMDA0MyBsb2cgMWUtMTUwIC0wLjAgLT4gLTM0NS4zODc3NjM5NDkxMDY4NCAtMC4wCitsb2cwMDQ0IGxvZyA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3IDAuMCAtPiAtMzYuODQxMzYxNDg3OTA0NzM0IDAuMAorbG9nMDA0NSBsb2cgOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wIC0+IC0zNi44NDEzNjE0ODc5MDQ3MzQgLTAuMAorbG9nMDA0NiBsb2cgMC4wMDEgMC4wIC0+IC02LjkwNzc1NTI3ODk4MjEzNjggMC4wCitsb2cwMDQ3IGxvZyAwLjAwMSAtMC4wIC0+IC02LjkwNzc1NTI3ODk4MjEzNjggLTAuMAorbG9nMDA0OCBsb2cgMC41Nzg5OTk5OTk5OTk5OTk5NiAwLjAgLT4gLTAuNTQ2NDUyODAxNDA5MTQxODggMC4wCitsb2cwMDQ5IGxvZyAwLjU3ODk5OTk5OTk5OTk5OTk2IC0wLjAgLT4gLTAuNTQ2NDUyODAxNDA5MTQxODggLTAuMAorbG9nMDA1MCBsb2cgMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAgLT4gLTEuMTEwMjIzMDI0NjI1MTU2NWUtMTYgMC4wCitsb2cwMDUxIGxvZyAwLjk5OTk5OTk5OTk5OTk5OTg5IC0wLjAgLT4gLTEuMTEwMjIzMDI0NjI1MTU2NWUtMTYgLTAuMAorbG9nMDA1MiBsb2cgMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAyLjIyMDQ0NjA0OTI1MDMxMjhlLTE2IDAuMAorbG9nMDA1MyBsb2cgMS4wMDAwMDAwMDAwMDAwMDAyIC0wLjAgLT4gMi4yMjA0NDYwNDkyNTAzMTI4ZS0xNiAtMC4wCitsb2cwMDU0IGxvZyAxLjAwMDk5OTk5OTk5OTk5OTkgMC4wIC0+IDAuMDAwOTk5NTAwMzMzMDgzNDIzMjEgMC4wCitsb2cwMDU1IGxvZyAxLjAwMDk5OTk5OTk5OTk5OTkgLTAuMCAtPiAwLjAwMDk5OTUwMDMzMzA4MzQyMzIxIC0wLjAKK2xvZzAwNTYgbG9nIDIuMCAwLjAgLT4gMC42OTMxNDcxODA1NTk5NDUyOSAwLjAKK2xvZzAwNTcgbG9nIDIuMCAtMC4wIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MjkgLTAuMAorbG9nMDA1OCBsb2cgMjMuMCAwLjAgLT4gMy4xMzU0OTQyMTU5MjkxNDk3IDAuMAorbG9nMDA1OSBsb2cgMjMuMCAtMC4wIC0+IDMuMTM1NDk0MjE1OTI5MTQ5NyAtMC4wCitsb2cwMDYwIGxvZyAxMDAwMDAwMDAwMDAwMDAwMC4wIDAuMCAtPiAzNi44NDEzNjE0ODc5MDQ3MzQgMC4wCitsb2cwMDYxIGxvZyAxMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMzYuODQxMzYxNDg3OTA0NzM0IC0wLjAKK2xvZzAwNjIgbG9nIDkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IDAuMCAtPiAzNDUuMzg3NzYzOTQ5MTA2ODQgMC4wCitsb2cwMDYzIGxvZyA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtMC4wIC0+IDM0NS4zODc3NjM5NDkxMDY4NCAtMC4wCitsb2cwMDY0IGxvZyAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gNjg4LjQ3Mjk0MjgwNTIxOTY1IDAuMAorbG9nMDA2NSBsb2cgMS4wMDAwMDAwMDAwMDAwMDAxZSsyOTkgLTAuMCAtPiA2ODguNDcyOTQyODA1MjE5NjUgLTAuMAorCistLSByYW5kb20gaW5wdXRzCitsb2cwMDY2IGxvZyAtMS45ODMwNDU0OTQ1MTg2MTkxZS0xNiAtMi4wMzM0NDQ4MDI1NjczMzQ2IC0+IDAuNzA5NzMxMzAxOTQzMjk4MDMgLTEuNTcwNzk2MzI2Nzk0ODk2OAorbG9nMDA2NyBsb2cgLTAuOTY3NDU4NTMwMjQ3NDE4NTcgLTAuODQ5OTU4MTYyMjgyOTk2OTIgLT4gMC4yNTI5MjgxMTM5ODcyMjM4NyAtMi40MjA3NTcwNDM4NTM2OTA1Citsb2cwMDY4IGxvZyAtMC4xNjAzNjQ0MzEzOTQ4NDE4IC0wLjI5Mjk5NDIxMTEwNDE4MzUgLT4gLTEuMDk2NTg1Nzg3MjQyNzM3NCAtMi4wNzE1ODcwODU5OTcxNDE5Citsb2cwMDY5IGxvZyAtMC4xNTkxNzkxMzE2ODQzODY5OSAtMC4yNTIzODc5OTI1MTEzMjE3NyAtPiAtMS4yMDkzNDc3MzEzMjQ5OTAxIC0yLjEzMzQ3ODQyMzIwMzM4NjMKK2xvZzAwNzAgbG9nIC0wLjY4OTA3ODE4NTM1MDc4ODAyIC0zLjA2OTMxMDU4NTM0NzYzNDYgLT4gMS4xNDYwMzk4NjI5MTg0NTY1IC0xLjc5MTY0MDM4MTM5MTMyMTEKK2xvZzAwNzEgbG9nIC0xNy4yNjgxMzM0NDc1NjU1ODkgNi44MTY1MTIwMDE0NjA0NzU2IC0+IDIuOTIxMjY5NDQ2NTk3NDgzNiAyLjc2NTYyNDUwODE2MDMxNjQKK2xvZzAwNzIgbG9nIC0xLjcxNTM4OTQ0Nzk2OTAzMjggMjYuNDM0MDU1MzcyODAyNjM2IC0+IDMuMjc2NzU0Mjk1MzcxODAwMyAxLjYzNTU5ODYyNzYzNDE3MzQKK2xvZzAwNzMgbG9nIC04LjA0NTY3OTQ2NDg5MzY1NzhlLTA2IDAuMTk3MjI3NTgwNTc1NzAyMDggLT4gLTEuNjIzMzk2OTg0ODI5NjA3NSAxLjU3MDgzNzEyMDY4MTAxMDEKK2xvZzAwNzQgbG9nIC0yLjQzMDY0NDI2OTEzMjMxNzMgMC42ODQ2OTE5NzUwNzAwOTk2IC0+IDAuOTI2MzM1OTIwMDE5Njk1ODkgMi44NjcwMTYwNTc2NzE4MzMxCitsb2cwMDc1IGxvZyAtMy41NDg4MDQ5MjUwODg4MTk0IDAuNDUzMjQwNDA2NDMxODUyNTQgLT4gMS4yNzQ3MDA4Mzc0MjU2NDI2IDMuMDE0NTY0MDAwNzg4NTExMQorbG9nMDA3NiBsb2cgMC4xODQxODUxNjg1MTUxMDE4OSAtMC4yNjA2MjUxODgzNjIxMjYxNyAtPiAtMS4xNDIxMjg3MTIxOTQwMzQ0IC0wLjk1NTU4NDQwODQxMTgzNDM0Citsb2cwMDc3IGxvZyAyLjcxMjQ4Mzc3OTU2MzgzOTkgLTEzLjE0ODc2OTA2NzEzMzM4NyAtPiAyLjU5NzE2NTk5NzU3MDY4MDIgLTEuMzY3MzU4MzA0NTIwOTQzOQorbG9nMDA3OCBsb2cgMy42NTIxMjc1NDc2MTY5MTQ5ZS0xMyAtMy43ODIwNTQzMDIzMTcwNjczZS0wNSAtPiAtMTAuMTgyNjU4MTM2NzQxNTY5IC0xLjU3MDc5NjMxNzEzODQzMTYKK2xvZzAwNzkgbG9nIDUuMDg3NzU0NTgxMzg2MjIzOSAtMS4yODM0OTc4MzI2Nzg2ODUyIC0+IDEuNjU3Njg1NjIxMzA3NjMyOCAtMC4yNDcxMTU4MzQ5NzczODQ4NQorbG9nMDA4MCBsb2cgMC4yNjQ3Nzk4NjgwODQ2MTUxMiAtMC42NzY1OTAwMTE5NDE4NzQyOSAtPiAtMC4zMTk0NDA4NTIwNzk5OTk3MyAtMS4xOTc3NzM2NzE5ODcxMjEKK2xvZzAwODEgbG9nIDAuMDAxNDc1NDI2MTM5ODA3MTk2MiA1LjM1MTQ2OTE2MDgyMDU0NDIgLT4gMS42NzczNzExNzA3MTUzODI5IDEuNTcwNTIwNjIxOTI2MTgwMgorbG9nMDA4MiBsb2cgMC4yOTY2NzMzNDQ2MjE1Nzg4NSAwLjAwMDIwMDU2MDQ1MDQyNTg0Nzk1IC0+IC0xLjIxNTEyMzM2NjcwNzk1ODggMC4wMDA2NzYwMzExNDE2ODY4OTIwNAorbG9nMDA4MyBsb2cgMC44MjEwNDIzMzY3MTA5OTQyNSAzLjkwMDUzODcxMzAxMzMxMDIgLT4gMS4zODI3OTE4OTY1Mjk5NTkzIDEuMzYzMzMwNDcwMTg0ODM2MworbG9nMDA4NCBsb2cgMC4yNzI2ODEzNTM1ODE4MDY2NyAxMjQuNDIwODgxMTA5NDU4MDQgLT4gNC44MjM2NzI0MjIzNTU5MjI5IDEuNTY4NjA0NzI1ODc4OTAxNQorbG9nMDA4NSBsb2cgMC4wMDI2Mjg2OTU5MTY4MjY3NDg1IDAuNDc3OTU4MDgxODA1NzMwMTMgLT4gLTAuNzM4MjE3MTIxMzc4MDkxMjYgMS41NjUyOTY1MzYwOTYwMDg3CisKKy0tIHZhbHVlcyBuZWFyIGluZmluaXR5Citsb2cwMTAwIGxvZyAxLjA1MTIwMjU3NDQwMDMxNzJlKzMwOCA3LjI2MjE2Njk3NTA2NjQ2MTFlKzMwNyAtPiA3MDkuNDQxMjM5Njc4MTQ0OTQgMC42MDQ1NTQzNDA0ODMzMjk2OAorbG9nMDEwMSBsb2cgNS41MzQ0MjQ5MDM0MzcyMTI2ZSszMDcgLTEuMjE1NTg1OTE1ODQzMTI3NWUrMzA4IC0+IDcwOS40ODU2MjMwMDM0NTY3OSAtMS4xNDM1NTMwNTY3MTc5NzMKK2xvZzAxMDIgbG9nIC0xLjMxNTU1NzU0MDM0Njk0MDhlKzMwOCAxLjE2MTA3OTM1NDE2NjM4NjRlKzMwOCAtPiA3MDkuNzU4NDc4MDk1NDY0MjggMi40MTg0ODc5NjUwNDk3NAorbG9nMDEwMyBsb2cgLTEuNjMyMzY2NzIwOTczMjM1ZSszMDggLTEuNTQyOTk0NDYyMTE0NDhlKzMwOCAtPiA3MTAuMDA1NDUyMzY1MTU1ODYgLTIuMzg0MzMyNjAyODQ1NTA4NworbG9nMDEwNCBsb2cgMC4wIDUuOTQ0OTI3NjY5MjMyNzcxMmUrMzA3IC0+IDcwOC42NzYxNjE5MTI1ODUyNiAxLjU3MDc5NjMyNjc5NDg5NjYKK2xvZzAxMDUgbG9nIC0wLjAgMS4xMjAxODUwNDU5MDI1NjkyZSszMDggLT4gNzA5LjMwOTcwMjUzMzM4MTcxIDEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMDEwNiBsb2cgMC4wIC0xLjYyMTQyMjU5MzM0NjY1MjhlKzMwOCAtPiA3MDkuNjc5NTEyNTUwMTA4NiAtMS41NzA3OTYzMjY3OTQ4OTY2Citsb2cwMTA3IGxvZyAtMC4wIC0xLjc0NTMyNjk3OTE1OTEwNThlKzMwOCAtPiA3MDkuNzUzMTUwNTYwODczNzkgLTEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMDEwOCBsb2cgMS40NDA4NjA1Nzc2MDE0MjhlKzMwOCAwLjAgLT4gNzA5LjU2MTQ0OTIwMDU4MjYyIDAuMAorbG9nMDEwOSBsb2cgMS4zOTE1MTUxNzYxNDgyODJlKzMwOCAtMC4wIC0+IDcwOS41MjY2MDE4NTA0MTMyNyAtMC4wCitsb2cwMTEwIGxvZyAtMS4yMDEzNTQ0MDEyOTUyOTZlKzMwOCAwLjAgLT4gNzA5LjM3OTY1ODIzMDIzOTU2IDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDExMSBsb2cgLTEuNjcwNDMzNzgyNTk3NjgwNGUrMzA4IC0wLjAgLT4gNzA5LjcwOTI5MTk4NDkyMzk5IC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzAxMTIgbG9nIDcuMjI3Njk3NDY1NTE5MDIyM2UrMzA3IDcuOTQ4Nzk3MTEzNjkxNjQgLT4gNzA4Ljg3MTU0NDA2NTEyMTA0IDEuMDk5NzY4OTMwNzg1MDQ1OGUtMzA3Citsb2cwMTEzIGxvZyAxLjEyMDc4NTk1OTM3MTYwNzZlKzMwOCAtNi4xOTU2MjAwODY4MjIxMTQ3IC0+IDcwOS4zMTAyMzg4MzA4MDEwNCAtNS41Mjc5MjQ0MzEwODAzMjg2ZS0zMDgKK2xvZzAxMTQgbG9nIC00LjY2Nzg5MzM4NzQ0NzEwNDVlKzMwNyA5Ljk0NzEwNzg5MzIyMDM4MiAtPiA3MDguNDM0MzMxNDI0MzEzODggMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMTE1IGxvZyAtMS41MTA4MDEyNDUzOTUwMTQyZSszMDggLTUuMzExNzE5NzE3OTM3NTYxOSAtPiA3MDkuNjA4ODQ4Nzc4MzUwMDggLTMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMDExNiBsb2cgNy40OTAzNzUwODcxNTA0NDM1IDEuNTMyMDcwMzc3NjYyNjM1MmUrMzA4IC0+IDcwOS42MjI4Mjg2NTA4NTEzNyAxLjU3MDc5NjMyNjc5NDg5NjYKK2xvZzAxMTcgbG9nIDUuOTc2MDMyNTUyNTY1NDc3OCAtOC4wMTQ5NDczOTk3MzQ5MTIzZSszMDcgLT4gNzA4Ljk3NDkzMTc3MjQ4Mzk2IC0xLjU3MDc5NjMyNjc5NDg5NjYKK2xvZzAxMTggbG9nIC03Ljg4MDE5NDIwNjM4NjYyOSAxLjc4NjE4NDU4MTQ3Njc0NDFlKzMwOCAtPiA3MDkuNzc2MjkwNDY4MzcxMzcgMS41NzA3OTYzMjY3OTQ4OTY2Citsb2cwMTE5IGxvZyAtOS44ODY0Mzg5OTM4NTI4NjUgLTYuMTkyMzU3ODEwODA3NDdlKzMwNyAtPiA3MDguNzE2OTM5NDY5NzczMDIgLTEuNTcwNzk2MzI2Nzk0ODk2NgorCistLSB2YWx1ZXMgbmVhciAwCitsb2cwMTIwIGxvZyAyLjI5OTY4Njc1NzkyMjc3NzllLTMwOCA2Ljc4NjE4NDA3NzA5MzkxMjVlLTMxMiAtPiAtNzA4LjM2MzQzNTY3NzE3MzkyIDAuMDAwMjk1MDkxNjYyMjMzMzk4MTUKK2xvZzAxMjEgbG9nIDYuOTE2OTE5MDQxNzc3NDUxNmUtMzIzIC05LjA0MTQwMTMxODg5NDgxMThlLTMyMiAtPiAtNzM5LjIyNzY2Nzk2NDY4Mzg2IC0xLjQ5NDQ0MjMyMTAwMDE2NjkKK2xvZzAxMjIgbG9nIC0xLjUzNzgwNjQ5NjI5MTQwMTFlLTMxNiAxLjgyNDM2MjgzODkzNTQ2MzVlLTMxMCAtPiAtNzEzLjIwMDE0ODAzMTQyOTY1IDEuNTcwNzk3MTY5NzIyODg0MgorbG9nMDEyMyBsb2cgLTIuMzMxOTg5ODQ4MzcwNjgzN2UtMzIxIC0yLjIzNTg3NjM5NDE4NjYzNzFlLTMxMyAtPiAtNzE5LjkwNDUwMDgzMzI1MjIgLTEuNTcwNzk2MzM3MjI0NzY2Citsb2cwMTI0IGxvZyAwLjAgMy44NzI3NzAxMDEwODExMjFlLTMxNSAtPiAtNzIzLjk2MDMzNDI1Mzc0NDAxIDEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMDEyNSBsb2cgLTAuMCA5LjYzNDI4MDA5MzkwNDMwNzZlLTMyMiAtPiAtNzM5LjE2NzA3MjM2MjgxNzUyIDEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMDEyNiBsb2cgMC4wIC0yLjI2NjA5OTM5MzQyNzgzNGUtMzA4IC0+IC03MDguMzc4MTQ4NjE3NTc5NjUgLTEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMDEyNyBsb2cgLTAuMCAtMi4xMTg0Njk1NjczNzY2NjI2ZS0zMTUgLT4gLTcyNC41NjM2MTAzNjczMTgxMiAtMS41NzA3OTYzMjY3OTQ4OTY2Citsb2cwMTI4IGxvZyAxLjEzNjM1MDk4NTQzNDg2NzFlLTMyMiAwLjAgLT4gLTc0MS4zMDQ1Nzc3MDU0NTIwNiAwLjAKK2xvZzAxMjkgbG9nIDMuNTU3MjcyNjUwMDU2OTc1MWUtMzIyIC0wLjAgLT4gLTc0MC4xNjM0MDU4MDIzNjUyMiAtMC4wCitsb2cwMTMwIGxvZyAtMi4zNjk2MDcxMDc0MDQwNTkzZS0zMTAgMC4wIC0+IC03MTIuOTM4NjU0NjY0MjE2NDEgMy4xNDE1OTI2NTM1ODk3OTMxCitsb2cwMTMxIGxvZyAtMi44MTMyODM4OTcyNjY5MzRlLTMxNyAtMC4wIC0+IC03MjguODg1MTIyMDMxMzg4NjIgLTMuMTQxNTkyNjUzNTg5NzkzMQorCistLSB2YWx1ZXMgbmVhciB0aGUgdW5pdCBjaXJjbGUKK2xvZzAyMDAgbG9nIC0wLjU5OTk5OTk5OTk5OTk5OTk4IDAuODAwMDAwMDAwMDAwMDAwMDQgLT4gMi4yMjA0NDYwNDkyNTAzMTMyZS0xNyAyLjIxNDI5NzQzNTU4ODE4MDgKK2xvZzAyMDEgbG9nIDAuNzk5OTk5OTk5OTk5OTk5OTMgMC42MDAwMDAwMDAwMDAwMDAwOSAtPiA2LjE2Mjk3NTgyMjAzOTE1NDdlLTMzIDAuNjQzNTAxMTA4NzkzMjg0NDgKKworLS0gc3BlY2lhbCB2YWx1ZXMKK2xvZzEwMDAgbG9nIC0wLjAgMC4wIC0+IC1pbmYgMy4xNDE1OTI2NTM1ODk3OTMxICAgICAgICAgZGl2aWRlLWJ5LXplcm8KK2xvZzEwMDEgbG9nIDAuMCAwLjAgLT4gLWluZiAwLjAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlLWJ5LXplcm8KK2xvZzEwMDIgbG9nIDAuMCBpbmYgLT4gaW5mIDEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMTAwMyBsb2cgMi4zIGluZiAtPiBpbmYgMS41NzA3OTYzMjY3OTQ4OTY2Citsb2cxMDA0IGxvZyAtMC4wIGluZiAtPiBpbmYgMS41NzA3OTYzMjY3OTQ4OTY2Citsb2cxMDA1IGxvZyAtMi4zIGluZiAtPiBpbmYgMS41NzA3OTYzMjY3OTQ4OTY2Citsb2cxMDA2IGxvZyAwLjAgbmFuIC0+IG5hbiBuYW4KK2xvZzEwMDcgbG9nIDIuMyBuYW4gLT4gbmFuIG5hbgorbG9nMTAwOCBsb2cgLTAuMCBuYW4gLT4gbmFuIG5hbgorbG9nMTAwOSBsb2cgLTIuMyBuYW4gLT4gbmFuIG5hbgorbG9nMTAxMCBsb2cgLWluZiAwLjAgLT4gaW5mIDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMTAxMSBsb2cgLWluZiAyLjMgLT4gaW5mIDMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMTAxMiBsb2cgaW5mIDAuMCAtPiBpbmYgMC4wCitsb2cxMDEzIGxvZyBpbmYgMi4zIC0+IGluZiAwLjAKK2xvZzEwMTQgbG9nIC1pbmYgaW5mIC0+IGluZiAyLjM1NjE5NDQ5MDE5MjM0NDgKK2xvZzEwMTUgbG9nIGluZiBpbmYgLT4gaW5mIDAuNzg1Mzk4MTYzMzk3NDQ4MjgKK2xvZzEwMTYgbG9nIGluZiBuYW4gLT4gaW5mIG5hbgorbG9nMTAxNyBsb2cgLWluZiBuYW4gLT4gaW5mIG5hbgorbG9nMTAxOCBsb2cgbmFuIDAuMCAtPiBuYW4gbmFuCitsb2cxMDE5IGxvZyBuYW4gMi4zIC0+IG5hbiBuYW4KK2xvZzEwMjAgbG9nIG5hbiBpbmYgLT4gaW5mIG5hbgorbG9nMTAyMSBsb2cgbmFuIG5hbiAtPiBuYW4gbmFuCitsb2cxMDIyIGxvZyAtMC4wIC0wLjAgLT4gLWluZiAtMy4xNDE1OTI2NTM1ODk3OTMxICAgICAgIGRpdmlkZS1ieS16ZXJvCitsb2cxMDIzIGxvZyAwLjAgLTAuMCAtPiAtaW5mIC0wLjAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZS1ieS16ZXJvCitsb2cxMDI0IGxvZyAwLjAgLWluZiAtPiBpbmYgLTEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMTAyNSBsb2cgMi4zIC1pbmYgLT4gaW5mIC0xLjU3MDc5NjMyNjc5NDg5NjYKK2xvZzEwMjYgbG9nIC0wLjAgLWluZiAtPiBpbmYgLTEuNTcwNzk2MzI2Nzk0ODk2NgorbG9nMTAyNyBsb2cgLTIuMyAtaW5mIC0+IGluZiAtMS41NzA3OTYzMjY3OTQ4OTY2Citsb2cxMDI4IGxvZyAtaW5mIC0wLjAgLT4gaW5mIC0zLjE0MTU5MjY1MzU4OTc5MzEKK2xvZzEwMjkgbG9nIC1pbmYgLTIuMyAtPiBpbmYgLTMuMTQxNTkyNjUzNTg5NzkzMQorbG9nMTAzMCBsb2cgaW5mIC0wLjAgLT4gaW5mIC0wLjAKK2xvZzEwMzEgbG9nIGluZiAtMi4zIC0+IGluZiAtMC4wCitsb2cxMDMyIGxvZyAtaW5mIC1pbmYgLT4gaW5mIC0yLjM1NjE5NDQ5MDE5MjM0NDgKK2xvZzEwMzMgbG9nIGluZiAtaW5mIC0+IGluZiAtMC43ODUzOTgxNjMzOTc0NDgyOAorbG9nMTAzNCBsb2cgbmFuIC0wLjAgLT4gbmFuIG5hbgorbG9nMTAzNSBsb2cgbmFuIC0yLjMgLT4gbmFuIG5hbgorbG9nMTAzNiBsb2cgbmFuIC1pbmYgLT4gaW5mIG5hbgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbG9nMTA6IExvZ2FyaXRobSBiYXNlIDEwIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9ndDAwMDAgbG9nMTAgMS4wIDAuMCAtPiAwLjAgMC4wCitsb2d0MDAwMSBsb2cxMCAxLjAgLTAuMCAtPiAwLjAgLTAuMAorbG9ndDAwMDIgbG9nMTAgLTEuMCAwLjAgLT4gMC4wIDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMDMgbG9nMTAgLTEuMCAtMC4wIC0+IDAuMCAtMS4zNjQzNzYzNTM4NDE4NDE0CistLSB2YWx1ZXMgYWxvbmcgYm90aCBzaWRlcyBvZiByZWFsIGF4aXMKK2xvZ3QwMDEwIGxvZzEwIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAwLjAgLT4gLTMyMy4wMDUxODUzNDc0NTE4IDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMTEgbG9nMTAgLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IC0wLjAgLT4gLTMyMy4wMDUxODUzNDc0NTE4IC0xLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDEyIGxvZzEwIC0xZS0zMDUgMC4wIC0+IC0zMDUuMCAxLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDEzIGxvZzEwIC0xZS0zMDUgLTAuMCAtPiAtMzA1LjAgLTEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMTQgbG9nMTAgLTFlLTE1MCAwLjAgLT4gLTE1MC4wIDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMTUgbG9nMTAgLTFlLTE1MCAtMC4wIC0+IC0xNTAuMCAtMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAxNiBsb2cxMCAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAgLT4gLTE2LjAgMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAxNyBsb2cxMCAtOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAtMC4wIC0+IC0xNi4wIC0xLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDE4IGxvZzEwIC0wLjAwMSAwLjAgLT4gLTMuMCAxLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDE5IGxvZzEwIC0wLjAwMSAtMC4wIC0+IC0zLjAgLTEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMjAgbG9nMTAgLTAuNTc4OTk5OTk5OTk5OTk5OTYgMC4wIC0+IC0wLjIzNzMyMTQzNjI3MjU2MzgzIDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMjEgbG9nMTAgLTAuNTc4OTk5OTk5OTk5OTk5OTYgLTAuMCAtPiAtMC4yMzczMjE0MzYyNzI1NjM4MyAtMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAyMiBsb2cxMCAtMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAgLT4gLTQuODIxNjM3MzMyNzY2NDM2ZS0xNyAxLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDIzIGxvZzEwIC0wLjk5OTk5OTk5OTk5OTk5OTg5IC0wLjAgLT4gLTQuODIxNjM3MzMyNzY2NDM2ZS0xNyAtMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAyNCBsb2cxMCAtMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiA5LjY0MzI3NDY2NTUzMjg2OTZlLTE3IDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMjUgbG9nMTAgLTEuMDAwMDAwMDAwMDAwMDAwMiAtMC4wIC0+IDkuNjQzMjc0NjY1NTMyODY5NmUtMTcgLTEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMjYgbG9nMTAgLTEuMDAwOTk5OTk5OTk5OTk5OSAwLjAgLT4gMC4wMDA0MzQwNzc0NzkzMTg1OTI5IDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMjcgbG9nMTAgLTEuMDAwOTk5OTk5OTk5OTk5OSAtMC4wIC0+IDAuMDAwNDM0MDc3NDc5MzE4NTkyOSAtMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAyOCBsb2cxMCAtMi4wIDAuMCAtPiAwLjMwMTAyOTk5NTY2Mzk4MTIgMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAyOSBsb2cxMCAtMi4wIC0wLjAgLT4gMC4zMDEwMjk5OTU2NjM5ODEyIC0xLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDMwIGxvZzEwIC0yMy4wIDAuMCAtPiAxLjM2MTcyNzgzNjAxNzU5MjggMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAzMSBsb2cxMCAtMjMuMCAtMC4wIC0+IDEuMzYxNzI3ODM2MDE3NTkyOCAtMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAzMiBsb2cxMCAtMTAwMDAwMDAwMDAwMDAwMDAuMCAwLjAgLT4gMTYuMCAxLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDMzIGxvZzEwIC0xMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMTYuMCAtMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDAzNCBsb2cxMCAtOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgMC4wIC0+IDE1MC4wIDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMzUgbG9nMTAgLTkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IC0wLjAgLT4gMTUwLjAgLTEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAwMzYgbG9nMTAgLTEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IDAuMCAtPiAyOTkuMCAxLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDM3IGxvZzEwIC0xLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAtMC4wIC0+IDI5OS4wIC0xLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMDM4IGxvZzEwIDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IDAuMCAtPiAtMzIzLjAwNTE4NTM0NzQ1MTggMC4wCitsb2d0MDAzOSBsb2cxMCA5Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAtMC4wIC0+IC0zMjMuMDA1MTg1MzQ3NDUxOCAtMC4wCitsb2d0MDA0MCBsb2cxMCAxZS0zMDUgMC4wIC0+IC0zMDUuMCAwLjAKK2xvZ3QwMDQxIGxvZzEwIDFlLTMwNSAtMC4wIC0+IC0zMDUuMCAtMC4wCitsb2d0MDA0MiBsb2cxMCAxZS0xNTAgMC4wIC0+IC0xNTAuMCAwLjAKK2xvZ3QwMDQzIGxvZzEwIDFlLTE1MCAtMC4wIC0+IC0xNTAuMCAtMC4wCitsb2d0MDA0NCBsb2cxMCA5Ljk5OTk5OTk5OTk5OTk5OThlLTE3IDAuMCAtPiAtMTYuMCAwLjAKK2xvZ3QwMDQ1IGxvZzEwIDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLTAuMCAtPiAtMTYuMCAtMC4wCitsb2d0MDA0NiBsb2cxMCAwLjAwMSAwLjAgLT4gLTMuMCAwLjAKK2xvZ3QwMDQ3IGxvZzEwIDAuMDAxIC0wLjAgLT4gLTMuMCAtMC4wCitsb2d0MDA0OCBsb2cxMCAwLjU3ODk5OTk5OTk5OTk5OTk2IDAuMCAtPiAtMC4yMzczMjE0MzYyNzI1NjM4MyAwLjAKK2xvZ3QwMDQ5IGxvZzEwIDAuNTc4OTk5OTk5OTk5OTk5OTYgLTAuMCAtPiAtMC4yMzczMjE0MzYyNzI1NjM4MyAtMC4wCitsb2d0MDA1MCBsb2cxMCAwLjk5OTk5OTk5OTk5OTk5OTg5IDAuMCAtPiAtNC44MjE2MzczMzI3NjY0MzZlLTE3IDAuMAorbG9ndDAwNTEgbG9nMTAgMC45OTk5OTk5OTk5OTk5OTk4OSAtMC4wIC0+IC00LjgyMTYzNzMzMjc2NjQzNmUtMTcgLTAuMAorbG9ndDAwNTIgbG9nMTAgMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiA5LjY0MzI3NDY2NTUzMjg2OTZlLTE3IDAuMAorbG9ndDAwNTMgbG9nMTAgMS4wMDAwMDAwMDAwMDAwMDAyIC0wLjAgLT4gOS42NDMyNzQ2NjU1MzI4Njk2ZS0xNyAtMC4wCitsb2d0MDA1NCBsb2cxMCAxLjAwMDk5OTk5OTk5OTk5OTkgMC4wIC0+IDAuMDAwNDM0MDc3NDc5MzE4NTkyOSAwLjAKK2xvZ3QwMDU1IGxvZzEwIDEuMDAwOTk5OTk5OTk5OTk5OSAtMC4wIC0+IDAuMDAwNDM0MDc3NDc5MzE4NTkyOSAtMC4wCitsb2d0MDA1NiBsb2cxMCAyLjAgMC4wIC0+IDAuMzAxMDI5OTk1NjYzOTgxMiAwLjAKK2xvZ3QwMDU3IGxvZzEwIDIuMCAtMC4wIC0+IDAuMzAxMDI5OTk1NjYzOTgxMiAtMC4wCitsb2d0MDA1OCBsb2cxMCAyMy4wIDAuMCAtPiAxLjM2MTcyNzgzNjAxNzU5MjggMC4wCitsb2d0MDA1OSBsb2cxMCAyMy4wIC0wLjAgLT4gMS4zNjE3Mjc4MzYwMTc1OTI4IC0wLjAKK2xvZ3QwMDYwIGxvZzEwIDEwMDAwMDAwMDAwMDAwMDAwLjAgMC4wIC0+IDE2LjAgMC4wCitsb2d0MDA2MSBsb2cxMCAxMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMTYuMCAtMC4wCitsb2d0MDA2MiBsb2cxMCA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAwLjAgLT4gMTUwLjAgMC4wCitsb2d0MDA2MyBsb2cxMCA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtMC4wIC0+IDE1MC4wIC0wLjAKK2xvZ3QwMDY0IGxvZzEwIDEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IDAuMCAtPiAyOTkuMCAwLjAKK2xvZ3QwMDY1IGxvZzEwIDEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gMjk5LjAgLTAuMAorCistLSByYW5kb20gaW5wdXRzCitsb2d0MDA2NiBsb2cxMCAtMS45ODMwNDU0OTQ1MTg2MTkxZS0xNiAtMi4wMzM0NDQ4MDI1NjczMzQ2IC0+IDAuMzA4MjMyMzg4MDY3OTg1MDMgLTAuNjgyMTg4MTc2OTIwOTIwNzEKK2xvZ3QwMDY3IGxvZzEwIC0wLjk2NzQ1ODUzMDI0NzQxODU3IC0wLjg0OTk1ODE2MjI4Mjk5NjkyIC0+IDAuMTA5ODQ1Mjg0MjIyODQ4MDIgLTEuMDUxMzIxNDI2MTc0MDg2Citsb2d0MDA2OCBsb2cxMCAtMC4xNjAzNjQ0MzEzOTQ4NDE4IC0wLjI5Mjk5NDIxMTEwNDE4MzUgLT4gLTAuNDc2MjQxMTU2MzMzMDU0MTkgLTAuODk5Njc4ODQwMjMwNTk1OTcKK2xvZ3QwMDY5IGxvZzEwIC0wLjE1OTE3OTEzMTY4NDM4Njk5IC0wLjI1MjM4Nzk5MjUxMTMyMTc3IC0+IC0wLjUyNTIxMzA0NjQxNjY1OTU2IC0wLjkyNjU1NzkwNjQ1Njg4MTE5Citsb2d0MDA3MCBsb2cxMCAtMC42ODkwNzgxODUzNTA3ODgwMiAtMy4wNjkzMTA1ODUzNDc2MzQ2IC0+IDAuNDk3NzE4Nzg4NTA2NjQ0OCAtMC43NzgwOTk1MzExOTMyODgyMworbG9ndDAwNzEgbG9nMTAgLTE3LjI2ODEzMzQ0NzU2NTU4OSA2LjgxNjUxMjAwMTQ2MDQ3NTYgLT4gMS4yNjg2OTEyMDA4MDk4NTM0IDEuMjAxMDk1NDYyOTEwNDIwMgorbG9ndDAwNzIgbG9nMTAgLTEuNzE1Mzg5NDQ3OTY5MDMyOCAyNi40MzQwNTUzNzI4MDI2MzYgLT4gMS40MjMwNzYzMDkwMzI3NTEgMC43MTAzMzE0NTg1OTAwNTMwOQorbG9ndDAwNzMgbG9nMTAgLTguMDQ1Njc5NDY0ODkzNjU3OGUtMDYgMC4xOTcyMjc1ODA1NzU3MDIwOCAtPiAtMC43MDUwMzIzNTI0NDk4NzU2MSAwLjY4MjIwNTg5MzQ4MDU1NTE2Citsb2d0MDA3NCBsb2cxMCAtMi40MzA2NDQyNjkxMzIzMTczIDAuNjg0NjkxOTc1MDcwMDk5NiAtPiAwLjQwMjMwMjU3ODQ1MzMyNTk1IDEuMjQ1MTI5MjUzMzc0ODkyMworbG9ndDAwNzUgbG9nMTAgLTMuNTQ4ODA0OTI1MDg4ODE5NCAwLjQ1MzI0MDQwNjQzMTg1MjU0IC0+IDAuNTUzNTk1NTM5NzcxNDEwNjMgMS4zMDkyMDg1MTA4ODY2NDA1Citsb2d0MDA3NiBsb2cxMCAwLjE4NDE4NTE2ODUxNTEwMTg5IC0wLjI2MDYyNTE4ODM2MjEyNjE3IC0+IC0wLjQ5NjAyMDE5NzMyOTEzNjM4IC0wLjQxNTAwNTAzNTU2NjA0MzAxCitsb2d0MDA3NyBsb2cxMCAyLjcxMjQ4Mzc3OTU2MzgzOTkgLTEzLjE0ODc2OTA2NzEzMzM4NyAtPiAxLjEyNzkzNDg2MTMzMTcwMDggLTAuNTkzODM2MTY2NDM4MDMyMTYKK2xvZ3QwMDc4IGxvZzEwIDMuNjUyMTI3NTQ3NjE2OTE0OWUtMTMgLTMuNzgyMDU0MzAyMzE3MDY3M2UtMDUgLT4gLTQuNDIyMjcyMjM5ODk0MTExMiAtMC42ODIxODgxNzI3MjcxNzExNAorbG9ndDAwNzkgbG9nMTAgNS4wODc3NTQ1ODEzODYyMjM5IC0xLjI4MzQ5NzgzMjY3ODY4NTIgLT4gMC43MTk5MjM3MTgwNjQyNjg0NyAtMC4xMDczMjEwNDM1MjE1OTI4MworbG9ndDAwODAgbG9nMTAgMC4yNjQ3Nzk4NjgwODQ2MTUxMiAtMC42NzY1OTAwMTE5NDE4NzQyOSAtPiAtMC4xMzg3MzEzOTkzNTI4MTY4MSAtMC41MjAxODY0OTYzMTMwMDIyOQorbG9ndDAwODEgbG9nMTAgMC4wMDE0NzU0MjYxMzk4MDcxOTYyIDUuMzUxNDY5MTYwODIwNTQ0MiAtPiAwLjcyODQ3MzA0MzU0NTI4ODE5IDAuNjgyMDY4NDM5ODE3ODAzMworbG9ndDAwODIgbG9nMTAgMC4yOTY2NzMzNDQ2MjE1Nzg4NSAwLjAwMDIwMDU2MDQ1MDQyNTg0Nzk1IC0+IC0wLjUyNzcyMTM3Mjk5Mjk2ODA2IDAuMDAwMjkzNTk2NTk0NDI5MzcyNjEKK2xvZ3QwMDgzIGxvZzEwIDAuODIxMDQyMzM2NzEwOTk0MjUgMy45MDA1Mzg3MTMwMTMzMTAyIC0+IDAuNjAwNTM4ODkwMjgzNDkzNjEgMC41OTIwODY5MDAyMTE4NDAxOAorbG9ndDAwODQgbG9nMTAgMC4yNzI2ODEzNTM1ODE4MDY2NyAxMjQuNDIwODgxMTA5NDU4MDQgLT4gMi4wOTQ4OTQzMTU1MzgwNjkgMC42ODEyMzYzNzY3MzY1Njk4OQorbG9ndDAwODUgbG9nMTAgMC4wMDI2Mjg2OTU5MTY4MjY3NDg1IDAuNDc3OTU4MDgxODA1NzMwMTMgLT4gLTAuMzIwNjAzNjIyMjYxMDA4MTQgMC42Nzk3OTk2NDgxNjg3NzA4MQorCistLSB2YWx1ZXMgbmVhciBpbmZpbml0eQorbG9ndDAxMDAgbG9nMTAgMS4wNTEyMDI1NzQ0MDAzMTcyZSszMDggNy4yNjIxNjY5NzUwNjY0NjExZSszMDcgLT4gMzA4LjEwNjQxNTYyNjgyMDY1IDAuMjYyNTU0NjE0MDgyNTY5NzUKK2xvZ3QwMTAxIGxvZzEwIDUuNTM0NDI0OTAzNDM3MjEyNmUrMzA3IC0xLjIxNTU4NTkxNTg0MzEyNzVlKzMwOCAtPiAzMDguMTI1NjkxMDYwMDkyMDkgLTAuNDk2NjM4NzgyMjk2MjEyCitsb2d0MDEwMiBsb2cxMCAtMS4zMTU1NTc1NDAzNDY5NDA4ZSszMDggMS4xNjEwNzkzNTQxNjYzODY0ZSszMDggLT4gMzA4LjI0NDE5MDUyMDkxMDE5IDEuMDUwMzM1OTc3NzcwNTI2NgorbG9ndDAxMDMgbG9nMTAgLTEuNjMyMzY2NzIwOTczMjM1ZSszMDggLTEuNTQyOTk0NDYyMTE0NDhlKzMwOCAtPiAzMDguMzUxNDUwMDgzNDA5MyAtMS4wMzU1MDI0OTI0Mzc4MjIyCitsb2d0MDEwNCBsb2cxMCAwLjAgNS45NDQ5Mjc2NjkyMzI3NzEyZSszMDcgLT4gMzA3Ljc3NDE0NjU3NTAxMTE3IDAuNjgyMTg4MTc2OTIwOTIwNzEKK2xvZ3QwMTA1IGxvZzEwIC0wLjAgMS4xMjAxODUwNDU5MDI1NjkyZSszMDggLT4gMzA4LjA0OTI4OTc3MDY4NDY1IDAuNjgyMTg4MTc2OTIwOTIwNzEKK2xvZ3QwMTA2IGxvZzEwIDAuMCAtMS42MjE0MjI1OTMzNDY2NTI4ZSszMDggLT4gMzA4LjIwOTg5NjIyMDMwMTc0IC0wLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MDEwNyBsb2cxMCAtMC4wIC0xLjc0NTMyNjk3OTE1OTEwNThlKzMwOCAtPiAzMDguMjQxODc2ODAyMDM1MzkgLTAuNjgyMTg4MTc2OTIwOTIwNzEKK2xvZ3QwMTA4IGxvZzEwIDEuNDQwODYwNTc3NjAxNDI4ZSszMDggMC4wIC0+IDMwOC4xNTg2MjE5NTkwODc1NSAwLjAKK2xvZ3QwMTA5IGxvZzEwIDEuMzkxNTE1MTc2MTQ4MjgyZSszMDggLTAuMCAtPiAzMDguMTQzNDg3OTQ3MjAwMDcgLTAuMAorbG9ndDAxMTAgbG9nMTAgLTEuMjAxMzU0NDAxMjk1Mjk2ZSszMDggMC4wIC0+IDMwOC4wNzk2NzExNDM4MDc3MyAxLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QwMTExIGxvZzEwIC0xLjY3MDQzMzc4MjU5NzY4MDRlKzMwOCAtMC4wIC0+IDMwOC4yMjI4MjkyNjQ1MTYyNCAtMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MDExMiBsb2cxMCA3LjIyNzY5NzQ2NTUxOTAyMjNlKzMwNyA3Ljk0ODc5NzExMzY5MTY0IC0+IDMwNy44NTg5OTk5NjU3MTk5MyA0Ljc3NjIzNTc4MDA4NTg0NjNlLTMwOAorbG9ndDAxMTMgbG9nMTAgMS4xMjA3ODU5NTkzNzE2MDc2ZSszMDggLTYuMTk1NjIwMDg2ODIyMTE0NyAtPiAzMDguMDQ5NTIyNjgxNjk0NTUgLTIuNDAwNzQ3MDc2Nzk2MzU5N2UtMzA4Citsb2d0MDExNCBsb2cxMCAtNC42Njc4OTMzODc0NDcxMDQ1ZSszMDcgOS45NDcxMDc4OTMyMjAzODIgLT4gMzA3LjY2OTEyMDkyODM5OTAyIDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAxMTUgbG9nMTAgLTEuNTEwODAxMjQ1Mzk1MDE0MmUrMzA4IC01LjMxMTcxOTcxNzkzNzU2MTkgLT4gMzA4LjE3OTIwNzMzNDE1NjUgLTEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAxMTYgbG9nMTAgNy40OTAzNzUwODcxNTA0NDM1IDEuNTMyMDcwMzc3NjYyNjM1MmUrMzA4IC0+IDMwOC4xODUyNzg3MTU2NDE1NyAwLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MDExNyBsb2cxMCA1Ljk3NjAzMjU1MjU2NTQ3NzggLTguMDE0OTQ3Mzk5NzM0OTEyM2UrMzA3IC0+IDMwNy45MDM5MDA2NzY1MjQyNCAtMC42ODIxODgxNzY5MjA5MjA3MQorbG9ndDAxMTggbG9nMTAgLTcuODgwMTk0MjA2Mzg2NjI5IDEuNzg2MTg0NTgxNDc2NzQ0MWUrMzA4IC0+IDMwOC4yNTE5MjYzMzYxNzMzMSAwLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MDExOSBsb2cxMCAtOS44ODY0Mzg5OTM4NTI4NjUgLTYuMTkyMzU3ODEwODA3NDdlKzMwNyAtPiAzMDcuNzkxODU2MDQzMDgzMzggLTAuNjgyMTg4MTc2OTIwOTIwNzEKKworLS0gdmFsdWVzIG5lYXIgMAorbG9ndDAxMjAgbG9nMTAgMi4yOTk2ODY3NTc5MjI3Nzc5ZS0zMDggNi43ODYxODQwNzcwOTM5MTI1ZS0zMTIgLT4gLTMwNy42MzgzMzEyOTY2MjU3MiAwLjAwMDEyODE1NjY4MDU2MzYyMzA1Citsb2d0MDEyMSBsb2cxMCA2LjkxNjkxOTA0MTc3NzQ1MTZlLTMyMyAtOS4wNDE0MDEzMTg4OTQ4MTE4ZS0zMjIgLT4gLTMyMS4wNDI0OTcwNjcyNzE0OCAtMC42NDkwMjgwNTM1MzMwNjA1OQorbG9ndDAxMjIgbG9nMTAgLTEuNTM3ODA2NDk2MjkxNDAxMWUtMzE2IDEuODI0MzYyODM4OTM1NDYzNWUtMzEwIC0+IC0zMDkuNzM4ODg4NzgyNjMyMjIgMC42ODIxODg1NDI5OTk4OTQyOQorbG9ndDAxMjMgbG9nMTAgLTIuMzMxOTg5ODQ4MzcwNjgzN2UtMzIxIC0yLjIzNTg3NjM5NDE4NjYzNzFlLTMxMyAtPiAtMzEyLjY1MDU1MjIwOTE5NjQxIC0wLjY4MjE4ODE4MTQ1MDU1NTM4Citsb2d0MDEyNCBsb2cxMCAwLjAgMy44NzI3NzAxMDEwODExMjFlLTMxNSAtPiAtMzE0LjQxMTk3ODI4MzIzNDc2IDAuNjgyMTg4MTc2OTIwOTIwNzEKK2xvZ3QwMTI1IGxvZzEwIC0wLjAgOS42MzQyODAwOTM5MDQzMDc2ZS0zMjIgLT4gLTMyMS4wMTYxODA3MzE3NTMzMSAwLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MDEyNiBsb2cxMCAwLjAgLTIuMjY2MDk5MzkzNDI3ODM0ZS0zMDggLT4gLTMwNy42NDQ3MjEwNDU0NTY0OSAtMC42ODIxODgxNzY5MjA5MjA3MQorbG9ndDAxMjcgbG9nMTAgLTAuMCAtMi4xMTg0Njk1NjczNzY2NjI2ZS0zMTUgLT4gLTMxNC42NzM5Nzc3NzA0MjQwNyAtMC42ODIxODgxNzY5MjA5MjA3MQorbG9ndDAxMjggbG9nMTAgMS4xMzYzNTA5ODU0MzQ4NjcxZS0zMjIgMC4wIC0+IC0zMjEuOTQ0NDg3NTA3MDk4MTkgMC4wCitsb2d0MDEyOSBsb2cxMCAzLjU1NzI3MjY1MDA1Njk3NTFlLTMyMiAtMC4wIC0+IC0zMjEuNDQ4ODgyODQ2Njg0NTEgLTAuMAorbG9ndDAxMzAgbG9nMTAgLTIuMzY5NjA3MTA3NDA0MDU5M2UtMzEwIDAuMCAtPiAtMzA5LjYyNTMyMzY1NjE5NzIyIDEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDAxMzEgbG9nMTAgLTIuODEzMjgzODk3MjY2OTM0ZS0zMTcgLTAuMCAtPiAtMzE2LjU1MDc4NjQzOTYxMDQyIC0xLjM2NDM3NjM1Mzg0MTg0MTQKKworLS0gdmFsdWVzIG5lYXIgdGhlIHVuaXQgY2lyY2xlCitsb2d0MDIwMCBsb2cxMCAtMC41OTk5OTk5OTk5OTk5OTk5OCAwLjgwMDAwMDAwMDAwMDAwMDA0IC0+IDkuNjQzMjc0NjY1NTMyODcwOWUtMTggMC45NjE2NTcxNTc1Njg0NjgxNQorbG9ndDAyMDEgbG9nMTAgMC43OTk5OTk5OTk5OTk5OTk5MyAwLjYwMDAwMDAwMDAwMDAwMDA5IC0+IDIuNjc2NTQ2MzkxNjE0NzYyMmUtMzMgMC4yNzk0Njg5ODA2NDc1NDc2CisKKy0tIHNwZWNpYWwgdmFsdWVzCitsb2d0MTAwMCBsb2cxMCAtMC4wIDAuMCAtPiAtaW5mIDEuMzY0Mzc2MzUzODQxODQxNCAgICAgICAgIGRpdmlkZS1ieS16ZXJvCitsb2d0MTAwMSBsb2cxMCAwLjAgMC4wIC0+IC1pbmYgMC4wICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZS1ieS16ZXJvCitsb2d0MTAwMiBsb2cxMCAwLjAgaW5mIC0+IGluZiAwLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MTAwMyBsb2cxMCAyLjMgaW5mIC0+IGluZiAwLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MTAwNCBsb2cxMCAtMC4wIGluZiAtPiBpbmYgMC42ODIxODgxNzY5MjA5MjA3MQorbG9ndDEwMDUgbG9nMTAgLTIuMyBpbmYgLT4gaW5mIDAuNjgyMTg4MTc2OTIwOTIwNzEKK2xvZ3QxMDA2IGxvZzEwIDAuMCBuYW4gLT4gbmFuIG5hbgorbG9ndDEwMDcgbG9nMTAgMi4zIG5hbiAtPiBuYW4gbmFuCitsb2d0MTAwOCBsb2cxMCAtMC4wIG5hbiAtPiBuYW4gbmFuCitsb2d0MTAwOSBsb2cxMCAtMi4zIG5hbiAtPiBuYW4gbmFuCitsb2d0MTAxMCBsb2cxMCAtaW5mIDAuMCAtPiBpbmYgMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MTAxMSBsb2cxMCAtaW5mIDIuMyAtPiBpbmYgMS4zNjQzNzYzNTM4NDE4NDE0Citsb2d0MTAxMiBsb2cxMCBpbmYgMC4wIC0+IGluZiAwLjAKK2xvZ3QxMDEzIGxvZzEwIGluZiAyLjMgLT4gaW5mIDAuMAorbG9ndDEwMTQgbG9nMTAgLWluZiBpbmYgLT4gaW5mIDEuMDIzMjgyMjY1MzgxMzgxMQorbG9ndDEwMTUgbG9nMTAgaW5mIGluZiAtPiBpbmYgMC4zNDEwOTQwODg0NjA0NjAzNQorbG9ndDEwMTYgbG9nMTAgaW5mIG5hbiAtPiBpbmYgbmFuCitsb2d0MTAxNyBsb2cxMCAtaW5mIG5hbiAtPiBpbmYgbmFuCitsb2d0MTAxOCBsb2cxMCBuYW4gMC4wIC0+IG5hbiBuYW4KK2xvZ3QxMDE5IGxvZzEwIG5hbiAyLjMgLT4gbmFuIG5hbgorbG9ndDEwMjAgbG9nMTAgbmFuIGluZiAtPiBpbmYgbmFuCitsb2d0MTAyMSBsb2cxMCBuYW4gbmFuIC0+IG5hbiBuYW4KK2xvZ3QxMDIyIGxvZzEwIC0wLjAgLTAuMCAtPiAtaW5mIC0xLjM2NDM3NjM1Mzg0MTg0MTQgICAgICAgZGl2aWRlLWJ5LXplcm8KK2xvZ3QxMDIzIGxvZzEwIDAuMCAtMC4wIC0+IC1pbmYgLTAuMCAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlLWJ5LXplcm8KK2xvZ3QxMDI0IGxvZzEwIDAuMCAtaW5mIC0+IGluZiAtMC42ODIxODgxNzY5MjA5MjA3MQorbG9ndDEwMjUgbG9nMTAgMi4zIC1pbmYgLT4gaW5mIC0wLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MTAyNiBsb2cxMCAtMC4wIC1pbmYgLT4gaW5mIC0wLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MTAyNyBsb2cxMCAtMi4zIC1pbmYgLT4gaW5mIC0wLjY4MjE4ODE3NjkyMDkyMDcxCitsb2d0MTAyOCBsb2cxMCAtaW5mIC0wLjAgLT4gaW5mIC0xLjM2NDM3NjM1Mzg0MTg0MTQKK2xvZ3QxMDI5IGxvZzEwIC1pbmYgLTIuMyAtPiBpbmYgLTEuMzY0Mzc2MzUzODQxODQxNAorbG9ndDEwMzAgbG9nMTAgaW5mIC0wLjAgLT4gaW5mIC0wLjAKK2xvZ3QxMDMxIGxvZzEwIGluZiAtMi4zIC0+IGluZiAtMC4wCitsb2d0MTAzMiBsb2cxMCAtaW5mIC1pbmYgLT4gaW5mIC0xLjAyMzI4MjI2NTM4MTM4MTEKK2xvZ3QxMDMzIGxvZzEwIGluZiAtaW5mIC0+IGluZiAtMC4zNDEwOTQwODg0NjA0NjAzNQorbG9ndDEwMzQgbG9nMTAgbmFuIC0wLjAgLT4gbmFuIG5hbgorbG9ndDEwMzUgbG9nMTAgbmFuIC0yLjMgLT4gbmFuIG5hbgorbG9ndDEwMzYgbG9nMTAgbmFuIC1pbmYgLT4gaW5mIG5hbgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBzcXJ0OiBTcXVhcmUgcm9vdCAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gemVyb3MKK3NxcnQwMDAwIHNxcnQgMC4wIDAuMCAtPiAwLjAgMC4wCitzcXJ0MDAwMSBzcXJ0IDAuMCAtMC4wIC0+IDAuMCAtMC4wCitzcXJ0MDAwMiBzcXJ0IC0wLjAgMC4wIC0+IDAuMCAwLjAKK3NxcnQwMDAzIHNxcnQgLTAuMCAtMC4wIC0+IDAuMCAtMC4wCisKKy0tIHZhbHVlcyBhbG9uZyBib3RoIHNpZGVzIG9mIHJlYWwgYXhpcworc3FydDAwMTAgc3FydCAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgMC4wIC0+IDAuMCAzLjE0MzQ1NTU2OTQwNTI1NzZlLTE2Mgorc3FydDAwMTEgc3FydCAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiAwLjAgLTMuMTQzNDU1NTY5NDA1MjU3NmUtMTYyCitzcXJ0MDAxMiBzcXJ0IC0xZS0zMDUgMC4wIC0+IDAuMCAzLjE2MjI3NzY2MDE2ODM3OTFlLTE1Mworc3FydDAwMTMgc3FydCAtMWUtMzA1IC0wLjAgLT4gMC4wIC0zLjE2MjI3NzY2MDE2ODM3OTFlLTE1Mworc3FydDAwMTQgc3FydCAtMWUtMTUwIDAuMCAtPiAwLjAgOS45OTk5OTk5OTk5OTk5OTk2ZS03Ngorc3FydDAwMTUgc3FydCAtMWUtMTUwIC0wLjAgLT4gMC4wIC05Ljk5OTk5OTk5OTk5OTk5OTZlLTc2CitzcXJ0MDAxNiBzcXJ0IC05Ljk5OTk5OTk5OTk5OTk5OThlLTE3IDAuMCAtPiAwLjAgMWUtMDgKK3NxcnQwMDE3IHNxcnQgLTkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLTAuMCAtPiAwLjAgLTFlLTA4CitzcXJ0MDAxOCBzcXJ0IC0wLjAwMSAwLjAgLT4gMC4wIDAuMDMxNjIyNzc2NjAxNjgzNzkxCitzcXJ0MDAxOSBzcXJ0IC0wLjAwMSAtMC4wIC0+IDAuMCAtMC4wMzE2MjI3NzY2MDE2ODM3OTEKK3NxcnQwMDIwIHNxcnQgLTAuNTc4OTk5OTk5OTk5OTk5OTYgMC4wIC0+IDAuMCAwLjc2MDkyMDQ5NTE4OTg3MTkzCitzcXJ0MDAyMSBzcXJ0IC0wLjU3ODk5OTk5OTk5OTk5OTk2IC0wLjAgLT4gMC4wIC0wLjc2MDkyMDQ5NTE4OTg3MTkzCitzcXJ0MDAyMiBzcXJ0IC0wLjk5OTk5OTk5OTk5OTk5OTg5IDAuMCAtPiAwLjAgMC45OTk5OTk5OTk5OTk5OTk4OQorc3FydDAwMjMgc3FydCAtMC45OTk5OTk5OTk5OTk5OTk4OSAtMC4wIC0+IDAuMCAtMC45OTk5OTk5OTk5OTk5OTk4OQorc3FydDAwMjQgc3FydCAtMS4wMDAwMDAwMDAwMDAwMDAyIDAuMCAtPiAwLjAgMS4wCitzcXJ0MDAyNSBzcXJ0IC0xLjAwMDAwMDAwMDAwMDAwMDIgLTAuMCAtPiAwLjAgLTEuMAorc3FydDAwMjYgc3FydCAtMS4wMDA5OTk5OTk5OTk5OTk5IDAuMCAtPiAwLjAgMS4wMDA0OTk4NzUwNjI0NjEKK3NxcnQwMDI3IHNxcnQgLTEuMDAwOTk5OTk5OTk5OTk5OSAtMC4wIC0+IDAuMCAtMS4wMDA0OTk4NzUwNjI0NjEKK3NxcnQwMDI4IHNxcnQgLTIuMCAwLjAgLT4gMC4wIDEuNDE0MjEzNTYyMzczMDk1MQorc3FydDAwMjkgc3FydCAtMi4wIC0wLjAgLT4gMC4wIC0xLjQxNDIxMzU2MjM3MzA5NTEKK3NxcnQwMDMwIHNxcnQgLTIzLjAgMC4wIC0+IDAuMCA0Ljc5NTgzMTUyMzMxMjcxOTEKK3NxcnQwMDMxIHNxcnQgLTIzLjAgLTAuMCAtPiAwLjAgLTQuNzk1ODMxNTIzMzEyNzE5MQorc3FydDAwMzIgc3FydCAtMTAwMDAwMDAwMDAwMDAwMDAuMCAwLjAgLT4gMC4wIDEwMDAwMDAwMC4wCitzcXJ0MDAzMyBzcXJ0IC0xMDAwMDAwMDAwMDAwMDAwMC4wIC0wLjAgLT4gMC4wIC0xMDAwMDAwMDAuMAorc3FydDAwMzQgc3FydCAtOS45OTk5OTk5OTk5OTk5OTk4ZSsxNDkgMC4wIC0+IDAuMCA5Ljk5OTk5OTk5OTk5OTk5OTNlKzc0CitzcXJ0MDAzNSBzcXJ0IC05Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtMC4wIC0+IDAuMCAtOS45OTk5OTk5OTk5OTk5OTkzZSs3NAorc3FydDAwMzYgc3FydCAtMS4wMDAwMDAwMDAwMDAwMDAxZSsyOTkgMC4wIC0+IDAuMCAzLjE2MjI3NzY2MDE2ODM3OTZlKzE0OQorc3FydDAwMzcgc3FydCAtMS4wMDAwMDAwMDAwMDAwMDAxZSsyOTkgLTAuMCAtPiAwLjAgLTMuMTYyMjc3NjYwMTY4Mzc5NmUrMTQ5CitzcXJ0MDAzOCBzcXJ0IDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IDAuMCAtPiAzLjE0MzQ1NTU2OTQwNTI1NzZlLTE2MiAwLjAKK3NxcnQwMDM5IHNxcnQgOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgLTAuMCAtPiAzLjE0MzQ1NTU2OTQwNTI1NzZlLTE2MiAtMC4wCitzcXJ0MDA0MCBzcXJ0IDFlLTMwNSAwLjAgLT4gMy4xNjIyNzc2NjAxNjgzNzkxZS0xNTMgMC4wCitzcXJ0MDA0MSBzcXJ0IDFlLTMwNSAtMC4wIC0+IDMuMTYyMjc3NjYwMTY4Mzc5MWUtMTUzIC0wLjAKK3NxcnQwMDQyIHNxcnQgMWUtMTUwIDAuMCAtPiA5Ljk5OTk5OTk5OTk5OTk5OTZlLTc2IDAuMAorc3FydDAwNDMgc3FydCAxZS0xNTAgLTAuMCAtPiA5Ljk5OTk5OTk5OTk5OTk5OTZlLTc2IC0wLjAKK3NxcnQwMDQ0IHNxcnQgOS45OTk5OTk5OTk5OTk5OTk4ZS0xNyAwLjAgLT4gMWUtMDggMC4wCitzcXJ0MDA0NSBzcXJ0IDkuOTk5OTk5OTk5OTk5OTk5OGUtMTcgLTAuMCAtPiAxZS0wOCAtMC4wCitzcXJ0MDA0NiBzcXJ0IDAuMDAxIDAuMCAtPiAwLjAzMTYyMjc3NjYwMTY4Mzc5MSAwLjAKK3NxcnQwMDQ3IHNxcnQgMC4wMDEgLTAuMCAtPiAwLjAzMTYyMjc3NjYwMTY4Mzc5MSAtMC4wCitzcXJ0MDA0OCBzcXJ0IDAuNTc4OTk5OTk5OTk5OTk5OTYgMC4wIC0+IDAuNzYwOTIwNDk1MTg5ODcxOTMgMC4wCitzcXJ0MDA0OSBzcXJ0IDAuNTc4OTk5OTk5OTk5OTk5OTYgLTAuMCAtPiAwLjc2MDkyMDQ5NTE4OTg3MTkzIC0wLjAKK3NxcnQwMDUwIHNxcnQgMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAgLT4gMC45OTk5OTk5OTk5OTk5OTk4OSAwLjAKK3NxcnQwMDUxIHNxcnQgMC45OTk5OTk5OTk5OTk5OTk4OSAtMC4wIC0+IDAuOTk5OTk5OTk5OTk5OTk5ODkgLTAuMAorc3FydDAwNTIgc3FydCAxLjAwMDAwMDAwMDAwMDAwMDIgMC4wIC0+IDEuMCAwLjAKK3NxcnQwMDUzIHNxcnQgMS4wMDAwMDAwMDAwMDAwMDAyIC0wLjAgLT4gMS4wIC0wLjAKK3NxcnQwMDU0IHNxcnQgMS4wMDA5OTk5OTk5OTk5OTk5IDAuMCAtPiAxLjAwMDQ5OTg3NTA2MjQ2MSAwLjAKK3NxcnQwMDU1IHNxcnQgMS4wMDA5OTk5OTk5OTk5OTk5IC0wLjAgLT4gMS4wMDA0OTk4NzUwNjI0NjEgLTAuMAorc3FydDAwNTYgc3FydCAyLjAgMC4wIC0+IDEuNDE0MjEzNTYyMzczMDk1MSAwLjAKK3NxcnQwMDU3IHNxcnQgMi4wIC0wLjAgLT4gMS40MTQyMTM1NjIzNzMwOTUxIC0wLjAKK3NxcnQwMDU4IHNxcnQgMjMuMCAwLjAgLT4gNC43OTU4MzE1MjMzMTI3MTkxIDAuMAorc3FydDAwNTkgc3FydCAyMy4wIC0wLjAgLT4gNC43OTU4MzE1MjMzMTI3MTkxIC0wLjAKK3NxcnQwMDYwIHNxcnQgMTAwMDAwMDAwMDAwMDAwMDAuMCAwLjAgLT4gMTAwMDAwMDAwLjAgMC4wCitzcXJ0MDA2MSBzcXJ0IDEwMDAwMDAwMDAwMDAwMDAwLjAgLTAuMCAtPiAxMDAwMDAwMDAuMCAtMC4wCitzcXJ0MDA2MiBzcXJ0IDkuOTk5OTk5OTk5OTk5OTk5OGUrMTQ5IDAuMCAtPiA5Ljk5OTk5OTk5OTk5OTk5OTNlKzc0IDAuMAorc3FydDAwNjMgc3FydCA5Ljk5OTk5OTk5OTk5OTk5OThlKzE0OSAtMC4wIC0+IDkuOTk5OTk5OTk5OTk5OTk5M2UrNzQgLTAuMAorc3FydDAwNjQgc3FydCAxLjAwMDAwMDAwMDAwMDAwMDFlKzI5OSAwLjAgLT4gMy4xNjIyNzc2NjAxNjgzNzk2ZSsxNDkgMC4wCitzcXJ0MDA2NSBzcXJ0IDEuMDAwMDAwMDAwMDAwMDAwMWUrMjk5IC0wLjAgLT4gMy4xNjIyNzc2NjAxNjgzNzk2ZSsxNDkgLTAuMAorCistLSByYW5kb20gaW5wdXRzCitzcXJ0MDEwMCBzcXJ0IC0wLjM0MjUyNTQyNTQxNTQ5OTEzIC0yMjMwMzk4ODAuMTUwNzYyMTEgLT4gMTA1NjAuMzAwMTgwNTg3NTkyIC0xMDU2MC4zMDAxOTY4MDUxOTIKK3NxcnQwMTAxIHNxcnQgLTAuODg3OTA3OTEzOTMwMTg5MDkgLTUuMzMwNzc1MTczMDgyNzQwMiAtPiAxLjUwMjcxNTQ2MTM2ODkwMDQgLTEuNzczNzE0MDg5NjM0MzI5MQorc3FydDAxMDIgc3FydCAtMTEzOTE2Ljg5MjkxMzEwNzY3IC0wLjAxODE0MzM3NDYyNjE1Mzg1OCAtPiAyLjY4Nzc4MTc4NzUzNTExNzhlLTA1IC0zMzcuNTE1NzY2OTEwMzg5NTIKK3NxcnQwMTAzIHNxcnQgLTAuNjMxODcxNzIzODYxOTcxMjEgLTAuMjYyOTM5MTMzNjY2MTc2OTQgLT4gMC4xNjIwNTcwNzQ5NTI2NjE1MyAtMC44MTEyNTQ3MTkxODc2MTk3MQorc3FydDAxMDQgc3FydCAtMC4wNTgxODUxNjkzMDg5MDYyMTUgLTIuMzU0ODMxMjk5MDQzMDk5MSAtPiAxLjA3MTc2NjAzNDI0MjAwNzIgLTEuMDk4NTc1MjU5ODA4Njk2Ngorc3FydDAxMDUgc3FydCAtMS4wNTgwNTg0NzY1OTM1ODk2IDAuMTQ0MDAzMTkyNTkxNTE3MzYgLT4gMC4wNjk4Mzc0ODkyNzAxMTEyNDIgMS4wMzA5ODc3NTUyNjI0NjgKK3NxcnQwMTA2IHNxcnQgLTEuMTY2NzU5NTk0NzUwNDkzMiAwLjExMTU5NzExNDczOTUzNjc4IC0+IDAuMDUxNTk4NTMxMzE5MzE1MjUxIDEuMDgxMzk4MTcwNTExMTIyOQorc3FydDAxMDcgc3FydCAtMC41MTIzNzI4NDExNDQ5OTA2IDAuMDI2MTc1NDMzNjQ4MzM5MDg1IC0+IDAuMDE4Mjc4MDI2MjYyNDE4NzE4IDAuNzE2MDM1NTYyOTM1OTc2MTQKK3NxcnQwMTA4IHNxcnQgLTMuNzQ1MzQwMDA2MDA2NzIyOCAxLjA5NDY1MDAzMTQ4MDk2MzUgLT4gMC4yNzk5MDA4ODU0MTY5MjQ5OCAxLjk1NTQyNDM4MTQ3NDIzNjcKK3NxcnQwMTA5IHNxcnQgLTAuMDAyNzczNjEyMTU3NTA5NzY3MyAxLjAzNjc5NDMwMDA4Mzk4MTcgLT4gMC43MTkwMzU2MDMzODcxOTE3NSAwLjcyMDk2MTcyNjUxMjUwNTQ1CitzcXJ0MDExMCBzcXJ0IDE1MDEuMjU1OTY5OTQ1MzE4OCAtMS4xOTk3MzI1MjA3MjgzNTg5IC0+IDM4Ljc0NjA0NzY2NDczMDk1OSAtMC4wMTU0ODE5OTg3MjAzNTUwMjQKK3NxcnQwMTExIHNxcnQgMS40ODMwMDc1MzI2ODUwNTc4IC0wLjY0MTAwODc4NDM2NzU1MzQ5IC0+IDEuMjQ0NzEyODE1NzQxMDk2IC0wLjI1NzQ5MjY0MjU4NDM0NTg0CitzcXJ0MDExMiBzcXJ0IDAuMDk1Mzk1NjE4NDk5NzM0NjAyIC0wLjQ4MjI2NTY1NzAxNjM5NTk1IC0+IDAuNTQxNzU5MDQwNTM0NzI4NzkgLTAuNDQ1MDkyMzk0MzQyMzE1NTEKK3NxcnQwMTEzIHNxcnQgMC41MDEwOTE4NTY4MTg2MzI3NyAtMC41NDA1NDAzNzM3OTg5MjU2MSAtPiAwLjc4NjgxNzk4NTgzMzIzODcgLTAuMzQzNDk3NzIzNDQ1MjA5NzkKK3NxcnQwMTE0IHNxcnQgMC45ODc3OTgwNzU5NTM2Nzg5NyAtMC4wMDAxOTg0ODc1ODQzNzIyNTE5MSAtPiAwLjk5Mzg4MDMxNzcwNjY1MTUzIC05Ljk4NTQ4NzIyNzk5MjE5NjhlLTA1CitzcXJ0MDExNSBzcXJ0IDExLjg0NTQ3MjM4MDc5MjI1OSAwLjAwMTAwNTExMDQ1ODE1MDY3NjEgLT4gMy40NDE3MjUyMDcyMzQ1Mzk3IDAuMDAwMTQ2MDE4NDA2MTIzNDY0NTEKK3NxcnQwMTE2IHNxcnQgMi4zNTU4MjQ5Njg2NzM1OTc1IDAuMjU2MDUxNTczNzE3NDQ0MDMgLT4gMS41MzcxMjc4NDc3Mzg2NjQ3IDAuMDgzMjg4OTY0NTc1NzYxNDA0CitzcXJ0MDExNyBzcXJ0IDAuNzc1ODQ4OTQxMjMxNTkwOTggMS4wNDk2NDIwNjI3MDE2MDc2IC0+IDEuMDIwMDc0NDM4NjM5MDg4NSAwLjUxNDQ5Mjg3NTY4NzU2NTUyCitzcXJ0MDExOCBzcXJ0IDEuODk2MTcxNTY2OTYwNDg5MyAwLjM0OTQwNzkzNDY3MTU4ODU0IC0+IDEuMzgyNzk5MTc4MTQxMTYxNSAwLjEyNjM0MDgwOTM1MDY2OTAyCitzcXJ0MDExOSBzcXJ0IDAuOTYwMjUzNzgzMTY1NjU4MDEgMC42OTU3MzIyNDg2MDE0MDUxNSAtPiAxLjAzNTg3MTAzNDIyMDk5OTggMC4zMzU4MTk5MTY1ODA5MzQ1NworCistLSB2YWx1ZXMgbmVhciAwCitzcXJ0MDEyMCBzcXJ0IDcuMzU3NzkzODM2NTA4Njg2NmUtMzEzIDguMTE4MTQwODQ2NTExMjc0M2UtMzE5IC0+IDguNTc3NzU4MzUzMTU0MzUxNmUtMTU3IDQuNzMyMDg3NjM0MjUxMTY4ZS0xNjMKK3NxcnQwMTIxIHNxcnQgMS4yNDA2ODgzODc0ODkyMTA4ZS0zMTAgLTUuMTIxMDEzMzMyNDI2OTc3NmUtMzEyIC0+IDEuMTE0MDk5MDA1NzQ2ODA1MmUtMTU1IC0yLjI5ODI3NTY5NDUzNDk5NzNlLTE1Nworc3FydDAxMjIgc3FydCAtNy4xMTQ1NDUzMDAxMTM5NTAyZS0zMjIgMi45NTYxMzc5MjQ0NzAzNzM1ZS0zMTQgLT4gMS4yMTU3NTg1ODA3NDgwMjg2ZS0xNTcgMS4yMTU3NTg2MTAwMDc3MjQyZS0xNTcKK3NxcnQwMTIzIHNxcnQgLTQuOTk2MzI0NDIwNjgwMTIxOGUtMzE0IC04LjQ3MTg0MjQ0MjM2OTAyMjdlLTMxOSAtPiAxLjg5NTA1ODIzMTI1NDA0MzdlLTE2MiAtMi4yMzUyNDU5NDE5NTc4OTcxZS0xNTcKK3NxcnQwMTI0IHNxcnQgMC4wIDcuNjk5NTUzNjA5Mzg1MTk1ZS0zMTggLT4gMS45NjIwODQ4MTA3Nzk3NDc2ZS0xNTkgMS45NjIwODQ4MTA3Nzk3NDc2ZS0xNTkKK3NxcnQwMTI1IHNxcnQgLTAuMCAzLjM5MDA4MjY2MDY0OTk0MTVlLTMwOSAtPiA0LjExNzA4Nzk2Mzk5MjIzMjdlLTE1NSA0LjExNzA4Nzk2Mzk5MjIzMjdlLTE1NQorc3FydDAxMjYgc3FydCAwLjAgLTkuODkwNzk4OTc3MjI1MDgyOGUtMzE5IC0+IDcuMDMyMzUzNDM4NjUyMzQyZS0xNjAgLTcuMDMyMzUzNDM4NjUyMzQyZS0xNjAKK3NxcnQwMTI3IHNxcnQgLTAuMCAtMS4zNzIyOTM5MzY3NTkwOTA4ZS0zMTUgLT4gMi42MTk0NDA3MTk2NTY2NzAyZS0xNTggLTIuNjE5NDQwNzE5NjU2NjcwMmUtMTU4CitzcXJ0MDEyOCBzcXJ0IDcuOTA1MDUwMzMzNDU5OTQ0N2UtMzIzIDAuMCAtPiA4Ljg5MTAzNDk5Nzk0MDMwOTllLTE2MiAwLjAKK3NxcnQwMTI5IHNxcnQgMS44NjIzMjQxNzY4MzQ5NDg2ZS0zMDkgLTAuMCAtPiA0LjMxNTQ2NTQxNzM1MDY1NzllLTE1NSAtMC4wCitzcXJ0MDEzMCBzcXJ0IC0yLjY2NTk3MTEzNDQ5OTg4N2UtMzA4IDAuMCAtPiAwLjAgMS42MzI3ODAxODU2MDM2NDkxZS0xNTQKK3NxcnQwMTMxIHNxcnQgLTEuNTQ3NzA2NjY5NDQ2NzI0NWUtMzEwIC0wLjAgLT4gMC4wIC0xLjI0NDA2ODU5NTE1MzMwNzdlLTE1NQorCistLSBpbnB1dHMgd2hvc2UgYWJzb2x1dGUgdmFsdWUgb3ZlcmZsb3dzCitzcXJ0MDE0MCBzcXJ0IDEuNjk5OTk5OTk5OTk5OTk5OWUrMzA4IC0xLjY5OTk5OTk5OTk5OTk5OTllKzMwOCAtPiAxLjQzMjUwODgyMzAxNTQ1NzNlKzE1NCAtNS45MzM2NDU4MjcxMjEyMjA3ZSsxNTMKK3NxcnQwMTQxIHNxcnQgLTEuNzk3ZSszMDggLTkuOTk5OTk5OTk5OTk5OTk5OWUrMzA2IC0+IDMuNzI4NDQ3NjQzMjA1NzMwN2UrMTUyIC0xLjM0MTA0MDY4OTk4MDI5MDFlKzE1NAorCistLSBzcGVjaWFsIHZhbHVlcworc3FydDEwMDAgc3FydCAwLjAgMC4wIC0+IDAuMCAwLjAKK3NxcnQxMDAxIHNxcnQgLTAuMCAwLjAgLT4gMC4wIDAuMAorc3FydDEwMDIgc3FydCAwLjAgaW5mIC0+IGluZiBpbmYKK3NxcnQxMDAzIHNxcnQgMi4zIGluZiAtPiBpbmYgaW5mCitzcXJ0MTAwNCBzcXJ0IGluZiBpbmYgLT4gaW5mIGluZgorc3FydDEwMDUgc3FydCAtMC4wIGluZiAtPiBpbmYgaW5mCitzcXJ0MTAwNiBzcXJ0IC0yLjMgaW5mIC0+IGluZiBpbmYKK3NxcnQxMDA3IHNxcnQgLWluZiBpbmYgLT4gaW5mIGluZgorc3FydDEwMDggc3FydCBuYW4gaW5mIC0+IGluZiBpbmYKK3NxcnQxMDA5IHNxcnQgMC4wIG5hbiAtPiBuYW4gbmFuCitzcXJ0MTAxMCBzcXJ0IDIuMyBuYW4gLT4gbmFuIG5hbgorc3FydDEwMTEgc3FydCAtMC4wIG5hbiAtPiBuYW4gbmFuCitzcXJ0MTAxMiBzcXJ0IC0yLjMgbmFuIC0+IG5hbiBuYW4KK3NxcnQxMDEzIHNxcnQgLWluZiAwLjAgLT4gMC4wIGluZgorc3FydDEwMTQgc3FydCAtaW5mIDIuMyAtPiAwLjAgaW5mCitzcXJ0MTAxNSBzcXJ0IGluZiAwLjAgLT4gaW5mIDAuMAorc3FydDEwMTYgc3FydCBpbmYgMi4zIC0+IGluZiAwLjAKK3NxcnQxMDE3IHNxcnQgLWluZiBuYW4gLT4gbmFuIGluZiAgICAgICBpZ25vcmUtaW1hZy1zaWduCitzcXJ0MTAxOCBzcXJ0IGluZiBuYW4gLT4gaW5mIG5hbgorc3FydDEwMTkgc3FydCBuYW4gMC4wIC0+IG5hbiBuYW4KK3NxcnQxMDIwIHNxcnQgbmFuIDIuMyAtPiBuYW4gbmFuCitzcXJ0MTAyMSBzcXJ0IG5hbiBuYW4gLT4gbmFuIG5hbgorc3FydDEwMjIgc3FydCAwLjAgLTAuMCAtPiAwLjAgLTAuMAorc3FydDEwMjMgc3FydCAtMC4wIC0wLjAgLT4gMC4wIC0wLjAKK3NxcnQxMDI0IHNxcnQgMC4wIC1pbmYgLT4gaW5mIC1pbmYKK3NxcnQxMDI1IHNxcnQgMi4zIC1pbmYgLT4gaW5mIC1pbmYKK3NxcnQxMDI2IHNxcnQgaW5mIC1pbmYgLT4gaW5mIC1pbmYKK3NxcnQxMDI3IHNxcnQgLTAuMCAtaW5mIC0+IGluZiAtaW5mCitzcXJ0MTAyOCBzcXJ0IC0yLjMgLWluZiAtPiBpbmYgLWluZgorc3FydDEwMjkgc3FydCAtaW5mIC1pbmYgLT4gaW5mIC1pbmYKK3NxcnQxMDMwIHNxcnQgbmFuIC1pbmYgLT4gaW5mIC1pbmYKK3NxcnQxMDMxIHNxcnQgLWluZiAtMC4wIC0+IDAuMCAtaW5mCitzcXJ0MTAzMiBzcXJ0IC1pbmYgLTIuMyAtPiAwLjAgLWluZgorc3FydDEwMzMgc3FydCBpbmYgLTAuMCAtPiBpbmYgLTAuMAorc3FydDEwMzQgc3FydCBpbmYgLTIuMyAtPiBpbmYgLTAuMAorc3FydDEwMzUgc3FydCBuYW4gLTAuMCAtPiBuYW4gbmFuCitzcXJ0MTAzNiBzcXJ0IG5hbiAtMi4zIC0+IG5hbiBuYW4KKworCistLSBGb3IgZXhwLCBjb3NoLCBzaW5oLCB0YW5oIHdlIGxpbWl0IHRlc3RzIHRvIGFyZ3VtZW50cyB3aG9zZQorLS0gaW1hZ2luYXJ5IHBhcnQgaXMgbGVzcyB0aGFuIDEwIGluIGFic29sdXRlIHZhbHVlOiAgbW9zdCBtYXRoCistLSBsaWJyYXJpZXMgaGF2ZSBwb29yIGFjY3VyYWN5IGZvciAocmVhbCkgc2luZSBhbmQgY29zaW5lIGZvcgorLS0gbGFyZ2UgYXJndW1lbnRzLCBhbmQgdGhlIGFjY3VyYWN5IG9mIHRoZXNlIGNvbXBsZXggZnVuY3Rpb25zCistLSBzdWZmZXIgY29ycmVzcG9uZGluZ2x5LgorLS0KKy0tIFNpbWlsYXJseSwgZm9yIGNvcywgc2luIGFuZCB0YW4gd2UgbGltaXQgdGVzdHMgdG8gYXJndW1lbnRzCistLSB3aXRoIHJlbGF0aXZlbHkgc21hbGwgcmVhbCBwYXJ0LgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGV4cDogRXhwb25lbnRpYWwgZnVuY3Rpb24gLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gemVyb3MKK2V4cDAwMDAgZXhwIDAuMCAwLjAgLT4gMS4wIDAuMAorZXhwMDAwMSBleHAgMC4wIC0wLjAgLT4gMS4wIC0wLjAKK2V4cDAwMDIgZXhwIC0wLjAgMC4wIC0+IDEuMCAwLjAKK2V4cDAwMDMgZXhwIC0wLjAgLTAuMCAtPiAxLjAgLTAuMAorCistLSByYW5kb20gaW5wdXRzCitleHAwMDA0IGV4cCAtMTcuOTU3MzU5MDA5NTY0Njg0IC0xLjEwODYxMzg5NTc5NTI3NCAtPiA3LjA4NjkyOTI1NzYyMjY2MTFlLTA5IC0xLjQyMjU5MjkyMDIzNzc4MzNlLTA4CitleHAwMDA1IGV4cCAtMS40NDU2MTQ5NjYzMzY4NjQyZS0xNSAtMC43NTM1OTgxNzMzMTc3MjIzOSAtPiAwLjcyOTIzMTQ4MzIzOTE3OTk3IC0wLjY4NDI2NzA4NTE3NDE5MDMzCitleHAwMDA2IGV4cCAtMC43NjAwODY1NDg4MzUxMjY2MSAtMC40NjY1NzIzNTQ4MDEwNTAxOSAtPiAwLjQxNzY0MzkzMTA5OTI4NjY2IC0wLjIxMDM1MTA4Mzk2NzkyODU0CitleHAwMDA3IGV4cCAtNS43MDcxNjE0Njk3NzM1NzMxIC0yLjM3NDQxNjE4MTgxMTU4MTZlLTExIC0+IDAuMDAzMzIyMDg5MDI0MjA2ODM1NiAtNy44ODgwMjE5MzY0OTUzNTc4ZS0xNAorZXhwMDAwOCBleHAgLTAuNDY1Mzk4MTMyNzkyNzA5NyAtNS4yMjM2NzA2NjY3NDQ1NTg3ZS0yMSAtPiAwLjYyNzg4NTA3Mzc4MjE2NjYzIC0zLjI3OTg2NDg0MjAwMjY0NjhlLTIxCitleHAwMDA5IGV4cCAtMy4yNDQ0NTY1MjQyMjk1NTE4IDEuMTUzNTYyNTMwNDI0Mzk1OSAtPiAwLjAxNTc5OTkzNjkzMTQ1NzY0MSAwLjAzNTY0NDk1MDM4MDAyNDc0OQorZXhwMDAxMCBleHAgLTMuMDY1MTQ1NjMzNzk3NzcyNyAwLjg3NzY1MDg2NTMyMzkxODc4IC0+IDAuMDI5ODA1NTk1NjI5ODU1OTUzIDAuMDM1ODgyNzc1MTgwODU1NjY5CitleHAwMDExIGV4cCAtMC4xMTA4MDgyMzc1MzIzMzkyNiAwLjk2NDg2Mzg2MzAwODczMTA2IC0+IDAuNTA5NzkxMTI1MzQzNzYzMTQgMC43MzU3NTUxMjQxOTU2MTU2MgorZXhwMDAxMiBleHAgLTIuNTYyOTcyMjU5ODkyODY0OCAwLjAxOTYzNjIzNTc1NDcwODA3OSAtPiAwLjA3NzA2MDQ1Mjg1MzkxNzM5NyAwLjAwMTUxMzM3MTczNDExMzc2ODQKK2V4cDAwMTMgZXhwIC0zLjMyMDE3MDk5NTc5ODMzNTdlLTEwIDEuMjY4NDAxNzM0NDQ4NzI2OCAtPiAwLjI5NzgwNjk5ODU1NDM0ODg5IDAuOTU0NjI2MTAwMDc2ODkxODYKK2V4cDAwMTQgZXhwIDAuODg3NjcyNzYwNTc5OTMyNzIgLTAuMTg5NTM0MjI5ODY4OTU1NTcgLT4gMi4zODU5NjI0MDQ5ODU4MDk1IC0wLjQ1NzcxNTU5MTMyMDQ0NDI2CitleHAwMDE1IGV4cCAxLjU3MzgzMzM0ODY3OTQ3NDIgLTIuMjU3NjgwMzA3NTU0NDMyOGUtMTEgLT4gNC44MjUxMDkxMTMyNDU4NjU0IC0xLjA4OTM1NTM4MjY3NzY2MjNlLTEwCitleHAwMDE2IGV4cCAxLjY0MDg3MDIzNDE4MTM3OTUgLTEuNDM4ODc5NDg0MzgwODM3IC0+IDAuNjc4NjczMzU5MDY4OTA0OCAtNS4xMTQ4Mjg0MTczMTY4ODI1CitleHAwMDE3IGV4cCAxLjgyMDI3OTQyNDIwMjAzMyAtMC4wMjA4MTIwNDAzNzA3ODU3MjIgLT4gNi4xNzIyNDYyODk2NDIwOTAyIC0wLjEyODQ3NTU4ODg0MzUwNTEKK2V4cDAwMTggZXhwIDEuNzI3Mzk2NTczNTk0NTg3MyAtMC42MTE0MDYyMTMyODk1NDk0NyAtPiA0LjYwNjc5MzE4OTg3OTk5NzYgLTMuMjI5NDI2NzY5NDQ0MTMwOAorZXhwMDAxOSBleHAgMi41NjA2MDM0MzA2ODYyOTk1IDAuMDk4MTUzMTM2MDA4NDM1NTA0IC0+IDEyLjg4MTMyNTg4OTk2NjYyOSAxLjI2ODQxODQ4MTI4NjQ0OTQKK2V4cDAwMjAgZXhwIDEwLjI4MDM2ODYxOTQ4MzAyOSAzLjQ1NjQ2MjI1NTk3NDg1MzUgLT4gLTI3NzIxLjI4MzMyMTU1MTUwMiAtOTAyOC45NjYzMjE1NTY4ODM1CitleHAwMDIxIGV4cCAxLjEwNDAwNzQwNTEyOTc0MWUtMTU1IDAuMjEyNTg4MDMwNjczMTcyNzggLT4gMC45Nzc0ODgxMzkzMzUzMTc2NCAwLjIxMDk5MDM3MjkwNTQ0NDc4CitleHAwMDIyIGV4cCAwLjAyNzM2NDc3NzgwOTI5NTE3MiAwLjAwMDU5MjI2NjAzNTAwNjIzMzYzIC0+IDEuMDI3NzQyNDUxODQ1MTg3NiAwLjAwMDYwODY5NzAxODEzNDY1NzkKK2V4cDAwMjMgZXhwIDAuOTQzNTYzMTM0MjkyNTUyNDUgMy40MTg1MzA0NjM1MTg1OTIgLT4gLTIuNDcxMjI4NTY5NTM0NjE5NCAtMC43MDI0MjY1NDkwMDIxODM0OQorCistLSBjYXNlcyB3aGVyZSBleHAoeikgcmVwcmVzZW50YWJsZSwgZXhwKHoucmVhbCkgbm90CitleHAwMDMwIGV4cCA3MTAuMCAwLjc4NTAwMDAwMDAwMDAwMDAzIC0+IDEuNTgwMzAxNjkwOTYzNzE1OGUrMzA4IDEuNTc5MDQzNzU1MTgwNjkxMWUrMzA4CitleHAwMDMxIGV4cCA3MTAuMCAtMC43ODUwMDAwMDAwMDAwMDAwMyAtPiAxLjU4MDMwMTY5MDk2MzcxNThlKzMwOCAtMS41NzkwNDM3NTUxODA2OTExZSszMDgKKworLS0gdmFsdWVzIGZvciB3aGljaCBleHAoeCkgaXMgc3Vibm9ybWFsLCBvciB1bmRlcmZsb3dzIHRvIDAKK2V4cDAwNDAgZXhwIC03MzUuMCAwLjc4NTAwMDAwMDAwMDAwMDAzIC0+IDQuMzk3Njc4MzEzNjMyOTM1NWUtMzIwIDQuMzk0MjE5ODU0MTEyMDQ2OGUtMzIwCitleHAwMDQxIGV4cCAtNzM1LjAgLTIuMzU1OTk5OTk5OTk5OTk5OSAtPiAtNC4zOTUyMDc5ODU0MDM3MjkzZS0zMjAgLTQuMzk2NjkwMTgyMzQxMjUzZS0zMjAKK2V4cDAwNDIgZXhwIC03NDUuMCAwLjAgLT4gNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQgMC4wCitleHAwMDQzIGV4cCAtNzQ1LjAgMC43IC0+IDAuMCAwLjAKK2V4cDAwNDQgZXhwIC03NDUuMCAyLjEgLT4gLTAuMCAwLjAKK2V4cDAwNDUgZXhwIC03NDUuMCAzLjcgLT4gLTAuMCAtMC4wCitleHAwMDQ2IGV4cCAtNzQ1LjAgNS4zIC0+IDAuMCAtMC4wCisKKy0tIHZhbHVlcyBmb3Igd2hpY2ggZXhwKHopIG92ZXJmbG93cworZXhwMDA1MCBleHAgNzEwLjAgMC4wIC0+IGluZiAwLjAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdworZXhwMDA1MSBleHAgNzExLjAgMC43IC0+IGluZiBpbmYgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdworZXhwMDA1MiBleHAgNzEwLjAgMS41IC0+IDEuNTgwMjY1MzgyOTg1NzM3NmUrMzA3IGluZiAgICBvdmVyZmxvdworZXhwMDA1MyBleHAgNzEwLjAgMS42IC0+IC02LjUyMzE1Nzk5OTU1MDEzNzJlKzMwNiBpbmYgICBvdmVyZmxvdworZXhwMDA1NCBleHAgNzEwLjAgMi44IC0+IC1pbmYgNy40ODM2MTc3NDE3NDQ4NTI4ZSszMDcgICBvdmVyZmxvdworCistLSBzcGVjaWFsIHZhbHVlcworZXhwMTAwMCBleHAgMC4wIDAuMCAtPiAxLjAgMC4wCitleHAxMDAxIGV4cCAtMC4wIDAuMCAtPiAxLjAgMC4wCitleHAxMDAyIGV4cCAwLjAgaW5mIC0+IG5hbiBuYW4gICAgICAgICAgaW52YWxpZAorZXhwMTAwMyBleHAgMi4zIGluZiAtPiBuYW4gbmFuICAgICAgICAgIGludmFsaWQKK2V4cDEwMDQgZXhwIC0wLjAgaW5mIC0+IG5hbiBuYW4gICAgICAgICBpbnZhbGlkCitleHAxMDA1IGV4cCAtMi4zIGluZiAtPiBuYW4gbmFuICAgICAgICAgaW52YWxpZAorZXhwMTAwNiBleHAgMC4wIG5hbiAtPiBuYW4gbmFuCitleHAxMDA3IGV4cCAyLjMgbmFuIC0+IG5hbiBuYW4KK2V4cDEwMDggZXhwIC0wLjAgbmFuIC0+IG5hbiBuYW4KK2V4cDEwMDkgZXhwIC0yLjMgbmFuIC0+IG5hbiBuYW4KK2V4cDEwMTAgZXhwIC1pbmYgMC4wIC0+IDAuMCAwLjAKK2V4cDEwMTEgZXhwIC1pbmYgMS40IC0+IDAuMCAwLjAKK2V4cDEwMTIgZXhwIC1pbmYgMi44IC0+IC0wLjAgMC4wCitleHAxMDEzIGV4cCAtaW5mIDQuMiAtPiAtMC4wIC0wLjAKK2V4cDEwMTQgZXhwIC1pbmYgNS42IC0+IDAuMCAtMC4wCitleHAxMDE1IGV4cCAtaW5mIDcuMCAtPiAwLjAgMC4wCitleHAxMDE2IGV4cCBpbmYgMC4wIC0+IGluZiAwLjAKK2V4cDEwMTcgZXhwIGluZiAxLjQgLT4gaW5mIGluZgorZXhwMTAxOCBleHAgaW5mIDIuOCAtPiAtaW5mIGluZgorZXhwMTAxOSBleHAgaW5mIDQuMiAtPiAtaW5mIC1pbmYKK2V4cDEwMjAgZXhwIGluZiA1LjYgLT4gaW5mIC1pbmYKK2V4cDEwMjEgZXhwIGluZiA3LjAgLT4gaW5mIGluZgorZXhwMTAyMiBleHAgLWluZiBpbmYgLT4gMC4wIDAuMCAgICAgICAgIGlnbm9yZS1yZWFsLXNpZ24gaWdub3JlLWltYWctc2lnbgorZXhwMTAyMyBleHAgaW5mIGluZiAtPiBpbmYgbmFuICAgICAgICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorZXhwMTAyNCBleHAgLWluZiBuYW4gLT4gMC4wIDAuMCAgICAgICAgIGlnbm9yZS1yZWFsLXNpZ24gaWdub3JlLWltYWctc2lnbgorZXhwMTAyNSBleHAgaW5mIG5hbiAtPiBpbmYgbmFuICAgICAgICAgIGlnbm9yZS1yZWFsLXNpZ24KK2V4cDEwMjYgZXhwIG5hbiAwLjAgLT4gbmFuIDAuMAorZXhwMTAyNyBleHAgbmFuIDIuMyAtPiBuYW4gbmFuCitleHAxMDI4IGV4cCBuYW4gaW5mIC0+IG5hbiBuYW4KK2V4cDEwMjkgZXhwIG5hbiBuYW4gLT4gbmFuIG5hbgorZXhwMTAzMCBleHAgMC4wIC0wLjAgLT4gMS4wIC0wLjAKK2V4cDEwMzEgZXhwIC0wLjAgLTAuMCAtPiAxLjAgLTAuMAorZXhwMTAzMiBleHAgMC4wIC1pbmYgLT4gbmFuIG5hbiAgICAgICAgIGludmFsaWQKK2V4cDEwMzMgZXhwIDIuMyAtaW5mIC0+IG5hbiBuYW4gICAgICAgICBpbnZhbGlkCitleHAxMDM0IGV4cCAtMC4wIC1pbmYgLT4gbmFuIG5hbiAgICAgICAgaW52YWxpZAorZXhwMTAzNSBleHAgLTIuMyAtaW5mIC0+IG5hbiBuYW4gICAgICAgIGludmFsaWQKK2V4cDEwMzYgZXhwIC1pbmYgLTAuMCAtPiAwLjAgLTAuMAorZXhwMTAzNyBleHAgLWluZiAtMS40IC0+IDAuMCAtMC4wCitleHAxMDM4IGV4cCAtaW5mIC0yLjggLT4gLTAuMCAtMC4wCitleHAxMDM5IGV4cCAtaW5mIC00LjIgLT4gLTAuMCAwLjAKK2V4cDEwNDAgZXhwIC1pbmYgLTUuNiAtPiAwLjAgMC4wCitleHAxMDQxIGV4cCAtaW5mIC03LjAgLT4gMC4wIC0wLjAKK2V4cDEwNDIgZXhwIGluZiAtMC4wIC0+IGluZiAtMC4wCitleHAxMDQzIGV4cCBpbmYgLTEuNCAtPiBpbmYgLWluZgorZXhwMTA0NCBleHAgaW5mIC0yLjggLT4gLWluZiAtaW5mCitleHAxMDQ1IGV4cCBpbmYgLTQuMiAtPiAtaW5mIGluZgorZXhwMTA0NiBleHAgaW5mIC01LjYgLT4gaW5mIGluZgorZXhwMTA0NyBleHAgaW5mIC03LjAgLT4gaW5mIC1pbmYKK2V4cDEwNDggZXhwIC1pbmYgLWluZiAtPiAwLjAgMC4wICAgICAgICBpZ25vcmUtcmVhbC1zaWduIGlnbm9yZS1pbWFnLXNpZ24KK2V4cDEwNDkgZXhwIGluZiAtaW5mIC0+IGluZiBuYW4gICAgICAgICBpbnZhbGlkIGlnbm9yZS1yZWFsLXNpZ24KK2V4cDEwNTAgZXhwIG5hbiAtMC4wIC0+IG5hbiAtMC4wCitleHAxMDUxIGV4cCBuYW4gLTIuMyAtPiBuYW4gbmFuCitleHAxMDUyIGV4cCBuYW4gLWluZiAtPiBuYW4gbmFuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGNvc2g6IEh5cGVyYm9saWMgQ29zaW5lIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSB6ZXJvcworY29zaDAwMDAgY29zaCAwLjAgMC4wIC0+IDEuMCAwLjAKK2Nvc2gwMDAxIGNvc2ggMC4wIC0wLjAgLT4gMS4wIC0wLjAKK2Nvc2gwMDAyIGNvc2ggLTAuMCAwLjAgLT4gMS4wIC0wLjAKK2Nvc2gwMDAzIGNvc2ggLTAuMCAtMC4wIC0+IDEuMCAwLjAKKworLS0gcmFuZG9tIGlucHV0cworY29zaDAwMDQgY29zaCAtMC44NTM5NTI2NDI5NzQxNDI1MyAtOC44NTUzNzU2MTQ4NjcxOTU4IC0+IC0xLjE2ODQzNDAzNDgwMjExODUgMC41MTg0MjE5NTM1OTc4NzQzNQorY29zaDAwMDUgY29zaCAtMTkuNTg0OTA0MjM3MjExMjIzIC0wLjA2NjU4MjYyNzk5NDkwNjE3NyAtPiAxNTk4MTY4MTIuMjMzMzY5OTIgMTA2NTY3NzYuMDUwNDA2MjQ2Citjb3NoMDAwNiBjb3NoIC0wLjExMDcyNjE4NDAxMTMwNzcyIC0xLjQ4NDgyMDIxNTA3MzI0NyAtPiAwLjA4NjM5NzE2NDc0NDk0OTUwMyAwLjExMDU0Mjc1NjM3NzE3Mjg0Citjb3NoMDAwNyBjb3NoIC0zLjQ3NjQ4NDAyNTA2ODE3NTIgLTAuNDg0NDAzNDgyODgyNzUyNzYgLT4gMTQuMzI1OTMxOTU1MTkwODQ0IDcuNTI0MjA1MzU0ODczNzk1NQorY29zaDAwMDggY29zaCAtMC41MjA0NzA2MzYwNDUyNDYwMiAtMC4zNjAzODA1MzgyNzc1NTg1IC0+IDEuMDY1Mzk0MDM1NDY4MzgwMiAwLjE5MTkzMjkzNjA2MjUyNDczCitjb3NoMDAwOSBjb3NoIC0xLjM5NTE4OTYyOTc1OTk1IDAuMDA3NDczODYwNDcwMDcwMjkwNiAtPiAyLjE0MTcwMzEwMjcyMzU5NjkgLTAuMDE0MTU1MTg3MTIyOTYzMDgKK2Nvc2gwMDEwIGNvc2ggLTAuMzcxMDcwNjQ3NTc2NTM1NDEgMC4xNDcyODA4NTMwNzg1NjYwOSAtPiAxLjA1ODA2MDE0OTY3NzY5OTEgLTAuMDU1NzEyNTMxOTY0NTY4NTg3Citjb3NoMDAxMSBjb3NoIC01Ljg0NzAyMDA5NTg3Mzk2NTMgNC4wMDIxNzIyMzg4MzM2MjkyIC0+IC0xMTIuODYyMjA2Njc2MTgyODUgMTMxLjI0NzM0MDMzNTQ1MDEzCitjb3NoMDAxMiBjb3NoIC0wLjE3MDAyNjE0NDQ4NTE4ODMgMC45NzE2NzU0MDEzNTM1NDUxMyAtPiAwLjU3MjA4NzQ4MjUzNTc3OTQ2IC0wLjE0MTA5MDQ4MjAyNDAyMDMKK2Nvc2gwMDEzIGNvc2ggLTAuNDQwNDIzOTc5MDI2NDg3ODMgMS4wOTA0NzkxOTY0MTM5NzQyIC0+IDAuNTA3NjAzMjIzOTMwNTgxMzMgLTAuNDAzMzM5NjY2NTIwMTA4MTYKK2Nvc2gwMDE0IGNvc2ggMC4wNTIyNjc1NTI0OTE4NjcyOTkgLTMuODg4OTAxMTQzMDY0NDE3NCAtPiAtMC43MzQ1MjMwMzQxNDYzOTI5NyAwLjAzNTU0MDcwNDgzMzUzNzEzNAorY29zaDAwMTUgY29zaCAwLjk4MDAwNzY0MTc3MTI3NDUzIC0xLjI1NDg4MjkyNDc3ODQwOTcgLT4gMC40NzIyMDc0NzM0MTQxNjE0MiAtMS4wODc5NDIxNDMyMTgwMzE2Citjb3NoMDAxNiBjb3NoIDAuMDgzNTk0NzAxMjIyNjQ0MDA4IC0wLjg4ODQ3ODk5OTMwMTgxMjg0IC0+IDAuNjMyNzk3ODI0MTkzMTI2MTMgLTAuMDY0OTU0NTY2ODE2MDAyMjg1Citjb3NoMDAxNyBjb3NoIDEuMzgxNzM1MzE3ODM3NzYgLTAuNDMxODUwNDA4MTY3MzIyMjkgLT4gMS45MjIxNjYzMzc0NjcxNjQ3IC0wLjc4MDczODMwODU4ODQ5MzQ3Citjb3NoMDAxOCBjb3NoIDAuNTczMTU2ODExMjAxNDg0NjUgLTAuMjIyNTU3NjA5NTEwMjc5NDIgLT4gMS4xMzk5NzMzMTI1MTczMDA0IC0wLjEzMzU1MTIzNDM2MDU5NTYKK2Nvc2gwMDE5IGNvc2ggMS44ODgyNTEyMzMzMDYyMzQ3IDQuNTAyNDkzMjE4MjM4Mzc5NyAtPiAtMC43MDQxNjAyMDY1MzYyNjkxIC0zLjE1NzM4MjIxMzE5NjQ2MTUKK2Nvc2gwMDIwIGNvc2ggMC41NjE4MjE5MjA2ODU4MzE3IDAuOTI2MjA0NTIxMjk1NzUzNDggLT4gMC42OTgyMjM4MDQwNTM3ODM4MSAwLjQ3MzA5MDY3NDcxMDU0NTIyCitjb3NoMDAyMSBjb3NoIDAuNTQzNjE0NDI4NDcwNjI1OTEgMC42NDE3NjQ4MzU4MzAxODQ2MiAtPiAwLjkyMjM0NDYyMDc0MTkzNDkxIDAuMzQxNjc5MDY0OTU4NDU1MDEKK2Nvc2gwMDIyIGNvc2ggMC4wMDE0Nzc3NDAzMTA3OTIwMzMxIDEuMzY4MjAyODEyMjY3NzY2MSAtPiAwLjIwMTIxMDY5NjM4OTk1NDkgMC4wMDE0NDc1MTgxMzc4NjMyMTkKK2Nvc2gwMDIzIGNvc2ggMi4yMTg4ODU5NDQzNjM1MDEgMi4wMDE1NzI3Mzk1ODgzNjg3IC0+IC0xLjk0Mjk0MzIxMDgxOTY4IDQuMTI5MDI2OTE3NjA4MzE5NgorCistLSBsYXJnZSByZWFsIHBhcnQKK2Nvc2gwMDMwIGNvc2ggNzEwLjUgMi4zNTE5OTk5OTk5OTk5OTk5IC0+IC0xLjI5Njc0NjUyMzkzNTU5OThlKzMwOCAxLjMwNzY3MDc5MDg4NTczMzNlKzMwOAorY29zaDAwMzEgY29zaCAtNzEwLjUgMC42OTk5OTk5OTk5OTk5OTk5NiAtPiAxLjQwODU0NjYzODEzOTI0OTllKzMwOCAtMS4xODY0MDI0NjY2NDUwMjM5ZSszMDgKKworLS0gc3BlY2lhbCB2YWx1ZXMKK2Nvc2gxMDAwIGNvc2ggMC4wIDAuMCAtPiAxLjAgMC4wCitjb3NoMTAwMSBjb3NoIDAuMCBpbmYgLT4gbmFuIDAuMCAgICAgICAgaW52YWxpZCBpZ25vcmUtaW1hZy1zaWduCitjb3NoMTAwMiBjb3NoIDAuMCBuYW4gLT4gbmFuIDAuMCAgICAgICAgaWdub3JlLWltYWctc2lnbgorY29zaDEwMDMgY29zaCAyLjMgaW5mIC0+IG5hbiBuYW4gICAgICAgIGludmFsaWQKK2Nvc2gxMDA0IGNvc2ggMi4zIG5hbiAtPiBuYW4gbmFuCitjb3NoMTAwNSBjb3NoIGluZiAwLjAgLT4gaW5mIDAuMAorY29zaDEwMDYgY29zaCBpbmYgMS40IC0+IGluZiBpbmYKK2Nvc2gxMDA3IGNvc2ggaW5mIDIuOCAtPiAtaW5mIGluZgorY29zaDEwMDggY29zaCBpbmYgNC4yIC0+IC1pbmYgLWluZgorY29zaDEwMDkgY29zaCBpbmYgNS42IC0+IGluZiAtaW5mCitjb3NoMTAxMCBjb3NoIGluZiA3LjAgLT4gaW5mIGluZgorY29zaDEwMTEgY29zaCBpbmYgaW5mIC0+IGluZiBuYW4gICAgICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorY29zaDEwMTIgY29zaCBpbmYgbmFuIC0+IGluZiBuYW4KK2Nvc2gxMDEzIGNvc2ggbmFuIDAuMCAtPiBuYW4gMC4wICAgICAgICBpZ25vcmUtaW1hZy1zaWduCitjb3NoMTAxNCBjb3NoIG5hbiAyLjMgLT4gbmFuIG5hbgorY29zaDEwMTUgY29zaCBuYW4gaW5mIC0+IG5hbiBuYW4KK2Nvc2gxMDE2IGNvc2ggbmFuIG5hbiAtPiBuYW4gbmFuCitjb3NoMTAxNyBjb3NoIDAuMCAtMC4wIC0+IDEuMCAtMC4wCitjb3NoMTAxOCBjb3NoIDAuMCAtaW5mIC0+IG5hbiAwLjAgICAgICAgaW52YWxpZCBpZ25vcmUtaW1hZy1zaWduCitjb3NoMTAxOSBjb3NoIDIuMyAtaW5mIC0+IG5hbiBuYW4gICAgICAgaW52YWxpZAorY29zaDEwMjAgY29zaCBpbmYgLTAuMCAtPiBpbmYgLTAuMAorY29zaDEwMjEgY29zaCBpbmYgLTEuNCAtPiBpbmYgLWluZgorY29zaDEwMjIgY29zaCBpbmYgLTIuOCAtPiAtaW5mIC1pbmYKK2Nvc2gxMDIzIGNvc2ggaW5mIC00LjIgLT4gLWluZiBpbmYKK2Nvc2gxMDI0IGNvc2ggaW5mIC01LjYgLT4gaW5mIGluZgorY29zaDEwMjUgY29zaCBpbmYgLTcuMCAtPiBpbmYgLWluZgorY29zaDEwMjYgY29zaCBpbmYgLWluZiAtPiBpbmYgbmFuICAgICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorY29zaDEwMjcgY29zaCBuYW4gLTAuMCAtPiBuYW4gMC4wICAgICAgIGlnbm9yZS1pbWFnLXNpZ24KK2Nvc2gxMDI4IGNvc2ggbmFuIC0yLjMgLT4gbmFuIG5hbgorY29zaDEwMjkgY29zaCBuYW4gLWluZiAtPiBuYW4gbmFuCitjb3NoMTAzMCBjb3NoIC0wLjAgLTAuMCAtPiAxLjAgMC4wCitjb3NoMTAzMSBjb3NoIC0wLjAgLWluZiAtPiBuYW4gMC4wICAgICAgaW52YWxpZCBpZ25vcmUtaW1hZy1zaWduCitjb3NoMTAzMiBjb3NoIC0wLjAgbmFuIC0+IG5hbiAwLjAgICAgICAgaWdub3JlLWltYWctc2lnbgorY29zaDEwMzMgY29zaCAtMi4zIC1pbmYgLT4gbmFuIG5hbiAgICAgIGludmFsaWQKK2Nvc2gxMDM0IGNvc2ggLTIuMyBuYW4gLT4gbmFuIG5hbgorY29zaDEwMzUgY29zaCAtaW5mIC0wLjAgLT4gaW5mIDAuMAorY29zaDEwMzYgY29zaCAtaW5mIC0xLjQgLT4gaW5mIGluZgorY29zaDEwMzcgY29zaCAtaW5mIC0yLjggLT4gLWluZiBpbmYKK2Nvc2gxMDM4IGNvc2ggLWluZiAtNC4yIC0+IC1pbmYgLWluZgorY29zaDEwMzkgY29zaCAtaW5mIC01LjYgLT4gaW5mIC1pbmYKK2Nvc2gxMDQwIGNvc2ggLWluZiAtNy4wIC0+IGluZiBpbmYKK2Nvc2gxMDQxIGNvc2ggLWluZiAtaW5mIC0+IGluZiBuYW4gICAgICBpbnZhbGlkIGlnbm9yZS1yZWFsLXNpZ24KK2Nvc2gxMDQyIGNvc2ggLWluZiBuYW4gLT4gaW5mIG5hbgorY29zaDEwNDMgY29zaCAtMC4wIDAuMCAtPiAxLjAgLTAuMAorY29zaDEwNDQgY29zaCAtMC4wIGluZiAtPiBuYW4gMC4wICAgICAgIGludmFsaWQgaWdub3JlLWltYWctc2lnbgorY29zaDEwNDUgY29zaCAtMi4zIGluZiAtPiBuYW4gbmFuICAgICAgIGludmFsaWQKK2Nvc2gxMDQ2IGNvc2ggLWluZiAwLjAgLT4gaW5mIC0wLjAKK2Nvc2gxMDQ3IGNvc2ggLWluZiAxLjQgLT4gaW5mIC1pbmYKK2Nvc2gxMDQ4IGNvc2ggLWluZiAyLjggLT4gLWluZiAtaW5mCitjb3NoMTA0OSBjb3NoIC1pbmYgNC4yIC0+IC1pbmYgaW5mCitjb3NoMTA1MCBjb3NoIC1pbmYgNS42IC0+IGluZiBpbmYKK2Nvc2gxMDUxIGNvc2ggLWluZiA3LjAgLT4gaW5mIC1pbmYKK2Nvc2gxMDUyIGNvc2ggLWluZiBpbmYgLT4gaW5mIG5hbiAgICAgICBpbnZhbGlkIGlnbm9yZS1yZWFsLXNpZ24KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHNpbmg6IEh5cGVyYm9saWMgU2luZSAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIHplcm9zCitzaW5oMDAwMCBzaW5oIDAuMCAwLjAgLT4gMC4wIDAuMAorc2luaDAwMDEgc2luaCAwLjAgLTAuMCAtPiAwLjAgLTAuMAorc2luaDAwMDIgc2luaCAtMC4wIDAuMCAtPiAtMC4wIDAuMAorc2luaDAwMDMgc2luaCAtMC4wIC0wLjAgLT4gLTAuMCAtMC4wCisKKy0tIHJhbmRvbSBpbnB1dHMKK3NpbmgwMDA0IHNpbmggLTE3LjI4MjU4ODA5MTQ2Mjc0MiAtMC4zODE4Nzk0ODY5NDEwMzU0NiAtPiAtMTQ4NjczODYuODU3MjQ4Mzk2IC01OTcwNjQ4LjY1NTM1MTY2MzkKK3NpbmgwMDA1IHNpbmggLTM0My45MTk3MTIwMzE0MzIwOCAtNS4wMTcyODY4ODc3NzcxNTI1ZS0yMiAtPiAtMS4xNTE4NjkxNzc2NTIxNzM1ZSsxNDkgLTUuNzc5MjU4MTIxNDY4OTAyMWUrMTI3CitzaW5oMDAwNiBzaW5oIC0xNC4xNzgxMjIyNTMzMDA5MjIgLTEuOTM4NzE1NzU3OTM1MTI5MyAtPiAyNTg0NDAuMzc5MDkwMzQ4MjYgLTY3MDQ1Mi41ODUwMDk0NjQ0MQorc2luaDAwMDcgc2luaCAtMS4wMzQzODEwNTgxNjg2MjM5IC0xLjA5NzAyMzUyNjYzNjk5MDUgLT4gLTAuNTYwNzA4NTgyNzgwOTI3MzkgLTEuNDA5ODg4MzI1ODA0NjY5Nworc2luaDAwMDggc2luaCAtMC4wNjYxMjY1NjE0MTYzNjgyMDQgLTAuMDcwNDYxNTg0MTY5OTYxODcyIC0+IC0wLjA2NjAxMDU1ODcwMDkzODEyNCAtMC4wNzA1NTcyNzY3Mzg2Mzc1NDIKK3NpbmgwMDA5IHNpbmggLTAuMzc2MzAxNDkxNTAzMDg0ODQgMy4zNjIxNzM0NjkyMTYyMTczIC0+IDAuMzc1OTExMTgxMTkzMzI2MTcgLTAuMjM0NDcxMTU5MjYzNjkzODMKK3NpbmgwMDEwIHNpbmggLTAuMDQ5OTQxOTYwOTc4NjcwMDU1IDAuNDAzMjM3NjcwMjA0MTQ2MjUgLT4gLTAuMDQ1OTU1NDgyMTM2MzI5MDA5IDAuMzkyODg3ODQ5NDQzMDY0Ngorc2luaDAwMTEgc2luaCAtMTYuNjQ3ODUyNjAzOTAzNzE1IDAuMDAyNjg1MjIxOTEyOTA4MjA5OCAtPiAtODQ5MjU2Ni41NzM5MzgyNTYxIDIyODA0LjQ4MDY3MTEzMzU2Mgorc2luaDAwMTIgc2luaCAtMS40NzY2MjUzMTQzMDM2OTQgMC44OTQ3Mzc3MzExNjY4MzM4NiAtPiAtMS4yOTgyOTQzMzM0MzgyMjI0IDEuNzk2NjU5MzM2Nzc5MTIwNAorc2luaDAwMTMgc2luaCAtNDIyLjM2NDI5NTc3NTU2OTEzIDAuMTAzNjY2MzQ1MDIzMDc5MTIgLT4gLTEuMzQwMDMyMTAwODkyMDA0NGUrMTgzIDEuMzk0MTYwMDk0ODA0NTU5OWUrMTgyCitzaW5oMDAxNCBzaW5oIDAuMDkxMDgzNDA3NDU2NDE5ODEgLTAuNDA0MDgyMjc0MTYwNzAzNTMgLT4gMC4wODM4NjM3MjQ4MDIyMzc5MDIgLTAuMzk0ODA3MTY1NTM5MzU2MDIKK3NpbmgwMDE1IHNpbmggMi4wMzYwNjQxMzIwNjczODYgLTIuNjgzMTcyOTk2MTM4NjIzOSAtPiAtMy4zNzYyMTEyNDM2MzE3NSAtMS43MjM4NjgzMzAwMDI4MTcKK3NpbmgwMDE2IHNpbmggMi41NjE2NzE3MjIzMDYzMzE3IC0wLjAwNzg5Nzg0OTg2MjI3MTc3NjcgLT4gNi40Mzk5NDE1ODUzODE1ODY5IC0wLjA1MTQ3MjI2NDQwMDcyMjEzMworc2luaDAwMTcgc2luaCAwLjMzNjgwNDAxMTk4NTE4OCAtNi41NjU0NjIyOTcxNjQ5MzM3IC0+IDAuMzI5NjI0OTkzMDc1NzQ1NzggLTAuMjk0NDkxNzAxNTk5OTUxOTcKK3NpbmgwMDE4IHNpbmggMC4yMzc3NDYwMzc1NTY0OTY5MyAtMC45MjQ2NzE5NTc5OTIzMjA0OSAtPiAwLjE0NDQ5ODM5NDkwNjAzMzg5IC0wLjgyMTA5NDQ5MDUzNTU2NzkzCitzaW5oMDAxOSBzaW5oIDAuMDAxMTM4ODI3MzU0MTQ2NTQ5NCAxLjk2NzYxOTY4ODI5NDk4NTUgLT4gLTAuMDAwNDQwMTQ2MDUzODk2MzQ5OTkgMC45MjIyOTM5ODQwNzA5ODgwNgorc2luaDAwMjAgc2luaCAzLjI0NDM4NzAxMDU2NjM3NTkgMC44MDU0Mjg3NTU5NjE2ODk1IC0+IDguODcwMjg5MDc3ODUyNzQyNiA5LjI2MTA3NDg1OTcwNDIxOTYKK3NpbmgwMDIxIHNpbmggMC4wNDA2Mjg5MDg4NTcwNTQ3MzggMC4wOTgyMDYzOTExOTA5NDQ5NTggLT4gMC4wNDA0NDQyNjg0MTY3MTIzMyAwLjA5ODEyOTU0NDczOTcwNzM5Mgorc2luaDAwMjIgc2luaCA0LjcyNTIyODM5MTgyMTc2OTZlLTMwIDkuMTE5ODE1NTY0MjY1NjY5NyAtPiAtNC41MDcxOTgwNTYxNjQ0NDA0ZS0zMCAwLjMwMDI1NzMwNzAxNjYxNzEzCitzaW5oMDAyMyBzaW5oIDAuMDQzNzEzNjkzNjc4NDIwMDY4IDAuMjI1MTI1NDk4ODc1MzI2NTcgLT4gMC4wNDI2MjQxOTg2NzM0MTY3MTMgMC4yMjM0NDIwMTIzMTIxNzk2MQorCistLSBsYXJnZSByZWFsIHBhcnQKK3NpbmgwMDMwIHNpbmggNzEwLjUgLTIuMzk5OTk5OTk5OTk5OTk5OSAtPiAtMS4zNTc5OTcwNTY0ODg1OTE5ZSszMDggLTEuMjQzOTQ0NzA5MDc3OThlKzMwOAorc2luaDAwMzEgc2luaCAtNzEwLjUgMC44MDAwMDAwMDAwMDAwMDAwNCAtPiAtMS4yODMwNjcxNjAxNzM1MTY0ZSszMDggMS4zMjEwOTU0MTkzOTk3Njc4ZSszMDgKKworLS0gc3BlY2lhbCB2YWx1ZXMKK3NpbmgxMDAwIHNpbmggMC4wIDAuMCAtPiAwLjAgMC4wCitzaW5oMTAwMSBzaW5oIDAuMCBpbmYgLT4gMC4wIG5hbiAgICAgICAgaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCitzaW5oMTAwMiBzaW5oIDAuMCBuYW4gLT4gMC4wIG5hbiAgICAgICAgaWdub3JlLXJlYWwtc2lnbgorc2luaDEwMDMgc2luaCAyLjMgaW5mIC0+IG5hbiBuYW4gICAgICAgIGludmFsaWQKK3NpbmgxMDA0IHNpbmggMi4zIG5hbiAtPiBuYW4gbmFuCitzaW5oMTAwNSBzaW5oIGluZiAwLjAgLT4gaW5mIDAuMAorc2luaDEwMDYgc2luaCBpbmYgMS40IC0+IGluZiBpbmYKK3NpbmgxMDA3IHNpbmggaW5mIDIuOCAtPiAtaW5mIGluZgorc2luaDEwMDggc2luaCBpbmYgNC4yIC0+IC1pbmYgLWluZgorc2luaDEwMDkgc2luaCBpbmYgNS42IC0+IGluZiAtaW5mCitzaW5oMTAxMCBzaW5oIGluZiA3LjAgLT4gaW5mIGluZgorc2luaDEwMTEgc2luaCBpbmYgaW5mIC0+IGluZiBuYW4gICAgICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorc2luaDEwMTIgc2luaCBpbmYgbmFuIC0+IGluZiBuYW4gICAgICAgIGlnbm9yZS1yZWFsLXNpZ24KK3NpbmgxMDEzIHNpbmggbmFuIDAuMCAtPiBuYW4gMC4wCitzaW5oMTAxNCBzaW5oIG5hbiAyLjMgLT4gbmFuIG5hbgorc2luaDEwMTUgc2luaCBuYW4gaW5mIC0+IG5hbiBuYW4KK3NpbmgxMDE2IHNpbmggbmFuIG5hbiAtPiBuYW4gbmFuCitzaW5oMTAxNyBzaW5oIDAuMCAtMC4wIC0+IDAuMCAtMC4wCitzaW5oMTAxOCBzaW5oIDAuMCAtaW5mIC0+IDAuMCBuYW4gICAgICAgaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCitzaW5oMTAxOSBzaW5oIDIuMyAtaW5mIC0+IG5hbiBuYW4gICAgICAgaW52YWxpZAorc2luaDEwMjAgc2luaCBpbmYgLTAuMCAtPiBpbmYgLTAuMAorc2luaDEwMjEgc2luaCBpbmYgLTEuNCAtPiBpbmYgLWluZgorc2luaDEwMjIgc2luaCBpbmYgLTIuOCAtPiAtaW5mIC1pbmYKK3NpbmgxMDIzIHNpbmggaW5mIC00LjIgLT4gLWluZiBpbmYKK3NpbmgxMDI0IHNpbmggaW5mIC01LjYgLT4gaW5mIGluZgorc2luaDEwMjUgc2luaCBpbmYgLTcuMCAtPiBpbmYgLWluZgorc2luaDEwMjYgc2luaCBpbmYgLWluZiAtPiBpbmYgbmFuICAgICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorc2luaDEwMjcgc2luaCBuYW4gLTAuMCAtPiBuYW4gLTAuMAorc2luaDEwMjggc2luaCBuYW4gLTIuMyAtPiBuYW4gbmFuCitzaW5oMTAyOSBzaW5oIG5hbiAtaW5mIC0+IG5hbiBuYW4KK3NpbmgxMDMwIHNpbmggLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorc2luaDEwMzEgc2luaCAtMC4wIC1pbmYgLT4gMC4wIG5hbiAgICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorc2luaDEwMzIgc2luaCAtMC4wIG5hbiAtPiAwLjAgbmFuICAgICAgIGlnbm9yZS1yZWFsLXNpZ24KK3NpbmgxMDMzIHNpbmggLTIuMyAtaW5mIC0+IG5hbiBuYW4gICAgICBpbnZhbGlkCitzaW5oMTAzNCBzaW5oIC0yLjMgbmFuIC0+IG5hbiBuYW4KK3NpbmgxMDM1IHNpbmggLWluZiAtMC4wIC0+IC1pbmYgLTAuMAorc2luaDEwMzYgc2luaCAtaW5mIC0xLjQgLT4gLWluZiAtaW5mCitzaW5oMTAzNyBzaW5oIC1pbmYgLTIuOCAtPiBpbmYgLWluZgorc2luaDEwMzggc2luaCAtaW5mIC00LjIgLT4gaW5mIGluZgorc2luaDEwMzkgc2luaCAtaW5mIC01LjYgLT4gLWluZiBpbmYKK3NpbmgxMDQwIHNpbmggLWluZiAtNy4wIC0+IC1pbmYgLWluZgorc2luaDEwNDEgc2luaCAtaW5mIC1pbmYgLT4gaW5mIG5hbiAgICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorc2luaDEwNDIgc2luaCAtaW5mIG5hbiAtPiBpbmYgbmFuICAgICAgIGlnbm9yZS1yZWFsLXNpZ24KK3NpbmgxMDQzIHNpbmggLTAuMCAwLjAgLT4gLTAuMCAwLjAKK3NpbmgxMDQ0IHNpbmggLTAuMCBpbmYgLT4gMC4wIG5hbiAgICAgICBpbnZhbGlkIGlnbm9yZS1yZWFsLXNpZ24KK3NpbmgxMDQ1IHNpbmggLTIuMyBpbmYgLT4gbmFuIG5hbiAgICAgICBpbnZhbGlkCitzaW5oMTA0NiBzaW5oIC1pbmYgMC4wIC0+IC1pbmYgMC4wCitzaW5oMTA0NyBzaW5oIC1pbmYgMS40IC0+IC1pbmYgaW5mCitzaW5oMTA0OCBzaW5oIC1pbmYgMi44IC0+IGluZiBpbmYKK3NpbmgxMDQ5IHNpbmggLWluZiA0LjIgLT4gaW5mIC1pbmYKK3NpbmgxMDUwIHNpbmggLWluZiA1LjYgLT4gLWluZiAtaW5mCitzaW5oMTA1MSBzaW5oIC1pbmYgNy4wIC0+IC1pbmYgaW5mCitzaW5oMTA1MiBzaW5oIC1pbmYgaW5mIC0+IGluZiBuYW4gICAgICAgaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSB0YW5oOiBIeXBlcmJvbGljIFRhbmdlbnQgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSB6ZXJvcwordGFuaDAwMDAgdGFuaCAwLjAgMC4wIC0+IDAuMCAwLjAKK3RhbmgwMDAxIHRhbmggMC4wIC0wLjAgLT4gMC4wIC0wLjAKK3RhbmgwMDAyIHRhbmggLTAuMCAwLjAgLT4gLTAuMCAwLjAKK3RhbmgwMDAzIHRhbmggLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorCistLSByYW5kb20gaW5wdXRzCit0YW5oMDAwNCB0YW5oIC0yMS4yMDA1MDA0NTA2NjQ5OTMgLTEuNjk3MDcyOTQ4MDM0Mjk5NiAtPiAtMS4wIDEuOTI0MTM1MjM0NDg0OTM5OWUtMTkKK3RhbmgwMDA1IHRhbmggLTAuMzQxNTg3NzE1MDQyNTE5MjggLTguMDg0ODUwNDk1MTc0NzEzMSAtPiAtMi4xMjM3MTEyMjU4NTU2MTMgMS4yODI3NTI2NzgyMDI2MDA2Cit0YW5oMDAwNiB0YW5oIC0xNS40NTQxNDQ3MjUxOTM2ODkgLTAuMjM2MTk1ODIyODgyNjU2MTcgLT4gLTAuOTk5OTk5OTk5OTk5OTMyODMgLTMuNDMzNjY4NDI0ODI2MDAzNmUtMTQKK3RhbmgwMDA3IHRhbmggLTcuNjEwMzE2MzExOTY2MTk1MiAtMC43ODAyNzQ4MzIwMzA3MDA4IC0+IC0wLjk5OTk5OTk5NDk3MjE5NDM4IC00LjkwNjQ4NDUzNDM3NTU0MzdlLTA3Cit0YW5oMDAwOCB0YW5oIC0wLjE1Mzc0NzE3MjM1NzkyMTI5IC0wLjYzNTEwODYzMjczMDYxMzggLT4gLTAuMjMyNDYwODE3MDM1NjE4NjkgLTAuNzEwODM0Njc0MzM5MTAyMTkKK3RhbmgwMDA5IHRhbmggLTAuNDkxMDExMTU0NzQzOTI0NjUgMC4wOTcyMzAwMTI2NDg4NjMwMSAtPiAtMC40NTg0NDQ0NTcxNTQ5MjEzMyAwLjA3NzE5MTE1ODU0MTgwNTg4OAordGFuaDAwMTAgdGFuaCAtMC4xMDY5MDYxMjE1NzY2NDQ5MSAyLjg2MTYxMjgwMDg1NjM5NSAtPiAtMC4xMTUxOTc2MTYyNjI1NzM1OCAtMC4yODQwMDQ4ODM1NTY0NzUwNwordGFuaDAwMTEgdGFuaCAtMC45MTUwNTc3NDE5MjA2NjcwMiAxLjU0MzExNzQ1OTc3MjcwMDcgLT4gLTEuMzgxMTA5ODkzMDY4MTE0IDAuMDI1MTYwODE5NjYzNzA5MzU2Cit0YW5oMDAxMiB0YW5oIC0wLjA1NzQzMzM2NzA5Mzc5MjIyMyAwLjM1NDkxMTU5NTQxMjQ2NDU5IC0+IC0wLjA2NTIyMDQ5OTA0NjY5Njk1MyAwLjM2OTIxNzg4MzMyMzY5NDk4Cit0YW5oMDAxMyB0YW5oIC0xLjM1NDA0MTg2MjEyMzM1MTQgMC4xODk2OTQxNTY0MjI0MjUzNSAtPiAtMC44ODIzNTY0Mjg2MTE1MTM4NyAwLjA0Mzc2NDA2OTk4NDQxMTcyMQordGFuaDAwMTQgdGFuaCAwLjk0ODY0NzgzOTYxMDAzNTI5IC0wLjExMzMzNjg5NTc4ODY3NzE3IC0+IDAuNzQzNDg0MDE4NjE4NjEzNjggLTAuMDUxMjcxMDQyNTQzODU1MjIxCit0YW5oMDAxNSB0YW5oIDEuOTU5MTY5ODEzMzg0NTQ4OCAtMC4wMDI5NjU0NDQ0OTA0NTc4MzM5IC0+IDAuOTYxMDI3MDc3Njk2ODEzNSAtMC4wMDAyMjY2NDI0MDA0OTIxMjkzMwordGFuaDAwMTYgdGFuaCAxLjA5NDk3MTU3OTY2NjkxOTcgLTAuMjQ3MDY2NDI4NTM5ODQ0NTYgLT4gMC44MTYzNjU3NDUwMTM2OTM4NiAtMC4wODc3Njc0MzY5MTQxNDk5NTQKK3RhbmgwMDE3IHRhbmggNTc3MDQyOC4yMTEzNzMxMDQ3IC0zLjcxNjA1ODAzMzk4MzMxNjUgLT4gMS4wIC0wLjAKK3RhbmgwMDE4IHRhbmggMS41NTc2NzgyMzIxMzk5NjI5IC0xLjAzNTc5NDM3ODc5NjY0NjggLT4gMS4wNDAzMDAyMzg0ODk1Mzg4IC0wLjA4MTEyNjM0Nzg5NDY3MTQ2MwordGFuaDAwMTkgdGFuaCAwLjYyMzc4NTM2MjMwNTUyOTYxIDIuMzQ3MTM5MzU3OTU2MDIxNiAtPiAwLjg1NTgyNDk5MjM4OTYwMzYzIC0wLjUzNTY5NDczNjQ2ODQyODY5Cit0YW5oMDAyMCB0YW5oIDE3LjQwMDYyODYwMjUwODAyNSA5LjM5ODcwNTk1MzM4NDE5NzkgLT4gMC45OTk5OTk5OTk5OTk5OTg0NSAtOC4wMTc1ODY3NzIwNTMwODMyZS0xNwordGFuaDAwMjEgdGFuaCAwLjE1MDI2MTc3NTA5ODcxODk2IDAuNTA2MzAzNDkxNTk1MDU0NzIgLT4gMC4xOTM2NzUzNjU3MTgyNzc2OCAwLjUzODQ5ODQ3ODU4ODUzNjYxCit0YW5oMDAyMiB0YW5oIDAuNTc0MzM5Nzc1MzA3MTExNjcgMS4wMDcxNjA0NTQ2MjY1NjI3IC0+IDEuMDg1Nzg0ODE1OTI2Mjg0NCAwLjY5MTM5MjEzOTU1ODcyMjE0Cit0YW5oMDAyMyB0YW5oIDAuMTYyOTExODE1MDA0NDk0NTYgMC4wMDY5NzI4MTAyNDE1Njc1NDQgLT4gMC4xNjE0OTMzNTkwNzU1MTE1NyAwLjAwNjc5MTA3NzI5MDM0Njc4MTcKKworLS0gbGFyZ2UgcmVhbCBwYXJ0Cit0YW5oMDAzMCB0YW5oIDcxMCAwLjEzIC0+IDEuMCAwLjAKK3RhbmgwMDMxIHRhbmggLTcxMSA3LjQwMDAwMDAwMDAwMDAwMDQgLT4gLTEuMCAwLjAKK3RhbmgwMDMyIHRhbmggMTAwMCAtMi4zMTk5OTk5OTk5OTk5OTk4IC0+IDEuMCAwLjAKK3RhbmgwMDMzIHRhbmggLTEuMDAwMDAwMDAwMDAwMDAwMWUrMzAwIC05LjY2OTk5OTk5OTk5OTk5OTkgLT4gLTEuMCAtMC4wCisKKy0tc3BlY2lhbCB2YWx1ZXMKK3RhbmgxMDAwIHRhbmggMC4wIDAuMCAtPiAwLjAgMC4wCit0YW5oMTAwMSB0YW5oIDAuMCBpbmYgLT4gbmFuIG5hbiAgICAgICAgaW52YWxpZAordGFuaDEwMDIgdGFuaCAyLjMgaW5mIC0+IG5hbiBuYW4gICAgICAgIGludmFsaWQKK3RhbmgxMDAzIHRhbmggMC4wIG5hbiAtPiBuYW4gbmFuCit0YW5oMTAwNCB0YW5oIDIuMyBuYW4gLT4gbmFuIG5hbgordGFuaDEwMDUgdGFuaCBpbmYgMC4wIC0+IDEuMCAwLjAKK3RhbmgxMDA2IHRhbmggaW5mIDAuNyAtPiAxLjAgMC4wCit0YW5oMTAwNyB0YW5oIGluZiAxLjQgLT4gMS4wIDAuMAordGFuaDEwMDggdGFuaCBpbmYgMi4xIC0+IDEuMCAtMC4wCit0YW5oMTAwOSB0YW5oIGluZiAyLjggLT4gMS4wIC0wLjAKK3RhbmgxMDEwIHRhbmggaW5mIDMuNSAtPiAxLjAgMC4wCit0YW5oMTAxMSB0YW5oIGluZiBpbmYgLT4gMS4wIDAuMCAgICAgICAgaWdub3JlLWltYWctc2lnbgordGFuaDEwMTIgdGFuaCBpbmYgbmFuIC0+IDEuMCAwLjAgICAgICAgIGlnbm9yZS1pbWFnLXNpZ24KK3RhbmgxMDEzIHRhbmggbmFuIDAuMCAtPiBuYW4gMC4wCit0YW5oMTAxNCB0YW5oIG5hbiAyLjMgLT4gbmFuIG5hbgordGFuaDEwMTUgdGFuaCBuYW4gaW5mIC0+IG5hbiBuYW4KK3RhbmgxMDE2IHRhbmggbmFuIG5hbiAtPiBuYW4gbmFuCit0YW5oMTAxNyB0YW5oIDAuMCAtMC4wIC0+IDAuMCAtMC4wCit0YW5oMTAxOCB0YW5oIDAuMCAtaW5mIC0+IG5hbiBuYW4gICAgICAgaW52YWxpZAordGFuaDEwMTkgdGFuaCAyLjMgLWluZiAtPiBuYW4gbmFuICAgICAgIGludmFsaWQKK3RhbmgxMDIwIHRhbmggaW5mIC0wLjAgLT4gMS4wIC0wLjAKK3RhbmgxMDIxIHRhbmggaW5mIC0wLjcgLT4gMS4wIC0wLjAKK3RhbmgxMDIyIHRhbmggaW5mIC0xLjQgLT4gMS4wIC0wLjAKK3RhbmgxMDIzIHRhbmggaW5mIC0yLjEgLT4gMS4wIDAuMAordGFuaDEwMjQgdGFuaCBpbmYgLTIuOCAtPiAxLjAgMC4wCit0YW5oMTAyNSB0YW5oIGluZiAtMy41IC0+IDEuMCAtMC4wCit0YW5oMTAyNiB0YW5oIGluZiAtaW5mIC0+IDEuMCAwLjAgICAgICAgaWdub3JlLWltYWctc2lnbgordGFuaDEwMjcgdGFuaCBuYW4gLTAuMCAtPiBuYW4gLTAuMAordGFuaDEwMjggdGFuaCBuYW4gLTIuMyAtPiBuYW4gbmFuCit0YW5oMTAyOSB0YW5oIG5hbiAtaW5mIC0+IG5hbiBuYW4KK3RhbmgxMDMwIHRhbmggLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAordGFuaDEwMzEgdGFuaCAtMC4wIC1pbmYgLT4gbmFuIG5hbiAgICAgIGludmFsaWQKK3RhbmgxMDMyIHRhbmggLTIuMyAtaW5mIC0+IG5hbiBuYW4gICAgICBpbnZhbGlkCit0YW5oMTAzMyB0YW5oIC0wLjAgbmFuIC0+IG5hbiBuYW4KK3RhbmgxMDM0IHRhbmggLTIuMyBuYW4gLT4gbmFuIG5hbgordGFuaDEwMzUgdGFuaCAtaW5mIC0wLjAgLT4gLTEuMCAtMC4wCit0YW5oMTAzNiB0YW5oIC1pbmYgLTAuNyAtPiAtMS4wIC0wLjAKK3RhbmgxMDM3IHRhbmggLWluZiAtMS40IC0+IC0xLjAgLTAuMAordGFuaDEwMzggdGFuaCAtaW5mIC0yLjEgLT4gLTEuMCAwLjAKK3RhbmgxMDM5IHRhbmggLWluZiAtMi44IC0+IC0xLjAgMC4wCit0YW5oMTA0MCB0YW5oIC1pbmYgLTMuNSAtPiAtMS4wIC0wLjAKK3RhbmgxMDQxIHRhbmggLWluZiAtaW5mIC0+IC0xLjAgMC4wICAgICBpZ25vcmUtaW1hZy1zaWduCit0YW5oMTA0MiB0YW5oIC1pbmYgbmFuIC0+IC0xLjAgMC4wICAgICAgaWdub3JlLWltYWctc2lnbgordGFuaDEwNDMgdGFuaCAtMC4wIDAuMCAtPiAtMC4wIDAuMAordGFuaDEwNDQgdGFuaCAtMC4wIGluZiAtPiBuYW4gbmFuICAgICAgIGludmFsaWQKK3RhbmgxMDQ1IHRhbmggLTIuMyBpbmYgLT4gbmFuIG5hbiAgICAgICBpbnZhbGlkCit0YW5oMTA0NiB0YW5oIC1pbmYgMC4wIC0+IC0xLjAgMC4wCit0YW5oMTA0NyB0YW5oIC1pbmYgMC43IC0+IC0xLjAgMC4wCit0YW5oMTA0OCB0YW5oIC1pbmYgMS40IC0+IC0xLjAgMC4wCit0YW5oMTA0OSB0YW5oIC1pbmYgMi4xIC0+IC0xLjAgLTAuMAordGFuaDEwNTAgdGFuaCAtaW5mIDIuOCAtPiAtMS4wIC0wLjAKK3RhbmgxMDUxIHRhbmggLWluZiAzLjUgLT4gLTEuMCAwLjAKK3RhbmgxMDUyIHRhbmggLWluZiBpbmYgLT4gLTEuMCAwLjAgICAgICBpZ25vcmUtaW1hZy1zaWduCisKKworLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGNvczogQ29zaW5lIC0tCistLS0tLS0tLS0tLS0tLS0tLQorCistLSB6ZXJvcworY29zMDAwMCBjb3MgMC4wIDAuMCAtPiAxLjAgLTAuMAorY29zMDAwMSBjb3MgMC4wIC0wLjAgLT4gMS4wIDAuMAorY29zMDAwMiBjb3MgLTAuMCAwLjAgLT4gMS4wIDAuMAorY29zMDAwMyBjb3MgLTAuMCAtMC4wIC0+IDEuMCAtMC4wCisKKy0tIHJhbmRvbSBpbnB1dHMKK2NvczAwMDQgY29zIC0yLjA2ODkxOTQ2OTIwNzMwMzQgLTAuMDAxNjgwMjE4MTc1MTczNDMxMyAtPiAtMC40Nzc3NzgyNzIwODU2MTQ2OSAtMC4wMDE0NzYwNDAxNTAxNjk1OTcxCitjb3MwMDA1IGNvcyAtMC40MjA5NjI3MzE4MTc3OTc3IC0xLjgyMzg1MTY3NzQyNTgwMjcgLT4gMi45MDEwNDAyMjAxNDQ0MTA4IC0xLjIzMjkyMDcwNDIzMjk2MTcKK2NvczAwMDYgY29zIC0xLjk0MDIxODE2MzA2OTQ1NTcgLTIuOTc1MTg1NzM5Mjg5MTIxNyAtPiAtMy41NDY1NDU5Mjk3OTcwOTg1IC05LjExMTkxNjM1ODYyODIyNDgKK2NvczAwMDcgY29zIC0zLjMxMTgzMjAyOTAxOTE2MTYgLTAuODc4NzEzMDI5MDkyODYxNDIgLT4gLTEuMzkxMTUyODYzNjU2NTQ5OCAwLjE2ODc4MTQxNTE3MzkxNzAxCitjb3MwMDA4IGNvcyAtNC45NTQwNDA0NjIzMzc2ODcyIC0wLjU3OTQ5MjMyMjM5MDI2ODI3IC0+IDAuMjgwNjI0NDU1ODY1NTIwNjUgMC41OTQ2Nzg2MTMwODUwODAwOAorY29zMDAwOSBjb3MgLTAuNDUzNzQ1ODQzMTYyNDUwMjYgMS4zOTUwMjgzNDQ4MzczOTM1IC0+IDEuOTI0NzY2NTU3NDI5MDU3OCAwLjgzMDA0NTcyMjA0NzYxMTA3Citjb3MwMDEwIGNvcyAtMC40MjU3ODE3MjA0MDE3Njg0MyAxLjI3MTU4ODE2MTU0MTMwNDkgLT4gMS43NTE3MTYxNDU5NDg5MTQ4IDAuNjc4NjM5MDI2OTczNjMzMzIKK2NvczAwMTEgY29zIC0wLjEzODYyOTg1MzU0MzAwMTM2IDAuNDM1ODc2MzU4Nzc2NzAzMjggLT4gMS4wODU5ODgwMjkwMzYxOTEyIDAuMDYyMTU3NTQ4MTQ2NjcyMjcyCitjb3MwMDEyIGNvcyAtMC4xMTA3MzIyMTMwODk2NjU4NCA5LjkzODQwODIzMDczMjY0NzVlLTE1IC0+IDAuOTkzODc1NDUwNDA3MjI5NDcgMS4wOTgyNTQzMjY0MDY1NDc5ZS0xNQorY29zMDAxMyBjb3MgLTEuNTAyNzYzMzY2MjA1NDYyM2UtMDcgMC4wMDY5NjY4MDYwMjQ5OTU1NDk4IC0+IDEuMDAwMDI0MjY4MjkxMjQxMiAxLjA0Njk1NDU1NjU2NjA5OTVlLTA5Citjb3MwMDE0IGNvcyA0Ljk3Mjg2NDU0OTA1MDMwNTIgLTAuMDAwMjc0Nzk4MDg4NjA5NTI4MjIgLT4gMC4yNTc1NDAxMTczMTk3NTUwMSAtMC4wMDAyNjU1Mjg0OTU0OTA4MzE4NgorY29zMDAxNSBjb3MgNy44MTk2OTMwMzQ4NjcxOSAtMC43OTYyMTUyMzQ0NTg3ODc4MyAtPiAwLjA0NTczNDg4MjUwMTU4NTA2MyAwLjg4MjUzMTM5OTMzMDgyOTkxCitjb3MwMDE2IGNvcyAwLjEzMjcyNDIxODgwNzY2NzE2IC0wLjc0NjY4NDQ1MzA4NzE4MjAxIC0+IDEuMjgwNjAxMjI0NDQzMjg0NyAwLjEwODI1MzczMjY3NDM3MDA1Citjb3MwMDE3IGNvcyA0LjIzOTY1MjE5ODU5NzMyNzQgLTIuMjE3ODg0ODM4MDg4NDg4MSAtPiAtMi4xMTY1MTE3MDU3MDU2ODU1IC00LjA0MTY0OTI0NDQ2NDE0MDEKK2NvczAwMTggY29zIDEuMTYyMjIwNjYyNDkyNzI5NiAtMC41MDQwMDExNTQ2MTE5NzA4MSAtPiAwLjQ0ODg0MDcyNjEzMzcwMzc5IDAuNDgyMzQ2OTkxNTAzNDMxOAorY29zMDAxOSBjb3MgMS42Mjg3NzI4NjQ2MjA4ODRlLTA4IDAuNTgyMDU3MDU0Mjg5NzkyODIgLT4gMS4xNzQyMzE5OTk1NzkxNDM1IC0xLjAwMjQ4Mzk0ODE5NTY2MDRlLTA4Citjb3MwMDIwIGNvcyAyLjYzODUyMTI2MDYxMTEyNDEgMi45ODg2MTA3MTAwOTM3Mjk2IC0+IC04LjcyMDk0NzU5MjcxNjE0MTcgLTQuNzc0ODM1MjEwNzE5OTc5NgorY29zMDAyMSBjb3MgNC44MDQ4Mzc1MjYzNzc1MjU2IDAuMDA2MjI0ODg1Mjg5ODUxNTY1OCAtPiAwLjA5MjMxODcwMjAxNTg0NjI0MyAwLjAwNjE5ODM0MzA0MjIzMDYxNDIKK2NvczAwMjIgY29zIDcuOTkxNDUxNTQzMzg1ODUxNSAwLjcxNjU5OTY2NjE1NTAxNDM2IC0+IC0wLjE3Mzc1NDM5OTA2OTM2NTY2IC0wLjc3MjE3MDQzNTI3Mjk0NTgyCitjb3MwMDIzIGNvcyAwLjQ1MTI0MzUxMTUyNTQwMjI2IDEuNjk5MjY5Mzk5MzgxMjE1OCAtPiAyLjU0MzQ3Nzk0ODk3MjIzNyAtMS4xNTI4MTkzNjk0ODc1NDc3CisKKy0tIHNwZWNpYWwgdmFsdWVzCitjb3MxMDAwIGNvcyAtMC4wIDAuMCAtPiAxLjAgMC4wCitjb3MxMDAxIGNvcyAtaW5mIDAuMCAtPiBuYW4gMC4wIGludmFsaWQgaWdub3JlLWltYWctc2lnbgorY29zMTAwMiBjb3MgbmFuIDAuMCAtPiBuYW4gMC4wIGlnbm9yZS1pbWFnLXNpZ24KK2NvczEwMDMgY29zIC1pbmYgMi4yOTk5OTk5OTk5OTk5OTk4IC0+IG5hbiBuYW4gaW52YWxpZAorY29zMTAwNCBjb3MgbmFuIDIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuCitjb3MxMDA1IGNvcyAtMC4wIGluZiAtPiBpbmYgMC4wCitjb3MxMDA2IGNvcyAtMS4zOTk5OTk5OTk5OTk5OTk5IGluZiAtPiBpbmYgaW5mCitjb3MxMDA3IGNvcyAtMi43OTk5OTk5OTk5OTk5OTk4IGluZiAtPiAtaW5mIGluZgorY29zMTAwOCBjb3MgLTQuMjAwMDAwMDAwMDAwMDAwMiBpbmYgLT4gLWluZiAtaW5mCitjb3MxMDA5IGNvcyAtNS41OTk5OTk5OTk5OTk5OTk2IGluZiAtPiBpbmYgLWluZgorY29zMTAxMCBjb3MgLTcuMCBpbmYgLT4gaW5mIGluZgorY29zMTAxMSBjb3MgLWluZiBpbmYgLT4gaW5mIG5hbiBpbnZhbGlkIGlnbm9yZS1yZWFsLXNpZ24KK2NvczEwMTIgY29zIG5hbiBpbmYgLT4gaW5mIG5hbgorY29zMTAxMyBjb3MgLTAuMCBuYW4gLT4gbmFuIDAuMCBpZ25vcmUtaW1hZy1zaWduCitjb3MxMDE0IGNvcyAtMi4yOTk5OTk5OTk5OTk5OTk4IG5hbiAtPiBuYW4gbmFuCitjb3MxMDE1IGNvcyAtaW5mIG5hbiAtPiBuYW4gbmFuCitjb3MxMDE2IGNvcyBuYW4gbmFuIC0+IG5hbiBuYW4KK2NvczEwMTcgY29zIDAuMCAwLjAgLT4gMS4wIC0wLjAKK2NvczEwMTggY29zIGluZiAwLjAgLT4gbmFuIDAuMCBpbnZhbGlkIGlnbm9yZS1pbWFnLXNpZ24KK2NvczEwMTkgY29zIGluZiAyLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbiBpbnZhbGlkCitjb3MxMDIwIGNvcyAwLjAgaW5mIC0+IGluZiAtMC4wCitjb3MxMDIxIGNvcyAxLjM5OTk5OTk5OTk5OTk5OTkgaW5mIC0+IGluZiAtaW5mCitjb3MxMDIyIGNvcyAyLjc5OTk5OTk5OTk5OTk5OTggaW5mIC0+IC1pbmYgLWluZgorY29zMTAyMyBjb3MgNC4yMDAwMDAwMDAwMDAwMDAyIGluZiAtPiAtaW5mIGluZgorY29zMTAyNCBjb3MgNS41OTk5OTk5OTk5OTk5OTk2IGluZiAtPiBpbmYgaW5mCitjb3MxMDI1IGNvcyA3LjAgaW5mIC0+IGluZiAtaW5mCitjb3MxMDI2IGNvcyBpbmYgaW5mIC0+IGluZiBuYW4gaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCitjb3MxMDI3IGNvcyAwLjAgbmFuIC0+IG5hbiAwLjAgaWdub3JlLWltYWctc2lnbgorY29zMTAyOCBjb3MgMi4yOTk5OTk5OTk5OTk5OTk4IG5hbiAtPiBuYW4gbmFuCitjb3MxMDI5IGNvcyBpbmYgbmFuIC0+IG5hbiBuYW4KK2NvczEwMzAgY29zIDAuMCAtMC4wIC0+IDEuMCAwLjAKK2NvczEwMzEgY29zIGluZiAtMC4wIC0+IG5hbiAwLjAgaW52YWxpZCBpZ25vcmUtaW1hZy1zaWduCitjb3MxMDMyIGNvcyBuYW4gLTAuMCAtPiBuYW4gMC4wIGlnbm9yZS1pbWFnLXNpZ24KK2NvczEwMzMgY29zIGluZiAtMi4yOTk5OTk5OTk5OTk5OTk4IC0+IG5hbiBuYW4gaW52YWxpZAorY29zMTAzNCBjb3MgbmFuIC0yLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbgorY29zMTAzNSBjb3MgMC4wIC1pbmYgLT4gaW5mIDAuMAorY29zMTAzNiBjb3MgMS4zOTk5OTk5OTk5OTk5OTk5IC1pbmYgLT4gaW5mIGluZgorY29zMTAzNyBjb3MgMi43OTk5OTk5OTk5OTk5OTk4IC1pbmYgLT4gLWluZiBpbmYKK2NvczEwMzggY29zIDQuMjAwMDAwMDAwMDAwMDAwMiAtaW5mIC0+IC1pbmYgLWluZgorY29zMTAzOSBjb3MgNS41OTk5OTk5OTk5OTk5OTk2IC1pbmYgLT4gaW5mIC1pbmYKK2NvczEwNDAgY29zIDcuMCAtaW5mIC0+IGluZiBpbmYKK2NvczEwNDEgY29zIGluZiAtaW5mIC0+IGluZiBuYW4gaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCitjb3MxMDQyIGNvcyBuYW4gLWluZiAtPiBpbmYgbmFuCitjb3MxMDQzIGNvcyAtMC4wIC0wLjAgLT4gMS4wIC0wLjAKK2NvczEwNDQgY29zIC1pbmYgLTAuMCAtPiBuYW4gMC4wIGludmFsaWQgaWdub3JlLWltYWctc2lnbgorY29zMTA0NSBjb3MgLWluZiAtMi4yOTk5OTk5OTk5OTk5OTk4IC0+IG5hbiBuYW4gaW52YWxpZAorY29zMTA0NiBjb3MgLTAuMCAtaW5mIC0+IGluZiAtMC4wCitjb3MxMDQ3IGNvcyAtMS4zOTk5OTk5OTk5OTk5OTk5IC1pbmYgLT4gaW5mIC1pbmYKK2NvczEwNDggY29zIC0yLjc5OTk5OTk5OTk5OTk5OTggLWluZiAtPiAtaW5mIC1pbmYKK2NvczEwNDkgY29zIC00LjIwMDAwMDAwMDAwMDAwMDIgLWluZiAtPiAtaW5mIGluZgorY29zMTA1MCBjb3MgLTUuNTk5OTk5OTk5OTk5OTk5NiAtaW5mIC0+IGluZiBpbmYKK2NvczEwNTEgY29zIC03LjAgLWluZiAtPiBpbmYgLWluZgorY29zMTA1MiBjb3MgLWluZiAtaW5mIC0+IGluZiBuYW4gaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCisKKworLS0tLS0tLS0tLS0tLS0tCistLSBzaW46IFNpbmUgLS0KKy0tLS0tLS0tLS0tLS0tLQorCistLSB6ZXJvcworc2luMDAwMCBzaW4gMC4wIDAuMCAtPiAwLjAgMC4wCitzaW4wMDAxIHNpbiAwLjAgLTAuMCAtPiAwLjAgLTAuMAorc2luMDAwMiBzaW4gLTAuMCAwLjAgLT4gLTAuMCAwLjAKK3NpbjAwMDMgc2luIC0wLjAgLTAuMCAtPiAtMC4wIC0wLjAKKworLS0gcmFuZG9tIGlucHV0cworc2luMDAwNCBzaW4gLTAuMTg2OTE4MjkxNjMxNjM3NTkgLTAuNzQzODg3NDE5ODU1MDcwMzQgLT4gLTAuMjM5NjYzNjczMzc3MzQ0NCAtMC44MDAyMzIzMTEwMTg1Njc1MQorc2luMDAwNSBzaW4gLTAuNDUxMjc0NTM3MDI0NTkxNTggLTQ2MS44MTMzOTkyMDcxNjE2NCAtPiAtNy45NzIyMjk5MzMxMDc3ODc3ZSsxOTkgLTEuNjQ1MDIwNTgxMTAwNDYyOGUrMjAwCitzaW4wMDA2IHNpbiAtMC40NzY2OTIyODM0NTc2ODkyMSAtMi43MzY5OTM2NTY0OTg3NTE0IC0+IC0zLjU1NzIzODAyMjI2NzEyNCAtNi44MzA4MDMwNzcxMjI2NjE1CitzaW4wMDA3IHNpbiAtMC4zMTAyNDI4NTUyNTk1MDg1NyAtMS40ODY5MjE5OTM5MTg4Mjk2IC0+IC0wLjcwOTcyNjc2MDQ3MTc1MjA5IC0xLjk5ODUwMjk2MzU0MjY4MzkKK3NpbjAwMDggc2luIC00LjQxOTQ1NzM0MDcwMjU2MDggLTEuNDA1OTk5MjEwOTg5Mjg4IC0+IDIuMDcwMjQ4MDgwMDgwMjY4NSAwLjU1MzYyMjUwNzkyMTgwNjAxCitzaW4wMDA5IHNpbiAtMS43ODEwODMyMDQ2NDM0ODk4ZS0wNSAwLjAwMTY0Mzk1NTUzODQzNzkwODMgLT4gLTEuNzgxMDg1NjExMzE4NTI2MWUtMDUgMC4wMDE2NDM5NTYyNzg2NjY4Mzc1CitzaW4wMDEwIHNpbiAtMC44MjAwMDE3ODc0ODk3NjY2IDAuNjE3MjQ4NzY4ODc3NzE5MjkgLT4gLTAuODc0OTA3ODE5NTk0ODg2NSAwLjQ0ODM1Mjk1NTUwOTg3NzU4CitzaW4wMDExIHNpbiAtMS40NTM2NTAyODA2MTA3MTE0IDAuNjM5OTg1NzU1MzQxNTA0MTUgLT4gLTEuMjAzNTcwOTkyOTQzNzY3OSAwLjA4MDAxMjE4NzQ4OTE2MzcwOAorc2luMDAxMiBzaW4gLTIuMjY1MzQxMjE1NTUwNjA3OSAwLjEzMTcyNzYwNjg1NTgzNzI5IC0+IC0wLjc3NTAyMDkzODA5MTkwNDMxIC0wLjA4NDU1NDQyNjg2ODIyOTUzMgorc2luMDAxMyBzaW4gLTAuMDI2MTM5ODMwNjk0OTE4NTggMC4xODQwNDc2NjU5Nzc3NjA3MyAtPiAtMC4wMjY1ODA3Nzg4NjMxMjc5NDMgMC4xODUwMjUyNTM5NjczNTY0Mgorc2luMDAxNCBzaW4gMS41NzQzMDY1MDAxMDU0NjE3IC0wLjUzMTI1NTc0MjcyNjQyMDI5IC0+IDEuMTQ0NDU5NjMzMjA5MjcyNSAwLjAwMTk1Mzc1OTgwOTkzNTIwNzcKK3NpbjAwMTUgc2luIDcuMzgzMzEwMTc5MTI4MzI4OWUtMjAgLTAuMTY0NTMyMjEzMjQyMzYyMTcgLT4gNy40ODM0NzIwNjc0Mzc5NDI5ZS0yMCAtMC4xNjUyNzU1NTY0NjQ2NjkxNQorc2luMDAxNiBzaW4gMC4zNDc2MzgzNDY0MTI1NDAzOCAtMi44Mzc3NDE2NDIxMDg5NTY1IC0+IDIuOTE4ODgzNTQxNTA0NjYzIC04LjAwMDI3MTgwNTMyNTAyMjQKK3NpbjAwMTcgc2luIDAuMDc3MTA1Nzg1MTgwNDIxNTYzIC0wLjA5MDA1NjAyNzMxNjIwMDY3NCAtPiAwLjA3NzM0MTk3MzgxNDQ3MTMwNCAtMC4wODk5MDk4NjkzODA1MjQ1ODcKK3NpbjAwMTggc2luIDMuOTA2MzIyNzc5ODE0MjMyOWUtMTcgLTAuMDU5NTQwOTg2NTQyOTU1MjQgLT4gMy45MTMyNDkwMzQ4OTU2NTEyZS0xNyAtMC4wNTk1NzYxNzI4NTk4MzczNTEKK3NpbjAwMTkgc2luIDAuNTczMzM5MTc5MzI1NDQ1OTggOC43Nzg1MjIxNDMwNTk0Njk2ZS0wNiAtPiAwLjU0MjQ0MDI5MzM4MzAyOTM1IDcuMzc0Nzg2OTEyNTMwMTM2OGUtMDYKK3NpbjAwMjAgc2luIDAuMDI0ODYxNzIyODE2NTEzMTY5IDAuMzMwNDQ2MjA3NTYxMTg1MTUgLT4gMC4wMjYyMjg4MDEzNjk2NTEgMC4zMzYzODg5NjcxNTcwNjg5CitzaW4wMDIxIHNpbiAxLjQzNDI3MjczODc0OTI2NzEgMC44MTM2MTg4OTc5MDI4NDM0NyAtPiAxLjMzNzA5NjAwNjA5NDc5MjMgMC4xMjMzNjEzNzk2MTM4NzE2Mworc2luMDAyMiBzaW4gMS4xNTE4MDg3MzU0NDAzNzI1IDQuODU5NzIzNTk2NjE1MDU1OCAtPiA1OC45MTkxNDE5ODk2MDMwNDEgMjYuMjM3MDAzNDAzNzU4ODUyCitzaW4wMDIzIHNpbiAwLjAwMDg3NzczMDc4NDA2NjQ5MTkyIDM0Ljc5MjM3OTIxMTMxMjA5NSAtPiA1NjU1NDgxNDU1NjkuMzgyNDUgNjQ0MzI5Njg1ODIyNzAwLjYyCisKKy0tIHNwZWNpYWwgdmFsdWVzCitzaW4xMDAwIHNpbiAtMC4wIDAuMCAtPiAtMC4wIDAuMAorc2luMTAwMSBzaW4gLWluZiAwLjAgLT4gbmFuIDAuMCBpbnZhbGlkIGlnbm9yZS1pbWFnLXNpZ24KK3NpbjEwMDIgc2luIG5hbiAwLjAgLT4gbmFuIDAuMCBpZ25vcmUtaW1hZy1zaWduCitzaW4xMDAzIHNpbiAtaW5mIDIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuIGludmFsaWQKK3NpbjEwMDQgc2luIG5hbiAyLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbgorc2luMTAwNSBzaW4gLTAuMCBpbmYgLT4gLTAuMCBpbmYKK3NpbjEwMDYgc2luIC0xLjM5OTk5OTk5OTk5OTk5OTkgaW5mIC0+IC1pbmYgaW5mCitzaW4xMDA3IHNpbiAtMi43OTk5OTk5OTk5OTk5OTk4IGluZiAtPiAtaW5mIC1pbmYKK3NpbjEwMDggc2luIC00LjIwMDAwMDAwMDAwMDAwMDIgaW5mIC0+IGluZiAtaW5mCitzaW4xMDA5IHNpbiAtNS41OTk5OTk5OTk5OTk5OTk2IGluZiAtPiBpbmYgaW5mCitzaW4xMDEwIHNpbiAtNy4wIGluZiAtPiAtaW5mIGluZgorc2luMTAxMSBzaW4gLWluZiBpbmYgLT4gbmFuIGluZiBpbnZhbGlkIGlnbm9yZS1pbWFnLXNpZ24KK3NpbjEwMTIgc2luIG5hbiBpbmYgLT4gbmFuIGluZiBpZ25vcmUtaW1hZy1zaWduCitzaW4xMDEzIHNpbiAtMC4wIG5hbiAtPiAtMC4wIG5hbgorc2luMTAxNCBzaW4gLTIuMjk5OTk5OTk5OTk5OTk5OCBuYW4gLT4gbmFuIG5hbgorc2luMTAxNSBzaW4gLWluZiBuYW4gLT4gbmFuIG5hbgorc2luMTAxNiBzaW4gbmFuIG5hbiAtPiBuYW4gbmFuCitzaW4xMDE3IHNpbiAwLjAgMC4wIC0+IDAuMCAwLjAKK3NpbjEwMTggc2luIGluZiAwLjAgLT4gbmFuIDAuMCBpbnZhbGlkIGlnbm9yZS1pbWFnLXNpZ24KK3NpbjEwMTkgc2luIGluZiAyLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbiBpbnZhbGlkCitzaW4xMDIwIHNpbiAwLjAgaW5mIC0+IDAuMCBpbmYKK3NpbjEwMjEgc2luIDEuMzk5OTk5OTk5OTk5OTk5OSBpbmYgLT4gaW5mIGluZgorc2luMTAyMiBzaW4gMi43OTk5OTk5OTk5OTk5OTk4IGluZiAtPiBpbmYgLWluZgorc2luMTAyMyBzaW4gNC4yMDAwMDAwMDAwMDAwMDAyIGluZiAtPiAtaW5mIC1pbmYKK3NpbjEwMjQgc2luIDUuNTk5OTk5OTk5OTk5OTk5NiBpbmYgLT4gLWluZiBpbmYKK3NpbjEwMjUgc2luIDcuMCBpbmYgLT4gaW5mIGluZgorc2luMTAyNiBzaW4gaW5mIGluZiAtPiBuYW4gaW5mIGludmFsaWQgaWdub3JlLWltYWctc2lnbgorc2luMTAyNyBzaW4gMC4wIG5hbiAtPiAwLjAgbmFuCitzaW4xMDI4IHNpbiAyLjI5OTk5OTk5OTk5OTk5OTggbmFuIC0+IG5hbiBuYW4KK3NpbjEwMjkgc2luIGluZiBuYW4gLT4gbmFuIG5hbgorc2luMTAzMCBzaW4gMC4wIC0wLjAgLT4gMC4wIC0wLjAKK3NpbjEwMzEgc2luIGluZiAtMC4wIC0+IG5hbiAwLjAgaW52YWxpZCBpZ25vcmUtaW1hZy1zaWduCitzaW4xMDMyIHNpbiBuYW4gLTAuMCAtPiBuYW4gMC4wIGlnbm9yZS1pbWFnLXNpZ24KK3NpbjEwMzMgc2luIGluZiAtMi4yOTk5OTk5OTk5OTk5OTk4IC0+IG5hbiBuYW4gaW52YWxpZAorc2luMTAzNCBzaW4gbmFuIC0yLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbgorc2luMTAzNSBzaW4gMC4wIC1pbmYgLT4gMC4wIC1pbmYKK3NpbjEwMzYgc2luIDEuMzk5OTk5OTk5OTk5OTk5OSAtaW5mIC0+IGluZiAtaW5mCitzaW4xMDM3IHNpbiAyLjc5OTk5OTk5OTk5OTk5OTggLWluZiAtPiBpbmYgaW5mCitzaW4xMDM4IHNpbiA0LjIwMDAwMDAwMDAwMDAwMDIgLWluZiAtPiAtaW5mIGluZgorc2luMTAzOSBzaW4gNS41OTk5OTk5OTk5OTk5OTk2IC1pbmYgLT4gLWluZiAtaW5mCitzaW4xMDQwIHNpbiA3LjAgLWluZiAtPiBpbmYgLWluZgorc2luMTA0MSBzaW4gaW5mIC1pbmYgLT4gbmFuIGluZiBpbnZhbGlkIGlnbm9yZS1pbWFnLXNpZ24KK3NpbjEwNDIgc2luIG5hbiAtaW5mIC0+IG5hbiBpbmYgaWdub3JlLWltYWctc2lnbgorc2luMTA0MyBzaW4gLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorc2luMTA0NCBzaW4gLWluZiAtMC4wIC0+IG5hbiAwLjAgaW52YWxpZCBpZ25vcmUtaW1hZy1zaWduCitzaW4xMDQ1IHNpbiAtaW5mIC0yLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbiBpbnZhbGlkCitzaW4xMDQ2IHNpbiAtMC4wIC1pbmYgLT4gLTAuMCAtaW5mCitzaW4xMDQ3IHNpbiAtMS4zOTk5OTk5OTk5OTk5OTk5IC1pbmYgLT4gLWluZiAtaW5mCitzaW4xMDQ4IHNpbiAtMi43OTk5OTk5OTk5OTk5OTk4IC1pbmYgLT4gLWluZiBpbmYKK3NpbjEwNDkgc2luIC00LjIwMDAwMDAwMDAwMDAwMDIgLWluZiAtPiBpbmYgaW5mCitzaW4xMDUwIHNpbiAtNS41OTk5OTk5OTk5OTk5OTk2IC1pbmYgLT4gaW5mIC1pbmYKK3NpbjEwNTEgc2luIC03LjAgLWluZiAtPiAtaW5mIC1pbmYKK3NpbjEwNTIgc2luIC1pbmYgLWluZiAtPiBuYW4gaW5mIGludmFsaWQgaWdub3JlLWltYWctc2lnbgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLQorLS0gdGFuOiBUYW5nZW50IC0tCistLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gemVyb3MKK3RhbjAwMDAgdGFuIDAuMCAwLjAgLT4gMC4wIDAuMAordGFuMDAwMSB0YW4gMC4wIC0wLjAgLT4gMC4wIC0wLjAKK3RhbjAwMDIgdGFuIC0wLjAgMC4wIC0+IC0wLjAgMC4wCit0YW4wMDAzIHRhbiAtMC4wIC0wLjAgLT4gLTAuMCAtMC4wCisKKy0tIHJhbmRvbSBpbnB1dHMKK3RhbjAwMDQgdGFuIC0wLjU2Mzc4NTYxODMzODYxMDc0IC0xLjcxMTAyNzYyMzcxODc2NjRlKzczIC0+IC0wLjAgLTEuMAordGFuMDAwNSB0YW4gLTMuNTQ1MTYzMzk5MzQ3MTkxNWUtMTIgLTIuODU1NDcxODYzNTY0MDU5IC0+IC00LjY2MjI0NDEzMDQ4ODk1NzVlLTE0IC0wLjk5MzQwMjczODQzMDkzOTUxCit0YW4wMDA2IHRhbiAtMi41MDI0NDI3MTk2Mzg2OTYgLTAuMjY3NDIyMzQzOTA1MDQyMjEgLT4gMC42NjczNTIxNTI1Mjk5NDk5NSAtMC4zOTA3ODk5NzkzNTQyMDk1NgordGFuMDAwNyB0YW4gLTAuODc2Mzk1OTc3MjAzNzEzNjUgLTU1LjU4NjIyNTUyMzI4MDIwNiAtPiAtMS4wMjg1MjY0NTY1OTQ4MTc2ZS00OCAtMS4wCit0YW4wMDA4IHRhbiAtMC4wMTU3ODM4Njk1OTY0MjcyNDMgLTUyMC4wNTk0NDQzNjAzOTI3MiAtPiAtMC4wIC0xLjAKK3RhbjAwMDkgdGFuIC0wLjg0NjQzNTQ5OTkwNzI1MTY0IDIuMDc0OTA5NzkzNTM5NjM0MyAtPiAtMC4wMzE0MTI2NjE2NzY5NTk1NzMgMS4wMDMzNTQ4NDc5NTI2NzY0Cit0YW4wMDEwIHRhbiAtMC40MzYxMzc5MjI0ODU1OTY0NiA4LjEwODI3NDE2Mjk0NTgwNTkgLT4gLTEuMzg3OTg0ODQ0NDY0NDU5M2UtMDcgMC45OTk5OTk4ODM0NDIyNDAxMQordGFuMDAxMSB0YW4gLTEuMDgyMDkwNjM2NzgzMzExNCAwLjI4NTcxODY4OTkyNDgwMjQ4IC0+IC0xLjM2MjI0ODU3Mzc5MzY1MzYgMC45OTA4OTI2OTM3Nzk3MTI0NQordGFuMDAxMiB0YW4gLTEuMTQ3Nzg1OTU4MDIyMDA4NCAxLjkwMjE2MzcwMDI3MDgwNDEgLT4gLTAuMDM0MzQ4NDUwMDQyMDcxMTk2IDEuMDI5Mzk1NDA5NzkwMTY4NwordGFuMDAxMyB0YW4gLTAuMTI0NjU1NDMxNzY5NTM0MDkgMy4wNjA2ODUxMDE2MzQ0ODE1ZS0wNSAtPiAtMC4xMjUzMDUxNDI5MDM4NzM0MyAzLjEwODc0MjA3Njk5NDU0NzllLTA1Cit0YW4wMDE0IHRhbiAzLjc1ODI4NDg3MTc1MjUzNDMgLTY5Mjc4NzAyMC40NDAzODkzOSAtPiAwLjAgLTEuMAordGFuMDAxNSB0YW4gMi4yMzIxOTY3NjU1MTQyMTc2ZS0wNiAtMTAuMDkwMDY5NDIzMDA4MTY5IC0+IDEuNTM2OTg0NjEyMDYyMjY0M2UtMTQgLTAuOTk5OTk5OTk2NTU3MjM3NTkKK3RhbjAwMTYgdGFuIDAuODgzNzExNzIzOTAyNDUwMTIgLTEuMTYzNTA1MzYzMDEzMjgyMyAtPiAwLjE5NzA1MDE3MTE4NjI1ODg5IC0xLjAxOTY0NTIyODA4NDMxMjkKK3RhbjAwMTcgdGFuIDIuMTM0NzQxNDIzMTg0OTI2NyAtMS45MzExMzM5OTYwNDE2ODMxIC0+IC0wLjAzODY2MzU3NjkxNTk4MjUyNCAtMS4wMTc0Mzk5OTkzOTgwNzc4Cit0YW4wMDE4IHRhbiA1LjkwMjc5NDUyNTU4OTk5NzQgLTIuMTU3NDE5NTY4NDYwNzEzNWUtMTgzIC0+IC0wLjM5OTg2NTkxNTM5MjgxNDk2IC0yLjUwMjM3NTMxNjc5NzY5MTVlLTE4MwordGFuMDAxOSB0YW4gMC40NDgxMTQ4OTQ5MDgwNTM2MiA2ODMyMTYwNzU2NzAuMDc1NTYgLT4gMC4wIDEuMAordGFuMDAyMCB0YW4gNC4xNDU5NzY2Mzk2MDY4MzI1IDEyLjUyMzAxNzIwNTYwNTc1NiAtPiAyLjQwMjI1MTQ3NTg5ODgwNjhlLTExIDEuMDAwMDAwMDAwMDExMjQ5OQordGFuMDAyMSB0YW4gMS43ODA5NjE3OTY4NDQzMjcyIDEuNTA1MjM4MTcwMjg1MzM3OSAtPiAtMC4wNDQwNjYyMjIxMTg5NDY5MDMgMS4wOTMyNjg0NTE3NzAyNzc4Cit0YW4wMDIyIHRhbiAxLjE2MTUzMTM5MDA4ODA1NzcgMS43OTU2Mjk4NzI4NjQ3MTA3IC0+IDAuMDQxNzkzMTg2ODI2MzkwMzYyIDEuMDM3NTMzOTU0NjAzNDc5MgordGFuMDAyMyB0YW4gMC4wNjcwMTQ3Nzk0Nzc5MDg5NDUgNS44NTE3MzYxNTc3NDU3MDk3IC0+IDIuMjA4ODYzOTc1NDgwMDAzNGUtMDYgMC45OTk5ODM2MTgyNDIwMDYxCisKKy0tIHNwZWNpYWwgdmFsdWVzCit0YW4xMDAwIHRhbiAtMC4wIDAuMCAtPiAtMC4wIDAuMAordGFuMTAwMSB0YW4gLWluZiAwLjAgLT4gbmFuIG5hbiBpbnZhbGlkCit0YW4xMDAyIHRhbiAtaW5mIDIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuIGludmFsaWQKK3RhbjEwMDMgdGFuIG5hbiAwLjAgLT4gbmFuIG5hbgordGFuMTAwNCB0YW4gbmFuIDIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuCit0YW4xMDA1IHRhbiAtMC4wIGluZiAtPiAtMC4wIDEuMAordGFuMTAwNiB0YW4gLTAuNjk5OTk5OTk5OTk5OTk5OTYgaW5mIC0+IC0wLjAgMS4wCit0YW4xMDA3IHRhbiAtMS4zOTk5OTk5OTk5OTk5OTk5IGluZiAtPiAtMC4wIDEuMAordGFuMTAwOCB0YW4gLTIuMTAwMDAwMDAwMDAwMDAwMSBpbmYgLT4gMC4wIDEuMAordGFuMTAwOSB0YW4gLTIuNzk5OTk5OTk5OTk5OTk5OCBpbmYgLT4gMC4wIDEuMAordGFuMTAxMCB0YW4gLTMuNSBpbmYgLT4gLTAuMCAxLjAKK3RhbjEwMTEgdGFuIC1pbmYgaW5mIC0+IC0wLjAgMS4wIGlnbm9yZS1yZWFsLXNpZ24KK3RhbjEwMTIgdGFuIG5hbiBpbmYgLT4gLTAuMCAxLjAgaWdub3JlLXJlYWwtc2lnbgordGFuMTAxMyB0YW4gLTAuMCBuYW4gLT4gLTAuMCBuYW4KK3RhbjEwMTQgdGFuIC0yLjI5OTk5OTk5OTk5OTk5OTggbmFuIC0+IG5hbiBuYW4KK3RhbjEwMTUgdGFuIC1pbmYgbmFuIC0+IG5hbiBuYW4KK3RhbjEwMTYgdGFuIG5hbiBuYW4gLT4gbmFuIG5hbgordGFuMTAxNyB0YW4gMC4wIDAuMCAtPiAwLjAgMC4wCit0YW4xMDE4IHRhbiBpbmYgMC4wIC0+IG5hbiBuYW4gaW52YWxpZAordGFuMTAxOSB0YW4gaW5mIDIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuIGludmFsaWQKK3RhbjEwMjAgdGFuIDAuMCBpbmYgLT4gMC4wIDEuMAordGFuMTAyMSB0YW4gMC42OTk5OTk5OTk5OTk5OTk5NiBpbmYgLT4gMC4wIDEuMAordGFuMTAyMiB0YW4gMS4zOTk5OTk5OTk5OTk5OTk5IGluZiAtPiAwLjAgMS4wCit0YW4xMDIzIHRhbiAyLjEwMDAwMDAwMDAwMDAwMDEgaW5mIC0+IC0wLjAgMS4wCit0YW4xMDI0IHRhbiAyLjc5OTk5OTk5OTk5OTk5OTggaW5mIC0+IC0wLjAgMS4wCit0YW4xMDI1IHRhbiAzLjUgaW5mIC0+IDAuMCAxLjAKK3RhbjEwMjYgdGFuIGluZiBpbmYgLT4gLTAuMCAxLjAgaWdub3JlLXJlYWwtc2lnbgordGFuMTAyNyB0YW4gMC4wIG5hbiAtPiAwLjAgbmFuCit0YW4xMDI4IHRhbiAyLjI5OTk5OTk5OTk5OTk5OTggbmFuIC0+IG5hbiBuYW4KK3RhbjEwMjkgdGFuIGluZiBuYW4gLT4gbmFuIG5hbgordGFuMTAzMCB0YW4gMC4wIC0wLjAgLT4gMC4wIC0wLjAKK3RhbjEwMzEgdGFuIGluZiAtMC4wIC0+IG5hbiBuYW4gaW52YWxpZAordGFuMTAzMiB0YW4gaW5mIC0yLjI5OTk5OTk5OTk5OTk5OTggLT4gbmFuIG5hbiBpbnZhbGlkCit0YW4xMDMzIHRhbiBuYW4gLTAuMCAtPiBuYW4gbmFuCit0YW4xMDM0IHRhbiBuYW4gLTIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuCit0YW4xMDM1IHRhbiAwLjAgLWluZiAtPiAwLjAgLTEuMAordGFuMTAzNiB0YW4gMC42OTk5OTk5OTk5OTk5OTk5NiAtaW5mIC0+IDAuMCAtMS4wCit0YW4xMDM3IHRhbiAxLjM5OTk5OTk5OTk5OTk5OTkgLWluZiAtPiAwLjAgLTEuMAordGFuMTAzOCB0YW4gMi4xMDAwMDAwMDAwMDAwMDAxIC1pbmYgLT4gLTAuMCAtMS4wCit0YW4xMDM5IHRhbiAyLjc5OTk5OTk5OTk5OTk5OTggLWluZiAtPiAtMC4wIC0xLjAKK3RhbjEwNDAgdGFuIDMuNSAtaW5mIC0+IDAuMCAtMS4wCit0YW4xMDQxIHRhbiBpbmYgLWluZiAtPiAtMC4wIC0xLjAgaWdub3JlLXJlYWwtc2lnbgordGFuMTA0MiB0YW4gbmFuIC1pbmYgLT4gLTAuMCAtMS4wIGlnbm9yZS1yZWFsLXNpZ24KK3RhbjEwNDMgdGFuIC0wLjAgLTAuMCAtPiAtMC4wIC0wLjAKK3RhbjEwNDQgdGFuIC1pbmYgLTAuMCAtPiBuYW4gbmFuIGludmFsaWQKK3RhbjEwNDUgdGFuIC1pbmYgLTIuMjk5OTk5OTk5OTk5OTk5OCAtPiBuYW4gbmFuIGludmFsaWQKK3RhbjEwNDYgdGFuIC0wLjAgLWluZiAtPiAtMC4wIC0xLjAKK3RhbjEwNDcgdGFuIC0wLjY5OTk5OTk5OTk5OTk5OTk2IC1pbmYgLT4gLTAuMCAtMS4wCit0YW4xMDQ4IHRhbiAtMS4zOTk5OTk5OTk5OTk5OTk5IC1pbmYgLT4gLTAuMCAtMS4wCit0YW4xMDQ5IHRhbiAtMi4xMDAwMDAwMDAwMDAwMDAxIC1pbmYgLT4gMC4wIC0xLjAKK3RhbjEwNTAgdGFuIC0yLjc5OTk5OTk5OTk5OTk5OTggLWluZiAtPiAwLjAgLTEuMAordGFuMTA1MSB0YW4gLTMuNSAtaW5mIC0+IC0wLjAgLTEuMAordGFuMTA1MiB0YW4gLWluZiAtaW5mIC0+IC0wLjAgLTEuMCBpZ25vcmUtcmVhbC1zaWduCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSByZWN0OiBDb252ZXJzaW9uIGZyb20gcG9sYXIgY29vcmRpbmF0ZXMgdG8gcmVjdGFuZ3VsYXIgY29vcmRpbmF0ZXMgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0KKy0tIEZvciBjbWF0aC5yZWN0LCB3ZSBjYW4gdXNlIHRoZSBzYW1lIHRlc3RjYXNlIHN5bnRheCBhcyBmb3IgdGhlCistLSBjb21wbGV4IC0+IGNvbXBsZXggZnVuY3Rpb25zIGFib3ZlLCBidXQgaGVyZSB0aGUgaW5wdXQgYXJndW1lbnRzCistLSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYSBwYWlyIG9mIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgcmF0aGVyCistLSB0aGFuIHRoZSByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMgb2YgYSBjb21wbGV4IG51bWJlci4KKy0tCistLSBIZXJlIGFyZSB0aGUgJ3NwaXJpdCBvZiBDOTknIHJ1bGVzIGZvciByZWN0LiAgRmlyc3QsIHRoZSBzaG9ydAorLS0gdmVyc2lvbjoKKy0tCistLSAgICByZWN0KHgsIHQpID0gZXhwKGxvZyh4KStpdCkgZm9yIHBvc2l0aXZlLXNpZ25lZCB4CistLSAgICByZWN0KHgsIHQpID0gLWV4cChsb2coLXgpK2l0KSBmb3IgbmVnYXRpdmUtc2lnbmVkIHgKKy0tICAgIHJlY3QobmFuLCB0KSA9IGV4cChuYW4gKyBpdCksIGV4Y2VwdCB0aGF0IGluIHJlY3QobmFuLCArLTApIHRoZQorLS0gICAgICBzaWduIG9mIHRoZSBpbWFnaW5hcnkgcGFydCBpcyB1bnNwZWNpZmllZC4KKy0tCistLSBhbmQgbm93IHRoZSBsb25nIHZlcnNpb246CistLQorLS0gICByZWN0KHgsIC10KSA9IGNvbmoocmVjdCh4LCB0KSkgZm9yIGFsbCB4IGFuZCB0CistLSAgIHJlY3QoLXgsIHQpID0gLXJlY3QoeCwgdCkgZm9yIGFsbCB4IGFuZCB0CistLSAgIHJlY3QoKzAsICswKSByZXR1cm5zICswICsgaTAKKy0tICAgcmVjdCgrMCwgaW5mKSByZXR1cm5zICstIDAgKy0gaTAsIHdoZXJlIHRoZSBzaWducyBvZiB0aGUgcmVhbCBhbmQKKy0tICAgICBpbWFnaW5hcnkgcGFydHMgYXJlIHVuc3BlY2lmaWVkLgorLS0gICByZWN0KHgsIGluZikgcmV0dXJucyBOYU4gKyBpIE5hTiBhbmQgcmFpc2VzIHRoZSAiaW52YWxpZCIKKy0tICAgICBmbG9hdGluZy1wb2ludCBleGNlcHRpb24sIGZvciBmaW5pdGUgbm9uemVybyB4LgorLS0gICByZWN0KGluZiwgaW5mKSByZXR1cm5zICstaW5mICsgaSBOYU4gYW5kIHJhaXNlcyB0aGUgImludmFsaWQiCistLSAgICAgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uICh3aGVyZSB0aGUgc2lnbiBvZiB0aGUgcmVhbCBwYXJ0IG9mIHRoZQorLS0gICAgIHJlc3VsdCBpcyB1bnNwZWNpZmllZCkuCistLSAgIHJlY3QoaW5mLCArMCkgcmV0dXJucyBpbmYraTAKKy0tICAgcmVjdChpbmYsIHgpIHJldHVybnMgaW5mKmNpcyh4KSwgZm9yIGZpbml0ZSBub256ZXJvIHgKKy0tICAgcmVjdChpbmYsIE5hTikgcmV0dXJucyArLWluZitpIE5hTiwgd2hlcmUgdGhlIHNpZ24gb2YgdGhlIHJlYWwgcGFydAorLS0gICAgIG9mIHRoZSByZXN1bHQgaXMgdW5zcGVjaWZpZWQuCistLSAgIHJlY3QoTmFOLCB4KSByZXR1cm5zIE5hTiArIGkgTmFOIGZvciBhbGwgbm9uemVybyBudW1iZXJzIChpbmNsdWRpbmcKKy0tICAgICBpbmZpbml0aWVzKSB4CistLSAgIHJlY3QoTmFOLCAwKSByZXR1cm5zIE5hTiArLSBpMCwgd2hlcmUgdGhlIHNpZ24gb2YgdGhlIGltYWdpbmFyeQorLS0gICAgIHBhcnQgaXMgdW5zcGVjaWZpZWQKKy0tICAgcmVjdChOYU4sIE5hTikgcmV0dXJucyBOYU4gKyBpIE5hTgorLS0gICByZWN0KHgsIE5hTikgcmV0dXJucyBOYU4gKyBpIE5hTiBmb3IgZmluaXRlIG5vbnplcm8geAorLS0gICByZWN0KCswLCBOYU4pIHJldHVybiArLTAgKy0gaTAsIHdoZXJlIHRoZSBzaWducyBvZiB0aGUgcmVhbCBhbmQKKy0tICAgICBpbWFnaW5hcnkgcGFydHMgYXJlIHVuc3BlY2lmaWVkLgorCistLSBzcGVjaWFsIHZhbHVlcworcmVjdDEwMDAgcmVjdCAwLjAgMC4wIC0+IDAuMCAwLjAKK3JlY3QxMDAxIHJlY3QgMC4wIGluZiAtPiAwLjAgMC4wICAgICAgICBpZ25vcmUtcmVhbC1zaWduIGlnbm9yZS1pbWFnLXNpZ24KK3JlY3QxMDAyIHJlY3QgMi4zIGluZiAtPiBuYW4gbmFuICAgICAgICBpbnZhbGlkCityZWN0MTAwMyByZWN0IGluZiBpbmYgLT4gaW5mIG5hbiAgICAgICAgaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCityZWN0MTAwNCByZWN0IGluZiAwLjAgLT4gaW5mIDAuMAorcmVjdDEwMDUgcmVjdCBpbmYgMS40IC0+IGluZiBpbmYKK3JlY3QxMDA2IHJlY3QgaW5mIDIuOCAtPiAtaW5mIGluZgorcmVjdDEwMDcgcmVjdCBpbmYgNC4yIC0+IC1pbmYgLWluZgorcmVjdDEwMDggcmVjdCBpbmYgNS42IC0+IGluZiAtaW5mCityZWN0MTAwOSByZWN0IGluZiA3LjAgLT4gaW5mIGluZgorcmVjdDEwMTAgcmVjdCBuYW4gMC4wIC0+IG5hbiAwLjAgICAgICAgIGlnbm9yZS1pbWFnLXNpZ24KK3JlY3QxMDExIHJlY3QgbmFuIDIuMyAtPiBuYW4gbmFuCityZWN0MTAxMiByZWN0IG5hbiBpbmYgLT4gbmFuIG5hbgorcmVjdDEwMTMgcmVjdCBuYW4gbmFuIC0+IG5hbiBuYW4KK3JlY3QxMDE0IHJlY3QgaW5mIG5hbiAtPiBpbmYgbmFuICAgICAgICBpZ25vcmUtcmVhbC1zaWduCityZWN0MTAxNSByZWN0IDIuMyBuYW4gLT4gbmFuIG5hbgorcmVjdDEwMTYgcmVjdCAwLjAgbmFuIC0+IDAuMCAwLjAgICAgICAgIGlnbm9yZS1yZWFsLXNpZ24gaWdub3JlLWltYWctc2lnbgorcmVjdDEwMTcgcmVjdCAwLjAgLTAuMCAtPiAwLjAgLTAuMAorcmVjdDEwMTggcmVjdCAwLjAgLWluZiAtPiAwLjAgMC4wICAgICAgIGlnbm9yZS1yZWFsLXNpZ24gaWdub3JlLWltYWctc2lnbgorcmVjdDEwMTkgcmVjdCAyLjMgLWluZiAtPiBuYW4gbmFuICAgICAgIGludmFsaWQKK3JlY3QxMDIwIHJlY3QgaW5mIC1pbmYgLT4gaW5mIG5hbiAgICAgICBpbnZhbGlkIGlnbm9yZS1yZWFsLXNpZ24KK3JlY3QxMDIxIHJlY3QgaW5mIC0wLjAgLT4gaW5mIC0wLjAKK3JlY3QxMDIyIHJlY3QgaW5mIC0xLjQgLT4gaW5mIC1pbmYKK3JlY3QxMDIzIHJlY3QgaW5mIC0yLjggLT4gLWluZiAtaW5mCityZWN0MTAyNCByZWN0IGluZiAtNC4yIC0+IC1pbmYgaW5mCityZWN0MTAyNSByZWN0IGluZiAtNS42IC0+IGluZiBpbmYKK3JlY3QxMDI2IHJlY3QgaW5mIC03LjAgLT4gaW5mIC1pbmYKK3JlY3QxMDI3IHJlY3QgbmFuIC0wLjAgLT4gbmFuIDAuMCAgICAgICBpZ25vcmUtaW1hZy1zaWduCityZWN0MTAyOCByZWN0IG5hbiAtMi4zIC0+IG5hbiBuYW4KK3JlY3QxMDI5IHJlY3QgbmFuIC1pbmYgLT4gbmFuIG5hbgorcmVjdDEwMzAgcmVjdCAtMC4wIDAuMCAtPiAtMC4wIC0wLjAKK3JlY3QxMDMxIHJlY3QgLTAuMCBpbmYgLT4gMC4wIDAuMCAgICAgICBpZ25vcmUtcmVhbC1zaWduIGlnbm9yZS1pbWFnLXNpZ24KK3JlY3QxMDMyIHJlY3QgLTIuMyBpbmYgLT4gbmFuIG5hbiAgICAgICBpbnZhbGlkCityZWN0MTAzMyByZWN0IC1pbmYgaW5mIC0+IC1pbmYgbmFuICAgICAgaW52YWxpZCBpZ25vcmUtcmVhbC1zaWduCityZWN0MTAzNCByZWN0IC1pbmYgMC4wIC0+IC1pbmYgLTAuMAorcmVjdDEwMzUgcmVjdCAtaW5mIDEuNCAtPiAtaW5mIC1pbmYKK3JlY3QxMDM2IHJlY3QgLWluZiAyLjggLT4gaW5mIC1pbmYKK3JlY3QxMDM3IHJlY3QgLWluZiA0LjIgLT4gaW5mIGluZgorcmVjdDEwMzggcmVjdCAtaW5mIDUuNiAtPiAtaW5mIGluZgorcmVjdDEwMzkgcmVjdCAtaW5mIDcuMCAtPiAtaW5mIC1pbmYKK3JlY3QxMDQwIHJlY3QgLWluZiBuYW4gLT4gaW5mIG5hbiAgICAgICBpZ25vcmUtcmVhbC1zaWduCityZWN0MTA0MSByZWN0IC0yLjMgbmFuIC0+IG5hbiBuYW4KK3JlY3QxMDQyIHJlY3QgLTAuMCBuYW4gLT4gMC4wIDAuMCAgICAgICBpZ25vcmUtcmVhbC1zaWduIGlnbm9yZS1pbWFnLXNpZ24KK3JlY3QxMDQzIHJlY3QgLTAuMCAtMC4wIC0+IC0wLjAgMC4wCityZWN0MTA0NCByZWN0IC0wLjAgLWluZiAtPiAwLjAgMC4wICAgICAgaWdub3JlLXJlYWwtc2lnbiBpZ25vcmUtaW1hZy1zaWduCityZWN0MTA0NSByZWN0IC0yLjMgLWluZiAtPiBuYW4gbmFuICAgICAgaW52YWxpZAorcmVjdDEwNDYgcmVjdCAtaW5mIC1pbmYgLT4gLWluZiBuYW4gICAgIGludmFsaWQgaWdub3JlLXJlYWwtc2lnbgorcmVjdDEwNDcgcmVjdCAtaW5mIC0wLjAgLT4gLWluZiAwLjAKK3JlY3QxMDQ4IHJlY3QgLWluZiAtMS40IC0+IC1pbmYgaW5mCityZWN0MTA0OSByZWN0IC1pbmYgLTIuOCAtPiBpbmYgaW5mCityZWN0MTA1MCByZWN0IC1pbmYgLTQuMiAtPiBpbmYgLWluZgorcmVjdDEwNTEgcmVjdCAtaW5mIC01LjYgLT4gLWluZiAtaW5mCityZWN0MTA1MiByZWN0IC1pbmYgLTcuMCAtPiAtaW5mIGluZgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBwb2xhcjogQ29udmVyc2lvbiBmcm9tIHJlY3Rhbmd1bGFyIGNvb3JkaW5hdGVzIHRvIHBvbGFyIGNvb3JkaW5hdGVzIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLQorLS0gRm9yIGNtYXRoLnBvbGFyLCB3ZSBjYW4gdXNlIHRoZSBzYW1lIHRlc3RjYXNlIHN5bnRheCBhcyBmb3IgdGhlCistLSBjb21wbGV4IC0+IGNvbXBsZXggZnVuY3Rpb25zIGFib3ZlLCBidXQgaGVyZSB0aGUgb3V0cHV0IGFyZ3VtZW50cworLS0gc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGEgcGFpciBvZiBmbG9hdGluZy1wb2ludCBudW1iZXJzIHJhdGhlcgorLS0gdGhhbiB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIGEgY29tcGxleCBudW1iZXIuCistLQorLS0gQW5uZXggRyBvZiB0aGUgQzk5IHN0YW5kYXJkIGRlc2NyaWJlcyBmdWxseSBib3RoIHRoZSByZWFsIGFuZAorLS0gaW1hZ2luYXJ5IHBhcnRzIG9mIHBvbGFyIChhcyBjYWJzIGFuZCBjYXJnLCByZXNwZWN0aXZlbHksIHdoaWNoIGluIHR1cm4KKy0tIGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIHRoZSBmdW5jdGlvbnMgaHlwb3QgYW5kIGF0YW4yKS4KKworLS0gb3ZlcmZsb3cKK3BvbGFyMDEwMCBwb2xhciAxLjRlMzA4IDEuNGUzMDggLT4gaW5mIDAuNzg1Mzk4MTYzMzk3NDQ4MjggICAgICBvdmVyZmxvdworCistLSBzcGVjaWFsIHZhbHVlcworcG9sYXIxMDAwIHBvbGFyIDAuMCAwLjAgLT4gMC4wIDAuMAorcG9sYXIxMDAxIHBvbGFyIDAuMCAtMC4wIC0+IDAuMCAtMC4wCitwb2xhcjEwMDIgcG9sYXIgLTAuMCAwLjAgLT4gMC4wIDMuMTQxNTkyNjUzNTg5NzkzMQorcG9sYXIxMDAzIHBvbGFyIC0wLjAgLTAuMCAtPiAwLjAgLTMuMTQxNTkyNjUzNTg5NzkzMQorcG9sYXIxMDA0IHBvbGFyIGluZiAwLjAgLT4gaW5mIDAuMAorcG9sYXIxMDA1IHBvbGFyIGluZiAyLjMgLT4gaW5mIDAuMAorcG9sYXIxMDA2IHBvbGFyIGluZiBpbmYgLT4gaW5mIDAuNzg1Mzk4MTYzMzk3NDQ4MjgKK3BvbGFyMTAwNyBwb2xhciAyLjMgaW5mIC0+IGluZiAxLjU3MDc5NjMyNjc5NDg5NjYKK3BvbGFyMTAwOCBwb2xhciAwLjAgaW5mIC0+IGluZiAxLjU3MDc5NjMyNjc5NDg5NjYKK3BvbGFyMTAwOSBwb2xhciAtMC4wIGluZiAtPiBpbmYgMS41NzA3OTYzMjY3OTQ4OTY2Citwb2xhcjEwMTAgcG9sYXIgLTIuMyBpbmYgLT4gaW5mIDEuNTcwNzk2MzI2Nzk0ODk2NgorcG9sYXIxMDExIHBvbGFyIC1pbmYgaW5mIC0+IGluZiAyLjM1NjE5NDQ5MDE5MjM0NDgKK3BvbGFyMTAxMiBwb2xhciAtaW5mIDIuMyAtPiBpbmYgMy4xNDE1OTI2NTM1ODk3OTMxCitwb2xhcjEwMTMgcG9sYXIgLWluZiAwLjAgLT4gaW5mIDMuMTQxNTkyNjUzNTg5NzkzMQorcG9sYXIxMDE0IHBvbGFyIC1pbmYgLTAuMCAtPiBpbmYgLTMuMTQxNTkyNjUzNTg5NzkzMQorcG9sYXIxMDE1IHBvbGFyIC1pbmYgLTIuMyAtPiBpbmYgLTMuMTQxNTkyNjUzNTg5NzkzMQorcG9sYXIxMDE2IHBvbGFyIC1pbmYgLWluZiAtPiBpbmYgLTIuMzU2MTk0NDkwMTkyMzQ0OAorcG9sYXIxMDE3IHBvbGFyIC0yLjMgLWluZiAtPiBpbmYgLTEuNTcwNzk2MzI2Nzk0ODk2NgorcG9sYXIxMDE4IHBvbGFyIC0wLjAgLWluZiAtPiBpbmYgLTEuNTcwNzk2MzI2Nzk0ODk2NgorcG9sYXIxMDE5IHBvbGFyIDAuMCAtaW5mIC0+IGluZiAtMS41NzA3OTYzMjY3OTQ4OTY2Citwb2xhcjEwMjAgcG9sYXIgMi4zIC1pbmYgLT4gaW5mIC0xLjU3MDc5NjMyNjc5NDg5NjYKK3BvbGFyMTAyMSBwb2xhciBpbmYgLWluZiAtPiBpbmYgLTAuNzg1Mzk4MTYzMzk3NDQ4MjgKK3BvbGFyMTAyMiBwb2xhciBpbmYgLTIuMyAtPiBpbmYgLTAuMAorcG9sYXIxMDIzIHBvbGFyIGluZiAtMC4wIC0+IGluZiAtMC4wCitwb2xhcjEwMjQgcG9sYXIgbmFuIC1pbmYgLT4gaW5mIG5hbgorcG9sYXIxMDI1IHBvbGFyIG5hbiAtMi4zIC0+IG5hbiBuYW4KK3BvbGFyMTAyNiBwb2xhciBuYW4gLTAuMCAtPiBuYW4gbmFuCitwb2xhcjEwMjcgcG9sYXIgbmFuIDAuMCAtPiBuYW4gbmFuCitwb2xhcjEwMjggcG9sYXIgbmFuIDIuMyAtPiBuYW4gbmFuCitwb2xhcjEwMjkgcG9sYXIgbmFuIGluZiAtPiBpbmYgbmFuCitwb2xhcjEwMzAgcG9sYXIgbmFuIG5hbiAtPiBuYW4gbmFuCitwb2xhcjEwMzEgcG9sYXIgaW5mIG5hbiAtPiBpbmYgbmFuCitwb2xhcjEwMzIgcG9sYXIgMi4zIG5hbiAtPiBuYW4gbmFuCitwb2xhcjEwMzMgcG9sYXIgMC4wIG5hbiAtPiBuYW4gbmFuCitwb2xhcjEwMzQgcG9sYXIgLTAuMCBuYW4gLT4gbmFuIG5hbgorcG9sYXIxMDM1IHBvbGFyIC0yLjMgbmFuIC0+IG5hbiBuYW4KK3BvbGFyMTAzNiBwb2xhciAtaW5mIG5hbiAtPiBpbmYgbmFuCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvY3Vyc2VzX3Rlc3RzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L2N1cnNlc190ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGVkYmJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2N1cnNlc190ZXN0cy5weQpAQCAtMCwwICsxLDQ2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgJElkOiBuY3Vyc2VzLnB5IDM2NTU5IDIwMDQtMDctMTggMDU6NTY6MDlaIHRpbV9vbmUgJAorIworIyBJbnRlcmFjdGl2ZSB0ZXN0IHN1aXRlIGZvciB0aGUgY3Vyc2VzIG1vZHVsZS4KKyMgVGhpcyBzY3JpcHQgZGlzcGxheXMgdmFyaW91cyB0aGluZ3MgYW5kIHRoZSB1c2VyIHNob3VsZCB2ZXJpZnkgd2hldGhlcgorIyB0aGV5IGRpc3BsYXkgY29ycmVjdGx5LgorIworCitpbXBvcnQgY3Vyc2VzCitmcm9tIGN1cnNlcyBpbXBvcnQgdGV4dHBhZAorCitkZWYgdGVzdF90ZXh0cGFkKHN0ZHNjciwgaW5zZXJ0X21vZGU9RmFsc2UpOgorICAgIG5jb2xzLCBubGluZXMgPSA4LCAzCisgICAgdWx5LCB1bHggPSAzLCAyCisgICAgaWYgaW5zZXJ0X21vZGU6CisgICAgICAgIG1vZGUgPSAnaW5zZXJ0IG1vZGUnCisgICAgZWxzZToKKyAgICAgICAgbW9kZSA9ICdvdmVyd3JpdGUgbW9kZScKKworICAgIHN0ZHNjci5hZGRzdHIodWx5LTMsIHVseCwgIlVzZSBDdHJsLUcgdG8gZW5kIGVkaXRpbmcgKCVzKS4iICUgbW9kZSkKKyAgICBzdGRzY3IuYWRkc3RyKHVseS0yLCB1bHgsICJCZSBzdXJlIHRvIHRyeSB0eXBpbmcgaW4gdGhlIGxvd2VyLXJpZ2h0IGNvcm5lci4iKQorICAgIHdpbiA9IGN1cnNlcy5uZXd3aW4obmxpbmVzLCBuY29scywgdWx5LCB1bHgpCisgICAgdGV4dHBhZC5yZWN0YW5nbGUoc3Rkc2NyLCB1bHktMSwgdWx4LTEsIHVseSArIG5saW5lcywgdWx4ICsgbmNvbHMpCisgICAgc3Rkc2NyLnJlZnJlc2goKQorCisgICAgYm94ID0gdGV4dHBhZC5UZXh0Ym94KHdpbiwgaW5zZXJ0X21vZGUpCisgICAgY29udGVudHMgPSBib3guZWRpdCgpCisgICAgc3Rkc2NyLmFkZHN0cih1bHkrbmNvbHMrMiwgMCwgIlRleHQgZW50ZXJlZCBpbiB0aGUgYm94XG4iKQorICAgIHN0ZHNjci5hZGRzdHIocmVwcihjb250ZW50cykpCisgICAgc3Rkc2NyLmFkZHN0cignXG4nKQorICAgIHN0ZHNjci5hZGRzdHIoJ1ByZXNzIGFueSBrZXknKQorICAgIHN0ZHNjci5nZXRjaCgpCisKKyAgICBmb3IgaSBpbiByYW5nZSgzKToKKyAgICAgICAgc3Rkc2NyLm1vdmUodWx5K25jb2xzKzIgKyBpLCAwKQorICAgICAgICBzdGRzY3IuY2xydG9lb2woKQorCitkZWYgbWFpbihzdGRzY3IpOgorICAgIHN0ZHNjci5jbGVhcigpCisgICAgdGVzdF90ZXh0cGFkKHN0ZHNjciwgRmFsc2UpCisgICAgdGVzdF90ZXh0cGFkKHN0ZHNjciwgVHJ1ZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGN1cnNlcy53cmFwcGVyKG1haW4pCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGF0YS9SRUFETUUgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGF0YS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmOGM5YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kYXRhL1JFQURNRQpAQCAtMCwwICsxLDIgQEAKK1RoaXMgZW1wdHkgZGlyZWN0b3J5IHNlcnZlcyBhcyBkZXN0aW5hdGlvbiBmb3IgdGVtcG9yYXJ5IGZpbGVzCitjcmVhdGVkIGJ5IHNvbWUgdGVzdHMuCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2Ficy5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9hYnMuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWY3M2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9hYnMuZGVjVGVzdApAQCAtMCwwICsxLDE2MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBhYnMuZGVjVGVzdCAtLSBkZWNpbWFsIGFic29sdXRlIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIHByaW1hcmlseSB0ZXN0cyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBvcGVyYXRvci4KKy0tIEFkZGl0b24sIHN1YnRyYWN0aW9uLCByb3VuZGluZywgYW5kIG1vcmUgb3ZlcmZsb3dzIGFyZSB0ZXN0ZWQKKy0tIGVsc2V3aGVyZS4KKworcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworZXh0ZW5kZWQ6IDEKKworYWJzeDAwMSBhYnMgJzEnICAgICAgLT4gJzEnCithYnN4MDAyIGFicyAnLTEnICAgICAtPiAnMScKK2Fic3gwMDMgYWJzICcxLjAwJyAgIC0+ICcxLjAwJworYWJzeDAwNCBhYnMgJy0xLjAwJyAgLT4gJzEuMDAnCithYnN4MDA1IGFicyAnMCcgICAgICAtPiAnMCcKK2Fic3gwMDYgYWJzICcwLjAwJyAgIC0+ICcwLjAwJworYWJzeDAwNyBhYnMgJzAwLjAnICAgLT4gJzAuMCcKK2Fic3gwMDggYWJzICcwMC4wMCcgIC0+ICcwLjAwJworYWJzeDAwOSBhYnMgJzAwJyAgICAgLT4gJzAnCisKK2Fic3gwMTAgYWJzICctMicgICAgIC0+ICcyJworYWJzeDAxMSBhYnMgJzInICAgICAgLT4gJzInCithYnN4MDEyIGFicyAnLTIuMDAnICAtPiAnMi4wMCcKK2Fic3gwMTMgYWJzICcyLjAwJyAgIC0+ICcyLjAwJworYWJzeDAxNCBhYnMgJy0wJyAgICAgLT4gJzAnCithYnN4MDE1IGFicyAnLTAuMDAnICAtPiAnMC4wMCcKK2Fic3gwMTYgYWJzICctMDAuMCcgIC0+ICcwLjAnCithYnN4MDE3IGFicyAnLTAwLjAwJyAtPiAnMC4wMCcKK2Fic3gwMTggYWJzICctMDAnICAgIC0+ICcwJworCithYnN4MDIwIGFicyAnLTIwMDAwMDAnIC0+ICcyMDAwMDAwJworYWJzeDAyMSBhYnMgJzIwMDAwMDAnICAtPiAnMjAwMDAwMCcKK3ByZWNpc2lvbjogNworYWJzeDAyMiBhYnMgJy0yMDAwMDAwJyAtPiAnMjAwMDAwMCcKK2Fic3gwMjMgYWJzICcyMDAwMDAwJyAgLT4gJzIwMDAwMDAnCitwcmVjaXNpb246IDYKK2Fic3gwMjQgYWJzICctMjAwMDAwMCcgLT4gJzIuMDAwMDBFKzYnIFJvdW5kZWQKK2Fic3gwMjUgYWJzICcyMDAwMDAwJyAgLT4gJzIuMDAwMDBFKzYnIFJvdW5kZWQKK3ByZWNpc2lvbjogMworYWJzeDAyNiBhYnMgJy0yMDAwMDAwJyAtPiAnMi4wMEUrNicgUm91bmRlZAorYWJzeDAyNyBhYnMgJzIwMDAwMDAnICAtPiAnMi4wMEUrNicgUm91bmRlZAorCithYnN4MDMwIGFicyAnKzAuMScgICAgICAgICAgICAtPiAnMC4xJworYWJzeDAzMSBhYnMgJy0wLjEnICAgICAgICAgICAgLT4gJzAuMScKK2Fic3gwMzIgYWJzICcrMC4wMScgICAgICAgICAgIC0+ICcwLjAxJworYWJzeDAzMyBhYnMgJy0wLjAxJyAgICAgICAgICAgLT4gJzAuMDEnCithYnN4MDM0IGFicyAnKzAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnCithYnN4MDM1IGFicyAnLTAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnCithYnN4MDM2IGFicyAnKzAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnCithYnN4MDM3IGFicyAnLTAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnCithYnN4MDM4IGFicyAnKzAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInCithYnN4MDM5IGFicyAnLTAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKK3ByZWNpc2lvbjogOQorYWJzeDA0MCBhYnMgJzIuMScgICAgIC0+ICAnMi4xJworYWJzeDA0MSBhYnMgJy0xMDAnICAgIC0+ICAnMTAwJworYWJzeDA0MiBhYnMgJzEwMS41JyAgIC0+ICAnMTAxLjUnCithYnN4MDQzIGFicyAnLTEwMS41JyAgLT4gICcxMDEuNScKKworLS0gbW9yZSBmaXhlZCwgcG90ZW50aWFsIExIUyBzd2Fwcy9vdmVybGF5cyBpZiBkb25lIGJ5IHN1YnRyYWN0IDAKK3ByZWNpc2lvbjogOQorYWJzeDA2MCBhYnMgJy01NjI2N0UtMTAnICAtPiAnMC4wMDAwMDU2MjY3JworYWJzeDA2MSBhYnMgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycKK2Fic3gwNjIgYWJzICctNTYyNjdFLTInICAgLT4gJzU2Mi42NycKK2Fic3gwNjMgYWJzICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycKK2Fic3gwNjUgYWJzICctNTYyNjdFLTAnICAgLT4gJzU2MjY3JworCistLSBvdmVyZmxvdyB0ZXN0cworbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3ByZWNpc2lvbjogMworYWJzeDEyMCBhYnMgOS45OTlFKzk5OTk5OTk5OSAtPiBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93CitwcmVjaXNpb246IDMKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CithYnN4MjEwIGFicyAgMS4wMEUtOTk5ICAgICAgICAtPiAgIDEuMDBFLTk5OQorYWJzeDIxMSBhYnMgIDAuMUUtOTk5ICAgICAgICAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsCithYnN4MjEyIGFicyAgMC4xMEUtOTk5ICAgICAgICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwKK2Fic3gyMTMgYWJzICAwLjEwMEUtOTk5ICAgICAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCithYnN4MjE0IGFicyAgMC4wMUUtOTk5ICAgICAgICAtPiAgIDFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCithYnN4MjE1IGFicyAgMC45OTlFLTk5OSAgICAgICAtPiAgIDEuMDBFLTk5OSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWJzeDIxNiBhYnMgIDAuMDk5RS05OTkgICAgICAgLT4gICAxLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2Fic3gyMTcgYWJzICAwLjAwOUUtOTk5ICAgICAgIC0+ICAgMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithYnN4MjE4IGFicyAgMC4wMDFFLTk5OSAgICAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCithYnN4MjE5IGFicyAgMC4wMDA5RS05OTkgICAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCithYnN4MjIwIGFicyAgMC4wMDAxRS05OTkgICAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKK2Fic3gyMzAgYWJzIC0xLjAwRS05OTkgICAgICAgIC0+ICAgMS4wMEUtOTk5CithYnN4MjMxIGFicyAtMC4xRS05OTkgICAgICAgICAtPiAgIDFFLTEwMDAgICBTdWJub3JtYWwKK2Fic3gyMzIgYWJzIC0wLjEwRS05OTkgICAgICAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbAorYWJzeDIzMyBhYnMgLTAuMTAwRS05OTkgICAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQKK2Fic3gyMzQgYWJzIC0wLjAxRS05OTkgICAgICAgIC0+ICAgMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK2Fic3gyMzUgYWJzIC0wLjk5OUUtOTk5ICAgICAgIC0+ICAgMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithYnN4MjM2IGFicyAtMC4wOTlFLTk5OSAgICAgICAtPiAgIDEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWJzeDIzNyBhYnMgLTAuMDA5RS05OTkgICAgICAgLT4gICAxRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2Fic3gyMzggYWJzIC0wLjAwMUUtOTk5ICAgICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2Fic3gyMzkgYWJzIC0wLjAwMDlFLTk5OSAgICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2Fic3gyNDAgYWJzIC0wLjAwMDFFLTk5OSAgICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKKworLS0gbG9uZyBvcGVyYW5kIHRlc3RzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA5CithYnN4MzAxIGFicyAxMjM0NTY3ODAwMCAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAorYWJzeDMwMiBhYnMgMTIzNDU2NzgwMCAgIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorYWJzeDMwMyBhYnMgMTIzNDU2Nzg5MCAgIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAorYWJzeDMwNCBhYnMgMTIzNDU2Nzg5MSAgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCithYnN4MzA1IGFicyAxMjM0NTY3ODkwMSAgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCithYnN4MzA2IGFicyAxMjM0NTY3ODk2ICAgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAxNQorYWJzeDMyMSBhYnMgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwCithYnN4MzIyIGFicyAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMAorYWJzeDMyMyBhYnMgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTAKK2Fic3gzMjQgYWJzIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxCithYnN4MzI1IGFicyAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDEKK2Fic3gzMjYgYWJzIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2CisKKworLS0gU3BlY2lhbHMKK3ByZWNpc2lvbjogICA5CisKKy0tIHNwZWNpYWxzCithYnN4NTIwIGFicyAnSW5mJyAgICAtPiAnSW5maW5pdHknCithYnN4NTIxIGFicyAnLUluZicgICAtPiAnSW5maW5pdHknCithYnN4NTIyIGFicyAgIE5hTiAgICAtPiAgTmFOCithYnN4NTIzIGFicyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2Fic3g1MjQgYWJzICAgTmFOMjIgIC0+ICBOYU4yMgorYWJzeDUyNSBhYnMgIHNOYU4zMyAgLT4gIE5hTjMzIEludmFsaWRfb3BlcmF0aW9uCithYnN4NTI2IGFicyAgLU5hTjIyICAtPiAtTmFOMjIKK2Fic3g1MjcgYWJzIC1zTmFOMzMgIC0+IC1OYU4zMyBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCithYnN4OTAwIGFicyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9hZGQuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvYWRkLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2MWM0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvYWRkLmRlY1Rlc3QKQEAgLTAsMCArMSwyNzE2IEBACistLS0tLS0vY2FuY2VsbC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGFkZC5kZWNUZXN0IC0tIGRlY2ltYWwgYWRkaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKKworLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddCithZGR4MDAxIGFkZCAxICAgICAgIDEgICAgICAgLT4gIDIKK2FkZHgwMDIgYWRkIDIgICAgICAgMyAgICAgICAtPiAgNQorYWRkeDAwMyBhZGQgJzUuNzUnICAnMy4zJyAgIC0+ICA5LjA1CithZGR4MDA0IGFkZCAnNScgICAgICctMycgICAgLT4gIDIKK2FkZHgwMDUgYWRkICctNScgICAgJy0zJyAgICAtPiAgLTgKK2FkZHgwMDYgYWRkICctNycgICAgJzIuNScgICAtPiAgLTQuNQorYWRkeDAwNyBhZGQgJzAuNycgICAnMC4zJyAgIC0+ICAxLjAKK2FkZHgwMDggYWRkICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MAorYWRkeDAwOSBhZGQgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzIuMjM0NTY3ODknCithZGR4MDEwIGFkZCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcKKworYWRkeDAxMSBhZGQgJzAuNDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwMTIgYWRkICcwLjQ0NDQ0NDQ0NDAnICAnMC41NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCithZGR4MDEzIGFkZCAnMC40NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwMTQgYWRkICcwLjQ0NDQ0NDQ0NDQ5JyAgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwMTUgYWRkICcwLjQ0NDQ0NDQ0NDQ5OScgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwMTYgYWRkICcwLjQ0NDQ0NDQ0NDQ5OTknICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwMTcgYWRkICcwLjQ0NDQ0NDQ0NDUwMDAnICAnMCcgLT4gJzAuNDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwMTggYWRkICcwLjQ0NDQ0NDQ0NDUwMDEnICAnMCcgLT4gJzAuNDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwMTkgYWRkICcwLjQ0NDQ0NDQ0NDUwMScgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwMjAgYWRkICcwLjQ0NDQ0NDQ0NDUxJyAgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDAyMSBhZGQgMCAxIC0+IDEKK2FkZHgwMjIgYWRkIDEgMSAtPiAyCithZGR4MDIzIGFkZCAyIDEgLT4gMworYWRkeDAyNCBhZGQgMyAxIC0+IDQKK2FkZHgwMjUgYWRkIDQgMSAtPiA1CithZGR4MDI2IGFkZCA1IDEgLT4gNgorYWRkeDAyNyBhZGQgNiAxIC0+IDcKK2FkZHgwMjggYWRkIDcgMSAtPiA4CithZGR4MDI5IGFkZCA4IDEgLT4gOQorYWRkeDAzMCBhZGQgOSAxIC0+IDEwCisKKy0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cworYWRkeDAzMSBhZGQgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnCithZGR4MDMyIGFkZCAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScKK2FkZHgwMzMgYWRkICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJworYWRkeDAzNCBhZGQgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnCisKK2FkZHgwMzUgYWRkICc3MCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwMzYgYWRkICc3MDAnICAnMTAwMDBlKzknIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCithZGR4MDM3IGFkZCAnNzAwMCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwMzggYWRkICc3MDAwMCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDFFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwMzkgYWRkICc3MDAwMDAnICAnMTAwMDBlKzknIC0+ICcxLjAwMDAwMDA3RSsxMycgUm91bmRlZAorCistLSBzeW1tZXRyeToKK2FkZHgwNDAgYWRkICcxMDAwMGUrOScgICc3MCcgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwNDEgYWRkICcxMDAwMGUrOScgICc3MDAnIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCithZGR4MDQyIGFkZCAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwNDQgYWRkICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEuMDAwMDAwMDFFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgwNDUgYWRkICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxLjAwMDAwMDA3RSsxMycgUm91bmRlZAorCistLSBzYW1lLCBoaWdoZXIgcHJlY2lzaW9uCitwcmVjaXNpb246IDE1CithZGR4MDQ2IGFkZCAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3JworYWRkeDA0NyBhZGQgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnCithZGR4MDQ4IGFkZCAnMTAwMDBlKzknICAnNzAwJyAtPiAnMTAwMDAwMDAwMDA3MDAnCithZGR4MDQ5IGFkZCAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJworYWRkeDA1MCBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnCithZGR4MDUxIGFkZCAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMTAwMDAwMDA3MDAwMDAnCithZGR4MDUyIGFkZCAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzEwMDAwMDA3MDAwMDAwJworCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCithZGR4MDUzIGFkZCAnMTInICc3LjAwJyAtPiAnMTkuMDAnCithZGR4MDU0IGFkZCAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJworYWRkeDA1NSBhZGQgJzEuMycgJy0xLjMwJyAtPiAnMC4wMCcKK2FkZHgwNTYgYWRkICcxLjMnICctMi4wNycgLT4gJy0wLjc3JworYWRkeDA1NyBhZGQgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcKKworLS0gemVybyBwcmVzZXJ2YXRpb24KK3ByZWNpc2lvbjogNgorYWRkeDA2MCBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMS4wMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorYWRkeDA2MSBhZGQgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJworYWRkeDA2MiBhZGQgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnCithZGR4MDYzIGFkZCAxICcwLjAwMDAwMScgLT4gJzEuMDAwMDAnIEluZXhhY3QgUm91bmRlZAorYWRkeDA2NCBhZGQgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMCcgSW5leGFjdCBSb3VuZGVkCithZGR4MDY1IGFkZCAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0KK2FkZHgwNzAgYWRkIDEgIDAgICAgLT4gMQorYWRkeDA3MSBhZGQgMSAwLiAgICAtPiAxCithZGR4MDcyIGFkZCAxICAuMCAgIC0+IDEuMAorYWRkeDA3MyBhZGQgMSAwLjAgICAtPiAxLjAKK2FkZHgwNzQgYWRkIDEgMC4wMCAgLT4gMS4wMAorYWRkeDA3NSBhZGQgIDAgIDEgICAtPiAxCithZGR4MDc2IGFkZCAwLiAgMSAgIC0+IDEKK2FkZHgwNzcgYWRkICAuMCAxICAgLT4gMS4wCithZGR4MDc4IGFkZCAwLjAgMSAgIC0+IDEuMAorYWRkeDA3OSBhZGQgMC4wMCAxICAtPiAxLjAwCisKK3ByZWNpc2lvbjogOQorCistLSBzb21lIGNhcnJpZXMKK2FkZHgwODAgYWRkIDk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTkKK2FkZHgwODEgYWRkIDk5OTk5OTk5OSAxICAtPiAxLjAwMDAwMDAwRSs5IFJvdW5kZWQKK2FkZHgwODIgYWRkICA5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAKK2FkZHgwODMgYWRkICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMAorYWRkeDA4NCBhZGQgICAgOTk5OTk5IDEgIC0+IDEwMDAwMDAKK2FkZHgwODUgYWRkICAgICA5OTk5OSAxICAtPiAxMDAwMDAKK2FkZHgwODYgYWRkICAgICAgOTk5OSAxICAtPiAxMDAwMAorYWRkeDA4NyBhZGQgICAgICAgOTk5IDEgIC0+IDEwMDAKK2FkZHgwODggYWRkICAgICAgICA5OSAxICAtPiAxMDAKK2FkZHgwODkgYWRkICAgICAgICAgOSAxICAtPiAxMAorCisKKy0tIG1vcmUgTEhTIHN3YXBzCithZGR4MDkwIGFkZCAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKK2FkZHgwOTEgYWRkICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCithZGR4MDkyIGFkZCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCithZGR4MDkzIGFkZCAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKK2FkZHgwOTQgYWRkICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JworYWRkeDA5NSBhZGQgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCithZGR4MDk2IGFkZCAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKK2FkZHgwOTcgYWRkICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCithZGR4MDk4IGFkZCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJworYWRkeDA5OSBhZGQgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03JworYWRkeDEwMCBhZGQgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKK2FkZHgxMDEgYWRkICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKK2FkZHgxMDIgYWRkICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1JworYWRkeDEwMyBhZGQgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCithZGR4MTA0IGFkZCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCithZGR4MTA1IGFkZCAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJworYWRkeDEwNiBhZGQgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCithZGR4MTA3IGFkZCAnLTVFOCcgICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMCcKK2FkZHgxMDggYWRkICctNUU5JyAgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrOScgICBSb3VuZGVkCithZGR4MTA5IGFkZCAnLTVFMTAnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzEwJyAgUm91bmRlZAorYWRkeDExMCBhZGQgJy01RTExJyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwRSsxMScgIFJvdW5kZWQKK2FkZHgxMTEgYWRkICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrMTAwJyBSb3VuZGVkCisKKy0tIG1vcmUgUkhTIHN3YXBzCithZGR4MTEzIGFkZCAwICAnLTU2MjY3RS0xMCcgLT4gICctMC4wMDAwMDU2MjY3JworYWRkeDExNCBhZGQgMCAgJy01NjI2N0UtNicgIC0+ICAnLTAuMDU2MjY3JworYWRkeDExNiBhZGQgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnCithZGR4MTE3IGFkZCAwICAnLTU2MjY3RS00JyAgLT4gICctNS42MjY3JworYWRkeDExOSBhZGQgMCAgJy01NjI2N0UtMycgIC0+ICAnLTU2LjI2NycKK2FkZHgxMjAgYWRkIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnCithZGR4MTIxIGFkZCAwICAnLTU2MjY3RS0xJyAgLT4gICctNTYyNi43JworYWRkeDEyMiBhZGQgMCAgJy01NjI2N0UtMCcgIC0+ICAnLTU2MjY3JworYWRkeDEyMyBhZGQgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJworYWRkeDEyNCBhZGQgMCAgJy01RS03JyAgICAgIC0+ICAnLTVFLTcnCithZGR4MTI1IGFkZCAwICAnLTVFLTYnICAgICAgLT4gICctMC4wMDAwMDUnCithZGR4MTI2IGFkZCAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScKK2FkZHgxMjcgYWRkIDAgICctNUUtNCcgICAgICAtPiAgJy0wLjAwMDUnCithZGR4MTI4IGFkZCAwICAnLTVFLTEnICAgICAgLT4gICctMC41JworYWRkeDEyOSBhZGQgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnCithZGR4MTMwIGFkZCAwICAnLTVFMScgICAgICAgLT4gICctNTAnCithZGR4MTMxIGFkZCAwICAnLTVFNScgICAgICAgLT4gICctNTAwMDAwJworYWRkeDEzMiBhZGQgMCAgJy01RTgnICAgICAgIC0+ICAnLTUwMDAwMDAwMCcKK2FkZHgxMzMgYWRkIDAgICctNUU5JyAgICAgICAtPiAgJy01LjAwMDAwMDAwRSs5JyAgICBSb3VuZGVkCithZGR4MTM0IGFkZCAwICAnLTVFMTAnICAgICAgLT4gICctNS4wMDAwMDAwMEUrMTAnICAgUm91bmRlZAorYWRkeDEzNSBhZGQgMCAgJy01RTExJyAgICAgIC0+ICAnLTUuMDAwMDAwMDBFKzExJyAgIFJvdW5kZWQKK2FkZHgxMzYgYWRkIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCisKKy0tIHJlbGF0ZWQKK2FkZHgxMzcgYWRkICAxICAnMEUtMTInICAgICAgLT4gICcxLjAwMDAwMDAwJyAgUm91bmRlZAorYWRkeDEzOCBhZGQgLTEgICcwRS0xMicgICAgICAtPiAgJy0xLjAwMDAwMDAwJyBSb3VuZGVkCithZGR4MTM5IGFkZCAnMEUtMTInIDEgICAgICAgIC0+ICAnMS4wMDAwMDAwMCcgIFJvdW5kZWQKK2FkZHgxNDAgYWRkICcwRS0xMicgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMCcgUm91bmRlZAorYWRkeDE0MSBhZGQgMUUrNCAgICAwLjAwMDAgICAtPiAgJzEwMDAwLjAwMDAnCithZGR4MTQyIGFkZCAxRSs0ICAgIDAuMDAwMDAgIC0+ICAnMTAwMDAuMDAwMCcgIFJvdW5kZWQKK2FkZHgxNDMgYWRkIDAuMDAwICAgMUUrNSAgICAgLT4gICcxMDAwMDAuMDAwJworYWRkeDE0NCBhZGQgMC4wMDAwICAxRSs1ICAgICAtPiAgJzEwMDAwMC4wMDAnICBSb3VuZGVkCisKKy0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdCithZGR4MTQ2IGFkZCAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnCithZGR4MTQ3IGFkZCAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJworYWRkeDE0OCBhZGQgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcKK2FkZHgxNDkgYWRkICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcKK2FkZHgxNTAgYWRkICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnCithZGR4MTUxIGFkZCAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJworYWRkeDE1MiBhZGQgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJworYWRkeDE1MyBhZGQgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJworYWRkeDE1NCBhZGQgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJworYWRkeDE1NSBhZGQgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcKK2FkZHgxNTYgYWRkICczJyAgICAgJzMnICAgICAtPiAgJzYnCithZGR4MTU3IGFkZCAnMycgICAgICcrMycgICAgLT4gICc2JworYWRkeDE1OCBhZGQgJzMnICAgICAnLTMnICAgIC0+ICAnMCcKK2FkZHgxNTkgYWRkICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcKK2FkZHgxNjAgYWRkICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnCisKKy0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCitwcmVjaXNpb246IDE1CithZGR4MTYxIGFkZCAnMUUrMTInICctMScgICAgLT4gJzk5OTk5OTk5OTk5OScKK2FkZHgxNjIgYWRkICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKK2FkZHgxNjMgYWRkICcxLjExJyAgJzFFKzEyJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKK2FkZHgxNjQgYWRkICctMScgICAgJzFFKzEyJyAtPiAnOTk5OTk5OTk5OTk5JworYWRkeDE2NSBhZGQgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5JworYWRkeDE2NiBhZGQgJzdFKzEyJyAgJzEuMTEnIC0+ICc3MDAwMDAwMDAwMDAxLjExJworYWRkeDE2NyBhZGQgJzEuMTEnICAnN0UrMTInIC0+ICc3MDAwMDAwMDAwMDAxLjExJworYWRkeDE2OCBhZGQgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5JworCistLSAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDUgICAgICAxMjM0NTY3ODkwMTIzNDUgICAgICAxIDIzNDU2Nzg5MDEyMzQ1CithZGR4MTcwIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjMnIC0+ICcxLjAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxNzEgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU2MicgLT4gJzEuMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorYWRkeDE3MiBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTYxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCithZGR4MTczIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxNzQgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1OScgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorYWRkeDE3NSBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU4JyAtPiAnMS4wMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCithZGR4MTc2IGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTcnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxNzcgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NicgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2FkZHgxNzggYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5JworYWRkeDE3OSBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0JyAtPiAnMC45OTk5OTk5OTk5OTk5OTgnCithZGR4MTgwIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTMnIC0+ICcwLjk5OTk5OTk5OTk5OTk5NycKK2FkZHgxODEgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1MicgLT4gJzAuOTk5OTk5OTk5OTk5OTk2JworYWRkeDE4MiBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTUnCithZGR4MTgzIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5NCcKKworLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncworcHJlY2lzaW9uOiA5Cityb3VuZGluZzogaGFsZl91cAorYWRkeDIwMCBhZGQgJzEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JworYWRkeDIwMSBhZGQgJzEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMDIgYWRkICcxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjAzIGFkZCAnMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDIwNCBhZGQgJzEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMDUgYWRkICcxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjA2IGFkZCAnMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDIwNyBhZGQgJzEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMDggYWRkICcxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjA5IGFkZCAnMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDIxMCBhZGQgJzEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMTEgYWRkICcxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjEyIGFkZCAnMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDIxMyBhZGQgJzEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMTQgYWRkICcxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjE1IGFkZCAnMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDIxNiBhZGQgJzEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2NzkwJworYWRkeDIxNyBhZGQgJzEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMTggYWRkICcxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjE5IGFkZCAnMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCithZGR4MjIwIGFkZCAnMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTY3ODknCithZGR4MjIxIGFkZCAnMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDIyMiBhZGQgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMjMgYWRkICcxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjI0IGFkZCAnMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDIyNSBhZGQgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMjYgYWRkICcxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjI3IGFkZCAnMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDIyOCBhZGQgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMjkgYWRkICcxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjMwIGFkZCAnMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDIzMSBhZGQgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMzIgYWRkICcxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjMzIGFkZCAnMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDIzNCBhZGQgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMzUgYWRkICcxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjM2IGFkZCAnMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnCithZGR4MjM3IGFkZCAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDIzOCBhZGQgJzEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyMzkgYWRkICcxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorYWRkeDI0MCBhZGQgJzEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNDEgYWRkICcxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjQyIGFkZCAnMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorYWRkeDI1MCBhZGQgJzEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JworYWRkeDI1MSBhZGQgJzEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNTIgYWRkICcxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjUzIGFkZCAnMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDI1NCBhZGQgJzEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNTUgYWRkICcxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjU2IGFkZCAnMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDI1NyBhZGQgJzEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNTggYWRkICcxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjU5IGFkZCAnMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDI2MCBhZGQgJzEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNjEgYWRkICcxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjYyIGFkZCAnMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDI2MyBhZGQgJzEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNjQgYWRkICcxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4MjY1IGFkZCAnMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDI2NiBhZGQgJzEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2NzkwJworYWRkeDI2NyBhZGQgJzEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNjggYWRkICcxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjY5IGFkZCAnMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSBpbnB1dCBwcmVwYXJhdGlvbiB0ZXN0cyAob3BlcmFuZHMgc2hvdWxkIG5vdCBiZSByb3VuZGVkKQorcHJlY2lzaW9uOiAzCityb3VuZGluZzogaGFsZl91cAorCithZGR4MjcwIGFkZCAnMTIzNDU2Nzg5MDAwMDAnICA5OTk5OTk5OTk5OTk5IC0+ICAnMi4yM0UrMTMnIEluZXhhY3QgUm91bmRlZAorYWRkeDI3MSBhZGQgICc5OTk5OTk5OTk5OTk5JyAxMjM0NTY3ODkwMDAwMCAtPiAgJzIuMjNFKzEzJyBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDI3MiBhZGQgJzEyRSszJyAgJzM0NDQnICAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNzMgYWRkICcxMkUrMycgICczNDQ2JyAgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCithZGR4Mjc0IGFkZCAnMTJFKzMnICAnMzQ0OS45JyAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorYWRkeDI3NSBhZGQgJzEyRSszJyAgJzM0NTAuMCcgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyNzYgYWRkICcxMkUrMycgICczNDUwLjEnIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCithZGR4Mjc3IGFkZCAnMTJFKzMnICAnMzQ1NCcgICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorYWRkeDI3OCBhZGQgJzEyRSszJyAgJzM0NTYnICAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDI4MSBhZGQgJzM0NDQnICAgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyODIgYWRkICczNDQ2JyAgICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjgzIGFkZCAnMzQ0OS45JyAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorYWRkeDI4NCBhZGQgJzM0NTAuMCcgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyODUgYWRkICczNDUwLjEnICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCithZGR4Mjg2IGFkZCAnMzQ1NCcgICAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorYWRkeDI4NyBhZGQgJzM0NTYnICAgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZG93bgorYWRkeDI5MSBhZGQgJzM0NDQnICAgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyOTIgYWRkICczNDQ2JyAgICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCithZGR4MjkzIGFkZCAnMzQ0OS45JyAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorYWRkeDI5NCBhZGQgJzM0NTAuMCcgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgyOTUgYWRkICczNDUwLjEnICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCithZGR4Mjk2IGFkZCAnMzQ1NCcgICAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorYWRkeDI5NyBhZGQgJzM0NTYnICAgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKKworLS0gMSBpbiBsYXN0IHBsYWNlIHRlc3RzCityb3VuZGluZzogaGFsZl91cAorYWRkeDMwMSBhZGQgIC0xICAgMSAgICAgIC0+ICAgMAorYWRkeDMwMiBhZGQgICAwICAgMSAgICAgIC0+ICAgMQorYWRkeDMwMyBhZGQgICAxICAgMSAgICAgIC0+ICAgMgorYWRkeDMwNCBhZGQgIDEyICAgMSAgICAgIC0+ICAxMworYWRkeDMwNSBhZGQgIDk4ICAgMSAgICAgIC0+ICA5OQorYWRkeDMwNiBhZGQgIDk5ICAgMSAgICAgIC0+IDEwMAorYWRkeDMwNyBhZGQgMTAwICAgMSAgICAgIC0+IDEwMQorYWRkeDMwOCBhZGQgMTAxICAgMSAgICAgIC0+IDEwMgorYWRkeDMwOSBhZGQgIC0xICAtMSAgICAgIC0+ICAtMgorYWRkeDMxMCBhZGQgICAwICAtMSAgICAgIC0+ICAtMQorYWRkeDMxMSBhZGQgICAxICAtMSAgICAgIC0+ICAgMAorYWRkeDMxMiBhZGQgIDEyICAtMSAgICAgIC0+ICAxMQorYWRkeDMxMyBhZGQgIDk4ICAtMSAgICAgIC0+ICA5NworYWRkeDMxNCBhZGQgIDk5ICAtMSAgICAgIC0+ICA5OAorYWRkeDMxNSBhZGQgMTAwICAtMSAgICAgIC0+ICA5OQorYWRkeDMxNiBhZGQgMTAxICAtMSAgICAgIC0+IDEwMAorCithZGR4MzIxIGFkZCAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMAorYWRkeDMyMiBhZGQgIDAuMDAgIDAuMDEgICAgLT4gIDAuMDEKK2FkZHgzMjMgYWRkICAwLjAxICAwLjAxICAgIC0+ICAwLjAyCithZGR4MzI0IGFkZCAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMworYWRkeDMyNSBhZGQgIDAuOTggIDAuMDEgICAgLT4gIDAuOTkKK2FkZHgzMjYgYWRkICAwLjk5ICAwLjAxICAgIC0+ICAxLjAwCithZGR4MzI3IGFkZCAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQorYWRkeDMyOCBhZGQgIDEuMDEgIDAuMDEgICAgLT4gIDEuMDIKK2FkZHgzMjkgYWRkIC0wLjAxIC0wLjAxICAgIC0+IC0wLjAyCithZGR4MzMwIGFkZCAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQorYWRkeDMzMSBhZGQgIDAuMDEgLTAuMDEgICAgLT4gIDAuMDAKK2FkZHgzMzIgYWRkICAwLjEyIC0wLjAxICAgIC0+ICAwLjExCithZGR4MzMzIGFkZCAgMC45OCAtMC4wMSAgICAtPiAgMC45NworYWRkeDMzNCBhZGQgIDAuOTkgLTAuMDEgICAgLT4gIDAuOTgKK2FkZHgzMzUgYWRkICAxLjAwIC0wLjAxICAgIC0+ICAwLjk5CithZGR4MzM2IGFkZCAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMAorCistLSBzb21lIG1vcmUgY2FzZXMgd2hlcmUgYWRkaW5nIDAgYWZmZWN0cyB0aGUgY29lZmZpY2llbnQKK3ByZWNpc2lvbjogOQorYWRkeDM0MCBhZGQgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMAorYWRkeDM0MSBhZGQgMUUrOCAgICAwICAgIC0+ICAgIDEwMDAwMDAwMAorYWRkeDM0MiBhZGQgMUUrOSAgICAwICAgIC0+ICAgMS4wMDAwMDAwMEUrOSAgIFJvdW5kZWQKK2FkZHgzNDMgYWRkIDFFKzEwICAgMCAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICBSb3VuZGVkCistLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uCithZGR4MzQ0IGFkZCAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxCithZGR4MzQ1IGFkZCAxRSs4ICAgIDEgICAgLT4gICAgMTAwMDAwMDAxCithZGR4MzQ2IGFkZCAxRSs5ICAgIDEgICAgLT4gICAxLjAwMDAwMDAwRSs5ICAgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ3IGFkZCAxRSsxMCAgIDEgICAgLT4gICAxLjAwMDAwMDAwRSsxMCAgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ4IGFkZCAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3CithZGR4MzQ5IGFkZCAxRSs4ICAgIDcgICAgLT4gICAgMTAwMDAwMDA3CithZGR4MzUwIGFkZCAxRSs5ICAgIDcgICAgLT4gICAxLjAwMDAwMDAxRSs5ICAgSW5leGFjdCBSb3VuZGVkCithZGR4MzUxIGFkZCAxRSsxMCAgIDcgICAgLT4gICAxLjAwMDAwMDAwRSsxMCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRyeXplcm9zIGNhc2VzCitwcmVjaXNpb246ICAgNworcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5MgorbWluZXhwb25lbnQ6IC05MgorYWRkeDM2MSAgYWRkIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUKK2FkZHgzNjIgIGFkZCAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAgIFJvdW5kZWQKK2FkZHgzNjMgIGFkZCAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wICBSb3VuZGVkIEluZXhhY3QKK2FkZHgzNjQgIGFkZCA5Ljk5OTk5OUUrOTIgLTkuOTk5OTk5RSs5MiAtPiAwRSs4NgorCistLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nCityb3VuZGluZzogICAgaGFsZl9kb3duCitwcmVjaXNpb246ICAgMTAKK2FkZHgzNzAgYWRkIDk5OTk5OTk5IDgxNTEyIC0+IDEwMDA4MTUxMQorcHJlY2lzaW9uOiAgICAgIDYKK2FkZHgzNzEgYWRkIDk5OTk5OTk5IDgxNTEyIC0+IDEuMDAwODJFKzggUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl91cAorcHJlY2lzaW9uOiAgIDEwCithZGR4MzcyIGFkZCA5OTk5OTk5OSA4MTUxMiAtPiAxMDAwODE1MTEKK3ByZWNpc2lvbjogICAgICA2CithZGR4MzczIGFkZCA5OTk5OTk5OSA4MTUxMiAtPiAxLjAwMDgyRSs4IFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorcHJlY2lzaW9uOiAgIDEwCithZGR4Mzc0IGFkZCA5OTk5OTk5OSA4MTUxMiAtPiAxMDAwODE1MTEKK3ByZWNpc2lvbjogICAgICA2CithZGR4Mzc1IGFkZCA5OTk5OTk5OSA4MTUxMiAtPiAxLjAwMDgyRSs4IFJvdW5kZWQgSW5leGFjdAorCistLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMKK3ByZWNpc2lvbjogOQorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK2FkZHg0MDAgYWRkICAgMSAgIDc3ZS03ICAgICAgIC0+ICAxLjAwMDAwNzcKK2FkZHg0MDEgYWRkICAgMSAgIDc3ZS04ICAgICAgIC0+ICAxLjAwMDAwMDc3CithZGR4NDAyIGFkZCAgIDEgICA3N2UtOSAgICAgICAtPiAgMS4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0MDMgYWRkICAgMSAgIDc3ZS0xMCAgICAgIC0+ICAxLjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDQwNCBhZGQgICAxICAgNzdlLTExICAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDA1IGFkZCAgIDEgICA3N2UtMTIgICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0MDYgYWRkICAgMSAgIDc3ZS05OTkgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQwNyBhZGQgICAxICAgNzdlLTk5OTk5OTkgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2FkZHg0MTAgYWRkICAxMCAgIDc3ZS03ICAgICAgIC0+ICAxMC4wMDAwMDc3CithZGR4NDExIGFkZCAgMTAgICA3N2UtOCAgICAgICAtPiAgMTAuMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0MTIgYWRkICAxMCAgIDc3ZS05ICAgICAgIC0+ICAxMC4wMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDQxMyBhZGQgIDEwICAgNzdlLTEwICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDE0IGFkZCAgMTAgICA3N2UtMTEgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0MTUgYWRkICAxMCAgIDc3ZS0xMiAgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQxNiBhZGQgIDEwICAgNzdlLTk5OSAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDE3IGFkZCAgMTAgICA3N2UtOTk5OTk5OSAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDQyMCBhZGQgIDc3ZS03ICAgICAgICAxICAgLT4gIDEuMDAwMDA3NworYWRkeDQyMSBhZGQgIDc3ZS04ICAgICAgICAxICAgLT4gIDEuMDAwMDAwNzcKK2FkZHg0MjIgYWRkICA3N2UtOSAgICAgICAgMSAgIC0+ICAxLjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorYWRkeDQyMyBhZGQgIDc3ZS0xMCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NDI0IGFkZCAgNzdlLTExICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0MjUgYWRkICA3N2UtMTIgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQyNiBhZGQgIDc3ZS05OTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDI3IGFkZCAgNzdlLTk5OTk5OTkgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDQzMCBhZGQgIDc3ZS03ICAgICAgIDEwICAgLT4gIDEwLjAwMDAwNzcKK2FkZHg0MzEgYWRkICA3N2UtOCAgICAgICAxMCAgIC0+ICAxMC4wMDAwMDA4IEluZXhhY3QgUm91bmRlZAorYWRkeDQzMiBhZGQgIDc3ZS05ICAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NDMzIGFkZCAgNzdlLTEwICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0MzQgYWRkICA3N2UtMTEgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQzNSBhZGQgIDc3ZS0xMiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDM2IGFkZCAgNzdlLTk5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0MzcgYWRkICA3N2UtOTk5OTk5OSAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSB1bHBzCithZGR4NDQwIGFkZCAgIDEgICAtNzdlLTcgICAgICAgLT4gIDAuOTk5OTkyMworYWRkeDQ0MSBhZGQgICAxICAgLTc3ZS04ICAgICAgIC0+ICAwLjk5OTk5OTIzCithZGR4NDQyIGFkZCAgIDEgICAtNzdlLTkgICAgICAgLT4gIDAuOTk5OTk5OTIzCithZGR4NDQzIGFkZCAgIDEgICAtNzdlLTEwICAgICAgLT4gIDAuOTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorYWRkeDQ0NCBhZGQgICAxICAgLTc3ZS0xMSAgICAgIC0+ICAwLjk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NDUgYWRkICAgMSAgIC03N2UtMTIgICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NDYgYWRkICAgMSAgIC03N2UtOTk5ICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NDcgYWRkICAgMSAgIC03N2UtOTk5OTk5OSAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDQ1MCBhZGQgIDEwICAgLTc3ZS03ICAgICAgIC0+ICAgOS45OTk5OTIzCithZGR4NDUxIGFkZCAgMTAgICAtNzdlLTggICAgICAgLT4gICA5Ljk5OTk5OTIzCithZGR4NDUyIGFkZCAgMTAgICAtNzdlLTkgICAgICAgLT4gICA5Ljk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorYWRkeDQ1MyBhZGQgIDEwICAgLTc3ZS0xMCAgICAgIC0+ICAgOS45OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NTQgYWRkICAxMCAgIC03N2UtMTEgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NTUgYWRkICAxMCAgIC03N2UtMTIgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NTYgYWRkICAxMCAgIC03N2UtOTk5ICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NTcgYWRkICAxMCAgIC03N2UtOTk5OTk5OSAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDQ2MCBhZGQgIC03N2UtNyAgICAgICAgMSAgIC0+ICAwLjk5OTk5MjMKK2FkZHg0NjEgYWRkICAtNzdlLTggICAgICAgIDEgICAtPiAgMC45OTk5OTkyMworYWRkeDQ2MiBhZGQgIC03N2UtOSAgICAgICAgMSAgIC0+ICAwLjk5OTk5OTkyMworYWRkeDQ2MyBhZGQgIC03N2UtMTAgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NjQgYWRkICAtNzdlLTExICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCithZGR4NDY1IGFkZCAgLTc3ZS0xMiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDY2IGFkZCAgLTc3ZS05OTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDY3IGFkZCAgLTc3ZS05OTk5OTk5ICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2FkZHg0NzAgYWRkICAtNzdlLTcgICAgICAgMTAgICAtPiAgIDkuOTk5OTkyMworYWRkeDQ3MSBhZGQgIC03N2UtOCAgICAgICAxMCAgIC0+ICAgOS45OTk5OTkyMworYWRkeDQ3MiBhZGQgIC03N2UtOSAgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0NzMgYWRkICAtNzdlLTEwICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCithZGR4NDc0IGFkZCAgLTc3ZS0xMSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDc1IGFkZCAgLTc3ZS0xMiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDc2IGFkZCAgLTc3ZS05OTkgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDc3IGFkZCAgLTc3ZS05OTk5OTk5IDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2FkZHg0ODAgYWRkICAtMSAgICA3N2UtNyAgICAgICAtPiAgLTAuOTk5OTkyMworYWRkeDQ4MSBhZGQgIC0xICAgIDc3ZS04ICAgICAgIC0+ICAtMC45OTk5OTkyMworYWRkeDQ4MiBhZGQgIC0xICAgIDc3ZS05ICAgICAgIC0+ICAtMC45OTk5OTk5MjMKK2FkZHg0ODMgYWRkICAtMSAgICA3N2UtMTAgICAgICAtPiAgLTAuOTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorYWRkeDQ4NCBhZGQgIC0xICAgIDc3ZS0xMSAgICAgIC0+ICAtMC45OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCithZGR4NDg1IGFkZCAgLTEgICAgNzdlLTEyICAgICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQ4NiBhZGQgIC0xICAgIDc3ZS05OTkgICAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0ODcgYWRkICAtMSAgICA3N2UtOTk5OTk5OSAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2FkZHg0OTAgYWRkIC0xMCAgICA3N2UtNyAgICAgICAtPiAgIC05Ljk5OTk5MjMKK2FkZHg0OTEgYWRkIC0xMCAgICA3N2UtOCAgICAgICAtPiAgIC05Ljk5OTk5OTIzCithZGR4NDkyIGFkZCAtMTAgICAgNzdlLTkgICAgICAgLT4gICAtOS45OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0OTMgYWRkIC0xMCAgICA3N2UtMTAgICAgICAtPiAgIC05Ljk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorYWRkeDQ5NCBhZGQgLTEwICAgIDc3ZS0xMSAgICAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg0OTUgYWRkIC0xMCAgICA3N2UtMTIgICAgICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NDk2IGFkZCAtMTAgICAgNzdlLTk5OSAgICAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDQ5NyBhZGQgLTEwICAgIDc3ZS05OTk5OTk5IC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDUwMCBhZGQgICA3N2UtNyAgICAgICAtMSAgIC0+ICAtMC45OTk5OTIzCithZGR4NTAxIGFkZCAgIDc3ZS04ICAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTIzCithZGR4NTAyIGFkZCAgIDc3ZS05ICAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTkyMworYWRkeDUwMyBhZGQgICA3N2UtMTAgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCithZGR4NTA0IGFkZCAgIDc3ZS0xMSAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg1MDUgYWRkICAgNzdlLTEyICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NTA2IGFkZCAgIDc3ZS05OTkgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDUwNyBhZGQgICA3N2UtOTk5OTk5OSAtMSAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDUxMCBhZGQgICA3N2UtNyAgICAgICAtMTAgIC0+ICAgLTkuOTk5OTkyMworYWRkeDUxMSBhZGQgICA3N2UtOCAgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5MjMKK2FkZHg1MTIgYWRkICAgNzdlLTkgICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorYWRkeDUxMyBhZGQgICA3N2UtMTAgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCithZGR4NTE0IGFkZCAgIDc3ZS0xMSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDUxNSBhZGQgICA3N2UtMTIgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg1MTYgYWRkICAgNzdlLTk5OSAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NTE3IGFkZCAgIDc3ZS05OTk5OTk5IC0xMCAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCisKKy0tIGxvbmcgb3BlcmFuZHMKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK2FkZHg1MjEgYWRkIDEyMzQ1Njc4MDAwIDAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAorYWRkeDUyMiBhZGQgMCAxMjM0NTY3ODAwMCAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCithZGR4NTIzIGFkZCAxMjM0NTY3ODAwICAwIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorYWRkeDUyNCBhZGQgMCAxMjM0NTY3ODAwICAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK2FkZHg1MjUgYWRkIDEyMzQ1Njc4OTAgIDAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCithZGR4NTI2IGFkZCAwIDEyMzQ1Njc4OTAgIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAorYWRkeDUyNyBhZGQgMTIzNDU2Nzg5MSAgMCAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorYWRkeDUyOCBhZGQgMCAxMjM0NTY3ODkxICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorYWRkeDUyOSBhZGQgMTIzNDU2Nzg5MDEgMCAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg1MzAgYWRkIDAgMTIzNDU2Nzg5MDEgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCithZGR4NTMxIGFkZCAxMjM0NTY3ODk2ICAwIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCithZGR4NTMyIGFkZCAwIDEyMzQ1Njc4OTYgIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMTUKKy0tIHN0aWxsIGNoZWNraW5nCithZGR4NTQxIGFkZCAxMjM0NTY3ODAwMCAwIC0+IDEyMzQ1Njc4MDAwCithZGR4NTQyIGFkZCAwIDEyMzQ1Njc4MDAwIC0+IDEyMzQ1Njc4MDAwCithZGR4NTQzIGFkZCAxMjM0NTY3ODAwICAwIC0+IDEyMzQ1Njc4MDAKK2FkZHg1NDQgYWRkIDAgMTIzNDU2NzgwMCAgLT4gMTIzNDU2NzgwMAorYWRkeDU0NSBhZGQgMTIzNDU2Nzg5MCAgMCAtPiAxMjM0NTY3ODkwCithZGR4NTQ2IGFkZCAwIDEyMzQ1Njc4OTAgIC0+IDEyMzQ1Njc4OTAKK2FkZHg1NDcgYWRkIDEyMzQ1Njc4OTEgIDAgLT4gMTIzNDU2Nzg5MQorYWRkeDU0OCBhZGQgMCAxMjM0NTY3ODkxICAtPiAxMjM0NTY3ODkxCithZGR4NTQ5IGFkZCAxMjM0NTY3ODkwMSAwIC0+IDEyMzQ1Njc4OTAxCithZGR4NTUwIGFkZCAwIDEyMzQ1Njc4OTAxIC0+IDEyMzQ1Njc4OTAxCithZGR4NTUxIGFkZCAxMjM0NTY3ODk2ICAwIC0+IDEyMzQ1Njc4OTYKK2FkZHg1NTIgYWRkIDAgMTIzNDU2Nzg5NiAgLT4gMTIzNDU2Nzg5NgorCistLSB2ZXJpZnkgYSBxdWVyeQorcHJlY2lzaW9uOiAgICAxNgorbWF4RXhwb25lbnQ6ICszOTQKK21pbkV4cG9uZW50OiAtMzkzCityb3VuZGluZzogICAgIGRvd24KK2FkZHg1NjEgYWRkIDFlLTM5OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgSW5leGFjdCBSb3VuZGVkCithZGR4NTYyIGFkZCAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQKKy0tIGFuZCB1c2luZyBkZWNpbWFsNjQgYm91bmRzIChzZWUgYWxzbyBkZGFkZC5kZWNUZXN0KQorcHJlY2lzaW9uOiAgICAxNgorbWF4RXhwb25lbnQ6ICszODQKK21pbkV4cG9uZW50OiAtMzgzCityb3VuZGluZzogICAgIGRvd24KK2FkZHg1NjMgYWRkIDFlLTM4OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgSW5leGFjdCBSb3VuZGVkCithZGR4NTY0IGFkZCAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IFJvdW5kZWQKKworCistLSBzb21lIG1vcmUgcmVzaWR1ZSBlZmZlY3RzIHdpdGggZXh0cmVtZSByb3VuZGluZworcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiBoYWxmX3VwCithZGR4NjAxIGFkZCAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2FkZHg2MDIgYWRkIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZG93bgorYWRkeDYwMyBhZGQgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZmxvb3IKK2FkZHg2MDQgYWRkIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGNlaWxpbmcKK2FkZHg2MDUgYWRkIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IHVwCithZGR4NjA2IGFkZCAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBkb3duCithZGR4NjA3IGFkZCAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK2FkZHg2MTEgYWRkIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZXZlbgorYWRkeDYxMiBhZGQgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9kb3duCithZGR4NjEzIGFkZCAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBmbG9vcgorYWRkeDYxNCBhZGQgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogY2VpbGluZworYWRkeDYxNSBhZGQgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogdXAKK2FkZHg2MTYgYWRkIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGRvd24KK2FkZHg2MTcgYWRkIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorYWRkeDYyMSBhZGQgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9ldmVuCithZGR4NjIyIGFkZCAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2FkZHg2MjMgYWRkIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGZsb29yCithZGR4NjI0IGFkZCAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBjZWlsaW5nCithZGR4NjI1IGFkZCAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiB1cAorYWRkeDYyNiBhZGQgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZG93bgorYWRkeDYyNyBhZGQgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCithZGR4NjMxIGFkZCAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2FkZHg2MzIgYWRkIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZG93bgorYWRkeDYzMyBhZGQgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZmxvb3IKK2FkZHg2MzQgYWRkIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGNlaWxpbmcKK2FkZHg2MzUgYWRkIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IHVwCithZGR4NjM2IGFkZCAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBkb3duCithZGR4NjM3IGFkZCAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK2FkZHg2NDEgYWRkIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZXZlbgorYWRkeDY0MiBhZGQgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9kb3duCithZGR4NjQzIGFkZCAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBmbG9vcgorYWRkeDY0NCBhZGQgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogY2VpbGluZworYWRkeDY0NSBhZGQgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogdXAKK2FkZHg2NDYgYWRkIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGRvd24KK2FkZHg2NDcgYWRkIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorYWRkeDY1MSBhZGQgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9ldmVuCithZGR4NjUyIGFkZCAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2FkZHg2NTMgYWRkIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGZsb29yCithZGR4NjU0IGFkZCAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBjZWlsaW5nCithZGR4NjU1IGFkZCAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiB1cAorYWRkeDY1NiBhZGQgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZG93bgorYWRkeDY1NyBhZGQgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCisKKy0tIGxvbmcgb3BlcmFuZCB0cmlhbmdsZQorcm91bmRpbmc6IGhhbGZfdXAKK3ByZWNpc2lvbjogIDM3CithZGR4NjYwIGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzQ1MzgKK3ByZWNpc2lvbjogIDM2CithZGR4NjYxIGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzQ1NCAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzNQorYWRkeDY2MiBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE0ODM0NSAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMzQKK2FkZHg2NjMgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzNSAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDMzCithZGR4NjY0IGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MyAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzMgorYWRkeDY2NSBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE0OCAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMzEKK2FkZHg2NjYgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDMwCithZGR4NjY3IGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMSAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyOQorYWRkeDY2OCBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjgKK2FkZHg2NjkgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNyAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDI3CithZGR4NjcwIGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzNCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyNgorYWRkeDY3MSBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjUKK2FkZHg2NzIgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDI0CithZGR4NjczIGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MiAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyMworYWRkeDY3NCBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OSAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjIKK2FkZHg2NzUgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzOSAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDIxCithZGR4Njc2IGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2NCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyMAorYWRkeDY3NyBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNiAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTkKK2FkZHg2NzggYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyNCAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDE4CithZGR4Njc5IGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMiAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxNworYWRkeDY4MCBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMCAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTYKK2FkZHg2ODEgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMSAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDE1CithZGR4NjgyIGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMSAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxNAorYWRkeDY4MyBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMiAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTMKK2FkZHg2ODQgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MiAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDEyCithZGR4Njg1IGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxMQorYWRkeDY4NiBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTAKK2FkZHg2ODcgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzExNzQxN0UrMTAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICA5CithZGR4Njg4IGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTc0MkUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgOAorYWRkeDY4OSBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MTE3NEUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDcKK2FkZHg2OTAgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzExN0UrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDYKK2FkZHg2OTEgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzEyRSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgNQorYWRkeDY5MiBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MUUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDQKK2FkZHg2OTMgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0N0UrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDMKK2FkZHg2OTQgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg1RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMgorYWRkeDY5NSBhZGQgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuOEUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDEKK2FkZHg2OTYgYWRkIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiAxRSsxMSAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK3JvdW5kaW5nOiBoYWxmX3VwCitwcmVjaXNpb246ICAgOQorCithZGR4NzAxIGFkZCA1LjAwIDEuMDBFLTMgLT4gNS4wMDEwMAorYWRkeDcwMiBhZGQgMDAuMDAgMC4wMDAgIC0+IDAuMDAwCithZGR4NzAzIGFkZCAwMC4wMCAwRS0zICAgLT4gMC4wMDAKK2FkZHg3MDQgYWRkIDBFLTMgIDAwLjAwICAtPiAwLjAwMAorCithZGR4NzEwIGFkZCAwRSszICAwMC4wMCAgLT4gMC4wMAorYWRkeDcxMSBhZGQgMEUrMyAgMDAuMCAgIC0+IDAuMAorYWRkeDcxMiBhZGQgMEUrMyAgMDAuICAgIC0+IDAKK2FkZHg3MTMgYWRkIDBFKzMgIDAwLkUrMSAtPiAwRSsxCithZGR4NzE0IGFkZCAwRSszICAwMC5FKzIgLT4gMEUrMgorYWRkeDcxNSBhZGQgMEUrMyAgMDAuRSszIC0+IDBFKzMKK2FkZHg3MTYgYWRkIDBFKzMgIDAwLkUrNCAtPiAwRSszCithZGR4NzE3IGFkZCAwRSszICAwMC5FKzUgLT4gMEUrMworYWRkeDcxOCBhZGQgMEUrMyAgLTAwLjAgICAtPiAwLjAKK2FkZHg3MTkgYWRkIDBFKzMgIC0wMC4gICAgLT4gMAorYWRkeDczMSBhZGQgMEUrMyAgLTAwLkUrMSAtPiAwRSsxCisKK2FkZHg3MjAgYWRkIDAwLjAwICAwRSszICAtPiAwLjAwCithZGR4NzIxIGFkZCAwMC4wICAgMEUrMyAgLT4gMC4wCithZGR4NzIyIGFkZCAwMC4gICAgMEUrMyAgLT4gMAorYWRkeDcyMyBhZGQgMDAuRSsxIDBFKzMgIC0+IDBFKzEKK2FkZHg3MjQgYWRkIDAwLkUrMiAwRSszICAtPiAwRSsyCithZGR4NzI1IGFkZCAwMC5FKzMgMEUrMyAgLT4gMEUrMworYWRkeDcyNiBhZGQgMDAuRSs0IDBFKzMgIC0+IDBFKzMKK2FkZHg3MjcgYWRkIDAwLkUrNSAwRSszICAtPiAwRSszCithZGR4NzI4IGFkZCAtMDAuMDAgMEUrMyAgLT4gMC4wMAorYWRkeDcyOSBhZGQgLTAwLjAgIDBFKzMgIC0+IDAuMAorYWRkeDczMCBhZGQgLTAwLiAgIDBFKzMgIC0+IDAKKworYWRkeDczMiBhZGQgIDAgICAgIDAgICAgIC0+ICAwCithZGR4NzMzIGFkZCAgMCAgICAtMCAgICAgLT4gIDAKK2FkZHg3MzQgYWRkIC0wICAgICAwICAgICAtPiAgMAorYWRkeDczNSBhZGQgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UKKworYWRkeDczNiBhZGQgIDEgICAgLTEgICAgIC0+ICAwCithZGR4NzM3IGFkZCAtMSAgICAtMSAgICAgLT4gLTIKK2FkZHg3MzggYWRkICAxICAgICAxICAgICAtPiAgMgorYWRkeDczOSBhZGQgLTEgICAgIDEgICAgIC0+ICAwCisKK2FkZHg3NDEgYWRkICAwICAgIC0xICAgICAtPiAtMQorYWRkeDc0MiBhZGQgLTAgICAgLTEgICAgIC0+IC0xCithZGR4NzQzIGFkZCAgMCAgICAgMSAgICAgLT4gIDEKK2FkZHg3NDQgYWRkIC0wICAgICAxICAgICAtPiAgMQorYWRkeDc0NSBhZGQgLTEgICAgIDAgICAgIC0+IC0xCithZGR4NzQ2IGFkZCAtMSAgICAtMCAgICAgLT4gLTEKK2FkZHg3NDcgYWRkICAxICAgICAwICAgICAtPiAgMQorYWRkeDc0OCBhZGQgIDEgICAgLTAgICAgIC0+ICAxCisKK2FkZHg3NTEgYWRkICAwLjAgIC0xICAgICAtPiAtMS4wCithZGR4NzUyIGFkZCAtMC4wICAtMSAgICAgLT4gLTEuMAorYWRkeDc1MyBhZGQgIDAuMCAgIDEgICAgIC0+ICAxLjAKK2FkZHg3NTQgYWRkIC0wLjAgICAxICAgICAtPiAgMS4wCithZGR4NzU1IGFkZCAtMS4wICAgMCAgICAgLT4gLTEuMAorYWRkeDc1NiBhZGQgLTEuMCAgLTAgICAgIC0+IC0xLjAKK2FkZHg3NTcgYWRkICAxLjAgICAwICAgICAtPiAgMS4wCithZGR4NzU4IGFkZCAgMS4wICAtMCAgICAgLT4gIDEuMAorCithZGR4NzYxIGFkZCAgMCAgICAtMS4wICAgLT4gLTEuMAorYWRkeDc2MiBhZGQgLTAgICAgLTEuMCAgIC0+IC0xLjAKK2FkZHg3NjMgYWRkICAwICAgICAxLjAgICAtPiAgMS4wCithZGR4NzY0IGFkZCAtMCAgICAgMS4wICAgLT4gIDEuMAorYWRkeDc2NSBhZGQgLTEgICAgIDAuMCAgIC0+IC0xLjAKK2FkZHg3NjYgYWRkIC0xICAgIC0wLjAgICAtPiAtMS4wCithZGR4NzY3IGFkZCAgMSAgICAgMC4wICAgLT4gIDEuMAorYWRkeDc2OCBhZGQgIDEgICAgLTAuMCAgIC0+ICAxLjAKKworYWRkeDc3MSBhZGQgIDAuMCAgLTEuMCAgIC0+IC0xLjAKK2FkZHg3NzIgYWRkIC0wLjAgIC0xLjAgICAtPiAtMS4wCithZGR4NzczIGFkZCAgMC4wICAgMS4wICAgLT4gIDEuMAorYWRkeDc3NCBhZGQgLTAuMCAgIDEuMCAgIC0+ICAxLjAKK2FkZHg3NzUgYWRkIC0xLjAgICAwLjAgICAtPiAtMS4wCithZGR4Nzc2IGFkZCAtMS4wICAtMC4wICAgLT4gLTEuMAorYWRkeDc3NyBhZGQgIDEuMCAgIDAuMCAgIC0+ICAxLjAKK2FkZHg3NzggYWRkICAxLjAgIC0wLjAgICAtPiAgMS4wCisKKy0tIFNwZWNpYWxzCithZGR4NzgwIGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CithZGR4NzgxIGFkZCAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CithZGR4NzgyIGFkZCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CithZGR4NzgzIGFkZCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CithZGR4Nzg0IGFkZCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CithZGR4Nzg1IGFkZCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CithZGR4Nzg2IGFkZCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CithZGR4Nzg3IGFkZCAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CithZGR4Nzg4IGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CithZGR4Nzg5IGFkZCAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CithZGR4NzkwIGFkZCAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CithZGR4NzkxIGFkZCAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CithZGR4NzkyIGFkZCAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CithZGR4NzkzIGFkZCAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CithZGR4Nzk0IGFkZCAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworYWRkeDgwMCBhZGQgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODAxIGFkZCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CithZGR4ODAyIGFkZCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CithZGR4ODAzIGFkZCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CithZGR4ODA0IGFkZCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CithZGR4ODA1IGFkZCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CithZGR4ODA2IGFkZCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CithZGR4ODA3IGFkZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CithZGR4ODA4IGFkZCAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CithZGR4ODA5IGFkZCAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4MTAgYWRkIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2FkZHg4MTEgYWRkIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2FkZHg4MTIgYWRkICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2FkZHg4MTMgYWRkICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2FkZHg4MTQgYWRkICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2FkZHg4MTUgYWRkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworYWRkeDgyMSBhZGQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2FkZHg4MjIgYWRkICBOYU4gLTEwMDAgICAtPiAgTmFOCithZGR4ODIzIGFkZCAgTmFOIC0xICAgICAgLT4gIE5hTgorYWRkeDgyNCBhZGQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2FkZHg4MjUgYWRkICBOYU4gIDAgICAgICAtPiAgTmFOCithZGR4ODI2IGFkZCAgTmFOICAxICAgICAgLT4gIE5hTgorYWRkeDgyNyBhZGQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2FkZHg4MjggYWRkICBOYU4gIEluZiAgICAtPiAgTmFOCithZGR4ODI5IGFkZCAgTmFOICBOYU4gICAgLT4gIE5hTgorYWRkeDgzMCBhZGQgLUluZiAgTmFOICAgIC0+ICBOYU4KK2FkZHg4MzEgYWRkIC0xMDAwIE5hTiAgICAtPiAgTmFOCithZGR4ODMyIGFkZCAtMSAgICBOYU4gICAgLT4gIE5hTgorYWRkeDgzMyBhZGQgLTAgICAgTmFOICAgIC0+ICBOYU4KK2FkZHg4MzQgYWRkICAwICAgIE5hTiAgICAtPiAgTmFOCithZGR4ODM1IGFkZCAgMSAgICBOYU4gICAgLT4gIE5hTgorYWRkeDgzNiBhZGQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2FkZHg4MzcgYWRkICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2FkZHg4NDEgYWRkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg0MiBhZGQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODQzIGFkZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NDQgYWRkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg0NSBhZGQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODQ2IGFkZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NDcgYWRkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg0OCBhZGQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODQ5IGFkZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NTAgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg1MSBhZGQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODUyIGFkZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NTMgYWRkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg1NCBhZGQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODU1IGFkZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NTYgYWRkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg1NyBhZGQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODU4IGFkZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NTkgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCithZGR4ODYxIGFkZCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2FkZHg4NjIgYWRkICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorYWRkeDg2MyBhZGQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCithZGR4ODY0IGFkZCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2FkZHg4NjUgYWRkICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorYWRkeDg2NiBhZGQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CithZGR4ODY3IGFkZCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2FkZHg4NjggYWRkICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorYWRkeDg2OSBhZGQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorYWRkeDg3MSBhZGQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NzIgYWRkICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODczIGFkZCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg3NCBhZGQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NzUgYWRkICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODc2IGFkZCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg3NyBhZGQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4NzggYWRkIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODc5IGFkZCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg4MCBhZGQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg4ODEgYWRkICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCithZGR4ODgyIGFkZCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CithZGR4ODgzIGFkZCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDg4NCBhZGQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorYWRkeDg4NSBhZGQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gb3ZlcmZsb3csIHVuZGVyZmxvdyBhbmQgc3Vibm9ybWFsIHRlc3RzCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiA5CithZGR4ODkwIGFkZCAxRSs5OTk5OTk5OTkgICAgIDlFKzk5OTk5OTk5OSAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDg5MSBhZGQgOUUrOTk5OTk5OTk5ICAgICAxRSs5OTk5OTk5OTkgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg4OTIgYWRkIC0xLjFFLTk5OTk5OTk5OSAgMUUtOTk5OTk5OTk5ICAgLT4gLTFFLTEwMDAwMDAwMDAgICAgU3Vibm9ybWFsCithZGR4ODkzIGFkZCAxRS05OTk5OTk5OTkgICAgLTEuMWUtOTk5OTk5OTk5IC0+IC0xRS0xMDAwMDAwMDAwICAgIFN1Ym5vcm1hbAorYWRkeDg5NCBhZGQgLTEuMDAwMUUtOTk5OTk5OTk5ICAxRS05OTk5OTk5OTkgICAtPiAtMUUtMTAwMDAwMDAwMyBTdWJub3JtYWwKK2FkZHg4OTUgYWRkIDFFLTk5OTk5OTk5OSAgICAtMS4wMDAxZS05OTk5OTk5OTkgLT4gLTFFLTEwMDAwMDAwMDMgU3Vibm9ybWFsCithZGR4ODk2IGFkZCAtMUUrOTk5OTk5OTk5ICAgLTlFKzk5OTk5OTk5OSAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg4OTcgYWRkIC05RSs5OTk5OTk5OTkgICAtMUUrOTk5OTk5OTk5ICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDg5OCBhZGQgKzEuMUUtOTk5OTk5OTk5IC0xRS05OTk5OTk5OTkgICAtPiAxRS0xMDAwMDAwMDAwICAgIFN1Ym5vcm1hbAorYWRkeDg5OSBhZGQgLTFFLTk5OTk5OTk5OSAgICsxLjFlLTk5OTk5OTk5OSAtPiAxRS0xMDAwMDAwMDAwICAgIFN1Ym5vcm1hbAorYWRkeDkwMCBhZGQgKzEuMDAwMUUtOTk5OTk5OTk5IC0xRS05OTk5OTk5OTkgICAtPiAxRS0xMDAwMDAwMDAzIFN1Ym5vcm1hbAorYWRkeDkwMSBhZGQgLTFFLTk5OTk5OTk5OSAgICsxLjAwMDFlLTk5OTk5OTk5OSAtPiAxRS0xMDAwMDAwMDAzIFN1Ym5vcm1hbAorYWRkeDkwMiBhZGQgLTFFKzk5OTk5OTk5OSAgICs5RSs5OTk5OTk5OTkgICAtPiAgOEUrOTk5OTk5OTk5CithZGR4OTAzIGFkZCAtOUUrOTk5OTk5OTk5ICAgKzFFKzk5OTk5OTk5OSAgIC0+IC04RSs5OTk5OTk5OTkKKworcHJlY2lzaW9uOiAzCithZGR4OTA0IGFkZCAgICAgIDAgLTkuOTk5RSs5OTk5OTk5OTkgICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCithZGR4OTA1IGFkZCAgICAgICAgLTkuOTk5RSs5OTk5OTk5OTkgMCAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCithZGR4OTA2IGFkZCAgICAgIDAgIDkuOTk5RSs5OTk5OTk5OTkgICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCithZGR4OTA3IGFkZCAgICAgICAgIDkuOTk5RSs5OTk5OTk5OTkgMCAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCisKK3ByZWNpc2lvbjogMworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK2FkZHg5MTAgYWRkICAxLjAwRS05OTkgICAwICAgIC0+ICAgMS4wMEUtOTk5CithZGR4OTExIGFkZCAgMC4xRS05OTkgICAgMCAgICAtPiAgIDFFLTEwMDAgICBTdWJub3JtYWwKK2FkZHg5MTIgYWRkICAwLjEwRS05OTkgICAwICAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbAorYWRkeDkxMyBhZGQgIDAuMTAwRS05OTkgIDAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQKK2FkZHg5MTQgYWRkICAwLjAxRS05OTkgICAwICAgIC0+ICAgMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIE5taW4KK2FkZHg5MTUgYWRkICAwLjk5OUUtOTk5ICAwICAgIC0+ICAgMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4OTE2IGFkZCAgMC4wOTlFLTk5OSAgMCAgICAtPiAgIDEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDkxNyBhZGQgIDAuMDA5RS05OTkgIDAgICAgLT4gICAxRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHg5MTggYWRkICAwLjAwMUUtOTk5ICAwICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg5MTkgYWRkICAwLjAwMDlFLTk5OSAwICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg5MjAgYWRkICAwLjAwMDFFLTk5OSAwICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKKworYWRkeDkzMCBhZGQgLTEuMDBFLTk5OSAgIDAgICAgLT4gIC0xLjAwRS05OTkKK2FkZHg5MzEgYWRkIC0wLjFFLTk5OSAgICAwICAgIC0+ICAtMUUtMTAwMCAgIFN1Ym5vcm1hbAorYWRkeDkzMiBhZGQgLTAuMTBFLTk5OSAgIDAgICAgLT4gIC0xLjBFLTEwMDAgU3Vibm9ybWFsCithZGR4OTMzIGFkZCAtMC4xMDBFLTk5OSAgMCAgICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorYWRkeDkzNCBhZGQgLTAuMDFFLTk5OSAgIDAgICAgLT4gIC0xRS0xMDAxICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gTm1pbgorYWRkeDkzNSBhZGQgLTAuOTk5RS05OTkgIDAgICAgLT4gIC0xLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHg5MzYgYWRkIC0wLjA5OUUtOTk5ICAwICAgIC0+ICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4OTM3IGFkZCAtMC4wMDlFLTk5OSAgMCAgICAtPiAgLTFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDkzOCBhZGQgLTAuMDAxRS05OTkgIDAgICAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDkzOSBhZGQgLTAuMDAwOUUtOTk5IDAgICAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDk0MCBhZGQgLTAuMDAwMUUtOTk5IDAgICAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSBzb21lIG5vbi16ZXJvIHN1Ym5vcm1hbCBhZGRzCithZGR4OTUwIGFkZCAgMS4wMEUtOTk5ICAgIDAuMUUtOTk5ICAtPiAgIDEuMTBFLTk5OQorYWRkeDk1MSBhZGQgIDAuMUUtOTk5ICAgICAwLjFFLTk5OSAgLT4gICAyRS0xMDAwICAgIFN1Ym5vcm1hbAorYWRkeDk1MiBhZGQgIDAuMTBFLTk5OSAgICAwLjFFLTk5OSAgLT4gICAyLjBFLTEwMDAgIFN1Ym5vcm1hbAorYWRkeDk1MyBhZGQgIDAuMTAwRS05OTkgICAwLjFFLTk5OSAgLT4gICAyLjBFLTEwMDAgIFN1Ym5vcm1hbCBSb3VuZGVkCithZGR4OTU0IGFkZCAgMC4wMUUtOTk5ICAgIDAuMUUtOTk5ICAtPiAgIDEuMUUtMTAwMCAgU3Vibm9ybWFsCithZGR4OTU1IGFkZCAgMC45OTlFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDEuMTBFLTk5OSAgSW5leGFjdCBSb3VuZGVkCithZGR4OTU2IGFkZCAgMC4wOTlFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDIuMEUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHg5NTcgYWRkICAwLjAwOUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMS4xRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDk1OCBhZGQgIDAuMDAxRS05OTkgICAwLjFFLTk5OSAgLT4gICAxLjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4OTU5IGFkZCAgMC4wMDA5RS05OTkgIDAuMUUtOTk5ICAtPiAgIDEuMEUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHg5NjAgYWRkICAwLjAwMDFFLTk5OSAgMC4xRS05OTkgIC0+ICAgMS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworLS0gbmVnYXRpdmVzLi4uCithZGR4OTYxIGFkZCAgMS4wMEUtOTk5ICAgLTAuMUUtOTk5ICAtPiAgIDkuMEUtMTAwMCAgU3Vibm9ybWFsCithZGR4OTYyIGFkZCAgMC4xRS05OTkgICAgLTAuMUUtOTk5ICAtPiAgIDBFLTEwMDAKK2FkZHg5NjMgYWRkICAwLjEwRS05OTkgICAtMC4xRS05OTkgIC0+ICAgMEUtMTAwMQorYWRkeDk2NCBhZGQgIDAuMTAwRS05OTkgIC0wLjFFLTk5OSAgLT4gICAwRS0xMDAxICAgIENsYW1wZWQKK2FkZHg5NjUgYWRkICAwLjAxRS05OTkgICAtMC4xRS05OTkgIC0+ICAgLTlFLTEwMDEgICBTdWJub3JtYWwKK2FkZHg5NjYgYWRkICAwLjk5OUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgOS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDk2NyBhZGQgIDAuMDk5RS05OTkgIC0wLjFFLTk5OSAgLT4gICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg5NjggYWRkICAwLjAwOUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgLTlFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDk2OSBhZGQgIDAuMDAxRS05OTkgIC0wLjFFLTk5OSAgLT4gICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4OTcwIGFkZCAgMC4wMDA5RS05OTkgLTAuMUUtOTk5ICAtPiAgIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHg5NzEgYWRkICAwLjAwMDFFLTk5OSAtMC4xRS05OTkgIC0+ICAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBzb21lICdyZWFsJyBudW1iZXJzCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworcHJlY2lzaW9uOiA4CithZGR4NTY2IGFkZCA5OTk5OTA2MTczNUUtMzk0ICAwRS0zOTQgLT4gOS45OTk5MDZFLTM4NCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorcHJlY2lzaW9uOiA3CithZGR4NTY3IGFkZCA5OTk5OTA2MTczNUUtMzk0ICAwRS0zOTQgLT4gOS45OTk5MUUtMzg0IEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitwcmVjaXNpb246IDYKK2FkZHg1NjggYWRkIDk5OTk5MDYxNzM1RS0zOTQgIDBFLTM5NCAtPiA5Ljk5OTlFLTM4NCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorCistLSBub3cgdGhlIGNhc2Ugd2hlcmUgd2UgY2FuIGdldCB1bmRlcmZsb3cgYnV0IHRoZSByZXN1bHQgaXMgbm9ybWFsCistLSBbbm90ZSB0aGlzIGNhbid0IGhhcHBlbiBpZiB0aGUgb3BlcmFuZHMgYXJlIGFsc28gYm91bmRlZCwgYXMgd2UKKy0tIGNhbm5vdCByZXByZXNlbnQgMUUtMzk5LCBmb3IgZXhhbXBsZV0KK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCisKK2FkZHg1NzEgYWRkICAgICAgIDFFLTM4MyAgICAgICAwICAtPiAxRS0zODMKK2FkZHg1NzIgYWRkICAgICAgIDFFLTM4NCAgICAgICAwICAtPiAxRS0zODQgICBTdWJub3JtYWwKK2FkZHg1NzMgYWRkICAgICAgIDFFLTM4MyAgMUUtMzg0ICAtPiAxLjFFLTM4MworYWRkeDU3NCBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zODQgIC0+ICAgOUUtMzg0IFN1Ym5vcm1hbAorCistLSBIZXJlIHdlIGV4cGxvcmUgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4KK2FkZHg1NzUgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk4ICAtPiAgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCithZGR4NTc2IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OCAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbAorYWRkeDU3NyBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTkgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorYWRkeDU3OCBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorYWRkeDU3OSBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorYWRkeDU4MCBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorCistLSBjaGVjayBvdmVyZmxvdyBlZGdlIGNhc2UKK3ByZWNpc2lvbjogICA3Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk2CittaW5FeHBvbmVudDogLTk1CithZGR4OTcyIGFwcGx5ICAgOS45OTk5OTlFKzk2ICAgICAgICAgLT4gOS45OTk5OTlFKzk2CithZGR4OTczIGFkZCAgICAgOS45OTk5OTlFKzk2ICAxICAgICAgLT4gOS45OTk5OTlFKzk2IEluZXhhY3QgUm91bmRlZAorYWRkeDk3NCBhZGQgICAgICA5OTk5OTk5RSs5MCAgMSAgICAgIC0+IDkuOTk5OTk5RSs5NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5NzUgYWRkICAgICAgOTk5OTk5OUUrOTAgIDFFKzkwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5NzYgYWRkICAgICAgOTk5OTk5OUUrOTAgIDlFKzg5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5NzcgYWRkICAgICAgOTk5OTk5OUUrOTAgIDhFKzg5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5NzggYWRkICAgICAgOTk5OTk5OUUrOTAgIDdFKzg5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5NzkgYWRkICAgICAgOTk5OTk5OUUrOTAgIDZFKzg5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5ODAgYWRkICAgICAgOTk5OTk5OUUrOTAgIDVFKzg5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5ODEgYWRkICAgICAgOTk5OTk5OUUrOTAgIDRFKzg5ICAtPiA5Ljk5OTk5OUUrOTYgSW5leGFjdCBSb3VuZGVkCithZGR4OTgyIGFkZCAgICAgIDk5OTk5OTlFKzkwICAzRSs4OSAgLT4gOS45OTk5OTlFKzk2IEluZXhhY3QgUm91bmRlZAorYWRkeDk4MyBhZGQgICAgICA5OTk5OTk5RSs5MCAgMkUrODkgIC0+IDkuOTk5OTk5RSs5NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5ODQgYWRkICAgICAgOTk5OTk5OUUrOTAgIDFFKzg5ICAtPiA5Ljk5OTk5OUUrOTYgSW5leGFjdCBSb3VuZGVkCisKK2FkZHg5ODUgYXBwbHkgIC05Ljk5OTk5OUUrOTYgICAgICAgICAtPiAtOS45OTk5OTlFKzk2CithZGR4OTg2IGFkZCAgICAtOS45OTk5OTlFKzk2IC0xICAgICAgLT4gLTkuOTk5OTk5RSs5NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5ODcgYWRkICAgICAtOTk5OTk5OUUrOTAgLTEgICAgICAtPiAtOS45OTk5OTlFKzk2IEluZXhhY3QgUm91bmRlZAorYWRkeDk4OCBhZGQgICAgIC05OTk5OTk5RSs5MCAtMUUrOTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5ODkgYWRkICAgICAtOTk5OTk5OUUrOTAgLTlFKzg5ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4OTkwIGFkZCAgICAgLTk5OTk5OTlFKzkwIC04RSs4OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDk5MSBhZGQgICAgIC05OTk5OTk5RSs5MCAtN0UrODkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5OTIgYWRkICAgICAtOTk5OTk5OUUrOTAgLTZFKzg5ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4OTkzIGFkZCAgICAgLTk5OTk5OTlFKzkwIC01RSs4OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDk5NCBhZGQgICAgIC05OTk5OTk5RSs5MCAtNEUrODkgIC0+IC05Ljk5OTk5OUUrOTYgSW5leGFjdCBSb3VuZGVkCithZGR4OTk1IGFkZCAgICAgLTk5OTk5OTlFKzkwIC0zRSs4OSAgLT4gLTkuOTk5OTk5RSs5NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg5OTYgYWRkICAgICAtOTk5OTk5OUUrOTAgLTJFKzg5ICAtPiAtOS45OTk5OTlFKzk2IEluZXhhY3QgUm91bmRlZAorYWRkeDk5NyBhZGQgICAgIC05OTk5OTk5RSs5MCAtMUUrODkgIC0+IC05Ljk5OTk5OUUrOTYgSW5leGFjdCBSb3VuZGVkCisKKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzCitwcmVjaXNpb246ICAgNQorbWF4ZXhwb25lbnQ6IDc5CittaW5leHBvbmVudDogLTc5CistLSBBZGQ6IGxocyBhbmQgcmhzIDAKK2FkZHgxMDAxIGFkZCAgICAgICAxLjUyNDQ0RS04MCAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDEwMDIgYWRkICAgICAgIDEuNTI0NDVFLTgwIDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4MTAwMyBhZGQgICAgICAgMS41MjQ0NkUtODAgMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHgxMDA0IGFkZCAgICAgICAwIDEuNTI0NDRFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDEwMDUgYWRkICAgICAgIDAgMS41MjQ0NUUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4MTAwNiBhZGQgICAgICAgMCAxLjUyNDQ2RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gQWRkOiBsaHMgPj4gcmhzIGFuZCB2aWNlIHZlcnNhCithZGR4MTAxMSBhZGQgICAgICAgMS41MjQ0NEUtODAgMUUtMTAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDEwMTIgYWRkICAgICAgIDEuNTI0NDVFLTgwIDFFLTEwMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHgxMDEzIGFkZCAgICAgICAxLjUyNDQ2RS04MCAxRS0xMDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4MTAxNCBhZGQgICAgICAgMUUtMTAwIDEuNTI0NDRFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDEwMTUgYWRkICAgICAgIDFFLTEwMCAxLjUyNDQ1RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHgxMDE2IGFkZCAgICAgICAxRS0xMDAgMS41MjQ0NkUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIEFkZDogbGhzICsgcmhzIGFkZGl0aW9uIGNhcnJpZWQgb3V0CithZGR4MTAyMSBhZGQgICAgICAgMS41MjQ0M0UtODAgMS4wMDAwMUUtODAgIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDEwMjIgYWRkICAgICAgIDEuNTI0NDRFLTgwIDEuMDAwMDFFLTgwICAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHgxMDIzIGFkZCAgICAgICAxLjUyNDQ1RS04MCAxLjAwMDAxRS04MCAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4MTAyNCBhZGQgICAgICAgMS4wMDAwMUUtODAgIDEuNTI0NDNFLTgwIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDEwMjUgYWRkICAgICAgIDEuMDAwMDFFLTgwICAxLjUyNDQ0RS04MCAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHgxMDI2IGFkZCAgICAgICAxLjAwMDAxRS04MCAgMS41MjQ0NUUtODAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cworcHJlY2lzaW9uOiAgICAxNgorbWF4RXhwb25lbnQ6ICszODQKK21pbkV4cG9uZW50OiAtMzgzCityb3VuZGluZzogICAgIGRvd24KKworYWRkeDExMDAgYWRkIDFlKzIgLTFlLTM4MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTAxIGFkZCAxZSsxIC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMDMgYWRkICAgKzEgLTFlLTM4MyAgICAtPiAwLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMDQgYWRkIDFlLTEgLTFlLTM4MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTA1IGFkZCAxZS0yIC0xZS0zODMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMDYgYWRkIDFlLTMgLTFlLTM4MyAgICAtPiAwLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMDcgYWRkIDFlLTQgLTFlLTM4MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTA4IGFkZCAxZS01IC0xZS0zODMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMDkgYWRkIDFlLTYgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CisKK3JvdW5kaW5nOiAgICAgY2VpbGluZworYWRkeDExMTAgYWRkIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CithZGR4MTExMSBhZGQgLTFlKzEgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4MTExMyBhZGQgICAgLTEgKzFlLTM4MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMTQgYWRkIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4MTExNSBhZGQgLTFlLTIgKzFlLTM4MyAgIC0+IC0wLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4MTExNiBhZGQgLTFlLTMgKzFlLTM4MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMTcgYWRkIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4MTExOCBhZGQgLTFlLTUgKzFlLTM4MyAgIC0+IC0wLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4MTExOSBhZGQgLTFlLTYgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CithZGR4MTEyMCBhZGQgKzFlLTM4MyAtMWUrMiAgIC0+IC05OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTIxIGFkZCArMWUtMzgzIC0xZSsxICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTIzIGFkZCArMWUtMzgzICAgIC0xICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4MTEyNCBhZGQgKzFlLTM4MyAtMWUtMSAgIC0+IC0wLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTI1IGFkZCArMWUtMzgzIC0xZS0yICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTI2IGFkZCArMWUtMzgzIC0xZS0zICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4MTEyNyBhZGQgKzFlLTM4MyAtMWUtNCAgIC0+IC0wLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTI4IGFkZCArMWUtMzgzIC0xZS01ICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTI5IGFkZCArMWUtMzgzIC0xZS02ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgICBkb3duCitwcmVjaXNpb246ICAgIDcKK21heEV4cG9uZW50OiArOTYKK21pbkV4cG9uZW50OiAtOTUKK2FkZHgxMTMwIGFkZCAgIDEgICAgICAgICAgICAtMWUtMjAwICAtPiAwLjk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorLS0gc3Vibm9ybWFsIGJvdW5kYXJ5CithZGR4MTEzMSBhZGQgICAxLjAwMDAwMEUtOTQgIC0xZS0yMDAgIC0+ICA5Ljk5OTk5OUUtOTUgIFJvdW5kZWQgSW5leGFjdAorYWRkeDExMzIgYWRkICAgMS4wMDAwMDFFLTk1ICAtMWUtMjAwICAtPiAgMS4wMDAwMDBFLTk1ICBSb3VuZGVkIEluZXhhY3QKK2FkZHgxMTMzIGFkZCAgIDEuMDAwMDAwRS05NSAgLTFlLTIwMCAgLT4gIDkuOTk5OTlFLTk2ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDExMzQgYWRkICAgMC45OTk5OTlFLTk1ICAtMWUtMjAwICAtPiAgOS45OTk5OEUtOTYgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CithZGR4MTEzNSBhZGQgICAwLjAwMTAwMEUtOTUgIC0xZS0yMDAgIC0+ICA5Ljk5RS05OSAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2FkZHgxMTM2IGFkZCAgIDAuMDAwOTk5RS05NSAgLTFlLTIwMCAgLT4gIDkuOThFLTk5ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworYWRkeDExMzcgYWRkICAgMS4wMDAwMDBFLTk1ICAtMWUtMTAxICAtPiAgOS45OTk5OUUtOTYgIFN1Ym5vcm1hbAorYWRkeDExMzggYWRkICAgICAgMTAwMDBFLTEwMSAtMWUtMjAwICAtPiAgOS45OTlFLTk4ICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDExMzkgYWRkICAgICAgIDEwMDBFLTEwMSAtMWUtMjAwICAtPiAgOS45OUUtOTkgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDExNDAgYWRkICAgICAgICAxMDBFLTEwMSAtMWUtMjAwICAtPiAgOS45RS0xMDAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDExNDEgYWRkICAgICAgICAgMTBFLTEwMSAtMWUtMjAwICAtPiAgOUUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDExNDIgYWRkICAgICAgICAgIDFFLTEwMSAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTE0MyBhZGQgICAgICAgICAgMEUtMTAxIC0xZS0yMDAgIC0+IC0wRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxMTQ0IGFkZCAgICAgICAgICAxRS0xMDIgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCithZGR4MTE1MSBhZGQgICAgICAxMDAwMEUtMTAyIC0xZS0yMDAgIC0+ICA5Ljk5RS05OSAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2FkZHgxMTUyIGFkZCAgICAgICAxMDAwRS0xMDIgLTFlLTIwMCAgLT4gIDkuOUUtMTAwICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDExNTMgYWRkICAgICAgICAxMDBFLTEwMiAtMWUtMjAwICAtPiAgOUUtMTAxICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2FkZHgxMTU0IGFkZCAgICAgICAgIDEwRS0xMDIgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDExNTUgYWRkICAgICAgICAgIDFFLTEwMiAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTE1NiBhZGQgICAgICAgICAgMEUtMTAyIC0xZS0yMDAgIC0+IC0wRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxMTU3IGFkZCAgICAgICAgICAxRS0xMDMgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCithZGR4MTE2MCBhZGQgICAgICAgIDEwMEUtMTA1IC0xZS0xMDEgIC0+IC0wRS0xMDEgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDExNjEgYWRkICAgICAgICAxMDBFLTEwNSAtMWUtMjAxICAtPiAgMEUtMTAxIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UKK3ByZWNpc2lvbjogICAxNQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKK2FkZHgxMjAwIGFkZCAxRTE1ICAtMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMEUrMTUgSW5leGFjdCBSb3VuZGVkCithZGR4MTIwMSBhZGQgMUUxNSAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDBFKzE1IEluZXhhY3QgUm91bmRlZAorYWRkeDEyMTAgYWRkIDFFMTUgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMjExIGFkZCAxRTE1ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTIxMiBhZGQgMUUxNSAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEyMTMgYWRkIDFFMTUgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMjE0IGFkZCAxRTE1ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTIxNSBhZGQgMUUxNSAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEyMTYgYWRkIDFFMTUgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMjE3IGFkZCAxRTE1ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTIxOCBhZGQgMUUxNSAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEyMTkgYWRkIDFFMTUgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMjIwIGFkZCAxRTE1ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTIyMSBhZGQgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEyMjIgYWRkIDFFMTUgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMjIzIGFkZCAxRTE1ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTIyNCBhZGQgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEyMjUgYWRkIDFFMTUgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwRSsxNSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMjMwIGFkZCAxRTE1ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogICAxNgorCithZGR4MTMwMCBhZGQgMUUxNiAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzEwIGFkZCAxRTE2ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzMTEgYWRkIDFFMTYgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTMxMiBhZGQgMUUxNiAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzEzIGFkZCAxRTE2ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzMTQgYWRkIDFFMTYgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTMxNSBhZGQgMUUxNiAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzE2IGFkZCAxRTE2ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzMTcgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTMxOCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzE5IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzMjAgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTMyMSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzIyIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzMjMgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTMyNCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzI1IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzMjYgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTMyNyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzI4IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzMjkgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTMzMCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzMxIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzMzIgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTMzMyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzM0IGFkZCAxRTE2ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzMzUgYWRkIDFFMTYgIC0wLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTMzNiBhZGQgMUUxNiAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgxMzM3IGFkZCAxRTE2ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzMzggYWRkIDFFMTYgIC0wLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4MTMzOSBhZGQgMUUxNiAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDEzNDAgYWRkIDFFMTYgIC01MDAwMDAwLjAwMDAxMDAwMSAgIC0+ICA5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4MTM0MSBhZGQgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDEzNDkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNTAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNTEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNTIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNTMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNTQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNTUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNTYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNTcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNTggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNTkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNjAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNjEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNjIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNjMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNjQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDEzNjUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzNjcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzNjggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzNjkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzNzAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzNzEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzNzIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzNzMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzNzQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzNzUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzNzYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzNzcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzNzggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzNzkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzODAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzODEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzODIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzODMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzODQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzODUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzODYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzODcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzODggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzODkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzOTAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzOTEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzOTIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzOTMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzOTQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzOTUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDEzOTYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorCistLSBNb3JlIEdEIGVkZ2UgY2FzZXMsIHdoZXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdW5hZGp1c3RlZAorLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMAorcHJlY2lzaW9uOiAgIDE1Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworYWRkeDE0MDAgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDAxIGFkZCAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0MDIgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0MDMgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDA0IGFkZCAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0MDUgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0MDYgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDA3IGFkZCAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS03CithZGR4MTQwOCBhZGQgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtOAorYWRkeDE0MDkgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTkKK2FkZHgxNDEwIGFkZCAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xMAorYWRkeDE0MTEgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTExCithZGR4MTQxMiBhZGQgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTIKK2FkZHgxNDEzIGFkZCAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xMworYWRkeDE0MTQgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMjM0NTY3ODkwMTIzNDVFLTE0CithZGR4MTQxNSBhZGQgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTUKK2FkZHgxNDE2IGFkZCAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xNgorYWRkeDE0MTcgYWRkICAwIDEuMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMjM0NTY3ODkwMTIzNDVFLTE3CithZGR4MTQxOCBhZGQgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTgKK2FkZHgxNDE5IGFkZCAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xOQorCistLSBzYW1lLCBwcmVjaXNpb24gMTYuLgorcHJlY2lzaW9uOiAgIDE2CithZGR4MTQyMCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQyMSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0MjIgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQyMyBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQyNCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0MjUgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQyNiBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQyNyBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03CithZGR4MTQyOCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04CithZGR4MTQyOSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05CithZGR4MTQzMCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMAorYWRkeDE0MzEgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEKK2FkZHgxNDMyIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyCithZGR4MTQzMyBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMworYWRkeDE0MzQgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQKK2FkZHgxNDM1IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1CithZGR4MTQzNiBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNgorYWRkeDE0MzcgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcKK2FkZHgxNDM4IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4CithZGR4MTQzOSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQorCistLSBzYW1lLCByZXZlcnNlZCAwCithZGR4MTQ0MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDQxIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDQyIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgMCAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQ0MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDQ0IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDQ1IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgMCAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQ0NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDQ3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworYWRkeDE0NDggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04CithZGR4MTQ0OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKK2FkZHgxNDUwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2FkZHgxNDUxIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEKK2FkZHgxNDUyIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKK2FkZHgxNDUzIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2FkZHgxNDU0IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQKK2FkZHgxNDU1IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKK2FkZHgxNDU2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2FkZHgxNDU3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcKK2FkZHgxNDU4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKK2FkZHgxNDU5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgRXMgb24gdGhlIDAKK2FkZHgxNDYwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQ2MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0NjIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDYzIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQ2NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0NjUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDY2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQ2NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0NjggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDY5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQ3MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0NzEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDcyIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTIgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4MTQ3MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDE0NzQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHgxNDc1IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTUgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CistLSBuZXh0IGZvdXIgZmxhZyBSb3VuZGVkIGJlY2F1c2UgdGhlIDAgZXh0ZW5kcyB0aGUgcmVzdWx0CithZGR4MTQ3NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCithZGR4MTQ3NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCithZGR4MTQ3OCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCithZGR4MTQ3OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCisKKy0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKK3JvdW5kaW5nOiAgICBoYWxmX3VwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCithZGR4MTUwMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHgxNTAxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorYWRkeDE1MDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CithZGR4MTUwMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2FkZHgxNTA0IGFkZCAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1MDUgYWRkIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTUwNiBhZGQgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTA3IGFkZCAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworYWRkeDE1MTEgYWRkICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTUxMiBhZGQgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxNTEzIGFkZCAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDE1MTQgYWRkIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCithZGR4MTUxNSBhZGQgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxNTE2IGFkZCAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1MTcgYWRkICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTUxOCBhZGQgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworYWRkeDE1MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4MTUyMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHgxNTIyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorYWRkeDE1MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CithZGR4MTUyNCBhZGQgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTI1IGFkZCAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1MjYgYWRkICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTUyNyBhZGQgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2FkZHgxNTMxIGFkZCAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDE1MzIgYWRkIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTUzMyBhZGQgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxNTM0IGFkZCAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworYWRkeDE1MzUgYWRkICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTUzNiBhZGQgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTM3IGFkZCAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1MzggYWRkIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2FkZHgxNTQwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorYWRkeDE1NDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4MTU0MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2FkZHgxNTQzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorYWRkeDE1NDQgYWRkICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTU0NSBhZGQgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTQ2IGFkZCAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1NDcgYWRkIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCithZGR4MTU1MSBhZGQgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxNTUyIGFkZCAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDE1NTMgYWRkICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTU1NCBhZGQgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2FkZHgxNTU1IGFkZCAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDE1NTYgYWRkIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTU1NyBhZGQgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTU4IGFkZCAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCityb3VuZGluZzogICAgdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2FkZHgxNTYwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorYWRkeDE1NjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4MTU2MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2FkZHgxNTYzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorYWRkeDE1NjQgYWRkICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTU2NSBhZGQgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTY2IGFkZCAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1NjcgYWRkIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCithZGR4MTU3MSBhZGQgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4MTU3MiBhZGQgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4MTU3MyBhZGQgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4MTU3NCBhZGQgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCithZGR4MTU3NSBhZGQgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4MTU3NiBhZGQgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTc3IGFkZCAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1NzggYWRkIC0xRS00MDEgIC0xRS00MDEgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworCityb3VuZGluZzogICAgZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworYWRkeDE1ODAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4MTU4MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHgxNTgyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorYWRkeDE1ODMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CithZGR4MTU4NCBhZGQgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTg1IGFkZCAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1ODYgYWRkICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTU4NyBhZGQgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2FkZHgxNTkxIGFkZCAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDE1OTIgYWRkIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTU5MyBhZGQgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxNTk0IGFkZCAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworYWRkeDE1OTUgYWRkICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTU5NiBhZGQgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNTk3IGFkZCAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE1OTggYWRkIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICBjZWlsaW5nCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCithZGR4MTYwMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHgxNjAxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorYWRkeDE2MDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CithZGR4MTYwMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2FkZHgxNjA0IGFkZCAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE2MDUgYWRkIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTYwNiBhZGQgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHgxNjA3IGFkZCAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworYWRkeDE2MTEgYWRkICAxRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDE2MTIgYWRkIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDE2MTMgYWRkICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTYxNCBhZGQgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2FkZHgxNjE1IGFkZCAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2FkZHgxNjE2IGFkZCAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDE2MTcgYWRkICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTYxOCBhZGQgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqCityb3VuZGluZzogICAgZmxvb3IKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2FkZHgxNjIwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorYWRkeDE2MjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCithZGR4MTYyMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2FkZHgxNjIzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorYWRkeDE2MjQgYWRkICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4MTYyNSBhZGQgLTBFLTQwMCAgIDBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2FkZHgxNjI2IGFkZCAgMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorYWRkeDE2MjcgYWRkIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCithZGR4MTYzMSBhZGQgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHgxNjMyIGFkZCAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDE2MzMgYWRkICAxRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDE2MzQgYWRkIC0xRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworYWRkeDE2MzUgYWRkICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4MTYzNiBhZGQgLTFFLTQwMSAgIDFFLTQwMSAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2FkZHgxNjM3IGFkZCAgMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorYWRkeDE2MzggYWRkIC0xRS00MDEgIC0xRS00MDEgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworCistLSBCaWdEZWNpbWFsIHByb2JsZW0gdGVzdGNhc2VzIDIwMDYuMDEuMjMKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworcm91bmRpbmc6ICBkb3duCitwcmVjaXNpb246IDcKK2FkZHgxNjUxIGFkZCAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYKK3ByZWNpc2lvbjogNgorYWRkeDE2NTIgYWRkICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgorcHJlY2lzaW9uOiA1CithZGR4MTY1MyBhZGQgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDBFKzYgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNAorYWRkeDE2NTQgYWRkICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDBFKzYgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMKK2FkZHgxNjU1IGFkZCAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDBFKzYgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyCithZGR4MTY1NiBhZGQgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjBFKzYgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMQorYWRkeDE2NTcgYWRkICAxMDAwMUUrMiAgLTJFKzEgLT4gMUUrNiAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitwcmVjaXNpb246IDcKK2FkZHgxNjYxIGFkZCAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYKK3ByZWNpc2lvbjogNgorYWRkeDE2NjIgYWRkICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgorcHJlY2lzaW9uOiA1CithZGR4MTY2MyBhZGQgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDFFKzYgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNAorYWRkeDE2NjQgYWRkICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDBFKzYgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMKK2FkZHgxNjY1IGFkZCAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDBFKzYgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyCithZGR4MTY2NiBhZGQgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjBFKzYgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMQorYWRkeDE2NjcgYWRkICAxMDAwMUUrMiAgLTJFKzEgLT4gMUUrNiAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgdXAKK3ByZWNpc2lvbjogNworYWRkeDE2NzEgYWRkICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgorcHJlY2lzaW9uOiA2CithZGR4MTY3MiBhZGQgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2CitwcmVjaXNpb246IDUKK2FkZHgxNjczIGFkZCAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMUUrNiAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0CithZGR4MTY3NCBhZGQgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMUUrNiAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMworYWRkeDE2NzUgYWRkICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMUUrNiAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIKK2FkZHgxNjc2IGFkZCAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMUUrNiAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxCithZGR4MTY3NyBhZGQgIDEwMDAxRSsyICAtMkUrMSAtPiAyRSs2ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAgIDM0Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0MworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCithZGR4MTcwMSAgYWRkIDEzMEUtMiAgICAxMjBFLTIgICAgLT4gMi41MAorYWRkeDE3MDIgIGFkZCAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTAKK2FkZHgxNzAzICBhZGQgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwCithZGR4MTcwNCAgYWRkIDFFMiAgICAgICAxRTQgICAgICAgLT4gMS4wMUUrNAorYWRkeDE3MDUgIHN1YnRyYWN0IDEzMEUtMiAgMTIwRS0yIC0+IDAuMTAKK2FkZHgxNzA2ICBzdWJ0cmFjdCAxMzBFLTIgIDEyRS0xICAtPiAwLjEwCithZGR4MTcwNyAgc3VidHJhY3QgMTMwRS0yICAxRTAgICAgLT4gMC4zMAorYWRkeDE3MDggIHN1YnRyYWN0IDFFMiAgICAgMUU0ICAgIC0+IC05LjlFKzMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBTYW1lIGFzIGFib3ZlLCB1c2luZyBkZWNpbWFsNjQgZGVmYXVsdCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK2FkZHg2MDAxIGFkZCAxICAgICAgIDEgICAgICAgLT4gIDIKK2FkZHg2MDAyIGFkZCAyICAgICAgIDMgICAgICAgLT4gIDUKK2FkZHg2MDAzIGFkZCAnNS43NScgICczLjMnICAgLT4gIDkuMDUKK2FkZHg2MDA0IGFkZCAnNScgICAgICctMycgICAgLT4gIDIKK2FkZHg2MDA1IGFkZCAnLTUnICAgICctMycgICAgLT4gIC04CithZGR4NjAwNiBhZGQgJy03JyAgICAnMi41JyAgIC0+ICAtNC41CithZGR4NjAwNyBhZGQgJzAuNycgICAnMC4zJyAgIC0+ICAxLjAKK2FkZHg2MDA4IGFkZCAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTAKK2FkZHg2MDA5IGFkZCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScKK2FkZHg2MDEwIGFkZCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcKKworYWRkeDYwMTEgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjAxMiBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDAnICAnMC41NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDEzIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDE0IGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDknICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDE1IGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDk5JyAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDE2IGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDk5OScgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDE3IGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTAwMCcgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDE4IGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTAwMScgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDE5IGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTAxJyAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDIwIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTEnICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDYwMjEgYWRkIDAgMSAtPiAxCithZGR4NjAyMiBhZGQgMSAxIC0+IDIKK2FkZHg2MDIzIGFkZCAyIDEgLT4gMworYWRkeDYwMjQgYWRkIDMgMSAtPiA0CithZGR4NjAyNSBhZGQgNCAxIC0+IDUKK2FkZHg2MDI2IGFkZCA1IDEgLT4gNgorYWRkeDYwMjcgYWRkIDYgMSAtPiA3CithZGR4NjAyOCBhZGQgNyAxIC0+IDgKK2FkZHg2MDI5IGFkZCA4IDEgLT4gOQorYWRkeDYwMzAgYWRkIDkgMSAtPiAxMAorCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKK2FkZHg2MDMxIGFkZCAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKK2FkZHg2MDMyIGFkZCAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScKK2FkZHg2MDMzIGFkZCAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcKK2FkZHg2MDM0IGFkZCAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScKKworYWRkeDYwMzUgYWRkICc3MCcgICAgICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDM2IGFkZCAnNzAwJyAgICAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjAzNyBhZGQgJzcwMDAnICAgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYwMzggYWRkICc3MDAwMCcgICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDM5IGFkZCAnNzAwMDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZAorCistLSBzeW1tZXRyeToKK2FkZHg2MDQwIGFkZCAnMTAwMDBlKzE2JyAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDQxIGFkZCAnMTAwMDBlKzE2JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjA0MiBhZGQgJzEwMDAwZSsxNicgICc3MDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDQ0IGFkZCAnMTAwMDBlKzE2JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MDQ1IGFkZCAnMTAwMDBlKzE2JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZAorCithZGR4NjA0NiBhZGQgJzEwMDAwZSs5JyAgJzcnIC0+ICcxMDAwMDAwMDAwMDAwNycKK2FkZHg2MDQ3IGFkZCAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcKK2FkZHg2MDQ4IGFkZCAnMTAwMDBlKzknICAnNzAwJyAtPiAnMTAwMDAwMDAwMDA3MDAnCithZGR4NjA0OSBhZGQgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICcxMDAwMDAwMDAwNzAwMCcKK2FkZHg2MDUwIGFkZCAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcKK2FkZHg2MDUxIGFkZCAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMTAwMDAwMDA3MDAwMDAnCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK2FkZHg2MDUzIGFkZCAnMTInICc3LjAwJyAtPiAnMTkuMDAnCithZGR4NjA1NCBhZGQgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycKK2FkZHg2MDU1IGFkZCAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJworYWRkeDYwNTYgYWRkICcxLjMnICctMi4wNycgLT4gJy0wLjc3JworYWRkeDYwNTcgYWRkICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnCisKKy0tIGZyb20gYWJvdmUKK2FkZHg2MDYwIGFkZCAxICcwLjEnIC0+ICcxLjEnCithZGR4NjA2MSBhZGQgMSAnMC4wMScgLT4gJzEuMDEnCithZGR4NjA2MiBhZGQgMSAnMC4wMDEnIC0+ICcxLjAwMScKK2FkZHg2MDYzIGFkZCAxICcwLjAwMDEnIC0+ICcxLjAwMDEnCithZGR4NjA2NCBhZGQgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnCithZGR4NjA2NSBhZGQgMSAnMC4wMDAwMDEnIC0+ICcxLjAwMDAwMScKK2FkZHg2MDY2IGFkZCAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwMDEnCithZGR4NjA2NyBhZGQgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAwMDEnCisKKy0tIGNhbmNlbGxhdGlvbiB0byBpbnRlZ2VyCithZGR4NjA2OCBhZGQgOTk5OTk5OTk5OTk5OTkxMjM0NTY3ODkgLTk5OTk5OTk5OTk5OTk5RSs5IC0+IDEyMzQ1Njc4OQorLS0gc2ltaWxhciBmcm9tIEZNQSBmdW4KK2FkZHg2MDY5IGFkZCAiLTEyMzQ1Njc4OTAxMjM0NTUuMjM0NTY3ODkwMTIzNDU0IiAiMTIzNDU2Nzg5MDEyMzQ1NiIgLT4gMC43NjU0MzIxMDk4NzY1NDYKKworLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQorYWRkeDYwNzAgYWRkIDEgIDAgICAgLT4gMQorYWRkeDYwNzEgYWRkIDEgMC4gICAgLT4gMQorYWRkeDYwNzIgYWRkIDEgIC4wICAgLT4gMS4wCithZGR4NjA3MyBhZGQgMSAwLjAgICAtPiAxLjAKK2FkZHg2MDc0IGFkZCAxIDAuMDAgIC0+IDEuMDAKK2FkZHg2MDc1IGFkZCAgMCAgMSAgIC0+IDEKK2FkZHg2MDc2IGFkZCAwLiAgMSAgIC0+IDEKK2FkZHg2MDc3IGFkZCAgLjAgMSAgIC0+IDEuMAorYWRkeDYwNzggYWRkIDAuMCAxICAgLT4gMS4wCithZGR4NjA3OSBhZGQgMC4wMCAxICAtPiAxLjAwCisKKy0tIHNvbWUgY2FycmllcworYWRkeDYwODAgYWRkIDk5OTk5OTk5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5OTk5OTk5OQorYWRkeDYwODEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE2IFJvdW5kZWQKK2FkZHg2MDgyIGFkZCAgOTk5OTk5OTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAwMDAwMDAKK2FkZHg2MDgzIGFkZCAgICA5OTk5OTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAwMDAwCithZGR4NjA4NCBhZGQgICAgICA5OTk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwMDAKK2FkZHg2MDg1IGFkZCAgICAgICAgOTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAKK2FkZHg2MDg2IGFkZCAgICAgICAgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwCithZGR4NjA4NyBhZGQgICAgICAgICAgICA5OTk5OSAxICAtPiAxMDAwMDAKK2FkZHg2MDg4IGFkZCAgICAgICAgICAgICAgOTk5IDEgIC0+IDEwMDAKK2FkZHg2MDg5IGFkZCAgICAgICAgICAgICAgICA5IDEgIC0+IDEwCisKKworLS0gbW9yZSBMSFMgc3dhcHMKK2FkZHg2MDkwIGFkZCAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKK2FkZHg2MDkxIGFkZCAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3JworYWRkeDYwOTIgYWRkICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKK2FkZHg2MDkzIGFkZCAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKK2FkZHg2MDk0IGFkZCAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycKK2FkZHg2MDk1IGFkZCAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKK2FkZHg2MDk2IGFkZCAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKK2FkZHg2MDk3IGFkZCAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3JworYWRkeDYwOTggYWRkICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCithZGR4NjA5OSBhZGQgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03JworYWRkeDYxMDAgYWRkICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnCithZGR4NjEwMSBhZGQgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JworYWRkeDYxMDIgYWRkICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1JworYWRkeDYxMDMgYWRkICctNUUtMScgICAgICAgIDAgLT4gICctMC41JworYWRkeDYxMDQgYWRkICctNUUwJyAgICAgICAgIDAgLT4gICctNScKK2FkZHg2MTA1IGFkZCAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJworYWRkeDYxMDYgYWRkICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJworYWRkeDYxMDcgYWRkICctNUUxNScgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcKK2FkZHg2MTA4IGFkZCAnLTVFMTYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgICBSb3VuZGVkCithZGR4NjEwOSBhZGQgJy01RTE3JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICBSb3VuZGVkCithZGR4NjExMCBhZGQgJy01RTE4JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICBSb3VuZGVkCithZGR4NjExMSBhZGQgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyBSb3VuZGVkCisKKy0tIG1vcmUgUkhTIHN3YXBzCithZGR4NjExMyBhZGQgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycKK2FkZHg2MTE0IGFkZCAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnCithZGR4NjExNiBhZGQgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnCithZGR4NjExNyBhZGQgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycKK2FkZHg2MTE5IGFkZCAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3JworYWRkeDYxMjAgYWRkIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnCithZGR4NjEyMSBhZGQgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycKK2FkZHg2MTIyIGFkZCAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnCithZGR4NjEyMyBhZGQgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJworYWRkeDYxMjQgYWRkIDAgICctNUUtNycgICAgICAtPiAgJy01RS03JworYWRkeDYxMjUgYWRkIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScKK2FkZHg2MTI2IGFkZCAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScKK2FkZHg2MTI3IGFkZCAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1JworYWRkeDYxMjggYWRkIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnCithZGR4NjEyOSBhZGQgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnCithZGR4NjEzMCBhZGQgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJworYWRkeDYxMzEgYWRkIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnCithZGR4NjEzMiBhZGQgMCAgJy01RTE1JyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnCithZGR4NjEzMyBhZGQgMCAgJy01RTE2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgICBSb3VuZGVkCithZGR4NjEzNCBhZGQgMCAgJy01RTE3JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgICBSb3VuZGVkCithZGR4NjEzNSBhZGQgMCAgJy01RTE4JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgICBSb3VuZGVkCithZGR4NjEzNiBhZGQgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCisKKy0tIHJlbGF0ZWQKK2FkZHg2MTM3IGFkZCAgMSAgJzBFLTE5JyAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCithZGR4NjEzOCBhZGQgLTEgICcwRS0xOScgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorYWRkeDYxMzkgYWRkICcwRS0xOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2FkZHg2MTQwIGFkZCAnMEUtMTknIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCithZGR4NjE0MSBhZGQgMUUrMTEgICAwLjAwMDAgICAtPiAgJzEwMDAwMDAwMDAwMC4wMDAwJworYWRkeDYxNDIgYWRkIDFFKzExICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQKK2FkZHg2MTQzIGFkZCAwLjAwMCAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnCithZGR4NjE0NCBhZGQgMC4wMDAwICAxRSsxMiAgICAtPiAgJzEwMDAwMDAwMDAwMDAuMDAwJyAgUm91bmRlZAorCistLSBbc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzXQorYWRkeDYxNDYgYWRkICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcKK2FkZHg2MTQ3IGFkZCAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJworYWRkeDYxNDggYWRkICAwICAgICAgJzAuMDAnICAtPiAgJzAuMDAnCithZGR4NjE0OSBhZGQgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJworYWRkeDYxNTAgYWRkICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnCithZGR4NjE1MSBhZGQgJzAuMDAnICAnMDAuMCcgIC0+ICAnMC4wMCcKK2FkZHg2MTUyIGFkZCAnMycgICAgICcuMycgICAgLT4gICczLjMnCithZGR4NjE1MyBhZGQgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJworYWRkeDYxNTQgYWRkICczLjAnICAgJy4zJyAgICAtPiAgJzMuMycKK2FkZHg2MTU1IGFkZCAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJworYWRkeDYxNTYgYWRkICczJyAgICAgJzMnICAgICAtPiAgJzYnCithZGR4NjE1NyBhZGQgJzMnICAgICAnKzMnICAgIC0+ICAnNicKK2FkZHg2MTU4IGFkZCAnMycgICAgICctMycgICAgLT4gICcwJworYWRkeDYxNTkgYWRkICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcKK2FkZHg2MTYwIGFkZCAnMC4wMycgICctMC4wMycgLT4gICcwLjAwJworCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLgorYWRkeDYxNjEgYWRkICcxRSsxMycgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5OScKK2FkZHg2MTYyIGFkZCAnMUUrMTMnICAnMS4xMScgLT4gJzEwMDAwMDAwMDAwMDAxLjExJworYWRkeDYxNjMgYWRkICcxLjExJyAgJzFFKzEzJyAtPiAnMTAwMDAwMDAwMDAwMDEuMTEnCithZGR4NjE2NCBhZGQgJy0xJyAgICAnMUUrMTMnIC0+ICc5OTk5OTk5OTk5OTk5JworYWRkeDYxNjUgYWRkICc3RSsxMycgJy0xJyAgICAtPiAnNjk5OTk5OTk5OTk5OTknCithZGR4NjE2NiBhZGQgJzdFKzEzJyAgJzEuMTEnIC0+ICc3MDAwMDAwMDAwMDAwMS4xMScKK2FkZHg2MTY3IGFkZCAnMS4xMScgICc3RSsxMycgLT4gJzcwMDAwMDAwMDAwMDAxLjExJworYWRkeDYxNjggYWRkICctMScgICAgJzdFKzEzJyAtPiAnNjk5OTk5OTk5OTk5OTknCisKKy0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYKK2FkZHg2MTcwIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MycgLT4gJzEuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTcxIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MicgLT4gJzEuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTcyIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTczIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTc0IGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1OScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTc1IGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1OCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTc2IGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NycgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTc3IGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCithZGR4NjE3OCBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknCithZGR4NjE3OSBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTQnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTgnCithZGR4NjE4MCBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTMnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTcnCithZGR4NjE4MSBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTInIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTYnCithZGR4NjE4MiBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTUnCithZGR4NjE4MyBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTQnCisKKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCithZGR4NjIwMCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknCithZGR4NjIwMSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjAzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjIxMCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMTEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjEyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjIxMyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMTQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjE1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjIxNiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnCithZGR4NjIxNyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMTggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjE5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2FkZHg2MjIwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2FkZHg2MjIxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjIyMiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMjMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjI0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjIyNSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMjYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjI3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjIyOCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMjkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjMwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjIzMSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMzIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjMzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjIzNCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMzUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjM2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2FkZHg2MjM3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCithZGR4NjIzOCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMzkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCithZGR4NjI0MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyNDEgYWRkICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjQyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCithZGR4NjI1MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknCithZGR4NjI1MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyNTIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjUzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjI1NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyNTUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjU2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjI1NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyNTggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjU5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjI2MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyNjEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjYyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjI2MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorYWRkeDYyNjQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjY1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCithZGR4NjI2NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnCithZGR4NjI2NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorYWRkeDYyNjggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjY5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cworcm91bmRpbmc6IGhhbGZfZXZlbgorYWRkeDYzMDEgYWRkICAtMSAgIDEgICAgICAtPiAgIDAKK2FkZHg2MzAyIGFkZCAgIDAgICAxICAgICAgLT4gICAxCithZGR4NjMwMyBhZGQgICAxICAgMSAgICAgIC0+ICAgMgorYWRkeDYzMDQgYWRkICAxMiAgIDEgICAgICAtPiAgMTMKK2FkZHg2MzA1IGFkZCAgOTggICAxICAgICAgLT4gIDk5CithZGR4NjMwNiBhZGQgIDk5ICAgMSAgICAgIC0+IDEwMAorYWRkeDYzMDcgYWRkIDEwMCAgIDEgICAgICAtPiAxMDEKK2FkZHg2MzA4IGFkZCAxMDEgICAxICAgICAgLT4gMTAyCithZGR4NjMwOSBhZGQgIC0xICAtMSAgICAgIC0+ICAtMgorYWRkeDYzMTAgYWRkICAgMCAgLTEgICAgICAtPiAgLTEKK2FkZHg2MzExIGFkZCAgIDEgIC0xICAgICAgLT4gICAwCithZGR4NjMxMiBhZGQgIDEyICAtMSAgICAgIC0+ICAxMQorYWRkeDYzMTMgYWRkICA5OCAgLTEgICAgICAtPiAgOTcKK2FkZHg2MzE0IGFkZCAgOTkgIC0xICAgICAgLT4gIDk4CithZGR4NjMxNSBhZGQgMTAwICAtMSAgICAgIC0+ICA5OQorYWRkeDYzMTYgYWRkIDEwMSAgLTEgICAgICAtPiAxMDAKKworYWRkeDYzMjEgYWRkIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwCithZGR4NjMyMiBhZGQgIDAuMDAgIDAuMDEgICAgLT4gIDAuMDEKK2FkZHg2MzIzIGFkZCAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMgorYWRkeDYzMjQgYWRkICAwLjEyICAwLjAxICAgIC0+ICAwLjEzCithZGR4NjMyNSBhZGQgIDAuOTggIDAuMDEgICAgLT4gIDAuOTkKK2FkZHg2MzI2IGFkZCAgMC45OSAgMC4wMSAgICAtPiAgMS4wMAorYWRkeDYzMjcgYWRkICAxLjAwICAwLjAxICAgIC0+ICAxLjAxCithZGR4NjMyOCBhZGQgIDEuMDEgIDAuMDEgICAgLT4gIDEuMDIKK2FkZHg2MzI5IGFkZCAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMgorYWRkeDYzMzAgYWRkICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxCithZGR4NjMzMSBhZGQgIDAuMDEgLTAuMDEgICAgLT4gIDAuMDAKK2FkZHg2MzMyIGFkZCAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQorYWRkeDYzMzMgYWRkICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3CithZGR4NjMzNCBhZGQgIDAuOTkgLTAuMDEgICAgLT4gIDAuOTgKK2FkZHg2MzM1IGFkZCAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQorYWRkeDYzMzYgYWRkICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwCisKKy0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBhZGRpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudAorYWRkeDYzNDAgYWRkIDFFKzMgICAgMCAgICAtPiAgICAgICAgIDEwMDAKK2FkZHg2MzQxIGFkZCAxRSsxNSAgIDAgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMAorYWRkeDYzNDIgYWRkIDFFKzE2ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgUm91bmRlZAorYWRkeDYzNDMgYWRkIDFFKzE3ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgUm91bmRlZAorLS0gd2hpY2ggc2ltcGx5IGZvbGxvdyBmcm9tIHRoZXNlIGNhc2VzIC4uLgorYWRkeDYzNDQgYWRkIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDEKK2FkZHg2MzQ1IGFkZCAxRSsxNSAgIDEgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMQorYWRkeDYzNDYgYWRkIDFFKzE2ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgSW5leGFjdCBSb3VuZGVkCithZGR4NjM0NyBhZGQgMUUrMTcgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MzQ4IGFkZCAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3CithZGR4NjM0OSBhZGQgMUUrMTUgICA3ICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDcKK2FkZHg2MzUwIGFkZCAxRSsxNiAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMUUrMTYgIEluZXhhY3QgUm91bmRlZAorYWRkeDYzNTEgYWRkIDFFKzE3ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRyeXplcm9zIGNhc2VzCithZGR4NjM2MSAgYWRkIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUKK2FkZHg2MzYyICBhZGQgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwICBSb3VuZGVkCithZGR4NjM2MyAgYWRkIDEwMDAwRSsxIDEwMDAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgIFJvdW5kZWQgSW5leGFjdAorYWRkeDYzNjQgIGFkZCAxMi4zNCAgICAwZS0zOTggIC0+IDEyLjM0MDAwMDAwMDAwMDAwICBSb3VuZGVkCisKKy0tIHVscCByZXBsYWNlbWVudCB0ZXN0cworYWRkeDY0MDAgYWRkICAgMSAgIDc3ZS0xNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3CithZGR4NjQwMSBhZGQgICAxICAgNzdlLTE1ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDc3CithZGR4NjQwMiBhZGQgICAxICAgNzdlLTE2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorYWRkeDY0MDMgYWRkICAgMSAgIDc3ZS0xNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDA0IGFkZCAgIDEgICA3N2UtMTggICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NjQwNSBhZGQgICAxICAgNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDY0MDYgYWRkICAgMSAgIDc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDY0MTAgYWRkICAxMCAgIDc3ZS0xNCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDA3NworYWRkeDY0MTEgYWRkICAxMCAgIDc3ZS0xNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDEyIGFkZCAgMTAgICA3N2UtMTYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NjQxMyBhZGQgIDEwICAgNzdlLTE3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDY0MTQgYWRkICAxMCAgIDc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDE1IGFkZCAgMTAgICA3N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NjQxNiBhZGQgIDEwICAgNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCithZGR4NjQyMCBhZGQgIDc3ZS0xNCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcKK2FkZHg2NDIxIGFkZCAgNzdlLTE1ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcKK2FkZHg2NDIyIGFkZCAgNzdlLTE2ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCithZGR4NjQyMyBhZGQgIDc3ZS0xNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDY0MjQgYWRkICA3N2UtMTggICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDI1IGFkZCAgNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NjQyNiBhZGQgIDc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCithZGR4NjQzMCBhZGQgIDc3ZS0xNCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3CithZGR4NjQzMSBhZGQgIDc3ZS0xNSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorYWRkeDY0MzIgYWRkICA3N2UtMTYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDMzIGFkZCAgNzdlLTE3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NjQzNCBhZGQgIDc3ZS0xOCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDY0MzUgYWRkICA3N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDM2IGFkZCAgNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2FkZHg2NDQwIGFkZCAgIDEgICAtNzdlLTE0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMKK2FkZHg2NDQxIGFkZCAgIDEgICAtNzdlLTE1ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzCithZGR4NjQ0MiBhZGQgICAxICAgLTc3ZS0xNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5MjMKK2FkZHg2NDQzIGFkZCAgIDEgICAtNzdlLTE3ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDQ0IGFkZCAgIDEgICAtNzdlLTE4ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDQ1IGFkZCAgIDEgICAtNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDY0NDYgYWRkICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2FkZHg2NDUwIGFkZCAgMTAgICAtNzdlLTE0ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTIzCithZGR4NjQ1MSBhZGQgIDEwICAgLTc3ZS0xNSAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMKK2FkZHg2NDUyIGFkZCAgMTAgICAtNzdlLTE2ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDUzIGFkZCAgMTAgICAtNzdlLTE3ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDU0IGFkZCAgMTAgICAtNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorYWRkeDY0NTUgYWRkICAxMCAgIC03N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NjQ1NiBhZGQgIDEwICAgLTc3ZS05OSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDY0NjAgYWRkICAtNzdlLTE0ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTkyMworYWRkeDY0NjEgYWRkICAtNzdlLTE1ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMKK2FkZHg2NDYyIGFkZCAgLTc3ZS0xNiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMworYWRkeDY0NjMgYWRkICAtNzdlLTE3ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorYWRkeDY0NjQgYWRkICAtNzdlLTE4ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorYWRkeDY0NjUgYWRkICAtNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NjQ2NiBhZGQgIC03N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDY0NzAgYWRkICAtNzdlLTE0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMKK2FkZHg2NDcxIGFkZCAgLTc3ZS0xNSAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMworYWRkeDY0NzIgYWRkICAtNzdlLTE2ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorYWRkeDY0NzMgYWRkICAtNzdlLTE3ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorYWRkeDY0NzQgYWRkICAtNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NjQ3NSBhZGQgIC03N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDc2IGFkZCAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSB1bHBzCithZGR4NjQ4MCBhZGQgIC0xICAgIDc3ZS0xNCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMworYWRkeDY0ODEgYWRkICAtMSAgICA3N2UtMTUgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzCithZGR4NjQ4MiBhZGQgIC0xICAgIDc3ZS0xNiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzCithZGR4NjQ4MyBhZGQgIC0xICAgIDc3ZS0xNyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorYWRkeDY0ODQgYWRkICAtMSAgICA3N2UtMTggICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDg1IGFkZCAgLTEgICAgNzdlLTE5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDg2IGFkZCAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDY0OTAgYWRkIC0xMCAgICA3N2UtMTQgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzCithZGR4NjQ5MSBhZGQgLTEwICAgIDc3ZS0xNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzCithZGR4NjQ5MiBhZGQgLTEwICAgIDc3ZS0xNiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorYWRkeDY0OTMgYWRkIC0xMCAgICA3N2UtMTcgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDk0IGFkZCAtMTAgICAgNzdlLTE4ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDk1IGFkZCAtMTAgICAgNzdlLTE5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NDk2IGFkZCAtMTAgICAgNzdlLTk5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDY1MDAgYWRkICAgNzdlLTE0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5MjMKK2FkZHg2NTAxIGFkZCAgIDc3ZS0xNSAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTkyMworYWRkeDY1MDIgYWRkICAgNzdlLTE2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMworYWRkeDY1MDMgYWRkICAgNzdlLTE3ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NTA0IGFkZCAgIDc3ZS0xOCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCithZGR4NjUwNSBhZGQgICA3N2UtMTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NjUwNiBhZGQgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2FkZHg2NTEwIGFkZCAgIDc3ZS0xNCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTkyMworYWRkeDY1MTEgYWRkICAgNzdlLTE1ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTkyMworYWRkeDY1MTIgYWRkICAgNzdlLTE2ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NTEzIGFkZCAgIDc3ZS0xNyAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCithZGR4NjUxNCBhZGQgICA3N2UtMTggICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NjUxNSBhZGQgICA3N2UtMTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCithZGR4NjUxNiBhZGQgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKworLS0gbG9uZyBvcGVyYW5kcworYWRkeDY1MjEgYWRkIDEwMTIzNDU2MjM0NTY3ODAwMCAwIC0+IDEuMDEyMzQ1NjIzNDU2NzgwRSsxNyBSb3VuZGVkCithZGR4NjUyMiBhZGQgMCAxMDEyMzQ1NjIzNDU2NzgwMDAgLT4gMS4wMTIzNDU2MjM0NTY3ODBFKzE3IFJvdW5kZWQKK2FkZHg2NTIzIGFkZCAxMDEyMzQ1NjIzNDU2NzgwMCAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTYgUm91bmRlZAorYWRkeDY1MjQgYWRkIDAgMTAxMjM0NTYyMzQ1Njc4MDAgIC0+IDEuMDEyMzQ1NjIzNDU2NzgwRSsxNiBSb3VuZGVkCithZGR4NjUyNSBhZGQgMTAxMjM0NTYyMzQ1Njc4OTAgIDAgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE2IFJvdW5kZWQKK2FkZHg2NTI2IGFkZCAwIDEwMTIzNDU2MjM0NTY3ODkwICAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTYgUm91bmRlZAorYWRkeDY1MjcgYWRkIDEwMTIzNDU2MjM0NTY3ODkxICAwIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NTI4IGFkZCAwIDEwMTIzNDU2MjM0NTY3ODkxICAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjUyOSBhZGQgMTAxMjM0NTYyMzQ1Njc4OTAxIDAgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE3IEluZXhhY3QgUm91bmRlZAorYWRkeDY1MzAgYWRkIDAgMTAxMjM0NTYyMzQ1Njc4OTAxIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NTMxIGFkZCAxMDEyMzQ1NjIzNDU2Nzg5NiAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc5MEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjUzMiBhZGQgMCAxMDEyMzQ1NjIzNDU2Nzg5NiAgLT4gMS4wMTIzNDU2MjM0NTY3OTBFKzE2IEluZXhhY3QgUm91bmRlZAorCistLSB2ZXJpZnkgYSBxdWVyeQorcm91bmRpbmc6ICAgICBkb3duCithZGR4NjU2MSBhZGQgMWUtMzk4IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2NTYyIGFkZCAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQKKy0tIGFuZCB1c2luZyBkZWNpbWFsNjQgYm91bmRzLi4uCityb3VuZGluZzogICAgIGRvd24KK2FkZHg2NTYzIGFkZCAxZS0zODggOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IEluZXhhY3QgUm91bmRlZAorYWRkeDY1NjQgYWRkICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgUm91bmRlZAorCistLSBtb3JlIHplcm9zLCBldGMuCityb3VuZGluZzogaGFsZl9ldmVuCisKK2FkZHg2NzAxIGFkZCA1LjAwIDEuMDBFLTMgLT4gNS4wMDEwMAorYWRkeDY3MDIgYWRkIDAwLjAwIDAuMDAwICAtPiAwLjAwMAorYWRkeDY3MDMgYWRkIDAwLjAwIDBFLTMgICAtPiAwLjAwMAorYWRkeDY3MDQgYWRkIDBFLTMgIDAwLjAwICAtPiAwLjAwMAorCithZGR4NjcxMCBhZGQgMEUrMyAgMDAuMDAgIC0+IDAuMDAKK2FkZHg2NzExIGFkZCAwRSszICAwMC4wICAgLT4gMC4wCithZGR4NjcxMiBhZGQgMEUrMyAgMDAuICAgIC0+IDAKK2FkZHg2NzEzIGFkZCAwRSszICAwMC5FKzEgLT4gMEUrMQorYWRkeDY3MTQgYWRkIDBFKzMgIDAwLkUrMiAtPiAwRSsyCithZGR4NjcxNSBhZGQgMEUrMyAgMDAuRSszIC0+IDBFKzMKK2FkZHg2NzE2IGFkZCAwRSszICAwMC5FKzQgLT4gMEUrMworYWRkeDY3MTcgYWRkIDBFKzMgIDAwLkUrNSAtPiAwRSszCithZGR4NjcxOCBhZGQgMEUrMyAgLTAwLjAgICAtPiAwLjAKK2FkZHg2NzE5IGFkZCAwRSszICAtMDAuICAgIC0+IDAKK2FkZHg2NzMxIGFkZCAwRSszICAtMDAuRSsxIC0+IDBFKzEKKworYWRkeDY3MjAgYWRkIDAwLjAwICAwRSszICAtPiAwLjAwCithZGR4NjcyMSBhZGQgMDAuMCAgIDBFKzMgIC0+IDAuMAorYWRkeDY3MjIgYWRkIDAwLiAgICAwRSszICAtPiAwCithZGR4NjcyMyBhZGQgMDAuRSsxIDBFKzMgIC0+IDBFKzEKK2FkZHg2NzI0IGFkZCAwMC5FKzIgMEUrMyAgLT4gMEUrMgorYWRkeDY3MjUgYWRkIDAwLkUrMyAwRSszICAtPiAwRSszCithZGR4NjcyNiBhZGQgMDAuRSs0IDBFKzMgIC0+IDBFKzMKK2FkZHg2NzI3IGFkZCAwMC5FKzUgMEUrMyAgLT4gMEUrMworYWRkeDY3MjggYWRkIC0wMC4wMCAwRSszICAtPiAwLjAwCithZGR4NjcyOSBhZGQgLTAwLjAgIDBFKzMgIC0+IDAuMAorYWRkeDY3MzAgYWRkIC0wMC4gICAwRSszICAtPiAwCisKK2FkZHg2NzMyIGFkZCAgMCAgICAgMCAgICAgLT4gIDAKK2FkZHg2NzMzIGFkZCAgMCAgICAtMCAgICAgLT4gIDAKK2FkZHg2NzM0IGFkZCAtMCAgICAgMCAgICAgLT4gIDAKK2FkZHg2NzM1IGFkZCAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQorCithZGR4NjczNiBhZGQgIDEgICAgLTEgICAgIC0+ICAwCithZGR4NjczNyBhZGQgLTEgICAgLTEgICAgIC0+IC0yCithZGR4NjczOCBhZGQgIDEgICAgIDEgICAgIC0+ICAyCithZGR4NjczOSBhZGQgLTEgICAgIDEgICAgIC0+ICAwCisKK2FkZHg2NzQxIGFkZCAgMCAgICAtMSAgICAgLT4gLTEKK2FkZHg2NzQyIGFkZCAtMCAgICAtMSAgICAgLT4gLTEKK2FkZHg2NzQzIGFkZCAgMCAgICAgMSAgICAgLT4gIDEKK2FkZHg2NzQ0IGFkZCAtMCAgICAgMSAgICAgLT4gIDEKK2FkZHg2NzQ1IGFkZCAtMSAgICAgMCAgICAgLT4gLTEKK2FkZHg2NzQ2IGFkZCAtMSAgICAtMCAgICAgLT4gLTEKK2FkZHg2NzQ3IGFkZCAgMSAgICAgMCAgICAgLT4gIDEKK2FkZHg2NzQ4IGFkZCAgMSAgICAtMCAgICAgLT4gIDEKKworYWRkeDY3NTEgYWRkICAwLjAgIC0xICAgICAtPiAtMS4wCithZGR4Njc1MiBhZGQgLTAuMCAgLTEgICAgIC0+IC0xLjAKK2FkZHg2NzUzIGFkZCAgMC4wICAgMSAgICAgLT4gIDEuMAorYWRkeDY3NTQgYWRkIC0wLjAgICAxICAgICAtPiAgMS4wCithZGR4Njc1NSBhZGQgLTEuMCAgIDAgICAgIC0+IC0xLjAKK2FkZHg2NzU2IGFkZCAtMS4wICAtMCAgICAgLT4gLTEuMAorYWRkeDY3NTcgYWRkICAxLjAgICAwICAgICAtPiAgMS4wCithZGR4Njc1OCBhZGQgIDEuMCAgLTAgICAgIC0+ICAxLjAKKworYWRkeDY3NjEgYWRkICAwICAgIC0xLjAgICAtPiAtMS4wCithZGR4Njc2MiBhZGQgLTAgICAgLTEuMCAgIC0+IC0xLjAKK2FkZHg2NzYzIGFkZCAgMCAgICAgMS4wICAgLT4gIDEuMAorYWRkeDY3NjQgYWRkIC0wICAgICAxLjAgICAtPiAgMS4wCithZGR4Njc2NSBhZGQgLTEgICAgIDAuMCAgIC0+IC0xLjAKK2FkZHg2NzY2IGFkZCAtMSAgICAtMC4wICAgLT4gLTEuMAorYWRkeDY3NjcgYWRkICAxICAgICAwLjAgICAtPiAgMS4wCithZGR4Njc2OCBhZGQgIDEgICAgLTAuMCAgIC0+ICAxLjAKKworYWRkeDY3NzEgYWRkICAwLjAgIC0xLjAgICAtPiAtMS4wCithZGR4Njc3MiBhZGQgLTAuMCAgLTEuMCAgIC0+IC0xLjAKK2FkZHg2NzczIGFkZCAgMC4wICAgMS4wICAgLT4gIDEuMAorYWRkeDY3NzQgYWRkIC0wLjAgICAxLjAgICAtPiAgMS4wCithZGR4Njc3NSBhZGQgLTEuMCAgIDAuMCAgIC0+IC0xLjAKK2FkZHg2Nzc2IGFkZCAtMS4wICAtMC4wICAgLT4gLTEuMAorYWRkeDY3NzcgYWRkICAxLjAgICAwLjAgICAtPiAgMS4wCithZGR4Njc3OCBhZGQgIDEuMCAgLTAuMCAgIC0+ICAxLjAKKworLS0gU3BlY2lhbHMKK2FkZHg2NzgwIGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CithZGR4Njc4MSBhZGQgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorYWRkeDY3ODIgYWRkIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2FkZHg2NzgzIGFkZCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CithZGR4Njc4NCBhZGQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorYWRkeDY3ODUgYWRkIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2FkZHg2Nzg2IGFkZCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CithZGR4Njc4NyBhZGQgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorYWRkeDY3ODggYWRkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2FkZHg2Nzg5IGFkZCAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CithZGR4Njc5MCBhZGQgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorYWRkeDY3OTEgYWRkICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2FkZHg2NzkyIGFkZCAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CithZGR4Njc5MyBhZGQgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorYWRkeDY3OTQgYWRkICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCithZGR4NjgwMCBhZGQgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithZGR4NjgwMSBhZGQgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorYWRkeDY4MDIgYWRkICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2FkZHg2ODAzIGFkZCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CithZGR4NjgwNCBhZGQgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorYWRkeDY4MDUgYWRkICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2FkZHg2ODA2IGFkZCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CithZGR4NjgwNyBhZGQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorYWRkeDY4MDggYWRkIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2FkZHg2ODA5IGFkZCAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg2ODEwIGFkZCAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5CithZGR4NjgxMSBhZGQgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorYWRkeDY4MTIgYWRkICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2FkZHg2ODEzIGFkZCAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CithZGR4NjgxNCBhZGQgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorYWRkeDY4MTUgYWRkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworYWRkeDY4MjEgYWRkICBOYU4gLUluZiAgICAtPiAgTmFOCithZGR4NjgyMiBhZGQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2FkZHg2ODIzIGFkZCAgTmFOIC0xICAgICAgLT4gIE5hTgorYWRkeDY4MjQgYWRkICBOYU4gLTAgICAgICAtPiAgTmFOCithZGR4NjgyNSBhZGQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2FkZHg2ODI2IGFkZCAgTmFOICAxICAgICAgLT4gIE5hTgorYWRkeDY4MjcgYWRkICBOYU4gIDEwMDAgICAtPiAgTmFOCithZGR4NjgyOCBhZGQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2FkZHg2ODI5IGFkZCAgTmFOICBOYU4gICAgLT4gIE5hTgorYWRkeDY4MzAgYWRkIC1JbmYgIE5hTiAgICAtPiAgTmFOCithZGR4NjgzMSBhZGQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2FkZHg2ODMyIGFkZCAtMSAgICBOYU4gICAgLT4gIE5hTgorYWRkeDY4MzMgYWRkIC0wICAgIE5hTiAgICAtPiAgTmFOCithZGR4NjgzNCBhZGQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2FkZHg2ODM1IGFkZCAgMSAgICBOYU4gICAgLT4gIE5hTgorYWRkeDY4MzYgYWRkICAxMDAwIE5hTiAgICAtPiAgTmFOCithZGR4NjgzNyBhZGQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworYWRkeDY4NDEgYWRkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NDIgYWRkICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NDMgYWRkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NDQgYWRkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NDUgYWRkICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NDYgYWRkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NDcgYWRkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NDggYWRkICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NDkgYWRkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NTAgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NTEgYWRkIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NTIgYWRkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NTMgYWRkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NTQgYWRkIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NTUgYWRkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NTYgYWRkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NTcgYWRkICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NTggYWRkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NTkgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCithZGR4Njg2MSBhZGQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCithZGR4Njg2MiBhZGQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCithZGR4Njg2MyBhZGQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCithZGR4Njg2NCBhZGQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CithZGR4Njg2NSBhZGQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CithZGR4Njg2NiBhZGQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CithZGR4Njg2NyBhZGQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CithZGR4Njg2OCBhZGQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CithZGR4Njg2OSBhZGQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorYWRkeDY4NzEgYWRkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg3MiBhZGQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg2ODczIGFkZCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NzQgYWRkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg3NSBhZGQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg2ODc2IGFkZCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4NzcgYWRkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg3OCBhZGQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg2ODc5IGFkZCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorYWRkeDY4ODAgYWRkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCithZGR4Njg4MSBhZGQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg2ODgyIGFkZCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CithZGR4Njg4MyBhZGQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg2ODg0IGFkZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCithZGR4Njg4NSBhZGQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gbm93IHRoZSBjYXNlIHdoZXJlIHdlIGNhbiBnZXQgdW5kZXJmbG93IGJ1dCB0aGUgcmVzdWx0IGlzIG5vcm1hbAorLS0gW25vdGUgdGhpcyBjYW4ndCBoYXBwZW4gaWYgdGhlIG9wZXJhbmRzIGFyZSBhbHNvIGJvdW5kZWQsIGFzIHdlCistLSBjYW5ub3QgcmVwcmVzZW50IDFFLTM5OSwgZm9yIGV4YW1wbGVdCisKK2FkZHg2NTcxIGFkZCAgICAgICAxRS0zODMgICAgICAgMCAgLT4gMUUtMzgzCithZGR4NjU3MiBhZGQgICAgICAgMUUtMzg0ICAgICAgIDAgIC0+IDFFLTM4NCAgIFN1Ym5vcm1hbAorYWRkeDY1NzMgYWRkICAgICAgIDFFLTM4MyAgMUUtMzg0ICAtPiAxLjFFLTM4MworYWRkeDY1NzQgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzg0ICAtPiAgIDlFLTM4NCBTdWJub3JtYWwKKworLS0gSGVyZSB3ZSBleHBsb3JlIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluCithZGR4NjU3NSBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTggIC0+ICAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKK2FkZHg2NTc2IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OCAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbAorYWRkeDY1Nzcgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2FkZHg2NTc4IHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCithZGR4NjU3OSBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorYWRkeDY1ODAgc3VidHJhY3QgIDFFLTM4MyAgMUUtNDAyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKworLS0gY2hlY2sgb3ZlcmZsb3cgZWRnZSBjYXNlCistLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2FkZHg2OTcyIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2FkZHg2OTczIGFkZCAgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCithZGR4Njk3NCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorYWRkeDY5NzUgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDY5NzYgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDY5NzcgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA4RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDY5NzggYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA3RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDY5NzkgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA2RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDY5ODAgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA1RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDY5ODEgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA0RSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCithZGR4Njk4MiBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDNFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2OTgzIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMkUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorYWRkeDY5ODQgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCisKK2FkZHg2OTg1IGFwcGx5ICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CithZGR4Njk4NiBhZGQgICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2OTg3IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorYWRkeDY5ODggYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2OTg5IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4Njk5MCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLThFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDY5OTEgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC03RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2OTkyIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNkUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCithZGR4Njk5MyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTVFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYWRkeDY5OTQgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC00RSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorYWRkeDY5OTUgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0zRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorYWRkeDY5OTYgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0yRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorYWRkeDY5OTcgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorCistLSBBbmQgZm9yIHJvdW5kIGRvd24gZnVsbCBhbmQgc3Vibm9ybWFsIHJlc3VsdHMKK3JvdW5kaW5nOiAgICAgZG93bgorYWRkeDYxMTAwIGFkZCAxZSsyIC0xZS0zODMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CithZGR4NjExMDEgYWRkIDFlKzEgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4NjExMDMgYWRkICAgKzEgLTFlLTM4MyAgICAtPiAwLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDYxMTA0IGFkZCAxZS0xIC0xZS0zODMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4NjExMDUgYWRkIDFlLTIgLTFlLTM4MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4NjExMDYgYWRkIDFlLTMgLTFlLTM4MyAgICAtPiAwLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDYxMTA3IGFkZCAxZS00IC0xZS0zODMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4NjExMDggYWRkIDFlLTUgLTFlLTM4MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CithZGR4NjExMDkgYWRkIDFlLTYgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CisKK3JvdW5kaW5nOiAgICAgY2VpbGluZworYWRkeDYxMTEwIGFkZCAtMWUrMiArMWUtMzgzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorYWRkeDYxMTExIGFkZCAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHg2MTExMyBhZGQgICAgLTEgKzFlLTM4MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDYxMTE0IGFkZCAtMWUtMSArMWUtMzgzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDYxMTE1IGFkZCAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHg2MTExNiBhZGQgLTFlLTMgKzFlLTM4MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDYxMTE3IGFkZCAtMWUtNCArMWUtMzgzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorYWRkeDYxMTE4IGFkZCAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2FkZHg2MTExOSBhZGQgLTFlLTYgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CisKKy0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlCityb3VuZGluZzogICAgIGhhbGZfZXZlbgorCithZGR4NjEzMDAgYWRkIDFFMTYgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMTAgYWRkIDFFMTYgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMTEgYWRkIDFFMTYgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMTIgYWRkIDFFMTYgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMTMgYWRkIDFFMTYgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMTQgYWRkIDFFMTYgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMTUgYWRkIDFFMTYgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMTYgYWRkIDFFMTYgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMTcgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMTggYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMTkgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMjAgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMjEgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMjIgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMjMgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMjQgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMjUgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMjYgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMjcgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMjggYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMjkgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMzAgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMzEgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMzIgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMzMgYWRkIDFFMTYgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMzQgYWRkIDFFMTYgIC0wLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMzUgYWRkIDFFMTYgIC0wLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMzYgYWRkIDFFMTYgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMzcgYWRkIDFFMTYgIC0wLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMzggYWRkIDFFMTYgIC0wLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzMzkgYWRkIDFFMTYgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCisKK2FkZHg2MTM0MCBhZGQgMUUxNiAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM0MSBhZGQgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworYWRkeDYxMzQ5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNCAgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM1MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNTEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzUyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM1MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNTQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzU1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM1NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNTcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzU4IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM1OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNjAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzYxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM2MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNjMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzY0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM2NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNjcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzY4IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM2OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNzAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzcxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM3MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNzMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzc0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM3NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNzYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzc3IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM3OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzNzkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzgwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM4MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzODIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzgzIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM4NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzODUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzg2IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM4NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzODggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzg5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAxICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM5MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzOTEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzkyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAxICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM5MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCithZGR4NjEzOTQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorYWRkeDYxMzk1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAxICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MTM5NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCisKKy0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkCistLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwCithZGR4NjE0MjAgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDIxIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0MjIgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0MjMgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDI0IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0MjUgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0MjYgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDI3IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKK2FkZHg2MTQyOCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04CithZGR4NjE0MjkgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQorYWRkeDYxNDMwIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCithZGR4NjE0MzEgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEKK2FkZHg2MTQzMiBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgorYWRkeDYxNDMzIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCithZGR4NjE0MzQgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQKK2FkZHg2MTQzNSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQorYWRkeDYxNDM2IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2CithZGR4NjE0MzcgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcKK2FkZHg2MTQzOCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAorYWRkeDYxNDM5IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIHJldmVyc2VkIDAKK2FkZHg2MTQ0MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ0MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0NDIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ0MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ0NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0NDUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ0NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ0NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKK2FkZHg2MTQ0OCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2FkZHg2MTQ0OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKK2FkZHg2MTQ1MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCithZGR4NjE0NTEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorYWRkeDYxNDUyIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKK2FkZHg2MTQ1MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCithZGR4NjE0NTQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorYWRkeDYxNDU1IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKK2FkZHg2MTQ1NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2CithZGR4NjE0NTcgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworYWRkeDYxNDU4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKK2FkZHg2MTQ1OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIEVzIG9uIHRoZSAwCithZGR4NjE0NjAgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ2MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDYyIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0NjMgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ2NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDY1IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0NjYgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ2NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDY4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0NjkgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ3MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDcxIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0NzIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2FkZHg2MTQ3MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorYWRkeDYxNDc0IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CithZGR4NjE0NzUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKKy0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQKK2FkZHg2MTQ3NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCithZGR4NjE0NzcgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorYWRkeDYxNDc4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2FkZHg2MTQ3OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCisKKy0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wCityb3VuZGluZzogICAgaGFsZl91cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworYWRkeDYxNTAwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorYWRkeDYxNTAxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorYWRkeDYxNTAyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorYWRkeDYxNTAzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorYWRkeDYxNTA0IGFkZCAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDYxNTA1IGFkZCAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDYxNTA2IGFkZCAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDYxNTA3IGFkZCAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworYWRkeDYxNTExIGFkZCAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDYxNTEyIGFkZCAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDYxNTEzIGFkZCAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDYxNTE0IGFkZCAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworYWRkeDYxNTE1IGFkZCAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorYWRkeDYxNTE2IGFkZCAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDYxNTE3IGFkZCAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorYWRkeDYxNTE4IGFkZCAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCityb3VuZGluZzogICAgaGFsZl9kb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCithZGR4NjE1MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4NjE1MjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4NjE1MjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CithZGR4NjE1MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CithZGR4NjE1MjQgYWRkICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1MjUgYWRkIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1MjYgYWRkICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1MjcgYWRkIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCithZGR4NjE1MzEgYWRkICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4NjE1MzIgYWRkIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4NjE1MzMgYWRkICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4NjE1MzQgYWRkIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCithZGR4NjE1MzUgYWRkICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4NjE1MzYgYWRkIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1MzcgYWRkICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1MzggYWRkIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2FkZHg2MTU0MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTU0MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTU0MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2FkZHg2MTU0MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2FkZHg2MTU0NCBhZGQgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTU0NSBhZGQgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTU0NiBhZGQgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTU0NyBhZGQgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2FkZHg2MTU1MSBhZGQgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTU1MiBhZGQgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTU1MyBhZGQgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTU1NCBhZGQgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2FkZHg2MTU1NSBhZGQgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTU1NiBhZGQgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTU1NyBhZGQgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTU1OCBhZGQgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIHVwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCithZGR4NjE1NjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4NjE1NjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4NjE1NjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CithZGR4NjE1NjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CithZGR4NjE1NjQgYWRkICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1NjUgYWRkIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1NjYgYWRkICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1NjcgYWRkIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCithZGR4NjE1NzEgYWRkICAxRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDYxNTcyIGFkZCAtMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2FkZHg2MTU3MyBhZGQgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4NjE1NzQgYWRkIC0xRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworYWRkeDYxNTc1IGFkZCAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2FkZHg2MTU3NiBhZGQgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTU3NyBhZGQgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2FkZHg2MTU3OCBhZGQgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKK3JvdW5kaW5nOiAgICBkb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCithZGR4NjE1ODAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4NjE1ODEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4NjE1ODIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CithZGR4NjE1ODMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CithZGR4NjE1ODQgYWRkICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1ODUgYWRkIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1ODYgYWRkICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1ODcgYWRkIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCithZGR4NjE1OTEgYWRkICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4NjE1OTIgYWRkIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4NjE1OTMgYWRkICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4NjE1OTQgYWRkIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCithZGR4NjE1OTUgYWRkICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4NjE1OTYgYWRkIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1OTcgYWRkICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE1OTggYWRkIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICBjZWlsaW5nCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCithZGR4NjE2MDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4NjE2MDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4NjE2MDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CithZGR4NjE2MDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CithZGR4NjE2MDQgYWRkICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE2MDUgYWRkIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE2MDYgYWRkICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE2MDcgYWRkIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCithZGR4NjE2MTEgYWRkICAxRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDYxNjEyIGFkZCAtMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2FkZHg2MTYxMyBhZGQgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTYxNCBhZGQgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2FkZHg2MTYxNSBhZGQgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CithZGR4NjE2MTYgYWRkIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE2MTcgYWRkICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE2MTggYWRkIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKKy0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKgorcm91bmRpbmc6ICAgIGZsb29yCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCithZGR4NjE2MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CithZGR4NjE2MjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCithZGR4NjE2MjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCithZGR4NjE2MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CithZGR4NjE2MjQgYWRkICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCithZGR4NjE2MjUgYWRkIC0wRS00MDAgICAwRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCithZGR4NjE2MjYgYWRkICAwRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCithZGR4NjE2MjcgYWRkIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCithZGR4NjE2MzEgYWRkICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4NjE2MzIgYWRkIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCithZGR4NjE2MzMgYWRkICAxRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworYWRkeDYxNjM0IGFkZCAtMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2FkZHg2MTYzNSBhZGQgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2FkZHg2MTYzNiBhZGQgLTFFLTQwMSAgIDFFLTQwMSAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2FkZHg2MTYzNyBhZGQgIDFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2FkZHg2MTYzOCBhZGQgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorYWRkeDYxNzAxIGFkZCAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTAKK2FkZHg2MTcwMiBhZGQgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwCithZGR4NjE3MDMgYWRkIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMAorYWRkeDYxNzA0IGFkZCAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQKK2FkZHg2MTcwNSBzdWJ0cmFjdCAxMzBFLTIgIDEyMEUtMiAtPiAwLjEwCithZGR4NjE3MDYgc3VidHJhY3QgMTMwRS0yICAxMkUtMSAgLT4gMC4xMAorYWRkeDYxNzA3IHN1YnRyYWN0IDEzMEUtMiAgMUUwICAgIC0+IDAuMzAKK2FkZHg2MTcwOCBzdWJ0cmFjdCAxRTIgICAgIDFFNCAgICAtPiAtOS45RSszCisKKy0tIEdhcHB5IGNvZWZmaWNpZW50czsgY2hlY2sgcmVzaWR1ZSBoYW5kbGluZyBldmVuIHdpdGggZnVsbCBjb2VmZmljaWVudCBnYXAKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworYWRkeDYyMDAxIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM0NTY3ODkwMTIzNDU3CithZGR4NjIwMDIgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgMC42ICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcgIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDAzIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjAwNCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwMDUgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDA2IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjAwNyBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwMDggYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDA5IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjAxMCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwMTEgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDEyIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjAxMyBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwMTQgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTMgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDE1IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjAxNiBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwMTcgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDE4IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjAxOSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwMjAgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTkgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDIxIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcAorYWRkeDYyMDMwIGFkZCAxMjM0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OQorYWRkeDYyMDMxIGFkZCAxMjM0NTY3OCAwLjEgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xCithZGR4NjIwMzIgYWRkIDEyMzQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyCithZGR4NjIwMzMgYWRkIDEyMzQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMworYWRkeDYyMDM0IGFkZCAxMjM0NTY3OCAwLjEyMzQgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0CithZGR4NjIwMzUgYWRkIDEyMzQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1CithZGR4NjIwMzYgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1NgorYWRkeDYyMDM3IGFkZCAxMjM0NTY3OCAwLjEyMzQ1NjcgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3CithZGR4NjIwMzggYWRkIDEyMzQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4CithZGR4NjIwMzkgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDQwIGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA0MSBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNDIgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDQzIGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAxICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA0NCBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNDUgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDQ2IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAxICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA0NyBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNDggYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDQ5IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMTIzNDU2Cityb3VuZGluZzogaGFsZl9ldmVuCithZGR4NjIwNTAgYWRkIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDUxIGFkZCAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA1MiBhZGQgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNTMgYWRkIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDU0IGFkZCAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA1NSBhZGQgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNTYgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDU3IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA2MCBhZGQgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNjEgYWRkIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDYyIGFkZCAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA2MyBhZGQgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNjQgYWRkIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDY1IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA2NiBhZGQgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNjcgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQorcm91bmRpbmc6IHVwCithZGR4NjIwNzAgYWRkIDEyMzQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxCithZGR4NjIwNzEgYWRkIDEyMzQ1Njc4IDFFLTkgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDcyIGFkZCAxMjM0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA3MyBhZGQgMTIzNDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNzQgYWRkIDEyMzQ1Njc4IDFFLTEyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDc1IGFkZCAxMjM0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA3NiBhZGQgMTIzNDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwNzcgYWRkIDEyMzQ1Njc4IDFFLTE1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDc4IGFkZCAxMjM0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA3OSBhZGQgMTIzNDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwODAgYWRkIDEyMzQ1Njc4IDFFLTE4ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDgxIGFkZCAxMjM0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA4MiBhZGQgMTIzNDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwODMgYWRkIDEyMzQ1Njc4IDFFLTI1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDg0IGFkZCAxMjM0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA4NSBhZGQgMTIzNDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwODYgYWRkIDEyMzQ1Njc4IDFFLTMyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorYWRkeDYyMDg3IGFkZCAxMjM0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHg2MjA4OCBhZGQgMTIzNDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCithZGR4NjIwODkgYWRkIDEyMzQ1Njc4IDFFLTM1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorCistLSBwYXlsb2FkIGRlY2FwaXRhdGUKK3ByZWNpc2lvbjogNQorYWRkeDYyMTAwIGFkZCAgICAgIDExICBzTmFOMTIzNDU2Nzg5IC0+ICBOYU41Njc4OSAgSW52YWxpZF9vcGVyYXRpb24KK2FkZHg2MjEwMSBhZGQgICAgIC0xMSAtc05hTjEyMzQ1Njc4OSAtPiAtTmFONTY3ODkgIEludmFsaWRfb3BlcmF0aW9uCithZGR4NjIxMDIgYWRkICAgICAgMTEgICBOYU4xMjM0NTY3ODkgLT4gIE5hTjU2Nzg5CithZGR4NjIxMDMgYWRkICAgICAtMTEgIC1OYU4xMjM0NTY3ODkgLT4gLU5hTjU2Nzg5CisKKy0tIE51bGwgdGVzdHMKK2FkZHg5OTkwIGFkZCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FkZHg5OTkxIGFkZCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvYW5kLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2FuZC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwY2M3ODYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2FuZC5kZWNUZXN0CkBAIC0wLDAgKzEsMzM4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGFuZC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKK2FuZHgwMDEgYW5kICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwCithbmR4MDAyIGFuZCAgICAgICAgICAgICAwICAgIDEgLT4gICAgMAorYW5keDAwMyBhbmQgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDAKK2FuZHgwMDQgYW5kICAgICAgICAgICAgIDEgICAgMSAtPiAgICAxCithbmR4MDA1IGFuZCAgICAgICAgICAxMTAwIDEwMTAgLT4gMTAwMAorYW5keDAwNiBhbmQgICAgICAgICAgMTExMSAgIDEwIC0+ICAgMTAKK2FuZHgwMDcgYW5kICAgICAgICAgIDExMTEgMTAxMCAtPiAxMDEwCisKKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCithbmR4MDEwIGFuZCAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCithbmR4MDExIGFuZCAwMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgICAgICAgICAwCithbmR4MDEyIGFuZCAxMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCithbmR4MDEzIGFuZCAxMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwCithbmR4MDE0IGFuZCAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCithbmR4MDE1IGFuZCAwMDAwMDAwMDAgMDEwMDAwMDAwIC0+ICAgICAgICAgICAwCithbmR4MDE2IGFuZCAwMTAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCithbmR4MDE3IGFuZCAwMTAwMDAwMDAgMDEwMDAwMDAwIC0+ICAgIDEwMDAwMDAwCisKKy0tIFZhcmlvdXMgbGVuZ3RocworLS0gICAgICAgICAgMTIzNDU2Nzg5ICAgICAxMjM0NTY3ODkgICAgICAxMjM0NTY3ODkKK2FuZHgwMjEgYW5kIDExMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTExMTExMTExCithbmR4MDIyIGFuZCAxMTExMTExMTExMTEgIDExMTExMTExMSAgLT4gIDExMTExMTExMQorYW5keDAyMyBhbmQgMTExMTExMTExMTExICAgMTExMTExMTEgIC0+ICAgMTExMTExMTEKK2FuZHgwMjQgYW5kIDExMTExMTExMSAgICAgIDExMTExMTExICAtPiAgIDExMTExMTExCithbmR4MDI1IGFuZCAxMTExMTExMTEgICAgICAgMTExMTExMSAgLT4gICAgMTExMTExMQorYW5keDAyNiBhbmQgMTExMTExMTExMTExICAgICAxMTExMTEgIC0+ICAgICAxMTExMTEKK2FuZHgwMjcgYW5kIDExMTExMTExMTExMSAgICAgIDExMTExICAtPiAgICAgIDExMTExCithbmR4MDI4IGFuZCAxMTExMTExMTExMTEgICAgICAgMTExMSAgLT4gICAgICAgMTExMQorYW5keDAyOSBhbmQgMTExMTExMTExMTExICAgICAgICAxMTEgIC0+ICAgICAgICAxMTEKK2FuZHgwMzEgYW5kIDExMTExMTExMTExMSAgICAgICAgIDExICAtPiAgICAgICAgIDExCithbmR4MDMyIGFuZCAxMTExMTExMTExMTEgICAgICAgICAgMSAgLT4gICAgICAgICAgMQorYW5keDAzMyBhbmQgMTExMTExMTExMTExIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK2FuZHgwMzQgYW5kIDExMTExMTExMTExIDExMTExMTExMTExICAtPiAgMTExMTExMTExCithbmR4MDM1IGFuZCAxMTExMTExMTExIDExMTExMTExMTExMSAgLT4gIDExMTExMTExMQorYW5keDAzNiBhbmQgMTExMTExMTExIDExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKKworYW5keDA0MCBhbmQgMTExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK2FuZHgwNDEgYW5kICAxMTExMTExMSAgMTExMTExMTExMTExICAtPiAgIDExMTExMTExCithbmR4MDQyIGFuZCAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gICAxMTExMTExMQorYW5keDA0MyBhbmQgICAxMTExMTExICAgICAxMTExMTExMTEgIC0+ICAgIDExMTExMTEKK2FuZHgwNDQgYW5kICAgIDExMTExMSAgICAgMTExMTExMTExICAtPiAgICAgMTExMTExCithbmR4MDQ1IGFuZCAgICAgMTExMTEgICAgIDExMTExMTExMSAgLT4gICAgICAxMTExMQorYW5keDA0NiBhbmQgICAgICAxMTExICAgICAxMTExMTExMTEgIC0+ICAgICAgIDExMTEKK2FuZHgwNDcgYW5kICAgICAgIDExMSAgICAgMTExMTExMTExICAtPiAgICAgICAgMTExCithbmR4MDQ4IGFuZCAgICAgICAgMTEgICAgIDExMTExMTExMSAgLT4gICAgICAgICAxMQorYW5keDA0OSBhbmQgICAgICAgICAxICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgIDEKKworYW5keDA1MCBhbmQgMTExMTExMTExMSAgMSAgLT4gIDEKK2FuZHgwNTEgYW5kICAxMTExMTExMTEgIDEgIC0+ICAxCithbmR4MDUyIGFuZCAgIDExMTExMTExICAxICAtPiAgMQorYW5keDA1MyBhbmQgICAgMTExMTExMSAgMSAgLT4gIDEKK2FuZHgwNTQgYW5kICAgICAxMTExMTEgIDEgIC0+ICAxCithbmR4MDU1IGFuZCAgICAgIDExMTExICAxICAtPiAgMQorYW5keDA1NiBhbmQgICAgICAgMTExMSAgMSAgLT4gIDEKK2FuZHgwNTcgYW5kICAgICAgICAxMTEgIDEgIC0+ICAxCithbmR4MDU4IGFuZCAgICAgICAgIDExICAxICAtPiAgMQorYW5keDA1OSBhbmQgICAgICAgICAgMSAgMSAgLT4gIDEKKworYW5keDA2MCBhbmQgMTExMTExMTExMSAgMCAgLT4gIDAKK2FuZHgwNjEgYW5kICAxMTExMTExMTEgIDAgIC0+ICAwCithbmR4MDYyIGFuZCAgIDExMTExMTExICAwICAtPiAgMAorYW5keDA2MyBhbmQgICAgMTExMTExMSAgMCAgLT4gIDAKK2FuZHgwNjQgYW5kICAgICAxMTExMTEgIDAgIC0+ICAwCithbmR4MDY1IGFuZCAgICAgIDExMTExICAwICAtPiAgMAorYW5keDA2NiBhbmQgICAgICAgMTExMSAgMCAgLT4gIDAKK2FuZHgwNjcgYW5kICAgICAgICAxMTEgIDAgIC0+ICAwCithbmR4MDY4IGFuZCAgICAgICAgIDExICAwICAtPiAgMAorYW5keDA2OSBhbmQgICAgICAgICAgMSAgMCAgLT4gIDAKKworYW5keDA3MCBhbmQgMSAgMTExMTExMTExMSAgLT4gIDEKK2FuZHgwNzEgYW5kIDEgICAxMTExMTExMTEgIC0+ICAxCithbmR4MDcyIGFuZCAxICAgIDExMTExMTExICAtPiAgMQorYW5keDA3MyBhbmQgMSAgICAgMTExMTExMSAgLT4gIDEKK2FuZHgwNzQgYW5kIDEgICAgICAxMTExMTEgIC0+ICAxCithbmR4MDc1IGFuZCAxICAgICAgIDExMTExICAtPiAgMQorYW5keDA3NiBhbmQgMSAgICAgICAgMTExMSAgLT4gIDEKK2FuZHgwNzcgYW5kIDEgICAgICAgICAxMTEgIC0+ICAxCithbmR4MDc4IGFuZCAxICAgICAgICAgIDExICAtPiAgMQorYW5keDA3OSBhbmQgMSAgICAgICAgICAgMSAgLT4gIDEKKworYW5keDA4MCBhbmQgMCAgMTExMTExMTExMSAgLT4gIDAKK2FuZHgwODEgYW5kIDAgICAxMTExMTExMTEgIC0+ICAwCithbmR4MDgyIGFuZCAwICAgIDExMTExMTExICAtPiAgMAorYW5keDA4MyBhbmQgMCAgICAgMTExMTExMSAgLT4gIDAKK2FuZHgwODQgYW5kIDAgICAgICAxMTExMTEgIC0+ICAwCithbmR4MDg1IGFuZCAwICAgICAgIDExMTExICAtPiAgMAorYW5keDA4NiBhbmQgMCAgICAgICAgMTExMSAgLT4gIDAKK2FuZHgwODcgYW5kIDAgICAgICAgICAxMTEgIC0+ICAwCithbmR4MDg4IGFuZCAwICAgICAgICAgIDExICAtPiAgMAorYW5keDA4OSBhbmQgMCAgICAgICAgICAgMSAgLT4gIDAKKworYW5keDA5MCBhbmQgMDExMTExMTExICAxMTExMTExMTEgIC0+ICAgMTExMTExMTEKK2FuZHgwOTEgYW5kIDEwMTExMTExMSAgMTExMTExMTExICAtPiAgMTAxMTExMTExCithbmR4MDkyIGFuZCAxMTAxMTExMTEgIDExMTExMTExMSAgLT4gIDExMDExMTExMQorYW5keDA5MyBhbmQgMTExMDExMTExICAxMTExMTExMTEgIC0+ICAxMTEwMTExMTEKK2FuZHgwOTQgYW5kIDExMTEwMTExMSAgMTExMTExMTExICAtPiAgMTExMTAxMTExCithbmR4MDk1IGFuZCAxMTExMTAxMTEgIDExMTExMTExMSAgLT4gIDExMTExMDExMQorYW5keDA5NiBhbmQgMTExMTExMDExICAxMTExMTExMTEgIC0+ICAxMTExMTEwMTEKK2FuZHgwOTcgYW5kIDExMTExMTEwMSAgMTExMTExMTExICAtPiAgMTExMTExMTAxCithbmR4MDk4IGFuZCAxMTExMTExMTAgIDExMTExMTExMSAgLT4gIDExMTExMTExMAorCithbmR4MTAwIGFuZCAxMTExMTExMTEgIDAxMTExMTExMSAgLT4gICAxMTExMTExMQorYW5keDEwMSBhbmQgMTExMTExMTExICAxMDExMTExMTEgIC0+ICAxMDExMTExMTEKK2FuZHgxMDIgYW5kIDExMTExMTExMSAgMTEwMTExMTExICAtPiAgMTEwMTExMTExCithbmR4MTAzIGFuZCAxMTExMTExMTEgIDExMTAxMTExMSAgLT4gIDExMTAxMTExMQorYW5keDEwNCBhbmQgMTExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKK2FuZHgxMDUgYW5kIDExMTExMTExMSAgMTExMTEwMTExICAtPiAgMTExMTEwMTExCithbmR4MTA2IGFuZCAxMTExMTExMTEgIDExMTExMTAxMSAgLT4gIDExMTExMTAxMQorYW5keDEwNyBhbmQgMTExMTExMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMDEKK2FuZHgxMDggYW5kIDExMTExMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTEwCisKKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducworYW5keDIyMCBhbmQgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMjEgYW5kIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjIyIGFuZCA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIyMyBhbmQgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMjQgYW5kIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjI1IGFuZCAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIyNiBhbmQgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMjcgYW5kIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjI4IGFuZCA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIyOSBhbmQgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyMzAgYW5kIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjMxIGFuZCA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDIzMiBhbmQgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK2FuZHgyNDAgYW5kICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjQxIGFuZCAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI0MiBhbmQgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNDMgYW5kIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjQ0IGFuZCAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QKK2FuZHgyNTAgYW5kICAyMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNTEgYW5kICA3MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNTIgYW5kICA4MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNTMgYW5kICA5MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNTQgYW5kICAyMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNTUgYW5kICA3MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNTYgYW5kICA4MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNTcgYW5kICA5MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNTggYW5kICAxMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNTkgYW5kICAxMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNjAgYW5kICAxMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNjEgYW5kICAxMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNjIgYW5kICAwMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNjMgYW5kICAwMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNjQgYW5kICAwMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNjUgYW5kICAwMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNELTEKK2FuZHgyNzAgYW5kICAwMjAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNzEgYW5kICAwNzAxMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNzIgYW5kICAwODAwMTAwMDAgMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNzMgYW5kICAwOTAwMDEwMDAgMTAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNzQgYW5kICAxMDAwMDAxMDAgMDIwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNzUgYW5kICAxMDAwMDAwMDAgMDcwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNzYgYW5kICAxMDAwMDAwMTAgMDgwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyNzcgYW5kICAxMDAwMDAwMDAgMDkwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTFNECithbmR4MjgwIGFuZCAgMDAxMDAwMDAyIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjgxIGFuZCAgMDAwMDAwMDA3IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjgyIGFuZCAgMDAwMDAwMDA4IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4MjgzIGFuZCAgMDAwMDAwMDA5IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjg0IGFuZCAgMTAwMDAwMDAwIDAwMDEwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjg1IGFuZCAgMTAwMTAwMDAwIDAwMTAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjg2IGFuZCAgMTAwMDEwMDAwIDAxMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjg3IGFuZCAgMTAwMDAxMDAwIDEwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQorYW5keDI4OCBhbmQgIDAwMTAyMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI4OSBhbmQgIDAwMDA3MDAwMSAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI5MCBhbmQgIDAwMDA4MDAwMCAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI5MSBhbmQgIDAwMDA5MDAwMCAxMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI5MiBhbmQgIDEwMDAwMDAxMCAwMDAwMjAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI5MyBhbmQgIDEwMDEwMDAwMCAwMDAwNzAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI5NCBhbmQgIDEwMDAxMDEwMCAwMDAwODAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI5NSBhbmQgIDEwMDAwMTAwMCAwMDAwOTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc2lnbnMKK2FuZHgyOTYgYW5kIC0xMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4Mjk3IGFuZCAtMTAwMDAxMDAwICAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDI5OCBhbmQgIDEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgyOTkgYW5kICAxMDAwMDEwMDAgIDAwMDAxMTAwMCAtPiAgMTAwMAorCistLSBObWF4LCBObWluLCBOdGlueQorYW5keDMzMSBhbmQgIDIgICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDMzMiBhbmQgIDMgICAxRS05OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDMzMyBhbmQgIDQgICAxLjAwMDAwMDAwRS05OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDMzNCBhbmQgIDUgICAxRS0xMDA3ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDMzNSBhbmQgIDYgICAtMUUtMTAwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDMzNiBhbmQgIDcgICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDMzNyBhbmQgIDggICAtMUUtOTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDMzOCBhbmQgIDkgICAtOS45OTk5OTk5OUUrOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM0MSBhbmQgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM0MiBhbmQgIDFFLTk5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM0MyBhbmQgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM0NCBhbmQgIDFFLTEwMDcgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM0NSBhbmQgIC0xRS0xMDA3ICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM0NiBhbmQgIC0xLjAwMDAwMDAwRS05OTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM0NyBhbmQgIC0xRS05OTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDM0OCBhbmQgIC05Ljk5OTk5OTk5RSs5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKK2FuZHgzNjEgYW5kICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNjIgYW5kICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNjMgYW5kICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNjQgYW5kICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNjUgYW5kICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNjYgYW5kICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNzEgYW5kICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNzIgYW5kICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNzMgYW5kICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNzQgYW5kICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNzUgYW5kICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHgzNzYgYW5kICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgorYW5keDc4MCBhbmQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDc4MSBhbmQgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDc4MiBhbmQgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDc4MyBhbmQgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDc4NCBhbmQgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDc4NSBhbmQgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDc4NiBhbmQgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDc4NyBhbmQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDc4OCBhbmQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDc4OSBhbmQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDc5MCBhbmQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDc5MSBhbmQgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDc5MiBhbmQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDc5MyBhbmQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorYW5keDc5NCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCithbmR4ODAwIGFuZCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODAxIGFuZCAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODAyIGFuZCAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODAzIGFuZCAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODA0IGFuZCAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODA1IGFuZCAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODA2IGFuZCAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODA3IGFuZCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODA4IGFuZCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODA5IGFuZCAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODEwIGFuZCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODExIGFuZCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODEyIGFuZCAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODEzIGFuZCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODE0IGFuZCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODE1IGFuZCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2FuZHg4MjEgYW5kICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MjIgYW5kICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MjMgYW5kICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MjQgYW5kICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MjUgYW5kICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MjYgYW5kICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MjcgYW5kICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MjggYW5kICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MjkgYW5kICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MzAgYW5kIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MzEgYW5kIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MzIgYW5kIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MzMgYW5kIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MzQgYW5kICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MzUgYW5kICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MzYgYW5kICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4MzcgYW5kICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworYW5keDg0MSBhbmQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODQyIGFuZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NDMgYW5kICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg0NCBhbmQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODQ1IGFuZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NDYgYW5kICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg0NyBhbmQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODQ4IGFuZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NDkgYW5kICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg1MCBhbmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODUxIGFuZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NTIgYW5kIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg1MyBhbmQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODU0IGFuZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NTUgYW5kICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg1NiBhbmQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCithbmR4ODU3IGFuZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NTggYW5kICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorYW5keDg1OSBhbmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2FuZHg4NjEgYW5kICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NjIgYW5kICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NjMgYW5kICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NjQgYW5kICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NjUgYW5kICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NjYgYW5kIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NjcgYW5kIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NjggYW5kICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NjkgYW5kICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NzEgYW5kICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NzIgYW5kICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NzMgYW5kICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NzQgYW5kICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NzUgYW5kICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NzYgYW5kICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NzcgYW5kIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NzggYW5kIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4NzkgYW5kICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4ODAgYW5kICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4ODEgYW5kICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4ODIgYW5kIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4ODMgYW5kIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4ODQgYW5kICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2FuZHg4ODUgYW5kICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvYmFzZS5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9iYXNlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0Y2VmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvYmFzZS5kZWNUZXN0CkBAIC0wLDAgKzEsMTQxMSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBiYXNlLmRlY1Rlc3QgLS0gYmFzZSBkZWNpbWFsIDwtLT4gc3RyaW5nIGNvbnZlcnNpb25zICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CitleHRlbmRlZDogICAgMQorCistLSBUaGlzIGZpbGUgdGVzdHMgYmFzZSBjb252ZXJzaW9ucyBmcm9tIHN0cmluZyB0byBhIGRlY2ltYWwgbnVtYmVyCistLSBhbmQgYmFjayB0byBhIHN0cmluZyAoaW4gZWl0aGVyIFNjaWVudGlmaWMgb3IgRW5naW5lZXJpbmcgZm9ybSkKKworLS0gTm90ZSB0aGF0IHVubGlrZSBvdGhlciBvcGVyYXRpb25zIHRoZSBvcGVyYW5kIGlzIHN1YmplY3QgdG8gcm91bmRpbmcKKy0tIHRvIGNvbmZvcm0gdG8gZW1heCBhbmQgcHJlY2lzaW9uIHNldHRpbmdzICh0aGF0IGlzLCBudW1iZXJzIHdpbGwKKy0tIGNvbmZvcm0gdG8gcnVsZXMgYW5kIGV4cG9uZW50IHdpbGwgYmUgaW4gcGVybWl0dGVkIHJhbmdlKS4KKworcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKKworYmFzeDAwMSB0b1NjaSAgICAgICAwIC0+IDAKK2Jhc3gwMDIgdG9TY2kgICAgICAgMSAtPiAxCitiYXN4MDAzIHRvU2NpICAgICAxLjAgLT4gMS4wCitiYXN4MDA0IHRvU2NpICAgIDEuMDAgLT4gMS4wMAorYmFzeDAwNSB0b1NjaSAgICAgIDEwIC0+IDEwCitiYXN4MDA2IHRvU2NpICAgIDEwMDAgLT4gMTAwMAorYmFzeDAwNyB0b1NjaSAgICAxMC4wIC0+IDEwLjAKK2Jhc3gwMDggdG9TY2kgICAgMTAuMSAtPiAxMC4xCitiYXN4MDA5IHRvU2NpICAgIDEwLjQgLT4gMTAuNAorYmFzeDAxMCB0b1NjaSAgICAxMC41IC0+IDEwLjUKK2Jhc3gwMTEgdG9TY2kgICAgMTAuNiAtPiAxMC42CitiYXN4MDEyIHRvU2NpICAgIDEwLjkgLT4gMTAuOQorYmFzeDAxMyB0b1NjaSAgICAxMS4wIC0+IDExLjAKK2Jhc3gwMTQgdG9TY2kgIDEuMjM0IC0+IDEuMjM0CitiYXN4MDE1IHRvU2NpICAwLjEyMyAtPiAwLjEyMworYmFzeDAxNiB0b1NjaSAgMC4wMTIgLT4gMC4wMTIKK2Jhc3gwMTcgdG9TY2kgIC0wICAgIC0+IC0wCitiYXN4MDE4IHRvU2NpICAtMC4wICAtPiAtMC4wCitiYXN4MDE5IHRvU2NpIC0wMC4wMCAtPiAtMC4wMAorCitiYXN4MDIxIHRvU2NpICAgICAtMSAtPiAtMQorYmFzeDAyMiB0b1NjaSAgIC0xLjAgLT4gLTEuMAorYmFzeDAyMyB0b1NjaSAgIC0wLjEgLT4gLTAuMQorYmFzeDAyNCB0b1NjaSAgIC05LjEgLT4gLTkuMQorYmFzeDAyNSB0b1NjaSAgIC05LjExIC0+IC05LjExCitiYXN4MDI2IHRvU2NpICAgLTkuMTE5IC0+IC05LjExOQorYmFzeDAyNyB0b1NjaSAgIC05Ljk5OSAtPiAtOS45OTkKKworYmFzeDAzMCB0b1NjaSAgJzEyMzQ1Njc4OS4xMjM0NTYnICAgLT4gJzEyMzQ1Njc4OS4xMjM0NTYnCitiYXN4MDMxIHRvU2NpICAnMTIzNDU2Nzg5LjAwMDAwMCcgICAtPiAnMTIzNDU2Nzg5LjAwMDAwMCcKK2Jhc3gwMzIgdG9TY2kgICAnMTIzNDU2Nzg5MTIzNDU2JyAgIC0+ICcxMjM0NTY3ODkxMjM0NTYnCitiYXN4MDMzIHRvU2NpICAgJzAuMDAwMDEyMzQ1Njc4OScgICAtPiAnMC4wMDAwMTIzNDU2Nzg5JworYmFzeDAzNCB0b1NjaSAgJzAuMDAwMDAxMjM0NTY3ODknICAgLT4gJzAuMDAwMDAxMjM0NTY3ODknCitiYXN4MDM1IHRvU2NpICcwLjAwMDAwMDEyMzQ1Njc4OScgICAtPiAnMS4yMzQ1Njc4OUUtNycKK2Jhc3gwMzYgdG9TY2kgJzAuMDAwMDAwMDEyMzQ1Njc4OScgIC0+ICcxLjIzNDU2Nzg5RS04JworCitiYXN4MDM3IHRvU2NpICcwLjEyMzQ1Njc4OTAxMjM0NCcgICAtPiAnMC4xMjM0NTY3ODkwMTIzNDQnCitiYXN4MDM4IHRvU2NpICcwLjEyMzQ1Njc4OTAxMjM0NScgICAtPiAnMC4xMjM0NTY3ODkwMTIzNDUnCisKKy0tIFN0cmluZyBbbWFueSBtb3JlIGV4YW1wbGVzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCBlbHNld2hlcmVdCistLSBzdHJpbmdzIHdpdGhvdXQgRSBjYW5ub3QgZ2VuZXJhdGUgRSBpbiByZXN1bHQKK2Jhc3gwNDAgdG9TY2kgIjEyIiAgICAgICAgLT4gJzEyJworYmFzeDA0MSB0b1NjaSAiLTc2IiAgICAgICAtPiAnLTc2JworYmFzeDA0MiB0b1NjaSAiMTIuNzYiICAgICAtPiAnMTIuNzYnCitiYXN4MDQzIHRvU2NpICIrMTIuNzYiICAgIC0+ICcxMi43NicKK2Jhc3gwNDQgdG9TY2kgIjAxMi43NiIgICAgLT4gJzEyLjc2JworYmFzeDA0NSB0b1NjaSAiKzAuMDAzIiAgICAtPiAnMC4wMDMnCitiYXN4MDQ2IHRvU2NpICIxNy4iICAgICAgIC0+ICcxNycKK2Jhc3gwNDcgdG9TY2kgIi41IiAgICAgICAgLT4gJzAuNScKK2Jhc3gwNDggdG9TY2kgIjA0NCIgICAgICAgLT4gJzQ0JworYmFzeDA0OSB0b1NjaSAiMDA0NCIgICAgICAtPiAnNDQnCitiYXN4MDUwIHRvU2NpICIwLjAwMDUiICAgICAgLT4gJzAuMDAwNScKK2Jhc3gwNTEgdG9TY2kgIjAwLjAwMDA1IiAgICAtPiAnMC4wMDAwNScKK2Jhc3gwNTIgdG9TY2kgIjAuMDAwMDA1IiAgICAtPiAnMC4wMDAwMDUnCitiYXN4MDUzIHRvU2NpICIwLjAwMDAwNTAiICAgLT4gJzAuMDAwMDA1MCcKK2Jhc3gwNTQgdG9TY2kgIjAuMDAwMDAwNSIgICAtPiAnNUUtNycKK2Jhc3gwNTUgdG9TY2kgIjAuMDAwMDAwMDUiICAtPiAnNUUtOCcKK2Jhc3gwNTYgdG9TY2kgIjEyMzQ1Njc4LjU0MzIxMCIgLT4gJzEyMzQ1Njc4LjU0MzIxMCcKK2Jhc3gwNTcgdG9TY2kgIjIzNDU2NzguNTQzMjEwIiAtPiAnMjM0NTY3OC41NDMyMTAnCitiYXN4MDU4IHRvU2NpICIzNDU2NzguNTQzMjEwIiAtPiAnMzQ1Njc4LjU0MzIxMCcKK2Jhc3gwNTkgdG9TY2kgIjAzNDU2NzguNTQzMjEiIC0+ICczNDU2NzguNTQzMjEnCitiYXN4MDYwIHRvU2NpICIzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJworYmFzeDA2MSB0b1NjaSAiKzM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitiYXN4MDYyIHRvU2NpICIrMDM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitiYXN4MDYzIHRvU2NpICIrMDAzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJworYmFzeDA2NCB0b1NjaSAiLTM0NTY3OC41NDMyIiAgLT4gJy0zNDU2NzguNTQzMicKK2Jhc3gwNjUgdG9TY2kgIi0wMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJworYmFzeDA2NiB0b1NjaSAiLTAwMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJworLS0gZXhhbXBsZXMKK2Jhc3gwNjcgdG9TY2kgIjVFLTYiICAgICAgICAtPiAnMC4wMDAwMDUnCitiYXN4MDY4IHRvU2NpICI1MEUtNyIgICAgICAgLT4gJzAuMDAwMDA1MCcKK2Jhc3gwNjkgdG9TY2kgIjVFLTciICAgICAgICAtPiAnNUUtNycKKworLS0gW05vIGV4b3RpY3MgYXMgbm8gVW5pY29kZV0KKworLS0gcm91bmRlZCB3aXRoIGRvdHMgaW4gYWxsIChpbmNsdWRpbmcgZWRnZSkgcGxhY2VzCitiYXN4MDcxIHRvU2NpICAuMTIzNDU2Nzg5MDEyMzQ1NjEyMyAgLT4gMC4xMjM0NTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorYmFzeDA3MiB0b1NjaSAgMS4yMzQ1Njc4OTAxMjM0NTYxMjMgIC0+IDEuMjM0NTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorYmFzeDA3MyB0b1NjaSAgMTIuMzQ1Njc4OTAxMjM0NTYxMjMgIC0+IDEyLjM0NTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorYmFzeDA3NCB0b1NjaSAgMTIzLjQ1Njc4OTAxMjM0NTYxMjMgIC0+IDEyMy40NTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorYmFzeDA3NSB0b1NjaSAgMTIzNC41Njc4OTAxMjM0NTYxMjMgIC0+IDEyMzQuNTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorYmFzeDA3NiB0b1NjaSAgMTIzNDUuNjc4OTAxMjM0NTYxMjMgIC0+IDEyMzQ1LjY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorYmFzeDA3NyB0b1NjaSAgMTIzNDU2Ljc4OTAxMjM0NTYxMjMgIC0+IDEyMzQ1Ni43ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorYmFzeDA3OCB0b1NjaSAgMTIzNDU2Ny44OTAxMjM0NTYxMjMgIC0+IDEyMzQ1NjcuODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorYmFzeDA3OSB0b1NjaSAgMTIzNDU2NzguOTAxMjM0NTYxMjMgIC0+IDEyMzQ1Njc4LjkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorYmFzeDA4MCB0b1NjaSAgMTIzNDU2Nzg5LjAxMjM0NTYxMjMgIC0+IDEyMzQ1Njc4OS4wMTIzNDU2IEluZXhhY3QgUm91bmRlZAorYmFzeDA4MSB0b1NjaSAgMTIzNDU2Nzg5MC4xMjM0NTYxMjMgIC0+IDEyMzQ1Njc4OTAuMTIzNDU2IEluZXhhY3QgUm91bmRlZAorYmFzeDA4MiB0b1NjaSAgMTIzNDU2Nzg5MDEuMjM0NTYxMjMgIC0+IDEyMzQ1Njc4OTAxLjIzNDU2IEluZXhhY3QgUm91bmRlZAorYmFzeDA4MyB0b1NjaSAgMTIzNDU2Nzg5MDEyLjM0NTYxMjMgIC0+IDEyMzQ1Njc4OTAxMi4zNDU2IEluZXhhY3QgUm91bmRlZAorYmFzeDA4NCB0b1NjaSAgMTIzNDU2Nzg5MDEyMy40NTYxMjMgIC0+IDEyMzQ1Njc4OTAxMjMuNDU2IEluZXhhY3QgUm91bmRlZAorYmFzeDA4NSB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQuNTYxMjMgIC0+IDEyMzQ1Njc4OTAxMjM0LjU2IEluZXhhY3QgUm91bmRlZAorYmFzeDA4NiB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1LjYxMjMgIC0+IDEyMzQ1Njc4OTAxMjM0NS42IEluZXhhY3QgUm91bmRlZAorYmFzeDA4NyB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1Ni4xMjMgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorYmFzeDA4OCB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1NjEuMjMgIC0+IDEuMjM0NTY3ODkwMTIzNDU2RSsxNiBJbmV4YWN0IFJvdW5kZWQKK2Jhc3gwODkgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYxMi4zICAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUrMTcgSW5leGFjdCBSb3VuZGVkCitiYXN4MDkwIHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2MTIzLiAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzE4IEluZXhhY3QgUm91bmRlZAorCistLSBOdW1iZXJzIHdpdGggRQorYmFzeDEzMCB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJworYmFzeDEzMSB0b1NjaSAiMC4wMDBFLTIiICAtPiAnMC4wMDAwMCcKK2Jhc3gxMzIgdG9TY2kgIjAuMDAwRS0zIiAgLT4gJzAuMDAwMDAwJworYmFzeDEzMyB0b1NjaSAiMC4wMDBFLTQiICAtPiAnMEUtNycKK2Jhc3gxMzQgdG9TY2kgIjAuMDBFLTIiICAgLT4gJzAuMDAwMCcKK2Jhc3gxMzUgdG9TY2kgIjAuMDBFLTMiICAgLT4gJzAuMDAwMDAnCitiYXN4MTM2IHRvU2NpICIwLjAwRS00IiAgIC0+ICcwLjAwMDAwMCcKK2Jhc3gxMzcgdG9TY2kgIjAuMDBFLTUiICAgLT4gJzBFLTcnCitiYXN4MTM4IHRvU2NpICIrMEUrOSIgICAgIC0+ICcwRSs5JworYmFzeDEzOSB0b1NjaSAiLTBFKzkiICAgICAtPiAnLTBFKzknCitiYXN4MTQwIHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5JworYmFzeDE0MSB0b1NjaSAiMWUrMDkiICAgICAtPiAnMUUrOScKK2Jhc3gxNDIgdG9TY2kgIjFFKzkwIiAgICAgLT4gJzFFKzkwJworYmFzeDE0MyB0b1NjaSAiKzFFKzAwOSIgICAtPiAnMUUrOScKK2Jhc3gxNDQgdG9TY2kgIjBFKzkiICAgICAgLT4gJzBFKzknCitiYXN4MTQ1IHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5JworYmFzeDE0NiB0b1NjaSAiMUUrMDkiICAgICAtPiAnMUUrOScKK2Jhc3gxNDcgdG9TY2kgIjFlKzkwIiAgICAgLT4gJzFFKzkwJworYmFzeDE0OCB0b1NjaSAiMUUrMDA5IiAgICAtPiAnMUUrOScKK2Jhc3gxNDkgdG9TY2kgIjAwMEUrOSIgICAgLT4gJzBFKzknCitiYXN4MTUwIHRvU2NpICIxRTkiICAgICAgIC0+ICcxRSs5JworYmFzeDE1MSB0b1NjaSAiMWUwOSIgICAgICAtPiAnMUUrOScKK2Jhc3gxNTIgdG9TY2kgIjFFOTAiICAgICAgLT4gJzFFKzkwJworYmFzeDE1MyB0b1NjaSAiMUUwMDkiICAgICAtPiAnMUUrOScKK2Jhc3gxNTQgdG9TY2kgIjBFOSIgICAgICAgLT4gJzBFKzknCitiYXN4MTU1IHRvU2NpICIwLjAwMGUrMCIgIC0+ICcwLjAwMCcKK2Jhc3gxNTYgdG9TY2kgIjAuMDAwRS0xIiAgLT4gJzAuMDAwMCcKK2Jhc3gxNTcgdG9TY2kgIjRFKzkiICAgICAgLT4gJzRFKzknCitiYXN4MTU4IHRvU2NpICI0NEUrOSIgICAgIC0+ICc0LjRFKzEwJworYmFzeDE1OSB0b1NjaSAiMC43M2UtNyIgICAtPiAnNy4zRS04JworYmFzeDE2MCB0b1NjaSAiMDBFKzkiICAgICAtPiAnMEUrOScKK2Jhc3gxNjEgdG9TY2kgIjAwRS05IiAgICAgLT4gJzBFLTknCitiYXN4MTYyIHRvU2NpICIxMEUrOSIgICAgIC0+ICcxLjBFKzEwJworYmFzeDE2MyB0b1NjaSAiMTBFKzA5IiAgICAtPiAnMS4wRSsxMCcKK2Jhc3gxNjQgdG9TY2kgIjEwZSs5MCIgICAgLT4gJzEuMEUrOTEnCitiYXN4MTY1IHRvU2NpICIxMEUrMDA5IiAgIC0+ICcxLjBFKzEwJworYmFzeDE2NiB0b1NjaSAiMTAwZSs5IiAgICAtPiAnMS4wMEUrMTEnCitiYXN4MTY3IHRvU2NpICIxMDBlKzA5IiAgIC0+ICcxLjAwRSsxMScKK2Jhc3gxNjggdG9TY2kgIjEwMEUrOTAiICAgLT4gJzEuMDBFKzkyJworYmFzeDE2OSB0b1NjaSAiMTAwZSswMDkiICAtPiAnMS4wMEUrMTEnCisKK2Jhc3gxNzAgdG9TY2kgIjEuMjY1IiAgICAgLT4gJzEuMjY1JworYmFzeDE3MSB0b1NjaSAiMS4yNjVFLTIwIiAtPiAnMS4yNjVFLTIwJworYmFzeDE3MiB0b1NjaSAiMS4yNjVFLTgiICAtPiAnMS4yNjVFLTgnCitiYXN4MTczIHRvU2NpICIxLjI2NUUtNCIgIC0+ICcwLjAwMDEyNjUnCitiYXN4MTc0IHRvU2NpICIxLjI2NUUtMyIgIC0+ICcwLjAwMTI2NScKK2Jhc3gxNzUgdG9TY2kgIjEuMjY1RS0yIiAgLT4gJzAuMDEyNjUnCitiYXN4MTc2IHRvU2NpICIxLjI2NUUtMSIgIC0+ICcwLjEyNjUnCitiYXN4MTc3IHRvU2NpICIxLjI2NUUtMCIgIC0+ICcxLjI2NScKK2Jhc3gxNzggdG9TY2kgIjEuMjY1RSsxIiAgLT4gJzEyLjY1JworYmFzeDE3OSB0b1NjaSAiMS4yNjVFKzIiICAtPiAnMTI2LjUnCitiYXN4MTgwIHRvU2NpICIxLjI2NUUrMyIgIC0+ICcxMjY1JworYmFzeDE4MSB0b1NjaSAiMS4yNjVFKzQiICAtPiAnMS4yNjVFKzQnCitiYXN4MTgyIHRvU2NpICIxLjI2NUUrOCIgIC0+ICcxLjI2NUUrOCcKK2Jhc3gxODMgdG9TY2kgIjEuMjY1RSsyMCIgLT4gJzEuMjY1RSsyMCcKKworYmFzeDE5MCB0b1NjaSAiMTIuNjUiICAgICAtPiAnMTIuNjUnCitiYXN4MTkxIHRvU2NpICIxMi42NUUtMjAiIC0+ICcxLjI2NUUtMTknCitiYXN4MTkyIHRvU2NpICIxMi42NUUtOCIgIC0+ICcxLjI2NUUtNycKK2Jhc3gxOTMgdG9TY2kgIjEyLjY1RS00IiAgLT4gJzAuMDAxMjY1JworYmFzeDE5NCB0b1NjaSAiMTIuNjVFLTMiICAtPiAnMC4wMTI2NScKK2Jhc3gxOTUgdG9TY2kgIjEyLjY1RS0yIiAgLT4gJzAuMTI2NScKK2Jhc3gxOTYgdG9TY2kgIjEyLjY1RS0xIiAgLT4gJzEuMjY1JworYmFzeDE5NyB0b1NjaSAiMTIuNjVFLTAiICAtPiAnMTIuNjUnCitiYXN4MTk4IHRvU2NpICIxMi42NUUrMSIgIC0+ICcxMjYuNScKK2Jhc3gxOTkgdG9TY2kgIjEyLjY1RSsyIiAgLT4gJzEyNjUnCitiYXN4MjAwIHRvU2NpICIxMi42NUUrMyIgIC0+ICcxLjI2NUUrNCcKK2Jhc3gyMDEgdG9TY2kgIjEyLjY1RSs0IiAgLT4gJzEuMjY1RSs1JworYmFzeDIwMiB0b1NjaSAiMTIuNjVFKzgiICAtPiAnMS4yNjVFKzknCitiYXN4MjAzIHRvU2NpICIxMi42NUUrMjAiIC0+ICcxLjI2NUUrMjEnCisKK2Jhc3gyMTAgdG9TY2kgIjEyNi41IiAgICAgLT4gJzEyNi41JworYmFzeDIxMSB0b1NjaSAiMTI2LjVFLTIwIiAtPiAnMS4yNjVFLTE4JworYmFzeDIxMiB0b1NjaSAiMTI2LjVFLTgiICAtPiAnMC4wMDAwMDEyNjUnCitiYXN4MjEzIHRvU2NpICIxMjYuNUUtNCIgIC0+ICcwLjAxMjY1JworYmFzeDIxNCB0b1NjaSAiMTI2LjVFLTMiICAtPiAnMC4xMjY1JworYmFzeDIxNSB0b1NjaSAiMTI2LjVFLTIiICAtPiAnMS4yNjUnCitiYXN4MjE2IHRvU2NpICIxMjYuNUUtMSIgIC0+ICcxMi42NScKK2Jhc3gyMTcgdG9TY2kgIjEyNi41RS0wIiAgLT4gJzEyNi41JworYmFzeDIxOCB0b1NjaSAiMTI2LjVFKzEiICAtPiAnMTI2NScKK2Jhc3gyMTkgdG9TY2kgIjEyNi41RSsyIiAgLT4gJzEuMjY1RSs0JworYmFzeDIyMCB0b1NjaSAiMTI2LjVFKzMiICAtPiAnMS4yNjVFKzUnCitiYXN4MjIxIHRvU2NpICIxMjYuNUUrNCIgIC0+ICcxLjI2NUUrNicKK2Jhc3gyMjIgdG9TY2kgIjEyNi41RSs4IiAgLT4gJzEuMjY1RSsxMCcKK2Jhc3gyMjMgdG9TY2kgIjEyNi41RSsyMCIgLT4gJzEuMjY1RSsyMicKKworYmFzeDIzMCB0b1NjaSAiMTI2NSIgICAgIC0+ICcxMjY1JworYmFzeDIzMSB0b1NjaSAiMTI2NUUtMjAiIC0+ICcxLjI2NUUtMTcnCitiYXN4MjMyIHRvU2NpICIxMjY1RS04IiAgLT4gJzAuMDAwMDEyNjUnCitiYXN4MjMzIHRvU2NpICIxMjY1RS00IiAgLT4gJzAuMTI2NScKK2Jhc3gyMzQgdG9TY2kgIjEyNjVFLTMiICAtPiAnMS4yNjUnCitiYXN4MjM1IHRvU2NpICIxMjY1RS0yIiAgLT4gJzEyLjY1JworYmFzeDIzNiB0b1NjaSAiMTI2NUUtMSIgIC0+ICcxMjYuNScKK2Jhc3gyMzcgdG9TY2kgIjEyNjVFLTAiICAtPiAnMTI2NScKK2Jhc3gyMzggdG9TY2kgIjEyNjVFKzEiICAtPiAnMS4yNjVFKzQnCitiYXN4MjM5IHRvU2NpICIxMjY1RSsyIiAgLT4gJzEuMjY1RSs1JworYmFzeDI0MCB0b1NjaSAiMTI2NUUrMyIgIC0+ICcxLjI2NUUrNicKK2Jhc3gyNDEgdG9TY2kgIjEyNjVFKzQiICAtPiAnMS4yNjVFKzcnCitiYXN4MjQyIHRvU2NpICIxMjY1RSs4IiAgLT4gJzEuMjY1RSsxMScKK2Jhc3gyNDMgdG9TY2kgIjEyNjVFKzIwIiAtPiAnMS4yNjVFKzIzJworCitiYXN4MjUwIHRvU2NpICIwLjEyNjUiICAgICAtPiAnMC4xMjY1JworYmFzeDI1MSB0b1NjaSAiMC4xMjY1RS0yMCIgLT4gJzEuMjY1RS0yMScKK2Jhc3gyNTIgdG9TY2kgIjAuMTI2NUUtOCIgIC0+ICcxLjI2NUUtOScKK2Jhc3gyNTMgdG9TY2kgIjAuMTI2NUUtNCIgIC0+ICcwLjAwMDAxMjY1JworYmFzeDI1NCB0b1NjaSAiMC4xMjY1RS0zIiAgLT4gJzAuMDAwMTI2NScKK2Jhc3gyNTUgdG9TY2kgIjAuMTI2NUUtMiIgIC0+ICcwLjAwMTI2NScKK2Jhc3gyNTYgdG9TY2kgIjAuMTI2NUUtMSIgIC0+ICcwLjAxMjY1JworYmFzeDI1NyB0b1NjaSAiMC4xMjY1RS0wIiAgLT4gJzAuMTI2NScKK2Jhc3gyNTggdG9TY2kgIjAuMTI2NUUrMSIgIC0+ICcxLjI2NScKK2Jhc3gyNTkgdG9TY2kgIjAuMTI2NUUrMiIgIC0+ICcxMi42NScKK2Jhc3gyNjAgdG9TY2kgIjAuMTI2NUUrMyIgIC0+ICcxMjYuNScKK2Jhc3gyNjEgdG9TY2kgIjAuMTI2NUUrNCIgIC0+ICcxMjY1JworYmFzeDI2MiB0b1NjaSAiMC4xMjY1RSs4IiAgLT4gJzEuMjY1RSs3JworYmFzeDI2MyB0b1NjaSAiMC4xMjY1RSsyMCIgLT4gJzEuMjY1RSsxOScKKworLS0gc29tZSBtb3JlIG5lZ2F0aXZlIHplcm9zIFtzeXN0ZW1hdGljIHRlc3RzIGJlbG93XQorYmFzeDI5MCB0b1NjaSAiLTAuMDAwRS0xIiAgLT4gJy0wLjAwMDAnCitiYXN4MjkxIHRvU2NpICItMC4wMDBFLTIiICAtPiAnLTAuMDAwMDAnCitiYXN4MjkyIHRvU2NpICItMC4wMDBFLTMiICAtPiAnLTAuMDAwMDAwJworYmFzeDI5MyB0b1NjaSAiLTAuMDAwRS00IiAgLT4gJy0wRS03JworYmFzeDI5NCB0b1NjaSAiLTAuMDBFLTIiICAgLT4gJy0wLjAwMDAnCitiYXN4Mjk1IHRvU2NpICItMC4wMEUtMyIgICAtPiAnLTAuMDAwMDAnCitiYXN4Mjk2IHRvU2NpICItMC4wRS0yIiAgICAtPiAnLTAuMDAwJworYmFzeDI5NyB0b1NjaSAiLTAuMEUtMyIgICAgLT4gJy0wLjAwMDAnCitiYXN4Mjk4IHRvU2NpICItMEUtMiIgICAgICAtPiAnLTAuMDAnCitiYXN4Mjk5IHRvU2NpICItMEUtMyIgICAgICAtPiAnLTAuMDAwJworCistLSBFbmdpbmVlcmluZyBub3RhdGlvbiB0ZXN0cworYmFzeDMwMSAgdG9TY2kgMTBlMTIgIC0+IDEuMEUrMTMKK2Jhc3gzMDIgIHRvRW5nIDEwZTEyICAtPiAxMEUrMTIKK2Jhc3gzMDMgIHRvU2NpIDEwZTExICAtPiAxLjBFKzEyCitiYXN4MzA0ICB0b0VuZyAxMGUxMSAgLT4gMS4wRSsxMgorYmFzeDMwNSAgdG9TY2kgMTBlMTAgIC0+IDEuMEUrMTEKK2Jhc3gzMDYgIHRvRW5nIDEwZTEwICAtPiAxMDBFKzkKK2Jhc3gzMDcgIHRvU2NpIDEwZTkgICAtPiAxLjBFKzEwCitiYXN4MzA4ICB0b0VuZyAxMGU5ICAgLT4gMTBFKzkKK2Jhc3gzMDkgIHRvU2NpIDEwZTggICAtPiAxLjBFKzkKK2Jhc3gzMTAgIHRvRW5nIDEwZTggICAtPiAxLjBFKzkKK2Jhc3gzMTEgIHRvU2NpIDEwZTcgICAtPiAxLjBFKzgKK2Jhc3gzMTIgIHRvRW5nIDEwZTcgICAtPiAxMDBFKzYKK2Jhc3gzMTMgIHRvU2NpIDEwZTYgICAtPiAxLjBFKzcKK2Jhc3gzMTQgIHRvRW5nIDEwZTYgICAtPiAxMEUrNgorYmFzeDMxNSAgdG9TY2kgMTBlNSAgIC0+IDEuMEUrNgorYmFzeDMxNiAgdG9FbmcgMTBlNSAgIC0+IDEuMEUrNgorYmFzeDMxNyAgdG9TY2kgMTBlNCAgIC0+IDEuMEUrNQorYmFzeDMxOCAgdG9FbmcgMTBlNCAgIC0+IDEwMEUrMworYmFzeDMxOSAgdG9TY2kgMTBlMyAgIC0+IDEuMEUrNAorYmFzeDMyMCAgdG9FbmcgMTBlMyAgIC0+IDEwRSszCitiYXN4MzIxICB0b1NjaSAxMGUyICAgLT4gMS4wRSszCitiYXN4MzIyICB0b0VuZyAxMGUyICAgLT4gMS4wRSszCitiYXN4MzIzICB0b1NjaSAxMGUxICAgLT4gMS4wRSsyCitiYXN4MzI0ICB0b0VuZyAxMGUxICAgLT4gMTAwCitiYXN4MzI1ICB0b1NjaSAxMGUwICAgLT4gMTAKK2Jhc3gzMjYgIHRvRW5nIDEwZTAgICAtPiAxMAorYmFzeDMyNyAgdG9TY2kgMTBlLTEgIC0+IDEuMAorYmFzeDMyOCAgdG9FbmcgMTBlLTEgIC0+IDEuMAorYmFzeDMyOSAgdG9TY2kgMTBlLTIgIC0+IDAuMTAKK2Jhc3gzMzAgIHRvRW5nIDEwZS0yICAtPiAwLjEwCitiYXN4MzMxICB0b1NjaSAxMGUtMyAgLT4gMC4wMTAKK2Jhc3gzMzIgIHRvRW5nIDEwZS0zICAtPiAwLjAxMAorYmFzeDMzMyAgdG9TY2kgMTBlLTQgIC0+IDAuMDAxMAorYmFzeDMzNCAgdG9FbmcgMTBlLTQgIC0+IDAuMDAxMAorYmFzeDMzNSAgdG9TY2kgMTBlLTUgIC0+IDAuMDAwMTAKK2Jhc3gzMzYgIHRvRW5nIDEwZS01ICAtPiAwLjAwMDEwCitiYXN4MzM3ICB0b1NjaSAxMGUtNiAgLT4gMC4wMDAwMTAKK2Jhc3gzMzggIHRvRW5nIDEwZS02ICAtPiAwLjAwMDAxMAorYmFzeDMzOSAgdG9TY2kgMTBlLTcgIC0+IDAuMDAwMDAxMAorYmFzeDM0MCAgdG9FbmcgMTBlLTcgIC0+IDAuMDAwMDAxMAorYmFzeDM0MSAgdG9TY2kgMTBlLTggIC0+IDEuMEUtNworYmFzeDM0MiAgdG9FbmcgMTBlLTggIC0+IDEwMEUtOQorYmFzeDM0MyAgdG9TY2kgMTBlLTkgIC0+IDEuMEUtOAorYmFzeDM0NCAgdG9FbmcgMTBlLTkgIC0+IDEwRS05CitiYXN4MzQ1ICB0b1NjaSAxMGUtMTAgLT4gMS4wRS05CitiYXN4MzQ2ICB0b0VuZyAxMGUtMTAgLT4gMS4wRS05CitiYXN4MzQ3ICB0b1NjaSAxMGUtMTEgLT4gMS4wRS0xMAorYmFzeDM0OCAgdG9FbmcgMTBlLTExIC0+IDEwMEUtMTIKK2Jhc3gzNDkgIHRvU2NpIDEwZS0xMiAtPiAxLjBFLTExCitiYXN4MzUwICB0b0VuZyAxMGUtMTIgLT4gMTBFLTEyCitiYXN4MzUxICB0b1NjaSAxMGUtMTMgLT4gMS4wRS0xMgorYmFzeDM1MiAgdG9FbmcgMTBlLTEzIC0+IDEuMEUtMTIKKworYmFzeDM2MSAgdG9TY2kgN0UxMiAgLT4gN0UrMTIKK2Jhc3gzNjIgIHRvRW5nIDdFMTIgIC0+IDdFKzEyCitiYXN4MzYzICB0b1NjaSA3RTExICAtPiA3RSsxMQorYmFzeDM2NCAgdG9FbmcgN0UxMSAgLT4gNzAwRSs5CitiYXN4MzY1ICB0b1NjaSA3RTEwICAtPiA3RSsxMAorYmFzeDM2NiAgdG9FbmcgN0UxMCAgLT4gNzBFKzkKK2Jhc3gzNjcgIHRvU2NpIDdFOSAgIC0+IDdFKzkKK2Jhc3gzNjggIHRvRW5nIDdFOSAgIC0+IDdFKzkKK2Jhc3gzNjkgIHRvU2NpIDdFOCAgIC0+IDdFKzgKK2Jhc3gzNzAgIHRvRW5nIDdFOCAgIC0+IDcwMEUrNgorYmFzeDM3MSAgdG9TY2kgN0U3ICAgLT4gN0UrNworYmFzeDM3MiAgdG9FbmcgN0U3ICAgLT4gNzBFKzYKK2Jhc3gzNzMgIHRvU2NpIDdFNiAgIC0+IDdFKzYKK2Jhc3gzNzQgIHRvRW5nIDdFNiAgIC0+IDdFKzYKK2Jhc3gzNzUgIHRvU2NpIDdFNSAgIC0+IDdFKzUKK2Jhc3gzNzYgIHRvRW5nIDdFNSAgIC0+IDcwMEUrMworYmFzeDM3NyAgdG9TY2kgN0U0ICAgLT4gN0UrNAorYmFzeDM3OCAgdG9FbmcgN0U0ICAgLT4gNzBFKzMKK2Jhc3gzNzkgIHRvU2NpIDdFMyAgIC0+IDdFKzMKK2Jhc3gzODAgIHRvRW5nIDdFMyAgIC0+IDdFKzMKK2Jhc3gzODEgIHRvU2NpIDdFMiAgIC0+IDdFKzIKK2Jhc3gzODIgIHRvRW5nIDdFMiAgIC0+IDcwMAorYmFzeDM4MyAgdG9TY2kgN0UxICAgLT4gN0UrMQorYmFzeDM4NCAgdG9FbmcgN0UxICAgLT4gNzAKK2Jhc3gzODUgIHRvU2NpIDdFMCAgIC0+IDcKK2Jhc3gzODYgIHRvRW5nIDdFMCAgIC0+IDcKK2Jhc3gzODcgIHRvU2NpIDdFLTEgIC0+IDAuNworYmFzeDM4OCAgdG9FbmcgN0UtMSAgLT4gMC43CitiYXN4Mzg5ICB0b1NjaSA3RS0yICAtPiAwLjA3CitiYXN4MzkwICB0b0VuZyA3RS0yICAtPiAwLjA3CitiYXN4MzkxICB0b1NjaSA3RS0zICAtPiAwLjAwNworYmFzeDM5MiAgdG9FbmcgN0UtMyAgLT4gMC4wMDcKK2Jhc3gzOTMgIHRvU2NpIDdFLTQgIC0+IDAuMDAwNworYmFzeDM5NCAgdG9FbmcgN0UtNCAgLT4gMC4wMDA3CitiYXN4Mzk1ICB0b1NjaSA3RS01ICAtPiAwLjAwMDA3CitiYXN4Mzk2ICB0b0VuZyA3RS01ICAtPiAwLjAwMDA3CitiYXN4Mzk3ICB0b1NjaSA3RS02ICAtPiAwLjAwMDAwNworYmFzeDM5OCAgdG9FbmcgN0UtNiAgLT4gMC4wMDAwMDcKK2Jhc3gzOTkgIHRvU2NpIDdFLTcgIC0+IDdFLTcKK2Jhc3g0MDAgIHRvRW5nIDdFLTcgIC0+IDcwMEUtOQorYmFzeDQwMSAgdG9TY2kgN0UtOCAgLT4gN0UtOAorYmFzeDQwMiAgdG9FbmcgN0UtOCAgLT4gNzBFLTkKK2Jhc3g0MDMgIHRvU2NpIDdFLTkgIC0+IDdFLTkKK2Jhc3g0MDQgIHRvRW5nIDdFLTkgIC0+IDdFLTkKK2Jhc3g0MDUgIHRvU2NpIDdFLTEwIC0+IDdFLTEwCitiYXN4NDA2ICB0b0VuZyA3RS0xMCAtPiA3MDBFLTEyCitiYXN4NDA3ICB0b1NjaSA3RS0xMSAtPiA3RS0xMQorYmFzeDQwOCAgdG9FbmcgN0UtMTEgLT4gNzBFLTEyCitiYXN4NDA5ICB0b1NjaSA3RS0xMiAtPiA3RS0xMgorYmFzeDQxMCAgdG9FbmcgN0UtMTIgLT4gN0UtMTIKK2Jhc3g0MTEgIHRvU2NpIDdFLTEzIC0+IDdFLTEzCitiYXN4NDEyICB0b0VuZyA3RS0xMyAtPiA3MDBFLTE1CisKKy0tIEV4YWN0cyByZW1haW4gZXhhY3QgdXAgdG8gcHJlY2lzaW9uIC4uCitwcmVjaXNpb246IDkKK2Jhc3g0MjAgIHRvU2NpICAgIDEwMCAtPiAxMDAKK2Jhc3g0MjEgIHRvRW5nICAgIDEwMCAtPiAxMDAKK2Jhc3g0MjIgIHRvU2NpICAgMTAwMCAtPiAxMDAwCitiYXN4NDIzICB0b0VuZyAgIDEwMDAgLT4gMTAwMAorYmFzeDQyNCAgdG9TY2kgIDk5OS45IC0+ICA5OTkuOQorYmFzeDQyNSAgdG9FbmcgIDk5OS45IC0+ICA5OTkuOQorYmFzeDQyNiAgdG9TY2kgMTAwMC4wIC0+IDEwMDAuMAorYmFzeDQyNyAgdG9FbmcgMTAwMC4wIC0+IDEwMDAuMAorYmFzeDQyOCAgdG9TY2kgMTAwMC4xIC0+IDEwMDAuMQorYmFzeDQyOSAgdG9FbmcgMTAwMC4xIC0+IDEwMDAuMQorYmFzeDQzMCAgdG9TY2kgMTAwMDAgLT4gMTAwMDAKK2Jhc3g0MzEgIHRvRW5nIDEwMDAwIC0+IDEwMDAwCitiYXN4NDMyICB0b1NjaSAxMDAwMDAgLT4gMTAwMDAwCitiYXN4NDMzICB0b0VuZyAxMDAwMDAgLT4gMTAwMDAwCitiYXN4NDM0ICB0b1NjaSAxMDAwMDAwIC0+IDEwMDAwMDAKK2Jhc3g0MzUgIHRvRW5nIDEwMDAwMDAgLT4gMTAwMDAwMAorYmFzeDQzNiAgdG9TY2kgMTAwMDAwMDAgLT4gMTAwMDAwMDAKK2Jhc3g0MzcgIHRvRW5nIDEwMDAwMDAwIC0+IDEwMDAwMDAwCitiYXN4NDM4ICB0b1NjaSAxMDAwMDAwMDAgLT4gMTAwMDAwMDAwCitiYXN4NDM5ICB0b0VuZyAxMDAwMDAwMDAgLT4gMTAwMDAwMDAwCitiYXN4NDQwICB0b1NjaSAxMDAwMDAwMDAwICAgIC0+IDEuMDAwMDAwMDBFKzkgICAgUm91bmRlZAorYmFzeDQ0MSAgdG9FbmcgMTAwMDAwMDAwMCAgICAtPiAxLjAwMDAwMDAwRSs5ICAgIFJvdW5kZWQKK2Jhc3g0NDIgIHRvU2NpIDEwMDAwMDAwMDAgICAgLT4gMS4wMDAwMDAwMEUrOSAgICBSb3VuZGVkCitiYXN4NDQzICB0b0VuZyAxMDAwMDAwMDAwICAgIC0+IDEuMDAwMDAwMDBFKzkgICAgUm91bmRlZAorYmFzeDQ0NCAgdG9TY2kgMTAwMDAwMDAwMyAgICAtPiAxLjAwMDAwMDAwRSs5ICAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ0NSAgdG9FbmcgMTAwMDAwMDAwMyAgICAtPiAxLjAwMDAwMDAwRSs5ICAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ0NiAgdG9TY2kgMTAwMDAwMDAwNSAgICAtPiAxLjAwMDAwMDAxRSs5ICAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ0NyAgdG9FbmcgMTAwMDAwMDAwNSAgICAtPiAxLjAwMDAwMDAxRSs5ICAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ0OCAgdG9TY2kgMTAwMDAwMDAwNTAgICAtPiAxLjAwMDAwMDAxRSsxMCAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ0OSAgdG9FbmcgMTAwMDAwMDAwNTAgICAtPiAxMC4wMDAwMDAxRSs5ICAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ1MCAgdG9TY2kgMTAwMDAwMDAwOSAgICAtPiAxLjAwMDAwMDAxRSs5ICAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ1MSAgdG9FbmcgMTAwMDAwMDAwOSAgICAtPiAxLjAwMDAwMDAxRSs5ICAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ1MiAgdG9TY2kgMTAwMDAwMDAwMDAgICAtPiAxLjAwMDAwMDAwRSsxMCAgIFJvdW5kZWQKK2Jhc3g0NTMgIHRvRW5nIDEwMDAwMDAwMDAwICAgLT4gMTAuMDAwMDAwMEUrOSAgICBSb3VuZGVkCitiYXN4NDU0ICB0b1NjaSAxMDAwMDAwMDAwMyAgIC0+IDEuMDAwMDAwMDBFKzEwICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDU1ICB0b0VuZyAxMDAwMDAwMDAwMyAgIC0+IDEwLjAwMDAwMDBFKzkgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDU2ICB0b1NjaSAxMDAwMDAwMDAwNSAgIC0+IDEuMDAwMDAwMDBFKzEwICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDU3ICB0b0VuZyAxMDAwMDAwMDAwNSAgIC0+IDEwLjAwMDAwMDBFKzkgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDU4ICB0b1NjaSAxMDAwMDAwMDAwOSAgIC0+IDEuMDAwMDAwMDBFKzEwICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDU5ICB0b0VuZyAxMDAwMDAwMDAwOSAgIC0+IDEwLjAwMDAwMDBFKzkgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4NDYwICB0b1NjaSAxMDAwMDAwMDAwMDAgIC0+IDEuMDAwMDAwMDBFKzExICAgUm91bmRlZAorYmFzeDQ2MSAgdG9FbmcgMTAwMDAwMDAwMDAwICAtPiAxMDAuMDAwMDAwRSs5ICAgIFJvdW5kZWQKK2Jhc3g0NjIgIHRvU2NpIDEwMDAwMDAwMDMwMCAgLT4gMS4wMDAwMDAwMEUrMTEgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3g0NjMgIHRvRW5nIDEwMDAwMDAwMDMwMCAgLT4gMTAwLjAwMDAwMEUrOSAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3g0NjQgIHRvU2NpIDEwMDAwMDAwMDUwMCAgLT4gMS4wMDAwMDAwMUUrMTEgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3g0NjUgIHRvRW5nIDEwMDAwMDAwMDUwMCAgLT4gMTAwLjAwMDAwMUUrOSAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3g0NjYgIHRvU2NpIDEwMDAwMDAwMDkwMCAgLT4gMS4wMDAwMDAwMUUrMTEgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3g0NjcgIHRvRW5nIDEwMDAwMDAwMDkwMCAgLT4gMTAwLjAwMDAwMUUrOSAgICBSb3VuZGVkIEluZXhhY3QKK2Jhc3g0NjggIHRvU2NpIDEwMDAwMDAwMDAwMDAgLT4gMS4wMDAwMDAwMEUrMTIgICBSb3VuZGVkCitiYXN4NDY5ICB0b0VuZyAxMDAwMDAwMDAwMDAwIC0+IDEuMDAwMDAwMDBFKzEyICAgUm91bmRlZAorYmFzeDQ3MCAgdG9TY2kgMTAwMDAwMDAwMzAwMCAtPiAxLjAwMDAwMDAwRSsxMiAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ3MSAgdG9FbmcgMTAwMDAwMDAwMzAwMCAtPiAxLjAwMDAwMDAwRSsxMiAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ3MiAgdG9TY2kgMTAwMDAwMDAwNTAwMCAtPiAxLjAwMDAwMDAxRSsxMiAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ3MyAgdG9FbmcgMTAwMDAwMDAwNTAwMCAtPiAxLjAwMDAwMDAxRSsxMiAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ3NCAgdG9TY2kgMTAwMDAwMDAwOTAwMCAtPiAxLjAwMDAwMDAxRSsxMiAgIFJvdW5kZWQgSW5leGFjdAorYmFzeDQ3NSAgdG9FbmcgMTAwMDAwMDAwOTAwMCAtPiAxLjAwMDAwMDAxRSsxMiAgIFJvdW5kZWQgSW5leGFjdAorCistLSBhbGwtbmluZXMgcm91bmRpbmcKK3ByZWNpc2lvbjogOQorcm91bmRpbmc6ICBoYWxmX3VwCitiYXN4MjcwICB0b1NjaSA5OTk5OTk5OTkgICAgICAgICAgLT4gICA5OTk5OTk5OTkKK2Jhc3gyNzEgIHRvU2NpIDk5OTk5OTk5OTAgICAgICAgICAtPiAgIDkuOTk5OTk5OTlFKzkgICAgICBSb3VuZGVkCitiYXN4MjcyICB0b1NjaSA5OTk5OTk5OTkxICAgICAgICAgLT4gICA5Ljk5OTk5OTk5RSs5ICAgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4MjczICB0b1NjaSA5OTk5OTk5OTkyICAgICAgICAgLT4gICA5Ljk5OTk5OTk5RSs5ICAgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4Mjc0ICB0b1NjaSA5OTk5OTk5OTkzICAgICAgICAgLT4gICA5Ljk5OTk5OTk5RSs5ICAgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4Mjc1ICB0b1NjaSA5OTk5OTk5OTk0ICAgICAgICAgLT4gICA5Ljk5OTk5OTk5RSs5ICAgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4Mjc2ICB0b1NjaSA5OTk5OTk5OTk1ICAgICAgICAgLT4gICAxLjAwMDAwMDAwRSsxMCAgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4Mjc3ICB0b1NjaSA5OTk5OTk5OTk2ICAgICAgICAgLT4gICAxLjAwMDAwMDAwRSsxMCAgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4Mjc4ICB0b1NjaSA5OTk5OTk5OTk3ICAgICAgICAgLT4gICAxLjAwMDAwMDAwRSsxMCAgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4Mjc5ICB0b1NjaSA5OTk5OTk5OTk4ICAgICAgICAgLT4gICAxLjAwMDAwMDAwRSsxMCAgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4MjgwICB0b1NjaSA5OTk5OTk5OTk5ICAgICAgICAgLT4gICAxLjAwMDAwMDAwRSsxMCAgICAgUm91bmRlZCBJbmV4YWN0CitiYXN4MjgxICB0b1NjaSA5OTk5OTk5OTk5OTk5OTk5ICAgLT4gICAxLjAwMDAwMDAwRSsxNiAgICAgUm91bmRlZCBJbmV4YWN0CisKKy0tIGNoZWNrIHJvdW5kaW5nIG1vZGVzIGhlZWRlZAorcHJlY2lzaW9uOiA1Cityb3VuZGluZzogIGNlaWxpbmcKK2Jzcng0MDEgIHRvU2NpICAxLjIzNDUwICAgIC0+ICAxLjIzNDUgIFJvdW5kZWQKK2Jzcng0MDIgIHRvU2NpICAxLjIzNDU0OSAgIC0+ICAxLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorYnNyeDQwMyAgdG9TY2kgIDEuMjM0NTUwICAgLT4gIDEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Citic3J4NDA0ICB0b1NjaSAgMS4yMzQ1NTEgICAtPiAgMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgdXAKK2Jzcng0MDUgIHRvU2NpICAxLjIzNDUwICAgIC0+ICAxLjIzNDUgIFJvdW5kZWQKK2Jzcng0MDYgIHRvU2NpICAxLjIzNDU0OSAgIC0+ICAxLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorYnNyeDQwNyAgdG9TY2kgIDEuMjM0NTUwICAgLT4gIDEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Citic3J4NDA4ICB0b1NjaSAgMS4yMzQ1NTEgICAtPiAgMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZmxvb3IKK2Jzcng0MTAgIHRvU2NpICAxLjIzNDUwICAgIC0+ICAxLjIzNDUgIFJvdW5kZWQKK2Jzcng0MTEgIHRvU2NpICAxLjIzNDU0OSAgIC0+ICAxLjIzNDUgIFJvdW5kZWQgSW5leGFjdAorYnNyeDQxMiAgdG9TY2kgIDEuMjM0NTUwICAgLT4gIDEuMjM0NSAgUm91bmRlZCBJbmV4YWN0Citic3J4NDEzICB0b1NjaSAgMS4yMzQ1NTEgICAtPiAgMS4yMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9kb3duCitic3J4NDE1ICB0b1NjaSAgMS4yMzQ1MCAgICAtPiAgMS4yMzQ1ICBSb3VuZGVkCitic3J4NDE2ICB0b1NjaSAgMS4yMzQ1NDkgICAtPiAgMS4yMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng0MTcgIHRvU2NpICAxLjIzNDU1MCAgIC0+ICAxLjIzNDUgIFJvdW5kZWQgSW5leGFjdAorYnNyeDQxOCAgdG9TY2kgIDEuMjM0NjUwICAgLT4gIDEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Citic3J4NDE5ICB0b1NjaSAgMS4yMzQ1NTEgICAtPiAgMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitic3J4NDIxICB0b1NjaSAgMS4yMzQ1MCAgICAtPiAgMS4yMzQ1ICBSb3VuZGVkCitic3J4NDIyICB0b1NjaSAgMS4yMzQ1NDkgICAtPiAgMS4yMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng0MjMgIHRvU2NpICAxLjIzNDU1MCAgIC0+ICAxLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorYnNyeDQyNCAgdG9TY2kgIDEuMjM0NjUwICAgLT4gIDEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Citic3J4NDI1ICB0b1NjaSAgMS4yMzQ1NTEgICAtPiAgMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZG93bgorYnNyeDQyNiAgdG9TY2kgIDEuMjM0NTAgICAgLT4gIDEuMjM0NSAgUm91bmRlZAorYnNyeDQyNyAgdG9TY2kgIDEuMjM0NTQ5ICAgLT4gIDEuMjM0NSAgUm91bmRlZCBJbmV4YWN0Citic3J4NDI4ICB0b1NjaSAgMS4yMzQ1NTAgICAtPiAgMS4yMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng0MjkgIHRvU2NpICAxLjIzNDU1MSAgIC0+ICAxLjIzNDUgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX3VwCitic3J4NDMxICB0b1NjaSAgMS4yMzQ1MCAgICAtPiAgMS4yMzQ1ICBSb3VuZGVkCitic3J4NDMyICB0b1NjaSAgMS4yMzQ1NDkgICAtPiAgMS4yMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng0MzMgIHRvU2NpICAxLjIzNDU1MCAgIC0+ICAxLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorYnNyeDQzNCAgdG9TY2kgIDEuMjM0NjUwICAgLT4gIDEuMjM0NyAgUm91bmRlZCBJbmV4YWN0Citic3J4NDM1ICB0b1NjaSAgMS4yMzQ1NTEgICAtPiAgMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKKy0tIG5lZ2F0aXZlcworcm91bmRpbmc6ICBjZWlsaW5nCitic3J4NTAxICB0b1NjaSAtMS4yMzQ1MCAgICAtPiAtMS4yMzQ1ICBSb3VuZGVkCitic3J4NTAyICB0b1NjaSAtMS4yMzQ1NDkgICAtPiAtMS4yMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng1MDMgIHRvU2NpIC0xLjIzNDU1MCAgIC0+IC0xLjIzNDUgIFJvdW5kZWQgSW5leGFjdAorYnNyeDUwNCAgdG9TY2kgLTEuMjM0NTUxICAgLT4gLTEuMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIHVwCitic3J4NTA1ICB0b1NjaSAtMS4yMzQ1MCAgICAtPiAtMS4yMzQ1ICBSb3VuZGVkCitic3J4NTA2ICB0b1NjaSAtMS4yMzQ1NDkgICAtPiAtMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng1MDcgIHRvU2NpIC0xLjIzNDU1MCAgIC0+IC0xLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorYnNyeDUwOCAgdG9TY2kgLTEuMjM0NTUxICAgLT4gLTEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGZsb29yCitic3J4NTEwICB0b1NjaSAtMS4yMzQ1MCAgICAtPiAtMS4yMzQ1ICBSb3VuZGVkCitic3J4NTExICB0b1NjaSAtMS4yMzQ1NDkgICAtPiAtMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng1MTIgIHRvU2NpIC0xLjIzNDU1MCAgIC0+IC0xLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorYnNyeDUxMyAgdG9TY2kgLTEuMjM0NTUxICAgLT4gLTEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZG93bgorYnNyeDUxNSAgdG9TY2kgLTEuMjM0NTAgICAgLT4gLTEuMjM0NSAgUm91bmRlZAorYnNyeDUxNiAgdG9TY2kgLTEuMjM0NTQ5ICAgLT4gLTEuMjM0NSAgUm91bmRlZCBJbmV4YWN0Citic3J4NTE3ICB0b1NjaSAtMS4yMzQ1NTAgICAtPiAtMS4yMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng1MTggIHRvU2NpIC0xLjIzNDY1MCAgIC0+IC0xLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorYnNyeDUxOSAgdG9TY2kgLTEuMjM0NTUxICAgLT4gLTEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZXZlbgorYnNyeDUyMSAgdG9TY2kgLTEuMjM0NTAgICAgLT4gLTEuMjM0NSAgUm91bmRlZAorYnNyeDUyMiAgdG9TY2kgLTEuMjM0NTQ5ICAgLT4gLTEuMjM0NSAgUm91bmRlZCBJbmV4YWN0Citic3J4NTIzICB0b1NjaSAtMS4yMzQ1NTAgICAtPiAtMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng1MjQgIHRvU2NpIC0xLjIzNDY1MCAgIC0+IC0xLjIzNDYgIFJvdW5kZWQgSW5leGFjdAorYnNyeDUyNSAgdG9TY2kgLTEuMjM0NTUxICAgLT4gLTEuMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGRvd24KK2Jzcng1MjYgIHRvU2NpIC0xLjIzNDUwICAgIC0+IC0xLjIzNDUgIFJvdW5kZWQKK2Jzcng1MjcgIHRvU2NpIC0xLjIzNDU0OSAgIC0+IC0xLjIzNDUgIFJvdW5kZWQgSW5leGFjdAorYnNyeDUyOCAgdG9TY2kgLTEuMjM0NTUwICAgLT4gLTEuMjM0NSAgUm91bmRlZCBJbmV4YWN0Citic3J4NTI5ICB0b1NjaSAtMS4yMzQ1NTEgICAtPiAtMS4yMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl91cAorYnNyeDUzMSAgdG9TY2kgLTEuMjM0NTAgICAgLT4gLTEuMjM0NSAgUm91bmRlZAorYnNyeDUzMiAgdG9TY2kgLTEuMjM0NTQ5ICAgLT4gLTEuMjM0NSAgUm91bmRlZCBJbmV4YWN0Citic3J4NTMzICB0b1NjaSAtMS4yMzQ1NTAgICAtPiAtMS4yMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2Jzcng1MzQgIHRvU2NpIC0xLjIzNDY1MCAgIC0+IC0xLjIzNDcgIFJvdW5kZWQgSW5leGFjdAorYnNyeDUzNSAgdG9TY2kgLTEuMjM0NTUxICAgLT4gLTEuMjM0NiAgUm91bmRlZCBJbmV4YWN0CisKKy0tIGEgZmV3IGxhcmdlciBleHBvbmVudHMKK21heEV4cG9uZW50OiA5OTk5OTk5OTkKK21pbkV4cG9uZW50OiAtOTk5OTk5OTk5CitiYXN4NDgwIHRvU2NpICIwLjA5ZTk5OSIgIC0+ICc5RSs5OTcnCitiYXN4NDgxIHRvU2NpICIwLjllOTk5IiAgIC0+ICc5RSs5OTgnCitiYXN4NDgyIHRvU2NpICI5ZTk5OSIgICAgIC0+ICc5RSs5OTknCitiYXN4NDgzIHRvU2NpICI5LjllOTk5IiAgIC0+ICc5LjlFKzk5OScKK2Jhc3g0ODQgdG9TY2kgIjkuOTllOTk5IiAgLT4gJzkuOTlFKzk5OScKK2Jhc3g0ODUgdG9TY2kgIjkuOTllLTk5OSIgLT4gJzkuOTlFLTk5OScKK2Jhc3g0ODYgdG9TY2kgIjkuOWUtOTk5IiAgLT4gJzkuOUUtOTk5JworYmFzeDQ4NyB0b1NjaSAiOWUtOTk5IiAgICAtPiAnOUUtOTk5JworYmFzeDQ4OSB0b1NjaSAiOTllLTk5OSIgICAtPiAnOS45RS05OTgnCitiYXN4NDkwIHRvU2NpICI5OTllLTk5OSIgIC0+ICc5Ljk5RS05OTcnCitiYXN4NDkxIHRvU2NpICcwLjllLTk5OCcgIC0+ICc5RS05OTknCitiYXN4NDkyIHRvU2NpICcwLjA5ZS05OTcnIC0+ICc5RS05OTknCitiYXN4NDkzIHRvU2NpICcwLjFlMTAwMCcgIC0+ICcxRSs5OTknCitiYXN4NDk0IHRvU2NpICcxMGUtMTAwMCcgIC0+ICcxLjBFLTk5OScKKworcm91bmRpbmc6ICBoYWxmX3VwCitwcmVjaXNpb246IDkKKworLS0gVGhlICdiYWRkaWVzJyB0ZXN0cyBmcm9tIERpYWdCaWdEZWNpbWFsLCBwbHVzIHNvbWUgbmV3IG9uZXMKK2Jhc3g1MDAgdG9TY2kgJzEuLjInICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTAxIHRvU2NpICcuJyAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUwMiB0b1NjaSAnLi4nICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MDMgdG9TY2kgJysrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTA0IHRvU2NpICctLTEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUwNSB0b1NjaSAnLSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MDYgdG9TY2kgJystMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTA3IHRvU2NpICcxMmUnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUwOCB0b1NjaSAnMTJlKysnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MDkgdG9TY2kgJzEyZjQnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTEwIHRvU2NpICcgKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUxMSB0b1NjaSAnKyAxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MTIgdG9TY2kgJzEyICcgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTEzIHRvU2NpICcgKyAxJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUxNCB0b1NjaSAnIC0gMSAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MTUgdG9TY2kgJ3gnICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTE2IHRvU2NpICctMS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUxNyB0b1NjaSAnMTItJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MTggdG9TY2kgJzMrJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTE5IHRvU2NpICcnICAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUyMCB0b1NjaSAnMWUtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MjEgdG9TY2kgJzdlOTk5OTlhJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTIyIHRvU2NpICc3ZTEyMzU2Nzg5MHgnICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUyMyB0b1NjaSAnN2UxMjM1Njc4OTAxMngnICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MjQgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTI1IHRvU2NpICdlMTAwJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUyNiB0b1NjaSAnXHUwZTVhJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MjcgdG9TY2kgJ1x1MGI2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTI4IHRvU2NpICcxMjMsNjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUyOSB0b1NjaSAnMS4zNC41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MzAgdG9TY2kgJy4xMjMuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTMxIHRvU2NpICcwMS4zNS4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUzMiB0b1NjaSAnMDEuMzUtJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MzMgdG9TY2kgJzAwMDAuLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTM0IHRvU2NpICcuMDAwMC4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUzNSB0b1NjaSAnMDAuLjAwJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MzYgdG9TY2kgJzExMWUqMTIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTM3IHRvU2NpICcxMTFlMTIzLScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDUzOCB0b1NjaSAnMTExZSsxMisnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1MzkgdG9TY2kgJzExMWUxLTMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTQwIHRvU2NpICcxMTFlMSoyMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU0MSB0b1NjaSAnMTExZTFlKzMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NDIgdG9TY2kgJzFlMS4wJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTQzIHRvU2NpICcxZTEyM2UnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU0NCB0b1NjaSAndGVuJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NDUgdG9TY2kgJ09ORScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTQ2IHRvU2NpICcxZS4xJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU0NyB0b1NjaSAnMWUxLicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NDggdG9TY2kgJzFlZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTQ5IHRvU2NpICdlKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU1MCB0b1NjaSAnMS4yMy40JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NTEgdG9TY2kgJzEuMi4xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTUyIHRvU2NpICcxRSsxLjInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU1MyB0b1NjaSAnMUUrMS4yLjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NTQgdG9TY2kgJzFFKysxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTU1IHRvU2NpICcxRS0tMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU1NiB0b1NjaSAnMUUrLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NTcgdG9TY2kgJzFFLSsxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTU4IHRvU2NpICcxRScnMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU1OSB0b1NjaSAiMUUiIjEiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NjAgdG9TY2kgIjFFIiIiIiIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CistLSBOZWFyLXNwZWNpYWxzCitiYXN4NTYxIHRvU2NpICJxTmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU2MiB0b1NjaSAiTmFOcSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NjMgdG9TY2kgIk5hTnMiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTY0IHRvU2NpICJJbmZpIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU2NSB0b1NjaSAiSW5maW4iICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NjYgdG9TY2kgIkluZmluaSIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTY3IHRvU2NpICJJbmZpbml0IiAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU2OCB0b1NjaSAiLUluZmluaXQiICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NjkgdG9TY2kgIjBJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTcwIHRvU2NpICI5SW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU3MSB0b1NjaSAiLTBJbmYiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NzIgdG9TY2kgIi05SW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTczIHRvU2NpICItc05hIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU3NCB0b1NjaSAieE5hTiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NzUgdG9TY2kgIjBzTmFOIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKKy0tIHNvbWUgYmFkZGllcyB3aXRoIGRvdHMgYW5kIEVzIGFuZCBkb3RzIGFuZCBzcGVjaWFscworYmFzeDU3NiB0b1NjaSAgJ2UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTc3IHRvU2NpICAnLmUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1NzggdG9TY2kgICcrLmUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU3OSB0b1NjaSAgJy0uZSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTgwIHRvU2NpICAnLS5lJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1ODEgdG9TY2kgICdFKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU4MiB0b1NjaSAgJy5FKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTgzIHRvU2NpICAnKy5FKzEnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1ODQgdG9TY2kgICctLkUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU4NSB0b1NjaSAgJy0uRScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CisKK2Jhc3g1ODYgdG9TY2kgICcuTmFOJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU4NyB0b1NjaSAgJy0uTmFOJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NTg4IHRvU2NpICAnKy5zTmFOJyAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g1ODkgdG9TY2kgICcrLkluZicgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDU5MCB0b1NjaSAgJy5JbmZpbml0eScgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CisKKy0tIFplcm9zCitiYXN4NjAxIHRvU2NpIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkKK2Jhc3g2MDIgdG9TY2kgMC4wMDAwMDAwMCAgICAgICAgLT4gMEUtOAorYmFzeDYwMyB0b1NjaSAwLjAwMDAwMDAgICAgICAgICAtPiAwRS03CitiYXN4NjA0IHRvU2NpIDAuMDAwMDAwICAgICAgICAgIC0+IDAuMDAwMDAwCitiYXN4NjA1IHRvU2NpIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDAKK2Jhc3g2MDYgdG9TY2kgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwCitiYXN4NjA3IHRvU2NpIDAuMDAwICAgICAgICAgICAgIC0+IDAuMDAwCitiYXN4NjA4IHRvU2NpIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDAKK2Jhc3g2MDkgdG9TY2kgMC4wICAgICAgICAgICAgICAgLT4gMC4wCitiYXN4NjEwIHRvU2NpICAuMCAgICAgICAgICAgICAgIC0+IDAuMAorYmFzeDYxMSB0b1NjaSAwLiAgICAgICAgICAgICAgICAtPiAwCitiYXN4NjEyIHRvU2NpIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjAKK2Jhc3g2MTMgdG9TY2kgLTAuICAgICAgICAgICAgICAgLT4gLTAKK2Jhc3g2MTQgdG9TY2kgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMAorYmFzeDYxNSB0b1NjaSAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMAorYmFzeDYxNiB0b1NjaSAtMC4wMDAgICAgICAgICAgICAtPiAtMC4wMDAKK2Jhc3g2MTcgdG9TY2kgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMAorYmFzeDYxOCB0b1NjaSAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMAorYmFzeDYxOSB0b1NjaSAtMC4wMDAwMDAgICAgICAgICAtPiAtMC4wMDAwMDAKK2Jhc3g2MjAgdG9TY2kgLTAuMDAwMDAwMCAgICAgICAgLT4gLTBFLTcKK2Jhc3g2MjEgdG9TY2kgLTAuMDAwMDAwMDAgICAgICAgLT4gLTBFLTgKK2Jhc3g2MjIgdG9TY2kgLTAuMDAwMDAwMDAwICAgICAgLT4gLTBFLTkKKworYmFzeDYzMCB0b1NjaSAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwCitiYXN4NjMxIHRvU2NpICAwLjAwRSsxICAgICAgICAgIC0+IDAuMAorYmFzeDYzMiB0b1NjaSAgMC4wMEUrMiAgICAgICAgICAtPiAwCitiYXN4NjMzIHRvU2NpICAwLjAwRSszICAgICAgICAgIC0+IDBFKzEKK2Jhc3g2MzQgdG9TY2kgIDAuMDBFKzQgICAgICAgICAgLT4gMEUrMgorYmFzeDYzNSB0b1NjaSAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszCitiYXN4NjM2IHRvU2NpICAwLjAwRSs2ICAgICAgICAgIC0+IDBFKzQKK2Jhc3g2MzcgdG9TY2kgIDAuMDBFKzcgICAgICAgICAgLT4gMEUrNQorYmFzeDYzOCB0b1NjaSAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2CitiYXN4NjM5IHRvU2NpICAwLjAwRSs5ICAgICAgICAgIC0+IDBFKzcKKworYmFzeDY0MCB0b1NjaSAgMC4wRSswICAgICAgICAgICAtPiAwLjAKK2Jhc3g2NDEgdG9TY2kgIDAuMEUrMSAgICAgICAgICAgLT4gMAorYmFzeDY0MiB0b1NjaSAgMC4wRSsyICAgICAgICAgICAtPiAwRSsxCitiYXN4NjQzIHRvU2NpICAwLjBFKzMgICAgICAgICAgIC0+IDBFKzIKK2Jhc3g2NDQgdG9TY2kgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMworYmFzeDY0NSB0b1NjaSAgMC4wRSs1ICAgICAgICAgICAtPiAwRSs0CitiYXN4NjQ2IHRvU2NpICAwLjBFKzYgICAgICAgICAgIC0+IDBFKzUKK2Jhc3g2NDcgdG9TY2kgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNgorYmFzeDY0OCB0b1NjaSAgMC4wRSs4ICAgICAgICAgICAtPiAwRSs3CitiYXN4NjQ5IHRvU2NpICAwLjBFKzkgICAgICAgICAgIC0+IDBFKzgKKworYmFzeDY1MCB0b1NjaSAgMEUrMCAgICAgICAgICAgICAtPiAwCitiYXN4NjUxIHRvU2NpICAwRSsxICAgICAgICAgICAgIC0+IDBFKzEKK2Jhc3g2NTIgdG9TY2kgIDBFKzIgICAgICAgICAgICAgLT4gMEUrMgorYmFzeDY1MyB0b1NjaSAgMEUrMyAgICAgICAgICAgICAtPiAwRSszCitiYXN4NjU0IHRvU2NpICAwRSs0ICAgICAgICAgICAgIC0+IDBFKzQKK2Jhc3g2NTUgdG9TY2kgIDBFKzUgICAgICAgICAgICAgLT4gMEUrNQorYmFzeDY1NiB0b1NjaSAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2CitiYXN4NjU3IHRvU2NpICAwRSs3ICAgICAgICAgICAgIC0+IDBFKzcKK2Jhc3g2NTggdG9TY2kgIDBFKzggICAgICAgICAgICAgLT4gMEUrOAorYmFzeDY1OSB0b1NjaSAgMEUrOSAgICAgICAgICAgICAtPiAwRSs5CisKK2Jhc3g2NjAgdG9TY2kgIDAuMEUtMCAgICAgICAgICAgLT4gMC4wCitiYXN4NjYxIHRvU2NpICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDAKK2Jhc3g2NjIgdG9TY2kgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDAKK2Jhc3g2NjMgdG9TY2kgIDAuMEUtMyAgICAgICAgICAgLT4gMC4wMDAwCitiYXN4NjY0IHRvU2NpICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDAKK2Jhc3g2NjUgdG9TY2kgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDAKK2Jhc3g2NjYgdG9TY2kgIDAuMEUtNiAgICAgICAgICAgLT4gMEUtNworYmFzeDY2NyB0b1NjaSAgMC4wRS03ICAgICAgICAgICAtPiAwRS04CitiYXN4NjY4IHRvU2NpICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkKK2Jhc3g2NjkgdG9TY2kgIDAuMEUtOSAgICAgICAgICAgLT4gMEUtMTAKKworYmFzeDY3MCB0b1NjaSAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwCitiYXN4NjcxIHRvU2NpICAwLjAwRS0xICAgICAgICAgIC0+IDAuMDAwCitiYXN4NjcyIHRvU2NpICAwLjAwRS0yICAgICAgICAgIC0+IDAuMDAwMAorYmFzeDY3MyB0b1NjaSAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwCitiYXN4Njc0IHRvU2NpICAwLjAwRS00ICAgICAgICAgIC0+IDAuMDAwMDAwCitiYXN4Njc1IHRvU2NpICAwLjAwRS01ICAgICAgICAgIC0+IDBFLTcKK2Jhc3g2NzYgdG9TY2kgIDAuMDBFLTYgICAgICAgICAgLT4gMEUtOAorYmFzeDY3NyB0b1NjaSAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05CitiYXN4Njc4IHRvU2NpICAwLjAwRS04ICAgICAgICAgIC0+IDBFLTEwCitiYXN4Njc5IHRvU2NpICAwLjAwRS05ICAgICAgICAgIC0+IDBFLTExCisKK2Jhc3g2ODAgdG9TY2kgIDAwMDAwMC4gICAgICAgICAgLT4gIDAKK2Jhc3g2ODEgdG9TY2kgICAwMDAwMC4gICAgICAgICAgLT4gIDAKK2Jhc3g2ODIgdG9TY2kgICAgMDAwMC4gICAgICAgICAgLT4gIDAKK2Jhc3g2ODMgdG9TY2kgICAgIDAwMC4gICAgICAgICAgLT4gIDAKK2Jhc3g2ODQgdG9TY2kgICAgICAwMC4gICAgICAgICAgLT4gIDAKK2Jhc3g2ODUgdG9TY2kgICAgICAgMC4gICAgICAgICAgLT4gIDAKK2Jhc3g2ODYgdG9TY2kgICswMDAwMC4gICAgICAgICAgLT4gIDAKK2Jhc3g2ODcgdG9TY2kgIC0wMDAwMC4gICAgICAgICAgLT4gLTAKK2Jhc3g2ODggdG9TY2kgICswLiAgICAgICAgICAgICAgLT4gIDAKK2Jhc3g2ODkgdG9TY2kgIC0wLiAgICAgICAgICAgICAgLT4gLTAKKworLS0gU3BlY2lhbHMKK3ByZWNpc2lvbjogNAorYmFzeDcwMCB0b1NjaSAiTmFOIiAgICAgICAgICAgICAtPiBOYU4KK2Jhc3g3MDEgdG9TY2kgIm5hbiIgICAgICAgICAgICAgLT4gTmFOCitiYXN4NzAyIHRvU2NpICJuQW4iICAgICAgICAgICAgIC0+IE5hTgorYmFzeDcwMyB0b1NjaSAiTkFOIiAgICAgICAgICAgICAtPiBOYU4KK2Jhc3g3MDQgdG9TY2kgIitOYU4iICAgICAgICAgICAgLT4gTmFOCitiYXN4NzA1IHRvU2NpICIrbmFuIiAgICAgICAgICAgIC0+IE5hTgorYmFzeDcwNiB0b1NjaSAiK25BbiIgICAgICAgICAgICAtPiBOYU4KK2Jhc3g3MDcgdG9TY2kgIitOQU4iICAgICAgICAgICAgLT4gTmFOCitiYXN4NzA4IHRvU2NpICItTmFOIiAgICAgICAgICAgIC0+IC1OYU4KK2Jhc3g3MDkgdG9TY2kgIi1uYW4iICAgICAgICAgICAgLT4gLU5hTgorYmFzeDcxMCB0b1NjaSAiLW5BbiIgICAgICAgICAgICAtPiAtTmFOCitiYXN4NzExIHRvU2NpICItTkFOIiAgICAgICAgICAgIC0+IC1OYU4KK2Jhc3g3MTIgdG9TY2kgJ05hTjAnICAgICAgICAgICAgLT4gTmFOCitiYXN4NzEzIHRvU2NpICdOYU4xJyAgICAgICAgICAgIC0+IE5hTjEKK2Jhc3g3MTQgdG9TY2kgJ05hTjEyJyAgICAgICAgICAgLT4gTmFOMTIKK2Jhc3g3MTUgdG9TY2kgJ05hTjEyMycgICAgICAgICAgLT4gTmFOMTIzCitiYXN4NzE2IHRvU2NpICdOYU4xMjM0JyAgICAgICAgIC0+IE5hTjEyMzQKK2Jhc3g3MTcgdG9TY2kgJ05hTjAxJyAgICAgICAgICAgLT4gTmFOMQorYmFzeDcxOCB0b1NjaSAnTmFOMDEyJyAgICAgICAgICAtPiBOYU4xMgorYmFzeDcxOSB0b1NjaSAnTmFOMDEyMycgICAgICAgICAtPiBOYU4xMjMKK2Jhc3g3MjAgdG9TY2kgJ05hTjAxMjM0JyAgICAgICAgLT4gTmFOMTIzNAorYmFzeDcyMSB0b1NjaSAnTmFOMDAxJyAgICAgICAgICAtPiBOYU4xCitiYXN4NzIyIHRvU2NpICdOYU4wMDEyJyAgICAgICAgIC0+IE5hTjEyCitiYXN4NzIzIHRvU2NpICdOYU4wMDEyMycgICAgICAgIC0+IE5hTjEyMworYmFzeDcyNCB0b1NjaSAnTmFOMDAxMjM0JyAgICAgICAtPiBOYU4xMjM0CitiYXN4NzI1IHRvU2NpICdOYU4xMjM0NScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDcyNiB0b1NjaSAnTmFOMTIzZSsxJyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g3MjcgdG9TY2kgJ05hTjEyLjQ1JyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NzI4IHRvU2NpICdOYU4tMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorYmFzeDcyOSB0b1NjaSAnTmFOKzEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworYmFzeDczMCB0b1NjaSAic05hTiIgICAgICAgICAgICAtPiBzTmFOCitiYXN4NzMxIHRvU2NpICJzbmFuIiAgICAgICAgICAgIC0+IHNOYU4KK2Jhc3g3MzIgdG9TY2kgIlNuQW4iICAgICAgICAgICAgLT4gc05hTgorYmFzeDczMyB0b1NjaSAiU05BTiIgICAgICAgICAgICAtPiBzTmFOCitiYXN4NzM0IHRvU2NpICIrc05hTiIgICAgICAgICAgIC0+IHNOYU4KK2Jhc3g3MzUgdG9TY2kgIitzbmFuIiAgICAgICAgICAgLT4gc05hTgorYmFzeDczNiB0b1NjaSAiK1NuQW4iICAgICAgICAgICAtPiBzTmFOCitiYXN4NzM3IHRvU2NpICIrU05BTiIgICAgICAgICAgIC0+IHNOYU4KK2Jhc3g3MzggdG9TY2kgIi1zTmFOIiAgICAgICAgICAgLT4gLXNOYU4KK2Jhc3g3MzkgdG9TY2kgIi1zbmFuIiAgICAgICAgICAgLT4gLXNOYU4KK2Jhc3g3NDAgdG9TY2kgIi1TbkFuIiAgICAgICAgICAgLT4gLXNOYU4KK2Jhc3g3NDEgdG9TY2kgIi1TTkFOIiAgICAgICAgICAgLT4gLXNOYU4KK2Jhc3g3NDIgdG9TY2kgJ3NOYU4wMDAwJyAgICAgICAgLT4gc05hTgorYmFzeDc0MyB0b1NjaSAnc05hTjcnICAgICAgICAgICAtPiBzTmFONworYmFzeDc0NCB0b1NjaSAnc05hTjAwNzIzNCcgICAgICAtPiBzTmFONzIzNAorYmFzeDc0NSB0b1NjaSAnc05hTjcyMzQ1JyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2Jhc3g3NDYgdG9TY2kgJ3NOYU43Mi40NScgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitiYXN4NzQ3IHRvU2NpICdzTmFOLTcyJyAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorCitiYXN4NzQ4IHRvU2NpICJJbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitiYXN4NzQ5IHRvU2NpICJpbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitiYXN4NzUwIHRvU2NpICJpTmYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitiYXN4NzUxIHRvU2NpICJJTkYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitiYXN4NzUyIHRvU2NpICIrSW5mIiAgICAgICAgICAgIC0+IEluZmluaXR5CitiYXN4NzUzIHRvU2NpICIraW5mIiAgICAgICAgICAgIC0+IEluZmluaXR5CitiYXN4NzU0IHRvU2NpICIraU5mIiAgICAgICAgICAgIC0+IEluZmluaXR5CitiYXN4NzU1IHRvU2NpICIrSU5GIiAgICAgICAgICAgIC0+IEluZmluaXR5CitiYXN4NzU2IHRvU2NpICItSW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorYmFzeDc1NyB0b1NjaSAiLWluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2Jhc3g3NTggdG9TY2kgIi1pTmYiICAgICAgICAgICAgLT4gLUluZmluaXR5CitiYXN4NzU5IHRvU2NpICItSU5GIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorCitiYXN4NzYwIHRvU2NpICJJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5CitiYXN4NzYxIHRvU2NpICJpbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5CitiYXN4NzYyIHRvU2NpICJpTmZJbkl0WSIgICAgICAgIC0+IEluZmluaXR5CitiYXN4NzYzIHRvU2NpICJJTkZJTklUWSIgICAgICAgIC0+IEluZmluaXR5CitiYXN4NzY0IHRvU2NpICIrSW5maW5pdHkiICAgICAgIC0+IEluZmluaXR5CitiYXN4NzY1IHRvU2NpICIraW5maW5pdHkiICAgICAgIC0+IEluZmluaXR5CitiYXN4NzY2IHRvU2NpICIraU5mSW5JdFkiICAgICAgIC0+IEluZmluaXR5CitiYXN4NzY3IHRvU2NpICIrSU5GSU5JVFkiICAgICAgIC0+IEluZmluaXR5CitiYXN4NzY4IHRvU2NpICItSW5maW5pdHkiICAgICAgIC0+IC1JbmZpbml0eQorYmFzeDc2OSB0b1NjaSAiLWluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkKK2Jhc3g3NzAgdG9TY2kgIi1pTmZJbkl0WSIgICAgICAgLT4gLUluZmluaXR5CitiYXN4NzcxIHRvU2NpICItSU5GSU5JVFkiICAgICAgIC0+IC1JbmZpbml0eQorCistLSBTcGVjaWFscyBhbmQgemVyb3MgZm9yIHRvRW5nCitiYXN4NzcyIHRvRW5nICJOYU4iICAgICAgICAgICAgICAtPiBOYU4KK2Jhc3g3NzMgdG9FbmcgIi1JbmZpbml0eSIgICAgICAgIC0+IC1JbmZpbml0eQorYmFzeDc3NCB0b0VuZyAiLXNOYU4iICAgICAgICAgICAgLT4gLXNOYU4KK2Jhc3g3NzUgdG9FbmcgIi1OYU4iICAgICAgICAgICAgIC0+IC1OYU4KK2Jhc3g3NzYgdG9FbmcgIitJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5CitiYXN4Nzc4IHRvRW5nICIrc05hTiIgICAgICAgICAgICAtPiBzTmFOCitiYXN4Nzc5IHRvRW5nICIrTmFOIiAgICAgICAgICAgICAtPiBOYU4KK2Jhc3g3ODAgdG9FbmcgIklORklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5CitiYXN4NzgxIHRvRW5nICJTTkFOIiAgICAgICAgICAgICAtPiBzTmFOCitiYXN4NzgyIHRvRW5nICJOQU4iICAgICAgICAgICAgICAtPiBOYU4KK2Jhc3g3ODMgdG9FbmcgImluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5CitiYXN4Nzg0IHRvRW5nICJzbmFuIiAgICAgICAgICAgICAtPiBzTmFOCitiYXN4Nzg1IHRvRW5nICJuYW4iICAgICAgICAgICAgICAtPiBOYU4KK2Jhc3g3ODYgdG9FbmcgIkluRklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5CitiYXN4Nzg3IHRvRW5nICJTbkFOIiAgICAgICAgICAgICAtPiBzTmFOCitiYXN4Nzg4IHRvRW5nICJuQU4iICAgICAgICAgICAgICAtPiBOYU4KK2Jhc3g3ODkgdG9FbmcgImlOZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5CitiYXN4NzkwIHRvRW5nICJzTmFuIiAgICAgICAgICAgICAtPiBzTmFOCitiYXN4NzkxIHRvRW5nICJOYW4iICAgICAgICAgICAgICAtPiBOYU4KK2Jhc3g3OTIgdG9FbmcgIkluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5CitiYXN4NzkzIHRvRW5nICJzTmFOIiAgICAgICAgICAgICAtPiBzTmFOCisKKy0tIFplcm8gdG9FbmcsIGV0Yy4KK2Jhc3g4MDAgdG9FbmcgMGUrMSAgICAgICAgICAgICAgLT4gIjAuMDBFKzMiICAtLSBkb2MgZXhhbXBsZQorCitiYXN4ODAxIHRvRW5nIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkKK2Jhc3g4MDIgdG9FbmcgMC4wMDAwMDAwMCAgICAgICAgLT4gMC4wMEUtNgorYmFzeDgwMyB0b0VuZyAwLjAwMDAwMDAgICAgICAgICAtPiAwLjBFLTYKK2Jhc3g4MDQgdG9FbmcgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDAKK2Jhc3g4MDUgdG9FbmcgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMAorYmFzeDgwNiB0b0VuZyAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDAKK2Jhc3g4MDcgdG9FbmcgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDAKK2Jhc3g4MDggdG9FbmcgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMAorYmFzeDgwOSB0b0VuZyAwLjAgICAgICAgICAgICAgICAtPiAwLjAKK2Jhc3g4MTAgdG9FbmcgIC4wICAgICAgICAgICAgICAgLT4gMC4wCitiYXN4ODExIHRvRW5nIDAuICAgICAgICAgICAgICAgIC0+IDAKK2Jhc3g4MTIgdG9FbmcgLS4wICAgICAgICAgICAgICAgLT4gLTAuMAorYmFzeDgxMyB0b0VuZyAtMC4gICAgICAgICAgICAgICAtPiAtMAorYmFzeDgxNCB0b0VuZyAtMC4wICAgICAgICAgICAgICAtPiAtMC4wCitiYXN4ODE1IHRvRW5nIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwCitiYXN4ODE2IHRvRW5nIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMAorYmFzeDgxNyB0b0VuZyAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwCitiYXN4ODE4IHRvRW5nIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwCitiYXN4ODE5IHRvRW5nIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMAorYmFzeDgyMCB0b0VuZyAtMC4wMDAwMDAwICAgICAgICAtPiAtMC4wRS02CitiYXN4ODIxIHRvRW5nIC0wLjAwMDAwMDAwICAgICAgIC0+IC0wLjAwRS02CitiYXN4ODIyIHRvRW5nIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05CisKK2Jhc3g4MzAgdG9FbmcgIDAuMDBFKzAgICAgICAgICAgLT4gMC4wMAorYmFzeDgzMSB0b0VuZyAgMC4wMEUrMSAgICAgICAgICAtPiAwLjAKK2Jhc3g4MzIgdG9FbmcgIDAuMDBFKzIgICAgICAgICAgLT4gMAorYmFzeDgzMyB0b0VuZyAgMC4wMEUrMyAgICAgICAgICAtPiAwLjAwRSszCitiYXN4ODM0IHRvRW5nICAwLjAwRSs0ICAgICAgICAgIC0+IDAuMEUrMworYmFzeDgzNSB0b0VuZyAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszCitiYXN4ODM2IHRvRW5nICAwLjAwRSs2ICAgICAgICAgIC0+IDAuMDBFKzYKK2Jhc3g4MzcgdG9FbmcgIDAuMDBFKzcgICAgICAgICAgLT4gMC4wRSs2CitiYXN4ODM4IHRvRW5nICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYKK2Jhc3g4MzkgdG9FbmcgIDAuMDBFKzkgICAgICAgICAgLT4gMC4wMEUrOQorCitiYXN4ODQwIHRvRW5nICAwLjBFKzAgICAgICAgICAgIC0+IDAuMAorYmFzeDg0MSB0b0VuZyAgMC4wRSsxICAgICAgICAgICAtPiAwCitiYXN4ODQyIHRvRW5nICAwLjBFKzIgICAgICAgICAgIC0+IDAuMDBFKzMKK2Jhc3g4NDMgdG9FbmcgIDAuMEUrMyAgICAgICAgICAgLT4gMC4wRSszCitiYXN4ODQ0IHRvRW5nICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMKK2Jhc3g4NDUgdG9FbmcgIDAuMEUrNSAgICAgICAgICAgLT4gMC4wMEUrNgorYmFzeDg0NiB0b0VuZyAgMC4wRSs2ICAgICAgICAgICAtPiAwLjBFKzYKK2Jhc3g4NDcgdG9FbmcgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNgorYmFzeDg0OCB0b0VuZyAgMC4wRSs4ICAgICAgICAgICAtPiAwLjAwRSs5CitiYXN4ODQ5IHRvRW5nICAwLjBFKzkgICAgICAgICAgIC0+IDAuMEUrOQorCitiYXN4ODUwIHRvRW5nICAwRSswICAgICAgICAgICAgIC0+IDAKK2Jhc3g4NTEgdG9FbmcgIDBFKzEgICAgICAgICAgICAgLT4gMC4wMEUrMworYmFzeDg1MiB0b0VuZyAgMEUrMiAgICAgICAgICAgICAtPiAwLjBFKzMKK2Jhc3g4NTMgdG9FbmcgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMworYmFzeDg1NCB0b0VuZyAgMEUrNCAgICAgICAgICAgICAtPiAwLjAwRSs2CitiYXN4ODU1IHRvRW5nICAwRSs1ICAgICAgICAgICAgIC0+IDAuMEUrNgorYmFzeDg1NiB0b0VuZyAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2CitiYXN4ODU3IHRvRW5nICAwRSs3ICAgICAgICAgICAgIC0+IDAuMDBFKzkKK2Jhc3g4NTggdG9FbmcgIDBFKzggICAgICAgICAgICAgLT4gMC4wRSs5CitiYXN4ODU5IHRvRW5nICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkKKworYmFzeDg2MCB0b0VuZyAgMC4wRS0wICAgICAgICAgICAtPiAwLjAKK2Jhc3g4NjEgdG9FbmcgIDAuMEUtMSAgICAgICAgICAgLT4gMC4wMAorYmFzeDg2MiB0b0VuZyAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMAorYmFzeDg2MyB0b0VuZyAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDAKK2Jhc3g4NjQgdG9FbmcgIDAuMEUtNCAgICAgICAgICAgLT4gMC4wMDAwMAorYmFzeDg2NSB0b0VuZyAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMAorYmFzeDg2NiB0b0VuZyAgMC4wRS02ICAgICAgICAgICAtPiAwLjBFLTYKK2Jhc3g4NjcgdG9FbmcgIDAuMEUtNyAgICAgICAgICAgLT4gMC4wMEUtNgorYmFzeDg2OCB0b0VuZyAgMC4wRS04ICAgICAgICAgICAtPiAwRS05CitiYXN4ODY5IHRvRW5nICAwLjBFLTkgICAgICAgICAgIC0+IDAuMEUtOQorCitiYXN4ODcwIHRvRW5nICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDAKK2Jhc3g4NzEgdG9FbmcgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDAKK2Jhc3g4NzIgdG9FbmcgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwCitiYXN4ODczIHRvRW5nICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDAKK2Jhc3g4NzQgdG9FbmcgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDAKK2Jhc3g4NzUgdG9FbmcgIDAuMDBFLTUgICAgICAgICAgLT4gMC4wRS02CitiYXN4ODc2IHRvRW5nICAwLjAwRS02ICAgICAgICAgIC0+IDAuMDBFLTYKK2Jhc3g4NzcgdG9FbmcgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQorYmFzeDg3OCB0b0VuZyAgMC4wMEUtOCAgICAgICAgICAtPiAwLjBFLTkKK2Jhc3g4NzkgdG9FbmcgIDAuMDBFLTkgICAgICAgICAgLT4gMC4wMEUtOQorCisKK3JvdW5kaW5nOiAgaGFsZl91cAorcHJlY2lzaW9uOiA5CistLSBzdWJub3JtYWxzIGFuZCBvdmVyZmxvd3MKK2Jhc3g5MDYgdG9TY2kgJzk5ZTk5OTk5OTk5OScgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorYmFzeDkwNyB0b1NjaSAnOTk5ZTk5OTk5OTk5OScgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitiYXN4OTA4IHRvU2NpICcwLjllLTk5OTk5OTk5OScgICAgIC0+IDlFLTEwMDAwMDAwMDAgU3Vibm9ybWFsCitiYXN4OTA5IHRvU2NpICcwLjA5ZS05OTk5OTk5OTknICAgIC0+IDlFLTEwMDAwMDAwMDEgU3Vibm9ybWFsCitiYXN4OTEwIHRvU2NpICcwLjFlMTAwMDAwMDAwMCcgICAgIC0+IDFFKzk5OTk5OTk5OQorYmFzeDkxMSB0b1NjaSAnMTBlLTEwMDAwMDAwMDAnICAgICAtPiAxLjBFLTk5OTk5OTk5OQorYmFzeDkxMiB0b1NjaSAnMC45ZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitiYXN4OTEzIHRvU2NpICc5OWUtOTk5OTk5OTk5OScgICAgIC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorYmFzeDkxNCB0b1NjaSAnMTExZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitiYXN4OTE1IHRvU2NpICcxMTExZS05OTk5OTk5OTk5JyAgIC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorYmFzeDkxNiB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OTknICAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Jhc3g5MTcgdG9TY2kgJzdlMTAwMDAwMDAwMCcgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorLS0gbmVnYXRpdmVzIHRoZSBzYW1lCitiYXN4OTE4IHRvU2NpICctOTllOTk5OTk5OTk5JyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitiYXN4OTE5IHRvU2NpICctOTk5ZTk5OTk5OTk5OScgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitiYXN4OTIwIHRvU2NpICctMC45ZS05OTk5OTk5OTknICAgIC0+IC05RS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorYmFzeDkyMSB0b1NjaSAnLTAuMDllLTk5OTk5OTk5OScgICAtPiAtOUUtMTAwMDAwMDAwMSBTdWJub3JtYWwKK2Jhc3g5MjIgdG9TY2kgJy0wLjFlMTAwMDAwMDAwMCcgICAgLT4gLTFFKzk5OTk5OTk5OQorYmFzeDkyMyB0b1NjaSAnLTEwZS0xMDAwMDAwMDAwJyAgICAtPiAtMS4wRS05OTk5OTk5OTkKK2Jhc3g5MjQgdG9TY2kgJy0wLjllOTk5OTk5OTk5OScgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2Jhc3g5MjUgdG9TY2kgJy05OWUtOTk5OTk5OTk5OScgICAgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorYmFzeDkyNiB0b1NjaSAnLTExMWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorYmFzeDkyNyB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTknICAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitiYXN4OTI4IHRvU2NpICctMTExMWUtOTk5OTk5OTk5OTknIC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Jhc3g5MjkgdG9TY2kgJy03ZTEwMDAwMDAwMDAnICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBjZWlsaW5nCitiYXN4OTMwIHRvU2NpICAnN2UxMDAwMDAwMDAwJyAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitiYXN4OTMxIHRvU2NpICctN2UxMDAwMDAwMDAwJyAgICAgIC0+IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICB1cAorYmFzeDkzMiB0b1NjaSAgJzdlMTAwMDAwMDAwMCcgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorYmFzeDkzMyB0b1NjaSAnLTdlMTAwMDAwMDAwMCcgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBkb3duCitiYXN4OTM0IHRvU2NpICAnN2UxMDAwMDAwMDAwJyAgICAgIC0+ICA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorYmFzeDkzNSB0b1NjaSAnLTdlMTAwMDAwMDAwMCcgICAgICAtPiAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgZmxvb3IKK2Jhc3g5MzYgdG9TY2kgICc3ZTEwMDAwMDAwMDAnICAgICAgLT4gIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitiYXN4OTM3IHRvU2NpICctN2UxMDAwMDAwMDAwJyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgaGFsZl91cAorYmFzeDkzOCB0b1NjaSAgJzdlMTAwMDAwMDAwMCcgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorYmFzeDkzOSB0b1NjaSAnLTdlMTAwMDAwMDAwMCcgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2Jhc3g5NDAgdG9TY2kgICc3ZTEwMDAwMDAwMDAnICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2Jhc3g5NDEgdG9TY2kgJy03ZTEwMDAwMDAwMDAnICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgaGFsZl9kb3duCitiYXN4OTQyIHRvU2NpICAnN2UxMDAwMDAwMDAwJyAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitiYXN4OTQzIHRvU2NpICctN2UxMDAwMDAwMDAwJyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCisKKworLS0gR2lnYSBleHBvbmVudCBpbml0aWFsIHRlc3RzCittYXhFeHBvbmVudDogOTk5OTk5OTk5CittaW5FeHBvbmVudDogLTk5OTk5OTk5OQorCitiYXN4OTUxIHRvU2NpICc5OWU5OTknICAgICAgICAgIC0+ICc5LjlFKzEwMDAnCitiYXN4OTUyIHRvU2NpICc5OTllOTk5JyAgICAgICAgIC0+ICc5Ljk5RSsxMDAxJworYmFzeDk1MyB0b1NjaSAnMC45ZS05OTknICAgICAgICAtPiAnOUUtMTAwMCcKK2Jhc3g5NTQgdG9TY2kgJzAuMDllLTk5OScgICAgICAgLT4gJzlFLTEwMDEnCitiYXN4OTU1IHRvU2NpICcwLjFlMTAwMScgICAgICAgIC0+ICcxRSsxMDAwJworYmFzeDk1NiB0b1NjaSAnMTBlLTEwMDEnICAgICAgICAtPiAnMS4wRS0xMDAwJworYmFzeDk1NyB0b1NjaSAnMC45ZTk5OTknICAgICAgICAtPiAnOUUrOTk5OCcKK2Jhc3g5NTggdG9TY2kgJzk5ZS05OTk5JyAgICAgICAgLT4gJzkuOUUtOTk5OCcKK2Jhc3g5NTkgdG9TY2kgJzExMWU5OTk3JyAgICAgICAgLT4gJzEuMTFFKzk5OTknCitiYXN4OTYwIHRvU2NpICcxMTExZS05OTk5JyAgICAgIC0+ICcxLjExMUUtOTk5NicKK2Jhc3g5NjEgdG9TY2kgJzk5ZTk5OTknICAgICAgICAgLT4gJzkuOUUrMTAwMDAnCitiYXN4OTYyIHRvU2NpICc5OTllOTk5OScgICAgICAgIC0+ICc5Ljk5RSsxMDAwMScKK2Jhc3g5NjMgdG9TY2kgJzAuOWUtOTk5OScgICAgICAgLT4gJzlFLTEwMDAwJworYmFzeDk2NCB0b1NjaSAnMC4wOWUtOTk5OScgICAgICAtPiAnOUUtMTAwMDEnCitiYXN4OTY1IHRvU2NpICcwLjFlMTAwMDEnICAgICAgIC0+ICcxRSsxMDAwMCcKK2Jhc3g5NjYgdG9TY2kgJzEwZS0xMDAwMScgICAgICAgLT4gJzEuMEUtMTAwMDAnCitiYXN4OTY3IHRvU2NpICcwLjllOTk5OTknICAgICAgIC0+ICc5RSs5OTk5OCcKK2Jhc3g5NjggdG9TY2kgJzk5ZS05OTk5OScgICAgICAgLT4gJzkuOUUtOTk5OTgnCitiYXN4OTY5IHRvU2NpICcxMTFlOTk5OTknICAgICAgIC0+ICcxLjExRSsxMDAwMDEnCitiYXN4OTcwIHRvU2NpICcxMTExZS05OTk5OScgICAgIC0+ICcxLjExMUUtOTk5OTYnCitiYXN4OTcxIHRvU2NpICIwLjA5ZTk5OTk5OTk5OSIgIC0+ICc5RSs5OTk5OTk5OTcnCitiYXN4OTcyIHRvU2NpICIwLjllOTk5OTk5OTk5IiAgIC0+ICc5RSs5OTk5OTk5OTgnCitiYXN4OTczIHRvU2NpICI5ZTk5OTk5OTk5OSIgICAgIC0+ICc5RSs5OTk5OTk5OTknCitiYXN4OTc0IHRvU2NpICI5LjllOTk5OTk5OTk5IiAgIC0+ICc5LjlFKzk5OTk5OTk5OScKK2Jhc3g5NzUgdG9TY2kgIjkuOTllOTk5OTk5OTk5IiAgLT4gJzkuOTlFKzk5OTk5OTk5OScKK2Jhc3g5NzYgdG9TY2kgIjkuOTllLTk5OTk5OTk5OSIgLT4gJzkuOTlFLTk5OTk5OTk5OScKK2Jhc3g5NzcgdG9TY2kgIjkuOWUtOTk5OTk5OTk5IiAgLT4gJzkuOUUtOTk5OTk5OTk5JworYmFzeDk3OCB0b1NjaSAiOWUtOTk5OTk5OTk5IiAgICAtPiAnOUUtOTk5OTk5OTk5JworYmFzeDk3OSB0b1NjaSAiOTllLTk5OTk5OTk5OSIgICAtPiAnOS45RS05OTk5OTk5OTgnCitiYXN4OTgwIHRvU2NpICI5OTllLTk5OTk5OTk5OSIgIC0+ICc5Ljk5RS05OTk5OTk5OTcnCisKKy0tIFZhcnlpbmcgZXhwb25lbnQgbWF4aW11bXMKK3ByZWNpc2lvbjogNQorbWF4ZXhwb25lbnQ6IDAKK21pbmV4cG9uZW50OiAwCitlbWF4MDAxIHRvU2NpIC0xRSsyICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitlbWF4MDAyIHRvU2NpIC0xMDAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitlbWF4MDAzIHRvU2NpICAtMTAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitlbWF4MDA0IHRvU2NpICAgLTkuOSAtPiAtOS45CitlbWF4MDA1IHRvU2NpICAgLTkgICAtPiAtOQorZW1heDAwNiB0b1NjaSAgIC0xICAgLT4gLTEKK2VtYXgwMDcgdG9TY2kgICAgMCAgIC0+ICAwCitlbWF4MDA4IHRvU2NpICAgIDEgICAtPiAgMQorZW1heDAwOSB0b1NjaSAgICA5ICAgLT4gIDkKK2VtYXgwMTAgdG9TY2kgICAgOS45IC0+ICA5LjkKK2VtYXgwMTEgdG9TY2kgICAxMCAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgwMTIgdG9TY2kgIDEwMCAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgwMTMgdG9TY2kgIDFFKzIgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgwMTQgdG9TY2kgICAwLjk5IC0+ICAwLjk5IFN1Ym5vcm1hbAorZW1heDAxNSB0b1NjaSAgIDAuMSAgLT4gIDAuMSBTdWJub3JtYWwKK2VtYXgwMTYgdG9TY2kgICAwLjAxIC0+ICAwLjAxIFN1Ym5vcm1hbAorZW1heDAxNyB0b1NjaSAgMUUtMSAgLT4gIDAuMSBTdWJub3JtYWwKK2VtYXgwMTggdG9TY2kgIDFFLTIgIC0+ICAwLjAxIFN1Ym5vcm1hbAorCittYXhleHBvbmVudDogMQorbWluZXhwb25lbnQ6IC0xCitlbWF4MTAwIHRvU2NpIC0xRSszICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitlbWF4MTAxIHRvU2NpIC0xRSsyICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitlbWF4MTAyIHRvU2NpIC0xMDAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitlbWF4MTAzIHRvU2NpICAtMTAgICAtPiAtMTAKK2VtYXgxMDQgdG9TY2kgICAtOS45IC0+IC05LjkKK2VtYXgxMDUgdG9TY2kgICAtOSAgIC0+IC05CitlbWF4MTA2IHRvU2NpICAgLTEgICAtPiAtMQorZW1heDEwNyB0b1NjaSAgICAwICAgLT4gIDAKK2VtYXgxMDggdG9TY2kgICAgMSAgIC0+ICAxCitlbWF4MTA5IHRvU2NpICAgIDkgICAtPiAgOQorZW1heDExMCB0b1NjaSAgICA5LjkgLT4gIDkuOQorZW1heDExMSB0b1NjaSAgIDEwICAgLT4gMTAKK2VtYXgxMTIgdG9TY2kgIDEwMCAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgxMTMgdG9TY2kgIDFFKzIgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgxMTQgdG9TY2kgIDFFKzMgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgxMTUgdG9TY2kgICAwLjk5IC0+ICAwLjk5CitlbWF4MTE2IHRvU2NpICAgMC4xICAtPiAgMC4xCitlbWF4MTE3IHRvU2NpICAgMC4wMSAtPiAgMC4wMSBTdWJub3JtYWwKK2VtYXgxMTggdG9TY2kgIDFFLTEgIC0+ICAwLjEKK2VtYXgxMTkgdG9TY2kgIDFFLTIgIC0+ICAwLjAxIFN1Ym5vcm1hbAorZW1heDEyMCB0b1NjaSAgMUUtMyAgLT4gIDAuMDAxIFN1Ym5vcm1hbAorZW1heDEyMSB0b1NjaSAgMS4xRS0zICAtPiAgMC4wMDExIFN1Ym5vcm1hbAorZW1heDEyMiB0b1NjaSAgMS4xMUUtMyAgLT4gIDAuMDAxMTEgU3Vibm9ybWFsCitlbWF4MTIzIHRvU2NpICAxLjExMUUtMyAgLT4gIDAuMDAxMTEgU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgxMjQgdG9TY2kgIDEuMTExMUUtMyAgLT4gIDAuMDAxMTEgU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgxMjUgdG9TY2kgIDEuMTExMTFFLTMgIC0+ICAwLjAwMTExIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK21heGV4cG9uZW50OiAyCittaW5leHBvbmVudDogLTIKK3ByZWNpc2lvbjogOQorZW1heDIwMCB0b1NjaSAtMUUrMyAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDIwMSB0b1NjaSAtMUUrMiAgLT4gLTFFKzIKK2VtYXgyMDIgdG9TY2kgLTEwMCAgIC0+IC0xMDAKK2VtYXgyMDMgdG9TY2kgIC0xMCAgIC0+IC0xMAorZW1heDIwNCB0b1NjaSAgIC05LjkgLT4gLTkuOQorZW1heDIwNSB0b1NjaSAgIC05ICAgLT4gLTkKK2VtYXgyMDYgdG9TY2kgICAtMSAgIC0+IC0xCitlbWF4MjA3IHRvU2NpICAgIDAgICAtPiAgMAorZW1heDIwOCB0b1NjaSAgICAxICAgLT4gIDEKK2VtYXgyMDkgdG9TY2kgICAgOSAgIC0+ICA5CitlbWF4MjEwIHRvU2NpICAgIDkuOSAtPiAgOS45CitlbWF4MjExIHRvU2NpICAgMTAgICAtPiAxMAorZW1heDIxMiB0b1NjaSAgMTAwICAgLT4gMTAwCitlbWF4MjEzIHRvU2NpICAxRSsyICAtPiAxRSsyCitlbWF4MjE0IHRvU2NpICAxRSszICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitlbWF4MjE1IHRvU2NpICAgMC45OSAtPiAgMC45OQorZW1heDIxNiB0b1NjaSAgIDAuMSAgLT4gIDAuMQorZW1heDIxNyB0b1NjaSAgIDAuMDEgLT4gIDAuMDEKK2VtYXgyMTggdG9TY2kgIDAuMDAxIC0+ICAwLjAwMSBTdWJub3JtYWwKK2VtYXgyMTkgdG9TY2kgIDFFLTEgIC0+ICAwLjEKK2VtYXgyMjAgdG9TY2kgIDFFLTIgIC0+ICAwLjAxCitlbWF4MjIxIHRvU2NpICAxRS0zICAtPiAgMC4wMDEgU3Vibm9ybWFsCitlbWF4MjIyIHRvU2NpICAxRS00ICAtPiAgMC4wMDAxIFN1Ym5vcm1hbAorZW1heDIyMyB0b1NjaSAgMUUtNSAgLT4gIDAuMDAwMDEgU3Vibm9ybWFsCitlbWF4MjI0IHRvU2NpICAxRS02ICAtPiAgMC4wMDAwMDEgU3Vibm9ybWFsCitlbWF4MjI1IHRvU2NpICAxRS03ICAtPiAgMUUtNyAgU3Vibm9ybWFsCitlbWF4MjI2IHRvU2NpICAxRS04ICAtPiAgMUUtOCAgU3Vibm9ybWFsCitlbWF4MjI3IHRvU2NpICAxRS05ICAtPiAgMUUtOSAgU3Vibm9ybWFsCitlbWF4MjI4IHRvU2NpICAxRS0xMCAtPiAgMUUtMTAgU3Vibm9ybWFsCitlbWF4MjI5IHRvU2NpICAxRS0xMSAtPiAgMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZW1heDIzMCB0b1NjaSAgMUUtMTIgLT4gIDBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworbWF4ZXhwb25lbnQ6IDcKK21pbmV4cG9uZW50OiAtNworZW1heDIzMSB0b1NjaSAgMUUtOCAgLT4gIDFFLTggU3Vibm9ybWFsCitlbWF4MjMyIHRvU2NpICAxRS03ICAtPiAgMUUtNworZW1heDIzMyB0b1NjaSAgMUUtNiAgLT4gIDAuMDAwMDAxCitlbWF4MjM0IHRvU2NpICAxRS01ICAtPiAgMC4wMDAwMQorZW1heDIzNSB0b1NjaSAgMUUrNSAgLT4gIDFFKzUKK2VtYXgyMzYgdG9TY2kgIDFFKzYgIC0+ICAxRSs2CitlbWF4MjM3IHRvU2NpICAxRSs3ICAtPiAgMUUrNworZW1heDIzOCB0b1NjaSAgMUUrOCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCittYXhleHBvbmVudDogOQorbWluZXhwb25lbnQ6IC05CitlbWF4MjQwIHRvU2NpICAxRS0yMSAtPiAgMEUtMTcgU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZW1heDI0MSB0b1NjaSAgMUUtMTAgLT4gIDFFLTEwIFN1Ym5vcm1hbAorZW1heDI0MiB0b1NjaSAgMUUtOSAgLT4gIDFFLTkKK2VtYXgyNDMgdG9TY2kgIDFFLTggIC0+ICAxRS04CitlbWF4MjQ0IHRvU2NpICAxRS03ICAtPiAgMUUtNworZW1heDI0NSB0b1NjaSAgMUUrNyAgLT4gIDFFKzcKK2VtYXgyNDYgdG9TY2kgIDFFKzggIC0+ICAxRSs4CitlbWF4MjQ3IHRvU2NpICAxRSs5ICAtPiAgMUUrOQorZW1heDI0OCB0b1NjaSAgMUUrMTAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCittYXhleHBvbmVudDogMTAgIC0tIGJvdW5kYXJ5CittaW5leHBvbmVudDogLTEwCitlbWF4MjUwIHRvU2NpICAxRS0yMSAtPiAgMEUtMTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZW1heDI1MSB0b1NjaSAgMUUtMTEgLT4gIDFFLTExIFN1Ym5vcm1hbAorZW1heDI1MiB0b1NjaSAgMUUtMTAgLT4gIDFFLTEwCitlbWF4MjUzIHRvU2NpICAxRS05ICAtPiAgMUUtOQorZW1heDI1NCB0b1NjaSAgMUUtOCAgLT4gIDFFLTgKK2VtYXgyNTUgdG9TY2kgIDFFKzggIC0+ICAxRSs4CitlbWF4MjU2IHRvU2NpICAxRSs5ICAtPiAgMUUrOQorZW1heDI1NyB0b1NjaSAgMUUrMTAgLT4gIDFFKzEwCitlbWF4MjU4IHRvU2NpICAxRSsxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK2VtYXgyNjAgdG9TY2kgIDEuMDBFLTIxIC0+ICAwRS0xOCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitlbWF4MjYxIHRvU2NpICAxLjAwRS0xMSAtPiAgMS4wMEUtMTEgU3Vibm9ybWFsCitlbWF4MjYyIHRvU2NpICAxLjAwRS0xMCAtPiAgMS4wMEUtMTAKK2VtYXgyNjMgdG9TY2kgIDEuMDBFLTkgIC0+ICAxLjAwRS05CitlbWF4MjY0IHRvU2NpICAxLjAwRS04ICAtPiAgMS4wMEUtOAorZW1heDI2NSB0b1NjaSAgMS4wMEUrOCAgLT4gIDEuMDBFKzgKK2VtYXgyNjYgdG9TY2kgIDEuMDBFKzkgIC0+ICAxLjAwRSs5CitlbWF4MjY3IHRvU2NpICAxLjAwRSsxMCAtPiAgMS4wMEUrMTAKK2VtYXgyNjggdG9TY2kgIDEuMDBFKzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgyNzAgdG9TY2kgIDkuOTlFLTIxIC0+ICAwRS0xOCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitlbWF4MjcxIHRvU2NpICA5Ljk5RS0xMSAtPiAgOS45OUUtMTEgU3Vibm9ybWFsCitlbWF4MjcyIHRvU2NpICA5Ljk5RS0xMCAtPiAgOS45OUUtMTAKK2VtYXgyNzMgdG9TY2kgIDkuOTlFLTkgIC0+ICA5Ljk5RS05CitlbWF4Mjc0IHRvU2NpICA5Ljk5RS04ICAtPiAgOS45OUUtOAorZW1heDI3NSB0b1NjaSAgOS45OUUrOCAgLT4gIDkuOTlFKzgKK2VtYXgyNzYgdG9TY2kgIDkuOTlFKzkgIC0+ICA5Ljk5RSs5CitlbWF4Mjc3IHRvU2NpICA5Ljk5RSsxMCAtPiAgOS45OUUrMTAKK2VtYXgyNzggdG9TY2kgIDkuOTlFKzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworbWF4ZXhwb25lbnQ6IDk5CittaW5leHBvbmVudDogLTk5CitlbWF4MjgwIHRvU2NpICAxRS0xMjAgLT4gIDBFLTEwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitlbWF4MjgxIHRvU2NpICAxRS0xMDAgLT4gIDFFLTEwMCBTdWJub3JtYWwKK2VtYXgyODIgdG9TY2kgIDFFLTk5ICAtPiAgMUUtOTkKK2VtYXgyODMgdG9TY2kgIDFFLTk4ICAtPiAgMUUtOTgKK2VtYXgyODQgdG9TY2kgIDFFKzk4ICAtPiAgMUUrOTgKK2VtYXgyODUgdG9TY2kgIDFFKzk5ICAtPiAgMUUrOTkKK2VtYXgyODYgdG9TY2kgIDFFKzEwMCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitlbWF4MjkxIHRvU2NpICAxRS0xMDAwIC0+ICAxRS0xMDAwIFN1Ym5vcm1hbAorZW1heDI5MiB0b1NjaSAgMUUtOTk5ICAtPiAgMUUtOTk5CitlbWF4MjkzIHRvU2NpICAxRSs5OTkgIC0+ICAxRSs5OTkKK2VtYXgyOTQgdG9TY2kgIDFFKzEwMDAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorbWF4ZXhwb25lbnQ6IDk5OTkKK21pbmV4cG9uZW50OiAtOTk5OQorZW1heDMwMSB0b1NjaSAgMUUtMTAwMDAgLT4gIDFFLTEwMDAwIFN1Ym5vcm1hbAorZW1heDMwMiB0b1NjaSAgMUUtOTk5OSAgLT4gIDFFLTk5OTkKK2VtYXgzMDMgdG9TY2kgIDFFKzk5OTkgIC0+ICAxRSs5OTk5CitlbWF4MzA0IHRvU2NpICAxRSsxMDAwMCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCittYXhleHBvbmVudDogOTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTkKK2VtYXgzMTEgdG9TY2kgIDFFLTEwMDAwMCAtPiAgMUUtMTAwMDAwIFN1Ym5vcm1hbAorZW1heDMxMiB0b1NjaSAgMUUtOTk5OTkgIC0+ICAxRS05OTk5OQorZW1heDMxMyB0b1NjaSAgMUUrOTk5OTkgIC0+ICAxRSs5OTk5OQorZW1heDMxNCB0b1NjaSAgMUUrMTAwMDAwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK21heGV4cG9uZW50OiA5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5CitlbWF4MzIxIHRvU2NpICAxRS0xMDAwMDAwIC0+ICAxRS0xMDAwMDAwIFN1Ym5vcm1hbAorZW1heDMyMiB0b1NjaSAgMUUtOTk5OTk5ICAtPiAgMUUtOTk5OTk5CitlbWF4MzIzIHRvU2NpICAxRSs5OTk5OTkgIC0+ICAxRSs5OTk5OTkKK2VtYXgzMjQgdG9TY2kgIDFFKzEwMDAwMDAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorbWF4ZXhwb25lbnQ6IDk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OQorZW1heDMzMSB0b1NjaSAgMUUtMTAwMDAwMDAgLT4gIDFFLTEwMDAwMDAwIFN1Ym5vcm1hbAorZW1heDMzMiB0b1NjaSAgMUUtOTk5OTk5OSAgLT4gIDFFLTk5OTk5OTkKK2VtYXgzMzMgdG9TY2kgIDFFKzk5OTk5OTkgIC0+ICAxRSs5OTk5OTk5CitlbWF4MzM0IHRvU2NpICAxRSsxMDAwMDAwMCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCittYXhleHBvbmVudDogOTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTkKK2VtYXgzNDEgdG9TY2kgIDFFLTEwMDAwMDAwMCAtPiAgMUUtMTAwMDAwMDAwIFN1Ym5vcm1hbAorZW1heDM0MiB0b1NjaSAgMUUtOTk5OTk5OTkgIC0+ICAxRS05OTk5OTk5OQorZW1heDM0MyB0b1NjaSAgMUUrOTk5OTk5OTkgIC0+ICAxRSs5OTk5OTk5OQorZW1heDM0NCB0b1NjaSAgMUUrMTAwMDAwMDAwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK2VtYXgzNDcgdG9TY2kgIDFFLTEwMDAwMDAwMDggICAgIC0+ICAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2VtYXgzNDggdG9TY2kgIDFFLTEwMDAwMDAwMDcgICAgIC0+ICAxRS0xMDAwMDAwMDA3IFN1Ym5vcm1hbAorZW1heDM0OSB0b1NjaSAgMUUtMTAwMDAwMDAwMCAgICAgLT4gIDFFLTEwMDAwMDAwMDAgU3Vibm9ybWFsCitlbWF4MzUwIHRvU2NpICAxRS05OTk5OTk5OTkgICAgICAtPiAgMUUtOTk5OTk5OTk5CitlbWF4MzUxIHRvU2NpICAxRSs5OTk5OTk5OTkgICAgICAtPiAgMUUrOTk5OTk5OTk5CitlbWF4MzUyIHRvU2NpICAxRSsxMDAwMDAwMDAwICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitlbWF4MzUzIHRvU2NpICAxLjAwMEUtMTAwMDAwMDAwMCAtPiAgMS4wMDBFLTEwMDAwMDAwMDAgU3Vibm9ybWFsCitlbWF4MzU0IHRvU2NpICAxLjAwMEUtOTk5OTk5OTk5ICAtPiAgMS4wMDBFLTk5OTk5OTk5OQorZW1heDM1NSB0b1NjaSAgMS4wMDBFKzk5OTk5OTk5OSAgLT4gIDEuMDAwRSs5OTk5OTk5OTkKK2VtYXgzNTYgdG9TY2kgIDEuMDAwRSsxMDAwMDAwMDAwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgzNTcgdG9TY2kgIDEuMDAxRS0xMDAwMDAwMDA4IC0+ICAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2VtYXgzNTggdG9TY2kgIDEuMDAxRS0xMDAwMDAwMDA3IC0+ICAxRS0xMDAwMDAwMDA3IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitlbWF4MzU5IHRvU2NpICAxLjAwMUUtMTAwMDAwMDAwMCAtPiAgMS4wMDFFLTEwMDAwMDAwMDAgU3Vibm9ybWFsCitlbWF4MzYwIHRvU2NpICAxLjAwMUUtOTk5OTk5OTk5ICAtPiAgMS4wMDFFLTk5OTk5OTk5OQorZW1heDM2MSB0b1NjaSAgMS4wMDFFKzk5OTk5OTk5OSAgLT4gIDEuMDAxRSs5OTk5OTk5OTkKK2VtYXgzNjIgdG9TY2kgIDEuMDAxRSsxMDAwMDAwMDAwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgzNjMgdG9TY2kgIDkuMDAwRS0xMDAwMDAwMDAwIC0+ICA5LjAwMEUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK2VtYXgzNjQgdG9TY2kgIDkuMDAwRS05OTk5OTk5OTkgIC0+ICA5LjAwMEUtOTk5OTk5OTk5CitlbWF4MzY1IHRvU2NpICA5LjAwMEUrOTk5OTk5OTk5ICAtPiAgOS4wMDBFKzk5OTk5OTk5OQorZW1heDM2NiB0b1NjaSAgOS4wMDBFKzEwMDAwMDAwMDAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDM2NyB0b1NjaSAgOS45OTlFLTEwMDAwMDAwMDkgLT4gIDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZW1heDM2OCB0b1NjaSAgOS45OTlFLTEwMDAwMDAwMDggLT4gIDFFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXgzNjkgdG9TY2kgIDkuOTk5RS0xMDAwMDAwMDA3IC0+ICAxLjBFLTEwMDAwMDAwMDYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXgzNzAgdG9TY2kgIDkuOTk5RS0xMDAwMDAwMDAwIC0+ICA5Ljk5OUUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK2VtYXgzNzEgdG9TY2kgIDkuOTk5RS05OTk5OTk5OTkgIC0+ICA5Ljk5OUUtOTk5OTk5OTk5CitlbWF4MzcyIHRvU2NpICA5Ljk5OUUrOTk5OTk5OTk5ICAtPiAgOS45OTlFKzk5OTk5OTk5OQorCitlbWF4MzczIHRvU2NpICA5Ljk5OUUrMTAwMDAwMDAwMCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitlbWF4Mzc0IHRvU2NpIC0xRS0xMDAwMDAwMDAwICAgICAtPiAtMUUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK2VtYXgzNzUgdG9TY2kgLTFFLTk5OTk5OTk5OSAgICAgIC0+IC0xRS05OTk5OTk5OTkKK2VtYXgzNzYgdG9TY2kgLTFFKzk5OTk5OTk5OSAgICAgIC0+IC0xRSs5OTk5OTk5OTkKK2VtYXgzNzcgdG9TY2kgLTFFKzEwMDAwMDAwMDAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgzNzggdG9TY2kgLTEuMDAwRS0xMDAwMDAwMDAwIC0+IC0xLjAwMEUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK2VtYXgzNzkgdG9TY2kgLTEuMDAwRS05OTk5OTk5OTkgIC0+IC0xLjAwMEUtOTk5OTk5OTk5CitlbWF4MzgwIHRvU2NpIC0xLjAwMEUrOTk5OTk5OTk5ICAtPiAtMS4wMDBFKzk5OTk5OTk5OQorZW1heDM4MSB0b1NjaSAtMS4wMDBFKzEwMDAwMDAwMDAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZW1heDM4MiB0b1NjaSAtMS4wMDFFLTEwMDAwMDAwMDggLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZW1heDM4MyB0b1NjaSAtMS4wMDFFLTk5OTk5OTk5OSAgLT4gLTEuMDAxRS05OTk5OTk5OTkKK2VtYXgzODQgdG9TY2kgLTEuMDAxRSs5OTk5OTk5OTkgIC0+IC0xLjAwMUUrOTk5OTk5OTk5CitlbWF4Mzg1IHRvU2NpIC0xLjAwMUUrMTAwMDAwMDAwMCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitlbWF4Mzg2IHRvU2NpIC05LjAwMEUtMTAwMDAwMDEyMyAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitlbWF4Mzg3IHRvU2NpIC05LjAwMEUtOTk5OTk5OTk5ICAtPiAtOS4wMDBFLTk5OTk5OTk5OQorZW1heDM4OCB0b1NjaSAtOS4wMDBFKzk5OTk5OTk5OSAgLT4gLTkuMDAwRSs5OTk5OTk5OTkKK2VtYXgzODkgdG9TY2kgLTkuMDAwRSsxMDAwMDAwMDAwIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2VtYXgzOTAgdG9TY2kgLTkuOTk5RS0xMDAwMDAwMDA4IC0+IC0xRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4MzkxIHRvU2NpIC05Ljk5OUUtOTk5OTk5OTk5ICAtPiAtOS45OTlFLTk5OTk5OTk5OQorZW1heDM5MiB0b1NjaSAtOS45OTlFKzk5OTk5OTk5OSAgLT4gLTkuOTk5RSs5OTk5OTk5OTkKK2VtYXgzOTMgdG9TY2kgLTkuOTk5RSsxMDAwMDAwMDAwIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gTm93IGNoZWNrIDg1NCByb3VuZGluZyBvZiBzdWJub3JtYWxzIGFuZCBwcm9wZXIgdW5kZXJmbG93IHRvIDAKK3ByZWNpc2lvbjogICA1CittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitlbWF4NDAwIHRvU2NpICAxLjAwMDBFLTk5OSAgICAgLT4gMS4wMDAwRS05OTkKK2VtYXg0MDEgdG9TY2kgIDAuMUUtOTk5ICAgICAgICAtPiAxRS0xMDAwICAgICBTdWJub3JtYWwKK2VtYXg0MDIgdG9TY2kgIDAuMTAwMEUtOTk5ICAgICAtPiAxLjAwMEUtMTAwMCBTdWJub3JtYWwKK2VtYXg0MDMgdG9TY2kgIDAuMDEwMEUtOTk5ICAgICAtPiAxLjAwRS0xMDAxICBTdWJub3JtYWwKK2VtYXg0MDQgdG9TY2kgIDAuMDAxMEUtOTk5ICAgICAtPiAxLjBFLTEwMDIgICBTdWJub3JtYWwKK2VtYXg0MDUgdG9TY2kgIDAuMDAwMUUtOTk5ICAgICAtPiAxRS0xMDAzICAgICBTdWJub3JtYWwKK2VtYXg0MDYgdG9TY2kgIDAuMDAwMTBFLTk5OSAgICAtPiAxRS0xMDAzICAgICBTdWJub3JtYWwgUm91bmRlZAorZW1heDQwNyB0b1NjaSAgMC4wMDAxM0UtOTk5ICAgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDA4IHRvU2NpICAwLjAwMDE1RS05OTkgICAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MDkgdG9TY2kgIDAuMDAwMTdFLTk5OSAgICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQxMCB0b1NjaSAgMC4wMDAyM0UtOTk5ICAgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDExIHRvU2NpICAwLjAwMDI1RS05OTkgICAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MTIgdG9TY2kgIDAuMDAwMjdFLTk5OSAgICAtPiAzRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQxMyB0b1NjaSAgMC4wMDAxNDlFLTk5OSAgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDE0IHRvU2NpICAwLjAwMDE1MEUtOTk5ICAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MTUgdG9TY2kgIDAuMDAwMTUxRS05OTkgICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQxNiB0b1NjaSAgMC4wMDAyNDlFLTk5OSAgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDE3IHRvU2NpICAwLjAwMDI1MEUtOTk5ICAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MTggdG9TY2kgIDAuMDAwMjUxRS05OTkgICAtPiAzRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQxOSB0b1NjaSAgMC4wMDAwOUUtOTk5ICAgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDIwIHRvU2NpICAwLjAwMDA1RS05OTkgICAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZW1heDQyMSB0b1NjaSAgMC4wMDAwM0UtOTk5ICAgIC0+IDBFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2VtYXg0MjIgdG9TY2kgIDAuMDAwMDA5RS05OTkgICAtPiAwRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitlbWF4NDIzIHRvU2NpICAwLjAwMDAwNUUtOTk5ICAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZW1heDQyNCB0b1NjaSAgMC4wMDAwMDNFLTk5OSAgIC0+IDBFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworZW1heDQyNSB0b1NjaSAgMC4wMDEwNDlFLTk5OSAgIC0+IDEuMEUtMTAwMiAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDI2IHRvU2NpICAwLjAwMTA1MEUtOTk5ICAgLT4gMS4wRS0xMDAyICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MjcgdG9TY2kgIDAuMDAxMDUxRS05OTkgICAtPiAxLjFFLTEwMDIgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQyOCB0b1NjaSAgMC4wMDExNDlFLTk5OSAgIC0+IDEuMUUtMTAwMiAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDI5IHRvU2NpICAwLjAwMTE1MEUtOTk5ICAgLT4gMS4yRS0xMDAyICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MzAgdG9TY2kgIDAuMDAxMTUxRS05OTkgICAtPiAxLjJFLTEwMDIgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitlbWF4NDMyIHRvU2NpICAwLjAxMDA0OUUtOTk5ICAgLT4gMS4wMEUtMTAwMSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MzMgdG9TY2kgIDAuMDEwMDUwRS05OTkgICAtPiAxLjAwRS0xMDAxICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQzNCB0b1NjaSAgMC4wMTAwNTFFLTk5OSAgIC0+IDEuMDFFLTEwMDEgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDM1IHRvU2NpICAwLjAxMDE0OUUtOTk5ICAgLT4gMS4wMUUtMTAwMSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0MzYgdG9TY2kgIDAuMDEwMTUwRS05OTkgICAtPiAxLjAyRS0xMDAxICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQzNyB0b1NjaSAgMC4wMTAxNTFFLTk5OSAgIC0+IDEuMDJFLTEwMDEgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2VtYXg0NDAgdG9TY2kgIDAuMTAxMDNFLTk5OSAgICAtPiAxLjAxMEUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ0MSB0b1NjaSAgMC4xMDEwNUUtOTk5ICAgIC0+IDEuMDEwRS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDQyIHRvU2NpICAwLjEwMTA3RS05OTkgICAgLT4gMS4wMTFFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0NDMgdG9TY2kgIDAuMTAxMTNFLTk5OSAgICAtPiAxLjAxMUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ0NCB0b1NjaSAgMC4xMDExNUUtOTk5ICAgIC0+IDEuMDEyRS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDQ1IHRvU2NpICAwLjEwMTE3RS05OTkgICAgLT4gMS4wMTJFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZW1heDQ1MCB0b1NjaSAgMS4xMDczMEUtMTAwMCAgIC0+IDEuMTA3RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDUxIHRvU2NpICAxLjEwNzUwRS0xMDAwICAgLT4gMS4xMDhFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0NTIgdG9TY2kgIDEuMTA3NzBFLTEwMDAgICAtPiAxLjEwOEUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ1MyB0b1NjaSAgMS4xMDgzMEUtMTAwMCAgIC0+IDEuMTA4RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitlbWF4NDU0IHRvU2NpICAxLjEwODUwRS0xMDAwICAgLT4gMS4xMDhFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0NTUgdG9TY2kgIDEuMTA4NzBFLTEwMDAgICAtPiAxLjEwOUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBtYWtlIHN1cmUgc2lnbiBPSworZW1heDQ1NiB0b1NjaSAgLTAuMTAxMDNFLTk5OSAgIC0+IC0xLjAxMEUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ1NyB0b1NjaSAgLTAuMTAxMDVFLTk5OSAgIC0+IC0xLjAxMEUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ1OCB0b1NjaSAgLTAuMTAxMDdFLTk5OSAgIC0+IC0xLjAxMUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ1OSB0b1NjaSAgLTAuMTAxMTNFLTk5OSAgIC0+IC0xLjAxMUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ2MCB0b1NjaSAgLTAuMTAxMTVFLTk5OSAgIC0+IC0xLjAxMkUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZW1heDQ2MSB0b1NjaSAgLTAuMTAxMTdFLTk5OSAgIC0+IC0xLjAxMkUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSAnOTk5cycgY2FzZXMKK2VtYXg0NjQgdG9TY2kgIDk5OTk5OUUtOTk5ICAgICAgICAgLT4gMS4wMDAwRS05OTMgSW5leGFjdCBSb3VuZGVkCitlbWF4NDY1IHRvU2NpICA5OTk5OS4wRS05OTkgICAgICAgIC0+IDkuOTk5OUUtOTk1IFJvdW5kZWQKK2VtYXg0NjYgdG9TY2kgIDk5OTk5LkUtOTk5ICAgICAgICAgLT4gOS45OTk5RS05OTUKK2VtYXg0NjcgdG9TY2kgIDk5OTkuOUUtOTk5ICAgICAgICAgLT4gOS45OTk5RS05OTYKK2VtYXg0NjggdG9TY2kgIDk5OS45OUUtOTk5ICAgICAgICAgLT4gOS45OTk5RS05OTcKK2VtYXg0NjkgdG9TY2kgIDk5Ljk5OUUtOTk5ICAgICAgICAgLT4gOS45OTk5RS05OTgKK2VtYXg0NzAgdG9TY2kgIDkuOTk5OUUtOTk5ICAgICAgICAgLT4gOS45OTk5RS05OTkKK2VtYXg0NzEgdG9TY2kgIDAuOTk5OTlFLTk5OSAgICAgICAgLT4gMS4wMDAwRS05OTkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0NzIgdG9TY2kgIDAuMDk5OTk5RS05OTkgICAgICAgLT4gMS4wMDBFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0NzMgdG9TY2kgIDAuMDA5OTk5OUUtOTk5ICAgICAgLT4gMS4wMEUtMTAwMSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0NzQgdG9TY2kgIDAuMDAwOTk5OTlFLTk5OSAgICAgLT4gMS4wRS0xMDAyICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0NzUgdG9TY2kgIDAuMDAwMDk5OTk5RS05OTkgICAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2VtYXg0NzYgdG9TY2kgIDAuMDAwMDA5OTk5OUUtOTk5ICAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZW1heDQ3NyB0b1NjaSAgMC4wMDAwMDA5OTk5OUUtOTk5ICAtPiAwRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitlbWF4NDc4IHRvU2NpICAwLjAwMDAwMDA5OTk5OUUtOTk5IC0+IDBFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gRXhwb25lbnRzIHdpdGggaW5zaWduaWZpY2FudCBsZWFkaW5nIHplcm9zCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitiYXN4MTAwMSB0b1NjaSAgMWU5OTk5OTk5OTkgLT4gMUUrOTk5OTk5OTk5CitiYXN4MTAwMiB0b1NjaSAgMWUwOTk5OTk5OTk5IC0+IDFFKzk5OTk5OTk5OQorYmFzeDEwMDMgdG9TY2kgIDFlMDA5OTk5OTk5OTkgLT4gMUUrOTk5OTk5OTk5CitiYXN4MTAwNCB0b1NjaSAgMWUwMDA5OTk5OTk5OTkgLT4gMUUrOTk5OTk5OTk5CitiYXN4MTAwNSB0b1NjaSAgMWUwMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gMUUrOTk5OTk5OTk5CitiYXN4MTAwNiB0b1NjaSAgMWUwMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitiYXN4MTAwNyB0b1NjaSAgMWUtOTk5OTk5OTk5IC0+IDFFLTk5OTk5OTk5OQorYmFzeDEwMDggdG9TY2kgIDFlLTA5OTk5OTk5OTkgLT4gMUUtOTk5OTk5OTk5CitiYXN4MTAwOSB0b1NjaSAgMWUtMDA5OTk5OTk5OTkgLT4gMUUtOTk5OTk5OTk5CitiYXN4MTAxMCB0b1NjaSAgMWUtMDAwOTk5OTk5OTk5IC0+IDFFLTk5OTk5OTk5OQorYmFzeDEwMTEgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiAxRS05OTk5OTk5OTkKK2Jhc3gxMDEyIHRvU2NpICAxZS0wMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gMUUtMTAwMDAwMDAwNyBTdWJub3JtYWwKKworLS0gRWRnZSBjYXNlcyBmb3IgaW50MzIgZXhwb25lbnRzLi4uCitiYXN4MTAyMSB0b3NjaSAxZSsyMTQ3NDgzNjQ5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYmFzeDEwMjIgdG9zY2kgMWUrMjE0NzQ4MzY0OCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Jhc3gxMDIzIHRvc2NpIDFlKzIxNDc0ODM2NDcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitiYXN4MTAyNCB0b3NjaSAxZS0yMTQ3NDgzNjQ3IC0+IDBFLTEwMDAwMDAwMTQgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorYmFzeDEwMjUgdG9zY2kgMWUtMjE0NzQ4MzY0OCAtPiAwRS0xMDAwMDAwMDE0IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Jhc3gxMDI2IHRvc2NpIDFlLTIxNDc0ODM2NDkgLT4gMEUtMTAwMDAwMDAxNCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCistLSBzYW1lIHVuYmFsYW5jZWQKK3ByZWNpc2lvbjogICA3CittYXhFeHBvbmVudDogOTYKK21pbmV4cG9uZW50OiAtOTUKK2Jhc3gxMDMxIHRvc2NpIDFlKzIxNDc0ODM2NDkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitiYXN4MTAzMiB0b3NjaSAxZSsyMTQ3NDgzNjQ4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorYmFzeDEwMzMgdG9zY2kgMWUrMjE0NzQ4MzY0NyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Jhc3gxMDM0IHRvc2NpIDFlLTIxNDc0ODM2NDcgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Jhc3gxMDM1IHRvc2NpIDFlLTIxNDc0ODM2NDggLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Jhc3gxMDM2IHRvc2NpIDFlLTIxNDc0ODM2NDkgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK3ByZWNpc2lvbjogICA1CittYXhleHBvbmVudDogNzkKK21pbmV4cG9uZW50OiAtNzkKK2Jhc3gxMDQxIHRvU2NpICAgICAxLjUyNDQ0RS04MCAgLT4gIDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworYmFzeDEwNDIgdG9TY2kgICAgIDEuNTI0NDVFLTgwICAtPiAgMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitiYXN4MTA0MyB0b1NjaSAgICAgMS41MjQ0NkUtODAgIC0+ICAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gY2xhbXBlZCB6ZXJvcyBbc2VlIGFsc28gY2xhbXAuZGVjVGVzdF0KK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0MworCitiYXN4MTA2MSBhcHBseSAgIDBlKzEwMDAwICAtPiAgMEUrNjE0NCBDbGFtcGVkCitiYXN4MTA2MiBhcHBseSAgIDBlLTEwMDAwICAtPiAgMEUtNjE3NiBDbGFtcGVkCitiYXN4MTA2MyBhcHBseSAgLTBlKzEwMDAwICAtPiAtMEUrNjE0NCBDbGFtcGVkCitiYXN4MTA2NCBhcHBseSAgLTBlLTEwMDAwICAtPiAtMEUtNjE3NiBDbGFtcGVkCisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKKworYmFzeDEwNjUgYXBwbHkgICAwZSsxMDAwMCAgLT4gIDBFKzM4NCAgQ2xhbXBlZAorYmFzeDEwNjYgYXBwbHkgICAwZS0xMDAwMCAgLT4gIDBFLTM5OCAgQ2xhbXBlZAorYmFzeDEwNjcgYXBwbHkgIC0wZSsxMDAwMCAgLT4gLTBFKzM4NCAgQ2xhbXBlZAorYmFzeDEwNjggYXBwbHkgIC0wZS0xMDAwMCAgLT4gLTBFLTM5OCAgQ2xhbXBlZAorCistLSBzYW1lIHdpdGggSUVFRSBjbGFtcGluZworY2xhbXA6ICAgICAgIDEKKworcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCisKK2Jhc3gxMDcxIGFwcGx5ICAgMGUrMTAwMDAgIC0+ICAwRSs2MTExIENsYW1wZWQKK2Jhc3gxMDcyIGFwcGx5ICAgMGUtMTAwMDAgIC0+ICAwRS02MTc2IENsYW1wZWQKK2Jhc3gxMDczIGFwcGx5ICAtMGUrMTAwMDAgIC0+IC0wRSs2MTExIENsYW1wZWQKK2Jhc3gxMDc0IGFwcGx5ICAtMGUtMTAwMDAgIC0+IC0wRS02MTc2IENsYW1wZWQKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworCitiYXN4MTA3NSBhcHBseSAgIDBlKzEwMDAwICAtPiAgMEUrMzY5ICBDbGFtcGVkCitiYXN4MTA3NiBhcHBseSAgIDBlLTEwMDAwICAtPiAgMEUtMzk4ICBDbGFtcGVkCitiYXN4MTA3NyBhcHBseSAgLTBlKzEwMDAwICAtPiAtMEUrMzY5ICBDbGFtcGVkCitiYXN4MTA3OCBhcHBseSAgLTBlLTEwMDAwICAtPiAtMEUtMzk4ICBDbGFtcGVkCisKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jbGFtcC5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jbGFtcC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYzY2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NsYW1wLmRlY1Rlc3QKQEAgLTAsMCArMSwyMTEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gY2xhbXAuZGVjVGVzdCAtLSBjbGFtcGVkIGV4cG9uZW50IHRlc3RzIChmb3JtYXQtaW5kZXBlbmRlbnQpICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMCwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyB1c2VzIHRoZSBzYW1lIGxpbWl0cyBhcyB0aGUgOC1ieXRlIGNvbmNyZXRlCistLSByZXByZXNlbnRhdGlvbiwgYnV0IGFwcGxpZXMgY2xhbXBpbmcgd2l0aG91dCB1c2luZyBmb3JtYXQtc3BlY2lmaWMKKy0tIGNvbnZlcnNpb25zLgorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworY2xhbXA6ICAgICAgIDEKKworLS0gR2VuZXJhbCB0ZXN0Y2FzZXMKKworLS0gTm9ybWFsaXR5CitjbGFtMDEwIGFwcGx5ICAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0+ICAxMjM0NTY3ODkwMTIzNDU2CitjbGFtMDExIGFwcGx5ICAgMTIzNDU2Nzg5MDEyMzQ1Ni4wIC0+ICAxMjM0NTY3ODkwMTIzNDU2IFJvdW5kZWQKK2NsYW0wMTIgYXBwbHkgICAxMjM0NTY3ODkwMTIzNDU2LjEgLT4gIDEyMzQ1Njc4OTAxMjM0NTYgUm91bmRlZCBJbmV4YWN0CitjbGFtMDEzIGFwcGx5ICAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0+IC0xMjM0NTY3ODkwMTIzNDU2CitjbGFtMDE0IGFwcGx5ICAtMTIzNDU2Nzg5MDEyMzQ1Ni4wIC0+IC0xMjM0NTY3ODkwMTIzNDU2IFJvdW5kZWQKK2NsYW0wMTUgYXBwbHkgIC0xMjM0NTY3ODkwMTIzNDU2LjEgLT4gLTEyMzQ1Njc4OTAxMjM0NTYgUm91bmRlZCBJbmV4YWN0CisKKworLS0gTm1heCBhbmQgc2ltaWxhcgorY2xhbTAyMiBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2NsYW0wMjQgYXBwbHkgICAxLjIzNDU2Nzg5MDEyMzQ1NkUrMzg0ICAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUrMzg0CistLSBmb2xkLWRvd25zIChtb3JlIGJlbG93KQorY2xhbTAzMCBhcHBseSAgIDEuMjNFKzM4NCAgICAgICAgICAgICAgIC0+IDEuMjMwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZAorY2xhbTAzMiBhcHBseSAgIDFFKzM4NCAgICAgICAgICAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZAorCitjbGFtMDUxIGFwcGx5ICAgMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDUKK2NsYW0wNTMgYXBwbHkgICAxMjM0ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0CitjbGFtMDU1IGFwcGx5ICAgMTIzICAgICAgICAgICAgICAgICAgICAgLT4gMTIzCitjbGFtMDU3IGFwcGx5ICAgMTIgICAgICAgICAgICAgICAgICAgICAgLT4gMTIKK2NsYW0wNTkgYXBwbHkgICAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxCitjbGFtMDYxIGFwcGx5ICAgMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gMS4yMworY2xhbTA2MyBhcHBseSAgIDEyMy40NSAgICAgICAgICAgICAgICAgIC0+IDEyMy40NQorCistLSBObWluIGFuZCBiZWxvdworY2xhbTA3MSBhcHBseSAgIDFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MworY2xhbTA3MyBhcHBseSAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2NsYW0wNzUgYXBwbHkgICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzCisKK2NsYW0wNzcgYXBwbHkgICAwLjEwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQgIFN1Ym5vcm1hbAorY2xhbTA3OSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDEwRS0zODMgIC0+IDEuMEUtMzk3ICAgICAgICAgICAgICAgU3Vibm9ybWFsCitjbGFtMDgxIGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMUUtMzgzICAgLT4gMUUtMzk3ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKK2NsYW0wODMgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAxRS0zOTggICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorCistLSB1bmRlcmZsb3dzCitjbGFtMDkwIGFwcGx5ICAgMWUtMzk4ICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbAorY2xhbTA5MSBhcHBseSAgIDEuOWUtMzk4ICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAyICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorY2xhbTA5MiBhcHBseSAgIDEuMWUtMzk4ICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorY2xhbTA5MyBhcHBseSAgIDEuMDAwMDAwMDAwMDFlLTM5OCAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorY2xhbTA5NCBhcHBseSAgIDEuMDAwMDAwMDAwMDAwMDFlLTM5OCAgIC0+ICMwMDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorY2xhbTA5NSBhcHBseSAgIDEuMDAwMDAwMDAwMDAwMDAxZS0zOTggIC0+ICMwMDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorY2xhbTA5NiBhcHBseSAgIDAuMWUtMzk4ICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitjbGFtMDk3IGFwcGx5ICAgMC4wMDAwMDAwMDAwMWUtMzk4ICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2NsYW0wOTggYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAxZS0zOTggICAtPiAjMDAwMDAwMDAwMDAwMDAwMCAgU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorY2xhbTA5OSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAxZS0zOTggIC0+ICMwMDAwMDAwMDAwMDAwMDAwICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIFNhbWUgYWdhaW4sIG5lZ2F0aXZlcworLS0gTm1heCBhbmQgc2ltaWxhcgorY2xhbTEyMiBhcHBseSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitjbGFtMTI0IGFwcGx5ICAtMS4yMzQ1Njc4OTAxMjM0NTZFKzM4NCAgLT4gLTEuMjM0NTY3ODkwMTIzNDU2RSszODQKKy0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpCitjbGFtMTMwIGFwcGx5ICAtMS4yM0UrMzg0ICAgICAgICAgICAgICAgLT4gLTEuMjMwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZAorY2xhbTEzMiBhcHBseSAgLTFFKzM4NCAgICAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUrMzg0IENsYW1wZWQKKworY2xhbTE1MSBhcHBseSAgLTEyMzQ1ICAgICAgICAgICAgICAgICAgIC0+IC0xMjM0NQorY2xhbTE1MyBhcHBseSAgLTEyMzQgICAgICAgICAgICAgICAgICAgIC0+IC0xMjM0CitjbGFtMTU1IGFwcGx5ICAtMTIzICAgICAgICAgICAgICAgICAgICAgLT4gLTEyMworY2xhbTE1NyBhcHBseSAgLTEyICAgICAgICAgICAgICAgICAgICAgIC0+IC0xMgorY2xhbTE1OSBhcHBseSAgLTEgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xCitjbGFtMTYxIGFwcGx5ICAtMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gLTEuMjMKK2NsYW0xNjMgYXBwbHkgIC0xMjMuNDUgICAgICAgICAgICAgICAgICAtPiAtMTIzLjQ1CisKKy0tIE5taW4gYW5kIGJlbG93CitjbGFtMTcxIGFwcGx5ICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLTFFLTM4MworY2xhbTE3MyBhcHBseSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitjbGFtMTc1IGFwcGx5ICAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMKKworY2xhbTE3NyBhcHBseSAgLTAuMTAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwRS0zODQgIFN1Ym5vcm1hbAorY2xhbTE3OSBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDEwRS0zODMgIC0+IC0xLjBFLTM5NyAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorY2xhbTE4MSBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDFFLTM4MyAgIC0+IC0xRS0zOTcgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorY2xhbTE4MyBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+IC0xRS0zOTggICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorCistLSB1bmRlcmZsb3dzCitjbGFtMTg5IGFwcGx5ICAgLTFlLTM5OCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbAorY2xhbTE5MCBhcHBseSAgIC0xLjBlLTM5OCAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwgUm91bmRlZAorY2xhbTE5MSBhcHBseSAgIC0xLjllLTM5OCAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAyICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorY2xhbTE5MiBhcHBseSAgIC0xLjFlLTM5OCAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorY2xhbTE5MyBhcHBseSAgIC0xLjAwMDAwMDAwMDAxZS0zOTggICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorY2xhbTE5NCBhcHBseSAgIC0xLjAwMDAwMDAwMDAwMDAxZS0zOTggIC0+ICM4MDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorY2xhbTE5NSBhcHBseSAgIC0xLjAwMDAwMDAwMDAwMDAwMWUtMzk4IC0+ICM4MDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorY2xhbTE5NiBhcHBseSAgIC0wLjFlLTM5OCAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitjbGFtMTk3IGFwcGx5ICAgLTAuMDAwMDAwMDAwMDFlLTM5OCAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDAgIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2NsYW0xOTggYXBwbHkgICAtMC4wMDAwMDAwMDAwMDAwMWUtMzk4ICAtPiAjODAwMDAwMDAwMDAwMDAwMCAgU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorY2xhbTE5OSBhcHBseSAgIC0wLjAwMDAwMDAwMDAwMDAwMWUtMzk4IC0+ICM4MDAwMDAwMDAwMDAwMDAwICBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIHplcm9zCitjbGFtNDAxIGFwcGx5ICAgMEUtNTAwICAgICAgICAgICAgICAgICAgLT4gMEUtMzk4ICBDbGFtcGVkCitjbGFtNDAyIGFwcGx5ICAgMEUtNDAwICAgICAgICAgICAgICAgICAgLT4gMEUtMzk4ICBDbGFtcGVkCitjbGFtNDAzIGFwcGx5ICAgMEUtMzk4ICAgICAgICAgICAgICAgICAgLT4gMEUtMzk4CitjbGFtNDA0IGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMEUtMzk4CitjbGFtNDA1IGFwcGx5ICAgMEUtMiAgICAgICAgICAgICAgICAgICAgLT4gIDAuMDAKK2NsYW00MDYgYXBwbHkgICAwICAgICAgICAgICAgICAgICAgICAgICAtPiAwCitjbGFtNDA3IGFwcGx5ICAgMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gMEUrMworY2xhbTQwOCBhcHBseSAgIDBFKzM2OSAgICAgICAgICAgICAgICAgIC0+IDBFKzM2OQorLS0gY2xhbXBlZCB6ZXJvcy4uLgorY2xhbTQxMCBhcHBseSAgIDBFKzM3MCAgICAgICAgICAgICAgICAgIC0+IDBFKzM2OSBDbGFtcGVkCitjbGFtNDExIGFwcGx5ICAgMEUrMzg0ICAgICAgICAgICAgICAgICAgLT4gMEUrMzY5IENsYW1wZWQKK2NsYW00MTIgYXBwbHkgICAwRSs0MDAgICAgICAgICAgICAgICAgICAtPiAwRSszNjkgQ2xhbXBlZAorY2xhbTQxMyBhcHBseSAgIDBFKzUwMCAgICAgICAgICAgICAgICAgIC0+IDBFKzM2OSBDbGFtcGVkCisKKy0tIG5lZ2F0aXZlIHplcm9zCitjbGFtNDIwIGFwcGx5ICAgLTBFLTUwMCAgICAgICAgICAgICAgICAgLT4gLTBFLTM5OCBDbGFtcGVkCitjbGFtNDIxIGFwcGx5ICAgLTBFLTQwMCAgICAgICAgICAgICAgICAgLT4gLTBFLTM5OCBDbGFtcGVkCitjbGFtNDIyIGFwcGx5ICAgLTBFLTM5OCAgICAgICAgICAgICAgICAgLT4gLTBFLTM5OAorY2xhbTQyMyBhcHBseSAgIC0wLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0+IC0wRS0zOTgKK2NsYW00MjQgYXBwbHkgICAtMEUtMiAgICAgICAgICAgICAgICAgICAtPiAtMC4wMAorY2xhbTQyNSBhcHBseSAgIC0wICAgICAgICAgICAgICAgICAgICAgIC0+IC0wCitjbGFtNDI2IGFwcGx5ICAgLTBFKzMgICAgICAgICAgICAgICAgICAgLT4gLTBFKzMKK2NsYW00MjcgYXBwbHkgICAtMEUrMzY5ICAgICAgICAgICAgICAgICAtPiAtMEUrMzY5CistLSBjbGFtcGVkIHplcm9zLi4uCitjbGFtNDMxIGFwcGx5ICAgLTBFKzM3MCAgICAgICAgICAgICAgICAgLT4gLTBFKzM2OSBDbGFtcGVkCitjbGFtNDMyIGFwcGx5ICAgLTBFKzM4NCAgICAgICAgICAgICAgICAgLT4gLTBFKzM2OSBDbGFtcGVkCitjbGFtNDMzIGFwcGx5ICAgLTBFKzQwMCAgICAgICAgICAgICAgICAgLT4gLTBFKzM2OSBDbGFtcGVkCitjbGFtNDM0IGFwcGx5ICAgLTBFKzUwMCAgICAgICAgICAgICAgICAgLT4gLTBFKzM2OSBDbGFtcGVkCisKKy0tIGZvbGQtZG93biBmdWxsIHNlcXVlbmNlCitjbGFtNjAxIGFwcGx5ICAgMUUrMzg0ICAgICAgICAgICAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBDbGFtcGVkCitjbGFtNjAzIGFwcGx5ICAgMUUrMzgzICAgICAgICAgICAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2NsYW02MDUgYXBwbHkgICAxRSszODIgICAgICAgICAgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDBFKzM4MiBDbGFtcGVkCitjbGFtNjA3IGFwcGx5ICAgMUUrMzgxICAgICAgICAgICAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDBFKzM4MSBDbGFtcGVkCitjbGFtNjA5IGFwcGx5ICAgMUUrMzgwICAgICAgICAgICAgICAgICAgLT4gMS4wMDAwMDAwMDAwMEUrMzgwIENsYW1wZWQKK2NsYW02MTEgYXBwbHkgICAxRSszNzkgICAgICAgICAgICAgICAgICAtPiAxLjAwMDAwMDAwMDBFKzM3OSBDbGFtcGVkCitjbGFtNjEzIGFwcGx5ICAgMUUrMzc4ICAgICAgICAgICAgICAgICAgLT4gMS4wMDAwMDAwMDBFKzM3OCBDbGFtcGVkCitjbGFtNjE1IGFwcGx5ICAgMUUrMzc3ICAgICAgICAgICAgICAgICAgLT4gMS4wMDAwMDAwMEUrMzc3IENsYW1wZWQKK2NsYW02MTcgYXBwbHkgICAxRSszNzYgICAgICAgICAgICAgICAgICAtPiAxLjAwMDAwMDBFKzM3NiBDbGFtcGVkCitjbGFtNjE5IGFwcGx5ICAgMUUrMzc1ICAgICAgICAgICAgICAgICAgLT4gMS4wMDAwMDBFKzM3NSBDbGFtcGVkCitjbGFtNjIxIGFwcGx5ICAgMUUrMzc0ICAgICAgICAgICAgICAgICAgLT4gMS4wMDAwMEUrMzc0IENsYW1wZWQKK2NsYW02MjMgYXBwbHkgICAxRSszNzMgICAgICAgICAgICAgICAgICAtPiAxLjAwMDBFKzM3MyBDbGFtcGVkCitjbGFtNjI1IGFwcGx5ICAgMUUrMzcyICAgICAgICAgICAgICAgICAgLT4gMS4wMDBFKzM3MiBDbGFtcGVkCitjbGFtNjI3IGFwcGx5ICAgMUUrMzcxICAgICAgICAgICAgICAgICAgLT4gMS4wMEUrMzcxIENsYW1wZWQKK2NsYW02MjkgYXBwbHkgICAxRSszNzAgICAgICAgICAgICAgICAgICAtPiAxLjBFKzM3MCBDbGFtcGVkCitjbGFtNjMxIGFwcGx5ICAgMUUrMzY5ICAgICAgICAgICAgICAgICAgLT4gMUUrMzY5CitjbGFtNjMzIGFwcGx5ICAgMUUrMzY4ICAgICAgICAgICAgICAgICAgLT4gMUUrMzY4CistLSBzYW1lIHdpdGggOXMKK2NsYW02NDEgYXBwbHkgICA5RSszODQgICAgICAgICAgICAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IENsYW1wZWQKK2NsYW02NDMgYXBwbHkgICA5RSszODMgICAgICAgICAgICAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorY2xhbTY0NSBhcHBseSAgIDlFKzM4MiAgICAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMEUrMzgyIENsYW1wZWQKK2NsYW02NDcgYXBwbHkgICA5RSszODEgICAgICAgICAgICAgICAgICAtPiA5LjAwMDAwMDAwMDAwMEUrMzgxIENsYW1wZWQKK2NsYW02NDkgYXBwbHkgICA5RSszODAgICAgICAgICAgICAgICAgICAtPiA5LjAwMDAwMDAwMDAwRSszODAgQ2xhbXBlZAorY2xhbTY1MSBhcHBseSAgIDlFKzM3OSAgICAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMEUrMzc5IENsYW1wZWQKK2NsYW02NTMgYXBwbHkgICA5RSszNzggICAgICAgICAgICAgICAgICAtPiA5LjAwMDAwMDAwMEUrMzc4IENsYW1wZWQKK2NsYW02NTUgYXBwbHkgICA5RSszNzcgICAgICAgICAgICAgICAgICAtPiA5LjAwMDAwMDAwRSszNzcgQ2xhbXBlZAorY2xhbTY1NyBhcHBseSAgIDlFKzM3NiAgICAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMEUrMzc2IENsYW1wZWQKK2NsYW02NTkgYXBwbHkgICA5RSszNzUgICAgICAgICAgICAgICAgICAtPiA5LjAwMDAwMEUrMzc1IENsYW1wZWQKK2NsYW02NjEgYXBwbHkgICA5RSszNzQgICAgICAgICAgICAgICAgICAtPiA5LjAwMDAwRSszNzQgQ2xhbXBlZAorY2xhbTY2MyBhcHBseSAgIDlFKzM3MyAgICAgICAgICAgICAgICAgIC0+IDkuMDAwMEUrMzczIENsYW1wZWQKK2NsYW02NjUgYXBwbHkgICA5RSszNzIgICAgICAgICAgICAgICAgICAtPiA5LjAwMEUrMzcyIENsYW1wZWQKK2NsYW02NjcgYXBwbHkgICA5RSszNzEgICAgICAgICAgICAgICAgICAtPiA5LjAwRSszNzEgQ2xhbXBlZAorY2xhbTY2OSBhcHBseSAgIDlFKzM3MCAgICAgICAgICAgICAgICAgIC0+IDkuMEUrMzcwIENsYW1wZWQKK2NsYW02NzEgYXBwbHkgICA5RSszNjkgICAgICAgICAgICAgICAgICAtPiA5RSszNjkKK2NsYW02NzMgYXBwbHkgICA5RSszNjggICAgICAgICAgICAgICAgICAtPiA5RSszNjgKKworLS0gc3Vibm9ybWFscyBjbGFtcGVkIHRvIDAtRXRpbnkKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2NsYW02ODEgYXBwbHkgN0UtMzk4ICAgICAtPiA3RS0zOTggU3Vibm9ybWFsCitjbGFtNjgyIGFwcGx5IDBFLTM5OCAgICAgLT4gMEUtMzk4CitjbGFtNjgzIGFwcGx5IDdFLTM5OSAgICAgLT4gMUUtMzk4IFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtNjg0IGFwcGx5IDRFLTM5OSAgICAgLT4gMEUtMzk4IENsYW1wZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2NsYW02ODUgYXBwbHkgN0UtNDAwICAgICAtPiAwRS0zOTggQ2xhbXBlZCBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorY2xhbTY4NiBhcHBseSA3RS00MDEgICAgIC0+IDBFLTM5OCBDbGFtcGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtNjg3IGFwcGx5IDBFLTM5OSAgICAgLT4gMEUtMzk4IENsYW1wZWQKK2NsYW02ODggYXBwbHkgMEUtNDAwICAgICAtPiAwRS0zOTggQ2xhbXBlZAorY2xhbTY4OSBhcHBseSAwRS00MDEgICAgIC0+IDBFLTM5OCBDbGFtcGVkCisKKy0tIGV4YW1wbGUgZnJvbSBkb2N1bWVudGF0aW9uCitwcmVjaXNpb246ICAgNworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6ICs5NgorbWluRXhwb25lbnQ6IC05NQorCitjbGFtcDogICAgICAgMAorY2xhbTcwMCBhcHBseSAgIDEuMjNFKzk2ICAgICAgICAgICAgICAgIC0+IDEuMjNFKzk2CisKK2NsYW1wOiAgICAgICAxCitjbGFtNzAxIGFwcGx5ICAgMS4yM0UrOTYgICAgICAgICAgICAgICAgLT4gMS4yMzAwMDBFKzk2IENsYW1wZWQKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY2xhc3MuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY2xhc3MuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTViYzNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jbGFzcy5kZWNUZXN0CkBAIC0wLDAgKzEsMTMxIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGNsYXNzLmRlY1Rlc3QgLS0gQ2xhc3Mgb3BlcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gW05ldyAyMDA2LjExLjI3XQorCitwcmVjaXNpb246ICAgOQorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitjbGFzeDAwMSAgY2xhc3MgICAgMCAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvCitjbGFzeDAwMiAgY2xhc3MgICAgMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvCitjbGFzeDAwMyAgY2xhc3MgICAgMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvCitjbGFzeDAwNCAgY2xhc3MgICAgMUUtMTAwNyAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwKK2NsYXN4MDA1ICBjbGFzcyAgMC4xRS05OTkgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbAorY2xhc3gwMDYgIGNsYXNzICAwLjk5OTk5OTk5RS05OTkgICAgICAgICAgICAtPiArU3Vibm9ybWFsCitjbGFzeDAwNyAgY2xhc3MgIDEuMDAwMDAwMDBFLTk5OSAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MDA4ICBjbGFzcyAgIDFFLTk5OSAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMDkgIGNsYXNzICAgMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDAxMCAgY2xhc3MgICAxRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MDEyICBjbGFzcyAgIDFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMTMgIGNsYXNzICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDAxNCAgY2xhc3MgICAyLjUwICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MDE1ICBjbGFzcyAgIDEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMTYgIGNsYXNzICAgMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDAxNyAgY2xhc3MgICAxRSs5OTkgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MDE4ICBjbGFzcyAgIDkuOTk5OTk5OTlFKzk5OSAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gwMTkgIGNsYXNzICAgSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiArSW5maW5pdHkKKworY2xhc3gwMjEgIGNsYXNzICAgLTAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybworY2xhc3gwMjIgIGNsYXNzICAgLTAuMDAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybworY2xhc3gwMjMgIGNsYXNzICAgLTBFKzUgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybworY2xhc3gwMjQgIGNsYXNzICAgLTFFLTEwMDcgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsCitjbGFzeDAyNSAgY2xhc3MgIC0wLjFFLTk5OSAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwKK2NsYXN4MDI2ICBjbGFzcyAgLTAuOTk5OTk5OTlFLTk5OSAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAorY2xhc3gwMjcgIGNsYXNzICAtMS4wMDAwMDAwMEUtOTk5ICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDAyOCAgY2xhc3MgIC0xRS05OTkgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDI5ICBjbGFzcyAgLTFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gwMzAgIGNsYXNzICAtMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDAzMiAgY2xhc3MgIC0xRS0xICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDMzICBjbGFzcyAgLTEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gwMzQgIGNsYXNzICAtMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDAzNSAgY2xhc3MgIC0xMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDM2ICBjbGFzcyAgLTFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gwMzcgIGNsYXNzICAtMUUrOTk5ICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDAzOCAgY2xhc3MgIC05Ljk5OTk5OTk5RSs5OTkgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MDM5ICBjbGFzcyAgLUluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CisKK2NsYXN4MDQxICBjbGFzcyAgIE5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFOCitjbGFzeDA0MiAgY2xhc3MgIC1OYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTgorY2xhc3gwNDMgIGNsYXNzICArTmFOMTIzNDUgICAgICAgICAgICAgICAgICAtPiBOYU4KK2NsYXN4MDQ0ICBjbGFzcyAgIHNOYU4gICAgICAgICAgICAgICAgICAgICAgLT4gc05hTgorY2xhc3gwNDUgIGNsYXNzICAtc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFOCitjbGFzeDA0NiAgY2xhc3MgICtzTmFOMTIzNDUgICAgICAgICAgICAgICAgIC0+IHNOYU4KKworCistLSBkZWNpbWFsNjQgYm91bmRzCisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2NsYXN4MjAxICBjbGFzcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2NsYXN4MjAyICBjbGFzcyAgICAwLjAwICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2NsYXN4MjAzICBjbGFzcyAgICAwRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KK2NsYXN4MjA0ICBjbGFzcyAgICAxRS0zOTYgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbAorY2xhc3gyMDUgIGNsYXNzICAwLjFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsCitjbGFzeDIwNiAgY2xhc3MgIDAuOTk5OTk5OTk5OTk5OTk5RS0zODMgICAgIC0+ICtTdWJub3JtYWwKK2NsYXN4MjA3ICBjbGFzcyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLT4gK05vcm1hbAorY2xhc3gyMDggIGNsYXNzICAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDIwOSAgY2xhc3MgICAxRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MjEwICBjbGFzcyAgIDFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gyMTIgIGNsYXNzICAgMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDIxMyAgY2xhc3MgICAxICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MjE0ICBjbGFzcyAgIDIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gyMTUgIGNsYXNzICAgMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitjbGFzeDIxNiAgY2xhc3MgICAxRSszMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2NsYXN4MjE3ICBjbGFzcyAgIDFFKzM4NCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorY2xhc3gyMTggIGNsYXNzICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAtPiArTm9ybWFsCitjbGFzeDIxOSAgY2xhc3MgICBJbmYgICAgICAgICAgICAgICAgICAgICAgIC0+ICtJbmZpbml0eQorCitjbGFzeDIyMSAgY2xhc3MgICAtMCAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitjbGFzeDIyMiAgY2xhc3MgICAtMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitjbGFzeDIyMyAgY2xhc3MgICAtMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCitjbGFzeDIyNCAgY2xhc3MgICAtMUUtMzk2ICAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwKK2NsYXN4MjI1ICBjbGFzcyAgLTAuMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAorY2xhc3gyMjYgIGNsYXNzICAtMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAtPiAtU3Vibm9ybWFsCitjbGFzeDIyNyAgY2xhc3MgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgIC0+IC1Ob3JtYWwKK2NsYXN4MjI4ICBjbGFzcyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gyMjkgIGNsYXNzICAtMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDIzMCAgY2xhc3MgIC0xRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MjMyICBjbGFzcyAgLTFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gyMzMgIGNsYXNzICAtMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDIzNCAgY2xhc3MgIC0yLjUwICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MjM1ICBjbGFzcyAgLTEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorY2xhc3gyMzYgIGNsYXNzICAtMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitjbGFzeDIzNyAgY2xhc3MgIC0xRSszODQgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2NsYXN4MjM4ICBjbGFzcyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgLT4gLU5vcm1hbAorY2xhc3gyMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKKworY2xhc3gyNDEgIGNsYXNzICAgTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KK2NsYXN4MjQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFOCitjbGFzeDI0MyAgY2xhc3MgICtOYU4xMjM0NSAgICAgICAgICAgICAgICAgIC0+IE5hTgorY2xhc3gyNDQgIGNsYXNzICAgc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFOCitjbGFzeDI0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KK2NsYXN4MjQ2ICBjbGFzcyAgK3NOYU4xMjM0NSAgICAgICAgICAgICAgICAgLT4gc05hTgorCisKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb21wYXJlLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvbXBhcmUuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzcxMzAxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb21wYXJlLmRlY1Rlc3QKQEAgLTAsMCArMSw3NTggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gY29tcGFyZS5kZWNUZXN0IC0tIGRlY2ltYWwgY29tcGFyaXNvbiB0aGF0IGFsbG93cyBxdWlldCBOYU5zICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwKKy0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdAorLS0gb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBzbyBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4KKworZXh0ZW5kZWQ6IDEKKworcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorCistLSBzYW5pdHkgY2hlY2tzCitjb214MDAxIGNvbXBhcmUgIC0yICAtMiAgLT4gMAorY29teDAwMiBjb21wYXJlICAtMiAgLTEgIC0+IC0xCitjb214MDAzIGNvbXBhcmUgIC0yICAgMCAgLT4gLTEKK2NvbXgwMDQgY29tcGFyZSAgLTIgICAxICAtPiAtMQorY29teDAwNSBjb21wYXJlICAtMiAgIDIgIC0+IC0xCitjb214MDA2IGNvbXBhcmUgIC0xICAtMiAgLT4gMQorY29teDAwNyBjb21wYXJlICAtMSAgLTEgIC0+IDAKK2NvbXgwMDggY29tcGFyZSAgLTEgICAwICAtPiAtMQorY29teDAwOSBjb21wYXJlICAtMSAgIDEgIC0+IC0xCitjb214MDEwIGNvbXBhcmUgIC0xICAgMiAgLT4gLTEKK2NvbXgwMTEgY29tcGFyZSAgIDAgIC0yICAtPiAxCitjb214MDEyIGNvbXBhcmUgICAwICAtMSAgLT4gMQorY29teDAxMyBjb21wYXJlICAgMCAgIDAgIC0+IDAKK2NvbXgwMTQgY29tcGFyZSAgIDAgICAxICAtPiAtMQorY29teDAxNSBjb21wYXJlICAgMCAgIDIgIC0+IC0xCitjb214MDE2IGNvbXBhcmUgICAxICAtMiAgLT4gMQorY29teDAxNyBjb21wYXJlICAgMSAgLTEgIC0+IDEKK2NvbXgwMTggY29tcGFyZSAgIDEgICAwICAtPiAxCitjb214MDE5IGNvbXBhcmUgICAxICAgMSAgLT4gMAorY29teDAyMCBjb21wYXJlICAgMSAgIDIgIC0+IC0xCitjb214MDIxIGNvbXBhcmUgICAyICAtMiAgLT4gMQorY29teDAyMiBjb21wYXJlICAgMiAgLTEgIC0+IDEKK2NvbXgwMjMgY29tcGFyZSAgIDIgICAwICAtPiAxCitjb214MDI1IGNvbXBhcmUgICAyICAgMSAgLT4gMQorY29teDAyNiBjb21wYXJlICAgMiAgIDIgIC0+IDAKKworY29teDAzMSBjb21wYXJlICAtMjAgIC0yMCAgLT4gMAorY29teDAzMiBjb21wYXJlICAtMjAgIC0xMCAgLT4gLTEKK2NvbXgwMzMgY29tcGFyZSAgLTIwICAgMDAgIC0+IC0xCitjb214MDM0IGNvbXBhcmUgIC0yMCAgIDEwICAtPiAtMQorY29teDAzNSBjb21wYXJlICAtMjAgICAyMCAgLT4gLTEKK2NvbXgwMzYgY29tcGFyZSAgLTEwICAtMjAgIC0+IDEKK2NvbXgwMzcgY29tcGFyZSAgLTEwICAtMTAgIC0+IDAKK2NvbXgwMzggY29tcGFyZSAgLTEwICAgMDAgIC0+IC0xCitjb214MDM5IGNvbXBhcmUgIC0xMCAgIDEwICAtPiAtMQorY29teDA0MCBjb21wYXJlICAtMTAgICAyMCAgLT4gLTEKK2NvbXgwNDEgY29tcGFyZSAgIDAwICAtMjAgIC0+IDEKK2NvbXgwNDIgY29tcGFyZSAgIDAwICAtMTAgIC0+IDEKK2NvbXgwNDMgY29tcGFyZSAgIDAwICAgMDAgIC0+IDAKK2NvbXgwNDQgY29tcGFyZSAgIDAwICAgMTAgIC0+IC0xCitjb214MDQ1IGNvbXBhcmUgICAwMCAgIDIwICAtPiAtMQorY29teDA0NiBjb21wYXJlICAgMTAgIC0yMCAgLT4gMQorY29teDA0NyBjb21wYXJlICAgMTAgIC0xMCAgLT4gMQorY29teDA0OCBjb21wYXJlICAgMTAgICAwMCAgLT4gMQorY29teDA0OSBjb21wYXJlICAgMTAgICAxMCAgLT4gMAorY29teDA1MCBjb21wYXJlICAgMTAgICAyMCAgLT4gLTEKK2NvbXgwNTEgY29tcGFyZSAgIDIwICAtMjAgIC0+IDEKK2NvbXgwNTIgY29tcGFyZSAgIDIwICAtMTAgIC0+IDEKK2NvbXgwNTMgY29tcGFyZSAgIDIwICAgMDAgIC0+IDEKK2NvbXgwNTUgY29tcGFyZSAgIDIwICAgMTAgIC0+IDEKK2NvbXgwNTYgY29tcGFyZSAgIDIwICAgMjAgIC0+IDAKKworY29teDA2MSBjb21wYXJlICAtMi4wICAtMi4wICAtPiAwCitjb214MDYyIGNvbXBhcmUgIC0yLjAgIC0xLjAgIC0+IC0xCitjb214MDYzIGNvbXBhcmUgIC0yLjAgICAwLjAgIC0+IC0xCitjb214MDY0IGNvbXBhcmUgIC0yLjAgICAxLjAgIC0+IC0xCitjb214MDY1IGNvbXBhcmUgIC0yLjAgICAyLjAgIC0+IC0xCitjb214MDY2IGNvbXBhcmUgIC0xLjAgIC0yLjAgIC0+IDEKK2NvbXgwNjcgY29tcGFyZSAgLTEuMCAgLTEuMCAgLT4gMAorY29teDA2OCBjb21wYXJlICAtMS4wICAgMC4wICAtPiAtMQorY29teDA2OSBjb21wYXJlICAtMS4wICAgMS4wICAtPiAtMQorY29teDA3MCBjb21wYXJlICAtMS4wICAgMi4wICAtPiAtMQorY29teDA3MSBjb21wYXJlICAgMC4wICAtMi4wICAtPiAxCitjb214MDcyIGNvbXBhcmUgICAwLjAgIC0xLjAgIC0+IDEKK2NvbXgwNzMgY29tcGFyZSAgIDAuMCAgIDAuMCAgLT4gMAorY29teDA3NCBjb21wYXJlICAgMC4wICAgMS4wICAtPiAtMQorY29teDA3NSBjb21wYXJlICAgMC4wICAgMi4wICAtPiAtMQorY29teDA3NiBjb21wYXJlICAgMS4wICAtMi4wICAtPiAxCitjb214MDc3IGNvbXBhcmUgICAxLjAgIC0xLjAgIC0+IDEKK2NvbXgwNzggY29tcGFyZSAgIDEuMCAgIDAuMCAgLT4gMQorY29teDA3OSBjb21wYXJlICAgMS4wICAgMS4wICAtPiAwCitjb214MDgwIGNvbXBhcmUgICAxLjAgICAyLjAgIC0+IC0xCitjb214MDgxIGNvbXBhcmUgICAyLjAgIC0yLjAgIC0+IDEKK2NvbXgwODIgY29tcGFyZSAgIDIuMCAgLTEuMCAgLT4gMQorY29teDA4MyBjb21wYXJlICAgMi4wICAgMC4wICAtPiAxCitjb214MDg1IGNvbXBhcmUgICAyLjAgICAxLjAgIC0+IDEKK2NvbXgwODYgY29tcGFyZSAgIDIuMCAgIDIuMCAgLT4gMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5Citjb214MDk1IGNvbXBhcmUgIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgIC0+IDAKK2NvbXgwOTYgY29tcGFyZSAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgLT4gLTEKK2NvbXgwOTcgY29tcGFyZSAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLT4gMQorY29teDA5OCBjb21wYXJlIC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtPiAwCisKKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcworY29teDEwMCBjb21wYXJlICAgNy4wICAgIDcuMCAgICAtPiAwCitjb214MTAxIGNvbXBhcmUgICA3LjAgICAgNyAgICAgIC0+IDAKK2NvbXgxMDIgY29tcGFyZSAgIDcgICAgICA3LjAgICAgLT4gMAorY29teDEwMyBjb21wYXJlICAgN0UrMCAgIDcuMCAgICAtPiAwCitjb214MTA0IGNvbXBhcmUgICA3MEUtMSAgNy4wICAgIC0+IDAKK2NvbXgxMDUgY29tcGFyZSAgIDAuN0UrMSA3ICAgICAgLT4gMAorY29teDEwNiBjb21wYXJlICAgNzBFLTEgIDcgICAgICAtPiAwCitjb214MTA3IGNvbXBhcmUgICA3LjAgICAgN0UrMCAgIC0+IDAKK2NvbXgxMDggY29tcGFyZSAgIDcuMCAgICA3MEUtMSAgLT4gMAorY29teDEwOSBjb21wYXJlICAgNyAgICAgIDAuN0UrMSAtPiAwCitjb214MTEwIGNvbXBhcmUgICA3ICAgICAgNzBFLTEgIC0+IDAKKworY29teDEyMCBjb21wYXJlICAgOC4wICAgIDcuMCAgICAtPiAxCitjb214MTIxIGNvbXBhcmUgICA4LjAgICAgNyAgICAgIC0+IDEKK2NvbXgxMjIgY29tcGFyZSAgIDggICAgICA3LjAgICAgLT4gMQorY29teDEyMyBjb21wYXJlICAgOEUrMCAgIDcuMCAgICAtPiAxCitjb214MTI0IGNvbXBhcmUgICA4MEUtMSAgNy4wICAgIC0+IDEKK2NvbXgxMjUgY29tcGFyZSAgIDAuOEUrMSA3ICAgICAgLT4gMQorY29teDEyNiBjb21wYXJlICAgODBFLTEgIDcgICAgICAtPiAxCitjb214MTI3IGNvbXBhcmUgICA4LjAgICAgN0UrMCAgIC0+IDEKK2NvbXgxMjggY29tcGFyZSAgIDguMCAgICA3MEUtMSAgLT4gMQorY29teDEyOSBjb21wYXJlICAgOCAgICAgIDAuN0UrMSAgLT4gMQorY29teDEzMCBjb21wYXJlICAgOCAgICAgIDcwRS0xICAtPiAxCisKK2NvbXgxNDAgY29tcGFyZSAgIDguMCAgICA5LjAgICAgLT4gLTEKK2NvbXgxNDEgY29tcGFyZSAgIDguMCAgICA5ICAgICAgLT4gLTEKK2NvbXgxNDIgY29tcGFyZSAgIDggICAgICA5LjAgICAgLT4gLTEKK2NvbXgxNDMgY29tcGFyZSAgIDhFKzAgICA5LjAgICAgLT4gLTEKK2NvbXgxNDQgY29tcGFyZSAgIDgwRS0xICA5LjAgICAgLT4gLTEKK2NvbXgxNDUgY29tcGFyZSAgIDAuOEUrMSA5ICAgICAgLT4gLTEKK2NvbXgxNDYgY29tcGFyZSAgIDgwRS0xICA5ICAgICAgLT4gLTEKK2NvbXgxNDcgY29tcGFyZSAgIDguMCAgICA5RSswICAgLT4gLTEKK2NvbXgxNDggY29tcGFyZSAgIDguMCAgICA5MEUtMSAgLT4gLTEKK2NvbXgxNDkgY29tcGFyZSAgIDggICAgICAwLjlFKzEgLT4gLTEKK2NvbXgxNTAgY29tcGFyZSAgIDggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorY29teDIwMCBjb21wYXJlICAtNy4wICAgIDcuMCAgICAtPiAtMQorY29teDIwMSBjb21wYXJlICAtNy4wICAgIDcgICAgICAtPiAtMQorY29teDIwMiBjb21wYXJlICAtNyAgICAgIDcuMCAgICAtPiAtMQorY29teDIwMyBjb21wYXJlICAtN0UrMCAgIDcuMCAgICAtPiAtMQorY29teDIwNCBjb21wYXJlICAtNzBFLTEgIDcuMCAgICAtPiAtMQorY29teDIwNSBjb21wYXJlICAtMC43RSsxIDcgICAgICAtPiAtMQorY29teDIwNiBjb21wYXJlICAtNzBFLTEgIDcgICAgICAtPiAtMQorY29teDIwNyBjb21wYXJlICAtNy4wICAgIDdFKzAgICAtPiAtMQorY29teDIwOCBjb21wYXJlICAtNy4wICAgIDcwRS0xICAtPiAtMQorY29teDIwOSBjb21wYXJlICAtNyAgICAgIDAuN0UrMSAtPiAtMQorY29teDIxMCBjb21wYXJlICAtNyAgICAgIDcwRS0xICAtPiAtMQorCitjb214MjIwIGNvbXBhcmUgIC04LjAgICAgNy4wICAgIC0+IC0xCitjb214MjIxIGNvbXBhcmUgIC04LjAgICAgNyAgICAgIC0+IC0xCitjb214MjIyIGNvbXBhcmUgIC04ICAgICAgNy4wICAgIC0+IC0xCitjb214MjIzIGNvbXBhcmUgIC04RSswICAgNy4wICAgIC0+IC0xCitjb214MjI0IGNvbXBhcmUgIC04MEUtMSAgNy4wICAgIC0+IC0xCitjb214MjI1IGNvbXBhcmUgIC0wLjhFKzEgNyAgICAgIC0+IC0xCitjb214MjI2IGNvbXBhcmUgIC04MEUtMSAgNyAgICAgIC0+IC0xCitjb214MjI3IGNvbXBhcmUgIC04LjAgICAgN0UrMCAgIC0+IC0xCitjb214MjI4IGNvbXBhcmUgIC04LjAgICAgNzBFLTEgIC0+IC0xCitjb214MjI5IGNvbXBhcmUgIC04ICAgICAgMC43RSsxIC0+IC0xCitjb214MjMwIGNvbXBhcmUgIC04ICAgICAgNzBFLTEgIC0+IC0xCisKK2NvbXgyNDAgY29tcGFyZSAgLTguMCAgICA5LjAgICAgLT4gLTEKK2NvbXgyNDEgY29tcGFyZSAgLTguMCAgICA5ICAgICAgLT4gLTEKK2NvbXgyNDIgY29tcGFyZSAgLTggICAgICA5LjAgICAgLT4gLTEKK2NvbXgyNDMgY29tcGFyZSAgLThFKzAgICA5LjAgICAgLT4gLTEKK2NvbXgyNDQgY29tcGFyZSAgLTgwRS0xICA5LjAgICAgLT4gLTEKK2NvbXgyNDUgY29tcGFyZSAgLTAuOEUrMSA5ICAgICAgLT4gLTEKK2NvbXgyNDYgY29tcGFyZSAgLTgwRS0xICA5ICAgICAgLT4gLTEKK2NvbXgyNDcgY29tcGFyZSAgLTguMCAgICA5RSswICAgLT4gLTEKK2NvbXgyNDggY29tcGFyZSAgLTguMCAgICA5MEUtMSAgLT4gLTEKK2NvbXgyNDkgY29tcGFyZSAgLTggICAgICAwLjlFKzEgLT4gLTEKK2NvbXgyNTAgY29tcGFyZSAgLTggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorY29teDMwMCBjb21wYXJlICAgNy4wICAgIC03LjAgICAgLT4gMQorY29teDMwMSBjb21wYXJlICAgNy4wICAgIC03ICAgICAgLT4gMQorY29teDMwMiBjb21wYXJlICAgNyAgICAgIC03LjAgICAgLT4gMQorY29teDMwMyBjb21wYXJlICAgN0UrMCAgIC03LjAgICAgLT4gMQorY29teDMwNCBjb21wYXJlICAgNzBFLTEgIC03LjAgICAgLT4gMQorY29teDMwNSBjb21wYXJlICAgLjdFKzEgIC03ICAgICAgLT4gMQorY29teDMwNiBjb21wYXJlICAgNzBFLTEgIC03ICAgICAgLT4gMQorY29teDMwNyBjb21wYXJlICAgNy4wICAgIC03RSswICAgLT4gMQorY29teDMwOCBjb21wYXJlICAgNy4wICAgIC03MEUtMSAgLT4gMQorY29teDMwOSBjb21wYXJlICAgNyAgICAgIC0uN0UrMSAgLT4gMQorY29teDMxMCBjb21wYXJlICAgNyAgICAgIC03MEUtMSAgLT4gMQorCitjb214MzIwIGNvbXBhcmUgICA4LjAgICAgLTcuMCAgICAtPiAxCitjb214MzIxIGNvbXBhcmUgICA4LjAgICAgLTcgICAgICAtPiAxCitjb214MzIyIGNvbXBhcmUgICA4ICAgICAgLTcuMCAgICAtPiAxCitjb214MzIzIGNvbXBhcmUgICA4RSswICAgLTcuMCAgICAtPiAxCitjb214MzI0IGNvbXBhcmUgICA4MEUtMSAgLTcuMCAgICAtPiAxCitjb214MzI1IGNvbXBhcmUgICAuOEUrMSAgLTcgICAgICAtPiAxCitjb214MzI2IGNvbXBhcmUgICA4MEUtMSAgLTcgICAgICAtPiAxCitjb214MzI3IGNvbXBhcmUgICA4LjAgICAgLTdFKzAgICAtPiAxCitjb214MzI4IGNvbXBhcmUgICA4LjAgICAgLTcwRS0xICAtPiAxCitjb214MzI5IGNvbXBhcmUgICA4ICAgICAgLS43RSsxICAtPiAxCitjb214MzMwIGNvbXBhcmUgICA4ICAgICAgLTcwRS0xICAtPiAxCisKK2NvbXgzNDAgY29tcGFyZSAgIDguMCAgICAtOS4wICAgIC0+IDEKK2NvbXgzNDEgY29tcGFyZSAgIDguMCAgICAtOSAgICAgIC0+IDEKK2NvbXgzNDIgY29tcGFyZSAgIDggICAgICAtOS4wICAgIC0+IDEKK2NvbXgzNDMgY29tcGFyZSAgIDhFKzAgICAtOS4wICAgIC0+IDEKK2NvbXgzNDQgY29tcGFyZSAgIDgwRS0xICAtOS4wICAgIC0+IDEKK2NvbXgzNDUgY29tcGFyZSAgIC44RSsxICAtOSAgICAgIC0+IDEKK2NvbXgzNDYgY29tcGFyZSAgIDgwRS0xICAtOSAgICAgIC0+IDEKK2NvbXgzNDcgY29tcGFyZSAgIDguMCAgICAtOUUrMCAgIC0+IDEKK2NvbXgzNDggY29tcGFyZSAgIDguMCAgICAtOTBFLTEgIC0+IDEKK2NvbXgzNDkgY29tcGFyZSAgIDggICAgICAtLjlFKzEgIC0+IDEKK2NvbXgzNTAgY29tcGFyZSAgIDggICAgICAtOTBFLTEgIC0+IDEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorY29teDQwMCBjb21wYXJlICAgLTcuMCAgICAtNy4wICAgIC0+IDAKK2NvbXg0MDEgY29tcGFyZSAgIC03LjAgICAgLTcgICAgICAtPiAwCitjb214NDAyIGNvbXBhcmUgICAtNyAgICAgIC03LjAgICAgLT4gMAorY29teDQwMyBjb21wYXJlICAgLTdFKzAgICAtNy4wICAgIC0+IDAKK2NvbXg0MDQgY29tcGFyZSAgIC03MEUtMSAgLTcuMCAgICAtPiAwCitjb214NDA1IGNvbXBhcmUgICAtLjdFKzEgIC03ICAgICAgLT4gMAorY29teDQwNiBjb21wYXJlICAgLTcwRS0xICAtNyAgICAgIC0+IDAKK2NvbXg0MDcgY29tcGFyZSAgIC03LjAgICAgLTdFKzAgICAtPiAwCitjb214NDA4IGNvbXBhcmUgICAtNy4wICAgIC03MEUtMSAgLT4gMAorY29teDQwOSBjb21wYXJlICAgLTcgICAgICAtLjdFKzEgIC0+IDAKK2NvbXg0MTAgY29tcGFyZSAgIC03ICAgICAgLTcwRS0xICAtPiAwCisKK2NvbXg0MjAgY29tcGFyZSAgIC04LjAgICAgLTcuMCAgICAtPiAtMQorY29teDQyMSBjb21wYXJlICAgLTguMCAgICAtNyAgICAgIC0+IC0xCitjb214NDIyIGNvbXBhcmUgICAtOCAgICAgIC03LjAgICAgLT4gLTEKK2NvbXg0MjMgY29tcGFyZSAgIC04RSswICAgLTcuMCAgICAtPiAtMQorY29teDQyNCBjb21wYXJlICAgLTgwRS0xICAtNy4wICAgIC0+IC0xCitjb214NDI1IGNvbXBhcmUgICAtLjhFKzEgIC03ICAgICAgLT4gLTEKK2NvbXg0MjYgY29tcGFyZSAgIC04MEUtMSAgLTcgICAgICAtPiAtMQorY29teDQyNyBjb21wYXJlICAgLTguMCAgICAtN0UrMCAgIC0+IC0xCitjb214NDI4IGNvbXBhcmUgICAtOC4wICAgIC03MEUtMSAgLT4gLTEKK2NvbXg0MjkgY29tcGFyZSAgIC04ICAgICAgLS43RSsxICAtPiAtMQorY29teDQzMCBjb21wYXJlICAgLTggICAgICAtNzBFLTEgIC0+IC0xCisKK2NvbXg0NDAgY29tcGFyZSAgIC04LjAgICAgLTkuMCAgICAtPiAxCitjb214NDQxIGNvbXBhcmUgICAtOC4wICAgIC05ICAgICAgLT4gMQorY29teDQ0MiBjb21wYXJlICAgLTggICAgICAtOS4wICAgIC0+IDEKK2NvbXg0NDMgY29tcGFyZSAgIC04RSswICAgLTkuMCAgICAtPiAxCitjb214NDQ0IGNvbXBhcmUgICAtODBFLTEgIC05LjAgICAgLT4gMQorY29teDQ0NSBjb21wYXJlICAgLS44RSsxICAtOSAgICAgIC0+IDEKK2NvbXg0NDYgY29tcGFyZSAgIC04MEUtMSAgLTkgICAgICAtPiAxCitjb214NDQ3IGNvbXBhcmUgICAtOC4wICAgIC05RSswICAgLT4gMQorY29teDQ0OCBjb21wYXJlICAgLTguMCAgICAtOTBFLTEgIC0+IDEKK2NvbXg0NDkgY29tcGFyZSAgIC04ICAgICAgLS45RSsxICAtPiAxCitjb214NDUwIGNvbXBhcmUgICAtOCAgICAgIC05MEUtMSAgLT4gMQorCistLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4KK2NvbXg0NTEgY29tcGFyZSAgICAgIDEuMCAgICAgICAwLjEgIC0+IDEKK2NvbXg0NTIgY29tcGFyZSAgICAgIDAuMSAgICAgICAxLjAgIC0+IC0xCitjb214NDUzIGNvbXBhcmUgICAgIDEwLjAgICAgICAgMC4xICAtPiAxCitjb214NDU0IGNvbXBhcmUgICAgICAwLjEgICAgICAxMC4wICAtPiAtMQorY29teDQ1NSBjb21wYXJlICAgICAgMTAwICAgICAgIDEuMCAgLT4gMQorY29teDQ1NiBjb21wYXJlICAgICAgMS4wICAgICAgIDEwMCAgLT4gLTEKK2NvbXg0NTcgY29tcGFyZSAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDEKK2NvbXg0NTggY29tcGFyZSAgICAgMTAuMCAgICAgIDEwMDAgIC0+IC0xCitjb214NDU5IGNvbXBhcmUgICAgMTAwMDAgICAgIDEwMC4wICAtPiAxCitjb214NDYwIGNvbXBhcmUgICAgMTAwLjAgICAgIDEwMDAwICAtPiAtMQorY29teDQ2MSBjb21wYXJlICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMQorY29teDQ2MiBjb21wYXJlICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gLTEKK2NvbXg0NjMgY29tcGFyZSAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDEKK2NvbXg0NjQgY29tcGFyZSAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IC0xCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorcHJlY2lzaW9uOiA0MAorY29teDQ3MCBjb21wYXJlIDEyMy40NTYwMDAwMDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAwCitjb214NDcxIGNvbXBhcmUgMTIzLjQ1NjAwMDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorY29teDQ3MiBjb21wYXJlIDEyMy40NTYwMDAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgLT4gMAorY29teDQ3MyBjb21wYXJlIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitjb214NDc0IGNvbXBhcmUgMTIzLjQ1NjAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgLT4gMAorY29teDQ3NSBjb21wYXJlIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorY29teDQ3NiBjb21wYXJlIDEyMy40NTYwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAwCitjb214NDc3IGNvbXBhcmUgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorY29teDQ3OCBjb21wYXJlIDEyMy40NTYwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgLT4gMAorY29teDQ3OSBjb21wYXJlIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitjb214NDgwIGNvbXBhcmUgMTIzLjQ1NjAwMEU3ODkgMTIzLjQ1NkU3ODkgLT4gMAorY29teDQ4MSBjb21wYXJlIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorY29teDQ4MiBjb21wYXJlIDEyMy40NTYwRTc4OSAxMjMuNDU2RTc4OSAtPiAwCitjb214NDgzIGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgLT4gMAorY29teDQ4NCBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDAwMDAwRS04OSAtPiAwCitjb214NDg1IGNvbXBhcmUgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwMDAwMEU3ODkgLT4gMAorY29teDQ4NiBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDAwMEUtODkgLT4gMAorY29teDQ4NyBjb21wYXJlIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMDAwRTc4OSAtPiAwCitjb214NDg4IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMAorY29teDQ4OSBjb21wYXJlIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMEU3ODkgLT4gMAorY29teDQ5MCBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAwCitjb214NDkxIGNvbXBhcmUgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMEU3ODkgLT4gMAorY29teDQ5MiBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgLT4gMAorY29teDQ5MyBjb21wYXJlIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwRTc4OSAtPiAwCitjb214NDk0IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMAorY29teDQ5NSBjb21wYXJlIDEyMy40NTZFNzg5IDEyMy40NTYwMEU3ODkgLT4gMAorY29teDQ5NiBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAwCitjb214NDk3IGNvbXBhcmUgMTIzLjQ1NkU3ODkgMTIzLjQ1NkU3ODkgLT4gMAorCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCitwcmVjaXNpb246IDkKK2NvbXg1MDAgY29tcGFyZSAgICAxICAgICAxRS0xNSAgICAtPiAxCitjb214NTAxIGNvbXBhcmUgICAgMSAgICAgMUUtMTQgICAgLT4gMQorY29teDUwMiBjb21wYXJlICAgIDEgICAgIDFFLTEzICAgIC0+IDEKK2NvbXg1MDMgY29tcGFyZSAgICAxICAgICAxRS0xMiAgICAtPiAxCitjb214NTA0IGNvbXBhcmUgICAgMSAgICAgMUUtMTEgICAgLT4gMQorY29teDUwNSBjb21wYXJlICAgIDEgICAgIDFFLTEwICAgIC0+IDEKK2NvbXg1MDYgY29tcGFyZSAgICAxICAgICAxRS05ICAgICAtPiAxCitjb214NTA3IGNvbXBhcmUgICAgMSAgICAgMUUtOCAgICAgLT4gMQorY29teDUwOCBjb21wYXJlICAgIDEgICAgIDFFLTcgICAgIC0+IDEKK2NvbXg1MDkgY29tcGFyZSAgICAxICAgICAxRS02ICAgICAtPiAxCitjb214NTEwIGNvbXBhcmUgICAgMSAgICAgMUUtNSAgICAgLT4gMQorY29teDUxMSBjb21wYXJlICAgIDEgICAgIDFFLTQgICAgIC0+IDEKK2NvbXg1MTIgY29tcGFyZSAgICAxICAgICAxRS0zICAgICAtPiAxCitjb214NTEzIGNvbXBhcmUgICAgMSAgICAgMUUtMiAgICAgLT4gMQorY29teDUxNCBjb21wYXJlICAgIDEgICAgIDFFLTEgICAgIC0+IDEKK2NvbXg1MTUgY29tcGFyZSAgICAxICAgICAxRS0wICAgICAtPiAwCitjb214NTE2IGNvbXBhcmUgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKK2NvbXg1MTcgY29tcGFyZSAgICAxICAgICAxRSsyICAgICAtPiAtMQorY29teDUxOCBjb21wYXJlICAgIDEgICAgIDFFKzMgICAgIC0+IC0xCitjb214NTE5IGNvbXBhcmUgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKK2NvbXg1MjEgY29tcGFyZSAgICAxICAgICAxRSs1ICAgICAtPiAtMQorY29teDUyMiBjb21wYXJlICAgIDEgICAgIDFFKzYgICAgIC0+IC0xCitjb214NTIzIGNvbXBhcmUgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKK2NvbXg1MjQgY29tcGFyZSAgICAxICAgICAxRSs4ICAgICAtPiAtMQorY29teDUyNSBjb21wYXJlICAgIDEgICAgIDFFKzkgICAgIC0+IC0xCitjb214NTI2IGNvbXBhcmUgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKK2NvbXg1MjcgY29tcGFyZSAgICAxICAgICAxRSsxMSAgICAtPiAtMQorY29teDUyOCBjb21wYXJlICAgIDEgICAgIDFFKzEyICAgIC0+IC0xCitjb214NTI5IGNvbXBhcmUgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKK2NvbXg1MzAgY29tcGFyZSAgICAxICAgICAxRSsxNCAgICAtPiAtMQorY29teDUzMSBjb21wYXJlICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xCistLSBMUiBzd2FwCitjb214NTQwIGNvbXBhcmUgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKK2NvbXg1NDEgY29tcGFyZSAgICAxRS0xNCAgMSAgICAgICAtPiAtMQorY29teDU0MiBjb21wYXJlICAgIDFFLTEzICAxICAgICAgIC0+IC0xCitjb214NTQzIGNvbXBhcmUgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKK2NvbXg1NDQgY29tcGFyZSAgICAxRS0xMSAgMSAgICAgICAtPiAtMQorY29teDU0NSBjb21wYXJlICAgIDFFLTEwICAxICAgICAgIC0+IC0xCitjb214NTQ2IGNvbXBhcmUgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKK2NvbXg1NDcgY29tcGFyZSAgICAxRS04ICAgMSAgICAgICAtPiAtMQorY29teDU0OCBjb21wYXJlICAgIDFFLTcgICAxICAgICAgIC0+IC0xCitjb214NTQ5IGNvbXBhcmUgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKK2NvbXg1NTAgY29tcGFyZSAgICAxRS01ICAgMSAgICAgICAtPiAtMQorY29teDU1MSBjb21wYXJlICAgIDFFLTQgICAxICAgICAgIC0+IC0xCitjb214NTUyIGNvbXBhcmUgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKK2NvbXg1NTMgY29tcGFyZSAgICAxRS0yICAgMSAgICAgICAtPiAtMQorY29teDU1NCBjb21wYXJlICAgIDFFLTEgICAxICAgICAgIC0+IC0xCitjb214NTU1IGNvbXBhcmUgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKK2NvbXg1NTYgY29tcGFyZSAgICAxRSsxICAgMSAgICAgICAtPiAgMQorY29teDU1NyBjb21wYXJlICAgIDFFKzIgICAxICAgICAgIC0+ICAxCitjb214NTU4IGNvbXBhcmUgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKK2NvbXg1NTkgY29tcGFyZSAgICAxRSs0ICAgMSAgICAgICAtPiAgMQorY29teDU2MSBjb21wYXJlICAgIDFFKzUgICAxICAgICAgIC0+ICAxCitjb214NTYyIGNvbXBhcmUgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKK2NvbXg1NjMgY29tcGFyZSAgICAxRSs3ICAgMSAgICAgICAtPiAgMQorY29teDU2NCBjb21wYXJlICAgIDFFKzggICAxICAgICAgIC0+ICAxCitjb214NTY1IGNvbXBhcmUgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKK2NvbXg1NjYgY29tcGFyZSAgICAxRSsxMCAgMSAgICAgICAtPiAgMQorY29teDU2NyBjb21wYXJlICAgIDFFKzExICAxICAgICAgIC0+ICAxCitjb214NTY4IGNvbXBhcmUgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKK2NvbXg1NjkgY29tcGFyZSAgICAxRSsxMyAgMSAgICAgICAtPiAgMQorY29teDU3MCBjb21wYXJlICAgIDFFKzE0ICAxICAgICAgIC0+ICAxCitjb214NTcxIGNvbXBhcmUgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKKy0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQorY29teDU4MCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQorY29teDU4MSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQorY29teDU4MiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQorY29teDU4MyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQorY29teDU4NCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQorY29teDU4NSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQorY29teDU4NiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQorY29teDU4NyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQorY29teDU4OCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQorY29teDU4OSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTEKK2NvbXg1OTAgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xCitjb214NTkxIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQorY29teDU5MiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTEKK2NvbXg1OTMgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xCitjb214NTk0IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQorY29teDU5NSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTEKK2NvbXg1OTYgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xCitjb214NTk3IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQorY29teDU5OCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTEKK2NvbXg1OTkgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitwcmVjaXNpb246IDIwCitjb214NjAwIGNvbXBhcmUgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2NvbXg2MDEgY29tcGFyZSAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQorY29teDYwMiBjb21wYXJlICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitjb214NjAzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2NvbXg2MDQgY29tcGFyZSAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQorY29teDYwNSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xCitjb214NjA2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTEKK2NvbXg2MDcgY29tcGFyZSAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQorY29teDYwOCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xCitjb214NjA5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTEKK2NvbXg2MTAgY29tcGFyZSAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQorY29teDYxMSBjb21wYXJlICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxCitjb214NjEyIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDEKK2NvbXg2MTMgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQorY29teDYxNCBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxCitjb214NjE1IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDEKK2NvbXg2MTYgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQorY29teDYxNyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxCitjb214NjE4IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDEKK2NvbXg2MTkgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQorY29teDYyMCBjb21wYXJlICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitjb214NjIxIGNvbXBhcmUgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2NvbXg2MjIgY29tcGFyZSAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQorY29teDYyMyBjb21wYXJlICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxCitjb214NjI0IGNvbXBhcmUgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDEKK2NvbXg2MjUgY29tcGFyZSAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQorY29teDYyNiBjb21wYXJlICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxCitjb214NjI3IGNvbXBhcmUgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDEKK2NvbXg2MjggY29tcGFyZSAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQorY29teDYyOSBjb21wYXJlICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxCitjb214NjMwIGNvbXBhcmUgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTEKK2NvbXg2MzEgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQorY29teDYzMiBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xCitjb214NjMzIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTEKK2NvbXg2MzQgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQorY29teDYzNSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xCitjb214NjM2IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTEKK2NvbXg2MzcgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQorY29teDYzOCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xCitjb214NjM5IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTEKK3ByZWNpc2lvbjogOQorCistLSBleHRlbmRlZCB6ZXJvcworY29teDY0MCBjb21wYXJlICAgMCAgICAgMCAgIC0+IDAKK2NvbXg2NDEgY29tcGFyZSAgIDAgICAgLTAgICAtPiAwCitjb214NjQyIGNvbXBhcmUgICAwICAgIC0wLjAgLT4gMAorY29teDY0MyBjb21wYXJlICAgMCAgICAgMC4wIC0+IDAKK2NvbXg2NDQgY29tcGFyZSAgLTAgICAgIDAgICAtPiAwCitjb214NjQ1IGNvbXBhcmUgIC0wICAgIC0wICAgLT4gMAorY29teDY0NiBjb21wYXJlICAtMCAgICAtMC4wIC0+IDAKK2NvbXg2NDcgY29tcGFyZSAgLTAgICAgIDAuMCAtPiAwCitjb214NjQ4IGNvbXBhcmUgICAwLjAgICAwICAgLT4gMAorY29teDY0OSBjb21wYXJlICAgMC4wICAtMCAgIC0+IDAKK2NvbXg2NTAgY29tcGFyZSAgIDAuMCAgLTAuMCAtPiAwCitjb214NjUxIGNvbXBhcmUgICAwLjAgICAwLjAgLT4gMAorY29teDY1MiBjb21wYXJlICAtMC4wICAgMCAgIC0+IDAKK2NvbXg2NTMgY29tcGFyZSAgLTAuMCAgLTAgICAtPiAwCitjb214NjU0IGNvbXBhcmUgIC0wLjAgIC0wLjAgLT4gMAorY29teDY1NSBjb21wYXJlICAtMC4wICAgMC4wIC0+IDAKKworY29teDY1NiBjb21wYXJlICAtMEUxICAgMC4wIC0+IDAKK2NvbXg2NTcgY29tcGFyZSAgLTBFMiAgIDAuMCAtPiAwCitjb214NjU4IGNvbXBhcmUgICAwRTEgICAwLjAgLT4gMAorY29teDY1OSBjb21wYXJlICAgMEUyICAgMC4wIC0+IDAKK2NvbXg2NjAgY29tcGFyZSAgLTBFMSAgIDAgICAtPiAwCitjb214NjYxIGNvbXBhcmUgIC0wRTIgICAwICAgLT4gMAorY29teDY2MiBjb21wYXJlICAgMEUxICAgMCAgIC0+IDAKK2NvbXg2NjMgY29tcGFyZSAgIDBFMiAgIDAgICAtPiAwCitjb214NjY0IGNvbXBhcmUgIC0wRTEgIC0wRTEgLT4gMAorY29teDY2NSBjb21wYXJlICAtMEUyICAtMEUxIC0+IDAKK2NvbXg2NjYgY29tcGFyZSAgIDBFMSAgLTBFMSAtPiAwCitjb214NjY3IGNvbXBhcmUgICAwRTIgIC0wRTEgLT4gMAorY29teDY2OCBjb21wYXJlICAtMEUxICAtMEUyIC0+IDAKK2NvbXg2NjkgY29tcGFyZSAgLTBFMiAgLTBFMiAtPiAwCitjb214NjcwIGNvbXBhcmUgICAwRTEgIC0wRTIgLT4gMAorY29teDY3MSBjb21wYXJlICAgMEUyICAtMEUyIC0+IDAKK2NvbXg2NzIgY29tcGFyZSAgLTBFMSAgIDBFMSAtPiAwCitjb214NjczIGNvbXBhcmUgIC0wRTIgICAwRTEgLT4gMAorY29teDY3NCBjb21wYXJlICAgMEUxICAgMEUxIC0+IDAKK2NvbXg2NzUgY29tcGFyZSAgIDBFMiAgIDBFMSAtPiAwCitjb214Njc2IGNvbXBhcmUgIC0wRTEgICAwRTIgLT4gMAorY29teDY3NyBjb21wYXJlICAtMEUyICAgMEUyIC0+IDAKK2NvbXg2NzggY29tcGFyZSAgIDBFMSAgIDBFMiAtPiAwCitjb214Njc5IGNvbXBhcmUgICAwRTIgICAwRTIgLT4gMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitwcmVjaXNpb246IDIwCitjb214NjgwIGNvbXBhcmUgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAorY29teDY4MSBjb21wYXJlICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDAKK2NvbXg2ODIgY29tcGFyZSAgIDEyICAgIDEyLjAwICAgICAgICAtPiAwCitjb214NjgzIGNvbXBhcmUgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMAorY29teDY4NCBjb21wYXJlICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDAKK2NvbXg2ODUgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAwCitjb214Njg2IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMAorY29teDY4NyBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDAKK2NvbXg2ODggY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAwCitjb214Njg5IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMAorY29teDY5MCBjb21wYXJlICAgMTIgICAgICAgICAgICAgIDEyIC0+IDAKK2NvbXg2OTEgY29tcGFyZSAgIDEyLjAgICAgICAgICAgICAxMiAtPiAwCitjb214NjkyIGNvbXBhcmUgICAxMi4wMCAgICAgICAgICAgMTIgLT4gMAorY29teDY5MyBjb21wYXJlICAgMTIuMDAwICAgICAgICAgIDEyIC0+IDAKK2NvbXg2OTQgY29tcGFyZSAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAwCitjb214Njk1IGNvbXBhcmUgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gMAorY29teDY5NiBjb21wYXJlICAgMTIuMDAwMDAwICAgICAgIDEyIC0+IDAKK2NvbXg2OTcgY29tcGFyZSAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAwCitjb214Njk4IGNvbXBhcmUgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gMAorY29teDY5OSBjb21wYXJlICAgMTIuMDAwMDAwMDAwICAgIDEyIC0+IDAKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorY29teDcwMSBjb21wYXJlIDEyMzQ1Njc4MDAwICAxIC0+ICAxCitjb214NzAyIGNvbXBhcmUgMSAxMjM0NTY3ODAwMCAgLT4gLTEKK2NvbXg3MDMgY29tcGFyZSAxMjM0NTY3ODAwICAgMSAtPiAgMQorY29teDcwNCBjb21wYXJlIDEgMTIzNDU2NzgwMCAgIC0+IC0xCitjb214NzA1IGNvbXBhcmUgMTIzNDU2Nzg5MCAgIDEgLT4gIDEKK2NvbXg3MDYgY29tcGFyZSAxIDEyMzQ1Njc4OTAgICAtPiAtMQorY29teDcwNyBjb21wYXJlIDEyMzQ1Njc4OTEgICAxIC0+ICAxCitjb214NzA4IGNvbXBhcmUgMSAxMjM0NTY3ODkxICAgLT4gLTEKK2NvbXg3MDkgY29tcGFyZSAxMjM0NTY3ODkwMSAgMSAtPiAgMQorY29teDcxMCBjb21wYXJlIDEgMTIzNDU2Nzg5MDEgIC0+IC0xCitjb214NzExIGNvbXBhcmUgMTIzNDU2Nzg5NiAgIDEgLT4gIDEKK2NvbXg3MTIgY29tcGFyZSAxIDEyMzQ1Njc4OTYgICAtPiAtMQorY29teDcxMyBjb21wYXJlIC0xMjM0NTY3ODkxICAxIC0+IC0xCitjb214NzE0IGNvbXBhcmUgMSAtMTIzNDU2Nzg5MSAgLT4gIDEKK2NvbXg3MTUgY29tcGFyZSAtMTIzNDU2Nzg5MDEgMSAtPiAtMQorY29teDcxNiBjb21wYXJlIDEgLTEyMzQ1Njc4OTAxIC0+ICAxCitjb214NzE3IGNvbXBhcmUgLTEyMzQ1Njc4OTYgIDEgLT4gLTEKK2NvbXg3MTggY29tcGFyZSAxIC0xMjM0NTY3ODk2ICAtPiAgMQorCitwcmVjaXNpb246IDE1CistLSBzYW1lIHdpdGggcGxlbnR5IG9mIHByZWNpc2lvbgorY29teDcyMSBjb21wYXJlIDEyMzQ1Njc4MDAwIDEgLT4gMQorY29teDcyMiBjb21wYXJlIDEgMTIzNDU2NzgwMDAgLT4gLTEKK2NvbXg3MjMgY29tcGFyZSAxMjM0NTY3ODAwICAxIC0+IDEKK2NvbXg3MjQgY29tcGFyZSAxIDEyMzQ1Njc4MDAgIC0+IC0xCitjb214NzI1IGNvbXBhcmUgMTIzNDU2Nzg5MCAgMSAtPiAxCitjb214NzI2IGNvbXBhcmUgMSAxMjM0NTY3ODkwICAtPiAtMQorY29teDcyNyBjb21wYXJlIDEyMzQ1Njc4OTEgIDEgLT4gMQorY29teDcyOCBjb21wYXJlIDEgMTIzNDU2Nzg5MSAgLT4gLTEKK2NvbXg3MjkgY29tcGFyZSAxMjM0NTY3ODkwMSAxIC0+IDEKK2NvbXg3MzAgY29tcGFyZSAxIDEyMzQ1Njc4OTAxIC0+IC0xCitjb214NzMxIGNvbXBhcmUgMTIzNDU2Nzg5NiAgMSAtPiAxCitjb214NzMyIGNvbXBhcmUgMSAxMjM0NTY3ODk2ICAtPiAtMQorCistLSByZXNpZHVlIGNhc2VzCitwcmVjaXNpb246IDUKK2NvbXg3NDAgY29tcGFyZSAgMSAgMC45OTk5OTk5ICAtPiAxCitjb214NzQxIGNvbXBhcmUgIDEgIDAuOTk5OTk5ICAgLT4gMQorY29teDc0MiBjb21wYXJlICAxICAwLjk5OTk5ICAgIC0+IDEKK2NvbXg3NDMgY29tcGFyZSAgMSAgMS4wMDAwICAgICAtPiAwCitjb214NzQ0IGNvbXBhcmUgIDEgIDEuMDAwMDEgICAgLT4gLTEKK2NvbXg3NDUgY29tcGFyZSAgMSAgMS4wMDAwMDEgICAtPiAtMQorY29teDc0NiBjb21wYXJlICAxICAxLjAwMDAwMDEgIC0+IC0xCitjb214NzUwIGNvbXBhcmUgIDAuOTk5OTk5OSAgMSAgLT4gLTEKK2NvbXg3NTEgY29tcGFyZSAgMC45OTk5OTkgICAxICAtPiAtMQorY29teDc1MiBjb21wYXJlICAwLjk5OTk5ICAgIDEgIC0+IC0xCitjb214NzUzIGNvbXBhcmUgIDEuMDAwMCAgICAgMSAgLT4gMAorY29teDc1NCBjb21wYXJlICAxLjAwMDAxICAgIDEgIC0+IDEKK2NvbXg3NTUgY29tcGFyZSAgMS4wMDAwMDEgICAxICAtPiAxCitjb214NzU2IGNvbXBhcmUgIDEuMDAwMDAwMSAgMSAgLT4gMQorCistLSBhIHNlbGVjdGlvbiBvZiBsb25naWVzCitjb214NzYwIGNvbXBhcmUgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC01ODMwNjI5LjgzNDcwODUwMjU4MDg3NTY1NjAzNTc5NDAgLT4gLTEKK2NvbXg3NjEgY29tcGFyZSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAwCitjb214NzYyIGNvbXBhcmUgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gLTEKK2NvbXg3NjMgY29tcGFyZSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCistLSBwcmVjaXNpb25zIGFib3ZlIG9yIGJlbG93IHRoZSBkaWZmZXJlbmNlIHNob3VsZCBoYXZlIG5vIGVmZmVjdAorcHJlY2lzaW9uOiAgIDExCitjb214NzY0IGNvbXBhcmUgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgIDEwCitjb214NzY1IGNvbXBhcmUgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICA5Citjb214NzY2IGNvbXBhcmUgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICA4Citjb214NzY3IGNvbXBhcmUgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICA3Citjb214NzY4IGNvbXBhcmUgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICA2Citjb214NzY5IGNvbXBhcmUgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICA1Citjb214NzcwIGNvbXBhcmUgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICA0Citjb214NzcxIGNvbXBhcmUgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICAzCitjb214NzcyIGNvbXBhcmUgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICAyCitjb214NzczIGNvbXBhcmUgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICAxCitjb214Nzc0IGNvbXBhcmUgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorCistLSBTcGVjaWFscworcHJlY2lzaW9uOiAgIDkKK2NvbXg3ODAgY29tcGFyZSAgSW5mICAtSW5mICAgLT4gIDEKK2NvbXg3ODEgY29tcGFyZSAgSW5mICAtMTAwMCAgLT4gIDEKK2NvbXg3ODIgY29tcGFyZSAgSW5mICAtMSAgICAgLT4gIDEKK2NvbXg3ODMgY29tcGFyZSAgSW5mICAtMCAgICAgLT4gIDEKK2NvbXg3ODQgY29tcGFyZSAgSW5mICAgMCAgICAgLT4gIDEKK2NvbXg3ODUgY29tcGFyZSAgSW5mICAgMSAgICAgLT4gIDEKK2NvbXg3ODYgY29tcGFyZSAgSW5mICAgMTAwMCAgLT4gIDEKK2NvbXg3ODcgY29tcGFyZSAgSW5mICAgSW5mICAgLT4gIDAKK2NvbXg3ODggY29tcGFyZSAtMTAwMCAgSW5mICAgLT4gLTEKK2NvbXg3ODkgY29tcGFyZSAtSW5mICAgSW5mICAgLT4gLTEKK2NvbXg3OTAgY29tcGFyZSAtMSAgICAgSW5mICAgLT4gLTEKK2NvbXg3OTEgY29tcGFyZSAtMCAgICAgSW5mICAgLT4gLTEKK2NvbXg3OTIgY29tcGFyZSAgMCAgICAgSW5mICAgLT4gLTEKK2NvbXg3OTMgY29tcGFyZSAgMSAgICAgSW5mICAgLT4gLTEKK2NvbXg3OTQgY29tcGFyZSAgMTAwMCAgSW5mICAgLT4gLTEKK2NvbXg3OTUgY29tcGFyZSAgSW5mICAgSW5mICAgLT4gIDAKKworY29teDgwMCBjb21wYXJlIC1JbmYgIC1JbmYgICAtPiAgMAorY29teDgwMSBjb21wYXJlIC1JbmYgIC0xMDAwICAtPiAtMQorY29teDgwMiBjb21wYXJlIC1JbmYgIC0xICAgICAtPiAtMQorY29teDgwMyBjb21wYXJlIC1JbmYgIC0wICAgICAtPiAtMQorY29teDgwNCBjb21wYXJlIC1JbmYgICAwICAgICAtPiAtMQorY29teDgwNSBjb21wYXJlIC1JbmYgICAxICAgICAtPiAtMQorY29teDgwNiBjb21wYXJlIC1JbmYgICAxMDAwICAtPiAtMQorY29teDgwNyBjb21wYXJlIC1JbmYgICBJbmYgICAtPiAtMQorY29teDgwOCBjb21wYXJlIC1JbmYgIC1JbmYgICAtPiAgMAorY29teDgwOSBjb21wYXJlIC0xMDAwIC1JbmYgICAtPiAgMQorY29teDgxMCBjb21wYXJlIC0xICAgIC1JbmYgICAtPiAgMQorY29teDgxMSBjb21wYXJlIC0wICAgIC1JbmYgICAtPiAgMQorY29teDgxMiBjb21wYXJlICAwICAgIC1JbmYgICAtPiAgMQorY29teDgxMyBjb21wYXJlICAxICAgIC1JbmYgICAtPiAgMQorY29teDgxNCBjb21wYXJlICAxMDAwIC1JbmYgICAtPiAgMQorY29teDgxNSBjb21wYXJlICBJbmYgIC1JbmYgICAtPiAgMQorCitjb214ODIxIGNvbXBhcmUgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2NvbXg4MjIgY29tcGFyZSAgTmFOIC0xMDAwICAgLT4gIE5hTgorY29teDgyMyBjb21wYXJlICBOYU4gLTEgICAgICAtPiAgTmFOCitjb214ODI0IGNvbXBhcmUgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2NvbXg4MjUgY29tcGFyZSAgTmFOICAwICAgICAgLT4gIE5hTgorY29teDgyNiBjb21wYXJlICBOYU4gIDEgICAgICAtPiAgTmFOCitjb214ODI3IGNvbXBhcmUgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2NvbXg4MjggY29tcGFyZSAgTmFOICBJbmYgICAgLT4gIE5hTgorY29teDgyOSBjb21wYXJlICBOYU4gIE5hTiAgICAtPiAgTmFOCitjb214ODMwIGNvbXBhcmUgLUluZiAgTmFOICAgIC0+ICBOYU4KK2NvbXg4MzEgY29tcGFyZSAtMTAwMCBOYU4gICAgLT4gIE5hTgorY29teDgzMiBjb21wYXJlIC0xICAgIE5hTiAgICAtPiAgTmFOCitjb214ODMzIGNvbXBhcmUgLTAgICAgTmFOICAgIC0+ICBOYU4KK2NvbXg4MzQgY29tcGFyZSAgMCAgICBOYU4gICAgLT4gIE5hTgorY29teDgzNSBjb21wYXJlICAxICAgIE5hTiAgICAtPiAgTmFOCitjb214ODM2IGNvbXBhcmUgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2NvbXg4MzcgY29tcGFyZSAgSW5mICBOYU4gICAgLT4gIE5hTgorY29teDgzOCBjb21wYXJlIC1OYU4gLU5hTiAgICAtPiAtTmFOCitjb214ODM5IGNvbXBhcmUgK05hTiAtTmFOICAgIC0+ICBOYU4KK2NvbXg4NDAgY29tcGFyZSAtTmFOICtOYU4gICAgLT4gLU5hTgorCitjb214ODQxIGNvbXBhcmUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODQyIGNvbXBhcmUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODQzIGNvbXBhcmUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODQ0IGNvbXBhcmUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODQ1IGNvbXBhcmUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODQ2IGNvbXBhcmUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODQ3IGNvbXBhcmUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODQ4IGNvbXBhcmUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODQ5IGNvbXBhcmUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODUwIGNvbXBhcmUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODUxIGNvbXBhcmUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODUyIGNvbXBhcmUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODUzIGNvbXBhcmUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODU0IGNvbXBhcmUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODU1IGNvbXBhcmUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODU2IGNvbXBhcmUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODU3IGNvbXBhcmUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODU4IGNvbXBhcmUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitjb214ODU5IGNvbXBhcmUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2NvbXg4NjAgY29tcGFyZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2NvbXg4NjEgY29tcGFyZSAgTmFOOCAgOTk5ICAgLT4gIE5hTjgKK2NvbXg4NjIgY29tcGFyZSAgTmFONzcgSW5mICAgLT4gIE5hTjc3Citjb214ODYzIGNvbXBhcmUgLU5hTjY3IE5hTjUgIC0+IC1OYU42NworY29teDg2NCBjb21wYXJlIC1JbmYgIC1OYU40ICAtPiAtTmFONAorY29teDg2NSBjb21wYXJlIC05OTkgIC1OYU4zMyAtPiAtTmFOMzMKK2NvbXg4NjYgY29tcGFyZSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKK2NvbXg4NjcgY29tcGFyZSAtTmFONDEgLU5hTjQyIC0+IC1OYU40MQorY29teDg2OCBjb21wYXJlICtOYU40MSAtTmFONDIgLT4gIE5hTjQxCitjb214ODY5IGNvbXBhcmUgLU5hTjQxICtOYU40MiAtPiAtTmFONDEKK2NvbXg4NzAgY29tcGFyZSArTmFONDEgK05hTjQyIC0+ICBOYU40MQorCitjb214ODcxIGNvbXBhcmUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorY29teDg3MiBjb21wYXJlICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NzMgY29tcGFyZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitjb214ODc0IGNvbXBhcmUgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorY29teDg3NSBjb21wYXJlICBOYU44NSAgc05hTjgzICAtPiAgTmFOODMgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NzYgY29tcGFyZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitjb214ODc3IGNvbXBhcmUgIDA4OCAgICBzTmFOODEgIC0+ICBOYU44MSBJbnZhbGlkX29wZXJhdGlvbgorY29teDg3OCBjb21wYXJlICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2NvbXg4NzkgY29tcGFyZSAgTmFOICAgLXNOYU44OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gc3Vibm9ybWFsIHJlc3VsdHMgbm93IGFsbG93ZWQKK21heEV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5Citjb214ODgwIGNvbXBhcmUgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+IC0xCitjb214ODgxIGNvbXBhcmUgOUUrOTk5OTk5OTk5ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitjb214ODgyIGNvbXBhcmUgKzAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+ICAxCitjb214ODgzIGNvbXBhcmUgOUUtOTk5OTk5OTk5ICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xCitjb214ODg1IGNvbXBhcmUgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+IC0xCitjb214ODg2IGNvbXBhcmUgOUUrOTk5OTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitjb214ODg3IGNvbXBhcmUgLTAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+IC0xCitjb214ODg4IGNvbXBhcmUgOUUtOTk5OTk5OTk5IC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAxCisKK2NvbXg4ODkgY29tcGFyZSAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAxICAgLT4gLTEKK2NvbXg4OTAgY29tcGFyZSAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAwICAgLT4gLTEKK2NvbXg4OTEgY29tcGFyZSAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDAwICAgLT4gLTEKK2NvbXg4OTIgY29tcGFyZSA5ZS05OTk5OTk5OTggMC4wMSAgICAgICAgICAgLT4gLTEKK2NvbXg4OTMgY29tcGFyZSA5ZS05OTk5OTk5OTggMC4xICAgICAgICAgICAgLT4gLTEKK2NvbXg4OTQgY29tcGFyZSAwLjAxIDllLTk5OTk5OTk5OCAgICAgICAgICAgLT4gIDEKK2NvbXg4OTUgY29tcGFyZSAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMSAgICAgLT4gIDEKK2NvbXg4OTYgY29tcGFyZSAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMCAgICAgLT4gIDEKK2NvbXg4OTcgY29tcGFyZSAxZTYwMDAwMDAwMCAxZTQwMDAwMDAwMCAgICAgLT4gIDEKK2NvbXg4OTggY29tcGFyZSA5ZTk5OTk5OTk5OCAxMDAgICAgICAgICAgICAgLT4gIDEKK2NvbXg4OTkgY29tcGFyZSA5ZTk5OTk5OTk5OCAxMCAgICAgICAgICAgICAgLT4gIDEKK2NvbXg5MDAgY29tcGFyZSAxMDAgIDllOTk5OTk5OTk4ICAgICAgICAgICAgLT4gLTEKKy0tIHNpZ25zCitjb214OTAxIGNvbXBhcmUgIDFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+ICAxCitjb214OTAyIGNvbXBhcmUgIDFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+ICAxCitjb214OTAzIGNvbXBhcmUgLTFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+IC0xCitjb214OTA0IGNvbXBhcmUgLTFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC0xCitjb214OTA1IGNvbXBhcmUgIDFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+IC0xCitjb214OTA2IGNvbXBhcmUgIDFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+ICAxCitjb214OTA3IGNvbXBhcmUgLTFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+IC0xCitjb214OTA4IGNvbXBhcmUgLTFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+ICAxCisKKy0tIHNwcmVhZCB6ZXJvcworY29teDkxMCBjb21wYXJlICAgMEUtMzgzICAwICAgICAgIC0+ICAwCitjb214OTExIGNvbXBhcmUgICAwRS0zODMgLTAgICAgICAgLT4gIDAKK2NvbXg5MTIgY29tcGFyZSAgLTBFLTM4MyAgMCAgICAgICAtPiAgMAorY29teDkxMyBjb21wYXJlICAtMEUtMzgzIC0wICAgICAgIC0+ICAwCitjb214OTE0IGNvbXBhcmUgICAwRS0zODMgIDBFKzM4NCAgLT4gIDAKK2NvbXg5MTUgY29tcGFyZSAgIDBFLTM4MyAtMEUrMzg0ICAtPiAgMAorY29teDkxNiBjb21wYXJlICAtMEUtMzgzICAwRSszODQgIC0+ICAwCitjb214OTE3IGNvbXBhcmUgIC0wRS0zODMgLTBFKzM4NCAgLT4gIDAKK2NvbXg5MTggY29tcGFyZSAgIDAgICAgICAgMEUrMzg0ICAtPiAgMAorY29teDkxOSBjb21wYXJlICAgMCAgICAgIC0wRSszODQgIC0+ICAwCitjb214OTIwIGNvbXBhcmUgIC0wICAgICAgIDBFKzM4NCAgLT4gIDAKK2NvbXg5MjEgY29tcGFyZSAgLTAgICAgICAtMEUrMzg0ICAtPiAgMAorY29teDkzMCBjb21wYXJlICAgMEUrMzg0ICAwICAgICAgIC0+ICAwCitjb214OTMxIGNvbXBhcmUgICAwRSszODQgLTAgICAgICAgLT4gIDAKK2NvbXg5MzIgY29tcGFyZSAgLTBFKzM4NCAgMCAgICAgICAtPiAgMAorY29teDkzMyBjb21wYXJlICAtMEUrMzg0IC0wICAgICAgIC0+ICAwCitjb214OTM0IGNvbXBhcmUgICAwRSszODQgIDBFLTM4MyAgLT4gIDAKK2NvbXg5MzUgY29tcGFyZSAgIDBFKzM4NCAtMEUtMzgzICAtPiAgMAorY29teDkzNiBjb21wYXJlICAtMEUrMzg0ICAwRS0zODMgIC0+ICAwCitjb214OTM3IGNvbXBhcmUgIC0wRSszODQgLTBFLTM4MyAgLT4gIDAKK2NvbXg5MzggY29tcGFyZSAgIDAgICAgICAgMEUtMzgzICAtPiAgMAorY29teDkzOSBjb21wYXJlICAgMCAgICAgIC0wRS0zODMgIC0+ICAwCitjb214OTQwIGNvbXBhcmUgIC0wICAgICAgIDBFLTM4MyAgLT4gIDAKK2NvbXg5NDEgY29tcGFyZSAgLTAgICAgICAtMEUtMzgzICAtPiAgMAorCistLSBOdWxsIHRlc3RzCitjb214OTkwIGNvbXBhcmUgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitjb214OTkxIGNvbXBhcmUgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvbXBhcmV0b3RhbC5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb21wYXJldG90YWwuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTJjNDlmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb21wYXJldG90YWwuZGVjVGVzdApAQCAtMCwwICsxLDc5OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBjb21wYXJldG90YWwuZGVjVGVzdCAtLSBkZWNpbWFsIGNvbXBhcmlzb24gdXNpbmcgdG90YWwgb3JkZXJpbmcgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90CistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgorLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocworLS0gdGhhbiBjb21wYXJlLgorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKKworLS0gc2FuaXR5IGNoZWNrcworY290eDAwMSBjb21wYXJldG90YWwgIC0yICAtMiAgLT4gMAorY290eDAwMiBjb21wYXJldG90YWwgIC0yICAtMSAgLT4gLTEKK2NvdHgwMDMgY29tcGFyZXRvdGFsICAtMiAgIDAgIC0+IC0xCitjb3R4MDA0IGNvbXBhcmV0b3RhbCAgLTIgICAxICAtPiAtMQorY290eDAwNSBjb21wYXJldG90YWwgIC0yICAgMiAgLT4gLTEKK2NvdHgwMDYgY29tcGFyZXRvdGFsICAtMSAgLTIgIC0+IDEKK2NvdHgwMDcgY29tcGFyZXRvdGFsICAtMSAgLTEgIC0+IDAKK2NvdHgwMDggY29tcGFyZXRvdGFsICAtMSAgIDAgIC0+IC0xCitjb3R4MDA5IGNvbXBhcmV0b3RhbCAgLTEgICAxICAtPiAtMQorY290eDAxMCBjb21wYXJldG90YWwgIC0xICAgMiAgLT4gLTEKK2NvdHgwMTEgY29tcGFyZXRvdGFsICAgMCAgLTIgIC0+IDEKK2NvdHgwMTIgY29tcGFyZXRvdGFsICAgMCAgLTEgIC0+IDEKK2NvdHgwMTMgY29tcGFyZXRvdGFsICAgMCAgIDAgIC0+IDAKK2NvdHgwMTQgY29tcGFyZXRvdGFsICAgMCAgIDEgIC0+IC0xCitjb3R4MDE1IGNvbXBhcmV0b3RhbCAgIDAgICAyICAtPiAtMQorY290eDAxNiBjb21wYXJldG90YWwgICAxICAtMiAgLT4gMQorY290eDAxNyBjb21wYXJldG90YWwgICAxICAtMSAgLT4gMQorY290eDAxOCBjb21wYXJldG90YWwgICAxICAgMCAgLT4gMQorY290eDAxOSBjb21wYXJldG90YWwgICAxICAgMSAgLT4gMAorY290eDAyMCBjb21wYXJldG90YWwgICAxICAgMiAgLT4gLTEKK2NvdHgwMjEgY29tcGFyZXRvdGFsICAgMiAgLTIgIC0+IDEKK2NvdHgwMjIgY29tcGFyZXRvdGFsICAgMiAgLTEgIC0+IDEKK2NvdHgwMjMgY29tcGFyZXRvdGFsICAgMiAgIDAgIC0+IDEKK2NvdHgwMjUgY29tcGFyZXRvdGFsICAgMiAgIDEgIC0+IDEKK2NvdHgwMjYgY29tcGFyZXRvdGFsICAgMiAgIDIgIC0+IDAKKworY290eDAzMSBjb21wYXJldG90YWwgIC0yMCAgLTIwICAtPiAwCitjb3R4MDMyIGNvbXBhcmV0b3RhbCAgLTIwICAtMTAgIC0+IC0xCitjb3R4MDMzIGNvbXBhcmV0b3RhbCAgLTIwICAgMDAgIC0+IC0xCitjb3R4MDM0IGNvbXBhcmV0b3RhbCAgLTIwICAgMTAgIC0+IC0xCitjb3R4MDM1IGNvbXBhcmV0b3RhbCAgLTIwICAgMjAgIC0+IC0xCitjb3R4MDM2IGNvbXBhcmV0b3RhbCAgLTEwICAtMjAgIC0+IDEKK2NvdHgwMzcgY29tcGFyZXRvdGFsICAtMTAgIC0xMCAgLT4gMAorY290eDAzOCBjb21wYXJldG90YWwgIC0xMCAgIDAwICAtPiAtMQorY290eDAzOSBjb21wYXJldG90YWwgIC0xMCAgIDEwICAtPiAtMQorY290eDA0MCBjb21wYXJldG90YWwgIC0xMCAgIDIwICAtPiAtMQorY290eDA0MSBjb21wYXJldG90YWwgICAwMCAgLTIwICAtPiAxCitjb3R4MDQyIGNvbXBhcmV0b3RhbCAgIDAwICAtMTAgIC0+IDEKK2NvdHgwNDMgY29tcGFyZXRvdGFsICAgMDAgICAwMCAgLT4gMAorY290eDA0NCBjb21wYXJldG90YWwgICAwMCAgIDEwICAtPiAtMQorY290eDA0NSBjb21wYXJldG90YWwgICAwMCAgIDIwICAtPiAtMQorY290eDA0NiBjb21wYXJldG90YWwgICAxMCAgLTIwICAtPiAxCitjb3R4MDQ3IGNvbXBhcmV0b3RhbCAgIDEwICAtMTAgIC0+IDEKK2NvdHgwNDggY29tcGFyZXRvdGFsICAgMTAgICAwMCAgLT4gMQorY290eDA0OSBjb21wYXJldG90YWwgICAxMCAgIDEwICAtPiAwCitjb3R4MDUwIGNvbXBhcmV0b3RhbCAgIDEwICAgMjAgIC0+IC0xCitjb3R4MDUxIGNvbXBhcmV0b3RhbCAgIDIwICAtMjAgIC0+IDEKK2NvdHgwNTIgY29tcGFyZXRvdGFsICAgMjAgIC0xMCAgLT4gMQorY290eDA1MyBjb21wYXJldG90YWwgICAyMCAgIDAwICAtPiAxCitjb3R4MDU1IGNvbXBhcmV0b3RhbCAgIDIwICAgMTAgIC0+IDEKK2NvdHgwNTYgY29tcGFyZXRvdGFsICAgMjAgICAyMCAgLT4gMAorCitjb3R4MDYxIGNvbXBhcmV0b3RhbCAgLTIuMCAgLTIuMCAgLT4gMAorY290eDA2MiBjb21wYXJldG90YWwgIC0yLjAgIC0xLjAgIC0+IC0xCitjb3R4MDYzIGNvbXBhcmV0b3RhbCAgLTIuMCAgIDAuMCAgLT4gLTEKK2NvdHgwNjQgY29tcGFyZXRvdGFsICAtMi4wICAgMS4wICAtPiAtMQorY290eDA2NSBjb21wYXJldG90YWwgIC0yLjAgICAyLjAgIC0+IC0xCitjb3R4MDY2IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTIuMCAgLT4gMQorY290eDA2NyBjb21wYXJldG90YWwgIC0xLjAgIC0xLjAgIC0+IDAKK2NvdHgwNjggY29tcGFyZXRvdGFsICAtMS4wICAgMC4wICAtPiAtMQorY290eDA2OSBjb21wYXJldG90YWwgIC0xLjAgICAxLjAgIC0+IC0xCitjb3R4MDcwIGNvbXBhcmV0b3RhbCAgLTEuMCAgIDIuMCAgLT4gLTEKK2NvdHgwNzEgY29tcGFyZXRvdGFsICAgMC4wICAtMi4wICAtPiAxCitjb3R4MDcyIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTEuMCAgLT4gMQorY290eDA3MyBjb21wYXJldG90YWwgICAwLjAgICAwLjAgIC0+IDAKK2NvdHgwNzQgY29tcGFyZXRvdGFsICAgMC4wICAgMS4wICAtPiAtMQorY290eDA3NSBjb21wYXJldG90YWwgICAwLjAgICAyLjAgIC0+IC0xCitjb3R4MDc2IGNvbXBhcmV0b3RhbCAgIDEuMCAgLTIuMCAgLT4gMQorY290eDA3NyBjb21wYXJldG90YWwgICAxLjAgIC0xLjAgIC0+IDEKK2NvdHgwNzggY29tcGFyZXRvdGFsICAgMS4wICAgMC4wICAtPiAxCitjb3R4MDc5IGNvbXBhcmV0b3RhbCAgIDEuMCAgIDEuMCAgLT4gMAorY290eDA4MCBjb21wYXJldG90YWwgICAxLjAgICAyLjAgIC0+IC0xCitjb3R4MDgxIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTIuMCAgLT4gMQorY290eDA4MiBjb21wYXJldG90YWwgICAyLjAgIC0xLjAgIC0+IDEKK2NvdHgwODMgY29tcGFyZXRvdGFsICAgMi4wICAgMC4wICAtPiAxCitjb3R4MDg1IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDEuMCAgLT4gMQorY290eDA4NiBjb21wYXJldG90YWwgICAyLjAgICAyLjAgIC0+IDAKKworLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorY290eDA5MCBjb21wYXJldG90YWwgIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgIC0+IDAKK2NvdHgwOTEgY29tcGFyZXRvdGFsIC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgOS45OTk5OTk5OUUrOTk5OTk5OTk5ICAtPiAtMQorY290eDA5MiBjb21wYXJldG90YWwgIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IC0+IDEKK2NvdHgwOTMgY29tcGFyZXRvdGFsIC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtPiAwCisKKy0tIEV4YW1wbGVzCitjb3R4MDk0IGNvbXBhcmV0b3RhbCAgMTIuNzMgIDEyNy45ICAtPiAtMQorY290eDA5NSBjb21wYXJldG90YWwgIC0xMjcgICAxMiAgICAgLT4gLTEKK2NvdHgwOTYgY29tcGFyZXRvdGFsICAxMi4zMCAgMTIuMyAgIC0+IC0xCitjb3R4MDk3IGNvbXBhcmV0b3RhbCAgMTIuMzAgIDEyLjMwICAtPiAgMAorY290eDA5OCBjb21wYXJldG90YWwgIDEyLjMgICAxMi4zMDAgLT4gIDEKK2NvdHgwOTkgY29tcGFyZXRvdGFsICAxMi4zICAgTmFOICAgIC0+IC0xCisKKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcworLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbAorY290eDEwMCBjb21wYXJldG90YWwgICA3LjAgICAgNy4wICAgIC0+IDAKK2NvdHgxMDEgY29tcGFyZXRvdGFsICAgNy4wICAgIDcgICAgICAtPiAtMQorY290eDEwMiBjb21wYXJldG90YWwgICA3ICAgICAgNy4wICAgIC0+IDEKK2NvdHgxMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIDcuMCAgICAtPiAxCitjb3R4MTA0IGNvbXBhcmV0b3RhbCAgIDcwRS0xICA3LjAgICAgLT4gMAorY290eDEwNSBjb21wYXJldG90YWwgICAwLjdFKzEgNyAgICAgIC0+IDAKK2NvdHgxMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcgICAgICAtPiAtMQorY290eDEwNyBjb21wYXJldG90YWwgICA3LjAgICAgN0UrMCAgIC0+IC0xCitjb3R4MTA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3MEUtMSAgLT4gMAorY290eDEwOSBjb21wYXJldG90YWwgICA3ICAgICAgMC43RSsxIC0+IDAKK2NvdHgxMTAgY29tcGFyZXRvdGFsICAgNyAgICAgIDcwRS0xICAtPiAxCisKK2NvdHgxMjAgY29tcGFyZXRvdGFsICAgOC4wICAgIDcuMCAgICAtPiAxCitjb3R4MTIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3ICAgICAgLT4gMQorY290eDEyMiBjb21wYXJldG90YWwgICA4ICAgICAgNy4wICAgIC0+IDEKK2NvdHgxMjMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDcuMCAgICAtPiAxCitjb3R4MTI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3LjAgICAgLT4gMQorY290eDEyNSBjb21wYXJldG90YWwgICAwLjhFKzEgNyAgICAgIC0+IDEKK2NvdHgxMjYgY29tcGFyZXRvdGFsICAgODBFLTEgIDcgICAgICAtPiAxCitjb3R4MTI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3RSswICAgLT4gMQorY290eDEyOCBjb21wYXJldG90YWwgICA4LjAgICAgNzBFLTEgIC0+IDEKK2NvdHgxMjkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuN0UrMSAgLT4gMQorY290eDEzMCBjb21wYXJldG90YWwgICA4ICAgICAgNzBFLTEgIC0+IDEKKworY290eDE0MCBjb21wYXJldG90YWwgICA4LjAgICAgOS4wICAgIC0+IC0xCitjb3R4MTQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA5ICAgICAgLT4gLTEKK2NvdHgxNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIDkuMCAgICAtPiAtMQorY290eDE0MyBjb21wYXJldG90YWwgICA4RSswICAgOS4wICAgIC0+IC0xCitjb3R4MTQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA5LjAgICAgLT4gLTEKK2NvdHgxNDUgY29tcGFyZXRvdGFsICAgMC44RSsxIDkgICAgICAtPiAtMQorY290eDE0NiBjb21wYXJldG90YWwgICA4MEUtMSAgOSAgICAgIC0+IC0xCitjb3R4MTQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5RSswICAgLT4gLTEKK2NvdHgxNDggY29tcGFyZXRvdGFsICAgOC4wICAgIDkwRS0xICAtPiAtMQorY290eDE0OSBjb21wYXJldG90YWwgICA4ICAgICAgMC45RSsxIC0+IC0xCitjb3R4MTUwIGNvbXBhcmV0b3RhbCAgIDggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorY290eDIwMCBjb21wYXJldG90YWwgIC03LjAgICAgNy4wICAgIC0+IC0xCitjb3R4MjAxIGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3ICAgICAgLT4gLTEKK2NvdHgyMDIgY29tcGFyZXRvdGFsICAtNyAgICAgIDcuMCAgICAtPiAtMQorY290eDIwMyBjb21wYXJldG90YWwgIC03RSswICAgNy4wICAgIC0+IC0xCitjb3R4MjA0IGNvbXBhcmV0b3RhbCAgLTcwRS0xICA3LjAgICAgLT4gLTEKK2NvdHgyMDUgY29tcGFyZXRvdGFsICAtMC43RSsxIDcgICAgICAtPiAtMQorY290eDIwNiBjb21wYXJldG90YWwgIC03MEUtMSAgNyAgICAgIC0+IC0xCitjb3R4MjA3IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3RSswICAgLT4gLTEKK2NvdHgyMDggY29tcGFyZXRvdGFsICAtNy4wICAgIDcwRS0xICAtPiAtMQorY290eDIwOSBjb21wYXJldG90YWwgIC03ICAgICAgMC43RSsxIC0+IC0xCitjb3R4MjEwIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3MEUtMSAgLT4gLTEKKworY290eDIyMCBjb21wYXJldG90YWwgIC04LjAgICAgNy4wICAgIC0+IC0xCitjb3R4MjIxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3ICAgICAgLT4gLTEKK2NvdHgyMjIgY29tcGFyZXRvdGFsICAtOCAgICAgIDcuMCAgICAtPiAtMQorY290eDIyMyBjb21wYXJldG90YWwgIC04RSswICAgNy4wICAgIC0+IC0xCitjb3R4MjI0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3LjAgICAgLT4gLTEKK2NvdHgyMjUgY29tcGFyZXRvdGFsICAtMC44RSsxIDcgICAgICAtPiAtMQorY290eDIyNiBjb21wYXJldG90YWwgIC04MEUtMSAgNyAgICAgIC0+IC0xCitjb3R4MjI3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3RSswICAgLT4gLTEKK2NvdHgyMjggY29tcGFyZXRvdGFsICAtOC4wICAgIDcwRS0xICAtPiAtMQorY290eDIyOSBjb21wYXJldG90YWwgIC04ICAgICAgMC43RSsxIC0+IC0xCitjb3R4MjMwIGNvbXBhcmV0b3RhbCAgLTggICAgICA3MEUtMSAgLT4gLTEKKworY290eDI0MCBjb21wYXJldG90YWwgIC04LjAgICAgOS4wICAgIC0+IC0xCitjb3R4MjQxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5ICAgICAgLT4gLTEKK2NvdHgyNDIgY29tcGFyZXRvdGFsICAtOCAgICAgIDkuMCAgICAtPiAtMQorY290eDI0MyBjb21wYXJldG90YWwgIC04RSswICAgOS4wICAgIC0+IC0xCitjb3R4MjQ0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5LjAgICAgLT4gLTEKK2NvdHgyNDUgY29tcGFyZXRvdGFsICAtMC44RSsxIDkgICAgICAtPiAtMQorY290eDI0NiBjb21wYXJldG90YWwgIC04MEUtMSAgOSAgICAgIC0+IC0xCitjb3R4MjQ3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5RSswICAgLT4gLTEKK2NvdHgyNDggY29tcGFyZXRvdGFsICAtOC4wICAgIDkwRS0xICAtPiAtMQorY290eDI0OSBjb21wYXJldG90YWwgIC04ICAgICAgMC45RSsxIC0+IC0xCitjb3R4MjUwIGNvbXBhcmV0b3RhbCAgLTggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorY290eDMwMCBjb21wYXJldG90YWwgICA3LjAgICAgLTcuMCAgICAtPiAxCitjb3R4MzAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNyAgICAgIC0+IDEKK2NvdHgzMDIgY29tcGFyZXRvdGFsICAgNyAgICAgIC03LjAgICAgLT4gMQorY290eDMwMyBjb21wYXJldG90YWwgICA3RSswICAgLTcuMCAgICAtPiAxCitjb3R4MzA0IGNvbXBhcmV0b3RhbCAgIDcwRS0xICAtNy4wICAgIC0+IDEKK2NvdHgzMDUgY29tcGFyZXRvdGFsICAgLjdFKzEgIC03ICAgICAgLT4gMQorY290eDMwNiBjb21wYXJldG90YWwgICA3MEUtMSAgLTcgICAgICAtPiAxCitjb3R4MzA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtN0UrMCAgIC0+IDEKK2NvdHgzMDggY29tcGFyZXRvdGFsICAgNy4wICAgIC03MEUtMSAgLT4gMQorY290eDMwOSBjb21wYXJldG90YWwgICA3ICAgICAgLS43RSsxICAtPiAxCitjb3R4MzEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICAtNzBFLTEgIC0+IDEKKworY290eDMyMCBjb21wYXJldG90YWwgICA4LjAgICAgLTcuMCAgICAtPiAxCitjb3R4MzIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNyAgICAgIC0+IDEKK2NvdHgzMjIgY29tcGFyZXRvdGFsICAgOCAgICAgIC03LjAgICAgLT4gMQorY290eDMyMyBjb21wYXJldG90YWwgICA4RSswICAgLTcuMCAgICAtPiAxCitjb3R4MzI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNy4wICAgIC0+IDEKK2NvdHgzMjUgY29tcGFyZXRvdGFsICAgLjhFKzEgIC03ICAgICAgLT4gMQorY290eDMyNiBjb21wYXJldG90YWwgICA4MEUtMSAgLTcgICAgICAtPiAxCitjb3R4MzI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtN0UrMCAgIC0+IDEKK2NvdHgzMjggY29tcGFyZXRvdGFsICAgOC4wICAgIC03MEUtMSAgLT4gMQorY290eDMyOSBjb21wYXJldG90YWwgICA4ICAgICAgLS43RSsxICAtPiAxCitjb3R4MzMwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNzBFLTEgIC0+IDEKKworY290eDM0MCBjb21wYXJldG90YWwgICA4LjAgICAgLTkuMCAgICAtPiAxCitjb3R4MzQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOSAgICAgIC0+IDEKK2NvdHgzNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIC05LjAgICAgLT4gMQorY290eDM0MyBjb21wYXJldG90YWwgICA4RSswICAgLTkuMCAgICAtPiAxCitjb3R4MzQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOS4wICAgIC0+IDEKK2NvdHgzNDUgY29tcGFyZXRvdGFsICAgLjhFKzEgIC05ICAgICAgLT4gMQorY290eDM0NiBjb21wYXJldG90YWwgICA4MEUtMSAgLTkgICAgICAtPiAxCitjb3R4MzQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOUUrMCAgIC0+IDEKK2NvdHgzNDggY29tcGFyZXRvdGFsICAgOC4wICAgIC05MEUtMSAgLT4gMQorY290eDM0OSBjb21wYXJldG90YWwgICA4ICAgICAgLS45RSsxICAtPiAxCitjb3R4MzUwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOTBFLTEgIC0+IDEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorY290eDQwMCBjb21wYXJldG90YWwgICAtNy4wICAgIC03LjAgICAgLT4gMAorY290eDQwMSBjb21wYXJldG90YWwgICAtNy4wICAgIC03ICAgICAgLT4gMQorY290eDQwMiBjb21wYXJldG90YWwgICAtNyAgICAgIC03LjAgICAgLT4gLTEKK2NvdHg0MDMgY29tcGFyZXRvdGFsICAgLTdFKzAgICAtNy4wICAgIC0+IC0xCitjb3R4NDA0IGNvbXBhcmV0b3RhbCAgIC03MEUtMSAgLTcuMCAgICAtPiAwCitjb3R4NDA1IGNvbXBhcmV0b3RhbCAgIC0uN0UrMSAgLTcgICAgICAtPiAwCitjb3R4NDA2IGNvbXBhcmV0b3RhbCAgIC03MEUtMSAgLTcgICAgICAtPiAxCitjb3R4NDA3IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTdFKzAgICAtPiAxCitjb3R4NDA4IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcwRS0xICAtPiAwCitjb3R4NDA5IGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLS43RSsxICAtPiAwCitjb3R4NDEwIGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLTcwRS0xICAtPiAtMQorCitjb3R4NDIwIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcuMCAgICAtPiAtMQorY290eDQyMSBjb21wYXJldG90YWwgICAtOC4wICAgIC03ICAgICAgLT4gLTEKK2NvdHg0MjIgY29tcGFyZXRvdGFsICAgLTggICAgICAtNy4wICAgIC0+IC0xCitjb3R4NDIzIGNvbXBhcmV0b3RhbCAgIC04RSswICAgLTcuMCAgICAtPiAtMQorY290eDQyNCBjb21wYXJldG90YWwgICAtODBFLTEgIC03LjAgICAgLT4gLTEKK2NvdHg0MjUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtNyAgICAgIC0+IC0xCitjb3R4NDI2IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTcgICAgICAtPiAtMQorY290eDQyNyBjb21wYXJldG90YWwgICAtOC4wICAgIC03RSswICAgLT4gLTEKK2NvdHg0MjggY29tcGFyZXRvdGFsICAgLTguMCAgICAtNzBFLTEgIC0+IC0xCitjb3R4NDI5IGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLS43RSsxICAtPiAtMQorY290eDQzMCBjb21wYXJldG90YWwgICAtOCAgICAgIC03MEUtMSAgLT4gLTEKKworY290eDQ0MCBjb21wYXJldG90YWwgICAtOC4wICAgIC05LjAgICAgLT4gMQorY290eDQ0MSBjb21wYXJldG90YWwgICAtOC4wICAgIC05ICAgICAgLT4gMQorY290eDQ0MiBjb21wYXJldG90YWwgICAtOCAgICAgIC05LjAgICAgLT4gMQorY290eDQ0MyBjb21wYXJldG90YWwgICAtOEUrMCAgIC05LjAgICAgLT4gMQorY290eDQ0NCBjb21wYXJldG90YWwgICAtODBFLTEgIC05LjAgICAgLT4gMQorY290eDQ0NSBjb21wYXJldG90YWwgICAtLjhFKzEgIC05ICAgICAgLT4gMQorY290eDQ0NiBjb21wYXJldG90YWwgICAtODBFLTEgIC05ICAgICAgLT4gMQorY290eDQ0NyBjb21wYXJldG90YWwgICAtOC4wICAgIC05RSswICAgLT4gMQorY290eDQ0OCBjb21wYXJldG90YWwgICAtOC4wICAgIC05MEUtMSAgLT4gMQorY290eDQ0OSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uOUUrMSAgLT4gMQorY290eDQ1MCBjb21wYXJldG90YWwgICAtOCAgICAgIC05MEUtMSAgLT4gMQorCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorcHJlY2lzaW9uOiA0MAorY290eDQ3MCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xCitjb3R4NDcxIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorY290eDQ3MiBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQorY290eDQ3MyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitjb3R4NDc0IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQorY290eDQ3NSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorY290eDQ3NiBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xCitjb3R4NDc3IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorY290eDQ3OCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQorY290eDQ3OSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitjb3R4NDgwIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQorY290eDQ4MSBjb21wYXJldG90YWwgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorY290eDQ4MiBjb21wYXJldG90YWwgMTIzLjQ1NjBFNzg5IDEyMy40NTZFNzg5IC0+IC0xCitjb3R4NDgzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAtPiAwCitjb3R4NDg0IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwMDAwMEUtODkgLT4gMQorY290eDQ4NSBjb21wYXJldG90YWwgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwMDAwMEU3ODkgLT4gMQorY290eDQ4NiBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMDAwRS04OSAtPiAxCitjb3R4NDg3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDAwMEU3ODkgLT4gMQorY290eDQ4OCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMQorY290eDQ4OSBjb21wYXJldG90YWwgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwRTc4OSAtPiAxCitjb3R4NDkwIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgLT4gMQorY290eDQ5MSBjb21wYXJldG90YWwgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMEU3ODkgLT4gMQorY290eDQ5MiBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAtPiAxCitjb3R4NDkzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMEU3ODkgLT4gMQorY290eDQ5NCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMQorY290eDQ5NSBjb21wYXJldG90YWwgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwRTc4OSAtPiAxCitjb3R4NDk2IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgLT4gMQorY290eDQ5NyBjb21wYXJldG90YWwgMTIzLjQ1NkU3ODkgMTIzLjQ1NkU3ODkgLT4gMAorCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCitwcmVjaXNpb246IDkKK2NvdHg1MDAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE1ICAgIC0+IDEKK2NvdHg1MDEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE0ICAgIC0+IDEKK2NvdHg1MDIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEzICAgIC0+IDEKK2NvdHg1MDMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEyICAgIC0+IDEKK2NvdHg1MDQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTExICAgIC0+IDEKK2NvdHg1MDUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEwICAgIC0+IDEKK2NvdHg1MDYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTkgICAgIC0+IDEKK2NvdHg1MDcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTggICAgIC0+IDEKK2NvdHg1MDggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTcgICAgIC0+IDEKK2NvdHg1MDkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTYgICAgIC0+IDEKK2NvdHg1MTAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTUgICAgIC0+IDEKK2NvdHg1MTEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTQgICAgIC0+IDEKK2NvdHg1MTIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTMgICAgIC0+IDEKK2NvdHg1MTMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTIgICAgIC0+IDEKK2NvdHg1MTQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEgICAgIC0+IDEKK2NvdHg1MTUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTAgICAgIC0+IDAKK2NvdHg1MTYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEgICAgIC0+IC0xCitjb3R4NTE3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsyICAgICAtPiAtMQorY290eDUxOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMyAgICAgLT4gLTEKK2NvdHg1MTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzQgICAgIC0+IC0xCitjb3R4NTIxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs1ICAgICAtPiAtMQorY290eDUyMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNiAgICAgLT4gLTEKK2NvdHg1MjMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzcgICAgIC0+IC0xCitjb3R4NTI0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs4ICAgICAtPiAtMQorY290eDUyNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrOSAgICAgLT4gLTEKK2NvdHg1MjYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEwICAgIC0+IC0xCitjb3R4NTI3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMSAgICAtPiAtMQorY290eDUyOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTIgICAgLT4gLTEKK2NvdHg1MjkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEzICAgIC0+IC0xCitjb3R4NTMwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNCAgICAtPiAtMQorY290eDUzMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTUgICAgLT4gLTEKKy0tIExSIHN3YXAKK2NvdHg1NDAgY29tcGFyZXRvdGFsICAgIDFFLTE1ICAxICAgICAgIC0+IC0xCitjb3R4NTQxIGNvbXBhcmV0b3RhbCAgICAxRS0xNCAgMSAgICAgICAtPiAtMQorY290eDU0MiBjb21wYXJldG90YWwgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKK2NvdHg1NDMgY29tcGFyZXRvdGFsICAgIDFFLTEyICAxICAgICAgIC0+IC0xCitjb3R4NTQ0IGNvbXBhcmV0b3RhbCAgICAxRS0xMSAgMSAgICAgICAtPiAtMQorY290eDU0NSBjb21wYXJldG90YWwgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKK2NvdHg1NDYgY29tcGFyZXRvdGFsICAgIDFFLTkgICAxICAgICAgIC0+IC0xCitjb3R4NTQ3IGNvbXBhcmV0b3RhbCAgICAxRS04ICAgMSAgICAgICAtPiAtMQorY290eDU0OCBjb21wYXJldG90YWwgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKK2NvdHg1NDkgY29tcGFyZXRvdGFsICAgIDFFLTYgICAxICAgICAgIC0+IC0xCitjb3R4NTUwIGNvbXBhcmV0b3RhbCAgICAxRS01ICAgMSAgICAgICAtPiAtMQorY290eDU1MSBjb21wYXJldG90YWwgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKK2NvdHg1NTIgY29tcGFyZXRvdGFsICAgIDFFLTMgICAxICAgICAgIC0+IC0xCitjb3R4NTUzIGNvbXBhcmV0b3RhbCAgICAxRS0yICAgMSAgICAgICAtPiAtMQorY290eDU1NCBjb21wYXJldG90YWwgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKK2NvdHg1NTUgY29tcGFyZXRvdGFsICAgIDFFLTAgICAxICAgICAgIC0+ICAwCitjb3R4NTU2IGNvbXBhcmV0b3RhbCAgICAxRSsxICAgMSAgICAgICAtPiAgMQorY290eDU1NyBjb21wYXJldG90YWwgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKK2NvdHg1NTggY29tcGFyZXRvdGFsICAgIDFFKzMgICAxICAgICAgIC0+ICAxCitjb3R4NTU5IGNvbXBhcmV0b3RhbCAgICAxRSs0ICAgMSAgICAgICAtPiAgMQorY290eDU2MSBjb21wYXJldG90YWwgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKK2NvdHg1NjIgY29tcGFyZXRvdGFsICAgIDFFKzYgICAxICAgICAgIC0+ICAxCitjb3R4NTYzIGNvbXBhcmV0b3RhbCAgICAxRSs3ICAgMSAgICAgICAtPiAgMQorY290eDU2NCBjb21wYXJldG90YWwgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKK2NvdHg1NjUgY29tcGFyZXRvdGFsICAgIDFFKzkgICAxICAgICAgIC0+ICAxCitjb3R4NTY2IGNvbXBhcmV0b3RhbCAgICAxRSsxMCAgMSAgICAgICAtPiAgMQorY290eDU2NyBjb21wYXJldG90YWwgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKK2NvdHg1NjggY29tcGFyZXRvdGFsICAgIDFFKzEyICAxICAgICAgIC0+ICAxCitjb3R4NTY5IGNvbXBhcmV0b3RhbCAgICAxRSsxMyAgMSAgICAgICAtPiAgMQorY290eDU3MCBjb21wYXJldG90YWwgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKK2NvdHg1NzEgY29tcGFyZXRvdGFsICAgIDFFKzE1ICAxICAgICAgIC0+ICAxCistLSBzaW1pbGFyIHdpdGggYW4gdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5Citjb3R4NTgwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDEKK2NvdHg1ODEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQorY290eDU4MiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxCitjb3R4NTgzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDEKK2NvdHg1ODQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQorY290eDU4NSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxCitjb3R4NTg2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDEKK2NvdHg1ODcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQorY290eDU4OCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxCitjb3R4NTg5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xCitjb3R4NTkwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xCitjb3R4NTkxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xCitjb3R4NTkyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xCitjb3R4NTkzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xCitjb3R4NTk0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xCitjb3R4NTk1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xCitjb3R4NTk2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xCitjb3R4NTk3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xCitjb3R4NTk4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xCitjb3R4NTk5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitwcmVjaXNpb246IDIwCitjb3R4NjAwIGNvbXBhcmV0b3RhbCAgIDEyICAgICAgICAgICAgMTIuMjM0NSAtPiAtMQorY290eDYwMSBjb21wYXJldG90YWwgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2NvdHg2MDIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitjb3R4NjAzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAtPiAtMQorY290eDYwNCBjb21wYXJldG90YWwgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTEKK2NvdHg2MDUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xCitjb3R4NjA2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAtPiAtMQorY290eDYwNyBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTEKK2NvdHg2MDggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xCitjb3R4NjA5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAtPiAtMQorY290eDYxMCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDEKK2NvdHg2MTEgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxCitjb3R4NjEyIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAtPiAgMQorY290eDYxMyBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDEKK2NvdHg2MTQgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxCitjb3R4NjE1IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAtPiAgMQorY290eDYxNiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDEKK2NvdHg2MTcgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxCitjb3R4NjE4IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAtPiAgMQorY290eDYxOSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDEKK2NvdHg2MjAgY29tcGFyZXRvdGFsICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitjb3R4NjIxIGNvbXBhcmV0b3RhbCAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorY290eDYyMiBjb21wYXJldG90YWwgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2NvdHg2MjMgY29tcGFyZXRvdGFsICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxCitjb3R4NjI0IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAtPiAgMQorY290eDYyNSBjb21wYXJldG90YWwgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDEKK2NvdHg2MjYgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxCitjb3R4NjI3IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAtPiAgMQorY290eDYyOCBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDEKK2NvdHg2MjkgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxCitjb3R4NjMwIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyICAgICAgICAgICAtPiAtMQorY290eDYzMSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTEKK2NvdHg2MzIgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xCitjb3R4NjMzIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAtPiAtMQorY290eDYzNCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTEKK2NvdHg2MzUgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xCitjb3R4NjM2IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAtPiAtMQorY290eDYzNyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTEKK2NvdHg2MzggY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xCitjb3R4NjM5IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAtPiAtMQorcHJlY2lzaW9uOiA5CisKKy0tIGV4dGVuZGVkIHplcm9zCitjb3R4NjQwIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAgICAtPiAwCitjb3R4NjQxIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAgICAtPiAxCitjb3R4NjQyIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAuMCAtPiAxCitjb3R4NjQzIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAuMCAtPiAxCitjb3R4NjQ0IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAgICAtPiAtMQorY290eDY0NSBjb21wYXJldG90YWwgIC0wICAgIC0wICAgLT4gMAorY290eDY0NiBjb21wYXJldG90YWwgIC0wICAgIC0wLjAgLT4gLTEKK2NvdHg2NDcgY29tcGFyZXRvdGFsICAtMCAgICAgMC4wIC0+IC0xCitjb3R4NjQ4IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAgICAtPiAtMQorY290eDY0OSBjb21wYXJldG90YWwgICAwLjAgIC0wICAgLT4gMQorY290eDY1MCBjb21wYXJldG90YWwgICAwLjAgIC0wLjAgLT4gMQorY290eDY1MSBjb21wYXJldG90YWwgICAwLjAgICAwLjAgLT4gMAorY290eDY1MiBjb21wYXJldG90YWwgIC0wLjAgICAwICAgLT4gLTEKK2NvdHg2NTMgY29tcGFyZXRvdGFsICAtMC4wICAtMCAgIC0+IDEKK2NvdHg2NTQgY29tcGFyZXRvdGFsICAtMC4wICAtMC4wIC0+IDAKK2NvdHg2NTUgY29tcGFyZXRvdGFsICAtMC4wICAgMC4wIC0+IC0xCisKK2NvdHg2NTYgY29tcGFyZXRvdGFsICAtMEUxICAgMC4wIC0+IC0xCitjb3R4NjU3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAuMCAtPiAtMQorY290eDY1OCBjb21wYXJldG90YWwgICAwRTEgICAwLjAgLT4gMQorY290eDY1OSBjb21wYXJldG90YWwgICAwRTIgICAwLjAgLT4gMQorY290eDY2MCBjb21wYXJldG90YWwgIC0wRTEgICAwICAgLT4gLTEKK2NvdHg2NjEgY29tcGFyZXRvdGFsICAtMEUyICAgMCAgIC0+IC0xCitjb3R4NjYyIGNvbXBhcmV0b3RhbCAgIDBFMSAgIDAgICAtPiAxCitjb3R4NjYzIGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAgICAtPiAxCitjb3R4NjY0IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMSAtPiAwCitjb3R4NjY1IGNvbXBhcmV0b3RhbCAgLTBFMiAgLTBFMSAtPiAtMQorY290eDY2NiBjb21wYXJldG90YWwgICAwRTEgIC0wRTEgLT4gMQorY290eDY2NyBjb21wYXJldG90YWwgICAwRTIgIC0wRTEgLT4gMQorY290eDY2OCBjb21wYXJldG90YWwgIC0wRTEgIC0wRTIgLT4gMQorY290eDY2OSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTIgLT4gMAorY290eDY3MCBjb21wYXJldG90YWwgICAwRTEgIC0wRTIgLT4gMQorY290eDY3MSBjb21wYXJldG90YWwgICAwRTIgIC0wRTIgLT4gMQorY290eDY3MiBjb21wYXJldG90YWwgIC0wRTEgICAwRTEgLT4gLTEKK2NvdHg2NzMgY29tcGFyZXRvdGFsICAtMEUyICAgMEUxIC0+IC0xCitjb3R4Njc0IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDBFMSAtPiAwCitjb3R4Njc1IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMSAtPiAxCitjb3R4Njc2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMiAtPiAtMQorY290eDY3NyBjb21wYXJldG90YWwgIC0wRTIgICAwRTIgLT4gLTEKK2NvdHg2NzggY29tcGFyZXRvdGFsICAgMEUxICAgMEUyIC0+IC0xCitjb3R4Njc5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMiAtPiAwCisKKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKK3ByZWNpc2lvbjogMjAKK2NvdHg2ODAgY29tcGFyZXRvdGFsICAgMTIgICAgMTIgICAgICAgICAgIC0+IDAKK2NvdHg2ODEgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDEKK2NvdHg2ODIgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDEKK2NvdHg2ODMgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDEKK2NvdHg2ODQgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDEKK2NvdHg2ODUgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDEKK2NvdHg2ODYgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDEKK2NvdHg2ODcgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDEKK2NvdHg2ODggY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDEKK2NvdHg2ODkgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDEKK2NvdHg2OTAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAgIDEyIC0+IDAKK2NvdHg2OTEgY29tcGFyZXRvdGFsICAgMTIuMCAgICAgICAgICAgIDEyIC0+IC0xCitjb3R4NjkyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgICAxMiAtPiAtMQorY290eDY5MyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgICAgMTIgLT4gLTEKK2NvdHg2OTQgY29tcGFyZXRvdGFsICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IC0xCitjb3R4Njk1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAtMQorY290eDY5NiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gLTEKK2NvdHg2OTcgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IC0xCitjb3R4Njk4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAtMQorY290eDY5OSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gLTEKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorY290eDcwMSBjb21wYXJldG90YWwgMTIzNDU2NzgwMDAgIDEgLT4gIDEKK2NvdHg3MDIgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMDAgIC0+IC0xCitjb3R4NzAzIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwICAgMSAtPiAgMQorY290eDcwNCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwICAgLT4gLTEKK2NvdHg3MDUgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAgICAxIC0+ICAxCitjb3R4NzA2IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAgICAtPiAtMQorY290eDcwNyBjb21wYXJldG90YWwgMTIzNDU2Nzg5MSAgIDEgLT4gIDEKK2NvdHg3MDggY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MSAgIC0+IC0xCitjb3R4NzA5IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwMSAgMSAtPiAgMQorY290eDcxMCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwMSAgLT4gLTEKK2NvdHg3MTEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTYgICAxIC0+ICAxCitjb3R4NzEyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTYgICAtPiAtMQorY290eDcxMyBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTEgIDEgLT4gLTEKK2NvdHg3MTQgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTEgIC0+ICAxCitjb3R4NzE1IGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MDEgMSAtPiAtMQorY290eDcxNiBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5MDEgLT4gIDEKK2NvdHg3MTcgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODk2ICAxIC0+IC0xCitjb3R4NzE4IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODk2ICAtPiAgMQorCitwcmVjaXNpb246IDE1CistLSBzYW1lIHdpdGggcGxlbnR5IG9mIHByZWNpc2lvbgorY290eDcyMSBjb21wYXJldG90YWwgMTIzNDU2NzgwMDAgMSAtPiAxCitjb3R4NzIyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAwIC0+IC0xCitjb3R4NzIzIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwICAxIC0+IDEKK2NvdHg3MjQgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMCAgLT4gLTEKK2NvdHg3MjUgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAgIDEgLT4gMQorY290eDcyNiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwICAtPiAtMQorY290eDcyNyBjb21wYXJldG90YWwgMTIzNDU2Nzg5MSAgMSAtPiAxCitjb3R4NzI4IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTEgIC0+IC0xCitjb3R4NzI5IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwMSAxIC0+IDEKK2NvdHg3MzAgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MDEgLT4gLTEKK2NvdHg3MzEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTYgIDEgLT4gMQorY290eDczMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODk2ICAtPiAtMQorCistLSByZXNpZHVlIGNhc2VzCitwcmVjaXNpb246IDUKK2NvdHg3NDAgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OTkgIC0+IDEKK2NvdHg3NDEgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OSAgIC0+IDEKK2NvdHg3NDIgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5ICAgIC0+IDEKK2NvdHg3NDMgY29tcGFyZXRvdGFsICAxICAxLjAwMDAgICAgIC0+IDEKK2NvdHg3NDQgY29tcGFyZXRvdGFsICAxICAxLjAwMDAxICAgIC0+IC0xCitjb3R4NzQ1IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDEgICAtPiAtMQorY290eDc0NiBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAwMSAgLT4gLTEKK2NvdHg3NTAgY29tcGFyZXRvdGFsICAwLjk5OTk5OTkgIDEgIC0+IC0xCitjb3R4NzUxIGNvbXBhcmV0b3RhbCAgMC45OTk5OTkgICAxICAtPiAtMQorY290eDc1MiBjb21wYXJldG90YWwgIDAuOTk5OTkgICAgMSAgLT4gLTEKK2NvdHg3NTMgY29tcGFyZXRvdGFsICAxLjAwMDAgICAgIDEgIC0+IC0xCitjb3R4NzU0IGNvbXBhcmV0b3RhbCAgMS4wMDAwMSAgICAxICAtPiAxCitjb3R4NzU1IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDEgICAxICAtPiAxCitjb3R4NzU2IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDAxICAxICAtPiAxCisKKy0tIGEgc2VsZWN0aW9uIG9mIGxvbmdpZXMKK2NvdHg3NjAgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtNTgzMDYyOS44MzQ3MDg1MDI1ODA4NzU2NTYwMzU3OTQwIC0+IC0xCitjb3R4NzYxIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAwCitjb3R4NzYyIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAtMQorY290eDc2MyBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorLS0gcHJlY2lzaW9ucyBhYm92ZSBvciBiZWxvdyB0aGUgZGlmZmVyZW5jZSBzaG91bGQgaGF2ZSBubyBlZmZlY3QKK3ByZWNpc2lvbjogICAxMQorY290eDc2NCBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgIDEwCitjb3R4NzY1IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDkKK2NvdHg3NjYgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKK3ByZWNpc2lvbjogICAgOAorY290eDc2NyBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICA3Citjb3R4NzY4IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDYKK2NvdHg3NjkgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKK3ByZWNpc2lvbjogICAgNQorY290eDc3MCBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICA0Citjb3R4NzcxIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCitwcmVjaXNpb246ICAgIDMKK2NvdHg3NzIgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKK3ByZWNpc2lvbjogICAgMgorY290eDc3MyBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQorcHJlY2lzaW9uOiAgICAxCitjb3R4Nzc0IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCisKKy0tIFNwZWNpYWxzCitwcmVjaXNpb246ICAgOQorY290eDc4MCBjb21wYXJldG90YWwgIEluZiAgLUluZiAgIC0+ICAxCitjb3R4NzgxIGNvbXBhcmV0b3RhbCAgSW5mICAtMTAwMCAgLT4gIDEKK2NvdHg3ODIgY29tcGFyZXRvdGFsICBJbmYgIC0xICAgICAtPiAgMQorY290eDc4MyBjb21wYXJldG90YWwgIEluZiAgLTAgICAgIC0+ICAxCitjb3R4Nzg0IGNvbXBhcmV0b3RhbCAgSW5mICAgMCAgICAgLT4gIDEKK2NvdHg3ODUgY29tcGFyZXRvdGFsICBJbmYgICAxICAgICAtPiAgMQorY290eDc4NiBjb21wYXJldG90YWwgIEluZiAgIDEwMDAgIC0+ICAxCitjb3R4Nzg3IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDAKK2NvdHg3ODggY29tcGFyZXRvdGFsIC0xMDAwICBJbmYgICAtPiAtMQorY290eDc4OSBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xCitjb3R4NzkwIGNvbXBhcmV0b3RhbCAtMSAgICAgSW5mICAgLT4gLTEKK2NvdHg3OTEgY29tcGFyZXRvdGFsIC0wICAgICBJbmYgICAtPiAtMQorY290eDc5MiBjb21wYXJldG90YWwgIDAgICAgIEluZiAgIC0+IC0xCitjb3R4NzkzIGNvbXBhcmV0b3RhbCAgMSAgICAgSW5mICAgLT4gLTEKK2NvdHg3OTQgY29tcGFyZXRvdGFsICAxMDAwICBJbmYgICAtPiAtMQorY290eDc5NSBjb21wYXJldG90YWwgIEluZiAgIEluZiAgIC0+ICAwCisKK2NvdHg4MDAgY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMAorY290eDgwMSBjb21wYXJldG90YWwgLUluZiAgLTEwMDAgIC0+IC0xCitjb3R4ODAyIGNvbXBhcmV0b3RhbCAtSW5mICAtMSAgICAgLT4gLTEKK2NvdHg4MDMgY29tcGFyZXRvdGFsIC1JbmYgIC0wICAgICAtPiAtMQorY290eDgwNCBjb21wYXJldG90YWwgLUluZiAgIDAgICAgIC0+IC0xCitjb3R4ODA1IGNvbXBhcmV0b3RhbCAtSW5mICAgMSAgICAgLT4gLTEKK2NvdHg4MDYgY29tcGFyZXRvdGFsIC1JbmYgICAxMDAwICAtPiAtMQorY290eDgwNyBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xCitjb3R4ODA4IGNvbXBhcmV0b3RhbCAtSW5mICAtSW5mICAgLT4gIDAKK2NvdHg4MDkgY29tcGFyZXRvdGFsIC0xMDAwIC1JbmYgICAtPiAgMQorY290eDgxMCBjb21wYXJldG90YWwgLTEgICAgLUluZiAgIC0+ICAxCitjb3R4ODExIGNvbXBhcmV0b3RhbCAtMCAgICAtSW5mICAgLT4gIDEKK2NvdHg4MTIgY29tcGFyZXRvdGFsICAwICAgIC1JbmYgICAtPiAgMQorY290eDgxMyBjb21wYXJldG90YWwgIDEgICAgLUluZiAgIC0+ICAxCitjb3R4ODE0IGNvbXBhcmV0b3RhbCAgMTAwMCAtSW5mICAgLT4gIDEKK2NvdHg4MTUgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQorCitjb3R4ODIxIGNvbXBhcmV0b3RhbCAgTmFOIC1JbmYgICAgLT4gIDEKK2NvdHg4MjIgY29tcGFyZXRvdGFsICBOYU4gLTEwMDAgICAtPiAgMQorY290eDgyMyBjb21wYXJldG90YWwgIE5hTiAtMSAgICAgIC0+ICAxCitjb3R4ODI0IGNvbXBhcmV0b3RhbCAgTmFOIC0wICAgICAgLT4gIDEKK2NvdHg4MjUgY29tcGFyZXRvdGFsICBOYU4gIDAgICAgICAtPiAgMQorY290eDgyNiBjb21wYXJldG90YWwgIE5hTiAgMSAgICAgIC0+ICAxCitjb3R4ODI3IGNvbXBhcmV0b3RhbCAgTmFOICAxMDAwICAgLT4gIDEKK2NvdHg4MjggY29tcGFyZXRvdGFsICBOYU4gIEluZiAgICAtPiAgMQorY290eDgyOSBjb21wYXJldG90YWwgIE5hTiAgTmFOICAgIC0+ICAwCitjb3R4ODMwIGNvbXBhcmV0b3RhbCAtSW5mICBOYU4gICAgLT4gIC0xCitjb3R4ODMxIGNvbXBhcmV0b3RhbCAtMTAwMCBOYU4gICAgLT4gIC0xCitjb3R4ODMyIGNvbXBhcmV0b3RhbCAtMSAgICBOYU4gICAgLT4gIC0xCitjb3R4ODMzIGNvbXBhcmV0b3RhbCAtMCAgICBOYU4gICAgLT4gIC0xCitjb3R4ODM0IGNvbXBhcmV0b3RhbCAgMCAgICBOYU4gICAgLT4gIC0xCitjb3R4ODM1IGNvbXBhcmV0b3RhbCAgMSAgICBOYU4gICAgLT4gIC0xCitjb3R4ODM2IGNvbXBhcmV0b3RhbCAgMTAwMCBOYU4gICAgLT4gIC0xCitjb3R4ODM3IGNvbXBhcmV0b3RhbCAgSW5mICBOYU4gICAgLT4gIC0xCitjb3R4ODM4IGNvbXBhcmV0b3RhbCAtTmFOIC1OYU4gICAgLT4gIDAKK2NvdHg4MzkgY29tcGFyZXRvdGFsICtOYU4gLU5hTiAgICAtPiAgMQorY290eDg0MCBjb21wYXJldG90YWwgLU5hTiArTmFOICAgIC0+ICAtMQorCitjb3R4ODQxIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgLT4gIDEKK2NvdHg4NDIgY29tcGFyZXRvdGFsICBzTmFOIC1OYU4gICAtPiAgMQorY290eDg0MyBjb21wYXJldG90YWwgIHNOYU4gLUluZiAgIC0+ICAxCitjb3R4ODQ0IGNvbXBhcmV0b3RhbCAgc05hTiAtMTAwMCAgLT4gIDEKK2NvdHg4NDUgY29tcGFyZXRvdGFsICBzTmFOIC0xICAgICAtPiAgMQorY290eDg0NiBjb21wYXJldG90YWwgIHNOYU4gLTAgICAgIC0+ICAxCitjb3R4ODQ3IGNvbXBhcmV0b3RhbCAgc05hTiAgMCAgICAgLT4gIDEKK2NvdHg4NDggY29tcGFyZXRvdGFsICBzTmFOICAxICAgICAtPiAgMQorY290eDg0OSBjb21wYXJldG90YWwgIHNOYU4gIDEwMDAgIC0+ICAxCitjb3R4ODUwIGNvbXBhcmV0b3RhbCAgc05hTiAgTmFOICAgLT4gIC0xCitjb3R4ODUxIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDAKKworY290eDg1MiBjb21wYXJldG90YWwgLXNOYU4gc05hTiAgIC0+ICAtMQorY290eDg1MyBjb21wYXJldG90YWwgLU5hTiAgc05hTiAgIC0+ICAtMQorY290eDg1NCBjb21wYXJldG90YWwgLUluZiAgc05hTiAgIC0+ICAtMQorY290eDg1NSBjb21wYXJldG90YWwgLTEwMDAgc05hTiAgIC0+ICAtMQorY290eDg1NiBjb21wYXJldG90YWwgLTEgICAgc05hTiAgIC0+ICAtMQorY290eDg1NyBjb21wYXJldG90YWwgLTAgICAgc05hTiAgIC0+ICAtMQorY290eDg1OCBjb21wYXJldG90YWwgIDAgICAgc05hTiAgIC0+ICAtMQorY290eDg1OSBjb21wYXJldG90YWwgIDEgICAgc05hTiAgIC0+ICAtMQorY290eDg2MCBjb21wYXJldG90YWwgIDEwMDAgc05hTiAgIC0+ICAtMQorY290eDg2MSBjb21wYXJldG90YWwgIEluZiAgc05hTiAgIC0+ICAtMQorY290eDg2MiBjb21wYXJldG90YWwgIE5hTiAgc05hTiAgIC0+ICAxCitjb3R4ODYzIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDAKKworY290eDg3MSBjb21wYXJldG90YWwgIC1zTmFOIC1zTmFOICAtPiAgMAorY290eDg3MiBjb21wYXJldG90YWwgIC1zTmFOIC1OYU4gICAtPiAgMQorY290eDg3MyBjb21wYXJldG90YWwgIC1zTmFOIC1JbmYgICAtPiAgLTEKK2NvdHg4NzQgY29tcGFyZXRvdGFsICAtc05hTiAtMTAwMCAgLT4gIC0xCitjb3R4ODc1IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEgICAgIC0+ICAtMQorY290eDg3NiBjb21wYXJldG90YWwgIC1zTmFOIC0wICAgICAtPiAgLTEKK2NvdHg4NzcgY29tcGFyZXRvdGFsICAtc05hTiAgMCAgICAgLT4gIC0xCitjb3R4ODc4IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEgICAgIC0+ICAtMQorY290eDg3OSBjb21wYXJldG90YWwgIC1zTmFOICAxMDAwICAtPiAgLTEKK2NvdHg4ODAgY29tcGFyZXRvdGFsICAtc05hTiAgTmFOICAgLT4gIC0xCitjb3R4ODgxIGNvbXBhcmV0b3RhbCAgLXNOYU4gc05hTiAgIC0+ICAtMQorCitjb3R4ODgyIGNvbXBhcmV0b3RhbCAtc05hTiAtc05hTiAgIC0+ICAwCitjb3R4ODgzIGNvbXBhcmV0b3RhbCAtTmFOICAtc05hTiAgIC0+ICAtMQorY290eDg4NCBjb21wYXJldG90YWwgLUluZiAgLXNOYU4gICAtPiAgMQorY290eDg4NSBjb21wYXJldG90YWwgLTEwMDAgLXNOYU4gICAtPiAgMQorY290eDg4NiBjb21wYXJldG90YWwgLTEgICAgLXNOYU4gICAtPiAgMQorY290eDg4NyBjb21wYXJldG90YWwgLTAgICAgLXNOYU4gICAtPiAgMQorY290eDg4OCBjb21wYXJldG90YWwgIDAgICAgLXNOYU4gICAtPiAgMQorY290eDg4OSBjb21wYXJldG90YWwgIDEgICAgLXNOYU4gICAtPiAgMQorY290eDg5MCBjb21wYXJldG90YWwgIDEwMDAgLXNOYU4gICAtPiAgMQorY290eDg5MSBjb21wYXJldG90YWwgIEluZiAgLXNOYU4gICAtPiAgMQorY290eDg5MiBjb21wYXJldG90YWwgIE5hTiAgLXNOYU4gICAtPiAgMQorY290eDg5MyBjb21wYXJldG90YWwgIHNOYU4gLXNOYU4gICAtPiAgMQorCistLSBOYU5zIHdpdGggcGF5bG9hZAorY290eDk2MCBjb21wYXJldG90YWwgIE5hTjkgLUluZiAgIC0+ICAxCitjb3R4OTYxIGNvbXBhcmV0b3RhbCAgTmFOOCAgOTk5ICAgLT4gIDEKK2NvdHg5NjIgY29tcGFyZXRvdGFsICBOYU43NyBJbmYgICAtPiAgMQorY290eDk2MyBjb21wYXJldG90YWwgLU5hTjY3IE5hTjUgIC0+ICAtMQorY290eDk2NCBjb21wYXJldG90YWwgLUluZiAgLU5hTjQgIC0+ICAxCitjb3R4OTY1IGNvbXBhcmV0b3RhbCAtOTk5ICAtTmFOMzMgLT4gIDEKK2NvdHg5NjYgY29tcGFyZXRvdGFsICBJbmYgICBOYU4yICAtPiAgLTEKKworY290eDk3MCBjb21wYXJldG90YWwgLU5hTjQxIC1OYU40MiAtPiAxCitjb3R4OTcxIGNvbXBhcmV0b3RhbCArTmFONDEgLU5hTjQyIC0+IDEKK2NvdHg5NzIgY29tcGFyZXRvdGFsIC1OYU40MSArTmFONDIgLT4gLTEKK2NvdHg5NzMgY29tcGFyZXRvdGFsICtOYU40MSArTmFONDIgLT4gLTEKK2NvdHg5NzQgY29tcGFyZXRvdGFsIC1OYU40MiAtTmFOMDEgLT4gLTEKK2NvdHg5NzUgY29tcGFyZXRvdGFsICtOYU40MiAtTmFOMDEgLT4gIDEKK2NvdHg5NzYgY29tcGFyZXRvdGFsIC1OYU40MiArTmFOMDEgLT4gLTEKK2NvdHg5NzcgY29tcGFyZXRvdGFsICtOYU40MiArTmFOMDEgLT4gIDEKKworY290eDk4MCBjb21wYXJldG90YWwgLXNOYU43NzEgLXNOYU43NzIgLT4gMQorY290eDk4MSBjb21wYXJldG90YWwgK3NOYU43NzEgLXNOYU43NzIgLT4gMQorY290eDk4MiBjb21wYXJldG90YWwgLXNOYU43NzEgK3NOYU43NzIgLT4gLTEKK2NvdHg5ODMgY29tcGFyZXRvdGFsICtzTmFONzcxICtzTmFONzcyIC0+IC0xCitjb3R4OTg0IGNvbXBhcmV0b3RhbCAtc05hTjc3MiAtc05hTjc3MSAtPiAtMQorY290eDk4NSBjb21wYXJldG90YWwgK3NOYU43NzIgLXNOYU43NzEgLT4gIDEKK2NvdHg5ODYgY29tcGFyZXRvdGFsIC1zTmFONzcyICtzTmFONzcxIC0+IC0xCitjb3R4OTg3IGNvbXBhcmV0b3RhbCArc05hTjc3MiArc05hTjc3MSAtPiAgMQorCitjb3R4OTkxIGNvbXBhcmV0b3RhbCAtc05hTjk5IC1JbmYgICAgLT4gLTEKK2NvdHg5OTIgY29tcGFyZXRvdGFsICBzTmFOOTggLTExICAgICAtPiAgMQorY290eDk5MyBjb21wYXJldG90YWwgIHNOYU45NyAgTmFOICAgIC0+IC0xCitjb3R4OTk0IGNvbXBhcmV0b3RhbCAgc05hTjE2IHNOYU45NCAgLT4gLTEKK2NvdHg5OTUgY29tcGFyZXRvdGFsICBOYU44NSAgc05hTjgzICAtPiAgMQorY290eDk5NiBjb21wYXJldG90YWwgLUluZiAgICBzTmFOOTIgIC0+IC0xCitjb3R4OTk3IGNvbXBhcmV0b3RhbCAgMDg4ICAgIHNOYU44MSAgLT4gLTEKK2NvdHg5OTggY29tcGFyZXRvdGFsICBJbmYgICAgc05hTjkwICAtPiAtMQorY290eDk5OSBjb21wYXJldG90YWwgIE5hTiAgIC1zTmFOODkgIC0+ICAxCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gc3Vibm9ybWFsIHJlc3VsdHMgbm93IGFsbG93ZWQKK21heEV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5Citjb3R4MTA4MCBjb21wYXJldG90YWwgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+IC0xCitjb3R4MTA4MSBjb21wYXJldG90YWwgOUUrOTk5OTk5OTk5ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitjb3R4MTA4MiBjb21wYXJldG90YWwgKzAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+ICAxCitjb3R4MTA4MyBjb21wYXJldG90YWwgOUUtOTk5OTk5OTk5ICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xCitjb3R4MTA4NSBjb21wYXJldG90YWwgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+IC0xCitjb3R4MTA4NiBjb21wYXJldG90YWwgOUUrOTk5OTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitjb3R4MTA4NyBjb21wYXJldG90YWwgLTAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+IC0xCitjb3R4MTA4OCBjb21wYXJldG90YWwgOUUtOTk5OTk5OTk5IC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAxCisKK2NvdHgxMDg5IGNvbXBhcmV0b3RhbCAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAxICAgLT4gLTEKK2NvdHgxMDkwIGNvbXBhcmV0b3RhbCAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAwICAgLT4gLTEKK2NvdHgxMDkxIGNvbXBhcmV0b3RhbCAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDAwICAgLT4gLTEKK2NvdHgxMDkyIGNvbXBhcmV0b3RhbCA5ZS05OTk5OTk5OTggMC4wMSAgICAgICAgICAgLT4gLTEKK2NvdHgxMDkzIGNvbXBhcmV0b3RhbCA5ZS05OTk5OTk5OTggMC4xICAgICAgICAgICAgLT4gLTEKK2NvdHgxMDk0IGNvbXBhcmV0b3RhbCAwLjAxIDllLTk5OTk5OTk5OCAgICAgICAgICAgLT4gIDEKK2NvdHgxMDk1IGNvbXBhcmV0b3RhbCAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMSAgICAgLT4gIDEKK2NvdHgxMDk2IGNvbXBhcmV0b3RhbCAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMCAgICAgLT4gIDEKK2NvdHgxMDk3IGNvbXBhcmV0b3RhbCAxZTYwMDAwMDAwMCAxZTQwMDAwMDAwMCAgICAgLT4gIDEKK2NvdHgxMDk4IGNvbXBhcmV0b3RhbCA5ZTk5OTk5OTk5OCAxMDAgICAgICAgICAgICAgLT4gIDEKK2NvdHgxMDk5IGNvbXBhcmV0b3RhbCA5ZTk5OTk5OTk5OCAxMCAgICAgICAgICAgICAgLT4gIDEKK2NvdHgxMTAwIGNvbXBhcmV0b3RhbCAxMDAgIDllOTk5OTk5OTk4ICAgICAgICAgICAgLT4gLTEKKy0tIHNpZ25zCitjb3R4MTEwMSBjb21wYXJldG90YWwgIDFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+ICAxCitjb3R4MTEwMiBjb21wYXJldG90YWwgIDFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+ICAxCitjb3R4MTEwMyBjb21wYXJldG90YWwgLTFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+IC0xCitjb3R4MTEwNCBjb21wYXJldG90YWwgLTFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC0xCitjb3R4MTEwNSBjb21wYXJldG90YWwgIDFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+IC0xCitjb3R4MTEwNiBjb21wYXJldG90YWwgIDFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+ICAxCitjb3R4MTEwNyBjb21wYXJldG90YWwgLTFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+IC0xCitjb3R4MTEwOCBjb21wYXJldG90YWwgLTFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+ICAxCisKKy0tIHNwcmVhZCB6ZXJvcworY290eDExMTAgY29tcGFyZXRvdGFsICAgMEUtMzgzICAwICAgICAgIC0+IC0xCitjb3R4MTExMSBjb21wYXJldG90YWwgICAwRS0zODMgLTAgICAgICAgLT4gIDEKK2NvdHgxMTEyIGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAgMCAgICAgICAtPiAtMQorY290eDExMTMgY29tcGFyZXRvdGFsICAtMEUtMzgzIC0wICAgICAgIC0+ICAxCitjb3R4MTExNCBjb21wYXJldG90YWwgICAwRS0zODMgIDBFKzM4NCAgLT4gLTEKK2NvdHgxMTE1IGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAtMEUrMzg0ICAtPiAgMQorY290eDExMTYgY29tcGFyZXRvdGFsICAtMEUtMzgzICAwRSszODQgIC0+IC0xCitjb3R4MTExNyBjb21wYXJldG90YWwgIC0wRS0zODMgLTBFKzM4NCAgLT4gIDEKK2NvdHgxMTE4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUrMzg0ICAtPiAtMQorY290eDExMTkgY29tcGFyZXRvdGFsICAgMCAgICAgIC0wRSszODQgIC0+ICAxCitjb3R4MTEyMCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFKzM4NCAgLT4gLTEKK2NvdHgxMTIxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUrMzg0ICAtPiAgMQorCitjb3R4MTEzMCBjb21wYXJldG90YWwgICAwRSszODQgIDAgICAgICAgLT4gIDEKK2NvdHgxMTMxIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAtMCAgICAgICAtPiAgMQorY290eDExMzIgY29tcGFyZXRvdGFsICAtMEUrMzg0ICAwICAgICAgIC0+IC0xCitjb3R4MTEzMyBjb21wYXJldG90YWwgIC0wRSszODQgLTAgICAgICAgLT4gLTEKK2NvdHgxMTM0IGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMEUtMzgzICAtPiAgMQorY290eDExMzUgY29tcGFyZXRvdGFsICAgMEUrMzg0IC0wRS0zODMgIC0+ICAxCitjb3R4MTEzNiBjb21wYXJldG90YWwgIC0wRSszODQgIDBFLTM4MyAgLT4gLTEKK2NvdHgxMTM3IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMEUtMzgzICAtPiAtMQorY290eDExMzggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRS0zODMgIC0+ICAxCitjb3R4MTEzOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFLTM4MyAgLT4gIDEKK2NvdHgxMTQwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUtMzgzICAtPiAtMQorY290eDExNDEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRS0zODMgIC0+IC0xCisKKy0tIE51bGwgdGVzdHMKK2NvdHg5OTkwIGNvbXBhcmV0b3RhbCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2NvdHg5OTkxIGNvbXBhcmV0b3RhbCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29tcGFyZXRvdG1hZy5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb21wYXJldG90bWFnLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkZmRmOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29tcGFyZXRvdG1hZy5kZWNUZXN0CkBAIC0wLDAgKzEsNzkwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGNvbXBhcmV0b3RtYWcuZGVjVGVzdCAtLSBkZWNpbWFsIGNvbXBhcmlzb24sIGFicy4gdG90YWwgb3JkZXJpbmcgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IGl0IGNhbm5vdCBiZSBhc3N1bWVkIHRoYXQgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzCistLSBmb3IgdGhpcyBvcGVyYXRpb24gYWRlcXVhdGVseSwgaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZQorLS0gcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdCBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvCistLSBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4gU2ltaWxhcmx5LCBjb21wYXJldG90YWwKKy0tIHdpbGwgaGF2ZSBzb21lIHJhZGljYWxseSBkaWZmZXJlbnQgcGF0aHMgdGhhbiBjb21wYXJlLgorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKKworLS0gc2FuaXR5IGNoZWNrcworY3RteDAwMSBjb21wYXJldG90bWFnICAtMiAgLTIgICAtPiAgIDAKK2N0bXgwMDIgY29tcGFyZXRvdG1hZyAgLTIgIC0xICAgLT4gICAxCitjdG14MDAzIGNvbXBhcmV0b3RtYWcgIC0yICAgMCAgIC0+ICAgMQorY3RteDAwNCBjb21wYXJldG90bWFnICAtMiAgIDEgICAtPiAgIDEKK2N0bXgwMDUgY29tcGFyZXRvdG1hZyAgLTIgICAyICAgLT4gICAwCitjdG14MDA2IGNvbXBhcmV0b3RtYWcgIC0xICAtMiAgIC0+ICAtMQorY3RteDAwNyBjb21wYXJldG90bWFnICAtMSAgLTEgICAtPiAgIDAKK2N0bXgwMDggY29tcGFyZXRvdG1hZyAgLTEgICAwICAgLT4gICAxCitjdG14MDA5IGNvbXBhcmV0b3RtYWcgIC0xICAgMSAgIC0+ICAgMAorY3RteDAxMCBjb21wYXJldG90bWFnICAtMSAgIDIgICAtPiAgLTEKK2N0bXgwMTEgY29tcGFyZXRvdG1hZyAgIDAgIC0yICAgLT4gIC0xCitjdG14MDEyIGNvbXBhcmV0b3RtYWcgICAwICAtMSAgIC0+ICAtMQorY3RteDAxMyBjb21wYXJldG90bWFnICAgMCAgIDAgICAtPiAgIDAKK2N0bXgwMTQgY29tcGFyZXRvdG1hZyAgIDAgICAxICAgLT4gIC0xCitjdG14MDE1IGNvbXBhcmV0b3RtYWcgICAwICAgMiAgIC0+ICAtMQorY3RteDAxNiBjb21wYXJldG90bWFnICAgMSAgLTIgICAtPiAgLTEKK2N0bXgwMTcgY29tcGFyZXRvdG1hZyAgIDEgIC0xICAgLT4gICAwCitjdG14MDE4IGNvbXBhcmV0b3RtYWcgICAxICAgMCAgIC0+ICAgMQorY3RteDAxOSBjb21wYXJldG90bWFnICAgMSAgIDEgICAtPiAgIDAKK2N0bXgwMjAgY29tcGFyZXRvdG1hZyAgIDEgICAyICAgLT4gIC0xCitjdG14MDIxIGNvbXBhcmV0b3RtYWcgICAyICAtMiAgIC0+ICAgMAorY3RteDAyMiBjb21wYXJldG90bWFnICAgMiAgLTEgICAtPiAgIDEKK2N0bXgwMjMgY29tcGFyZXRvdG1hZyAgIDIgICAwICAgLT4gICAxCitjdG14MDI1IGNvbXBhcmV0b3RtYWcgICAyICAgMSAgIC0+ICAgMQorY3RteDAyNiBjb21wYXJldG90bWFnICAgMiAgIDIgICAtPiAgIDAKKworY3RteDAzMSBjb21wYXJldG90bWFnICAtMjAgIC0yMCAgIC0+ICAgMAorY3RteDAzMiBjb21wYXJldG90bWFnICAtMjAgIC0xMCAgIC0+ICAgMQorY3RteDAzMyBjb21wYXJldG90bWFnICAtMjAgICAwMCAgIC0+ICAgMQorY3RteDAzNCBjb21wYXJldG90bWFnICAtMjAgICAxMCAgIC0+ICAgMQorY3RteDAzNSBjb21wYXJldG90bWFnICAtMjAgICAyMCAgIC0+ICAgMAorY3RteDAzNiBjb21wYXJldG90bWFnICAtMTAgIC0yMCAgIC0+ICAtMQorY3RteDAzNyBjb21wYXJldG90bWFnICAtMTAgIC0xMCAgIC0+ICAgMAorY3RteDAzOCBjb21wYXJldG90bWFnICAtMTAgICAwMCAgIC0+ICAgMQorY3RteDAzOSBjb21wYXJldG90bWFnICAtMTAgICAxMCAgIC0+ICAgMAorY3RteDA0MCBjb21wYXJldG90bWFnICAtMTAgICAyMCAgIC0+ICAtMQorY3RteDA0MSBjb21wYXJldG90bWFnICAgMDAgIC0yMCAgIC0+ICAtMQorY3RteDA0MiBjb21wYXJldG90bWFnICAgMDAgIC0xMCAgIC0+ICAtMQorY3RteDA0MyBjb21wYXJldG90bWFnICAgMDAgICAwMCAgIC0+ICAgMAorY3RteDA0NCBjb21wYXJldG90bWFnICAgMDAgICAxMCAgIC0+ICAtMQorY3RteDA0NSBjb21wYXJldG90bWFnICAgMDAgICAyMCAgIC0+ICAtMQorY3RteDA0NiBjb21wYXJldG90bWFnICAgMTAgIC0yMCAgIC0+ICAtMQorY3RteDA0NyBjb21wYXJldG90bWFnICAgMTAgIC0xMCAgIC0+ICAgMAorY3RteDA0OCBjb21wYXJldG90bWFnICAgMTAgICAwMCAgIC0+ICAgMQorY3RteDA0OSBjb21wYXJldG90bWFnICAgMTAgICAxMCAgIC0+ICAgMAorY3RteDA1MCBjb21wYXJldG90bWFnICAgMTAgICAyMCAgIC0+ICAtMQorY3RteDA1MSBjb21wYXJldG90bWFnICAgMjAgIC0yMCAgIC0+ICAgMAorY3RteDA1MiBjb21wYXJldG90bWFnICAgMjAgIC0xMCAgIC0+ICAgMQorY3RteDA1MyBjb21wYXJldG90bWFnICAgMjAgICAwMCAgIC0+ICAgMQorY3RteDA1NSBjb21wYXJldG90bWFnICAgMjAgICAxMCAgIC0+ICAgMQorY3RteDA1NiBjb21wYXJldG90bWFnICAgMjAgICAyMCAgIC0+ICAgMAorCitjdG14MDYxIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0yLjAgICAtPiAgIDAKK2N0bXgwNjIgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTEuMCAgIC0+ICAgMQorY3RteDA2MyBjb21wYXJldG90bWFnICAtMi4wICAgMC4wICAgLT4gICAxCitjdG14MDY0IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAxLjAgICAtPiAgIDEKK2N0bXgwNjUgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDIuMCAgIC0+ICAgMAorY3RteDA2NiBjb21wYXJldG90bWFnICAtMS4wICAtMi4wICAgLT4gIC0xCitjdG14MDY3IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0xLjAgICAtPiAgIDAKK2N0bXgwNjggY29tcGFyZXRvdG1hZyAgLTEuMCAgIDAuMCAgIC0+ICAgMQorY3RteDA2OSBjb21wYXJldG90bWFnICAtMS4wICAgMS4wICAgLT4gICAwCitjdG14MDcwIGNvbXBhcmV0b3RtYWcgIC0xLjAgICAyLjAgICAtPiAgLTEKK2N0bXgwNzEgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTIuMCAgIC0+ICAtMQorY3RteDA3MiBjb21wYXJldG90bWFnICAgMC4wICAtMS4wICAgLT4gIC0xCitjdG14MDczIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgICAtPiAgIDAKK2N0bXgwNzQgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDEuMCAgIC0+ICAtMQorY3RteDA3NSBjb21wYXJldG90bWFnICAgMC4wICAgMi4wICAgLT4gIC0xCitjdG14MDc2IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0yLjAgICAtPiAgLTEKK2N0bXgwNzcgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTEuMCAgIC0+ICAgMAorY3RteDA3OCBjb21wYXJldG90bWFnICAgMS4wICAgMC4wICAgLT4gICAxCitjdG14MDc5IGNvbXBhcmV0b3RtYWcgICAxLjAgICAxLjAgICAtPiAgIDAKK2N0bXgwODAgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDIuMCAgIC0+ICAtMQorY3RteDA4MSBjb21wYXJldG90bWFnICAgMi4wICAtMi4wICAgLT4gICAwCitjdG14MDgyIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0xLjAgICAtPiAgIDEKK2N0bXgwODMgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDAuMCAgIC0+ICAgMQorY3RteDA4NSBjb21wYXJldG90bWFnICAgMi4wICAgMS4wICAgLT4gICAxCitjdG14MDg2IGNvbXBhcmV0b3RtYWcgICAyLjAgICAyLjAgICAtPiAgIDAKKworLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorY3RteDA5MCBjb21wYXJldG90bWFnICA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgOS45OTk5OTk5OUUrOTk5OTk5OTk5ICAgLT4gICAwCitjdG14MDkxIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgICAtPiAgIDAKK2N0bXgwOTIgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgIC0+ICAgMAorY3RteDA5MyBjb21wYXJldG90bWFnIC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgLT4gICAwCisKKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcworLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbAorY3RteDEwMCBjb21wYXJldG90bWFnICAgNy4wICAgIDcuMCAgICAgLT4gICAwCitjdG14MTAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNyAgICAgICAtPiAgLTEKK2N0bXgxMDIgY29tcGFyZXRvdG1hZyAgIDcgICAgICA3LjAgICAgIC0+ICAgMQorY3RteDEwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIDcuMCAgICAgLT4gICAxCitjdG14MTA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNy4wICAgICAtPiAgIDAKK2N0bXgxMDUgY29tcGFyZXRvdG1hZyAgIDAuN0UrMSA3ICAgICAgIC0+ICAgMAorY3RteDEwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIDcgICAgICAgLT4gIC0xCitjdG14MTA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgN0UrMCAgICAtPiAgLTEKK2N0bXgxMDggY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3MEUtMSAgIC0+ICAgMAorY3RteDEwOSBjb21wYXJldG90bWFnICAgNyAgICAgIDAuN0UrMSAgLT4gICAwCitjdG14MTEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNzBFLTEgICAtPiAgIDEKKworY3RteDEyMCBjb21wYXJldG90bWFnICAgOC4wICAgIDcuMCAgICAgLT4gICAxCitjdG14MTIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNyAgICAgICAtPiAgIDEKK2N0bXgxMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICA3LjAgICAgIC0+ICAgMQorY3RteDEyMyBjb21wYXJldG90bWFnICAgOEUrMCAgIDcuMCAgICAgLT4gICAxCitjdG14MTI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNy4wICAgICAtPiAgIDEKK2N0bXgxMjUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA3ICAgICAgIC0+ICAgMQorY3RteDEyNiBjb21wYXJldG90bWFnICAgODBFLTEgIDcgICAgICAgLT4gICAxCitjdG14MTI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgN0UrMCAgICAtPiAgIDEKK2N0bXgxMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICA3MEUtMSAgIC0+ICAgMQorY3RteDEyOSBjb21wYXJldG90bWFnICAgOCAgICAgIDAuN0UrMSAgIC0+ICAgMQorY3RteDEzMCBjb21wYXJldG90bWFnICAgOCAgICAgIDcwRS0xICAgLT4gICAxCisKK2N0bXgxNDAgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5LjAgICAgIC0+ICAtMQorY3RteDE0MSBjb21wYXJldG90bWFnICAgOC4wICAgIDkgICAgICAgLT4gIC0xCitjdG14MTQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOS4wICAgICAtPiAgLTEKK2N0bXgxNDMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICA5LjAgICAgIC0+ICAtMQorY3RteDE0NCBjb21wYXJldG90bWFnICAgODBFLTEgIDkuMCAgICAgLT4gIC0xCitjdG14MTQ1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgOSAgICAgICAtPiAgLTEKK2N0bXgxNDYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA5ICAgICAgIC0+ICAtMQorY3RteDE0NyBjb21wYXJldG90bWFnICAgOC4wICAgIDlFKzAgICAgLT4gIC0xCitjdG14MTQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOTBFLTEgICAtPiAgLTEKK2N0bXgxNDkgY29tcGFyZXRvdG1hZyAgIDggICAgICAwLjlFKzEgIC0+ICAtMQorY3RteDE1MCBjb21wYXJldG90bWFnICAgOCAgICAgIDkwRS0xICAgLT4gIC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4KK2N0bXgyMDAgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3LjAgICAgIC0+ICAgMAorY3RteDIwMSBjb21wYXJldG90bWFnICAtNy4wICAgIDcgICAgICAgLT4gIC0xCitjdG14MjAyIGNvbXBhcmV0b3RtYWcgIC03ICAgICAgNy4wICAgICAtPiAgIDEKK2N0bXgyMDMgY29tcGFyZXRvdG1hZyAgLTdFKzAgICA3LjAgICAgIC0+ICAgMQorY3RteDIwNCBjb21wYXJldG90bWFnICAtNzBFLTEgIDcuMCAgICAgLT4gICAwCitjdG14MjA1IGNvbXBhcmV0b3RtYWcgIC0wLjdFKzEgNyAgICAgICAtPiAgIDAKK2N0bXgyMDYgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3ICAgICAgIC0+ICAtMQorY3RteDIwNyBjb21wYXJldG90bWFnICAtNy4wICAgIDdFKzAgICAgLT4gIC0xCitjdG14MjA4IGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNzBFLTEgICAtPiAgIDAKK2N0bXgyMDkgY29tcGFyZXRvdG1hZyAgLTcgICAgICAwLjdFKzEgIC0+ICAgMAorY3RteDIxMCBjb21wYXJldG90bWFnICAtNyAgICAgIDcwRS0xICAgLT4gICAxCisKK2N0bXgyMjAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3LjAgICAgIC0+ICAgMQorY3RteDIyMSBjb21wYXJldG90bWFnICAtOC4wICAgIDcgICAgICAgLT4gICAxCitjdG14MjIyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNy4wICAgICAtPiAgIDEKK2N0bXgyMjMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA3LjAgICAgIC0+ICAgMQorY3RteDIyNCBjb21wYXJldG90bWFnICAtODBFLTEgIDcuMCAgICAgLT4gICAxCitjdG14MjI1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgNyAgICAgICAtPiAgIDEKK2N0bXgyMjYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3ICAgICAgIC0+ICAgMQorY3RteDIyNyBjb21wYXJldG90bWFnICAtOC4wICAgIDdFKzAgICAgLT4gICAxCitjdG14MjI4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNzBFLTEgICAtPiAgIDEKK2N0bXgyMjkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjdFKzEgIC0+ICAgMQorY3RteDIzMCBjb21wYXJldG90bWFnICAtOCAgICAgIDcwRS0xICAgLT4gICAxCisKK2N0bXgyNDAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5LjAgICAgIC0+ICAtMQorY3RteDI0MSBjb21wYXJldG90bWFnICAtOC4wICAgIDkgICAgICAgLT4gIC0xCitjdG14MjQyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOS4wICAgICAtPiAgLTEKK2N0bXgyNDMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA5LjAgICAgIC0+ICAtMQorY3RteDI0NCBjb21wYXJldG90bWFnICAtODBFLTEgIDkuMCAgICAgLT4gIC0xCitjdG14MjQ1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgOSAgICAgICAtPiAgLTEKK2N0bXgyNDYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5ICAgICAgIC0+ICAtMQorY3RteDI0NyBjb21wYXJldG90bWFnICAtOC4wICAgIDlFKzAgICAgLT4gIC0xCitjdG14MjQ4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOTBFLTEgICAtPiAgLTEKK2N0bXgyNDkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjlFKzEgIC0+ICAtMQorY3RteDI1MCBjb21wYXJldG90bWFnICAtOCAgICAgIDkwRS0xICAgLT4gIC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4KK2N0bXgzMDAgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNy4wICAgICAtPiAgIDAKK2N0bXgzMDEgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNyAgICAgICAtPiAgLTEKK2N0bXgzMDIgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNy4wICAgICAtPiAgIDEKK2N0bXgzMDMgY29tcGFyZXRvdG1hZyAgIDdFKzAgICAtNy4wICAgICAtPiAgIDEKK2N0bXgzMDQgY29tcGFyZXRvdG1hZyAgIDcwRS0xICAtNy4wICAgICAtPiAgIDAKK2N0bXgzMDUgY29tcGFyZXRvdG1hZyAgIC43RSsxICAtNyAgICAgICAtPiAgIDAKK2N0bXgzMDYgY29tcGFyZXRvdG1hZyAgIDcwRS0xICAtNyAgICAgICAtPiAgLTEKK2N0bXgzMDcgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtN0UrMCAgICAtPiAgLTEKK2N0bXgzMDggY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNzBFLTEgICAtPiAgIDAKK2N0bXgzMDkgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtLjdFKzEgICAtPiAgIDAKK2N0bXgzMTAgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNzBFLTEgICAtPiAgIDEKKworY3RteDMyMCBjb21wYXJldG90bWFnICAgOC4wICAgIC03LjAgICAgIC0+ICAgMQorY3RteDMyMSBjb21wYXJldG90bWFnICAgOC4wICAgIC03ICAgICAgIC0+ICAgMQorY3RteDMyMiBjb21wYXJldG90bWFnICAgOCAgICAgIC03LjAgICAgIC0+ICAgMQorY3RteDMyMyBjb21wYXJldG90bWFnICAgOEUrMCAgIC03LjAgICAgIC0+ICAgMQorY3RteDMyNCBjb21wYXJldG90bWFnICAgODBFLTEgIC03LjAgICAgIC0+ICAgMQorY3RteDMyNSBjb21wYXJldG90bWFnICAgLjhFKzEgIC03ICAgICAgIC0+ICAgMQorY3RteDMyNiBjb21wYXJldG90bWFnICAgODBFLTEgIC03ICAgICAgIC0+ICAgMQorY3RteDMyNyBjb21wYXJldG90bWFnICAgOC4wICAgIC03RSswICAgIC0+ICAgMQorY3RteDMyOCBjb21wYXJldG90bWFnICAgOC4wICAgIC03MEUtMSAgIC0+ICAgMQorY3RteDMyOSBjb21wYXJldG90bWFnICAgOCAgICAgIC0uN0UrMSAgIC0+ICAgMQorY3RteDMzMCBjb21wYXJldG90bWFnICAgOCAgICAgIC03MEUtMSAgIC0+ICAgMQorCitjdG14MzQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkuMCAgICAgLT4gIC0xCitjdG14MzQxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkgICAgICAgLT4gIC0xCitjdG14MzQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkuMCAgICAgLT4gIC0xCitjdG14MzQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTkuMCAgICAgLT4gIC0xCitjdG14MzQ0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTkuMCAgICAgLT4gIC0xCitjdG14MzQ1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTkgICAgICAgLT4gIC0xCitjdG14MzQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTkgICAgICAgLT4gIC0xCitjdG14MzQ3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTlFKzAgICAgLT4gIC0xCitjdG14MzQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkwRS0xICAgLT4gIC0xCitjdG14MzQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS45RSsxICAgLT4gIC0xCitjdG14MzUwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkwRS0xICAgLT4gIC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4KK2N0bXg0MDAgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcuMCAgICAgLT4gICAwCitjdG14NDAxIGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03ICAgICAgIC0+ICAtMQorY3RteDQwMiBjb21wYXJldG90bWFnICAgLTcgICAgICAtNy4wICAgICAtPiAgIDEKK2N0bXg0MDMgY29tcGFyZXRvdG1hZyAgIC03RSswICAgLTcuMCAgICAgLT4gICAxCitjdG14NDA0IGNvbXBhcmV0b3RtYWcgICAtNzBFLTEgIC03LjAgICAgIC0+ICAgMAorY3RteDQwNSBjb21wYXJldG90bWFnICAgLS43RSsxICAtNyAgICAgICAtPiAgIDAKK2N0bXg0MDYgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcgICAgICAgLT4gIC0xCitjdG14NDA3IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03RSswICAgIC0+ICAtMQorY3RteDQwOCBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNzBFLTEgICAtPiAgIDAKK2N0bXg0MDkgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLS43RSsxICAgLT4gICAwCitjdG14NDEwIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03MEUtMSAgIC0+ICAgMQorCitjdG14NDIwIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03LjAgICAgIC0+ICAgMQorY3RteDQyMSBjb21wYXJldG90bWFnICAgLTguMCAgICAtNyAgICAgICAtPiAgIDEKK2N0bXg0MjIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcuMCAgICAgLT4gICAxCitjdG14NDIzIGNvbXBhcmV0b3RtYWcgICAtOEUrMCAgIC03LjAgICAgIC0+ICAgMQorY3RteDQyNCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtNy4wICAgICAtPiAgIDEKK2N0bXg0MjUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTcgICAgICAgLT4gICAxCitjdG14NDI2IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC03ICAgICAgIC0+ICAgMQorY3RteDQyNyBjb21wYXJldG90bWFnICAgLTguMCAgICAtN0UrMCAgICAtPiAgIDEKK2N0bXg0MjggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcwRS0xICAgLT4gICAxCitjdG14NDI5IGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC0uN0UrMSAgIC0+ICAgMQorY3RteDQzMCBjb21wYXJldG90bWFnICAgLTggICAgICAtNzBFLTEgICAtPiAgIDEKKworY3RteDQ0MCBjb21wYXJldG90bWFnICAgLTguMCAgICAtOS4wICAgICAtPiAgLTEKK2N0bXg0NDEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkgICAgICAgLT4gIC0xCitjdG14NDQyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC05LjAgICAgIC0+ICAtMQorY3RteDQ0MyBjb21wYXJldG90bWFnICAgLThFKzAgICAtOS4wICAgICAtPiAgLTEKK2N0bXg0NDQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkuMCAgICAgLT4gIC0xCitjdG14NDQ1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC05ICAgICAgIC0+ICAtMQorY3RteDQ0NiBjb21wYXJldG90bWFnICAgLTgwRS0xICAtOSAgICAgICAtPiAgLTEKK2N0bXg0NDcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTlFKzAgICAgLT4gIC0xCitjdG14NDQ4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05MEUtMSAgIC0+ICAtMQorY3RteDQ0OSBjb21wYXJldG90bWFnICAgLTggICAgICAtLjlFKzEgICAtPiAgLTEKK2N0bXg0NTAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkwRS0xICAgLT4gIC0xCisKKworLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCitwcmVjaXNpb246IDQwCitjdG14NDcwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTEKK2N0bXg0NzEgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCitjdG14NDcyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAgLT4gIC0xCitjdG14NDczIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2N0bXg0NzQgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAgLT4gIC0xCitjdG14NDc1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCitjdG14NDc2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTEKK2N0bXg0NzcgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCitjdG14NDc4IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwRTc4OSAxMjMuNDU2RTc4OSAgLT4gIC0xCitjdG14NDc5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2N0bXg0ODAgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwRTc4OSAxMjMuNDU2RTc4OSAgLT4gIC0xCitjdG14NDgxIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCitjdG14NDgyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTEKK2N0bXg0ODMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAgLT4gICAwCitjdG14NDg0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMDAwMDBFLTg5ICAtPiAgIDEKK2N0bXg0ODUgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDAwMDAwRTc4OSAgLT4gICAxCitjdG14NDg2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMDAwRS04OSAgLT4gICAxCitjdG14NDg3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwMDBFNzg5ICAtPiAgIDEKK2N0bXg0ODggY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAgLT4gICAxCitjdG14NDg5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwRTc4OSAgLT4gICAxCitjdG14NDkwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5ICAtPiAgIDEKK2N0bXg0OTEgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwRTc4OSAgLT4gICAxCitjdG14NDkyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAgLT4gICAxCitjdG14NDkzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDBFNzg5ICAtPiAgIDEKK2N0bXg0OTQgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAgLT4gICAxCitjdG14NDk1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwRTc4OSAgLT4gICAxCitjdG14NDk2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5ICAtPiAgIDEKK2N0bXg0OTcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2RTc4OSAgLT4gICAwCisKKy0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwKK3ByZWNpc2lvbjogOQorY3RteDUwMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE1ICAgICAtPiAgIDEKK2N0bXg1MDEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNCAgICAgLT4gICAxCitjdG14NTAyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTMgICAgIC0+ICAgMQorY3RteDUwMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEyICAgICAtPiAgIDEKK2N0bXg1MDQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMSAgICAgLT4gICAxCitjdG14NTA1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTAgICAgIC0+ICAgMQorY3RteDUwNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTkgICAgICAtPiAgIDEKK2N0bXg1MDcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS04ICAgICAgLT4gICAxCitjdG14NTA4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNyAgICAgIC0+ICAgMQorY3RteDUwOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTYgICAgICAtPiAgIDEKK2N0bXg1MTAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS01ICAgICAgLT4gICAxCitjdG14NTExIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNCAgICAgIC0+ICAgMQorY3RteDUxMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTMgICAgICAtPiAgIDEKK2N0bXg1MTMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0yICAgICAgLT4gICAxCitjdG14NTE0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMSAgICAgIC0+ICAgMQorY3RteDUxNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTAgICAgICAtPiAgIDAKK2N0bXg1MTYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxICAgICAgLT4gIC0xCitjdG14NTE3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMiAgICAgIC0+ICAtMQorY3RteDUxOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzMgICAgICAtPiAgLTEKK2N0bXg1MTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs0ICAgICAgLT4gIC0xCitjdG14NTIxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNSAgICAgIC0+ICAtMQorY3RteDUyMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzYgICAgICAtPiAgLTEKK2N0bXg1MjMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs3ICAgICAgLT4gIC0xCitjdG14NTI0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrOCAgICAgIC0+ICAtMQorY3RteDUyNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzkgICAgICAtPiAgLTEKK2N0bXg1MjYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMCAgICAgLT4gIC0xCitjdG14NTI3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTEgICAgIC0+ICAtMQorY3RteDUyOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEyICAgICAtPiAgLTEKK2N0bXg1MjkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMyAgICAgLT4gIC0xCitjdG14NTMwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTQgICAgIC0+ICAtMQorY3RteDUzMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE1ICAgICAtPiAgLTEKKy0tIExSIHN3YXAKK2N0bXg1NDAgY29tcGFyZXRvdG1hZyAgICAxRS0xNSAgMSAgICAgICAgLT4gIC0xCitjdG14NTQxIGNvbXBhcmV0b3RtYWcgICAgMUUtMTQgIDEgICAgICAgIC0+ICAtMQorY3RteDU0MiBjb21wYXJldG90bWFnICAgIDFFLTEzICAxICAgICAgICAtPiAgLTEKK2N0bXg1NDMgY29tcGFyZXRvdG1hZyAgICAxRS0xMiAgMSAgICAgICAgLT4gIC0xCitjdG14NTQ0IGNvbXBhcmV0b3RtYWcgICAgMUUtMTEgIDEgICAgICAgIC0+ICAtMQorY3RteDU0NSBjb21wYXJldG90bWFnICAgIDFFLTEwICAxICAgICAgICAtPiAgLTEKK2N0bXg1NDYgY29tcGFyZXRvdG1hZyAgICAxRS05ICAgMSAgICAgICAgLT4gIC0xCitjdG14NTQ3IGNvbXBhcmV0b3RtYWcgICAgMUUtOCAgIDEgICAgICAgIC0+ICAtMQorY3RteDU0OCBjb21wYXJldG90bWFnICAgIDFFLTcgICAxICAgICAgICAtPiAgLTEKK2N0bXg1NDkgY29tcGFyZXRvdG1hZyAgICAxRS02ICAgMSAgICAgICAgLT4gIC0xCitjdG14NTUwIGNvbXBhcmV0b3RtYWcgICAgMUUtNSAgIDEgICAgICAgIC0+ICAtMQorY3RteDU1MSBjb21wYXJldG90bWFnICAgIDFFLTQgICAxICAgICAgICAtPiAgLTEKK2N0bXg1NTIgY29tcGFyZXRvdG1hZyAgICAxRS0zICAgMSAgICAgICAgLT4gIC0xCitjdG14NTUzIGNvbXBhcmV0b3RtYWcgICAgMUUtMiAgIDEgICAgICAgIC0+ICAtMQorY3RteDU1NCBjb21wYXJldG90bWFnICAgIDFFLTEgICAxICAgICAgICAtPiAgLTEKK2N0bXg1NTUgY29tcGFyZXRvdG1hZyAgICAxRS0wICAgMSAgICAgICAgLT4gICAwCitjdG14NTU2IGNvbXBhcmV0b3RtYWcgICAgMUUrMSAgIDEgICAgICAgIC0+ICAgMQorY3RteDU1NyBjb21wYXJldG90bWFnICAgIDFFKzIgICAxICAgICAgICAtPiAgIDEKK2N0bXg1NTggY29tcGFyZXRvdG1hZyAgICAxRSszICAgMSAgICAgICAgLT4gICAxCitjdG14NTU5IGNvbXBhcmV0b3RtYWcgICAgMUUrNCAgIDEgICAgICAgIC0+ICAgMQorY3RteDU2MSBjb21wYXJldG90bWFnICAgIDFFKzUgICAxICAgICAgICAtPiAgIDEKK2N0bXg1NjIgY29tcGFyZXRvdG1hZyAgICAxRSs2ICAgMSAgICAgICAgLT4gICAxCitjdG14NTYzIGNvbXBhcmV0b3RtYWcgICAgMUUrNyAgIDEgICAgICAgIC0+ICAgMQorY3RteDU2NCBjb21wYXJldG90bWFnICAgIDFFKzggICAxICAgICAgICAtPiAgIDEKK2N0bXg1NjUgY29tcGFyZXRvdG1hZyAgICAxRSs5ICAgMSAgICAgICAgLT4gICAxCitjdG14NTY2IGNvbXBhcmV0b3RtYWcgICAgMUUrMTAgIDEgICAgICAgIC0+ICAgMQorY3RteDU2NyBjb21wYXJldG90bWFnICAgIDFFKzExICAxICAgICAgICAtPiAgIDEKK2N0bXg1NjggY29tcGFyZXRvdG1hZyAgICAxRSsxMiAgMSAgICAgICAgLT4gICAxCitjdG14NTY5IGNvbXBhcmV0b3RtYWcgICAgMUUrMTMgIDEgICAgICAgIC0+ICAgMQorY3RteDU3MCBjb21wYXJldG90bWFnICAgIDFFKzE0ICAxICAgICAgICAtPiAgIDEKK2N0bXg1NzEgY29tcGFyZXRvdG1hZyAgICAxRSsxNSAgMSAgICAgICAgLT4gICAxCistLSBzaW1pbGFyIHdpdGggYW4gdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5CitjdG14NTgwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAgLT4gICAxCitjdG14NTgxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAgLT4gICAxCitjdG14NTgyIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAgLT4gICAxCitjdG14NTgzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAgLT4gICAxCitjdG14NTg0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAgLT4gICAxCitjdG14NTg1IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAgLT4gICAxCitjdG14NTg2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAgLT4gICAxCitjdG14NTg3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAgLT4gICAxCitjdG14NTg4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAgLT4gICAxCitjdG14NTg5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAgLT4gIC0xCitjdG14NTkwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAgLT4gIC0xCitjdG14NTkxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAgLT4gIC0xCitjdG14NTkyIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAgLT4gIC0xCitjdG14NTkzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAgLT4gIC0xCitjdG14NTk0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAgLT4gIC0xCitjdG14NTk1IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAgLT4gIC0xCitjdG14NTk2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAgLT4gIC0xCitjdG14NTk3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAgLT4gIC0xCitjdG14NTk4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAgLT4gIC0xCitjdG14NTk5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAgLT4gIC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitwcmVjaXNpb246IDIwCitjdG14NjAwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQorY3RteDYwMSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MDIgY29tcGFyZXRvdG1hZyAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitjdG14NjAzIGNvbXBhcmV0b3RtYWcgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQorY3RteDYwNCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MDUgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAgLT4gIC0xCitjdG14NjA2IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgIC0+ICAtMQorY3RteDYwNyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MDggY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAgLT4gIC0xCitjdG14NjA5IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgIC0+ICAtMQorY3RteDYxMCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMiAgICAgICAgICAgICAtPiAgIDEKK2N0bXg2MTEgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAgLT4gICAxCitjdG14NjEyIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwICAgICAgICAgIC0+ICAgMQorY3RteDYxMyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgICAtPiAgIDEKK2N0bXg2MTQgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAgLT4gICAxCitjdG14NjE1IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgIC0+ICAgMQorY3RteDYxNiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgICAtPiAgIDEKK2N0bXg2MTcgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAgLT4gICAxCitjdG14NjE4IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgIC0+ICAgMQorY3RteDYxOSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgICAtPiAgIDEKK2N0bXg2MjAgY29tcGFyZXRvdG1hZyAgLTEyICAgICAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitjdG14NjIxIGNvbXBhcmV0b3RtYWcgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorY3RteDYyMiBjb21wYXJldG90bWFnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MjMgY29tcGFyZXRvdG1hZyAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitjdG14NjI0IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgIC0+ICAtMQorY3RteDYyNSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MjYgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAgLT4gIC0xCitjdG14NjI3IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgIC0+ICAtMQorY3RteDYyOCBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1ICAtPiAgLTEKK2N0bXg2MjkgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAgLT4gIC0xCitjdG14NjMwIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgIC0+ICAgMQorY3RteDYzMSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgICAtPiAgIDEKK2N0bXg2MzIgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAgLT4gICAxCitjdG14NjMzIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgIC0+ICAgMQorY3RteDYzNCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgICAtPiAgIDEKK2N0bXg2MzUgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAgLT4gICAxCitjdG14NjM2IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgIC0+ICAgMQorY3RteDYzNyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgICAtPiAgIDEKK2N0bXg2MzggY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAgLT4gICAxCitjdG14NjM5IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgIC0+ICAgMQorcHJlY2lzaW9uOiA5CisKKy0tIGV4dGVuZGVkIHplcm9zCitjdG14NjQwIGNvbXBhcmV0b3RtYWcgICAwICAgICAwICAgIC0+ICAgMAorY3RteDY0MSBjb21wYXJldG90bWFnICAgMCAgICAtMCAgICAtPiAgIDAKK2N0bXg2NDIgY29tcGFyZXRvdG1hZyAgIDAgICAgLTAuMCAgLT4gICAxCitjdG14NjQzIGNvbXBhcmV0b3RtYWcgICAwICAgICAwLjAgIC0+ICAgMQorY3RteDY0NCBjb21wYXJldG90bWFnICAtMCAgICAgMCAgICAtPiAgIDAKK2N0bXg2NDUgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAgICAgLT4gICAwCitjdG14NjQ2IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wLjAgIC0+ICAgMQorY3RteDY0NyBjb21wYXJldG90bWFnICAtMCAgICAgMC4wICAtPiAgIDEKK2N0bXg2NDggY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAgICAgLT4gIC0xCitjdG14NjQ5IGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wICAgIC0+ICAtMQorY3RteDY1MCBjb21wYXJldG90bWFnICAgMC4wICAtMC4wICAtPiAgIDAKK2N0bXg2NTEgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgLT4gICAwCitjdG14NjUyIGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwICAgIC0+ICAtMQorY3RteDY1MyBjb21wYXJldG90bWFnICAtMC4wICAtMCAgICAtPiAgLTEKK2N0bXg2NTQgY29tcGFyZXRvdG1hZyAgLTAuMCAgLTAuMCAgLT4gICAwCitjdG14NjU1IGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwLjAgIC0+ICAgMAorCitjdG14NjU2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwLjAgIC0+ICAgMQorY3RteDY1NyBjb21wYXJldG90bWFnICAtMEUyICAgMC4wICAtPiAgIDEKK2N0bXg2NTggY29tcGFyZXRvdG1hZyAgIDBFMSAgIDAuMCAgLT4gICAxCitjdG14NjU5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwLjAgIC0+ICAgMQorY3RteDY2MCBjb21wYXJldG90bWFnICAtMEUxICAgMCAgICAtPiAgIDEKK2N0bXg2NjEgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDAgICAgLT4gICAxCitjdG14NjYyIGNvbXBhcmV0b3RtYWcgICAwRTEgICAwICAgIC0+ICAgMQorY3RteDY2MyBjb21wYXJldG90bWFnICAgMEUyICAgMCAgICAtPiAgIDEKK2N0bXg2NjQgY29tcGFyZXRvdG1hZyAgLTBFMSAgLTBFMSAgLT4gICAwCitjdG14NjY1IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTEgIC0+ICAgMQorY3RteDY2NiBjb21wYXJldG90bWFnICAgMEUxICAtMEUxICAtPiAgIDAKK2N0bXg2NjcgY29tcGFyZXRvdG1hZyAgIDBFMiAgLTBFMSAgLT4gICAxCitjdG14NjY4IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTIgIC0+ICAtMQorY3RteDY2OSBjb21wYXJldG90bWFnICAtMEUyICAtMEUyICAtPiAgIDAKK2N0bXg2NzAgY29tcGFyZXRvdG1hZyAgIDBFMSAgLTBFMiAgLT4gIC0xCitjdG14NjcxIGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTIgIC0+ICAgMAorY3RteDY3MiBjb21wYXJldG90bWFnICAtMEUxICAgMEUxICAtPiAgIDAKK2N0bXg2NzMgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDBFMSAgLT4gICAxCitjdG14Njc0IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTEgIC0+ICAgMAorY3RteDY3NSBjb21wYXJldG90bWFnICAgMEUyICAgMEUxICAtPiAgIDEKK2N0bXg2NzYgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDBFMiAgLT4gIC0xCitjdG14Njc3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTIgIC0+ICAgMAorY3RteDY3OCBjb21wYXJldG90bWFnICAgMEUxICAgMEUyICAtPiAgLTEKK2N0bXg2NzkgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDBFMiAgLT4gICAwCisKKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKK3ByZWNpc2lvbjogMjAKK2N0bXg2ODAgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyICAgICAgICAgICAgLT4gICAwCitjdG14NjgxIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wICAgICAgICAgIC0+ICAgMQorY3RteDY4MiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAgICAgICAgICAtPiAgIDEKK2N0bXg2ODMgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMCAgICAgICAgLT4gICAxCitjdG14Njg0IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwICAgICAgIC0+ICAgMQorY3RteDY4NSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAgICAgICAtPiAgIDEKK2N0bXg2ODYgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMCAgICAgLT4gICAxCitjdG14Njg3IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwICAgIC0+ICAgMQorY3RteDY4OCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAgICAtPiAgIDEKK2N0bXg2ODkgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAwMCAgLT4gICAxCitjdG14NjkwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAgICAgICAgICAgMTIgIC0+ICAgMAorY3RteDY5MSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAgIDEyICAtPiAgLTEKK2N0bXg2OTIgY29tcGFyZXRvdG1hZyAgIDEyLjAwICAgICAgICAgICAxMiAgLT4gIC0xCitjdG14NjkzIGNvbXBhcmV0b3RtYWcgICAxMi4wMDAgICAgICAgICAgMTIgIC0+ICAtMQorY3RteDY5NCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAgIDEyICAtPiAgLTEKK2N0bXg2OTUgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwICAgICAgICAxMiAgLT4gIC0xCitjdG14Njk2IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAgICAgICAgMTIgIC0+ICAtMQorY3RteDY5NyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAgIDEyICAtPiAgLTEKK2N0bXg2OTggY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwICAgICAxMiAgLT4gIC0xCitjdG14Njk5IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMDAgICAgMTIgIC0+ICAtMQorCistLSBsb25nIG9wZXJhbmQgY2hlY2tzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA5CitjdG14NzAxIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMDAgIDEgIC0+ICAgMQorY3RteDcwMiBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMDAgICAtPiAgLTEKK2N0bXg3MDMgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwICAgMSAgLT4gICAxCitjdG14NzA0IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwICAgIC0+ICAtMQorY3RteDcwNSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAgICAxICAtPiAgIDEKK2N0bXg3MDYgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAgICAgLT4gIC0xCitjdG14NzA3IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MSAgIDEgIC0+ICAgMQorY3RteDcwOCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAgLTEKK2N0bXg3MDkgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwMSAgMSAgLT4gICAxCitjdG14NzEwIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwMSAgIC0+ICAtMQorY3RteDcxMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTYgICAxICAtPiAgIDEKK2N0bXg3MTIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gIC0xCitjdG14NzEzIGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTEgIDEgIC0+ICAgMQorY3RteDcxNCBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAgLTEKK2N0bXg3MTUgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gICAxCitjdG14NzE2IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MDEgIC0+ICAtMQorY3RteDcxNyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODk2ICAxICAtPiAgIDEKK2N0bXg3MTggY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gIC0xCisKK3ByZWNpc2lvbjogMTUKKy0tIHNhbWUgd2l0aCBwbGVudHkgb2YgcHJlY2lzaW9uCitjdG14NzIxIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMDAgMSAgLT4gICAxCitjdG14NzIyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwMCAgLT4gIC0xCitjdG14NzIzIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMCAgMSAgLT4gICAxCitjdG14NzI0IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwICAgLT4gIC0xCitjdG14NzI1IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MCAgMSAgLT4gICAxCitjdG14NzI2IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwICAgLT4gIC0xCitjdG14NzI3IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MSAgMSAgLT4gICAxCitjdG14NzI4IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkxICAgLT4gIC0xCitjdG14NzI5IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MDEgMSAgLT4gICAxCitjdG14NzMwIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwMSAgLT4gIC0xCitjdG14NzMxIGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5NiAgMSAgLT4gICAxCitjdG14NzMyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODk2ICAgLT4gIC0xCisKKy0tIHJlc2lkdWUgY2FzZXMKK3ByZWNpc2lvbjogNQorY3RteDc0MCBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OTkgICAtPiAgIDEKK2N0bXg3NDEgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTkgICAgLT4gICAxCitjdG14NzQyIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTkgICAgIC0+ICAgMQorY3RteDc0MyBjb21wYXJldG90bWFnICAxICAxLjAwMDAgICAgICAtPiAgIDEKK2N0bXg3NDQgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMSAgICAgLT4gIC0xCitjdG14NzQ1IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAxICAgIC0+ICAtMQorY3RteDc0NiBjb21wYXJldG90bWFnICAxICAxLjAwMDAwMDEgICAtPiAgLTEKK2N0bXg3NTAgY29tcGFyZXRvdG1hZyAgMC45OTk5OTk5ICAxICAgLT4gIC0xCitjdG14NzUxIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTk5ICAgMSAgIC0+ICAtMQorY3RteDc1MiBjb21wYXJldG90bWFnICAwLjk5OTk5ICAgIDEgICAtPiAgLTEKK2N0bXg3NTMgY29tcGFyZXRvdG1hZyAgMS4wMDAwICAgICAxICAgLT4gIC0xCitjdG14NzU0IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDEgICAgMSAgIC0+ICAgMQorY3RteDc1NSBjb21wYXJldG90bWFnICAxLjAwMDAwMSAgIDEgICAtPiAgIDEKK2N0bXg3NTYgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDAxICAxICAgLT4gICAxCisKKy0tIGEgc2VsZWN0aW9uIG9mIGxvbmdpZXMKK2N0bXg3NjAgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTU4MzA2MjkuODM0NzA4NTAyNTgwODc1NjU2MDM1Nzk0MCAgLT4gICAxCitjdG14NzYxIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAgMAorY3RteDc2MiBjb21wYXJldG90bWFnIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgIDEKK2N0bXg3NjMgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCistLSBwcmVjaXNpb25zIGFib3ZlIG9yIGJlbG93IHRoZSBkaWZmZXJlbmNlIHNob3VsZCBoYXZlIG5vIGVmZmVjdAorcHJlY2lzaW9uOiAgIDExCitjdG14NzY0IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQorcHJlY2lzaW9uOiAgIDEwCitjdG14NzY1IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQorcHJlY2lzaW9uOiAgICA5CitjdG14NzY2IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQorcHJlY2lzaW9uOiAgICA4CitjdG14NzY3IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQorcHJlY2lzaW9uOiAgICA3CitjdG14NzY4IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQorcHJlY2lzaW9uOiAgICA2CitjdG14NzY5IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQorcHJlY2lzaW9uOiAgICA1CitjdG14NzcwIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQorcHJlY2lzaW9uOiAgICA0CitjdG14NzcxIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQorcHJlY2lzaW9uOiAgICAzCitjdG14NzcyIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQorcHJlY2lzaW9uOiAgICAyCitjdG14NzczIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQorcHJlY2lzaW9uOiAgICAxCitjdG14Nzc0IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQorCistLSBTcGVjaWFscworcHJlY2lzaW9uOiAgIDkKK2N0bXg3ODAgY29tcGFyZXRvdG1hZyAgSW5mICAtSW5mICAgLT4gIDAKK2N0bXg3ODEgY29tcGFyZXRvdG1hZyAgSW5mICAtMTAwMCAgLT4gIDEKK2N0bXg3ODIgY29tcGFyZXRvdG1hZyAgSW5mICAtMSAgICAgLT4gIDEKK2N0bXg3ODMgY29tcGFyZXRvdG1hZyAgSW5mICAtMCAgICAgLT4gIDEKK2N0bXg3ODQgY29tcGFyZXRvdG1hZyAgSW5mICAgMCAgICAgLT4gIDEKK2N0bXg3ODUgY29tcGFyZXRvdG1hZyAgSW5mICAgMSAgICAgLT4gIDEKK2N0bXg3ODYgY29tcGFyZXRvdG1hZyAgSW5mICAgMTAwMCAgLT4gIDEKK2N0bXg3ODcgY29tcGFyZXRvdG1hZyAgSW5mICAgSW5mICAgLT4gIDAKK2N0bXg3ODggY29tcGFyZXRvdG1hZyAtMTAwMCAgSW5mICAgLT4gLTEKK2N0bXg3ODkgY29tcGFyZXRvdG1hZyAtSW5mICAgSW5mICAgLT4gIDAKK2N0bXg3OTAgY29tcGFyZXRvdG1hZyAtMSAgICAgSW5mICAgLT4gLTEKK2N0bXg3OTEgY29tcGFyZXRvdG1hZyAtMCAgICAgSW5mICAgLT4gLTEKK2N0bXg3OTIgY29tcGFyZXRvdG1hZyAgMCAgICAgSW5mICAgLT4gLTEKK2N0bXg3OTMgY29tcGFyZXRvdG1hZyAgMSAgICAgSW5mICAgLT4gLTEKK2N0bXg3OTQgY29tcGFyZXRvdG1hZyAgMTAwMCAgSW5mICAgLT4gLTEKK2N0bXg3OTUgY29tcGFyZXRvdG1hZyAgSW5mICAgSW5mICAgLT4gIDAKKworY3RteDgwMCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMAorY3RteDgwMSBjb21wYXJldG90bWFnIC1JbmYgIC0xMDAwICAtPiAgMQorY3RteDgwMiBjb21wYXJldG90bWFnIC1JbmYgIC0xICAgICAtPiAgMQorY3RteDgwMyBjb21wYXJldG90bWFnIC1JbmYgIC0wICAgICAtPiAgMQorY3RteDgwNCBjb21wYXJldG90bWFnIC1JbmYgICAwICAgICAtPiAgMQorY3RteDgwNSBjb21wYXJldG90bWFnIC1JbmYgICAxICAgICAtPiAgMQorY3RteDgwNiBjb21wYXJldG90bWFnIC1JbmYgICAxMDAwICAtPiAgMQorY3RteDgwNyBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMAorY3RteDgwOCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMAorY3RteDgwOSBjb21wYXJldG90bWFnIC0xMDAwIC1JbmYgICAtPiAtMQorY3RteDgxMCBjb21wYXJldG90bWFnIC0xICAgIC1JbmYgICAtPiAtMQorY3RteDgxMSBjb21wYXJldG90bWFnIC0wICAgIC1JbmYgICAtPiAtMQorY3RteDgxMiBjb21wYXJldG90bWFnICAwICAgIC1JbmYgICAtPiAtMQorY3RteDgxMyBjb21wYXJldG90bWFnICAxICAgIC1JbmYgICAtPiAtMQorY3RteDgxNCBjb21wYXJldG90bWFnICAxMDAwIC1JbmYgICAtPiAtMQorY3RteDgxNSBjb21wYXJldG90bWFnICBJbmYgIC1JbmYgICAtPiAgMAorCitjdG14ODIxIGNvbXBhcmV0b3RtYWcgIE5hTiAtSW5mICAgIC0+ICAxCitjdG14ODIyIGNvbXBhcmV0b3RtYWcgIE5hTiAtMTAwMCAgIC0+ICAxCitjdG14ODIzIGNvbXBhcmV0b3RtYWcgIE5hTiAtMSAgICAgIC0+ICAxCitjdG14ODI0IGNvbXBhcmV0b3RtYWcgIE5hTiAtMCAgICAgIC0+ICAxCitjdG14ODI1IGNvbXBhcmV0b3RtYWcgIE5hTiAgMCAgICAgIC0+ICAxCitjdG14ODI2IGNvbXBhcmV0b3RtYWcgIE5hTiAgMSAgICAgIC0+ICAxCitjdG14ODI3IGNvbXBhcmV0b3RtYWcgIE5hTiAgMTAwMCAgIC0+ICAxCitjdG14ODI4IGNvbXBhcmV0b3RtYWcgIE5hTiAgSW5mICAgIC0+ICAxCitjdG14ODI5IGNvbXBhcmV0b3RtYWcgIE5hTiAgTmFOICAgIC0+ICAwCitjdG14ODMwIGNvbXBhcmV0b3RtYWcgLUluZiAgTmFOICAgIC0+ICAtMQorY3RteDgzMSBjb21wYXJldG90bWFnIC0xMDAwIE5hTiAgICAtPiAgLTEKK2N0bXg4MzIgY29tcGFyZXRvdG1hZyAtMSAgICBOYU4gICAgLT4gIC0xCitjdG14ODMzIGNvbXBhcmV0b3RtYWcgLTAgICAgTmFOICAgIC0+ICAtMQorY3RteDgzNCBjb21wYXJldG90bWFnICAwICAgIE5hTiAgICAtPiAgLTEKK2N0bXg4MzUgY29tcGFyZXRvdG1hZyAgMSAgICBOYU4gICAgLT4gIC0xCitjdG14ODM2IGNvbXBhcmV0b3RtYWcgIDEwMDAgTmFOICAgIC0+ICAtMQorY3RteDgzNyBjb21wYXJldG90bWFnICBJbmYgIE5hTiAgICAtPiAgLTEKK2N0bXg4MzggY29tcGFyZXRvdG1hZyAtTmFOIC1OYU4gICAgLT4gIDAKK2N0bXg4MzkgY29tcGFyZXRvdG1hZyArTmFOIC1OYU4gICAgLT4gIDAKK2N0bXg4NDAgY29tcGFyZXRvdG1hZyAtTmFOICtOYU4gICAgLT4gIDAKKworY3RteDg0MSBjb21wYXJldG90bWFnICBzTmFOIC1zTmFOICAtPiAgMAorY3RteDg0MiBjb21wYXJldG90bWFnICBzTmFOIC1OYU4gICAtPiAgLTEKK2N0bXg4NDMgY29tcGFyZXRvdG1hZyAgc05hTiAtSW5mICAgLT4gIDEKK2N0bXg4NDQgY29tcGFyZXRvdG1hZyAgc05hTiAtMTAwMCAgLT4gIDEKK2N0bXg4NDUgY29tcGFyZXRvdG1hZyAgc05hTiAtMSAgICAgLT4gIDEKK2N0bXg4NDYgY29tcGFyZXRvdG1hZyAgc05hTiAtMCAgICAgLT4gIDEKK2N0bXg4NDcgY29tcGFyZXRvdG1hZyAgc05hTiAgMCAgICAgLT4gIDEKK2N0bXg4NDggY29tcGFyZXRvdG1hZyAgc05hTiAgMSAgICAgLT4gIDEKK2N0bXg4NDkgY29tcGFyZXRvdG1hZyAgc05hTiAgMTAwMCAgLT4gIDEKK2N0bXg4NTAgY29tcGFyZXRvdG1hZyAgc05hTiAgTmFOICAgLT4gIC0xCitjdG14ODUxIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwCisKK2N0bXg4NTIgY29tcGFyZXRvdG1hZyAtc05hTiBzTmFOICAgLT4gIDAKK2N0bXg4NTMgY29tcGFyZXRvdG1hZyAtTmFOICBzTmFOICAgLT4gIDEKK2N0bXg4NTQgY29tcGFyZXRvdG1hZyAtSW5mICBzTmFOICAgLT4gIC0xCitjdG14ODU1IGNvbXBhcmV0b3RtYWcgLTEwMDAgc05hTiAgIC0+ICAtMQorY3RteDg1NiBjb21wYXJldG90bWFnIC0xICAgIHNOYU4gICAtPiAgLTEKK2N0bXg4NTcgY29tcGFyZXRvdG1hZyAtMCAgICBzTmFOICAgLT4gIC0xCitjdG14ODU4IGNvbXBhcmV0b3RtYWcgIDAgICAgc05hTiAgIC0+ICAtMQorY3RteDg1OSBjb21wYXJldG90bWFnICAxICAgIHNOYU4gICAtPiAgLTEKK2N0bXg4NjAgY29tcGFyZXRvdG1hZyAgMTAwMCBzTmFOICAgLT4gIC0xCitjdG14ODYxIGNvbXBhcmV0b3RtYWcgIEluZiAgc05hTiAgIC0+ICAtMQorY3RteDg2MiBjb21wYXJldG90bWFnICBOYU4gIHNOYU4gICAtPiAgMQorY3RteDg2MyBjb21wYXJldG90bWFnICBzTmFOIHNOYU4gICAtPiAgMAorCitjdG14ODcxIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1zTmFOICAtPiAgMAorY3RteDg3MiBjb21wYXJldG90bWFnICAtc05hTiAtTmFOICAgLT4gIC0xCitjdG14ODczIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1JbmYgICAtPiAgMQorY3RteDg3NCBjb21wYXJldG90bWFnICAtc05hTiAtMTAwMCAgLT4gIDEKK2N0bXg4NzUgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEgICAgIC0+ICAxCitjdG14ODc2IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0wICAgICAtPiAgMQorY3RteDg3NyBjb21wYXJldG90bWFnICAtc05hTiAgMCAgICAgLT4gIDEKK2N0bXg4NzggY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEgICAgIC0+ICAxCitjdG14ODc5IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAxMDAwICAtPiAgMQorY3RteDg4MCBjb21wYXJldG90bWFnICAtc05hTiAgTmFOICAgLT4gIC0xCitjdG14ODgxIGNvbXBhcmV0b3RtYWcgIC1zTmFOIHNOYU4gICAtPiAgMAorCitjdG14ODgyIGNvbXBhcmV0b3RtYWcgLXNOYU4gLXNOYU4gICAtPiAgMAorY3RteDg4MyBjb21wYXJldG90bWFnIC1OYU4gIC1zTmFOICAgLT4gIDEKK2N0bXg4ODQgY29tcGFyZXRvdG1hZyAtSW5mICAtc05hTiAgIC0+ICAtMQorY3RteDg4NSBjb21wYXJldG90bWFnIC0xMDAwIC1zTmFOICAgLT4gIC0xCitjdG14ODg2IGNvbXBhcmV0b3RtYWcgLTEgICAgLXNOYU4gICAtPiAgLTEKK2N0bXg4ODcgY29tcGFyZXRvdG1hZyAtMCAgICAtc05hTiAgIC0+ICAtMQorY3RteDg4OCBjb21wYXJldG90bWFnICAwICAgIC1zTmFOICAgLT4gIC0xCitjdG14ODg5IGNvbXBhcmV0b3RtYWcgIDEgICAgLXNOYU4gICAtPiAgLTEKK2N0bXg4OTAgY29tcGFyZXRvdG1hZyAgMTAwMCAtc05hTiAgIC0+ICAtMQorY3RteDg5MSBjb21wYXJldG90bWFnICBJbmYgIC1zTmFOICAgLT4gIC0xCitjdG14ODkyIGNvbXBhcmV0b3RtYWcgIE5hTiAgLXNOYU4gICAtPiAgMQorY3RteDg5MyBjb21wYXJldG90bWFnICBzTmFOIC1zTmFOICAgLT4gIDAKKworLS0gTmFOcyB3aXRoIHBheWxvYWQKK2N0bXg5NjAgY29tcGFyZXRvdG1hZyAgTmFOOSAtSW5mICAgLT4gIDEKK2N0bXg5NjEgY29tcGFyZXRvdG1hZyAgTmFOOCAgOTk5ICAgLT4gIDEKK2N0bXg5NjIgY29tcGFyZXRvdG1hZyAgTmFONzcgSW5mICAgLT4gIDEKK2N0bXg5NjMgY29tcGFyZXRvdG1hZyAtTmFONjcgTmFONSAgLT4gIDEKK2N0bXg5NjQgY29tcGFyZXRvdG1hZyAtSW5mICAtTmFONCAgLT4gIC0xCitjdG14OTY1IGNvbXBhcmV0b3RtYWcgLTk5OSAgLU5hTjMzIC0+ICAtMQorY3RteDk2NiBjb21wYXJldG90bWFnICBJbmYgICBOYU4yICAtPiAgLTEKKworY3RteDk3MCBjb21wYXJldG90bWFnIC1OYU40MSAtTmFONDIgLT4gLTEKK2N0bXg5NzEgY29tcGFyZXRvdG1hZyArTmFONDEgLU5hTjQyIC0+IC0xCitjdG14OTcyIGNvbXBhcmV0b3RtYWcgLU5hTjQxICtOYU40MiAtPiAtMQorY3RteDk3MyBjb21wYXJldG90bWFnICtOYU40MSArTmFONDIgLT4gLTEKK2N0bXg5NzQgY29tcGFyZXRvdG1hZyAtTmFONDIgLU5hTjAxIC0+ICAxCitjdG14OTc1IGNvbXBhcmV0b3RtYWcgK05hTjQyIC1OYU4wMSAtPiAgMQorY3RteDk3NiBjb21wYXJldG90bWFnIC1OYU40MiArTmFOMDEgLT4gIDEKK2N0bXg5NzcgY29tcGFyZXRvdG1hZyArTmFONDIgK05hTjAxIC0+ICAxCisKK2N0bXg5ODAgY29tcGFyZXRvdG1hZyAtc05hTjc3MSAtc05hTjc3MiAtPiAtMQorY3RteDk4MSBjb21wYXJldG90bWFnICtzTmFONzcxIC1zTmFONzcyIC0+IC0xCitjdG14OTgyIGNvbXBhcmV0b3RtYWcgLXNOYU43NzEgK3NOYU43NzIgLT4gLTEKK2N0bXg5ODMgY29tcGFyZXRvdG1hZyArc05hTjc3MSArc05hTjc3MiAtPiAtMQorY3RteDk4NCBjb21wYXJldG90bWFnIC1zTmFONzcyIC1zTmFONzcxIC0+ICAxCitjdG14OTg1IGNvbXBhcmV0b3RtYWcgK3NOYU43NzIgLXNOYU43NzEgLT4gIDEKK2N0bXg5ODYgY29tcGFyZXRvdG1hZyAtc05hTjc3MiArc05hTjc3MSAtPiAgMQorY3RteDk4NyBjb21wYXJldG90bWFnICtzTmFONzcyICtzTmFONzcxIC0+ICAxCisKK2N0bXg5OTEgY29tcGFyZXRvdG1hZyAtc05hTjk5IC1JbmYgICAgLT4gIDEKK2N0bXg5OTIgY29tcGFyZXRvdG1hZyAgc05hTjk4IC0xMSAgICAgLT4gIDEKK2N0bXg5OTMgY29tcGFyZXRvdG1hZyAgc05hTjk3ICBOYU4gICAgLT4gLTEKK2N0bXg5OTQgY29tcGFyZXRvdG1hZyAgc05hTjE2IHNOYU45NCAgLT4gLTEKK2N0bXg5OTUgY29tcGFyZXRvdG1hZyAgTmFOODUgIHNOYU44MyAgLT4gIDEKK2N0bXg5OTYgY29tcGFyZXRvdG1hZyAtSW5mICAgIHNOYU45MiAgLT4gLTEKK2N0bXg5OTcgY29tcGFyZXRvdG1hZyAgMDg4ICAgIHNOYU44MSAgLT4gLTEKK2N0bXg5OTggY29tcGFyZXRvdG1hZyAgSW5mICAgIHNOYU45MCAgLT4gLTEKK2N0bXg5OTkgY29tcGFyZXRvdG1hZyAgTmFOICAgLXNOYU44OSAgLT4gIDEKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBzdWJub3JtYWwgcmVzdWx0cyBub3cgYWxsb3dlZAorbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK2N0bXgxMDgwIGNvbXBhcmV0b3RtYWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5ICAtPiAgLTEKK2N0bXgxMDgxIGNvbXBhcmV0b3RtYWcgOUUrOTk5OTk5OTk5ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wICAtPiAgIDEKK2N0bXgxMDgyIGNvbXBhcmV0b3RtYWcgKzAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgICAtPiAgIDEKK2N0bXgxMDgzIGNvbXBhcmV0b3RtYWcgOUUtOTk5OTk5OTk5ICswLjEwMCAgICAgICAgICAgICAgICAtPiAgLTEKK2N0bXgxMDg1IGNvbXBhcmV0b3RtYWcgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5ICAtPiAgLTEKK2N0bXgxMDg2IGNvbXBhcmV0b3RtYWcgOUUrOTk5OTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wICAtPiAgIDEKK2N0bXgxMDg3IGNvbXBhcmV0b3RtYWcgLTAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgICAtPiAgIDEKK2N0bXgxMDg4IGNvbXBhcmV0b3RtYWcgOUUtOTk5OTk5OTk5IC0wLjEwMCAgICAgICAgICAgICAgICAtPiAgLTEKKworY3RteDEwODkgY29tcGFyZXRvdG1hZyAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAxICAgIC0+ICAtMQorY3RteDEwOTAgY29tcGFyZXRvdG1hZyAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAwICAgIC0+ICAtMQorY3RteDEwOTEgY29tcGFyZXRvdG1hZyAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDAwICAgIC0+ICAtMQorY3RteDEwOTIgY29tcGFyZXRvdG1hZyA5ZS05OTk5OTk5OTggMC4wMSAgICAgICAgICAgIC0+ICAtMQorY3RteDEwOTMgY29tcGFyZXRvdG1hZyA5ZS05OTk5OTk5OTggMC4xICAgICAgICAgICAgIC0+ICAtMQorY3RteDEwOTQgY29tcGFyZXRvdG1hZyAwLjAxIDllLTk5OTk5OTk5OCAgICAgICAgICAgIC0+ICAgMQorY3RteDEwOTUgY29tcGFyZXRvdG1hZyAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMSAgICAgIC0+ICAgMQorY3RteDEwOTYgY29tcGFyZXRvdG1hZyAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMCAgICAgIC0+ICAgMQorY3RteDEwOTcgY29tcGFyZXRvdG1hZyAxZTYwMDAwMDAwMCAxZTQwMDAwMDAwMCAgICAgIC0+ICAgMQorY3RteDEwOTggY29tcGFyZXRvdG1hZyA5ZTk5OTk5OTk5OCAxMDAgICAgICAgICAgICAgIC0+ICAgMQorY3RteDEwOTkgY29tcGFyZXRvdG1hZyA5ZTk5OTk5OTk5OCAxMCAgICAgICAgICAgICAgIC0+ICAgMQorY3RteDExMDAgY29tcGFyZXRvdG1hZyAxMDAgIDllOTk5OTk5OTk4ICAgICAgICAgICAgIC0+ICAtMQorLS0gc2lnbnMKK2N0bXgxMTAxIGNvbXBhcmV0b3RtYWcgIDFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExICAtPiAgIDEKK2N0bXgxMTAyIGNvbXBhcmV0b3RtYWcgIDFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExICAtPiAgIDEKK2N0bXgxMTAzIGNvbXBhcmV0b3RtYWcgLTFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExICAtPiAgIDEKK2N0bXgxMTA0IGNvbXBhcmV0b3RtYWcgLTFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExICAtPiAgIDEKK2N0bXgxMTA1IGNvbXBhcmV0b3RtYWcgIDFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExICAtPiAgLTEKK2N0bXgxMTA2IGNvbXBhcmV0b3RtYWcgIDFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExICAtPiAgLTEKK2N0bXgxMTA3IGNvbXBhcmV0b3RtYWcgLTFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExICAtPiAgLTEKK2N0bXgxMTA4IGNvbXBhcmV0b3RtYWcgLTFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExICAtPiAgLTEKKworLS0gc3ByZWFkIHplcm9zCitjdG14MTExMCBjb21wYXJldG90bWFnICAgMEUtMzgzICAwICAgICAgICAtPiAgLTEKK2N0bXgxMTExIGNvbXBhcmV0b3RtYWcgICAwRS0zODMgLTAgICAgICAgIC0+ICAtMQorY3RteDExMTIgY29tcGFyZXRvdG1hZyAgLTBFLTM4MyAgMCAgICAgICAgLT4gIC0xCitjdG14MTExMyBjb21wYXJldG90bWFnICAtMEUtMzgzIC0wICAgICAgICAtPiAgLTEKK2N0bXgxMTE0IGNvbXBhcmV0b3RtYWcgICAwRS0zODMgIDBFKzM4NCAgIC0+ICAtMQorY3RteDExMTUgY29tcGFyZXRvdG1hZyAgIDBFLTM4MyAtMEUrMzg0ICAgLT4gIC0xCitjdG14MTExNiBjb21wYXJldG90bWFnICAtMEUtMzgzICAwRSszODQgICAtPiAgLTEKK2N0bXgxMTE3IGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgLTBFKzM4NCAgIC0+ICAtMQorY3RteDExMTggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUrMzg0ICAgLT4gIC0xCitjdG14MTExOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRSszODQgICAtPiAgLTEKK2N0bXgxMTIwIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgIDBFKzM4NCAgIC0+ICAtMQorY3RteDExMjEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUrMzg0ICAgLT4gIC0xCisKK2N0bXgxMTMwIGNvbXBhcmV0b3RtYWcgICAwRSszODQgIDAgICAgICAgIC0+ICAgMQorY3RteDExMzEgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAtMCAgICAgICAgLT4gICAxCitjdG14MTEzMiBjb21wYXJldG90bWFnICAtMEUrMzg0ICAwICAgICAgICAtPiAgIDEKK2N0bXgxMTMzIGNvbXBhcmV0b3RtYWcgIC0wRSszODQgLTAgICAgICAgIC0+ICAgMQorY3RteDExMzQgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAgMEUtMzgzICAgLT4gICAxCitjdG14MTEzNSBjb21wYXJldG90bWFnICAgMEUrMzg0IC0wRS0zODMgICAtPiAgIDEKK2N0bXgxMTM2IGNvbXBhcmV0b3RtYWcgIC0wRSszODQgIDBFLTM4MyAgIC0+ICAgMQorY3RteDExMzcgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAtMEUtMzgzICAgLT4gICAxCitjdG14MTEzOCBjb21wYXJldG90bWFnICAgMCAgICAgICAwRS0zODMgICAtPiAgIDEKK2N0bXgxMTM5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFLTM4MyAgIC0+ICAgMQorY3RteDExNDAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUtMzgzICAgLT4gICAxCitjdG14MTE0MSBjb21wYXJldG90bWFnICAtMCAgICAgIC0wRS0zODMgICAtPiAgIDEKKworLS0gTnVsbCB0ZXN0cworY3RteDk5OTAgY29tcGFyZXRvdG1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2N0bXg5OTkxIGNvbXBhcmV0b3RtYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHkuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZjI5OWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHkuZGVjVGVzdApAQCAtMCwwICsxLDg2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGNvcHkuZGVjVGVzdCAtLSBxdWlldCBjb3B5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworLS0gU2FuaXR5IGNoZWNrCitjcHl4MDAxIGNvcHkgICAgICAgKzcuNTAgIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworY3B5eDAxMSBjb3B5ICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQorY3B5eDAxMiBjb3B5ICAtSW5maW5pdHkgICAtPiAtSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitjcHl4MDIxIGNvcHkgICAgICAgICBOYU4gIC0+IE5hTgorY3B5eDAyMiBjb3B5ICAgICAgICAtTmFOICAtPiAtTmFOCitjcHl4MDIzIGNvcHkgICAgICAgIHNOYU4gIC0+IHNOYU4KK2NweXgwMjQgY29weSAgICAgICAtc05hTiAgLT4gLXNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorY3B5eDAzMSBjb3B5ICAgICAgIE5hTjEwICAtPiBOYU4xMAorY3B5eDAzMiBjb3B5ICAgICAgLU5hTjEwICAtPiAtTmFOMTAKK2NweXgwMzMgY29weSAgICAgIHNOYU4xMCAgLT4gc05hTjEwCitjcHl4MDM0IGNvcHkgICAgIC1zTmFOMTAgIC0+IC1zTmFOMTAKK2NweXgwMzUgY29weSAgICAgICBOYU43ICAgLT4gTmFONworY3B5eDAzNiBjb3B5ICAgICAgLU5hTjcgICAtPiAtTmFONworY3B5eDAzNyBjb3B5ICAgICAgc05hTjEwMSAtPiBzTmFOMTAxCitjcHl4MDM4IGNvcHkgICAgIC1zTmFOMTAxIC0+IC1zTmFOMTAxCisKKy0tIGZpbml0ZXMKK2NweXgxMDEgY29weSAgICAgICAgICA3ICAgLT4gNworY3B5eDEwMiBjb3B5ICAgICAgICAgLTcgICAtPiAtNworY3B5eDEwMyBjb3B5ICAgICAgICAgNzUgICAtPiA3NQorY3B5eDEwNCBjb3B5ICAgICAgICAtNzUgICAtPiAtNzUKK2NweXgxMDUgY29weSAgICAgICA3LjUwICAgLT4gNy41MAorY3B5eDEwNiBjb3B5ICAgICAgLTcuNTAgICAtPiAtNy41MAorY3B5eDEwNyBjb3B5ICAgICAgIDcuNTAwICAtPiA3LjUwMAorY3B5eDEwOCBjb3B5ICAgICAgLTcuNTAwICAtPiAtNy41MDAKKworLS0gemVyb3MKK2NweXgxMTEgY29weSAgICAgICAgICAwICAgLT4gMAorY3B5eDExMiBjb3B5ICAgICAgICAgLTAgICAtPiAtMAorY3B5eDExMyBjb3B5ICAgICAgIDBFKzQgICAtPiAwRSs0CitjcHl4MTE0IGNvcHkgICAgICAtMEUrNCAgIC0+IC0wRSs0CitjcHl4MTE1IGNvcHkgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorY3B5eDExNiBjb3B5ICAgIC0wLjAwMDAgICAtPiAtMC4wMDAwCitjcHl4MTE3IGNvcHkgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorY3B5eDExOCBjb3B5ICAgICAtMEUtMTQxICAtPiAtMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitjcHl4MTIxIGNvcHkgICAyNjgyNjgyNjggICAgICAgIC0+IDI2ODI2ODI2OAorY3B5eDEyMiBjb3B5ICAtMjY4MjY4MjY4ICAgICAgICAtPiAtMjY4MjY4MjY4CitjcHl4MTIzIGNvcHkgICAxMzQxMzQxMzQgICAgICAgIC0+IDEzNDEzNDEzNAorY3B5eDEyNCBjb3B5ICAtMTM0MTM0MTM0ICAgICAgICAtPiAtMTM0MTM0MTM0CisKKy0tIE5tYXgsIE5taW4sIE50aW55CitjcHl4MTMxIGNvcHkgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IDkuOTk5OTk5OTlFKzk5OQorY3B5eDEzMiBjb3B5ICAxRS05OTkgICAgICAgICAgICAtPiAxRS05OTkKK2NweXgxMzMgY29weSAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gMS4wMDAwMDAwMEUtOTk5CitjcHl4MTM0IGNvcHkgIDFFLTEwMDcgICAgICAgICAgIC0+IDFFLTEwMDcKKworY3B5eDEzNSBjb3B5ICAtMUUtMTAwNyAgICAgICAgICAtPiAtMUUtMTAwNworY3B5eDEzNiBjb3B5ICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAtMS4wMDAwMDAwMEUtOTk5CitjcHl4MTM3IGNvcHkgIC0xRS05OTkgICAgICAgICAgIC0+IC0xRS05OTkKK2NweXgxMzggY29weSAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gLTkuOTk5OTk5OTlFKzk5OQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5YWJzLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHlhYnMuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjAwMmRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5YWJzLmRlY1Rlc3QKQEAgLTAsMCArMSw4NiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBjb3B5QWJzLmRlY1Rlc3QgLS0gcXVpZXQgY29weSBhbmQgc2V0IHNpZ24gdG8gemVybyAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjaworY3BheDAwMSBjb3B5YWJzICAgICAgICs3LjUwICAtPiA3LjUwCisKKy0tIEluZmluaXRpZXMKK2NwYXgwMTEgY29weWFicyAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkKK2NwYXgwMTIgY29weWFicyAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitjcGF4MDIxIGNvcHlhYnMgICAgICAgICBOYU4gIC0+IE5hTgorY3BheDAyMiBjb3B5YWJzICAgICAgICAtTmFOICAtPiBOYU4KK2NwYXgwMjMgY29weWFicyAgICAgICAgc05hTiAgLT4gc05hTgorY3BheDAyNCBjb3B5YWJzICAgICAgIC1zTmFOICAtPiBzTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2NwYXgwMzEgY29weWFicyAgICAgICBOYU4xMCAgLT4gTmFOMTAKK2NwYXgwMzIgY29weWFicyAgICAgIC1OYU4xNSAgLT4gTmFOMTUKK2NwYXgwMzMgY29weWFicyAgICAgIHNOYU4xNSAgLT4gc05hTjE1CitjcGF4MDM0IGNvcHlhYnMgICAgIC1zTmFOMTAgIC0+IHNOYU4xMAorY3BheDAzNSBjb3B5YWJzICAgICAgIE5hTjcgICAtPiBOYU43CitjcGF4MDM2IGNvcHlhYnMgICAgICAtTmFONyAgIC0+IE5hTjcKK2NwYXgwMzcgY29weWFicyAgICAgIHNOYU4xMDEgLT4gc05hTjEwMQorY3BheDAzOCBjb3B5YWJzICAgICAtc05hTjEwMSAtPiBzTmFOMTAxCisKKy0tIGZpbml0ZXMKK2NwYXgxMDEgY29weWFicyAgICAgICAgICA3ICAgLT4gNworY3BheDEwMiBjb3B5YWJzICAgICAgICAgLTcgICAtPiA3CitjcGF4MTAzIGNvcHlhYnMgICAgICAgICA3NSAgIC0+IDc1CitjcGF4MTA0IGNvcHlhYnMgICAgICAgIC03NSAgIC0+IDc1CitjcGF4MTA1IGNvcHlhYnMgICAgICAgNy4xMCAgIC0+IDcuMTAKK2NwYXgxMDYgY29weWFicyAgICAgIC03LjEwICAgLT4gNy4xMAorY3BheDEwNyBjb3B5YWJzICAgICAgIDcuNTAwICAtPiA3LjUwMAorY3BheDEwOCBjb3B5YWJzICAgICAgLTcuNTAwICAtPiA3LjUwMAorCistLSB6ZXJvcworY3BheDExMSBjb3B5YWJzICAgICAgICAgIDAgICAtPiAwCitjcGF4MTEyIGNvcHlhYnMgICAgICAgICAtMCAgIC0+IDAKK2NwYXgxMTMgY29weWFicyAgICAgICAwRSs2ICAgLT4gMEUrNgorY3BheDExNCBjb3B5YWJzICAgICAgLTBFKzYgICAtPiAwRSs2CitjcGF4MTE1IGNvcHlhYnMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorY3BheDExNiBjb3B5YWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2NwYXgxMTcgY29weWFicyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitjcGF4MTE4IGNvcHlhYnMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworY3BheDEyMSBjb3B5YWJzICAgMjY4MjY4MjY4ICAgICAgICAtPiAyNjgyNjgyNjgKK2NwYXgxMjIgY29weWFicyAgLTI2ODI2ODI2OCAgICAgICAgLT4gMjY4MjY4MjY4CitjcGF4MTIzIGNvcHlhYnMgICAxMzQxMzQxMzQgICAgICAgIC0+IDEzNDEzNDEzNAorY3BheDEyNCBjb3B5YWJzICAtMTM0MTM0MTM0ICAgICAgICAtPiAxMzQxMzQxMzQKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2NwYXgxMzEgY29weWFicyAgOS45OTk5OTk5OUUrOTk5ICAgLT4gOS45OTk5OTk5OUUrOTk5CitjcGF4MTMyIGNvcHlhYnMgIDFFLTk5OSAgICAgICAgICAgIC0+IDFFLTk5OQorY3BheDEzMyBjb3B5YWJzICAxLjAwMDAwMDAwRS05OTkgICAtPiAxLjAwMDAwMDAwRS05OTkKK2NwYXgxMzQgY29weWFicyAgMUUtMTAwNyAgICAgICAgICAgLT4gMUUtMTAwNworCitjcGF4MTM1IGNvcHlhYnMgIC0xRS0xMDA3ICAgICAgICAgIC0+IDFFLTEwMDcKK2NwYXgxMzYgY29weWFicyAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gMS4wMDAwMDAwMEUtOTk5CitjcGF4MTM3IGNvcHlhYnMgIC0xRS05OTkgICAgICAgICAgIC0+IDFFLTk5OQorY3BheDE5OSBjb3B5YWJzICAtOS45OTk5OTk5OUUrOTk5ICAtPiA5Ljk5OTk5OTk5RSs5OTkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weW5lZ2F0ZS5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5bmVnYXRlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4ZGU5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weW5lZ2F0ZS5kZWNUZXN0CkBAIC0wLDAgKzEsODYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gY29weU5lZ2F0ZS5kZWNUZXN0IC0tIHF1aWV0IGNvcHkgYW5kIG5lZ2F0ZSAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCistLSBTYW5pdHkgY2hlY2sKK2NwbngwMDEgY29weW5lZ2F0ZSAgICAgICArNy41MCAgLT4gLTcuNTAKKworLS0gSW5maW5pdGllcworY3BueDAxMSBjb3B5bmVnYXRlICBJbmZpbml0eSAgICAtPiAtSW5maW5pdHkKK2NwbngwMTIgY29weW5lZ2F0ZSAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitjcG54MDIxIGNvcHluZWdhdGUgICAgICAgICBOYU4gIC0+IC1OYU4KK2NwbngwMjIgY29weW5lZ2F0ZSAgICAgICAgLU5hTiAgLT4gTmFOCitjcG54MDIzIGNvcHluZWdhdGUgICAgICAgIHNOYU4gIC0+IC1zTmFOCitjcG54MDI0IGNvcHluZWdhdGUgICAgICAgLXNOYU4gIC0+IHNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorY3BueDAzMSBjb3B5bmVnYXRlICAgICAgIE5hTjEzICAtPiAtTmFOMTMKK2NwbngwMzIgY29weW5lZ2F0ZSAgICAgIC1OYU4xMyAgLT4gTmFOMTMKK2NwbngwMzMgY29weW5lZ2F0ZSAgICAgIHNOYU4xMyAgLT4gLXNOYU4xMworY3BueDAzNCBjb3B5bmVnYXRlICAgICAtc05hTjEzICAtPiBzTmFOMTMKK2NwbngwMzUgY29weW5lZ2F0ZSAgICAgICBOYU43MCAgLT4gLU5hTjcwCitjcG54MDM2IGNvcHluZWdhdGUgICAgICAtTmFONzAgIC0+IE5hTjcwCitjcG54MDM3IGNvcHluZWdhdGUgICAgICBzTmFOMTAxIC0+IC1zTmFOMTAxCitjcG54MDM4IGNvcHluZWdhdGUgICAgIC1zTmFOMTAxIC0+IHNOYU4xMDEKKworLS0gZmluaXRlcworY3BueDEwMSBjb3B5bmVnYXRlICAgICAgICAgIDcgICAtPiAtNworY3BueDEwMiBjb3B5bmVnYXRlICAgICAgICAgLTcgICAtPiA3CitjcG54MTAzIGNvcHluZWdhdGUgICAgICAgICA3NSAgIC0+IC03NQorY3BueDEwNCBjb3B5bmVnYXRlICAgICAgICAtNzUgICAtPiA3NQorY3BueDEwNSBjb3B5bmVnYXRlICAgICAgIDcuNTAgICAtPiAtNy41MAorY3BueDEwNiBjb3B5bmVnYXRlICAgICAgLTcuNTAgICAtPiA3LjUwCitjcG54MTA3IGNvcHluZWdhdGUgICAgICAgNy41MDAgIC0+IC03LjUwMAorY3BueDEwOCBjb3B5bmVnYXRlICAgICAgLTcuNTAwICAtPiA3LjUwMAorCistLSB6ZXJvcworY3BueDExMSBjb3B5bmVnYXRlICAgICAgICAgIDAgICAtPiAtMAorY3BueDExMiBjb3B5bmVnYXRlICAgICAgICAgLTAgICAtPiAwCitjcG54MTEzIGNvcHluZWdhdGUgICAgICAgMEUrNCAgIC0+IC0wRSs0CitjcG54MTE0IGNvcHluZWdhdGUgICAgICAtMEUrNCAgIC0+IDBFKzQKK2NwbngxMTUgY29weW5lZ2F0ZSAgICAgMC4wMDAwICAgLT4gLTAuMDAwMAorY3BueDExNiBjb3B5bmVnYXRlICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2NwbngxMTcgY29weW5lZ2F0ZSAgICAgIDBFLTE0MSAgLT4gLTBFLTE0MQorY3BueDExOCBjb3B5bmVnYXRlICAgICAtMEUtMTQxICAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2NwbngxMjEgY29weW5lZ2F0ZSAgMjY4MjY4MjY4ICAgICAgICAgLT4gLTI2ODI2ODI2OAorY3BueDEyMiBjb3B5bmVnYXRlICAtMjY4MjY4MjY4ICAgICAgICAtPiAyNjgyNjgyNjgKK2NwbngxMjMgY29weW5lZ2F0ZSAgMTM0MTM0MTM0ICAgICAgICAgLT4gLTEzNDEzNDEzNAorY3BueDEyNCBjb3B5bmVnYXRlICAtMTM0MTM0MTM0ICAgICAgICAtPiAxMzQxMzQxMzQKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2NwbngxMzEgY29weW5lZ2F0ZSAgOS45OTk5OTk5OUUrOTk5ICAgLT4gLTkuOTk5OTk5OTlFKzk5OQorY3BueDEzMiBjb3B5bmVnYXRlICAxRS05OTkgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtOTk5CitjcG54MTMzIGNvcHluZWdhdGUgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IC0xLjAwMDAwMDAwRS05OTkKK2NwbngxMzQgY29weW5lZ2F0ZSAgMUUtMTAwNyAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTEwMDcKKworY3BueDEzNSBjb3B5bmVnYXRlICAtMUUtMTAwNyAgICAgICAgICAgICAgICAgICAtPiAxRS0xMDA3CitjcG54MTM2IGNvcHluZWdhdGUgIC0xLjAwMDAwMDAwRS05OTkgIC0+IDEuMDAwMDAwMDBFLTk5OQorY3BueDEzNyBjb3B5bmVnYXRlICAtMUUtOTk5ICAgICAgICAgICAgICAgICAgICAtPiAxRS05OTkKK2NwbngxMzggY29weW5lZ2F0ZSAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gOS45OTk5OTk5OUUrOTk5CmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHlzaWduLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHlzaWduLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZkZDY3MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weXNpZ24uZGVjVGVzdApAQCAtMCwwICsxLDE3NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBjb3B5c2lnbi5kZWNUZXN0IC0tIHF1aWV0IGNvcHkgd2l0aCBzaWduIGZyb20gcmhzICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjaywgYW5kIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKK2Nwc3gwMDEgY29weXNpZ24gICArNy41MCAgICAgICAxMSAgLT4gNy41MAorY3BzeDAwMiBjb3B5c2lnbiAgICcxLjUwJyAgICc3LjMzJyAtPiAxLjUwCitjcHN4MDAzIGNvcHlzaWduICAnLTEuNTAnICAgJzcuMzMnIC0+IDEuNTAKK2Nwc3gwMDQgY29weXNpZ24gICAnMS41MCcgICctNy4zMycgLT4gLTEuNTAKK2Nwc3gwMDUgY29weXNpZ24gICctMS41MCcgICctNy4zMycgLT4gLTEuNTAKKworLS0gSW5maW5pdGllcworY3BzeDAxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgMTEgLT4gSW5maW5pdHkKK2Nwc3gwMTIgY29weXNpZ24gIC1JbmZpbml0eSAgICAgIDExIC0+IEluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorY3BzeDAyMSBjb3B5c2lnbiAgICAgICAgIE5hTiAgICAgMTEgLT4gTmFOCitjcHN4MDIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAxMSAtPiBOYU4KK2Nwc3gwMjMgY29weXNpZ24gICAgICAgIHNOYU4gICAgIDExIC0+IHNOYU4KK2Nwc3gwMjQgY29weXNpZ24gICAgICAgLXNOYU4gICAgIDExIC0+IHNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorY3BzeDAzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgMTEgLT4gTmFOMTAKK2Nwc3gwMzIgY29weXNpZ24gICAgICAtTmFOMTAgICAgIDExIC0+IE5hTjEwCitjcHN4MDMzIGNvcHlzaWduICAgICAgc05hTjEwICAgICAxMSAtPiBzTmFOMTAKK2Nwc3gwMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIDExIC0+IHNOYU4xMAorY3BzeDAzNSBjb3B5c2lnbiAgICAgICBOYU43ICAgICAgMTEgLT4gTmFONworY3BzeDAzNiBjb3B5c2lnbiAgICAgIC1OYU43ICAgICAgMTEgLT4gTmFONworY3BzeDAzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQorY3BzeDAzOCBjb3B5c2lnbiAgICAgLXNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQorCistLSBmaW5pdGVzCitjcHN4MTAxIGNvcHlzaWduICAgICAgICAgIDcgICAgICAxMSAtPiA3CitjcHN4MTAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAxMSAtPiA3CitjcHN4MTAzIGNvcHlzaWduICAgICAgICAgNzUgICAgICAxMSAtPiA3NQorY3BzeDEwNCBjb3B5c2lnbiAgICAgICAgLTc1ICAgICAgMTEgLT4gNzUKK2Nwc3gxMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIDExIC0+IDcuNTAKK2Nwc3gxMDYgY29weXNpZ24gICAgICAtNy41MCAgICAgIDExIC0+IDcuNTAKK2Nwc3gxMDcgY29weXNpZ24gICAgICAgNy41MDAgICAgIDExIC0+IDcuNTAwCitjcHN4MTA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAxMSAtPiA3LjUwMAorCistLSB6ZXJvcworY3BzeDExMSBjb3B5c2lnbiAgICAgICAgICAwICAgICAgMTEgLT4gMAorY3BzeDExMiBjb3B5c2lnbiAgICAgICAgIC0wICAgICAgMTEgLT4gMAorY3BzeDExMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgMTEgLT4gMEUrNAorY3BzeDExNCBjb3B5c2lnbiAgICAgIC0wRSs0ICAgICAgMTEgLT4gMEUrNAorY3BzeDExNSBjb3B5c2lnbiAgICAgMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwCitjcHN4MTE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAxMSAtPiAwLjAwMDAKK2Nwc3gxMTcgY29weXNpZ24gICAgICAwRS0xNDEgICAgIDExIC0+IDBFLTE0MQorY3BzeDExOCBjb3B5c2lnbiAgICAgLTBFLTE0MSAgICAgMTEgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitjcHN4MTIxIGNvcHlzaWduICAgMjY4MjY4MjY4ICAgICAgICAgICAxMSAtPiAyNjgyNjgyNjgKK2Nwc3gxMjIgY29weXNpZ24gIC0yNjgyNjgyNjggICAgICAgICAgIDExIC0+IDI2ODI2ODI2OAorY3BzeDEyMyBjb3B5c2lnbiAgIDEzNDEzNDEzNCAgICAgICAgICAgMTEgLT4gMTM0MTM0MTM0CitjcHN4MTI0IGNvcHlzaWduICAtMTM0MTM0MTM0ICAgICAgICAgICAxMSAtPiAxMzQxMzQxMzQKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Nwc3gxMzEgY29weXNpZ24gIDkuOTk5OTk5OTlFKzk5OSAgICAgIDExIC0+IDkuOTk5OTk5OTlFKzk5OQorY3BzeDEzMiBjb3B5c2lnbiAgMUUtOTk5ICAgICAgICAgICAgICAgMTEgLT4gMUUtOTk5CitjcHN4MTMzIGNvcHlzaWduICAxLjAwMDAwMDAwRS05OTkgICAgICAxMSAtPiAxLjAwMDAwMDAwRS05OTkKK2Nwc3gxMzQgY29weXNpZ24gIDFFLTEwMDcgICAgICAgICAgICAgIDExIC0+IDFFLTEwMDcKKworY3BzeDEzNSBjb3B5c2lnbiAgLTFFLTEwMDcgICAgICAgICAgICAgMTEgLT4gMUUtMTAwNworY3BzeDEzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTEgLT4gMS4wMDAwMDAwMEUtOTk5CitjcHN4MTM3IGNvcHlzaWduICAtMUUtOTk5ICAgICAgICAgICAgICAxMSAtPiAxRS05OTkKK2Nwc3gxMzggY29weXNpZ24gIC05Ljk5OTk5OTk5RSs5OTkgICAgIDExIC0+IDkuOTk5OTk5OTlFKzk5OQorCistLSByZXBlYXQgd2l0aCBuZWdhdGl2ZSBSSFMKKworLS0gSW5maW5pdGllcworY3BzeDIxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgLTM0IC0+IC1JbmZpbml0eQorY3BzeDIxMiBjb3B5c2lnbiAgLUluZmluaXR5ICAgICAgLTM0IC0+IC1JbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2Nwc3gyMjEgY29weXNpZ24gICAgICAgICBOYU4gICAgIC0zNCAtPiAtTmFOCitjcHN4MjIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAtMzQgLT4gLU5hTgorY3BzeDIyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgLTM0IC0+IC1zTmFOCitjcHN4MjI0IGNvcHlzaWduICAgICAgIC1zTmFOICAgICAtMzQgLT4gLXNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorY3BzeDIzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgLTM0IC0+IC1OYU4xMAorY3BzeDIzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgLTM0IC0+IC1OYU4xMAorY3BzeDIzMyBjb3B5c2lnbiAgICAgIHNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTAKK2Nwc3gyMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIC0zNCAtPiAtc05hTjEwCitjcHN4MjM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAtMzQgLT4gLU5hTjcKK2Nwc3gyMzYgY29weXNpZ24gICAgICAtTmFONyAgICAgIC0zNCAtPiAtTmFONworY3BzeDIzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgLTM0IC0+IC1zTmFOMTAxCitjcHN4MjM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDEKKworLS0gZmluaXRlcworY3BzeDMwMSBjb3B5c2lnbiAgICAgICAgICA3ICAgICAgLTM0IC0+IC03CitjcHN4MzAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAtMzQgLT4gLTcKK2Nwc3gzMDMgY29weXNpZ24gICAgICAgICA3NSAgICAgIC0zNCAtPiAtNzUKK2Nwc3gzMDQgY29weXNpZ24gICAgICAgIC03NSAgICAgIC0zNCAtPiAtNzUKK2Nwc3gzMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIC0zNCAtPiAtNy41MAorY3BzeDMwNiBjb3B5c2lnbiAgICAgIC03LjUwICAgICAgLTM0IC0+IC03LjUwCitjcHN4MzA3IGNvcHlzaWduICAgICAgIDcuNTAwICAgICAtMzQgLT4gLTcuNTAwCitjcHN4MzA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAtMzQgLT4gLTcuNTAwCisKKy0tIHplcm9zCitjcHN4MzExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAtMzQgLT4gLTAKK2Nwc3gzMTIgY29weXNpZ24gICAgICAgICAtMCAgICAgIC0zNCAtPiAtMAorY3BzeDMxMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgLTM0IC0+IC0wRSs0CitjcHN4MzE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAtMzQgLT4gLTBFKzQKK2Nwc3gzMTUgY29weXNpZ24gICAgIDAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwCitjcHN4MzE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMAorY3BzeDMxNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgLTM0IC0+IC0wRS0xNDEKK2Nwc3gzMTggY29weXNpZ24gICAgIC0wRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitjcHN4MzIxIGNvcHlzaWduICAgMjY4MjY4MjY4ICAgICAgICAgIC0xOCAtPiAtMjY4MjY4MjY4CitjcHN4MzIyIGNvcHlzaWduICAtMjY4MjY4MjY4ICAgICAgICAgIC0xOCAtPiAtMjY4MjY4MjY4CitjcHN4MzIzIGNvcHlzaWduICAgMTM0MTM0MTM0ICAgICAgICAgIC0xOCAtPiAtMTM0MTM0MTM0CitjcHN4MzI0IGNvcHlzaWduICAtMTM0MTM0MTM0ICAgICAgICAgIC0xOCAtPiAtMTM0MTM0MTM0CisKKy0tIE5tYXgsIE5taW4sIE50aW55CitjcHN4MzMxIGNvcHlzaWduICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiAtOS45OTk5OTk5OUUrOTk5CitjcHN4MzMyIGNvcHlzaWduICAxRS05OTkgICAgICAgICAgICAgIC0xOCAtPiAtMUUtOTk5CitjcHN4MzMzIGNvcHlzaWduICAxLjAwMDAwMDAwRS05OTkgICAgIC0xOCAtPiAtMS4wMDAwMDAwMEUtOTk5CitjcHN4MzM0IGNvcHlzaWduICAxRS0xMDA3ICAgICAgICAgICAgIC0xOCAtPiAtMUUtMTAwNworCitjcHN4MzM1IGNvcHlzaWduICAtMUUtMTAwNyAgICAgICAgICAgIC0xOCAtPiAtMUUtMTAwNworY3BzeDMzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDBFLTk5OSAgICAtMTggLT4gLTEuMDAwMDAwMDBFLTk5OQorY3BzeDMzNyBjb3B5c2lnbiAgLTFFLTk5OSAgICAgICAgICAgICAtMTggLT4gLTFFLTk5OQorY3BzeDMzOCBjb3B5c2lnbiAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gLTkuOTk5OTk5OTlFKzk5OQorCistLSBPdGhlciBraW5kcyBvZiBSSFMKK2Nwc3g0MDEgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0zNCAtPiAtNzAxCitjcHN4NDAyIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtMzQgLT4gLTcyMAorY3BzeDQwMyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLTAgIC0+IC03MDEKK2Nwc3g0MDQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0wICAtPiAtNzIwCitjcHN4NDA1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArMCAgLT4gIDcwMQorY3BzeDQwNiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgKzAgIC0+ICA3MjAKK2Nwc3g0MDcgY29weXNpZ24gICAgICAgICAgNzAxICAgICszNCAtPiAgNzAxCitjcHN4NDA4IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMzQgLT4gIDcyMAorCitjcHN4NDEzIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtSW5mICAtPiAtNzAxCitjcHN4NDE0IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtSW5mICAtPiAtNzIwCitjcHN4NDE1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArSW5mICAtPiAgNzAxCitjcHN4NDE2IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArSW5mICAtPiAgNzIwCisKK2Nwc3g0MjAgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1OYU4gIC0+IC03MDEKK2Nwc3g0MjEgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1OYU4gIC0+IC03MjAKK2Nwc3g0MjIgY29weXNpZ24gICAgICAgICAgNzAxICAgICtOYU4gIC0+ICA3MDEKK2Nwc3g0MjMgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU4gIC0+ICA3MjAKK2Nwc3g0MjUgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU44IC0+ICA3MjAKKworY3BzeDQyNiBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLXNOYU4gIC0+IC03MDEKK2Nwc3g0MjcgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1zTmFOICAtPiAtNzIwCitjcHN4NDI4IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArc05hTiAgLT4gIDcwMQorY3BzeDQyOSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK3NOYU4gIC0+ICA3MjAKK2Nwc3g0MzAgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOMyAtPiAgNzIwCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRBYnMuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRBYnMuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOThkNjRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFicy5kZWNUZXN0CkBAIC0wLDAgKzEsMTI2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQWJzLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGFic29sdXRlIHZhbHVlLCBoZWVkaW5nIHNOYU4gICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RkYWJzMDAxIGFicyAnMScgICAgICAtPiAnMScKK2RkYWJzMDAyIGFicyAnLTEnICAgICAtPiAnMScKK2RkYWJzMDAzIGFicyAnMS4wMCcgICAtPiAnMS4wMCcKK2RkYWJzMDA0IGFicyAnLTEuMDAnICAtPiAnMS4wMCcKK2RkYWJzMDA1IGFicyAnMCcgICAgICAtPiAnMCcKK2RkYWJzMDA2IGFicyAnMC4wMCcgICAtPiAnMC4wMCcKK2RkYWJzMDA3IGFicyAnMDAuMCcgICAtPiAnMC4wJworZGRhYnMwMDggYWJzICcwMC4wMCcgIC0+ICcwLjAwJworZGRhYnMwMDkgYWJzICcwMCcgICAgIC0+ICcwJworCitkZGFiczAxMCBhYnMgJy0yJyAgICAgLT4gJzInCitkZGFiczAxMSBhYnMgJzInICAgICAgLT4gJzInCitkZGFiczAxMiBhYnMgJy0yLjAwJyAgLT4gJzIuMDAnCitkZGFiczAxMyBhYnMgJzIuMDAnICAgLT4gJzIuMDAnCitkZGFiczAxNCBhYnMgJy0wJyAgICAgLT4gJzAnCitkZGFiczAxNSBhYnMgJy0wLjAwJyAgLT4gJzAuMDAnCitkZGFiczAxNiBhYnMgJy0wMC4wJyAgLT4gJzAuMCcKK2RkYWJzMDE3IGFicyAnLTAwLjAwJyAtPiAnMC4wMCcKK2RkYWJzMDE4IGFicyAnLTAwJyAgICAtPiAnMCcKKworZGRhYnMwMjAgYWJzICctMjAwMDAwMCcgLT4gJzIwMDAwMDAnCitkZGFiczAyMSBhYnMgJzIwMDAwMDAnICAtPiAnMjAwMDAwMCcKKworZGRhYnMwMzAgYWJzICcrMC4xJyAgICAgICAgICAgIC0+ICcwLjEnCitkZGFiczAzMSBhYnMgJy0wLjEnICAgICAgICAgICAgLT4gJzAuMScKK2RkYWJzMDMyIGFicyAnKzAuMDEnICAgICAgICAgICAtPiAnMC4wMScKK2RkYWJzMDMzIGFicyAnLTAuMDEnICAgICAgICAgICAtPiAnMC4wMScKK2RkYWJzMDM0IGFicyAnKzAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnCitkZGFiczAzNSBhYnMgJy0wLjAwMScgICAgICAgICAgLT4gJzAuMDAxJworZGRhYnMwMzYgYWJzICcrMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScKK2RkYWJzMDM3IGFicyAnLTAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnCitkZGFiczAzOCBhYnMgJyswLjAwMDAwMDAwMDAwMScgLT4gJzFFLTEyJworZGRhYnMwMzkgYWJzICctMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aAorZGRhYnMwNDAgYWJzICcyLjEnICAgICAtPiAgJzIuMScKK2RkYWJzMDQxIGFicyAnLTEwMCcgICAgLT4gICcxMDAnCitkZGFiczA0MiBhYnMgJzEwMS41JyAgIC0+ICAnMTAxLjUnCitkZGFiczA0MyBhYnMgJy0xMDEuNScgIC0+ICAnMTAxLjUnCisKKy0tIG1vcmUgZml4ZWQsIHBvdGVudGlhbCBMSFMgc3dhcHMvb3ZlcmxheXMgaWYgZG9uZSBieSBzdWJ0cmFjdCAwCitkZGFiczA2MCBhYnMgJy01NjI2N0UtMTAnICAtPiAnMC4wMDAwMDU2MjY3JworZGRhYnMwNjEgYWJzICctNTYyNjdFLTUnICAgLT4gJzAuNTYyNjcnCitkZGFiczA2MiBhYnMgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3JworZGRhYnMwNjMgYWJzICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycKK2RkYWJzMDY1IGFicyAnLTU2MjY3RS0wJyAgIC0+ICc1NjI2NycKKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93CisKKy0tIGxvbmcgb3BlcmFuZCB0ZXN0cworZGRhYnMzMjEgYWJzIDEyMzQ1Njc4OTAxMjM0NTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RkYWJzMzIyIGFicyAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDAKK2RkYWJzMzIzIGFicyAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMAorZGRhYnMzMjQgYWJzIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwCitkZGFiczMyNSBhYnMgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTEKK2RkYWJzMzI2IGFicyAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDEKK2RkYWJzMzI3IGFicyAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5NgorCistLSB6ZXJvcworZGRhYnMxMTEgYWJzICAgICAgICAgIDAgICAtPiAwCitkZGFiczExMiBhYnMgICAgICAgICAtMCAgIC0+IDAKK2RkYWJzMTEzIGFicyAgICAgICAwRSs2ICAgLT4gMEUrNgorZGRhYnMxMTQgYWJzICAgICAgLTBFKzYgICAtPiAwRSs2CitkZGFiczExNSBhYnMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorZGRhYnMxMTYgYWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2RkYWJzMTE3IGFicyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkZGFiczExOCBhYnMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZGRhYnMxMjEgYWJzICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4MgorZGRhYnMxMjIgYWJzICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4MgorZGRhYnMxMjMgYWJzICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQorZGRhYnMxMjQgYWJzICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZGRhYnMxMzEgYWJzICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRhYnMxMzIgYWJzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzCitkZGFiczEzMyBhYnMgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZGFiczEzNCBhYnMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTggU3Vibm9ybWFsCisKK2RkYWJzMTM1IGFicyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OCBTdWJub3JtYWwKK2RkYWJzMTM2IGFicyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkYWJzMTM3IGFicyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MworZGRhYnMxMzggYWJzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorCistLSBzcGVjaWFscworZGRhYnM1MjAgYWJzICdJbmYnICAgIC0+ICdJbmZpbml0eScKK2RkYWJzNTIxIGFicyAnLUluZicgICAtPiAnSW5maW5pdHknCitkZGFiczUyMiBhYnMgICBOYU4gICAgLT4gIE5hTgorZGRhYnM1MjMgYWJzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZGRhYnM1MjQgYWJzICAgTmFOMjIgIC0+ICBOYU4yMgorZGRhYnM1MjUgYWJzICBzTmFOMzMgIC0+ICBOYU4zMyBJbnZhbGlkX29wZXJhdGlvbgorZGRhYnM1MjYgYWJzICAtTmFOMjIgIC0+IC1OYU4yMgorZGRhYnM1MjcgYWJzIC1zTmFOMzMgIC0+IC1OYU4zMyBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCitkZGFiczkwMCBhYnMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRBZGQuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRBZGQuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjEyY2U0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFkZC5kZWNUZXN0CkBAIC0wLDAgKzEsMTMyOCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZEFkZC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBhZGRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjRG91YmxlcyBvbmx5OyBhbGwgYXJndW1lbnRzIGFyZQorLS0gcmVwcmVzZW50YWJsZSBpbiBhIGRlY0RvdWJsZQorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQorZGRhZGQwMDEgYWRkIDEgICAgICAgMSAgICAgICAtPiAgMgorZGRhZGQwMDIgYWRkIDIgICAgICAgMyAgICAgICAtPiAgNQorZGRhZGQwMDMgYWRkICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQorZGRhZGQwMDQgYWRkICc1JyAgICAgJy0zJyAgICAtPiAgMgorZGRhZGQwMDUgYWRkICctNScgICAgJy0zJyAgICAtPiAgLTgKK2RkYWRkMDA2IGFkZCAnLTcnICAgICcyLjUnICAgLT4gIC00LjUKK2RkYWRkMDA3IGFkZCAnMC43JyAgICcwLjMnICAgLT4gIDEuMAorZGRhZGQwMDggYWRkICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MAorZGRhZGQwMDkgYWRkICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5JworZGRhZGQwMTAgYWRkICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJworCistLSAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRhZGQwMTEgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDYnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwMTIgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDUnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RkYWRkMDEzIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScKK2RkYWRkMDE0IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDAxNSBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5JyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwMTYgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OTknIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDE3IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAwJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDAxOCBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAwMScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorZGRhZGQwMTkgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDIwIGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkMDIxIGFkZCAwIDEgLT4gMQorZGRhZGQwMjIgYWRkIDEgMSAtPiAyCitkZGFkZDAyMyBhZGQgMiAxIC0+IDMKK2RkYWRkMDI0IGFkZCAzIDEgLT4gNAorZGRhZGQwMjUgYWRkIDQgMSAtPiA1CitkZGFkZDAyNiBhZGQgNSAxIC0+IDYKK2RkYWRkMDI3IGFkZCA2IDEgLT4gNworZGRhZGQwMjggYWRkIDcgMSAtPiA4CitkZGFkZDAyOSBhZGQgOCAxIC0+IDkKK2RkYWRkMDMwIGFkZCA5IDEgLT4gMTAKKworLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCitkZGFkZDAzMSBhZGQgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnCitkZGFkZDAzMiBhZGQgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknCitkZGFkZDAzMyBhZGQgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnCitkZGFkZDAzNCBhZGQgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnCisKK2RkYWRkMDM1IGFkZCAnNzAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDM2IGFkZCAnNzAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDAzNyBhZGQgJzcwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDM4IGFkZCAnNzAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDM5IGFkZCAnNzAwMDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZAorCistLSBzeW1tZXRyeToKK2RkYWRkMDQwIGFkZCAnMTAwMDBlKzE2JyAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDQxIGFkZCAnMTAwMDBlKzE2JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDA0MiBhZGQgJzEwMDAwZSsxNicgICc3MDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDQ0IGFkZCAnMTAwMDBlKzE2JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMDQ1IGFkZCAnMTAwMDBlKzE2JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZAorCistLSBzYW1lLCB3aXRob3V0IHJvdW5kaW5nCitkZGFkZDA0NiBhZGQgJzEwMDAwZSs5JyAgJzcnIC0+ICcxMDAwMDAwMDAwMDAwNycKK2RkYWRkMDQ3IGFkZCAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcKK2RkYWRkMDQ4IGFkZCAnMTAwMDBlKzknICAnNzAwJyAtPiAnMTAwMDAwMDAwMDA3MDAnCitkZGFkZDA0OSBhZGQgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICcxMDAwMDAwMDAwNzAwMCcKK2RkYWRkMDUwIGFkZCAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcKK2RkYWRkMDUxIGFkZCAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMTAwMDAwMDA3MDAwMDAnCitkZGFkZDA1MiBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwMDAnIC0+ICcxMDAwMDAwNzAwMDAwMCcKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorZGRhZGQwNTMgYWRkICcxMicgJzcuMDAnIC0+ICcxOS4wMCcKK2RkYWRkMDU0IGFkZCAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJworZGRhZGQwNTUgYWRkICcxLjMnICctMS4zMCcgLT4gJzAuMDAnCitkZGFkZDA1NiBhZGQgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnCitkZGFkZDA1NyBhZGQgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcKKworLS0gbGVhZGluZyB6ZXJvIHByZXNlcnZhdGlvbgorZGRhZGQwNjEgYWRkIDEgJzAuMDAwMScgLT4gJzEuMDAwMScKK2RkYWRkMDYyIGFkZCAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScKK2RkYWRkMDYzIGFkZCAxICcwLjAwMDAwMScgLT4gJzEuMDAwMDAxJworZGRhZGQwNjQgYWRkIDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAwMScKK2RkYWRkMDY1IGFkZCAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMScKKworLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQorZGRhZGQwNzAgYWRkIDEgIDAgICAgLT4gMQorZGRhZGQwNzEgYWRkIDEgMC4gICAgLT4gMQorZGRhZGQwNzIgYWRkIDEgIC4wICAgLT4gMS4wCitkZGFkZDA3MyBhZGQgMSAwLjAgICAtPiAxLjAKK2RkYWRkMDc0IGFkZCAxIDAuMDAgIC0+IDEuMDAKK2RkYWRkMDc1IGFkZCAgMCAgMSAgIC0+IDEKK2RkYWRkMDc2IGFkZCAwLiAgMSAgIC0+IDEKK2RkYWRkMDc3IGFkZCAgLjAgMSAgIC0+IDEuMAorZGRhZGQwNzggYWRkIDAuMCAxICAgLT4gMS4wCitkZGFkZDA3OSBhZGQgMC4wMCAxICAtPiAxLjAwCisKKy0tIHNvbWUgY2FycmllcworZGRhZGQwODAgYWRkIDk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTkKK2RkYWRkMDgxIGFkZCA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMAorZGRhZGQwODIgYWRkICA5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAKK2RkYWRkMDgzIGFkZCAgIDk5OTk5OTkgMSAgLT4gMTAwMDAwMDAKK2RkYWRkMDg0IGFkZCAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMAorZGRhZGQwODUgYWRkICAgICA5OTk5OSAxICAtPiAxMDAwMDAKK2RkYWRkMDg2IGFkZCAgICAgIDk5OTkgMSAgLT4gMTAwMDAKK2RkYWRkMDg3IGFkZCAgICAgICA5OTkgMSAgLT4gMTAwMAorZGRhZGQwODggYWRkICAgICAgICA5OSAxICAtPiAxMDAKK2RkYWRkMDg5IGFkZCAgICAgICAgIDkgMSAgLT4gMTAKKworCistLSBtb3JlIExIUyBzd2FwcworZGRhZGQwOTAgYWRkICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JworZGRhZGQwOTEgYWRkICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCitkZGFkZDA5MiBhZGQgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3JworZGRhZGQwOTMgYWRkICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JworZGRhZGQwOTQgYWRkICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JworZGRhZGQwOTUgYWRkICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3JworZGRhZGQwOTYgYWRkICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JworZGRhZGQwOTcgYWRkICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCitkZGFkZDA5OCBhZGQgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcKK2RkYWRkMDk5IGFkZCAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCitkZGFkZDEwMCBhZGQgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKK2RkYWRkMTAxIGFkZCAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnCitkZGFkZDEwMiBhZGQgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCitkZGFkZDEwMyBhZGQgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCitkZGFkZDEwNCBhZGQgJy01RTAnICAgICAgICAgMCAtPiAgJy01JworZGRhZGQxMDUgYWRkICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCitkZGFkZDEwNiBhZGQgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCitkZGFkZDEwNyBhZGQgJy01RTE1JyAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJworZGRhZGQxMDggYWRkICctNUUxNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgUm91bmRlZAorZGRhZGQxMDkgYWRkICctNUUxNycgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgUm91bmRlZAorZGRhZGQxMTAgYWRkICctNUUxOCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgUm91bmRlZAorZGRhZGQxMTEgYWRkICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZAorCistLSBtb3JlIFJIUyBzd2FwcworZGRhZGQxMTMgYWRkIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnCitkZGFkZDExNCBhZGQgMCAgJy01NjI2N0UtNicgIC0+ICAnLTAuMDU2MjY3JworZGRhZGQxMTYgYWRkIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3JworZGRhZGQxMTcgYWRkIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnCitkZGFkZDExOSBhZGQgMCAgJy01NjI2N0UtMycgIC0+ICAnLTU2LjI2NycKK2RkYWRkMTIwIGFkZCAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3JworZGRhZGQxMjEgYWRkIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnCitkZGFkZDEyMiBhZGQgMCAgJy01NjI2N0UtMCcgIC0+ICAnLTU2MjY3JworZGRhZGQxMjMgYWRkIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcKK2RkYWRkMTI0IGFkZCAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycKK2RkYWRkMTI1IGFkZCAwICAnLTVFLTYnICAgICAgLT4gICctMC4wMDAwMDUnCitkZGFkZDEyNiBhZGQgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnCitkZGFkZDEyNyBhZGQgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScKK2RkYWRkMTI4IGFkZCAwICAnLTVFLTEnICAgICAgLT4gICctMC41JworZGRhZGQxMjkgYWRkIDAgICctNUUwJyAgICAgICAtPiAgJy01JworZGRhZGQxMzAgYWRkIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcKK2RkYWRkMTMxIGFkZCAwICAnLTVFNScgICAgICAgLT4gICctNTAwMDAwJworZGRhZGQxMzIgYWRkIDAgICctNUUxNScgICAgICAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJworZGRhZGQxMzMgYWRkIDAgICctNUUxNicgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICAgUm91bmRlZAorZGRhZGQxMzQgYWRkIDAgICctNUUxNycgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICAgUm91bmRlZAorZGRhZGQxMzUgYWRkIDAgICctNUUxOCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICAgUm91bmRlZAorZGRhZGQxMzYgYWRkIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZAorCistLSByZWxhdGVkCitkZGFkZDEzNyBhZGQgIDEgICcwRS0xOScgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZAorZGRhZGQxMzggYWRkIC0xICAnMEUtMTknICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RkYWRkMTM5IGFkZCAnMEUtMTknIDEgICAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCitkZGFkZDE0MCBhZGQgJzBFLTE5JyAtMSAgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZGRhZGQxNDEgYWRkIDFFKzExICAgMC4wMDAwICAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcKK2RkYWRkMTQyIGFkZCAxRSsxMSAgIDAuMDAwMDAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnICBSb3VuZGVkCitkZGFkZDE0MyBhZGQgMC4wMDAgICAxRSsxMiAgICAtPiAgJzEwMDAwMDAwMDAwMDAuMDAwJworZGRhZGQxNDQgYWRkIDAuMDAwMCAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcgIFJvdW5kZWQKKworLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10KK2RkYWRkMTQ2IGFkZCAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnCitkZGFkZDE0NyBhZGQgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcKK2RkYWRkMTQ4IGFkZCAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJworZGRhZGQxNDkgYWRkICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcKK2RkYWRkMTUwIGFkZCAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJworZGRhZGQxNTEgYWRkICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnCitkZGFkZDE1MiBhZGQgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJworZGRhZGQxNTMgYWRkICczLicgICAgJy4zJyAgICAtPiAgJzMuMycKK2RkYWRkMTU0IGFkZCAnMy4wJyAgICcuMycgICAgLT4gICczLjMnCitkZGFkZDE1NSBhZGQgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcKK2RkYWRkMTU2IGFkZCAnMycgICAgICczJyAgICAgLT4gICc2JworZGRhZGQxNTcgYWRkICczJyAgICAgJyszJyAgICAtPiAgJzYnCitkZGFkZDE1OCBhZGQgJzMnICAgICAnLTMnICAgIC0+ICAnMCcKK2RkYWRkMTU5IGFkZCAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnCitkZGFkZDE2MCBhZGQgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcKKworLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KK2RkYWRkMTYxIGFkZCAnMUUrMTInICctMScgICAgLT4gJzk5OTk5OTk5OTk5OScKK2RkYWRkMTYyIGFkZCAnMUUrMTInICAnMS4xMScgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitkZGFkZDE2MyBhZGQgJzEuMTEnICAnMUUrMTInIC0+ICcxMDAwMDAwMDAwMDAxLjExJworZGRhZGQxNjQgYWRkICctMScgICAgJzFFKzEyJyAtPiAnOTk5OTk5OTk5OTk5JworZGRhZGQxNjUgYWRkICc3RSsxMicgJy0xJyAgICAtPiAnNjk5OTk5OTk5OTk5OScKK2RkYWRkMTY2IGFkZCAnN0UrMTInICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitkZGFkZDE2NyBhZGQgJzEuMTEnICAnN0UrMTInIC0+ICc3MDAwMDAwMDAwMDAxLjExJworZGRhZGQxNjggYWRkICctMScgICAgJzdFKzEyJyAtPiAnNjk5OTk5OTk5OTk5OScKKworcm91bmRpbmc6IGhhbGZfdXAKKy0tICAgICAgICAgICAxLjIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxIDIzNDU2Nzg5MDEyMzQ1NgorZGRhZGQxNzAgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjcnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE3MSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NicgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTcyIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY1JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZGRhZGQxNzMgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjQnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE3NCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTc1IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZGRhZGQxNzYgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE3NyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBSb3VuZGVkCitkZGFkZDE3OCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0NScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTc5IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQ0JyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZGRhZGQxODAgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDE4MSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMTgyIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZGRhZGQxODMgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgUm91bmRlZAorCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZGRhZGQyMDAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JworZGRhZGQyMDEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjAyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIwMyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMDQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjA1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIwNiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMDcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjA4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIwOSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMTAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjExIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIxMiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMTMgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjE0IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIxNSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMTYgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJworZGRhZGQyMTcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjE4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIxOSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkZGFkZDIyMCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknCitkZGFkZDIyMSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMjIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjIzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIyNCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMjUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjI2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIyNyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMjggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjI5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIzMCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMzEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjMyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIzMyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMzQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjM1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDIzNiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnCitkZGFkZDIzNyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQyMzggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjM5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorZGRhZGQyNDAgYWRkICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjQxIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI0MiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZGRhZGQyNTAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JworZGRhZGQyNTEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjUyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI1MyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNTQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjU1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI1NiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNTcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjU4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI1OSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNjAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjYxIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI2MiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNjMgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjY0IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI2NSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQyNjYgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJworZGRhZGQyNjcgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMjY4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDI2OSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMKK3JvdW5kaW5nOiBoYWxmX3VwCitkZGFkZDMwMSBhZGQgIC0xICAgMSAgICAgIC0+ICAgMAorZGRhZGQzMDIgYWRkICAgMCAgIDEgICAgICAtPiAgIDEKK2RkYWRkMzAzIGFkZCAgIDEgICAxICAgICAgLT4gICAyCitkZGFkZDMwNCBhZGQgIDEyICAgMSAgICAgIC0+ICAxMworZGRhZGQzMDUgYWRkICA5OCAgIDEgICAgICAtPiAgOTkKK2RkYWRkMzA2IGFkZCAgOTkgICAxICAgICAgLT4gMTAwCitkZGFkZDMwNyBhZGQgMTAwICAgMSAgICAgIC0+IDEwMQorZGRhZGQzMDggYWRkIDEwMSAgIDEgICAgICAtPiAxMDIKK2RkYWRkMzA5IGFkZCAgLTEgIC0xICAgICAgLT4gIC0yCitkZGFkZDMxMCBhZGQgICAwICAtMSAgICAgIC0+ICAtMQorZGRhZGQzMTEgYWRkICAgMSAgLTEgICAgICAtPiAgIDAKK2RkYWRkMzEyIGFkZCAgMTIgIC0xICAgICAgLT4gIDExCitkZGFkZDMxMyBhZGQgIDk4ICAtMSAgICAgIC0+ICA5NworZGRhZGQzMTQgYWRkICA5OSAgLTEgICAgICAtPiAgOTgKK2RkYWRkMzE1IGFkZCAxMDAgIC0xICAgICAgLT4gIDk5CitkZGFkZDMxNiBhZGQgMTAxICAtMSAgICAgIC0+IDEwMAorCitkZGFkZDMyMSBhZGQgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDAKK2RkYWRkMzIyIGFkZCAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQorZGRhZGQzMjMgYWRkICAwLjAxICAwLjAxICAgIC0+ICAwLjAyCitkZGFkZDMyNCBhZGQgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMKK2RkYWRkMzI1IGFkZCAgMC45OCAgMC4wMSAgICAtPiAgMC45OQorZGRhZGQzMjYgYWRkICAwLjk5ICAwLjAxICAgIC0+ICAxLjAwCitkZGFkZDMyNyBhZGQgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDEKK2RkYWRkMzI4IGFkZCAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMgorZGRhZGQzMjkgYWRkIC0wLjAxIC0wLjAxICAgIC0+IC0wLjAyCitkZGFkZDMzMCBhZGQgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDEKK2RkYWRkMzMxIGFkZCAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMAorZGRhZGQzMzIgYWRkICAwLjEyIC0wLjAxICAgIC0+ICAwLjExCitkZGFkZDMzMyBhZGQgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcKK2RkYWRkMzM0IGFkZCAgMC45OSAtMC4wMSAgICAtPiAgMC45OAorZGRhZGQzMzUgYWRkICAxLjAwIC0wLjAxICAgIC0+ICAwLjk5CitkZGFkZDMzNiBhZGQgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDAKKworLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGFkZGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50CitkZGFkZDM0MCBhZGQgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMAorZGRhZGQzNDEgYWRkIDFFKzE1ICAgMCAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwCitkZGFkZDM0MiBhZGQgMUUrMTYgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkCitkZGFkZDM0MyBhZGQgMUUrMjAgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBSb3VuZGVkCistLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uCitkZGFkZDM0NCBhZGQgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQorZGRhZGQzNDUgYWRkIDFFKzE1ICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAxCitkZGFkZDM0NiBhZGQgMUUrMTYgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkMzQ3IGFkZCAxRSsyMCAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQzNDggYWRkIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcKK2RkYWRkMzQ5IGFkZCAxRSsxNSAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwNworZGRhZGQzNTAgYWRkIDFFKzE2ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDM1MSBhZGQgMUUrMjAgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkZGFkZDM2MCAgYWRkIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUKK2RkYWRkMzYxICBhZGQgMEUtNTAgMTAwMDBFKzEgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQKK2RkYWRkMzYyICBhZGQgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQKK2RkYWRkMzYzICBhZGQgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCBSb3VuZGVkIEluZXhhY3QKK2RkYWRkMzY0ICBhZGQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAwRSszNjkKKworLS0gYSBjdXJpb3NpdHkgZnJvbSBKU1IgMTMgdGVzdGluZworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorZGRhZGQzNzAgYWRkICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQKK2RkYWRkMzcxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl91cAorZGRhZGQzNzIgYWRkICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQKK2RkYWRkMzczIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl9ldmVuCitkZGFkZDM3NCBhZGQgIDk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDgxNAorZGRhZGQzNzUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDgxRSsxNiBSb3VuZGVkIEluZXhhY3QKKworLS0gb3BlcmFuZHMgZm9sZGVkCitkZGFkZDM4MCBhZGQgICAxRSszODQgIDFFKzM4NCAgLT4gIDIuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQKK2RkYWRkMzgxIGFkZCAgIDFFKzM4MCAgMUUrMzgwICAtPiAgMi4wMDAwMDAwMDAwMEUrMzgwICAgICAgQ2xhbXBlZAorZGRhZGQzODIgYWRkICAgMUUrMzc2ICAxRSszNzYgIC0+ICAyLjAwMDAwMDBFKzM3NiAgICAgICAgICBDbGFtcGVkCitkZGFkZDM4MyBhZGQgICAxRSszNzIgIDFFKzM3MiAgLT4gIDIuMDAwRSszNzIgICAgICAgICAgICAgIENsYW1wZWQKK2RkYWRkMzg0IGFkZCAgIDFFKzM3MCAgMUUrMzcwICAtPiAgMi4wRSszNzAgICAgICAgICAgICAgICAgQ2xhbXBlZAorZGRhZGQzODUgYWRkICAgMUUrMzY5ICAxRSszNjkgIC0+ICAyRSszNjkKK2RkYWRkMzg2IGFkZCAgIDFFKzM2OCAgMUUrMzY4ICAtPiAgMkUrMzY4CisKKy0tIHVscCByZXBsYWNlbWVudCB0ZXN0cworZGRhZGQ0MDAgYWRkICAgMSAgIDc3ZS0xNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3CitkZGFkZDQwMSBhZGQgICAxICAgNzdlLTE1ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDc3CitkZGFkZDQwMiBhZGQgICAxICAgNzdlLTE2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MDMgYWRkICAgMSAgIDc3ZS0xNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDA0IGFkZCAgIDEgICA3N2UtMTggICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQwNSBhZGQgICAxICAgNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MDYgYWRkICAgMSAgIDc3ZS0yOTkgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ0MTAgYWRkICAxMCAgIDc3ZS0xNCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDA3NworZGRhZGQ0MTEgYWRkICAxMCAgIDc3ZS0xNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDEyIGFkZCAgMTAgICA3N2UtMTYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQxMyBhZGQgIDEwICAgNzdlLTE3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MTQgYWRkICAxMCAgIDc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDE1IGFkZCAgMTAgICA3N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQxNiBhZGQgIDEwICAgNzdlLTI5OSAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDQyMCBhZGQgIDc3ZS0xNCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcKK2RkYWRkNDIxIGFkZCAgNzdlLTE1ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcKK2RkYWRkNDIyIGFkZCAgNzdlLTE2ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkZGFkZDQyMyBhZGQgIDc3ZS0xNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MjQgYWRkICA3N2UtMTggICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDI1IGFkZCAgNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQyNiBhZGQgIDc3ZS0yOTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDQzMCBhZGQgIDc3ZS0xNCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3CitkZGFkZDQzMSBhZGQgIDc3ZS0xNSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MzIgYWRkICA3N2UtMTYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDMzIGFkZCAgNzdlLTE3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDQzNCBhZGQgIDc3ZS0xOCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ0MzUgYWRkICA3N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNDM2IGFkZCAgNzdlLTI5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGZhc3RwYXRoIGJvdW5kYXJ5IChtb3JlIGluIGRxYWRkKQorLS0gICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkZGFkZDUzOSBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMzMzMzMzMzMzMzMzMzMzMycgLT4gJzc3Nzc3Nzc3Nzc3Nzc3NzcnCitkZGFkZDU0MCBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gJzg4ODg4ODg4ODg4ODg4ODgnCitkZGFkZDU0MSBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NScgLT4gJzk5OTk5OTk5OTk5OTk5OTknCitkZGFkZDU0MiBhZGQgJzMzMzMzMzMzMzMzMzMzMzMnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gJzc3Nzc3Nzc3Nzc3Nzc3NzcnCitkZGFkZDU0MyBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gJzg4ODg4ODg4ODg4ODg4ODgnCitkZGFkZDU0NCBhZGQgJzU1NTU1NTU1NTU1NTU1NTUnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gJzk5OTk5OTk5OTk5OTk5OTknCitkZGFkZDU0NSBhZGQgJzMwMDAwMDQwMDAwMDAwMDAnICAnMzAwMDAwMDAwMDAwMDA0MCcgLT4gJzYwMDAwMDQwMDAwMDAwNDAnCitkZGFkZDU0NiBhZGQgJzMwMDAwMDA0MDAwMDAwMDAnICAnNDAwMDAwMDAwMDAwMDQwMCcgLT4gJzcwMDAwMDA0MDAwMDA0MDAnCitkZGFkZDU0NyBhZGQgJzMwMDAwMDAwNDAwMDAwMDAnICAnNTAwMDAwMDAwMDAwNDAwMCcgLT4gJzgwMDAwMDAwNDAwMDQwMDAnCitkZGFkZDU0OCBhZGQgJzQwMDAwMDAwMDQwMDAwMDAnICAnMzAwMDAwMDAwMDA0MDAwMCcgLT4gJzcwMDAwMDAwMDQwNDAwMDAnCitkZGFkZDU0OSBhZGQgJzQwMDAwMDAwMDA0MDAwMDAnICAnNDAwMDAwMDAwMDQwMDAwMCcgLT4gJzgwMDAwMDAwMDA4MDAwMDAnCitkZGFkZDU1MCBhZGQgJzQwMDAwMDAwMDAwNDAwMDAnICAnNTAwMDAwMDAwNDAwMDAwMCcgLT4gJzkwMDAwMDAwMDQwNDAwMDAnCitkZGFkZDU1MSBhZGQgJzUwMDAwMDAwMDAwMDQwMDAnICAnMzAwMDAwMDA0MDAwMDAwMCcgLT4gJzgwMDAwMDAwNDAwMDQwMDAnCitkZGFkZDU1MiBhZGQgJzUwMDAwMDAwMDAwMDA0MDAnICAnNDAwMDAwMDQwMDAwMDAwMCcgLT4gJzkwMDAwMDA0MDAwMDA0MDAnCitkZGFkZDU1MyBhZGQgJzUwMDAwMDAwMDAwMDAwNDAnICAnNTAwMDAwNDAwMDAwMDAwMCcgLT4gMS4wMDAwMDA0MDAwMDAwMDRFKzE2IFJvdW5kZWQKKy0tIGNoZWNrIHByb3BhZ2F0aW9uCitkZGFkZDU1NCBhZGQgJzg5OTk5OTk5OTk5OTk5OTknICAnMDAwMDAwMDAwMDAwMDAwMScgLT4gOTAwMDAwMDAwMDAwMDAwMAorZGRhZGQ1NTUgYWRkICcwMDAwMDAwMDAwMDAwMDAxJyAgJzg5OTk5OTk5OTk5OTk5OTknIC0+IDkwMDAwMDAwMDAwMDAwMDAKK2RkYWRkNTU2IGFkZCAnMDk5OTk5OTk5OTk5OTk5OScgICcwMDAwMDAwMDAwMDAwMDAxJyAtPiAxMDAwMDAwMDAwMDAwMDAwCitkZGFkZDU1NyBhZGQgJzAwMDAwMDAwMDAwMDAwMDEnICAnMDk5OTk5OTk5OTk5OTk5OScgLT4gMTAwMDAwMDAwMDAwMDAwMAorZGRhZGQ1NTggYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzQ1NTU1NTU1NTU1NTU1NTYnIC0+IDkwMDAwMDAwMDAwMDAwMDAKK2RkYWRkNTU5IGFkZCAnNDU1NTU1NTU1NTU1NTU1NicgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiA5MDAwMDAwMDAwMDAwMDAwCisKKy0tIG5lZ2F0aXZlIHVscHMKK2RkYWRkNjQ0MCBhZGQgICAxICAgLTc3ZS0xNCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTIzCitkZGFkZDY0NDEgYWRkICAgMSAgIC03N2UtMTUgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ0MiBhZGQgICAxICAgLTc3ZS0xNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ0MyBhZGQgICAxICAgLTc3ZS0xNyAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NDQgYWRkICAgMSAgIC03N2UtMTggICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDQ1IGFkZCAgIDEgICAtNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDQ2IGFkZCAgIDEgICAtNzdlLTk5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDY0NTAgYWRkICAxMCAgIC03N2UtMTQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ1MSBhZGQgIDEwICAgLTc3ZS0xNSAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMKK2RkYWRkNjQ1MiBhZGQgIDEwICAgLTc3ZS0xNiAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0NTMgYWRkICAxMCAgIC03N2UtMTcgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDU0IGFkZCAgMTAgICAtNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDU1IGFkZCAgMTAgICAtNzdlLTE5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDU2IGFkZCAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDY0NjAgYWRkICAtNzdlLTE0ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTkyMworZGRhZGQ2NDYxIGFkZCAgLTc3ZS0xNSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzCitkZGFkZDY0NjIgYWRkICAtNzdlLTE2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzCitkZGFkZDY0NjMgYWRkICAtNzdlLTE3ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDY0IGFkZCAgLTc3ZS0xOCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ2NSBhZGQgIC03N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ2NiBhZGQgIC03N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ2NDcwIGFkZCAgLTc3ZS0xNCAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTIzCitkZGFkZDY0NzEgYWRkICAtNzdlLTE1ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTIzCitkZGFkZDY0NzIgYWRkICAtNzdlLTE2ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDczIGFkZCAgLTc3ZS0xNyAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ3NCBhZGQgIC03N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ3NSBhZGQgIC03N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ3NiBhZGQgIC03N2UtOTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgdWxwcworZGRhZGQ2NDgwIGFkZCAgLTEgICAgNzdlLTE0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzCitkZGFkZDY0ODEgYWRkICAtMSAgICA3N2UtMTUgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzCitkZGFkZDY0ODIgYWRkICAtMSAgICA3N2UtMTYgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NDgzIGFkZCAgLTEgICAgNzdlLTE3ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0ODQgYWRkICAtMSAgICA3N2UtMTggICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ4NSBhZGQgIC0xICAgIDc3ZS0xOSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0ODYgYWRkICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDY0OTAgYWRkIC0xMCAgICA3N2UtMTQgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzCitkZGFkZDY0OTEgYWRkIC0xMCAgICA3N2UtMTUgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NDkyIGFkZCAtMTAgICAgNzdlLTE2ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0OTMgYWRkIC0xMCAgICA3N2UtMTcgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjQ5NCBhZGQgLTEwICAgIDc3ZS0xOCAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY0OTUgYWRkIC0xMCAgICA3N2UtMTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NDk2IGFkZCAtMTAgICAgNzdlLTk5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ2NTAwIGFkZCAgIDc3ZS0xNCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzCitkZGFkZDY1MDEgYWRkICAgNzdlLTE1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzCitkZGFkZDY1MDIgYWRkICAgNzdlLTE2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NTAzIGFkZCAgIDc3ZS0xNyAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1MDQgYWRkICAgNzdlLTE4ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjUwNSBhZGQgICA3N2UtMTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1MDYgYWRkICAgNzdlLTk5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDY1MTAgYWRkICAgNzdlLTE0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzCitkZGFkZDY1MTEgYWRkICAgNzdlLTE1ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTkyMworZGRhZGQ2NTEyIGFkZCAgIDc3ZS0xNiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1MTMgYWRkICAgNzdlLTE3ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjUxNCBhZGQgICA3N2UtMTggICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1MTUgYWRkICAgNzdlLTE5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTE2IGFkZCAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gYW5kIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkZGFkZDY1NDAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JworZGRhZGQ2NTQxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NDIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU0MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTQ0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NDUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU0NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTQ3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NDggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU0OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTUwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NTEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU1MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTUzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NTQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU1NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTU2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2RkYWRkNjU1NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTU4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NTkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZGRhZGQ2NTYwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2RkYWRkNjU2MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTYyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NjMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU2NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTY1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NjYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU2NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTY4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NjkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU3MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTcxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NzIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU3MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTc0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDY1NzUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU3NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnCitkZGFkZDY1NzcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNjU3OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ2NTc5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitkZGFkZDc1NDAgYWRkICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU0MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTQyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkZGFkZDc1NTAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JworZGRhZGQ3NTUxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NTIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU1MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTU0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NTUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU1NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTU3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NTggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU1OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTYwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NjEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU2MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTYzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NjQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzU2NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTY2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2RkYWRkNzU2NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTY4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1NjkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gdmVyaWZ5IGEgcXVlcnkKK3JvdW5kaW5nOiAgICAgZG93bgorZGRhZGQ3NjYxIGFkZCAxZS0zOTggOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NjYyIGFkZCAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQKK2RkYWRkNzY2MyBhZGQgMWUtMzg4IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzY2NCBhZGQgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBSb3VuZGVkCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworZGRhZGQ3NzAxIGFkZCA1LjAwIDEuMDBFLTMgLT4gNS4wMDEwMAorZGRhZGQ3NzAyIGFkZCAwMC4wMCAwLjAwMCAgLT4gMC4wMDAKK2RkYWRkNzcwMyBhZGQgMDAuMDAgMEUtMyAgIC0+IDAuMDAwCitkZGFkZDc3MDQgYWRkIDBFLTMgIDAwLjAwICAtPiAwLjAwMAorCitkZGFkZDc3MTAgYWRkIDBFKzMgIDAwLjAwICAtPiAwLjAwCitkZGFkZDc3MTEgYWRkIDBFKzMgIDAwLjAgICAtPiAwLjAKK2RkYWRkNzcxMiBhZGQgMEUrMyAgMDAuICAgIC0+IDAKK2RkYWRkNzcxMyBhZGQgMEUrMyAgMDAuRSsxIC0+IDBFKzEKK2RkYWRkNzcxNCBhZGQgMEUrMyAgMDAuRSsyIC0+IDBFKzIKK2RkYWRkNzcxNSBhZGQgMEUrMyAgMDAuRSszIC0+IDBFKzMKK2RkYWRkNzcxNiBhZGQgMEUrMyAgMDAuRSs0IC0+IDBFKzMKK2RkYWRkNzcxNyBhZGQgMEUrMyAgMDAuRSs1IC0+IDBFKzMKK2RkYWRkNzcxOCBhZGQgMEUrMyAgLTAwLjAgICAtPiAwLjAKK2RkYWRkNzcxOSBhZGQgMEUrMyAgLTAwLiAgICAtPiAwCitkZGFkZDc3MzEgYWRkIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQorCitkZGFkZDc3MjAgYWRkIDAwLjAwICAwRSszICAtPiAwLjAwCitkZGFkZDc3MjEgYWRkIDAwLjAgICAwRSszICAtPiAwLjAKK2RkYWRkNzcyMiBhZGQgMDAuICAgIDBFKzMgIC0+IDAKK2RkYWRkNzcyMyBhZGQgMDAuRSsxIDBFKzMgIC0+IDBFKzEKK2RkYWRkNzcyNCBhZGQgMDAuRSsyIDBFKzMgIC0+IDBFKzIKK2RkYWRkNzcyNSBhZGQgMDAuRSszIDBFKzMgIC0+IDBFKzMKK2RkYWRkNzcyNiBhZGQgMDAuRSs0IDBFKzMgIC0+IDBFKzMKK2RkYWRkNzcyNyBhZGQgMDAuRSs1IDBFKzMgIC0+IDBFKzMKK2RkYWRkNzcyOCBhZGQgLTAwLjAwIDBFKzMgIC0+IDAuMDAKK2RkYWRkNzcyOSBhZGQgLTAwLjAgIDBFKzMgIC0+IDAuMAorZGRhZGQ3NzMwIGFkZCAtMDAuICAgMEUrMyAgLT4gMAorCitkZGFkZDc3MzIgYWRkICAwICAgICAwICAgICAtPiAgMAorZGRhZGQ3NzMzIGFkZCAgMCAgICAtMCAgICAgLT4gIDAKK2RkYWRkNzczNCBhZGQgLTAgICAgIDAgICAgIC0+ICAwCitkZGFkZDc3MzUgYWRkIC0wICAgIC0wICAgICAtPiAtMCAgICAgLS0gSUVFRSA4NTQgc3BlY2lhbCBjYXNlCisKK2RkYWRkNzczNiBhZGQgIDEgICAgLTEgICAgIC0+ICAwCitkZGFkZDc3MzcgYWRkIC0xICAgIC0xICAgICAtPiAtMgorZGRhZGQ3NzM4IGFkZCAgMSAgICAgMSAgICAgLT4gIDIKK2RkYWRkNzczOSBhZGQgLTEgICAgIDEgICAgIC0+ICAwCisKK2RkYWRkNzc0MSBhZGQgIDAgICAgLTEgICAgIC0+IC0xCitkZGFkZDc3NDIgYWRkIC0wICAgIC0xICAgICAtPiAtMQorZGRhZGQ3NzQzIGFkZCAgMCAgICAgMSAgICAgLT4gIDEKK2RkYWRkNzc0NCBhZGQgLTAgICAgIDEgICAgIC0+ICAxCitkZGFkZDc3NDUgYWRkIC0xICAgICAwICAgICAtPiAtMQorZGRhZGQ3NzQ2IGFkZCAtMSAgICAtMCAgICAgLT4gLTEKK2RkYWRkNzc0NyBhZGQgIDEgICAgIDAgICAgIC0+ICAxCitkZGFkZDc3NDggYWRkICAxICAgIC0wICAgICAtPiAgMQorCitkZGFkZDc3NTEgYWRkICAwLjAgIC0xICAgICAtPiAtMS4wCitkZGFkZDc3NTIgYWRkIC0wLjAgIC0xICAgICAtPiAtMS4wCitkZGFkZDc3NTMgYWRkICAwLjAgICAxICAgICAtPiAgMS4wCitkZGFkZDc3NTQgYWRkIC0wLjAgICAxICAgICAtPiAgMS4wCitkZGFkZDc3NTUgYWRkIC0xLjAgICAwICAgICAtPiAtMS4wCitkZGFkZDc3NTYgYWRkIC0xLjAgIC0wICAgICAtPiAtMS4wCitkZGFkZDc3NTcgYWRkICAxLjAgICAwICAgICAtPiAgMS4wCitkZGFkZDc3NTggYWRkICAxLjAgIC0wICAgICAtPiAgMS4wCisKK2RkYWRkNzc2MSBhZGQgIDAgICAgLTEuMCAgIC0+IC0xLjAKK2RkYWRkNzc2MiBhZGQgLTAgICAgLTEuMCAgIC0+IC0xLjAKK2RkYWRkNzc2MyBhZGQgIDAgICAgIDEuMCAgIC0+ICAxLjAKK2RkYWRkNzc2NCBhZGQgLTAgICAgIDEuMCAgIC0+ICAxLjAKK2RkYWRkNzc2NSBhZGQgLTEgICAgIDAuMCAgIC0+IC0xLjAKK2RkYWRkNzc2NiBhZGQgLTEgICAgLTAuMCAgIC0+IC0xLjAKK2RkYWRkNzc2NyBhZGQgIDEgICAgIDAuMCAgIC0+ICAxLjAKK2RkYWRkNzc2OCBhZGQgIDEgICAgLTAuMCAgIC0+ICAxLjAKKworZGRhZGQ3NzcxIGFkZCAgMC4wICAtMS4wICAgLT4gLTEuMAorZGRhZGQ3NzcyIGFkZCAtMC4wICAtMS4wICAgLT4gLTEuMAorZGRhZGQ3NzczIGFkZCAgMC4wICAgMS4wICAgLT4gIDEuMAorZGRhZGQ3Nzc0IGFkZCAtMC4wICAgMS4wICAgLT4gIDEuMAorZGRhZGQ3Nzc1IGFkZCAtMS4wICAgMC4wICAgLT4gLTEuMAorZGRhZGQ3Nzc2IGFkZCAtMS4wICAtMC4wICAgLT4gLTEuMAorZGRhZGQ3Nzc3IGFkZCAgMS4wICAgMC4wICAgLT4gIDEuMAorZGRhZGQ3Nzc4IGFkZCAgMS4wICAtMC4wICAgLT4gIDEuMAorCistLSBTcGVjaWFscworZGRhZGQ3NzgwIGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZGFkZDc3ODEgYWRkIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RkYWRkNzc4MiBhZGQgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGRhZGQ3NzgzIGFkZCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkZGFkZDc3ODQgYWRkIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc4NSBhZGQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGRhZGQ3Nzg2IGFkZCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkZGFkZDc3ODcgYWRkIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc4OCBhZGQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRhZGQ3Nzg5IGFkZCAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZGFkZDc3OTAgYWRkIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc5MSBhZGQgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRhZGQ3NzkyIGFkZCAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZGFkZDc3OTMgYWRkICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkYWRkNzc5NCBhZGQgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2RkYWRkNzgwMCBhZGQgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4MDEgYWRkICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RkYWRkNzgwMiBhZGQgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODAzIGFkZCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkZGFkZDc4MDQgYWRkICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RkYWRkNzgwNSBhZGQgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODA2IGFkZCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkZGFkZDc4MDcgYWRkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkYWRkNzgwOCBhZGQgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODA5IGFkZCAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzgxMCBhZGQgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODExIGFkZCAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZGFkZDc4MTIgYWRkICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkYWRkNzgxMyBhZGQgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRhZGQ3ODE0IGFkZCAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkZGFkZDc4MTUgYWRkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRhZGQ3ODIxIGFkZCAgTmFOIC1JbmYgICAgLT4gIE5hTgorZGRhZGQ3ODIyIGFkZCAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRhZGQ3ODIzIGFkZCAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRhZGQ3ODI0IGFkZCAgTmFOIC0wICAgICAgLT4gIE5hTgorZGRhZGQ3ODI1IGFkZCAgTmFOICAwICAgICAgLT4gIE5hTgorZGRhZGQ3ODI2IGFkZCAgTmFOICAxICAgICAgLT4gIE5hTgorZGRhZGQ3ODI3IGFkZCAgTmFOICAxMDAwICAgLT4gIE5hTgorZGRhZGQ3ODI4IGFkZCAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRhZGQ3ODI5IGFkZCAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODMwIGFkZCAtSW5mICBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODMxIGFkZCAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODMyIGFkZCAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODMzIGFkZCAtMCAgICBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODM0IGFkZCAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODM1IGFkZCAgMSAgICBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODM2IGFkZCAgMTAwMCBOYU4gICAgLT4gIE5hTgorZGRhZGQ3ODM3IGFkZCAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZGFkZDc4NDEgYWRkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODQyIGFkZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg0MyBhZGQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NDQgYWRkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODQ1IGFkZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg0NiBhZGQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NDcgYWRkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODQ4IGFkZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg0OSBhZGQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NTAgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODUxIGFkZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg1MiBhZGQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NTMgYWRkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODU0IGFkZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg1NSBhZGQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NTYgYWRkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODU3IGFkZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkNzg1OCBhZGQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4NTkgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZGFkZDc4NjEgYWRkICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZGRhZGQ3ODYyIGFkZCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2RkYWRkNzg2MyBhZGQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitkZGFkZDc4NjQgYWRkICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZGRhZGQ3ODY1IGFkZCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2RkYWRkNzg2NiBhZGQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitkZGFkZDc4NjcgYWRkIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZGRhZGQ3ODY4IGFkZCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2RkYWRkNzg2OSBhZGQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZGRhZGQ3ODcxIGFkZCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODcyIGFkZCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODczIGFkZCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODc0IGFkZCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODc1IGFkZCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODc2IGFkZCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODc3IGFkZCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODc4IGFkZCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODc5IGFkZCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODgwIGFkZCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODgxIGFkZCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRhZGQ3ODgyIGFkZCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitkZGFkZDc4ODMgYWRkIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitkZGFkZDc4ODQgYWRkICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2RkYWRkNzg4NSBhZGQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gSGVyZSB3ZSBleHBsb3JlIG5lYXIgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4KK2RkYWRkNzU3NSBhZGQgIDFFLTM4MyAtMUUtMzk4IC0+ICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbAorZGRhZGQ3NTc2IGFkZCAtMUUtMzgzICsxRS0zOTggLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCisKKy0tIGFuZCBhbm90aGVyIGN1cmlvdXMgY2FzZQorZGRhZGQ3NTc3IGFkZCA3LjAwMDAwMDAwMDAwMEUtMzg1IC0xLjAwMDAwRS0zOTEgLT4gNi45OTk5OTkwMDAwMDBFLTM4NSBTdWJub3JtYWwKKworLS0gY2hlY2sgb3ZlcmZsb3cgZWRnZSBjYXNlCistLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkYWRkNzk3MiBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGFkZDc5NzMgYWRkICAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk3NCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTc1IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk3NiBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5NzcgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA4RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTc4IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgN0UrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk3OSBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDZFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5ODAgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA1RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTgxIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNEUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTgyIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgM0UrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTgzIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMkUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTg0IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorCitkZGFkZDc5ODUgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkYWRkNzk4NiBhZGQgICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk4NyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk4OCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTg5IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5OTAgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC04RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk5MSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTdFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTkyIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNkUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5OTMgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC01RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk5NCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTRFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc5OTUgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0zRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3OTk2IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMkUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzk5NyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCisKKy0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cworcm91bmRpbmc6ICAgICBkb3duCitkZGFkZDcxMTAwIGFkZCAxZSsyIC0xZS0zODMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTAxIGFkZCAxZSsxIC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTEwMyBhZGQgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTA0IGFkZCAxZS0xIC0xZS0zODMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTA1IGFkZCAxZS0yIC0xZS0zODMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTEwNiBhZGQgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTA3IGFkZCAxZS00IC0xZS0zODMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTA4IGFkZCAxZS01IC0xZS0zODMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTEwOSBhZGQgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgICBjZWlsaW5nCitkZGFkZDcxMTEwIGFkZCAtMWUrMiArMWUtMzgzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTExMSBhZGQgLTFlKzEgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTEzIGFkZCAgICAtMSArMWUtMzgzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTE0IGFkZCAtMWUtMSArMWUtMzgzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTExNSBhZGQgLTFlLTIgKzFlLTM4MyAgIC0+IC0wLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTE2IGFkZCAtMWUtMyArMWUtMzgzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTE3IGFkZCAtMWUtNCArMWUtMzgzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRhZGQ3MTExOCBhZGQgLTFlLTUgKzFlLTM4MyAgIC0+IC0wLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGFkZDcxMTE5IGFkZCAtMWUtNiArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UKK3JvdW5kaW5nOiAgICAgaGFsZl9ldmVuCisKK2RkYWRkNzEzMDAgYWRkIDFFMTYgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzEwIGFkZCAxRTE2ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMxMSBhZGQgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMTIgYWRkIDFFMTYgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzEzIGFkZCAxRTE2ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMxNCBhZGQgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMTUgYWRkIDFFMTYgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzE2IGFkZCAxRTE2ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMxNyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMTggYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzE5IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMyMCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMjEgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzIyIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMyMyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMjQgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzI1IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMyNiBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMjcgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzI4IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMyOSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMzAgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzMxIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMzMiBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMzMgYWRkIDFFMTYgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzM0IGFkZCAxRTE2ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMzNSBhZGQgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMzYgYWRkIDFFMTYgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzM3IGFkZCAxRTE2ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTMzOCBhZGQgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzMzkgYWRkIDFFMTYgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCisKK2RkYWRkNzEzNDAgYWRkIDFFMTYgIC01MDAwMDAwLjAwMDAxMDAwMSAgIC0+ICA5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzQxIGFkZCAxRTE2ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorCitkZGFkZDcxMzQ5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNCAgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNTAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM1MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzUyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNTMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM1NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzU1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNTYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM1NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzU4IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNTkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM2MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzYxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNjIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM2MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzY0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNjUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM2NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzY4IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNjkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM3MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzcxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNzIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM3MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzc0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNzUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM3NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzc3IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzNzggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM3OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzgwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzODEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM4MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzgzIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzODQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM4NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzg2IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzODcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM4OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzg5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAxICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzOTAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM5MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzkyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAxICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzOTMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTM5NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxMzk1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAxICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzEzOTYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorCistLSBNb3JlIEdEIGVkZ2UgY2FzZXMsIHdoZXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdW5hZGp1c3RlZAorLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMAorZGRhZGQ3MTQyMCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDIxIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDIyIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQyMyBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDI0IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDI1IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQorZGRhZGQ3MTQyNiBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDI3IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKK2RkYWRkNzE0MjggYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOAorZGRhZGQ3MTQyOSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05CitkZGFkZDcxNDMwIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCitkZGFkZDcxNDMxIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExCitkZGFkZDcxNDMyIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyCitkZGFkZDcxNDMzIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCitkZGFkZDcxNDM0IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0CitkZGFkZDcxNDM1IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1CitkZGFkZDcxNDM2IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2CitkZGFkZDcxNDM3IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3CitkZGFkZDcxNDM4IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4CitkZGFkZDcxNDM5IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIHJldmVyc2VkIDAKK2RkYWRkNzE0NDAgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDQxIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NDIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NDMgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAwIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDQ0IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NDUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NDYgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAwIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGFkZDcxNDQ3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworZGRhZGQ3MTQ0OCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2RkYWRkNzE0NDkgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05CitkZGFkZDcxNDUwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2RkYWRkNzE0NTEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZGRhZGQ3MTQ1MiBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyCitkZGFkZDcxNDUzIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2RkYWRkNzE0NTQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZGRhZGQ3MTQ1NSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1CitkZGFkZDcxNDU2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2RkYWRkNzE0NTcgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworZGRhZGQ3MTQ1OCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4CitkZGFkZDcxNDU5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgRXMgb24gdGhlIDAKK2RkYWRkNzE0NjAgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjMgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjYgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjcgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NjkgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NzAgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NzEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NzIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NzMgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NzQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkYWRkNzE0NzUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKKy0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQKK2RkYWRkNzE0NzYgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZGRhZGQ3MTQ3NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkZGFkZDcxNDc4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RkYWRkNzE0NzkgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorCistLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMAorcm91bmRpbmc6ICAgIGhhbGZfdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkYWRkNzE1MDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTAxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTUwMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1MDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRhZGQ3MTUxMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RkYWRkNzE1MTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkYWRkNzE1MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTIxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTUyMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRhZGQ3MTUzMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RkYWRkNzE1MzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkYWRkNzE1NDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTQxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTU0MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1NDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRhZGQ3MTU1MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RkYWRkNzE1NTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICB1cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRhZGQ3MTU2MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1NjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTYyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTU2MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkZGFkZDcxNTcxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAorZGRhZGQ3MTU3MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIGRvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkYWRkNzE1ODAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNTgxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTU4MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE1ODMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRhZGQ3MTU5MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RkYWRkNzE1OTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICBjZWlsaW5nCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGFkZDcxNjAwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRhZGQ3MTYwMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE2MDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGFkZDcxNjAzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkYWRkNzE2MTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkZGFkZDcxNjEyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCistLSBhbmQgdGhlIGV4dHJhLXNwZWNpYWwgdWdseSBjYXNlOyB1bnVzdWFsIG1pbnVzZXMgbWFya2VkIGJ5IC0tICoKK3JvdW5kaW5nOiAgICBmbG9vcgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRhZGQ3MTYyMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkYWRkNzE2MjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCitkZGFkZDcxNjIyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorZGRhZGQ3MTYyMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkZGFkZDcxNjMxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKgorZGRhZGQ3MTYzMiBhZGQgIDExICAgICAtMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoKKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitkZGFkZDcxNzAxIGFkZCAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTAKK2RkYWRkNzE3MDIgYWRkIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MAorZGRhZGQ3MTcwMyBhZGQgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwCitkZGFkZDcxNzA0IGFkZCAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQKK2RkYWRkNzE3MDUgYWRkIDEzMEUtMiAgIC0xMjBFLTIgLT4gMC4xMAorZGRhZGQ3MTcwNiBhZGQgMTMwRS0yICAgLTEyRS0xICAtPiAwLjEwCitkZGFkZDcxNzA3IGFkZCAxMzBFLTIgICAtMUUwICAgIC0+IDAuMzAKK2RkYWRkNzE3MDggYWRkIDFFMiAgICAgIC0xRTQgICAgLT4gLTkuOUUrMworCistLSBxdWVyeSBmcm9tIFZpbmNlbnQgS3VsYW5kYWlzYW15Cityb3VuZGluZzogY2VpbGluZworZGRhZGQ3MTgwMSAgYWRkICA3Ljg4MjI3NzM4MDU4NjJFKzI3NyAgICAtNS4xNzU3NTAzODIwNjYzRS0yMSAtPiA3Ljg4MjI3NzM4MDU4NjIwMEUrMjc3IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTgwMiAgYWRkICA3Ljg4MjI3NzM4MDU4NjIwMEUrMjc3ICAxMi4zNDEgICAgICAgICAgICAgICAtPiA3Ljg4MjI3NzM4MDU4NjIwMUUrMjc3IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3MTgwMyAgYWRkICA3Ljg4MjI3NzM4MDU4NjIwMUUrMjc3ICAyLjcyNzA1NDUwNDY2MTNFLTMxICAtPiA3Ljg4MjI3NzM4MDU4NjIwMkUrMjc3IEluZXhhY3QgUm91bmRlZAorCitkZGFkZDcxODExICBhZGQgICAgICAgICAgICAgICAgICAgMTIuMzQxIC01LjE3NTc1MDM4MjA2NjNFLTIxIC0+IDEyLjM0MTAwMDAwMDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxODEyICBhZGQgICAgICAgIDEyLjM0MTAwMDAwMDAwMDAwIDIuNzI3MDU0NTA0NjYxM0UtMzEgIC0+IDEyLjM0MTAwMDAwMDAwMDAxICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDcxODEzICBhZGQgICAgICAgIDEyLjM0MTAwMDAwMDAwMDAxIDcuODgyMjc3MzgwNTg2MkUrMjc3IC0+IDcuODgyMjc3MzgwNTg2MjAxRSsyNzcgSW5leGFjdCBSb3VuZGVkCisKKy0tIEdhcHB5IGNvZWZmaWNpZW50czsgY2hlY2sgcmVzaWR1ZSBoYW5kbGluZyBldmVuIHdpdGggZnVsbCBjb2VmZmljaWVudCBnYXAKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworZGRhZGQ3NTAwMSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiAxICAgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NworZGRhZGQ3NTAwMiBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiAwLjYgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDAzIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMDQgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAwNSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS00ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDA2IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMDcgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAwOCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS03ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDA5IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMTAgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAxMSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDEyIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMTMgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTIgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAxNCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDE1IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMTYgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTUgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAxNyBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDE4IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwMTkgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTggIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTAyMCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDIxIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcAorZGRhZGQ3NTAzMCBhZGQgMTIzNDU2NzggMSAgICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzkKK2RkYWRkNzUwMzEgYWRkIDEyMzQ1Njc4IDAuMSAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEKK2RkYWRkNzUwMzIgYWRkIDEyMzQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyCitkZGFkZDc1MDMzIGFkZCAxMjM0NTY3OCAwLjEyMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjMKK2RkYWRkNzUwMzQgYWRkIDEyMzQ1Njc4IDAuMTIzNCAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQKK2RkYWRkNzUwMzUgYWRkIDEyMzQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1CitkZGFkZDc1MDM2IGFkZCAxMjM0NTY3OCAwLjEyMzQ1NiAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTYKK2RkYWRkNzUwMzcgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2NyAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1NjcKK2RkYWRkNzUwMzggYWRkIDEyMzQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4CitkZGFkZDc1MDM5IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4OSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNDAgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA0MSBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDQyIGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTEgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNDMgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDEgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA0NCBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDQ1IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDEgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNDYgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDEgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA0NyBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDQ4IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNDkgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAxMjM0NTYKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RkYWRkNzUwNTAgYWRkIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA1MSBhZGQgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDUyIGFkZCAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNTMgYWRkIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA1NCBhZGQgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDU1IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNTYgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA1NyBhZGQgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDYwIGFkZCAxMjM0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNjEgYWRkIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA2MiBhZGQgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDYzIGFkZCAxMjM0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNjQgYWRkIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA2NSBhZGQgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDY2IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNjcgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQorcm91bmRpbmc6IHVwCitkZGFkZDc1MDcwIGFkZCAxMjM0NTY3OCAxRS04ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMQorZGRhZGQ3NTA3MSBhZGQgMTIzNDU2NzggMUUtOSAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDcyIGFkZCAxMjM0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNzMgYWRkIDEyMzQ1Njc4IDFFLTExICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA3NCBhZGQgMTIzNDU2NzggMUUtMTIgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDc1IGFkZCAxMjM0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNzYgYWRkIDEyMzQ1Njc4IDFFLTE0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA3NyBhZGQgMTIzNDU2NzggMUUtMTUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDc4IGFkZCAxMjM0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwNzkgYWRkIDEyMzQ1Njc4IDFFLTE3ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA4MCBhZGQgMTIzNDU2NzggMUUtMTggICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDgxIGFkZCAxMjM0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwODIgYWRkIDEyMzQ1Njc4IDFFLTIwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA4MyBhZGQgMTIzNDU2NzggMUUtMjUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDg0IGFkZCAxMjM0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwODUgYWRkIDEyMzQ1Njc4IDFFLTMxICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA4NiBhZGQgMTIzNDU2NzggMUUtMzIgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGFkZDc1MDg3IGFkZCAxMjM0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkNzUwODggYWRkIDEyMzQ1Njc4IDFFLTM0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRhZGQ3NTA4OSBhZGQgMTIzNDU2NzggMUUtMzUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCisKKy0tIFB1bml0J3MKK2RkYWRkNzUxMDAgYWRkIDEuMDAwIC0yMDAuMDAwICAgICAgICAgICAgICAgICAgIC0+IC0xOTkuMDAwCisKKy0tIFJvdW5kaW5nIHN3YXRoZQorcm91bmRpbmc6IGhhbGZfZXZlbgorZGRhZGQ4MTEwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZAorZGRhZGQ4MTEwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMTAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODExMDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTEwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMTA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODExMDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTEwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMTA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODExMDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTEyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTEyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitkZGFkZDgxMjAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkCitkZGFkZDgxMjAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEyMDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTIwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMjA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEyMDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTIwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMjA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEyMDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTIwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMjIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEyMjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9kb3duCitkZGFkZDgxMzAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkCitkZGFkZDgxMzAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEzMDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTMwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMzA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEzMDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTMwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMzA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEzMDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTMwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxMzIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODEzMjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogdXAKK2RkYWRkODE0MDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQKK2RkYWRkODE0MDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTQwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNDAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE0MDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTQwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNDA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE0MDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTQwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNDA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE0MTEgYWRkIC0uMjM5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTQyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNDIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RkYWRkODE1MDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQKK2RkYWRkODE1MDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTUwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNTAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE1MDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTUwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNTA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE1MDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTUwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNTA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE1MTEgYWRkIC0uMjM5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTUyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE1MjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBjZWlsaW5nCitkZGFkZDgxNjAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkCitkZGFkZDgxNjAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE2MDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTYwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNjA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE2MDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTYwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNjA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE2MDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTYwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNjExIGFkZCAtLjIzOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE2MjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTYyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGZsb29yCitkZGFkZDgxNzAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkCitkZGFkZDgxNzAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE3MDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTcwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNzA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE3MDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTcwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNzA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE3MDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTcwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNzExIGFkZCAtLjIzOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE3MjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxNzIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IDA1dXAKK2RkYWRkODE4MDAgYWRkICAuMjAwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjAgIFJvdW5kZWQKK2RkYWRkODE4MDEgYWRkICAuMjAwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTgwMiBhZGQgIC4yMDEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxODAzIGFkZCAgLjIwNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE4MDQgYWRkICAuMjA1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTgwNyBhZGQgIC4yMDYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxODA4IGFkZCAgLjIwNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE4MDkgYWRkICAuMjA5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTgxMSBhZGQgLS4yMDk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxODIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTgyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ4MTkwMCBhZGQgIC4yMTAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgUm91bmRlZAorZGRhZGQ4MTkwMSBhZGQgIC4yMTAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxOTAyIGFkZCAgLjIxMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE5MDMgYWRkICAuMjE1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTkwNCBhZGQgIC4yMTUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxOTA3IGFkZCAgLjIxNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODE5MDggYWRkICAuMjE3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MTkwOSBhZGQgIC4yMTk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgxOTExIGFkZCAtLjIxOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ4MjAwMCBhZGQgIC4yNDAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgUm91bmRlZAorZGRhZGQ4MjAwMSBhZGQgIC4yNDAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMDAyIGFkZCAgLjI0MTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIwMDMgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjAwNCBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMDA3IGFkZCAgLjI0NjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIwMDggYWRkICAuMjQ3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjAwOSBhZGQgIC4yNDk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMDExIGFkZCAtLjI0OTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ4MjEwMCBhZGQgIC4yNTAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgUm91bmRlZAorZGRhZGQ4MjEwMSBhZGQgIC4yNTAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMTAyIGFkZCAgLjI1MTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIxMDMgYWRkICAuMjU1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjEwNCBhZGQgIC4yNTUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMTA3IGFkZCAgLjI1NjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIxMDggYWRkICAuMjU3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjEwOSBhZGQgIC4yNTk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMTExIGFkZCAtLjI1OTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ4MjIwMCBhZGQgIC4yNjAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgUm91bmRlZAorZGRhZGQ4MjIwMSBhZGQgIC4yNjAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMjAyIGFkZCAgLjI2MTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIyMDMgYWRkICAuMjY1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjIwNCBhZGQgIC4yNjUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMjA3IGFkZCAgLjI2NjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIyMDggYWRkICAuMjY3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjIwOSBhZGQgIC4yNjk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMjExIGFkZCAtLjI2OTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKKworZGRhZGQ4MjMwMCBhZGQgIC4yOTAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgUm91bmRlZAorZGRhZGQ4MjMwMSBhZGQgIC4yOTAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMzAyIGFkZCAgLjI5MTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIzMDMgYWRkICAuMjk1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjMwNCBhZGQgIC4yOTUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMzA3IGFkZCAgLjI5NjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkYWRkODIzMDggYWRkICAuMjk3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZAorZGRhZGQ4MjMwOSBhZGQgIC4yOTk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkCitkZGFkZDgyMzExIGFkZCAtLjI5OTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gTnVsbCB0ZXN0cworZGRhZGQ5OTkwIGFkZCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYWRkOTk5MSBhZGQgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQW5kLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQW5kLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRhOWY5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRBbmQuZGVjVGVzdApAQCAtMCwwICsxLDM0NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZEFuZC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIEFORCBmb3IgZGVjRG91YmxlcyAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQorZGRhbmQwMDEgYW5kICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwCitkZGFuZDAwMiBhbmQgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDAKK2RkYW5kMDAzIGFuZCAgICAgICAgICAgICAxICAgIDAgLT4gICAgMAorZGRhbmQwMDQgYW5kICAgICAgICAgICAgIDEgICAgMSAtPiAgICAxCitkZGFuZDAwNSBhbmQgICAgICAgICAgMTEwMCAxMDEwIC0+IDEwMDAKKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCistLSAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRhbmQwMDYgYW5kIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RkYW5kMDA3IGFuZCAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkZGFuZDAwOCBhbmQgMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZGRhbmQwMDkgYW5kIDEwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAKK2RkYW5kMDEwIGFuZCAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkZGFuZDAxMSBhbmQgMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZGRhbmQwMTIgYW5kIDAxMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RkYW5kMDEzIGFuZCAwMTAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwCisKKy0tIFZhcmlvdXMgbGVuZ3RocworLS0gICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkYW5kMDIxIGFuZCAxMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTExMTExMTExCitkZGFuZDAyNCBhbmQgMTExMTExMTExMTExMTExMSAgMTExMTExMTExMTExMTExICAtPiAgIDExMTExMTExMTExMTExMQorZGRhbmQwMjUgYW5kIDExMTExMTExMTExMTExMTEgICAxMTExMTExMTExMTExMSAgLT4gICAgMTExMTExMTExMTExMTEKK2RkYW5kMDI2IGFuZCAxMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTEgIC0+ICAgICAxMTExMTExMTExMTExCitkZGFuZDAyNyBhbmQgMTExMTExMTExMTExMTExMSAgICAgMTExMTExMTExMTExICAtPiAgICAgIDExMTExMTExMTExMQorZGRhbmQwMjggYW5kIDExMTExMTExMTExMTExMTEgICAgICAxMTExMTExMTExMSAgLT4gICAgICAgMTExMTExMTExMTEKK2RkYW5kMDI5IGFuZCAxMTExMTExMTExMTExMTExICAgICAgIDExMTExMTExMTEgIC0+ICAgICAgICAxMTExMTExMTExCitkZGFuZDAzMCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgMTExMTExMTExICAtPiAgICAgICAgIDExMTExMTExMQorZGRhbmQwMzEgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAxMTExMTExMSAgLT4gICAgICAgICAgMTExMTExMTEKK2RkYW5kMDMyIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgIDExMTExMTEgIC0+ICAgICAgICAgICAxMTExMTExCitkZGFuZDAzMyBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgMTExMTExICAtPiAgICAgICAgICAgIDExMTExMQorZGRhbmQwMzQgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAxMTExMSAgLT4gICAgICAgICAgICAgMTExMTEKK2RkYW5kMDM1IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgIDExMTEgIC0+ICAgICAgICAgICAgICAxMTExCitkZGFuZDAzNiBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgMTExICAtPiAgICAgICAgICAgICAgIDExMQorZGRhbmQwMzcgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAxMSAgLT4gICAgICAgICAgICAgICAgMTEKK2RkYW5kMDM4IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgIDEgIC0+ICAgICAgICAgICAgICAgICAxCitkZGFuZDAzOSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgICAwICAtPiAgICAgICAgICAgICAgICAgMAorCitkZGFuZDA0MCBhbmQgMTExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAxMTExMTExMTExMTExMTExCitkZGFuZDA0MSBhbmQgIDExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgMTExMTExMTExMTExMTExCitkZGFuZDA0MiBhbmQgIDExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgMTExMTExMTExMTExMTExCitkZGFuZDA0MyBhbmQgICAxMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgIDExMTExMTExMTExMTExCitkZGFuZDA0NCBhbmQgICAgMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAxMTExMTExMTExMTExCitkZGFuZDA0NSBhbmQgICAgIDExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgMTExMTExMTExMTExCitkZGFuZDA0NiBhbmQgICAgICAxMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgIDExMTExMTExMTExCitkZGFuZDA0NyBhbmQgICAgICAgMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAxMTExMTExMTExCitkZGFuZDA0OCBhbmQgICAgICAgIDExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgMTExMTExMTExCitkZGFuZDA0OSBhbmQgICAgICAgICAxMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgIDExMTExMTExCitkZGFuZDA1MCBhbmQgICAgICAgICAgMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAxMTExMTExCitkZGFuZDA1MSBhbmQgICAgICAgICAgIDExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgMTExMTExCitkZGFuZDA1MiBhbmQgICAgICAgICAgICAxMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgIDExMTExCitkZGFuZDA1MyBhbmQgICAgICAgICAgICAgMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAxMTExCitkZGFuZDA1NCBhbmQgICAgICAgICAgICAgIDExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgMTExCitkZGFuZDA1NSBhbmQgICAgICAgICAgICAgICAxMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgIDExCitkZGFuZDA1NiBhbmQgICAgICAgICAgICAgICAgMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgICAxCitkZGFuZDA1NyBhbmQgICAgICAgICAgICAgICAgMCAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgICAwCisKK2RkYW5kMTUwIGFuZCAxMTExMTExMTExICAxICAtPiAgMQorZGRhbmQxNTEgYW5kICAxMTExMTExMTEgIDEgIC0+ICAxCitkZGFuZDE1MiBhbmQgICAxMTExMTExMSAgMSAgLT4gIDEKK2RkYW5kMTUzIGFuZCAgICAxMTExMTExICAxICAtPiAgMQorZGRhbmQxNTQgYW5kICAgICAxMTExMTEgIDEgIC0+ICAxCitkZGFuZDE1NSBhbmQgICAgICAxMTExMSAgMSAgLT4gIDEKK2RkYW5kMTU2IGFuZCAgICAgICAxMTExICAxICAtPiAgMQorZGRhbmQxNTcgYW5kICAgICAgICAxMTEgIDEgIC0+ICAxCitkZGFuZDE1OCBhbmQgICAgICAgICAxMSAgMSAgLT4gIDEKK2RkYW5kMTU5IGFuZCAgICAgICAgICAxICAxICAtPiAgMQorCitkZGFuZDE2MCBhbmQgMTExMTExMTExMSAgMCAgLT4gIDAKK2RkYW5kMTYxIGFuZCAgMTExMTExMTExICAwICAtPiAgMAorZGRhbmQxNjIgYW5kICAgMTExMTExMTEgIDAgIC0+ICAwCitkZGFuZDE2MyBhbmQgICAgMTExMTExMSAgMCAgLT4gIDAKK2RkYW5kMTY0IGFuZCAgICAgMTExMTExICAwICAtPiAgMAorZGRhbmQxNjUgYW5kICAgICAgMTExMTEgIDAgIC0+ICAwCitkZGFuZDE2NiBhbmQgICAgICAgMTExMSAgMCAgLT4gIDAKK2RkYW5kMTY3IGFuZCAgICAgICAgMTExICAwICAtPiAgMAorZGRhbmQxNjggYW5kICAgICAgICAgMTEgIDAgIC0+ICAwCitkZGFuZDE2OSBhbmQgICAgICAgICAgMSAgMCAgLT4gIDAKKworZGRhbmQxNzAgYW5kIDEgIDExMTExMTExMTEgIC0+ICAxCitkZGFuZDE3MSBhbmQgMSAgIDExMTExMTExMSAgLT4gIDEKK2RkYW5kMTcyIGFuZCAxICAgIDExMTExMTExICAtPiAgMQorZGRhbmQxNzMgYW5kIDEgICAgIDExMTExMTEgIC0+ICAxCitkZGFuZDE3NCBhbmQgMSAgICAgIDExMTExMSAgLT4gIDEKK2RkYW5kMTc1IGFuZCAxICAgICAgIDExMTExICAtPiAgMQorZGRhbmQxNzYgYW5kIDEgICAgICAgIDExMTEgIC0+ICAxCitkZGFuZDE3NyBhbmQgMSAgICAgICAgIDExMSAgLT4gIDEKK2RkYW5kMTc4IGFuZCAxICAgICAgICAgIDExICAtPiAgMQorZGRhbmQxNzkgYW5kIDEgICAgICAgICAgIDEgIC0+ICAxCisKK2RkYW5kMTgwIGFuZCAwICAxMTExMTExMTExICAtPiAgMAorZGRhbmQxODEgYW5kIDAgICAxMTExMTExMTEgIC0+ICAwCitkZGFuZDE4MiBhbmQgMCAgICAxMTExMTExMSAgLT4gIDAKK2RkYW5kMTgzIGFuZCAwICAgICAxMTExMTExICAtPiAgMAorZGRhbmQxODQgYW5kIDAgICAgICAxMTExMTEgIC0+ICAwCitkZGFuZDE4NSBhbmQgMCAgICAgICAxMTExMSAgLT4gIDAKK2RkYW5kMTg2IGFuZCAwICAgICAgICAxMTExICAtPiAgMAorZGRhbmQxODcgYW5kIDAgICAgICAgICAxMTEgIC0+ICAwCitkZGFuZDE4OCBhbmQgMCAgICAgICAgICAxMSAgLT4gIDAKK2RkYW5kMTg5IGFuZCAwICAgICAgICAgICAxICAtPiAgMAorCitkZGFuZDA5MCBhbmQgMDExMTExMTExICAxMTExMTExMTEgIC0+ICAgMTExMTExMTEKK2RkYW5kMDkxIGFuZCAxMDExMTExMTEgIDExMTExMTExMSAgLT4gIDEwMTExMTExMQorZGRhbmQwOTIgYW5kIDExMDExMTExMSAgMTExMTExMTExICAtPiAgMTEwMTExMTExCitkZGFuZDA5MyBhbmQgMTExMDExMTExICAxMTExMTExMTEgIC0+ICAxMTEwMTExMTEKK2RkYW5kMDk0IGFuZCAxMTExMDExMTEgIDExMTExMTExMSAgLT4gIDExMTEwMTExMQorZGRhbmQwOTUgYW5kIDExMTExMDExMSAgMTExMTExMTExICAtPiAgMTExMTEwMTExCitkZGFuZDA5NiBhbmQgMTExMTExMDExICAxMTExMTExMTEgIC0+ICAxMTExMTEwMTEKK2RkYW5kMDk3IGFuZCAxMTExMTExMDEgIDExMTExMTExMSAgLT4gIDExMTExMTEwMQorZGRhbmQwOTggYW5kIDExMTExMTExMCAgMTExMTExMTExICAtPiAgMTExMTExMTEwCisKK2RkYW5kMTAwIGFuZCAxMTExMTExMTEgIDAxMTExMTExMSAgLT4gICAxMTExMTExMQorZGRhbmQxMDEgYW5kIDExMTExMTExMSAgMTAxMTExMTExICAtPiAgMTAxMTExMTExCitkZGFuZDEwMiBhbmQgMTExMTExMTExICAxMTAxMTExMTEgIC0+ICAxMTAxMTExMTEKK2RkYW5kMTAzIGFuZCAxMTExMTExMTEgIDExMTAxMTExMSAgLT4gIDExMTAxMTExMQorZGRhbmQxMDQgYW5kIDExMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExCitkZGFuZDEwNSBhbmQgMTExMTExMTExICAxMTExMTAxMTEgIC0+ICAxMTExMTAxMTEKK2RkYW5kMTA2IGFuZCAxMTExMTExMTEgIDExMTExMTAxMSAgLT4gIDExMTExMTAxMQorZGRhbmQxMDcgYW5kIDExMTExMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTAxCitkZGFuZDEwOCBhbmQgMTExMTExMTExICAxMTExMTExMTAgIC0+ICAxMTExMTExMTAKKworLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCitkZGFuZDIyMCBhbmQgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjIxIGFuZCAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMjIgYW5kIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIyMyBhbmQgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjI0IGFuZCA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMjUgYW5kIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIyNiBhbmQgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjI3IGFuZCA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMjggYW5kIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIyOSBhbmQgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjMwIGFuZCA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyMzEgYW5kIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDIzMiBhbmQgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK2RkYW5kMjQwIGFuZCAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNDEgYW5kICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI0MiBhbmQgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjQzIGFuZCAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNDQgYW5kICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRAorZGRhbmQyNTAgYW5kICAyMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNTEgYW5kICA3MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNTIgYW5kICA4MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNTMgYW5kICA5MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNTQgYW5kICAyMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNTUgYW5kICA3MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNTYgYW5kICA4MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNTcgYW5kICA5MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNTggYW5kICAxMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNTkgYW5kICAxMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNjAgYW5kICAxMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNjEgYW5kICAxMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNjIgYW5kICAwMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNjMgYW5kICAwMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNjQgYW5kICAwMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNjUgYW5kICAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQorZGRhbmQyNzAgYW5kICAwMjAwMDAxMDAwMDAwMDAwIDEwMDAxMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNzEgYW5kICAwNzAwMDAwMTAwMDAwMDAwIDEwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNzIgYW5kICAwODAwMDAwMDEwMDAwMDAwIDEwMDAwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNzMgYW5kICAwOTAwMDAwMDAxMDAwMDAwIDEwMDAwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNzQgYW5kICAxMDAwMDAwMDAwMTAwMDAwIDAyMDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNzUgYW5kICAxMDAwMDAwMDAwMDEwMDAwIDA3MDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNzYgYW5kICAxMDAwMDAwMDAwMDAxMDAwIDA4MDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyNzcgYW5kICAxMDAwMDAwMDAwMDAwMTAwIDA5MDAwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2RkYW5kMjgwIGFuZCAgMDAxMDAwMDAwMDAwMDAwMiAxMDAwMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjgxIGFuZCAgMDAwMTAwMDAwMDAwMDAwNyAxMDAwMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjgyIGFuZCAgMDAwMDEwMDAwMDAwMDAwOCAxMDAwMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjgzIGFuZCAgMDAwMDAxMDAwMDAwMDAwOSAxMDAwMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjg0IGFuZCAgMTAwMDAwMTAwMDAwMDAwMCAwMDAxMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjg1IGFuZCAgMTAwMDAwMDEwMDAwMDAwMCAwMDEwMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjg2IGFuZCAgMTAwMDAwMDAxMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjg3IGFuZCAgMTAwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCitkZGFuZDI4OCBhbmQgIDAwMTAwMDAwMjAwMDAwMDAgMTAwMDAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI4OSBhbmQgIDAwMDEwMDAwNzAwMDAwMDEgMTAwMDAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI5MCBhbmQgIDAwMDAxMDAwODAwMDAwMTAgMTAwMDAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI5MSBhbmQgIDAwMDAwMTAwOTAwMDAxMDAgMTAwMDAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI5MiBhbmQgIDEwMDAwMDEwMDAwMDEwMDAgMDAwMDAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI5MyBhbmQgIDEwMDAwMDAxMDAwMTAwMDAgMDAwMDAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI5NCBhbmQgIDEwMDAwMDAwMTAxMDAwMDAgMDAwMDAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI5NSBhbmQgIDEwMDAwMDAwMDEwMDAwMDAgMDAwMDAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworZGRhbmQyOTYgYW5kIC0xMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMjk3IGFuZCAtMTAwMDAwMDAwMTAwMDAwMCAgMDAwMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDI5OCBhbmQgIDEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQyOTkgYW5kICAxMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UKK2RkYW5kMzMxIGFuZCAgMiAgIDkuOTk5OTk5OTlFKzE5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDMzMiBhbmQgIDMgICAxRS0xOTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzMzMgYW5kICA0ICAgMS4wMDAwMDAwMEUtMTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzM0IGFuZCAgNSAgIDFFLTEwMCAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDMzNSBhbmQgIDYgICAtMUUtMTAwICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzMzYgYW5kICA3ICAgLTEuMDAwMDAwMDBFLTE5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzM3IGFuZCAgOCAgIC0xRS0xOTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDMzOCBhbmQgIDkgICAtOS45OTk5OTk5OUUrMTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNDEgYW5kICA5Ljk5OTk5OTk5RSsxOTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzQyIGFuZCAgMUUtMTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM0MyBhbmQgIDEuMDAwMDAwMDBFLTE5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNDQgYW5kICAxRS0xMDAgICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzQ1IGFuZCAgLTFFLTEwMCAgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM0NiBhbmQgIC0xLjAwMDAwMDAwRS0xOTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNDcgYW5kICAtMUUtMTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzQ4IGFuZCAgLTkuOTk5OTk5OTlFKzE5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworZGRhbmQzNjEgYW5kICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzYyIGFuZCAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM2MyBhbmQgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNjQgYW5kICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzY1IGFuZCAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM2NiBhbmQgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNzEgYW5kICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzcyIGFuZCAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM3MyBhbmQgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQzNzQgYW5kICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kMzc1IGFuZCAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDM3NiBhbmQgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCitkZGFuZDc4MCBhbmQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3ODEgYW5kIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzgyIGFuZCAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc4MyBhbmQgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3ODQgYW5kIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzg1IGFuZCAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc4NiBhbmQgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3ODcgYW5kIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzg4IGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc4OSBhbmQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3OTAgYW5kIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzkxIGFuZCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDc5MiBhbmQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ3OTMgYW5kICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kNzk0IGFuZCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkYW5kODAwIGFuZCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgwMSBhbmQgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MDIgYW5kICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODAzIGFuZCAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgwNCBhbmQgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MDUgYW5kICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODA2IGFuZCAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgwNyBhbmQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MDggYW5kIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODA5IGFuZCAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgxMCBhbmQgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MTEgYW5kIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODEyIGFuZCAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgxMyBhbmQgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MTQgYW5kICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODE1IGFuZCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkYW5kODIxIGFuZCAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgyMiBhbmQgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MjMgYW5kICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODI0IGFuZCAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgyNSBhbmQgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MjYgYW5kICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODI3IGFuZCAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgyOCBhbmQgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MjkgYW5kICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODMwIGFuZCAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgzMSBhbmQgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MzIgYW5kIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODMzIGFuZCAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgzNCBhbmQgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4MzUgYW5kICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODM2IGFuZCAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDgzNyBhbmQgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZGFuZDg0MSBhbmQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg0MiBhbmQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg0MyBhbmQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg0NCBhbmQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg0NSBhbmQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg0NiBhbmQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg0NyBhbmQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg0OCBhbmQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg0OSBhbmQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg1MCBhbmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg1MSBhbmQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg1MiBhbmQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg1MyBhbmQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg1NCBhbmQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg1NSBhbmQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg1NiBhbmQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg1NyBhbmQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg1OCBhbmQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg1OSBhbmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkYW5kODYxIGFuZCAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg2MiBhbmQgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NjMgYW5kICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODY0IGFuZCAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg2NSBhbmQgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NjYgYW5kIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODY3IGFuZCAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg2OCBhbmQgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NjkgYW5kICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODcxIGFuZCAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg3MiBhbmQgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NzMgYW5kICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODc0IGFuZCAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg3NSBhbmQgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NzYgYW5kICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODc3IGFuZCAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg3OCBhbmQgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4NzkgYW5kICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODgwIGFuZCAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg4MSBhbmQgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4ODIgYW5kIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkYW5kODgzIGFuZCAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGFuZDg4NCBhbmQgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRhbmQ4ODUgYW5kICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRCYXNlLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQmFzZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZmViZjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQmFzZS5kZWNUZXN0CkBAIC0wLDAgKzEsMTEwNCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZEJhc2UuZGVjVGVzdCAtLSBiYXNlIGRlY0RvdWJsZSA8LS0+IHN0cmluZyBjb252ZXJzaW9ucyAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgZmlsZSB0ZXN0cyBiYXNlIGNvbnZlcnNpb25zIGZyb20gc3RyaW5nIHRvIGEgZGVjaW1hbCBudW1iZXIKKy0tIGFuZCBiYWNrIHRvIGEgc3RyaW5nIChpbiBTY2llbnRpZmljIGZvcm0pCisKKy0tIE5vdGUgdGhhdCB1bmxpa2Ugb3RoZXIgb3BlcmF0aW9ucyB0aGUgb3BlcmFuZCBpcyBzdWJqZWN0IHRvIHJvdW5kaW5nCistLSB0byBjb25mb3JtIHRvIGVtYXggYW5kIHByZWNpc2lvbiBzZXR0aW5ncyAodGhhdCBpcywgbnVtYmVycyB3aWxsCistLSBjb25mb3JtIHRvIHJ1bGVzIGFuZCBleHBvbmVudCB3aWxsIGJlIGluIHBlcm1pdHRlZCByYW5nZSkuICBUaGUKKy0tICdsZWZ0IGhhbmQgc2lkZScsIHRoZXJlZm9yZSwgbWF5IGhhdmUgbnVtYmVycyB0aGF0IGNhbm5vdCBiZQorLS0gcmVwcmVzZW50ZWQgaW4gYSBkZWNEb3VibGUuICBTb21lIHRlc3RjYXNlcyBnbyB0byB0aGUgbGltaXQgb2YgdGhlCistLSBuZXh0LXdpZGVyIGZvcm1hdCwgYW5kIGhlbmNlIHRoZXNlIHRlc3RjYXNlcyBtYXkgYWxzbyBiZSB1c2VkIHRvCistLSB0ZXN0IG5hcnJvd2luZyBhbmQgd2lkZW5pbmcgb3BlcmF0aW9ucy4KKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RkYmFzMDAxIHRvU2NpICAgICAgIDAgLT4gMAorZGRiYXMwMDIgdG9TY2kgICAgICAgMSAtPiAxCitkZGJhczAwMyB0b1NjaSAgICAgMS4wIC0+IDEuMAorZGRiYXMwMDQgdG9TY2kgICAgMS4wMCAtPiAxLjAwCitkZGJhczAwNSB0b1NjaSAgICAgIDEwIC0+IDEwCitkZGJhczAwNiB0b1NjaSAgICAxMDAwIC0+IDEwMDAKK2RkYmFzMDA3IHRvU2NpICAgIDEwLjAgLT4gMTAuMAorZGRiYXMwMDggdG9TY2kgICAgMTAuMSAtPiAxMC4xCitkZGJhczAwOSB0b1NjaSAgICAxMC40IC0+IDEwLjQKK2RkYmFzMDEwIHRvU2NpICAgIDEwLjUgLT4gMTAuNQorZGRiYXMwMTEgdG9TY2kgICAgMTAuNiAtPiAxMC42CitkZGJhczAxMiB0b1NjaSAgICAxMC45IC0+IDEwLjkKK2RkYmFzMDEzIHRvU2NpICAgIDExLjAgLT4gMTEuMAorZGRiYXMwMTQgdG9TY2kgIDEuMjM0IC0+IDEuMjM0CitkZGJhczAxNSB0b1NjaSAgMC4xMjMgLT4gMC4xMjMKK2RkYmFzMDE2IHRvU2NpICAwLjAxMiAtPiAwLjAxMgorZGRiYXMwMTcgdG9TY2kgIC0wICAgIC0+IC0wCitkZGJhczAxOCB0b1NjaSAgLTAuMCAgLT4gLTAuMAorZGRiYXMwMTkgdG9TY2kgLTAwLjAwIC0+IC0wLjAwCisKK2RkYmFzMDIxIHRvU2NpICAgICAtMSAtPiAtMQorZGRiYXMwMjIgdG9TY2kgICAtMS4wIC0+IC0xLjAKK2RkYmFzMDIzIHRvU2NpICAgLTAuMSAtPiAtMC4xCitkZGJhczAyNCB0b1NjaSAgIC05LjEgLT4gLTkuMQorZGRiYXMwMjUgdG9TY2kgICAtOS4xMSAtPiAtOS4xMQorZGRiYXMwMjYgdG9TY2kgICAtOS4xMTkgLT4gLTkuMTE5CitkZGJhczAyNyB0b1NjaSAgIC05Ljk5OSAtPiAtOS45OTkKKworZGRiYXMwMzAgdG9TY2kgICcxMjM0NTY3ODkuMTIzNDU2JyAgIC0+ICcxMjM0NTY3ODkuMTIzNDU2JworZGRiYXMwMzEgdG9TY2kgICcxMjM0NTY3ODkuMDAwMDAwJyAgIC0+ICcxMjM0NTY3ODkuMDAwMDAwJworZGRiYXMwMzIgdG9TY2kgICAnMTIzNDU2Nzg5MTIzNDU2JyAgIC0+ICcxMjM0NTY3ODkxMjM0NTYnCitkZGJhczAzMyB0b1NjaSAgICcwLjAwMDAxMjM0NTY3ODknICAgLT4gJzAuMDAwMDEyMzQ1Njc4OScKK2RkYmFzMDM0IHRvU2NpICAnMC4wMDAwMDEyMzQ1Njc4OScgICAtPiAnMC4wMDAwMDEyMzQ1Njc4OScKK2RkYmFzMDM1IHRvU2NpICcwLjAwMDAwMDEyMzQ1Njc4OScgICAtPiAnMS4yMzQ1Njc4OUUtNycKK2RkYmFzMDM2IHRvU2NpICcwLjAwMDAwMDAxMjM0NTY3ODknICAtPiAnMS4yMzQ1Njc4OUUtOCcKKworZGRiYXMwMzcgdG9TY2kgJzAuMTIzNDU2Nzg5MDEyMzQ0JyAgIC0+ICcwLjEyMzQ1Njc4OTAxMjM0NCcKK2RkYmFzMDM4IHRvU2NpICcwLjEyMzQ1Njc4OTAxMjM0NScgICAtPiAnMC4xMjM0NTY3ODkwMTIzNDUnCisKKy0tIHRlc3QgZmluaXRlIGJvdW5kcyAoTmVncyBvZiwgdGhlbiAwLCBOdGlueSwgTm1pbiwgb3RoZXIsIE5tYXgpCitkZGJzbjAwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRic24wMDIgdG9TY2kgLTFFLTM4MyAtPiAtMUUtMzgzCitkZGJzbjAwMyB0b1NjaSAtMUUtMzk4IC0+IC0xRS0zOTggU3Vibm9ybWFsCitkZGJzbjAwNCB0b1NjaSAtMCAtPiAtMAorZGRic24wMDUgdG9TY2kgKzAgLT4gIDAKK2RkYnNuMDA2IHRvU2NpICsxRS0zOTggLT4gIDFFLTM5OCBTdWJub3JtYWwKK2RkYnNuMDA3IHRvU2NpICsxRS0zODMgLT4gIDFFLTM4MworZGRic24wMDggdG9TY2kgKzkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQKKworLS0gU3RyaW5nIFttYW55IG1vcmUgZXhhbXBsZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIGVsc2V3aGVyZV0KKy0tIHN0cmluZ3Mgd2l0aG91dCBFIGNhbm5vdCBnZW5lcmF0ZSBFIGluIHJlc3VsdAorZGRiYXMwNDAgdG9TY2kgIjEyIiAgICAgICAgLT4gJzEyJworZGRiYXMwNDEgdG9TY2kgIi03NiIgICAgICAgLT4gJy03NicKK2RkYmFzMDQyIHRvU2NpICIxMi43NiIgICAgIC0+ICcxMi43NicKK2RkYmFzMDQzIHRvU2NpICIrMTIuNzYiICAgIC0+ICcxMi43NicKK2RkYmFzMDQ0IHRvU2NpICIwMTIuNzYiICAgIC0+ICcxMi43NicKK2RkYmFzMDQ1IHRvU2NpICIrMC4wMDMiICAgIC0+ICcwLjAwMycKK2RkYmFzMDQ2IHRvU2NpICIxNy4iICAgICAgIC0+ICcxNycKK2RkYmFzMDQ3IHRvU2NpICIuNSIgICAgICAgIC0+ICcwLjUnCitkZGJhczA0OCB0b1NjaSAiMDQ0IiAgICAgICAtPiAnNDQnCitkZGJhczA0OSB0b1NjaSAiMDA0NCIgICAgICAtPiAnNDQnCitkZGJhczA1MCB0b1NjaSAiMC4wMDA1IiAgICAgIC0+ICcwLjAwMDUnCitkZGJhczA1MSB0b1NjaSAiMDAuMDAwMDUiICAgIC0+ICcwLjAwMDA1JworZGRiYXMwNTIgdG9TY2kgIjAuMDAwMDA1IiAgICAtPiAnMC4wMDAwMDUnCitkZGJhczA1MyB0b1NjaSAiMC4wMDAwMDUwIiAgIC0+ICcwLjAwMDAwNTAnCitkZGJhczA1NCB0b1NjaSAiMC4wMDAwMDA1IiAgIC0+ICc1RS03JworZGRiYXMwNTUgdG9TY2kgIjAuMDAwMDAwMDUiICAtPiAnNUUtOCcKK2RkYmFzMDU2IHRvU2NpICIxMjM0NTY3OC41NDMyMTAiIC0+ICcxMjM0NTY3OC41NDMyMTAnCitkZGJhczA1NyB0b1NjaSAiMjM0NTY3OC41NDMyMTAiIC0+ICcyMzQ1Njc4LjU0MzIxMCcKK2RkYmFzMDU4IHRvU2NpICIzNDU2NzguNTQzMjEwIiAtPiAnMzQ1Njc4LjU0MzIxMCcKK2RkYmFzMDU5IHRvU2NpICIwMzQ1Njc4LjU0MzIxIiAtPiAnMzQ1Njc4LjU0MzIxJworZGRiYXMwNjAgdG9TY2kgIjM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitkZGJhczA2MSB0b1NjaSAiKzM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitkZGJhczA2MiB0b1NjaSAiKzAzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJworZGRiYXMwNjMgdG9TY2kgIiswMDM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInCitkZGJhczA2NCB0b1NjaSAiLTM0NTY3OC41NDMyIiAgLT4gJy0zNDU2NzguNTQzMicKK2RkYmFzMDY1IHRvU2NpICItMDM0NTY3OC41NDMyIiAgLT4gJy0zNDU2NzguNTQzMicKK2RkYmFzMDY2IHRvU2NpICItMDAzNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInCistLSBleGFtcGxlcworZGRiYXMwNjcgdG9TY2kgIjVFLTYiICAgICAgICAtPiAnMC4wMDAwMDUnCitkZGJhczA2OCB0b1NjaSAiNTBFLTciICAgICAgIC0+ICcwLjAwMDAwNTAnCitkZGJhczA2OSB0b1NjaSAiNUUtNyIgICAgICAgIC0+ICc1RS03JworCistLSBbTm8gZXhvdGljcyBhcyBubyBVbmljb2RlXQorCistLSByb3VuZGVkIHdpdGggZG90cyBpbiBhbGwgKGluY2x1ZGluZyBlZGdlKSBwbGFjZXMKK2RkYmFzMDcxIHRvU2NpICAuMTIzNDU2Nzg5MDEyMzQ1NjEyMyAgLT4gMC4xMjM0NTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwNzIgdG9TY2kgIDEuMjM0NTY3ODkwMTIzNDU2MTIzICAtPiAxLjIzNDU2Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDczIHRvU2NpICAxMi4zNDU2Nzg5MDEyMzQ1NjEyMyAgLT4gMTIuMzQ1Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA3NCB0b1NjaSAgMTIzLjQ1Njc4OTAxMjM0NTYxMjMgIC0+IDEyMy40NTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwNzUgdG9TY2kgIDEyMzQuNTY3ODkwMTIzNDU2MTIzICAtPiAxMjM0LjU2Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDc2IHRvU2NpICAxMjM0NS42Nzg5MDEyMzQ1NjEyMyAgLT4gMTIzNDUuNjc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA3NyB0b1NjaSAgMTIzNDU2Ljc4OTAxMjM0NTYxMjMgIC0+IDEyMzQ1Ni43ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwNzggdG9TY2kgIDEyMzQ1NjcuODkwMTIzNDU2MTIzICAtPiAxMjM0NTY3Ljg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDc5IHRvU2NpICAxMjM0NTY3OC45MDEyMzQ1NjEyMyAgLT4gMTIzNDU2NzguOTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA4MCB0b1NjaSAgMTIzNDU2Nzg5LjAxMjM0NTYxMjMgIC0+IDEyMzQ1Njc4OS4wMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwODEgdG9TY2kgIDEyMzQ1Njc4OTAuMTIzNDU2MTIzICAtPiAxMjM0NTY3ODkwLjEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDgyIHRvU2NpICAxMjM0NTY3ODkwMS4yMzQ1NjEyMyAgLT4gMTIzNDU2Nzg5MDEuMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA4MyB0b1NjaSAgMTIzNDU2Nzg5MDEyLjM0NTYxMjMgIC0+IDEyMzQ1Njc4OTAxMi4zNDU2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwODQgdG9TY2kgIDEyMzQ1Njc4OTAxMjMuNDU2MTIzICAtPiAxMjM0NTY3ODkwMTIzLjQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDg1IHRvU2NpICAxMjM0NTY3ODkwMTIzNC41NjEyMyAgLT4gMTIzNDU2Nzg5MDEyMzQuNTYgSW5leGFjdCBSb3VuZGVkCitkZGJhczA4NiB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1LjYxMjMgIC0+IDEyMzQ1Njc4OTAxMjM0NS42IEluZXhhY3QgUm91bmRlZAorZGRiYXMwODcgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYuMTIzICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMDg4IHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2MS4yMyAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzE2IEluZXhhY3QgUm91bmRlZAorZGRiYXMwODkgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYxMi4zICAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUrMTcgSW5leGFjdCBSb3VuZGVkCitkZGJhczA5MCB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1NjEyMy4gIC0+IDEuMjM0NTY3ODkwMTIzNDU2RSsxOCBJbmV4YWN0IFJvdW5kZWQKKworCistLSBOdW1iZXJzIHdpdGggRQorZGRiYXMxMzAgdG9TY2kgIjAuMDAwRS0xIiAgLT4gJzAuMDAwMCcKK2RkYmFzMTMxIHRvU2NpICIwLjAwMEUtMiIgIC0+ICcwLjAwMDAwJworZGRiYXMxMzIgdG9TY2kgIjAuMDAwRS0zIiAgLT4gJzAuMDAwMDAwJworZGRiYXMxMzMgdG9TY2kgIjAuMDAwRS00IiAgLT4gJzBFLTcnCitkZGJhczEzNCB0b1NjaSAiMC4wMEUtMiIgICAtPiAnMC4wMDAwJworZGRiYXMxMzUgdG9TY2kgIjAuMDBFLTMiICAgLT4gJzAuMDAwMDAnCitkZGJhczEzNiB0b1NjaSAiMC4wMEUtNCIgICAtPiAnMC4wMDAwMDAnCitkZGJhczEzNyB0b1NjaSAiMC4wMEUtNSIgICAtPiAnMEUtNycKK2RkYmFzMTM4IHRvU2NpICIrMEUrOSIgICAgIC0+ICcwRSs5JworZGRiYXMxMzkgdG9TY2kgIi0wRSs5IiAgICAgLT4gJy0wRSs5JworZGRiYXMxNDAgdG9TY2kgIjFFKzkiICAgICAgLT4gJzFFKzknCitkZGJhczE0MSB0b1NjaSAiMWUrMDkiICAgICAtPiAnMUUrOScKK2RkYmFzMTQyIHRvU2NpICIxRSs5MCIgICAgIC0+ICcxRSs5MCcKK2RkYmFzMTQzIHRvU2NpICIrMUUrMDA5IiAgIC0+ICcxRSs5JworZGRiYXMxNDQgdG9TY2kgIjBFKzkiICAgICAgLT4gJzBFKzknCitkZGJhczE0NSB0b1NjaSAiMUUrOSIgICAgICAtPiAnMUUrOScKK2RkYmFzMTQ2IHRvU2NpICIxRSswOSIgICAgIC0+ICcxRSs5JworZGRiYXMxNDcgdG9TY2kgIjFlKzkwIiAgICAgLT4gJzFFKzkwJworZGRiYXMxNDggdG9TY2kgIjFFKzAwOSIgICAgLT4gJzFFKzknCitkZGJhczE0OSB0b1NjaSAiMDAwRSs5IiAgICAtPiAnMEUrOScKK2RkYmFzMTUwIHRvU2NpICIxRTkiICAgICAgIC0+ICcxRSs5JworZGRiYXMxNTEgdG9TY2kgIjFlMDkiICAgICAgLT4gJzFFKzknCitkZGJhczE1MiB0b1NjaSAiMUU5MCIgICAgICAtPiAnMUUrOTAnCitkZGJhczE1MyB0b1NjaSAiMUUwMDkiICAgICAtPiAnMUUrOScKK2RkYmFzMTU0IHRvU2NpICIwRTkiICAgICAgIC0+ICcwRSs5JworZGRiYXMxNTUgdG9TY2kgIjAuMDAwZSswIiAgLT4gJzAuMDAwJworZGRiYXMxNTYgdG9TY2kgIjAuMDAwRS0xIiAgLT4gJzAuMDAwMCcKK2RkYmFzMTU3IHRvU2NpICI0RSs5IiAgICAgIC0+ICc0RSs5JworZGRiYXMxNTggdG9TY2kgIjQ0RSs5IiAgICAgLT4gJzQuNEUrMTAnCitkZGJhczE1OSB0b1NjaSAiMC43M2UtNyIgICAtPiAnNy4zRS04JworZGRiYXMxNjAgdG9TY2kgIjAwRSs5IiAgICAgLT4gJzBFKzknCitkZGJhczE2MSB0b1NjaSAiMDBFLTkiICAgICAtPiAnMEUtOScKK2RkYmFzMTYyIHRvU2NpICIxMEUrOSIgICAgIC0+ICcxLjBFKzEwJworZGRiYXMxNjMgdG9TY2kgIjEwRSswOSIgICAgLT4gJzEuMEUrMTAnCitkZGJhczE2NCB0b1NjaSAiMTBlKzkwIiAgICAtPiAnMS4wRSs5MScKK2RkYmFzMTY1IHRvU2NpICIxMEUrMDA5IiAgIC0+ICcxLjBFKzEwJworZGRiYXMxNjYgdG9TY2kgIjEwMGUrOSIgICAgLT4gJzEuMDBFKzExJworZGRiYXMxNjcgdG9TY2kgIjEwMGUrMDkiICAgLT4gJzEuMDBFKzExJworZGRiYXMxNjggdG9TY2kgIjEwMEUrOTAiICAgLT4gJzEuMDBFKzkyJworZGRiYXMxNjkgdG9TY2kgIjEwMGUrMDA5IiAgLT4gJzEuMDBFKzExJworCitkZGJhczE3MCB0b1NjaSAiMS4yNjUiICAgICAtPiAnMS4yNjUnCitkZGJhczE3MSB0b1NjaSAiMS4yNjVFLTIwIiAtPiAnMS4yNjVFLTIwJworZGRiYXMxNzIgdG9TY2kgIjEuMjY1RS04IiAgLT4gJzEuMjY1RS04JworZGRiYXMxNzMgdG9TY2kgIjEuMjY1RS00IiAgLT4gJzAuMDAwMTI2NScKK2RkYmFzMTc0IHRvU2NpICIxLjI2NUUtMyIgIC0+ICcwLjAwMTI2NScKK2RkYmFzMTc1IHRvU2NpICIxLjI2NUUtMiIgIC0+ICcwLjAxMjY1JworZGRiYXMxNzYgdG9TY2kgIjEuMjY1RS0xIiAgLT4gJzAuMTI2NScKK2RkYmFzMTc3IHRvU2NpICIxLjI2NUUtMCIgIC0+ICcxLjI2NScKK2RkYmFzMTc4IHRvU2NpICIxLjI2NUUrMSIgIC0+ICcxMi42NScKK2RkYmFzMTc5IHRvU2NpICIxLjI2NUUrMiIgIC0+ICcxMjYuNScKK2RkYmFzMTgwIHRvU2NpICIxLjI2NUUrMyIgIC0+ICcxMjY1JworZGRiYXMxODEgdG9TY2kgIjEuMjY1RSs0IiAgLT4gJzEuMjY1RSs0JworZGRiYXMxODIgdG9TY2kgIjEuMjY1RSs4IiAgLT4gJzEuMjY1RSs4JworZGRiYXMxODMgdG9TY2kgIjEuMjY1RSsyMCIgLT4gJzEuMjY1RSsyMCcKKworZGRiYXMxOTAgdG9TY2kgIjEyLjY1IiAgICAgLT4gJzEyLjY1JworZGRiYXMxOTEgdG9TY2kgIjEyLjY1RS0yMCIgLT4gJzEuMjY1RS0xOScKK2RkYmFzMTkyIHRvU2NpICIxMi42NUUtOCIgIC0+ICcxLjI2NUUtNycKK2RkYmFzMTkzIHRvU2NpICIxMi42NUUtNCIgIC0+ICcwLjAwMTI2NScKK2RkYmFzMTk0IHRvU2NpICIxMi42NUUtMyIgIC0+ICcwLjAxMjY1JworZGRiYXMxOTUgdG9TY2kgIjEyLjY1RS0yIiAgLT4gJzAuMTI2NScKK2RkYmFzMTk2IHRvU2NpICIxMi42NUUtMSIgIC0+ICcxLjI2NScKK2RkYmFzMTk3IHRvU2NpICIxMi42NUUtMCIgIC0+ICcxMi42NScKK2RkYmFzMTk4IHRvU2NpICIxMi42NUUrMSIgIC0+ICcxMjYuNScKK2RkYmFzMTk5IHRvU2NpICIxMi42NUUrMiIgIC0+ICcxMjY1JworZGRiYXMyMDAgdG9TY2kgIjEyLjY1RSszIiAgLT4gJzEuMjY1RSs0JworZGRiYXMyMDEgdG9TY2kgIjEyLjY1RSs0IiAgLT4gJzEuMjY1RSs1JworZGRiYXMyMDIgdG9TY2kgIjEyLjY1RSs4IiAgLT4gJzEuMjY1RSs5JworZGRiYXMyMDMgdG9TY2kgIjEyLjY1RSsyMCIgLT4gJzEuMjY1RSsyMScKKworZGRiYXMyMTAgdG9TY2kgIjEyNi41IiAgICAgLT4gJzEyNi41JworZGRiYXMyMTEgdG9TY2kgIjEyNi41RS0yMCIgLT4gJzEuMjY1RS0xOCcKK2RkYmFzMjEyIHRvU2NpICIxMjYuNUUtOCIgIC0+ICcwLjAwMDAwMTI2NScKK2RkYmFzMjEzIHRvU2NpICIxMjYuNUUtNCIgIC0+ICcwLjAxMjY1JworZGRiYXMyMTQgdG9TY2kgIjEyNi41RS0zIiAgLT4gJzAuMTI2NScKK2RkYmFzMjE1IHRvU2NpICIxMjYuNUUtMiIgIC0+ICcxLjI2NScKK2RkYmFzMjE2IHRvU2NpICIxMjYuNUUtMSIgIC0+ICcxMi42NScKK2RkYmFzMjE3IHRvU2NpICIxMjYuNUUtMCIgIC0+ICcxMjYuNScKK2RkYmFzMjE4IHRvU2NpICIxMjYuNUUrMSIgIC0+ICcxMjY1JworZGRiYXMyMTkgdG9TY2kgIjEyNi41RSsyIiAgLT4gJzEuMjY1RSs0JworZGRiYXMyMjAgdG9TY2kgIjEyNi41RSszIiAgLT4gJzEuMjY1RSs1JworZGRiYXMyMjEgdG9TY2kgIjEyNi41RSs0IiAgLT4gJzEuMjY1RSs2JworZGRiYXMyMjIgdG9TY2kgIjEyNi41RSs4IiAgLT4gJzEuMjY1RSsxMCcKK2RkYmFzMjIzIHRvU2NpICIxMjYuNUUrMjAiIC0+ICcxLjI2NUUrMjInCisKK2RkYmFzMjMwIHRvU2NpICIxMjY1IiAgICAgLT4gJzEyNjUnCitkZGJhczIzMSB0b1NjaSAiMTI2NUUtMjAiIC0+ICcxLjI2NUUtMTcnCitkZGJhczIzMiB0b1NjaSAiMTI2NUUtOCIgIC0+ICcwLjAwMDAxMjY1JworZGRiYXMyMzMgdG9TY2kgIjEyNjVFLTQiICAtPiAnMC4xMjY1JworZGRiYXMyMzQgdG9TY2kgIjEyNjVFLTMiICAtPiAnMS4yNjUnCitkZGJhczIzNSB0b1NjaSAiMTI2NUUtMiIgIC0+ICcxMi42NScKK2RkYmFzMjM2IHRvU2NpICIxMjY1RS0xIiAgLT4gJzEyNi41JworZGRiYXMyMzcgdG9TY2kgIjEyNjVFLTAiICAtPiAnMTI2NScKK2RkYmFzMjM4IHRvU2NpICIxMjY1RSsxIiAgLT4gJzEuMjY1RSs0JworZGRiYXMyMzkgdG9TY2kgIjEyNjVFKzIiICAtPiAnMS4yNjVFKzUnCitkZGJhczI0MCB0b1NjaSAiMTI2NUUrMyIgIC0+ICcxLjI2NUUrNicKK2RkYmFzMjQxIHRvU2NpICIxMjY1RSs0IiAgLT4gJzEuMjY1RSs3JworZGRiYXMyNDIgdG9TY2kgIjEyNjVFKzgiICAtPiAnMS4yNjVFKzExJworZGRiYXMyNDMgdG9TY2kgIjEyNjVFKzIwIiAtPiAnMS4yNjVFKzIzJworZGRiYXMyNDQgdG9TY2kgIjEyNjVFLTkiICAtPiAnMC4wMDAwMDEyNjUnCitkZGJhczI0NSB0b1NjaSAiMTI2NUUtMTAiIC0+ICcxLjI2NUUtNycKK2RkYmFzMjQ2IHRvU2NpICIxMjY1RS0xMSIgLT4gJzEuMjY1RS04JworZGRiYXMyNDcgdG9TY2kgIjEyNjVFLTEyIiAtPiAnMS4yNjVFLTknCisKK2RkYmFzMjUwIHRvU2NpICIwLjEyNjUiICAgICAtPiAnMC4xMjY1JworZGRiYXMyNTEgdG9TY2kgIjAuMTI2NUUtMjAiIC0+ICcxLjI2NUUtMjEnCitkZGJhczI1MiB0b1NjaSAiMC4xMjY1RS04IiAgLT4gJzEuMjY1RS05JworZGRiYXMyNTMgdG9TY2kgIjAuMTI2NUUtNCIgIC0+ICcwLjAwMDAxMjY1JworZGRiYXMyNTQgdG9TY2kgIjAuMTI2NUUtMyIgIC0+ICcwLjAwMDEyNjUnCitkZGJhczI1NSB0b1NjaSAiMC4xMjY1RS0yIiAgLT4gJzAuMDAxMjY1JworZGRiYXMyNTYgdG9TY2kgIjAuMTI2NUUtMSIgIC0+ICcwLjAxMjY1JworZGRiYXMyNTcgdG9TY2kgIjAuMTI2NUUtMCIgIC0+ICcwLjEyNjUnCitkZGJhczI1OCB0b1NjaSAiMC4xMjY1RSsxIiAgLT4gJzEuMjY1JworZGRiYXMyNTkgdG9TY2kgIjAuMTI2NUUrMiIgIC0+ICcxMi42NScKK2RkYmFzMjYwIHRvU2NpICIwLjEyNjVFKzMiICAtPiAnMTI2LjUnCitkZGJhczI2MSB0b1NjaSAiMC4xMjY1RSs0IiAgLT4gJzEyNjUnCitkZGJhczI2MiB0b1NjaSAiMC4xMjY1RSs4IiAgLT4gJzEuMjY1RSs3JworZGRiYXMyNjMgdG9TY2kgIjAuMTI2NUUrMjAiIC0+ICcxLjI2NUUrMTknCisKKy0tIHNvbWUgbW9yZSBuZWdhdGl2ZSB6ZXJvcyBbc3lzdGVtYXRpYyB0ZXN0cyBiZWxvd10KK2RkYmFzMjkwIHRvU2NpICItMC4wMDBFLTEiICAtPiAnLTAuMDAwMCcKK2RkYmFzMjkxIHRvU2NpICItMC4wMDBFLTIiICAtPiAnLTAuMDAwMDAnCitkZGJhczI5MiB0b1NjaSAiLTAuMDAwRS0zIiAgLT4gJy0wLjAwMDAwMCcKK2RkYmFzMjkzIHRvU2NpICItMC4wMDBFLTQiICAtPiAnLTBFLTcnCitkZGJhczI5NCB0b1NjaSAiLTAuMDBFLTIiICAgLT4gJy0wLjAwMDAnCitkZGJhczI5NSB0b1NjaSAiLTAuMDBFLTMiICAgLT4gJy0wLjAwMDAwJworZGRiYXMyOTYgdG9TY2kgIi0wLjBFLTIiICAgIC0+ICctMC4wMDAnCitkZGJhczI5NyB0b1NjaSAiLTAuMEUtMyIgICAgLT4gJy0wLjAwMDAnCitkZGJhczI5OCB0b1NjaSAiLTBFLTIiICAgICAgLT4gJy0wLjAwJworZGRiYXMyOTkgdG9TY2kgIi0wRS0zIiAgICAgIC0+ICctMC4wMDAnCisKKy0tIEVuZ2luZWVyaW5nIG5vdGF0aW9uIHRlc3RzCitkZGJhczMwMSAgdG9TY2kgMTBlMTIgIC0+IDEuMEUrMTMKK2RkYmFzMzAyICB0b0VuZyAxMGUxMiAgLT4gMTBFKzEyCitkZGJhczMwMyAgdG9TY2kgMTBlMTEgIC0+IDEuMEUrMTIKK2RkYmFzMzA0ICB0b0VuZyAxMGUxMSAgLT4gMS4wRSsxMgorZGRiYXMzMDUgIHRvU2NpIDEwZTEwICAtPiAxLjBFKzExCitkZGJhczMwNiAgdG9FbmcgMTBlMTAgIC0+IDEwMEUrOQorZGRiYXMzMDcgIHRvU2NpIDEwZTkgICAtPiAxLjBFKzEwCitkZGJhczMwOCAgdG9FbmcgMTBlOSAgIC0+IDEwRSs5CitkZGJhczMwOSAgdG9TY2kgMTBlOCAgIC0+IDEuMEUrOQorZGRiYXMzMTAgIHRvRW5nIDEwZTggICAtPiAxLjBFKzkKK2RkYmFzMzExICB0b1NjaSAxMGU3ICAgLT4gMS4wRSs4CitkZGJhczMxMiAgdG9FbmcgMTBlNyAgIC0+IDEwMEUrNgorZGRiYXMzMTMgIHRvU2NpIDEwZTYgICAtPiAxLjBFKzcKK2RkYmFzMzE0ICB0b0VuZyAxMGU2ICAgLT4gMTBFKzYKK2RkYmFzMzE1ICB0b1NjaSAxMGU1ICAgLT4gMS4wRSs2CitkZGJhczMxNiAgdG9FbmcgMTBlNSAgIC0+IDEuMEUrNgorZGRiYXMzMTcgIHRvU2NpIDEwZTQgICAtPiAxLjBFKzUKK2RkYmFzMzE4ICB0b0VuZyAxMGU0ICAgLT4gMTAwRSszCitkZGJhczMxOSAgdG9TY2kgMTBlMyAgIC0+IDEuMEUrNAorZGRiYXMzMjAgIHRvRW5nIDEwZTMgICAtPiAxMEUrMworZGRiYXMzMjEgIHRvU2NpIDEwZTIgICAtPiAxLjBFKzMKK2RkYmFzMzIyICB0b0VuZyAxMGUyICAgLT4gMS4wRSszCitkZGJhczMyMyAgdG9TY2kgMTBlMSAgIC0+IDEuMEUrMgorZGRiYXMzMjQgIHRvRW5nIDEwZTEgICAtPiAxMDAKK2RkYmFzMzI1ICB0b1NjaSAxMGUwICAgLT4gMTAKK2RkYmFzMzI2ICB0b0VuZyAxMGUwICAgLT4gMTAKK2RkYmFzMzI3ICB0b1NjaSAxMGUtMSAgLT4gMS4wCitkZGJhczMyOCAgdG9FbmcgMTBlLTEgIC0+IDEuMAorZGRiYXMzMjkgIHRvU2NpIDEwZS0yICAtPiAwLjEwCitkZGJhczMzMCAgdG9FbmcgMTBlLTIgIC0+IDAuMTAKK2RkYmFzMzMxICB0b1NjaSAxMGUtMyAgLT4gMC4wMTAKK2RkYmFzMzMyICB0b0VuZyAxMGUtMyAgLT4gMC4wMTAKK2RkYmFzMzMzICB0b1NjaSAxMGUtNCAgLT4gMC4wMDEwCitkZGJhczMzNCAgdG9FbmcgMTBlLTQgIC0+IDAuMDAxMAorZGRiYXMzMzUgIHRvU2NpIDEwZS01ICAtPiAwLjAwMDEwCitkZGJhczMzNiAgdG9FbmcgMTBlLTUgIC0+IDAuMDAwMTAKK2RkYmFzMzM3ICB0b1NjaSAxMGUtNiAgLT4gMC4wMDAwMTAKK2RkYmFzMzM4ICB0b0VuZyAxMGUtNiAgLT4gMC4wMDAwMTAKK2RkYmFzMzM5ICB0b1NjaSAxMGUtNyAgLT4gMC4wMDAwMDEwCitkZGJhczM0MCAgdG9FbmcgMTBlLTcgIC0+IDAuMDAwMDAxMAorZGRiYXMzNDEgIHRvU2NpIDEwZS04ICAtPiAxLjBFLTcKK2RkYmFzMzQyICB0b0VuZyAxMGUtOCAgLT4gMTAwRS05CitkZGJhczM0MyAgdG9TY2kgMTBlLTkgIC0+IDEuMEUtOAorZGRiYXMzNDQgIHRvRW5nIDEwZS05ICAtPiAxMEUtOQorZGRiYXMzNDUgIHRvU2NpIDEwZS0xMCAtPiAxLjBFLTkKK2RkYmFzMzQ2ICB0b0VuZyAxMGUtMTAgLT4gMS4wRS05CitkZGJhczM0NyAgdG9TY2kgMTBlLTExIC0+IDEuMEUtMTAKK2RkYmFzMzQ4ICB0b0VuZyAxMGUtMTEgLT4gMTAwRS0xMgorZGRiYXMzNDkgIHRvU2NpIDEwZS0xMiAtPiAxLjBFLTExCitkZGJhczM1MCAgdG9FbmcgMTBlLTEyIC0+IDEwRS0xMgorZGRiYXMzNTEgIHRvU2NpIDEwZS0xMyAtPiAxLjBFLTEyCitkZGJhczM1MiAgdG9FbmcgMTBlLTEzIC0+IDEuMEUtMTIKKworZGRiYXMzNjEgIHRvU2NpIDdFMTIgIC0+IDdFKzEyCitkZGJhczM2MiAgdG9FbmcgN0UxMiAgLT4gN0UrMTIKK2RkYmFzMzYzICB0b1NjaSA3RTExICAtPiA3RSsxMQorZGRiYXMzNjQgIHRvRW5nIDdFMTEgIC0+IDcwMEUrOQorZGRiYXMzNjUgIHRvU2NpIDdFMTAgIC0+IDdFKzEwCitkZGJhczM2NiAgdG9FbmcgN0UxMCAgLT4gNzBFKzkKK2RkYmFzMzY3ICB0b1NjaSA3RTkgICAtPiA3RSs5CitkZGJhczM2OCAgdG9FbmcgN0U5ICAgLT4gN0UrOQorZGRiYXMzNjkgIHRvU2NpIDdFOCAgIC0+IDdFKzgKK2RkYmFzMzcwICB0b0VuZyA3RTggICAtPiA3MDBFKzYKK2RkYmFzMzcxICB0b1NjaSA3RTcgICAtPiA3RSs3CitkZGJhczM3MiAgdG9FbmcgN0U3ICAgLT4gNzBFKzYKK2RkYmFzMzczICB0b1NjaSA3RTYgICAtPiA3RSs2CitkZGJhczM3NCAgdG9FbmcgN0U2ICAgLT4gN0UrNgorZGRiYXMzNzUgIHRvU2NpIDdFNSAgIC0+IDdFKzUKK2RkYmFzMzc2ICB0b0VuZyA3RTUgICAtPiA3MDBFKzMKK2RkYmFzMzc3ICB0b1NjaSA3RTQgICAtPiA3RSs0CitkZGJhczM3OCAgdG9FbmcgN0U0ICAgLT4gNzBFKzMKK2RkYmFzMzc5ICB0b1NjaSA3RTMgICAtPiA3RSszCitkZGJhczM4MCAgdG9FbmcgN0UzICAgLT4gN0UrMworZGRiYXMzODEgIHRvU2NpIDdFMiAgIC0+IDdFKzIKK2RkYmFzMzgyICB0b0VuZyA3RTIgICAtPiA3MDAKK2RkYmFzMzgzICB0b1NjaSA3RTEgICAtPiA3RSsxCitkZGJhczM4NCAgdG9FbmcgN0UxICAgLT4gNzAKK2RkYmFzMzg1ICB0b1NjaSA3RTAgICAtPiA3CitkZGJhczM4NiAgdG9FbmcgN0UwICAgLT4gNworZGRiYXMzODcgIHRvU2NpIDdFLTEgIC0+IDAuNworZGRiYXMzODggIHRvRW5nIDdFLTEgIC0+IDAuNworZGRiYXMzODkgIHRvU2NpIDdFLTIgIC0+IDAuMDcKK2RkYmFzMzkwICB0b0VuZyA3RS0yICAtPiAwLjA3CitkZGJhczM5MSAgdG9TY2kgN0UtMyAgLT4gMC4wMDcKK2RkYmFzMzkyICB0b0VuZyA3RS0zICAtPiAwLjAwNworZGRiYXMzOTMgIHRvU2NpIDdFLTQgIC0+IDAuMDAwNworZGRiYXMzOTQgIHRvRW5nIDdFLTQgIC0+IDAuMDAwNworZGRiYXMzOTUgIHRvU2NpIDdFLTUgIC0+IDAuMDAwMDcKK2RkYmFzMzk2ICB0b0VuZyA3RS01ICAtPiAwLjAwMDA3CitkZGJhczM5NyAgdG9TY2kgN0UtNiAgLT4gMC4wMDAwMDcKK2RkYmFzMzk4ICB0b0VuZyA3RS02ICAtPiAwLjAwMDAwNworZGRiYXMzOTkgIHRvU2NpIDdFLTcgIC0+IDdFLTcKK2RkYmFzNDAwICB0b0VuZyA3RS03ICAtPiA3MDBFLTkKK2RkYmFzNDAxICB0b1NjaSA3RS04ICAtPiA3RS04CitkZGJhczQwMiAgdG9FbmcgN0UtOCAgLT4gNzBFLTkKK2RkYmFzNDAzICB0b1NjaSA3RS05ICAtPiA3RS05CitkZGJhczQwNCAgdG9FbmcgN0UtOSAgLT4gN0UtOQorZGRiYXM0MDUgIHRvU2NpIDdFLTEwIC0+IDdFLTEwCitkZGJhczQwNiAgdG9FbmcgN0UtMTAgLT4gNzAwRS0xMgorZGRiYXM0MDcgIHRvU2NpIDdFLTExIC0+IDdFLTExCitkZGJhczQwOCAgdG9FbmcgN0UtMTEgLT4gNzBFLTEyCitkZGJhczQwOSAgdG9TY2kgN0UtMTIgLT4gN0UtMTIKK2RkYmFzNDEwICB0b0VuZyA3RS0xMiAtPiA3RS0xMgorZGRiYXM0MTEgIHRvU2NpIDdFLTEzIC0+IDdFLTEzCitkZGJhczQxMiAgdG9FbmcgN0UtMTMgLT4gNzAwRS0xNQorCistLSBFeGFjdHMgcmVtYWluIGV4YWN0IHVwIHRvIHByZWNpc2lvbiAuLgorcm91bmRpbmc6ICBoYWxmX3VwCitkZGJhczQyMCAgdG9TY2kgICAgMTAwIC0+IDEwMAorZGRiYXM0MjEgIHRvRW5nICAgIDEwMCAtPiAxMDAKK2RkYmFzNDIyICB0b1NjaSAgIDEwMDAgLT4gMTAwMAorZGRiYXM0MjMgIHRvRW5nICAgMTAwMCAtPiAxMDAwCitkZGJhczQyNCAgdG9TY2kgIDk5OS45IC0+ICA5OTkuOQorZGRiYXM0MjUgIHRvRW5nICA5OTkuOSAtPiAgOTk5LjkKK2RkYmFzNDI2ICB0b1NjaSAxMDAwLjAgLT4gMTAwMC4wCitkZGJhczQyNyAgdG9FbmcgMTAwMC4wIC0+IDEwMDAuMAorZGRiYXM0MjggIHRvU2NpIDEwMDAuMSAtPiAxMDAwLjEKK2RkYmFzNDI5ICB0b0VuZyAxMDAwLjEgLT4gMTAwMC4xCitkZGJhczQzMCAgdG9TY2kgMTAwMDAgLT4gMTAwMDAKK2RkYmFzNDMxICB0b0VuZyAxMDAwMCAtPiAxMDAwMAorZGRiYXM0MzIgIHRvU2NpIDEwMDAwMCAtPiAxMDAwMDAKK2RkYmFzNDMzICB0b0VuZyAxMDAwMDAgLT4gMTAwMDAwCitkZGJhczQzNCAgdG9TY2kgMTAwMDAwMCAtPiAxMDAwMDAwCitkZGJhczQzNSAgdG9FbmcgMTAwMDAwMCAtPiAxMDAwMDAwCitkZGJhczQzNiAgdG9TY2kgMTAwMDAwMDAgLT4gMTAwMDAwMDAKK2RkYmFzNDM3ICB0b0VuZyAxMDAwMDAwMCAtPiAxMDAwMDAwMAorZGRiYXM0MzggIHRvU2NpIDEwMDAwMDAwMCAtPiAxMDAwMDAwMDAKK2RkYmFzNDM5ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAKK2RkYmFzNDQwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMCAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgICBSb3VuZGVkCitkZGJhczQ0MSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDAgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZAorZGRiYXM0NDIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAxICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NDMgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAxICAgIC0+IDEwLjAwMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NDQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAzICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NDUgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAzICAgIC0+IDEwLjAwMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NDYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA1ICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NDcgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA1ICAgIC0+IDEwLjAwMDAwMDAwMDAwMDAxRSsxNSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NDggIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA1MCAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxNyAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NDkgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA1MCAgIC0+IDEwMC4wMDAwMDAwMDAwMDAxRSsxNSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NTAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA5ICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NTEgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA5ICAgIC0+IDEwLjAwMDAwMDAwMDAwMDAxRSsxNSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NTIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgIFJvdW5kZWQKK2RkYmFzNDUzICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAxMDAuMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkCitkZGJhczQ1NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1NSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDAzICAgLT4gMTAwLjAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDA1ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1NyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDA1ICAgLT4gMTAwLjAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDA5ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ1OSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDA5ICAgLT4gMTAwLjAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0CitkZGJhczQ2MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE4ICAgUm91bmRlZAorZGRiYXM0NjEgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQKK2RkYmFzNDYyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMzAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDYzICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMzAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDY0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwNTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDY1ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwNTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDY2ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwOTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDY3ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwOTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QKK2RkYmFzNDY4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTkgICBSb3VuZGVkCitkZGJhczQ2OSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAuMDAwMDAwMDAwMDAwMDBFKzE4ICAgUm91bmRlZAorZGRiYXM0NzAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAzMDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NzEgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAzMDAwIC0+IDEwLjAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NzIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA1MDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NzMgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA1MDAwIC0+IDEwLjAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NzQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA5MDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOSAgIFJvdW5kZWQgSW5leGFjdAorZGRiYXM0NzUgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA5MDAwIC0+IDEwLjAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdAorCistLSBjaGVjayByb3VuZGluZyBtb2RlcyBoZWVkZWQKK3JvdW5kaW5nOiAgY2VpbGluZworZGRic3I0MDEgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjQwMiAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MDMgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDA0ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIHVwCitkZGJzcjQwNSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNDA2ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQwNyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MDggIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZmxvb3IKK2RkYnNyNDEwICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I0MTEgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDEyICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQxMyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2Rvd24KK2RkYnNyNDE1ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I0MTYgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDE3ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQxOCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MTkgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitkZGJzcjQyMSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNDIyICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQyMyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MjQgIHRvU2NpICAxLjExMTExMTExMTExMjM0NjUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDI1ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGRvd24KK2RkYnNyNDI2ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I0MjcgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDI4ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQyOSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX3VwCitkZGJzcjQzMSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNDMyICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjQzMyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I0MzQgIHRvU2NpICAxLjExMTExMTExMTExMjM0NjUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ3ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNDM1ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CistLSBuZWdhdGl2ZXMKK3JvdW5kaW5nOiAgY2VpbGluZworZGRic3I1MDEgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkZGJzcjUwMiAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MDMgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTA0ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIHVwCitkZGJzcjUwNSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNTA2ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUwNyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MDggIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZmxvb3IKK2RkYnNyNTEwICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I1MTEgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTEyICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUxMyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2Rvd24KK2RkYnNyNTE1ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I1MTYgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTE3ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUxOCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MTkgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitkZGJzcjUyMSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNTIyICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUyMyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MjQgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NjUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTI1ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGRvd24KK2RkYnNyNTI2ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZAorZGRic3I1MjcgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTI4ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUyOSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX3VwCitkZGJzcjUzMSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RkYnNyNTMyICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkZGJzcjUzMyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZGRic3I1MzQgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NjUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ3ICBSb3VuZGVkIEluZXhhY3QKK2RkYnNyNTM1ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CisKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gVGhlICdiYWRkaWVzJyB0ZXN0cyBmcm9tIERpYWdCaWdEZWNpbWFsLCBwbHVzIHNvbWUgbmV3IG9uZXMKK2RkYmFzNTAwIHRvU2NpICcxLi4yJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MDEgdG9TY2kgJy4nICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUwMiB0b1NjaSAnLi4nICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTAzIHRvU2NpICcrKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MDQgdG9TY2kgJy0tMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUwNSB0b1NjaSAnLSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTA2IHRvU2NpICcrLTEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MDcgdG9TY2kgJzEyZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUwOCB0b1NjaSAnMTJlKysnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTA5IHRvU2NpICcxMmY0JyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MTAgdG9TY2kgJyArMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUxMSB0b1NjaSAnKyAxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTEyIHRvU2NpICcxMiAnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MTMgdG9TY2kgJyArIDEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUxNCB0b1NjaSAnIC0gMSAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTE1IHRvU2NpICd4JyAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MTYgdG9TY2kgJy0xLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUxNyB0b1NjaSAnMTItJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTE4IHRvU2NpICczKycgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MTkgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUyMCB0b1NjaSAnMWUtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTIxIHRvU2NpICc3ZTk5OTk5YScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MjIgdG9TY2kgJzdlMTIzNTY3ODkweCcgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUyMyB0b1NjaSAnN2UxMjM1Njc4OTAxMngnICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTI0IHRvU2NpICcnICAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MjUgdG9TY2kgJ2UxMDAnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUyNiB0b1NjaSAnXHUwZTVhJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTI3IHRvU2NpICdcdTBiNjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MjggdG9TY2kgJzEyMyw2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUyOSB0b1NjaSAnMS4zNC41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTMwIHRvU2NpICcuMTIzLjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MzEgdG9TY2kgJzAxLjM1LicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUzMiB0b1NjaSAnMDEuMzUtJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTMzIHRvU2NpICcwMDAwLi4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MzQgdG9TY2kgJy4wMDAwLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUzNSB0b1NjaSAnMDAuLjAwJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTM2IHRvU2NpICcxMTFlKjEyMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1MzcgdG9TY2kgJzExMWUxMjMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczUzOCB0b1NjaSAnMTExZSsxMisnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTM5IHRvU2NpICcxMTFlMS0zLScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NDAgdG9TY2kgJzExMWUxKjIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU0MSB0b1NjaSAnMTExZTFlKzMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTQyIHRvU2NpICcxZTEuMCcgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NDMgdG9TY2kgJzFlMTIzZScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU0NCB0b1NjaSAndGVuJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTQ1IHRvU2NpICdPTkUnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NDYgdG9TY2kgJzFlLjEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU0NyB0b1NjaSAnMWUxLicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTQ4IHRvU2NpICcxZWUnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NDkgdG9TY2kgJ2UrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU1MCB0b1NjaSAnMS4yMy40JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTUxIHRvU2NpICcxLjIuMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NTIgdG9TY2kgJzFFKzEuMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU1MyB0b1NjaSAnMUUrMS4yLjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTU0IHRvU2NpICcxRSsrMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NTUgdG9TY2kgJzFFLS0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU1NiB0b1NjaSAnMUUrLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTU3IHRvU2NpICcxRS0rMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NTggdG9TY2kgJzFFJycxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU1OSB0b1NjaSAiMUUiIjEiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTYwIHRvU2NpICIxRSIiIiIiICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorLS0gTmVhci1zcGVjaWFscworZGRiYXM1NjEgdG9TY2kgInFOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU2MiB0b1NjaSAiTmFOcSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTYzIHRvU2NpICJOYU5zIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NjQgdG9TY2kgIkluZmkiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU2NSB0b1NjaSAiSW5maW4iICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTY2IHRvU2NpICJJbmZpbmkiICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NjcgdG9TY2kgIkluZmluaXQiICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU2OCB0b1NjaSAiLUluZmluaXQiICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTY5IHRvU2NpICIwSW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NzAgdG9TY2kgIjlJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU3MSB0b1NjaSAiLTBJbmYiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTcyIHRvU2NpICItOUluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1NzMgdG9TY2kgIi1zTmEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczU3NCB0b1NjaSAieE5hTiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTc1IHRvU2NpICIwc05hTiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorCistLSBzb21lIGJhZGRpZXMgd2l0aCBkb3RzIGFuZCBFcyBhbmQgZG90cyBhbmQgc3BlY2lhbHMKK2RkYmFzNTc2IHRvU2NpICAnZSsxJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTc3IHRvU2NpICAnLmUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTc4IHRvU2NpICAnKy5lKzEnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTc5IHRvU2NpICAnLS5lKycgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTgwIHRvU2NpICAnLS5lJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTgxIHRvU2NpICAnRSsxJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTgyIHRvU2NpICAnLkUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTgzIHRvU2NpICAnKy5FKzEnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTg0IHRvU2NpICAnLS5FKycgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNTg1IHRvU2NpICAnLS5FJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworZGRiYXM1ODYgdG9TY2kgICcuTmFOJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODcgdG9TY2kgICctLk5hTicgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODggdG9TY2kgICcrLnNOYU4nICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1ODkgdG9TY2kgICcrLkluZicgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM1OTAgdG9TY2kgICcuSW5maW5pdHknICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorCistLSBaZXJvcworZGRiYXM2MDEgdG9TY2kgMC4wMDAwMDAwMDAgICAgICAgLT4gMEUtOQorZGRiYXM2MDIgdG9TY2kgMC4wMDAwMDAwMCAgICAgICAgLT4gMEUtOAorZGRiYXM2MDMgdG9TY2kgMC4wMDAwMDAwICAgICAgICAgLT4gMEUtNworZGRiYXM2MDQgdG9TY2kgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDAKK2RkYmFzNjA1IHRvU2NpIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDAKK2RkYmFzNjA2IHRvU2NpIDAuMDAwMCAgICAgICAgICAgIC0+IDAuMDAwMAorZGRiYXM2MDcgdG9TY2kgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDAKK2RkYmFzNjA4IHRvU2NpIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDAKK2RkYmFzNjA5IHRvU2NpIDAuMCAgICAgICAgICAgICAgIC0+IDAuMAorZGRiYXM2MTAgdG9TY2kgIC4wICAgICAgICAgICAgICAgLT4gMC4wCitkZGJhczYxMSB0b1NjaSAwLiAgICAgICAgICAgICAgICAtPiAwCitkZGJhczYxMiB0b1NjaSAtLjAgICAgICAgICAgICAgICAtPiAtMC4wCitkZGJhczYxMyB0b1NjaSAtMC4gICAgICAgICAgICAgICAtPiAtMAorZGRiYXM2MTQgdG9TY2kgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMAorZGRiYXM2MTUgdG9TY2kgLTAuMDAgICAgICAgICAgICAgLT4gLTAuMDAKK2RkYmFzNjE2IHRvU2NpIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMAorZGRiYXM2MTcgdG9TY2kgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMAorZGRiYXM2MTggdG9TY2kgLTAuMDAwMDAgICAgICAgICAgLT4gLTAuMDAwMDAKK2RkYmFzNjE5IHRvU2NpIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMAorZGRiYXM2MjAgdG9TY2kgLTAuMDAwMDAwMCAgICAgICAgLT4gLTBFLTcKK2RkYmFzNjIxIHRvU2NpIC0wLjAwMDAwMDAwICAgICAgIC0+IC0wRS04CitkZGJhczYyMiB0b1NjaSAtMC4wMDAwMDAwMDAgICAgICAtPiAtMEUtOQorCitkZGJhczYzMCB0b1NjaSAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwCitkZGJhczYzMSB0b1NjaSAgMC4wMEUrMSAgICAgICAgICAtPiAwLjAKK2RkYmFzNjMyIHRvU2NpICAwLjAwRSsyICAgICAgICAgIC0+IDAKK2RkYmFzNjMzIHRvU2NpICAwLjAwRSszICAgICAgICAgIC0+IDBFKzEKK2RkYmFzNjM0IHRvU2NpICAwLjAwRSs0ICAgICAgICAgIC0+IDBFKzIKK2RkYmFzNjM1IHRvU2NpICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMKK2RkYmFzNjM2IHRvU2NpICAwLjAwRSs2ICAgICAgICAgIC0+IDBFKzQKK2RkYmFzNjM3IHRvU2NpICAwLjAwRSs3ICAgICAgICAgIC0+IDBFKzUKK2RkYmFzNjM4IHRvU2NpICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYKK2RkYmFzNjM5IHRvU2NpICAwLjAwRSs5ICAgICAgICAgIC0+IDBFKzcKKworZGRiYXM2NDAgdG9TY2kgIDAuMEUrMCAgICAgICAgICAgLT4gMC4wCitkZGJhczY0MSB0b1NjaSAgMC4wRSsxICAgICAgICAgICAtPiAwCitkZGJhczY0MiB0b1NjaSAgMC4wRSsyICAgICAgICAgICAtPiAwRSsxCitkZGJhczY0MyB0b1NjaSAgMC4wRSszICAgICAgICAgICAtPiAwRSsyCitkZGJhczY0NCB0b1NjaSAgMC4wRSs0ICAgICAgICAgICAtPiAwRSszCitkZGJhczY0NSB0b1NjaSAgMC4wRSs1ICAgICAgICAgICAtPiAwRSs0CitkZGJhczY0NiB0b1NjaSAgMC4wRSs2ICAgICAgICAgICAtPiAwRSs1CitkZGJhczY0NyB0b1NjaSAgMC4wRSs3ICAgICAgICAgICAtPiAwRSs2CitkZGJhczY0OCB0b1NjaSAgMC4wRSs4ICAgICAgICAgICAtPiAwRSs3CitkZGJhczY0OSB0b1NjaSAgMC4wRSs5ICAgICAgICAgICAtPiAwRSs4CisKK2RkYmFzNjUwIHRvU2NpICAwRSswICAgICAgICAgICAgIC0+IDAKK2RkYmFzNjUxIHRvU2NpICAwRSsxICAgICAgICAgICAgIC0+IDBFKzEKK2RkYmFzNjUyIHRvU2NpICAwRSsyICAgICAgICAgICAgIC0+IDBFKzIKK2RkYmFzNjUzIHRvU2NpICAwRSszICAgICAgICAgICAgIC0+IDBFKzMKK2RkYmFzNjU0IHRvU2NpICAwRSs0ICAgICAgICAgICAgIC0+IDBFKzQKK2RkYmFzNjU1IHRvU2NpICAwRSs1ICAgICAgICAgICAgIC0+IDBFKzUKK2RkYmFzNjU2IHRvU2NpICAwRSs2ICAgICAgICAgICAgIC0+IDBFKzYKK2RkYmFzNjU3IHRvU2NpICAwRSs3ICAgICAgICAgICAgIC0+IDBFKzcKK2RkYmFzNjU4IHRvU2NpICAwRSs4ICAgICAgICAgICAgIC0+IDBFKzgKK2RkYmFzNjU5IHRvU2NpICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkKKworZGRiYXM2NjAgdG9TY2kgIDAuMEUtMCAgICAgICAgICAgLT4gMC4wCitkZGJhczY2MSB0b1NjaSAgMC4wRS0xICAgICAgICAgICAtPiAwLjAwCitkZGJhczY2MiB0b1NjaSAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMAorZGRiYXM2NjMgdG9TY2kgIDAuMEUtMyAgICAgICAgICAgLT4gMC4wMDAwCitkZGJhczY2NCB0b1NjaSAgMC4wRS00ICAgICAgICAgICAtPiAwLjAwMDAwCitkZGJhczY2NSB0b1NjaSAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMAorZGRiYXM2NjYgdG9TY2kgIDAuMEUtNiAgICAgICAgICAgLT4gMEUtNworZGRiYXM2NjcgdG9TY2kgIDAuMEUtNyAgICAgICAgICAgLT4gMEUtOAorZGRiYXM2NjggdG9TY2kgIDAuMEUtOCAgICAgICAgICAgLT4gMEUtOQorZGRiYXM2NjkgdG9TY2kgIDAuMEUtOSAgICAgICAgICAgLT4gMEUtMTAKKworZGRiYXM2NzAgdG9TY2kgIDAuMDBFLTAgICAgICAgICAgLT4gMC4wMAorZGRiYXM2NzEgdG9TY2kgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDAKK2RkYmFzNjcyIHRvU2NpICAwLjAwRS0yICAgICAgICAgIC0+IDAuMDAwMAorZGRiYXM2NzMgdG9TY2kgIDAuMDBFLTMgICAgICAgICAgLT4gMC4wMDAwMAorZGRiYXM2NzQgdG9TY2kgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDAKK2RkYmFzNjc1IHRvU2NpICAwLjAwRS01ICAgICAgICAgIC0+IDBFLTcKK2RkYmFzNjc2IHRvU2NpICAwLjAwRS02ICAgICAgICAgIC0+IDBFLTgKK2RkYmFzNjc3IHRvU2NpICAwLjAwRS03ICAgICAgICAgIC0+IDBFLTkKK2RkYmFzNjc4IHRvU2NpICAwLjAwRS04ICAgICAgICAgIC0+IDBFLTEwCitkZGJhczY3OSB0b1NjaSAgMC4wMEUtOSAgICAgICAgICAtPiAwRS0xMQorCitkZGJhczY4MCB0b1NjaSAgMDAwMDAwLiAgICAgICAgICAtPiAgMAorZGRiYXM2ODEgdG9TY2kgICAwMDAwMC4gICAgICAgICAgLT4gIDAKK2RkYmFzNjgyIHRvU2NpICAgIDAwMDAuICAgICAgICAgIC0+ICAwCitkZGJhczY4MyB0b1NjaSAgICAgMDAwLiAgICAgICAgICAtPiAgMAorZGRiYXM2ODQgdG9TY2kgICAgICAwMC4gICAgICAgICAgLT4gIDAKK2RkYmFzNjg1IHRvU2NpICAgICAgIDAuICAgICAgICAgIC0+ICAwCitkZGJhczY4NiB0b1NjaSAgKzAwMDAwLiAgICAgICAgICAtPiAgMAorZGRiYXM2ODcgdG9TY2kgIC0wMDAwMC4gICAgICAgICAgLT4gLTAKK2RkYmFzNjg4IHRvU2NpICArMC4gICAgICAgICAgICAgIC0+ICAwCitkZGJhczY4OSB0b1NjaSAgLTAuICAgICAgICAgICAgICAtPiAtMAorCistLSBTcGVjaWFscworZGRiYXM3MDAgdG9TY2kgIk5hTiIgICAgICAgICAgICAgLT4gTmFOCitkZGJhczcwMSB0b1NjaSAibmFuIiAgICAgICAgICAgICAtPiBOYU4KK2RkYmFzNzAyIHRvU2NpICJuQW4iICAgICAgICAgICAgIC0+IE5hTgorZGRiYXM3MDMgdG9TY2kgIk5BTiIgICAgICAgICAgICAgLT4gTmFOCitkZGJhczcwNCB0b1NjaSAiK05hTiIgICAgICAgICAgICAtPiBOYU4KK2RkYmFzNzA1IHRvU2NpICIrbmFuIiAgICAgICAgICAgIC0+IE5hTgorZGRiYXM3MDYgdG9TY2kgIituQW4iICAgICAgICAgICAgLT4gTmFOCitkZGJhczcwNyB0b1NjaSAiK05BTiIgICAgICAgICAgICAtPiBOYU4KK2RkYmFzNzA4IHRvU2NpICItTmFOIiAgICAgICAgICAgIC0+IC1OYU4KK2RkYmFzNzA5IHRvU2NpICItbmFuIiAgICAgICAgICAgIC0+IC1OYU4KK2RkYmFzNzEwIHRvU2NpICItbkFuIiAgICAgICAgICAgIC0+IC1OYU4KK2RkYmFzNzExIHRvU2NpICItTkFOIiAgICAgICAgICAgIC0+IC1OYU4KK2RkYmFzNzEyIHRvU2NpICdOYU4wJyAgICAgICAgICAgIC0+IE5hTgorZGRiYXM3MTMgdG9TY2kgJ05hTjEnICAgICAgICAgICAgLT4gTmFOMQorZGRiYXM3MTQgdG9TY2kgJ05hTjEyJyAgICAgICAgICAgLT4gTmFOMTIKK2RkYmFzNzE1IHRvU2NpICdOYU4xMjMnICAgICAgICAgIC0+IE5hTjEyMworZGRiYXM3MTYgdG9TY2kgJ05hTjEyMzQnICAgICAgICAgLT4gTmFOMTIzNAorZGRiYXM3MTcgdG9TY2kgJ05hTjAxJyAgICAgICAgICAgLT4gTmFOMQorZGRiYXM3MTggdG9TY2kgJ05hTjAxMicgICAgICAgICAgLT4gTmFOMTIKK2RkYmFzNzE5IHRvU2NpICdOYU4wMTIzJyAgICAgICAgIC0+IE5hTjEyMworZGRiYXM3MjAgdG9TY2kgJ05hTjAxMjM0JyAgICAgICAgLT4gTmFOMTIzNAorZGRiYXM3MjEgdG9TY2kgJ05hTjAwMScgICAgICAgICAgLT4gTmFOMQorZGRiYXM3MjIgdG9TY2kgJ05hTjAwMTInICAgICAgICAgLT4gTmFOMTIKK2RkYmFzNzIzIHRvU2NpICdOYU4wMDEyMycgICAgICAgIC0+IE5hTjEyMworZGRiYXM3MjQgdG9TY2kgJ05hTjAwMTIzNCcgICAgICAgLT4gTmFOMTIzNAorZGRiYXM3MjUgdG9TY2kgJ05hTjEyMzQ1Njc4OTAxMjM0NTYnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM3MjYgdG9TY2kgJ05hTjEyM2UrMScgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczcyNyB0b1NjaSAnTmFOMTIuNDUnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNzI4IHRvU2NpICdOYU4tMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZGRiYXM3MjkgdG9TY2kgJ05hTisxMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKK2RkYmFzNzMwIHRvU2NpICJzTmFOIiAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzMxIHRvU2NpICJzbmFuIiAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzMyIHRvU2NpICJTbkFuIiAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzMzIHRvU2NpICJTTkFOIiAgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzM0IHRvU2NpICIrc05hTiIgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzM1IHRvU2NpICIrc25hbiIgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzM2IHRvU2NpICIrU25BbiIgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzM3IHRvU2NpICIrU05BTiIgICAgICAgICAgIC0+IHNOYU4KK2RkYmFzNzM4IHRvU2NpICItc05hTiIgICAgICAgICAgIC0+IC1zTmFOCitkZGJhczczOSB0b1NjaSAiLXNuYW4iICAgICAgICAgICAtPiAtc05hTgorZGRiYXM3NDAgdG9TY2kgIi1TbkFuIiAgICAgICAgICAgLT4gLXNOYU4KK2RkYmFzNzQxIHRvU2NpICItU05BTiIgICAgICAgICAgIC0+IC1zTmFOCitkZGJhczc0MiB0b1NjaSAnc05hTjAwMDAnICAgICAgICAtPiBzTmFOCitkZGJhczc0MyB0b1NjaSAnc05hTjcnICAgICAgICAgICAtPiBzTmFONworZGRiYXM3NDQgdG9TY2kgJ3NOYU4wMDcyMzQnICAgICAgLT4gc05hTjcyMzQKK2RkYmFzNzQ1IHRvU2NpICdzTmFONzIzNDU2MTIzNDU2Nzg5MCcgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkZGJhczc0NiB0b1NjaSAnc05hTjcyLjQ1JyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RkYmFzNzQ3IHRvU2NpICdzTmFOLTcyJyAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorCitkZGJhczc0OCB0b1NjaSAiSW5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NDkgdG9TY2kgImluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzUwIHRvU2NpICJpTmYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc1MSB0b1NjaSAiSU5GIiAgICAgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NTIgdG9TY2kgIitJbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzUzIHRvU2NpICIraW5mIiAgICAgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc1NCB0b1NjaSAiK2lOZiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NTUgdG9TY2kgIitJTkYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzU2IHRvU2NpICItSW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorZGRiYXM3NTcgdG9TY2kgIi1pbmYiICAgICAgICAgICAgLT4gLUluZmluaXR5CitkZGJhczc1OCB0b1NjaSAiLWlOZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2RkYmFzNzU5IHRvU2NpICItSU5GIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorCitkZGJhczc2MCB0b1NjaSAiSW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NjEgdG9TY2kgImluZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzYyIHRvU2NpICJpTmZJbkl0WSIgICAgICAgIC0+IEluZmluaXR5CitkZGJhczc2MyB0b1NjaSAiSU5GSU5JVFkiICAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NjQgdG9TY2kgIitJbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzY1IHRvU2NpICIraW5maW5pdHkiICAgICAgIC0+IEluZmluaXR5CitkZGJhczc2NiB0b1NjaSAiK2lOZkluSXRZIiAgICAgICAtPiBJbmZpbml0eQorZGRiYXM3NjcgdG9TY2kgIitJTkZJTklUWSIgICAgICAgLT4gSW5maW5pdHkKK2RkYmFzNzY4IHRvU2NpICItSW5maW5pdHkiICAgICAgIC0+IC1JbmZpbml0eQorZGRiYXM3NjkgdG9TY2kgIi1pbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5CitkZGJhczc3MCB0b1NjaSAiLWlOZkluSXRZIiAgICAgICAtPiAtSW5maW5pdHkKK2RkYmFzNzcxIHRvU2NpICItSU5GSU5JVFkiICAgICAgIC0+IC1JbmZpbml0eQorCistLSBTcGVjaWFscyBhbmQgemVyb3MgZm9yIHRvRW5nCitkZGJhc3Q3NzIgdG9FbmcgIk5hTiIgICAgICAgICAgICAgIC0+IE5hTgorZGRiYXN0NzczIHRvRW5nICItSW5maW5pdHkiICAgICAgICAtPiAtSW5maW5pdHkKK2RkYmFzdDc3NCB0b0VuZyAiLXNOYU4iICAgICAgICAgICAgLT4gLXNOYU4KK2RkYmFzdDc3NSB0b0VuZyAiLU5hTiIgICAgICAgICAgICAgLT4gLU5hTgorZGRiYXN0Nzc2IHRvRW5nICIrSW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQorZGRiYXN0Nzc4IHRvRW5nICIrc05hTiIgICAgICAgICAgICAtPiBzTmFOCitkZGJhc3Q3NzkgdG9FbmcgIitOYU4iICAgICAgICAgICAgIC0+IE5hTgorZGRiYXN0NzgwIHRvRW5nICJJTkZJTklUWSIgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXN0NzgxIHRvRW5nICJTTkFOIiAgICAgICAgICAgICAtPiBzTmFOCitkZGJhc3Q3ODIgdG9FbmcgIk5BTiIgICAgICAgICAgICAgIC0+IE5hTgorZGRiYXN0NzgzIHRvRW5nICJpbmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXN0Nzg0IHRvRW5nICJzbmFuIiAgICAgICAgICAgICAtPiBzTmFOCitkZGJhc3Q3ODUgdG9FbmcgIm5hbiIgICAgICAgICAgICAgIC0+IE5hTgorZGRiYXN0Nzg2IHRvRW5nICJJbkZJTklUWSIgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXN0Nzg3IHRvRW5nICJTbkFOIiAgICAgICAgICAgICAtPiBzTmFOCitkZGJhc3Q3ODggdG9FbmcgIm5BTiIgICAgICAgICAgICAgIC0+IE5hTgorZGRiYXN0Nzg5IHRvRW5nICJpTmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXN0NzkwIHRvRW5nICJzTmFuIiAgICAgICAgICAgICAtPiBzTmFOCitkZGJhc3Q3OTEgdG9FbmcgIk5hbiIgICAgICAgICAgICAgIC0+IE5hTgorZGRiYXN0NzkyIHRvRW5nICJJbmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQorZGRiYXN0NzkzIHRvRW5nICJzTmFOIiAgICAgICAgICAgICAtPiBzTmFOCisKKy0tIFplcm8gdG9FbmcsIGV0Yy4KK2RkYmFzdDgwMCB0b0VuZyAwZSsxICAgICAgICAgICAgICAtPiAiMC4wMEUrMyIgIC0tIGRvYyBleGFtcGxlCisKK2RkYmFzdDgwMSB0b0VuZyAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05CitkZGJhc3Q4MDIgdG9FbmcgMC4wMDAwMDAwMCAgICAgICAgLT4gMC4wMEUtNgorZGRiYXN0ODAzIHRvRW5nIDAuMDAwMDAwMCAgICAgICAgIC0+IDAuMEUtNgorZGRiYXN0ODA0IHRvRW5nIDAuMDAwMDAwICAgICAgICAgIC0+IDAuMDAwMDAwCitkZGJhc3Q4MDUgdG9FbmcgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMAorZGRiYXN0ODA2IHRvRW5nIDAuMDAwMCAgICAgICAgICAgIC0+IDAuMDAwMAorZGRiYXN0ODA3IHRvRW5nIDAuMDAwICAgICAgICAgICAgIC0+IDAuMDAwCitkZGJhc3Q4MDggdG9FbmcgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMAorZGRiYXN0ODA5IHRvRW5nIDAuMCAgICAgICAgICAgICAgIC0+IDAuMAorZGRiYXN0ODEwIHRvRW5nICAuMCAgICAgICAgICAgICAgIC0+IDAuMAorZGRiYXN0ODExIHRvRW5nIDAuICAgICAgICAgICAgICAgIC0+IDAKK2RkYmFzdDgxMiB0b0VuZyAtLjAgICAgICAgICAgICAgICAtPiAtMC4wCitkZGJhc3Q4MTMgdG9FbmcgLTAuICAgICAgICAgICAgICAgLT4gLTAKK2RkYmFzdDgxNCB0b0VuZyAtMC4wICAgICAgICAgICAgICAtPiAtMC4wCitkZGJhc3Q4MTUgdG9FbmcgLTAuMDAgICAgICAgICAgICAgLT4gLTAuMDAKK2RkYmFzdDgxNiB0b0VuZyAtMC4wMDAgICAgICAgICAgICAtPiAtMC4wMDAKK2RkYmFzdDgxNyB0b0VuZyAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwCitkZGJhc3Q4MTggdG9FbmcgLTAuMDAwMDAgICAgICAgICAgLT4gLTAuMDAwMDAKK2RkYmFzdDgxOSB0b0VuZyAtMC4wMDAwMDAgICAgICAgICAtPiAtMC4wMDAwMDAKK2RkYmFzdDgyMCB0b0VuZyAtMC4wMDAwMDAwICAgICAgICAtPiAtMC4wRS02CitkZGJhc3Q4MjEgdG9FbmcgLTAuMDAwMDAwMDAgICAgICAgLT4gLTAuMDBFLTYKK2RkYmFzdDgyMiB0b0VuZyAtMC4wMDAwMDAwMDAgICAgICAtPiAtMEUtOQorCitkZGJhc3Q4MzAgdG9FbmcgIDAuMDBFKzAgICAgICAgICAgLT4gMC4wMAorZGRiYXN0ODMxIHRvRW5nICAwLjAwRSsxICAgICAgICAgIC0+IDAuMAorZGRiYXN0ODMyIHRvRW5nICAwLjAwRSsyICAgICAgICAgIC0+IDAKK2RkYmFzdDgzMyB0b0VuZyAgMC4wMEUrMyAgICAgICAgICAtPiAwLjAwRSszCitkZGJhc3Q4MzQgdG9FbmcgIDAuMDBFKzQgICAgICAgICAgLT4gMC4wRSszCitkZGJhc3Q4MzUgdG9FbmcgIDAuMDBFKzUgICAgICAgICAgLT4gMEUrMworZGRiYXN0ODM2IHRvRW5nICAwLjAwRSs2ICAgICAgICAgIC0+IDAuMDBFKzYKK2RkYmFzdDgzNyB0b0VuZyAgMC4wMEUrNyAgICAgICAgICAtPiAwLjBFKzYKK2RkYmFzdDgzOCB0b0VuZyAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2CitkZGJhc3Q4MzkgdG9FbmcgIDAuMDBFKzkgICAgICAgICAgLT4gMC4wMEUrOQorCitkZGJhc3Q4NDAgdG9FbmcgIDAuMEUrMCAgICAgICAgICAgLT4gMC4wCitkZGJhc3Q4NDEgdG9FbmcgIDAuMEUrMSAgICAgICAgICAgLT4gMAorZGRiYXN0ODQyIHRvRW5nICAwLjBFKzIgICAgICAgICAgIC0+IDAuMDBFKzMKK2RkYmFzdDg0MyB0b0VuZyAgMC4wRSszICAgICAgICAgICAtPiAwLjBFKzMKK2RkYmFzdDg0NCB0b0VuZyAgMC4wRSs0ICAgICAgICAgICAtPiAwRSszCitkZGJhc3Q4NDUgdG9FbmcgIDAuMEUrNSAgICAgICAgICAgLT4gMC4wMEUrNgorZGRiYXN0ODQ2IHRvRW5nICAwLjBFKzYgICAgICAgICAgIC0+IDAuMEUrNgorZGRiYXN0ODQ3IHRvRW5nICAwLjBFKzcgICAgICAgICAgIC0+IDBFKzYKK2RkYmFzdDg0OCB0b0VuZyAgMC4wRSs4ICAgICAgICAgICAtPiAwLjAwRSs5CitkZGJhc3Q4NDkgdG9FbmcgIDAuMEUrOSAgICAgICAgICAgLT4gMC4wRSs5CisKK2RkYmFzdDg1MCB0b0VuZyAgMEUrMCAgICAgICAgICAgICAtPiAwCitkZGJhc3Q4NTEgdG9FbmcgIDBFKzEgICAgICAgICAgICAgLT4gMC4wMEUrMworZGRiYXN0ODUyIHRvRW5nICAwRSsyICAgICAgICAgICAgIC0+IDAuMEUrMworZGRiYXN0ODUzIHRvRW5nICAwRSszICAgICAgICAgICAgIC0+IDBFKzMKK2RkYmFzdDg1NCB0b0VuZyAgMEUrNCAgICAgICAgICAgICAtPiAwLjAwRSs2CitkZGJhc3Q4NTUgdG9FbmcgIDBFKzUgICAgICAgICAgICAgLT4gMC4wRSs2CitkZGJhc3Q4NTYgdG9FbmcgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNgorZGRiYXN0ODU3IHRvRW5nICAwRSs3ICAgICAgICAgICAgIC0+IDAuMDBFKzkKK2RkYmFzdDg1OCB0b0VuZyAgMEUrOCAgICAgICAgICAgICAtPiAwLjBFKzkKK2RkYmFzdDg1OSB0b0VuZyAgMEUrOSAgICAgICAgICAgICAtPiAwRSs5CisKK2RkYmFzdDg2MCB0b0VuZyAgMC4wRS0wICAgICAgICAgICAtPiAwLjAKK2RkYmFzdDg2MSB0b0VuZyAgMC4wRS0xICAgICAgICAgICAtPiAwLjAwCitkZGJhc3Q4NjIgdG9FbmcgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDAKK2RkYmFzdDg2MyB0b0VuZyAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDAKK2RkYmFzdDg2NCB0b0VuZyAgMC4wRS00ICAgICAgICAgICAtPiAwLjAwMDAwCitkZGJhc3Q4NjUgdG9FbmcgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDAKK2RkYmFzdDg2NiB0b0VuZyAgMC4wRS02ICAgICAgICAgICAtPiAwLjBFLTYKK2RkYmFzdDg2NyB0b0VuZyAgMC4wRS03ICAgICAgICAgICAtPiAwLjAwRS02CitkZGJhc3Q4NjggdG9FbmcgIDAuMEUtOCAgICAgICAgICAgLT4gMEUtOQorZGRiYXN0ODY5IHRvRW5nICAwLjBFLTkgICAgICAgICAgIC0+IDAuMEUtOQorCitkZGJhc3Q4NzAgdG9FbmcgIDAuMDBFLTAgICAgICAgICAgLT4gMC4wMAorZGRiYXN0ODcxIHRvRW5nICAwLjAwRS0xICAgICAgICAgIC0+IDAuMDAwCitkZGJhc3Q4NzIgdG9FbmcgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwCitkZGJhc3Q4NzMgdG9FbmcgIDAuMDBFLTMgICAgICAgICAgLT4gMC4wMDAwMAorZGRiYXN0ODc0IHRvRW5nICAwLjAwRS00ICAgICAgICAgIC0+IDAuMDAwMDAwCitkZGJhc3Q4NzUgdG9FbmcgIDAuMDBFLTUgICAgICAgICAgLT4gMC4wRS02CitkZGJhc3Q4NzYgdG9FbmcgIDAuMDBFLTYgICAgICAgICAgLT4gMC4wMEUtNgorZGRiYXN0ODc3IHRvRW5nICAwLjAwRS03ICAgICAgICAgIC0+IDBFLTkKK2RkYmFzdDg3OCB0b0VuZyAgMC4wMEUtOCAgICAgICAgICAtPiAwLjBFLTkKK2RkYmFzdDg3OSB0b0VuZyAgMC4wMEUtOSAgICAgICAgICAtPiAwLjAwRS05CisKKy0tIGxvbmcgaW5wdXQgc3RyaW5ncworZGRiYXM4MDEgdG9zY2kgJzAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwMiB0b3NjaSAnMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwMyB0b3NjaSAnMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MDQgdG9zY2kgJzAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwNSB0b3NjaSAnMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwNiB0b3NjaSAnMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MDcgdG9zY2kgJzAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwOCB0b3NjaSAnMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkZGJhczgwOSB0b3NjaSAnMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MTAgdG9zY2kgJzAwMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CisKK2RkYmFzODExIHRvc2NpICcwLjEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MTIgdG9zY2kgJzAuMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODEzIHRvc2NpICcwLjAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODE0IHRvc2NpICcwLjAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAwMTIzNDU2Nzg5MDEyMzQ1NgorZGRiYXM4MTUgdG9zY2kgJzAuMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAwMDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODE2IHRvc2NpICcwLjAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAwMDEyMzQ1Njc4OTAxMjM0NTYKK2RkYmFzODE3IHRvc2NpICcwLjAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS03CitkZGJhczgxOCB0b3NjaSAnMC4wMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTgKK2RkYmFzODE5IHRvc2NpICcwLjAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTkKK2RkYmFzODIwIHRvc2NpICcwLjAwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS0xMAorCitkZGJhczgyMSB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsxOSBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODIyIHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyMCBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODIzIHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyJyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjEgSW5leGFjdCBSb3VuZGVkCitkZGJhczgyNCB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyMiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODI1IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyMyBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODI2IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjQgSW5leGFjdCBSb3VuZGVkCitkZGJhczgyNyB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyNSBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODI4IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjcnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyNiBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzODI5IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjcgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cworZGRiYXM5MDYgdG9TY2kgJzk5ZTk5OTk5OTk5OScgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MDcgdG9TY2kgJzk5OWU5OTk5OTk5OTknICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MDggdG9TY2kgJzAuOWUtOTk5OTk5OTk5JyAgICAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTA5IHRvU2NpICcwLjA5ZS05OTk5OTk5OTknICAgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkxMCB0b1NjaSAnMC4xZTEwMDAwMDAwMDAnICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkxMSB0b1NjaSAnMTBlLTEwMDAwMDAwMDAnICAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXM5MTIgdG9TY2kgJzAuOWU5OTk5OTk5OTk5JyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MTMgdG9TY2kgJzk5ZS05OTk5OTk5OTk5JyAgICAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTE0IHRvU2NpICcxMTFlOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzOTE1IHRvU2NpICcxMTExZS05OTk5OTk5OTk5JyAgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkxNiB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OTknICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXM5MTcgdG9TY2kgJzdlMTAwMDAwMDAwMCcgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorLS0gbmVnYXRpdmVzIHRoZSBzYW1lCitkZGJhczkxOCB0b1NjaSAnLTk5ZTk5OTk5OTk5OScgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MTkgdG9TY2kgJy05OTllOTk5OTk5OTk5JyAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzOTIwIHRvU2NpICctMC45ZS05OTk5OTk5OTknICAgIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXM5MjEgdG9TY2kgJy0wLjA5ZS05OTk5OTk5OTknICAgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkyMiB0b1NjaSAnLTAuMWUxMDAwMDAwMDAwJyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MjMgdG9TY2kgJy0xMGUtMTAwMDAwMDAwMCcgICAgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkyNCB0b1NjaSAnLTAuOWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MjUgdG9TY2kgJy05OWUtOTk5OTk5OTk5OScgICAgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkyNiB0b1NjaSAnLTExMWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MjcgdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5JyAgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczkyOCB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTk5JyAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzOTI5IHRvU2NpICctN2UxMDAwMDAwMDAwJyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG92ZXJmbG93IHJlc3VsdHMgYXQgZGlmZmVyZW50IHJvdW5kaW5nIG1vZGVzCityb3VuZGluZzogIGNlaWxpbmcKK2RkYmFzOTMwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkZGJhczkzMSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIHVwCitkZGJhczkzMiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MzMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgZG93bgorZGRiYXM5MzQgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MzUgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICBmbG9vcgorZGRiYXM5MzYgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MzcgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX3VwCitkZGJhczkzOCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5MzkgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitkZGJhczk0MCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5NDEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgaGFsZl9kb3duCitkZGJhczk0MiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZGRiYXM5NDMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX2V2ZW4KKworLS0gTm93IGNoZWNrIDg1NC83NTRyIHNvbWUgc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93IHRvIDAKK2RkYmVtNDAwIHRvU2NpICAxLjAwMDBFLTM4MyAgICAgLT4gMS4wMDAwRS0zODMKK2RkYmVtNDAxIHRvU2NpICAwLjFFLTM5NCAgICAgICAgLT4gMUUtMzk1ICAgICAgIFN1Ym5vcm1hbAorZGRiZW00MDIgdG9TY2kgIDAuMTAwMEUtMzk0ICAgICAtPiAxLjAwMEUtMzk1ICAgU3Vibm9ybWFsCitkZGJlbTQwMyB0b1NjaSAgMC4wMTAwRS0zOTQgICAgIC0+IDEuMDBFLTM5NiAgICBTdWJub3JtYWwKK2RkYmVtNDA0IHRvU2NpICAwLjAwMTBFLTM5NCAgICAgLT4gMS4wRS0zOTcgICAgIFN1Ym5vcm1hbAorZGRiZW00MDUgdG9TY2kgIDAuMDAwMUUtMzk0ICAgICAtPiAxRS0zOTggICAgICAgU3Vibm9ybWFsCitkZGJlbTQwNiB0b1NjaSAgMC4wMDAxMEUtMzk0ICAgIC0+IDFFLTM5OCAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkYmVtNDA3IHRvU2NpICAwLjAwMDEzRS0zOTQgICAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MDggdG9TY2kgIDAuMDAwMTVFLTM5NCAgICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQwOSB0b1NjaSAgMC4wMDAxN0UtMzk0ICAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDEwIHRvU2NpICAwLjAwMDIzRS0zOTQgICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MTEgdG9TY2kgIDAuMDAwMjVFLTM5NCAgICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQxMiB0b1NjaSAgMC4wMDAyN0UtMzk0ICAgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDEzIHRvU2NpICAwLjAwMDE0OUUtMzk0ICAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MTQgdG9TY2kgIDAuMDAwMTUwRS0zOTQgICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQxNSB0b1NjaSAgMC4wMDAxNTFFLTM5NCAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDE2IHRvU2NpICAwLjAwMDI0OUUtMzk0ICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MTcgdG9TY2kgIDAuMDAwMjUwRS0zOTQgICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQxOCB0b1NjaSAgMC4wMDAyNTFFLTM5NCAgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDE5IHRvU2NpICAwLjAwMDA5RS0zOTQgICAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MjAgdG9TY2kgIDAuMDAwMDVFLTM5NCAgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmVtNDIxIHRvU2NpICAwLjAwMDAzRS0zOTQgICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJlbTQyMiB0b1NjaSAgMC4wMDAwMDlFLTM5NCAgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiZW00MjMgdG9TY2kgIDAuMDAwMDA1RS0zOTQgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmVtNDI0IHRvU2NpICAwLjAwMDAwM0UtMzk0ICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2RkYmVtNDI1IHRvU2NpICAwLjAwMTA0OUUtMzk0ICAgLT4gMS4wRS0zOTcgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MjYgdG9TY2kgIDAuMDAxMDUwRS0zOTQgICAtPiAxLjBFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQyNyB0b1NjaSAgMC4wMDEwNTFFLTM5NCAgIC0+IDEuMUUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDI4IHRvU2NpICAwLjAwMTE0OUUtMzk0ICAgLT4gMS4xRS0zOTcgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MjkgdG9TY2kgIDAuMDAxMTUwRS0zOTQgICAtPiAxLjJFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQzMCB0b1NjaSAgMC4wMDExNTFFLTM5NCAgIC0+IDEuMkUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZGRiZW00MzIgdG9TY2kgIDAuMDEwMDQ5RS0zOTQgICAtPiAxLjAwRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQzMyB0b1NjaSAgMC4wMTAwNTBFLTM5NCAgIC0+IDEuMDBFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDM0IHRvU2NpICAwLjAxMDA1MUUtMzk0ICAgLT4gMS4wMUUtMzk2ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00MzUgdG9TY2kgIDAuMDEwMTQ5RS0zOTQgICAtPiAxLjAxRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQzNiB0b1NjaSAgMC4wMTAxNTBFLTM5NCAgIC0+IDEuMDJFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDM3IHRvU2NpICAwLjAxMDE1MUUtMzk0ICAgLT4gMS4wMkUtMzk2ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkZGJlbTQ0MCB0b1NjaSAgMC4xMDEwM0UtMzk0ICAgIC0+IDEuMDEwRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDQxIHRvU2NpICAwLjEwMTA1RS0zOTQgICAgLT4gMS4wMTBFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NDIgdG9TY2kgIDAuMTAxMDdFLTM5NCAgICAtPiAxLjAxMUUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ0MyB0b1NjaSAgMC4xMDExM0UtMzk0ICAgIC0+IDEuMDExRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDQ0IHRvU2NpICAwLjEwMTE1RS0zOTQgICAgLT4gMS4wMTJFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NDUgdG9TY2kgIDAuMTAxMTdFLTM5NCAgICAtPiAxLjAxMkUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkYmVtNDUwIHRvU2NpICAxLjEwNzMwRS0zOTUgICAtPiAxLjEwN0UtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ1MSB0b1NjaSAgMS4xMDc1MEUtMzk1ICAgLT4gMS4xMDhFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NTIgdG9TY2kgIDEuMTA3NzBFLTM5NSAgIC0+IDEuMTA4RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDUzIHRvU2NpICAxLjEwODMwRS0zOTUgICAtPiAxLjEwOEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGJlbTQ1NCB0b1NjaSAgMS4xMDg1MEUtMzk1ICAgLT4gMS4xMDhFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NTUgdG9TY2kgIDEuMTA4NzBFLTM5NSAgIC0+IDEuMTA5RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbWFrZSBzdXJlIHNpZ24gT0sKK2RkYmVtNDU2IHRvU2NpICAtMC4xMDEwM0UtMzk0ICAgLT4gLTEuMDEwRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDU3IHRvU2NpICAtMC4xMDEwNUUtMzk0ICAgLT4gLTEuMDEwRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDU4IHRvU2NpICAtMC4xMDEwN0UtMzk0ICAgLT4gLTEuMDExRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDU5IHRvU2NpICAtMC4xMDExM0UtMzk0ICAgLT4gLTEuMDExRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDYwIHRvU2NpICAtMC4xMDExNUUtMzk0ICAgLT4gLTEuMDEyRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkYmVtNDYxIHRvU2NpICAtMC4xMDExN0UtMzk0ICAgLT4gLTEuMDEyRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gJzk5OXMnIGNhc2VzCitkZGJlbTQ2NCB0b1NjaSAgOTk5OTk5RS0zOTUgICAgICAgICAtPiA5Ljk5OTk5RS0zOTAgU3Vibm9ybWFsCitkZGJlbTQ2NSB0b1NjaSAgOTk5OTkuMEUtMzk0ICAgICAgICAtPiA5Ljk5OTkwRS0zOTAgU3Vibm9ybWFsCitkZGJlbTQ2NiB0b1NjaSAgOTk5OTkuRS0zOTQgICAgICAgICAtPiA5Ljk5OTlFLTM5MCAgU3Vibm9ybWFsCitkZGJlbTQ2NyB0b1NjaSAgOTk5OS45RS0zOTQgICAgICAgICAtPiA5Ljk5OTlFLTM5MSAgU3Vibm9ybWFsCitkZGJlbTQ2OCB0b1NjaSAgOTk5Ljk5RS0zOTQgICAgICAgICAtPiA5Ljk5OTlFLTM5MiAgU3Vibm9ybWFsCitkZGJlbTQ2OSB0b1NjaSAgOTkuOTk5RS0zOTQgICAgICAgICAtPiA5Ljk5OTlFLTM5MyAgU3Vibm9ybWFsCitkZGJlbTQ3MCB0b1NjaSAgOS45OTk5RS0zOTQgICAgICAgICAtPiA5Ljk5OTlFLTM5NCAgU3Vibm9ybWFsCitkZGJlbTQ3MSB0b1NjaSAgMC45OTk5OUUtMzk0ICAgICAgICAtPiAxLjAwMDBFLTM5NCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NzIgdG9TY2kgIDAuMDk5OTk5RS0zOTQgICAgICAgLT4gMS4wMDBFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NzMgdG9TY2kgIDAuMDA5OTk5OUUtMzk0ICAgICAgLT4gMS4wMEUtMzk2ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NzQgdG9TY2kgIDAuMDAwOTk5OTlFLTM5NCAgICAgLT4gMS4wRS0zOTcgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NzUgdG9TY2kgIDAuMDAwMDk5OTk5RS0zOTQgICAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRiZW00NzYgdG9TY2kgIDAuMDAwMDA5OTk5OUUtMzk0ICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJlbTQ3NyB0b1NjaSAgMC4wMDAwMDA5OTk5OUUtMzk0ICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmVtNDc4IHRvU2NpICAwLjAwMDAwMDA5OTk5OUUtMzk0IC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBFeHBvbmVudHMgd2l0aCBpbnNpZ25pZmljYW50IGxlYWRpbmcgemVyb3MKK2RkYmFzMTAwMSB0b1NjaSAgMWU5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGJhczEwMDIgdG9TY2kgIDFlMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMTAwMyB0b1NjaSAgMWUwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMTAwNCB0b1NjaSAgMWUwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGJhczEwMDUgdG9TY2kgIDFlMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRiYXMxMDA2IHRvU2NpICAxZTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkYmFzMTAwNyB0b1NjaSAgMWUtOTk5OTk5OTk5IC0+IDBFLTM5OCAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczEwMDggdG9TY2kgIDFlLTA5OTk5OTk5OTkgLT4gMEUtMzk4ICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXMxMDA5IHRvU2NpICAxZS0wMDk5OTk5OTk5OSAtPiAwRS0zOTggICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkYmFzMTAxMCB0b1NjaSAgMWUtMDAwOTk5OTk5OTk5IC0+IDBFLTM5OCAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGJhczEwMTEgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRiYXMxMDEyIHRvU2NpICAxZS0wMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK2RkYmFzMTA0MSB0b1NjaSAgICAgMS4xMTExMTExMTExMTUyNDQ0RS0zODQgLT4gIDEuMTExMTExMTExMTE1MjRFLTM4NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRiYXMxMDQyIHRvU2NpICAgICAxLjExMTExMTExMTExNTI0NDVFLTM4NCAtPiAgMS4xMTExMTExMTExMTUyNEUtMzg0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGJhczEwNDMgdG9TY2kgICAgIDEuMTExMTExMTExMTE1MjQ0NkUtMzg0IC0+ICAxLjExMTExMTExMTExNTI0RS0zODQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gY2xhbXBlZCBsYXJnZSBub3JtYWxzCitkZGJhczEwNzAgdG9TY2kgICAxRSszNjkgIC0+ICAxRSszNjkKK2RkYmFzMTA3MSB0b1NjaSAgIDFFKzM3MCAgLT4gIDEuMEUrMzcwICBDbGFtcGVkCitkZGJhczEwNzIgdG9TY2kgICAxRSszNzggIC0+ICAxLjAwMDAwMDAwMEUrMzc4ICBDbGFtcGVkCitkZGJhczEwNzMgdG9TY2kgICAxRSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkCitkZGJhczEwNzQgdG9TY2kgICAxRSszODUgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworCistLSBjbGFtcGVkIHplcm9zIFtzZWUgYWxzbyBjbGFtcC5kZWNUZXN0XQorZGRiYXMxMDc1IHRvU2NpICAgMGUrMTAwMDAgIC0+ICAwRSszNjkgIENsYW1wZWQKK2RkYmFzMTA3NiB0b1NjaSAgIDBlLTEwMDAwICAtPiAgMEUtMzk4ICBDbGFtcGVkCitkZGJhczEwNzcgdG9TY2kgIC0wZSsxMDAwMCAgLT4gLTBFKzM2OSAgQ2xhbXBlZAorZGRiYXMxMDc4IHRvU2NpICAtMGUtMTAwMDAgIC0+IC0wRS0zOTggIENsYW1wZWQKKworLS0gZXh0cmVtZSB2YWx1ZXMgZnJvbSBuZXh0LXdpZGVyCitkZGJhczExMDEgdG9TY2kgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRiYXMxMTAyIHRvU2NpIC0xRS02MTQzIC0+IC0wRS0zOTggSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZGRiYXMxMTAzIHRvU2NpIC0xRS02MTc2IC0+IC0wRS0zOTggSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZGRiYXMxMTA0IHRvU2NpIC0wIC0+IC0wCitkZGJhczExMDUgdG9TY2kgKzAgLT4gIDAKK2RkYmFzMTEwNiB0b1NjaSArMUUtNjE3NiAtPiAgMEUtMzk4IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2RkYmFzMTEwNyB0b1NjaSArMUUtNjE3MyAtPiAgMEUtMzk4IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2RkYmFzMTEwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDYW5vbmljYWwuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDYW5vbmljYWwuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGY5ZTMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENhbm9uaWNhbC5kZWNUZXN0CkBAIC0wLDAgKzEsMzU3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkQ2Fub25pY2FsLmRlY1Rlc3QgLS0gdGVzdCBkZWNEb3VibGUgY2Fub25pY2FsIHJlc3VsdHMgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBmaWxlIHRlc3RzIHRoYXQgY29weSBvcGVyYXRpb25zIGxlYXZlIHVuY2Fub25pY2FsIG9wZXJhbmRzCistLSB1bmNoYW5nZWQsIGFuZCB2aWNlIHZlcnNhCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gVW5jYW5vbmljYWwgZGVjbGV0cyBhcmU6IGFiYywgd2hlcmU6CistLSAgIGE9MSwyLDMKKy0tICAgYj02LDcsZSxmCistLSAgIGM9ZSxmCisKKy0tIGFzc2VydCBzb21lIHN0YW5kYXJkIChjYW5vbmljYWwpIHZhbHVlczsgdGhpcyB0ZXN0cyB0aGF0IEZyb21TdHJpbmcKKy0tIHByb2R1Y2VzIGNhbm9uaWNhbCByZXN1bHRzIChtYW55IG1vcmUgaW4gZGVjaW1hbE5OKQorZGRjYW4wMDEgYXBwbHkgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMDIgYXBwbHkgMCAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDAwMAorZGRjYW4wMDMgYXBwbHkgMSAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDAwMQorZGRjYW4wMDQgYXBwbHkgLTEgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDAwMQorZGRjYW4wMDUgYXBwbHkgSW5maW5pdHkgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4wMDYgYXBwbHkgLUluZmluaXR5ICAgICAgICAgICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGRjYW4wMDcgYXBwbHkgLU5hTiAgICAgICAgICAgICAgICAgICAtPiAjZmMwMDAwMDAwMDAwMDAwMAorZGRjYW4wMDggYXBwbHkgLXNOYU4gICAgICAgICAgICAgICAgICAtPiAjZmUwMDAwMDAwMDAwMDAwMAorZGRjYW4wMDkgYXBwbHkgTmFOOTk5OTk5OTk5OTk5OTk5ICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4wMTAgYXBwbHkgc05hTjk5OTk5OTk5OTk5OTk5OSAgICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGVjYW4wMTEgYXBwbHkgIDk5OTk5OTk5OTk5OTk5OTkgICAgICAtPiAjNmUzOGZmM2ZjZmYzZmNmZgorZGRjYW4wMTIgYXBwbHkgNy41MCAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMDNkMAorZGRjYW4wMTMgYXBwbHkgOS45OSAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMDBmZgorCistLSBCYXNlIHRlc3RzIGZvciBjYW5vbmljYWwgZW5jb2RpbmdzIChpbmRpdmlkdWFsIG9wZXJhdG9yCistLSBwcm9wYWdhdGlvbiBpcyB0ZXN0ZWQgbGF0ZXIpCisKKy0tIEZpbml0ZXM6IGRlY2xldHMgaW4gY29lZmZpY2llbnQKK2RkY2FuMDIxIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAyMiBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMjMgY2Fub25pY2FsICAjNzdmZmZmM2ZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDI0IGNhbm9uaWNhbCAgIzc3ZmZmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAyNSBjYW5vbmljYWwgICM3N2ZjZmZmZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMjYgY2Fub25pY2FsICAjNzdmY2ZmZmZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDI3IGNhbm9uaWNhbCAgIzc3ZmNmZjNmZmZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAyOCBjYW5vbmljYWwgICM3N2ZjZmYzZmZmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMzAgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmZmZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDMxIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmZmZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAzMiBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZjNmZmZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGRjYW4wMzMgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmYzZmZmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMDM1IGNhbm9uaWNhbCAgIzc3ZmNmZjNmZGZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjAzNiBjYW5vbmljYWwgICM3N2ZjZmYzZmVmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorCistLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZGRjYW4xMDAgY2Fub25pY2FsICBOYU45OTk5OTk5OTk5OTk5OTkgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTAxIGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjEwMiBjYW5vbmljYWwgICM3YzAzZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMDMgY2Fub25pY2FsICAjN2MwMGZmZmZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTA0IGNhbm9uaWNhbCAgIzdjMDBmZjNmZmZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjEwNSBjYW5vbmljYWwgICM3YzAwZmYzZmNmZmZmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMDYgY2Fub25pY2FsICAjN2MwMGZmM2ZjZmYzZmZmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTA3IGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RkY2FuMTEwIGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjExMiBjYW5vbmljYWwgICM3ZDAwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMTMgY2Fub25pY2FsICAjN2M4MGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTE0IGNhbm9uaWNhbCAgIzdjNDBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjExNSBjYW5vbmljYWwgICM3YzIwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMTYgY2Fub25pY2FsICAjN2MxMGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTE3IGNhbm9uaWNhbCAgIzdjMDhmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjExOCBjYW5vbmljYWwgICM3YzA0ZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorCistLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RkY2FuMTIwIGNhbm9uaWNhbCBzTmFOOTk5OTk5OTk5OTk5OTk5IC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEyMSBjYW5vbmljYWwgICM3ZTAwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMjIgY2Fub25pY2FsICAjN2UwM2ZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTIzIGNhbm9uaWNhbCAgIzdlMDBmZmZmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEyNCBjYW5vbmljYWwgICM3ZTAwZmYzZmZmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMjUgY2Fub25pY2FsICAjN2UwMGZmM2ZjZmZmZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTI2IGNhbm9uaWNhbCAgIzdlMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEyNyBjYW5vbmljYWwgICM3ZTAwZmYzZmNmZjNmZmZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZGRjYW4xMzAgY2Fub25pY2FsICAjN2UwMGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTMyIGNhbm9uaWNhbCAgIzdmMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEzMyBjYW5vbmljYWwgICM3ZTgwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMzQgY2Fub25pY2FsICAjN2U0MGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTM1IGNhbm9uaWNhbCAgIzdlMjBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCitkZGNhbjEzNiBjYW5vbmljYWwgICM3ZTEwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgorZGRjYW4xMzcgY2Fub25pY2FsICAjN2UwOGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMTM4IGNhbm9uaWNhbCAgIzdlMDRmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCisKKy0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMKK2RkY2FuMTQwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE0MSBjYW5vbmljYWwgICM3OTAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNDIgY2Fub25pY2FsICAjN2EwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTQzIGNhbm9uaWNhbCAgIzc4ODAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE0NCBjYW5vbmljYWwgICM3ODQwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNDUgY2Fub25pY2FsICAjNzgyMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTQ2IGNhbm9uaWNhbCAgIzc4MTAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE0NyBjYW5vbmljYWwgICM3ODA4MDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNDggY2Fub25pY2FsICAjNzgwNDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKKworLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cyAoZmlyc3QsIGxhc3QsIGFuZCBhIGZldyBvdGhlcnMpCitkZGNhbjE1MCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNTEgY2Fub25pY2FsICAjNzgwMjAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTUyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE1MyBjYW5vbmljYWwgICM3ODAxMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNTQgY2Fub25pY2FsICAjNzgwMDIwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTU1IGNhbm9uaWNhbCAgIzc4MDAwODAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE1NiBjYW5vbmljYWwgICM3ODAwMDAyMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNTcgY2Fub25pY2FsICAjNzgwMDAwMDQwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTU4IGNhbm9uaWNhbCAgIzc4MDAwMDAwNDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE1OSBjYW5vbmljYWwgICM3ODAwMDAwMDA4MDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNjAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDQwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTYxIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMjAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE2MiBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDA4MDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4xNjMgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDIwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMTY0IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwNDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjE2NSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDA4ICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorCisKKy0tIE5vdyB0aGUgb3BlcmF0b3JzIC0tIHRyeWluZyB0byBjaGVjayBwYXRocyB0aGF0IG1pZ2h0IGZhaWwgdG8KKy0tIGNhbm9uaWNhbGl6ZSBwcm9wYWdhdGVkIG9wZXJhbmRzCisKKy0tLS0tIEFkZDoKKy0tIEZpbml0ZXM6IG5ldXRyYWwgMAorZGRjYW4yMDIgYWRkICAwRSszODQgIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCitkZGNhbjIwMyBhZGQgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAwRSszODQgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKKy0tIHRpbnkgemVybworZGRjYW4yMDQgYWRkICAwRS0zOTggIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKK2RkY2FuMjA1IGFkZCAgICAgICAgICM3N2ZjZmZmZmNmZjNmY2ZmIDBFLTM5OCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkCistLSB0aW55IG5vbiB6ZXJvCitkZGNhbjIwNiBhZGQgLTFFLTM5OCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAorZGRjYW4yMDcgYWRkICAgICAgICAgIzc3ZmZmZjNmY2ZmM2ZjZmYgLTFFLTM5OCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQKKy0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkZGNhbjIxMSBhZGQgIDAgICM3YzAzZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMjEyIGFkZCAgICAgIzdjMDNmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkZGNhbjIxMyBhZGQgIDAgICM3YzQwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMjE0IGFkZCAgICAgIzdjNDBmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkZGNhbjIxNSBhZGQgIDAgICM3ZTAwZmZmZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuMjE2IGFkZCAgICAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZGRjYW4yMTcgYWRkICAwICAjN2U4MGZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjIxOCBhZGQgICAgICM3ZTgwZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KKy0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMKK2RkY2FuMjIwIGFkZCAgMCAgIzc4ODAwMDAwMDAwMDAwMDAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4yMjEgYWRkICAgICAjNzg4MDAwMDAwMDAwMDAwMCAgMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCistLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzCitkZGNhbjIyMiBhZGQgIDAgICM3ODAyMDAwMDAwMDAwMDAwICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4yMjMgYWRkICAgICAjNzgwMjAwMDAwMDAwMDAwMCAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMjI0IGFkZCAgMCAgIzc4MDAwMDAwMDAwMDAwMDEgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjIyNSBhZGQgICAgICM3ODAwMDAwMDAwMDAwMDAxICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW4yMjYgYWRkICAwICAjNzgwMDAwMjAwMDAwMDAwMCAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMjI3IGFkZCAgICAgIzc4MDAwMDIwMDAwMDAwMDAgIDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCisKKy0tLS0tIENsYXNzOiBbZG9lcyBub3QgcmV0dXJuIGVuY29kZWRdCisKKy0tLS0tIENvbXBhcmU6CitkZGNhbjIzMSBjb21wYXJlIC1JbmYgICAxICAgICAtPiAgI2EyMzgwMDAwMDAwMDAwMDEKK2RkY2FuMjMyIGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAjMjIzODAwMDAwMDAwMDAwMAorZGRjYW4yMzMgY29tcGFyZSAgMSAgICAtSW5mICAgLT4gICMyMjM4MDAwMDAwMDAwMDAxCitkZGNhbjIzNCBjb21wYXJlICAjN2MwMGZmM2ZmZmYzZmNmZiAtMTAwMCAgLT4gICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjIzNSBjb21wYXJlICAjN2UwMGZmM2ZmZmYzZmNmZiAtMTAwMCAgLT4gICM3YzAwZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorCistLS0tLSBDb21wYXJlU2lnOgorZGRjYW4yNDEgY29tcGFyZXNpZyAtSW5mICAgMSAgICAgLT4gICNhMjM4MDAwMDAwMDAwMDAxCitkZGNhbjI0MiBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgIzIyMzgwMDAwMDAwMDAwMDAKK2RkY2FuMjQzIGNvbXBhcmVzaWcgIDEgICAgLUluZiAgIC0+ICAjMjIzODAwMDAwMDAwMDAwMQorZGRjYW4yNDQgY29tcGFyZXNpZyAgIzdjMDBmZjNmZmZmM2ZjZmYgLTEwMDAgIC0+ICAjN2MwMGZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuMjQ1IGNvbXBhcmVzaWcgICM3ZTAwZmYzZmZmZjNmY2ZmIC0xMDAwICAtPiAgIzdjMDBmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tLS0tIENvcHk6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KKy0tIGZpbml0ZXMKK2RkY2FuMjUwIGNvcHkgICM3N2ZmZmYzZmNmZjNmY2ZmICAtPiAjNzdmZmZmM2ZjZmYzZmNmZgorZGRjYW4yNTEgY29weSAgIzc3ZmNmZjNmZGZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmRmZjNmY2ZmCistLSBOYU5zCitkZGNhbjI1MiBjb3B5ICAjN2MwM2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDNmZjNmY2ZmM2ZjZmYKK2RkY2FuMjUzIGNvcHkgICM3YzAwZmYzZmNmZjNmZmZmICAtPiAjN2MwMGZmM2ZjZmYzZmZmZgorZGRjYW4yNTQgY29weSAgIzdkMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZDAwZmYzZmNmZjNmY2ZmCitkZGNhbjI1NSBjb3B5ICAjN2MwNGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDRmZjNmY2ZmM2ZjZmYKKy0tIHNOYU4KK2RkY2FuMjU2IGNvcHkgICM3ZTAwZmYzZmNmZmZmY2ZmICAtPiAjN2UwMGZmM2ZjZmZmZmNmZgorZGRjYW4yNTcgY29weSAgIzdlNDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTQwZmYzZmNmZjNmY2ZmCistLSBJbmYKK2RkY2FuMjU4IGNvcHkgICM3YTAwMDAwMDAwMDAwMDAwICAtPiAjN2EwMDAwMDAwMDAwMDAwMAorZGRjYW4yNTkgY29weSAgIzc4MDAyMDAwMDAwMDAwMDAgIC0+ICM3ODAwMjAwMDAwMDAwMDAwCisKKy0tLS0tIENvcHlBYnM6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KKy0tIGZpbml0ZXMKK2RkY2FuMjYwIGNvcHlhYnMgICNmN2ZmZmYzZmNmZjNmY2ZmICAtPiAjNzdmZmZmM2ZjZmYzZmNmZgorZGRjYW4yNjEgY29weWFicyAgI2Y3ZmNmZjNmZGZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmRmZjNmY2ZmCistLSBOYU5zCitkZGNhbjI2MiBjb3B5YWJzICAjZmMwM2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDNmZjNmY2ZmM2ZjZmYKK2RkY2FuMjYzIGNvcHlhYnMgICNmYzAwZmYzZmNmZjNmZmZmICAtPiAjN2MwMGZmM2ZjZmYzZmZmZgorZGRjYW4yNjQgY29weWFicyAgI2ZkMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZDAwZmYzZmNmZjNmY2ZmCitkZGNhbjI2NSBjb3B5YWJzICAjZmMwNGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDRmZjNmY2ZmM2ZjZmYKKy0tIHNOYU4KK2RkY2FuMjY2IGNvcHlhYnMgICNmZTAwZmYzZmNmZmZmY2ZmICAtPiAjN2UwMGZmM2ZjZmZmZmNmZgorZGRjYW4yNjcgY29weWFicyAgI2ZlNDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTQwZmYzZmNmZjNmY2ZmCistLSBJbmYKK2RkY2FuMjY4IGNvcHlhYnMgICNmYTAwMDAwMDAwMDAwMDAwICAtPiAjN2EwMDAwMDAwMDAwMDAwMAorZGRjYW4yNjkgY29weWFicyAgI2Y4MDAyMDAwMDAwMDAwMDAgIC0+ICM3ODAwMjAwMDAwMDAwMDAwCisKKy0tLS0tIENvcHlOZWdhdGU6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KKy0tIGZpbml0ZXMKK2RkY2FuMjcwIGNvcHluZWdhdGUgICM3N2ZmZmYzZmNmZjNmY2ZmICAtPiAjZjdmZmZmM2ZjZmYzZmNmZgorZGRjYW4yNzEgY29weW5lZ2F0ZSAgIzc3ZmNmZjNmZGZmM2ZjZmYgIC0+ICNmN2ZjZmYzZmRmZjNmY2ZmCistLSBOYU5zCitkZGNhbjI3MiBjb3B5bmVnYXRlICAjN2MwM2ZmM2ZjZmYzZmNmZiAgLT4gI2ZjMDNmZjNmY2ZmM2ZjZmYKK2RkY2FuMjczIGNvcHluZWdhdGUgICM3YzAwZmYzZmNmZjNmZmZmICAtPiAjZmMwMGZmM2ZjZmYzZmZmZgorZGRjYW4yNzQgY29weW5lZ2F0ZSAgIzdkMDBmZjNmY2ZmM2ZjZmYgIC0+ICNmZDAwZmYzZmNmZjNmY2ZmCitkZGNhbjI3NSBjb3B5bmVnYXRlICAjN2MwNGZmM2ZjZmYzZmNmZiAgLT4gI2ZjMDRmZjNmY2ZmM2ZjZmYKKy0tIHNOYU4KK2RkY2FuMjc2IGNvcHluZWdhdGUgICM3ZTAwZmYzZmNmZmZmY2ZmICAtPiAjZmUwMGZmM2ZjZmZmZmNmZgorZGRjYW4yNzcgY29weW5lZ2F0ZSAgIzdlNDBmZjNmY2ZmM2ZjZmYgIC0+ICNmZTQwZmYzZmNmZjNmY2ZmCistLSBJbmYKK2RkY2FuMjc4IGNvcHluZWdhdGUgICM3YTAwMDAwMDAwMDAwMDAwICAtPiAjZmEwMDAwMDAwMDAwMDAwMAorZGRjYW4yNzkgY29weW5lZ2F0ZSAgIzc4MDAyMDAwMDAwMDAwMDAgIC0+ICNmODAwMjAwMDAwMDAwMDAwCisKKy0tLS0tIENvcHlTaWduOiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdCistLSBmaW5pdGVzCitkZGNhbjI4MCBjb3B5c2lnbiAgIzc3ZmZmZjNmY2ZmM2ZjZmYgLTEgLT4gI2Y3ZmZmZjNmY2ZmM2ZjZmYKK2RkY2FuMjgxIGNvcHlzaWduICAjNzdmY2ZmM2ZkZmYzZmNmZiAgMSAtPiAjNzdmY2ZmM2ZkZmYzZmNmZgorLS0gTmFOcworZGRjYW4yODIgY29weXNpZ24gICM3YzAzZmYzZmNmZjNmY2ZmIC0xIC0+ICNmYzAzZmYzZmNmZjNmY2ZmCitkZGNhbjI4MyBjb3B5c2lnbiAgIzdjMDBmZjNmY2ZmM2ZmZmYgIDEgLT4gIzdjMDBmZjNmY2ZmM2ZmZmYKK2RkY2FuMjg0IGNvcHlzaWduICAjN2QwMGZmM2ZjZmYzZmNmZiAtMSAtPiAjZmQwMGZmM2ZjZmYzZmNmZgorZGRjYW4yODUgY29weXNpZ24gICM3YzA0ZmYzZmNmZjNmY2ZmICAxIC0+ICM3YzA0ZmYzZmNmZjNmY2ZmCistLSBzTmFOCitkZGNhbjI4NiBjb3B5c2lnbiAgIzdlMDBmZjNmY2ZmZmZjZmYgLTEgLT4gI2ZlMDBmZjNmY2ZmZmZjZmYKK2RkY2FuMjg3IGNvcHlzaWduICAjN2U0MGZmM2ZjZmYzZmNmZiAgMSAtPiAjN2U0MGZmM2ZjZmYzZmNmZgorLS0gSW5mCitkZGNhbjI4OCBjb3B5c2lnbiAgIzdhMDAwMDAwMDAwMDAwMDAgLTEgLT4gI2ZhMDAwMDAwMDAwMDAwMDAKK2RkY2FuMjg5IGNvcHlzaWduICAjNzgwMDIwMDAwMDAwMDAwMCAgMSAtPiAjNzgwMDIwMDAwMDAwMDAwMAorCistLS0tLSBNdWx0aXBseToKKy0tIEZpbml0ZXM6IG5ldXRyYWwgMAorZGRjYW4zMDIgbXVsdGlwbHkgIDEgICAgICAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMzAzIG11bHRpcGx5ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgIDEgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCistLSBuZWdhdGl2ZQorZGRjYW4zMDYgbXVsdGlwbHkgLTEgICAgICAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuMzA3IG11bHRpcGx5ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgLTEgICAgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmCistLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZGRjYW4zMTEgbXVsdGlwbHkgIDEgICM3YzAzZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuMzEyIG11bHRpcGx5ICAgICAjN2MwM2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RkY2FuMzEzIG11bHRpcGx5ICAxICAjN2M0MGZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjMxNCBtdWx0aXBseSAgICAgIzdjNDBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkZGNhbjMxNSBtdWx0aXBseSAgMSAgIzdlMDBmZmZmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW4zMTYgbXVsdGlwbHkgICAgICM3ZTAwZmZmZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KKy0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RkY2FuMzE3IG11bHRpcGx5ICAxICAjN2U4MGZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjMxOCBtdWx0aXBseSAgICAgIzdlODBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cworZGRjYW4zMjAgbXVsdGlwbHkgIDEgICM3ODgwMDAwMDAwMDAwMDAwICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuMzIxIG11bHRpcGx5ICAgICAjNzg4MDAwMDAwMDAwMDAwMCAgMSAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCistLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzCitkZGNhbjMyMiBtdWx0aXBseSAgMSAgIzc4MDIwMDAwMDAwMDAwMDAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjMyMyBtdWx0aXBseSAgICAgIzc4MDIwMDAwMDAwMDAwMDAgIDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjMyNCBtdWx0aXBseSAgMSAgIzc4MDAwMDAwMDAwMDAwMDEgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjMyNSBtdWx0aXBseSAgICAgIzc4MDAwMDAwMDAwMDAwMDEgIDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjMyNiBtdWx0aXBseSAgMSAgIzc4MDAwMDIwMDAwMDAwMDAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZGNhbjMyNyBtdWx0aXBseSAgICAgIzc4MDAwMDIwMDAwMDAwMDAgIDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCisKKy0tLS0tIFF1YW50aXplOgorZGRjYW40MDEgcXVhbnRpemUgICM2ZTM4ZmYzZmZmZjNmY2ZmIDEgICAgLT4gIzZlMzhmZjNmY2ZmM2ZjZmYKK2RkY2FuNDAyIHF1YW50aXplICAjNmUzOGZmM2ZjZmYzZmRmZiAwICAgIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmCitkZGNhbjQwMyBxdWFudGl6ZSAgIzc4ODAwMDAwMDAwMDAwMDAgSW5mICAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW40MDQgcXVhbnRpemUgICM3ODAyMDAwMDAwMDAwMDAwIC1JbmYgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuNDEwIHF1YW50aXplICAjN2MwM2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjQxMSBxdWFudGl6ZSAgIzdjMDNmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW40MTIgcXVhbnRpemUgICM3YzQwZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuNDEzIHF1YW50aXplICAjN2M0MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjQxNCBxdWFudGl6ZSAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW40MTUgcXVhbnRpemUgICM3ZTAwZmZmZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuNDE2IHF1YW50aXplICAjN2U4MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjQxNyBxdWFudGl6ZSAgIzdlODBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorCistLS0tLSBTdWJ0cmFjdDoKKy0tIEZpbml0ZXM6IG5ldXRyYWwgMAorZGRjYW41MDIgc3VidHJhY3QgIDBFKzM4NCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYKK2RkY2FuNTAzIHN1YnRyYWN0ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgMEUrMzg0IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCistLSB0aW55IHplcm8KK2RkY2FuNTA0IHN1YnRyYWN0ICAwRS0zOTggIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKK2RkY2FuNTA1IHN1YnRyYWN0ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgMEUtMzk4IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKKy0tIHRpbnkgbm9uIHplcm8KK2RkY2FuNTA2IHN1YnRyYWN0IC0xRS0zOTggIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjZjdmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQKK2RkY2FuNTA3IHN1YnRyYWN0ICAgICAgICAgIzc3ZmZmZjNmY2ZmM2ZjZmYgLTFFLTM5OCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQKKy0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkZGNhbjUxMSBzdWJ0cmFjdCAgMCAgIzdjMDNmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW41MTIgc3VidHJhY3QgICAgICM3YzAzZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKKy0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZGRjYW41MTMgc3VidHJhY3QgIDAgICM3YzQwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuNTE0IHN1YnRyYWN0ICAgICAjN2M0MGZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCistLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RkY2FuNTE1IHN1YnRyYWN0ICAwICAjN2UwMGZmZmZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjUxNiBzdWJ0cmFjdCAgICAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZGRjYW41MTcgc3VidHJhY3QgIDAgICM3ZTgwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuNTE4IHN1YnRyYWN0ICAgICAjN2U4MGZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCistLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzCitkZGNhbjUyMCBzdWJ0cmFjdCAgMCAgIzc4ODAwMDAwMDAwMDAwMDAgICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGRjYW41MjEgc3VidHJhY3QgICAgICM3ODgwMDAwMDAwMDAwMDAwICAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKKy0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMKK2RkY2FuNTIyIHN1YnRyYWN0ICAwICAjNzgwMjAwMDAwMDAwMDAwMCAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAKK2RkY2FuNTIzIHN1YnRyYWN0ICAgICAjNzgwMjAwMDAwMDAwMDAwMCAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuNTI0IHN1YnRyYWN0ICAwICAjNzgwMDAwMDAwMDAwMDAwMSAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAKK2RkY2FuNTI1IHN1YnRyYWN0ICAgICAjNzgwMDAwMDAwMDAwMDAwMSAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuNTI2IHN1YnRyYWN0ICAwICAjNzgwMDAwMjAwMDAwMDAwMCAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAKK2RkY2FuNTI3IHN1YnRyYWN0ICAgICAjNzgwMDAwMjAwMDAwMDAwMCAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKKworLS0tLS0gVG9JbnRlZ3JhbDoKK2RkY2FuNjAxIHRvaW50ZWdyYWx4ICAjNmUzOGZmM2ZmZmYzZmNmZiAtPiAjNmUzOGZmM2ZjZmYzZmNmZgorZGRjYW42MDIgdG9pbnRlZ3JhbHggICM2ZTM4ZmYzZmNmZjNmZGZmIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmCitkZGNhbjYwMyB0b2ludGVncmFseCAgIzc4ODAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RkY2FuNjA0IHRvaW50ZWdyYWx4ICAjNzgwMjAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGRjYW42MTAgdG9pbnRlZ3JhbHggICM3YzAzZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjYxMSB0b2ludGVncmFseCAgIzdjMDNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKK2RkY2FuNjEyIHRvaW50ZWdyYWx4ICAjN2M0MGZmM2ZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZgorZGRjYW42MTMgdG9pbnRlZ3JhbHggICM3YzQwZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCitkZGNhbjYxNCB0b2ludGVncmFseCAgIzdlMDBmZmZmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RkY2FuNjE1IHRvaW50ZWdyYWx4ICAjN2UwMGZmZmZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorZGRjYW42MTYgdG9pbnRlZ3JhbHggICM3ZTgwZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkZGNhbjYxNyB0b2ludGVncmFseCAgIzdlODBmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KKy0tIHVuY2Fub25pY2FsIDM5OTksIDM5Ljk5LCAzLjk5LCAwLjM5OSwgYW5kIG5lZ2F0aXZlcworZGRjYW42MTggdG9pbnRlZ3JhbHggICMyMjM4MDAwMDAwMDAwZmZmIC0+ICMyMjM4MDAwMDAwMDAwY2ZmCitkZGNhbjYxOSB0b2ludGVncmFseCAgIzIyMzAwMDAwMDAwMDBmZmYgLT4gIzIyMzgwMDAwMDAwMDAwNDAgSW5leGFjdCBSb3VuZGVkCitkZGNhbjYyMCB0b2ludGVncmFseCAgIzIyMmMwMDAwMDAwMDBmZmYgLT4gIzIyMzgwMDAwMDAwMDAwMDQgSW5leGFjdCBSb3VuZGVkCitkZGNhbjYyMSB0b2ludGVncmFseCAgIzIyMjgwMDAwMDAwMDBmZmYgLT4gIzIyMzgwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGNhbjYyMiB0b2ludGVncmFseCAgI2EyMzgwMDAwMDAwMDBmZmYgLT4gI2EyMzgwMDAwMDAwMDBjZmYKK2RkY2FuNjIzIHRvaW50ZWdyYWx4ICAjYTIzMDAwMDAwMDAwMGZmZiAtPiAjYTIzODAwMDAwMDAwMDA0MCBJbmV4YWN0IFJvdW5kZWQKK2RkY2FuNjI0IHRvaW50ZWdyYWx4ICAjYTIyYzAwMDAwMDAwMGZmZiAtPiAjYTIzODAwMDAwMDAwMDAwNCBJbmV4YWN0IFJvdW5kZWQKK2RkY2FuNjI1IHRvaW50ZWdyYWx4ICAjYTIyODAwMDAwMDAwMGZmZiAtPiAjYTIzODAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDbGFzcy5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENsYXNzLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIzNGM0MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDbGFzcy5kZWNUZXN0CkBAIC0wLDAgKzEsNzYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRDbGFzcy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBDbGFzcyBvcGVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBbTmV3IDIwMDYuMTEuMjddCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZGRjbGEwMDEgIGNsYXNzICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybworZGRjbGEwMDIgIGNsYXNzICAgIDAuMDAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybworZGRjbGEwMDMgIGNsYXNzICAgIDBFKzUgICAgICAgICAgICAgICAgICAgICAtPiArWmVybworZGRjbGEwMDQgIGNsYXNzICAgIDFFLTM5NiAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsCitkZGNsYTAwNSAgY2xhc3MgIDAuMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwKK2RkY2xhMDA2ICBjbGFzcyAgMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAgLT4gK1N1Ym5vcm1hbAorZGRjbGEwMDcgIGNsYXNzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtPiArTm9ybWFsCitkZGNsYTAwOCAgY2xhc3MgICAxRS0zODMgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RkY2xhMDA5ICBjbGFzcyAgIDFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZGRjbGEwMTAgIGNsYXNzICAgMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkZGNsYTAxMiAgY2xhc3MgICAxRS0xICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RkY2xhMDEzICBjbGFzcyAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZGRjbGEwMTQgIGNsYXNzICAgMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkZGNsYTAxNSAgY2xhc3MgICAxMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RkY2xhMDE2ICBjbGFzcyAgIDFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZGRjbGEwMTcgIGNsYXNzICAgMUUrMzg0ICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkZGNsYTAxOCAgY2xhc3MgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgIC0+ICtOb3JtYWwKK2RkY2xhMDE5ICBjbGFzcyAgIEluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gK0luZmluaXR5CisKK2RkY2xhMDIxICBjbGFzcyAgIC0wICAgICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KK2RkY2xhMDIyICBjbGFzcyAgIC0wLjAwICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KK2RkY2xhMDIzICBjbGFzcyAgIC0wRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KK2RkY2xhMDI0ICBjbGFzcyAgIC0xRS0zOTYgICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAorZGRjbGEwMjUgIGNsYXNzICAtMC4xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsCitkZGNsYTAyNiAgY2xhc3MgIC0wLjk5OTk5OTk5OTk5OTk5OUUtMzgzICAgIC0+IC1TdWJub3JtYWwKK2RkY2xhMDI3ICBjbGFzcyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgLT4gLU5vcm1hbAorZGRjbGEwMjggIGNsYXNzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkZGNsYTAyOSAgY2xhc3MgIC0xRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RkY2xhMDMwICBjbGFzcyAgLTFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZGRjbGEwMzIgIGNsYXNzICAtMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkZGNsYTAzMyAgY2xhc3MgIC0xICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RkY2xhMDM0ICBjbGFzcyAgLTIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZGRjbGEwMzUgIGNsYXNzICAtMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkZGNsYTAzNiAgY2xhc3MgIC0xRSszMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RkY2xhMDM3ICBjbGFzcyAgLTFFKzM4NCAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZGRjbGEwMzggIGNsYXNzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAtPiAtTm9ybWFsCitkZGNsYTAzOSAgY2xhc3MgIC1JbmYgICAgICAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorCitkZGNsYTA0MSAgY2xhc3MgICBOYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTgorZGRjbGEwNDIgIGNsYXNzICAtTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KK2RkY2xhMDQzICBjbGFzcyAgK05hTjEyMzQ1ICAgICAgICAgICAgICAgICAgLT4gTmFOCitkZGNsYTA0NCAgY2xhc3MgICBzTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KK2RkY2xhMDQ1ICBjbGFzcyAgLXNOYU4gICAgICAgICAgICAgICAgICAgICAgLT4gc05hTgorZGRjbGEwNDYgIGNsYXNzICArc05hTjEyMzQ1ICAgICAgICAgICAgICAgICAtPiBzTmFOCisKKworCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZS5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmUuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGViZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmUuZGVjVGVzdApAQCAtMCwwICsxLDc0NCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZENvbXBhcmUuZGVjVGVzdCAtLSBkZWNEb3VibGUgY29tcGFyaXNvbiB0aGF0IGFsbG93cyBxdWlldCBOYU5zICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90CistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRjb20wMDEgY29tcGFyZSAgLTIgIC0yICAtPiAwCitkZGNvbTAwMiBjb21wYXJlICAtMiAgLTEgIC0+IC0xCitkZGNvbTAwMyBjb21wYXJlICAtMiAgIDAgIC0+IC0xCitkZGNvbTAwNCBjb21wYXJlICAtMiAgIDEgIC0+IC0xCitkZGNvbTAwNSBjb21wYXJlICAtMiAgIDIgIC0+IC0xCitkZGNvbTAwNiBjb21wYXJlICAtMSAgLTIgIC0+IDEKK2RkY29tMDA3IGNvbXBhcmUgIC0xICAtMSAgLT4gMAorZGRjb20wMDggY29tcGFyZSAgLTEgICAwICAtPiAtMQorZGRjb20wMDkgY29tcGFyZSAgLTEgICAxICAtPiAtMQorZGRjb20wMTAgY29tcGFyZSAgLTEgICAyICAtPiAtMQorZGRjb20wMTEgY29tcGFyZSAgIDAgIC0yICAtPiAxCitkZGNvbTAxMiBjb21wYXJlICAgMCAgLTEgIC0+IDEKK2RkY29tMDEzIGNvbXBhcmUgICAwICAgMCAgLT4gMAorZGRjb20wMTQgY29tcGFyZSAgIDAgICAxICAtPiAtMQorZGRjb20wMTUgY29tcGFyZSAgIDAgICAyICAtPiAtMQorZGRjb20wMTYgY29tcGFyZSAgIDEgIC0yICAtPiAxCitkZGNvbTAxNyBjb21wYXJlICAgMSAgLTEgIC0+IDEKK2RkY29tMDE4IGNvbXBhcmUgICAxICAgMCAgLT4gMQorZGRjb20wMTkgY29tcGFyZSAgIDEgICAxICAtPiAwCitkZGNvbTAyMCBjb21wYXJlICAgMSAgIDIgIC0+IC0xCitkZGNvbTAyMSBjb21wYXJlICAgMiAgLTIgIC0+IDEKK2RkY29tMDIyIGNvbXBhcmUgICAyICAtMSAgLT4gMQorZGRjb20wMjMgY29tcGFyZSAgIDIgICAwICAtPiAxCitkZGNvbTAyNSBjb21wYXJlICAgMiAgIDEgIC0+IDEKK2RkY29tMDI2IGNvbXBhcmUgICAyICAgMiAgLT4gMAorCitkZGNvbTAzMSBjb21wYXJlICAtMjAgIC0yMCAgLT4gMAorZGRjb20wMzIgY29tcGFyZSAgLTIwICAtMTAgIC0+IC0xCitkZGNvbTAzMyBjb21wYXJlICAtMjAgICAwMCAgLT4gLTEKK2RkY29tMDM0IGNvbXBhcmUgIC0yMCAgIDEwICAtPiAtMQorZGRjb20wMzUgY29tcGFyZSAgLTIwICAgMjAgIC0+IC0xCitkZGNvbTAzNiBjb21wYXJlICAtMTAgIC0yMCAgLT4gMQorZGRjb20wMzcgY29tcGFyZSAgLTEwICAtMTAgIC0+IDAKK2RkY29tMDM4IGNvbXBhcmUgIC0xMCAgIDAwICAtPiAtMQorZGRjb20wMzkgY29tcGFyZSAgLTEwICAgMTAgIC0+IC0xCitkZGNvbTA0MCBjb21wYXJlICAtMTAgICAyMCAgLT4gLTEKK2RkY29tMDQxIGNvbXBhcmUgICAwMCAgLTIwICAtPiAxCitkZGNvbTA0MiBjb21wYXJlICAgMDAgIC0xMCAgLT4gMQorZGRjb20wNDMgY29tcGFyZSAgIDAwICAgMDAgIC0+IDAKK2RkY29tMDQ0IGNvbXBhcmUgICAwMCAgIDEwICAtPiAtMQorZGRjb20wNDUgY29tcGFyZSAgIDAwICAgMjAgIC0+IC0xCitkZGNvbTA0NiBjb21wYXJlICAgMTAgIC0yMCAgLT4gMQorZGRjb20wNDcgY29tcGFyZSAgIDEwICAtMTAgIC0+IDEKK2RkY29tMDQ4IGNvbXBhcmUgICAxMCAgIDAwICAtPiAxCitkZGNvbTA0OSBjb21wYXJlICAgMTAgICAxMCAgLT4gMAorZGRjb20wNTAgY29tcGFyZSAgIDEwICAgMjAgIC0+IC0xCitkZGNvbTA1MSBjb21wYXJlICAgMjAgIC0yMCAgLT4gMQorZGRjb20wNTIgY29tcGFyZSAgIDIwICAtMTAgIC0+IDEKK2RkY29tMDUzIGNvbXBhcmUgICAyMCAgIDAwICAtPiAxCitkZGNvbTA1NSBjb21wYXJlICAgMjAgICAxMCAgLT4gMQorZGRjb20wNTYgY29tcGFyZSAgIDIwICAgMjAgIC0+IDAKKworZGRjb20wNjEgY29tcGFyZSAgLTIuMCAgLTIuMCAgLT4gMAorZGRjb20wNjIgY29tcGFyZSAgLTIuMCAgLTEuMCAgLT4gLTEKK2RkY29tMDYzIGNvbXBhcmUgIC0yLjAgICAwLjAgIC0+IC0xCitkZGNvbTA2NCBjb21wYXJlICAtMi4wICAgMS4wICAtPiAtMQorZGRjb20wNjUgY29tcGFyZSAgLTIuMCAgIDIuMCAgLT4gLTEKK2RkY29tMDY2IGNvbXBhcmUgIC0xLjAgIC0yLjAgIC0+IDEKK2RkY29tMDY3IGNvbXBhcmUgIC0xLjAgIC0xLjAgIC0+IDAKK2RkY29tMDY4IGNvbXBhcmUgIC0xLjAgICAwLjAgIC0+IC0xCitkZGNvbTA2OSBjb21wYXJlICAtMS4wICAgMS4wICAtPiAtMQorZGRjb20wNzAgY29tcGFyZSAgLTEuMCAgIDIuMCAgLT4gLTEKK2RkY29tMDcxIGNvbXBhcmUgICAwLjAgIC0yLjAgIC0+IDEKK2RkY29tMDcyIGNvbXBhcmUgICAwLjAgIC0xLjAgIC0+IDEKK2RkY29tMDczIGNvbXBhcmUgICAwLjAgICAwLjAgIC0+IDAKK2RkY29tMDc0IGNvbXBhcmUgICAwLjAgICAxLjAgIC0+IC0xCitkZGNvbTA3NSBjb21wYXJlICAgMC4wICAgMi4wICAtPiAtMQorZGRjb20wNzYgY29tcGFyZSAgIDEuMCAgLTIuMCAgLT4gMQorZGRjb20wNzcgY29tcGFyZSAgIDEuMCAgLTEuMCAgLT4gMQorZGRjb20wNzggY29tcGFyZSAgIDEuMCAgIDAuMCAgLT4gMQorZGRjb20wNzkgY29tcGFyZSAgIDEuMCAgIDEuMCAgLT4gMAorZGRjb20wODAgY29tcGFyZSAgIDEuMCAgIDIuMCAgLT4gLTEKK2RkY29tMDgxIGNvbXBhcmUgICAyLjAgIC0yLjAgIC0+IDEKK2RkY29tMDgyIGNvbXBhcmUgICAyLjAgIC0xLjAgIC0+IDEKK2RkY29tMDgzIGNvbXBhcmUgICAyLjAgICAwLjAgIC0+IDEKK2RkY29tMDg1IGNvbXBhcmUgICAyLjAgICAxLjAgIC0+IDEKK2RkY29tMDg2IGNvbXBhcmUgICAyLjAgICAyLjAgIC0+IDAKK2RkY29tMDg3IGNvbXBhcmUgICAxLjAgICAwLjEgIC0+IDEKK2RkY29tMDg4IGNvbXBhcmUgICAwLjEgICAxLjAgIC0+IC0xCisKKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZAorZGRjb20wOTUgY29tcGFyZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAwCitkZGNvbTA5NiBjb21wYXJlIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC0xCitkZGNvbTA5NyBjb21wYXJlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDEKK2RkY29tMDk4IGNvbXBhcmUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMAorCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMKK2RkY29tMTAwIGNvbXBhcmUgICA3LjAgICAgNy4wICAgIC0+IDAKK2RkY29tMTAxIGNvbXBhcmUgICA3LjAgICAgNyAgICAgIC0+IDAKK2RkY29tMTAyIGNvbXBhcmUgICA3ICAgICAgNy4wICAgIC0+IDAKK2RkY29tMTAzIGNvbXBhcmUgICA3RSswICAgNy4wICAgIC0+IDAKK2RkY29tMTA0IGNvbXBhcmUgICA3MEUtMSAgNy4wICAgIC0+IDAKK2RkY29tMTA1IGNvbXBhcmUgICAwLjdFKzEgNyAgICAgIC0+IDAKK2RkY29tMTA2IGNvbXBhcmUgICA3MEUtMSAgNyAgICAgIC0+IDAKK2RkY29tMTA3IGNvbXBhcmUgICA3LjAgICAgN0UrMCAgIC0+IDAKK2RkY29tMTA4IGNvbXBhcmUgICA3LjAgICAgNzBFLTEgIC0+IDAKK2RkY29tMTA5IGNvbXBhcmUgICA3ICAgICAgMC43RSsxIC0+IDAKK2RkY29tMTEwIGNvbXBhcmUgICA3ICAgICAgNzBFLTEgIC0+IDAKKworZGRjb20xMjAgY29tcGFyZSAgIDguMCAgICA3LjAgICAgLT4gMQorZGRjb20xMjEgY29tcGFyZSAgIDguMCAgICA3ICAgICAgLT4gMQorZGRjb20xMjIgY29tcGFyZSAgIDggICAgICA3LjAgICAgLT4gMQorZGRjb20xMjMgY29tcGFyZSAgIDhFKzAgICA3LjAgICAgLT4gMQorZGRjb20xMjQgY29tcGFyZSAgIDgwRS0xICA3LjAgICAgLT4gMQorZGRjb20xMjUgY29tcGFyZSAgIDAuOEUrMSA3ICAgICAgLT4gMQorZGRjb20xMjYgY29tcGFyZSAgIDgwRS0xICA3ICAgICAgLT4gMQorZGRjb20xMjcgY29tcGFyZSAgIDguMCAgICA3RSswICAgLT4gMQorZGRjb20xMjggY29tcGFyZSAgIDguMCAgICA3MEUtMSAgLT4gMQorZGRjb20xMjkgY29tcGFyZSAgIDggICAgICAwLjdFKzEgIC0+IDEKK2RkY29tMTMwIGNvbXBhcmUgICA4ICAgICAgNzBFLTEgIC0+IDEKKworZGRjb20xNDAgY29tcGFyZSAgIDguMCAgICA5LjAgICAgLT4gLTEKK2RkY29tMTQxIGNvbXBhcmUgICA4LjAgICAgOSAgICAgIC0+IC0xCitkZGNvbTE0MiBjb21wYXJlICAgOCAgICAgIDkuMCAgICAtPiAtMQorZGRjb20xNDMgY29tcGFyZSAgIDhFKzAgICA5LjAgICAgLT4gLTEKK2RkY29tMTQ0IGNvbXBhcmUgICA4MEUtMSAgOS4wICAgIC0+IC0xCitkZGNvbTE0NSBjb21wYXJlICAgMC44RSsxIDkgICAgICAtPiAtMQorZGRjb20xNDYgY29tcGFyZSAgIDgwRS0xICA5ICAgICAgLT4gLTEKK2RkY29tMTQ3IGNvbXBhcmUgICA4LjAgICAgOUUrMCAgIC0+IC0xCitkZGNvbTE0OCBjb21wYXJlICAgOC4wICAgIDkwRS0xICAtPiAtMQorZGRjb20xNDkgY29tcGFyZSAgIDggICAgICAwLjlFKzEgLT4gLTEKK2RkY29tMTUwIGNvbXBhcmUgICA4ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4KK2RkY29tMjAwIGNvbXBhcmUgIC03LjAgICAgNy4wICAgIC0+IC0xCitkZGNvbTIwMSBjb21wYXJlICAtNy4wICAgIDcgICAgICAtPiAtMQorZGRjb20yMDIgY29tcGFyZSAgLTcgICAgICA3LjAgICAgLT4gLTEKK2RkY29tMjAzIGNvbXBhcmUgIC03RSswICAgNy4wICAgIC0+IC0xCitkZGNvbTIwNCBjb21wYXJlICAtNzBFLTEgIDcuMCAgICAtPiAtMQorZGRjb20yMDUgY29tcGFyZSAgLTAuN0UrMSA3ICAgICAgLT4gLTEKK2RkY29tMjA2IGNvbXBhcmUgIC03MEUtMSAgNyAgICAgIC0+IC0xCitkZGNvbTIwNyBjb21wYXJlICAtNy4wICAgIDdFKzAgICAtPiAtMQorZGRjb20yMDggY29tcGFyZSAgLTcuMCAgICA3MEUtMSAgLT4gLTEKK2RkY29tMjA5IGNvbXBhcmUgIC03ICAgICAgMC43RSsxIC0+IC0xCitkZGNvbTIxMCBjb21wYXJlICAtNyAgICAgIDcwRS0xICAtPiAtMQorCitkZGNvbTIyMCBjb21wYXJlICAtOC4wICAgIDcuMCAgICAtPiAtMQorZGRjb20yMjEgY29tcGFyZSAgLTguMCAgICA3ICAgICAgLT4gLTEKK2RkY29tMjIyIGNvbXBhcmUgIC04ICAgICAgNy4wICAgIC0+IC0xCitkZGNvbTIyMyBjb21wYXJlICAtOEUrMCAgIDcuMCAgICAtPiAtMQorZGRjb20yMjQgY29tcGFyZSAgLTgwRS0xICA3LjAgICAgLT4gLTEKK2RkY29tMjI1IGNvbXBhcmUgIC0wLjhFKzEgNyAgICAgIC0+IC0xCitkZGNvbTIyNiBjb21wYXJlICAtODBFLTEgIDcgICAgICAtPiAtMQorZGRjb20yMjcgY29tcGFyZSAgLTguMCAgICA3RSswICAgLT4gLTEKK2RkY29tMjI4IGNvbXBhcmUgIC04LjAgICAgNzBFLTEgIC0+IC0xCitkZGNvbTIyOSBjb21wYXJlICAtOCAgICAgIDAuN0UrMSAtPiAtMQorZGRjb20yMzAgY29tcGFyZSAgLTggICAgICA3MEUtMSAgLT4gLTEKKworZGRjb20yNDAgY29tcGFyZSAgLTguMCAgICA5LjAgICAgLT4gLTEKK2RkY29tMjQxIGNvbXBhcmUgIC04LjAgICAgOSAgICAgIC0+IC0xCitkZGNvbTI0MiBjb21wYXJlICAtOCAgICAgIDkuMCAgICAtPiAtMQorZGRjb20yNDMgY29tcGFyZSAgLThFKzAgICA5LjAgICAgLT4gLTEKK2RkY29tMjQ0IGNvbXBhcmUgIC04MEUtMSAgOS4wICAgIC0+IC0xCitkZGNvbTI0NSBjb21wYXJlICAtMC44RSsxIDkgICAgICAtPiAtMQorZGRjb20yNDYgY29tcGFyZSAgLTgwRS0xICA5ICAgICAgLT4gLTEKK2RkY29tMjQ3IGNvbXBhcmUgIC04LjAgICAgOUUrMCAgIC0+IC0xCitkZGNvbTI0OCBjb21wYXJlICAtOC4wICAgIDkwRS0xICAtPiAtMQorZGRjb20yNDkgY29tcGFyZSAgLTggICAgICAwLjlFKzEgLT4gLTEKK2RkY29tMjUwIGNvbXBhcmUgIC04ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4KK2RkY29tMzAwIGNvbXBhcmUgICA3LjAgICAgLTcuMCAgICAtPiAxCitkZGNvbTMwMSBjb21wYXJlICAgNy4wICAgIC03ICAgICAgLT4gMQorZGRjb20zMDIgY29tcGFyZSAgIDcgICAgICAtNy4wICAgIC0+IDEKK2RkY29tMzAzIGNvbXBhcmUgICA3RSswICAgLTcuMCAgICAtPiAxCitkZGNvbTMwNCBjb21wYXJlICAgNzBFLTEgIC03LjAgICAgLT4gMQorZGRjb20zMDUgY29tcGFyZSAgIC43RSsxICAtNyAgICAgIC0+IDEKK2RkY29tMzA2IGNvbXBhcmUgICA3MEUtMSAgLTcgICAgICAtPiAxCitkZGNvbTMwNyBjb21wYXJlICAgNy4wICAgIC03RSswICAgLT4gMQorZGRjb20zMDggY29tcGFyZSAgIDcuMCAgICAtNzBFLTEgIC0+IDEKK2RkY29tMzA5IGNvbXBhcmUgICA3ICAgICAgLS43RSsxICAtPiAxCitkZGNvbTMxMCBjb21wYXJlICAgNyAgICAgIC03MEUtMSAgLT4gMQorCitkZGNvbTMyMCBjb21wYXJlICAgOC4wICAgIC03LjAgICAgLT4gMQorZGRjb20zMjEgY29tcGFyZSAgIDguMCAgICAtNyAgICAgIC0+IDEKK2RkY29tMzIyIGNvbXBhcmUgICA4ICAgICAgLTcuMCAgICAtPiAxCitkZGNvbTMyMyBjb21wYXJlICAgOEUrMCAgIC03LjAgICAgLT4gMQorZGRjb20zMjQgY29tcGFyZSAgIDgwRS0xICAtNy4wICAgIC0+IDEKK2RkY29tMzI1IGNvbXBhcmUgICAuOEUrMSAgLTcgICAgICAtPiAxCitkZGNvbTMyNiBjb21wYXJlICAgODBFLTEgIC03ICAgICAgLT4gMQorZGRjb20zMjcgY29tcGFyZSAgIDguMCAgICAtN0UrMCAgIC0+IDEKK2RkY29tMzI4IGNvbXBhcmUgICA4LjAgICAgLTcwRS0xICAtPiAxCitkZGNvbTMyOSBjb21wYXJlICAgOCAgICAgIC0uN0UrMSAgLT4gMQorZGRjb20zMzAgY29tcGFyZSAgIDggICAgICAtNzBFLTEgIC0+IDEKKworZGRjb20zNDAgY29tcGFyZSAgIDguMCAgICAtOS4wICAgIC0+IDEKK2RkY29tMzQxIGNvbXBhcmUgICA4LjAgICAgLTkgICAgICAtPiAxCitkZGNvbTM0MiBjb21wYXJlICAgOCAgICAgIC05LjAgICAgLT4gMQorZGRjb20zNDMgY29tcGFyZSAgIDhFKzAgICAtOS4wICAgIC0+IDEKK2RkY29tMzQ0IGNvbXBhcmUgICA4MEUtMSAgLTkuMCAgICAtPiAxCitkZGNvbTM0NSBjb21wYXJlICAgLjhFKzEgIC05ICAgICAgLT4gMQorZGRjb20zNDYgY29tcGFyZSAgIDgwRS0xICAtOSAgICAgIC0+IDEKK2RkY29tMzQ3IGNvbXBhcmUgICA4LjAgICAgLTlFKzAgICAtPiAxCitkZGNvbTM0OCBjb21wYXJlICAgOC4wICAgIC05MEUtMSAgLT4gMQorZGRjb20zNDkgY29tcGFyZSAgIDggICAgICAtLjlFKzEgIC0+IDEKK2RkY29tMzUwIGNvbXBhcmUgICA4ICAgICAgLTkwRS0xICAtPiAxCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4KK2RkY29tNDAwIGNvbXBhcmUgICAtNy4wICAgIC03LjAgICAgLT4gMAorZGRjb200MDEgY29tcGFyZSAgIC03LjAgICAgLTcgICAgICAtPiAwCitkZGNvbTQwMiBjb21wYXJlICAgLTcgICAgICAtNy4wICAgIC0+IDAKK2RkY29tNDAzIGNvbXBhcmUgICAtN0UrMCAgIC03LjAgICAgLT4gMAorZGRjb200MDQgY29tcGFyZSAgIC03MEUtMSAgLTcuMCAgICAtPiAwCitkZGNvbTQwNSBjb21wYXJlICAgLS43RSsxICAtNyAgICAgIC0+IDAKK2RkY29tNDA2IGNvbXBhcmUgICAtNzBFLTEgIC03ICAgICAgLT4gMAorZGRjb200MDcgY29tcGFyZSAgIC03LjAgICAgLTdFKzAgICAtPiAwCitkZGNvbTQwOCBjb21wYXJlICAgLTcuMCAgICAtNzBFLTEgIC0+IDAKK2RkY29tNDA5IGNvbXBhcmUgICAtNyAgICAgIC0uN0UrMSAgLT4gMAorZGRjb200MTAgY29tcGFyZSAgIC03ICAgICAgLTcwRS0xICAtPiAwCisKK2RkY29tNDIwIGNvbXBhcmUgICAtOC4wICAgIC03LjAgICAgLT4gLTEKK2RkY29tNDIxIGNvbXBhcmUgICAtOC4wICAgIC03ICAgICAgLT4gLTEKK2RkY29tNDIyIGNvbXBhcmUgICAtOCAgICAgIC03LjAgICAgLT4gLTEKK2RkY29tNDIzIGNvbXBhcmUgICAtOEUrMCAgIC03LjAgICAgLT4gLTEKK2RkY29tNDI0IGNvbXBhcmUgICAtODBFLTEgIC03LjAgICAgLT4gLTEKK2RkY29tNDI1IGNvbXBhcmUgICAtLjhFKzEgIC03ICAgICAgLT4gLTEKK2RkY29tNDI2IGNvbXBhcmUgICAtODBFLTEgIC03ICAgICAgLT4gLTEKK2RkY29tNDI3IGNvbXBhcmUgICAtOC4wICAgIC03RSswICAgLT4gLTEKK2RkY29tNDI4IGNvbXBhcmUgICAtOC4wICAgIC03MEUtMSAgLT4gLTEKK2RkY29tNDI5IGNvbXBhcmUgICAtOCAgICAgIC0uN0UrMSAgLT4gLTEKK2RkY29tNDMwIGNvbXBhcmUgICAtOCAgICAgIC03MEUtMSAgLT4gLTEKKworZGRjb200NDAgY29tcGFyZSAgIC04LjAgICAgLTkuMCAgICAtPiAxCitkZGNvbTQ0MSBjb21wYXJlICAgLTguMCAgICAtOSAgICAgIC0+IDEKK2RkY29tNDQyIGNvbXBhcmUgICAtOCAgICAgIC05LjAgICAgLT4gMQorZGRjb200NDMgY29tcGFyZSAgIC04RSswICAgLTkuMCAgICAtPiAxCitkZGNvbTQ0NCBjb21wYXJlICAgLTgwRS0xICAtOS4wICAgIC0+IDEKK2RkY29tNDQ1IGNvbXBhcmUgICAtLjhFKzEgIC05ICAgICAgLT4gMQorZGRjb200NDYgY29tcGFyZSAgIC04MEUtMSAgLTkgICAgICAtPiAxCitkZGNvbTQ0NyBjb21wYXJlICAgLTguMCAgICAtOUUrMCAgIC0+IDEKK2RkY29tNDQ4IGNvbXBhcmUgICAtOC4wICAgIC05MEUtMSAgLT4gMQorZGRjb200NDkgY29tcGFyZSAgIC04ICAgICAgLS45RSsxICAtPiAxCitkZGNvbTQ1MCBjb21wYXJlICAgLTggICAgICAtOTBFLTEgIC0+IDEKKworLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuCitkZGNvbTQ1MSBjb21wYXJlICAgICAgMS4wICAgICAgIDAuMSAgLT4gMQorZGRjb200NTIgY29tcGFyZSAgICAgIDAuMSAgICAgICAxLjAgIC0+IC0xCitkZGNvbTQ1MyBjb21wYXJlICAgICAxMC4wICAgICAgIDAuMSAgLT4gMQorZGRjb200NTQgY29tcGFyZSAgICAgIDAuMSAgICAgIDEwLjAgIC0+IC0xCitkZGNvbTQ1NSBjb21wYXJlICAgICAgMTAwICAgICAgIDEuMCAgLT4gMQorZGRjb200NTYgY29tcGFyZSAgICAgIDEuMCAgICAgICAxMDAgIC0+IC0xCitkZGNvbTQ1NyBjb21wYXJlICAgICAxMDAwICAgICAgMTAuMCAgLT4gMQorZGRjb200NTggY29tcGFyZSAgICAgMTAuMCAgICAgIDEwMDAgIC0+IC0xCitkZGNvbTQ1OSBjb21wYXJlICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMQorZGRjb200NjAgY29tcGFyZSAgICAxMDAuMCAgICAgMTAwMDAgIC0+IC0xCitkZGNvbTQ2MSBjb21wYXJlICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMQorZGRjb200NjIgY29tcGFyZSAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IC0xCitkZGNvbTQ2MyBjb21wYXJlICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMQorZGRjb200NjQgY29tcGFyZSAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IC0xCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorZGRjb200NzMgY29tcGFyZSAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjb200NzQgY29tcGFyZSAxMjMuNDU2MDAwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNvbTQ3NSBjb21wYXJlIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjb200NzYgY29tcGFyZSAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMAorZGRjb200NzcgY29tcGFyZSAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNvbTQ3OCBjb21wYXJlIDEyMy40NTYwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMAorZGRjb200NzkgY29tcGFyZSAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjb200ODAgY29tcGFyZSAxMjMuNDU2MDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCitkZGNvbTQ4MSBjb21wYXJlIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjb200ODIgY29tcGFyZSAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgLT4gMAorZGRjb200ODMgY29tcGFyZSAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAtPiAwCitkZGNvbTQ4NyBjb21wYXJlIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAtPiAwCitkZGNvbTQ4OCBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDAKK2RkY29tNDg5IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwRSs4OSAtPiAwCitkZGNvbTQ5MCBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAwCitkZGNvbTQ5MSBjb21wYXJlIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5IC0+IDAKK2RkY29tNDkyIGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAtPiAwCitkZGNvbTQ5MyBjb21wYXJlIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAtPiAwCitkZGNvbTQ5NCBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDAKK2RkY29tNDk1IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwRSs4OSAtPiAwCitkZGNvbTQ5NiBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAwCitkZGNvbTQ5NyBjb21wYXJlIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5IC0+IDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorZGRjb201MDAgY29tcGFyZSAgICAxICAgICAxRS0xNSAgICAtPiAxCitkZGNvbTUwMSBjb21wYXJlICAgIDEgICAgIDFFLTE0ICAgIC0+IDEKK2RkY29tNTAyIGNvbXBhcmUgICAgMSAgICAgMUUtMTMgICAgLT4gMQorZGRjb201MDMgY29tcGFyZSAgICAxICAgICAxRS0xMiAgICAtPiAxCitkZGNvbTUwNCBjb21wYXJlICAgIDEgICAgIDFFLTExICAgIC0+IDEKK2RkY29tNTA1IGNvbXBhcmUgICAgMSAgICAgMUUtMTAgICAgLT4gMQorZGRjb201MDYgY29tcGFyZSAgICAxICAgICAxRS05ICAgICAtPiAxCitkZGNvbTUwNyBjb21wYXJlICAgIDEgICAgIDFFLTggICAgIC0+IDEKK2RkY29tNTA4IGNvbXBhcmUgICAgMSAgICAgMUUtNyAgICAgLT4gMQorZGRjb201MDkgY29tcGFyZSAgICAxICAgICAxRS02ICAgICAtPiAxCitkZGNvbTUxMCBjb21wYXJlICAgIDEgICAgIDFFLTUgICAgIC0+IDEKK2RkY29tNTExIGNvbXBhcmUgICAgMSAgICAgMUUtNCAgICAgLT4gMQorZGRjb201MTIgY29tcGFyZSAgICAxICAgICAxRS0zICAgICAtPiAxCitkZGNvbTUxMyBjb21wYXJlICAgIDEgICAgIDFFLTIgICAgIC0+IDEKK2RkY29tNTE0IGNvbXBhcmUgICAgMSAgICAgMUUtMSAgICAgLT4gMQorZGRjb201MTUgY29tcGFyZSAgICAxICAgICAxRS0wICAgICAtPiAwCitkZGNvbTUxNiBjb21wYXJlICAgIDEgICAgIDFFKzEgICAgIC0+IC0xCitkZGNvbTUxNyBjb21wYXJlICAgIDEgICAgIDFFKzIgICAgIC0+IC0xCitkZGNvbTUxOCBjb21wYXJlICAgIDEgICAgIDFFKzMgICAgIC0+IC0xCitkZGNvbTUxOSBjb21wYXJlICAgIDEgICAgIDFFKzQgICAgIC0+IC0xCitkZGNvbTUyMSBjb21wYXJlICAgIDEgICAgIDFFKzUgICAgIC0+IC0xCitkZGNvbTUyMiBjb21wYXJlICAgIDEgICAgIDFFKzYgICAgIC0+IC0xCitkZGNvbTUyMyBjb21wYXJlICAgIDEgICAgIDFFKzcgICAgIC0+IC0xCitkZGNvbTUyNCBjb21wYXJlICAgIDEgICAgIDFFKzggICAgIC0+IC0xCitkZGNvbTUyNSBjb21wYXJlICAgIDEgICAgIDFFKzkgICAgIC0+IC0xCitkZGNvbTUyNiBjb21wYXJlICAgIDEgICAgIDFFKzEwICAgIC0+IC0xCitkZGNvbTUyNyBjb21wYXJlICAgIDEgICAgIDFFKzExICAgIC0+IC0xCitkZGNvbTUyOCBjb21wYXJlICAgIDEgICAgIDFFKzEyICAgIC0+IC0xCitkZGNvbTUyOSBjb21wYXJlICAgIDEgICAgIDFFKzEzICAgIC0+IC0xCitkZGNvbTUzMCBjb21wYXJlICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xCitkZGNvbTUzMSBjb21wYXJlICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xCistLSBMUiBzd2FwCitkZGNvbTU0MCBjb21wYXJlICAgIDFFLTE1ICAxICAgICAgIC0+IC0xCitkZGNvbTU0MSBjb21wYXJlICAgIDFFLTE0ICAxICAgICAgIC0+IC0xCitkZGNvbTU0MiBjb21wYXJlICAgIDFFLTEzICAxICAgICAgIC0+IC0xCitkZGNvbTU0MyBjb21wYXJlICAgIDFFLTEyICAxICAgICAgIC0+IC0xCitkZGNvbTU0NCBjb21wYXJlICAgIDFFLTExICAxICAgICAgIC0+IC0xCitkZGNvbTU0NSBjb21wYXJlICAgIDFFLTEwICAxICAgICAgIC0+IC0xCitkZGNvbTU0NiBjb21wYXJlICAgIDFFLTkgICAxICAgICAgIC0+IC0xCitkZGNvbTU0NyBjb21wYXJlICAgIDFFLTggICAxICAgICAgIC0+IC0xCitkZGNvbTU0OCBjb21wYXJlICAgIDFFLTcgICAxICAgICAgIC0+IC0xCitkZGNvbTU0OSBjb21wYXJlICAgIDFFLTYgICAxICAgICAgIC0+IC0xCitkZGNvbTU1MCBjb21wYXJlICAgIDFFLTUgICAxICAgICAgIC0+IC0xCitkZGNvbTU1MSBjb21wYXJlICAgIDFFLTQgICAxICAgICAgIC0+IC0xCitkZGNvbTU1MiBjb21wYXJlICAgIDFFLTMgICAxICAgICAgIC0+IC0xCitkZGNvbTU1MyBjb21wYXJlICAgIDFFLTIgICAxICAgICAgIC0+IC0xCitkZGNvbTU1NCBjb21wYXJlICAgIDFFLTEgICAxICAgICAgIC0+IC0xCitkZGNvbTU1NSBjb21wYXJlICAgIDFFLTAgICAxICAgICAgIC0+ICAwCitkZGNvbTU1NiBjb21wYXJlICAgIDFFKzEgICAxICAgICAgIC0+ICAxCitkZGNvbTU1NyBjb21wYXJlICAgIDFFKzIgICAxICAgICAgIC0+ICAxCitkZGNvbTU1OCBjb21wYXJlICAgIDFFKzMgICAxICAgICAgIC0+ICAxCitkZGNvbTU1OSBjb21wYXJlICAgIDFFKzQgICAxICAgICAgIC0+ICAxCitkZGNvbTU2MSBjb21wYXJlICAgIDFFKzUgICAxICAgICAgIC0+ICAxCitkZGNvbTU2MiBjb21wYXJlICAgIDFFKzYgICAxICAgICAgIC0+ICAxCitkZGNvbTU2MyBjb21wYXJlICAgIDFFKzcgICAxICAgICAgIC0+ICAxCitkZGNvbTU2NCBjb21wYXJlICAgIDFFKzggICAxICAgICAgIC0+ICAxCitkZGNvbTU2NSBjb21wYXJlICAgIDFFKzkgICAxICAgICAgIC0+ICAxCitkZGNvbTU2NiBjb21wYXJlICAgIDFFKzEwICAxICAgICAgIC0+ICAxCitkZGNvbTU2NyBjb21wYXJlICAgIDFFKzExICAxICAgICAgIC0+ICAxCitkZGNvbTU2OCBjb21wYXJlICAgIDFFKzEyICAxICAgICAgIC0+ICAxCitkZGNvbTU2OSBjb21wYXJlICAgIDFFKzEzICAxICAgICAgIC0+ICAxCitkZGNvbTU3MCBjb21wYXJlICAgIDFFKzE0ICAxICAgICAgIC0+ICAxCitkZGNvbTU3MSBjb21wYXJlICAgIDFFKzE1ICAxICAgICAgIC0+ICAxCistLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2RkY29tNTgwIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxCitkZGNvbTU4MSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQorZGRjb201ODIgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDEKK2RkY29tNTgzIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxCitkZGNvbTU4NCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQorZGRjb201ODUgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDEKK2RkY29tNTg2IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxCitkZGNvbTU4NyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQorZGRjb201ODggY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDEKK2RkY29tNTg5IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQorZGRjb201OTAgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xCitkZGNvbTU5MSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTEKK2RkY29tNTkyIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQorZGRjb201OTMgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xCitkZGNvbTU5NCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTEKK2RkY29tNTk1IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQorZGRjb201OTYgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xCitkZGNvbTU5NyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTEKK2RkY29tNTk4IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQorZGRjb201OTkgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xCisKKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCitkZGNvbTYwMCBjb21wYXJlICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwMSBjb21wYXJlICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwMiBjb21wYXJlICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwMyBjb21wYXJlICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwNCBjb21wYXJlICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwNSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwNiBjb21wYXJlICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwNyBjb21wYXJlICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwOCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYwOSBjb21wYXJlICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xCitkZGNvbTYxMCBjb21wYXJlICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxCitkZGNvbTYxMSBjb21wYXJlICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxCitkZGNvbTYxMiBjb21wYXJlICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxCitkZGNvbTYxMyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxCitkZGNvbTYxNCBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxCitkZGNvbTYxNSBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxCitkZGNvbTYxNiBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxCitkZGNvbTYxNyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxCitkZGNvbTYxOCBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxCitkZGNvbTYxOSBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxCitkZGNvbTYyMCBjb21wYXJlICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyMSBjb21wYXJlICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyMiBjb21wYXJlICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyMyBjb21wYXJlICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyNCBjb21wYXJlICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyNSBjb21wYXJlICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyNiBjb21wYXJlICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyNyBjb21wYXJlICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyOCBjb21wYXJlICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYyOSBjb21wYXJlICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxCitkZGNvbTYzMCBjb21wYXJlICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xCitkZGNvbTYzMSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xCitkZGNvbTYzMiBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xCitkZGNvbTYzMyBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xCitkZGNvbTYzNCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xCitkZGNvbTYzNSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xCitkZGNvbTYzNiBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xCitkZGNvbTYzNyBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xCitkZGNvbTYzOCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xCitkZGNvbTYzOSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xCisKKy0tIGV4dGVuZGVkIHplcm9zCitkZGNvbTY0MCBjb21wYXJlICAgMCAgICAgMCAgIC0+IDAKK2RkY29tNjQxIGNvbXBhcmUgICAwICAgIC0wICAgLT4gMAorZGRjb202NDIgY29tcGFyZSAgIDAgICAgLTAuMCAtPiAwCitkZGNvbTY0MyBjb21wYXJlICAgMCAgICAgMC4wIC0+IDAKK2RkY29tNjQ0IGNvbXBhcmUgIC0wICAgICAwICAgLT4gMAorZGRjb202NDUgY29tcGFyZSAgLTAgICAgLTAgICAtPiAwCitkZGNvbTY0NiBjb21wYXJlICAtMCAgICAtMC4wIC0+IDAKK2RkY29tNjQ3IGNvbXBhcmUgIC0wICAgICAwLjAgLT4gMAorZGRjb202NDggY29tcGFyZSAgIDAuMCAgIDAgICAtPiAwCitkZGNvbTY0OSBjb21wYXJlICAgMC4wICAtMCAgIC0+IDAKK2RkY29tNjUwIGNvbXBhcmUgICAwLjAgIC0wLjAgLT4gMAorZGRjb202NTEgY29tcGFyZSAgIDAuMCAgIDAuMCAtPiAwCitkZGNvbTY1MiBjb21wYXJlICAtMC4wICAgMCAgIC0+IDAKK2RkY29tNjUzIGNvbXBhcmUgIC0wLjAgIC0wICAgLT4gMAorZGRjb202NTQgY29tcGFyZSAgLTAuMCAgLTAuMCAtPiAwCitkZGNvbTY1NSBjb21wYXJlICAtMC4wICAgMC4wIC0+IDAKKworZGRjb202NTYgY29tcGFyZSAgLTBFMSAgIDAuMCAtPiAwCitkZGNvbTY1NyBjb21wYXJlICAtMEUyICAgMC4wIC0+IDAKK2RkY29tNjU4IGNvbXBhcmUgICAwRTEgICAwLjAgLT4gMAorZGRjb202NTkgY29tcGFyZSAgIDBFMiAgIDAuMCAtPiAwCitkZGNvbTY2MCBjb21wYXJlICAtMEUxICAgMCAgIC0+IDAKK2RkY29tNjYxIGNvbXBhcmUgIC0wRTIgICAwICAgLT4gMAorZGRjb202NjIgY29tcGFyZSAgIDBFMSAgIDAgICAtPiAwCitkZGNvbTY2MyBjb21wYXJlICAgMEUyICAgMCAgIC0+IDAKK2RkY29tNjY0IGNvbXBhcmUgIC0wRTEgIC0wRTEgLT4gMAorZGRjb202NjUgY29tcGFyZSAgLTBFMiAgLTBFMSAtPiAwCitkZGNvbTY2NiBjb21wYXJlICAgMEUxICAtMEUxIC0+IDAKK2RkY29tNjY3IGNvbXBhcmUgICAwRTIgIC0wRTEgLT4gMAorZGRjb202NjggY29tcGFyZSAgLTBFMSAgLTBFMiAtPiAwCitkZGNvbTY2OSBjb21wYXJlICAtMEUyICAtMEUyIC0+IDAKK2RkY29tNjcwIGNvbXBhcmUgICAwRTEgIC0wRTIgLT4gMAorZGRjb202NzEgY29tcGFyZSAgIDBFMiAgLTBFMiAtPiAwCitkZGNvbTY3MiBjb21wYXJlICAtMEUxICAgMEUxIC0+IDAKK2RkY29tNjczIGNvbXBhcmUgIC0wRTIgICAwRTEgLT4gMAorZGRjb202NzQgY29tcGFyZSAgIDBFMSAgIDBFMSAtPiAwCitkZGNvbTY3NSBjb21wYXJlICAgMEUyICAgMEUxIC0+IDAKK2RkY29tNjc2IGNvbXBhcmUgIC0wRTEgICAwRTIgLT4gMAorZGRjb202NzcgY29tcGFyZSAgLTBFMiAgIDBFMiAtPiAwCitkZGNvbTY3OCBjb21wYXJlICAgMEUxICAgMEUyIC0+IDAKK2RkY29tNjc5IGNvbXBhcmUgICAwRTIgICAwRTIgLT4gMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitkZGNvbTY4MCBjb21wYXJlICAgMTIgICAgMTIgICAgICAgICAgIC0+IDAKK2RkY29tNjgxIGNvbXBhcmUgICAxMiAgICAxMi4wICAgICAgICAgLT4gMAorZGRjb202ODIgY29tcGFyZSAgIDEyICAgIDEyLjAwICAgICAgICAtPiAwCitkZGNvbTY4MyBjb21wYXJlICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDAKK2RkY29tNjg0IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMAorZGRjb202ODUgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAwCitkZGNvbTY4NiBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDAKK2RkY29tNjg3IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMAorZGRjb202ODggY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAwCitkZGNvbTY4OSBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDAKK2RkY29tNjkwIGNvbXBhcmUgICAxMiAgICAgICAgICAgICAgMTIgLT4gMAorZGRjb202OTEgY29tcGFyZSAgIDEyLjAgICAgICAgICAgICAxMiAtPiAwCitkZGNvbTY5MiBjb21wYXJlICAgMTIuMDAgICAgICAgICAgIDEyIC0+IDAKK2RkY29tNjkzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgICAgMTIgLT4gMAorZGRjb202OTQgY29tcGFyZSAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAwCitkZGNvbTY5NSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IDAKK2RkY29tNjk2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gMAorZGRjb202OTcgY29tcGFyZSAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAwCitkZGNvbTY5OCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IDAKK2RkY29tNjk5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gMAorCistLSBmaXJzdCwgc2Vjb25kLCAmIGxhc3QgZGlnaXQKK2RkY29tNzAwIGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTUgLT4gMQorZGRjb203MDEgY29tcGFyZSAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAwCitkZGNvbTcwMiBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU3IC0+IC0xCitkZGNvbTcwMyBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAwMjM0NTY3ODkwMTIzNDU2IC0+IDEKK2RkY29tNzA0IGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgLT4gMAorZGRjb203MDUgY29tcGFyZSAgIDEyMzQ1Njc4OTAxMjM0NTYgMjIzNDU2Nzg5MDEyMzQ1NiAtPiAtMQorZGRjb203MDYgY29tcGFyZSAgIDExMzQ1Njc4OTAxMjM0NTYgMTAzNDU2Nzg5MDEyMzQ1NiAtPiAxCitkZGNvbTcwNyBjb21wYXJlICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMTM0NTY3ODkwMTIzNDU2IC0+IDAKK2RkY29tNzA4IGNvbXBhcmUgICAxMTM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgLT4gLTEKKworLS0gbWlzY2VsbGFuZW91cworZGRjb203MjEgY29tcGFyZSAxMjM0NTY3ODAwMCAxIC0+IDEKK2RkY29tNzIyIGNvbXBhcmUgMSAxMjM0NTY3ODAwMCAtPiAtMQorZGRjb203MjMgY29tcGFyZSAxMjM0NTY3ODAwICAxIC0+IDEKK2RkY29tNzI0IGNvbXBhcmUgMSAxMjM0NTY3ODAwICAtPiAtMQorZGRjb203MjUgY29tcGFyZSAxMjM0NTY3ODkwICAxIC0+IDEKK2RkY29tNzI2IGNvbXBhcmUgMSAxMjM0NTY3ODkwICAtPiAtMQorZGRjb203MjcgY29tcGFyZSAxMjM0NTY3ODkxICAxIC0+IDEKK2RkY29tNzI4IGNvbXBhcmUgMSAxMjM0NTY3ODkxICAtPiAtMQorZGRjb203MjkgY29tcGFyZSAxMjM0NTY3ODkwMSAxIC0+IDEKK2RkY29tNzMwIGNvbXBhcmUgMSAxMjM0NTY3ODkwMSAtPiAtMQorZGRjb203MzEgY29tcGFyZSAxMjM0NTY3ODk2ICAxIC0+IDEKK2RkY29tNzMyIGNvbXBhcmUgMSAxMjM0NTY3ODk2ICAtPiAtMQorCistLSByZXNpZHVlIGNhc2VzIGF0IGxvd2VyIHByZWNpc2lvbgorZGRjb203NDAgY29tcGFyZSAgMSAgMC45OTk5OTk5ICAtPiAxCitkZGNvbTc0MSBjb21wYXJlICAxICAwLjk5OTk5OSAgIC0+IDEKK2RkY29tNzQyIGNvbXBhcmUgIDEgIDAuOTk5OTkgICAgLT4gMQorZGRjb203NDMgY29tcGFyZSAgMSAgMS4wMDAwICAgICAtPiAwCitkZGNvbTc0NCBjb21wYXJlICAxICAxLjAwMDAxICAgIC0+IC0xCitkZGNvbTc0NSBjb21wYXJlICAxICAxLjAwMDAwMSAgIC0+IC0xCitkZGNvbTc0NiBjb21wYXJlICAxICAxLjAwMDAwMDEgIC0+IC0xCitkZGNvbTc1MCBjb21wYXJlICAwLjk5OTk5OTkgIDEgIC0+IC0xCitkZGNvbTc1MSBjb21wYXJlICAwLjk5OTk5OSAgIDEgIC0+IC0xCitkZGNvbTc1MiBjb21wYXJlICAwLjk5OTk5ICAgIDEgIC0+IC0xCitkZGNvbTc1MyBjb21wYXJlICAxLjAwMDAgICAgIDEgIC0+IDAKK2RkY29tNzU0IGNvbXBhcmUgIDEuMDAwMDEgICAgMSAgLT4gMQorZGRjb203NTUgY29tcGFyZSAgMS4wMDAwMDEgICAxICAtPiAxCitkZGNvbTc1NiBjb21wYXJlICAxLjAwMDAwMDEgIDEgIC0+IDEKKworLS0gU3BlY2lhbHMKK2RkY29tNzgwIGNvbXBhcmUgIEluZiAgLUluZiAgIC0+ICAxCitkZGNvbTc4MSBjb21wYXJlICBJbmYgIC0xMDAwICAtPiAgMQorZGRjb203ODIgY29tcGFyZSAgSW5mICAtMSAgICAgLT4gIDEKK2RkY29tNzgzIGNvbXBhcmUgIEluZiAgLTAgICAgIC0+ICAxCitkZGNvbTc4NCBjb21wYXJlICBJbmYgICAwICAgICAtPiAgMQorZGRjb203ODUgY29tcGFyZSAgSW5mICAgMSAgICAgLT4gIDEKK2RkY29tNzg2IGNvbXBhcmUgIEluZiAgIDEwMDAgIC0+ICAxCitkZGNvbTc4NyBjb21wYXJlICBJbmYgICBJbmYgICAtPiAgMAorZGRjb203ODggY29tcGFyZSAtMTAwMCAgSW5mICAgLT4gLTEKK2RkY29tNzg5IGNvbXBhcmUgLUluZiAgIEluZiAgIC0+IC0xCitkZGNvbTc5MCBjb21wYXJlIC0xICAgICBJbmYgICAtPiAtMQorZGRjb203OTEgY29tcGFyZSAtMCAgICAgSW5mICAgLT4gLTEKK2RkY29tNzkyIGNvbXBhcmUgIDAgICAgIEluZiAgIC0+IC0xCitkZGNvbTc5MyBjb21wYXJlICAxICAgICBJbmYgICAtPiAtMQorZGRjb203OTQgY29tcGFyZSAgMTAwMCAgSW5mICAgLT4gLTEKK2RkY29tNzk1IGNvbXBhcmUgIEluZiAgIEluZiAgIC0+ICAwCisKK2RkY29tODAwIGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAwCitkZGNvbTgwMSBjb21wYXJlIC1JbmYgIC0xMDAwICAtPiAtMQorZGRjb204MDIgY29tcGFyZSAtSW5mICAtMSAgICAgLT4gLTEKK2RkY29tODAzIGNvbXBhcmUgLUluZiAgLTAgICAgIC0+IC0xCitkZGNvbTgwNCBjb21wYXJlIC1JbmYgICAwICAgICAtPiAtMQorZGRjb204MDUgY29tcGFyZSAtSW5mICAgMSAgICAgLT4gLTEKK2RkY29tODA2IGNvbXBhcmUgLUluZiAgIDEwMDAgIC0+IC0xCitkZGNvbTgwNyBjb21wYXJlIC1JbmYgICBJbmYgICAtPiAtMQorZGRjb204MDggY29tcGFyZSAtSW5mICAtSW5mICAgLT4gIDAKK2RkY29tODA5IGNvbXBhcmUgLTEwMDAgLUluZiAgIC0+ICAxCitkZGNvbTgxMCBjb21wYXJlIC0xICAgIC1JbmYgICAtPiAgMQorZGRjb204MTEgY29tcGFyZSAtMCAgICAtSW5mICAgLT4gIDEKK2RkY29tODEyIGNvbXBhcmUgIDAgICAgLUluZiAgIC0+ICAxCitkZGNvbTgxMyBjb21wYXJlICAxICAgIC1JbmYgICAtPiAgMQorZGRjb204MTQgY29tcGFyZSAgMTAwMCAtSW5mICAgLT4gIDEKK2RkY29tODE1IGNvbXBhcmUgIEluZiAgLUluZiAgIC0+ICAxCisKK2RkY29tODIxIGNvbXBhcmUgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RkY29tODIyIGNvbXBhcmUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RkY29tODIzIGNvbXBhcmUgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RkY29tODI0IGNvbXBhcmUgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RkY29tODI1IGNvbXBhcmUgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RkY29tODI2IGNvbXBhcmUgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RkY29tODI3IGNvbXBhcmUgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RkY29tODI4IGNvbXBhcmUgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RkY29tODI5IGNvbXBhcmUgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RkY29tODMwIGNvbXBhcmUgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RkY29tODMxIGNvbXBhcmUgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RkY29tODMyIGNvbXBhcmUgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RkY29tODMzIGNvbXBhcmUgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RkY29tODM0IGNvbXBhcmUgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RkY29tODM1IGNvbXBhcmUgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RkY29tODM2IGNvbXBhcmUgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RkY29tODM3IGNvbXBhcmUgIEluZiAgTmFOICAgIC0+ICBOYU4KK2RkY29tODM4IGNvbXBhcmUgLU5hTiAtTmFOICAgIC0+IC1OYU4KK2RkY29tODM5IGNvbXBhcmUgK05hTiAtTmFOICAgIC0+ICBOYU4KK2RkY29tODQwIGNvbXBhcmUgLU5hTiArTmFOICAgIC0+IC1OYU4KKworZGRjb204NDEgY29tcGFyZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODQyIGNvbXBhcmUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg0MyBjb21wYXJlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NDQgY29tcGFyZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODQ1IGNvbXBhcmUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg0NiBjb21wYXJlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NDcgY29tcGFyZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODQ4IGNvbXBhcmUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg0OSBjb21wYXJlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NTAgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODUxIGNvbXBhcmUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg1MiBjb21wYXJlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NTMgY29tcGFyZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODU0IGNvbXBhcmUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg1NSBjb21wYXJlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NTYgY29tcGFyZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODU3IGNvbXBhcmUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg1OCBjb21wYXJlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NTkgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRjb204NjAgY29tcGFyZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2RkY29tODYxIGNvbXBhcmUgIE5hTjggIDk5OSAgIC0+ICBOYU44CitkZGNvbTg2MiBjb21wYXJlICBOYU43NyBJbmYgICAtPiAgTmFONzcKK2RkY29tODYzIGNvbXBhcmUgLU5hTjY3IE5hTjUgIC0+IC1OYU42NworZGRjb204NjQgY29tcGFyZSAtSW5mICAtTmFONCAgLT4gLU5hTjQKK2RkY29tODY1IGNvbXBhcmUgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMworZGRjb204NjYgY29tcGFyZSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKK2RkY29tODY3IGNvbXBhcmUgLU5hTjQxIC1OYU40MiAtPiAtTmFONDEKK2RkY29tODY4IGNvbXBhcmUgK05hTjQxIC1OYU40MiAtPiAgTmFONDEKK2RkY29tODY5IGNvbXBhcmUgLU5hTjQxICtOYU40MiAtPiAtTmFONDEKK2RkY29tODcwIGNvbXBhcmUgK05hTjQxICtOYU40MiAtPiAgTmFONDEKKworZGRjb204NzEgY29tcGFyZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg3MiBjb21wYXJlICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODczIGNvbXBhcmUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NzQgY29tcGFyZSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg3NSBjb21wYXJlICBOYU44NSAgc05hTjgzICAtPiAgTmFOODMgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODc2IGNvbXBhcmUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRjb204NzcgY29tcGFyZSAgMDg4ICAgIHNOYU44MSAgLT4gIE5hTjgxIEludmFsaWRfb3BlcmF0aW9uCitkZGNvbTg3OCBjb21wYXJlICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkY29tODc5IGNvbXBhcmUgIE5hTiAgIC1zTmFOODkgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSB3aWRlIHJhbmdlCitkZGNvbTg4MCBjb21wYXJlICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzM4NCAtPiAtMQorZGRjb204ODEgY29tcGFyZSA5RSszODQgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKK2RkY29tODgyIGNvbXBhcmUgKzAuMTAwIDlFLTM4MyAgICAgICAgICAgICAgIC0+ICAxCitkZGNvbTg4MyBjb21wYXJlIDlFLTM4MyArMC4xMDAgICAgICAgICAgICAgICAtPiAtMQorZGRjb204ODUgY29tcGFyZSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSszODQgLT4gLTEKK2RkY29tODg2IGNvbXBhcmUgOUUrMzg0IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitkZGNvbTg4NyBjb21wYXJlIC0wLjEwMCA5RS0zODMgICAgICAgICAgICAgICAtPiAtMQorZGRjb204ODggY29tcGFyZSA5RS0zODMgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDEKKworLS0gc3ByZWFkIHplcm9zCitkZGNvbTkwMCBjb21wYXJlICAgMEUtMzgzICAwICAgICAgIC0+ICAwCitkZGNvbTkwMSBjb21wYXJlICAgMEUtMzgzIC0wICAgICAgIC0+ICAwCitkZGNvbTkwMiBjb21wYXJlICAtMEUtMzgzICAwICAgICAgIC0+ICAwCitkZGNvbTkwMyBjb21wYXJlICAtMEUtMzgzIC0wICAgICAgIC0+ICAwCitkZGNvbTkwNCBjb21wYXJlICAgMEUtMzgzICAwRSszODQgIC0+ICAwCitkZGNvbTkwNSBjb21wYXJlICAgMEUtMzgzIC0wRSszODQgIC0+ICAwCitkZGNvbTkwNiBjb21wYXJlICAtMEUtMzgzICAwRSszODQgIC0+ICAwCitkZGNvbTkwNyBjb21wYXJlICAtMEUtMzgzIC0wRSszODQgIC0+ICAwCitkZGNvbTkwOCBjb21wYXJlICAgMCAgICAgICAwRSszODQgIC0+ICAwCitkZGNvbTkwOSBjb21wYXJlICAgMCAgICAgIC0wRSszODQgIC0+ICAwCitkZGNvbTkxMCBjb21wYXJlICAtMCAgICAgICAwRSszODQgIC0+ICAwCitkZGNvbTkxMSBjb21wYXJlICAtMCAgICAgIC0wRSszODQgIC0+ICAwCitkZGNvbTkzMCBjb21wYXJlICAgMEUrMzg0ICAwICAgICAgIC0+ICAwCitkZGNvbTkzMSBjb21wYXJlICAgMEUrMzg0IC0wICAgICAgIC0+ICAwCitkZGNvbTkzMiBjb21wYXJlICAtMEUrMzg0ICAwICAgICAgIC0+ICAwCitkZGNvbTkzMyBjb21wYXJlICAtMEUrMzg0IC0wICAgICAgIC0+ICAwCitkZGNvbTkzNCBjb21wYXJlICAgMEUrMzg0ICAwRS0zODMgIC0+ICAwCitkZGNvbTkzNSBjb21wYXJlICAgMEUrMzg0IC0wRS0zODMgIC0+ICAwCitkZGNvbTkzNiBjb21wYXJlICAtMEUrMzg0ICAwRS0zODMgIC0+ICAwCitkZGNvbTkzNyBjb21wYXJlICAtMEUrMzg0IC0wRS0zODMgIC0+ICAwCitkZGNvbTkzOCBjb21wYXJlICAgMCAgICAgICAwRS0zODMgIC0+ICAwCitkZGNvbTkzOSBjb21wYXJlICAgMCAgICAgIC0wRS0zODMgIC0+ICAwCitkZGNvbTk0MCBjb21wYXJlICAtMCAgICAgICAwRS0zODMgIC0+ICAwCitkZGNvbTk0MSBjb21wYXJlICAtMCAgICAgIC0wRS0zODMgIC0+ICAwCisKKy0tIHNpZ25zCitkZGNvbTk2MSBjb21wYXJlICAxZSs3NyAgMWUrMTEgLT4gIDEKK2RkY29tOTYyIGNvbXBhcmUgIDFlKzc3IC0xZSsxMSAtPiAgMQorZGRjb205NjMgY29tcGFyZSAtMWUrNzcgIDFlKzExIC0+IC0xCitkZGNvbTk2NCBjb21wYXJlIC0xZSs3NyAtMWUrMTEgLT4gLTEKK2RkY29tOTY1IGNvbXBhcmUgIDFlLTc3ICAxZS0xMSAtPiAtMQorZGRjb205NjYgY29tcGFyZSAgMWUtNzcgLTFlLTExIC0+ICAxCitkZGNvbTk2NyBjb21wYXJlIC0xZS03NyAgMWUtMTEgLT4gLTEKK2RkY29tOTY4IGNvbXBhcmUgLTFlLTc3IC0xZS0xMSAtPiAgMQorCistLSBmdWxsIGFsaWdubWVudCByYW5nZSwgYm90aCB3YXlzCitkZGNvbXAxMDAxIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gMAorZGRjb21wMTAwMiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMCAgIC0+IDAKK2RkY29tcDEwMDMgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMCAgICAtPiAwCitkZGNvbXAxMDA0IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMCAgICAgLT4gMAorZGRjb21wMTAwNSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMCAgICAgIC0+IDAKK2RkY29tcDEwMDYgY29tcGFyZSAxIDEuMDAwMDAwMDAwMCAgICAgICAtPiAwCitkZGNvbXAxMDA3IGNvbXBhcmUgMSAxLjAwMDAwMDAwMCAgICAgICAgLT4gMAorZGRjb21wMTAwOCBjb21wYXJlIDEgMS4wMDAwMDAwMCAgICAgICAgIC0+IDAKK2RkY29tcDEwMDkgY29tcGFyZSAxIDEuMDAwMDAwMCAgICAgICAgICAtPiAwCitkZGNvbXAxMDEwIGNvbXBhcmUgMSAxLjAwMDAwMCAgICAgICAgICAgLT4gMAorZGRjb21wMTAxMSBjb21wYXJlIDEgMS4wMDAwMCAgICAgICAgICAgIC0+IDAKK2RkY29tcDEwMTIgY29tcGFyZSAxIDEuMDAwMCAgICAgICAgICAgICAtPiAwCitkZGNvbXAxMDEzIGNvbXBhcmUgMSAxLjAwMCAgICAgICAgICAgICAgLT4gMAorZGRjb21wMTAxNCBjb21wYXJlIDEgMS4wMCAgICAgICAgICAgICAgIC0+IDAKK2RkY29tcDEwMTUgY29tcGFyZSAxIDEuMCAgICAgICAgICAgICAgICAtPiAwCitkZGNvbXAxMDIxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAgIDEgLT4gMAorZGRjb21wMTAyMiBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAgICAxIC0+IDAKK2RkY29tcDEwMjMgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAgICAgMSAtPiAwCitkZGNvbXAxMDI0IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAgICAgIDEgLT4gMAorZGRjb21wMTAyNSBjb21wYXJlIDEuMDAwMDAwMDAwMDAgICAgICAxIC0+IDAKK2RkY29tcDEwMjYgY29tcGFyZSAxLjAwMDAwMDAwMDAgICAgICAgMSAtPiAwCitkZGNvbXAxMDI3IGNvbXBhcmUgMS4wMDAwMDAwMDAgICAgICAgIDEgLT4gMAorZGRjb21wMTAyOCBjb21wYXJlIDEuMDAwMDAwMDAgICAgICAgICAxIC0+IDAKK2RkY29tcDEwMjkgY29tcGFyZSAxLjAwMDAwMDAgICAgICAgICAgMSAtPiAwCitkZGNvbXAxMDMwIGNvbXBhcmUgMS4wMDAwMDAgICAgICAgICAgIDEgLT4gMAorZGRjb21wMTAzMSBjb21wYXJlIDEuMDAwMDAgICAgICAgICAgICAxIC0+IDAKK2RkY29tcDEwMzIgY29tcGFyZSAxLjAwMDAgICAgICAgICAgICAgMSAtPiAwCitkZGNvbXAxMDMzIGNvbXBhcmUgMS4wMDAgICAgICAgICAgICAgIDEgLT4gMAorZGRjb21wMTAzNCBjb21wYXJlIDEuMDAgICAgICAgICAgICAgICAxIC0+IDAKK2RkY29tcDEwMzUgY29tcGFyZSAxLjAgICAgICAgICAgICAgICAgMSAtPiAwCisKKy0tIGNoZWNrIE1TRCBhbHdheXMgZGV0ZWN0ZWQgbm9uLXplcm8KK2RkY29tcDEwNDAgY29tcGFyZSAwIDAuMDAwMDAwMDAwMDAwMDAwICAtPiAwCitkZGNvbXAxMDQxIGNvbXBhcmUgMCAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RkY29tcDEwNDIgY29tcGFyZSAwIDIuMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZGRjb21wMTA0MyBjb21wYXJlIDAgMy4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkZGNvbXAxMDQ0IGNvbXBhcmUgMCA0LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RkY29tcDEwNDUgY29tcGFyZSAwIDUuMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZGRjb21wMTA0NiBjb21wYXJlIDAgNi4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkZGNvbXAxMDQ3IGNvbXBhcmUgMCA3LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RkY29tcDEwNDggY29tcGFyZSAwIDguMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZGRjb21wMTA0OSBjb21wYXJlIDAgOS4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkZGNvbXAxMDUwIGNvbXBhcmUgMC4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMAorZGRjb21wMTA1MSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RkY29tcDEwNTIgY29tcGFyZSAyLjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkZGNvbXAxMDUzIGNvbXBhcmUgMy4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZGRjb21wMTA1NCBjb21wYXJlIDQuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RkY29tcDEwNTUgY29tcGFyZSA1LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkZGNvbXAxMDU2IGNvbXBhcmUgNi4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZGRjb21wMTA1NyBjb21wYXJlIDcuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RkY29tcDEwNTggY29tcGFyZSA4LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkZGNvbXAxMDU5IGNvbXBhcmUgOS4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorCistLSBOdWxsIHRlc3RzCitkZGNvbTk5OTAgY29tcGFyZSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkY29tOTk5MSBjb21wYXJlICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmVTaWcuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlU2lnLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyZWM0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlU2lnLmRlY1Rlc3QKQEAgLTAsMCArMSw2NDcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRDb21wYXJlU2lnLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGNvbXBhcmlzb247IGFsbCBOYU5zIHNpZ25hbCAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwKKy0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdAorLS0gb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBzbyBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4KKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RkY21zMDAxIGNvbXBhcmVzaWcgIC0yICAtMiAgLT4gMAorZGRjbXMwMDIgY29tcGFyZXNpZyAgLTIgIC0xICAtPiAtMQorZGRjbXMwMDMgY29tcGFyZXNpZyAgLTIgICAwICAtPiAtMQorZGRjbXMwMDQgY29tcGFyZXNpZyAgLTIgICAxICAtPiAtMQorZGRjbXMwMDUgY29tcGFyZXNpZyAgLTIgICAyICAtPiAtMQorZGRjbXMwMDYgY29tcGFyZXNpZyAgLTEgIC0yICAtPiAxCitkZGNtczAwNyBjb21wYXJlc2lnICAtMSAgLTEgIC0+IDAKK2RkY21zMDA4IGNvbXBhcmVzaWcgIC0xICAgMCAgLT4gLTEKK2RkY21zMDA5IGNvbXBhcmVzaWcgIC0xICAgMSAgLT4gLTEKK2RkY21zMDEwIGNvbXBhcmVzaWcgIC0xICAgMiAgLT4gLTEKK2RkY21zMDExIGNvbXBhcmVzaWcgICAwICAtMiAgLT4gMQorZGRjbXMwMTIgY29tcGFyZXNpZyAgIDAgIC0xICAtPiAxCitkZGNtczAxMyBjb21wYXJlc2lnICAgMCAgIDAgIC0+IDAKK2RkY21zMDE0IGNvbXBhcmVzaWcgICAwICAgMSAgLT4gLTEKK2RkY21zMDE1IGNvbXBhcmVzaWcgICAwICAgMiAgLT4gLTEKK2RkY21zMDE2IGNvbXBhcmVzaWcgICAxICAtMiAgLT4gMQorZGRjbXMwMTcgY29tcGFyZXNpZyAgIDEgIC0xICAtPiAxCitkZGNtczAxOCBjb21wYXJlc2lnICAgMSAgIDAgIC0+IDEKK2RkY21zMDE5IGNvbXBhcmVzaWcgICAxICAgMSAgLT4gMAorZGRjbXMwMjAgY29tcGFyZXNpZyAgIDEgICAyICAtPiAtMQorZGRjbXMwMjEgY29tcGFyZXNpZyAgIDIgIC0yICAtPiAxCitkZGNtczAyMiBjb21wYXJlc2lnICAgMiAgLTEgIC0+IDEKK2RkY21zMDIzIGNvbXBhcmVzaWcgICAyICAgMCAgLT4gMQorZGRjbXMwMjUgY29tcGFyZXNpZyAgIDIgICAxICAtPiAxCitkZGNtczAyNiBjb21wYXJlc2lnICAgMiAgIDIgIC0+IDAKKworZGRjbXMwMzEgY29tcGFyZXNpZyAgLTIwICAtMjAgIC0+IDAKK2RkY21zMDMyIGNvbXBhcmVzaWcgIC0yMCAgLTEwICAtPiAtMQorZGRjbXMwMzMgY29tcGFyZXNpZyAgLTIwICAgMDAgIC0+IC0xCitkZGNtczAzNCBjb21wYXJlc2lnICAtMjAgICAxMCAgLT4gLTEKK2RkY21zMDM1IGNvbXBhcmVzaWcgIC0yMCAgIDIwICAtPiAtMQorZGRjbXMwMzYgY29tcGFyZXNpZyAgLTEwICAtMjAgIC0+IDEKK2RkY21zMDM3IGNvbXBhcmVzaWcgIC0xMCAgLTEwICAtPiAwCitkZGNtczAzOCBjb21wYXJlc2lnICAtMTAgICAwMCAgLT4gLTEKK2RkY21zMDM5IGNvbXBhcmVzaWcgIC0xMCAgIDEwICAtPiAtMQorZGRjbXMwNDAgY29tcGFyZXNpZyAgLTEwICAgMjAgIC0+IC0xCitkZGNtczA0MSBjb21wYXJlc2lnICAgMDAgIC0yMCAgLT4gMQorZGRjbXMwNDIgY29tcGFyZXNpZyAgIDAwICAtMTAgIC0+IDEKK2RkY21zMDQzIGNvbXBhcmVzaWcgICAwMCAgIDAwICAtPiAwCitkZGNtczA0NCBjb21wYXJlc2lnICAgMDAgICAxMCAgLT4gLTEKK2RkY21zMDQ1IGNvbXBhcmVzaWcgICAwMCAgIDIwICAtPiAtMQorZGRjbXMwNDYgY29tcGFyZXNpZyAgIDEwICAtMjAgIC0+IDEKK2RkY21zMDQ3IGNvbXBhcmVzaWcgICAxMCAgLTEwICAtPiAxCitkZGNtczA0OCBjb21wYXJlc2lnICAgMTAgICAwMCAgLT4gMQorZGRjbXMwNDkgY29tcGFyZXNpZyAgIDEwICAgMTAgIC0+IDAKK2RkY21zMDUwIGNvbXBhcmVzaWcgICAxMCAgIDIwICAtPiAtMQorZGRjbXMwNTEgY29tcGFyZXNpZyAgIDIwICAtMjAgIC0+IDEKK2RkY21zMDUyIGNvbXBhcmVzaWcgICAyMCAgLTEwICAtPiAxCitkZGNtczA1MyBjb21wYXJlc2lnICAgMjAgICAwMCAgLT4gMQorZGRjbXMwNTUgY29tcGFyZXNpZyAgIDIwICAgMTAgIC0+IDEKK2RkY21zMDU2IGNvbXBhcmVzaWcgICAyMCAgIDIwICAtPiAwCisKK2RkY21zMDYxIGNvbXBhcmVzaWcgIC0yLjAgIC0yLjAgIC0+IDAKK2RkY21zMDYyIGNvbXBhcmVzaWcgIC0yLjAgIC0xLjAgIC0+IC0xCitkZGNtczA2MyBjb21wYXJlc2lnICAtMi4wICAgMC4wICAtPiAtMQorZGRjbXMwNjQgY29tcGFyZXNpZyAgLTIuMCAgIDEuMCAgLT4gLTEKK2RkY21zMDY1IGNvbXBhcmVzaWcgIC0yLjAgICAyLjAgIC0+IC0xCitkZGNtczA2NiBjb21wYXJlc2lnICAtMS4wICAtMi4wICAtPiAxCitkZGNtczA2NyBjb21wYXJlc2lnICAtMS4wICAtMS4wICAtPiAwCitkZGNtczA2OCBjb21wYXJlc2lnICAtMS4wICAgMC4wICAtPiAtMQorZGRjbXMwNjkgY29tcGFyZXNpZyAgLTEuMCAgIDEuMCAgLT4gLTEKK2RkY21zMDcwIGNvbXBhcmVzaWcgIC0xLjAgICAyLjAgIC0+IC0xCitkZGNtczA3MSBjb21wYXJlc2lnICAgMC4wICAtMi4wICAtPiAxCitkZGNtczA3MiBjb21wYXJlc2lnICAgMC4wICAtMS4wICAtPiAxCitkZGNtczA3MyBjb21wYXJlc2lnICAgMC4wICAgMC4wICAtPiAwCitkZGNtczA3NCBjb21wYXJlc2lnICAgMC4wICAgMS4wICAtPiAtMQorZGRjbXMwNzUgY29tcGFyZXNpZyAgIDAuMCAgIDIuMCAgLT4gLTEKK2RkY21zMDc2IGNvbXBhcmVzaWcgICAxLjAgIC0yLjAgIC0+IDEKK2RkY21zMDc3IGNvbXBhcmVzaWcgICAxLjAgIC0xLjAgIC0+IDEKK2RkY21zMDc4IGNvbXBhcmVzaWcgICAxLjAgICAwLjAgIC0+IDEKK2RkY21zMDc5IGNvbXBhcmVzaWcgICAxLjAgICAxLjAgIC0+IDAKK2RkY21zMDgwIGNvbXBhcmVzaWcgICAxLjAgICAyLjAgIC0+IC0xCitkZGNtczA4MSBjb21wYXJlc2lnICAgMi4wICAtMi4wICAtPiAxCitkZGNtczA4MiBjb21wYXJlc2lnICAgMi4wICAtMS4wICAtPiAxCitkZGNtczA4MyBjb21wYXJlc2lnICAgMi4wICAgMC4wICAtPiAxCitkZGNtczA4NSBjb21wYXJlc2lnICAgMi4wICAgMS4wICAtPiAxCitkZGNtczA4NiBjb21wYXJlc2lnICAgMi4wICAgMi4wICAtPiAwCisKKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZAorZGRjbXMwOTAgY29tcGFyZXNpZyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAwCitkZGNtczA5MSBjb21wYXJlc2lnIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC0xCitkZGNtczA5MiBjb21wYXJlc2lnICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDEKK2RkY21zMDkzIGNvbXBhcmVzaWcgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMAorCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMKK2RkY21zMTAwIGNvbXBhcmVzaWcgICA3LjAgICAgNy4wICAgIC0+IDAKK2RkY21zMTAxIGNvbXBhcmVzaWcgICA3LjAgICAgNyAgICAgIC0+IDAKK2RkY21zMTAyIGNvbXBhcmVzaWcgICA3ICAgICAgNy4wICAgIC0+IDAKK2RkY21zMTAzIGNvbXBhcmVzaWcgICA3RSswICAgNy4wICAgIC0+IDAKK2RkY21zMTA0IGNvbXBhcmVzaWcgICA3MEUtMSAgNy4wICAgIC0+IDAKK2RkY21zMTA1IGNvbXBhcmVzaWcgICAwLjdFKzEgNyAgICAgIC0+IDAKK2RkY21zMTA2IGNvbXBhcmVzaWcgICA3MEUtMSAgNyAgICAgIC0+IDAKK2RkY21zMTA3IGNvbXBhcmVzaWcgICA3LjAgICAgN0UrMCAgIC0+IDAKK2RkY21zMTA4IGNvbXBhcmVzaWcgICA3LjAgICAgNzBFLTEgIC0+IDAKK2RkY21zMTA5IGNvbXBhcmVzaWcgICA3ICAgICAgMC43RSsxIC0+IDAKK2RkY21zMTEwIGNvbXBhcmVzaWcgICA3ICAgICAgNzBFLTEgIC0+IDAKKworZGRjbXMxMjAgY29tcGFyZXNpZyAgIDguMCAgICA3LjAgICAgLT4gMQorZGRjbXMxMjEgY29tcGFyZXNpZyAgIDguMCAgICA3ICAgICAgLT4gMQorZGRjbXMxMjIgY29tcGFyZXNpZyAgIDggICAgICA3LjAgICAgLT4gMQorZGRjbXMxMjMgY29tcGFyZXNpZyAgIDhFKzAgICA3LjAgICAgLT4gMQorZGRjbXMxMjQgY29tcGFyZXNpZyAgIDgwRS0xICA3LjAgICAgLT4gMQorZGRjbXMxMjUgY29tcGFyZXNpZyAgIDAuOEUrMSA3ICAgICAgLT4gMQorZGRjbXMxMjYgY29tcGFyZXNpZyAgIDgwRS0xICA3ICAgICAgLT4gMQorZGRjbXMxMjcgY29tcGFyZXNpZyAgIDguMCAgICA3RSswICAgLT4gMQorZGRjbXMxMjggY29tcGFyZXNpZyAgIDguMCAgICA3MEUtMSAgLT4gMQorZGRjbXMxMjkgY29tcGFyZXNpZyAgIDggICAgICAwLjdFKzEgIC0+IDEKK2RkY21zMTMwIGNvbXBhcmVzaWcgICA4ICAgICAgNzBFLTEgIC0+IDEKKworZGRjbXMxNDAgY29tcGFyZXNpZyAgIDguMCAgICA5LjAgICAgLT4gLTEKK2RkY21zMTQxIGNvbXBhcmVzaWcgICA4LjAgICAgOSAgICAgIC0+IC0xCitkZGNtczE0MiBjb21wYXJlc2lnICAgOCAgICAgIDkuMCAgICAtPiAtMQorZGRjbXMxNDMgY29tcGFyZXNpZyAgIDhFKzAgICA5LjAgICAgLT4gLTEKK2RkY21zMTQ0IGNvbXBhcmVzaWcgICA4MEUtMSAgOS4wICAgIC0+IC0xCitkZGNtczE0NSBjb21wYXJlc2lnICAgMC44RSsxIDkgICAgICAtPiAtMQorZGRjbXMxNDYgY29tcGFyZXNpZyAgIDgwRS0xICA5ICAgICAgLT4gLTEKK2RkY21zMTQ3IGNvbXBhcmVzaWcgICA4LjAgICAgOUUrMCAgIC0+IC0xCitkZGNtczE0OCBjb21wYXJlc2lnICAgOC4wICAgIDkwRS0xICAtPiAtMQorZGRjbXMxNDkgY29tcGFyZXNpZyAgIDggICAgICAwLjlFKzEgLT4gLTEKK2RkY21zMTUwIGNvbXBhcmVzaWcgICA4ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4KK2RkY21zMjAwIGNvbXBhcmVzaWcgIC03LjAgICAgNy4wICAgIC0+IC0xCitkZGNtczIwMSBjb21wYXJlc2lnICAtNy4wICAgIDcgICAgICAtPiAtMQorZGRjbXMyMDIgY29tcGFyZXNpZyAgLTcgICAgICA3LjAgICAgLT4gLTEKK2RkY21zMjAzIGNvbXBhcmVzaWcgIC03RSswICAgNy4wICAgIC0+IC0xCitkZGNtczIwNCBjb21wYXJlc2lnICAtNzBFLTEgIDcuMCAgICAtPiAtMQorZGRjbXMyMDUgY29tcGFyZXNpZyAgLTAuN0UrMSA3ICAgICAgLT4gLTEKK2RkY21zMjA2IGNvbXBhcmVzaWcgIC03MEUtMSAgNyAgICAgIC0+IC0xCitkZGNtczIwNyBjb21wYXJlc2lnICAtNy4wICAgIDdFKzAgICAtPiAtMQorZGRjbXMyMDggY29tcGFyZXNpZyAgLTcuMCAgICA3MEUtMSAgLT4gLTEKK2RkY21zMjA5IGNvbXBhcmVzaWcgIC03ICAgICAgMC43RSsxIC0+IC0xCitkZGNtczIxMCBjb21wYXJlc2lnICAtNyAgICAgIDcwRS0xICAtPiAtMQorCitkZGNtczIyMCBjb21wYXJlc2lnICAtOC4wICAgIDcuMCAgICAtPiAtMQorZGRjbXMyMjEgY29tcGFyZXNpZyAgLTguMCAgICA3ICAgICAgLT4gLTEKK2RkY21zMjIyIGNvbXBhcmVzaWcgIC04ICAgICAgNy4wICAgIC0+IC0xCitkZGNtczIyMyBjb21wYXJlc2lnICAtOEUrMCAgIDcuMCAgICAtPiAtMQorZGRjbXMyMjQgY29tcGFyZXNpZyAgLTgwRS0xICA3LjAgICAgLT4gLTEKK2RkY21zMjI1IGNvbXBhcmVzaWcgIC0wLjhFKzEgNyAgICAgIC0+IC0xCitkZGNtczIyNiBjb21wYXJlc2lnICAtODBFLTEgIDcgICAgICAtPiAtMQorZGRjbXMyMjcgY29tcGFyZXNpZyAgLTguMCAgICA3RSswICAgLT4gLTEKK2RkY21zMjI4IGNvbXBhcmVzaWcgIC04LjAgICAgNzBFLTEgIC0+IC0xCitkZGNtczIyOSBjb21wYXJlc2lnICAtOCAgICAgIDAuN0UrMSAtPiAtMQorZGRjbXMyMzAgY29tcGFyZXNpZyAgLTggICAgICA3MEUtMSAgLT4gLTEKKworZGRjbXMyNDAgY29tcGFyZXNpZyAgLTguMCAgICA5LjAgICAgLT4gLTEKK2RkY21zMjQxIGNvbXBhcmVzaWcgIC04LjAgICAgOSAgICAgIC0+IC0xCitkZGNtczI0MiBjb21wYXJlc2lnICAtOCAgICAgIDkuMCAgICAtPiAtMQorZGRjbXMyNDMgY29tcGFyZXNpZyAgLThFKzAgICA5LjAgICAgLT4gLTEKK2RkY21zMjQ0IGNvbXBhcmVzaWcgIC04MEUtMSAgOS4wICAgIC0+IC0xCitkZGNtczI0NSBjb21wYXJlc2lnICAtMC44RSsxIDkgICAgICAtPiAtMQorZGRjbXMyNDYgY29tcGFyZXNpZyAgLTgwRS0xICA5ICAgICAgLT4gLTEKK2RkY21zMjQ3IGNvbXBhcmVzaWcgIC04LjAgICAgOUUrMCAgIC0+IC0xCitkZGNtczI0OCBjb21wYXJlc2lnICAtOC4wICAgIDkwRS0xICAtPiAtMQorZGRjbXMyNDkgY29tcGFyZXNpZyAgLTggICAgICAwLjlFKzEgLT4gLTEKK2RkY21zMjUwIGNvbXBhcmVzaWcgIC04ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4KK2RkY21zMzAwIGNvbXBhcmVzaWcgICA3LjAgICAgLTcuMCAgICAtPiAxCitkZGNtczMwMSBjb21wYXJlc2lnICAgNy4wICAgIC03ICAgICAgLT4gMQorZGRjbXMzMDIgY29tcGFyZXNpZyAgIDcgICAgICAtNy4wICAgIC0+IDEKK2RkY21zMzAzIGNvbXBhcmVzaWcgICA3RSswICAgLTcuMCAgICAtPiAxCitkZGNtczMwNCBjb21wYXJlc2lnICAgNzBFLTEgIC03LjAgICAgLT4gMQorZGRjbXMzMDUgY29tcGFyZXNpZyAgIC43RSsxICAtNyAgICAgIC0+IDEKK2RkY21zMzA2IGNvbXBhcmVzaWcgICA3MEUtMSAgLTcgICAgICAtPiAxCitkZGNtczMwNyBjb21wYXJlc2lnICAgNy4wICAgIC03RSswICAgLT4gMQorZGRjbXMzMDggY29tcGFyZXNpZyAgIDcuMCAgICAtNzBFLTEgIC0+IDEKK2RkY21zMzA5IGNvbXBhcmVzaWcgICA3ICAgICAgLS43RSsxICAtPiAxCitkZGNtczMxMCBjb21wYXJlc2lnICAgNyAgICAgIC03MEUtMSAgLT4gMQorCitkZGNtczMyMCBjb21wYXJlc2lnICAgOC4wICAgIC03LjAgICAgLT4gMQorZGRjbXMzMjEgY29tcGFyZXNpZyAgIDguMCAgICAtNyAgICAgIC0+IDEKK2RkY21zMzIyIGNvbXBhcmVzaWcgICA4ICAgICAgLTcuMCAgICAtPiAxCitkZGNtczMyMyBjb21wYXJlc2lnICAgOEUrMCAgIC03LjAgICAgLT4gMQorZGRjbXMzMjQgY29tcGFyZXNpZyAgIDgwRS0xICAtNy4wICAgIC0+IDEKK2RkY21zMzI1IGNvbXBhcmVzaWcgICAuOEUrMSAgLTcgICAgICAtPiAxCitkZGNtczMyNiBjb21wYXJlc2lnICAgODBFLTEgIC03ICAgICAgLT4gMQorZGRjbXMzMjcgY29tcGFyZXNpZyAgIDguMCAgICAtN0UrMCAgIC0+IDEKK2RkY21zMzI4IGNvbXBhcmVzaWcgICA4LjAgICAgLTcwRS0xICAtPiAxCitkZGNtczMyOSBjb21wYXJlc2lnICAgOCAgICAgIC0uN0UrMSAgLT4gMQorZGRjbXMzMzAgY29tcGFyZXNpZyAgIDggICAgICAtNzBFLTEgIC0+IDEKKworZGRjbXMzNDAgY29tcGFyZXNpZyAgIDguMCAgICAtOS4wICAgIC0+IDEKK2RkY21zMzQxIGNvbXBhcmVzaWcgICA4LjAgICAgLTkgICAgICAtPiAxCitkZGNtczM0MiBjb21wYXJlc2lnICAgOCAgICAgIC05LjAgICAgLT4gMQorZGRjbXMzNDMgY29tcGFyZXNpZyAgIDhFKzAgICAtOS4wICAgIC0+IDEKK2RkY21zMzQ0IGNvbXBhcmVzaWcgICA4MEUtMSAgLTkuMCAgICAtPiAxCitkZGNtczM0NSBjb21wYXJlc2lnICAgLjhFKzEgIC05ICAgICAgLT4gMQorZGRjbXMzNDYgY29tcGFyZXNpZyAgIDgwRS0xICAtOSAgICAgIC0+IDEKK2RkY21zMzQ3IGNvbXBhcmVzaWcgICA4LjAgICAgLTlFKzAgICAtPiAxCitkZGNtczM0OCBjb21wYXJlc2lnICAgOC4wICAgIC05MEUtMSAgLT4gMQorZGRjbXMzNDkgY29tcGFyZXNpZyAgIDggICAgICAtLjlFKzEgIC0+IDEKK2RkY21zMzUwIGNvbXBhcmVzaWcgICA4ICAgICAgLTkwRS0xICAtPiAxCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4KK2RkY21zNDAwIGNvbXBhcmVzaWcgICAtNy4wICAgIC03LjAgICAgLT4gMAorZGRjbXM0MDEgY29tcGFyZXNpZyAgIC03LjAgICAgLTcgICAgICAtPiAwCitkZGNtczQwMiBjb21wYXJlc2lnICAgLTcgICAgICAtNy4wICAgIC0+IDAKK2RkY21zNDAzIGNvbXBhcmVzaWcgICAtN0UrMCAgIC03LjAgICAgLT4gMAorZGRjbXM0MDQgY29tcGFyZXNpZyAgIC03MEUtMSAgLTcuMCAgICAtPiAwCitkZGNtczQwNSBjb21wYXJlc2lnICAgLS43RSsxICAtNyAgICAgIC0+IDAKK2RkY21zNDA2IGNvbXBhcmVzaWcgICAtNzBFLTEgIC03ICAgICAgLT4gMAorZGRjbXM0MDcgY29tcGFyZXNpZyAgIC03LjAgICAgLTdFKzAgICAtPiAwCitkZGNtczQwOCBjb21wYXJlc2lnICAgLTcuMCAgICAtNzBFLTEgIC0+IDAKK2RkY21zNDA5IGNvbXBhcmVzaWcgICAtNyAgICAgIC0uN0UrMSAgLT4gMAorZGRjbXM0MTAgY29tcGFyZXNpZyAgIC03ICAgICAgLTcwRS0xICAtPiAwCisKK2RkY21zNDIwIGNvbXBhcmVzaWcgICAtOC4wICAgIC03LjAgICAgLT4gLTEKK2RkY21zNDIxIGNvbXBhcmVzaWcgICAtOC4wICAgIC03ICAgICAgLT4gLTEKK2RkY21zNDIyIGNvbXBhcmVzaWcgICAtOCAgICAgIC03LjAgICAgLT4gLTEKK2RkY21zNDIzIGNvbXBhcmVzaWcgICAtOEUrMCAgIC03LjAgICAgLT4gLTEKK2RkY21zNDI0IGNvbXBhcmVzaWcgICAtODBFLTEgIC03LjAgICAgLT4gLTEKK2RkY21zNDI1IGNvbXBhcmVzaWcgICAtLjhFKzEgIC03ICAgICAgLT4gLTEKK2RkY21zNDI2IGNvbXBhcmVzaWcgICAtODBFLTEgIC03ICAgICAgLT4gLTEKK2RkY21zNDI3IGNvbXBhcmVzaWcgICAtOC4wICAgIC03RSswICAgLT4gLTEKK2RkY21zNDI4IGNvbXBhcmVzaWcgICAtOC4wICAgIC03MEUtMSAgLT4gLTEKK2RkY21zNDI5IGNvbXBhcmVzaWcgICAtOCAgICAgIC0uN0UrMSAgLT4gLTEKK2RkY21zNDMwIGNvbXBhcmVzaWcgICAtOCAgICAgIC03MEUtMSAgLT4gLTEKKworZGRjbXM0NDAgY29tcGFyZXNpZyAgIC04LjAgICAgLTkuMCAgICAtPiAxCitkZGNtczQ0MSBjb21wYXJlc2lnICAgLTguMCAgICAtOSAgICAgIC0+IDEKK2RkY21zNDQyIGNvbXBhcmVzaWcgICAtOCAgICAgIC05LjAgICAgLT4gMQorZGRjbXM0NDMgY29tcGFyZXNpZyAgIC04RSswICAgLTkuMCAgICAtPiAxCitkZGNtczQ0NCBjb21wYXJlc2lnICAgLTgwRS0xICAtOS4wICAgIC0+IDEKK2RkY21zNDQ1IGNvbXBhcmVzaWcgICAtLjhFKzEgIC05ICAgICAgLT4gMQorZGRjbXM0NDYgY29tcGFyZXNpZyAgIC04MEUtMSAgLTkgICAgICAtPiAxCitkZGNtczQ0NyBjb21wYXJlc2lnICAgLTguMCAgICAtOUUrMCAgIC0+IDEKK2RkY21zNDQ4IGNvbXBhcmVzaWcgICAtOC4wICAgIC05MEUtMSAgLT4gMQorZGRjbXM0NDkgY29tcGFyZXNpZyAgIC04ICAgICAgLS45RSsxICAtPiAxCitkZGNtczQ1MCBjb21wYXJlc2lnICAgLTggICAgICAtOTBFLTEgIC0+IDEKKworCistLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0KK2RkY21zNDczIGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2RkY21zNDc0IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMAorZGRjbXM0NzUgY29tcGFyZXNpZyAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2RkY21zNDc2IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDAKK2RkY21zNDc3IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjbXM0NzggY29tcGFyZXNpZyAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDAKK2RkY21zNDc5IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2RkY21zNDgwIGNvbXBhcmVzaWcgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMAorZGRjbXM0ODEgY29tcGFyZXNpZyAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2RkY21zNDgyIGNvbXBhcmVzaWcgMTIzLjQ1NjBFKzg5IDEyMy40NTZFKzg5IC0+IDAKK2RkY21zNDgzIGNvbXBhcmVzaWcgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgLT4gMAorZGRjbXM0ODcgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDAwMEUrODkgLT4gMAorZGRjbXM0ODggY29tcGFyZXNpZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAtPiAwCitkZGNtczQ4OSBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgLT4gMAorZGRjbXM0OTAgY29tcGFyZXNpZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgLT4gMAorZGRjbXM0OTEgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwRSs4OSAtPiAwCitkZGNtczQ5MiBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgLT4gMAorZGRjbXM0OTMgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMEUrODkgLT4gMAorZGRjbXM0OTQgY29tcGFyZXNpZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAtPiAwCitkZGNtczQ5NSBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgLT4gMAorZGRjbXM0OTYgY29tcGFyZXNpZyAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgLT4gMAorZGRjbXM0OTcgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2RSs4OSAtPiAwCisKKy0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwKK2RkY21zNTAwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTUgICAgLT4gMQorZGRjbXM1MDEgY29tcGFyZXNpZyAgICAxICAgICAxRS0xNCAgICAtPiAxCitkZGNtczUwMiBjb21wYXJlc2lnICAgIDEgICAgIDFFLTEzICAgIC0+IDEKK2RkY21zNTAzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTIgICAgLT4gMQorZGRjbXM1MDQgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMSAgICAtPiAxCitkZGNtczUwNSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTEwICAgIC0+IDEKK2RkY21zNTA2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtOSAgICAgLT4gMQorZGRjbXM1MDcgY29tcGFyZXNpZyAgICAxICAgICAxRS04ICAgICAtPiAxCitkZGNtczUwOCBjb21wYXJlc2lnICAgIDEgICAgIDFFLTcgICAgIC0+IDEKK2RkY21zNTA5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNiAgICAgLT4gMQorZGRjbXM1MTAgY29tcGFyZXNpZyAgICAxICAgICAxRS01ICAgICAtPiAxCitkZGNtczUxMSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTQgICAgIC0+IDEKK2RkY21zNTEyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMyAgICAgLT4gMQorZGRjbXM1MTMgY29tcGFyZXNpZyAgICAxICAgICAxRS0yICAgICAtPiAxCitkZGNtczUxNCBjb21wYXJlc2lnICAgIDEgICAgIDFFLTEgICAgIC0+IDEKK2RkY21zNTE1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMCAgICAgLT4gMAorZGRjbXM1MTYgY29tcGFyZXNpZyAgICAxICAgICAxRSsxICAgICAtPiAtMQorZGRjbXM1MTcgY29tcGFyZXNpZyAgICAxICAgICAxRSsyICAgICAtPiAtMQorZGRjbXM1MTggY29tcGFyZXNpZyAgICAxICAgICAxRSszICAgICAtPiAtMQorZGRjbXM1MTkgY29tcGFyZXNpZyAgICAxICAgICAxRSs0ICAgICAtPiAtMQorZGRjbXM1MjEgY29tcGFyZXNpZyAgICAxICAgICAxRSs1ICAgICAtPiAtMQorZGRjbXM1MjIgY29tcGFyZXNpZyAgICAxICAgICAxRSs2ICAgICAtPiAtMQorZGRjbXM1MjMgY29tcGFyZXNpZyAgICAxICAgICAxRSs3ICAgICAtPiAtMQorZGRjbXM1MjQgY29tcGFyZXNpZyAgICAxICAgICAxRSs4ICAgICAtPiAtMQorZGRjbXM1MjUgY29tcGFyZXNpZyAgICAxICAgICAxRSs5ICAgICAtPiAtMQorZGRjbXM1MjYgY29tcGFyZXNpZyAgICAxICAgICAxRSsxMCAgICAtPiAtMQorZGRjbXM1MjcgY29tcGFyZXNpZyAgICAxICAgICAxRSsxMSAgICAtPiAtMQorZGRjbXM1MjggY29tcGFyZXNpZyAgICAxICAgICAxRSsxMiAgICAtPiAtMQorZGRjbXM1MjkgY29tcGFyZXNpZyAgICAxICAgICAxRSsxMyAgICAtPiAtMQorZGRjbXM1MzAgY29tcGFyZXNpZyAgICAxICAgICAxRSsxNCAgICAtPiAtMQorZGRjbXM1MzEgY29tcGFyZXNpZyAgICAxICAgICAxRSsxNSAgICAtPiAtMQorLS0gTFIgc3dhcAorZGRjbXM1NDAgY29tcGFyZXNpZyAgICAxRS0xNSAgMSAgICAgICAtPiAtMQorZGRjbXM1NDEgY29tcGFyZXNpZyAgICAxRS0xNCAgMSAgICAgICAtPiAtMQorZGRjbXM1NDIgY29tcGFyZXNpZyAgICAxRS0xMyAgMSAgICAgICAtPiAtMQorZGRjbXM1NDMgY29tcGFyZXNpZyAgICAxRS0xMiAgMSAgICAgICAtPiAtMQorZGRjbXM1NDQgY29tcGFyZXNpZyAgICAxRS0xMSAgMSAgICAgICAtPiAtMQorZGRjbXM1NDUgY29tcGFyZXNpZyAgICAxRS0xMCAgMSAgICAgICAtPiAtMQorZGRjbXM1NDYgY29tcGFyZXNpZyAgICAxRS05ICAgMSAgICAgICAtPiAtMQorZGRjbXM1NDcgY29tcGFyZXNpZyAgICAxRS04ICAgMSAgICAgICAtPiAtMQorZGRjbXM1NDggY29tcGFyZXNpZyAgICAxRS03ICAgMSAgICAgICAtPiAtMQorZGRjbXM1NDkgY29tcGFyZXNpZyAgICAxRS02ICAgMSAgICAgICAtPiAtMQorZGRjbXM1NTAgY29tcGFyZXNpZyAgICAxRS01ICAgMSAgICAgICAtPiAtMQorZGRjbXM1NTEgY29tcGFyZXNpZyAgICAxRS00ICAgMSAgICAgICAtPiAtMQorZGRjbXM1NTIgY29tcGFyZXNpZyAgICAxRS0zICAgMSAgICAgICAtPiAtMQorZGRjbXM1NTMgY29tcGFyZXNpZyAgICAxRS0yICAgMSAgICAgICAtPiAtMQorZGRjbXM1NTQgY29tcGFyZXNpZyAgICAxRS0xICAgMSAgICAgICAtPiAtMQorZGRjbXM1NTUgY29tcGFyZXNpZyAgICAxRS0wICAgMSAgICAgICAtPiAgMAorZGRjbXM1NTYgY29tcGFyZXNpZyAgICAxRSsxICAgMSAgICAgICAtPiAgMQorZGRjbXM1NTcgY29tcGFyZXNpZyAgICAxRSsyICAgMSAgICAgICAtPiAgMQorZGRjbXM1NTggY29tcGFyZXNpZyAgICAxRSszICAgMSAgICAgICAtPiAgMQorZGRjbXM1NTkgY29tcGFyZXNpZyAgICAxRSs0ICAgMSAgICAgICAtPiAgMQorZGRjbXM1NjEgY29tcGFyZXNpZyAgICAxRSs1ICAgMSAgICAgICAtPiAgMQorZGRjbXM1NjIgY29tcGFyZXNpZyAgICAxRSs2ICAgMSAgICAgICAtPiAgMQorZGRjbXM1NjMgY29tcGFyZXNpZyAgICAxRSs3ICAgMSAgICAgICAtPiAgMQorZGRjbXM1NjQgY29tcGFyZXNpZyAgICAxRSs4ICAgMSAgICAgICAtPiAgMQorZGRjbXM1NjUgY29tcGFyZXNpZyAgICAxRSs5ICAgMSAgICAgICAtPiAgMQorZGRjbXM1NjYgY29tcGFyZXNpZyAgICAxRSsxMCAgMSAgICAgICAtPiAgMQorZGRjbXM1NjcgY29tcGFyZXNpZyAgICAxRSsxMSAgMSAgICAgICAtPiAgMQorZGRjbXM1NjggY29tcGFyZXNpZyAgICAxRSsxMiAgMSAgICAgICAtPiAgMQorZGRjbXM1NjkgY29tcGFyZXNpZyAgICAxRSsxMyAgMSAgICAgICAtPiAgMQorZGRjbXM1NzAgY29tcGFyZXNpZyAgICAxRSsxNCAgMSAgICAgICAtPiAgMQorZGRjbXM1NzEgY29tcGFyZXNpZyAgICAxRSsxNSAgMSAgICAgICAtPiAgMQorLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5CitkZGNtczU4MCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQorZGRjbXM1ODEgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDEKK2RkY21zNTgyIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxCitkZGNtczU4MyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQorZGRjbXM1ODQgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDEKK2RkY21zNTg1IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxCitkZGNtczU4NiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQorZGRjbXM1ODcgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDEKK2RkY21zNTg4IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxCitkZGNtczU4OSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTEKK2RkY21zNTkwIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQorZGRjbXM1OTEgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xCitkZGNtczU5MiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTEKK2RkY21zNTkzIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQorZGRjbXM1OTQgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xCitkZGNtczU5NSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTEKK2RkY21zNTk2IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQorZGRjbXM1OTcgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xCitkZGNtczU5OCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTEKK2RkY21zNTk5IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQorCistLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcworZGRjbXM2MDAgY29tcGFyZXNpZyAgIDEyICAgICAgICAgICAgMTIuMjM0NSAtPiAtMQorZGRjbXM2MDEgY29tcGFyZXNpZyAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQorZGRjbXM2MDIgY29tcGFyZXNpZyAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQorZGRjbXM2MDMgY29tcGFyZXNpZyAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAtPiAtMQorZGRjbXM2MDQgY29tcGFyZXNpZyAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQorZGRjbXM2MDUgY29tcGFyZXNpZyAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQorZGRjbXM2MDYgY29tcGFyZXNpZyAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAtPiAtMQorZGRjbXM2MDcgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQorZGRjbXM2MDggY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQorZGRjbXM2MDkgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAtPiAtMQorZGRjbXM2MTAgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQorZGRjbXM2MTEgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQorZGRjbXM2MTIgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAtPiAgMQorZGRjbXM2MTMgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQorZGRjbXM2MTQgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQorZGRjbXM2MTUgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAtPiAgMQorZGRjbXM2MTYgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQorZGRjbXM2MTcgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQorZGRjbXM2MTggY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAtPiAgMQorZGRjbXM2MTkgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQorZGRjbXM2MjAgY29tcGFyZXNpZyAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorZGRjbXM2MjEgY29tcGFyZXNpZyAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorZGRjbXM2MjIgY29tcGFyZXNpZyAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQorZGRjbXM2MjMgY29tcGFyZXNpZyAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQorZGRjbXM2MjQgY29tcGFyZXNpZyAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAtPiAgMQorZGRjbXM2MjUgY29tcGFyZXNpZyAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQorZGRjbXM2MjYgY29tcGFyZXNpZyAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQorZGRjbXM2MjcgY29tcGFyZXNpZyAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAtPiAgMQorZGRjbXM2MjggY29tcGFyZXNpZyAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQorZGRjbXM2MjkgY29tcGFyZXNpZyAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQorZGRjbXM2MzAgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyICAgICAgICAgICAtPiAtMQorZGRjbXM2MzEgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQorZGRjbXM2MzIgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQorZGRjbXM2MzMgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAtPiAtMQorZGRjbXM2MzQgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQorZGRjbXM2MzUgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQorZGRjbXM2MzYgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAtPiAtMQorZGRjbXM2MzcgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQorZGRjbXM2MzggY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQorZGRjbXM2MzkgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAtPiAtMQorCistLSBleHRlbmRlZCB6ZXJvcworZGRjbXM2NDAgY29tcGFyZXNpZyAgIDAgICAgIDAgICAtPiAwCitkZGNtczY0MSBjb21wYXJlc2lnICAgMCAgICAtMCAgIC0+IDAKK2RkY21zNjQyIGNvbXBhcmVzaWcgICAwICAgIC0wLjAgLT4gMAorZGRjbXM2NDMgY29tcGFyZXNpZyAgIDAgICAgIDAuMCAtPiAwCitkZGNtczY0NCBjb21wYXJlc2lnICAtMCAgICAgMCAgIC0+IDAKK2RkY21zNjQ1IGNvbXBhcmVzaWcgIC0wICAgIC0wICAgLT4gMAorZGRjbXM2NDYgY29tcGFyZXNpZyAgLTAgICAgLTAuMCAtPiAwCitkZGNtczY0NyBjb21wYXJlc2lnICAtMCAgICAgMC4wIC0+IDAKK2RkY21zNjQ4IGNvbXBhcmVzaWcgICAwLjAgICAwICAgLT4gMAorZGRjbXM2NDkgY29tcGFyZXNpZyAgIDAuMCAgLTAgICAtPiAwCitkZGNtczY1MCBjb21wYXJlc2lnICAgMC4wICAtMC4wIC0+IDAKK2RkY21zNjUxIGNvbXBhcmVzaWcgICAwLjAgICAwLjAgLT4gMAorZGRjbXM2NTIgY29tcGFyZXNpZyAgLTAuMCAgIDAgICAtPiAwCitkZGNtczY1MyBjb21wYXJlc2lnICAtMC4wICAtMCAgIC0+IDAKK2RkY21zNjU0IGNvbXBhcmVzaWcgIC0wLjAgIC0wLjAgLT4gMAorZGRjbXM2NTUgY29tcGFyZXNpZyAgLTAuMCAgIDAuMCAtPiAwCisKK2RkY21zNjU2IGNvbXBhcmVzaWcgIC0wRTEgICAwLjAgLT4gMAorZGRjbXM2NTcgY29tcGFyZXNpZyAgLTBFMiAgIDAuMCAtPiAwCitkZGNtczY1OCBjb21wYXJlc2lnICAgMEUxICAgMC4wIC0+IDAKK2RkY21zNjU5IGNvbXBhcmVzaWcgICAwRTIgICAwLjAgLT4gMAorZGRjbXM2NjAgY29tcGFyZXNpZyAgLTBFMSAgIDAgICAtPiAwCitkZGNtczY2MSBjb21wYXJlc2lnICAtMEUyICAgMCAgIC0+IDAKK2RkY21zNjYyIGNvbXBhcmVzaWcgICAwRTEgICAwICAgLT4gMAorZGRjbXM2NjMgY29tcGFyZXNpZyAgIDBFMiAgIDAgICAtPiAwCitkZGNtczY2NCBjb21wYXJlc2lnICAtMEUxICAtMEUxIC0+IDAKK2RkY21zNjY1IGNvbXBhcmVzaWcgIC0wRTIgIC0wRTEgLT4gMAorZGRjbXM2NjYgY29tcGFyZXNpZyAgIDBFMSAgLTBFMSAtPiAwCitkZGNtczY2NyBjb21wYXJlc2lnICAgMEUyICAtMEUxIC0+IDAKK2RkY21zNjY4IGNvbXBhcmVzaWcgIC0wRTEgIC0wRTIgLT4gMAorZGRjbXM2NjkgY29tcGFyZXNpZyAgLTBFMiAgLTBFMiAtPiAwCitkZGNtczY3MCBjb21wYXJlc2lnICAgMEUxICAtMEUyIC0+IDAKK2RkY21zNjcxIGNvbXBhcmVzaWcgICAwRTIgIC0wRTIgLT4gMAorZGRjbXM2NzIgY29tcGFyZXNpZyAgLTBFMSAgIDBFMSAtPiAwCitkZGNtczY3MyBjb21wYXJlc2lnICAtMEUyICAgMEUxIC0+IDAKK2RkY21zNjc0IGNvbXBhcmVzaWcgICAwRTEgICAwRTEgLT4gMAorZGRjbXM2NzUgY29tcGFyZXNpZyAgIDBFMiAgIDBFMSAtPiAwCitkZGNtczY3NiBjb21wYXJlc2lnICAtMEUxICAgMEUyIC0+IDAKK2RkY21zNjc3IGNvbXBhcmVzaWcgIC0wRTIgICAwRTIgLT4gMAorZGRjbXM2NzggY29tcGFyZXNpZyAgIDBFMSAgIDBFMiAtPiAwCitkZGNtczY3OSBjb21wYXJlc2lnICAgMEUyICAgMEUyIC0+IDAKKworLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQorZGRjbXM2ODAgY29tcGFyZXNpZyAgIDEyICAgIDEyICAgICAgICAgICAtPiAwCitkZGNtczY4MSBjb21wYXJlc2lnICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDAKK2RkY21zNjgyIGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMCAgICAgICAgLT4gMAorZGRjbXM2ODMgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAwCitkZGNtczY4NCBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDAKK2RkY21zNjg1IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMCAgICAgLT4gMAorZGRjbXM2ODYgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAwCitkZGNtczY4NyBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDAKK2RkY21zNjg4IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMDAwMCAgLT4gMAorZGRjbXM2ODkgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAwCitkZGNtczY5MCBjb21wYXJlc2lnICAgMTIgICAgICAgICAgICAgIDEyIC0+IDAKK2RkY21zNjkxIGNvbXBhcmVzaWcgICAxMi4wICAgICAgICAgICAgMTIgLT4gMAorZGRjbXM2OTIgY29tcGFyZXNpZyAgIDEyLjAwICAgICAgICAgICAxMiAtPiAwCitkZGNtczY5MyBjb21wYXJlc2lnICAgMTIuMDAwICAgICAgICAgIDEyIC0+IDAKK2RkY21zNjk0IGNvbXBhcmVzaWcgICAxMi4wMDAwICAgICAgICAgMTIgLT4gMAorZGRjbXM2OTUgY29tcGFyZXNpZyAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAwCitkZGNtczY5NiBjb21wYXJlc2lnICAgMTIuMDAwMDAwICAgICAgIDEyIC0+IDAKK2RkY21zNjk3IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwICAgICAgMTIgLT4gMAorZGRjbXM2OTggY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAwCitkZGNtczY5OSBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAwICAgIDEyIC0+IDAKKworLS0gZmlyc3QsIHNlY29uZCwgJiBsYXN0IGRpZ2l0CitkZGNtczcwMCBjb21wYXJlc2lnICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU1IC0+IDEKK2RkY21zNzAxIGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgLT4gMAorZGRjbXM3MDIgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NyAtPiAtMQorZGRjbXM3MDMgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMDIzNDU2Nzg5MDEyMzQ1NiAtPiAxCitkZGNtczcwNCBjb21wYXJlc2lnICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2IC0+IDAKK2RkY21zNzA1IGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDIyMzQ1Njc4OTAxMjM0NTYgLT4gLTEKK2RkY21zNzA2IGNvbXBhcmVzaWcgICAxMTM0NTY3ODkwMTIzNDU2IDEwMzQ1Njc4OTAxMjM0NTYgLT4gMQorZGRjbXM3MDcgY29tcGFyZXNpZyAgIDExMzQ1Njc4OTAxMjM0NTYgMTEzNDU2Nzg5MDEyMzQ1NiAtPiAwCitkZGNtczcwOCBjb21wYXJlc2lnICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2IC0+IC0xCisKKy0tIG1pc2NlbGxhbmVvdXMKK2RkY21zNzIxIGNvbXBhcmVzaWcgMTIzNDU2NzgwMDAgMSAtPiAxCitkZGNtczcyMiBjb21wYXJlc2lnIDEgMTIzNDU2NzgwMDAgLT4gLTEKK2RkY21zNzIzIGNvbXBhcmVzaWcgMTIzNDU2NzgwMCAgMSAtPiAxCitkZGNtczcyNCBjb21wYXJlc2lnIDEgMTIzNDU2NzgwMCAgLT4gLTEKK2RkY21zNzI1IGNvbXBhcmVzaWcgMTIzNDU2Nzg5MCAgMSAtPiAxCitkZGNtczcyNiBjb21wYXJlc2lnIDEgMTIzNDU2Nzg5MCAgLT4gLTEKK2RkY21zNzI3IGNvbXBhcmVzaWcgMTIzNDU2Nzg5MSAgMSAtPiAxCitkZGNtczcyOCBjb21wYXJlc2lnIDEgMTIzNDU2Nzg5MSAgLT4gLTEKK2RkY21zNzI5IGNvbXBhcmVzaWcgMTIzNDU2Nzg5MDEgMSAtPiAxCitkZGNtczczMCBjb21wYXJlc2lnIDEgMTIzNDU2Nzg5MDEgLT4gLTEKK2RkY21zNzMxIGNvbXBhcmVzaWcgMTIzNDU2Nzg5NiAgMSAtPiAxCitkZGNtczczMiBjb21wYXJlc2lnIDEgMTIzNDU2Nzg5NiAgLT4gLTEKKworLS0gcmVzaWR1ZSBjYXNlcyBhdCBsb3dlciBwcmVjaXNpb24KK2RkY21zNzQwIGNvbXBhcmVzaWcgIDEgIDAuOTk5OTk5OSAgLT4gMQorZGRjbXM3NDEgY29tcGFyZXNpZyAgMSAgMC45OTk5OTkgICAtPiAxCitkZGNtczc0MiBjb21wYXJlc2lnICAxICAwLjk5OTk5ICAgIC0+IDEKK2RkY21zNzQzIGNvbXBhcmVzaWcgIDEgIDEuMDAwMCAgICAgLT4gMAorZGRjbXM3NDQgY29tcGFyZXNpZyAgMSAgMS4wMDAwMSAgICAtPiAtMQorZGRjbXM3NDUgY29tcGFyZXNpZyAgMSAgMS4wMDAwMDEgICAtPiAtMQorZGRjbXM3NDYgY29tcGFyZXNpZyAgMSAgMS4wMDAwMDAxICAtPiAtMQorZGRjbXM3NTAgY29tcGFyZXNpZyAgMC45OTk5OTk5ICAxICAtPiAtMQorZGRjbXM3NTEgY29tcGFyZXNpZyAgMC45OTk5OTkgICAxICAtPiAtMQorZGRjbXM3NTIgY29tcGFyZXNpZyAgMC45OTk5OSAgICAxICAtPiAtMQorZGRjbXM3NTMgY29tcGFyZXNpZyAgMS4wMDAwICAgICAxICAtPiAwCitkZGNtczc1NCBjb21wYXJlc2lnICAxLjAwMDAxICAgIDEgIC0+IDEKK2RkY21zNzU1IGNvbXBhcmVzaWcgIDEuMDAwMDAxICAgMSAgLT4gMQorZGRjbXM3NTYgY29tcGFyZXNpZyAgMS4wMDAwMDAxICAxICAtPiAxCisKKy0tIFNwZWNpYWxzCitkZGNtczc4MCBjb21wYXJlc2lnICBJbmYgIC1JbmYgICAtPiAgMQorZGRjbXM3ODEgY29tcGFyZXNpZyAgSW5mICAtMTAwMCAgLT4gIDEKK2RkY21zNzgyIGNvbXBhcmVzaWcgIEluZiAgLTEgICAgIC0+ICAxCitkZGNtczc4MyBjb21wYXJlc2lnICBJbmYgIC0wICAgICAtPiAgMQorZGRjbXM3ODQgY29tcGFyZXNpZyAgSW5mICAgMCAgICAgLT4gIDEKK2RkY21zNzg1IGNvbXBhcmVzaWcgIEluZiAgIDEgICAgIC0+ICAxCitkZGNtczc4NiBjb21wYXJlc2lnICBJbmYgICAxMDAwICAtPiAgMQorZGRjbXM3ODcgY29tcGFyZXNpZyAgSW5mICAgSW5mICAgLT4gIDAKK2RkY21zNzg4IGNvbXBhcmVzaWcgLTEwMDAgIEluZiAgIC0+IC0xCitkZGNtczc4OSBjb21wYXJlc2lnIC1JbmYgICBJbmYgICAtPiAtMQorZGRjbXM3OTAgY29tcGFyZXNpZyAtMSAgICAgSW5mICAgLT4gLTEKK2RkY21zNzkxIGNvbXBhcmVzaWcgLTAgICAgIEluZiAgIC0+IC0xCitkZGNtczc5MiBjb21wYXJlc2lnICAwICAgICBJbmYgICAtPiAtMQorZGRjbXM3OTMgY29tcGFyZXNpZyAgMSAgICAgSW5mICAgLT4gLTEKK2RkY21zNzk0IGNvbXBhcmVzaWcgIDEwMDAgIEluZiAgIC0+IC0xCitkZGNtczc5NSBjb21wYXJlc2lnICBJbmYgICBJbmYgICAtPiAgMAorCitkZGNtczgwMCBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgMAorZGRjbXM4MDEgY29tcGFyZXNpZyAtSW5mICAtMTAwMCAgLT4gLTEKK2RkY21zODAyIGNvbXBhcmVzaWcgLUluZiAgLTEgICAgIC0+IC0xCitkZGNtczgwMyBjb21wYXJlc2lnIC1JbmYgIC0wICAgICAtPiAtMQorZGRjbXM4MDQgY29tcGFyZXNpZyAtSW5mICAgMCAgICAgLT4gLTEKK2RkY21zODA1IGNvbXBhcmVzaWcgLUluZiAgIDEgICAgIC0+IC0xCitkZGNtczgwNiBjb21wYXJlc2lnIC1JbmYgICAxMDAwICAtPiAtMQorZGRjbXM4MDcgY29tcGFyZXNpZyAtSW5mICAgSW5mICAgLT4gLTEKK2RkY21zODA4IGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAwCitkZGNtczgwOSBjb21wYXJlc2lnIC0xMDAwIC1JbmYgICAtPiAgMQorZGRjbXM4MTAgY29tcGFyZXNpZyAtMSAgICAtSW5mICAgLT4gIDEKK2RkY21zODExIGNvbXBhcmVzaWcgLTAgICAgLUluZiAgIC0+ICAxCitkZGNtczgxMiBjb21wYXJlc2lnICAwICAgIC1JbmYgICAtPiAgMQorZGRjbXM4MTMgY29tcGFyZXNpZyAgMSAgICAtSW5mICAgLT4gIDEKK2RkY21zODE0IGNvbXBhcmVzaWcgIDEwMDAgLUluZiAgIC0+ICAxCitkZGNtczgxNSBjb21wYXJlc2lnICBJbmYgIC1JbmYgICAtPiAgMQorCitkZGNtczgyMSBjb21wYXJlc2lnICBOYU4gLUluZiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MjIgY29tcGFyZXNpZyAgTmFOIC0xMDAwICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODIzIGNvbXBhcmVzaWcgIE5hTiAtMSAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgyNCBjb21wYXJlc2lnICBOYU4gLTAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MjUgY29tcGFyZXNpZyAgTmFOICAwICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODI2IGNvbXBhcmVzaWcgIE5hTiAgMSAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgyNyBjb21wYXJlc2lnICBOYU4gIDEwMDAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MjggY29tcGFyZXNpZyAgTmFOICBJbmYgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODI5IGNvbXBhcmVzaWcgIE5hTiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgzMCBjb21wYXJlc2lnIC1JbmYgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MzEgY29tcGFyZXNpZyAtMTAwMCBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODMyIGNvbXBhcmVzaWcgLTEgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgzMyBjb21wYXJlc2lnIC0wICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MzQgY29tcGFyZXNpZyAgMCAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODM1IGNvbXBhcmVzaWcgIDEgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgzNiBjb21wYXJlc2lnICAxMDAwIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4MzcgY29tcGFyZXNpZyAgSW5mICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODM4IGNvbXBhcmVzaWcgLU5hTiAtTmFOICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczgzOSBjb21wYXJlc2lnICtOYU4gLU5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NDAgY29tcGFyZXNpZyAtTmFOICtOYU4gICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworZGRjbXM4NDEgY29tcGFyZXNpZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODQyIGNvbXBhcmVzaWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg0MyBjb21wYXJlc2lnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NDQgY29tcGFyZXNpZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODQ1IGNvbXBhcmVzaWcgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg0NiBjb21wYXJlc2lnICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NDcgY29tcGFyZXNpZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODQ4IGNvbXBhcmVzaWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg0OSBjb21wYXJlc2lnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NTAgY29tcGFyZXNpZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODUxIGNvbXBhcmVzaWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg1MiBjb21wYXJlc2lnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NTMgY29tcGFyZXNpZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODU0IGNvbXBhcmVzaWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg1NSBjb21wYXJlc2lnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NTYgY29tcGFyZXNpZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODU3IGNvbXBhcmVzaWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg1OCBjb21wYXJlc2lnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NTkgY29tcGFyZXNpZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRjbXM4NjAgY29tcGFyZXNpZyAgTmFOOSAtSW5mICAgLT4gIE5hTjkgICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NjEgY29tcGFyZXNpZyAgTmFOOCAgOTk5ICAgLT4gIE5hTjggICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NjIgY29tcGFyZXNpZyAgTmFONzcgSW5mICAgLT4gIE5hTjc3ICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NjMgY29tcGFyZXNpZyAtTmFONjcgTmFONSAgLT4gLU5hTjY3ICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NjQgY29tcGFyZXNpZyAtSW5mICAtTmFONCAgLT4gLU5hTjQgICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NjUgY29tcGFyZXNpZyAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NjYgY29tcGFyZXNpZyAgSW5mICAgTmFOMiAgLT4gIE5hTjIgICBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NjcgY29tcGFyZXNpZyAtTmFONDEgLU5hTjQyIC0+IC1OYU40MSBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NjggY29tcGFyZXNpZyArTmFONDEgLU5hTjQyIC0+ICBOYU40MSBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NjkgY29tcGFyZXNpZyAtTmFONDEgK05hTjQyIC0+IC1OYU40MSBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NzAgY29tcGFyZXNpZyArTmFONDEgK05hTjQyIC0+ICBOYU40MSBJbnZhbGlkX29wZXJhdGlvbgorCitkZGNtczg3MSBjb21wYXJlc2lnIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODcyIGNvbXBhcmVzaWcgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NzMgY29tcGFyZXNpZyAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg3NCBjb21wYXJlc2lnICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODc1IGNvbXBhcmVzaWcgIE5hTjg1ICBzTmFOODMgIC0+ICBOYU44MyBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NzYgY29tcGFyZXNpZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZGNtczg3NyBjb21wYXJlc2lnICAwODggICAgc05hTjgxICAtPiAgTmFOODEgSW52YWxpZF9vcGVyYXRpb24KK2RkY21zODc4IGNvbXBhcmVzaWcgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRjbXM4NzkgY29tcGFyZXNpZyAgTmFOICAgLXNOYU44OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHdpZGUgcmFuZ2UKK2RkY21zODgwIGNvbXBhcmVzaWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrMzg0IC0+IC0xCitkZGNtczg4MSBjb21wYXJlc2lnIDlFKzM4NCArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQorZGRjbXM4ODIgY29tcGFyZXNpZyArMC4xMDAgOUUtMzgzICAgICAgICAgICAgICAgLT4gIDEKK2RkY21zODgzIGNvbXBhcmVzaWcgOUUtMzgzICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xCitkZGNtczg4NSBjb21wYXJlc2lnIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzM4NCAtPiAtMQorZGRjbXM4ODYgY29tcGFyZXNpZyA5RSszODQgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKK2RkY21zODg3IGNvbXBhcmVzaWcgLTAuMTAwIDlFLTM4MyAgICAgICAgICAgICAgIC0+IC0xCitkZGNtczg4OCBjb21wYXJlc2lnIDlFLTM4MyAtMC4xMDAgICAgICAgICAgICAgICAtPiAgMQorCistLSBzaWducworZGRjbXM5MDEgY29tcGFyZXNpZyAgMWUrNzcgIDFlKzExIC0+ICAxCitkZGNtczkwMiBjb21wYXJlc2lnICAxZSs3NyAtMWUrMTEgLT4gIDEKK2RkY21zOTAzIGNvbXBhcmVzaWcgLTFlKzc3ICAxZSsxMSAtPiAtMQorZGRjbXM5MDQgY29tcGFyZXNpZyAtMWUrNzcgLTFlKzExIC0+IC0xCitkZGNtczkwNSBjb21wYXJlc2lnICAxZS03NyAgMWUtMTEgLT4gLTEKK2RkY21zOTA2IGNvbXBhcmVzaWcgIDFlLTc3IC0xZS0xMSAtPiAgMQorZGRjbXM5MDcgY29tcGFyZXNpZyAtMWUtNzcgIDFlLTExIC0+IC0xCitkZGNtczkwOCBjb21wYXJlc2lnIC0xZS03NyAtMWUtMTEgLT4gIDEKKworLS0gTnVsbCB0ZXN0cworZGRjbXM5OTAgY29tcGFyZXNpZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkY21zOTkxIGNvbXBhcmVzaWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVRvdGFsLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVRvdGFsLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjOTg0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlVG90YWwuZGVjVGVzdApAQCAtMCwwICsxLDcwNiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZENvbXBhcmVUb3RhbC5kZWNUZXN0IC0tIGRlY0RvdWJsZSBjb21wYXJpc29uIHVzaW5nIHRvdGFsIG9yZGVyaW5nLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90CistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgorLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocworLS0gdGhhbiBjb21wYXJlLgorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRjb3QwMDEgY29tcGFyZXRvdGFsICAtMiAgLTIgIC0+IDAKK2RkY290MDAyIGNvbXBhcmV0b3RhbCAgLTIgIC0xICAtPiAtMQorZGRjb3QwMDMgY29tcGFyZXRvdGFsICAtMiAgIDAgIC0+IC0xCitkZGNvdDAwNCBjb21wYXJldG90YWwgIC0yICAgMSAgLT4gLTEKK2RkY290MDA1IGNvbXBhcmV0b3RhbCAgLTIgICAyICAtPiAtMQorZGRjb3QwMDYgY29tcGFyZXRvdGFsICAtMSAgLTIgIC0+IDEKK2RkY290MDA3IGNvbXBhcmV0b3RhbCAgLTEgIC0xICAtPiAwCitkZGNvdDAwOCBjb21wYXJldG90YWwgIC0xICAgMCAgLT4gLTEKK2RkY290MDA5IGNvbXBhcmV0b3RhbCAgLTEgICAxICAtPiAtMQorZGRjb3QwMTAgY29tcGFyZXRvdGFsICAtMSAgIDIgIC0+IC0xCitkZGNvdDAxMSBjb21wYXJldG90YWwgICAwICAtMiAgLT4gMQorZGRjb3QwMTIgY29tcGFyZXRvdGFsICAgMCAgLTEgIC0+IDEKK2RkY290MDEzIGNvbXBhcmV0b3RhbCAgIDAgICAwICAtPiAwCitkZGNvdDAxNCBjb21wYXJldG90YWwgICAwICAgMSAgLT4gLTEKK2RkY290MDE1IGNvbXBhcmV0b3RhbCAgIDAgICAyICAtPiAtMQorZGRjb3QwMTYgY29tcGFyZXRvdGFsICAgMSAgLTIgIC0+IDEKK2RkY290MDE3IGNvbXBhcmV0b3RhbCAgIDEgIC0xICAtPiAxCitkZGNvdDAxOCBjb21wYXJldG90YWwgICAxICAgMCAgLT4gMQorZGRjb3QwMTkgY29tcGFyZXRvdGFsICAgMSAgIDEgIC0+IDAKK2RkY290MDIwIGNvbXBhcmV0b3RhbCAgIDEgICAyICAtPiAtMQorZGRjb3QwMjEgY29tcGFyZXRvdGFsICAgMiAgLTIgIC0+IDEKK2RkY290MDIyIGNvbXBhcmV0b3RhbCAgIDIgIC0xICAtPiAxCitkZGNvdDAyMyBjb21wYXJldG90YWwgICAyICAgMCAgLT4gMQorZGRjb3QwMjUgY29tcGFyZXRvdGFsICAgMiAgIDEgIC0+IDEKK2RkY290MDI2IGNvbXBhcmV0b3RhbCAgIDIgICAyICAtPiAwCisKK2RkY290MDMxIGNvbXBhcmV0b3RhbCAgLTIwICAtMjAgIC0+IDAKK2RkY290MDMyIGNvbXBhcmV0b3RhbCAgLTIwICAtMTAgIC0+IC0xCitkZGNvdDAzMyBjb21wYXJldG90YWwgIC0yMCAgIDAwICAtPiAtMQorZGRjb3QwMzQgY29tcGFyZXRvdGFsICAtMjAgICAxMCAgLT4gLTEKK2RkY290MDM1IGNvbXBhcmV0b3RhbCAgLTIwICAgMjAgIC0+IC0xCitkZGNvdDAzNiBjb21wYXJldG90YWwgIC0xMCAgLTIwICAtPiAxCitkZGNvdDAzNyBjb21wYXJldG90YWwgIC0xMCAgLTEwICAtPiAwCitkZGNvdDAzOCBjb21wYXJldG90YWwgIC0xMCAgIDAwICAtPiAtMQorZGRjb3QwMzkgY29tcGFyZXRvdGFsICAtMTAgICAxMCAgLT4gLTEKK2RkY290MDQwIGNvbXBhcmV0b3RhbCAgLTEwICAgMjAgIC0+IC0xCitkZGNvdDA0MSBjb21wYXJldG90YWwgICAwMCAgLTIwICAtPiAxCitkZGNvdDA0MiBjb21wYXJldG90YWwgICAwMCAgLTEwICAtPiAxCitkZGNvdDA0MyBjb21wYXJldG90YWwgICAwMCAgIDAwICAtPiAwCitkZGNvdDA0NCBjb21wYXJldG90YWwgICAwMCAgIDEwICAtPiAtMQorZGRjb3QwNDUgY29tcGFyZXRvdGFsICAgMDAgICAyMCAgLT4gLTEKK2RkY290MDQ2IGNvbXBhcmV0b3RhbCAgIDEwICAtMjAgIC0+IDEKK2RkY290MDQ3IGNvbXBhcmV0b3RhbCAgIDEwICAtMTAgIC0+IDEKK2RkY290MDQ4IGNvbXBhcmV0b3RhbCAgIDEwICAgMDAgIC0+IDEKK2RkY290MDQ5IGNvbXBhcmV0b3RhbCAgIDEwICAgMTAgIC0+IDAKK2RkY290MDUwIGNvbXBhcmV0b3RhbCAgIDEwICAgMjAgIC0+IC0xCitkZGNvdDA1MSBjb21wYXJldG90YWwgICAyMCAgLTIwICAtPiAxCitkZGNvdDA1MiBjb21wYXJldG90YWwgICAyMCAgLTEwICAtPiAxCitkZGNvdDA1MyBjb21wYXJldG90YWwgICAyMCAgIDAwICAtPiAxCitkZGNvdDA1NSBjb21wYXJldG90YWwgICAyMCAgIDEwICAtPiAxCitkZGNvdDA1NiBjb21wYXJldG90YWwgICAyMCAgIDIwICAtPiAwCisKK2RkY290MDYxIGNvbXBhcmV0b3RhbCAgLTIuMCAgLTIuMCAgLT4gMAorZGRjb3QwNjIgY29tcGFyZXRvdGFsICAtMi4wICAtMS4wICAtPiAtMQorZGRjb3QwNjMgY29tcGFyZXRvdGFsICAtMi4wICAgMC4wICAtPiAtMQorZGRjb3QwNjQgY29tcGFyZXRvdGFsICAtMi4wICAgMS4wICAtPiAtMQorZGRjb3QwNjUgY29tcGFyZXRvdGFsICAtMi4wICAgMi4wICAtPiAtMQorZGRjb3QwNjYgY29tcGFyZXRvdGFsICAtMS4wICAtMi4wICAtPiAxCitkZGNvdDA2NyBjb21wYXJldG90YWwgIC0xLjAgIC0xLjAgIC0+IDAKK2RkY290MDY4IGNvbXBhcmV0b3RhbCAgLTEuMCAgIDAuMCAgLT4gLTEKK2RkY290MDY5IGNvbXBhcmV0b3RhbCAgLTEuMCAgIDEuMCAgLT4gLTEKK2RkY290MDcwIGNvbXBhcmV0b3RhbCAgLTEuMCAgIDIuMCAgLT4gLTEKK2RkY290MDcxIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTIuMCAgLT4gMQorZGRjb3QwNzIgY29tcGFyZXRvdGFsICAgMC4wICAtMS4wICAtPiAxCitkZGNvdDA3MyBjb21wYXJldG90YWwgICAwLjAgICAwLjAgIC0+IDAKK2RkY290MDc0IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDEuMCAgLT4gLTEKK2RkY290MDc1IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDIuMCAgLT4gLTEKK2RkY290MDc2IGNvbXBhcmV0b3RhbCAgIDEuMCAgLTIuMCAgLT4gMQorZGRjb3QwNzcgY29tcGFyZXRvdGFsICAgMS4wICAtMS4wICAtPiAxCitkZGNvdDA3OCBjb21wYXJldG90YWwgICAxLjAgICAwLjAgIC0+IDEKK2RkY290MDc5IGNvbXBhcmV0b3RhbCAgIDEuMCAgIDEuMCAgLT4gMAorZGRjb3QwODAgY29tcGFyZXRvdGFsICAgMS4wICAgMi4wICAtPiAtMQorZGRjb3QwODEgY29tcGFyZXRvdGFsICAgMi4wICAtMi4wICAtPiAxCitkZGNvdDA4MiBjb21wYXJldG90YWwgICAyLjAgIC0xLjAgIC0+IDEKK2RkY290MDgzIGNvbXBhcmV0b3RhbCAgIDIuMCAgIDAuMCAgLT4gMQorZGRjb3QwODUgY29tcGFyZXRvdGFsICAgMi4wICAgMS4wICAtPiAxCitkZGNvdDA4NiBjb21wYXJldG90YWwgICAyLjAgICAyLjAgIC0+IDAKKworLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCitkZGNvdDA5MCBjb21wYXJldG90YWwgIDkuOTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5RSszODQgIC0+IDAKK2RkY290MDkxIGNvbXBhcmV0b3RhbCAtOS45OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTlFKzM4NCAgLT4gLTEKK2RkY290MDkyIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5RSszODQgLT4gMQorZGRjb3QwOTMgY29tcGFyZXRvdGFsIC05Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAtPiAwCisKKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcworLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbAorZGRjb3QxMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIDcuMCAgICAtPiAwCitkZGNvdDEwMSBjb21wYXJldG90YWwgICA3LjAgICAgNyAgICAgIC0+IC0xCitkZGNvdDEwMiBjb21wYXJldG90YWwgICA3ICAgICAgNy4wICAgIC0+IDEKK2RkY290MTAzIGNvbXBhcmV0b3RhbCAgIDdFKzAgICA3LjAgICAgLT4gMQorZGRjb3QxMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcuMCAgICAtPiAwCitkZGNvdDEwNSBjb21wYXJldG90YWwgICAwLjdFKzEgNyAgICAgIC0+IDAKK2RkY290MTA2IGNvbXBhcmV0b3RhbCAgIDcwRS0xICA3ICAgICAgLT4gLTEKK2RkY290MTA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3RSswICAgLT4gLTEKK2RkY290MTA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3MEUtMSAgLT4gMAorZGRjb3QxMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIDAuN0UrMSAtPiAwCitkZGNvdDExMCBjb21wYXJldG90YWwgICA3ICAgICAgNzBFLTEgIC0+IDEKKworZGRjb3QxMjAgY29tcGFyZXRvdGFsICAgOC4wICAgIDcuMCAgICAtPiAxCitkZGNvdDEyMSBjb21wYXJldG90YWwgICA4LjAgICAgNyAgICAgIC0+IDEKK2RkY290MTIyIGNvbXBhcmV0b3RhbCAgIDggICAgICA3LjAgICAgLT4gMQorZGRjb3QxMjMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDcuMCAgICAtPiAxCitkZGNvdDEyNCBjb21wYXJldG90YWwgICA4MEUtMSAgNy4wICAgIC0+IDEKK2RkY290MTI1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA3ICAgICAgLT4gMQorZGRjb3QxMjYgY29tcGFyZXRvdGFsICAgODBFLTEgIDcgICAgICAtPiAxCitkZGNvdDEyNyBjb21wYXJldG90YWwgICA4LjAgICAgN0UrMCAgIC0+IDEKK2RkY290MTI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3MEUtMSAgLT4gMQorZGRjb3QxMjkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuN0UrMSAgLT4gMQorZGRjb3QxMzAgY29tcGFyZXRvdGFsICAgOCAgICAgIDcwRS0xICAtPiAxCisKK2RkY290MTQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICA5LjAgICAgLT4gLTEKK2RkY290MTQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA5ICAgICAgLT4gLTEKK2RkY290MTQyIGNvbXBhcmV0b3RhbCAgIDggICAgICA5LjAgICAgLT4gLTEKK2RkY290MTQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICA5LjAgICAgLT4gLTEKK2RkY290MTQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA5LjAgICAgLT4gLTEKK2RkY290MTQ1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA5ICAgICAgLT4gLTEKK2RkY290MTQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA5ICAgICAgLT4gLTEKK2RkY290MTQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5RSswICAgLT4gLTEKK2RkY290MTQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5MEUtMSAgLT4gLTEKK2RkY290MTQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAwLjlFKzEgLT4gLTEKK2RkY290MTUwIGNvbXBhcmV0b3RhbCAgIDggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorZGRjb3QyMDAgY29tcGFyZXRvdGFsICAtNy4wICAgIDcuMCAgICAtPiAtMQorZGRjb3QyMDEgY29tcGFyZXRvdGFsICAtNy4wICAgIDcgICAgICAtPiAtMQorZGRjb3QyMDIgY29tcGFyZXRvdGFsICAtNyAgICAgIDcuMCAgICAtPiAtMQorZGRjb3QyMDMgY29tcGFyZXRvdGFsICAtN0UrMCAgIDcuMCAgICAtPiAtMQorZGRjb3QyMDQgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcuMCAgICAtPiAtMQorZGRjb3QyMDUgY29tcGFyZXRvdGFsICAtMC43RSsxIDcgICAgICAtPiAtMQorZGRjb3QyMDYgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcgICAgICAtPiAtMQorZGRjb3QyMDcgY29tcGFyZXRvdGFsICAtNy4wICAgIDdFKzAgICAtPiAtMQorZGRjb3QyMDggY29tcGFyZXRvdGFsICAtNy4wICAgIDcwRS0xICAtPiAtMQorZGRjb3QyMDkgY29tcGFyZXRvdGFsICAtNyAgICAgIDAuN0UrMSAtPiAtMQorZGRjb3QyMTAgY29tcGFyZXRvdGFsICAtNyAgICAgIDcwRS0xICAtPiAtMQorCitkZGNvdDIyMCBjb21wYXJldG90YWwgIC04LjAgICAgNy4wICAgIC0+IC0xCitkZGNvdDIyMSBjb21wYXJldG90YWwgIC04LjAgICAgNyAgICAgIC0+IC0xCitkZGNvdDIyMiBjb21wYXJldG90YWwgIC04ICAgICAgNy4wICAgIC0+IC0xCitkZGNvdDIyMyBjb21wYXJldG90YWwgIC04RSswICAgNy4wICAgIC0+IC0xCitkZGNvdDIyNCBjb21wYXJldG90YWwgIC04MEUtMSAgNy4wICAgIC0+IC0xCitkZGNvdDIyNSBjb21wYXJldG90YWwgIC0wLjhFKzEgNyAgICAgIC0+IC0xCitkZGNvdDIyNiBjb21wYXJldG90YWwgIC04MEUtMSAgNyAgICAgIC0+IC0xCitkZGNvdDIyNyBjb21wYXJldG90YWwgIC04LjAgICAgN0UrMCAgIC0+IC0xCitkZGNvdDIyOCBjb21wYXJldG90YWwgIC04LjAgICAgNzBFLTEgIC0+IC0xCitkZGNvdDIyOSBjb21wYXJldG90YWwgIC04ICAgICAgMC43RSsxIC0+IC0xCitkZGNvdDIzMCBjb21wYXJldG90YWwgIC04ICAgICAgNzBFLTEgIC0+IC0xCisKK2RkY290MjQwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5LjAgICAgLT4gLTEKK2RkY290MjQxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5ICAgICAgLT4gLTEKK2RkY290MjQyIGNvbXBhcmV0b3RhbCAgLTggICAgICA5LjAgICAgLT4gLTEKK2RkY290MjQzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA5LjAgICAgLT4gLTEKK2RkY290MjQ0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5LjAgICAgLT4gLTEKK2RkY290MjQ1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA5ICAgICAgLT4gLTEKK2RkY290MjQ2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5ICAgICAgLT4gLTEKK2RkY290MjQ3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5RSswICAgLT4gLTEKK2RkY290MjQ4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5MEUtMSAgLT4gLTEKK2RkY290MjQ5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjlFKzEgLT4gLTEKK2RkY290MjUwIGNvbXBhcmV0b3RhbCAgLTggICAgICA5MEUtMSAgLT4gLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorZGRjb3QzMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIC03LjAgICAgLT4gMQorZGRjb3QzMDEgY29tcGFyZXRvdGFsICAgNy4wICAgIC03ICAgICAgLT4gMQorZGRjb3QzMDIgY29tcGFyZXRvdGFsICAgNyAgICAgIC03LjAgICAgLT4gMQorZGRjb3QzMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIC03LjAgICAgLT4gMQorZGRjb3QzMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIC03LjAgICAgLT4gMQorZGRjb3QzMDUgY29tcGFyZXRvdGFsICAgLjdFKzEgIC03ICAgICAgLT4gMQorZGRjb3QzMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIC03ICAgICAgLT4gMQorZGRjb3QzMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIC03RSswICAgLT4gMQorZGRjb3QzMDggY29tcGFyZXRvdGFsICAgNy4wICAgIC03MEUtMSAgLT4gMQorZGRjb3QzMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIC0uN0UrMSAgLT4gMQorZGRjb3QzMTAgY29tcGFyZXRvdGFsICAgNyAgICAgIC03MEUtMSAgLT4gMQorCitkZGNvdDMyMCBjb21wYXJldG90YWwgICA4LjAgICAgLTcuMCAgICAtPiAxCitkZGNvdDMyMSBjb21wYXJldG90YWwgICA4LjAgICAgLTcgICAgICAtPiAxCitkZGNvdDMyMiBjb21wYXJldG90YWwgICA4ICAgICAgLTcuMCAgICAtPiAxCitkZGNvdDMyMyBjb21wYXJldG90YWwgICA4RSswICAgLTcuMCAgICAtPiAxCitkZGNvdDMyNCBjb21wYXJldG90YWwgICA4MEUtMSAgLTcuMCAgICAtPiAxCitkZGNvdDMyNSBjb21wYXJldG90YWwgICAuOEUrMSAgLTcgICAgICAtPiAxCitkZGNvdDMyNiBjb21wYXJldG90YWwgICA4MEUtMSAgLTcgICAgICAtPiAxCitkZGNvdDMyNyBjb21wYXJldG90YWwgICA4LjAgICAgLTdFKzAgICAtPiAxCitkZGNvdDMyOCBjb21wYXJldG90YWwgICA4LjAgICAgLTcwRS0xICAtPiAxCitkZGNvdDMyOSBjb21wYXJldG90YWwgICA4ICAgICAgLS43RSsxICAtPiAxCitkZGNvdDMzMCBjb21wYXJldG90YWwgICA4ICAgICAgLTcwRS0xICAtPiAxCisKK2RkY290MzQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOS4wICAgIC0+IDEKK2RkY290MzQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOSAgICAgIC0+IDEKK2RkY290MzQyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOS4wICAgIC0+IDEKK2RkY290MzQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtOS4wICAgIC0+IDEKK2RkY290MzQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOS4wICAgIC0+IDEKK2RkY290MzQ1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtOSAgICAgIC0+IDEKK2RkY290MzQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOSAgICAgIC0+IDEKK2RkY290MzQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOUUrMCAgIC0+IDEKK2RkY290MzQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOTBFLTEgIC0+IDEKK2RkY290MzQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjlFKzEgIC0+IDEKK2RkY290MzUwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOTBFLTEgIC0+IDEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorZGRjb3Q0MDAgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNy4wICAgIC0+IDAKK2RkY290NDAxIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcgICAgICAtPiAxCitkZGNvdDQwMiBjb21wYXJldG90YWwgICAtNyAgICAgIC03LjAgICAgLT4gLTEKK2RkY290NDAzIGNvbXBhcmV0b3RhbCAgIC03RSswICAgLTcuMCAgICAtPiAtMQorZGRjb3Q0MDQgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNy4wICAgIC0+IDAKK2RkY290NDA1IGNvbXBhcmV0b3RhbCAgIC0uN0UrMSAgLTcgICAgICAtPiAwCitkZGNvdDQwNiBjb21wYXJldG90YWwgICAtNzBFLTEgIC03ICAgICAgLT4gMQorZGRjb3Q0MDcgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtN0UrMCAgIC0+IDEKK2RkY290NDA4IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcwRS0xICAtPiAwCitkZGNvdDQwOSBjb21wYXJldG90YWwgICAtNyAgICAgIC0uN0UrMSAgLT4gMAorZGRjb3Q0MTAgY29tcGFyZXRvdGFsICAgLTcgICAgICAtNzBFLTEgIC0+IC0xCisKK2RkY290NDIwIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcuMCAgICAtPiAtMQorZGRjb3Q0MjEgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNyAgICAgIC0+IC0xCitkZGNvdDQyMiBjb21wYXJldG90YWwgICAtOCAgICAgIC03LjAgICAgLT4gLTEKK2RkY290NDIzIGNvbXBhcmV0b3RhbCAgIC04RSswICAgLTcuMCAgICAtPiAtMQorZGRjb3Q0MjQgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNy4wICAgIC0+IC0xCitkZGNvdDQyNSBjb21wYXJldG90YWwgICAtLjhFKzEgIC03ICAgICAgLT4gLTEKK2RkY290NDI2IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTcgICAgICAtPiAtMQorZGRjb3Q0MjcgY29tcGFyZXRvdGFsICAgLTguMCAgICAtN0UrMCAgIC0+IC0xCitkZGNvdDQyOCBjb21wYXJldG90YWwgICAtOC4wICAgIC03MEUtMSAgLT4gLTEKK2RkY290NDI5IGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLS43RSsxICAtPiAtMQorZGRjb3Q0MzAgY29tcGFyZXRvdGFsICAgLTggICAgICAtNzBFLTEgIC0+IC0xCisKK2RkY290NDQwIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkuMCAgICAtPiAxCitkZGNvdDQ0MSBjb21wYXJldG90YWwgICAtOC4wICAgIC05ICAgICAgLT4gMQorZGRjb3Q0NDIgY29tcGFyZXRvdGFsICAgLTggICAgICAtOS4wICAgIC0+IDEKK2RkY290NDQzIGNvbXBhcmV0b3RhbCAgIC04RSswICAgLTkuMCAgICAtPiAxCitkZGNvdDQ0NCBjb21wYXJldG90YWwgICAtODBFLTEgIC05LjAgICAgLT4gMQorZGRjb3Q0NDUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtOSAgICAgIC0+IDEKK2RkY290NDQ2IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkgICAgICAtPiAxCitkZGNvdDQ0NyBjb21wYXJldG90YWwgICAtOC4wICAgIC05RSswICAgLT4gMQorZGRjb3Q0NDggY29tcGFyZXRvdGFsICAgLTguMCAgICAtOTBFLTEgIC0+IDEKK2RkY290NDQ5IGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLS45RSsxICAtPiAxCitkZGNvdDQ1MCBjb21wYXJldG90YWwgICAtOCAgICAgIC05MEUtMSAgLT4gMQorCisKKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQorZGRjb3Q0NzMgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZGRjb3Q0NzQgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCitkZGNvdDQ3NSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZGRjb3Q0NzYgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZGRjb3Q0NzcgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCitkZGNvdDQ3OCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZGRjb3Q0NzkgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZGRjb3Q0ODAgY29tcGFyZXRvdGFsIDEyMy40NTYwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCitkZGNvdDQ4MSBjb21wYXJldG90YWwgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZGRjb3Q0ODIgY29tcGFyZXRvdGFsIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZGRjb3Q0ODMgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDAKK2RkY290NDg3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDAwMEUrODkgLT4gMQorZGRjb3Q0ODggY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDEKK2RkY290NDg5IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDBFKzg5IC0+IDEKK2RkY290NDkwIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgLT4gMQorZGRjb3Q0OTEgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5IC0+IDEKK2RkY290NDkyIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDEKK2RkY290NDkzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMEUrODkgLT4gMQorZGRjb3Q0OTQgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDEKK2RkY290NDk1IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDBFKzg5IC0+IDEKK2RkY290NDk2IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgLT4gMQorZGRjb3Q0OTcgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5IC0+IDAKKworLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAorZGRjb3Q0OTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE3ICAgIC0+IDEKK2RkY290NDk5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNiAgICAtPiAxCitkZGNvdDUwMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTUgICAgLT4gMQorZGRjb3Q1MDEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE0ICAgIC0+IDEKK2RkY290NTAyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMyAgICAtPiAxCitkZGNvdDUwMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTIgICAgLT4gMQorZGRjb3Q1MDQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTExICAgIC0+IDEKK2RkY290NTA1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMCAgICAtPiAxCitkZGNvdDUwNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOSAgICAgLT4gMQorZGRjb3Q1MDcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTggICAgIC0+IDEKK2RkY290NTA4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS03ICAgICAtPiAxCitkZGNvdDUwOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNiAgICAgLT4gMQorZGRjb3Q1MTAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTUgICAgIC0+IDEKK2RkY290NTExIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS00ICAgICAtPiAxCitkZGNvdDUxMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMyAgICAgLT4gMQorZGRjb3Q1MTMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTIgICAgIC0+IDEKK2RkY290NTE0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xICAgICAtPiAxCitkZGNvdDUxNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMCAgICAgLT4gMAorZGRjb3Q1MTYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEgICAgIC0+IC0xCitkZGNvdDUxNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMiAgICAgLT4gLTEKK2RkY290NTE4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSszICAgICAtPiAtMQorZGRjb3Q1MTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzQgICAgIC0+IC0xCitkZGNvdDUyMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNSAgICAgLT4gLTEKK2RkY290NTIyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs2ICAgICAtPiAtMQorZGRjb3Q1MjMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzcgICAgIC0+IC0xCitkZGNvdDUyNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrOCAgICAgLT4gLTEKK2RkY290NTI1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs5ICAgICAtPiAtMQorZGRjb3Q1MjYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEwICAgIC0+IC0xCitkZGNvdDUyNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTEgICAgLT4gLTEKK2RkY290NTI4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMiAgICAtPiAtMQorZGRjb3Q1MjkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEzICAgIC0+IC0xCitkZGNvdDUzMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTQgICAgLT4gLTEKK2RkY290NTMxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNSAgICAtPiAtMQorZGRjb3Q1MzIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE2ICAgIC0+IC0xCitkZGNvdDUzMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTcgICAgLT4gLTEKKy0tIExSIHN3YXAKK2RkY290NTM4IGNvbXBhcmV0b3RhbCAgICAxRS0xNyAgMSAgICAgICAtPiAtMQorZGRjb3Q1MzkgY29tcGFyZXRvdGFsICAgIDFFLTE2ICAxICAgICAgIC0+IC0xCitkZGNvdDU0MCBjb21wYXJldG90YWwgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKK2RkY290NTQxIGNvbXBhcmV0b3RhbCAgICAxRS0xNCAgMSAgICAgICAtPiAtMQorZGRjb3Q1NDIgY29tcGFyZXRvdGFsICAgIDFFLTEzICAxICAgICAgIC0+IC0xCitkZGNvdDU0MyBjb21wYXJldG90YWwgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKK2RkY290NTQ0IGNvbXBhcmV0b3RhbCAgICAxRS0xMSAgMSAgICAgICAtPiAtMQorZGRjb3Q1NDUgY29tcGFyZXRvdGFsICAgIDFFLTEwICAxICAgICAgIC0+IC0xCitkZGNvdDU0NiBjb21wYXJldG90YWwgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKK2RkY290NTQ3IGNvbXBhcmV0b3RhbCAgICAxRS04ICAgMSAgICAgICAtPiAtMQorZGRjb3Q1NDggY29tcGFyZXRvdGFsICAgIDFFLTcgICAxICAgICAgIC0+IC0xCitkZGNvdDU0OSBjb21wYXJldG90YWwgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKK2RkY290NTUwIGNvbXBhcmV0b3RhbCAgICAxRS01ICAgMSAgICAgICAtPiAtMQorZGRjb3Q1NTEgY29tcGFyZXRvdGFsICAgIDFFLTQgICAxICAgICAgIC0+IC0xCitkZGNvdDU1MiBjb21wYXJldG90YWwgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKK2RkY290NTUzIGNvbXBhcmV0b3RhbCAgICAxRS0yICAgMSAgICAgICAtPiAtMQorZGRjb3Q1NTQgY29tcGFyZXRvdGFsICAgIDFFLTEgICAxICAgICAgIC0+IC0xCitkZGNvdDU1NSBjb21wYXJldG90YWwgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKK2RkY290NTU2IGNvbXBhcmV0b3RhbCAgICAxRSsxICAgMSAgICAgICAtPiAgMQorZGRjb3Q1NTcgY29tcGFyZXRvdGFsICAgIDFFKzIgICAxICAgICAgIC0+ICAxCitkZGNvdDU1OCBjb21wYXJldG90YWwgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKK2RkY290NTU5IGNvbXBhcmV0b3RhbCAgICAxRSs0ICAgMSAgICAgICAtPiAgMQorZGRjb3Q1NjEgY29tcGFyZXRvdGFsICAgIDFFKzUgICAxICAgICAgIC0+ICAxCitkZGNvdDU2MiBjb21wYXJldG90YWwgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKK2RkY290NTYzIGNvbXBhcmV0b3RhbCAgICAxRSs3ICAgMSAgICAgICAtPiAgMQorZGRjb3Q1NjQgY29tcGFyZXRvdGFsICAgIDFFKzggICAxICAgICAgIC0+ICAxCitkZGNvdDU2NSBjb21wYXJldG90YWwgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKK2RkY290NTY2IGNvbXBhcmV0b3RhbCAgICAxRSsxMCAgMSAgICAgICAtPiAgMQorZGRjb3Q1NjcgY29tcGFyZXRvdGFsICAgIDFFKzExICAxICAgICAgIC0+ICAxCitkZGNvdDU2OCBjb21wYXJldG90YWwgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKK2RkY290NTY5IGNvbXBhcmV0b3RhbCAgICAxRSsxMyAgMSAgICAgICAtPiAgMQorZGRjb3Q1NzAgY29tcGFyZXRvdGFsICAgIDFFKzE0ICAxICAgICAgIC0+ICAxCitkZGNvdDU3MSBjb21wYXJldG90YWwgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKK2RkY290NTcyIGNvbXBhcmV0b3RhbCAgICAxRSsxNiAgMSAgICAgICAtPiAgMQorZGRjb3Q1NzMgY29tcGFyZXRvdGFsICAgIDFFKzE3ICAxICAgICAgIC0+ICAxCistLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKK2RkY290NTc4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE3ICAgIC0+IDEKK2RkY290NTc5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE2ICAgIC0+IDEKK2RkY290NTgwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDEKK2RkY290NTgxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDEKK2RkY290NTgyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDEKK2RkY290NTgzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDEKK2RkY290NTg0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDEKK2RkY290NTg1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDEKK2RkY290NTg2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDEKK2RkY290NTg3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDEKK2RkY290NTg4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDEKK2RkY290NTg5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xCitkZGNvdDU5MCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQorZGRjb3Q1OTEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTEKK2RkY290NTkyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xCitkZGNvdDU5MyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQorZGRjb3Q1OTQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTEKK2RkY290NTk1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xCitkZGNvdDU5NiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQorZGRjb3Q1OTcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTEKK2RkY290NTk4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xCitkZGNvdDU5OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQorCistLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcworZGRjb3Q2MDAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvdDYwMSBjb21wYXJldG90YWwgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY290NjAyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQorZGRjb3Q2MDMgY29tcGFyZXRvdGFsICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvdDYwNCBjb21wYXJldG90YWwgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTEKK2RkY290NjA1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQorZGRjb3Q2MDYgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xCitkZGNvdDYwNyBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTEKK2RkY290NjA4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQorZGRjb3Q2MDkgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xCitkZGNvdDYxMCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDEKK2RkY290NjExIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQorZGRjb3Q2MTIgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxCitkZGNvdDYxMyBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDEKK2RkY290NjE0IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQorZGRjb3Q2MTUgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxCitkZGNvdDYxNiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDEKK2RkY290NjE3IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQorZGRjb3Q2MTggY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxCitkZGNvdDYxOSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDEKK2RkY290NjIwIGNvbXBhcmV0b3RhbCAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorZGRjb3Q2MjEgY29tcGFyZXRvdGFsICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvdDYyMiBjb21wYXJldG90YWwgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY290NjIzIGNvbXBhcmV0b3RhbCAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQorZGRjb3Q2MjQgY29tcGFyZXRvdGFsICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvdDYyNSBjb21wYXJldG90YWwgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDEKK2RkY290NjI2IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQorZGRjb3Q2MjcgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxCitkZGNvdDYyOCBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDEKK2RkY290NjI5IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQorZGRjb3Q2MzAgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xCitkZGNvdDYzMSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTEKK2RkY290NjMyIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQorZGRjb3Q2MzMgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xCitkZGNvdDYzNCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTEKK2RkY290NjM1IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQorZGRjb3Q2MzYgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xCitkZGNvdDYzNyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTEKK2RkY290NjM4IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQorZGRjb3Q2MzkgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xCisKKy0tIGV4dGVuZGVkIHplcm9zCitkZGNvdDY0MCBjb21wYXJldG90YWwgICAwICAgICAwICAgLT4gMAorZGRjb3Q2NDEgY29tcGFyZXRvdGFsICAgMCAgICAtMCAgIC0+IDEKK2RkY290NjQyIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAuMCAtPiAxCitkZGNvdDY0MyBjb21wYXJldG90YWwgICAwICAgICAwLjAgLT4gMQorZGRjb3Q2NDQgY29tcGFyZXRvdGFsICAtMCAgICAgMCAgIC0+IC0xCitkZGNvdDY0NSBjb21wYXJldG90YWwgIC0wICAgIC0wICAgLT4gMAorZGRjb3Q2NDYgY29tcGFyZXRvdGFsICAtMCAgICAtMC4wIC0+IC0xCitkZGNvdDY0NyBjb21wYXJldG90YWwgIC0wICAgICAwLjAgLT4gLTEKK2RkY290NjQ4IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAgICAtPiAtMQorZGRjb3Q2NDkgY29tcGFyZXRvdGFsICAgMC4wICAtMCAgIC0+IDEKK2RkY290NjUwIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTAuMCAtPiAxCitkZGNvdDY1MSBjb21wYXJldG90YWwgICAwLjAgICAwLjAgLT4gMAorZGRjb3Q2NTIgY29tcGFyZXRvdGFsICAtMC4wICAgMCAgIC0+IC0xCitkZGNvdDY1MyBjb21wYXJldG90YWwgIC0wLjAgIC0wICAgLT4gMQorZGRjb3Q2NTQgY29tcGFyZXRvdGFsICAtMC4wICAtMC4wIC0+IDAKK2RkY290NjU1IGNvbXBhcmV0b3RhbCAgLTAuMCAgIDAuMCAtPiAtMQorCitkZGNvdDY1NiBjb21wYXJldG90YWwgIC0wRTEgICAwLjAgLT4gLTEKK2RkY290NjU3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAuMCAtPiAtMQorZGRjb3Q2NTggY29tcGFyZXRvdGFsICAgMEUxICAgMC4wIC0+IDEKK2RkY290NjU5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAuMCAtPiAxCitkZGNvdDY2MCBjb21wYXJldG90YWwgIC0wRTEgICAwICAgLT4gLTEKK2RkY290NjYxIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAgICAtPiAtMQorZGRjb3Q2NjIgY29tcGFyZXRvdGFsICAgMEUxICAgMCAgIC0+IDEKK2RkY290NjYzIGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAgICAtPiAxCitkZGNvdDY2NCBjb21wYXJldG90YWwgIC0wRTEgIC0wRTEgLT4gMAorZGRjb3Q2NjUgY29tcGFyZXRvdGFsICAtMEUyICAtMEUxIC0+IC0xCitkZGNvdDY2NiBjb21wYXJldG90YWwgICAwRTEgIC0wRTEgLT4gMQorZGRjb3Q2NjcgY29tcGFyZXRvdGFsICAgMEUyICAtMEUxIC0+IDEKK2RkY290NjY4IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMiAtPiAxCitkZGNvdDY2OSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTIgLT4gMAorZGRjb3Q2NzAgY29tcGFyZXRvdGFsICAgMEUxICAtMEUyIC0+IDEKK2RkY290NjcxIGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMiAtPiAxCitkZGNvdDY3MiBjb21wYXJldG90YWwgIC0wRTEgICAwRTEgLT4gLTEKK2RkY290NjczIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMSAtPiAtMQorZGRjb3Q2NzQgY29tcGFyZXRvdGFsICAgMEUxICAgMEUxIC0+IDAKK2RkY290Njc1IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMSAtPiAxCitkZGNvdDY3NiBjb21wYXJldG90YWwgIC0wRTEgICAwRTIgLT4gLTEKK2RkY290Njc3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMiAtPiAtMQorZGRjb3Q2NzggY29tcGFyZXRvdGFsICAgMEUxICAgMEUyIC0+IC0xCitkZGNvdDY3OSBjb21wYXJldG90YWwgICAwRTIgICAwRTIgLT4gMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitkZGNvdDY4MCBjb21wYXJldG90YWwgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAorZGRjb3Q2ODEgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDEKK2RkY290NjgyIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwICAgICAgICAtPiAxCitkZGNvdDY4MyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMQorZGRjb3Q2ODQgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDEKK2RkY290Njg1IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAxCitkZGNvdDY4NiBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMQorZGRjb3Q2ODcgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDEKK2RkY290Njg4IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAxCitkZGNvdDY4OSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMQorZGRjb3Q2OTAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAgIDEyIC0+IDAKK2RkY290NjkxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgICAxMiAtPiAtMQorZGRjb3Q2OTIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAgIDEyIC0+IC0xCitkZGNvdDY5MyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgICAgMTIgLT4gLTEKK2RkY290Njk0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAtMQorZGRjb3Q2OTUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IC0xCitkZGNvdDY5NiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gLTEKK2RkY290Njk3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAtMQorZGRjb3Q2OTggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IC0xCitkZGNvdDY5OSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gLTEKKworLS0gb2xkIGxvbmcgb3BlcmFuZCBjaGVja3MKK2RkY290NzAxIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwMCAgMSAtPiAgMQorZGRjb3Q3MDIgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMDAgIC0+IC0xCitkZGNvdDcwMyBjb21wYXJldG90YWwgMTIzNDU2NzgwMCAgIDEgLT4gIDEKK2RkY290NzA0IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAgICAtPiAtMQorZGRjb3Q3MDUgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAgICAxIC0+ICAxCitkZGNvdDcwNiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwICAgLT4gLTEKK2RkY290NzA3IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkxICAgMSAtPiAgMQorZGRjb3Q3MDggY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MSAgIC0+IC0xCitkZGNvdDcwOSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MDEgIDEgLT4gIDEKK2RkY290NzEwIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAxICAtPiAtMQorZGRjb3Q3MTEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTYgICAxIC0+ICAxCitkZGNvdDcxMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODk2ICAgLT4gLTEKK2RkY290NzEzIGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MSAgMSAtPiAtMQorZGRjb3Q3MTQgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTEgIC0+ICAxCitkZGNvdDcxNSBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTAxIDEgLT4gLTEKK2RkY290NzE2IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkwMSAtPiAgMQorZGRjb3Q3MTcgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODk2ICAxIC0+IC0xCitkZGNvdDcxOCBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5NiAgLT4gIDEKKworLS0gb2xkIHJlc2lkdWUgY2FzZXMKK2RkY290NzQwIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTk5ICAtPiAxCitkZGNvdDc0MSBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5ICAgLT4gMQorZGRjb3Q3NDIgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5ICAgIC0+IDEKK2RkY290NzQzIGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwICAgICAtPiAxCitkZGNvdDc0NCBjb21wYXJldG90YWwgIDEgIDEuMDAwMDEgICAgLT4gLTEKK2RkY290NzQ1IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDEgICAtPiAtMQorZGRjb3Q3NDYgY29tcGFyZXRvdGFsICAxICAxLjAwMDAwMDEgIC0+IC0xCitkZGNvdDc1MCBjb21wYXJldG90YWwgIDAuOTk5OTk5OSAgMSAgLT4gLTEKK2RkY290NzUxIGNvbXBhcmV0b3RhbCAgMC45OTk5OTkgICAxICAtPiAtMQorZGRjb3Q3NTIgY29tcGFyZXRvdGFsICAwLjk5OTk5ICAgIDEgIC0+IC0xCitkZGNvdDc1MyBjb21wYXJldG90YWwgIDEuMDAwMCAgICAgMSAgLT4gLTEKK2RkY290NzU0IGNvbXBhcmV0b3RhbCAgMS4wMDAwMSAgICAxICAtPiAxCitkZGNvdDc1NSBjb21wYXJldG90YWwgIDEuMDAwMDAxICAgMSAgLT4gMQorZGRjb3Q3NTYgY29tcGFyZXRvdGFsICAxLjAwMDAwMDEgIDEgIC0+IDEKKworLS0gU3BlY2lhbHMKK2RkY290NzgwIGNvbXBhcmV0b3RhbCAgSW5mICAtSW5mICAgLT4gIDEKK2RkY290NzgxIGNvbXBhcmV0b3RhbCAgSW5mICAtMTAwMCAgLT4gIDEKK2RkY290NzgyIGNvbXBhcmV0b3RhbCAgSW5mICAtMSAgICAgLT4gIDEKK2RkY290NzgzIGNvbXBhcmV0b3RhbCAgSW5mICAtMCAgICAgLT4gIDEKK2RkY290Nzg0IGNvbXBhcmV0b3RhbCAgSW5mICAgMCAgICAgLT4gIDEKK2RkY290Nzg1IGNvbXBhcmV0b3RhbCAgSW5mICAgMSAgICAgLT4gIDEKK2RkY290Nzg2IGNvbXBhcmV0b3RhbCAgSW5mICAgMTAwMCAgLT4gIDEKK2RkY290Nzg3IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDAKK2RkY290Nzg4IGNvbXBhcmV0b3RhbCAtMTAwMCAgSW5mICAgLT4gLTEKK2RkY290Nzg5IGNvbXBhcmV0b3RhbCAtSW5mICAgSW5mICAgLT4gLTEKK2RkY290NzkwIGNvbXBhcmV0b3RhbCAtMSAgICAgSW5mICAgLT4gLTEKK2RkY290NzkxIGNvbXBhcmV0b3RhbCAtMCAgICAgSW5mICAgLT4gLTEKK2RkY290NzkyIGNvbXBhcmV0b3RhbCAgMCAgICAgSW5mICAgLT4gLTEKK2RkY290NzkzIGNvbXBhcmV0b3RhbCAgMSAgICAgSW5mICAgLT4gLTEKK2RkY290Nzk0IGNvbXBhcmV0b3RhbCAgMTAwMCAgSW5mICAgLT4gLTEKK2RkY290Nzk1IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDAKKworZGRjb3Q4MDAgY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMAorZGRjb3Q4MDEgY29tcGFyZXRvdGFsIC1JbmYgIC0xMDAwICAtPiAtMQorZGRjb3Q4MDIgY29tcGFyZXRvdGFsIC1JbmYgIC0xICAgICAtPiAtMQorZGRjb3Q4MDMgY29tcGFyZXRvdGFsIC1JbmYgIC0wICAgICAtPiAtMQorZGRjb3Q4MDQgY29tcGFyZXRvdGFsIC1JbmYgICAwICAgICAtPiAtMQorZGRjb3Q4MDUgY29tcGFyZXRvdGFsIC1JbmYgICAxICAgICAtPiAtMQorZGRjb3Q4MDYgY29tcGFyZXRvdGFsIC1JbmYgICAxMDAwICAtPiAtMQorZGRjb3Q4MDcgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQorZGRjb3Q4MDggY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMAorZGRjb3Q4MDkgY29tcGFyZXRvdGFsIC0xMDAwIC1JbmYgICAtPiAgMQorZGRjb3Q4MTAgY29tcGFyZXRvdGFsIC0xICAgIC1JbmYgICAtPiAgMQorZGRjb3Q4MTEgY29tcGFyZXRvdGFsIC0wICAgIC1JbmYgICAtPiAgMQorZGRjb3Q4MTIgY29tcGFyZXRvdGFsICAwICAgIC1JbmYgICAtPiAgMQorZGRjb3Q4MTMgY29tcGFyZXRvdGFsICAxICAgIC1JbmYgICAtPiAgMQorZGRjb3Q4MTQgY29tcGFyZXRvdGFsICAxMDAwIC1JbmYgICAtPiAgMQorZGRjb3Q4MTUgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQorCitkZGNvdDgyMSBjb21wYXJldG90YWwgIE5hTiAtSW5mICAgIC0+ICAxCitkZGNvdDgyMiBjb21wYXJldG90YWwgIE5hTiAtMTAwMCAgIC0+ICAxCitkZGNvdDgyMyBjb21wYXJldG90YWwgIE5hTiAtMSAgICAgIC0+ICAxCitkZGNvdDgyNCBjb21wYXJldG90YWwgIE5hTiAtMCAgICAgIC0+ICAxCitkZGNvdDgyNSBjb21wYXJldG90YWwgIE5hTiAgMCAgICAgIC0+ICAxCitkZGNvdDgyNiBjb21wYXJldG90YWwgIE5hTiAgMSAgICAgIC0+ICAxCitkZGNvdDgyNyBjb21wYXJldG90YWwgIE5hTiAgMTAwMCAgIC0+ICAxCitkZGNvdDgyOCBjb21wYXJldG90YWwgIE5hTiAgSW5mICAgIC0+ICAxCitkZGNvdDgyOSBjb21wYXJldG90YWwgIE5hTiAgTmFOICAgIC0+ICAwCitkZGNvdDgzMCBjb21wYXJldG90YWwgLUluZiAgTmFOICAgIC0+ICAtMQorZGRjb3Q4MzEgY29tcGFyZXRvdGFsIC0xMDAwIE5hTiAgICAtPiAgLTEKK2RkY290ODMyIGNvbXBhcmV0b3RhbCAtMSAgICBOYU4gICAgLT4gIC0xCitkZGNvdDgzMyBjb21wYXJldG90YWwgLTAgICAgTmFOICAgIC0+ICAtMQorZGRjb3Q4MzQgY29tcGFyZXRvdGFsICAwICAgIE5hTiAgICAtPiAgLTEKK2RkY290ODM1IGNvbXBhcmV0b3RhbCAgMSAgICBOYU4gICAgLT4gIC0xCitkZGNvdDgzNiBjb21wYXJldG90YWwgIDEwMDAgTmFOICAgIC0+ICAtMQorZGRjb3Q4MzcgY29tcGFyZXRvdGFsICBJbmYgIE5hTiAgICAtPiAgLTEKK2RkY290ODM4IGNvbXBhcmV0b3RhbCAtTmFOIC1OYU4gICAgLT4gIDAKK2RkY290ODM5IGNvbXBhcmV0b3RhbCArTmFOIC1OYU4gICAgLT4gIDEKK2RkY290ODQwIGNvbXBhcmV0b3RhbCAtTmFOICtOYU4gICAgLT4gIC0xCisKK2RkY290ODQxIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgLT4gIDEKK2RkY290ODQyIGNvbXBhcmV0b3RhbCAgc05hTiAtTmFOICAgLT4gIDEKK2RkY290ODQzIGNvbXBhcmV0b3RhbCAgc05hTiAtSW5mICAgLT4gIDEKK2RkY290ODQ0IGNvbXBhcmV0b3RhbCAgc05hTiAtMTAwMCAgLT4gIDEKK2RkY290ODQ1IGNvbXBhcmV0b3RhbCAgc05hTiAtMSAgICAgLT4gIDEKK2RkY290ODQ2IGNvbXBhcmV0b3RhbCAgc05hTiAtMCAgICAgLT4gIDEKK2RkY290ODQ3IGNvbXBhcmV0b3RhbCAgc05hTiAgMCAgICAgLT4gIDEKK2RkY290ODQ4IGNvbXBhcmV0b3RhbCAgc05hTiAgMSAgICAgLT4gIDEKK2RkY290ODQ5IGNvbXBhcmV0b3RhbCAgc05hTiAgMTAwMCAgLT4gIDEKK2RkY290ODUwIGNvbXBhcmV0b3RhbCAgc05hTiAgTmFOICAgLT4gIC0xCitkZGNvdDg1MSBjb21wYXJldG90YWwgIHNOYU4gc05hTiAgIC0+ICAwCisKK2RkY290ODUyIGNvbXBhcmV0b3RhbCAtc05hTiBzTmFOICAgLT4gIC0xCitkZGNvdDg1MyBjb21wYXJldG90YWwgLU5hTiAgc05hTiAgIC0+ICAtMQorZGRjb3Q4NTQgY29tcGFyZXRvdGFsIC1JbmYgIHNOYU4gICAtPiAgLTEKK2RkY290ODU1IGNvbXBhcmV0b3RhbCAtMTAwMCBzTmFOICAgLT4gIC0xCitkZGNvdDg1NiBjb21wYXJldG90YWwgLTEgICAgc05hTiAgIC0+ICAtMQorZGRjb3Q4NTcgY29tcGFyZXRvdGFsIC0wICAgIHNOYU4gICAtPiAgLTEKK2RkY290ODU4IGNvbXBhcmV0b3RhbCAgMCAgICBzTmFOICAgLT4gIC0xCitkZGNvdDg1OSBjb21wYXJldG90YWwgIDEgICAgc05hTiAgIC0+ICAtMQorZGRjb3Q4NjAgY29tcGFyZXRvdGFsICAxMDAwIHNOYU4gICAtPiAgLTEKK2RkY290ODYxIGNvbXBhcmV0b3RhbCAgSW5mICBzTmFOICAgLT4gIC0xCitkZGNvdDg2MiBjb21wYXJldG90YWwgIE5hTiAgc05hTiAgIC0+ICAxCitkZGNvdDg2MyBjb21wYXJldG90YWwgIHNOYU4gc05hTiAgIC0+ICAwCisKK2RkY290ODcxIGNvbXBhcmV0b3RhbCAgLXNOYU4gLXNOYU4gIC0+ICAwCitkZGNvdDg3MiBjb21wYXJldG90YWwgIC1zTmFOIC1OYU4gICAtPiAgMQorZGRjb3Q4NzMgY29tcGFyZXRvdGFsICAtc05hTiAtSW5mICAgLT4gIC0xCitkZGNvdDg3NCBjb21wYXJldG90YWwgIC1zTmFOIC0xMDAwICAtPiAgLTEKK2RkY290ODc1IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEgICAgIC0+ICAtMQorZGRjb3Q4NzYgY29tcGFyZXRvdGFsICAtc05hTiAtMCAgICAgLT4gIC0xCitkZGNvdDg3NyBjb21wYXJldG90YWwgIC1zTmFOICAwICAgICAtPiAgLTEKK2RkY290ODc4IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEgICAgIC0+ICAtMQorZGRjb3Q4NzkgY29tcGFyZXRvdGFsICAtc05hTiAgMTAwMCAgLT4gIC0xCitkZGNvdDg4MCBjb21wYXJldG90YWwgIC1zTmFOICBOYU4gICAtPiAgLTEKK2RkY290ODgxIGNvbXBhcmV0b3RhbCAgLXNOYU4gc05hTiAgIC0+ICAtMQorCitkZGNvdDg4MiBjb21wYXJldG90YWwgLXNOYU4gLXNOYU4gICAtPiAgMAorZGRjb3Q4ODMgY29tcGFyZXRvdGFsIC1OYU4gIC1zTmFOICAgLT4gIC0xCitkZGNvdDg4NCBjb21wYXJldG90YWwgLUluZiAgLXNOYU4gICAtPiAgMQorZGRjb3Q4ODUgY29tcGFyZXRvdGFsIC0xMDAwIC1zTmFOICAgLT4gIDEKK2RkY290ODg2IGNvbXBhcmV0b3RhbCAtMSAgICAtc05hTiAgIC0+ICAxCitkZGNvdDg4NyBjb21wYXJldG90YWwgLTAgICAgLXNOYU4gICAtPiAgMQorZGRjb3Q4ODggY29tcGFyZXRvdGFsICAwICAgIC1zTmFOICAgLT4gIDEKK2RkY290ODg5IGNvbXBhcmV0b3RhbCAgMSAgICAtc05hTiAgIC0+ICAxCitkZGNvdDg5MCBjb21wYXJldG90YWwgIDEwMDAgLXNOYU4gICAtPiAgMQorZGRjb3Q4OTEgY29tcGFyZXRvdGFsICBJbmYgIC1zTmFOICAgLT4gIDEKK2RkY290ODkyIGNvbXBhcmV0b3RhbCAgTmFOICAtc05hTiAgIC0+ICAxCitkZGNvdDg5MyBjb21wYXJldG90YWwgIHNOYU4gLXNOYU4gICAtPiAgMQorCistLSBOYU5zIHdpdGggcGF5bG9hZAorZGRjb3Q5NjAgY29tcGFyZXRvdGFsICBOYU45IC1JbmYgICAtPiAgMQorZGRjb3Q5NjEgY29tcGFyZXRvdGFsICBOYU44ICA5OTkgICAtPiAgMQorZGRjb3Q5NjIgY29tcGFyZXRvdGFsICBOYU43NyBJbmYgICAtPiAgMQorZGRjb3Q5NjMgY29tcGFyZXRvdGFsIC1OYU42NyBOYU41ICAtPiAgLTEKK2RkY290OTY0IGNvbXBhcmV0b3RhbCAtSW5mICAtTmFONCAgLT4gIDEKK2RkY290OTY1IGNvbXBhcmV0b3RhbCAtOTk5ICAtTmFOMzMgLT4gIDEKK2RkY290OTY2IGNvbXBhcmV0b3RhbCAgSW5mICAgTmFOMiAgLT4gIC0xCisKK2RkY290OTcwIGNvbXBhcmV0b3RhbCAtTmFONDEgLU5hTjQyIC0+IDEKK2RkY290OTcxIGNvbXBhcmV0b3RhbCArTmFONDEgLU5hTjQyIC0+IDEKK2RkY290OTcyIGNvbXBhcmV0b3RhbCAtTmFONDEgK05hTjQyIC0+IC0xCitkZGNvdDk3MyBjb21wYXJldG90YWwgK05hTjQxICtOYU40MiAtPiAtMQorZGRjb3Q5NzQgY29tcGFyZXRvdGFsIC1OYU40MiAtTmFOMDEgLT4gLTEKK2RkY290OTc1IGNvbXBhcmV0b3RhbCArTmFONDIgLU5hTjAxIC0+ICAxCitkZGNvdDk3NiBjb21wYXJldG90YWwgLU5hTjQyICtOYU4wMSAtPiAtMQorZGRjb3Q5NzcgY29tcGFyZXRvdGFsICtOYU40MiArTmFOMDEgLT4gIDEKKworZGRjb3Q5ODAgY29tcGFyZXRvdGFsIC1zTmFONzcxIC1zTmFONzcyIC0+IDEKK2RkY290OTgxIGNvbXBhcmV0b3RhbCArc05hTjc3MSAtc05hTjc3MiAtPiAxCitkZGNvdDk4MiBjb21wYXJldG90YWwgLXNOYU43NzEgK3NOYU43NzIgLT4gLTEKK2RkY290OTgzIGNvbXBhcmV0b3RhbCArc05hTjc3MSArc05hTjc3MiAtPiAtMQorZGRjb3Q5ODQgY29tcGFyZXRvdGFsIC1zTmFONzcyIC1zTmFONzcxIC0+IC0xCitkZGNvdDk4NSBjb21wYXJldG90YWwgK3NOYU43NzIgLXNOYU43NzEgLT4gIDEKK2RkY290OTg2IGNvbXBhcmV0b3RhbCAtc05hTjc3MiArc05hTjc3MSAtPiAtMQorZGRjb3Q5ODcgY29tcGFyZXRvdGFsICtzTmFONzcyICtzTmFONzcxIC0+ICAxCisKK2RkY290OTkxIGNvbXBhcmV0b3RhbCAtc05hTjk5IC1JbmYgICAgLT4gLTEKK2RkY290OTkyIGNvbXBhcmV0b3RhbCAgc05hTjk4IC0xMSAgICAgLT4gIDEKK2RkY290OTkzIGNvbXBhcmV0b3RhbCAgc05hTjk3ICBOYU4gICAgLT4gLTEKK2RkY290OTk0IGNvbXBhcmV0b3RhbCAgc05hTjE2IHNOYU45NCAgLT4gLTEKK2RkY290OTk1IGNvbXBhcmV0b3RhbCAgTmFOODUgIHNOYU44MyAgLT4gIDEKK2RkY290OTk2IGNvbXBhcmV0b3RhbCAtSW5mICAgIHNOYU45MiAgLT4gLTEKK2RkY290OTk3IGNvbXBhcmV0b3RhbCAgMDg4ICAgIHNOYU44MSAgLT4gLTEKK2RkY290OTk4IGNvbXBhcmV0b3RhbCAgSW5mICAgIHNOYU45MCAgLT4gLTEKK2RkY290OTk5IGNvbXBhcmV0b3RhbCAgTmFOICAgLXNOYU44OSAgLT4gIDEKKworLS0gc3ByZWFkIHplcm9zCitkZGNvdDExMTAgY29tcGFyZXRvdGFsICAgMEUtMzgzICAwICAgICAgIC0+IC0xCitkZGNvdDExMTEgY29tcGFyZXRvdGFsICAgMEUtMzgzIC0wICAgICAgIC0+ICAxCitkZGNvdDExMTIgY29tcGFyZXRvdGFsICAtMEUtMzgzICAwICAgICAgIC0+IC0xCitkZGNvdDExMTMgY29tcGFyZXRvdGFsICAtMEUtMzgzIC0wICAgICAgIC0+ICAxCitkZGNvdDExMTQgY29tcGFyZXRvdGFsICAgMEUtMzgzICAwRSszODQgIC0+IC0xCitkZGNvdDExMTUgY29tcGFyZXRvdGFsICAgMEUtMzgzIC0wRSszODQgIC0+ICAxCitkZGNvdDExMTYgY29tcGFyZXRvdGFsICAtMEUtMzgzICAwRSszODQgIC0+IC0xCitkZGNvdDExMTcgY29tcGFyZXRvdGFsICAtMEUtMzgzIC0wRSszODQgIC0+ICAxCitkZGNvdDExMTggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRSszODQgIC0+IC0xCitkZGNvdDExMTkgY29tcGFyZXRvdGFsICAgMCAgICAgIC0wRSszODQgIC0+ICAxCitkZGNvdDExMjAgY29tcGFyZXRvdGFsICAtMCAgICAgICAwRSszODQgIC0+IC0xCitkZGNvdDExMjEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRSszODQgIC0+ICAxCisKK2RkY290MTEzMCBjb21wYXJldG90YWwgICAwRSszODQgIDAgICAgICAgLT4gIDEKK2RkY290MTEzMSBjb21wYXJldG90YWwgICAwRSszODQgLTAgICAgICAgLT4gIDEKK2RkY290MTEzMiBjb21wYXJldG90YWwgIC0wRSszODQgIDAgICAgICAgLT4gLTEKK2RkY290MTEzMyBjb21wYXJldG90YWwgIC0wRSszODQgLTAgICAgICAgLT4gLTEKK2RkY290MTEzNCBjb21wYXJldG90YWwgICAwRSszODQgIDBFLTM4MyAgLT4gIDEKK2RkY290MTEzNSBjb21wYXJldG90YWwgICAwRSszODQgLTBFLTM4MyAgLT4gIDEKK2RkY290MTEzNiBjb21wYXJldG90YWwgIC0wRSszODQgIDBFLTM4MyAgLT4gLTEKK2RkY290MTEzNyBjb21wYXJldG90YWwgIC0wRSszODQgLTBFLTM4MyAgLT4gLTEKK2RkY290MTEzOCBjb21wYXJldG90YWwgICAwICAgICAgIDBFLTM4MyAgLT4gIDEKK2RkY290MTEzOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFLTM4MyAgLT4gIDEKK2RkY290MTE0MCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFLTM4MyAgLT4gLTEKK2RkY290MTE0MSBjb21wYXJldG90YWwgIC0wICAgICAgLTBFLTM4MyAgLT4gLTEKKworLS0gTnVsbCB0ZXN0cworZGRjb3Q5OTkwIGNvbXBhcmV0b3RhbCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkY290OTk5MSBjb21wYXJldG90YWwgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg3YTA5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlVG90YWxNYWcuZGVjVGVzdApAQCAtMCwwICsxLDcwNiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZENvbXBhcmVUb3RhbE1hZy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBjb21wYXJpc29uOyBhYnMuIHRvdGFsIG9yZGVyLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90CistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgorLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocworLS0gdGhhbiBjb21wYXJlLgorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZGRjdG0wMDEgY29tcGFyZXRvdG1hZyAgLTIgIC0yICAgLT4gICAwCitkZGN0bTAwMiBjb21wYXJldG90bWFnICAtMiAgLTEgICAtPiAgIDEKK2RkY3RtMDAzIGNvbXBhcmV0b3RtYWcgIC0yICAgMCAgIC0+ICAgMQorZGRjdG0wMDQgY29tcGFyZXRvdG1hZyAgLTIgICAxICAgLT4gICAxCitkZGN0bTAwNSBjb21wYXJldG90bWFnICAtMiAgIDIgICAtPiAgIDAKK2RkY3RtMDA2IGNvbXBhcmV0b3RtYWcgIC0xICAtMiAgIC0+ICAtMQorZGRjdG0wMDcgY29tcGFyZXRvdG1hZyAgLTEgIC0xICAgLT4gICAwCitkZGN0bTAwOCBjb21wYXJldG90bWFnICAtMSAgIDAgICAtPiAgIDEKK2RkY3RtMDA5IGNvbXBhcmV0b3RtYWcgIC0xICAgMSAgIC0+ICAgMAorZGRjdG0wMTAgY29tcGFyZXRvdG1hZyAgLTEgICAyICAgLT4gIC0xCitkZGN0bTAxMSBjb21wYXJldG90bWFnICAgMCAgLTIgICAtPiAgLTEKK2RkY3RtMDEyIGNvbXBhcmV0b3RtYWcgICAwICAtMSAgIC0+ICAtMQorZGRjdG0wMTMgY29tcGFyZXRvdG1hZyAgIDAgICAwICAgLT4gICAwCitkZGN0bTAxNCBjb21wYXJldG90bWFnICAgMCAgIDEgICAtPiAgLTEKK2RkY3RtMDE1IGNvbXBhcmV0b3RtYWcgICAwICAgMiAgIC0+ICAtMQorZGRjdG0wMTYgY29tcGFyZXRvdG1hZyAgIDEgIC0yICAgLT4gIC0xCitkZGN0bTAxNyBjb21wYXJldG90bWFnICAgMSAgLTEgICAtPiAgIDAKK2RkY3RtMDE4IGNvbXBhcmV0b3RtYWcgICAxICAgMCAgIC0+ICAgMQorZGRjdG0wMTkgY29tcGFyZXRvdG1hZyAgIDEgICAxICAgLT4gICAwCitkZGN0bTAyMCBjb21wYXJldG90bWFnICAgMSAgIDIgICAtPiAgLTEKK2RkY3RtMDIxIGNvbXBhcmV0b3RtYWcgICAyICAtMiAgIC0+ICAgMAorZGRjdG0wMjIgY29tcGFyZXRvdG1hZyAgIDIgIC0xICAgLT4gICAxCitkZGN0bTAyMyBjb21wYXJldG90bWFnICAgMiAgIDAgICAtPiAgIDEKK2RkY3RtMDI1IGNvbXBhcmV0b3RtYWcgICAyICAgMSAgIC0+ICAgMQorZGRjdG0wMjYgY29tcGFyZXRvdG1hZyAgIDIgICAyICAgLT4gICAwCisKK2RkY3RtMDMxIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTIwICAgLT4gICAwCitkZGN0bTAzMiBjb21wYXJldG90bWFnICAtMjAgIC0xMCAgIC0+ICAgMQorZGRjdG0wMzMgY29tcGFyZXRvdG1hZyAgLTIwICAgMDAgICAtPiAgIDEKK2RkY3RtMDM0IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDEwICAgLT4gICAxCitkZGN0bTAzNSBjb21wYXJldG90bWFnICAtMjAgICAyMCAgIC0+ICAgMAorZGRjdG0wMzYgY29tcGFyZXRvdG1hZyAgLTEwICAtMjAgICAtPiAgLTEKK2RkY3RtMDM3IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTEwICAgLT4gICAwCitkZGN0bTAzOCBjb21wYXJldG90bWFnICAtMTAgICAwMCAgIC0+ICAgMQorZGRjdG0wMzkgY29tcGFyZXRvdG1hZyAgLTEwICAgMTAgICAtPiAgIDAKK2RkY3RtMDQwIGNvbXBhcmV0b3RtYWcgIC0xMCAgIDIwICAgLT4gIC0xCitkZGN0bTA0MSBjb21wYXJldG90bWFnICAgMDAgIC0yMCAgIC0+ICAtMQorZGRjdG0wNDIgY29tcGFyZXRvdG1hZyAgIDAwICAtMTAgICAtPiAgLTEKK2RkY3RtMDQzIGNvbXBhcmV0b3RtYWcgICAwMCAgIDAwICAgLT4gICAwCitkZGN0bTA0NCBjb21wYXJldG90bWFnICAgMDAgICAxMCAgIC0+ICAtMQorZGRjdG0wNDUgY29tcGFyZXRvdG1hZyAgIDAwICAgMjAgICAtPiAgLTEKK2RkY3RtMDQ2IGNvbXBhcmV0b3RtYWcgICAxMCAgLTIwICAgLT4gIC0xCitkZGN0bTA0NyBjb21wYXJldG90bWFnICAgMTAgIC0xMCAgIC0+ICAgMAorZGRjdG0wNDggY29tcGFyZXRvdG1hZyAgIDEwICAgMDAgICAtPiAgIDEKK2RkY3RtMDQ5IGNvbXBhcmV0b3RtYWcgICAxMCAgIDEwICAgLT4gICAwCitkZGN0bTA1MCBjb21wYXJldG90bWFnICAgMTAgICAyMCAgIC0+ICAtMQorZGRjdG0wNTEgY29tcGFyZXRvdG1hZyAgIDIwICAtMjAgICAtPiAgIDAKK2RkY3RtMDUyIGNvbXBhcmV0b3RtYWcgICAyMCAgLTEwICAgLT4gICAxCitkZGN0bTA1MyBjb21wYXJldG90bWFnICAgMjAgICAwMCAgIC0+ICAgMQorZGRjdG0wNTUgY29tcGFyZXRvdG1hZyAgIDIwICAgMTAgICAtPiAgIDEKK2RkY3RtMDU2IGNvbXBhcmV0b3RtYWcgICAyMCAgIDIwICAgLT4gICAwCisKK2RkY3RtMDYxIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0yLjAgICAtPiAgIDAKK2RkY3RtMDYyIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0xLjAgICAtPiAgIDEKK2RkY3RtMDYzIGNvbXBhcmV0b3RtYWcgIC0yLjAgICAwLjAgICAtPiAgIDEKK2RkY3RtMDY0IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAxLjAgICAtPiAgIDEKK2RkY3RtMDY1IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAyLjAgICAtPiAgIDAKK2RkY3RtMDY2IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0yLjAgICAtPiAgLTEKK2RkY3RtMDY3IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0xLjAgICAtPiAgIDAKK2RkY3RtMDY4IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAwLjAgICAtPiAgIDEKK2RkY3RtMDY5IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAxLjAgICAtPiAgIDAKK2RkY3RtMDcwIGNvbXBhcmV0b3RtYWcgIC0xLjAgICAyLjAgICAtPiAgLTEKK2RkY3RtMDcxIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0yLjAgICAtPiAgLTEKK2RkY3RtMDcyIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0xLjAgICAtPiAgLTEKK2RkY3RtMDczIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgICAtPiAgIDAKK2RkY3RtMDc0IGNvbXBhcmV0b3RtYWcgICAwLjAgICAxLjAgICAtPiAgLTEKK2RkY3RtMDc1IGNvbXBhcmV0b3RtYWcgICAwLjAgICAyLjAgICAtPiAgLTEKK2RkY3RtMDc2IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0yLjAgICAtPiAgLTEKK2RkY3RtMDc3IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0xLjAgICAtPiAgIDAKK2RkY3RtMDc4IGNvbXBhcmV0b3RtYWcgICAxLjAgICAwLjAgICAtPiAgIDEKK2RkY3RtMDc5IGNvbXBhcmV0b3RtYWcgICAxLjAgICAxLjAgICAtPiAgIDAKK2RkY3RtMDgwIGNvbXBhcmV0b3RtYWcgICAxLjAgICAyLjAgICAtPiAgLTEKK2RkY3RtMDgxIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0yLjAgICAtPiAgIDAKK2RkY3RtMDgyIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0xLjAgICAtPiAgIDEKK2RkY3RtMDgzIGNvbXBhcmV0b3RtYWcgICAyLjAgICAwLjAgICAtPiAgIDEKK2RkY3RtMDg1IGNvbXBhcmV0b3RtYWcgICAyLjAgICAxLjAgICAtPiAgIDEKK2RkY3RtMDg2IGNvbXBhcmV0b3RtYWcgICAyLjAgICAyLjAgICAtPiAgIDAKKworLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCitkZGN0bTA5MCBjb21wYXJldG90bWFnICA5Ljk5OTk5OTk5RSszODQgOS45OTk5OTk5OUUrMzg0ICAgLT4gICAwCitkZGN0bTA5MSBjb21wYXJldG90bWFnIC05Ljk5OTk5OTk5RSszODQgOS45OTk5OTk5OUUrMzg0ICAgLT4gICAwCitkZGN0bTA5MiBjb21wYXJldG90bWFnICA5Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAgLT4gICAwCitkZGN0bTA5MyBjb21wYXJldG90bWFnIC05Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAgLT4gICAwCisKKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcworLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbAorZGRjdG0xMDAgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3LjAgICAgIC0+ICAgMAorZGRjdG0xMDEgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3ICAgICAgIC0+ICAtMQorZGRjdG0xMDIgY29tcGFyZXRvdG1hZyAgIDcgICAgICA3LjAgICAgIC0+ICAgMQorZGRjdG0xMDMgY29tcGFyZXRvdG1hZyAgIDdFKzAgICA3LjAgICAgIC0+ICAgMQorZGRjdG0xMDQgY29tcGFyZXRvdG1hZyAgIDcwRS0xICA3LjAgICAgIC0+ICAgMAorZGRjdG0xMDUgY29tcGFyZXRvdG1hZyAgIDAuN0UrMSA3ICAgICAgIC0+ICAgMAorZGRjdG0xMDYgY29tcGFyZXRvdG1hZyAgIDcwRS0xICA3ICAgICAgIC0+ICAtMQorZGRjdG0xMDcgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3RSswICAgIC0+ICAtMQorZGRjdG0xMDggY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3MEUtMSAgIC0+ICAgMAorZGRjdG0xMDkgY29tcGFyZXRvdG1hZyAgIDcgICAgICAwLjdFKzEgIC0+ICAgMAorZGRjdG0xMTAgY29tcGFyZXRvdG1hZyAgIDcgICAgICA3MEUtMSAgIC0+ICAgMQorCitkZGN0bTEyMCBjb21wYXJldG90bWFnICAgOC4wICAgIDcuMCAgICAgLT4gICAxCitkZGN0bTEyMSBjb21wYXJldG90bWFnICAgOC4wICAgIDcgICAgICAgLT4gICAxCitkZGN0bTEyMiBjb21wYXJldG90bWFnICAgOCAgICAgIDcuMCAgICAgLT4gICAxCitkZGN0bTEyMyBjb21wYXJldG90bWFnICAgOEUrMCAgIDcuMCAgICAgLT4gICAxCitkZGN0bTEyNCBjb21wYXJldG90bWFnICAgODBFLTEgIDcuMCAgICAgLT4gICAxCitkZGN0bTEyNSBjb21wYXJldG90bWFnICAgMC44RSsxIDcgICAgICAgLT4gICAxCitkZGN0bTEyNiBjb21wYXJldG90bWFnICAgODBFLTEgIDcgICAgICAgLT4gICAxCitkZGN0bTEyNyBjb21wYXJldG90bWFnICAgOC4wICAgIDdFKzAgICAgLT4gICAxCitkZGN0bTEyOCBjb21wYXJldG90bWFnICAgOC4wICAgIDcwRS0xICAgLT4gICAxCitkZGN0bTEyOSBjb21wYXJldG90bWFnICAgOCAgICAgIDAuN0UrMSAgIC0+ICAgMQorZGRjdG0xMzAgY29tcGFyZXRvdG1hZyAgIDggICAgICA3MEUtMSAgIC0+ICAgMQorCitkZGN0bTE0MCBjb21wYXJldG90bWFnICAgOC4wICAgIDkuMCAgICAgLT4gIC0xCitkZGN0bTE0MSBjb21wYXJldG90bWFnICAgOC4wICAgIDkgICAgICAgLT4gIC0xCitkZGN0bTE0MiBjb21wYXJldG90bWFnICAgOCAgICAgIDkuMCAgICAgLT4gIC0xCitkZGN0bTE0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIDkuMCAgICAgLT4gIC0xCitkZGN0bTE0NCBjb21wYXJldG90bWFnICAgODBFLTEgIDkuMCAgICAgLT4gIC0xCitkZGN0bTE0NSBjb21wYXJldG90bWFnICAgMC44RSsxIDkgICAgICAgLT4gIC0xCitkZGN0bTE0NiBjb21wYXJldG90bWFnICAgODBFLTEgIDkgICAgICAgLT4gIC0xCitkZGN0bTE0NyBjb21wYXJldG90bWFnICAgOC4wICAgIDlFKzAgICAgLT4gIC0xCitkZGN0bTE0OCBjb21wYXJldG90bWFnICAgOC4wICAgIDkwRS0xICAgLT4gIC0xCitkZGN0bTE0OSBjb21wYXJldG90bWFnICAgOCAgICAgIDAuOUUrMSAgLT4gIC0xCitkZGN0bTE1MCBjb21wYXJldG90bWFnICAgOCAgICAgIDkwRS0xICAgLT4gIC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4KK2RkY3RtMjAwIGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNy4wICAgICAtPiAgIDAKK2RkY3RtMjAxIGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNyAgICAgICAtPiAgLTEKK2RkY3RtMjAyIGNvbXBhcmV0b3RtYWcgIC03ICAgICAgNy4wICAgICAtPiAgIDEKK2RkY3RtMjAzIGNvbXBhcmV0b3RtYWcgIC03RSswICAgNy4wICAgICAtPiAgIDEKK2RkY3RtMjA0IGNvbXBhcmV0b3RtYWcgIC03MEUtMSAgNy4wICAgICAtPiAgIDAKK2RkY3RtMjA1IGNvbXBhcmV0b3RtYWcgIC0wLjdFKzEgNyAgICAgICAtPiAgIDAKK2RkY3RtMjA2IGNvbXBhcmV0b3RtYWcgIC03MEUtMSAgNyAgICAgICAtPiAgLTEKK2RkY3RtMjA3IGNvbXBhcmV0b3RtYWcgIC03LjAgICAgN0UrMCAgICAtPiAgLTEKK2RkY3RtMjA4IGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNzBFLTEgICAtPiAgIDAKK2RkY3RtMjA5IGNvbXBhcmV0b3RtYWcgIC03ICAgICAgMC43RSsxICAtPiAgIDAKK2RkY3RtMjEwIGNvbXBhcmV0b3RtYWcgIC03ICAgICAgNzBFLTEgICAtPiAgIDEKKworZGRjdG0yMjAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3LjAgICAgIC0+ICAgMQorZGRjdG0yMjEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3ICAgICAgIC0+ICAgMQorZGRjdG0yMjIgY29tcGFyZXRvdG1hZyAgLTggICAgICA3LjAgICAgIC0+ICAgMQorZGRjdG0yMjMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA3LjAgICAgIC0+ICAgMQorZGRjdG0yMjQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3LjAgICAgIC0+ICAgMQorZGRjdG0yMjUgY29tcGFyZXRvdG1hZyAgLTAuOEUrMSA3ICAgICAgIC0+ICAgMQorZGRjdG0yMjYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3ICAgICAgIC0+ICAgMQorZGRjdG0yMjcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3RSswICAgIC0+ICAgMQorZGRjdG0yMjggY29tcGFyZXRvdG1hZyAgLTguMCAgICA3MEUtMSAgIC0+ICAgMQorZGRjdG0yMjkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjdFKzEgIC0+ICAgMQorZGRjdG0yMzAgY29tcGFyZXRvdG1hZyAgLTggICAgICA3MEUtMSAgIC0+ICAgMQorCitkZGN0bTI0MCBjb21wYXJldG90bWFnICAtOC4wICAgIDkuMCAgICAgLT4gIC0xCitkZGN0bTI0MSBjb21wYXJldG90bWFnICAtOC4wICAgIDkgICAgICAgLT4gIC0xCitkZGN0bTI0MiBjb21wYXJldG90bWFnICAtOCAgICAgIDkuMCAgICAgLT4gIC0xCitkZGN0bTI0MyBjb21wYXJldG90bWFnICAtOEUrMCAgIDkuMCAgICAgLT4gIC0xCitkZGN0bTI0NCBjb21wYXJldG90bWFnICAtODBFLTEgIDkuMCAgICAgLT4gIC0xCitkZGN0bTI0NSBjb21wYXJldG90bWFnICAtMC44RSsxIDkgICAgICAgLT4gIC0xCitkZGN0bTI0NiBjb21wYXJldG90bWFnICAtODBFLTEgIDkgICAgICAgLT4gIC0xCitkZGN0bTI0NyBjb21wYXJldG90bWFnICAtOC4wICAgIDlFKzAgICAgLT4gIC0xCitkZGN0bTI0OCBjb21wYXJldG90bWFnICAtOC4wICAgIDkwRS0xICAgLT4gIC0xCitkZGN0bTI0OSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuOUUrMSAgLT4gIC0xCitkZGN0bTI1MCBjb21wYXJldG90bWFnICAtOCAgICAgIDkwRS0xICAgLT4gIC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4KK2RkY3RtMzAwIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcuMCAgICAgLT4gICAwCitkZGN0bTMwMSBjb21wYXJldG90bWFnICAgNy4wICAgIC03ICAgICAgIC0+ICAtMQorZGRjdG0zMDIgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNy4wICAgICAtPiAgIDEKK2RkY3RtMzAzIGNvbXBhcmV0b3RtYWcgICA3RSswICAgLTcuMCAgICAgLT4gICAxCitkZGN0bTMwNCBjb21wYXJldG90bWFnICAgNzBFLTEgIC03LjAgICAgIC0+ICAgMAorZGRjdG0zMDUgY29tcGFyZXRvdG1hZyAgIC43RSsxICAtNyAgICAgICAtPiAgIDAKK2RkY3RtMzA2IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcgICAgICAgLT4gIC0xCitkZGN0bTMwNyBjb21wYXJldG90bWFnICAgNy4wICAgIC03RSswICAgIC0+ICAtMQorZGRjdG0zMDggY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNzBFLTEgICAtPiAgIDAKK2RkY3RtMzA5IGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLS43RSsxICAgLT4gICAwCitkZGN0bTMxMCBjb21wYXJldG90bWFnICAgNyAgICAgIC03MEUtMSAgIC0+ICAgMQorCitkZGN0bTMyMCBjb21wYXJldG90bWFnICAgOC4wICAgIC03LjAgICAgIC0+ICAgMQorZGRjdG0zMjEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNyAgICAgICAtPiAgIDEKK2RkY3RtMzIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcuMCAgICAgLT4gICAxCitkZGN0bTMyMyBjb21wYXJldG90bWFnICAgOEUrMCAgIC03LjAgICAgIC0+ICAgMQorZGRjdG0zMjQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtNy4wICAgICAtPiAgIDEKK2RkY3RtMzI1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTcgICAgICAgLT4gICAxCitkZGN0bTMyNiBjb21wYXJldG90bWFnICAgODBFLTEgIC03ICAgICAgIC0+ICAgMQorZGRjdG0zMjcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtN0UrMCAgICAtPiAgIDEKK2RkY3RtMzI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcwRS0xICAgLT4gICAxCitkZGN0bTMyOSBjb21wYXJldG90bWFnICAgOCAgICAgIC0uN0UrMSAgIC0+ICAgMQorZGRjdG0zMzAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtNzBFLTEgICAtPiAgIDEKKworZGRjdG0zNDAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOS4wICAgICAtPiAgLTEKK2RkY3RtMzQxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkgICAgICAgLT4gIC0xCitkZGN0bTM0MiBjb21wYXJldG90bWFnICAgOCAgICAgIC05LjAgICAgIC0+ICAtMQorZGRjdG0zNDMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtOS4wICAgICAtPiAgLTEKK2RkY3RtMzQ0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTkuMCAgICAgLT4gIC0xCitkZGN0bTM0NSBjb21wYXJldG90bWFnICAgLjhFKzEgIC05ICAgICAgIC0+ICAtMQorZGRjdG0zNDYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOSAgICAgICAtPiAgLTEKK2RkY3RtMzQ3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTlFKzAgICAgLT4gIC0xCitkZGN0bTM0OCBjb21wYXJldG90bWFnICAgOC4wICAgIC05MEUtMSAgIC0+ICAtMQorZGRjdG0zNDkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjlFKzEgICAtPiAgLTEKK2RkY3RtMzUwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkwRS0xICAgLT4gIC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4KK2RkY3RtNDAwIGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03LjAgICAgIC0+ICAgMAorZGRjdG00MDEgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcgICAgICAgLT4gIC0xCitkZGN0bTQwMiBjb21wYXJldG90bWFnICAgLTcgICAgICAtNy4wICAgICAtPiAgIDEKK2RkY3RtNDAzIGNvbXBhcmV0b3RtYWcgICAtN0UrMCAgIC03LjAgICAgIC0+ICAgMQorZGRjdG00MDQgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcuMCAgICAgLT4gICAwCitkZGN0bTQwNSBjb21wYXJldG90bWFnICAgLS43RSsxICAtNyAgICAgICAtPiAgIDAKK2RkY3RtNDA2IGNvbXBhcmV0b3RtYWcgICAtNzBFLTEgIC03ICAgICAgIC0+ICAtMQorZGRjdG00MDcgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTdFKzAgICAgLT4gIC0xCitkZGN0bTQwOCBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNzBFLTEgICAtPiAgIDAKK2RkY3RtNDA5IGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC0uN0UrMSAgIC0+ICAgMAorZGRjdG00MTAgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcwRS0xICAgLT4gICAxCisKK2RkY3RtNDIwIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03LjAgICAgIC0+ICAgMQorZGRjdG00MjEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcgICAgICAgLT4gICAxCitkZGN0bTQyMiBjb21wYXJldG90bWFnICAgLTggICAgICAtNy4wICAgICAtPiAgIDEKK2RkY3RtNDIzIGNvbXBhcmV0b3RtYWcgICAtOEUrMCAgIC03LjAgICAgIC0+ICAgMQorZGRjdG00MjQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcuMCAgICAgLT4gICAxCitkZGN0bTQyNSBjb21wYXJldG90bWFnICAgLS44RSsxICAtNyAgICAgICAtPiAgIDEKK2RkY3RtNDI2IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC03ICAgICAgIC0+ICAgMQorZGRjdG00MjcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTdFKzAgICAgLT4gICAxCitkZGN0bTQyOCBjb21wYXJldG90bWFnICAgLTguMCAgICAtNzBFLTEgICAtPiAgIDEKK2RkY3RtNDI5IGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC0uN0UrMSAgIC0+ICAgMQorZGRjdG00MzAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcwRS0xICAgLT4gICAxCisKK2RkY3RtNDQwIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05LjAgICAgIC0+ICAtMQorZGRjdG00NDEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkgICAgICAgLT4gIC0xCitkZGN0bTQ0MiBjb21wYXJldG90bWFnICAgLTggICAgICAtOS4wICAgICAtPiAgLTEKK2RkY3RtNDQzIGNvbXBhcmV0b3RtYWcgICAtOEUrMCAgIC05LjAgICAgIC0+ICAtMQorZGRjdG00NDQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkuMCAgICAgLT4gIC0xCitkZGN0bTQ0NSBjb21wYXJldG90bWFnICAgLS44RSsxICAtOSAgICAgICAtPiAgLTEKK2RkY3RtNDQ2IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC05ICAgICAgIC0+ICAtMQorZGRjdG00NDcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTlFKzAgICAgLT4gIC0xCitkZGN0bTQ0OCBjb21wYXJldG90bWFnICAgLTguMCAgICAtOTBFLTEgICAtPiAgLTEKK2RkY3RtNDQ5IGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC0uOUUrMSAgIC0+ICAtMQorZGRjdG00NTAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkwRS0xICAgLT4gIC0xCisKKworLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCitkZGN0bTQ3MyBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCitkZGN0bTQ3NCBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKK2RkY3RtNDc1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCitkZGN0bTQ3NiBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xCitkZGN0bTQ3NyBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RkY3RtNDc4IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xCitkZGN0bTQ3OSBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCitkZGN0bTQ4MCBjb21wYXJldG90bWFnIDEyMy40NTYwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKK2RkY3RtNDgxIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCitkZGN0bTQ4MiBjb21wYXJldG90bWFnIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xCitkZGN0bTQ4MyBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5ICAtPiAgIDAKK2RkY3RtNDg3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5ICAtPiAgIDEKK2RkY3RtNDg4IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgIC0+ICAgMQorZGRjdG00ODkgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDBFKzg5ICAtPiAgIDEKK2RkY3RtNDkwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5ICAtPiAgIDEKK2RkY3RtNDkxIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMEUrODkgIC0+ICAgMQorZGRjdG00OTIgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5ICAtPiAgIDEKK2RkY3RtNDkzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5ICAtPiAgIDEKK2RkY3RtNDk0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgIC0+ICAgMQorZGRjdG00OTUgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDBFKzg5ICAtPiAgIDEKK2RkY3RtNDk2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5ICAtPiAgIDEKK2RkY3RtNDk3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NkUrODkgIC0+ICAgMAorCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCitkZGN0bTQ5OCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE3ICAgICAtPiAgIDEKK2RkY3RtNDk5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTYgICAgIC0+ICAgMQorZGRjdG01MDAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNSAgICAgLT4gICAxCitkZGN0bTUwMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE0ICAgICAtPiAgIDEKK2RkY3RtNTAyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTMgICAgIC0+ICAgMQorZGRjdG01MDMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMiAgICAgLT4gICAxCitkZGN0bTUwNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTExICAgICAtPiAgIDEKK2RkY3RtNTA1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTAgICAgIC0+ICAgMQorZGRjdG01MDYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS05ICAgICAgLT4gICAxCitkZGN0bTUwNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTggICAgICAtPiAgIDEKK2RkY3RtNTA4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNyAgICAgIC0+ICAgMQorZGRjdG01MDkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS02ICAgICAgLT4gICAxCitkZGN0bTUxMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTUgICAgICAtPiAgIDEKK2RkY3RtNTExIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNCAgICAgIC0+ICAgMQorZGRjdG01MTIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0zICAgICAgLT4gICAxCitkZGN0bTUxMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTIgICAgICAtPiAgIDEKK2RkY3RtNTE0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMSAgICAgIC0+ICAgMQorZGRjdG01MTUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0wICAgICAgLT4gICAwCitkZGN0bTUxNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEgICAgICAtPiAgLTEKK2RkY3RtNTE3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMiAgICAgIC0+ICAtMQorZGRjdG01MTggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSszICAgICAgLT4gIC0xCitkZGN0bTUxOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzQgICAgICAtPiAgLTEKK2RkY3RtNTIxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNSAgICAgIC0+ICAtMQorZGRjdG01MjIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs2ICAgICAgLT4gIC0xCitkZGN0bTUyMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzcgICAgICAtPiAgLTEKK2RkY3RtNTI0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrOCAgICAgIC0+ICAtMQorZGRjdG01MjUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs5ICAgICAgLT4gIC0xCitkZGN0bTUyNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEwICAgICAtPiAgLTEKK2RkY3RtNTI3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTEgICAgIC0+ICAtMQorZGRjdG01MjggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMiAgICAgLT4gIC0xCitkZGN0bTUyOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEzICAgICAtPiAgLTEKK2RkY3RtNTMwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTQgICAgIC0+ICAtMQorZGRjdG01MzEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNSAgICAgLT4gIC0xCitkZGN0bTUzMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE2ICAgICAtPiAgLTEKK2RkY3RtNTMzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTcgICAgIC0+ICAtMQorLS0gTFIgc3dhcAorZGRjdG01MzggY29tcGFyZXRvdG1hZyAgICAxRS0xNyAgMSAgICAgICAgLT4gIC0xCitkZGN0bTUzOSBjb21wYXJldG90bWFnICAgIDFFLTE2ICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTQwIGNvbXBhcmV0b3RtYWcgICAgMUUtMTUgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NDEgY29tcGFyZXRvdG1hZyAgICAxRS0xNCAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU0MiBjb21wYXJldG90bWFnICAgIDFFLTEzICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTQzIGNvbXBhcmV0b3RtYWcgICAgMUUtMTIgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NDQgY29tcGFyZXRvdG1hZyAgICAxRS0xMSAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU0NSBjb21wYXJldG90bWFnICAgIDFFLTEwICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTQ2IGNvbXBhcmV0b3RtYWcgICAgMUUtOSAgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NDcgY29tcGFyZXRvdG1hZyAgICAxRS04ICAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU0OCBjb21wYXJldG90bWFnICAgIDFFLTcgICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTQ5IGNvbXBhcmV0b3RtYWcgICAgMUUtNiAgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NTAgY29tcGFyZXRvdG1hZyAgICAxRS01ICAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU1MSBjb21wYXJldG90bWFnICAgIDFFLTQgICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTUyIGNvbXBhcmV0b3RtYWcgICAgMUUtMyAgIDEgICAgICAgIC0+ICAtMQorZGRjdG01NTMgY29tcGFyZXRvdG1hZyAgICAxRS0yICAgMSAgICAgICAgLT4gIC0xCitkZGN0bTU1NCBjb21wYXJldG90bWFnICAgIDFFLTEgICAxICAgICAgICAtPiAgLTEKK2RkY3RtNTU1IGNvbXBhcmV0b3RtYWcgICAgMUUtMCAgIDEgICAgICAgIC0+ICAgMAorZGRjdG01NTYgY29tcGFyZXRvdG1hZyAgICAxRSsxICAgMSAgICAgICAgLT4gICAxCitkZGN0bTU1NyBjb21wYXJldG90bWFnICAgIDFFKzIgICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTU4IGNvbXBhcmV0b3RtYWcgICAgMUUrMyAgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NTkgY29tcGFyZXRvdG1hZyAgICAxRSs0ICAgMSAgICAgICAgLT4gICAxCitkZGN0bTU2MSBjb21wYXJldG90bWFnICAgIDFFKzUgICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTYyIGNvbXBhcmV0b3RtYWcgICAgMUUrNiAgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NjMgY29tcGFyZXRvdG1hZyAgICAxRSs3ICAgMSAgICAgICAgLT4gICAxCitkZGN0bTU2NCBjb21wYXJldG90bWFnICAgIDFFKzggICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTY1IGNvbXBhcmV0b3RtYWcgICAgMUUrOSAgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NjYgY29tcGFyZXRvdG1hZyAgICAxRSsxMCAgMSAgICAgICAgLT4gICAxCitkZGN0bTU2NyBjb21wYXJldG90bWFnICAgIDFFKzExICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTY4IGNvbXBhcmV0b3RtYWcgICAgMUUrMTIgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NjkgY29tcGFyZXRvdG1hZyAgICAxRSsxMyAgMSAgICAgICAgLT4gICAxCitkZGN0bTU3MCBjb21wYXJldG90bWFnICAgIDFFKzE0ICAxICAgICAgICAtPiAgIDEKK2RkY3RtNTcxIGNvbXBhcmV0b3RtYWcgICAgMUUrMTUgIDEgICAgICAgIC0+ICAgMQorZGRjdG01NzIgY29tcGFyZXRvdG1hZyAgICAxRSsxNiAgMSAgICAgICAgLT4gICAxCitkZGN0bTU3MyBjb21wYXJldG90bWFnICAgIDFFKzE3ICAxICAgICAgICAtPiAgIDEKKy0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQorZGRjdG01NzggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE3ICAgICAtPiAgIDEKK2RkY3RtNTc5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNiAgICAgLT4gICAxCitkZGN0bTU4MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgIC0+ICAgMQorZGRjdG01ODEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgICAtPiAgIDEKK2RkY3RtNTgyIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAgLT4gICAxCitkZGN0bTU4MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgIC0+ICAgMQorZGRjdG01ODQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgICAtPiAgIDEKK2RkY3RtNTg1IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAgLT4gICAxCitkZGN0bTU4NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgIC0+ICAgMQorZGRjdG01ODcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgICAtPiAgIDEKK2RkY3RtNTg4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAgLT4gICAxCitkZGN0bTU4OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgIC0+ICAtMQorZGRjdG01OTAgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgICAtPiAgLTEKK2RkY3RtNTkxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAgLT4gIC0xCitkZGN0bTU5MiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgIC0+ICAtMQorZGRjdG01OTMgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgICAtPiAgLTEKK2RkY3RtNTk0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAgLT4gIC0xCitkZGN0bTU5NSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgIC0+ICAtMQorZGRjdG01OTYgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgICAtPiAgLTEKK2RkY3RtNTk3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAgLT4gIC0xCitkZGN0bTU5OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgIC0+ICAtMQorZGRjdG01OTkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgICAtPiAgLTEKKworLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKK2RkY3RtNjAwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQorZGRjdG02MDEgY29tcGFyZXRvdG1hZyAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYwMiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjAzIGNvbXBhcmV0b3RtYWcgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQorZGRjdG02MDQgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYwNSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjA2IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgIC0+ICAtMQorZGRjdG02MDcgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYwOCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjA5IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgIC0+ICAtMQorZGRjdG02MTAgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIgICAgICAgICAgICAgLT4gICAxCitkZGN0bTYxMSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wICAgICAgICAgICAtPiAgIDEKK2RkY3RtNjEyIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwICAgICAgICAgIC0+ICAgMQorZGRjdG02MTMgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAgLT4gICAxCitkZGN0bTYxNCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwICAgICAgICAtPiAgIDEKK2RkY3RtNjE1IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgIC0+ICAgMQorZGRjdG02MTYgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAgLT4gICAxCitkZGN0bTYxNyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgICAtPiAgIDEKK2RkY3RtNjE4IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgIC0+ICAgMQorZGRjdG02MTkgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAgLT4gICAxCitkZGN0bTYyMCBjb21wYXJldG90bWFnICAtMTIgICAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjIxIGNvbXBhcmV0b3RtYWcgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorZGRjdG02MjIgY29tcGFyZXRvdG1hZyAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYyMyBjb21wYXJldG90bWFnICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjI0IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgIC0+ICAtMQorZGRjdG02MjUgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYyNiBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjI3IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgIC0+ICAtMQorZGRjdG02MjggY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAgLT4gIC0xCitkZGN0bTYyOSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1ICAtPiAgLTEKK2RkY3RtNjMwIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgIC0+ICAgMQorZGRjdG02MzEgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAgLT4gICAxCitkZGN0bTYzMiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAgICAgICAgICAtPiAgIDEKK2RkY3RtNjMzIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgIC0+ICAgMQorZGRjdG02MzQgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAgLT4gICAxCitkZGN0bTYzNSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgICAtPiAgIDEKK2RkY3RtNjM2IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgIC0+ICAgMQorZGRjdG02MzcgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAgLT4gICAxCitkZGN0bTYzOCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgICAtPiAgIDEKK2RkY3RtNjM5IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgIC0+ICAgMQorCistLSBleHRlbmRlZCB6ZXJvcworZGRjdG02NDAgY29tcGFyZXRvdG1hZyAgIDAgICAgIDAgICAgLT4gICAwCitkZGN0bTY0MSBjb21wYXJldG90bWFnICAgMCAgICAtMCAgICAtPiAgIDAKK2RkY3RtNjQyIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wLjAgIC0+ICAgMQorZGRjdG02NDMgY29tcGFyZXRvdG1hZyAgIDAgICAgIDAuMCAgLT4gICAxCitkZGN0bTY0NCBjb21wYXJldG90bWFnICAtMCAgICAgMCAgICAtPiAgIDAKK2RkY3RtNjQ1IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wICAgIC0+ICAgMAorZGRjdG02NDYgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAuMCAgLT4gICAxCitkZGN0bTY0NyBjb21wYXJldG90bWFnICAtMCAgICAgMC4wICAtPiAgIDEKK2RkY3RtNjQ4IGNvbXBhcmV0b3RtYWcgICAwLjAgICAwICAgIC0+ICAtMQorZGRjdG02NDkgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTAgICAgLT4gIC0xCitkZGN0bTY1MCBjb21wYXJldG90bWFnICAgMC4wICAtMC4wICAtPiAgIDAKK2RkY3RtNjUxIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgIC0+ICAgMAorZGRjdG02NTIgY29tcGFyZXRvdG1hZyAgLTAuMCAgIDAgICAgLT4gIC0xCitkZGN0bTY1MyBjb21wYXJldG90bWFnICAtMC4wICAtMCAgICAtPiAgLTEKK2RkY3RtNjU0IGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wLjAgIC0+ICAgMAorZGRjdG02NTUgY29tcGFyZXRvdG1hZyAgLTAuMCAgIDAuMCAgLT4gICAwCisKK2RkY3RtNjU2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwLjAgIC0+ICAgMQorZGRjdG02NTcgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDAuMCAgLT4gICAxCitkZGN0bTY1OCBjb21wYXJldG90bWFnICAgMEUxICAgMC4wICAtPiAgIDEKK2RkY3RtNjU5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwLjAgIC0+ICAgMQorZGRjdG02NjAgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDAgICAgLT4gICAxCitkZGN0bTY2MSBjb21wYXJldG90bWFnICAtMEUyICAgMCAgICAtPiAgIDEKK2RkY3RtNjYyIGNvbXBhcmV0b3RtYWcgICAwRTEgICAwICAgIC0+ICAgMQorZGRjdG02NjMgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDAgICAgLT4gICAxCitkZGN0bTY2NCBjb21wYXJldG90bWFnICAtMEUxICAtMEUxICAtPiAgIDAKK2RkY3RtNjY1IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTEgIC0+ICAgMQorZGRjdG02NjYgY29tcGFyZXRvdG1hZyAgIDBFMSAgLTBFMSAgLT4gICAwCitkZGN0bTY2NyBjb21wYXJldG90bWFnICAgMEUyICAtMEUxICAtPiAgIDEKK2RkY3RtNjY4IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTIgIC0+ICAtMQorZGRjdG02NjkgY29tcGFyZXRvdG1hZyAgLTBFMiAgLTBFMiAgLT4gICAwCitkZGN0bTY3MCBjb21wYXJldG90bWFnICAgMEUxICAtMEUyICAtPiAgLTEKK2RkY3RtNjcxIGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTIgIC0+ICAgMAorZGRjdG02NzIgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDBFMSAgLT4gICAwCitkZGN0bTY3MyBjb21wYXJldG90bWFnICAtMEUyICAgMEUxICAtPiAgIDEKK2RkY3RtNjc0IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTEgIC0+ICAgMAorZGRjdG02NzUgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDBFMSAgLT4gICAxCitkZGN0bTY3NiBjb21wYXJldG90bWFnICAtMEUxICAgMEUyICAtPiAgLTEKK2RkY3RtNjc3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTIgIC0+ICAgMAorZGRjdG02NzggY29tcGFyZXRvdG1hZyAgIDBFMSAgIDBFMiAgLT4gIC0xCitkZGN0bTY3OSBjb21wYXJldG90bWFnICAgMEUyICAgMEUyICAtPiAgIDAKKworLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQorZGRjdG02ODAgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyICAgICAgICAgICAgLT4gICAwCitkZGN0bTY4MSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMCAgICAgICAgICAtPiAgIDEKK2RkY3RtNjgyIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMCAgICAgICAgIC0+ICAgMQorZGRjdG02ODMgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMCAgICAgICAgLT4gICAxCitkZGN0bTY4NCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMCAgICAgICAtPiAgIDEKK2RkY3RtNjg1IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMCAgICAgIC0+ICAgMQorZGRjdG02ODYgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMCAgICAgLT4gICAxCitkZGN0bTY4NyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMCAgICAtPiAgIDEKK2RkY3RtNjg4IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwMCAgIC0+ICAgMQorZGRjdG02ODkgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAwMCAgLT4gICAxCitkZGN0bTY5MCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAgIDEyICAtPiAgIDAKK2RkY3RtNjkxIGNvbXBhcmV0b3RtYWcgICAxMi4wICAgICAgICAgICAgMTIgIC0+ICAtMQorZGRjdG02OTIgY29tcGFyZXRvdG1hZyAgIDEyLjAwICAgICAgICAgICAxMiAgLT4gIC0xCitkZGN0bTY5MyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAgIDEyICAtPiAgLTEKK2RkY3RtNjk0IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwICAgICAgICAgMTIgIC0+ICAtMQorZGRjdG02OTUgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwICAgICAgICAxMiAgLT4gIC0xCitkZGN0bTY5NiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAgIDEyICAtPiAgLTEKK2RkY3RtNjk3IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwICAgICAgMTIgIC0+ICAtMQorZGRjdG02OTggY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwICAgICAxMiAgLT4gIC0xCitkZGN0bTY5OSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAgIDEyICAtPiAgLTEKKworLS0gb2xkIGxvbmcgb3BlcmFuZCBjaGVja3MKK2RkY3RtNzAxIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMDAgIDEgIC0+ICAgMQorZGRjdG03MDIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAwICAgLT4gIC0xCitkZGN0bTcwMyBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAgICAxICAtPiAgIDEKK2RkY3RtNzA0IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwICAgIC0+ICAtMQorZGRjdG03MDUgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwICAgMSAgLT4gICAxCitkZGN0bTcwNiBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MCAgICAtPiAgLTEKK2RkY3RtNzA3IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MSAgIDEgIC0+ICAgMQorZGRjdG03MDggY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTEgICAgLT4gIC0xCitkZGN0bTcwOSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAxICAxICAtPiAgIDEKK2RkY3RtNzEwIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwMSAgIC0+ICAtMQorZGRjdG03MTEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODk2ICAgMSAgLT4gICAxCitkZGN0bTcxMiBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5NiAgICAtPiAgLTEKK2RkY3RtNzEzIGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTEgIDEgIC0+ICAgMQorZGRjdG03MTQgY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODkxICAgLT4gIC0xCitkZGN0bTcxNSBjb21wYXJldG90bWFnIC0xMjM0NTY3ODkwMSAxICAtPiAgIDEKK2RkY3RtNzE2IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MDEgIC0+ICAtMQorZGRjdG03MTcgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5NiAgMSAgLT4gICAxCitkZGN0bTcxOCBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTYgICAtPiAgLTEKKworLS0gb2xkIHJlc2lkdWUgY2FzZXMKK2RkY3RtNzQwIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTk5OSAgIC0+ICAgMQorZGRjdG03NDEgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTkgICAgLT4gICAxCitkZGN0bTc0MiBjb21wYXJldG90bWFnICAxICAwLjk5OTk5ICAgICAtPiAgIDEKK2RkY3RtNzQzIGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMCAgICAgIC0+ICAgMQorZGRjdG03NDQgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMSAgICAgLT4gIC0xCitkZGN0bTc0NSBjb21wYXJldG90bWFnICAxICAxLjAwMDAwMSAgICAtPiAgLTEKK2RkY3RtNzQ2IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAwMSAgIC0+ICAtMQorZGRjdG03NTAgY29tcGFyZXRvdG1hZyAgMC45OTk5OTk5ICAxICAgLT4gIC0xCitkZGN0bTc1MSBjb21wYXJldG90bWFnICAwLjk5OTk5OSAgIDEgICAtPiAgLTEKK2RkY3RtNzUyIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTkgICAgMSAgIC0+ICAtMQorZGRjdG03NTMgY29tcGFyZXRvdG1hZyAgMS4wMDAwICAgICAxICAgLT4gIC0xCitkZGN0bTc1NCBjb21wYXJldG90bWFnICAxLjAwMDAxICAgIDEgICAtPiAgIDEKK2RkY3RtNzU1IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDAxICAgMSAgIC0+ICAgMQorZGRjdG03NTYgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDAxICAxICAgLT4gICAxCisKKy0tIFNwZWNpYWxzCitkZGN0bTc4MCBjb21wYXJldG90bWFnICBJbmYgIC1JbmYgICAtPiAgMAorZGRjdG03ODEgY29tcGFyZXRvdG1hZyAgSW5mICAtMTAwMCAgLT4gIDEKK2RkY3RtNzgyIGNvbXBhcmV0b3RtYWcgIEluZiAgLTEgICAgIC0+ICAxCitkZGN0bTc4MyBjb21wYXJldG90bWFnICBJbmYgIC0wICAgICAtPiAgMQorZGRjdG03ODQgY29tcGFyZXRvdG1hZyAgSW5mICAgMCAgICAgLT4gIDEKK2RkY3RtNzg1IGNvbXBhcmV0b3RtYWcgIEluZiAgIDEgICAgIC0+ICAxCitkZGN0bTc4NiBjb21wYXJldG90bWFnICBJbmYgICAxMDAwICAtPiAgMQorZGRjdG03ODcgY29tcGFyZXRvdG1hZyAgSW5mICAgSW5mICAgLT4gIDAKK2RkY3RtNzg4IGNvbXBhcmV0b3RtYWcgLTEwMDAgIEluZiAgIC0+IC0xCitkZGN0bTc4OSBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMAorZGRjdG03OTAgY29tcGFyZXRvdG1hZyAtMSAgICAgSW5mICAgLT4gLTEKK2RkY3RtNzkxIGNvbXBhcmV0b3RtYWcgLTAgICAgIEluZiAgIC0+IC0xCitkZGN0bTc5MiBjb21wYXJldG90bWFnICAwICAgICBJbmYgICAtPiAtMQorZGRjdG03OTMgY29tcGFyZXRvdG1hZyAgMSAgICAgSW5mICAgLT4gLTEKK2RkY3RtNzk0IGNvbXBhcmV0b3RtYWcgIDEwMDAgIEluZiAgIC0+IC0xCitkZGN0bTc5NSBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMAorCitkZGN0bTgwMCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMAorZGRjdG04MDEgY29tcGFyZXRvdG1hZyAtSW5mICAtMTAwMCAgLT4gIDEKK2RkY3RtODAyIGNvbXBhcmV0b3RtYWcgLUluZiAgLTEgICAgIC0+ICAxCitkZGN0bTgwMyBjb21wYXJldG90bWFnIC1JbmYgIC0wICAgICAtPiAgMQorZGRjdG04MDQgY29tcGFyZXRvdG1hZyAtSW5mICAgMCAgICAgLT4gIDEKK2RkY3RtODA1IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEgICAgIC0+ICAxCitkZGN0bTgwNiBjb21wYXJldG90bWFnIC1JbmYgICAxMDAwICAtPiAgMQorZGRjdG04MDcgY29tcGFyZXRvdG1hZyAtSW5mICAgSW5mICAgLT4gIDAKK2RkY3RtODA4IGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwCitkZGN0bTgwOSBjb21wYXJldG90bWFnIC0xMDAwIC1JbmYgICAtPiAtMQorZGRjdG04MTAgY29tcGFyZXRvdG1hZyAtMSAgICAtSW5mICAgLT4gLTEKK2RkY3RtODExIGNvbXBhcmV0b3RtYWcgLTAgICAgLUluZiAgIC0+IC0xCitkZGN0bTgxMiBjb21wYXJldG90bWFnICAwICAgIC1JbmYgICAtPiAtMQorZGRjdG04MTMgY29tcGFyZXRvdG1hZyAgMSAgICAtSW5mICAgLT4gLTEKK2RkY3RtODE0IGNvbXBhcmV0b3RtYWcgIDEwMDAgLUluZiAgIC0+IC0xCitkZGN0bTgxNSBjb21wYXJldG90bWFnICBJbmYgIC1JbmYgICAtPiAgMAorCitkZGN0bTgyMSBjb21wYXJldG90bWFnICBOYU4gLUluZiAgICAtPiAgMQorZGRjdG04MjIgY29tcGFyZXRvdG1hZyAgTmFOIC0xMDAwICAgLT4gIDEKK2RkY3RtODIzIGNvbXBhcmV0b3RtYWcgIE5hTiAtMSAgICAgIC0+ICAxCitkZGN0bTgyNCBjb21wYXJldG90bWFnICBOYU4gLTAgICAgICAtPiAgMQorZGRjdG04MjUgY29tcGFyZXRvdG1hZyAgTmFOICAwICAgICAgLT4gIDEKK2RkY3RtODI2IGNvbXBhcmV0b3RtYWcgIE5hTiAgMSAgICAgIC0+ICAxCitkZGN0bTgyNyBjb21wYXJldG90bWFnICBOYU4gIDEwMDAgICAtPiAgMQorZGRjdG04MjggY29tcGFyZXRvdG1hZyAgTmFOICBJbmYgICAgLT4gIDEKK2RkY3RtODI5IGNvbXBhcmV0b3RtYWcgIE5hTiAgTmFOICAgIC0+ICAwCitkZGN0bTgzMCBjb21wYXJldG90bWFnIC1JbmYgIE5hTiAgICAtPiAgLTEKK2RkY3RtODMxIGNvbXBhcmV0b3RtYWcgLTEwMDAgTmFOICAgIC0+ICAtMQorZGRjdG04MzIgY29tcGFyZXRvdG1hZyAtMSAgICBOYU4gICAgLT4gIC0xCitkZGN0bTgzMyBjb21wYXJldG90bWFnIC0wICAgIE5hTiAgICAtPiAgLTEKK2RkY3RtODM0IGNvbXBhcmV0b3RtYWcgIDAgICAgTmFOICAgIC0+ICAtMQorZGRjdG04MzUgY29tcGFyZXRvdG1hZyAgMSAgICBOYU4gICAgLT4gIC0xCitkZGN0bTgzNiBjb21wYXJldG90bWFnICAxMDAwIE5hTiAgICAtPiAgLTEKK2RkY3RtODM3IGNvbXBhcmV0b3RtYWcgIEluZiAgTmFOICAgIC0+ICAtMQorZGRjdG04MzggY29tcGFyZXRvdG1hZyAtTmFOIC1OYU4gICAgLT4gIDAKK2RkY3RtODM5IGNvbXBhcmV0b3RtYWcgK05hTiAtTmFOICAgIC0+ICAwCitkZGN0bTg0MCBjb21wYXJldG90bWFnIC1OYU4gK05hTiAgICAtPiAgMAorCitkZGN0bTg0MSBjb21wYXJldG90bWFnICBzTmFOIC1zTmFOICAtPiAgMAorZGRjdG04NDIgY29tcGFyZXRvdG1hZyAgc05hTiAtTmFOICAgLT4gIC0xCitkZGN0bTg0MyBjb21wYXJldG90bWFnICBzTmFOIC1JbmYgICAtPiAgMQorZGRjdG04NDQgY29tcGFyZXRvdG1hZyAgc05hTiAtMTAwMCAgLT4gIDEKK2RkY3RtODQ1IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTEgICAgIC0+ICAxCitkZGN0bTg0NiBjb21wYXJldG90bWFnICBzTmFOIC0wICAgICAtPiAgMQorZGRjdG04NDcgY29tcGFyZXRvdG1hZyAgc05hTiAgMCAgICAgLT4gIDEKK2RkY3RtODQ4IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDEgICAgIC0+ICAxCitkZGN0bTg0OSBjb21wYXJldG90bWFnICBzTmFOICAxMDAwICAtPiAgMQorZGRjdG04NTAgY29tcGFyZXRvdG1hZyAgc05hTiAgTmFOICAgLT4gIC0xCitkZGN0bTg1MSBjb21wYXJldG90bWFnICBzTmFOIHNOYU4gICAtPiAgMAorCitkZGN0bTg1MiBjb21wYXJldG90bWFnIC1zTmFOIHNOYU4gICAtPiAgMAorZGRjdG04NTMgY29tcGFyZXRvdG1hZyAtTmFOICBzTmFOICAgLT4gIDEKK2RkY3RtODU0IGNvbXBhcmV0b3RtYWcgLUluZiAgc05hTiAgIC0+ICAtMQorZGRjdG04NTUgY29tcGFyZXRvdG1hZyAtMTAwMCBzTmFOICAgLT4gIC0xCitkZGN0bTg1NiBjb21wYXJldG90bWFnIC0xICAgIHNOYU4gICAtPiAgLTEKK2RkY3RtODU3IGNvbXBhcmV0b3RtYWcgLTAgICAgc05hTiAgIC0+ICAtMQorZGRjdG04NTggY29tcGFyZXRvdG1hZyAgMCAgICBzTmFOICAgLT4gIC0xCitkZGN0bTg1OSBjb21wYXJldG90bWFnICAxICAgIHNOYU4gICAtPiAgLTEKK2RkY3RtODYwIGNvbXBhcmV0b3RtYWcgIDEwMDAgc05hTiAgIC0+ICAtMQorZGRjdG04NjEgY29tcGFyZXRvdG1hZyAgSW5mICBzTmFOICAgLT4gIC0xCitkZGN0bTg2MiBjb21wYXJldG90bWFnICBOYU4gIHNOYU4gICAtPiAgMQorZGRjdG04NjMgY29tcGFyZXRvdG1hZyAgc05hTiBzTmFOICAgLT4gIDAKKworZGRjdG04NzEgY29tcGFyZXRvdG1hZyAgLXNOYU4gLXNOYU4gIC0+ICAwCitkZGN0bTg3MiBjb21wYXJldG90bWFnICAtc05hTiAtTmFOICAgLT4gIC0xCitkZGN0bTg3MyBjb21wYXJldG90bWFnICAtc05hTiAtSW5mICAgLT4gIDEKK2RkY3RtODc0IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0xMDAwICAtPiAgMQorZGRjdG04NzUgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEgICAgIC0+ICAxCitkZGN0bTg3NiBjb21wYXJldG90bWFnICAtc05hTiAtMCAgICAgLT4gIDEKK2RkY3RtODc3IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAwICAgICAtPiAgMQorZGRjdG04NzggY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEgICAgIC0+ICAxCitkZGN0bTg3OSBjb21wYXJldG90bWFnICAtc05hTiAgMTAwMCAgLT4gIDEKK2RkY3RtODgwIGNvbXBhcmV0b3RtYWcgIC1zTmFOICBOYU4gICAtPiAgLTEKK2RkY3RtODgxIGNvbXBhcmV0b3RtYWcgIC1zTmFOIHNOYU4gICAtPiAgMAorCitkZGN0bTg4MiBjb21wYXJldG90bWFnIC1zTmFOIC1zTmFOICAgLT4gIDAKK2RkY3RtODgzIGNvbXBhcmV0b3RtYWcgLU5hTiAgLXNOYU4gICAtPiAgMQorZGRjdG04ODQgY29tcGFyZXRvdG1hZyAtSW5mICAtc05hTiAgIC0+ICAtMQorZGRjdG04ODUgY29tcGFyZXRvdG1hZyAtMTAwMCAtc05hTiAgIC0+ICAtMQorZGRjdG04ODYgY29tcGFyZXRvdG1hZyAtMSAgICAtc05hTiAgIC0+ICAtMQorZGRjdG04ODcgY29tcGFyZXRvdG1hZyAtMCAgICAtc05hTiAgIC0+ICAtMQorZGRjdG04ODggY29tcGFyZXRvdG1hZyAgMCAgICAtc05hTiAgIC0+ICAtMQorZGRjdG04ODkgY29tcGFyZXRvdG1hZyAgMSAgICAtc05hTiAgIC0+ICAtMQorZGRjdG04OTAgY29tcGFyZXRvdG1hZyAgMTAwMCAtc05hTiAgIC0+ICAtMQorZGRjdG04OTEgY29tcGFyZXRvdG1hZyAgSW5mICAtc05hTiAgIC0+ICAtMQorZGRjdG04OTIgY29tcGFyZXRvdG1hZyAgTmFOICAtc05hTiAgIC0+ICAxCitkZGN0bTg5MyBjb21wYXJldG90bWFnICBzTmFOIC1zTmFOICAgLT4gIDAKKworLS0gTmFOcyB3aXRoIHBheWxvYWQKK2RkY3RtOTYwIGNvbXBhcmV0b3RtYWcgIE5hTjkgLUluZiAgIC0+ICAxCitkZGN0bTk2MSBjb21wYXJldG90bWFnICBOYU44ICA5OTkgICAtPiAgMQorZGRjdG05NjIgY29tcGFyZXRvdG1hZyAgTmFONzcgSW5mICAgLT4gIDEKK2RkY3RtOTYzIGNvbXBhcmV0b3RtYWcgLU5hTjY3IE5hTjUgIC0+ICAxCitkZGN0bTk2NCBjb21wYXJldG90bWFnIC1JbmYgIC1OYU40ICAtPiAgLTEKK2RkY3RtOTY1IGNvbXBhcmV0b3RtYWcgLTk5OSAgLU5hTjMzIC0+ICAtMQorZGRjdG05NjYgY29tcGFyZXRvdG1hZyAgSW5mICAgTmFOMiAgLT4gIC0xCisKK2RkY3RtOTcwIGNvbXBhcmV0b3RtYWcgLU5hTjQxIC1OYU40MiAtPiAtMQorZGRjdG05NzEgY29tcGFyZXRvdG1hZyArTmFONDEgLU5hTjQyIC0+IC0xCitkZGN0bTk3MiBjb21wYXJldG90bWFnIC1OYU40MSArTmFONDIgLT4gLTEKK2RkY3RtOTczIGNvbXBhcmV0b3RtYWcgK05hTjQxICtOYU40MiAtPiAtMQorZGRjdG05NzQgY29tcGFyZXRvdG1hZyAtTmFONDIgLU5hTjAxIC0+ICAxCitkZGN0bTk3NSBjb21wYXJldG90bWFnICtOYU40MiAtTmFOMDEgLT4gIDEKK2RkY3RtOTc2IGNvbXBhcmV0b3RtYWcgLU5hTjQyICtOYU4wMSAtPiAgMQorZGRjdG05NzcgY29tcGFyZXRvdG1hZyArTmFONDIgK05hTjAxIC0+ICAxCisKK2RkY3RtOTgwIGNvbXBhcmV0b3RtYWcgLXNOYU43NzEgLXNOYU43NzIgLT4gLTEKK2RkY3RtOTgxIGNvbXBhcmV0b3RtYWcgK3NOYU43NzEgLXNOYU43NzIgLT4gLTEKK2RkY3RtOTgyIGNvbXBhcmV0b3RtYWcgLXNOYU43NzEgK3NOYU43NzIgLT4gLTEKK2RkY3RtOTgzIGNvbXBhcmV0b3RtYWcgK3NOYU43NzEgK3NOYU43NzIgLT4gLTEKK2RkY3RtOTg0IGNvbXBhcmV0b3RtYWcgLXNOYU43NzIgLXNOYU43NzEgLT4gIDEKK2RkY3RtOTg1IGNvbXBhcmV0b3RtYWcgK3NOYU43NzIgLXNOYU43NzEgLT4gIDEKK2RkY3RtOTg2IGNvbXBhcmV0b3RtYWcgLXNOYU43NzIgK3NOYU43NzEgLT4gIDEKK2RkY3RtOTg3IGNvbXBhcmV0b3RtYWcgK3NOYU43NzIgK3NOYU43NzEgLT4gIDEKKworZGRjdG05OTEgY29tcGFyZXRvdG1hZyAtc05hTjk5IC1JbmYgICAgLT4gIDEKK2RkY3RtOTkyIGNvbXBhcmV0b3RtYWcgIHNOYU45OCAtMTEgICAgIC0+ICAxCitkZGN0bTk5MyBjb21wYXJldG90bWFnICBzTmFOOTcgIE5hTiAgICAtPiAtMQorZGRjdG05OTQgY29tcGFyZXRvdG1hZyAgc05hTjE2IHNOYU45NCAgLT4gLTEKK2RkY3RtOTk1IGNvbXBhcmV0b3RtYWcgIE5hTjg1ICBzTmFOODMgIC0+ICAxCitkZGN0bTk5NiBjb21wYXJldG90bWFnIC1JbmYgICAgc05hTjkyICAtPiAtMQorZGRjdG05OTcgY29tcGFyZXRvdG1hZyAgMDg4ICAgIHNOYU44MSAgLT4gLTEKK2RkY3RtOTk4IGNvbXBhcmV0b3RtYWcgIEluZiAgICBzTmFOOTAgIC0+IC0xCitkZGN0bTk5OSBjb21wYXJldG90bWFnICBOYU4gICAtc05hTjg5ICAtPiAgMQorCistLSBzcHJlYWQgemVyb3MKK2RkY3RtMTExMCBjb21wYXJldG90bWFnICAgMEUtMzgzICAwICAgICAgICAtPiAgLTEKK2RkY3RtMTExMSBjb21wYXJldG90bWFnICAgMEUtMzgzIC0wICAgICAgICAtPiAgLTEKK2RkY3RtMTExMiBjb21wYXJldG90bWFnICAtMEUtMzgzICAwICAgICAgICAtPiAgLTEKK2RkY3RtMTExMyBjb21wYXJldG90bWFnICAtMEUtMzgzIC0wICAgICAgICAtPiAgLTEKK2RkY3RtMTExNCBjb21wYXJldG90bWFnICAgMEUtMzgzICAwRSszODQgICAtPiAgLTEKK2RkY3RtMTExNSBjb21wYXJldG90bWFnICAgMEUtMzgzIC0wRSszODQgICAtPiAgLTEKK2RkY3RtMTExNiBjb21wYXJldG90bWFnICAtMEUtMzgzICAwRSszODQgICAtPiAgLTEKK2RkY3RtMTExNyBjb21wYXJldG90bWFnICAtMEUtMzgzIC0wRSszODQgICAtPiAgLTEKK2RkY3RtMTExOCBjb21wYXJldG90bWFnICAgMCAgICAgICAwRSszODQgICAtPiAgLTEKK2RkY3RtMTExOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRSszODQgICAtPiAgLTEKK2RkY3RtMTEyMCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRSszODQgICAtPiAgLTEKK2RkY3RtMTEyMSBjb21wYXJldG90bWFnICAtMCAgICAgIC0wRSszODQgICAtPiAgLTEKKworZGRjdG0xMTMwIGNvbXBhcmV0b3RtYWcgICAwRSszODQgIDAgICAgICAgIC0+ICAgMQorZGRjdG0xMTMxIGNvbXBhcmV0b3RtYWcgICAwRSszODQgLTAgICAgICAgIC0+ICAgMQorZGRjdG0xMTMyIGNvbXBhcmV0b3RtYWcgIC0wRSszODQgIDAgICAgICAgIC0+ICAgMQorZGRjdG0xMTMzIGNvbXBhcmV0b3RtYWcgIC0wRSszODQgLTAgICAgICAgIC0+ICAgMQorZGRjdG0xMTM0IGNvbXBhcmV0b3RtYWcgICAwRSszODQgIDBFLTM4MyAgIC0+ICAgMQorZGRjdG0xMTM1IGNvbXBhcmV0b3RtYWcgICAwRSszODQgLTBFLTM4MyAgIC0+ICAgMQorZGRjdG0xMTM2IGNvbXBhcmV0b3RtYWcgIC0wRSszODQgIDBFLTM4MyAgIC0+ICAgMQorZGRjdG0xMTM3IGNvbXBhcmV0b3RtYWcgIC0wRSszODQgLTBFLTM4MyAgIC0+ICAgMQorZGRjdG0xMTM4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFLTM4MyAgIC0+ICAgMQorZGRjdG0xMTM5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFLTM4MyAgIC0+ICAgMQorZGRjdG0xMTQwIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgIDBFLTM4MyAgIC0+ICAgMQorZGRjdG0xMTQxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFLTM4MyAgIC0+ICAgMQorCistLSBOdWxsIHRlc3RzCitkZGN0bTk5OTAgY29tcGFyZXRvdG1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkY3RtOTk5MSBjb21wYXJldG90bWFnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHkuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5LmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWExNzVjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5LmRlY1Rlc3QKQEAgLTAsMCArMSw4OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZENvcHkuZGVjVGVzdCAtLSBxdWlldCBkZWNEb3VibGUgY29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RkY3B5MDAxIGNvcHkgICAgICAgKzcuNTAgIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworZGRjcHkwMTEgY29weSAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkKK2RkY3B5MDEyIGNvcHkgIC1JbmZpbml0eSAgIC0+IC1JbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RkY3B5MDIxIGNvcHkgICAgICAgICBOYU4gIC0+IE5hTgorZGRjcHkwMjIgY29weSAgICAgICAgLU5hTiAgLT4gLU5hTgorZGRjcHkwMjMgY29weSAgICAgICAgc05hTiAgLT4gc05hTgorZGRjcHkwMjQgY29weSAgICAgICAtc05hTiAgLT4gLXNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZGRjcHkwMzEgY29weSAgICAgICBOYU4xMCAgLT4gTmFOMTAKK2RkY3B5MDMyIGNvcHkgICAgICAtTmFOMTAgIC0+IC1OYU4xMAorZGRjcHkwMzMgY29weSAgICAgIHNOYU4xMCAgLT4gc05hTjEwCitkZGNweTAzNCBjb3B5ICAgICAtc05hTjEwICAtPiAtc05hTjEwCitkZGNweTAzNSBjb3B5ICAgICAgIE5hTjcgICAtPiBOYU43CitkZGNweTAzNiBjb3B5ICAgICAgLU5hTjcgICAtPiAtTmFONworZGRjcHkwMzcgY29weSAgICAgIHNOYU4xMDEgLT4gc05hTjEwMQorZGRjcHkwMzggY29weSAgICAgLXNOYU4xMDEgLT4gLXNOYU4xMDEKKworLS0gZmluaXRlcworZGRjcHkxMDEgY29weSAgICAgICAgICA3ICAgLT4gNworZGRjcHkxMDIgY29weSAgICAgICAgIC03ICAgLT4gLTcKK2RkY3B5MTAzIGNvcHkgICAgICAgICA3NSAgIC0+IDc1CitkZGNweTEwNCBjb3B5ICAgICAgICAtNzUgICAtPiAtNzUKK2RkY3B5MTA1IGNvcHkgICAgICAgNy41MCAgIC0+IDcuNTAKK2RkY3B5MTA2IGNvcHkgICAgICAtNy41MCAgIC0+IC03LjUwCitkZGNweTEwNyBjb3B5ICAgICAgIDcuNTAwICAtPiA3LjUwMAorZGRjcHkxMDggY29weSAgICAgIC03LjUwMCAgLT4gLTcuNTAwCisKKy0tIHplcm9zCitkZGNweTExMSBjb3B5ICAgICAgICAgIDAgICAtPiAwCitkZGNweTExMiBjb3B5ICAgICAgICAgLTAgICAtPiAtMAorZGRjcHkxMTMgY29weSAgICAgICAwRSs0ICAgLT4gMEUrNAorZGRjcHkxMTQgY29weSAgICAgIC0wRSs0ICAgLT4gLTBFKzQKK2RkY3B5MTE1IGNvcHkgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorZGRjcHkxMTYgY29weSAgICAtMC4wMDAwICAgLT4gLTAuMDAwMAorZGRjcHkxMTcgY29weSAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCitkZGNweTExOCBjb3B5ICAgICAtMEUtMTQxICAtPiAtMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkZGNweTEyMSBjb3B5ICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4MgorZGRjcHkxMjIgY29weSAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyCitkZGNweTEyMyBjb3B5ICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQorZGRjcHkxMjQgY29weSAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZGNweTEzMSBjb3B5ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRjcHkxMzIgY29weSAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MworZGRjcHkxMzMgY29weSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3B5MTM0IGNvcHkgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTgKKworZGRjcHkxMzUgY29weSAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTgKK2RkY3B5MTM2IGNvcHkgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRjcHkxMzcgY29weSAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC0xRS0zODMKK2RkY3B5MTM4IGNvcHkgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NApkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlBYnMuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5QWJzLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgyM2NmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5QWJzLmRlY1Rlc3QKQEAgLTAsMCArMSw4OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZENvcHlBYnMuZGVjVGVzdCAtLSBxdWlldCBkZWNEb3VibGUgY29weSBhbmQgc2V0IHNpZ24gdG8gemVybyAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RkY3BhMDAxIGNvcHlhYnMgICAgICAgKzcuNTAgIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworZGRjcGEwMTEgY29weWFicyAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkKK2RkY3BhMDEyIGNvcHlhYnMgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZGRjcGEwMjEgY29weWFicyAgICAgICAgIE5hTiAgLT4gTmFOCitkZGNwYTAyMiBjb3B5YWJzICAgICAgICAtTmFOICAtPiBOYU4KK2RkY3BhMDIzIGNvcHlhYnMgICAgICAgIHNOYU4gIC0+IHNOYU4KK2RkY3BhMDI0IGNvcHlhYnMgICAgICAgLXNOYU4gIC0+IHNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZGRjcGEwMzEgY29weWFicyAgICAgICBOYU4xMCAgLT4gTmFOMTAKK2RkY3BhMDMyIGNvcHlhYnMgICAgICAtTmFOMTUgIC0+IE5hTjE1CitkZGNwYTAzMyBjb3B5YWJzICAgICAgc05hTjE1ICAtPiBzTmFOMTUKK2RkY3BhMDM0IGNvcHlhYnMgICAgIC1zTmFOMTAgIC0+IHNOYU4xMAorZGRjcGEwMzUgY29weWFicyAgICAgICBOYU43ICAgLT4gTmFONworZGRjcGEwMzYgY29weWFicyAgICAgIC1OYU43ICAgLT4gTmFONworZGRjcGEwMzcgY29weWFicyAgICAgIHNOYU4xMDEgLT4gc05hTjEwMQorZGRjcGEwMzggY29weWFicyAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQorCistLSBmaW5pdGVzCitkZGNwYTEwMSBjb3B5YWJzICAgICAgICAgIDcgICAtPiA3CitkZGNwYTEwMiBjb3B5YWJzICAgICAgICAgLTcgICAtPiA3CitkZGNwYTEwMyBjb3B5YWJzICAgICAgICAgNzUgICAtPiA3NQorZGRjcGExMDQgY29weWFicyAgICAgICAgLTc1ICAgLT4gNzUKK2RkY3BhMTA1IGNvcHlhYnMgICAgICAgNy4xMCAgIC0+IDcuMTAKK2RkY3BhMTA2IGNvcHlhYnMgICAgICAtNy4xMCAgIC0+IDcuMTAKK2RkY3BhMTA3IGNvcHlhYnMgICAgICAgNy41MDAgIC0+IDcuNTAwCitkZGNwYTEwOCBjb3B5YWJzICAgICAgLTcuNTAwICAtPiA3LjUwMAorCistLSB6ZXJvcworZGRjcGExMTEgY29weWFicyAgICAgICAgICAwICAgLT4gMAorZGRjcGExMTIgY29weWFicyAgICAgICAgIC0wICAgLT4gMAorZGRjcGExMTMgY29weWFicyAgICAgICAwRSs2ICAgLT4gMEUrNgorZGRjcGExMTQgY29weWFicyAgICAgIC0wRSs2ICAgLT4gMEUrNgorZGRjcGExMTUgY29weWFicyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitkZGNwYTExNiBjb3B5YWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2RkY3BhMTE3IGNvcHlhYnMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZGRjcGExMTggY29weWFicyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkZGNwYTEyMSBjb3B5YWJzICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4MgorZGRjcGExMjIgY29weWFicyAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODIKK2RkY3BhMTIzIGNvcHlhYnMgIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxCitkZGNwYTEyNCBjb3B5YWJzICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZGRjcGExMzEgY29weWFicyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkY3BhMTMyIGNvcHlhYnMgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKK2RkY3BhMTMzIGNvcHlhYnMgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZGNwYTEzNCBjb3B5YWJzICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4CisKK2RkY3BhMTM1IGNvcHlhYnMgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAxRS0zOTgKK2RkY3BhMTM2IGNvcHlhYnMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZGNwYTEzNyBjb3B5YWJzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzCitkZGNwYTEzOCBjb3B5YWJzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NApkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlOZWdhdGUuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5TmVnYXRlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIxOTQ1YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5TmVnYXRlLmRlY1Rlc3QKQEAgLTAsMCArMSw4OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZENvcHlOZWdhdGUuZGVjVGVzdCAtLSBxdWlldCBkZWNEb3VibGUgY29weSBhbmQgbmVnYXRlICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RkY3BuMDAxIGNvcHluZWdhdGUgICAgICAgKzcuNTAgIC0+IC03LjUwCisKKy0tIEluZmluaXRpZXMKK2RkY3BuMDExIGNvcHluZWdhdGUgIEluZmluaXR5ICAgIC0+IC1JbmZpbml0eQorZGRjcG4wMTIgY29weW5lZ2F0ZSAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitkZGNwbjAyMSBjb3B5bmVnYXRlICAgICAgICAgTmFOICAtPiAtTmFOCitkZGNwbjAyMiBjb3B5bmVnYXRlICAgICAgICAtTmFOICAtPiBOYU4KK2RkY3BuMDIzIGNvcHluZWdhdGUgICAgICAgIHNOYU4gIC0+IC1zTmFOCitkZGNwbjAyNCBjb3B5bmVnYXRlICAgICAgIC1zTmFOICAtPiBzTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RkY3BuMDMxIGNvcHluZWdhdGUgICAgICAgTmFOMTMgIC0+IC1OYU4xMworZGRjcG4wMzIgY29weW5lZ2F0ZSAgICAgIC1OYU4xMyAgLT4gTmFOMTMKK2RkY3BuMDMzIGNvcHluZWdhdGUgICAgICBzTmFOMTMgIC0+IC1zTmFOMTMKK2RkY3BuMDM0IGNvcHluZWdhdGUgICAgIC1zTmFOMTMgIC0+IHNOYU4xMworZGRjcG4wMzUgY29weW5lZ2F0ZSAgICAgICBOYU43MCAgLT4gLU5hTjcwCitkZGNwbjAzNiBjb3B5bmVnYXRlICAgICAgLU5hTjcwICAtPiBOYU43MAorZGRjcG4wMzcgY29weW5lZ2F0ZSAgICAgIHNOYU4xMDEgLT4gLXNOYU4xMDEKK2RkY3BuMDM4IGNvcHluZWdhdGUgICAgIC1zTmFOMTAxIC0+IHNOYU4xMDEKKworLS0gZmluaXRlcworZGRjcG4xMDEgY29weW5lZ2F0ZSAgICAgICAgICA3ICAgLT4gLTcKK2RkY3BuMTAyIGNvcHluZWdhdGUgICAgICAgICAtNyAgIC0+IDcKK2RkY3BuMTAzIGNvcHluZWdhdGUgICAgICAgICA3NSAgIC0+IC03NQorZGRjcG4xMDQgY29weW5lZ2F0ZSAgICAgICAgLTc1ICAgLT4gNzUKK2RkY3BuMTA1IGNvcHluZWdhdGUgICAgICAgNy41MCAgIC0+IC03LjUwCitkZGNwbjEwNiBjb3B5bmVnYXRlICAgICAgLTcuNTAgICAtPiA3LjUwCitkZGNwbjEwNyBjb3B5bmVnYXRlICAgICAgIDcuNTAwICAtPiAtNy41MDAKK2RkY3BuMTA4IGNvcHluZWdhdGUgICAgICAtNy41MDAgIC0+IDcuNTAwCisKKy0tIHplcm9zCitkZGNwbjExMSBjb3B5bmVnYXRlICAgICAgICAgIDAgICAtPiAtMAorZGRjcG4xMTIgY29weW5lZ2F0ZSAgICAgICAgIC0wICAgLT4gMAorZGRjcG4xMTMgY29weW5lZ2F0ZSAgICAgICAwRSs0ICAgLT4gLTBFKzQKK2RkY3BuMTE0IGNvcHluZWdhdGUgICAgICAtMEUrNCAgIC0+IDBFKzQKK2RkY3BuMTE1IGNvcHluZWdhdGUgICAgIDAuMDAwMCAgIC0+IC0wLjAwMDAKK2RkY3BuMTE2IGNvcHluZWdhdGUgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorZGRjcG4xMTcgY29weW5lZ2F0ZSAgICAgIDBFLTE0MSAgLT4gLTBFLTE0MQorZGRjcG4xMTggY29weW5lZ2F0ZSAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkZGNwbjEyMSBjb3B5bmVnYXRlICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODIKK2RkY3BuMTIyIGNvcHluZWdhdGUgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyCitkZGNwbjEyMyBjb3B5bmVnYXRlICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEKK2RkY3BuMTI0IGNvcHluZWdhdGUgIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZGNwbjEzMSBjb3B5bmVnYXRlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkY3BuMTMyIGNvcHluZWdhdGUgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzCitkZGNwbjEzMyBjb3B5bmVnYXRlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3BuMTM0IGNvcHluZWdhdGUgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4CisKK2RkY3BuMTM1IGNvcHluZWdhdGUgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAxRS0zOTgKK2RkY3BuMTM2IGNvcHluZWdhdGUgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZGNwbjEzNyBjb3B5bmVnYXRlICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzCitkZGNwbjEzOCBjb3B5bmVnYXRlICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NApkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlTaWduLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weVNpZ24uZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTk1NDRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlTaWduLmRlY1Rlc3QKQEAgLTAsMCArMSwxNzUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRDb3B5U2lnbi5kZWNUZXN0IC0tIHF1aWV0IGRlY0RvdWJsZSBjb3B5IHdpdGggc2lnbiBmcm9tIHJocyAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkZGNwczAwMSBjb3B5c2lnbiAgICAgICArNy41MCAgICAgMTEgLT4gNy41MAorCistLSBJbmZpbml0aWVzCitkZGNwczAxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgMTEgLT4gSW5maW5pdHkKK2RkY3BzMDEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAxMSAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RkY3BzMDIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAxMSAtPiBOYU4KK2RkY3BzMDIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAxMSAtPiBOYU4KK2RkY3BzMDIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAxMSAtPiBzTmFOCitkZGNwczAyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgMTEgLT4gc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkZGNwczAzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgMTEgLT4gTmFOMTAKK2RkY3BzMDMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAxMSAtPiBOYU4xMAorZGRjcHMwMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIDExIC0+IHNOYU4xMAorZGRjcHMwMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIDExIC0+IHNOYU4xMAorZGRjcHMwMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIDExIC0+IE5hTjcKK2RkY3BzMDM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAxMSAtPiBOYU43CitkZGNwczAzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQorZGRjcHMwMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIDExIC0+IHNOYU4xMDEKKworLS0gZmluaXRlcworZGRjcHMxMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIDExIC0+IDcKK2RkY3BzMTAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAxMSAtPiA3CitkZGNwczEwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgMTEgLT4gNzUKK2RkY3BzMTA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAxMSAtPiA3NQorZGRjcHMxMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIDExIC0+IDcuNTAKK2RkY3BzMTA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAxMSAtPiA3LjUwCitkZGNwczEwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgMTEgLT4gNy41MDAKK2RkY3BzMTA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAxMSAtPiA3LjUwMAorCistLSB6ZXJvcworZGRjcHMxMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIDExIC0+IDAKK2RkY3BzMTEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAxMSAtPiAwCitkZGNwczExMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgMTEgLT4gMEUrNAorZGRjcHMxMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIDExIC0+IDBFKzQKK2RkY3BzMTE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAxMSAtPiAwLjAwMDAKK2RkY3BzMTE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAxMSAtPiAwLjAwMDAKK2RkY3BzMTE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAxMSAtPiAwRS0xNDEKK2RkY3BzMTE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAxMSAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RkY3BzMTIxIGNvcHlzaWduICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgICAgMTEgLT4gMjY4MjY4MjY4MjY4MjY4MgorZGRjcHMxMjIgY29weXNpZ24gIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAgICAxMSAtPiAyNjgyNjgyNjgyNjgyNjgyCitkZGNwczEyMyBjb3B5c2lnbiAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgICAgIDExIC0+IDEzNDEzNDEzNDEzNDEzNDEKK2RkY3BzMTI0IGNvcHlzaWduICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgICAgMTEgLT4gMTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZGRjcHMxMzEgY29weXNpZ24gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxMSAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGNwczEzMiBjb3B5c2lnbiAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDExIC0+IDFFLTM4MworZGRjcHMxMzMgY29weXNpZ24gIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxMSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZGNwczEzNCBjb3B5c2lnbiAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDExIC0+IDFFLTM5OAorCitkZGNwczEzNSBjb3B5c2lnbiAgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIDExIC0+IDFFLTM5OAorZGRjcHMxMzYgY29weXNpZ24gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAxMSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZGNwczEzNyBjb3B5c2lnbiAgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIDExIC0+IDFFLTM4MworZGRjcHMxMzggY29weXNpZ24gIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAxMSAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CisKKy0tIHJlcGVhdCB3aXRoIG5lZ2F0aXZlIFJIUworCistLSBJbmZpbml0aWVzCitkZGNwczIxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgLTM0IC0+IC1JbmZpbml0eQorZGRjcHMyMTIgY29weXNpZ24gIC1JbmZpbml0eSAgICAgIC0zNCAtPiAtSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitkZGNwczIyMSBjb3B5c2lnbiAgICAgICAgIE5hTiAgICAgLTM0IC0+IC1OYU4KK2RkY3BzMjIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAtMzQgLT4gLU5hTgorZGRjcHMyMjMgY29weXNpZ24gICAgICAgIHNOYU4gICAgIC0zNCAtPiAtc05hTgorZGRjcHMyMjQgY29weXNpZ24gICAgICAgLXNOYU4gICAgIC0zNCAtPiAtc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkZGNwczIzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgLTM0IC0+IC1OYU4xMAorZGRjcHMyMzIgY29weXNpZ24gICAgICAtTmFOMTAgICAgIC0zNCAtPiAtTmFOMTAKK2RkY3BzMjMzIGNvcHlzaWduICAgICAgc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMAorZGRjcHMyMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIC0zNCAtPiAtc05hTjEwCitkZGNwczIzNSBjb3B5c2lnbiAgICAgICBOYU43ICAgICAgLTM0IC0+IC1OYU43CitkZGNwczIzNiBjb3B5c2lnbiAgICAgIC1OYU43ICAgICAgLTM0IC0+IC1OYU43CitkZGNwczIzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgLTM0IC0+IC1zTmFOMTAxCitkZGNwczIzOCBjb3B5c2lnbiAgICAgLXNOYU4xMDEgICAgLTM0IC0+IC1zTmFOMTAxCisKKy0tIGZpbml0ZXMKK2RkY3BzMzAxIGNvcHlzaWduICAgICAgICAgIDcgICAgICAtMzQgLT4gLTcKK2RkY3BzMzAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAtMzQgLT4gLTcKK2RkY3BzMzAzIGNvcHlzaWduICAgICAgICAgNzUgICAgICAtMzQgLT4gLTc1CitkZGNwczMwNCBjb3B5c2lnbiAgICAgICAgLTc1ICAgICAgLTM0IC0+IC03NQorZGRjcHMzMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIC0zNCAtPiAtNy41MAorZGRjcHMzMDYgY29weXNpZ24gICAgICAtNy41MCAgICAgIC0zNCAtPiAtNy41MAorZGRjcHMzMDcgY29weXNpZ24gICAgICAgNy41MDAgICAgIC0zNCAtPiAtNy41MDAKK2RkY3BzMzA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAtMzQgLT4gLTcuNTAwCisKKy0tIHplcm9zCitkZGNwczMxMSBjb3B5c2lnbiAgICAgICAgICAwICAgICAgLTM0IC0+IC0wCitkZGNwczMxMiBjb3B5c2lnbiAgICAgICAgIC0wICAgICAgLTM0IC0+IC0wCitkZGNwczMxMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgLTM0IC0+IC0wRSs0CitkZGNwczMxNCBjb3B5c2lnbiAgICAgIC0wRSs0ICAgICAgLTM0IC0+IC0wRSs0CitkZGNwczMxNSBjb3B5c2lnbiAgICAgMC4wMDAwICAgICAgLTM0IC0+IC0wLjAwMDAKK2RkY3BzMzE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMAorZGRjcHMzMTcgY29weXNpZ24gICAgICAwRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxCitkZGNwczMxOCBjb3B5c2lnbiAgICAgLTBFLTE0MSAgICAgLTM0IC0+IC0wRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RkY3BzMzIxIGNvcHlzaWduICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgICAgLTM0IC0+IC0yNjgyNjgyNjgyNjgyNjgyCitkZGNwczMyMiBjb3B5c2lnbiAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAgIC0zNCAtPiAtMjY4MjY4MjY4MjY4MjY4MgorZGRjcHMzMjMgY29weXNpZ24gIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAgICAtMzQgLT4gLTEzNDEzNDEzNDEzNDEzNDEKK2RkY3BzMzI0IGNvcHlzaWduICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgICAgLTM0IC0+IC0xMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZGNwczMzMSBjb3B5c2lnbiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIC0zNCAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRjcHMzMzIgY29weXNpZ24gIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAtMzQgLT4gLTFFLTM4MworZGRjcHMzMzMgY29weXNpZ24gIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAtMzQgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3BzMzM0IGNvcHlzaWduICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAgLTM0IC0+IC0xRS0zOTgKKworZGRjcHMzMzUgY29weXNpZ24gIC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAtMzQgLT4gLTFFLTM5OAorZGRjcHMzMzYgY29weXNpZ24gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMzQgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RkY3BzMzM3IGNvcHlzaWduICAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTM0IC0+IC0xRS0zODMKK2RkY3BzMzM4IGNvcHlzaWduICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTM0IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CisKKy0tIE90aGVyIGtpbmRzIG9mIFJIUworZGRjcHM0MDEgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0zNCAtPiAtNzAxCitkZGNwczQwMiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLTM0IC0+IC03MjAKK2RkY3BzNDAzIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtMCAgLT4gLTcwMQorZGRjcHM0MDQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0wICAtPiAtNzIwCitkZGNwczQwNSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgKzAgIC0+ICA3MDEKK2RkY3BzNDA2IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMCAgLT4gIDcyMAorZGRjcHM0MDcgY29weXNpZ24gICAgICAgICAgNzAxICAgICszNCAtPiAgNzAxCitkZGNwczQwOCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgKzM0IC0+ICA3MjAKKworZGRjcHM0MTMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1JbmYgIC0+IC03MDEKK2RkY3BzNDE0IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtSW5mICAtPiAtNzIwCitkZGNwczQxNSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK0luZiAgLT4gIDcwMQorZGRjcHM0MTYgY29weXNpZ24gICAgICAgICAtNzIwICAgICtJbmYgIC0+ICA3MjAKKworZGRjcHM0MjAgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1OYU4gIC0+IC03MDEKK2RkY3BzNDIxIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtTmFOICAtPiAtNzIwCitkZGNwczQyMiBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK05hTiAgLT4gIDcwMQorZGRjcHM0MjMgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU4gIC0+ICA3MjAKK2RkY3BzNDI1IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArTmFOOCAtPiAgNzIwCisKK2RkY3BzNDI2IGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtc05hTiAgLT4gLTcwMQorZGRjcHM0MjcgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1zTmFOICAtPiAtNzIwCitkZGNwczQyOCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK3NOYU4gIC0+ICA3MDEKK2RkY3BzNDI5IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArc05hTiAgLT4gIDcyMAorZGRjcHM0MzAgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOMyAtPiAgNzIwCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGREaXZpZGUuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGREaXZpZGUuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTlkYjIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZERpdmlkZS5kZWNUZXN0CkBAIC0wLDAgKzEsODYzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkRGl2aWRlLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGRpdmlzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RkZGl2MDAxIGRpdmlkZSAgMSAgICAgMSAgICAtPiAgMQorZGRkaXYwMDIgZGl2aWRlICAyICAgICAxICAgIC0+ICAyCitkZGRpdjAwMyBkaXZpZGUgIDEgICAgIDIgICAgLT4gIDAuNQorZGRkaXYwMDQgZGl2aWRlICAyICAgICAyICAgIC0+ICAxCitkZGRpdjAwNSBkaXZpZGUgIDAgICAgIDEgICAgLT4gIDAKK2RkZGl2MDA2IGRpdmlkZSAgMCAgICAgMiAgICAtPiAgMAorZGRkaXYwMDcgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjAwOCBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MDA5IGRpdmlkZSAgMyAgICAgMyAgICAtPiAgMQorCitkZGRpdjAxMCBkaXZpZGUgIDIuNCAgIDEgICAgLT4gIDIuNAorZGRkaXYwMTEgZGl2aWRlICAyLjQgICAtMSAgIC0+ICAtMi40CitkZGRpdjAxMiBkaXZpZGUgIC0yLjQgIDEgICAgLT4gIC0yLjQKK2RkZGl2MDEzIGRpdmlkZSAgLTIuNCAgLTEgICAtPiAgMi40CitkZGRpdjAxNCBkaXZpZGUgIDIuNDAgIDEgICAgLT4gIDIuNDAKK2RkZGl2MDE1IGRpdmlkZSAgMi40MDAgMSAgICAtPiAgMi40MDAKK2RkZGl2MDE2IGRpdmlkZSAgMi40ICAgMiAgICAtPiAgMS4yCitkZGRpdjAxNyBkaXZpZGUgIDIuNDAwIDIgICAgLT4gIDEuMjAwCitkZGRpdjAxOCBkaXZpZGUgIDIuICAgIDIgICAgLT4gIDEKK2RkZGl2MDE5IGRpdmlkZSAgMjAgICAgMjAgICAtPiAgMQorCitkZGRpdjAyMCBkaXZpZGUgIDE4NyAgIDE4NyAgICAtPiAgMQorZGRkaXYwMjEgZGl2aWRlICA1ICAgICAyICAgICAgLT4gIDIuNQorZGRkaXYwMjIgZGl2aWRlICA1MCAgICAyMCAgICAgLT4gIDIuNQorZGRkaXYwMjMgZGl2aWRlICA1MDAgICAyMDAgICAgLT4gIDIuNQorZGRkaXYwMjQgZGl2aWRlICA1MC4wICAyMC4wICAgLT4gIDIuNQorZGRkaXYwMjUgZGl2aWRlICA1LjAwICAyLjAwICAgLT4gIDIuNQorZGRkaXYwMjYgZGl2aWRlICA1ICAgICAyLjAgICAgLT4gIDIuNQorZGRkaXYwMjcgZGl2aWRlICA1ICAgICAyLjAwMCAgLT4gIDIuNQorZGRkaXYwMjggZGl2aWRlICA1ICAgICAwLjIwICAgLT4gIDI1CitkZGRpdjAyOSBkaXZpZGUgIDUgICAgIDAuMjAwICAtPiAgMjUKK2RkZGl2MDMwIGRpdmlkZSAgMTAgICAgMSAgICAgIC0+ICAxMAorZGRkaXYwMzEgZGl2aWRlICAxMDAgICAxICAgICAgLT4gIDEwMAorZGRkaXYwMzIgZGl2aWRlICAxMDAwICAxICAgICAgLT4gIDEwMDAKK2RkZGl2MDMzIGRpdmlkZSAgMTAwMCAgMTAwICAgIC0+ICAxMAorCitkZGRpdjAzNSBkaXZpZGUgIDEgICAgIDIgICAgICAtPiAgMC41CitkZGRpdjAzNiBkaXZpZGUgIDEgICAgIDQgICAgICAtPiAgMC4yNQorZGRkaXYwMzcgZGl2aWRlICAxICAgICA4ICAgICAgLT4gIDAuMTI1CitkZGRpdjAzOCBkaXZpZGUgIDEgICAgIDE2ICAgICAtPiAgMC4wNjI1CitkZGRpdjAzOSBkaXZpZGUgIDEgICAgIDMyICAgICAtPiAgMC4wMzEyNQorZGRkaXYwNDAgZGl2aWRlICAxICAgICA2NCAgICAgLT4gIDAuMDE1NjI1CitkZGRpdjA0MSBkaXZpZGUgIDEgICAgLTIgICAgICAtPiAgLTAuNQorZGRkaXYwNDIgZGl2aWRlICAxICAgIC00ICAgICAgLT4gIC0wLjI1CitkZGRpdjA0MyBkaXZpZGUgIDEgICAgLTggICAgICAtPiAgLTAuMTI1CitkZGRpdjA0NCBkaXZpZGUgIDEgICAgLTE2ICAgICAtPiAgLTAuMDYyNQorZGRkaXYwNDUgZGl2aWRlICAxICAgIC0zMiAgICAgLT4gIC0wLjAzMTI1CitkZGRpdjA0NiBkaXZpZGUgIDEgICAgLTY0ICAgICAtPiAgLTAuMDE1NjI1CitkZGRpdjA0NyBkaXZpZGUgLTEgICAgIDIgICAgICAtPiAgLTAuNQorZGRkaXYwNDggZGl2aWRlIC0xICAgICA0ICAgICAgLT4gIC0wLjI1CitkZGRpdjA0OSBkaXZpZGUgLTEgICAgIDggICAgICAtPiAgLTAuMTI1CitkZGRpdjA1MCBkaXZpZGUgLTEgICAgIDE2ICAgICAtPiAgLTAuMDYyNQorZGRkaXYwNTEgZGl2aWRlIC0xICAgICAzMiAgICAgLT4gIC0wLjAzMTI1CitkZGRpdjA1MiBkaXZpZGUgLTEgICAgIDY0ICAgICAtPiAgLTAuMDE1NjI1CitkZGRpdjA1MyBkaXZpZGUgLTEgICAgLTIgICAgICAtPiAgMC41CitkZGRpdjA1NCBkaXZpZGUgLTEgICAgLTQgICAgICAtPiAgMC4yNQorZGRkaXYwNTUgZGl2aWRlIC0xICAgIC04ICAgICAgLT4gIDAuMTI1CitkZGRpdjA1NiBkaXZpZGUgLTEgICAgLTE2ICAgICAtPiAgMC4wNjI1CitkZGRpdjA1NyBkaXZpZGUgLTEgICAgLTMyICAgICAtPiAgMC4wMzEyNQorZGRkaXYwNTggZGl2aWRlIC0xICAgIC02NCAgICAgLT4gIDAuMDE1NjI1CisKKy0tIGJjZFRpbWUKK2RkZGl2MDYwIGRpdmlkZSAgMSA3ICAgICAgICAgICAgICAgICAgIC0+IDAuMTQyODU3MTQyODU3MTQyOSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MDYxIGRpdmlkZSAxLjIzNDU2NzggIDEuOTg3NjU0MyAgIC0+IDAuNjIxMTE3OTY4MDQ5MDcxNyBJbmV4YWN0IFJvdW5kZWQKKworLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkZGRpdjA3MSBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5OTkgMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkKK2RkZGl2MDcyIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5ICAxICAtPiAgOTk5OTk5OTk5OTk5OTk5CitkZGRpdjA3MyBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5ICAgMSAgLT4gIDk5OTk5OTk5OTk5OTk5CitkZGRpdjA3NCBkaXZpZGUgIDk5OTk5OTk5OTk5OTkgICAgMSAgLT4gIDk5OTk5OTk5OTk5OTkKK2RkZGl2MDc1IGRpdmlkZSAgOTk5OTk5OTk5OTk5ICAgICAxICAtPiAgOTk5OTk5OTk5OTk5CitkZGRpdjA3NiBkaXZpZGUgIDk5OTk5OTk5OTk5ICAgICAgMSAgLT4gIDk5OTk5OTk5OTk5CitkZGRpdjA3NyBkaXZpZGUgIDk5OTk5OTk5OTkgICAgICAgMSAgLT4gIDk5OTk5OTk5OTkKK2RkZGl2MDc4IGRpdmlkZSAgOTk5OTk5OTk5ICAgICAgICAxICAtPiAgOTk5OTk5OTk5CitkZGRpdjA3OSBkaXZpZGUgIDk5OTk5OTk5ICAgICAgICAgMSAgLT4gIDk5OTk5OTk5CitkZGRpdjA4MCBkaXZpZGUgIDk5OTk5OTkgICAgICAgICAgMSAgLT4gIDk5OTk5OTkKK2RkZGl2MDgxIGRpdmlkZSAgOTk5OTk5ICAgICAgICAgICAxICAtPiAgOTk5OTk5CitkZGRpdjA4MiBkaXZpZGUgIDk5OTk5ICAgICAgICAgICAgMSAgLT4gIDk5OTk5CitkZGRpdjA4MyBkaXZpZGUgIDk5OTkgICAgICAgICAgICAgMSAgLT4gIDk5OTkKK2RkZGl2MDg0IGRpdmlkZSAgOTk5ICAgICAgICAgICAgICAxICAtPiAgOTk5CitkZGRpdjA4NSBkaXZpZGUgIDk5ICAgICAgICAgICAgICAgMSAgLT4gIDk5CitkZGRpdjA4NiBkaXZpZGUgIDkgICAgICAgICAgICAgICAgMSAgLT4gIDkKKworZGRkaXYwOTAgZGl2aWRlICAwLiAgICAgICAgICAgIDEgICAgLT4gIDAKK2RkZGl2MDkxIGRpdmlkZSAgLjAgICAgICAgICAgICAxICAgIC0+ICAwLjAKK2RkZGl2MDkyIGRpdmlkZSAgMC4wMCAgICAgICAgICAxICAgIC0+ICAwLjAwCitkZGRpdjA5MyBkaXZpZGUgIDAuMDBFKzkgICAgICAgMSAgICAtPiAgMEUrNworZGRkaXYwOTQgZGl2aWRlICAwLjAwMDBFLTUwICAgIDEgICAgLT4gIDBFLTU0CisKK2RkZGl2MDk1IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTggIC0+ICAxRSs4CitkZGRpdjA5NiBkaXZpZGUgIDEgICAgICAgICAgICAxRS05ICAtPiAgMUUrOQorZGRkaXYwOTcgZGl2aWRlICAxICAgICAgICAgICAgMUUtMTAgLT4gIDFFKzEwCitkZGRpdjA5OCBkaXZpZGUgIDEgICAgICAgICAgICAxRS0xMSAtPiAgMUUrMTEKK2RkZGl2MDk5IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTEyIC0+ICAxRSsxMgorCitkZGRpdjEwMCBkaXZpZGUgIDEgIDEgICAtPiAxCitkZGRpdjEwMSBkaXZpZGUgIDEgIDIgICAtPiAwLjUKK2RkZGl2MTAyIGRpdmlkZSAgMSAgMyAgIC0+IDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTAzIGRpdmlkZSAgMSAgNCAgIC0+IDAuMjUKK2RkZGl2MTA0IGRpdmlkZSAgMSAgNSAgIC0+IDAuMgorZGRkaXYxMDUgZGl2aWRlICAxICA2ICAgLT4gMC4xNjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDYgZGl2aWRlICAxICA3ICAgLT4gMC4xNDI4NTcxNDI4NTcxNDI5IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDcgZGl2aWRlICAxICA4ICAgLT4gMC4xMjUKK2RkZGl2MTA4IGRpdmlkZSAgMSAgOSAgIC0+IDAuMTExMTExMTExMTExMTExMSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTA5IGRpdmlkZSAgMSAgMTAgIC0+IDAuMQorZGRkaXYxMTAgZGl2aWRlICAxICAxICAgLT4gMQorZGRkaXYxMTEgZGl2aWRlICAyICAxICAgLT4gMgorZGRkaXYxMTIgZGl2aWRlICAzICAxICAgLT4gMworZGRkaXYxMTMgZGl2aWRlICA0ICAxICAgLT4gNAorZGRkaXYxMTQgZGl2aWRlICA1ICAxICAgLT4gNQorZGRkaXYxMTUgZGl2aWRlICA2ICAxICAgLT4gNgorZGRkaXYxMTYgZGl2aWRlICA3ICAxICAgLT4gNworZGRkaXYxMTcgZGl2aWRlICA4ICAxICAgLT4gOAorZGRkaXYxMTggZGl2aWRlICA5ICAxICAgLT4gOQorZGRkaXYxMTkgZGl2aWRlICAxMCAxICAgLT4gMTAKKworZGRkaXYxMjAgZGl2aWRlICAzRSsxIDAuMDAxICAtPiAzRSs0CitkZGRpdjEyMSBkaXZpZGUgIDIuMjAwIDIgICAgIC0+IDEuMTAwCisKK2RkZGl2MTMwIGRpdmlkZSAgMTIzNDUgIDQuOTk5ICAtPiAgMjQ2OS40OTM4OTg3Nzk3NTYgICAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEzMSBkaXZpZGUgIDEyMzQ1ICA0Ljk5ICAgLT4gIDI0NzMuOTQ3ODk1NzkxNTgzICAgIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMzIgZGl2aWRlICAxMjM0NSAgNC45ICAgIC0+ICAyNTE5LjM4Nzc1NTEwMjA0MSAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTMzIGRpdmlkZSAgMTIzNDUgIDUgICAgICAtPiAgMjQ2OQorZGRkaXYxMzQgZGl2aWRlICAxMjM0NSAgNS4xICAgIC0+ICAyNDIwLjU4ODIzNTI5NDExOCAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTM1IGRpdmlkZSAgMTIzNDUgIDUuMDEgICAtPiAgMjQ2NC4wNzE4NTYyODc0MjUgICAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEzNiBkaXZpZGUgIDEyMzQ1ICA1LjAwMSAgLT4gIDI0NjguNTA2Mjk4NzQwMjUyICAgIEluZXhhY3QgUm91bmRlZAorCistLSB0ZXN0IHBvc3NpYmx5IGltcHJlY2lzZSByZXN1bHRzCitkZGRpdjIyMCBkaXZpZGUgMzkxICAgNTk3IC0+ICAwLjY1NDk0MTM3MzUzNDMzODQgIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMjEgZGl2aWRlIDM5MSAgLTU5NyAtPiAtMC42NTQ5NDEzNzM1MzQzMzg0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjIyIGRpdmlkZSAtMzkxICA1OTcgLT4gLTAuNjU0OTQxMzczNTM0MzM4NCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIyMyBkaXZpZGUgLTM5MSAtNTk3IC0+ICAwLjY1NDk0MTM3MzUzNDMzODQgIEluZXhhY3QgUm91bmRlZAorCistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3csIHNvbWUgd2l0aCBjb2VmZmljaWVudCBwYWRkaW5nCitkZGRpdjI3MCBkaXZpZGUgMSAxZTM4NCAgICAgICAgICAgICAgICAgIC0+IDFFLTM4NCAgICAgICAgICAgICAgICAgU3Vibm9ybWFsCitkZGRpdjI3MSBkaXZpZGUgMSAwLjllMzg0ICAgICAgICAgICAgICAgIC0+IDEuMTExMTExMTExMTExMTFFLTM4NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkZGl2MjcyIGRpdmlkZSAxIDAuOTllMzg0ICAgICAgICAgICAgICAgLT4gMS4wMTAxMDEwMTAxMDEwMUUtMzg0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRkaXYyNzMgZGl2aWRlIDEgMC45OTk5OTk5OTk5OTk5OTk5ZTM4NCAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGRpdjI3NCBkaXZpZGUgOWUzODQgICAgMSAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZAorZGRkaXYyNzUgZGl2aWRlIDkuOWUzODQgIDEgICAgICAgICAgICAgICAtPiA5LjkwMDAwMDAwMDAwMDAwMEUrMzg0IENsYW1wZWQKK2RkZGl2Mjc2IGRpdmlkZSA5Ljk5ZTM4NCAxICAgICAgICAgICAgICAgLT4gOS45OTAwMDAwMDAwMDAwMDBFKzM4NCBDbGFtcGVkCitkZGRpdjI3NyBkaXZpZGUgOS45OTk5OTk5OTk5OTk5ZTM4NCAxICAgIC0+IDkuOTk5OTk5OTk5OTk5OTAwRSszODQgQ2xhbXBlZAorZGRkaXYyNzggZGl2aWRlIDkuOTk5OTk5OTk5OTk5OTllMzg0IDEgICAtPiA5Ljk5OTk5OTk5OTk5OTk5MEUrMzg0IENsYW1wZWQKK2RkZGl2Mjc5IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5OWUzODQgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorCitkZGRpdjI4NSBkaXZpZGUgOS45ZTM4NCAgMS4xICAgICAgICAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IENsYW1wZWQKK2RkZGl2Mjg2IGRpdmlkZSA5Ljk5ZTM4NCAxLjEgICAgICAgICAgICAgIC0+IDkuMDgxODE4MTgxODE4MTgyRSszODQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjI4NyBkaXZpZGUgOS45OTk5OTk5OTk5OTk5ZTM4NCAxLjEgICAtPiA5LjA5MDkwOTA5MDkwOTAwMEUrMzg0IENsYW1wZWQKK2RkZGl2Mjg4IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5ZTM4NCAxLjEgIC0+IDkuMDkwOTA5MDkwOTA5MDgyRSszODQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjI4OSBkaXZpZGUgOS45OTk5OTk5OTk5OTk5OTllMzg0IDEuMSAtPiA5LjA5MDkwOTA5MDkwOTA5MEUrMzg0IENsYW1wZWQKKworCistLSBEaXZpZGUgaW50byAwIHRlc3RzCitkZGRpdjMwMSBkaXZpZGUgICAgMCAgICA3ICAgICAtPiAwCitkZGRpdjMwMiBkaXZpZGUgICAgMCAgICA3RS01ICAtPiAwRSs1CitkZGRpdjMwMyBkaXZpZGUgICAgMCAgICA3RS0xICAtPiAwRSsxCitkZGRpdjMwNCBkaXZpZGUgICAgMCAgICA3RSsxICAtPiAwLjAKK2RkZGl2MzA1IGRpdmlkZSAgICAwICAgIDdFKzUgIC0+IDAuMDAwMDAKK2RkZGl2MzA2IGRpdmlkZSAgICAwICAgIDdFKzYgIC0+IDAuMDAwMDAwCitkZGRpdjMwNyBkaXZpZGUgICAgMCAgICA3RSs3ICAtPiAwRS03CitkZGRpdjMwOCBkaXZpZGUgICAgMCAgIDcwRS01ICAtPiAwRSs1CitkZGRpdjMwOSBkaXZpZGUgICAgMCAgIDcwRS0xICAtPiAwRSsxCitkZGRpdjMxMCBkaXZpZGUgICAgMCAgIDcwRSswICAtPiAwCitkZGRpdjMxMSBkaXZpZGUgICAgMCAgIDcwRSsxICAtPiAwLjAKK2RkZGl2MzEyIGRpdmlkZSAgICAwICAgNzBFKzUgIC0+IDAuMDAwMDAKK2RkZGl2MzEzIGRpdmlkZSAgICAwICAgNzBFKzYgIC0+IDAuMDAwMDAwCitkZGRpdjMxNCBkaXZpZGUgICAgMCAgIDcwRSs3ICAtPiAwRS03CitkZGRpdjMxNSBkaXZpZGUgICAgMCAgNzAwRS01ICAtPiAwRSs1CitkZGRpdjMxNiBkaXZpZGUgICAgMCAgNzAwRS0xICAtPiAwRSsxCitkZGRpdjMxNyBkaXZpZGUgICAgMCAgNzAwRSswICAtPiAwCitkZGRpdjMxOCBkaXZpZGUgICAgMCAgNzAwRSsxICAtPiAwLjAKK2RkZGl2MzE5IGRpdmlkZSAgICAwICA3MDBFKzUgIC0+IDAuMDAwMDAKK2RkZGl2MzIwIGRpdmlkZSAgICAwICA3MDBFKzYgIC0+IDAuMDAwMDAwCitkZGRpdjMyMSBkaXZpZGUgICAgMCAgNzAwRSs3ICAtPiAwRS03CitkZGRpdjMyMiBkaXZpZGUgICAgMCAgNzAwRSs3NyAtPiAwRS03NworCitkZGRpdjMzMSBkaXZpZGUgMEUtMyAgICA3RS01ICAtPiAwRSsyCitkZGRpdjMzMiBkaXZpZGUgMEUtMyAgICA3RS0xICAtPiAwLjAwCitkZGRpdjMzMyBkaXZpZGUgMEUtMyAgICA3RSsxICAtPiAwLjAwMDAKK2RkZGl2MzM0IGRpdmlkZSAwRS0zICAgIDdFKzUgIC0+IDBFLTgKK2RkZGl2MzM1IGRpdmlkZSAwRS0xICAgIDdFLTUgIC0+IDBFKzQKK2RkZGl2MzM2IGRpdmlkZSAwRS0xICAgIDdFLTEgIC0+IDAKK2RkZGl2MzM3IGRpdmlkZSAwRS0xICAgIDdFKzEgIC0+IDAuMDAKK2RkZGl2MzM4IGRpdmlkZSAwRS0xICAgIDdFKzUgIC0+IDAuMDAwMDAwCitkZGRpdjMzOSBkaXZpZGUgMEUrMSAgICA3RS01ICAtPiAwRSs2CitkZGRpdjM0MCBkaXZpZGUgMEUrMSAgICA3RS0xICAtPiAwRSsyCitkZGRpdjM0MSBkaXZpZGUgMEUrMSAgICA3RSsxICAtPiAwCitkZGRpdjM0MiBkaXZpZGUgMEUrMSAgICA3RSs1ICAtPiAwLjAwMDAKK2RkZGl2MzQzIGRpdmlkZSAwRSszICAgIDdFLTUgIC0+IDBFKzgKK2RkZGl2MzQ0IGRpdmlkZSAwRSszICAgIDdFLTEgIC0+IDBFKzQKK2RkZGl2MzQ1IGRpdmlkZSAwRSszICAgIDdFKzEgIC0+IDBFKzIKK2RkZGl2MzQ2IGRpdmlkZSAwRSszICAgIDdFKzUgIC0+IDAuMDAKKworLS0gVGhlc2Ugd2VyZSAnaW5wdXQgcm91bmRpbmcnCitkZGRpdjQ0MSBkaXZpZGUgMTIzNDU2NzgwMDAgMSAtPiAxMjM0NTY3ODAwMAorZGRkaXY0NDIgZGl2aWRlIDEgMTIzNDU2NzgwMDAgLT4gOC4xMDAwMDA2NjQyMDAwNTRFLTExIEluZXhhY3QgUm91bmRlZAorZGRkaXY0NDMgZGl2aWRlIDEyMzQ1Njc4MDAgIDEgLT4gMTIzNDU2NzgwMAorZGRkaXY0NDQgZGl2aWRlIDEgMTIzNDU2NzgwMCAgLT4gOC4xMDAwMDA2NjQyMDAwNTRFLTEwIEluZXhhY3QgUm91bmRlZAorZGRkaXY0NDUgZGl2aWRlIDEyMzQ1Njc4OTAgIDEgLT4gMTIzNDU2Nzg5MAorZGRkaXY0NDYgZGl2aWRlIDEgMTIzNDU2Nzg5MCAgLT4gOC4xMDAwMDAwNzM3MTAwMDFFLTEwIEluZXhhY3QgUm91bmRlZAorZGRkaXY0NDcgZGl2aWRlIDEyMzQ1Njc4OTEgIDEgLT4gMTIzNDU2Nzg5MQorZGRkaXY0NDggZGl2aWRlIDEgMTIzNDU2Nzg5MSAgLT4gOC4xMDAwMDAwNjcxNDkwMDFFLTEwIEluZXhhY3QgUm91bmRlZAorZGRkaXY0NDkgZGl2aWRlIDEyMzQ1Njc4OTAxIDEgLT4gMTIzNDU2Nzg5MDEKK2RkZGl2NDUwIGRpdmlkZSAxIDEyMzQ1Njc4OTAxIC0+IDguMTAwMDAwMDczMDUzOTAxRS0xMSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDUxIGRpdmlkZSAxMjM0NTY3ODk2ICAxIC0+IDEyMzQ1Njc4OTYKK2RkZGl2NDUyIGRpdmlkZSAxIDEyMzQ1Njc4OTYgIC0+IDguMTAwMDAwMDM0MzQ0MDAwRS0xMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gaGlnaC1sb3dzCitkZGRpdjQ1MyBkaXZpZGUgMWUrMSAgIDEgICAgLT4gICAxRSsxCitkZGRpdjQ1NCBkaXZpZGUgMWUrMSAgIDEuMCAgLT4gICAxRSsxCitkZGRpdjQ1NSBkaXZpZGUgMWUrMSAgIDEuMDAgLT4gICAxRSsxCitkZGRpdjQ1NiBkaXZpZGUgMWUrMiAgIDIgICAgLT4gICA1RSsxCitkZGRpdjQ1NyBkaXZpZGUgMWUrMiAgIDIuMCAgLT4gICA1RSsxCitkZGRpdjQ1OCBkaXZpZGUgMWUrMiAgIDIuMDAgLT4gICA1RSsxCisKKy0tIHNvbWUgZnJvbSBJRUVFIGRpc2N1c3Npb25zCitkZGRpdjQ2MCBkaXZpZGUgM2UwICAgICAgMmUwICAgICAtPiAxLjUKK2RkZGl2NDYxIGRpdmlkZSAzMGUtMSAgICAyZTAgICAgIC0+IDEuNQorZGRkaXY0NjIgZGl2aWRlIDMwMGUtMiAgIDJlMCAgICAgLT4gMS41MAorZGRkaXY0NjQgZGl2aWRlIDMwMDBlLTMgIDJlMCAgICAgLT4gMS41MDAKK2RkZGl2NDY1IGRpdmlkZSAzZTAgICAgICAyMGUtMSAgIC0+IDEuNQorZGRkaXY0NjYgZGl2aWRlIDMwZS0xICAgIDIwZS0xICAgLT4gMS41CitkZGRpdjQ2NyBkaXZpZGUgMzAwZS0yICAgMjBlLTEgICAtPiAxLjUKK2RkZGl2NDY4IGRpdmlkZSAzMDAwZS0zICAyMGUtMSAgIC0+IDEuNTAKK2RkZGl2NDY5IGRpdmlkZSAzZTAgICAgICAyMDBlLTIgIC0+IDEuNQorZGRkaXY0NzAgZGl2aWRlIDMwZS0xICAgIDIwMGUtMiAgLT4gMS41CitkZGRpdjQ3MSBkaXZpZGUgMzAwZS0yICAgMjAwZS0yICAtPiAxLjUKK2RkZGl2NDcyIGRpdmlkZSAzMDAwZS0zICAyMDBlLTIgIC0+IDEuNQorZGRkaXY0NzMgZGl2aWRlIDNlMCAgICAgIDIwMDBlLTMgLT4gMS41CitkZGRpdjQ3NCBkaXZpZGUgMzBlLTEgICAgMjAwMGUtMyAtPiAxLjUKK2RkZGl2NDc1IGRpdmlkZSAzMDBlLTIgICAyMDAwZS0zIC0+IDEuNQorZGRkaXY0NzYgZGl2aWRlIDMwMDBlLTMgIDIwMDBlLTMgLT4gMS41CisKKy0tIHNvbWUgcmVjaXByb2NhbHMKK2RkZGl2NDgwIGRpdmlkZSAxICAgICAgICAxLjBFKzMzIC0+IDFFLTMzCitkZGRpdjQ4MSBkaXZpZGUgMSAgICAgICAgMTBFKzMzICAtPiAxRS0zNAorZGRkaXY0ODIgZGl2aWRlIDEgICAgICAgIDEuMEUtMzMgLT4gMUUrMzMKK2RkZGl2NDgzIGRpdmlkZSAxICAgICAgICAxMEUtMzMgIC0+IDFFKzMyCisKKy0tIFJNUyBkaXNjdXNzaW9uIHRhYmxlCitkZGRpdjQ4NCBkaXZpZGUgMGU1ICAgICAxZTMgLT4gICAwRSsyCitkZGRpdjQ4NSBkaXZpZGUgMGU1ICAgICAyZTMgLT4gICAwRSsyCitkZGRpdjQ4NiBkaXZpZGUgMGU1ICAgIDEwZTIgLT4gICAwRSszCitkZGRpdjQ4NyBkaXZpZGUgMGU1ICAgIDIwZTIgLT4gICAwRSszCitkZGRpdjQ4OCBkaXZpZGUgMGU1ICAgMTAwZTEgLT4gICAwRSs0CitkZGRpdjQ4OSBkaXZpZGUgMGU1ICAgMjAwZTEgLT4gICAwRSs0CisKK2RkZGl2NDkxIGRpdmlkZSAxZTUgICAgIDFlMyAtPiAgIDFFKzIKK2RkZGl2NDkyIGRpdmlkZSAxZTUgICAgIDJlMyAtPiAgIDVFKzEKK2RkZGl2NDkzIGRpdmlkZSAxZTUgICAgMTBlMiAtPiAgIDFFKzIKK2RkZGl2NDk0IGRpdmlkZSAxZTUgICAgMjBlMiAtPiAgIDVFKzEKK2RkZGl2NDk1IGRpdmlkZSAxZTUgICAxMDBlMSAtPiAgIDFFKzIKK2RkZGl2NDk2IGRpdmlkZSAxZTUgICAyMDBlMSAtPiAgIDVFKzEKKworLS0gdHJ5emVyb3MgY2FzZXMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkZGRpdjQ5NyAgZGl2aWRlICAwRSszODAgMTAwMEUtMTMgIC0+IDBFKzM2OSBDbGFtcGVkCitkZGRpdjQ5OCAgZGl2aWRlICAwRS0zOTAgMTAwMEUrMTMgIC0+IDBFLTM5OCBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX3VwCisKKy0tIGZvY3VzIG9uIHRyYWlsaW5nIHplcm9zIGlzc3VlcworZGRkaXY1MDAgZGl2aWRlICAxICAgICAgOS45ICAgIC0+ICAwLjEwMTAxMDEwMTAxMDEwMTAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY1MDEgZGl2aWRlICAxICAgICAgOS4wOSAgIC0+ICAwLjExMDAxMTAwMTEwMDExMDAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY1MDIgZGl2aWRlICAxICAgICAgOS4wMDkgIC0+ICAwLjExMTAwMDExMTAwMDExMTAgIEluZXhhY3QgUm91bmRlZAorCitkZGRpdjUxMSBkaXZpZGUgMSAgICAgICAgIDIgICAgLT4gMC41CitkZGRpdjUxMiBkaXZpZGUgMS4wICAgICAgIDIgICAgLT4gMC41CitkZGRpdjUxMyBkaXZpZGUgMS4wMCAgICAgIDIgICAgLT4gMC41MAorZGRkaXY1MTQgZGl2aWRlIDEuMDAwICAgICAyICAgIC0+IDAuNTAwCitkZGRpdjUxNSBkaXZpZGUgMS4wMDAwICAgIDIgICAgLT4gMC41MDAwCitkZGRpdjUxNiBkaXZpZGUgMS4wMDAwMCAgIDIgICAgLT4gMC41MDAwMAorZGRkaXY1MTcgZGl2aWRlIDEuMDAwMDAwICAyICAgIC0+IDAuNTAwMDAwCitkZGRpdjUxOCBkaXZpZGUgMS4wMDAwMDAwIDIgICAgLT4gMC41MDAwMDAwCitkZGRpdjUxOSBkaXZpZGUgMS4wMCAgICAgIDIuMDAgLT4gMC41CisKK2RkZGl2NTIxIGRpdmlkZSAyICAgIDEgICAgICAgICAtPiAyCitkZGRpdjUyMiBkaXZpZGUgMiAgICAxLjAgICAgICAgLT4gMgorZGRkaXY1MjMgZGl2aWRlIDIgICAgMS4wMCAgICAgIC0+IDIKK2RkZGl2NTI0IGRpdmlkZSAyICAgIDEuMDAwICAgICAtPiAyCitkZGRpdjUyNSBkaXZpZGUgMiAgICAxLjAwMDAgICAgLT4gMgorZGRkaXY1MjYgZGl2aWRlIDIgICAgMS4wMDAwMCAgIC0+IDIKK2RkZGl2NTI3IGRpdmlkZSAyICAgIDEuMDAwMDAwICAtPiAyCitkZGRpdjUyOCBkaXZpZGUgMiAgICAxLjAwMDAwMDAgLT4gMgorZGRkaXY1MjkgZGl2aWRlIDIuMDAgMS4wMCAgICAgIC0+IDIKKworZGRkaXY1MzAgZGl2aWRlICAyLjQwICAgMiAgICAgIC0+ICAxLjIwCitkZGRpdjUzMSBkaXZpZGUgIDIuNDAgICA0ICAgICAgLT4gIDAuNjAKK2RkZGl2NTMyIGRpdmlkZSAgMi40MCAgMTAgICAgICAtPiAgMC4yNAorZGRkaXY1MzMgZGl2aWRlICAyLjQwICAgMi4wICAgIC0+ICAxLjIKK2RkZGl2NTM0IGRpdmlkZSAgMi40MCAgIDQuMCAgICAtPiAgMC42CitkZGRpdjUzNSBkaXZpZGUgIDIuNDAgIDEwLjAgICAgLT4gIDAuMjQKK2RkZGl2NTM2IGRpdmlkZSAgMi40MCAgIDIuMDAgICAtPiAgMS4yCitkZGRpdjUzNyBkaXZpZGUgIDIuNDAgICA0LjAwICAgLT4gIDAuNgorZGRkaXY1MzggZGl2aWRlICAyLjQwICAxMC4wMCAgIC0+ICAwLjI0CitkZGRpdjUzOSBkaXZpZGUgIDAuOSAgICAwLjEgICAgLT4gIDkKK2RkZGl2NTQwIGRpdmlkZSAgMC45ICAgIDAuMDEgICAtPiAgOUUrMQorZGRkaXY1NDEgZGl2aWRlICAwLjkgICAgMC4wMDEgIC0+ICA5RSsyCitkZGRpdjU0MiBkaXZpZGUgIDUgICAgICAyICAgICAgLT4gIDIuNQorZGRkaXY1NDMgZGl2aWRlICA1ICAgICAgMi4wICAgIC0+ICAyLjUKK2RkZGl2NTQ0IGRpdmlkZSAgNSAgICAgIDIuMDAgICAtPiAgMi41CitkZGRpdjU0NSBkaXZpZGUgIDUgICAgICAyMCAgICAgLT4gIDAuMjUKK2RkZGl2NTQ2IGRpdmlkZSAgNSAgICAgIDIwLjAgICAtPiAgMC4yNQorZGRkaXY1NDcgZGl2aWRlICAyLjQwMCAgMiAgICAgIC0+ICAxLjIwMAorZGRkaXY1NDggZGl2aWRlICAyLjQwMCAgMi4wICAgIC0+ICAxLjIwCitkZGRpdjU0OSBkaXZpZGUgIDIuNDAwICAyLjQwMCAgLT4gIDEKKworZGRkaXY1NTAgZGl2aWRlICAyNDAgICAgMSAgICAgIC0+ICAyNDAKK2RkZGl2NTUxIGRpdmlkZSAgMjQwICAgIDEwICAgICAtPiAgMjQKK2RkZGl2NTUyIGRpdmlkZSAgMjQwICAgIDEwMCAgICAtPiAgMi40CitkZGRpdjU1MyBkaXZpZGUgIDI0MCAgICAxMDAwICAgLT4gIDAuMjQKK2RkZGl2NTU0IGRpdmlkZSAgMjQwMCAgIDEgICAgICAtPiAgMjQwMAorZGRkaXY1NTUgZGl2aWRlICAyNDAwICAgMTAgICAgIC0+ICAyNDAKK2RkZGl2NTU2IGRpdmlkZSAgMjQwMCAgIDEwMCAgICAtPiAgMjQKK2RkZGl2NTU3IGRpdmlkZSAgMjQwMCAgIDEwMDAgICAtPiAgMi40CisKKy0tICt2ZSBleHBvbmVudAorZGRkaXY2MDAgZGl2aWRlICAyLjRFKzkgICAgIDIgIC0+ICAxLjJFKzkKK2RkZGl2NjAxIGRpdmlkZSAgMi40MEUrOSAgICAyICAtPiAgMS4yMEUrOQorZGRkaXY2MDIgZGl2aWRlICAyLjQwMEUrOSAgIDIgIC0+ICAxLjIwMEUrOQorZGRkaXY2MDMgZGl2aWRlICAyLjQwMDBFKzkgIDIgIC0+ICAxLjIwMDBFKzkKK2RkZGl2NjA0IGRpdmlkZSAgMjRFKzggICAgICAyICAtPiAgMS4yRSs5CitkZGRpdjYwNSBkaXZpZGUgIDI0MEUrNyAgICAgMiAgLT4gIDEuMjBFKzkKK2RkZGl2NjA2IGRpdmlkZSAgMjQwMEUrNiAgICAyICAtPiAgMS4yMDBFKzkKK2RkZGl2NjA3IGRpdmlkZSAgMjQwMDBFKzUgICAyICAtPiAgMS4yMDAwRSs5CisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK2RkZGl2NzMxIGRpdmlkZSA1LjAwIDFFLTMgICAgLT4gNS4wMEUrMworZGRkaXY3MzIgZGl2aWRlIDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGRpdjczMyBkaXZpZGUgMDAuMDAgMEUtMyAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZGl2NzM0IGRpdmlkZSAgMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkaXY3MzUgZGl2aWRlIC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGRpdjczNiBkaXZpZGUgLTAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKKworZGRkaXY3NDEgZGl2aWRlICAwICAgIC0xICAgICAtPiAtMAorZGRkaXY3NDIgZGl2aWRlIC0wICAgIC0xICAgICAtPiAgMAorZGRkaXY3NDMgZGl2aWRlICAwICAgICAxICAgICAtPiAgMAorZGRkaXY3NDQgZGl2aWRlIC0wICAgICAxICAgICAtPiAtMAorZGRkaXY3NDUgZGl2aWRlIC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY3NDYgZGl2aWRlIC0xICAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY3NDcgZGl2aWRlICAxICAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY3NDggZGl2aWRlICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkZGRpdjc1MSBkaXZpZGUgIDAuMCAgLTEgICAgIC0+IC0wLjAKK2RkZGl2NzUyIGRpdmlkZSAtMC4wICAtMSAgICAgLT4gIDAuMAorZGRkaXY3NTMgZGl2aWRlICAwLjAgICAxICAgICAtPiAgMC4wCitkZGRpdjc1NCBkaXZpZGUgLTAuMCAgIDEgICAgIC0+IC0wLjAKK2RkZGl2NzU1IGRpdmlkZSAtMS4wICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2NzU2IGRpdmlkZSAtMS4wICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2NzU3IGRpdmlkZSAgMS4wICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2NzU4IGRpdmlkZSAgMS4wICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZGRkaXY3NjEgZGl2aWRlICAwICAgIC0xLjAgICAtPiAtMEUrMQorZGRkaXY3NjIgZGl2aWRlIC0wICAgIC0xLjAgICAtPiAgMEUrMQorZGRkaXY3NjMgZGl2aWRlICAwICAgICAxLjAgICAtPiAgMEUrMQorZGRkaXY3NjQgZGl2aWRlIC0wICAgICAxLjAgICAtPiAtMEUrMQorZGRkaXY3NjUgZGl2aWRlIC0xICAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY3NjYgZGl2aWRlIC0xICAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY3NjcgZGl2aWRlICAxICAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY3NjggZGl2aWRlICAxICAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkZGRpdjc3MSBkaXZpZGUgIDAuMCAgLTEuMCAgIC0+IC0wCitkZGRpdjc3MiBkaXZpZGUgLTAuMCAgLTEuMCAgIC0+ICAwCitkZGRpdjc3MyBkaXZpZGUgIDAuMCAgIDEuMCAgIC0+ICAwCitkZGRpdjc3NCBkaXZpZGUgLTAuMCAgIDEuMCAgIC0+IC0wCitkZGRpdjc3NSBkaXZpZGUgLTEuMCAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc3NiBkaXZpZGUgLTEuMCAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc3NyBkaXZpZGUgIDEuMCAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjc3OCBkaXZpZGUgIDEuMCAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIFNwZWNpYWxzCitkZGRpdjc4MCBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2NzgxIGRpdmlkZSAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkZGRpdjc4MiBkaXZpZGUgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGRkaXY3ODMgZGl2aWRlICBJbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RkZGl2Nzg0IGRpdmlkZSAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkZGRpdjc4NSBkaXZpZGUgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZGRkaXY3ODYgZGl2aWRlICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RkZGl2Nzg3IGRpdmlkZSAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY3ODggZGl2aWRlIC0xMDAwICBJbmYgICAtPiAtMEUtMzk4IENsYW1wZWQKK2RkZGl2Nzg5IGRpdmlkZSAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY3OTAgZGl2aWRlIC0xICAgICBJbmYgICAtPiAtMEUtMzk4IENsYW1wZWQKK2RkZGl2NzkxIGRpdmlkZSAtMCAgICAgSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCitkZGRpdjc5MiBkaXZpZGUgIDAgICAgIEluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZAorZGRkaXY3OTMgZGl2aWRlICAxICAgICBJbmYgICAtPiAgMEUtMzk4IENsYW1wZWQKK2RkZGl2Nzk0IGRpdmlkZSAgMTAwMCAgSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkCitkZGRpdjc5NSBkaXZpZGUgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRkaXY4MDAgZGl2aWRlIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjgwMSBkaXZpZGUgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZGRkaXY4MDIgZGl2aWRlIC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RkZGl2ODAzIGRpdmlkZSAtSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkZGRpdjgwNCBkaXZpZGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZGRkaXY4MDUgZGl2aWRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2RkZGl2ODA2IGRpdmlkZSAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkZGRpdjgwNyBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODA4IGRpdmlkZSAtMTAwMCAgSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCitkZGRpdjgwOSBkaXZpZGUgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODEwIGRpdmlkZSAtMSAgICAtSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkCitkZGRpdjgxMSBkaXZpZGUgLTAgICAgLUluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZAorZGRkaXY4MTIgZGl2aWRlICAwICAgIC1JbmYgICAtPiAtMEUtMzk4IENsYW1wZWQKK2RkZGl2ODEzIGRpdmlkZSAgMSAgICAtSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCitkZGRpdjgxNCBkaXZpZGUgIDEwMDAgLUluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAorZGRkaXY4MTUgZGl2aWRlICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkZGl2ODIxIGRpdmlkZSAgTmFOIC1JbmYgICAgLT4gIE5hTgorZGRkaXY4MjIgZGl2aWRlICBOYU4gLTEwMDAgICAtPiAgTmFOCitkZGRpdjgyMyBkaXZpZGUgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RkZGl2ODI0IGRpdmlkZSAgTmFOIC0wICAgICAgLT4gIE5hTgorZGRkaXY4MjUgZGl2aWRlICBOYU4gIDAgICAgICAtPiAgTmFOCitkZGRpdjgyNiBkaXZpZGUgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RkZGl2ODI3IGRpdmlkZSAgTmFOICAxMDAwICAgLT4gIE5hTgorZGRkaXY4MjggZGl2aWRlICBOYU4gIEluZiAgICAtPiAgTmFOCitkZGRpdjgyOSBkaXZpZGUgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RkZGl2ODMwIGRpdmlkZSAtSW5mICBOYU4gICAgLT4gIE5hTgorZGRkaXY4MzEgZGl2aWRlIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkZGRpdjgzMiBkaXZpZGUgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RkZGl2ODMzIGRpdmlkZSAtMCAgICBOYU4gICAgLT4gIE5hTgorZGRkaXY4MzQgZGl2aWRlICAwICAgIE5hTiAgICAtPiAgTmFOCitkZGRpdjgzNSBkaXZpZGUgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RkZGl2ODM2IGRpdmlkZSAgMTAwMCBOYU4gICAgLT4gIE5hTgorZGRkaXY4MzcgZGl2aWRlICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2RkZGl2ODQxIGRpdmlkZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODQyIGRpdmlkZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODQzIGRpdmlkZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODQ0IGRpdmlkZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODQ1IGRpdmlkZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODQ2IGRpdmlkZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODQ3IGRpdmlkZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODQ4IGRpdmlkZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODQ5IGRpdmlkZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODUwIGRpdmlkZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODUxIGRpdmlkZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODUyIGRpdmlkZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODUzIGRpdmlkZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODU0IGRpdmlkZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODU1IGRpdmlkZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODU2IGRpdmlkZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODU3IGRpdmlkZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODU4IGRpdmlkZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODU5IGRpdmlkZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRkaXY4NjEgZGl2aWRlICBOYU45IC1JbmYgICAtPiAgTmFOOQorZGRkaXY4NjIgZGl2aWRlICBOYU44ICAxMDAwICAtPiAgTmFOOAorZGRkaXY4NjMgZGl2aWRlICBOYU43ICBJbmYgICAtPiAgTmFONworZGRkaXY4NjQgZGl2aWRlICBOYU42ICBOYU41ICAtPiAgTmFONgorZGRkaXY4NjUgZGl2aWRlIC1JbmYgICBOYU40ICAtPiAgTmFONAorZGRkaXY4NjYgZGl2aWRlIC0xMDAwICBOYU4zICAtPiAgTmFOMworZGRkaXY4NjcgZGl2aWRlICBJbmYgICBOYU4yICAtPiAgTmFOMgorCitkZGRpdjg3MSBkaXZpZGUgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NzIgZGl2aWRlICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODczIGRpdmlkZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg3NCBkaXZpZGUgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NzUgZGl2aWRlICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODc2IGRpdmlkZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg3NyBkaXZpZGUgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4NzggZGl2aWRlICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODc5IGRpdmlkZSAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK2RkZGl2ODgxIGRpdmlkZSAgLU5hTjkgIC1JbmYgICAtPiAgLU5hTjkKK2RkZGl2ODgyIGRpdmlkZSAgLU5hTjggICAxMDAwICAtPiAgLU5hTjgKK2RkZGl2ODgzIGRpdmlkZSAgLU5hTjcgICBJbmYgICAtPiAgLU5hTjcKK2RkZGl2ODg0IGRpdmlkZSAgLU5hTjYgIC1OYU41ICAtPiAgLU5hTjYKK2RkZGl2ODg1IGRpdmlkZSAgLUluZiAgIC1OYU40ICAtPiAgLU5hTjQKK2RkZGl2ODg2IGRpdmlkZSAgLTEwMDAgIC1OYU4zICAtPiAgLU5hTjMKK2RkZGl2ODg3IGRpdmlkZSAgIEluZiAgIC1OYU4yICAtPiAgLU5hTjIKKworZGRkaXY4OTEgZGl2aWRlIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODkyIGRpdmlkZSAtc05hTjk4IC0xICAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg5MyBkaXZpZGUgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4OTQgZGl2aWRlIC1zTmFOOTYgLXNOYU45NCAtPiAtTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODk1IGRpdmlkZSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg5NiBkaXZpZGUgLUluZiAgICAtc05hTjkyIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRkaXY4OTcgZGl2aWRlICAwICAgICAgLXNOYU45MSAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2ODk4IGRpdmlkZSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZGRpdjg5OSBkaXZpZGUgLU5hTiAgICAtc05hTjg5IC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBWYXJpb3VzIGZsYXZvdXJzIG9mIGRpdmlkZSBieSAwCitkZGRpdjkwMSBkaXZpZGUgICAgMCAgICAgICAwICAgLT4gIE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZGl2OTAyIGRpdmlkZSAgICAwLjBFNSAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkaXY5MDMgZGl2aWRlICAgIDAuMDAwICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGRpdjkwNCBkaXZpZGUgICAgMC4wMDAxICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTA1IGRpdmlkZSAgICAwLjAxICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MDYgZGl2aWRlICAgIDAuMSAgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkwNyBkaXZpZGUgICAgMSAgICAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTA4IGRpdmlkZSAgICAxICAgICAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MDkgZGl2aWRlICAgMTAgICAgICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkxMCBkaXZpZGUgICAxRSsxMDAgICAwLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTExIGRpdmlkZSAgIDFFKzEwMCAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkZGRpdjkyMSBkaXZpZGUgICAtMC4wMDAxICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTIyIGRpdmlkZSAgIC0wLjAxICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MjMgZGl2aWRlICAgLTAuMSAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkyNCBkaXZpZGUgICAtMSAgICAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTI1IGRpdmlkZSAgIC0xICAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MjYgZGl2aWRlICAtMTAgICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkyNyBkaXZpZGUgIC0xRSsxMDAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTI4IGRpdmlkZSAgLTFFKzEwMCAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkZGRpdjkzMSBkaXZpZGUgICAgMC4wMDAxIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTMyIGRpdmlkZSAgICAwLjAxICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MzMgZGl2aWRlICAgIDAuMSAgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkzNCBkaXZpZGUgICAgMSAgICAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTM1IGRpdmlkZSAgICAxICAgICAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5MzYgZGl2aWRlICAgMTAgICAgICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjkzNyBkaXZpZGUgICAxRSsxMDAgIC0wLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTM4IGRpdmlkZSAgIDFFKzEwMCAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkZGRpdjk0MSBkaXZpZGUgICAtMC4wMDAxIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTQyIGRpdmlkZSAgIC0wLjAxICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5NDMgZGl2aWRlICAgLTAuMSAgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjk0NCBkaXZpZGUgICAtMSAgICAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTQ1IGRpdmlkZSAgIC0xICAgICAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkaXY5NDYgZGl2aWRlICAtMTAgICAgICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGRpdjk0NyBkaXZpZGUgIC0xRSsxMDAgIC0wLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZGl2OTQ4IGRpdmlkZSAgLTFFKzEwMCAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK2RkZGl2MTAyMSAgZGl2aWRlIDFFMCAgICAgICAgICAxRTAgLT4gMQorZGRkaXYxMDIyICBkaXZpZGUgMUUwICAgICAgICAgIDJFMCAtPiAwLjUKK2RkZGl2MTAyMyAgZGl2aWRlIDFFMCAgICAgICAgICAzRTAgLT4gMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDI0ICBkaXZpZGUgMTAwRS0yICAgMTAwMEUtMyAtPiAxCitkZGRpdjEwMjUgIGRpdmlkZSAyNEUtMSAgICAgICAgMkUwIC0+IDEuMgorZGRkaXYxMDI2ICBkaXZpZGUgMjQwMEUtMyAgICAgIDJFMCAtPiAxLjIwMAorZGRkaXYxMDI3ICBkaXZpZGUgNUUwICAgICAgICAgIDJFMCAtPiAyLjUKK2RkZGl2MTAyOCAgZGl2aWRlIDVFMCAgICAgICAgMjBFLTEgLT4gMi41CitkZGRpdjEwMjkgIGRpdmlkZSA1RTAgICAgICAyMDAwRS0zIC0+IDIuNQorZGRkaXYxMDMwICBkaXZpZGUgNUUwICAgICAgICAgMkUtMSAtPiAyNQorZGRkaXYxMDMxICBkaXZpZGUgNUUwICAgICAgICAyMEUtMiAtPiAyNQorZGRkaXYxMDMyICBkaXZpZGUgNDgwRS0yICAgICAgIDNFMCAtPiAxLjYwCitkZGRpdjEwMzMgIGRpdmlkZSA0N0UtMSAgICAgICAgMkUwIC0+IDIuMzUKKworLS0gRUNNQVNjcmlwdCBiYWQgZXhhbXBsZXMKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KK2RkZGl2MTA0MCAgZGl2aWRlIDUgOSAgLT4gMC41NTU1NTU1NTU1NTU1NTU2IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorZGRkaXYxMDQxICBkaXZpZGUgNiAxMSAtPiAwLjU0NTQ1NDU0NTQ1NDU0NTUgSW5leGFjdCBSb3VuZGVkCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cworLS0gc2lnbnMKK2RkZGl2MTA1MSBkaXZpZGUgIDFlKzI3NyAgMWUtMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTA1MiBkaXZpZGUgIDFlKzI3NyAtMWUtMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTA1MyBkaXZpZGUgLTFlKzI3NyAgMWUtMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTA1NCBkaXZpZGUgLTFlKzI3NyAtMWUtMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTA1NSBkaXZpZGUgIDFlLTI3NyAgMWUrMzExIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRkaXYxMDU2IGRpdmlkZSAgMWUtMjc3IC0xZSszMTEgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGRpdjEwNTcgZGl2aWRlIC0xZS0yNzcgIDFlKzMxMSAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZGl2MTA1OCBkaXZpZGUgLTFlLTI3NyAtMWUrMzExIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykKK2RkZGl2MTA2MCBkaXZpZGUgMWUtMjkxIDFlKzEwMSAtPiAxRS0zOTIgU3Vibm9ybWFsCitkZGRpdjEwNjEgZGl2aWRlIDFlLTI5MSAxZSsxMDIgLT4gMUUtMzkzIFN1Ym5vcm1hbAorZGRkaXYxMDYyIGRpdmlkZSAxZS0yOTEgMWUrMTAzIC0+IDFFLTM5NCBTdWJub3JtYWwKK2RkZGl2MTA2MyBkaXZpZGUgMWUtMjkxIDFlKzEwNCAtPiAxRS0zOTUgU3Vibm9ybWFsCitkZGRpdjEwNjQgZGl2aWRlIDFlLTI5MSAxZSsxMDUgLT4gMUUtMzk2IFN1Ym5vcm1hbAorZGRkaXYxMDY1IGRpdmlkZSAxZS0yOTEgMWUrMTA2IC0+IDFFLTM5NyBTdWJub3JtYWwKK2RkZGl2MTA2NiBkaXZpZGUgMWUtMjkxIDFlKzEwNyAtPiAxRS0zOTggU3Vibm9ybWFsCitkZGRpdjEwNjcgZGl2aWRlIDFlLTI5MSAxZSsxMDggLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZGl2MTA2OCBkaXZpZGUgMWUtMjkxIDFlKzEwOSAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRkaXYxMDY5IGRpdmlkZSAxZS0yOTEgMWUrMTEwIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCistLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddCitkZGRpdjEwNzAgZGl2aWRlIDFlKzYwIDFlLTMyMSAtPiAxLjAwMDAwMDAwMDAwMEUrMzgxICBDbGFtcGVkCitkZGRpdjEwNzEgZGl2aWRlIDFlKzYwIDFlLTMyMiAtPiAxLjAwMDAwMDAwMDAwMDBFKzM4MiAgQ2xhbXBlZAorZGRkaXYxMDcyIGRpdmlkZSAxZSs2MCAxZS0zMjMgLT4gMS4wMDAwMDAwMDAwMDAwMEUrMzgzICBDbGFtcGVkCitkZGRpdjEwNzMgZGl2aWRlIDFlKzYwIDFlLTMyNCAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkCitkZGRpdjEwNzQgZGl2aWRlIDFlKzYwIDFlLTMyNSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTA3NSBkaXZpZGUgMWUrNjAgMWUtMzI2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDc2IGRpdmlkZSAxZSs2MCAxZS0zMjcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGRpdjEwNzcgZGl2aWRlIDFlKzYwIDFlLTMyOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTA3OCBkaXZpZGUgMWUrNjAgMWUtMzI5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRkaXYxMDc5IGRpdmlkZSAxZSs2MCAxZS0zMzAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK2RkZGl2MTEwMSBkaXZpZGUgIDEuMDAwMEUtMzk0ICAxICAgICAtPiAxLjAwMDBFLTM5NCBTdWJub3JtYWwKK2RkZGl2MTEwMiBkaXZpZGUgIDEuMDAwRS0zOTQgICAxZSsxICAtPiAxLjAwMEUtMzk1ICBTdWJub3JtYWwKK2RkZGl2MTEwMyBkaXZpZGUgIDEuMDBFLTM5NCAgICAxZSsyICAtPiAxLjAwRS0zOTYgICBTdWJub3JtYWwKK2RkZGl2MTEwNCBkaXZpZGUgIDEuMEUtMzk0ICAgICAxZSszICAtPiAxLjBFLTM5NyAgICBTdWJub3JtYWwKK2RkZGl2MTEwNSBkaXZpZGUgIDEuMEUtMzk0ICAgICAxZSs0ICAtPiAxRS0zOTggICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkZGRpdjExMDYgZGl2aWRlICAxLjNFLTM5NCAgICAgMWUrNCAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTA3IGRpdmlkZSAgMS41RS0zOTQgICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTEwOCBkaXZpZGUgIDEuN0UtMzk0ICAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMDkgZGl2aWRlICAyLjNFLTM5NCAgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTEwIGRpdmlkZSAgMi41RS0zOTQgICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTExMSBkaXZpZGUgIDIuN0UtMzk0ICAgICAxZSs0ICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMTIgZGl2aWRlICAxLjQ5RS0zOTQgICAgMWUrNCAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTEzIGRpdmlkZSAgMS41MEUtMzk0ICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTExNCBkaXZpZGUgIDEuNTFFLTM5NCAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMTUgZGl2aWRlICAyLjQ5RS0zOTQgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTE2IGRpdmlkZSAgMi41MEUtMzk0ICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTExNyBkaXZpZGUgIDIuNTFFLTM5NCAgICAxZSs0ICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkZGl2MTExOCBkaXZpZGUgIDFFLTM5NCAgICAgICAxZSs0ICAtPiAxRS0zOTggICAgIFN1Ym5vcm1hbAorZGRkaXYxMTE5IGRpdmlkZSAgM0UtMzk0ICAgICAgIDFlKzUgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRkaXYxMTIwIGRpdmlkZSAgNUUtMzk0ICAgICAgIDFlKzUgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRkaXYxMTIxIGRpdmlkZSAgN0UtMzk0ICAgICAgIDFlKzUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTEyMiBkaXZpZGUgIDlFLTM5NCAgICAgICAxZSs1ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMjMgZGl2aWRlICA5LjlFLTM5NCAgICAgMWUrNSAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkZGRpdjExMjQgZGl2aWRlICAxRS0zOTQgICAgICAtMWUrNCAgLT4gLTFFLTM5OCAgICBTdWJub3JtYWwKK2RkZGl2MTEyNSBkaXZpZGUgIDNFLTM5NCAgICAgIC0xZSs1ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZGl2MTEyNiBkaXZpZGUgLTVFLTM5NCAgICAgICAxZSs1ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZGl2MTEyNyBkaXZpZGUgIDdFLTM5NCAgICAgIC0xZSs1ICAtPiAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGRpdjExMjggZGl2aWRlIC05RS0zOTQgICAgICAgMWUrNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRkaXYxMTI5IGRpdmlkZSAgOS45RS0zOTQgICAgLTFlKzUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MTEzMCBkaXZpZGUgIDMuMEUtMzk0ICAgIC0xZSs1ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworZGRkaXYxMTMxIGRpdmlkZSAgMS4wRS0xOTkgICAgIDFlKzIwMCAtPiAwRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRkaXYxMTMyIGRpdmlkZSAgMS4wRS0xOTkgICAgIDFlKzE5OSAtPiAxRS0zOTggICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkZGl2MTEzMyBkaXZpZGUgIDEuMEUtMTk5ICAgICAxZSsxOTggLT4gMS4wRS0zOTcgIFN1Ym5vcm1hbAorZGRkaXYxMTM0IGRpdmlkZSAgMi4wRS0xOTkgICAgIDJlKzE5OCAtPiAxLjBFLTM5NyAgU3Vibm9ybWFsCitkZGRpdjExMzUgZGl2aWRlICA0LjBFLTE5OSAgICAgNGUrMTk4IC0+IDEuMEUtMzk3ICBTdWJub3JtYWwKK2RkZGl2MTEzNiBkaXZpZGUgMTAuMEUtMTk5ICAgIDEwZSsxOTggLT4gMS4wRS0zOTcgIFN1Ym5vcm1hbAorZGRkaXYxMTM3IGRpdmlkZSAzMC4wRS0xOTkgICAgMzBlKzE5OCAtPiAxLjBFLTM5NyAgU3Vibm9ybWFsCisKKy0tIHJhbmRvbXMKK2RkZGl2MjAxMCAgZGl2aWRlICAtMy4zMDMyMjY3MTQ5MDA3MTFFLTM1ICAgOC43OTY1Nzg4NDI3MTMxODNFKzczICAgLT4gIC0zLjc1NTEyNjU5NDA1ODc4M0UtMTA5IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDExICBkaXZpZGUgICA5MzMxNTMzMjc4MjEwNzMuNiAgICAgICA2ODc4MjE4MTA5MDI0Ni4yNSAgICAgICAtPiAgIDEzLjU2Njc4ODg1NDc1NzYzIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDEyICBkaXZpZGUgICA1LjA0NzUyNDM2MDU3OTA2RS03MiAgIC04LjE3OTQ4MTc3MTIzODY0MkUrNjQgICAtPiAgLTYuMTcwOTU4NjI3NjMyODM1RS0xMzcgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMTMgIGRpdmlkZSAgLTM3MDc2MTMzMDk1ODIzMTggICAgICAgIDMzOTQ5MTExOTY1MDMuMDQ4ICAgICAgIC0+ICAtMTA5Mi4xMDkwNzAwMTA4MzYgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMTQgIGRpdmlkZSAgIDk5Njg5LjA1NTUxOTA0NjEgICAgICAgLTQuNzM1MjA4NTUzODkxNDY0ICAgICAgIC0+ICAtMjEwNTIuNzI3NTM3NjU0MTEgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMTUgIGRpdmlkZSAgLTE0NDc5MTU3NzU2MTMzMjkgICAgICAgIDI2OTc1MDc5Ny44MTg0ODc1ICAgICAgIC0+ICAtNTM2NzYwNS4xNjQ5MjU2NTMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMTYgIGRpdmlkZSAgLTkuMzk0ODgxMzA0MjI1MjU4RS0xOSAgLTgzMDU4NS4wMjUyNjcxNjM2ICAgICAgIC0+ICAgMS4xMzExMTYxNDMyNTEzNThFLTI0IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDE3ICBkaXZpZGUgIC0xLjA1NjI4MzQzMjczODkzNCAgICAgICA4OC41ODc1NDU1NTEyNDAxMyAgICAgICAtPiAgLTAuMDExOTIzNjExMDAxNTkzNTIgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMTggIGRpdmlkZSAgIDU3NjMyMjA5MzMzNDMuMDgxICAgICAgIDY4OTA4OTU2NzAyNTA1Mi4xICAgICAgIC0+ICAgMC4wMDgzNjM1Mjk1MTY1MjQ0NTYgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMTkgIGRpdmlkZSAgIDg3MzgxOS4xMjIxMDMyMTYgICAgICAgIDkuNzQwNjEyNDk0NTIzMzAwRS00OSAgIC0+ICAgOC45NzA4ODQ3NjMwOTM5NDhFKzUzIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDIwICBkaXZpZGUgICA4MDIyOTE0LjgzODUzMzU3NiAgICAgICA2MTc4LjU2NjgwMTc0MjcxMyAgICAgICAtPiAgIDEyOTguNTA3NDIwMjQzNTgzIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDIxICBkaXZpZGUgICAyMDM5ODIuNzYwNTY1MDM2MyAgICAgIC0yMTU4LjI4MzYzOTA1MzQzNSAgICAgICAtPiAgLTk0LjUxMTU2MzIwNDIyMTY4IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDIyICBkaXZpZGUgICA4MDMuNjMxMDU0NzAxMzAzMCAgICAgICA3MTAxMTQzNzk1Mzk5LjIzOCAgICAgICAtPiAgIDEuMTMxNjkyNDExNjExMTY2RS0xMCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAyMyAgZGl2aWRlICAgOS4yNTE2OTc4NDIxMjMzOTlFLTgyICAtMS4zNDIzNTAyMjA2MDYxMTlFLTcgICAgLT4gIC02Ljg5MjE2Mzk4MjMyMTkzNkUtNzUgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMjQgIGRpdmlkZSAgLTEuOTgwNjAwNjQ1NjM3OTkyRS01MyAgLTUuNDc0MjYyNzUzMjE0NDU3RSs3NyAgIC0+ICAgMy42MTgwMjI2MTc3MDMxNjhFLTEzMSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAyNSAgZGl2aWRlICAtMjEwLjAzMjI5OTYzNTE2OTAgICAgICAtOC41ODA5NTE4MzU4NzI4NDNFKzgwICAgLT4gICAyLjQ0NzY1NzM2NTQzNDk3MUUtNzkgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMjYgIGRpdmlkZSAgLTEuODIxOTgwMzE0MDIwMzcwRSs4NSAgLTMuMDE4OTE1MjY3MTM4MTY1ICAgICAgIC0+ICAgNi4wMzUyMTUxNDQ1MDMwNDJFKzg0IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDI3ICBkaXZpZGUgIC03NzIyNjQ1MDM2MDEuMTA0NyAgICAgICA1LjE1ODI1ODI3MTQwODk4OEUtODYgICAtPiAgLTEuNDk3MTQxOTg2NjMwNjE0RSs5NyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAyOCAgZGl2aWRlICAtNzY3LjA1MzI0MTU4NDcxMDYgICAgICAgMi43MDAwMjcyMjgwMjg5MzlFLTU5ICAgLT4gIC0yLjg0MDkwOTI4Mjc3Mjk0MUUrNjEgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMjkgIGRpdmlkZSAgIDQ5NjcyNC44NTQ4MjUwMDkzICAgICAgIDcuMzI3MDA1ODgxNjMxMDBFKzY2ICAgIC0+ICAgNi43NzkzNzAyMjA5MjkwMTNFLTYyIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDMwICBkaXZpZGUgIC0zMDQyMzI2NTE0NDc3MDMuOSAgICAgIC0xMDguOTczMDgwODY1NzQ0MCAgICAgICAtPiAgIDI3OTE4MTQ3MjE4NjIuNTY1IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDMxICBkaXZpZGUgIC03LjIzMzgxNzE5MjY5OTQwNUUrNDIgIC01NzExMzAyMDA0LjE0OTQxMSAgICAgICAtPiAgIDEuMjY2NTc5MzUyMjExNDMwRSszMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAzMiAgZGl2aWRlICAtOS45OTkyMjE0NDQ5MTI3NDVFKzk2ICAgNDAxMDU2OTQwNjQ0NjE5NyAgICAgICAgLT4gIC0yLjQ5MzIxNzQwNDIwMjI1MEUrODEgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMzMgIGRpdmlkZSAgLTE4MzcyNzIuMDYxOTM3NjIyICAgICAgIDguMzU2MzIyODM4MDY2NzYyICAgICAgIC0+ICAtMjE5ODY2LjA5MzkxOTY4ODIgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMzQgIGRpdmlkZSAgIDIxNjguNTE3NTU1NjA2NTI5ICAgICAgIDIwOS4xOTEwMjU4NjE1MDYxICAgICAgIC0+ICAgMTAuMzY2MjA3Mzc3NTY3ODQgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMzUgIGRpdmlkZSAgLTEuODg0Mzg5NzkwNTc2MzcxRSs4OCAgIDIuOTUxODE5NTM4NzA1ODNFKzIwICAgIC0+ICAtNi4zODM4MjQ1MDUwNzk4MjhFKzY3IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDM2ICBkaXZpZGUgICA3MzIyNjMuNjAzNzQzODE5NiAgICAgICA5NjEyMjIuMzYzNDQ0Njg4OSAgICAgICAtPiAgIDAuNzYxODA0NTg1MDY5ODI2OSBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjAzNyAgZGl2aWRlICAtODEzNDYxNDE5LjAzNDgzMzYgICAgICAgNS4zNzYyOTM3NTM4MDkxNDNFKzg0ICAgLT4gIC0xLjUxMzA1MjQwNDI4NTkyN0UtNzYgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwMzggIGRpdmlkZSAgLTQ1NTYyMTMzNTA4MTA4LjUwICAgICAgLTkuNzc2ODQzNDk0NjkwMTA3RSs1MSAgIC0+ICAgNC42NjAyMDg5NDUwMjk1MTlFLTM5IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDM5ICBkaXZpZGUgIC02LjQ4OTM5MzE3MjQ0MTAxNkUrODAgIC05MTAxOTY1LjA5Nzg1MjExMyAgICAgICAtPiAgIDcuMTI5NjYxNjc0ODk3NDIxRSs3MyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA0MCAgZGl2aWRlICAgMy42OTQ1NzYyMzcxMTczNDlFKzkzICAgNjY4MzUxMi4wMTI2MjIwMDMgICAgICAgLT4gICA1LjUyNzg5NjQ1NjQ0MzkxMkUrODYgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNDEgIGRpdmlkZSAgLTIuMjUyODc3NzI2NDAzMjcyRSsxOSAgLTc0NTE5MTMyNTYuMTgxMzY3ICAgICAgIC0+ICAgMzAyMzIyMDU0Ni4xMjU1MzEgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNDIgIGRpdmlkZSAgIDUxODMwMy4xOTg5MTExODQyICAgICAgIDUwLjAxNTg3MDIwNDc0MTMzICAgICAgIC0+ICAgMTAzNjIuNzc0NzkxMDcxMjMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNDMgIGRpdmlkZSAgIDIuOTAyMDg3ODgxODgwMTAzRSsyNCAgIDMzLjMyNDAwOTkyMzA1NzAyICAgICAgIC0+ICAgOC43MDg2OTk0ODg5ODk1NzhFKzIyIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDQ0ICBkaXZpZGUgICA1NDk2MTkuNDU1OTUxMDU1NyAgICAgICAxNjYwODI0ODQ1MTk2MzM4ICAgICAgICAtPiAgIDMuMzA5MzE2MTk2MzUxMTA0RS0xMCBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA0NSAgZGl2aWRlICAtNjc3NTY3MDc3NDY4NDA0MyAgICAgICAgODI5MjE1MjAyMy4wNzcyNjIgICAgICAgLT4gIC04MTcxMTguNDk0MTg5MTA2MiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA0NiAgZGl2aWRlICAtNzcuNTA5MjM5MjE1MjQwNzkgICAgICAtNS42MzY4ODI2NTU0MjU4MTVFKzc0ICAgLT4gICAxLjM3NTAzNzMwMjU4ODQwNUUtNzMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNDcgIGRpdmlkZSAgLTIuOTg0ODg5NDU5NjA1MTQ5RS0xMCAgLTg4MTA2MTU2Nzg0MTIyLjk5ICAgICAgIC0+ICAgMy4zODc4MzMwMDU3MjEzODRFLTI0IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDQ4ICBkaXZpZGUgICAwLjk0OTUxNzI5Mzk5NzA4NSAgICAgICA0NDc2NzExNS45NjQ1MDk5OCAgICAgICAtPiAgIDIuMTIxMDE1MTEwMTc1NTg5RS04IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDQ5ICBkaXZpZGUgIC0yNzYwOTM3MjExLjA4NDUyMSAgICAgIC0xMDg3MDE1ODc2OTc1NDA4ICAgICAgICAtPiAgIDAuMDAwMDAyNTM5OTIzNTM3MDU3MDI0IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDUwICBkaXZpZGUgICAyODQzODM1MS44NTAzMDUzNiAgICAgIC00LjIwOTM5NzkwNDA4ODYyNEUtNDcgICAtPiAgLTYuNzU1OTE5MTM1NzcwNjg4RSs1MyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MjA1MSAgZGl2aWRlICAtODU1NjI3MzEuNjgyMDk1NiAgICAgICAtNy4xNjYwNDU0NDI1MzAxODVFKzQ1ICAgLT4gICAxLjE5NDAwMjA4MDYyMTU0MkUtMzggSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNTIgIGRpdmlkZSAgIDI1MzM4MDI4NTIxNjUuMjUgICAgICAgIDcxNTQuMTE5NjA2MjM1OTU1ICAgICAgIC0+ICAgMzU0MTczOTU3LjMzMTc1MDEgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNTMgIGRpdmlkZSAgLTg4NTg4MzEzNDY4NTEuNDc0ICAgICAgIDk3LjU5NzM0MjA4ODAxNzE2ICAgICAgIC0+ICAtOTA3NjkxODY1MDkuODM1NzcgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNTQgIGRpdmlkZSAgIDE3Njc4MzYyOTgwMTM4Ny41ICAgICAgIDg0MDA3MzI2My4zMTA5ODE3ICAgICAgIC0+ICAgMjEwNDM4LjM0ODA4NDgyMDYgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNTUgIGRpdmlkZSAgLTQ5MzUwNjQ3MTc5NjE3NS42ICAgICAgIDc5NzMzODk0NzkwODIyLjAzICAgICAgIC0+ICAtNi4xODk0MTg4NTQ5NDA3NDYgSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNTYgIGRpdmlkZSAgIDc5MC4xNjgyNTQyMTAzNDQ1ICAgICAgIDgyOS45NDQ5MzcwMzY3NDM1ICAgICAgIC0+ICAgMC45NTIwNzMxMDYyMzcxMjE0IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDU3ICBkaXZpZGUgIC04OTIwNDU5ODM4LjU4MzE2NCAgICAgIC00NzY3Ljg4OTE4Nzg5OTIxNCAgICAgICAtPiAgIDE4NzA5NDUuMjk0MDM1NTgxIEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDU4ICBkaXZpZGUgICA1MzUzNjY4NzE2NDQyMi4xICAgICAgICA1MzEzNy41MDA3MDMyNjg5ICAgICAgICAtPiAgIDEwMDc1MTIzMzAuMzg1Njk4IEluZXhhY3QgUm91bmRlZAorZGRkaXYyMDU5ICBkaXZpZGUgICA0LjA1MTUzMjMxMTE0NjU2MUUtNzQgIC0yLjM0MzA4OTc2ODk3MjI2MUUrOTQgICAtPiAgLTEuNzI5MTQwODgyNjA2MzMyRS0xNjggSW5leGFjdCBSb3VuZGVkCitkZGRpdjIwNjAgIGRpdmlkZSAgLTE0ODQ3NzU4Nzc4NjM2Ljg4ICAgICAgIDMuMDYyNTQzNTE2MzgzODA3RS00MyAgIC0+ICAtNC44NDgxNzg4NzQ1ODc0OTdFKzU1IEluZXhhY3QgUm91bmRlZAorCistLSBEaXZpc2lvbiBwcm9iYWJseSBoYXMgcHJlLXJvdW5kaW5nLCBzbyBuZWVkIHRvIHRlc3Qgcm91bmRpbmcKKy0tIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4gYXNzdW1lIGluY2x1ZGVkIHRocm91Z2ggb3RoZXIgdGVzdHM7CistLSB0ZXN0cyBpbmNsdWRlIHNpbXBsZSByb3VuZGluZyBhbmQgYWxzbyB0aGUgdHJpY2t5IGNhc2VzIG9mIHN0aWNreQorLS0gYml0cyBmb2xsb3dpbmcgdHdvIHplcm9zCistLQorLS0gICAxLzk5OTk5IGdpdmVzIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEwMDAwMTAwMDAxMDAwMDEwMDAwMQorLS0gICAgICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKKy0tCistLSAgIDEvOTk5OTk5IGdpdmVzIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwMDAxMDAwMDAxMDAwMDAxMDAwMDAxCistLSAgICAgICAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2CisKK3JvdW5kaW5nOiBjZWlsaW5nCitkZGRpdjMwMDEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzM0IEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDAyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzAwMyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAyICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzAwNCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGZsb29yCitkZGRpdjMwMTEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDEyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NiBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzAxMyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzAxNCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMCBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IHVwCitkZGRpdjMwMjEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzM0IEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDIyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzAyMyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAyICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzAyNCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RkZGl2MzAzMSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwMzIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY2IEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDMzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDM0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorZGRkaXYzMDQxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA0MiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNDMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNDQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2RkZGl2MzA1MSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNTIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDUzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDU0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkZGRpdjMwNjEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDYyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA2MyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2MzA2NCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMCBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IDA1dXAKK2RkZGl2MzA3MSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkZGRpdjMwNzIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY2IEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDczICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZAorZGRkaXYzMDc0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAxIEluZXhhY3QgUm91bmRlZAorCistLSByYW5kb20gZGl2aWRlIHRlc3RzIHdpdGggcmVzdWx0IG5lYXIgMQorcm91bmRpbmc6IGhhbGZfZXZlbgorZGRkaXY0MDAxIGRpdmlkZSAgMzE5NTM4NTE5MjkxNjkxNyAgIDMxOTUzODUxOTI5NDY2OTUgIC0+ICAwLjk5OTk5OTk5OTk5MDY4MDkgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDAyIGRpdmlkZSAgMTM5MzcyMzA2NzUyNjk5MyAgIDEzOTM3MjMwNjc1MTk0NzUgIC0+ICAxLjAwMDAwMDAwMDAwNTM5NCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMDMgZGl2aWRlICAgNzU5OTg1NTQzNzAyMzAyICAgIDc1OTk4NTU0MzY3NDAxNSAgLT4gIDEuMDAwMDAwMDAwMDM3MjIwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAwNCBkaXZpZGUgIDk1NzkxNTg0NTYwMjczMDIgICA5NTc5MTU4NDU2MDM2ODY0ICAtPiAgMC45OTk5OTk5OTk5OTkwMDE4ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAwNSBkaXZpZGUgIDcwNzkzOTgyOTkxNDM1NjkgICA3MDc5Mzk4Mjk5MTU2OTA0ICAtPiAgMC45OTk5OTk5OTk5OTgxMTY0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAwNiBkaXZpZGUgIDY2MzYxNjkyNTUzNjY1OTggICA2NjM2MTY5MjU1MzM2Mzg2ICAtPiAgMS4wMDAwMDAwMDAwMDQ1NTMgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDA3IGRpdmlkZSAgNjk2NDgxMzk3MTM0MDA5MCAgIDY5NjQ4MTM5NzEzMjE1NTQgIC0+ICAxLjAwMDAwMDAwMDAwMjY2MSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMDggZGl2aWRlICA0MTgyMjc1MjI1NDgwNzg0ICAgNDE4MjI3NTIyNTQ1NDAwOSAgLT4gIDEuMDAwMDAwMDAwMDA2NDAyICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAwOSBkaXZpZGUgIDkyMjgzMjUxMjQ5MzgwMjkgICA5MjI4MzI1MTI0OTE4NzMwICAtPiAgMS4wMDAwMDAwMDAwMDIwOTEgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDEwIGRpdmlkZSAgMzQyODM0NjMzODYzMDE5MiAgIDM0MjgzNDYzMzg2MDk4NDMgIC0+ICAxLjAwMDAwMDAwMDAwNTkzNiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMTEgZGl2aWRlICAyMTQzNTExNTUwNzIyODkzICAgMjE0MzUxMTU1MDc1MTc1NCAgLT4gIDAuOTk5OTk5OTk5OTg2NTM1NiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMTIgZGl2aWRlICAxNjcyNzMyOTI0Mzk2Nzg1ICAgMTY3MjczMjkyNDQwMTgxMSAgLT4gIDAuOTk5OTk5OTk5OTk2OTk1MyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMTMgZGl2aWRlICA0MTkwNzE0NjExOTQ4MjE2ICAgNDE5MDcxNDYxMTk0ODY2NCAgLT4gIDAuOTk5OTk5OTk5OTk5ODkzMSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMTQgZGl2aWRlICAzOTQyMjU0ODAwODQ4ODc3ICAgMzk0MjI1NDgwMDgxNDU1NiAgLT4gIDEuMDAwMDAwMDAwMDA4NzA2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAxNSBkaXZpZGUgIDI4NTQ0NTk4MjY5NTIzMzQgICAyODU0NDU5ODI2OTYwNzYyICAtPiAgMC45OTk5OTk5OTk5OTcwNDc0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAxNiBkaXZpZGUgIDI4NTMyNTg5NTM2NjQ3MzEgICAyODUzMjU4OTUzNjg0NDcxICAtPiAgMC45OTk5OTk5OTk5OTMwODE2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAxNyBkaXZpZGUgIDk0NTM1MTI2MzgxMjU5NzggICA5NDUzNTEyNjM4MTQ2NDI1ICAtPiAgMC45OTk5OTk5OTk5OTc4MzcxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAxOCBkaXZpZGUgICAzMzk0NzY2MzM5NDAzNjkgICAgMzM5NDc2NjMzOTEyODg3ICAtPiAgMS4wMDAwMDAwMDAwODA5NTQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDE5IGRpdmlkZSAgNDU0MjE4MTQ5MjY4ODQ2NyAgIDQ1NDIxODE0OTI2OTc3MzUgIC0+ICAwLjk5OTk5OTk5OTk5Nzk1OTYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDIwIGRpdmlkZSAgNzMxMjYwMDE5MjM5OTE5NyAgIDczMTI2MDAxOTIzOTU0MjQgIC0+ICAxLjAwMDAwMDAwMDAwMDUxNiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMjEgZGl2aWRlICAxODExNjc0OTg1NTcwMTExICAgMTgxMTY3NDk4NTYwMzkzNSAgLT4gIDAuOTk5OTk5OTk5OTgxMzMwMCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMjIgZGl2aWRlICAxNzA2NDYyNjM5MDAzNDgxICAgMTcwNjQ2MjYzOTAxNzc0MCAgLT4gIDAuOTk5OTk5OTk5OTkxNjQ0MSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMjMgZGl2aWRlICA2Njk3MDUyNjU0OTQwMzY4ICAgNjY5NzA1MjY1NDkzNDExMCAgLT4gIDEuMDAwMDAwMDAwMDAwOTM0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyNCBkaXZpZGUgIDUwMTUyODM2NjQyNzc1MzkgICA1MDE1MjgzNjY0MzEwNzE5ICAtPiAgMC45OTk5OTk5OTk5OTMzODQyICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAyNSBkaXZpZGUgIDIzNTk1MDE1NjE1Mzc0NjQgICAyMzU5NTAxNTYxNTAyNDY0ICAtPiAgMS4wMDAwMDAwMDAwMTQ4MzQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDI2IGRpdmlkZSAgMjY2OTg1MDIyNzkwOTE1NyAgIDI2Njk4NTAyMjc5MDE1NDggIC0+ICAxLjAwMDAwMDAwMDAwMjg1MCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMjcgZGl2aWRlICA5MzI5NzI1NTQ2OTc0NjQ4ICAgOTMyOTcyNTU0NzAwMjQ0NSAgLT4gIDAuOTk5OTk5OTk5OTk3MDIwNiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMjggZGl2aWRlICAzMjI4NTYyODY3MDcxMjQ4ICAgMzIyODU2Mjg2NzEwNjIwNiAgLT4gIDAuOTk5OTk5OTk5OTg5MTcyMyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMjkgZGl2aWRlICA0ODYyMjI2NjQ0OTIxMTc1ICAgNDg2MjIyNjY0NDkwOTM4MCAgLT4gIDEuMDAwMDAwMDAwMDAyNDI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAzMCBkaXZpZGUgIDEwMjIyNjc5OTcwNTQ1MjkgICAxMDIyMjY3OTk3MDcxMzI5ICAtPiAgMC45OTk5OTk5OTk5ODM1NjYwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAzMSBkaXZpZGUgIDEwNDg3Nzc0ODIwMjM3MTkgICAxMDQ4Nzc3NDgyMDAwOTQ4ICAtPiAgMS4wMDAwMDAwMDAwMjE3MTIgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDMyIGRpdmlkZSAgOTk4MDExMzc3NzMzNzA5OCAgIDk5ODAxMTM3NzczMzA1MzkgIC0+ICAxLjAwMDAwMDAwMDAwMDY1NyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMzMgZGl2aWRlICA3NTA2ODM5MTY3OTYzOTA4ICAgNzUwNjgzOTE2Nzk0MjkwMSAgLT4gIDEuMDAwMDAwMDAwMDAyNzk4ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDAzNCBkaXZpZGUgICAyMzExMTk3NTE5Nzc4NjAgICAgMjMxMTE5NzUxOTYyNDUzICAtPiAgMS4wMDAwMDAwMDAwNjY2NjIgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDM1IGRpdmlkZSAgNDAzNDkwMzY2NDc2Mjk2MiAgIDQwMzQ5MDM2NjQ3OTU1MjYgIC0+ICAwLjk5OTk5OTk5OTk5MTkyOTQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDM2IGRpdmlkZSAgNTcwMDEyMjE1MjI3NDY5NiAgIDU3MDAxMjIxNTIyNTEzODYgIC0+ICAxLjAwMDAwMDAwMDAwNDA4OSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMzcgZGl2aWRlICA2ODY5NTk5NTkwMjkzMTEwICAgNjg2OTU5OTU5MDI5MzQ5NSAgLT4gIDAuOTk5OTk5OTk5OTk5OTQ0MCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMzggZGl2aWRlICA1NTc2MjgxOTYwMDkyNzk3ICAgNTU3NjI4MTk2MDEwNTU3OSAgLT4gIDAuOTk5OTk5OTk5OTk3NzA3OCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwMzkgZGl2aWRlICAyMzA0ODQ0ODg4MzgxMzE4ICAgMjMwNDg0NDg4ODM1MzA3MyAgLT4gIDEuMDAwMDAwMDAwMDEyMjU1ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA0MCBkaXZpZGUgIDMyNjU5MzM2NTE2NTY0NTIgICAzMjY1OTMzNjUxNjgyNzc5ICAtPiAgMC45OTk5OTk5OTk5OTE5Mzg5ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA0MSBkaXZpZGUgIDUyMzU3MTQ5ODUwNzk5MTQgICA1MjM1NzE0OTg1MDY2MTMxICAtPiAgMS4wMDAwMDAwMDAwMDI2MzIgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDQyIGRpdmlkZSAgNTU3ODQ4MTU3MjgyNzU1MSAgIDU1Nzg0ODE1NzI4MjI5NDUgIC0+ICAxLjAwMDAwMDAwMDAwMDgyNiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNDMgZGl2aWRlICA0OTA5NjE2MDgxMzk2MTM0ICAgNDkwOTYxNjA4MTM3MzA3NiAgLT4gIDEuMDAwMDAwMDAwMDA0Njk2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA0NCBkaXZpZGUgICA2MzY0NDcyMjQzNDk1MzcgICAgNjM2NDQ3MjI0MzM4NzU3ICAtPiAgMS4wMDAwMDAwMDAwMTY5MzggIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDQ1IGRpdmlkZSAgMTUzOTM3MzQyODM5NjY0MCAgIDE1MzkzNzM0MjgzNjQ3MjcgIC0+ICAxLjAwMDAwMDAwMDAyMDczMSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNDYgZGl2aWRlICAyMDI4Nzg2NzA3Mzc3ODkzICAgMjAyODc4NjcwNzM3ODg2NiAgLT4gIDAuOTk5OTk5OTk5OTk5NTIwNCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNDcgZGl2aWRlICAgMTM3NjQzMjYwNDg2MjIyICAgIDEzNzY0MzI2MDQ4NzQxOSAgLT4gIDAuOTk5OTk5OTk5OTkxMzAzNiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNDggZGl2aWRlICAgMjQ3NDUxNTE5NzQ2NzY1ICAgIDI0NzQ1MTUxOTc1MjI2NyAgLT4gIDAuOTk5OTk5OTk5OTc3NzY1MyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNDkgZGl2aWRlICA3ODc3ODU4NDc1MDIyMDU0ICAgNzg3Nzg1ODQ3NDk5OTc5NCAgLT4gIDEuMDAwMDAwMDAwMDAyODI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA1MCBkaXZpZGUgIDczMzMyNDI2OTQ3NjYyNTggICA3MzMzMjQyNjk0NzQ0NjI4ICAtPiAgMS4wMDAwMDAwMDAwMDI5NTAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDUxIGRpdmlkZSAgIDEyNDA1MTUwMzY5ODU5MiAgICAxMjQwNTE1MDM2OTkzOTcgIC0+ICAwLjk5OTk5OTk5OTk5MzUxMDggIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDUyIGRpdmlkZSAgODk0NDczNzQzMjM4NTE4OCAgIDg5NDQ3Mzc0MzI0MDY4NjAgIC0+ICAwLjk5OTk5OTk5OTk5NzU3NzEgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDUzIGRpdmlkZSAgOTg4Mzk0ODkyMzQwNjg3NCAgIDk4ODM5NDg5MjM0MjQ4NDMgIC0+ICAwLjk5OTk5OTk5OTk5ODE4MjAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDU0IGRpdmlkZSAgNjgyOTE3ODc0MTY1NDI4NCAgIDY4MjkxNzg3NDE2NzE5NzMgIC0+ICAwLjk5OTk5OTk5OTk5NzQwOTggIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDU1IGRpdmlkZSAgNzM0Mjc1MjQ3OTc2ODEyMiAgIDczNDI3NTI0Nzk3OTMzODUgIC0+ICAwLjk5OTk5OTk5OTk5NjU1OTUgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDU2IGRpdmlkZSAgODA2NjQyNjU3OTAwODc4MyAgIDgwNjY0MjY1Nzg5Nzc1NjMgIC0+ICAxLjAwMDAwMDAwMDAwMzg3MCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNTcgZGl2aWRlICA4OTkyNzc1MDcxMzgzMjk1ICAgODk5Mjc3NTA3MTM1MjcxMiAgLT4gIDEuMDAwMDAwMDAwMDAzNDAxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA1OCBkaXZpZGUgIDU0ODUwMTE3NTU1NDU2NDEgICA1NDg1MDExNzU1NTQzNjExICAtPiAgMS4wMDAwMDAwMDAwMDAzNzAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDU5IGRpdmlkZSAgNTc3OTk4MzA1NDM1MzkxOCAgIDU3Nzk5ODMwNTQzNjUzMDAgIC0+ICAwLjk5OTk5OTk5OTk5ODAzMDggIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDYwIGRpdmlkZSAgOTUwMjI2NTEwMjcxMzc3NCAgIDk1MDIyNjUxMDI3MzUyMDggIC0+ICAwLjk5OTk5OTk5OTk5Nzc0NDMgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDYxIGRpdmlkZSAgMjEwOTU1ODM5OTEzMDk4MSAgIDIxMDk1NTgzOTkxMTYyODEgIC0+ICAxLjAwMDAwMDAwMDAwNjk2OCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNjIgZGl2aWRlICA1Mjk2MTgyNjM2MzUwNDcxICAgNTI5NjE4MjYzNjM1MTUyMSAgLT4gIDAuOTk5OTk5OTk5OTk5ODAxNyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNjMgZGl2aWRlICAxNDQwMDE5MjI1NTkxODgzICAgMTQ0MDAxOTIyNTYwMTg0NCAgLT4gIDAuOTk5OTk5OTk5OTkzMDgyNyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNjQgZGl2aWRlICA4MTgyMTEwNzkxODgxMzQxICAgODE4MjExMDc5MTg0NzE3NCAgLT4gIDEuMDAwMDAwMDAwMDA0MTc2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA2NSBkaXZpZGUgICA0ODkwOTgyMzU1MTIwNjAgICAgNDg5MDk4MjM1NTM0NTE2ICAtPiAgMC45OTk5OTk5OTk5NTQwODY5ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA2NiBkaXZpZGUgIDY0NzU2ODcwODQ3ODIwMzggICA2NDc1Njg3MDg0NzU2MDg5ICAtPiAgMS4wMDAwMDAwMDAwMDQwMDcgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDY3IGRpdmlkZSAgODA5NDM0ODU1NTczNjk0OCAgIDgwOTQzNDg1NTU3NTkyMzYgIC0+ICAwLjk5OTk5OTk5OTk5NzI0NjUgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDY4IGRpdmlkZSAgMTk4Mjc2NjgxNjI5MTU0MyAgIDE5ODI3NjY4MTYzMDk0NjMgIC0+ICAwLjk5OTk5OTk5OTk5MDk2MjEgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDY5IGRpdmlkZSAgOTI3NzMxNDMwMDExMzI1MSAgIDkyNzczMTQzMDAwODQ0NjcgIC0+ICAxLjAwMDAwMDAwMDAwMzEwMyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNzAgZGl2aWRlICA0MzM1NTMyOTU5MzE4OTM0ICAgNDMzNTUzMjk1OTI5MzE2NyAgLT4gIDEuMDAwMDAwMDAwMDA1OTQzICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA3MSBkaXZpZGUgIDc3NjcxMTMwMzI5ODEzNDggICA3NzY3MTEzMDMyOTY4MTMyICAtPiAgMS4wMDAwMDAwMDAwMDE3MDIgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDcyIGRpdmlkZSAgMTU3ODU0ODA1MzM0Mjg2OCAgIDE1Nzg1NDgwNTMzNzA0NDggIC0+ICAwLjk5OTk5OTk5OTk4MjUyODIgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDczIGRpdmlkZSAgMzc5MDQyMDY4NjY2Njg5OCAgIDM3OTA0MjA2ODY2MzYzMTUgIC0+ICAxLjAwMDAwMDAwMDAwODA2OCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNzQgZGl2aWRlICAgODcxNjgyNDIxOTU1MTQ3ICAgIDg3MTY4MjQyMTk3NjQ0MSAgLT4gIDAuOTk5OTk5OTk5OTc1NTcxNCAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNzUgZGl2aWRlICAgNzQ0MTQxMDU0NDc5OTQwICAgIDc0NDE0MTA1NDUxMjMyOSAgLT4gIDAuOTk5OTk5OTk5OTU2NDc0NiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNzYgZGl2aWRlICA4OTU2ODI0MTgzNjcwNzM1ICAgODk1NjgyNDE4MzY0MTc0MSAgLT4gIDEuMDAwMDAwMDAwMDAzMjM3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA3NyBkaXZpZGUgIDgzMzcyOTE2OTQ0ODU2ODIgICA4MzM3MjkxNjk0NDUxMTkzICAtPiAgMS4wMDAwMDAwMDAwMDQxMzcgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDc4IGRpdmlkZSAgNDEwNzc3NTk0NDY4MzY2OSAgIDQxMDc3NzU5NDQ2NTcwOTcgIC0+ICAxLjAwMDAwMDAwMDAwNjQ2OSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwNzkgZGl2aWRlICA4NjkxOTAwMDU3OTY0NjQ4ICAgODY5MTkwMDA1Nzk5NzU1NSAgLT4gIDAuOTk5OTk5OTk5OTk2MjE0MSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwODAgZGl2aWRlICAyMjI5NTI4NTIwNTM2NDYyICAgMjIyOTUyODUyMDUwMjMzNyAgLT4gIDEuMDAwMDAwMDAwMDE1MzA2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA4MSBkaXZpZGUgICAzOTg0NDIwODM3NzQzMjIgICAgMzk4NDQyMDgzNzQ2MjczICAtPiAgMS4wMDAwMDAwMDAwNzAzOTcgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDgyIGRpdmlkZSAgNTMxOTgxOTc3NjgwODc1OSAgIDUzMTk4MTk3NzY4MzgzMTMgIC0+ICAwLjk5OTk5OTk5OTk5NDQ0NDUgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDgzIGRpdmlkZSAgNzcxMDQ5MTI5OTA2Njg1NSAgIDc3MTA0OTEyOTkwNDE4NTggIC0+ICAxLjAwMDAwMDAwMDAwMzI0MiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwODQgZGl2aWRlICA5MDgzMjMxMjk2MDg3MjY2ICAgOTA4MzIzMTI5NjA1ODE2MCAgLT4gIDEuMDAwMDAwMDAwMDAzMjA0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA4NSBkaXZpZGUgIDM1NjY4NzM1NzQ5MDQ1NTkgICAzNTY2ODczNTc0ODkwMzI4ICAtPiAgMS4wMDAwMDAwMDAwMDM5OTAgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDg2IGRpdmlkZSAgIDU5NjM0MzI5MDU1MDUyNSAgICA1OTYzNDMyOTA1NTU2MTQgIC0+ICAwLjk5OTk5OTk5OTk5MTQ2NjMgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDg3IGRpdmlkZSAgIDI3ODIyNzkyNTA5MzE5MiAgICAyNzgyMjc5MjUwNjgxMDQgIC0+ICAxLjAwMDAwMDAwMDA5MDE3MSAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwODggZGl2aWRlICAzMjkyOTAyOTU4NDkwNjQ5ICAgMzI5MjkwMjk1ODUxOTg4MSAgLT4gIDAuOTk5OTk5OTk5OTkxMTIyNyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwODkgZGl2aWRlICA1NTIxODcxMzY0MjQ1ODgxICAgNTUyMTg3MTM2NDIyOTUzNiAgLT4gIDEuMDAwMDAwMDAwMDAyOTYwICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA5MCBkaXZpZGUgIDI0MDY1MDU2MDI4ODM2MTcgICAyNDA2NTA1NjAyODU3OTk3ICAtPiAgMS4wMDAwMDAwMDAwMTA2NDYgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDkxIGRpdmlkZSAgNzc0MTE0Njk4NDg2OTIwOCAgIDc3NDExNDY5ODQ4NjcyNTUgIC0+ICAxLjAwMDAwMDAwMDAwMDI1MiAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwOTIgZGl2aWRlICA0NTc2MDQxODMyNDE0OTA5ICAgNDU3NjA0MTgzMjQwNTEwMiAgLT4gIDEuMDAwMDAwMDAwMDAyMTQzICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA5MyBkaXZpZGUgIDkxODM3NTY5ODI4NzgwNTcgICA5MTgzNzU2OTgyOTAxOTM0ICAtPiAgMC45OTk5OTk5OTk5OTc0MDAxICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA5NCBkaXZpZGUgIDYyMTU3MzY1MTM4NTUxNTkgICA2MjE1NzM2NTEzODcwMzQyICAtPiAgMC45OTk5OTk5OTk5OTc1NTczICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA5NSBkaXZpZGUgICAyNDg1NTQ5Njg1MzQ1MzMgICAgMjQ4NTU0OTY4NTUxNDE3ICAtPiAgMC45OTk5OTk5OTk5MzIwNzE0ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA5NiBkaXZpZGUgICAzNzYzMTQxNjU2Njg2NDUgICAgMzc2MzE0MTY1NjU5NzU1ICAtPiAgMS4wMDAwMDAwMDAwMjM2MjQgIEluZXhhY3QgUm91bmRlZAorZGRkaXY0MDk3IGRpdmlkZSAgNTUxMzU2OTI0OTgwOTcxOCAgIDU1MTM1NjkyNDk4MDg5MDYgIC0+ICAxLjAwMDAwMDAwMDAwMDE0NyAgSW5leGFjdCBSb3VuZGVkCitkZGRpdjQwOTggZGl2aWRlICAzMzY3OTkyMjQyMTY3OTA0ICAgMzM2Nzk5MjI0MjE1NjIyOCAgLT4gIDEuMDAwMDAwMDAwMDAzNDY3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZGl2NDA5OSBkaXZpZGUgIDYxMzQ4Njk1Mzg5NjY5NjcgICA2MTM0ODY5NTM4OTg1OTg2ICAtPiAgMC45OTk5OTk5OTk5OTY4OTk5ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gTnVsbCB0ZXN0cworZGRkaXY5OTk4IGRpdmlkZSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZGl2OTk5OSBkaXZpZGUgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGREaXZpZGVJbnQuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGREaXZpZGVJbnQuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWM1Njc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZERpdmlkZUludC5kZWNUZXN0CkBAIC0wLDAgKzEsNDQ5IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkRGl2aWRlSW50LmRlY1Rlc3QgLS0gZGVjRG91YmxlIGludGVnZXIgZGl2aXNpb24gICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RkZHZpMDAxIGRpdmlkZWludCAgMSAgICAgMSAgICAtPiAgMQorZGRkdmkwMDIgZGl2aWRlaW50ICAyICAgICAxICAgIC0+ICAyCitkZGR2aTAwMyBkaXZpZGVpbnQgIDEgICAgIDIgICAgLT4gIDAKK2RkZHZpMDA0IGRpdmlkZWludCAgMiAgICAgMiAgICAtPiAgMQorZGRkdmkwMDUgZGl2aWRlaW50ICAwICAgICAxICAgIC0+ICAwCitkZGR2aTAwNiBkaXZpZGVpbnQgIDAgICAgIDIgICAgLT4gIDAKK2RkZHZpMDA3IGRpdmlkZWludCAgMSAgICAgMyAgICAtPiAgMAorZGRkdmkwMDggZGl2aWRlaW50ICAyICAgICAzICAgIC0+ICAwCitkZGR2aTAwOSBkaXZpZGVpbnQgIDMgICAgIDMgICAgLT4gIDEKKworZGRkdmkwMTAgZGl2aWRlaW50ICAyLjQgICAxICAgIC0+ICAyCitkZGR2aTAxMSBkaXZpZGVpbnQgIDIuNCAgIC0xICAgLT4gIC0yCitkZGR2aTAxMiBkaXZpZGVpbnQgIC0yLjQgIDEgICAgLT4gIC0yCitkZGR2aTAxMyBkaXZpZGVpbnQgIC0yLjQgIC0xICAgLT4gIDIKK2RkZHZpMDE0IGRpdmlkZWludCAgMi40MCAgMSAgICAtPiAgMgorZGRkdmkwMTUgZGl2aWRlaW50ICAyLjQwMCAxICAgIC0+ICAyCitkZGR2aTAxNiBkaXZpZGVpbnQgIDIuNCAgIDIgICAgLT4gIDEKK2RkZHZpMDE3IGRpdmlkZWludCAgMi40MDAgMiAgICAtPiAgMQorZGRkdmkwMTggZGl2aWRlaW50ICAyLiAgICAyICAgIC0+ICAxCitkZGR2aTAxOSBkaXZpZGVpbnQgIDIwICAgIDIwICAgLT4gIDEKKworZGRkdmkwMjAgZGl2aWRlaW50ICAxODcgICAxODcgIC0+ICAxCitkZGR2aTAyMSBkaXZpZGVpbnQgIDUgICAgIDIgICAgLT4gIDIKK2RkZHZpMDIyIGRpdmlkZWludCAgNSAgICAgMi4wICAgIC0+ICAyCitkZGR2aTAyMyBkaXZpZGVpbnQgIDUgICAgIDIuMDAwICAtPiAgMgorZGRkdmkwMjQgZGl2aWRlaW50ICA1ICAgICAwLjIwMCAgLT4gIDI1CitkZGR2aTAyNSBkaXZpZGVpbnQgIDUgICAgIDAuMjAwICAtPiAgMjUKKworZGRkdmkwMzAgZGl2aWRlaW50ICAxICAgICAyICAgICAgLT4gIDAKK2RkZHZpMDMxIGRpdmlkZWludCAgMSAgICAgNCAgICAgIC0+ICAwCitkZGR2aTAzMiBkaXZpZGVpbnQgIDEgICAgIDggICAgICAtPiAgMAorZGRkdmkwMzMgZGl2aWRlaW50ICAxICAgICAxNiAgICAgLT4gIDAKK2RkZHZpMDM0IGRpdmlkZWludCAgMSAgICAgMzIgICAgIC0+ICAwCitkZGR2aTAzNSBkaXZpZGVpbnQgIDEgICAgIDY0ICAgICAtPiAgMAorZGRkdmkwNDAgZGl2aWRlaW50ICAxICAgIC0yICAgICAgLT4gLTAKK2RkZHZpMDQxIGRpdmlkZWludCAgMSAgICAtNCAgICAgIC0+IC0wCitkZGR2aTA0MiBkaXZpZGVpbnQgIDEgICAgLTggICAgICAtPiAtMAorZGRkdmkwNDMgZGl2aWRlaW50ICAxICAgIC0xNiAgICAgLT4gLTAKK2RkZHZpMDQ0IGRpdmlkZWludCAgMSAgICAtMzIgICAgIC0+IC0wCitkZGR2aTA0NSBkaXZpZGVpbnQgIDEgICAgLTY0ICAgICAtPiAtMAorZGRkdmkwNTAgZGl2aWRlaW50IC0xICAgICAyICAgICAgLT4gLTAKK2RkZHZpMDUxIGRpdmlkZWludCAtMSAgICAgNCAgICAgIC0+IC0wCitkZGR2aTA1MiBkaXZpZGVpbnQgLTEgICAgIDggICAgICAtPiAtMAorZGRkdmkwNTMgZGl2aWRlaW50IC0xICAgICAxNiAgICAgLT4gLTAKK2RkZHZpMDU0IGRpdmlkZWludCAtMSAgICAgMzIgICAgIC0+IC0wCitkZGR2aTA1NSBkaXZpZGVpbnQgLTEgICAgIDY0ICAgICAtPiAtMAorZGRkdmkwNjAgZGl2aWRlaW50IC0xICAgIC0yICAgICAgLT4gIDAKK2RkZHZpMDYxIGRpdmlkZWludCAtMSAgICAtNCAgICAgIC0+ICAwCitkZGR2aTA2MiBkaXZpZGVpbnQgLTEgICAgLTggICAgICAtPiAgMAorZGRkdmkwNjMgZGl2aWRlaW50IC0xICAgIC0xNiAgICAgLT4gIDAKK2RkZHZpMDY0IGRpdmlkZWludCAtMSAgICAtMzIgICAgIC0+ICAwCitkZGR2aTA2NSBkaXZpZGVpbnQgLTEgICAgLTY0ICAgICAtPiAgMAorCistLSBzaW1pbGFyIHdpdGggcG93ZXJzIG9mIHRlbgorZGRkdmkxNjAgZGl2aWRlaW50ICAxICAgICAxICAgICAgICAgLT4gIDEKK2RkZHZpMTYxIGRpdmlkZWludCAgMSAgICAgMTAgICAgICAgIC0+ICAwCitkZGR2aTE2MiBkaXZpZGVpbnQgIDEgICAgIDEwMCAgICAgICAtPiAgMAorZGRkdmkxNjMgZGl2aWRlaW50ICAxICAgICAxMDAwICAgICAgLT4gIDAKK2RkZHZpMTY0IGRpdmlkZWludCAgMSAgICAgMTAwMDAgICAgIC0+ICAwCitkZGR2aTE2NSBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMCAgICAtPiAgMAorZGRkdmkxNjYgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwICAgLT4gIDAKK2RkZHZpMTY3IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMDAgIC0+ICAwCitkZGR2aTE2OCBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAwMCAtPiAgMAorZGRkdmkxNzAgZGl2aWRlaW50ICAxICAgIC0xICAgICAgICAgLT4gLTEKK2RkZHZpMTcxIGRpdmlkZWludCAgMSAgICAtMTAgICAgICAgIC0+IC0wCitkZGR2aTE3MiBkaXZpZGVpbnQgIDEgICAgLTEwMCAgICAgICAtPiAtMAorZGRkdmkxNzMgZGl2aWRlaW50ICAxICAgIC0xMDAwICAgICAgLT4gLTAKK2RkZHZpMTc0IGRpdmlkZWludCAgMSAgICAtMTAwMDAgICAgIC0+IC0wCitkZGR2aTE3NSBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMCAgICAtPiAtMAorZGRkdmkxNzYgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwICAgLT4gLTAKK2RkZHZpMTc3IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMDAgIC0+IC0wCitkZGR2aTE3OCBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAwMCAtPiAtMAorZGRkdmkxODAgZGl2aWRlaW50IC0xICAgICAxICAgICAgICAgLT4gLTEKK2RkZHZpMTgxIGRpdmlkZWludCAtMSAgICAgMTAgICAgICAgIC0+IC0wCitkZGR2aTE4MiBkaXZpZGVpbnQgLTEgICAgIDEwMCAgICAgICAtPiAtMAorZGRkdmkxODMgZGl2aWRlaW50IC0xICAgICAxMDAwICAgICAgLT4gLTAKK2RkZHZpMTg0IGRpdmlkZWludCAtMSAgICAgMTAwMDAgICAgIC0+IC0wCitkZGR2aTE4NSBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMCAgICAtPiAtMAorZGRkdmkxODYgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwICAgLT4gLTAKK2RkZHZpMTg3IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMDAgIC0+IC0wCitkZGR2aTE4OCBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAwMCAtPiAtMAorZGRkdmkxOTAgZGl2aWRlaW50IC0xICAgIC0xICAgICAgICAgLT4gIDEKK2RkZHZpMTkxIGRpdmlkZWludCAtMSAgICAtMTAgICAgICAgIC0+ICAwCitkZGR2aTE5MiBkaXZpZGVpbnQgLTEgICAgLTEwMCAgICAgICAtPiAgMAorZGRkdmkxOTMgZGl2aWRlaW50IC0xICAgIC0xMDAwICAgICAgLT4gIDAKK2RkZHZpMTk0IGRpdmlkZWludCAtMSAgICAtMTAwMDAgICAgIC0+ICAwCitkZGR2aTE5NSBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMCAgICAtPiAgMAorZGRkdmkxOTYgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwICAgLT4gIDAKK2RkZHZpMTk3IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMDAgIC0+ICAwCitkZGR2aTE5OCBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAwMCAtPiAgMAorCistLSBzb21lIGxvbmcgb3BlcmFuZCAoYXQgcD05KSBjYXNlcworZGRkdmkwNzAgZGl2aWRlaW50ICA5OTk5OTk5OTkgICAgIDEgIC0+ICA5OTk5OTk5OTkKK2RkZHZpMDcxIGRpdmlkZWludCAgOTk5OTk5OTk5LjQgICAxICAtPiAgOTk5OTk5OTk5CitkZGR2aTA3MiBkaXZpZGVpbnQgIDk5OTk5OTk5OS41ICAgMSAgLT4gIDk5OTk5OTk5OQorZGRkdmkwNzMgZGl2aWRlaW50ICA5OTk5OTk5OTkuOSAgIDEgIC0+ICA5OTk5OTk5OTkKK2RkZHZpMDc0IGRpdmlkZWludCAgOTk5OTk5OTk5Ljk5OSAxICAtPiAgOTk5OTk5OTk5CisKK2RkZHZpMDkwIGRpdmlkZWludCAgMC4gICAgICAgICAgICAxICAgIC0+ICAwCitkZGR2aTA5MSBkaXZpZGVpbnQgIC4wICAgICAgICAgICAgMSAgICAtPiAgMAorZGRkdmkwOTIgZGl2aWRlaW50ICAwLjAwICAgICAgICAgIDEgICAgLT4gIDAKK2RkZHZpMDkzIGRpdmlkZWludCAgMC4wMEUrOSAgICAgICAxICAgIC0+ICAwCitkZGR2aTA5NCBkaXZpZGVpbnQgIDAuMDAwMEUtNTAgICAgMSAgICAtPiAgMAorCitkZGR2aTEwMCBkaXZpZGVpbnQgIDEgIDEgICAtPiAxCitkZGR2aTEwMSBkaXZpZGVpbnQgIDEgIDIgICAtPiAwCitkZGR2aTEwMiBkaXZpZGVpbnQgIDEgIDMgICAtPiAwCitkZGR2aTEwMyBkaXZpZGVpbnQgIDEgIDQgICAtPiAwCitkZGR2aTEwNCBkaXZpZGVpbnQgIDEgIDUgICAtPiAwCitkZGR2aTEwNSBkaXZpZGVpbnQgIDEgIDYgICAtPiAwCitkZGR2aTEwNiBkaXZpZGVpbnQgIDEgIDcgICAtPiAwCitkZGR2aTEwNyBkaXZpZGVpbnQgIDEgIDggICAtPiAwCitkZGR2aTEwOCBkaXZpZGVpbnQgIDEgIDkgICAtPiAwCitkZGR2aTEwOSBkaXZpZGVpbnQgIDEgIDEwICAtPiAwCitkZGR2aTExMCBkaXZpZGVpbnQgIDEgIDEgICAtPiAxCitkZGR2aTExMSBkaXZpZGVpbnQgIDIgIDEgICAtPiAyCitkZGR2aTExMiBkaXZpZGVpbnQgIDMgIDEgICAtPiAzCitkZGR2aTExMyBkaXZpZGVpbnQgIDQgIDEgICAtPiA0CitkZGR2aTExNCBkaXZpZGVpbnQgIDUgIDEgICAtPiA1CitkZGR2aTExNSBkaXZpZGVpbnQgIDYgIDEgICAtPiA2CitkZGR2aTExNiBkaXZpZGVpbnQgIDcgIDEgICAtPiA3CitkZGR2aTExNyBkaXZpZGVpbnQgIDggIDEgICAtPiA4CitkZGR2aTExOCBkaXZpZGVpbnQgIDkgIDEgICAtPiA5CitkZGR2aTExOSBkaXZpZGVpbnQgIDEwIDEgICAtPiAxMAorCistLSBmcm9tIERpYWdCaWdEZWNpbWFsCitkZGR2aTEzMSBkaXZpZGVpbnQgIDEwMS4zICAgMSAgICAgLT4gIDEwMQorZGRkdmkxMzIgZGl2aWRlaW50ICAxMDEuMCAgIDEgICAgIC0+ICAxMDEKK2RkZHZpMTMzIGRpdmlkZWludCAgMTAxLjMgICAzICAgICAtPiAgMzMKK2RkZHZpMTM0IGRpdmlkZWludCAgMTAxLjAgICAzICAgICAtPiAgMzMKK2RkZHZpMTM1IGRpdmlkZWludCAgMi40ICAgICAxICAgICAtPiAgMgorZGRkdmkxMzYgZGl2aWRlaW50ICAyLjQwMCAgIDEgICAgIC0+ICAyCitkZGR2aTEzNyBkaXZpZGVpbnQgIDE4ICAgICAgMTggICAgLT4gIDEKK2RkZHZpMTM4IGRpdmlkZWludCAgMTEyMCAgICAxMDAwICAtPiAgMQorZGRkdmkxMzkgZGl2aWRlaW50ICAyLjQgICAgIDIgICAgIC0+ICAxCitkZGR2aTE0MCBkaXZpZGVpbnQgIDIuNDAwICAgMiAgICAgLT4gIDEKK2RkZHZpMTQxIGRpdmlkZWludCAgMC41ICAgICAyLjAwMCAtPiAgMAorZGRkdmkxNDIgZGl2aWRlaW50ICA4LjAwNSAgIDcgICAgIC0+ICAxCitkZGR2aTE0MyBkaXZpZGVpbnQgIDUgICAgICAgMiAgICAgLT4gIDIKK2RkZHZpMTQ0IGRpdmlkZWludCAgMCAgICAgICAyICAgICAtPiAgMAorZGRkdmkxNDUgZGl2aWRlaW50ICAwLjAwICAgIDIgICAgIC0+ICAwCisKKy0tIE90aGVycworZGRkdmkxNTAgZGl2aWRlaW50ICAxMjM0NSAgNC45OTkgIC0+ICAyNDY5CitkZGR2aTE1MSBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5ICAgLT4gIDI0NzMKK2RkZHZpMTUyIGRpdmlkZWludCAgMTIzNDUgIDQuOSAgICAtPiAgMjUxOQorZGRkdmkxNTMgZGl2aWRlaW50ICAxMjM0NSAgNSAgICAgIC0+ICAyNDY5CitkZGR2aTE1NCBkaXZpZGVpbnQgIDEyMzQ1ICA1LjEgICAgLT4gIDI0MjAKK2RkZHZpMTU1IGRpdmlkZWludCAgMTIzNDUgIDUuMDEgICAtPiAgMjQ2NAorZGRkdmkxNTYgZGl2aWRlaW50ICAxMjM0NSAgNS4wMDEgIC0+ICAyNDY4CitkZGR2aTE1NyBkaXZpZGVpbnQgICAgMTAxICA3LjYgICAgLT4gIDEzCisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgZGl2aWRlaW50IGJ5IDAKK2RkZHZpMjAxIGRpdmlkZWludCAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGR2aTIwMiBkaXZpZGVpbnQgIDAuMEU1ICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkdmkyMDMgZGl2aWRlaW50ICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZHZpMjA0IGRpdmlkZWludCAgMC4wMDAxIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIwNSBkaXZpZGVpbnQgIDAuMDEgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMDYgZGl2aWRlaW50ICAwLjEgICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjA3IGRpdmlkZWludCAgMSAgICAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIwOCBkaXZpZGVpbnQgIDEgICAgICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMDkgZGl2aWRlaW50IDEwICAgICAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpMjEwIGRpdmlkZWludCAxRSsxMDAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTIxMSBkaXZpZGVpbnQgMUUrMzgwICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMTQgZGl2aWRlaW50ICAtMC4wMDAxIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMTUgZGl2aWRlaW50ICAtMC4wMSAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMTYgZGl2aWRlaW50ICAtMC4xICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMTcgZGl2aWRlaW50ICAtMSAgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMTggZGl2aWRlaW50ICAtMSAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMTkgZGl2aWRlaW50IC0xMCAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMjAgZGl2aWRlaW50IC0xRSsxMDAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmkyMjEgZGl2aWRlaW50IC0xRSszODAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cKK2RkZHZpMjcwIGRpdmlkZWludCAxIDFlMzg0ICAgICAgICAgIC0+IDAKK2RkZHZpMjcxIGRpdmlkZWludCAxIDAuOWUzODQgICAgICAgIC0+IDAKK2RkZHZpMjcyIGRpdmlkZWludCAxIDAuOTllMzg0ICAgICAgIC0+IDAKK2RkZHZpMjczIGRpdmlkZWludCAxIDAuOTk5OTk5OTk5OTk5OTk5OWUzODQgICAgICAgLT4gMAorZGRkdmkyNzQgZGl2aWRlaW50IDllMzg0ICAgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMjc1IGRpdmlkZWludCA5LjllMzg0ICAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZGR2aTI3NiBkaXZpZGVpbnQgOS45OWUzODQgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkyNzcgZGl2aWRlaW50IDkuOTk5OTk5OTk5OTk5OTk5ZTM4NCAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKK2RkZHZpMjgwIGRpdmlkZWludCAwLjEgOWUtMzgzICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZGR2aTI4MSBkaXZpZGVpbnQgMC4xIDk5ZS0zODMgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkyODIgZGl2aWRlaW50IDAuMSA5OTllLTM4MyAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMjgzIGRpdmlkZWludCAwLjEgOWUtMzgyICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZGR2aTI4NCBkaXZpZGVpbnQgMC4xIDk5ZS0zODIgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSBHRCBlZGdlIGNhc2VzOiBsaHMgc21hbGxlciB0aGFuIHJocyBidXQgbW9yZSBkaWdpdHMKK2RkZHZpMzAxICBkaXZpZGVpbnQgIDAuOSAgICAgIDIgICAgICAtPiAgMAorZGRkdmkzMDIgIGRpdmlkZWludCAgMC45ICAgICAgMi4wICAgIC0+ICAwCitkZGR2aTMwMyAgZGl2aWRlaW50ICAwLjkgICAgICAyLjEgICAgLT4gIDAKK2RkZHZpMzA0ICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMDAgICAtPiAgMAorZGRkdmkzMDUgIGRpdmlkZWludCAgMC45ICAgICAgMi4wMSAgIC0+ICAwCitkZGR2aTMwNiAgZGl2aWRlaW50ICAwLjEyICAgICAxICAgICAgLT4gIDAKK2RkZHZpMzA3ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMCAgICAtPiAgMAorZGRkdmkzMDggIGRpdmlkZWludCAgMC4xMiAgICAgMS4wMCAgIC0+ICAwCitkZGR2aTMwOSAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAgICAgLT4gIDAKK2RkZHZpMzEwICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMDAgICAtPiAgMAorZGRkdmkzMTEgIGRpdmlkZWludCAgMC4xMiAgICAgMiAgICAgIC0+ICAwCitkZGR2aTMxMiAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAgICAgLT4gIDAKK2RkZHZpMzEzICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMSAgICAtPiAgMAorZGRkdmkzMTQgIGRpdmlkZWludCAgMC4xMiAgICAgMi4wMCAgIC0+ICAwCitkZGR2aTMxNSAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAxICAgLT4gIDAKKworLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlCitkZGR2aTMzMCAgZGl2aWRlaW50ICAxMjM0NTY3ODkwMTIzNDU2ICAxMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQ1CitkZGR2aTMzMSAgZGl2aWRlaW50ICAxMjM0NTY3ODkwMTIzNDU2ICAgMSAgICAtPiAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRkdmkzMzIgIGRpdmlkZWludCAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZGR2aTMzMyAgZGl2aWRlaW50ICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdCitkZGR2aTEwNTEgZGl2aWRlaW50ICAxZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMTA1MiBkaXZpZGVpbnQgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRkdmkxMDUzIGRpdmlkZWludCAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZGR2aTEwNTQgZGl2aWRlaW50IC0xZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkZHZpMTA1NSBkaXZpZGVpbnQgIDFlLTI3NyAgMWUrMzExIC0+ICAwCitkZGR2aTEwNTYgZGl2aWRlaW50ICAxZS0yNzcgLTFlKzMxMSAtPiAtMAorZGRkdmkxMDU3IGRpdmlkZWludCAtMWUtMjc3ICAxZSszMTEgLT4gLTAKK2RkZHZpMTA1OCBkaXZpZGVpbnQgLTFlLTI3NyAtMWUrMzExIC0+ICAwCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorZGRkdmkxMDYwIGRpdmlkZWludCAxZS0yOTEgMWUrMTAxIC0+IDAKK2RkZHZpMTA2MSBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMiAtPiAwCitkZGR2aTEwNjIgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDMgLT4gMAorZGRkdmkxMDYzIGRpdmlkZWludCAxZS0yOTEgMWUrMTA0IC0+IDAKK2RkZHZpMTA2NCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNSAtPiAwCitkZGR2aTEwNjUgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDYgLT4gMAorZGRkdmkxMDY2IGRpdmlkZWludCAxZS0yOTEgMWUrMTA3IC0+IDAKK2RkZHZpMTA2NyBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwOCAtPiAwCitkZGR2aTEwNjggZGl2aWRlaW50IDFlLTI5MSAxZSsxMDkgLT4gMAorZGRkdmkxMDY5IGRpdmlkZWludCAxZS0yOTEgMWUrMTEwIC0+IDAKKworZGRkdmkxMTAxIGRpdmlkZWludCAgMS4wMDAwRS0zOTQgIDEgICAgIC0+IDAKK2RkZHZpMTEwMiBkaXZpZGVpbnQgIDEuMDAwRS0zOTQgICAxZSsxICAtPiAwCitkZGR2aTExMDMgZGl2aWRlaW50ICAxLjAwRS0zOTQgICAgMWUrMiAgLT4gMAorCitkZGR2aTExMTggZGl2aWRlaW50ICAxRS0zOTQgICAgICAgMWUrNCAgLT4gMAorZGRkdmkxMTE5IGRpdmlkZWludCAgM0UtMzk0ICAgICAgLTFlKzUgIC0+IC0wCitkZGR2aTExMjAgZGl2aWRlaW50ICA1RS0zOTQgICAgICAgMWUrNSAgLT4gMAorCitkZGR2aTExMjQgZGl2aWRlaW50ICAxRS0zOTQgICAgICAtMWUrNCAgLT4gLTAKK2RkZHZpMTEzMCBkaXZpZGVpbnQgIDMuMEUtMzk0ICAgIC0xZSs1ICAtPiAtMAorCitkZGR2aTExMzEgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMjAwIC0+IDAKK2RkZHZpMTEzMiBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsxOTkgLT4gMAorZGRkdmkxMTMzIGRpdmlkZWludCAgMS4wRS0xOTkgICAgIDFlKzE5OCAtPiAwCitkZGR2aTExMzQgZGl2aWRlaW50ICAyLjBFLTE5OSAgICAgMmUrMTk4IC0+IDAKK2RkZHZpMTEzNSBkaXZpZGVpbnQgIDQuMEUtMTk5ICAgICA0ZSsxOTggLT4gMAorCistLSBsb25nIG9wZXJhbmQgY2hlY2tzCitkZGR2aTQwMSBkaXZpZGVpbnQgMTIzNDU2NzgwMDAgMTAwIC0+IDEyMzQ1Njc4MAorZGRkdmk0MDIgZGl2aWRlaW50IDEgMTIzNDU2NzgwMDAgICAtPiAwCitkZGR2aTQwMyBkaXZpZGVpbnQgMTIzNDU2NzgwMCAgMTAgIC0+IDEyMzQ1Njc4MAorZGRkdmk0MDQgZGl2aWRlaW50IDEgMTIzNDU2NzgwMCAgICAtPiAwCitkZGR2aTQwNSBkaXZpZGVpbnQgMTIzNDU2Nzg5MCAgMTAgIC0+IDEyMzQ1Njc4OQorZGRkdmk0MDYgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MCAgICAtPiAwCitkZGR2aTQwNyBkaXZpZGVpbnQgMTIzNDU2Nzg5MSAgMTAgIC0+IDEyMzQ1Njc4OQorZGRkdmk0MDggZGl2aWRlaW50IDEgMTIzNDU2Nzg5MSAgICAtPiAwCitkZGR2aTQwOSBkaXZpZGVpbnQgMTIzNDU2Nzg5MDEgMTAwIC0+IDEyMzQ1Njc4OQorZGRkdmk0MTAgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MDEgICAtPiAwCitkZGR2aTQxMSBkaXZpZGVpbnQgMTIzNDU2Nzg5NiAgMTAgIC0+IDEyMzQ1Njc4OQorZGRkdmk0MTIgZGl2aWRlaW50IDEgMTIzNDU2Nzg5NiAgICAtPiAwCitkZGR2aTQxMyBkaXZpZGVpbnQgMTIzNDU2Nzg5NDggMTAwIC0+IDEyMzQ1Njc4OQorZGRkdmk0MTQgZGl2aWRlaW50IDEyMzQ1Njc4OTQ5IDEwMCAtPiAxMjM0NTY3ODkKK2RkZHZpNDE1IGRpdmlkZWludCAxMjM0NTY3ODk1MCAxMDAgLT4gMTIzNDU2Nzg5CitkZGR2aTQxNiBkaXZpZGVpbnQgMTIzNDU2Nzg5NTEgMTAwIC0+IDEyMzQ1Njc4OQorZGRkdmk0MTcgZGl2aWRlaW50IDEyMzQ1Njc4OTk5IDEwMCAtPiAxMjM0NTY3ODkKK2RkZHZpNDQxIGRpdmlkZWludCAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwCitkZGR2aTQ0MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAtPiAwCitkZGR2aTQ0MyBkaXZpZGVpbnQgMTIzNDU2NzgwMCAgMSAtPiAxMjM0NTY3ODAwCitkZGR2aTQ0NCBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwICAtPiAwCitkZGR2aTQ0NSBkaXZpZGVpbnQgMTIzNDU2Nzg5MCAgMSAtPiAxMjM0NTY3ODkwCitkZGR2aTQ0NiBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwICAtPiAwCitkZGR2aTQ0NyBkaXZpZGVpbnQgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxCitkZGR2aTQ0OCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAtPiAwCitkZGR2aTQ0OSBkaXZpZGVpbnQgMTIzNDU2Nzg5MDEgMSAtPiAxMjM0NTY3ODkwMQorZGRkdmk0NTAgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MDEgLT4gMAorZGRkdmk0NTEgZGl2aWRlaW50IDEyMzQ1Njc4OTYgIDEgLT4gMTIzNDU2Nzg5NgorZGRkdmk0NTIgZGl2aWRlaW50IDEgMTIzNDU2Nzg5NiAgLT4gMAorCistLSBtb3JlIHplcm9zLCBldGMuCitkZGR2aTUzMSBkaXZpZGVpbnQgNS4wMCAxRS0zICAgIC0+IDUwMDAKK2RkZHZpNTMyIGRpdmlkZWludCAwMC4wMCAwLjAwMCAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkdmk1MzMgZGl2aWRlaW50IDAwLjAwIDBFLTMgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZGR2aTUzNCBkaXZpZGVpbnQgIDAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkZHZpNTM1IGRpdmlkZWludCAtMCAgICAgMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRkdmk1MzYgZGl2aWRlaW50IC0wICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCisKK2RkZHZpNTQxIGRpdmlkZWludCAgMCAgICAtMSAgICAgLT4gLTAKK2RkZHZpNTQyIGRpdmlkZWludCAtMCAgICAtMSAgICAgLT4gIDAKK2RkZHZpNTQzIGRpdmlkZWludCAgMCAgICAgMSAgICAgLT4gIDAKK2RkZHZpNTQ0IGRpdmlkZWludCAtMCAgICAgMSAgICAgLT4gLTAKK2RkZHZpNTQ1IGRpdmlkZWludCAtMSAgICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpNTQ2IGRpdmlkZWludCAtMSAgICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpNTQ3IGRpdmlkZWludCAgMSAgICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpNTQ4IGRpdmlkZWludCAgMSAgICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZGRkdmk1NTEgZGl2aWRlaW50ICAwLjAgIC0xICAgICAtPiAtMAorZGRkdmk1NTIgZGl2aWRlaW50IC0wLjAgIC0xICAgICAtPiAgMAorZGRkdmk1NTMgZGl2aWRlaW50ICAwLjAgICAxICAgICAtPiAgMAorZGRkdmk1NTQgZGl2aWRlaW50IC0wLjAgICAxICAgICAtPiAtMAorZGRkdmk1NTUgZGl2aWRlaW50IC0xLjAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NTYgZGl2aWRlaW50IC0xLjAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NTcgZGl2aWRlaW50ICAxLjAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGRkdmk1NTggZGl2aWRlaW50ICAxLjAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkZGR2aTU2MSBkaXZpZGVpbnQgIDAgICAgLTEuMCAgIC0+IC0wCitkZGR2aTU2MiBkaXZpZGVpbnQgLTAgICAgLTEuMCAgIC0+ICAwCitkZGR2aTU2MyBkaXZpZGVpbnQgIDAgICAgIDEuMCAgIC0+ICAwCitkZGR2aTU2NCBkaXZpZGVpbnQgLTAgICAgIDEuMCAgIC0+IC0wCitkZGR2aTU2NSBkaXZpZGVpbnQgLTEgICAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTU2NiBkaXZpZGVpbnQgLTEgICAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTU2NyBkaXZpZGVpbnQgIDEgICAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGR2aTU2OCBkaXZpZGVpbnQgIDEgICAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RkZHZpNTcxIGRpdmlkZWludCAgMC4wICAtMS4wICAgLT4gLTAKK2RkZHZpNTcyIGRpdmlkZWludCAtMC4wICAtMS4wICAgLT4gIDAKK2RkZHZpNTczIGRpdmlkZWludCAgMC4wICAgMS4wICAgLT4gIDAKK2RkZHZpNTc0IGRpdmlkZWludCAtMC4wICAgMS4wICAgLT4gLTAKK2RkZHZpNTc1IGRpdmlkZWludCAtMS4wICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpNTc2IGRpdmlkZWludCAtMS4wICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpNTc3IGRpdmlkZWludCAgMS4wICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RkZHZpNTc4IGRpdmlkZWludCAgMS4wICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworLS0gU3BlY2lhbHMKK2RkZHZpNTgwIGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk1ODEgZGl2aWRlaW50ICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RkZHZpNTgyIGRpdmlkZWludCAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkZGR2aTU4MyBkaXZpZGVpbnQgIEluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZGRkdmk1ODQgZGl2aWRlaW50ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RkZHZpNTg1IGRpdmlkZWludCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkZGR2aTU4NiBkaXZpZGVpbnQgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZGRkdmk1ODcgZGl2aWRlaW50ICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTU4OCBkaXZpZGVpbnQgLTEwMDAgIEluZiAgIC0+IC0wCitkZGR2aTU4OSBkaXZpZGVpbnQgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNTkwIGRpdmlkZWludCAtMSAgICAgSW5mICAgLT4gLTAKK2RkZHZpNTkxIGRpdmlkZWludCAtMCAgICAgSW5mICAgLT4gLTAKK2RkZHZpNTkyIGRpdmlkZWludCAgMCAgICAgSW5mICAgLT4gIDAKK2RkZHZpNTkzIGRpdmlkZWludCAgMSAgICAgSW5mICAgLT4gIDAKK2RkZHZpNTk0IGRpdmlkZWludCAgMTAwMCAgSW5mICAgLT4gIDAKK2RkZHZpNTk1IGRpdmlkZWludCAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZGR2aTYwMCBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjAxIGRpdmlkZWludCAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkZGR2aTYwMiBkaXZpZGVpbnQgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZGRkdmk2MDMgZGl2aWRlaW50IC1JbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RkZHZpNjA0IGRpdmlkZWludCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkZGR2aTYwNSBkaXZpZGVpbnQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGRkdmk2MDYgZGl2aWRlaW50IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RkZHZpNjA3IGRpdmlkZWludCAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2MDggZGl2aWRlaW50IC0xMDAwICBJbmYgICAtPiAtMAorZGRkdmk2MDkgZGl2aWRlaW50IC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTYxMCBkaXZpZGVpbnQgLTEgICAgLUluZiAgIC0+ICAwCitkZGR2aTYxMSBkaXZpZGVpbnQgLTAgICAgLUluZiAgIC0+ICAwCitkZGR2aTYxMiBkaXZpZGVpbnQgIDAgICAgLUluZiAgIC0+IC0wCitkZGR2aTYxMyBkaXZpZGVpbnQgIDEgICAgLUluZiAgIC0+IC0wCitkZGR2aTYxNCBkaXZpZGVpbnQgIDEwMDAgLUluZiAgIC0+IC0wCitkZGR2aTYxNSBkaXZpZGVpbnQgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRkdmk2MjEgZGl2aWRlaW50ICBOYU4gLUluZiAgICAtPiAgTmFOCitkZGR2aTYyMiBkaXZpZGVpbnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RkZHZpNjIzIGRpdmlkZWludCAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRkdmk2MjQgZGl2aWRlaW50ICBOYU4gLTAgICAgICAtPiAgTmFOCitkZGR2aTYyNSBkaXZpZGVpbnQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RkZHZpNjI2IGRpdmlkZWludCAgTmFOICAxICAgICAgLT4gIE5hTgorZGRkdmk2MjcgZGl2aWRlaW50ICBOYU4gIDEwMDAgICAtPiAgTmFOCitkZGR2aTYyOCBkaXZpZGVpbnQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RkZHZpNjI5IGRpdmlkZWludCAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRkdmk2MzAgZGl2aWRlaW50IC1JbmYgIE5hTiAgICAtPiAgTmFOCitkZGR2aTYzMSBkaXZpZGVpbnQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RkZHZpNjMyIGRpdmlkZWludCAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRkdmk2MzMgZGl2aWRlaW50IC0wICAgIE5hTiAgICAtPiAgTmFOCitkZGR2aTYzNCBkaXZpZGVpbnQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RkZHZpNjM1IGRpdmlkZWludCAgMSAgICBOYU4gICAgLT4gIE5hTgorZGRkdmk2MzYgZGl2aWRlaW50ICAxMDAwIE5hTiAgICAtPiAgTmFOCitkZGR2aTYzNyBkaXZpZGVpbnQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRkdmk2NDEgZGl2aWRlaW50ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NDIgZGl2aWRlaW50ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NDMgZGl2aWRlaW50ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NDQgZGl2aWRlaW50ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NDUgZGl2aWRlaW50ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NDYgZGl2aWRlaW50ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NDcgZGl2aWRlaW50ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NDggZGl2aWRlaW50ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NDkgZGl2aWRlaW50ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NTAgZGl2aWRlaW50ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NTEgZGl2aWRlaW50IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NTIgZGl2aWRlaW50IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NTMgZGl2aWRlaW50IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NTQgZGl2aWRlaW50IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NTUgZGl2aWRlaW50ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NTYgZGl2aWRlaW50ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NTcgZGl2aWRlaW50ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NTggZGl2aWRlaW50ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NTkgZGl2aWRlaW50ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZGR2aTY2MSBkaXZpZGVpbnQgIE5hTjkgLUluZiAgIC0+ICBOYU45CitkZGR2aTY2MiBkaXZpZGVpbnQgIE5hTjggIDEwMDAgIC0+ICBOYU44CitkZGR2aTY2MyBkaXZpZGVpbnQgIE5hTjcgIEluZiAgIC0+ICBOYU43CitkZGR2aTY2NCBkaXZpZGVpbnQgLU5hTjYgIE5hTjUgIC0+IC1OYU42CitkZGR2aTY2NSBkaXZpZGVpbnQgLUluZiAgIE5hTjQgIC0+ICBOYU40CitkZGR2aTY2NiBkaXZpZGVpbnQgLTEwMDAgIE5hTjMgIC0+ICBOYU4zCitkZGR2aTY2NyBkaXZpZGVpbnQgIEluZiAgLU5hTjIgIC0+IC1OYU4yCisKK2RkZHZpNjcxIGRpdmlkZWludCAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY3MiBkaXZpZGVpbnQgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NzMgZGl2aWRlaW50ICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjc0IGRpdmlkZWludCAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY3NSBkaXZpZGVpbnQgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NzYgZGl2aWRlaW50IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpNjc3IGRpdmlkZWludCAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZGR2aTY3OCBkaXZpZGVpbnQgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRkdmk2NzkgZGl2aWRlaW50ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0cworZGRkdmk5MDAgZGl2aWRlaW50ICAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZHZpOTAxIGRpdmlkZWludCAgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRW5jb2RlLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRW5jb2RlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5ZDMxYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRFbmNvZGUuZGVjVGVzdApAQCAtMCwwICsxLDQ5NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZEVuY29kZS5kZWNUZXN0IC0tIGRlY2ltYWwgZWlnaHQtYnl0ZSBmb3JtYXQgdGVzdGNhc2VzICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAwLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBbUHJldmlvdXNseSBjYWxsZWQgZGVjaW1hbDY0LmRlY1Rlc3RdCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGlzIGZvciB0aGUgZWlnaHQtYnl0ZSBjb25jcmV0ZSByZXByZXNlbnRhdGlvbi4KKy0tIEl0cyBjaGFyYWN0ZXJpc3RpY3MgYXJlOgorLS0KKy0tICAxIGJpdCAgc2lnbgorLS0gIDUgYml0cyBjb21iaW5hdGlvbiBmaWVsZAorLS0gIDggYml0cyBleHBvbmVudCBjb250aW51YXRpb24KKy0tIDUwIGJpdHMgY29lZmZpY2llbnQgY29udGludWF0aW9uCistLQorLS0gVG90YWwgZXhwb25lbnQgbGVuZ3RoIDEwIGJpdHMKKy0tIFRvdGFsIGNvZWZmaWNpZW50IGxlbmd0aCA1NCBiaXRzICgxNiBkaWdpdHMpCistLQorLS0gRWxpbWl0ID0gIDc2NyAobWF4aW11bSBlbmNvZGVkIGV4cG9uZW50KQorLS0gRW1heCAgID0gIDM4NCAobGFyZ2VzdCBleHBvbmVudCB2YWx1ZSkKKy0tIEVtaW4gICA9IC0zODMgKHNtYWxsZXN0IGV4cG9uZW50IHZhbHVlKQorLS0gYmlhcyAgID0gIDM5OCAoc3VidHJhY3RlZCBmcm9tIGVuY29kZWQgZXhwb25lbnQpID0gLUV0aW55CisKKy0tIFRoZSB0ZXN0Y2FzZXMgaGVyZSBoYXZlIG9ubHkgZXhhY3RseSByZXByZXNlbnRhYmxlIGRhdGEgb24gdGhlCistLSAnbGVmdC1oYW5kLXNpZGUnOyByb3VuZGluZyBmcm9tIHN0cmluZ3MgaXMgdGVzdGVkIGluICdiYXNlJworLS0gdGVzdGNhc2UgZ3JvdXBzLgorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCisKKy0tIEdlbmVyYWwgdGVzdGNhc2VzCistLSAobW9zdGx5IGRlcml2ZWQgZnJvbSB0aGUgU3RyYXdtYW4gNCBkb2N1bWVudCBhbmQgZXhhbXBsZXMpCitkZWNlMDAxIGFwcGx5ICAgI0EyMzAwMDAwMDAwMDAzRDAgLT4gLTcuNTAKK2RlY2UwMDIgYXBwbHkgICAtNy41MCAgICAgICAgICAgICAtPiAjQTIzMDAwMDAwMDAwMDNEMAorLS0gZGVyaXZhdGl2ZSBjYW5vbmljYWwgcGxhaW4gc3RyaW5ncworZGVjZTAwMyBhcHBseSAgICNBMjNjMDAwMDAwMDAwM0QwIC0+IC03LjUwRSszCitkZWNlMDA0IGFwcGx5ICAgLTcuNTBFKzMgICAgICAgICAgLT4gI0EyM2MwMDAwMDAwMDAzRDAKK2RlY2UwMDUgYXBwbHkgICAjQTIzODAwMDAwMDAwMDNEMCAtPiAtNzUwCitkZWNlMDA2IGFwcGx5ICAgLTc1MCAgICAgICAgICAgICAgLT4gI0EyMzgwMDAwMDAwMDAzRDAKK2RlY2UwMDcgYXBwbHkgICAjQTIzNDAwMDAwMDAwMDNEMCAtPiAtNzUuMAorZGVjZTAwOCBhcHBseSAgIC03NS4wICAgICAgICAgICAgIC0+ICNBMjM0MDAwMDAwMDAwM0QwCitkZWNlMDA5IGFwcGx5ICAgI0EyMmMwMDAwMDAwMDAzRDAgLT4gLTAuNzUwCitkZWNlMDEwIGFwcGx5ICAgLTAuNzUwICAgICAgICAgICAgLT4gI0EyMmMwMDAwMDAwMDAzRDAKK2RlY2UwMTEgYXBwbHkgICAjQTIyODAwMDAwMDAwMDNEMCAtPiAtMC4wNzUwCitkZWNlMDEyIGFwcGx5ICAgLTAuMDc1MCAgICAgICAgICAgLT4gI0EyMjgwMDAwMDAwMDAzRDAKK2RlY2UwMTMgYXBwbHkgICAjQTIyMDAwMDAwMDAwMDNEMCAtPiAtMC4wMDA3NTAKK2RlY2UwMTQgYXBwbHkgICAtMC4wMDA3NTAgICAgICAgICAtPiAjQTIyMDAwMDAwMDAwMDNEMAorZGVjZTAxNSBhcHBseSAgICNBMjE4MDAwMDAwMDAwM0QwIC0+IC0wLjAwMDAwNzUwCitkZWNlMDE2IGFwcGx5ICAgLTAuMDAwMDA3NTAgICAgICAgLT4gI0EyMTgwMDAwMDAwMDAzRDAKK2RlY2UwMTcgYXBwbHkgICAjQTIxNDAwMDAwMDAwMDNEMCAtPiAtNy41MEUtNworZGVjZTAxOCBhcHBseSAgIC03LjUwRS03ICAgICAgICAgIC0+ICNBMjE0MDAwMDAwMDAwM0QwCisKKy0tIE5vcm1hbGl0eQorZGVjZTAyMCBhcHBseSAgIDEyMzQ1Njc4OTAxMjM0NTYgICAtPiAjMjYzOTM0YjljMWUyOGU1NgorZGVjZTAyMSBhcHBseSAgLTEyMzQ1Njc4OTAxMjM0NTYgICAtPiAjYTYzOTM0YjljMWUyOGU1NgorZGVjZTAyMiBhcHBseSAgIDEyMzQuNTY3ODkwMTIzNDU2ICAtPiAjMjYwOTM0YjljMWUyOGU1NgorZGVjZTAyMyBhcHBseSAgIzI2MDkzNGI5YzFlMjhlNTYgICAtPiAxMjM0LjU2Nzg5MDEyMzQ1NgorZGVjZTAyNCBhcHBseSAgIDExMTExMTExMTExMTExMTEgICAtPiAjMjYzODkxMjQ0OTEyNDQ5MQorZGVjZTAyNSBhcHBseSAgIDk5OTk5OTk5OTk5OTk5OTkgICAtPiAjNmUzOGZmM2ZjZmYzZmNmZgorCistLSBObWF4IGFuZCBzaW1pbGFyCitkZWNlMDMxIGFwcGx5ICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKK2RlY2UwMzIgYXBwbHkgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgorZGVjZTAzMyBhcHBseSAgICM3N2ZjZmYzZmNmZjNmY2ZmICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RlY2UwMzQgYXBwbHkgICAxLjIzNDU2Nzg5MDEyMzQ1NkUrMzg0ICAtPiAjNDdmZDM0YjljMWUyOGU1NgorZGVjZTAzNSBhcHBseSAgICM0N2ZkMzRiOWMxZTI4ZTU2ICAgICAgIC0+IDEuMjM0NTY3ODkwMTIzNDU2RSszODQKKy0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpCitkZWNlMDM2IGFwcGx5ICAgMS4yM0UrMzg0ICAgICAgICAgICAgICAgLT4gIzQ3ZmQzMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjZTAzNyBhcHBseSAgICM0N2ZkMzAwMDAwMDAwMDAwICAgICAgIC0+IDEuMjMwMDAwMDAwMDAwMDAwRSszODQKK2RlY2QwMzggYXBwbHkgICAxRSszODQgICAgICAgICAgICAgICAgICAtPiAjNDdmYzAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkMDM5IGFwcGx5ICAgIzQ3ZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NAorCitkZWNkMDUxIGFwcGx5ICAgMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDQ5YzUKK2RlY2QwNTIgYXBwbHkgICAjMjIzODAwMDAwMDAwNDljNSAgICAgICAtPiAxMjM0NQorZGVjZDA1MyBhcHBseSAgIDEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwNTM0CitkZWNkMDU0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDA1MzQgICAgICAgLT4gMTIzNAorZGVjZDA1NSBhcHBseSAgIDEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMGEzCitkZWNkMDU2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwYTMgICAgICAgLT4gMTIzCitkZWNkMDU3IGFwcGx5ICAgMTIgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwMTIKK2RlY2QwNTggYXBwbHkgICAjMjIzODAwMDAwMDAwMDAxMiAgICAgICAtPiAxMgorZGVjZDA1OSBhcHBseSAgIDEgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDAxCitkZWNkMDYwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMDEgICAgICAgLT4gMQorZGVjZDA2MSBhcHBseSAgIDEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDAwMGEzCitkZWNkMDYyIGFwcGx5ICAgIzIyMzAwMDAwMDAwMDAwYTMgICAgICAgLT4gMS4yMworZGVjZDA2MyBhcHBseSAgIDEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDA0OWM1CitkZWNkMDY0IGFwcGx5ICAgIzIyMzAwMDAwMDAwMDQ5YzUgICAgICAgLT4gMTIzLjQ1CisKKy0tIE5taW4gYW5kIGJlbG93CitkZWNkMDcxIGFwcGx5ICAgMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gIzAwM2MwMDAwMDAwMDAwMDEKK2RlY2QwNzIgYXBwbHkgICAjMDAzYzAwMDAwMDAwMDAwMSAgICAgICAtPiAxRS0zODMKK2RlY2QwNzMgYXBwbHkgICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAjMDQwMDAwMDAwMDAwMDAwMAorZGVjZDA3NCBhcHBseSAgICMwNDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RlY2QwNzUgYXBwbHkgICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAjMDQwMDAwMDAwMDAwMDAwMQorZGVjZDA3NiBhcHBseSAgICMwNDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRS0zODMKKworZGVjZDA3NyBhcHBseSAgIDAuMTAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICMwMDAwODAwMDAwMDAwMDAwICAgICAgU3Vibm9ybWFsCitkZWNkMDc4IGFwcGx5ICAgIzAwMDA4MDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMEUtMzg0ICBTdWJub3JtYWwKK2RlY2QwNzkgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAxMEUtMzgzICAtPiAjMDAwMDAwMDAwMDAwMDAxMCAgICAgIFN1Ym5vcm1hbAorZGVjZDA4MCBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDEwICAgICAgIC0+IDEuMEUtMzk3ICAgICAgICAgICAgICAgU3Vibm9ybWFsCitkZWNkMDgxIGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMUUtMzgzICAgLT4gIzAwMDQwMDAwMDAwMDAwMDEgICAgICBTdWJub3JtYWwKK2RlY2QwODIgYXBwbHkgICAjMDAwNDAwMDAwMDAwMDAwMSAgICAgICAtPiAxRS0zOTcgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorZGVjZDA4MyBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+ICMwMDAwMDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsCitkZWNkMDg0IGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUtMzk4ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgc21hbGxlc3QgYWxsLW5pbmVzCitkZWNkMDg1IGFwcGx5ICAgOTk5OTk5OTk5OTk5OTk5OUUtMzk4ICAgLT4gIzY0MDBmZjNmY2ZmM2ZjZmYKK2RlY2QwODYgYXBwbHkgICAjNjQwMGZmM2ZjZmYzZmNmZiAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzCistLSBhbmQgYSBwcm9ibGVtYXRpYyBkaXZpZGUgcmVzdWx0CitkZWNkMDg4IGFwcGx5ICAgMS4xMTExMTExMTExMTExMTFFLTM4MyAgLT4gIzA0MDA5MTI0NDkxMjQ0OTEKK2RlY2QwODkgYXBwbHkgICAjMDQwMDkxMjQ0OTEyNDQ5MSAgICAgICAtPiAxLjExMTExMTExMTExMTExMUUtMzgzCisKKy0tIGZvcnRpZXMKK2RlY2QwOTAgYXBwbHkgICAgICAgIDQwICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDQwCitkZWNkMDkxIGFwcGx5ICAgICAgICAzOS45OSAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMGNmZgorCistLSB1bmRlcmZsb3dzIGNhbm5vdCBiZSB0ZXN0ZWQgYXMgYWxsIExIUyBleGFjdAorCistLSBTYW1lIGFnYWluLCBuZWdhdGl2ZXMKKy0tIE5tYXggYW5kIHNpbWlsYXIKK2RlY2QxMjIgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAjZjdmY2ZmM2ZjZmYzZmNmZgorZGVjZDEyMyBhcHBseSAgICNmN2ZjZmYzZmNmZjNmY2ZmICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZWNkMTI0IGFwcGx5ICAtMS4yMzQ1Njc4OTAxMjM0NTZFKzM4NCAgLT4gI2M3ZmQzNGI5YzFlMjhlNTYKK2RlY2QxMjUgYXBwbHkgICAjYzdmZDM0YjljMWUyOGU1NiAgICAgICAtPiAtMS4yMzQ1Njc4OTAxMjM0NTZFKzM4NAorLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykKK2RlY2QxMzAgYXBwbHkgIC0xLjIzRSszODQgICAgICAgICAgICAgICAtPiAjYzdmZDMwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkMTMxIGFwcGx5ICAgI2M3ZmQzMDAwMDAwMDAwMDAgICAgICAgLT4gLTEuMjMwMDAwMDAwMDAwMDAwRSszODQKK2RlY2QxMzIgYXBwbHkgIC0xRSszODQgICAgICAgICAgICAgICAgICAtPiAjYzdmYzAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkMTMzIGFwcGx5ICAgI2M3ZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRSszODQKKworLS0gb3ZlcmZsb3dzCitkZWNkMTUxIGFwcGx5ICAtMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gI2EyMzgwMDAwMDAwMDQ5YzUKK2RlY2QxNTIgYXBwbHkgICAjYTIzODAwMDAwMDAwNDljNSAgICAgICAtPiAtMTIzNDUKK2RlY2QxNTMgYXBwbHkgIC0xMjM0ICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDUzNAorZGVjZDE1NCBhcHBseSAgICNhMjM4MDAwMDAwMDAwNTM0ICAgICAgIC0+IC0xMjM0CitkZWNkMTU1IGFwcGx5ICAtMTIzICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMzgwMDAwMDAwMDAwYTMKK2RlY2QxNTYgYXBwbHkgICAjYTIzODAwMDAwMDAwMDBhMyAgICAgICAtPiAtMTIzCitkZWNkMTU3IGFwcGx5ICAtMTIgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMzgwMDAwMDAwMDAwMTIKK2RlY2QxNTggYXBwbHkgICAjYTIzODAwMDAwMDAwMDAxMiAgICAgICAtPiAtMTIKK2RlY2QxNTkgYXBwbHkgIC0xICAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDAwMQorZGVjZDE2MCBhcHBseSAgICNhMjM4MDAwMDAwMDAwMDAxICAgICAgIC0+IC0xCitkZWNkMTYxIGFwcGx5ICAtMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gI2EyMzAwMDAwMDAwMDAwYTMKK2RlY2QxNjIgYXBwbHkgICAjYTIzMDAwMDAwMDAwMDBhMyAgICAgICAtPiAtMS4yMworZGVjZDE2MyBhcHBseSAgLTEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICNhMjMwMDAwMDAwMDA0OWM1CitkZWNkMTY0IGFwcGx5ICAgI2EyMzAwMDAwMDAwMDQ5YzUgICAgICAgLT4gLTEyMy40NQorCistLSBObWluIGFuZCBiZWxvdworZGVjZDE3MSBhcHBseSAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+ICM4MDNjMDAwMDAwMDAwMDAxCitkZWNkMTcyIGFwcGx5ICAgIzgwM2MwMDAwMDAwMDAwMDEgICAgICAgLT4gLTFFLTM4MworZGVjZDE3MyBhcHBseSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICM4NDAwMDAwMDAwMDAwMDAwCitkZWNkMTc0IGFwcGx5ICAgIzg0MDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2RlY2QxNzUgYXBwbHkgIC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAjODQwMDAwMDAwMDAwMDAwMQorZGVjZDE3NiBhcHBseSAgICM4NDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzCisKK2RlY2QxNzcgYXBwbHkgIC0wLjEwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAjODAwMDgwMDAwMDAwMDAwMCAgICAgICBTdWJub3JtYWwKK2RlY2QxNzggYXBwbHkgICAjODAwMDgwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMEUtMzg0ICBTdWJub3JtYWwKK2RlY2QxNzkgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAxMEUtMzgzICAtPiAjODAwMDAwMDAwMDAwMDAxMCAgICAgICBTdWJub3JtYWwKK2RlY2QxODAgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAxMCAgICAgICAtPiAtMS4wRS0zOTcgICAgICAgICAgICAgICBTdWJub3JtYWwKK2RlY2QxODEgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAxRS0zODMgICAtPiAjODAwNDAwMDAwMDAwMDAwMSAgICAgICBTdWJub3JtYWwKK2RlY2QxODIgYXBwbHkgICAjODAwNDAwMDAwMDAwMDAwMSAgICAgICAtPiAtMUUtMzk3ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKK2RlY2QxODMgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAjODAwMDAwMDAwMDAwMDAwMSAgICAgICBTdWJub3JtYWwKK2RlY2QxODQgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAtMUUtMzk4ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgc21hbGxlc3QgYWxsLW5pbmVzCitkZWNkMTg1IGFwcGx5ICAgLTk5OTk5OTk5OTk5OTk5OTlFLTM5OCAgIC0+ICNlNDAwZmYzZmNmZjNmY2ZmCitkZWNkMTg2IGFwcGx5ICAgI2U0MDBmZjNmY2ZmM2ZjZmYgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS0zODMKKy0tIGFuZCBhIHRyaWNreSBzdWJub3JtYWwKK2RlY2QxODcgYXBwbHkgICAxLjExMTExMTExMTExNTI0RS0zODQgICAgLT4gIzAwMDA5MTI0NDkxMjQ2YTQgICAgICBTdWJub3JtYWwKK2RlY2QxODggYXBwbHkgICAjMDAwMDkxMjQ0OTEyNDZhNCAgICAgICAgLT4gMS4xMTExMTExMTExMTUyNEUtMzg0ICBTdWJub3JtYWwKKworLS0gbmVhci11bmRlcmZsb3dzCitkZWNkMTg5IGFwcGx5ICAgLTFlLTM5OCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbAorZGVjZDE5MCBhcHBseSAgIC0xLjBlLTM5OCAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwgUm91bmRlZAorCistLSB6ZXJvcworZGVjZDQwMSBhcHBseSAgIDBFLTUwMCAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNkNDAyIGFwcGx5ICAgMEUtNDAwICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY2Q0MDMgYXBwbHkgICAwRS0zOTggICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMAorZGVjZDQwNCBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFLTM5OAorZGVjZDQwNSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICMwMDAwMDAwMDAwMDAwMDAwCitkZWNkNDA2IGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUtMzk4CitkZWNkNDA3IGFwcGx5ICAgMEUtMiAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMDAwMDAwMDAwMDAKK2RlY2Q0MDggYXBwbHkgICAjMjIzMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwLjAwCitkZWNkNDA5IGFwcGx5ICAgMCAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwMDAKK2RlY2Q0MTAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAwMCAgICAgICAtPiAwCitkZWNkNDExIGFwcGx5ICAgMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyNDQwMDAwMDAwMDAwMDAKK2RlY2Q0MTIgYXBwbHkgICAjMjI0NDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszCitkZWNkNDEzIGFwcGx5ICAgMEUrMzY5ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDAKK2RlY2Q0MTQgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszNjkKKy0tIGNsYW1wZWQgemVyb3MuLi4KK2RlY2Q0MTUgYXBwbHkgICAwRSszNzAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQxNiBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzM2OQorZGVjZDQxNyBhcHBseSAgIDBFKzM4NCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNkNDE4IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMzY5CitkZWNkNDE5IGFwcGx5ICAgMEUrNDAwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY2Q0MjAgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszNjkKK2RlY2Q0MjEgYXBwbHkgICAwRSs1MDAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQyMiBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzM2OQorCistLSBuZWdhdGl2ZSB6ZXJvcworZGVjZDQzMSBhcHBseSAgIC0wRS00MDAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNkNDMyIGFwcGx5ICAgLTBFLTQwMCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY2Q0MzMgYXBwbHkgICAtMEUtMzk4ICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMAorZGVjZDQzNCBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRS0zOTgKK2RlY2Q0MzUgYXBwbHkgICAtMC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAtPiAjODAwMDAwMDAwMDAwMDAwMAorZGVjZDQzNiBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRS0zOTgKK2RlY2Q0MzcgYXBwbHkgICAtMEUtMiAgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwMDAwMDAwMDAwMAorZGVjZDQzOCBhcHBseSAgICNhMjMwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wLjAwCitkZWNkNDM5IGFwcGx5ICAgLTAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMzgwMDAwMDAwMDAwMDAKK2RlY2Q0NDAgYXBwbHkgICAjYTIzODAwMDAwMDAwMDAwMCAgICAgICAtPiAtMAorZGVjZDQ0MSBhcHBseSAgIC0wRSszICAgICAgICAgICAgICAgICAgIC0+ICNhMjQ0MDAwMDAwMDAwMDAwCitkZWNkNDQyIGFwcGx5ICAgI2EyNDQwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzMKK2RlY2Q0NDMgYXBwbHkgICAtMEUrMzY5ICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMAorZGVjZDQ0NCBhcHBseSAgICNjM2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszNjkKKy0tIGNsYW1wZWQgemVyb3MuLi4KK2RlY2Q0NDUgYXBwbHkgICAtMEUrMzcwICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQ0NiBhcHBseSAgICNjM2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszNjkKK2RlY2Q0NDcgYXBwbHkgICAtMEUrMzg0ICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQ0OCBhcHBseSAgICNjM2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszNjkKK2RlY2Q0NDkgYXBwbHkgICAtMEUrNDAwICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQ1MCBhcHBseSAgICNjM2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszNjkKK2RlY2Q0NTEgYXBwbHkgICAtMEUrNTAwICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjZDQ1MiBhcHBseSAgICNjM2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszNjkKKworLS0gZXhwb25lbnRzCitkZWNkNDYwIGFwcGx5ICAgIzIyNWMwMDAwMDAwMDAwMDcgLT4gN0UrOQorZGVjZDQ2MSBhcHBseSAgIDdFKzkgIC0+ICMyMjVjMDAwMDAwMDAwMDA3CitkZWNkNDYyIGFwcGx5ICAgIzIzYzQwMDAwMDAwMDAwMDcgLT4gN0UrOTkKK2RlY2Q0NjMgYXBwbHkgICA3RSs5OSAtPiAjMjNjNDAwMDAwMDAwMDAwNworCistLSBTcGVjaWFscworZGVjZDUwMCBhcHBseSAgIEluZmluaXR5ICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZWNkNTAxIGFwcGx5ICAgIzc4Nzg3ODc4Nzg3ODc4NzggLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RlY2Q1MDIgYXBwbHkgICAjNzgwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQorZGVjZDUwMyBhcHBseSAgICM3OTc5Nzk3OTc5Nzk3OTc5IC0+ICM3ODAwMDAwMDAwMDAwMDAwCitkZWNkNTA0IGFwcGx5ICAgIzc5MDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkKK2RlY2Q1MDUgYXBwbHkgICAjN2E3YTdhN2E3YTdhN2E3YSAtPiAjNzgwMDAwMDAwMDAwMDAwMAorZGVjZDUwNiBhcHBseSAgICM3YTAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5CitkZWNkNTA3IGFwcGx5ICAgIzdiN2I3YjdiN2I3YjdiN2IgLT4gIzc4MDAwMDAwMDAwMDAwMDAKK2RlY2Q1MDggYXBwbHkgICAjN2IwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQorCitkZWNkNTA5IGFwcGx5ICAgTmFOICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAKK2RlY2Q1MTAgYXBwbHkgICAjN2M3YzdjN2M3YzdjN2M3YyAtPiAjN2MwMDdjN2M3YzdjN2M3YworZGVjZDUxMSBhcHBseSAgICM3YzAwMDAwMDAwMDAwMDAwIC0+IE5hTgorZGVjZDUxMiBhcHBseSAgICM3ZDdkN2Q3ZDdkN2Q3ZDdkIC0+ICM3YzAxN2Q3ZDdkN2Q3ZDdkCitkZWNkNTEzIGFwcGx5ICAgIzdkMDAwMDAwMDAwMDAwMDAgLT4gTmFOCitkZWNkNTE0IGFwcGx5ICAgIzdlN2U3ZTdlN2U3ZTdlN2UgLT4gIzdlMDA3ZTdlN2U3ZTdjN2UKK2RlY2Q1MTUgYXBwbHkgICAjN2UwMDAwMDAwMDAwMDAwMCAtPiBzTmFOCitkZWNkNTE2IGFwcGx5ICAgIzdmN2Y3ZjdmN2Y3ZjdmN2YgLT4gIzdlMDA3ZjdmN2Y3ZjdjN2YKK2RlY2Q1MTcgYXBwbHkgICAjN2YwMDAwMDAwMDAwMDAwMCAtPiBzTmFOCitkZWNkNTE4IGFwcGx5ICAgIzdmZmZmZmZmZmZmZmZmZmYgLT4gc05hTjk5OTk5OTk5OTk5OTk5OQorZGVjZDUxOSBhcHBseSAgICM3ZmZmZmZmZmZmZmZmZmZmIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCisKK2RlY2Q1MjAgYXBwbHkgICAtSW5maW5pdHkgICAgICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGVjZDUyMSBhcHBseSAgICNmODc4Nzg3ODc4Nzg3ODc4IC0+ICNmODAwMDAwMDAwMDAwMDAwCitkZWNkNTIyIGFwcGx5ICAgI2Y4MDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5CitkZWNkNTIzIGFwcGx5ICAgI2Y5Nzk3OTc5Nzk3OTc5NzkgLT4gI2Y4MDAwMDAwMDAwMDAwMDAKK2RlY2Q1MjQgYXBwbHkgICAjZjkwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkKK2RlY2Q1MjUgYXBwbHkgICAjZmE3YTdhN2E3YTdhN2E3YSAtPiAjZjgwMDAwMDAwMDAwMDAwMAorZGVjZDUyNiBhcHBseSAgICNmYTAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQorZGVjZDUyNyBhcHBseSAgICNmYjdiN2I3YjdiN2I3YjdiIC0+ICNmODAwMDAwMDAwMDAwMDAwCitkZWNkNTI4IGFwcGx5ICAgI2ZiMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5CisKK2RlY2Q1MjkgYXBwbHkgICAtTmFOICAgICAgICAgICAgICAtPiAjZmMwMDAwMDAwMDAwMDAwMAorZGVjZDUzMCBhcHBseSAgICNmYzdjN2M3YzdjN2M3YzdjIC0+ICNmYzAwN2M3YzdjN2M3YzdjCitkZWNkNTMxIGFwcGx5ICAgI2ZjMDAwMDAwMDAwMDAwMDAgLT4gLU5hTgorZGVjZDUzMiBhcHBseSAgICNmZDdkN2Q3ZDdkN2Q3ZDdkIC0+ICNmYzAxN2Q3ZDdkN2Q3ZDdkCitkZWNkNTMzIGFwcGx5ICAgI2ZkMDAwMDAwMDAwMDAwMDAgLT4gLU5hTgorZGVjZDUzNCBhcHBseSAgICNmZTdlN2U3ZTdlN2U3ZTdlIC0+ICNmZTAwN2U3ZTdlN2U3YzdlCitkZWNkNTM1IGFwcGx5ICAgI2ZlMDAwMDAwMDAwMDAwMDAgLT4gLXNOYU4KK2RlY2Q1MzYgYXBwbHkgICAjZmY3ZjdmN2Y3ZjdmN2Y3ZiAtPiAjZmUwMDdmN2Y3ZjdmN2M3ZgorZGVjZDUzNyBhcHBseSAgICNmZjAwMDAwMDAwMDAwMDAwIC0+IC1zTmFOCitkZWNkNTM4IGFwcGx5ICAgI2ZmZmZmZmZmZmZmZmZmZmYgLT4gLXNOYU45OTk5OTk5OTk5OTk5OTkKK2RlY2Q1MzkgYXBwbHkgICAjZmZmZmZmZmZmZmZmZmZmZiAtPiAjZmUwMGZmM2ZjZmYzZmNmZgorCistLSBkaWFnbm9zdGljIE5hTnMKK2RlY2Q1NDAgYXBwbHkgICBOYU4gICAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwCitkZWNkNTQxIGFwcGx5ICAgTmFOMCAgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMAorZGVjZDU0MiBhcHBseSAgIE5hTjEgICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDEKK2RlY2Q1NDMgYXBwbHkgICBOYU4xMiAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDEyCitkZWNkNTQ0IGFwcGx5ICAgTmFONzkgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDA3OQorZGVjZDU0NSBhcHBseSAgIE5hTjEyMzQ1ICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDQ5YzUKK2RlY2Q1NDYgYXBwbHkgICBOYU4xMjM0NTYgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDI4ZTU2CitkZWNkNTQ3IGFwcGx5ICAgTmFONzk5Nzk5ICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDBmN2ZkZgorZGVjZDU0OCBhcHBseSAgIE5hTjc5OTc5OTc5OTc5OTc5OSAgLT4gIzdjMDNkZmY3ZmRmZjdmZGYKK2RlY2Q1NDkgYXBwbHkgICBOYU45OTk5OTk5OTk5OTk5OTkgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCistLSB0b28gbWFueSBkaWdpdHMKKworLS0gZm9sZC1kb3duIGZ1bGwgc2VxdWVuY2UKK2RlY2Q2MDEgYXBwbHkgICAxRSszODQgICAgICAgICAgICAgICAgICAtPiAjNDdmYzAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjAyIGFwcGx5ICAgIzQ3ZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NAorZGVjZDYwMyBhcHBseSAgIDFFKzM4MyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjODAwMDAwMDAwMDAwIENsYW1wZWQKK2RlY2Q2MDQgYXBwbHkgICAjNDNmYzgwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwRSszODMKK2RlY2Q2MDUgYXBwbHkgICAxRSszODIgICAgICAgICAgICAgICAgICAtPiAjNDNmYzEwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjA2IGFwcGx5ICAgIzQzZmMxMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwRSszODIKK2RlY2Q2MDcgYXBwbHkgICAxRSszODEgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAxMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjA4IGFwcGx5ICAgIzQzZmMwMTAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDBFKzM4MQorZGVjZDYwOSBhcHBseSAgIDFFKzM4MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAyMDAwMDAwMDAwIENsYW1wZWQKK2RlY2Q2MTAgYXBwbHkgICAjNDNmYzAwMjAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwRSszODAKK2RlY2Q2MTEgYXBwbHkgICAxRSszNzkgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDQwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjEyIGFwcGx5ICAgIzQzZmMwMDA0MDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwRSszNzkKK2RlY2Q2MTMgYXBwbHkgICAxRSszNzggICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDA0MDAwMDAwMCBDbGFtcGVkCitkZWNkNjE0IGFwcGx5ICAgIzQzZmMwMDAwNDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDBFKzM3OAorZGVjZDYxNSBhcHBseSAgIDFFKzM3NyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDA4MDAwMDAwIENsYW1wZWQKK2RlY2Q2MTYgYXBwbHkgICAjNDNmYzAwMDAwODAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwRSszNzcKK2RlY2Q2MTcgYXBwbHkgICAxRSszNzYgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMTAwMDAwMCBDbGFtcGVkCitkZWNkNjE4IGFwcGx5ICAgIzQzZmMwMDAwMDEwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwRSszNzYKK2RlY2Q2MTkgYXBwbHkgICAxRSszNzUgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDEwMDAwMCBDbGFtcGVkCitkZWNkNjIwIGFwcGx5ICAgIzQzZmMwMDAwMDAxMDAwMDAgICAgICAgLT4gMS4wMDAwMDBFKzM3NQorZGVjZDYyMSBhcHBseSAgIDFFKzM3NCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDIwMDAwIENsYW1wZWQKK2RlY2Q2MjIgYXBwbHkgICAjNDNmYzAwMDAwMDAyMDAwMCAgICAgICAtPiAxLjAwMDAwRSszNzQKK2RlY2Q2MjMgYXBwbHkgICAxRSszNzMgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwNDAwMCBDbGFtcGVkCitkZWNkNjI0IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDQwMDAgICAgICAgLT4gMS4wMDAwRSszNzMKK2RlY2Q2MjUgYXBwbHkgICAxRSszNzIgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDQwMCBDbGFtcGVkCitkZWNkNjI2IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDA0MDAgICAgICAgLT4gMS4wMDBFKzM3MgorZGVjZDYyNyBhcHBseSAgIDFFKzM3MSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDgwIENsYW1wZWQKK2RlY2Q2MjggYXBwbHkgICAjNDNmYzAwMDAwMDAwMDA4MCAgICAgICAtPiAxLjAwRSszNzEKK2RlY2Q2MjkgYXBwbHkgICAxRSszNzAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAxMCBDbGFtcGVkCitkZWNkNjMwIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMTAgICAgICAgLT4gMS4wRSszNzAKK2RlY2Q2MzEgYXBwbHkgICAxRSszNjkgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMQorZGVjZDYzMiBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAxICAgICAgIC0+IDFFKzM2OQorZGVjZDYzMyBhcHBseSAgIDFFKzM2OCAgICAgICAgICAgICAgICAgIC0+ICM0M2Y4MDAwMDAwMDAwMDAxCitkZWNkNjM0IGFwcGx5ICAgIzQzZjgwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUrMzY4CistLSBzYW1lIHdpdGggOXMKK2RlY2Q2NDEgYXBwbHkgICA5RSszODQgICAgICAgICAgICAgICAgICAtPiAjNzdmYzAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjQyIGFwcGx5ICAgIzc3ZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NAorZGVjZDY0MyBhcHBseSAgIDlFKzM4MyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjOGMwMDAwMDAwMDAwIENsYW1wZWQKK2RlY2Q2NDQgYXBwbHkgICAjNDNmYzhjMDAwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwRSszODMKK2RlY2Q2NDUgYXBwbHkgICA5RSszODIgICAgICAgICAgICAgICAgICAtPiAjNDNmYzFhMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjQ2IGFwcGx5ICAgIzQzZmMxYTAwMDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwRSszODIKK2RlY2Q2NDcgYXBwbHkgICA5RSszODEgICAgICAgICAgICAgICAgICAtPiAjNDNmYzA5MDAwMDAwMDAwMCBDbGFtcGVkCitkZWNkNjQ4IGFwcGx5ICAgIzQzZmMwOTAwMDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDBFKzM4MQorZGVjZDY0OSBhcHBseSAgIDlFKzM4MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAyMzAwMDAwMDAwIENsYW1wZWQKK2RlY2Q2NTAgYXBwbHkgICAjNDNmYzAwMjMwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwRSszODAKK2RlY2Q2NTEgYXBwbHkgICA5RSszNzkgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDY4MDAwMDAwMCBDbGFtcGVkCitkZWNkNjUyIGFwcGx5ICAgIzQzZmMwMDA2ODAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwRSszNzkKK2RlY2Q2NTMgYXBwbHkgICA5RSszNzggICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDI0MDAwMDAwMCBDbGFtcGVkCitkZWNkNjU0IGFwcGx5ICAgIzQzZmMwMDAyNDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDBFKzM3OAorZGVjZDY1NSBhcHBseSAgIDlFKzM3NyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDA4YzAwMDAwIENsYW1wZWQKK2RlY2Q2NTYgYXBwbHkgICAjNDNmYzAwMDAwOGMwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwRSszNzcKK2RlY2Q2NTcgYXBwbHkgICA5RSszNzYgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMWEwMDAwMCBDbGFtcGVkCitkZWNkNjU4IGFwcGx5ICAgIzQzZmMwMDAwMDFhMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwRSszNzYKK2RlY2Q2NTkgYXBwbHkgICA5RSszNzUgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDkwMDAwMCBDbGFtcGVkCitkZWNkNjYwIGFwcGx5ICAgIzQzZmMwMDAwMDA5MDAwMDAgICAgICAgLT4gOS4wMDAwMDBFKzM3NQorZGVjZDY2MSBhcHBseSAgIDlFKzM3NCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDIzMDAwIENsYW1wZWQKK2RlY2Q2NjIgYXBwbHkgICAjNDNmYzAwMDAwMDAyMzAwMCAgICAgICAtPiA5LjAwMDAwRSszNzQKK2RlY2Q2NjMgYXBwbHkgICA5RSszNzMgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwNjgwMCBDbGFtcGVkCitkZWNkNjY0IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDY4MDAgICAgICAgLT4gOS4wMDAwRSszNzMKK2RlY2Q2NjUgYXBwbHkgICA5RSszNzIgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMjQwMCBDbGFtcGVkCitkZWNkNjY2IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDI0MDAgICAgICAgLT4gOS4wMDBFKzM3MgorZGVjZDY2NyBhcHBseSAgIDlFKzM3MSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDhjIENsYW1wZWQKK2RlY2Q2NjggYXBwbHkgICAjNDNmYzAwMDAwMDAwMDA4YyAgICAgICAtPiA5LjAwRSszNzEKK2RlY2Q2NjkgYXBwbHkgICA5RSszNzAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAxYSBDbGFtcGVkCitkZWNkNjcwIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMWEgICAgICAgLT4gOS4wRSszNzAKK2RlY2Q2NzEgYXBwbHkgICA5RSszNjkgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwOQorZGVjZDY3MiBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDA5ICAgICAgIC0+IDlFKzM2OQorZGVjZDY3MyBhcHBseSAgIDlFKzM2OCAgICAgICAgICAgICAgICAgIC0+ICM0M2Y4MDAwMDAwMDAwMDA5CitkZWNkNjc0IGFwcGx5ICAgIzQzZjgwMDAwMDAwMDAwMDkgICAgICAgLT4gOUUrMzY4CisKKworLS0gU2VsZWN0ZWQgRFBEIGNvZGVzCitkZWNkNzAwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMDAgICAgICAgLT4gMAorZGVjZDcwMSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDA5ICAgICAgIC0+IDkKK2RlY2Q3MDIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAxMCAgICAgICAtPiAxMAorZGVjZDcwMyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDE5ICAgICAgIC0+IDE5CitkZWNkNzA0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMjAgICAgICAgLT4gMjAKK2RlY2Q3MDUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAyOSAgICAgICAtPiAyOQorZGVjZDcwNiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDMwICAgICAgIC0+IDMwCitkZWNkNzA3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMzkgICAgICAgLT4gMzkKK2RlY2Q3MDggYXBwbHkgICAjMjIzODAwMDAwMDAwMDA0MCAgICAgICAtPiA0MAorZGVjZDcwOSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDQ5ICAgICAgIC0+IDQ5CitkZWNkNzEwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNTAgICAgICAgLT4gNTAKK2RlY2Q3MTEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA1OSAgICAgICAtPiA1OQorZGVjZDcxMiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDYwICAgICAgIC0+IDYwCitkZWNkNzEzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNjkgICAgICAgLT4gNjkKK2RlY2Q3MTQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3MCAgICAgICAtPiA3MAorZGVjZDcxNSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDcxICAgICAgIC0+IDcxCitkZWNkNzE2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzIgICAgICAgLT4gNzIKK2RlY2Q3MTcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3MyAgICAgICAtPiA3MworZGVjZDcxOCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDc0ICAgICAgIC0+IDc0CitkZWNkNzE5IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzUgICAgICAgLT4gNzUKK2RlY2Q3MjAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3NiAgICAgICAtPiA3NgorZGVjZDcyMSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDc3ICAgICAgIC0+IDc3CitkZWNkNzIyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzggICAgICAgLT4gNzgKK2RlY2Q3MjMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3OSAgICAgICAtPiA3OQorCitkZWNkNzI1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyOWUgICAgICAgLT4gOTk0CitkZWNkNzI2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyOWYgICAgICAgLT4gOTk1CitkZWNkNzI3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyYTAgICAgICAgLT4gNTIwCitkZWNkNzI4IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyYTEgICAgICAgLT4gNTIxCistLSBmcm9tIHRlbGNvIHRlc3QgZGF0YQorZGVjZDczMCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMTg4ICAgICAgIC0+IDMwOAorZGVjZDczMSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWEzICAgICAgIC0+IDMyMworZGVjZDczMiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDJhICAgICAgIC0+ICA4MgorZGVjZDczMyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWE5ICAgICAgIC0+IDMyOQorZGVjZDczNCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDgxICAgICAgIC0+IDEwMQorZGVjZDczNSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmEyICAgICAgIC0+IDUyMgorCistLSBEUEQ6IG9uZSBvZiBlYWNoIG9mIHRoZSBodWZmbWFuIGdyb3VwcworZGVjZDc0MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2Y3ICAgICAgIC0+IDc3NworZGVjZDc0MSBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2Y4ICAgICAgIC0+IDc3OAorZGVjZDc0MiBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2ViICAgICAgIC0+IDc4NworZGVjZDc0MyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMzdkICAgICAgIC0+IDg3NworZGVjZDc0NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMzlmICAgICAgIC0+IDk5NworZGVjZDc0NSBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2JmICAgICAgIC0+IDk3OQorZGVjZDc0NiBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2RmICAgICAgIC0+IDc5OQorZGVjZDc0NyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDZlICAgICAgIC0+IDg4OAorCistLSBEUEQgYWxsLWhpZ2hzIGNhc2VzIChpbmNsdWRlcyB0aGUgMjQgcmVkdW5kYW50IGNvZGVzKQorZGVjZDc1MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDZlICAgICAgIC0+IDg4OAorZGVjZDc1MSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMTZlICAgICAgIC0+IDg4OAorZGVjZDc1MiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMjZlICAgICAgIC0+IDg4OAorZGVjZDc1MyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMzZlICAgICAgIC0+IDg4OAorZGVjZDc1NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDZmICAgICAgIC0+IDg4OQorZGVjZDc1NSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMTZmICAgICAgIC0+IDg4OQorZGVjZDc1NiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMjZmICAgICAgIC0+IDg4OQorZGVjZDc1NyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMzZmICAgICAgIC0+IDg4OQorCitkZWNkNzYwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwN2UgICAgICAgLT4gODk4CitkZWNkNzYxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxN2UgICAgICAgLT4gODk4CitkZWNkNzYyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyN2UgICAgICAgLT4gODk4CitkZWNkNzYzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzN2UgICAgICAgLT4gODk4CitkZWNkNzY0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwN2YgICAgICAgLT4gODk5CitkZWNkNzY1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxN2YgICAgICAgLT4gODk5CitkZWNkNzY2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyN2YgICAgICAgLT4gODk5CitkZWNkNzY3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzN2YgICAgICAgLT4gODk5CisKK2RlY2Q3NzAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDBlZSAgICAgICAtPiA5ODgKK2RlY2Q3NzEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDFlZSAgICAgICAtPiA5ODgKK2RlY2Q3NzIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJlZSAgICAgICAtPiA5ODgKK2RlY2Q3NzMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNlZSAgICAgICAtPiA5ODgKK2RlY2Q3NzQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDBlZiAgICAgICAtPiA5ODkKK2RlY2Q3NzUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDFlZiAgICAgICAtPiA5ODkKK2RlY2Q3NzYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJlZiAgICAgICAtPiA5ODkKK2RlY2Q3NzcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNlZiAgICAgICAtPiA5ODkKKworZGVjZDc4MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMGZlICAgICAgIC0+IDk5OAorZGVjZDc4MSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWZlICAgICAgIC0+IDk5OAorZGVjZDc4MiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmZlICAgICAgIC0+IDk5OAorZGVjZDc4MyBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2ZlICAgICAgIC0+IDk5OAorZGVjZDc4NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMGZmICAgICAgIC0+IDk5OQorZGVjZDc4NSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWZmICAgICAgIC0+IDk5OQorZGVjZDc4NiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmZmICAgICAgIC0+IDk5OQorZGVjZDc4NyBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2ZmICAgICAgIC0+IDk5OQorCistLSB2YWx1ZXMgYXJvdW5kIFt1XWludDMyIGVkZ2VzICh6ZXJvcyBkb25lIGVhcmxpZXIpCitkZWNkODAwIGFwcGx5IC0yMTQ3NDgzNjQ2ICAtPiAjYTIzODAwMDA4Yzc4YWY0NgorZGVjZDgwMSBhcHBseSAtMjE0NzQ4MzY0NyAgLT4gI2EyMzgwMDAwOGM3OGFmNDcKK2RlY2Q4MDIgYXBwbHkgLTIxNDc0ODM2NDggIC0+ICNhMjM4MDAwMDhjNzhhZjQ4CitkZWNkODAzIGFwcGx5IC0yMTQ3NDgzNjQ5ICAtPiAjYTIzODAwMDA4Yzc4YWY0OQorZGVjZDgwNCBhcHBseSAgMjE0NzQ4MzY0NiAgLT4gIzIyMzgwMDAwOGM3OGFmNDYKK2RlY2Q4MDUgYXBwbHkgIDIxNDc0ODM2NDcgIC0+ICMyMjM4MDAwMDhjNzhhZjQ3CitkZWNkODA2IGFwcGx5ICAyMTQ3NDgzNjQ4ICAtPiAjMjIzODAwMDA4Yzc4YWY0OAorZGVjZDgwNyBhcHBseSAgMjE0NzQ4MzY0OSAgLT4gIzIyMzgwMDAwOGM3OGFmNDkKK2RlY2Q4MDggYXBwbHkgIDQyOTQ5NjcyOTQgIC0+ICMyMjM4MDAwMTE1YWZiNTVhCitkZWNkODA5IGFwcGx5ICA0Mjk0OTY3Mjk1ICAtPiAjMjIzODAwMDExNWFmYjU1YgorZGVjZDgxMCBhcHBseSAgNDI5NDk2NzI5NiAgLT4gIzIyMzgwMDAxMTVhZmI1N2EKK2RlY2Q4MTEgYXBwbHkgIDQyOTQ5NjcyOTcgIC0+ICMyMjM4MDAwMTE1YWZiNTdiCisKK2RlY2Q4MjAgYXBwbHkgICNhMjM4MDAwMDhjNzhhZjQ2IC0+IC0yMTQ3NDgzNjQ2CitkZWNkODIxIGFwcGx5ICAjYTIzODAwMDA4Yzc4YWY0NyAtPiAtMjE0NzQ4MzY0NworZGVjZDgyMiBhcHBseSAgI2EyMzgwMDAwOGM3OGFmNDggLT4gLTIxNDc0ODM2NDgKK2RlY2Q4MjMgYXBwbHkgICNhMjM4MDAwMDhjNzhhZjQ5IC0+IC0yMTQ3NDgzNjQ5CitkZWNkODI0IGFwcGx5ICAjMjIzODAwMDA4Yzc4YWY0NiAtPiAgMjE0NzQ4MzY0NgorZGVjZDgyNSBhcHBseSAgIzIyMzgwMDAwOGM3OGFmNDcgLT4gIDIxNDc0ODM2NDcKK2RlY2Q4MjYgYXBwbHkgICMyMjM4MDAwMDhjNzhhZjQ4IC0+ICAyMTQ3NDgzNjQ4CitkZWNkODI3IGFwcGx5ICAjMjIzODAwMDA4Yzc4YWY0OSAtPiAgMjE0NzQ4MzY0OQorZGVjZDgyOCBhcHBseSAgIzIyMzgwMDAxMTVhZmI1NWEgLT4gIDQyOTQ5NjcyOTQKK2RlY2Q4MjkgYXBwbHkgICMyMjM4MDAwMTE1YWZiNTViIC0+ICA0Mjk0OTY3Mjk1CitkZWNkODMwIGFwcGx5ICAjMjIzODAwMDExNWFmYjU3YSAtPiAgNDI5NDk2NzI5NgorZGVjZDgzMSBhcHBseSAgIzIyMzgwMDAxMTVhZmI1N2IgLT4gIDQyOTQ5NjcyOTcKKworLS0gZm9yIG5hcnJvd2luZworZGVjZDg0MCBhcHBseSAgIzI4NzAwMDAwMDAwMDAwMDAgLT4gIDIuMDAwMDAwMDAwMDAwMDAwRS05OQorCistLSBzb21lIG1pc2NlbGxhbmVvdXMKK2RlY2Q4NTAgYXBwbHkgICMwMDA0MDcwMDAwMDAwMDAwIC0+IDcuMDAwMDAwMDAwMDAwRS0zODUgIFN1Ym5vcm1hbAorZGVjZDg1MSBhcHBseSAgIzAwMDgwMDAwMDAwMjAwMDAgLT4gMS4wMDAwMEUtMzkxICAgICAgICAgU3Vibm9ybWFsCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRGTUEuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRGTUEuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWU5MmE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEZNQS5kZWNUZXN0CkBAIC0wLDAgKzEsMTY5OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZEZNQS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBGdXNlZCBNdWx0aXBseSBBZGQgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBUaGVzZSB0ZXN0cyBjb21wcmVzZSB0aHJlZSBwYXJ0czoKKy0tICAgMS4gU2FuaXR5IGNoZWNrcyBhbmQgb3RoZXIgdGhyZWUtb3BlcmFuZCB0ZXN0cyAoZXNwZWNpYWxseSB0aG9zZQorLS0gICAgICB3aGVyZSB0aGUgZnVzZWQgb3BlcmF0aW9uIG1ha2VzIGEgZGlmZmVyZW5jZSkKKy0tICAgMi4gTXVsdGlwbHkgdGVzdHMgKHRoaXJkIG9wZXJhbmQgaXMgbmV1dHJhbCB6ZXJvIFswRStlbWF4XSkKKy0tICAgMy4gQWRkaXRpb24gdGVzdHMgKGZpcnN0IG9wZXJhbmQgaXMgMSkKKy0tIFRoZSBtdWx0aXBseSBhbmQgYWRkaXRpb24gdGVzdHMgYXJlIGV4dGVuc2l2ZSBiZWNhdXNlIEZNQSBtYXkgaGF2ZQorLS0gaXRzIG93biBkZWRpY2F0ZWQgbXVsdGlwbGljYXRpb24gb3IgYWRkaXRpb24gcm91dGluZShzKSwgYW5kIHRoZXkKKy0tIGFsc28gaW5oZXJlbnRseSBjaGVjayB0aGUgbGVmdC10by1yaWdodCBwcm9wZXJ0aWVzLgorCistLSBTYW5pdHkgY2hlY2tzCitkZGZtYTAwMDEgZm1hICAxICAgMSAgIDEgLT4gICAyCitkZGZtYTAwMDIgZm1hICAxICAgMSAgIDIgLT4gICAzCitkZGZtYTAwMDMgZm1hICAyICAgMiAgIDMgLT4gICA3CitkZGZtYTAwMDQgZm1hICA5ICAgOSAgIDkgLT4gIDkwCitkZGZtYTAwMDUgZm1hIC0xICAgMSAgIDEgLT4gICAwCitkZGZtYTAwMDYgZm1hIC0xICAgMSAgIDIgLT4gICAxCitkZGZtYTAwMDcgZm1hIC0yICAgMiAgIDMgLT4gIC0xCitkZGZtYTAwMDggZm1hIC05ICAgOSAgIDkgLT4gLTcyCitkZGZtYTAwMTEgZm1hICAxICAtMSAgIDEgLT4gICAwCitkZGZtYTAwMTIgZm1hICAxICAtMSAgIDIgLT4gICAxCitkZGZtYTAwMTMgZm1hICAyICAtMiAgIDMgLT4gIC0xCitkZGZtYTAwMTQgZm1hICA5ICAtOSAgIDkgLT4gLTcyCitkZGZtYTAwMTUgZm1hICAxICAgMSAgLTEgLT4gICAwCitkZGZtYTAwMTYgZm1hICAxICAgMSAgLTIgLT4gIC0xCitkZGZtYTAwMTcgZm1hICAyICAgMiAgLTMgLT4gICAxCitkZGZtYTAwMTggZm1hICA5ICAgOSAgLTkgLT4gIDcyCisKKy0tIG5vbi1pbnRlZ2VyIGV4YWN0cworZGRmbWEwMTAwICBmbWEgICAgMjUuMiAgIDYzLjYgICAtNDM4ICAtPiAgMTE2NC43MgorZGRmbWEwMTAxICBmbWEgICAwLjMwMSAgMC4zODAgICAgMzM0ICAtPiAgMzM0LjExNDM4MAorZGRmbWEwMTAyICBmbWEgICAgNDkuMiAgIC00LjggICAyMy4zICAtPiAgLTIxMi44NgorZGRmbWEwMTAzICBmbWEgICAgNC4yMiAgMC4wNzkgIC05NC42ICAtPiAgLTk0LjI2NjYyCitkZGZtYTAxMDQgIGZtYSAgICAgOTAzICAwLjc5NyAgMC44ODcgIC0+ICA3MjAuNTc4CitkZGZtYTAxMDUgIGZtYSAgICA2LjEzICAgLTE2MSAgIDY1LjkgIC0+ICAtOTIxLjAzCitkZGZtYTAxMDYgIGZtYSAgICAyOC4yICAgIDcyNyAgIDUuNDUgIC0+ICAyMDUwNi44NQorZGRmbWEwMTA3ICBmbWEgICAgICAgNCAgICA2MDUgICAgNjg4ICAtPiAgMzEwOAorZGRmbWEwMTA4ICBmbWEgICAgOTMuMyAgIDAuMTkgIDAuMjI2ICAtPiAgMTcuOTUzCitkZGZtYTAxMDkgIGZtYSAgIDAuMTY5ICAgLTM0MSAgIDUuNjEgIC0+ICAtNTIuMDE5CitkZGZtYTAxMTAgIGZtYSAgIC03Mi4yICAgICAzMCAgLTUxLjIgIC0+ICAtMjIxNy4yCitkZGZtYTAxMTEgIGZtYSAgLTAuNDA5ICAgICAxMyAgIDIwLjQgIC0+ICAxNS4wODMKK2RkZm1hMDExMiAgZm1hICAgICAzMTcgICA3Ny4wICAgMTkuMCAgLT4gIDI0NDI4LjAKK2RkZm1hMDExMyAgZm1hICAgICAgNDcgICA2LjU4ICAgMS42MiAgLT4gIDMxMC44OAorZGRmbWEwMTE0ICBmbWEgICAgMS4zNiAgMC45ODQgIDAuNDkzICAtPiAgMS44MzEyNAorZGRmbWEwMTE1ICBmbWEgICAgNzIuNyAgICAyNzQgICAxLjU2ICAtPiAgMTk5MjEuMzYKK2RkZm1hMDExNiAgZm1hICAgICAzMzUgICAgODQ3ICAgICA4MyAgLT4gIDI4MzgyOAorZGRmbWEwMTE3ICBmbWEgICAgIDY2NiAgMC4yNDcgICAyNS40ICAtPiAgMTg5LjkwMgorZGRmbWEwMTE4ICBmbWEgICAtMy44NyAgIDMuMDYgICA3OC4wICAtPiAgNjYuMTU3OAorZGRmbWEwMTE5ICBmbWEgICAwLjc0MiAgICAxOTIgICAzNS42ICAtPiAgMTc4LjA2NAorZGRmbWEwMTIwICBmbWEgICAtOTEuNiAgIDUuMjkgIDAuMTUzICAtPiAgLTQ4NC40MTEKKworLS0gY2FzZXMgd2hlcmUgcmVzdWx0IGlzIGRpZmZlcmVudCBmcm9tIHNlcGFyYXRlIG11bHRpcGx5ICsgYWRkOyBlYWNoCistLSBpcyBwcmVjZWRlZCBieSB0aGUgcmVzdWx0IG9mIHVuZnVzZWQgbXVsdGlwbHkgYW5kIGFkZAorLS0gW3RoaXMgaXMgYWJvdXQgMjAlIG9mIGFsbCBzaW1pbGFyICBjYXNlcyBpbiBnZW5lcmFsXQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDcuMTIzMzU2NDI5MjU3OTY5RSsxNgorZGRmbWEwMjAxICBmbWEgICAgICAgMjc1ODM0ODkuNjY0NSAgICAgIDI1ODI0NzEwNzguMDQgICAgICAyNTkzMTgzLjQyMzcxICAtPiAgNy4xMjMzNTY0MjkyNTc5NzBFKzE2ICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAyMjgxMzI3NTMyOC44MDUwNgorZGRmbWEwMjA4ICBmbWEgICAgICAgIDI0MjgwLjM1NTU2NiAgICAgIDkzOTU3Ny4zOTc2NTMgICAgICAgIDIwMzIuMDEzMjUyICAtPiAgMjI4MTMyNzUzMjguODA1MDcgICAgICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMi4wMzAzOTc3MzQyNzgwNjJFKzE2CitkZGZtYTAyMDkgIGZtYSAgICAgICAgICA3ODQ4OTc2NDMyICAgICAgLTI1ODY4MzEuMjI4MSAgICAgIDEzNzkwMy41MTc5MDkgIC0+ICAtMi4wMzAzOTc3MzQyNzgwNjFFKzE2IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIwNDA3NzQwOTQ4MTQuMDc3CitkZGZtYTAyMTcgIGZtYSAgICAgICAgNTY4OTAuMzg4NzMxICAgICAgMzU4NzIwMzAuNDI1NSAgICAgIDMzOTMzNy4xMjM0MTAgIC0+ICAyMDQwNzc0MDk0ODE0LjA3OCAgICAgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIuNzE0NDY5NTc1MjA1MDQ5RSsxOAorZGRmbWEwMjIwICBmbWEgICAgICAgNzUzMzU0My41NzQ0NSAgICAgICAzNjAzMTc3NjM5MjggICAgICA1MDczMzkyLjMxNjM4ICAtPiAgMi43MTQ0Njk1NzUyMDUwNTBFKzE4ICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjAxMTY3NjI5NzcxNjcxNkUrMTkKK2RkZm1hMDIyMyAgZm1hICAgICAgIDczOTk0NTI1NS41NjMgICAgICAxMzY3MjMxMjc4NC4xICAgICAgLTk5NDM4MS41MzU3MiAgLT4gIDEuMDExNjc2Mjk3NzE2NzE1RSsxOSAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTIuOTE0MTM1NzIxNDU1MzE1RSsyMworZGRmbWEwMjI0ICBmbWEgICAgICAgLTQxMzUxMDk1NzIxOCAgICAgICA3MDQ3Mjk5ODg1NTAgICAgICAgOTIzNDE2MjYxNC4wICAtPiAgLTIuOTE0MTM1NzIxNDU1MzE0RSsyMyBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAyLjYyMDExOTg2MzM2NTc4NkUrMTcKK2RkZm1hMDIyNiAgZm1hICAgICAgICA0Mzc0ODQuMDA2MDEgICAgICAgNTk4OTA2NDMyNzkwICAgICAgODk0NDUwNjM4LjQ0MiAgLT4gIDIuNjIwMTE5ODYzMzY1Nzg3RSsxNyAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMS4yNzI2NDc5OTU4MDgxNzhFKzE5CitkZGZtYTAyNTMgIGZtYSAgICAgICAgIDczMjg3NTU2OTI5ICAgICAgMTczNjUxMzA1Ljc4NCAgICAgLTM1ODMxMjU2OC4zODkgIC0+ICAxLjI3MjY0Nzk5NTgwODE3N0UrMTkgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC0xLjc1Mzc2OTMyMDg2MTg1MUUrMTgKK2RkZm1hMDI1NyAgZm1hICAgICAgICAyMDMyNTgzMDQ0ODYgICAgICAtODYyODI3OC44MDY2ICAgICAgMTUzMTI3LjQ0NjcyNyAgLT4gIC0xLjc1Mzc2OTMyMDg2MTg1MEUrMTggSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTEuNTUwNzM3ODM1MjYzMzQ2RSsxNworZGRmbWEwMjYwICBmbWEgICAgICAgNDI1NjA1MzMuMTc3NCAgICAgLTM2NDM2MDUyODIuODYgICAgICAgMTc4Mjc3Ljk2Mzc3ICAtPiAgLTEuNTUwNzM3ODM1MjYzMzQ3RSsxNyBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAyLjg5NzYyNDYyMDU3NjAwNUUrMjIKK2RkZm1hMDI2OSAgZm1hICAgICAgICAxNDI2NTY1ODczNzUgICAgICAgMjAzMTE4ODc5NjcwICAgICAgIDYwNDU3NjEwMzk5MSAgLT4gIDIuODk3NjI0NjIwNTc2MDA0RSsyMiAgSW5leGFjdCBSb3VuZGVkCisKKy0tIENhc2VzIHdoZXJlIG11bHRpcGx5IHdvdWxkIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBpZiBzZXBhcmF0ZQorZm1hMDMwMCAgZm1hICAgOWUrMzg0ICAgIDEwICAgMCAgICAgICAgIC0+IEluZmluaXR5ICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYTAzMDEgIGZtYSAgIDFlKzM4NCAgICAxMCAgIDAgICAgICAgICAtPiBJbmZpbml0eSAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWEwMzAyICBmbWEgICAxZSszODQgICAgMTAgICAtMWUrMzg0ICAgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZAorZm1hMDMwMyAgZm1hICAgMWUrMzg0ICAgIDEwICAgLTllKzM4NCAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQKKy0tIHN1Ym5vcm1hbCBldGMuCitmbWEwMzA1ICBmbWEgICAxZS0zOTggICAgMC4xICAwICAgICAgICAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYTAzMDYgIGZtYSAgIDFlLTM5OCAgICAwLjEgIDEgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYTAzMDcgIGZtYSAgIDFlLTM5OCAgICAwLjEgIDFlLTM5OCAgICAtPiAxRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gSW5maW5pdGUgY29tYmluYXRpb25zCitkZGZtYTA4MDAgZm1hICBJbmYgICBJbmYgICBJbmYgICAgLT4gIEluZmluaXR5CitkZGZtYTA4MDEgZm1hICBJbmYgICBJbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEwODAyIGZtYSAgSW5mICAtSW5mICAgSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMDgwMyBmbWEgIEluZiAgLUluZiAgLUluZiAgICAtPiAtSW5maW5pdHkKK2RkZm1hMDgwNCBmbWEgLUluZiAgIEluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTA4MDUgZm1hIC1JbmYgICBJbmYgIC1JbmYgICAgLT4gLUluZmluaXR5CitkZGZtYTA4MDYgZm1hIC1JbmYgIC1JbmYgICBJbmYgICAgLT4gIEluZmluaXR5CitkZGZtYTA4MDcgZm1hIC1JbmYgIC1JbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBUcmlwbGUgTmFOIHByb3BhZ2F0aW9uCitkZGZtYTA5MDAgZm1hICBOYU4yICBOYU4zICBOYU41ICAgLT4gIE5hTjIKK2RkZm1hMDkwMSBmbWEgIDAgICAgIE5hTjMgIE5hTjUgICAtPiAgTmFOMworZGRmbWEwOTAyIGZtYSAgMCAgICAgMCAgICAgTmFONSAgIC0+ICBOYU41CistLSBmaXJzdCBzTmFOIHdpbnMgKGNvbnNpZGVyIHFOYU4gZnJvbSBlYXJsaWVyIHNOYU4gYmVpbmcKKy0tIG92ZXJyaWRkZW4gYnkgYW4gc05hTiBpbiB0aGlyZCBvcGVyYW5kKQorZGRmbWEwOTAzIGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTA5MDQgZm1hICAwICAgICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMDkwNSBmbWEgIDAgICAgIDAgICAgIHNOYU4zICAtPiAgTmFOMyBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEwOTA2IGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTA5MDcgZm1hICBOYU43ICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMDkwOCBmbWEgIE5hTjcgIE5hTjUgIHNOYU4zICAtPiAgTmFOMyBJbnZhbGlkX29wZXJhdGlvbgorCistLSBNVUxUSVBMSUNBVElPTiBURVNUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gc2FuaXR5IGNoZWNrcworZGRmbWEyMDAwIGZtYSAgMiAgICAgIDIgICAwZSszODQgIC0+ICA0CitkZGZtYTIwMDEgZm1hICAyICAgICAgMyAgIDBlKzM4NCAgLT4gIDYKK2RkZm1hMjAwMiBmbWEgIDUgICAgICAxICAgMGUrMzg0ICAtPiAgNQorZGRmbWEyMDAzIGZtYSAgNSAgICAgIDIgICAwZSszODQgIC0+ICAxMAorZGRmbWEyMDA0IGZtYSAgMS4yMCAgIDIgICAwZSszODQgIC0+ICAyLjQwCitkZGZtYTIwMDUgZm1hICAxLjIwICAgMCAgIDBlKzM4NCAgLT4gIDAuMDAKK2RkZm1hMjAwNiBmbWEgIDEuMjAgIC0yICAgMGUrMzg0ICAtPiAgLTIuNDAKK2RkZm1hMjAwNyBmbWEgIC0xLjIwICAyICAgMGUrMzg0ICAtPiAgLTIuNDAKK2RkZm1hMjAwOCBmbWEgIC0xLjIwICAwICAgMGUrMzg0ICAtPiAgMC4wMAorZGRmbWEyMDA5IGZtYSAgLTEuMjAgLTIgICAwZSszODQgIC0+ICAyLjQwCitkZGZtYTIwMTAgZm1hICA1LjA5IDcuMSAgIDBlKzM4NCAgLT4gIDM2LjEzOQorZGRmbWEyMDExIGZtYSAgMi41ICAgIDQgICAwZSszODQgIC0+ICAxMC4wCitkZGZtYTIwMTIgZm1hICAyLjUwICAgNCAgIDBlKzM4NCAgLT4gIDEwLjAwCitkZGZtYTIwMTMgZm1hICAxLjIzNDU2Nzg5IDEuMDAwMDAwMDAgICAwZSszODQgIC0+ICAxLjIzNDU2Nzg5MDAwMDAwMCBSb3VuZGVkCitkZGZtYTIwMTUgZm1hICAyLjUwICAgNCAgIDBlKzM4NCAgLT4gIDEwLjAwCitkZGZtYTIwMTYgZm1hICAgOS45OTk5OTk5OTkgIDkuOTk5OTk5OTk5ICAgMGUrMzg0ICAtPiAgIDk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEyMDE3IGZtYSAgIDkuOTk5OTk5OTk5IC05Ljk5OTk5OTk5OSAgIDBlKzM4NCAgLT4gIC05OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjAxOCBmbWEgIC05Ljk5OTk5OTk5OSAgOS45OTk5OTk5OTkgICAwZSszODQgIC0+ICAtOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTIwMTkgZm1hICAtOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5ICAgMGUrMzg0ICAtPiAgIDk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSB6ZXJvcywgZXRjLgorZGRmbWEyMDIxIGZtYSAgIDAgICAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTIwMjIgZm1hICAgMCAgICAgLTAgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjAyMyBmbWEgIC0wICAgICAgMCAgICAgICAwZSszODQgIC0+ICAgMAorZGRmbWEyMDI0IGZtYSAgLTAgICAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTIwMjUgZm1hICAtMC4wICAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjAyNiBmbWEgIC0wLjAgICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyMDI3IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCitkZGZtYTIwMjggZm1hICAtMC4wICAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjAzMCBmbWEgICA1LjAwICAgMUUtMyAgICAwZSszODQgIC0+ICAgMC4wMDUwMAorZGRmbWEyMDMxIGZtYSAgIDAwLjAwICAwLjAwMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwCitkZGZtYTIwMzIgZm1hICAgMDAuMDAgIDBFLTMgICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkZGZtYTIwMzMgZm1hICAgMEUtMyAgIDAwLjAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkZGZtYTIwMzQgZm1hICAtNS4wMCAgIDFFLTMgICAgMGUrMzg0ICAtPiAgLTAuMDA1MDAKK2RkZm1hMjAzNSBmbWEgIC0wMC4wMCAgMC4wMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMAorZGRmbWEyMDM2IGZtYSAgLTAwLjAwICAwRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZGRmbWEyMDM3IGZtYSAgLTBFLTMgICAwMC4wMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZGRmbWEyMDM4IGZtYSAgIDUuMDAgIC0xRS0zICAgIDBlKzM4NCAgLT4gIC0wLjAwNTAwCitkZGZtYTIwMzkgZm1hICAgMDAuMDAgLTAuMDAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAKK2RkZm1hMjA0MCBmbWEgICAwMC4wMCAtMEUtMyAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RkZm1hMjA0MSBmbWEgICAwRS0zICAtMDAuMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RkZm1hMjA0MiBmbWEgIC01LjAwICAtMUUtMyAgICAwZSszODQgIC0+ICAgMC4wMDUwMAorZGRmbWEyMDQzIGZtYSAgLTAwLjAwIC0wLjAwMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwCitkZGZtYTIwNDQgZm1hICAtMDAuMDAgLTBFLTMgICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkZGZtYTIwNDUgZm1hICAtMEUtMyAgLTAwLjAwICAtMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkZGZtYTIwNDYgZm1hICAtMEUtMyAgIDAwLjAwICAtMGUrMzg0ICAtPiAgLTAuMDAwMDAKK2RkZm1hMjA0NyBmbWEgICAwRS0zICAtMDAuMDAgIC0wZSszODQgIC0+ICAtMC4wMDAwMAorZGRmbWEyMDQ4IGZtYSAgIDBFLTMgICAwMC4wMCAgLTBlKzM4NCAgLT4gICAwLjAwMDAwCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK2RkZm1hMjA1MCBmbWEgIDEuMjAgMyAgICAgICAgICAwZSszODQgIC0+ICAzLjYwCitkZGZtYTIwNTEgZm1hICA3ICAgIDMgICAgICAgICAgMGUrMzg0ICAtPiAgMjEKK2RkZm1hMjA1MiBmbWEgIDAuOSAgMC44ICAgICAgICAwZSszODQgIC0+ICAwLjcyCitkZGZtYTIwNTMgZm1hICAwLjkgIC0wICAgICAgICAgMGUrMzg0ICAtPiAgMC4wCitkZGZtYTIwNTQgZm1hICA2NTQzMjEgNjU0MzIxICAgMGUrMzg0ICAtPiAgNDI4MTM1OTcxMDQxCisKK2RkZm1hMjA2MCBmbWEgIDEyMy40NSAxZTcgICAgMGUrMzg0ICAtPiAgIDEuMjM0NUUrOQorZGRmbWEyMDYxIGZtYSAgMTIzLjQ1IDFlOCAgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxMAorZGRmbWEyMDYyIGZtYSAgMTIzLjQ1IDFlKzkgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxMQorZGRmbWEyMDYzIGZtYSAgMTIzLjQ1IDFlMTAgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxMgorZGRmbWEyMDY0IGZtYSAgMTIzLjQ1IDFlMTEgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxMworZGRmbWEyMDY1IGZtYSAgMTIzLjQ1IDFlMTIgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxNAorZGRmbWEyMDY2IGZtYSAgMTIzLjQ1IDFlMTMgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxNQorCisKKy0tIHRlc3Qgc29tZSBpbnRlcm1lZGlhdGUgbGVuZ3RocworLS0gICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkZm1hMjA4MCBmbWEgIDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAgIDBlKzM4NCAgLT4gIDEyMzAxMjM0NTY0NTY3OC45CitkZGZtYTIwODQgZm1hICAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgICAwZSszODQgIC0+ICAxMjMwMTIzNDU2NDU2NzguOQorZGRmbWEyMDkwIGZtYSAgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xICAgMGUrMzg0ICAtPiAgMTIzMDEyMzQ1NjQ1Njc4LjkKK2RkZm1hMjA5NCBmbWEgIDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAgIDBlKzM4NCAgLT4gIDEyMzAxMjM0NTY0NTY3OC45CisKKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgYW5kIGNhcnJpZXMKK2RkZm1hMjEwMSBmbWEgIDkgOSAgICAgMGUrMzg0ICAtPiAgODEKK2RkZm1hMjEwMiBmbWEgIDkgOTAgICAgIDBlKzM4NCAgLT4gIDgxMAorZGRmbWEyMTAzIGZtYSAgOSA5MDAgICAgIDBlKzM4NCAgLT4gIDgxMDAKK2RkZm1hMjEwNCBmbWEgIDkgOTAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAKK2RkZm1hMjEwNSBmbWEgIDkgOTAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMAorZGRmbWEyMTA2IGZtYSAgOSA5MDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAKK2RkZm1hMjEwNyBmbWEgIDkgOTAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAKK2RkZm1hMjEwOCBmbWEgIDkgOTAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMAorZGRmbWEyMTA5IGZtYSAgOSA5MDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAKK2RkZm1hMjExMCBmbWEgIDkgOTAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAKK2RkZm1hMjExMSBmbWEgIDkgOTAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMAorZGRmbWEyMTEyIGZtYSAgOSA5MDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAKK2RkZm1hMjExMyBmbWEgIDkgOTAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAKK2RkZm1hMjExNCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMAorZGRmbWEyMTE1IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAKKy0tZGRmbWEyMTE2IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMTcgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMDAKKy0tZGRmbWEyMTE4IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAKKy0tZGRmbWEyMTE5IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMjAgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZGRmbWEyMTIxIGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZGRmbWEyMTIyIGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kZGZtYTIxMjMgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgd2l0aG91dCBjYXJyaWVzCitkZGZtYTIxMzEgZm1hICAzIDMgICAgIDBlKzM4NCAgLT4gIDkKK2RkZm1hMjEzMiBmbWEgIDMgMzAgICAgIDBlKzM4NCAgLT4gIDkwCitkZGZtYTIxMzMgZm1hICAzIDMwMCAgICAgMGUrMzg0ICAtPiAgOTAwCitkZGZtYTIxMzQgZm1hICAzIDMwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAKK2RkZm1hMjEzNSBmbWEgIDMgMzAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwCitkZGZtYTIxMzYgZm1hICAzIDMwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwCitkZGZtYTIxMzcgZm1hICAzIDMwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAKK2RkZm1hMjEzOCBmbWEgIDMgMzAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwCitkZGZtYTIxMzkgZm1hICAzIDMwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwCitkZGZtYTIxNDAgZm1hICAzIDMwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwMDAKK2RkZm1hMjE0MSBmbWEgIDMgMzAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwMDAwCitkZGZtYTIxNDIgZm1hICAzIDMwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwCitkZGZtYTIxNDMgZm1hICAzIDMwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwMDAwMDAKK2RkZm1hMjE0NCBmbWEgIDMgMzAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDkwMDAwMDAwMDAwMDAwCitkZGZtYTIxNDUgZm1hICAzIDMwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwMDAwCisKKy0tIHRlc3Qgc29tZSBlZGdlIGNhc2VzIHdpdGggZXhhY3Qgcm91bmRpbmcKK2RkZm1hMjMwMSBmbWEgIDkgOSAgICAgMGUrMzg0ICAtPiAgODEKK2RkZm1hMjMwMiBmbWEgIDkgOTAgICAgIDBlKzM4NCAgLT4gIDgxMAorZGRmbWEyMzAzIGZtYSAgOSA5MDAgICAgIDBlKzM4NCAgLT4gIDgxMDAKK2RkZm1hMjMwNCBmbWEgIDkgOTAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAKK2RkZm1hMjMwNSBmbWEgIDkgOTAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMAorZGRmbWEyMzA2IGZtYSAgOSA5MDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAKK2RkZm1hMjMwNyBmbWEgIDkgOTAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAKK2RkZm1hMjMwOCBmbWEgIDkgOTAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMAorZGRmbWEyMzA5IGZtYSAgOSA5MDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAKK2RkZm1hMjMxMCBmbWEgIDkgOTAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAKK2RkZm1hMjMxMSBmbWEgIDkgOTAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMAorZGRmbWEyMzEyIGZtYSAgOSA5MDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAKK2RkZm1hMjMxMyBmbWEgIDkgOTAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAKK2RkZm1hMjMxNCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMAorZGRmbWEyMzE1IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAKK2RkZm1hMjMxNiBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkCitkZGZtYTIzMTcgZm1hICA5MCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMTcgIFJvdW5kZWQKK2RkZm1hMjMxOCBmbWEgIDkwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMTggIFJvdW5kZWQKK2RkZm1hMjMxOSBmbWEgIDkwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzE5ICBSb3VuZGVkCitkZGZtYTIzMjAgZm1hICA5MDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMjAgIFJvdW5kZWQKK2RkZm1hMjMyMSBmbWEgIDkwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMjEgIFJvdW5kZWQKK2RkZm1hMjMyMiBmbWEgIDkwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzIyICBSb3VuZGVkCitkZGZtYTIzMjMgZm1hICA5MDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMjMgIFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK2RkZm1hMjUwNCAgZm1hICAgMEUtMjYwIDEwMDBFLTI2MCAgICAwZSszODQgIC0+ICAwRS0zOTggQ2xhbXBlZAorZGRmbWEyNTA1ICBmbWEgICAxMDBFKzI2MCAwRSsyNjAgICAgIDBlKzM4NCAgLT4gIDBFKzM2OSBDbGFtcGVkCisKKy0tIG1peGVkIHdpdGggemVyb3MKK2RkZm1hMjU0MSBmbWEgICAwICAgIC0xICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTI1NDIgZm1hICAtMCAgICAtMSAgICAgICAwZSszODQgIC0+ICAgMAorZGRmbWEyNTQzIGZtYSAgIDAgICAgIDEgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjU0NCBmbWEgIC0wICAgICAxICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTI1NDUgZm1hICAtMSAgICAgMCAgICAgICAwZSszODQgIC0+ICAgMAorZGRmbWEyNTQ2IGZtYSAgLTEgICAgLTAgICAgICAgMGUrMzg0ICAtPiAgIDAKK2RkZm1hMjU0NyBmbWEgICAxICAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwCitkZGZtYTI1NDggZm1hICAgMSAgICAtMCAgICAgICAwZSszODQgIC0+ICAgMAorCitkZGZtYTI1NTEgZm1hICAgMC4wICAtMSAgICAgICAwZSszODQgIC0+ICAgMC4wCitkZGZtYTI1NTIgZm1hICAtMC4wICAtMSAgICAgICAwZSszODQgIC0+ICAgMC4wCitkZGZtYTI1NTMgZm1hICAgMC4wICAgMSAgICAgICAwZSszODQgIC0+ICAgMC4wCitkZGZtYTI1NTQgZm1hICAtMC4wICAgMSAgICAgICAwZSszODQgIC0+ICAgMC4wCitkZGZtYTI1NTUgZm1hICAtMS4wICAgMCAgICAgICAwZSszODQgIC0+ICAgMC4wCitkZGZtYTI1NTYgZm1hICAtMS4wICAtMCAgICAgICAwZSszODQgIC0+ICAgMC4wCitkZGZtYTI1NTcgZm1hICAgMS4wICAgMCAgICAgICAwZSszODQgIC0+ICAgMC4wCitkZGZtYTI1NTggZm1hICAgMS4wICAtMCAgICAgICAwZSszODQgIC0+ICAgMC4wCisKK2RkZm1hMjU2MSBmbWEgICAwICAgIC0xLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU2MiBmbWEgIC0wICAgIC0xLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU2MyBmbWEgICAwICAgICAxLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU2NCBmbWEgIC0wICAgICAxLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU2NSBmbWEgIC0xICAgICAwLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU2NiBmbWEgIC0xICAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU2NyBmbWEgICAxICAgICAwLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKK2RkZm1hMjU2OCBmbWEgICAxICAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAKKworZGRmbWEyNTcxIGZtYSAgIDAuMCAgLTEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjU3MiBmbWEgIC0wLjAgIC0xLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCitkZGZtYTI1NzMgZm1hICAgMC4wICAgMS4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyNTc0IGZtYSAgLTAuMCAgIDEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjU3NSBmbWEgIC0xLjAgICAwLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCitkZGZtYTI1NzYgZm1hICAtMS4wICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wMAorZGRmbWEyNTc3IGZtYSAgIDEuMCAgIDAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKK2RkZm1hMjU3OCBmbWEgICAxLjAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCisKKy0tIFNwZWNpYWxzCitkZGZtYTI1ODAgZm1hICAgSW5mICAtSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjU4MSBmbWEgICBJbmYgIC0xMDAwICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNTgyIGZtYSAgIEluZiAgLTEgICAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI1ODMgZm1hICAgSW5mICAtMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNTg0IGZtYSAgIEluZiAgIDAgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjU4NSBmbWEgICBJbmYgICAxICAgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQorZGRmbWEyNTg2IGZtYSAgIEluZiAgIDEwMDAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5CitkZGZtYTI1ODcgZm1hICAgSW5mICAgSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjU4OCBmbWEgIC0xMDAwICBJbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNTg5IGZtYSAgLUluZiAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI1OTAgZm1hICAtMSAgICAgSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjU5MSBmbWEgIC0wICAgICBJbmYgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI1OTIgZm1hICAgMCAgICAgSW5mICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNTkzIGZtYSAgIDEgICAgIEluZiAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5CitkZGZtYTI1OTQgZm1hICAgMTAwMCAgSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjU5NSBmbWEgICBJbmYgICBJbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQorCitkZGZtYTI2MDAgZm1hICAtSW5mICAtSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjYwMSBmbWEgIC1JbmYgIC0xMDAwICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQorZGRmbWEyNjAyIGZtYSAgLUluZiAgLTEgICAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5CitkZGZtYTI2MDMgZm1hICAtSW5mICAtMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjA0IGZtYSAgLUluZiAgIDAgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjYwNSBmbWEgIC1JbmYgICAxICAgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNjA2IGZtYSAgLUluZiAgIDEwMDAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI2MDcgZm1hICAtSW5mICAgSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjYwOCBmbWEgIC0xMDAwICBJbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorZGRmbWEyNjA5IGZtYSAgLUluZiAgLUluZiAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5CitkZGZtYTI2MTAgZm1hICAtMSAgICAtSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKK2RkZm1hMjYxMSBmbWEgIC0wICAgIC1JbmYgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2MTIgZm1hICAgMCAgICAtSW5mICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjEzIGZtYSAgIDEgICAgLUluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5CitkZGZtYTI2MTQgZm1hICAgMTAwMCAtSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKK2RkZm1hMjYxNSBmbWEgICBJbmYgIC1JbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQorCitkZGZtYTI2MjEgZm1hICAgTmFOIC1JbmYgICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjIgZm1hICAgTmFOIC0xMDAwICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjMgZm1hICAgTmFOIC0xICAgICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjQgZm1hICAgTmFOIC0wICAgICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjUgZm1hICAgTmFOICAwICAgICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjYgZm1hICAgTmFOICAxICAgICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjcgZm1hICAgTmFOICAxMDAwICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjggZm1hICAgTmFOICBJbmYgICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MjkgZm1hICAgTmFOICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzAgZm1hICAtSW5mICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzEgZm1hICAtMTAwMCBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzIgZm1hICAtMSAgICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzMgZm1hICAtMCAgICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzQgZm1hICAgMCAgICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzUgZm1hICAgMSAgICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzYgZm1hICAgMTAwMCBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCitkZGZtYTI2MzcgZm1hICAgSW5mICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFOCisKK2RkZm1hMjY0MSBmbWEgICBzTmFOIC1JbmYgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NDIgZm1hICAgc05hTiAtMTAwMCAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjQzIGZtYSAgIHNOYU4gLTEgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY0NCBmbWEgICBzTmFOIC0wICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NDUgZm1hICAgc05hTiAgMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjQ2IGZtYSAgIHNOYU4gIDEgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY0NyBmbWEgICBzTmFOICAxMDAwICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NDggZm1hICAgc05hTiAgTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjQ5IGZtYSAgIHNOYU4gc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY1MCBmbWEgICBOYU4gIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NTEgZm1hICAtSW5mICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjUyIGZtYSAgLTEwMDAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY1MyBmbWEgIC0xICAgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NTQgZm1hICAtMCAgICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjU1IGZtYSAgIDAgICAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY1NiBmbWEgICAxICAgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NTcgZm1hICAgMTAwMCBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjU4IGZtYSAgIEluZiAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY1OSBmbWEgICBOYU4gIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkZm1hMjY2MSBmbWEgICBOYU45IC1JbmYgICAgIDBlKzM4NCAgLT4gICBOYU45CitkZGZtYTI2NjIgZm1hICAgTmFOOCAgOTk5ICAgICAwZSszODQgIC0+ICAgTmFOOAorZGRmbWEyNjYzIGZtYSAgIE5hTjcxIEluZiAgICAgMGUrMzg0ICAtPiAgIE5hTjcxCitkZGZtYTI2NjQgZm1hICAgTmFONiAgTmFONSAgICAwZSszODQgIC0+ICAgTmFONgorZGRmbWEyNjY1IGZtYSAgLUluZiAgIE5hTjQgICAgMGUrMzg0ICAtPiAgIE5hTjQKK2RkZm1hMjY2NiBmbWEgIC05OTkgICBOYU4zMyAgIDBlKzM4NCAgLT4gICBOYU4zMworZGRmbWEyNjY3IGZtYSAgIEluZiAgIE5hTjIgICAgMGUrMzg0ICAtPiAgIE5hTjIKKworZGRmbWEyNjcxIGZtYSAgIHNOYU45OSAtSW5mICAgICAgMGUrMzg0ICAtPiAgIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NzIgZm1hICAgc05hTjk4IC0xMSAgICAgICAwZSszODQgIC0+ICAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY3MyBmbWEgICBzTmFOOTcgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjc0IGZtYSAgIHNOYU4xNiBzTmFOOTQgICAgMGUrMzg0ICAtPiAgIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NzUgZm1hICAgTmFOOTUgIHNOYU45MyAgICAwZSszODQgIC0+ICAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY3NiBmbWEgIC1JbmYgICAgc05hTjkyICAgIDBlKzM4NCAgLT4gICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjc3IGZtYSAgIDA4OCAgICBzTmFOOTEgICAgMGUrMzg0ICAtPiAgIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2NzggZm1hICAgSW5mICAgIHNOYU45MCAgICAwZSszODQgIC0+ICAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY3OSBmbWEgICBOYU4gICAgc05hTjg5ICAgIDBlKzM4NCAgLT4gICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkZGZtYTI2ODEgZm1hICAtTmFOOSAtSW5mICAgICAwZSszODQgIC0+ICAtTmFOOQorZGRmbWEyNjgyIGZtYSAgLU5hTjggIDk5OSAgICAgMGUrMzg0ICAtPiAgLU5hTjgKK2RkZm1hMjY4MyBmbWEgIC1OYU43MSBJbmYgICAgIDBlKzM4NCAgLT4gIC1OYU43MQorZGRmbWEyNjg0IGZtYSAgLU5hTjYgLU5hTjUgICAgMGUrMzg0ICAtPiAgLU5hTjYKK2RkZm1hMjY4NSBmbWEgIC1JbmYgIC1OYU40ICAgIDBlKzM4NCAgLT4gIC1OYU40CitkZGZtYTI2ODYgZm1hICAtOTk5ICAtTmFOMzMgICAwZSszODQgIC0+ICAtTmFOMzMKK2RkZm1hMjY4NyBmbWEgICBJbmYgIC1OYU4yICAgIDBlKzM4NCAgLT4gIC1OYU4yCisKK2RkZm1hMjY5MSBmbWEgIC1zTmFOOTkgLUluZiAgICAgIDBlKzM4NCAgLT4gIC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjkyIGZtYSAgLXNOYU45OCAtMTEgICAgICAgMGUrMzg0ICAtPiAgLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2OTMgZm1hICAtc05hTjk3ICBOYU4gICAgICAwZSszODQgIC0+ICAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY5NCBmbWEgIC1zTmFOMTYgLXNOYU45NCAgIDBlKzM4NCAgLT4gIC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjk1IGZtYSAgLU5hTjk1ICAtc05hTjkzICAgMGUrMzg0ICAtPiAgLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2OTYgZm1hICAtSW5mICAgIC1zTmFOOTIgICAwZSszODQgIC0+ICAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMjY5NyBmbWEgICAwODggICAgLXNOYU45MSAgIDBlKzM4NCAgLT4gIC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyNjk4IGZtYSAgIEluZiAgICAtc05hTjkwICAgMGUrMzg0ICAtPiAgLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI2OTkgZm1hICAtTmFOICAgIC1zTmFOODkgICAwZSszODQgIC0+ICAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZGRmbWEyNzAxIGZtYSAgLU5hTiAgLUluZiAgICAgMGUrMzg0ICAtPiAgLU5hTgorZGRmbWEyNzAyIGZtYSAgLU5hTiAgIDk5OSAgICAgMGUrMzg0ICAtPiAgLU5hTgorZGRmbWEyNzAzIGZtYSAgLU5hTiAgIEluZiAgICAgMGUrMzg0ICAtPiAgLU5hTgorZGRmbWEyNzA0IGZtYSAgLU5hTiAgLU5hTiAgICAgMGUrMzg0ICAtPiAgLU5hTgorZGRmbWEyNzA1IGZtYSAgLUluZiAgLU5hTjAgICAgMGUrMzg0ICAtPiAgLU5hTgorZGRmbWEyNzA2IGZtYSAgLTk5OSAgLU5hTiAgICAgMGUrMzg0ICAtPiAgLU5hTgorZGRmbWEyNzA3IGZtYSAgIEluZiAgLU5hTiAgICAgMGUrMzg0ICAtPiAgLU5hTgorCitkZGZtYTI3MTEgZm1hICAtc05hTiAgIC1JbmYgICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTIgZm1hICAtc05hTiAgIC0xMSAgICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTMgZm1hICAtc05hTjAwICBOYU4gICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTQgZm1hICAtc05hTiAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTUgZm1hICAtTmFOICAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTYgZm1hICAtSW5mICAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTcgZm1hICAgMDg4ICAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTggZm1hICAgSW5mICAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTI3MTkgZm1hICAtTmFOICAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cworLS0gc2lnbnMKK2RkZm1hMjc1MSBmbWEgICAxZSsyNzcgIDFlKzMxMSAgIDBlKzM4NCAgLT4gICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjc1MiBmbWEgICAxZSsyNzcgLTFlKzMxMSAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjc1MyBmbWEgIC0xZSsyNzcgIDFlKzMxMSAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjc1NCBmbWEgIC0xZSsyNzcgLTFlKzMxMSAgIDBlKzM4NCAgLT4gICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjc1NSBmbWEgICAxZS0yNzcgIDFlLTMxMSAgIDBlKzM4NCAgLT4gICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyNzU2IGZtYSAgIDFlLTI3NyAtMWUtMzExICAgMGUrMzg0ICAtPiAgLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZGZtYTI3NTcgZm1hICAtMWUtMjc3ICAxZS0zMTEgICAwZSszODQgIC0+ICAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZm1hMjc1OCBmbWEgIC0xZS0yNzcgLTFlLTMxMSAgIDBlKzM4NCAgLT4gICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykKK2RkZm1hMjc2MCBmbWEgIDFlLTI5MSAxZS0xMDEgICAwZSszODQgIC0+ICAxRS0zOTIgU3Vibm9ybWFsCitkZGZtYTI3NjEgZm1hICAxZS0yOTEgMWUtMTAyICAgMGUrMzg0ICAtPiAgMUUtMzkzIFN1Ym5vcm1hbAorZGRmbWEyNzYyIGZtYSAgMWUtMjkxIDFlLTEwMyAgIDBlKzM4NCAgLT4gIDFFLTM5NCBTdWJub3JtYWwKK2RkZm1hMjc2MyBmbWEgIDFlLTI5MSAxZS0xMDQgICAwZSszODQgIC0+ICAxRS0zOTUgU3Vibm9ybWFsCitkZGZtYTI3NjQgZm1hICAxZS0yOTEgMWUtMTA1ICAgMGUrMzg0ICAtPiAgMUUtMzk2IFN1Ym5vcm1hbAorZGRmbWEyNzY1IGZtYSAgMWUtMjkxIDFlLTEwNiAgIDBlKzM4NCAgLT4gIDFFLTM5NyBTdWJub3JtYWwKK2RkZm1hMjc2NiBmbWEgIDFlLTI5MSAxZS0xMDcgICAwZSszODQgIC0+ICAxRS0zOTggU3Vibm9ybWFsCitkZGZtYTI3NjcgZm1hICAxZS0yOTEgMWUtMTA4ICAgMGUrMzg0ICAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZm1hMjc2OCBmbWEgIDFlLTI5MSAxZS0xMDkgICAwZSszODQgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyNzY5IGZtYSAgMWUtMjkxIDFlLTExMCAgIDBlKzM4NCAgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCistLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddCitkZGZtYTI3NzAgZm1hICAxZSs2MCAxZSszMjEgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMEUrMzgxICBDbGFtcGVkCitkZGZtYTI3NzEgZm1hICAxZSs2MCAxZSszMjIgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDBFKzM4MiAgQ2xhbXBlZAorZGRmbWEyNzcyIGZtYSAgMWUrNjAgMWUrMzIzICAgMGUrMzg0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzICBDbGFtcGVkCitkZGZtYTI3NzMgZm1hICAxZSs2MCAxZSszMjQgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkCitkZGZtYTI3NzQgZm1hICAxZSs2MCAxZSszMjUgICAwZSszODQgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjc3NSBmbWEgIDFlKzYwIDFlKzMyNiAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzc2IGZtYSAgMWUrNjAgMWUrMzI3ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI3NzcgZm1hICAxZSs2MCAxZSszMjggICAwZSszODQgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjc3OCBmbWEgIDFlKzYwIDFlKzMyOSAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEyNzc5IGZtYSAgMWUrNjAgMWUrMzMwICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMjgwMSBmbWEgICAxLjAwMDBFLTM5NCAgMSAgICAgICAwZSszODQgIC0+ICAxLjAwMDBFLTM5NCBTdWJub3JtYWwKK2RkZm1hMjgwMiBmbWEgICAxLjAwMEUtMzk0ICAgMWUtMSAgICAwZSszODQgIC0+ICAxLjAwMEUtMzk1ICBTdWJub3JtYWwKK2RkZm1hMjgwMyBmbWEgICAxLjAwRS0zOTQgICAgMWUtMiAgICAwZSszODQgIC0+ICAxLjAwRS0zOTYgICBTdWJub3JtYWwKK2RkZm1hMjgwNCBmbWEgICAxLjBFLTM5NCAgICAgMWUtMyAgICAwZSszODQgIC0+ICAxLjBFLTM5NyAgICBTdWJub3JtYWwKK2RkZm1hMjgwNSBmbWEgICAxLjBFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkZGZtYTI4MDYgZm1hICAgMS4zRS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODA3IGZtYSAgIDEuNUUtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgwOCBmbWEgICAxLjdFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MDkgZm1hICAgMi4zRS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODEwIGZtYSAgIDIuNUUtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgxMSBmbWEgICAyLjdFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MTIgZm1hICAgMS40OUUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODEzIGZtYSAgIDEuNTBFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgxNCBmbWEgICAxLjUxRS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MTUgZm1hICAgMi40OUUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODE2IGZtYSAgIDIuNTBFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgxNyBmbWEgICAyLjUxRS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMjgxOCBmbWEgICAxRS0zOTQgICAgICAgMWUtNCAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFN1Ym5vcm1hbAorZGRmbWEyODE5IGZtYSAgIDNFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyODIwIGZtYSAgIDVFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyODIxIGZtYSAgIDdFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgyMiBmbWEgICA5RS0zOTQgICAgICAgMWUtNSAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MjMgZm1hICAgOS45RS0zOTQgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkZGZtYTI4MjQgZm1hICAgMUUtMzk0ICAgICAgLTFlLTQgICAgMGUrMzg0ICAtPiAgLTFFLTM5OCAgICBTdWJub3JtYWwKK2RkZm1hMjgyNSBmbWEgICAzRS0zOTQgICAgICAtMWUtNSAgICAwZSszODQgIC0+ICAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZm1hMjgyNiBmbWEgIC01RS0zOTQgICAgICAgMWUtNSAgICAwZSszODQgIC0+ICAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkZm1hMjgyNyBmbWEgICA3RS0zOTQgICAgICAtMWUtNSAgICAwZSszODQgIC0+ICAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZGZtYTI4MjggZm1hICAtOUUtMzk0ICAgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRmbWEyODI5IGZtYSAgIDkuOUUtMzk0ICAgIC0xZS01ICAgIDBlKzM4NCAgLT4gIC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMjgzMCBmbWEgICAzLjBFLTM5NCAgICAtMWUtNSAgICAwZSszODQgIC0+ICAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworZGRmbWEyODMxIGZtYSAgIDEuMEUtMTk5ICAgICAxZS0yMDAgICAwZSszODQgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRmbWEyODMyIGZtYSAgIDEuMEUtMTk5ICAgICAxZS0xOTkgICAwZSszODQgIC0+ICAxRS0zOTggICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkZm1hMjgzMyBmbWEgICAxLjBFLTE5OSAgICAgMWUtMTk4ICAgMGUrMzg0ICAtPiAgMS4wRS0zOTcgICAgU3Vibm9ybWFsCitkZGZtYTI4MzQgZm1hICAgMi4wRS0xOTkgICAgIDJlLTE5OCAgIDBlKzM4NCAgLT4gIDQuMEUtMzk3ICAgIFN1Ym5vcm1hbAorZGRmbWEyODM1IGZtYSAgIDQuMEUtMTk5ICAgICA0ZS0xOTggICAwZSszODQgIC0+ICAxLjYwRS0zOTYgICBTdWJub3JtYWwKK2RkZm1hMjgzNiBmbWEgIDEwLjBFLTE5OSAgICAxMGUtMTk4ICAgMGUrMzg0ICAtPiAgMS4wMDBFLTM5NSAgU3Vibm9ybWFsCitkZGZtYTI4MzcgZm1hICAzMC4wRS0xOTkgICAgMzBlLTE5OCAgIDBlKzM4NCAgLT4gIDkuMDAwRS0zOTUgIFN1Ym5vcm1hbAorZGRmbWEyODM4IGZtYSAgNDAuMEUtMTk5ICAgIDQwZS0xODggICAwZSszODQgIC0+ICAxLjYwMDBFLTM4NCBTdWJub3JtYWwKK2RkZm1hMjgzOSBmbWEgIDQwLjBFLTE5OSAgICA0MGUtMTg3ICAgMGUrMzg0ICAtPiAgMS42MDAwRS0zODMKK2RkZm1hMjg0MCBmbWEgIDQwLjBFLTE5OSAgICA0MGUtMTg2ICAgMGUrMzg0ICAtPiAgMS42MDAwRS0zODIKKworLS0gTG9uZyBvcGVyYW5kIG92ZXJmbG93IG1heSBiZSBhIGRpZmZlcmVudCBwYXRoCitkZGZtYTI4NzAgZm1hICAxMDAgIDkuOTk5RSszODMgICAgICAgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2RkZm1hMjg3MSBmbWEgIDEwMCAtOS45OTlFKzM4MyAgICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkZGZtYTI4NzIgZm1hICAgICAgIDkuOTk5RSszODMgMTAwICAgMGUrMzg0ICAtPiAgIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZGRmbWEyODczIGZtYSAgICAgIC05Ljk5OUUrMzgzIDEwMCAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK2RkZm1hMjg4MSBmbWEgICAxLjIzNDdFLTM1NSAxLjIzNDdFLTQwICAgIDBlKzM4NCAgLT4gICAxLjUyNEUtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGZtYTI4ODIgZm1hICAgMS4yMzRFLTM1NSAxLjIzNEUtNDAgICAgICAwZSszODQgIC0+ICAgMS41MjNFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRmbWEyODgzIGZtYSAgIDEuMjNFLTM1NSAgMS4yM0UtNDAgICAgICAgMGUrMzg0ICAtPiAgIDEuNTEzRS0zOTUgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkZm1hMjg4NCBmbWEgICAxLjJFLTM1NSAgIDEuMkUtNDAgICAgICAgIDBlKzM4NCAgLT4gICAxLjQ0RS0zOTUgIFN1Ym5vcm1hbAorZGRmbWEyODg1IGZtYSAgIDEuMkUtMzU1ICAgMS4yRS00MSAgICAgICAgMGUrMzg0ICAtPiAgIDEuNDRFLTM5NiAgU3Vibm9ybWFsCitkZGZtYTI4ODYgZm1hICAgMS4yRS0zNTUgICAxLjJFLTQyICAgICAgICAwZSszODQgIC0+ICAgMS40RS0zOTcgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGRmbWEyODg3IGZtYSAgIDEuMkUtMzU1ICAgMS4zRS00MiAgICAgICAgMGUrMzg0ICAtPiAgIDEuNkUtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RkZm1hMjg4OCBmbWEgICAxLjNFLTM1NSAgIDEuM0UtNDIgICAgICAgIDBlKzM4NCAgLT4gICAxLjdFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkZGZtYTI4ODkgZm1hICAgMS4zRS0zNTUgICAxLjNFLTQzICAgICAgICAwZSszODQgIC0+ICAgICAyRS0zOTggICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGRmbWEyODkwIGZtYSAgIDEuM0UtMzU2ICAgMS4zRS00MyAgICAgICAgMGUrMzg0ICAtPiAgICAgMEUtMzk4ICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworCitkZGZtYTI4OTEgZm1hICAgMS4yMzQ1RS0zOSAgIDEuMjM0RS0zNTUgICAwZSszODQgIC0+ICAgMS41MjM0RS0zOTQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkZm1hMjg5MiBmbWEgICAxLjIzNDU2RS0zOSAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyMzRFLTM5NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRmbWEyODkzIGZtYSAgIDEuMjM0NUUtNDAgICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTIzRS0zOTUgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZGZtYTI4OTQgZm1hICAgMS4yMzQ1NkUtNDAgIDEuMjM0RS0zNTUgICAwZSszODQgIC0+ICAgMS41MjNFLTM5NSAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkZm1hMjg5NSBmbWEgICAxLjIzNDVFLTQxICAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyRS0zOTYgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRmbWEyODk2IGZtYSAgIDEuMjM0NTZFLTQxICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTJFLTM5NiAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIE5vdyBleHBsb3JlIHRoZSBjYXNlIHdoZXJlIHdlIGdldCBhIG5vcm1hbCByZXN1bHQgd2l0aCBVbmRlcmZsb3cKK2RkZm1hMjkwMCBmbWEgICAwLjMwMDAwMDAwMDBFLTE5MSAwLjMwMDAwMDAwMDBFLTE5MSAgIDBlKzM4NCAgLT4gIDkuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZAorZGRmbWEyOTAxIGZtYSAgIDAuMzAwMDAwMDAwMUUtMTkxIDAuMzAwMDAwMDAwMUUtMTkxICAgMGUrMzg0ICAtPiAgOS4wMDAwMDAwMDYwMDAwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZGZtYTI5MDIgZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5ICAgICAgICAgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5MDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2RkZm1hMjkwMyBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5ICAgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5MDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZGRmbWEyOTA0IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5ICAgICAgICAgMGUrMzg0ICAtPiAgOS45OTk5OTk5OTk5OTk5MEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZGZtYTI5MDUgZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5ICAgICAgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKy0tIHByb3ZlIG9wZXJhbmRzIGFyZSBleGFjdAorZGRmbWEyOTA2IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDEgICAgICAgICAgICAgICAgICAgICAgICAgMGUrMzg0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MworZGRmbWEyOTA3IGZtYSAgICAgICAgICAgICAgICAgICAgICAgIDEgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgICAgMGUrMzg0ICAtPiAgMC4wOTk5OTk5OTk5OTk5OTk5OQorLS0gdGhlIG5leHQgcm91bmRzIHRvIE5taW4KK2RkZm1hMjkwOCBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAgIDBlKzM4NCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKworLS0gaHVnZXN0CitkZGZtYTI5MDkgZm1hICAgOTk5OTk5OTk5OTk5OTk5OSA5OTk5OTk5OTk5OTk5OTk5ICAgMGUrMzg0ICAtPiAgOS45OTk5OTk5OTk5OTk5OThFKzMxIEluZXhhY3QgUm91bmRlZAorCistLSBOdWxsIHRlc3RzCitkZGZtYTI5OTAgZm1hICAxMCAgIyAgIDBlKzM4NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEyOTkxIGZtYSAgICMgMTAgICAwZSszODQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCistLSBBRERJVElPTiBURVNUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddCitkZGZtYTMwMDEgZm1hICAxICAxICAgICAgIDEgICAgICAgLT4gIDIKK2RkZm1hMzAwMiBmbWEgIDEgIDIgICAgICAgMyAgICAgICAtPiAgNQorZGRmbWEzMDAzIGZtYSAgMSAgJzUuNzUnICAnMy4zJyAgIC0+ICA5LjA1CitkZGZtYTMwMDQgZm1hICAxICAnNScgICAgICctMycgICAgLT4gIDIKK2RkZm1hMzAwNSBmbWEgIDEgICctNScgICAgJy0zJyAgICAtPiAgLTgKK2RkZm1hMzAwNiBmbWEgIDEgICctNycgICAgJzIuNScgICAtPiAgLTQuNQorZGRmbWEzMDA3IGZtYSAgMSAgJzAuNycgICAnMC4zJyAgIC0+ICAxLjAKK2RkZm1hMzAwOCBmbWEgIDEgICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MAorZGRmbWEzMDA5IGZtYSAgMSAgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzIuMjM0NTY3ODknCitkZGZtYTMwMTAgZm1hICAxICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcKKworLS0gICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkZm1hMzAxMSBmbWEgIDEgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDYnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMDEyIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZGRmbWEzMDEzIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknCitkZGZtYTMwMTQgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMTUgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTknICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMTYgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTk5JyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMTcgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAwJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMTggZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAxJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMTkgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDEnICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMjAgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMzAyMSBmbWEgIDEgIDAgMSAtPiAxCitkZGZtYTMwMjIgZm1hICAxICAxIDEgLT4gMgorZGRmbWEzMDIzIGZtYSAgMSAgMiAxIC0+IDMKK2RkZm1hMzAyNCBmbWEgIDEgIDMgMSAtPiA0CitkZGZtYTMwMjUgZm1hICAxICA0IDEgLT4gNQorZGRmbWEzMDI2IGZtYSAgMSAgNSAxIC0+IDYKK2RkZm1hMzAyNyBmbWEgIDEgIDYgMSAtPiA3CitkZGZtYTMwMjggZm1hICAxICA3IDEgLT4gOAorZGRmbWEzMDI5IGZtYSAgMSAgOCAxIC0+IDkKK2RkZm1hMzAzMCBmbWEgIDEgIDkgMSAtPiAxMAorCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKK2RkZm1hMzAzMSBmbWEgIDEgICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4JworZGRmbWEzMDMyIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknCitkZGZtYTMwMzMgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcKK2RkZm1hMzAzNCBmbWEgIDEgICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJworCitkZGZtYTMwMzUgZm1hICAxICAnNzAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAzNiBmbWEgIDEgICc3MDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAzNyBmbWEgIDEgICc3MDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwMzggZm1hICAxICAnNzAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzAzOSBmbWEgIDEgICc3MDAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkCisKKy0tIHN5bW1ldHJ5OgorZGRmbWEzMDQwIGZtYSAgMSAgJzEwMDAwZSsxNicgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwNDEgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwNDIgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMDQ0IGZtYSAgMSAgJzEwMDAwZSsxNicgICc3MDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAxRSsyMCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMwNDUgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZAorCistLSBzYW1lLCB3aXRob3V0IHJvdW5kaW5nCitkZGZtYTMwNDYgZm1hICAxICAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3JworZGRmbWEzMDQ3IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnCitkZGZtYTMwNDggZm1hICAxICAnMTAwMDBlKzknICAnNzAwJyAtPiAnMTAwMDAwMDAwMDA3MDAnCitkZGZtYTMwNDkgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJworZGRmbWEzMDUwIGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnCitkZGZtYTMwNTEgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMTAwMDAwMDA3MDAwMDAnCitkZGZtYTMwNTIgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzEwMDAwMDA3MDAwMDAwJworCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCitkZGZtYTMwNTMgZm1hICAxICAnMTInICc3LjAwJyAtPiAnMTkuMDAnCitkZGZtYTMwNTQgZm1hICAxICAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJworZGRmbWEzMDU1IGZtYSAgMSAgJzEuMycgJy0xLjMwJyAtPiAnMC4wMCcKK2RkZm1hMzA1NiBmbWEgIDEgICcxLjMnICctMi4wNycgLT4gJy0wLjc3JworZGRmbWEzMDU3IGZtYSAgMSAgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcKKworLS0gbGVhZGluZyB6ZXJvIHByZXNlcnZhdGlvbgorZGRmbWEzMDYxIGZtYSAgMSAgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJworZGRmbWEzMDYyIGZtYSAgMSAgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnCitkZGZtYTMwNjMgZm1hICAxICAxICcwLjAwMDAwMScgLT4gJzEuMDAwMDAxJworZGRmbWEzMDY0IGZtYSAgMSAgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMDAxJworZGRmbWEzMDY1IGZtYSAgMSAgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAwMDEnCisKKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0KK2RkZm1hMzA3MCBmbWEgIDEgIDEgIDAgICAgLT4gMQorZGRmbWEzMDcxIGZtYSAgMSAgMSAwLiAgICAtPiAxCitkZGZtYTMwNzIgZm1hICAxICAxICAuMCAgIC0+IDEuMAorZGRmbWEzMDczIGZtYSAgMSAgMSAwLjAgICAtPiAxLjAKK2RkZm1hMzA3NCBmbWEgIDEgIDEgMC4wMCAgLT4gMS4wMAorZGRmbWEzMDc1IGZtYSAgMSAgIDAgIDEgICAtPiAxCitkZGZtYTMwNzYgZm1hICAxICAwLiAgMSAgIC0+IDEKK2RkZm1hMzA3NyBmbWEgIDEgICAuMCAxICAgLT4gMS4wCitkZGZtYTMwNzggZm1hICAxICAwLjAgMSAgIC0+IDEuMAorZGRmbWEzMDc5IGZtYSAgMSAgMC4wMCAxICAtPiAxLjAwCisKKy0tIHNvbWUgY2FycmllcworZGRmbWEzMDgwIGZtYSAgMSAgOTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OQorZGRmbWEzMDgxIGZtYSAgMSAgOTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAKK2RkZm1hMzA4MiBmbWEgIDEgICA5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAKK2RkZm1hMzA4MyBmbWEgIDEgICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMAorZGRmbWEzMDg0IGZtYSAgMSAgICAgOTk5OTk5IDEgIC0+IDEwMDAwMDAKK2RkZm1hMzA4NSBmbWEgIDEgICAgICA5OTk5OSAxICAtPiAxMDAwMDAKK2RkZm1hMzA4NiBmbWEgIDEgICAgICAgOTk5OSAxICAtPiAxMDAwMAorZGRmbWEzMDg3IGZtYSAgMSAgICAgICAgOTk5IDEgIC0+IDEwMDAKK2RkZm1hMzA4OCBmbWEgIDEgICAgICAgICA5OSAxICAtPiAxMDAKK2RkZm1hMzA4OSBmbWEgIDEgICAgICAgICAgOSAxICAtPiAxMAorCisKKy0tIG1vcmUgTEhTIHN3YXBzCitkZGZtYTMwOTAgZm1hICAxICAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKK2RkZm1hMzA5MSBmbWEgIDEgICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCitkZGZtYTMwOTIgZm1hICAxICAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCitkZGZtYTMwOTMgZm1hICAxICAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKK2RkZm1hMzA5NCBmbWEgIDEgICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JworZGRmbWEzMDk1IGZtYSAgMSAgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCitkZGZtYTMwOTYgZm1hICAxICAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKK2RkZm1hMzA5NyBmbWEgIDEgICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCitkZGZtYTMwOTggZm1hICAxICAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJworZGRmbWEzMDk5IGZtYSAgMSAgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03JworZGRmbWEzMTAwIGZtYSAgMSAgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKK2RkZm1hMzEwMSBmbWEgIDEgICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKK2RkZm1hMzEwMiBmbWEgIDEgICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1JworZGRmbWEzMTAzIGZtYSAgMSAgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCitkZGZtYTMxMDQgZm1hICAxICAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCitkZGZtYTMxMDUgZm1hICAxICAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJworZGRmbWEzMTA2IGZtYSAgMSAgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCitkZGZtYTMxMDcgZm1hICAxICAnLTVFMTUnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnCitkZGZtYTMxMDggZm1hICAxICAnLTVFMTYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgIFJvdW5kZWQKK2RkZm1hMzEwOSBmbWEgIDEgICctNUUxNycgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgUm91bmRlZAorZGRmbWEzMTEwIGZtYSAgMSAgJy01RTE4JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICBSb3VuZGVkCitkZGZtYTMxMTEgZm1hICAxICAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKKworLS0gbW9yZSBSSFMgc3dhcHMKK2RkZm1hMzExMyBmbWEgIDEgIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnCitkZGZtYTMxMTQgZm1hICAxICAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnCitkZGZtYTMxMTYgZm1hICAxICAwICAnLTU2MjY3RS01JyAgLT4gICctMC41NjI2NycKK2RkZm1hMzExNyBmbWEgIDEgIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnCitkZGZtYTMxMTkgZm1hICAxICAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3JworZGRmbWEzMTIwIGZtYSAgMSAgMCAgJy01NjI2N0UtMicgIC0+ICAnLTU2Mi42NycKK2RkZm1hMzEyMSBmbWEgIDEgIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnCitkZGZtYTMxMjIgZm1hICAxICAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnCitkZGZtYTMxMjMgZm1hICAxICAwICAnLTVFLTEwJyAgICAgLT4gICctNUUtMTAnCitkZGZtYTMxMjQgZm1hICAxICAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycKK2RkZm1hMzEyNSBmbWEgIDEgIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScKK2RkZm1hMzEyNiBmbWEgIDEgIDAgICctNUUtNScgICAgICAtPiAgJy0wLjAwMDA1JworZGRmbWEzMTI3IGZtYSAgMSAgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScKK2RkZm1hMzEyOCBmbWEgIDEgIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnCitkZGZtYTMxMjkgZm1hICAxICAwICAnLTVFMCcgICAgICAgLT4gICctNScKK2RkZm1hMzEzMCBmbWEgIDEgIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcKK2RkZm1hMzEzMSBmbWEgIDEgIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnCitkZGZtYTMxMzIgZm1hICAxICAwICAnLTVFMTUnICAgICAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcKK2RkZm1hMzEzMyBmbWEgIDEgIDAgICctNUUxNicgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICAgUm91bmRlZAorZGRmbWEzMTM0IGZtYSAgMSAgMCAgJy01RTE3JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgICBSb3VuZGVkCitkZGZtYTMxMzUgZm1hICAxICAwICAnLTVFMTgnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgIFJvdW5kZWQKK2RkZm1hMzEzNiBmbWEgIDEgIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZAorCistLSByZWxhdGVkCitkZGZtYTMxMzcgZm1hICAxICAgMSAgJzBFLTE5JyAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCitkZGZtYTMxMzggZm1hICAxICAtMSAgJzBFLTE5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkZGZtYTMxMzkgZm1hICAxICAnMEUtMTknIDEgICAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCitkZGZtYTMxNDAgZm1hICAxICAnMEUtMTknIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkZGZtYTMxNDEgZm1hICAxICAxRSsxMSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnCitkZGZtYTMxNDIgZm1hICAxICAxRSsxMSAgIDAuMDAwMDAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnICBSb3VuZGVkCitkZGZtYTMxNDMgZm1hICAxICAwLjAwMCAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnCitkZGZtYTMxNDQgZm1hICAxICAwLjAwMDAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkCisKKy0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdCitkZGZtYTMxNDYgZm1hICAxICAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnCitkZGZtYTMxNDcgZm1hICAxICAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJworZGRmbWEzMTQ4IGZtYSAgMSAgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcKK2RkZm1hMzE0OSBmbWEgIDEgICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcKK2RkZm1hMzE1MCBmbWEgIDEgICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnCitkZGZtYTMxNTEgZm1hICAxICAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJworZGRmbWEzMTUyIGZtYSAgMSAgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJworZGRmbWEzMTUzIGZtYSAgMSAgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJworZGRmbWEzMTU0IGZtYSAgMSAgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJworZGRmbWEzMTU1IGZtYSAgMSAgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcKK2RkZm1hMzE1NiBmbWEgIDEgICczJyAgICAgJzMnICAgICAtPiAgJzYnCitkZGZtYTMxNTcgZm1hICAxICAnMycgICAgICcrMycgICAgLT4gICc2JworZGRmbWEzMTU4IGZtYSAgMSAgJzMnICAgICAnLTMnICAgIC0+ICAnMCcKK2RkZm1hMzE1OSBmbWEgIDEgICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcKK2RkZm1hMzE2MCBmbWEgIDEgICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnCisKKy0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCitkZGZtYTMxNjEgZm1hICAxICAnMUUrMTInICctMScgICAgLT4gJzk5OTk5OTk5OTk5OScKK2RkZm1hMzE2MiBmbWEgIDEgICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKK2RkZm1hMzE2MyBmbWEgIDEgICcxLjExJyAgJzFFKzEyJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKK2RkZm1hMzE2NCBmbWEgIDEgICctMScgICAgJzFFKzEyJyAtPiAnOTk5OTk5OTk5OTk5JworZGRmbWEzMTY1IGZtYSAgMSAgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5JworZGRmbWEzMTY2IGZtYSAgMSAgJzdFKzEyJyAgJzEuMTEnIC0+ICc3MDAwMDAwMDAwMDAxLjExJworZGRmbWEzMTY3IGZtYSAgMSAgJzEuMTEnICAnN0UrMTInIC0+ICc3MDAwMDAwMDAwMDAxLjExJworZGRmbWEzMTY4IGZtYSAgMSAgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5JworCityb3VuZGluZzogaGFsZl91cAorLS0gICAgICAgICAgIDEuMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEgMjM0NTY3ODkwMTIzNDU2CitkZGZtYTMxNzAgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY3JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTcxIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NicgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzE3MiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjUnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxNzMgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY0JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTc0IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzE3NSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxNzYgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTc3IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBSb3VuZGVkCitkZGZtYTMxNzggZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQ1JyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTc5IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0NCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzE4MCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMxODEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMTgyIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzE4MyBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgUm91bmRlZAorCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZGRmbWEzMjAwIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknCitkZGZtYTMyMDEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDMgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDQgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDUgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDYgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDcgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDggZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMDkgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMTAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMTEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMTIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMTMgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMTQgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMTUgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMTYgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcKK2RkZm1hMzIxNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxOCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIxOSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZGRmbWEzMjIwIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknCitkZGZtYTMyMjEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjMgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjQgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjUgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjYgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjcgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjggZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMjkgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMzAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMzEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMzIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMzMgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMzQgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMzUgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyMzYgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcKK2RkZm1hMzIzNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzOCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzIzOSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitkZGZtYTMyNDAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyNDEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMyNDIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkZGZtYTMyNTAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScKK2RkZm1hMzI1MSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1MiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1MyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1NCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1NSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1NiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1NyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1OCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI1OSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI2MCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI2MSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI2MiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI2MyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI2NCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI2NSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzI2NiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJworZGRmbWEzMjY3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjY4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzMjY5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMKK3JvdW5kaW5nOiBoYWxmX3VwCitkZGZtYTMzMDEgZm1hICAxICAgLTEgICAxICAgICAgLT4gICAwCitkZGZtYTMzMDIgZm1hICAxICAgIDAgICAxICAgICAgLT4gICAxCitkZGZtYTMzMDMgZm1hICAxICAgIDEgICAxICAgICAgLT4gICAyCitkZGZtYTMzMDQgZm1hICAxICAgMTIgICAxICAgICAgLT4gIDEzCitkZGZtYTMzMDUgZm1hICAxICAgOTggICAxICAgICAgLT4gIDk5CitkZGZtYTMzMDYgZm1hICAxICAgOTkgICAxICAgICAgLT4gMTAwCitkZGZtYTMzMDcgZm1hICAxICAxMDAgICAxICAgICAgLT4gMTAxCitkZGZtYTMzMDggZm1hICAxICAxMDEgICAxICAgICAgLT4gMTAyCitkZGZtYTMzMDkgZm1hICAxICAgLTEgIC0xICAgICAgLT4gIC0yCitkZGZtYTMzMTAgZm1hICAxICAgIDAgIC0xICAgICAgLT4gIC0xCitkZGZtYTMzMTEgZm1hICAxICAgIDEgIC0xICAgICAgLT4gICAwCitkZGZtYTMzMTIgZm1hICAxICAgMTIgIC0xICAgICAgLT4gIDExCitkZGZtYTMzMTMgZm1hICAxICAgOTggIC0xICAgICAgLT4gIDk3CitkZGZtYTMzMTQgZm1hICAxICAgOTkgIC0xICAgICAgLT4gIDk4CitkZGZtYTMzMTUgZm1hICAxICAxMDAgIC0xICAgICAgLT4gIDk5CitkZGZtYTMzMTYgZm1hICAxICAxMDEgIC0xICAgICAgLT4gMTAwCisKK2RkZm1hMzMyMSBmbWEgIDEgIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwCitkZGZtYTMzMjIgZm1hICAxICAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQorZGRmbWEzMzIzIGZtYSAgMSAgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDIKK2RkZm1hMzMyNCBmbWEgIDEgICAwLjEyICAwLjAxICAgIC0+ICAwLjEzCitkZGZtYTMzMjUgZm1hICAxICAgMC45OCAgMC4wMSAgICAtPiAgMC45OQorZGRmbWEzMzI2IGZtYSAgMSAgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDAKK2RkZm1hMzMyNyBmbWEgIDEgICAxLjAwICAwLjAxICAgIC0+ICAxLjAxCitkZGZtYTMzMjggZm1hICAxICAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMgorZGRmbWEzMzI5IGZtYSAgMSAgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDIKK2RkZm1hMzMzMCBmbWEgIDEgICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxCitkZGZtYTMzMzEgZm1hICAxICAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMAorZGRmbWEzMzMyIGZtYSAgMSAgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTEKK2RkZm1hMzMzMyBmbWEgIDEgICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3CitkZGZtYTMzMzQgZm1hICAxICAgMC45OSAtMC4wMSAgICAtPiAgMC45OAorZGRmbWEzMzM1IGZtYSAgMSAgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkKK2RkZm1hMzMzNiBmbWEgIDEgICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwCisKKy0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBhZGRpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudAorZGRmbWEzMzQwIGZtYSAgMSAgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMAorZGRmbWEzMzQxIGZtYSAgMSAgMUUrMTUgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAKK2RkZm1hMzM0MiBmbWEgIDEgIDFFKzE2ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgUm91bmRlZAorZGRmbWEzMzQzIGZtYSAgMSAgMUUrMjAgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBSb3VuZGVkCistLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uCitkZGZtYTMzNDQgZm1hICAxICAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxCitkZGZtYTMzNDUgZm1hICAxICAxRSsxNSAgIDEgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMQorZGRmbWEzMzQ2IGZtYSAgMSAgMUUrMTYgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzM0NyBmbWEgIDEgIDFFKzIwICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsyMCAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTMzNDggZm1hICAxICAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3CitkZGZtYTMzNDkgZm1hICAxICAxRSsxNSAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwNworZGRmbWEzMzUwIGZtYSAgMSAgMUUrMTYgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDFFKzE2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzM1MSBmbWEgIDEgIDFFKzIwICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsyMCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRyeXplcm9zIGNhc2VzCityb3VuZGluZzogICAgaGFsZl91cAorZGRmbWEzMzYwICBmbWEgIDEgIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUKK2RkZm1hMzM2MSAgZm1hICAxICAwRS01MCAxMDAwMEUrMSAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgUm91bmRlZAorZGRmbWEzMzYyICBmbWEgIDEgIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCBSb3VuZGVkCitkZGZtYTMzNjMgIGZtYSAgMSAgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzM2NCAgZm1hICAxICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDBFKzM2OQorCistLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nCityb3VuZGluZzogICAgaGFsZl9kb3duCitkZGZtYTMzNzAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0CitkZGZtYTMzNzEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl91cAorZGRmbWEzMzcyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDgxNAorZGRmbWEzMzczIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwODFFKzE2IFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorZGRmbWEzMzc0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDgxNAorZGRmbWEzMzc1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwODFFKzE2IFJvdW5kZWQgSW5leGFjdAorCistLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMKK2RkZm1hMzQwMCBmbWEgIDEgICAgMSAgIDc3ZS0xNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3CitkZGZtYTM0MDEgZm1hICAxICAgIDEgICA3N2UtMTUgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcKK2RkZm1hMzQwMiBmbWEgIDEgICAgMSAgIDc3ZS0xNiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQwMyBmbWEgIDEgICAgMSAgIDc3ZS0xNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQwNCBmbWEgIDEgICAgMSAgIDc3ZS0xOCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQwNSBmbWEgIDEgICAgMSAgIDc3ZS0xOSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQwNiBmbWEgIDEgICAgMSAgIDc3ZS0yOTkgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNDEwIGZtYSAgMSAgIDEwICAgNzdlLTE0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3CitkZGZtYTM0MTEgZm1hICAxICAgMTAgICA3N2UtMTUgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MTIgZm1hICAxICAgMTAgICA3N2UtMTYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MTMgZm1hICAxICAgMTAgICA3N2UtMTcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MTQgZm1hICAxICAgMTAgICA3N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MTUgZm1hICAxICAgMTAgICA3N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MTYgZm1hICAxICAgMTAgICA3N2UtMjk5ICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMzQyMCBmbWEgIDEgICA3N2UtMTQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3CitkZGZtYTM0MjEgZm1hICAxICAgNzdlLTE1ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcKK2RkZm1hMzQyMiBmbWEgIDEgICA3N2UtMTYgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQyMyBmbWEgIDEgICA3N2UtMTcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQyNCBmbWEgIDEgICA3N2UtMTggICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQyNSBmbWEgIDEgICA3N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzQyNiBmbWEgIDEgICA3N2UtMjk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNDMwIGZtYSAgMSAgIDc3ZS0xNCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3CitkZGZtYTM0MzEgZm1hICAxICAgNzdlLTE1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MzIgZm1hICAxICAgNzdlLTE2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MzMgZm1hICAxICAgNzdlLTE3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MzQgZm1hICAxICAgNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MzUgZm1hICAxICAgNzdlLTE5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM0MzYgZm1hICAxICAgNzdlLTI5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2RkZm1hMzY0NDAgZm1hICAxICAgIDEgICAtNzdlLTE0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0NDEgZm1hICAxICAgIDEgICAtNzdlLTE1ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDQyIGZtYSAgMSAgICAxICAgLTc3ZS0xNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0NDMgZm1hICAxICAgIDEgICAtNzdlLTE3ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NDQgZm1hICAxICAgIDEgICAtNzdlLTE4ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NDUgZm1hICAxICAgIDEgICAtNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ0NiBmbWEgIDEgICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMzY0NTAgZm1hICAxICAgMTAgICAtNzdlLTE0ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDUxIGZtYSAgMSAgIDEwICAgLTc3ZS0xNSAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0NTIgZm1hICAxICAgMTAgICAtNzdlLTE2ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NTMgZm1hICAxICAgMTAgICAtNzdlLTE3ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NTQgZm1hICAxICAgMTAgICAtNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ1NSBmbWEgIDEgICAxMCAgIC03N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDU2IGZtYSAgMSAgIDEwICAgLTc3ZS05OSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNjQ2MCBmbWEgIDEgICAtNzdlLTE0ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ2MSBmbWEgIDEgICAtNzdlLTE1ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0NjIgZm1hICAxICAgLTc3ZS0xNiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ2MyBmbWEgIDEgICAtNzdlLTE3ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ2NCBmbWEgIDEgICAtNzdlLTE4ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ2NSBmbWEgIDEgICAtNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDY2IGZtYSAgMSAgIC03N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNjQ3MCBmbWEgIDEgICAtNzdlLTE0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY0NzEgZm1hICAxICAgLTc3ZS0xNSAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ3MiBmbWEgIDEgICAtNzdlLTE2ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ3MyBmbWEgIDEgICAtNzdlLTE3ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ3NCBmbWEgIDEgICAtNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NDc1IGZtYSAgMSAgIC03N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0NzYgZm1hICAxICAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSB1bHBzCitkZGZtYTM2NDgwIGZtYSAgMSAgIC0xICAgIDc3ZS0xNCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMworZGRmbWEzNjQ4MSBmbWEgIDEgICAtMSAgICA3N2UtMTUgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDgyIGZtYSAgMSAgIC0xICAgIDc3ZS0xNiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDgzIGZtYSAgMSAgIC0xICAgIDc3ZS0xNyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ4NCBmbWEgIDEgICAtMSAgICA3N2UtMTggICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0ODUgZm1hICAxICAgLTEgICAgNzdlLTE5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0ODYgZm1hICAxICAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNjQ5MCBmbWEgIDEgIC0xMCAgICA3N2UtMTQgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDkxIGZtYSAgMSAgLTEwICAgIDc3ZS0xNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzCitkZGZtYTM2NDkyIGZtYSAgMSAgLTEwICAgIDc3ZS0xNiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjQ5MyBmbWEgIDEgIC0xMCAgICA3N2UtMTcgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0OTQgZm1hICAxICAtMTAgICAgNzdlLTE4ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0OTUgZm1hICAxICAtMTAgICAgNzdlLTE5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY0OTYgZm1hICAxICAtMTAgICAgNzdlLTk5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNjUwMCBmbWEgIDEgICAgNzdlLTE0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5MjMKK2RkZm1hMzY1MDEgZm1hICAxICAgIDc3ZS0xNSAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjUwMiBmbWEgIDEgICAgNzdlLTE2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjUwMyBmbWEgIDEgICAgNzdlLTE3ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MDQgZm1hICAxICAgIDc3ZS0xOCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTA1IGZtYSAgMSAgICA3N2UtMTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTA2IGZtYSAgMSAgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMzY1MTAgZm1hICAxICAgIDc3ZS0xNCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTkyMworZGRmbWEzNjUxMSBmbWEgIDEgICAgNzdlLTE1ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTkyMworZGRmbWEzNjUxMiBmbWEgIDEgICAgNzdlLTE2ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MTMgZm1hICAxICAgIDc3ZS0xNyAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTE0IGZtYSAgMSAgICA3N2UtMTggICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTE1IGZtYSAgMSAgICA3N2UtMTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTE2IGZtYSAgMSAgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGFuZCBhIGNvdXBsZSBtb3JlIHdpdGggbG9uZ2VyIFJIUworZGRmbWEzNjUyMCBmbWEgIDEgICAgMSAgIC03Nzc3ZS0xNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTIyMjMKK2RkZm1hMzY1MjEgZm1hICAxICAgIDEgICAtNzc3N2UtMTcgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5MjIyIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjUyMiBmbWEgIDEgICAgMSAgIC03Nzc3ZS0xOCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5MjIgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTIzIGZtYSAgMSAgICAxICAgLTc3NzdlLTE5ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MjQgZm1hICAxICAgIDEgICAtNzc3N2UtMjAgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjUyNSBmbWEgIDEgICAgMSAgIC03Nzc3ZS0yMSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1MjYgZm1hICAxICAgIDEgICAtNzc3N2UtMjIgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKworLS0gYW5kIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitkZGZtYTM2NTQwIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknCitkZGZtYTM2NTQxIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU0MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NDMgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTQ0IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU0NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NDYgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTQ3IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU0OCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NDkgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTUwIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU1MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NTIgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTUzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU1NCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NTUgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTU2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnCitkZGZtYTM2NTU3IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU1OCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NTkgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RkZm1hMzY1NjAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2RkZm1hMzY1NjEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTYyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU2MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NjQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTY1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU2NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NjcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTY4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU2OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NzAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTcxIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU3MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NzMgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTc0IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU3NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzY1NzYgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2RkZm1hMzY1NzcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM2NTc4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNjU3OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2RkZm1hMzc1NDAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTQxIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU0MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RkZm1hMzc1NTAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2RkZm1hMzc1NTEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTUyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU1MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NTQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTU1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU1NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NTcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTU4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU1OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NjAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTYxIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU2MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NjMgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTY0IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU2NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1NjYgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2RkZm1hMzc1NjcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTY4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzU2OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworCistLSB2ZXJpZnkgYSBxdWVyeQorcm91bmRpbmc6ICAgICBkb3duCitkZGZtYTM3NjYxIGZtYSAgMSAgMWUtMzk4IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc2NjIgZm1hICAxICAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQKK2RkZm1hMzc2NjMgZm1hICAxICAxZS0zODggOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzY2NCBmbWEgIDEgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgUm91bmRlZAorCistLSBtb3JlIHplcm9zLCBldGMuCityb3VuZGluZzogaGFsZl9ldmVuCisKK2RkZm1hMzc3MDEgZm1hICAxICA1LjAwIDEuMDBFLTMgLT4gNS4wMDEwMAorZGRmbWEzNzcwMiBmbWEgIDEgIDAwLjAwIDAuMDAwICAtPiAwLjAwMAorZGRmbWEzNzcwMyBmbWEgIDEgIDAwLjAwIDBFLTMgICAtPiAwLjAwMAorZGRmbWEzNzcwNCBmbWEgIDEgIDBFLTMgIDAwLjAwICAtPiAwLjAwMAorCitkZGZtYTM3NzEwIGZtYSAgMSAgMEUrMyAgMDAuMDAgIC0+IDAuMDAKK2RkZm1hMzc3MTEgZm1hICAxICAwRSszICAwMC4wICAgLT4gMC4wCitkZGZtYTM3NzEyIGZtYSAgMSAgMEUrMyAgMDAuICAgIC0+IDAKK2RkZm1hMzc3MTMgZm1hICAxICAwRSszICAwMC5FKzEgLT4gMEUrMQorZGRmbWEzNzcxNCBmbWEgIDEgIDBFKzMgIDAwLkUrMiAtPiAwRSsyCitkZGZtYTM3NzE1IGZtYSAgMSAgMEUrMyAgMDAuRSszIC0+IDBFKzMKK2RkZm1hMzc3MTYgZm1hICAxICAwRSszICAwMC5FKzQgLT4gMEUrMworZGRmbWEzNzcxNyBmbWEgIDEgIDBFKzMgIDAwLkUrNSAtPiAwRSszCitkZGZtYTM3NzE4IGZtYSAgMSAgMEUrMyAgLTAwLjAgICAtPiAwLjAKK2RkZm1hMzc3MTkgZm1hICAxICAwRSszICAtMDAuICAgIC0+IDAKK2RkZm1hMzc3MzEgZm1hICAxICAwRSszICAtMDAuRSsxIC0+IDBFKzEKKworZGRmbWEzNzcyMCBmbWEgIDEgIDAwLjAwICAwRSszICAtPiAwLjAwCitkZGZtYTM3NzIxIGZtYSAgMSAgMDAuMCAgIDBFKzMgIC0+IDAuMAorZGRmbWEzNzcyMiBmbWEgIDEgIDAwLiAgICAwRSszICAtPiAwCitkZGZtYTM3NzIzIGZtYSAgMSAgMDAuRSsxIDBFKzMgIC0+IDBFKzEKK2RkZm1hMzc3MjQgZm1hICAxICAwMC5FKzIgMEUrMyAgLT4gMEUrMgorZGRmbWEzNzcyNSBmbWEgIDEgIDAwLkUrMyAwRSszICAtPiAwRSszCitkZGZtYTM3NzI2IGZtYSAgMSAgMDAuRSs0IDBFKzMgIC0+IDBFKzMKK2RkZm1hMzc3MjcgZm1hICAxICAwMC5FKzUgMEUrMyAgLT4gMEUrMworZGRmbWEzNzcyOCBmbWEgIDEgIC0wMC4wMCAwRSszICAtPiAwLjAwCitkZGZtYTM3NzI5IGZtYSAgMSAgLTAwLjAgIDBFKzMgIC0+IDAuMAorZGRmbWEzNzczMCBmbWEgIDEgIC0wMC4gICAwRSszICAtPiAwCisKK2RkZm1hMzc3MzIgZm1hICAxICAgMCAgICAgMCAgICAgLT4gIDAKK2RkZm1hMzc3MzMgZm1hICAxICAgMCAgICAtMCAgICAgLT4gIDAKK2RkZm1hMzc3MzQgZm1hICAxICAtMCAgICAgMCAgICAgLT4gIDAKK2RkZm1hMzc3MzUgZm1hICAxICAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQorCitkZGZtYTM3NzM2IGZtYSAgMSAgIDEgICAgLTEgICAgIC0+ICAwCitkZGZtYTM3NzM3IGZtYSAgMSAgLTEgICAgLTEgICAgIC0+IC0yCitkZGZtYTM3NzM4IGZtYSAgMSAgIDEgICAgIDEgICAgIC0+ICAyCitkZGZtYTM3NzM5IGZtYSAgMSAgLTEgICAgIDEgICAgIC0+ICAwCisKK2RkZm1hMzc3NDEgZm1hICAxICAgMCAgICAtMSAgICAgLT4gLTEKK2RkZm1hMzc3NDIgZm1hICAxICAtMCAgICAtMSAgICAgLT4gLTEKK2RkZm1hMzc3NDMgZm1hICAxICAgMCAgICAgMSAgICAgLT4gIDEKK2RkZm1hMzc3NDQgZm1hICAxICAtMCAgICAgMSAgICAgLT4gIDEKK2RkZm1hMzc3NDUgZm1hICAxICAtMSAgICAgMCAgICAgLT4gLTEKK2RkZm1hMzc3NDYgZm1hICAxICAtMSAgICAtMCAgICAgLT4gLTEKK2RkZm1hMzc3NDcgZm1hICAxICAgMSAgICAgMCAgICAgLT4gIDEKK2RkZm1hMzc3NDggZm1hICAxICAgMSAgICAtMCAgICAgLT4gIDEKKworZGRmbWEzNzc1MSBmbWEgIDEgICAwLjAgIC0xICAgICAtPiAtMS4wCitkZGZtYTM3NzUyIGZtYSAgMSAgLTAuMCAgLTEgICAgIC0+IC0xLjAKK2RkZm1hMzc3NTMgZm1hICAxICAgMC4wICAgMSAgICAgLT4gIDEuMAorZGRmbWEzNzc1NCBmbWEgIDEgIC0wLjAgICAxICAgICAtPiAgMS4wCitkZGZtYTM3NzU1IGZtYSAgMSAgLTEuMCAgIDAgICAgIC0+IC0xLjAKK2RkZm1hMzc3NTYgZm1hICAxICAtMS4wICAtMCAgICAgLT4gLTEuMAorZGRmbWEzNzc1NyBmbWEgIDEgICAxLjAgICAwICAgICAtPiAgMS4wCitkZGZtYTM3NzU4IGZtYSAgMSAgIDEuMCAgLTAgICAgIC0+ICAxLjAKKworZGRmbWEzNzc2MSBmbWEgIDEgICAwICAgIC0xLjAgICAtPiAtMS4wCitkZGZtYTM3NzYyIGZtYSAgMSAgLTAgICAgLTEuMCAgIC0+IC0xLjAKK2RkZm1hMzc3NjMgZm1hICAxICAgMCAgICAgMS4wICAgLT4gIDEuMAorZGRmbWEzNzc2NCBmbWEgIDEgIC0wICAgICAxLjAgICAtPiAgMS4wCitkZGZtYTM3NzY1IGZtYSAgMSAgLTEgICAgIDAuMCAgIC0+IC0xLjAKK2RkZm1hMzc3NjYgZm1hICAxICAtMSAgICAtMC4wICAgLT4gLTEuMAorZGRmbWEzNzc2NyBmbWEgIDEgICAxICAgICAwLjAgICAtPiAgMS4wCitkZGZtYTM3NzY4IGZtYSAgMSAgIDEgICAgLTAuMCAgIC0+ICAxLjAKKworZGRmbWEzNzc3MSBmbWEgIDEgICAwLjAgIC0xLjAgICAtPiAtMS4wCitkZGZtYTM3NzcyIGZtYSAgMSAgLTAuMCAgLTEuMCAgIC0+IC0xLjAKK2RkZm1hMzc3NzMgZm1hICAxICAgMC4wICAgMS4wICAgLT4gIDEuMAorZGRmbWEzNzc3NCBmbWEgIDEgIC0wLjAgICAxLjAgICAtPiAgMS4wCitkZGZtYTM3Nzc1IGZtYSAgMSAgLTEuMCAgIDAuMCAgIC0+IC0xLjAKK2RkZm1hMzc3NzYgZm1hICAxICAtMS4wICAtMC4wICAgLT4gLTEuMAorZGRmbWEzNzc3NyBmbWEgIDEgICAxLjAgICAwLjAgICAtPiAgMS4wCitkZGZtYTM3Nzc4IGZtYSAgMSAgIDEuMCAgLTAuMCAgIC0+ICAxLjAKKworLS0gU3BlY2lhbHMKK2RkZm1hMzc3ODAgZm1hICAxICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZGZtYTM3NzgxIGZtYSAgMSAgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc4MiBmbWEgIDEgIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3ODMgZm1hICAxICAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkZGZtYTM3Nzg0IGZtYSAgMSAgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc4NSBmbWEgIDEgIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3ODYgZm1hICAxICAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkZGZtYTM3Nzg3IGZtYSAgMSAgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc4OCBmbWEgIDEgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3ODkgZm1hICAxICAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZGZtYTM3NzkwIGZtYSAgMSAgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc5MSBmbWEgIDEgICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkZm1hMzc3OTIgZm1hICAxICAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZGZtYTM3NzkzIGZtYSAgMSAgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRmbWEzNzc5NCBmbWEgIDEgICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitkZGZtYTM3ODAwIGZtYSAgMSAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODAxIGZtYSAgMSAgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgwMiBmbWEgIDEgICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MDMgZm1hICAxICAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkZGZtYTM3ODA0IGZtYSAgMSAgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgwNSBmbWEgIDEgICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MDYgZm1hICAxICAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkZGZtYTM3ODA3IGZtYSAgMSAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgwOCBmbWEgIDEgIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MDkgZm1hICAxICAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4MTAgZm1hICAxICAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZGZtYTM3ODExIGZtYSAgMSAgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgxMiBmbWEgIDEgICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkZm1hMzc4MTMgZm1hICAxICAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZGZtYTM3ODE0IGZtYSAgMSAgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRmbWEzNzgxNSBmbWEgIDEgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRmbWEzNzgyMSBmbWEgIDEgICBOYU4gLUluZiAgICAtPiAgTmFOCitkZGZtYTM3ODIyIGZtYSAgMSAgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RkZm1hMzc4MjMgZm1hICAxICAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRmbWEzNzgyNCBmbWEgIDEgICBOYU4gLTAgICAgICAtPiAgTmFOCitkZGZtYTM3ODI1IGZtYSAgMSAgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RkZm1hMzc4MjYgZm1hICAxICAgTmFOICAxICAgICAgLT4gIE5hTgorZGRmbWEzNzgyNyBmbWEgIDEgICBOYU4gIDEwMDAgICAtPiAgTmFOCitkZGZtYTM3ODI4IGZtYSAgMSAgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RkZm1hMzc4MjkgZm1hICAxICAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRmbWEzNzgzMCBmbWEgIDEgIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkZGZtYTM3ODMxIGZtYSAgMSAgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RkZm1hMzc4MzIgZm1hICAxICAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRmbWEzNzgzMyBmbWEgIDEgIC0wICAgIE5hTiAgICAtPiAgTmFOCitkZGZtYTM3ODM0IGZtYSAgMSAgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RkZm1hMzc4MzUgZm1hICAxICAgMSAgICBOYU4gICAgLT4gIE5hTgorZGRmbWEzNzgzNiBmbWEgIDEgICAxMDAwIE5hTiAgICAtPiAgTmFOCitkZGZtYTM3ODM3IGZtYSAgMSAgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRmbWEzNzg0MSBmbWEgIDEgICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0MiBmbWEgIDEgICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0MyBmbWEgIDEgICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0NCBmbWEgIDEgICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0NSBmbWEgIDEgICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0NiBmbWEgIDEgICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0NyBmbWEgIDEgICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0OCBmbWEgIDEgICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg0OSBmbWEgIDEgICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1MCBmbWEgIDEgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1MSBmbWEgIDEgIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1MiBmbWEgIDEgIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1MyBmbWEgIDEgIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1NCBmbWEgIDEgIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1NSBmbWEgIDEgICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1NiBmbWEgIDEgICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1NyBmbWEgIDEgICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1OCBmbWEgIDEgICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg1OSBmbWEgIDEgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZGZtYTM3ODYxIGZtYSAgMSAgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitkZGZtYTM3ODYyIGZtYSAgMSAgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitkZGZtYTM3ODYzIGZtYSAgMSAgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitkZGZtYTM3ODY0IGZtYSAgMSAgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitkZGZtYTM3ODY1IGZtYSAgMSAgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitkZGZtYTM3ODY2IGZtYSAgMSAgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitkZGZtYTM3ODY3IGZtYSAgMSAgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitkZGZtYTM3ODY4IGZtYSAgMSAgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitkZGZtYTM3ODY5IGZtYSAgMSAgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZGRmbWEzNzg3MSBmbWEgIDEgICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODcyIGZtYSAgMSAgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4NzMgZm1hICAxICAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg3NCBmbWEgIDEgICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODc1IGZtYSAgMSAgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4NzYgZm1hICAxICAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg3NyBmbWEgIDEgIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODc4IGZtYSAgMSAgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4NzkgZm1hICAxICAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZGRmbWEzNzg4MCBmbWEgIDEgICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM3ODgxIGZtYSAgMSAgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4ODIgZm1hICAxICAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitkZGZtYTM3ODgzIGZtYSAgMSAgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2RkZm1hMzc4ODQgZm1hICAxICAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitkZGZtYTM3ODg1IGZtYSAgMSAgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gSGVyZSB3ZSBleHBsb3JlIG5lYXIgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4KK2RkZm1hMzc1NzUgZm1hICAxICAgMUUtMzgzIC0xRS0zOTggLT4gIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCitkZGZtYTM3NTc2IGZtYSAgMSAgLTFFLTM4MyArMUUtMzk4IC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbAorCistLSBjaGVjayBvdmVyZmxvdyBlZGdlIGNhc2UKKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRmbWEzNzk3MiBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGZtYTM3OTczIGZtYSAgMSAgICAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk3NCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5NzUgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5NzYgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5NzcgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOEUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5NzggZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgN0UrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5NzkgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNkUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5ODAgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNUUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5ODEgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNEUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk4MiBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAzRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTgzIGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDJFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5ODQgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorCitkZGZtYTM3OTg1IGFwcGx5ICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZGZtYTM3OTg2IGZtYSAgMSAgICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5ODcgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk4OCBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5ODkgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTkwIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLThFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk5MSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC03RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc5OTIgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNkUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3OTkzIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTVFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk5NCBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC00RSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk5NSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0zRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk5NiBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0yRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzk5NyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorCistLSBBbmQgZm9yIHJvdW5kIGRvd24gZnVsbCBhbmQgc3Vibm9ybWFsIHJlc3VsdHMKK3JvdW5kaW5nOiAgICAgZG93bgorZGRmbWEzNzExMDAgZm1hICAxICAxZSsyIC0xZS0zODMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwMSBmbWEgIDEgIDFlKzEgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwMyBmbWEgIDEgICAgKzEgLTFlLTM4MyAgICAtPiAwLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMDQgZm1hICAxICAxZS0xIC0xZS0zODMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwNSBmbWEgIDEgIDFlLTIgLTFlLTM4MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwNiBmbWEgIDEgIDFlLTMgLTFlLTM4MyAgICAtPiAwLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMDcgZm1hICAxICAxZS00IC0xZS0zODMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwOCBmbWEgIDEgIDFlLTUgLTFlLTM4MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkZGZtYTM3MTEwOSBmbWEgIDEgIDFlLTYgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CisKK3JvdW5kaW5nOiAgICAgY2VpbGluZworZGRmbWEzNzExMTAgZm1hICAxICAtMWUrMiArMWUtMzgzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTEgZm1hICAxICAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTEzIGZtYSAgMSAgICAgLTEgKzFlLTM4MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTQgZm1hICAxICAtMWUtMSArMWUtMzgzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTUgZm1hICAxICAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTE2IGZtYSAgMSAgLTFlLTMgKzFlLTM4MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTcgZm1hICAxICAtMWUtNCArMWUtMzgzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZGRmbWEzNzExMTggZm1hICAxICAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RkZm1hMzcxMTE5IGZtYSAgMSAgLTFlLTYgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CisKKy0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlCityb3VuZGluZzogICAgIGhhbGZfZXZlbgorCitkZGZtYTM3MTMwMCBmbWEgIDEgIDFFMTYgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxMCBmbWEgIDEgIDFFMTYgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxMSBmbWEgIDEgIDFFMTYgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxMiBmbWEgIDEgIDFFMTYgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxMyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxNCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxNSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxNiBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxNyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxOCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMxOSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyMCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyMSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyMiBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyMyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyNCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyNSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyNiBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyNyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyOCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMyOSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzMCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzMSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzMiBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzMyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzNCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzNSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzNiBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzNyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzOCBmbWEgIDEgIDFFMTYgIC0wLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTMzOSBmbWEgIDEgIDFFMTYgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCisKK2RkZm1hMzcxMzQwIGZtYSAgMSAgMUUxNiAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzQxIGZtYSAgMSAgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRmbWEzNzEzNDkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNCAgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzUwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM1MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNTIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzUzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM1NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNTUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzU2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM1NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNTggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzU5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM2MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNjEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzYyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM2MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNjQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzY1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM2NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNjggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzY5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM3MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNzEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzcyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM3MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNzQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzc1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM3NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzNzcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzc4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM3OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzODAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzgxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM4MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzODMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzg0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM4NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzODYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzg3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM4OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzODkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAxICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzkwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM5MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzOTIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAxICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzkzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3MTM5NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzEzOTUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAxICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzcxMzk2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCisKKy0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkCistLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwCitkZGZtYTM3MTQyMCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0MjEgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQyMiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQyMyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0MjQgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQyNSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQyNiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0MjcgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKK2RkZm1hMzcxNDI4IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04CitkZGZtYTM3MTQyOSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQorZGRmbWEzNzE0MzAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCitkZGZtYTM3MTQzMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEKK2RkZm1hMzcxNDMyIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZGRmbWEzNzE0MzMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCitkZGZtYTM3MTQzNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQKK2RkZm1hMzcxNDM1IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZGRmbWEzNzE0MzYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2CitkZGZtYTM3MTQzNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcKK2RkZm1hMzcxNDM4IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZGRmbWEzNzE0MzkgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIHJldmVyc2VkIDAKK2RkZm1hMzcxNDQwIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDQxIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ0MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDQzIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDQ0IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ0NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDQ2IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDQ3IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKK2RkZm1hMzcxNDQ4IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2RkZm1hMzcxNDQ5IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKK2RkZm1hMzcxNDUwIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCitkZGZtYTM3MTQ1MSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZGRmbWEzNzE0NTIgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKK2RkZm1hMzcxNDUzIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCitkZGZtYTM3MTQ1NCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZGRmbWEzNzE0NTUgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKK2RkZm1hMzcxNDU2IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2CitkZGZtYTM3MTQ1NyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworZGRmbWEzNzE0NTggZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKK2RkZm1hMzcxNDU5IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIEVzIG9uIHRoZSAwCitkZGZtYTM3MTQ2MCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDYxIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NjIgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ2MyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDY0IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NjUgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ2NiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDY3IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NjggZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ2OSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDcwIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NzEgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ3MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2RkZm1hMzcxNDczIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZGRmbWEzNzE0NzQgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitkZGZtYTM3MTQ3NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKKy0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQKK2RkZm1hMzcxNDc2IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkZGZtYTM3MTQ3NyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZGRmbWEzNzE0NzggZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RkZm1hMzcxNDc5IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCisKKy0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wCityb3VuZGluZzogICAgaGFsZl91cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRmbWEzNzE1MDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1MDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1MDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1MDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkZm1hMzcxNTExIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RkZm1hMzcxNTEyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRmbWEzNzE1MjAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1MjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1MjIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1MjMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkZm1hMzcxNTMxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RkZm1hMzcxNTMyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRmbWEzNzE1NDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1NDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1NDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1NDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkZm1hMzcxNTUxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RkZm1hMzcxNTUyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIHVwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGZtYTM3MTU2MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU2MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU2MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTU2MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRmbWEzNzE1NzEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAorZGRmbWEzNzE1NzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZGRmbWEzNzE1ODAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1ODEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1ODIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZGRmbWEzNzE1ODMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RkZm1hMzcxNTkxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RkZm1hMzcxNTkyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RkZm1hMzcxNjAwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkZm1hMzcxNjAxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RkZm1hMzcxNjAyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RkZm1hMzcxNjAzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkZGZtYTM3MTYxMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkZGZtYTM3MTYxMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCisKKy0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKgorcm91bmRpbmc6ICAgIGZsb29yCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkZGZtYTM3MTYyMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkZGZtYTM3MTYyMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCitkZGZtYTM3MTYyMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCitkZGZtYTM3MTYyMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZGRmbWEzNzE2MzEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKgorZGRmbWEzNzE2MzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKgorCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK2RkZm1hMzcxNzAxIGZtYSAgMSAgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwCitkZGZtYTM3MTcwMiBmbWEgIDEgIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MAorZGRmbWEzNzE3MDMgZm1hICAxICAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzAKK2RkZm1hMzcxNzA0IGZtYSAgMSAgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0CitkZGZtYTM3MTcwNSBmbWEgIDEgIDEzMEUtMiAgIC0xMjBFLTIgLT4gMC4xMAorZGRmbWEzNzE3MDYgZm1hICAxICAxMzBFLTIgICAtMTJFLTEgIC0+IDAuMTAKK2RkZm1hMzcxNzA3IGZtYSAgMSAgMTMwRS0yICAgLTFFMCAgICAtPiAwLjMwCitkZGZtYTM3MTcwOCBmbWEgIDEgIDFFMiAgICAgIC0xRTQgICAgLT4gLTkuOUUrMworCistLSBHYXBweSBjb2VmZmljaWVudHM7IGNoZWNrIHJlc2lkdWUgaGFuZGxpbmcgZXZlbiB3aXRoIGZ1bGwgY29lZmZpY2llbnQgZ2FwCityb3VuZGluZzogaGFsZl9ldmVuCisKK2RkZm1hMzc1MDAxIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiAxICAgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NworZGRmbWEzNzUwMDIgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDAuNiAgICAtPiAxMjM0NTY3ODkwMTIzNDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDAzIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiAwLjA2ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAwNCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMDUgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTQgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDA2IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS01ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAwNyBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMDggZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTcgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDA5IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS04ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAxMCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMTEgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTEwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDEyIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAxMyBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTIgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMTQgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTEzICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDE1IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAxNiBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTUgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMTcgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDE4IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTAxOSBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTggIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwMjAgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE5ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDIxIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0yMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHdpZGVuaW5nIHNlY29uZCBhcmd1bWVudCBhdCBnYXAKK2RkZm1hMzc1MDMwIGZtYSAgMSAgMTIzNDU2NzggMSAgICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzkKK2RkZm1hMzc1MDMxIGZtYSAgMSAgMTIzNDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMQorZGRmbWEzNzUwMzIgZm1hICAxICAxMjM0NTY3OCAwLjEyICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMgorZGRmbWEzNzUwMzMgZm1hICAxICAxMjM0NTY3OCAwLjEyMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjMKK2RkZm1hMzc1MDM0IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNAorZGRmbWEzNzUwMzUgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1ICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NQorZGRmbWEzNzUwMzYgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1NiAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTYKK2RkZm1hMzc1MDM3IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NworZGRmbWEzNzUwMzggZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4ICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OAorZGRmbWEzNzUwMzkgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4OSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDQwIGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA0MSBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MCAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNDIgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTEgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDQzIGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA0NCBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAxICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNDUgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDEgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDQ2IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA0NyBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAxICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNDggZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDQ5IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDEyMzQ1Ngorcm91bmRpbmc6IGhhbGZfZXZlbgorZGRmbWEzNzUwNTAgZm1hICAxICAxMjM0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDUxIGZtYSAgMSAgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA1MiBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNTMgZm1hICAxICAxMjM0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDU0IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA1NSBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNTYgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDU3IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA2MCBmbWEgIDEgIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNjEgZm1hICAxICAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDYyIGZtYSAgMSAgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA2MyBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNjQgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDY1IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA2NiBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNjcgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKKy0tIGZhci1vdXQgcmVzaWR1ZXMgKGZ1bGwgY29lZmZpY2llbnQgZ2FwIGlzIDE2KzE1IGRpZ2l0cykKK3JvdW5kaW5nOiB1cAorZGRmbWEzNzUwNzAgZm1hICAxICAxMjM0NTY3OCAxRS04ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMQorZGRmbWEzNzUwNzEgZm1hICAxICAxMjM0NTY3OCAxRS05ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDcyIGZtYSAgMSAgMTIzNDU2NzggMUUtMTAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA3MyBmbWEgIDEgIDEyMzQ1Njc4IDFFLTExICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNzQgZm1hICAxICAxMjM0NTY3OCAxRS0xMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDc1IGZtYSAgMSAgMTIzNDU2NzggMUUtMTMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA3NiBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwNzcgZm1hICAxICAxMjM0NTY3OCAxRS0xNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDc4IGZtYSAgMSAgMTIzNDU2NzggMUUtMTYgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA3OSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE3ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwODAgZm1hICAxICAxMjM0NTY3OCAxRS0xOCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDgxIGZtYSAgMSAgMTIzNDU2NzggMUUtMTkgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA4MiBmbWEgIDEgIDEyMzQ1Njc4IDFFLTIwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwODMgZm1hICAxICAxMjM0NTY3OCAxRS0yNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDg0IGZtYSAgMSAgMTIzNDU2NzggMUUtMzAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA4NSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTMxICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwODYgZm1hICAxICAxMjM0NTY3OCAxRS0zMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RkZm1hMzc1MDg3IGZtYSAgMSAgMTIzNDU2NzggMUUtMzMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkZGZtYTM3NTA4OCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTM0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZGRmbWEzNzUwODkgZm1hICAxICAxMjM0NTY3OCAxRS0zNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKKworLS0gZGVzY3RydWN0aXZlIHN1YnRyYWN0aW9uIChmcm9tIHJlbWFpbmRlciB0ZXN0cykKKworLS0gKysrIHNvbWUgb2YgdGhlc2Ugd2lsbCBiZSBvZmYtYnktb25lIHJlbWFpbmRlciB2cyByZW1haW5kZXJOZWFyCisKK2RkZm1hNDAwMCAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1NCAgIDEuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjc2NTQzMjEwOTg3NjU0NgorZGRmbWE0MDAxICBmbWEgIC0xMjM0NTY3ODkwMTIzNDQzICAgIDEuMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDAuNjU0MzIxMDk4NzY1NTcKK2RkZm1hNDAwMiAgZm1hICAtMTIzNDU2Nzg5MDEyMzMzMiAgICAgMS4wMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjU0MzIxMDk4NzY2NjgKK2RkZm1hNDAwMyAgZm1hICAgLTMwODY0MTk3MjUzMDg2MyAgIDQuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTUgIC0+ICAyLjY5MTM1ODAyNzQ2OTEzNworZGRmbWE0MDA0ICBmbWEgICAtMzA4NjQxOTcyNTMwODYzICAgNC4wMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDMuNjkxMzU4MDI3NDY5MTM3CitkZGZtYTQwMDUgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTYgICAgIDQuOTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC42OTEzNTc4MDI0Njk2CitkZGZtYTQwMDYgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICAgNC45OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMy40NjkxMzU3ODAyNDY5MQorZGRmbWE0MDA3ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxICAgNC45OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDEuMjQ2OTEzNTc4MDI0NjkxCitkZGZtYTQwMDggIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICA1LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC43NTMwODY0MjE5NzUzMDkKK2RkZm1hNDAwOSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MCAgICA1LjAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAzLjUzMDg2NDIxOTc1MzEwCitkZGZtYTQwMTAgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2ODYgICAgIDUuMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMS4zMDg2NDIxOTc1MzE0CitkZGZtYTQwMTEgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTUgICAxLjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTAuMjM0NTY3ODkwMTIzNDU1CitkZGZtYTQwMTIgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NDQgICAgMS4wMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTAuMzQ1Njc4OTAxMjM0NDQKK2RkZm1hNDAxMyAgZm1hICAtMTIzNDU2Nzg5MDEyMzMzMyAgICAgMS4wMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMC40NTY3ODkwMTIzMzMzCitkZGZtYTQwMTQgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjQgICA0LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU1ICAtPiAgLTEuMzA4NjQxOTcyNTMwODY0CitkZGZtYTQwMTUgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjQgICA0LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTAuMzA4NjQxOTcyNTMwODY0CitkZGZtYTQwMTYgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTYgICAgIDQuOTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC42OTEzNTc4MDI0Njk2CitkZGZtYTQwMTcgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTIgICAgNC45OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTEuNTMwODY0MjE5NzUzMDgKK2RkZm1hNDAxOCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgIDQuOTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAxLjI0NjkxMzU3ODAyNDY5MQorZGRmbWE0MDE5ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxICAgNS4wMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDAuNzUzMDg2NDIxOTc1MzA5CitkZGZtYTQwMjAgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICAgNS4wMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTEuNDY5MTM1NzgwMjQ2OTEKK2RkZm1hNDAyMSAgZm1hICAgLTI0NjkxMzU3ODAyNDY4NiAgICAgNS4wMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAxLjMwODY0MjE5NzUzMTQKKworCistLSBOdWxsIHRlc3RzCitkZGZtYTM5OTkwIGZtYSAgMSAgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGZtYTM5OTkxIGZtYSAgMSAgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEludmVydC5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEludmVydC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMTlmYmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkSW52ZXJ0LmRlY1Rlc3QKQEAgLTAsMCArMSwyMDIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRJbnZlcnQuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBJTlZFUlQgZm9yIGRlY0RvdWJsZXMgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKK2RkaW52MDAxIGludmVydCAgICAgICAgICAgICAwIC0+IDExMTExMTExMTExMTExMTEKK2RkaW52MDAyIGludmVydCAgICAgICAgICAgICAxIC0+IDExMTExMTExMTExMTExMTAKK2RkaW52MDAzIGludmVydCAgICAgICAgICAgIDEwIC0+IDExMTExMTExMTExMTExMDEKK2RkaW52MDA0IGludmVydCAgICAgMTExMTExMTExIC0+IDExMTExMTEwMDAwMDAwMDAKK2RkaW52MDA1IGludmVydCAgICAgMDAwMDAwMDAwIC0+IDExMTExMTExMTExMTExMTEKKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCitkZGludjAwNyBpbnZlcnQgMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDExMTExMTExMTExMTExMTEKK2RkaW52MDA4IGludmVydCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDExMTExMTExMTExMTExMQorZGRpbnYwMDkgaW52ZXJ0IDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMTExMTExMTExMTExMTExCitkZGludjAxMCBpbnZlcnQgMDEwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMTExMTExMTExMTExMTEKK2RkaW52MDExIGludmVydCAwMTExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAorZGRpbnYwMTIgaW52ZXJ0IDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgICAwCitkZGludjAxMyBpbnZlcnQgMDAxMTExMTExMTExMTExMSAtPiAgIDExMDAwMDAwMDAwMDAwMDAKK2RkaW52MDE0IGludmVydCAwMTExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAorCistLSBWYXJpb3VzIGxlbmd0aHMKKy0tICAgICAgICAgICAgIDEyMzQ1Njc4OSAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RkaW52MDIxIGludmVydCAxMTExMTExMTEgICAgIC0+ICAxMTExMTExMDAwMDAwMDAwCitkZGludjAyMiBpbnZlcnQgMTExMTExMTExMTExICAtPiAgMTExMTAwMDAwMDAwMDAwMAorZGRpbnYwMjMgaW52ZXJ0ICAxMTExMTExMSAgICAgLT4gIDExMTExMTExMDAwMDAwMDAKK2RkaW52MDI1IGludmVydCAgIDExMTExMTEgICAgIC0+ICAxMTExMTExMTEwMDAwMDAwCitkZGludjAyNiBpbnZlcnQgICAgMTExMTExICAgICAtPiAgMTExMTExMTExMTAwMDAwMAorZGRpbnYwMjcgaW52ZXJ0ICAgICAxMTExMSAgICAgLT4gIDExMTExMTExMTExMDAwMDAKK2RkaW52MDI4IGludmVydCAgICAgIDExMTEgICAgIC0+ICAxMTExMTExMTExMTEwMDAwCitkZGludjAyOSBpbnZlcnQgICAgICAgMTExICAgICAtPiAgMTExMTExMTExMTExMTAwMAorZGRpbnYwMzEgaW52ZXJ0ICAgICAgICAxMSAgICAgLT4gIDExMTExMTExMTExMTExMDAKK2RkaW52MDMyIGludmVydCAgICAgICAgIDEgICAgIC0+ICAxMTExMTExMTExMTExMTEwCitkZGludjAzMyBpbnZlcnQgMTExMTExMTExMTExICAtPiAgMTExMTAwMDAwMDAwMDAwMAorZGRpbnYwMzQgaW52ZXJ0IDExMTExMTExMTExICAgLT4gIDExMTExMDAwMDAwMDAwMDAKK2RkaW52MDM1IGludmVydCAxMTExMTExMTExICAgIC0+ICAxMTExMTEwMDAwMDAwMDAwCitkZGludjAzNiBpbnZlcnQgMTExMTExMTExICAgICAtPiAgMTExMTExMTAwMDAwMDAwMAorCitkZGludjA0MCBpbnZlcnQgMDExMTExMTExICAgLT4gIDExMTExMTExMDAwMDAwMDAKK2RkaW52MDQxIGludmVydCAxMDExMTExMTEgICAtPiAgMTExMTExMTAxMDAwMDAwMAorZGRpbnYwNDIgaW52ZXJ0IDExMDExMTExMSAgIC0+ICAxMTExMTExMDAxMDAwMDAwCitkZGludjA0MyBpbnZlcnQgMTExMDExMTExICAgLT4gIDExMTExMTEwMDAxMDAwMDAKK2RkaW52MDQ0IGludmVydCAxMTExMDExMTEgICAtPiAgMTExMTExMTAwMDAxMDAwMAorZGRpbnYwNDUgaW52ZXJ0IDExMTExMDExMSAgIC0+ICAxMTExMTExMDAwMDAxMDAwCitkZGludjA0NiBpbnZlcnQgMTExMTExMDExICAgLT4gIDExMTExMTEwMDAwMDAxMDAKK2RkaW52MDQ3IGludmVydCAxMTExMTExMDEgICAtPiAgMTExMTExMTAwMDAwMDAxMAorZGRpbnYwNDggaW52ZXJ0IDExMTExMTExMCAgIC0+ICAxMTExMTExMDAwMDAwMDAxCitkZGludjA0OSBpbnZlcnQgMDExMTExMDExICAgLT4gIDExMTExMTExMDAwMDAxMDAKK2RkaW52MDUwIGludmVydCAxMDExMTExMDEgICAtPiAgMTExMTExMTAxMDAwMDAxMAorZGRpbnYwNTEgaW52ZXJ0IDExMDExMTExMCAgIC0+ICAxMTExMTExMDAxMDAwMDAxCitkZGludjA1MiBpbnZlcnQgMTExMDExMTAxICAgLT4gIDExMTExMTEwMDAxMDAwMTAKK2RkaW52MDUzIGludmVydCAxMTExMDEwMTEgICAtPiAgMTExMTExMTAwMDAxMDEwMAorZGRpbnYwNTQgaW52ZXJ0IDExMTExMDExMSAgIC0+ICAxMTExMTExMDAwMDAxMDAwCitkZGludjA1NSBpbnZlcnQgMTExMTAxMDExICAgLT4gIDExMTExMTEwMDAwMTAxMDAKK2RkaW52MDU2IGludmVydCAxMTEwMTExMDEgICAtPiAgMTExMTExMTAwMDEwMDAxMAorZGRpbnYwNTcgaW52ZXJ0IDExMDExMTExMCAgIC0+ICAxMTExMTExMDAxMDAwMDAxCitkZGludjA1OCBpbnZlcnQgMTAxMTExMTAxICAgLT4gIDExMTExMTEwMTAwMDAwMTAKK2RkaW52MDU5IGludmVydCAwMTExMTEwMTEgICAtPiAgMTExMTExMTEwMDAwMDEwMAorCitkZGludjA4MCBpbnZlcnQgMTAwMDAwMDAxMTExMTExMSAgIC0+ICAgMTExMTExMTAwMDAwMDAwCitkZGludjA4MSBpbnZlcnQgMDEwMDAwMDEwMTExMTExMSAgIC0+ICAxMDExMTExMDEwMDAwMDAwCitkZGludjA4MiBpbnZlcnQgMDAxMDAwMDExMDExMTExMSAgIC0+ICAxMTAxMTExMDAxMDAwMDAwCitkZGludjA4MyBpbnZlcnQgMDAwMTAwMDExMTAxMTExMSAgIC0+ICAxMTEwMTExMDAwMTAwMDAwCitkZGludjA4NCBpbnZlcnQgMDAwMDEwMDExMTEwMTExMSAgIC0+ICAxMTExMDExMDAwMDEwMDAwCitkZGludjA4NSBpbnZlcnQgMDAwMDAxMDExMTExMDExMSAgIC0+ICAxMTExMTAxMDAwMDAxMDAwCitkZGludjA4NiBpbnZlcnQgMDAwMDAwMTExMTExMTAxMSAgIC0+ICAxMTExMTEwMDAwMDAwMTAwCitkZGludjA4NyBpbnZlcnQgMDAwMDAxMDExMTExMTEwMSAgIC0+ICAxMTExMTAxMDAwMDAwMDEwCitkZGludjA4OCBpbnZlcnQgMDAwMDEwMDExMTExMTExMCAgIC0+ICAxMTExMDExMDAwMDAwMDAxCitkZGludjA4OSBpbnZlcnQgMDAwMTAwMDAxMTExMTAxMSAgIC0+ICAxMTEwMTExMTAwMDAwMTAwCitkZGludjA5MCBpbnZlcnQgMDAxMDAwMDEwMTExMTEwMSAgIC0+ICAxMTAxMTExMDEwMDAwMDEwCitkZGludjA5MSBpbnZlcnQgMDEwMDAwMDExMDExMTExMCAgIC0+ICAxMDExMTExMDAxMDAwMDAxCitkZGludjA5MiBpbnZlcnQgMTAwMDAwMDExMTAxMTEwMSAgIC0+ICAgMTExMTExMDAwMTAwMDEwCitkZGludjA5MyBpbnZlcnQgMDEwMDAwMDExMTEwMTAxMSAgIC0+ICAxMDExMTExMDAwMDEwMTAwCitkZGludjA5NCBpbnZlcnQgMDAxMDAwMDExMTExMDExMSAgIC0+ICAxMTAxMTExMDAwMDAxMDAwCitkZGludjA5NSBpbnZlcnQgMDAwMTAwMDExMTEwMTAxMSAgIC0+ICAxMTEwMTExMDAwMDEwMTAwCitkZGludjA5NiBpbnZlcnQgMDAwMDEwMDExMTAxMTEwMSAgIC0+ICAxMTExMDExMDAwMTAwMDEwCitkZGludjA5NyBpbnZlcnQgMDAwMDAxMDExMDExMTExMCAgIC0+ICAxMTExMTAxMDAxMDAwMDAxCitkZGludjA5OCBpbnZlcnQgMDAwMDAwMTEwMTExMTEwMSAgIC0+ICAxMTExMTEwMDEwMDAwMDEwCitkZGludjA5OSBpbnZlcnQgMDAwMDAxMDAxMTExMTAxMSAgIC0+ICAxMTExMTAxMTAwMDAwMTAwCisKKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducworZGRpbnYyMjAgaW52ZXJ0IDExMTExMTExMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjIxIGludmVydCAzMzMzMzMzMzMgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIyMiBpbnZlcnQgNTU1NTU1NTU1ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMjMgaW52ZXJ0IDc3Nzc3Nzc3NyAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjI0IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIyNSBpbnZlcnQgMjIyMjIyMjIyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMjYgaW52ZXJ0IDQ0NDQ0NDQ0NCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjI3IGludmVydCA2NjY2NjY2NjYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIyOCBpbnZlcnQgODg4ODg4ODg4ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMjkgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjMwIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjIzMSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyMzIgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK2RkaW52MjQwIGludmVydCAgNTY3NDY4Njg5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI0MSBpbnZlcnQgIDU2NzM2NzY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNDIgaW52ZXJ0IC02MzE5MTc3NzIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjQzIGludmVydCAtNzU2MjUzMjU3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI0NCBpbnZlcnQgIDgzNTU5MDE0OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QKK2RkaW52MjUwIGludmVydCAgMjAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNTEgaW52ZXJ0ICAzMDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI1MiBpbnZlcnQgIDQwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjUzIGludmVydCAgNTAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNTQgaW52ZXJ0ICA2MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI1NSBpbnZlcnQgIDcwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjU2IGludmVydCAgODAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNTcgaW52ZXJ0ICA5MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCitkZGludjI3MCBpbnZlcnQgIDAyMDAwMDEwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjcxIGludmVydCAgMDMwMDAwMDEwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNzIgaW52ZXJ0ICAwNDAwMDAwMDEwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI3MyBpbnZlcnQgIDA1MDAwMDAwMDEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Mjc0IGludmVydCAgMTYwMDAwMDAwMDEwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyNzUgaW52ZXJ0ICAxNzAwMDAwMDAwMDEwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI3NiBpbnZlcnQgIDE4MDAwMDAwMDAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Mjc3IGludmVydCAgMTkwMDAwMDAwMDAwMDEwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2RkaW52MjgwIGludmVydCAgMDAxMDAwMDAwMDAwMDAwMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyODEgaW52ZXJ0ICAwMDAxMDAwMDAwMDAwMDAzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI4MiBpbnZlcnQgIDAwMDAxMDAwMDAwMDAwMDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjgzIGludmVydCAgMDAwMDAxMDAwMDAwMDAwNSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyODQgaW52ZXJ0ICAxMDAwMDAxMDAwMDAwMDA2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI4NSBpbnZlcnQgIDEwMDAwMDAxMDAwMDAwMDcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52Mjg2IGludmVydCAgMTAwMDAwMDAxMDAwMDAwOCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyODcgaW52ZXJ0ICAxMDAwMDAwMDAxMDAwMDA5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQorZGRpbnYyODggaW52ZXJ0ICAwMDEwMDAwMDIwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI4OSBpbnZlcnQgIDAwMDEwMDAwMzAwMDAwMDEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjkwIGludmVydCAgMDAwMDEwMDA0MDAwMDAxMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyOTEgaW52ZXJ0ICAwMDAwMDEwMDUwMDAwMTAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI5MiBpbnZlcnQgIDEwMDAwMDEwNjAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MjkzIGludmVydCAgMTAwMDAwMDE3MDAxMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyOTQgaW52ZXJ0ICAxMDAwMDAwMDgwMTAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjI5NSBpbnZlcnQgIDEwMDAwMDAwOTEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ24KK2RkaW52Mjk2IGludmVydCAtMTAwMDAwMDAwMTAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYyOTkgaW52ZXJ0ICAxMDAwMDAwMDAxMDAwMDAwICAtPiAgMTExMTExMTEwMTExMTExCisKKworLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQorZGRpbnYzNDEgaW52ZXJ0ICA5Ljk5OTk5OTk5RSsyOTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzQyIGludmVydCAgMUUtMjk5ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM0MyBpbnZlcnQgIDEuMDAwMDAwMDBFLTI5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYzNDQgaW52ZXJ0ICAxRS0yMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzQ1IGludmVydCAgLTFFLTIwNyAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM0NiBpbnZlcnQgIC0xLjAwMDAwMDAwRS0yOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYzNDcgaW52ZXJ0ICAtMUUtMjk5ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzQ4IGludmVydCAgLTkuOTk5OTk5OTlFKzI5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworZGRpbnYzNjEgaW52ZXJ0ICAxLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzYyIGludmVydCAgMUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM2MyBpbnZlcnQgIDAuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnYzNjQgaW52ZXJ0ICAwRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkaW52MzY1IGludmVydCAgOS45ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZGludjM2NiBpbnZlcnQgIDlFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCitkZGludjc4OCBpbnZlcnQgLUluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY3OTQgaW52ZXJ0ICBJbmYgICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkaW52ODIxIGludmVydCAgTmFOICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGludjg0MSBpbnZlcnQgIHNOYU4gICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorLS0gcHJvcGFnYXRpbmcgTmFOcworZGRpbnY4NjEgaW52ZXJ0ICBOYU4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NjIgaW52ZXJ0ICtOYU4yICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NjMgaW52ZXJ0ICBOYU4zICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NjQgaW52ZXJ0ICBOYU40ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NjUgaW52ZXJ0ICBOYU41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NzEgaW52ZXJ0ICBzTmFOMTEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NzIgaW52ZXJ0ICBzTmFOMTIgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NzMgaW52ZXJ0ICBzTmFOMTMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NzQgaW52ZXJ0ICBzTmFOMTQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NzUgaW52ZXJ0ICBzTmFOMTUgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4NzYgaW52ZXJ0ICBOYU4xNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4ODEgaW52ZXJ0ICtOYU4yNSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4ODIgaW52ZXJ0IC1OYU4yNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnY4ODMgaW52ZXJ0IC1zTmFOMjcgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZExvZ0IuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRMb2dCLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU3MjhlNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRMb2dCLmRlY1Rlc3QKQEAgLTAsMCArMSwxNTkgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRMb2dCLmRlY1Rlc3QgLS0gaW50ZWdyYWwgNzU0ciBhZGp1c3RlZCBleHBvbmVudCwgZm9yIGRlY0RvdWJsZXMgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gYmFzaWNzCitkZGxvZ2IwMDAgbG9nYiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2IwMDEgbG9nYiAgMUUtMzk4ICAgICAgICAgICAgLT4gLTM5OAorZGRsb2diMDAyIGxvZ2IgIDFFLTM4MyAgICAgICAgICAgIC0+IC0zODMKK2RkbG9nYjAwMyBsb2diICAwLjAwMSAgICAgICAgICAgICAtPiAtMworZGRsb2diMDA0IGxvZ2IgIDAuMDMgICAgICAgICAgICAgIC0+IC0yCitkZGxvZ2IwMDUgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gIDAKK2RkbG9nYjAwNiBsb2diICAyICAgICAgICAgICAgICAgICAtPiAgMAorZGRsb2diMDA3IGxvZ2IgIDIuNSAgICAgICAgICAgICAgIC0+ICAwCitkZGxvZ2IwMDggbG9nYiAgMi41MDAgICAgICAgICAgICAgLT4gIDAKK2RkbG9nYjAwOSBsb2diICAxMCAgICAgICAgICAgICAgICAtPiAgMQorZGRsb2diMDEwIGxvZ2IgIDcwICAgICAgICAgICAgICAgIC0+ICAxCitkZGxvZ2IwMTEgbG9nYiAgMTAwICAgICAgICAgICAgICAgLT4gIDIKK2RkbG9nYjAxMiBsb2diICAzMzMgICAgICAgICAgICAgICAtPiAgMgorZGRsb2diMDEzIGxvZ2IgIDlFKzM4NCAgICAgICAgICAgIC0+ICAzODQKK2RkbG9nYjAxNCBsb2diICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKKworLS0gbmVnYXRpdmVzIGFwcGVhciB0byBiZSB0cmVhdGVkIGFzIHBvc2l0aXZlcworZGRsb2diMDIxIGxvZ2IgLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMDIyIGxvZ2IgLTFFLTM5OCAgICAgICAgICAgIC0+IC0zOTgKK2RkbG9nYjAyMyBsb2diIC05RS0zODMgICAgICAgICAgICAtPiAtMzgzCitkZGxvZ2IwMjQgbG9nYiAtMC4wMDEgICAgICAgICAgICAgLT4gLTMKK2RkbG9nYjAyNSBsb2diIC0xICAgICAgICAgICAgICAgICAtPiAgMAorZGRsb2diMDI2IGxvZ2IgLTIgICAgICAgICAgICAgICAgIC0+ICAwCitkZGxvZ2IwMjcgbG9nYiAtMTAgICAgICAgICAgICAgICAgLT4gIDEKK2RkbG9nYjAyOCBsb2diIC03MCAgICAgICAgICAgICAgICAtPiAgMQorZGRsb2diMDI5IGxvZ2IgLTEwMCAgICAgICAgICAgICAgIC0+ICAyCitkZGxvZ2IwMzAgbG9nYiAtOUUrMzg0ICAgICAgICAgICAgLT4gIDM4NAorZGRsb2diMDMxIGxvZ2IgLUluZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCistLSB6ZXJvcworZGRsb2diMTExIGxvZ2IgICAgICAgICAgMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMTEyIGxvZ2IgICAgICAgICAtMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMTEzIGxvZ2IgICAgICAgMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMTE0IGxvZ2IgICAgICAtMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMTE1IGxvZ2IgICAgIDAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMTE2IGxvZ2IgICAgLTAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMTE3IGxvZ2IgICAgICAwRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZGRsb2diMTE4IGxvZ2IgICAgIC0wRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZGRsb2diMTIxIGxvZ2IgICAyNjgyNjgyNjggICAgICAgIC0+IDgKK2RkbG9nYjEyMiBsb2diICAtMjY4MjY4MjY4ICAgICAgICAtPiA4CitkZGxvZ2IxMjMgbG9nYiAgIDEzNDEzNDEzNCAgICAgICAgLT4gOAorZGRsb2diMTI0IGxvZ2IgIC0xMzQxMzQxMzQgICAgICAgIC0+IDgKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RkbG9nYjEzMSBsb2diICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gIDM4NAorZGRsb2diMTMyIGxvZ2IgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAtMzgzCitkZGxvZ2IxMzMgbG9nYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IC0zODMKK2RkbG9nYjEzNCBsb2diICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gLTM5OAorCitkZGxvZ2IxMzUgbG9nYiAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0zOTgKK2RkbG9nYjEzNiBsb2diICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTM4MworZGRsb2diMTM3IGxvZ2IgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMzgzCitkZGxvZ2IxMzggbG9nYiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+ICAzODQKKworLS0gb25lcworZGRsb2diMDA2MSBsb2diICAxICAgICAgICAgICAgICAgICAtPiAgIDAKK2RkbG9nYjAwNjIgbG9nYiAgMS4wICAgICAgICAgICAgICAgLT4gICAwCitkZGxvZ2IwMDYzIGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwIC0+ICAgMAorCistLSBub3RhYmxlIGNhc2VzIC0tIGV4YWN0IHBvd2VycyBvZiAxMAorZGRsb2diMTEwMCBsb2diIDEgICAgICAgICAgICAgLT4gMAorZGRsb2diMTEwMSBsb2diIDEwICAgICAgICAgICAgLT4gMQorZGRsb2diMTEwMiBsb2diIDEwMCAgICAgICAgICAgLT4gMgorZGRsb2diMTEwMyBsb2diIDEwMDAgICAgICAgICAgLT4gMworZGRsb2diMTEwNCBsb2diIDEwMDAwICAgICAgICAgLT4gNAorZGRsb2diMTEwNSBsb2diIDEwMDAwMCAgICAgICAgLT4gNQorZGRsb2diMTEwNiBsb2diIDEwMDAwMDAgICAgICAgLT4gNgorZGRsb2diMTEwNyBsb2diIDEwMDAwMDAwICAgICAgLT4gNworZGRsb2diMTEwOCBsb2diIDEwMDAwMDAwMCAgICAgLT4gOAorZGRsb2diMTEwOSBsb2diIDEwMDAwMDAwMDAgICAgLT4gOQorZGRsb2diMTExMCBsb2diIDEwMDAwMDAwMDAwICAgLT4gMTAKK2RkbG9nYjExMTEgbG9nYiAxMDAwMDAwMDAwMDAgIC0+IDExCitkZGxvZ2IxMTEyIGxvZ2IgMTAwMDAwMDAwMDAwMCAtPiAxMgorZGRsb2diMTExMyBsb2diIDAuMDAwMDAwMDAwMDEgLT4gLTExCitkZGxvZ2IxMTE0IGxvZ2IgMC4wMDAwMDAwMDAxIC0+IC0xMAorZGRsb2diMTExNSBsb2diIDAuMDAwMDAwMDAxIC0+IC05CitkZGxvZ2IxMTE2IGxvZ2IgMC4wMDAwMDAwMSAtPiAtOAorZGRsb2diMTExNyBsb2diIDAuMDAwMDAwMSAtPiAtNworZGRsb2diMTExOCBsb2diIDAuMDAwMDAxIC0+IC02CitkZGxvZ2IxMTE5IGxvZ2IgMC4wMDAwMSAtPiAtNQorZGRsb2diMTEyMCBsb2diIDAuMDAwMSAtPiAtNAorZGRsb2diMTEyMSBsb2diIDAuMDAxIC0+IC0zCitkZGxvZ2IxMTIyIGxvZ2IgMC4wMSAtPiAtMgorZGRsb2diMTEyMyBsb2diIDAuMSAtPiAtMQorZGRsb2diMTEyNCBsb2diIDFFLTk5ICAtPiAtOTkKK2RkbG9nYjExMjUgbG9nYiAxRS0xMDAgLT4gLTEwMAorZGRsb2diMTEyNyBsb2diIDFFLTI5OSAtPiAtMjk5CitkZGxvZ2IxMTI2IGxvZ2IgMUUtMzgzIC0+IC0zODMKKworLS0gc3VnZ2VzdGlvbnMgZnJvbSBJbGFuIE5laGFtYQorZGRsb2diMTQwMCBsb2diIDEwRS0zICAgIC0+IC0yCitkZGxvZ2IxNDAxIGxvZ2IgMTBFLTIgICAgLT4gLTEKK2RkbG9nYjE0MDIgbG9nYiAxMDBFLTIgICAtPiAgMAorZGRsb2diMTQwMyBsb2diIDEwMDBFLTIgIC0+ICAxCitkZGxvZ2IxNDA0IGxvZ2IgMTAwMDBFLTIgLT4gIDIKK2RkbG9nYjE0MDUgbG9nYiAxMEUtMSAgICAtPiAgMAorZGRsb2diMTQwNiBsb2diIDEwMEUtMSAgIC0+ICAxCitkZGxvZ2IxNDA3IGxvZ2IgMTAwMEUtMSAgLT4gIDIKK2RkbG9nYjE0MDggbG9nYiAxMDAwMEUtMSAtPiAgMworZGRsb2diMTQwOSBsb2diIDEwRTAgICAgIC0+ICAxCitkZGxvZ2IxNDEwIGxvZ2IgMTAwRTAgICAgLT4gIDIKK2RkbG9nYjE0MTEgbG9nYiAxMDAwRTAgICAtPiAgMworZGRsb2diMTQxMiBsb2diIDEwMDAwRTAgIC0+ICA0CitkZGxvZ2IxNDEzIGxvZ2IgMTBFMSAgICAgLT4gIDIKK2RkbG9nYjE0MTQgbG9nYiAxMDBFMSAgICAtPiAgMworZGRsb2diMTQxNSBsb2diIDEwMDBFMSAgIC0+ICA0CitkZGxvZ2IxNDE2IGxvZ2IgMTAwMDBFMSAgLT4gIDUKK2RkbG9nYjE0MTcgbG9nYiAxMEUyICAgICAtPiAgMworZGRsb2diMTQxOCBsb2diIDEwMEUyICAgIC0+ICA0CitkZGxvZ2IxNDE5IGxvZ2IgMTAwMEUyICAgLT4gIDUKK2RkbG9nYjE0MjAgbG9nYiAxMDAwMEUyICAtPiAgNgorCistLSBzcGVjaWFsIHZhbHVlcworZGRsb2diODIwICBsb2diICAgSW5maW5pdHkgLT4gICBJbmZpbml0eQorZGRsb2diODIxICBsb2diICAgMCAgICAgICAgLT4gIC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkZGxvZ2I4MjIgIGxvZ2IgICBOYU4gICAgICAtPiAgIE5hTgorZGRsb2diODIzICBsb2diICAgc05hTiAgICAgLT4gICBOYU4gICAgIEludmFsaWRfb3BlcmF0aW9uCistLSBwcm9wYWdhdGluZyBOYU5zCitkZGxvZ2I4MjQgIGxvZ2IgICBzTmFOMTIzICAtPiAgIE5hTjEyMyAgSW52YWxpZF9vcGVyYXRpb24KK2RkbG9nYjgyNSAgbG9nYiAgIC1zTmFOMzIxIC0+ICAtTmFOMzIxICBJbnZhbGlkX29wZXJhdGlvbgorZGRsb2diODI2ICBsb2diICAgTmFONDU2ICAgLT4gICBOYU40NTYKK2RkbG9nYjgyNyAgbG9nYiAgIC1OYU42NTQgIC0+ICAtTmFONjU0CitkZGxvZ2I4MjggIGxvZ2IgICBOYU4xICAgICAtPiAgIE5hTjEKKworLS0gTnVsbCB0ZXN0CitkZGxvZ2I5MDAgIGxvZ2IgIyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNYXguZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNYXguZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWM2Mzk1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1heC5kZWNUZXN0CkBAIC0wLDAgKzEsMzIyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkTWF4LmRlY1Rlc3QgLS0gZGVjRG91YmxlIG1heG51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZG1heDAwMSBtYXggIC0yICAtMiAgLT4gLTIKK2RkbWF4MDAyIG1heCAgLTIgIC0xICAtPiAtMQorZGRtYXgwMDMgbWF4ICAtMiAgIDAgIC0+ICAwCitkZG1heDAwNCBtYXggIC0yICAgMSAgLT4gIDEKK2RkbWF4MDA1IG1heCAgLTIgICAyICAtPiAgMgorZGRtYXgwMDYgbWF4ICAtMSAgLTIgIC0+IC0xCitkZG1heDAwNyBtYXggIC0xICAtMSAgLT4gLTEKK2RkbWF4MDA4IG1heCAgLTEgICAwICAtPiAgMAorZGRtYXgwMDkgbWF4ICAtMSAgIDEgIC0+ICAxCitkZG1heDAxMCBtYXggIC0xICAgMiAgLT4gIDIKK2RkbWF4MDExIG1heCAgIDAgIC0yICAtPiAgMAorZGRtYXgwMTIgbWF4ICAgMCAgLTEgIC0+ICAwCitkZG1heDAxMyBtYXggICAwICAgMCAgLT4gIDAKK2RkbWF4MDE0IG1heCAgIDAgICAxICAtPiAgMQorZGRtYXgwMTUgbWF4ICAgMCAgIDIgIC0+ICAyCitkZG1heDAxNiBtYXggICAxICAtMiAgLT4gIDEKK2RkbWF4MDE3IG1heCAgIDEgIC0xICAtPiAgMQorZGRtYXgwMTggbWF4ICAgMSAgIDAgIC0+ICAxCitkZG1heDAxOSBtYXggICAxICAgMSAgLT4gIDEKK2RkbWF4MDIwIG1heCAgIDEgICAyICAtPiAgMgorZGRtYXgwMjEgbWF4ICAgMiAgLTIgIC0+ICAyCitkZG1heDAyMiBtYXggICAyICAtMSAgLT4gIDIKK2RkbWF4MDIzIG1heCAgIDIgICAwICAtPiAgMgorZGRtYXgwMjUgbWF4ICAgMiAgIDEgIC0+ICAyCitkZG1heDAyNiBtYXggICAyICAgMiAgLT4gIDIKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RkbWF4MDMwIG1heCAgIDAgICAgIDAgICAtPiAgMAorZGRtYXgwMzEgbWF4ICAgMCAgICAtMCAgIC0+ICAwCitkZG1heDAzMiBtYXggICAwICAgIC0wLjAgLT4gIDAKK2RkbWF4MDMzIG1heCAgIDAgICAgIDAuMCAtPiAgMAorZGRtYXgwMzQgbWF4ICAtMCAgICAgMCAgIC0+ICAwICAgIC0tIG5vdGU6IC0wID0gMCwgYnV0IDAgY2hvc2VuCitkZG1heDAzNSBtYXggIC0wICAgIC0wICAgLT4gLTAKK2RkbWF4MDM2IG1heCAgLTAgICAgLTAuMCAtPiAtMC4wCitkZG1heDAzNyBtYXggIC0wICAgICAwLjAgLT4gIDAuMAorZGRtYXgwMzggbWF4ICAgMC4wICAgMCAgIC0+ICAwCitkZG1heDAzOSBtYXggICAwLjAgIC0wICAgLT4gIDAuMAorZGRtYXgwNDAgbWF4ICAgMC4wICAtMC4wIC0+ICAwLjAKK2RkbWF4MDQxIG1heCAgIDAuMCAgIDAuMCAtPiAgMC4wCitkZG1heDA0MiBtYXggIC0wLjAgICAwICAgLT4gIDAKK2RkbWF4MDQzIG1heCAgLTAuMCAgLTAgICAtPiAtMC4wCitkZG1heDA0NCBtYXggIC0wLjAgIC0wLjAgLT4gLTAuMAorZGRtYXgwNDUgbWF4ICAtMC4wICAgMC4wIC0+ICAwLjAKKworZGRtYXgwNTAgbWF4ICAtMEUxICAgMEUxIC0+ICAwRSsxCitkZG1heDA1MSBtYXggIC0wRTIgICAwRTIgLT4gIDBFKzIKK2RkbWF4MDUyIG1heCAgLTBFMiAgIDBFMSAtPiAgMEUrMQorZGRtYXgwNTMgbWF4ICAtMEUxICAgMEUyIC0+ICAwRSsyCitkZG1heDA1NCBtYXggICAwRTEgIC0wRTEgLT4gIDBFKzEKK2RkbWF4MDU1IG1heCAgIDBFMiAgLTBFMiAtPiAgMEUrMgorZGRtYXgwNTYgbWF4ICAgMEUyICAtMEUxIC0+ICAwRSsyCitkZG1heDA1NyBtYXggICAwRTEgIC0wRTIgLT4gIDBFKzEKKworZGRtYXgwNTggbWF4ICAgMEUxICAgMEUxIC0+ICAwRSsxCitkZG1heDA1OSBtYXggICAwRTIgICAwRTIgLT4gIDBFKzIKK2RkbWF4MDYwIG1heCAgIDBFMiAgIDBFMSAtPiAgMEUrMgorZGRtYXgwNjEgbWF4ICAgMEUxICAgMEUyIC0+ICAwRSsyCitkZG1heDA2MiBtYXggIC0wRTEgIC0wRTEgLT4gLTBFKzEKK2RkbWF4MDYzIG1heCAgLTBFMiAgLTBFMiAtPiAtMEUrMgorZGRtYXgwNjQgbWF4ICAtMEUyICAtMEUxIC0+IC0wRSsxCitkZG1heDA2NSBtYXggIC0wRTEgIC0wRTIgLT4gLTBFKzEKKworLS0gU3BlY2lhbHMKK2RkbWF4MDkwIG1heCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CitkZG1heDA5MSBtYXggIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZGRtYXgwOTIgbWF4ICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RkbWF4MDkzIG1heCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkZG1heDA5NCBtYXggIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZGRtYXgwOTUgbWF4ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RkbWF4MDk2IG1heCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkZG1heDA5NyBtYXggIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtYXgwOTggbWF4IC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbWF4MDk5IG1heCAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkZG1heDEwMCBtYXggLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtYXgxMDEgbWF4IC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbWF4MTAyIG1heCAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZG1heDEwMyBtYXggIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtYXgxMDQgbWF4ICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbWF4MTA1IG1heCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RkbWF4MTIwIG1heCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1heDEyMSBtYXggLUluZiAgLTEwMDAgIC0+IC0xMDAwCitkZG1heDEyMiBtYXggLUluZiAgLTEgICAgIC0+IC0xCitkZG1heDEyMyBtYXggLUluZiAgLTAgICAgIC0+IC0wCitkZG1heDEyNCBtYXggLUluZiAgIDAgICAgIC0+ICAwCitkZG1heDEyNSBtYXggLUluZiAgIDEgICAgIC0+ICAxCitkZG1heDEyNiBtYXggLUluZiAgIDEwMDAgIC0+ICAxMDAwCitkZG1heDEyNyBtYXggLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRtYXgxMjggbWF4IC1JbmYgIC1JbmYgICAtPiAgLUluZmluaXR5CitkZG1heDEyOSBtYXggLTEwMDAgLUluZiAgIC0+ICAtMTAwMAorZGRtYXgxMzAgbWF4IC0xICAgIC1JbmYgICAtPiAgLTEKK2RkbWF4MTMxIG1heCAtMCAgICAtSW5mICAgLT4gIC0wCitkZG1heDEzMiBtYXggIDAgICAgLUluZiAgIC0+ICAwCitkZG1heDEzMyBtYXggIDEgICAgLUluZiAgIC0+ICAxCitkZG1heDEzNCBtYXggIDEwMDAgLUluZiAgIC0+ICAxMDAwCitkZG1heDEzNSBtYXggIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK2RkbWF4MTQxIG1heCAgTmFOIC1JbmYgICAgLT4gLUluZmluaXR5CitkZG1heDE0MiBtYXggIE5hTiAtMTAwMCAgIC0+IC0xMDAwCitkZG1heDE0MyBtYXggIE5hTiAtMSAgICAgIC0+IC0xCitkZG1heDE0NCBtYXggIE5hTiAtMCAgICAgIC0+IC0wCitkZG1heDE0NSBtYXggIE5hTiAgMCAgICAgIC0+ICAwCitkZG1heDE0NiBtYXggIE5hTiAgMSAgICAgIC0+ICAxCitkZG1heDE0NyBtYXggIE5hTiAgMTAwMCAgIC0+ICAxMDAwCitkZG1heDE0OCBtYXggIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQorZGRtYXgxNDkgbWF4ICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZG1heDE1MCBtYXggLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQorZGRtYXgxNTEgbWF4IC0xMDAwIE5hTiAgICAtPiAtMTAwMAorZGRtYXgxNTIgbWF4IC0xICAgIE5hTiAgICAtPiAtMQorZGRtYXgxNTMgbWF4IC0wICAgIE5hTiAgICAtPiAtMAorZGRtYXgxNTQgbWF4ICAwICAgIE5hTiAgICAtPiAgMAorZGRtYXgxNTUgbWF4ICAxICAgIE5hTiAgICAtPiAgMQorZGRtYXgxNTYgbWF4ICAxMDAwIE5hTiAgICAtPiAgMTAwMAorZGRtYXgxNTcgbWF4ICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKKworZGRtYXgxNjEgbWF4ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjIgbWF4ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjMgbWF4ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjQgbWF4ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjUgbWF4ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjYgbWF4ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjcgbWF4ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjggbWF4ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNjkgbWF4ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzAgbWF4ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzEgbWF4IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzIgbWF4IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzMgbWF4IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzQgbWF4IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzUgbWF4ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzYgbWF4ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzcgbWF4ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzggbWF4ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxNzkgbWF4ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZG1heDE4MSBtYXggIE5hTjkgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbWF4MTgyIG1heCAgTmFOOCAgICAgOSAgIC0+ICA5CitkZG1heDE4MyBtYXggLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRtYXgxODQgbWF4IC1OYU4xICAgTmFOMTEgLT4gLU5hTjEKK2RkbWF4MTg1IG1heCAgTmFOMiAgIE5hTjEyIC0+ICBOYU4yCitkZG1heDE4NiBtYXggLU5hTjEzIC1OYU43ICAtPiAtTmFOMTMKK2RkbWF4MTg3IG1heCAgTmFOMTQgLU5hTjUgIC0+ICBOYU4xNAorCitkZG1heDE4OCBtYXggLUluZiAgICBOYU40ICAtPiAtSW5maW5pdHkKK2RkbWF4MTg5IG1heCAtOSAgICAgLU5hTjMgIC0+IC05CitkZG1heDE5MCBtYXggIEluZiAgICBOYU4yICAtPiAgSW5maW5pdHkKKworZGRtYXgxOTEgbWF4ICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTkyIG1heCAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE5MyBtYXggLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxOTQgbWF4ICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTk1IG1heCAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE5NiBtYXggLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXgxOTcgbWF4ICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkbWF4MTk4IG1heCAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZG1heDE5OSBtYXggIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvbGQgcm91bmRpbmcgY2hlY2tzCitkZG1heDIyMSBtYXggMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDAKK2RkbWF4MjIyIG1heCAxIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMAorZGRtYXgyMjMgbWF4IDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDAKK2RkbWF4MjI0IG1heCAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwCitkZG1heDIyNSBtYXggMTIzNDU2Nzg5MCAgMSAgLT4gMTIzNDU2Nzg5MAorZGRtYXgyMjYgbWF4IDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTAKK2RkbWF4MjI3IG1heCAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxCitkZG1heDIyOCBtYXggMSAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQorZGRtYXgyMjkgbWF4IDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxCitkZG1heDIzMCBtYXggMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDEKK2RkbWF4MjMxIG1heCAxMjM0NTY3ODk2ICAxICAtPiAxMjM0NTY3ODk2CitkZG1heDIzMiBtYXggMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5NgorZGRtYXgyMzMgbWF4IC0xMjM0NTY3ODkxICAxIC0+IDEKK2RkbWF4MjM0IG1heCAxIC0xMjM0NTY3ODkxICAtPiAxCitkZG1heDIzNSBtYXggLTEyMzQ1Njc4OTAxIDEgLT4gMQorZGRtYXgyMzYgbWF4IDEgLTEyMzQ1Njc4OTAxIC0+IDEKK2RkbWF4MjM3IG1heCAtMTIzNDU2Nzg5NiAgMSAtPiAxCitkZG1heDIzOCBtYXggMSAtMTIzNDU2Nzg5NiAgLT4gMQorCistLSBmcm9tIGV4YW1wbGVzCitkZG1heDI4MCBtYXggJzMnICAgJzInICAtPiAgJzMnCitkZG1heDI4MSBtYXggJy0xMCcgJzMnICAtPiAgJzMnCitkZG1heDI4MiBtYXggJzEuMCcgJzEnICAtPiAgJzEnCitkZG1heDI4MyBtYXggJzEnICcxLjAnICAtPiAgJzEnCitkZG1heDI4NCBtYXggJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQorZGRtYXg0MDEgbWF4ICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkKK2RkbWF4NDAyIG1heCAgMS4xICAgIDEgICAgICAgLT4gIDEuMQorZGRtYXg0MDMgbWF4ICAxICAgICAgMS4wICAgICAtPiAgMQorZGRtYXg0MDQgbWF4ICAxLjAgICAgMC4xICAgICAtPiAgMS4wCitkZG1heDQwNSBtYXggIDAuMSAgICAwLjEwICAgIC0+ICAwLjEKK2RkbWF4NDA2IG1heCAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAKK2RkbWF4NDA3IG1heCAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTAKK2RkbWF4NDA4IG1heCAgMCAgICAgIDAuMCAgICAgLT4gIDAKK2RkbWF4NDA5IG1heCAgMC4wICAgLTAgICAgICAgLT4gIDAuMAorZGRtYXg0MTAgbWF4ICAwLjAgICAtMC4wICAgICAtPiAgMC4wCitkZG1heDQxMSBtYXggIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwCitkZG1heDQxMiBtYXggIDAuMCAgIC0wLjAwICAgIC0+ICAwLjAKK2RkbWF4NDEzIG1heCAgMCAgICAgLTAuMCAgICAgLT4gIDAKK2RkbWF4NDE0IG1heCAgMCAgICAgLTAgICAgICAgLT4gIDAKK2RkbWF4NDE1IG1heCAtMC4wICAgLTAgICAgICAgLT4gLTAuMAorZGRtYXg0MTYgbWF4IC0wICAgICAtMC4xMDAgICAtPiAtMAorZGRtYXg0MTcgbWF4IC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMDAKK2RkbWF4NDE4IG1heCAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTAKK2RkbWF4NDE5IG1heCAtMC4xICAgLTEuMCAgICAgLT4gLTAuMQorZGRtYXg0MjAgbWF4IC0xLjAgICAtMSAgICAgICAtPiAtMS4wCitkZG1heDQyMSBtYXggLTEgICAgIC0xLjEgICAgIC0+IC0xCitkZG1heDQyMyBtYXggLTEuMSAgIC1JbmYgICAgIC0+IC0xLjEKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorZGRtYXg0MzEgbWF4ICAxLjEgICAgSW5mICAgICAtPiAgSW5maW5pdHkKK2RkbWF4NDMyIG1heCAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQorZGRtYXg0MzMgbWF4ICAxLjAgICAgMSAgICAgICAtPiAgMQorZGRtYXg0MzQgbWF4ICAwLjEgICAgMS4wICAgICAtPiAgMS4wCitkZG1heDQzNSBtYXggIDAuMTAgICAwLjEgICAgIC0+ICAwLjEKK2RkbWF4NDM2IG1heCAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAKK2RkbWF4NDM3IG1heCAgMCAgICAgIDAuMTAgICAgLT4gIDAuMTAKK2RkbWF4NDM4IG1heCAgMC4wICAgIDAgICAgICAgLT4gIDAKK2RkbWF4NDM5IG1heCAtMCAgICAgIDAuMCAgICAgLT4gIDAuMAorZGRtYXg0NDAgbWF4IC0wLjAgICAgMC4wICAgICAtPiAgMC4wCitkZG1heDQ0MSBtYXggLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwCitkZG1heDQ0MiBtYXggLTAuMDAgICAwLjAgICAgIC0+ICAwLjAKK2RkbWF4NDQzIG1heCAtMC4wICAgIDAgICAgICAgLT4gIDAKK2RkbWF4NDQ0IG1heCAtMCAgICAgIDAgICAgICAgLT4gIDAKK2RkbWF4NDQ1IG1heCAtMCAgICAgLTAuMCAgICAgLT4gLTAuMAorZGRtYXg0NDYgbWF4IC0wLjEwMCAtMCAgICAgICAtPiAtMAorZGRtYXg0NDcgbWF4IC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMDAKK2RkbWF4NDQ4IG1heCAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTAKK2RkbWF4NDQ5IG1heCAtMS4wICAgLTAuMSAgICAgLT4gLTAuMQorZGRtYXg0NTAgbWF4IC0xICAgICAtMS4wICAgICAtPiAtMS4wCitkZG1heDQ1MSBtYXggLTEuMSAgIC0xICAgICAgIC0+IC0xCitkZG1heDQ1MyBtYXggLUluZiAgIC0xLjEgICAgIC0+IC0xLjEKKy0tIGxhcmdpZXMKK2RkbWF4NDYwIG1heCAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK2RkbWF4NDYxIG1heCAgMUUrMyAgIDEwMDAgICAgLT4gIDFFKzMKK2RkbWF4NDYyIG1heCAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDAKK2RkbWF4NDYzIG1heCAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMKK2RkbWF4NDY0IG1heCAtMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK2RkbWF4NDY1IG1heCAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK2RkbWF4NDY2IG1heCAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDAKK2RkbWF4NDY3IG1heCAtMUUrMyAgLTEwMDAgICAgLT4gLTEwMDAKKworLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuCitkZG1heDQ3MSBtYXggICAgICAxLjAgICAgICAgMC4xICAtPiAxLjAKK2RkbWF4NDcyIG1heCAgICAgIDAuMSAgICAgICAxLjAgIC0+IDEuMAorZGRtYXg0NzMgbWF4ICAgICAxMC4wICAgICAgIDAuMSAgLT4gMTAuMAorZGRtYXg0NzQgbWF4ICAgICAgMC4xICAgICAgMTAuMCAgLT4gMTAuMAorZGRtYXg0NzUgbWF4ICAgICAgMTAwICAgICAgIDEuMCAgLT4gMTAwCitkZG1heDQ3NiBtYXggICAgICAxLjAgICAgICAgMTAwICAtPiAxMDAKK2RkbWF4NDc3IG1heCAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDEwMDAKK2RkbWF4NDc4IG1heCAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwMDAKK2RkbWF4NDc5IG1heCAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDEwMDAwCitkZG1heDQ4MCBtYXggICAgMTAwLjAgICAgIDEwMDAwICAtPiAxMDAwMAorZGRtYXg0ODEgbWF4ICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMDAwCitkZG1heDQ4MiBtYXggICAxMDAwLjAgICAgMTAwMDAwICAtPiAxMDAwMDAKK2RkbWF4NDgzIG1heCAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDEwMDAwMDAKK2RkbWF4NDg0IG1heCAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwMDAKKworLS0gc3Vibm9ybWFscworZGRtYXg1MTAgbWF4ICAxLjAwRS0zODMgICAgICAgMCAgLT4gICAxLjAwRS0zODMKK2RkbWF4NTExIG1heCAgMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMUUtMzg0ICAgIFN1Ym5vcm1hbAorZGRtYXg1MTIgbWF4ICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAxLjBFLTM4NCAgU3Vibm9ybWFsCitkZG1heDUxMyBtYXggIDAuMTAwRS0zODMgICAgICAwICAtPiAgIDEuMDBFLTM4NCBTdWJub3JtYWwKK2RkbWF4NTE0IG1heCAgMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMUUtMzg1ICAgIFN1Ym5vcm1hbAorZGRtYXg1MTUgbWF4ICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICA5Ljk5RS0zODQgU3Vibm9ybWFsCitkZG1heDUxNiBtYXggIDAuMDk5RS0zODMgICAgICAwICAtPiAgIDkuOUUtMzg1ICBTdWJub3JtYWwKK2RkbWF4NTE3IG1heCAgMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgOUUtMzg2ICAgIFN1Ym5vcm1hbAorZGRtYXg1MTggbWF4ICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAxRS0zODYgICAgU3Vibm9ybWFsCitkZG1heDUxOSBtYXggIDAuMDAwOUUtMzgzICAgICAwICAtPiAgIDlFLTM4NyAgICBTdWJub3JtYWwKK2RkbWF4NTIwIG1heCAgMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMUUtMzg3ICAgIFN1Ym5vcm1hbAorCitkZG1heDUzMCBtYXggLTEuMDBFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbWF4NTMxIG1heCAtMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMAorZGRtYXg1MzIgbWF4IC0wLjEwRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1heDUzMyBtYXggLTAuMTAwRS0zODMgICAgICAwICAtPiAgIDAKK2RkbWF4NTM0IG1heCAtMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtYXg1MzUgbWF4IC0wLjk5OUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1heDUzNiBtYXggLTAuMDk5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbWF4NTM3IG1heCAtMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtYXg1MzggbWF4IC0wLjAwMUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1heDUzOSBtYXggLTAuMDAwOUUtMzgzICAgICAwICAtPiAgIDAKK2RkbWF4NTQwIG1heCAtMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMAorCistLSBOdWxsIHRlc3RzCitkZG1heDkwMCBtYXggMTAgICMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtYXg5MDEgbWF4ICAjIDEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNYXhNYWcuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNYXhNYWcuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWMzZTkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1heE1hZy5kZWNUZXN0CkBAIC0wLDAgKzEsMzA0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkTWF4TWFnLmRlY1Rlc3QgLS0gZGVjRG91YmxlIG1heG51bW1hZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZG14ZzAwMSBtYXhtYWcgIC0yICAtMiAgLT4gLTIKK2RkbXhnMDAyIG1heG1hZyAgLTIgIC0xICAtPiAtMgorZGRteGcwMDMgbWF4bWFnICAtMiAgIDAgIC0+IC0yCitkZG14ZzAwNCBtYXhtYWcgIC0yICAgMSAgLT4gLTIKK2RkbXhnMDA1IG1heG1hZyAgLTIgICAyICAtPiAgMgorZGRteGcwMDYgbWF4bWFnICAtMSAgLTIgIC0+IC0yCitkZG14ZzAwNyBtYXhtYWcgIC0xICAtMSAgLT4gLTEKK2RkbXhnMDA4IG1heG1hZyAgLTEgICAwICAtPiAtMQorZGRteGcwMDkgbWF4bWFnICAtMSAgIDEgIC0+ICAxCitkZG14ZzAxMCBtYXhtYWcgIC0xICAgMiAgLT4gIDIKK2RkbXhnMDExIG1heG1hZyAgIDAgIC0yICAtPiAtMgorZGRteGcwMTIgbWF4bWFnICAgMCAgLTEgIC0+IC0xCitkZG14ZzAxMyBtYXhtYWcgICAwICAgMCAgLT4gIDAKK2RkbXhnMDE0IG1heG1hZyAgIDAgICAxICAtPiAgMQorZGRteGcwMTUgbWF4bWFnICAgMCAgIDIgIC0+ICAyCitkZG14ZzAxNiBtYXhtYWcgICAxICAtMiAgLT4gLTIKK2RkbXhnMDE3IG1heG1hZyAgIDEgIC0xICAtPiAgMQorZGRteGcwMTggbWF4bWFnICAgMSAgIDAgIC0+ICAxCitkZG14ZzAxOSBtYXhtYWcgICAxICAgMSAgLT4gIDEKK2RkbXhnMDIwIG1heG1hZyAgIDEgICAyICAtPiAgMgorZGRteGcwMjEgbWF4bWFnICAgMiAgLTIgIC0+ICAyCitkZG14ZzAyMiBtYXhtYWcgICAyICAtMSAgLT4gIDIKK2RkbXhnMDIzIG1heG1hZyAgIDIgICAwICAtPiAgMgorZGRteGcwMjUgbWF4bWFnICAgMiAgIDEgIC0+ICAyCitkZG14ZzAyNiBtYXhtYWcgICAyICAgMiAgLT4gIDIKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RkbXhnMDMwIG1heG1hZyAgIDAgICAgIDAgICAtPiAgMAorZGRteGcwMzEgbWF4bWFnICAgMCAgICAtMCAgIC0+ICAwCitkZG14ZzAzMiBtYXhtYWcgICAwICAgIC0wLjAgLT4gIDAKK2RkbXhnMDMzIG1heG1hZyAgIDAgICAgIDAuMCAtPiAgMAorZGRteGcwMzQgbWF4bWFnICAtMCAgICAgMCAgIC0+ICAwICAgIC0tIG5vdGU6IC0wID0gMCwgYnV0IDAgY2hvc2VuCitkZG14ZzAzNSBtYXhtYWcgIC0wICAgIC0wICAgLT4gLTAKK2RkbXhnMDM2IG1heG1hZyAgLTAgICAgLTAuMCAtPiAtMC4wCitkZG14ZzAzNyBtYXhtYWcgIC0wICAgICAwLjAgLT4gIDAuMAorZGRteGcwMzggbWF4bWFnICAgMC4wICAgMCAgIC0+ICAwCitkZG14ZzAzOSBtYXhtYWcgICAwLjAgIC0wICAgLT4gIDAuMAorZGRteGcwNDAgbWF4bWFnICAgMC4wICAtMC4wIC0+ICAwLjAKK2RkbXhnMDQxIG1heG1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wCitkZG14ZzA0MiBtYXhtYWcgIC0wLjAgICAwICAgLT4gIDAKK2RkbXhnMDQzIG1heG1hZyAgLTAuMCAgLTAgICAtPiAtMC4wCitkZG14ZzA0NCBtYXhtYWcgIC0wLjAgIC0wLjAgLT4gLTAuMAorZGRteGcwNDUgbWF4bWFnICAtMC4wICAgMC4wIC0+ICAwLjAKKworZGRteGcwNTAgbWF4bWFnICAtMEUxICAgMEUxIC0+ICAwRSsxCitkZG14ZzA1MSBtYXhtYWcgIC0wRTIgICAwRTIgLT4gIDBFKzIKK2RkbXhnMDUyIG1heG1hZyAgLTBFMiAgIDBFMSAtPiAgMEUrMQorZGRteGcwNTMgbWF4bWFnICAtMEUxICAgMEUyIC0+ICAwRSsyCitkZG14ZzA1NCBtYXhtYWcgICAwRTEgIC0wRTEgLT4gIDBFKzEKK2RkbXhnMDU1IG1heG1hZyAgIDBFMiAgLTBFMiAtPiAgMEUrMgorZGRteGcwNTYgbWF4bWFnICAgMEUyICAtMEUxIC0+ICAwRSsyCitkZG14ZzA1NyBtYXhtYWcgICAwRTEgIC0wRTIgLT4gIDBFKzEKKworZGRteGcwNTggbWF4bWFnICAgMEUxICAgMEUxIC0+ICAwRSsxCitkZG14ZzA1OSBtYXhtYWcgICAwRTIgICAwRTIgLT4gIDBFKzIKK2RkbXhnMDYwIG1heG1hZyAgIDBFMiAgIDBFMSAtPiAgMEUrMgorZGRteGcwNjEgbWF4bWFnICAgMEUxICAgMEUyIC0+ICAwRSsyCitkZG14ZzA2MiBtYXhtYWcgIC0wRTEgIC0wRTEgLT4gLTBFKzEKK2RkbXhnMDYzIG1heG1hZyAgLTBFMiAgLTBFMiAtPiAtMEUrMgorZGRteGcwNjQgbWF4bWFnICAtMEUyICAtMEUxIC0+IC0wRSsxCitkZG14ZzA2NSBtYXhtYWcgIC0wRTEgIC0wRTIgLT4gLTBFKzEKKworLS0gU3BlY2lhbHMKK2RkbXhnMDkwIG1heG1hZyAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CitkZG14ZzA5MSBtYXhtYWcgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZGRteGcwOTIgbWF4bWFnICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RkbXhnMDkzIG1heG1hZyAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkZG14ZzA5NCBtYXhtYWcgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZGRteGcwOTUgbWF4bWFnICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RkbXhnMDk2IG1heG1hZyAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkZG14ZzA5NyBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRteGcwOTggbWF4bWFnIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbXhnMDk5IG1heG1hZyAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkZG14ZzEwMCBtYXhtYWcgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRteGcxMDEgbWF4bWFnIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbXhnMTAyIG1heG1hZyAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZG14ZzEwMyBtYXhtYWcgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRteGcxMDQgbWF4bWFnICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbXhnMTA1IG1heG1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RkbXhnMTIwIG1heG1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkZG14ZzEyMSBtYXhtYWcgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZGRteGcxMjIgbWF4bWFnIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2RkbXhnMTIzIG1heG1hZyAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkZG14ZzEyNCBtYXhtYWcgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZGRteGcxMjUgbWF4bWFnIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2RkbXhnMTI2IG1heG1hZyAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkZG14ZzEyNyBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZGRteGcxMjggbWF4bWFnIC1JbmYgIC1JbmYgICAtPiAgLUluZmluaXR5CitkZG14ZzEyOSBtYXhtYWcgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRteGcxMzAgbWF4bWFnIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbXhnMTMxIG1heG1hZyAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZG14ZzEzMiBtYXhtYWcgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRteGcxMzMgbWF4bWFnICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbXhnMTM0IG1heG1hZyAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkZG14ZzEzNSBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK2RkbXhnMTQxIG1heG1hZyAgTmFOIC1JbmYgICAgLT4gLUluZmluaXR5CitkZG14ZzE0MiBtYXhtYWcgIE5hTiAtMTAwMCAgIC0+IC0xMDAwCitkZG14ZzE0MyBtYXhtYWcgIE5hTiAtMSAgICAgIC0+IC0xCitkZG14ZzE0NCBtYXhtYWcgIE5hTiAtMCAgICAgIC0+IC0wCitkZG14ZzE0NSBtYXhtYWcgIE5hTiAgMCAgICAgIC0+ICAwCitkZG14ZzE0NiBtYXhtYWcgIE5hTiAgMSAgICAgIC0+ICAxCitkZG14ZzE0NyBtYXhtYWcgIE5hTiAgMTAwMCAgIC0+ICAxMDAwCitkZG14ZzE0OCBtYXhtYWcgIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQorZGRteGcxNDkgbWF4bWFnICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZG14ZzE1MCBtYXhtYWcgLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQorZGRteGcxNTEgbWF4bWFnIC0xMDAwIE5hTiAgICAtPiAtMTAwMAorZGRteGcxNTIgbWF4bWFnIC0xICAgIE5hTiAgICAtPiAtMQorZGRteGcxNTMgbWF4bWFnIC0wICAgIE5hTiAgICAtPiAtMAorZGRteGcxNTQgbWF4bWFnICAwICAgIE5hTiAgICAtPiAgMAorZGRteGcxNTUgbWF4bWFnICAxICAgIE5hTiAgICAtPiAgMQorZGRteGcxNTYgbWF4bWFnICAxMDAwIE5hTiAgICAtPiAgMTAwMAorZGRteGcxNTcgbWF4bWFnICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKKworZGRteGcxNjEgbWF4bWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNjIgbWF4bWFnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNjMgbWF4bWFnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNjQgbWF4bWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNjUgbWF4bWFnICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNjYgbWF4bWFnICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNjcgbWF4bWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNjggbWF4bWFnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNjkgbWF4bWFnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNzAgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNzEgbWF4bWFnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNzIgbWF4bWFnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNzMgbWF4bWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNzQgbWF4bWFnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNzUgbWF4bWFnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNzYgbWF4bWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNzcgbWF4bWFnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNzggbWF4bWFnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxNzkgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZG14ZzE4MSBtYXhtYWcgIE5hTjkgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbXhnMTgyIG1heG1hZyAgTmFOOCAgICAgOSAgIC0+ICA5CitkZG14ZzE4MyBtYXhtYWcgLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRteGcxODQgbWF4bWFnIC1OYU4xICAgTmFOMTEgLT4gLU5hTjEKK2RkbXhnMTg1IG1heG1hZyAgTmFOMiAgIE5hTjEyIC0+ICBOYU4yCitkZG14ZzE4NiBtYXhtYWcgLU5hTjEzIC1OYU43ICAtPiAtTmFOMTMKK2RkbXhnMTg3IG1heG1hZyAgTmFOMTQgLU5hTjUgIC0+ICBOYU4xNAorCitkZG14ZzE4OCBtYXhtYWcgLUluZiAgICBOYU40ICAtPiAtSW5maW5pdHkKK2RkbXhnMTg5IG1heG1hZyAtOSAgICAgLU5hTjMgIC0+IC05CitkZG14ZzE5MCBtYXhtYWcgIEluZiAgICBOYU4yICAtPiAgSW5maW5pdHkKKworZGRteGcxOTEgbWF4bWFnICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTkyIG1heG1hZyAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE5MyBtYXhtYWcgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxOTQgbWF4bWFnICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTk1IG1heG1hZyAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE5NiBtYXhtYWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRteGcxOTcgbWF4bWFnICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnMTk4IG1heG1hZyAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZG14ZzE5OSBtYXhtYWcgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvbGQgcm91bmRpbmcgY2hlY2tzCitkZG14ZzIyMSBtYXhtYWcgMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDAKK2RkbXhnMjIyIG1heG1hZyAxIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMAorZGRteGcyMjMgbWF4bWFnIDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDAKK2RkbXhnMjI0IG1heG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwCitkZG14ZzIyNSBtYXhtYWcgMTIzNDU2Nzg5MCAgMSAgLT4gMTIzNDU2Nzg5MAorZGRteGcyMjYgbWF4bWFnIDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTAKK2RkbXhnMjI3IG1heG1hZyAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxCitkZG14ZzIyOCBtYXhtYWcgMSAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQorZGRteGcyMjkgbWF4bWFnIDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxCitkZG14ZzIzMCBtYXhtYWcgMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDEKK2RkbXhnMjMxIG1heG1hZyAxMjM0NTY3ODk2ICAxICAtPiAxMjM0NTY3ODk2CitkZG14ZzIzMiBtYXhtYWcgMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5NgorZGRteGcyMzMgbWF4bWFnIC0xMjM0NTY3ODkxICAxIC0+IC0xMjM0NTY3ODkxCitkZG14ZzIzNCBtYXhtYWcgMSAtMTIzNDU2Nzg5MSAgLT4gLTEyMzQ1Njc4OTEKK2RkbXhnMjM1IG1heG1hZyAtMTIzNDU2Nzg5MDEgMSAtPiAtMTIzNDU2Nzg5MDEKK2RkbXhnMjM2IG1heG1hZyAxIC0xMjM0NTY3ODkwMSAtPiAtMTIzNDU2Nzg5MDEKK2RkbXhnMjM3IG1heG1hZyAtMTIzNDU2Nzg5NiAgMSAtPiAtMTIzNDU2Nzg5NgorZGRteGcyMzggbWF4bWFnIDEgLTEyMzQ1Njc4OTYgIC0+IC0xMjM0NTY3ODk2CisKKy0tIGZyb20gZXhhbXBsZXMKK2RkbXhnMjgwIG1heG1hZyAnMycgICAnMicgIC0+ICAnMycKK2RkbXhnMjgxIG1heG1hZyAnLTEwJyAnMycgIC0+ICAnLTEwJworZGRteGcyODIgbWF4bWFnICcxLjAnICcxJyAgLT4gICcxJworZGRteGcyODMgbWF4bWFnICcxJyAnMS4wJyAgLT4gICcxJworZGRteGcyODQgbWF4bWFnICc3JyAnTmFOJyAgLT4gICc3JworCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQorLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KK2RkbXhnNDAxIG1heG1hZyAgSW5mICAgIDEuMSAgICAgLT4gIEluZmluaXR5CitkZG14ZzQwMiBtYXhtYWcgIDEuMSAgICAxICAgICAgIC0+ICAxLjEKK2RkbXhnNDAzIG1heG1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDEKK2RkbXhnNDA0IG1heG1hZyAgMS4wICAgIDAuMSAgICAgLT4gIDEuMAorZGRteGc0MDUgbWF4bWFnICAwLjEgICAgMC4xMCAgICAtPiAgMC4xCitkZG14ZzQwNiBtYXhtYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwCitkZG14ZzQwNyBtYXhtYWcgIDAuMTAgICAwICAgICAgIC0+ICAwLjEwCitkZG14ZzQwOCBtYXhtYWcgIDAgICAgICAwLjAgICAgIC0+ICAwCitkZG14ZzQwOSBtYXhtYWcgIDAuMCAgIC0wICAgICAgIC0+ICAwLjAKK2RkbXhnNDEwIG1heG1hZyAgMC4wICAgLTAuMCAgICAgLT4gIDAuMAorZGRteGc0MTEgbWF4bWFnICAwLjAwICAtMC4wICAgICAtPiAgMC4wMAorZGRteGc0MTIgbWF4bWFnICAwLjAgICAtMC4wMCAgICAtPiAgMC4wCitkZG14ZzQxMyBtYXhtYWcgIDAgICAgIC0wLjAgICAgIC0+ICAwCitkZG14ZzQxNCBtYXhtYWcgIDAgICAgIC0wICAgICAgIC0+ICAwCitkZG14ZzQxNSBtYXhtYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wLjAKK2RkbXhnNDE2IG1heG1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTAuMTAwCitkZG14ZzQxNyBtYXhtYWcgLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwMAorZGRteGc0MTggbWF4bWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xMAorZGRteGc0MTkgbWF4bWFnIC0wLjEgICAtMS4wICAgICAtPiAtMS4wCitkZG14ZzQyMCBtYXhtYWcgLTEuMCAgIC0xICAgICAgIC0+IC0xLjAKK2RkbXhnNDIxIG1heG1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQorZGRteGc0MjMgbWF4bWFnIC0xLjEgICAtSW5mICAgICAtPiAtSW5maW5pdHkKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorZGRteGc0MzEgbWF4bWFnICAxLjEgICAgSW5mICAgICAtPiAgSW5maW5pdHkKK2RkbXhnNDMyIG1heG1hZyAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQorZGRteGc0MzMgbWF4bWFnICAxLjAgICAgMSAgICAgICAtPiAgMQorZGRteGc0MzQgbWF4bWFnICAwLjEgICAgMS4wICAgICAtPiAgMS4wCitkZG14ZzQzNSBtYXhtYWcgIDAuMTAgICAwLjEgICAgIC0+ICAwLjEKK2RkbXhnNDM2IG1heG1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAKK2RkbXhnNDM3IG1heG1hZyAgMCAgICAgIDAuMTAgICAgLT4gIDAuMTAKK2RkbXhnNDM4IG1heG1hZyAgMC4wICAgIDAgICAgICAgLT4gIDAKK2RkbXhnNDM5IG1heG1hZyAtMCAgICAgIDAuMCAgICAgLT4gIDAuMAorZGRteGc0NDAgbWF4bWFnIC0wLjAgICAgMC4wICAgICAtPiAgMC4wCitkZG14ZzQ0MSBtYXhtYWcgLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwCitkZG14ZzQ0MiBtYXhtYWcgLTAuMDAgICAwLjAgICAgIC0+ICAwLjAKK2RkbXhnNDQzIG1heG1hZyAtMC4wICAgIDAgICAgICAgLT4gIDAKK2RkbXhnNDQ0IG1heG1hZyAtMCAgICAgIDAgICAgICAgLT4gIDAKK2RkbXhnNDQ1IG1heG1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTAuMAorZGRteGc0NDYgbWF4bWFnIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDAKK2RkbXhnNDQ3IG1heG1hZyAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAwCitkZG14ZzQ0OCBtYXhtYWcgLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwCitkZG14ZzQ0OSBtYXhtYWcgLTEuMCAgIC0wLjEgICAgIC0+IC0xLjAKK2RkbXhnNDUwIG1heG1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTEuMAorZGRteGc0NTEgbWF4bWFnIC0xLjEgICAtMSAgICAgICAtPiAtMS4xCitkZG14ZzQ1MyBtYXhtYWcgLUluZiAgIC0xLjEgICAgIC0+IC1JbmZpbml0eQorLS0gbGFyZ2llcworZGRteGc0NjAgbWF4bWFnICAxMDAwICAgMUUrMyAgICAtPiAgMUUrMworZGRteGc0NjEgbWF4bWFnICAxRSszICAgMTAwMCAgICAtPiAgMUUrMworZGRteGc0NjIgbWF4bWFnICAxMDAwICAtMUUrMyAgICAtPiAgMTAwMAorZGRteGc0NjMgbWF4bWFnICAxRSszICAtMTAwMCAgICAtPiAgMUUrMworZGRteGc0NjQgbWF4bWFnIC0xMDAwICAgMUUrMyAgICAtPiAgMUUrMworZGRteGc0NjUgbWF4bWFnIC0xRSszICAgMTAwMCAgICAtPiAgMTAwMAorZGRteGc0NjYgbWF4bWFnIC0xMDAwICAtMUUrMyAgICAtPiAtMTAwMAorZGRteGc0NjcgbWF4bWFnIC0xRSszICAtMTAwMCAgICAtPiAtMTAwMAorCistLSBzdWJub3JtYWxzCitkZG14ZzUxMCBtYXhtYWcgIDEuMDBFLTM4MyAgICAgICAwICAtPiAgIDEuMDBFLTM4MworZGRteGc1MTEgbWF4bWFnICAwLjFFLTM4MyAgICAgICAgMCAgLT4gICAxRS0zODQgICAgU3Vibm9ybWFsCitkZG14ZzUxMiBtYXhtYWcgIDAuMTBFLTM4MyAgICAgICAwICAtPiAgIDEuMEUtMzg0ICBTdWJub3JtYWwKK2RkbXhnNTEzIG1heG1hZyAgMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAgMS4wMEUtMzg0IFN1Ym5vcm1hbAorZGRteGc1MTQgbWF4bWFnICAwLjAxRS0zODMgICAgICAgMCAgLT4gICAxRS0zODUgICAgU3Vibm9ybWFsCitkZG14ZzUxNSBtYXhtYWcgIDAuOTk5RS0zODMgICAgICAwICAtPiAgIDkuOTlFLTM4NCBTdWJub3JtYWwKK2RkbXhnNTE2IG1heG1hZyAgMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAgOS45RS0zODUgIFN1Ym5vcm1hbAorZGRteGc1MTcgbWF4bWFnICAwLjAwOUUtMzgzICAgICAgMCAgLT4gICA5RS0zODYgICAgU3Vibm9ybWFsCitkZG14ZzUxOCBtYXhtYWcgIDAuMDAxRS0zODMgICAgICAwICAtPiAgIDFFLTM4NiAgICBTdWJub3JtYWwKK2RkbXhnNTE5IG1heG1hZyAgMC4wMDA5RS0zODMgICAgIDAgIC0+ICAgOUUtMzg3ICAgIFN1Ym5vcm1hbAorZGRteGc1MjAgbWF4bWFnICAwLjAwMDFFLTM4MyAgICAgMCAgLT4gICAxRS0zODcgICAgU3Vibm9ybWFsCisKK2RkbXhnNTMwIG1heG1hZyAtMS4wMEUtMzgzICAgICAgIDAgIC0+ICAtMS4wMEUtMzgzCitkZG14ZzUzMSBtYXhtYWcgLTAuMUUtMzgzICAgICAgICAwICAtPiAgLTFFLTM4NCAgICBTdWJub3JtYWwKK2RkbXhnNTMyIG1heG1hZyAtMC4xMEUtMzgzICAgICAgIDAgIC0+ICAtMS4wRS0zODQgIFN1Ym5vcm1hbAorZGRteGc1MzMgbWF4bWFnIC0wLjEwMEUtMzgzICAgICAgMCAgLT4gIC0xLjAwRS0zODQgU3Vibm9ybWFsCitkZG14ZzUzNCBtYXhtYWcgLTAuMDFFLTM4MyAgICAgICAwICAtPiAgLTFFLTM4NSAgICBTdWJub3JtYWwKK2RkbXhnNTM1IG1heG1hZyAtMC45OTlFLTM4MyAgICAgIDAgIC0+ICAtOS45OUUtMzg0IFN1Ym5vcm1hbAorZGRteGc1MzYgbWF4bWFnIC0wLjA5OUUtMzgzICAgICAgMCAgLT4gIC05LjlFLTM4NSAgU3Vibm9ybWFsCitkZG14ZzUzNyBtYXhtYWcgLTAuMDA5RS0zODMgICAgICAwICAtPiAgLTlFLTM4NiAgICBTdWJub3JtYWwKK2RkbXhnNTM4IG1heG1hZyAtMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAtMUUtMzg2ICAgIFN1Ym5vcm1hbAorZGRteGc1MzkgbWF4bWFnIC0wLjAwMDlFLTM4MyAgICAgMCAgLT4gIC05RS0zODcgICAgU3Vibm9ybWFsCitkZG14ZzU0MCBtYXhtYWcgLTAuMDAwMUUtMzgzICAgICAwICAtPiAgLTFFLTM4NyAgICBTdWJub3JtYWwKKworLS0gTnVsbCB0ZXN0cworZGRteGc5MDAgbWF4bWFnIDEwICAjICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbXhnOTAxIG1heG1hZyAgIyAxMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW4uZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW4uZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjk0MmZmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbi5kZWNUZXN0CkBAIC0wLDAgKzEsMzA5IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkTWluLmRlY1Rlc3QgLS0gZGVjRG91YmxlIG1pbm51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZG1pbjAwMSBtaW4gIC0yICAtMiAgLT4gLTIKK2RkbWluMDAyIG1pbiAgLTIgIC0xICAtPiAtMgorZGRtaW4wMDMgbWluICAtMiAgIDAgIC0+IC0yCitkZG1pbjAwNCBtaW4gIC0yICAgMSAgLT4gLTIKK2RkbWluMDA1IG1pbiAgLTIgICAyICAtPiAtMgorZGRtaW4wMDYgbWluICAtMSAgLTIgIC0+IC0yCitkZG1pbjAwNyBtaW4gIC0xICAtMSAgLT4gLTEKK2RkbWluMDA4IG1pbiAgLTEgICAwICAtPiAtMQorZGRtaW4wMDkgbWluICAtMSAgIDEgIC0+IC0xCitkZG1pbjAxMCBtaW4gIC0xICAgMiAgLT4gLTEKK2RkbWluMDExIG1pbiAgIDAgIC0yICAtPiAtMgorZGRtaW4wMTIgbWluICAgMCAgLTEgIC0+IC0xCitkZG1pbjAxMyBtaW4gICAwICAgMCAgLT4gIDAKK2RkbWluMDE0IG1pbiAgIDAgICAxICAtPiAgMAorZGRtaW4wMTUgbWluICAgMCAgIDIgIC0+ICAwCitkZG1pbjAxNiBtaW4gICAxICAtMiAgLT4gLTIKK2RkbWluMDE3IG1pbiAgIDEgIC0xICAtPiAtMQorZGRtaW4wMTggbWluICAgMSAgIDAgIC0+ICAwCitkZG1pbjAxOSBtaW4gICAxICAgMSAgLT4gIDEKK2RkbWluMDIwIG1pbiAgIDEgICAyICAtPiAgMQorZGRtaW4wMjEgbWluICAgMiAgLTIgIC0+IC0yCitkZG1pbjAyMiBtaW4gICAyICAtMSAgLT4gLTEKK2RkbWluMDIzIG1pbiAgIDIgICAwICAtPiAgMAorZGRtaW4wMjUgbWluICAgMiAgIDEgIC0+ICAxCitkZG1pbjAyNiBtaW4gICAyICAgMiAgLT4gIDIKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RkbWluMDMwIG1pbiAgIDAgICAgIDAgICAtPiAgMAorZGRtaW4wMzEgbWluICAgMCAgICAtMCAgIC0+IC0wCitkZG1pbjAzMiBtaW4gICAwICAgIC0wLjAgLT4gLTAuMAorZGRtaW4wMzMgbWluICAgMCAgICAgMC4wIC0+ICAwLjAKK2RkbWluMDM0IG1pbiAgLTAgICAgIDAgICAtPiAtMAorZGRtaW4wMzUgbWluICAtMCAgICAtMCAgIC0+IC0wCitkZG1pbjAzNiBtaW4gIC0wICAgIC0wLjAgLT4gLTAKK2RkbWluMDM3IG1pbiAgLTAgICAgIDAuMCAtPiAtMAorZGRtaW4wMzggbWluICAgMC4wICAgMCAgIC0+ICAwLjAKK2RkbWluMDM5IG1pbiAgIDAuMCAgLTAgICAtPiAtMAorZGRtaW4wNDAgbWluICAgMC4wICAtMC4wIC0+IC0wLjAKK2RkbWluMDQxIG1pbiAgIDAuMCAgIDAuMCAtPiAgMC4wCitkZG1pbjA0MiBtaW4gIC0wLjAgICAwICAgLT4gLTAuMAorZGRtaW4wNDMgbWluICAtMC4wICAtMCAgIC0+IC0wCitkZG1pbjA0NCBtaW4gIC0wLjAgIC0wLjAgLT4gLTAuMAorZGRtaW4wNDUgbWluICAtMC4wICAgMC4wIC0+IC0wLjAKKworZGRtaW4wNDYgbWluICAgMEUxICAtMEUxIC0+IC0wRSsxCitkZG1pbjA0NyBtaW4gIC0wRTEgICAwRTIgLT4gLTBFKzEKK2RkbWluMDQ4IG1pbiAgIDBFMiAgIDBFMSAtPiAgMEUrMQorZGRtaW4wNDkgbWluICAgMEUxICAgMEUyIC0+ICAwRSsxCitkZG1pbjA1MCBtaW4gIC0wRTMgIC0wRTIgLT4gLTBFKzMKK2RkbWluMDUxIG1pbiAgLTBFMiAgLTBFMyAtPiAtMEUrMworCistLSBTcGVjaWFscworZGRtaW4wOTAgbWluICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbWluMDkxIG1pbiAgSW5mICAtMTAwMCAgLT4gLTEwMDAKK2RkbWluMDkyIG1pbiAgSW5mICAtMSAgICAgLT4gLTEKK2RkbWluMDkzIG1pbiAgSW5mICAtMCAgICAgLT4gLTAKK2RkbWluMDk0IG1pbiAgSW5mICAgMCAgICAgLT4gIDAKK2RkbWluMDk1IG1pbiAgSW5mICAgMSAgICAgLT4gIDEKK2RkbWluMDk2IG1pbiAgSW5mICAgMTAwMCAgLT4gIDEwMDAKK2RkbWluMDk3IG1pbiAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkZG1pbjA5OCBtaW4gLTEwMDAgIEluZiAgIC0+IC0xMDAwCitkZG1pbjA5OSBtaW4gLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4xMDAgbWluIC0xICAgICBJbmYgICAtPiAtMQorZGRtaW4xMDEgbWluIC0wICAgICBJbmYgICAtPiAtMAorZGRtaW4xMDIgbWluICAwICAgICBJbmYgICAtPiAgMAorZGRtaW4xMDMgbWluICAxICAgICBJbmYgICAtPiAgMQorZGRtaW4xMDQgbWluICAxMDAwICBJbmYgICAtPiAgMTAwMAorZGRtaW4xMDUgbWluICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRtaW4xMjAgbWluIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbWluMTIxIG1pbiAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkZG1pbjEyMiBtaW4gLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGRtaW4xMjMgbWluIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RkbWluMTI0IG1pbiAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkZG1pbjEyNSBtaW4gLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZGRtaW4xMjYgbWluIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RkbWluMTI3IG1pbiAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjEyOCBtaW4gLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4xMjkgbWluIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbWluMTMwIG1pbiAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjEzMSBtaW4gLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4xMzIgbWluICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbWluMTMzIG1pbiAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkZG1pbjEzNCBtaW4gIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtaW4xMzUgbWluICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKKworLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzCitkZG1pbjE0MSBtaW4gIE5hTiAtSW5mICAgIC0+ICAtSW5maW5pdHkKK2RkbWluMTQyIG1pbiAgTmFOIC0xMDAwICAgLT4gIC0xMDAwCitkZG1pbjE0MyBtaW4gIE5hTiAtMSAgICAgIC0+ICAtMQorZGRtaW4xNDQgbWluICBOYU4gLTAgICAgICAtPiAgLTAKK2RkbWluMTQ1IG1pbiAgTmFOICAwICAgICAgLT4gIDAKK2RkbWluMTQ2IG1pbiAgTmFOICAxICAgICAgLT4gIDEKK2RkbWluMTQ3IG1pbiAgTmFOICAxMDAwICAgLT4gIDEwMDAKK2RkbWluMTQ4IG1pbiAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5CitkZG1pbjE0OSBtaW4gIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RkbWluMTUwIG1pbiAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5CitkZG1pbjE1MSBtaW4gLTEwMDAgTmFOICAgIC0+IC0xMDAwCitkZG1pbjE1MiBtaW4gLTEgICAtTmFOICAgIC0+IC0xCitkZG1pbjE1MyBtaW4gLTAgICAgTmFOICAgIC0+IC0wCitkZG1pbjE1NCBtaW4gIDAgICAtTmFOICAgIC0+ICAwCitkZG1pbjE1NSBtaW4gIDEgICAgTmFOICAgIC0+ICAxCitkZG1pbjE1NiBtaW4gIDEwMDAgTmFOICAgIC0+ICAxMDAwCitkZG1pbjE1NyBtaW4gIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQorCitkZG1pbjE2MSBtaW4gIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE2MiBtaW4gIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE2MyBtaW4gIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE2NCBtaW4gIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE2NSBtaW4gLXNOYU4gIDAgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE2NiBtaW4gLXNOYU4gIDEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE2NyBtaW4gIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE2OCBtaW4gIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE2OSBtaW4gIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE3MCBtaW4gIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE3MSBtaW4gLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE3MiBtaW4gLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE3MyBtaW4gLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE3NCBtaW4gLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE3NSBtaW4gIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE3NiBtaW4gIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE3NyBtaW4gIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE3OCBtaW4gIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE3OSBtaW4gIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkbWluMTgxIG1pbiAgTmFOOSAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbWluMTgyIG1pbiAtTmFOOCAgICA5OTkwICAtPiAgOTk5MAorZGRtaW4xODMgbWluICBOYU43MSAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZG1pbjE4NCBtaW4gIE5hTjEgICAgTmFONTQgLT4gIE5hTjEKK2RkbWluMTg1IG1pbiAgTmFOMjIgIC1OYU41MyAtPiAgTmFOMjIKK2RkbWluMTg2IG1pbiAtTmFOMyAgICBOYU42ICAtPiAtTmFOMworZGRtaW4xODcgbWluIC1OYU40NCAgIE5hTjcgIC0+IC1OYU40NAorCitkZG1pbjE4OCBtaW4gLUluZiAgICAgTmFONDEgLT4gLUluZmluaXR5CitkZG1pbjE4OSBtaW4gLTk5OTkgICAtTmFOMzMgLT4gLTk5OTkKK2RkbWluMTkwIG1pbiAgSW5mICAgICBOYU4yICAtPiAgSW5maW5pdHkKKworZGRtaW4xOTEgbWluICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTkyIG1pbiAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE5MyBtaW4gLXNOYU45NyAgTmFOOCAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xOTQgbWluICBzTmFONjkgc05hTjk0ICAtPiAgTmFONjkgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTk1IG1pbiAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE5NiBtaW4gLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRtaW4xOTcgbWluICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkbWluMTk4IG1pbiAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZG1pbjE5OSBtaW4gIE5hTiAgICBzTmFOODYgIC0+ICBOYU44NiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvbGQgcm91bmRpbmcgY2hlY2tzCitkZG1pbjIyMSBtaW4gLTEyMzQ1Njc4MDAwIDEgIC0+IC0xMjM0NTY3ODAwMAorZGRtaW4yMjIgbWluIDEgLTEyMzQ1Njc4MDAwICAtPiAtMTIzNDU2NzgwMDAKK2RkbWluMjIzIG1pbiAtMTIzNDU2NzgwMCAgMSAgLT4gLTEyMzQ1Njc4MDAKK2RkbWluMjI0IG1pbiAxIC0xMjM0NTY3ODAwICAgLT4gLTEyMzQ1Njc4MDAKK2RkbWluMjI1IG1pbiAtMTIzNDU2Nzg5MCAgMSAgLT4gLTEyMzQ1Njc4OTAKK2RkbWluMjI2IG1pbiAxIC0xMjM0NTY3ODkwICAgLT4gLTEyMzQ1Njc4OTAKK2RkbWluMjI3IG1pbiAtMTIzNDU2Nzg5MSAgMSAgLT4gLTEyMzQ1Njc4OTEKK2RkbWluMjI4IG1pbiAxIC0xMjM0NTY3ODkxICAgLT4gLTEyMzQ1Njc4OTEKK2RkbWluMjI5IG1pbiAtMTIzNDU2Nzg5MDEgMSAgLT4gLTEyMzQ1Njc4OTAxCitkZG1pbjIzMCBtaW4gMSAtMTIzNDU2Nzg5MDEgIC0+IC0xMjM0NTY3ODkwMQorZGRtaW4yMzEgbWluIC0xMjM0NTY3ODk2ICAxICAtPiAtMTIzNDU2Nzg5NgorZGRtaW4yMzIgbWluIDEgLTEyMzQ1Njc4OTYgICAtPiAtMTIzNDU2Nzg5NgorZGRtaW4yMzMgbWluIDEyMzQ1Njc4OTEgIDEgICAtPiAxCitkZG1pbjIzNCBtaW4gMSAxMjM0NTY3ODkxICAgIC0+IDEKK2RkbWluMjM1IG1pbiAxMjM0NTY3ODkwMSAxICAgLT4gMQorZGRtaW4yMzYgbWluIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkZG1pbjIzNyBtaW4gMTIzNDU2Nzg5NiAgMSAgIC0+IDEKK2RkbWluMjM4IG1pbiAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSBmcm9tIGV4YW1wbGVzCitkZG1pbjI4MCBtaW4gJzMnICAgJzInICAtPiAgJzInCitkZG1pbjI4MSBtaW4gJy0xMCcgJzMnICAtPiAgJy0xMCcKK2RkbWluMjgyIG1pbiAnMS4wJyAnMScgIC0+ICAnMS4wJworZGRtaW4yODMgbWluICcxJyAnMS4wJyAgLT4gICcxLjAnCitkZG1pbjI4NCBtaW4gJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQorZGRtaW40MDEgbWluICBJbmYgICAgMS4xICAgICAtPiAgMS4xCitkZG1pbjQwMiBtaW4gIDEuMSAgICAxICAgICAgIC0+ICAxCitkZG1pbjQwMyBtaW4gIDEgICAgICAxLjAgICAgIC0+ICAxLjAKK2RkbWluNDA0IG1pbiAgMS4wICAgIDAuMSAgICAgLT4gIDAuMQorZGRtaW40MDUgbWluICAwLjEgICAgMC4xMCAgICAtPiAgMC4xMAorZGRtaW40MDYgbWluICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMDAKK2RkbWluNDA3IG1pbiAgMC4xMCAgIDAgICAgICAgLT4gIDAKK2RkbWluNDA4IG1pbiAgMCAgICAgIDAuMCAgICAgLT4gIDAuMAorZGRtaW40MDkgbWluICAwLjAgICAtMCAgICAgICAtPiAtMAorZGRtaW40MTAgbWluICAwLjAgICAtMC4wICAgICAtPiAtMC4wCitkZG1pbjQxMSBtaW4gIDAuMDAgIC0wLjAgICAgIC0+IC0wLjAKK2RkbWluNDEyIG1pbiAgMC4wICAgLTAuMDAgICAgLT4gLTAuMDAKK2RkbWluNDEzIG1pbiAgMCAgICAgLTAuMCAgICAgLT4gLTAuMAorZGRtaW40MTQgbWluICAwICAgICAtMCAgICAgICAtPiAtMAorZGRtaW40MTUgbWluIC0wLjAgICAtMCAgICAgICAtPiAtMAorZGRtaW40MTYgbWluIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDAKK2RkbWluNDE3IG1pbiAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAKK2RkbWluNDE4IG1pbiAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMQorZGRtaW40MTkgbWluIC0wLjEgICAtMS4wICAgICAtPiAtMS4wCitkZG1pbjQyMCBtaW4gLTEuMCAgIC0xICAgICAgIC0+IC0xCitkZG1pbjQyMSBtaW4gLTEgICAgIC0xLjEgICAgIC0+IC0xLjEKK2RkbWluNDIzIG1pbiAtMS4xICAgLUluZiAgICAgLT4gLUluZmluaXR5CistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKK2RkbWluNDMxIG1pbiAgMS4xICAgIEluZiAgICAgLT4gIDEuMQorZGRtaW40MzIgbWluICAxICAgICAgMS4xICAgICAtPiAgMQorZGRtaW40MzMgbWluICAxLjAgICAgMSAgICAgICAtPiAgMS4wCitkZG1pbjQzNCBtaW4gIDAuMSAgICAxLjAgICAgIC0+ICAwLjEKK2RkbWluNDM1IG1pbiAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMTAKK2RkbWluNDM2IG1pbiAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAwCitkZG1pbjQzNyBtaW4gIDAgICAgICAwLjEwICAgIC0+ICAwCitkZG1pbjQzOCBtaW4gIDAuMCAgICAwICAgICAgIC0+ICAwLjAKK2RkbWluNDM5IG1pbiAtMCAgICAgIDAuMCAgICAgLT4gLTAKK2RkbWluNDQwIG1pbiAtMC4wICAgIDAuMCAgICAgLT4gLTAuMAorZGRtaW40NDEgbWluIC0wLjAgICAgMC4wMCAgICAtPiAtMC4wCitkZG1pbjQ0MiBtaW4gLTAuMDAgICAwLjAgICAgIC0+IC0wLjAwCitkZG1pbjQ0MyBtaW4gLTAuMCAgICAwICAgICAgIC0+IC0wLjAKK2RkbWluNDQ0IG1pbiAtMCAgICAgIDAgICAgICAgLT4gLTAKK2RkbWluNDQ1IG1pbiAtMCAgICAgLTAuMCAgICAgLT4gLTAKK2RkbWluNDQ2IG1pbiAtMC4xMDAgLTAgICAgICAgLT4gLTAuMTAwCitkZG1pbjQ0NyBtaW4gLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwCitkZG1pbjQ0OCBtaW4gLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEKK2RkbWluNDQ5IG1pbiAtMS4wICAgLTAuMSAgICAgLT4gLTEuMAorZGRtaW40NTAgbWluIC0xICAgICAtMS4wICAgICAtPiAtMQorZGRtaW40NTEgbWluIC0xLjEgICAtMSAgICAgICAtPiAtMS4xCitkZG1pbjQ1MyBtaW4gLUluZiAgIC0xLjEgICAgIC0+IC1JbmZpbml0eQorLS0gbGFyZ2llcworZGRtaW40NjAgbWluICAxMDAwICAgMUUrMyAgICAtPiAgMTAwMAorZGRtaW40NjEgbWluICAxRSszICAgMTAwMCAgICAtPiAgMTAwMAorZGRtaW40NjIgbWluICAxMDAwICAtMUUrMyAgICAtPiAtMUUrMworZGRtaW40NjMgbWluICAxRSszICAtMzg0ICAgIC0+IC0zODQKK2RkbWluNDY0IG1pbiAtMzg0ICAgMUUrMyAgICAtPiAtMzg0CitkZG1pbjQ2NSBtaW4gLTFFKzMgICAxMDAwICAgIC0+IC0xRSszCitkZG1pbjQ2NiBtaW4gLTM4NCAgLTFFKzMgICAgLT4gLTFFKzMKK2RkbWluNDY3IG1pbiAtMUUrMyAgLTM4NCAgICAtPiAtMUUrMworCistLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4KK2RkbWluNDcxIG1pbiAgICAgIDEuMCAgICAgICAwLjEgIC0+IDAuMQorZGRtaW40NzIgbWluICAgICAgMC4xICAgICAgIDEuMCAgLT4gMC4xCitkZG1pbjQ3MyBtaW4gICAgIDEwLjAgICAgICAgMC4xICAtPiAwLjEKK2RkbWluNDc0IG1pbiAgICAgIDAuMSAgICAgIDEwLjAgIC0+IDAuMQorZGRtaW40NzUgbWluICAgICAgMTAwICAgICAgIDEuMCAgLT4gMS4wCitkZG1pbjQ3NiBtaW4gICAgICAxLjAgICAgICAgMTAwICAtPiAxLjAKK2RkbWluNDc3IG1pbiAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDEwLjAKK2RkbWluNDc4IG1pbiAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwLjAKK2RkbWluNDc5IG1pbiAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDEwMC4wCitkZG1pbjQ4MCBtaW4gICAgMTAwLjAgICAgIDEwMDAwICAtPiAxMDAuMAorZGRtaW40ODEgbWluICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMC4wCitkZG1pbjQ4MiBtaW4gICAxMDAwLjAgICAgMTAwMDAwICAtPiAxMDAwLjAKK2RkbWluNDgzIG1pbiAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDEwMDAwLjAKK2RkbWluNDg0IG1pbiAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwLjAKKworLS0gc3Vibm9ybWFscworZGRtaW41MTAgbWluICAxLjAwRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1pbjUxMSBtaW4gIDAuMUUtMzgzICAgICAgICAwICAtPiAgIDAKK2RkbWluNTEyIG1pbiAgMC4xMEUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtaW41MTMgbWluICAwLjEwMEUtMzgzICAgICAgMCAgLT4gICAwCitkZG1pbjUxNCBtaW4gIDAuMDFFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbWluNTE1IG1pbiAgMC45OTlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtaW41MTYgbWluICAwLjA5OUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1pbjUxNyBtaW4gIDAuMDA5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbWluNTE4IG1pbiAgMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtaW41MTkgbWluICAwLjAwMDlFLTM4MyAgICAgMCAgLT4gICAwCitkZG1pbjUyMCBtaW4gIDAuMDAwMUUtMzgzICAgICAwICAtPiAgIDAKKworZGRtaW41MzAgbWluIC0xLjAwRS0zODMgICAgICAgMCAgLT4gIC0xLjAwRS0zODMKK2RkbWluNTMxIG1pbiAtMC4xRS0zODMgICAgICAgIDAgIC0+ICAtMUUtMzg0ICAgIFN1Ym5vcm1hbAorZGRtaW41MzIgbWluIC0wLjEwRS0zODMgICAgICAgMCAgLT4gIC0xLjBFLTM4NCAgU3Vibm9ybWFsCitkZG1pbjUzMyBtaW4gLTAuMTAwRS0zODMgICAgICAwICAtPiAgLTEuMDBFLTM4NCBTdWJub3JtYWwKK2RkbWluNTM0IG1pbiAtMC4wMUUtMzgzICAgICAgIDAgIC0+ICAtMUUtMzg1ICAgIFN1Ym5vcm1hbAorZGRtaW41MzUgbWluIC0wLjk5OUUtMzgzICAgICAgMCAgLT4gIC05Ljk5RS0zODQgU3Vibm9ybWFsCitkZG1pbjUzNiBtaW4gLTAuMDk5RS0zODMgICAgICAwICAtPiAgLTkuOUUtMzg1ICBTdWJub3JtYWwKK2RkbWluNTM3IG1pbiAtMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAtOUUtMzg2ICAgIFN1Ym5vcm1hbAorZGRtaW41MzggbWluIC0wLjAwMUUtMzgzICAgICAgMCAgLT4gIC0xRS0zODYgICAgU3Vibm9ybWFsCitkZG1pbjUzOSBtaW4gLTAuMDAwOUUtMzgzICAgICAwICAtPiAgLTlFLTM4NyAgICBTdWJub3JtYWwKK2RkbWluNTQwIG1pbiAtMC4wMDAxRS0zODMgICAgIDAgIC0+ICAtMUUtMzg3ICAgIFN1Ym5vcm1hbAorCisKKy0tIE51bGwgdGVzdHMKK2RkbWluOTAwIG1pbiAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbWluOTAxIG1pbiAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW5NYWcuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW5NYWcuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDEyZjFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbk1hZy5kZWNUZXN0CkBAIC0wLDAgKzEsMjkzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkTWluTWFnLmRlY1Rlc3QgLS0gZGVjRG91YmxlIG1pbm51bW1hZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZG1uZzAwMSBtaW5tYWcgIC0yICAtMiAgLT4gLTIKK2RkbW5nMDAyIG1pbm1hZyAgLTIgIC0xICAtPiAtMQorZGRtbmcwMDMgbWlubWFnICAtMiAgIDAgIC0+ICAwCitkZG1uZzAwNCBtaW5tYWcgIC0yICAgMSAgLT4gIDEKK2RkbW5nMDA1IG1pbm1hZyAgLTIgICAyICAtPiAtMgorZGRtbmcwMDYgbWlubWFnICAtMSAgLTIgIC0+IC0xCitkZG1uZzAwNyBtaW5tYWcgIC0xICAtMSAgLT4gLTEKK2RkbW5nMDA4IG1pbm1hZyAgLTEgICAwICAtPiAgMAorZGRtbmcwMDkgbWlubWFnICAtMSAgIDEgIC0+IC0xCitkZG1uZzAxMCBtaW5tYWcgIC0xICAgMiAgLT4gLTEKK2RkbW5nMDExIG1pbm1hZyAgIDAgIC0yICAtPiAgMAorZGRtbmcwMTIgbWlubWFnICAgMCAgLTEgIC0+ICAwCitkZG1uZzAxMyBtaW5tYWcgICAwICAgMCAgLT4gIDAKK2RkbW5nMDE0IG1pbm1hZyAgIDAgICAxICAtPiAgMAorZGRtbmcwMTUgbWlubWFnICAgMCAgIDIgIC0+ICAwCitkZG1uZzAxNiBtaW5tYWcgICAxICAtMiAgLT4gIDEKK2RkbW5nMDE3IG1pbm1hZyAgIDEgIC0xICAtPiAtMQorZGRtbmcwMTggbWlubWFnICAgMSAgIDAgIC0+ICAwCitkZG1uZzAxOSBtaW5tYWcgICAxICAgMSAgLT4gIDEKK2RkbW5nMDIwIG1pbm1hZyAgIDEgICAyICAtPiAgMQorZGRtbmcwMjEgbWlubWFnICAgMiAgLTIgIC0+IC0yCitkZG1uZzAyMiBtaW5tYWcgICAyICAtMSAgLT4gLTEKK2RkbW5nMDIzIG1pbm1hZyAgIDIgICAwICAtPiAgMAorZGRtbmcwMjUgbWlubWFnICAgMiAgIDEgIC0+ICAxCitkZG1uZzAyNiBtaW5tYWcgICAyICAgMiAgLT4gIDIKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RkbW5nMDMwIG1pbm1hZyAgIDAgICAgIDAgICAtPiAgMAorZGRtbmcwMzEgbWlubWFnICAgMCAgICAtMCAgIC0+IC0wCitkZG1uZzAzMiBtaW5tYWcgICAwICAgIC0wLjAgLT4gLTAuMAorZGRtbmcwMzMgbWlubWFnICAgMCAgICAgMC4wIC0+ICAwLjAKK2RkbW5nMDM0IG1pbm1hZyAgLTAgICAgIDAgICAtPiAtMAorZGRtbmcwMzUgbWlubWFnICAtMCAgICAtMCAgIC0+IC0wCitkZG1uZzAzNiBtaW5tYWcgIC0wICAgIC0wLjAgLT4gLTAKK2RkbW5nMDM3IG1pbm1hZyAgLTAgICAgIDAuMCAtPiAtMAorZGRtbmcwMzggbWlubWFnICAgMC4wICAgMCAgIC0+ICAwLjAKK2RkbW5nMDM5IG1pbm1hZyAgIDAuMCAgLTAgICAtPiAtMAorZGRtbmcwNDAgbWlubWFnICAgMC4wICAtMC4wIC0+IC0wLjAKK2RkbW5nMDQxIG1pbm1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wCitkZG1uZzA0MiBtaW5tYWcgIC0wLjAgICAwICAgLT4gLTAuMAorZGRtbmcwNDMgbWlubWFnICAtMC4wICAtMCAgIC0+IC0wCitkZG1uZzA0NCBtaW5tYWcgIC0wLjAgIC0wLjAgLT4gLTAuMAorZGRtbmcwNDUgbWlubWFnICAtMC4wICAgMC4wIC0+IC0wLjAKKworZGRtbmcwNDYgbWlubWFnICAgMEUxICAtMEUxIC0+IC0wRSsxCitkZG1uZzA0NyBtaW5tYWcgIC0wRTEgICAwRTIgLT4gLTBFKzEKK2RkbW5nMDQ4IG1pbm1hZyAgIDBFMiAgIDBFMSAtPiAgMEUrMQorZGRtbmcwNDkgbWlubWFnICAgMEUxICAgMEUyIC0+ICAwRSsxCitkZG1uZzA1MCBtaW5tYWcgIC0wRTMgIC0wRTIgLT4gLTBFKzMKK2RkbW5nMDUxIG1pbm1hZyAgLTBFMiAgLTBFMyAtPiAtMEUrMworCistLSBTcGVjaWFscworZGRtbmcwOTAgbWlubWFnICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbW5nMDkxIG1pbm1hZyAgSW5mICAtMTAwMCAgLT4gLTEwMDAKK2RkbW5nMDkyIG1pbm1hZyAgSW5mICAtMSAgICAgLT4gLTEKK2RkbW5nMDkzIG1pbm1hZyAgSW5mICAtMCAgICAgLT4gLTAKK2RkbW5nMDk0IG1pbm1hZyAgSW5mICAgMCAgICAgLT4gIDAKK2RkbW5nMDk1IG1pbm1hZyAgSW5mICAgMSAgICAgLT4gIDEKK2RkbW5nMDk2IG1pbm1hZyAgSW5mICAgMTAwMCAgLT4gIDEwMDAKK2RkbW5nMDk3IG1pbm1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkZG1uZzA5OCBtaW5tYWcgLTEwMDAgIEluZiAgIC0+IC0xMDAwCitkZG1uZzA5OSBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZGRtbmcxMDAgbWlubWFnIC0xICAgICBJbmYgICAtPiAtMQorZGRtbmcxMDEgbWlubWFnIC0wICAgICBJbmYgICAtPiAtMAorZGRtbmcxMDIgbWlubWFnICAwICAgICBJbmYgICAtPiAgMAorZGRtbmcxMDMgbWlubWFnICAxICAgICBJbmYgICAtPiAgMQorZGRtbmcxMDQgbWlubWFnICAxMDAwICBJbmYgICAtPiAgMTAwMAorZGRtbmcxMDUgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRtbmcxMjAgbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbW5nMTIxIG1pbm1hZyAtSW5mICAtMTAwMCAgLT4gLTEwMDAKK2RkbW5nMTIyIG1pbm1hZyAtSW5mICAtMSAgICAgLT4gLTEKK2RkbW5nMTIzIG1pbm1hZyAtSW5mICAtMCAgICAgLT4gLTAKK2RkbW5nMTI0IG1pbm1hZyAtSW5mICAgMCAgICAgLT4gIDAKK2RkbW5nMTI1IG1pbm1hZyAtSW5mICAgMSAgICAgLT4gIDEKK2RkbW5nMTI2IG1pbm1hZyAtSW5mICAgMTAwMCAgLT4gIDEwMDAKK2RkbW5nMTI3IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkZG1uZzEyOCBtaW5tYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtbmcxMjkgbWlubWFnIC0xMDAwIC1JbmYgICAtPiAtMTAwMAorZGRtbmcxMzAgbWlubWFnIC0xICAgIC1JbmYgICAtPiAtMQorZGRtbmcxMzEgbWlubWFnIC0wICAgIC1JbmYgICAtPiAtMAorZGRtbmcxMzIgbWlubWFnICAwICAgIC1JbmYgICAtPiAgMAorZGRtbmcxMzMgbWlubWFnICAxICAgIC1JbmYgICAtPiAgMQorZGRtbmcxMzQgbWlubWFnICAxMDAwIC1JbmYgICAtPiAgMTAwMAorZGRtbmcxMzUgbWlubWFnICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKKworLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzCitkZG1uZzE0MSBtaW5tYWcgIE5hTiAtSW5mICAgIC0+ICAtSW5maW5pdHkKK2RkbW5nMTQyIG1pbm1hZyAgTmFOIC0xMDAwICAgLT4gIC0xMDAwCitkZG1uZzE0MyBtaW5tYWcgIE5hTiAtMSAgICAgIC0+ICAtMQorZGRtbmcxNDQgbWlubWFnICBOYU4gLTAgICAgICAtPiAgLTAKK2RkbW5nMTQ1IG1pbm1hZyAgTmFOICAwICAgICAgLT4gIDAKK2RkbW5nMTQ2IG1pbm1hZyAgTmFOICAxICAgICAgLT4gIDEKK2RkbW5nMTQ3IG1pbm1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDAKK2RkbW5nMTQ4IG1pbm1hZyAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5CitkZG1uZzE0OSBtaW5tYWcgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RkbW5nMTUwIG1pbm1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5CitkZG1uZzE1MSBtaW5tYWcgLTEwMDAgTmFOICAgIC0+IC0xMDAwCitkZG1uZzE1MiBtaW5tYWcgLTEgICAtTmFOICAgIC0+IC0xCitkZG1uZzE1MyBtaW5tYWcgLTAgICAgTmFOICAgIC0+IC0wCitkZG1uZzE1NCBtaW5tYWcgIDAgICAtTmFOICAgIC0+ICAwCitkZG1uZzE1NSBtaW5tYWcgIDEgICAgTmFOICAgIC0+ICAxCitkZG1uZzE1NiBtaW5tYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwCitkZG1uZzE1NyBtaW5tYWcgIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQorCitkZG1uZzE2MSBtaW5tYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE2MiBtaW5tYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE2MyBtaW5tYWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE2NCBtaW5tYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE2NSBtaW5tYWcgLXNOYU4gIDAgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE2NiBtaW5tYWcgLXNOYU4gIDEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE2NyBtaW5tYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE2OCBtaW5tYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE2OSBtaW5tYWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE3MCBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE3MSBtaW5tYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE3MiBtaW5tYWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE3MyBtaW5tYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE3NCBtaW5tYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE3NSBtaW5tYWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE3NiBtaW5tYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE3NyBtaW5tYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE3OCBtaW5tYWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE3OSBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkbW5nMTgxIG1pbm1hZyAgTmFOOSAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbW5nMTgyIG1pbm1hZyAtTmFOOCAgICA5OTkwICAtPiAgOTk5MAorZGRtbmcxODMgbWlubWFnICBOYU43MSAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkZG1uZzE4NCBtaW5tYWcgIE5hTjEgICAgTmFONTQgLT4gIE5hTjEKK2RkbW5nMTg1IG1pbm1hZyAgTmFOMjIgIC1OYU41MyAtPiAgTmFOMjIKK2RkbW5nMTg2IG1pbm1hZyAtTmFOMyAgICBOYU42ICAtPiAtTmFOMworZGRtbmcxODcgbWlubWFnIC1OYU40NCAgIE5hTjcgIC0+IC1OYU40NAorCitkZG1uZzE4OCBtaW5tYWcgLUluZiAgICAgTmFONDEgLT4gLUluZmluaXR5CitkZG1uZzE4OSBtaW5tYWcgLTk5OTkgICAtTmFOMzMgLT4gLTk5OTkKK2RkbW5nMTkwIG1pbm1hZyAgSW5mICAgICBOYU4yICAtPiAgSW5maW5pdHkKKworZGRtbmcxOTEgbWlubWFnICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTkyIG1pbm1hZyAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE5MyBtaW5tYWcgLXNOYU45NyAgTmFOOCAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxOTQgbWlubWFnICBzTmFONjkgc05hTjk0ICAtPiAgTmFONjkgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTk1IG1pbm1hZyAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE5NiBtaW5tYWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRtbmcxOTcgbWlubWFnICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5nMTk4IG1pbm1hZyAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzE5OSBtaW5tYWcgIE5hTiAgICBzTmFOODYgIC0+ICBOYU44NiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvbGQgcm91bmRpbmcgY2hlY2tzCitkZG1uZzIyMSBtaW5tYWcgLTEyMzQ1Njc4MDAwIDEgIC0+IDEKK2RkbW5nMjIyIG1pbm1hZyAxIC0xMjM0NTY3ODAwMCAgLT4gMQorZGRtbmcyMjMgbWlubWFnIC0xMjM0NTY3ODAwICAxICAtPiAxCitkZG1uZzIyNCBtaW5tYWcgMSAtMTIzNDU2NzgwMCAgIC0+IDEKK2RkbW5nMjI1IG1pbm1hZyAtMTIzNDU2Nzg5MCAgMSAgLT4gMQorZGRtbmcyMjYgbWlubWFnIDEgLTEyMzQ1Njc4OTAgICAtPiAxCitkZG1uZzIyNyBtaW5tYWcgLTEyMzQ1Njc4OTEgIDEgIC0+IDEKK2RkbW5nMjI4IG1pbm1hZyAxIC0xMjM0NTY3ODkxICAgLT4gMQorZGRtbmcyMjkgbWlubWFnIC0xMjM0NTY3ODkwMSAxICAtPiAxCitkZG1uZzIzMCBtaW5tYWcgMSAtMTIzNDU2Nzg5MDEgIC0+IDEKK2RkbW5nMjMxIG1pbm1hZyAtMTIzNDU2Nzg5NiAgMSAgLT4gMQorZGRtbmcyMzIgbWlubWFnIDEgLTEyMzQ1Njc4OTYgICAtPiAxCitkZG1uZzIzMyBtaW5tYWcgMTIzNDU2Nzg5MSAgMSAgIC0+IDEKK2RkbW5nMjM0IG1pbm1hZyAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZGRtbmcyMzUgbWlubWFnIDEyMzQ1Njc4OTAxIDEgICAtPiAxCitkZG1uZzIzNiBtaW5tYWcgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK2RkbW5nMjM3IG1pbm1hZyAxMjM0NTY3ODk2ICAxICAgLT4gMQorZGRtbmcyMzggbWlubWFnIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKKy0tIGZyb20gZXhhbXBsZXMKK2RkbW5nMjgwIG1pbm1hZyAnMycgICAnMicgIC0+ICAnMicKK2RkbW5nMjgxIG1pbm1hZyAnLTEwJyAnMycgIC0+ICAnMycKK2RkbW5nMjgyIG1pbm1hZyAnMS4wJyAnMScgIC0+ICAnMS4wJworZGRtbmcyODMgbWlubWFnICcxJyAnMS4wJyAgLT4gICcxLjAnCitkZG1uZzI4NCBtaW5tYWcgJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQorZGRtbmc0MDEgbWlubWFnICBJbmYgICAgMS4xICAgICAtPiAgMS4xCitkZG1uZzQwMiBtaW5tYWcgIDEuMSAgICAxICAgICAgIC0+ICAxCitkZG1uZzQwMyBtaW5tYWcgIDEgICAgICAxLjAgICAgIC0+ICAxLjAKK2RkbW5nNDA0IG1pbm1hZyAgMS4wICAgIDAuMSAgICAgLT4gIDAuMQorZGRtbmc0MDUgbWlubWFnICAwLjEgICAgMC4xMCAgICAtPiAgMC4xMAorZGRtbmc0MDYgbWlubWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMDAKK2RkbW5nNDA3IG1pbm1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDAKK2RkbW5nNDA4IG1pbm1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDAuMAorZGRtbmc0MDkgbWlubWFnICAwLjAgICAtMCAgICAgICAtPiAtMAorZGRtbmc0MTAgbWlubWFnICAwLjAgICAtMC4wICAgICAtPiAtMC4wCitkZG1uZzQxMSBtaW5tYWcgIDAuMDAgIC0wLjAgICAgIC0+IC0wLjAKK2RkbW5nNDEyIG1pbm1hZyAgMC4wICAgLTAuMDAgICAgLT4gLTAuMDAKK2RkbW5nNDEzIG1pbm1hZyAgMCAgICAgLTAuMCAgICAgLT4gLTAuMAorZGRtbmc0MTQgbWlubWFnICAwICAgICAtMCAgICAgICAtPiAtMAorZGRtbmc0MTUgbWlubWFnIC0wLjAgICAtMCAgICAgICAtPiAtMAorZGRtbmc0MTYgbWlubWFnIC0wICAgICAtMC4xMDAgICAtPiAtMAorZGRtbmc0MTcgbWlubWFnIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMAorZGRtbmc0MTggbWlubWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xCitkZG1uZzQxOSBtaW5tYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0wLjEKK2RkbW5nNDIwIG1pbm1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEKK2RkbW5nNDIxIG1pbm1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTEKK2RkbW5nNDIzIG1pbm1hZyAtMS4xICAgLUluZiAgICAgLT4gLTEuMQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkCitkZG1uZzQzMSBtaW5tYWcgIDEuMSAgICBJbmYgICAgIC0+ICAxLjEKK2RkbW5nNDMyIG1pbm1hZyAgMSAgICAgIDEuMSAgICAgLT4gIDEKK2RkbW5nNDMzIG1pbm1hZyAgMS4wICAgIDEgICAgICAgLT4gIDEuMAorZGRtbmc0MzQgbWlubWFnICAwLjEgICAgMS4wICAgICAtPiAgMC4xCitkZG1uZzQzNSBtaW5tYWcgIDAuMTAgICAwLjEgICAgIC0+ICAwLjEwCitkZG1uZzQzNiBtaW5tYWcgIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwMAorZGRtbmc0MzcgbWlubWFnICAwICAgICAgMC4xMCAgICAtPiAgMAorZGRtbmc0MzggbWlubWFnICAwLjAgICAgMCAgICAgICAtPiAgMC4wCitkZG1uZzQzOSBtaW5tYWcgLTAgICAgICAwLjAgICAgIC0+IC0wCitkZG1uZzQ0MCBtaW5tYWcgLTAuMCAgICAwLjAgICAgIC0+IC0wLjAKK2RkbW5nNDQxIG1pbm1hZyAtMC4wICAgIDAuMDAgICAgLT4gLTAuMAorZGRtbmc0NDIgbWlubWFnIC0wLjAwICAgMC4wICAgICAtPiAtMC4wMAorZGRtbmc0NDMgbWlubWFnIC0wLjAgICAgMCAgICAgICAtPiAtMC4wCitkZG1uZzQ0NCBtaW5tYWcgLTAgICAgICAwICAgICAgIC0+IC0wCitkZG1uZzQ0NSBtaW5tYWcgLTAgICAgIC0wLjAgICAgIC0+IC0wCitkZG1uZzQ0NiBtaW5tYWcgLTAuMTAwIC0wICAgICAgIC0+IC0wCitkZG1uZzQ0NyBtaW5tYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwCitkZG1uZzQ0OCBtaW5tYWcgLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEKK2RkbW5nNDQ5IG1pbm1hZyAtMS4wICAgLTAuMSAgICAgLT4gLTAuMQorZGRtbmc0NTAgbWlubWFnIC0xICAgICAtMS4wICAgICAtPiAtMQorZGRtbmc0NTEgbWlubWFnIC0xLjEgICAtMSAgICAgICAtPiAtMQorZGRtbmc0NTMgbWlubWFnIC1JbmYgICAtMS4xICAgICAtPiAtMS4xCistLSBsYXJnaWVzCitkZG1uZzQ2MCBtaW5tYWcgIDEwMDAgICAxRSszICAgIC0+ICAxMDAwCitkZG1uZzQ2MSBtaW5tYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwCitkZG1uZzQ2MiBtaW5tYWcgIDEwMDAgIC0xRSszICAgIC0+IC0xRSszCitkZG1uZzQ2MyBtaW5tYWcgIDFFKzMgICAtMzg0ICAgIC0+IC0zODQKK2RkbW5nNDY0IG1pbm1hZyAtMzg0ICAgIDFFKzMgICAgLT4gLTM4NAorZGRtbmc0NjUgbWlubWFnIC0xRSszICAgMTAwMCAgICAtPiAtMUUrMworZGRtbmc0NjYgbWlubWFnIC0zODQgICAtMUUrMyAgICAtPiAtMzg0CitkZG1uZzQ2NyBtaW5tYWcgLTFFKzMgICAtMzg0ICAgIC0+IC0zODQKKworLS0gc3Vibm9ybWFscworZGRtbmc1MTAgbWlubWFnICAxLjAwRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1uZzUxMSBtaW5tYWcgIDAuMUUtMzgzICAgICAgICAwICAtPiAgIDAKK2RkbW5nNTEyIG1pbm1hZyAgMC4xMEUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtbmc1MTMgbWlubWFnICAwLjEwMEUtMzgzICAgICAgMCAgLT4gICAwCitkZG1uZzUxNCBtaW5tYWcgIDAuMDFFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbW5nNTE1IG1pbm1hZyAgMC45OTlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtbmc1MTYgbWlubWFnICAwLjA5OUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1uZzUxNyBtaW5tYWcgIDAuMDA5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbW5nNTE4IG1pbm1hZyAgMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtbmc1MTkgbWlubWFnICAwLjAwMDlFLTM4MyAgICAgMCAgLT4gICAwCitkZG1uZzUyMCBtaW5tYWcgIDAuMDAwMUUtMzgzICAgICAwICAtPiAgIDAKKworZGRtbmc1MzAgbWlubWFnIC0xLjAwRS0zODMgICAgICAgMCAgLT4gICAwCitkZG1uZzUzMSBtaW5tYWcgLTAuMUUtMzgzICAgICAgICAwICAtPiAgIDAKK2RkbW5nNTMyIG1pbm1hZyAtMC4xMEUtMzgzICAgICAgIDAgIC0+ICAgMAorZGRtbmc1MzMgbWlubWFnIC0wLjEwMEUtMzgzICAgICAgMCAgLT4gICAwCitkZG1uZzUzNCBtaW5tYWcgLTAuMDFFLTM4MyAgICAgICAwICAtPiAgIDAKK2RkbW5nNTM1IG1pbm1hZyAtMC45OTlFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtbmc1MzYgbWlubWFnIC0wLjA5OUUtMzgzICAgICAgMCAgLT4gICAwCitkZG1uZzUzNyBtaW5tYWcgLTAuMDA5RS0zODMgICAgICAwICAtPiAgIDAKK2RkbW5nNTM4IG1pbm1hZyAtMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAgMAorZGRtbmc1MzkgbWlubWFnIC0wLjAwMDlFLTM4MyAgICAgMCAgLT4gICAwCitkZG1uZzU0MCBtaW5tYWcgLTAuMDAwMUUtMzgzICAgICAwICAtPiAgIDAKKworCistLSBOdWxsIHRlc3RzCitkZG1uZzkwMCBtaW5tYWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG1uZzkwMSBtaW5tYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWludXMuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW51cy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZmZmZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWludXMuZGVjVGVzdApAQCAtMCwwICsxLDg4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkTWludXMuZGVjVGVzdCAtLSBkZWNEb3VibGUgMC14ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZGRtbnMwMDEgbWludXMgICAgICAgKzcuNTAgIC0+IC03LjUwCisKKy0tIEluZmluaXRpZXMKK2RkbW5zMDExIG1pbnVzICBJbmZpbml0eSAgICAtPiAtSW5maW5pdHkKK2RkbW5zMDEyIG1pbnVzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RkbW5zMDIxIG1pbnVzICAgICAgICAgTmFOICAtPiBOYU4KK2RkbW5zMDIyIG1pbnVzICAgICAgICAtTmFOICAtPiAtTmFOCitkZG1uczAyMyBtaW51cyAgICAgICAgc05hTiAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbnMwMjQgbWludXMgICAgICAgLXNOYU4gIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZGRtbnMwMzEgbWludXMgICAgICAgTmFOMTMgIC0+IE5hTjEzCitkZG1uczAzMiBtaW51cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzCitkZG1uczAzMyBtaW51cyAgICAgIHNOYU4xMyAgLT4gTmFOMTMgICBJbnZhbGlkX29wZXJhdGlvbgorZGRtbnMwMzQgbWludXMgICAgIC1zTmFOMTMgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5zMDM1IG1pbnVzICAgICAgIE5hTjcwICAtPiBOYU43MAorZGRtbnMwMzYgbWludXMgICAgICAtTmFONzAgIC0+IC1OYU43MAorZGRtbnMwMzcgbWludXMgICAgICBzTmFOMTAxIC0+IE5hTjEwMSAgSW52YWxpZF9vcGVyYXRpb24KK2RkbW5zMDM4IG1pbnVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZpbml0ZXMKK2RkbW5zMTAxIG1pbnVzICAgICAgICAgIDcgICAtPiAtNworZGRtbnMxMDIgbWludXMgICAgICAgICAtNyAgIC0+IDcKK2RkbW5zMTAzIG1pbnVzICAgICAgICAgNzUgICAtPiAtNzUKK2RkbW5zMTA0IG1pbnVzICAgICAgICAtNzUgICAtPiA3NQorZGRtbnMxMDUgbWludXMgICAgICAgNy41MCAgIC0+IC03LjUwCitkZG1uczEwNiBtaW51cyAgICAgIC03LjUwICAgLT4gNy41MAorZGRtbnMxMDcgbWludXMgICAgICAgNy41MDAgIC0+IC03LjUwMAorZGRtbnMxMDggbWludXMgICAgICAtNy41MDAgIC0+IDcuNTAwCisKKy0tIHplcm9zCitkZG1uczExMSBtaW51cyAgICAgICAgICAwICAgLT4gMAorZGRtbnMxMTIgbWludXMgICAgICAgICAtMCAgIC0+IDAKK2RkbW5zMTEzIG1pbnVzICAgICAgIDBFKzQgICAtPiAwRSs0CitkZG1uczExNCBtaW51cyAgICAgIC0wRSs0ICAgLT4gMEUrNAorZGRtbnMxMTUgbWludXMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorZGRtbnMxMTYgbWludXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorZGRtbnMxMTcgbWludXMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZGRtbnMxMTggbWludXMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZGRtbnMxMjEgbWludXMgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MgorZGRtbnMxMjIgbWludXMgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyCitkZG1uczEyMyBtaW51cyAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxCitkZG1uczEyNCBtaW51cyAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RkbW5zMTMxIG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbW5zMTMyIG1pbnVzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gLTFFLTM4MworZGRtbnMxMzMgbWludXMgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRtbnMxMzQgbWludXMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4IFN1Ym5vcm1hbAorCitkZG1uczEzNSBtaW51cyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OCBTdWJub3JtYWwKK2RkbW5zMTM2IG1pbnVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRtbnMxMzcgbWludXMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKK2RkbW5zMTM4IG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NApkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE11bHRpcGx5LmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTXVsdGlwbHkuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODczZjgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE11bHRpcGx5LmRlY1Rlc3QKQEAgLTAsMCArMSw1NTMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRNdWx0aXBseS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBtdWx0aXBsaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY0RvdWJsZXMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUKKy0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNEb3VibGUKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkZG11bDAwMCBtdWx0aXBseSAyICAgICAgMiAtPiA0CitkZG11bDAwMSBtdWx0aXBseSAyICAgICAgMyAtPiA2CitkZG11bDAwMiBtdWx0aXBseSA1ICAgICAgMSAtPiA1CitkZG11bDAwMyBtdWx0aXBseSA1ICAgICAgMiAtPiAxMAorZGRtdWwwMDQgbXVsdGlwbHkgMS4yMCAgIDIgLT4gMi40MAorZGRtdWwwMDUgbXVsdGlwbHkgMS4yMCAgIDAgLT4gMC4wMAorZGRtdWwwMDYgbXVsdGlwbHkgMS4yMCAgLTIgLT4gLTIuNDAKK2RkbXVsMDA3IG11bHRpcGx5IC0xLjIwICAyIC0+IC0yLjQwCitkZG11bDAwOCBtdWx0aXBseSAtMS4yMCAgMCAtPiAtMC4wMAorZGRtdWwwMDkgbXVsdGlwbHkgLTEuMjAgLTIgLT4gMi40MAorZGRtdWwwMTAgbXVsdGlwbHkgNS4wOSA3LjEgLT4gMzYuMTM5CitkZG11bDAxMSBtdWx0aXBseSAyLjUgICAgNCAtPiAxMC4wCitkZG11bDAxMiBtdWx0aXBseSAyLjUwICAgNCAtPiAxMC4wMAorZGRtdWwwMTMgbXVsdGlwbHkgMS4yMzQ1Njc4OSAxLjAwMDAwMDAwIC0+IDEuMjM0NTY3ODkwMDAwMDAwIFJvdW5kZWQKK2RkbXVsMDE1IG11bHRpcGx5IDIuNTAgICA0IC0+IDEwLjAwCitkZG11bDAxNiBtdWx0aXBseSAgOS45OTk5OTk5OTkgIDkuOTk5OTk5OTk5IC0+ICA5OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsMDE3IG11bHRpcGx5ICA5Ljk5OTk5OTk5OSAtOS45OTk5OTk5OTkgLT4gLTk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRtdWwwMTggbXVsdGlwbHkgLTkuOTk5OTk5OTk5ICA5Ljk5OTk5OTk5OSAtPiAtOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkZG11bDAxOSBtdWx0aXBseSAtOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5IC0+ICA5OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gemVyb3MsIGV0Yy4KK2RkbXVsMDIxIG11bHRpcGx5ICAwICAgICAgMCAgICAgLT4gIDAKK2RkbXVsMDIyIG11bHRpcGx5ICAwICAgICAtMCAgICAgLT4gLTAKK2RkbXVsMDIzIG11bHRpcGx5IC0wICAgICAgMCAgICAgLT4gLTAKK2RkbXVsMDI0IG11bHRpcGx5IC0wICAgICAtMCAgICAgLT4gIDAKK2RkbXVsMDI1IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKK2RkbXVsMDI2IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKK2RkbXVsMDI3IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKK2RkbXVsMDI4IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKK2RkbXVsMDMwIG11bHRpcGx5ICA1LjAwICAgMUUtMyAgLT4gIDAuMDA1MDAKK2RkbXVsMDMxIG11bHRpcGx5ICAwMC4wMCAgMC4wMDAgLT4gIDAuMDAwMDAKK2RkbXVsMDMyIG11bHRpcGx5ICAwMC4wMCAgMEUtMyAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkZG11bDAzMyBtdWx0aXBseSAgMEUtMyAgIDAwLjAwIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZGRtdWwwMzQgbXVsdGlwbHkgLTUuMDAgICAxRS0zICAtPiAtMC4wMDUwMAorZGRtdWwwMzUgbXVsdGlwbHkgLTAwLjAwICAwLjAwMCAtPiAtMC4wMDAwMAorZGRtdWwwMzYgbXVsdGlwbHkgLTAwLjAwICAwRS0zICAtPiAtMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RkbXVsMDM3IG11bHRpcGx5IC0wRS0zICAgMDAuMDAgLT4gLTAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkZG11bDAzOCBtdWx0aXBseSAgNS4wMCAgLTFFLTMgIC0+IC0wLjAwNTAwCitkZG11bDAzOSBtdWx0aXBseSAgMDAuMDAgLTAuMDAwIC0+IC0wLjAwMDAwCitkZG11bDA0MCBtdWx0aXBseSAgMDAuMDAgLTBFLTMgIC0+IC0wLjAwMDAwICAgICAtLSByaHMgaXMgMAorZGRtdWwwNDEgbXVsdGlwbHkgIDBFLTMgIC0wMC4wMCAtPiAtMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RkbXVsMDQyIG11bHRpcGx5IC01LjAwICAtMUUtMyAgLT4gIDAuMDA1MDAKK2RkbXVsMDQzIG11bHRpcGx5IC0wMC4wMCAtMC4wMDAgLT4gIDAuMDAwMDAKK2RkbXVsMDQ0IG11bHRpcGx5IC0wMC4wMCAtMEUtMyAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkZG11bDA0NSBtdWx0aXBseSAtMEUtMyAgLTAwLjAwIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCitkZG11bDA1MCBtdWx0aXBseSAxLjIwIDMgICAgICAgIC0+IDMuNjAKK2RkbXVsMDUxIG11bHRpcGx5IDcgICAgMyAgICAgICAgLT4gMjEKK2RkbXVsMDUyIG11bHRpcGx5IDAuOSAgMC44ICAgICAgLT4gMC43MgorZGRtdWwwNTMgbXVsdGlwbHkgMC45ICAtMCAgICAgICAtPiAtMC4wCitkZG11bDA1NCBtdWx0aXBseSA2NTQzMjEgNjU0MzIxIC0+IDQyODEzNTk3MTA0MQorCitkZG11bDA2MCBtdWx0aXBseSAxMjMuNDUgMWU3ICAtPiAgMS4yMzQ1RSs5CitkZG11bDA2MSBtdWx0aXBseSAxMjMuNDUgMWU4ICAtPiAgMS4yMzQ1RSsxMAorZGRtdWwwNjIgbXVsdGlwbHkgMTIzLjQ1IDFlKzkgLT4gIDEuMjM0NUUrMTEKK2RkbXVsMDYzIG11bHRpcGx5IDEyMy40NSAxZTEwIC0+ICAxLjIzNDVFKzEyCitkZG11bDA2NCBtdWx0aXBseSAxMjMuNDUgMWUxMSAtPiAgMS4yMzQ1RSsxMworZGRtdWwwNjUgbXVsdGlwbHkgMTIzLjQ1IDFlMTIgLT4gIDEuMjM0NUUrMTQKK2RkbXVsMDY2IG11bHRpcGx5IDEyMy40NSAxZTEzIC0+ICAxLjIzNDVFKzE1CisKKworLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzCistLSAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRtdWwwODAgbXVsdGlwbHkgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgIC0+IDEyMzAxMjM0NTY0NTY3OC45CitkZG11bDA4NCBtdWx0aXBseSAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKK2RkbXVsMDkwIG11bHRpcGx5IDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAtPiAxMjMwMTIzNDU2NDU2NzguOQorZGRtdWwwOTQgbXVsdGlwbHkgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xIC0+IDEyMzAxMjM0NTY0NTY3OC45CisKKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgYW5kIGNhcnJpZXMKK2RkbXVsMTAxIG11bHRpcGx5IDkgOSAgIC0+IDgxCitkZG11bDEwMiBtdWx0aXBseSA5IDkwICAgLT4gODEwCitkZG11bDEwMyBtdWx0aXBseSA5IDkwMCAgIC0+IDgxMDAKK2RkbXVsMTA0IG11bHRpcGx5IDkgOTAwMCAgIC0+IDgxMDAwCitkZG11bDEwNSBtdWx0aXBseSA5IDkwMDAwICAgLT4gODEwMDAwCitkZG11bDEwNiBtdWx0aXBseSA5IDkwMDAwMCAgIC0+IDgxMDAwMDAKK2RkbXVsMTA3IG11bHRpcGx5IDkgOTAwMDAwMCAgIC0+IDgxMDAwMDAwCitkZG11bDEwOCBtdWx0aXBseSA5IDkwMDAwMDAwICAgLT4gODEwMDAwMDAwCitkZG11bDEwOSBtdWx0aXBseSA5IDkwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAKK2RkbXVsMTEwIG11bHRpcGx5IDkgOTAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwCitkZG11bDExMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwCitkZG11bDExMiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAKK2RkbXVsMTEzIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwCitkZG11bDExNCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwCitkZG11bDExNSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAKKy0tZGRtdWwxMTYgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAKKy0tZGRtdWwxMTcgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMAorLS1kZG11bDExOCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAKKy0tZGRtdWwxMTkgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZGRtdWwxMjAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kZG11bDEyMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZGRtdWwxMjIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZGRtdWwxMjMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMKK2RkbXVsMTMxIG11bHRpcGx5IDMgMyAgIC0+IDkKK2RkbXVsMTMyIG11bHRpcGx5IDMgMzAgICAtPiA5MAorZGRtdWwxMzMgbXVsdGlwbHkgMyAzMDAgICAtPiA5MDAKK2RkbXVsMTM0IG11bHRpcGx5IDMgMzAwMCAgIC0+IDkwMDAKK2RkbXVsMTM1IG11bHRpcGx5IDMgMzAwMDAgICAtPiA5MDAwMAorZGRtdWwxMzYgbXVsdGlwbHkgMyAzMDAwMDAgICAtPiA5MDAwMDAKK2RkbXVsMTM3IG11bHRpcGx5IDMgMzAwMDAwMCAgIC0+IDkwMDAwMDAKK2RkbXVsMTM4IG11bHRpcGx5IDMgMzAwMDAwMDAgICAtPiA5MDAwMDAwMAorZGRtdWwxMzkgbXVsdGlwbHkgMyAzMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAKK2RkbXVsMTQwIG11bHRpcGx5IDMgMzAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAKK2RkbXVsMTQxIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMAorZGRtdWwxNDIgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAKK2RkbXVsMTQzIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAKK2RkbXVsMTQ0IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMAorZGRtdWwxNDUgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAKKworLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZworZGRtdWwzMDEgbXVsdGlwbHkgOSA5ICAgLT4gODEKK2RkbXVsMzAyIG11bHRpcGx5IDkgOTAgICAtPiA4MTAKK2RkbXVsMzAzIG11bHRpcGx5IDkgOTAwICAgLT4gODEwMAorZGRtdWwzMDQgbXVsdGlwbHkgOSA5MDAwICAgLT4gODEwMDAKK2RkbXVsMzA1IG11bHRpcGx5IDkgOTAwMDAgICAtPiA4MTAwMDAKK2RkbXVsMzA2IG11bHRpcGx5IDkgOTAwMDAwICAgLT4gODEwMDAwMAorZGRtdWwzMDcgbXVsdGlwbHkgOSA5MDAwMDAwICAgLT4gODEwMDAwMDAKK2RkbXVsMzA4IG11bHRpcGx5IDkgOTAwMDAwMDAgICAtPiA4MTAwMDAwMDAKK2RkbXVsMzA5IG11bHRpcGx5IDkgOTAwMDAwMDAwICAgLT4gODEwMDAwMDAwMAorZGRtdWwzMTAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAKK2RkbXVsMzExIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAKK2RkbXVsMzEyIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMAorZGRtdWwzMTMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAKK2RkbXVsMzE0IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAKK2RkbXVsMzE1IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMAorZGRtdWwzMTYgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkCitkZG11bDMxNyBtdWx0aXBseSA5MCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzE3ICBSb3VuZGVkCitkZG11bDMxOCBtdWx0aXBseSA5MDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsxOCAgUm91bmRlZAorZGRtdWwzMTkgbXVsdGlwbHkgOTAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzE5ICBSb3VuZGVkCitkZG11bDMyMCBtdWx0aXBseSA5MDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzIwICBSb3VuZGVkCitkZG11bDMyMSBtdWx0aXBseSA5MDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsyMSAgUm91bmRlZAorZGRtdWwzMjIgbXVsdGlwbHkgOTAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzIyICBSb3VuZGVkCitkZG11bDMyMyBtdWx0aXBseSA5MDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzIzICBSb3VuZGVkCisKKy0tIHRyeXplcm9zIGNhc2VzCitkZG11bDUwNCAgbXVsdGlwbHkgIDBFLTI2MCAxMDAwRS0yNjAgIC0+IDBFLTM5OCBDbGFtcGVkCitkZG11bDUwNSAgbXVsdGlwbHkgIDEwMEUrMjYwIDBFKzI2MCAgIC0+IDBFKzM2OSBDbGFtcGVkCistLSA2NUstMSBjYXNlCitkZG11bDUwNiBtdWx0aXBseSA3Ny4xIDg1MCAtPiA2NTUzNS4wCisKKy0tIG1peGVkIHdpdGggemVyb3MKK2RkbXVsNTQxIG11bHRpcGx5ICAwICAgIC0xICAgICAtPiAtMAorZGRtdWw1NDIgbXVsdGlwbHkgLTAgICAgLTEgICAgIC0+ICAwCitkZG11bDU0MyBtdWx0aXBseSAgMCAgICAgMSAgICAgLT4gIDAKK2RkbXVsNTQ0IG11bHRpcGx5IC0wICAgICAxICAgICAtPiAtMAorZGRtdWw1NDUgbXVsdGlwbHkgLTEgICAgIDAgICAgIC0+IC0wCitkZG11bDU0NiBtdWx0aXBseSAtMSAgICAtMCAgICAgLT4gIDAKK2RkbXVsNTQ3IG11bHRpcGx5ICAxICAgICAwICAgICAtPiAgMAorZGRtdWw1NDggbXVsdGlwbHkgIDEgICAgLTAgICAgIC0+IC0wCisKK2RkbXVsNTUxIG11bHRpcGx5ICAwLjAgIC0xICAgICAtPiAtMC4wCitkZG11bDU1MiBtdWx0aXBseSAtMC4wICAtMSAgICAgLT4gIDAuMAorZGRtdWw1NTMgbXVsdGlwbHkgIDAuMCAgIDEgICAgIC0+ICAwLjAKK2RkbXVsNTU0IG11bHRpcGx5IC0wLjAgICAxICAgICAtPiAtMC4wCitkZG11bDU1NSBtdWx0aXBseSAtMS4wICAgMCAgICAgLT4gLTAuMAorZGRtdWw1NTYgbXVsdGlwbHkgLTEuMCAgLTAgICAgIC0+ICAwLjAKK2RkbXVsNTU3IG11bHRpcGx5ICAxLjAgICAwICAgICAtPiAgMC4wCitkZG11bDU1OCBtdWx0aXBseSAgMS4wICAtMCAgICAgLT4gLTAuMAorCitkZG11bDU2MSBtdWx0aXBseSAgMCAgICAtMS4wICAgLT4gLTAuMAorZGRtdWw1NjIgbXVsdGlwbHkgLTAgICAgLTEuMCAgIC0+ICAwLjAKK2RkbXVsNTYzIG11bHRpcGx5ICAwICAgICAxLjAgICAtPiAgMC4wCitkZG11bDU2NCBtdWx0aXBseSAtMCAgICAgMS4wICAgLT4gLTAuMAorZGRtdWw1NjUgbXVsdGlwbHkgLTEgICAgIDAuMCAgIC0+IC0wLjAKK2RkbXVsNTY2IG11bHRpcGx5IC0xICAgIC0wLjAgICAtPiAgMC4wCitkZG11bDU2NyBtdWx0aXBseSAgMSAgICAgMC4wICAgLT4gIDAuMAorZGRtdWw1NjggbXVsdGlwbHkgIDEgICAgLTAuMCAgIC0+IC0wLjAKKworZGRtdWw1NzEgbXVsdGlwbHkgIDAuMCAgLTEuMCAgIC0+IC0wLjAwCitkZG11bDU3MiBtdWx0aXBseSAtMC4wICAtMS4wICAgLT4gIDAuMDAKK2RkbXVsNTczIG11bHRpcGx5ICAwLjAgICAxLjAgICAtPiAgMC4wMAorZGRtdWw1NzQgbXVsdGlwbHkgLTAuMCAgIDEuMCAgIC0+IC0wLjAwCitkZG11bDU3NSBtdWx0aXBseSAtMS4wICAgMC4wICAgLT4gLTAuMDAKK2RkbXVsNTc2IG11bHRpcGx5IC0xLjAgIC0wLjAgICAtPiAgMC4wMAorZGRtdWw1NzcgbXVsdGlwbHkgIDEuMCAgIDAuMCAgIC0+ICAwLjAwCitkZG11bDU3OCBtdWx0aXBseSAgMS4wICAtMC4wICAgLT4gLTAuMDAKKworCistLSBTcGVjaWFscworZGRtdWw1ODAgbXVsdGlwbHkgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtdWw1ODEgbXVsdGlwbHkgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorZGRtdWw1ODIgbXVsdGlwbHkgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZGRtdWw1ODMgbXVsdGlwbHkgIEluZiAgLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDU4NCBtdWx0aXBseSAgSW5mICAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNTg1IG11bHRpcGx5ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RkbXVsNTg2IG11bHRpcGx5ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RkbXVsNTg3IG11bHRpcGx5ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbXVsNTg4IG11bHRpcGx5IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkKK2RkbXVsNTg5IG11bHRpcGx5IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RkbXVsNTkwIG11bHRpcGx5IC0xICAgICBJbmYgICAtPiAtSW5maW5pdHkKK2RkbXVsNTkxIG11bHRpcGx5IC0wICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw1OTIgbXVsdGlwbHkgIDAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDU5MyBtdWx0aXBseSAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZG11bDU5NCBtdWx0aXBseSAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkZG11bDU5NSBtdWx0aXBseSAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RkbXVsNjAwIG11bHRpcGx5IC1JbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RkbXVsNjAxIG11bHRpcGx5IC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2RkbXVsNjAyIG11bHRpcGx5IC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RkbXVsNjAzIG11bHRpcGx5IC1JbmYgIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2MDQgbXVsdGlwbHkgLUluZiAgIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDYwNSBtdWx0aXBseSAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkZG11bDYwNiBtdWx0aXBseSAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkZG11bDYwNyBtdWx0aXBseSAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkZG11bDYwOCBtdWx0aXBseSAtMTAwMCAgSW5mICAgLT4gLUluZmluaXR5CitkZG11bDYwOSBtdWx0aXBseSAtSW5mICAtSW5mICAgLT4gIEluZmluaXR5CitkZG11bDYxMCBtdWx0aXBseSAtMSAgICAtSW5mICAgLT4gIEluZmluaXR5CitkZG11bDYxMSBtdWx0aXBseSAtMCAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjEyIG11bHRpcGx5ICAwICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2MTMgbXVsdGlwbHkgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtdWw2MTQgbXVsdGlwbHkgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRtdWw2MTUgbXVsdGlwbHkgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorCitkZG11bDYyMSBtdWx0aXBseSAgTmFOIC1JbmYgICAgLT4gIE5hTgorZGRtdWw2MjIgbXVsdGlwbHkgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RkbXVsNjIzIG11bHRpcGx5ICBOYU4gLTEgICAgICAtPiAgTmFOCitkZG11bDYyNCBtdWx0aXBseSAgTmFOIC0wICAgICAgLT4gIE5hTgorZGRtdWw2MjUgbXVsdGlwbHkgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RkbXVsNjI2IG11bHRpcGx5ICBOYU4gIDEgICAgICAtPiAgTmFOCitkZG11bDYyNyBtdWx0aXBseSAgTmFOICAxMDAwICAgLT4gIE5hTgorZGRtdWw2MjggbXVsdGlwbHkgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RkbXVsNjI5IG11bHRpcGx5ICBOYU4gIE5hTiAgICAtPiAgTmFOCitkZG11bDYzMCBtdWx0aXBseSAtSW5mICBOYU4gICAgLT4gIE5hTgorZGRtdWw2MzEgbXVsdGlwbHkgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RkbXVsNjMyIG11bHRpcGx5IC0xICAgIE5hTiAgICAtPiAgTmFOCitkZG11bDYzMyBtdWx0aXBseSAtMCAgICBOYU4gICAgLT4gIE5hTgorZGRtdWw2MzQgbXVsdGlwbHkgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RkbXVsNjM1IG11bHRpcGx5ICAxICAgIE5hTiAgICAtPiAgTmFOCitkZG11bDYzNiBtdWx0aXBseSAgMTAwMCBOYU4gICAgLT4gIE5hTgorZGRtdWw2MzcgbXVsdGlwbHkgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRtdWw2NDEgbXVsdGlwbHkgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY0MiBtdWx0aXBseSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjQzIG11bHRpcGx5ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NDQgbXVsdGlwbHkgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY0NSBtdWx0aXBseSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjQ2IG11bHRpcGx5ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NDcgbXVsdGlwbHkgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY0OCBtdWx0aXBseSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjQ5IG11bHRpcGx5ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NTAgbXVsdGlwbHkgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY1MSBtdWx0aXBseSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjUyIG11bHRpcGx5IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NTMgbXVsdGlwbHkgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY1NCBtdWx0aXBseSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjU1IG11bHRpcGx5ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NTYgbXVsdGlwbHkgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDY1NyBtdWx0aXBseSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjU4IG11bHRpcGx5ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2NTkgbXVsdGlwbHkgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkbXVsNjYxIG11bHRpcGx5ICBOYU45IC1JbmYgICAtPiAgTmFOOQorZGRtdWw2NjIgbXVsdGlwbHkgIE5hTjggIDk5OSAgIC0+ICBOYU44CitkZG11bDY2MyBtdWx0aXBseSAgTmFONzEgSW5mICAgLT4gIE5hTjcxCitkZG11bDY2NCBtdWx0aXBseSAgTmFONiAgTmFONSAgLT4gIE5hTjYKK2RkbXVsNjY1IG11bHRpcGx5IC1JbmYgICBOYU40ICAtPiAgTmFONAorZGRtdWw2NjYgbXVsdGlwbHkgLTk5OSAgIE5hTjMzIC0+ICBOYU4zMworZGRtdWw2NjcgbXVsdGlwbHkgIEluZiAgIE5hTjIgIC0+ICBOYU4yCisKK2RkbXVsNjcxIG11bHRpcGx5ICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjcyIG11bHRpcGx5ICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjczIG11bHRpcGx5ICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjc0IG11bHRpcGx5ICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjc1IG11bHRpcGx5ICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjc2IG11bHRpcGx5IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjc3IG11bHRpcGx5ICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjc4IG11bHRpcGx5ICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNjc5IG11bHRpcGx5ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZGRtdWw2ODEgbXVsdGlwbHkgLU5hTjkgLUluZiAgIC0+IC1OYU45CitkZG11bDY4MiBtdWx0aXBseSAtTmFOOCAgOTk5ICAgLT4gLU5hTjgKK2RkbXVsNjgzIG11bHRpcGx5IC1OYU43MSBJbmYgICAtPiAtTmFONzEKK2RkbXVsNjg0IG11bHRpcGx5IC1OYU42IC1OYU41ICAtPiAtTmFONgorZGRtdWw2ODUgbXVsdGlwbHkgLUluZiAgLU5hTjQgIC0+IC1OYU40CitkZG11bDY4NiBtdWx0aXBseSAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzCitkZG11bDY4NyBtdWx0aXBseSAgSW5mICAtTmFOMiAgLT4gLU5hTjIKKworZGRtdWw2OTEgbXVsdGlwbHkgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTIgbXVsdGlwbHkgLXNOYU45OCAtMTEgICAgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTMgbXVsdGlwbHkgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTQgbXVsdGlwbHkgLXNOYU4xNiAtc05hTjk0IC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTUgbXVsdGlwbHkgLU5hTjk1ICAtc05hTjkzIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTYgbXVsdGlwbHkgLUluZiAgICAtc05hTjkyIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTcgbXVsdGlwbHkgIDA4OCAgICAtc05hTjkxIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTggbXVsdGlwbHkgIEluZiAgICAtc05hTjkwIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw2OTkgbXVsdGlwbHkgLU5hTiAgICAtc05hTjg5IC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkZG11bDcwMSBtdWx0aXBseSAtTmFOICAtSW5mICAgLT4gLU5hTgorZGRtdWw3MDIgbXVsdGlwbHkgLU5hTiAgIDk5OSAgIC0+IC1OYU4KK2RkbXVsNzAzIG11bHRpcGx5IC1OYU4gICBJbmYgICAtPiAtTmFOCitkZG11bDcwNCBtdWx0aXBseSAtTmFOICAtTmFOICAgLT4gLU5hTgorZGRtdWw3MDUgbXVsdGlwbHkgLUluZiAgLU5hTjAgIC0+IC1OYU4KK2RkbXVsNzA2IG11bHRpcGx5IC05OTkgIC1OYU4gICAtPiAtTmFOCitkZG11bDcwNyBtdWx0aXBseSAgSW5mICAtTmFOICAgLT4gLU5hTgorCitkZG11bDcxMSBtdWx0aXBseSAtc05hTiAgIC1JbmYgICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw3MTIgbXVsdGlwbHkgLXNOYU4gICAtMTEgICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNzEzIG11bHRpcGx5IC1zTmFOMDAgIE5hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDcxNCBtdWx0aXBseSAtc05hTiAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw3MTUgbXVsdGlwbHkgLU5hTiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNzE2IG11bHRpcGx5IC1JbmYgICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDcxNyBtdWx0aXBseSAgMDg4ICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRtdWw3MTggbXVsdGlwbHkgIEluZiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkbXVsNzE5IG11bHRpcGx5IC1OYU4gICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cworLS0gc2lnbnMKK2RkbXVsNzUxIG11bHRpcGx5ICAxZSsyNzcgIDFlKzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZG11bDc1MiBtdWx0aXBseSAgMWUrMjc3IC0xZSszMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRtdWw3NTMgbXVsdGlwbHkgLTFlKzI3NyAgMWUrMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsNzU0IG11bHRpcGx5IC0xZSsyNzcgLTFlKzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZG11bDc1NSBtdWx0aXBseSAgMWUtMjc3ICAxZS0zMTEgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDc1NiBtdWx0aXBseSAgMWUtMjc3IC0xZS0zMTEgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDc1NyBtdWx0aXBseSAtMWUtMjc3ICAxZS0zMTEgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDc1OCBtdWx0aXBseSAtMWUtMjc3IC0xZS0zMTEgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorZGRtdWw3NjAgbXVsdGlwbHkgMWUtMjkxIDFlLTEwMSAtPiAxRS0zOTIgU3Vibm9ybWFsCitkZG11bDc2MSBtdWx0aXBseSAxZS0yOTEgMWUtMTAyIC0+IDFFLTM5MyBTdWJub3JtYWwKK2RkbXVsNzYyIG11bHRpcGx5IDFlLTI5MSAxZS0xMDMgLT4gMUUtMzk0IFN1Ym5vcm1hbAorZGRtdWw3NjMgbXVsdGlwbHkgMWUtMjkxIDFlLTEwNCAtPiAxRS0zOTUgU3Vibm9ybWFsCitkZG11bDc2NCBtdWx0aXBseSAxZS0yOTEgMWUtMTA1IC0+IDFFLTM5NiBTdWJub3JtYWwKK2RkbXVsNzY1IG11bHRpcGx5IDFlLTI5MSAxZS0xMDYgLT4gMUUtMzk3IFN1Ym5vcm1hbAorZGRtdWw3NjYgbXVsdGlwbHkgMWUtMjkxIDFlLTEwNyAtPiAxRS0zOTggU3Vibm9ybWFsCitkZG11bDc2NyBtdWx0aXBseSAxZS0yOTEgMWUtMTA4IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDc2OCBtdWx0aXBseSAxZS0yOTEgMWUtMTA5IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDc2OSBtdWx0aXBseSAxZS0yOTEgMWUtMTEwIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCistLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddCitkZG11bDc3MCBtdWx0aXBseSAxZSs2MCAxZSszMjEgLT4gMS4wMDAwMDAwMDAwMDBFKzM4MSAgQ2xhbXBlZAorZGRtdWw3NzEgbXVsdGlwbHkgMWUrNjAgMWUrMzIyIC0+IDEuMDAwMDAwMDAwMDAwMEUrMzgyICBDbGFtcGVkCitkZG11bDc3MiBtdWx0aXBseSAxZSs2MCAxZSszMjMgLT4gMS4wMDAwMDAwMDAwMDAwMEUrMzgzICBDbGFtcGVkCitkZG11bDc3MyBtdWx0aXBseSAxZSs2MCAxZSszMjQgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZAorZGRtdWw3NzQgbXVsdGlwbHkgMWUrNjAgMWUrMzI1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRtdWw3NzUgbXVsdGlwbHkgMWUrNjAgMWUrMzI2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRtdWw3NzYgbXVsdGlwbHkgMWUrNjAgMWUrMzI3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRtdWw3NzcgbXVsdGlwbHkgMWUrNjAgMWUrMzI4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRtdWw3NzggbXVsdGlwbHkgMWUrNjAgMWUrMzI5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRtdWw3NzkgbXVsdGlwbHkgMWUrNjAgMWUrMzMwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitkZG11bDgwMSBtdWx0aXBseSAgMS4wMDAwRS0zOTQgIDEgICAgIC0+IDEuMDAwMEUtMzk0IFN1Ym5vcm1hbAorZGRtdWw4MDIgbXVsdGlwbHkgIDEuMDAwRS0zOTQgICAxZS0xICAtPiAxLjAwMEUtMzk1ICBTdWJub3JtYWwKK2RkbXVsODAzIG11bHRpcGx5ICAxLjAwRS0zOTQgICAgMWUtMiAgLT4gMS4wMEUtMzk2ICAgU3Vibm9ybWFsCitkZG11bDgwNCBtdWx0aXBseSAgMS4wRS0zOTQgICAgIDFlLTMgIC0+IDEuMEUtMzk3ICAgIFN1Ym5vcm1hbAorZGRtdWw4MDUgbXVsdGlwbHkgIDEuMEUtMzk0ICAgICAxZS00ICAtPiAxRS0zOTggICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkZG11bDgwNiBtdWx0aXBseSAgMS4zRS0zOTQgICAgIDFlLTQgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODA3IG11bHRpcGx5ICAxLjVFLTM5NCAgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MDggbXVsdGlwbHkgIDEuN0UtMzk0ICAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgwOSBtdWx0aXBseSAgMi4zRS0zOTQgICAgIDFlLTQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODEwIG11bHRpcGx5ICAyLjVFLTM5NCAgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MTEgbXVsdGlwbHkgIDIuN0UtMzk0ICAgICAxZS00ICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgxMiBtdWx0aXBseSAgMS40OUUtMzk0ICAgIDFlLTQgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODEzIG11bHRpcGx5ICAxLjUwRS0zOTQgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MTQgbXVsdGlwbHkgIDEuNTFFLTM5NCAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgxNSBtdWx0aXBseSAgMi40OUUtMzk0ICAgIDFlLTQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODE2IG11bHRpcGx5ICAyLjUwRS0zOTQgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MTcgbXVsdGlwbHkgIDIuNTFFLTM5NCAgICAxZS00ICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RkbXVsODE4IG11bHRpcGx5ICAxRS0zOTQgICAgICAgMWUtNCAgLT4gMUUtMzk4ICAgICBTdWJub3JtYWwKK2RkbXVsODE5IG11bHRpcGx5ICAzRS0zOTQgICAgICAgMWUtNSAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDgyMCBtdWx0aXBseSAgNUUtMzk0ICAgICAgIDFlLTUgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRtdWw4MjEgbXVsdGlwbHkgIDdFLTM5NCAgICAgICAxZS01ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgyMiBtdWx0aXBseSAgOUUtMzk0ICAgICAgIDFlLTUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODIzIG11bHRpcGx5ICA5LjlFLTM5NCAgICAgMWUtNSAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkZG11bDgyNCBtdWx0aXBseSAgMUUtMzk0ICAgICAgLTFlLTQgIC0+IC0xRS0zOTggICAgU3Vibm9ybWFsCitkZG11bDgyNSBtdWx0aXBseSAgM0UtMzk0ICAgICAgLTFlLTUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRtdWw4MjYgbXVsdGlwbHkgLTVFLTM5NCAgICAgICAxZS01ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkbXVsODI3IG11bHRpcGx5ICA3RS0zOTQgICAgICAtMWUtNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRtdWw4MjggbXVsdGlwbHkgLTlFLTM5NCAgICAgICAxZS01ICAtPiAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG11bDgyOSBtdWx0aXBseSAgOS45RS0zOTQgICAgLTFlLTUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbXVsODMwIG11bHRpcGx5ICAzLjBFLTM5NCAgICAtMWUtNSAgLT4gLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2RkbXVsODMxIG11bHRpcGx5ICAxLjBFLTE5OSAgICAgMWUtMjAwIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZG11bDgzMiBtdWx0aXBseSAgMS4wRS0xOTkgICAgIDFlLTE5OSAtPiAxRS0zOTggICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RkbXVsODMzIG11bHRpcGx5ICAxLjBFLTE5OSAgICAgMWUtMTk4IC0+IDEuMEUtMzk3ICAgIFN1Ym5vcm1hbAorZGRtdWw4MzQgbXVsdGlwbHkgIDIuMEUtMTk5ICAgICAyZS0xOTggLT4gNC4wRS0zOTcgICAgU3Vibm9ybWFsCitkZG11bDgzNSBtdWx0aXBseSAgNC4wRS0xOTkgICAgIDRlLTE5OCAtPiAxLjYwRS0zOTYgICBTdWJub3JtYWwKK2RkbXVsODM2IG11bHRpcGx5IDEwLjBFLTE5OSAgICAxMGUtMTk4IC0+IDEuMDAwRS0zOTUgIFN1Ym5vcm1hbAorZGRtdWw4MzcgbXVsdGlwbHkgMzAuMEUtMTk5ICAgIDMwZS0xOTggLT4gOS4wMDBFLTM5NSAgU3Vibm9ybWFsCitkZG11bDgzOCBtdWx0aXBseSA0MC4wRS0xOTkgICAgNDBlLTE4OCAtPiAxLjYwMDBFLTM4NCBTdWJub3JtYWwKK2RkbXVsODM5IG11bHRpcGx5IDQwLjBFLTE5OSAgICA0MGUtMTg3IC0+IDEuNjAwMEUtMzgzCitkZG11bDg0MCBtdWx0aXBseSA0MC4wRS0xOTkgICAgNDBlLTE4NiAtPiAxLjYwMDBFLTM4MgorCistLSBMb25nIG9wZXJhbmQgb3ZlcmZsb3cgbWF5IGJlIGEgZGlmZmVyZW50IHBhdGgKK2RkbXVsODcwIG11bHRpcGx5IDEwMCAgOS45OTlFKzM4MyAgICAgICAgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2RkbXVsODcxIG11bHRpcGx5IDEwMCAtOS45OTlFKzM4MyAgICAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZGRtdWw4NzIgbXVsdGlwbHkgICAgICA5Ljk5OUUrMzgzIDEwMCAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkZG11bDg3MyBtdWx0aXBseSAgICAgLTkuOTk5RSszODMgMTAwIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK2RkbXVsODgxIG11bHRpcGx5ICAxLjIzNDdFLTM1NSAxLjIzNDdFLTQwICAtPiAgMS41MjRFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRtdWw4ODIgbXVsdGlwbHkgIDEuMjM0RS0zNTUgMS4yMzRFLTQwICAgIC0+ICAxLjUyM0UtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkZG11bDg4MyBtdWx0aXBseSAgMS4yM0UtMzU1ICAxLjIzRS00MCAgICAgLT4gIDEuNTEzRS0zOTUgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RkbXVsODg0IG11bHRpcGx5ICAxLjJFLTM1NSAgIDEuMkUtNDAgICAgICAtPiAgMS40NEUtMzk1ICBTdWJub3JtYWwKK2RkbXVsODg1IG11bHRpcGx5ICAxLjJFLTM1NSAgIDEuMkUtNDEgICAgICAtPiAgMS40NEUtMzk2ICBTdWJub3JtYWwKK2RkbXVsODg2IG11bHRpcGx5ICAxLjJFLTM1NSAgIDEuMkUtNDIgICAgICAtPiAgMS40RS0zOTcgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGRtdWw4ODcgbXVsdGlwbHkgIDEuMkUtMzU1ICAgMS4zRS00MiAgICAgIC0+ICAxLjZFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkZG11bDg4OCBtdWx0aXBseSAgMS4zRS0zNTUgICAxLjNFLTQyICAgICAgLT4gIDEuN0UtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RkbXVsODg5IG11bHRpcGx5ICAxLjNFLTM1NSAgIDEuM0UtNDMgICAgICAtPiAgICAyRS0zOTggICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGRtdWw4OTAgbXVsdGlwbHkgIDEuM0UtMzU2ICAgMS4zRS00MyAgICAgIC0+ICAgIDBFLTM5OCAgIENsYW1wZWQgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworZGRtdWw4OTEgbXVsdGlwbHkgIDEuMjM0NUUtMzkgICAxLjIzNEUtMzU1IC0+ICAxLjUyMzRFLTM5NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRtdWw4OTIgbXVsdGlwbHkgIDEuMjM0NTZFLTM5ICAxLjIzNEUtMzU1IC0+ICAxLjUyMzRFLTM5NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRtdWw4OTMgbXVsdGlwbHkgIDEuMjM0NUUtNDAgICAxLjIzNEUtMzU1IC0+ICAxLjUyM0UtMzk1ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRtdWw4OTQgbXVsdGlwbHkgIDEuMjM0NTZFLTQwICAxLjIzNEUtMzU1IC0+ICAxLjUyM0UtMzk1ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRtdWw4OTUgbXVsdGlwbHkgIDEuMjM0NUUtNDEgICAxLjIzNEUtMzU1IC0+ICAxLjUyRS0zOTYgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZGRtdWw4OTYgbXVsdGlwbHkgIDEuMjM0NTZFLTQxICAxLjIzNEUtMzU1IC0+ICAxLjUyRS0zOTYgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBOb3cgZXhwbG9yZSB0aGUgY2FzZSB3aGVyZSB3ZSBnZXQgYSBub3JtYWwgcmVzdWx0IHdpdGggVW5kZXJmbG93CistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYKK2RkbXVsOTAwIG11bHRpcGx5ICAwLjMwMDAwMDAwMDBFLTE5MSAwLjMwMDAwMDAwMDBFLTE5MSAtPiA5LjAwMDAwMDAwMDAwMDAwRS0zODQgU3Vibm9ybWFsIFJvdW5kZWQKK2RkbXVsOTAxIG11bHRpcGx5ICAwLjMwMDAwMDAwMDFFLTE5MSAwLjMwMDAwMDAwMDFFLTE5MSAtPiA5LjAwMDAwMDAwNjAwMDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2RkbXVsOTAyIG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTkgICAgLT4gOS45OTk5OTk5OTk5OTAwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZG11bDkwMyBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OSAgIC0+IDkuOTk5OTk5OTk5OTk5MDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZGRtdWw5MDQgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5OTkwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2RkbXVsOTA1IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTkgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCistLSBUaGUgbmV4dCByb3VuZHMgdG8gTm1pbiAoYioqZW1pbik7IHRoaXMgaXMgdGhlIGRpc3Rpbmd1aXNoaW5nIGNhc2UKKy0tIGZvciBkZXRlY3RpbmcgdGluaW5lc3MgKGJlZm9yZSBvciBhZnRlciByb3VuZGluZykgLS0gaWYgYWZ0ZXIKKy0tIHJvdW5kaW5nIHRoZW4gdGhlIHJlc3VsdCB3b3VsZCBiZSB0aGUgc2FtZSwgYnV0IHRoZSBVbmRlcmZsb3cgZmxhZworLS0gd291bGQgbm90IGJlIHNldAorZGRtdWw5MDYgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKy0tIHByb3ZlIHRob3NlIG9wZXJhbmRzIHdlcmUgZXhhY3QKK2RkbXVsOTA3IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAxICAgICAgICAgICAgICAgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzCitkZG11bDkwOCBtdWx0aXBseSAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OQorCistLSByZWR1Y2luZyB0aW5pZXN0CitkZG11bDkxMCBtdWx0aXBseSAxZS0zOTggMC45OSAtPiAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RkbXVsOTExIG11bHRpcGx5IDFlLTM5OCAwLjc1IC0+IDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZGRtdWw5MTIgbXVsdGlwbHkgMWUtMzk4IDAuNSAgLT4gMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2RkbXVsOTEzIG11bHRpcGx5IDFlLTM5OCAwLjI1IC0+IDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitkZG11bDkxNCBtdWx0aXBseSAxZS0zOTggMC4wMSAtPiAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSBodWdlc3QKK2RkbXVsOTIwIG11bHRpcGx5ICA5OTk5OTk5OTk5OTk5OTk5IDk5OTk5OTk5OTk5OTk5OTkgLT4gOS45OTk5OTk5OTk5OTk5OThFKzMxIEluZXhhY3QgUm91bmRlZAorCistLSBwb3dlci1vZi10ZW4gZWRnZSBjYXNlcworZGRtdWwxMDAxIG11bHRpcGx5ICAxICAgICAgMTAgICAgICAgICAgICAgICAtPiAxMAorZGRtdWwxMDAyIG11bHRpcGx5ICAxICAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDAKK2RkbXVsMTAwMyBtdWx0aXBseSAgMSAgICAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMAorZGRtdWwxMDA0IG11bHRpcGx5ICAxICAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMAorZGRtdWwxMDA1IG11bHRpcGx5ICAxICAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAKK2RkbXVsMTAwNiBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMAorZGRtdWwxMDA3IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMAorZGRtdWwxMDA4IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAKK2RkbXVsMTAwOSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMAorZGRtdWwxMDEwIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMAorZGRtdWwxMDExIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAKK2RkbXVsMTAxMiBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMAorZGRtdWwxMDEzIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMAorZGRtdWwxMDE0IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwICAtPiAxMDAwMDAwMDAwMDAwMDAKK2RkbXVsMTAxNSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMAorZGRtdWwxMDIxIG11bHRpcGx5ICAxMCAgICAgMSAgICAgICAgICAgICAgICAtPiAxMAorZGRtdWwxMDIyIG11bHRpcGx5ICAxMCAgICAgMTAgICAgICAgICAgICAgICAtPiAxMDAKK2RkbXVsMTAyMyBtdWx0aXBseSAgMTAgICAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMAorZGRtdWwxMDI0IG11bHRpcGx5ICAxMCAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMAorZGRtdWwxMDI1IG11bHRpcGx5ICAxMCAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAKK2RkbXVsMTAyNiBtdWx0aXBseSAgMTAgICAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMAorZGRtdWwxMDI3IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMAorZGRtdWwxMDI4IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAKK2RkbXVsMTAyOSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMAorZGRtdWwxMDMwIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMAorZGRtdWwxMDMxIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAKK2RkbXVsMTAzMiBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMAorZGRtdWwxMDMzIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMAorZGRtdWwxMDM0IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMDAKK2RkbXVsMTAzNSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMCAgLT4gMTAwMDAwMDAwMDAwMDAwMAorZGRtdWwxMDQxIG11bHRpcGx5ICAxMDAgICAgMC4xICAgICAgICAgICAgICAtPiAxMC4wCitkZG11bDEwNDIgbXVsdGlwbHkgIDEwMCAgICAxICAgICAgICAgICAgICAgIC0+IDEwMAorZGRtdWwxMDQzIG11bHRpcGx5ICAxMDAgICAgMTAgICAgICAgICAgICAgICAtPiAxMDAwCitkZG11bDEwNDQgbXVsdGlwbHkgIDEwMCAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwCitkZG11bDEwNDUgbXVsdGlwbHkgIDEwMCAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwMAorZGRtdWwxMDQ2IG11bHRpcGx5ICAxMDAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwCitkZG11bDEwNDcgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwCitkZG11bDEwNDggbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwMAorZGRtdWwxMDQ5IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwCitkZG11bDEwNTAgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwCitkZG11bDEwNTEgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMAorZGRtdWwxMDUyIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwCitkZG11bDEwNTMgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwCitkZG11bDEwNTQgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAwMAorZGRtdWwxMDU1IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMDAwCitkZG11bDEwNjEgbXVsdGlwbHkgIDEwMDAgICAwLjAxICAgICAgICAgICAgIC0+IDEwLjAwCitkZG11bDEwNjIgbXVsdGlwbHkgIDEwMDAgICAwLjEgICAgICAgICAgICAgIC0+IDEwMC4wCitkZG11bDEwNjMgbXVsdGlwbHkgIDEwMDAgICAxICAgICAgICAgICAgICAgIC0+IDEwMDAKK2RkbXVsMTA2NCBtdWx0aXBseSAgMTAwMCAgIDEwICAgICAgICAgICAgICAgLT4gMTAwMDAKK2RkbXVsMTA2NSBtdWx0aXBseSAgMTAwMCAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMDAwCitkZG11bDEwNjYgbXVsdGlwbHkgIDEwMDAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwMDAKK2RkbXVsMTA2NyBtdWx0aXBseSAgMTAwMCAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwMDAKK2RkbXVsMTA2OCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMDAwCitkZG11bDEwNjkgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwMDAKK2RkbXVsMTA3MCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwMDAKK2RkbXVsMTA3MSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAwCitkZG11bDEwNzIgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMDAKK2RkbXVsMTA3MyBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDAKK2RkbXVsMTA3NCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAwCitkZG11bDEwNzUgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAKK2RkbXVsMTA4MSBtdWx0aXBseSAgMTAwMDAgIDAuMDAxICAgICAgICAgICAgLT4gMTAuMDAwCitkZG11bDEwODIgbXVsdGlwbHkgIDEwMDAwICAwLjAxICAgICAgICAgICAgIC0+IDEwMC4wMAorZGRtdWwxMDgzIG11bHRpcGx5ICAxMDAwMCAgMC4xICAgICAgICAgICAgICAtPiAxMDAwLjAKK2RkbXVsMTA4NCBtdWx0aXBseSAgMTAwMDAgIDEgICAgICAgICAgICAgICAgLT4gMTAwMDAKK2RkbXVsMTA4NSBtdWx0aXBseSAgMTAwMDAgIDEwICAgICAgICAgICAgICAgLT4gMTAwMDAwCitkZG11bDEwODYgbXVsdGlwbHkgIDEwMDAwICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwMDAKK2RkbXVsMTA4NyBtdWx0aXBseSAgMTAwMDAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwMDAKK2RkbXVsMTA4OCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwMDAwCitkZG11bDEwODkgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwMDAKK2RkbXVsMTA5MCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwMDAKK2RkbXVsMTA5MSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwMDAwCitkZG11bDEwOTIgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwMDAKK2RkbXVsMTA5MyBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMDAKK2RkbXVsMTA5NCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwCitkZG11bDEwOTUgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAKKworZGRtdWwxMDk3IG11bHRpcGx5ICAxMDAwMCAgIDk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTkwMDAwCitkZG11bDEwOTggbXVsdGlwbHkgIDEwMDAwICAgOTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTAwMDAKKworCistLSBOdWxsIHRlc3RzCitkZG11bDk5OTAgbXVsdGlwbHkgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG11bDk5OTEgbXVsdGlwbHkgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGROZXh0TWludXMuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGROZXh0TWludXMuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWY1OGMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRNaW51cy5kZWNUZXN0CkBAIC0wLDAgKzEsMTI2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkTmV4dE1pbnVzLmRlY1Rlc3QgLS0gZGVjRG91YmxlIG5leHQgdGhhdCBpcyBsZXNzIFs3NTRyIG5leHRkb3duXSAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RkbmV4dG0wMDEgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTUgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTQKK2RkbmV4dG0wMDIgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTYgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTUKK2RkbmV4dG0wMDMgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTcgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTYKK2RkbmV4dG0wMDQgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTggLT4gICAwLjk5OTk5OTk5OTk5OTk5OTcKK2RkbmV4dG0wMDUgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTgKK2RkbmV4dG0wMDYgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dG0wMDcgbmV4dG1pbnVzICAxLjAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0bTAwOCBuZXh0bWludXMgIDEgICAgICAgICAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHRtMDA5IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAKK2RkbmV4dG0wMTAgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0bTAxMSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAyCitkZG5leHRtMDEyIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDMKK2RkbmV4dG0wMTMgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwNSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNAorZGRuZXh0bTAxNCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA1CitkZG5leHRtMDE1IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDYKK2RkbmV4dG0wMTYgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwOCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNworZGRuZXh0bTAxNyBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA4CitkZG5leHRtMDE4IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDkKK2RkbmV4dG0wMTkgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAxMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAxMAorZGRuZXh0bTAyMCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDEyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDExCisKK2RkbmV4dG0wMjEgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTYKK2RkbmV4dG0wMjIgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTcKK2RkbmV4dG0wMjMgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTcgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTgKK2RkbmV4dG0wMjQgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dG0wMjUgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMAorZGRuZXh0bTAyNiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHRtMDI3IG5leHRtaW51cyAtMS4wICAgICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0bTAyOCBuZXh0bWludXMgLTEgICAgICAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dG0wMjkgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMgorZGRuZXh0bTAzMCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAzCitkZG5leHRtMDMxIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDQKK2RkbmV4dG0wMzIgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNQorZGRuZXh0bTAzMyBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA2CitkZG5leHRtMDM0IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDcKK2RkbmV4dG0wMzUgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOAorZGRuZXh0bTAzNiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA5CitkZG5leHRtMDM3IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMTAKK2RkbmV4dG0wMzggbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMQorZGRuZXh0bTAzOSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDExICAtPiAgLTEuMDAwMDAwMDAwMDAwMDEyCisKKy0tIHVsdHJhLXRpbnkgaW5wdXRzCitkZG5leHRtMDYyIG5leHRtaW51cyAgMUUtMzk4ICAgICAgICAgLT4gICAwRS0zOTgKK2RkbmV4dG0wNjUgbmV4dG1pbnVzIC0xRS0zOTggICAgICAgICAtPiAgLTJFLTM5OAorCistLSBaZXJvcworZGRuZXh0bTEwMCBuZXh0bWludXMgLTAgICAgICAgICAgIC0+IC0xRS0zOTgKK2RkbmV4dG0xMDEgbmV4dG1pbnVzICAwICAgICAgICAgICAtPiAtMUUtMzk4CitkZG5leHRtMTAyIG5leHRtaW51cyAgMC4wMCAgICAgICAgLT4gLTFFLTM5OAorZGRuZXh0bTEwMyBuZXh0bWludXMgLTAuMDAgICAgICAgIC0+IC0xRS0zOTgKK2RkbmV4dG0xMDQgbmV4dG1pbnVzICAwRS0zMDAgICAgICAtPiAtMUUtMzk4CitkZG5leHRtMTA1IG5leHRtaW51cyAgMEUrMzAwICAgICAgLT4gLTFFLTM5OAorZGRuZXh0bTEwNiBuZXh0bWludXMgIDBFKzMwMDAwICAgIC0+IC0xRS0zOTgKK2RkbmV4dG0xMDcgbmV4dG1pbnVzIC0wRSszMDAwMCAgICAtPiAtMUUtMzk4CisKKy0tIHNwZWNpYWxzCitkZG5leHRtMTUwIG5leHRtaW51cyAgIEluZiAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0bTE1MSBuZXh0bWludXMgIC1JbmYgICAgLT4gLUluZmluaXR5CitkZG5leHRtMTUyIG5leHRtaW51cyAgIE5hTiAgICAtPiAgTmFOCitkZG5leHRtMTUzIG5leHRtaW51cyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dG0xNTQgbmV4dG1pbnVzICAgTmFONzcgIC0+ICBOYU43NworZGRuZXh0bTE1NSBuZXh0bWludXMgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCitkZG5leHRtMTU2IG5leHRtaW51cyAgLU5hTiAgICAtPiAtTmFOCitkZG5leHRtMTU3IG5leHRtaW51cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dG0xNTggbmV4dG1pbnVzICAtTmFONzcgIC0+IC1OYU43NworZGRuZXh0bTE1OSBuZXh0bWludXMgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCitkZG5leHRtMTcwIG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk4RSszODQKK2RkbmV4dG0xNzEgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTdFKzM4NAorZGRuZXh0bTE3MiBuZXh0bWludXMgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5RS0zODQKK2RkbmV4dG0xNzMgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0CitkZG5leHRtMTc0IG5leHRtaW51cyAgOUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDhFLTM5OAorZGRuZXh0bTE3NSBuZXh0bWludXMgIDkuOUUtMzk3ICAgICAgICAgICAgICAgICAtPiA5LjhFLTM5NworZGRuZXh0bTE3NiBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTlFLTM4NyAgICAgICAtPiA5Ljk5OTk5OTk5OTk4RS0zODcKK2RkbmV4dG0xNzcgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgICAgLT4gOS45OTk5OTk5OTk5OTk5OEUtMzg0CitkZG5leHRtMTc4IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OEUtMzg0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OTdFLTM4NAorZGRuZXh0bTE3OSBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTdFLTM4NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk2RS0zODQKK2RkbmV4dG0xODAgbmV4dG1pbnVzICAwRS0zOTggICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OAorZGRuZXh0bTE4MSBuZXh0bWludXMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAwRS0zOTgKK2RkbmV4dG0xODIgbmV4dG1pbnVzICAyRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4CisKK2RkbmV4dG0xODMgbmV4dG1pbnVzICAtMEUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OAorZGRuZXh0bTE4NCBuZXh0bWludXMgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMkUtMzk4CitkZG5leHRtMTg1IG5leHRtaW51cyAgLTJFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0zRS0zOTgKK2RkbmV4dG0xODYgbmV4dG1pbnVzICAtMTBFLTM5OCAgICAgICAgICAgICAgICAgLT4gLTEuMUUtMzk3CitkZG5leHRtMTg3IG5leHRtaW51cyAgLTEwMEUtMzk4ICAgICAgICAgICAgICAgIC0+IC0xLjAxRS0zOTYKK2RkbmV4dG0xODggbmV4dG1pbnVzICAtMTAwMDAwRS0zOTggICAgICAgICAgICAgLT4gLTEuMDAwMDFFLTM5MworZGRuZXh0bTE4OSBuZXh0bWludXMgIC0xLjAwMDAwMDAwMDAwRS0zODMgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0bTE5MCBuZXh0bWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0bTE5MSBuZXh0bWludXMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0bTE5MiBuZXh0bWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0bTE5MyBuZXh0bWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtSW5maW5pdHkKKworLS0gTnVsbCB0ZXN0cworZGRuZXh0bTkwMCBuZXh0bWludXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGROZXh0UGx1cy5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRQbHVzLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxZGZiYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGROZXh0UGx1cy5kZWNUZXN0CkBAIC0wLDAgKzEsMTI0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkTmV4dFBsdXMuZGVjVGVzdCAtLSBkZWNEb3VibGUgbmV4dCB0aGF0IGlzIGdyZWF0ZXIgWzc1NHIgbmV4dHVwXSAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgorcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RkbmV4dHAwMDEgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NgorZGRuZXh0cDAwMiBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk3CitkZG5leHRwMDAzIG5leHRwbHVzICAwLjk5OTk5OTk5OTk5OTk5OTcgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTgKK2RkbmV4dHAwMDQgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0cDAwNSBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAKK2RkbmV4dHAwMDYgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHRwMDA3IG5leHRwbHVzICAxLjAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHRwMDA4IG5leHRwbHVzICAxICAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHRwMDA5IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMgorZGRuZXh0cDAxMCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDMKK2RkbmV4dHAwMTEgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA0CitkZG5leHRwMDEyIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwNCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNQorZGRuZXh0cDAxMyBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDYKK2RkbmV4dHAwMTQgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA3CitkZG5leHRwMDE1IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwNyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwOAorZGRuZXh0cDAxNiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDkKK2RkbmV4dHAwMTcgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDEwCitkZG5leHRwMDE4IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAxMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAxMQorZGRuZXh0cDAxOSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMTIKKworZGRuZXh0cDAyMSBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk0CitkZG5leHRwMDIyIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTUKK2RkbmV4dHAwMjMgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NgorZGRuZXh0cDAyNCBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk3CitkZG5leHRwMDI1IG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTgKK2RkbmV4dHAwMjYgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0cDAyNyBuZXh0cGx1cyAtMS4wICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHAwMjggbmV4dHBsdXMgLTEgICAgICAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHRwMDI5IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMAorZGRuZXh0cDAzMCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHAwMzEgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAyCitkZG5leHRwMDMyIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMworZGRuZXh0cDAzMyBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDUgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDQKK2RkbmV4dHAwMzQgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA1CitkZG5leHRwMDM1IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNgorZGRuZXh0cDAzNiBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDggIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDcKK2RkbmV4dHAwMzcgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA4CitkZG5leHRwMDM4IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOQorZGRuZXh0cDAzOSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMTEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMTAKK2RkbmV4dHAwNDAgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDEyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDExCisKKy0tIFplcm9zCitkZG5leHRwMTAwIG5leHRwbHVzICAwICAgICAgICAgICAtPiAgMUUtMzk4CitkZG5leHRwMTAxIG5leHRwbHVzICAwLjAwICAgICAgICAtPiAgMUUtMzk4CitkZG5leHRwMTAyIG5leHRwbHVzICAwRS0zMDAgICAgICAtPiAgMUUtMzk4CitkZG5leHRwMTAzIG5leHRwbHVzICAwRSszMDAgICAgICAtPiAgMUUtMzk4CitkZG5leHRwMTA0IG5leHRwbHVzICAwRSszMDAwMCAgICAtPiAgMUUtMzk4CitkZG5leHRwMTA1IG5leHRwbHVzIC0wICAgICAgICAgICAtPiAgMUUtMzk4CitkZG5leHRwMTA2IG5leHRwbHVzIC0wLjAwICAgICAgICAtPiAgMUUtMzk4CitkZG5leHRwMTA3IG5leHRwbHVzIC0wRS0zMDAgICAgICAtPiAgMUUtMzk4CitkZG5leHRwMTA4IG5leHRwbHVzIC0wRSszMDAgICAgICAtPiAgMUUtMzk4CitkZG5leHRwMTA5IG5leHRwbHVzIC0wRSszMDAwMCAgICAtPiAgMUUtMzk4CisKKy0tIHNwZWNpYWxzCitkZG5leHRwMTUwIG5leHRwbHVzICAgSW5mICAgIC0+ICBJbmZpbml0eQorZGRuZXh0cDE1MSBuZXh0cGx1cyAgLUluZiAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0cDE1MiBuZXh0cGx1cyAgIE5hTiAgICAtPiAgTmFOCitkZG5leHRwMTUzIG5leHRwbHVzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0cDE1NCBuZXh0cGx1cyAgIE5hTjc3ICAtPiAgTmFONzcKK2RkbmV4dHAxNTUgbmV4dHBsdXMgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCitkZG5leHRwMTU2IG5leHRwbHVzICAtTmFOICAgIC0+IC1OYU4KK2RkbmV4dHAxNTcgbmV4dHBsdXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHRwMTU4IG5leHRwbHVzICAtTmFONzcgIC0+IC1OYU43NworZGRuZXh0cDE1OSBuZXh0cGx1cyAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKK2RkbmV4dHAxNzAgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OThFKzM4NAorZGRuZXh0cDE3MSBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk4RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5N0UrMzg0CitkZG5leHRwMTcyIG5leHRwbHVzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NAorZGRuZXh0cDE3MyBuZXh0cGx1cyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQKK2RkbmV4dHAxNzQgbmV4dHBsdXMgIC05RS0zOTggICAgICAgICAgICAgICAgICAtPiAtOEUtMzk4CitkZG5leHRwMTc1IG5leHRwbHVzICAtOS45RS0zOTcgICAgICAgICAgICAgICAgLT4gLTkuOEUtMzk3CitkZG5leHRwMTc2IG5leHRwbHVzICAtOS45OTk5OTk5OTk5OUUtMzg3ICAgICAgLT4gLTkuOTk5OTk5OTk5OThFLTM4NworZGRuZXh0cDE3NyBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk4RS0zODQKK2RkbmV4dHAxNzggbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk4RS0zODQgICAtPiAtOS45OTk5OTk5OTk5OTk5N0UtMzg0CitkZG5leHRwMTc5IG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5N0UtMzg0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTZFLTM4NAorZGRuZXh0cDE4MCBuZXh0cGx1cyAgLTBFLTM5OCAgICAgICAgICAgICAgICAgIC0+ICAxRS0zOTgKK2RkbmV4dHAxODEgbmV4dHBsdXMgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMEUtMzk4CitkZG5leHRwMTgyIG5leHRwbHVzICAtMkUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OAorCitkZG5leHRwMTgzIG5leHRwbHVzICAgMEUtMzk4ICAgICAgICAgICAgICAgICAgLT4gIDFFLTM5OAorZGRuZXh0cDE4NCBuZXh0cGx1cyAgIDFFLTM5OCAgICAgICAgICAgICAgICAgIC0+ICAyRS0zOTgKK2RkbmV4dHAxODUgbmV4dHBsdXMgICAyRS0zOTggICAgICAgICAgICAgICAgICAtPiAgM0UtMzk4CitkZG5leHRwMTg2IG5leHRwbHVzICAgMTBFLTM5OCAgICAgICAgICAgICAgICAgLT4gIDEuMUUtMzk3CitkZG5leHRwMTg3IG5leHRwbHVzICAgMTAwRS0zOTggICAgICAgICAgICAgICAgLT4gIDEuMDFFLTM5NgorZGRuZXh0cDE4OCBuZXh0cGx1cyAgIDEwMDAwMEUtMzk4ICAgICAgICAgICAgIC0+ICAxLjAwMDAxRS0zOTMKK2RkbmV4dHAxODkgbmV4dHBsdXMgICAxLjAwMDAwMDAwMDAwRS0zODMgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0cDE5MCBuZXh0cGx1cyAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHRwMTkxIG5leHRwbHVzICAgMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMKK2RkbmV4dHAxOTIgbmV4dHBsdXMgICA5Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0cDE5MyBuZXh0cGx1cyAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+ICBJbmZpbml0eQorCistLSBOdWxsIHRlc3RzCitkZG5leHRwOTAwIG5leHRwbHVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dFRvd2FyZC5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRUb3dhcmQuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWU0NzRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRUb3dhcmQuZGVjVGVzdApAQCAtMCwwICsxLDM3NCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZE5leHRUb3dhcmQuZGVjVGVzdCAtLSBkZWNEb3VibGUgbmV4dCB0b3dhcmQgcmhzIFs3NTRyIG5leHRhZnRlcl0gLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sgd2l0aCBhIHNjYXR0ZXJpbmcgb2YgbnVtZXJpY3MKK2RkbmV4dHQwMDEgbmV4dHRvd2FyZCAgIDEwICAgIDEwICAgLT4gIDEwCitkZG5leHR0MDAyIG5leHR0b3dhcmQgIC0xMCAgIC0xMCAgIC0+IC0xMAorZGRuZXh0dDAwMyBuZXh0dG93YXJkICAgMSAgICAgMTAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQwMDQgbmV4dHRvd2FyZCAgIDEgICAgLTEwICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDAwNSBuZXh0dG93YXJkICAtMSAgICAgMTAgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MDA2IG5leHR0b3dhcmQgIC0xICAgIC0xMCAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDAwNyBuZXh0dG93YXJkICAgMCAgICAgMTAgICAtPiAgMUUtMzk4ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MDA4IG5leHR0b3dhcmQgICAwICAgIC0xMCAgIC0+IC0xRS0zOTggICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQwMDkgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgK0luZmluaXR5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQwMTAgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLUluZmluaXR5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQwMTEgbmV4dHRvd2FyZCAgICAgICA5Ljk5OTk5OTk5OTk5OTk5OSAgMTAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMAorZGRuZXh0dDAxMiBuZXh0dG93YXJkICAgMTAgIDkuOTk5OTk5OTk5OTk5OTk5ICAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MDEzIG5leHR0b3dhcmQgICAgICAtOS45OTk5OTk5OTk5OTk5OTkgLTEwICAtPiAtMTAuMDAwMDAwMDAwMDAwMDAKK2RkbmV4dHQwMTQgbmV4dHRvd2FyZCAgLTEwIC05Ljk5OTk5OTk5OTk5OTk5OSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDAxNSBuZXh0dG93YXJkICAgICAgIDkuOTk5OTk5OTk5OTk5OTk4ICAxMCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MDE2IG5leHR0b3dhcmQgICAxMCAgOS45OTk5OTk5OTk5OTk5OTggICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQwMTcgbmV4dHRvd2FyZCAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OCAtMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDAxOCBuZXh0dG93YXJkICAtMTAgLTkuOTk5OTk5OTk5OTk5OTk4ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5CisKKy0tLS0tLS0gbGhzPXJocworLS0gZmluaXRlcworZGRuZXh0dDEwMSBuZXh0dG93YXJkICAgICAgICAgIDcgICAgICAgNyAtPiAgNworZGRuZXh0dDEwMiBuZXh0dG93YXJkICAgICAgICAgLTcgICAgICAtNyAtPiAtNworZGRuZXh0dDEwMyBuZXh0dG93YXJkICAgICAgICAgNzUgICAgICA3NSAtPiAgNzUKK2RkbmV4dHQxMDQgbmV4dHRvd2FyZCAgICAgICAgLTc1ICAgICAtNzUgLT4gLTc1CitkZG5leHR0MTA1IG5leHR0b3dhcmQgICAgICAgNy41MCAgICAgNy41IC0+ICA3LjUwCitkZG5leHR0MTA2IG5leHR0b3dhcmQgICAgICAtNy41MCAgIC03LjUwIC0+IC03LjUwCitkZG5leHR0MTA3IG5leHR0b3dhcmQgICAgICAgNy41MDAgNy41MDAwIC0+ICA3LjUwMAorZGRuZXh0dDEwOCBuZXh0dG93YXJkICAgICAgLTcuNTAwICAgLTcuNSAtPiAtNy41MDAKKworLS0gemVyb3MKK2RkbmV4dHQxMTEgbmV4dHRvd2FyZCAgICAgICAgICAwICAgICAgIDAgLT4gIDAKK2RkbmV4dHQxMTIgbmV4dHRvd2FyZCAgICAgICAgIC0wICAgICAgLTAgLT4gLTAKK2RkbmV4dHQxMTMgbmV4dHRvd2FyZCAgICAgICAwRSs0ICAgICAgIDAgLT4gIDBFKzQKK2RkbmV4dHQxMTQgbmV4dHRvd2FyZCAgICAgIC0wRSs0ICAgICAgLTAgLT4gLTBFKzQKK2RkbmV4dHQxMTUgbmV4dHRvd2FyZCAgICAgMC4wMDAwMDAwMDAwMCAgIDAuMDAwMDAwMDAwMDAwIC0+ICAwRS0xMQorZGRuZXh0dDExNiBuZXh0dG93YXJkICAgIC0wLjAwMDAwMDAwMDAwICAtMC4wMCAgICAgICAgICAgLT4gLTBFLTExCitkZG5leHR0MTE3IG5leHR0b3dhcmQgICAgICAwRS0xNDEgICAgICAwIC0+ICAwRS0xNDEKK2RkbmV4dHQxMTggbmV4dHRvd2FyZCAgICAgLTBFLTE0MSAgIC0wMDAgLT4gLTBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZGRuZXh0dDEyMSBuZXh0dG93YXJkICAgMjY4MjY4MjY4ICAgIDI2ODI2ODI2OCAtPiAgIDI2ODI2ODI2OAorZGRuZXh0dDEyMiBuZXh0dG93YXJkICAtMjY4MjY4MjY4ICAgLTI2ODI2ODI2OCAtPiAgLTI2ODI2ODI2OAorZGRuZXh0dDEyMyBuZXh0dG93YXJkICAgMTM0MTM0MTM0ICAgIDEzNDEzNDEzNCAtPiAgIDEzNDEzNDEzNAorZGRuZXh0dDEyNCBuZXh0dG93YXJkICAtMTM0MTM0MTM0ICAgLTEzNDEzNDEzNCAtPiAgLTEzNDEzNDEzNAorCistLSBObWF4LCBObWluLCBOdGlueQorZGRuZXh0dDEzMSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0MTMyIG5leHR0b3dhcmQgIDFFLTM4MyAgICAgICAgICAgMUUtMzgzICAgICAgICAgICAgLT4gICAxRS0zODMKK2RkbmV4dHQxMzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRuZXh0dDEzNCBuZXh0dG93YXJkICAxRS0zOTggICAgICAgICAgIDFFLTM5OCAgICAgICAgICAgIC0+ICAgMUUtMzk4CisKK2RkbmV4dHQxMzUgbmV4dHRvd2FyZCAgLTFFLTM5OCAgICAgICAgICAtMUUtMzk4ICAgICAgICAgICAtPiAgLTFFLTM5OAorZGRuZXh0dDEzNiBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZG5leHR0MTM3IG5leHR0b3dhcmQgIC0xRS0zODMgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAgLT4gIC0xRS0zODMKK2RkbmV4dHQxMzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+ICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorCistLS0tLS0tIGxoczxyaHMKK2RkbmV4dHQyMDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk1IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk2CitkZG5leHR0MjAyIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5NiBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NworZGRuZXh0dDIwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTcgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTgKK2RkbmV4dHQyMDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk4IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MjA1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwCitkZG5leHR0MjA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0MjA3IG5leHR0b3dhcmQgIDEuMCAgICAgICAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQyMDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDIwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMgorZGRuZXh0dDIxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMworZGRuZXh0dDIxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNAorZGRuZXh0dDIxMiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNQorZGRuZXh0dDIxMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNgorZGRuZXh0dDIxNCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNworZGRuZXh0dDIxNSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwOAorZGRuZXh0dDIxNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwOQorZGRuZXh0dDIxNyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMAorZGRuZXh0dDIxOCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMQorZGRuZXh0dDIxOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMgorCitkZG5leHR0MjIxIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5NSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NAorZGRuZXh0dDIyMiBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTYgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTUKK2RkbmV4dHQyMjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk3IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk2CitkZG5leHR0MjI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OCBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NworZGRuZXh0dDIyNSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTgKK2RkbmV4dHQyMjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MjI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MjI4IG5leHR0b3dhcmQgLTEgICAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0MjI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAxICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwCitkZG5leHR0MjMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0MjMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAzICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAyCitkZG5leHR0MjMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA0ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAzCitkZG5leHR0MjMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA1ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA0CitkZG5leHR0MjM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA2ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA1CitkZG5leHR0MjM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA3ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA2CitkZG5leHR0MjM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA4ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA3CitkZG5leHR0MjM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA5ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA4CitkZG5leHR0MjM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDEwICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA5CitkZG5leHR0MjM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDExICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDEwCitkZG5leHR0MjQwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDEyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDExCisKKy0tIFplcm9zCitkZG5leHR0MzAwIG5leHR0b3dhcmQgIDAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzAxIG5leHR0b3dhcmQgIDAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzAyIG5leHR0b3dhcmQgIDBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzAzIG5leHR0b3dhcmQgIDBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzA0IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzA1IG5leHR0b3dhcmQgLTAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzA2IG5leHR0b3dhcmQgLTAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzA3IG5leHR0b3dhcmQgLTBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzA4IG5leHR0b3dhcmQgLTBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzA5IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNwZWNpYWxzCitkZG5leHR0MzUwIG5leHR0b3dhcmQgICBJbmYgICAgSW5maW5pdHkgLT4gIEluZmluaXR5CitkZG5leHR0MzUxIG5leHR0b3dhcmQgIC1JbmYgICAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQzNTIgbmV4dHRvd2FyZCAgIE5hTiAgICBJbmZpbml0eSAtPiAgTmFOCitkZG5leHR0MzUzIG5leHR0b3dhcmQgIHNOYU4gICAgSW5maW5pdHkgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0MzU0IG5leHR0b3dhcmQgICBOYU43NyAgSW5maW5pdHkgLT4gIE5hTjc3CitkZG5leHR0MzU1IG5leHR0b3dhcmQgIHNOYU44OCAgSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0MzU2IG5leHR0b3dhcmQgIC1OYU4gICAgSW5maW5pdHkgLT4gLU5hTgorZGRuZXh0dDM1NyBuZXh0dG93YXJkIC1zTmFOICAgIEluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDM1OCBuZXh0dG93YXJkICAtTmFONzcgIEluZmluaXR5IC0+IC1OYU43NworZGRuZXh0dDM1OSBuZXh0dG93YXJkIC1zTmFOODggIEluZmluaXR5IC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworZGRuZXh0dDM3MCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0CitkZG5leHR0MzcxIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk3RSszODQKK2RkbmV4dHQzNzIgbmV4dHRvd2FyZCAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM3MyBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzc0IG5leHR0b3dhcmQgIC05RS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLThFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzNzUgbmV4dHRvd2FyZCAgLTkuOUUtMzk3ICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOS44RS0zOTcgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM3NiBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OUUtMzg3ICAgICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk4RS0zODcgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzc3IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OThFLTM4NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzNzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OThFLTM4NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5N0UtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM3OSBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5N0UtMzg0ICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk2RS0zODQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0MzgwIG5leHR0b3dhcmQgIC0wRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDFFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzODEgbmV4dHRvd2FyZCAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RkbmV4dHQzODIgbmV4dHRvd2FyZCAgLTJFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtMUUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkZG5leHR0MzgzIG5leHR0b3dhcmQgICAwRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDFFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzODQgbmV4dHRvd2FyZCAgIDFFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMkUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM4NSBuZXh0dG93YXJkICAgMkUtMzk4ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAzRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzg2IG5leHR0b3dhcmQgICAxMEUtMzk4ICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMUUtMzk3ICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQzODcgbmV4dHRvd2FyZCAgIDEwMEUtMzk4ICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4wMUUtMzk2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDM4OCBuZXh0dG93YXJkICAgMTAwMDAwRS0zOTggICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAxRS0zOTMgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Mzg5IG5leHR0b3dhcmQgICAxLjAwMDAwMDAwMDAwRS0zODMgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMKK2RkbmV4dHQzOTAgbmV4dHRvd2FyZCAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIEluZmluaXR5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0dDM5MSBuZXh0dG93YXJkICAgMUUtMzgzICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitkZG5leHR0MzkyIG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5N0UrMzg0ICBJbmZpbml0eSAgLT4gIDkuOTk5OTk5OTk5OTk5OTk4RSszODQKK2RkbmV4dHQzOTMgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk4RSszODQgIEluZmluaXR5ICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDM5NCBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgSW5maW5pdHkgIC0+ICBJbmZpbml0eSAgICAgICAgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLS0tLS0tIGxocz5yaHMKK2RkbmV4dHQ0MDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTQKK2RkbmV4dHQ0MDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTUKK2RkbmV4dHQ0MDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTYKK2RkbmV4dHQ0MDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTcKK2RkbmV4dHQ0MDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTgKK2RkbmV4dHQ0MDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQ0MDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDQwOCBuZXh0dG93YXJkICAxICAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5CitkZG5leHR0NDA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAKK2RkbmV4dHQ0MTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDQxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAyCitkZG5leHR0NDEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDMKK2RkbmV4dHQ0MTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDUgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNAorZGRuZXh0dDQxNCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA1CitkZG5leHR0NDE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDYKK2RkbmV4dHQ0MTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDggICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNworZGRuZXh0dDQxNyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA4CitkZG5leHR0NDE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDkKK2RkbmV4dHQ0MTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMTEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMAorZGRuZXh0dDQyMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDExCisKK2RkbmV4dHQ0MjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTYKK2RkbmV4dHQ0MjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTcKK2RkbmV4dHQ0MjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTgKK2RkbmV4dHQ0MjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQ0MjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMAorZGRuZXh0dDQyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0NDI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQorZGRuZXh0dDQyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQ0MjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMgorZGRuZXh0dDQzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAzCitkZG5leHR0NDMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDQKK2RkbmV4dHQ0MzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNQorZGRuZXh0dDQzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA2CitkZG5leHR0NDM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDcKK2RkbmV4dHQ0MzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOAorZGRuZXh0dDQzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA5CitkZG5leHR0NDM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTAKK2RkbmV4dHQ0MzggbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMQorZGRuZXh0dDQzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDEyCisKKy0tIFplcm9zCitkZG5leHR0NTAwIG5leHR0b3dhcmQgLTAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NTAxIG5leHR0b3dhcmQgIDAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NTAyIG5leHR0b3dhcmQgIDAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NTAzIG5leHR0b3dhcmQgLTAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NTA0IG5leHR0b3dhcmQgIDBFLTMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NTA1IG5leHR0b3dhcmQgIDBFKzMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NTA2IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NTA3IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNwZWNpYWxzCitkZG5leHR0NTUwIG5leHR0b3dhcmQgICBJbmYgICAgIC1JbmZpbml0eSAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDU1MSBuZXh0dG93YXJkICAtSW5mICAgICAtSW5maW5pdHkgLT4gLUluZmluaXR5CitkZG5leHR0NTUyIG5leHR0b3dhcmQgICBOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOCitkZG5leHR0NTUzIG5leHR0b3dhcmQgIHNOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ1NTQgbmV4dHRvd2FyZCAgIE5hTjc3ICAgLUluZmluaXR5IC0+ICBOYU43NworZGRuZXh0dDU1NSBuZXh0dG93YXJkICBzTmFOODggICAtSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0NTU2IG5leHR0b3dhcmQgIC1OYU4gICAgIC1JbmZpbml0eSAtPiAtTmFOCitkZG5leHR0NTU3IG5leHR0b3dhcmQgLXNOYU4gICAgIC1JbmZpbml0eSAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ1NTggbmV4dHRvd2FyZCAgLU5hTjc3ICAgLUluZmluaXR5IC0+IC1OYU43NworZGRuZXh0dDU1OSBuZXh0dG93YXJkIC1zTmFOODggICAtSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCitkZG5leHR0NjcwIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk4RSszODQKK2RkbmV4dHQ2NzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTdFKzM4NAorZGRuZXh0dDY3MiBuZXh0dG93YXJkICAxRS0zODMgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2NzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njc0IG5leHR0b3dhcmQgIDlFLTM5OCAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDhFLTM5OCAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY3NSBuZXh0dG93YXJkICA5LjlFLTM5NyAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA5LjhFLTM5NyAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2NzYgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OUUtMzg3ICAgICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OEUtMzg3ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njc3IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OThFLTM4NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY3OCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk4RS0zODQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk3RS0zODQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2NzkgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5N0UtMzg0ICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5NkUtMzg0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0NjgwIG5leHR0b3dhcmQgIDBFLTM5OCAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY4MSBuZXh0dG93YXJkICAxRS0zOTggICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAwRS0zOTggICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRuZXh0dDY4MiBuZXh0dG93YXJkICAyRS0zOTggICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAxRS0zOTggICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKKworZGRuZXh0dDY4MyBuZXh0dG93YXJkICAtMEUtMzk4ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMUUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2ODQgbmV4dHRvd2FyZCAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTJFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njg1IG5leHR0b3dhcmQgIC0yRS0zOTggICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0zRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY4NiBuZXh0dG93YXJkICAtMTBFLTM5OCAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4xRS0zOTcgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ2ODcgbmV4dHRvd2FyZCAgLTEwMEUtMzk4ICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDFFLTM5NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkZG5leHR0Njg4IG5leHR0b3dhcmQgIC0xMDAwMDBFLTM5OCAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAxRS0zOTMgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorZGRuZXh0dDY4OSBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMEUtMzgzICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0dDY5MCBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0dDY5MSBuZXh0dG93YXJkICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MworZGRuZXh0dDY5MiBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgLUluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDY5MyBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLUluZmluaXR5ICAtPiAtSW5maW5pdHkgICAgICAgICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0tLS0tLSBTcGVjaWFscworZGRuZXh0dDc4MCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RkbmV4dHQ3ODEgbmV4dHRvd2FyZCAtSW5mICAtMTAwMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQ3ODIgbmV4dHRvd2FyZCAtSW5mICAtMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQ3ODMgbmV4dHRvd2FyZCAtSW5mICAtMCAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQ3ODQgbmV4dHRvd2FyZCAtSW5mICAgMCAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQ3ODUgbmV4dHRvd2FyZCAtSW5mICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQ3ODYgbmV4dHRvd2FyZCAtSW5mICAgMTAwMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkbmV4dHQ3ODcgbmV4dHRvd2FyZCAtMTAwMCAtSW5mICAgLT4gLTEwMDAuMDAwMDAwMDAwMDAxCitkZG5leHR0Nzg4IG5leHR0b3dhcmQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZGRuZXh0dDc4OSBuZXh0dG93YXJkIC0xICAgIC1JbmYgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDEKK2RkbmV4dHQ3OTAgbmV4dHRvd2FyZCAtMCAgICAtSW5mICAgLT4gLTFFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ3OTEgbmV4dHRvd2FyZCAgMCAgICAtSW5mICAgLT4gLTFFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ3OTIgbmV4dHRvd2FyZCAgMSAgICAtSW5mICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OQorZGRuZXh0dDc5MyBuZXh0dG93YXJkICAxMDAwIC1JbmYgICAtPiAgOTk5Ljk5OTk5OTk5OTk5OTkKK2RkbmV4dHQ3OTQgbmV4dHRvd2FyZCAgSW5mICAtSW5mICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQKKworZGRuZXh0dDgwMCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDgwMSBuZXh0dG93YXJkICBJbmYgIC0xMDAwICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDgwMiBuZXh0dG93YXJkICBJbmYgIC0xICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDgwMyBuZXh0dG93YXJkICBJbmYgIC0wICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDgwNCBuZXh0dG93YXJkICBJbmYgICAwICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDgwNSBuZXh0dG93YXJkICBJbmYgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDgwNiBuZXh0dG93YXJkICBJbmYgICAxMDAwICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRuZXh0dDgwNyBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkbmV4dHQ4MDggbmV4dHRvd2FyZCAtMTAwMCAgSW5mICAgLT4gLTk5OS45OTk5OTk5OTk5OTk5CitkZG5leHR0ODA5IG5leHR0b3dhcmQgLUluZiAgIEluZiAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZG5leHR0ODEwIG5leHR0b3dhcmQgLTEgICAgIEluZiAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkKK2RkbmV4dHQ4MTEgbmV4dHRvd2FyZCAtMCAgICAgSW5mICAgLT4gIDFFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ4MTIgbmV4dHRvd2FyZCAgMCAgICAgSW5mICAgLT4gIDFFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RkbmV4dHQ4MTMgbmV4dHRvd2FyZCAgMSAgICAgSW5mICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxCitkZG5leHR0ODE0IG5leHR0b3dhcmQgIDEwMDAgIEluZiAgIC0+ICAxMDAwLjAwMDAwMDAwMDAwMQorZGRuZXh0dDgxNSBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZGRuZXh0dDgyMSBuZXh0dG93YXJkICBOYU4gLUluZiAgICAtPiAgTmFOCitkZG5leHR0ODIyIG5leHR0b3dhcmQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RkbmV4dHQ4MjMgbmV4dHRvd2FyZCAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRuZXh0dDgyNCBuZXh0dG93YXJkICBOYU4gLTAgICAgICAtPiAgTmFOCitkZG5leHR0ODI1IG5leHR0b3dhcmQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RkbmV4dHQ4MjYgbmV4dHRvd2FyZCAgTmFOICAxICAgICAgLT4gIE5hTgorZGRuZXh0dDgyNyBuZXh0dG93YXJkICBOYU4gIDEwMDAgICAtPiAgTmFOCitkZG5leHR0ODI4IG5leHR0b3dhcmQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RkbmV4dHQ4MjkgbmV4dHRvd2FyZCAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRuZXh0dDgzMCBuZXh0dG93YXJkIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkZG5leHR0ODMxIG5leHR0b3dhcmQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RkbmV4dHQ4MzIgbmV4dHRvd2FyZCAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRuZXh0dDgzMyBuZXh0dG93YXJkIC0wICAgIE5hTiAgICAtPiAgTmFOCitkZG5leHR0ODM0IG5leHR0b3dhcmQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RkbmV4dHQ4MzUgbmV4dHRvd2FyZCAgMSAgICBOYU4gICAgLT4gIE5hTgorZGRuZXh0dDgzNiBuZXh0dG93YXJkICAxMDAwIE5hTiAgICAtPiAgTmFOCitkZG5leHR0ODM3IG5leHR0b3dhcmQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRuZXh0dDg0MSBuZXh0dG93YXJkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0MiBuZXh0dG93YXJkICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0MyBuZXh0dG93YXJkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0NCBuZXh0dG93YXJkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0NSBuZXh0dG93YXJkICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0NiBuZXh0dG93YXJkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0NyBuZXh0dG93YXJkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0OCBuZXh0dG93YXJkICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg0OSBuZXh0dG93YXJkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1MCBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1MSBuZXh0dG93YXJkIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1MiBuZXh0dG93YXJkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1MyBuZXh0dG93YXJkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1NCBuZXh0dG93YXJkIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1NSBuZXh0dG93YXJkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1NiBuZXh0dG93YXJkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1NyBuZXh0dG93YXJkICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1OCBuZXh0dG93YXJkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg1OSBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZG5leHR0ODYxIG5leHR0b3dhcmQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitkZG5leHR0ODYyIG5leHR0b3dhcmQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitkZG5leHR0ODYzIG5leHR0b3dhcmQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitkZG5leHR0ODY0IG5leHR0b3dhcmQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitkZG5leHR0ODY1IG5leHR0b3dhcmQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitkZG5leHR0ODY2IG5leHR0b3dhcmQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitkZG5leHR0ODY3IG5leHR0b3dhcmQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitkZG5leHR0ODY4IG5leHR0b3dhcmQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitkZG5leHR0ODY5IG5leHR0b3dhcmQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZGRuZXh0dDg3MSBuZXh0dG93YXJkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODcyIG5leHR0b3dhcmQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4NzMgbmV4dHRvd2FyZCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg3NCBuZXh0dG93YXJkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODc1IG5leHR0b3dhcmQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4NzYgbmV4dHRvd2FyZCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg3NyBuZXh0dG93YXJkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODc4IG5leHR0b3dhcmQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4NzkgbmV4dHRvd2FyZCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZGRuZXh0dDg4MCBuZXh0dG93YXJkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0ODgxIG5leHR0b3dhcmQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4ODIgbmV4dHRvd2FyZCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitkZG5leHR0ODgzIG5leHR0b3dhcmQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2RkbmV4dHQ4ODQgbmV4dHRvd2FyZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitkZG5leHR0ODg1IG5leHR0b3dhcmQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0cworZGRuZXh0dDkwMCBuZXh0dG93YXJkIDEgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG5leHR0OTAxIG5leHR0b3dhcmQgIyAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE9yLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkT3IuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2E3MDJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE9yLmRlY1Rlc3QKQEAgLTAsMCArMSwyOTIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRPci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIE9SIGZvciBkZWNEb3VibGVzICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKK2Rkb3IwMDEgb3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK2Rkb3IwMDIgb3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDEKK2Rkb3IwMDMgb3IgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDEKK2Rkb3IwMDQgb3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDEKK2Rkb3IwMDUgb3IgICAgICAgICAgMTEwMCAxMDEwIC0+IDExMTAKKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCitkZG9yMDA2IG9yIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorZGRvcjAwNyBvciAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwCitkZG9yMDA4IG9yIDEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAKK2Rkb3IwMDkgb3IgMTAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAorZGRvcjAxMCBvciAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2Rkb3IwMTEgb3IgMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMAorZGRvcjAxMiBvciAwMTAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwCitkZG9yMDEzIG9yIDAxMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAKKworLS0gVmFyaW91cyBsZW5ndGhzCistLSAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NgorZGRvcjAyMCBvciAxMTExMTExMTExMTExMTExICAgICAxMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMQorZGRvcjAyMSBvciAgMTExMTExMTExMTExMTExICAgICAgMTExMTExMTExMTExMTExICAtPiAgIDExMTExMTExMTExMTExMQorZGRvcjAyMiBvciAgIDExMTExMTExMTExMTExICAgICAgIDExMTExMTExMTExMTExICAtPiAgICAxMTExMTExMTExMTExMQorZGRvcjAyMyBvciAgICAxMTExMTExMTExMTExICAgICAgICAxMTExMTExMTExMTExICAtPiAgICAgMTExMTExMTExMTExMQorZGRvcjAyNCBvciAgICAgMTExMTExMTExMTExICAgICAgICAgMTExMTExMTExMTExICAtPiAgICAgIDExMTExMTExMTExMQorZGRvcjAyNSBvciAgICAgIDExMTExMTExMTExICAgICAgICAgIDExMTExMTExMTExICAtPiAgICAgICAxMTExMTExMTExMQorZGRvcjAyNiBvciAgICAgICAxMTExMTExMTExICAgICAgICAgICAxMTExMTExMTExICAtPiAgICAgICAgMTExMTExMTExMQorZGRvcjAyNyBvciAgICAgICAgMTExMTExMTExICAgICAgICAgICAgMTExMTExMTExICAtPiAgICAgICAgIDExMTExMTExMQorZGRvcjAyOCBvciAgICAgICAgIDExMTExMTExICAgICAgICAgICAgIDExMTExMTExICAtPiAgICAgICAgICAxMTExMTExMQorZGRvcjAyOSBvciAgICAgICAgICAxMTExMTExICAgICAgICAgICAgICAxMTExMTExICAtPiAgICAgICAgICAgMTExMTExMQorZGRvcjAzMCBvciAgICAgICAgICAgMTExMTExICAgICAgICAgICAgICAgMTExMTExICAtPiAgICAgICAgICAgIDExMTExMQorZGRvcjAzMSBvciAgICAgICAgICAgIDExMTExICAgICAgICAgICAgICAgIDExMTExICAtPiAgICAgICAgICAgICAxMTExMQorZGRvcjAzMiBvciAgICAgICAgICAgICAxMTExICAgICAgICAgICAgICAgICAxMTExICAtPiAgICAgICAgICAgICAgMTExMQorZGRvcjAzMyBvciAgICAgICAgICAgICAgMTExICAgICAgICAgICAgICAgICAgMTExICAtPiAgICAgICAgICAgICAgIDExMQorZGRvcjAzNCBvciAgICAgICAgICAgICAgIDExICAgICAgICAgICAgICAgICAgIDExICAtPiAgICAgICAgICAgICAgICAxMQorZGRvcjAzNSBvciAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAxICAtPiAgICAgICAgICAgICAgICAgMQorZGRvcjAzNiBvciAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAwICAtPiAgICAgICAgICAgICAgICAgMAorCitkZG9yMDQyIG9yICAxMTExMTExMTAwMDAwMDAgICAgIDExMTExMTExMTAwMDAwMDAgIC0+ICAxMTExMTExMTEwMDAwMDAwCitkZG9yMDQzIG9yICAgMTExMTExMTAwMDAwMDAgICAgIDEwMDAwMDAxMDAwMDAwMDAgIC0+ICAxMDExMTExMTEwMDAwMDAwCitkZG9yMDQ0IG9yICAgIDExMTExMTAwMDAwMDAgICAgIDEwMDAwMDEwMDAwMDAwMDAgIC0+ICAxMDAxMTExMTEwMDAwMDAwCitkZG9yMDQ1IG9yICAgICAxMTExMTAwMDAwMDAgICAgIDEwMDAwMTAwMDAwMDAwMDAgIC0+ICAxMDAwMTExMTEwMDAwMDAwCitkZG9yMDQ2IG9yICAgICAgMTExMTAwMDAwMDAgICAgIDEwMDAxMDAwMDAwMDAwMDAgIC0+ICAxMDAwMTExMTEwMDAwMDAwCitkZG9yMDQ3IG9yICAgICAgIDExMTAwMDAwMDAgICAgIDEwMDEwMDAwMDAwMDAwMDAgIC0+ICAxMDAxMDAxMTEwMDAwMDAwCitkZG9yMDQ4IG9yICAgICAgICAxMTAwMDAwMDAgICAgIDEwMTAwMDAwMDAwMDAwMDAgIC0+ICAxMDEwMDAwMTEwMDAwMDAwCitkZG9yMDQ5IG9yICAgICAgICAgMTAwMDAwMDAgICAgIDExMDAwMDAwMDAwMDAwMDAgIC0+ICAxMTAwMDAwMDEwMDAwMDAwCisKK2Rkb3IwOTAgb3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IwOTEgb3IgMTAxMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IwOTIgb3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IwOTMgb3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IwOTQgb3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKK2Rkb3IwOTUgb3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IwOTYgb3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IwOTcgb3IgMTExMTExMTAxICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK2Rkb3IwOTggb3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKKworZGRvcjEwMCBvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDExMTExMTExMQorZGRvcjEwMSBvciAxMTExMDExMTEgIDEwMTExMTExMSAgLT4gIDExMTExMTExMQorZGRvcjEwMiBvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gIDExMTExMTExMQorZGRvcjEwMyBvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gIDExMTExMTExMQorZGRvcjEwNCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQorZGRvcjEwNSBvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gIDExMTExMTExMQorZGRvcjEwNiBvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gIDExMTExMTExMQorZGRvcjEwNyBvciAxMTExMDExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTExMQorZGRvcjEwOCBvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMQorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK2Rkb3IyMjAgb3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjEgb3IgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjIgb3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjMgb3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjQgb3IgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjUgb3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjYgb3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjcgb3IgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjggb3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMjkgb3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMzAgb3IgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMzEgb3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyMzIgb3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK2Rkb3IyNDAgb3IgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNDEgb3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNDIgb3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNDMgb3IgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNDQgb3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitkZG9yMjUwIG9yICAyMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI1MSBvciAgNzAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNTIgb3IgIDgwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjUzIG9yICA5MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI1NCBvciAgMjAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNTUgb3IgIDcwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjU2IG9yICA4MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI1NyBvciAgOTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNTggb3IgIDEwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjU5IG9yICAxMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI2MCBvciAgMTAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNjEgb3IgIDEwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjYyIG9yICAwMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI2MyBvciAgMDAwMDAwMDAwMDAwMDAwMCA3MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNjQgb3IgIDAwMDAwMDAwMDAwMDAwMDAgODAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjY1IG9yICAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQorZGRvcjI3MCBvciAgMDIwMDAwMTAwMDAwMDAwMCAxMDAwMTAwMDAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNzEgb3IgIDA3MDAwMDAxMDAwMDAwMDAgMTAwMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjcyIG9yICAwODAwMDAwMDEwMDAwMDAwIDEwMDAwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI3MyBvciAgMDkwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNzQgb3IgIDEwMDAwMDAwMDAxMDAwMDAgMDIwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjc1IG9yICAxMDAwMDAwMDAwMDEwMDAwIDA3MDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI3NiBvciAgMTAwMDAwMDAwMDAwMTAwMCAwODAwMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyNzcgb3IgIDEwMDAwMDAwMDAwMDAxMDAgMDkwMDAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAorZGRvcjI4MCBvciAgMDAxMDAwMDAwMDAwMDAwMiAxMDAwMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyODEgb3IgIDAwMDEwMDAwMDAwMDAwMDcgMTAwMDAwMTAwMDAwMDAxMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjgyIG9yICAwMDAwMTAwMDAwMDAwMDA4IDEwMDAwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI4MyBvciAgMDAwMDAxMDAwMDAwMDAwOSAxMDAwMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyODQgb3IgIDEwMDAwMDEwMDAwMDAwMDAgMDAwMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjg1IG9yICAxMDAwMDAwMTAwMDAwMDAwIDAwMTAwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI4NiBvciAgMTAwMDAwMDAxMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyODcgb3IgIDEwMDAwMDAwMDEwMDAwMDAgMTAwMDAwMDAwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQorZGRvcjI4OCBvciAgMDAxMDAwMDAyMDAwMDAwMCAxMDAwMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyODkgb3IgIDAwMDEwMDAwNzAwMDAwMDEgMTAwMDAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjkwIG9yICAwMDAwMTAwMDgwMDAwMDEwIDEwMDAwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI5MSBvciAgMDAwMDAxMDA5MDAwMDEwMCAxMDAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyOTIgb3IgIDEwMDAwMDEwMDAwMDEwMDAgMDAwMDAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjkzIG9yICAxMDAwMDAwMTAwMDEwMDAwIDAwMDAwMDAwNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI5NCBvciAgMTAwMDAwMDAxMDEwMDAwMCAwMDAwMDAwMDgwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyOTUgb3IgIDEwMDAwMDAwMDEwMDAwMDAgMDAwMDAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworZGRvcjI5NiBvciAtMTAwMDAwMDAwMTAwMDAwMCAtMDAwMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMjk3IG9yIC0xMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IyOTggb3IgIDEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjI5OSBvciAgMTAwMDAwMDAwMTAwMDAwMCAgMDAwMDAwMDAxMTAwMDEwMCAtPiAgMTAwMDAwMDAxMTAwMDEwMAorCistLSBObWF4LCBObWluLCBOdGlueS1saWtlCitkZG9yMzMxIG9yICAyICAgOS45OTk5OTk5OUUrMTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzMzIgb3IgIDMgICAxRS0xOTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjMzMyBvciAgNCAgIDEuMDAwMDAwMDBFLTE5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzM0IG9yICA1ICAgMUUtMTAwICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzMzUgb3IgIDYgICAtMUUtMTAwICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjMzNiBvciAgNyAgIC0xLjAwMDAwMDAwRS0xOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzM3IG9yICA4ICAgLTFFLTE5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzMzggb3IgIDkgICAtOS45OTk5OTk5OUUrMTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM0MSBvciAgOS45OTk5OTk5OUUrMjk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzQyIG9yICAxRS0yOTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNDMgb3IgIDEuMDAwMDAwMDBFLTI5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM0NCBvciAgMUUtMTAwICAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzQ1IG9yICAtMUUtMTAwICAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNDYgb3IgIC0xLjAwMDAwMDAwRS0yOTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM0NyBvciAgLTFFLTI5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzQ4IG9yICAtOS45OTk5OTk5OUUrMjk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCitkZG9yMzYxIG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNjIgb3IgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM2MyBvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzY0IG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNjUgb3IgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM2NiBvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzcxIG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNzIgb3IgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM3MyBvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yMzc0IG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3IzNzUgb3IgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjM3NiBvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKK2Rkb3I3ODAgb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc4MSBvciAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzgyIG9yIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3ODMgb3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc4NCBvciAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzg1IG9yIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3ODYgb3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc4NyBvciAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzg4IG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3ODkgb3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc5MCBvciAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzkxIG9yICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I3OTIgb3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjc5MyBvciAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yNzk0IG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRvcjgwMCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODAxIG9yICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MDIgb3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgwMyBvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODA0IG9yICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MDUgb3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgwNiBvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODA3IG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MDggb3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgwOSBvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODEwIG9yIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MTEgb3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgxMiBvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODEzIG9yICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MTQgb3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgxNSBvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rkb3I4MjEgb3IgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgyMiBvciAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODIzIG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MjQgb3IgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgyNSBvciAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODI2IG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4Mjcgb3IgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgyOCBvciAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODI5IG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MzAgb3IgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgzMSBvciAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODMyIG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MzMgb3IgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgzNCBvciAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODM1IG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4MzYgb3IgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjgzNyBvciAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rkb3I4NDEgb3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODQyIG9yICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg0MyBvciAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NDQgb3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODQ1IG9yICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg0NiBvciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NDcgb3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODQ4IG9yICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg0OSBvciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NTAgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODUxIG9yIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg1MiBvciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NTMgb3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODU0IG9yIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg1NSBvciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NTYgb3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODU3IG9yICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg1OCBvciAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NTkgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rkb3I4NjEgb3IgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg2MiBvciArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODYzIG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NjQgb3IgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg2NSBvciAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODY2IG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4Njcgb3IgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg2OCBvciAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODY5IG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NzEgb3IgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg3MiBvciAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODczIG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4NzQgb3IgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg3NSBvciAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODc2IG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4Nzcgb3IgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg3OCBvciAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODc5IG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4ODAgb3IgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg4MSBvciArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODgyIG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkb3I4ODMgb3IgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRvcjg4NCBvciAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZG9yODg1IG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRQbHVzLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUGx1cy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YWEwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUGx1cy5kZWNUZXN0CkBAIC0wLDAgKzEsODggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRQbHVzLmRlY1Rlc3QgLS0gZGVjRG91YmxlIDAreCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkZHBsczAwMSBwbHVzICAgICAgICs3LjUwICAtPiA3LjUwCisKKy0tIEluZmluaXRpZXMKK2RkcGxzMDExIHBsdXMgIEluZmluaXR5ICAgIC0+IEluZmluaXR5CitkZHBsczAxMiBwbHVzICAtSW5maW5pdHkgICAtPiAtSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitkZHBsczAyMSBwbHVzICAgICAgICAgTmFOICAtPiBOYU4KK2RkcGxzMDIyIHBsdXMgICAgICAgIC1OYU4gIC0+IC1OYU4KK2RkcGxzMDIzIHBsdXMgICAgICAgIHNOYU4gIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcGxzMDI0IHBsdXMgICAgICAgLXNOYU4gIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZGRwbHMwMzEgcGx1cyAgICAgICBOYU4xMyAgLT4gTmFOMTMKK2RkcGxzMDMyIHBsdXMgICAgICAtTmFOMTMgIC0+IC1OYU4xMworZGRwbHMwMzMgcGx1cyAgICAgIHNOYU4xMyAgLT4gTmFOMTMgICBJbnZhbGlkX29wZXJhdGlvbgorZGRwbHMwMzQgcGx1cyAgICAgLXNOYU4xMyAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRwbHMwMzUgcGx1cyAgICAgICBOYU43MCAgLT4gTmFONzAKK2RkcGxzMDM2IHBsdXMgICAgICAtTmFONzAgIC0+IC1OYU43MAorZGRwbHMwMzcgcGx1cyAgICAgIHNOYU4xMDEgLT4gTmFOMTAxICBJbnZhbGlkX29wZXJhdGlvbgorZGRwbHMwMzggcGx1cyAgICAgLXNOYU4xMDEgLT4gLU5hTjEwMSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBmaW5pdGVzCitkZHBsczEwMSBwbHVzICAgICAgICAgIDcgICAtPiA3CitkZHBsczEwMiBwbHVzICAgICAgICAgLTcgICAtPiAtNworZGRwbHMxMDMgcGx1cyAgICAgICAgIDc1ICAgLT4gNzUKK2RkcGxzMTA0IHBsdXMgICAgICAgIC03NSAgIC0+IC03NQorZGRwbHMxMDUgcGx1cyAgICAgICA3LjUwICAgLT4gNy41MAorZGRwbHMxMDYgcGx1cyAgICAgIC03LjUwICAgLT4gLTcuNTAKK2RkcGxzMTA3IHBsdXMgICAgICAgNy41MDAgIC0+IDcuNTAwCitkZHBsczEwOCBwbHVzICAgICAgLTcuNTAwICAtPiAtNy41MDAKKworLS0gemVyb3MKK2RkcGxzMTExIHBsdXMgICAgICAgICAgMCAgIC0+IDAKK2RkcGxzMTEyIHBsdXMgICAgICAgICAtMCAgIC0+IDAKK2RkcGxzMTEzIHBsdXMgICAgICAgMEUrNCAgIC0+IDBFKzQKK2RkcGxzMTE0IHBsdXMgICAgICAtMEUrNCAgIC0+IDBFKzQKK2RkcGxzMTE1IHBsdXMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorZGRwbHMxMTYgcGx1cyAgICAtMC4wMDAwICAgLT4gMC4wMDAwCitkZHBsczExNyBwbHVzICAgICAgMEUtMTQxICAtPiAwRS0xNDEKK2RkcGxzMTE4IHBsdXMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZGRwbHMxMjEgcGx1cyAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODIKK2RkcGxzMTIyIHBsdXMgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MgorZGRwbHMxMjMgcGx1cyAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDEKK2RkcGxzMTI0IHBsdXMgIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZGRwbHMxMzEgcGx1cyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkcGxzMTMyIHBsdXMgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKK2RkcGxzMTMzIHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZHBsczEzNCBwbHVzICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4IFN1Ym5vcm1hbAorCitkZHBsczEzNSBwbHVzICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OCBTdWJub3JtYWwKK2RkcGxzMTM2IHBsdXMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRwbHMxMzcgcGx1cyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC0xRS0zODMKK2RkcGxzMTM4IHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NApkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFF1YW50aXplLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUXVhbnRpemUuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDE5YzlkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFF1YW50aXplLmRlY1Rlc3QKQEAgLTAsMCArMSw4MzMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRRdWFudGl6ZS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBxdWFudGl6ZSBvcGVyYXRpb24gICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBNb3N0IG9mIHRoZSB0ZXN0cyBoZXJlIGFzc3VtZSBhICJyZWd1bGFyIHBhdHRlcm4iLCB3aGVyZSB0aGUKKy0tIHNpZ24gYW5kIGNvZWZmaWNpZW50IGFyZSArMS4KKy0tIDIwMDQuMDMuMTUgVW5kZXJmbG93IGZvciBxdWFudGl6ZSBpcyBzdXBwcmVzc2VkCistLSAyMDA1LjA2LjA4IE1vcmUgZXh0ZW5zaXZlIHRlc3RzIGZvciAnZG9lcyBub3QgZml0JworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RkcXVhMDAxIHF1YW50aXplIDAgICAgICAgMWUwICAgLT4gMAorZGRxdWEwMDIgcXVhbnRpemUgMSAgICAgICAxZTAgICAtPiAxCitkZHF1YTAwMyBxdWFudGl6ZSAwLjEgICAgMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAwNSBxdWFudGl6ZSAwLjEgICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAwNiBxdWFudGl6ZSAwLjEgICAgIDFlMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAwNyBxdWFudGl6ZSAwLjEgICAgMWUtMSAgIC0+IDAuMQorZGRxdWEwMDggcXVhbnRpemUgMC4xICAgIDFlLTIgICAtPiAwLjEwCitkZHF1YTAwOSBxdWFudGl6ZSAwLjEgICAgMWUtMyAgIC0+IDAuMTAwCitkZHF1YTAxMCBxdWFudGl6ZSAwLjkgICAgMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAxMSBxdWFudGl6ZSAwLjkgICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAxMiBxdWFudGl6ZSAwLjkgICAgMWUrMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAxMyBxdWFudGl6ZSAwLjkgICAgMWUtMSAgIC0+IDAuOQorZGRxdWEwMTQgcXVhbnRpemUgMC45ICAgIDFlLTIgICAtPiAwLjkwCitkZHF1YTAxNSBxdWFudGl6ZSAwLjkgICAgMWUtMyAgIC0+IDAuOTAwCistLSBuZWdhdGl2ZXMKK2RkcXVhMDIxIHF1YW50aXplIC0wICAgICAgMWUwICAgLT4gLTAKK2RkcXVhMDIyIHF1YW50aXplIC0xICAgICAgMWUwICAgLT4gLTEKK2RkcXVhMDIzIHF1YW50aXplIC0wLjEgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAyNSBxdWFudGl6ZSAtMC4xICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMjYgcXVhbnRpemUgLTAuMSAgICAxZTAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDI3IHF1YW50aXplIC0wLjEgICAxZS0xICAgLT4gLTAuMQorZGRxdWEwMjggcXVhbnRpemUgLTAuMSAgIDFlLTIgICAtPiAtMC4xMAorZGRxdWEwMjkgcXVhbnRpemUgLTAuMSAgIDFlLTMgICAtPiAtMC4xMDAKK2RkcXVhMDMwIHF1YW50aXplIC0wLjkgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAzMSBxdWFudGl6ZSAtMC45ICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMzIgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDMzIHF1YW50aXplIC0wLjkgICAxZS0xICAgLT4gLTAuOQorZGRxdWEwMzQgcXVhbnRpemUgLTAuOSAgIDFlLTIgICAtPiAtMC45MAorZGRxdWEwMzUgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDAKK2RkcXVhMDM2IHF1YW50aXplIC0wLjUgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTAzNyBxdWFudGl6ZSAtMC41ICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEwMzggcXVhbnRpemUgLTAuNSAgIDFlKzAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDM5IHF1YW50aXplIC0wLjUgICAxZS0xICAgLT4gLTAuNQorZGRxdWEwNDAgcXVhbnRpemUgLTAuNSAgIDFlLTIgICAtPiAtMC41MAorZGRxdWEwNDEgcXVhbnRpemUgLTAuNSAgIDFlLTMgICAtPiAtMC41MDAKK2RkcXVhMDQyIHF1YW50aXplIC0wLjkgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTA0MyBxdWFudGl6ZSAtMC45ICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEwNDQgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDQ1IHF1YW50aXplIC0wLjkgICAxZS0xICAgLT4gLTAuOQorZGRxdWEwNDYgcXVhbnRpemUgLTAuOSAgIDFlLTIgICAtPiAtMC45MAorZGRxdWEwNDcgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDAKKworLS0gZXhhbXBsZXMgZnJvbSBTcGVjaWZpY2F0aW9uCitkZHF1YTA2MCBxdWFudGl6ZSAyLjE3ICAgMC4wMDEgIC0+IDIuMTcwCitkZHF1YTA2MSBxdWFudGl6ZSAyLjE3ICAgMC4wMSAgIC0+IDIuMTcKK2RkcXVhMDYyIHF1YW50aXplIDIuMTcgICAwLjEgICAgLT4gMi4yIEluZXhhY3QgUm91bmRlZAorZGRxdWEwNjMgcXVhbnRpemUgMi4xNyAgIDFlKzAgICAtPiAyIEluZXhhY3QgUm91bmRlZAorZGRxdWEwNjQgcXVhbnRpemUgMi4xNyAgIDFlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEwNjUgcXVhbnRpemUgLUluZiAgICBJbmYgICAtPiAtSW5maW5pdHkKK2RkcXVhMDY2IHF1YW50aXplIDIgICAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTA2NyBxdWFudGl6ZSAtMC4xICAgIDEgICAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZGRxdWEwNjggcXVhbnRpemUgLTAgICAgICAxZSs1ICAgICAtPiAtMEUrNQorZGRxdWEwNjkgcXVhbnRpemUgKzEyMzQ1Njc4OTAxMjM0NS42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTA3MCBxdWFudGl6ZSAtOTg3NjU0MzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhMDcxIHF1YW50aXplIDIxNyAgICAxZS0xICAgLT4gMjE3LjAKK2RkcXVhMDcyIHF1YW50aXplIDIxNyAgICAxZSswICAgLT4gMjE3CitkZHF1YTA3MyBxdWFudGl6ZSAyMTcgICAgMWUrMSAgIC0+IDIuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDc0IHF1YW50aXplIDIxNyAgICAxZSsyICAgLT4gMkUrMiBJbmV4YWN0IFJvdW5kZWQKKworLS0gZ2VuZXJhbCB0ZXN0cyAuLgorZGRxdWEwODkgcXVhbnRpemUgMTIgICAgIDFlKzQgICAtPiAwRSs0IEluZXhhY3QgUm91bmRlZAorZGRxdWEwOTAgcXVhbnRpemUgMTIgICAgIDFlKzMgICAtPiAwRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEwOTEgcXVhbnRpemUgMTIgICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEwOTIgcXVhbnRpemUgMTIgICAgIDFlKzEgICAtPiAxRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEwOTMgcXVhbnRpemUgMS4yMzQ1IDFlLTIgICAtPiAxLjIzIEluZXhhY3QgUm91bmRlZAorZGRxdWEwOTQgcXVhbnRpemUgMS4yMzU1IDFlLTIgICAtPiAxLjI0IEluZXhhY3QgUm91bmRlZAorZGRxdWEwOTUgcXVhbnRpemUgMS4yMzQ1IDFlLTYgICAtPiAxLjIzNDUwMAorZGRxdWEwOTYgcXVhbnRpemUgOS45OTk5IDFlLTIgICAtPiAxMC4wMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDk3IHF1YW50aXplIDAuMDAwMSAxZS0yICAgLT4gMC4wMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDk4IHF1YW50aXplIDAuMDAxICAxZS0yICAgLT4gMC4wMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMDk5IHF1YW50aXplIDAuMDA5ICAxZS0yICAgLT4gMC4wMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTAwIHF1YW50aXplIDkyICAgICAxZSsyICAgLT4gMUUrMiBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWExMDEgcXVhbnRpemUgLTEgICAgICAxZTAgICAtPiAgLTEKK2RkcXVhMTAyIHF1YW50aXplIC0xICAgICAxZS0xICAgLT4gIC0xLjAKK2RkcXVhMTAzIHF1YW50aXplIC0xICAgICAxZS0yICAgLT4gIC0xLjAwCitkZHF1YTEwNCBxdWFudGl6ZSAgMCAgICAgIDFlMCAgIC0+ICAwCitkZHF1YTEwNSBxdWFudGl6ZSAgMCAgICAgMWUtMSAgIC0+ICAwLjAKK2RkcXVhMTA2IHF1YW50aXplICAwICAgICAxZS0yICAgLT4gIDAuMDAKK2RkcXVhMTA3IHF1YW50aXplICAwLjAwICAgMWUwICAgLT4gIDAKK2RkcXVhMTA4IHF1YW50aXplICAwICAgICAxZSsxICAgLT4gIDBFKzEKK2RkcXVhMTA5IHF1YW50aXplICAwICAgICAxZSsyICAgLT4gIDBFKzIKK2RkcXVhMTEwIHF1YW50aXplICsxICAgICAgMWUwICAgLT4gIDEKK2RkcXVhMTExIHF1YW50aXplICsxICAgICAxZS0xICAgLT4gIDEuMAorZGRxdWExMTIgcXVhbnRpemUgKzEgICAgIDFlLTIgICAtPiAgMS4wMAorCitkZHF1YTEyMCBxdWFudGl6ZSAgIDEuMDQgIDFlLTMgLT4gIDEuMDQwCitkZHF1YTEyMSBxdWFudGl6ZSAgIDEuMDQgIDFlLTIgLT4gIDEuMDQKK2RkcXVhMTIyIHF1YW50aXplICAgMS4wNCAgMWUtMSAtPiAgMS4wIEluZXhhY3QgUm91bmRlZAorZGRxdWExMjMgcXVhbnRpemUgICAxLjA0ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZGRxdWExMjQgcXVhbnRpemUgICAxLjA1ICAxZS0zIC0+ICAxLjA1MAorZGRxdWExMjUgcXVhbnRpemUgICAxLjA1ICAxZS0yIC0+ICAxLjA1CitkZHF1YTEyNiBxdWFudGl6ZSAgIDEuMDUgIDFlLTEgLT4gIDEuMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTMxIHF1YW50aXplICAgMS4wNSAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTMyIHF1YW50aXplICAgMS4wNiAgMWUtMyAtPiAgMS4wNjAKK2RkcXVhMTMzIHF1YW50aXplICAgMS4wNiAgMWUtMiAtPiAgMS4wNgorZGRxdWExMzQgcXVhbnRpemUgICAxLjA2ICAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEzNSBxdWFudGl6ZSAgIDEuMDYgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMTQwIHF1YW50aXplICAgLTEwICAgIDFlLTIgIC0+ICAtMTAuMDAKK2RkcXVhMTQxIHF1YW50aXplICAgKzEgICAgIDFlLTIgIC0+ICAxLjAwCitkZHF1YTE0MiBxdWFudGl6ZSAgICsxMCAgICAxZS0yICAtPiAgMTAuMDAKK2RkcXVhMTQzIHF1YW50aXplICAgMUUrMTcgIDFlLTIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhMTQ0IHF1YW50aXplICAgMUUtMTcgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZAorZGRxdWExNDUgcXVhbnRpemUgICAxRS0zICAgMWUtMiAgLT4gIDAuMDAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE0NiBxdWFudGl6ZSAgIDFFLTIgICAxZS0yICAtPiAgMC4wMQorZGRxdWExNDcgcXVhbnRpemUgICAxRS0xICAgMWUtMiAgLT4gIDAuMTAKK2RkcXVhMTQ4IHF1YW50aXplICAgMEUtMTcgIDFlLTIgIC0+ICAwLjAwCisKK2RkcXVhMTUwIHF1YW50aXplICAgMS4wNjAwIDFlLTUgLT4gIDEuMDYwMDAKK2RkcXVhMTUxIHF1YW50aXplICAgMS4wNjAwIDFlLTQgLT4gIDEuMDYwMAorZGRxdWExNTIgcXVhbnRpemUgICAxLjA2MDAgMWUtMyAtPiAgMS4wNjAgUm91bmRlZAorZGRxdWExNTMgcXVhbnRpemUgICAxLjA2MDAgMWUtMiAtPiAgMS4wNiBSb3VuZGVkCitkZHF1YTE1NCBxdWFudGl6ZSAgIDEuMDYwMCAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1NSBxdWFudGl6ZSAgIDEuMDYwMCAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorCistLSBhIGNvdXBsZSB3aGVyZSByb3VuZGluZyB3YXMgZGlmZmVyZW50IGluIGJhc2UgdGVzdHMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkZHF1YTE1NyBxdWFudGl6ZSAtMC41ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAorZGRxdWExNTggcXVhbnRpemUgICAxLjA1ICAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1OSBxdWFudGl6ZSAgIDEuMDYgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIGJhc2UgdGVzdHMgd2l0aCBub24tMSBjb2VmZmljaWVudHMKK2RkcXVhMTYxIHF1YW50aXplIDAgICAgICAtOWUwICAgLT4gMAorZGRxdWExNjIgcXVhbnRpemUgMSAgICAgIC03ZTAgICAtPiAxCitkZHF1YTE2MyBxdWFudGl6ZSAwLjEgICAtMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE2NSBxdWFudGl6ZSAwLjEgICAgMGUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE2NiBxdWFudGl6ZSAwLjEgICAgIDJlMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE2NyBxdWFudGl6ZSAwLjEgICAgM2UtMSAgIC0+IDAuMQorZGRxdWExNjggcXVhbnRpemUgMC4xICAgNDRlLTIgICAtPiAwLjEwCitkZHF1YTE2OSBxdWFudGl6ZSAwLjEgIDU1NWUtMyAgIC0+IDAuMTAwCitkZHF1YTE3MCBxdWFudGl6ZSAwLjkgNjY2NmUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE3MSBxdWFudGl6ZSAwLjkgLTc3N2UrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE3MiBxdWFudGl6ZSAwLjkgIC04OGUrMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE3MyBxdWFudGl6ZSAwLjkgICAtOWUtMSAgIC0+IDAuOQorZGRxdWExNzQgcXVhbnRpemUgMC45ICAgIDBlLTIgICAtPiAwLjkwCitkZHF1YTE3NSBxdWFudGl6ZSAwLjkgIDEuMWUtMyAgIC0+IDAuOTAwMAorLS0gbmVnYXRpdmVzCitkZHF1YTE4MSBxdWFudGl6ZSAtMCAgICAxLjFlMCAgIC0+IC0wLjAKK2RkcXVhMTgyIHF1YW50aXplIC0xICAgICAtMWUwICAgLT4gLTEKK2RkcXVhMTgzIHF1YW50aXplIC0wLjEgIDExZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE4NSBxdWFudGl6ZSAtMC4xIDExMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWExODYgcXVhbnRpemUgLTAuMSAgIDcxZTAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTg3IHF1YW50aXplIC0wLjEgLTkxZS0xICAgLT4gLTAuMQorZGRxdWExODggcXVhbnRpemUgLTAuMSAtLjFlLTIgICAtPiAtMC4xMDAKK2RkcXVhMTg5IHF1YW50aXplIC0wLjEgIC0xZS0zICAgLT4gLTAuMTAwCitkZHF1YTE5MCBxdWFudGl6ZSAtMC45ICAgMGUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWExOTEgcXVhbnRpemUgLTAuOSAgLTBlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTkyIHF1YW50aXplIC0wLjkgLTEwZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE5MyBxdWFudGl6ZSAtMC45IDEwMGUtMSAgIC0+IC0wLjkKK2RkcXVhMTk0IHF1YW50aXplIC0wLjkgOTk5ZS0yICAgLT4gLTAuOTAKKworLS0gK3ZlIGV4cG9uZW50cyAuLgorZGRxdWEyMDEgcXVhbnRpemUgICAtMSAgIDFlKzAgLT4gIC0xCitkZHF1YTIwMiBxdWFudGl6ZSAgIC0xICAgMWUrMSAtPiAgLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIwMyBxdWFudGl6ZSAgIC0xICAgMWUrMiAtPiAgLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIwNCBxdWFudGl6ZSAgICAwICAgMWUrMCAtPiAgMAorZGRxdWEyMDUgcXVhbnRpemUgICAgMCAgIDFlKzEgLT4gIDBFKzEKK2RkcXVhMjA2IHF1YW50aXplICAgIDAgICAxZSsyIC0+ICAwRSsyCitkZHF1YTIwNyBxdWFudGl6ZSAgICsxICAgMWUrMCAtPiAgMQorZGRxdWEyMDggcXVhbnRpemUgICArMSAgIDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIwOSBxdWFudGl6ZSAgICsxICAgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEyMjAgcXVhbnRpemUgICAxLjA0IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyMSBxdWFudGl6ZSAgIDEuMDQgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjIyIHF1YW50aXplICAgMS4wNCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjMgcXVhbnRpemUgICAxLjA0IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyNCBxdWFudGl6ZSAgIDEuMDUgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjI1IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjYgcXVhbnRpemUgICAxLjA1IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyNyBxdWFudGl6ZSAgIDEuMDUgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjI4IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjkgcXVhbnRpemUgICAxLjA1IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzMCBxdWFudGl6ZSAgIDEuMDUgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMxIHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzIgcXVhbnRpemUgICAxLjA2IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzMyBxdWFudGl6ZSAgIDEuMDYgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjM0IHF1YW50aXplICAgMS4wNiAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzUgcXVhbnRpemUgICAxLjA2IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMjQwIHF1YW50aXplICAgLTEwICAgMWUrMSAgLT4gIC0xRSsxIFJvdW5kZWQKK2RkcXVhMjQxIHF1YW50aXplICAgKzEgICAgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI0MiBxdWFudGl6ZSAgICsxMCAgIDFlKzEgIC0+ICAxRSsxIFJvdW5kZWQKK2RkcXVhMjQzIHF1YW50aXplICAgMUUrMSAgMWUrMSAgLT4gIDFFKzEgICAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZGRxdWEyNDQgcXVhbnRpemUgICAxRSsyICAxZSsxICAtPiAgMS4wRSsyICAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkZHF1YTI0NSBxdWFudGl6ZSAgIDFFKzMgIDFlKzEgIC0+ICAxLjAwRSszICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RkcXVhMjQ2IHF1YW50aXplICAgMUUrNCAgMWUrMSAgLT4gIDEuMDAwRSs0ICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZGRxdWEyNDcgcXVhbnRpemUgICAxRSs1ICAxZSsxICAtPiAgMS4wMDAwRSs1ICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkZHF1YTI0OCBxdWFudGl6ZSAgIDFFKzYgIDFlKzEgIC0+ICAxLjAwMDAwRSs2ICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RkcXVhMjQ5IHF1YW50aXplICAgMUUrNyAgMWUrMSAgLT4gIDEuMDAwMDAwRSs3ICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZGRxdWEyNTAgcXVhbnRpemUgICAxRSs4ICAxZSsxICAtPiAgMS4wMDAwMDAwRSs4ICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkZHF1YTI1MSBxdWFudGl6ZSAgIDFFKzkgIDFlKzEgIC0+ICAxLjAwMDAwMDAwRSs5IC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKKy0tIG5leHQgb25lIHRyaWVzIHRvIGFkZCA5IHplcm9zCitkZHF1YTI1MiBxdWFudGl6ZSAgIDFFKzE3IDFlKzEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhMjUzIHF1YW50aXplICAgMUUtMTcgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI1NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEyNTUgcXVhbnRpemUgICAwRS0xNyAxZSsxICAtPiAgMEUrMQorZGRxdWEyNTYgcXVhbnRpemUgIC0wRS0xNyAxZSsxICAtPiAtMEUrMQorZGRxdWEyNTcgcXVhbnRpemUgIC0wRS0xICAxZSsxICAtPiAtMEUrMQorZGRxdWEyNTggcXVhbnRpemUgIC0wICAgICAxZSsxICAtPiAtMEUrMQorZGRxdWEyNTkgcXVhbnRpemUgIC0wRSsxICAxZSsxICAtPiAtMEUrMQorCitkZHF1YTI2MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzIgIC0+ICAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjYxIHF1YW50aXplICAgKzEgICAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI2MiBxdWFudGl6ZSAgICsxMCAgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEyNjMgcXVhbnRpemUgICAxRSsxICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjY0IHF1YW50aXplICAgMUUrMiAgMWUrMiAgLT4gIDFFKzIKK2RkcXVhMjY1IHF1YW50aXplICAgMUUrMyAgMWUrMiAgLT4gIDEuMEUrMworZGRxdWEyNjYgcXVhbnRpemUgICAxRSs0ICAxZSsyICAtPiAgMS4wMEUrNAorZGRxdWEyNjcgcXVhbnRpemUgICAxRSs1ICAxZSsyICAtPiAgMS4wMDBFKzUKK2RkcXVhMjY4IHF1YW50aXplICAgMUUrNiAgMWUrMiAgLT4gIDEuMDAwMEUrNgorZGRxdWEyNjkgcXVhbnRpemUgICAxRSs3ICAxZSsyICAtPiAgMS4wMDAwMEUrNworZGRxdWEyNzAgcXVhbnRpemUgICAxRSs4ICAxZSsyICAtPiAgMS4wMDAwMDBFKzgKK2RkcXVhMjcxIHF1YW50aXplICAgMUUrOSAgMWUrMiAgLT4gIDEuMDAwMDAwMEUrOQorZGRxdWEyNzIgcXVhbnRpemUgICAxRSsxMCAxZSsyICAtPiAgMS4wMDAwMDAwMEUrMTAKK2RkcXVhMjczIHF1YW50aXplICAgMUUtMTAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI3NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEyNzUgcXVhbnRpemUgICAwRS0xMCAxZSsyICAtPiAgMEUrMgorCitkZHF1YTI4MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzMgIC0+ICAtMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjgxIHF1YW50aXplICAgKzEgICAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI4MiBxdWFudGl6ZSAgICsxMCAgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEyODMgcXVhbnRpemUgICAxRSsxICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjg0IHF1YW50aXplICAgMUUrMiAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkZHF1YTI4NSBxdWFudGl6ZSAgIDFFKzMgIDFlKzMgIC0+ICAxRSszCitkZHF1YTI4NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzMgIC0+ICAxLjBFKzQKK2RkcXVhMjg3IHF1YW50aXplICAgMUUrNSAgMWUrMyAgLT4gIDEuMDBFKzUKK2RkcXVhMjg4IHF1YW50aXplICAgMUUrNiAgMWUrMyAgLT4gIDEuMDAwRSs2CitkZHF1YTI4OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzMgIC0+ICAxLjAwMDBFKzcKK2RkcXVhMjkwIHF1YW50aXplICAgMUUrOCAgMWUrMyAgLT4gIDEuMDAwMDBFKzgKK2RkcXVhMjkxIHF1YW50aXplICAgMUUrOSAgMWUrMyAgLT4gIDEuMDAwMDAwRSs5CitkZHF1YTI5MiBxdWFudGl6ZSAgIDFFKzEwIDFlKzMgIC0+ICAxLjAwMDAwMDBFKzEwCitkZHF1YTI5MyBxdWFudGl6ZSAgIDFFLTEwIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZGRxdWEyOTQgcXVhbnRpemUgICAxRS0yICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjk1IHF1YW50aXplICAgMEUtMTAgMWUrMyAgLT4gIDBFKzMKKworLS0gcm91bmQgdXAgZnJvbSBiZWxvdyBbc2lnbiB3cm9uZyBpbiBKSVQgY29tcGlsZXIgb25jZV0KK2RkcXVhMzAwIHF1YW50aXplICAgMC4wMDc4IDFlLTUgLT4gIDAuMDA3ODAKK2RkcXVhMzAxIHF1YW50aXplICAgMC4wMDc4IDFlLTQgLT4gIDAuMDA3OAorZGRxdWEzMDIgcXVhbnRpemUgICAwLjAwNzggMWUtMyAtPiAgMC4wMDggSW5leGFjdCBSb3VuZGVkCitkZHF1YTMwMyBxdWFudGl6ZSAgIDAuMDA3OCAxZS0yIC0+ICAwLjAxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMDQgcXVhbnRpemUgICAwLjAwNzggMWUtMSAtPiAgMC4wIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMDUgcXVhbnRpemUgICAwLjAwNzggIDFlMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzA2IHF1YW50aXplICAgMC4wMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMwNyBxdWFudGl6ZSAgIDAuMDA3OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTMxMCBxdWFudGl6ZSAgLTAuMDA3OCAxZS01IC0+IC0wLjAwNzgwCitkZHF1YTMxMSBxdWFudGl6ZSAgLTAuMDA3OCAxZS00IC0+IC0wLjAwNzgKK2RkcXVhMzEyIHF1YW50aXplICAtMC4wMDc4IDFlLTMgLT4gLTAuMDA4IEluZXhhY3QgUm91bmRlZAorZGRxdWEzMTMgcXVhbnRpemUgIC0wLjAwNzggMWUtMiAtPiAtMC4wMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzE0IHF1YW50aXplICAtMC4wMDc4IDFlLTEgLT4gLTAuMCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzE1IHF1YW50aXplICAtMC4wMDc4ICAxZTAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMxNiBxdWFudGl6ZSAgLTAuMDA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMTcgcXVhbnRpemUgIC0wLjAwNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEzMjAgcXVhbnRpemUgICAwLjA3OCAxZS01IC0+ICAwLjA3ODAwCitkZHF1YTMyMSBxdWFudGl6ZSAgIDAuMDc4IDFlLTQgLT4gIDAuMDc4MAorZGRxdWEzMjIgcXVhbnRpemUgICAwLjA3OCAxZS0zIC0+ICAwLjA3OAorZGRxdWEzMjMgcXVhbnRpemUgICAwLjA3OCAxZS0yIC0+ICAwLjA4IEluZXhhY3QgUm91bmRlZAorZGRxdWEzMjQgcXVhbnRpemUgICAwLjA3OCAxZS0xIC0+ICAwLjEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMyNSBxdWFudGl6ZSAgIDAuMDc4ICAxZTAgLT4gIDAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMyNiBxdWFudGl6ZSAgIDAuMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTMyNyBxdWFudGl6ZSAgIDAuMDc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMzMwIHF1YW50aXplICAtMC4wNzggMWUtNSAtPiAtMC4wNzgwMAorZGRxdWEzMzEgcXVhbnRpemUgIC0wLjA3OCAxZS00IC0+IC0wLjA3ODAKK2RkcXVhMzMyIHF1YW50aXplICAtMC4wNzggMWUtMyAtPiAtMC4wNzgKK2RkcXVhMzMzIHF1YW50aXplICAtMC4wNzggMWUtMiAtPiAtMC4wOCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzM0IHF1YW50aXplICAtMC4wNzggMWUtMSAtPiAtMC4xIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMzUgcXVhbnRpemUgIC0wLjA3OCAgMWUwIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMzYgcXVhbnRpemUgIC0wLjA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzMzcgcXVhbnRpemUgIC0wLjA3OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTM0MCBxdWFudGl6ZSAgIDAuNzggMWUtNSAtPiAgMC43ODAwMAorZGRxdWEzNDEgcXVhbnRpemUgICAwLjc4IDFlLTQgLT4gIDAuNzgwMAorZGRxdWEzNDIgcXVhbnRpemUgICAwLjc4IDFlLTMgLT4gIDAuNzgwCitkZHF1YTM0MyBxdWFudGl6ZSAgIDAuNzggMWUtMiAtPiAgMC43OAorZGRxdWEzNDQgcXVhbnRpemUgICAwLjc4IDFlLTEgLT4gIDAuOCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzQ1IHF1YW50aXplICAgMC43OCAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzNDYgcXVhbnRpemUgICAwLjc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM0NyBxdWFudGl6ZSAgIDAuNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEzNTAgcXVhbnRpemUgIC0wLjc4IDFlLTUgLT4gLTAuNzgwMDAKK2RkcXVhMzUxIHF1YW50aXplICAtMC43OCAxZS00IC0+IC0wLjc4MDAKK2RkcXVhMzUyIHF1YW50aXplICAtMC43OCAxZS0zIC0+IC0wLjc4MAorZGRxdWEzNTMgcXVhbnRpemUgIC0wLjc4IDFlLTIgLT4gLTAuNzgKK2RkcXVhMzU0IHF1YW50aXplICAtMC43OCAxZS0xIC0+IC0wLjggSW5leGFjdCBSb3VuZGVkCitkZHF1YTM1NSBxdWFudGl6ZSAgLTAuNzggIDFlMCAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzU2IHF1YW50aXplICAtMC43OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzNTcgcXVhbnRpemUgIC0wLjc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhMzYwIHF1YW50aXplICAgNy44IDFlLTUgLT4gIDcuODAwMDAKK2RkcXVhMzYxIHF1YW50aXplICAgNy44IDFlLTQgLT4gIDcuODAwMAorZGRxdWEzNjIgcXVhbnRpemUgICA3LjggMWUtMyAtPiAgNy44MDAKK2RkcXVhMzYzIHF1YW50aXplICAgNy44IDFlLTIgLT4gIDcuODAKK2RkcXVhMzY0IHF1YW50aXplICAgNy44IDFlLTEgLT4gIDcuOAorZGRxdWEzNjUgcXVhbnRpemUgICA3LjggIDFlMCAtPiAgOCBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzY2IHF1YW50aXplICAgNy44IDFlKzEgLT4gIDFFKzEgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM2NyBxdWFudGl6ZSAgIDcuOCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZGRxdWEzNjggcXVhbnRpemUgICA3LjggMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEzNzAgcXVhbnRpemUgIC03LjggMWUtNSAtPiAtNy44MDAwMAorZGRxdWEzNzEgcXVhbnRpemUgIC03LjggMWUtNCAtPiAtNy44MDAwCitkZHF1YTM3MiBxdWFudGl6ZSAgLTcuOCAxZS0zIC0+IC03LjgwMAorZGRxdWEzNzMgcXVhbnRpemUgIC03LjggMWUtMiAtPiAtNy44MAorZGRxdWEzNzQgcXVhbnRpemUgIC03LjggMWUtMSAtPiAtNy44CitkZHF1YTM3NSBxdWFudGl6ZSAgLTcuOCAgMWUwIC0+IC04IEluZXhhY3QgUm91bmRlZAorZGRxdWEzNzYgcXVhbnRpemUgIC03LjggMWUrMSAtPiAtMUUrMSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzc3IHF1YW50aXplICAtNy44IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkZHF1YTM3OCBxdWFudGl6ZSAgLTcuOCAxZSszIC0+IC0wRSszIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIGluZGl2aWR1YWxzCitkZHF1YTM4MCBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQuNTA2IDFlLTIgLT4gMTIzNDU2NzM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMzgxIHF1YW50aXplICAgMTIzNDU2NzM1MjM2NDUuMDYgMWUtMiAtPiAxMjM0NTY3MzUyMzY0NS4wNgorZGRxdWEzODIgcXVhbnRpemUgICAxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWEzODMgcXVhbnRpemUgICAxMjM0NTY3MzUyMzY0NTA2ICAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWEzODQgcXVhbnRpemUgIC0xMjM0NTY3MzUyMzY0LjUwNiAxZS0yIC0+IC0xMjM0NTY3MzUyMzY0LjUxIEluZXhhY3QgUm91bmRlZAorZGRxdWEzODUgcXVhbnRpemUgIC0xMjM0NTY3MzUyMzY0NS4wNiAxZS0yIC0+IC0xMjM0NTY3MzUyMzY0NS4wNgorZGRxdWEzODYgcXVhbnRpemUgIC0xMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWEzODcgcXVhbnRpemUgIC0xMjM0NTY3MzUyMzY0NTA2ICAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCityb3VuZGluZzogZG93bgorZGRxdWEzODkgcXVhbnRpemUgICAxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gPyBzaG91bGQgdGhhdCBvbmUgaW5zdGVhZCBoYXZlIGJlZW46CistLSBkZHF1YTM4OSBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3VuZGluZzogaGFsZl91cAorCistLSBhbmQgYSBmZXcgbW9yZSBmcm9tIGUtbWFpbCBkaXNjdXNzaW9ucworZGRxdWEzOTEgcXVhbnRpemUgIDEyMzQ1Njc4OTEyLjM0NTY3ICAxZS0zIC0+IDEyMzQ1Njc4OTEyLjM0NiAgIEluZXhhY3QgUm91bmRlZAorZGRxdWEzOTIgcXVhbnRpemUgIDEyMzQ1Njc4OTEyMy40NTY3ICAxZS0zIC0+IDEyMzQ1Njc4OTEyMy40NTcgIEluZXhhY3QgUm91bmRlZAorZGRxdWEzOTMgcXVhbnRpemUgIDEyMzQ1Njc4OTEyMzQuNTY3ICAxZS0zIC0+IDEyMzQ1Njc4OTEyMzQuNTY3CitkZHF1YTM5NCBxdWFudGl6ZSAgMTIzNDU2Nzg5MTIzNDUuNjcgIDFlLTMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTM5NSBxdWFudGl6ZSAgMTIzNDU2Nzg5MTIzNDU2LjcgIDFlLTMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTM5NiBxdWFudGl6ZSAgMTIzNDU2Nzg5MTIzNDU2Ny4gIDFlLTMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHNvbWUgOTk5OSByb3VuZC11cCBjYXNlcworZGRxdWE0MDAgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtNSAgLT4gIDkuOTk5MDAKK2RkcXVhNDAxIHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTQgIC0+ICA5Ljk5OTAKK2RkcXVhNDAyIHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTMgIC0+ICA5Ljk5OQorZGRxdWE0MDMgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMiAgLT4gMTAuMDAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MDQgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMSAgLT4gMTAuMCAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MDUgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgIDFlMCAgLT4gMTAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MDYgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgIDFlMSAgLT4gMUUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE0MDcgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgIDFlMiAgLT4gMEUrMiAgICAgIEluZXhhY3QgUm91bmRlZAorCitkZHF1YTQxMCBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS01ICAtPiAgMC45OTkwMAorZGRxdWE0MTEgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtNCAgLT4gIDAuOTk5MAorZGRxdWE0MTIgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtMyAgLT4gIDAuOTk5CitkZHF1YTQxMyBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0yICAtPiAgMS4wMCAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQxNCBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0xICAtPiAgMS4wICAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQxNSBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAgMWUwICAtPiAgMSAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQxNiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhNDIwIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTUgIC0+ICAwLjA5OTkwCitkZHF1YTQyMSBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS00ICAtPiAgMC4wOTk5CitkZHF1YTQyMiBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS0zICAtPiAgMC4xMDAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQyMyBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS0yICAtPiAgMC4xMCAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQyNCBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS0xICAtPiAgMC4xICAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQyNSBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQyNiBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhNDMwIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTUgIC0+ICAwLjAwOTk5CitkZHF1YTQzMSBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS00ICAtPiAgMC4wMTAwICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQzMiBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS0zICAtPiAgMC4wMTAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQzMyBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS0yICAtPiAgMC4wMSAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQzNCBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS0xICAtPiAgMC4wICAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQzNSBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQzNiBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhNDQwIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTUgIC0+ICAwLjAwMTAwICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDQxIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTQgIC0+ICAwLjAwMTAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDQyIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTMgIC0+ICAwLjAwMSAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDQzIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTIgIC0+ICAwLjAwICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDQ0IHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTEgIC0+ICAwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDQ1IHF1YW50aXplICAgMC4wMDA5OTkgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDQ2IHF1YW50aXplICAgMC4wMDA5OTkgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWExMDAxIHF1YW50aXplICAwLjAwMCAgICAgICAgMC4wMDEgLT4gIDAuMDAwCitkZHF1YTEwMDIgcXVhbnRpemUgIDAuMDAxICAgICAgICAwLjAwMSAtPiAgMC4wMDEKK2RkcXVhMTAwMyBxdWFudGl6ZSAgMC4wMDEyICAgICAgIDAuMDAxIC0+ICAwLjAwMSAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEwMDQgcXVhbnRpemUgIDAuMDAxOCAgICAgICAwLjAwMSAtPiAgMC4wMDIgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMDA1IHF1YW50aXplICAwLjUwMSAgICAgICAgMC4wMDEgLT4gIDAuNTAxCitkZHF1YTEwMDYgcXVhbnRpemUgIDAuNTAxMiAgICAgICAwLjAwMSAtPiAgMC41MDEgICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMDA3IHF1YW50aXplICAwLjUwMTggICAgICAgMC4wMDEgLT4gIDAuNTAyICAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTAwOCBxdWFudGl6ZSAgMC45OTkgICAgICAgIDAuMDAxIC0+ICAwLjk5OQorCitkZHF1YTQ4MSBxdWFudGl6ZSAxMjM0NTY3ODAwMCAxZSszIC0+IDEuMjM0NTY3OEUrMTAgUm91bmRlZAorZGRxdWE0ODIgcXVhbnRpemUgMTIzNDU2NzgwMCAgMWUrMSAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK2RkcXVhNDgzIHF1YW50aXplIDEyMzQ1Njc4OTAgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitkZHF1YTQ4NCBxdWFudGl6ZSAxMjM0NTY3ODkxICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ4NSBxdWFudGl6ZSAxMjM0NTY3ODkwMSAxZSsyIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorZGRxdWE0ODYgcXVhbnRpemUgMTIzNDU2Nzg5NiAgMWUrMSAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorLS0gYSBwb3RlbnRpYWwgZG91YmxlLXJvdW5kCitkZHF1YTQ4NyBxdWFudGl6ZSAxMjM0Ljk4NzY0MyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNDg4IHF1YW50aXplIDEyMzQuOTg3NjQ3IDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorCitkZHF1YTQ5MSBxdWFudGl6ZSAxMjM0NTY3ODAwMCAxZSszIC0+IDEuMjM0NTY3OEUrMTAgUm91bmRlZAorZGRxdWE0OTIgcXVhbnRpemUgMTIzNDU2NzgwMCAgMWUrMSAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK2RkcXVhNDkzIHF1YW50aXplIDEyMzQ1Njc4OTAgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitkZHF1YTQ5NCBxdWFudGl6ZSAxMjM0NTY3ODkxICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ5NSBxdWFudGl6ZSAxMjM0NTY3ODkwMSAxZSsyIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorZGRxdWE0OTYgcXVhbnRpemUgMTIzNDU2Nzg5NiAgMWUrMSAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorZGRxdWE0OTcgcXVhbnRpemUgMTIzNC45ODc2NDMgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCitkZHF1YTQ5OCBxdWFudGl6ZSAxMjM0Ljk4NzY0NyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKKworLS0gWmVyb3MKK2RkcXVhNTAwIHF1YW50aXplICAgMCAgICAgMWUxIC0+ICAwRSsxCitkZHF1YTUwMSBxdWFudGl6ZSAgIDAgICAgIDFlMCAtPiAgMAorZGRxdWE1MDIgcXVhbnRpemUgICAwICAgIDFlLTEgLT4gIDAuMAorZGRxdWE1MDMgcXVhbnRpemUgICAwLjAgIDFlLTEgLT4gIDAuMAorZGRxdWE1MDQgcXVhbnRpemUgICAwLjAgICAxZTAgLT4gIDAKK2RkcXVhNTA1IHF1YW50aXplICAgMC4wICAxZSsxIC0+ICAwRSsxCitkZHF1YTUwNiBxdWFudGl6ZSAgIDBFKzEgMWUtMSAtPiAgMC4wCitkZHF1YTUwNyBxdWFudGl6ZSAgIDBFKzEgIDFlMCAtPiAgMAorZGRxdWE1MDggcXVhbnRpemUgICAwRSsxIDFlKzEgLT4gIDBFKzEKK2RkcXVhNTA5IHF1YW50aXplICAtMCAgICAgMWUxIC0+IC0wRSsxCitkZHF1YTUxMCBxdWFudGl6ZSAgLTAgICAgIDFlMCAtPiAtMAorZGRxdWE1MTEgcXVhbnRpemUgIC0wICAgIDFlLTEgLT4gLTAuMAorZGRxdWE1MTIgcXVhbnRpemUgIC0wLjAgIDFlLTEgLT4gLTAuMAorZGRxdWE1MTMgcXVhbnRpemUgIC0wLjAgICAxZTAgLT4gLTAKK2RkcXVhNTE0IHF1YW50aXplICAtMC4wICAxZSsxIC0+IC0wRSsxCitkZHF1YTUxNSBxdWFudGl6ZSAgLTBFKzEgMWUtMSAtPiAtMC4wCitkZHF1YTUxNiBxdWFudGl6ZSAgLTBFKzEgIDFlMCAtPiAtMAorZGRxdWE1MTcgcXVhbnRpemUgIC0wRSsxIDFlKzEgLT4gLTBFKzEKKworLS0gU3VzcGljaW91cyBSSFMgdmFsdWVzCitkZHF1YTUyMCBxdWFudGl6ZSAgIDEuMjM0ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNTIxIHF1YW50aXplIDEyMy40NTYgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZAorZGRxdWE1MjIgcXVhbnRpemUgICAxLjIzNCAgICAxZTM1OSAtPiAwRSszNTkgSW5leGFjdCBSb3VuZGVkCitkZHF1YTUyMyBxdWFudGl6ZSAxMjMuNDU2ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgZm91ciBhcmUgIndvbid0IGZpdCIgb3ZlcmZsCitkZHF1YTUyNiBxdWFudGl6ZSAgIDEuMjM0ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1MjcgcXVhbnRpemUgMTIzLjQ1NiAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTI4IHF1YW50aXplICAgMS4yMzQgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTUyOSBxdWFudGl6ZSAxMjMuNDU2ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZHF1YTUzMiBxdWFudGl6ZSAgIDEuMjM0RSsyOTkgICAgMWUyOTkgLT4gMUUrMjk5ICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE1MzMgcXVhbnRpemUgICAxLjIzNEUrMjk4ICAgIDFlMjk5IC0+IDBFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNTM0IHF1YW50aXplICAgMS4yMzQgICAgICAgICAxZTI5OSAtPiAwRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTUzNyBxdWFudGl6ZSAgIDAgICAgICAgICAgICAxZS0yOTkgLT4gMEUtMjk5CistLSBuZXh0IHR3byBhcmUgIndvbid0IGZpdCIgb3ZlcmZsb3dzCitkZHF1YTUzOCBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTUzOSBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZS0zMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBbbW9yZSBiZWxvd10KKworLS0gU3BlY2lhbHMKK2RkcXVhNTgwIHF1YW50aXplICBJbmYgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRxdWE1ODEgcXVhbnRpemUgIEluZiAgMWUtMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTgyIHF1YW50aXplICBJbmYgIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTU4MyBxdWFudGl6ZSAgSW5mICAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1ODQgcXVhbnRpemUgIEluZiAgIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTg1IHF1YW50aXplICBJbmYgICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTU4NiBxdWFudGl6ZSAgSW5mICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RkcXVhNTg3IHF1YW50aXplIC0xMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTU4OCBxdWFudGl6ZSAtSW5mICAgICBJbmYgICAtPiAgLUluZmluaXR5CitkZHF1YTU4OSBxdWFudGl6ZSAtMSAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1OTAgcXVhbnRpemUgIDAgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNTkxIHF1YW50aXplICAxICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTU5MiBxdWFudGl6ZSAgMTAwMCAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1OTMgcXVhbnRpemUgIEluZiAgICAgSW5mICAgLT4gIEluZmluaXR5CitkZHF1YTU5NCBxdWFudGl6ZSAgSW5mICAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE1OTUgcXVhbnRpemUgLTAgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworZGRxdWE2MDAgcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQorZGRxdWE2MDEgcXVhbnRpemUgLUluZiAgMWUtMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjAyIHF1YW50aXplIC1JbmYgIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTYwMyBxdWFudGl6ZSAtSW5mICAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MDQgcXVhbnRpemUgLUluZiAgIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjA1IHF1YW50aXplIC1JbmYgICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTYwNiBxdWFudGl6ZSAtSW5mICAgICBJbmYgICAtPiAgLUluZmluaXR5CitkZHF1YTYwNyBxdWFudGl6ZSAtMTAwMCAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MDggcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQorZGRxdWE2MDkgcXVhbnRpemUgLTEgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjEwIHF1YW50aXplICAwICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTYxMSBxdWFudGl6ZSAgMSAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2MTIgcXVhbnRpemUgIDEwMDAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjEzIHF1YW50aXplICBJbmYgICAgLUluZiAgIC0+ICBJbmZpbml0eQorZGRxdWE2MTQgcXVhbnRpemUgLUluZiAgMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjE1IHF1YW50aXplIC0wICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2RkcXVhNjIxIHF1YW50aXplICBOYU4gICAtSW5mICAgIC0+ICBOYU4KK2RkcXVhNjIyIHF1YW50aXplICBOYU4gMWUtMjk5ICAgIC0+ICBOYU4KK2RkcXVhNjIzIHF1YW50aXplICBOYU4gMWUtMSAgICAgIC0+ICBOYU4KK2RkcXVhNjI0IHF1YW50aXplICBOYU4gIDFlMCAgICAgIC0+ICBOYU4KK2RkcXVhNjI1IHF1YW50aXplICBOYU4gIDFlMSAgICAgIC0+ICBOYU4KK2RkcXVhNjI2IHF1YW50aXplICBOYU4gIDFlMjk5ICAgIC0+ICBOYU4KK2RkcXVhNjI3IHF1YW50aXplICBOYU4gICAgSW5mICAgIC0+ICBOYU4KK2RkcXVhNjI4IHF1YW50aXplICBOYU4gICAgTmFOICAgIC0+ICBOYU4KK2RkcXVhNjI5IHF1YW50aXplIC1JbmYgICAgTmFOICAgIC0+ICBOYU4KK2RkcXVhNjMwIHF1YW50aXplIC0xMDAwICAgTmFOICAgIC0+ICBOYU4KK2RkcXVhNjMxIHF1YW50aXplIC0xICAgICAgTmFOICAgIC0+ICBOYU4KK2RkcXVhNjMyIHF1YW50aXplICAwICAgICAgTmFOICAgIC0+ICBOYU4KK2RkcXVhNjMzIHF1YW50aXplICAxICAgICAgTmFOICAgIC0+ICBOYU4KK2RkcXVhNjM0IHF1YW50aXplICAxMDAwICAgTmFOICAgIC0+ICBOYU4KK2RkcXVhNjM1IHF1YW50aXplICBJbmYgICAgTmFOICAgIC0+ICBOYU4KK2RkcXVhNjM2IHF1YW50aXplICBOYU4gMWUtMCAgICAgIC0+ICBOYU4KK2RkcXVhNjM3IHF1YW50aXplIC0wICAgICAgTmFOICAgIC0+ICBOYU4KKworZGRxdWE2NDEgcXVhbnRpemUgIHNOYU4gICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjQyIHF1YW50aXplICBzTmFOIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY0MyBxdWFudGl6ZSAgc05hTiAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NDQgcXVhbnRpemUgIHNOYU4gIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjQ1IHF1YW50aXplICBzTmFOICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY0NiBxdWFudGl6ZSAgc05hTiAgMWUyOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NDcgcXVhbnRpemUgIHNOYU4gICAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjQ4IHF1YW50aXplICBzTmFOICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY0OSBxdWFudGl6ZSAgTmFOICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NTAgcXVhbnRpemUgLUluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjUxIHF1YW50aXplIC0xMDAwICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY1MiBxdWFudGl6ZSAtMSAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NTMgcXVhbnRpemUgIDAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjU0IHF1YW50aXplICAxICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY1NSBxdWFudGl6ZSAgMTAwMCAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NTYgcXVhbnRpemUgIEluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhNjU3IHF1YW50aXplICBOYU4gICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY1OCBxdWFudGl6ZSAgc05hTiAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NTkgcXVhbnRpemUgLTAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRxdWE2NjEgcXVhbnRpemUgIE5hTjkgLUluZiAgIC0+ICBOYU45CitkZHF1YTY2MiBxdWFudGl6ZSAgTmFOOCAgOTE5ICAgLT4gIE5hTjgKK2RkcXVhNjYzIHF1YW50aXplICBOYU43MSBJbmYgICAtPiAgTmFONzEKK2RkcXVhNjY0IHF1YW50aXplICBOYU42ICBOYU41ICAtPiAgTmFONgorZGRxdWE2NjUgcXVhbnRpemUgLUluZiAgIE5hTjQgIC0+ICBOYU40CitkZHF1YTY2NiBxdWFudGl6ZSAtOTE5ICAgTmFOMzEgLT4gIE5hTjMxCitkZHF1YTY2NyBxdWFudGl6ZSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKKworZGRxdWE2NzEgcXVhbnRpemUgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NzIgcXVhbnRpemUgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NzMgcXVhbnRpemUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NzQgcXVhbnRpemUgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NzUgcXVhbnRpemUgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NzYgcXVhbnRpemUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NzcgcXVhbnRpemUgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NzggcXVhbnRpemUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWE2NzkgcXVhbnRpemUgIE5hTiAgICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCitkZHF1YTY4MSBxdWFudGl6ZSAtTmFOOSAtSW5mICAgLT4gLU5hTjkKK2RkcXVhNjgyIHF1YW50aXplIC1OYU44ICA5MTkgICAtPiAtTmFOOAorZGRxdWE2ODMgcXVhbnRpemUgLU5hTjcxIEluZiAgIC0+IC1OYU43MQorZGRxdWE2ODQgcXVhbnRpemUgLU5hTjYgLU5hTjUgIC0+IC1OYU42CitkZHF1YTY4NSBxdWFudGl6ZSAtSW5mICAtTmFONCAgLT4gLU5hTjQKK2RkcXVhNjg2IHF1YW50aXplIC05MTkgIC1OYU4zMSAtPiAtTmFOMzEKK2RkcXVhNjg3IHF1YW50aXplICBJbmYgIC1OYU4yICAtPiAtTmFOMgorCitkZHF1YTY5MSBxdWFudGl6ZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY5MiBxdWFudGl6ZSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY5MyBxdWFudGl6ZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY5NCBxdWFudGl6ZSAtc05hTjE2IHNOYU45NCAgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY5NSBxdWFudGl6ZSAtTmFOOTUgLXNOYU45MyAgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY5NiBxdWFudGl6ZSAtSW5mICAgLXNOYU45MiAgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY5NyBxdWFudGl6ZSAgMDg4ICAgLXNOYU45MSAgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY5OCBxdWFudGl6ZSAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkZHF1YTY5OSBxdWFudGl6ZSAgTmFOICAgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdworZGRxdWE3MTAgcXVhbnRpemUgIDEuMDBFLTM4MyAgICAxZS0zODMgIC0+ICAgMUUtMzgzICAgIFJvdW5kZWQKK2RkcXVhNzExIHF1YW50aXplICAwLjFFLTM4MyAgICAyZS0zODQgIC0+ICAgMUUtMzg0ICAgU3Vibm9ybWFsCitkZHF1YTcxMiBxdWFudGl6ZSAgMC4xMEUtMzgzICAgM2UtMzg0ICAtPiAgIDFFLTM4NCAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkZHF1YTcxMyBxdWFudGl6ZSAgMC4xMDBFLTM4MyAgNGUtMzg0ICAtPiAgIDFFLTM4NCAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkZHF1YTcxNCBxdWFudGl6ZSAgMC4wMUUtMzgzICAgNWUtMzg1ICAtPiAgIDFFLTM4NSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK2RkcXVhNzE1IHF1YW50aXplICAwLjk5OUUtMzgzICAgMWUtMzgzICAtPiAgIDFFLTM4MyAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzE2IHF1YW50aXplICAwLjA5OUUtMzgzIDEwZS0zODQgIC0+ICAgMUUtMzg0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorCitkZHF1YTcxNyBxdWFudGl6ZSAgMC4wMDlFLTM4MyAgMWUtMzg1ICAtPiAgIDFFLTM4NSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK2RkcXVhNzE4IHF1YW50aXplICAwLjAwMUUtMzgzICAxZS0zODUgIC0+ICAgMEUtMzg1ICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTcxOSBxdWFudGl6ZSAgMC4wMDA5RS0zODMgMWUtMzg1ICAtPiAgIDBFLTM4NSAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE3MjAgcXVhbnRpemUgIDAuMDAwMUUtMzgzIDFlLTM4NSAgLT4gICAwRS0zODUgICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWE3MzAgcXVhbnRpemUgLTEuMDBFLTM4MyAgIDFlLTM4MyAgLT4gIC0xRS0zODMgICAgIFJvdW5kZWQKK2RkcXVhNzMxIHF1YW50aXplIC0wLjFFLTM4MyAgICAxZS0zODMgIC0+ICAtMEUtMzgzICAgICBSb3VuZGVkIEluZXhhY3QKK2RkcXVhNzMyIHF1YW50aXplIC0wLjEwRS0zODMgICAxZS0zODMgIC0+ICAtMEUtMzgzICAgICBSb3VuZGVkIEluZXhhY3QKK2RkcXVhNzMzIHF1YW50aXplIC0wLjEwMEUtMzgzICAxZS0zODMgIC0+ICAtMEUtMzgzICAgICBSb3VuZGVkIEluZXhhY3QKK2RkcXVhNzM0IHF1YW50aXplIC0wLjAxRS0zODMgICAxZS0zODMgIC0+ICAtMEUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitkZHF1YTczNSBxdWFudGl6ZSAtMC45OTlFLTM4MyA5MGUtMzgzICAtPiAgLTFFLTM4MyAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTczNiBxdWFudGl6ZSAtMC4wOTlFLTM4MyAtMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTczNyBxdWFudGl6ZSAtMC4wMDlFLTM4MyAtMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTczOCBxdWFudGl6ZSAtMC4wMDFFLTM4MyAtMGUtMzgzICAtPiAgLTBFLTM4MyAgICAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTczOSBxdWFudGl6ZSAtMC4wMDAxRS0zODMgMGUtMzgzICAtPiAgLTBFLTM4MyAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhNzQwIHF1YW50aXplIC0xLjAwRS0zODMgICAxZS0zODQgLT4gIC0xLjBFLTM4MyAgIFJvdW5kZWQKK2RkcXVhNzQxIHF1YW50aXplIC0wLjFFLTM4MyAgICAxZS0zODQgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsCitkZHF1YTc0MiBxdWFudGl6ZSAtMC4xMEUtMzgzICAgMWUtMzg0IC0+ICAtMUUtMzg0ICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkZHF1YTc0MyBxdWFudGl6ZSAtMC4xMDBFLTM4MyAgMWUtMzg0IC0+ICAtMUUtMzg0ICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkZHF1YTc0NCBxdWFudGl6ZSAtMC4wMUUtMzgzICAgMWUtMzg0IC0+ICAtMEUtMzg0ICAgIEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK2RkcXVhNzQ1IHF1YW50aXplIC0wLjk5OUUtMzgzICAxZS0zODQgLT4gIC0xLjBFLTM4MyAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE3NDYgcXVhbnRpemUgLTAuMDk5RS0zODMgIDFlLTM4NCAtPiAgLTFFLTM4NCAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCitkZHF1YTc0NyBxdWFudGl6ZSAtMC4wMDlFLTM4MyAgMWUtMzg0IC0+ICAtMEUtMzg0ICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE3NDggcXVhbnRpemUgLTAuMDAxRS0zODMgIDFlLTM4NCAtPiAgLTBFLTM4NCAgICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzQ5IHF1YW50aXplIC0wLjAwMDFFLTM4MyAxZS0zODQgLT4gIC0wRS0zODQgICAgSW5leGFjdCBSb3VuZGVkCisKK2RkcXVhNzUwIHF1YW50aXplIC0xLjAwRS0zODMgICAxZS0zODUgLT4gIC0xLjAwRS0zODMKK2RkcXVhNzUxIHF1YW50aXplIC0wLjFFLTM4MyAgICAxZS0zODUgLT4gIC0xLjBFLTM4NCAgU3Vibm9ybWFsCitkZHF1YTc1MiBxdWFudGl6ZSAtMC4xMEUtMzgzICAgMWUtMzg1IC0+ICAtMS4wRS0zODQgIFN1Ym5vcm1hbAorZGRxdWE3NTMgcXVhbnRpemUgLTAuMTAwRS0zODMgIDFlLTM4NSAtPiAgLTEuMEUtMzg0ICBTdWJub3JtYWwgUm91bmRlZAorZGRxdWE3NTQgcXVhbnRpemUgLTAuMDFFLTM4MyAgIDFlLTM4NSAtPiAgLTFFLTM4NSAgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitkZHF1YTc1NSBxdWFudGl6ZSAtMC45OTlFLTM4MyAgMWUtMzg1IC0+ICAtMS4wMEUtMzgzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhNzU2IHF1YW50aXplIC0wLjA5OUUtMzgzICAxZS0zODUgLT4gIC0xLjBFLTM4NCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorZGRxdWE3NTcgcXVhbnRpemUgLTAuMDA5RS0zODMgIDFlLTM4NSAtPiAgLTFFLTM4NSAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCitkZHF1YTc1OCBxdWFudGl6ZSAtMC4wMDFFLTM4MyAgMWUtMzg1IC0+ICAtMEUtMzg1ICAgIEluZXhhY3QgUm91bmRlZAorZGRxdWE3NTkgcXVhbnRpemUgLTAuMDAwMUUtMzgzIDFlLTM4NSAtPiAgLTBFLTM4NSAgICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWE3NjAgcXVhbnRpemUgLTEuMDBFLTM4MyAgIDFlLTM4NiAtPiAgLTEuMDAwRS0zODMKK2RkcXVhNzYxIHF1YW50aXplIC0wLjFFLTM4MyAgICAxZS0zODYgLT4gIC0xLjAwRS0zODQgIFN1Ym5vcm1hbAorZGRxdWE3NjIgcXVhbnRpemUgLTAuMTBFLTM4MyAgIDFlLTM4NiAtPiAgLTEuMDBFLTM4NCAgU3Vibm9ybWFsCitkZHF1YTc2MyBxdWFudGl6ZSAtMC4xMDBFLTM4MyAgMWUtMzg2IC0+ICAtMS4wMEUtMzg0ICBTdWJub3JtYWwKK2RkcXVhNzY0IHF1YW50aXplIC0wLjAxRS0zODMgICAxZS0zODYgLT4gIC0xLjBFLTM4NSAgIFN1Ym5vcm1hbAorZGRxdWE3NjUgcXVhbnRpemUgLTAuOTk5RS0zODMgIDFlLTM4NiAtPiAgLTkuOTlFLTM4NCAgU3Vibm9ybWFsCitkZHF1YTc2NiBxdWFudGl6ZSAtMC4wOTlFLTM4MyAgMWUtMzg2IC0+ICAtOS45RS0zODUgICBTdWJub3JtYWwKK2RkcXVhNzY3IHF1YW50aXplIC0wLjAwOUUtMzgzICAxZS0zODYgLT4gIC05RS0zODYgICAgIFN1Ym5vcm1hbAorZGRxdWE3NjggcXVhbnRpemUgLTAuMDAxRS0zODMgIDFlLTM4NiAtPiAgLTFFLTM4NiAgICAgU3Vibm9ybWFsCitkZHF1YTc2OSBxdWFudGl6ZSAtMC4wMDAxRS0zODMgMWUtMzg2IC0+ICAtMEUtMzg2ICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gTW9yZSBmcm9tIEZ1bmcgTGVlCitkZHF1YTEwMjEgcXVhbnRpemUgIDguNjY2NjY2NjY2NjY2MDAwRSszODQgIDEuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gIDguNjY2NjY2NjY2NjY2MDAwRSszODQKK2RkcXVhMTAyMiBxdWFudGl6ZSAtOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAgMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiAtOC42NjY2NjY2NjY2NjYwMDBFKzM4NAorZGRxdWExMDI3IHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszMjMgIDFFKzMxICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRxdWExMDI5IHF1YW50aXplIDguNjY2NjY2NjZFKzMgICAgICAgICAgIDFFKzMgICAgIC0+IDlFKzMgSW5leGFjdCBSb3VuZGVkCisKKworLS1kZHF1YTEwMzAgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODQgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQgSW5leGFjdAorLS1kZHF1YTEwMzEgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODQgICAtPiA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IFJvdW5kZWQKKy0tZGRxdWExMDMyIHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszODQgMUUrMzgzICAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NCBSb3VuZGVkCistLWRkcXVhMTAzMyBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4MiAgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQgUm91bmRlZAorLS1kZHF1YTEwMzQgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODEgICAtPiA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IFJvdW5kZWQKKy0tZGRxdWExMDM1IHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszODQgMUUrMzgwICAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NCBSb3VuZGVkCisKKy0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zCitkZHF1YTEwNDAgcXVhbnRpemUgLTIxNDc0ODM2NDYgICAgIDAgLT4gLTIxNDc0ODM2NDYKK2RkcXVhMTA0MSBxdWFudGl6ZSAtMjE0NzQ4MzY0NyAgICAgMCAtPiAtMjE0NzQ4MzY0NworZGRxdWExMDQyIHF1YW50aXplIC0yMTQ3NDgzNjQ4ICAgICAwIC0+IC0yMTQ3NDgzNjQ4CitkZHF1YTEwNDMgcXVhbnRpemUgLTIxNDc0ODM2NDkgICAgIDAgLT4gLTIxNDc0ODM2NDkKK2RkcXVhMTA0NCBxdWFudGl6ZSAgMjE0NzQ4MzY0NiAgICAgMCAtPiAgMjE0NzQ4MzY0NgorZGRxdWExMDQ1IHF1YW50aXplICAyMTQ3NDgzNjQ3ICAgICAwIC0+ICAyMTQ3NDgzNjQ3CitkZHF1YTEwNDYgcXVhbnRpemUgIDIxNDc0ODM2NDggICAgIDAgLT4gIDIxNDc0ODM2NDgKK2RkcXVhMTA0NyBxdWFudGl6ZSAgMjE0NzQ4MzY0OSAgICAgMCAtPiAgMjE0NzQ4MzY0OQorZGRxdWExMDQ4IHF1YW50aXplICA0Mjk0OTY3Mjk0ICAgICAwIC0+ICA0Mjk0OTY3Mjk0CitkZHF1YTEwNDkgcXVhbnRpemUgIDQyOTQ5NjcyOTUgICAgIDAgLT4gIDQyOTQ5NjcyOTUKK2RkcXVhMTA1MCBxdWFudGl6ZSAgNDI5NDk2NzI5NiAgICAgMCAtPiAgNDI5NDk2NzI5NgorZGRxdWExMDUxIHF1YW50aXplICA0Mjk0OTY3Mjk3ICAgICAwIC0+ICA0Mjk0OTY3Mjk3CisKKy0tIFJvdW5kaW5nIHN3YXRoZQorcm91bmRpbmc6IGhhbGZfZXZlbgorZGRxdWExMTAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZGRxdWExMTAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTExMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTEwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMTA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTExMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTEwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMTA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTExMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTEwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorZGRxdWExMjAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZGRxdWExMjAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEyMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTIwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMjA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEyMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTIwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMjA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEyMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTIwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9kb3duCitkZHF1YTEzMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkZHF1YTEzMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTMwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEzMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTMwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTEzMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTMwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExMzA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiB1cAorZGRxdWExNDAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZGRxdWExNDAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE0MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTQwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNDA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE0MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTQwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNDA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE0MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTQwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNDExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkZHF1YTE1MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkZHF1YTE1MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTUwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNTAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTUwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNTA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTUwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNTA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE1MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjIzICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGNlaWxpbmcKK2RkcXVhMTYwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RkcXVhMTYwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNjAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE2MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTYwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNjA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE2MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTYwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNjA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE2MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTYxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjMgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZmxvb3IKK2RkcXVhMTcwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RkcXVhMTcwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNzAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE3MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNzA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE3MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZGRxdWExNzA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE3MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTcxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjQgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogMDV1cAorZGRxdWExODAwIHF1YW50aXplICAxLjIwMDAgICAgMS4wMCAgICAtPiAgMS4yMCAgUm91bmRlZAorZGRxdWExODAxIHF1YW50aXplICAxLjIwMDEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE4MDIgcXVhbnRpemUgIDEuMjAxMCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTgwMyBxdWFudGl6ZSAgMS4yMDUwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExODA0IHF1YW50aXplICAxLjIwNTEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE4MDcgcXVhbnRpemUgIDEuMjA2MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTgwOCBxdWFudGl6ZSAgMS4yMDcwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExODA5IHF1YW50aXplICAxLjIwOTkgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE4MTEgcXVhbnRpemUgLTEuMjA5OSAgICAxLjAwICAgIC0+IC0xLjIxICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWExOTAwIHF1YW50aXplICAxLjIxMDAgICAgMS4wMCAgICAtPiAgMS4yMSAgUm91bmRlZAorZGRxdWExOTAxIHF1YW50aXplICAxLjIxMDEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE5MDIgcXVhbnRpemUgIDEuMjExMCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTkwMyBxdWFudGl6ZSAgMS4yMTUwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExOTA0IHF1YW50aXplICAxLjIxNTEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE5MDcgcXVhbnRpemUgIDEuMjE2MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMTkwOCBxdWFudGl6ZSAgMS4yMTcwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZGRxdWExOTA5IHF1YW50aXplICAxLjIxOTkgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTE5MTEgcXVhbnRpemUgLTEuMjE5OSAgICAxLjAwICAgIC0+IC0xLjIxICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEyMDAwIHF1YW50aXplICAxLjI0MDAgICAgMS4wMCAgICAtPiAgMS4yNCAgUm91bmRlZAorZGRxdWEyMDAxIHF1YW50aXplICAxLjI0MDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIwMDIgcXVhbnRpemUgIDEuMjQxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjAwMyBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMDA0IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIwMDcgcXVhbnRpemUgIDEuMjQ2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjAwOCBxdWFudGl6ZSAgMS4yNDcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMDA5IHF1YW50aXplICAxLjI0OTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIwMTEgcXVhbnRpemUgLTEuMjQ5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEyMTAwIHF1YW50aXplICAxLjI1MDAgICAgMS4wMCAgICAtPiAgMS4yNSAgUm91bmRlZAorZGRxdWEyMTAxIHF1YW50aXplICAxLjI1MDEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIxMDIgcXVhbnRpemUgIDEuMjUxMCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjEwMyBxdWFudGl6ZSAgMS4yNTUwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMTA0IHF1YW50aXplICAxLjI1NTEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIxMDcgcXVhbnRpemUgIDEuMjU2MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjEwOCBxdWFudGl6ZSAgMS4yNTcwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMTA5IHF1YW50aXplICAxLjI1OTkgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIxMTEgcXVhbnRpemUgLTEuMjU5OSAgICAxLjAwICAgIC0+IC0xLjI2ICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEyMjAwIHF1YW50aXplICAxLjI2MDAgICAgMS4wMCAgICAtPiAgMS4yNiAgUm91bmRlZAorZGRxdWEyMjAxIHF1YW50aXplICAxLjI2MDEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyMDIgcXVhbnRpemUgIDEuMjYxMCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjIwMyBxdWFudGl6ZSAgMS4yNjUwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjA0IHF1YW50aXplICAxLjI2NTEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyMDcgcXVhbnRpemUgIDEuMjY2MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjIwOCBxdWFudGl6ZSAgMS4yNjcwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMjA5IHF1YW50aXplICAxLjI2OTkgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIyMTEgcXVhbnRpemUgLTEuMjY5OSAgICAxLjAwICAgIC0+IC0xLjI2ICBJbmV4YWN0IFJvdW5kZWQKKworZGRxdWEyMzAwIHF1YW50aXplICAxLjI5MDAgICAgMS4wMCAgICAtPiAgMS4yOSAgUm91bmRlZAorZGRxdWEyMzAxIHF1YW50aXplICAxLjI5MDEgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzMDIgcXVhbnRpemUgIDEuMjkxMCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMwMyBxdWFudGl6ZSAgMS4yOTUwICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzA0IHF1YW50aXplICAxLjI5NTEgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzMDcgcXVhbnRpemUgIDEuMjk2MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RkcXVhMjMwOCBxdWFudGl6ZSAgMS4yOTcwICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZGRxdWEyMzA5IHF1YW50aXplICAxLjI5OTkgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkZHF1YTIzMTEgcXVhbnRpemUgLTEuMjk5OSAgICAxLjAwICAgIC0+IC0xLjI5ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gTnVsbCB0ZXN0cworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorZGRxdWE5OTggcXVhbnRpemUgMTAgICAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcXVhOTk5IHF1YW50aXplICAjIDFlMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVkdWNlLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVkdWNlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyOWU1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZWR1Y2UuZGVjVGVzdApAQCAtMCwwICsxLDE4MiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFJlZHVjZS5kZWNUZXN0IC0tIHJlbW92ZSB0cmFpbGluZyB6ZXJvcyBmcm9tIGEgZGVjRG91YmxlICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAzLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkZHJlZDAwMSByZWR1Y2UgJzEnICAgICAgLT4gJzEnCitkZHJlZDAwMiByZWR1Y2UgJy0xJyAgICAgLT4gJy0xJworZGRyZWQwMDMgcmVkdWNlICcxLjAwJyAgIC0+ICcxJworZGRyZWQwMDQgcmVkdWNlICctMS4wMCcgIC0+ICctMScKK2RkcmVkMDA1IHJlZHVjZSAnMCcgICAgICAtPiAnMCcKK2RkcmVkMDA2IHJlZHVjZSAnMC4wMCcgICAtPiAnMCcKK2RkcmVkMDA3IHJlZHVjZSAnMDAuMCcgICAtPiAnMCcKK2RkcmVkMDA4IHJlZHVjZSAnMDAuMDAnICAtPiAnMCcKK2RkcmVkMDA5IHJlZHVjZSAnMDAnICAgICAtPiAnMCcKK2RkcmVkMDEwIHJlZHVjZSAnMEUrMScgICAtPiAnMCcKK2RkcmVkMDExIHJlZHVjZSAnMEUrNScgICAtPiAnMCcKKworZGRyZWQwMTIgcmVkdWNlICctMicgICAgIC0+ICctMicKK2RkcmVkMDEzIHJlZHVjZSAnMicgICAgICAtPiAnMicKK2RkcmVkMDE0IHJlZHVjZSAnLTIuMDAnICAtPiAnLTInCitkZHJlZDAxNSByZWR1Y2UgJzIuMDAnICAgLT4gJzInCitkZHJlZDAxNiByZWR1Y2UgJy0wJyAgICAgLT4gJy0wJworZGRyZWQwMTcgcmVkdWNlICctMC4wMCcgIC0+ICctMCcKK2RkcmVkMDE4IHJlZHVjZSAnLTAwLjAnICAtPiAnLTAnCitkZHJlZDAxOSByZWR1Y2UgJy0wMC4wMCcgLT4gJy0wJworZGRyZWQwMjAgcmVkdWNlICctMDAnICAgIC0+ICctMCcKK2RkcmVkMDIxIHJlZHVjZSAnLTBFKzUnICAgLT4gJy0wJworZGRyZWQwMjIgcmVkdWNlICctMEUrMScgIC0+ICctMCcKKworZGRyZWQwMzAgcmVkdWNlICcrMC4xJyAgICAgICAgICAgIC0+ICcwLjEnCitkZHJlZDAzMSByZWR1Y2UgJy0wLjEnICAgICAgICAgICAgLT4gJy0wLjEnCitkZHJlZDAzMiByZWR1Y2UgJyswLjAxJyAgICAgICAgICAgLT4gJzAuMDEnCitkZHJlZDAzMyByZWR1Y2UgJy0wLjAxJyAgICAgICAgICAgLT4gJy0wLjAxJworZGRyZWQwMzQgcmVkdWNlICcrMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScKK2RkcmVkMDM1IHJlZHVjZSAnLTAuMDAxJyAgICAgICAgICAtPiAnLTAuMDAxJworZGRyZWQwMzYgcmVkdWNlICcrMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScKK2RkcmVkMDM3IHJlZHVjZSAnLTAuMDAwMDAxJyAgICAgICAtPiAnLTAuMDAwMDAxJworZGRyZWQwMzggcmVkdWNlICcrMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicKK2RkcmVkMDM5IHJlZHVjZSAnLTAuMDAwMDAwMDAwMDAxJyAtPiAnLTFFLTEyJworCitkZHJlZDA0MSByZWR1Y2UgMS4xICAgICAgICAtPiAxLjEKK2RkcmVkMDQyIHJlZHVjZSAxLjEwICAgICAgIC0+IDEuMQorZGRyZWQwNDMgcmVkdWNlIDEuMTAwICAgICAgLT4gMS4xCitkZHJlZDA0NCByZWR1Y2UgMS4xMTAgICAgICAtPiAxLjExCitkZHJlZDA0NSByZWR1Y2UgLTEuMSAgICAgICAtPiAtMS4xCitkZHJlZDA0NiByZWR1Y2UgLTEuMTAgICAgICAtPiAtMS4xCitkZHJlZDA0NyByZWR1Y2UgLTEuMTAwICAgICAtPiAtMS4xCitkZHJlZDA0OCByZWR1Y2UgLTEuMTEwICAgICAtPiAtMS4xMQorZGRyZWQwNDkgcmVkdWNlIDkuOSAgICAgICAgLT4gOS45CitkZHJlZDA1MCByZWR1Y2UgOS45MCAgICAgICAtPiA5LjkKK2RkcmVkMDUxIHJlZHVjZSA5LjkwMCAgICAgIC0+IDkuOQorZGRyZWQwNTIgcmVkdWNlIDkuOTkwICAgICAgLT4gOS45OQorZGRyZWQwNTMgcmVkdWNlIC05LjkgICAgICAgLT4gLTkuOQorZGRyZWQwNTQgcmVkdWNlIC05LjkwICAgICAgLT4gLTkuOQorZGRyZWQwNTUgcmVkdWNlIC05LjkwMCAgICAgLT4gLTkuOQorZGRyZWQwNTYgcmVkdWNlIC05Ljk5MCAgICAgLT4gLTkuOTkKKworLS0gc29tZSB0cmFpbGluZyBmcmFjdGlvbmFsIHplcm9zIHdpdGggemVyb3MgaW4gdW5pdHMKK2RkcmVkMDYwIHJlZHVjZSAgMTAuMCAgICAgICAgLT4gMUUrMQorZGRyZWQwNjEgcmVkdWNlICAxMC4wMCAgICAgICAtPiAxRSsxCitkZHJlZDA2MiByZWR1Y2UgIDEwMC4wICAgICAgIC0+IDFFKzIKK2RkcmVkMDYzIHJlZHVjZSAgMTAwLjAwICAgICAgLT4gMUUrMgorZGRyZWQwNjQgcmVkdWNlICAxLjEwMDBFKzMgICAtPiAxLjFFKzMKK2RkcmVkMDY1IHJlZHVjZSAgMS4xMDAwMEUrMyAgLT4gMS4xRSszCitkZHJlZDA2NiByZWR1Y2UgLTEwLjAgICAgICAgIC0+IC0xRSsxCitkZHJlZDA2NyByZWR1Y2UgLTEwLjAwICAgICAgIC0+IC0xRSsxCitkZHJlZDA2OCByZWR1Y2UgLTEwMC4wICAgICAgIC0+IC0xRSsyCitkZHJlZDA2OSByZWR1Y2UgLTEwMC4wMCAgICAgIC0+IC0xRSsyCitkZHJlZDA3MCByZWR1Y2UgLTEuMTAwMEUrMyAgIC0+IC0xLjFFKzMKK2RkcmVkMDcxIHJlZHVjZSAtMS4xMDAwMEUrMyAgLT4gLTEuMUUrMworCistLSBzb21lIGluc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3Mgd2l0aCBwb3NpdGl2ZSBleHBvbmVudAorZGRyZWQwODAgcmVkdWNlICAxMEUrMSAgICAgICAtPiAxRSsyCitkZHJlZDA4MSByZWR1Y2UgIDEwMEUrMSAgICAgIC0+IDFFKzMKK2RkcmVkMDgyIHJlZHVjZSAgMS4wRSsyICAgICAgLT4gMUUrMgorZGRyZWQwODMgcmVkdWNlICAxLjBFKzMgICAgICAtPiAxRSszCitkZHJlZDA4NCByZWR1Y2UgIDEuMUUrMyAgICAgIC0+IDEuMUUrMworZGRyZWQwODUgcmVkdWNlICAxLjAwRSszICAgICAtPiAxRSszCitkZHJlZDA4NiByZWR1Y2UgIDEuMTBFKzMgICAgIC0+IDEuMUUrMworZGRyZWQwODcgcmVkdWNlIC0xMEUrMSAgICAgICAtPiAtMUUrMgorZGRyZWQwODggcmVkdWNlIC0xMDBFKzEgICAgICAtPiAtMUUrMworZGRyZWQwODkgcmVkdWNlIC0xLjBFKzIgICAgICAtPiAtMUUrMgorZGRyZWQwOTAgcmVkdWNlIC0xLjBFKzMgICAgICAtPiAtMUUrMworZGRyZWQwOTEgcmVkdWNlIC0xLjFFKzMgICAgICAtPiAtMS4xRSszCitkZHJlZDA5MiByZWR1Y2UgLTEuMDBFKzMgICAgIC0+IC0xRSszCitkZHJlZDA5MyByZWR1Y2UgLTEuMTBFKzMgICAgIC0+IC0xLjFFKzMKKworLS0gc29tZSBzaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcywgd2VyZSB3ZSB0byBiZSB0cmltbWluZworZGRyZWQxMDAgcmVkdWNlICAxMSAgICAgICAgICAtPiAxMQorZGRyZWQxMDEgcmVkdWNlICAxMCAgICAgICAgICAtPiAxRSsxCitkZHJlZDEwMiByZWR1Y2UgIDEwLiAgICAgICAgIC0+IDFFKzEKK2RkcmVkMTAzIHJlZHVjZSAgMS4xRSsxICAgICAgLT4gMTEKK2RkcmVkMTA0IHJlZHVjZSAgMS4wRSsxICAgICAgLT4gMUUrMQorZGRyZWQxMDUgcmVkdWNlICAxLjEwRSsyICAgICAtPiAxLjFFKzIKK2RkcmVkMTA2IHJlZHVjZSAgMS4wMEUrMiAgICAgLT4gMUUrMgorZGRyZWQxMDcgcmVkdWNlICAxLjEwMEUrMyAgICAtPiAxLjFFKzMKK2RkcmVkMTA4IHJlZHVjZSAgMS4wMDBFKzMgICAgLT4gMUUrMworZGRyZWQxMDkgcmVkdWNlICAxLjAwMDAwMEUrNiAtPiAxRSs2CitkZHJlZDExMCByZWR1Y2UgLTExICAgICAgICAgIC0+IC0xMQorZGRyZWQxMTEgcmVkdWNlIC0xMCAgICAgICAgICAtPiAtMUUrMQorZGRyZWQxMTIgcmVkdWNlIC0xMC4gICAgICAgICAtPiAtMUUrMQorZGRyZWQxMTMgcmVkdWNlIC0xLjFFKzEgICAgICAtPiAtMTEKK2RkcmVkMTE0IHJlZHVjZSAtMS4wRSsxICAgICAgLT4gLTFFKzEKK2RkcmVkMTE1IHJlZHVjZSAtMS4xMEUrMiAgICAgLT4gLTEuMUUrMgorZGRyZWQxMTYgcmVkdWNlIC0xLjAwRSsyICAgICAtPiAtMUUrMgorZGRyZWQxMTcgcmVkdWNlIC0xLjEwMEUrMyAgICAtPiAtMS4xRSszCitkZHJlZDExOCByZWR1Y2UgLTEuMDAwRSszICAgIC0+IC0xRSszCitkZHJlZDExOSByZWR1Y2UgLTEuMDAwMDBFKzUgIC0+IC0xRSs1CitkZHJlZDEyMCByZWR1Y2UgLTEuMDAwMDAwRSs2IC0+IC0xRSs2CitkZHJlZDEyMSByZWR1Y2UgLTEwLjAwMDAwRSs2IC0+IC0xRSs3CitkZHJlZDEyMiByZWR1Y2UgLTEwMC4wMDAwRSs2IC0+IC0xRSs4CitkZHJlZDEyMyByZWR1Y2UgLTEwMDAuMDAwRSs2IC0+IC0xRSs5CitkZHJlZDEyNCByZWR1Y2UgLTEwMDAwLjAwRSs2IC0+IC0xRSsxMAorZGRyZWQxMjUgcmVkdWNlIC0xMDAwMDAuMEUrNiAtPiAtMUUrMTEKK2RkcmVkMTI2IHJlZHVjZSAtMTAwMDAwMC5FKzYgLT4gLTFFKzEyCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKK2RkcmVkMTQwIHJlZHVjZSAnMi4xJyAgICAgLT4gICcyLjEnCitkZHJlZDE0MSByZWR1Y2UgJy0yLjAnICAgIC0+ICAnLTInCitkZHJlZDE0MiByZWR1Y2UgJzEuMjAwJyAgIC0+ICAnMS4yJworZGRyZWQxNDMgcmVkdWNlICctMTIwJyAgICAtPiAgJy0xLjJFKzInCitkZHJlZDE0NCByZWR1Y2UgJzEyMC4wMCcgIC0+ICAnMS4yRSsyJworZGRyZWQxNDUgcmVkdWNlICcwLjAwJyAgICAtPiAgJzAnCisKKy0tIE5tYXgsIE5taW4sIE50aW55CistLSBub3RlIG9yaWdhbWkgZWZmZWN0IG9uIHNvbWUgb2YgdGhlc2UKK2RkcmVkMTUxIHJlZHVjZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2RkcmVkMTUyIHJlZHVjZSAgOS45OTk5OTkwMDAwMDAwMDBFKzM4MCAgIC0+IDkuOTk5OTk5MDAwMDBFKzM4MAorZGRyZWQxNTMgcmVkdWNlICA5Ljk5OTk5OTk5OTk5MDAwMEUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTAwMDBFKzM4NAorZGRyZWQxNTQgcmVkdWNlICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzCitkZHJlZDE1NSByZWR1Y2UgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAxRS0zODMKK2RkcmVkMTU2IHJlZHVjZSAgMi4wMDBFLTM5NSAgICAgICAgICAgICAgIC0+IDJFLTM5NSAgIFN1Ym5vcm1hbAorZGRyZWQxNTcgcmVkdWNlICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4ICAgU3Vibm9ybWFsCisKK2RkcmVkMTYxIHJlZHVjZSAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTggIFN1Ym5vcm1hbAorZGRyZWQxNjIgcmVkdWNlICAtMi4wMDBFLTM5NSAgICAgICAgICAgICAgLT4gLTJFLTM5NSAgU3Vibm9ybWFsCitkZHJlZDE2MyByZWR1Y2UgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMUUtMzgzCitkZHJlZDE2NCByZWR1Y2UgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzCitkZHJlZDE2NSByZWR1Y2UgIC05Ljk5OTk5OTAwMDAwMDAwMEUrMzgwICAtPiAtOS45OTk5OTkwMDAwMEUrMzgwCitkZHJlZDE2NiByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5MDAwMEUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTAwMDBFKzM4NAorZGRyZWQxNjcgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTBFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTkwRSszODQKK2RkcmVkMTY4IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJlZDE2OSByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5MEUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTBFKzM4NAorCisKKy0tIHNwZWNpYWxzIChyZWR1Y2UgZG9lcyBub3QgYWZmZWN0IHBheWxvYWQpCitkZHJlZDgyMCByZWR1Y2UgJ0luZicgICAgLT4gJ0luZmluaXR5JworZGRyZWQ4MjEgcmVkdWNlICctSW5mJyAgIC0+ICctSW5maW5pdHknCitkZHJlZDgyMiByZWR1Y2UgICBOYU4gICAgLT4gIE5hTgorZGRyZWQ4MjMgcmVkdWNlICBzTmFOICAgIC0+ICBOYU4gICAgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVkODI0IHJlZHVjZSAgIE5hTjEwMSAtPiAgTmFOMTAxCitkZHJlZDgyNSByZWR1Y2UgIHNOYU4wMTAgLT4gIE5hTjEwICBJbnZhbGlkX29wZXJhdGlvbgorZGRyZWQ4MjcgcmVkdWNlICAtTmFOICAgIC0+IC1OYU4KK2RkcmVkODI4IHJlZHVjZSAtc05hTiAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uCitkZHJlZDgyOSByZWR1Y2UgIC1OYU4xMDEgLT4gLU5hTjEwMQorZGRyZWQ4MzAgcmVkdWNlIC1zTmFOMDEwIC0+IC1OYU4xMCAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0CitkZHJlZDkwMCByZWR1Y2UgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVtYWluZGVyLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVtYWluZGVyLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVkODZmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZW1haW5kZXIuZGVjVGVzdApAQCAtMCwwICsxLDYwMCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFJlbWFpbmRlci5kZWNUZXN0IC0tIGRlY0RvdWJsZSByZW1haW5kZXIgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkKK2RkcmVtMDAxIHJlbWFpbmRlciAgMSAgICAgMSAgICAtPiAgMAorZGRyZW0wMDIgcmVtYWluZGVyICAyICAgICAxICAgIC0+ICAwCitkZHJlbTAwMyByZW1haW5kZXIgIDEgICAgIDIgICAgLT4gIDEKK2RkcmVtMDA0IHJlbWFpbmRlciAgMiAgICAgMiAgICAtPiAgMAorZGRyZW0wMDUgcmVtYWluZGVyICAwICAgICAxICAgIC0+ICAwCitkZHJlbTAwNiByZW1haW5kZXIgIDAgICAgIDIgICAgLT4gIDAKK2RkcmVtMDA3IHJlbWFpbmRlciAgMSAgICAgMyAgICAtPiAgMQorZGRyZW0wMDggcmVtYWluZGVyICAyICAgICAzICAgIC0+ICAyCitkZHJlbTAwOSByZW1haW5kZXIgIDMgICAgIDMgICAgLT4gIDAKKworZGRyZW0wMTAgcmVtYWluZGVyICAyLjQgICAxICAgIC0+ICAwLjQKK2RkcmVtMDExIHJlbWFpbmRlciAgMi40ICAgLTEgICAtPiAgMC40CitkZHJlbTAxMiByZW1haW5kZXIgIC0yLjQgIDEgICAgLT4gIC0wLjQKK2RkcmVtMDEzIHJlbWFpbmRlciAgLTIuNCAgLTEgICAtPiAgLTAuNAorZGRyZW0wMTQgcmVtYWluZGVyICAyLjQwICAxICAgIC0+ICAwLjQwCitkZHJlbTAxNSByZW1haW5kZXIgIDIuNDAwIDEgICAgLT4gIDAuNDAwCitkZHJlbTAxNiByZW1haW5kZXIgIDIuNCAgIDIgICAgLT4gIDAuNAorZGRyZW0wMTcgcmVtYWluZGVyICAyLjQwMCAyICAgIC0+ICAwLjQwMAorZGRyZW0wMTggcmVtYWluZGVyICAyLiAgICAyICAgIC0+ICAwCitkZHJlbTAxOSByZW1haW5kZXIgIDIwICAgIDIwICAgLT4gIDAKKworZGRyZW0wMjAgcmVtYWluZGVyICAxODcgICAxODcgICAgLT4gIDAKK2RkcmVtMDIxIHJlbWFpbmRlciAgNSAgICAgMiAgICAgIC0+ICAxCitkZHJlbTAyMiByZW1haW5kZXIgIDUgICAgIDIuMCAgICAtPiAgMS4wCitkZHJlbTAyMyByZW1haW5kZXIgIDUgICAgIDIuMDAwICAtPiAgMS4wMDAKK2RkcmVtMDI0IHJlbWFpbmRlciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAorZGRyZW0wMjUgcmVtYWluZGVyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCisKK2RkcmVtMDMwIHJlbWFpbmRlciAgMSAgICAgMiAgICAgIC0+ICAxCitkZHJlbTAzMSByZW1haW5kZXIgIDEgICAgIDQgICAgICAtPiAgMQorZGRyZW0wMzIgcmVtYWluZGVyICAxICAgICA4ICAgICAgLT4gIDEKKworZGRyZW0wMzMgcmVtYWluZGVyICAxICAgICAxNiAgICAgLT4gIDEKK2RkcmVtMDM0IHJlbWFpbmRlciAgMSAgICAgMzIgICAgIC0+ICAxCitkZHJlbTAzNSByZW1haW5kZXIgIDEgICAgIDY0ICAgICAtPiAgMQorZGRyZW0wNDAgcmVtYWluZGVyICAxICAgIC0yICAgICAgLT4gIDEKK2RkcmVtMDQxIHJlbWFpbmRlciAgMSAgICAtNCAgICAgIC0+ICAxCitkZHJlbTA0MiByZW1haW5kZXIgIDEgICAgLTggICAgICAtPiAgMQorZGRyZW0wNDMgcmVtYWluZGVyICAxICAgIC0xNiAgICAgLT4gIDEKK2RkcmVtMDQ0IHJlbWFpbmRlciAgMSAgICAtMzIgICAgIC0+ICAxCitkZHJlbTA0NSByZW1haW5kZXIgIDEgICAgLTY0ICAgICAtPiAgMQorZGRyZW0wNTAgcmVtYWluZGVyIC0xICAgICAyICAgICAgLT4gIC0xCitkZHJlbTA1MSByZW1haW5kZXIgLTEgICAgIDQgICAgICAtPiAgLTEKK2RkcmVtMDUyIHJlbWFpbmRlciAtMSAgICAgOCAgICAgIC0+ICAtMQorZGRyZW0wNTMgcmVtYWluZGVyIC0xICAgICAxNiAgICAgLT4gIC0xCitkZHJlbTA1NCByZW1haW5kZXIgLTEgICAgIDMyICAgICAtPiAgLTEKK2RkcmVtMDU1IHJlbWFpbmRlciAtMSAgICAgNjQgICAgIC0+ICAtMQorZGRyZW0wNjAgcmVtYWluZGVyIC0xICAgIC0yICAgICAgLT4gIC0xCitkZHJlbTA2MSByZW1haW5kZXIgLTEgICAgLTQgICAgICAtPiAgLTEKK2RkcmVtMDYyIHJlbWFpbmRlciAtMSAgICAtOCAgICAgIC0+ICAtMQorZGRyZW0wNjMgcmVtYWluZGVyIC0xICAgIC0xNiAgICAgLT4gIC0xCitkZHJlbTA2NCByZW1haW5kZXIgLTEgICAgLTMyICAgICAtPiAgLTEKK2RkcmVtMDY1IHJlbWFpbmRlciAtMSAgICAtNjQgICAgIC0+ICAtMQorCitkZHJlbTA2NiByZW1haW5kZXIgIDk5OTk5OTk5OSAgICAgMSAgLT4gMAorZGRyZW0wNjcgcmVtYWluZGVyICA5OTk5OTk5OTkuNCAgIDEgIC0+IDAuNAorZGRyZW0wNjggcmVtYWluZGVyICA5OTk5OTk5OTkuNSAgIDEgIC0+IDAuNQorZGRyZW0wNjkgcmVtYWluZGVyICA5OTk5OTk5OTkuOSAgIDEgIC0+IDAuOQorZGRyZW0wNzAgcmVtYWluZGVyICA5OTk5OTk5OTkuOTk5IDEgIC0+IDAuOTk5CitkZHJlbTA3MSByZW1haW5kZXIgIDk5OTk5OS45OTk5OTkgMSAgLT4gMC45OTk5OTkKK2RkcmVtMDcyIHJlbWFpbmRlciAgOSAgICAgICAgICAgICAxICAtPiAwCitkZHJlbTA3MyByZW1haW5kZXIgIDk5OTk5OTk5OTk5OTk5OTkgMSAgLT4gMAorZGRyZW0wNzQgcmVtYWluZGVyICA5OTk5OTk5OTk5OTk5OTk5IDIgIC0+IDEKK2RkcmVtMDc1IHJlbWFpbmRlciAgOTk5OTk5OTk5OTk5OTk5OSAzICAtPiAwCitkZHJlbTA3NiByZW1haW5kZXIgIDk5OTk5OTk5OTk5OTk5OTkgNCAgLT4gMworCitkZHJlbTA4MCByZW1haW5kZXIgIDAuICAgICAgICAgICAgMSAgLT4gMAorZGRyZW0wODEgcmVtYWluZGVyICAuMCAgICAgICAgICAgIDEgIC0+IDAuMAorZGRyZW0wODIgcmVtYWluZGVyICAwLjAwICAgICAgICAgIDEgIC0+IDAuMDAKK2RkcmVtMDgzIHJlbWFpbmRlciAgMC4wMEUrOSAgICAgICAxICAtPiAwCitkZHJlbTA4NCByZW1haW5kZXIgIDAuMDBFKzMgICAgICAgMSAgLT4gMAorZGRyZW0wODUgcmVtYWluZGVyICAwLjAwRSsyICAgICAgIDEgIC0+IDAKK2RkcmVtMDg2IHJlbWFpbmRlciAgMC4wMEUrMSAgICAgICAxICAtPiAwLjAKK2RkcmVtMDg3IHJlbWFpbmRlciAgMC4wMEUrMCAgICAgICAxICAtPiAwLjAwCitkZHJlbTA4OCByZW1haW5kZXIgIDAuMDBFLTAgICAgICAgMSAgLT4gMC4wMAorZGRyZW0wODkgcmVtYWluZGVyICAwLjAwRS0xICAgICAgIDEgIC0+IDAuMDAwCitkZHJlbTA5MCByZW1haW5kZXIgIDAuMDBFLTIgICAgICAgMSAgLT4gMC4wMDAwCitkZHJlbTA5MSByZW1haW5kZXIgIDAuMDBFLTMgICAgICAgMSAgLT4gMC4wMDAwMAorZGRyZW0wOTIgcmVtYWluZGVyICAwLjAwRS00ICAgICAgIDEgIC0+IDAuMDAwMDAwCitkZHJlbTA5MyByZW1haW5kZXIgIDAuMDBFLTUgICAgICAgMSAgLT4gMEUtNworZGRyZW0wOTQgcmVtYWluZGVyICAwLjAwRS02ICAgICAgIDEgIC0+IDBFLTgKK2RkcmVtMDk1IHJlbWFpbmRlciAgMC4wMDAwRS01MCAgICAxICAtPiAwRS01NAorCistLSBWYXJpb3VzIGZsYXZvdXJzIG9mIHJlbWFpbmRlciBieSAwCitkZHJlbTEwMSByZW1haW5kZXIgIDAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkcmVtMTAyIHJlbWFpbmRlciAgMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRyZW0xMDMgcmVtYWluZGVyIC0wICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJlbTEwNCByZW1haW5kZXIgLTAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkcmVtMTA1IHJlbWFpbmRlciAgMC4wRTUgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRyZW0xMDYgcmVtYWluZGVyICAwLjAwMCAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCistLSBbU29tZSB0aGluayB0aGlzIG5leHQgZ3JvdXAgc2hvdWxkIGJlIERpdmlzaW9uX2J5X3plcm8gZXhjZXB0aW9uLCBidXQKKy0tIElFRUUgODU0IGlzIGV4cGxpY2l0IHRoYXQgaXQgaXMgSW52YWxpZCBvcGVyYXRpb24gLi4gZm9yCistLSByZW1haW5kZXItbmVhciwgYW55d2F5XQorZGRyZW0xMDcgcmVtYWluZGVyICAwLjAwMDEgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTA4IHJlbWFpbmRlciAgMC4wMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTEwOSByZW1haW5kZXIgIDAuMSAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMTAgcmVtYWluZGVyICAxICAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTExIHJlbWFpbmRlciAgMSAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTExMiByZW1haW5kZXIgMTAgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMTMgcmVtYWluZGVyIDFFKzEwMCAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTE0IHJlbWFpbmRlciAxRSszODAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTExNSByZW1haW5kZXIgIDAuMDAwMSAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMTYgcmVtYWluZGVyICAwLjAxICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTE5IHJlbWFpbmRlciAgMC4xICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTEyMCByZW1haW5kZXIgIDEgICAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMjEgcmVtYWluZGVyICAxICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMTIyIHJlbWFpbmRlciAxMCAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTEyMyByZW1haW5kZXIgMUUrMTAwICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW0xMjQgcmVtYWluZGVyIDFFKzM4NCAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGFuZCB6ZXJvcyBvbiBsZWZ0CitkZHJlbTEzMCByZW1haW5kZXIgIDAgICAgICAxICAgLT4gIDAKK2RkcmVtMTMxIHJlbWFpbmRlciAgMCAgICAgLTEgICAtPiAgMAorZGRyZW0xMzIgcmVtYWluZGVyICAwLjAgICAgMSAgIC0+ICAwLjAKK2RkcmVtMTMzIHJlbWFpbmRlciAgMC4wICAgLTEgICAtPiAgMC4wCitkZHJlbTEzNCByZW1haW5kZXIgLTAgICAgICAxICAgLT4gLTAKK2RkcmVtMTM1IHJlbWFpbmRlciAtMCAgICAgLTEgICAtPiAtMAorZGRyZW0xMzYgcmVtYWluZGVyIC0wLjAgICAgMSAgIC0+IC0wLjAKK2RkcmVtMTM3IHJlbWFpbmRlciAtMC4wICAgLTEgICAtPiAtMC4wCisKKy0tIDAuNWVycworZGRyZW0xNDMgcmVtYWluZGVyICAgMC41ICAyICAgICAtPiAgMC41CitkZHJlbTE0NCByZW1haW5kZXIgICAwLjUgIDIuMSAgIC0+ICAwLjUKK2RkcmVtMTQ1IHJlbWFpbmRlciAgIDAuNSAgMi4wMSAgLT4gIDAuNTAKK2RkcmVtMTQ2IHJlbWFpbmRlciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwCitkZHJlbTE0NyByZW1haW5kZXIgICAwLjUwIDIgICAgIC0+ICAwLjUwCitkZHJlbTE0OCByZW1haW5kZXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwCitkZHJlbTE0OSByZW1haW5kZXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMAorCistLSBzdGVhZGllcworZGRyZW0xNTAgcmVtYWluZGVyICAxICAxICAgLT4gMAorZGRyZW0xNTEgcmVtYWluZGVyICAxICAyICAgLT4gMQorZGRyZW0xNTIgcmVtYWluZGVyICAxICAzICAgLT4gMQorZGRyZW0xNTMgcmVtYWluZGVyICAxICA0ICAgLT4gMQorZGRyZW0xNTQgcmVtYWluZGVyICAxICA1ICAgLT4gMQorZGRyZW0xNTUgcmVtYWluZGVyICAxICA2ICAgLT4gMQorZGRyZW0xNTYgcmVtYWluZGVyICAxICA3ICAgLT4gMQorZGRyZW0xNTcgcmVtYWluZGVyICAxICA4ICAgLT4gMQorZGRyZW0xNTggcmVtYWluZGVyICAxICA5ICAgLT4gMQorZGRyZW0xNTkgcmVtYWluZGVyICAxICAxMCAgLT4gMQorZGRyZW0xNjAgcmVtYWluZGVyICAxICAxICAgLT4gMAorZGRyZW0xNjEgcmVtYWluZGVyICAyICAxICAgLT4gMAorZGRyZW0xNjIgcmVtYWluZGVyICAzICAxICAgLT4gMAorZGRyZW0xNjMgcmVtYWluZGVyICA0ICAxICAgLT4gMAorZGRyZW0xNjQgcmVtYWluZGVyICA1ICAxICAgLT4gMAorZGRyZW0xNjUgcmVtYWluZGVyICA2ICAxICAgLT4gMAorZGRyZW0xNjYgcmVtYWluZGVyICA3ICAxICAgLT4gMAorZGRyZW0xNjcgcmVtYWluZGVyICA4ICAxICAgLT4gMAorZGRyZW0xNjggcmVtYWluZGVyICA5ICAxICAgLT4gMAorZGRyZW0xNjkgcmVtYWluZGVyICAxMCAxICAgLT4gMAorCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyTmVhcgorZGRyZW0xNzEgcmVtYWluZGVyICAgMC40ICAxLjAyMCAtPiAgMC40MDAKK2RkcmVtMTcyIHJlbWFpbmRlciAgIDAuNTAgMS4wMjAgLT4gIDAuNTAwCitkZHJlbTE3MyByZW1haW5kZXIgICAwLjUxIDEuMDIwIC0+ICAwLjUxMAorZGRyZW0xNzQgcmVtYWluZGVyICAgMC41MiAxLjAyMCAtPiAgMC41MjAKK2RkcmVtMTc1IHJlbWFpbmRlciAgIDAuNiAgMS4wMjAgLT4gIDAuNjAwCisKKy0tIE1vcmUgZmxhdm91cnMgb2YgcmVtYWluZGVyIGJ5IDAKK2RkcmVtMjAxIHJlbWFpbmRlciAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJlbTIwMiByZW1haW5kZXIgIDAuMEU1ICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRyZW0yMDMgcmVtYWluZGVyICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RkcmVtMjA0IHJlbWFpbmRlciAgMC4wMDAxIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMjA1IHJlbWFpbmRlciAgMC4wMSAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMjA2IHJlbWFpbmRlciAgMC4xICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMjA3IHJlbWFpbmRlciAgMSAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMjA4IHJlbWFpbmRlciAgMSAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMjA5IHJlbWFpbmRlciAxMCAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMjEwIHJlbWFpbmRlciAxRSsxMDAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtMjExIHJlbWFpbmRlciAxRSszODAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlck5lYXIKK2RkcmVtMjMxIHJlbWFpbmRlciAgLTAuNCAgMS4wMjAgLT4gLTAuNDAwCitkZHJlbTIzMiByZW1haW5kZXIgIC0wLjUwIDEuMDIwIC0+IC0wLjUwMAorZGRyZW0yMzMgcmVtYWluZGVyICAtMC41MSAxLjAyMCAtPiAtMC41MTAKK2RkcmVtMjM0IHJlbWFpbmRlciAgLTAuNTIgMS4wMjAgLT4gLTAuNTIwCitkZHJlbTIzNSByZW1haW5kZXIgIC0wLjYgIDEuMDIwIC0+IC0wLjYwMAorCistLSBoaWdoIFhzCitkZHJlbTI0MCByZW1haW5kZXIgIDFFKzIgIDEuMDAgIC0+ICAwLjAwCisKKy0tIGRkcmVtM3h4IGFyZSBmcm9tIERpYWdCaWdEZWNpbWFsCitkZHJlbTMwMSByZW1haW5kZXIgICAxICAgIDMgICAgIC0+ICAxCitkZHJlbTMwMiByZW1haW5kZXIgICA1ICAgIDUgICAgIC0+ICAwCitkZHJlbTMwMyByZW1haW5kZXIgICAxMyAgIDEwICAgIC0+ICAzCitkZHJlbTMwNCByZW1haW5kZXIgICAxMyAgIDUwICAgIC0+ICAxMworZGRyZW0zMDUgcmVtYWluZGVyICAgMTMgICAxMDAgICAtPiAgMTMKK2RkcmVtMzA2IHJlbWFpbmRlciAgIDEzICAgMTAwMCAgLT4gIDEzCitkZHJlbTMwNyByZW1haW5kZXIgICAuMTMgICAgMSAgIC0+ICAwLjEzCitkZHJlbTMwOCByZW1haW5kZXIgICAwLjEzMyAgMSAgIC0+ICAwLjEzMworZGRyZW0zMDkgcmVtYWluZGVyICAgMC4xMDMzIDEgICAtPiAgMC4xMDMzCitkZHJlbTMxMCByZW1haW5kZXIgICAxLjAzMyAgMSAgIC0+ICAwLjAzMworZGRyZW0zMTEgcmVtYWluZGVyICAgMTAuMzMgIDEgICAtPiAgMC4zMworZGRyZW0zMTIgcmVtYWluZGVyICAgMTAuMzMgMTAgICAtPiAgMC4zMworZGRyZW0zMTMgcmVtYWluZGVyICAgMTAzLjMgIDEgICAtPiAgMC4zCitkZHJlbTMxNCByZW1haW5kZXIgICAxMzMgICAxMCAgIC0+ICAzCitkZHJlbTMxNSByZW1haW5kZXIgICAxMDMzICAxMCAgIC0+ICAzCitkZHJlbTMxNiByZW1haW5kZXIgICAxMDMzICA1MCAgIC0+ICAzMworZGRyZW0zMTcgcmVtYWluZGVyICAgMTAxLjAgIDMgICAtPiAgMi4wCitkZHJlbTMxOCByZW1haW5kZXIgICAxMDIuMCAgMyAgIC0+ICAwLjAKK2RkcmVtMzE5IHJlbWFpbmRlciAgIDEwMy4wICAzICAgLT4gIDEuMAorZGRyZW0zMjAgcmVtYWluZGVyICAgMi40MCAgIDEgICAtPiAgMC40MAorZGRyZW0zMjEgcmVtYWluZGVyICAgMi40MDAgIDEgICAtPiAgMC40MDAKK2RkcmVtMzIyIHJlbWFpbmRlciAgIDIuNCAgICAxICAgLT4gIDAuNAorZGRyZW0zMjMgcmVtYWluZGVyICAgMi40ICAgIDIgICAtPiAgMC40CitkZHJlbTMyNCByZW1haW5kZXIgICAyLjQwMCAgMiAgIC0+ICAwLjQwMAorZGRyZW0zMjUgcmVtYWluZGVyICAgMSAgIDAuMyAgICAtPiAgMC4xCitkZHJlbTMyNiByZW1haW5kZXIgICAxICAgMC4zMCAgIC0+ICAwLjEwCitkZHJlbTMyNyByZW1haW5kZXIgICAxICAgMC4zMDAgIC0+ICAwLjEwMAorZGRyZW0zMjggcmVtYWluZGVyICAgMSAgIDAuMzAwMCAtPiAgMC4xMDAwCitkZHJlbTMyOSByZW1haW5kZXIgICAxLjAgICAgMC4zIC0+ICAwLjEKK2RkcmVtMzMwIHJlbWFpbmRlciAgIDEuMDAgICAwLjMgLT4gIDAuMTAKK2RkcmVtMzMxIHJlbWFpbmRlciAgIDEuMDAwICAwLjMgLT4gIDAuMTAwCitkZHJlbTMzMiByZW1haW5kZXIgICAxLjAwMDAgMC4zIC0+ICAwLjEwMDAKK2RkcmVtMzMzIHJlbWFpbmRlciAgIDAuNSAgMiAgICAgLT4gIDAuNQorZGRyZW0zMzQgcmVtYWluZGVyICAgMC41ICAyLjEgICAtPiAgMC41CitkZHJlbTMzNSByZW1haW5kZXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCitkZHJlbTMzNiByZW1haW5kZXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAorZGRyZW0zMzcgcmVtYWluZGVyICAgMC41MCAyICAgICAtPiAgMC41MAorZGRyZW0zMzggcmVtYWluZGVyICAgMC41MCAyLjAxICAtPiAgMC41MAorZGRyZW0zMzkgcmVtYWluZGVyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKKworZGRyZW0zNDAgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAxICAgIC0+ICAwLjUwMDAwMDAKK2RkcmVtMzQxIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAKK2RkcmVtMzQyIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMAorZGRyZW0zNDMgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMDAKK2RkcmVtMzQ0IHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwMDAKK2RkcmVtMzQ1IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OSAgICAtPiAgMUUtNworZGRyZW0zNDYgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OSAgICAtPiAgMUUtOAorZGRyZW0zNDcgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTkgICAgLT4gIDFFLTkKK2RkcmVtMzQ4IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5OSAgICAtPiAgMUUtMTAKK2RkcmVtMzQ5IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5OTkgICAgLT4gIDFFLTExCitkZHJlbTM1MCByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5OSAgICAtPiAgMUUtMTIKKworZGRyZW0zNTEgcmVtYWluZGVyICAgMC4wMyAgNyAgLT4gIDAuMDMKK2RkcmVtMzUyIHJlbWFpbmRlciAgIDUgICAyICAgIC0+ICAxCitkZHJlbTM1MyByZW1haW5kZXIgICA0LjEgICAyICAgIC0+ICAwLjEKK2RkcmVtMzU0IHJlbWFpbmRlciAgIDQuMDEgICAyICAgIC0+ICAwLjAxCitkZHJlbTM1NSByZW1haW5kZXIgICA0LjAwMSAgIDIgICAgLT4gIDAuMDAxCitkZHJlbTM1NiByZW1haW5kZXIgICA0LjAwMDEgICAyICAgIC0+ICAwLjAwMDEKK2RkcmVtMzU3IHJlbWFpbmRlciAgIDQuMDAwMDEgICAyICAgIC0+ICAwLjAwMDAxCitkZHJlbTM1OCByZW1haW5kZXIgICA0LjAwMDAwMSAgIDIgICAgLT4gIDAuMDAwMDAxCitkZHJlbTM1OSByZW1haW5kZXIgICA0LjAwMDAwMDEgICAyICAgIC0+ICAxRS03CisKK2RkcmVtMzYwIHJlbWFpbmRlciAgIDEuMiAgIDAuNzM0NSAtPiAgMC40NjU1CitkZHJlbTM2MSByZW1haW5kZXIgICAwLjggICAxMiAgICAgLT4gIDAuOAorZGRyZW0zNjIgcmVtYWluZGVyICAgMC44ICAgMC4yICAgIC0+ICAwLjAKK2RkcmVtMzYzIHJlbWFpbmRlciAgIDAuOCAgIDAuMyAgICAtPiAgMC4yCitkZHJlbTM2NCByZW1haW5kZXIgICAwLjgwMCAgIDEyICAgLT4gIDAuODAwCitkZHJlbTM2NSByZW1haW5kZXIgICAwLjgwMCAgIDEuNyAgLT4gIDAuODAwCitkZHJlbTM2NiByZW1haW5kZXIgICAyLjQwMCAgIDIgICAgLT4gIDAuNDAwCisKK2RkcmVtMzcxIHJlbWFpbmRlciAgIDIuNDAwICAyICAgICAgICAtPiAgMC40MDAKKworZGRyZW0zODEgcmVtYWluZGVyIDEyMzQ1ICAxICAgICAgICAgLT4gIDAKK2RkcmVtMzgyIHJlbWFpbmRlciAxMjM0NSAgMS4wMDAxICAgIC0+ICAwLjc2NTcKK2RkcmVtMzgzIHJlbWFpbmRlciAxMjM0NSAgMS4wMDEgICAgIC0+ICAwLjY2OAorZGRyZW0zODQgcmVtYWluZGVyIDEyMzQ1ICAxLjAxICAgICAgLT4gIDAuNzgKK2RkcmVtMzg1IHJlbWFpbmRlciAxMjM0NSAgMS4xICAgICAgIC0+ICAwLjgKK2RkcmVtMzg2IHJlbWFpbmRlciAxMjM1NSAgNCAgICAgICAgIC0+ICAzCitkZHJlbTM4NyByZW1haW5kZXIgMTIzNDUgIDQgICAgICAgICAtPiAgMQorZGRyZW0zODggcmVtYWluZGVyIDEyMzU1ICA0LjAwMDEgICAgLT4gIDIuNjkxMgorZGRyZW0zODkgcmVtYWluZGVyIDEyMzQ1ICA0LjAwMDEgICAgLT4gIDAuNjkxNAorZGRyZW0zOTAgcmVtYWluZGVyIDEyMzQ1ICA0LjkgICAgICAgLT4gIDEuOQorZGRyZW0zOTEgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5ICAgICAgLT4gIDQuNzMKK2RkcmVtMzkyIHJlbWFpbmRlciAxMjM0NSAgNC45OTkgICAgIC0+ICAyLjQ2OQorZGRyZW0zOTMgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5OTkgICAgLT4gIDAuMjQ2OQorZGRyZW0zOTQgcmVtYWluZGVyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDAKK2RkcmVtMzk1IHJlbWFpbmRlciAxMjM0NSAgNS4wMDAxICAgIC0+ICA0Ljc1MzIKK2RkcmVtMzk2IHJlbWFpbmRlciAxMjM0NSAgNS4wMDEgICAgIC0+ICAyLjUzMgorZGRyZW0zOTcgcmVtYWluZGVyIDEyMzQ1ICA1LjAxICAgICAgLT4gIDAuMzYKK2RkcmVtMzk4IHJlbWFpbmRlciAxMjM0NSAgNS4xICAgICAgIC0+ICAzLjAKKworLS0gdGhlIG5hc3R5IGRpdmlzaW9uLWJ5LTEgY2FzZXMKK2RkcmVtNDAxIHJlbWFpbmRlciAgIDAuNSAgICAgICAgIDEgICAtPiAgMC41CitkZHJlbTQwMiByZW1haW5kZXIgICAwLjU1ICAgICAgICAxICAgLT4gIDAuNTUKK2RkcmVtNDAzIHJlbWFpbmRlciAgIDAuNTU1ICAgICAgIDEgICAtPiAgMC41NTUKK2RkcmVtNDA0IHJlbWFpbmRlciAgIDAuNTU1NSAgICAgIDEgICAtPiAgMC41NTU1CitkZHJlbTQwNSByZW1haW5kZXIgICAwLjU1NTU1ICAgICAxICAgLT4gIDAuNTU1NTUKK2RkcmVtNDA2IHJlbWFpbmRlciAgIDAuNTU1NTU1ICAgIDEgICAtPiAgMC41NTU1NTUKK2RkcmVtNDA3IHJlbWFpbmRlciAgIDAuNTU1NTU1NSAgIDEgICAtPiAgMC41NTU1NTU1CitkZHJlbTQwOCByZW1haW5kZXIgICAwLjU1NTU1NTU1ICAxICAgLT4gIDAuNTU1NTU1NTUKK2RkcmVtNDA5IHJlbWFpbmRlciAgIDAuNTU1NTU1NTU1IDEgICAtPiAgMC41NTU1NTU1NTUKKworLS0gZm9sZGRvd25zCitkZHJlbTQyMSByZW1haW5kZXIgICAxRSszODQgICAgICAgMSAgLT4gICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRyZW00MjIgcmVtYWluZGVyICAgMUUrMzg0ICAxRSszODMgIC0+ICAgMEUrMzY5IENsYW1wZWQKK2RkcmVtNDIzIHJlbWFpbmRlciAgIDFFKzM4NCAgMkUrMzgzICAtPiAgIDBFKzM2OSBDbGFtcGVkCitkZHJlbTQyNCByZW1haW5kZXIgICAxRSszODQgIDNFKzM4MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorZGRyZW00MjUgcmVtYWluZGVyICAgMUUrMzg0ICA0RSszODMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2RkcmVtNDI2IHJlbWFpbmRlciAgIDFFKzM4NCAgNUUrMzgzICAtPiAgIDBFKzM2OSBDbGFtcGVkCitkZHJlbTQyNyByZW1haW5kZXIgICAxRSszODQgIDZFKzM4MyAgLT4gICA0LjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorZGRyZW00MjggcmVtYWluZGVyICAgMUUrMzg0ICA3RSszODMgIC0+ICAgMy4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2RkcmVtNDI5IHJlbWFpbmRlciAgIDFFKzM4NCAgOEUrMzgzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCitkZHJlbTQzMCByZW1haW5kZXIgICAxRSszODQgIDlFKzM4MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorLS0gdGluaWVzCitkZHJlbTQzMSByZW1haW5kZXIgICAxRS0zOTcgIDFFLTM5OCAgLT4gICAwRS0zOTgKK2RkcmVtNDMyIHJlbWFpbmRlciAgIDFFLTM5NyAgMkUtMzk4ICAtPiAgIDBFLTM5OAorZGRyZW00MzMgcmVtYWluZGVyICAgMUUtMzk3ICAzRS0zOTggIC0+ICAgMUUtMzk4IFN1Ym5vcm1hbAorZGRyZW00MzQgcmVtYWluZGVyICAgMUUtMzk3ICA0RS0zOTggIC0+ICAgMkUtMzk4IFN1Ym5vcm1hbAorZGRyZW00MzUgcmVtYWluZGVyICAgMUUtMzk3ICA1RS0zOTggIC0+ICAgMEUtMzk4CitkZHJlbTQzNiByZW1haW5kZXIgICAxRS0zOTcgIDZFLTM5OCAgLT4gICA0RS0zOTggU3Vibm9ybWFsCitkZHJlbTQzNyByZW1haW5kZXIgICAxRS0zOTcgIDdFLTM5OCAgLT4gICAzRS0zOTggU3Vibm9ybWFsCitkZHJlbTQzOCByZW1haW5kZXIgICAxRS0zOTcgIDhFLTM5OCAgLT4gICAyRS0zOTggU3Vibm9ybWFsCitkZHJlbTQzOSByZW1haW5kZXIgICAxRS0zOTcgIDlFLTM5OCAgLT4gICAxRS0zOTggU3Vibm9ybWFsCitkZHJlbTQ0MCByZW1haW5kZXIgICAxRS0zOTcgMTBFLTM5OCAgLT4gICAwRS0zOTgKK2RkcmVtNDQxIHJlbWFpbmRlciAgIDFFLTM5NyAxMUUtMzk4ICAtPiAxLjBFLTM5NyBTdWJub3JtYWwKK2RkcmVtNDQyIHJlbWFpbmRlciAxMDBFLTM5NyAxMUUtMzk4ICAtPiAxLjBFLTM5NyBTdWJub3JtYWwKK2RkcmVtNDQzIHJlbWFpbmRlciAxMDBFLTM5NyAyMEUtMzk4ICAtPiAgIDBFLTM5OAorZGRyZW00NDQgcmVtYWluZGVyIDEwMEUtMzk3IDIxRS0zOTggIC0+IDEuM0UtMzk3IFN1Ym5vcm1hbAorZGRyZW00NDUgcmVtYWluZGVyIDEwMEUtMzk3IDMwRS0zOTggIC0+IDEuMEUtMzk3IFN1Ym5vcm1hbAorCistLSB6ZXJvIHNpZ25zCitkZHJlbTY1MCByZW1haW5kZXIgIDEgIDEgLT4gIDAKK2RkcmVtNjUxIHJlbWFpbmRlciAtMSAgMSAtPiAtMAorZGRyZW02NTIgcmVtYWluZGVyICAxIC0xIC0+ICAwCitkZHJlbTY1MyByZW1haW5kZXIgLTEgLTEgLT4gLTAKK2RkcmVtNjU0IHJlbWFpbmRlciAgMCAgMSAtPiAgMAorZGRyZW02NTUgcmVtYWluZGVyIC0wICAxIC0+IC0wCitkZHJlbTY1NiByZW1haW5kZXIgIDAgLTEgLT4gIDAKK2RkcmVtNjU3IHJlbWFpbmRlciAtMCAtMSAtPiAtMAorZGRyZW02NTggcmVtYWluZGVyICAwLjAwICAxICAtPiAgMC4wMAorZGRyZW02NTkgcmVtYWluZGVyIC0wLjAwICAxICAtPiAtMC4wMAorCistLSBTcGVjaWFscworZGRyZW02ODAgcmVtYWluZGVyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTY4MSByZW1haW5kZXIgIEluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNjgyIHJlbWFpbmRlciAgSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW02ODMgcmVtYWluZGVyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTY4NCByZW1haW5kZXIgIEluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNjg1IHJlbWFpbmRlciAgSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW02ODYgcmVtYWluZGVyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTY4NyByZW1haW5kZXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNjg4IHJlbWFpbmRlciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2RkcmVtNjg5IHJlbWFpbmRlciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW02OTEgcmVtYWluZGVyIC0xICAgICBJbmYgICAtPiAtMQorZGRyZW02OTIgcmVtYWluZGVyICAwICAgICBJbmYgICAtPiAgMAorZGRyZW02OTMgcmVtYWluZGVyIC0wICAgICBJbmYgICAtPiAtMAorZGRyZW02OTQgcmVtYWluZGVyICAxICAgICBJbmYgICAtPiAgMQorZGRyZW02OTUgcmVtYWluZGVyICAxMDAwICBJbmYgICAtPiAgMTAwMAorZGRyZW02OTYgcmVtYWluZGVyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkcmVtNzAwIHJlbWFpbmRlciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03MDEgcmVtYWluZGVyIC1JbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTcwMiByZW1haW5kZXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzAzIHJlbWFpbmRlciAtSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03MDQgcmVtYWluZGVyIC1JbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTcwNSByZW1haW5kZXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzA2IHJlbWFpbmRlciAtSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03MDcgcmVtYWluZGVyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTcwOCByZW1haW5kZXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzA5IHJlbWFpbmRlciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2RkcmVtNzEwIHJlbWFpbmRlciAtMSAgICAtSW5mICAgLT4gLTEKK2RkcmVtNzExIHJlbWFpbmRlciAtMCAgICAtSW5mICAgLT4gLTAKK2RkcmVtNzEyIHJlbWFpbmRlciAgMCAgICAtSW5mICAgLT4gIDAKK2RkcmVtNzEzIHJlbWFpbmRlciAgMSAgICAtSW5mICAgLT4gIDEKK2RkcmVtNzE0IHJlbWFpbmRlciAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK2RkcmVtNzE1IHJlbWFpbmRlciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZHJlbTcyMSByZW1haW5kZXIgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RkcmVtNzIyIHJlbWFpbmRlciAgTmFOIC0xMDAwICAgLT4gIE5hTgorZGRyZW03MjMgcmVtYWluZGVyICBOYU4gLTEgICAgICAtPiAgTmFOCitkZHJlbTcyNCByZW1haW5kZXIgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RkcmVtNzI1IHJlbWFpbmRlciAtTmFOICAwICAgICAgLT4gLU5hTgorZGRyZW03MjYgcmVtYWluZGVyICBOYU4gIDEgICAgICAtPiAgTmFOCitkZHJlbTcyNyByZW1haW5kZXIgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RkcmVtNzI4IHJlbWFpbmRlciAgTmFOICBJbmYgICAgLT4gIE5hTgorZGRyZW03MjkgcmVtYWluZGVyICBOYU4gLU5hTiAgICAtPiAgTmFOCitkZHJlbTczMCByZW1haW5kZXIgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RkcmVtNzMxIHJlbWFpbmRlciAtMTAwMCBOYU4gICAgLT4gIE5hTgorZGRyZW03MzIgcmVtYWluZGVyIC0xICAgIE5hTiAgICAtPiAgTmFOCitkZHJlbTczMyByZW1haW5kZXIgLTAgICAtTmFOICAgIC0+IC1OYU4KK2RkcmVtNzM0IHJlbWFpbmRlciAgMCAgICBOYU4gICAgLT4gIE5hTgorZGRyZW03MzUgcmVtYWluZGVyICAxICAgLU5hTiAgICAtPiAtTmFOCitkZHJlbTczNiByZW1haW5kZXIgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RkcmVtNzM3IHJlbWFpbmRlciAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkZHJlbTc0MSByZW1haW5kZXIgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc0MiByZW1haW5kZXIgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc0MyByZW1haW5kZXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc0NCByZW1haW5kZXIgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc0NSByZW1haW5kZXIgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc0NiByZW1haW5kZXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc0NyByZW1haW5kZXIgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc0OSByZW1haW5kZXIgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1MCByZW1haW5kZXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1MSByZW1haW5kZXIgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1MiByZW1haW5kZXIgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1MyByZW1haW5kZXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1NCByZW1haW5kZXIgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1NSByZW1haW5kZXIgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1NiByZW1haW5kZXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1NyByZW1haW5kZXIgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1OCByZW1haW5kZXIgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc1OSByZW1haW5kZXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2luZyBOYU5zCitkZHJlbTc2MCByZW1haW5kZXIgIE5hTjEgICBOYU43ICAgLT4gIE5hTjEKK2RkcmVtNzYxIHJlbWFpbmRlciBzTmFOMiAgIE5hTjggICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZGRyZW03NjIgcmVtYWluZGVyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTc2MyByZW1haW5kZXIgc05hTjQgIHNOYU4xMCAgLT4gIE5hTjQgSW52YWxpZF9vcGVyYXRpb24KK2RkcmVtNzY0IHJlbWFpbmRlciAgICAxNSAgIE5hTjExICAtPiAgTmFOMTEKK2RkcmVtNzY1IHJlbWFpbmRlciAgTmFONiAgIE5hTjEyICAtPiAgTmFONgorZGRyZW03NjYgcmVtYWluZGVyICBJbmYgICAgTmFOMTMgIC0+ICBOYU4xMworZGRyZW03NjcgcmVtYWluZGVyICBOYU4xNCAgLUluZiAgIC0+ICBOYU4xNAorZGRyZW03NjggcmVtYWluZGVyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQorZGRyZW03NjkgcmVtYWluZGVyICBOYU4xNiAgIC0wICAgIC0+ICBOYU4xNgorCistLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUKK2RkcmVtNzcwICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDEwICAgIC0+ICA2CitkZHJlbTc3MSAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgMSAgICAtPiAgMAorZGRyZW03NzIgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJlbTc3MyAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworZGRyZW04MDEgcmVtYWluZGVyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCitkZHJlbTgwMiByZW1haW5kZXIgMSAxMjM0NTY3ODAwMCAgIC0+IDEKK2RkcmVtODAzIHJlbWFpbmRlciAxMjM0NTY3ODAwICAxMCAgLT4gMAorZGRyZW04MDQgcmVtYWluZGVyIDEgMTIzNDU2NzgwMCAgICAtPiAxCitkZHJlbTgwNSByZW1haW5kZXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDAKK2RkcmVtODA2IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAgICAgLT4gMQorZGRyZW04MDcgcmVtYWluZGVyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCitkZHJlbTgwOCByZW1haW5kZXIgMSAxMjM0NTY3ODkxICAgIC0+IDEKK2RkcmVtODA5IHJlbWFpbmRlciAxMjM0NTY3ODkwMSAxMDAgLT4gMQorZGRyZW04MTAgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkZHJlbTgxMSByZW1haW5kZXIgMTIzNDU2Nzg5NiAgMTAgIC0+IDYKK2RkcmVtODEyIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCitkZHJlbTgyMSByZW1haW5kZXIgMTIzNDU2NzgwMDAgMTAwIC0+IDAKK2RkcmVtODIyIHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAwICAgLT4gMQorZGRyZW04MjMgcmVtYWluZGVyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitkZHJlbTgyNCByZW1haW5kZXIgMSAxMjM0NTY3ODAwICAgIC0+IDEKK2RkcmVtODI1IHJlbWFpbmRlciAxMjM0NTY3ODkwICAxMCAgLT4gMAorZGRyZW04MjYgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitkZHJlbTgyNyByZW1haW5kZXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDEKK2RkcmVtODI4IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZGRyZW04MjkgcmVtYWluZGVyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitkZHJlbTgzMCByZW1haW5kZXIgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK2RkcmVtODMxIHJlbWFpbmRlciAxMjM0NTY3ODk2ICAxMCAgLT4gNgorZGRyZW04MzIgcmVtYWluZGVyIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKKy0tIGZyb20gZGl2aWRlaW50CitkZHJlbTg0MCByZW1haW5kZXIgIDEwMDAwMDAwMC4wICAgMSAgLT4gIDAuMAorZGRyZW04NDEgcmVtYWluZGVyICAxMDAwMDAwMDAuNCAgIDEgIC0+ICAwLjQKK2RkcmVtODQyIHJlbWFpbmRlciAgMTAwMDAwMDAwLjUgICAxICAtPiAgMC41CitkZHJlbTg0MyByZW1haW5kZXIgIDEwMDAwMDAwMC45ICAgMSAgLT4gIDAuOQorZGRyZW04NDQgcmVtYWluZGVyICAxMDAwMDAwMDAuOTk5IDEgIC0+ICAwLjk5OQorZGRyZW04NTAgcmVtYWluZGVyICAxMDAwMDAwMDMgICAgIDUgIC0+ICAzCitkZHJlbTg1MSByZW1haW5kZXIgIDEwMDAwMDAzICAgICAgNSAgLT4gIDMKK2RkcmVtODUyIHJlbWFpbmRlciAgMTAwMDAwMyAgICAgICA1ICAtPiAgMworZGRyZW04NTMgcmVtYWluZGVyICAxMDAwMDMgICAgICAgIDUgIC0+ICAzCitkZHJlbTg1NCByZW1haW5kZXIgIDEwMDAzICAgICAgICAgNSAgLT4gIDMKK2RkcmVtODU1IHJlbWFpbmRlciAgMTAwMyAgICAgICAgICA1ICAtPiAgMworZGRyZW04NTYgcmVtYWluZGVyICAxMDMgICAgICAgICAgIDUgIC0+ICAzCitkZHJlbTg1NyByZW1haW5kZXIgIDEzICAgICAgICAgICAgNSAgLT4gIDMKK2RkcmVtODU4IHJlbWFpbmRlciAgMSAgICAgICAgICAgICA1ICAtPiAgMQorCistLSBWbGFkaW1pcidzIGNhc2VzICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZGRyZW04NjAgcmVtYWluZGVyIDEyMy4wZTEgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRyZW04NjEgcmVtYWluZGVyIDEyMzAgICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRyZW04NjIgcmVtYWluZGVyIDEyLjNlMiAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRyZW04NjMgcmVtYWluZGVyIDEuMjNlMyAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRyZW04NjQgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRyZW04NzAgcmVtYWluZGVyIDEyM2UxICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzEgcmVtYWluZGVyIDEyM2UxICAgICAxMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzIgcmVtYWluZGVyIDEyM2UxICAgICAgMTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzMgcmVtYWluZGVyIDEyM2UxICAgICAgIDEwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzQgcmVtYWluZGVyIDEyM2UxICAgICAgICAxMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgMTAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDEwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzggcmVtYWluZGVyIDEyMzAgICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAorZGRyZW04NzkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgMTAwMDAwMDAgLT4gMTIzMAorZGRyZW04ODAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDEwMDAwMDAgLT4gMTIzMAorZGRyZW04ODEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAxMDAwMDAgLT4gMTIzMAorZGRyZW04ODIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgMTAwMDAgLT4gMTIzMAorZGRyZW04ODMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDEwMDAgLT4gIDIzMAorZGRyZW04ODQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAxMDAgLT4gICAzMAorZGRyZW04ODUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgMTAgLT4gICAgMAorZGRyZW04ODYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDEgLT4gICAgMAorCitkZHJlbTg5MCByZW1haW5kZXIgMTIzZTEgICAgMjAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5MSByZW1haW5kZXIgMTIzZTEgICAgIDIwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5MiByZW1haW5kZXIgMTIzZTEgICAgICAyMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5MyByZW1haW5kZXIgMTIzZTEgICAgICAgMjAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5NCByZW1haW5kZXIgMTIzZTEgICAgICAgIDIwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAyMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgMjAwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5NyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDIwMDAwMDAwMCAtPiAxMjMwCitkZHJlbTg5OSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAyMDAwMDAwMCAtPiAxMjMwCitkZHJlbTkwMCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgMjAwMDAwMCAtPiAxMjMwCitkZHJlbTkwMSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDIwMDAwMCAtPiAxMjMwCitkZHJlbTkwMiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAyMDAwMCAtPiAxMjMwCitkZHJlbTkwMyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgMjAwMCAtPiAxMjMwCitkZHJlbTkwNCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDIwMCAtPiAgIDMwCitkZHJlbTkwNSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAyMCAtPiAgIDEwCitkZHJlbTkwNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMiAtPiAgICAwCisKK2RkcmVtOTEwIHJlbWFpbmRlciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTExIHJlbWFpbmRlciAxMjNlMSAgICAgNTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTEyIHJlbWFpbmRlciAxMjNlMSAgICAgIDUwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTEzIHJlbWFpbmRlciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTE0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgNTAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTE1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDUwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTE2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTE3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgNTAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTE5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDUwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTIwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzAKK2RkcmVtOTIxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgNTAwMDAwIC0+IDEyMzAKK2RkcmVtOTIyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDUwMDAwIC0+IDEyMzAKK2RkcmVtOTIzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzAKK2RkcmVtOTI0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgNTAwIC0+ICAyMzAKK2RkcmVtOTI1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDUwIC0+ICAgMzAKK2RkcmVtOTI2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDAKKworZGRyZW05MzAgcmVtYWluZGVyIDEyM2UxICAgIDkwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzEgcmVtYWluZGVyIDEyM2UxICAgICA5MDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzIgcmVtYWluZGVyIDEyM2UxICAgICAgOTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzMgcmVtYWluZGVyIDEyM2UxICAgICAgIDkwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzQgcmVtYWluZGVyIDEyM2UxICAgICAgICA5MDAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgOTAwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDkwMDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICA5MDAwMDAwMDAgLT4gMTIzMAorZGRyZW05MzkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgOTAwMDAwMDAgLT4gMTIzMAorZGRyZW05NDAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDkwMDAwMDAgLT4gMTIzMAorZGRyZW05NDEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICA5MDAwMDAgLT4gMTIzMAorZGRyZW05NDIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgOTAwMDAgLT4gMTIzMAorZGRyZW05NDMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDkwMDAgLT4gMTIzMAorZGRyZW05NDQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICA5MDAgLT4gIDMzMAorZGRyZW05NDUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgOTAgLT4gICA2MAorZGRyZW05NDYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDkgLT4gICAgNgorCitkZHJlbTk1MCByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RkcmVtOTYxIHJlbWFpbmRlciAxMjNlMSAgIDI5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRyZW05NjIgcmVtYWluZGVyIDEyM2UxICAgMzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkZHJlbTk2MyByZW1haW5kZXIgMTIzZTEgICA0OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RkcmVtOTY0IHJlbWFpbmRlciAxMjNlMSAgIDU5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRyZW05NjUgcmVtYWluZGVyIDEyM2UxICAgNjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkZHJlbTk2NiByZW1haW5kZXIgMTIzZTEgICA3OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RkcmVtOTY3IHJlbWFpbmRlciAxMjNlMSAgIDg5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZGRyZW05NjggcmVtYWluZGVyIDEyM2UxICAgOTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkZHJlbTk2OSByZW1haW5kZXIgMTIzZTEgICA5ODc2NTQzMjEwOTg3NjU0IC0+IDEyMzAKKworZGRyZW05ODAgcmVtYWluZGVyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5CisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQorZGRyZW0xMDUxIHJlbWFpbmRlciAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJlbTEwNTIgcmVtYWluZGVyICAxZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RkcmVtMTA1MyByZW1haW5kZXIgLTFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRyZW0xMDU0IHJlbWFpbmRlciAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJlbTEwNTUgcmVtYWluZGVyICAxZS0yNzcgIDFlKzMxMSAtPiAgMUUtMjc3CitkZHJlbTEwNTYgcmVtYWluZGVyICAxZS0yNzcgLTFlKzMxMSAtPiAgMUUtMjc3CitkZHJlbTEwNTcgcmVtYWluZGVyIC0xZS0yNzcgIDFlKzMxMSAtPiAtMUUtMjc3CitkZHJlbTEwNTggcmVtYWluZGVyIC0xZS0yNzcgLTFlKzMxMSAtPiAtMUUtMjc3CisKKy0tIGRlc3RydWN0aXZlIHN1YnRyYWN0CitkZHJlbTExMDEgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAxLjAwMDAwMDAwMDAwMDAwMSAgLT4gIDAuNzY1NDMyMTA5ODc2NTQ2CitkZHJlbTExMDIgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgMS4wMDAwMDAwMDAwMDAwMSAgLT4gICAwLjY1NDMyMTA5ODc2NTU3CitkZHJlbTExMDMgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDEuMDAwMDAwMDAwMDAwMSAgLT4gICAgMC41NDMyMTA5ODc2NjY4CitkZHJlbTExMDQgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU1ICA0LjAwMDAwMDAwMDAwMDAwMSAgLT4gIDIuNjkxMzU4MDI3NDY5MTM3CitkZHJlbTExMDUgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICA0LjAwMDAwMDAwMDAwMDAwMSAgLT4gIDMuNjkxMzU4MDI3NDY5MTM3CitkZHJlbTExMDYgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDQuOTk5OTk5OTk5OTk5OSAgLT4gICAgMC42OTEzNTc4MDI0Njk2CitkZHJlbTExMDcgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgNC45OTk5OTk5OTk5OTk5OSAgLT4gICAzLjQ2OTEzNTc4MDI0NjkxCitkZHJlbTExMDggcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICA0Ljk5OTk5OTk5OTk5OTk5OSAgLT4gIDEuMjQ2OTEzNTc4MDI0NjkxCitkZHJlbTExMDkgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICA1LjAwMDAwMDAwMDAwMDAwMSAgLT4gIDAuNzUzMDg2NDIxOTc1MzA5CitkZHJlbTExMTAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgNS4wMDAwMDAwMDAwMDAwMSAgLT4gICAzLjUzMDg2NDIxOTc1MzEwCitkZHJlbTExMTEgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDUuMDAwMDAwMDAwMDAwMSAgLT4gICAgMS4zMDg2NDIxOTc1MzE0CisKKy0tIE51bGwgdGVzdHMKK2RkcmVtMTAwMCByZW1haW5kZXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJlbTEwMDEgcmVtYWluZGVyICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVtYWluZGVyTmVhci5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJlbWFpbmRlck5lYXIuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGE5YWZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJlbWFpbmRlck5lYXIuZGVjVGVzdApAQCAtMCwwICsxLDYyOSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFJlbWFpbmRlck5lYXIuZGVjVGVzdCAtLSBkZWNEb3VibGUgcmVtYWluZGVyLW5lYXIgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkKK2Rkcm1uMDAxIHJlbWFpbmRlcm5lYXIgIDEgICAgIDEgICAgLT4gIDAKK2Rkcm1uMDAyIHJlbWFpbmRlcm5lYXIgIDIgICAgIDEgICAgLT4gIDAKK2Rkcm1uMDAzIHJlbWFpbmRlcm5lYXIgIDEgICAgIDIgICAgLT4gIDEKK2Rkcm1uMDA0IHJlbWFpbmRlcm5lYXIgIDIgICAgIDIgICAgLT4gIDAKK2Rkcm1uMDA1IHJlbWFpbmRlcm5lYXIgIDAgICAgIDEgICAgLT4gIDAKK2Rkcm1uMDA2IHJlbWFpbmRlcm5lYXIgIDAgICAgIDIgICAgLT4gIDAKK2Rkcm1uMDA3IHJlbWFpbmRlcm5lYXIgIDEgICAgIDMgICAgLT4gIDEKK2Rkcm1uMDA4IHJlbWFpbmRlcm5lYXIgIDIgICAgIDMgICAgLT4gLTEKK2Rkcm1uMDA5IHJlbWFpbmRlcm5lYXIgIDMgICAgIDMgICAgLT4gIDAKKworZGRybW4wMTAgcmVtYWluZGVybmVhciAgMi40ICAgMSAgICAtPiAgMC40CitkZHJtbjAxMSByZW1haW5kZXJuZWFyICAyLjQgICAtMSAgIC0+ICAwLjQKK2Rkcm1uMDEyIHJlbWFpbmRlcm5lYXIgIC0yLjQgIDEgICAgLT4gIC0wLjQKK2Rkcm1uMDEzIHJlbWFpbmRlcm5lYXIgIC0yLjQgIC0xICAgLT4gIC0wLjQKK2Rkcm1uMDE0IHJlbWFpbmRlcm5lYXIgIDIuNDAgIDEgICAgLT4gIDAuNDAKK2Rkcm1uMDE1IHJlbWFpbmRlcm5lYXIgIDIuNDAwIDEgICAgLT4gIDAuNDAwCitkZHJtbjAxNiByZW1haW5kZXJuZWFyICAyLjQgICAyICAgIC0+ICAwLjQKK2Rkcm1uMDE3IHJlbWFpbmRlcm5lYXIgIDIuNDAwIDIgICAgLT4gIDAuNDAwCitkZHJtbjAxOCByZW1haW5kZXJuZWFyICAyLiAgICAyICAgIC0+ICAwCitkZHJtbjAxOSByZW1haW5kZXJuZWFyICAyMCAgICAyMCAgIC0+ICAwCisKK2Rkcm1uMDIwIHJlbWFpbmRlcm5lYXIgIDE4NyAgIDE4NyAgICAtPiAgMAorZGRybW4wMjEgcmVtYWluZGVybmVhciAgNSAgICAgMiAgICAgIC0+ICAxCitkZHJtbjAyMiByZW1haW5kZXJuZWFyICA1ICAgICAyLjAgICAgLT4gIDEuMAorZGRybW4wMjMgcmVtYWluZGVybmVhciAgNSAgICAgMi4wMDAgIC0+ICAxLjAwMAorZGRybW4wMjQgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAorZGRybW4wMjUgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAorCitkZHJtbjAzMCByZW1haW5kZXJuZWFyICAxICAgICAyICAgICAgLT4gIDEKK2Rkcm1uMDMxIHJlbWFpbmRlcm5lYXIgIDEgICAgIDQgICAgICAtPiAgMQorZGRybW4wMzIgcmVtYWluZGVybmVhciAgMSAgICAgOCAgICAgIC0+ICAxCisKK2Rkcm1uMDMzIHJlbWFpbmRlcm5lYXIgIDEgICAgIDE2ICAgICAtPiAgMQorZGRybW4wMzQgcmVtYWluZGVybmVhciAgMSAgICAgMzIgICAgIC0+ICAxCitkZHJtbjAzNSByZW1haW5kZXJuZWFyICAxICAgICA2NCAgICAgLT4gIDEKK2Rkcm1uMDQwIHJlbWFpbmRlcm5lYXIgIDEgICAgLTIgICAgICAtPiAgMQorZGRybW4wNDEgcmVtYWluZGVybmVhciAgMSAgICAtNCAgICAgIC0+ICAxCitkZHJtbjA0MiByZW1haW5kZXJuZWFyICAxICAgIC04ICAgICAgLT4gIDEKK2Rkcm1uMDQzIHJlbWFpbmRlcm5lYXIgIDEgICAgLTE2ICAgICAtPiAgMQorZGRybW4wNDQgcmVtYWluZGVybmVhciAgMSAgICAtMzIgICAgIC0+ICAxCitkZHJtbjA0NSByZW1haW5kZXJuZWFyICAxICAgIC02NCAgICAgLT4gIDEKK2Rkcm1uMDUwIHJlbWFpbmRlcm5lYXIgLTEgICAgIDIgICAgICAtPiAgLTEKK2Rkcm1uMDUxIHJlbWFpbmRlcm5lYXIgLTEgICAgIDQgICAgICAtPiAgLTEKK2Rkcm1uMDUyIHJlbWFpbmRlcm5lYXIgLTEgICAgIDggICAgICAtPiAgLTEKK2Rkcm1uMDUzIHJlbWFpbmRlcm5lYXIgLTEgICAgIDE2ICAgICAtPiAgLTEKK2Rkcm1uMDU0IHJlbWFpbmRlcm5lYXIgLTEgICAgIDMyICAgICAtPiAgLTEKK2Rkcm1uMDU1IHJlbWFpbmRlcm5lYXIgLTEgICAgIDY0ICAgICAtPiAgLTEKK2Rkcm1uMDYwIHJlbWFpbmRlcm5lYXIgLTEgICAgLTIgICAgICAtPiAgLTEKK2Rkcm1uMDYxIHJlbWFpbmRlcm5lYXIgLTEgICAgLTQgICAgICAtPiAgLTEKK2Rkcm1uMDYyIHJlbWFpbmRlcm5lYXIgLTEgICAgLTggICAgICAtPiAgLTEKK2Rkcm1uMDYzIHJlbWFpbmRlcm5lYXIgLTEgICAgLTE2ICAgICAtPiAgLTEKK2Rkcm1uMDY0IHJlbWFpbmRlcm5lYXIgLTEgICAgLTMyICAgICAtPiAgLTEKK2Rkcm1uMDY1IHJlbWFpbmRlcm5lYXIgLTEgICAgLTY0ICAgICAtPiAgLTEKKworZGRybW4wNjYgcmVtYWluZGVybmVhciAgICAgICAgICA5LjkgICAxICAtPiAtMC4xCitkZHJtbjA2NyByZW1haW5kZXJuZWFyICAgICAgICAgOTkuNyAgIDEgIC0+IC0wLjMKK2Rkcm1uMDY4IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OSAgICAgMSAgLT4gMAorZGRybW4wNjkgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjQgICAxICAtPiAwLjQKK2Rkcm1uMDcwIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gLTAuNQorZGRybW4wNzEgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjkgICAxICAtPiAtMC4xCitkZHJtbjA3MiByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuOTk5IDEgIC0+IC0wLjAwMQorZGRybW4wNzMgcmVtYWluZGVybmVhciAgOTk5OTk5Ljk5OTk5OSAxICAtPiAtMC4wMDAwMDEKK2Rkcm1uMDc0IHJlbWFpbmRlcm5lYXIgIDkgICAgICAgICAgICAgMSAgLT4gMAorZGRybW4wNzUgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAwCitkZHJtbjA3NiByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDIgIC0+IC0xCitkZHJtbjA3NyByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDMgIC0+IDAKK2Rkcm1uMDc4IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgNCAgLT4gLTEKKworZGRybW4wODAgcmVtYWluZGVybmVhciAgMC4gICAgICAgICAgICAxICAtPiAwCitkZHJtbjA4MSByZW1haW5kZXJuZWFyICAuMCAgICAgICAgICAgIDEgIC0+IDAuMAorZGRybW4wODIgcmVtYWluZGVybmVhciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwCitkZHJtbjA4MyByZW1haW5kZXJuZWFyICAwLjAwRSs5ICAgICAgIDEgIC0+IDAKK2Rkcm1uMDg0IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzMgICAgICAgMSAgLT4gMAorZGRybW4wODUgcmVtYWluZGVybmVhciAgMC4wMEUrMiAgICAgICAxICAtPiAwCitkZHJtbjA4NiByZW1haW5kZXJuZWFyICAwLjAwRSsxICAgICAgIDEgIC0+IDAuMAorZGRybW4wODcgcmVtYWluZGVybmVhciAgMC4wMEUrMCAgICAgICAxICAtPiAwLjAwCitkZHJtbjA4OCByZW1haW5kZXJuZWFyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDAKK2Rkcm1uMDg5IHJlbWFpbmRlcm5lYXIgIDAuMDBFLTEgICAgICAgMSAgLT4gMC4wMDAKK2Rkcm1uMDkwIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTIgICAgICAgMSAgLT4gMC4wMDAwCitkZHJtbjA5MSByZW1haW5kZXJuZWFyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDAKK2Rkcm1uMDkyIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTQgICAgICAgMSAgLT4gMC4wMDAwMDAKK2Rkcm1uMDkzIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTUgICAgICAgMSAgLT4gMEUtNworZGRybW4wOTQgcmVtYWluZGVybmVhciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04CitkZHJtbjA5NSByZW1haW5kZXJuZWFyICAwLjAwMDBFLTUwICAgIDEgIC0+IDBFLTU0CisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwCitkZHJtbjEwMSByZW1haW5kZXJuZWFyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJtbjEwMiByZW1haW5kZXJuZWFyICAwICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJtbjEwMyByZW1haW5kZXJuZWFyIC0wICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJtbjEwNCByZW1haW5kZXJuZWFyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJtbjEwNSByZW1haW5kZXJuZWFyICAwLjBFNSAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJtbjEwNiByZW1haW5kZXJuZWFyICAwLjAwMCAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCistLSBbU29tZSB0aGluayB0aGlzIG5leHQgZ3JvdXAgc2hvdWxkIGJlIERpdmlzaW9uX2J5X3plcm8gZXhjZXB0aW9uLCBidXQKKy0tIElFRUUgODU0IGlzIGV4cGxpY2l0IHRoYXQgaXQgaXMgSW52YWxpZCBvcGVyYXRpb24gLi4gZm9yCistLSByZW1haW5kZXItbmVhciwgYW55d2F5XQorZGRybW4xMDcgcmVtYWluZGVybmVhciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjEwOCByZW1haW5kZXJuZWFyICAwLjAxICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTA5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMTAgcmVtYWluZGVybmVhciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjExMSByZW1haW5kZXJuZWFyICAxICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTEyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMTMgcmVtYWluZGVybmVhciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjExNCByZW1haW5kZXJuZWFyIDFFKzM4MCAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTE1IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMTYgcmVtYWluZGVybmVhciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjExOSByZW1haW5kZXJuZWFyICAwLjEgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTIwIHJlbWFpbmRlcm5lYXIgIDEgICAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMjEgcmVtYWluZGVybmVhciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjEyMiByZW1haW5kZXJuZWFyIDEwICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMTIzIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMjQgcmVtYWluZGVybmVhciAxRSszODQgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgemVyb3Mgb24gbGVmdAorZGRybW4xMzAgcmVtYWluZGVybmVhciAgMCAgICAgIDEgICAtPiAgMAorZGRybW4xMzEgcmVtYWluZGVybmVhciAgMCAgICAgLTEgICAtPiAgMAorZGRybW4xMzIgcmVtYWluZGVybmVhciAgMC4wICAgIDEgICAtPiAgMC4wCitkZHJtbjEzMyByZW1haW5kZXJuZWFyICAwLjAgICAtMSAgIC0+ICAwLjAKK2Rkcm1uMTM0IHJlbWFpbmRlcm5lYXIgLTAgICAgICAxICAgLT4gLTAKK2Rkcm1uMTM1IHJlbWFpbmRlcm5lYXIgLTAgICAgIC0xICAgLT4gLTAKK2Rkcm1uMTM2IHJlbWFpbmRlcm5lYXIgLTAuMCAgICAxICAgLT4gLTAuMAorZGRybW4xMzcgcmVtYWluZGVybmVhciAtMC4wICAgLTEgICAtPiAtMC4wCisKKy0tIDAuNWVycworZGRybW4xNDMgcmVtYWluZGVybmVhciAgIDAuNSAgMiAgICAgLT4gIDAuNQorZGRybW4xNDQgcmVtYWluZGVybmVhciAgIDAuNSAgMi4xICAgLT4gIDAuNQorZGRybW4xNDUgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMSAgLT4gIDAuNTAKK2Rkcm1uMTQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAorZGRybW4xNDcgcmVtYWluZGVybmVhciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKK2Rkcm1uMTQ4IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwCitkZHJtbjE0OSByZW1haW5kZXJuZWFyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKKworLS0gc3RlYWRpZXMKK2Rkcm1uMTUwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwCitkZHJtbjE1MSByZW1haW5kZXJuZWFyICAxICAyICAgLT4gMQorZGRybW4xNTIgcmVtYWluZGVybmVhciAgMSAgMyAgIC0+IDEKK2Rkcm1uMTUzIHJlbWFpbmRlcm5lYXIgIDEgIDQgICAtPiAxCitkZHJtbjE1NCByZW1haW5kZXJuZWFyICAxICA1ICAgLT4gMQorZGRybW4xNTUgcmVtYWluZGVybmVhciAgMSAgNiAgIC0+IDEKK2Rkcm1uMTU2IHJlbWFpbmRlcm5lYXIgIDEgIDcgICAtPiAxCitkZHJtbjE1NyByZW1haW5kZXJuZWFyICAxICA4ICAgLT4gMQorZGRybW4xNTggcmVtYWluZGVybmVhciAgMSAgOSAgIC0+IDEKK2Rkcm1uMTU5IHJlbWFpbmRlcm5lYXIgIDEgIDEwICAtPiAxCitkZHJtbjE2MCByZW1haW5kZXJuZWFyICAxICAxICAgLT4gMAorZGRybW4xNjEgcmVtYWluZGVybmVhciAgMiAgMSAgIC0+IDAKK2Rkcm1uMTYyIHJlbWFpbmRlcm5lYXIgIDMgIDEgICAtPiAwCitkZHJtbjE2MyByZW1haW5kZXJuZWFyICA0ICAxICAgLT4gMAorZGRybW4xNjQgcmVtYWluZGVybmVhciAgNSAgMSAgIC0+IDAKK2Rkcm1uMTY1IHJlbWFpbmRlcm5lYXIgIDYgIDEgICAtPiAwCitkZHJtbjE2NiByZW1haW5kZXJuZWFyICA3ICAxICAgLT4gMAorZGRybW4xNjcgcmVtYWluZGVybmVhciAgOCAgMSAgIC0+IDAKK2Rkcm1uMTY4IHJlbWFpbmRlcm5lYXIgIDkgIDEgICAtPiAwCitkZHJtbjE2OSByZW1haW5kZXJuZWFyICAxMCAxICAgLT4gMAorCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyCitkZHJtbjE3MSByZW1haW5kZXJuZWFyICAgMC40ICAxLjAyMCAtPiAgMC40MDAKK2Rkcm1uMTcyIHJlbWFpbmRlcm5lYXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMAorZGRybW4xNzMgcmVtYWluZGVybmVhciAgIDAuNTEgMS4wMjAgLT4gIDAuNTEwCitkZHJtbjE3NCByZW1haW5kZXJuZWFyICAgMC41MiAxLjAyMCAtPiAtMC41MDAKK2Rkcm1uMTc1IHJlbWFpbmRlcm5lYXIgICAwLjYgIDEuMDIwIC0+IC0wLjQyMAorCistLSBNb3JlIGZsYXZvdXJzIG9mIHJlbWFpbmRlcm5lYXIgYnkgMAorZGRybW4yMDEgcmVtYWluZGVybmVhciAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkZHJtbjIwMiByZW1haW5kZXJuZWFyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rkcm1uMjAzIHJlbWFpbmRlcm5lYXIgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGRybW4yMDQgcmVtYWluZGVybmVhciAgMC4wMDAxIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMjA1IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjIwNiByZW1haW5kZXJuZWFyICAwLjEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4yMDcgcmVtYWluZGVybmVhciAgMSAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMjA4IHJlbWFpbmRlcm5lYXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjIwOSByZW1haW5kZXJuZWFyIDEwICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4yMTAgcmVtYWluZGVybmVhciAxRSsxMDAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uMjExIHJlbWFpbmRlcm5lYXIgMUUrMzgwICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHRlc3RzIGZyb20gdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24KK2Rkcm1uMjIxIHJlbWFpbmRlcm5lYXIgMi4xICAgICAzICAgLT4gLTAuOQorZGRybW4yMjIgcmVtYWluZGVybmVhciAgMTAgICAgIDYgICAtPiAtMgorZGRybW4yMjMgcmVtYWluZGVybmVhciAgMTAgICAgIDMgICAtPiAgMQorZGRybW4yMjQgcmVtYWluZGVybmVhciAtMTAgICAgIDMgICAtPiAtMQorZGRybW4yMjUgcmVtYWluZGVybmVhciAgMTAuMiAgIDEgICAtPiAwLjIKK2Rkcm1uMjI2IHJlbWFpbmRlcm5lYXIgIDEwICAgICAwLjMgLT4gMC4xCitkZHJtbjIyNyByZW1haW5kZXJuZWFyICAgMy42ICAgMS4zIC0+IC0wLjMKKworLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlcgorZGRybW4yMzEgcmVtYWluZGVybmVhciAgLTAuNCAgMS4wMjAgLT4gLTAuNDAwCitkZHJtbjIzMiByZW1haW5kZXJuZWFyICAtMC41MCAxLjAyMCAtPiAtMC41MDAKK2Rkcm1uMjMzIHJlbWFpbmRlcm5lYXIgIC0wLjUxIDEuMDIwIC0+IC0wLjUxMAorZGRybW4yMzQgcmVtYWluZGVybmVhciAgLTAuNTIgMS4wMjAgLT4gIDAuNTAwCitkZHJtbjIzNSByZW1haW5kZXJuZWFyICAtMC42ICAxLjAyMCAtPiAgMC40MjAKKworLS0gaGlnaCBYcworZGRybW4yNDAgcmVtYWluZGVybmVhciAgMUUrMiAgMS4wMCAgLT4gIDAuMDAKKworLS0gZGRybW4zeHggYXJlIGZyb20gRGlhZ0JpZ0RlY2ltYWwKK2Rkcm1uMzAxIHJlbWFpbmRlcm5lYXIgICAxICAgIDMgICAgIC0+ICAxCitkZHJtbjMwMiByZW1haW5kZXJuZWFyICAgNSAgICA1ICAgICAtPiAgMAorZGRybW4zMDMgcmVtYWluZGVybmVhciAgIDEzICAgMTAgICAgLT4gIDMKK2Rkcm1uMzA0IHJlbWFpbmRlcm5lYXIgICAxMyAgIDUwICAgIC0+ICAxMworZGRybW4zMDUgcmVtYWluZGVybmVhciAgIDEzICAgMTAwICAgLT4gIDEzCitkZHJtbjMwNiByZW1haW5kZXJuZWFyICAgMTMgICAxMDAwICAtPiAgMTMKK2Rkcm1uMzA3IHJlbWFpbmRlcm5lYXIgICAuMTMgICAgMSAgIC0+ICAwLjEzCitkZHJtbjMwOCByZW1haW5kZXJuZWFyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMKK2Rkcm1uMzA5IHJlbWFpbmRlcm5lYXIgICAwLjEwMzMgMSAgIC0+ICAwLjEwMzMKK2Rkcm1uMzEwIHJlbWFpbmRlcm5lYXIgICAxLjAzMyAgMSAgIC0+ICAwLjAzMworZGRybW4zMTEgcmVtYWluZGVybmVhciAgIDEwLjMzICAxICAgLT4gIDAuMzMKK2Rkcm1uMzEyIHJlbWFpbmRlcm5lYXIgICAxMC4zMyAxMCAgIC0+ICAwLjMzCitkZHJtbjMxMyByZW1haW5kZXJuZWFyICAgMTAzLjMgIDEgICAtPiAgMC4zCitkZHJtbjMxNCByZW1haW5kZXJuZWFyICAgMTMzICAgMTAgICAtPiAgMworZGRybW4zMTUgcmVtYWluZGVybmVhciAgIDEwMzMgIDEwICAgLT4gIDMKK2Rkcm1uMzE2IHJlbWFpbmRlcm5lYXIgICAxMDMzICA1MCAgIC0+IC0xNworZGRybW4zMTcgcmVtYWluZGVybmVhciAgIDEwMS4wICAzICAgLT4gLTEuMAorZGRybW4zMTggcmVtYWluZGVybmVhciAgIDEwMi4wICAzICAgLT4gIDAuMAorZGRybW4zMTkgcmVtYWluZGVybmVhciAgIDEwMy4wICAzICAgLT4gIDEuMAorZGRybW4zMjAgcmVtYWluZGVybmVhciAgIDIuNDAgICAxICAgLT4gIDAuNDAKK2Rkcm1uMzIxIHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgMSAgIC0+ICAwLjQwMAorZGRybW4zMjIgcmVtYWluZGVybmVhciAgIDIuNCAgICAxICAgLT4gIDAuNAorZGRybW4zMjMgcmVtYWluZGVybmVhciAgIDIuNCAgICAyICAgLT4gIDAuNAorZGRybW4zMjQgcmVtYWluZGVybmVhciAgIDIuNDAwICAyICAgLT4gIDAuNDAwCitkZHJtbjMyNSByZW1haW5kZXJuZWFyICAgMSAgIDAuMyAgICAtPiAgMC4xCitkZHJtbjMyNiByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAgICAtPiAgMC4xMAorZGRybW4zMjcgcmVtYWluZGVybmVhciAgIDEgICAwLjMwMCAgLT4gIDAuMTAwCitkZHJtbjMyOCByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAwMCAtPiAgMC4xMDAwCitkZHJtbjMyOSByZW1haW5kZXJuZWFyICAgMS4wICAgIDAuMyAtPiAgMC4xCitkZHJtbjMzMCByZW1haW5kZXJuZWFyICAgMS4wMCAgIDAuMyAtPiAgMC4xMAorZGRybW4zMzEgcmVtYWluZGVybmVhciAgIDEuMDAwICAwLjMgLT4gIDAuMTAwCitkZHJtbjMzMiByZW1haW5kZXJuZWFyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwCitkZHJtbjMzMyByZW1haW5kZXJuZWFyICAgMC41ICAyICAgICAtPiAgMC41CitkZHJtbjMzNCByZW1haW5kZXJuZWFyICAgMC41ICAyLjEgICAtPiAgMC41CitkZHJtbjMzNSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MAorZGRybW4zMzYgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwCitkZHJtbjMzNyByZW1haW5kZXJuZWFyICAgMC41MCAyICAgICAtPiAgMC41MAorZGRybW4zMzggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK2Rkcm1uMzM5IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMAorCitkZHJtbjM0MCByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAxICAgIC0+ICAtMUUtNworZGRybW4zNDEgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDEgICAgLT4gIC0xRS04CitkZHJtbjM0MiByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDEgICAgLT4gIC0xRS05CitkZHJtbjM0MyByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDAxICAgIC0+ICAtMUUtMTAKK2Rkcm1uMzQ0IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMDAxICAgIC0+ICAtMUUtMTEKK2Rkcm1uMzQ1IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTkgICAgLT4gIDFFLTcKK2Rkcm1uMzQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5ICAgIC0+ICAxRS04CitkZHJtbjM0NyByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTkgICAgLT4gIDFFLTkKK2Rkcm1uMzQ4IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTkgICAgLT4gIDFFLTEwCitkZHJtbjM0OSByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5OSAgICAtPiAgMUUtMTEKK2Rkcm1uMzUwIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5OSAgICAtPiAgMUUtMTIKKworZGRybW4zNTEgcmVtYWluZGVybmVhciAgIDAuMDMgIDcgIC0+ICAwLjAzCitkZHJtbjM1MiByZW1haW5kZXJuZWFyICAgNSAgIDIgICAgLT4gIDEKK2Rkcm1uMzUzIHJlbWFpbmRlcm5lYXIgICA0LjEgICAyICAgIC0+ICAwLjEKK2Rkcm1uMzU0IHJlbWFpbmRlcm5lYXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQorZGRybW4zNTUgcmVtYWluZGVybmVhciAgIDQuMDAxICAgMiAgICAtPiAgMC4wMDEKK2Rkcm1uMzU2IHJlbWFpbmRlcm5lYXIgICA0LjAwMDEgICAyICAgIC0+ICAwLjAwMDEKK2Rkcm1uMzU3IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQorZGRybW4zNTggcmVtYWluZGVybmVhciAgIDQuMDAwMDAxICAgMiAgICAtPiAgMC4wMDAwMDEKK2Rkcm1uMzU5IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAwMDEgICAyICAgIC0+ICAxRS03CisKK2Rkcm1uMzYwIHJlbWFpbmRlcm5lYXIgICAxLjIgICAwLjczNDUgLT4gLTAuMjY5MAorZGRybW4zNjEgcmVtYWluZGVybmVhciAgIDAuOCAgIDEyICAgICAtPiAgMC44CitkZHJtbjM2MiByZW1haW5kZXJuZWFyICAgMC44ICAgMC4yICAgIC0+ICAwLjAKK2Rkcm1uMzYzIHJlbWFpbmRlcm5lYXIgICAwLjggICAwLjMgICAgLT4gLTAuMQorZGRybW4zNjQgcmVtYWluZGVybmVhciAgIDAuODAwICAgMTIgICAtPiAgMC44MDAKK2Rkcm1uMzY1IHJlbWFpbmRlcm5lYXIgICAwLjgwMCAgIDEuNyAgLT4gIDAuODAwCitkZHJtbjM2NiByZW1haW5kZXJuZWFyICAgMi40MDAgICAyICAgIC0+ICAwLjQwMAorCistLSByb3VuZCB0byBldmVuCitkZHJtbjM3MSByZW1haW5kZXJuZWFyICAgMTIxICAgICAyICAgIC0+ICAxCitkZHJtbjM3MiByZW1haW5kZXJuZWFyICAgMTIyICAgICAyICAgIC0+ICAwCitkZHJtbjM3MyByZW1haW5kZXJuZWFyICAgMTIzICAgICAyICAgIC0+IC0xCitkZHJtbjM3NCByZW1haW5kZXJuZWFyICAgMTI0ICAgICAyICAgIC0+ICAwCitkZHJtbjM3NSByZW1haW5kZXJuZWFyICAgMTI1ICAgICAyICAgIC0+ICAxCitkZHJtbjM3NiByZW1haW5kZXJuZWFyICAgMTI2ICAgICAyICAgIC0+ICAwCitkZHJtbjM3NyByZW1haW5kZXJuZWFyICAgMTI3ICAgICAyICAgIC0+IC0xCisKK2Rkcm1uMzgxIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEgICAgICAgICAtPiAgMAorZGRybW4zODIgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDAxICAgIC0+IC0wLjIzNDQKK2Rkcm1uMzgzIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDAxICAgICAtPiAtMC4zMzMKK2Rkcm1uMzg0IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDEgICAgICAtPiAtMC4yMworZGRybW4zODUgcmVtYWluZGVybmVhciAxMjM0NSAgMS4xICAgICAgIC0+IC0wLjMKK2Rkcm1uMzg2IHJlbWFpbmRlcm5lYXIgMTIzNTUgIDQgICAgICAgICAtPiAtMQorZGRybW4zODcgcmVtYWluZGVybmVhciAxMjM0NSAgNCAgICAgICAgIC0+ICAxCitkZHJtbjM4OCByZW1haW5kZXJuZWFyIDEyMzU1ICA0LjAwMDEgICAgLT4gLTEuMzA4OQorZGRybW4zODkgcmVtYWluZGVybmVhciAxMjM0NSAgNC4wMDAxICAgIC0+ICAwLjY5MTQKK2Rkcm1uMzkwIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOSAgICAgICAtPiAgMS45CitkZHJtbjM5MSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0Ljk5ICAgICAgLT4gLTAuMjYKK2Rkcm1uMzkyIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTk5ICAgICAtPiAgMi40NjkKK2Rkcm1uMzkzIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTk5OSAgICAtPiAgMC4yNDY5CitkZHJtbjM5NCByZW1haW5kZXJuZWFyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDAKK2Rkcm1uMzk1IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDAwMSAgICAtPiAtMC4yNDY5CitkZHJtbjM5NiByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAwMSAgICAgLT4gLTIuNDY5CitkZHJtbjM5NyByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAxICAgICAgLT4gIDAuMzYKK2Rkcm1uMzk4IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMSAgICAgICAtPiAtMi4xCisKKy0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzCitkZHJtbjQwMSByZW1haW5kZXJuZWFyICAgMC40ICAgICAgICAgMSAgIC0+ICAwLjQKK2Rkcm1uNDAyIHJlbWFpbmRlcm5lYXIgICAwLjQ1ICAgICAgICAxICAgLT4gIDAuNDUKK2Rkcm1uNDAzIHJlbWFpbmRlcm5lYXIgICAwLjQ1NSAgICAgICAxICAgLT4gIDAuNDU1CitkZHJtbjQwNCByZW1haW5kZXJuZWFyICAgMC40NTU1ICAgICAgMSAgIC0+ICAwLjQ1NTUKK2Rkcm1uNDA1IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1ICAgICAxICAgLT4gIDAuNDU1NTUKK2Rkcm1uNDA2IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NSAgICAxICAgLT4gIDAuNDU1NTU1CitkZHJtbjQwNyByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1ICAgMSAgIC0+ICAwLjQ1NTU1NTUKK2Rkcm1uNDA4IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1ICAxICAgLT4gIDAuNDU1NTU1NTUKK2Rkcm1uNDA5IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1NSAxICAgLT4gIDAuNDU1NTU1NTU1CistLSB3aXRoIHNwaWxsLi4uIFs0MTIgZXhlcmNpc2VzIHN0aWNrdGFiIGxvb3BdCitkZHJtbjQxMSByZW1haW5kZXJuZWFyICAgMC41ICAgICAgICAgMSAgIC0+ICAwLjUKK2Rkcm1uNDEyIHJlbWFpbmRlcm5lYXIgICAwLjU1ICAgICAgICAxICAgLT4gLTAuNDUKK2Rkcm1uNDEzIHJlbWFpbmRlcm5lYXIgICAwLjU1NSAgICAgICAxICAgLT4gLTAuNDQ1CitkZHJtbjQxNCByZW1haW5kZXJuZWFyICAgMC41NTU1ICAgICAgMSAgIC0+IC0wLjQ0NDUKK2Rkcm1uNDE1IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1ICAgICAxICAgLT4gLTAuNDQ0NDUKK2Rkcm1uNDE2IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NSAgICAxICAgLT4gLTAuNDQ0NDQ1CitkZHJtbjQxNyByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1ICAgMSAgIC0+IC0wLjQ0NDQ0NDUKK2Rkcm1uNDE4IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTU1ICAxICAgLT4gLTAuNDQ0NDQ0NDUKK2Rkcm1uNDE5IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTU1NSAxICAgLT4gLTAuNDQ0NDQ0NDQ1CisKKy0tIGZvbGRkb3ducworZGRybW40MjEgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgICAgICAxICAtPiAgIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkZHJtbjQyMiByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAxRSszODMgIC0+ICAgMEUrMzY5IENsYW1wZWQKK2Rkcm1uNDIzIHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDJFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZAorZGRybW40MjQgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgM0UrMzgzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCitkZHJtbjQyNSByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA0RSszODMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2Rkcm1uNDI2IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDVFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZAorZGRybW40MjcgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgNkUrMzgzICAtPiAgLTIuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCitkZHJtbjQyOCByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA3RSszODMgIC0+ICAgMy4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKK2Rkcm1uNDI5IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDhFKzM4MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAorZGRybW40MzAgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgOUUrMzgzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCistLSB0aW5pZXMKK2Rkcm1uNDMxIHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDFFLTM5OCAgLT4gICAwRS0zOTgKK2Rkcm1uNDMyIHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDJFLTM5OCAgLT4gICAwRS0zOTgKK2Rkcm1uNDMzIHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDNFLTM5OCAgLT4gICAxRS0zOTggU3Vibm9ybWFsCitkZHJtbjQzNCByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA0RS0zOTggIC0+ICAgMkUtMzk4IFN1Ym5vcm1hbAorZGRybW40MzUgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgNUUtMzk4ICAtPiAgIDBFLTM5OAorZGRybW40MzYgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgNkUtMzk4ICAtPiAgLTJFLTM5OCBTdWJub3JtYWwKK2Rkcm1uNDM3IHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDdFLTM5OCAgLT4gICAzRS0zOTggU3Vibm9ybWFsCitkZHJtbjQzOCByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA4RS0zOTggIC0+ICAgMkUtMzk4IFN1Ym5vcm1hbAorZGRybW40MzkgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgOUUtMzk4ICAtPiAgIDFFLTM5OCBTdWJub3JtYWwKK2Rkcm1uNDQwIHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgMTBFLTM5OCAgLT4gICAwRS0zOTgKK2Rkcm1uNDQxIHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgMTFFLTM5OCAgLT4gIC0xRS0zOTggU3Vibm9ybWFsCitkZHJtbjQ0MiByZW1haW5kZXJuZWFyIDEwMEUtMzk3IDExRS0zOTggIC0+ICAtMUUtMzk4IFN1Ym5vcm1hbAorZGRybW40NDMgcmVtYWluZGVybmVhciAxMDBFLTM5NyAyMEUtMzk4ICAtPiAgIDBFLTM5OAorZGRybW40NDQgcmVtYWluZGVybmVhciAxMDBFLTM5NyAyMUUtMzk4ICAtPiAgLThFLTM5OCBTdWJub3JtYWwKK2Rkcm1uNDQ1IHJlbWFpbmRlcm5lYXIgMTAwRS0zOTcgMzBFLTM5OCAgLT4gMS4wRS0zOTcgU3Vibm9ybWFsCisKKy0tIHplcm8gc2lnbnMKK2Rkcm1uNjUwIHJlbWFpbmRlcm5lYXIgIDEgIDEgLT4gIDAKK2Rkcm1uNjUxIHJlbWFpbmRlcm5lYXIgLTEgIDEgLT4gLTAKK2Rkcm1uNjUyIHJlbWFpbmRlcm5lYXIgIDEgLTEgLT4gIDAKK2Rkcm1uNjUzIHJlbWFpbmRlcm5lYXIgLTEgLTEgLT4gLTAKK2Rkcm1uNjU0IHJlbWFpbmRlcm5lYXIgIDAgIDEgLT4gIDAKK2Rkcm1uNjU1IHJlbWFpbmRlcm5lYXIgLTAgIDEgLT4gLTAKK2Rkcm1uNjU2IHJlbWFpbmRlcm5lYXIgIDAgLTEgLT4gIDAKK2Rkcm1uNjU3IHJlbWFpbmRlcm5lYXIgLTAgLTEgLT4gLTAKK2Rkcm1uNjU4IHJlbWFpbmRlcm5lYXIgIDAuMDAgIDEgIC0+ICAwLjAwCitkZHJtbjY1OSByZW1haW5kZXJuZWFyIC0wLjAwICAxICAtPiAtMC4wMAorCistLSBTcGVjaWFscworZGRybW42ODAgcmVtYWluZGVybmVhciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODEgcmVtYWluZGVybmVhciAgSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODIgcmVtYWluZGVybmVhciAgSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODMgcmVtYWluZGVybmVhciAgSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODQgcmVtYWluZGVybmVhciAgSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODUgcmVtYWluZGVybmVhciAgSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODYgcmVtYWluZGVybmVhciAgSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODcgcmVtYWluZGVybmVhciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW42ODggcmVtYWluZGVybmVhciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2Rkcm1uNjg5IHJlbWFpbmRlcm5lYXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNjkxIHJlbWFpbmRlcm5lYXIgLTEgICAgIEluZiAgIC0+IC0xCitkZHJtbjY5MiByZW1haW5kZXJuZWFyICAwICAgICBJbmYgICAtPiAgMAorZGRybW42OTMgcmVtYWluZGVybmVhciAtMCAgICAgSW5mICAgLT4gLTAKK2Rkcm1uNjk0IHJlbWFpbmRlcm5lYXIgIDEgICAgIEluZiAgIC0+ICAxCitkZHJtbjY5NSByZW1haW5kZXJuZWFyICAxMDAwICBJbmYgICAtPiAgMTAwMAorZGRybW42OTYgcmVtYWluZGVybmVhciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZHJtbjcwMCByZW1haW5kZXJuZWFyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwMSByZW1haW5kZXJuZWFyIC1JbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwMiByZW1haW5kZXJuZWFyIC1JbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwMyByZW1haW5kZXJuZWFyIC1JbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwNCByZW1haW5kZXJuZWFyIC1JbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwNSByZW1haW5kZXJuZWFyIC1JbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwNiByZW1haW5kZXJuZWFyIC1JbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwNyByZW1haW5kZXJuZWFyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwOCByZW1haW5kZXJuZWFyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjcwOSByZW1haW5kZXJuZWFyIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZGRybW43MTAgcmVtYWluZGVybmVhciAtMSAgICAtSW5mICAgLT4gLTEKK2Rkcm1uNzExIHJlbWFpbmRlcm5lYXIgLTAgICAgLUluZiAgIC0+IC0wCitkZHJtbjcxMiByZW1haW5kZXJuZWFyICAwICAgIC1JbmYgICAtPiAgMAorZGRybW43MTMgcmVtYWluZGVybmVhciAgMSAgICAtSW5mICAgLT4gIDEKK2Rkcm1uNzE0IHJlbWFpbmRlcm5lYXIgIDEwMDAgLUluZiAgIC0+ICAxMDAwCitkZHJtbjcxNSByZW1haW5kZXJuZWFyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rkcm1uNzIxIHJlbWFpbmRlcm5lYXIgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2Rkcm1uNzIyIHJlbWFpbmRlcm5lYXIgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2Rkcm1uNzIzIHJlbWFpbmRlcm5lYXIgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2Rkcm1uNzI0IHJlbWFpbmRlcm5lYXIgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2Rkcm1uNzI1IHJlbWFpbmRlcm5lYXIgLU5hTiAgMCAgICAgIC0+IC1OYU4KK2Rkcm1uNzI2IHJlbWFpbmRlcm5lYXIgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2Rkcm1uNzI3IHJlbWFpbmRlcm5lYXIgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2Rkcm1uNzI4IHJlbWFpbmRlcm5lYXIgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2Rkcm1uNzI5IHJlbWFpbmRlcm5lYXIgIE5hTiAtTmFOICAgIC0+ICBOYU4KK2Rkcm1uNzMwIHJlbWFpbmRlcm5lYXIgLUluZiAgTmFOICAgIC0+ICBOYU4KK2Rkcm1uNzMxIHJlbWFpbmRlcm5lYXIgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2Rkcm1uNzMyIHJlbWFpbmRlcm5lYXIgLTEgICAgTmFOICAgIC0+ICBOYU4KK2Rkcm1uNzMzIHJlbWFpbmRlcm5lYXIgLTAgICAtTmFOICAgIC0+IC1OYU4KK2Rkcm1uNzM0IHJlbWFpbmRlcm5lYXIgIDAgICAgTmFOICAgIC0+ICBOYU4KK2Rkcm1uNzM1IHJlbWFpbmRlcm5lYXIgIDEgICAtTmFOICAgIC0+IC1OYU4KK2Rkcm1uNzM2IHJlbWFpbmRlcm5lYXIgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2Rkcm1uNzM3IHJlbWFpbmRlcm5lYXIgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZGRybW43NDEgcmVtYWluZGVybmVhciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzQyIHJlbWFpbmRlcm5lYXIgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc0MyByZW1haW5kZXJuZWFyIC1zTmFOIC0xICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NDQgcmVtYWluZGVybmVhciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzQ1IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc0NiByZW1haW5kZXJuZWFyICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NDcgcmVtYWluZGVybmVhciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzQ5IHJlbWFpbmRlcm5lYXIgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc1MCByZW1haW5kZXJuZWFyICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NTEgcmVtYWluZGVybmVhciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzUyIHJlbWFpbmRlcm5lYXIgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc1MyByZW1haW5kZXJuZWFyIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NTQgcmVtYWluZGVybmVhciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzU1IHJlbWFpbmRlcm5lYXIgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc1NiByZW1haW5kZXJuZWFyICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NTcgcmVtYWluZGVybmVhciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm1uNzU4IHJlbWFpbmRlcm5lYXIgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHJtbjc1OSByZW1haW5kZXJuZWFyICBJbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdpbmcgTmFOcworZGRybW43NjAgcmVtYWluZGVybmVhciAgTmFOMSAgIE5hTjcgICAtPiAgTmFOMQorZGRybW43NjEgcmVtYWluZGVybmVhciBzTmFOMiAgIE5hTjggICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NjIgcmVtYWluZGVybmVhciAgTmFOMyAgc05hTjkgICAtPiAgTmFOOSBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NjMgcmVtYWluZGVybmVhciBzTmFONCAgc05hTjEwICAtPiAgTmFONCBJbnZhbGlkX29wZXJhdGlvbgorZGRybW43NjQgcmVtYWluZGVybmVhciAgICAxNSAgIE5hTjExICAtPiAgTmFOMTEKK2Rkcm1uNzY1IHJlbWFpbmRlcm5lYXIgIE5hTjYgICBOYU4xMiAgLT4gIE5hTjYKK2Rkcm1uNzY2IHJlbWFpbmRlcm5lYXIgIEluZiAgICBOYU4xMyAgLT4gIE5hTjEzCitkZHJtbjc2NyByZW1haW5kZXJuZWFyICBOYU4xNCAgLUluZiAgIC0+ICBOYU4xNAorZGRybW43NjggcmVtYWluZGVybmVhciAgICAwICAgIE5hTjE1ICAtPiAgTmFOMTUKK2Rkcm1uNzY5IHJlbWFpbmRlcm5lYXIgIE5hTjE2ICAgLTAgICAgLT4gIE5hTjE2CisKKy0tIGVkZ2UgY2FzZXMgb2YgaW1wb3NzaWJsZQorZGRybW43NzAgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDEwICAgIC0+IC00CitkZHJtbjc3MSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEgICAgLT4gIDAKK2Rkcm1uNzcyICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2Rkcm1uNzczICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworZGRybW44MDEgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwMCAxMDAgLT4gMAorZGRybW44MDIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAwICAgLT4gMQorZGRybW44MDMgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwICAxMCAgLT4gMAorZGRybW44MDQgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAgICAgLT4gMQorZGRybW44MDUgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwICAxMCAgLT4gMAorZGRybW44MDYgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAgICAgLT4gMQorZGRybW44MDcgcmVtYWluZGVybmVhciAxMjM0NTY3ODkxICAxMCAgLT4gMQorZGRybW44MDggcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZGRybW44MDkgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwMSAxMDAgLT4gMQorZGRybW44MTAgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAxICAgLT4gMQorZGRybW44MTEgcmVtYWluZGVybmVhciAxMjM0NTY3ODk2ICAxMCAgLT4gLTQKK2Rkcm1uODEyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworZGRybW44MjEgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwMCAxMDAgLT4gMAorZGRybW44MjIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAwICAgLT4gMQorZGRybW44MjMgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwICAxMCAgLT4gMAorZGRybW44MjQgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAgICAgLT4gMQorZGRybW44MjUgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwICAxMCAgLT4gMAorZGRybW44MjYgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAgICAgLT4gMQorZGRybW44MjcgcmVtYWluZGVybmVhciAxMjM0NTY3ODkxICAxMCAgLT4gMQorZGRybW44MjggcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTEgICAgLT4gMQorZGRybW44MjkgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwMSAxMDAgLT4gMQorZGRybW44MzAgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAxICAgLT4gMQorZGRybW44MzEgcmVtYWluZGVybmVhciAxMjM0NTY3ODk2ICAxMCAgLT4gLTQKK2Rkcm1uODMyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworLS0gZnJvbSBkaXZpZGVpbnQKK2Rkcm1uODQwIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC4wICAgMSAgLT4gIDAuMAorZGRybW44NDEgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjQgICAxICAtPiAgMC40CitkZHJtbjg0MiByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuNSAgIDEgIC0+ICAwLjUKK2Rkcm1uODQzIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC45ICAgMSAgLT4gLTAuMQorZGRybW44NDQgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjk5OSAxICAtPiAtMC4wMDEKK2Rkcm1uODUwIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMyAgICAgNSAgLT4gLTIKK2Rkcm1uODUxIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAzICAgICAgNSAgLT4gLTIKK2Rkcm1uODUyIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDMgICAgICAgNSAgLT4gLTIKK2Rkcm1uODUzIHJlbWFpbmRlcm5lYXIgIDEwMDAwMyAgICAgICAgNSAgLT4gLTIKK2Rkcm1uODU0IHJlbWFpbmRlcm5lYXIgIDEwMDAzICAgICAgICAgNSAgLT4gLTIKK2Rkcm1uODU1IHJlbWFpbmRlcm5lYXIgIDEwMDMgICAgICAgICAgNSAgLT4gLTIKK2Rkcm1uODU2IHJlbWFpbmRlcm5lYXIgIDEwMyAgICAgICAgICAgNSAgLT4gLTIKK2Rkcm1uODU3IHJlbWFpbmRlcm5lYXIgIDEzICAgICAgICAgICAgNSAgLT4gLTIKK2Rkcm1uODU4IHJlbWFpbmRlcm5lYXIgIDEgICAgICAgICAgICAgNSAgLT4gIDEKKworLS0gVmxhZGltaXIncyBjYXNlcyAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2Rkcm1uODYwIHJlbWFpbmRlcm5lYXIgMTIzLjBlMSAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkZHJtbjg2MSByZW1haW5kZXJuZWFyIDEyMzAgICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRybW44NjIgcmVtYWluZGVybmVhciAxMi4zZTIgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2Rkcm1uODYzIHJlbWFpbmRlcm5lYXIgMS4yM2UzICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkZHJtbjg2NCByZW1haW5kZXJuZWFyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZGRybW44NzAgcmVtYWluZGVybmVhciAxMjNlMSAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODcxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDEwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg3MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgMTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44NzMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAxMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODc0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDEwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg3NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgMTAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44NzYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAxMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODc3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg3OCByZW1haW5kZXJuZWFyIDEyMzAgICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAorZGRybW44NzkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDEwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODgwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgMTAwMDAwMCAtPiAxMjMwCitkZHJtbjg4MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAxMDAwMDAgLT4gMTIzMAorZGRybW44ODIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDEwMDAwIC0+IDEyMzAKK2Rkcm1uODgzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgMTAwMCAtPiAgMjMwCitkZHJtbjg4NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAxMDAgLT4gICAzMAorZGRybW44ODUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDEwIC0+ICAgIDAKK2Rkcm1uODg2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMSAtPiAgICAwCisKK2Rkcm1uODkwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgMjAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg5MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAyMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44OTIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDIwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODkzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgMjAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg5NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAyMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW44OTUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDIwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uODk2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgMjAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjg5NyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAyMDAwMDAwMDAgLT4gMTIzMAorZGRybW44OTkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDIwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTAwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgMjAwMDAwMCAtPiAxMjMwCitkZHJtbjkwMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAyMDAwMDAgLT4gMTIzMAorZGRybW45MDIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDIwMDAwIC0+IDEyMzAKK2Rkcm1uOTAzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgMjAwMCAtPiAtNzcwCitkZHJtbjkwNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAyMDAgLT4gICAzMAorZGRybW45MDUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDIwIC0+ICAtMTAKK2Rkcm1uOTA2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMiAtPiAgICAwCisKK2Rkcm1uOTEwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgNTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkxMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICA1MDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MTIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDUwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTEzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgNTAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkxNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICA1MDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MTUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDUwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTE2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgNTAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkxNyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICA1MDAwMDAwMDAgLT4gMTIzMAorZGRybW45MTkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDUwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTIwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgNTAwMDAwMCAtPiAxMjMwCitkZHJtbjkyMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICA1MDAwMDAgLT4gMTIzMAorZGRybW45MjIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDUwMDAwIC0+IDEyMzAKK2Rkcm1uOTIzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgNTAwMCAtPiAxMjMwCitkZHJtbjkyNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICA1MDAgLT4gIDIzMAorZGRybW45MjUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDUwIC0+ICAtMjAKK2Rkcm1uOTI2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgNSAtPiAgICAwCisKK2Rkcm1uOTMwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgOTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkzMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICA5MDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MzIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDkwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTMzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgOTAwMDAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkzNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICA5MDAwMDAwMDAwMDAgLT4gMTIzMAorZGRybW45MzUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDkwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTM2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgOTAwMDAwMDAwMCAtPiAxMjMwCitkZHJtbjkzNyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICA5MDAwMDAwMDAgLT4gMTIzMAorZGRybW45MzkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDkwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTQwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgOTAwMDAwMCAtPiAxMjMwCitkZHJtbjk0MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICA5MDAwMDAgLT4gMTIzMAorZGRybW45NDIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDkwMDAwIC0+IDEyMzAKK2Rkcm1uOTQzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgOTAwMCAtPiAxMjMwCitkZHJtbjk0NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICA5MDAgLT4gIDMzMAorZGRybW45NDUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDkwIC0+ICAtMzAKK2Rkcm1uOTQ2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgOSAtPiAgIC0zCisKK2Rkcm1uOTUwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rkcm1uOTYxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAyOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTYyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAzOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTYzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICA0OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTY0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA1OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTY1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA2OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTY2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA3OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTY3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA4OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTY4IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA5OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2Rkcm1uOTY5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA5ODc2NTQzMjEwOTg3NjU0IC0+IDEyMzAKKworZGRybW45ODAgcmVtYWluZGVybmVhciAxMjNlMSAxMDAwRTI5OSAtPiAxLjIzRSszICAtLSAxMjNFKzEgaW50ZXJuYWxseQorCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQorZGRybW4xMDUxIHJlbWFpbmRlcm5lYXIgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRybW4xMDUyIHJlbWFpbmRlcm5lYXIgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRybW4xMDUzIHJlbWFpbmRlcm5lYXIgLTFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRybW4xMDU0IHJlbWFpbmRlcm5lYXIgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZGRybW4xMDU1IHJlbWFpbmRlcm5lYXIgIDFlLTI3NyAgMWUrMzExIC0+ICAxRS0yNzcKK2Rkcm1uMTA1NiByZW1haW5kZXJuZWFyICAxZS0yNzcgLTFlKzMxMSAtPiAgMUUtMjc3CitkZHJtbjEwNTcgcmVtYWluZGVybmVhciAtMWUtMjc3ICAxZSszMTEgLT4gLTFFLTI3NworZGRybW4xMDU4IHJlbWFpbmRlcm5lYXIgLTFlLTI3NyAtMWUrMzExIC0+IC0xRS0yNzcKKworLS0gZGVzdHJ1Y3RpdmUgc3VidHJhY3QKK2Rkcm1uMTEwMCByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAxLjAwMDAwMDAwMDAwMDAwMSAgLT4gIC0wLjIzNDU2Nzg5MDEyMzQ1NQorZGRybW4xMTAxIHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAxLjAwMDAwMDAwMDAwMDAxICAtPiAgIC0wLjM0NTY3ODkwMTIzNDQ0CitkZHJtbjExMDIgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAxLjAwMDAwMDAwMDAwMDEgIC0+ICAgIC0wLjQ1Njc4OTAxMjMzMzMKK2Rkcm1uMTEwMyByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU1ICA0LjAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjMwODY0MTk3MjUzMDg2NAorZGRybW4xMTA0IHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDQuMDAwMDAwMDAwMDAwMDAxICAtPiAgLTAuMzA4NjQxOTcyNTMwODY0CitkZHJtbjExMTUgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICA0Ljk5OTk5OTk5OTk5OTkgIC0+ICAgICAwLjY5MTM1NzgwMjQ2OTYKK2Rkcm1uMTExNiByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgNC45OTk5OTk5OTk5OTk5OSAgLT4gICAtMS41MzA4NjQyMTk3NTMwOAorZGRybW4xMTE3IHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDQuOTk5OTk5OTk5OTk5OTk5ICAtPiAgIDEuMjQ2OTEzNTc4MDI0NjkxCitkZHJtbjExMTggcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAgMC43NTMwODY0MjE5NzUzMDkKK2Rkcm1uMTExOSByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgNS4wMDAwMDAwMDAwMDAwMSAgLT4gICAtMS40NjkxMzU3ODAyNDY5MQorZGRybW4xMTEwIHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAgNS4wMDAwMDAwMDAwMDAxICAtPiAgICAgMS4zMDg2NDIxOTc1MzE0CisKKy0tIE51bGwgdGVzdHMKK2Rkcm1uMTAwMCByZW1haW5kZXJuZWFyIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRybW4xMDAxIHJlbWFpbmRlcm5lYXIgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSb3RhdGUuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSb3RhdGUuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjBmZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJvdGF0ZS5kZWNUZXN0CkBAIC0wLDAgKzEsMjYyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkUm90YXRlLmRlY1Rlc3QgLS0gcm90YXRlIGEgZGVjRG91YmxlIGNvZWZmaWNpZW50IGxlZnQgb3IgcmlnaHQgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZGRyb3QwMDEgcm90YXRlICAgICAgICAgICAgICAgICAwICAgIDAgIC0+ICAwCitkZHJvdDAwMiByb3RhdGUgICAgICAgICAgICAgICAgIDAgICAgMiAgLT4gIDAKK2Rkcm90MDAzIHJvdGF0ZSAgICAgICAgICAgICAgICAgMSAgICAyICAtPiAgMTAwCitkZHJvdDAwNCByb3RhdGUgICAgICAgICAgICAgICAgIDEgICAxNSAgLT4gIDEwMDAwMDAwMDAwMDAwMDAKK2Rkcm90MDA1IHJvdGF0ZSAgICAgICAgICAgICAgICAgMSAgIDE2ICAtPiAgMQorZGRyb3QwMDYgcm90YXRlICAgICAgICAgICAgICAgICAxICAgLTEgIC0+ICAxMDAwMDAwMDAwMDAwMDAwCitkZHJvdDAwNyByb3RhdGUgICAgICAgICAgICAgICAgIDAgICAtMiAgLT4gIDAKK2Rkcm90MDA4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xICAtPiAgNjEyMzQ1Njc4OTAxMjM0NQorZGRyb3QwMDkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+ICAyMzQ1Njc4OTAxMjM0NTYxCitkZHJvdDAxMCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gIDEyMzQ1Njc4OTAxMjM0NTYKK2Rkcm90MDExIHJvdGF0ZSAgOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAgOTM0NTY3ODkwMTIzNDU2OQorZGRyb3QwMTIgcm90YXRlICA5OTM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+ICA5OTM0NTY3ODkwMTIzNDU2CisKKy0tIHJocyBtdXN0IGJlIGFuIGludGVnZXIKK2Rkcm90MDE1IHJvdGF0ZSAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDAxNiByb3RhdGUgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3QwMTcgcm90YXRlICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90MDE4IHJvdGF0ZSAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDAxOSByb3RhdGUgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3QwMjAgcm90YXRlICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90MDIxIHJvdGF0ZSAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDAyMiByb3RhdGUgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbgorZGRyb3QwMjUgcm90YXRlICAgICAgICAxICAgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90MDI2IHJvdGF0ZSAgICAgICAgMSAgICAtMTcgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDAyNyByb3RhdGUgICAgICAgIDEgICAgIDE3ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3QwMjggcm90YXRlICAgICAgICAxICAgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gZnVsbCBwYXR0ZXJuCitkZHJvdDAzMCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2Rkcm90MDMxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNSAgLT4gMjM0NTY3ODkwMTIzNDU2MQorZGRyb3QwMzIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE0ICAtPiAzNDU2Nzg5MDEyMzQ1NjEyCitkZHJvdDAzMyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTMgIC0+IDQ1Njc4OTAxMjM0NTYxMjMKK2Rkcm90MDM0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMiAgLT4gNTY3ODkwMTIzNDU2MTIzNAorZGRyb3QwMzUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTExICAtPiA2Nzg5MDEyMzQ1NjEyMzQ1CitkZHJvdDAzNiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTAgIC0+IDc4OTAxMjM0NTYxMjM0NTYKK2Rkcm90MDM3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC05ICAgLT4gODkwMTIzNDU2MTIzNDU2NworZGRyb3QwMzggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTggICAtPiA5MDEyMzQ1NjEyMzQ1Njc4CitkZHJvdDAzOSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNyAgIC0+ICAxMjM0NTYxMjM0NTY3ODkKK2Rkcm90MDQwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC02ICAgLT4gMTIzNDU2MTIzNDU2Nzg5MAorZGRyb3QwNDEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTUgICAtPiAyMzQ1NjEyMzQ1Njc4OTAxCitkZHJvdDA0MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNCAgIC0+IDM0NTYxMjM0NTY3ODkwMTIKK2Rkcm90MDQzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0zICAgLT4gNDU2MTIzNDU2Nzg5MDEyMworZGRyb3QwNDQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTIgICAtPiA1NjEyMzQ1Njc4OTAxMjM0CitkZHJvdDA0NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMSAgIC0+IDYxMjM0NTY3ODkwMTIzNDUKK2Rkcm90MDQ2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorCitkZHJvdDA0NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2Rkcm90MDQ4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxICAgLT4gMjM0NTY3ODkwMTIzNDU2MQorZGRyb3QwNDkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDEyMzQ1NjEyCitkZHJvdDA1MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMyAgIC0+IDQ1Njc4OTAxMjM0NTYxMjMKK2Rkcm90MDUxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs0ICAgLT4gNTY3ODkwMTIzNDU2MTIzNAorZGRyb3QwNTIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzUgICAtPiA2Nzg5MDEyMzQ1NjEyMzQ1CitkZHJvdDA1MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNiAgIC0+IDc4OTAxMjM0NTYxMjM0NTYKK2Rkcm90MDU0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs3ICAgLT4gODkwMTIzNDU2MTIzNDU2NworZGRyb3QwNTUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzggICAtPiA5MDEyMzQ1NjEyMzQ1Njc4CitkZHJvdDA1NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArOSAgIC0+ICAxMjM0NTYxMjM0NTY3ODkKK2Rkcm90MDU3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMCAgLT4gMTIzNDU2MTIzNDU2Nzg5MAorZGRyb3QwNTggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzExICAtPiAyMzQ1NjEyMzQ1Njc4OTAxCitkZHJvdDA1OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTIgIC0+IDM0NTYxMjM0NTY3ODkwMTIKK2Rkcm90MDYwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMyAgLT4gNDU2MTIzNDU2Nzg5MDEyMworZGRyb3QwNjEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE0ICAtPiA1NjEyMzQ1Njc4OTAxMjM0CitkZHJvdDA2MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTUgIC0+IDYxMjM0NTY3ODkwMTIzNDUKK2Rkcm90MDYzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorCistLSB6ZXJvcworZGRyb3QwNzAgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFLTEwCitkZHJvdDA3MSByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUtMTAKK2Rkcm90MDcyIHJvdGF0ZSAgMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gICAwLjAwMAorZGRyb3QwNzMgcm90YXRlICAwLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgIDAuMDAwCitkZHJvdDA3NCByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUrMTAKK2Rkcm90MDc1IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRSsxMAorZGRyb3QwNzYgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFLTEwCitkZHJvdDA3NyByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUtMTAKK2Rkcm90MDc4IHJvdGF0ZSAtMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gIC0wLjAwMAorZGRyb3QwNzkgcm90YXRlIC0wLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgLTAuMDAwCitkZHJvdDA4MCByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUrMTAKK2Rkcm90MDgxIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRSsxMAorCistLSBObWF4LCBObWluLCBOdGlueQorZGRyb3QxNDEgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMSAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRyb3QxNDIgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMTUgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRyb3QxNDMgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRyb3QxNDQgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMTUgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRyb3QxNDUgcm90YXRlICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM2OAorZGRyb3QxNDYgcm90YXRlICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAtMTUgLT4gMS4wRS0zODIKK2Rkcm90MTQ3IHJvdGF0ZSAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtMzgyCitkZHJvdDE0OCByb3RhdGUgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzY4CitkZHJvdDE1MSByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQKK2Rkcm90MTUyIHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTE1IC0+IDFFLTM5OAorZGRyb3QxNTMgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gMUUtMzk4CitkZHJvdDE1NCByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQKK2Rkcm90MTU1IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IDkuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRyb3QxNTYgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gOUUtMzk4CitkZHJvdDE1NyByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiA5RS0zOTgKK2Rkcm90MTU4IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IDkuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRyb3QxNjAgcm90YXRlICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRyb3QxNjEgcm90YXRlICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAtMTUgLT4gMS4wRS0zOTcKK2Rkcm90MTYyIHJvdGF0ZSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtMzk3CitkZHJvdDE2MyByb3RhdGUgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCistLSAgbmVnYXRpdmVzCitkZHJvdDE3MSByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRyb3QxNzIgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMTUgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2Rkcm90MTczIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitkZHJvdDE3NCByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxNSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRyb3QxNzUgcm90YXRlIC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zNjgKK2Rkcm90MTc2IHJvdGF0ZSAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0xLjBFLTM4MgorZGRyb3QxNzcgcm90YXRlIC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMzgyCitkZHJvdDE3OCByb3RhdGUgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM2OAorZGRyb3QxODEgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRyb3QxODIgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gLTFFLTM5OAorZGRyb3QxODMgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gLTFFLTM5OAorZGRyb3QxODQgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gLTEuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRyb3QxODUgcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gLTkuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRyb3QxODYgcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gLTlFLTM5OAorZGRyb3QxODcgcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gLTlFLTM5OAorZGRyb3QxODggcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gLTkuMDAwMDAwMDAwMDAwMDBFLTM4NAorZGRyb3QxOTAgcm90YXRlIC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKK2Rkcm90MTkxIHJvdGF0ZSAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0xLjBFLTM5NworZGRyb3QxOTIgcm90YXRlIC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMzk3CitkZHJvdDE5MyByb3RhdGUgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworCistLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpCitkZHJvdDIwMSByb3RhdGUgICAgICAgICAgICAgICAgLTAgICAgMCAgLT4gLTAKK2Rkcm90MjAyIHJvdGF0ZSAgICAgICAgICAgICAgICAtMCAgICAyICAtPiAtMAorZGRyb3QyMDMgcm90YXRlICAgICAgICAgICAgICAgIC0xICAgIDIgIC0+IC0xMDAKK2Rkcm90MjA0IHJvdGF0ZSAgICAgICAgICAgICAgICAtMSAgIDE1ICAtPiAtMTAwMDAwMDAwMDAwMDAwMAorZGRyb3QyMDUgcm90YXRlICAgICAgICAgICAgICAgIC0xICAgMTYgIC0+IC0xCitkZHJvdDIwNiByb3RhdGUgICAgICAgICAgICAgICAgLTEgICAtMSAgLT4gLTEwMDAwMDAwMDAwMDAwMDAKK2Rkcm90MjA3IHJvdGF0ZSAgICAgICAgICAgICAgICAtMCAgIC0yICAtPiAtMAorZGRyb3QyMDggcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2ICAgLTEgIC0+IC02MTIzNDU2Nzg5MDEyMzQ1CitkZHJvdDIwOSByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gLTIzNDU2Nzg5MDEyMzQ1NjEKK2Rkcm90MjEwIHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAtMTIzNDU2Nzg5MDEyMzQ1NgorZGRyb3QyMTEgcm90YXRlIC05OTM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+IC05MzQ1Njc4OTAxMjM0NTY5CitkZHJvdDIxMiByb3RhdGUgLTk5MzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gLTk5MzQ1Njc4OTAxMjM0NTYKKworCistLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbAorZGRyb3Q3ODEgcm90YXRlIC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkKK2Rkcm90NzgyIHJvdGF0ZSAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkZHJvdDc4MyByb3RhdGUgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZGRyb3Q3ODQgcm90YXRlIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2Rkcm90Nzg1IHJvdGF0ZSAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkZHJvdDc4NiByb3RhdGUgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQorZGRyb3Q3ODcgcm90YXRlIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90Nzg4IHJvdGF0ZSAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDc4OSByb3RhdGUgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q3OTAgcm90YXRlIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90NzkxIHJvdGF0ZSAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDc5MiByb3RhdGUgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q3OTMgcm90YXRlICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90Nzk0IHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rkcm90ODAwIHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDgwMSByb3RhdGUgIEluZiAgLTggICAgIC0+IEluZmluaXR5CitkZHJvdDgwMiByb3RhdGUgIEluZiAgLTEgICAgIC0+IEluZmluaXR5CitkZHJvdDgwMyByb3RhdGUgIEluZiAgLTAgICAgIC0+IEluZmluaXR5CitkZHJvdDgwNCByb3RhdGUgIEluZiAgIDAgICAgIC0+IEluZmluaXR5CitkZHJvdDgwNSByb3RhdGUgIEluZiAgIDEgICAgIC0+IEluZmluaXR5CitkZHJvdDgwNiByb3RhdGUgIEluZiAgIDggICAgIC0+IEluZmluaXR5CitkZHJvdDgwNyByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4MDggcm90YXRlIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODA5IHJvdGF0ZSAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDgxMCByb3RhdGUgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4MTEgcm90YXRlIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODEyIHJvdGF0ZSAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDgxMyByb3RhdGUgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4MTQgcm90YXRlICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODE1IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rkcm90ODIxIHJvdGF0ZSAgTmFOIC1JbmYgICAgLT4gIE5hTgorZGRyb3Q4MjIgcm90YXRlICBOYU4gLTEwMDAgICAtPiAgTmFOCitkZHJvdDgyMyByb3RhdGUgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2Rkcm90ODI0IHJvdGF0ZSAgTmFOIC0wICAgICAgLT4gIE5hTgorZGRyb3Q4MjUgcm90YXRlICBOYU4gIDAgICAgICAtPiAgTmFOCitkZHJvdDgyNiByb3RhdGUgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2Rkcm90ODI3IHJvdGF0ZSAgTmFOICAxMDAwICAgLT4gIE5hTgorZGRyb3Q4Mjggcm90YXRlICBOYU4gIEluZiAgICAtPiAgTmFOCitkZHJvdDgyOSByb3RhdGUgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2Rkcm90ODMwIHJvdGF0ZSAtSW5mICBOYU4gICAgLT4gIE5hTgorZGRyb3Q4MzEgcm90YXRlIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkZHJvdDgzMiByb3RhdGUgLTEgICAgTmFOICAgIC0+ICBOYU4KK2Rkcm90ODMzIHJvdGF0ZSAtMCAgICBOYU4gICAgLT4gIE5hTgorZGRyb3Q4MzQgcm90YXRlICAwICAgIE5hTiAgICAtPiAgTmFOCitkZHJvdDgzNSByb3RhdGUgIDEgICAgTmFOICAgIC0+ICBOYU4KK2Rkcm90ODM2IHJvdGF0ZSAgMTAwMCBOYU4gICAgLT4gIE5hTgorZGRyb3Q4Mzcgcm90YXRlICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2Rkcm90ODQxIHJvdGF0ZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODQyIHJvdGF0ZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODQzIHJvdGF0ZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODQ0IHJvdGF0ZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODQ1IHJvdGF0ZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODQ2IHJvdGF0ZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODQ3IHJvdGF0ZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODQ4IHJvdGF0ZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODQ5IHJvdGF0ZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODUwIHJvdGF0ZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODUxIHJvdGF0ZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODUyIHJvdGF0ZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODUzIHJvdGF0ZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODU0IHJvdGF0ZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODU1IHJvdGF0ZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODU2IHJvdGF0ZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODU3IHJvdGF0ZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODU4IHJvdGF0ZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODU5IHJvdGF0ZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZGRyb3Q4NjEgcm90YXRlICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZGRyb3Q4NjIgcm90YXRlICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorZGRyb3Q4NjMgcm90YXRlICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworZGRyb3Q4NjQgcm90YXRlICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZGRyb3Q4NjUgcm90YXRlICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorZGRyb3Q4NjYgcm90YXRlIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworZGRyb3Q4Njcgcm90YXRlIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZGRyb3Q4Njggcm90YXRlICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorZGRyb3Q4Njkgcm90YXRlICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK2Rkcm90ODcxIHJvdGF0ZSAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NzIgcm90YXRlICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg3MyByb3RhdGUgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODc0IHJvdGF0ZSAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4NzUgcm90YXRlICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg3NiByb3RhdGUgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODc3IHJvdGF0ZSAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4Nzggcm90YXRlIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg3OSByb3RhdGUgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkcm90ODgwIHJvdGF0ZSAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZGRyb3Q4ODEgcm90YXRlICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg4MiByb3RhdGUgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorZGRyb3Q4ODMgcm90YXRlIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitkZHJvdDg4NCByb3RhdGUgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorZGRyb3Q4ODUgcm90YXRlICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2FtZVF1YW50dW0uZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTYW1lUXVhbnR1bS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NWIzNmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2FtZVF1YW50dW0uZGVjVGVzdApAQCAtMCwwICsxLDM4OSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFNhbWVRdWFudHVtLmRlY1Rlc3QgLS0gY2hlY2sgZGVjRG91YmxlIHF1YW50dW1zIG1hdGNoICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkZHNhbXEwMDEgc2FtZXF1YW50dW0gIDAgICAgICAwICAgICAgLT4gIDEKK2Rkc2FtcTAwMiBzYW1lcXVhbnR1bSAgMCAgICAgIDEgICAgICAtPiAgMQorZGRzYW1xMDAzIHNhbWVxdWFudHVtICAxICAgICAgMCAgICAgIC0+ICAxCitkZHNhbXEwMDQgc2FtZXF1YW50dW0gIDEgICAgICAxICAgICAgLT4gIDEKKworZGRzYW1xMDExIHNhbWVxdWFudHVtICAxMCAgICAgMUUrMSAgIC0+IDAKK2Rkc2FtcTAxMiBzYW1lcXVhbnR1bSAgMTBFKzEgIDEwRSsxICAtPiAxCitkZHNhbXEwMTMgc2FtZXF1YW50dW0gIDEwMCAgICAxMEUrMSAgLT4gMAorZGRzYW1xMDE0IHNhbWVxdWFudHVtICAxMDAgICAgMUUrMiAgIC0+IDAKK2Rkc2FtcTAxNSBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTIgICAtPiAwCitkZHNhbXEwMTYgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0xICAgLT4gMQorZGRzYW1xMDE3IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMCAgIC0+IDAKK2Rkc2FtcTAxOCBzYW1lcXVhbnR1bSAgOTk5ICAgIDk5OSAgICAtPiAxCitkZHNhbXEwMTkgc2FtZXF1YW50dW0gIDk5OUUtMSA5OS45ICAgLT4gMQorZGRzYW1xMDIwIHNhbWVxdWFudHVtICAxMTFFLTEgMjIuMiAgIC0+IDEKK2Rkc2FtcTAyMSBzYW1lcXVhbnR1bSAgMTExRS0xIDEyMzQuMiAtPiAxCisKKy0tIHplcm9zCitkZHNhbXEwMzAgc2FtZXF1YW50dW0gIDAuMCAgICAxLjEgICAgLT4gMQorZGRzYW1xMDMxIHNhbWVxdWFudHVtICAwLjAgICAgMS4xMSAgIC0+IDAKK2Rkc2FtcTAzMiBzYW1lcXVhbnR1bSAgMC4wICAgIDAgICAgICAtPiAwCitkZHNhbXEwMzMgc2FtZXF1YW50dW0gIDAuMCAgICAwLjAgICAgLT4gMQorZGRzYW1xMDM0IHNhbWVxdWFudHVtICAwLjAgICAgMC4wMCAgIC0+IDAKK2Rkc2FtcTAzNSBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzAgICAtPiAwCitkZHNhbXEwMzYgc2FtZXF1YW50dW0gIDBFKzEgICAwRSsxICAgLT4gMQorZGRzYW1xMDM3IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMiAgIC0+IDAKK2Rkc2FtcTAzOCBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE2ICAtPiAwCitkZHNhbXEwMzkgc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xNyAgLT4gMQorZGRzYW1xMDQwIHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTggIC0+IDAKK2Rkc2FtcTA0MSBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTUgLT4gMAorZGRzYW1xMDQyIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNiAtPiAxCitkZHNhbXEwNDMgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE3IC0+IDAKK2Rkc2FtcTA0NCBzYW1lcXVhbnR1bSAtMEUtMTcgIDAuMEUtMTYgLT4gMQorZGRzYW1xMDQ1IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNyAtPiAwCitkZHNhbXEwNDYgc2FtZXF1YW50dW0gIDBFLTE3IC0wLjBFLTE2IC0+IDEKK2Rkc2FtcTA0NyBzYW1lcXVhbnR1bSAtMEUtMTcgIDAuMEUtMTcgLT4gMAorZGRzYW1xMDQ4IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNiAtPiAxCitkZHNhbXEwNDkgc2FtZXF1YW50dW0gLTBFLTE3IC0wLjBFLTE3IC0+IDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Rkc2FtcTA1MSBzYW1lcXVhbnR1bSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAxCitkZHNhbXEwNTIgc2FtZXF1YW50dW0gIDFFLTM4MyAgICAgICAgICAgICAxRS0zODMgICAgICAgICAgIC0+IDEKK2Rkc2FtcTA1MyBzYW1lcXVhbnR1bSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxCitkZHNhbXEwNTQgc2FtZXF1YW50dW0gIDFFLTM5OCAgICAgICAgICAgICAxRS0zOTggICAgICAgICAgIC0+IDEKK2Rkc2FtcTA1NSBzYW1lcXVhbnR1bSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAxCitkZHNhbXEwNTYgc2FtZXF1YW50dW0gIDFFLTM4MyAgICAgICAgICAgICAxRS0zODMgICAgICAgICAgIC0+IDEKK2Rkc2FtcTA1NyBzYW1lcXVhbnR1bSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxCitkZHNhbXEwNTggc2FtZXF1YW50dW0gIDFFLTM5OCAgICAgICAgICAgICAxRS0zOTggICAgICAgICAgIC0+IDEKKworZGRzYW1xMDYxIHNhbWVxdWFudHVtICAtMUUtMzk4ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAxCitkZHNhbXEwNjIgc2FtZXF1YW50dW0gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgLT4gMQorZGRzYW1xMDYzIHNhbWVxdWFudHVtICAtMUUtMzgzICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAxCitkZHNhbXEwNjQgc2FtZXF1YW50dW0gIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMQorZGRzYW1xMDY1IHNhbWVxdWFudHVtICAtMUUtMzk4ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAxCitkZHNhbXEwNjYgc2FtZXF1YW50dW0gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgLT4gMQorZGRzYW1xMDY3IHNhbWVxdWFudHVtICAtMUUtMzgzICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAxCitkZHNhbXEwNjggc2FtZXF1YW50dW0gIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMQorCitkZHNhbXEwNzEgc2FtZXF1YW50dW0gIC00RS0zOTggICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDEKK2Rkc2FtcTA3MiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDAwNDAwMDAwMDAwMDBFLTM4MyAtPiAxCitkZHNhbXEwNzMgc2FtZXF1YW50dW0gIC00RS0zODMgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDEKK2Rkc2FtcTA3NCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45OTk5OTk5OTk5NDk5OTlFKzM4NCAtPiAxCitkZHNhbXEwNzUgc2FtZXF1YW50dW0gIC00RS0zOTggICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDEKK2Rkc2FtcTA3NiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDQwMDAwMDAwMDAwMDBFLTM4MyAtPiAxCitkZHNhbXEwNzcgc2FtZXF1YW50dW0gIC00RS0zODMgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDEKK2Rkc2FtcTA3OCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45NDk5OTk5OTk5OTk5OTlFKzM4NCAtPiAxCisKK2Rkc2FtcTA4MSBzYW1lcXVhbnR1bSAgLTRFLTM5NyAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMAorZGRzYW1xMDgyIHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwMDA0MDAwMDAwMDAwMEUtMzM2IC0+IDAKK2Rkc2FtcTA4MyBzYW1lcXVhbnR1bSAgLTRFLTM0NiAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMAorZGRzYW1xMDg0IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk5OTQ5OTk5OTk5OTk5OUUrMzM2IC0+IDAKK2Rkc2FtcTA4NSBzYW1lcXVhbnR1bSAgLTRFLTM5NyAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMAorZGRzYW1xMDg2IHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwNDAwMDAwMDAwMDAwMEUtMzM2IC0+IDAKK2Rkc2FtcTA4NyBzYW1lcXVhbnR1bSAgLTRFLTM0NiAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMAorZGRzYW1xMDg4IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk0OTk5OTk5OTk5OTk5OUUrMzM2IC0+IDAKKworLS0gc3BlY2lhbHMgJiBjb21iaW5hdGlvbnMKK2Rkc2FtcTAxMTAgc2FtZXF1YW50dW0gIC1JbmYgICAgLUluZiAgIC0+IDEKK2Rkc2FtcTAxMTEgc2FtZXF1YW50dW0gIC1JbmYgICAgIEluZiAgIC0+IDEKK2Rkc2FtcTAxMTIgc2FtZXF1YW50dW0gIC1JbmYgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTAxMTMgc2FtZXF1YW50dW0gIC1JbmYgICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTAxMTQgc2FtZXF1YW50dW0gIC1JbmYgICAgLTcgICAgIC0+IDAKK2Rkc2FtcTAxMTUgc2FtZXF1YW50dW0gIC1JbmYgICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTAxMTYgc2FtZXF1YW50dW0gIC1JbmYgICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTAxMTcgc2FtZXF1YW50dW0gIC1JbmYgICAgLTAgICAgIC0+IDAKK2Rkc2FtcTAxMTggc2FtZXF1YW50dW0gIC1JbmYgICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTAxMTkgc2FtZXF1YW50dW0gIC1JbmYgICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTAxMjAgc2FtZXF1YW50dW0gIC1JbmYgICAgIDAgICAgIC0+IDAKK2Rkc2FtcTAxMjEgc2FtZXF1YW50dW0gIC1JbmYgICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTAxMjIgc2FtZXF1YW50dW0gIC1JbmYgICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTAxMjMgc2FtZXF1YW50dW0gIC1JbmYgICAgIDcgICAgIC0+IDAKK2Rkc2FtcTAxMjQgc2FtZXF1YW50dW0gIC1JbmYgICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTAxMjUgc2FtZXF1YW50dW0gIC1JbmYgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMDIxMCBzYW1lcXVhbnR1bSAgIEluZiAgICAtSW5mICAgLT4gMQorZGRzYW1xMDIxMSBzYW1lcXVhbnR1bSAgIEluZiAgICAgSW5mICAgLT4gMQorZGRzYW1xMDIxMiBzYW1lcXVhbnR1bSAgIEluZiAgICAgTmFOICAgLT4gMAorZGRzYW1xMDIxMyBzYW1lcXVhbnR1bSAgIEluZiAgICAtN0UrMyAgLT4gMAorZGRzYW1xMDIxNCBzYW1lcXVhbnR1bSAgIEluZiAgICAtNyAgICAgLT4gMAorZGRzYW1xMDIxNSBzYW1lcXVhbnR1bSAgIEluZiAgICAtN0UtMyAgLT4gMAorZGRzYW1xMDIxNiBzYW1lcXVhbnR1bSAgIEluZiAgICAtMEUtMyAgLT4gMAorZGRzYW1xMDIxNyBzYW1lcXVhbnR1bSAgIEluZiAgICAtMCAgICAgLT4gMAorZGRzYW1xMDIxOCBzYW1lcXVhbnR1bSAgIEluZiAgICAtMEUrMyAgLT4gMAorZGRzYW1xMDIxOSBzYW1lcXVhbnR1bSAgIEluZiAgICAgMEUtMyAgLT4gMAorZGRzYW1xMDIyMCBzYW1lcXVhbnR1bSAgIEluZiAgICAgMCAgICAgLT4gMAorZGRzYW1xMDIyMSBzYW1lcXVhbnR1bSAgIEluZiAgICAgMEUrMyAgLT4gMAorZGRzYW1xMDIyMiBzYW1lcXVhbnR1bSAgIEluZiAgICAgN0UtMyAgLT4gMAorZGRzYW1xMDIyMyBzYW1lcXVhbnR1bSAgIEluZiAgICAgNyAgICAgLT4gMAorZGRzYW1xMDIyNCBzYW1lcXVhbnR1bSAgIEluZiAgICAgN0UrMyAgLT4gMAorZGRzYW1xMDIyNSBzYW1lcXVhbnR1bSAgIEluZiAgICAgc05hTiAgLT4gMAorCitkZHNhbXEwMzEwIHNhbWVxdWFudHVtICAgTmFOICAgIC1JbmYgICAtPiAwCitkZHNhbXEwMzExIHNhbWVxdWFudHVtICAgTmFOICAgICBJbmYgICAtPiAwCitkZHNhbXEwMzEyIHNhbWVxdWFudHVtICAgTmFOICAgICBOYU4gICAtPiAxCitkZHNhbXEwMzEzIHNhbWVxdWFudHVtICAgTmFOICAgIC03RSszICAtPiAwCitkZHNhbXEwMzE0IHNhbWVxdWFudHVtICAgTmFOICAgIC03ICAgICAtPiAwCitkZHNhbXEwMzE1IHNhbWVxdWFudHVtICAgTmFOICAgIC03RS0zICAtPiAwCitkZHNhbXEwMzE2IHNhbWVxdWFudHVtICAgTmFOICAgIC0wRS0zICAtPiAwCitkZHNhbXEwMzE3IHNhbWVxdWFudHVtICAgTmFOICAgIC0wICAgICAtPiAwCitkZHNhbXEwMzE4IHNhbWVxdWFudHVtICAgTmFOICAgIC0wRSszICAtPiAwCitkZHNhbXEwMzE5IHNhbWVxdWFudHVtICAgTmFOICAgICAwRS0zICAtPiAwCitkZHNhbXEwMzIwIHNhbWVxdWFudHVtICAgTmFOICAgICAwICAgICAtPiAwCitkZHNhbXEwMzIxIHNhbWVxdWFudHVtICAgTmFOICAgICAwRSszICAtPiAwCitkZHNhbXEwMzIyIHNhbWVxdWFudHVtICAgTmFOICAgICA3RS0zICAtPiAwCitkZHNhbXEwMzIzIHNhbWVxdWFudHVtICAgTmFOICAgICA3ICAgICAtPiAwCitkZHNhbXEwMzI0IHNhbWVxdWFudHVtICAgTmFOICAgICA3RSszICAtPiAwCitkZHNhbXEwMzI1IHNhbWVxdWFudHVtICAgTmFOICAgICBzTmFOICAtPiAxCisKK2Rkc2FtcTA0MTAgc2FtZXF1YW50dW0gIC03RSszICAgIC1JbmYgICAtPiAwCitkZHNhbXEwNDExIHNhbWVxdWFudHVtICAtN0UrMyAgICAgSW5mICAgLT4gMAorZGRzYW1xMDQxMiBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTA0MTMgc2FtZXF1YW50dW0gIC03RSszICAgIC03RSszICAtPiAxCitkZHNhbXEwNDE0IHNhbWVxdWFudHVtICAtN0UrMyAgICAtNyAgICAgLT4gMAorZGRzYW1xMDQxNSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTA0MTYgc2FtZXF1YW50dW0gIC03RSszICAgIC0wRS0zICAtPiAwCitkZHNhbXEwNDE3IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMCAgICAgLT4gMAorZGRzYW1xMDQxOCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTBFKzMgIC0+IDEKK2Rkc2FtcTA0MTkgc2FtZXF1YW50dW0gIC03RSszICAgICAwRS0zICAtPiAwCitkZHNhbXEwNDIwIHNhbWVxdWFudHVtICAtN0UrMyAgICAgMCAgICAgLT4gMAorZGRzYW1xMDQyMSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDBFKzMgIC0+IDEKK2Rkc2FtcTA0MjIgc2FtZXF1YW50dW0gIC03RSszICAgICA3RS0zICAtPiAwCitkZHNhbXEwNDIzIHNhbWVxdWFudHVtICAtN0UrMyAgICAgNyAgICAgLT4gMAorZGRzYW1xMDQyNCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDdFKzMgIC0+IDEKK2Rkc2FtcTA0MjUgc2FtZXF1YW50dW0gIC03RSszICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTA1MTAgc2FtZXF1YW50dW0gIC03ICAgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTA1MTEgc2FtZXF1YW50dW0gIC03ICAgICAgIEluZiAgIC0+IDAKK2Rkc2FtcTA1MTIgc2FtZXF1YW50dW0gIC03ICAgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTA1MTMgc2FtZXF1YW50dW0gIC03ICAgICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTA1MTQgc2FtZXF1YW50dW0gIC03ICAgICAgLTcgICAgIC0+IDEKK2Rkc2FtcTA1MTUgc2FtZXF1YW50dW0gIC03ICAgICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTA1MTYgc2FtZXF1YW50dW0gIC03ICAgICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTA1MTcgc2FtZXF1YW50dW0gIC03ICAgICAgLTAgICAgIC0+IDEKK2Rkc2FtcTA1MTggc2FtZXF1YW50dW0gIC03ICAgICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTA1MTkgc2FtZXF1YW50dW0gIC03ICAgICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTA1MjAgc2FtZXF1YW50dW0gIC03ICAgICAgIDAgICAgIC0+IDEKK2Rkc2FtcTA1MjEgc2FtZXF1YW50dW0gIC03ICAgICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTA1MjIgc2FtZXF1YW50dW0gIC03ICAgICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTA1MjMgc2FtZXF1YW50dW0gIC03ICAgICAgIDcgICAgIC0+IDEKK2Rkc2FtcTA1MjQgc2FtZXF1YW50dW0gIC03ICAgICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTA1MjUgc2FtZXF1YW50dW0gIC03ICAgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMDYxMCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTA2MTEgc2FtZXF1YW50dW0gIC03RS0zICAgICBJbmYgICAtPiAwCitkZHNhbXEwNjEyIHNhbWVxdWFudHVtICAtN0UtMyAgICAgTmFOICAgLT4gMAorZGRzYW1xMDYxMyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTA2MTQgc2FtZXF1YW50dW0gIC03RS0zICAgIC03ICAgICAtPiAwCitkZHNhbXEwNjE1IHNhbWVxdWFudHVtICAtN0UtMyAgICAtN0UtMyAgLT4gMQorZGRzYW1xMDYxNiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTBFLTMgIC0+IDEKK2Rkc2FtcTA2MTcgc2FtZXF1YW50dW0gIC03RS0zICAgIC0wICAgICAtPiAwCitkZHNhbXEwNjE4IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMEUrMyAgLT4gMAorZGRzYW1xMDYxOSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDBFLTMgIC0+IDEKK2Rkc2FtcTA2MjAgc2FtZXF1YW50dW0gIC03RS0zICAgICAwICAgICAtPiAwCitkZHNhbXEwNjIxIHNhbWVxdWFudHVtICAtN0UtMyAgICAgMEUrMyAgLT4gMAorZGRzYW1xMDYyMiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDdFLTMgIC0+IDEKK2Rkc2FtcTA2MjMgc2FtZXF1YW50dW0gIC03RS0zICAgICA3ICAgICAtPiAwCitkZHNhbXEwNjI0IHNhbWVxdWFudHVtICAtN0UtMyAgICAgN0UrMyAgLT4gMAorZGRzYW1xMDYyNSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMDcxMCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTA3MTEgc2FtZXF1YW50dW0gIC0wRS0zICAgICBJbmYgICAtPiAwCitkZHNhbXEwNzEyIHNhbWVxdWFudHVtICAtMEUtMyAgICAgTmFOICAgLT4gMAorZGRzYW1xMDcxMyBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTA3MTQgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03ICAgICAtPiAwCitkZHNhbXEwNzE1IHNhbWVxdWFudHVtICAtMEUtMyAgICAtN0UtMyAgLT4gMQorZGRzYW1xMDcxNiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTBFLTMgIC0+IDEKK2Rkc2FtcTA3MTcgc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wICAgICAtPiAwCitkZHNhbXEwNzE4IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMEUrMyAgLT4gMAorZGRzYW1xMDcxOSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDBFLTMgIC0+IDEKK2Rkc2FtcTA3MjAgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwICAgICAtPiAwCitkZHNhbXEwNzIxIHNhbWVxdWFudHVtICAtMEUtMyAgICAgMEUrMyAgLT4gMAorZGRzYW1xMDcyMiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDdFLTMgIC0+IDEKK2Rkc2FtcTA3MjMgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3ICAgICAtPiAwCitkZHNhbXEwNzI0IHNhbWVxdWFudHVtICAtMEUtMyAgICAgN0UrMyAgLT4gMAorZGRzYW1xMDcyNSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMDgxMCBzYW1lcXVhbnR1bSAgLTAgICAgICAtSW5mICAgLT4gMAorZGRzYW1xMDgxMSBzYW1lcXVhbnR1bSAgLTAgICAgICAgSW5mICAgLT4gMAorZGRzYW1xMDgxMiBzYW1lcXVhbnR1bSAgLTAgICAgICAgTmFOICAgLT4gMAorZGRzYW1xMDgxMyBzYW1lcXVhbnR1bSAgLTAgICAgICAtN0UrMyAgLT4gMAorZGRzYW1xMDgxNCBzYW1lcXVhbnR1bSAgLTAgICAgICAtNyAgICAgLT4gMQorZGRzYW1xMDgxNSBzYW1lcXVhbnR1bSAgLTAgICAgICAtN0UtMyAgLT4gMAorZGRzYW1xMDgxNiBzYW1lcXVhbnR1bSAgLTAgICAgICAtMEUtMyAgLT4gMAorZGRzYW1xMDgxNyBzYW1lcXVhbnR1bSAgLTAgICAgICAtMCAgICAgLT4gMQorZGRzYW1xMDgxOCBzYW1lcXVhbnR1bSAgLTAgICAgICAtMEUrMyAgLT4gMAorZGRzYW1xMDgxOSBzYW1lcXVhbnR1bSAgLTAgICAgICAgMEUtMyAgLT4gMAorZGRzYW1xMDgyMCBzYW1lcXVhbnR1bSAgLTAgICAgICAgMCAgICAgLT4gMQorZGRzYW1xMDgyMSBzYW1lcXVhbnR1bSAgLTAgICAgICAgMEUrMyAgLT4gMAorZGRzYW1xMDgyMiBzYW1lcXVhbnR1bSAgLTAgICAgICAgN0UtMyAgLT4gMAorZGRzYW1xMDgyMyBzYW1lcXVhbnR1bSAgLTAgICAgICAgNyAgICAgLT4gMQorZGRzYW1xMDgyNCBzYW1lcXVhbnR1bSAgLTAgICAgICAgN0UrMyAgLT4gMAorZGRzYW1xMDgyNSBzYW1lcXVhbnR1bSAgLTAgICAgICAgc05hTiAgLT4gMAorCitkZHNhbXEwOTEwIHNhbWVxdWFudHVtICAtMEUrMyAgICAtSW5mICAgLT4gMAorZGRzYW1xMDkxMSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIEluZiAgIC0+IDAKK2Rkc2FtcTA5MTIgc2FtZXF1YW50dW0gIC0wRSszICAgICBOYU4gICAtPiAwCitkZHNhbXEwOTEzIHNhbWVxdWFudHVtICAtMEUrMyAgICAtN0UrMyAgLT4gMQorZGRzYW1xMDkxNCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTcgICAgIC0+IDAKK2Rkc2FtcTA5MTUgc2FtZXF1YW50dW0gIC0wRSszICAgIC03RS0zICAtPiAwCitkZHNhbXEwOTE2IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMEUtMyAgLT4gMAorZGRzYW1xMDkxNyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTAgICAgIC0+IDAKK2Rkc2FtcTA5MTggc2FtZXF1YW50dW0gIC0wRSszICAgIC0wRSszICAtPiAxCitkZHNhbXEwOTE5IHNhbWVxdWFudHVtICAtMEUrMyAgICAgMEUtMyAgLT4gMAorZGRzYW1xMDkyMCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDAgICAgIC0+IDAKK2Rkc2FtcTA5MjEgc2FtZXF1YW50dW0gIC0wRSszICAgICAwRSszICAtPiAxCitkZHNhbXEwOTIyIHNhbWVxdWFudHVtICAtMEUrMyAgICAgN0UtMyAgLT4gMAorZGRzYW1xMDkyMyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDcgICAgIC0+IDAKK2Rkc2FtcTA5MjQgc2FtZXF1YW50dW0gIC0wRSszICAgICA3RSszICAtPiAxCitkZHNhbXEwOTI1IHNhbWVxdWFudHVtICAtMEUrMyAgICAgc05hTiAgLT4gMAorCitkZHNhbXExMTEwIHNhbWVxdWFudHVtICAwRS0zICAgIC1JbmYgICAtPiAwCitkZHNhbXExMTExIHNhbWVxdWFudHVtICAwRS0zICAgICBJbmYgICAtPiAwCitkZHNhbXExMTEyIHNhbWVxdWFudHVtICAwRS0zICAgICBOYU4gICAtPiAwCitkZHNhbXExMTEzIHNhbWVxdWFudHVtICAwRS0zICAgIC03RSszICAtPiAwCitkZHNhbXExMTE0IHNhbWVxdWFudHVtICAwRS0zICAgIC03ICAgICAtPiAwCitkZHNhbXExMTE1IHNhbWVxdWFudHVtICAwRS0zICAgIC03RS0zICAtPiAxCitkZHNhbXExMTE2IHNhbWVxdWFudHVtICAwRS0zICAgIC0wRS0zICAtPiAxCitkZHNhbXExMTE3IHNhbWVxdWFudHVtICAwRS0zICAgIC0wICAgICAtPiAwCitkZHNhbXExMTE4IHNhbWVxdWFudHVtICAwRS0zICAgIC0wRSszICAtPiAwCitkZHNhbXExMTE5IHNhbWVxdWFudHVtICAwRS0zICAgICAwRS0zICAtPiAxCitkZHNhbXExMTIwIHNhbWVxdWFudHVtICAwRS0zICAgICAwICAgICAtPiAwCitkZHNhbXExMTIxIHNhbWVxdWFudHVtICAwRS0zICAgICAwRSszICAtPiAwCitkZHNhbXExMTIyIHNhbWVxdWFudHVtICAwRS0zICAgICA3RS0zICAtPiAxCitkZHNhbXExMTIzIHNhbWVxdWFudHVtICAwRS0zICAgICA3ICAgICAtPiAwCitkZHNhbXExMTI0IHNhbWVxdWFudHVtICAwRS0zICAgICA3RSszICAtPiAwCitkZHNhbXExMTI1IHNhbWVxdWFudHVtICAwRS0zICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTEyMTAgc2FtZXF1YW50dW0gIDAgICAgICAgLUluZiAgIC0+IDAKK2Rkc2FtcTEyMTEgc2FtZXF1YW50dW0gIDAgICAgICAgIEluZiAgIC0+IDAKK2Rkc2FtcTEyMTIgc2FtZXF1YW50dW0gIDAgICAgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTEyMTMgc2FtZXF1YW50dW0gIDAgICAgICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTEyMTQgc2FtZXF1YW50dW0gIDAgICAgICAgLTcgICAgIC0+IDEKK2Rkc2FtcTEyMTUgc2FtZXF1YW50dW0gIDAgICAgICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTEyMTYgc2FtZXF1YW50dW0gIDAgICAgICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTEyMTcgc2FtZXF1YW50dW0gIDAgICAgICAgLTAgICAgIC0+IDEKK2Rkc2FtcTEyMTggc2FtZXF1YW50dW0gIDAgICAgICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTEyMTkgc2FtZXF1YW50dW0gIDAgICAgICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTEyMjAgc2FtZXF1YW50dW0gIDAgICAgICAgIDAgICAgIC0+IDEKK2Rkc2FtcTEyMjEgc2FtZXF1YW50dW0gIDAgICAgICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTEyMjIgc2FtZXF1YW50dW0gIDAgICAgICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTEyMjMgc2FtZXF1YW50dW0gIDAgICAgICAgIDcgICAgIC0+IDEKK2Rkc2FtcTEyMjQgc2FtZXF1YW50dW0gIDAgICAgICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTEyMjUgc2FtZXF1YW50dW0gIDAgICAgICAgIHNOYU4gIC0+IDAKKworZGRzYW1xMTMxMCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtSW5mICAgLT4gMAorZGRzYW1xMTMxMSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgSW5mICAgLT4gMAorZGRzYW1xMTMxMiBzYW1lcXVhbnR1bSAgMEUrMyAgICAgTmFOICAgLT4gMAorZGRzYW1xMTMxMyBzYW1lcXVhbnR1bSAgMEUrMyAgICAtN0UrMyAgLT4gMQorZGRzYW1xMTMxNCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtNyAgICAgLT4gMAorZGRzYW1xMTMxNSBzYW1lcXVhbnR1bSAgMEUrMyAgICAtN0UtMyAgLT4gMAorZGRzYW1xMTMxNiBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMEUtMyAgLT4gMAorZGRzYW1xMTMxNyBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMCAgICAgLT4gMAorZGRzYW1xMTMxOCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMEUrMyAgLT4gMQorZGRzYW1xMTMxOSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMEUtMyAgLT4gMAorZGRzYW1xMTMyMCBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMCAgICAgLT4gMAorZGRzYW1xMTMyMSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMEUrMyAgLT4gMQorZGRzYW1xMTMyMiBzYW1lcXVhbnR1bSAgMEUrMyAgICAgN0UtMyAgLT4gMAorZGRzYW1xMTMyMyBzYW1lcXVhbnR1bSAgMEUrMyAgICAgNyAgICAgLT4gMAorZGRzYW1xMTMyNCBzYW1lcXVhbnR1bSAgMEUrMyAgICAgN0UrMyAgLT4gMQorZGRzYW1xMTMyNSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgc05hTiAgLT4gMAorCitkZHNhbXExNDEwIHNhbWVxdWFudHVtICA3RS0zICAgIC1JbmYgICAtPiAwCitkZHNhbXExNDExIHNhbWVxdWFudHVtICA3RS0zICAgICBJbmYgICAtPiAwCitkZHNhbXExNDEyIHNhbWVxdWFudHVtICA3RS0zICAgICBOYU4gICAtPiAwCitkZHNhbXExNDEzIHNhbWVxdWFudHVtICA3RS0zICAgIC03RSszICAtPiAwCitkZHNhbXExNDE0IHNhbWVxdWFudHVtICA3RS0zICAgIC03ICAgICAtPiAwCitkZHNhbXExNDE1IHNhbWVxdWFudHVtICA3RS0zICAgIC03RS0zICAtPiAxCitkZHNhbXExNDE2IHNhbWVxdWFudHVtICA3RS0zICAgIC0wRS0zICAtPiAxCitkZHNhbXExNDE3IHNhbWVxdWFudHVtICA3RS0zICAgIC0wICAgICAtPiAwCitkZHNhbXExNDE4IHNhbWVxdWFudHVtICA3RS0zICAgIC0wRSszICAtPiAwCitkZHNhbXExNDE5IHNhbWVxdWFudHVtICA3RS0zICAgICAwRS0zICAtPiAxCitkZHNhbXExNDIwIHNhbWVxdWFudHVtICA3RS0zICAgICAwICAgICAtPiAwCitkZHNhbXExNDIxIHNhbWVxdWFudHVtICA3RS0zICAgICAwRSszICAtPiAwCitkZHNhbXExNDIyIHNhbWVxdWFudHVtICA3RS0zICAgICA3RS0zICAtPiAxCitkZHNhbXExNDIzIHNhbWVxdWFudHVtICA3RS0zICAgICA3ICAgICAtPiAwCitkZHNhbXExNDI0IHNhbWVxdWFudHVtICA3RS0zICAgICA3RSszICAtPiAwCitkZHNhbXExNDI1IHNhbWVxdWFudHVtICA3RS0zICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTE1MTAgc2FtZXF1YW50dW0gIDcgICAgICAtSW5mICAgLT4gMAorZGRzYW1xMTUxMSBzYW1lcXVhbnR1bSAgNyAgICAgICBJbmYgICAtPiAwCitkZHNhbXExNTEyIHNhbWVxdWFudHVtICA3ICAgICAgIE5hTiAgIC0+IDAKK2Rkc2FtcTE1MTMgc2FtZXF1YW50dW0gIDcgICAgICAtN0UrMyAgLT4gMAorZGRzYW1xMTUxNCBzYW1lcXVhbnR1bSAgNyAgICAgIC03ICAgICAtPiAxCitkZHNhbXExNTE1IHNhbWVxdWFudHVtICA3ICAgICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTE1MTYgc2FtZXF1YW50dW0gIDcgICAgICAtMEUtMyAgLT4gMAorZGRzYW1xMTUxNyBzYW1lcXVhbnR1bSAgNyAgICAgIC0wICAgICAtPiAxCitkZHNhbXExNTE4IHNhbWVxdWFudHVtICA3ICAgICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTE1MTkgc2FtZXF1YW50dW0gIDcgICAgICAgMEUtMyAgLT4gMAorZGRzYW1xMTUyMCBzYW1lcXVhbnR1bSAgNyAgICAgICAwICAgICAtPiAxCitkZHNhbXExNTIxIHNhbWVxdWFudHVtICA3ICAgICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTE1MjIgc2FtZXF1YW50dW0gIDcgICAgICAgN0UtMyAgLT4gMAorZGRzYW1xMTUyMyBzYW1lcXVhbnR1bSAgNyAgICAgICA3ICAgICAtPiAxCitkZHNhbXExNTI0IHNhbWVxdWFudHVtICA3ICAgICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTE1MjUgc2FtZXF1YW50dW0gIDcgICAgICAgc05hTiAgLT4gMAorCitkZHNhbXExNjEwIHNhbWVxdWFudHVtICA3RSszICAgIC1JbmYgICAtPiAwCitkZHNhbXExNjExIHNhbWVxdWFudHVtICA3RSszICAgICBJbmYgICAtPiAwCitkZHNhbXExNjEyIHNhbWVxdWFudHVtICA3RSszICAgICBOYU4gICAtPiAwCitkZHNhbXExNjEzIHNhbWVxdWFudHVtICA3RSszICAgIC03RSszICAtPiAxCitkZHNhbXExNjE0IHNhbWVxdWFudHVtICA3RSszICAgIC03ICAgICAtPiAwCitkZHNhbXExNjE1IHNhbWVxdWFudHVtICA3RSszICAgIC03RS0zICAtPiAwCitkZHNhbXExNjE2IHNhbWVxdWFudHVtICA3RSszICAgIC0wRS0zICAtPiAwCitkZHNhbXExNjE3IHNhbWVxdWFudHVtICA3RSszICAgIC0wICAgICAtPiAwCitkZHNhbXExNjE4IHNhbWVxdWFudHVtICA3RSszICAgIC0wRSszICAtPiAxCitkZHNhbXExNjE5IHNhbWVxdWFudHVtICA3RSszICAgICAwRS0zICAtPiAwCitkZHNhbXExNjIwIHNhbWVxdWFudHVtICA3RSszICAgICAwICAgICAtPiAwCitkZHNhbXExNjIxIHNhbWVxdWFudHVtICA3RSszICAgICAwRSszICAtPiAxCitkZHNhbXExNjIyIHNhbWVxdWFudHVtICA3RSszICAgICA3RS0zICAtPiAwCitkZHNhbXExNjIzIHNhbWVxdWFudHVtICA3RSszICAgICA3ICAgICAtPiAwCitkZHNhbXExNjI0IHNhbWVxdWFudHVtICA3RSszICAgICA3RSszICAtPiAxCitkZHNhbXExNjI1IHNhbWVxdWFudHVtICA3RSszICAgICBzTmFOICAtPiAwCisKK2Rkc2FtcTE3MTAgc2FtZXF1YW50dW0gIHNOYU4gICAgLUluZiAgIC0+IDAKK2Rkc2FtcTE3MTEgc2FtZXF1YW50dW0gIHNOYU4gICAgIEluZiAgIC0+IDAKK2Rkc2FtcTE3MTIgc2FtZXF1YW50dW0gIHNOYU4gICAgIE5hTiAgIC0+IDEKK2Rkc2FtcTE3MTMgc2FtZXF1YW50dW0gIHNOYU4gICAgLTdFKzMgIC0+IDAKK2Rkc2FtcTE3MTQgc2FtZXF1YW50dW0gIHNOYU4gICAgLTcgICAgIC0+IDAKK2Rkc2FtcTE3MTUgc2FtZXF1YW50dW0gIHNOYU4gICAgLTdFLTMgIC0+IDAKK2Rkc2FtcTE3MTYgc2FtZXF1YW50dW0gIHNOYU4gICAgLTBFLTMgIC0+IDAKK2Rkc2FtcTE3MTcgc2FtZXF1YW50dW0gIHNOYU4gICAgLTAgICAgIC0+IDAKK2Rkc2FtcTE3MTggc2FtZXF1YW50dW0gIHNOYU4gICAgLTBFKzMgIC0+IDAKK2Rkc2FtcTE3MTkgc2FtZXF1YW50dW0gIHNOYU4gICAgIDBFLTMgIC0+IDAKK2Rkc2FtcTE3MjAgc2FtZXF1YW50dW0gIHNOYU4gICAgIDAgICAgIC0+IDAKK2Rkc2FtcTE3MjEgc2FtZXF1YW50dW0gIHNOYU4gICAgIDBFKzMgIC0+IDAKK2Rkc2FtcTE3MjIgc2FtZXF1YW50dW0gIHNOYU4gICAgIDdFLTMgIC0+IDAKK2Rkc2FtcTE3MjMgc2FtZXF1YW50dW0gIHNOYU4gICAgIDcgICAgIC0+IDAKK2Rkc2FtcTE3MjQgc2FtZXF1YW50dW0gIHNOYU4gICAgIDdFKzMgIC0+IDAKK2Rkc2FtcTE3MjUgc2FtZXF1YW50dW0gIHNOYU4gICAgIHNOYU4gIC0+IDEKKy0tIG5vaXN5IE5hTnMKK2Rkc2FtcTE3MzAgc2FtZXF1YW50dW0gIHNOYU4zICAgIHNOYU4zIC0+IDEKK2Rkc2FtcTE3MzEgc2FtZXF1YW50dW0gIHNOYU4zICAgIHNOYU40IC0+IDEKK2Rkc2FtcTE3MzIgc2FtZXF1YW50dW0gICBOYU4zICAgICBOYU4zIC0+IDEKK2Rkc2FtcTE3MzMgc2FtZXF1YW50dW0gICBOYU4zICAgICBOYU40IC0+IDEKK2Rkc2FtcTE3MzQgc2FtZXF1YW50dW0gIHNOYU4zICAgICAzICAgIC0+IDAKK2Rkc2FtcTE3MzUgc2FtZXF1YW50dW0gICBOYU4zICAgICAzICAgIC0+IDAKK2Rkc2FtcTE3MzYgc2FtZXF1YW50dW0gICAgICA0ICAgIHNOYU40IC0+IDAKK2Rkc2FtcTE3Mzcgc2FtZXF1YW50dW0gICAgICAzICAgICBOYU4zIC0+IDAKK2Rkc2FtcTE3Mzggc2FtZXF1YW50dW0gICAgSW5mICAgIHNOYU40IC0+IDAKK2Rkc2FtcTE3Mzkgc2FtZXF1YW50dW0gICAtSW5mICAgICBOYU4zIC0+IDAKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFNjYWxlQi5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFNjYWxlQi5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZWUxMWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2NhbGVCLmRlY1Rlc3QKQEAgLTAsMCArMSwyNDMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRTY2FsZWJCLmRlY1Rlc3QgLS0gc2NhbGUgYSBkZWNEb3VibGUgYnkgcG93ZXJzIG9mIDEwICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gTWF4IHxyaHN8IGlzIDIqKDM4NCsxNikgPSA4MDAKKworLS0gU2FuaXR5IGNoZWNrcworZGRzY2IwMDEgc2NhbGViICAgICAgIDcuNTAgICAxMCAtPiA3LjUwRSsxMAorZGRzY2IwMDIgc2NhbGViICAgICAgIDcuNTAgICAgMyAtPiA3LjUwRSszCitkZHNjYjAwMyBzY2FsZWIgICAgICAgNy41MCAgICAyIC0+IDc1MAorZGRzY2IwMDQgc2NhbGViICAgICAgIDcuNTAgICAgMSAtPiA3NS4wCitkZHNjYjAwNSBzY2FsZWIgICAgICAgNy41MCAgICAwIC0+IDcuNTAKK2Rkc2NiMDA2IHNjYWxlYiAgICAgICA3LjUwICAgLTEgLT4gMC43NTAKK2Rkc2NiMDA3IHNjYWxlYiAgICAgICA3LjUwICAgLTIgLT4gMC4wNzUwCitkZHNjYjAwOCBzY2FsZWIgICAgICAgNy41MCAgLTEwIC0+IDcuNTBFLTEwCitkZHNjYjAwOSBzY2FsZWIgICAgICAtNy41MCAgICAzIC0+IC03LjUwRSszCitkZHNjYjAxMCBzY2FsZWIgICAgICAtNy41MCAgICAyIC0+IC03NTAKK2Rkc2NiMDExIHNjYWxlYiAgICAgIC03LjUwICAgIDEgLT4gLTc1LjAKK2Rkc2NiMDEyIHNjYWxlYiAgICAgIC03LjUwICAgIDAgLT4gLTcuNTAKK2Rkc2NiMDEzIHNjYWxlYiAgICAgIC03LjUwICAgLTEgLT4gLTAuNzUwCisKKy0tIEluZmluaXRpZXMKK2Rkc2NiMDE0IHNjYWxlYiAgSW5maW5pdHkgICAxIC0+IEluZmluaXR5CitkZHNjYjAxNSBzY2FsZWIgIC1JbmZpbml0eSAgMiAtPiAtSW5maW5pdHkKK2Rkc2NiMDE2IHNjYWxlYiAgSW5maW5pdHkgIC0xIC0+IEluZmluaXR5CitkZHNjYjAxNyBzY2FsZWIgIC1JbmZpbml0eSAtMiAtPiAtSW5maW5pdHkKKworLS0gTmV4dCB0d28gYXJlIHNvbWV3aGF0IHVuZGVmaW5lZCBpbiA3NTRyOyB0cmVhdCBhcyBub24taW50ZWdlcgorZGRzY2IwMTggc2NhbGViICAxMCAgSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjAxOSBzY2FsZWIgIDEwIC1JbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gTmFOcyBhcmUgdW5kZWZpbmVkIGluIDc1NHI7IGFzc3VtZSB1c3VhbCBwcm9jZXNzaW5nCistLSBOYU5zLCAwIHBheWxvYWQKK2Rkc2NiMDIxIHNjYWxlYiAgICAgICAgIE5hTiAgMSAtPiBOYU4KK2Rkc2NiMDIyIHNjYWxlYiAgICAgICAgLU5hTiAtMSAtPiAtTmFOCitkZHNjYjAyMyBzY2FsZWIgICAgICAgIHNOYU4gIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjAyNCBzY2FsZWIgICAgICAgLXNOYU4gIDEgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwMjUgc2NhbGViICAgIDQgICAgTmFOICAgIC0+IE5hTgorZGRzY2IwMjYgc2NhbGViIC1JbmYgICAtTmFOICAgIC0+IC1OYU4KK2Rkc2NiMDI3IHNjYWxlYiAgICA0ICAgc05hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDI4IHNjYWxlYiAgSW5mICAtc05hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG5vbi1pbnRlZ2VyIFJIUworZGRzY2IwMzAgc2NhbGViICAxLjIzICAgIDEgICAgLT4gIDEyLjMKK2Rkc2NiMDMxIHNjYWxlYiAgMS4yMyAgICAxLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDMyIHNjYWxlYiAgMS4yMyAgICAxLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDMzIHNjYWxlYiAgMS4yMyAgICAxLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDM0IHNjYWxlYiAgMS4yMyAgICAwLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDM1IHNjYWxlYiAgMS4yMyAgICAwLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDM2IHNjYWxlYiAgMS4yMyAgICAwLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjAzNyBzY2FsZWIgIDEuMjMgICAtMSAgICAtPiAgMC4xMjMKK2Rkc2NiMDM4IHNjYWxlYiAgMS4yMyAgIC0xLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDM5IHNjYWxlYiAgMS4yMyAgIC0xLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDQwIHNjYWxlYiAgMS4yMyAgIC0xLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDQxIHNjYWxlYiAgMS4yMyAgIC0wLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDQyIHNjYWxlYiAgMS4yMyAgIC0wLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDQzIHNjYWxlYiAgMS4yMyAgIC0wLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjA0NCBzY2FsZWIgIDEuMjMgICAgMC4xICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IwNDUgc2NhbGViICAxLjIzICAgIDFFKzEgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMDQ2IHNjYWxlYiAgMS4yMyAgICAxLjEyMzRFKzYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjA0NyBzY2FsZWIgIDEuMjMgICAgMS4xMjNFKzQgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvdXQtb2YgcmFuZ2UgUkhTCitkZHNjYjEyMCBzY2FsZWIgIDEuMjMgICAgNzk5ICAgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGRzY2IxMjEgc2NhbGViICAxLjIzICAgIDgwMCAgICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rkc2NiMTIyIHNjYWxlYiAgMS4yMyAgICA4MDEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjEyMyBzY2FsZWIgIDEuMjMgICAgODAyICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2IxMjQgc2NhbGViICAxLjIzICAgLTc5OSAgICAgICAgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRzY2IxMjUgc2NhbGViICAxLjIzICAgLTgwMCAgICAgICAgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGRzY2IxMjYgc2NhbGViICAxLjIzICAgLTgwMSAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiMTI3IHNjYWxlYiAgMS4yMyAgIC04MDIgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rkc2NiODYxIHNjYWxlYiAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQorZGRzY2I4NjIgc2NhbGViIC1OYU4wMiAgIC0xMDAwICAgIC0+IC1OYU4yCitkZHNjYjg2MyBzY2FsZWIgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMKK2Rkc2NiODY0IHNjYWxlYiAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONAorZGRzY2I4NjUgc2NhbGViICBOYU4wNSAgICBOYU42MSAgIC0+ICBOYU41CitkZHNjYjg2NiBzY2FsZWIgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxCitkZHNjYjg2NyBzY2FsZWIgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxCitkZHNjYjg2OCBzY2FsZWIgIDEwMDAgICAgIE5hTjkxICAgLT4gIE5hTjkxCitkZHNjYjg2OSBzY2FsZWIgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQorZGRzY2I4NzEgc2NhbGViICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiODcyIHNjYWxlYiAgc05hTjAxMiAgLTEwMDAgICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjg3MyBzY2FsZWIgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2I4NzQgc2NhbGViICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiODc1IHNjYWxlYiAgc05hTjAxNSAgc05hTjE4MSAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjg3NiBzY2FsZWIgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2I4Nzcgc2NhbGViIC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiODc4IHNjYWxlYiAtMTAwMCAgICAgc05hTjIxMSAtPiAgTmFOMjExIEludmFsaWRfb3BlcmF0aW9uCitkZHNjYjg3OSBzY2FsZWIgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbgorZGRzY2I4ODAgc2NhbGViICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2NiODgxIHNjYWxlYiAgTmFOMDI1ICAgc05hTjI0MSAtPiAgTmFOMjQxIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZpbml0ZXMKK2Rkc2NiMDUxIHNjYWxlYiAgICAgICAgICA3ICAgLTIgIC0+IDAuMDcKK2Rkc2NiMDUyIHNjYWxlYiAgICAgICAgIC03ICAgLTIgIC0+IC0wLjA3CitkZHNjYjA1MyBzY2FsZWIgICAgICAgICA3NSAgIC0yICAtPiAwLjc1CitkZHNjYjA1NCBzY2FsZWIgICAgICAgIC03NSAgIC0yICAtPiAtMC43NQorZGRzY2IwNTUgc2NhbGViICAgICAgIDcuNTAgICAtMiAgLT4gMC4wNzUwCitkZHNjYjA1NiBzY2FsZWIgICAgICAtNy41MCAgIC0yICAtPiAtMC4wNzUwCitkZHNjYjA1NyBzY2FsZWIgICAgICAgNy41MDAgIC0yICAtPiAwLjA3NTAwCitkZHNjYjA1OCBzY2FsZWIgICAgICAtNy41MDAgIC0yICAtPiAtMC4wNzUwMAorZGRzY2IwNjEgc2NhbGViICAgICAgICAgIDcgICAtMSAgLT4gMC43CitkZHNjYjA2MiBzY2FsZWIgICAgICAgICAtNyAgIC0xICAtPiAtMC43CitkZHNjYjA2MyBzY2FsZWIgICAgICAgICA3NSAgIC0xICAtPiA3LjUKK2Rkc2NiMDY0IHNjYWxlYiAgICAgICAgLTc1ICAgLTEgIC0+IC03LjUKK2Rkc2NiMDY1IHNjYWxlYiAgICAgICA3LjUwICAgLTEgIC0+IDAuNzUwCitkZHNjYjA2NiBzY2FsZWIgICAgICAtNy41MCAgIC0xICAtPiAtMC43NTAKK2Rkc2NiMDY3IHNjYWxlYiAgICAgICA3LjUwMCAgLTEgIC0+IDAuNzUwMAorZGRzY2IwNjggc2NhbGViICAgICAgLTcuNTAwICAtMSAgLT4gLTAuNzUwMAorZGRzY2IwNzEgc2NhbGViICAgICAgICAgIDcgICAgMCAgLT4gNworZGRzY2IwNzIgc2NhbGViICAgICAgICAgLTcgICAgMCAgLT4gLTcKK2Rkc2NiMDczIHNjYWxlYiAgICAgICAgIDc1ICAgIDAgIC0+IDc1CitkZHNjYjA3NCBzY2FsZWIgICAgICAgIC03NSAgICAwICAtPiAtNzUKK2Rkc2NiMDc1IHNjYWxlYiAgICAgICA3LjUwICAgIDAgIC0+IDcuNTAKK2Rkc2NiMDc2IHNjYWxlYiAgICAgIC03LjUwICAgIDAgIC0+IC03LjUwCitkZHNjYjA3NyBzY2FsZWIgICAgICAgNy41MDAgICAwICAtPiA3LjUwMAorZGRzY2IwNzggc2NhbGViICAgICAgLTcuNTAwICAgMCAgLT4gLTcuNTAwCitkZHNjYjA4MSBzY2FsZWIgICAgICAgICAgNyAgICAxICAtPiA3RSsxCitkZHNjYjA4MiBzY2FsZWIgICAgICAgICAtNyAgICAxICAtPiAtN0UrMQorZGRzY2IwODMgc2NhbGViICAgICAgICAgNzUgICAgMSAgLT4gNy41RSsyCitkZHNjYjA4NCBzY2FsZWIgICAgICAgIC03NSAgICAxICAtPiAtNy41RSsyCitkZHNjYjA4NSBzY2FsZWIgICAgICAgNy41MCAgICAxICAtPiA3NS4wCitkZHNjYjA4NiBzY2FsZWIgICAgICAtNy41MCAgICAxICAtPiAtNzUuMAorZGRzY2IwODcgc2NhbGViICAgICAgIDcuNTAwICAgMSAgLT4gNzUuMDAKK2Rkc2NiMDg4IHNjYWxlYiAgICAgIC03LjUwMCAgIDEgIC0+IC03NS4wMAorZGRzY2IwOTEgc2NhbGViICAgICAgICAgIDcgICAgMiAgLT4gN0UrMgorZGRzY2IwOTIgc2NhbGViICAgICAgICAgLTcgICAgMiAgLT4gLTdFKzIKK2Rkc2NiMDkzIHNjYWxlYiAgICAgICAgIDc1ICAgIDIgIC0+IDcuNUUrMworZGRzY2IwOTQgc2NhbGViICAgICAgICAtNzUgICAgMiAgLT4gLTcuNUUrMworZGRzY2IwOTUgc2NhbGViICAgICAgIDcuNTAgICAgMiAgLT4gNzUwCitkZHNjYjA5NiBzY2FsZWIgICAgICAtNy41MCAgICAyICAtPiAtNzUwCitkZHNjYjA5NyBzY2FsZWIgICAgICAgNy41MDAgICAyICAtPiA3NTAuMAorZGRzY2IwOTggc2NhbGViICAgICAgLTcuNTAwICAgMiAgLT4gLTc1MC4wCisKKy0tIHplcm9zCitkZHNjYjExMSBzY2FsZWIgICAgICAgICAgMCAgMSAtPiAwRSsxCitkZHNjYjExMiBzY2FsZWIgICAgICAgICAtMCAgMiAtPiAtMEUrMgorZGRzY2IxMTMgc2NhbGViICAgICAgIDBFKzQgIDMgLT4gMEUrNworZGRzY2IxMTQgc2NhbGViICAgICAgLTBFKzQgIDQgLT4gLTBFKzgKK2Rkc2NiMTE1IHNjYWxlYiAgICAgMC4wMDAwICA1IC0+IDBFKzEKK2Rkc2NiMTE2IHNjYWxlYiAgICAtMC4wMDAwICA2IC0+IC0wRSsyCitkZHNjYjExNyBzY2FsZWIgICAgICAwRS0xNDEgNyAtPiAwRS0xMzQKK2Rkc2NiMTE4IHNjYWxlYiAgICAgLTBFLTE0MSA4IC0+IC0wRS0xMzMKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Rkc2NiMTMyIHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgKzM4NCAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rkc2NiMTMzIHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgKzEwIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rkc2NiMTM0IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgKzEgIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rkc2NiMTM1IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIDAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2Rkc2NiMTM2IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLTEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODMKK2Rkc2NiMTM3IHNjYWxlYiAgMUUtMzgzICAgICAgICAgICArMSAgLT4gMUUtMzgyCitkZHNjYjEzOCBzY2FsZWIgIDFFLTM4MyAgICAgICAgICAgLTAgIC0+IDFFLTM4MworZGRzY2IxMzkgc2NhbGViICAxRS0zODMgICAgICAgICAgIC0xICAtPiAxRS0zODQgICAgICAgICAgU3Vibm9ybWFsCitkZHNjYjE0MCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICsxICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgyCitkZHNjYjE0MSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZHNjYjE0MiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMTQzIHNjYWxlYiAgMUUtMzk4ICAgICAgICAgICsxICAtPiAxRS0zOTcgICAgICAgICAgU3Vibm9ybWFsCitkZHNjYjE0NCBzY2FsZWIgIDFFLTM5OCAgICAgICAgICAtMCAgLT4gMUUtMzk4ICAgICAgICAgU3Vibm9ybWFsCitkZHNjYjE0NSBzY2FsZWIgIDFFLTM5OCAgICAgICAgICAtMSAgLT4gMEUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkZHNjYjE1MCBzY2FsZWIgIC0xRS0zOTggICAgICAgICArMSAgLT4gLTFFLTM5NyAgICAgICAgIFN1Ym5vcm1hbAorZGRzY2IxNTEgc2NhbGViICAtMUUtMzk4ICAgICAgICAgLTAgIC0+IC0xRS0zOTggICAgICAgIFN1Ym5vcm1hbAorZGRzY2IxNTIgc2NhbGViICAtMUUtMzk4ICAgICAgICAgLTEgIC0+IC0wRS0zOTggICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Rkc2NiMTUzIHNjYWxlYiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgKzEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgyCitkZHNjYjE1NCBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICswICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworZGRzY2IxNTUgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZAorZGRzY2IxNTYgc2NhbGViICAtMUUtMzgzICAgICAgICAgICsxICAtPiAtMUUtMzgyCitkZHNjYjE1NyBzY2FsZWIgIC0xRS0zODMgICAgICAgICAgLTAgIC0+IC0xRS0zODMKK2Rkc2NiMTU4IHNjYWxlYiAgLTFFLTM4MyAgICAgICAgICAtMSAgLT4gLTFFLTM4NCAgICAgICAgICBTdWJub3JtYWwKK2Rkc2NiMTU5IHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkZHNjYjE2MCBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICswICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorZGRzY2IxNjEgc2NhbGViICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODMKK2Rkc2NiMTYyIHNjYWxlYiAgLTlFKzM4NCAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rkc2NiMTYzIHNjYWxlYiAgLTFFKzM4NCAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gc29tZSBPcmlnYW1pCistLSAodGhlc2UgY2hlY2sgdGhhdCBvdmVyZmxvdyBpcyBiZWluZyBkb25lIGNvcnJlY3RseSkKK2Rkc2NiMTcxIHNjYWxlYiAgIDEwMDBFKzM2NSAgKzEgLT4gMS4wMDBFKzM2OQorZGRzY2IxNzIgc2NhbGViICAgMTAwMEUrMzY2ICArMSAtPiAxLjAwMEUrMzcwCitkZHNjYjE3MyBzY2FsZWIgICAxMDAwRSszNjcgICsxIC0+IDEuMDAwRSszNzEKK2Rkc2NiMTc0IHNjYWxlYiAgIDEwMDBFKzM2OCAgKzEgLT4gMS4wMDBFKzM3MgorZGRzY2IxNzUgc2NhbGViICAgMTAwMEUrMzY5ICArMSAtPiAxLjAwMDBFKzM3MyAgICAgICAgICAgICAgICAgIENsYW1wZWQKK2Rkc2NiMTc2IHNjYWxlYiAgIDEwMDBFKzM3MCAgKzEgLT4gMS4wMDAwMEUrMzc0ICAgICAgICAgICAgICAgICBDbGFtcGVkCitkZHNjYjE3NyBzY2FsZWIgICAxMDAwRSszNzEgICsxIC0+IDEuMDAwMDAwRSszNzUgICAgICAgICAgICAgICAgQ2xhbXBlZAorZGRzY2IxNzggc2NhbGViICAgMTAwMEUrMzcyICArMSAtPiAxLjAwMDAwMDBFKzM3NiAgICAgICAgICAgICAgIENsYW1wZWQKK2Rkc2NiMTc5IHNjYWxlYiAgIDEwMDBFKzM3MyAgKzEgLT4gMS4wMDAwMDAwMEUrMzc3ICAgICAgICAgICAgICBDbGFtcGVkCitkZHNjYjE4MCBzY2FsZWIgICAxMDAwRSszNzQgICsxIC0+IDEuMDAwMDAwMDAwRSszNzggICAgICAgICAgICAgQ2xhbXBlZAorZGRzY2IxODEgc2NhbGViICAgMTAwMEUrMzc1ICArMSAtPiAxLjAwMDAwMDAwMDBFKzM3OSAgICAgICAgICAgIENsYW1wZWQKK2Rkc2NiMTgyIHNjYWxlYiAgIDEwMDBFKzM3NiAgKzEgLT4gMS4wMDAwMDAwMDAwMEUrMzgwICAgICAgICAgICBDbGFtcGVkCitkZHNjYjE4MyBzY2FsZWIgICAxMDAwRSszNzcgICsxIC0+IDEuMDAwMDAwMDAwMDAwRSszODEgICAgICAgICAgQ2xhbXBlZAorZGRzY2IxODQgc2NhbGViICAgMTAwMEUrMzc4ICArMSAtPiAxLjAwMDAwMDAwMDAwMDBFKzM4MiAgICAgICAgIENsYW1wZWQKK2Rkc2NiMTg1IHNjYWxlYiAgIDEwMDBFKzM3OSAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMEUrMzgzICAgICAgICBDbGFtcGVkCitkZHNjYjE4NiBzY2FsZWIgICAxMDAwRSszODAgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSszODQgICAgICAgQ2xhbXBlZAorZGRzY2IxODcgc2NhbGViICAgMTAwMEUrMzgxICArMSAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gYW5kIGEgZmV3IG1vcmUgc3Vibm9ybWFsIHRydW5jYXRpb25zCistLSAodGhlc2UgY2hlY2sgdGhhdCB1bmRlcmZsb3cgaXMgYmVpbmcgZG9uZSBjb3JyZWN0bHkpCitkZHNjYjIwMSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCitkZHNjYjIwMiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjAzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTIgIC0+IDEuMDAwMDAwMDAwMDAwMEUtMzg1IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIwNCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0zICAtPiAxLjAwMDAwMDAwMDAwMEUtMzg2IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIwNSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC00ICAtPiAxLjAwMDAwMDAwMDAwRS0zODcgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjA2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTUgIC0+IDEuMDAwMDAwMDAwMEUtMzg4IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIwNyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC02ICAtPiAxLjAwMDAwMDAwMEUtMzg5IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIwOCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC03ICAtPiAxLjAwMDAwMDAwRS0zOTAgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjA5IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTggIC0+IDEuMDAwMDAwMEUtMzkxIFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIxMCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC05ICAtPiAxLjAwMDAwMEUtMzkyIFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIxMSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xMCAtPiAxLjAwMDAwRS0zOTMgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjEyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTExIC0+IDEuMDAwMEUtMzk0IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIxMyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xMiAtPiAxLjAwMEUtMzk1IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIxNCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xMyAtPiAxLjAwRS0zOTYgU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjE1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTE0IC0+IDEuMEUtMzk3IFN1Ym5vcm1hbCBSb3VuZGVkCitkZHNjYjIxNiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xNSAtPiAxRS0zOTggU3Vibm9ybWFsIFJvdW5kZWQKK2Rkc2NiMjE3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTE2IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkZHNjYjIxOCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xNyAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2hpZnQuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTaGlmdC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmEyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2hpZnQuZGVjVGVzdApAQCAtMCwwICsxLDI2MiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkZFNoaWZ0LmRlY1Rlc3QgLS0gc2hpZnQgZGVjRG91YmxlIGNvZWZmaWNpZW50IGxlZnQgb3IgcmlnaHQgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2Rkc2hpMDAxIHNoaWZ0ICAgICAgICAgICAgICAgICAwICAgIDAgIC0+ICAwCitkZHNoaTAwMiBzaGlmdCAgICAgICAgICAgICAgICAgMCAgICAyICAtPiAgMAorZGRzaGkwMDMgc2hpZnQgICAgICAgICAgICAgICAgIDEgICAgMiAgLT4gIDEwMAorZGRzaGkwMDQgc2hpZnQgICAgICAgICAgICAgICAgIDEgICAxNSAgLT4gIDEwMDAwMDAwMDAwMDAwMDAKK2Rkc2hpMDA1IHNoaWZ0ICAgICAgICAgICAgICAgICAxICAgMTYgIC0+ICAwCitkZHNoaTAwNiBzaGlmdCAgICAgICAgICAgICAgICAgMSAgIC0xICAtPiAgMAorZGRzaGkwMDcgc2hpZnQgICAgICAgICAgICAgICAgIDAgICAtMiAgLT4gIDAKK2Rkc2hpMDA4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgLTEgIC0+ICAxMjM0NTY3ODkwMTIzNDUKK2Rkc2hpMDA5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+ICAxCitkZHNoaTAxMCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAgMAorZGRzaGkwMTEgc2hpZnQgIDk5MzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gIDkKK2Rkc2hpMDEyIHNoaWZ0ICA5OTM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+ICAwCisKKy0tIHJocyBtdXN0IGJlIGFuIGludGVnZXIKK2Rkc2hpMDE1IHNoaWZ0ICAgICAgICAxICAgIDEuNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpMDE2IHNoaWZ0ICAgICAgICAxICAgIDEuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpMDE3IHNoaWZ0ICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpMDE4IHNoaWZ0ICAgICAgICAxICAgIDAuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpMDE5IHNoaWZ0ICAgICAgICAxICAgIDFFKzEgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpMDIwIHNoaWZ0ICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpMDIxIHNoaWZ0ICAgICAgICAxICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpMDIyIHNoaWZ0ICAgICAgICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGFuZCB8cmhzfCA8PSBwcmVjaXNpb24KK2Rkc2hpMDI1IHNoaWZ0ICAgICAgICAxICAgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpMDI2IHNoaWZ0ICAgICAgICAxICAgIC0xNyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpMDI3IHNoaWZ0ICAgICAgICAxICAgICAxNyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpMDI4IHNoaWZ0ICAgICAgICAxICAgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gZnVsbCBzaGlmdGluZyBwYXR0ZXJuCitkZHNoaTAzMCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNiAgLT4gMAorZGRzaGkwMzEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTUgIC0+IDEKK2Rkc2hpMDMyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE0ICAtPiAxMgorZGRzaGkwMzMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTMgIC0+IDEyMworZGRzaGkwMzQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTIgIC0+IDEyMzQKK2Rkc2hpMDM1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTExICAtPiAxMjM0NQorZGRzaGkwMzYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTAgIC0+IDEyMzQ1NgorZGRzaGkwMzcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtOSAgIC0+IDEyMzQ1NjcKK2Rkc2hpMDM4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTggICAtPiAxMjM0NTY3OAorZGRzaGkwMzkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNyAgIC0+IDEyMzQ1Njc4OQorZGRzaGkwNDAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNiAgIC0+IDEyMzQ1Njc4OTAKK2Rkc2hpMDQxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTUgICAtPiAxMjM0NTY3ODkwMQorZGRzaGkwNDIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNCAgIC0+IDEyMzQ1Njc4OTAxMgorZGRzaGkwNDMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMyAgIC0+IDEyMzQ1Njc4OTAxMjMKK2Rkc2hpMDQ0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTIgICAtPiAxMjM0NTY3ODkwMTIzNAorZGRzaGkwNDUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMSAgIC0+IDEyMzQ1Njc4OTAxMjM0NQorZGRzaGkwNDYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYKKworZGRzaGkwNDcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2Rkc2hpMDQ4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTAxMjM0NTYwCitkZHNoaTA0OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsyICAgLT4gMzQ1Njc4OTAxMjM0NTYwMAorZGRzaGkwNTAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMyAgIC0+IDQ1Njc4OTAxMjM0NTYwMDAKK2Rkc2hpMDUxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzQgICAtPiA1Njc4OTAxMjM0NTYwMDAwCitkZHNoaTA1MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs1ICAgLT4gNjc4OTAxMjM0NTYwMDAwMAorZGRzaGkwNTMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNiAgIC0+IDc4OTAxMjM0NTYwMDAwMDAKK2Rkc2hpMDU0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzcgICAtPiA4OTAxMjM0NTYwMDAwMDAwCitkZHNoaTA1NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs4ICAgLT4gOTAxMjM0NTYwMDAwMDAwMAorZGRzaGkwNTYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArOSAgIC0+ICAxMjM0NTYwMDAwMDAwMDAKK2Rkc2hpMDU3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEwICAtPiAxMjM0NTYwMDAwMDAwMDAwCitkZHNoaTA1OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMSAgLT4gMjM0NTYwMDAwMDAwMDAwMAorZGRzaGkwNTkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTIgIC0+IDM0NTYwMDAwMDAwMDAwMDAKK2Rkc2hpMDYwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEzICAtPiA0NTYwMDAwMDAwMDAwMDAwCitkZHNoaTA2MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNCAgLT4gNTYwMDAwMDAwMDAwMDAwMAorZGRzaGkwNjIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTUgIC0+IDYwMDAwMDAwMDAwMDAwMDAKK2Rkc2hpMDYzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE2ICAtPiAwCisKKy0tIHplcm9zCitkZHNoaTA3MCBzaGlmdCAgMEUtMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRS0xMAorZGRzaGkwNzEgc2hpZnQgIDBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUtMTAKK2Rkc2hpMDcyIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgIDAuMDAwCitkZHNoaTA3MyBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgIC05ICAgLT4gICAwLjAwMAorZGRzaGkwNzQgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUrMTAKK2Rkc2hpMDc1IHNoaWZ0ICAwRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFKzEwCitkZHNoaTA3NiBzaGlmdCAtMEUtMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRS0xMAorZGRzaGkwNzcgc2hpZnQgLTBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUtMTAKK2Rkc2hpMDc4IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgLTAuMDAwCitkZHNoaTA3OSBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgIC05ICAgLT4gIC0wLjAwMAorZGRzaGkwODAgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUrMTAKK2Rkc2hpMDgxIHNoaWZ0IC0wRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFKzEwCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkZHNoaTE0MSBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTEgIC0+IDkuOTk5OTk5OTk5OTk5OTlFKzM4MworZGRzaGkxNDIgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xNSAtPiA5RSszNjkKK2Rkc2hpMTQzIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTBFKzM4NAorZGRzaGkxNDQgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxNSAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0CitkZHNoaTE0NSBzaGlmdCAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IDBFLTM4MworZGRzaGkxNDYgc2hpZnQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAwRS0zODMKK2Rkc2hpMTQ3IHNoaWZ0ICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS0zODIKK2Rkc2hpMTQ4IHNoaWZ0ICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAgMTUgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM2OAorZGRzaGkxNTEgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQKK2Rkc2hpMTUyIHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gMUUtMzk4CitkZHNoaTE1MyBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IDBFLTM5OAorZGRzaGkxNTQgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAwRS0zOTgKK2Rkc2hpMTU1IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHNoaTE1NiBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTE1IC0+IDlFLTM5OAorZGRzaGkxNTcgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAwRS0zOTgKK2Rkc2hpMTU4IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gMEUtMzk4CitkZHNoaTE2MCBzaGlmdCAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IDBFLTM5OAorZGRzaGkxNjEgc2hpZnQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAwRS0zOTgKK2Rkc2hpMTYyIHNoaWZ0ICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS0zOTcKK2Rkc2hpMTYzIHNoaWZ0ICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAgMTUgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworLS0gIG5lZ2F0aXZlcworZGRzaGkxNzEgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OUUrMzgzCitkZHNoaTE3MiBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTE1IC0+IC05RSszNjkKK2Rkc2hpMTczIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTkwRSszODQKK2Rkc2hpMTc0IHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMTUgLT4gLTkuMDAwMDAwMDAwMDAwMDAwRSszODQKK2Rkc2hpMTc1IHNoaWZ0IC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTBFLTM4MworZGRzaGkxNzYgc2hpZnQgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAtMEUtMzgzCitkZHNoaTE3NyBzaGlmdCAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTM4MgorZGRzaGkxNzggc2hpZnQgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM2OAorZGRzaGkxODEgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMEUtMzg0CitkZHNoaTE4MiBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTE1IC0+IC0xRS0zOTgKK2Rkc2hpMTgzIHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gLTBFLTM5OAorZGRzaGkxODQgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAtMEUtMzk4CitkZHNoaTE4NSBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IC05LjAwMDAwMDAwMDAwMDAwRS0zODQKK2Rkc2hpMTg2IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gLTlFLTM5OAorZGRzaGkxODcgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAtMEUtMzk4CitkZHNoaTE4OCBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IC0wRS0zOTgKK2Rkc2hpMTkwIHNoaWZ0IC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTBFLTM5OAorZGRzaGkxOTEgc2hpZnQgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAtMEUtMzk4CitkZHNoaTE5MiBzaGlmdCAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTM5NworZGRzaGkxOTMgc2hpZnQgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MworCistLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpCitkZHNoaTIwMSBzaGlmdCAgICAgICAgICAgICAgICAtMCAgICAwICAtPiAtMAorZGRzaGkyMDIgc2hpZnQgICAgICAgICAgICAgICAgLTAgICAgMiAgLT4gLTAKK2Rkc2hpMjAzIHNoaWZ0ICAgICAgICAgICAgICAgIC0xICAgIDIgIC0+IC0xMDAKK2Rkc2hpMjA0IHNoaWZ0ICAgICAgICAgICAgICAgIC0xICAgMTUgIC0+IC0xMDAwMDAwMDAwMDAwMDAwCitkZHNoaTIwNSBzaGlmdCAgICAgICAgICAgICAgICAtMSAgIDE2ICAtPiAtMAorZGRzaGkyMDYgc2hpZnQgICAgICAgICAgICAgICAgLTEgICAtMSAgLT4gLTAKK2Rkc2hpMjA3IHNoaWZ0ICAgICAgICAgICAgICAgIC0wICAgLTIgIC0+IC0wCitkZHNoaTIwOCBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xICAtPiAtMTIzNDU2Nzg5MDEyMzQ1CitkZHNoaTIwOSBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAtMQorZGRzaGkyMTAgc2hpZnQgLTEyMzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gLTAKK2Rkc2hpMjExIHNoaWZ0IC05OTM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+IC05CitkZHNoaTIxMiBzaGlmdCAtOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAtMAorCisKKy0tIFNwZWNpYWxzOyBOYU5zIGFyZSBoYW5kbGVkIGFzIHVzdWFsCitkZHNoaTc4MSBzaGlmdCAtSW5mICAtOCAgICAgLT4gLUluZmluaXR5CitkZHNoaTc4MiBzaGlmdCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkZHNoaTc4MyBzaGlmdCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitkZHNoaTc4NCBzaGlmdCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkZHNoaTc4NSBzaGlmdCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkZHNoaTc4NiBzaGlmdCAtSW5mICAgOCAgICAgLT4gLUluZmluaXR5CitkZHNoaTc4NyBzaGlmdCAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTc4OCBzaGlmdCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTc4OSBzaGlmdCAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTc5MCBzaGlmdCAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTc5MSBzaGlmdCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTc5MiBzaGlmdCAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTc5MyBzaGlmdCAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTc5NCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rkc2hpODAwIHNoaWZ0ICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODAxIHNoaWZ0ICBJbmYgIC04ICAgICAtPiBJbmZpbml0eQorZGRzaGk4MDIgc2hpZnQgIEluZiAgLTEgICAgIC0+IEluZmluaXR5CitkZHNoaTgwMyBzaGlmdCAgSW5mICAtMCAgICAgLT4gSW5maW5pdHkKK2Rkc2hpODA0IHNoaWZ0ICBJbmYgICAwICAgICAtPiBJbmZpbml0eQorZGRzaGk4MDUgc2hpZnQgIEluZiAgIDEgICAgIC0+IEluZmluaXR5CitkZHNoaTgwNiBzaGlmdCAgSW5mICAgOCAgICAgLT4gSW5maW5pdHkKK2Rkc2hpODA3IHNoaWZ0ICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODA4IHNoaWZ0IC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODA5IHNoaWZ0IC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODEwIHNoaWZ0IC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODExIHNoaWZ0IC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODEyIHNoaWZ0ICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODEzIHNoaWZ0ICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODE0IHNoaWZ0ICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODE1IHNoaWZ0ICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGRzaGk4MjEgc2hpZnQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2Rkc2hpODIyIHNoaWZ0ICBOYU4gLTEwMDAgICAtPiAgTmFOCitkZHNoaTgyMyBzaGlmdCAgTmFOIC0xICAgICAgLT4gIE5hTgorZGRzaGk4MjQgc2hpZnQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2Rkc2hpODI1IHNoaWZ0ICBOYU4gIDAgICAgICAtPiAgTmFOCitkZHNoaTgyNiBzaGlmdCAgTmFOICAxICAgICAgLT4gIE5hTgorZGRzaGk4Mjcgc2hpZnQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2Rkc2hpODI4IHNoaWZ0ICBOYU4gIEluZiAgICAtPiAgTmFOCitkZHNoaTgyOSBzaGlmdCAgTmFOICBOYU4gICAgLT4gIE5hTgorZGRzaGk4MzAgc2hpZnQgLUluZiAgTmFOICAgIC0+ICBOYU4KK2Rkc2hpODMxIHNoaWZ0IC0xMDAwIE5hTiAgICAtPiAgTmFOCitkZHNoaTgzMiBzaGlmdCAtMSAgICBOYU4gICAgLT4gIE5hTgorZGRzaGk4MzMgc2hpZnQgLTAgICAgTmFOICAgIC0+ICBOYU4KK2Rkc2hpODM0IHNoaWZ0ICAwICAgIE5hTiAgICAtPiAgTmFOCitkZHNoaTgzNSBzaGlmdCAgMSAgICBOYU4gICAgLT4gIE5hTgorZGRzaGk4MzYgc2hpZnQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2Rkc2hpODM3IHNoaWZ0ICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2Rkc2hpODQxIHNoaWZ0ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NDIgc2hpZnQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg0MyBzaGlmdCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODQ0IHNoaWZ0ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NDUgc2hpZnQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg0NiBzaGlmdCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODQ3IHNoaWZ0ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NDggc2hpZnQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg0OSBzaGlmdCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODUwIHNoaWZ0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NTEgc2hpZnQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg1MiBzaGlmdCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODUzIHNoaWZ0IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NTQgc2hpZnQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg1NSBzaGlmdCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODU2IHNoaWZ0ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NTcgc2hpZnQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg1OCBzaGlmdCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODU5IHNoaWZ0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZHNoaTg2MSBzaGlmdCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2Rkc2hpODYyIHNoaWZ0ICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorZGRzaGk4NjMgc2hpZnQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitkZHNoaTg2NCBzaGlmdCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2Rkc2hpODY1IHNoaWZ0ICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorZGRzaGk4NjYgc2hpZnQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitkZHNoaTg2NyBzaGlmdCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2Rkc2hpODY4IHNoaWZ0ICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorZGRzaGk4Njkgc2hpZnQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZGRzaGk4NzEgc2hpZnQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODcyIHNoaWZ0ICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg3MyBzaGlmdCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4NzQgc2hpZnQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODc1IHNoaWZ0ICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg3NiBzaGlmdCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4Nzcgc2hpZnQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODc4IHNoaWZ0IC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg3OSBzaGlmdCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4ODAgc2hpZnQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc2hpODgxIHNoaWZ0ICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCitkZHNoaTg4MiBzaGlmdCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitkZHNoaTg4MyBzaGlmdCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZGRzaGk4ODQgc2hpZnQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorZGRzaGk4ODUgc2hpZnQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTdWJ0cmFjdC5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFN1YnRyYWN0LmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViYzQ4NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTdWJ0cmFjdC5kZWNUZXN0CkBAIC0wLDAgKzEsNjI5IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkU3VidHJhY3QuZGVjVGVzdCAtLSBkZWNEb3VibGUgc3VidHJhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBzZXQgb2YgdGVzdHMgYXJlIGZvciBkZWNEb3VibGVzIG9ubHk7IGFsbCBhcmd1bWVudHMgYXJlCistLSByZXByZXNlbnRhYmxlIGluIGEgZGVjRG91YmxlCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddCitkZHN1YjAwMSBzdWJ0cmFjdCAgMCAgIDAgIC0+ICcwJworZGRzdWIwMDIgc3VidHJhY3QgIDEgICAxICAtPiAnMCcKK2Rkc3ViMDAzIHN1YnRyYWN0ICAxICAgMiAgLT4gJy0xJworZGRzdWIwMDQgc3VidHJhY3QgIDIgICAxICAtPiAnMScKK2Rkc3ViMDA1IHN1YnRyYWN0ICAyICAgMiAgLT4gJzAnCitkZHN1YjAwNiBzdWJ0cmFjdCAgMyAgIDIgIC0+ICcxJworZGRzdWIwMDcgc3VidHJhY3QgIDIgICAzICAtPiAnLTEnCisKK2Rkc3ViMDExIHN1YnRyYWN0IC0wICAgMCAgLT4gJy0wJworZGRzdWIwMTIgc3VidHJhY3QgLTEgICAxICAtPiAnLTInCitkZHN1YjAxMyBzdWJ0cmFjdCAtMSAgIDIgIC0+ICctMycKK2Rkc3ViMDE0IHN1YnRyYWN0IC0yICAgMSAgLT4gJy0zJworZGRzdWIwMTUgc3VidHJhY3QgLTIgICAyICAtPiAnLTQnCitkZHN1YjAxNiBzdWJ0cmFjdCAtMyAgIDIgIC0+ICctNScKK2Rkc3ViMDE3IHN1YnRyYWN0IC0yICAgMyAgLT4gJy01JworCitkZHN1YjAyMSBzdWJ0cmFjdCAgMCAgLTAgIC0+ICcwJworZGRzdWIwMjIgc3VidHJhY3QgIDEgIC0xICAtPiAnMicKK2Rkc3ViMDIzIHN1YnRyYWN0ICAxICAtMiAgLT4gJzMnCitkZHN1YjAyNCBzdWJ0cmFjdCAgMiAgLTEgIC0+ICczJworZGRzdWIwMjUgc3VidHJhY3QgIDIgIC0yICAtPiAnNCcKK2Rkc3ViMDI2IHN1YnRyYWN0ICAzICAtMiAgLT4gJzUnCitkZHN1YjAyNyBzdWJ0cmFjdCAgMiAgLTMgIC0+ICc1JworCitkZHN1YjAzMCBzdWJ0cmFjdCAgMTEgIDEgIC0+IDEwCitkZHN1YjAzMSBzdWJ0cmFjdCAgMTAgIDEgIC0+ICA5CitkZHN1YjAzMiBzdWJ0cmFjdCAgOSAgIDEgIC0+ICA4CitkZHN1YjAzMyBzdWJ0cmFjdCAgMSAgIDEgIC0+ICAwCitkZHN1YjAzNCBzdWJ0cmFjdCAgMCAgIDEgIC0+IC0xCitkZHN1YjAzNSBzdWJ0cmFjdCAtMSAgIDEgIC0+IC0yCitkZHN1YjAzNiBzdWJ0cmFjdCAtOSAgIDEgIC0+IC0xMAorZGRzdWIwMzcgc3VidHJhY3QgLTEwICAxICAtPiAtMTEKK2Rkc3ViMDM4IHN1YnRyYWN0IC0xMSAgMSAgLT4gLTEyCisKK2Rkc3ViMDQwIHN1YnRyYWN0ICc1Ljc1JyAnMy4zJyAgLT4gJzIuNDUnCitkZHN1YjA0MSBzdWJ0cmFjdCAnNScgICAgJy0zJyAgIC0+ICc4JworZGRzdWIwNDIgc3VidHJhY3QgJy01JyAgICctMycgICAtPiAnLTInCitkZHN1YjA0MyBzdWJ0cmFjdCAnLTcnICAgJzIuNScgIC0+ICctOS41JworZGRzdWIwNDQgc3VidHJhY3QgJzAuNycgICcwLjMnICAtPiAnMC40JworZGRzdWIwNDUgc3VidHJhY3QgJzEuMycgICcwLjMnICAtPiAnMS4wJworZGRzdWIwNDYgc3VidHJhY3QgJzEuMjUnICcxLjI1JyAtPiAnMC4wMCcKKworZGRzdWIwNTAgc3VidHJhY3QgJzEuMjM0NTY3ODknICAgICcxLjAwMDAwMDAwJyAtPiAnMC4yMzQ1Njc4OScKK2Rkc3ViMDUxIHN1YnRyYWN0ICcxLjIzNDU2Nzg5JyAgICAnMS4wMDAwMDA4OScgLT4gJzAuMjM0NTY3MDAnCisKK2Rkc3ViMDYwIHN1YnRyYWN0ICc3MCcgICAgJzEwMDAwZSsxNicgLT4gJy0xLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRzdWIwNjEgc3VidHJhY3QgJzcwMCcgICAgJzEwMDAwZSsxNicgLT4gJy0xLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRzdWIwNjIgc3VidHJhY3QgJzcwMDAnICAgICcxMDAwMGUrMTYnIC0+ICctOS45OTk5OTk5OTk5OTk5OTlFKzE5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViMDYzIHN1YnRyYWN0ICc3MDAwMCcgICAgJzEwMDAwZSsxNicgLT4gJy05Ljk5OTk5OTk5OTk5OTk5M0UrMTknIFJvdW5kZWQKK2Rkc3ViMDY0IHN1YnRyYWN0ICc3MDAwMDAnICAgICcxMDAwMGUrMTYnIC0+ICctOS45OTk5OTk5OTk5OTk5MzBFKzE5JyBSb3VuZGVkCisgIC0tIHN5bW1ldHJ5OgorZGRzdWIwNjUgc3VidHJhY3QgJzEwMDAwZSsxNicgICAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViMDY2IHN1YnRyYWN0ICcxMDAwMGUrMTYnICAgICc3MDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZGRzdWIwNjcgc3VidHJhY3QgJzEwMDAwZSsxNicgICAgJzcwMDAnIC0+ICc5Ljk5OTk5OTk5OTk5OTk5OUUrMTknIEluZXhhY3QgUm91bmRlZAorZGRzdWIwNjggc3VidHJhY3QgJzEwMDAwZSsxNicgICAgJzcwMDAwJyAtPiAnOS45OTk5OTk5OTk5OTk5OTNFKzE5JyBSb3VuZGVkCitkZHN1YjA2OSBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAwMDAwJyAtPiAnOS45OTk5OTk5OTk5OTk5MzBFKzE5JyBSb3VuZGVkCisKKyAgLS0gc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzCitkZHN1YjA5MCBzdWJ0cmFjdCAnMDAuMCcgICAgJzAuMCcgIC0+ICcwLjAnCitkZHN1YjA5MSBzdWJ0cmFjdCAnMDAuMCcgICAgJzAuMDAnIC0+ICcwLjAwJworZGRzdWIwOTIgc3VidHJhY3QgJzAuMDAnICAgICcwMC4wJyAtPiAnMC4wMCcKK2Rkc3ViMDkzIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wMCcgLT4gJzAuMDAnCitkZHN1YjA5NCBzdWJ0cmFjdCAnMC4wMCcgICAgJzAwLjAnIC0+ICcwLjAwJworZGRzdWIwOTUgc3VidHJhY3QgJzMnICAgICcuMycgICAtPiAnMi43JworZGRzdWIwOTYgc3VidHJhY3QgJzMuJyAgICcuMycgICAtPiAnMi43JworZGRzdWIwOTcgc3VidHJhY3QgJzMuMCcgICcuMycgICAtPiAnMi43JworZGRzdWIwOTggc3VidHJhY3QgJzMuMDAnICcuMycgICAtPiAnMi43MCcKK2Rkc3ViMDk5IHN1YnRyYWN0ICczJyAgICAnMycgICAgLT4gJzAnCitkZHN1YjEwMCBzdWJ0cmFjdCAnMycgICAgJyszJyAgIC0+ICcwJworZGRzdWIxMDEgc3VidHJhY3QgJzMnICAgICctMycgICAtPiAnNicKK2Rkc3ViMTAyIHN1YnRyYWN0ICczJyAgICAnMC4zJyAgLT4gJzIuNycKK2Rkc3ViMTAzIHN1YnRyYWN0ICczLicgICAnMC4zJyAgLT4gJzIuNycKK2Rkc3ViMTA0IHN1YnRyYWN0ICczLjAnICAnMC4zJyAgLT4gJzIuNycKK2Rkc3ViMTA1IHN1YnRyYWN0ICczLjAwJyAnMC4zJyAgLT4gJzIuNzAnCitkZHN1YjEwNiBzdWJ0cmFjdCAnMycgICAgJzMuMCcgIC0+ICcwLjAnCitkZHN1YjEwNyBzdWJ0cmFjdCAnMycgICAgJyszLjAnIC0+ICcwLjAnCitkZHN1YjEwOCBzdWJ0cmFjdCAnMycgICAgJy0zLjAnIC0+ICc2LjAnCisKKy0tIHRoZSBhYm92ZSBhbGwgZnJvbSBhZGQ7IG1hc3NhZ2VkIGFuZCBleHRlbmRlZC4gIE5vdyBzb21lIG5ldyBvbmVzLi4uCistLSBbcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IgY29tcGFyaXNvbnNdCistLSBOQjogLXhFLTggYmVsb3cgd2VyZSBub24tZXhwb25lbnRzIHByZS1BTlNJIFgzLTI3NCwgYW5kIC0xRS03IG9yIDBFLTcKKy0tIHdpdGggaW5wdXQgcm91bmRpbmcuCitkZHN1YjEyMCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg0JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTVFLTgnCitkZHN1YjEyMSBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg1JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTRFLTgnCitkZHN1YjEyMiBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg2JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTNFLTgnCitkZHN1YjEyMyBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg3JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTJFLTgnCitkZHN1YjEyNCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg4JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTFFLTgnCitkZHN1YjEyNSBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg5JyAgICAnMTAuMjM0NTY3ODknICAtPiAnMEUtOCcKK2Rkc3ViMTI2IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTAnICAgICcxMC4yMzQ1Njc4OScgIC0+ICcxRS04JworZGRzdWIxMjcgc3VidHJhY3QgICcxMC4yMzQ1Njc5MScgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzJFLTgnCitkZHN1YjEyOCBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkyJyAgICAnMTAuMjM0NTY3ODknICAtPiAnM0UtOCcKK2Rkc3ViMTI5IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTMnICAgICcxMC4yMzQ1Njc4OScgIC0+ICc0RS04JworZGRzdWIxMzAgc3VidHJhY3QgICcxMC4yMzQ1Njc5NCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzVFLTgnCitkZHN1YjEzMSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzgxJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTVFLTgnCitkZHN1YjEzMiBzdWJ0cmFjdCAgJzEwLjIzNDU2NzgyJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTRFLTgnCitkZHN1YjEzMyBzdWJ0cmFjdCAgJzEwLjIzNDU2NzgzJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTNFLTgnCitkZHN1YjEzNCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg0JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTJFLTgnCitkZHN1YjEzNSBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg1JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTFFLTgnCitkZHN1YjEzNiBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg2JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnMEUtOCcKK2Rkc3ViMTM3IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODcnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcxRS04JworZGRzdWIxMzggc3VidHJhY3QgICcxMC4yMzQ1Njc4OCcgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzJFLTgnCitkZHN1YjEzOSBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg5JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnM0UtOCcKK2Rkc3ViMTQwIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTAnICAgICcxMC4yMzQ1Njc4NicgIC0+ICc0RS04JworZGRzdWIxNDEgc3VidHJhY3QgICcxMC4yMzQ1Njc5MScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzVFLTgnCitkZHN1YjE0MiBzdWJ0cmFjdCAgJzEnICAgICAgICAgICAgICAnMC45OTk5OTk5OTknICAtPiAnMUUtOScKK2Rkc3ViMTQzIHN1YnRyYWN0ICAnMC45OTk5OTk5OTknICAgICcxJyAgICAgICAgICAgIC0+ICctMUUtOScKK2Rkc3ViMTQ0IHN1YnRyYWN0ICAnLTEwLjIzNDU2NzgwJyAgICctMTAuMjM0NTY3ODYnIC0+ICc2RS04JworZGRzdWIxNDUgc3VidHJhY3QgICctMTAuMjM0NTY3OTAnICAgJy0xMC4yMzQ1Njc4NicgLT4gJy00RS04JworZGRzdWIxNDYgc3VidHJhY3QgICctMTAuMjM0NTY3OTEnICAgJy0xMC4yMzQ1Njc4NicgLT4gJy01RS04JworCistLSBhZGRpdGlvbmFsIHNjYWxlZCBhcml0aG1ldGljIHRlc3RzIFswLjk3IHByb2JsZW1dCitkZHN1YjE2MCBzdWJ0cmFjdCAnMCcgICAgICcuMScgICAgICAtPiAnLTAuMScKK2Rkc3ViMTYxIHN1YnRyYWN0ICcwMCcgICAgJy45Nzk4MycgIC0+ICctMC45Nzk4MycKK2Rkc3ViMTYyIHN1YnRyYWN0ICcwJyAgICAgJy45JyAgICAgIC0+ICctMC45JworZGRzdWIxNjMgc3VidHJhY3QgJzAnICAgICAnMC4xMDInICAgLT4gJy0wLjEwMicKK2Rkc3ViMTY0IHN1YnRyYWN0ICcwJyAgICAgJy40JyAgICAgIC0+ICctMC40JworZGRzdWIxNjUgc3VidHJhY3QgJzAnICAgICAnLjMwNycgICAgLT4gJy0wLjMwNycKK2Rkc3ViMTY2IHN1YnRyYWN0ICcwJyAgICAgJy40MzgyMicgIC0+ICctMC40MzgyMicKK2Rkc3ViMTY3IHN1YnRyYWN0ICcwJyAgICAgJy45MTEnICAgIC0+ICctMC45MTEnCitkZHN1YjE2OCBzdWJ0cmFjdCAnLjAnICAgICcuMDInICAgICAtPiAnLTAuMDInCitkZHN1YjE2OSBzdWJ0cmFjdCAnMDAnICAgICcuMzkyJyAgICAtPiAnLTAuMzkyJworZGRzdWIxNzAgc3VidHJhY3QgJzAnICAgICAnLjI2JyAgICAgLT4gJy0wLjI2JworZGRzdWIxNzEgc3VidHJhY3QgJzAnICAgICAnMC41MScgICAgLT4gJy0wLjUxJworZGRzdWIxNzIgc3VidHJhY3QgJzAnICAgICAnLjIyMzQnICAgLT4gJy0wLjIyMzQnCitkZHN1YjE3MyBzdWJ0cmFjdCAnMCcgICAgICcuMicgICAgICAtPiAnLTAuMicKK2Rkc3ViMTc0IHN1YnRyYWN0ICcuMCcgICAgJy4wMDA4JyAgIC0+ICctMC4wMDA4JworLS0gMC4gb24gbGVmdAorZGRzdWIxODAgc3VidHJhY3QgJzAuMCcgICAgICctLjEnICAgICAgLT4gJzAuMScKK2Rkc3ViMTgxIHN1YnRyYWN0ICcwLjAwJyAgICAnLS45Nzk4MycgIC0+ICcwLjk3OTgzJworZGRzdWIxODIgc3VidHJhY3QgJzAuMCcgICAgICctLjknICAgICAgLT4gJzAuOScKK2Rkc3ViMTgzIHN1YnRyYWN0ICcwLjAnICAgICAnLTAuMTAyJyAgIC0+ICcwLjEwMicKK2Rkc3ViMTg0IHN1YnRyYWN0ICcwLjAnICAgICAnLS40JyAgICAgIC0+ICcwLjQnCitkZHN1YjE4NSBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMzA3JyAgICAtPiAnMC4zMDcnCitkZHN1YjE4NiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uNDM4MjInICAtPiAnMC40MzgyMicKK2Rkc3ViMTg3IHN1YnRyYWN0ICcwLjAnICAgICAnLS45MTEnICAgIC0+ICcwLjkxMScKK2Rkc3ViMTg4IHN1YnRyYWN0ICcwLjAnICAgICAnLS4wMicgICAgIC0+ICcwLjAyJworZGRzdWIxODkgc3VidHJhY3QgJzAuMDAnICAgICctLjM5MicgICAgLT4gJzAuMzkyJworZGRzdWIxOTAgc3VidHJhY3QgJzAuMCcgICAgICctLjI2JyAgICAgLT4gJzAuMjYnCitkZHN1YjE5MSBzdWJ0cmFjdCAnMC4wJyAgICAgJy0wLjUxJyAgICAtPiAnMC41MScKK2Rkc3ViMTkyIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yMjM0JyAgIC0+ICcwLjIyMzQnCitkZHN1YjE5MyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMicgICAgICAtPiAnMC4yJworZGRzdWIxOTQgc3VidHJhY3QgJzAuMCcgICAgICctLjAwMDgnICAgLT4gJzAuMDAwOCcKKy0tIG5lZ2F0aXZlcyBvZiBzYW1lCitkZHN1YjIwMCBzdWJ0cmFjdCAnMCcgICAgICctLjEnICAgICAgLT4gJzAuMScKK2Rkc3ViMjAxIHN1YnRyYWN0ICcwMCcgICAgJy0uOTc5ODMnICAtPiAnMC45Nzk4MycKK2Rkc3ViMjAyIHN1YnRyYWN0ICcwJyAgICAgJy0uOScgICAgICAtPiAnMC45JworZGRzdWIyMDMgc3VidHJhY3QgJzAnICAgICAnLTAuMTAyJyAgIC0+ICcwLjEwMicKK2Rkc3ViMjA0IHN1YnRyYWN0ICcwJyAgICAgJy0uNCcgICAgICAtPiAnMC40JworZGRzdWIyMDUgc3VidHJhY3QgJzAnICAgICAnLS4zMDcnICAgIC0+ICcwLjMwNycKK2Rkc3ViMjA2IHN1YnRyYWN0ICcwJyAgICAgJy0uNDM4MjInICAtPiAnMC40MzgyMicKK2Rkc3ViMjA3IHN1YnRyYWN0ICcwJyAgICAgJy0uOTExJyAgICAtPiAnMC45MTEnCitkZHN1YjIwOCBzdWJ0cmFjdCAnLjAnICAgICctLjAyJyAgICAgLT4gJzAuMDInCitkZHN1YjIwOSBzdWJ0cmFjdCAnMDAnICAgICctLjM5MicgICAgLT4gJzAuMzkyJworZGRzdWIyMTAgc3VidHJhY3QgJzAnICAgICAnLS4yNicgICAgIC0+ICcwLjI2JworZGRzdWIyMTEgc3VidHJhY3QgJzAnICAgICAnLTAuNTEnICAgIC0+ICcwLjUxJworZGRzdWIyMTIgc3VidHJhY3QgJzAnICAgICAnLS4yMjM0JyAgIC0+ICcwLjIyMzQnCitkZHN1YjIxMyBzdWJ0cmFjdCAnMCcgICAgICctLjInICAgICAgLT4gJzAuMicKK2Rkc3ViMjE0IHN1YnRyYWN0ICcuMCcgICAgJy0uMDAwOCcgICAtPiAnMC4wMDA4JworCistLSBtb3JlIGZpeGVkLCBMSFMgc3dhcHMgW3JlYWxseSB0aGUgc2FtZSBhcyB0ZXN0Y2FzZXMgdW5kZXIgYWRkXQorZGRzdWIyMjAgc3VidHJhY3QgJy01NjI2N0UtMTInIDAgIC0+ICctNS42MjY3RS04JworZGRzdWIyMjEgc3VidHJhY3QgJy01NjI2N0UtMTEnIDAgIC0+ICctNS42MjY3RS03JworZGRzdWIyMjIgc3VidHJhY3QgJy01NjI2N0UtMTAnIDAgIC0+ICctMC4wMDAwMDU2MjY3JworZGRzdWIyMjMgc3VidHJhY3QgJy01NjI2N0UtOScgIDAgIC0+ICctMC4wMDAwNTYyNjcnCitkZHN1YjIyNCBzdWJ0cmFjdCAnLTU2MjY3RS04JyAgMCAgLT4gJy0wLjAwMDU2MjY3JworZGRzdWIyMjUgc3VidHJhY3QgJy01NjI2N0UtNycgIDAgIC0+ICctMC4wMDU2MjY3JworZGRzdWIyMjYgc3VidHJhY3QgJy01NjI2N0UtNicgIDAgIC0+ICctMC4wNTYyNjcnCitkZHN1YjIyNyBzdWJ0cmFjdCAnLTU2MjY3RS01JyAgMCAgLT4gJy0wLjU2MjY3JworZGRzdWIyMjggc3VidHJhY3QgJy01NjI2N0UtMicgIDAgIC0+ICctNTYyLjY3JworZGRzdWIyMjkgc3VidHJhY3QgJy01NjI2N0UtMScgIDAgIC0+ICctNTYyNi43JworZGRzdWIyMzAgc3VidHJhY3QgJy01NjI2N0UtMCcgIDAgIC0+ICctNTYyNjcnCistLSBzeW1tZXRyeSAuLi4KK2Rkc3ViMjQwIHN1YnRyYWN0IDAgJy01NjI2N0UtMTInICAtPiAnNS42MjY3RS04JworZGRzdWIyNDEgc3VidHJhY3QgMCAnLTU2MjY3RS0xMScgIC0+ICc1LjYyNjdFLTcnCitkZHN1YjI0MiBzdWJ0cmFjdCAwICctNTYyNjdFLTEwJyAgLT4gJzAuMDAwMDA1NjI2NycKK2Rkc3ViMjQzIHN1YnRyYWN0IDAgJy01NjI2N0UtOScgICAtPiAnMC4wMDAwNTYyNjcnCitkZHN1YjI0NCBzdWJ0cmFjdCAwICctNTYyNjdFLTgnICAgLT4gJzAuMDAwNTYyNjcnCitkZHN1YjI0NSBzdWJ0cmFjdCAwICctNTYyNjdFLTcnICAgLT4gJzAuMDA1NjI2NycKK2Rkc3ViMjQ2IHN1YnRyYWN0IDAgJy01NjI2N0UtNicgICAtPiAnMC4wNTYyNjcnCitkZHN1YjI0NyBzdWJ0cmFjdCAwICctNTYyNjdFLTUnICAgLT4gJzAuNTYyNjcnCitkZHN1YjI0OCBzdWJ0cmFjdCAwICctNTYyNjdFLTInICAgLT4gJzU2Mi42NycKK2Rkc3ViMjQ5IHN1YnRyYWN0IDAgJy01NjI2N0UtMScgICAtPiAnNTYyNi43JworZGRzdWIyNTAgc3VidHJhY3QgMCAnLTU2MjY3RS0wJyAgIC0+ICc1NjI2NycKKworLS0gbm93IHNvbWUgbW9yZSBmcm9tIHRoZSAnbmV3JyBhZGQKK2Rkc3ViMzAxIHN1YnRyYWN0ICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcwLjIzNDU2Nzg5JworZGRzdWIzMDIgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzAuMjM0NTY3NzgnCisKKy0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cworZGRzdWIzMjEgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnCitkZHN1YjMyMiBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5NycKK2Rkc3ViMzIzIHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMC45OTk2JworZGRzdWIzMjQgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcwLjk5OTUnCitkZHN1YjMyNSBzdWJ0cmFjdCAnMC45OTk4JyAgJy0wLjAwMDAnIC0+ICcwLjk5OTgnCitkZHN1YjMyNiBzdWJ0cmFjdCAnMC45OTk4JyAgJy0wLjAwMDEnIC0+ICcwLjk5OTknCitkZHN1YjMyNyBzdWJ0cmFjdCAnMC45OTk4JyAgJy0wLjAwMDInIC0+ICcxLjAwMDAnCitkZHN1YjMyOCBzdWJ0cmFjdCAnMC45OTk4JyAgJy0wLjAwMDMnIC0+ICcxLjAwMDEnCisKKy0tIGludGVybmFsIGJvdW5kYXJpZXMKK2Rkc3ViMzQ2IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3JyAgIC0+ICc5OTk5OTk5OTk5OTkzJworZGRzdWIzNDcgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwJyAgIC0+ICc5OTk5OTk5OTk5OTMwJworZGRzdWIzNDggc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMCcgICAtPiAnOTk5OTk5OTk5OTMwMCcKK2Rkc3ViMzQ5IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwJyAgIC0+ICc5OTk5OTk5OTkzMDAwJworZGRzdWIzNTAgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAwJyAgIC0+ICc5OTk5OTk5OTMwMDAwJworZGRzdWIzNTEgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAwMCcgICAtPiAnOTk5OTk5OTMwMDAwMCcKK2Rkc3ViMzUyIHN1YnRyYWN0ICc3JyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTk5OTkzJworZGRzdWIzNTMgc3VidHJhY3QgJzcwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTk5OTMwJworZGRzdWIzNTQgc3VidHJhY3QgJzcwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTMwMCcKK2Rkc3ViMzU1IHN1YnRyYWN0ICc3MDAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTkzMDAwJworZGRzdWIzNTYgc3VidHJhY3QgJzcwMDAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTMwMDAwJworZGRzdWIzNTcgc3VidHJhY3QgJzcwMDAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTMwMDAwMCcKKworLS0gemVybyBwcmVzZXJ2YXRpb24KK2Rkc3ViMzYxIHN1YnRyYWN0IDEgJzAuMDAwMScgLT4gJzAuOTk5OScKK2Rkc3ViMzYyIHN1YnRyYWN0IDEgJzAuMDAwMDEnIC0+ICcwLjk5OTk5JworZGRzdWIzNjMgc3VidHJhY3QgMSAnMC4wMDAwMDEnIC0+ICcwLjk5OTk5OScKK2Rkc3ViMzY0IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScKK2Rkc3ViMzY1IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjM2NiBzdWJ0cmFjdCAxICcwLjAwMDAwMDAwMDAwMDAwMDAwMScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQorZGRzdWIzNzAgc3VidHJhY3QgMSAgMCAgLT4gMQorZGRzdWIzNzEgc3VidHJhY3QgMSAwLiAgLT4gMQorZGRzdWIzNzIgc3VidHJhY3QgMSAgLjAgLT4gMS4wCitkZHN1YjM3MyBzdWJ0cmFjdCAxIDAuMCAtPiAxLjAKK2Rkc3ViMzc0IHN1YnRyYWN0ICAwICAxIC0+IC0xCitkZHN1YjM3NSBzdWJ0cmFjdCAwLiAgMSAtPiAtMQorZGRzdWIzNzYgc3VidHJhY3QgIC4wIDEgLT4gLTEuMAorZGRzdWIzNzcgc3VidHJhY3QgMC4wIDEgLT4gLTEuMAorCistLSBsZWFkaW5nIDAgZGlnaXQgYmVmb3JlIHJvdW5kCitkZHN1YjkxMCBzdWJ0cmFjdCAtMTAzNTE5MzYyIC01MTg5Nzk1NS4zIC0+IC01MTYyMTQwNi43CitkZHN1YjkxMSBzdWJ0cmFjdCAxNTk1NzkuNDQ0IDg5ODI3LjUyMjkgLT4gNjk3NTEuOTIxMQorCitkZHN1YjkyMCBzdWJ0cmFjdCAzMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU2NiAtPiAyOTkuOTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViOTIxIHN1YnRyYWN0IDMzMy4wMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAxMjM0NTY1IC0+IDMwMC4wMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZGRzdWI5MjIgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDEyMzQ1NjUgLT4gIDk5Ljk5OTk5OTk5OTk5OTk1CitkZHN1YjkyMyBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU2NCAtPiAgOTkuOTk5OTk5OTk5OTk5OTYKK2Rkc3ViOTI0IHN1YnRyYWN0IDEzMy4wMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAxMjM0NTQwIC0+IDEwMC4wMDAwMDAwMDAwMDAyIFJvdW5kZWQKK2Rkc3ViOTI1IHN1YnRyYWN0IDEzMy4wMDAwMDAwMTIzNDU2IDQzLjAwMDAwMDAxMjM0NTYwIC0+ICA5MC4wMDAwMDAwMDAwMDAwMAorZGRzdWI5MjYgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDEyMzQ1NjEgLT4gIDg5Ljk5OTk5OTk5OTk5OTk5CitkZHN1YjkyNyBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiA0My4wMDAwMDAwMTIzNDU2NiAtPiAgODkuOTk5OTk5OTk5OTk5OTQKK2Rkc3ViOTI4IHN1YnRyYWN0IDEwMS4wMDAwMDAwMTIzNDU2IDkxLjAwMDAwMDAxMjM0NTY2IC0+ICAgOS45OTk5OTk5OTk5OTk5NAorZGRzdWI5Mjkgc3VidHJhY3QgMTAxLjAwMDAwMDAxMjM0NTYgOTkuMDAwMDAwMDEyMzQ1NjYgLT4gICAxLjk5OTk5OTk5OTk5OTk0CisKKy0tIG1vcmUgTEhTIHN3YXBzIFt3ZXJlIGZpeGVkXQorZGRzdWIzOTAgc3VidHJhY3QgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnCitkZHN1YjM5MSBzdWJ0cmFjdCAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3JworZGRzdWIzOTIgc3VidHJhY3QgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3JworZGRzdWIzOTMgc3VidHJhY3QgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnCitkZHN1YjM5NCBzdWJ0cmFjdCAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycKK2Rkc3ViMzk1IHN1YnRyYWN0ICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3JworZGRzdWIzOTYgc3VidHJhY3QgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnCitkZHN1YjM5NyBzdWJ0cmFjdCAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3JworZGRzdWIzOTggc3VidHJhY3QgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcKK2Rkc3ViMzk5IHN1YnRyYWN0ICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycKK2Rkc3ViNDAwIHN1YnRyYWN0ICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnCitkZHN1YjQwMSBzdWJ0cmFjdCAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnCitkZHN1YjQwMiBzdWJ0cmFjdCAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScKK2Rkc3ViNDAzIHN1YnRyYWN0ICctNUUtMScgICAgICAgIDAgLT4gICctMC41JworZGRzdWI0MDQgc3VidHJhY3QgJy01RTAnICAgICAgICAgMCAtPiAgJy01JworZGRzdWI0MDUgc3VidHJhY3QgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcKK2Rkc3ViNDA2IHN1YnRyYWN0ICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJworZGRzdWI0MDcgc3VidHJhY3QgJy01RTE1JyAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJworZGRzdWI0MDggc3VidHJhY3QgJy01RTE2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICBSb3VuZGVkCitkZHN1YjQwOSBzdWJ0cmFjdCAnLTVFMTcnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgIFJvdW5kZWQKK2Rkc3ViNDEwIHN1YnRyYWN0ICctNUUxOCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgUm91bmRlZAorZGRzdWI0MTEgc3VidHJhY3QgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyBSb3VuZGVkCisKKy0tIG1vcmUgUkhTIHN3YXBzIFt3ZXJlIGZpeGVkXQorZGRzdWI0MjAgc3VidHJhY3QgMCAgJy01NjI2N0UtMTAnIC0+ICAnMC4wMDAwMDU2MjY3JworZGRzdWI0MjEgc3VidHJhY3QgMCAgJy01NjI2N0UtNicgIC0+ICAnMC4wNTYyNjcnCitkZHN1YjQyMiBzdWJ0cmFjdCAwICAnLTU2MjY3RS01JyAgLT4gICcwLjU2MjY3JworZGRzdWI0MjMgc3VidHJhY3QgMCAgJy01NjI2N0UtNCcgIC0+ICAnNS42MjY3JworZGRzdWI0MjQgc3VidHJhY3QgMCAgJy01NjI2N0UtMycgIC0+ICAnNTYuMjY3JworZGRzdWI0MjUgc3VidHJhY3QgMCAgJy01NjI2N0UtMicgIC0+ICAnNTYyLjY3JworZGRzdWI0MjYgc3VidHJhY3QgMCAgJy01NjI2N0UtMScgIC0+ICAnNTYyNi43JworZGRzdWI0Mjcgc3VidHJhY3QgMCAgJy01NjI2N0UtMCcgIC0+ICAnNTYyNjcnCitkZHN1YjQyOCBzdWJ0cmFjdCAwICAnLTVFLTEwJyAgICAgLT4gICc1RS0xMCcKK2Rkc3ViNDI5IHN1YnRyYWN0IDAgICctNUUtNycgICAgICAtPiAgJzVFLTcnCitkZHN1YjQzMCBzdWJ0cmFjdCAwICAnLTVFLTYnICAgICAgLT4gICcwLjAwMDAwNScKK2Rkc3ViNDMxIHN1YnRyYWN0IDAgICctNUUtNScgICAgICAtPiAgJzAuMDAwMDUnCitkZHN1YjQzMiBzdWJ0cmFjdCAwICAnLTVFLTQnICAgICAgLT4gICcwLjAwMDUnCitkZHN1YjQzMyBzdWJ0cmFjdCAwICAnLTVFLTEnICAgICAgLT4gICcwLjUnCitkZHN1YjQzNCBzdWJ0cmFjdCAwICAnLTVFMCcgICAgICAgLT4gICc1JworZGRzdWI0MzUgc3VidHJhY3QgMCAgJy01RTEnICAgICAgIC0+ICAnNTAnCitkZHN1YjQzNiBzdWJ0cmFjdCAwICAnLTVFNScgICAgICAgLT4gICc1MDAwMDAnCitkZHN1YjQzNyBzdWJ0cmFjdCAwICAnLTVFMTUnICAgICAgLT4gICc1MDAwMDAwMDAwMDAwMDAwJworZGRzdWI0Mzggc3VidHJhY3QgMCAgJy01RTE2JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgIFJvdW5kZWQKK2Rkc3ViNDM5IHN1YnRyYWN0IDAgICctNUUxNycgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwRSsxNycgICBSb3VuZGVkCitkZHN1YjQ0MCBzdWJ0cmFjdCAwICAnLTVFMTgnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMEUrMTgnICAgUm91bmRlZAorZGRzdWI0NDEgc3VidHJhY3QgMCAgJy01RTEwMCcgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQKKworCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLgorZGRzdWI0NjEgc3VidHJhY3QgJzFFKzE2JyAnMScgICAgICAgIC0+ICc5OTk5OTk5OTk5OTk5OTk5JworZGRzdWI0NjIgc3VidHJhY3QgJzFFKzEyJyAnLTEuMTExJyAgIC0+ICcxMDAwMDAwMDAwMDAxLjExMScKK2Rkc3ViNDYzIHN1YnRyYWN0ICcxLjExMScgICctMUUrMTInICAtPiAnMTAwMDAwMDAwMDAwMS4xMTEnCitkZHN1YjQ2NCBzdWJ0cmFjdCAnLTEnICAgICctMUUrMTYnICAgLT4gJzk5OTk5OTk5OTk5OTk5OTknCitkZHN1YjQ2NSBzdWJ0cmFjdCAnN0UrMTUnICcxJyAgICAgICAgLT4gJzY5OTk5OTk5OTk5OTk5OTknCitkZHN1YjQ2NiBzdWJ0cmFjdCAnN0UrMTInICctMS4xMTEnICAgLT4gJzcwMDAwMDAwMDAwMDEuMTExJworZGRzdWI0Njcgc3VidHJhY3QgJzEuMTExJyAgJy03RSsxMicgIC0+ICc3MDAwMDAwMDAwMDAxLjExMScKK2Rkc3ViNDY4IHN1YnRyYWN0ICctMScgICAgJy03RSsxNScgICAtPiAnNjk5OTk5OTk5OTk5OTk5OScKKworLS0gICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxIDIzNDU2Nzg5MDEyMzQ1CitkZHN1YjQ3MCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NjMnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjQ3MSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NjInIC0+ICcxLjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjQ3MiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NjEnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjQ3MyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NjAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjQ3NCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTknIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjQ3NSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTgnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjQ3NiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTcnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjQ3NyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZGRzdWI0Nzggc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5JworZGRzdWI0Nzkgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU0JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk4JworZGRzdWI0ODAgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTUzJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk3JworZGRzdWI0ODEgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTUyJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk2JworZGRzdWI0ODIgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTUxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk1JworZGRzdWI0ODMgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk0JworCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZGRzdWI1MDAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknCitkZHN1YjUwMSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUwMiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUwMyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUwNCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUwNSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUwNiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUwNyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUwOCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUwOSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUxMCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUxMSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUxMiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUxMyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUxNCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUxNSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUxNiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcKK2Rkc3ViNTE3IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTE4IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTE5IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZGRzdWI1MjAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknCitkZHN1YjUyMSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUyMiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUyMyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUyNCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUyNSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUyNiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUyNyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUyOCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUyOSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUzMCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUzMSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUzMiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUzMyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUzNCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUzNSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjUzNiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcKK2Rkc3ViNTM3IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTM4IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTM5IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitkZHN1YjU0MCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU0MSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjU0MiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkZHN1YjU1MCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScKK2Rkc3ViNTUxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTUyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTUzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTU0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTU1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTU2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTU3IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTU4IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTU5IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTYwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTYxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTYyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTYzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTY0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTY1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNTY2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JworZGRzdWI1Njcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1Njggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorZGRzdWI1Njkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorCistLSBzeW1tZXRyeS4uLgorcm91bmRpbmc6IGhhbGZfdXAKK2Rkc3ViNjAwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScKK2Rkc3ViNjAxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYwMiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MDMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjA0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYwNSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MDYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjA3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYwOCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MDkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjEwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYxMSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MTIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjEzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYxNCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MTUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjE2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcKK2Rkc3ViNjE3IHN1YnRyYWN0IDEuMDAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYxOCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MTkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZGRzdWI2MjAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JworZGRzdWI2MjEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjIyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYyMyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MjQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjI1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYyNiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZGRzdWI2Mjcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjI4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYyOSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MzAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjMxIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYzMiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MzMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjM0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYzNSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2MzYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JworZGRzdWI2Mzcgc3VidHJhY3QgMS4wMDAwMDAwMSAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjM4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjYzOSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2Rkc3ViNjQwIHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY0MSBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NDIgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2Rkc3ViNjUwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScKK2Rkc3ViNjUxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY1MiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NTMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjU0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY1NSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NTYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjU3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY1OCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NTkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjYwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY2MSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NjIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjYzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY2NCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2NjUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rkc3ViNjY2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcKK2Rkc3ViNjY3IHN1YnRyYWN0IDEuMDAwMDAwMDEgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitkZHN1YjY2OCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorZGRzdWI2Njkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKKworCistLSBsb3RzIG9mIGxlYWRpbmcgemVyb3MgaW4gaW50ZXJtZWRpYXRlIHJlc3VsdCwgYW5kIHNob3dpbmcgZWZmZWN0cyBvZgorLS0gaW5wdXQgcm91bmRpbmcgd291bGQgaGF2ZSBhZmZlY3RlZCB0aGUgZm9sbG93aW5nCityb3VuZGluZzogaGFsZl91cAorZGRzdWI2NzAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQorZGRzdWI2NzEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQorZGRzdWI2NzIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjEKK2Rkc3ViNjczIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41CitkZHN1YjY3NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQorCityb3VuZGluZzogaGFsZl9ldmVuCitkZHN1YjY4MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45CitkZHN1YjY4MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xCitkZHN1YjY4MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQorZGRzdWI2ODMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUKK2Rkc3ViNjg0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45CisKK2Rkc3ViNjg1IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4Ny4xJyAtPiAwLjkKK2Rkc3ViNjg2IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4Ny45JyAtPiAwLjEKK2Rkc3ViNjg3IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAtMC4xCitkZHN1YjY4OCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguNScgLT4gLTAuNQorZGRzdWI2ODkgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjknIC0+IC0wLjkKKworcm91bmRpbmc6IGRvd24KK2Rkc3ViNjkwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkKK2Rkc3ViNjkxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjEKK2Rkc3ViNjkyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xCitkZHN1YjY5MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQorZGRzdWI2OTQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkKKworLS0gU3BlY2lhbHMKK2Rkc3ViNzgwIHN1YnRyYWN0IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2Rkc3ViNzgxIHN1YnRyYWN0IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2Rkc3ViNzgyIHN1YnRyYWN0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2Rkc3ViNzgzIHN1YnRyYWN0IC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2Rkc3ViNzg0IHN1YnRyYWN0IC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2Rkc3ViNzg1IHN1YnRyYWN0IC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2Rkc3ViNzg3IHN1YnRyYWN0IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkKK2Rkc3ViNzg4IHN1YnRyYWN0IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2Rkc3ViNzg5IHN1YnRyYWN0IC0xICAgICBJbmYgICAtPiAtSW5maW5pdHkKK2Rkc3ViNzkwIHN1YnRyYWN0ICAwICAgICBJbmYgICAtPiAtSW5maW5pdHkKK2Rkc3ViNzkxIHN1YnRyYWN0ICAxICAgICBJbmYgICAtPiAtSW5maW5pdHkKK2Rkc3ViNzkyIHN1YnRyYWN0ICAxMDAwICBJbmYgICAtPiAtSW5maW5pdHkKKworZGRzdWI4MDAgc3VidHJhY3QgIEluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1YjgwMSBzdWJ0cmFjdCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkZHN1YjgwMiBzdWJ0cmFjdCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkZHN1YjgwMyBzdWJ0cmFjdCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkZHN1YjgwNCBzdWJ0cmFjdCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkZHN1YjgwNSBzdWJ0cmFjdCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkZHN1YjgwNiBzdWJ0cmFjdCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkZHN1YjgwNyBzdWJ0cmFjdCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CitkZHN1YjgwOCBzdWJ0cmFjdCAtMTAwMCAtSW5mICAgLT4gIEluZmluaXR5CitkZHN1YjgwOSBzdWJ0cmFjdCAtSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODEwIHN1YnRyYWN0IC0xICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rkc3ViODExIHN1YnRyYWN0IC0wICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rkc3ViODEyIHN1YnRyYWN0ICAwICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rkc3ViODEzIHN1YnRyYWN0ICAxICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rkc3ViODE0IHN1YnRyYWN0ICAxMDAwIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rkc3ViODE1IHN1YnRyYWN0ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKKworZGRzdWI4MjEgc3VidHJhY3QgIE5hTiAgIEluZiAgIC0+ICBOYU4KK2Rkc3ViODIyIHN1YnRyYWN0IC1OYU4gICAxMDAwICAtPiAtTmFOCitkZHN1YjgyMyBzdWJ0cmFjdCAgTmFOICAgMSAgICAgLT4gIE5hTgorZGRzdWI4MjQgc3VidHJhY3QgIE5hTiAgIDAgICAgIC0+ICBOYU4KK2Rkc3ViODI1IHN1YnRyYWN0ICBOYU4gIC0wICAgICAtPiAgTmFOCitkZHN1YjgyNiBzdWJ0cmFjdCAgTmFOICAtMSAgICAgLT4gIE5hTgorZGRzdWI4Mjcgc3VidHJhY3QgIE5hTiAgLTEwMDAgIC0+ICBOYU4KK2Rkc3ViODI4IHN1YnRyYWN0ICBOYU4gIC1JbmYgICAtPiAgTmFOCitkZHN1YjgyOSBzdWJ0cmFjdCAtTmFOICAgTmFOICAgLT4gLU5hTgorZGRzdWI4MzAgc3VidHJhY3QgLUluZiAgIE5hTiAgIC0+ICBOYU4KK2Rkc3ViODMxIHN1YnRyYWN0IC0xMDAwICBOYU4gICAtPiAgTmFOCitkZHN1YjgzMiBzdWJ0cmFjdCAtMSAgICAgTmFOICAgLT4gIE5hTgorZGRzdWI4MzMgc3VidHJhY3QgLTAgICAgIE5hTiAgIC0+ICBOYU4KK2Rkc3ViODM0IHN1YnRyYWN0ICAwICAgICBOYU4gICAtPiAgTmFOCitkZHN1YjgzNSBzdWJ0cmFjdCAgMSAgICAgTmFOICAgLT4gIE5hTgorZGRzdWI4MzYgc3VidHJhY3QgIDEwMDAgLU5hTiAgIC0+IC1OYU4KK2Rkc3ViODM3IHN1YnRyYWN0ICBJbmYgICBOYU4gICAtPiAgTmFOCisKK2Rkc3ViODQxIHN1YnRyYWN0ICBzTmFOICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NDIgc3VidHJhY3QgLXNOYU4gIDEwMDAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg0MyBzdWJ0cmFjdCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODQ0IHN1YnRyYWN0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NDUgc3VidHJhY3QgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg0NiBzdWJ0cmFjdCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODQ3IHN1YnRyYWN0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NDggc3VidHJhY3QgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg0OSBzdWJ0cmFjdCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODUwIHN1YnRyYWN0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NTEgc3VidHJhY3QgLUluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg1MiBzdWJ0cmFjdCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODUzIHN1YnRyYWN0IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NTQgc3VidHJhY3QgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg1NSBzdWJ0cmFjdCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODU2IHN1YnRyYWN0ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI4NTcgc3VidHJhY3QgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHN1Yjg1OCBzdWJ0cmFjdCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODU5IHN1YnRyYWN0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkZHN1Yjg2MSBzdWJ0cmFjdCAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQorZGRzdWI4NjIgc3VidHJhY3QgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjIKK2Rkc3ViODYzIHN1YnRyYWN0ICBOYU4wMyAgICAxMDAwICAgIC0+ICBOYU4zCitkZHN1Yjg2NCBzdWJ0cmFjdCAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONAorZGRzdWI4NjUgc3VidHJhY3QgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUKK2Rkc3ViODY2IHN1YnRyYWN0IC1JbmYgICAgIC1OYU43MSAgIC0+IC1OYU43MQorZGRzdWI4Njcgc3VidHJhY3QgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxCitkZHN1Yjg2OCBzdWJ0cmFjdCAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTEKK2Rkc3ViODY5IHN1YnRyYWN0ICBJbmYgICAgICBOYU4xMDEgIC0+ICBOYU4xMDEKK2Rkc3ViODcxIHN1YnRyYWN0ICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODcyIHN1YnRyYWN0ICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODczIHN1YnRyYWN0IC1zTmFOMDEzICAgMTAwMCAgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODc0IHN1YnRyYWN0ICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODc1IHN1YnRyYWN0ICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODc2IHN1YnRyYWN0ICBOYU4wMTYgICBzTmFOMTkxIC0+ICBOYU4xOTEgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODc3IHN1YnRyYWN0IC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODc4IHN1YnRyYWN0IC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODc5IHN1YnRyYWN0ICAxMDAwICAgIC1zTmFOMjIxIC0+IC1OYU4yMjEgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODgwIHN1YnRyYWN0ICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24KK2Rkc3ViODgxIHN1YnRyYWN0ICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZWRnZSBjYXNlIHNwaWxscworZGRzdWI5MDEgc3VidHJhY3QgIDIuRS0zICAxLjAwMiAgLT4gLTEuMDAwCitkZHN1YjkwMiBzdWJ0cmFjdCAgMi4wRS0zICAxLjAwMiAgLT4gLTEuMDAwMAorZGRzdWI5MDMgc3VidHJhY3QgIDIuMDBFLTMgIDEuMDAyMCAgLT4gLTEuMDAwMDAKK2Rkc3ViOTA0IHN1YnRyYWN0ICAyLjAwMEUtMyAgMS4wMDIwMCAgLT4gLTEuMDAwMDAwCitkZHN1YjkwNSBzdWJ0cmFjdCAgMi4wMDAwRS0zICAxLjAwMjAwMCAgLT4gLTEuMDAwMDAwMAorZGRzdWI5MDYgc3VidHJhY3QgIDIuMDAwMDBFLTMgIDEuMDAyMDAwMCAgLT4gLTEuMDAwMDAwMDAKK2Rkc3ViOTA3IHN1YnRyYWN0ICAyLjAwMDAwMEUtMyAgMS4wMDIwMDAwMCAgLT4gLTEuMDAwMDAwMDAwCitkZHN1YjkwOCBzdWJ0cmFjdCAgMi4wMDAwMDAwRS0zICAxLjAwMjAwMDAwMCAgLT4gLTEuMDAwMDAwMDAwMAorCistLSBzdWJub3JtYWxzIGFuZCBvdmVyZmxvd3MgY292ZXJlZCB1bmRlciBBZGQKKworLS0gTnVsbCB0ZXN0cworZGRzdWI5OTkwIHN1YnRyYWN0IDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGRzdWI5OTkxIHN1YnRyYWN0ICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFRvSW50ZWdyYWwuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRUb0ludGVncmFsLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2ZDYxZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRUb0ludGVncmFsLmRlY1Rlc3QKQEAgLTAsMCArMSwyNTcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGRUb0ludGVncmFsLmRlY1Rlc3QgLS0gcm91bmQgRG91YmxlIHRvIGludGVncmFsIHZhbHVlICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyB0ZXN0cyB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbiAncm91bmQtdG8taW50ZWdyYWwKKy0tIHZhbHVlLWV4YWN0JyBvcGVyYXRpb25zIChmcm9tIElFRUUgODU0LCBsYXRlciBtb2RpZmllZCBpbiA3NTRyKS4KKy0tIEFsbCBub24temVybyByZXN1bHRzIGFyZSBkZWZpbmVkIGFzIGJlaW5nIHRob3NlIGZyb20gZWl0aGVyIGNvcHkgb3IKKy0tIHF1YW50aXplLCBzbyB0aG9zZSBhcmUgYXNzdW1lZCB0byBoYXZlIGJlZW4gdGVzdGVkIGV4dGVuc2l2ZWx5CistLSBlbHNld2hlcmU7IHRoZSB0ZXN0cyBoZXJlIGFyZSBmb3IgaW50ZWdyaXR5LCByb3VuZGluZyBtb2RlLCBldGMuCistLSBBbHNvLCBpdCBpcyBhc3N1bWVkIHRoZSB0ZXN0IGhhcm5lc3Mgd2lsbCB1c2UgdGhlc2UgdGVzdHMgZm9yIGJvdGgKKy0tIFRvSW50ZWdyYWxFeGFjdCAod2hpY2ggZG9lcyBzZXQgSW5leGFjdCkgYW5kIHRoZSBmaXhlZC1uYW1lCistLSBmdW5jdGlvbnMgKHdoaWNoIGRvIG5vdCBzZXQgSW5leGFjdCkuCisKKy0tIE5vdGUgdGhhdCBkZWNOdW1iZXIgaW1wbGVtZW50cyBhbiBlYXJsaWVyIGRlZmluaXRpb24gb2YgdG9JbnRlZ3JhbAorLS0gd2hpY2ggbmV2ZXIgc2V0cyBJbmV4YWN0OyB0aGUgZGVjVGVzdCBvcGVyYXRvciBmb3IgdGhhdCBpcyBjYWxsZWQKKy0tICd0b2ludGVncmFsJyBpbnN0ZWFkIG9mICd0b2ludGVncmFseCcuCisKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkZGludHgwMDEgdG9pbnRlZ3JhbHggICAgICAwICAgICAtPiAgMAorZGRpbnR4MDAyIHRvaW50ZWdyYWx4ICAgICAgMC4wICAgLT4gIDAKK2RkaW50eDAwMyB0b2ludGVncmFseCAgICAgIDAuMSAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAwNCB0b2ludGVncmFseCAgICAgIDAuMiAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAwNSB0b2ludGVncmFseCAgICAgIDAuMyAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAwNiB0b2ludGVncmFseCAgICAgIDAuNCAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAwNyB0b2ludGVncmFseCAgICAgIDAuNSAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAwOCB0b2ludGVncmFseCAgICAgIDAuNiAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAwOSB0b2ludGVncmFseCAgICAgIDAuNyAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAxMCB0b2ludGVncmFseCAgICAgIDAuOCAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAxMSB0b2ludGVncmFseCAgICAgIDAuOSAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAxMiB0b2ludGVncmFseCAgICAgIDEgICAgIC0+ICAxCitkZGludHgwMTMgdG9pbnRlZ3JhbHggICAgICAxLjAgICAtPiAgMSAgUm91bmRlZAorZGRpbnR4MDE0IHRvaW50ZWdyYWx4ICAgICAgMS4xICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDE1IHRvaW50ZWdyYWx4ICAgICAgMS4yICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDE2IHRvaW50ZWdyYWx4ICAgICAgMS4zICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDE3IHRvaW50ZWdyYWx4ICAgICAgMS40ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDE4IHRvaW50ZWdyYWx4ICAgICAgMS41ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDE5IHRvaW50ZWdyYWx4ICAgICAgMS42ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDIwIHRvaW50ZWdyYWx4ICAgICAgMS43ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDIxIHRvaW50ZWdyYWx4ICAgICAgMS44ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDIyIHRvaW50ZWdyYWx4ICAgICAgMS45ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAorLS0gbmVnYXRpdmVzCitkZGludHgwMzEgdG9pbnRlZ3JhbHggICAgIC0wICAgICAtPiAtMAorZGRpbnR4MDMyIHRvaW50ZWdyYWx4ICAgICAtMC4wICAgLT4gLTAKK2RkaW50eDAzMyB0b2ludGVncmFseCAgICAgLTAuMSAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAzNCB0b2ludGVncmFseCAgICAgLTAuMiAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAzNSB0b2ludGVncmFseCAgICAgLTAuMyAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAzNiB0b2ludGVncmFseCAgICAgLTAuNCAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAzNyB0b2ludGVncmFseCAgICAgLTAuNSAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAzOCB0b2ludGVncmFseCAgICAgLTAuNiAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDAzOSB0b2ludGVncmFseCAgICAgLTAuNyAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA0MCB0b2ludGVncmFseCAgICAgLTAuOCAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA0MSB0b2ludGVncmFseCAgICAgLTAuOSAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA0MiB0b2ludGVncmFseCAgICAgLTEgICAgIC0+IC0xCitkZGludHgwNDMgdG9pbnRlZ3JhbHggICAgIC0xLjAgICAtPiAtMSAgUm91bmRlZAorZGRpbnR4MDQ0IHRvaW50ZWdyYWx4ICAgICAtMS4xICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQ1IHRvaW50ZWdyYWx4ICAgICAtMS4yICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQ2IHRvaW50ZWdyYWx4ICAgICAtMS4zICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQ3IHRvaW50ZWdyYWx4ICAgICAtMS40ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQ4IHRvaW50ZWdyYWx4ICAgICAtMS41ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDQ5IHRvaW50ZWdyYWx4ICAgICAtMS42ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDUwIHRvaW50ZWdyYWx4ICAgICAtMS43ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDUxIHRvaW50ZWdyYWx4ICAgICAtMS44ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDUyIHRvaW50ZWdyYWx4ICAgICAtMS45ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCB0d28gd291bGQgYmUgTmFOIHVzaW5nIHF1YW50aXplKHgsIDApCitkZGludHgwNTMgdG9pbnRlZ3JhbHggICAgMTBFKzYwICAtPiAxLjBFKzYxCitkZGludHgwNTQgdG9pbnRlZ3JhbHggICAtMTBFKzYwICAtPiAtMS4wRSs2MQorCistLSBudW1iZXJzIGFyb3VuZCBwcmVjaXNpb24KK2RkaW50eDA2MCB0b2ludGVncmFseCAnNTYyNjdFLTE3JyAgIC0+ICcwJyAgICAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDYxIHRvaW50ZWdyYWx4ICc1NjI2N0UtNScgICAgLT4gJzEnICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwNjIgdG9pbnRlZ3JhbHggJzU2MjY3RS0yJyAgICAtPiAnNTYzJyAgICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDA2MyB0b2ludGVncmFseCAnNTYyNjdFLTEnICAgIC0+ICc1NjI3JyAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MDY1IHRvaW50ZWdyYWx4ICc1NjI2N0UtMCcgICAgLT4gJzU2MjY3JworZGRpbnR4MDY2IHRvaW50ZWdyYWx4ICc1NjI2N0UrMCcgICAgLT4gJzU2MjY3JworZGRpbnR4MDY3IHRvaW50ZWdyYWx4ICc1NjI2N0UrMScgICAgLT4gJzUuNjI2N0UrNScKK2RkaW50eDA2OCB0b2ludGVncmFseCAnNTYyNjdFKzknICAgIC0+ICc1LjYyNjdFKzEzJworZGRpbnR4MDY5IHRvaW50ZWdyYWx4ICc1NjI2N0UrMTAnICAgLT4gJzUuNjI2N0UrMTQnCitkZGludHgwNzAgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMScgICAtPiAnNS42MjY3RSsxNScKK2RkaW50eDA3MSB0b2ludGVncmFseCAnNTYyNjdFKzEyJyAgIC0+ICc1LjYyNjdFKzE2JworZGRpbnR4MDcyIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTMnICAgLT4gJzUuNjI2N0UrMTcnCitkZGludHgwNzMgdG9pbnRlZ3JhbHggJzEuMjNFKzk2JyAgICAtPiAnMS4yM0UrOTYnCitkZGludHgwNzQgdG9pbnRlZ3JhbHggJzEuMjNFKzM4NCcgICAtPiAjNDdmZDMwMDAwMDAwMDAwMCAgQ2xhbXBlZAorCitkZGludHgwODAgdG9pbnRlZ3JhbHggJy01NjI2N0UtMTAnICAtPiAnLTAnICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwODEgdG9pbnRlZ3JhbHggJy01NjI2N0UtNScgICAtPiAnLTEnICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwODIgdG9pbnRlZ3JhbHggJy01NjI2N0UtMicgICAtPiAnLTU2MycgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwODMgdG9pbnRlZ3JhbHggJy01NjI2N0UtMScgICAtPiAnLTU2MjcnICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgwODUgdG9pbnRlZ3JhbHggJy01NjI2N0UtMCcgICAtPiAnLTU2MjY3JworZGRpbnR4MDg2IHRvaW50ZWdyYWx4ICctNTYyNjdFKzAnICAgLT4gJy01NjI2NycKK2RkaW50eDA4NyB0b2ludGVncmFseCAnLTU2MjY3RSsxJyAgIC0+ICctNS42MjY3RSs1JworZGRpbnR4MDg4IHRvaW50ZWdyYWx4ICctNTYyNjdFKzknICAgLT4gJy01LjYyNjdFKzEzJworZGRpbnR4MDg5IHRvaW50ZWdyYWx4ICctNTYyNjdFKzEwJyAgLT4gJy01LjYyNjdFKzE0JworZGRpbnR4MDkwIHRvaW50ZWdyYWx4ICctNTYyNjdFKzExJyAgLT4gJy01LjYyNjdFKzE1JworZGRpbnR4MDkxIHRvaW50ZWdyYWx4ICctNTYyNjdFKzEyJyAgLT4gJy01LjYyNjdFKzE2JworZGRpbnR4MDkyIHRvaW50ZWdyYWx4ICctNTYyNjdFKzEzJyAgLT4gJy01LjYyNjdFKzE3JworZGRpbnR4MDkzIHRvaW50ZWdyYWx4ICctMS4yM0UrOTYnICAgLT4gJy0xLjIzRSs5NicKK2RkaW50eDA5NCB0b2ludGVncmFseCAnLTEuMjNFKzM4NCcgIC0+ICNjN2ZkMzAwMDAwMDAwMDAwICBDbGFtcGVkCisKKy0tIHN1Ym5vcm1hbCBpbnB1dHMKK2RkaW50eDEwMCB0b2ludGVncmFseCAgICAgICAgMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MTAxIHRvaW50ZWdyYWx4ICAgICAgMC4xRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkCitkZGludHgxMDIgdG9pbnRlZ3JhbHggICAgIDAuMDFFLTI5OSAtPiAwICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDEwMyB0b2ludGVncmFseCAgICAgICAgMEUtMjk5IC0+IDAKKworLS0gc3BlY2lhbHMgYW5kIHplcm9zCitkZGludHgxMjAgdG9pbnRlZ3JhbHggJ0luZicgICAgICAgLT4gIEluZmluaXR5CitkZGludHgxMjEgdG9pbnRlZ3JhbHggJy1JbmYnICAgICAgLT4gLUluZmluaXR5CitkZGludHgxMjIgdG9pbnRlZ3JhbHggICBOYU4gICAgICAgLT4gIE5hTgorZGRpbnR4MTIzIHRvaW50ZWdyYWx4ICBzTmFOICAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZGludHgxMjQgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDAKK2RkaW50eDEyNSB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMAorZGRpbnR4MTI2IHRvaW50ZWdyYWx4ICAgICAwLjAwMCAgIC0+ICAwCitkZGludHgxMjcgdG9pbnRlZ3JhbHggICAgIDAuMDAgICAgLT4gIDAKK2RkaW50eDEyOCB0b2ludGVncmFseCAgICAgMC4wICAgICAtPiAgMAorZGRpbnR4MTI5IHRvaW50ZWdyYWx4ICAgICAwICAgICAgIC0+ICAwCitkZGludHgxMzAgdG9pbnRlZ3JhbHggICAgIDBFLTMgICAgLT4gIDAKK2RkaW50eDEzMSB0b2ludGVncmFseCAgICAgMEUtMiAgICAtPiAgMAorZGRpbnR4MTMyIHRvaW50ZWdyYWx4ICAgICAwRS0xICAgIC0+ICAwCitkZGludHgxMzMgdG9pbnRlZ3JhbHggICAgIDBFLTAgICAgLT4gIDAKK2RkaW50eDEzNCB0b2ludGVncmFseCAgICAgMEUrMSAgICAtPiAgMEUrMQorZGRpbnR4MTM1IHRvaW50ZWdyYWx4ICAgICAwRSsyICAgIC0+ICAwRSsyCitkZGludHgxMzYgdG9pbnRlZ3JhbHggICAgIDBFKzMgICAgLT4gIDBFKzMKK2RkaW50eDEzNyB0b2ludGVncmFseCAgICAgMEUrNCAgICAtPiAgMEUrNAorZGRpbnR4MTM4IHRvaW50ZWdyYWx4ICAgICAwRSs1ICAgIC0+ICAwRSs1CitkZGludHgxMzkgdG9pbnRlZ3JhbHggICAgLTAuMDAwICAgLT4gLTAKK2RkaW50eDE0MCB0b2ludGVncmFseCAgICAtMC4wMCAgICAtPiAtMAorZGRpbnR4MTQxIHRvaW50ZWdyYWx4ICAgIC0wLjAgICAgIC0+IC0wCitkZGludHgxNDIgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTAKK2RkaW50eDE0MyB0b2ludGVncmFseCAgICAtMEUtMyAgICAtPiAtMAorZGRpbnR4MTQ0IHRvaW50ZWdyYWx4ICAgIC0wRS0yICAgIC0+IC0wCitkZGludHgxNDUgdG9pbnRlZ3JhbHggICAgLTBFLTEgICAgLT4gLTAKK2RkaW50eDE0NiB0b2ludGVncmFseCAgICAtMEUtMCAgICAtPiAtMAorZGRpbnR4MTQ3IHRvaW50ZWdyYWx4ICAgIC0wRSsxICAgIC0+IC0wRSsxCitkZGludHgxNDggdG9pbnRlZ3JhbHggICAgLTBFKzIgICAgLT4gLTBFKzIKK2RkaW50eDE0OSB0b2ludGVncmFseCAgICAtMEUrMyAgICAtPiAtMEUrMworZGRpbnR4MTUwIHRvaW50ZWdyYWx4ICAgIC0wRSs0ICAgIC0+IC0wRSs0CitkZGludHgxNTEgdG9pbnRlZ3JhbHggICAgLTBFKzUgICAgLT4gLTBFKzUKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkaW50eDE1MiB0b2ludGVncmFseCAgIE5hTjgwOCAgICAtPiAgTmFOODA4CitkZGludHgxNTMgdG9pbnRlZ3JhbHggIHNOYU4wODAgICAgLT4gIE5hTjgwICBJbnZhbGlkX29wZXJhdGlvbgorZGRpbnR4MTU0IHRvaW50ZWdyYWx4ICAtTmFOODA4ICAgIC0+IC1OYU44MDgKK2RkaW50eDE1NSB0b2ludGVncmFseCAtc05hTjA4MCAgICAtPiAtTmFOODAgIEludmFsaWRfb3BlcmF0aW9uCitkZGludHgxNTYgdG9pbnRlZ3JhbHggIC1OYU4gICAgICAgLT4gLU5hTgorZGRpbnR4MTU3IHRvaW50ZWdyYWx4IC1zTmFOICAgICAgIC0+IC1OYU4gICAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZXhhbXBsZXMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkZGludHgyMDAgdG9pbnRlZ3JhbHggICAgIDIuMSAgICAtPiAyICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMDEgdG9pbnRlZ3JhbHggICAxMDAgICAgICAtPiAxMDAKK2RkaW50eDIwMiB0b2ludGVncmFseCAgIDEwMC4wICAgIC0+IDEwMCAgICAgICAgICBSb3VuZGVkCitkZGludHgyMDMgdG9pbnRlZ3JhbHggICAxMDEuNSAgICAtPiAxMDIgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMDQgdG9pbnRlZ3JhbHggIC0xMDEuNSAgICAtPiAtMTAyICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMDUgdG9pbnRlZ3JhbHggICAxMEUrNSAgICAtPiAxLjBFKzYKK2RkaW50eDIwNiB0b2ludGVncmFseCAgNy44OUUrNzcgIC0+IDcuODlFKzc3CitkZGludHgyMDcgdG9pbnRlZ3JhbHggICAtSW5mICAgICAtPiAtSW5maW5pdHkKKworCistLSBhbGwgcm91bmRpbmcgbW9kZXMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK2RkaW50eDIxMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMTEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjEyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIxMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMTQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjE1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGhhbGZfdXAKKworZGRpbnR4MjIwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIyMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMjIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjIzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIyNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMjUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgaGFsZl9kb3duCisKK2RkaW50eDIzMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMzEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjMyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDIzMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyMzQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjM1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIHVwCisKK2RkaW50eDI0MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNDEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjQyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI0MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNDQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjQ1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGRvd24KKworZGRpbnR4MjUwIHRvaW50ZWdyYWx4ICAgICA1NS43ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI1MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNTIgdG9pbnRlZ3JhbHggICAgIDU3LjcgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjUzIHRvaW50ZWdyYWx4ICAgIC01NS43ICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI1NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNTUgdG9pbnRlZ3JhbHggICAgLTU3LjcgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgY2VpbGluZworCitkZGludHgyNjAgdG9pbnRlZ3JhbHggICAgIDU1LjMgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjYxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI2MiB0b2ludGVncmFseCAgICAgNTcuMyAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNjMgdG9pbnRlZ3JhbHggICAgLTU1LjMgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjY0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI2NSB0b2ludGVncmFseCAgICAtNTcuMyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBmbG9vcgorCitkZGludHgyNzAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4MjcxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI3MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkZGludHgyNzMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZGRpbnR4Mjc0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKK2RkaW50eDI3NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zCitkZGludHgzMDAgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDYgIC0+IC0yMTQ3NDgzNjQ2CitkZGludHgzMDEgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDcgIC0+IC0yMTQ3NDgzNjQ3CitkZGludHgzMDIgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDggIC0+IC0yMTQ3NDgzNjQ4CitkZGludHgzMDMgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDkgIC0+IC0yMTQ3NDgzNjQ5CitkZGludHgzMDQgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDYgIC0+ICAyMTQ3NDgzNjQ2CitkZGludHgzMDUgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDcgIC0+ICAyMTQ3NDgzNjQ3CitkZGludHgzMDYgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDggIC0+ICAyMTQ3NDgzNjQ4CitkZGludHgzMDcgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDkgIC0+ICAyMTQ3NDgzNjQ5CitkZGludHgzMDggdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTQgIC0+ICA0Mjk0OTY3Mjk0CitkZGludHgzMDkgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTUgIC0+ICA0Mjk0OTY3Mjk1CitkZGludHgzMTAgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTYgIC0+ICA0Mjk0OTY3Mjk2CitkZGludHgzMTEgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTcgIC0+ICA0Mjk0OTY3Mjk3CisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRYb3IuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRYb3IuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzFjN2ViCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFhvci5kZWNUZXN0CkBAIC0wLDAgKzEsMzM3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRkWG9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgWE9SIGZvciBkZWNEb3VibGVzICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworcHJlY2lzaW9uOiAgIDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCitkZHhvcjAwMSB4b3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK2RkeG9yMDAyIHhvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQorZGR4b3IwMDMgeG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxCitkZHhvcjAwNCB4b3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDAKK2RkeG9yMDA1IHhvciAgICAgICAgICAxMTAwIDEwMTAgLT4gIDExMAorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKK2RkeG9yMDA2IHhvciAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2RkeG9yMDA3IHhvciAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwCitkZHhvcjAwOCB4b3IgMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAorZGR4b3IwMDkgeG9yIDEwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorZGR4b3IwMTAgeG9yIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorZGR4b3IwMTEgeG9yIDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAKK2RkeG9yMDEyIHhvciAwMTAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwCitkZHhvcjAxMyB4b3IgMDEwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCisKKy0tIFZhcmlvdXMgbGVuZ3RocworLS0gICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2CitkZHhvcjAyMSB4b3IgMTExMTExMTExMDAwMDAwMCAgICAgMTExMTExMTExMDAwMDAwMCAgLT4gIDAKK2RkeG9yMDIyIHhvciAgMTExMTExMTEwMDAwMDAwICAgICAgMTExMTExMTEwMDAwMDAwICAtPiAgMAorZGR4b3IwMjMgeG9yICAgMTExMTExMTAwMDAwMDAgICAgICAgMTExMTExMTAwMDAwMDAgIC0+ICAwCitkZHhvcjAyNCB4b3IgICAgMTExMTExMDAwMDAwMCAgICAgICAgMTExMTExMDAwMDAwMCAgLT4gIDAKK2RkeG9yMDI1IHhvciAgICAgMTExMTEwMDAwMDAwICAgICAgICAgMTExMTEwMDAwMDAwICAtPiAgMAorZGR4b3IwMjYgeG9yICAgICAgMTExMTAwMDAwMDAgICAgICAgICAgMTExMTAwMDAwMDAgIC0+ICAwCitkZHhvcjAyNyB4b3IgICAgICAgMTExMDAwMDAwMCAgICAgICAgICAgMTExMDAwMDAwMCAgLT4gIDAKK2RkeG9yMDI4IHhvciAgICAgICAgMTEwMDAwMDAwICAgICAgICAgICAgMTEwMDAwMDAwICAtPiAgMAorZGR4b3IwMjkgeG9yICAgICAgICAgMTAwMDAwMDAgICAgICAgICAgICAgMTAwMDAwMDAgIC0+ICAwCitkZHhvcjAzMCB4b3IgICAgICAgICAgMTAwMDAwMCAgICAgICAgICAgICAgMTAwMDAwMCAgLT4gIDAKK2RkeG9yMDMxIHhvciAgICAgICAgICAgMTAwMDAwICAgICAgICAgICAgICAgMTAwMDAwICAtPiAgMAorZGR4b3IwMzIgeG9yICAgICAgICAgICAgMTAwMDAgICAgICAgICAgICAgICAgMTAwMDAgIC0+ICAwCitkZHhvcjAzMyB4b3IgICAgICAgICAgICAgMTAwMCAgICAgICAgICAgICAgICAgMTAwMCAgLT4gIDAKK2RkeG9yMDM0IHhvciAgICAgICAgICAgICAgMTAwICAgICAgICAgICAgICAgICAgMTAwICAtPiAgMAorZGR4b3IwMzUgeG9yICAgICAgICAgICAgICAgMTAgICAgICAgICAgICAgICAgICAgMTAgIC0+ICAwCitkZHhvcjAzNiB4b3IgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgMSAgLT4gIDAKKworZGR4b3IwNDAgeG9yIDExMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTExMDAwMDAwMDAwCitkZHhvcjA0MSB4b3IgIDExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMDAwMDAwMDAKK2RkeG9yMDQyIHhvciAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDEwMDAwMDAwMAorZGR4b3IwNDMgeG9yICAgMTExMTExMSAgICAgMTAwMDAwMDEwICAtPiAgMTAxMTExMTAxCitkZHhvcjA0NCB4b3IgICAgMTExMTExICAgICAxMDAwMDAxMDAgIC0+ICAxMDAxMTEwMTEKK2RkeG9yMDQ1IHhvciAgICAgMTExMTEgICAgIDEwMDAwMTAwMCAgLT4gIDEwMDAxMDExMQorZGR4b3IwNDYgeG9yICAgICAgMTExMSAgICAgMTAwMDEwMDAwICAtPiAgMTAwMDExMTExCitkZHhvcjA0NyB4b3IgICAgICAgMTExICAgICAxMDAxMDAwMDAgIC0+ICAxMDAxMDAxMTEKK2RkeG9yMDQ4IHhvciAgICAgICAgMTEgICAgIDEwMTAwMDAwMCAgLT4gIDEwMTAwMDAxMQorZGR4b3IwNDkgeG9yICAgICAgICAgMSAgICAgMTEwMDAwMDAwICAtPiAgMTEwMDAwMDAxCisKK2RkeG9yMDUwIHhvciAxMTExMTExMTExICAxICAtPiAgMTExMTExMTExMAorZGR4b3IwNTEgeG9yICAxMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTAKK2RkeG9yMDUyIHhvciAgIDExMTExMTExICAxICAtPiAgMTExMTExMTAKK2RkeG9yMDUzIHhvciAgICAxMTExMTExICAxICAtPiAgMTExMTExMAorZGR4b3IwNTQgeG9yICAgICAxMTExMTEgIDEgIC0+ICAxMTExMTAKK2RkeG9yMDU1IHhvciAgICAgIDExMTExICAxICAtPiAgMTExMTAKK2RkeG9yMDU2IHhvciAgICAgICAxMTExICAxICAtPiAgMTExMAorZGR4b3IwNTcgeG9yICAgICAgICAxMTEgIDEgIC0+ICAxMTAKK2RkeG9yMDU4IHhvciAgICAgICAgIDExICAxICAtPiAgMTAKK2RkeG9yMDU5IHhvciAgICAgICAgICAxICAxICAtPiAgMAorCitkZHhvcjA2MCB4b3IgMTExMTExMTExMSAgMCAgLT4gIDExMTExMTExMTEKK2RkeG9yMDYxIHhvciAgMTExMTExMTExICAwICAtPiAgMTExMTExMTExCitkZHhvcjA2MiB4b3IgICAxMTExMTExMSAgMCAgLT4gIDExMTExMTExCitkZHhvcjA2MyB4b3IgICAgMTExMTExMSAgMCAgLT4gIDExMTExMTEKK2RkeG9yMDY0IHhvciAgICAgMTExMTExICAwICAtPiAgMTExMTExCitkZHhvcjA2NSB4b3IgICAgICAxMTExMSAgMCAgLT4gIDExMTExCitkZHhvcjA2NiB4b3IgICAgICAgMTExMSAgMCAgLT4gIDExMTEKK2RkeG9yMDY3IHhvciAgICAgICAgMTExICAwICAtPiAgMTExCitkZHhvcjA2OCB4b3IgICAgICAgICAxMSAgMCAgLT4gIDExCitkZHhvcjA2OSB4b3IgICAgICAgICAgMSAgMCAgLT4gIDEKKworZGR4b3IwNzAgeG9yIDEgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEwCitkZHhvcjA3MSB4b3IgMSAgIDExMTExMTExMSAgLT4gIDExMTExMTExMAorZGR4b3IwNzIgeG9yIDEgICAgMTExMTExMTEgIC0+ICAxMTExMTExMAorZGR4b3IwNzMgeG9yIDEgICAgIDExMTExMTEgIC0+ICAxMTExMTEwCitkZHhvcjA3NCB4b3IgMSAgICAgIDExMTExMSAgLT4gIDExMTExMAorZGR4b3IwNzUgeG9yIDEgICAgICAgMTExMTEgIC0+ICAxMTExMAorZGR4b3IwNzYgeG9yIDEgICAgICAgIDExMTEgIC0+ICAxMTEwCitkZHhvcjA3NyB4b3IgMSAgICAgICAgIDExMSAgLT4gIDExMAorZGR4b3IwNzggeG9yIDEgICAgICAgICAgMTEgIC0+ICAxMAorZGR4b3IwNzkgeG9yIDEgICAgICAgICAgIDEgIC0+ICAwCisKK2RkeG9yMDgwIHhvciAwICAxMTExMTExMTExICAtPiAgMTExMTExMTExMQorZGR4b3IwODEgeG9yIDAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKK2RkeG9yMDgyIHhvciAwICAgIDExMTExMTExICAtPiAgMTExMTExMTEKK2RkeG9yMDgzIHhvciAwICAgICAxMTExMTExICAtPiAgMTExMTExMQorZGR4b3IwODQgeG9yIDAgICAgICAxMTExMTEgIC0+ICAxMTExMTEKK2RkeG9yMDg1IHhvciAwICAgICAgIDExMTExICAtPiAgMTExMTEKK2RkeG9yMDg2IHhvciAwICAgICAgICAxMTExICAtPiAgMTExMQorZGR4b3IwODcgeG9yIDAgICAgICAgICAxMTEgIC0+ICAxMTEKK2RkeG9yMDg4IHhvciAwICAgICAgICAgIDExICAtPiAgMTEKK2RkeG9yMDg5IHhvciAwICAgICAgICAgICAxICAtPiAgMQorCitkZHhvcjA5MCB4b3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMDAwMTAwMDAKK2RkeG9yMDkxIHhvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gICAxMDAxMDAwMAorZGR4b3IwOTIgeG9yIDExMDExMTExMSAgMTExMTAxMTExICAtPiAgICAxMDEwMDAwCitkZHhvcjA5MyB4b3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAgICAxMTAwMDAKK2RkeG9yMDk0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMAorZGR4b3IwOTUgeG9yIDExMTExMDExMSAgMTExMTAxMTExICAtPiAgICAgIDExMDAwCitkZHhvcjA5NiB4b3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAgICAgMTAxMDAKK2RkeG9yMDk3IHhvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gICAgICAxMDAxMAorZGR4b3IwOTggeG9yIDExMTExMTExMCAgMTExMTAxMTExICAtPiAgICAgIDEwMDAxCisKK2RkeG9yMTAwIHhvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDEwMDAxMDAwMAorZGR4b3IxMDEgeG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgIDEwMDEwMDAwCitkZHhvcjEwMiB4b3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAgIDEwMTAwMDAKK2RkeG9yMTAzIHhvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gICAgIDExMDAwMAorZGR4b3IxMDQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwCitkZHhvcjEwNSB4b3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAgICAgMTEwMDAKK2RkeG9yMTA2IHhvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gICAgICAxMDEwMAorZGR4b3IxMDcgeG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgICAgIDEwMDEwCitkZHhvcjEwOCB4b3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAgICAgMTAwMDEKKworLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCitkZHhvcjIyMCB4b3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjIxIHhvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMjIgeG9yIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIyMyB4b3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjI0IHhvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMjUgeG9yIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIyNiB4b3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjI3IHhvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMjggeG9yIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIyOSB4b3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjMwIHhvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyMzEgeG9yIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjIzMiB4b3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK2RkeG9yMjQwIHhvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNDEgeG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI0MiB4b3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjQzIHhvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNDQgeG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRAorZGR4b3IyNTAgeG9yICAyMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTEgeG9yICA3MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTIgeG9yICA4MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTMgeG9yICA5MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTQgeG9yICAyMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTUgeG9yICA3MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTYgeG9yICA4MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTcgeG9yICA5MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTggeG9yICAxMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNTkgeG9yICAxMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNjAgeG9yICAxMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNjEgeG9yICAxMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNjIgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNjMgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNjQgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNjUgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQorZGR4b3IyNzAgeG9yICAwMjAwMDAxMDAwMDAwMDAwIDEwMDAxMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNzEgeG9yICAwNzAwMDAwMTAwMDAwMDAwIDEwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNzIgeG9yICAwODAwMDAwMDEwMDAwMDAwIDEwMDAwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNzMgeG9yICAwOTAwMDAwMDAxMDAwMDAwIDEwMDAwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNzQgeG9yICAxMDAwMDAwMDAwMTAwMDAwIDAyMDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNzUgeG9yICAxMDAwMDAwMDAwMDEwMDAwIDA3MDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNzYgeG9yICAxMDAwMDAwMDAwMDAxMDAwIDA4MDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyNzcgeG9yICAxMDAwMDAwMDAwMDAwMTAwIDA5MDAwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2RkeG9yMjgwIHhvciAgMDAxMDAwMDAwMDAwMDAwMiAxMDAwMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjgxIHhvciAgMDAwMTAwMDAwMDAwMDAwNyAxMDAwMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjgyIHhvciAgMDAwMDEwMDAwMDAwMDAwOCAxMDAwMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjgzIHhvciAgMDAwMDAxMDAwMDAwMDAwOSAxMDAwMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjg0IHhvciAgMTAwMDAwMTAwMDAwMDAwMCAwMDAxMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjg1IHhvciAgMTAwMDAwMDEwMDAwMDAwMCAwMDEwMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjg2IHhvciAgMTAwMDAwMDAxMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjg3IHhvciAgMTAwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCitkZHhvcjI4OCB4b3IgIDAwMTAwMDAwMjAwMDAwMDAgMTAwMDAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI4OSB4b3IgIDAwMDEwMDAwNzAwMDAwMDEgMTAwMDAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5MCB4b3IgIDAwMDAxMDAwODAwMDAwMTAgMTAwMDAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5MSB4b3IgIDAwMDAwMTAwOTAwMDAxMDAgMTAwMDAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5MiB4b3IgIDEwMDAwMDEwMDAwMDEwMDAgMDAwMDAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5MyB4b3IgIDEwMDAwMDAxMDAwMTAwMDAgMDAwMDAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5NCB4b3IgIDEwMDAwMDAwMTAxMDAwMDAgMDAwMDAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5NSB4b3IgIDEwMDAwMDAwMDEwMDAwMDAgMDAwMDAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworZGR4b3IyOTYgeG9yIC0xMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMjk3IHhvciAtMTAwMDAwMDAwMTAwMDAwMCAgMDAwMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjI5OCB4b3IgIDEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IyOTkgeG9yICAxMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAwMDEwMDAwMTAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UKK2RkeG9yMzMxIHhvciAgMiAgIDkuOTk5OTk5OTlFKzI5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjMzMiB4b3IgIDMgICAxRS0yOTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzMzMgeG9yICA0ICAgMS4wMDAwMDAwMEUtMjk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzM0IHhvciAgNSAgIDFFLTIwMCAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjMzNSB4b3IgIDYgICAtMUUtMjAwICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzMzYgeG9yICA3ICAgLTEuMDAwMDAwMDBFLTI5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzM3IHhvciAgOCAgIC0xRS0yOTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjMzOCB4b3IgIDkgICAtOS45OTk5OTk5OUUrMjk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNDEgeG9yICA5Ljk5OTk5OTk5RSsyOTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzQyIHhvciAgMUUtMjk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM0MyB4b3IgIDEuMDAwMDAwMDBFLTI5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNDQgeG9yICAxRS0yMDggICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzQ1IHhvciAgLTFFLTIwNyAgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM0NiB4b3IgIC0xLjAwMDAwMDAwRS0yOTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNDcgeG9yICAtMUUtMjk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzQ4IHhvciAgLTkuOTk5OTk5OTlFKzI5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworZGR4b3IzNjEgeG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzYyIHhvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM2MyB4b3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNjQgeG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzY1IHhvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM2NiB4b3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNzEgeG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzcyIHhvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM3MyB4b3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3IzNzQgeG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yMzc1IHhvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjM3NiB4b3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCitkZHhvcjc4MCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3ODEgeG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzgyIHhvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc4MyB4b3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3ODQgeG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzg1IHhvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc4NiB4b3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3ODcgeG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzg4IHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc4OSB4b3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3OTAgeG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzkxIHhvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjc5MiB4b3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I3OTMgeG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yNzk0IHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkeG9yODAwIHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgwMSB4b3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MDIgeG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODAzIHhvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgwNCB4b3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MDUgeG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODA2IHhvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgwNyB4b3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MDggeG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODA5IHhvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgxMCB4b3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MTEgeG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODEyIHhvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgxMyB4b3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MTQgeG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODE1IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RkeG9yODIxIHhvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgyMiB4b3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MjMgeG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODI0IHhvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgyNSB4b3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MjYgeG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODI3IHhvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgyOCB4b3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MjkgeG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODMwIHhvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgzMSB4b3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MzIgeG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODMzIHhvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgzNCB4b3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4MzUgeG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODM2IHhvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjgzNyB4b3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkZHhvcjg0MSB4b3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0MiB4b3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0MyB4b3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0NCB4b3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0NSB4b3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0NiB4b3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0NyB4b3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0OCB4b3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg0OSB4b3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1MCB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1MSB4b3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1MiB4b3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1MyB4b3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1NCB4b3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1NSB4b3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1NiB4b3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1NyB4b3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1OCB4b3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg1OSB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RkeG9yODYxIHhvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg2MiB4b3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NjMgeG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODY0IHhvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg2NSB4b3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NjYgeG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODY3IHhvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg2OCB4b3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NjkgeG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODcxIHhvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg3MiB4b3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NzMgeG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODc0IHhvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg3NSB4b3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NzYgeG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODc3IHhvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg3OCB4b3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4NzkgeG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODgwIHhvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg4MSB4b3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4ODIgeG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RkeG9yODgzIHhvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkZHhvcjg4NCB4b3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGR4b3I4ODUgeG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGVjRG91YmxlLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RlY0RvdWJsZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMTcwNjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RlY0RvdWJsZS5kZWNUZXN0CkBAIC0wLDAgKzEsNjUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGVjRG91YmxlLmRlY1Rlc3QgLS0gcnVuIGFsbCBkZWNEb3VibGUgZGVjaW1hbCBhcml0aG1ldGljIHRlc3RzICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBkZWNEb3VibGUgdGVzdHMKK2RlY3Rlc3Q6IGRkQWJzCitkZWN0ZXN0OiBkZEFkZAorZGVjdGVzdDogZGRBbmQKK2RlY3Rlc3Q6IGRkQmFzZQorZGVjdGVzdDogZGRDYW5vbmljYWwKK2RlY3Rlc3Q6IGRkQ2xhc3MKK2RlY3Rlc3Q6IGRkQ29tcGFyZQorZGVjdGVzdDogZGRDb21wYXJlU2lnCitkZWN0ZXN0OiBkZENvbXBhcmVUb3RhbAorZGVjdGVzdDogZGRDb21wYXJlVG90YWxNYWcKK2RlY3Rlc3Q6IGRkQ29weQorZGVjdGVzdDogZGRDb3B5QWJzCitkZWN0ZXN0OiBkZENvcHlOZWdhdGUKK2RlY3Rlc3Q6IGRkQ29weVNpZ24KK2RlY3Rlc3Q6IGRkRGl2aWRlCitkZWN0ZXN0OiBkZERpdmlkZUludAorZGVjdGVzdDogZGRFbmNvZGUKK2RlY3Rlc3Q6IGRkRk1BCitkZWN0ZXN0OiBkZEludmVydAorZGVjdGVzdDogZGRMb2dCCitkZWN0ZXN0OiBkZE1heAorZGVjdGVzdDogZGRNYXhNYWcKK2RlY3Rlc3Q6IGRkTWluCitkZWN0ZXN0OiBkZE1pbk1hZworZGVjdGVzdDogZGRNaW51cworZGVjdGVzdDogZGRNdWx0aXBseQorZGVjdGVzdDogZGROZXh0TWludXMKK2RlY3Rlc3Q6IGRkTmV4dFBsdXMKK2RlY3Rlc3Q6IGRkTmV4dFRvd2FyZAorZGVjdGVzdDogZGRPcgorZGVjdGVzdDogZGRQbHVzCitkZWN0ZXN0OiBkZFF1YW50aXplCitkZWN0ZXN0OiBkZFJlZHVjZQorZGVjdGVzdDogZGRSZW1haW5kZXIKK2RlY3Rlc3Q6IGRkUmVtYWluZGVyTmVhcgorZGVjdGVzdDogZGRSb3RhdGUKK2RlY3Rlc3Q6IGRkU2FtZVF1YW50dW0KK2RlY3Rlc3Q6IGRkU2NhbGVCCitkZWN0ZXN0OiBkZFNoaWZ0CitkZWN0ZXN0OiBkZFN1YnRyYWN0CitkZWN0ZXN0OiBkZFRvSW50ZWdyYWwKK2RlY3Rlc3Q6IGRkWG9yCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGVjUXVhZC5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZWNRdWFkLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhkYjE0MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGVjUXVhZC5kZWNUZXN0CkBAIC0wLDAgKzEsNjUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZGVjUXVhZC5kZWNUZXN0IC0tIHJ1biBhbGwgZGVjUXVhZCBkZWNpbWFsIGFyaXRobWV0aWMgdGVzdHMgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBkZWNRdWFkIHRlc3RzCitkZWN0ZXN0OiBkcUFicworZGVjdGVzdDogZHFBZGQKK2RlY3Rlc3Q6IGRxQW5kCitkZWN0ZXN0OiBkcUJhc2UKK2RlY3Rlc3Q6IGRxQ2Fub25pY2FsCitkZWN0ZXN0OiBkcUNsYXNzCitkZWN0ZXN0OiBkcUNvbXBhcmUKK2RlY3Rlc3Q6IGRxQ29tcGFyZVNpZworZGVjdGVzdDogZHFDb21wYXJlVG90YWwKK2RlY3Rlc3Q6IGRxQ29tcGFyZVRvdGFsTWFnCitkZWN0ZXN0OiBkcUNvcHkKK2RlY3Rlc3Q6IGRxQ29weUFicworZGVjdGVzdDogZHFDb3B5TmVnYXRlCitkZWN0ZXN0OiBkcUNvcHlTaWduCitkZWN0ZXN0OiBkcURpdmlkZQorZGVjdGVzdDogZHFEaXZpZGVJbnQKK2RlY3Rlc3Q6IGRxRW5jb2RlCitkZWN0ZXN0OiBkcUZNQQorZGVjdGVzdDogZHFJbnZlcnQKK2RlY3Rlc3Q6IGRxTG9nQgorZGVjdGVzdDogZHFNYXgKK2RlY3Rlc3Q6IGRxTWF4TWFnCitkZWN0ZXN0OiBkcU1pbgorZGVjdGVzdDogZHFNaW5NYWcKK2RlY3Rlc3Q6IGRxTWludXMKK2RlY3Rlc3Q6IGRxTXVsdGlwbHkKK2RlY3Rlc3Q6IGRxTmV4dE1pbnVzCitkZWN0ZXN0OiBkcU5leHRQbHVzCitkZWN0ZXN0OiBkcU5leHRUb3dhcmQKK2RlY3Rlc3Q6IGRxT3IKK2RlY3Rlc3Q6IGRxUGx1cworZGVjdGVzdDogZHFRdWFudGl6ZQorZGVjdGVzdDogZHFSZWR1Y2UKK2RlY3Rlc3Q6IGRxUmVtYWluZGVyCitkZWN0ZXN0OiBkcVJlbWFpbmRlck5lYXIKK2RlY3Rlc3Q6IGRxUm90YXRlCitkZWN0ZXN0OiBkcVNhbWVRdWFudHVtCitkZWN0ZXN0OiBkcVNjYWxlQgorZGVjdGVzdDogZHFTaGlmdAorZGVjdGVzdDogZHFTdWJ0cmFjdAorZGVjdGVzdDogZHFUb0ludGVncmFsCitkZWN0ZXN0OiBkcVhvcgorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RlY1NpbmdsZS5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZWNTaW5nbGUuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2Y5N2JmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZWNTaW5nbGUuZGVjVGVzdApAQCAtMCwwICsxLDI1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRlY1NpbmdsZS5kZWNUZXN0IC0tIHJ1biBhbGwgZGVjU2luZ2xlIGRlY2ltYWwgYXJpdGhtZXRpYyB0ZXN0cyAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gZGVjU2luZ2xlIHRlc3RzCitkZWN0ZXN0OiBkc0Jhc2UKK2RlY3Rlc3Q6IGRzRW5jb2RlCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGl2aWRlLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RpdmlkZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYmI1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RpdmlkZS5kZWNUZXN0CkBAIC0wLDAgKzEsODU0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRpdmlkZS5kZWNUZXN0IC0tIGRlY2ltYWwgZGl2aXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gc2FuaXR5IGNoZWNrcworZGl2eDAwMSBkaXZpZGUgIDEgICAgIDEgICAgLT4gIDEKK2RpdngwMDIgZGl2aWRlICAyICAgICAxICAgIC0+ICAyCitkaXZ4MDAzIGRpdmlkZSAgMSAgICAgMiAgICAtPiAgMC41CitkaXZ4MDA0IGRpdmlkZSAgMiAgICAgMiAgICAtPiAgMQorZGl2eDAwNSBkaXZpZGUgIDAgICAgIDEgICAgLT4gIDAKK2RpdngwMDYgZGl2aWRlICAwICAgICAyICAgIC0+ICAwCitkaXZ4MDA3IGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkaXZ4MDA4IGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCitkaXZ4MDA5IGRpdmlkZSAgMyAgICAgMyAgICAtPiAgMQorCitkaXZ4MDEwIGRpdmlkZSAgMi40ICAgMSAgICAtPiAgMi40CitkaXZ4MDExIGRpdmlkZSAgMi40ICAgLTEgICAtPiAgLTIuNAorZGl2eDAxMiBkaXZpZGUgIC0yLjQgIDEgICAgLT4gIC0yLjQKK2RpdngwMTMgZGl2aWRlICAtMi40ICAtMSAgIC0+ICAyLjQKK2RpdngwMTQgZGl2aWRlICAyLjQwICAxICAgIC0+ICAyLjQwCitkaXZ4MDE1IGRpdmlkZSAgMi40MDAgMSAgICAtPiAgMi40MDAKK2RpdngwMTYgZGl2aWRlICAyLjQgICAyICAgIC0+ICAxLjIKK2RpdngwMTcgZGl2aWRlICAyLjQwMCAyICAgIC0+ICAxLjIwMAorZGl2eDAxOCBkaXZpZGUgIDIuICAgIDIgICAgLT4gIDEKK2RpdngwMTkgZGl2aWRlICAyMCAgICAyMCAgIC0+ICAxCisKK2RpdngwMjAgZGl2aWRlICAxODcgICAxODcgICAgLT4gIDEKK2RpdngwMjEgZGl2aWRlICA1ICAgICAyICAgICAgLT4gIDIuNQorZGl2eDAyMiBkaXZpZGUgIDUwICAgIDIwICAgICAtPiAgMi41CitkaXZ4MDIzIGRpdmlkZSAgNTAwICAgMjAwICAgIC0+ICAyLjUKK2RpdngwMjQgZGl2aWRlICA1MC4wICAyMC4wICAgLT4gIDIuNQorZGl2eDAyNSBkaXZpZGUgIDUuMDAgIDIuMDAgICAtPiAgMi41CitkaXZ4MDI2IGRpdmlkZSAgNSAgICAgMi4wICAgIC0+ICAyLjUKK2RpdngwMjcgZGl2aWRlICA1ICAgICAyLjAwMCAgLT4gIDIuNQorZGl2eDAyOCBkaXZpZGUgIDUgICAgIDAuMjAgICAtPiAgMjUKK2RpdngwMjkgZGl2aWRlICA1ICAgICAwLjIwMCAgLT4gIDI1CitkaXZ4MDMwIGRpdmlkZSAgMTAgICAgMSAgICAgIC0+ICAxMAorZGl2eDAzMSBkaXZpZGUgIDEwMCAgIDEgICAgICAtPiAgMTAwCitkaXZ4MDMyIGRpdmlkZSAgMTAwMCAgMSAgICAgIC0+ICAxMDAwCitkaXZ4MDMzIGRpdmlkZSAgMTAwMCAgMTAwICAgIC0+ICAxMAorCitkaXZ4MDM1IGRpdmlkZSAgMSAgICAgMiAgICAgIC0+ICAwLjUKK2RpdngwMzYgZGl2aWRlICAxICAgICA0ICAgICAgLT4gIDAuMjUKK2RpdngwMzcgZGl2aWRlICAxICAgICA4ICAgICAgLT4gIDAuMTI1CitkaXZ4MDM4IGRpdmlkZSAgMSAgICAgMTYgICAgIC0+ICAwLjA2MjUKK2RpdngwMzkgZGl2aWRlICAxICAgICAzMiAgICAgLT4gIDAuMDMxMjUKK2RpdngwNDAgZGl2aWRlICAxICAgICA2NCAgICAgLT4gIDAuMDE1NjI1CitkaXZ4MDQxIGRpdmlkZSAgMSAgICAtMiAgICAgIC0+ICAtMC41CitkaXZ4MDQyIGRpdmlkZSAgMSAgICAtNCAgICAgIC0+ICAtMC4yNQorZGl2eDA0MyBkaXZpZGUgIDEgICAgLTggICAgICAtPiAgLTAuMTI1CitkaXZ4MDQ0IGRpdmlkZSAgMSAgICAtMTYgICAgIC0+ICAtMC4wNjI1CitkaXZ4MDQ1IGRpdmlkZSAgMSAgICAtMzIgICAgIC0+ICAtMC4wMzEyNQorZGl2eDA0NiBkaXZpZGUgIDEgICAgLTY0ICAgICAtPiAgLTAuMDE1NjI1CitkaXZ4MDQ3IGRpdmlkZSAtMSAgICAgMiAgICAgIC0+ICAtMC41CitkaXZ4MDQ4IGRpdmlkZSAtMSAgICAgNCAgICAgIC0+ICAtMC4yNQorZGl2eDA0OSBkaXZpZGUgLTEgICAgIDggICAgICAtPiAgLTAuMTI1CitkaXZ4MDUwIGRpdmlkZSAtMSAgICAgMTYgICAgIC0+ICAtMC4wNjI1CitkaXZ4MDUxIGRpdmlkZSAtMSAgICAgMzIgICAgIC0+ICAtMC4wMzEyNQorZGl2eDA1MiBkaXZpZGUgLTEgICAgIDY0ICAgICAtPiAgLTAuMDE1NjI1CitkaXZ4MDUzIGRpdmlkZSAtMSAgICAtMiAgICAgIC0+ICAwLjUKK2RpdngwNTQgZGl2aWRlIC0xICAgIC00ICAgICAgLT4gIDAuMjUKK2RpdngwNTUgZGl2aWRlIC0xICAgIC04ICAgICAgLT4gIDAuMTI1CitkaXZ4MDU2IGRpdmlkZSAtMSAgICAtMTYgICAgIC0+ICAwLjA2MjUKK2RpdngwNTcgZGl2aWRlIC0xICAgIC0zMiAgICAgLT4gIDAuMDMxMjUKK2RpdngwNTggZGl2aWRlIC0xICAgIC02NCAgICAgLT4gIDAuMDE1NjI1CisKK2RpdngwNzAgZGl2aWRlICA5OTk5OTk5OTkgICAgICAgIDEgICAgLT4gIDk5OTk5OTk5OQorZGl2eDA3MSBkaXZpZGUgIDk5OTk5OTk5OS40ICAgICAgMSAgICAtPiAgOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZGl2eDA3MiBkaXZpZGUgIDk5OTk5OTk5OS41ICAgICAgMSAgICAtPiAgMS4wMDAwMDAwMEUrOSBJbmV4YWN0IFJvdW5kZWQKK2RpdngwNzMgZGl2aWRlICA5OTk5OTk5OTkuOSAgICAgIDEgICAgLT4gIDEuMDAwMDAwMDBFKzkgSW5leGFjdCBSb3VuZGVkCitkaXZ4MDc0IGRpdmlkZSAgOTk5OTk5OTk5Ljk5OSAgICAxICAgIC0+ICAxLjAwMDAwMDAwRSs5IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA2CitkaXZ4MDgwIGRpdmlkZSAgOTk5OTk5OTk5ICAgICAxICAtPiAgMS4wMDAwMEUrOSBJbmV4YWN0IFJvdW5kZWQKK2RpdngwODEgZGl2aWRlICA5OTk5OTk5OSAgICAgIDEgIC0+ICAxLjAwMDAwRSs4IEluZXhhY3QgUm91bmRlZAorZGl2eDA4MiBkaXZpZGUgIDk5OTk5OTkgICAgICAgMSAgLT4gIDEuMDAwMDBFKzcgSW5leGFjdCBSb3VuZGVkCitkaXZ4MDgzIGRpdmlkZSAgOTk5OTk5ICAgICAgICAxICAtPiAgOTk5OTk5CitkaXZ4MDg0IGRpdmlkZSAgOTk5OTkgICAgICAgICAxICAtPiAgOTk5OTkKK2RpdngwODUgZGl2aWRlICA5OTk5ICAgICAgICAgIDEgIC0+ICA5OTk5CitkaXZ4MDg2IGRpdmlkZSAgOTk5ICAgICAgICAgICAxICAtPiAgOTk5CitkaXZ4MDg3IGRpdmlkZSAgOTkgICAgICAgICAgICAxICAtPiAgOTkKK2RpdngwODggZGl2aWRlICA5ICAgICAgICAgICAgIDEgIC0+ICA5CisKK3ByZWNpc2lvbjogOQorZGl2eDA5MCBkaXZpZGUgIDAuICAgICAgICAgICAgMSAgICAtPiAgMAorZGl2eDA5MSBkaXZpZGUgIC4wICAgICAgICAgICAgMSAgICAtPiAgMC4wCitkaXZ4MDkyIGRpdmlkZSAgMC4wMCAgICAgICAgICAxICAgIC0+ICAwLjAwCitkaXZ4MDkzIGRpdmlkZSAgMC4wMEUrOSAgICAgICAxICAgIC0+ICAwRSs3CitkaXZ4MDk0IGRpdmlkZSAgMC4wMDAwRS01MCAgICAxICAgIC0+ICAwRS01NAorCitkaXZ4MDk1IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTggIC0+ICAxRSs4CitkaXZ4MDk2IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTkgIC0+ICAxRSs5CitkaXZ4MDk3IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTEwIC0+ICAxRSsxMAorZGl2eDA5OCBkaXZpZGUgIDEgICAgICAgICAgICAxRS0xMSAtPiAgMUUrMTEKK2RpdngwOTkgZGl2aWRlICAxICAgICAgICAgICAgMUUtMTIgLT4gIDFFKzEyCisKK2RpdngxMDAgZGl2aWRlICAxICAxICAgLT4gMQorZGl2eDEwMSBkaXZpZGUgIDEgIDIgICAtPiAwLjUKK2RpdngxMDIgZGl2aWRlICAxICAzICAgLT4gMC4zMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCitkaXZ4MTAzIGRpdmlkZSAgMSAgNCAgIC0+IDAuMjUKK2RpdngxMDQgZGl2aWRlICAxICA1ICAgLT4gMC4yCitkaXZ4MTA1IGRpdmlkZSAgMSAgNiAgIC0+IDAuMTY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAorZGl2eDEwNiBkaXZpZGUgIDEgIDcgICAtPiAwLjE0Mjg1NzE0MyBJbmV4YWN0IFJvdW5kZWQKK2RpdngxMDcgZGl2aWRlICAxICA4ICAgLT4gMC4xMjUKK2RpdngxMDggZGl2aWRlICAxICA5ICAgLT4gMC4xMTExMTExMTEgSW5leGFjdCBSb3VuZGVkCitkaXZ4MTA5IGRpdmlkZSAgMSAgMTAgIC0+IDAuMQorZGl2eDExMCBkaXZpZGUgIDEgIDEgICAtPiAxCitkaXZ4MTExIGRpdmlkZSAgMiAgMSAgIC0+IDIKK2RpdngxMTIgZGl2aWRlICAzICAxICAgLT4gMworZGl2eDExMyBkaXZpZGUgIDQgIDEgICAtPiA0CitkaXZ4MTE0IGRpdmlkZSAgNSAgMSAgIC0+IDUKK2RpdngxMTUgZGl2aWRlICA2ICAxICAgLT4gNgorZGl2eDExNiBkaXZpZGUgIDcgIDEgICAtPiA3CitkaXZ4MTE3IGRpdmlkZSAgOCAgMSAgIC0+IDgKK2RpdngxMTggZGl2aWRlICA5ICAxICAgLT4gOQorZGl2eDExOSBkaXZpZGUgIDEwIDEgICAtPiAxMAorCitkaXZ4MTIwIGRpdmlkZSAgM0UrMSAwLjAwMSAgLT4gM0UrNAorZGl2eDEyMSBkaXZpZGUgIDIuMjAwIDIgICAgIC0+IDEuMTAwCisKK2RpdngxMzAgZGl2aWRlICAxMjM0NSAgNC45OTkgIC0+ICAyNDY5LjQ5MzkwIEluZXhhY3QgUm91bmRlZAorZGl2eDEzMSBkaXZpZGUgIDEyMzQ1ICA0Ljk5ICAgLT4gIDI0NzMuOTQ3OTAgSW5leGFjdCBSb3VuZGVkCitkaXZ4MTMyIGRpdmlkZSAgMTIzNDUgIDQuOSAgICAtPiAgMjUxOS4zODc3NiBJbmV4YWN0IFJvdW5kZWQKK2RpdngxMzMgZGl2aWRlICAxMjM0NSAgNSAgICAgIC0+ICAyNDY5CitkaXZ4MTM0IGRpdmlkZSAgMTIzNDUgIDUuMSAgICAtPiAgMjQyMC41ODgyNCBJbmV4YWN0IFJvdW5kZWQKK2RpdngxMzUgZGl2aWRlICAxMjM0NSAgNS4wMSAgIC0+ICAyNDY0LjA3MTg2IEluZXhhY3QgUm91bmRlZAorZGl2eDEzNiBkaXZpZGUgIDEyMzQ1ICA1LjAwMSAgLT4gIDI0NjguNTA2MzAgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogICA5CittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorCistLSB0ZXN0IHBvc3NpYmx5IGltcHJlY2lzZSByZXN1bHRzCitkaXZ4MjIwIGRpdmlkZSAzOTEgICA1OTcgLT4gIDAuNjU0OTQxMzc0IEluZXhhY3QgUm91bmRlZAorZGl2eDIyMSBkaXZpZGUgMzkxICAtNTk3IC0+IC0wLjY1NDk0MTM3NCBJbmV4YWN0IFJvdW5kZWQKK2RpdngyMjIgZGl2aWRlIC0zOTEgIDU5NyAtPiAtMC42NTQ5NDEzNzQgSW5leGFjdCBSb3VuZGVkCitkaXZ4MjIzIGRpdmlkZSAtMzkxIC01OTcgLT4gIDAuNjU0OTQxMzc0IEluZXhhY3QgUm91bmRlZAorCistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitkaXZ4MjcwIGRpdmlkZSAxIDFlOTk5OTk5OTk5ICAgIC0+IDFFLTk5OTk5OTk5OQorZGl2eDI3MSBkaXZpZGUgMSAwLjllOTk5OTk5OTk5ICAtPiAxLjExMTExMTExRS05OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkaXZ4MjcyIGRpdmlkZSAxIDAuOTllOTk5OTk5OTk5IC0+IDEuMDEwMTAxMDFFLTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RpdngyNzMgZGl2aWRlIDEgMC45OTk5OTk5OTllOTk5OTk5OTk5IC0+IDEuMDAwMDAwMDBFLTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RpdngyNzQgZGl2aWRlIDllOTk5OTk5OTk5ICAgIDEgLT4gOUUrOTk5OTk5OTk5CitkaXZ4Mjc1IGRpdmlkZSA5LjllOTk5OTk5OTk5ICAxIC0+IDkuOUUrOTk5OTk5OTk5CitkaXZ4Mjc2IGRpdmlkZSA5Ljk5ZTk5OTk5OTk5OSAxIC0+IDkuOTlFKzk5OTk5OTk5OQorZGl2eDI3NyBkaXZpZGUgOS45OTk5OTk5OWU5OTk5OTk5OTkgMSAtPiA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkKKworZGl2eDI4MCBkaXZpZGUgMC4xIDllLTk5OTk5OTk5OSAgIC0+IDEuMTExMTExMTFFKzk5OTk5OTk5NyBJbmV4YWN0IFJvdW5kZWQKK2RpdngyODEgZGl2aWRlIDAuMSA5OWUtOTk5OTk5OTk5ICAtPiAxLjAxMDEwMTAxRSs5OTk5OTk5OTYgSW5leGFjdCBSb3VuZGVkCitkaXZ4MjgyIGRpdmlkZSAwLjEgOTk5ZS05OTk5OTk5OTkgLT4gMS4wMDEwMDEwMEUrOTk5OTk5OTk1IEluZXhhY3QgUm91bmRlZAorCitkaXZ4MjgzIGRpdmlkZSAwLjEgOWUtOTk5OTk5OTk4ICAgICAtPiAxLjExMTExMTExRSs5OTk5OTk5OTYgSW5leGFjdCBSb3VuZGVkCitkaXZ4Mjg0IGRpdmlkZSAwLjEgOTllLTk5OTk5OTk5OCAgICAtPiAxLjAxMDEwMTAxRSs5OTk5OTk5OTUgSW5leGFjdCBSb3VuZGVkCitkaXZ4Mjg1IGRpdmlkZSAwLjEgOTk5ZS05OTk5OTk5OTggICAtPiAxLjAwMTAwMTAwRSs5OTk5OTk5OTQgSW5leGFjdCBSb3VuZGVkCitkaXZ4Mjg2IGRpdmlkZSAwLjEgOTk5ZS05OTk5OTk5OTcgICAtPiAxLjAwMTAwMTAwRSs5OTk5OTk5OTMgSW5leGFjdCBSb3VuZGVkCitkaXZ4Mjg3IGRpdmlkZSAwLjEgOTk5OWUtOTk5OTk5OTk3ICAtPiAxLjAwMDEwMDAxRSs5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkaXZ4Mjg4IGRpdmlkZSAwLjEgOTk5OTllLTk5OTk5OTk5NyAtPiAxLjAwMDAxMDAwRSs5OTk5OTk5OTEgSW5leGFjdCBSb3VuZGVkCisKKy0tIERpdmlkZSBpbnRvIDAgdGVzdHMKKworZGl2eDMwMSBkaXZpZGUgICAgMCAgICA3ICAgICAtPiAwCitkaXZ4MzAyIGRpdmlkZSAgICAwICAgIDdFLTUgIC0+IDBFKzUKK2RpdngzMDMgZGl2aWRlICAgIDAgICAgN0UtMSAgLT4gMEUrMQorZGl2eDMwNCBkaXZpZGUgICAgMCAgICA3RSsxICAtPiAwLjAKK2RpdngzMDUgZGl2aWRlICAgIDAgICAgN0UrNSAgLT4gMC4wMDAwMAorZGl2eDMwNiBkaXZpZGUgICAgMCAgICA3RSs2ICAtPiAwLjAwMDAwMAorZGl2eDMwNyBkaXZpZGUgICAgMCAgICA3RSs3ICAtPiAwRS03CitkaXZ4MzA4IGRpdmlkZSAgICAwICAgNzBFLTUgIC0+IDBFKzUKK2RpdngzMDkgZGl2aWRlICAgIDAgICA3MEUtMSAgLT4gMEUrMQorZGl2eDMxMCBkaXZpZGUgICAgMCAgIDcwRSswICAtPiAwCitkaXZ4MzExIGRpdmlkZSAgICAwICAgNzBFKzEgIC0+IDAuMAorZGl2eDMxMiBkaXZpZGUgICAgMCAgIDcwRSs1ICAtPiAwLjAwMDAwCitkaXZ4MzEzIGRpdmlkZSAgICAwICAgNzBFKzYgIC0+IDAuMDAwMDAwCitkaXZ4MzE0IGRpdmlkZSAgICAwICAgNzBFKzcgIC0+IDBFLTcKK2RpdngzMTUgZGl2aWRlICAgIDAgIDcwMEUtNSAgLT4gMEUrNQorZGl2eDMxNiBkaXZpZGUgICAgMCAgNzAwRS0xICAtPiAwRSsxCitkaXZ4MzE3IGRpdmlkZSAgICAwICA3MDBFKzAgIC0+IDAKK2RpdngzMTggZGl2aWRlICAgIDAgIDcwMEUrMSAgLT4gMC4wCitkaXZ4MzE5IGRpdmlkZSAgICAwICA3MDBFKzUgIC0+IDAuMDAwMDAKK2RpdngzMjAgZGl2aWRlICAgIDAgIDcwMEUrNiAgLT4gMC4wMDAwMDAKK2RpdngzMjEgZGl2aWRlICAgIDAgIDcwMEUrNyAgLT4gMEUtNworZGl2eDMyMiBkaXZpZGUgICAgMCAgNzAwRSs3NyAtPiAwRS03NworCitkaXZ4MzMxIGRpdmlkZSAwRS0zICAgIDdFLTUgIC0+IDBFKzIKK2RpdngzMzIgZGl2aWRlIDBFLTMgICAgN0UtMSAgLT4gMC4wMAorZGl2eDMzMyBkaXZpZGUgMEUtMyAgICA3RSsxICAtPiAwLjAwMDAKK2RpdngzMzQgZGl2aWRlIDBFLTMgICAgN0UrNSAgLT4gMEUtOAorZGl2eDMzNSBkaXZpZGUgMEUtMSAgICA3RS01ICAtPiAwRSs0CitkaXZ4MzM2IGRpdmlkZSAwRS0xICAgIDdFLTEgIC0+IDAKK2RpdngzMzcgZGl2aWRlIDBFLTEgICAgN0UrMSAgLT4gMC4wMAorZGl2eDMzOCBkaXZpZGUgMEUtMSAgICA3RSs1ICAtPiAwLjAwMDAwMAorZGl2eDMzOSBkaXZpZGUgMEUrMSAgICA3RS01ICAtPiAwRSs2CitkaXZ4MzQwIGRpdmlkZSAwRSsxICAgIDdFLTEgIC0+IDBFKzIKK2RpdngzNDEgZGl2aWRlIDBFKzEgICAgN0UrMSAgLT4gMAorZGl2eDM0MiBkaXZpZGUgMEUrMSAgICA3RSs1ICAtPiAwLjAwMDAKK2RpdngzNDMgZGl2aWRlIDBFKzMgICAgN0UtNSAgLT4gMEUrOAorZGl2eDM0NCBkaXZpZGUgMEUrMyAgICA3RS0xICAtPiAwRSs0CitkaXZ4MzQ1IGRpdmlkZSAwRSszICAgIDdFKzEgIC0+IDBFKzIKK2RpdngzNDYgZGl2aWRlIDBFKzMgICAgN0UrNSAgLT4gMC4wMAorCittYXhleHBvbmVudDogOTIKK21pbmV4cG9uZW50OiAtOTIKK3ByZWNpc2lvbjogICAgNworZGl2eDM1MSBkaXZpZGUgMEUtOTIgICA3RS0xICAtPiAwRS05MQorZGl2eDM1MiBkaXZpZGUgMEUtOTIgICA3RSsxICAtPiAwRS05MworZGl2eDM1MyBkaXZpZGUgMEUtOTIgICA3RSs1ICAtPiAwRS05NworZGl2eDM1NCBkaXZpZGUgMEUtOTIgICA3RSs2ICAtPiAwRS05OAorZGl2eDM1NSBkaXZpZGUgMEUtOTIgICA3RSs3ICAtPiAwRS05OCBDbGFtcGVkCitkaXZ4MzU2IGRpdmlkZSAwRS05MiA3NzdFLTEgIC0+IDBFLTkxCitkaXZ4MzU3IGRpdmlkZSAwRS05MiA3NzdFKzEgIC0+IDBFLTkzCitkaXZ4MzU4IGRpdmlkZSAwRS05MiA3NzdFKzMgIC0+IDBFLTk1CitkaXZ4MzU5IGRpdmlkZSAwRS05MiA3NzdFKzQgIC0+IDBFLTk2CitkaXZ4MzYwIGRpdmlkZSAwRS05MiA3NzdFKzUgIC0+IDBFLTk3CitkaXZ4MzYxIGRpdmlkZSAwRS05MiA3NzdFKzYgIC0+IDBFLTk4CitkaXZ4MzYyIGRpdmlkZSAwRS05MiA3NzdFKzcgIC0+IDBFLTk4IENsYW1wZWQKK2RpdngzNjMgZGl2aWRlIDBFLTkyICAgN0UrOTIgLT4gMEUtOTggQ2xhbXBlZAorCitkaXZ4MzcxIGRpdmlkZSAwRS05MiA3MDBFLTEgIC0+IDBFLTkxCitkaXZ4MzcyIGRpdmlkZSAwRS05MiA3MDBFKzEgIC0+IDBFLTkzCitkaXZ4MzczIGRpdmlkZSAwRS05MiA3MDBFKzMgIC0+IDBFLTk1CitkaXZ4Mzc0IGRpdmlkZSAwRS05MiA3MDBFKzQgIC0+IDBFLTk2CitkaXZ4Mzc1IGRpdmlkZSAwRS05MiA3MDBFKzUgIC0+IDBFLTk3CitkaXZ4Mzc2IGRpdmlkZSAwRS05MiA3MDBFKzYgIC0+IDBFLTk4CitkaXZ4Mzc3IGRpdmlkZSAwRS05MiA3MDBFKzcgIC0+IDBFLTk4IENsYW1wZWQKKworZGl2eDM4MSBkaXZpZGUgMEUrOTIgICA3RSsxICAtPiAwRSs5MQorZGl2eDM4MiBkaXZpZGUgMEUrOTIgICA3RSswICAtPiAwRSs5MgorZGl2eDM4MyBkaXZpZGUgMEUrOTIgICA3RS0xICAtPiAwRSs5MiBDbGFtcGVkCitkaXZ4Mzg0IGRpdmlkZSAwRSs5MCA3NzdFKzEgIC0+IDBFKzg5CitkaXZ4Mzg1IGRpdmlkZSAwRSs5MCA3NzdFLTEgIC0+IDBFKzkxCitkaXZ4Mzg2IGRpdmlkZSAwRSs5MCA3NzdFLTIgIC0+IDBFKzkyCitkaXZ4Mzg3IGRpdmlkZSAwRSs5MCA3NzdFLTMgIC0+IDBFKzkyIENsYW1wZWQKK2RpdngzODggZGl2aWRlIDBFKzkwIDc3N0UtNCAgLT4gMEUrOTIgQ2xhbXBlZAorCitkaXZ4MzkxIGRpdmlkZSAwRSs5MCA3MDBFKzEgIC0+IDBFKzg5CitkaXZ4MzkyIGRpdmlkZSAwRSs5MCA3MDBFLTEgIC0+IDBFKzkxCitkaXZ4MzkzIGRpdmlkZSAwRSs5MCA3MDBFLTIgIC0+IDBFKzkyCitkaXZ4Mzk0IGRpdmlkZSAwRSs5MCA3MDBFLTMgIC0+IDBFKzkyIENsYW1wZWQKK2RpdngzOTUgZGl2aWRlIDBFKzkwIDcwMEUtNCAgLT4gMEUrOTIgQ2xhbXBlZAorCistLSBpbnB1dCByb3VuZGluZyBjaGVja3MKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK2Rpdng0MDEgZGl2aWRlIDEyMzQ1Njc4MDAwIDEgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAorZGl2eDQwMiBkaXZpZGUgMSAxMjM0NTY3ODAwMCAtPiA4LjEwMDAwMDY2RS0xMSBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0MDMgZGl2aWRlIDEyMzQ1Njc4MDAgIDEgLT4gMS4yMzQ1Njc4MEUrOSAgUm91bmRlZAorZGl2eDQwNCBkaXZpZGUgMSAxMjM0NTY3ODAwICAtPiA4LjEwMDAwMDY2RS0xMCBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0MDUgZGl2aWRlIDEyMzQ1Njc4OTAgIDEgLT4gMS4yMzQ1Njc4OUUrOSAgUm91bmRlZAorZGl2eDQwNiBkaXZpZGUgMSAxMjM0NTY3ODkwICAtPiA4LjEwMDAwMDA3RS0xMCBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0MDcgZGl2aWRlIDEyMzQ1Njc4OTEgIDEgLT4gMS4yMzQ1Njc4OUUrOSAgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDA4IGRpdmlkZSAxIDEyMzQ1Njc4OTEgIC0+IDguMTAwMDAwMDdFLTEwIEluZXhhY3QgUm91bmRlZAorZGl2eDQwOSBkaXZpZGUgMTIzNDU2Nzg5MDEgMSAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0MTAgZGl2aWRlIDEgMTIzNDU2Nzg5MDEgLT4gOC4xMDAwMDAwN0UtMTEgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDExIGRpdmlkZSAxMjM0NTY3ODk2ICAxIC0+IDEuMjM0NTY3OTBFKzkgIEluZXhhY3QgUm91bmRlZAorZGl2eDQxMiBkaXZpZGUgMSAxMjM0NTY3ODk2ICAtPiA4LjEwMDAwMDAzRS0xMCBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0MTMgZGl2aWRlIDEgMTIzNDU2Nzg5NyAgLT4gOC4xMDAwMDAwM0UtMTAgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDE0IGRpdmlkZSAxIDEyMzQ1Njc4OTggIC0+IDguMTAwMDAwMDJFLTEwIEluZXhhY3QgUm91bmRlZAorZGl2eDQxNSBkaXZpZGUgMSAxMjM0NTY3ODk5ICAtPiA4LjEwMDAwMDAxRS0xMCBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0MTYgZGl2aWRlIDEgMTIzNDU2NzkwMCAgLT4gOC4xMDAwMDAwMUUtMTAgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDE3IGRpdmlkZSAxIDEyMzQ1Njc5MDEgIC0+IDguMTAwMDAwMDBFLTEwIEluZXhhY3QgUm91bmRlZAorZGl2eDQxOCBkaXZpZGUgMSAxMjM0NTY3OTAyICAtPiA4LjA5OTk5OTk5RS0xMCBJbmV4YWN0IFJvdW5kZWQKKy0tIHNvbWUgbG9uZ2llcworZGl2eDQyMSBkaXZpZGUgMTIzNDU2Nzg5Ni4wMDAwMDAwMDAwMDAgIDEgLT4gMS4yMzQ1Njc5MEUrOSAgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDIyIGRpdmlkZSAxIDEyMzQ1Njc4OTYuMDAwMDAwMDAwMDAwICAtPiA4LjEwMDAwMDAzRS0xMCBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0MjMgZGl2aWRlIDEyMzQ1Njc4OTYuMDAwMDAwMDAwMDAxICAxIC0+IDEuMjM0NTY3OTBFKzkgIEluZXhhY3QgUm91bmRlZAorZGl2eDQyNCBkaXZpZGUgMSAxMjM0NTY3ODk2LjAwMDAwMDAwMDAwMSAgLT4gOC4xMDAwMDAwM0UtMTAgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDI1IGRpdmlkZSAxMjM0NTY3ODk2LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgMSAtPiAxLjIzNDU2NzkwRSs5ICBJbmV4YWN0IFJvdW5kZWQKK2Rpdng0MjYgZGl2aWRlIDEgMTIzNDU2Nzg5Ni4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIC0+IDguMTAwMDAwMDNFLTEwIEluZXhhY3QgUm91bmRlZAorZGl2eDQyNyBkaXZpZGUgMTIzNDU2Nzg5Ny45MDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIDEgLT4gMS4yMzQ1Njc5MEUrOSAgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDI4IGRpdmlkZSAxIDEyMzQ1Njc4OTcuOTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiA4LjEwMDAwMDAyRS0xMCBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAxNQorLS0gc3RpbGwgY2hlY2tpbmcuLi4KK2Rpdng0NDEgZGl2aWRlIDEyMzQ1Njc4MDAwIDEgLT4gMTIzNDU2NzgwMDAKK2Rpdng0NDIgZGl2aWRlIDEgMTIzNDU2NzgwMDAgLT4gOC4xMDAwMDA2NjQyMDAwNUUtMTEgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDQzIGRpdmlkZSAxMjM0NTY3ODAwICAxIC0+IDEyMzQ1Njc4MDAKK2Rpdng0NDQgZGl2aWRlIDEgMTIzNDU2NzgwMCAgLT4gOC4xMDAwMDA2NjQyMDAwNUUtMTAgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDQ1IGRpdmlkZSAxMjM0NTY3ODkwICAxIC0+IDEyMzQ1Njc4OTAKK2Rpdng0NDYgZGl2aWRlIDEgMTIzNDU2Nzg5MCAgLT4gOC4xMDAwMDAwNzM3MTAwMEUtMTAgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDQ3IGRpdmlkZSAxMjM0NTY3ODkxICAxIC0+IDEyMzQ1Njc4OTEKK2Rpdng0NDggZGl2aWRlIDEgMTIzNDU2Nzg5MSAgLT4gOC4xMDAwMDAwNjcxNDkwMEUtMTAgSW5leGFjdCBSb3VuZGVkCitkaXZ4NDQ5IGRpdmlkZSAxMjM0NTY3ODkwMSAxIC0+IDEyMzQ1Njc4OTAxCitkaXZ4NDUwIGRpdmlkZSAxIDEyMzQ1Njc4OTAxIC0+IDguMTAwMDAwMDczMDUzOTBFLTExIEluZXhhY3QgUm91bmRlZAorZGl2eDQ1MSBkaXZpZGUgMTIzNDU2Nzg5NiAgMSAtPiAxMjM0NTY3ODk2CitkaXZ4NDUyIGRpdmlkZSAxIDEyMzQ1Njc4OTYgIC0+IDguMTAwMDAwMDM0MzQ0MDBFLTEwIEluZXhhY3QgUm91bmRlZAorCistLSBoaWdoLWxvd3MKK2Rpdng0NTMgZGl2aWRlIDFlKzEgICAxICAgIC0+ICAgMUUrMQorZGl2eDQ1NCBkaXZpZGUgMWUrMSAgIDEuMCAgLT4gICAxRSsxCitkaXZ4NDU1IGRpdmlkZSAxZSsxICAgMS4wMCAtPiAgIDFFKzEKK2Rpdng0NTYgZGl2aWRlIDFlKzIgICAyICAgIC0+ICAgNUUrMQorZGl2eDQ1NyBkaXZpZGUgMWUrMiAgIDIuMCAgLT4gICA1RSsxCitkaXZ4NDU4IGRpdmlkZSAxZSsyICAgMi4wMCAtPiAgIDVFKzEKKworLS0gc29tZSBmcm9tIElFRUUgZGlzY3Vzc2lvbnMKK2Rpdng0NjAgZGl2aWRlIDNlMCAgICAgIDJlMCAgICAgLT4gMS41CitkaXZ4NDYxIGRpdmlkZSAzMGUtMSAgICAyZTAgICAgIC0+IDEuNQorZGl2eDQ2MiBkaXZpZGUgMzAwZS0yICAgMmUwICAgICAtPiAxLjUwCitkaXZ4NDY0IGRpdmlkZSAzMDAwZS0zICAyZTAgICAgIC0+IDEuNTAwCitkaXZ4NDY1IGRpdmlkZSAzZTAgICAgICAyMGUtMSAgIC0+IDEuNQorZGl2eDQ2NiBkaXZpZGUgMzBlLTEgICAgMjBlLTEgICAtPiAxLjUKK2Rpdng0NjcgZGl2aWRlIDMwMGUtMiAgIDIwZS0xICAgLT4gMS41CitkaXZ4NDY4IGRpdmlkZSAzMDAwZS0zICAyMGUtMSAgIC0+IDEuNTAKK2Rpdng0NjkgZGl2aWRlIDNlMCAgICAgIDIwMGUtMiAgLT4gMS41CitkaXZ4NDcwIGRpdmlkZSAzMGUtMSAgICAyMDBlLTIgIC0+IDEuNQorZGl2eDQ3MSBkaXZpZGUgMzAwZS0yICAgMjAwZS0yICAtPiAxLjUKK2Rpdng0NzIgZGl2aWRlIDMwMDBlLTMgIDIwMGUtMiAgLT4gMS41CitkaXZ4NDczIGRpdmlkZSAzZTAgICAgICAyMDAwZS0zIC0+IDEuNQorZGl2eDQ3NCBkaXZpZGUgMzBlLTEgICAgMjAwMGUtMyAtPiAxLjUKK2Rpdng0NzUgZGl2aWRlIDMwMGUtMiAgIDIwMDBlLTMgLT4gMS41CitkaXZ4NDc2IGRpdmlkZSAzMDAwZS0zICAyMDAwZS0zIC0+IDEuNQorCistLSBzb21lIHJlY2lwcm9jYWxzCitkaXZ4NDgwIGRpdmlkZSAxICAgICAgICAxLjBFKzMzIC0+IDFFLTMzCitkaXZ4NDgxIGRpdmlkZSAxICAgICAgICAxMEUrMzMgIC0+IDFFLTM0CitkaXZ4NDgyIGRpdmlkZSAxICAgICAgICAxLjBFLTMzIC0+IDFFKzMzCitkaXZ4NDgzIGRpdmlkZSAxICAgICAgICAxMEUtMzMgIC0+IDFFKzMyCisKKy0tIFJNUyBkaXNjdXNzaW9uIHRhYmxlCittYXhleHBvbmVudDogIDk2CittaW5leHBvbmVudDogLTk1CitwcmVjaXNpb246ICAgICA3CisKK2Rpdng0ODQgZGl2aWRlIDBlNSAgICAgMWUzIC0+ICAgMEUrMgorZGl2eDQ4NSBkaXZpZGUgMGU1ICAgICAyZTMgLT4gICAwRSsyCitkaXZ4NDg2IGRpdmlkZSAwZTUgICAgMTBlMiAtPiAgIDBFKzMKK2Rpdng0ODcgZGl2aWRlIDBlNSAgICAyMGUyIC0+ICAgMEUrMworZGl2eDQ4OCBkaXZpZGUgMGU1ICAgMTAwZTEgLT4gICAwRSs0CitkaXZ4NDg5IGRpdmlkZSAwZTUgICAyMDBlMSAtPiAgIDBFKzQKKworZGl2eDQ5MSBkaXZpZGUgMWU1ICAgICAxZTMgLT4gICAxRSsyCitkaXZ4NDkyIGRpdmlkZSAxZTUgICAgIDJlMyAtPiAgIDVFKzEKK2Rpdng0OTMgZGl2aWRlIDFlNSAgICAxMGUyIC0+ICAgMUUrMgorZGl2eDQ5NCBkaXZpZGUgMWU1ICAgIDIwZTIgLT4gICA1RSsxCitkaXZ4NDk1IGRpdmlkZSAxZTUgICAxMDBlMSAtPiAgIDFFKzIKK2Rpdng0OTYgZGl2aWRlIDFlNSAgIDIwMGUxIC0+ICAgNUUrMQorCistLSB0cnl6ZXJvcyBjYXNlcworcHJlY2lzaW9uOiAgIDcKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTIKK21pbmV4cG9uZW50OiAtOTIKK2Rpdng0OTcgIGRpdmlkZSAgMEUrODYgMTAwMEUtMTMgIC0+IDBFKzkyIENsYW1wZWQKK2Rpdng0OTggIGRpdmlkZSAgMEUtOTggMTAwMEUrMTMgIC0+IDBFLTk4IENsYW1wZWQKKworcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorCistLSBmb2N1cyBvbiB0cmFpbGluZyB6ZXJvcyBpc3N1ZXMKK3ByZWNpc2lvbjogICA5CitkaXZ4NTAwIGRpdmlkZSAgMSAgICAgIDkuOSAgICAtPiAgMC4xMDEwMTAxMDEgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDgKK2Rpdng1MDEgZGl2aWRlICAxICAgICAgOS45ICAgIC0+ICAwLjEwMTAxMDEwICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgNworZGl2eDUwMiBkaXZpZGUgIDEgICAgICA5LjkgICAgLT4gIDAuMTAxMDEwMSAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICA2CitkaXZ4NTAzIGRpdmlkZSAgMSAgICAgIDkuOSAgICAtPiAgMC4xMDEwMTAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDkKKworZGl2eDUxMSBkaXZpZGUgMSAgICAgICAgIDIgICAgLT4gMC41CitkaXZ4NTEyIGRpdmlkZSAxLjAgICAgICAgMiAgICAtPiAwLjUKK2Rpdng1MTMgZGl2aWRlIDEuMDAgICAgICAyICAgIC0+IDAuNTAKK2Rpdng1MTQgZGl2aWRlIDEuMDAwICAgICAyICAgIC0+IDAuNTAwCitkaXZ4NTE1IGRpdmlkZSAxLjAwMDAgICAgMiAgICAtPiAwLjUwMDAKK2Rpdng1MTYgZGl2aWRlIDEuMDAwMDAgICAyICAgIC0+IDAuNTAwMDAKK2Rpdng1MTcgZGl2aWRlIDEuMDAwMDAwICAyICAgIC0+IDAuNTAwMDAwCitkaXZ4NTE4IGRpdmlkZSAxLjAwMDAwMDAgMiAgICAtPiAwLjUwMDAwMDAKK2Rpdng1MTkgZGl2aWRlIDEuMDAgICAgICAyLjAwIC0+IDAuNQorCitkaXZ4NTIxIGRpdmlkZSAyICAgIDEgICAgICAgICAtPiAyCitkaXZ4NTIyIGRpdmlkZSAyICAgIDEuMCAgICAgICAtPiAyCitkaXZ4NTIzIGRpdmlkZSAyICAgIDEuMDAgICAgICAtPiAyCitkaXZ4NTI0IGRpdmlkZSAyICAgIDEuMDAwICAgICAtPiAyCitkaXZ4NTI1IGRpdmlkZSAyICAgIDEuMDAwMCAgICAtPiAyCitkaXZ4NTI2IGRpdmlkZSAyICAgIDEuMDAwMDAgICAtPiAyCitkaXZ4NTI3IGRpdmlkZSAyICAgIDEuMDAwMDAwICAtPiAyCitkaXZ4NTI4IGRpdmlkZSAyICAgIDEuMDAwMDAwMCAtPiAyCitkaXZ4NTI5IGRpdmlkZSAyLjAwIDEuMDAgICAgICAtPiAyCisKK2Rpdng1MzAgZGl2aWRlICAyLjQwICAgMiAgICAgIC0+ICAxLjIwCitkaXZ4NTMxIGRpdmlkZSAgMi40MCAgIDQgICAgICAtPiAgMC42MAorZGl2eDUzMiBkaXZpZGUgIDIuNDAgIDEwICAgICAgLT4gIDAuMjQKK2Rpdng1MzMgZGl2aWRlICAyLjQwICAgMi4wICAgIC0+ICAxLjIKK2Rpdng1MzQgZGl2aWRlICAyLjQwICAgNC4wICAgIC0+ICAwLjYKK2Rpdng1MzUgZGl2aWRlICAyLjQwICAxMC4wICAgIC0+ICAwLjI0CitkaXZ4NTM2IGRpdmlkZSAgMi40MCAgIDIuMDAgICAtPiAgMS4yCitkaXZ4NTM3IGRpdmlkZSAgMi40MCAgIDQuMDAgICAtPiAgMC42CitkaXZ4NTM4IGRpdmlkZSAgMi40MCAgMTAuMDAgICAtPiAgMC4yNAorZGl2eDUzOSBkaXZpZGUgIDAuOSAgICAwLjEgICAgLT4gIDkKK2Rpdng1NDAgZGl2aWRlICAwLjkgICAgMC4wMSAgIC0+ICA5RSsxCitkaXZ4NTQxIGRpdmlkZSAgMC45ICAgIDAuMDAxICAtPiAgOUUrMgorZGl2eDU0MiBkaXZpZGUgIDUgICAgICAyICAgICAgLT4gIDIuNQorZGl2eDU0MyBkaXZpZGUgIDUgICAgICAyLjAgICAgLT4gIDIuNQorZGl2eDU0NCBkaXZpZGUgIDUgICAgICAyLjAwICAgLT4gIDIuNQorZGl2eDU0NSBkaXZpZGUgIDUgICAgICAyMCAgICAgLT4gIDAuMjUKK2Rpdng1NDYgZGl2aWRlICA1ICAgICAgMjAuMCAgIC0+ICAwLjI1CitkaXZ4NTQ3IGRpdmlkZSAgMi40MDAgIDIgICAgICAtPiAgMS4yMDAKK2Rpdng1NDggZGl2aWRlICAyLjQwMCAgMi4wICAgIC0+ICAxLjIwCitkaXZ4NTQ5IGRpdmlkZSAgMi40MDAgIDIuNDAwICAtPiAgMQorCitkaXZ4NTUwIGRpdmlkZSAgMjQwICAgIDEgICAgICAtPiAgMjQwCitkaXZ4NTUxIGRpdmlkZSAgMjQwICAgIDEwICAgICAtPiAgMjQKK2Rpdng1NTIgZGl2aWRlICAyNDAgICAgMTAwICAgIC0+ICAyLjQKK2Rpdng1NTMgZGl2aWRlICAyNDAgICAgMTAwMCAgIC0+ICAwLjI0CitkaXZ4NTU0IGRpdmlkZSAgMjQwMCAgIDEgICAgICAtPiAgMjQwMAorZGl2eDU1NSBkaXZpZGUgIDI0MDAgICAxMCAgICAgLT4gIDI0MAorZGl2eDU1NiBkaXZpZGUgIDI0MDAgICAxMDAgICAgLT4gIDI0CitkaXZ4NTU3IGRpdmlkZSAgMjQwMCAgIDEwMDAgICAtPiAgMi40CisKKy0tICt2ZSBleHBvbmVudAorcHJlY2lzaW9uOiA1CitkaXZ4NTcwIGRpdmlkZSAgMi40RSs2ICAgICAyICAtPiAgMS4yRSs2CitkaXZ4NTcxIGRpdmlkZSAgMi40MEUrNiAgICAyICAtPiAgMS4yMEUrNgorZGl2eDU3MiBkaXZpZGUgIDIuNDAwRSs2ICAgMiAgLT4gIDEuMjAwRSs2CitkaXZ4NTczIGRpdmlkZSAgMi40MDAwRSs2ICAyICAtPiAgMS4yMDAwRSs2CitkaXZ4NTc0IGRpdmlkZSAgMjRFKzUgICAgICAyICAtPiAgMS4yRSs2CitkaXZ4NTc1IGRpdmlkZSAgMjQwRSs0ICAgICAyICAtPiAgMS4yMEUrNgorZGl2eDU3NiBkaXZpZGUgIDI0MDBFKzMgICAgMiAgLT4gIDEuMjAwRSs2CitkaXZ4NTc3IGRpdmlkZSAgMjQwMDBFKzIgICAyICAtPiAgMS4yMDAwRSs2CitwcmVjaXNpb246IDYKK2Rpdng1ODAgZGl2aWRlICAyLjRFKzYgICAgIDIgIC0+ICAxLjJFKzYKK2Rpdng1ODEgZGl2aWRlICAyLjQwRSs2ICAgIDIgIC0+ICAxLjIwRSs2CitkaXZ4NTgyIGRpdmlkZSAgMi40MDBFKzYgICAyICAtPiAgMS4yMDBFKzYKK2Rpdng1ODMgZGl2aWRlICAyLjQwMDBFKzYgIDIgIC0+ICAxLjIwMDBFKzYKK2Rpdng1ODQgZGl2aWRlICAyNEUrNSAgICAgIDIgIC0+ICAxLjJFKzYKK2Rpdng1ODUgZGl2aWRlICAyNDBFKzQgICAgIDIgIC0+ICAxLjIwRSs2CitkaXZ4NTg2IGRpdmlkZSAgMjQwMEUrMyAgICAyICAtPiAgMS4yMDBFKzYKK2Rpdng1ODcgZGl2aWRlICAyNDAwMEUrMiAgIDIgIC0+ICAxLjIwMDBFKzYKK3ByZWNpc2lvbjogNworZGl2eDU5MCBkaXZpZGUgIDIuNEUrNiAgICAgMiAgLT4gIDEuMkUrNgorZGl2eDU5MSBkaXZpZGUgIDIuNDBFKzYgICAgMiAgLT4gIDEuMjBFKzYKK2Rpdng1OTIgZGl2aWRlICAyLjQwMEUrNiAgIDIgIC0+ICAxLjIwMEUrNgorZGl2eDU5MyBkaXZpZGUgIDIuNDAwMEUrNiAgMiAgLT4gIDEuMjAwMEUrNgorZGl2eDU5NCBkaXZpZGUgIDI0RSs1ICAgICAgMiAgLT4gIDEuMkUrNgorZGl2eDU5NSBkaXZpZGUgIDI0MEUrNCAgICAgMiAgLT4gIDEuMjBFKzYKK2Rpdng1OTYgZGl2aWRlICAyNDAwRSszICAgIDIgIC0+ICAxLjIwMEUrNgorZGl2eDU5NyBkaXZpZGUgIDI0MDAwRSsyICAgMiAgLT4gIDEuMjAwMEUrNgorcHJlY2lzaW9uOiAgIDkKK2Rpdng2MDAgZGl2aWRlICAyLjRFKzkgICAgIDIgIC0+ICAxLjJFKzkKK2Rpdng2MDEgZGl2aWRlICAyLjQwRSs5ICAgIDIgIC0+ICAxLjIwRSs5CitkaXZ4NjAyIGRpdmlkZSAgMi40MDBFKzkgICAyICAtPiAgMS4yMDBFKzkKK2Rpdng2MDMgZGl2aWRlICAyLjQwMDBFKzkgIDIgIC0+ICAxLjIwMDBFKzkKK2Rpdng2MDQgZGl2aWRlICAyNEUrOCAgICAgIDIgIC0+ICAxLjJFKzkKK2Rpdng2MDUgZGl2aWRlICAyNDBFKzcgICAgIDIgIC0+ICAxLjIwRSs5CitkaXZ4NjA2IGRpdmlkZSAgMjQwMEUrNiAgICAyICAtPiAgMS4yMDBFKzkKK2Rpdng2MDcgZGl2aWRlICAyNDAwMEUrNSAgIDIgIC0+ICAxLjIwMDBFKzkKKworLS0gbG9uZyBvcGVyYW5kIHRyaWFuZ2xlCitwcmVjaXNpb246IDMzCitkaXZ4NjEwIGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNDEwMTE0MDg4ODM3OTY4MTc3OTcuODEzMTA5NzcwMzc5MiBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzIKK2Rpdng2MTEgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00MTAxMTQwODg4Mzc5NjgxNzc5Ny44MTMxMDk3NzAzNzkgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMQorZGl2eDYxMiBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQxMDExNDA4ODgzNzk2ODE3Nzk3LjgxMzEwOTc3MDM4ICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMwCitkaXZ4NjEzIGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNDEwMTE0MDg4ODM3OTY4MTc3OTcuODEzMTA5NzcwNCAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjkKK2Rpdng2MTQgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00MTAxMTQwODg4Mzc5NjgxNzc5Ny44MTMxMDk3NzAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyOAorZGl2eDYxNSBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQxMDExNDA4ODgzNzk2ODE3Nzk3LjgxMzEwOTc3ICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI3CitkaXZ4NjE2IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNDEwMTE0MDg4ODM3OTY4MTc3OTcuODEzMTA5OCAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjYKK2Rpdng2MTcgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00MTAxMTQwODg4Mzc5NjgxNzc5Ny44MTMxMTAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNQorZGl2eDYxOCBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQxMDExNDA4ODgzNzk2ODE3Nzk3LjgxMzExICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI0CitkaXZ4NjE5IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNDEwMTE0MDg4ODM3OTY4MTc3OTcuODEzMSAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjMKK2Rpdng2MjAgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00MTAxMTQwODg4Mzc5NjgxNzc5Ny44MTMgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMgorZGl2eDYyMSBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQxMDExNDA4ODgzNzk2ODE3Nzk3LjgxICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIxCitkaXZ4NjIyIGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNDEwMTE0MDg4ODM3OTY4MTc3OTcuOCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjAKK2Rpdng2MjMgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00MTAxMTQwODg4Mzc5NjgxNzc5OCAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxOQorZGl2eDYyNCBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQuMTAxMTQwODg4Mzc5NjgxNzgwRSsxOSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxOAorZGl2eDYyNSBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQuMTAxMTQwODg4Mzc5NjgxNzhFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE3CitkaXZ4NjI2IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDExNDA4ODgzNzk2ODE4RSsxOSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNgorZGl2eDYyNyBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQuMTAxMTQwODg4Mzc5NjgyRSsxOSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNQorZGl2eDYyOCBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQuMTAxMTQwODg4Mzc5NjhFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE0CitkaXZ4NjI5IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDExNDA4ODgzNzk3RSsxOSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMworZGl2eDYzMCBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQuMTAxMTQwODg4MzgwRSsxOSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMgorZGl2eDYzMSBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQuMTAxMTQwODg4MzhFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDExCitkaXZ4NjMyIGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDExNDA4ODg0RSsxOSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMAorZGl2eDYzMyBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQuMTAxMTQwODg4RSsxOSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgOQorZGl2eDYzNCBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQuMTAxMTQwODlFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA4CitkaXZ4NjM1IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDExNDA5RSsxOSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNworZGl2eDYzNiBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQuMTAxMTQxRSsxOSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNgorZGl2eDYzNyBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQuMTAxMTRFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA1CitkaXZ4NjM4IGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xMDExRSsxOSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNAorZGl2eDYzOSBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQuMTAxRSsxOSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMworZGl2eDY0MCBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTQuMTBFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyCitkaXZ4NjQxIGRpdmlkZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNC4xRSsxOSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMQorZGl2eDY0MiBkaXZpZGUgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTRFKzE5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCisKK2Rpdng3MzEgZGl2aWRlIDUuMDAgMUUtMyAgICAtPiA1LjAwRSszCitkaXZ4NzMyIGRpdmlkZSAwMC4wMCAwLjAwMCAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGl2eDczMyBkaXZpZGUgMDAuMDAgMEUtMyAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rpdng3MzQgZGl2aWRlICAwICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkaXZ4NzM1IGRpdmlkZSAtMCAgICAgMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGl2eDczNiBkaXZpZGUgLTAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKKworZGl2eDc0MSBkaXZpZGUgIDAgICAgLTEgICAgIC0+IC0wCitkaXZ4NzQyIGRpdmlkZSAtMCAgICAtMSAgICAgLT4gIDAKK2Rpdng3NDMgZGl2aWRlICAwICAgICAxICAgICAtPiAgMAorZGl2eDc0NCBkaXZpZGUgLTAgICAgIDEgICAgIC0+IC0wCitkaXZ4NzQ1IGRpdmlkZSAtMSAgICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng3NDYgZGl2aWRlIC0xICAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDc0NyBkaXZpZGUgIDEgICAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4NzQ4IGRpdmlkZSAgMSAgICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZGl2eDc1MSBkaXZpZGUgIDAuMCAgLTEgICAgIC0+IC0wLjAKK2Rpdng3NTIgZGl2aWRlIC0wLjAgIC0xICAgICAtPiAgMC4wCitkaXZ4NzUzIGRpdmlkZSAgMC4wICAgMSAgICAgLT4gIDAuMAorZGl2eDc1NCBkaXZpZGUgLTAuMCAgIDEgICAgIC0+IC0wLjAKK2Rpdng3NTUgZGl2aWRlIC0xLjAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDc1NiBkaXZpZGUgLTEuMCAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4NzU3IGRpdmlkZSAgMS4wICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng3NTggZGl2aWRlICAxLjAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkaXZ4NzYxIGRpdmlkZSAgMCAgICAtMS4wICAgLT4gLTBFKzEKK2Rpdng3NjIgZGl2aWRlIC0wICAgIC0xLjAgICAtPiAgMEUrMQorZGl2eDc2MyBkaXZpZGUgIDAgICAgIDEuMCAgIC0+ICAwRSsxCitkaXZ4NzY0IGRpdmlkZSAtMCAgICAgMS4wICAgLT4gLTBFKzEKK2Rpdng3NjUgZGl2aWRlIC0xICAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDc2NiBkaXZpZGUgLTEgICAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4NzY3IGRpdmlkZSAgMSAgICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng3NjggZGl2aWRlICAxICAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkaXZ4NzcxIGRpdmlkZSAgMC4wICAtMS4wICAgLT4gLTAKK2Rpdng3NzIgZGl2aWRlIC0wLjAgIC0xLjAgICAtPiAgMAorZGl2eDc3MyBkaXZpZGUgIDAuMCAgIDEuMCAgIC0+ICAwCitkaXZ4Nzc0IGRpdmlkZSAtMC4wICAgMS4wICAgLT4gLTAKK2Rpdng3NzUgZGl2aWRlIC0xLjAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDc3NiBkaXZpZGUgLTEuMCAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4Nzc3IGRpdmlkZSAgMS4wICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng3NzggZGl2aWRlICAxLjAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCistLSBTcGVjaWFscworZGl2eDc4MCBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rpdng3ODEgZGl2aWRlICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2Rpdng3ODIgZGl2aWRlICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2Rpdng3ODMgZGl2aWRlICBJbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2Rpdng3ODQgZGl2aWRlICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2Rpdng3ODUgZGl2aWRlICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2Rpdng3ODYgZGl2aWRlICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2Rpdng3ODcgZGl2aWRlICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4Nzg4IGRpdmlkZSAtMTAwMCAgSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCitkaXZ4Nzg5IGRpdmlkZSAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDc5MCBkaXZpZGUgLTEgICAgIEluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAorZGl2eDc5MSBkaXZpZGUgLTAgICAgIEluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAorZGl2eDc5MiBkaXZpZGUgIDAgICAgIEluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZAorZGl2eDc5MyBkaXZpZGUgIDEgICAgIEluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZAorZGl2eDc5NCBkaXZpZGUgIDEwMDAgIEluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZAorZGl2eDc5NSBkaXZpZGUgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGl2eDgwMCBkaXZpZGUgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rpdng4MDEgZGl2aWRlIC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2Rpdng4MDIgZGl2aWRlIC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2Rpdng4MDMgZGl2aWRlIC1JbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2Rpdng4MDQgZGl2aWRlIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2Rpdng4MDUgZGl2aWRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2Rpdng4MDYgZGl2aWRlIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2Rpdng4MDcgZGl2aWRlIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODA4IGRpdmlkZSAtMTAwMCAgSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCitkaXZ4ODA5IGRpdmlkZSAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDgxMCBkaXZpZGUgLTEgICAgLUluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZAorZGl2eDgxMSBkaXZpZGUgLTAgICAgLUluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZAorZGl2eDgxMiBkaXZpZGUgIDAgICAgLUluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAorZGl2eDgxMyBkaXZpZGUgIDEgICAgLUluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAorZGl2eDgxNCBkaXZpZGUgIDEwMDAgLUluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAorZGl2eDgxNSBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZGl2eDgyMSBkaXZpZGUgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2Rpdng4MjIgZGl2aWRlICBOYU4gLTEwMDAgICAtPiAgTmFOCitkaXZ4ODIzIGRpdmlkZSAgTmFOIC0xICAgICAgLT4gIE5hTgorZGl2eDgyNCBkaXZpZGUgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2Rpdng4MjUgZGl2aWRlICBOYU4gIDAgICAgICAtPiAgTmFOCitkaXZ4ODI2IGRpdmlkZSAgTmFOICAxICAgICAgLT4gIE5hTgorZGl2eDgyNyBkaXZpZGUgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2Rpdng4MjggZGl2aWRlICBOYU4gIEluZiAgICAtPiAgTmFOCitkaXZ4ODI5IGRpdmlkZSAgTmFOICBOYU4gICAgLT4gIE5hTgorZGl2eDgzMCBkaXZpZGUgLUluZiAgTmFOICAgIC0+ICBOYU4KK2Rpdng4MzEgZGl2aWRlIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkaXZ4ODMyIGRpdmlkZSAtMSAgICBOYU4gICAgLT4gIE5hTgorZGl2eDgzMyBkaXZpZGUgLTAgICAgTmFOICAgIC0+ICBOYU4KK2Rpdng4MzQgZGl2aWRlICAwICAgIE5hTiAgICAtPiAgTmFOCitkaXZ4ODM1IGRpdmlkZSAgMSAgICBOYU4gICAgLT4gIE5hTgorZGl2eDgzNiBkaXZpZGUgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2Rpdng4MzcgZGl2aWRlICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2Rpdng4NDEgZGl2aWRlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg0MiBkaXZpZGUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODQzIGRpdmlkZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rpdng4NDQgZGl2aWRlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg0NSBkaXZpZGUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODQ2IGRpdmlkZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rpdng4NDcgZGl2aWRlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg0OCBkaXZpZGUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODQ5IGRpdmlkZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rpdng4NTAgZGl2aWRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg1MSBkaXZpZGUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODUyIGRpdmlkZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rpdng4NTMgZGl2aWRlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg1NCBkaXZpZGUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODU1IGRpdmlkZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rpdng4NTYgZGl2aWRlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg1NyBkaXZpZGUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkaXZ4ODU4IGRpdmlkZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rpdng4NTkgZGl2aWRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkaXZ4ODYxIGRpdmlkZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2Rpdng4NjIgZGl2aWRlICBOYU44ICAxMDAwICAtPiAgTmFOOAorZGl2eDg2MyBkaXZpZGUgIE5hTjcgIEluZiAgIC0+ICBOYU43CitkaXZ4ODY0IGRpdmlkZSAgTmFONiAgTmFONSAgLT4gIE5hTjYKK2Rpdng4NjUgZGl2aWRlIC1JbmYgICBOYU40ICAtPiAgTmFONAorZGl2eDg2NiBkaXZpZGUgLTEwMDAgIE5hTjMgIC0+ICBOYU4zCitkaXZ4ODY3IGRpdmlkZSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKKworZGl2eDg3MSBkaXZpZGUgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg3MiBkaXZpZGUgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg3MyBkaXZpZGUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg3NCBkaXZpZGUgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg3NSBkaXZpZGUgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg3NiBkaXZpZGUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg3NyBkaXZpZGUgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg3OCBkaXZpZGUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg3OSBkaXZpZGUgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkaXZ4ODgxIGRpdmlkZSAgLU5hTjkgIC1JbmYgICAtPiAgLU5hTjkKK2Rpdng4ODIgZGl2aWRlICAtTmFOOCAgIDEwMDAgIC0+ICAtTmFOOAorZGl2eDg4MyBkaXZpZGUgIC1OYU43ICAgSW5mICAgLT4gIC1OYU43CitkaXZ4ODg0IGRpdmlkZSAgLU5hTjYgIC1OYU41ICAtPiAgLU5hTjYKK2Rpdng4ODUgZGl2aWRlICAtSW5mICAgLU5hTjQgIC0+ICAtTmFONAorZGl2eDg4NiBkaXZpZGUgIC0xMDAwICAtTmFOMyAgLT4gIC1OYU4zCitkaXZ4ODg3IGRpdmlkZSAgIEluZiAgIC1OYU4yICAtPiAgLU5hTjIKKworZGl2eDg5MSBkaXZpZGUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg5MiBkaXZpZGUgLXNOYU45OCAtMSAgICAgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg5MyBkaXZpZGUgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg5NCBkaXZpZGUgLXNOYU45NiAtc05hTjk0IC0+IC1OYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg5NSBkaXZpZGUgLU5hTjk1ICAtc05hTjkzIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg5NiBkaXZpZGUgLUluZiAgICAtc05hTjkyIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg5NyBkaXZpZGUgIDAgICAgICAtc05hTjkxIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg5OCBkaXZpZGUgIEluZiAgICAtc05hTjkwIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDg5OSBkaXZpZGUgLU5hTiAgICAtc05hTjg5IC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorCistLSBWYXJpb3VzIGZsYXZvdXJzIG9mIGRpdmlkZSBieSAwCitkaXZ4OTAxIGRpdmlkZSAgICAwICAgICAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZGl2eDkwMiBkaXZpZGUgICAgMC4wRTUgICAwICAgLT4gIE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rpdng5MDMgZGl2aWRlICAgIDAuMDAwICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkaXZ4OTA0IGRpdmlkZSAgICAwLjAwMDEgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDkwNSBkaXZpZGUgICAgMC4wMSAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5MDYgZGl2aWRlICAgIDAuMSAgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTA3IGRpdmlkZSAgICAxICAgICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDkwOCBkaXZpZGUgICAgMSAgICAgICAwLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5MDkgZGl2aWRlICAgMTAgICAgICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTEwIGRpdmlkZSAgIDFFKzEwMCAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDkxMSBkaXZpZGUgICAxRSsxMDAwICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZGl2eDkyMSBkaXZpZGUgICAtMC4wMDAxICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5MjIgZGl2aWRlICAgLTAuMDEgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTIzIGRpdmlkZSAgIC0wLjEgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDkyNCBkaXZpZGUgICAtMSAgICAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5MjUgZGl2aWRlICAgLTEgICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTI2IGRpdmlkZSAgLTEwICAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDkyNyBkaXZpZGUgIC0xRSsxMDAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5MjggZGl2aWRlICAtMUUrMTAwMCAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2Rpdng5MzEgZGl2aWRlICAgIDAuMDAwMSAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTMyIGRpdmlkZSAgICAwLjAxICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDkzMyBkaXZpZGUgICAgMC4xICAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5MzQgZGl2aWRlICAgIDEgICAgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTM1IGRpdmlkZSAgICAxICAgICAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDkzNiBkaXZpZGUgICAxMCAgICAgIC0wLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5MzcgZGl2aWRlICAgMUUrMTAwICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTM4IGRpdmlkZSAgIDFFKzEwMDAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkaXZ4OTQxIGRpdmlkZSAgIC0wLjAwMDEgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDk0MiBkaXZpZGUgICAtMC4wMSAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5NDMgZGl2aWRlICAgLTAuMSAgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTQ0IGRpdmlkZSAgIC0xICAgICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDk0NSBkaXZpZGUgICAtMSAgICAgIC0wLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2Rpdng5NDYgZGl2aWRlICAtMTAgICAgICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkaXZ4OTQ3IGRpdmlkZSAgLTFFKzEwMCAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZGl2eDk0OCBkaXZpZGUgIC0xRSsxMDAwIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cworcHJlY2lzaW9uOiA5CittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorZGl2eDk1MSBkaXZpZGUgOUUrOTk5OTk5OTk5ICswLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+IEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZGl2eDk1MiBkaXZpZGUgKzAuMTAwIDlFKzk5OTk5OTk5OSAtPiAxLjExMTExMUUtMTAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorZGl2eDk1MyBkaXZpZGUgOUUtOTk5OTk5OTk5ICs5LjEwMCAtPiA5Ljg5MDEwOTlFLTEwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK2Rpdng5NTQgZGl2aWRlIC0xLjIzNDU2Nzg5ICAgICAgICAgIDlFKzk5OTk5OTk5OSAtPiAtMS4zNzE3NDIxRS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorZGl2eDk1NSBkaXZpZGUgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+IC0xLjM3MTc0MjFFLTEwMDAwMDAwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBSb3VuZGVkIEluZXhhY3QKK2Rpdng5NTYgZGl2aWRlIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDdFKzk5OTk5OTk5OSAtPiAtMS43NjM2Njg0RS0xMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitkaXZ4OTU3IGRpdmlkZSA5RSs5OTk5OTk5OTkgLTAuODM0NTY3ODkwMTIzNDVFLTAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZGl2eDk1OCBkaXZpZGUgLTAuMTAwIDlFKzk5OTk5OTk5OSAtPiAtMS4xMTExMTFFLTEwMDAwMDAwMDEgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2Rpdng5NTkgZGl2aWRlIDlFLTk5OTk5OTk5OSAtOS4xMDAgLT4gLTkuODkwMTA5OUUtMTAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IChhZGRpdGlvbmFsIGVkZ2UgdGVzdHMgaW4gbXVsdGlwbHkuZGVjVGVzdCkKKy0tICdzdWJub3JtYWwnIHJlc3VsdHMgbm93IHBvc3NpYmxlIChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4KKy0tIGJhc2UgYXJpdGhlbXRpYykKK2Rpdng5NjAgZGl2aWRlIDFlLTYwMDAwMDAwMCAxZSs0MDAwMDAwMDEgLT4gMUUtMTAwMDAwMDAwMSBTdWJub3JtYWwKK2Rpdng5NjEgZGl2aWRlIDFlLTYwMDAwMDAwMCAxZSs0MDAwMDAwMDIgLT4gMUUtMTAwMDAwMDAwMiBTdWJub3JtYWwKK2Rpdng5NjIgZGl2aWRlIDFlLTYwMDAwMDAwMCAxZSs0MDAwMDAwMDMgLT4gMUUtMTAwMDAwMDAwMyBTdWJub3JtYWwKK2Rpdng5NjMgZGl2aWRlIDFlLTYwMDAwMDAwMCAxZSs0MDAwMDAwMDQgLT4gMUUtMTAwMDAwMDAwNCBTdWJub3JtYWwKK2Rpdng5NjQgZGl2aWRlIDFlLTYwMDAwMDAwMCAxZSs0MDAwMDAwMDUgLT4gMUUtMTAwMDAwMDAwNSBTdWJub3JtYWwKK2Rpdng5NjUgZGl2aWRlIDFlLTYwMDAwMDAwMCAxZSs0MDAwMDAwMDYgLT4gMUUtMTAwMDAwMDAwNiBTdWJub3JtYWwKK2Rpdng5NjYgZGl2aWRlIDFlLTYwMDAwMDAwMCAxZSs0MDAwMDAwMDcgLT4gMUUtMTAwMDAwMDAwNyBTdWJub3JtYWwKK2Rpdng5NjcgZGl2aWRlIDFlLTYwMDAwMDAwMCAxZSs0MDAwMDAwMDggLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkaXZ4OTY4IGRpdmlkZSAxZS02MDAwMDAwMDAgMWUrNDAwMDAwMDA5IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGl2eDk2OSBkaXZpZGUgMWUtNjAwMDAwMDAwIDFlKzQwMDAwMDAxMCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKy0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10KK2Rpdng5NzAgZGl2aWRlIDFlKzYwMDAwMDAwMCAxZS00MDAwMDAwMDEgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkaXZ4OTcxIGRpdmlkZSAxZSs2MDAwMDAwMDAgMWUtNDAwMDAwMDAyIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGl2eDk3MiBkaXZpZGUgMWUrNjAwMDAwMDAwIDFlLTQwMDAwMDAwMyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rpdng5NzMgZGl2aWRlIDFlKzYwMDAwMDAwMCAxZS00MDAwMDAwMDQgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkaXZ4OTc0IGRpdmlkZSAxZSs2MDAwMDAwMDAgMWUtNDAwMDAwMDA1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGl2eDk3NSBkaXZpZGUgMWUrNjAwMDAwMDAwIDFlLTQwMDAwMDAwNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rpdng5NzYgZGl2aWRlIDFlKzYwMDAwMDAwMCAxZS00MDAwMDAwMDcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkaXZ4OTc3IGRpdmlkZSAxZSs2MDAwMDAwMDAgMWUtNDAwMDAwMDA4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGl2eDk3OCBkaXZpZGUgMWUrNjAwMDAwMDAwIDFlLTQwMDAwMDAwOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rpdng5NzkgZGl2aWRlIDFlKzYwMDAwMDAwMCAxZS00MDAwMDAwMTAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tIFNpZ24gYWZ0ZXIgb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdworZGl2eDk4MCBkaXZpZGUgIDFlLTYwMDAwMDAwMCAgMWUrNDAwMDAwMDA5IC0+ICAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Rpdng5ODEgZGl2aWRlICAxZS02MDAwMDAwMDAgLTFlKzQwMDAwMDAwOSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkaXZ4OTgyIGRpdmlkZSAtMWUtNjAwMDAwMDAwICAxZSs0MDAwMDAwMDkgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZGl2eDk4MyBkaXZpZGUgLTFlLTYwMDAwMDAwMCAtMWUrNDAwMDAwMDA5IC0+ICAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2Rpdng5ODQgZGl2aWRlICAxZSs2MDAwMDAwMDAgIDFlLTQwMDAwMDAwOSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkaXZ4OTg1IGRpdmlkZSAgMWUrNjAwMDAwMDAwIC0xZS00MDAwMDAwMDkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZGl2eDk4NiBkaXZpZGUgLTFlKzYwMDAwMDAwMCAgMWUtNDAwMDAwMDA5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rpdng5ODcgZGl2aWRlIC0xZSs2MDAwMDAwMDAgLTFlLTQwMDAwMDAwOSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tIExvbmcgb3BlcmFuZCBvdmVyZmxvdyBtYXkgYmUgYSBkaWZmZXJlbnQgcGF0aAorcHJlY2lzaW9uOiAzCitkaXZ4OTkwIGRpdmlkZSAxMDAwICA5Ljk5OUUtOTk5OTk5OTk5ICAgICAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZGl2eDk5MSBkaXZpZGUgMTAwMCAtOS45OTlFLTk5OTk5OTk5OSAgICAgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2Rpdng5OTIgZGl2aWRlICAgICAgIDkuOTk5RSs5OTk5OTk5OTkgMC4wMSAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkaXZ4OTkzIGRpdmlkZSAgICAgIC05Ljk5OUUrOTk5OTk5OTk5IDAuMDEgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworcHJlY2lzaW9uOiAgIDUKK21heGV4cG9uZW50OiA3OQorbWluZXhwb25lbnQ6IC03OQorZGl2eDEwMDEgZGl2aWRlICAgIDEuNTI0NDRFLTgwIDEgICAgICAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RpdngxMDAyIGRpdmlkZSAgICAxLjUyNDQ1RS04MCAxICAgICAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkaXZ4MTAwMyBkaXZpZGUgICAgMS41MjQ0NkUtODAgMSAgICAgIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBhIHJvdW5kaW5nIHByb2JsZW0gaW4gb25lIGltcGxlbWVudGF0aW9uCitwcmVjaXNpb246ICAgMzQKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCistLSBVbmJvdW5kZWQgYW5zd2VyIHRvIDQwIGRpZ2l0czoKKy0tICAgMS40NjU4MTE5NjU4MTE5NjU4MTE5NjU4MTE5NjU4MTE5NjU4MTE5NjZFKzcwMDAKK2RpdngxMDEwIGRpdmlkZSAzNDNFNjAwMCAgMjM0RS0xMDAwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246ICAgMzQKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorcHJlY2lzaW9uOiA3CitkaXZ4MTAyMSAgZGl2aWRlIDFFMCAgICAgICAgICAxRTAgLT4gMQorZGl2eDEwMjIgIGRpdmlkZSAxRTAgICAgICAgICAgMkUwIC0+IDAuNQorZGl2eDEwMjMgIGRpdmlkZSAxRTAgICAgICAgICAgM0UwIC0+IDAuMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RpdngxMDI0ICBkaXZpZGUgMTAwRS0yICAgMTAwMEUtMyAtPiAxCitkaXZ4MTAyNSAgZGl2aWRlIDI0RS0xICAgICAgICAyRTAgLT4gMS4yCitkaXZ4MTAyNiAgZGl2aWRlIDI0MDBFLTMgICAgICAyRTAgLT4gMS4yMDAKK2RpdngxMDI3ICBkaXZpZGUgNUUwICAgICAgICAgIDJFMCAtPiAyLjUKK2RpdngxMDI4ICBkaXZpZGUgNUUwICAgICAgICAyMEUtMSAtPiAyLjUKK2RpdngxMDI5ICBkaXZpZGUgNUUwICAgICAgMjAwMEUtMyAtPiAyLjUKK2RpdngxMDMwICBkaXZpZGUgNUUwICAgICAgICAgMkUtMSAtPiAyNQorZGl2eDEwMzEgIGRpdmlkZSA1RTAgICAgICAgIDIwRS0yIC0+IDI1CitkaXZ4MTAzMiAgZGl2aWRlIDQ4MEUtMiAgICAgICAzRTAgLT4gMS42MAorZGl2eDEwMzMgIGRpdmlkZSA0N0UtMSAgICAgICAgMkUwIC0+IDIuMzUKKworLS0gRUNNQVNjcmlwdCBiYWQgZXhhbXBsZXMKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KK3ByZWNpc2lvbjogNworZGl2eDEwNTAgIGRpdmlkZSA1IDkgIC0+IDAuNTU1NTU1NiBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK2RpdngxMDUxICBkaXZpZGUgNSAxMSAtPiAwLjQ1NDU0NTUgSW5leGFjdCBSb3VuZGVkCisKKy0tIHBheWxvYWQgZGVjYXBpdGF0ZQorcHJlY2lzaW9uOiA1CitkaXZ4MTA1NSAgZGl2aWRlICAgc05hTjk4NzY1NDMyMSAxIC0+ICBOYU41NDMyMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0cworZGl2eDk5OTggZGl2aWRlIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZGl2eDk5OTkgZGl2aWRlICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RpdmlkZWludC5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kaXZpZGVpbnQuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmExYWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kaXZpZGVpbnQuZGVjVGVzdApAQCAtMCwwICsxLDQ4NiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkaXZpZGVpbnQuZGVjVGVzdCAtLSBkZWNpbWFsIGludGVnZXIgZGl2aXNpb24gICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKK2R2aXgwMDEgZGl2aWRlaW50ICAxICAgICAxICAgIC0+ICAxCitkdml4MDAyIGRpdmlkZWludCAgMiAgICAgMSAgICAtPiAgMgorZHZpeDAwMyBkaXZpZGVpbnQgIDEgICAgIDIgICAgLT4gIDAKK2R2aXgwMDQgZGl2aWRlaW50ICAyICAgICAyICAgIC0+ICAxCitkdml4MDA1IGRpdmlkZWludCAgMCAgICAgMSAgICAtPiAgMAorZHZpeDAwNiBkaXZpZGVpbnQgIDAgICAgIDIgICAgLT4gIDAKK2R2aXgwMDcgZGl2aWRlaW50ICAxICAgICAzICAgIC0+ICAwCitkdml4MDA4IGRpdmlkZWludCAgMiAgICAgMyAgICAtPiAgMAorZHZpeDAwOSBkaXZpZGVpbnQgIDMgICAgIDMgICAgLT4gIDEKKworZHZpeDAxMCBkaXZpZGVpbnQgIDIuNCAgIDEgICAgLT4gIDIKK2R2aXgwMTEgZGl2aWRlaW50ICAyLjQgICAtMSAgIC0+ICAtMgorZHZpeDAxMiBkaXZpZGVpbnQgIC0yLjQgIDEgICAgLT4gIC0yCitkdml4MDEzIGRpdmlkZWludCAgLTIuNCAgLTEgICAtPiAgMgorZHZpeDAxNCBkaXZpZGVpbnQgIDIuNDAgIDEgICAgLT4gIDIKK2R2aXgwMTUgZGl2aWRlaW50ICAyLjQwMCAxICAgIC0+ICAyCitkdml4MDE2IGRpdmlkZWludCAgMi40ICAgMiAgICAtPiAgMQorZHZpeDAxNyBkaXZpZGVpbnQgIDIuNDAwIDIgICAgLT4gIDEKK2R2aXgwMTggZGl2aWRlaW50ICAyLiAgICAyICAgIC0+ICAxCitkdml4MDE5IGRpdmlkZWludCAgMjAgICAgMjAgICAtPiAgMQorCitkdml4MDIwIGRpdmlkZWludCAgMTg3ICAgMTg3ICAtPiAgMQorZHZpeDAyMSBkaXZpZGVpbnQgIDUgICAgIDIgICAgLT4gIDIKK2R2aXgwMjIgZGl2aWRlaW50ICA1ICAgICAyLjAgICAgLT4gIDIKK2R2aXgwMjMgZGl2aWRlaW50ICA1ICAgICAyLjAwMCAgLT4gIDIKK2R2aXgwMjQgZGl2aWRlaW50ICA1ICAgICAwLjIwMCAgLT4gIDI1Citkdml4MDI1IGRpdmlkZWludCAgNSAgICAgMC4yMDAgIC0+ICAyNQorCitkdml4MDMwIGRpdmlkZWludCAgMSAgICAgMiAgICAgIC0+ICAwCitkdml4MDMxIGRpdmlkZWludCAgMSAgICAgNCAgICAgIC0+ICAwCitkdml4MDMyIGRpdmlkZWludCAgMSAgICAgOCAgICAgIC0+ICAwCitkdml4MDMzIGRpdmlkZWludCAgMSAgICAgMTYgICAgIC0+ICAwCitkdml4MDM0IGRpdmlkZWludCAgMSAgICAgMzIgICAgIC0+ICAwCitkdml4MDM1IGRpdmlkZWludCAgMSAgICAgNjQgICAgIC0+ICAwCitkdml4MDQwIGRpdmlkZWludCAgMSAgICAtMiAgICAgIC0+IC0wCitkdml4MDQxIGRpdmlkZWludCAgMSAgICAtNCAgICAgIC0+IC0wCitkdml4MDQyIGRpdmlkZWludCAgMSAgICAtOCAgICAgIC0+IC0wCitkdml4MDQzIGRpdmlkZWludCAgMSAgICAtMTYgICAgIC0+IC0wCitkdml4MDQ0IGRpdmlkZWludCAgMSAgICAtMzIgICAgIC0+IC0wCitkdml4MDQ1IGRpdmlkZWludCAgMSAgICAtNjQgICAgIC0+IC0wCitkdml4MDUwIGRpdmlkZWludCAtMSAgICAgMiAgICAgIC0+IC0wCitkdml4MDUxIGRpdmlkZWludCAtMSAgICAgNCAgICAgIC0+IC0wCitkdml4MDUyIGRpdmlkZWludCAtMSAgICAgOCAgICAgIC0+IC0wCitkdml4MDUzIGRpdmlkZWludCAtMSAgICAgMTYgICAgIC0+IC0wCitkdml4MDU0IGRpdmlkZWludCAtMSAgICAgMzIgICAgIC0+IC0wCitkdml4MDU1IGRpdmlkZWludCAtMSAgICAgNjQgICAgIC0+IC0wCitkdml4MDYwIGRpdmlkZWludCAtMSAgICAtMiAgICAgIC0+ICAwCitkdml4MDYxIGRpdmlkZWludCAtMSAgICAtNCAgICAgIC0+ICAwCitkdml4MDYyIGRpdmlkZWludCAtMSAgICAtOCAgICAgIC0+ICAwCitkdml4MDYzIGRpdmlkZWludCAtMSAgICAtMTYgICAgIC0+ICAwCitkdml4MDY0IGRpdmlkZWludCAtMSAgICAtMzIgICAgIC0+ICAwCitkdml4MDY1IGRpdmlkZWludCAtMSAgICAtNjQgICAgIC0+ICAwCisKKy0tIHNpbWlsYXIgd2l0aCBwb3dlcnMgb2YgdGVuCitkdml4MTYwIGRpdmlkZWludCAgMSAgICAgMSAgICAgICAgIC0+ICAxCitkdml4MTYxIGRpdmlkZWludCAgMSAgICAgMTAgICAgICAgIC0+ICAwCitkdml4MTYyIGRpdmlkZWludCAgMSAgICAgMTAwICAgICAgIC0+ICAwCitkdml4MTYzIGRpdmlkZWludCAgMSAgICAgMTAwMCAgICAgIC0+ICAwCitkdml4MTY0IGRpdmlkZWludCAgMSAgICAgMTAwMDAgICAgIC0+ICAwCitkdml4MTY1IGRpdmlkZWludCAgMSAgICAgMTAwMDAwICAgIC0+ICAwCitkdml4MTY2IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMCAgIC0+ICAwCitkdml4MTY3IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMDAgIC0+ICAwCitkdml4MTY4IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMDAwIC0+ICAwCitkdml4MTcwIGRpdmlkZWludCAgMSAgICAtMSAgICAgICAgIC0+IC0xCitkdml4MTcxIGRpdmlkZWludCAgMSAgICAtMTAgICAgICAgIC0+IC0wCitkdml4MTcyIGRpdmlkZWludCAgMSAgICAtMTAwICAgICAgIC0+IC0wCitkdml4MTczIGRpdmlkZWludCAgMSAgICAtMTAwMCAgICAgIC0+IC0wCitkdml4MTc0IGRpdmlkZWludCAgMSAgICAtMTAwMDAgICAgIC0+IC0wCitkdml4MTc1IGRpdmlkZWludCAgMSAgICAtMTAwMDAwICAgIC0+IC0wCitkdml4MTc2IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMCAgIC0+IC0wCitkdml4MTc3IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMDAgIC0+IC0wCitkdml4MTc4IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMDAwIC0+IC0wCitkdml4MTgwIGRpdmlkZWludCAtMSAgICAgMSAgICAgICAgIC0+IC0xCitkdml4MTgxIGRpdmlkZWludCAtMSAgICAgMTAgICAgICAgIC0+IC0wCitkdml4MTgyIGRpdmlkZWludCAtMSAgICAgMTAwICAgICAgIC0+IC0wCitkdml4MTgzIGRpdmlkZWludCAtMSAgICAgMTAwMCAgICAgIC0+IC0wCitkdml4MTg0IGRpdmlkZWludCAtMSAgICAgMTAwMDAgICAgIC0+IC0wCitkdml4MTg1IGRpdmlkZWludCAtMSAgICAgMTAwMDAwICAgIC0+IC0wCitkdml4MTg2IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMCAgIC0+IC0wCitkdml4MTg3IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMDAgIC0+IC0wCitkdml4MTg4IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMDAwIC0+IC0wCitkdml4MTkwIGRpdmlkZWludCAtMSAgICAtMSAgICAgICAgIC0+ICAxCitkdml4MTkxIGRpdmlkZWludCAtMSAgICAtMTAgICAgICAgIC0+ICAwCitkdml4MTkyIGRpdmlkZWludCAtMSAgICAtMTAwICAgICAgIC0+ICAwCitkdml4MTkzIGRpdmlkZWludCAtMSAgICAtMTAwMCAgICAgIC0+ICAwCitkdml4MTk0IGRpdmlkZWludCAtMSAgICAtMTAwMDAgICAgIC0+ICAwCitkdml4MTk1IGRpdmlkZWludCAtMSAgICAtMTAwMDAwICAgIC0+ICAwCitkdml4MTk2IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMCAgIC0+ICAwCitkdml4MTk3IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMDAgIC0+ICAwCitkdml4MTk4IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMDAwIC0+ICAwCisKKy0tIHNvbWUgbG9uZyBvcGVyYW5kIGNhc2VzIGhlcmUKK2R2aXgwNzAgZGl2aWRlaW50ICA5OTk5OTk5OTkgICAgIDEgIC0+ICA5OTk5OTk5OTkKK2R2aXgwNzEgZGl2aWRlaW50ICA5OTk5OTk5OTkuNCAgIDEgIC0+ICA5OTk5OTk5OTkKK2R2aXgwNzIgZGl2aWRlaW50ICA5OTk5OTk5OTkuNSAgIDEgIC0+ICA5OTk5OTk5OTkKK2R2aXgwNzMgZGl2aWRlaW50ICA5OTk5OTk5OTkuOSAgIDEgIC0+ICA5OTk5OTk5OTkKK2R2aXgwNzQgZGl2aWRlaW50ICA5OTk5OTk5OTkuOTk5IDEgIC0+ICA5OTk5OTk5OTkKK3ByZWNpc2lvbjogNgorZHZpeDA4MCBkaXZpZGVpbnQgIDk5OTk5OTk5OSAgICAgMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4MDgxIGRpdmlkZWludCAgOTk5OTk5OTkgICAgICAxICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXgwODIgZGl2aWRlaW50ICA5OTk5OTk5ICAgICAgIDEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDA4MyBkaXZpZGVpbnQgIDk5OTk5OSAgICAgICAgMSAgLT4gIDk5OTk5OQorZHZpeDA4NCBkaXZpZGVpbnQgIDk5OTk5ICAgICAgICAgMSAgLT4gIDk5OTk5Citkdml4MDg1IGRpdmlkZWludCAgOTk5OSAgICAgICAgICAxICAtPiAgOTk5OQorZHZpeDA4NiBkaXZpZGVpbnQgIDk5OSAgICAgICAgICAgMSAgLT4gIDk5OQorZHZpeDA4NyBkaXZpZGVpbnQgIDk5ICAgICAgICAgICAgMSAgLT4gIDk5Citkdml4MDg4IGRpdmlkZWludCAgOSAgICAgICAgICAgICAxICAtPiAgOQorCitwcmVjaXNpb246IDkKK2R2aXgwOTAgZGl2aWRlaW50ICAwLiAgICAgICAgICAgIDEgICAgLT4gIDAKK2R2aXgwOTEgZGl2aWRlaW50ICAuMCAgICAgICAgICAgIDEgICAgLT4gIDAKK2R2aXgwOTIgZGl2aWRlaW50ICAwLjAwICAgICAgICAgIDEgICAgLT4gIDAKK2R2aXgwOTMgZGl2aWRlaW50ICAwLjAwRSs5ICAgICAgIDEgICAgLT4gIDAKK2R2aXgwOTQgZGl2aWRlaW50ICAwLjAwMDBFLTUwICAgIDEgICAgLT4gIDAKKworZHZpeDEwMCBkaXZpZGVpbnQgIDEgIDEgICAtPiAxCitkdml4MTAxIGRpdmlkZWludCAgMSAgMiAgIC0+IDAKK2R2aXgxMDIgZGl2aWRlaW50ICAxICAzICAgLT4gMAorZHZpeDEwMyBkaXZpZGVpbnQgIDEgIDQgICAtPiAwCitkdml4MTA0IGRpdmlkZWludCAgMSAgNSAgIC0+IDAKK2R2aXgxMDUgZGl2aWRlaW50ICAxICA2ICAgLT4gMAorZHZpeDEwNiBkaXZpZGVpbnQgIDEgIDcgICAtPiAwCitkdml4MTA3IGRpdmlkZWludCAgMSAgOCAgIC0+IDAKK2R2aXgxMDggZGl2aWRlaW50ICAxICA5ICAgLT4gMAorZHZpeDEwOSBkaXZpZGVpbnQgIDEgIDEwICAtPiAwCitkdml4MTEwIGRpdmlkZWludCAgMSAgMSAgIC0+IDEKK2R2aXgxMTEgZGl2aWRlaW50ICAyICAxICAgLT4gMgorZHZpeDExMiBkaXZpZGVpbnQgIDMgIDEgICAtPiAzCitkdml4MTEzIGRpdmlkZWludCAgNCAgMSAgIC0+IDQKK2R2aXgxMTQgZGl2aWRlaW50ICA1ICAxICAgLT4gNQorZHZpeDExNSBkaXZpZGVpbnQgIDYgIDEgICAtPiA2Citkdml4MTE2IGRpdmlkZWludCAgNyAgMSAgIC0+IDcKK2R2aXgxMTcgZGl2aWRlaW50ICA4ICAxICAgLT4gOAorZHZpeDExOCBkaXZpZGVpbnQgIDkgIDEgICAtPiA5Citkdml4MTE5IGRpdmlkZWludCAgMTAgMSAgIC0+IDEwCisKKy0tIGZyb20gRGlhZ0JpZ0RlY2ltYWwKK2R2aXgxMzEgZGl2aWRlaW50ICAxMDEuMyAgIDEgICAgIC0+ICAxMDEKK2R2aXgxMzIgZGl2aWRlaW50ICAxMDEuMCAgIDEgICAgIC0+ICAxMDEKK2R2aXgxMzMgZGl2aWRlaW50ICAxMDEuMyAgIDMgICAgIC0+ICAzMworZHZpeDEzNCBkaXZpZGVpbnQgIDEwMS4wICAgMyAgICAgLT4gIDMzCitkdml4MTM1IGRpdmlkZWludCAgMi40ICAgICAxICAgICAtPiAgMgorZHZpeDEzNiBkaXZpZGVpbnQgIDIuNDAwICAgMSAgICAgLT4gIDIKK2R2aXgxMzcgZGl2aWRlaW50ICAxOCAgICAgIDE4ICAgIC0+ICAxCitkdml4MTM4IGRpdmlkZWludCAgMTEyMCAgICAxMDAwICAtPiAgMQorZHZpeDEzOSBkaXZpZGVpbnQgIDIuNCAgICAgMiAgICAgLT4gIDEKK2R2aXgxNDAgZGl2aWRlaW50ICAyLjQwMCAgIDIgICAgIC0+ICAxCitkdml4MTQxIGRpdmlkZWludCAgMC41ICAgICAyLjAwMCAtPiAgMAorZHZpeDE0MiBkaXZpZGVpbnQgIDguMDA1ICAgNyAgICAgLT4gIDEKK2R2aXgxNDMgZGl2aWRlaW50ICA1ICAgICAgIDIgICAgIC0+ICAyCitkdml4MTQ0IGRpdmlkZWludCAgMCAgICAgICAyICAgICAtPiAgMAorZHZpeDE0NSBkaXZpZGVpbnQgIDAuMDAgICAgMiAgICAgLT4gIDAKKworLS0gT3RoZXJzCitkdml4MTUwIGRpdmlkZWludCAgMTIzNDUgIDQuOTk5ICAtPiAgMjQ2OQorZHZpeDE1MSBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5ICAgLT4gIDI0NzMKK2R2aXgxNTIgZGl2aWRlaW50ICAxMjM0NSAgNC45ICAgIC0+ICAyNTE5Citkdml4MTUzIGRpdmlkZWludCAgMTIzNDUgIDUgICAgICAtPiAgMjQ2OQorZHZpeDE1NCBkaXZpZGVpbnQgIDEyMzQ1ICA1LjEgICAgLT4gIDI0MjAKK2R2aXgxNTUgZGl2aWRlaW50ICAxMjM0NSAgNS4wMSAgIC0+ICAyNDY0Citkdml4MTU2IGRpdmlkZWludCAgMTIzNDUgIDUuMDAxICAtPiAgMjQ2OAorZHZpeDE1NyBkaXZpZGVpbnQgICAgMTAxICA3LjYgICAgLT4gIDEzCisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgZGl2aWRlaW50IGJ5IDAKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5Citkdml4MjAxIGRpdmlkZWludCAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkdml4MjAyIGRpdmlkZWludCAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkdml4MjAzIGRpdmlkZWludCAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkdml4MjA0IGRpdmlkZWludCAgMC4wMDAxIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4MjA1IGRpdmlkZWludCAgMC4wMSAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4MjA2IGRpdmlkZWludCAgMC4xICAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4MjA3IGRpdmlkZWludCAgMSAgICAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4MjA4IGRpdmlkZWludCAgMSAgICAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4MjA5IGRpdmlkZWludCAxMCAgICAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4MjEwIGRpdmlkZWludCAxRSsxMDAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4MjExIGRpdmlkZWludCAxRSsxMDAwIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4MjE0IGRpdmlkZWludCAgLTAuMDAwMSAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXgyMTUgZGl2aWRlaW50ICAtMC4wMSAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHZpeDIxNiBkaXZpZGVpbnQgIC0wLjEgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4MjE3IGRpdmlkZWludCAgLTEgICAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXgyMTggZGl2aWRlaW50ICAtMSAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHZpeDIxOSBkaXZpZGVpbnQgLTEwICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4MjIwIGRpdmlkZWludCAtMUUrMTAwICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXgyMjEgZGl2aWRlaW50IC0xRSsxMDAwIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5Citkdml4MjcwIGRpdmlkZWludCAxIDFlOTk5OTk5OTk5ICAgIC0+IDAKK2R2aXgyNzEgZGl2aWRlaW50IDEgMC45ZTk5OTk5OTk5OSAgLT4gMAorZHZpeDI3MiBkaXZpZGVpbnQgMSAwLjk5ZTk5OTk5OTk5OSAtPiAwCitkdml4MjczIGRpdmlkZWludCAxIDAuOTk5OTk5OTk5ZTk5OTk5OTk5OSAtPiAwCitkdml4Mjc0IGRpdmlkZWludCA5ZTk5OTk5OTk5OSAgICAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4Mjc1IGRpdmlkZWludCA5LjllOTk5OTk5OTk5ICAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4Mjc2IGRpdmlkZWludCA5Ljk5ZTk5OTk5OTk5OSAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4Mjc3IGRpdmlkZWludCA5Ljk5OTk5OTk5ZTk5OTk5OTk5OSAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKK2R2aXgyODAgZGl2aWRlaW50IDAuMSA5ZS05OTk5OTk5OTkgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXgyODEgZGl2aWRlaW50IDAuMSA5OWUtOTk5OTk5OTk5ICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXgyODIgZGl2aWRlaW50IDAuMSA5OTllLTk5OTk5OTk5OSAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworZHZpeDI4MyBkaXZpZGVpbnQgMC4xIDllLTk5OTk5OTk5OCAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDI4NCBkaXZpZGVpbnQgMC4xIDk5ZS05OTk5OTk5OTggICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDI4NSBkaXZpZGVpbnQgMC4xIDk5OWUtOTk5OTk5OTk4ICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDI4NiBkaXZpZGVpbnQgMC4xIDk5OWUtOTk5OTk5OTk3ICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDI4NyBkaXZpZGVpbnQgMC4xIDk5OTllLTk5OTk5OTk5NyAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDI4OCBkaXZpZGVpbnQgMC4xIDk5OTk5ZS05OTk5OTk5OTcgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSBHRCBlZGdlIGNhc2VzOiBsaHMgc21hbGxlciB0aGFuIHJocyBidXQgbW9yZSBkaWdpdHMKK2R2aXgzMDEgIGRpdmlkZWludCAgMC45ICAgICAgMiAgICAgIC0+ICAwCitkdml4MzAyICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMCAgICAtPiAgMAorZHZpeDMwMyAgZGl2aWRlaW50ICAwLjkgICAgICAyLjEgICAgLT4gIDAKK2R2aXgzMDQgIGRpdmlkZWludCAgMC45ICAgICAgMi4wMCAgIC0+ICAwCitkdml4MzA1ICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMDEgICAtPiAgMAorZHZpeDMwNiAgZGl2aWRlaW50ICAwLjEyICAgICAxICAgICAgLT4gIDAKK2R2aXgzMDcgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wICAgIC0+ICAwCitkdml4MzA4ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMDAgICAtPiAgMAorZHZpeDMwOSAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAgICAgLT4gIDAKK2R2aXgzMTAgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wMCAgIC0+ICAwCitkdml4MzExICBkaXZpZGVpbnQgIDAuMTIgICAgIDIgICAgICAtPiAgMAorZHZpeDMxMiAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAgICAgLT4gIDAKK2R2aXgzMTMgIGRpdmlkZWludCAgMC4xMiAgICAgMi4xICAgIC0+ICAwCitkdml4MzE0ICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMDAgICAtPiAgMAorZHZpeDMxNSAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAxICAgLT4gIDAKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorZHZpeDMzMCBkaXZpZGVpbnQgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5ICAgIC0+IDAKK2R2aXgzMzEgZGl2aWRlaW50IDlFKzk5OTk5OTk5OSArMC4yMzQ1Njc4OTAxMjM0NUUtMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDMzMiBkaXZpZGVpbnQgKzAuMTAwIDlFKzk5OTk5OTk5OSAgICAtPiAwCitkdml4MzMzIGRpdmlkZWludCA5RS05OTk5OTk5OTkgKzkuMTAwICAgIC0+IDAKK2R2aXgzMzUgZGl2aWRlaW50IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAgICAtPiAtMAorZHZpeDMzNiBkaXZpZGVpbnQgOUUrOTk5OTk5OTk5IC0wLjgzNDU2Nzg5MDEyMzQ1RS0wIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4MzM3IGRpdmlkZWludCAtMC4xMDAgOUUrOTk5OTk5OTk5ICAgIC0+IC0wCitkdml4MzM4IGRpdmlkZWludCA5RS05OTk5OTk5OTkgLTkuMTAwICAgIC0+IC0wCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK2R2aXg0MDEgZGl2aWRlaW50IDEyMzQ1Njc4MDAwIDEwMCAtPiAxMjM0NTY3ODAKK2R2aXg0MDIgZGl2aWRlaW50IDEgMTIzNDU2NzgwMDAgICAtPiAwCitkdml4NDAzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxMCAgLT4gMTIzNDU2NzgwCitkdml4NDA0IGRpdmlkZWludCAxIDEyMzQ1Njc4MDAgICAgLT4gMAorZHZpeDQwNSBkaXZpZGVpbnQgMTIzNDU2Nzg5MCAgMTAgIC0+IDEyMzQ1Njc4OQorZHZpeDQwNiBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwICAgIC0+IDAKK2R2aXg0MDcgZGl2aWRlaW50IDEyMzQ1Njc4OTEgIDEwICAtPiAxMjM0NTY3ODkKK2R2aXg0MDggZGl2aWRlaW50IDEgMTIzNDU2Nzg5MSAgICAtPiAwCitkdml4NDA5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxMDAgLT4gMTIzNDU2Nzg5Citkdml4NDEwIGRpdmlkZWludCAxIDEyMzQ1Njc4OTAxICAgLT4gMAorZHZpeDQxMSBkaXZpZGVpbnQgMTIzNDU2Nzg5NiAgMTAgIC0+IDEyMzQ1Njc4OQorZHZpeDQxMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAgIC0+IDAKK2R2aXg0MTMgZGl2aWRlaW50IDEyMzQ1Njc4OTQ4IDEwMCAtPiAxMjM0NTY3ODkKK2R2aXg0MTQgZGl2aWRlaW50IDEyMzQ1Njc4OTQ5IDEwMCAtPiAxMjM0NTY3ODkKK2R2aXg0MTUgZGl2aWRlaW50IDEyMzQ1Njc4OTUwIDEwMCAtPiAxMjM0NTY3ODkKK2R2aXg0MTYgZGl2aWRlaW50IDEyMzQ1Njc4OTUxIDEwMCAtPiAxMjM0NTY3ODkKK2R2aXg0MTcgZGl2aWRlaW50IDEyMzQ1Njc4OTk5IDEwMCAtPiAxMjM0NTY3ODkKKworcHJlY2lzaW9uOiAxNQorZHZpeDQ0MSBkaXZpZGVpbnQgMTIzNDU2NzgwMDAgMSAtPiAxMjM0NTY3ODAwMAorZHZpeDQ0MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAtPiAwCitkdml4NDQzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxIC0+IDEyMzQ1Njc4MDAKK2R2aXg0NDQgZGl2aWRlaW50IDEgMTIzNDU2NzgwMCAgLT4gMAorZHZpeDQ0NSBkaXZpZGVpbnQgMTIzNDU2Nzg5MCAgMSAtPiAxMjM0NTY3ODkwCitkdml4NDQ2IGRpdmlkZWludCAxIDEyMzQ1Njc4OTAgIC0+IDAKK2R2aXg0NDcgZGl2aWRlaW50IDEyMzQ1Njc4OTEgIDEgLT4gMTIzNDU2Nzg5MQorZHZpeDQ0OCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAtPiAwCitkdml4NDQ5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxIC0+IDEyMzQ1Njc4OTAxCitkdml4NDUwIGRpdmlkZWludCAxIDEyMzQ1Njc4OTAxIC0+IDAKK2R2aXg0NTEgZGl2aWRlaW50IDEyMzQ1Njc4OTYgIDEgLT4gMTIzNDU2Nzg5NgorZHZpeDQ1MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAtPiAwCisKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKKworLS0gbW9yZSB6ZXJvcywgZXRjLgorZHZpeDUzMSBkaXZpZGVpbnQgNS4wMCAxRS0zICAgIC0+IDUwMDAKK2R2aXg1MzIgZGl2aWRlaW50IDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkdml4NTMzIGRpdmlkZWludCAwMC4wMCAwRS0zICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHZpeDUzNCBkaXZpZGVpbnQgIDAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2R2aXg1MzUgZGl2aWRlaW50IC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkdml4NTM2IGRpdmlkZWludCAtMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorCitkdml4NTQxIGRpdmlkZWludCAgMCAgICAtMSAgICAgLT4gLTAKK2R2aXg1NDIgZGl2aWRlaW50IC0wICAgIC0xICAgICAtPiAgMAorZHZpeDU0MyBkaXZpZGVpbnQgIDAgICAgIDEgICAgIC0+ICAwCitkdml4NTQ0IGRpdmlkZWludCAtMCAgICAgMSAgICAgLT4gLTAKK2R2aXg1NDUgZGl2aWRlaW50IC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHZpeDU0NiBkaXZpZGVpbnQgLTEgICAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4NTQ3IGRpdmlkZWludCAgMSAgICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXg1NDggZGl2aWRlaW50ICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkdml4NTUxIGRpdmlkZWludCAgMC4wICAtMSAgICAgLT4gLTAKK2R2aXg1NTIgZGl2aWRlaW50IC0wLjAgIC0xICAgICAtPiAgMAorZHZpeDU1MyBkaXZpZGVpbnQgIDAuMCAgIDEgICAgIC0+ICAwCitkdml4NTU0IGRpdmlkZWludCAtMC4wICAgMSAgICAgLT4gLTAKK2R2aXg1NTUgZGl2aWRlaW50IC0xLjAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHZpeDU1NiBkaXZpZGVpbnQgLTEuMCAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4NTU3IGRpdmlkZWludCAgMS4wICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXg1NTggZGl2aWRlaW50ICAxLjAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkdml4NTYxIGRpdmlkZWludCAgMCAgICAtMS4wICAgLT4gLTAKK2R2aXg1NjIgZGl2aWRlaW50IC0wICAgIC0xLjAgICAtPiAgMAorZHZpeDU2MyBkaXZpZGVpbnQgIDAgICAgIDEuMCAgIC0+ICAwCitkdml4NTY0IGRpdmlkZWludCAtMCAgICAgMS4wICAgLT4gLTAKK2R2aXg1NjUgZGl2aWRlaW50IC0xICAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHZpeDU2NiBkaXZpZGVpbnQgLTEgICAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4NTY3IGRpdmlkZWludCAgMSAgICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXg1NjggZGl2aWRlaW50ICAxICAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkdml4NTcxIGRpdmlkZWludCAgMC4wICAtMS4wICAgLT4gLTAKK2R2aXg1NzIgZGl2aWRlaW50IC0wLjAgIC0xLjAgICAtPiAgMAorZHZpeDU3MyBkaXZpZGVpbnQgIDAuMCAgIDEuMCAgIC0+ICAwCitkdml4NTc0IGRpdmlkZWludCAtMC4wICAgMS4wICAgLT4gLTAKK2R2aXg1NzUgZGl2aWRlaW50IC0xLjAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHZpeDU3NiBkaXZpZGVpbnQgLTEuMCAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkdml4NTc3IGRpdmlkZWludCAgMS4wICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2R2aXg1NzggZGl2aWRlaW50ICAxLjAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCistLSBTcGVjaWFscworZHZpeDU4MCBkaXZpZGVpbnQgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2R2aXg1ODEgZGl2aWRlaW50ICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2R2aXg1ODIgZGl2aWRlaW50ICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2R2aXg1ODMgZGl2aWRlaW50ICBJbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2R2aXg1ODQgZGl2aWRlaW50ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2R2aXg1ODUgZGl2aWRlaW50ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2R2aXg1ODYgZGl2aWRlaW50ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2R2aXg1ODcgZGl2aWRlaW50ICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkdml4NTg4IGRpdmlkZWludCAtMTAwMCAgSW5mICAgLT4gLTAKK2R2aXg1ODkgZGl2aWRlaW50IC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkdml4NTkwIGRpdmlkZWludCAtMSAgICAgSW5mICAgLT4gLTAKK2R2aXg1OTEgZGl2aWRlaW50IC0wICAgICBJbmYgICAtPiAtMAorZHZpeDU5MiBkaXZpZGVpbnQgIDAgICAgIEluZiAgIC0+ICAwCitkdml4NTkzIGRpdmlkZWludCAgMSAgICAgSW5mICAgLT4gIDAKK2R2aXg1OTQgZGl2aWRlaW50ICAxMDAwICBJbmYgICAtPiAgMAorZHZpeDU5NSBkaXZpZGVpbnQgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHZpeDYwMCBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2R2aXg2MDEgZGl2aWRlaW50IC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK2R2aXg2MDIgZGl2aWRlaW50IC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2R2aXg2MDMgZGl2aWRlaW50IC1JbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2R2aXg2MDQgZGl2aWRlaW50IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2R2aXg2MDUgZGl2aWRlaW50IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2R2aXg2MDYgZGl2aWRlaW50IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2R2aXg2MDcgZGl2aWRlaW50IC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkdml4NjA4IGRpdmlkZWludCAtMTAwMCAgSW5mICAgLT4gLTAKK2R2aXg2MDkgZGl2aWRlaW50IC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkdml4NjEwIGRpdmlkZWludCAtMSAgICAtSW5mICAgLT4gIDAKK2R2aXg2MTEgZGl2aWRlaW50IC0wICAgIC1JbmYgICAtPiAgMAorZHZpeDYxMiBkaXZpZGVpbnQgIDAgICAgLUluZiAgIC0+IC0wCitkdml4NjEzIGRpdmlkZWludCAgMSAgICAtSW5mICAgLT4gLTAKK2R2aXg2MTQgZGl2aWRlaW50ICAxMDAwIC1JbmYgICAtPiAtMAorZHZpeDYxNSBkaXZpZGVpbnQgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHZpeDYyMSBkaXZpZGVpbnQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2R2aXg2MjIgZGl2aWRlaW50ICBOYU4gLTEwMDAgICAtPiAgTmFOCitkdml4NjIzIGRpdmlkZWludCAgTmFOIC0xICAgICAgLT4gIE5hTgorZHZpeDYyNCBkaXZpZGVpbnQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2R2aXg2MjUgZGl2aWRlaW50ICBOYU4gIDAgICAgICAtPiAgTmFOCitkdml4NjI2IGRpdmlkZWludCAgTmFOICAxICAgICAgLT4gIE5hTgorZHZpeDYyNyBkaXZpZGVpbnQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2R2aXg2MjggZGl2aWRlaW50ICBOYU4gIEluZiAgICAtPiAgTmFOCitkdml4NjI5IGRpdmlkZWludCAgTmFOICBOYU4gICAgLT4gIE5hTgorZHZpeDYzMCBkaXZpZGVpbnQgLUluZiAgTmFOICAgIC0+ICBOYU4KK2R2aXg2MzEgZGl2aWRlaW50IC0xMDAwIE5hTiAgICAtPiAgTmFOCitkdml4NjMyIGRpdmlkZWludCAtMSAgICBOYU4gICAgLT4gIE5hTgorZHZpeDYzMyBkaXZpZGVpbnQgLTAgICAgTmFOICAgIC0+ICBOYU4KK2R2aXg2MzQgZGl2aWRlaW50ICAwICAgIE5hTiAgICAtPiAgTmFOCitkdml4NjM1IGRpdmlkZWludCAgMSAgICBOYU4gICAgLT4gIE5hTgorZHZpeDYzNiBkaXZpZGVpbnQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2R2aXg2MzcgZGl2aWRlaW50ICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2R2aXg2NDEgZGl2aWRlaW50ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY0MiBkaXZpZGVpbnQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkdml4NjQzIGRpdmlkZWludCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2R2aXg2NDQgZGl2aWRlaW50ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY0NSBkaXZpZGVpbnQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkdml4NjQ2IGRpdmlkZWludCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2R2aXg2NDcgZGl2aWRlaW50ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY0OCBkaXZpZGVpbnQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkdml4NjQ5IGRpdmlkZWludCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2R2aXg2NTAgZGl2aWRlaW50ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY1MSBkaXZpZGVpbnQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkdml4NjUyIGRpdmlkZWludCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2R2aXg2NTMgZGl2aWRlaW50IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY1NCBkaXZpZGVpbnQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkdml4NjU1IGRpdmlkZWludCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2R2aXg2NTYgZGl2aWRlaW50ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY1NyBkaXZpZGVpbnQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkdml4NjU4IGRpdmlkZWludCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2R2aXg2NTkgZGl2aWRlaW50ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkdml4NjYxIGRpdmlkZWludCAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK2R2aXg2NjIgZGl2aWRlaW50ICBOYU44ICAxMDAwICAtPiAgTmFOOAorZHZpeDY2MyBkaXZpZGVpbnQgIE5hTjcgIEluZiAgIC0+ICBOYU43Citkdml4NjY0IGRpdmlkZWludCAtTmFONiAgTmFONSAgLT4gLU5hTjYKK2R2aXg2NjUgZGl2aWRlaW50IC1JbmYgICBOYU40ICAtPiAgTmFONAorZHZpeDY2NiBkaXZpZGVpbnQgLTEwMDAgIE5hTjMgIC0+ICBOYU4zCitkdml4NjY3IGRpdmlkZWludCAgSW5mICAtTmFOMiAgLT4gLU5hTjIKKworZHZpeDY3MSBkaXZpZGVpbnQgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY3MiBkaXZpZGVpbnQgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY3MyBkaXZpZGVpbnQgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY3NCBkaXZpZGVpbnQgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY3NSBkaXZpZGVpbnQgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY3NiBkaXZpZGVpbnQgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY3NyBkaXZpZGVpbnQgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY3OCBkaXZpZGVpbnQgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDY3OSBkaXZpZGVpbnQgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBzb21lIGxvbmcgb3BlcmFuZCBjYXNlcyBhZ2FpbgorcHJlY2lzaW9uOiA4Citkdml4NzEwIGRpdmlkZWludCAgMTAwMDAwMDAxICAgICAxICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXg3MTEgZGl2aWRlaW50ICAxMDAwMDAwMDAuNCAgIDEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDcxMiBkaXZpZGVpbnQgIDEwMDAwMDAwMC41ICAgMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4NzEzIGRpdmlkZWludCAgMTAwMDAwMDAwLjkgICAxICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXg3MTQgZGl2aWRlaW50ICAxMDAwMDAwMDAuOTk5IDEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcHJlY2lzaW9uOiA2Citkdml4NzIwIGRpdmlkZWludCAgMTAwMDAwMDAwICAgICAxICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXg3MjEgZGl2aWRlaW50ICAxMDAwMDAwMCAgICAgIDEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDcyMiBkaXZpZGVpbnQgIDEwMDAwMDAgICAgICAgMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4NzIzIGRpdmlkZWludCAgMTAwMDAwICAgICAgICAxICAtPiAgMTAwMDAwCitkdml4NzI0IGRpdmlkZWludCAgMTAwMDAgICAgICAgICAxICAtPiAgMTAwMDAKK2R2aXg3MjUgZGl2aWRlaW50ICAxMDAwICAgICAgICAgIDEgIC0+ICAxMDAwCitkdml4NzI2IGRpdmlkZWludCAgMTAwICAgICAgICAgICAxICAtPiAgMTAwCitkdml4NzI3IGRpdmlkZWludCAgMTAgICAgICAgICAgICAxICAtPiAgMTAKK2R2aXg3MjggZGl2aWRlaW50ICAxICAgICAgICAgICAgIDEgIC0+ICAxCitkdml4NzI5IGRpdmlkZWludCAgMSAgICAgICAgICAgIDEwICAtPiAgMAorCitwcmVjaXNpb246IDkKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5Citkdml4NzMyIGRpdmlkZWludCAxIDAuOTllOTk5OTk5OTk5IC0+IDAKK2R2aXg3MzMgZGl2aWRlaW50IDEgMC45OTk5OTk5OTllOTk5OTk5OTk5IC0+IDAKK2R2aXg3MzQgZGl2aWRlaW50IDllOTk5OTk5OTk5ICAgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXg3MzUgZGl2aWRlaW50IDkuOWU5OTk5OTk5OTkgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXg3MzYgZGl2aWRlaW50IDkuOTllOTk5OTk5OTk5IDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2R2aXg3MzcgZGl2aWRlaW50IDkuOTk5OTk5OTllOTk5OTk5OTk5IDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworZHZpeDc0MCBkaXZpZGVpbnQgMC4xIDllLTk5OTk5OTk5OSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDc0MSBkaXZpZGVpbnQgMC4xIDk5ZS05OTk5OTk5OTkgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHZpeDc0MiBkaXZpZGVpbnQgMC4xIDk5OWUtOTk5OTk5OTk5ICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCitkdml4NzQzIGRpdmlkZWludCAwLjEgOWUtOTk5OTk5OTk4ICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4NzQ0IGRpdmlkZWludCAwLjEgOTllLTk5OTk5OTk5OCAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4NzQ1IGRpdmlkZWludCAwLjEgOTk5ZS05OTk5OTk5OTggICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4NzQ2IGRpdmlkZWludCAwLjEgOTk5ZS05OTk5OTk5OTcgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4NzQ3IGRpdmlkZWludCAwLjEgOTk5OWUtOTk5OTk5OTk3ICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkdml4NzQ4IGRpdmlkZWludCAwLjEgOTk5OTllLTk5OTk5OTk5NyAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKKworLS0gTnVsbCB0ZXN0cworZHZpeDkwMCBkaXZpZGVpbnQgIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHZpeDkwMSBkaXZpZGVpbnQgICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFicy5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFicy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYWEwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQWJzLmRlY1Rlc3QKQEAgLTAsMCArMSwxMjYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFBYnMuZGVjVGVzdCAtLSBkZWNRdWFkIGFic29sdXRlIHZhbHVlLCBoZWVkaW5nIHNOYU4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkcWFiczAwMSBhYnMgJzEnICAgICAgLT4gJzEnCitkcWFiczAwMiBhYnMgJy0xJyAgICAgLT4gJzEnCitkcWFiczAwMyBhYnMgJzEuMDAnICAgLT4gJzEuMDAnCitkcWFiczAwNCBhYnMgJy0xLjAwJyAgLT4gJzEuMDAnCitkcWFiczAwNSBhYnMgJzAnICAgICAgLT4gJzAnCitkcWFiczAwNiBhYnMgJzAuMDAnICAgLT4gJzAuMDAnCitkcWFiczAwNyBhYnMgJzAwLjAnICAgLT4gJzAuMCcKK2RxYWJzMDA4IGFicyAnMDAuMDAnICAtPiAnMC4wMCcKK2RxYWJzMDA5IGFicyAnMDAnICAgICAtPiAnMCcKKworZHFhYnMwMTAgYWJzICctMicgICAgIC0+ICcyJworZHFhYnMwMTEgYWJzICcyJyAgICAgIC0+ICcyJworZHFhYnMwMTIgYWJzICctMi4wMCcgIC0+ICcyLjAwJworZHFhYnMwMTMgYWJzICcyLjAwJyAgIC0+ICcyLjAwJworZHFhYnMwMTQgYWJzICctMCcgICAgIC0+ICcwJworZHFhYnMwMTUgYWJzICctMC4wMCcgIC0+ICcwLjAwJworZHFhYnMwMTYgYWJzICctMDAuMCcgIC0+ICcwLjAnCitkcWFiczAxNyBhYnMgJy0wMC4wMCcgLT4gJzAuMDAnCitkcWFiczAxOCBhYnMgJy0wMCcgICAgLT4gJzAnCisKK2RxYWJzMDIwIGFicyAnLTIwMDAwMDAnIC0+ICcyMDAwMDAwJworZHFhYnMwMjEgYWJzICcyMDAwMDAwJyAgLT4gJzIwMDAwMDAnCisKK2RxYWJzMDMwIGFicyAnKzAuMScgICAgICAgICAgICAtPiAnMC4xJworZHFhYnMwMzEgYWJzICctMC4xJyAgICAgICAgICAgIC0+ICcwLjEnCitkcWFiczAzMiBhYnMgJyswLjAxJyAgICAgICAgICAgLT4gJzAuMDEnCitkcWFiczAzMyBhYnMgJy0wLjAxJyAgICAgICAgICAgLT4gJzAuMDEnCitkcWFiczAzNCBhYnMgJyswLjAwMScgICAgICAgICAgLT4gJzAuMDAxJworZHFhYnMwMzUgYWJzICctMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScKK2RxYWJzMDM2IGFicyAnKzAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnCitkcWFiczAzNyBhYnMgJy0wLjAwMDAwMScgICAgICAgLT4gJzAuMDAwMDAxJworZHFhYnMwMzggYWJzICcrMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicKK2RxYWJzMDM5IGFicyAnLTAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKK2RxYWJzMDQwIGFicyAnMi4xJyAgICAgLT4gICcyLjEnCitkcWFiczA0MSBhYnMgJy0xMDAnICAgIC0+ICAnMTAwJworZHFhYnMwNDIgYWJzICcxMDEuNScgICAtPiAgJzEwMS41JworZHFhYnMwNDMgYWJzICctMTAxLjUnICAtPiAgJzEwMS41JworCistLSBtb3JlIGZpeGVkLCBwb3RlbnRpYWwgTEhTIHN3YXBzL292ZXJsYXlzIGlmIGRvbmUgYnkgc3VidHJhY3QgMAorZHFhYnMwNjAgYWJzICctNTYyNjdFLTEwJyAgLT4gJzAuMDAwMDA1NjI2NycKK2RxYWJzMDYxIGFicyAnLTU2MjY3RS01JyAgIC0+ICcwLjU2MjY3JworZHFhYnMwNjIgYWJzICctNTYyNjdFLTInICAgLT4gJzU2Mi42NycKK2RxYWJzMDYzIGFicyAnLTU2MjY3RS0xJyAgIC0+ICc1NjI2LjcnCitkcWFiczA2NSBhYnMgJy01NjI2N0UtMCcgICAtPiAnNTYyNjcnCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdworCistLSBsb25nIG9wZXJhbmQgdGVzdHMKK2RxYWJzMzIxIGFicyAxMjM0NTY3ODkwMTIzNDU2ICAtPiAxMjM0NTY3ODkwMTIzNDU2CitkcWFiczMyMiBhYnMgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwCitkcWFiczMyMyBhYnMgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDAKK2RxYWJzMzI0IGFicyAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MAorZHFhYnMzMjUgYWJzIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxCitkcWFiczMyNiBhYnMgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxCitkcWFiczMyNyBhYnMgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKKworLS0gemVyb3MKK2RxYWJzMTExIGFicyAgICAgICAgICAwICAgLT4gMAorZHFhYnMxMTIgYWJzICAgICAgICAgLTAgICAtPiAwCitkcWFiczExMyBhYnMgICAgICAgMEUrNiAgIC0+IDBFKzYKK2RxYWJzMTE0IGFicyAgICAgIC0wRSs2ICAgLT4gMEUrNgorZHFhYnMxMTUgYWJzICAgICAwLjAwMDAgICAtPiAwLjAwMDAKK2RxYWJzMTE2IGFicyAgICAtMC4wMDAwICAgLT4gMC4wMDAwCitkcWFiczExNyBhYnMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZHFhYnMxMTggYWJzICAgICAtMEUtMTQxICAtPiAwRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RxYWJzMTIxIGFicyAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxYWJzMTIyIGFicyAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxYWJzMTIzIGFicyAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKK2RxYWJzMTI0IGFicyAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxYWJzMTMxIGFicyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxYWJzMTMyIGFicyAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0MworZHFhYnMxMzMgYWJzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFhYnMxMzQgYWJzICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2IFN1Ym5vcm1hbAorCitkcWFiczEzNSBhYnMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYgU3Vibm9ybWFsCitkcWFiczEzNiBhYnMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWFiczEzNyBhYnMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMKK2RxYWJzMTM4IGFicyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKKworLS0gc3BlY2lhbHMKK2RxYWJzNTIwIGFicyAnSW5mJyAgICAtPiAnSW5maW5pdHknCitkcWFiczUyMSBhYnMgJy1JbmYnICAgLT4gJ0luZmluaXR5JworZHFhYnM1MjIgYWJzICAgTmFOICAgIC0+ICBOYU4KK2RxYWJzNTIzIGFicyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWJzNTI0IGFicyAgIE5hTjIyICAtPiAgTmFOMjIKK2RxYWJzNTI1IGFicyAgc05hTjMzICAtPiAgTmFOMzMgSW52YWxpZF9vcGVyYXRpb24KK2RxYWJzNTI2IGFicyAgLU5hTjIyICAtPiAtTmFOMjIKK2RxYWJzNTI3IGFicyAtc05hTjMzICAtPiAtTmFOMzMgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0cworZHFhYnM5MDAgYWJzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQWRkLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQWRkLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFkZjc3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBZGQuZGVjVGVzdApAQCAtMCwwICsxLDEyMTUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFBZGQuZGVjVGVzdCAtLSBkZWNRdWFkIGFkZGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY1F1YWRzIG9ubHk7IGFsbCBhcmd1bWVudHMgYXJlCistLSByZXByZXNlbnRhYmxlIGluIGEgZGVjUXVhZAorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddCitkcWFkZDAwMSBhZGQgMSAgICAgICAxICAgICAgIC0+ICAyCitkcWFkZDAwMiBhZGQgMiAgICAgICAzICAgICAgIC0+ICA1CitkcWFkZDAwMyBhZGQgJzUuNzUnICAnMy4zJyAgIC0+ICA5LjA1CitkcWFkZDAwNCBhZGQgJzUnICAgICAnLTMnICAgIC0+ICAyCitkcWFkZDAwNSBhZGQgJy01JyAgICAnLTMnICAgIC0+ICAtOAorZHFhZGQwMDYgYWRkICctNycgICAgJzIuNScgICAtPiAgLTQuNQorZHFhZGQwMDcgYWRkICcwLjcnICAgJzAuMycgICAtPiAgMS4wCitkcWFkZDAwOCBhZGQgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwCitkcWFkZDAwOSBhZGQgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzIuMjM0NTY3ODknCitkcWFkZDAxMCBhZGQgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzIuMjM0NTY4MDAnCisKKy0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2CitkcWFkZDAxMSBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NicgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDAxMiBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZHFhZGQwMTMgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQwMTQgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5JyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDE1IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTknICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDAxNiBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5OScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMTcgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDAnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDE4IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAxJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDAxOSBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAxJyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMjAgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUxJyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQwMjEgYWRkIDAgMSAtPiAxCitkcWFkZDAyMiBhZGQgMSAxIC0+IDIKK2RxYWRkMDIzIGFkZCAyIDEgLT4gMworZHFhZGQwMjQgYWRkIDMgMSAtPiA0CitkcWFkZDAyNSBhZGQgNCAxIC0+IDUKK2RxYWRkMDI2IGFkZCA1IDEgLT4gNgorZHFhZGQwMjcgYWRkIDYgMSAtPiA3CitkcWFkZDAyOCBhZGQgNyAxIC0+IDgKK2RxYWRkMDI5IGFkZCA4IDEgLT4gOQorZHFhZGQwMzAgYWRkIDkgMSAtPiAxMAorCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKK2RxYWRkMDMxIGFkZCAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKK2RxYWRkMDMyIGFkZCAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScKK2RxYWRkMDMzIGFkZCAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcKK2RxYWRkMDM0IGFkZCAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScKKworZHFhZGQwMzUgYWRkICc3MCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMzYgYWRkICc3MDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDM3IGFkZCAnNzAwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMzggYWRkICc3MDAwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwMzkgYWRkICc3MDAwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFKzM4JyBSb3VuZGVkCisKKy0tIHN5bW1ldHJ5OgorZHFhZGQwNDAgYWRkICcxMDAwMGUrMzQnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwNDEgYWRkICcxMDAwMGUrMzQnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMDQyIGFkZCAnMTAwMDBlKzM0JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwNDQgYWRkICcxMDAwMGUrMzQnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQwNDUgYWRkICcxMDAwMGUrMzQnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFKzM4JyBSb3VuZGVkCisKKy0tIHNhbWUsIHdpdGhvdXQgcm91bmRpbmcKK2RxYWRkMDQ2IGFkZCAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3JworZHFhZGQwNDcgYWRkICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJworZHFhZGQwNDggYWRkICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcKK2RxYWRkMDQ5IGFkZCAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJworZHFhZGQwNTAgYWRkICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJworZHFhZGQwNTEgYWRkICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcKK2RxYWRkMDUyIGFkZCAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzEwMDAwMDA3MDAwMDAwJworCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCitkcWFkZDA1MyBhZGQgJzEyJyAnNy4wMCcgLT4gJzE5LjAwJworZHFhZGQwNTQgYWRkICcxLjMnICctMS4wNycgLT4gJzAuMjMnCitkcWFkZDA1NSBhZGQgJzEuMycgJy0xLjMwJyAtPiAnMC4wMCcKK2RxYWRkMDU2IGFkZCAnMS4zJyAnLTIuMDcnIC0+ICctMC43NycKK2RxYWRkMDU3IGFkZCAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0JworCistLSBsZWFkaW5nIHplcm8gcHJlc2VydmF0aW9uCitkcWFkZDA2MSBhZGQgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJworZHFhZGQwNjIgYWRkIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJworZHFhZGQwNjMgYWRkIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnCitkcWFkZDA2NCBhZGQgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMDAxJworZHFhZGQwNjUgYWRkIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAxJworCistLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCitkcWFkZDA3MCBhZGQgMSAgMCAgICAtPiAxCitkcWFkZDA3MSBhZGQgMSAwLiAgICAtPiAxCitkcWFkZDA3MiBhZGQgMSAgLjAgICAtPiAxLjAKK2RxYWRkMDczIGFkZCAxIDAuMCAgIC0+IDEuMAorZHFhZGQwNzQgYWRkIDEgMC4wMCAgLT4gMS4wMAorZHFhZGQwNzUgYWRkICAwICAxICAgLT4gMQorZHFhZGQwNzYgYWRkIDAuICAxICAgLT4gMQorZHFhZGQwNzcgYWRkICAuMCAxICAgLT4gMS4wCitkcWFkZDA3OCBhZGQgMC4wIDEgICAtPiAxLjAKK2RxYWRkMDc5IGFkZCAwLjAwIDEgIC0+IDEuMDAKKworLS0gc29tZSBjYXJyaWVzCitkcWFkZDA4MCBhZGQgOTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OQorZHFhZGQwODEgYWRkIDk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwCitkcWFkZDA4MiBhZGQgIDk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMAorZHFhZGQwODMgYWRkICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMAorZHFhZGQwODQgYWRkICAgIDk5OTk5OSAxICAtPiAxMDAwMDAwCitkcWFkZDA4NSBhZGQgICAgIDk5OTk5IDEgIC0+IDEwMDAwMAorZHFhZGQwODYgYWRkICAgICAgOTk5OSAxICAtPiAxMDAwMAorZHFhZGQwODcgYWRkICAgICAgIDk5OSAxICAtPiAxMDAwCitkcWFkZDA4OCBhZGQgICAgICAgIDk5IDEgIC0+IDEwMAorZHFhZGQwODkgYWRkICAgICAgICAgOSAxICAtPiAxMAorCisKKy0tIG1vcmUgTEhTIHN3YXBzCitkcWFkZDA5MCBhZGQgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnCitkcWFkZDA5MSBhZGQgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKK2RxYWRkMDkyIGFkZCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCitkcWFkZDA5MyBhZGQgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnCitkcWFkZDA5NCBhZGQgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCitkcWFkZDA5NSBhZGQgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCitkcWFkZDA5NiBhZGQgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnCitkcWFkZDA5NyBhZGQgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKK2RxYWRkMDk4IGFkZCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJworZHFhZGQwOTkgYWRkICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycKK2RxYWRkMTAwIGFkZCAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JworZHFhZGQxMDEgYWRkICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKK2RxYWRkMTAyIGFkZCAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScKK2RxYWRkMTAzIGFkZCAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKK2RxYWRkMTA0IGFkZCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCitkcWFkZDEwNSBhZGQgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcKK2RxYWRkMTA2IGFkZCAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKK2RxYWRkMTA3IGFkZCAnLTVFMzMnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDEwOCBhZGQgJy01RTM0JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQnICBSb3VuZGVkCitkcWFkZDEwOSBhZGQgJy01RTM1JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICBSb3VuZGVkCitkcWFkZDExMCBhZGQgJy01RTM2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYnICBSb3VuZGVkCitkcWFkZDExMSBhZGQgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMTAwJyBSb3VuZGVkCisKKy0tIG1vcmUgUkhTIHN3YXBzCitkcWFkZDExMyBhZGQgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycKK2RxYWRkMTE0IGFkZCAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnCitkcWFkZDExNiBhZGQgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnCitkcWFkZDExNyBhZGQgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycKK2RxYWRkMTE5IGFkZCAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3JworZHFhZGQxMjAgYWRkIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnCitkcWFkZDEyMSBhZGQgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycKK2RxYWRkMTIyIGFkZCAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnCitkcWFkZDEyMyBhZGQgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJworZHFhZGQxMjQgYWRkIDAgICctNUUtNycgICAgICAtPiAgJy01RS03JworZHFhZGQxMjUgYWRkIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScKK2RxYWRkMTI2IGFkZCAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScKK2RxYWRkMTI3IGFkZCAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1JworZHFhZGQxMjggYWRkIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnCitkcWFkZDEyOSBhZGQgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnCitkcWFkZDEzMCBhZGQgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJworZHFhZGQxMzEgYWRkIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnCitkcWFkZDEzMiBhZGQgMCAgJy01RTMzJyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDEzMyBhZGQgMCAgJy01RTM0JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgICBSb3VuZGVkCitkcWFkZDEzNCBhZGQgMCAgJy01RTM1JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNScgICBSb3VuZGVkCitkcWFkZDEzNSBhZGQgMCAgJy01RTM2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgICBSb3VuZGVkCitkcWFkZDEzNiBhZGQgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCisKKy0tIHJlbGF0ZWQKK2RxYWRkMTM3IGFkZCAgMSAgJzBFLTM5JyAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCitkcWFkZDEzOCBhZGQgLTEgICcwRS0zOScgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZHFhZGQxMzkgYWRkICcwRS0zOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2RxYWRkMTQwIGFkZCAnMEUtMzknIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkcWFkZDE0MSBhZGQgMUUrMjkgICAwLjAwMDAgICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAwJworZHFhZGQxNDIgYWRkIDFFKzI5ICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQKK2RxYWRkMTQzIGFkZCAwLjAwMCAgIDFFKzMwICAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAnCitkcWFkZDE0NCBhZGQgMC4wMDAwICAxRSszMCAgICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwJyAgUm91bmRlZAorCistLSBbc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzXQorZHFhZGQxNDYgYWRkICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcKK2RxYWRkMTQ3IGFkZCAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJworZHFhZGQxNDggYWRkICAwICAgICAgJzAuMDAnICAtPiAgJzAuMDAnCitkcWFkZDE0OSBhZGQgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJworZHFhZGQxNTAgYWRkICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnCitkcWFkZDE1MSBhZGQgJzAuMDAnICAnMDAuMCcgIC0+ICAnMC4wMCcKK2RxYWRkMTUyIGFkZCAnMycgICAgICcuMycgICAgLT4gICczLjMnCitkcWFkZDE1MyBhZGQgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJworZHFhZGQxNTQgYWRkICczLjAnICAgJy4zJyAgICAtPiAgJzMuMycKK2RxYWRkMTU1IGFkZCAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJworZHFhZGQxNTYgYWRkICczJyAgICAgJzMnICAgICAtPiAgJzYnCitkcWFkZDE1NyBhZGQgJzMnICAgICAnKzMnICAgIC0+ICAnNicKK2RxYWRkMTU4IGFkZCAnMycgICAgICctMycgICAgLT4gICcwJworZHFhZGQxNTkgYWRkICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcKK2RxYWRkMTYwIGFkZCAnMC4wMycgICctMC4wMycgLT4gICcwLjAwJworCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLgorZHFhZGQxNjEgYWRkICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5JworZHFhZGQxNjIgYWRkICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKK2RxYWRkMTYzIGFkZCAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitkcWFkZDE2NCBhZGQgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknCitkcWFkZDE2NSBhZGQgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5JworZHFhZGQxNjYgYWRkICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScKK2RxYWRkMTY3IGFkZCAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitkcWFkZDE2OCBhZGQgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5JworCityb3VuZGluZzogaGFsZl91cAorZHFhZGQxNzAgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjcnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE3MSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NicgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTcyIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY1JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZHFhZGQxNzMgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjQnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE3NCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTc1IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZHFhZGQxNzYgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE3NyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBSb3VuZGVkCitkcWFkZDE3OCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0NScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTc5IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQ0JyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQxODAgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDE4MSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMTgyIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQxODMgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgUm91bmRlZAorCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZHFhZGQyMDAgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JworZHFhZGQyMDEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjAyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIwMyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMDQgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjA1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIwNiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMDcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjA4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIwOSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMTAgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjExIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIxMiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMTMgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjE0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIxNSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMTYgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJworZHFhZGQyMTcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjE4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIxOSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkcWFkZDIyMCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknCitkcWFkZDIyMSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMjIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjIzIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIyNCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMjUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjI2IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIyNyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMjggYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjI5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIzMCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMzEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjMyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIzMyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMzQgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjM1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDIzNiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnCitkcWFkZDIzNyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQyMzggYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjM5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgorZHFhZGQyNDAgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjQxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI0MiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZHFhZGQyNTAgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JworZHFhZGQyNTEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjUyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI1MyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNTQgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjU1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI1NiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNTcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjU4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI1OSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNjAgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjYxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI2MiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNjMgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjY0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI2NSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQyNjYgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJworZHFhZGQyNjcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMjY4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDI2OSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMKK3JvdW5kaW5nOiBoYWxmX3VwCitkcWFkZDMwMSBhZGQgIC0xICAgMSAgICAgIC0+ICAgMAorZHFhZGQzMDIgYWRkICAgMCAgIDEgICAgICAtPiAgIDEKK2RxYWRkMzAzIGFkZCAgIDEgICAxICAgICAgLT4gICAyCitkcWFkZDMwNCBhZGQgIDEyICAgMSAgICAgIC0+ICAxMworZHFhZGQzMDUgYWRkICA5OCAgIDEgICAgICAtPiAgOTkKK2RxYWRkMzA2IGFkZCAgOTkgICAxICAgICAgLT4gMTAwCitkcWFkZDMwNyBhZGQgMTAwICAgMSAgICAgIC0+IDEwMQorZHFhZGQzMDggYWRkIDEwMSAgIDEgICAgICAtPiAxMDIKK2RxYWRkMzA5IGFkZCAgLTEgIC0xICAgICAgLT4gIC0yCitkcWFkZDMxMCBhZGQgICAwICAtMSAgICAgIC0+ICAtMQorZHFhZGQzMTEgYWRkICAgMSAgLTEgICAgICAtPiAgIDAKK2RxYWRkMzEyIGFkZCAgMTIgIC0xICAgICAgLT4gIDExCitkcWFkZDMxMyBhZGQgIDk4ICAtMSAgICAgIC0+ICA5NworZHFhZGQzMTQgYWRkICA5OSAgLTEgICAgICAtPiAgOTgKK2RxYWRkMzE1IGFkZCAxMDAgIC0xICAgICAgLT4gIDk5CitkcWFkZDMxNiBhZGQgMTAxICAtMSAgICAgIC0+IDEwMAorCitkcWFkZDMyMSBhZGQgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDAKK2RxYWRkMzIyIGFkZCAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQorZHFhZGQzMjMgYWRkICAwLjAxICAwLjAxICAgIC0+ICAwLjAyCitkcWFkZDMyNCBhZGQgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMKK2RxYWRkMzI1IGFkZCAgMC45OCAgMC4wMSAgICAtPiAgMC45OQorZHFhZGQzMjYgYWRkICAwLjk5ICAwLjAxICAgIC0+ICAxLjAwCitkcWFkZDMyNyBhZGQgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDEKK2RxYWRkMzI4IGFkZCAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMgorZHFhZGQzMjkgYWRkIC0wLjAxIC0wLjAxICAgIC0+IC0wLjAyCitkcWFkZDMzMCBhZGQgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDEKK2RxYWRkMzMxIGFkZCAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMAorZHFhZGQzMzIgYWRkICAwLjEyIC0wLjAxICAgIC0+ICAwLjExCitkcWFkZDMzMyBhZGQgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcKK2RxYWRkMzM0IGFkZCAgMC45OSAtMC4wMSAgICAtPiAgMC45OAorZHFhZGQzMzUgYWRkICAxLjAwIC0wLjAxICAgIC0+ICAwLjk5CitkcWFkZDMzNiBhZGQgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDAKKworLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGFkZGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50CitkcWFkZDM0MCBhZGQgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMAorZHFhZGQzNDEgYWRkIDFFKzMzICAgMCAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWFkZDM0MiBhZGQgMUUrMzQgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBSb3VuZGVkCitkcWFkZDM0MyBhZGQgMUUrMzUgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBSb3VuZGVkCistLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uCitkcWFkZDM0NCBhZGQgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQorZHFhZGQzNDUgYWRkIDFFKzMzICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcWFkZDM0NiBhZGQgMUUrMzQgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQ3IGFkZCAxRSszNSAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNDggYWRkIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcKK2RxYWRkMzQ5IGFkZCAxRSszMyAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZHFhZGQzNTAgYWRkIDFFKzM0ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszNCAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM1MSBhZGQgMUUrMzUgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitkcWFkZDM2MCAgYWRkIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUKK2RxYWRkMzYxICBhZGQgMEUtNTAgMTAwMDBFKzEgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQKK2RxYWRkMzYyICBhZGQgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQKK2RxYWRkMzYzICBhZGQgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzY0ICBhZGQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDBFKzYxMTEKKy0tICAgICAgICAgICAgMSAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKKworLS0gYSBjdXJpb3NpdHkgZnJvbSBKU1IgMTMgdGVzdGluZworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorZHFhZGQzNzAgYWRkICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MTQKK2RxYWRkMzcxIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl91cAorZHFhZGQzNzIgYWRkICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MTQKK2RxYWRkMzczIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl9ldmVuCitkcWFkZDM3NCBhZGQgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNAorZHFhZGQzNzUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxRSszNCBSb3VuZGVkIEluZXhhY3QKKworLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzCitkcWFkZDQwMCBhZGQgICAxICAgNzdlLTMyICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkNDAxIGFkZCAgIDEgICA3N2UtMzMgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkNDAyIGFkZCAgIDEgICA3N2UtMzQgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkcWFkZDQwMyBhZGQgICAxICAgNzdlLTM1ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MDQgYWRkICAgMSAgIDc3ZS0zNiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDA1IGFkZCAgIDEgICA3N2UtMzcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQwNiBhZGQgICAxICAgNzdlLTI5OSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDQxMCBhZGQgIDEwICAgNzdlLTMyICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3CitkcWFkZDQxMSBhZGQgIDEwICAgNzdlLTMzICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MTIgYWRkICAxMCAgIDc3ZS0zNCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDEzIGFkZCAgMTAgICA3N2UtMzUgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQxNCBhZGQgIDEwICAgNzdlLTM2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MTUgYWRkICAxMCAgIDc3ZS0zNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDE2IGFkZCAgMTAgICA3N2UtMjk5ICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNDIwIGFkZCAgNzdlLTMyICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworZHFhZGQ0MjEgYWRkICA3N2UtMzMgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworZHFhZGQ0MjIgYWRkICA3N2UtMzQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDIzIGFkZCAgNzdlLTM1ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQyNCBhZGQgIDc3ZS0zNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MjUgYWRkICA3N2UtMzcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDI2IGFkZCAgNzdlLTI5OSAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNDMwIGFkZCAgNzdlLTMyICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkNDMxIGFkZCAgNzdlLTMzICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkcWFkZDQzMiBhZGQgIDc3ZS0zNCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MzMgYWRkICA3N2UtMzUgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNDM0IGFkZCAgNzdlLTM2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDQzNSBhZGQgIDc3ZS0zNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ0MzYgYWRkICA3N2UtMjk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gZmFzdHBhdGggYm91bmRhcmllcworLS0gICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcWFkZDUwMSBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUwMiBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUwMyBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMzU1NTU1NTU1NTU1NTU1NTU1NTA1NTU1NTU1NTU1NTU1NScgLT4gJzc5OTk5OTk5OTk5OTk5OTk5OTk0OTk5OTk5OTk5OTk5OTknCitkcWFkZDUwNCBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMzk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzgzOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUwNSBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzkzOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCitkcWFkZDUwNiBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gMS4wNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ1MTEgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTIgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTMgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTQgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTUgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTYgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTcgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTggYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MTkgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjAgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjEgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjIgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjMgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMnIC0+ICc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3JworZHFhZGQ1MjQgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjUgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjYgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjcgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjggYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MjkgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MzAgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5JworZHFhZGQ1MzEgYWRkICczNDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5JworZHFhZGQ1MzIgYWRkICczNDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5JworZHFhZGQ1MzMgYWRkICczNDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5JworZHFhZGQ1MzQgYWRkICczNDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5JworZHFhZGQ1MzUgYWRkICczNDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5JworZHFhZGQ1MzYgYWRkICczNDQ0NDQ0NDQnICAnNTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5JworZHFhZGQ1MzcgYWRkICczNDQ0NDQ0NCcgICc1NTU1NTU1NScgLT4gJzg5OTk5OTk5JworZHFhZGQ1MzggYWRkICczNDQ0NDQ0JyAgJzU1NTU1NTUnIC0+ICc4OTk5OTk5JworZHFhZGQ1MzkgYWRkICczNDQ0NDQnICAnNTU1NTU1JyAtPiAnODk5OTk5JworZHFhZGQ1NDAgYWRkICczNDQ0NCcgICc1NTU1NScgLT4gJzg5OTk5JworZHFhZGQ1NDEgYWRkICczNDQ0JyAgJzU1NTUnIC0+ICc4OTk5JworZHFhZGQ1NDIgYWRkICczNDQnICAnNTU1JyAtPiAnODk5JworZHFhZGQ1NDMgYWRkICczNCcgICc1NScgLT4gJzg5JworZHFhZGQ1NDQgYWRkICczJyAgJzUnIC0+ICc4JworCitkcWFkZDU0NSBhZGQgJzMwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnMzAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzYwMDAwMDQwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU0NiBhZGQgJzMwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzcwMDAwMDA0MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU0NyBhZGQgJzMwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNTAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzgwMDAwMDAwNDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU0OCBhZGQgJzQwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnMzAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzcwMDAwMDAwMDQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU0OSBhZGQgJzQwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzgwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU1MCBhZGQgJzQwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNTAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzkwMDAwMDAwMDQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU1MSBhZGQgJzUwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnMzAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzgwMDAwMDAwNDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU1MiBhZGQgJzUwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzkwMDAwMDA0MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcWFkZDU1MyBhZGQgJzUwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNTAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gMS4wMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IFJvdW5kZWQKKy0tIGNoZWNrIHByb3BhZ2F0aW9uCitkcWFkZDU1NCBhZGQgJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgLT4gIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxYWRkNTU1IGFkZCAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyAtPiAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFhZGQ1NTYgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzQ1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTYnIC0+ICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWFkZDU1NyBhZGQgJzQ1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTYnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworLS0gbmVnYXRpdmUgdWxwcworZHFhZGQ2NDQwIGFkZCAgIDEgICAtNzdlLTMyICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ0MSBhZGQgICAxICAgLTc3ZS0zMyAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDQyIGFkZCAgIDEgICAtNzdlLTM0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDQzIGFkZCAgIDEgICAtNzdlLTM1ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ0NCBhZGQgICAxICAgLTc3ZS0zNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NDUgYWRkICAgMSAgIC03N2UtMzcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NDYgYWRkICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNjQ1MCBhZGQgIDEwICAgLTc3ZS0zMiAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDUxIGFkZCAgMTAgICAtNzdlLTMzICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQ2NDUyIGFkZCAgMTAgICAtNzdlLTM0ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ1MyBhZGQgIDEwICAgLTc3ZS0zNSAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NTQgYWRkICAxMCAgIC03N2UtMzYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NTUgYWRkICAxMCAgIC03N2UtMzcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NTYgYWRkICAxMCAgIC03N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNjQ2MCBhZGQgIC03N2UtMzIgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0NjEgYWRkICAtNzdlLTMzICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ2MiBhZGQgIC03N2UtMzQgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ2MyBhZGQgIC03N2UtMzUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NjQgYWRkICAtNzdlLTM2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDY1IGFkZCAgLTc3ZS0zNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDY2IGFkZCAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDY0NzAgYWRkICAtNzdlLTMyICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ3MSBhZGQgIC03N2UtMzMgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ3MiBhZGQgIC03N2UtMzQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0NzMgYWRkICAtNzdlLTM1ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDc0IGFkZCAgLTc3ZS0zNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDc1IGFkZCAgLTc3ZS0zNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDc2IGFkZCAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSB1bHBzCitkcWFkZDY0ODAgYWRkICAtMSAgICA3N2UtMzIgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ4MSBhZGQgIC0xICAgIDc3ZS0zMyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ4MiBhZGQgIC0xICAgIDc3ZS0zNCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0ODMgYWRkICAtMSAgICA3N2UtMzUgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ4NCBhZGQgIC0xICAgIDc3ZS0zNiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDg1IGFkZCAgLTEgICAgNzdlLTM3ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ4NiBhZGQgIC0xICAgIDc3ZS05OSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNjQ5MCBhZGQgLTEwICAgIDc3ZS0zMiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjQ5MSBhZGQgLTEwICAgIDc3ZS0zMyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY0OTIgYWRkIC0xMCAgICA3N2UtMzQgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ5MyBhZGQgLTEwICAgIDc3ZS0zNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NDk0IGFkZCAtMTAgICAgNzdlLTM2ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjQ5NSBhZGQgLTEwICAgIDc3ZS0zNyAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY0OTYgYWRkIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDY1MDAgYWRkICAgNzdlLTMyICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjUwMSBhZGQgICA3N2UtMzMgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjUwMiBhZGQgICA3N2UtMzQgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY1MDMgYWRkICAgNzdlLTM1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjUwNCBhZGQgICA3N2UtMzYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTA1IGFkZCAgIDc3ZS0zNyAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjUwNiBhZGQgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNjUxMCBhZGQgICA3N2UtMzIgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkNjUxMSBhZGQgICA3N2UtMzMgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDY1MTIgYWRkICAgNzdlLTM0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjUxMyBhZGQgICA3N2UtMzUgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTE0IGFkZCAgIDc3ZS0zNiAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjUxNSBhZGQgICA3N2UtMzcgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1MTYgYWRkICAgNzdlLTk5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBhbmQgc29tZSBtb3JlIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncworcm91bmRpbmc6IGhhbGZfdXAKK2RxYWRkNjU0MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknCitkcWFkZDY1NDEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU0MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTQzIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NDQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU0NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTQ2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NDcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU0OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTQ5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NTAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU1MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTUyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NTMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU1NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTU1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NTYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJworZHFhZGQ2NTU3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NTggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU1OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkcWFkZDY1NjAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JworZHFhZGQ2NTYxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NjIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU2MyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTY0IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NjUgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU2NiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTY3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NjggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU2OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTcwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NzEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU3MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTczIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NzQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNjU3NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTc2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcKK2RxYWRkNjU3NyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ2NTc4IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDY1NzkgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2RxYWRkNzU0MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTQxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NDIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2RxYWRkNzU1MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknCitkcWFkZDc1NTEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU1MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTUzIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NTQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU1NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTU2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NTcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU1OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTU5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NjAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU2MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTYyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NjMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU2NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTY1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NjYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJworZHFhZGQ3NTY3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1NjggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzU2OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSBtb3JlIHplcm9zLCBldGMuCityb3VuZGluZzogaGFsZl9ldmVuCisKK2RxYWRkNzcwMSBhZGQgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDAKK2RxYWRkNzcwMiBhZGQgMDAuMDAgMC4wMDAgIC0+IDAuMDAwCitkcWFkZDc3MDMgYWRkIDAwLjAwIDBFLTMgICAtPiAwLjAwMAorZHFhZGQ3NzA0IGFkZCAwRS0zICAwMC4wMCAgLT4gMC4wMDAKKworZHFhZGQ3NzEwIGFkZCAwRSszICAwMC4wMCAgLT4gMC4wMAorZHFhZGQ3NzExIGFkZCAwRSszICAwMC4wICAgLT4gMC4wCitkcWFkZDc3MTIgYWRkIDBFKzMgIDAwLiAgICAtPiAwCitkcWFkZDc3MTMgYWRkIDBFKzMgIDAwLkUrMSAtPiAwRSsxCitkcWFkZDc3MTQgYWRkIDBFKzMgIDAwLkUrMiAtPiAwRSsyCitkcWFkZDc3MTUgYWRkIDBFKzMgIDAwLkUrMyAtPiAwRSszCitkcWFkZDc3MTYgYWRkIDBFKzMgIDAwLkUrNCAtPiAwRSszCitkcWFkZDc3MTcgYWRkIDBFKzMgIDAwLkUrNSAtPiAwRSszCitkcWFkZDc3MTggYWRkIDBFKzMgIC0wMC4wICAgLT4gMC4wCitkcWFkZDc3MTkgYWRkIDBFKzMgIC0wMC4gICAgLT4gMAorZHFhZGQ3NzMxIGFkZCAwRSszICAtMDAuRSsxIC0+IDBFKzEKKworZHFhZGQ3NzIwIGFkZCAwMC4wMCAgMEUrMyAgLT4gMC4wMAorZHFhZGQ3NzIxIGFkZCAwMC4wICAgMEUrMyAgLT4gMC4wCitkcWFkZDc3MjIgYWRkIDAwLiAgICAwRSszICAtPiAwCitkcWFkZDc3MjMgYWRkIDAwLkUrMSAwRSszICAtPiAwRSsxCitkcWFkZDc3MjQgYWRkIDAwLkUrMiAwRSszICAtPiAwRSsyCitkcWFkZDc3MjUgYWRkIDAwLkUrMyAwRSszICAtPiAwRSszCitkcWFkZDc3MjYgYWRkIDAwLkUrNCAwRSszICAtPiAwRSszCitkcWFkZDc3MjcgYWRkIDAwLkUrNSAwRSszICAtPiAwRSszCitkcWFkZDc3MjggYWRkIC0wMC4wMCAwRSszICAtPiAwLjAwCitkcWFkZDc3MjkgYWRkIC0wMC4wICAwRSszICAtPiAwLjAKK2RxYWRkNzczMCBhZGQgLTAwLiAgIDBFKzMgIC0+IDAKKworZHFhZGQ3NzMyIGFkZCAgMCAgICAgMCAgICAgLT4gIDAKK2RxYWRkNzczMyBhZGQgIDAgICAgLTAgICAgIC0+ICAwCitkcWFkZDc3MzQgYWRkIC0wICAgICAwICAgICAtPiAgMAorZHFhZGQ3NzM1IGFkZCAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgNzU0IHNwZWNpYWwgY2FzZQorCitkcWFkZDc3MzYgYWRkICAxICAgIC0xICAgICAtPiAgMAorZHFhZGQ3NzM3IGFkZCAtMSAgICAtMSAgICAgLT4gLTIKK2RxYWRkNzczOCBhZGQgIDEgICAgIDEgICAgIC0+ICAyCitkcWFkZDc3MzkgYWRkIC0xICAgICAxICAgICAtPiAgMAorCitkcWFkZDc3NDEgYWRkICAwICAgIC0xICAgICAtPiAtMQorZHFhZGQ3NzQyIGFkZCAtMCAgICAtMSAgICAgLT4gLTEKK2RxYWRkNzc0MyBhZGQgIDAgICAgIDEgICAgIC0+ICAxCitkcWFkZDc3NDQgYWRkIC0wICAgICAxICAgICAtPiAgMQorZHFhZGQ3NzQ1IGFkZCAtMSAgICAgMCAgICAgLT4gLTEKK2RxYWRkNzc0NiBhZGQgLTEgICAgLTAgICAgIC0+IC0xCitkcWFkZDc3NDcgYWRkICAxICAgICAwICAgICAtPiAgMQorZHFhZGQ3NzQ4IGFkZCAgMSAgICAtMCAgICAgLT4gIDEKKworZHFhZGQ3NzUxIGFkZCAgMC4wICAtMSAgICAgLT4gLTEuMAorZHFhZGQ3NzUyIGFkZCAtMC4wICAtMSAgICAgLT4gLTEuMAorZHFhZGQ3NzUzIGFkZCAgMC4wICAgMSAgICAgLT4gIDEuMAorZHFhZGQ3NzU0IGFkZCAtMC4wICAgMSAgICAgLT4gIDEuMAorZHFhZGQ3NzU1IGFkZCAtMS4wICAgMCAgICAgLT4gLTEuMAorZHFhZGQ3NzU2IGFkZCAtMS4wICAtMCAgICAgLT4gLTEuMAorZHFhZGQ3NzU3IGFkZCAgMS4wICAgMCAgICAgLT4gIDEuMAorZHFhZGQ3NzU4IGFkZCAgMS4wICAtMCAgICAgLT4gIDEuMAorCitkcWFkZDc3NjEgYWRkICAwICAgIC0xLjAgICAtPiAtMS4wCitkcWFkZDc3NjIgYWRkIC0wICAgIC0xLjAgICAtPiAtMS4wCitkcWFkZDc3NjMgYWRkICAwICAgICAxLjAgICAtPiAgMS4wCitkcWFkZDc3NjQgYWRkIC0wICAgICAxLjAgICAtPiAgMS4wCitkcWFkZDc3NjUgYWRkIC0xICAgICAwLjAgICAtPiAtMS4wCitkcWFkZDc3NjYgYWRkIC0xICAgIC0wLjAgICAtPiAtMS4wCitkcWFkZDc3NjcgYWRkICAxICAgICAwLjAgICAtPiAgMS4wCitkcWFkZDc3NjggYWRkICAxICAgIC0wLjAgICAtPiAgMS4wCisKK2RxYWRkNzc3MSBhZGQgIDAuMCAgLTEuMCAgIC0+IC0xLjAKK2RxYWRkNzc3MiBhZGQgLTAuMCAgLTEuMCAgIC0+IC0xLjAKK2RxYWRkNzc3MyBhZGQgIDAuMCAgIDEuMCAgIC0+ICAxLjAKK2RxYWRkNzc3NCBhZGQgLTAuMCAgIDEuMCAgIC0+ICAxLjAKK2RxYWRkNzc3NSBhZGQgLTEuMCAgIDAuMCAgIC0+IC0xLjAKK2RxYWRkNzc3NiBhZGQgLTEuMCAgLTAuMCAgIC0+IC0xLjAKK2RxYWRkNzc3NyBhZGQgIDEuMCAgIDAuMCAgIC0+ICAxLjAKK2RxYWRkNzc3OCBhZGQgIDEuMCAgLTAuMCAgIC0+ICAxLjAKKworLS0gU3BlY2lhbHMKK2RxYWRkNzc4MCBhZGQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQ3NzgxIGFkZCAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkcWFkZDc3ODIgYWRkIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc4MyBhZGQgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFhZGQ3Nzg0IGFkZCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkcWFkZDc3ODUgYWRkIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc4NiBhZGQgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorZHFhZGQ3Nzg3IGFkZCAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDc3ODggYWRkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc4OSBhZGQgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQ3NzkwIGFkZCAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDc3OTEgYWRkICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkNzc5MiBhZGQgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQ3NzkzIGFkZCAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDc3OTQgYWRkICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitkcWFkZDc4MDAgYWRkICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODAxIGFkZCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkcWFkZDc4MDIgYWRkICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgwMyBhZGQgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODA0IGFkZCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkcWFkZDc4MDUgYWRkICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgwNiBhZGQgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODA3IGFkZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDc4MDggYWRkIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgwOSBhZGQgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4MTAgYWRkIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgxMSBhZGQgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODEyIGFkZCAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDc4MTMgYWRkICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkNzgxNCBhZGQgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQ3ODE1IGFkZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxYWRkNzgyMSBhZGQgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RxYWRkNzgyMiBhZGQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RxYWRkNzgyMyBhZGQgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RxYWRkNzgyNCBhZGQgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RxYWRkNzgyNSBhZGQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RxYWRkNzgyNiBhZGQgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RxYWRkNzgyNyBhZGQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RxYWRkNzgyOCBhZGQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RxYWRkNzgyOSBhZGQgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzMCBhZGQgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzMSBhZGQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzMiBhZGQgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzMyBhZGQgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzNCBhZGQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzNSBhZGQgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzNiBhZGQgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RxYWRkNzgzNyBhZGQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZHFhZGQ3ODQxIGFkZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg0MiBhZGQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NDMgYWRkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODQ0IGFkZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg0NSBhZGQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NDYgYWRkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODQ3IGFkZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg0OCBhZGQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NDkgYWRkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODUwIGFkZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg1MSBhZGQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NTIgYWRkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODUzIGFkZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg1NCBhZGQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NTUgYWRkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODU2IGFkZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg1NyBhZGQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDc4NTggYWRkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODU5IGFkZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFhZGQ3ODYxIGFkZCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2RxYWRkNzg2MiBhZGQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitkcWFkZDc4NjMgYWRkICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworZHFhZGQ3ODY0IGFkZCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2RxYWRkNzg2NSBhZGQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitkcWFkZDc4NjYgYWRkIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworZHFhZGQ3ODY3IGFkZCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2RxYWRkNzg2OCBhZGQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitkcWFkZDc4NjkgYWRkICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK2RxYWRkNzg3MSBhZGQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3MiBhZGQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3MyBhZGQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3NCBhZGQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3NSBhZGQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3NiBhZGQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3NyBhZGQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3OCBhZGQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg3OSBhZGQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg4MCBhZGQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg4MSBhZGQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkNzg4MiBhZGQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorZHFhZGQ3ODgzIGFkZCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQ3ODg0IGFkZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitkcWFkZDc4ODUgYWRkICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEhlcmUgd2UgZXhwbG9yZSBuZWFyIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluCitkcWFkZDc1NzUgYWRkICAxRS02MTQzIC0xRS02MTc2IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0IFN1Ym5vcm1hbAorZHFhZGQ3NTc2IGFkZCAtMUUtNjE0MyArMUUtNjE3NiAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCBTdWJub3JtYWwKKworLS0gY2hlY2sgb3ZlcmZsb3cgZWRnZSBjYXNlCistLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RxYWRkNzk3MiBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxYWRkNzk3MyBhZGQgICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5NzQgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTc1IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDFFKzYxMTEgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTc2IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDlFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTc3IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDhFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTc4IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDdFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTc5IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDZFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTgwIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDVFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTgxIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDRFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTgyIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDNFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTgzIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDJFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTg0IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDFFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorCitkcWFkZDc5ODUgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFhZGQ3OTg2IGFkZCAgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5ODcgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk4OCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0xRSs2MTExICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5ODkgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtOUUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTkwIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLThFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk5MSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC03RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5OTIgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtNkUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTkzIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTVFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk5NCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC00RSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc5OTUgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtM0UrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3OTk2IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTJFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzk5NyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0xRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCisKKy0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cworcm91bmRpbmc6ICAgICBkb3duCitkcWFkZDcxMTAwIGFkZCAxZSsyIC0xZS02MTQzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTEwMSBhZGQgMWUrMSAtMWUtNjE0MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTAzIGFkZCAgICsxIC0xZS02MTQzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTA0IGFkZCAxZS0xIC0xZS02MTQzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTEwNSBhZGQgMWUtMiAtMWUtNjE0MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTA2IGFkZCAxZS0zIC0xZS02MTQzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTA3IGFkZCAxZS00IC0xZS02MTQzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQ3MTEwOCBhZGQgMWUtNSAtMWUtNjE0MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTA5IGFkZCAxZS02IC0xZS02MTQzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgICBjZWlsaW5nCitkcWFkZDcxMTEwIGFkZCAtMWUrMiArMWUtNjE0MyAgIC0+IC05OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMTEgYWRkIC0xZSsxICsxZS02MTQzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMTMgYWRkICAgIC0xICsxZS02MTQzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTE0IGFkZCAtMWUtMSArMWUtNjE0MyAgIC0+IC0wLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMTUgYWRkIC0xZS0yICsxZS02MTQzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMTYgYWRkIC0xZS0zICsxZS02MTQzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDcxMTE3IGFkZCAtMWUtNCArMWUtNjE0MyAgIC0+IC0wLjAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMTggYWRkIC0xZS01ICsxZS02MTQzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2RxYWRkNzExMTkgYWRkIC0xZS02ICsxZS02MTQzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UKK3JvdW5kaW5nOiAgICAgaGFsZl9ldmVuCisKK2RxYWRkNzEzMDAgYWRkIDFFMzQgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzEwIGFkZCAxRTM0ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMxMSBhZGQgMUUzNCAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMTIgYWRkIDFFMzQgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzEzIGFkZCAxRTM0ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMxNCBhZGQgMUUzNCAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMTUgYWRkIDFFMzQgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzE2IGFkZCAxRTM0ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMxNyBhZGQgMUUzNCAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMTggYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzE5IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMyMCBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMjEgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzIyIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMyMyBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMjQgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzI1IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMyNiBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMjcgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzI4IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMyOSBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMzAgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzMxIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMzMiBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMzMgYWRkIDFFMzQgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzM0IGFkZCAxRTM0ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMzNSBhZGQgMUUzNCAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMzYgYWRkIDFFMzQgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzM3IGFkZCAxRTM0ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTMzOCBhZGQgMUUzNCAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzMzkgYWRkIDFFMzQgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkNzEzNDAgYWRkIDFFMzQgIC01MDAwMDAwLjAwMDAxMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzQxIGFkZCAxRTM0ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDcxMzQ5IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNCAgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNTAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM1MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzUyIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNTMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM1NCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzU1IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNTYgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM1NyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzU4IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNTkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM2MCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzYxIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNjIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM2MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzY0IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNjUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM2NyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzY4IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNjkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM3MCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzcxIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNzIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM3MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzc0IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNzUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM3NiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzc3IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzNzggYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM3OSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzgwIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzODEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM4MiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzgzIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzODQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM4NSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzg2IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzODcgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM4OCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzg5IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAxICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzOTAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM5MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzkyIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAxICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzOTMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3MTM5NCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDcxMzk1IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAxICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzEzOTYgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorCistLSBNb3JlIEdEIGVkZ2UgY2FzZXMsIHdoZXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdW5hZGp1c3RlZAorLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMAorZHFhZGQ3MTQyMCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDIxIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDIyIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQyMyBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDI0IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDI1IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQ3MTQyNiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDI3IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcKK2RxYWRkNzE0MjggYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOAorZHFhZGQ3MTQyOSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05CitkcWFkZDcxNDMwIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwCitkcWFkZDcxNDMxIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExCitkcWFkZDcxNDMyIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyCitkcWFkZDcxNDMzIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzCitkcWFkZDcxNDM0IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0CitkcWFkZDcxNDM1IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1CitkcWFkZDcxNDM2IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2CitkcWFkZDcxNDM3IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3CitkcWFkZDcxNDM4IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4CitkcWFkZDcxNDM5IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5CitkcWFkZDcxNDQwIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwCitkcWFkZDcxNDQxIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxCitkcWFkZDcxNDQyIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyCitkcWFkZDcxNDQzIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzCitkcWFkZDcxNDQ0IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0CitkcWFkZDcxNDQ1IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1CitkcWFkZDcxNDQ2IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2CitkcWFkZDcxNDQ3IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3CitkcWFkZDcxNDQ4IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjggLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4CitkcWFkZDcxNDQ5IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5CitkcWFkZDcxNDUwIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwCitkcWFkZDcxNDUxIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxCitkcWFkZDcxNDUyIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyCitkcWFkZDcxNDUzIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzCitkcWFkZDcxNDU0IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0CitkcWFkZDcxNDU1IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1CitkcWFkZDcxNDU2IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2CisKKy0tIHNhbWUsIHJldmVyc2VkIDAKK2RxYWRkNzE0NjAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAgICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDYxIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0NjIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0NjMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zICAwIC0+IDAuMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDY0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0NjUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkNzE0NjYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS02ICAwIC0+IDAuMDAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNDY3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNworZHFhZGQ3MTQ2OCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTgKK2RxYWRkNzE0NjkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05ICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05CitkcWFkZDcxNDcwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAKK2RxYWRkNzE0NzEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZHFhZGQ3MTQ3MiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyCitkcWFkZDcxNDczIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMKK2RxYWRkNzE0NzQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZHFhZGQ3MTQ3NSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1CitkcWFkZDcxNDc2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYKK2RxYWRkNzE0NzcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNworZHFhZGQ3MTQ3OCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4CitkcWFkZDcxNDc5IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkKK2RxYWRkNzE0ODAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMAorZHFhZGQ3MTQ4MSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxCitkcWFkZDcxNDgyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIKK2RxYWRkNzE0ODMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMworZHFhZGQ3MTQ4NCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0CitkcWFkZDcxNDg1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUKK2RxYWRkNzE0ODYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNgorZHFhZGQ3MTQ4NyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3CitkcWFkZDcxNDg4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjggMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjgKK2RxYWRkNzE0ODkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOQorZHFhZGQ3MTQ5MCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwCitkcWFkZDcxNDkxIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEKK2RxYWRkNzE0OTIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMgorZHFhZGQ3MTQ5MyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzCitkcWFkZDcxNDk0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQKK2RxYWRkNzE0OTUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNQorZHFhZGQ3MTQ5NiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2CisKKy0tIHNhbWUsIEVzIG9uIHRoZSAwCitkcWFkZDcxNTAwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTAxIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTAyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTAzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMyAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTA0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTA1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTA2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNiAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTA3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTA4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTA5IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtOSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTEwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTExIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTEyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTEzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTE0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTE1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTE2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTE3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTE4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTE5IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTIwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTIxIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTIyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTIzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTI0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTI1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTI2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTI3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTI4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTI5IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTMwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTMxIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTMyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDcxNTMzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CistLSBuZXh0IGZvdXIgZmxhZyBSb3VuZGVkIGJlY2F1c2UgdGhlIDAgZXh0ZW5kcyB0aGUgcmVzdWx0CitkcWFkZDcxNTM0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RxYWRkNzE1MzUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZHFhZGQ3MTUzNiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM2ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkcWFkZDcxNTM3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKKworLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTAKK3JvdW5kaW5nOiAgICBoYWxmX3VwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkcWFkZDcxNjAwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTYwMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2MDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjAzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkNzE2MTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDcxNjEyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgaGFsZl9kb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkcWFkZDcxNjIwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTYyMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2MjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjIzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkNzE2MzEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDcxNjMyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgaGFsZl9ldmVuCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkcWFkZDcxNjQwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTY0MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2NDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjQzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkNzE2NTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDcxNjUyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkNzE2NjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjYxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTY2MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2NjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZHFhZGQ3MTY3MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkNzE2NzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCisKK3JvdW5kaW5nOiAgICBkb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkcWFkZDcxNjgwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTY4MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE2ODIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNjgzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkNzE2OTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDcxNjkyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAorCityb3VuZGluZzogICAgY2VpbGluZworLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQ3MTcwMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkNzE3MDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNzAyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQ3MTcwMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDcxNzExIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAorZHFhZGQ3MTcxMiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKKworLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqCityb3VuZGluZzogICAgZmxvb3IKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkNzE3MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDcxNzIxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgorZHFhZGQ3MTcyMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2RxYWRkNzE3MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZHFhZGQ3MTczMSBhZGQgLTExICAgICAgMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoKK2RxYWRkNzE3MzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorZHFhZGQ3MTc0MSBhZGQgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwCitkcWFkZDcxNzQyIGFkZCAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTAKK2RxYWRkNzE3NDMgYWRkIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMAorZHFhZGQ3MTc0NCBhZGQgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0CitkcWFkZDcxNzQ1IGFkZCAxMzBFLTIgICAtMTIwRS0yIC0+IDAuMTAKK2RxYWRkNzE3NDYgYWRkIDEzMEUtMiAgIC0xMkUtMSAgLT4gMC4xMAorZHFhZGQ3MTc0NyBhZGQgMTMwRS0yICAgLTFFMCAgICAtPiAwLjMwCitkcWFkZDcxNzQ4IGFkZCAxRTIgICAgICAtMUU0ICAgIC0+IC05LjlFKzMKKworLS0gR2FwcHkgY29lZmZpY2llbnRzOyBjaGVjayByZXNpZHVlIGhhbmRsaW5nIGV2ZW4gd2l0aCBmdWxsIGNvZWZmaWNpZW50IGdhcAorcm91bmRpbmc6IGhhbGZfZXZlbgorCitkcWFkZDc1MDAxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU3CitkcWFkZDc1MDAyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDAuNiAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMDMgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgMC4wNiAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAwNCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDA1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTQgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMDYgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNSAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAwNyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDA4IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTcgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMDkgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtOCAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAxMCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDExIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEwICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMTIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTEgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAxMyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDE0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEzICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMTUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTQgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAxNiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDE3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE2ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMTggYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTcgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTAxOSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDIwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE5ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwMjEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMjAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorCistLSB3aWRlbmluZyBzZWNvbmQgYXJndW1lbnQgYXQgZ2FwCitkcWFkZDc1MDMwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OQorZHFhZGQ3NTAzMSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMQorZHFhZGQ3NTAzMiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMiAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIKK2RxYWRkNzUwMzMgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMworZHFhZGQ3NTAzNCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNAorZHFhZGQ3NTAzNSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NSAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDUKK2RxYWRkNzUwMzYgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1NgorZHFhZGQ3NTAzNyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NworZHFhZGQ3NTAzOCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3OCAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzgKK2RxYWRkNzUwMzkgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA0MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDQxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNDIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA0MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDQ0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMSAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNDUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA0NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDQ3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMSAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNDggYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA0OSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDEyMzQ1Ngorcm91bmRpbmc6IGhhbGZfZXZlbgorZHFhZGQ3NTA1MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMjM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDUxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNTIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA1MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwNTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDU0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNTUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA1NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwNzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDU3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNjAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA2MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDYyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNjMgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA2NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDY1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNjYgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA2NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwMDUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCistLSBmYXItb3V0IHJlc2lkdWVzIChmdWxsIGNvZWZmaWNpZW50IGdhcCBpcyAxNisxNSBkaWdpdHMpCityb3VuZGluZzogdXAKK2RxYWRkNzUwNzAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxCitkcWFkZDc1MDcxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS05ICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNzIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTEwICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA3MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDc0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMiAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNzUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTEzICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA3NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDc3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwNzggYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE2ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA3OSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDgwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xOCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwODEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE5ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA4MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDgzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0yNSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwODQgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMwICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA4NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDg2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMiAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkNzUwODcgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMzICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQ3NTA4OCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDc1MDg5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zNSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKKworLS0gTnVsbCB0ZXN0cworZHFhZGQ5OTkwIGFkZCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkOTk5MSBhZGQgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQW5kLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQW5kLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwOWJjMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBbmQuZGVjVGVzdApAQCAtMCwwICsxLDQyMCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUFuZC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIEFORCBmb3IgZGVjUXVhZHMgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCitkcWFuZDAwMSBhbmQgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK2RxYW5kMDAyIGFuZCAgICAgICAgICAgICAwICAgIDEgLT4gICAgMAorZHFhbmQwMDMgYW5kICAgICAgICAgICAgIDEgICAgMCAtPiAgICAwCitkcWFuZDAwNCBhbmQgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDEKK2RxYW5kMDA1IGFuZCAgICAgICAgICAxMTAwIDEwMTAgLT4gMTAwMAorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKKy0tICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcWFuZDAwNiBhbmQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZHFhbmQwMDcgYW5kIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RxYW5kMDA4IGFuZCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkcWFuZDAwOSBhbmQgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFhbmQwMTAgYW5kIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKK2RxYW5kMDExIGFuZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCitkcWFuZDAxMiBhbmQgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAorZHFhbmQwMTMgYW5kIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworLS0gVmFyaW91cyBsZW5ndGhzCistLSAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorCitkcWFuZDYwMSBhbmQgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwMiBhbmQgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwMyBhbmQgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwNCBhbmQgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwNSBhbmQgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwNiBhbmQgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwNyBhbmQgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwOCBhbmQgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYwOSBhbmQgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYxMCBhbmQgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYxMSBhbmQgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYxMiBhbmQgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYxMyBhbmQgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExCitkcWFuZDYxNCBhbmQgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExCitkcWFuZDYxNSBhbmQgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExCitkcWFuZDYxNiBhbmQgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExCitkcWFuZDYxNyBhbmQgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExCitkcWFuZDYxOCBhbmQgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExCitkcWFuZDYxOSBhbmQgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExCitkcWFuZDYyMCBhbmQgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExCitkcWFuZDYyMSBhbmQgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExCitkcWFuZDYyMiBhbmQgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExCitkcWFuZDYyMyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExCitkcWFuZDYyNCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExCitkcWFuZDYyNSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExCitkcWFuZDYyNiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExCitkcWFuZDYyNyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExCitkcWFuZDYyOCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExCitkcWFuZDYyOSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExCitkcWFuZDYzMCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExCitkcWFuZDYzMSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExCitkcWFuZDYzMiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExCitkcWFuZDYzMyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxCitkcWFuZDYzNCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCisKK2RxYW5kNjQxIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQyIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQzIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQ0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQ1IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQ2IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQ3IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQ4IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjQ5IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjUwIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjUxIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjUyIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjUzIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjU0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjU1IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEKK2RxYW5kNjU2IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEKK2RxYW5kNjU3IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEKK2RxYW5kNjU4IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEKK2RxYW5kNjU5IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEKK2RxYW5kNjYwIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEKK2RxYW5kNjYxIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEKK2RxYW5kNjYyIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEKK2RxYW5kNjYzIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEKK2RxYW5kNjY0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEKK2RxYW5kNjY1IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEKK2RxYW5kNjY2IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEKK2RxYW5kNjY3IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEKK2RxYW5kNjY4IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEKK2RxYW5kNjY5IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEKK2RxYW5kNjcwIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEKK2RxYW5kNjcxIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEKK2RxYW5kNjcyIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEKK2RxYW5kNjczIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEKK2RxYW5kNjc0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAKK2RxYW5kNjc1IGFuZCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+ICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAKK2RxYW5kNjc2IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAKKworZHFhbmQwMjEgYW5kIDExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMTExMTExMTEKK2RxYW5kMDI0IGFuZCAxMTExMTExMTExMTExMTExICAxMTExMTExMTExMTExMTEgIC0+ICAgMTExMTExMTExMTExMTExCitkcWFuZDAyNSBhbmQgMTExMTExMTExMTExMTExMSAgIDExMTExMTExMTExMTExICAtPiAgICAxMTExMTExMTExMTExMQorZHFhbmQwMjYgYW5kIDExMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMSAgLT4gICAgIDExMTExMTExMTExMTEKK2RxYW5kMDI3IGFuZCAxMTExMTExMTExMTExMTExICAgICAxMTExMTExMTExMTEgIC0+ICAgICAgMTExMTExMTExMTExCitkcWFuZDAyOCBhbmQgMTExMTExMTExMTExMTExMSAgICAgIDExMTExMTExMTExICAtPiAgICAgICAxMTExMTExMTExMQorZHFhbmQwMjkgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgMTExMTExMTExMSAgLT4gICAgICAgIDExMTExMTExMTEKK2RxYW5kMDMwIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgMTExMTExMTExCitkcWFuZDAzMSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgIDExMTExMTExICAtPiAgICAgICAgICAxMTExMTExMQorZHFhbmQwMzIgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgMTExMTExMSAgLT4gICAgICAgICAgIDExMTExMTEKK2RxYW5kMDMzIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAxMTExMTEgIC0+ICAgICAgICAgICAgMTExMTExCitkcWFuZDAzNCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgIDExMTExICAtPiAgICAgICAgICAgICAxMTExMQorZHFhbmQwMzUgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgMTExMSAgLT4gICAgICAgICAgICAgIDExMTEKK2RxYW5kMDM2IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAxMTEgIC0+ICAgICAgICAgICAgICAgMTExCitkcWFuZDAzNyBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgIDExICAtPiAgICAgICAgICAgICAgICAxMQorZHFhbmQwMzggYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAgMSAgLT4gICAgICAgICAgICAgICAgIDEKK2RxYW5kMDM5IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgIDAgIC0+ICAgICAgICAgICAgICAgICAwCisKK2RxYW5kMDQwIGFuZCAxMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gIDExMTExMTExMTExMTExMTEKK2RxYW5kMDQxIGFuZCAgMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTEKK2RxYW5kMDQyIGFuZCAgMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTEKK2RxYW5kMDQzIGFuZCAgIDExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgMTExMTExMTExMTExMTEKK2RxYW5kMDQ0IGFuZCAgICAxMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgIDExMTExMTExMTExMTEKK2RxYW5kMDQ1IGFuZCAgICAgMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAxMTExMTExMTExMTEKK2RxYW5kMDQ2IGFuZCAgICAgIDExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgMTExMTExMTExMTEKK2RxYW5kMDQ3IGFuZCAgICAgICAxMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgIDExMTExMTExMTEKK2RxYW5kMDQ4IGFuZCAgICAgICAgMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAxMTExMTExMTEKK2RxYW5kMDQ5IGFuZCAgICAgICAgIDExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgMTExMTExMTEKK2RxYW5kMDUwIGFuZCAgICAgICAgICAxMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgIDExMTExMTEKK2RxYW5kMDUxIGFuZCAgICAgICAgICAgMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAxMTExMTEKK2RxYW5kMDUyIGFuZCAgICAgICAgICAgIDExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgMTExMTEKK2RxYW5kMDUzIGFuZCAgICAgICAgICAgICAxMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgIDExMTEKK2RxYW5kMDU0IGFuZCAgICAgICAgICAgICAgMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAxMTEKK2RxYW5kMDU1IGFuZCAgICAgICAgICAgICAgIDExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgMTEKK2RxYW5kMDU2IGFuZCAgICAgICAgICAgICAgICAxICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgIDEKK2RxYW5kMDU3IGFuZCAgICAgICAgICAgICAgICAwICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgIDAKKworZHFhbmQxNTAgYW5kIDExMTExMTExMTEgIDEgIC0+ICAxCitkcWFuZDE1MSBhbmQgIDExMTExMTExMSAgMSAgLT4gIDEKK2RxYW5kMTUyIGFuZCAgIDExMTExMTExICAxICAtPiAgMQorZHFhbmQxNTMgYW5kICAgIDExMTExMTEgIDEgIC0+ICAxCitkcWFuZDE1NCBhbmQgICAgIDExMTExMSAgMSAgLT4gIDEKK2RxYW5kMTU1IGFuZCAgICAgIDExMTExICAxICAtPiAgMQorZHFhbmQxNTYgYW5kICAgICAgIDExMTEgIDEgIC0+ICAxCitkcWFuZDE1NyBhbmQgICAgICAgIDExMSAgMSAgLT4gIDEKK2RxYW5kMTU4IGFuZCAgICAgICAgIDExICAxICAtPiAgMQorZHFhbmQxNTkgYW5kICAgICAgICAgIDEgIDEgIC0+ICAxCisKK2RxYW5kMTYwIGFuZCAxMTExMTExMTExICAwICAtPiAgMAorZHFhbmQxNjEgYW5kICAxMTExMTExMTEgIDAgIC0+ICAwCitkcWFuZDE2MiBhbmQgICAxMTExMTExMSAgMCAgLT4gIDAKK2RxYW5kMTYzIGFuZCAgICAxMTExMTExICAwICAtPiAgMAorZHFhbmQxNjQgYW5kICAgICAxMTExMTEgIDAgIC0+ICAwCitkcWFuZDE2NSBhbmQgICAgICAxMTExMSAgMCAgLT4gIDAKK2RxYW5kMTY2IGFuZCAgICAgICAxMTExICAwICAtPiAgMAorZHFhbmQxNjcgYW5kICAgICAgICAxMTEgIDAgIC0+ICAwCitkcWFuZDE2OCBhbmQgICAgICAgICAxMSAgMCAgLT4gIDAKK2RxYW5kMTY5IGFuZCAgICAgICAgICAxICAwICAtPiAgMAorCitkcWFuZDE3MCBhbmQgMSAgMTExMTExMTExMSAgLT4gIDEKK2RxYW5kMTcxIGFuZCAxICAgMTExMTExMTExICAtPiAgMQorZHFhbmQxNzIgYW5kIDEgICAgMTExMTExMTEgIC0+ICAxCitkcWFuZDE3MyBhbmQgMSAgICAgMTExMTExMSAgLT4gIDEKK2RxYW5kMTc0IGFuZCAxICAgICAgMTExMTExICAtPiAgMQorZHFhbmQxNzUgYW5kIDEgICAgICAgMTExMTEgIC0+ICAxCitkcWFuZDE3NiBhbmQgMSAgICAgICAgMTExMSAgLT4gIDEKK2RxYW5kMTc3IGFuZCAxICAgICAgICAgMTExICAtPiAgMQorZHFhbmQxNzggYW5kIDEgICAgICAgICAgMTEgIC0+ICAxCitkcWFuZDE3OSBhbmQgMSAgICAgICAgICAgMSAgLT4gIDEKKworZHFhbmQxODAgYW5kIDAgIDExMTExMTExMTEgIC0+ICAwCitkcWFuZDE4MSBhbmQgMCAgIDExMTExMTExMSAgLT4gIDAKK2RxYW5kMTgyIGFuZCAwICAgIDExMTExMTExICAtPiAgMAorZHFhbmQxODMgYW5kIDAgICAgIDExMTExMTEgIC0+ICAwCitkcWFuZDE4NCBhbmQgMCAgICAgIDExMTExMSAgLT4gIDAKK2RxYW5kMTg1IGFuZCAwICAgICAgIDExMTExICAtPiAgMAorZHFhbmQxODYgYW5kIDAgICAgICAgIDExMTEgIC0+ICAwCitkcWFuZDE4NyBhbmQgMCAgICAgICAgIDExMSAgLT4gIDAKK2RxYW5kMTg4IGFuZCAwICAgICAgICAgIDExICAtPiAgMAorZHFhbmQxODkgYW5kIDAgICAgICAgICAgIDEgIC0+ICAwCisKK2RxYW5kMDkwIGFuZCAwMTExMTExMTEgIDExMTExMTExMSAgLT4gICAxMTExMTExMQorZHFhbmQwOTEgYW5kIDEwMTExMTExMSAgMTExMTExMTExICAtPiAgMTAxMTExMTExCitkcWFuZDA5MiBhbmQgMTEwMTExMTExICAxMTExMTExMTEgIC0+ICAxMTAxMTExMTEKK2RxYW5kMDkzIGFuZCAxMTEwMTExMTEgIDExMTExMTExMSAgLT4gIDExMTAxMTExMQorZHFhbmQwOTQgYW5kIDExMTEwMTExMSAgMTExMTExMTExICAtPiAgMTExMTAxMTExCitkcWFuZDA5NSBhbmQgMTExMTEwMTExICAxMTExMTExMTEgIC0+ICAxMTExMTAxMTEKK2RxYW5kMDk2IGFuZCAxMTExMTEwMTEgIDExMTExMTExMSAgLT4gIDExMTExMTAxMQorZHFhbmQwOTcgYW5kIDExMTExMTEwMSAgMTExMTExMTExICAtPiAgMTExMTExMTAxCitkcWFuZDA5OCBhbmQgMTExMTExMTEwICAxMTExMTExMTEgIC0+ICAxMTExMTExMTAKKworZHFhbmQxMDAgYW5kIDExMTExMTExMSAgMDExMTExMTExICAtPiAgIDExMTExMTExCitkcWFuZDEwMSBhbmQgMTExMTExMTExICAxMDExMTExMTEgIC0+ICAxMDExMTExMTEKK2RxYW5kMTAyIGFuZCAxMTExMTExMTEgIDExMDExMTExMSAgLT4gIDExMDExMTExMQorZHFhbmQxMDMgYW5kIDExMTExMTExMSAgMTExMDExMTExICAtPiAgMTExMDExMTExCitkcWFuZDEwNCBhbmQgMTExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKK2RxYW5kMTA1IGFuZCAxMTExMTExMTEgIDExMTExMDExMSAgLT4gIDExMTExMDExMQorZHFhbmQxMDYgYW5kIDExMTExMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMDExCitkcWFuZDEwNyBhbmQgMTExMTExMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMDEKK2RxYW5kMTA4IGFuZCAxMTExMTExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMAorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK2RxYW5kMjIwIGFuZCAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMjEgYW5kIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIyMiBhbmQgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjIzIGFuZCA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMjQgYW5kIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIyNSBhbmQgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjI2IGFuZCA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMjcgYW5kIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIyOCBhbmQgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjI5IGFuZCA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyMzAgYW5kIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDIzMSBhbmQgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjMyIGFuZCA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworZHFhbmQyNDAgYW5kICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI0MSBhbmQgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjQyIGFuZCAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyNDMgYW5kIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI0NCBhbmQgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitkcWFuZDI1MCBhbmQgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1MSBhbmQgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1MiBhbmQgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1MyBhbmQgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1NCBhbmQgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1NSBhbmQgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1NiBhbmQgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1NyBhbmQgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1OCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI1OSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI2MCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI2MSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI2MiBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI2MyBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI2NCBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI2NSBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCitkcWFuZDI3MCBhbmQgIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI3MSBhbmQgIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI3MiBhbmQgIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI3MyBhbmQgIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI3NCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAxMDAwMDAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI3NSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI3NiBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDEwMDAgMDgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI3NyBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAxMDAgMDkwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAorZHFhbmQyODAgYW5kICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyODEgYW5kICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyODIgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDA4IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyODMgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDA5IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyODQgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyODUgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyODYgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDAxMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyODcgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK2RxYW5kMjg4IGFuZCAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjg5IGFuZCAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjkwIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDA4MDAwMDAxMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjkxIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDA5MDAwMDEwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjkyIGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjkzIGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjk0IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDgwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjk1IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ25zCitkcWFuZDI5NiBhbmQgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQyOTcgYW5kIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMjk4IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDI5OSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTEwMDAxMDAgLT4gIDExMDAwMDExMDAwMDExMDAwMDAwMTAwMDAwMAorCistLSBObWF4LCBObWluLCBOdGlueS1saWtlCitkcWFuZDMzMSBhbmQgIDIgICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzMzIgYW5kICAzICAgMUUtOTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzMzIGFuZCAgNCAgIDEuMDAwMDAwMDBFLTk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDMzNCBhbmQgIDUgICAxRS05MDAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzMzUgYW5kICA2ICAgLTFFLTkwMCAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzM2IGFuZCAgNyAgIC0xLjAwMDAwMDAwRS05OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDMzNyBhbmQgIDggICAtMUUtOTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzMzggYW5kICA5ICAgLTkuOTk5OTk5OTlFKzk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzQxIGFuZCAgOS45OTk5OTk5OUUrOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM0MiBhbmQgIDFFLTk5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNDMgYW5kICAxLjAwMDAwMDAwRS05OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzQ0IGFuZCAgMUUtOTAwICAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM0NSBhbmQgIC0xRS05MDAgICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNDYgYW5kICAtMS4wMDAwMDAwMEUtOTk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzQ3IGFuZCAgLTFFLTk5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM0OCBhbmQgIC05Ljk5OTk5OTk5RSs5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKK2RxYW5kMzYxIGFuZCAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM2MiBhbmQgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNjMgYW5kICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzY0IGFuZCAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM2NSBhbmQgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNjYgYW5kICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzcxIGFuZCAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM3MiBhbmQgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNzMgYW5kICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kMzc0IGFuZCAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDM3NSBhbmQgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQzNzYgYW5kICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgorZHFhbmQ3ODAgYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzgxIGFuZCAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc4MiBhbmQgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3ODMgYW5kIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzg0IGFuZCAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc4NSBhbmQgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3ODYgYW5kIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzg3IGFuZCAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc4OCBhbmQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3ODkgYW5kIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzkwIGFuZCAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc5MSBhbmQgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ3OTIgYW5kICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kNzkzIGFuZCAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDc5NCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcWFuZDgwMCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MDEgYW5kICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODAyIGFuZCAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgwMyBhbmQgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MDQgYW5kICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODA1IGFuZCAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgwNiBhbmQgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MDcgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODA4IGFuZCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgwOSBhbmQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MTAgYW5kIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODExIGFuZCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgxMiBhbmQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MTMgYW5kICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODE0IGFuZCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgxNSBhbmQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcWFuZDgyMSBhbmQgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MjIgYW5kICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODIzIGFuZCAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgyNCBhbmQgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MjUgYW5kICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODI2IGFuZCAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgyNyBhbmQgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MjggYW5kICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODI5IGFuZCAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgzMCBhbmQgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MzEgYW5kIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODMyIGFuZCAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgzMyBhbmQgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MzQgYW5kICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODM1IGFuZCAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDgzNiBhbmQgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4MzcgYW5kICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFhbmQ4NDEgYW5kICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDIgYW5kICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDMgYW5kICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDQgYW5kICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDUgYW5kICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDYgYW5kICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDcgYW5kICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDggYW5kICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NDkgYW5kICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTAgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTEgYW5kIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTIgYW5kIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTMgYW5kIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTQgYW5kIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTUgYW5kICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTYgYW5kICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTcgYW5kICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTggYW5kICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NTkgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcWFuZDg2MSBhbmQgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NjIgYW5kICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODYzIGFuZCAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg2NCBhbmQgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NjUgYW5kICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODY2IGFuZCAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg2NyBhbmQgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NjggYW5kICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODY5IGFuZCAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg3MSBhbmQgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NzIgYW5kICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODczIGFuZCAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg3NCBhbmQgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NzUgYW5kICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODc2IGFuZCAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg3NyBhbmQgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4NzggYW5kIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODc5IGFuZCAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg4MCBhbmQgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4ODEgYW5kICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODgyIGFuZCAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWFuZDg4MyBhbmQgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFhbmQ4ODQgYW5kICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYW5kODg1IGFuZCAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQmFzZS5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUJhc2UuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDljNmJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUJhc2UuZGVjVGVzdApAQCAtMCwwICsxLDEwODEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFCYXNlLmRlY1Rlc3QgLS0gYmFzZSBkZWNRdWFkIDwtLT4gc3RyaW5nIGNvbnZlcnNpb25zICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIGZpbGUgdGVzdHMgYmFzZSBjb252ZXJzaW9ucyBmcm9tIHN0cmluZyB0byBhIGRlY2ltYWwgbnVtYmVyCistLSBhbmQgYmFjayB0byBhIHN0cmluZyAoaW4gU2NpZW50aWZpYyBmb3JtKQorCistLSBOb3RlIHRoYXQgdW5saWtlIG90aGVyIG9wZXJhdGlvbnMgdGhlIG9wZXJhbmQgaXMgc3ViamVjdCB0byByb3VuZGluZworLS0gdG8gY29uZm9ybSB0byBlbWF4IGFuZCBwcmVjaXNpb24gc2V0dGluZ3MgKHRoYXQgaXMsIG51bWJlcnMgd2lsbAorLS0gY29uZm9ybSB0byBydWxlcyBhbmQgZXhwb25lbnQgd2lsbCBiZSBpbiBwZXJtaXR0ZWQgcmFuZ2UpLiAgVGhlCistLSAnbGVmdCBoYW5kIHNpZGUnLCB0aGVyZWZvcmUsIG1heSBoYXZlIG51bWJlcnMgdGhhdCBjYW5ub3QgYmUKKy0tIHJlcHJlc2VudGVkIGluIGEgZGVjUXVhZC4gIFNvbWUgdGVzdGNhc2VzIGdvIHRvIHRoZSBsaW1pdCBvZiB0aGUKKy0tIG5leHQtd2lkZXIgZm9ybWF0LCBhbmQgaGVuY2UgdGhlc2UgdGVzdGNhc2VzIG1heSBhbHNvIGJlIHVzZWQgdG8KKy0tIHRlc3QgbmFycm93aW5nIGFuZCB3aWRlbmluZyBvcGVyYXRpb25zLgorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkcWJhczAwMSB0b1NjaSAgICAgICAwIC0+IDAKK2RxYmFzMDAyIHRvU2NpICAgICAgIDEgLT4gMQorZHFiYXMwMDMgdG9TY2kgICAgIDEuMCAtPiAxLjAKK2RxYmFzMDA0IHRvU2NpICAgIDEuMDAgLT4gMS4wMAorZHFiYXMwMDUgdG9TY2kgICAgICAxMCAtPiAxMAorZHFiYXMwMDYgdG9TY2kgICAgMTAwMCAtPiAxMDAwCitkcWJhczAwNyB0b1NjaSAgICAxMC4wIC0+IDEwLjAKK2RxYmFzMDA4IHRvU2NpICAgIDEwLjEgLT4gMTAuMQorZHFiYXMwMDkgdG9TY2kgICAgMTAuNCAtPiAxMC40CitkcWJhczAxMCB0b1NjaSAgICAxMC41IC0+IDEwLjUKK2RxYmFzMDExIHRvU2NpICAgIDEwLjYgLT4gMTAuNgorZHFiYXMwMTIgdG9TY2kgICAgMTAuOSAtPiAxMC45CitkcWJhczAxMyB0b1NjaSAgICAxMS4wIC0+IDExLjAKK2RxYmFzMDE0IHRvU2NpICAxLjIzNCAtPiAxLjIzNAorZHFiYXMwMTUgdG9TY2kgIDAuMTIzIC0+IDAuMTIzCitkcWJhczAxNiB0b1NjaSAgMC4wMTIgLT4gMC4wMTIKK2RxYmFzMDE3IHRvU2NpICAtMCAgICAtPiAtMAorZHFiYXMwMTggdG9TY2kgIC0wLjAgIC0+IC0wLjAKK2RxYmFzMDE5IHRvU2NpIC0wMC4wMCAtPiAtMC4wMAorCitkcWJhczAyMSB0b1NjaSAgICAgLTEgLT4gLTEKK2RxYmFzMDIyIHRvU2NpICAgLTEuMCAtPiAtMS4wCitkcWJhczAyMyB0b1NjaSAgIC0wLjEgLT4gLTAuMQorZHFiYXMwMjQgdG9TY2kgICAtOS4xIC0+IC05LjEKK2RxYmFzMDI1IHRvU2NpICAgLTkuMTEgLT4gLTkuMTEKK2RxYmFzMDI2IHRvU2NpICAgLTkuMTE5IC0+IC05LjExOQorZHFiYXMwMjcgdG9TY2kgICAtOS45OTkgLT4gLTkuOTk5CisKK2RxYmFzMDMwIHRvU2NpICAnMTIzNDU2Nzg5LjEyMzQ1NicgICAtPiAnMTIzNDU2Nzg5LjEyMzQ1NicKK2RxYmFzMDMxIHRvU2NpICAnMTIzNDU2Nzg5LjAwMDAwMCcgICAtPiAnMTIzNDU2Nzg5LjAwMDAwMCcKK2RxYmFzMDMyIHRvU2NpICAgJzEyMzQ1Njc4OTEyMzQ1NicgICAtPiAnMTIzNDU2Nzg5MTIzNDU2JworZHFiYXMwMzMgdG9TY2kgICAnMC4wMDAwMTIzNDU2Nzg5JyAgIC0+ICcwLjAwMDAxMjM0NTY3ODknCitkcWJhczAzNCB0b1NjaSAgJzAuMDAwMDAxMjM0NTY3ODknICAgLT4gJzAuMDAwMDAxMjM0NTY3ODknCitkcWJhczAzNSB0b1NjaSAnMC4wMDAwMDAxMjM0NTY3ODknICAgLT4gJzEuMjM0NTY3ODlFLTcnCitkcWJhczAzNiB0b1NjaSAnMC4wMDAwMDAwMTIzNDU2Nzg5JyAgLT4gJzEuMjM0NTY3ODlFLTgnCisKK2RxYmFzMDM3IHRvU2NpICcwLjEyMzQ1Njc4OTAxMjM0NCcgICAtPiAnMC4xMjM0NTY3ODkwMTIzNDQnCitkcWJhczAzOCB0b1NjaSAnMC4xMjM0NTY3ODkwMTIzNDUnICAgLT4gJzAuMTIzNDU2Nzg5MDEyMzQ1JworCistLSB0ZXN0IGZpbml0ZSBib3VuZHMgKE5lZ3Mgb2YsIHRoZW4gMCwgTnRpbnksIE5taW4sIG90aGVyLCBObWF4KQorZHFic24wMDEgdG9TY2kgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFic24wMDIgdG9TY2kgLTFFLTYxNDMgLT4gLTFFLTYxNDMKK2RxYnNuMDAzIHRvU2NpIC0xRS02MTc2IC0+IC0xRS02MTc2IFN1Ym5vcm1hbAorZHFic24wMDQgdG9TY2kgLTAgLT4gLTAKK2RxYnNuMDA1IHRvU2NpICswIC0+ICAwCitkcWJzbjAwNiB0b1NjaSArMUUtNjE3NiAtPiAgMUUtNjE3NiBTdWJub3JtYWwKK2RxYnNuMDA3IHRvU2NpICsxRS02MTQzIC0+ICAxRS02MTQzCitkcWJzbjAwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CisKKy0tIFN0cmluZyBbbWFueSBtb3JlIGV4YW1wbGVzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCBlbHNld2hlcmVdCistLSBzdHJpbmdzIHdpdGhvdXQgRSBjYW5ub3QgZ2VuZXJhdGUgRSBpbiByZXN1bHQKK2RxYmFzMDQwIHRvU2NpICIxMiIgICAgICAgIC0+ICcxMicKK2RxYmFzMDQxIHRvU2NpICItNzYiICAgICAgIC0+ICctNzYnCitkcWJhczA0MiB0b1NjaSAiMTIuNzYiICAgICAtPiAnMTIuNzYnCitkcWJhczA0MyB0b1NjaSAiKzEyLjc2IiAgICAtPiAnMTIuNzYnCitkcWJhczA0NCB0b1NjaSAiMDEyLjc2IiAgICAtPiAnMTIuNzYnCitkcWJhczA0NSB0b1NjaSAiKzAuMDAzIiAgICAtPiAnMC4wMDMnCitkcWJhczA0NiB0b1NjaSAiMTcuIiAgICAgICAtPiAnMTcnCitkcWJhczA0NyB0b1NjaSAiLjUiICAgICAgICAtPiAnMC41JworZHFiYXMwNDggdG9TY2kgIjA0NCIgICAgICAgLT4gJzQ0JworZHFiYXMwNDkgdG9TY2kgIjAwNDQiICAgICAgLT4gJzQ0JworZHFiYXMwNTAgdG9TY2kgIjAuMDAwNSIgICAgICAtPiAnMC4wMDA1JworZHFiYXMwNTEgdG9TY2kgIjAwLjAwMDA1IiAgICAtPiAnMC4wMDAwNScKK2RxYmFzMDUyIHRvU2NpICIwLjAwMDAwNSIgICAgLT4gJzAuMDAwMDA1JworZHFiYXMwNTMgdG9TY2kgIjAuMDAwMDA1MCIgICAtPiAnMC4wMDAwMDUwJworZHFiYXMwNTQgdG9TY2kgIjAuMDAwMDAwNSIgICAtPiAnNUUtNycKK2RxYmFzMDU1IHRvU2NpICIwLjAwMDAwMDA1IiAgLT4gJzVFLTgnCitkcWJhczA1NiB0b1NjaSAiMTIzNDU2NzguNTQzMjEwIiAtPiAnMTIzNDU2NzguNTQzMjEwJworZHFiYXMwNTcgdG9TY2kgIjIzNDU2NzguNTQzMjEwIiAtPiAnMjM0NTY3OC41NDMyMTAnCitkcWJhczA1OCB0b1NjaSAiMzQ1Njc4LjU0MzIxMCIgLT4gJzM0NTY3OC41NDMyMTAnCitkcWJhczA1OSB0b1NjaSAiMDM0NTY3OC41NDMyMSIgLT4gJzM0NTY3OC41NDMyMScKK2RxYmFzMDYwIHRvU2NpICIzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJworZHFiYXMwNjEgdG9TY2kgIiszNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJworZHFiYXMwNjIgdG9TY2kgIiswMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicKK2RxYmFzMDYzIHRvU2NpICIrMDAzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJworZHFiYXMwNjQgdG9TY2kgIi0zNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInCitkcWJhczA2NSB0b1NjaSAiLTAzNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInCitkcWJhczA2NiB0b1NjaSAiLTAwMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJworLS0gZXhhbXBsZXMKK2RxYmFzMDY3IHRvU2NpICI1RS02IiAgICAgICAgLT4gJzAuMDAwMDA1JworZHFiYXMwNjggdG9TY2kgIjUwRS03IiAgICAgICAtPiAnMC4wMDAwMDUwJworZHFiYXMwNjkgdG9TY2kgIjVFLTciICAgICAgICAtPiAnNUUtNycKKworLS0gW05vIGV4b3RpY3MgYXMgbm8gVW5pY29kZV0KKworLS0gcm91bmRlZCB3aXRoIGRvdHMgaW4gYWxsIChpbmNsdWRpbmcgZWRnZSkgcGxhY2VzCitkcWJhczA3MSB0b1NjaSAgLjEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+IDAuMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDcyIHRvU2NpICAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwNzMgdG9TY2kgIDEyLjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIuMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA3NCB0b1NjaSAgMTIzLjQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjMuNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDc1IHRvU2NpICAxMjM0LjU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQuNTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwNzYgdG9TY2kgIDEyMzQ1LjY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDUuNjc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA3NyB0b1NjaSAgMTIzNDU2Ljc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTYuNzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDc4IHRvU2NpICAxMjM0NTY3Ljg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1NjcuODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwNzkgdG9TY2kgIDEyMzQ1Njc4LjkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2NzguOTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA4MCB0b1NjaSAgMTIzNDU2Nzg5LjEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkuMTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDgxIHRvU2NpICAxMjM0NTY3ODkxLjIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEuMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwODIgdG9TY2kgIDEyMzQ1Njc4OTEyLjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIuMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA4MyB0b1NjaSAgMTIzNDU2Nzg5MTIzLjQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjMuNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDg0IHRvU2NpICAxMjM0NTY3ODkxMjM0LjU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQuNTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwODUgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1LjY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDUuNjc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA4NiB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Ljc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTYuNzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDg3IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3Ljg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1NjcuODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwODggdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4LjkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2NzguOTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA4OSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5LjAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkuMDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDkwIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwLjEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAuMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwOTEgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxLjIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEuMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA5MiB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyLjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIuMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDkzIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzLjQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjMuNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwOTQgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0LjU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQuNTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA5NSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1LjY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDUuNjc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDk2IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2Ljc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTYuNzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMwOTcgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3LjgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1NjcuODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczA5OCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4LjAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzguMDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMDk5IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwLjEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAuMTIzNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDAgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxLjIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEuMjM0NTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwMSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyLjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIuMzQ1NiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTAyIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzLjQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjMuNDU2IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDMgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0LjU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQuNTYgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwNCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1LjYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDUuNiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTA1IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2LjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDYgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxLjIzICAtPiAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTZFKzM0IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDcgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMi4zICAtPiAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTZFKzM1IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDggdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMuICAtPiAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTZFKzM2IEluZXhhY3QgUm91bmRlZAorLS0gMTIzNDU2Nzg5MDEyMzQ1Njc4CisKKy0tIE51bWJlcnMgd2l0aCBFCitkcWJhczEzMCB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJworZHFiYXMxMzEgdG9TY2kgIjAuMDAwRS0yIiAgLT4gJzAuMDAwMDAnCitkcWJhczEzMiB0b1NjaSAiMC4wMDBFLTMiICAtPiAnMC4wMDAwMDAnCitkcWJhczEzMyB0b1NjaSAiMC4wMDBFLTQiICAtPiAnMEUtNycKK2RxYmFzMTM0IHRvU2NpICIwLjAwRS0yIiAgIC0+ICcwLjAwMDAnCitkcWJhczEzNSB0b1NjaSAiMC4wMEUtMyIgICAtPiAnMC4wMDAwMCcKK2RxYmFzMTM2IHRvU2NpICIwLjAwRS00IiAgIC0+ICcwLjAwMDAwMCcKK2RxYmFzMTM3IHRvU2NpICIwLjAwRS01IiAgIC0+ICcwRS03JworZHFiYXMxMzggdG9TY2kgIiswRSs5IiAgICAgLT4gJzBFKzknCitkcWJhczEzOSB0b1NjaSAiLTBFKzkiICAgICAtPiAnLTBFKzknCitkcWJhczE0MCB0b1NjaSAiMUUrOSIgICAgICAtPiAnMUUrOScKK2RxYmFzMTQxIHRvU2NpICIxZSswOSIgICAgIC0+ICcxRSs5JworZHFiYXMxNDIgdG9TY2kgIjFFKzkwIiAgICAgLT4gJzFFKzkwJworZHFiYXMxNDMgdG9TY2kgIisxRSswMDkiICAgLT4gJzFFKzknCitkcWJhczE0NCB0b1NjaSAiMEUrOSIgICAgICAtPiAnMEUrOScKK2RxYmFzMTQ1IHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5JworZHFiYXMxNDYgdG9TY2kgIjFFKzA5IiAgICAgLT4gJzFFKzknCitkcWJhczE0NyB0b1NjaSAiMWUrOTAiICAgICAtPiAnMUUrOTAnCitkcWJhczE0OCB0b1NjaSAiMUUrMDA5IiAgICAtPiAnMUUrOScKK2RxYmFzMTQ5IHRvU2NpICIwMDBFKzkiICAgIC0+ICcwRSs5JworZHFiYXMxNTAgdG9TY2kgIjFFOSIgICAgICAgLT4gJzFFKzknCitkcWJhczE1MSB0b1NjaSAiMWUwOSIgICAgICAtPiAnMUUrOScKK2RxYmFzMTUyIHRvU2NpICIxRTkwIiAgICAgIC0+ICcxRSs5MCcKK2RxYmFzMTUzIHRvU2NpICIxRTAwOSIgICAgIC0+ICcxRSs5JworZHFiYXMxNTQgdG9TY2kgIjBFOSIgICAgICAgLT4gJzBFKzknCitkcWJhczE1NSB0b1NjaSAiMC4wMDBlKzAiICAtPiAnMC4wMDAnCitkcWJhczE1NiB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJworZHFiYXMxNTcgdG9TY2kgIjRFKzkiICAgICAgLT4gJzRFKzknCitkcWJhczE1OCB0b1NjaSAiNDRFKzkiICAgICAtPiAnNC40RSsxMCcKK2RxYmFzMTU5IHRvU2NpICIwLjczZS03IiAgIC0+ICc3LjNFLTgnCitkcWJhczE2MCB0b1NjaSAiMDBFKzkiICAgICAtPiAnMEUrOScKK2RxYmFzMTYxIHRvU2NpICIwMEUtOSIgICAgIC0+ICcwRS05JworZHFiYXMxNjIgdG9TY2kgIjEwRSs5IiAgICAgLT4gJzEuMEUrMTAnCitkcWJhczE2MyB0b1NjaSAiMTBFKzA5IiAgICAtPiAnMS4wRSsxMCcKK2RxYmFzMTY0IHRvU2NpICIxMGUrOTAiICAgIC0+ICcxLjBFKzkxJworZHFiYXMxNjUgdG9TY2kgIjEwRSswMDkiICAgLT4gJzEuMEUrMTAnCitkcWJhczE2NiB0b1NjaSAiMTAwZSs5IiAgICAtPiAnMS4wMEUrMTEnCitkcWJhczE2NyB0b1NjaSAiMTAwZSswOSIgICAtPiAnMS4wMEUrMTEnCitkcWJhczE2OCB0b1NjaSAiMTAwRSs5MCIgICAtPiAnMS4wMEUrOTInCitkcWJhczE2OSB0b1NjaSAiMTAwZSswMDkiICAtPiAnMS4wMEUrMTEnCisKK2RxYmFzMTcwIHRvU2NpICIxLjI2NSIgICAgIC0+ICcxLjI2NScKK2RxYmFzMTcxIHRvU2NpICIxLjI2NUUtMjAiIC0+ICcxLjI2NUUtMjAnCitkcWJhczE3MiB0b1NjaSAiMS4yNjVFLTgiICAtPiAnMS4yNjVFLTgnCitkcWJhczE3MyB0b1NjaSAiMS4yNjVFLTQiICAtPiAnMC4wMDAxMjY1JworZHFiYXMxNzQgdG9TY2kgIjEuMjY1RS0zIiAgLT4gJzAuMDAxMjY1JworZHFiYXMxNzUgdG9TY2kgIjEuMjY1RS0yIiAgLT4gJzAuMDEyNjUnCitkcWJhczE3NiB0b1NjaSAiMS4yNjVFLTEiICAtPiAnMC4xMjY1JworZHFiYXMxNzcgdG9TY2kgIjEuMjY1RS0wIiAgLT4gJzEuMjY1JworZHFiYXMxNzggdG9TY2kgIjEuMjY1RSsxIiAgLT4gJzEyLjY1JworZHFiYXMxNzkgdG9TY2kgIjEuMjY1RSsyIiAgLT4gJzEyNi41JworZHFiYXMxODAgdG9TY2kgIjEuMjY1RSszIiAgLT4gJzEyNjUnCitkcWJhczE4MSB0b1NjaSAiMS4yNjVFKzQiICAtPiAnMS4yNjVFKzQnCitkcWJhczE4MiB0b1NjaSAiMS4yNjVFKzgiICAtPiAnMS4yNjVFKzgnCitkcWJhczE4MyB0b1NjaSAiMS4yNjVFKzIwIiAtPiAnMS4yNjVFKzIwJworCitkcWJhczE5MCB0b1NjaSAiMTIuNjUiICAgICAtPiAnMTIuNjUnCitkcWJhczE5MSB0b1NjaSAiMTIuNjVFLTIwIiAtPiAnMS4yNjVFLTE5JworZHFiYXMxOTIgdG9TY2kgIjEyLjY1RS04IiAgLT4gJzEuMjY1RS03JworZHFiYXMxOTMgdG9TY2kgIjEyLjY1RS00IiAgLT4gJzAuMDAxMjY1JworZHFiYXMxOTQgdG9TY2kgIjEyLjY1RS0zIiAgLT4gJzAuMDEyNjUnCitkcWJhczE5NSB0b1NjaSAiMTIuNjVFLTIiICAtPiAnMC4xMjY1JworZHFiYXMxOTYgdG9TY2kgIjEyLjY1RS0xIiAgLT4gJzEuMjY1JworZHFiYXMxOTcgdG9TY2kgIjEyLjY1RS0wIiAgLT4gJzEyLjY1JworZHFiYXMxOTggdG9TY2kgIjEyLjY1RSsxIiAgLT4gJzEyNi41JworZHFiYXMxOTkgdG9TY2kgIjEyLjY1RSsyIiAgLT4gJzEyNjUnCitkcWJhczIwMCB0b1NjaSAiMTIuNjVFKzMiICAtPiAnMS4yNjVFKzQnCitkcWJhczIwMSB0b1NjaSAiMTIuNjVFKzQiICAtPiAnMS4yNjVFKzUnCitkcWJhczIwMiB0b1NjaSAiMTIuNjVFKzgiICAtPiAnMS4yNjVFKzknCitkcWJhczIwMyB0b1NjaSAiMTIuNjVFKzIwIiAtPiAnMS4yNjVFKzIxJworCitkcWJhczIxMCB0b1NjaSAiMTI2LjUiICAgICAtPiAnMTI2LjUnCitkcWJhczIxMSB0b1NjaSAiMTI2LjVFLTIwIiAtPiAnMS4yNjVFLTE4JworZHFiYXMyMTIgdG9TY2kgIjEyNi41RS04IiAgLT4gJzAuMDAwMDAxMjY1JworZHFiYXMyMTMgdG9TY2kgIjEyNi41RS00IiAgLT4gJzAuMDEyNjUnCitkcWJhczIxNCB0b1NjaSAiMTI2LjVFLTMiICAtPiAnMC4xMjY1JworZHFiYXMyMTUgdG9TY2kgIjEyNi41RS0yIiAgLT4gJzEuMjY1JworZHFiYXMyMTYgdG9TY2kgIjEyNi41RS0xIiAgLT4gJzEyLjY1JworZHFiYXMyMTcgdG9TY2kgIjEyNi41RS0wIiAgLT4gJzEyNi41JworZHFiYXMyMTggdG9TY2kgIjEyNi41RSsxIiAgLT4gJzEyNjUnCitkcWJhczIxOSB0b1NjaSAiMTI2LjVFKzIiICAtPiAnMS4yNjVFKzQnCitkcWJhczIyMCB0b1NjaSAiMTI2LjVFKzMiICAtPiAnMS4yNjVFKzUnCitkcWJhczIyMSB0b1NjaSAiMTI2LjVFKzQiICAtPiAnMS4yNjVFKzYnCitkcWJhczIyMiB0b1NjaSAiMTI2LjVFKzgiICAtPiAnMS4yNjVFKzEwJworZHFiYXMyMjMgdG9TY2kgIjEyNi41RSsyMCIgLT4gJzEuMjY1RSsyMicKKworZHFiYXMyMzAgdG9TY2kgIjEyNjUiICAgICAtPiAnMTI2NScKK2RxYmFzMjMxIHRvU2NpICIxMjY1RS0yMCIgLT4gJzEuMjY1RS0xNycKK2RxYmFzMjMyIHRvU2NpICIxMjY1RS04IiAgLT4gJzAuMDAwMDEyNjUnCitkcWJhczIzMyB0b1NjaSAiMTI2NUUtNCIgIC0+ICcwLjEyNjUnCitkcWJhczIzNCB0b1NjaSAiMTI2NUUtMyIgIC0+ICcxLjI2NScKK2RxYmFzMjM1IHRvU2NpICIxMjY1RS0yIiAgLT4gJzEyLjY1JworZHFiYXMyMzYgdG9TY2kgIjEyNjVFLTEiICAtPiAnMTI2LjUnCitkcWJhczIzNyB0b1NjaSAiMTI2NUUtMCIgIC0+ICcxMjY1JworZHFiYXMyMzggdG9TY2kgIjEyNjVFKzEiICAtPiAnMS4yNjVFKzQnCitkcWJhczIzOSB0b1NjaSAiMTI2NUUrMiIgIC0+ICcxLjI2NUUrNScKK2RxYmFzMjQwIHRvU2NpICIxMjY1RSszIiAgLT4gJzEuMjY1RSs2JworZHFiYXMyNDEgdG9TY2kgIjEyNjVFKzQiICAtPiAnMS4yNjVFKzcnCitkcWJhczI0MiB0b1NjaSAiMTI2NUUrOCIgIC0+ICcxLjI2NUUrMTEnCitkcWJhczI0MyB0b1NjaSAiMTI2NUUrMjAiIC0+ICcxLjI2NUUrMjMnCisKK2RxYmFzMjUwIHRvU2NpICIwLjEyNjUiICAgICAtPiAnMC4xMjY1JworZHFiYXMyNTEgdG9TY2kgIjAuMTI2NUUtMjAiIC0+ICcxLjI2NUUtMjEnCitkcWJhczI1MiB0b1NjaSAiMC4xMjY1RS04IiAgLT4gJzEuMjY1RS05JworZHFiYXMyNTMgdG9TY2kgIjAuMTI2NUUtNCIgIC0+ICcwLjAwMDAxMjY1JworZHFiYXMyNTQgdG9TY2kgIjAuMTI2NUUtMyIgIC0+ICcwLjAwMDEyNjUnCitkcWJhczI1NSB0b1NjaSAiMC4xMjY1RS0yIiAgLT4gJzAuMDAxMjY1JworZHFiYXMyNTYgdG9TY2kgIjAuMTI2NUUtMSIgIC0+ICcwLjAxMjY1JworZHFiYXMyNTcgdG9TY2kgIjAuMTI2NUUtMCIgIC0+ICcwLjEyNjUnCitkcWJhczI1OCB0b1NjaSAiMC4xMjY1RSsxIiAgLT4gJzEuMjY1JworZHFiYXMyNTkgdG9TY2kgIjAuMTI2NUUrMiIgIC0+ICcxMi42NScKK2RxYmFzMjYwIHRvU2NpICIwLjEyNjVFKzMiICAtPiAnMTI2LjUnCitkcWJhczI2MSB0b1NjaSAiMC4xMjY1RSs0IiAgLT4gJzEyNjUnCitkcWJhczI2MiB0b1NjaSAiMC4xMjY1RSs4IiAgLT4gJzEuMjY1RSs3JworZHFiYXMyNjMgdG9TY2kgIjAuMTI2NUUrMjAiIC0+ICcxLjI2NUUrMTknCisKKy0tIHNvbWUgbW9yZSBuZWdhdGl2ZSB6ZXJvcyBbc3lzdGVtYXRpYyB0ZXN0cyBiZWxvd10KK2RxYmFzMjkwIHRvU2NpICItMC4wMDBFLTEiICAtPiAnLTAuMDAwMCcKK2RxYmFzMjkxIHRvU2NpICItMC4wMDBFLTIiICAtPiAnLTAuMDAwMDAnCitkcWJhczI5MiB0b1NjaSAiLTAuMDAwRS0zIiAgLT4gJy0wLjAwMDAwMCcKK2RxYmFzMjkzIHRvU2NpICItMC4wMDBFLTQiICAtPiAnLTBFLTcnCitkcWJhczI5NCB0b1NjaSAiLTAuMDBFLTIiICAgLT4gJy0wLjAwMDAnCitkcWJhczI5NSB0b1NjaSAiLTAuMDBFLTMiICAgLT4gJy0wLjAwMDAwJworZHFiYXMyOTYgdG9TY2kgIi0wLjBFLTIiICAgIC0+ICctMC4wMDAnCitkcWJhczI5NyB0b1NjaSAiLTAuMEUtMyIgICAgLT4gJy0wLjAwMDAnCitkcWJhczI5OCB0b1NjaSAiLTBFLTIiICAgICAgLT4gJy0wLjAwJworZHFiYXMyOTkgdG9TY2kgIi0wRS0zIiAgICAgIC0+ICctMC4wMDAnCisKKy0tIEVuZ2luZWVyaW5nIG5vdGF0aW9uIHRlc3RzCitkcWJhczMwMSAgdG9TY2kgMTBlMTIgIC0+IDEuMEUrMTMKK2RxYmFzMzAyICB0b0VuZyAxMGUxMiAgLT4gMTBFKzEyCitkcWJhczMwMyAgdG9TY2kgMTBlMTEgIC0+IDEuMEUrMTIKK2RxYmFzMzA0ICB0b0VuZyAxMGUxMSAgLT4gMS4wRSsxMgorZHFiYXMzMDUgIHRvU2NpIDEwZTEwICAtPiAxLjBFKzExCitkcWJhczMwNiAgdG9FbmcgMTBlMTAgIC0+IDEwMEUrOQorZHFiYXMzMDcgIHRvU2NpIDEwZTkgICAtPiAxLjBFKzEwCitkcWJhczMwOCAgdG9FbmcgMTBlOSAgIC0+IDEwRSs5CitkcWJhczMwOSAgdG9TY2kgMTBlOCAgIC0+IDEuMEUrOQorZHFiYXMzMTAgIHRvRW5nIDEwZTggICAtPiAxLjBFKzkKK2RxYmFzMzExICB0b1NjaSAxMGU3ICAgLT4gMS4wRSs4CitkcWJhczMxMiAgdG9FbmcgMTBlNyAgIC0+IDEwMEUrNgorZHFiYXMzMTMgIHRvU2NpIDEwZTYgICAtPiAxLjBFKzcKK2RxYmFzMzE0ICB0b0VuZyAxMGU2ICAgLT4gMTBFKzYKK2RxYmFzMzE1ICB0b1NjaSAxMGU1ICAgLT4gMS4wRSs2CitkcWJhczMxNiAgdG9FbmcgMTBlNSAgIC0+IDEuMEUrNgorZHFiYXMzMTcgIHRvU2NpIDEwZTQgICAtPiAxLjBFKzUKK2RxYmFzMzE4ICB0b0VuZyAxMGU0ICAgLT4gMTAwRSszCitkcWJhczMxOSAgdG9TY2kgMTBlMyAgIC0+IDEuMEUrNAorZHFiYXMzMjAgIHRvRW5nIDEwZTMgICAtPiAxMEUrMworZHFiYXMzMjEgIHRvU2NpIDEwZTIgICAtPiAxLjBFKzMKK2RxYmFzMzIyICB0b0VuZyAxMGUyICAgLT4gMS4wRSszCitkcWJhczMyMyAgdG9TY2kgMTBlMSAgIC0+IDEuMEUrMgorZHFiYXMzMjQgIHRvRW5nIDEwZTEgICAtPiAxMDAKK2RxYmFzMzI1ICB0b1NjaSAxMGUwICAgLT4gMTAKK2RxYmFzMzI2ICB0b0VuZyAxMGUwICAgLT4gMTAKK2RxYmFzMzI3ICB0b1NjaSAxMGUtMSAgLT4gMS4wCitkcWJhczMyOCAgdG9FbmcgMTBlLTEgIC0+IDEuMAorZHFiYXMzMjkgIHRvU2NpIDEwZS0yICAtPiAwLjEwCitkcWJhczMzMCAgdG9FbmcgMTBlLTIgIC0+IDAuMTAKK2RxYmFzMzMxICB0b1NjaSAxMGUtMyAgLT4gMC4wMTAKK2RxYmFzMzMyICB0b0VuZyAxMGUtMyAgLT4gMC4wMTAKK2RxYmFzMzMzICB0b1NjaSAxMGUtNCAgLT4gMC4wMDEwCitkcWJhczMzNCAgdG9FbmcgMTBlLTQgIC0+IDAuMDAxMAorZHFiYXMzMzUgIHRvU2NpIDEwZS01ICAtPiAwLjAwMDEwCitkcWJhczMzNiAgdG9FbmcgMTBlLTUgIC0+IDAuMDAwMTAKK2RxYmFzMzM3ICB0b1NjaSAxMGUtNiAgLT4gMC4wMDAwMTAKK2RxYmFzMzM4ICB0b0VuZyAxMGUtNiAgLT4gMC4wMDAwMTAKK2RxYmFzMzM5ICB0b1NjaSAxMGUtNyAgLT4gMC4wMDAwMDEwCitkcWJhczM0MCAgdG9FbmcgMTBlLTcgIC0+IDAuMDAwMDAxMAorZHFiYXMzNDEgIHRvU2NpIDEwZS04ICAtPiAxLjBFLTcKK2RxYmFzMzQyICB0b0VuZyAxMGUtOCAgLT4gMTAwRS05CitkcWJhczM0MyAgdG9TY2kgMTBlLTkgIC0+IDEuMEUtOAorZHFiYXMzNDQgIHRvRW5nIDEwZS05ICAtPiAxMEUtOQorZHFiYXMzNDUgIHRvU2NpIDEwZS0xMCAtPiAxLjBFLTkKK2RxYmFzMzQ2ICB0b0VuZyAxMGUtMTAgLT4gMS4wRS05CitkcWJhczM0NyAgdG9TY2kgMTBlLTExIC0+IDEuMEUtMTAKK2RxYmFzMzQ4ICB0b0VuZyAxMGUtMTEgLT4gMTAwRS0xMgorZHFiYXMzNDkgIHRvU2NpIDEwZS0xMiAtPiAxLjBFLTExCitkcWJhczM1MCAgdG9FbmcgMTBlLTEyIC0+IDEwRS0xMgorZHFiYXMzNTEgIHRvU2NpIDEwZS0xMyAtPiAxLjBFLTEyCitkcWJhczM1MiAgdG9FbmcgMTBlLTEzIC0+IDEuMEUtMTIKKworZHFiYXMzNjEgIHRvU2NpIDdFMTIgIC0+IDdFKzEyCitkcWJhczM2MiAgdG9FbmcgN0UxMiAgLT4gN0UrMTIKK2RxYmFzMzYzICB0b1NjaSA3RTExICAtPiA3RSsxMQorZHFiYXMzNjQgIHRvRW5nIDdFMTEgIC0+IDcwMEUrOQorZHFiYXMzNjUgIHRvU2NpIDdFMTAgIC0+IDdFKzEwCitkcWJhczM2NiAgdG9FbmcgN0UxMCAgLT4gNzBFKzkKK2RxYmFzMzY3ICB0b1NjaSA3RTkgICAtPiA3RSs5CitkcWJhczM2OCAgdG9FbmcgN0U5ICAgLT4gN0UrOQorZHFiYXMzNjkgIHRvU2NpIDdFOCAgIC0+IDdFKzgKK2RxYmFzMzcwICB0b0VuZyA3RTggICAtPiA3MDBFKzYKK2RxYmFzMzcxICB0b1NjaSA3RTcgICAtPiA3RSs3CitkcWJhczM3MiAgdG9FbmcgN0U3ICAgLT4gNzBFKzYKK2RxYmFzMzczICB0b1NjaSA3RTYgICAtPiA3RSs2CitkcWJhczM3NCAgdG9FbmcgN0U2ICAgLT4gN0UrNgorZHFiYXMzNzUgIHRvU2NpIDdFNSAgIC0+IDdFKzUKK2RxYmFzMzc2ICB0b0VuZyA3RTUgICAtPiA3MDBFKzMKK2RxYmFzMzc3ICB0b1NjaSA3RTQgICAtPiA3RSs0CitkcWJhczM3OCAgdG9FbmcgN0U0ICAgLT4gNzBFKzMKK2RxYmFzMzc5ICB0b1NjaSA3RTMgICAtPiA3RSszCitkcWJhczM4MCAgdG9FbmcgN0UzICAgLT4gN0UrMworZHFiYXMzODEgIHRvU2NpIDdFMiAgIC0+IDdFKzIKK2RxYmFzMzgyICB0b0VuZyA3RTIgICAtPiA3MDAKK2RxYmFzMzgzICB0b1NjaSA3RTEgICAtPiA3RSsxCitkcWJhczM4NCAgdG9FbmcgN0UxICAgLT4gNzAKK2RxYmFzMzg1ICB0b1NjaSA3RTAgICAtPiA3CitkcWJhczM4NiAgdG9FbmcgN0UwICAgLT4gNworZHFiYXMzODcgIHRvU2NpIDdFLTEgIC0+IDAuNworZHFiYXMzODggIHRvRW5nIDdFLTEgIC0+IDAuNworZHFiYXMzODkgIHRvU2NpIDdFLTIgIC0+IDAuMDcKK2RxYmFzMzkwICB0b0VuZyA3RS0yICAtPiAwLjA3CitkcWJhczM5MSAgdG9TY2kgN0UtMyAgLT4gMC4wMDcKK2RxYmFzMzkyICB0b0VuZyA3RS0zICAtPiAwLjAwNworZHFiYXMzOTMgIHRvU2NpIDdFLTQgIC0+IDAuMDAwNworZHFiYXMzOTQgIHRvRW5nIDdFLTQgIC0+IDAuMDAwNworZHFiYXMzOTUgIHRvU2NpIDdFLTUgIC0+IDAuMDAwMDcKK2RxYmFzMzk2ICB0b0VuZyA3RS01ICAtPiAwLjAwMDA3CitkcWJhczM5NyAgdG9TY2kgN0UtNiAgLT4gMC4wMDAwMDcKK2RxYmFzMzk4ICB0b0VuZyA3RS02ICAtPiAwLjAwMDAwNworZHFiYXMzOTkgIHRvU2NpIDdFLTcgIC0+IDdFLTcKK2RxYmFzNDAwICB0b0VuZyA3RS03ICAtPiA3MDBFLTkKK2RxYmFzNDAxICB0b1NjaSA3RS04ICAtPiA3RS04CitkcWJhczQwMiAgdG9FbmcgN0UtOCAgLT4gNzBFLTkKK2RxYmFzNDAzICB0b1NjaSA3RS05ICAtPiA3RS05CitkcWJhczQwNCAgdG9FbmcgN0UtOSAgLT4gN0UtOQorZHFiYXM0MDUgIHRvU2NpIDdFLTEwIC0+IDdFLTEwCitkcWJhczQwNiAgdG9FbmcgN0UtMTAgLT4gNzAwRS0xMgorZHFiYXM0MDcgIHRvU2NpIDdFLTExIC0+IDdFLTExCitkcWJhczQwOCAgdG9FbmcgN0UtMTEgLT4gNzBFLTEyCitkcWJhczQwOSAgdG9TY2kgN0UtMTIgLT4gN0UtMTIKK2RxYmFzNDEwICB0b0VuZyA3RS0xMiAtPiA3RS0xMgorZHFiYXM0MTEgIHRvU2NpIDdFLTEzIC0+IDdFLTEzCitkcWJhczQxMiAgdG9FbmcgN0UtMTMgLT4gNzAwRS0xNQorCistLSBFeGFjdHMgcmVtYWluIGV4YWN0IHVwIHRvIHByZWNpc2lvbiAuLgorZHFiYXM0MjAgIHRvU2NpICAgIDEwMCAtPiAxMDAKK2RxYmFzNDIyICB0b1NjaSAgIDEwMDAgLT4gMTAwMAorZHFiYXM0MjQgIHRvU2NpICA5OTkuOSAtPiAgOTk5LjkKK2RxYmFzNDI2ICB0b1NjaSAxMDAwLjAgLT4gMTAwMC4wCitkcWJhczQyOCAgdG9TY2kgMTAwMC4xIC0+IDEwMDAuMQorZHFiYXM0MzAgIHRvU2NpIDEwMDAwIC0+IDEwMDAwCitkcWJhczQzMiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFiYXM0MzQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWJhczQzNiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWJhczQzOCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFiYXM0NDAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgIFJvdW5kZWQKK2RxYmFzNDQyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgICBSb3VuZGVkCitkcWJhczQ0NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ0NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ0OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ1MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM0ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ1MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICAgUm91bmRlZAorZHFiYXM0NTQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQgSW5leGFjdAorZHFiYXM0NTYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQgSW5leGFjdAorZHFiYXM0NTggIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQgSW5leGFjdAorZHFiYXM0NjAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNiAgIFJvdW5kZWQKK2RxYmFzNDYyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYgICBSb3VuZGVkIEluZXhhY3QKK2RxYmFzNDY0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYgICBSb3VuZGVkIEluZXhhY3QKK2RxYmFzNDY2ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzYgICBSb3VuZGVkIEluZXhhY3QKK2RxYmFzNDY4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzcgICBSb3VuZGVkCitkcWJhczQ3MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM3ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ3MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM3ICAgUm91bmRlZCBJbmV4YWN0CitkcWJhczQ3NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM3ICAgUm91bmRlZCBJbmV4YWN0CisKKy0tIGNoZWNrIHJvdW5kaW5nIG1vZGVzIGhlZWRlZAorcm91bmRpbmc6ICBjZWlsaW5nCitkcWJzcjQwMSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNDAyICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQwMyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MDQgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgdXAKK2RxYnNyNDA1ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I0MDYgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDA3ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQwOCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBmbG9vcgorZHFic3I0MTAgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjQxMSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MTIgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDEzICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZG93bgorZHFic3I0MTUgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjQxNiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MTcgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDE4ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQxOSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RxYnNyNDIxICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I0MjIgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDIzICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQyNCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MjUgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZG93bgorZHFic3I0MjYgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjQyNyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MjggIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDI5ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfdXAKK2RxYnNyNDMxICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I0MzIgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNDMzICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjQzNCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdAorZHFic3I0MzUgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKKy0tIG5lZ2F0aXZlcworcm91bmRpbmc6ICBjZWlsaW5nCitkcWJzcjUwMSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKK2RxYnNyNTAyICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUwMyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MDQgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgdXAKK2RxYnNyNTA1ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I1MDYgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTA3ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUwOCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBmbG9vcgorZHFic3I1MTAgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjUxMSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MTIgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTEzICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZG93bgorZHFic3I1MTUgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjUxNiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MTcgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTE4ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUxOSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RxYnNyNTIxICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I1MjIgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTIzICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUyNCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MjUgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZG93bgorZHFic3I1MjYgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCitkcWJzcjUyNyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MjggIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTI5ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfdXAKK2RxYnNyNTMxICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAorZHFic3I1MzIgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RxYnNyNTMzICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0CitkcWJzcjUzNCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdAorZHFic3I1MzUgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBUaGUgJ2JhZGRpZXMnIHRlc3RzIGZyb20gRGlhZ0JpZ0RlY2ltYWwsIHBsdXMgc29tZSBuZXcgb25lcworZHFiYXM1MDAgdG9TY2kgJzEuLjInICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUwMSB0b1NjaSAnLicgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTAyIHRvU2NpICcuLicgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MDMgdG9TY2kgJysrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUwNCB0b1NjaSAnLS0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTA1IHRvU2NpICctKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MDYgdG9TY2kgJystMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUwNyB0b1NjaSAnMTJlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTA4IHRvU2NpICcxMmUrKycgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MDkgdG9TY2kgJzEyZjQnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUxMCB0b1NjaSAnICsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTExIHRvU2NpICcrIDEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MTIgdG9TY2kgJzEyICcgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUxMyB0b1NjaSAnICsgMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTE0IHRvU2NpICcgLSAxICcgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MTUgdG9TY2kgJ3gnICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUxNiB0b1NjaSAnLTEtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTE3IHRvU2NpICcxMi0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MTggdG9TY2kgJzMrJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUxOSB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTIwIHRvU2NpICcxZS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MjEgdG9TY2kgJzdlOTk5OTlhJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUyMiB0b1NjaSAnN2UxMjM1Njc4OTB4JyAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTIzIHRvU2NpICc3ZTEyMzU2Nzg5MDEyeCcgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MjQgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUyNSB0b1NjaSAnZTEwMCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTI2IHRvU2NpICdcdTBlNWEnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MjcgdG9TY2kgJ1x1MGI2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUyOCB0b1NjaSAnMTIzLDY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTI5IHRvU2NpICcxLjM0LjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MzAgdG9TY2kgJy4xMjMuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUzMSB0b1NjaSAnMDEuMzUuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTMyIHRvU2NpICcwMS4zNS0nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MzMgdG9TY2kgJzAwMDAuLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUzNCB0b1NjaSAnLjAwMDAuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTM1IHRvU2NpICcwMC4uMDAnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MzYgdG9TY2kgJzExMWUqMTIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczUzNyB0b1NjaSAnMTExZTEyMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTM4IHRvU2NpICcxMTFlKzEyKycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1MzkgdG9TY2kgJzExMWUxLTMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU0MCB0b1NjaSAnMTExZTEqMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTQxIHRvU2NpICcxMTFlMWUrMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NDIgdG9TY2kgJzFlMS4wJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU0MyB0b1NjaSAnMWUxMjNlJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTQ0IHRvU2NpICd0ZW4nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NDUgdG9TY2kgJ09ORScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU0NiB0b1NjaSAnMWUuMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTQ3IHRvU2NpICcxZTEuJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NDggdG9TY2kgJzFlZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU0OSB0b1NjaSAnZSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTUwIHRvU2NpICcxLjIzLjQnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NTEgdG9TY2kgJzEuMi4xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU1MiB0b1NjaSAnMUUrMS4yJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTUzIHRvU2NpICcxRSsxLjIuMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NTQgdG9TY2kgJzFFKysxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU1NSB0b1NjaSAnMUUtLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTU2IHRvU2NpICcxRSstMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NTcgdG9TY2kgJzFFLSsxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU1OCB0b1NjaSAnMUUnJzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTU5IHRvU2NpICIxRSIiMSIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NjAgdG9TY2kgIjFFIiIiIiIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CistLSBOZWFyLXNwZWNpYWxzCitkcWJhczU2MSB0b1NjaSAicU5hTiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTYyIHRvU2NpICJOYU5xIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NjMgdG9TY2kgIk5hTnMiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU2NCB0b1NjaSAiSW5maSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTY1IHRvU2NpICJJbmZpbiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NjYgdG9TY2kgIkluZmluaSIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU2NyB0b1NjaSAiSW5maW5pdCIgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTY4IHRvU2NpICItSW5maW5pdCIgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NjkgdG9TY2kgIjBJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU3MCB0b1NjaSAiOUluZiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTcxIHRvU2NpICItMEluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NzIgdG9TY2kgIi05SW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU3MyB0b1NjaSAiLXNOYSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNTc0IHRvU2NpICJ4TmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NzUgdG9TY2kgIjBzTmFOIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKKy0tIHNvbWUgYmFkZGllcyB3aXRoIGRvdHMgYW5kIEVzIGFuZCBkb3RzIGFuZCBzcGVjaWFscworZHFiYXM1NzYgdG9TY2kgICdlKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NzcgdG9TY2kgICcuZSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NzggdG9TY2kgICcrLmUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1NzkgdG9TY2kgICctLmUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1ODAgdG9TY2kgICctLmUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1ODEgdG9TY2kgICdFKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1ODIgdG9TY2kgICcuRSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1ODMgdG9TY2kgICcrLkUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1ODQgdG9TY2kgICctLkUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM1ODUgdG9TY2kgICctLkUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorCitkcWJhczU4NiB0b1NjaSAgJy5OYU4nICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU4NyB0b1NjaSAgJy0uTmFOJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU4OCB0b1NjaSAgJysuc05hTicgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU4OSB0b1NjaSAgJysuSW5mJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczU5MCB0b1NjaSAgJy5JbmZpbml0eScgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CisKKy0tIFplcm9zCitkcWJhczYwMSB0b1NjaSAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05CitkcWJhczYwMiB0b1NjaSAwLjAwMDAwMDAwICAgICAgICAtPiAwRS04CitkcWJhczYwMyB0b1NjaSAwLjAwMDAwMDAgICAgICAgICAtPiAwRS03CitkcWJhczYwNCB0b1NjaSAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMAorZHFiYXM2MDUgdG9TY2kgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMAorZHFiYXM2MDYgdG9TY2kgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwCitkcWJhczYwNyB0b1NjaSAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMAorZHFiYXM2MDggdG9TY2kgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMAorZHFiYXM2MDkgdG9TY2kgMC4wICAgICAgICAgICAgICAgLT4gMC4wCitkcWJhczYxMCB0b1NjaSAgLjAgICAgICAgICAgICAgICAtPiAwLjAKK2RxYmFzNjExIHRvU2NpIDAuICAgICAgICAgICAgICAgIC0+IDAKK2RxYmFzNjEyIHRvU2NpIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjAKK2RxYmFzNjEzIHRvU2NpIC0wLiAgICAgICAgICAgICAgIC0+IC0wCitkcWJhczYxNCB0b1NjaSAtMC4wICAgICAgICAgICAgICAtPiAtMC4wCitkcWJhczYxNSB0b1NjaSAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMAorZHFiYXM2MTYgdG9TY2kgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwCitkcWJhczYxNyB0b1NjaSAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwCitkcWJhczYxOCB0b1NjaSAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMAorZHFiYXM2MTkgdG9TY2kgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwCitkcWJhczYyMCB0b1NjaSAtMC4wMDAwMDAwICAgICAgICAtPiAtMEUtNworZHFiYXM2MjEgdG9TY2kgLTAuMDAwMDAwMDAgICAgICAgLT4gLTBFLTgKK2RxYmFzNjIyIHRvU2NpIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05CisKK2RxYmFzNjMwIHRvU2NpICAwLjAwRSswICAgICAgICAgIC0+IDAuMDAKK2RxYmFzNjMxIHRvU2NpICAwLjAwRSsxICAgICAgICAgIC0+IDAuMAorZHFiYXM2MzIgdG9TY2kgIDAuMDBFKzIgICAgICAgICAgLT4gMAorZHFiYXM2MzMgdG9TY2kgIDAuMDBFKzMgICAgICAgICAgLT4gMEUrMQorZHFiYXM2MzQgdG9TY2kgIDAuMDBFKzQgICAgICAgICAgLT4gMEUrMgorZHFiYXM2MzUgdG9TY2kgIDAuMDBFKzUgICAgICAgICAgLT4gMEUrMworZHFiYXM2MzYgdG9TY2kgIDAuMDBFKzYgICAgICAgICAgLT4gMEUrNAorZHFiYXM2MzcgdG9TY2kgIDAuMDBFKzcgICAgICAgICAgLT4gMEUrNQorZHFiYXM2MzggdG9TY2kgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNgorZHFiYXM2MzkgdG9TY2kgIDAuMDBFKzkgICAgICAgICAgLT4gMEUrNworCitkcWJhczY0MCB0b1NjaSAgMC4wRSswICAgICAgICAgICAtPiAwLjAKK2RxYmFzNjQxIHRvU2NpICAwLjBFKzEgICAgICAgICAgIC0+IDAKK2RxYmFzNjQyIHRvU2NpICAwLjBFKzIgICAgICAgICAgIC0+IDBFKzEKK2RxYmFzNjQzIHRvU2NpICAwLjBFKzMgICAgICAgICAgIC0+IDBFKzIKK2RxYmFzNjQ0IHRvU2NpICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMKK2RxYmFzNjQ1IHRvU2NpICAwLjBFKzUgICAgICAgICAgIC0+IDBFKzQKK2RxYmFzNjQ2IHRvU2NpICAwLjBFKzYgICAgICAgICAgIC0+IDBFKzUKK2RxYmFzNjQ3IHRvU2NpICAwLjBFKzcgICAgICAgICAgIC0+IDBFKzYKK2RxYmFzNjQ4IHRvU2NpICAwLjBFKzggICAgICAgICAgIC0+IDBFKzcKK2RxYmFzNjQ5IHRvU2NpICAwLjBFKzkgICAgICAgICAgIC0+IDBFKzgKKworZHFiYXM2NTAgdG9TY2kgIDBFKzAgICAgICAgICAgICAgLT4gMAorZHFiYXM2NTEgdG9TY2kgIDBFKzEgICAgICAgICAgICAgLT4gMEUrMQorZHFiYXM2NTIgdG9TY2kgIDBFKzIgICAgICAgICAgICAgLT4gMEUrMgorZHFiYXM2NTMgdG9TY2kgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMworZHFiYXM2NTQgdG9TY2kgIDBFKzQgICAgICAgICAgICAgLT4gMEUrNAorZHFiYXM2NTUgdG9TY2kgIDBFKzUgICAgICAgICAgICAgLT4gMEUrNQorZHFiYXM2NTYgdG9TY2kgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNgorZHFiYXM2NTcgdG9TY2kgIDBFKzcgICAgICAgICAgICAgLT4gMEUrNworZHFiYXM2NTggdG9TY2kgIDBFKzggICAgICAgICAgICAgLT4gMEUrOAorZHFiYXM2NTkgdG9TY2kgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQorCitkcWJhczY2MCB0b1NjaSAgMC4wRS0wICAgICAgICAgICAtPiAwLjAKK2RxYmFzNjYxIHRvU2NpICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDAKK2RxYmFzNjYyIHRvU2NpICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwCitkcWJhczY2MyB0b1NjaSAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDAKK2RxYmFzNjY0IHRvU2NpICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDAKK2RxYmFzNjY1IHRvU2NpICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwCitkcWJhczY2NiB0b1NjaSAgMC4wRS02ICAgICAgICAgICAtPiAwRS03CitkcWJhczY2NyB0b1NjaSAgMC4wRS03ICAgICAgICAgICAtPiAwRS04CitkcWJhczY2OCB0b1NjaSAgMC4wRS04ICAgICAgICAgICAtPiAwRS05CitkcWJhczY2OSB0b1NjaSAgMC4wRS05ICAgICAgICAgICAtPiAwRS0xMAorCitkcWJhczY3MCB0b1NjaSAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwCitkcWJhczY3MSB0b1NjaSAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMAorZHFiYXM2NzIgdG9TY2kgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwCitkcWJhczY3MyB0b1NjaSAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwCitkcWJhczY3NCB0b1NjaSAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMAorZHFiYXM2NzUgdG9TY2kgIDAuMDBFLTUgICAgICAgICAgLT4gMEUtNworZHFiYXM2NzYgdG9TY2kgIDAuMDBFLTYgICAgICAgICAgLT4gMEUtOAorZHFiYXM2NzcgdG9TY2kgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQorZHFiYXM2NzggdG9TY2kgIDAuMDBFLTggICAgICAgICAgLT4gMEUtMTAKK2RxYmFzNjc5IHRvU2NpICAwLjAwRS05ICAgICAgICAgIC0+IDBFLTExCisKK2RxYmFzNjgwIHRvU2NpICAwMDAwMDAuICAgICAgICAgIC0+ICAwCitkcWJhczY4MSB0b1NjaSAgIDAwMDAwLiAgICAgICAgICAtPiAgMAorZHFiYXM2ODIgdG9TY2kgICAgMDAwMC4gICAgICAgICAgLT4gIDAKK2RxYmFzNjgzIHRvU2NpICAgICAwMDAuICAgICAgICAgIC0+ICAwCitkcWJhczY4NCB0b1NjaSAgICAgIDAwLiAgICAgICAgICAtPiAgMAorZHFiYXM2ODUgdG9TY2kgICAgICAgMC4gICAgICAgICAgLT4gIDAKK2RxYmFzNjg2IHRvU2NpICArMDAwMDAuICAgICAgICAgIC0+ICAwCitkcWJhczY4NyB0b1NjaSAgLTAwMDAwLiAgICAgICAgICAtPiAtMAorZHFiYXM2ODggdG9TY2kgICswLiAgICAgICAgICAgICAgLT4gIDAKK2RxYmFzNjg5IHRvU2NpICAtMC4gICAgICAgICAgICAgIC0+IC0wCisKKy0tIFNwZWNpYWxzCitkcWJhczcwMCB0b1NjaSAiTmFOIiAgICAgICAgICAgICAtPiBOYU4KK2RxYmFzNzAxIHRvU2NpICJuYW4iICAgICAgICAgICAgIC0+IE5hTgorZHFiYXM3MDIgdG9TY2kgIm5BbiIgICAgICAgICAgICAgLT4gTmFOCitkcWJhczcwMyB0b1NjaSAiTkFOIiAgICAgICAgICAgICAtPiBOYU4KK2RxYmFzNzA0IHRvU2NpICIrTmFOIiAgICAgICAgICAgIC0+IE5hTgorZHFiYXM3MDUgdG9TY2kgIituYW4iICAgICAgICAgICAgLT4gTmFOCitkcWJhczcwNiB0b1NjaSAiK25BbiIgICAgICAgICAgICAtPiBOYU4KK2RxYmFzNzA3IHRvU2NpICIrTkFOIiAgICAgICAgICAgIC0+IE5hTgorZHFiYXM3MDggdG9TY2kgIi1OYU4iICAgICAgICAgICAgLT4gLU5hTgorZHFiYXM3MDkgdG9TY2kgIi1uYW4iICAgICAgICAgICAgLT4gLU5hTgorZHFiYXM3MTAgdG9TY2kgIi1uQW4iICAgICAgICAgICAgLT4gLU5hTgorZHFiYXM3MTEgdG9TY2kgIi1OQU4iICAgICAgICAgICAgLT4gLU5hTgorZHFiYXM3MTIgdG9TY2kgJ05hTjAnICAgICAgICAgICAgLT4gTmFOCitkcWJhczcxMyB0b1NjaSAnTmFOMScgICAgICAgICAgICAtPiBOYU4xCitkcWJhczcxNCB0b1NjaSAnTmFOMTInICAgICAgICAgICAtPiBOYU4xMgorZHFiYXM3MTUgdG9TY2kgJ05hTjEyMycgICAgICAgICAgLT4gTmFOMTIzCitkcWJhczcxNiB0b1NjaSAnTmFOMTIzNCcgICAgICAgICAtPiBOYU4xMjM0CitkcWJhczcxNyB0b1NjaSAnTmFOMDEnICAgICAgICAgICAtPiBOYU4xCitkcWJhczcxOCB0b1NjaSAnTmFOMDEyJyAgICAgICAgICAtPiBOYU4xMgorZHFiYXM3MTkgdG9TY2kgJ05hTjAxMjMnICAgICAgICAgLT4gTmFOMTIzCitkcWJhczcyMCB0b1NjaSAnTmFOMDEyMzQnICAgICAgICAtPiBOYU4xMjM0CitkcWJhczcyMSB0b1NjaSAnTmFOMDAxJyAgICAgICAgICAtPiBOYU4xCitkcWJhczcyMiB0b1NjaSAnTmFOMDAxMicgICAgICAgICAtPiBOYU4xMgorZHFiYXM3MjMgdG9TY2kgJ05hTjAwMTIzJyAgICAgICAgLT4gTmFOMTIzCitkcWJhczcyNCB0b1NjaSAnTmFOMDAxMjM0JyAgICAgICAtPiBOYU4xMjM0CitkcWJhczcyNSB0b1NjaSAnTmFOMTIzNDU2Nzg5MDEyMzQ1Njc4MTIzNDU2Nzg5MDEyMzQ1NicgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczcyNiB0b1NjaSAnTmFOMTIzZSsxJyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNzI3IHRvU2NpICdOYU4xMi40NScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM3MjggdG9TY2kgJ05hTi0xMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CitkcWJhczcyOSB0b1NjaSAnTmFOKzEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworZHFiYXM3MzAgdG9TY2kgInNOYU4iICAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzEgdG9TY2kgInNuYW4iICAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzIgdG9TY2kgIlNuQW4iICAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzMgdG9TY2kgIlNOQU4iICAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzQgdG9TY2kgIitzTmFOIiAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzUgdG9TY2kgIitzbmFuIiAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzYgdG9TY2kgIitTbkFuIiAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzcgdG9TY2kgIitTTkFOIiAgICAgICAgICAgLT4gc05hTgorZHFiYXM3MzggdG9TY2kgIi1zTmFOIiAgICAgICAgICAgLT4gLXNOYU4KK2RxYmFzNzM5IHRvU2NpICItc25hbiIgICAgICAgICAgIC0+IC1zTmFOCitkcWJhczc0MCB0b1NjaSAiLVNuQW4iICAgICAgICAgICAtPiAtc05hTgorZHFiYXM3NDEgdG9TY2kgIi1TTkFOIiAgICAgICAgICAgLT4gLXNOYU4KK2RxYmFzNzQyIHRvU2NpICdzTmFOMDAwMCcgICAgICAgIC0+IHNOYU4KK2RxYmFzNzQzIHRvU2NpICdzTmFONycgICAgICAgICAgIC0+IHNOYU43CitkcWJhczc0NCB0b1NjaSAnc05hTjAwNzIzNCcgICAgICAtPiBzTmFONzIzNAorZHFiYXM3NDUgdG9TY2kgJ3NOYU4xMjM0NTY3ODkwMTIzNDU2Nzg3MjM0NTYxMjM0NTY3ODkwJyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RxYmFzNzQ2IHRvU2NpICdzTmFONzIuNDUnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHFiYXM3NDcgdG9TY2kgJ3NOYU4tNzInICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKK2RxYmFzNzQ4IHRvU2NpICJJbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc0OSB0b1NjaSAiaW5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NTAgdG9TY2kgImlOZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzUxIHRvU2NpICJJTkYiICAgICAgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc1MiB0b1NjaSAiK0luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NTMgdG9TY2kgIitpbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzU0IHRvU2NpICIraU5mIiAgICAgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc1NSB0b1NjaSAiK0lORiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NTYgdG9TY2kgIi1JbmYiICAgICAgICAgICAgLT4gLUluZmluaXR5CitkcWJhczc1NyB0b1NjaSAiLWluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2RxYmFzNzU4IHRvU2NpICItaU5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorZHFiYXM3NTkgdG9TY2kgIi1JTkYiICAgICAgICAgICAgLT4gLUluZmluaXR5CisKK2RxYmFzNzYwIHRvU2NpICJJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc2MSB0b1NjaSAiaW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NjIgdG9TY2kgImlOZkluSXRZIiAgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzYzIHRvU2NpICJJTkZJTklUWSIgICAgICAgIC0+IEluZmluaXR5CitkcWJhczc2NCB0b1NjaSAiK0luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NjUgdG9TY2kgIitpbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkKK2RxYmFzNzY2IHRvU2NpICIraU5mSW5JdFkiICAgICAgIC0+IEluZmluaXR5CitkcWJhczc2NyB0b1NjaSAiK0lORklOSVRZIiAgICAgICAtPiBJbmZpbml0eQorZHFiYXM3NjggdG9TY2kgIi1JbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5CitkcWJhczc2OSB0b1NjaSAiLWluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkKK2RxYmFzNzcwIHRvU2NpICItaU5mSW5JdFkiICAgICAgIC0+IC1JbmZpbml0eQorZHFiYXM3NzEgdG9TY2kgIi1JTkZJTklUWSIgICAgICAgLT4gLUluZmluaXR5CisKKy0tIFNwZWNpYWxzIGFuZCB6ZXJvcyBmb3IgdG9FbmcKK2RxYmFzdDc3MiB0b0VuZyAiTmFOIiAgICAgICAgICAgICAgLT4gTmFOCitkcWJhc3Q3NzMgdG9FbmcgIi1JbmZpbml0eSIgICAgICAgIC0+IC1JbmZpbml0eQorZHFiYXN0Nzc0IHRvRW5nICItc05hTiIgICAgICAgICAgICAtPiAtc05hTgorZHFiYXN0Nzc1IHRvRW5nICItTmFOIiAgICAgICAgICAgICAtPiAtTmFOCitkcWJhc3Q3NzYgdG9FbmcgIitJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5CitkcWJhc3Q3NzggdG9FbmcgIitzTmFOIiAgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzdDc3OSB0b0VuZyAiK05hTiIgICAgICAgICAgICAgLT4gTmFOCitkcWJhc3Q3ODAgdG9FbmcgIklORklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5CitkcWJhc3Q3ODEgdG9FbmcgIlNOQU4iICAgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzdDc4MiB0b0VuZyAiTkFOIiAgICAgICAgICAgICAgLT4gTmFOCitkcWJhc3Q3ODMgdG9FbmcgImluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5CitkcWJhc3Q3ODQgdG9FbmcgInNuYW4iICAgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzdDc4NSB0b0VuZyAibmFuIiAgICAgICAgICAgICAgLT4gTmFOCitkcWJhc3Q3ODYgdG9FbmcgIkluRklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5CitkcWJhc3Q3ODcgdG9FbmcgIlNuQU4iICAgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzdDc4OCB0b0VuZyAibkFOIiAgICAgICAgICAgICAgLT4gTmFOCitkcWJhc3Q3ODkgdG9FbmcgImlOZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5CitkcWJhc3Q3OTAgdG9FbmcgInNOYW4iICAgICAgICAgICAgIC0+IHNOYU4KK2RxYmFzdDc5MSB0b0VuZyAiTmFuIiAgICAgICAgICAgICAgLT4gTmFOCitkcWJhc3Q3OTIgdG9FbmcgIkluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5CitkcWJhc3Q3OTMgdG9FbmcgInNOYU4iICAgICAgICAgICAgIC0+IHNOYU4KKworLS0gWmVybyB0b0VuZywgZXRjLgorZHFiYXN0ODAwIHRvRW5nIDBlKzEgICAgICAgICAgICAgIC0+ICIwLjAwRSszIiAgLS0gZG9jIGV4YW1wbGUKKworZHFiYXN0ODAxIHRvRW5nIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkKK2RxYmFzdDgwMiB0b0VuZyAwLjAwMDAwMDAwICAgICAgICAtPiAwLjAwRS02CitkcWJhc3Q4MDMgdG9FbmcgMC4wMDAwMDAwICAgICAgICAgLT4gMC4wRS02CitkcWJhc3Q4MDQgdG9FbmcgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDAKK2RxYmFzdDgwNSB0b0VuZyAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwCitkcWJhc3Q4MDYgdG9FbmcgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwCitkcWJhc3Q4MDcgdG9FbmcgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDAKK2RxYmFzdDgwOCB0b0VuZyAwLjAwICAgICAgICAgICAgICAtPiAwLjAwCitkcWJhc3Q4MDkgdG9FbmcgMC4wICAgICAgICAgICAgICAgLT4gMC4wCitkcWJhc3Q4MTAgdG9FbmcgIC4wICAgICAgICAgICAgICAgLT4gMC4wCitkcWJhc3Q4MTEgdG9FbmcgMC4gICAgICAgICAgICAgICAgLT4gMAorZHFiYXN0ODEyIHRvRW5nIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjAKK2RxYmFzdDgxMyB0b0VuZyAtMC4gICAgICAgICAgICAgICAtPiAtMAorZHFiYXN0ODE0IHRvRW5nIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjAKK2RxYmFzdDgxNSB0b0VuZyAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMAorZHFiYXN0ODE2IHRvRW5nIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMAorZHFiYXN0ODE3IHRvRW5nIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDAKK2RxYmFzdDgxOCB0b0VuZyAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMAorZHFiYXN0ODE5IHRvRW5nIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMAorZHFiYXN0ODIwIHRvRW5nIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wLjBFLTYKK2RxYmFzdDgyMSB0b0VuZyAtMC4wMDAwMDAwMCAgICAgICAtPiAtMC4wMEUtNgorZHFiYXN0ODIyIHRvRW5nIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05CisKK2RxYmFzdDgzMCB0b0VuZyAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwCitkcWJhc3Q4MzEgdG9FbmcgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wCitkcWJhc3Q4MzIgdG9FbmcgIDAuMDBFKzIgICAgICAgICAgLT4gMAorZHFiYXN0ODMzIHRvRW5nICAwLjAwRSszICAgICAgICAgIC0+IDAuMDBFKzMKK2RxYmFzdDgzNCB0b0VuZyAgMC4wMEUrNCAgICAgICAgICAtPiAwLjBFKzMKK2RxYmFzdDgzNSB0b0VuZyAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszCitkcWJhc3Q4MzYgdG9FbmcgIDAuMDBFKzYgICAgICAgICAgLT4gMC4wMEUrNgorZHFiYXN0ODM3IHRvRW5nICAwLjAwRSs3ICAgICAgICAgIC0+IDAuMEUrNgorZHFiYXN0ODM4IHRvRW5nICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYKK2RxYmFzdDgzOSB0b0VuZyAgMC4wMEUrOSAgICAgICAgICAtPiAwLjAwRSs5CisKK2RxYmFzdDg0MCB0b0VuZyAgMC4wRSswICAgICAgICAgICAtPiAwLjAKK2RxYmFzdDg0MSB0b0VuZyAgMC4wRSsxICAgICAgICAgICAtPiAwCitkcWJhc3Q4NDIgdG9FbmcgIDAuMEUrMiAgICAgICAgICAgLT4gMC4wMEUrMworZHFiYXN0ODQzIHRvRW5nICAwLjBFKzMgICAgICAgICAgIC0+IDAuMEUrMworZHFiYXN0ODQ0IHRvRW5nICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMKK2RxYmFzdDg0NSB0b0VuZyAgMC4wRSs1ICAgICAgICAgICAtPiAwLjAwRSs2CitkcWJhc3Q4NDYgdG9FbmcgIDAuMEUrNiAgICAgICAgICAgLT4gMC4wRSs2CitkcWJhc3Q4NDcgdG9FbmcgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNgorZHFiYXN0ODQ4IHRvRW5nICAwLjBFKzggICAgICAgICAgIC0+IDAuMDBFKzkKK2RxYmFzdDg0OSB0b0VuZyAgMC4wRSs5ICAgICAgICAgICAtPiAwLjBFKzkKKworZHFiYXN0ODUwIHRvRW5nICAwRSswICAgICAgICAgICAgIC0+IDAKK2RxYmFzdDg1MSB0b0VuZyAgMEUrMSAgICAgICAgICAgICAtPiAwLjAwRSszCitkcWJhc3Q4NTIgdG9FbmcgIDBFKzIgICAgICAgICAgICAgLT4gMC4wRSszCitkcWJhc3Q4NTMgdG9FbmcgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMworZHFiYXN0ODU0IHRvRW5nICAwRSs0ICAgICAgICAgICAgIC0+IDAuMDBFKzYKK2RxYmFzdDg1NSB0b0VuZyAgMEUrNSAgICAgICAgICAgICAtPiAwLjBFKzYKK2RxYmFzdDg1NiB0b0VuZyAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2CitkcWJhc3Q4NTcgdG9FbmcgIDBFKzcgICAgICAgICAgICAgLT4gMC4wMEUrOQorZHFiYXN0ODU4IHRvRW5nICAwRSs4ICAgICAgICAgICAgIC0+IDAuMEUrOQorZHFiYXN0ODU5IHRvRW5nICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkKKworZHFiYXN0ODYwIHRvRW5nICAwLjBFLTAgICAgICAgICAgIC0+IDAuMAorZHFiYXN0ODYxIHRvRW5nICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDAKK2RxYmFzdDg2MiB0b0VuZyAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMAorZHFiYXN0ODYzIHRvRW5nICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMAorZHFiYXN0ODY0IHRvRW5nICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDAKK2RxYmFzdDg2NSB0b0VuZyAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMAorZHFiYXN0ODY2IHRvRW5nICAwLjBFLTYgICAgICAgICAgIC0+IDAuMEUtNgorZHFiYXN0ODY3IHRvRW5nICAwLjBFLTcgICAgICAgICAgIC0+IDAuMDBFLTYKK2RxYmFzdDg2OCB0b0VuZyAgMC4wRS04ICAgICAgICAgICAtPiAwRS05CitkcWJhc3Q4NjkgdG9FbmcgIDAuMEUtOSAgICAgICAgICAgLT4gMC4wRS05CisKK2RxYmFzdDg3MCB0b0VuZyAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwCitkcWJhc3Q4NzEgdG9FbmcgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDAKK2RxYmFzdDg3MiB0b0VuZyAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDAKK2RxYmFzdDg3MyB0b0VuZyAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwCitkcWJhc3Q4NzQgdG9FbmcgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDAKK2RxYmFzdDg3NSB0b0VuZyAgMC4wMEUtNSAgICAgICAgICAtPiAwLjBFLTYKK2RxYmFzdDg3NiB0b0VuZyAgMC4wMEUtNiAgICAgICAgICAtPiAwLjAwRS02CitkcWJhc3Q4NzcgdG9FbmcgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQorZHFiYXN0ODc4IHRvRW5nICAwLjAwRS04ICAgICAgICAgIC0+IDAuMEUtOQorZHFiYXN0ODc5IHRvRW5nICAwLjAwRS05ICAgICAgICAgIC0+IDAuMDBFLTkKKworLS0gbG9uZyBpbnB1dCBzdHJpbmdzCitkcWJhczgwMSB0b3NjaSAnMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODAyIHRvc2NpICcwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODAzIHRvc2NpICcwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgwNCB0b3NjaSAnMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODA1IHRvc2NpICcwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODA2IHRvc2NpICcwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgwNyB0b3NjaSAnMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODA4IHRvc2NpICcwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKK2RxYmFzODA5IHRvc2NpICcwMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgxMCB0b3NjaSAnMDAwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKKworZHFiYXM4MTEgdG9zY2kgJzAuMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4xMjM0NTY3ODkwMTIzNDU2CitkcWJhczgxMiB0b3NjaSAnMC4wMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MTMgdG9zY2kgJzAuMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MTQgdG9zY2kgJzAuMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAxMjM0NTY3ODkwMTIzNDU2CitkcWJhczgxNSB0b3NjaSAnMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MTYgdG9zY2kgJzAuMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDAwMTIzNDU2Nzg5MDEyMzQ1NgorZHFiYXM4MTcgdG9zY2kgJzAuMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTcKK2RxYmFzODE4IHRvc2NpICcwLjAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtOAorZHFiYXM4MTkgdG9zY2kgJzAuMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtOQorZHFiYXM4MjAgdG9zY2kgJzAuMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTEwCisKK2RxYmFzODIxIHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MCcgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzM3IEluZXhhY3QgUm91bmRlZAorZHFiYXM4MjIgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMScgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzM4IEluZXhhY3QgUm91bmRlZAorZHFiYXM4MjMgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTInIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSszOSBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzODI0IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMycgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQwIEluZXhhY3QgUm91bmRlZAorZHFiYXM4MjUgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNCcgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQxIEluZXhhY3QgUm91bmRlZAorZHFiYXM4MjYgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNDUnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0MiBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzODI3IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQzIEluZXhhY3QgUm91bmRlZAorZHFiYXM4MjggdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNDU2NycgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQ0IEluZXhhY3QgUm91bmRlZAorZHFiYXM4MjkgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNDU2NzgnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0NSBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3Vibm9ybWFscyBhbmQgb3ZlcmZsb3dzCitkcWJhczkwNiB0b1NjaSAnOTllOTk5OTk5OTk5JyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkwNyB0b1NjaSAnOTk5ZTk5OTk5OTk5OScgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkwOCB0b1NjaSAnMC45ZS05OTk5OTk5OTknICAgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzOTA5IHRvU2NpICcwLjA5ZS05OTk5OTk5OTknICAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MTAgdG9TY2kgJzAuMWUxMDAwMDAwMDAwJyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MTEgdG9TY2kgJzEwZS0xMDAwMDAwMDAwJyAgICAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczkxMiB0b1NjaSAnMC45ZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkxMyB0b1NjaSAnOTllLTk5OTk5OTk5OTknICAgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzOTE0IHRvU2NpICcxMTFlOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTE1IHRvU2NpICcxMTExZS05OTk5OTk5OTk5JyAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MTYgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTk5JyAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczkxNyB0b1NjaSAnN2UxMDAwMDAwMDAwJyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCistLSBuZWdhdGl2ZXMgdGhlIHNhbWUKK2RxYmFzOTE4IHRvU2NpICctOTllOTk5OTk5OTk5JyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkxOSB0b1NjaSAnLTk5OWU5OTk5OTk5OTknICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MjAgdG9TY2kgJy0wLjllLTk5OTk5OTk5OScgICAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MjEgdG9TY2kgJy0wLjA5ZS05OTk5OTk5OTknICAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MjIgdG9TY2kgJy0wLjFlMTAwMDAwMDAwMCcgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTIzIHRvU2NpICctMTBlLTEwMDAwMDAwMDAnICAgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzOTI0IHRvU2NpICctMC45ZTk5OTk5OTk5OTknICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkcWJhczkyNSB0b1NjaSAnLTk5ZS05OTk5OTk5OTk5JyAgICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczkyNiB0b1NjaSAnLTExMWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MjcgdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5JyAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MjggdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5OScgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXM5MjkgdG9TY2kgJy03ZTEwMDAwMDAwMDAnICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gb3ZlcmZsb3cgcmVzdWx0cyBhdCBkaWZmZXJlbnQgcm91bmRpbmcgbW9kZXMKK3JvdW5kaW5nOiAgY2VpbGluZworZHFiYXM5MzAgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTMxIHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIHVwCitkcWJhczkzMiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MzMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgZG93bgorZHFiYXM5MzQgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzOTM1IHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIGZsb29yCitkcWJhczkzNiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MzcgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX3VwCitkcWJhczkzOCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5MzkgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitkcWJhczk0MCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5NDEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgaGFsZl9kb3duCitkcWJhczk0MiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHFiYXM5NDMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX2V2ZW4KKworLS0gTm93IGNoZWNrIDg1NC83NTRyIHNvbWUgc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93IHRvIDAKK2RxYmVtNDAwIHRvU2NpICAxLjAwMDBFLTM4MyAgICAgLT4gMS4wMDAwRS0zODMKK2RxYmVtNDAxIHRvU2NpICAwLjFFLTYxNzIgICAgICAgIC0+IDFFLTYxNzMgICAgICAgU3Vibm9ybWFsCitkcWJlbTQwMiB0b1NjaSAgMC4xMDAwRS02MTcyICAgICAtPiAxLjAwMEUtNjE3MyAgIFN1Ym5vcm1hbAorZHFiZW00MDMgdG9TY2kgIDAuMDEwMEUtNjE3MiAgICAgLT4gMS4wMEUtNjE3NCAgICBTdWJub3JtYWwKK2RxYmVtNDA0IHRvU2NpICAwLjAwMTBFLTYxNzIgICAgIC0+IDEuMEUtNjE3NSAgICAgU3Vibm9ybWFsCitkcWJlbTQwNSB0b1NjaSAgMC4wMDAxRS02MTcyICAgICAtPiAxRS02MTc2ICAgICAgIFN1Ym5vcm1hbAorZHFiZW00MDYgdG9TY2kgIDAuMDAwMTBFLTYxNzIgICAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxYmVtNDA3IHRvU2NpICAwLjAwMDEzRS02MTcyICAgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQwOCB0b1NjaSAgMC4wMDAxNUUtNjE3MiAgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MDkgdG9TY2kgIDAuMDAwMTdFLTYxNzIgICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDEwIHRvU2NpICAwLjAwMDIzRS02MTcyICAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQxMSB0b1NjaSAgMC4wMDAyNUUtNjE3MiAgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MTIgdG9TY2kgIDAuMDAwMjdFLTYxNzIgICAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDEzIHRvU2NpICAwLjAwMDE0OUUtNjE3MiAgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQxNCB0b1NjaSAgMC4wMDAxNTBFLTYxNzIgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MTUgdG9TY2kgIDAuMDAwMTUxRS02MTcyICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDE2IHRvU2NpICAwLjAwMDI0OUUtNjE3MiAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQxNyB0b1NjaSAgMC4wMDAyNTBFLTYxNzIgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MTggdG9TY2kgIDAuMDAwMjUxRS02MTcyICAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDE5IHRvU2NpICAwLjAwMDA5RS02MTcyICAgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQyMCB0b1NjaSAgMC4wMDAwNUUtNjE3MiAgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJlbTQyMSB0b1NjaSAgMC4wMDAwM0UtNjE3MiAgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJlbTQyMiB0b1NjaSAgMC4wMDAwMDlFLTYxNzIgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJlbTQyMyB0b1NjaSAgMC4wMDAwMDVFLTYxNzIgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJlbTQyNCB0b1NjaSAgMC4wMDAwMDNFLTYxNzIgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2RxYmVtNDI1IHRvU2NpICAwLjAwMTA0OUUtNjE3MiAgIC0+IDEuMEUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQyNiB0b1NjaSAgMC4wMDEwNTBFLTYxNzIgICAtPiAxLjBFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MjcgdG9TY2kgIDAuMDAxMDUxRS02MTcyICAgLT4gMS4xRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDI4IHRvU2NpICAwLjAwMTE0OUUtNjE3MiAgIC0+IDEuMUUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQyOSB0b1NjaSAgMC4wMDExNTBFLTYxNzIgICAtPiAxLjJFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MzAgdG9TY2kgIDAuMDAxMTUxRS02MTcyICAgLT4gMS4yRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHFiZW00MzIgdG9TY2kgIDAuMDEwMDQ5RS02MTcyICAgLT4gMS4wMEUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDMzIHRvU2NpICAwLjAxMDA1MEUtNjE3MiAgIC0+IDEuMDBFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQzNCB0b1NjaSAgMC4wMTAwNTFFLTYxNzIgICAtPiAxLjAxRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00MzUgdG9TY2kgIDAuMDEwMTQ5RS02MTcyICAgLT4gMS4wMUUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDM2IHRvU2NpICAwLjAxMDE1MEUtNjE3MiAgIC0+IDEuMDJFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQzNyB0b1NjaSAgMC4wMTAxNTFFLTYxNzIgICAtPiAxLjAyRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkcWJlbTQ0MCB0b1NjaSAgMC4xMDEwM0UtNjE3MiAgICAtPiAxLjAxMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NDEgdG9TY2kgIDAuMTAxMDVFLTYxNzIgICAgLT4gMS4wMTBFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDQyIHRvU2NpICAwLjEwMTA3RS02MTcyICAgIC0+IDEuMDExRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ0MyB0b1NjaSAgMC4xMDExM0UtNjE3MiAgICAtPiAxLjAxMUUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NDQgdG9TY2kgIDAuMTAxMTVFLTYxNzIgICAgLT4gMS4wMTJFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDQ1IHRvU2NpICAwLjEwMTE3RS02MTcyICAgIC0+IDEuMDEyRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxYmVtNDUwIHRvU2NpICAxLjEwNzMwRS02MTczICAgLT4gMS4xMDdFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDUxIHRvU2NpICAxLjEwNzUwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDUyIHRvU2NpICAxLjEwNzcwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDUzIHRvU2NpICAxLjEwODMwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDU0IHRvU2NpICAxLjEwODUwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDU1IHRvU2NpICAxLjEwODcwRS02MTczICAgLT4gMS4xMDlFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbWFrZSBzdXJlIHNpZ24gT0sKK2RxYmVtNDU2IHRvU2NpICAtMC4xMDEwM0UtNjE3MiAgIC0+IC0xLjAxMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NTcgdG9TY2kgIC0wLjEwMTA1RS02MTcyICAgLT4gLTEuMDEwRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ1OCB0b1NjaSAgLTAuMTAxMDdFLTYxNzIgICAtPiAtMS4wMTFFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDU5IHRvU2NpICAtMC4xMDExM0UtNjE3MiAgIC0+IC0xLjAxMUUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NjAgdG9TY2kgIC0wLjEwMTE1RS02MTcyICAgLT4gLTEuMDEyRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ2MSB0b1NjaSAgLTAuMTAxMTdFLTYxNzIgICAtPiAtMS4wMTJFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gJzk5OXMnIGNhc2VzCitkcWJlbTQ2NCB0b1NjaSAgOTk5OTk5RS02MTczICAgICAgICAgLT4gOS45OTk5OUUtNjE2OCBTdWJub3JtYWwKK2RxYmVtNDY1IHRvU2NpICA5OTk5OS4wRS02MTcyICAgICAgICAtPiA5Ljk5OTkwRS02MTY4IFN1Ym5vcm1hbAorZHFiZW00NjYgdG9TY2kgIDk5OTk5LkUtNjE3MiAgICAgICAgIC0+IDkuOTk5OUUtNjE2OCAgU3Vibm9ybWFsCitkcWJlbTQ2NyB0b1NjaSAgOTk5OS45RS02MTcyICAgICAgICAgLT4gOS45OTk5RS02MTY5ICBTdWJub3JtYWwKK2RxYmVtNDY4IHRvU2NpICA5OTkuOTlFLTYxNzIgICAgICAgICAtPiA5Ljk5OTlFLTYxNzAgIFN1Ym5vcm1hbAorZHFiZW00NjkgdG9TY2kgIDk5Ljk5OUUtNjE3MiAgICAgICAgIC0+IDkuOTk5OUUtNjE3MSAgU3Vibm9ybWFsCitkcWJlbTQ3MCB0b1NjaSAgOS45OTk5RS02MTcyICAgICAgICAgLT4gOS45OTk5RS02MTcyICBTdWJub3JtYWwKK2RxYmVtNDcxIHRvU2NpICAwLjk5OTk5RS02MTcyICAgICAgICAtPiAxLjAwMDBFLTYxNzIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDcyIHRvU2NpICAwLjA5OTk5OUUtNjE3MiAgICAgICAtPiAxLjAwMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NzMgdG9TY2kgIDAuMDA5OTk5OUUtNjE3MiAgICAgIC0+IDEuMDBFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWJlbTQ3NCB0b1NjaSAgMC4wMDA5OTk5OUUtNjE3MiAgICAgLT4gMS4wRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxYmVtNDc1IHRvU2NpICAwLjAwMDA5OTk5OUUtNjE3MiAgICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFiZW00NzYgdG9TY2kgIDAuMDAwMDA5OTk5OUUtNjE3MiAgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmVtNDc3IHRvU2NpICAwLjAwMDAwMDk5OTk5RS02MTcyICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJlbTQ3OCB0b1NjaSAgMC4wMDAwMDAwOTk5OTlFLTYxNzIgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBFeHBvbmVudHMgd2l0aCBpbnNpZ25pZmljYW50IGxlYWRpbmcgemVyb3MKK2RxYmFzMTAwMSB0b1NjaSAgMWU5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwMDIgdG9TY2kgIDFlMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTAwMyB0b1NjaSAgMWUwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTAwNCB0b1NjaSAgMWUwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWJhczEwMDUgdG9TY2kgIDFlMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFiYXMxMDA2IHRvU2NpICAxZTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYmFzMTAwNyB0b1NjaSAgMWUtOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXMxMDA4IHRvU2NpICAxZS0wOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczEwMDkgdG9TY2kgIDFlLTAwOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxYmFzMTAxMCB0b1NjaSAgMWUtMDAwOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFiYXMxMDExIHRvU2NpICAxZS0wMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWJhczEwMTIgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK2RxYmFzMTA0MSB0b1NjaSAgICAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNDQ0RS02MTQ0IC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0RS02MTQ0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWJhczEwNDIgdG9TY2kgICAgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjQ0NUUtNjE0NCAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNEUtNjE0NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFiYXMxMDQzIHRvU2NpICAgICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0NDZFLTYxNDQgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjRFLTYxNDQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gY2xhbXBlZCB6ZXJvcyBbc2VlIGFsc28gY2xhbXAuZGVjVGVzdF0KK2RxYmFzMTA3NSB0b1NjaSAgIDBlKzEwMDAwICAtPiAgMEUrNjExMSBDbGFtcGVkCitkcWJhczEwNzYgdG9TY2kgICAwZS0xMDAwMCAgLT4gIDBFLTYxNzYgIENsYW1wZWQKK2RxYmFzMTA3NyB0b1NjaSAgLTBlKzEwMDAwICAtPiAtMEUrNjExMSBDbGFtcGVkCitkcWJhczEwNzggdG9TY2kgIC0wZS0xMDAwMCAgLT4gLTBFLTYxNzYgIENsYW1wZWQKKworLS0gZXh0cmVtZSB2YWx1ZXMgZnJvbSBuZXh0LXdpZGVyCitkcWJhczExMDEgdG9TY2kgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrMTU3Mjg2NCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWJhczExMDIgdG9TY2kgLTFFLTE1NzI4NjMgLT4gLTBFLTYxNzYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZHFiYXMxMTAzIHRvU2NpIC0xRS0xNTcyOTMyIC0+IC0wRS02MTc2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2RxYmFzMTEwNCB0b1NjaSAtMCAtPiAtMAorZHFiYXMxMTA1IHRvU2NpICswIC0+ICAwCitkcWJhczExMDYgdG9TY2kgKzFFLTE1NzI5MzIgLT4gIDBFLTYxNzYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZHFiYXMxMTA3IHRvU2NpICsxRS0xNTcyODYzIC0+ICAwRS02MTc2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2RxYmFzMTEwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSsxNTcyODY0IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNhbm9uaWNhbC5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNhbm9uaWNhbC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNmRiODUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ2Fub25pY2FsLmRlY1Rlc3QKQEAgLTAsMCArMSwzNzIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFDYW5vbmljYWwuZGVjVGVzdCAtLSB0ZXN0IGRlY1F1YWQgY2Fub25pY2FsIHJlc3VsdHMgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIGZpbGUgdGVzdHMgdGhhdCBjb3B5IG9wZXJhdGlvbnMgbGVhdmUgdW5jYW5vbmljYWwgb3BlcmFuZHMKKy0tIHVuY2hhbmdlZCwgYW5kIHZpY2UgdmVyc2EKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFVuY2Fub25pY2FsIGRlY2xldHMgYXJlOiBhYmMsIHdoZXJlOgorLS0gICBhPTEsMiwzCistLSAgIGI9Niw3LGUsZgorLS0gICBjPWUsZgorCistLSBhc3NlcnQgc29tZSBzdGFuZGFyZCAoY2Fub25pY2FsKSB2YWx1ZXM7IHRoaXMgdGVzdHMgdGhhdCBGcm9tU3RyaW5nCistLSBwcm9kdWNlcyBjYW5vbmljYWwgcmVzdWx0cyAobWFueSBtb3JlIGluIGRlY2ltYWxOTikKK2RxY2FuMDAxIGFwcGx5IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDAyIGFwcGx5IDAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjAwMyBhcHBseSAxICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFjYW4wMDQgYXBwbHkgLTEgICAgICAgICAgICAgICAgICAgICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxY2FuMDA1IGFwcGx5IEluZmluaXR5ICAgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjAwNiBhcHBseSAtSW5maW5pdHkgICAgICAgICAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4wMDcgYXBwbHkgLU5hTiAgICAgICAgICAgICAgICAgICAtPiAjZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMDA4IGFwcGx5IC1zTmFOICAgICAgICAgICAgICAgICAgLT4gI2ZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjAwOSBhcHBseSAgTmFOOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDEwIGFwcGx5IHNOYU45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZGVjYW4wMTEgYXBwbHkgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgLT4gIzZlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAxMiBhcHBseSA3LjUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZDAKK2RxY2FuMDEzIGFwcGx5IDkuOTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZgorCistLSBCYXNlIHRlc3RzIGZvciBjYW5vbmljYWwgZW5jb2RpbmdzIChpbmRpdmlkdWFsIG9wZXJhdG9yCistLSBwcm9wYWdhdGlvbiBpcyB0ZXN0ZWQgbGF0ZXIpCisKKy0tIEZpbml0ZXM6IGRlY2xldHMgaW4gY29lZmZpY2llbnQKK2RxY2FuMDIxIGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMjIgY2Fub25pY2FsICAjNzdmZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAyMyBjYW5vbmljYWwgICM3N2ZmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDI0IGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMjUgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAyNiBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDI3IGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMjggY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAyOSBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDMwIGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wMzEgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjAzMiBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKworLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RxY2FuMDYxIGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wNjIgY2Fub25pY2FsICAjN2MwMDBmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA2MyBjYW5vbmljYWwgICM3YzAwMGZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDY0IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wNjUgY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA2NiBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDY3IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wNjggY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA2OSBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDcwIGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZmZmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wNzEgY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RxY2FuMDgxIGNhbm9uaWNhbCAgIzdkMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wODIgY2Fub25pY2FsICAjN2M4MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA4MyBjYW5vbmljYWwgICM3YzQwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDg0IGNhbm9uaWNhbCAgIzdjMjAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wODUgY2Fub25pY2FsICAjN2MxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA4NiBjYW5vbmljYWwgICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDg3IGNhbm9uaWNhbCAgIzdjMDQwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wODggY2Fub25pY2FsICAjN2MwMjBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjA4OSBjYW5vbmljYWwgICM3YzAxMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMDkwIGNhbm9uaWNhbCAgIzdjMDA4ZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4wOTEgY2Fub25pY2FsICAjN2MwMDRmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCisKKy0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZHFjYW4xMDEgY2Fub25pY2FsICAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEwMiBjYW5vbmljYWwgICM3ZTAwMGZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTAzIGNhbm9uaWNhbCAgIzdlMDAwZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMDQgY2Fub25pY2FsICAjN2UwMDBmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEwNSBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTA2IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMDcgY2Fub25pY2FsICAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEwOCBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTA5IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMDAgY2Fub25pY2FsICAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjExMSBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RxY2FuMTIxIGNhbm9uaWNhbCAgIzdmMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMjIgY2Fub25pY2FsICAjN2U4MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEyMyBjYW5vbmljYWwgICM3ZTQwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTI0IGNhbm9uaWNhbCAgIzdlMjAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMjUgY2Fub25pY2FsICAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEyNiBjYW5vbmljYWwgICM3ZTA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTI3IGNhbm9uaWNhbCAgIzdlMDQwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMjggY2Fub25pY2FsICAjN2UwMjBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjEyOSBjYW5vbmljYWwgICM3ZTAxMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuMTMwIGNhbm9uaWNhbCAgIzdlMDA4ZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4xMzEgY2Fub25pY2FsICAjN2UwMDRmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCisKKy0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMKK2RxY2FuMTM3IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xMzggY2Fub25pY2FsICAjNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjEzOSBjYW5vbmljYWwgICM3YTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTQwIGNhbm9uaWNhbCAgIzc4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNDEgY2Fub25pY2FsICAjNzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE0MiBjYW5vbmljYWwgICM3ODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTQzIGNhbm9uaWNhbCAgIzc4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNDQgY2Fub25pY2FsICAjNzgwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE0NSBjYW5vbmljYWwgICM3ODA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTQ2IGNhbm9uaWNhbCAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNDcgY2Fub25pY2FsICAjNzgwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE0OCBjYW5vbmljYWwgICM3ODAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTQ5IGNhbm9uaWNhbCAgIzc4MDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCistLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzIChmaXJzdCwgbGFzdCwgYW5kIGEgZmV3IG90aGVycykKK2RxY2FuMTUwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNTEgY2Fub25pY2FsICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE1MiBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTUzIGNhbm9uaWNhbCAgIzc4MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNTQgY2Fub25pY2FsICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE1NSBjYW5vbmljYWwgICM3ODAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTU2IGNhbm9uaWNhbCAgIzc4MDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNTcgY2Fub25pY2FsICAjNzgwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE1OCBjYW5vbmljYWwgICM3ODAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTU5IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNjAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE2MSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTYyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNjMgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE2NCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTY1IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNjYgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE2NyBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTY4IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNjkgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE3MCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTcxIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNzIgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE3MyBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTc0IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNzUgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE3NiBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTc3IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xNzggY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjE3OSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMTgwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4xODEgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKworLS0gTm93IHRoZSBvcGVyYXRvcnMgLS0gdHJ5aW5nIHRvIGNoZWNrIHBhdGhzIHRoYXQgbWlnaHQgZmFpbCB0bworLS0gY2Fub25pY2FsaXplIHByb3BhZ2F0ZWQgb3BlcmFuZHMKKworLS0tLS0gQWRkOgorLS0gRmluaXRlczogbmV1dHJhbCAwCitkcWNhbjIwMiBhZGQgIDBFKzYxNDQgIzc3ZmZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmICAgICAgICAgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjIwMyBhZGQgICAgICAgICAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmIDBFKzYxNDQgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSB0aW55IHplcm8KK2RxY2FuMjA0IGFkZCAgMEUtNjE3NiAjNzdmZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZAorZHFjYW4yMDUgYWRkICAgICAgICAgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAwRS02MTc2IC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkCistLSB0aW55IG5vbiB6ZXJvCitkcWNhbjIwNiBhZGQgLTFFLTYxNzYgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZmZmZmZmICAgICAgICAgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQKK2RxY2FuMjA3IGFkZCAgICAgICAgICAjNzdmZmNmZmZmZmZmZmZmZmZmZmZmZmZmZmZmM2ZjZmYgLTFFLTYxNzYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAorLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RxY2FuMjExIGFkZCAgMCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjIxMiBhZGQgICAgICM3YzAwMGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkcWNhbjIxMyBhZGQgIDAgICM3YzQwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4yMTQgYWRkICAgICAjN2MwMjBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZHFjYW4yMTUgYWRkICAwICAjN2UwMDBmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCitkcWNhbjIxNiBhZGQgICAgICM3ZTAwM2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RxY2FuMjE3IGFkZCAgMCAgIzdlNTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorZHFjYW4yMTggYWRkICAgICAjN2UwZTBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCistLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzCitkcWNhbjIyMCBhZGQgIDAgICM3ODAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yMjEgYWRkICAgICAjNzg2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMKK2RxY2FuMjIyIGFkZCAgMCAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjIyMyBhZGQgICAgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yMjQgYWRkICAwICAjNzgwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMjI1IGFkZCAgICAgIzc4MDAwMDAwMDAwMGYwMDAwMDAwMDAwMDAwMDAwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjIyNiBhZGQgIDAgICM3ODAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yMjcgYWRkICAgICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTAwMDAgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworLS0tLS0gQ2xhc3M6IFtkb2VzIG5vdCByZXR1cm4gZW5jb2RlZF0KKworLS0tLS0gQ29tcGFyZToKK2RxY2FuMjMxIGNvbXBhcmUgLUluZiAgIDEgICAgIC0+ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxY2FuMjMyIGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMjMzIGNvbXBhcmUgIDEgICAgLUluZiAgIC0+ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxY2FuMjM0IGNvbXBhcmUgICM3YzAxMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmZmZmNmZiAgICAgLTEwMDAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW4yMzUgY29tcGFyZSAgIzdlMDA0ZmYzZmNmZjNmY2ZmM2ZmZmZmZmNmZjNmY2ZmICAgICAtMTAwMCAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCisKKy0tLS0tIENvbXBhcmVTaWc6CitkcWNhbjI0MSBjb21wYXJlc2lnIC1JbmYgICAxICAgICAtPiAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcWNhbjI0MiBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjI0MyBjb21wYXJlc2lnICAxICAgIC1JbmYgICAtPiAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcWNhbjI0NCBjb21wYXJlc2lnICAjN2M0MDBmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtMTAwMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KK2RxY2FuMjQ1IGNvbXBhcmVzaWcgICM3ZTA1MGZmM2ZjZmZmZmZmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0xMDAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgorCistLS0tLSBDb3B5OiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdCistLSBmaW5pdGVzCitkcWNhbjI1MCBjb3B5ICAjNmUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYgLT4gIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmCitkcWNhbjI1MSBjb3B5ICAjZWUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYgLT4gI2VlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmCistLSBOYU5zCitkcWNhbjI1MiBjb3B5ICAjN2MwMDBmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmCitkcWNhbjI1MyBjb3B5ICAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBzTmFOCitkcWNhbjI1NCBjb3B5ICAjN2UwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLT4gIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmCitkcWNhbjI1NSBjb3B5ICAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCistLSBJbmYKK2RxY2FuMjU4IGNvcHkgICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMjU5IGNvcHkgICM3ODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAKKworLS0tLS0gQ29weUFiczogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQorLS0gZmluaXRlcworZHFjYW4yNjAgY29weWFicyAgIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmIC0+ICM2ZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZgorZHFjYW4yNjEgY29weWFicyAgI2VlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICM2ZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZgorLS0gTmFOcworZHFjYW4yNjIgY29weWFicyAgI2ZjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZgorZHFjYW4yNjMgY29weWFicyAgI2ZjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gc05hTgorZHFjYW4yNjQgY29weWFicyAgI2ZlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICM3ZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZgorZHFjYW4yNjUgY29weWFicyAgI2ZlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gSW5mCitkcWNhbjI2OCBjb3B5YWJzICAjZjgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjI2OSBjb3B5YWJzICAjZjgwMDAwMDAwMDAwMDA3MDA3MDA3MDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwNzAwNzAwNzAwMDAwMDAwMDAwCisKKy0tLS0tIENvcHlOZWdhdGU6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KKy0tIGZpbml0ZXMKK2RxY2FuMjcwIGNvcHluZWdhdGUgICM2ZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZiAtPiAjZWUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYKK2RxY2FuMjcxIGNvcHluZWdhdGUgICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjNmUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYKKy0tIE5hTnMKK2RxY2FuMjcyIGNvcHluZWdhdGUgICM3YzAwMGZmM2ZjZmZmZmZmZmZmZmZmM2ZjZmYzZmNmZiAtPiAjZmMwMDBmZjNmY2ZmZmZmZmZmZmZmZjNmY2ZmM2ZjZmYKK2RxY2FuMjczIGNvcHluZWdhdGUgICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjZmMwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIHNOYU4KK2RxY2FuMjc0IGNvcHluZWdhdGUgICM3ZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZiAtPiAjZmUwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYKK2RxY2FuMjc1IGNvcHluZWdhdGUgICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjZmUxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIEluZgorZHFjYW4yNzggY29weW5lZ2F0ZSAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICNmODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yNzkgY29weW5lZ2F0ZSAgIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwIC0+ICNmODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMAorCistLS0tLSBDb3B5U2lnbjogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQorLS0gZmluaXRlcworZHFjYW4yODAgY29weXNpZ24gICM2ZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZiAtMSAtPiAjZWUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYKK2RxY2FuMjgxIGNvcHlzaWduICAjZWUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYgIDEgLT4gIzZlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmCistLSBOYU5zCitkcWNhbjI4MiBjb3B5c2lnbiAgIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0xIC0+ICNmYzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZgorZHFjYW4yODMgY29weXNpZ24gICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgMSAtPiAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIHNOYU4KK2RxY2FuMjg0IGNvcHlzaWduICAjN2UwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLTEgLT4gI2ZlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmCitkcWNhbjI4NSBjb3B5c2lnbiAgIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAxIC0+ICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gSW5mCitkcWNhbjI4OCBjb3B5c2lnbiAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0xIC0+ICNmODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4yODkgY29weXNpZ24gICM3ODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMCAgMSAtPiAjNzgwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAKKworLS0tLS0gTXVsdGlwbHk6CistLSBGaW5pdGVzOiBuZXV0cmFsIDAKK2RxY2FuMzAyIG11bHRpcGx5ICAxICAjNzdmZmZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzdmZmZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzAzIG11bHRpcGx5ICAgICAjNzdmY2ZmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjNzdmY2NmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAKKy0tIG5lZ2F0aXZlCitkcWNhbjMwNiBtdWx0aXBseSAtMSAgIzc3ZmZmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gI2Y3ZmZmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjMwNyBtdWx0aXBseSAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIC0xICAgICAgICAgICAgLT4gI2Y3ZmNjZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwCistLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZAorZHFjYW4zMTEgbXVsdGlwbHkgIDEgICM3YzAzZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMAorZHFjYW4zMTIgbXVsdGlwbHkgICAgICM3YzAzZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMAorLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCitkcWNhbjMxMyBtdWx0aXBseSAgMSAgIzdjNDBmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjMxNCBtdWx0aXBseSAgICAgIzdjNDBmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwCistLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RxY2FuMzE1IG11bHRpcGx5ICAxICAjN2UwMGZmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjN2MwMDBmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgSW52YWxpZF9vcGVyYXRpb24KK2RxY2FuMzE2IG11bHRpcGx5ICAgICAjN2UwMGZmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjN2MwMDBmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RxY2FuMzE3IG11bHRpcGx5ICAxICAjN2U4MGZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgSW52YWxpZF9vcGVyYXRpb24KK2RxY2FuMzE4IG11bHRpcGx5ICAgICAjN2U4MGZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgSW52YWxpZF9vcGVyYXRpb24KKy0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMKK2RxY2FuMzIwIG11bHRpcGx5ICAxICAjNzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzIxIG11bHRpcGx5ICAgICAjNzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMKK2RxY2FuMzIyIG11bHRpcGx5ICAxICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzIzIG11bHRpcGx5ICAgICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzI0IG11bHRpcGx5ICAxICAjNzgwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzI1IG11bHRpcGx5ICAgICAjNzgwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzI2IG11bHRpcGx5ICAxICAjNzgwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxY2FuMzI3IG11bHRpcGx5ICAgICAjNzgwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworLS0tLS0gUXVhbnRpemU6CitkcWNhbjQwMSBxdWFudGl6ZSAgI2VlMDgwZmYzZmNmZjNmY2ZmM2ZmZmZmZmZmZjNmY2ZmIDAgICAgLT4gI2VlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjQwMiBxdWFudGl6ZSAgI2VlMDgwZmYzZmZmZmZmZmZmZmZjZmYzZmNmZjNmY2ZmIDAgICAgLT4gI2VlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjQwMyBxdWFudGl6ZSAgIzc4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZiAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjQwNCBxdWFudGl6ZSAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC1JbmYgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjQxMCBxdWFudGl6ZSAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjQxMSBxdWFudGl6ZSAgI2ZjMDAwZmYzZmNmZmZmZmZmM2ZjZmYzZmNmZjNmY2ZmICAxICAgLT4gI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjQxMiBxdWFudGl6ZSAgIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCitkcWNhbjQxMyBxdWFudGl6ZSAgI2ZlMDAwZmYzZmNmZjNmY2ZmM2ZmZmZmZmNmZjNmY2ZmICAxICAgLT4gI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCisKKy0tLS0tIFN1YnRyYWN0OgorLS0gRmluaXRlczogbmV1dHJhbCAwCitkcWNhbjUwMiBzdWJ0cmFjdCAgMEUrNjE0NCAjNzdmZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjZjdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNTAzIHN1YnRyYWN0ICAgICAgICAgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZiAwRSs2MTQ0IC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gdGlueSB6ZXJvCitkcWNhbjUwNCBzdWJ0cmFjdCAgMEUtNjE3NiAjNzdmZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjZjdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZAorZHFjYW41MDUgc3VidHJhY3QgICAgICAgICAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmIDBFLTYxNzYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKKy0tIHRpbnkgbm9uIHplcm8KK2RxY2FuNTA2IHN1YnRyYWN0IC0xRS02MTc2ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmZmZiAgICAgICAgICAtPiAjZjdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkCitkcWNhbjUwNyBzdWJ0cmFjdCAgICAgICAgICAjNzdmZmNmZmZmZmZmZmZmZmZmZmZmZmZmZmZmM2ZjZmYgLTFFLTYxNzYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAorLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKK2RxY2FuNTExIHN1YnRyYWN0ICAwICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNTEyIHN1YnRyYWN0ICAgICAjN2MwMDBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKy0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQorZHFjYW41MTMgc3VidHJhY3QgIDAgICM3YzQwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW41MTQgc3VidHJhY3QgICAgICM3YzAyMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkCitkcWNhbjUxNSBzdWJ0cmFjdCAgMCAgIzdlMDAwZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorZHFjYW41MTYgc3VidHJhY3QgICAgICM3ZTAwM2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KK2RxY2FuNTE3IHN1YnRyYWN0ICAwICAjN2U1MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCitkcWNhbjUxOCBzdWJ0cmFjdCAgICAgIzdlMGUwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cworZHFjYW41MjAgc3VidHJhY3QgIDAgICM3ODAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW41MjEgc3VidHJhY3QgICAgICM3ODY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cworZHFjYW41MjIgc3VidHJhY3QgIDAgICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW41MjMgc3VidHJhY3QgICAgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW41MjQgc3VidHJhY3QgIDAgICM3ODAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW41MjUgc3VidHJhY3QgICAgICM3ODAwMDAwMDAwMDBmMDAwMDAwMDAwMDAwMDAwMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW41MjYgc3VidHJhY3QgIDAgICM3ODAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMCAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW41Mjcgc3VidHJhY3QgICAgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCistLS0tLSBUb0ludGVncmFsOgorZHFjYW42MDEgdG9pbnRlZ3JhbHggICM2ZTA4MGZmM2ZkZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgLT4gIzZlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkcWNhbjYwMiB0b2ludGVncmFseCAgI2VlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmICAtPiAjZWUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNjAzIHRvaW50ZWdyYWx4ICAjNzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFjYW42MDQgdG9pbnRlZ3JhbHggICM3ODAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWNhbjYxNCB0b2ludGVncmFseCAgIzdjMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKK2RxY2FuNjE1IHRvaW50ZWdyYWx4ICAjZmMwMDBmZjNmY2ZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYgIC0+ICNmYzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZHFjYW42MTYgdG9pbnRlZ3JhbHggICM3ZTAxMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorZHFjYW42MTcgdG9pbnRlZ3JhbHggICNmZTAwMGZmM2ZjZmYzZmNmZjNmZGZmM2ZjZmYzZmNmZiAgLT4gI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgorLS0gdW5jYW5vbmljYWwgMzk5OSwgMzkuOTksIDMuOTksIDAuMzk5LCAgICAgICAgICAgICAgICAgIGFuZCBuZWdhdGl2ZXMKK2RxY2FuNjE4IHRvaW50ZWdyYWx4ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGNmZgorZHFjYW42MTkgdG9pbnRlZ3JhbHggICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwICBJbmV4YWN0IFJvdW5kZWQKK2RxY2FuNjIwIHRvaW50ZWdyYWx4ICAjMjIwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgSW5leGFjdCBSb3VuZGVkCitkcWNhbjYyMSB0b2ludGVncmFseCAgIzIyMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZAorZHFjYW42MjIgdG9pbnRlZ3JhbHggICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwY2ZmCitkcWNhbjYyMyB0b2ludGVncmFseCAgI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAgIEluZXhhY3QgUm91bmRlZAorZHFjYW42MjQgdG9pbnRlZ3JhbHggICNhMjA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICBJbmV4YWN0IFJvdW5kZWQKK2RxY2FuNjI1IHRvaW50ZWdyYWx4ICAjYTIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCisKKworCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ2xhc3MuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDbGFzcy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZTE5YjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ2xhc3MuZGVjVGVzdApAQCAtMCwwICsxLDc3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQ2xhc3MuZGVjVGVzdCAtLSBkZWNRdWFkIENsYXNzIG9wZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gW05ldyAyMDA2LjExLjI3XQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkcWNsYTAwMSAgY2xhc3MgICAgMCAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvCitkcWNsYTAwMiAgY2xhc3MgICAgMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvCitkcWNsYTAwMyAgY2xhc3MgICAgMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvCitkcWNsYTAwNCAgY2xhc3MgICAgMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwKK2RxY2xhMDA1ICBjbGFzcyAgMC4xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbAorZHFjbGEwMDYgIGNsYXNzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAgICAtPiArU3Vibm9ybWFsCitkcWNsYTAwNyAgY2xhc3MgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0+ICtOb3JtYWwKK2RxY2xhMDA4ICBjbGFzcyAgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZHFjbGEwMDkgIGNsYXNzICAgMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkcWNsYTAxMCAgY2xhc3MgICAxRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RxY2xhMDEyICBjbGFzcyAgIDFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZHFjbGEwMTMgIGNsYXNzICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkcWNsYTAxNCAgY2xhc3MgICAyLjUwICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RxY2xhMDE1ICBjbGFzcyAgIDEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAorZHFjbGEwMTYgIGNsYXNzICAgMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCitkcWNsYTAxNyAgY2xhc3MgICAxRSs2MTQ0ICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKK2RxY2xhMDE4ICBjbGFzcyAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgLT4gK05vcm1hbAorZHFjbGEwMTkgIGNsYXNzICAgSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiArSW5maW5pdHkKKworZHFjbGEwMjEgIGNsYXNzICAgLTAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybworZHFjbGEwMjIgIGNsYXNzICAgLTAuMDAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybworZHFjbGEwMjMgIGNsYXNzICAgLTBFKzUgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybworZHFjbGEwMjQgIGNsYXNzICAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsCitkcWNsYTAyNSAgY2xhc3MgIC0wLjFFLTYxNDMgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwKK2RxY2xhMDI2ICBjbGFzcyAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMgICAgLT4gLVN1Ym5vcm1hbAorZHFjbGEwMjcgIGNsYXNzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAtPiAtTm9ybWFsCitkcWNsYTAyOCAgY2xhc3MgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RxY2xhMDI5ICBjbGFzcyAgLTFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZHFjbGEwMzAgIGNsYXNzICAtMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkcWNsYTAzMiAgY2xhc3MgIC0xRS0xICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RxY2xhMDMzICBjbGFzcyAgLTEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZHFjbGEwMzQgIGNsYXNzICAtMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkcWNsYTAzNSAgY2xhc3MgIC0xMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKK2RxY2xhMDM2ICBjbGFzcyAgLTFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAorZHFjbGEwMzcgIGNsYXNzICAtMUUrNjE0NCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCitkcWNsYTA2MTQgIGNsYXNzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAtPiAtTm9ybWFsCitkcWNsYTAzOSAgY2xhc3MgIC1JbmYgICAgICAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorCitkcWNsYTA0MSAgY2xhc3MgICBOYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTgorZHFjbGEwNDIgIGNsYXNzICAtTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KK2RxY2xhMDQzICBjbGFzcyAgK05hTjEyMzQ1ICAgICAgICAgICAgICAgICAgLT4gTmFOCitkcWNsYTA0NCAgY2xhc3MgICBzTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KK2RxY2xhMDQ1ICBjbGFzcyAgLXNOYU4gICAgICAgICAgICAgICAgICAgICAgLT4gc05hTgorZHFjbGEwNDYgIGNsYXNzICArc05hTjEyMzQ1ICAgICAgICAgICAgICAgICAtPiBzTmFOCisKKworCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZS5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmUuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2I1ZWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmUuZGVjVGVzdApAQCAtMCwwICsxLDc1MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUNvbXBhcmUuZGVjVGVzdCAtLSBkZWNRdWFkIGNvbXBhcmlzb24gdGhhdCBhbGxvd3MgcXVpZXQgTmFOcyAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90CistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFjb20wMDEgY29tcGFyZSAgLTIgIC0yICAtPiAwCitkcWNvbTAwMiBjb21wYXJlICAtMiAgLTEgIC0+IC0xCitkcWNvbTAwMyBjb21wYXJlICAtMiAgIDAgIC0+IC0xCitkcWNvbTAwNCBjb21wYXJlICAtMiAgIDEgIC0+IC0xCitkcWNvbTAwNSBjb21wYXJlICAtMiAgIDIgIC0+IC0xCitkcWNvbTAwNiBjb21wYXJlICAtMSAgLTIgIC0+IDEKK2RxY29tMDA3IGNvbXBhcmUgIC0xICAtMSAgLT4gMAorZHFjb20wMDggY29tcGFyZSAgLTEgICAwICAtPiAtMQorZHFjb20wMDkgY29tcGFyZSAgLTEgICAxICAtPiAtMQorZHFjb20wMTAgY29tcGFyZSAgLTEgICAyICAtPiAtMQorZHFjb20wMTEgY29tcGFyZSAgIDAgIC0yICAtPiAxCitkcWNvbTAxMiBjb21wYXJlICAgMCAgLTEgIC0+IDEKK2RxY29tMDEzIGNvbXBhcmUgICAwICAgMCAgLT4gMAorZHFjb20wMTQgY29tcGFyZSAgIDAgICAxICAtPiAtMQorZHFjb20wMTUgY29tcGFyZSAgIDAgICAyICAtPiAtMQorZHFjb20wMTYgY29tcGFyZSAgIDEgIC0yICAtPiAxCitkcWNvbTAxNyBjb21wYXJlICAgMSAgLTEgIC0+IDEKK2RxY29tMDE4IGNvbXBhcmUgICAxICAgMCAgLT4gMQorZHFjb20wMTkgY29tcGFyZSAgIDEgICAxICAtPiAwCitkcWNvbTAyMCBjb21wYXJlICAgMSAgIDIgIC0+IC0xCitkcWNvbTAyMSBjb21wYXJlICAgMiAgLTIgIC0+IDEKK2RxY29tMDIyIGNvbXBhcmUgICAyICAtMSAgLT4gMQorZHFjb20wMjMgY29tcGFyZSAgIDIgICAwICAtPiAxCitkcWNvbTAyNSBjb21wYXJlICAgMiAgIDEgIC0+IDEKK2RxY29tMDI2IGNvbXBhcmUgICAyICAgMiAgLT4gMAorCitkcWNvbTAzMSBjb21wYXJlICAtMjAgIC0yMCAgLT4gMAorZHFjb20wMzIgY29tcGFyZSAgLTIwICAtMTAgIC0+IC0xCitkcWNvbTAzMyBjb21wYXJlICAtMjAgICAwMCAgLT4gLTEKK2RxY29tMDM0IGNvbXBhcmUgIC0yMCAgIDEwICAtPiAtMQorZHFjb20wMzUgY29tcGFyZSAgLTIwICAgMjAgIC0+IC0xCitkcWNvbTAzNiBjb21wYXJlICAtMTAgIC0yMCAgLT4gMQorZHFjb20wMzcgY29tcGFyZSAgLTEwICAtMTAgIC0+IDAKK2RxY29tMDM4IGNvbXBhcmUgIC0xMCAgIDAwICAtPiAtMQorZHFjb20wMzkgY29tcGFyZSAgLTEwICAgMTAgIC0+IC0xCitkcWNvbTA0MCBjb21wYXJlICAtMTAgICAyMCAgLT4gLTEKK2RxY29tMDQxIGNvbXBhcmUgICAwMCAgLTIwICAtPiAxCitkcWNvbTA0MiBjb21wYXJlICAgMDAgIC0xMCAgLT4gMQorZHFjb20wNDMgY29tcGFyZSAgIDAwICAgMDAgIC0+IDAKK2RxY29tMDQ0IGNvbXBhcmUgICAwMCAgIDEwICAtPiAtMQorZHFjb20wNDUgY29tcGFyZSAgIDAwICAgMjAgIC0+IC0xCitkcWNvbTA0NiBjb21wYXJlICAgMTAgIC0yMCAgLT4gMQorZHFjb20wNDcgY29tcGFyZSAgIDEwICAtMTAgIC0+IDEKK2RxY29tMDQ4IGNvbXBhcmUgICAxMCAgIDAwICAtPiAxCitkcWNvbTA0OSBjb21wYXJlICAgMTAgICAxMCAgLT4gMAorZHFjb20wNTAgY29tcGFyZSAgIDEwICAgMjAgIC0+IC0xCitkcWNvbTA1MSBjb21wYXJlICAgMjAgIC0yMCAgLT4gMQorZHFjb20wNTIgY29tcGFyZSAgIDIwICAtMTAgIC0+IDEKK2RxY29tMDUzIGNvbXBhcmUgICAyMCAgIDAwICAtPiAxCitkcWNvbTA1NSBjb21wYXJlICAgMjAgICAxMCAgLT4gMQorZHFjb20wNTYgY29tcGFyZSAgIDIwICAgMjAgIC0+IDAKKworZHFjb20wNjEgY29tcGFyZSAgLTIuMCAgLTIuMCAgLT4gMAorZHFjb20wNjIgY29tcGFyZSAgLTIuMCAgLTEuMCAgLT4gLTEKK2RxY29tMDYzIGNvbXBhcmUgIC0yLjAgICAwLjAgIC0+IC0xCitkcWNvbTA2NCBjb21wYXJlICAtMi4wICAgMS4wICAtPiAtMQorZHFjb20wNjUgY29tcGFyZSAgLTIuMCAgIDIuMCAgLT4gLTEKK2RxY29tMDY2IGNvbXBhcmUgIC0xLjAgIC0yLjAgIC0+IDEKK2RxY29tMDY3IGNvbXBhcmUgIC0xLjAgIC0xLjAgIC0+IDAKK2RxY29tMDY4IGNvbXBhcmUgIC0xLjAgICAwLjAgIC0+IC0xCitkcWNvbTA2OSBjb21wYXJlICAtMS4wICAgMS4wICAtPiAtMQorZHFjb20wNzAgY29tcGFyZSAgLTEuMCAgIDIuMCAgLT4gLTEKK2RxY29tMDcxIGNvbXBhcmUgICAwLjAgIC0yLjAgIC0+IDEKK2RxY29tMDcyIGNvbXBhcmUgICAwLjAgIC0xLjAgIC0+IDEKK2RxY29tMDczIGNvbXBhcmUgICAwLjAgICAwLjAgIC0+IDAKK2RxY29tMDc0IGNvbXBhcmUgICAwLjAgICAxLjAgIC0+IC0xCitkcWNvbTA3NSBjb21wYXJlICAgMC4wICAgMi4wICAtPiAtMQorZHFjb20wNzYgY29tcGFyZSAgIDEuMCAgLTIuMCAgLT4gMQorZHFjb20wNzcgY29tcGFyZSAgIDEuMCAgLTEuMCAgLT4gMQorZHFjb20wNzggY29tcGFyZSAgIDEuMCAgIDAuMCAgLT4gMQorZHFjb20wNzkgY29tcGFyZSAgIDEuMCAgIDEuMCAgLT4gMAorZHFjb20wODAgY29tcGFyZSAgIDEuMCAgIDIuMCAgLT4gLTEKK2RxY29tMDgxIGNvbXBhcmUgICAyLjAgIC0yLjAgIC0+IDEKK2RxY29tMDgyIGNvbXBhcmUgICAyLjAgIC0xLjAgIC0+IDEKK2RxY29tMDgzIGNvbXBhcmUgICAyLjAgICAwLjAgIC0+IDEKK2RxY29tMDg1IGNvbXBhcmUgICAyLjAgICAxLjAgIC0+IDEKK2RxY29tMDg2IGNvbXBhcmUgICAyLjAgICAyLjAgIC0+IDAKKworLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCitkcWNvbTA5MCBjb21wYXJlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gMAorZHFjb20wOTEgY29tcGFyZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC0xCitkcWNvbTA5MiBjb21wYXJlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQorZHFjb20wOTMgY29tcGFyZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDAKKworLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCitkcWNvbTEwMCBjb21wYXJlICAgNy4wICAgIDcuMCAgICAtPiAwCitkcWNvbTEwMSBjb21wYXJlICAgNy4wICAgIDcgICAgICAtPiAwCitkcWNvbTEwMiBjb21wYXJlICAgNyAgICAgIDcuMCAgICAtPiAwCitkcWNvbTEwMyBjb21wYXJlICAgN0UrMCAgIDcuMCAgICAtPiAwCitkcWNvbTEwNCBjb21wYXJlICAgNzBFLTEgIDcuMCAgICAtPiAwCitkcWNvbTEwNSBjb21wYXJlICAgMC43RSsxIDcgICAgICAtPiAwCitkcWNvbTEwNiBjb21wYXJlICAgNzBFLTEgIDcgICAgICAtPiAwCitkcWNvbTEwNyBjb21wYXJlICAgNy4wICAgIDdFKzAgICAtPiAwCitkcWNvbTEwOCBjb21wYXJlICAgNy4wICAgIDcwRS0xICAtPiAwCitkcWNvbTEwOSBjb21wYXJlICAgNyAgICAgIDAuN0UrMSAtPiAwCitkcWNvbTExMCBjb21wYXJlICAgNyAgICAgIDcwRS0xICAtPiAwCisKK2RxY29tMTIwIGNvbXBhcmUgICA4LjAgICAgNy4wICAgIC0+IDEKK2RxY29tMTIxIGNvbXBhcmUgICA4LjAgICAgNyAgICAgIC0+IDEKK2RxY29tMTIyIGNvbXBhcmUgICA4ICAgICAgNy4wICAgIC0+IDEKK2RxY29tMTIzIGNvbXBhcmUgICA4RSswICAgNy4wICAgIC0+IDEKK2RxY29tMTI0IGNvbXBhcmUgICA4MEUtMSAgNy4wICAgIC0+IDEKK2RxY29tMTI1IGNvbXBhcmUgICAwLjhFKzEgNyAgICAgIC0+IDEKK2RxY29tMTI2IGNvbXBhcmUgICA4MEUtMSAgNyAgICAgIC0+IDEKK2RxY29tMTI3IGNvbXBhcmUgICA4LjAgICAgN0UrMCAgIC0+IDEKK2RxY29tMTI4IGNvbXBhcmUgICA4LjAgICAgNzBFLTEgIC0+IDEKK2RxY29tMTI5IGNvbXBhcmUgICA4ICAgICAgMC43RSsxICAtPiAxCitkcWNvbTEzMCBjb21wYXJlICAgOCAgICAgIDcwRS0xICAtPiAxCisKK2RxY29tMTQwIGNvbXBhcmUgICA4LjAgICAgOS4wICAgIC0+IC0xCitkcWNvbTE0MSBjb21wYXJlICAgOC4wICAgIDkgICAgICAtPiAtMQorZHFjb20xNDIgY29tcGFyZSAgIDggICAgICA5LjAgICAgLT4gLTEKK2RxY29tMTQzIGNvbXBhcmUgICA4RSswICAgOS4wICAgIC0+IC0xCitkcWNvbTE0NCBjb21wYXJlICAgODBFLTEgIDkuMCAgICAtPiAtMQorZHFjb20xNDUgY29tcGFyZSAgIDAuOEUrMSA5ICAgICAgLT4gLTEKK2RxY29tMTQ2IGNvbXBhcmUgICA4MEUtMSAgOSAgICAgIC0+IC0xCitkcWNvbTE0NyBjb21wYXJlICAgOC4wICAgIDlFKzAgICAtPiAtMQorZHFjb20xNDggY29tcGFyZSAgIDguMCAgICA5MEUtMSAgLT4gLTEKK2RxY29tMTQ5IGNvbXBhcmUgICA4ICAgICAgMC45RSsxIC0+IC0xCitkcWNvbTE1MCBjb21wYXJlICAgOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCitkcWNvbTIwMCBjb21wYXJlICAtNy4wICAgIDcuMCAgICAtPiAtMQorZHFjb20yMDEgY29tcGFyZSAgLTcuMCAgICA3ICAgICAgLT4gLTEKK2RxY29tMjAyIGNvbXBhcmUgIC03ICAgICAgNy4wICAgIC0+IC0xCitkcWNvbTIwMyBjb21wYXJlICAtN0UrMCAgIDcuMCAgICAtPiAtMQorZHFjb20yMDQgY29tcGFyZSAgLTcwRS0xICA3LjAgICAgLT4gLTEKK2RxY29tMjA1IGNvbXBhcmUgIC0wLjdFKzEgNyAgICAgIC0+IC0xCitkcWNvbTIwNiBjb21wYXJlICAtNzBFLTEgIDcgICAgICAtPiAtMQorZHFjb20yMDcgY29tcGFyZSAgLTcuMCAgICA3RSswICAgLT4gLTEKK2RxY29tMjA4IGNvbXBhcmUgIC03LjAgICAgNzBFLTEgIC0+IC0xCitkcWNvbTIwOSBjb21wYXJlICAtNyAgICAgIDAuN0UrMSAtPiAtMQorZHFjb20yMTAgY29tcGFyZSAgLTcgICAgICA3MEUtMSAgLT4gLTEKKworZHFjb20yMjAgY29tcGFyZSAgLTguMCAgICA3LjAgICAgLT4gLTEKK2RxY29tMjIxIGNvbXBhcmUgIC04LjAgICAgNyAgICAgIC0+IC0xCitkcWNvbTIyMiBjb21wYXJlICAtOCAgICAgIDcuMCAgICAtPiAtMQorZHFjb20yMjMgY29tcGFyZSAgLThFKzAgICA3LjAgICAgLT4gLTEKK2RxY29tMjI0IGNvbXBhcmUgIC04MEUtMSAgNy4wICAgIC0+IC0xCitkcWNvbTIyNSBjb21wYXJlICAtMC44RSsxIDcgICAgICAtPiAtMQorZHFjb20yMjYgY29tcGFyZSAgLTgwRS0xICA3ICAgICAgLT4gLTEKK2RxY29tMjI3IGNvbXBhcmUgIC04LjAgICAgN0UrMCAgIC0+IC0xCitkcWNvbTIyOCBjb21wYXJlICAtOC4wICAgIDcwRS0xICAtPiAtMQorZHFjb20yMjkgY29tcGFyZSAgLTggICAgICAwLjdFKzEgLT4gLTEKK2RxY29tMjMwIGNvbXBhcmUgIC04ICAgICAgNzBFLTEgIC0+IC0xCisKK2RxY29tMjQwIGNvbXBhcmUgIC04LjAgICAgOS4wICAgIC0+IC0xCitkcWNvbTI0MSBjb21wYXJlICAtOC4wICAgIDkgICAgICAtPiAtMQorZHFjb20yNDIgY29tcGFyZSAgLTggICAgICA5LjAgICAgLT4gLTEKK2RxY29tMjQzIGNvbXBhcmUgIC04RSswICAgOS4wICAgIC0+IC0xCitkcWNvbTI0NCBjb21wYXJlICAtODBFLTEgIDkuMCAgICAtPiAtMQorZHFjb20yNDUgY29tcGFyZSAgLTAuOEUrMSA5ICAgICAgLT4gLTEKK2RxY29tMjQ2IGNvbXBhcmUgIC04MEUtMSAgOSAgICAgIC0+IC0xCitkcWNvbTI0NyBjb21wYXJlICAtOC4wICAgIDlFKzAgICAtPiAtMQorZHFjb20yNDggY29tcGFyZSAgLTguMCAgICA5MEUtMSAgLT4gLTEKK2RxY29tMjQ5IGNvbXBhcmUgIC04ICAgICAgMC45RSsxIC0+IC0xCitkcWNvbTI1MCBjb21wYXJlICAtOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCitkcWNvbTMwMCBjb21wYXJlICAgNy4wICAgIC03LjAgICAgLT4gMQorZHFjb20zMDEgY29tcGFyZSAgIDcuMCAgICAtNyAgICAgIC0+IDEKK2RxY29tMzAyIGNvbXBhcmUgICA3ICAgICAgLTcuMCAgICAtPiAxCitkcWNvbTMwMyBjb21wYXJlICAgN0UrMCAgIC03LjAgICAgLT4gMQorZHFjb20zMDQgY29tcGFyZSAgIDcwRS0xICAtNy4wICAgIC0+IDEKK2RxY29tMzA1IGNvbXBhcmUgICAuN0UrMSAgLTcgICAgICAtPiAxCitkcWNvbTMwNiBjb21wYXJlICAgNzBFLTEgIC03ICAgICAgLT4gMQorZHFjb20zMDcgY29tcGFyZSAgIDcuMCAgICAtN0UrMCAgIC0+IDEKK2RxY29tMzA4IGNvbXBhcmUgICA3LjAgICAgLTcwRS0xICAtPiAxCitkcWNvbTMwOSBjb21wYXJlICAgNyAgICAgIC0uN0UrMSAgLT4gMQorZHFjb20zMTAgY29tcGFyZSAgIDcgICAgICAtNzBFLTEgIC0+IDEKKworZHFjb20zMjAgY29tcGFyZSAgIDguMCAgICAtNy4wICAgIC0+IDEKK2RxY29tMzIxIGNvbXBhcmUgICA4LjAgICAgLTcgICAgICAtPiAxCitkcWNvbTMyMiBjb21wYXJlICAgOCAgICAgIC03LjAgICAgLT4gMQorZHFjb20zMjMgY29tcGFyZSAgIDhFKzAgICAtNy4wICAgIC0+IDEKK2RxY29tMzI0IGNvbXBhcmUgICA4MEUtMSAgLTcuMCAgICAtPiAxCitkcWNvbTMyNSBjb21wYXJlICAgLjhFKzEgIC03ICAgICAgLT4gMQorZHFjb20zMjYgY29tcGFyZSAgIDgwRS0xICAtNyAgICAgIC0+IDEKK2RxY29tMzI3IGNvbXBhcmUgICA4LjAgICAgLTdFKzAgICAtPiAxCitkcWNvbTMyOCBjb21wYXJlICAgOC4wICAgIC03MEUtMSAgLT4gMQorZHFjb20zMjkgY29tcGFyZSAgIDggICAgICAtLjdFKzEgIC0+IDEKK2RxY29tMzMwIGNvbXBhcmUgICA4ICAgICAgLTcwRS0xICAtPiAxCisKK2RxY29tMzQwIGNvbXBhcmUgICA4LjAgICAgLTkuMCAgICAtPiAxCitkcWNvbTM0MSBjb21wYXJlICAgOC4wICAgIC05ICAgICAgLT4gMQorZHFjb20zNDIgY29tcGFyZSAgIDggICAgICAtOS4wICAgIC0+IDEKK2RxY29tMzQzIGNvbXBhcmUgICA4RSswICAgLTkuMCAgICAtPiAxCitkcWNvbTM0NCBjb21wYXJlICAgODBFLTEgIC05LjAgICAgLT4gMQorZHFjb20zNDUgY29tcGFyZSAgIC44RSsxICAtOSAgICAgIC0+IDEKK2RxY29tMzQ2IGNvbXBhcmUgICA4MEUtMSAgLTkgICAgICAtPiAxCitkcWNvbTM0NyBjb21wYXJlICAgOC4wICAgIC05RSswICAgLT4gMQorZHFjb20zNDggY29tcGFyZSAgIDguMCAgICAtOTBFLTEgIC0+IDEKK2RxY29tMzQ5IGNvbXBhcmUgICA4ICAgICAgLS45RSsxICAtPiAxCitkcWNvbTM1MCBjb21wYXJlICAgOCAgICAgIC05MEUtMSAgLT4gMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCitkcWNvbTQwMCBjb21wYXJlICAgLTcuMCAgICAtNy4wICAgIC0+IDAKK2RxY29tNDAxIGNvbXBhcmUgICAtNy4wICAgIC03ICAgICAgLT4gMAorZHFjb200MDIgY29tcGFyZSAgIC03ICAgICAgLTcuMCAgICAtPiAwCitkcWNvbTQwMyBjb21wYXJlICAgLTdFKzAgICAtNy4wICAgIC0+IDAKK2RxY29tNDA0IGNvbXBhcmUgICAtNzBFLTEgIC03LjAgICAgLT4gMAorZHFjb200MDUgY29tcGFyZSAgIC0uN0UrMSAgLTcgICAgICAtPiAwCitkcWNvbTQwNiBjb21wYXJlICAgLTcwRS0xICAtNyAgICAgIC0+IDAKK2RxY29tNDA3IGNvbXBhcmUgICAtNy4wICAgIC03RSswICAgLT4gMAorZHFjb200MDggY29tcGFyZSAgIC03LjAgICAgLTcwRS0xICAtPiAwCitkcWNvbTQwOSBjb21wYXJlICAgLTcgICAgICAtLjdFKzEgIC0+IDAKK2RxY29tNDEwIGNvbXBhcmUgICAtNyAgICAgIC03MEUtMSAgLT4gMAorCitkcWNvbTQyMCBjb21wYXJlICAgLTguMCAgICAtNy4wICAgIC0+IC0xCitkcWNvbTQyMSBjb21wYXJlICAgLTguMCAgICAtNyAgICAgIC0+IC0xCitkcWNvbTQyMiBjb21wYXJlICAgLTggICAgICAtNy4wICAgIC0+IC0xCitkcWNvbTQyMyBjb21wYXJlICAgLThFKzAgICAtNy4wICAgIC0+IC0xCitkcWNvbTQyNCBjb21wYXJlICAgLTgwRS0xICAtNy4wICAgIC0+IC0xCitkcWNvbTQyNSBjb21wYXJlICAgLS44RSsxICAtNyAgICAgIC0+IC0xCitkcWNvbTQyNiBjb21wYXJlICAgLTgwRS0xICAtNyAgICAgIC0+IC0xCitkcWNvbTQyNyBjb21wYXJlICAgLTguMCAgICAtN0UrMCAgIC0+IC0xCitkcWNvbTQyOCBjb21wYXJlICAgLTguMCAgICAtNzBFLTEgIC0+IC0xCitkcWNvbTQyOSBjb21wYXJlICAgLTggICAgICAtLjdFKzEgIC0+IC0xCitkcWNvbTQzMCBjb21wYXJlICAgLTggICAgICAtNzBFLTEgIC0+IC0xCisKK2RxY29tNDQwIGNvbXBhcmUgICAtOC4wICAgIC05LjAgICAgLT4gMQorZHFjb200NDEgY29tcGFyZSAgIC04LjAgICAgLTkgICAgICAtPiAxCitkcWNvbTQ0MiBjb21wYXJlICAgLTggICAgICAtOS4wICAgIC0+IDEKK2RxY29tNDQzIGNvbXBhcmUgICAtOEUrMCAgIC05LjAgICAgLT4gMQorZHFjb200NDQgY29tcGFyZSAgIC04MEUtMSAgLTkuMCAgICAtPiAxCitkcWNvbTQ0NSBjb21wYXJlICAgLS44RSsxICAtOSAgICAgIC0+IDEKK2RxY29tNDQ2IGNvbXBhcmUgICAtODBFLTEgIC05ICAgICAgLT4gMQorZHFjb200NDcgY29tcGFyZSAgIC04LjAgICAgLTlFKzAgICAtPiAxCitkcWNvbTQ0OCBjb21wYXJlICAgLTguMCAgICAtOTBFLTEgIC0+IDEKK2RxY29tNDQ5IGNvbXBhcmUgICAtOCAgICAgIC0uOUUrMSAgLT4gMQorZHFjb200NTAgY29tcGFyZSAgIC04ICAgICAgLTkwRS0xICAtPiAxCisKKy0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbgorZHFjb200NTEgY29tcGFyZSAgICAgIDEuMCAgICAgICAwLjEgIC0+IDEKK2RxY29tNDUyIGNvbXBhcmUgICAgICAwLjEgICAgICAgMS4wICAtPiAtMQorZHFjb200NTMgY29tcGFyZSAgICAgMTAuMCAgICAgICAwLjEgIC0+IDEKK2RxY29tNDU0IGNvbXBhcmUgICAgICAwLjEgICAgICAxMC4wICAtPiAtMQorZHFjb200NTUgY29tcGFyZSAgICAgIDEwMCAgICAgICAxLjAgIC0+IDEKK2RxY29tNDU2IGNvbXBhcmUgICAgICAxLjAgICAgICAgMTAwICAtPiAtMQorZHFjb200NTcgY29tcGFyZSAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDEKK2RxY29tNDU4IGNvbXBhcmUgICAgIDEwLjAgICAgICAxMDAwICAtPiAtMQorZHFjb200NTkgY29tcGFyZSAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDEKK2RxY29tNDYwIGNvbXBhcmUgICAgMTAwLjAgICAgIDEwMDAwICAtPiAtMQorZHFjb200NjEgY29tcGFyZSAgIDEwMDAwMCAgICAxMDAwLjAgIC0+IDEKK2RxY29tNDYyIGNvbXBhcmUgICAxMDAwLjAgICAgMTAwMDAwICAtPiAtMQorZHFjb200NjMgY29tcGFyZSAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDEKK2RxY29tNDY0IGNvbXBhcmUgIDEwMDAwLjAgICAxMDAwMDAwICAtPiAtMQorCistLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0KK2RxY29tNDczIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKK2RxY29tNDc0IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorZHFjb200NzUgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKK2RxY29tNDc2IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKK2RxY29tNDc3IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjb200NzggY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKK2RxY29tNDc5IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKK2RxY29tNDgwIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorZHFjb200ODEgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKK2RxY29tNDgyIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKK2RxY29tNDgzIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAorZHFjb200ODcgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwMEUrODkgLT4gMAorZHFjb200ODggY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwRS04OSAtPiAwCitkcWNvbTQ4OSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMEUrODkgLT4gMAorZHFjb200OTAgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMEUtODkgLT4gMAorZHFjb200OTEgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwRSs4OSAtPiAwCitkcWNvbTQ5MiBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMEUtODkgLT4gMAorZHFjb200OTMgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMEUrODkgLT4gMAorZHFjb200OTQgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwRS04OSAtPiAwCitkcWNvbTQ5NSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMEUrODkgLT4gMAorZHFjb200OTYgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MEUtODkgLT4gMAorZHFjb200OTcgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCisKKy0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwKK2RxY29tNTAwIGNvbXBhcmUgICAgMSAgICAgMUUtMTUgICAgLT4gMQorZHFjb201MDEgY29tcGFyZSAgICAxICAgICAxRS0xNCAgICAtPiAxCitkcWNvbTUwMiBjb21wYXJlICAgIDEgICAgIDFFLTEzICAgIC0+IDEKK2RxY29tNTAzIGNvbXBhcmUgICAgMSAgICAgMUUtMTIgICAgLT4gMQorZHFjb201MDQgY29tcGFyZSAgICAxICAgICAxRS0xMSAgICAtPiAxCitkcWNvbTUwNSBjb21wYXJlICAgIDEgICAgIDFFLTEwICAgIC0+IDEKK2RxY29tNTA2IGNvbXBhcmUgICAgMSAgICAgMUUtOSAgICAgLT4gMQorZHFjb201MDcgY29tcGFyZSAgICAxICAgICAxRS04ICAgICAtPiAxCitkcWNvbTUwOCBjb21wYXJlICAgIDEgICAgIDFFLTcgICAgIC0+IDEKK2RxY29tNTA5IGNvbXBhcmUgICAgMSAgICAgMUUtNiAgICAgLT4gMQorZHFjb201MTAgY29tcGFyZSAgICAxICAgICAxRS01ICAgICAtPiAxCitkcWNvbTUxMSBjb21wYXJlICAgIDEgICAgIDFFLTQgICAgIC0+IDEKK2RxY29tNTEyIGNvbXBhcmUgICAgMSAgICAgMUUtMyAgICAgLT4gMQorZHFjb201MTMgY29tcGFyZSAgICAxICAgICAxRS0yICAgICAtPiAxCitkcWNvbTUxNCBjb21wYXJlICAgIDEgICAgIDFFLTEgICAgIC0+IDEKK2RxY29tNTE1IGNvbXBhcmUgICAgMSAgICAgMUUtMCAgICAgLT4gMAorZHFjb201MTYgY29tcGFyZSAgICAxICAgICAxRSsxICAgICAtPiAtMQorZHFjb201MTcgY29tcGFyZSAgICAxICAgICAxRSsyICAgICAtPiAtMQorZHFjb201MTggY29tcGFyZSAgICAxICAgICAxRSszICAgICAtPiAtMQorZHFjb201MTkgY29tcGFyZSAgICAxICAgICAxRSs0ICAgICAtPiAtMQorZHFjb201MjEgY29tcGFyZSAgICAxICAgICAxRSs1ICAgICAtPiAtMQorZHFjb201MjIgY29tcGFyZSAgICAxICAgICAxRSs2ICAgICAtPiAtMQorZHFjb201MjMgY29tcGFyZSAgICAxICAgICAxRSs3ICAgICAtPiAtMQorZHFjb201MjQgY29tcGFyZSAgICAxICAgICAxRSs4ICAgICAtPiAtMQorZHFjb201MjUgY29tcGFyZSAgICAxICAgICAxRSs5ICAgICAtPiAtMQorZHFjb201MjYgY29tcGFyZSAgICAxICAgICAxRSsxMCAgICAtPiAtMQorZHFjb201MjcgY29tcGFyZSAgICAxICAgICAxRSsxMSAgICAtPiAtMQorZHFjb201MjggY29tcGFyZSAgICAxICAgICAxRSsxMiAgICAtPiAtMQorZHFjb201MjkgY29tcGFyZSAgICAxICAgICAxRSsxMyAgICAtPiAtMQorZHFjb201MzAgY29tcGFyZSAgICAxICAgICAxRSsxNCAgICAtPiAtMQorZHFjb201MzEgY29tcGFyZSAgICAxICAgICAxRSsxNSAgICAtPiAtMQorLS0gTFIgc3dhcAorZHFjb201NDAgY29tcGFyZSAgICAxRS0xNSAgMSAgICAgICAtPiAtMQorZHFjb201NDEgY29tcGFyZSAgICAxRS0xNCAgMSAgICAgICAtPiAtMQorZHFjb201NDIgY29tcGFyZSAgICAxRS0xMyAgMSAgICAgICAtPiAtMQorZHFjb201NDMgY29tcGFyZSAgICAxRS0xMiAgMSAgICAgICAtPiAtMQorZHFjb201NDQgY29tcGFyZSAgICAxRS0xMSAgMSAgICAgICAtPiAtMQorZHFjb201NDUgY29tcGFyZSAgICAxRS0xMCAgMSAgICAgICAtPiAtMQorZHFjb201NDYgY29tcGFyZSAgICAxRS05ICAgMSAgICAgICAtPiAtMQorZHFjb201NDcgY29tcGFyZSAgICAxRS04ICAgMSAgICAgICAtPiAtMQorZHFjb201NDggY29tcGFyZSAgICAxRS03ICAgMSAgICAgICAtPiAtMQorZHFjb201NDkgY29tcGFyZSAgICAxRS02ICAgMSAgICAgICAtPiAtMQorZHFjb201NTAgY29tcGFyZSAgICAxRS01ICAgMSAgICAgICAtPiAtMQorZHFjb201NTEgY29tcGFyZSAgICAxRS00ICAgMSAgICAgICAtPiAtMQorZHFjb201NTIgY29tcGFyZSAgICAxRS0zICAgMSAgICAgICAtPiAtMQorZHFjb201NTMgY29tcGFyZSAgICAxRS0yICAgMSAgICAgICAtPiAtMQorZHFjb201NTQgY29tcGFyZSAgICAxRS0xICAgMSAgICAgICAtPiAtMQorZHFjb201NTUgY29tcGFyZSAgICAxRS0wICAgMSAgICAgICAtPiAgMAorZHFjb201NTYgY29tcGFyZSAgICAxRSsxICAgMSAgICAgICAtPiAgMQorZHFjb201NTcgY29tcGFyZSAgICAxRSsyICAgMSAgICAgICAtPiAgMQorZHFjb201NTggY29tcGFyZSAgICAxRSszICAgMSAgICAgICAtPiAgMQorZHFjb201NTkgY29tcGFyZSAgICAxRSs0ICAgMSAgICAgICAtPiAgMQorZHFjb201NjEgY29tcGFyZSAgICAxRSs1ICAgMSAgICAgICAtPiAgMQorZHFjb201NjIgY29tcGFyZSAgICAxRSs2ICAgMSAgICAgICAtPiAgMQorZHFjb201NjMgY29tcGFyZSAgICAxRSs3ICAgMSAgICAgICAtPiAgMQorZHFjb201NjQgY29tcGFyZSAgICAxRSs4ICAgMSAgICAgICAtPiAgMQorZHFjb201NjUgY29tcGFyZSAgICAxRSs5ICAgMSAgICAgICAtPiAgMQorZHFjb201NjYgY29tcGFyZSAgICAxRSsxMCAgMSAgICAgICAtPiAgMQorZHFjb201NjcgY29tcGFyZSAgICAxRSsxMSAgMSAgICAgICAtPiAgMQorZHFjb201NjggY29tcGFyZSAgICAxRSsxMiAgMSAgICAgICAtPiAgMQorZHFjb201NjkgY29tcGFyZSAgICAxRSsxMyAgMSAgICAgICAtPiAgMQorZHFjb201NzAgY29tcGFyZSAgICAxRSsxNCAgMSAgICAgICAtPiAgMQorZHFjb201NzEgY29tcGFyZSAgICAxRSsxNSAgMSAgICAgICAtPiAgMQorLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5CitkcWNvbTU4MCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQorZHFjb201ODEgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDEKK2RxY29tNTgyIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxCitkcWNvbTU4MyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQorZHFjb201ODQgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDEKK2RxY29tNTg1IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxCitkcWNvbTU4NiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQorZHFjb201ODcgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDEKK2RxY29tNTg4IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxCitkcWNvbTU4OSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTEKK2RxY29tNTkwIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQorZHFjb201OTEgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xCitkcWNvbTU5MiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTEKK2RxY29tNTkzIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQorZHFjb201OTQgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xCitkcWNvbTU5NSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTEKK2RxY29tNTk2IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQorZHFjb201OTcgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xCitkcWNvbTU5OCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTEKK2RxY29tNTk5IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQorCistLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcworZHFjb202MDAgY29tcGFyZSAgIDEyICAgICAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjb202MDEgY29tcGFyZSAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjb202MDIgY29tcGFyZSAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjb202MDMgY29tcGFyZSAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjb202MDQgY29tcGFyZSAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjb202MDUgY29tcGFyZSAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQorZHFjb202MDYgY29tcGFyZSAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAtPiAtMQorZHFjb202MDcgY29tcGFyZSAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQorZHFjb202MDggY29tcGFyZSAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQorZHFjb202MDkgY29tcGFyZSAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAtPiAtMQorZHFjb202MTAgY29tcGFyZSAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQorZHFjb202MTEgY29tcGFyZSAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQorZHFjb202MTIgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAtPiAgMQorZHFjb202MTMgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQorZHFjb202MTQgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQorZHFjb202MTUgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAtPiAgMQorZHFjb202MTYgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQorZHFjb202MTcgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQorZHFjb202MTggY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAtPiAgMQorZHFjb202MTkgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQorZHFjb202MjAgY29tcGFyZSAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjb202MjEgY29tcGFyZSAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjb202MjIgY29tcGFyZSAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjb202MjMgY29tcGFyZSAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjb202MjQgY29tcGFyZSAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjb202MjUgY29tcGFyZSAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQorZHFjb202MjYgY29tcGFyZSAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQorZHFjb202MjcgY29tcGFyZSAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAtPiAgMQorZHFjb202MjggY29tcGFyZSAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQorZHFjb202MjkgY29tcGFyZSAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQorZHFjb202MzAgY29tcGFyZSAgLTEyLjEyMzQgLTEyICAgICAgICAgICAtPiAtMQorZHFjb202MzEgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQorZHFjb202MzIgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQorZHFjb202MzMgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAtPiAtMQorZHFjb202MzQgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQorZHFjb202MzUgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQorZHFjb202MzYgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAtPiAtMQorZHFjb202MzcgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQorZHFjb202MzggY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQorZHFjb202MzkgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAtPiAtMQorCistLSBleHRlbmRlZCB6ZXJvcworZHFjb202NDAgY29tcGFyZSAgIDAgICAgIDAgICAtPiAwCitkcWNvbTY0MSBjb21wYXJlICAgMCAgICAtMCAgIC0+IDAKK2RxY29tNjQyIGNvbXBhcmUgICAwICAgIC0wLjAgLT4gMAorZHFjb202NDMgY29tcGFyZSAgIDAgICAgIDAuMCAtPiAwCitkcWNvbTY0NCBjb21wYXJlICAtMCAgICAgMCAgIC0+IDAKK2RxY29tNjQ1IGNvbXBhcmUgIC0wICAgIC0wICAgLT4gMAorZHFjb202NDYgY29tcGFyZSAgLTAgICAgLTAuMCAtPiAwCitkcWNvbTY0NyBjb21wYXJlICAtMCAgICAgMC4wIC0+IDAKK2RxY29tNjQ4IGNvbXBhcmUgICAwLjAgICAwICAgLT4gMAorZHFjb202NDkgY29tcGFyZSAgIDAuMCAgLTAgICAtPiAwCitkcWNvbTY1MCBjb21wYXJlICAgMC4wICAtMC4wIC0+IDAKK2RxY29tNjUxIGNvbXBhcmUgICAwLjAgICAwLjAgLT4gMAorZHFjb202NTIgY29tcGFyZSAgLTAuMCAgIDAgICAtPiAwCitkcWNvbTY1MyBjb21wYXJlICAtMC4wICAtMCAgIC0+IDAKK2RxY29tNjU0IGNvbXBhcmUgIC0wLjAgIC0wLjAgLT4gMAorZHFjb202NTUgY29tcGFyZSAgLTAuMCAgIDAuMCAtPiAwCisKK2RxY29tNjU2IGNvbXBhcmUgIC0wRTEgICAwLjAgLT4gMAorZHFjb202NTcgY29tcGFyZSAgLTBFMiAgIDAuMCAtPiAwCitkcWNvbTY1OCBjb21wYXJlICAgMEUxICAgMC4wIC0+IDAKK2RxY29tNjU5IGNvbXBhcmUgICAwRTIgICAwLjAgLT4gMAorZHFjb202NjAgY29tcGFyZSAgLTBFMSAgIDAgICAtPiAwCitkcWNvbTY2MSBjb21wYXJlICAtMEUyICAgMCAgIC0+IDAKK2RxY29tNjYyIGNvbXBhcmUgICAwRTEgICAwICAgLT4gMAorZHFjb202NjMgY29tcGFyZSAgIDBFMiAgIDAgICAtPiAwCitkcWNvbTY2NCBjb21wYXJlICAtMEUxICAtMEUxIC0+IDAKK2RxY29tNjY1IGNvbXBhcmUgIC0wRTIgIC0wRTEgLT4gMAorZHFjb202NjYgY29tcGFyZSAgIDBFMSAgLTBFMSAtPiAwCitkcWNvbTY2NyBjb21wYXJlICAgMEUyICAtMEUxIC0+IDAKK2RxY29tNjY4IGNvbXBhcmUgIC0wRTEgIC0wRTIgLT4gMAorZHFjb202NjkgY29tcGFyZSAgLTBFMiAgLTBFMiAtPiAwCitkcWNvbTY3MCBjb21wYXJlICAgMEUxICAtMEUyIC0+IDAKK2RxY29tNjcxIGNvbXBhcmUgICAwRTIgIC0wRTIgLT4gMAorZHFjb202NzIgY29tcGFyZSAgLTBFMSAgIDBFMSAtPiAwCitkcWNvbTY3MyBjb21wYXJlICAtMEUyICAgMEUxIC0+IDAKK2RxY29tNjc0IGNvbXBhcmUgICAwRTEgICAwRTEgLT4gMAorZHFjb202NzUgY29tcGFyZSAgIDBFMiAgIDBFMSAtPiAwCitkcWNvbTY3NiBjb21wYXJlICAtMEUxICAgMEUyIC0+IDAKK2RxY29tNjc3IGNvbXBhcmUgIC0wRTIgICAwRTIgLT4gMAorZHFjb202NzggY29tcGFyZSAgIDBFMSAgIDBFMiAtPiAwCitkcWNvbTY3OSBjb21wYXJlICAgMEUyICAgMEUyIC0+IDAKKworLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQorZHFjb202ODAgY29tcGFyZSAgIDEyICAgIDEyICAgICAgICAgICAtPiAwCitkcWNvbTY4MSBjb21wYXJlICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDAKK2RxY29tNjgyIGNvbXBhcmUgICAxMiAgICAxMi4wMCAgICAgICAgLT4gMAorZHFjb202ODMgY29tcGFyZSAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAwCitkcWNvbTY4NCBjb21wYXJlICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDAKK2RxY29tNjg1IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMCAgICAgLT4gMAorZHFjb202ODYgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAwCitkcWNvbTY4NyBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDAKK2RxY29tNjg4IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwMCAgLT4gMAorZHFjb202ODkgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAwCitkcWNvbTY5MCBjb21wYXJlICAgMTIgICAgICAgICAgICAgIDEyIC0+IDAKK2RxY29tNjkxIGNvbXBhcmUgICAxMi4wICAgICAgICAgICAgMTIgLT4gMAorZHFjb202OTIgY29tcGFyZSAgIDEyLjAwICAgICAgICAgICAxMiAtPiAwCitkcWNvbTY5MyBjb21wYXJlICAgMTIuMDAwICAgICAgICAgIDEyIC0+IDAKK2RxY29tNjk0IGNvbXBhcmUgICAxMi4wMDAwICAgICAgICAgMTIgLT4gMAorZHFjb202OTUgY29tcGFyZSAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAwCitkcWNvbTY5NiBjb21wYXJlICAgMTIuMDAwMDAwICAgICAgIDEyIC0+IDAKK2RxY29tNjk3IGNvbXBhcmUgICAxMi4wMDAwMDAwICAgICAgMTIgLT4gMAorZHFjb202OTggY29tcGFyZSAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAwCitkcWNvbTY5OSBjb21wYXJlICAgMTIuMDAwMDAwMDAwICAgIDEyIC0+IDAKKworLS0gZmlyc3QsIHNlY29uZCwgJiBsYXN0IGRpZ2l0CitkcWNvbTcwMCBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU1IC0+IDEKK2RxY29tNzAxIGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMAorZHFjb203MDIgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NyAtPiAtMQorZHFjb203MDMgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMDIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAxCitkcWNvbTcwNCBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDAKK2RxY29tNzA1IGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDIyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gLTEKK2RxY29tNzA2IGNvbXBhcmUgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEwMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMQorZHFjb203MDcgY29tcGFyZSAgIDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwCitkcWNvbTcwOCBjb21wYXJlICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IC0xCisKKy0tIG1pc2NlbGxhbmVvdXMKK2RxY29tNzIxIGNvbXBhcmUgMTIzNDU2NzgwMDAgMSAtPiAxCitkcWNvbTcyMiBjb21wYXJlIDEgMTIzNDU2NzgwMDAgLT4gLTEKK2RxY29tNzIzIGNvbXBhcmUgMTIzNDU2NzgwMCAgMSAtPiAxCitkcWNvbTcyNCBjb21wYXJlIDEgMTIzNDU2NzgwMCAgLT4gLTEKK2RxY29tNzI1IGNvbXBhcmUgMTIzNDU2Nzg5MCAgMSAtPiAxCitkcWNvbTcyNiBjb21wYXJlIDEgMTIzNDU2Nzg5MCAgLT4gLTEKK2RxY29tNzI3IGNvbXBhcmUgMTIzNDU2Nzg5MSAgMSAtPiAxCitkcWNvbTcyOCBjb21wYXJlIDEgMTIzNDU2Nzg5MSAgLT4gLTEKK2RxY29tNzI5IGNvbXBhcmUgMTIzNDU2Nzg5MDEgMSAtPiAxCitkcWNvbTczMCBjb21wYXJlIDEgMTIzNDU2Nzg5MDEgLT4gLTEKK2RxY29tNzMxIGNvbXBhcmUgMTIzNDU2Nzg5NiAgMSAtPiAxCitkcWNvbTczMiBjb21wYXJlIDEgMTIzNDU2Nzg5NiAgLT4gLTEKKworLS0gcmVzaWR1ZSBjYXNlcyBhdCBsb3dlciBwcmVjaXNpb24KK2RxY29tNzQwIGNvbXBhcmUgIDEgIDAuOTk5OTk5OSAgLT4gMQorZHFjb203NDEgY29tcGFyZSAgMSAgMC45OTk5OTkgICAtPiAxCitkcWNvbTc0MiBjb21wYXJlICAxICAwLjk5OTk5ICAgIC0+IDEKK2RxY29tNzQzIGNvbXBhcmUgIDEgIDEuMDAwMCAgICAgLT4gMAorZHFjb203NDQgY29tcGFyZSAgMSAgMS4wMDAwMSAgICAtPiAtMQorZHFjb203NDUgY29tcGFyZSAgMSAgMS4wMDAwMDEgICAtPiAtMQorZHFjb203NDYgY29tcGFyZSAgMSAgMS4wMDAwMDAxICAtPiAtMQorZHFjb203NTAgY29tcGFyZSAgMC45OTk5OTk5ICAxICAtPiAtMQorZHFjb203NTEgY29tcGFyZSAgMC45OTk5OTkgICAxICAtPiAtMQorZHFjb203NTIgY29tcGFyZSAgMC45OTk5OSAgICAxICAtPiAtMQorZHFjb203NTMgY29tcGFyZSAgMS4wMDAwICAgICAxICAtPiAwCitkcWNvbTc1NCBjb21wYXJlICAxLjAwMDAxICAgIDEgIC0+IDEKK2RxY29tNzU1IGNvbXBhcmUgIDEuMDAwMDAxICAgMSAgLT4gMQorZHFjb203NTYgY29tcGFyZSAgMS4wMDAwMDAxICAxICAtPiAxCisKKy0tIFNwZWNpYWxzCitkcWNvbTc4MCBjb21wYXJlICBJbmYgIC1JbmYgICAtPiAgMQorZHFjb203ODEgY29tcGFyZSAgSW5mICAtMTAwMCAgLT4gIDEKK2RxY29tNzgyIGNvbXBhcmUgIEluZiAgLTEgICAgIC0+ICAxCitkcWNvbTc4MyBjb21wYXJlICBJbmYgIC0wICAgICAtPiAgMQorZHFjb203ODQgY29tcGFyZSAgSW5mICAgMCAgICAgLT4gIDEKK2RxY29tNzg1IGNvbXBhcmUgIEluZiAgIDEgICAgIC0+ICAxCitkcWNvbTc4NiBjb21wYXJlICBJbmYgICAxMDAwICAtPiAgMQorZHFjb203ODcgY29tcGFyZSAgSW5mICAgSW5mICAgLT4gIDAKK2RxY29tNzg4IGNvbXBhcmUgLTEwMDAgIEluZiAgIC0+IC0xCitkcWNvbTc4OSBjb21wYXJlIC1JbmYgICBJbmYgICAtPiAtMQorZHFjb203OTAgY29tcGFyZSAtMSAgICAgSW5mICAgLT4gLTEKK2RxY29tNzkxIGNvbXBhcmUgLTAgICAgIEluZiAgIC0+IC0xCitkcWNvbTc5MiBjb21wYXJlICAwICAgICBJbmYgICAtPiAtMQorZHFjb203OTMgY29tcGFyZSAgMSAgICAgSW5mICAgLT4gLTEKK2RxY29tNzk0IGNvbXBhcmUgIDEwMDAgIEluZiAgIC0+IC0xCitkcWNvbTc5NSBjb21wYXJlICBJbmYgICBJbmYgICAtPiAgMAorCitkcWNvbTgwMCBjb21wYXJlIC1JbmYgIC1JbmYgICAtPiAgMAorZHFjb204MDEgY29tcGFyZSAtSW5mICAtMTAwMCAgLT4gLTEKK2RxY29tODAyIGNvbXBhcmUgLUluZiAgLTEgICAgIC0+IC0xCitkcWNvbTgwMyBjb21wYXJlIC1JbmYgIC0wICAgICAtPiAtMQorZHFjb204MDQgY29tcGFyZSAtSW5mICAgMCAgICAgLT4gLTEKK2RxY29tODA1IGNvbXBhcmUgLUluZiAgIDEgICAgIC0+IC0xCitkcWNvbTgwNiBjb21wYXJlIC1JbmYgICAxMDAwICAtPiAtMQorZHFjb204MDcgY29tcGFyZSAtSW5mICAgSW5mICAgLT4gLTEKK2RxY29tODA4IGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAwCitkcWNvbTgwOSBjb21wYXJlIC0xMDAwIC1JbmYgICAtPiAgMQorZHFjb204MTAgY29tcGFyZSAtMSAgICAtSW5mICAgLT4gIDEKK2RxY29tODExIGNvbXBhcmUgLTAgICAgLUluZiAgIC0+ICAxCitkcWNvbTgxMiBjb21wYXJlICAwICAgIC1JbmYgICAtPiAgMQorZHFjb204MTMgY29tcGFyZSAgMSAgICAtSW5mICAgLT4gIDEKK2RxY29tODE0IGNvbXBhcmUgIDEwMDAgLUluZiAgIC0+ICAxCitkcWNvbTgxNSBjb21wYXJlICBJbmYgIC1JbmYgICAtPiAgMQorCitkcWNvbTgyMSBjb21wYXJlICBOYU4gLUluZiAgICAtPiAgTmFOCitkcWNvbTgyMiBjb21wYXJlICBOYU4gLTEwMDAgICAtPiAgTmFOCitkcWNvbTgyMyBjb21wYXJlICBOYU4gLTEgICAgICAtPiAgTmFOCitkcWNvbTgyNCBjb21wYXJlICBOYU4gLTAgICAgICAtPiAgTmFOCitkcWNvbTgyNSBjb21wYXJlICBOYU4gIDAgICAgICAtPiAgTmFOCitkcWNvbTgyNiBjb21wYXJlICBOYU4gIDEgICAgICAtPiAgTmFOCitkcWNvbTgyNyBjb21wYXJlICBOYU4gIDEwMDAgICAtPiAgTmFOCitkcWNvbTgyOCBjb21wYXJlICBOYU4gIEluZiAgICAtPiAgTmFOCitkcWNvbTgyOSBjb21wYXJlICBOYU4gIE5hTiAgICAtPiAgTmFOCitkcWNvbTgzMCBjb21wYXJlIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkcWNvbTgzMSBjb21wYXJlIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkcWNvbTgzMiBjb21wYXJlIC0xICAgIE5hTiAgICAtPiAgTmFOCitkcWNvbTgzMyBjb21wYXJlIC0wICAgIE5hTiAgICAtPiAgTmFOCitkcWNvbTgzNCBjb21wYXJlICAwICAgIE5hTiAgICAtPiAgTmFOCitkcWNvbTgzNSBjb21wYXJlICAxICAgIE5hTiAgICAtPiAgTmFOCitkcWNvbTgzNiBjb21wYXJlICAxMDAwIE5hTiAgICAtPiAgTmFOCitkcWNvbTgzNyBjb21wYXJlICBJbmYgIE5hTiAgICAtPiAgTmFOCitkcWNvbTgzOCBjb21wYXJlIC1OYU4gLU5hTiAgICAtPiAtTmFOCitkcWNvbTgzOSBjb21wYXJlICtOYU4gLU5hTiAgICAtPiAgTmFOCitkcWNvbTg0MCBjb21wYXJlIC1OYU4gK05hTiAgICAtPiAtTmFOCisKK2RxY29tODQxIGNvbXBhcmUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg0MiBjb21wYXJlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NDMgY29tcGFyZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODQ0IGNvbXBhcmUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg0NSBjb21wYXJlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NDYgY29tcGFyZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODQ3IGNvbXBhcmUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg0OCBjb21wYXJlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NDkgY29tcGFyZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODUwIGNvbXBhcmUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg1MSBjb21wYXJlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NTIgY29tcGFyZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODUzIGNvbXBhcmUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg1NCBjb21wYXJlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NTUgY29tcGFyZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODU2IGNvbXBhcmUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg1NyBjb21wYXJlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NTggY29tcGFyZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODU5IGNvbXBhcmUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxY29tODYwIGNvbXBhcmUgIE5hTjkgLUluZiAgIC0+ICBOYU45CitkcWNvbTg2MSBjb21wYXJlICBOYU44ICA5OTkgICAtPiAgTmFOOAorZHFjb204NjIgY29tcGFyZSAgTmFONzcgSW5mICAgLT4gIE5hTjc3CitkcWNvbTg2MyBjb21wYXJlIC1OYU42NyBOYU41ICAtPiAtTmFONjcKK2RxY29tODY0IGNvbXBhcmUgLUluZiAgLU5hTjQgIC0+IC1OYU40CitkcWNvbTg2NSBjb21wYXJlIC05OTkgIC1OYU4zMyAtPiAtTmFOMzMKK2RxY29tODY2IGNvbXBhcmUgIEluZiAgIE5hTjIgIC0+ICBOYU4yCitkcWNvbTg2NyBjb21wYXJlIC1OYU40MSAtTmFONDIgLT4gLU5hTjQxCitkcWNvbTg2OCBjb21wYXJlICtOYU40MSAtTmFONDIgLT4gIE5hTjQxCitkcWNvbTg2OSBjb21wYXJlIC1OYU40MSArTmFONDIgLT4gLU5hTjQxCitkcWNvbTg3MCBjb21wYXJlICtOYU40MSArTmFONDIgLT4gIE5hTjQxCisKK2RxY29tODcxIGNvbXBhcmUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NzIgY29tcGFyZSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg3MyBjb21wYXJlICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODc0IGNvbXBhcmUgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NzUgY29tcGFyZSAgTmFOODUgIHNOYU44MyAgLT4gIE5hTjgzIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg3NiBjb21wYXJlIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxY29tODc3IGNvbXBhcmUgIDA4OCAgICBzTmFOODEgIC0+ICBOYU44MSBJbnZhbGlkX29wZXJhdGlvbgorZHFjb204NzggY29tcGFyZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcWNvbTg3OSBjb21wYXJlICBOYU4gICAtc05hTjg5ICAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gd2lkZSByYW5nZQorZHFjb204ODAgY29tcGFyZSArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs2MTQ0IC0+IC0xCitkcWNvbTg4MSBjb21wYXJlIDlFKzYxNDQgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKK2RxY29tODgyIGNvbXBhcmUgKzAuMTAwIDlFLTYxNDMgICAgICAgICAgICAgICAtPiAgMQorZHFjb204ODMgY29tcGFyZSA5RS02MTQzICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xCitkcWNvbTg4NSBjb21wYXJlIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzYxNDQgLT4gLTEKK2RxY29tODg2IGNvbXBhcmUgOUUrNjE0NCAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQorZHFjb204ODcgY29tcGFyZSAtMC4xMDAgOUUtNjE0MyAgICAgICAgICAgICAgIC0+IC0xCitkcWNvbTg4OCBjb21wYXJlIDlFLTYxNDMgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDEKKworLS0gc2lnbnMKK2RxY29tOTAxIGNvbXBhcmUgIDFlKzc3ICAxZSsxMSAtPiAgMQorZHFjb205MDIgY29tcGFyZSAgMWUrNzcgLTFlKzExIC0+ICAxCitkcWNvbTkwMyBjb21wYXJlIC0xZSs3NyAgMWUrMTEgLT4gLTEKK2RxY29tOTA0IGNvbXBhcmUgLTFlKzc3IC0xZSsxMSAtPiAtMQorZHFjb205MDUgY29tcGFyZSAgMWUtNzcgIDFlLTExIC0+IC0xCitkcWNvbTkwNiBjb21wYXJlICAxZS03NyAtMWUtMTEgLT4gIDEKK2RxY29tOTA3IGNvbXBhcmUgLTFlLTc3ICAxZS0xMSAtPiAtMQorZHFjb205MDggY29tcGFyZSAtMWUtNzcgLTFlLTExIC0+ICAxCisKKy0tIGZ1bGwgYWxpZ25tZW50IHJhbmdlLCBib3RoIHdheXMKK2RxY29tcDEwMDEgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAwCitkcWNvbXAxMDAyIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gMAorZHFjb21wMTAwMyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIC0+IDAKK2RxY29tcDEwMDQgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAtPiAwCitkcWNvbXAxMDA1IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgLT4gMAorZHFjb21wMTAwNiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDAKK2RxY29tcDEwMDcgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAtPiAwCitkcWNvbXAxMDA4IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgLT4gMAorZHFjb21wMTAwOSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgIC0+IDAKK2RxY29tcDEwMTAgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAtPiAwCitkcWNvbXAxMDExIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgLT4gMAorZHFjb21wMTAxMiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMTMgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDE0IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gMAorZHFjb21wMTAxNSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMTYgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDE3IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgICAgLT4gMAorZHFjb21wMTAxOCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMTkgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwICAtPiAwCitkcWNvbXAxMDIwIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwICAgLT4gMAorZHFjb21wMTAyMSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwICAgIC0+IDAKK2RxY29tcDEwMjIgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwICAgICAtPiAwCitkcWNvbXAxMDIzIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwICAgICAgLT4gMAorZHFjb21wMTAyNCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwICAgICAgIC0+IDAKK2RxY29tcDEwMjUgY29tcGFyZSAxIDEuMDAwMDAwMDAwICAgICAgICAtPiAwCitkcWNvbXAxMDI2IGNvbXBhcmUgMSAxLjAwMDAwMDAwICAgICAgICAgLT4gMAorZHFjb21wMTAyNyBjb21wYXJlIDEgMS4wMDAwMDAwICAgICAgICAgIC0+IDAKK2RxY29tcDEwMjggY29tcGFyZSAxIDEuMDAwMDAwICAgICAgICAgICAtPiAwCitkcWNvbXAxMDI5IGNvbXBhcmUgMSAxLjAwMDAwICAgICAgICAgICAgLT4gMAorZHFjb21wMTAzMCBjb21wYXJlIDEgMS4wMDAwICAgICAgICAgICAgIC0+IDAKK2RxY29tcDEwMzEgY29tcGFyZSAxIDEuMDAwICAgICAgICAgICAgICAtPiAwCitkcWNvbXAxMDMyIGNvbXBhcmUgMSAxLjAwICAgICAgICAgICAgICAgLT4gMAorZHFjb21wMTAzMyBjb21wYXJlIDEgMS4wICAgICAgICAgICAgICAgIC0+IDAKKworZHFjb21wMTA0MSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAxIC0+IDAKK2RxY29tcDEwNDIgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgMSAtPiAwCitkcWNvbXAxMDQzIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDEgLT4gMAorZHFjb21wMTA0NCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAxIC0+IDAKK2RxY29tcDEwNDUgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgMSAtPiAwCitkcWNvbXAxMDQ2IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIDEgLT4gMAorZHFjb21wMTA0NyBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAxIC0+IDAKK2RxY29tcDEwNDggY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDQ5IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA1MCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNTEgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDUyIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA1MyBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNTQgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDU1IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA1NiBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNTcgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDU4IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA1OSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwICAxIC0+IDAKK2RxY29tcDEwNjAgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwICAgMSAtPiAwCitkcWNvbXAxMDYxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwICAgIDEgLT4gMAorZHFjb21wMTA2MiBjb21wYXJlIDEuMDAwMDAwMDAwMDAwICAgICAxIC0+IDAKK2RxY29tcDEwNjMgY29tcGFyZSAxLjAwMDAwMDAwMDAwICAgICAgMSAtPiAwCitkcWNvbXAxMDY0IGNvbXBhcmUgMS4wMDAwMDAwMDAwICAgICAgIDEgLT4gMAorZHFjb21wMTA2NSBjb21wYXJlIDEuMDAwMDAwMDAwICAgICAgICAxIC0+IDAKK2RxY29tcDEwNjYgY29tcGFyZSAxLjAwMDAwMDAwICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDY3IGNvbXBhcmUgMS4wMDAwMDAwICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA2OCBjb21wYXJlIDEuMDAwMDAwICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNjkgY29tcGFyZSAxLjAwMDAwICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDcwIGNvbXBhcmUgMS4wMDAwICAgICAgICAgICAgIDEgLT4gMAorZHFjb21wMTA3MSBjb21wYXJlIDEuMDAwICAgICAgICAgICAgICAxIC0+IDAKK2RxY29tcDEwNzIgY29tcGFyZSAxLjAwICAgICAgICAgICAgICAgMSAtPiAwCitkcWNvbXAxMDczIGNvbXBhcmUgMS4wICAgICAgICAgICAgICAgIDEgLT4gMAorCistLSBjaGVjayBNU0QgYWx3YXlzIGRldGVjdGVkIG5vbi16ZXJvCitkcWNvbXAxMDgwIGNvbXBhcmUgMCAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gMAorZHFjb21wMTA4MSBjb21wYXJlIDAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkcWNvbXAxMDgyIGNvbXBhcmUgMCAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RxY29tcDEwODMgY29tcGFyZSAwIDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZHFjb21wMTA4NCBjb21wYXJlIDAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkcWNvbXAxMDg1IGNvbXBhcmUgMCA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RxY29tcDEwODYgY29tcGFyZSAwIDYuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZHFjb21wMTA4NyBjb21wYXJlIDAgNy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xCitkcWNvbXAxMDg4IGNvbXBhcmUgMCA4LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKK2RxY29tcDEwODkgY29tcGFyZSAwIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQorZHFjb21wMTA5MCBjb21wYXJlIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDAKK2RxY29tcDEwOTEgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkcWNvbXAxMDkyIGNvbXBhcmUgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZHFjb21wMTA5MyBjb21wYXJlIDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RxY29tcDEwOTQgY29tcGFyZSA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkcWNvbXAxMDk1IGNvbXBhcmUgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZHFjb21wMTA5NiBjb21wYXJlIDYuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKK2RxY29tcDEwOTcgY29tcGFyZSA3LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCitkcWNvbXAxMDk4IGNvbXBhcmUgOC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQorZHFjb21wMTA5OSBjb21wYXJlIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKKworLS0gTnVsbCB0ZXN0cworZHFjb205OTAgY29tcGFyZSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxY29tOTkxIGNvbXBhcmUgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVNpZy5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVTaWcuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTVmMDkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVTaWcuZGVjVGVzdApAQCAtMCwwICsxLDY0NyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUNvbXBhcmVTaWcuZGVjVGVzdCAtLSBkZWNRdWFkIGNvbXBhcmlzb247IGFsbCBOYU5zIHNpZ25hbCAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90CistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFjbXMwMDEgY29tcGFyZXNpZyAgLTIgIC0yICAtPiAwCitkcWNtczAwMiBjb21wYXJlc2lnICAtMiAgLTEgIC0+IC0xCitkcWNtczAwMyBjb21wYXJlc2lnICAtMiAgIDAgIC0+IC0xCitkcWNtczAwNCBjb21wYXJlc2lnICAtMiAgIDEgIC0+IC0xCitkcWNtczAwNSBjb21wYXJlc2lnICAtMiAgIDIgIC0+IC0xCitkcWNtczAwNiBjb21wYXJlc2lnICAtMSAgLTIgIC0+IDEKK2RxY21zMDA3IGNvbXBhcmVzaWcgIC0xICAtMSAgLT4gMAorZHFjbXMwMDggY29tcGFyZXNpZyAgLTEgICAwICAtPiAtMQorZHFjbXMwMDkgY29tcGFyZXNpZyAgLTEgICAxICAtPiAtMQorZHFjbXMwMTAgY29tcGFyZXNpZyAgLTEgICAyICAtPiAtMQorZHFjbXMwMTEgY29tcGFyZXNpZyAgIDAgIC0yICAtPiAxCitkcWNtczAxMiBjb21wYXJlc2lnICAgMCAgLTEgIC0+IDEKK2RxY21zMDEzIGNvbXBhcmVzaWcgICAwICAgMCAgLT4gMAorZHFjbXMwMTQgY29tcGFyZXNpZyAgIDAgICAxICAtPiAtMQorZHFjbXMwMTUgY29tcGFyZXNpZyAgIDAgICAyICAtPiAtMQorZHFjbXMwMTYgY29tcGFyZXNpZyAgIDEgIC0yICAtPiAxCitkcWNtczAxNyBjb21wYXJlc2lnICAgMSAgLTEgIC0+IDEKK2RxY21zMDE4IGNvbXBhcmVzaWcgICAxICAgMCAgLT4gMQorZHFjbXMwMTkgY29tcGFyZXNpZyAgIDEgICAxICAtPiAwCitkcWNtczAyMCBjb21wYXJlc2lnICAgMSAgIDIgIC0+IC0xCitkcWNtczAyMSBjb21wYXJlc2lnICAgMiAgLTIgIC0+IDEKK2RxY21zMDIyIGNvbXBhcmVzaWcgICAyICAtMSAgLT4gMQorZHFjbXMwMjMgY29tcGFyZXNpZyAgIDIgICAwICAtPiAxCitkcWNtczAyNSBjb21wYXJlc2lnICAgMiAgIDEgIC0+IDEKK2RxY21zMDI2IGNvbXBhcmVzaWcgICAyICAgMiAgLT4gMAorCitkcWNtczAzMSBjb21wYXJlc2lnICAtMjAgIC0yMCAgLT4gMAorZHFjbXMwMzIgY29tcGFyZXNpZyAgLTIwICAtMTAgIC0+IC0xCitkcWNtczAzMyBjb21wYXJlc2lnICAtMjAgICAwMCAgLT4gLTEKK2RxY21zMDM0IGNvbXBhcmVzaWcgIC0yMCAgIDEwICAtPiAtMQorZHFjbXMwMzUgY29tcGFyZXNpZyAgLTIwICAgMjAgIC0+IC0xCitkcWNtczAzNiBjb21wYXJlc2lnICAtMTAgIC0yMCAgLT4gMQorZHFjbXMwMzcgY29tcGFyZXNpZyAgLTEwICAtMTAgIC0+IDAKK2RxY21zMDM4IGNvbXBhcmVzaWcgIC0xMCAgIDAwICAtPiAtMQorZHFjbXMwMzkgY29tcGFyZXNpZyAgLTEwICAgMTAgIC0+IC0xCitkcWNtczA0MCBjb21wYXJlc2lnICAtMTAgICAyMCAgLT4gLTEKK2RxY21zMDQxIGNvbXBhcmVzaWcgICAwMCAgLTIwICAtPiAxCitkcWNtczA0MiBjb21wYXJlc2lnICAgMDAgIC0xMCAgLT4gMQorZHFjbXMwNDMgY29tcGFyZXNpZyAgIDAwICAgMDAgIC0+IDAKK2RxY21zMDQ0IGNvbXBhcmVzaWcgICAwMCAgIDEwICAtPiAtMQorZHFjbXMwNDUgY29tcGFyZXNpZyAgIDAwICAgMjAgIC0+IC0xCitkcWNtczA0NiBjb21wYXJlc2lnICAgMTAgIC0yMCAgLT4gMQorZHFjbXMwNDcgY29tcGFyZXNpZyAgIDEwICAtMTAgIC0+IDEKK2RxY21zMDQ4IGNvbXBhcmVzaWcgICAxMCAgIDAwICAtPiAxCitkcWNtczA0OSBjb21wYXJlc2lnICAgMTAgICAxMCAgLT4gMAorZHFjbXMwNTAgY29tcGFyZXNpZyAgIDEwICAgMjAgIC0+IC0xCitkcWNtczA1MSBjb21wYXJlc2lnICAgMjAgIC0yMCAgLT4gMQorZHFjbXMwNTIgY29tcGFyZXNpZyAgIDIwICAtMTAgIC0+IDEKK2RxY21zMDUzIGNvbXBhcmVzaWcgICAyMCAgIDAwICAtPiAxCitkcWNtczA1NSBjb21wYXJlc2lnICAgMjAgICAxMCAgLT4gMQorZHFjbXMwNTYgY29tcGFyZXNpZyAgIDIwICAgMjAgIC0+IDAKKworZHFjbXMwNjEgY29tcGFyZXNpZyAgLTIuMCAgLTIuMCAgLT4gMAorZHFjbXMwNjIgY29tcGFyZXNpZyAgLTIuMCAgLTEuMCAgLT4gLTEKK2RxY21zMDYzIGNvbXBhcmVzaWcgIC0yLjAgICAwLjAgIC0+IC0xCitkcWNtczA2NCBjb21wYXJlc2lnICAtMi4wICAgMS4wICAtPiAtMQorZHFjbXMwNjUgY29tcGFyZXNpZyAgLTIuMCAgIDIuMCAgLT4gLTEKK2RxY21zMDY2IGNvbXBhcmVzaWcgIC0xLjAgIC0yLjAgIC0+IDEKK2RxY21zMDY3IGNvbXBhcmVzaWcgIC0xLjAgIC0xLjAgIC0+IDAKK2RxY21zMDY4IGNvbXBhcmVzaWcgIC0xLjAgICAwLjAgIC0+IC0xCitkcWNtczA2OSBjb21wYXJlc2lnICAtMS4wICAgMS4wICAtPiAtMQorZHFjbXMwNzAgY29tcGFyZXNpZyAgLTEuMCAgIDIuMCAgLT4gLTEKK2RxY21zMDcxIGNvbXBhcmVzaWcgICAwLjAgIC0yLjAgIC0+IDEKK2RxY21zMDcyIGNvbXBhcmVzaWcgICAwLjAgIC0xLjAgIC0+IDEKK2RxY21zMDczIGNvbXBhcmVzaWcgICAwLjAgICAwLjAgIC0+IDAKK2RxY21zMDc0IGNvbXBhcmVzaWcgICAwLjAgICAxLjAgIC0+IC0xCitkcWNtczA3NSBjb21wYXJlc2lnICAgMC4wICAgMi4wICAtPiAtMQorZHFjbXMwNzYgY29tcGFyZXNpZyAgIDEuMCAgLTIuMCAgLT4gMQorZHFjbXMwNzcgY29tcGFyZXNpZyAgIDEuMCAgLTEuMCAgLT4gMQorZHFjbXMwNzggY29tcGFyZXNpZyAgIDEuMCAgIDAuMCAgLT4gMQorZHFjbXMwNzkgY29tcGFyZXNpZyAgIDEuMCAgIDEuMCAgLT4gMAorZHFjbXMwODAgY29tcGFyZXNpZyAgIDEuMCAgIDIuMCAgLT4gLTEKK2RxY21zMDgxIGNvbXBhcmVzaWcgICAyLjAgIC0yLjAgIC0+IDEKK2RxY21zMDgyIGNvbXBhcmVzaWcgICAyLjAgIC0xLjAgIC0+IDEKK2RxY21zMDgzIGNvbXBhcmVzaWcgICAyLjAgICAwLjAgIC0+IDEKK2RxY21zMDg1IGNvbXBhcmVzaWcgICAyLjAgICAxLjAgIC0+IDEKK2RxY21zMDg2IGNvbXBhcmVzaWcgICAyLjAgICAyLjAgIC0+IDAKKworLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCitkcWNtczA5MCBjb21wYXJlc2lnICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gMAorZHFjbXMwOTEgY29tcGFyZXNpZyAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC0xCitkcWNtczA5MiBjb21wYXJlc2lnICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQorZHFjbXMwOTMgY29tcGFyZXNpZyAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDAKKworLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCitkcWNtczEwMCBjb21wYXJlc2lnICAgNy4wICAgIDcuMCAgICAtPiAwCitkcWNtczEwMSBjb21wYXJlc2lnICAgNy4wICAgIDcgICAgICAtPiAwCitkcWNtczEwMiBjb21wYXJlc2lnICAgNyAgICAgIDcuMCAgICAtPiAwCitkcWNtczEwMyBjb21wYXJlc2lnICAgN0UrMCAgIDcuMCAgICAtPiAwCitkcWNtczEwNCBjb21wYXJlc2lnICAgNzBFLTEgIDcuMCAgICAtPiAwCitkcWNtczEwNSBjb21wYXJlc2lnICAgMC43RSsxIDcgICAgICAtPiAwCitkcWNtczEwNiBjb21wYXJlc2lnICAgNzBFLTEgIDcgICAgICAtPiAwCitkcWNtczEwNyBjb21wYXJlc2lnICAgNy4wICAgIDdFKzAgICAtPiAwCitkcWNtczEwOCBjb21wYXJlc2lnICAgNy4wICAgIDcwRS0xICAtPiAwCitkcWNtczEwOSBjb21wYXJlc2lnICAgNyAgICAgIDAuN0UrMSAtPiAwCitkcWNtczExMCBjb21wYXJlc2lnICAgNyAgICAgIDcwRS0xICAtPiAwCisKK2RxY21zMTIwIGNvbXBhcmVzaWcgICA4LjAgICAgNy4wICAgIC0+IDEKK2RxY21zMTIxIGNvbXBhcmVzaWcgICA4LjAgICAgNyAgICAgIC0+IDEKK2RxY21zMTIyIGNvbXBhcmVzaWcgICA4ICAgICAgNy4wICAgIC0+IDEKK2RxY21zMTIzIGNvbXBhcmVzaWcgICA4RSswICAgNy4wICAgIC0+IDEKK2RxY21zMTI0IGNvbXBhcmVzaWcgICA4MEUtMSAgNy4wICAgIC0+IDEKK2RxY21zMTI1IGNvbXBhcmVzaWcgICAwLjhFKzEgNyAgICAgIC0+IDEKK2RxY21zMTI2IGNvbXBhcmVzaWcgICA4MEUtMSAgNyAgICAgIC0+IDEKK2RxY21zMTI3IGNvbXBhcmVzaWcgICA4LjAgICAgN0UrMCAgIC0+IDEKK2RxY21zMTI4IGNvbXBhcmVzaWcgICA4LjAgICAgNzBFLTEgIC0+IDEKK2RxY21zMTI5IGNvbXBhcmVzaWcgICA4ICAgICAgMC43RSsxICAtPiAxCitkcWNtczEzMCBjb21wYXJlc2lnICAgOCAgICAgIDcwRS0xICAtPiAxCisKK2RxY21zMTQwIGNvbXBhcmVzaWcgICA4LjAgICAgOS4wICAgIC0+IC0xCitkcWNtczE0MSBjb21wYXJlc2lnICAgOC4wICAgIDkgICAgICAtPiAtMQorZHFjbXMxNDIgY29tcGFyZXNpZyAgIDggICAgICA5LjAgICAgLT4gLTEKK2RxY21zMTQzIGNvbXBhcmVzaWcgICA4RSswICAgOS4wICAgIC0+IC0xCitkcWNtczE0NCBjb21wYXJlc2lnICAgODBFLTEgIDkuMCAgICAtPiAtMQorZHFjbXMxNDUgY29tcGFyZXNpZyAgIDAuOEUrMSA5ICAgICAgLT4gLTEKK2RxY21zMTQ2IGNvbXBhcmVzaWcgICA4MEUtMSAgOSAgICAgIC0+IC0xCitkcWNtczE0NyBjb21wYXJlc2lnICAgOC4wICAgIDlFKzAgICAtPiAtMQorZHFjbXMxNDggY29tcGFyZXNpZyAgIDguMCAgICA5MEUtMSAgLT4gLTEKK2RxY21zMTQ5IGNvbXBhcmVzaWcgICA4ICAgICAgMC45RSsxIC0+IC0xCitkcWNtczE1MCBjb21wYXJlc2lnICAgOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCitkcWNtczIwMCBjb21wYXJlc2lnICAtNy4wICAgIDcuMCAgICAtPiAtMQorZHFjbXMyMDEgY29tcGFyZXNpZyAgLTcuMCAgICA3ICAgICAgLT4gLTEKK2RxY21zMjAyIGNvbXBhcmVzaWcgIC03ICAgICAgNy4wICAgIC0+IC0xCitkcWNtczIwMyBjb21wYXJlc2lnICAtN0UrMCAgIDcuMCAgICAtPiAtMQorZHFjbXMyMDQgY29tcGFyZXNpZyAgLTcwRS0xICA3LjAgICAgLT4gLTEKK2RxY21zMjA1IGNvbXBhcmVzaWcgIC0wLjdFKzEgNyAgICAgIC0+IC0xCitkcWNtczIwNiBjb21wYXJlc2lnICAtNzBFLTEgIDcgICAgICAtPiAtMQorZHFjbXMyMDcgY29tcGFyZXNpZyAgLTcuMCAgICA3RSswICAgLT4gLTEKK2RxY21zMjA4IGNvbXBhcmVzaWcgIC03LjAgICAgNzBFLTEgIC0+IC0xCitkcWNtczIwOSBjb21wYXJlc2lnICAtNyAgICAgIDAuN0UrMSAtPiAtMQorZHFjbXMyMTAgY29tcGFyZXNpZyAgLTcgICAgICA3MEUtMSAgLT4gLTEKKworZHFjbXMyMjAgY29tcGFyZXNpZyAgLTguMCAgICA3LjAgICAgLT4gLTEKK2RxY21zMjIxIGNvbXBhcmVzaWcgIC04LjAgICAgNyAgICAgIC0+IC0xCitkcWNtczIyMiBjb21wYXJlc2lnICAtOCAgICAgIDcuMCAgICAtPiAtMQorZHFjbXMyMjMgY29tcGFyZXNpZyAgLThFKzAgICA3LjAgICAgLT4gLTEKK2RxY21zMjI0IGNvbXBhcmVzaWcgIC04MEUtMSAgNy4wICAgIC0+IC0xCitkcWNtczIyNSBjb21wYXJlc2lnICAtMC44RSsxIDcgICAgICAtPiAtMQorZHFjbXMyMjYgY29tcGFyZXNpZyAgLTgwRS0xICA3ICAgICAgLT4gLTEKK2RxY21zMjI3IGNvbXBhcmVzaWcgIC04LjAgICAgN0UrMCAgIC0+IC0xCitkcWNtczIyOCBjb21wYXJlc2lnICAtOC4wICAgIDcwRS0xICAtPiAtMQorZHFjbXMyMjkgY29tcGFyZXNpZyAgLTggICAgICAwLjdFKzEgLT4gLTEKK2RxY21zMjMwIGNvbXBhcmVzaWcgIC04ICAgICAgNzBFLTEgIC0+IC0xCisKK2RxY21zMjQwIGNvbXBhcmVzaWcgIC04LjAgICAgOS4wICAgIC0+IC0xCitkcWNtczI0MSBjb21wYXJlc2lnICAtOC4wICAgIDkgICAgICAtPiAtMQorZHFjbXMyNDIgY29tcGFyZXNpZyAgLTggICAgICA5LjAgICAgLT4gLTEKK2RxY21zMjQzIGNvbXBhcmVzaWcgIC04RSswICAgOS4wICAgIC0+IC0xCitkcWNtczI0NCBjb21wYXJlc2lnICAtODBFLTEgIDkuMCAgICAtPiAtMQorZHFjbXMyNDUgY29tcGFyZXNpZyAgLTAuOEUrMSA5ICAgICAgLT4gLTEKK2RxY21zMjQ2IGNvbXBhcmVzaWcgIC04MEUtMSAgOSAgICAgIC0+IC0xCitkcWNtczI0NyBjb21wYXJlc2lnICAtOC4wICAgIDlFKzAgICAtPiAtMQorZHFjbXMyNDggY29tcGFyZXNpZyAgLTguMCAgICA5MEUtMSAgLT4gLTEKK2RxY21zMjQ5IGNvbXBhcmVzaWcgIC04ICAgICAgMC45RSsxIC0+IC0xCitkcWNtczI1MCBjb21wYXJlc2lnICAtOCAgICAgIDkwRS0xICAtPiAtMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCitkcWNtczMwMCBjb21wYXJlc2lnICAgNy4wICAgIC03LjAgICAgLT4gMQorZHFjbXMzMDEgY29tcGFyZXNpZyAgIDcuMCAgICAtNyAgICAgIC0+IDEKK2RxY21zMzAyIGNvbXBhcmVzaWcgICA3ICAgICAgLTcuMCAgICAtPiAxCitkcWNtczMwMyBjb21wYXJlc2lnICAgN0UrMCAgIC03LjAgICAgLT4gMQorZHFjbXMzMDQgY29tcGFyZXNpZyAgIDcwRS0xICAtNy4wICAgIC0+IDEKK2RxY21zMzA1IGNvbXBhcmVzaWcgICAuN0UrMSAgLTcgICAgICAtPiAxCitkcWNtczMwNiBjb21wYXJlc2lnICAgNzBFLTEgIC03ICAgICAgLT4gMQorZHFjbXMzMDcgY29tcGFyZXNpZyAgIDcuMCAgICAtN0UrMCAgIC0+IDEKK2RxY21zMzA4IGNvbXBhcmVzaWcgICA3LjAgICAgLTcwRS0xICAtPiAxCitkcWNtczMwOSBjb21wYXJlc2lnICAgNyAgICAgIC0uN0UrMSAgLT4gMQorZHFjbXMzMTAgY29tcGFyZXNpZyAgIDcgICAgICAtNzBFLTEgIC0+IDEKKworZHFjbXMzMjAgY29tcGFyZXNpZyAgIDguMCAgICAtNy4wICAgIC0+IDEKK2RxY21zMzIxIGNvbXBhcmVzaWcgICA4LjAgICAgLTcgICAgICAtPiAxCitkcWNtczMyMiBjb21wYXJlc2lnICAgOCAgICAgIC03LjAgICAgLT4gMQorZHFjbXMzMjMgY29tcGFyZXNpZyAgIDhFKzAgICAtNy4wICAgIC0+IDEKK2RxY21zMzI0IGNvbXBhcmVzaWcgICA4MEUtMSAgLTcuMCAgICAtPiAxCitkcWNtczMyNSBjb21wYXJlc2lnICAgLjhFKzEgIC03ICAgICAgLT4gMQorZHFjbXMzMjYgY29tcGFyZXNpZyAgIDgwRS0xICAtNyAgICAgIC0+IDEKK2RxY21zMzI3IGNvbXBhcmVzaWcgICA4LjAgICAgLTdFKzAgICAtPiAxCitkcWNtczMyOCBjb21wYXJlc2lnICAgOC4wICAgIC03MEUtMSAgLT4gMQorZHFjbXMzMjkgY29tcGFyZXNpZyAgIDggICAgICAtLjdFKzEgIC0+IDEKK2RxY21zMzMwIGNvbXBhcmVzaWcgICA4ICAgICAgLTcwRS0xICAtPiAxCisKK2RxY21zMzQwIGNvbXBhcmVzaWcgICA4LjAgICAgLTkuMCAgICAtPiAxCitkcWNtczM0MSBjb21wYXJlc2lnICAgOC4wICAgIC05ICAgICAgLT4gMQorZHFjbXMzNDIgY29tcGFyZXNpZyAgIDggICAgICAtOS4wICAgIC0+IDEKK2RxY21zMzQzIGNvbXBhcmVzaWcgICA4RSswICAgLTkuMCAgICAtPiAxCitkcWNtczM0NCBjb21wYXJlc2lnICAgODBFLTEgIC05LjAgICAgLT4gMQorZHFjbXMzNDUgY29tcGFyZXNpZyAgIC44RSsxICAtOSAgICAgIC0+IDEKK2RxY21zMzQ2IGNvbXBhcmVzaWcgICA4MEUtMSAgLTkgICAgICAtPiAxCitkcWNtczM0NyBjb21wYXJlc2lnICAgOC4wICAgIC05RSswICAgLT4gMQorZHFjbXMzNDggY29tcGFyZXNpZyAgIDguMCAgICAtOTBFLTEgIC0+IDEKK2RxY21zMzQ5IGNvbXBhcmVzaWcgICA4ICAgICAgLS45RSsxICAtPiAxCitkcWNtczM1MCBjb21wYXJlc2lnICAgOCAgICAgIC05MEUtMSAgLT4gMQorCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCitkcWNtczQwMCBjb21wYXJlc2lnICAgLTcuMCAgICAtNy4wICAgIC0+IDAKK2RxY21zNDAxIGNvbXBhcmVzaWcgICAtNy4wICAgIC03ICAgICAgLT4gMAorZHFjbXM0MDIgY29tcGFyZXNpZyAgIC03ICAgICAgLTcuMCAgICAtPiAwCitkcWNtczQwMyBjb21wYXJlc2lnICAgLTdFKzAgICAtNy4wICAgIC0+IDAKK2RxY21zNDA0IGNvbXBhcmVzaWcgICAtNzBFLTEgIC03LjAgICAgLT4gMAorZHFjbXM0MDUgY29tcGFyZXNpZyAgIC0uN0UrMSAgLTcgICAgICAtPiAwCitkcWNtczQwNiBjb21wYXJlc2lnICAgLTcwRS0xICAtNyAgICAgIC0+IDAKK2RxY21zNDA3IGNvbXBhcmVzaWcgICAtNy4wICAgIC03RSswICAgLT4gMAorZHFjbXM0MDggY29tcGFyZXNpZyAgIC03LjAgICAgLTcwRS0xICAtPiAwCitkcWNtczQwOSBjb21wYXJlc2lnICAgLTcgICAgICAtLjdFKzEgIC0+IDAKK2RxY21zNDEwIGNvbXBhcmVzaWcgICAtNyAgICAgIC03MEUtMSAgLT4gMAorCitkcWNtczQyMCBjb21wYXJlc2lnICAgLTguMCAgICAtNy4wICAgIC0+IC0xCitkcWNtczQyMSBjb21wYXJlc2lnICAgLTguMCAgICAtNyAgICAgIC0+IC0xCitkcWNtczQyMiBjb21wYXJlc2lnICAgLTggICAgICAtNy4wICAgIC0+IC0xCitkcWNtczQyMyBjb21wYXJlc2lnICAgLThFKzAgICAtNy4wICAgIC0+IC0xCitkcWNtczQyNCBjb21wYXJlc2lnICAgLTgwRS0xICAtNy4wICAgIC0+IC0xCitkcWNtczQyNSBjb21wYXJlc2lnICAgLS44RSsxICAtNyAgICAgIC0+IC0xCitkcWNtczQyNiBjb21wYXJlc2lnICAgLTgwRS0xICAtNyAgICAgIC0+IC0xCitkcWNtczQyNyBjb21wYXJlc2lnICAgLTguMCAgICAtN0UrMCAgIC0+IC0xCitkcWNtczQyOCBjb21wYXJlc2lnICAgLTguMCAgICAtNzBFLTEgIC0+IC0xCitkcWNtczQyOSBjb21wYXJlc2lnICAgLTggICAgICAtLjdFKzEgIC0+IC0xCitkcWNtczQzMCBjb21wYXJlc2lnICAgLTggICAgICAtNzBFLTEgIC0+IC0xCisKK2RxY21zNDQwIGNvbXBhcmVzaWcgICAtOC4wICAgIC05LjAgICAgLT4gMQorZHFjbXM0NDEgY29tcGFyZXNpZyAgIC04LjAgICAgLTkgICAgICAtPiAxCitkcWNtczQ0MiBjb21wYXJlc2lnICAgLTggICAgICAtOS4wICAgIC0+IDEKK2RxY21zNDQzIGNvbXBhcmVzaWcgICAtOEUrMCAgIC05LjAgICAgLT4gMQorZHFjbXM0NDQgY29tcGFyZXNpZyAgIC04MEUtMSAgLTkuMCAgICAtPiAxCitkcWNtczQ0NSBjb21wYXJlc2lnICAgLS44RSsxICAtOSAgICAgIC0+IDEKK2RxY21zNDQ2IGNvbXBhcmVzaWcgICAtODBFLTEgIC05ICAgICAgLT4gMQorZHFjbXM0NDcgY29tcGFyZXNpZyAgIC04LjAgICAgLTlFKzAgICAtPiAxCitkcWNtczQ0OCBjb21wYXJlc2lnICAgLTguMCAgICAtOTBFLTEgIC0+IDEKK2RxY21zNDQ5IGNvbXBhcmVzaWcgICAtOCAgICAgIC0uOUUrMSAgLT4gMQorZHFjbXM0NTAgY29tcGFyZXNpZyAgIC04ICAgICAgLTkwRS0xICAtPiAxCisKKworLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCitkcWNtczQ3MyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNtczQ3NCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKK2RxY21zNDc1IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNtczQ3NiBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCitkcWNtczQ3NyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKK2RxY21zNDc4IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCitkcWNtczQ3OSBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNtczQ4MCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKK2RxY21zNDgxIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCitkcWNtczQ4MiBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCitkcWNtczQ4MyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKK2RxY21zNDg3IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMDBFKzg5IC0+IDAKK2RxY21zNDg4IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMEUtODkgLT4gMAorZHFjbXM0ODkgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDBFKzg5IC0+IDAKK2RxY21zNDkwIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDBFLTg5IC0+IDAKK2RxY21zNDkxIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMEUrODkgLT4gMAorZHFjbXM0OTIgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDBFLTg5IC0+IDAKK2RxY21zNDkzIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDBFKzg5IC0+IDAKK2RxY21zNDk0IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMEUtODkgLT4gMAorZHFjbXM0OTUgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDBFKzg5IC0+IDAKK2RxY21zNDk2IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjBFLTg5IC0+IDAKK2RxY21zNDk3IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAorCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCitkcWNtczUwMCBjb21wYXJlc2lnICAgIDEgICAgIDFFLTE1ICAgIC0+IDEKK2RxY21zNTAxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTQgICAgLT4gMQorZHFjbXM1MDIgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMyAgICAtPiAxCitkcWNtczUwMyBjb21wYXJlc2lnICAgIDEgICAgIDFFLTEyICAgIC0+IDEKK2RxY21zNTA0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTEgICAgLT4gMQorZHFjbXM1MDUgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMCAgICAtPiAxCitkcWNtczUwNiBjb21wYXJlc2lnICAgIDEgICAgIDFFLTkgICAgIC0+IDEKK2RxY21zNTA3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtOCAgICAgLT4gMQorZHFjbXM1MDggY29tcGFyZXNpZyAgICAxICAgICAxRS03ICAgICAtPiAxCitkcWNtczUwOSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTYgICAgIC0+IDEKK2RxY21zNTEwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNSAgICAgLT4gMQorZHFjbXM1MTEgY29tcGFyZXNpZyAgICAxICAgICAxRS00ICAgICAtPiAxCitkcWNtczUxMiBjb21wYXJlc2lnICAgIDEgICAgIDFFLTMgICAgIC0+IDEKK2RxY21zNTEzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMiAgICAgLT4gMQorZHFjbXM1MTQgY29tcGFyZXNpZyAgICAxICAgICAxRS0xICAgICAtPiAxCitkcWNtczUxNSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTAgICAgIC0+IDAKK2RxY21zNTE2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKK2RxY21zNTE3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMiAgICAgLT4gLTEKK2RxY21zNTE4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMyAgICAgLT4gLTEKK2RxY21zNTE5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKK2RxY21zNTIxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNSAgICAgLT4gLTEKK2RxY21zNTIyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNiAgICAgLT4gLTEKK2RxY21zNTIzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKK2RxY21zNTI0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrOCAgICAgLT4gLTEKK2RxY21zNTI1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrOSAgICAgLT4gLTEKK2RxY21zNTI2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKK2RxY21zNTI3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTEgICAgLT4gLTEKK2RxY21zNTI4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTIgICAgLT4gLTEKK2RxY21zNTI5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKK2RxY21zNTMwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTQgICAgLT4gLTEKK2RxY21zNTMxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTUgICAgLT4gLTEKKy0tIExSIHN3YXAKK2RxY21zNTQwIGNvbXBhcmVzaWcgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKK2RxY21zNTQxIGNvbXBhcmVzaWcgICAgMUUtMTQgIDEgICAgICAgLT4gLTEKK2RxY21zNTQyIGNvbXBhcmVzaWcgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKK2RxY21zNTQzIGNvbXBhcmVzaWcgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKK2RxY21zNTQ0IGNvbXBhcmVzaWcgICAgMUUtMTEgIDEgICAgICAgLT4gLTEKK2RxY21zNTQ1IGNvbXBhcmVzaWcgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKK2RxY21zNTQ2IGNvbXBhcmVzaWcgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKK2RxY21zNTQ3IGNvbXBhcmVzaWcgICAgMUUtOCAgIDEgICAgICAgLT4gLTEKK2RxY21zNTQ4IGNvbXBhcmVzaWcgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKK2RxY21zNTQ5IGNvbXBhcmVzaWcgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKK2RxY21zNTUwIGNvbXBhcmVzaWcgICAgMUUtNSAgIDEgICAgICAgLT4gLTEKK2RxY21zNTUxIGNvbXBhcmVzaWcgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKK2RxY21zNTUyIGNvbXBhcmVzaWcgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKK2RxY21zNTUzIGNvbXBhcmVzaWcgICAgMUUtMiAgIDEgICAgICAgLT4gLTEKK2RxY21zNTU0IGNvbXBhcmVzaWcgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKK2RxY21zNTU1IGNvbXBhcmVzaWcgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKK2RxY21zNTU2IGNvbXBhcmVzaWcgICAgMUUrMSAgIDEgICAgICAgLT4gIDEKK2RxY21zNTU3IGNvbXBhcmVzaWcgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKK2RxY21zNTU4IGNvbXBhcmVzaWcgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKK2RxY21zNTU5IGNvbXBhcmVzaWcgICAgMUUrNCAgIDEgICAgICAgLT4gIDEKK2RxY21zNTYxIGNvbXBhcmVzaWcgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKK2RxY21zNTYyIGNvbXBhcmVzaWcgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKK2RxY21zNTYzIGNvbXBhcmVzaWcgICAgMUUrNyAgIDEgICAgICAgLT4gIDEKK2RxY21zNTY0IGNvbXBhcmVzaWcgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKK2RxY21zNTY1IGNvbXBhcmVzaWcgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKK2RxY21zNTY2IGNvbXBhcmVzaWcgICAgMUUrMTAgIDEgICAgICAgLT4gIDEKK2RxY21zNTY3IGNvbXBhcmVzaWcgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKK2RxY21zNTY4IGNvbXBhcmVzaWcgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKK2RxY21zNTY5IGNvbXBhcmVzaWcgICAgMUUrMTMgIDEgICAgICAgLT4gIDEKK2RxY21zNTcwIGNvbXBhcmVzaWcgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKK2RxY21zNTcxIGNvbXBhcmVzaWcgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKKy0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQorZHFjbXM1ODAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDEKK2RxY21zNTgxIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxCitkcWNtczU4MiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQorZHFjbXM1ODMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDEKK2RxY21zNTg0IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxCitkcWNtczU4NSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQorZHFjbXM1ODYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDEKK2RxY21zNTg3IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxCitkcWNtczU4OCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQorZHFjbXM1ODkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xCitkcWNtczU5MCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTEKK2RxY21zNTkxIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQorZHFjbXM1OTIgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xCitkcWNtczU5MyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTEKK2RxY21zNTk0IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQorZHFjbXM1OTUgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xCitkcWNtczU5NiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTEKK2RxY21zNTk3IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQorZHFjbXM1OTggY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xCitkcWNtczU5OSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTEKKworLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKK2RxY21zNjAwIGNvbXBhcmVzaWcgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjAxIGNvbXBhcmVzaWcgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjAyIGNvbXBhcmVzaWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjAzIGNvbXBhcmVzaWcgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjA0IGNvbXBhcmVzaWcgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjA1IGNvbXBhcmVzaWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjA2IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjA3IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjA4IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjA5IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTEKK2RxY21zNjEwIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDEKK2RxY21zNjExIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDEKK2RxY21zNjEyIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDEKK2RxY21zNjEzIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDEKK2RxY21zNjE0IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDEKK2RxY21zNjE1IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDEKK2RxY21zNjE2IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDEKK2RxY21zNjE3IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDEKK2RxY21zNjE4IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDEKK2RxY21zNjE5IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDEKK2RxY21zNjIwIGNvbXBhcmVzaWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjIxIGNvbXBhcmVzaWcgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjIyIGNvbXBhcmVzaWcgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjIzIGNvbXBhcmVzaWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjI0IGNvbXBhcmVzaWcgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjI1IGNvbXBhcmVzaWcgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjI2IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjI3IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjI4IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjI5IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDEKK2RxY21zNjMwIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTEKK2RxY21zNjMxIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTEKK2RxY21zNjMyIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTEKK2RxY21zNjMzIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTEKK2RxY21zNjM0IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTEKK2RxY21zNjM1IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTEKK2RxY21zNjM2IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTEKK2RxY21zNjM3IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTEKK2RxY21zNjM4IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTEKK2RxY21zNjM5IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTEKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RxY21zNjQwIGNvbXBhcmVzaWcgICAwICAgICAwICAgLT4gMAorZHFjbXM2NDEgY29tcGFyZXNpZyAgIDAgICAgLTAgICAtPiAwCitkcWNtczY0MiBjb21wYXJlc2lnICAgMCAgICAtMC4wIC0+IDAKK2RxY21zNjQzIGNvbXBhcmVzaWcgICAwICAgICAwLjAgLT4gMAorZHFjbXM2NDQgY29tcGFyZXNpZyAgLTAgICAgIDAgICAtPiAwCitkcWNtczY0NSBjb21wYXJlc2lnICAtMCAgICAtMCAgIC0+IDAKK2RxY21zNjQ2IGNvbXBhcmVzaWcgIC0wICAgIC0wLjAgLT4gMAorZHFjbXM2NDcgY29tcGFyZXNpZyAgLTAgICAgIDAuMCAtPiAwCitkcWNtczY0OCBjb21wYXJlc2lnICAgMC4wICAgMCAgIC0+IDAKK2RxY21zNjQ5IGNvbXBhcmVzaWcgICAwLjAgIC0wICAgLT4gMAorZHFjbXM2NTAgY29tcGFyZXNpZyAgIDAuMCAgLTAuMCAtPiAwCitkcWNtczY1MSBjb21wYXJlc2lnICAgMC4wICAgMC4wIC0+IDAKK2RxY21zNjUyIGNvbXBhcmVzaWcgIC0wLjAgICAwICAgLT4gMAorZHFjbXM2NTMgY29tcGFyZXNpZyAgLTAuMCAgLTAgICAtPiAwCitkcWNtczY1NCBjb21wYXJlc2lnICAtMC4wICAtMC4wIC0+IDAKK2RxY21zNjU1IGNvbXBhcmVzaWcgIC0wLjAgICAwLjAgLT4gMAorCitkcWNtczY1NiBjb21wYXJlc2lnICAtMEUxICAgMC4wIC0+IDAKK2RxY21zNjU3IGNvbXBhcmVzaWcgIC0wRTIgICAwLjAgLT4gMAorZHFjbXM2NTggY29tcGFyZXNpZyAgIDBFMSAgIDAuMCAtPiAwCitkcWNtczY1OSBjb21wYXJlc2lnICAgMEUyICAgMC4wIC0+IDAKK2RxY21zNjYwIGNvbXBhcmVzaWcgIC0wRTEgICAwICAgLT4gMAorZHFjbXM2NjEgY29tcGFyZXNpZyAgLTBFMiAgIDAgICAtPiAwCitkcWNtczY2MiBjb21wYXJlc2lnICAgMEUxICAgMCAgIC0+IDAKK2RxY21zNjYzIGNvbXBhcmVzaWcgICAwRTIgICAwICAgLT4gMAorZHFjbXM2NjQgY29tcGFyZXNpZyAgLTBFMSAgLTBFMSAtPiAwCitkcWNtczY2NSBjb21wYXJlc2lnICAtMEUyICAtMEUxIC0+IDAKK2RxY21zNjY2IGNvbXBhcmVzaWcgICAwRTEgIC0wRTEgLT4gMAorZHFjbXM2NjcgY29tcGFyZXNpZyAgIDBFMiAgLTBFMSAtPiAwCitkcWNtczY2OCBjb21wYXJlc2lnICAtMEUxICAtMEUyIC0+IDAKK2RxY21zNjY5IGNvbXBhcmVzaWcgIC0wRTIgIC0wRTIgLT4gMAorZHFjbXM2NzAgY29tcGFyZXNpZyAgIDBFMSAgLTBFMiAtPiAwCitkcWNtczY3MSBjb21wYXJlc2lnICAgMEUyICAtMEUyIC0+IDAKK2RxY21zNjcyIGNvbXBhcmVzaWcgIC0wRTEgICAwRTEgLT4gMAorZHFjbXM2NzMgY29tcGFyZXNpZyAgLTBFMiAgIDBFMSAtPiAwCitkcWNtczY3NCBjb21wYXJlc2lnICAgMEUxICAgMEUxIC0+IDAKK2RxY21zNjc1IGNvbXBhcmVzaWcgICAwRTIgICAwRTEgLT4gMAorZHFjbXM2NzYgY29tcGFyZXNpZyAgLTBFMSAgIDBFMiAtPiAwCitkcWNtczY3NyBjb21wYXJlc2lnICAtMEUyICAgMEUyIC0+IDAKK2RxY21zNjc4IGNvbXBhcmVzaWcgICAwRTEgICAwRTIgLT4gMAorZHFjbXM2NzkgY29tcGFyZXNpZyAgIDBFMiAgIDBFMiAtPiAwCisKKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKK2RxY21zNjgwIGNvbXBhcmVzaWcgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAorZHFjbXM2ODEgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAgICAgICAgICAtPiAwCitkcWNtczY4MiBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDAKK2RxY21zNjgzIGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMAorZHFjbXM2ODQgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAwCitkcWNtczY4NSBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDAKK2RxY21zNjg2IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMAorZHFjbXM2ODcgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAwCitkcWNtczY4OCBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDAKK2RxY21zNjg5IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMAorZHFjbXM2OTAgY29tcGFyZXNpZyAgIDEyICAgICAgICAgICAgICAxMiAtPiAwCitkcWNtczY5MSBjb21wYXJlc2lnICAgMTIuMCAgICAgICAgICAgIDEyIC0+IDAKK2RxY21zNjkyIGNvbXBhcmVzaWcgICAxMi4wMCAgICAgICAgICAgMTIgLT4gMAorZHFjbXM2OTMgY29tcGFyZXNpZyAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAwCitkcWNtczY5NCBjb21wYXJlc2lnICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IDAKK2RxY21zNjk1IGNvbXBhcmVzaWcgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gMAorZHFjbXM2OTYgY29tcGFyZXNpZyAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAwCitkcWNtczY5NyBjb21wYXJlc2lnICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IDAKK2RxY21zNjk4IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gMAorZHFjbXM2OTkgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAwCisKKy0tIGZpcnN0LCBzZWNvbmQsICYgbGFzdCBkaWdpdAorZHFjbXM3MDAgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NSAtPiAxCitkcWNtczcwMSBjb21wYXJlc2lnICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDAKK2RxY21zNzAyIGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTcgLT4gLTEKK2RxY21zNzAzIGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDAyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMQorZHFjbXM3MDQgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwCitkcWNtczcwNSBjb21wYXJlc2lnICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAyMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IC0xCitkcWNtczcwNiBjb21wYXJlc2lnICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMDM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDEKK2RxY21zNzA3IGNvbXBhcmVzaWcgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMAorZHFjbXM3MDggY29tcGFyZXNpZyAgIDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAtMQorCistLSBtaXNjZWxsYW5lb3VzCitkcWNtczcyMSBjb21wYXJlc2lnIDEyMzQ1Njc4MDAwIDEgLT4gMQorZHFjbXM3MjIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4MDAwIC0+IC0xCitkcWNtczcyMyBjb21wYXJlc2lnIDEyMzQ1Njc4MDAgIDEgLT4gMQorZHFjbXM3MjQgY29tcGFyZXNpZyAxIDEyMzQ1Njc4MDAgIC0+IC0xCitkcWNtczcyNSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAgIDEgLT4gMQorZHFjbXM3MjYgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTAgIC0+IC0xCitkcWNtczcyNyBjb21wYXJlc2lnIDEyMzQ1Njc4OTEgIDEgLT4gMQorZHFjbXM3MjggY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTEgIC0+IC0xCitkcWNtczcyOSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAxIDEgLT4gMQorZHFjbXM3MzAgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTAxIC0+IC0xCitkcWNtczczMSBjb21wYXJlc2lnIDEyMzQ1Njc4OTYgIDEgLT4gMQorZHFjbXM3MzIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTYgIC0+IC0xCisKKy0tIHJlc2lkdWUgY2FzZXMgYXQgbG93ZXIgcHJlY2lzaW9uCitkcWNtczc0MCBjb21wYXJlc2lnICAxICAwLjk5OTk5OTkgIC0+IDEKK2RxY21zNzQxIGNvbXBhcmVzaWcgIDEgIDAuOTk5OTk5ICAgLT4gMQorZHFjbXM3NDIgY29tcGFyZXNpZyAgMSAgMC45OTk5OSAgICAtPiAxCitkcWNtczc0MyBjb21wYXJlc2lnICAxICAxLjAwMDAgICAgIC0+IDAKK2RxY21zNzQ0IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDEgICAgLT4gLTEKK2RxY21zNzQ1IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAxICAgLT4gLTEKK2RxY21zNzQ2IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAwMSAgLT4gLTEKK2RxY21zNzUwIGNvbXBhcmVzaWcgIDAuOTk5OTk5OSAgMSAgLT4gLTEKK2RxY21zNzUxIGNvbXBhcmVzaWcgIDAuOTk5OTk5ICAgMSAgLT4gLTEKK2RxY21zNzUyIGNvbXBhcmVzaWcgIDAuOTk5OTkgICAgMSAgLT4gLTEKK2RxY21zNzUzIGNvbXBhcmVzaWcgIDEuMDAwMCAgICAgMSAgLT4gMAorZHFjbXM3NTQgY29tcGFyZXNpZyAgMS4wMDAwMSAgICAxICAtPiAxCitkcWNtczc1NSBjb21wYXJlc2lnICAxLjAwMDAwMSAgIDEgIC0+IDEKK2RxY21zNzU2IGNvbXBhcmVzaWcgIDEuMDAwMDAwMSAgMSAgLT4gMQorCistLSBTcGVjaWFscworZHFjbXM3ODAgY29tcGFyZXNpZyAgSW5mICAtSW5mICAgLT4gIDEKK2RxY21zNzgxIGNvbXBhcmVzaWcgIEluZiAgLTEwMDAgIC0+ICAxCitkcWNtczc4MiBjb21wYXJlc2lnICBJbmYgIC0xICAgICAtPiAgMQorZHFjbXM3ODMgY29tcGFyZXNpZyAgSW5mICAtMCAgICAgLT4gIDEKK2RxY21zNzg0IGNvbXBhcmVzaWcgIEluZiAgIDAgICAgIC0+ICAxCitkcWNtczc4NSBjb21wYXJlc2lnICBJbmYgICAxICAgICAtPiAgMQorZHFjbXM3ODYgY29tcGFyZXNpZyAgSW5mICAgMTAwMCAgLT4gIDEKK2RxY21zNzg3IGNvbXBhcmVzaWcgIEluZiAgIEluZiAgIC0+ICAwCitkcWNtczc4OCBjb21wYXJlc2lnIC0xMDAwICBJbmYgICAtPiAtMQorZHFjbXM3ODkgY29tcGFyZXNpZyAtSW5mICAgSW5mICAgLT4gLTEKK2RxY21zNzkwIGNvbXBhcmVzaWcgLTEgICAgIEluZiAgIC0+IC0xCitkcWNtczc5MSBjb21wYXJlc2lnIC0wICAgICBJbmYgICAtPiAtMQorZHFjbXM3OTIgY29tcGFyZXNpZyAgMCAgICAgSW5mICAgLT4gLTEKK2RxY21zNzkzIGNvbXBhcmVzaWcgIDEgICAgIEluZiAgIC0+IC0xCitkcWNtczc5NCBjb21wYXJlc2lnICAxMDAwICBJbmYgICAtPiAtMQorZHFjbXM3OTUgY29tcGFyZXNpZyAgSW5mICAgSW5mICAgLT4gIDAKKworZHFjbXM4MDAgY29tcGFyZXNpZyAtSW5mICAtSW5mICAgLT4gIDAKK2RxY21zODAxIGNvbXBhcmVzaWcgLUluZiAgLTEwMDAgIC0+IC0xCitkcWNtczgwMiBjb21wYXJlc2lnIC1JbmYgIC0xICAgICAtPiAtMQorZHFjbXM4MDMgY29tcGFyZXNpZyAtSW5mICAtMCAgICAgLT4gLTEKK2RxY21zODA0IGNvbXBhcmVzaWcgLUluZiAgIDAgICAgIC0+IC0xCitkcWNtczgwNSBjb21wYXJlc2lnIC1JbmYgICAxICAgICAtPiAtMQorZHFjbXM4MDYgY29tcGFyZXNpZyAtSW5mICAgMTAwMCAgLT4gLTEKK2RxY21zODA3IGNvbXBhcmVzaWcgLUluZiAgIEluZiAgIC0+IC0xCitkcWNtczgwOCBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgMAorZHFjbXM4MDkgY29tcGFyZXNpZyAtMTAwMCAtSW5mICAgLT4gIDEKK2RxY21zODEwIGNvbXBhcmVzaWcgLTEgICAgLUluZiAgIC0+ICAxCitkcWNtczgxMSBjb21wYXJlc2lnIC0wICAgIC1JbmYgICAtPiAgMQorZHFjbXM4MTIgY29tcGFyZXNpZyAgMCAgICAtSW5mICAgLT4gIDEKK2RxY21zODEzIGNvbXBhcmVzaWcgIDEgICAgLUluZiAgIC0+ICAxCitkcWNtczgxNCBjb21wYXJlc2lnICAxMDAwIC1JbmYgICAtPiAgMQorZHFjbXM4MTUgY29tcGFyZXNpZyAgSW5mICAtSW5mICAgLT4gIDEKKworZHFjbXM4MjEgY29tcGFyZXNpZyAgTmFOIC1JbmYgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODIyIGNvbXBhcmVzaWcgIE5hTiAtMTAwMCAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgyMyBjb21wYXJlc2lnICBOYU4gLTEgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MjQgY29tcGFyZXNpZyAgTmFOIC0wICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODI1IGNvbXBhcmVzaWcgIE5hTiAgMCAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgyNiBjb21wYXJlc2lnICBOYU4gIDEgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MjcgY29tcGFyZXNpZyAgTmFOICAxMDAwICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODI4IGNvbXBhcmVzaWcgIE5hTiAgSW5mICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgyOSBjb21wYXJlc2lnICBOYU4gIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MzAgY29tcGFyZXNpZyAtSW5mICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODMxIGNvbXBhcmVzaWcgLTEwMDAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgzMiBjb21wYXJlc2lnIC0xICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MzMgY29tcGFyZXNpZyAtMCAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODM0IGNvbXBhcmVzaWcgIDAgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgzNSBjb21wYXJlc2lnICAxICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MzYgY29tcGFyZXNpZyAgMTAwMCBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODM3IGNvbXBhcmVzaWcgIEluZiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczgzOCBjb21wYXJlc2lnIC1OYU4gLU5hTiAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4MzkgY29tcGFyZXNpZyArTmFOIC1OYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODQwIGNvbXBhcmVzaWcgLU5hTiArTmFOICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2RxY21zODQxIGNvbXBhcmVzaWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg0MiBjb21wYXJlc2lnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NDMgY29tcGFyZXNpZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODQ0IGNvbXBhcmVzaWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg0NSBjb21wYXJlc2lnICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NDYgY29tcGFyZXNpZyAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODQ3IGNvbXBhcmVzaWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg0OCBjb21wYXJlc2lnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NDkgY29tcGFyZXNpZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODUwIGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg1MSBjb21wYXJlc2lnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NTIgY29tcGFyZXNpZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODUzIGNvbXBhcmVzaWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg1NCBjb21wYXJlc2lnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NTUgY29tcGFyZXNpZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODU2IGNvbXBhcmVzaWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg1NyBjb21wYXJlc2lnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NTggY29tcGFyZXNpZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODU5IGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxY21zODYwIGNvbXBhcmVzaWcgIE5hTjkgLUluZiAgIC0+ICBOYU45ICAgIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg2MSBjb21wYXJlc2lnICBOYU44ICA5OTkgICAtPiAgTmFOOCAgICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NjIgY29tcGFyZXNpZyAgTmFONzcgSW5mICAgLT4gIE5hTjc3ICAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODYzIGNvbXBhcmVzaWcgLU5hTjY3IE5hTjUgIC0+IC1OYU42NyAgIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg2NCBjb21wYXJlc2lnIC1JbmYgIC1OYU40ICAtPiAtTmFONCAgICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NjUgY29tcGFyZXNpZyAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzICAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODY2IGNvbXBhcmVzaWcgIEluZiAgIE5hTjIgIC0+ICBOYU4yICAgIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg2NyBjb21wYXJlc2lnIC1OYU40MSAtTmFONDIgLT4gLU5hTjQxICBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NjggY29tcGFyZXNpZyArTmFONDEgLU5hTjQyIC0+ICBOYU40MSAgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODY5IGNvbXBhcmVzaWcgLU5hTjQxICtOYU40MiAtPiAtTmFONDEgIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg3MCBjb21wYXJlc2lnICtOYU40MSArTmFONDIgLT4gIE5hTjQxICBJbnZhbGlkX29wZXJhdGlvbgorCitkcWNtczg3MSBjb21wYXJlc2lnIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODcyIGNvbXBhcmVzaWcgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NzMgY29tcGFyZXNpZyAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg3NCBjb21wYXJlc2lnICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODc1IGNvbXBhcmVzaWcgIE5hTjg1ICBzTmFOODMgIC0+ICBOYU44MyBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NzYgY29tcGFyZXNpZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcWNtczg3NyBjb21wYXJlc2lnICAwODggICAgc05hTjgxICAtPiAgTmFOODEgSW52YWxpZF9vcGVyYXRpb24KK2RxY21zODc4IGNvbXBhcmVzaWcgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM4NzkgY29tcGFyZXNpZyAgTmFOICAgLXNOYU44OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHdpZGUgcmFuZ2UKK2RxY21zODgwIGNvbXBhcmVzaWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrNjE0NCAtPiAtMQorZHFjbXM4ODEgY29tcGFyZXNpZyA5RSs2MTQ0ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCitkcWNtczg4MiBjb21wYXJlc2lnICswLjEwMCA5RS02MTQzICAgICAgICAgICAgICAgLT4gIDEKK2RxY21zODgzIGNvbXBhcmVzaWcgOUUtNjE0MyArMC4xMDAgICAgICAgICAgICAgICAtPiAtMQorZHFjbXM4ODUgY29tcGFyZXNpZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs2MTQ0IC0+IC0xCitkcWNtczg4NiBjb21wYXJlc2lnIDlFKzYxNDQgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKK2RxY21zODg3IGNvbXBhcmVzaWcgLTAuMTAwIDlFLTYxNDMgICAgICAgICAgICAgICAtPiAtMQorZHFjbXM4ODggY29tcGFyZXNpZyA5RS02MTQzIC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAxCisKKy0tIHNpZ25zCitkcWNtczkwMSBjb21wYXJlc2lnICAxZSs3NyAgMWUrMTEgLT4gIDEKK2RxY21zOTAyIGNvbXBhcmVzaWcgIDFlKzc3IC0xZSsxMSAtPiAgMQorZHFjbXM5MDMgY29tcGFyZXNpZyAtMWUrNzcgIDFlKzExIC0+IC0xCitkcWNtczkwNCBjb21wYXJlc2lnIC0xZSs3NyAtMWUrMTEgLT4gLTEKK2RxY21zOTA1IGNvbXBhcmVzaWcgIDFlLTc3ICAxZS0xMSAtPiAtMQorZHFjbXM5MDYgY29tcGFyZXNpZyAgMWUtNzcgLTFlLTExIC0+ICAxCitkcWNtczkwNyBjb21wYXJlc2lnIC0xZS03NyAgMWUtMTEgLT4gLTEKK2RxY21zOTA4IGNvbXBhcmVzaWcgLTFlLTc3IC0xZS0xMSAtPiAgMQorCistLSBOdWxsIHRlc3RzCitkcWNtczk5MCBjb21wYXJlc2lnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFjbXM5OTEgY29tcGFyZXNpZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlVG90YWwuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlVG90YWwuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzcwMWNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVUb3RhbC5kZWNUZXN0CkBAIC0wLDAgKzEsNzA2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQ29tcGFyZVRvdGFsLmRlY1Rlc3QgLS0gZGVjUXVhZCBjb21wYXJpc29uIHVzaW5nIHRvdGFsIG9yZGVyaW5nICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCistLSBTaW1pbGFybHksIGNvbXBhcmV0b3RhbCB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzCistLSB0aGFuIGNvbXBhcmUuCisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcWNvdDAwMSBjb21wYXJldG90YWwgIC0yICAtMiAgLT4gMAorZHFjb3QwMDIgY29tcGFyZXRvdGFsICAtMiAgLTEgIC0+IC0xCitkcWNvdDAwMyBjb21wYXJldG90YWwgIC0yICAgMCAgLT4gLTEKK2RxY290MDA0IGNvbXBhcmV0b3RhbCAgLTIgICAxICAtPiAtMQorZHFjb3QwMDUgY29tcGFyZXRvdGFsICAtMiAgIDIgIC0+IC0xCitkcWNvdDAwNiBjb21wYXJldG90YWwgIC0xICAtMiAgLT4gMQorZHFjb3QwMDcgY29tcGFyZXRvdGFsICAtMSAgLTEgIC0+IDAKK2RxY290MDA4IGNvbXBhcmV0b3RhbCAgLTEgICAwICAtPiAtMQorZHFjb3QwMDkgY29tcGFyZXRvdGFsICAtMSAgIDEgIC0+IC0xCitkcWNvdDAxMCBjb21wYXJldG90YWwgIC0xICAgMiAgLT4gLTEKK2RxY290MDExIGNvbXBhcmV0b3RhbCAgIDAgIC0yICAtPiAxCitkcWNvdDAxMiBjb21wYXJldG90YWwgICAwICAtMSAgLT4gMQorZHFjb3QwMTMgY29tcGFyZXRvdGFsICAgMCAgIDAgIC0+IDAKK2RxY290MDE0IGNvbXBhcmV0b3RhbCAgIDAgICAxICAtPiAtMQorZHFjb3QwMTUgY29tcGFyZXRvdGFsICAgMCAgIDIgIC0+IC0xCitkcWNvdDAxNiBjb21wYXJldG90YWwgICAxICAtMiAgLT4gMQorZHFjb3QwMTcgY29tcGFyZXRvdGFsICAgMSAgLTEgIC0+IDEKK2RxY290MDE4IGNvbXBhcmV0b3RhbCAgIDEgICAwICAtPiAxCitkcWNvdDAxOSBjb21wYXJldG90YWwgICAxICAgMSAgLT4gMAorZHFjb3QwMjAgY29tcGFyZXRvdGFsICAgMSAgIDIgIC0+IC0xCitkcWNvdDAyMSBjb21wYXJldG90YWwgICAyICAtMiAgLT4gMQorZHFjb3QwMjIgY29tcGFyZXRvdGFsICAgMiAgLTEgIC0+IDEKK2RxY290MDIzIGNvbXBhcmV0b3RhbCAgIDIgICAwICAtPiAxCitkcWNvdDAyNSBjb21wYXJldG90YWwgICAyICAgMSAgLT4gMQorZHFjb3QwMjYgY29tcGFyZXRvdGFsICAgMiAgIDIgIC0+IDAKKworZHFjb3QwMzEgY29tcGFyZXRvdGFsICAtMjAgIC0yMCAgLT4gMAorZHFjb3QwMzIgY29tcGFyZXRvdGFsICAtMjAgIC0xMCAgLT4gLTEKK2RxY290MDMzIGNvbXBhcmV0b3RhbCAgLTIwICAgMDAgIC0+IC0xCitkcWNvdDAzNCBjb21wYXJldG90YWwgIC0yMCAgIDEwICAtPiAtMQorZHFjb3QwMzUgY29tcGFyZXRvdGFsICAtMjAgICAyMCAgLT4gLTEKK2RxY290MDM2IGNvbXBhcmV0b3RhbCAgLTEwICAtMjAgIC0+IDEKK2RxY290MDM3IGNvbXBhcmV0b3RhbCAgLTEwICAtMTAgIC0+IDAKK2RxY290MDM4IGNvbXBhcmV0b3RhbCAgLTEwICAgMDAgIC0+IC0xCitkcWNvdDAzOSBjb21wYXJldG90YWwgIC0xMCAgIDEwICAtPiAtMQorZHFjb3QwNDAgY29tcGFyZXRvdGFsICAtMTAgICAyMCAgLT4gLTEKK2RxY290MDQxIGNvbXBhcmV0b3RhbCAgIDAwICAtMjAgIC0+IDEKK2RxY290MDQyIGNvbXBhcmV0b3RhbCAgIDAwICAtMTAgIC0+IDEKK2RxY290MDQzIGNvbXBhcmV0b3RhbCAgIDAwICAgMDAgIC0+IDAKK2RxY290MDQ0IGNvbXBhcmV0b3RhbCAgIDAwICAgMTAgIC0+IC0xCitkcWNvdDA0NSBjb21wYXJldG90YWwgICAwMCAgIDIwICAtPiAtMQorZHFjb3QwNDYgY29tcGFyZXRvdGFsICAgMTAgIC0yMCAgLT4gMQorZHFjb3QwNDcgY29tcGFyZXRvdGFsICAgMTAgIC0xMCAgLT4gMQorZHFjb3QwNDggY29tcGFyZXRvdGFsICAgMTAgICAwMCAgLT4gMQorZHFjb3QwNDkgY29tcGFyZXRvdGFsICAgMTAgICAxMCAgLT4gMAorZHFjb3QwNTAgY29tcGFyZXRvdGFsICAgMTAgICAyMCAgLT4gLTEKK2RxY290MDUxIGNvbXBhcmV0b3RhbCAgIDIwICAtMjAgIC0+IDEKK2RxY290MDUyIGNvbXBhcmV0b3RhbCAgIDIwICAtMTAgIC0+IDEKK2RxY290MDUzIGNvbXBhcmV0b3RhbCAgIDIwICAgMDAgIC0+IDEKK2RxY290MDU1IGNvbXBhcmV0b3RhbCAgIDIwICAgMTAgIC0+IDEKK2RxY290MDU2IGNvbXBhcmV0b3RhbCAgIDIwICAgMjAgIC0+IDAKKworZHFjb3QwNjEgY29tcGFyZXRvdGFsICAtMi4wICAtMi4wICAtPiAwCitkcWNvdDA2MiBjb21wYXJldG90YWwgIC0yLjAgIC0xLjAgIC0+IC0xCitkcWNvdDA2MyBjb21wYXJldG90YWwgIC0yLjAgICAwLjAgIC0+IC0xCitkcWNvdDA2NCBjb21wYXJldG90YWwgIC0yLjAgICAxLjAgIC0+IC0xCitkcWNvdDA2NSBjb21wYXJldG90YWwgIC0yLjAgICAyLjAgIC0+IC0xCitkcWNvdDA2NiBjb21wYXJldG90YWwgIC0xLjAgIC0yLjAgIC0+IDEKK2RxY290MDY3IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTEuMCAgLT4gMAorZHFjb3QwNjggY29tcGFyZXRvdGFsICAtMS4wICAgMC4wICAtPiAtMQorZHFjb3QwNjkgY29tcGFyZXRvdGFsICAtMS4wICAgMS4wICAtPiAtMQorZHFjb3QwNzAgY29tcGFyZXRvdGFsICAtMS4wICAgMi4wICAtPiAtMQorZHFjb3QwNzEgY29tcGFyZXRvdGFsICAgMC4wICAtMi4wICAtPiAxCitkcWNvdDA3MiBjb21wYXJldG90YWwgICAwLjAgIC0xLjAgIC0+IDEKK2RxY290MDczIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAgLT4gMAorZHFjb3QwNzQgY29tcGFyZXRvdGFsICAgMC4wICAgMS4wICAtPiAtMQorZHFjb3QwNzUgY29tcGFyZXRvdGFsICAgMC4wICAgMi4wICAtPiAtMQorZHFjb3QwNzYgY29tcGFyZXRvdGFsICAgMS4wICAtMi4wICAtPiAxCitkcWNvdDA3NyBjb21wYXJldG90YWwgICAxLjAgIC0xLjAgIC0+IDEKK2RxY290MDc4IGNvbXBhcmV0b3RhbCAgIDEuMCAgIDAuMCAgLT4gMQorZHFjb3QwNzkgY29tcGFyZXRvdGFsICAgMS4wICAgMS4wICAtPiAwCitkcWNvdDA4MCBjb21wYXJldG90YWwgICAxLjAgICAyLjAgIC0+IC0xCitkcWNvdDA4MSBjb21wYXJldG90YWwgICAyLjAgIC0yLjAgIC0+IDEKK2RxY290MDgyIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTEuMCAgLT4gMQorZHFjb3QwODMgY29tcGFyZXRvdGFsICAgMi4wICAgMC4wICAtPiAxCitkcWNvdDA4NSBjb21wYXJldG90YWwgICAyLjAgICAxLjAgIC0+IDEKK2RxY290MDg2IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDIuMCAgLT4gMAorCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKK2RxY290MDkwIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAwCitkcWNvdDA5MSBjb21wYXJldG90YWwgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTEKK2RxY290MDkyIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxCitkcWNvdDA5MyBjb21wYXJldG90YWwgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMAorCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMKKy0tIGluIHRoaXMgZmlyc3QgZ3JvdXAsIGNvbXBhcmUgd291bGQgY29tcGFyZSBhbGwgZXF1YWwKK2RxY290MTAwIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3LjAgICAgLT4gMAorZHFjb3QxMDEgY29tcGFyZXRvdGFsICAgNy4wICAgIDcgICAgICAtPiAtMQorZHFjb3QxMDIgY29tcGFyZXRvdGFsICAgNyAgICAgIDcuMCAgICAtPiAxCitkcWNvdDEwMyBjb21wYXJldG90YWwgICA3RSswICAgNy4wICAgIC0+IDEKK2RxY290MTA0IGNvbXBhcmV0b3RhbCAgIDcwRS0xICA3LjAgICAgLT4gMAorZHFjb3QxMDUgY29tcGFyZXRvdGFsICAgMC43RSsxIDcgICAgICAtPiAwCitkcWNvdDEwNiBjb21wYXJldG90YWwgICA3MEUtMSAgNyAgICAgIC0+IC0xCitkcWNvdDEwNyBjb21wYXJldG90YWwgICA3LjAgICAgN0UrMCAgIC0+IC0xCitkcWNvdDEwOCBjb21wYXJldG90YWwgICA3LjAgICAgNzBFLTEgIC0+IDAKK2RxY290MTA5IGNvbXBhcmV0b3RhbCAgIDcgICAgICAwLjdFKzEgLT4gMAorZHFjb3QxMTAgY29tcGFyZXRvdGFsICAgNyAgICAgIDcwRS0xICAtPiAxCisKK2RxY290MTIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3LjAgICAgLT4gMQorZHFjb3QxMjEgY29tcGFyZXRvdGFsICAgOC4wICAgIDcgICAgICAtPiAxCitkcWNvdDEyMiBjb21wYXJldG90YWwgICA4ICAgICAgNy4wICAgIC0+IDEKK2RxY290MTIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICA3LjAgICAgLT4gMQorZHFjb3QxMjQgY29tcGFyZXRvdGFsICAgODBFLTEgIDcuMCAgICAtPiAxCitkcWNvdDEyNSBjb21wYXJldG90YWwgICAwLjhFKzEgNyAgICAgIC0+IDEKK2RxY290MTI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3ICAgICAgLT4gMQorZHFjb3QxMjcgY29tcGFyZXRvdGFsICAgOC4wICAgIDdFKzAgICAtPiAxCitkcWNvdDEyOCBjb21wYXJldG90YWwgICA4LjAgICAgNzBFLTEgIC0+IDEKK2RxY290MTI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAwLjdFKzEgIC0+IDEKK2RxY290MTMwIGNvbXBhcmV0b3RhbCAgIDggICAgICA3MEUtMSAgLT4gMQorCitkcWNvdDE0MCBjb21wYXJldG90YWwgICA4LjAgICAgOS4wICAgIC0+IC0xCitkcWNvdDE0MSBjb21wYXJldG90YWwgICA4LjAgICAgOSAgICAgIC0+IC0xCitkcWNvdDE0MiBjb21wYXJldG90YWwgICA4ICAgICAgOS4wICAgIC0+IC0xCitkcWNvdDE0MyBjb21wYXJldG90YWwgICA4RSswICAgOS4wICAgIC0+IC0xCitkcWNvdDE0NCBjb21wYXJldG90YWwgICA4MEUtMSAgOS4wICAgIC0+IC0xCitkcWNvdDE0NSBjb21wYXJldG90YWwgICAwLjhFKzEgOSAgICAgIC0+IC0xCitkcWNvdDE0NiBjb21wYXJldG90YWwgICA4MEUtMSAgOSAgICAgIC0+IC0xCitkcWNvdDE0NyBjb21wYXJldG90YWwgICA4LjAgICAgOUUrMCAgIC0+IC0xCitkcWNvdDE0OCBjb21wYXJldG90YWwgICA4LjAgICAgOTBFLTEgIC0+IC0xCitkcWNvdDE0OSBjb21wYXJldG90YWwgICA4ICAgICAgMC45RSsxIC0+IC0xCitkcWNvdDE1MCBjb21wYXJldG90YWwgICA4ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4KK2RxY290MjAwIGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3LjAgICAgLT4gLTEKK2RxY290MjAxIGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3ICAgICAgLT4gLTEKK2RxY290MjAyIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3LjAgICAgLT4gLTEKK2RxY290MjAzIGNvbXBhcmV0b3RhbCAgLTdFKzAgICA3LjAgICAgLT4gLTEKK2RxY290MjA0IGNvbXBhcmV0b3RhbCAgLTcwRS0xICA3LjAgICAgLT4gLTEKK2RxY290MjA1IGNvbXBhcmV0b3RhbCAgLTAuN0UrMSA3ICAgICAgLT4gLTEKK2RxY290MjA2IGNvbXBhcmV0b3RhbCAgLTcwRS0xICA3ICAgICAgLT4gLTEKK2RxY290MjA3IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3RSswICAgLT4gLTEKK2RxY290MjA4IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3MEUtMSAgLT4gLTEKK2RxY290MjA5IGNvbXBhcmV0b3RhbCAgLTcgICAgICAwLjdFKzEgLT4gLTEKK2RxY290MjEwIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3MEUtMSAgLT4gLTEKKworZHFjb3QyMjAgY29tcGFyZXRvdGFsICAtOC4wICAgIDcuMCAgICAtPiAtMQorZHFjb3QyMjEgY29tcGFyZXRvdGFsICAtOC4wICAgIDcgICAgICAtPiAtMQorZHFjb3QyMjIgY29tcGFyZXRvdGFsICAtOCAgICAgIDcuMCAgICAtPiAtMQorZHFjb3QyMjMgY29tcGFyZXRvdGFsICAtOEUrMCAgIDcuMCAgICAtPiAtMQorZHFjb3QyMjQgY29tcGFyZXRvdGFsICAtODBFLTEgIDcuMCAgICAtPiAtMQorZHFjb3QyMjUgY29tcGFyZXRvdGFsICAtMC44RSsxIDcgICAgICAtPiAtMQorZHFjb3QyMjYgY29tcGFyZXRvdGFsICAtODBFLTEgIDcgICAgICAtPiAtMQorZHFjb3QyMjcgY29tcGFyZXRvdGFsICAtOC4wICAgIDdFKzAgICAtPiAtMQorZHFjb3QyMjggY29tcGFyZXRvdGFsICAtOC4wICAgIDcwRS0xICAtPiAtMQorZHFjb3QyMjkgY29tcGFyZXRvdGFsICAtOCAgICAgIDAuN0UrMSAtPiAtMQorZHFjb3QyMzAgY29tcGFyZXRvdGFsICAtOCAgICAgIDcwRS0xICAtPiAtMQorCitkcWNvdDI0MCBjb21wYXJldG90YWwgIC04LjAgICAgOS4wICAgIC0+IC0xCitkcWNvdDI0MSBjb21wYXJldG90YWwgIC04LjAgICAgOSAgICAgIC0+IC0xCitkcWNvdDI0MiBjb21wYXJldG90YWwgIC04ICAgICAgOS4wICAgIC0+IC0xCitkcWNvdDI0MyBjb21wYXJldG90YWwgIC04RSswICAgOS4wICAgIC0+IC0xCitkcWNvdDI0NCBjb21wYXJldG90YWwgIC04MEUtMSAgOS4wICAgIC0+IC0xCitkcWNvdDI0NSBjb21wYXJldG90YWwgIC0wLjhFKzEgOSAgICAgIC0+IC0xCitkcWNvdDI0NiBjb21wYXJldG90YWwgIC04MEUtMSAgOSAgICAgIC0+IC0xCitkcWNvdDI0NyBjb21wYXJldG90YWwgIC04LjAgICAgOUUrMCAgIC0+IC0xCitkcWNvdDI0OCBjb21wYXJldG90YWwgIC04LjAgICAgOTBFLTEgIC0+IC0xCitkcWNvdDI0OSBjb21wYXJldG90YWwgIC04ICAgICAgMC45RSsxIC0+IC0xCitkcWNvdDI1MCBjb21wYXJldG90YWwgIC04ICAgICAgOTBFLTEgIC0+IC0xCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4KK2RxY290MzAwIGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNy4wICAgIC0+IDEKK2RxY290MzAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNyAgICAgIC0+IDEKK2RxY290MzAyIGNvbXBhcmV0b3RhbCAgIDcgICAgICAtNy4wICAgIC0+IDEKK2RxY290MzAzIGNvbXBhcmV0b3RhbCAgIDdFKzAgICAtNy4wICAgIC0+IDEKK2RxY290MzA0IGNvbXBhcmV0b3RhbCAgIDcwRS0xICAtNy4wICAgIC0+IDEKK2RxY290MzA1IGNvbXBhcmV0b3RhbCAgIC43RSsxICAtNyAgICAgIC0+IDEKK2RxY290MzA2IGNvbXBhcmV0b3RhbCAgIDcwRS0xICAtNyAgICAgIC0+IDEKK2RxY290MzA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtN0UrMCAgIC0+IDEKK2RxY290MzA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNzBFLTEgIC0+IDEKK2RxY290MzA5IGNvbXBhcmV0b3RhbCAgIDcgICAgICAtLjdFKzEgIC0+IDEKK2RxY290MzEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICAtNzBFLTEgIC0+IDEKKworZHFjb3QzMjAgY29tcGFyZXRvdGFsICAgOC4wICAgIC03LjAgICAgLT4gMQorZHFjb3QzMjEgY29tcGFyZXRvdGFsICAgOC4wICAgIC03ICAgICAgLT4gMQorZHFjb3QzMjIgY29tcGFyZXRvdGFsICAgOCAgICAgIC03LjAgICAgLT4gMQorZHFjb3QzMjMgY29tcGFyZXRvdGFsICAgOEUrMCAgIC03LjAgICAgLT4gMQorZHFjb3QzMjQgY29tcGFyZXRvdGFsICAgODBFLTEgIC03LjAgICAgLT4gMQorZHFjb3QzMjUgY29tcGFyZXRvdGFsICAgLjhFKzEgIC03ICAgICAgLT4gMQorZHFjb3QzMjYgY29tcGFyZXRvdGFsICAgODBFLTEgIC03ICAgICAgLT4gMQorZHFjb3QzMjcgY29tcGFyZXRvdGFsICAgOC4wICAgIC03RSswICAgLT4gMQorZHFjb3QzMjggY29tcGFyZXRvdGFsICAgOC4wICAgIC03MEUtMSAgLT4gMQorZHFjb3QzMjkgY29tcGFyZXRvdGFsICAgOCAgICAgIC0uN0UrMSAgLT4gMQorZHFjb3QzMzAgY29tcGFyZXRvdGFsICAgOCAgICAgIC03MEUtMSAgLT4gMQorCitkcWNvdDM0MCBjb21wYXJldG90YWwgICA4LjAgICAgLTkuMCAgICAtPiAxCitkcWNvdDM0MSBjb21wYXJldG90YWwgICA4LjAgICAgLTkgICAgICAtPiAxCitkcWNvdDM0MiBjb21wYXJldG90YWwgICA4ICAgICAgLTkuMCAgICAtPiAxCitkcWNvdDM0MyBjb21wYXJldG90YWwgICA4RSswICAgLTkuMCAgICAtPiAxCitkcWNvdDM0NCBjb21wYXJldG90YWwgICA4MEUtMSAgLTkuMCAgICAtPiAxCitkcWNvdDM0NSBjb21wYXJldG90YWwgICAuOEUrMSAgLTkgICAgICAtPiAxCitkcWNvdDM0NiBjb21wYXJldG90YWwgICA4MEUtMSAgLTkgICAgICAtPiAxCitkcWNvdDM0NyBjb21wYXJldG90YWwgICA4LjAgICAgLTlFKzAgICAtPiAxCitkcWNvdDM0OCBjb21wYXJldG90YWwgICA4LjAgICAgLTkwRS0xICAtPiAxCitkcWNvdDM0OSBjb21wYXJldG90YWwgICA4ICAgICAgLS45RSsxICAtPiAxCitkcWNvdDM1MCBjb21wYXJldG90YWwgICA4ICAgICAgLTkwRS0xICAtPiAxCisKKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4KK2RxY290NDAwIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcuMCAgICAtPiAwCitkcWNvdDQwMSBjb21wYXJldG90YWwgICAtNy4wICAgIC03ICAgICAgLT4gMQorZHFjb3Q0MDIgY29tcGFyZXRvdGFsICAgLTcgICAgICAtNy4wICAgIC0+IC0xCitkcWNvdDQwMyBjb21wYXJldG90YWwgICAtN0UrMCAgIC03LjAgICAgLT4gLTEKK2RxY290NDA0IGNvbXBhcmV0b3RhbCAgIC03MEUtMSAgLTcuMCAgICAtPiAwCitkcWNvdDQwNSBjb21wYXJldG90YWwgICAtLjdFKzEgIC03ICAgICAgLT4gMAorZHFjb3Q0MDYgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNyAgICAgIC0+IDEKK2RxY290NDA3IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTdFKzAgICAtPiAxCitkcWNvdDQwOCBjb21wYXJldG90YWwgICAtNy4wICAgIC03MEUtMSAgLT4gMAorZHFjb3Q0MDkgY29tcGFyZXRvdGFsICAgLTcgICAgICAtLjdFKzEgIC0+IDAKK2RxY290NDEwIGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLTcwRS0xICAtPiAtMQorCitkcWNvdDQyMCBjb21wYXJldG90YWwgICAtOC4wICAgIC03LjAgICAgLT4gLTEKK2RxY290NDIxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcgICAgICAtPiAtMQorZHFjb3Q0MjIgY29tcGFyZXRvdGFsICAgLTggICAgICAtNy4wICAgIC0+IC0xCitkcWNvdDQyMyBjb21wYXJldG90YWwgICAtOEUrMCAgIC03LjAgICAgLT4gLTEKK2RxY290NDI0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQorZHFjb3Q0MjUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtNyAgICAgIC0+IC0xCitkcWNvdDQyNiBjb21wYXJldG90YWwgICAtODBFLTEgIC03ICAgICAgLT4gLTEKK2RxY290NDI3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTdFKzAgICAtPiAtMQorZHFjb3Q0MjggY29tcGFyZXRvdGFsICAgLTguMCAgICAtNzBFLTEgIC0+IC0xCitkcWNvdDQyOSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uN0UrMSAgLT4gLTEKK2RxY290NDMwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTcwRS0xICAtPiAtMQorCitkcWNvdDQ0MCBjb21wYXJldG90YWwgICAtOC4wICAgIC05LjAgICAgLT4gMQorZHFjb3Q0NDEgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOSAgICAgIC0+IDEKK2RxY290NDQyIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkuMCAgICAtPiAxCitkcWNvdDQ0MyBjb21wYXJldG90YWwgICAtOEUrMCAgIC05LjAgICAgLT4gMQorZHFjb3Q0NDQgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtOS4wICAgIC0+IDEKK2RxY290NDQ1IGNvbXBhcmV0b3RhbCAgIC0uOEUrMSAgLTkgICAgICAtPiAxCitkcWNvdDQ0NiBjb21wYXJldG90YWwgICAtODBFLTEgIC05ICAgICAgLT4gMQorZHFjb3Q0NDcgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOUUrMCAgIC0+IDEKK2RxY290NDQ4IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkwRS0xICAtPiAxCitkcWNvdDQ0OSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uOUUrMSAgLT4gMQorZHFjb3Q0NTAgY29tcGFyZXRvdGFsICAgLTggICAgICAtOTBFLTEgIC0+IDEKKworCistLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0KK2RxY290NDczIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2RxY290NDc0IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZHFjb3Q0NzUgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2RxY290NDc2IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTEKK2RxY290NDc3IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQorZHFjb3Q0NzggY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTEKK2RxY290NDc5IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2RxY290NDgwIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQorZHFjb3Q0ODEgY29tcGFyZXRvdGFsIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKK2RxY290NDgyIGNvbXBhcmV0b3RhbCAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgLT4gLTEKK2RxY290NDgzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAtPiAwCitkcWNvdDQ4NyBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5IC0+IDEKK2RxY290NDg4IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAtPiAxCitkcWNvdDQ4OSBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwRSs4OSAtPiAxCitkcWNvdDQ5MCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5IC0+IDEKK2RxY290NDkxIGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwRSs4OSAtPiAxCitkcWNvdDQ5MiBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAtPiAxCitkcWNvdDQ5MyBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5IC0+IDEKK2RxY290NDk0IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAtPiAxCitkcWNvdDQ5NSBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwRSs4OSAtPiAxCitkcWNvdDQ5NiBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5IC0+IDEKK2RxY290NDk3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2RSs4OSAtPiAwCisKKy0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwKK2RxY290NDk4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNyAgICAtPiAxCitkcWNvdDQ5OSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTYgICAgLT4gMQorZHFjb3Q1MDAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE1ICAgIC0+IDEKK2RxY290NTAxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNCAgICAtPiAxCitkcWNvdDUwMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTMgICAgLT4gMQorZHFjb3Q1MDMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEyICAgIC0+IDEKK2RxY290NTA0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMSAgICAtPiAxCitkcWNvdDUwNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTAgICAgLT4gMQorZHFjb3Q1MDYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTkgICAgIC0+IDEKK2RxY290NTA3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS04ICAgICAtPiAxCitkcWNvdDUwOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNyAgICAgLT4gMQorZHFjb3Q1MDkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTYgICAgIC0+IDEKK2RxY290NTEwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS01ICAgICAtPiAxCitkcWNvdDUxMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNCAgICAgLT4gMQorZHFjb3Q1MTIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTMgICAgIC0+IDEKK2RxY290NTEzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0yICAgICAtPiAxCitkcWNvdDUxNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMSAgICAgLT4gMQorZHFjb3Q1MTUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTAgICAgIC0+IDAKK2RxY290NTE2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxICAgICAtPiAtMQorZHFjb3Q1MTcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzIgICAgIC0+IC0xCitkcWNvdDUxOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMyAgICAgLT4gLTEKK2RxY290NTE5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs0ICAgICAtPiAtMQorZHFjb3Q1MjEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzUgICAgIC0+IC0xCitkcWNvdDUyMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNiAgICAgLT4gLTEKK2RxY290NTIzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs3ICAgICAtPiAtMQorZHFjb3Q1MjQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzggICAgIC0+IC0xCitkcWNvdDUyNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrOSAgICAgLT4gLTEKK2RxY290NTI2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMCAgICAtPiAtMQorZHFjb3Q1MjcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzExICAgIC0+IC0xCitkcWNvdDUyOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTIgICAgLT4gLTEKK2RxY290NTI5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMyAgICAtPiAtMQorZHFjb3Q1MzAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xCitkcWNvdDUzMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTUgICAgLT4gLTEKK2RxY290NTMyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNiAgICAtPiAtMQorZHFjb3Q1MzMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE3ICAgIC0+IC0xCistLSBMUiBzd2FwCitkcWNvdDUzOCBjb21wYXJldG90YWwgICAgMUUtMTcgIDEgICAgICAgLT4gLTEKK2RxY290NTM5IGNvbXBhcmV0b3RhbCAgICAxRS0xNiAgMSAgICAgICAtPiAtMQorZHFjb3Q1NDAgY29tcGFyZXRvdGFsICAgIDFFLTE1ICAxICAgICAgIC0+IC0xCitkcWNvdDU0MSBjb21wYXJldG90YWwgICAgMUUtMTQgIDEgICAgICAgLT4gLTEKK2RxY290NTQyIGNvbXBhcmV0b3RhbCAgICAxRS0xMyAgMSAgICAgICAtPiAtMQorZHFjb3Q1NDMgY29tcGFyZXRvdGFsICAgIDFFLTEyICAxICAgICAgIC0+IC0xCitkcWNvdDU0NCBjb21wYXJldG90YWwgICAgMUUtMTEgIDEgICAgICAgLT4gLTEKK2RxY290NTQ1IGNvbXBhcmV0b3RhbCAgICAxRS0xMCAgMSAgICAgICAtPiAtMQorZHFjb3Q1NDYgY29tcGFyZXRvdGFsICAgIDFFLTkgICAxICAgICAgIC0+IC0xCitkcWNvdDU0NyBjb21wYXJldG90YWwgICAgMUUtOCAgIDEgICAgICAgLT4gLTEKK2RxY290NTQ4IGNvbXBhcmV0b3RhbCAgICAxRS03ICAgMSAgICAgICAtPiAtMQorZHFjb3Q1NDkgY29tcGFyZXRvdGFsICAgIDFFLTYgICAxICAgICAgIC0+IC0xCitkcWNvdDU1MCBjb21wYXJldG90YWwgICAgMUUtNSAgIDEgICAgICAgLT4gLTEKK2RxY290NTUxIGNvbXBhcmV0b3RhbCAgICAxRS00ICAgMSAgICAgICAtPiAtMQorZHFjb3Q1NTIgY29tcGFyZXRvdGFsICAgIDFFLTMgICAxICAgICAgIC0+IC0xCitkcWNvdDU1MyBjb21wYXJldG90YWwgICAgMUUtMiAgIDEgICAgICAgLT4gLTEKK2RxY290NTU0IGNvbXBhcmV0b3RhbCAgICAxRS0xICAgMSAgICAgICAtPiAtMQorZHFjb3Q1NTUgY29tcGFyZXRvdGFsICAgIDFFLTAgICAxICAgICAgIC0+ICAwCitkcWNvdDU1NiBjb21wYXJldG90YWwgICAgMUUrMSAgIDEgICAgICAgLT4gIDEKK2RxY290NTU3IGNvbXBhcmV0b3RhbCAgICAxRSsyICAgMSAgICAgICAtPiAgMQorZHFjb3Q1NTggY29tcGFyZXRvdGFsICAgIDFFKzMgICAxICAgICAgIC0+ICAxCitkcWNvdDU1OSBjb21wYXJldG90YWwgICAgMUUrNCAgIDEgICAgICAgLT4gIDEKK2RxY290NTYxIGNvbXBhcmV0b3RhbCAgICAxRSs1ICAgMSAgICAgICAtPiAgMQorZHFjb3Q1NjIgY29tcGFyZXRvdGFsICAgIDFFKzYgICAxICAgICAgIC0+ICAxCitkcWNvdDU2MyBjb21wYXJldG90YWwgICAgMUUrNyAgIDEgICAgICAgLT4gIDEKK2RxY290NTY0IGNvbXBhcmV0b3RhbCAgICAxRSs4ICAgMSAgICAgICAtPiAgMQorZHFjb3Q1NjUgY29tcGFyZXRvdGFsICAgIDFFKzkgICAxICAgICAgIC0+ICAxCitkcWNvdDU2NiBjb21wYXJldG90YWwgICAgMUUrMTAgIDEgICAgICAgLT4gIDEKK2RxY290NTY3IGNvbXBhcmV0b3RhbCAgICAxRSsxMSAgMSAgICAgICAtPiAgMQorZHFjb3Q1NjggY29tcGFyZXRvdGFsICAgIDFFKzEyICAxICAgICAgIC0+ICAxCitkcWNvdDU2OSBjb21wYXJldG90YWwgICAgMUUrMTMgIDEgICAgICAgLT4gIDEKK2RxY290NTcwIGNvbXBhcmV0b3RhbCAgICAxRSsxNCAgMSAgICAgICAtPiAgMQorZHFjb3Q1NzEgY29tcGFyZXRvdGFsICAgIDFFKzE1ICAxICAgICAgIC0+ICAxCitkcWNvdDU3MiBjb21wYXJldG90YWwgICAgMUUrMTYgIDEgICAgICAgLT4gIDEKK2RxY290NTczIGNvbXBhcmV0b3RhbCAgICAxRSsxNyAgMSAgICAgICAtPiAgMQorLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5CitkcWNvdDU3OCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNyAgICAtPiAxCitkcWNvdDU3OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNiAgICAtPiAxCitkcWNvdDU4MCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxCitkcWNvdDU4MSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxCitkcWNvdDU4MiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxCitkcWNvdDU4MyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxCitkcWNvdDU4NCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxCitkcWNvdDU4NSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxCitkcWNvdDU4NiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxCitkcWNvdDU4NyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxCitkcWNvdDU4OCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxCitkcWNvdDU4OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQorZHFjb3Q1OTAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTEKK2RxY290NTkxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xCitkcWNvdDU5MiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQorZHFjb3Q1OTMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTEKK2RxY290NTk0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xCitkcWNvdDU5NSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQorZHFjb3Q1OTYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTEKK2RxY290NTk3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xCitkcWNvdDU5OCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQorZHFjb3Q1OTkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTEKKworLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKK2RxY290NjAwIGNvbXBhcmV0b3RhbCAgIDEyICAgICAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjb3Q2MDEgY29tcGFyZXRvdGFsICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvdDYwMiBjb21wYXJldG90YWwgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY290NjAzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAtPiAtMQorZHFjb3Q2MDQgY29tcGFyZXRvdGFsICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xCitkcWNvdDYwNSBjb21wYXJldG90YWwgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTEKK2RxY290NjA2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAtPiAtMQorZHFjb3Q2MDcgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xCitkcWNvdDYwOCBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTEKK2RxY290NjA5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAtPiAtMQorZHFjb3Q2MTAgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxCitkcWNvdDYxMSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDEKK2RxY290NjEyIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAtPiAgMQorZHFjb3Q2MTMgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxCitkcWNvdDYxNCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDEKK2RxY290NjE1IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAtPiAgMQorZHFjb3Q2MTYgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxCitkcWNvdDYxNyBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDEKK2RxY290NjE4IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAtPiAgMQorZHFjb3Q2MTkgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxCitkcWNvdDYyMCBjb21wYXJldG90YWwgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY290NjIxIGNvbXBhcmV0b3RhbCAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjb3Q2MjIgY29tcGFyZXRvdGFsICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvdDYyMyBjb21wYXJldG90YWwgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY290NjI0IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAtPiAgMQorZHFjb3Q2MjUgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvdDYyNiBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDEKK2RxY290NjI3IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAtPiAgMQorZHFjb3Q2MjggY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxCitkcWNvdDYyOSBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDEKK2RxY290NjMwIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyICAgICAgICAgICAtPiAtMQorZHFjb3Q2MzEgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xCitkcWNvdDYzMiBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTEKK2RxY290NjMzIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAtPiAtMQorZHFjb3Q2MzQgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xCitkcWNvdDYzNSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTEKK2RxY290NjM2IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAtPiAtMQorZHFjb3Q2MzcgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xCitkcWNvdDYzOCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTEKK2RxY290NjM5IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAtPiAtMQorCistLSBleHRlbmRlZCB6ZXJvcworZHFjb3Q2NDAgY29tcGFyZXRvdGFsICAgMCAgICAgMCAgIC0+IDAKK2RxY290NjQxIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAgICAtPiAxCitkcWNvdDY0MiBjb21wYXJldG90YWwgICAwICAgIC0wLjAgLT4gMQorZHFjb3Q2NDMgY29tcGFyZXRvdGFsICAgMCAgICAgMC4wIC0+IDEKK2RxY290NjQ0IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAgICAtPiAtMQorZHFjb3Q2NDUgY29tcGFyZXRvdGFsICAtMCAgICAtMCAgIC0+IDAKK2RxY290NjQ2IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAuMCAtPiAtMQorZHFjb3Q2NDcgY29tcGFyZXRvdGFsICAtMCAgICAgMC4wIC0+IC0xCitkcWNvdDY0OCBjb21wYXJldG90YWwgICAwLjAgICAwICAgLT4gLTEKK2RxY290NjQ5IGNvbXBhcmV0b3RhbCAgIDAuMCAgLTAgICAtPiAxCitkcWNvdDY1MCBjb21wYXJldG90YWwgICAwLjAgIC0wLjAgLT4gMQorZHFjb3Q2NTEgY29tcGFyZXRvdGFsICAgMC4wICAgMC4wIC0+IDAKK2RxY290NjUyIGNvbXBhcmV0b3RhbCAgLTAuMCAgIDAgICAtPiAtMQorZHFjb3Q2NTMgY29tcGFyZXRvdGFsICAtMC4wICAtMCAgIC0+IDEKK2RxY290NjU0IGNvbXBhcmV0b3RhbCAgLTAuMCAgLTAuMCAtPiAwCitkcWNvdDY1NSBjb21wYXJldG90YWwgIC0wLjAgICAwLjAgLT4gLTEKKworZHFjb3Q2NTYgY29tcGFyZXRvdGFsICAtMEUxICAgMC4wIC0+IC0xCitkcWNvdDY1NyBjb21wYXJldG90YWwgIC0wRTIgICAwLjAgLT4gLTEKK2RxY290NjU4IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDAuMCAtPiAxCitkcWNvdDY1OSBjb21wYXJldG90YWwgICAwRTIgICAwLjAgLT4gMQorZHFjb3Q2NjAgY29tcGFyZXRvdGFsICAtMEUxICAgMCAgIC0+IC0xCitkcWNvdDY2MSBjb21wYXJldG90YWwgIC0wRTIgICAwICAgLT4gLTEKK2RxY290NjYyIGNvbXBhcmV0b3RhbCAgIDBFMSAgIDAgICAtPiAxCitkcWNvdDY2MyBjb21wYXJldG90YWwgICAwRTIgICAwICAgLT4gMQorZHFjb3Q2NjQgY29tcGFyZXRvdGFsICAtMEUxICAtMEUxIC0+IDAKK2RxY290NjY1IGNvbXBhcmV0b3RhbCAgLTBFMiAgLTBFMSAtPiAtMQorZHFjb3Q2NjYgY29tcGFyZXRvdGFsICAgMEUxICAtMEUxIC0+IDEKK2RxY290NjY3IGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMSAtPiAxCitkcWNvdDY2OCBjb21wYXJldG90YWwgIC0wRTEgIC0wRTIgLT4gMQorZHFjb3Q2NjkgY29tcGFyZXRvdGFsICAtMEUyICAtMEUyIC0+IDAKK2RxY290NjcwIGNvbXBhcmV0b3RhbCAgIDBFMSAgLTBFMiAtPiAxCitkcWNvdDY3MSBjb21wYXJldG90YWwgICAwRTIgIC0wRTIgLT4gMQorZHFjb3Q2NzIgY29tcGFyZXRvdGFsICAtMEUxICAgMEUxIC0+IC0xCitkcWNvdDY3MyBjb21wYXJldG90YWwgIC0wRTIgICAwRTEgLT4gLTEKK2RxY290Njc0IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDBFMSAtPiAwCitkcWNvdDY3NSBjb21wYXJldG90YWwgICAwRTIgICAwRTEgLT4gMQorZHFjb3Q2NzYgY29tcGFyZXRvdGFsICAtMEUxICAgMEUyIC0+IC0xCitkcWNvdDY3NyBjb21wYXJldG90YWwgIC0wRTIgICAwRTIgLT4gLTEKK2RxY290Njc4IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDBFMiAtPiAtMQorZHFjb3Q2NzkgY29tcGFyZXRvdGFsICAgMEUyICAgMEUyIC0+IDAKKworLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQorZHFjb3Q2ODAgY29tcGFyZXRvdGFsICAgMTIgICAgMTIgICAgICAgICAgIC0+IDAKK2RxY290NjgxIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAgICAgICAgICAtPiAxCitkcWNvdDY4MiBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMCAgICAgICAgLT4gMQorZHFjb3Q2ODMgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDEKK2RxY290Njg0IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAxCitkcWNvdDY4NSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMCAgICAgLT4gMQorZHFjb3Q2ODYgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDEKK2RxY290Njg3IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAxCitkcWNvdDY4OCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwMCAgLT4gMQorZHFjb3Q2ODkgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDEKK2RxY290NjkwIGNvbXBhcmV0b3RhbCAgIDEyICAgICAgICAgICAgICAxMiAtPiAwCitkcWNvdDY5MSBjb21wYXJldG90YWwgICAxMi4wICAgICAgICAgICAgMTIgLT4gLTEKK2RxY290NjkyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgICAxMiAtPiAtMQorZHFjb3Q2OTMgY29tcGFyZXRvdGFsICAgMTIuMDAwICAgICAgICAgIDEyIC0+IC0xCitkcWNvdDY5NCBjb21wYXJldG90YWwgICAxMi4wMDAwICAgICAgICAgMTIgLT4gLTEKK2RxY290Njk1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAtMQorZHFjb3Q2OTYgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwICAgICAgIDEyIC0+IC0xCitkcWNvdDY5NyBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwICAgICAgMTIgLT4gLTEKK2RxY290Njk4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAtMQorZHFjb3Q2OTkgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAwICAgIDEyIC0+IC0xCisKKy0tIG9sZCBsb25nIG9wZXJhbmQgY2hlY2tzCitkcWNvdDcwMSBjb21wYXJldG90YWwgMTIzNDU2NzgwMDAgIDEgLT4gIDEKK2RxY290NzAyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAwICAtPiAtMQorZHFjb3Q3MDMgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAgICAxIC0+ICAxCitkcWNvdDcwNCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwICAgLT4gLTEKK2RxY290NzA1IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwICAgMSAtPiAgMQorZHFjb3Q3MDYgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MCAgIC0+IC0xCitkcWNvdDcwNyBjb21wYXJldG90YWwgMTIzNDU2Nzg5MSAgIDEgLT4gIDEKK2RxY290NzA4IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTEgICAtPiAtMQorZHFjb3Q3MDkgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAxICAxIC0+ICAxCitkcWNvdDcxMCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwMSAgLT4gLTEKK2RxY290NzExIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODk2ICAgMSAtPiAgMQorZHFjb3Q3MTIgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5NiAgIC0+IC0xCitkcWNvdDcxMyBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTEgIDEgLT4gLTEKK2RxY290NzE0IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkxICAtPiAgMQorZHFjb3Q3MTUgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkwMSAxIC0+IC0xCitkcWNvdDcxNiBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5MDEgLT4gIDEKK2RxY290NzE3IGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5NiAgMSAtPiAtMQorZHFjb3Q3MTggY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTYgIC0+ICAxCisKKy0tIG9sZCByZXNpZHVlIGNhc2VzCitkcWNvdDc0MCBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5OSAgLT4gMQorZHFjb3Q3NDEgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OSAgIC0+IDEKK2RxY290NzQyIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OSAgICAtPiAxCitkcWNvdDc0MyBjb21wYXJldG90YWwgIDEgIDEuMDAwMCAgICAgLT4gMQorZHFjb3Q3NDQgY29tcGFyZXRvdGFsICAxICAxLjAwMDAxICAgIC0+IC0xCitkcWNvdDc0NSBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAxICAgLT4gLTEKK2RxY290NzQ2IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDAxICAtPiAtMQorZHFjb3Q3NTAgY29tcGFyZXRvdGFsICAwLjk5OTk5OTkgIDEgIC0+IC0xCitkcWNvdDc1MSBjb21wYXJldG90YWwgIDAuOTk5OTk5ICAgMSAgLT4gLTEKK2RxY290NzUyIGNvbXBhcmV0b3RhbCAgMC45OTk5OSAgICAxICAtPiAtMQorZHFjb3Q3NTMgY29tcGFyZXRvdGFsICAxLjAwMDAgICAgIDEgIC0+IC0xCitkcWNvdDc1NCBjb21wYXJldG90YWwgIDEuMDAwMDEgICAgMSAgLT4gMQorZHFjb3Q3NTUgY29tcGFyZXRvdGFsICAxLjAwMDAwMSAgIDEgIC0+IDEKK2RxY290NzU2IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDAxICAxICAtPiAxCisKKy0tIFNwZWNpYWxzCitkcWNvdDc4MCBjb21wYXJldG90YWwgIEluZiAgLUluZiAgIC0+ICAxCitkcWNvdDc4MSBjb21wYXJldG90YWwgIEluZiAgLTEwMDAgIC0+ICAxCitkcWNvdDc4MiBjb21wYXJldG90YWwgIEluZiAgLTEgICAgIC0+ICAxCitkcWNvdDc4MyBjb21wYXJldG90YWwgIEluZiAgLTAgICAgIC0+ICAxCitkcWNvdDc4NCBjb21wYXJldG90YWwgIEluZiAgIDAgICAgIC0+ICAxCitkcWNvdDc4NSBjb21wYXJldG90YWwgIEluZiAgIDEgICAgIC0+ICAxCitkcWNvdDc4NiBjb21wYXJldG90YWwgIEluZiAgIDEwMDAgIC0+ICAxCitkcWNvdDc4NyBjb21wYXJldG90YWwgIEluZiAgIEluZiAgIC0+ICAwCitkcWNvdDc4OCBjb21wYXJldG90YWwgLTEwMDAgIEluZiAgIC0+IC0xCitkcWNvdDc4OSBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xCitkcWNvdDc5MCBjb21wYXJldG90YWwgLTEgICAgIEluZiAgIC0+IC0xCitkcWNvdDc5MSBjb21wYXJldG90YWwgLTAgICAgIEluZiAgIC0+IC0xCitkcWNvdDc5MiBjb21wYXJldG90YWwgIDAgICAgIEluZiAgIC0+IC0xCitkcWNvdDc5MyBjb21wYXJldG90YWwgIDEgICAgIEluZiAgIC0+IC0xCitkcWNvdDc5NCBjb21wYXJldG90YWwgIDEwMDAgIEluZiAgIC0+IC0xCitkcWNvdDc5NSBjb21wYXJldG90YWwgIEluZiAgIEluZiAgIC0+ICAwCisKK2RxY290ODAwIGNvbXBhcmV0b3RhbCAtSW5mICAtSW5mICAgLT4gIDAKK2RxY290ODAxIGNvbXBhcmV0b3RhbCAtSW5mICAtMTAwMCAgLT4gLTEKK2RxY290ODAyIGNvbXBhcmV0b3RhbCAtSW5mICAtMSAgICAgLT4gLTEKK2RxY290ODAzIGNvbXBhcmV0b3RhbCAtSW5mICAtMCAgICAgLT4gLTEKK2RxY290ODA0IGNvbXBhcmV0b3RhbCAtSW5mICAgMCAgICAgLT4gLTEKK2RxY290ODA1IGNvbXBhcmV0b3RhbCAtSW5mICAgMSAgICAgLT4gLTEKK2RxY290ODA2IGNvbXBhcmV0b3RhbCAtSW5mICAgMTAwMCAgLT4gLTEKK2RxY290ODA3IGNvbXBhcmV0b3RhbCAtSW5mICAgSW5mICAgLT4gLTEKK2RxY290ODA4IGNvbXBhcmV0b3RhbCAtSW5mICAtSW5mICAgLT4gIDAKK2RxY290ODA5IGNvbXBhcmV0b3RhbCAtMTAwMCAtSW5mICAgLT4gIDEKK2RxY290ODEwIGNvbXBhcmV0b3RhbCAtMSAgICAtSW5mICAgLT4gIDEKK2RxY290ODExIGNvbXBhcmV0b3RhbCAtMCAgICAtSW5mICAgLT4gIDEKK2RxY290ODEyIGNvbXBhcmV0b3RhbCAgMCAgICAtSW5mICAgLT4gIDEKK2RxY290ODEzIGNvbXBhcmV0b3RhbCAgMSAgICAtSW5mICAgLT4gIDEKK2RxY290ODE0IGNvbXBhcmV0b3RhbCAgMTAwMCAtSW5mICAgLT4gIDEKK2RxY290ODE1IGNvbXBhcmV0b3RhbCAgSW5mICAtSW5mICAgLT4gIDEKKworZHFjb3Q4MjEgY29tcGFyZXRvdGFsICBOYU4gLUluZiAgICAtPiAgMQorZHFjb3Q4MjIgY29tcGFyZXRvdGFsICBOYU4gLTEwMDAgICAtPiAgMQorZHFjb3Q4MjMgY29tcGFyZXRvdGFsICBOYU4gLTEgICAgICAtPiAgMQorZHFjb3Q4MjQgY29tcGFyZXRvdGFsICBOYU4gLTAgICAgICAtPiAgMQorZHFjb3Q4MjUgY29tcGFyZXRvdGFsICBOYU4gIDAgICAgICAtPiAgMQorZHFjb3Q4MjYgY29tcGFyZXRvdGFsICBOYU4gIDEgICAgICAtPiAgMQorZHFjb3Q4MjcgY29tcGFyZXRvdGFsICBOYU4gIDEwMDAgICAtPiAgMQorZHFjb3Q4MjggY29tcGFyZXRvdGFsICBOYU4gIEluZiAgICAtPiAgMQorZHFjb3Q4MjkgY29tcGFyZXRvdGFsICBOYU4gIE5hTiAgICAtPiAgMAorZHFjb3Q4MzAgY29tcGFyZXRvdGFsIC1JbmYgIE5hTiAgICAtPiAgLTEKK2RxY290ODMxIGNvbXBhcmV0b3RhbCAtMTAwMCBOYU4gICAgLT4gIC0xCitkcWNvdDgzMiBjb21wYXJldG90YWwgLTEgICAgTmFOICAgIC0+ICAtMQorZHFjb3Q4MzMgY29tcGFyZXRvdGFsIC0wICAgIE5hTiAgICAtPiAgLTEKK2RxY290ODM0IGNvbXBhcmV0b3RhbCAgMCAgICBOYU4gICAgLT4gIC0xCitkcWNvdDgzNSBjb21wYXJldG90YWwgIDEgICAgTmFOICAgIC0+ICAtMQorZHFjb3Q4MzYgY29tcGFyZXRvdGFsICAxMDAwIE5hTiAgICAtPiAgLTEKK2RxY290ODM3IGNvbXBhcmV0b3RhbCAgSW5mICBOYU4gICAgLT4gIC0xCitkcWNvdDgzOCBjb21wYXJldG90YWwgLU5hTiAtTmFOICAgIC0+ICAwCitkcWNvdDgzOSBjb21wYXJldG90YWwgK05hTiAtTmFOICAgIC0+ICAxCitkcWNvdDg0MCBjb21wYXJldG90YWwgLU5hTiArTmFOICAgIC0+ICAtMQorCitkcWNvdDg0MSBjb21wYXJldG90YWwgIHNOYU4gLXNOYU4gIC0+ICAxCitkcWNvdDg0MiBjb21wYXJldG90YWwgIHNOYU4gLU5hTiAgIC0+ICAxCitkcWNvdDg0MyBjb21wYXJldG90YWwgIHNOYU4gLUluZiAgIC0+ICAxCitkcWNvdDg0NCBjb21wYXJldG90YWwgIHNOYU4gLTEwMDAgIC0+ICAxCitkcWNvdDg0NSBjb21wYXJldG90YWwgIHNOYU4gLTEgICAgIC0+ICAxCitkcWNvdDg0NiBjb21wYXJldG90YWwgIHNOYU4gLTAgICAgIC0+ICAxCitkcWNvdDg0NyBjb21wYXJldG90YWwgIHNOYU4gIDAgICAgIC0+ICAxCitkcWNvdDg0OCBjb21wYXJldG90YWwgIHNOYU4gIDEgICAgIC0+ICAxCitkcWNvdDg0OSBjb21wYXJldG90YWwgIHNOYU4gIDEwMDAgIC0+ICAxCitkcWNvdDg1MCBjb21wYXJldG90YWwgIHNOYU4gIE5hTiAgIC0+ICAtMQorZHFjb3Q4NTEgY29tcGFyZXRvdGFsICBzTmFOIHNOYU4gICAtPiAgMAorCitkcWNvdDg1MiBjb21wYXJldG90YWwgLXNOYU4gc05hTiAgIC0+ICAtMQorZHFjb3Q4NTMgY29tcGFyZXRvdGFsIC1OYU4gIHNOYU4gICAtPiAgLTEKK2RxY290ODU0IGNvbXBhcmV0b3RhbCAtSW5mICBzTmFOICAgLT4gIC0xCitkcWNvdDg1NSBjb21wYXJldG90YWwgLTEwMDAgc05hTiAgIC0+ICAtMQorZHFjb3Q4NTYgY29tcGFyZXRvdGFsIC0xICAgIHNOYU4gICAtPiAgLTEKK2RxY290ODU3IGNvbXBhcmV0b3RhbCAtMCAgICBzTmFOICAgLT4gIC0xCitkcWNvdDg1OCBjb21wYXJldG90YWwgIDAgICAgc05hTiAgIC0+ICAtMQorZHFjb3Q4NTkgY29tcGFyZXRvdGFsICAxICAgIHNOYU4gICAtPiAgLTEKK2RxY290ODYwIGNvbXBhcmV0b3RhbCAgMTAwMCBzTmFOICAgLT4gIC0xCitkcWNvdDg2MSBjb21wYXJldG90YWwgIEluZiAgc05hTiAgIC0+ICAtMQorZHFjb3Q4NjIgY29tcGFyZXRvdGFsICBOYU4gIHNOYU4gICAtPiAgMQorZHFjb3Q4NjMgY29tcGFyZXRvdGFsICBzTmFOIHNOYU4gICAtPiAgMAorCitkcWNvdDg3MSBjb21wYXJldG90YWwgIC1zTmFOIC1zTmFOICAtPiAgMAorZHFjb3Q4NzIgY29tcGFyZXRvdGFsICAtc05hTiAtTmFOICAgLT4gIDEKK2RxY290ODczIGNvbXBhcmV0b3RhbCAgLXNOYU4gLUluZiAgIC0+ICAtMQorZHFjb3Q4NzQgY29tcGFyZXRvdGFsICAtc05hTiAtMTAwMCAgLT4gIC0xCitkcWNvdDg3NSBjb21wYXJldG90YWwgIC1zTmFOIC0xICAgICAtPiAgLTEKK2RxY290ODc2IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTAgICAgIC0+ICAtMQorZHFjb3Q4NzcgY29tcGFyZXRvdGFsICAtc05hTiAgMCAgICAgLT4gIC0xCitkcWNvdDg3OCBjb21wYXJldG90YWwgIC1zTmFOICAxICAgICAtPiAgLTEKK2RxY290ODc5IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEwMDAgIC0+ICAtMQorZHFjb3Q4ODAgY29tcGFyZXRvdGFsICAtc05hTiAgTmFOICAgLT4gIC0xCitkcWNvdDg4MSBjb21wYXJldG90YWwgIC1zTmFOIHNOYU4gICAtPiAgLTEKKworZHFjb3Q4ODIgY29tcGFyZXRvdGFsIC1zTmFOIC1zTmFOICAgLT4gIDAKK2RxY290ODgzIGNvbXBhcmV0b3RhbCAtTmFOICAtc05hTiAgIC0+ICAtMQorZHFjb3Q4ODQgY29tcGFyZXRvdGFsIC1JbmYgIC1zTmFOICAgLT4gIDEKK2RxY290ODg1IGNvbXBhcmV0b3RhbCAtMTAwMCAtc05hTiAgIC0+ICAxCitkcWNvdDg4NiBjb21wYXJldG90YWwgLTEgICAgLXNOYU4gICAtPiAgMQorZHFjb3Q4ODcgY29tcGFyZXRvdGFsIC0wICAgIC1zTmFOICAgLT4gIDEKK2RxY290ODg4IGNvbXBhcmV0b3RhbCAgMCAgICAtc05hTiAgIC0+ICAxCitkcWNvdDg4OSBjb21wYXJldG90YWwgIDEgICAgLXNOYU4gICAtPiAgMQorZHFjb3Q4OTAgY29tcGFyZXRvdGFsICAxMDAwIC1zTmFOICAgLT4gIDEKK2RxY290ODkxIGNvbXBhcmV0b3RhbCAgSW5mICAtc05hTiAgIC0+ICAxCitkcWNvdDg5MiBjb21wYXJldG90YWwgIE5hTiAgLXNOYU4gICAtPiAgMQorZHFjb3Q4OTMgY29tcGFyZXRvdGFsICBzTmFOIC1zTmFOICAgLT4gIDEKKworLS0gTmFOcyB3aXRoIHBheWxvYWQKK2RxY290OTYwIGNvbXBhcmV0b3RhbCAgTmFOOSAtSW5mICAgLT4gIDEKK2RxY290OTYxIGNvbXBhcmV0b3RhbCAgTmFOOCAgOTk5ICAgLT4gIDEKK2RxY290OTYyIGNvbXBhcmV0b3RhbCAgTmFONzcgSW5mICAgLT4gIDEKK2RxY290OTYzIGNvbXBhcmV0b3RhbCAtTmFONjcgTmFONSAgLT4gIC0xCitkcWNvdDk2NCBjb21wYXJldG90YWwgLUluZiAgLU5hTjQgIC0+ICAxCitkcWNvdDk2NSBjb21wYXJldG90YWwgLTk5OSAgLU5hTjMzIC0+ICAxCitkcWNvdDk2NiBjb21wYXJldG90YWwgIEluZiAgIE5hTjIgIC0+ICAtMQorCitkcWNvdDk3MCBjb21wYXJldG90YWwgLU5hTjQxIC1OYU40MiAtPiAxCitkcWNvdDk3MSBjb21wYXJldG90YWwgK05hTjQxIC1OYU40MiAtPiAxCitkcWNvdDk3MiBjb21wYXJldG90YWwgLU5hTjQxICtOYU40MiAtPiAtMQorZHFjb3Q5NzMgY29tcGFyZXRvdGFsICtOYU40MSArTmFONDIgLT4gLTEKK2RxY290OTc0IGNvbXBhcmV0b3RhbCAtTmFONDIgLU5hTjAxIC0+IC0xCitkcWNvdDk3NSBjb21wYXJldG90YWwgK05hTjQyIC1OYU4wMSAtPiAgMQorZHFjb3Q5NzYgY29tcGFyZXRvdGFsIC1OYU40MiArTmFOMDEgLT4gLTEKK2RxY290OTc3IGNvbXBhcmV0b3RhbCArTmFONDIgK05hTjAxIC0+ICAxCisKK2RxY290OTgwIGNvbXBhcmV0b3RhbCAtc05hTjc3MSAtc05hTjc3MiAtPiAxCitkcWNvdDk4MSBjb21wYXJldG90YWwgK3NOYU43NzEgLXNOYU43NzIgLT4gMQorZHFjb3Q5ODIgY29tcGFyZXRvdGFsIC1zTmFONzcxICtzTmFONzcyIC0+IC0xCitkcWNvdDk4MyBjb21wYXJldG90YWwgK3NOYU43NzEgK3NOYU43NzIgLT4gLTEKK2RxY290OTg0IGNvbXBhcmV0b3RhbCAtc05hTjc3MiAtc05hTjc3MSAtPiAtMQorZHFjb3Q5ODUgY29tcGFyZXRvdGFsICtzTmFONzcyIC1zTmFONzcxIC0+ICAxCitkcWNvdDk4NiBjb21wYXJldG90YWwgLXNOYU43NzIgK3NOYU43NzEgLT4gLTEKK2RxY290OTg3IGNvbXBhcmV0b3RhbCArc05hTjc3MiArc05hTjc3MSAtPiAgMQorCitkcWNvdDk5MSBjb21wYXJldG90YWwgLXNOYU45OSAtSW5mICAgIC0+IC0xCitkcWNvdDk5MiBjb21wYXJldG90YWwgIHNOYU45OCAtMTEgICAgIC0+ICAxCitkcWNvdDk5MyBjb21wYXJldG90YWwgIHNOYU45NyAgTmFOICAgIC0+IC0xCitkcWNvdDk5NCBjb21wYXJldG90YWwgIHNOYU4xNiBzTmFOOTQgIC0+IC0xCitkcWNvdDk5NSBjb21wYXJldG90YWwgIE5hTjg1ICBzTmFOODMgIC0+ICAxCitkcWNvdDk5NiBjb21wYXJldG90YWwgLUluZiAgICBzTmFOOTIgIC0+IC0xCitkcWNvdDk5NyBjb21wYXJldG90YWwgIDA4OCAgICBzTmFOODEgIC0+IC0xCitkcWNvdDk5OCBjb21wYXJldG90YWwgIEluZiAgICBzTmFOOTAgIC0+IC0xCitkcWNvdDk5OSBjb21wYXJldG90YWwgIE5hTiAgIC1zTmFOODkgIC0+ICAxCisKKy0tIHNwcmVhZCB6ZXJvcworZHFjb3QxMTEwIGNvbXBhcmV0b3RhbCAgIDBFLTYxNDMgIDAgICAgICAgLT4gLTEKK2RxY290MTExMSBjb21wYXJldG90YWwgICAwRS02MTQzIC0wICAgICAgIC0+ICAxCitkcWNvdDExMTIgY29tcGFyZXRvdGFsICAtMEUtNjE0MyAgMCAgICAgICAtPiAtMQorZHFjb3QxMTEzIGNvbXBhcmV0b3RhbCAgLTBFLTYxNDMgLTAgICAgICAgLT4gIDEKK2RxY290MTExNCBjb21wYXJldG90YWwgICAwRS02MTQzICAwRSs2MTQ0ICAtPiAtMQorZHFjb3QxMTE1IGNvbXBhcmV0b3RhbCAgIDBFLTYxNDMgLTBFKzYxNDQgIC0+ICAxCitkcWNvdDExMTYgY29tcGFyZXRvdGFsICAtMEUtNjE0MyAgMEUrNjE0NCAgLT4gLTEKK2RxY290MTExNyBjb21wYXJldG90YWwgIC0wRS02MTQzIC0wRSs2MTQ0ICAtPiAgMQorZHFjb3QxMTE4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUrNjE0NCAgLT4gLTEKK2RxY290MTExOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFKzYxNDQgIC0+ICAxCitkcWNvdDExMjAgY29tcGFyZXRvdGFsICAtMCAgICAgICAwRSs2MTQ0ICAtPiAtMQorZHFjb3QxMTIxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUrNjE0NCAgLT4gIDEKKworZHFjb3QxMTMwIGNvbXBhcmV0b3RhbCAgIDBFKzYxNDQgIDAgICAgICAgLT4gIDEKK2RxY290MTEzMSBjb21wYXJldG90YWwgICAwRSs2MTQ0IC0wICAgICAgIC0+ICAxCitkcWNvdDExMzIgY29tcGFyZXRvdGFsICAtMEUrNjE0NCAgMCAgICAgICAtPiAtMQorZHFjb3QxMTMzIGNvbXBhcmV0b3RhbCAgLTBFKzYxNDQgLTAgICAgICAgLT4gLTEKK2RxY290MTEzNCBjb21wYXJldG90YWwgICAwRSs2MTQ0ICAwRS02MTQzICAtPiAgMQorZHFjb3QxMTM1IGNvbXBhcmV0b3RhbCAgIDBFKzYxNDQgLTBFLTYxNDMgIC0+ICAxCitkcWNvdDExMzYgY29tcGFyZXRvdGFsICAtMEUrNjE0NCAgMEUtNjE0MyAgLT4gLTEKK2RxY290MTEzNyBjb21wYXJldG90YWwgIC0wRSs2MTQ0IC0wRS02MTQzICAtPiAtMQorZHFjb3QxMTM4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUtNjE0MyAgLT4gIDEKK2RxY290MTEzOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFLTYxNDMgIC0+ICAxCitkcWNvdDExNDAgY29tcGFyZXRvdGFsICAtMCAgICAgICAwRS02MTQzICAtPiAtMQorZHFjb3QxMTQxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUtNjE0MyAgLT4gLTEKKworLS0gTnVsbCB0ZXN0cworZHFjb3Q5OTkwIGNvbXBhcmV0b3RhbCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxY290OTk5MSBjb21wYXJldG90YWwgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4MWJmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlVG90YWxNYWcuZGVjVGVzdApAQCAtMCwwICsxLDcwNiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUNvbXBhcmVUb3RhbE1hZy5kZWNUZXN0IC0tIGRlY1F1YWQgY29tcGFyaXNvbjsgYWJzLiB0b3RhbCBvcmRlciAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90CistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgorLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocworLS0gdGhhbiBjb21wYXJlLgorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFjdG0wMDEgY29tcGFyZXRvdG1hZyAgLTIgIC0yICAgLT4gICAwCitkcWN0bTAwMiBjb21wYXJldG90bWFnICAtMiAgLTEgICAtPiAgIDEKK2RxY3RtMDAzIGNvbXBhcmV0b3RtYWcgIC0yICAgMCAgIC0+ICAgMQorZHFjdG0wMDQgY29tcGFyZXRvdG1hZyAgLTIgICAxICAgLT4gICAxCitkcWN0bTAwNSBjb21wYXJldG90bWFnICAtMiAgIDIgICAtPiAgIDAKK2RxY3RtMDA2IGNvbXBhcmV0b3RtYWcgIC0xICAtMiAgIC0+ICAtMQorZHFjdG0wMDcgY29tcGFyZXRvdG1hZyAgLTEgIC0xICAgLT4gICAwCitkcWN0bTAwOCBjb21wYXJldG90bWFnICAtMSAgIDAgICAtPiAgIDEKK2RxY3RtMDA5IGNvbXBhcmV0b3RtYWcgIC0xICAgMSAgIC0+ICAgMAorZHFjdG0wMTAgY29tcGFyZXRvdG1hZyAgLTEgICAyICAgLT4gIC0xCitkcWN0bTAxMSBjb21wYXJldG90bWFnICAgMCAgLTIgICAtPiAgLTEKK2RxY3RtMDEyIGNvbXBhcmV0b3RtYWcgICAwICAtMSAgIC0+ICAtMQorZHFjdG0wMTMgY29tcGFyZXRvdG1hZyAgIDAgICAwICAgLT4gICAwCitkcWN0bTAxNCBjb21wYXJldG90bWFnICAgMCAgIDEgICAtPiAgLTEKK2RxY3RtMDE1IGNvbXBhcmV0b3RtYWcgICAwICAgMiAgIC0+ICAtMQorZHFjdG0wMTYgY29tcGFyZXRvdG1hZyAgIDEgIC0yICAgLT4gIC0xCitkcWN0bTAxNyBjb21wYXJldG90bWFnICAgMSAgLTEgICAtPiAgIDAKK2RxY3RtMDE4IGNvbXBhcmV0b3RtYWcgICAxICAgMCAgIC0+ICAgMQorZHFjdG0wMTkgY29tcGFyZXRvdG1hZyAgIDEgICAxICAgLT4gICAwCitkcWN0bTAyMCBjb21wYXJldG90bWFnICAgMSAgIDIgICAtPiAgLTEKK2RxY3RtMDIxIGNvbXBhcmV0b3RtYWcgICAyICAtMiAgIC0+ICAgMAorZHFjdG0wMjIgY29tcGFyZXRvdG1hZyAgIDIgIC0xICAgLT4gICAxCitkcWN0bTAyMyBjb21wYXJldG90bWFnICAgMiAgIDAgICAtPiAgIDEKK2RxY3RtMDI1IGNvbXBhcmV0b3RtYWcgICAyICAgMSAgIC0+ICAgMQorZHFjdG0wMjYgY29tcGFyZXRvdG1hZyAgIDIgICAyICAgLT4gICAwCisKK2RxY3RtMDMxIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTIwICAgLT4gICAwCitkcWN0bTAzMiBjb21wYXJldG90bWFnICAtMjAgIC0xMCAgIC0+ICAgMQorZHFjdG0wMzMgY29tcGFyZXRvdG1hZyAgLTIwICAgMDAgICAtPiAgIDEKK2RxY3RtMDM0IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDEwICAgLT4gICAxCitkcWN0bTAzNSBjb21wYXJldG90bWFnICAtMjAgICAyMCAgIC0+ICAgMAorZHFjdG0wMzYgY29tcGFyZXRvdG1hZyAgLTEwICAtMjAgICAtPiAgLTEKK2RxY3RtMDM3IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTEwICAgLT4gICAwCitkcWN0bTAzOCBjb21wYXJldG90bWFnICAtMTAgICAwMCAgIC0+ICAgMQorZHFjdG0wMzkgY29tcGFyZXRvdG1hZyAgLTEwICAgMTAgICAtPiAgIDAKK2RxY3RtMDQwIGNvbXBhcmV0b3RtYWcgIC0xMCAgIDIwICAgLT4gIC0xCitkcWN0bTA0MSBjb21wYXJldG90bWFnICAgMDAgIC0yMCAgIC0+ICAtMQorZHFjdG0wNDIgY29tcGFyZXRvdG1hZyAgIDAwICAtMTAgICAtPiAgLTEKK2RxY3RtMDQzIGNvbXBhcmV0b3RtYWcgICAwMCAgIDAwICAgLT4gICAwCitkcWN0bTA0NCBjb21wYXJldG90bWFnICAgMDAgICAxMCAgIC0+ICAtMQorZHFjdG0wNDUgY29tcGFyZXRvdG1hZyAgIDAwICAgMjAgICAtPiAgLTEKK2RxY3RtMDQ2IGNvbXBhcmV0b3RtYWcgICAxMCAgLTIwICAgLT4gIC0xCitkcWN0bTA0NyBjb21wYXJldG90bWFnICAgMTAgIC0xMCAgIC0+ICAgMAorZHFjdG0wNDggY29tcGFyZXRvdG1hZyAgIDEwICAgMDAgICAtPiAgIDEKK2RxY3RtMDQ5IGNvbXBhcmV0b3RtYWcgICAxMCAgIDEwICAgLT4gICAwCitkcWN0bTA1MCBjb21wYXJldG90bWFnICAgMTAgICAyMCAgIC0+ICAtMQorZHFjdG0wNTEgY29tcGFyZXRvdG1hZyAgIDIwICAtMjAgICAtPiAgIDAKK2RxY3RtMDUyIGNvbXBhcmV0b3RtYWcgICAyMCAgLTEwICAgLT4gICAxCitkcWN0bTA1MyBjb21wYXJldG90bWFnICAgMjAgICAwMCAgIC0+ICAgMQorZHFjdG0wNTUgY29tcGFyZXRvdG1hZyAgIDIwICAgMTAgICAtPiAgIDEKK2RxY3RtMDU2IGNvbXBhcmV0b3RtYWcgICAyMCAgIDIwICAgLT4gICAwCisKK2RxY3RtMDYxIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0yLjAgICAtPiAgIDAKK2RxY3RtMDYyIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0xLjAgICAtPiAgIDEKK2RxY3RtMDYzIGNvbXBhcmV0b3RtYWcgIC0yLjAgICAwLjAgICAtPiAgIDEKK2RxY3RtMDY0IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAxLjAgICAtPiAgIDEKK2RxY3RtMDY1IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAyLjAgICAtPiAgIDAKK2RxY3RtMDY2IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0yLjAgICAtPiAgLTEKK2RxY3RtMDY3IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0xLjAgICAtPiAgIDAKK2RxY3RtMDY4IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAwLjAgICAtPiAgIDEKK2RxY3RtMDY5IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAxLjAgICAtPiAgIDAKK2RxY3RtMDcwIGNvbXBhcmV0b3RtYWcgIC0xLjAgICAyLjAgICAtPiAgLTEKK2RxY3RtMDcxIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0yLjAgICAtPiAgLTEKK2RxY3RtMDcyIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0xLjAgICAtPiAgLTEKK2RxY3RtMDczIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgICAtPiAgIDAKK2RxY3RtMDc0IGNvbXBhcmV0b3RtYWcgICAwLjAgICAxLjAgICAtPiAgLTEKK2RxY3RtMDc1IGNvbXBhcmV0b3RtYWcgICAwLjAgICAyLjAgICAtPiAgLTEKK2RxY3RtMDc2IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0yLjAgICAtPiAgLTEKK2RxY3RtMDc3IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0xLjAgICAtPiAgIDAKK2RxY3RtMDc4IGNvbXBhcmV0b3RtYWcgICAxLjAgICAwLjAgICAtPiAgIDEKK2RxY3RtMDc5IGNvbXBhcmV0b3RtYWcgICAxLjAgICAxLjAgICAtPiAgIDAKK2RxY3RtMDgwIGNvbXBhcmV0b3RtYWcgICAxLjAgICAyLjAgICAtPiAgLTEKK2RxY3RtMDgxIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0yLjAgICAtPiAgIDAKK2RxY3RtMDgyIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0xLjAgICAtPiAgIDEKK2RxY3RtMDgzIGNvbXBhcmV0b3RtYWcgICAyLjAgICAwLjAgICAtPiAgIDEKK2RxY3RtMDg1IGNvbXBhcmV0b3RtYWcgICAyLjAgICAxLjAgICAtPiAgIDEKK2RxY3RtMDg2IGNvbXBhcmV0b3RtYWcgICAyLjAgICAyLjAgICAtPiAgIDAKKworLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCitkcWN0bTA5MCBjb21wYXJldG90bWFnICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgIDAKK2RxY3RtMDkxIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICAgMAorZHFjdG0wOTIgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gICAwCitkcWN0bTA5MyBjb21wYXJldG90bWFnIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgIDAKKworLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCistLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsCitkcWN0bTEwMCBjb21wYXJldG90bWFnICAgNy4wICAgIDcuMCAgICAgLT4gICAwCitkcWN0bTEwMSBjb21wYXJldG90bWFnICAgNy4wICAgIDcgICAgICAgLT4gIC0xCitkcWN0bTEwMiBjb21wYXJldG90bWFnICAgNyAgICAgIDcuMCAgICAgLT4gICAxCitkcWN0bTEwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIDcuMCAgICAgLT4gICAxCitkcWN0bTEwNCBjb21wYXJldG90bWFnICAgNzBFLTEgIDcuMCAgICAgLT4gICAwCitkcWN0bTEwNSBjb21wYXJldG90bWFnICAgMC43RSsxIDcgICAgICAgLT4gICAwCitkcWN0bTEwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIDcgICAgICAgLT4gIC0xCitkcWN0bTEwNyBjb21wYXJldG90bWFnICAgNy4wICAgIDdFKzAgICAgLT4gIC0xCitkcWN0bTEwOCBjb21wYXJldG90bWFnICAgNy4wICAgIDcwRS0xICAgLT4gICAwCitkcWN0bTEwOSBjb21wYXJldG90bWFnICAgNyAgICAgIDAuN0UrMSAgLT4gICAwCitkcWN0bTExMCBjb21wYXJldG90bWFnICAgNyAgICAgIDcwRS0xICAgLT4gICAxCisKK2RxY3RtMTIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMTIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNyAgICAgICAtPiAgIDEKK2RxY3RtMTIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMTIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgNy4wICAgICAtPiAgIDEKK2RxY3RtMTI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNy4wICAgICAtPiAgIDEKK2RxY3RtMTI1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgNyAgICAgICAtPiAgIDEKK2RxY3RtMTI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNyAgICAgICAtPiAgIDEKK2RxY3RtMTI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgN0UrMCAgICAtPiAgIDEKK2RxY3RtMTI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNzBFLTEgICAtPiAgIDEKK2RxY3RtMTI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC43RSsxICAgLT4gICAxCitkcWN0bTEzMCBjb21wYXJldG90bWFnICAgOCAgICAgIDcwRS0xICAgLT4gICAxCisKK2RxY3RtMTQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOS4wICAgICAtPiAgLTEKK2RxY3RtMTQxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOSAgICAgICAtPiAgLTEKK2RxY3RtMTQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOS4wICAgICAtPiAgLTEKK2RxY3RtMTQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgOS4wICAgICAtPiAgLTEKK2RxY3RtMTQ0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOS4wICAgICAtPiAgLTEKK2RxY3RtMTQ1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgOSAgICAgICAtPiAgLTEKK2RxY3RtMTQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOSAgICAgICAtPiAgLTEKK2RxY3RtMTQ3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOUUrMCAgICAtPiAgLTEKK2RxY3RtMTQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOTBFLTEgICAtPiAgLTEKK2RxY3RtMTQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC45RSsxICAtPiAgLTEKK2RxY3RtMTUwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgorZHFjdG0yMDAgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3LjAgICAgIC0+ICAgMAorZHFjdG0yMDEgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3ICAgICAgIC0+ICAtMQorZHFjdG0yMDIgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3LjAgICAgIC0+ICAgMQorZHFjdG0yMDMgY29tcGFyZXRvdG1hZyAgLTdFKzAgICA3LjAgICAgIC0+ICAgMQorZHFjdG0yMDQgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3LjAgICAgIC0+ICAgMAorZHFjdG0yMDUgY29tcGFyZXRvdG1hZyAgLTAuN0UrMSA3ICAgICAgIC0+ICAgMAorZHFjdG0yMDYgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3ICAgICAgIC0+ICAtMQorZHFjdG0yMDcgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3RSswICAgIC0+ICAtMQorZHFjdG0yMDggY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3MEUtMSAgIC0+ICAgMAorZHFjdG0yMDkgY29tcGFyZXRvdG1hZyAgLTcgICAgICAwLjdFKzEgIC0+ICAgMAorZHFjdG0yMTAgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3MEUtMSAgIC0+ICAgMQorCitkcWN0bTIyMCBjb21wYXJldG90bWFnICAtOC4wICAgIDcuMCAgICAgLT4gICAxCitkcWN0bTIyMSBjb21wYXJldG90bWFnICAtOC4wICAgIDcgICAgICAgLT4gICAxCitkcWN0bTIyMiBjb21wYXJldG90bWFnICAtOCAgICAgIDcuMCAgICAgLT4gICAxCitkcWN0bTIyMyBjb21wYXJldG90bWFnICAtOEUrMCAgIDcuMCAgICAgLT4gICAxCitkcWN0bTIyNCBjb21wYXJldG90bWFnICAtODBFLTEgIDcuMCAgICAgLT4gICAxCitkcWN0bTIyNSBjb21wYXJldG90bWFnICAtMC44RSsxIDcgICAgICAgLT4gICAxCitkcWN0bTIyNiBjb21wYXJldG90bWFnICAtODBFLTEgIDcgICAgICAgLT4gICAxCitkcWN0bTIyNyBjb21wYXJldG90bWFnICAtOC4wICAgIDdFKzAgICAgLT4gICAxCitkcWN0bTIyOCBjb21wYXJldG90bWFnICAtOC4wICAgIDcwRS0xICAgLT4gICAxCitkcWN0bTIyOSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuN0UrMSAgLT4gICAxCitkcWN0bTIzMCBjb21wYXJldG90bWFnICAtOCAgICAgIDcwRS0xICAgLT4gICAxCisKK2RxY3RtMjQwIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOS4wICAgICAtPiAgLTEKK2RxY3RtMjQxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOSAgICAgICAtPiAgLTEKK2RxY3RtMjQyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOS4wICAgICAtPiAgLTEKK2RxY3RtMjQzIGNvbXBhcmV0b3RtYWcgIC04RSswICAgOS4wICAgICAtPiAgLTEKK2RxY3RtMjQ0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOS4wICAgICAtPiAgLTEKK2RxY3RtMjQ1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgOSAgICAgICAtPiAgLTEKK2RxY3RtMjQ2IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOSAgICAgICAtPiAgLTEKK2RxY3RtMjQ3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOUUrMCAgICAtPiAgLTEKK2RxY3RtMjQ4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOTBFLTEgICAtPiAgLTEKK2RxY3RtMjQ5IGNvbXBhcmV0b3RtYWcgIC04ICAgICAgMC45RSsxICAtPiAgLTEKK2RxY3RtMjUwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgorZHFjdG0zMDAgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNy4wICAgICAtPiAgIDAKK2RxY3RtMzAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcgICAgICAgLT4gIC0xCitkcWN0bTMwMiBjb21wYXJldG90bWFnICAgNyAgICAgIC03LjAgICAgIC0+ICAgMQorZHFjdG0zMDMgY29tcGFyZXRvdG1hZyAgIDdFKzAgICAtNy4wICAgICAtPiAgIDEKK2RxY3RtMzA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcuMCAgICAgLT4gICAwCitkcWN0bTMwNSBjb21wYXJldG90bWFnICAgLjdFKzEgIC03ICAgICAgIC0+ICAgMAorZHFjdG0zMDYgY29tcGFyZXRvdG1hZyAgIDcwRS0xICAtNyAgICAgICAtPiAgLTEKK2RxY3RtMzA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTdFKzAgICAgLT4gIC0xCitkcWN0bTMwOCBjb21wYXJldG90bWFnICAgNy4wICAgIC03MEUtMSAgIC0+ICAgMAorZHFjdG0zMDkgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtLjdFKzEgICAtPiAgIDAKK2RxY3RtMzEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcwRS0xICAgLT4gICAxCisKK2RxY3RtMzIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTMyMSBjb21wYXJldG90bWFnICAgOC4wICAgIC03ICAgICAgIC0+ICAgMQorZHFjdG0zMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICAtNy4wICAgICAtPiAgIDEKK2RxY3RtMzIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTMyNCBjb21wYXJldG90bWFnICAgODBFLTEgIC03LjAgICAgIC0+ICAgMQorZHFjdG0zMjUgY29tcGFyZXRvdG1hZyAgIC44RSsxICAtNyAgICAgICAtPiAgIDEKK2RxY3RtMzI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcgICAgICAgLT4gICAxCitkcWN0bTMyNyBjb21wYXJldG90bWFnICAgOC4wICAgIC03RSswICAgIC0+ICAgMQorZHFjdG0zMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNzBFLTEgICAtPiAgIDEKK2RxY3RtMzI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS43RSsxICAgLT4gICAxCitkcWN0bTMzMCBjb21wYXJldG90bWFnICAgOCAgICAgIC03MEUtMSAgIC0+ICAgMQorCitkcWN0bTM0MCBjb21wYXJldG90bWFnICAgOC4wICAgIC05LjAgICAgIC0+ICAtMQorZHFjdG0zNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOSAgICAgICAtPiAgLTEKK2RxY3RtMzQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkuMCAgICAgLT4gIC0xCitkcWN0bTM0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIC05LjAgICAgIC0+ICAtMQorZHFjdG0zNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOS4wICAgICAtPiAgLTEKK2RxY3RtMzQ1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTkgICAgICAgLT4gIC0xCitkcWN0bTM0NiBjb21wYXJldG90bWFnICAgODBFLTEgIC05ICAgICAgIC0+ICAtMQorZHFjdG0zNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOUUrMCAgICAtPiAgLTEKK2RxY3RtMzQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkwRS0xICAgLT4gIC0xCitkcWN0bTM0OSBjb21wYXJldG90bWFnICAgOCAgICAgIC0uOUUrMSAgIC0+ICAtMQorZHFjdG0zNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOTBFLTEgICAtPiAgLTEKKworLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgorZHFjdG00MDAgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcuMCAgICAgLT4gICAwCitkcWN0bTQwMSBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNyAgICAgICAtPiAgLTEKK2RxY3RtNDAyIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03LjAgICAgIC0+ICAgMQorZHFjdG00MDMgY29tcGFyZXRvdG1hZyAgIC03RSswICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTQwNCBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNy4wICAgICAtPiAgIDAKK2RxY3RtNDA1IGNvbXBhcmV0b3RtYWcgICAtLjdFKzEgIC03ICAgICAgIC0+ICAgMAorZHFjdG00MDYgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcgICAgICAgLT4gIC0xCitkcWN0bTQwNyBjb21wYXJldG90bWFnICAgLTcuMCAgICAtN0UrMCAgICAtPiAgLTEKK2RxY3RtNDA4IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03MEUtMSAgIC0+ICAgMAorZHFjdG00MDkgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLS43RSsxICAgLT4gICAwCitkcWN0bTQxMCBjb21wYXJldG90bWFnICAgLTcgICAgICAtNzBFLTEgICAtPiAgIDEKKworZHFjdG00MjAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTQyMSBjb21wYXJldG90bWFnICAgLTguMCAgICAtNyAgICAgICAtPiAgIDEKK2RxY3RtNDIyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC03LjAgICAgIC0+ICAgMQorZHFjdG00MjMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTcuMCAgICAgLT4gICAxCitkcWN0bTQyNCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtNy4wICAgICAtPiAgIDEKK2RxY3RtNDI1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC03ICAgICAgIC0+ICAgMQorZHFjdG00MjYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcgICAgICAgLT4gICAxCitkcWN0bTQyNyBjb21wYXJldG90bWFnICAgLTguMCAgICAtN0UrMCAgICAtPiAgIDEKK2RxY3RtNDI4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03MEUtMSAgIC0+ICAgMQorZHFjdG00MjkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS43RSsxICAgLT4gICAxCitkcWN0bTQzMCBjb21wYXJldG90bWFnICAgLTggICAgICAtNzBFLTEgICAtPiAgIDEKKworZHFjdG00NDAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkuMCAgICAgLT4gIC0xCitkcWN0bTQ0MSBjb21wYXJldG90bWFnICAgLTguMCAgICAtOSAgICAgICAtPiAgLTEKK2RxY3RtNDQyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC05LjAgICAgIC0+ICAtMQorZHFjdG00NDMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTkuMCAgICAgLT4gIC0xCitkcWN0bTQ0NCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtOS4wICAgICAtPiAgLTEKK2RxY3RtNDQ1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC05ICAgICAgIC0+ICAtMQorZHFjdG00NDYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkgICAgICAgLT4gIC0xCitkcWN0bTQ0NyBjb21wYXJldG90bWFnICAgLTguMCAgICAtOUUrMCAgICAtPiAgLTEKK2RxY3RtNDQ4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05MEUtMSAgIC0+ICAtMQorZHFjdG00NDkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS45RSsxICAgLT4gIC0xCitkcWN0bTQ1MCBjb21wYXJldG90bWFnICAgLTggICAgICAtOTBFLTEgICAtPiAgLTEKKworCistLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0KK2RxY3RtNDczIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RxY3RtNDc0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZHFjdG00NzUgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RxY3RtNDc2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKK2RxY3RtNDc3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQorZHFjdG00NzggY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKK2RxY3RtNDc5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RxY3RtNDgwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQorZHFjdG00ODEgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKK2RxY3RtNDgyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKK2RxY3RtNDgzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgIC0+ICAgMAorZHFjdG00ODcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDAwMEUrODkgIC0+ICAgMQorZHFjdG00ODggY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAgLT4gICAxCitkcWN0bTQ4OSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgIC0+ICAgMQorZHFjdG00OTAgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgIC0+ICAgMQorZHFjdG00OTEgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwRSs4OSAgLT4gICAxCitkcWN0bTQ5MiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgIC0+ICAgMQorZHFjdG00OTMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMEUrODkgIC0+ICAgMQorZHFjdG00OTQgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAgLT4gICAxCitkcWN0bTQ5NSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgIC0+ICAgMQorZHFjdG00OTYgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgIC0+ICAgMQorZHFjdG00OTcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2RSs4OSAgLT4gICAwCisKKy0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwKK2RxY3RtNDk4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTcgICAgIC0+ICAgMQorZHFjdG00OTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNiAgICAgLT4gICAxCitkcWN0bTUwMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE1ICAgICAtPiAgIDEKK2RxY3RtNTAxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTQgICAgIC0+ICAgMQorZHFjdG01MDIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMyAgICAgLT4gICAxCitkcWN0bTUwMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEyICAgICAtPiAgIDEKK2RxY3RtNTA0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTEgICAgIC0+ICAgMQorZHFjdG01MDUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMCAgICAgLT4gICAxCitkcWN0bTUwNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTkgICAgICAtPiAgIDEKK2RxY3RtNTA3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtOCAgICAgIC0+ICAgMQorZHFjdG01MDggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS03ICAgICAgLT4gICAxCitkcWN0bTUwOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTYgICAgICAtPiAgIDEKK2RxY3RtNTEwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNSAgICAgIC0+ICAgMQorZHFjdG01MTEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS00ICAgICAgLT4gICAxCitkcWN0bTUxMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTMgICAgICAtPiAgIDEKK2RxY3RtNTEzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMiAgICAgIC0+ICAgMQorZHFjdG01MTQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xICAgICAgLT4gICAxCitkcWN0bTUxNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTAgICAgICAtPiAgIDAKK2RxY3RtNTE2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMSAgICAgIC0+ICAtMQorZHFjdG01MTcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsyICAgICAgLT4gIC0xCitkcWN0bTUxOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzMgICAgICAtPiAgLTEKK2RxY3RtNTE5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNCAgICAgIC0+ICAtMQorZHFjdG01MjEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs1ICAgICAgLT4gIC0xCitkcWN0bTUyMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzYgICAgICAtPiAgLTEKK2RxY3RtNTIzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNyAgICAgIC0+ICAtMQorZHFjdG01MjQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs4ICAgICAgLT4gIC0xCitkcWN0bTUyNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzkgICAgICAtPiAgLTEKK2RxY3RtNTI2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTAgICAgIC0+ICAtMQorZHFjdG01MjcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMSAgICAgLT4gIC0xCitkcWN0bTUyOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEyICAgICAtPiAgLTEKK2RxY3RtNTI5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTMgICAgIC0+ICAtMQorZHFjdG01MzAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNCAgICAgLT4gIC0xCitkcWN0bTUzMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE1ICAgICAtPiAgLTEKK2RxY3RtNTMyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTYgICAgIC0+ICAtMQorZHFjdG01MzMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNyAgICAgLT4gIC0xCistLSBMUiBzd2FwCitkcWN0bTUzOCBjb21wYXJldG90bWFnICAgIDFFLTE3ICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTM5IGNvbXBhcmV0b3RtYWcgICAgMUUtMTYgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NDAgY29tcGFyZXRvdG1hZyAgICAxRS0xNSAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU0MSBjb21wYXJldG90bWFnICAgIDFFLTE0ICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTQyIGNvbXBhcmV0b3RtYWcgICAgMUUtMTMgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NDMgY29tcGFyZXRvdG1hZyAgICAxRS0xMiAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU0NCBjb21wYXJldG90bWFnICAgIDFFLTExICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTQ1IGNvbXBhcmV0b3RtYWcgICAgMUUtMTAgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NDYgY29tcGFyZXRvdG1hZyAgICAxRS05ICAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU0NyBjb21wYXJldG90bWFnICAgIDFFLTggICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTQ4IGNvbXBhcmV0b3RtYWcgICAgMUUtNyAgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NDkgY29tcGFyZXRvdG1hZyAgICAxRS02ICAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU1MCBjb21wYXJldG90bWFnICAgIDFFLTUgICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTUxIGNvbXBhcmV0b3RtYWcgICAgMUUtNCAgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NTIgY29tcGFyZXRvdG1hZyAgICAxRS0zICAgMSAgICAgICAgLT4gIC0xCitkcWN0bTU1MyBjb21wYXJldG90bWFnICAgIDFFLTIgICAxICAgICAgICAtPiAgLTEKK2RxY3RtNTU0IGNvbXBhcmV0b3RtYWcgICAgMUUtMSAgIDEgICAgICAgIC0+ICAtMQorZHFjdG01NTUgY29tcGFyZXRvdG1hZyAgICAxRS0wICAgMSAgICAgICAgLT4gICAwCitkcWN0bTU1NiBjb21wYXJldG90bWFnICAgIDFFKzEgICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTU3IGNvbXBhcmV0b3RtYWcgICAgMUUrMiAgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NTggY29tcGFyZXRvdG1hZyAgICAxRSszICAgMSAgICAgICAgLT4gICAxCitkcWN0bTU1OSBjb21wYXJldG90bWFnICAgIDFFKzQgICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTYxIGNvbXBhcmV0b3RtYWcgICAgMUUrNSAgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NjIgY29tcGFyZXRvdG1hZyAgICAxRSs2ICAgMSAgICAgICAgLT4gICAxCitkcWN0bTU2MyBjb21wYXJldG90bWFnICAgIDFFKzcgICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTY0IGNvbXBhcmV0b3RtYWcgICAgMUUrOCAgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NjUgY29tcGFyZXRvdG1hZyAgICAxRSs5ICAgMSAgICAgICAgLT4gICAxCitkcWN0bTU2NiBjb21wYXJldG90bWFnICAgIDFFKzEwICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTY3IGNvbXBhcmV0b3RtYWcgICAgMUUrMTEgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NjggY29tcGFyZXRvdG1hZyAgICAxRSsxMiAgMSAgICAgICAgLT4gICAxCitkcWN0bTU2OSBjb21wYXJldG90bWFnICAgIDFFKzEzICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTcwIGNvbXBhcmV0b3RtYWcgICAgMUUrMTQgIDEgICAgICAgIC0+ICAgMQorZHFjdG01NzEgY29tcGFyZXRvdG1hZyAgICAxRSsxNSAgMSAgICAgICAgLT4gICAxCitkcWN0bTU3MiBjb21wYXJldG90bWFnICAgIDFFKzE2ICAxICAgICAgICAtPiAgIDEKK2RxY3RtNTczIGNvbXBhcmV0b3RtYWcgICAgMUUrMTcgIDEgICAgICAgIC0+ICAgMQorLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5CitkcWN0bTU3OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTcgICAgIC0+ICAgMQorZHFjdG01NzkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE2ICAgICAtPiAgIDEKK2RxY3RtNTgwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAgLT4gICAxCitkcWN0bTU4MSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgIC0+ICAgMQorZHFjdG01ODIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgICAtPiAgIDEKK2RxY3RtNTgzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAgLT4gICAxCitkcWN0bTU4NCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgIC0+ICAgMQorZHFjdG01ODUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgICAtPiAgIDEKK2RxY3RtNTg2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAgLT4gICAxCitkcWN0bTU4NyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgIC0+ICAgMQorZHFjdG01ODggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgICAtPiAgIDEKK2RxY3RtNTg5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAgLT4gIC0xCitkcWN0bTU5MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgIC0+ICAtMQorZHFjdG01OTEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgICAtPiAgLTEKK2RxY3RtNTkyIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAgLT4gIC0xCitkcWN0bTU5MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgIC0+ICAtMQorZHFjdG01OTQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgICAtPiAgLTEKK2RxY3RtNTk1IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAgLT4gIC0xCitkcWN0bTU5NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgIC0+ICAtMQorZHFjdG01OTcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgICAtPiAgLTEKK2RxY3RtNTk4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAgLT4gIC0xCitkcWN0bTU5OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgIC0+ICAtMQorCistLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcworZHFjdG02MDAgY29tcGFyZXRvdG1hZyAgIDEyICAgICAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYwMSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjAyIGNvbXBhcmV0b3RtYWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQorZHFjdG02MDMgY29tcGFyZXRvdG1hZyAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYwNCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjA1IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgIC0+ICAtMQorZHFjdG02MDYgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYwNyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjA4IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgIC0+ICAtMQorZHFjdG02MDkgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYxMCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMiAgICAgICAgICAgICAtPiAgIDEKK2RxY3RtNjExIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgIC0+ICAgMQorZHFjdG02MTIgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAgLT4gICAxCitkcWN0bTYxMyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgICAtPiAgIDEKK2RxY3RtNjE0IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgIC0+ICAgMQorZHFjdG02MTUgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAgLT4gICAxCitkcWN0bTYxNiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgICAtPiAgIDEKK2RxY3RtNjE3IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgIC0+ICAgMQorZHFjdG02MTggY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAgLT4gICAxCitkcWN0bTYxOSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgICAtPiAgIDEKK2RxY3RtNjIwIGNvbXBhcmV0b3RtYWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorZHFjdG02MjEgY29tcGFyZXRvdG1hZyAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYyMiBjb21wYXJldG90bWFnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjIzIGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQorZHFjdG02MjQgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYyNSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjI2IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgIC0+ICAtMQorZHFjdG02MjcgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAgLT4gIC0xCitkcWN0bTYyOCBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1ICAtPiAgLTEKK2RxY3RtNjI5IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgIC0+ICAtMQorZHFjdG02MzAgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyICAgICAgICAgICAgLT4gICAxCitkcWN0bTYzMSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgICAtPiAgIDEKK2RxY3RtNjMyIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgIC0+ICAgMQorZHFjdG02MzMgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAgLT4gICAxCitkcWN0bTYzNCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgICAtPiAgIDEKK2RxY3RtNjM1IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgIC0+ICAgMQorZHFjdG02MzYgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAgLT4gICAxCitkcWN0bTYzNyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgICAtPiAgIDEKK2RxY3RtNjM4IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgIC0+ICAgMQorZHFjdG02MzkgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAgLT4gICAxCisKKy0tIGV4dGVuZGVkIHplcm9zCitkcWN0bTY0MCBjb21wYXJldG90bWFnICAgMCAgICAgMCAgICAtPiAgIDAKK2RxY3RtNjQxIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wICAgIC0+ICAgMAorZHFjdG02NDIgY29tcGFyZXRvdG1hZyAgIDAgICAgLTAuMCAgLT4gICAxCitkcWN0bTY0MyBjb21wYXJldG90bWFnICAgMCAgICAgMC4wICAtPiAgIDEKK2RxY3RtNjQ0IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwICAgIC0+ICAgMAorZHFjdG02NDUgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAgICAgLT4gICAwCitkcWN0bTY0NiBjb21wYXJldG90bWFnICAtMCAgICAtMC4wICAtPiAgIDEKK2RxY3RtNjQ3IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwLjAgIC0+ICAgMQorZHFjdG02NDggY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAgICAgLT4gIC0xCitkcWN0bTY0OSBjb21wYXJldG90bWFnICAgMC4wICAtMCAgICAtPiAgLTEKK2RxY3RtNjUwIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wLjAgIC0+ICAgMAorZHFjdG02NTEgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgLT4gICAwCitkcWN0bTY1MiBjb21wYXJldG90bWFnICAtMC4wICAgMCAgICAtPiAgLTEKK2RxY3RtNjUzIGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wICAgIC0+ICAtMQorZHFjdG02NTQgY29tcGFyZXRvdG1hZyAgLTAuMCAgLTAuMCAgLT4gICAwCitkcWN0bTY1NSBjb21wYXJldG90bWFnICAtMC4wICAgMC4wICAtPiAgIDAKKworZHFjdG02NTYgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDAuMCAgLT4gICAxCitkcWN0bTY1NyBjb21wYXJldG90bWFnICAtMEUyICAgMC4wICAtPiAgIDEKK2RxY3RtNjU4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwLjAgIC0+ICAgMQorZHFjdG02NTkgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDAuMCAgLT4gICAxCitkcWN0bTY2MCBjb21wYXJldG90bWFnICAtMEUxICAgMCAgICAtPiAgIDEKK2RxY3RtNjYxIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwICAgIC0+ICAgMQorZHFjdG02NjIgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDAgICAgLT4gICAxCitkcWN0bTY2MyBjb21wYXJldG90bWFnICAgMEUyICAgMCAgICAtPiAgIDEKK2RxY3RtNjY0IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTEgIC0+ICAgMAorZHFjdG02NjUgY29tcGFyZXRvdG1hZyAgLTBFMiAgLTBFMSAgLT4gICAxCitkcWN0bTY2NiBjb21wYXJldG90bWFnICAgMEUxICAtMEUxICAtPiAgIDAKK2RxY3RtNjY3IGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTEgIC0+ICAgMQorZHFjdG02NjggY29tcGFyZXRvdG1hZyAgLTBFMSAgLTBFMiAgLT4gIC0xCitkcWN0bTY2OSBjb21wYXJldG90bWFnICAtMEUyICAtMEUyICAtPiAgIDAKK2RxY3RtNjcwIGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTIgIC0+ICAtMQorZHFjdG02NzEgY29tcGFyZXRvdG1hZyAgIDBFMiAgLTBFMiAgLT4gICAwCitkcWN0bTY3MiBjb21wYXJldG90bWFnICAtMEUxICAgMEUxICAtPiAgIDAKK2RxY3RtNjczIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTEgIC0+ICAgMQorZHFjdG02NzQgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDBFMSAgLT4gICAwCitkcWN0bTY3NSBjb21wYXJldG90bWFnICAgMEUyICAgMEUxICAtPiAgIDEKK2RxY3RtNjc2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTIgIC0+ICAtMQorZHFjdG02NzcgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDBFMiAgLT4gICAwCitkcWN0bTY3OCBjb21wYXJldG90bWFnICAgMEUxICAgMEUyICAtPiAgLTEKK2RxY3RtNjc5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTIgIC0+ICAgMAorCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15CitkcWN0bTY4MCBjb21wYXJldG90bWFnICAgMTIgICAgMTIgICAgICAgICAgICAtPiAgIDAKK2RxY3RtNjgxIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wICAgICAgICAgIC0+ICAgMQorZHFjdG02ODIgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwICAgICAgICAgLT4gICAxCitkcWN0bTY4MyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwICAgICAgICAtPiAgIDEKK2RxY3RtNjg0IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwICAgICAgIC0+ICAgMQorZHFjdG02ODUgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwICAgICAgLT4gICAxCitkcWN0bTY4NiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwICAgICAtPiAgIDEKK2RxY3RtNjg3IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwICAgIC0+ICAgMQorZHFjdG02ODggY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAwICAgLT4gICAxCitkcWN0bTY4OSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAwICAtPiAgIDEKK2RxY3RtNjkwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAgICAgICAgICAgMTIgIC0+ICAgMAorZHFjdG02OTEgY29tcGFyZXRvdG1hZyAgIDEyLjAgICAgICAgICAgICAxMiAgLT4gIC0xCitkcWN0bTY5MiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAgIDEyICAtPiAgLTEKK2RxY3RtNjkzIGNvbXBhcmV0b3RtYWcgICAxMi4wMDAgICAgICAgICAgMTIgIC0+ICAtMQorZHFjdG02OTQgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAgICAgICAgICAxMiAgLT4gIC0xCitkcWN0bTY5NSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAgIDEyICAtPiAgLTEKK2RxY3RtNjk2IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAgICAgICAgMTIgIC0+ICAtMQorZHFjdG02OTcgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAgICAgICAxMiAgLT4gIC0xCitkcWN0bTY5OCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAgIDEyICAtPiAgLTEKK2RxY3RtNjk5IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMDAgICAgMTIgIC0+ICAtMQorCistLSBvbGQgbG9uZyBvcGVyYW5kIGNoZWNrcworZHFjdG03MDEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwMCAgMSAgLT4gICAxCitkcWN0bTcwMiBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMDAgICAtPiAgLTEKK2RxY3RtNzAzIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMCAgIDEgIC0+ICAgMQorZHFjdG03MDQgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAgICAgLT4gIC0xCitkcWN0bTcwNSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAgICAxICAtPiAgIDEKK2RxY3RtNzA2IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwICAgIC0+ICAtMQorZHFjdG03MDcgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkxICAgMSAgLT4gICAxCitkcWN0bTcwOCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAgLTEKK2RxY3RtNzA5IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MDEgIDEgIC0+ICAgMQorZHFjdG03MTAgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gIC0xCitkcWN0bTcxMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTYgICAxICAtPiAgIDEKK2RxY3RtNzEyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODk2ICAgIC0+ICAtMQorZHFjdG03MTMgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gICAxCitkcWN0bTcxNCBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAgLTEKK2RxY3RtNzE1IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTAxIDEgIC0+ICAgMQorZHFjdG03MTYgY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gIC0xCitkcWN0bTcxNyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODk2ICAxICAtPiAgIDEKK2RxY3RtNzE4IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5NiAgIC0+ICAtMQorCistLSBvbGQgcmVzaWR1ZSBjYXNlcworZHFjdG03NDAgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTk5ICAgLT4gICAxCitkcWN0bTc0MSBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OSAgICAtPiAgIDEKK2RxY3RtNzQyIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTkgICAgIC0+ICAgMQorZHFjdG03NDMgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwICAgICAgLT4gICAxCitkcWN0bTc0NCBjb21wYXJldG90bWFnICAxICAxLjAwMDAxICAgICAtPiAgLTEKK2RxY3RtNzQ1IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAxICAgIC0+ICAtMQorZHFjdG03NDYgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDAxICAgLT4gIC0xCitkcWN0bTc1MCBjb21wYXJldG90bWFnICAwLjk5OTk5OTkgIDEgICAtPiAgLTEKK2RxY3RtNzUxIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTk5ICAgMSAgIC0+ICAtMQorZHFjdG03NTIgY29tcGFyZXRvdG1hZyAgMC45OTk5OSAgICAxICAgLT4gIC0xCitkcWN0bTc1MyBjb21wYXJldG90bWFnICAxLjAwMDAgICAgIDEgICAtPiAgLTEKK2RxY3RtNzU0IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDEgICAgMSAgIC0+ICAgMQorZHFjdG03NTUgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDEgICAxICAgLT4gICAxCitkcWN0bTc1NiBjb21wYXJldG90bWFnICAxLjAwMDAwMDEgIDEgICAtPiAgIDEKKworLS0gU3BlY2lhbHMKK2RxY3RtNzgwIGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwCitkcWN0bTc4MSBjb21wYXJldG90bWFnICBJbmYgIC0xMDAwICAtPiAgMQorZHFjdG03ODIgY29tcGFyZXRvdG1hZyAgSW5mICAtMSAgICAgLT4gIDEKK2RxY3RtNzgzIGNvbXBhcmV0b3RtYWcgIEluZiAgLTAgICAgIC0+ICAxCitkcWN0bTc4NCBjb21wYXJldG90bWFnICBJbmYgICAwICAgICAtPiAgMQorZHFjdG03ODUgY29tcGFyZXRvdG1hZyAgSW5mICAgMSAgICAgLT4gIDEKK2RxY3RtNzg2IGNvbXBhcmV0b3RtYWcgIEluZiAgIDEwMDAgIC0+ICAxCitkcWN0bTc4NyBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMAorZHFjdG03ODggY29tcGFyZXRvdG1hZyAtMTAwMCAgSW5mICAgLT4gLTEKK2RxY3RtNzg5IGNvbXBhcmV0b3RtYWcgLUluZiAgIEluZiAgIC0+ICAwCitkcWN0bTc5MCBjb21wYXJldG90bWFnIC0xICAgICBJbmYgICAtPiAtMQorZHFjdG03OTEgY29tcGFyZXRvdG1hZyAtMCAgICAgSW5mICAgLT4gLTEKK2RxY3RtNzkyIGNvbXBhcmV0b3RtYWcgIDAgICAgIEluZiAgIC0+IC0xCitkcWN0bTc5MyBjb21wYXJldG90bWFnICAxICAgICBJbmYgICAtPiAtMQorZHFjdG03OTQgY29tcGFyZXRvdG1hZyAgMTAwMCAgSW5mICAgLT4gLTEKK2RxY3RtNzk1IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwCisKK2RxY3RtODAwIGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwCitkcWN0bTgwMSBjb21wYXJldG90bWFnIC1JbmYgIC0xMDAwICAtPiAgMQorZHFjdG04MDIgY29tcGFyZXRvdG1hZyAtSW5mICAtMSAgICAgLT4gIDEKK2RxY3RtODAzIGNvbXBhcmV0b3RtYWcgLUluZiAgLTAgICAgIC0+ICAxCitkcWN0bTgwNCBjb21wYXJldG90bWFnIC1JbmYgICAwICAgICAtPiAgMQorZHFjdG04MDUgY29tcGFyZXRvdG1hZyAtSW5mICAgMSAgICAgLT4gIDEKK2RxY3RtODA2IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEwMDAgIC0+ICAxCitkcWN0bTgwNyBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMAorZHFjdG04MDggY29tcGFyZXRvdG1hZyAtSW5mICAtSW5mICAgLT4gIDAKK2RxY3RtODA5IGNvbXBhcmV0b3RtYWcgLTEwMDAgLUluZiAgIC0+IC0xCitkcWN0bTgxMCBjb21wYXJldG90bWFnIC0xICAgIC1JbmYgICAtPiAtMQorZHFjdG04MTEgY29tcGFyZXRvdG1hZyAtMCAgICAtSW5mICAgLT4gLTEKK2RxY3RtODEyIGNvbXBhcmV0b3RtYWcgIDAgICAgLUluZiAgIC0+IC0xCitkcWN0bTgxMyBjb21wYXJldG90bWFnICAxICAgIC1JbmYgICAtPiAtMQorZHFjdG04MTQgY29tcGFyZXRvdG1hZyAgMTAwMCAtSW5mICAgLT4gLTEKK2RxY3RtODE1IGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwCisKK2RxY3RtODIxIGNvbXBhcmV0b3RtYWcgIE5hTiAtSW5mICAgIC0+ICAxCitkcWN0bTgyMiBjb21wYXJldG90bWFnICBOYU4gLTEwMDAgICAtPiAgMQorZHFjdG04MjMgY29tcGFyZXRvdG1hZyAgTmFOIC0xICAgICAgLT4gIDEKK2RxY3RtODI0IGNvbXBhcmV0b3RtYWcgIE5hTiAtMCAgICAgIC0+ICAxCitkcWN0bTgyNSBjb21wYXJldG90bWFnICBOYU4gIDAgICAgICAtPiAgMQorZHFjdG04MjYgY29tcGFyZXRvdG1hZyAgTmFOICAxICAgICAgLT4gIDEKK2RxY3RtODI3IGNvbXBhcmV0b3RtYWcgIE5hTiAgMTAwMCAgIC0+ICAxCitkcWN0bTgyOCBjb21wYXJldG90bWFnICBOYU4gIEluZiAgICAtPiAgMQorZHFjdG04MjkgY29tcGFyZXRvdG1hZyAgTmFOICBOYU4gICAgLT4gIDAKK2RxY3RtODMwIGNvbXBhcmV0b3RtYWcgLUluZiAgTmFOICAgIC0+ICAtMQorZHFjdG04MzEgY29tcGFyZXRvdG1hZyAtMTAwMCBOYU4gICAgLT4gIC0xCitkcWN0bTgzMiBjb21wYXJldG90bWFnIC0xICAgIE5hTiAgICAtPiAgLTEKK2RxY3RtODMzIGNvbXBhcmV0b3RtYWcgLTAgICAgTmFOICAgIC0+ICAtMQorZHFjdG04MzQgY29tcGFyZXRvdG1hZyAgMCAgICBOYU4gICAgLT4gIC0xCitkcWN0bTgzNSBjb21wYXJldG90bWFnICAxICAgIE5hTiAgICAtPiAgLTEKK2RxY3RtODM2IGNvbXBhcmV0b3RtYWcgIDEwMDAgTmFOICAgIC0+ICAtMQorZHFjdG04MzcgY29tcGFyZXRvdG1hZyAgSW5mICBOYU4gICAgLT4gIC0xCitkcWN0bTgzOCBjb21wYXJldG90bWFnIC1OYU4gLU5hTiAgICAtPiAgMAorZHFjdG04MzkgY29tcGFyZXRvdG1hZyArTmFOIC1OYU4gICAgLT4gIDAKK2RxY3RtODQwIGNvbXBhcmV0b3RtYWcgLU5hTiArTmFOICAgIC0+ICAwCisKK2RxY3RtODQxIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gIC0+ICAwCitkcWN0bTg0MiBjb21wYXJldG90bWFnICBzTmFOIC1OYU4gICAtPiAgLTEKK2RxY3RtODQzIGNvbXBhcmV0b3RtYWcgIHNOYU4gLUluZiAgIC0+ICAxCitkcWN0bTg0NCBjb21wYXJldG90bWFnICBzTmFOIC0xMDAwICAtPiAgMQorZHFjdG04NDUgY29tcGFyZXRvdG1hZyAgc05hTiAtMSAgICAgLT4gIDEKK2RxY3RtODQ2IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTAgICAgIC0+ICAxCitkcWN0bTg0NyBjb21wYXJldG90bWFnICBzTmFOICAwICAgICAtPiAgMQorZHFjdG04NDggY29tcGFyZXRvdG1hZyAgc05hTiAgMSAgICAgLT4gIDEKK2RxY3RtODQ5IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDEwMDAgIC0+ICAxCitkcWN0bTg1MCBjb21wYXJldG90bWFnICBzTmFOICBOYU4gICAtPiAgLTEKK2RxY3RtODUxIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwCisKK2RxY3RtODUyIGNvbXBhcmV0b3RtYWcgLXNOYU4gc05hTiAgIC0+ICAwCitkcWN0bTg1MyBjb21wYXJldG90bWFnIC1OYU4gIHNOYU4gICAtPiAgMQorZHFjdG04NTQgY29tcGFyZXRvdG1hZyAtSW5mICBzTmFOICAgLT4gIC0xCitkcWN0bTg1NSBjb21wYXJldG90bWFnIC0xMDAwIHNOYU4gICAtPiAgLTEKK2RxY3RtODU2IGNvbXBhcmV0b3RtYWcgLTEgICAgc05hTiAgIC0+ICAtMQorZHFjdG04NTcgY29tcGFyZXRvdG1hZyAtMCAgICBzTmFOICAgLT4gIC0xCitkcWN0bTg1OCBjb21wYXJldG90bWFnICAwICAgIHNOYU4gICAtPiAgLTEKK2RxY3RtODU5IGNvbXBhcmV0b3RtYWcgIDEgICAgc05hTiAgIC0+ICAtMQorZHFjdG04NjAgY29tcGFyZXRvdG1hZyAgMTAwMCBzTmFOICAgLT4gIC0xCitkcWN0bTg2MSBjb21wYXJldG90bWFnICBJbmYgIHNOYU4gICAtPiAgLTEKK2RxY3RtODYyIGNvbXBhcmV0b3RtYWcgIE5hTiAgc05hTiAgIC0+ICAxCitkcWN0bTg2MyBjb21wYXJldG90bWFnICBzTmFOIHNOYU4gICAtPiAgMAorCitkcWN0bTg3MSBjb21wYXJldG90bWFnICAtc05hTiAtc05hTiAgLT4gIDAKK2RxY3RtODcyIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1OYU4gICAtPiAgLTEKK2RxY3RtODczIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1JbmYgICAtPiAgMQorZHFjdG04NzQgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEwMDAgIC0+ICAxCitkcWN0bTg3NSBjb21wYXJldG90bWFnICAtc05hTiAtMSAgICAgLT4gIDEKK2RxY3RtODc2IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0wICAgICAtPiAgMQorZHFjdG04NzcgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDAgICAgIC0+ICAxCitkcWN0bTg3OCBjb21wYXJldG90bWFnICAtc05hTiAgMSAgICAgLT4gIDEKK2RxY3RtODc5IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAxMDAwICAtPiAgMQorZHFjdG04ODAgY29tcGFyZXRvdG1hZyAgLXNOYU4gIE5hTiAgIC0+ICAtMQorZHFjdG04ODEgY29tcGFyZXRvdG1hZyAgLXNOYU4gc05hTiAgIC0+ICAwCisKK2RxY3RtODgyIGNvbXBhcmV0b3RtYWcgLXNOYU4gLXNOYU4gICAtPiAgMAorZHFjdG04ODMgY29tcGFyZXRvdG1hZyAtTmFOICAtc05hTiAgIC0+ICAxCitkcWN0bTg4NCBjb21wYXJldG90bWFnIC1JbmYgIC1zTmFOICAgLT4gIC0xCitkcWN0bTg4NSBjb21wYXJldG90bWFnIC0xMDAwIC1zTmFOICAgLT4gIC0xCitkcWN0bTg4NiBjb21wYXJldG90bWFnIC0xICAgIC1zTmFOICAgLT4gIC0xCitkcWN0bTg4NyBjb21wYXJldG90bWFnIC0wICAgIC1zTmFOICAgLT4gIC0xCitkcWN0bTg4OCBjb21wYXJldG90bWFnICAwICAgIC1zTmFOICAgLT4gIC0xCitkcWN0bTg4OSBjb21wYXJldG90bWFnICAxICAgIC1zTmFOICAgLT4gIC0xCitkcWN0bTg5MCBjb21wYXJldG90bWFnICAxMDAwIC1zTmFOICAgLT4gIC0xCitkcWN0bTg5MSBjb21wYXJldG90bWFnICBJbmYgIC1zTmFOICAgLT4gIC0xCitkcWN0bTg5MiBjb21wYXJldG90bWFnICBOYU4gIC1zTmFOICAgLT4gIDEKK2RxY3RtODkzIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gICAtPiAgMAorCistLSBOYU5zIHdpdGggcGF5bG9hZAorZHFjdG05NjAgY29tcGFyZXRvdG1hZyAgTmFOOSAtSW5mICAgLT4gIDEKK2RxY3RtOTYxIGNvbXBhcmV0b3RtYWcgIE5hTjggIDk5OSAgIC0+ICAxCitkcWN0bTk2MiBjb21wYXJldG90bWFnICBOYU43NyBJbmYgICAtPiAgMQorZHFjdG05NjMgY29tcGFyZXRvdG1hZyAtTmFONjcgTmFONSAgLT4gIDEKK2RxY3RtOTY0IGNvbXBhcmV0b3RtYWcgLUluZiAgLU5hTjQgIC0+ICAtMQorZHFjdG05NjUgY29tcGFyZXRvdG1hZyAtOTk5ICAtTmFOMzMgLT4gIC0xCitkcWN0bTk2NiBjb21wYXJldG90bWFnICBJbmYgICBOYU4yICAtPiAgLTEKKworZHFjdG05NzAgY29tcGFyZXRvdG1hZyAtTmFONDEgLU5hTjQyIC0+IC0xCitkcWN0bTk3MSBjb21wYXJldG90bWFnICtOYU40MSAtTmFONDIgLT4gLTEKK2RxY3RtOTcyIGNvbXBhcmV0b3RtYWcgLU5hTjQxICtOYU40MiAtPiAtMQorZHFjdG05NzMgY29tcGFyZXRvdG1hZyArTmFONDEgK05hTjQyIC0+IC0xCitkcWN0bTk3NCBjb21wYXJldG90bWFnIC1OYU40MiAtTmFOMDEgLT4gIDEKK2RxY3RtOTc1IGNvbXBhcmV0b3RtYWcgK05hTjQyIC1OYU4wMSAtPiAgMQorZHFjdG05NzYgY29tcGFyZXRvdG1hZyAtTmFONDIgK05hTjAxIC0+ICAxCitkcWN0bTk3NyBjb21wYXJldG90bWFnICtOYU40MiArTmFOMDEgLT4gIDEKKworZHFjdG05ODAgY29tcGFyZXRvdG1hZyAtc05hTjc3MSAtc05hTjc3MiAtPiAtMQorZHFjdG05ODEgY29tcGFyZXRvdG1hZyArc05hTjc3MSAtc05hTjc3MiAtPiAtMQorZHFjdG05ODIgY29tcGFyZXRvdG1hZyAtc05hTjc3MSArc05hTjc3MiAtPiAtMQorZHFjdG05ODMgY29tcGFyZXRvdG1hZyArc05hTjc3MSArc05hTjc3MiAtPiAtMQorZHFjdG05ODQgY29tcGFyZXRvdG1hZyAtc05hTjc3MiAtc05hTjc3MSAtPiAgMQorZHFjdG05ODUgY29tcGFyZXRvdG1hZyArc05hTjc3MiAtc05hTjc3MSAtPiAgMQorZHFjdG05ODYgY29tcGFyZXRvdG1hZyAtc05hTjc3MiArc05hTjc3MSAtPiAgMQorZHFjdG05ODcgY29tcGFyZXRvdG1hZyArc05hTjc3MiArc05hTjc3MSAtPiAgMQorCitkcWN0bTk5MSBjb21wYXJldG90bWFnIC1zTmFOOTkgLUluZiAgICAtPiAgMQorZHFjdG05OTIgY29tcGFyZXRvdG1hZyAgc05hTjk4IC0xMSAgICAgLT4gIDEKK2RxY3RtOTkzIGNvbXBhcmV0b3RtYWcgIHNOYU45NyAgTmFOICAgIC0+IC0xCitkcWN0bTk5NCBjb21wYXJldG90bWFnICBzTmFOMTYgc05hTjk0ICAtPiAtMQorZHFjdG05OTUgY29tcGFyZXRvdG1hZyAgTmFOODUgIHNOYU44MyAgLT4gIDEKK2RxY3RtOTk2IGNvbXBhcmV0b3RtYWcgLUluZiAgICBzTmFOOTIgIC0+IC0xCitkcWN0bTk5NyBjb21wYXJldG90bWFnICAwODggICAgc05hTjgxICAtPiAtMQorZHFjdG05OTggY29tcGFyZXRvdG1hZyAgSW5mICAgIHNOYU45MCAgLT4gLTEKK2RxY3RtOTk5IGNvbXBhcmV0b3RtYWcgIE5hTiAgIC1zTmFOODkgIC0+ICAxCisKKy0tIHNwcmVhZCB6ZXJvcworZHFjdG0xMTEwIGNvbXBhcmV0b3RtYWcgICAwRS02MTQzICAwICAgICAgICAtPiAgLTEKK2RxY3RtMTExMSBjb21wYXJldG90bWFnICAgMEUtNjE0MyAtMCAgICAgICAgLT4gIC0xCitkcWN0bTExMTIgY29tcGFyZXRvdG1hZyAgLTBFLTYxNDMgIDAgICAgICAgIC0+ICAtMQorZHFjdG0xMTEzIGNvbXBhcmV0b3RtYWcgIC0wRS02MTQzIC0wICAgICAgICAtPiAgLTEKK2RxY3RtMTExNCBjb21wYXJldG90bWFnICAgMEUtNjE0MyAgMEUrNjE0NCAgIC0+ICAtMQorZHFjdG0xMTE1IGNvbXBhcmV0b3RtYWcgICAwRS02MTQzIC0wRSs2MTQ0ICAgLT4gIC0xCitkcWN0bTExMTYgY29tcGFyZXRvdG1hZyAgLTBFLTYxNDMgIDBFKzYxNDQgICAtPiAgLTEKK2RxY3RtMTExNyBjb21wYXJldG90bWFnICAtMEUtNjE0MyAtMEUrNjE0NCAgIC0+ICAtMQorZHFjdG0xMTE4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFKzYxNDQgICAtPiAgLTEKK2RxY3RtMTExOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRSs2MTQ0ICAgLT4gIC0xCitkcWN0bTExMjAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUrNjE0NCAgIC0+ICAtMQorZHFjdG0xMTIxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFKzYxNDQgICAtPiAgLTEKKworZHFjdG0xMTMwIGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0ICAwICAgICAgICAtPiAgIDEKK2RxY3RtMTEzMSBjb21wYXJldG90bWFnICAgMEUrNjE0NCAtMCAgICAgICAgLT4gICAxCitkcWN0bTExMzIgY29tcGFyZXRvdG1hZyAgLTBFKzYxNDQgIDAgICAgICAgIC0+ICAgMQorZHFjdG0xMTMzIGNvbXBhcmV0b3RtYWcgIC0wRSs2MTQ0IC0wICAgICAgICAtPiAgIDEKK2RxY3RtMTEzNCBjb21wYXJldG90bWFnICAgMEUrNjE0NCAgMEUtNjE0MyAgIC0+ICAgMQorZHFjdG0xMTM1IGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0IC0wRS02MTQzICAgLT4gICAxCitkcWN0bTExMzYgY29tcGFyZXRvdG1hZyAgLTBFKzYxNDQgIDBFLTYxNDMgICAtPiAgIDEKK2RxY3RtMTEzNyBjb21wYXJldG90bWFnICAtMEUrNjE0NCAtMEUtNjE0MyAgIC0+ICAgMQorZHFjdG0xMTM4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFLTYxNDMgICAtPiAgIDEKK2RxY3RtMTEzOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRS02MTQzICAgLT4gICAxCitkcWN0bTExNDAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUtNjE0MyAgIC0+ICAgMQorZHFjdG0xMTQxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFLTYxNDMgICAtPiAgIDEKKworLS0gTnVsbCB0ZXN0cworZHFjdG05OTkwIGNvbXBhcmV0b3RtYWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWN0bTk5OTEgY29tcGFyZXRvdG1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5LmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNjI0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weS5kZWNUZXN0CkBAIC0wLDAgKzEsODggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFDb3B5LmRlY1Rlc3QgLS0gcXVpZXQgZGVjUXVhZCBjb3B5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkcWNweTAwMSBjb3B5ICAgICAgICs3LjUwICAtPiA3LjUwCisKKy0tIEluZmluaXRpZXMKK2RxY3B5MDExIGNvcHkgIEluZmluaXR5ICAgIC0+IEluZmluaXR5CitkcWNweTAxMiBjb3B5ICAtSW5maW5pdHkgICAtPiAtSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitkcWNweTAyMSBjb3B5ICAgICAgICAgTmFOICAtPiBOYU4KK2RxY3B5MDIyIGNvcHkgICAgICAgIC1OYU4gIC0+IC1OYU4KK2RxY3B5MDIzIGNvcHkgICAgICAgIHNOYU4gIC0+IHNOYU4KK2RxY3B5MDI0IGNvcHkgICAgICAgLXNOYU4gIC0+IC1zTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RxY3B5MDMxIGNvcHkgICAgICAgTmFOMTAgIC0+IE5hTjEwCitkcWNweTAzMiBjb3B5ICAgICAgLU5hTjEwICAtPiAtTmFOMTAKK2RxY3B5MDMzIGNvcHkgICAgICBzTmFOMTAgIC0+IHNOYU4xMAorZHFjcHkwMzQgY29weSAgICAgLXNOYU4xMCAgLT4gLXNOYU4xMAorZHFjcHkwMzUgY29weSAgICAgICBOYU43ICAgLT4gTmFONworZHFjcHkwMzYgY29weSAgICAgIC1OYU43ICAgLT4gLU5hTjcKK2RxY3B5MDM3IGNvcHkgICAgICBzTmFOMTAxIC0+IHNOYU4xMDEKK2RxY3B5MDM4IGNvcHkgICAgIC1zTmFOMTAxIC0+IC1zTmFOMTAxCisKKy0tIGZpbml0ZXMKK2RxY3B5MTAxIGNvcHkgICAgICAgICAgNyAgIC0+IDcKK2RxY3B5MTAyIGNvcHkgICAgICAgICAtNyAgIC0+IC03CitkcWNweTEwMyBjb3B5ICAgICAgICAgNzUgICAtPiA3NQorZHFjcHkxMDQgY29weSAgICAgICAgLTc1ICAgLT4gLTc1CitkcWNweTEwNSBjb3B5ICAgICAgIDcuNTAgICAtPiA3LjUwCitkcWNweTEwNiBjb3B5ICAgICAgLTcuNTAgICAtPiAtNy41MAorZHFjcHkxMDcgY29weSAgICAgICA3LjUwMCAgLT4gNy41MDAKK2RxY3B5MTA4IGNvcHkgICAgICAtNy41MDAgIC0+IC03LjUwMAorCistLSB6ZXJvcworZHFjcHkxMTEgY29weSAgICAgICAgICAwICAgLT4gMAorZHFjcHkxMTIgY29weSAgICAgICAgIC0wICAgLT4gLTAKK2RxY3B5MTEzIGNvcHkgICAgICAgMEUrNCAgIC0+IDBFKzQKK2RxY3B5MTE0IGNvcHkgICAgICAtMEUrNCAgIC0+IC0wRSs0CitkcWNweTExNSBjb3B5ICAgICAwLjAwMDAgICAtPiAwLjAwMDAKK2RxY3B5MTE2IGNvcHkgICAgLTAuMDAwMCAgIC0+IC0wLjAwMDAKK2RxY3B5MTE3IGNvcHkgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZHFjcHkxMTggY29weSAgICAgLTBFLTE0MSAgLT4gLTBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZHFjcHkxMjEgY29weSAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3B5MTIyIGNvcHkgIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcWNweTEyMyBjb3B5ICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorZHFjcHkxMjQgY29weSAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxY3B5MTMxIGNvcHkgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWNweTEzMiBjb3B5ICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzCitkcWNweTEzMyBjb3B5ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcHkxMzQgY29weSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NgorCitkcWNweTEzNSBjb3B5ICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2CitkcWNweTEzNiBjb3B5ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcHkxMzcgY29weSAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE0MworZHFjcHkxMzggY29weSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5QWJzLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weUFicy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YmNiNGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weUFicy5kZWNUZXN0CkBAIC0wLDAgKzEsODggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFDb3B5QWJzLmRlY1Rlc3QgLS0gcXVpZXQgZGVjUXVhZCBjb3B5IGFuZCBzZXQgc2lnbiB0byB6ZXJvICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkcWNwYTAwMSBjb3B5YWJzICAgICAgICs3LjUwICAtPiA3LjUwCisKKy0tIEluZmluaXRpZXMKK2RxY3BhMDExIGNvcHlhYnMgIEluZmluaXR5ICAgIC0+IEluZmluaXR5CitkcWNwYTAxMiBjb3B5YWJzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RxY3BhMDIxIGNvcHlhYnMgICAgICAgICBOYU4gIC0+IE5hTgorZHFjcGEwMjIgY29weWFicyAgICAgICAgLU5hTiAgLT4gTmFOCitkcWNwYTAyMyBjb3B5YWJzICAgICAgICBzTmFOICAtPiBzTmFOCitkcWNwYTAyNCBjb3B5YWJzICAgICAgIC1zTmFOICAtPiBzTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RxY3BhMDMxIGNvcHlhYnMgICAgICAgTmFOMTAgIC0+IE5hTjEwCitkcWNwYTAzMiBjb3B5YWJzICAgICAgLU5hTjE1ICAtPiBOYU4xNQorZHFjcGEwMzMgY29weWFicyAgICAgIHNOYU4xNSAgLT4gc05hTjE1CitkcWNwYTAzNCBjb3B5YWJzICAgICAtc05hTjEwICAtPiBzTmFOMTAKK2RxY3BhMDM1IGNvcHlhYnMgICAgICAgTmFONyAgIC0+IE5hTjcKK2RxY3BhMDM2IGNvcHlhYnMgICAgICAtTmFONyAgIC0+IE5hTjcKK2RxY3BhMDM3IGNvcHlhYnMgICAgICBzTmFOMTAxIC0+IHNOYU4xMDEKK2RxY3BhMDM4IGNvcHlhYnMgICAgIC1zTmFOMTAxIC0+IHNOYU4xMDEKKworLS0gZmluaXRlcworZHFjcGExMDEgY29weWFicyAgICAgICAgICA3ICAgLT4gNworZHFjcGExMDIgY29weWFicyAgICAgICAgIC03ICAgLT4gNworZHFjcGExMDMgY29weWFicyAgICAgICAgIDc1ICAgLT4gNzUKK2RxY3BhMTA0IGNvcHlhYnMgICAgICAgIC03NSAgIC0+IDc1CitkcWNwYTEwNSBjb3B5YWJzICAgICAgIDcuMTAgICAtPiA3LjEwCitkcWNwYTEwNiBjb3B5YWJzICAgICAgLTcuMTAgICAtPiA3LjEwCitkcWNwYTEwNyBjb3B5YWJzICAgICAgIDcuNTAwICAtPiA3LjUwMAorZHFjcGExMDggY29weWFicyAgICAgIC03LjUwMCAgLT4gNy41MDAKKworLS0gemVyb3MKK2RxY3BhMTExIGNvcHlhYnMgICAgICAgICAgMCAgIC0+IDAKK2RxY3BhMTEyIGNvcHlhYnMgICAgICAgICAtMCAgIC0+IDAKK2RxY3BhMTEzIGNvcHlhYnMgICAgICAgMEUrNiAgIC0+IDBFKzYKK2RxY3BhMTE0IGNvcHlhYnMgICAgICAtMEUrNiAgIC0+IDBFKzYKK2RxY3BhMTE1IGNvcHlhYnMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorZHFjcGExMTYgY29weWFicyAgICAtMC4wMDAwICAgLT4gMC4wMDAwCitkcWNwYTExNyBjb3B5YWJzICAgICAgMEUtMTQxICAtPiAwRS0xNDEKK2RxY3BhMTE4IGNvcHlhYnMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZHFjcGExMjEgY29weWFicyAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3BhMTIyIGNvcHlhYnMgIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcWNwYTEyMyBjb3B5YWJzICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorZHFjcGExMjQgY29weWFicyAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxY3BhMTMxIGNvcHlhYnMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWNwYTEzMiBjb3B5YWJzICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzCitkcWNwYTEzMyBjb3B5YWJzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcGExMzQgY29weWFicyAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NgorCitkcWNwYTEzNSBjb3B5YWJzICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2CitkcWNwYTEzNiBjb3B5YWJzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcGExMzcgY29weWFicyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0MworZHFjcGExMzggY29weWFicyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5TmVnYXRlLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weU5lZ2F0ZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNTNmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weU5lZ2F0ZS5kZWNUZXN0CkBAIC0wLDAgKzEsODggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFDb3B5TmVnYXRlLmRlY1Rlc3QgLS0gcXVpZXQgZGVjUXVhZCBjb3B5IGFuZCBuZWdhdGUgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gU2FuaXR5IGNoZWNrCitkcWNwbjAwMSBjb3B5bmVnYXRlICAgICAgICs3LjUwICAtPiAtNy41MAorCistLSBJbmZpbml0aWVzCitkcWNwbjAxMSBjb3B5bmVnYXRlICBJbmZpbml0eSAgICAtPiAtSW5maW5pdHkKK2RxY3BuMDEyIGNvcHluZWdhdGUgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5CisKKy0tIE5hTnMsIDAgcGF5bG9hZAorZHFjcG4wMjEgY29weW5lZ2F0ZSAgICAgICAgIE5hTiAgLT4gLU5hTgorZHFjcG4wMjIgY29weW5lZ2F0ZSAgICAgICAgLU5hTiAgLT4gTmFOCitkcWNwbjAyMyBjb3B5bmVnYXRlICAgICAgICBzTmFOICAtPiAtc05hTgorZHFjcG4wMjQgY29weW5lZ2F0ZSAgICAgICAtc05hTiAgLT4gc05hTgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkcWNwbjAzMSBjb3B5bmVnYXRlICAgICAgIE5hTjEzICAtPiAtTmFOMTMKK2RxY3BuMDMyIGNvcHluZWdhdGUgICAgICAtTmFOMTMgIC0+IE5hTjEzCitkcWNwbjAzMyBjb3B5bmVnYXRlICAgICAgc05hTjEzICAtPiAtc05hTjEzCitkcWNwbjAzNCBjb3B5bmVnYXRlICAgICAtc05hTjEzICAtPiBzTmFOMTMKK2RxY3BuMDM1IGNvcHluZWdhdGUgICAgICAgTmFONzAgIC0+IC1OYU43MAorZHFjcG4wMzYgY29weW5lZ2F0ZSAgICAgIC1OYU43MCAgLT4gTmFONzAKK2RxY3BuMDM3IGNvcHluZWdhdGUgICAgICBzTmFOMTAxIC0+IC1zTmFOMTAxCitkcWNwbjAzOCBjb3B5bmVnYXRlICAgICAtc05hTjEwMSAtPiBzTmFOMTAxCisKKy0tIGZpbml0ZXMKK2RxY3BuMTAxIGNvcHluZWdhdGUgICAgICAgICAgNyAgIC0+IC03CitkcWNwbjEwMiBjb3B5bmVnYXRlICAgICAgICAgLTcgICAtPiA3CitkcWNwbjEwMyBjb3B5bmVnYXRlICAgICAgICAgNzUgICAtPiAtNzUKK2RxY3BuMTA0IGNvcHluZWdhdGUgICAgICAgIC03NSAgIC0+IDc1CitkcWNwbjEwNSBjb3B5bmVnYXRlICAgICAgIDcuNTAgICAtPiAtNy41MAorZHFjcG4xMDYgY29weW5lZ2F0ZSAgICAgIC03LjUwICAgLT4gNy41MAorZHFjcG4xMDcgY29weW5lZ2F0ZSAgICAgICA3LjUwMCAgLT4gLTcuNTAwCitkcWNwbjEwOCBjb3B5bmVnYXRlICAgICAgLTcuNTAwICAtPiA3LjUwMAorCistLSB6ZXJvcworZHFjcG4xMTEgY29weW5lZ2F0ZSAgICAgICAgICAwICAgLT4gLTAKK2RxY3BuMTEyIGNvcHluZWdhdGUgICAgICAgICAtMCAgIC0+IDAKK2RxY3BuMTEzIGNvcHluZWdhdGUgICAgICAgMEUrNCAgIC0+IC0wRSs0CitkcWNwbjExNCBjb3B5bmVnYXRlICAgICAgLTBFKzQgICAtPiAwRSs0CitkcWNwbjExNSBjb3B5bmVnYXRlICAgICAwLjAwMDAgICAtPiAtMC4wMDAwCitkcWNwbjExNiBjb3B5bmVnYXRlICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2RxY3BuMTE3IGNvcHluZWdhdGUgICAgICAwRS0xNDEgIC0+IC0wRS0xNDEKK2RxY3BuMTE4IGNvcHluZWdhdGUgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZHFjcG4xMjEgY29weW5lZ2F0ZSAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3BuMTIyIGNvcHluZWdhdGUgIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcWNwbjEyMyBjb3B5bmVnYXRlICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorZHFjcG4xMjQgY29weW5lZ2F0ZSAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxY3BuMTMxIGNvcHluZWdhdGUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWNwbjEzMiBjb3B5bmVnYXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzCitkcWNwbjEzMyBjb3B5bmVnYXRlICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcG4xMzQgY29weW5lZ2F0ZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3NgorCitkcWNwbjEzNSBjb3B5bmVnYXRlICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2CitkcWNwbjEzNiBjb3B5bmVnYXRlICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcG4xMzcgY29weW5lZ2F0ZSAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0MworZHFjcG4xMzggY29weW5lZ2F0ZSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5U2lnbi5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlTaWduLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdiNWU2ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5U2lnbi5kZWNUZXN0CkBAIC0wLDAgKzEsMTc1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxQ29weVNpZ24uZGVjVGVzdCAtLSBxdWlldCBkZWNRdWFkIGNvcHkgd2l0aCBzaWduIGZyb20gcmhzICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZHFjcHMwMDEgY29weXNpZ24gICAgICAgKzcuNTAgICAgIDExIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworZHFjcHMwMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIDExIC0+IEluZmluaXR5CitkcWNwczAxMiBjb3B5c2lnbiAgLUluZmluaXR5ICAgICAgMTEgLT4gSW5maW5pdHkKKworLS0gTmFOcywgMCBwYXlsb2FkCitkcWNwczAyMSBjb3B5c2lnbiAgICAgICAgIE5hTiAgICAgMTEgLT4gTmFOCitkcWNwczAyMiBjb3B5c2lnbiAgICAgICAgLU5hTiAgICAgMTEgLT4gTmFOCitkcWNwczAyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgMTEgLT4gc05hTgorZHFjcHMwMjQgY29weXNpZ24gICAgICAgLXNOYU4gICAgIDExIC0+IHNOYU4KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZHFjcHMwMzEgY29weXNpZ24gICAgICAgTmFOMTAgICAgIDExIC0+IE5hTjEwCitkcWNwczAzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgMTEgLT4gTmFOMTAKK2RxY3BzMDMzIGNvcHlzaWduICAgICAgc05hTjEwICAgICAxMSAtPiBzTmFOMTAKK2RxY3BzMDM0IGNvcHlzaWduICAgICAtc05hTjEwICAgICAxMSAtPiBzTmFOMTAKK2RxY3BzMDM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAxMSAtPiBOYU43CitkcWNwczAzNiBjb3B5c2lnbiAgICAgIC1OYU43ICAgICAgMTEgLT4gTmFONworZHFjcHMwMzcgY29weXNpZ24gICAgICBzTmFOMTAxICAgIDExIC0+IHNOYU4xMDEKK2RxY3BzMDM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAxMSAtPiBzTmFOMTAxCisKKy0tIGZpbml0ZXMKK2RxY3BzMTAxIGNvcHlzaWduICAgICAgICAgIDcgICAgICAxMSAtPiA3CitkcWNwczEwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgMTEgLT4gNworZHFjcHMxMDMgY29weXNpZ24gICAgICAgICA3NSAgICAgIDExIC0+IDc1CitkcWNwczEwNCBjb3B5c2lnbiAgICAgICAgLTc1ICAgICAgMTEgLT4gNzUKK2RxY3BzMTA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAxMSAtPiA3LjUwCitkcWNwczEwNiBjb3B5c2lnbiAgICAgIC03LjUwICAgICAgMTEgLT4gNy41MAorZHFjcHMxMDcgY29weXNpZ24gICAgICAgNy41MDAgICAgIDExIC0+IDcuNTAwCitkcWNwczEwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgMTEgLT4gNy41MDAKKworLS0gemVyb3MKK2RxY3BzMTExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAxMSAtPiAwCitkcWNwczExMiBjb3B5c2lnbiAgICAgICAgIC0wICAgICAgMTEgLT4gMAorZHFjcHMxMTMgY29weXNpZ24gICAgICAgMEUrNCAgICAgIDExIC0+IDBFKzQKK2RxY3BzMTE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAxMSAtPiAwRSs0CitkcWNwczExNSBjb3B5c2lnbiAgICAgMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwCitkcWNwczExNiBjb3B5c2lnbiAgICAtMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwCitkcWNwczExNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgMTEgLT4gMEUtMTQxCitkcWNwczExOCBjb3B5c2lnbiAgICAgLTBFLTE0MSAgICAgMTEgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcWNwczEyMSBjb3B5c2lnbiAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgOCAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3BzMTIyIGNvcHlzaWduICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiA4ICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFjcHMxMjMgY29weXNpZ24gICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxIDggIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCitkcWNwczEyNCBjb3B5c2lnbiAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgOCAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxY3BzMTMxIGNvcHlzaWduICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA4IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFjcHMxMzIgY29weXNpZ24gIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggLT4gIDFFLTYxNDMKK2RxY3BzMTMzIGNvcHlzaWduICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyA4IC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFjcHMxMzQgY29weXNpZ24gIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggLT4gIDFFLTYxNzYKKworZHFjcHMxMzUgY29weXNpZ24gIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IC0+ICAxRS02MTc2CitkcWNwczEzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIDggLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcWNwczEzNyBjb3B5c2lnbiAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggLT4gIDFFLTYxNDMKK2RxY3BzMTM4IGNvcHlzaWduICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOCAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKKworLS0gcmVwZWF0IHdpdGggbmVnYXRpdmUgUkhTCisKKy0tIEluZmluaXRpZXMKK2RxY3BzMjExIGNvcHlzaWduICBJbmZpbml0eSAgICAgICAtMzQgLT4gLUluZmluaXR5CitkcWNwczIxMiBjb3B5c2lnbiAgLUluZmluaXR5ICAgICAgLTM0IC0+IC1JbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RxY3BzMjIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAtMzQgLT4gLU5hTgorZHFjcHMyMjIgY29weXNpZ24gICAgICAgIC1OYU4gICAgIC0zNCAtPiAtTmFOCitkcWNwczIyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgLTM0IC0+IC1zTmFOCitkcWNwczIyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgLTM0IC0+IC1zTmFOCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKK2RxY3BzMjMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAtMzQgLT4gLU5hTjEwCitkcWNwczIzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgLTM0IC0+IC1OYU4xMAorZHFjcHMyMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIC0zNCAtPiAtc05hTjEwCitkcWNwczIzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTAKK2RxY3BzMjM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAtMzQgLT4gLU5hTjcKK2RxY3BzMjM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAtMzQgLT4gLU5hTjcKK2RxY3BzMjM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDEKK2RxY3BzMjM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDEKKworLS0gZmluaXRlcworZHFjcHMzMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIC0zNCAtPiAtNworZHFjcHMzMDIgY29weXNpZ24gICAgICAgICAtNyAgICAgIC0zNCAtPiAtNworZHFjcHMzMDMgY29weXNpZ24gICAgICAgICA3NSAgICAgIC0zNCAtPiAtNzUKK2RxY3BzMzA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAtMzQgLT4gLTc1CitkcWNwczMwNSBjb3B5c2lnbiAgICAgICA3LjUwICAgICAgLTM0IC0+IC03LjUwCitkcWNwczMwNiBjb3B5c2lnbiAgICAgIC03LjUwICAgICAgLTM0IC0+IC03LjUwCitkcWNwczMwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgLTM0IC0+IC03LjUwMAorZHFjcHMzMDggY29weXNpZ24gICAgICAtNy41MDAgICAgIC0zNCAtPiAtNy41MDAKKworLS0gemVyb3MKK2RxY3BzMzExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAtMzQgLT4gLTAKK2RxY3BzMzEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAtMzQgLT4gLTAKK2RxY3BzMzEzIGNvcHlzaWduICAgICAgIDBFKzQgICAgICAtMzQgLT4gLTBFKzQKK2RxY3BzMzE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAtMzQgLT4gLTBFKzQKK2RxY3BzMzE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMAorZHFjcHMzMTYgY29weXNpZ24gICAgLTAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwCitkcWNwczMxNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgLTM0IC0+IC0wRS0xNDEKK2RxY3BzMzE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZHFjcHMzMjEgY29weXNpZ24gICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyIC05IC0+IC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcWNwczMyMiBjb3B5c2lnbiAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgLTkgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxY3BzMzIzIGNvcHlzaWduICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAtOSAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorZHFjcHMzMjQgY29weXNpZ24gIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxIC05IC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkcWNwczMzMSBjb3B5c2lnbiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFjcHMzMzIgY29weXNpZ24gIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMUUtNjE0MworZHFjcHMzMzMgY29weXNpZ24gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxY3BzMzM0IGNvcHlzaWduICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTFFLTYxNzYKKworZHFjcHMzMzUgY29weXNpZ24gIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMyAtPiAtMUUtNjE3NgorZHFjcHMzMzYgY29weXNpZ24gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxY3BzMzM3IGNvcHlzaWduICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMgLT4gLTFFLTYxNDMKK2RxY3BzMzM4IGNvcHlzaWduICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTMgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CisKKy0tIE90aGVyIGtpbmRzIG9mIFJIUworZHFjcHM0MDEgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0zNCAtPiAtNzAxCitkcWNwczQwMiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLTM0IC0+IC03MjAKK2RxY3BzNDAzIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtMCAgLT4gLTcwMQorZHFjcHM0MDQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0wICAtPiAtNzIwCitkcWNwczQwNSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgKzAgIC0+ICA3MDEKK2RxY3BzNDA2IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMCAgLT4gIDcyMAorZHFjcHM0MDcgY29weXNpZ24gICAgICAgICAgNzAxICAgICszNCAtPiAgNzAxCitkcWNwczQwOCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgKzM0IC0+ICA3MjAKKworZHFjcHM0MTMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1JbmYgIC0+IC03MDEKK2RxY3BzNDE0IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtSW5mICAtPiAtNzIwCitkcWNwczQxNSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK0luZiAgLT4gIDcwMQorZHFjcHM0MTYgY29weXNpZ24gICAgICAgICAtNzIwICAgICtJbmYgIC0+ICA3MjAKKworZHFjcHM0MjAgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1OYU4gIC0+IC03MDEKK2RxY3BzNDIxIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtTmFOICAtPiAtNzIwCitkcWNwczQyMiBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK05hTiAgLT4gIDcwMQorZHFjcHM0MjMgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU4gIC0+ICA3MjAKK2RxY3BzNDI1IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArTmFOOCAtPiAgNzIwCisKK2RxY3BzNDI2IGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtc05hTiAgLT4gLTcwMQorZHFjcHM0MjcgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1zTmFOICAtPiAtNzIwCitkcWNwczQyOCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK3NOYU4gIC0+ICA3MDEKK2RxY3BzNDI5IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArc05hTiAgLT4gIDcyMAorZHFjcHM0MzAgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOMyAtPiAgNzIwCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFEaXZpZGUuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFEaXZpZGUuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWJiOTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcURpdmlkZS5kZWNUZXN0CkBAIC0wLDAgKzEsODA4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxRGl2aWRlLmRlY1Rlc3QgLS0gZGVjUXVhZCBkaXZpc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFkaXYwMDEgZGl2aWRlICAxICAgICAxICAgIC0+ICAxCitkcWRpdjAwMiBkaXZpZGUgIDIgICAgIDEgICAgLT4gIDIKK2RxZGl2MDAzIGRpdmlkZSAgMSAgICAgMiAgICAtPiAgMC41CitkcWRpdjAwNCBkaXZpZGUgIDIgICAgIDIgICAgLT4gIDEKK2RxZGl2MDA1IGRpdmlkZSAgMCAgICAgMSAgICAtPiAgMAorZHFkaXYwMDYgZGl2aWRlICAwICAgICAyICAgIC0+ICAwCitkcWRpdjAwNyBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MDA4IGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAorZHFkaXYwMDkgZGl2aWRlICAzICAgICAzICAgIC0+ICAxCisKK2RxZGl2MDEwIGRpdmlkZSAgMi40ICAgMSAgICAtPiAgMi40CitkcWRpdjAxMSBkaXZpZGUgIDIuNCAgIC0xICAgLT4gIC0yLjQKK2RxZGl2MDEyIGRpdmlkZSAgLTIuNCAgMSAgICAtPiAgLTIuNAorZHFkaXYwMTMgZGl2aWRlICAtMi40ICAtMSAgIC0+ICAyLjQKK2RxZGl2MDE0IGRpdmlkZSAgMi40MCAgMSAgICAtPiAgMi40MAorZHFkaXYwMTUgZGl2aWRlICAyLjQwMCAxICAgIC0+ICAyLjQwMAorZHFkaXYwMTYgZGl2aWRlICAyLjQgICAyICAgIC0+ICAxLjIKK2RxZGl2MDE3IGRpdmlkZSAgMi40MDAgMiAgICAtPiAgMS4yMDAKK2RxZGl2MDE4IGRpdmlkZSAgMi4gICAgMiAgICAtPiAgMQorZHFkaXYwMTkgZGl2aWRlICAyMCAgICAyMCAgIC0+ICAxCisKK2RxZGl2MDIwIGRpdmlkZSAgMTg3ICAgMTg3ICAgIC0+ICAxCitkcWRpdjAyMSBkaXZpZGUgIDUgICAgIDIgICAgICAtPiAgMi41CitkcWRpdjAyMiBkaXZpZGUgIDUwICAgIDIwICAgICAtPiAgMi41CitkcWRpdjAyMyBkaXZpZGUgIDUwMCAgIDIwMCAgICAtPiAgMi41CitkcWRpdjAyNCBkaXZpZGUgIDUwLjAgIDIwLjAgICAtPiAgMi41CitkcWRpdjAyNSBkaXZpZGUgIDUuMDAgIDIuMDAgICAtPiAgMi41CitkcWRpdjAyNiBkaXZpZGUgIDUgICAgIDIuMCAgICAtPiAgMi41CitkcWRpdjAyNyBkaXZpZGUgIDUgICAgIDIuMDAwICAtPiAgMi41CitkcWRpdjAyOCBkaXZpZGUgIDUgICAgIDAuMjAgICAtPiAgMjUKK2RxZGl2MDI5IGRpdmlkZSAgNSAgICAgMC4yMDAgIC0+ICAyNQorZHFkaXYwMzAgZGl2aWRlICAxMCAgICAxICAgICAgLT4gIDEwCitkcWRpdjAzMSBkaXZpZGUgIDEwMCAgIDEgICAgICAtPiAgMTAwCitkcWRpdjAzMiBkaXZpZGUgIDEwMDAgIDEgICAgICAtPiAgMTAwMAorZHFkaXYwMzMgZGl2aWRlICAxMDAwICAxMDAgICAgLT4gIDEwCisKK2RxZGl2MDM1IGRpdmlkZSAgMSAgICAgMiAgICAgIC0+ICAwLjUKK2RxZGl2MDM2IGRpdmlkZSAgMSAgICAgNCAgICAgIC0+ICAwLjI1CitkcWRpdjAzNyBkaXZpZGUgIDEgICAgIDggICAgICAtPiAgMC4xMjUKK2RxZGl2MDM4IGRpdmlkZSAgMSAgICAgMTYgICAgIC0+ICAwLjA2MjUKK2RxZGl2MDM5IGRpdmlkZSAgMSAgICAgMzIgICAgIC0+ICAwLjAzMTI1CitkcWRpdjA0MCBkaXZpZGUgIDEgICAgIDY0ICAgICAtPiAgMC4wMTU2MjUKK2RxZGl2MDQxIGRpdmlkZSAgMSAgICAtMiAgICAgIC0+ICAtMC41CitkcWRpdjA0MiBkaXZpZGUgIDEgICAgLTQgICAgICAtPiAgLTAuMjUKK2RxZGl2MDQzIGRpdmlkZSAgMSAgICAtOCAgICAgIC0+ICAtMC4xMjUKK2RxZGl2MDQ0IGRpdmlkZSAgMSAgICAtMTYgICAgIC0+ICAtMC4wNjI1CitkcWRpdjA0NSBkaXZpZGUgIDEgICAgLTMyICAgICAtPiAgLTAuMDMxMjUKK2RxZGl2MDQ2IGRpdmlkZSAgMSAgICAtNjQgICAgIC0+ICAtMC4wMTU2MjUKK2RxZGl2MDQ3IGRpdmlkZSAtMSAgICAgMiAgICAgIC0+ICAtMC41CitkcWRpdjA0OCBkaXZpZGUgLTEgICAgIDQgICAgICAtPiAgLTAuMjUKK2RxZGl2MDQ5IGRpdmlkZSAtMSAgICAgOCAgICAgIC0+ICAtMC4xMjUKK2RxZGl2MDUwIGRpdmlkZSAtMSAgICAgMTYgICAgIC0+ICAtMC4wNjI1CitkcWRpdjA1MSBkaXZpZGUgLTEgICAgIDMyICAgICAtPiAgLTAuMDMxMjUKK2RxZGl2MDUyIGRpdmlkZSAtMSAgICAgNjQgICAgIC0+ICAtMC4wMTU2MjUKK2RxZGl2MDUzIGRpdmlkZSAtMSAgICAtMiAgICAgIC0+ICAwLjUKK2RxZGl2MDU0IGRpdmlkZSAtMSAgICAtNCAgICAgIC0+ICAwLjI1CitkcWRpdjA1NSBkaXZpZGUgLTEgICAgLTggICAgICAtPiAgMC4xMjUKK2RxZGl2MDU2IGRpdmlkZSAtMSAgICAtMTYgICAgIC0+ICAwLjA2MjUKK2RxZGl2MDU3IGRpdmlkZSAtMSAgICAtMzIgICAgIC0+ICAwLjAzMTI1CitkcWRpdjA1OCBkaXZpZGUgLTEgICAgLTY0ICAgICAtPiAgMC4wMTU2MjUKKworLS0gYmNkVGltZQorZHFkaXYwNjAgZGl2aWRlICAxIDcgICAgICAgICAgICAgICAgICAgLT4gMC4xNDI4NTcxNDI4NTcxNDI4NTcxNDI4NTcxNDI4NTcxNDI5IEluZXhhY3QgUm91bmRlZAorZHFkaXYwNjEgZGl2aWRlIDEuMjM0NTY3OCAgMS45ODc2NTQzICAgLT4gMC42MjExMTc5NjgwNDkwNzE3MTIzMTkzOTA3NTExOTg1MzU5IEluZXhhY3QgUm91bmRlZAorCistLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RxZGl2MDY3IGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFkaXYwNjggZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxZGl2MDY5IGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxZGl2MDcwIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OTkKK2RxZGl2MDcxIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OQorZHFkaXYwNzIgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTkKK2RxZGl2MDczIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTkKK2RxZGl2MDc0IGRpdmlkZSAgOTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OQorZHFkaXYwNzUgZGl2aWRlICA5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTkKK2RxZGl2MDc2IGRpdmlkZSAgOTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTkKK2RxZGl2MDc3IGRpdmlkZSAgOTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OQorZHFkaXYwNzggZGl2aWRlICA5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTkKK2RxZGl2MDc5IGRpdmlkZSAgOTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTkKK2RxZGl2MDgwIGRpdmlkZSAgOTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OQorZHFkaXYwODEgZGl2aWRlICA5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTkKK2RxZGl2MDgyIGRpdmlkZSAgOTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTkKK2RxZGl2MDgzIGRpdmlkZSAgOTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OQorZHFkaXYwODQgZGl2aWRlICA5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTkKK2RxZGl2MDg1IGRpdmlkZSAgOTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTkKK2RxZGl2MDg2IGRpdmlkZSAgOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOQorCitkcWRpdjA5MCBkaXZpZGUgIDAuICAgICAgICAgICAgMSAgICAtPiAgMAorZHFkaXYwOTEgZGl2aWRlICAuMCAgICAgICAgICAgIDEgICAgLT4gIDAuMAorZHFkaXYwOTIgZGl2aWRlICAwLjAwICAgICAgICAgIDEgICAgLT4gIDAuMDAKK2RxZGl2MDkzIGRpdmlkZSAgMC4wMEUrOSAgICAgICAxICAgIC0+ICAwRSs3CitkcWRpdjA5NCBkaXZpZGUgIDAuMDAwMEUtNTAgICAgMSAgICAtPiAgMEUtNTQKKworZHFkaXYwOTUgZGl2aWRlICAxICAgICAgICAgICAgMUUtOCAgLT4gIDFFKzgKK2RxZGl2MDk2IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTkgIC0+ICAxRSs5CitkcWRpdjA5NyBkaXZpZGUgIDEgICAgICAgICAgICAxRS0xMCAtPiAgMUUrMTAKK2RxZGl2MDk4IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTExIC0+ICAxRSsxMQorZHFkaXYwOTkgZGl2aWRlICAxICAgICAgICAgICAgMUUtMTIgLT4gIDFFKzEyCisKK2RxZGl2MTAwIGRpdmlkZSAgMSAgMSAgIC0+IDEKK2RxZGl2MTAxIGRpdmlkZSAgMSAgMiAgIC0+IDAuNQorZHFkaXYxMDIgZGl2aWRlICAxICAzICAgLT4gMC4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZHFkaXYxMDMgZGl2aWRlICAxICA0ICAgLT4gMC4yNQorZHFkaXYxMDQgZGl2aWRlICAxICA1ICAgLT4gMC4yCitkcWRpdjEwNSBkaXZpZGUgIDEgIDYgICAtPiAwLjE2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEwNiBkaXZpZGUgIDEgIDcgICAtPiAwLjE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0MjkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEwNyBkaXZpZGUgIDEgIDggICAtPiAwLjEyNQorZHFkaXYxMDggZGl2aWRlICAxICA5ICAgLT4gMC4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIEluZXhhY3QgUm91bmRlZAorZHFkaXYxMDkgZGl2aWRlICAxICAxMCAgLT4gMC4xCitkcWRpdjExMCBkaXZpZGUgIDEgIDEgICAtPiAxCitkcWRpdjExMSBkaXZpZGUgIDIgIDEgICAtPiAyCitkcWRpdjExMiBkaXZpZGUgIDMgIDEgICAtPiAzCitkcWRpdjExMyBkaXZpZGUgIDQgIDEgICAtPiA0CitkcWRpdjExNCBkaXZpZGUgIDUgIDEgICAtPiA1CitkcWRpdjExNSBkaXZpZGUgIDYgIDEgICAtPiA2CitkcWRpdjExNiBkaXZpZGUgIDcgIDEgICAtPiA3CitkcWRpdjExNyBkaXZpZGUgIDggIDEgICAtPiA4CitkcWRpdjExOCBkaXZpZGUgIDkgIDEgICAtPiA5CitkcWRpdjExOSBkaXZpZGUgIDEwIDEgICAtPiAxMAorCitkcWRpdjEyMCBkaXZpZGUgIDNFKzEgMC4wMDEgIC0+IDNFKzQKK2RxZGl2MTIxIGRpdmlkZSAgMi4yMDAgMiAgICAgLT4gMS4xMDAKKworZHFkaXYxMzAgZGl2aWRlICAxMjM0NSAgNC45OTkgIC0+IDI0NjkuNDkzODk4Nzc5NzU1OTUxMTkwMjM4MDQ3NjA5NTIyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTMxIGRpdmlkZSAgMTIzNDUgIDQuOTkgICAtPiAyNDczLjk0Nzg5NTc5MTU4MzE2NjMzMjY2NTMzMDY2MTMyMyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEzMiBkaXZpZGUgIDEyMzQ1ICA0LjkgICAgLT4gMjUxOS4zODc3NTUxMDIwNDA4MTYzMjY1MzA2MTIyNDQ4OTggIEluZXhhY3QgUm91bmRlZAorZHFkaXYxMzMgZGl2aWRlICAxMjM0NSAgNSAgICAgIC0+IDI0NjkKK2RxZGl2MTM0IGRpdmlkZSAgMTIzNDUgIDUuMSAgICAtPiAyNDIwLjU4ODIzNTI5NDExNzY0NzA1ODgyMzUyOTQxMTc2NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjEzNSBkaXZpZGUgIDEyMzQ1ICA1LjAxICAgLT4gMjQ2NC4wNzE4NTYyODc0MjUxNDk3MDA1OTg4MDIzOTUyMTAgIEluZXhhY3QgUm91bmRlZAorZHFkaXYxMzYgZGl2aWRlICAxMjM0NSAgNS4wMDEgIC0+IDI0NjguNTA2Mjk4NzQwMjUxOTQ5NjEwMDc3OTg0NDAzMTE5ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdGVzdCBwb3NzaWJseSBpbXByZWNpc2UgcmVzdWx0cworZHFkaXYyMjAgZGl2aWRlIDM5MSAgIDU5NyAtPiAgMC42NTQ5NDEzNzM1MzQzMzgzNTg0NTg5NjE0NzQwMzY4NTA5ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjIxIGRpdmlkZSAzOTEgIC01OTcgLT4gLTAuNjU0OTQxMzczNTM0MzM4MzU4NDU4OTYxNDc0MDM2ODUwOSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIyMiBkaXZpZGUgLTM5MSAgNTk3IC0+IC0wLjY1NDk0MTM3MzUzNDMzODM1ODQ1ODk2MTQ3NDAzNjg1MDkgIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMjMgZGl2aWRlIC0zOTEgLTU5NyAtPiAgMC42NTQ5NDEzNzM1MzQzMzgzNTg0NTg5NjE0NzQwMzY4NTA5ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdGVzdCBzb21lIGNhc2VzIHRoYXQgYXJlIGNsb3NlIHRvIGV4cG9uZW50IG92ZXJmbG93CitkcWRpdjI3MCBkaXZpZGUgMSAxZTYxNDQgICAgICAgICAgICAgICAgICAtPiAxRS02MTQ0ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKK2RxZGl2MjcxIGRpdmlkZSAxIDAuOWU2MTQ0ICAgICAgICAgICAgICAgIC0+IDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFFLTYxNDQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWRpdjI3MiBkaXZpZGUgMSAwLjk5ZTYxNDQgICAgICAgICAgICAgICAtPiAxLjAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxRS02MTQ0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFkaXYyNzMgZGl2aWRlIDEgMC45OTk5OTk5OTk5OTk5OTk5ZTYxNDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMUUtNjE0NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxZGl2Mjc0IGRpdmlkZSA5ZTYxNDQgICAgMSAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQKK2RxZGl2Mjc1IGRpdmlkZSA5LjllNjE0NCAgMSAgICAgICAgICAgICAgIC0+IDkuOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQKK2RxZGl2Mjc2IGRpdmlkZSA5Ljk5ZTYxNDQgMSAgICAgICAgICAgICAgIC0+IDkuOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQKK2RxZGl2Mjc3IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5OWU2MTQ0IDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5MDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQKKworZHFkaXYyNzggZGl2aWRlIDEgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZTYxNDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxZGl2Mjc5IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWU2MTQ0IDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CisKKy0tIERpdmlkZSBpbnRvIDAgdGVzdHMKK2RxZGl2MzAxIGRpdmlkZSAgICAwICAgIDcgICAgIC0+IDAKK2RxZGl2MzAyIGRpdmlkZSAgICAwICAgIDdFLTUgIC0+IDBFKzUKK2RxZGl2MzAzIGRpdmlkZSAgICAwICAgIDdFLTEgIC0+IDBFKzEKK2RxZGl2MzA0IGRpdmlkZSAgICAwICAgIDdFKzEgIC0+IDAuMAorZHFkaXYzMDUgZGl2aWRlICAgIDAgICAgN0UrNSAgLT4gMC4wMDAwMAorZHFkaXYzMDYgZGl2aWRlICAgIDAgICAgN0UrNiAgLT4gMC4wMDAwMDAKK2RxZGl2MzA3IGRpdmlkZSAgICAwICAgIDdFKzcgIC0+IDBFLTcKK2RxZGl2MzA4IGRpdmlkZSAgICAwICAgNzBFLTUgIC0+IDBFKzUKK2RxZGl2MzA5IGRpdmlkZSAgICAwICAgNzBFLTEgIC0+IDBFKzEKK2RxZGl2MzEwIGRpdmlkZSAgICAwICAgNzBFKzAgIC0+IDAKK2RxZGl2MzExIGRpdmlkZSAgICAwICAgNzBFKzEgIC0+IDAuMAorZHFkaXYzMTIgZGl2aWRlICAgIDAgICA3MEUrNSAgLT4gMC4wMDAwMAorZHFkaXYzMTMgZGl2aWRlICAgIDAgICA3MEUrNiAgLT4gMC4wMDAwMDAKK2RxZGl2MzE0IGRpdmlkZSAgICAwICAgNzBFKzcgIC0+IDBFLTcKK2RxZGl2MzE1IGRpdmlkZSAgICAwICA3MDBFLTUgIC0+IDBFKzUKK2RxZGl2MzE2IGRpdmlkZSAgICAwICA3MDBFLTEgIC0+IDBFKzEKK2RxZGl2MzE3IGRpdmlkZSAgICAwICA3MDBFKzAgIC0+IDAKK2RxZGl2MzE4IGRpdmlkZSAgICAwICA3MDBFKzEgIC0+IDAuMAorZHFkaXYzMTkgZGl2aWRlICAgIDAgIDcwMEUrNSAgLT4gMC4wMDAwMAorZHFkaXYzMjAgZGl2aWRlICAgIDAgIDcwMEUrNiAgLT4gMC4wMDAwMDAKK2RxZGl2MzIxIGRpdmlkZSAgICAwICA3MDBFKzcgIC0+IDBFLTcKK2RxZGl2MzIyIGRpdmlkZSAgICAwICA3MDBFKzc3IC0+IDBFLTc3CisKK2RxZGl2MzMxIGRpdmlkZSAwRS0zICAgIDdFLTUgIC0+IDBFKzIKK2RxZGl2MzMyIGRpdmlkZSAwRS0zICAgIDdFLTEgIC0+IDAuMDAKK2RxZGl2MzMzIGRpdmlkZSAwRS0zICAgIDdFKzEgIC0+IDAuMDAwMAorZHFkaXYzMzQgZGl2aWRlIDBFLTMgICAgN0UrNSAgLT4gMEUtOAorZHFkaXYzMzUgZGl2aWRlIDBFLTEgICAgN0UtNSAgLT4gMEUrNAorZHFkaXYzMzYgZGl2aWRlIDBFLTEgICAgN0UtMSAgLT4gMAorZHFkaXYzMzcgZGl2aWRlIDBFLTEgICAgN0UrMSAgLT4gMC4wMAorZHFkaXYzMzggZGl2aWRlIDBFLTEgICAgN0UrNSAgLT4gMC4wMDAwMDAKK2RxZGl2MzM5IGRpdmlkZSAwRSsxICAgIDdFLTUgIC0+IDBFKzYKK2RxZGl2MzQwIGRpdmlkZSAwRSsxICAgIDdFLTEgIC0+IDBFKzIKK2RxZGl2MzQxIGRpdmlkZSAwRSsxICAgIDdFKzEgIC0+IDAKK2RxZGl2MzQyIGRpdmlkZSAwRSsxICAgIDdFKzUgIC0+IDAuMDAwMAorZHFkaXYzNDMgZGl2aWRlIDBFKzMgICAgN0UtNSAgLT4gMEUrOAorZHFkaXYzNDQgZGl2aWRlIDBFKzMgICAgN0UtMSAgLT4gMEUrNAorZHFkaXYzNDUgZGl2aWRlIDBFKzMgICAgN0UrMSAgLT4gMEUrMgorZHFkaXYzNDYgZGl2aWRlIDBFKzMgICAgN0UrNSAgLT4gMC4wMAorCistLSBUaGVzZSB3ZXJlICdpbnB1dCByb3VuZGluZycKK2RxZGl2NDQxIGRpdmlkZSAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwCitkcWRpdjQ0MiBkaXZpZGUgMSAxMjM0NTY3ODAwMCAtPiA4LjEwMDAwMDY2NDIwMDA1NDQ2NDQwNDQ2NjA4MTE2NjIxOUUtMTEgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQ0MyBkaXZpZGUgMTIzNDU2NzgwMCAgMSAtPiAxMjM0NTY3ODAwCitkcWRpdjQ0NCBkaXZpZGUgMSAxMjM0NTY3ODAwICAtPiA4LjEwMDAwMDY2NDIwMDA1NDQ2NDQwNDQ2NjA4MTE2NjIxOUUtMTAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQ0NSBkaXZpZGUgMTIzNDU2Nzg5MCAgMSAtPiAxMjM0NTY3ODkwCitkcWRpdjQ0NiBkaXZpZGUgMSAxMjM0NTY3ODkwICAtPiA4LjEwMDAwMDA3MzcxMDAwMDY3MDc2MTAwNjEwMzkyNTE1NkUtMTAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQ0NyBkaXZpZGUgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxCitkcWRpdjQ0OCBkaXZpZGUgMSAxMjM0NTY3ODkxICAtPiA4LjEwMDAwMDA2NzE0OTAwMDU1NjY2NTIxNDYxNDc1NDYyOUUtMTAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQ0OSBkaXZpZGUgMTIzNDU2Nzg5MDEgMSAtPiAxMjM0NTY3ODkwMQorZHFkaXY0NTAgZGl2aWRlIDEgMTIzNDU2Nzg5MDEgLT4gOC4xMDAwMDAwNzMwNTM5MDA2NTg4NzMxMzAwNDIzNzY3NjBFLTExIEluZXhhY3QgUm91bmRlZAorZHFkaXY0NTEgZGl2aWRlIDEyMzQ1Njc4OTYgIDEgLT4gMTIzNDU2Nzg5NgorZHFkaXY0NTIgZGl2aWRlIDEgMTIzNDU2Nzg5NiAgLT4gOC4xMDAwMDAwMzQzNDQwMDAxNDU2MTg1NjA2MTc0MjI2OTdFLTEwIEluZXhhY3QgUm91bmRlZAorCistLSBoaWdoLWxvd3MKK2RxZGl2NDUzIGRpdmlkZSAxZSsxICAgMSAgICAtPiAgIDFFKzEKK2RxZGl2NDU0IGRpdmlkZSAxZSsxICAgMS4wICAtPiAgIDFFKzEKK2RxZGl2NDU1IGRpdmlkZSAxZSsxICAgMS4wMCAtPiAgIDFFKzEKK2RxZGl2NDU2IGRpdmlkZSAxZSsyICAgMiAgICAtPiAgIDVFKzEKK2RxZGl2NDU3IGRpdmlkZSAxZSsyICAgMi4wICAtPiAgIDVFKzEKK2RxZGl2NDU4IGRpdmlkZSAxZSsyICAgMi4wMCAtPiAgIDVFKzEKKworLS0gc29tZSBmcm9tIElFRUUgZGlzY3Vzc2lvbnMKK2RxZGl2NDYwIGRpdmlkZSAzZTAgICAgICAyZTAgICAgIC0+IDEuNQorZHFkaXY0NjEgZGl2aWRlIDMwZS0xICAgIDJlMCAgICAgLT4gMS41CitkcWRpdjQ2MiBkaXZpZGUgMzAwZS0yICAgMmUwICAgICAtPiAxLjUwCitkcWRpdjQ2NCBkaXZpZGUgMzAwMGUtMyAgMmUwICAgICAtPiAxLjUwMAorZHFkaXY0NjUgZGl2aWRlIDNlMCAgICAgIDIwZS0xICAgLT4gMS41CitkcWRpdjQ2NiBkaXZpZGUgMzBlLTEgICAgMjBlLTEgICAtPiAxLjUKK2RxZGl2NDY3IGRpdmlkZSAzMDBlLTIgICAyMGUtMSAgIC0+IDEuNQorZHFkaXY0NjggZGl2aWRlIDMwMDBlLTMgIDIwZS0xICAgLT4gMS41MAorZHFkaXY0NjkgZGl2aWRlIDNlMCAgICAgIDIwMGUtMiAgLT4gMS41CitkcWRpdjQ3MCBkaXZpZGUgMzBlLTEgICAgMjAwZS0yICAtPiAxLjUKK2RxZGl2NDcxIGRpdmlkZSAzMDBlLTIgICAyMDBlLTIgIC0+IDEuNQorZHFkaXY0NzIgZGl2aWRlIDMwMDBlLTMgIDIwMGUtMiAgLT4gMS41CitkcWRpdjQ3MyBkaXZpZGUgM2UwICAgICAgMjAwMGUtMyAtPiAxLjUKK2RxZGl2NDc0IGRpdmlkZSAzMGUtMSAgICAyMDAwZS0zIC0+IDEuNQorZHFkaXY0NzUgZGl2aWRlIDMwMGUtMiAgIDIwMDBlLTMgLT4gMS41CitkcWRpdjQ3NiBkaXZpZGUgMzAwMGUtMyAgMjAwMGUtMyAtPiAxLjUKKworLS0gc29tZSByZWNpcHJvY2FscworZHFkaXY0ODAgZGl2aWRlIDEgICAgICAgIDEuMEUrMzMgLT4gMUUtMzMKK2RxZGl2NDgxIGRpdmlkZSAxICAgICAgICAxMEUrMzMgIC0+IDFFLTM0CitkcWRpdjQ4MiBkaXZpZGUgMSAgICAgICAgMS4wRS0zMyAtPiAxRSszMworZHFkaXY0ODMgZGl2aWRlIDEgICAgICAgIDEwRS0zMyAgLT4gMUUrMzIKKworLS0gUk1TIGRpc2N1c3Npb24gdGFibGUKK2RxZGl2NDg0IGRpdmlkZSAwZTUgICAgIDFlMyAtPiAgIDBFKzIKK2RxZGl2NDg1IGRpdmlkZSAwZTUgICAgIDJlMyAtPiAgIDBFKzIKK2RxZGl2NDg2IGRpdmlkZSAwZTUgICAgMTBlMiAtPiAgIDBFKzMKK2RxZGl2NDg3IGRpdmlkZSAwZTUgICAgMjBlMiAtPiAgIDBFKzMKK2RxZGl2NDg4IGRpdmlkZSAwZTUgICAxMDBlMSAtPiAgIDBFKzQKK2RxZGl2NDg5IGRpdmlkZSAwZTUgICAyMDBlMSAtPiAgIDBFKzQKKworZHFkaXY0OTEgZGl2aWRlIDFlNSAgICAgMWUzIC0+ICAgMUUrMgorZHFkaXY0OTIgZGl2aWRlIDFlNSAgICAgMmUzIC0+ICAgNUUrMQorZHFkaXY0OTMgZGl2aWRlIDFlNSAgICAxMGUyIC0+ICAgMUUrMgorZHFkaXY0OTQgZGl2aWRlIDFlNSAgICAyMGUyIC0+ICAgNUUrMQorZHFkaXY0OTUgZGl2aWRlIDFlNSAgIDEwMGUxIC0+ICAgMUUrMgorZHFkaXY0OTYgZGl2aWRlIDFlNSAgIDIwMGUxIC0+ICAgNUUrMQorCistLSB0cnl6ZXJvcyBjYXNlcworcm91bmRpbmc6ICAgIGhhbGZfdXAKK2RxZGl2NDk3ICBkaXZpZGUgIDBFKzYxMDggMTAwMEUtMzMgIC0+IDBFKzYxMTEgQ2xhbXBlZAorZHFkaXY0OTggIGRpdmlkZSAgMEUtNjE3MCAxMDAwRSszMyAgLT4gMEUtNjE3NiBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX3VwCisKKy0tIGZvY3VzIG9uIHRyYWlsaW5nIHplcm9zIGlzc3VlcworZHFkaXY1MDAgZGl2aWRlICAxICAgICAgOS45ICAgIC0+ICAwLjEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAgIEluZXhhY3QgUm91bmRlZAorZHFkaXY1MDEgZGl2aWRlICAxICAgICAgOS4wOSAgIC0+ICAwLjExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEgIEluZXhhY3QgUm91bmRlZAorZHFkaXY1MDIgZGl2aWRlICAxICAgICAgOS4wMDkgIC0+ICAwLjExMTAwMDExMTAwMDExMTAwMDExMTAwMDExMTAwMDExMTAgIEluZXhhY3QgUm91bmRlZAorCitkcWRpdjUxMSBkaXZpZGUgMSAgICAgICAgIDIgICAgLT4gMC41CitkcWRpdjUxMiBkaXZpZGUgMS4wICAgICAgIDIgICAgLT4gMC41CitkcWRpdjUxMyBkaXZpZGUgMS4wMCAgICAgIDIgICAgLT4gMC41MAorZHFkaXY1MTQgZGl2aWRlIDEuMDAwICAgICAyICAgIC0+IDAuNTAwCitkcWRpdjUxNSBkaXZpZGUgMS4wMDAwICAgIDIgICAgLT4gMC41MDAwCitkcWRpdjUxNiBkaXZpZGUgMS4wMDAwMCAgIDIgICAgLT4gMC41MDAwMAorZHFkaXY1MTcgZGl2aWRlIDEuMDAwMDAwICAyICAgIC0+IDAuNTAwMDAwCitkcWRpdjUxOCBkaXZpZGUgMS4wMDAwMDAwIDIgICAgLT4gMC41MDAwMDAwCitkcWRpdjUxOSBkaXZpZGUgMS4wMCAgICAgIDIuMDAgLT4gMC41CisKK2RxZGl2NTIxIGRpdmlkZSAyICAgIDEgICAgICAgICAtPiAyCitkcWRpdjUyMiBkaXZpZGUgMiAgICAxLjAgICAgICAgLT4gMgorZHFkaXY1MjMgZGl2aWRlIDIgICAgMS4wMCAgICAgIC0+IDIKK2RxZGl2NTI0IGRpdmlkZSAyICAgIDEuMDAwICAgICAtPiAyCitkcWRpdjUyNSBkaXZpZGUgMiAgICAxLjAwMDAgICAgLT4gMgorZHFkaXY1MjYgZGl2aWRlIDIgICAgMS4wMDAwMCAgIC0+IDIKK2RxZGl2NTI3IGRpdmlkZSAyICAgIDEuMDAwMDAwICAtPiAyCitkcWRpdjUyOCBkaXZpZGUgMiAgICAxLjAwMDAwMDAgLT4gMgorZHFkaXY1MjkgZGl2aWRlIDIuMDAgMS4wMCAgICAgIC0+IDIKKworZHFkaXY1MzAgZGl2aWRlICAyLjQwICAgMiAgICAgIC0+ICAxLjIwCitkcWRpdjUzMSBkaXZpZGUgIDIuNDAgICA0ICAgICAgLT4gIDAuNjAKK2RxZGl2NTMyIGRpdmlkZSAgMi40MCAgMTAgICAgICAtPiAgMC4yNAorZHFkaXY1MzMgZGl2aWRlICAyLjQwICAgMi4wICAgIC0+ICAxLjIKK2RxZGl2NTM0IGRpdmlkZSAgMi40MCAgIDQuMCAgICAtPiAgMC42CitkcWRpdjUzNSBkaXZpZGUgIDIuNDAgIDEwLjAgICAgLT4gIDAuMjQKK2RxZGl2NTM2IGRpdmlkZSAgMi40MCAgIDIuMDAgICAtPiAgMS4yCitkcWRpdjUzNyBkaXZpZGUgIDIuNDAgICA0LjAwICAgLT4gIDAuNgorZHFkaXY1MzggZGl2aWRlICAyLjQwICAxMC4wMCAgIC0+ICAwLjI0CitkcWRpdjUzOSBkaXZpZGUgIDAuOSAgICAwLjEgICAgLT4gIDkKK2RxZGl2NTQwIGRpdmlkZSAgMC45ICAgIDAuMDEgICAtPiAgOUUrMQorZHFkaXY1NDEgZGl2aWRlICAwLjkgICAgMC4wMDEgIC0+ICA5RSsyCitkcWRpdjU0MiBkaXZpZGUgIDUgICAgICAyICAgICAgLT4gIDIuNQorZHFkaXY1NDMgZGl2aWRlICA1ICAgICAgMi4wICAgIC0+ICAyLjUKK2RxZGl2NTQ0IGRpdmlkZSAgNSAgICAgIDIuMDAgICAtPiAgMi41CitkcWRpdjU0NSBkaXZpZGUgIDUgICAgICAyMCAgICAgLT4gIDAuMjUKK2RxZGl2NTQ2IGRpdmlkZSAgNSAgICAgIDIwLjAgICAtPiAgMC4yNQorZHFkaXY1NDcgZGl2aWRlICAyLjQwMCAgMiAgICAgIC0+ICAxLjIwMAorZHFkaXY1NDggZGl2aWRlICAyLjQwMCAgMi4wICAgIC0+ICAxLjIwCitkcWRpdjU0OSBkaXZpZGUgIDIuNDAwICAyLjQwMCAgLT4gIDEKKworZHFkaXY1NTAgZGl2aWRlICAyNDAgICAgMSAgICAgIC0+ICAyNDAKK2RxZGl2NTUxIGRpdmlkZSAgMjQwICAgIDEwICAgICAtPiAgMjQKK2RxZGl2NTUyIGRpdmlkZSAgMjQwICAgIDEwMCAgICAtPiAgMi40CitkcWRpdjU1MyBkaXZpZGUgIDI0MCAgICAxMDAwICAgLT4gIDAuMjQKK2RxZGl2NTU0IGRpdmlkZSAgMjQwMCAgIDEgICAgICAtPiAgMjQwMAorZHFkaXY1NTUgZGl2aWRlICAyNDAwICAgMTAgICAgIC0+ICAyNDAKK2RxZGl2NTU2IGRpdmlkZSAgMjQwMCAgIDEwMCAgICAtPiAgMjQKK2RxZGl2NTU3IGRpdmlkZSAgMjQwMCAgIDEwMDAgICAtPiAgMi40CisKKy0tICt2ZSBleHBvbmVudAorZHFkaXY2MDAgZGl2aWRlICAyLjRFKzkgICAgIDIgIC0+ICAxLjJFKzkKK2RxZGl2NjAxIGRpdmlkZSAgMi40MEUrOSAgICAyICAtPiAgMS4yMEUrOQorZHFkaXY2MDIgZGl2aWRlICAyLjQwMEUrOSAgIDIgIC0+ICAxLjIwMEUrOQorZHFkaXY2MDMgZGl2aWRlICAyLjQwMDBFKzkgIDIgIC0+ICAxLjIwMDBFKzkKK2RxZGl2NjA0IGRpdmlkZSAgMjRFKzggICAgICAyICAtPiAgMS4yRSs5CitkcWRpdjYwNSBkaXZpZGUgIDI0MEUrNyAgICAgMiAgLT4gIDEuMjBFKzkKK2RxZGl2NjA2IGRpdmlkZSAgMjQwMEUrNiAgICAyICAtPiAgMS4yMDBFKzkKK2RxZGl2NjA3IGRpdmlkZSAgMjQwMDBFKzUgICAyICAtPiAgMS4yMDAwRSs5CisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK2RxZGl2NzMxIGRpdmlkZSA1LjAwIDFFLTMgICAgLT4gNS4wMEUrMworZHFkaXY3MzIgZGl2aWRlIDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWRpdjczMyBkaXZpZGUgMDAuMDAgMEUtMyAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZGl2NzM0IGRpdmlkZSAgMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkaXY3MzUgZGl2aWRlIC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWRpdjczNiBkaXZpZGUgLTAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKKworZHFkaXY3NDEgZGl2aWRlICAwICAgIC0xICAgICAtPiAtMAorZHFkaXY3NDIgZGl2aWRlIC0wICAgIC0xICAgICAtPiAgMAorZHFkaXY3NDMgZGl2aWRlICAwICAgICAxICAgICAtPiAgMAorZHFkaXY3NDQgZGl2aWRlIC0wICAgICAxICAgICAtPiAtMAorZHFkaXY3NDUgZGl2aWRlIC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NDYgZGl2aWRlIC0xICAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NDcgZGl2aWRlICAxICAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NDggZGl2aWRlICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWRpdjc1MSBkaXZpZGUgIDAuMCAgLTEgICAgIC0+IC0wLjAKK2RxZGl2NzUyIGRpdmlkZSAtMC4wICAtMSAgICAgLT4gIDAuMAorZHFkaXY3NTMgZGl2aWRlICAwLjAgICAxICAgICAtPiAgMC4wCitkcWRpdjc1NCBkaXZpZGUgLTAuMCAgIDEgICAgIC0+IC0wLjAKK2RxZGl2NzU1IGRpdmlkZSAtMS4wICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2NzU2IGRpdmlkZSAtMS4wICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2NzU3IGRpdmlkZSAgMS4wICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2NzU4IGRpdmlkZSAgMS4wICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZHFkaXY3NjEgZGl2aWRlICAwICAgIC0xLjAgICAtPiAtMEUrMQorZHFkaXY3NjIgZGl2aWRlIC0wICAgIC0xLjAgICAtPiAgMEUrMQorZHFkaXY3NjMgZGl2aWRlICAwICAgICAxLjAgICAtPiAgMEUrMQorZHFkaXY3NjQgZGl2aWRlIC0wICAgICAxLjAgICAtPiAtMEUrMQorZHFkaXY3NjUgZGl2aWRlIC0xICAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NjYgZGl2aWRlIC0xICAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NjcgZGl2aWRlICAxICAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY3NjggZGl2aWRlICAxICAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWRpdjc3MSBkaXZpZGUgIDAuMCAgLTEuMCAgIC0+IC0wCitkcWRpdjc3MiBkaXZpZGUgLTAuMCAgLTEuMCAgIC0+ICAwCitkcWRpdjc3MyBkaXZpZGUgIDAuMCAgIDEuMCAgIC0+ICAwCitkcWRpdjc3NCBkaXZpZGUgLTAuMCAgIDEuMCAgIC0+IC0wCitkcWRpdjc3NSBkaXZpZGUgLTEuMCAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc3NiBkaXZpZGUgLTEuMCAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc3NyBkaXZpZGUgIDEuMCAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjc3OCBkaXZpZGUgIDEuMCAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIFNwZWNpYWxzCitkcWRpdjc4MCBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2NzgxIGRpdmlkZSAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkcWRpdjc4MiBkaXZpZGUgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZHFkaXY3ODMgZGl2aWRlICBJbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RxZGl2Nzg0IGRpdmlkZSAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkcWRpdjc4NSBkaXZpZGUgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZHFkaXY3ODYgZGl2aWRlICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RxZGl2Nzg3IGRpdmlkZSAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY3ODggZGl2aWRlIC0xMDAwICBJbmYgICAtPiAtMEUtNjE3NiBDbGFtcGVkCitkcWRpdjc4OSBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2NzkwIGRpdmlkZSAtMSAgICAgSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZAorZHFkaXY3OTEgZGl2aWRlIC0wICAgICBJbmYgICAtPiAtMEUtNjE3NiBDbGFtcGVkCitkcWRpdjc5MiBkaXZpZGUgIDAgICAgIEluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQKK2RxZGl2NzkzIGRpdmlkZSAgMSAgICAgSW5mICAgLT4gIDBFLTYxNzYgQ2xhbXBlZAorZHFkaXY3OTQgZGl2aWRlICAxMDAwICBJbmYgICAtPiAgMEUtNjE3NiBDbGFtcGVkCitkcWRpdjc5NSBkaXZpZGUgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFkaXY4MDAgZGl2aWRlIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjgwMSBkaXZpZGUgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZHFkaXY4MDIgZGl2aWRlIC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RxZGl2ODAzIGRpdmlkZSAtSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkcWRpdjgwNCBkaXZpZGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZHFkaXY4MDUgZGl2aWRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2RxZGl2ODA2IGRpdmlkZSAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitkcWRpdjgwNyBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODA4IGRpdmlkZSAtMTAwMCAgSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZAorZHFkaXY4MDkgZGl2aWRlIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjgxMCBkaXZpZGUgLTEgICAgLUluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQKK2RxZGl2ODExIGRpdmlkZSAtMCAgICAtSW5mICAgLT4gIDBFLTYxNzYgQ2xhbXBlZAorZHFkaXY4MTIgZGl2aWRlICAwICAgIC1JbmYgICAtPiAtMEUtNjE3NiBDbGFtcGVkCitkcWRpdjgxMyBkaXZpZGUgIDEgICAgLUluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQKK2RxZGl2ODE0IGRpdmlkZSAgMTAwMCAtSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZAorZHFkaXY4MTUgZGl2aWRlICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxZGl2ODIxIGRpdmlkZSAgTmFOIC1JbmYgICAgLT4gIE5hTgorZHFkaXY4MjIgZGl2aWRlICBOYU4gLTEwMDAgICAtPiAgTmFOCitkcWRpdjgyMyBkaXZpZGUgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RxZGl2ODI0IGRpdmlkZSAgTmFOIC0wICAgICAgLT4gIE5hTgorZHFkaXY4MjUgZGl2aWRlICBOYU4gIDAgICAgICAtPiAgTmFOCitkcWRpdjgyNiBkaXZpZGUgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RxZGl2ODI3IGRpdmlkZSAgTmFOICAxMDAwICAgLT4gIE5hTgorZHFkaXY4MjggZGl2aWRlICBOYU4gIEluZiAgICAtPiAgTmFOCitkcWRpdjgyOSBkaXZpZGUgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxZGl2ODMwIGRpdmlkZSAtSW5mICBOYU4gICAgLT4gIE5hTgorZHFkaXY4MzEgZGl2aWRlIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkcWRpdjgzMiBkaXZpZGUgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RxZGl2ODMzIGRpdmlkZSAtMCAgICBOYU4gICAgLT4gIE5hTgorZHFkaXY4MzQgZGl2aWRlICAwICAgIE5hTiAgICAtPiAgTmFOCitkcWRpdjgzNSBkaXZpZGUgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RxZGl2ODM2IGRpdmlkZSAgMTAwMCBOYU4gICAgLT4gIE5hTgorZHFkaXY4MzcgZGl2aWRlICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2RxZGl2ODQxIGRpdmlkZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQyIGRpdmlkZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQzIGRpdmlkZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQ0IGRpdmlkZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQ1IGRpdmlkZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQ2IGRpdmlkZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQ3IGRpdmlkZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQ4IGRpdmlkZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODQ5IGRpdmlkZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODUwIGRpdmlkZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODUxIGRpdmlkZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODUyIGRpdmlkZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODUzIGRpdmlkZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODU0IGRpdmlkZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODU1IGRpdmlkZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODU2IGRpdmlkZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODU3IGRpdmlkZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODU4IGRpdmlkZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODU5IGRpdmlkZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFkaXY4NjEgZGl2aWRlICBOYU45IC1JbmYgICAtPiAgTmFOOQorZHFkaXY4NjIgZGl2aWRlICBOYU44ICAxMDAwICAtPiAgTmFOOAorZHFkaXY4NjMgZGl2aWRlICBOYU43ICBJbmYgICAtPiAgTmFONworZHFkaXY4NjQgZGl2aWRlICBOYU42ICBOYU41ICAtPiAgTmFONgorZHFkaXY4NjUgZGl2aWRlIC1JbmYgICBOYU40ICAtPiAgTmFONAorZHFkaXY4NjYgZGl2aWRlIC0xMDAwICBOYU4zICAtPiAgTmFOMworZHFkaXY4NjcgZGl2aWRlICBJbmYgICBOYU4yICAtPiAgTmFOMgorCitkcWRpdjg3MSBkaXZpZGUgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NzIgZGl2aWRlICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODczIGRpdmlkZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg3NCBkaXZpZGUgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NzUgZGl2aWRlICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODc2IGRpdmlkZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg3NyBkaXZpZGUgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4NzggZGl2aWRlICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODc5IGRpdmlkZSAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK2RxZGl2ODgxIGRpdmlkZSAgLU5hTjkgIC1JbmYgICAtPiAgLU5hTjkKK2RxZGl2ODgyIGRpdmlkZSAgLU5hTjggICAxMDAwICAtPiAgLU5hTjgKK2RxZGl2ODgzIGRpdmlkZSAgLU5hTjcgICBJbmYgICAtPiAgLU5hTjcKK2RxZGl2ODg0IGRpdmlkZSAgLU5hTjYgIC1OYU41ICAtPiAgLU5hTjYKK2RxZGl2ODg1IGRpdmlkZSAgLUluZiAgIC1OYU40ICAtPiAgLU5hTjQKK2RxZGl2ODg2IGRpdmlkZSAgLTEwMDAgIC1OYU4zICAtPiAgLU5hTjMKK2RxZGl2ODg3IGRpdmlkZSAgIEluZiAgIC1OYU4yICAtPiAgLU5hTjIKKworZHFkaXY4OTEgZGl2aWRlIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODkyIGRpdmlkZSAtc05hTjk4IC0xICAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg5MyBkaXZpZGUgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4OTQgZGl2aWRlIC1zTmFOOTYgLXNOYU45NCAtPiAtTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODk1IGRpdmlkZSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg5NiBkaXZpZGUgLUluZiAgICAtc05hTjkyIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY4OTcgZGl2aWRlICAwICAgICAgLXNOYU45MSAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RxZGl2ODk4IGRpdmlkZSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcWRpdjg5OSBkaXZpZGUgLU5hTiAgICAtc05hTjg5IC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBWYXJpb3VzIGZsYXZvdXJzIG9mIGRpdmlkZSBieSAwCitkcWRpdjkwMSBkaXZpZGUgICAgMCAgICAgICAwICAgLT4gIE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZGl2OTAyIGRpdmlkZSAgICAwLjBFNSAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkaXY5MDMgZGl2aWRlICAgIDAuMDAwICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWRpdjkwNCBkaXZpZGUgICAgMC4wMDAxICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTA1IGRpdmlkZSAgICAwLjAxICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MDYgZGl2aWRlICAgIDAuMSAgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkwNyBkaXZpZGUgICAgMSAgICAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTA4IGRpdmlkZSAgICAxICAgICAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MDkgZGl2aWRlICAgMTAgICAgICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkxMCBkaXZpZGUgICAxRSsxMDAgICAwLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTExIGRpdmlkZSAgIDFFKzEwMCAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWRpdjkyMSBkaXZpZGUgICAtMC4wMDAxICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTIyIGRpdmlkZSAgIC0wLjAxICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MjMgZGl2aWRlICAgLTAuMSAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkyNCBkaXZpZGUgICAtMSAgICAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTI1IGRpdmlkZSAgIC0xICAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MjYgZGl2aWRlICAtMTAgICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkyNyBkaXZpZGUgIC0xRSsxMDAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTI4IGRpdmlkZSAgLTFFKzEwMCAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWRpdjkzMSBkaXZpZGUgICAgMC4wMDAxIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTMyIGRpdmlkZSAgICAwLjAxICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MzMgZGl2aWRlICAgIDAuMSAgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkzNCBkaXZpZGUgICAgMSAgICAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTM1IGRpdmlkZSAgICAxICAgICAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5MzYgZGl2aWRlICAgMTAgICAgICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjkzNyBkaXZpZGUgICAxRSsxMDAgIC0wLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTM4IGRpdmlkZSAgIDFFKzEwMCAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWRpdjk0MSBkaXZpZGUgICAtMC4wMDAxIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTQyIGRpdmlkZSAgIC0wLjAxICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5NDMgZGl2aWRlICAgLTAuMSAgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjk0NCBkaXZpZGUgICAtMSAgICAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTQ1IGRpdmlkZSAgIC0xICAgICAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkaXY5NDYgZGl2aWRlICAtMTAgICAgICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWRpdjk0NyBkaXZpZGUgIC0xRSsxMDAgIC0wLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZGl2OTQ4IGRpdmlkZSAgLTFFKzEwMCAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK2RxZGl2MTAyMSAgZGl2aWRlIDFFMCAgICAgICAgICAxRTAgLT4gMQorZHFkaXYxMDIyICBkaXZpZGUgMUUwICAgICAgICAgIDJFMCAtPiAwLjUKK2RxZGl2MTAyMyAgZGl2aWRlIDFFMCAgICAgICAgICAzRTAgLT4gMC4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorZHFkaXYxMDI0ICBkaXZpZGUgMTAwRS0yICAgMTAwMEUtMyAtPiAxCitkcWRpdjEwMjUgIGRpdmlkZSAyNEUtMSAgICAgICAgMkUwIC0+IDEuMgorZHFkaXYxMDI2ICBkaXZpZGUgMjQwMEUtMyAgICAgIDJFMCAtPiAxLjIwMAorZHFkaXYxMDI3ICBkaXZpZGUgNUUwICAgICAgICAgIDJFMCAtPiAyLjUKK2RxZGl2MTAyOCAgZGl2aWRlIDVFMCAgICAgICAgMjBFLTEgLT4gMi41CitkcWRpdjEwMjkgIGRpdmlkZSA1RTAgICAgICAyMDAwRS0zIC0+IDIuNQorZHFkaXYxMDMwICBkaXZpZGUgNUUwICAgICAgICAgMkUtMSAtPiAyNQorZHFkaXYxMDMxICBkaXZpZGUgNUUwICAgICAgICAyMEUtMiAtPiAyNQorZHFkaXYxMDMyICBkaXZpZGUgNDgwRS0yICAgICAgIDNFMCAtPiAxLjYwCitkcWRpdjEwMzMgIGRpdmlkZSA0N0UtMSAgICAgICAgMkUwIC0+IDIuMzUKKworLS0gRUNNQVNjcmlwdCBiYWQgZXhhbXBsZXMKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KK2RxZGl2MTA0MCAgZGl2aWRlIDUgOSAgLT4gMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorZHFkaXYxMDQxICBkaXZpZGUgNiAxMSAtPiAwLjU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTUgSW5leGFjdCBSb3VuZGVkCisKKy0tIEd5dXJpcyBleGFtcGxlCitkcWRpdjEwNTAgIGRpdmlkZSA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0MyA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4OTAwMEUtNjE0MyAtPiAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTEyNTQgSW5leGFjdCBSb3VuZGVkCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cworLS0gc2lnbnMKK2RxZGl2MTc1MSBkaXZpZGUgIDFlKzQyNzcgIDFlLTMzMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzUyIGRpdmlkZSAgMWUrNDI3NyAtMWUtMzMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE3NTMgZGl2aWRlIC0xZSs0Mjc3ICAxZS0zMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTc1NCBkaXZpZGUgLTFlKzQyNzcgLTFlLTMzMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFkaXYxNzU1IGRpdmlkZSAgMWUtNDI3NyAgMWUrMzMxMSAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWRpdjE3NTYgZGl2aWRlICAxZS00Mjc3IC0xZSszMzExIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTc1NyBkaXZpZGUgLTFlLTQyNzcgIDFlKzMzMTEgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFkaXYxNzU4IGRpdmlkZSAtMWUtNDI3NyAtMWUrMzMxMSAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorZHFkaXYxNzYwIGRpdmlkZSAxZS02MDY5IDFlKzEwMSAtPiAxRS02MTcwIFN1Ym5vcm1hbAorZHFkaXYxNzYxIGRpdmlkZSAxZS02MDY5IDFlKzEwMiAtPiAxRS02MTcxIFN1Ym5vcm1hbAorZHFkaXYxNzYyIGRpdmlkZSAxZS02MDY5IDFlKzEwMyAtPiAxRS02MTcyIFN1Ym5vcm1hbAorZHFkaXYxNzYzIGRpdmlkZSAxZS02MDY5IDFlKzEwNCAtPiAxRS02MTczIFN1Ym5vcm1hbAorZHFkaXYxNzY0IGRpdmlkZSAxZS02MDY5IDFlKzEwNSAtPiAxRS02MTc0IFN1Ym5vcm1hbAorZHFkaXYxNzY1IGRpdmlkZSAxZS02MDY5IDFlKzEwNiAtPiAxRS02MTc1IFN1Ym5vcm1hbAorZHFkaXYxNzY2IGRpdmlkZSAxZS02MDY5IDFlKzEwNyAtPiAxRS02MTc2IFN1Ym5vcm1hbAorZHFkaXYxNzY3IGRpdmlkZSAxZS02MDY5IDFlKzEwOCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTc2OCBkaXZpZGUgMWUtNjA2OSAxZSsxMDkgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWRpdjE3NjkgZGl2aWRlIDFlLTYwNjkgMWUrMTEwIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQorZHFkaXYxNzcwIGRpdmlkZSAxZSs0MCAxZS02MTAxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQxIENsYW1wZWQKK2RxZGl2MTc3MSBkaXZpZGUgMWUrNDAgMWUtNjEwMiAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDIgIENsYW1wZWQKK2RxZGl2MTc3MiBkaXZpZGUgMWUrNDAgMWUtNjEwMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzICBDbGFtcGVkCitkcWRpdjE3NzMgZGl2aWRlIDFlKzQwIDFlLTYxMDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgIENsYW1wZWQKK2RxZGl2MTc3NCBkaXZpZGUgMWUrNDAgMWUtNjEwNSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTc3NSBkaXZpZGUgMWUrNDAgMWUtNjEwNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTc3NiBkaXZpZGUgMWUrNDAgMWUtNjEwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTc3NyBkaXZpZGUgMWUrNDAgMWUtNjEwOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTc3OCBkaXZpZGUgMWUrNDAgMWUtNjEwOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTc3OSBkaXZpZGUgMWUrNDAgMWUtNjExMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworZHFkaXYxODAxIGRpdmlkZSAgMS4wMDAwRS02MTcyICAxICAgICAtPiAxLjAwMDBFLTYxNzIgU3Vibm9ybWFsCitkcWRpdjE4MDIgZGl2aWRlICAxLjAwMEUtNjE3MiAgIDFlKzEgIC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwKK2RxZGl2MTgwMyBkaXZpZGUgIDEuMDBFLTYxNzIgICAgMWUrMiAgLT4gMS4wMEUtNjE3NCAgIFN1Ym5vcm1hbAorZHFkaXYxODA0IGRpdmlkZSAgMS4wRS02MTcyICAgICAxZSszICAtPiAxLjBFLTYxNzUgICAgU3Vibm9ybWFsCitkcWRpdjE4MDUgZGl2aWRlICAxLjBFLTYxNzIgICAgIDFlKzQgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkcWRpdjE4MDYgZGl2aWRlICAxLjNFLTYxNzIgICAgIDFlKzQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MDcgZGl2aWRlICAxLjVFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MDggZGl2aWRlICAxLjdFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MDkgZGl2aWRlICAyLjNFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTAgZGl2aWRlICAyLjVFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTEgZGl2aWRlICAyLjdFLTYxNzIgICAgIDFlKzQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTIgZGl2aWRlICAxLjQ5RS02MTcyICAgIDFlKzQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTMgZGl2aWRlICAxLjUwRS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTQgZGl2aWRlICAxLjUxRS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTUgZGl2aWRlICAyLjQ5RS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTYgZGl2aWRlICAyLjUwRS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWRpdjE4MTcgZGl2aWRlICAyLjUxRS02MTcyICAgIDFlKzQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxZGl2MTgxOCBkaXZpZGUgIDFFLTYxNzIgICAgICAgMWUrNCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsCitkcWRpdjE4MTkgZGl2aWRlICAzRS02MTcyICAgICAgIDFlKzUgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTgyMCBkaXZpZGUgIDVFLTYxNzIgICAgICAgMWUrNSAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFkaXYxODIxIGRpdmlkZSAgN0UtNjE3MiAgICAgICAxZSs1ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFkaXYxODIyIGRpdmlkZSAgOUUtNjE3MiAgICAgICAxZSs1ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFkaXYxODIzIGRpdmlkZSAgOS45RS02MTcyICAgICAxZSs1ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkcWRpdjE4MjQgZGl2aWRlICAxRS02MTcyICAgICAgLTFlKzQgIC0+IC0xRS02MTc2ICAgIFN1Ym5vcm1hbAorZHFkaXYxODI1IGRpdmlkZSAgM0UtNjE3MiAgICAgIC0xZSs1ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWRpdjE4MjYgZGl2aWRlIC01RS02MTcyICAgICAgIDFlKzUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTgyNyBkaXZpZGUgIDdFLTYxNzIgICAgICAtMWUrNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgyOCBkaXZpZGUgLTlFLTYxNzIgICAgICAgMWUrNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgyOSBkaXZpZGUgIDkuOUUtNjE3MiAgICAtMWUrNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MTgzMCBkaXZpZGUgIDMuMEUtNjE3MiAgICAtMWUrNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkcWRpdjE4MzEgZGl2aWRlICAxLjBFLTU5NzcgICAgIDFlKzIwMCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZGl2MTgzMiBkaXZpZGUgIDEuMEUtNTk3NyAgICAgMWUrMTk5IC0+IDFFLTYxNzYgICBTdWJub3JtYWwgUm91bmRlZAorZHFkaXYxODMzIGRpdmlkZSAgMS4wRS01OTc3ICAgICAxZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAorZHFkaXYxODM0IGRpdmlkZSAgMi4wRS01OTc3ICAgICAyZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAorZHFkaXYxODM1IGRpdmlkZSAgNC4wRS01OTc3ICAgICA0ZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAorZHFkaXYxODM2IGRpdmlkZSAxMC4wRS01OTc3ICAgIDEwZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAorZHFkaXYxODM3IGRpdmlkZSAzMC4wRS01OTc3ICAgIDMwZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAorZHFkaXYxODM4IGRpdmlkZSA0MC4wRS01OTgyICAgIDQwZSsxNjYgLT4gMS4wRS02MTQ4IFN1Ym5vcm1hbAorZHFkaXYxODM5IGRpdmlkZSA0MC4wRS01OTgyICAgIDQwZSsxNjUgLT4gMS4wRS02MTQ3IFN1Ym5vcm1hbAorZHFkaXYxODQwIGRpdmlkZSA0MC4wRS01OTgyICAgIDQwZSsxNjQgLT4gMS4wRS02MTQ2IFN1Ym5vcm1hbAorCistLSByYW5kb21zCityb3VuZGluZzogIGhhbGZfZXZlbgorZHFkaXYyMDEwICBkaXZpZGUgIC01MjMxMTk1NjUyOTMxNjUxOTY4MDM0MzU2MTE3MTE4ODUwICAgICAgICAgLTcyNDM3MTg2NjQ0MjI1NDg1NzMyMDMyNjA5NzAuMzQ5OTUgICAgICAgICAgLT4gICA3MjIxNjkuOTA5NTgzMTI4NDYyNDczNjA1MTQ2MDU1MDY4MCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxMSAgZGl2aWRlICAtODk1ODQ2Njk3NzM5MjcuODI3MTEyMzczNTAwMjI1MTUzNTIgICAgICAgIC00MjA3Nzk0MzcyODUyOTYzNTg4NC4yMTE0MjYyNzUzMjk4NSAgICAgICAgIC0+ICAgMC4wMDAwMDIxMjkwMTcyOTExNDY0NzE1NjU5MjgxMjU4ODc1MjcyNjYgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMTIgIGRpdmlkZSAgLTIuODI4MjAxNjkzMzYwNzIzMjAzODA2OTc0ODkxOTQ2MTgwRS0yMzIgICAgODEyNTk2NTQxMjIxODIzOTYwMzg2Mzg0NDAzMDg5MjQwLjkgICAgICAgICAtPiAgLTMuNDgwNDUwMDc1NjQwNTIxMzIwMDQwMDU1NzU5MTI1MTIwRS0yNjUgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMTMgIGRpdmlkZSAgLTY0NDI3NzUzNzI3NjEwNjkyNjc1MDI5Mzc1Mzk0MDg3MjAgICAgICAgICAgMjQ5MDQwODUwNTYuNjkxODU0NjUxNDUxODI2MDYwODkxOTYgICAgICAgICAtPiAgLTI1ODcwMzU1NjM4ODIyNjQ2MzY4NzcwMS40ODg0NzE5NTg5IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDE0ICBkaXZpZGUgICA1LjUzNTUyMDAxMTI3MjYyNTYyOTYxMDA3OTg3OTcxNDcwNSAgICAgICAgLTQ0MzQzNjY0NjUwLjU3MjAzMDUyMDAzMDY4MTEzNTMxMjA4ICAgICAgICAgLT4gIC0xLjI0ODMyMjYzMDcyODA4OTMwODk3NTk0MDUzMzQ5MzU2MkUtMTAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMTUgIGRpdmlkZSAgIDY1OTE5MjczNzEyNTE3ODY1OTY0MzI1Ljk5NDE5NjI1MDEwICAgICAgICAtMzE0NzMzMzU0MTQxMzgxNzM3Mzc4NjIyNTE1Ljc3ODkwNTQgICAgICAgICAtPiAgLTAuMDAwMjA5NDQ0ODI5NTUyMTQ5MDYxNjM3OTc4NDc1ODkxMTYzMiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxNiAgZGl2aWRlICAtNy43NzkxNzI1NjgxOTMxOTcxMDcxMTUyNzUxNDA0MzExMjlFKzc1OSAgIC0xNDA0NTMwMTU2MzkuMzk4ODk4NzY1Mjg5NTE3ODc4MjE0MyAgICAgICAgIC0+ICAgNS41Mzg2Mjk3OTIxNjE2NDE1MzQ5NjI3NzQyNDQyMzgxMTVFKzc0OCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxNyAgZGl2aWRlICAgNjQ0MzE0ODMyNTk3NTY5LjAxODEyMjYwNjc1MTgxNzg3OTcgICAgICAgIC0xMTUwMjQ1ODUyNTc0MjUuMTYzNTc1OTUyMTU2NTIwMTA3NSAgICAgICAgIC0+ICAtNS42MDE1NDAxNTAzNTY0NzkyNTczNjc2ODc0NTA5MjI3OTUgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMTggIGRpdmlkZSAgIDYuODk4NjQwOTQxNTc5NjExNDUwNjc2NTkyNTUzMjg2ODcwRS00NyAgICAtMTEyNzI0Mjk4ODE0MDc4NTE0ODUxNjM5MTQ5OTkuMjU5NDMgICAgICAgICAtPiAgLTYuMTE5OTIzNTc4Mjg1MzM4Njg5MzcxMTM3NjQ4MzE5MjgwRS03NSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAxOSAgZGl2aWRlICAtMzU5MTM0NDU0NDg4ODcyNzEzMy4zMDgxOTc1MDE2MzI1NCAgICAgICAgICA1MzI5Mzk1LjQyMzc5Mjc5NTY2MTQ0NjU2MTA5MDMzMTAzNyAgICAgICAgIC0+ICAtNjczODc0NjYyOTQxLjE5Njg1MjU1ODk0NjA1MzM3MjUyOTAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMjAgIGRpdmlkZSAgLTcuNjgyMzU2NzgxMzg0NjMxMzEzMTU2NDYyNzI0NDI1ODM4RSs3NDcgICAtNi42MDM3NTg1NTUxMjIxOTA1NzI4MTkyMjE0MTgwOTk0MEUrNzAzICAgICAtPiAgIDEuMTYzMzMwOTYwMjc5NTU2MDE2Njc4Mzc5MTI4ODc1MTQ5RSs0NCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyMSAgZGl2aWRlICAtNDUxMTQ5NTU5NjU5Njk0MTgyMDg2MzIyNC4yNzQ2Nzk2OTkgICAgICAgICAzMzY1Mzk1MDE3LjI2MzMyOTc5NTQ0OTY2MTYxNjA5MDcyNCAgICAgICAgIC0+ICAtMTM0MDU1NDU0ODExNTMwNC45MDQxNjY4ODgwMTgzNDYyOTkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMjIgIGRpdmlkZSAgIDUuMjExMTY0MTI3ODQwOTMxNTE3MjYzNjM5NjA4MTUxMjk5ICAgICAgICAgMTY0LjU1NjYzODEzNTYyNzY1NjcwMTI1MzM4NDcwMDY0NTMgICAgICAgICAtPiAgIDAuMDMxNjY3OTA1ODc2NTUyMjg4NjQ0NzgyNjAxNTcxNTY1MTAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMjMgIGRpdmlkZSAgLTQ5ODkxLjIyNDM4OTM0NTg4MzAzODQwNzc2ODQ2MjAzODMgICAgICAgICAtNDcxNzkuOTMxMjk2MTg2MDc0NzU1NDA1MzM3MTE3MTUzMCAgICAgICAgICAtPiAgIDEuMDU3NDY3MDg0Mzg2NzY3MjkxNjAyMTg5NjU2NDMwMjY4IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDI0ICBkaXZpZGUgICAxNTA2NTQ3Ny40NzIxNDI2ODQ4ODA3NzQxNTQ2MjQxMzM1MyAgICAgICAgIDQzNjYyMTEuMTIwODkyOTUzMjYxMzA5NTI5NzQwNTUyNTk2ICAgICAgICAgLT4gICAzLjQ1MDQ2OTMwOTY2MTIyNzk4NDI0NDU0NTUxMzQ0MTM1OSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyNSAgZGl2aWRlICAgMS41NzU2NzAyNjk0NDA3NjE4NDYxMDk2MDI0Mjk2MTI2NDRFKzM3MCAgICA2NTMxOTk2NDkzMjQ3NDAzMDAuMDA2MTg1NDgyNjQzNDM5ICAgICAgICAgIC0+ICAgMi40MTIyMzM3OTU3MDAzNTkxNzA5MDQ1ODg1NDgwNDE0ODFFKzM1MiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyNiAgZGl2aWRlICAtMjExMjQyMjMxMTczMzQ0ODkyNDU3MzQzMjE5Mi42MjAxNDUgICAgICAgIC04MDA2NzIwNi4wMzU5MDY5MzE1Mzg0ODIxNTg0ODYxMzQwNiAgICAgICAgIC0+ICAgMjYzODMxMTUwODk0MTc2NjAxNzUuMjAxMDI2NDY3NTY1NzQgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMjcgIGRpdmlkZSAgLTY3MDk2NTM2MDUxMjc5ODA5LjMyMjE4NjExNTQ4NzIxODM5ICAgICAgICAtODY5Njg1NDEyODgxOTQxMDgxNjY0MjUxOTkwMTgxLjEwNDkgICAgICAgICAtPiAgIDcuNzE1MDM1MjM2NTg0ODA1OTIxMjc4NTY2MzY1MjMxMTY4RS0xNCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAyOCAgZGl2aWRlICAtNTg2MTI5MDg1NDg5NjIwNDcuMjE4NjY5MTM0MjU0ODg5NzIgICAgICAgIC05Nzg0NDk1OTc1MzEuMzg3MzY2NTU4MzQ3NTYzMzgzMTY0NCAgICAgICAgIC0+ICAgNTk5MDMuODYwODU5OTE3MDMwOTEyMzY1MDc4NTk4MzcwMjMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMjkgIGRpdmlkZSAgLTEzMzAzMjQxMjAxMDk0Mi4xNDc2ODY0MTM4MjEzMzE5Nzk2ICAgICAgICAtNy44ODIwNTkyOTM0OTg2NzA3MDU0NDY1Mjg2NDgyMDEzNTlFLTQyOCAgICAtPiAgIDEuNjg3Nzg3NTA2NTA0NDMzMDY0NTQ5NTE1NjgxNjkzNzE1RSs0NDEgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzAgIGRpdmlkZSAgIDEuODM3NDY2OTgzMzg5NjYwMjk0OTIyOTk3MTYzNjA1MTNFKzk3NyAgICAtOS44OTc5MjY2MDg5Nzk2NDk5NTE2NzI4Mzk4NzkxMjg2MDNFKzE1NCAgICAtPiAgLTEuODU2NDE2MDUxNTQyMjEyNTUyMDQyMzkwMjE4MDYyNDU4RSs4MjIgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzEgIGRpdmlkZSAgLTExMzc0MjQ3NTg0MTM5OTIzNjMwNzEyODk2Mi4xNTA3MDYzICAgICAgICAgODI5ODYwMi4yMDMwNDk4MzQ3MzI2NTc1Njc5NjUyNjI5ODkgICAgICAgICAtPiAgLTEzNzA2MjIxMDA2NjY1MTM3ODI2LjE2NTU3MzkzOTE5OTI5IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDMyICBkaXZpZGUgICAxOTYuNDc4NzU3NDY1MDc1NDE1Mjk5NTk0MTgwODMzMTg2MiAgICAgICAgIDkyOS42NTUzMzg4NDcyMzE4MDk0NDI3NDIyMTE3MTcyMzk0ICAgICAgICAgLT4gICAwLjIxMTM0NTgwNjYxNzY1MjY2NTEwMDY5MTc5MjI4MTQwMTggSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzMgIGRpdmlkZSAgIDcxOTMxMjIxNDY1LjQzODY3OTk2MjgyODAzNjI4MTMwMzUwICAgICAgICAgMzgzODY4NTkzNDIwNjQyNjI1NzA5MDcxOC40MDIyNDg4NTMgICAgICAgICAtPiAgIDEuODczODUwMTMyNTI3NDIzNDEzNjA3MTk5NTEzMzI0MDIxRS0xNCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzNCAgZGl2aWRlICAgNDg4LjQyODI1MDIyODk2NTE2NTM3ODM1OTYyNDYzMTI4ODUgICAgICAgIC04MC42ODk0MDk1NjgwNjYzNDI4MDA3ODcwNjU3Nzk1MzE4OCAgICAgICAgIC0+ICAtNi4wNTMxODkwNDcyODA2OTMzMTg4NDQ4MDE4OTk0NzMyNzIgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzUgIGRpdmlkZSAgIDkuMDAxNzY0MzQ0OTYzOTIxNzU0OTgxNzYyOTEzMjQ3Mzk0RS0xNjIgICAtOC41ODU1NDA5NzM2NjcyMDU3NTM3MzQ5Njc2NDUzODY5MTlFLTcyOSAgICAtPiAgLTEuMDQ4NDc5NTc0MjcxODI3MzI2Mzk2MDEyNTczMjMyOTM0RSs1NjcgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzYgIGRpdmlkZSAgLTcuNDA0MTMzOTU5NDA5ODk0NzQzNzA2NDAyODU3MTQ1NDcxRS04MjggICAtNTEuMzgxNTk5Mjk0NjAyODk3MTExMzQ2ODQ4NDMwODYyNjUgICAgICAgICAtPiAgIDEuNDQxMDA4ODU1NTE2MDI5NDYxMDMyMDYxNzg1MjE5NzczRS04MjkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzcgIGRpdmlkZSAgIDIuOTY3NTIwMjM1NTc0NDE5Nzk0MDQ4OTk0NDM2MDQwNzE3RS02MTMgICAtNjI1MjUxMzg1NS45MTM5NDg5NDk0OTg3OTI2MjczMTg4OSAgICAgICAgICAtPiAgLTQuNzQ2MTIzNDA1NjU2NDA5MTI3NTcyOTk4NzUxODg1MzM4RS02MjMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwMzggIGRpdmlkZSAgLTE4ODI2ODUyNjU0ODI0MDQwNTA1LjgzOTIwMzY2NzY1MDUxICAgICAgICAtNjMzNjkyNDg3Nzk0MjQzNzk5MjU5MDU1NzQ2MDE0NzM0MCAgICAgICAgICAtPiAgIDIuOTcwOTc2MTQ2NTQ2NDk0NjY5ODA3ODg2Mjc4NTE5MTk0RS0xNSBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjAzOSAgZGl2aWRlICAtOC4xMDE0MDY3ODQ4MDkxOTc2MDQ5NDk1ODQwMDE3MzU5NDlFKzU2MSAgICA0LjgyMzMwMDMwNjk0ODk0MjgyMTA3NjY4MTY1ODc3MTYzNUUrMzYxICAgIC0+ICAtMS42Nzk2Mzk3MjE2MTA4MzkyMDQ3Mzg0NDU3NDcyMzg5ODdFKzIwMCBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0MCAgZGl2aWRlICAtNi4xMTk4MTk3Nzc3MzA5NDA1MjMzMTA2MjU4NTE5MTcyM0UrMjk1ICAgICAxLjUwNzYxMDI1Mzc1NTMzOTMyODMwMjc3OTAwNTU4NjUzNEUrMjM4ICAgIC0+ICAtNC4wNTkyODUwNTg5MTE1NzcyNDQwNDQ0MTg0MTYwNDQ3NjNFKzU3IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDQxICBkaXZpZGUgICA2LjQ3MjYzODg1MDA0NjgxNTg4MDU5OTIyMDUzNDI3NDA1NUUtNTk2ICAgLTQuNDc1MjMzNzEyMDgzMDQ3NTE2OTMzOTExNzg2MTU5OTcyICAgICAgICAgLT4gIC0xLjQ0NjMyNDIwNzA2MjI2MTc0NTUyMDQ5NjQ3NTc3ODg3OUUtNTk2IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDQyICBkaXZpZGUgIC04NDQzODU5MzMzMC43MTI3NzgzOTYzMTE0NDUwOTM5NzExMiAgICAgICAgLTU4NjY4NDU5NjIwNDQwMTY2NDIwODk0Ny40MDU0ODc5NjMzICAgICAgICAgLT4gICAxLjQzOTI1MDIxODU1MDA0MTIyODc1OTk4MzkzNzc3MjUwNEUtMTMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDMgIGRpdmlkZSAgIDkuMzU0NTMzMjMzMjk0MDIyNjE2Njk1ODE1NjU2NzA0MzY5RS0yNCAgICAgNDA1LjUwMDM5MDYyNjEzNTMwNDI1MjE0NDE2MzU5MTc0NiAgICAgICAgICAtPiAgIDIuMzA2OTExMDI4ODI3Nzc0NTQ5NzQwNTcxMjI5NzM2MTk4RS0yNiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA0NCAgZGl2aWRlICAgOTg1NjA2NDIzMzUwMjEwLjczNzQ4NzY2NTAxNDk5NTc4ODEgICAgICAgIC0zNjgxMTU2MzY5Ny40MTkyNTY4MTg2NjY5NDg1OTgyODc5NCAgICAgICAgIC0+ICAtMjY3NzQuMzY5OTA4NjQxMTk0NDUzMzU4MTMzNTQ3MTc3MTEgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDUgIGRpdmlkZSAgLTguMTg3MjgwNzc0MTc3NzE1NzA2Mjc4MDAyMjQ3NzY2MzExRS0xMjMgICAtMzg3ODQxMjQzOTMuOTEyMTI4NzA4Mjg0MzAwMDEzMDAwNjggICAgICAgICAtPiAgIDIuMTEwOTg3NjUzMzU2MTM5MTQ3MzU3MjQwNzI3Nzk0MzY1RS0xMzMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDYgIGRpdmlkZSAgLTQuNjEyMjAzMTI2MzUwMDcwOTAzNDU5MjQ1Nzk4MzcxNjU3RSs5MTIgICAgNy45NzE1NjIxODI3Mjc5NTYyOTA5MDE5ODQ3MzY4MDA1MTlFKzY0ICAgICAtPiAgLTUuNzg1ODIwOTIyNzA4NjgzMjM3MDk4ODI2NjYyNzY5NzQ4RSs4NDcgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDcgIGRpdmlkZSAgIDQuNjYxMDE1OTA5NDIxNDg1Mjk4MjQ3OTI4OTY3OTc3MDg5RSs4ODggICAtNi4zNjA5MTEyNTMzMjM5MjIzMzg3MzczMTE1NjM4NDU1ODFFKzM4OCAgICAtPiAgLTcuMzI3NTkxNDc4MzIxMzY1OTgwMTU2NjU0NTM5NjM4ODM2RSs0OTkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDggIGRpdmlkZSAgIDkxNTYwNzgxNzI5MDMuMjU3NTAwMDAzMjYwNzEwODMzMDMwICAgICAgICAgNy4xODk3OTY2NTMyNjIxNDcxMzkwNzE2MzQyMzc5NjQwNzRFLTkwICAgICAtPiAgIDEuMjczNDgyMjE1NzY2MDAwOTk0MzY1MjAxNTQ1MDk2MDI2RSsxMDIgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNDkgIGRpdmlkZSAgLTEuNzEwNzIyMzAzMzI3NDc2NTg2MzczNDc3NzgxMjc2NTg2RS0zMTEgICAtMzE2NzU2MTYyODI2MDE1NjgzNzMyOTMyMy43MjkzODA2OTUgICAgICAgICAtPiAgIDUuNDAwNzU0NTk5NTc4NjEzOTg0ODc1NzUyOTU4NjQ1NjU1RS0zMzYgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTAgIGRpdmlkZSAgLTQuNjQ3OTM1MjEwODgxODA2MjM4MzIxNjE2MzQ1NDEzMDIxRS04NzggICAgMjA5Mzg4LjU0MzE4Njc3NDQ2NDgxNzczMDg0NjA2Mzk1ODIgICAgICAgICAtPiAgLTIuMjE5NzY1NzcxMzk0NTkzNzMzMTQwNDk0Mjk3Mzg4MTQwRS04ODMgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTEgIGRpdmlkZSAgIDU5NTguNjk0NzI4Mzk1NzYwOTkyNzE5MDg0NzgxNTgyNzAwICAgICAgICAgNC41NDE1MTAxNTY1NjQzMTU2MzI1MzYzNTMxNzE4NDYwOTZFLTc0NiAgICAtPiAgIDEuMzEyMDUxMzkzMjUzNjM4NjY0OTQ3ODUyNjkzMDA1NDgwRSs3NDkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTIgIGRpdmlkZSAgLTcuOTM1NzMyNTQ0NjQ5NzAyMTc1MjU2Njk5ODg2ODcyMDkzRS00ODkgICAtNy40MzMzMjkwNzM2NjQ3OTMxMzg5OTg3NjU2NDc0Njc5NzFFKzM2MCAgICAtPiAgIDEuMDY3NTg3OTQ5NjI2MDc2OTE3NjcyMjcxNjE5NjY0NjU2RS04NDkgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTMgIGRpdmlkZSAgLTI3NDY2NTA4NjQ2MDExNTcuODYzNTg5OTU5OTM5OTAxMzUwICAgICAgICAgNy4wMTY2ODQ5NDU1MDc2NDc1Mjg5MDcxODQ2OTQzNTk1OThFKzU0OCAgICAtPiAgLTMuOTE0NDU2NTkzMDA5MzA5NTI5MzUxMjU0OTUwNDI5OTMyRS01MzQgSW5leGFjdCBSb3VuZGVkCitkcWRpdjIwNTQgIGRpdmlkZSAgIDM2MDUxNDk0MDg2MzExOTczNjU0NDc5NTMuOTk0NTY5MTc4ICAgICAgICAtNzU2MTQwMjU4MjU2NDkwODIuNzgyNjQ4NjQ0MjgyMzc4MzMgICAgICAgICAtPiAgLTQ3Njc4MzE1Ljg4NDcyNjkzNTA3MDYwMDYzMTg4MDIwNTMyIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDU1ICBkaXZpZGUgICA3ODgxOTQzMjA5MjE3OTg0MDQ5MDYzNzUyMTQuMTk2MzQ5ICAgICAgICAgLTYuMjIyNzE4MTQ4NDMzMjQ3Mzg0OTMyNTczNDAxOTc2MzM3RS00MTggICAgLT4gIC0xLjI2NjYzOTkxODYzNDY3MTgwMzk4MjIyMjI0NDk3NzI4N0UrNDQ0IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDU2ICBkaXZpZGUgICA1NjIwNzIyNzMwNTM0NzUyLjc1ODIwODk0MzQ0NzYwMzIxMSAgICAgICAgIDYuODQzNTUyODQxMTY4NTM4MzE5MTIzMDAwOTE3NjU3NzU5RS0xMzkgICAgLT4gICA4LjIxMzE2NDgwMDQ4NTQzNDY2NjYyOTk3MDQ0MzczOTU1NEUrMTUzIEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDU3ICBkaXZpZGUgICA3MzA0NTM0Njc2NzEzNzAzOTM4MTAyLjQwMzk0OTAxOTQwMiAgICAgICAgLTU3NjE2OS4zNjg1MDEwOTM1MTA4MTUzMDIzODAzNTkwODM1ICAgICAgICAgLT4gIC0xMjY3Nzc1NjAxNDIwMTk5NS4zMTk2OTIzNzE0NDM5NDc3MiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA1OCAgZGl2aWRlICAgODA2NzkxODc2Mi4xMzQ2MjE2MzkyNTQ5MTY3ODY5NDU1NDcgICAgICAgIC04Ljc3NDc3MTQ4MDA1NTUzNjAwOTEwNTU5NjE2Mzg2NDc1OEUrOTU0ICAgIC0+ICAtOS4xOTQ0NDg4NTg4MzYzMzIxNTY3NjY3NjQ2MDUxMjUyNDVFLTk0NiBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2MjA1OSAgZGl2aWRlICAgOC43MDIwOTM0NTQxMjMwNDY1MDc1NzgyNTY4OTk1Mzc1NjNFLTMyNCAgIC01Ljg3NTM5OTczMzAxNjAxODQwNDU4MDIwMTE3NjU3NjI5M0UtNDAxICAgIC0+ICAtMS40ODExMDY2MjI0NTIwNTI1ODE0NzA0NDM1MjY5NTczMzVFKzc3IEluZXhhY3QgUm91bmRlZAorZHFkaXYyMDYwICBkaXZpZGUgIC00MTQyNi4wMTY2MjUxODQ1MTg2MTM4NjM1MjQxNTA5MjM1NiAgICAgICAgIDkwLjAwMTQ2NjIxNjg0NDc4MzAwNTEwNzY5ODAyMDEzNDY0ICAgICAgICAgLT4gIC00NjAuMjgxNTc1MDI4NzMxODY5MjczMjA2NzcwOTE3NjIwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gcmFuZG9tIGRpdmlkZSB0ZXN0cyB3aXRoIHJlc3VsdCBuZWFyIDEKK2RxZGl2NDAwMSBkaXZpZGUgIDIwMDMxMDAzNTI3NzA3NTM5Njk4Nzg5MjU2NjQ1MjQ5MDAgICAyMDAzMTAwMzUyNzcwNzUzOTY5ODc4OTI1NjY0NDk3ODI0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTM1MTcgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDAyIGRpdmlkZSAgNDgxNzc4NTc5MzkxNjQ5MDY1MjU3OTU1MjMxODM3MTY0NSAgIDQ4MTc3ODU3OTM5MTY0OTA2NTI1Nzk1NTIzMTgzNjIwOTcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTk4MiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMDMgZGl2aWRlICA4Mjk5MTg3NDEwOTIwMDY3MzI1NjQ4MDY4NDM5NTYwMjgyICAgODI5OTE4NzQxMDkyMDA2NzMyNTY0ODA2ODQzOTU5MTE1OSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2Mjc5NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMDQgZGl2aWRlICA1NjQxMDg4NDU1ODk3NDA3MDQ0NTQ0NDYxNzg1MzY1ODk5ICAgNTY0MTA4ODQ1NTg5NzQwNzA0NDU0NDQ2MTc4NTM4OTk2NSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1NzMzOCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMDUgZGl2aWRlICA1NzUyMjc0Njk0NzA2NTQ1MzU5MzI2MzYxMzEzNDkwNDI0ICAgNTc1MjI3NDY5NDcwNjU0NTM1OTMyNjM2MTMxMzUwMjcyMyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ODYxOSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMDYgZGl2aWRlICA2NzYyMDc5NDc3MzczNjcwNTk0ODI5MzE5MzQ2MDk5NjY1ICAgNjc2MjA3OTQ3NzM3MzY3MDU5NDgyOTMxOTM0NjEzMjU3OSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MTMyNiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMDcgZGl2aWRlICA3Mjg2NDI1MTUzNjkxODkwMzQxNjMzMDIzMjIyNjAyOTE2ICAgNzI4NjQyNTE1MzY5MTg5MDM0MTYzMzAyMzIyMjYwNjU1NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwNCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMDggZGl2aWRlICA5NDgxMjMzOTkxOTAxMzA1NzI3NjQ4MzA2NDIxOTQ2NjU1ICAgOTQ4MTIzMzk5MTkwMTMwNTcyNzY0ODMwNjQyMTkxOTEyNCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTA0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAwOSBkaXZpZGUgIDQyODIwNTM5NDE4OTM5NTE3NDIwMjk0NDQwNjU2MTQzMTEgICA0MjgyMDUzOTQxODkzOTUxNzQyMDI5NDQ0MDY1NTgzMDc3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyOTQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDEwIGRpdmlkZSAgIDYyNjg4ODIyNTQ0MTI1MDYzOTc0MTc4MTg1MDMzODY5NSAgICA2MjY4ODgyMjU0NDEyNTA2Mzk3NDE3ODE4NTAzMjcyOTkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxODE3OSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMTEgZGl2aWRlICAzODYwOTczNjQ5MjIyMDI4MDA5NDU2NTk4NjA0NDY4NTQ3ICAgMzg2MDk3MzY0OTIyMjAyODAwOTQ1NjU5ODYwNDQ3Njg0OSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ODQ5OCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMTIgZGl2aWRlICA0NzUzMTU3MDgwMTI3NDY4MTI3OTA4MDYwNjA3ODIxODM5ICAgNDc1MzE1NzA4MDEyNzQ2ODEyNzkwODA2MDYwNzc4ODM3OSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MDQwICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxMyBkaXZpZGUgICA1NTI0NDg1NDYyMDM3NTQwNjI4MDU3MDYyNzc4ODA0MTkgICAgNTUyNDQ4NTQ2MjAzNzU0MDYyODA1NzA2Mjc3ODgxOTAzICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTczMTM4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxNCBkaXZpZGUgIDg0MDU5NTQ1Mjc5NTIxNTg0NTUzMjM3MTM3Mjg5MTczOTUgICA4NDA1OTU0NTI3OTUyMTU4NDU1MzIzNzEzNzI4OTMzODY2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgwNDA2ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxNSBkaXZpZGUgIDc1NTQwOTY1MDIyMzUzMjExNDI1NTU4MDIyMzgwMTYxMTYgICA3NTU0MDk2NTAyMjM1MzIxMTQyNTU1ODAyMjM4MDI2NTQ2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTg2MTkzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxNiBkaXZpZGUgIDQwNTMyNTc2NzQxMjc1MTg2MDY4NzEwNTQ5MzQ3NDY3ODIgICA0MDUzMjU3Njc0MTI3NTE4NjA2ODcxMDU0OTM0NzY3MzU1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQ5MjQzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxNyBkaXZpZGUgIDcxMTI0MTk0MjA3NTUwOTA0NTQ3MTY4ODg4NDQwMTE1ODIgICA3MTEyNDE5NDIwNzU1MDkwNDU0NzE2ODg4ODQ0MDM4MTA1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYyNzA5ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAxOCBkaXZpZGUgIDMxMzIzMDIxMzc1MjAwNzI3MjgxNjQ1NDk3MzA5MTE4NDYgICAzMTMyMzAyMTM3NTIwMDcyNzI4MTY0NTQ5NzMwOTA4NDE2ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTUgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDE5IGRpdmlkZSAgNDc4ODM3NDA0NTg0MTQxNjM1NTcwNjcxNTA0ODE2MTAxMyAgIDQ3ODgzNzQwNDU4NDE0MTYzNTU3MDY3MTUwNDgxOTAwNzcgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MzkzMDMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDIwIGRpdmlkZSAgOTQ2NjAyMTYzNjA0NzYzMDIxODIzODA3NTA5OTUxMDU5NyAgIDk0NjYwMjE2MzYwNDc2MzAyMTgyMzgwNzUwOTk0ODQwNTMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgwNCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjEgZGl2aWRlICAgOTEyNzQyNzQ1NjQ2NzY1NjI1NTk3Mzk5NjkyMTM4NjUwICAgIDkxMjc0Mjc0NTY0Njc2NTYyNTU5NzM5OTY5MjEzOTA0MiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTcwNSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjIgZGl2aWRlICA5NTA4NDAyNzQyOTMzNjQzMjA4ODA2MjY0ODk3MTg4NTA0ICAgOTUwODQwMjc0MjkzMzY0MzIwODgwNjI2NDg5NzE5NTk3MyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjE0NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjMgZGl2aWRlICAxMTg2OTU2Nzk1NzI3MjMzNzA0OTYyMzYxOTE0MzYwODk1ICAgMTE4Njk1Njc5NTcyNzIzMzcwNDk2MjM2MTkxNDMyOTU3NyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Mzg1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAyNCBkaXZpZGUgIDU5NzIyMTAyNjg4MzkwMTQ4MTI2OTY5MTYxNzA5Njc5MzggICA1OTcyMjEwMjY4ODM5MDE0ODEyNjk2OTE2MTcwOTU0OTc0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxNzEgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDI1IGRpdmlkZSAgMjMwMzgwMTYyNTUyMTYxOTkzMDg5NDQ2MDEzOTc5MzE0MCAgIDIzMDM4MDE2MjU1MjE2MTk5MzA4OTQ0NjAxMzk3OTk2NDMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzE3NzMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDI2IGRpdmlkZSAgNjAyMjIzMTU2MDAwMjg5ODI2NDc3NzM5MzQ3Mzk2NjU5NSAgIDYwMjIyMzE1NjAwMDI4OTgyNjQ3NzczOTM0NzM5NDcxOTggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIyMSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMjcgZGl2aWRlICA4NDI2MTQ4MzM1ODAxMzk2MTk5OTY5MzQ2MDMyMjEwODkzICAgODQyNjE0ODMzNTgwMTM5NjE5OTk2OTM0NjAzMjIwMzE3OSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTE1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAyOCBkaXZpZGUgIDg4MTIyNzg5NDcwMjg3ODQ2MzczODI4NDcwOTg0MTE3NDkgICA4ODEyMjc4OTQ3MDI4Nzg0NjM3MzgyODQ3MDk4Mzg1MzE3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5OTkgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDI5IGRpdmlkZSAgODE0NTI4MjAwMjM0ODM2NzM4MzI2NDE5NzE3MDExNjE0NiAgIDgxNDUyODIwMDIzNDgzNjczODMyNjQxOTcxNzAwODM5ODggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzk0OCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMzAgZGl2aWRlICA2ODIxNTc3NTcxODc2ODQwMTUzMTIzNTEwMTA3Mzg3MDI2ICAgNjgyMTU3NzU3MTg3Njg0MDE1MzEyMzUxMDEwNzQxODAwOCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1NDU4MiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMzEgZGl2aWRlICA5MDE4NTU1MzE5NTE4OTY2OTcwNDgwNTY1NDgyMDIzNzIwICAgOTAxODU1NTMxOTUxODk2Njk3MDQ4MDU2NTQ4MjAxMzM0NiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTUwICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzMiBkaXZpZGUgIDQ2MDIxNTU3MTI5OTgyMjg0NDk2NDA3MTcyNTI3ODg4NjQgICA0NjAyMTU1NzEyOTk4MjI4NDQ5NjQwNzE3MjUyODE4NTAyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTM1NjAwICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzMyBkaXZpZGUgIDY2NzU2MDc0ODE1MjI3ODU2MTQ1MDY4MjgyOTIyNjQ0NzIgICA2Njc1NjA3NDgxNTIyNzg1NjE0NTA2ODI4MjkyMjc3MTAwICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgxMDgzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzNCBkaXZpZGUgIDQwMTU4ODE1MTY4NzE4MzM4OTc3NjY5NDU4MzYyNjQ0NzIgICA0MDE1ODgxNTE2ODcxODMzODk3NzY2OTQ1ODM2MjYyNjQ1ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NTUgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDM1IGRpdmlkZSAgMTQxNTU4MDIwNTkzMzQxMTgzNzU5NTQ1OTcxNjkxMDM2NSAgIDE0MTU1ODAyMDU5MzM0MTE4Mzc1OTU0NTk3MTY4ODAxMzkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMTM1MiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwMzYgZGl2aWRlICA5NDMyOTY4Mjk3MDY5NTQyODE2NzUyMDM1Mjc2MzYxNTUyICAgOTQzMjk2ODI5NzA2OTU0MjgxNjc1MjAzNTI3NjM1MzA1NCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAxICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzNyBkaXZpZGUgIDQ3OTkzMTk1OTEzMDM4NDg1MDA1MzI3NjY2ODIxNDA2NTggICA0Nzk5MzE5NTkxMzAzODQ4NTAwNTMyNzY2NjgyMTcyNjU1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMzMzMwICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzOCBkaXZpZGUgICAzMTY4NTQyNzA3MzI4Mzk1Mjk3OTA1ODQyODQ5ODc0NzIgICAgMzE2ODU0MjcwNzMyODM5NTI5NzkwNTg0Mjg1MDA0ODMyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NDUyMTE0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDAzOSBkaXZpZGUgIDM1OTg5ODEzMDA1OTI0OTA0Mjc4MjYwMjc5NzU2OTc0MTUgICAzNTk4OTgxMzAwNTkyNDkwNDI3ODI2MDI3OTc1Njg2NzEyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NzQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDQwIGRpdmlkZSAgMTY2NDMxNTQzNTY5NDQ2MTM3MTE1NTgwMDY4MjE5NjUyMCAgIDE2NjQzMTU0MzU2OTQ0NjEzNzExNTU4MDA2ODIxOTU2MTcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0MyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNDEgZGl2aWRlICAxNjgwODcyMzE2NTMxMTI4ODkwMTAyODU1MzE2NTEwNTgxICAgMTY4MDg3MjMxNjUzMTEyODg5MDEwMjg1NTMxNjQ5NTU0NSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OTQ1ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA0MiBkaXZpZGUgIDk4ODEyNzQ4Nzk1NjY0MDU0NzU3NTU0OTkyODE2NDQ3MzAgICA5ODgxMjc0ODc5NTY2NDA1NDc1NzU1NDk5MjgxNjE1NzQzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MzQgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDQzIGRpdmlkZSAgNDczNzIyNTk1NzcxNzQ2Njk2MDQ0NzIwNDIzMjI3OTIxNiAgIDQ3MzcyMjU5NTc3MTc0NjY5NjA0NDcyMDQyMzIyNzc0NTIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3MiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNDQgZGl2aWRlICAyNDgyMDk3Mzc5NDE0ODY3MDYxMjEzMzE5MzQ2NDE4Mjg4ICAgMjQ4MjA5NzM3OTQxNDg2NzA2MTIxMzMxOTM0NjM4NzkzNiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMjI4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA0NSBkaXZpZGUgIDc0MDY5Nzc1OTUyMzM3NjI3MjM1NzY0MzQxMjIxNjE4NjggICA3NDA2OTc3NTk1MjMzNzYyNzIzNTc2NDM0MTIyMTg5MDQyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYzMzEzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA0NiBkaXZpZGUgICAyMjg3ODIwNTc3NTc1NjYwNDcwODY1OTMyODE3NzM1NzcgICAgMjI4NzgyMDU3NzU3NTY2MDQ3MDg2NTkzMjgxNzY5NzI3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTY4MjggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDQ3IGRpdmlkZSAgMjk1NjU5NDI3MDI0MDU3OTY0ODgyMzI3MDU0MDM2NzY1MyAgIDI5NTY1OTQyNzAyNDA1Nzk2NDg4MjMyNzA1NDAzNjg1NTYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTY5NDYgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDQ4IGRpdmlkZSAgNjMyNjk2NDA5ODg5NzYyMDYyMDUzNDEzNjc2NzYzNDM0MCAgIDYzMjY5NjQwOTg4OTc2MjA2MjA1MzQxMzY3Njc2MTkzMzkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjM3MSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNDkgZGl2aWRlICAgNDE0NTg2NDQwNDU2NTkwMjE1MjQ3MDAyNjc4MzI3ODAwICAgIDQxNDU4NjQ0MDQ1NjU5MDIxNTI0NzAwMjY3ODMxNjkyMiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2MjM4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1MCBkaXZpZGUgIDczNjQ1NTIyMDg1NzAwMzkzODYyMjA1MDU2MzY3NzkxMjUgICA3MzY0NTUyMjA4NTcwMDM5Mzg2MjIwNTA1NjM2ODAzNTQ4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTY2ODM3ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1MSBkaXZpZGUgIDU2MjYyNjY3NDk5MDIzNjk3MTAwMjI4MjQ5NTA1OTAwNTYgICA1NjI2MjY2NzQ5OTAyMzY5NzEwMDIyODI0OTUwNTkxMDA4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4MzA4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1MiBkaXZpZGUgIDQ4NjMyNzgyOTM5MTYxOTc0NTQ5ODc0ODEzNDM0NjA0ODQgICA0ODYzMjc4MjkzOTE2MTk3NDU0OTg3NDgxMzQzNDQyNTIyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2OTMgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDUzIGRpdmlkZSAgMTE3MDcxMzU4MjAzMDYzNzM1OTcxMzI0OTc5NjgzNTQ4MyAgIDExNzA3MTM1ODIwMzA2MzczNTk3MTMyNDk3OTY4MjMzNDUgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDM2OCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNTQgZGl2aWRlICA5ODM4MDYyNDk0NzI1OTY1NjY3Nzc2MzI2NTU2MDUyOTMxICAgOTgzODA2MjQ5NDcyNTk2NTY2Nzc3NjMyNjU1NjA2MTAwMiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MTc5NiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNTUgZGl2aWRlICA0MDcxMzg4NzMxMjk4ODYxMDkzMDA1Njg3MDkxNDk4OTIyICAgNDA3MTM4ODczMTI5ODg2MTA5MzAwNTY4NzA5MTQ5ODI3OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTU4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1NiBkaXZpZGUgIDg3NTMxNTU3MjIzMjQ3MDY3OTU4NTUwMzg1OTAyNzI1MjYgICA4NzUzMTU1NzIyMzI0NzA2Nzk1ODU1MDM4NTkwMjc2NjU2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MjgyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA1NyBkaXZpZGUgIDQzOTk5NDE5MTE1MzMyNzM0MTg4NDQ3NDI2NTgyNDA0ODUgICA0Mzk5OTQxOTExNTMzMjczNDE4ODQ0NzQyNjU4MjE5ODkxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2ODEgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDU4IGRpdmlkZSAgNDEyNzg4NDE1OTk0OTUwMzY3Nzc3NjQzMDYyMDA1MDI2OSAgIDQxMjc4ODQxNTk5NDk1MDM2Nzc3NzY0MzA2MjAwMjYwOTEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTg1NyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNTkgZGl2aWRlICA1NTM2MTYwODIyMzYwODAwMDY3MDQyNTI4MzE3NDM4ODA4ICAgNTUzNjE2MDgyMjM2MDgwMDA2NzA0MjUyODMxNzQ1MDY4NyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ODU0MyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNjAgZGl2aWRlICAzOTczMjM0OTk4NDY4NjY0OTM2NjcxMDg4MjM3NzEwMjQ2ICAgMzk3MzIzNDk5ODQ2ODY2NDkzNjY3MTA4ODIzNzc0MTg4NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMDM2NyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNjEgZGl2aWRlICA5ODI0ODU1OTM1NjM4MjYzNTkzNDEwNDQ0MTQyMzI3MzU4ICAgOTgyNDg1NTkzNTYzODI2MzU5MzQxMDQ0NDE0MjMyODU3NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODc2MCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNjIgZGl2aWRlICA1OTE3MDc4NTE3MzQwMjE4MTMxODY3MzI3MzAwODE0ODY3ICAgNTkxNzA3ODUxNzM0MDIxODEzMTg2NzMyNzMwMDc4ODcwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NDIyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2MyBkaXZpZGUgIDQzNTQyMzY2MDE4MzA1NDQ4ODIyODYxMzk2MTI1MjEzNjIgICA0MzU0MjM2NjAxODMwNTQ0ODgyMjg2MTM5NjEyNTQzMjIzICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQ5Nzk0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2NCBkaXZpZGUgIDgwNTg0NzQ3NzIzNzUyNTkwMTczNDIxMTAwMTM4OTEyOTQgICA4MDU4NDc0NzcyMzc1MjU5MDE3MzQyMTEwMDEzOTA2NzkyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgwNzY4ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2NSBkaXZpZGUgIDU1MTk2MDQwMjA5ODE3NDgxNzA1MTcwOTM3NDYxNjYzMjggICA1NTE5NjA0MDIwOTgxNzQ4MTcwNTE3MDkzNzQ2MTgxNzYzICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcyMDM2ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA2NiBkaXZpZGUgIDE1MDIxMzA5NjY4Nzk4MDU0NTg4MzEzMjM3ODI0NDMxMzkgICAxNTAyMTMwOTY2ODc5ODA1NDU4ODMxMzIzNzgyNDEyMjEzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA1ODggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDY3IGRpdmlkZSAgIDU2Mjc5NTYzMzcxOTQ4MTIxMjkxNTE1OTc4Nzk4MDI3MCAgICA1NjI3OTU2MzM3MTk0ODEyMTI5MTUxNTk3ODgwMDcwNjYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MjM4NzcgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDY4IGRpdmlkZSAgNjU4NDc0MzMyNDQ5NDY2NDI3Mzk0MTI4MTU1NzI2ODg3OCAgIDY1ODQ3NDMzMjQ0OTQ2NjQyNzM5NDEyODE1NTcyNTg5NDUgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUwOCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNjkgZGl2aWRlICAzNjMyMDAwMzI3Mjg1NzQzOTk3OTc2NDMxMTA5NDE2NTAwICAgMzYzMjAwMDMyNzI4NTc0Mzk5Nzk3NjQzMTEwOTQwODEwNyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMzExICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA3MCBkaXZpZGUgIDExNDU4MjcyMzczMTU0MzAwODkzODg5NTM4Mzg1NjE0NTAgICAxMTQ1ODI3MjM3MzE1NDMwMDg5Mzg4OTUzODM4NTI3MzMyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk3NzYgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDcxIGRpdmlkZSAgODg3NDQzMTAxMDM1NzY5MTg2OTcyNTM3MjMxNzM1MDM4MCAgIDg4NzQ0MzEwMTAzNTc2OTE4Njk3MjUzNzIzMTczMTY0NzIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgyMSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNzIgZGl2aWRlICAgOTkyOTQ4NzE4OTAyODA0NjQ4MTE5NzUzMTQxMjAyMTk2ICAgIDk5Mjk0ODcxODkwMjgwNDY0ODExOTc1MzE0MTIzNTIyMiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTY2NzM5NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNzMgZGl2aWRlICAyNTIyNzM1MTgzMzc0MjE4NTA1MTQyNDE3MjY1NDM5OTg5ICAgMjUyMjczNTE4MzM3NDIxODUwNTE0MjQxNzI2NTQ1Mzc3OSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0NTMzNyAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwNzQgZGl2aWRlICAyNjY4NDE5MTYxOTEyOTM2NTA4MDA2ODcyMzAzNTAxMDUyICAgMjY2ODQxOTE2MTkxMjkzNjUwODAwNjg3MjMwMzQ3MTAzNiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMjQ5ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA3NSBkaXZpZGUgIDMwMzYxNjkwODU2NjUxODY3MTI1OTA5NDExMTE3NzUwOTIgICAzMDM2MTY5MDg1NjY1MTg2NzEyNTkwOTQxMTExODA4ODQ2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODg4ODI3ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA3NiBkaXZpZGUgIDk0NDE2MzQ2MDQ5MTcyMzE2Mzg1MDg4OTg5MzQwMDYxNDcgICA5NDQxNjM0NjA0OTE3MjMxNjM4NTA4ODk4OTM0MDAwMjg4ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MjEgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDc3IGRpdmlkZSAgMjY3NzMwMTM1MzE2NDM3NzA5MTExMTQ1ODgxMTgzOTE5MCAgIDI2NzczMDEzNTMxNjQzNzcwOTExMTE0NTg4MTE4Njc3MjIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4OTM0MzAgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDc4IGRpdmlkZSAgNjg0NDk3OTIwMzExMjA2NjE2NjU4Mzc2NTg1NzE3MTQyNiAgIDY4NDQ5NzkyMDMxMTIwNjYxNjY1ODM3NjU4NTcxODk2ODIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzMzMjkgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDc5IGRpdmlkZSAgMjIyMDMzNzQzNTE0MTc5NjcyNDMyMzc4Mzk2MDIzMTY2MSAgIDIyMjAzMzc0MzUxNDE3OTY3MjQzMjM3ODM5NjAyMDg3NzggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDMwNiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwODAgZGl2aWRlICA2NDQ3NDI0NzAwMDE5NzgzOTMxNTY5OTk2OTg5NTYxMzgwICAgNjQ0NzQyNDcwMDAxOTc4MzkzMTU2OTk5Njk4OTU3MjQ1NCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4MjgyNCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwODEgZGl2aWRlICA3NTEyODU2NzYyNjk2NjA3MTE5ODQ3MDkyMTk1NTg3MTgwICAgNzUxMjg1Njc2MjY5NjYwNzExOTg0NzA5MjE5NTU1NzM0NiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOTcxICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4MiBkaXZpZGUgIDczOTUyNjE5ODExOTM5NjAzOTkwODc4MTkwNzcyMzc0ODIgICA3Mzk1MjYxOTgxMTkzOTYwMzk5MDg3ODE5MDc3MjQyNDg3ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzMjMyICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4MyBkaXZpZGUgIDIyNTM0NDI0Njc2ODI1ODQwMzU3OTI3MjQ4ODQzNzY3MzUgICAyMjUzNDQyNDY3NjgyNTg0MDM1NzkyNzI0ODg0NDA3MTc4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODY0OTA0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4NCBkaXZpZGUgIDgxNTMxMzg2ODAzMDAyMTMxMzU1NzczMzY0NjYxOTA5OTcgICA4MTUzMTM4NjgwMzAwMjEzMTM1NTc3MzM2NDY2MjIwNjA3ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYzNjgzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4NSBkaXZpZGUgIDQ2Njg3MzEyNTIyNTQxNDgwNzQwNDEwMjI2ODE4MDEzOTAgICA0NjY4NzMxMjUyMjU0MTQ4MDc0MDQxMDIyNjgxNzc4MTAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5ODggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDg2IGRpdmlkZSAgNjA3ODQwNDU1Nzk5MzY2OTY5NjA0MDQyNTUwMTgxNTA1NiAgIDYwNzg0MDQ1NTc5OTM2Njk2OTYwNDA0MjU1MDE3OTc2MTIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjg3MCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwODcgZGl2aWRlICAyMzA2MzUyMzU5ODc0MjYxNjIzMjIzMzU2ODc4MzE2Mjc4ICAgMjMwNjM1MjM1OTg3NDI2MTYyMzIyMzM1Njg3ODMzNTYxMiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkxNjE3MSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwODggZGl2aWRlICAzMjY0ODQyMTg2NjY4NDgwMzYyOTAwOTA5NTY0MDkxOTA4ICAgMzI2NDg0MjE4NjY2ODQ4MDM2MjkwMDkwOTU2NDA1ODY1OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMTg0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA4OSBkaXZpZGUgIDY5NzE5ODUwNDcyNzk2MzY4Nzg5NTc5NTk2MDg2MTIyMDQgICA2OTcxOTg1MDQ3Mjc5NjM2ODc4OTU3OTU5NjA4NjE1MDg4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1ODYzICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA5MCBkaXZpZGUgIDUyNjI4MTA4ODk5NTI3MjEyMzU0NjY0NDU5NzM4MTYyNTcgICA1MjYyODEwODg5OTUyNzIxMjM1NDY2NDQ1OTczNzgzMDc3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzMDUgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDkxIGRpdmlkZSAgNzk0Nzk0NDczMTAzNTI2NzE3ODU0ODM1NzA3MDA4MDI4OCAgIDc5NDc5NDQ3MzEwMzUyNjcxNzg1NDgzNTcwNzAwNjEzMzkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjM4NCAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwOTIgZGl2aWRlICA1MDcxODA4OTA4Mzk1Mzc1MTA4MzgzMDM1ODAwNDQzMjI5ICAgNTA3MTgwODkwODM5NTM3NTEwODM4MzAzNTgwMDQxMjQyOSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDczICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA5MyBkaXZpZGUgIDIwNDMxNDY1NDIwODQ1MDM2NTU1MTE1MDcyMDkyNjI5NjkgICAyMDQzMTQ2NTQyMDg0NTAzNjU1NTExNTA3MjA5MjQ5MjYzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3MDggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDk0IGRpdmlkZSAgNDA5NzYzMjczNTM4NDUzNDE4MTY2MTk1OTczMTI2NDgwMiAgIDQwOTc2MzI3MzUzODQ1MzQxODE2NjE5NTk3MzEyMzQ0OTkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzM5NSAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwOTUgZGl2aWRlICAzMDYxNDc3NjQyODMxMzg3NDg5NzI5NDY0NTg3MDQ0NDMwICAgMzA2MTQ3NzY0MjgzMTM4NzQ4OTcyOTQ2NDU4NzA1OTQ1MiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDkzMiAgSW5leGFjdCBSb3VuZGVkCitkcWRpdjQwOTYgZGl2aWRlICAzNDI5ODU0OTQxMDM5Nzc2MTU5NDk4ODAyOTM2MjUyNjM4ICAgMzQyOTg1NDk0MTAzOTc3NjE1OTQ5ODgwMjkzNjI0NjQxNSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxODE0ICBJbmV4YWN0IFJvdW5kZWQKK2RxZGl2NDA5NyBkaXZpZGUgIDQ4NzQzMjQ5Nzk1Nzg1OTk3MDAwMjQxMzMyNzgyODQ1NDUgICA0ODc0MzI0OTc5NTc4NTk5NzAwMDI0MTMzMjc4MjYyMTMxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1OTggIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDk4IGRpdmlkZSAgNTcwMTY1MjM2OTY5MTgzMzU0MTQ1NTk3ODUxNTgyMDg4MiAgIDU3MDE2NTIzNjk2OTE4MzM1NDE0NTU5Nzg1MTU4MzQ4NTQgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzU0OTUgIEluZXhhY3QgUm91bmRlZAorZHFkaXY0MDk5IGRpdmlkZSAgMjkyODIwNTcyODQwMjk0NTI2Njk1MzI1NTYzMjM0MzExMyAgIDI5MjgyMDU3Mjg0MDI5NDUyNjY5NTMyNTU2MzIzNzM3OTQgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4OTUyMjMgIEluZXhhY3QgUm91bmRlZAorCistLSBOdWxsIHRlc3RzCitkcWRpdjk5OTggZGl2aWRlIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkaXY5OTk5IGRpdmlkZSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcURpdmlkZUludC5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcURpdmlkZUludC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyOTAzNTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRGl2aWRlSW50LmRlY1Rlc3QKQEAgLTAsMCArMSw0NTMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFEaXZpZGVJbnQuZGVjVGVzdCAtLSBkZWNRdWFkIGludGVnZXIgZGl2aXNpb24gICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCisKK2RxZHZpMDAxIGRpdmlkZWludCAgMSAgICAgMSAgICAtPiAgMQorZHFkdmkwMDIgZGl2aWRlaW50ICAyICAgICAxICAgIC0+ICAyCitkcWR2aTAwMyBkaXZpZGVpbnQgIDEgICAgIDIgICAgLT4gIDAKK2RxZHZpMDA0IGRpdmlkZWludCAgMiAgICAgMiAgICAtPiAgMQorZHFkdmkwMDUgZGl2aWRlaW50ICAwICAgICAxICAgIC0+ICAwCitkcWR2aTAwNiBkaXZpZGVpbnQgIDAgICAgIDIgICAgLT4gIDAKK2RxZHZpMDA3IGRpdmlkZWludCAgMSAgICAgMyAgICAtPiAgMAorZHFkdmkwMDggZGl2aWRlaW50ICAyICAgICAzICAgIC0+ICAwCitkcWR2aTAwOSBkaXZpZGVpbnQgIDMgICAgIDMgICAgLT4gIDEKKworZHFkdmkwMTAgZGl2aWRlaW50ICAyLjQgICAxICAgIC0+ICAyCitkcWR2aTAxMSBkaXZpZGVpbnQgIDIuNCAgIC0xICAgLT4gIC0yCitkcWR2aTAxMiBkaXZpZGVpbnQgIC0yLjQgIDEgICAgLT4gIC0yCitkcWR2aTAxMyBkaXZpZGVpbnQgIC0yLjQgIC0xICAgLT4gIDIKK2RxZHZpMDE0IGRpdmlkZWludCAgMi40MCAgMSAgICAtPiAgMgorZHFkdmkwMTUgZGl2aWRlaW50ICAyLjQwMCAxICAgIC0+ICAyCitkcWR2aTAxNiBkaXZpZGVpbnQgIDIuNCAgIDIgICAgLT4gIDEKK2RxZHZpMDE3IGRpdmlkZWludCAgMi40MDAgMiAgICAtPiAgMQorZHFkdmkwMTggZGl2aWRlaW50ICAyLiAgICAyICAgIC0+ICAxCitkcWR2aTAxOSBkaXZpZGVpbnQgIDIwICAgIDIwICAgLT4gIDEKKworZHFkdmkwMjAgZGl2aWRlaW50ICAxODcgICAxODcgIC0+ICAxCitkcWR2aTAyMSBkaXZpZGVpbnQgIDUgICAgIDIgICAgLT4gIDIKK2RxZHZpMDIyIGRpdmlkZWludCAgNSAgICAgMi4wICAgIC0+ICAyCitkcWR2aTAyMyBkaXZpZGVpbnQgIDUgICAgIDIuMDAwICAtPiAgMgorZHFkdmkwMjQgZGl2aWRlaW50ICA1ICAgICAwLjIwMCAgLT4gIDI1CitkcWR2aTAyNSBkaXZpZGVpbnQgIDUgICAgIDAuMjAwICAtPiAgMjUKKworZHFkdmkwMzAgZGl2aWRlaW50ICAxICAgICAyICAgICAgLT4gIDAKK2RxZHZpMDMxIGRpdmlkZWludCAgMSAgICAgNCAgICAgIC0+ICAwCitkcWR2aTAzMiBkaXZpZGVpbnQgIDEgICAgIDggICAgICAtPiAgMAorZHFkdmkwMzMgZGl2aWRlaW50ICAxICAgICAxNiAgICAgLT4gIDAKK2RxZHZpMDM0IGRpdmlkZWludCAgMSAgICAgMzIgICAgIC0+ICAwCitkcWR2aTAzNSBkaXZpZGVpbnQgIDEgICAgIDY0ICAgICAtPiAgMAorZHFkdmkwNDAgZGl2aWRlaW50ICAxICAgIC0yICAgICAgLT4gLTAKK2RxZHZpMDQxIGRpdmlkZWludCAgMSAgICAtNCAgICAgIC0+IC0wCitkcWR2aTA0MiBkaXZpZGVpbnQgIDEgICAgLTggICAgICAtPiAtMAorZHFkdmkwNDMgZGl2aWRlaW50ICAxICAgIC0xNiAgICAgLT4gLTAKK2RxZHZpMDQ0IGRpdmlkZWludCAgMSAgICAtMzIgICAgIC0+IC0wCitkcWR2aTA0NSBkaXZpZGVpbnQgIDEgICAgLTY0ICAgICAtPiAtMAorZHFkdmkwNTAgZGl2aWRlaW50IC0xICAgICAyICAgICAgLT4gLTAKK2RxZHZpMDUxIGRpdmlkZWludCAtMSAgICAgNCAgICAgIC0+IC0wCitkcWR2aTA1MiBkaXZpZGVpbnQgLTEgICAgIDggICAgICAtPiAtMAorZHFkdmkwNTMgZGl2aWRlaW50IC0xICAgICAxNiAgICAgLT4gLTAKK2RxZHZpMDU0IGRpdmlkZWludCAtMSAgICAgMzIgICAgIC0+IC0wCitkcWR2aTA1NSBkaXZpZGVpbnQgLTEgICAgIDY0ICAgICAtPiAtMAorZHFkdmkwNjAgZGl2aWRlaW50IC0xICAgIC0yICAgICAgLT4gIDAKK2RxZHZpMDYxIGRpdmlkZWludCAtMSAgICAtNCAgICAgIC0+ICAwCitkcWR2aTA2MiBkaXZpZGVpbnQgLTEgICAgLTggICAgICAtPiAgMAorZHFkdmkwNjMgZGl2aWRlaW50IC0xICAgIC0xNiAgICAgLT4gIDAKK2RxZHZpMDY0IGRpdmlkZWludCAtMSAgICAtMzIgICAgIC0+ICAwCitkcWR2aTA2NSBkaXZpZGVpbnQgLTEgICAgLTY0ICAgICAtPiAgMAorCistLSBzaW1pbGFyIHdpdGggcG93ZXJzIG9mIHRlbgorZHFkdmkxNjAgZGl2aWRlaW50ICAxICAgICAxICAgICAgICAgLT4gIDEKK2RxZHZpMTYxIGRpdmlkZWludCAgMSAgICAgMTAgICAgICAgIC0+ICAwCitkcWR2aTE2MiBkaXZpZGVpbnQgIDEgICAgIDEwMCAgICAgICAtPiAgMAorZHFkdmkxNjMgZGl2aWRlaW50ICAxICAgICAxMDAwICAgICAgLT4gIDAKK2RxZHZpMTY0IGRpdmlkZWludCAgMSAgICAgMTAwMDAgICAgIC0+ICAwCitkcWR2aTE2NSBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMCAgICAtPiAgMAorZHFkdmkxNjYgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwICAgLT4gIDAKK2RxZHZpMTY3IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMDAgIC0+ICAwCitkcWR2aTE2OCBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAwMCAtPiAgMAorZHFkdmkxNzAgZGl2aWRlaW50ICAxICAgIC0xICAgICAgICAgLT4gLTEKK2RxZHZpMTcxIGRpdmlkZWludCAgMSAgICAtMTAgICAgICAgIC0+IC0wCitkcWR2aTE3MiBkaXZpZGVpbnQgIDEgICAgLTEwMCAgICAgICAtPiAtMAorZHFkdmkxNzMgZGl2aWRlaW50ICAxICAgIC0xMDAwICAgICAgLT4gLTAKK2RxZHZpMTc0IGRpdmlkZWludCAgMSAgICAtMTAwMDAgICAgIC0+IC0wCitkcWR2aTE3NSBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMCAgICAtPiAtMAorZHFkdmkxNzYgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwICAgLT4gLTAKK2RxZHZpMTc3IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMDAgIC0+IC0wCitkcWR2aTE3OCBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAwMCAtPiAtMAorZHFkdmkxODAgZGl2aWRlaW50IC0xICAgICAxICAgICAgICAgLT4gLTEKK2RxZHZpMTgxIGRpdmlkZWludCAtMSAgICAgMTAgICAgICAgIC0+IC0wCitkcWR2aTE4MiBkaXZpZGVpbnQgLTEgICAgIDEwMCAgICAgICAtPiAtMAorZHFkdmkxODMgZGl2aWRlaW50IC0xICAgICAxMDAwICAgICAgLT4gLTAKK2RxZHZpMTg0IGRpdmlkZWludCAtMSAgICAgMTAwMDAgICAgIC0+IC0wCitkcWR2aTE4NSBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMCAgICAtPiAtMAorZHFkdmkxODYgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwICAgLT4gLTAKK2RxZHZpMTg3IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMDAgIC0+IC0wCitkcWR2aTE4OCBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAwMCAtPiAtMAorZHFkdmkxOTAgZGl2aWRlaW50IC0xICAgIC0xICAgICAgICAgLT4gIDEKK2RxZHZpMTkxIGRpdmlkZWludCAtMSAgICAtMTAgICAgICAgIC0+ICAwCitkcWR2aTE5MiBkaXZpZGVpbnQgLTEgICAgLTEwMCAgICAgICAtPiAgMAorZHFkdmkxOTMgZGl2aWRlaW50IC0xICAgIC0xMDAwICAgICAgLT4gIDAKK2RxZHZpMTk0IGRpdmlkZWludCAtMSAgICAtMTAwMDAgICAgIC0+ICAwCitkcWR2aTE5NSBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMCAgICAtPiAgMAorZHFkdmkxOTYgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwICAgLT4gIDAKK2RxZHZpMTk3IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMDAgIC0+ICAwCitkcWR2aTE5OCBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAwMCAtPiAgMAorCistLSBzb21lIGxvbmcgb3BlcmFuZCAoYXQgcD05KSBjYXNlcworZHFkdmkwNzAgZGl2aWRlaW50ICA5OTk5OTk5OTkgICAgIDEgIC0+ICA5OTk5OTk5OTkKK2RxZHZpMDcxIGRpdmlkZWludCAgOTk5OTk5OTk5LjQgICAxICAtPiAgOTk5OTk5OTk5CitkcWR2aTA3MiBkaXZpZGVpbnQgIDk5OTk5OTk5OS41ICAgMSAgLT4gIDk5OTk5OTk5OQorZHFkdmkwNzMgZGl2aWRlaW50ICA5OTk5OTk5OTkuOSAgIDEgIC0+ICA5OTk5OTk5OTkKK2RxZHZpMDc0IGRpdmlkZWludCAgOTk5OTk5OTk5Ljk5OSAxICAtPiAgOTk5OTk5OTk5CisKK2RxZHZpMDkwIGRpdmlkZWludCAgMC4gICAgICAgICAgICAxICAgIC0+ICAwCitkcWR2aTA5MSBkaXZpZGVpbnQgIC4wICAgICAgICAgICAgMSAgICAtPiAgMAorZHFkdmkwOTIgZGl2aWRlaW50ICAwLjAwICAgICAgICAgIDEgICAgLT4gIDAKK2RxZHZpMDkzIGRpdmlkZWludCAgMC4wMEUrOSAgICAgICAxICAgIC0+ICAwCitkcWR2aTA5NCBkaXZpZGVpbnQgIDAuMDAwMEUtNTAgICAgMSAgICAtPiAgMAorCitkcWR2aTEwMCBkaXZpZGVpbnQgIDEgIDEgICAtPiAxCitkcWR2aTEwMSBkaXZpZGVpbnQgIDEgIDIgICAtPiAwCitkcWR2aTEwMiBkaXZpZGVpbnQgIDEgIDMgICAtPiAwCitkcWR2aTEwMyBkaXZpZGVpbnQgIDEgIDQgICAtPiAwCitkcWR2aTEwNCBkaXZpZGVpbnQgIDEgIDUgICAtPiAwCitkcWR2aTEwNSBkaXZpZGVpbnQgIDEgIDYgICAtPiAwCitkcWR2aTEwNiBkaXZpZGVpbnQgIDEgIDcgICAtPiAwCitkcWR2aTEwNyBkaXZpZGVpbnQgIDEgIDggICAtPiAwCitkcWR2aTEwOCBkaXZpZGVpbnQgIDEgIDkgICAtPiAwCitkcWR2aTEwOSBkaXZpZGVpbnQgIDEgIDEwICAtPiAwCitkcWR2aTExMCBkaXZpZGVpbnQgIDEgIDEgICAtPiAxCitkcWR2aTExMSBkaXZpZGVpbnQgIDIgIDEgICAtPiAyCitkcWR2aTExMiBkaXZpZGVpbnQgIDMgIDEgICAtPiAzCitkcWR2aTExMyBkaXZpZGVpbnQgIDQgIDEgICAtPiA0CitkcWR2aTExNCBkaXZpZGVpbnQgIDUgIDEgICAtPiA1CitkcWR2aTExNSBkaXZpZGVpbnQgIDYgIDEgICAtPiA2CitkcWR2aTExNiBkaXZpZGVpbnQgIDcgIDEgICAtPiA3CitkcWR2aTExNyBkaXZpZGVpbnQgIDggIDEgICAtPiA4CitkcWR2aTExOCBkaXZpZGVpbnQgIDkgIDEgICAtPiA5CitkcWR2aTExOSBkaXZpZGVpbnQgIDEwIDEgICAtPiAxMAorCistLSBmcm9tIERpYWdCaWdEZWNpbWFsCitkcWR2aTEzMSBkaXZpZGVpbnQgIDEwMS4zICAgMSAgICAgLT4gIDEwMQorZHFkdmkxMzIgZGl2aWRlaW50ICAxMDEuMCAgIDEgICAgIC0+ICAxMDEKK2RxZHZpMTMzIGRpdmlkZWludCAgMTAxLjMgICAzICAgICAtPiAgMzMKK2RxZHZpMTM0IGRpdmlkZWludCAgMTAxLjAgICAzICAgICAtPiAgMzMKK2RxZHZpMTM1IGRpdmlkZWludCAgMi40ICAgICAxICAgICAtPiAgMgorZHFkdmkxMzYgZGl2aWRlaW50ICAyLjQwMCAgIDEgICAgIC0+ICAyCitkcWR2aTEzNyBkaXZpZGVpbnQgIDE4ICAgICAgMTggICAgLT4gIDEKK2RxZHZpMTM4IGRpdmlkZWludCAgMTEyMCAgICAxMDAwICAtPiAgMQorZHFkdmkxMzkgZGl2aWRlaW50ICAyLjQgICAgIDIgICAgIC0+ICAxCitkcWR2aTE0MCBkaXZpZGVpbnQgIDIuNDAwICAgMiAgICAgLT4gIDEKK2RxZHZpMTQxIGRpdmlkZWludCAgMC41ICAgICAyLjAwMCAtPiAgMAorZHFkdmkxNDIgZGl2aWRlaW50ICA4LjAwNSAgIDcgICAgIC0+ICAxCitkcWR2aTE0MyBkaXZpZGVpbnQgIDUgICAgICAgMiAgICAgLT4gIDIKK2RxZHZpMTQ0IGRpdmlkZWludCAgMCAgICAgICAyICAgICAtPiAgMAorZHFkdmkxNDUgZGl2aWRlaW50ICAwLjAwICAgIDIgICAgIC0+ICAwCisKKy0tIE90aGVycworZHFkdmkxNTAgZGl2aWRlaW50ICAxMjM0NSAgNC45OTkgIC0+ICAyNDY5CitkcWR2aTE1MSBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5ICAgLT4gIDI0NzMKK2RxZHZpMTUyIGRpdmlkZWludCAgMTIzNDUgIDQuOSAgICAtPiAgMjUxOQorZHFkdmkxNTMgZGl2aWRlaW50ICAxMjM0NSAgNSAgICAgIC0+ICAyNDY5CitkcWR2aTE1NCBkaXZpZGVpbnQgIDEyMzQ1ICA1LjEgICAgLT4gIDI0MjAKK2RxZHZpMTU1IGRpdmlkZWludCAgMTIzNDUgIDUuMDEgICAtPiAgMjQ2NAorZHFkdmkxNTYgZGl2aWRlaW50ICAxMjM0NSAgNS4wMDEgIC0+ICAyNDY4CitkcWR2aTE1NyBkaXZpZGVpbnQgICAgMTAxICA3LjYgICAgLT4gIDEzCisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgZGl2aWRlaW50IGJ5IDAKK2RxZHZpMjAxIGRpdmlkZWludCAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWR2aTIwMiBkaXZpZGVpbnQgIDAuMEU1ICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkdmkyMDMgZGl2aWRlaW50ICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZHZpMjA0IGRpdmlkZWludCAgMC4wMDAxIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIwNSBkaXZpZGVpbnQgIDAuMDEgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMDYgZGl2aWRlaW50ICAwLjEgICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpMjA3IGRpdmlkZWludCAgMSAgICAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIwOCBkaXZpZGVpbnQgIDEgICAgICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMDkgZGl2aWRlaW50IDEwICAgICAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpMjEwIGRpdmlkZWludCAxRSsxMDAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTIxMSBkaXZpZGVpbnQgMUUrMzgwICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMTQgZGl2aWRlaW50ICAtMC4wMDAxIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMTUgZGl2aWRlaW50ICAtMC4wMSAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMTYgZGl2aWRlaW50ICAtMC4xICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMTcgZGl2aWRlaW50ICAtMSAgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMTggZGl2aWRlaW50ICAtMSAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMTkgZGl2aWRlaW50IC0xMCAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMjAgZGl2aWRlaW50IC0xRSsxMDAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmkyMjEgZGl2aWRlaW50IC0xRSszODAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cKK2RxZHZpMjcwIGRpdmlkZWludCAxIDFlMzg0ICAgICAgICAgIC0+IDAKK2RxZHZpMjcxIGRpdmlkZWludCAxIDAuOWUzODQgICAgICAgIC0+IDAKK2RxZHZpMjcyIGRpdmlkZWludCAxIDAuOTllMzg0ICAgICAgIC0+IDAKK2RxZHZpMjczIGRpdmlkZWludCAxIDAuOTk5OTk5OTk5OTk5OTk5OWUzODQgICAgICAgLT4gMAorZHFkdmkyNzQgZGl2aWRlaW50IDllMzg0ICAgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMjc1IGRpdmlkZWludCA5LjllMzg0ICAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTI3NiBkaXZpZGVpbnQgOS45OWUzODQgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFkdmkyNzcgZGl2aWRlaW50IDkuOTk5OTk5OTk5OTk5OTk5ZTM4NCAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKK2RxZHZpMjgwIGRpdmlkZWludCAwLjEgOWUtMzgzICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTI4MSBkaXZpZGVpbnQgMC4xIDk5ZS0zODMgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFkdmkyODIgZGl2aWRlaW50IDAuMSA5OTllLTM4MyAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMjgzIGRpdmlkZWludCAwLjEgOWUtMzgyICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTI4NCBkaXZpZGVpbnQgMC4xIDk5ZS0zODIgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSBHRCBlZGdlIGNhc2VzOiBsaHMgc21hbGxlciB0aGFuIHJocyBidXQgbW9yZSBkaWdpdHMKK2RxZHZpMzAxICBkaXZpZGVpbnQgIDAuOSAgICAgIDIgICAgICAtPiAgMAorZHFkdmkzMDIgIGRpdmlkZWludCAgMC45ICAgICAgMi4wICAgIC0+ICAwCitkcWR2aTMwMyAgZGl2aWRlaW50ICAwLjkgICAgICAyLjEgICAgLT4gIDAKK2RxZHZpMzA0ICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMDAgICAtPiAgMAorZHFkdmkzMDUgIGRpdmlkZWludCAgMC45ICAgICAgMi4wMSAgIC0+ICAwCitkcWR2aTMwNiAgZGl2aWRlaW50ICAwLjEyICAgICAxICAgICAgLT4gIDAKK2RxZHZpMzA3ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMCAgICAtPiAgMAorZHFkdmkzMDggIGRpdmlkZWludCAgMC4xMiAgICAgMS4wMCAgIC0+ICAwCitkcWR2aTMwOSAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAgICAgLT4gIDAKK2RxZHZpMzEwICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMDAgICAtPiAgMAorZHFkdmkzMTEgIGRpdmlkZWludCAgMC4xMiAgICAgMiAgICAgIC0+ICAwCitkcWR2aTMxMiAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAgICAgLT4gIDAKK2RxZHZpMzEzICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMSAgICAtPiAgMAorZHFkdmkzMTQgIGRpdmlkZWludCAgMC4xMiAgICAgMi4wMCAgIC0+ICAwCitkcWR2aTMxNSAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAxICAgLT4gIDAKKworLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlCitkcWR2aTMzMCAgZGl2aWRlaW50ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2ICAxMCAgICAtPiAgMTIzNDU2Nzk4NzY1NDMyMTk4NzY1NDMyMTg5MDEyMzQ1CitkcWR2aTMzMSAgZGl2aWRlaW50ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2ICAgMSAgICAtPiAgMTIzNDU2Nzk4NzY1NDMyMTk4NzY1NDMyMTg5MDEyMzQ1NgorZHFkdmkzMzIgIGRpdmlkZWludCAgMTIzNDU2Nzk4NzY1NDMyMTk4NzY1NDMyMTg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTMzMyAgZGl2aWRlaW50ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdCitkcWR2aTEwNTEgZGl2aWRlaW50ICAxZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMTA1MiBkaXZpZGVpbnQgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFkdmkxMDUzIGRpdmlkZWludCAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcWR2aTEwNTQgZGl2aWRlaW50IC0xZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxZHZpMTA1NSBkaXZpZGVpbnQgIDFlLTI3NyAgMWUrMzExIC0+ICAwCitkcWR2aTEwNTYgZGl2aWRlaW50ICAxZS0yNzcgLTFlKzMxMSAtPiAtMAorZHFkdmkxMDU3IGRpdmlkZWludCAtMWUtMjc3ICAxZSszMTEgLT4gLTAKK2RxZHZpMTA1OCBkaXZpZGVpbnQgLTFlLTI3NyAtMWUrMzExIC0+ICAwCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorZHFkdmkxMDYwIGRpdmlkZWludCAxZS0yOTEgMWUrMTAxIC0+IDAKK2RxZHZpMTA2MSBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMiAtPiAwCitkcWR2aTEwNjIgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDMgLT4gMAorZHFkdmkxMDYzIGRpdmlkZWludCAxZS0yOTEgMWUrMTA0IC0+IDAKK2RxZHZpMTA2NCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNSAtPiAwCitkcWR2aTEwNjUgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDYgLT4gMAorZHFkdmkxMDY2IGRpdmlkZWludCAxZS0yOTEgMWUrMTA3IC0+IDAKK2RxZHZpMTA2NyBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwOCAtPiAwCitkcWR2aTEwNjggZGl2aWRlaW50IDFlLTI5MSAxZSsxMDkgLT4gMAorZHFkdmkxMDY5IGRpdmlkZWludCAxZS0yOTEgMWUrMTEwIC0+IDAKKworZHFkdmkxMTAxIGRpdmlkZWludCAgMS4wMDAwRS0zOTQgIDEgICAgIC0+IDAKK2RxZHZpMTEwMiBkaXZpZGVpbnQgIDEuMDAwRS0zOTQgICAxZSsxICAtPiAwCitkcWR2aTExMDMgZGl2aWRlaW50ICAxLjAwRS0zOTQgICAgMWUrMiAgLT4gMAorCitkcWR2aTExMTggZGl2aWRlaW50ICAxRS0zOTQgICAgICAgMWUrNCAgLT4gMAorZHFkdmkxMTE5IGRpdmlkZWludCAgM0UtMzk0ICAgICAgLTFlKzUgIC0+IC0wCitkcWR2aTExMjAgZGl2aWRlaW50ICA1RS0zOTQgICAgICAgMWUrNSAgLT4gMAorCitkcWR2aTExMjQgZGl2aWRlaW50ICAxRS0zOTQgICAgICAtMWUrNCAgLT4gLTAKK2RxZHZpMTEzMCBkaXZpZGVpbnQgIDMuMEUtMzk0ICAgIC0xZSs1ICAtPiAtMAorCitkcWR2aTExMzEgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMjAwIC0+IDAKK2RxZHZpMTEzMiBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsxOTkgLT4gMAorZHFkdmkxMTMzIGRpdmlkZWludCAgMS4wRS0xOTkgICAgIDFlKzE5OCAtPiAwCitkcWR2aTExMzQgZGl2aWRlaW50ICAyLjBFLTE5OSAgICAgMmUrMTk4IC0+IDAKK2RxZHZpMTEzNSBkaXZpZGVpbnQgIDQuMEUtMTk5ICAgICA0ZSsxOTggLT4gMAorCistLSBsb25nIG9wZXJhbmQgY2hlY2tzCitkcWR2aTQwMSBkaXZpZGVpbnQgMTIzNDU2NzgwMDAgMTAwIC0+IDEyMzQ1Njc4MAorZHFkdmk0MDIgZGl2aWRlaW50IDEgMTIzNDU2NzgwMDAgICAtPiAwCitkcWR2aTQwMyBkaXZpZGVpbnQgMTIzNDU2NzgwMCAgMTAgIC0+IDEyMzQ1Njc4MAorZHFkdmk0MDQgZGl2aWRlaW50IDEgMTIzNDU2NzgwMCAgICAtPiAwCitkcWR2aTQwNSBkaXZpZGVpbnQgMTIzNDU2Nzg5MCAgMTAgIC0+IDEyMzQ1Njc4OQorZHFkdmk0MDYgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MCAgICAtPiAwCitkcWR2aTQwNyBkaXZpZGVpbnQgMTIzNDU2Nzg5MSAgMTAgIC0+IDEyMzQ1Njc4OQorZHFkdmk0MDggZGl2aWRlaW50IDEgMTIzNDU2Nzg5MSAgICAtPiAwCitkcWR2aTQwOSBkaXZpZGVpbnQgMTIzNDU2Nzg5MDEgMTAwIC0+IDEyMzQ1Njc4OQorZHFkdmk0MTAgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MDEgICAtPiAwCitkcWR2aTQxMSBkaXZpZGVpbnQgMTIzNDU2Nzg5NiAgMTAgIC0+IDEyMzQ1Njc4OQorZHFkdmk0MTIgZGl2aWRlaW50IDEgMTIzNDU2Nzg5NiAgICAtPiAwCitkcWR2aTQxMyBkaXZpZGVpbnQgMTIzNDU2Nzg5NDggMTAwIC0+IDEyMzQ1Njc4OQorZHFkdmk0MTQgZGl2aWRlaW50IDEyMzQ1Njc4OTQ5IDEwMCAtPiAxMjM0NTY3ODkKK2RxZHZpNDE1IGRpdmlkZWludCAxMjM0NTY3ODk1MCAxMDAgLT4gMTIzNDU2Nzg5CitkcWR2aTQxNiBkaXZpZGVpbnQgMTIzNDU2Nzg5NTEgMTAwIC0+IDEyMzQ1Njc4OQorZHFkdmk0MTcgZGl2aWRlaW50IDEyMzQ1Njc4OTk5IDEwMCAtPiAxMjM0NTY3ODkKK2RxZHZpNDQxIGRpdmlkZWludCAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwCitkcWR2aTQ0MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAtPiAwCitkcWR2aTQ0MyBkaXZpZGVpbnQgMTIzNDU2NzgwMCAgMSAtPiAxMjM0NTY3ODAwCitkcWR2aTQ0NCBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwICAtPiAwCitkcWR2aTQ0NSBkaXZpZGVpbnQgMTIzNDU2Nzg5MCAgMSAtPiAxMjM0NTY3ODkwCitkcWR2aTQ0NiBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwICAtPiAwCitkcWR2aTQ0NyBkaXZpZGVpbnQgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxCitkcWR2aTQ0OCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAtPiAwCitkcWR2aTQ0OSBkaXZpZGVpbnQgMTIzNDU2Nzg5MDEgMSAtPiAxMjM0NTY3ODkwMQorZHFkdmk0NTAgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MDEgLT4gMAorZHFkdmk0NTEgZGl2aWRlaW50IDEyMzQ1Njc4OTYgIDEgLT4gMTIzNDU2Nzg5NgorZHFkdmk0NTIgZGl2aWRlaW50IDEgMTIzNDU2Nzg5NiAgLT4gMAorCistLSBtb3JlIHplcm9zLCBldGMuCitkcWR2aTUzMSBkaXZpZGVpbnQgNS4wMCAxRS0zICAgIC0+IDUwMDAKK2RxZHZpNTMyIGRpdmlkZWludCAwMC4wMCAwLjAwMCAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkdmk1MzMgZGl2aWRlaW50IDAwLjAwIDBFLTMgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcWR2aTUzNCBkaXZpZGVpbnQgIDAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxZHZpNTM1IGRpdmlkZWludCAtMCAgICAgMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFkdmk1MzYgZGl2aWRlaW50IC0wICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCisKK2RxZHZpNTQxIGRpdmlkZWludCAgMCAgICAtMSAgICAgLT4gLTAKK2RxZHZpNTQyIGRpdmlkZWludCAtMCAgICAtMSAgICAgLT4gIDAKK2RxZHZpNTQzIGRpdmlkZWludCAgMCAgICAgMSAgICAgLT4gIDAKK2RxZHZpNTQ0IGRpdmlkZWludCAtMCAgICAgMSAgICAgLT4gLTAKK2RxZHZpNTQ1IGRpdmlkZWludCAtMSAgICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTQ2IGRpdmlkZWludCAtMSAgICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTQ3IGRpdmlkZWludCAgMSAgICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTQ4IGRpdmlkZWludCAgMSAgICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworZHFkdmk1NTEgZGl2aWRlaW50ICAwLjAgIC0xICAgICAtPiAtMAorZHFkdmk1NTIgZGl2aWRlaW50IC0wLjAgIC0xICAgICAtPiAgMAorZHFkdmk1NTMgZGl2aWRlaW50ICAwLjAgICAxICAgICAtPiAgMAorZHFkdmk1NTQgZGl2aWRlaW50IC0wLjAgICAxICAgICAtPiAtMAorZHFkdmk1NTUgZGl2aWRlaW50IC0xLjAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NTYgZGl2aWRlaW50IC0xLjAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NTcgZGl2aWRlaW50ICAxLjAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFkdmk1NTggZGl2aWRlaW50ICAxLjAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworCitkcWR2aTU2MSBkaXZpZGVpbnQgIDAgICAgLTEuMCAgIC0+IC0wCitkcWR2aTU2MiBkaXZpZGVpbnQgLTAgICAgLTEuMCAgIC0+ICAwCitkcWR2aTU2MyBkaXZpZGVpbnQgIDAgICAgIDEuMCAgIC0+ICAwCitkcWR2aTU2NCBkaXZpZGVpbnQgLTAgICAgIDEuMCAgIC0+IC0wCitkcWR2aTU2NSBkaXZpZGVpbnQgLTEgICAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTU2NiBkaXZpZGVpbnQgLTEgICAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTU2NyBkaXZpZGVpbnQgIDEgICAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitkcWR2aTU2OCBkaXZpZGVpbnQgIDEgICAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCisKK2RxZHZpNTcxIGRpdmlkZWludCAgMC4wICAtMS4wICAgLT4gLTAKK2RxZHZpNTcyIGRpdmlkZWludCAtMC4wICAtMS4wICAgLT4gIDAKK2RxZHZpNTczIGRpdmlkZWludCAgMC4wICAgMS4wICAgLT4gIDAKK2RxZHZpNTc0IGRpdmlkZWludCAtMC4wICAgMS4wICAgLT4gLTAKK2RxZHZpNTc1IGRpdmlkZWludCAtMS4wICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTc2IGRpdmlkZWludCAtMS4wICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTc3IGRpdmlkZWludCAgMS4wICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KK2RxZHZpNTc4IGRpdmlkZWludCAgMS4wICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KKworLS0gU3BlY2lhbHMKK2RxZHZpNTgwIGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk1ODEgZGl2aWRlaW50ICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2RxZHZpNTgyIGRpdmlkZWludCAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcWR2aTU4MyBkaXZpZGVpbnQgIEluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFkdmk1ODQgZGl2aWRlaW50ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK2RxZHZpNTg1IGRpdmlkZWludCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkcWR2aTU4NiBkaXZpZGVpbnQgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZHFkdmk1ODcgZGl2aWRlaW50ICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTU4OCBkaXZpZGVpbnQgLTEwMDAgIEluZiAgIC0+IC0wCitkcWR2aTU4OSBkaXZpZGVpbnQgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNTkwIGRpdmlkZWludCAtMSAgICAgSW5mICAgLT4gLTAKK2RxZHZpNTkxIGRpdmlkZWludCAtMCAgICAgSW5mICAgLT4gLTAKK2RxZHZpNTkyIGRpdmlkZWludCAgMCAgICAgSW5mICAgLT4gIDAKK2RxZHZpNTkzIGRpdmlkZWludCAgMSAgICAgSW5mICAgLT4gIDAKK2RxZHZpNTk0IGRpdmlkZWludCAgMTAwMCAgSW5mICAgLT4gIDAKK2RxZHZpNTk1IGRpdmlkZWludCAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcWR2aTYwMCBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNjAxIGRpdmlkZWludCAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkcWR2aTYwMiBkaXZpZGVpbnQgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZHFkdmk2MDMgZGl2aWRlaW50IC1JbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RxZHZpNjA0IGRpdmlkZWludCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkcWR2aTYwNSBkaXZpZGVpbnQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFkdmk2MDYgZGl2aWRlaW50IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RxZHZpNjA3IGRpdmlkZWludCAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2MDggZGl2aWRlaW50IC0xMDAwICBJbmYgICAtPiAtMAorZHFkdmk2MDkgZGl2aWRlaW50IC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTYxMCBkaXZpZGVpbnQgLTEgICAgLUluZiAgIC0+ICAwCitkcWR2aTYxMSBkaXZpZGVpbnQgLTAgICAgLUluZiAgIC0+ICAwCitkcWR2aTYxMiBkaXZpZGVpbnQgIDAgICAgLUluZiAgIC0+IC0wCitkcWR2aTYxMyBkaXZpZGVpbnQgIDEgICAgLUluZiAgIC0+IC0wCitkcWR2aTYxNCBkaXZpZGVpbnQgIDEwMDAgLUluZiAgIC0+IC0wCitkcWR2aTYxNSBkaXZpZGVpbnQgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFkdmk2MjEgZGl2aWRlaW50ICBOYU4gLUluZiAgICAtPiAgTmFOCitkcWR2aTYyMiBkaXZpZGVpbnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RxZHZpNjIzIGRpdmlkZWludCAgTmFOIC0xICAgICAgLT4gIE5hTgorZHFkdmk2MjQgZGl2aWRlaW50ICBOYU4gLTAgICAgICAtPiAgTmFOCitkcWR2aTYyNSBkaXZpZGVpbnQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RxZHZpNjI2IGRpdmlkZWludCAgTmFOICAxICAgICAgLT4gIE5hTgorZHFkdmk2MjcgZGl2aWRlaW50ICBOYU4gIDEwMDAgICAtPiAgTmFOCitkcWR2aTYyOCBkaXZpZGVpbnQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RxZHZpNjI5IGRpdmlkZWludCAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFkdmk2MzAgZGl2aWRlaW50IC1JbmYgIE5hTiAgICAtPiAgTmFOCitkcWR2aTYzMSBkaXZpZGVpbnQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RxZHZpNjMyIGRpdmlkZWludCAtMSAgICBOYU4gICAgLT4gIE5hTgorZHFkdmk2MzMgZGl2aWRlaW50IC0wICAgIE5hTiAgICAtPiAgTmFOCitkcWR2aTYzNCBkaXZpZGVpbnQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RxZHZpNjM1IGRpdmlkZWludCAgMSAgICBOYU4gICAgLT4gIE5hTgorZHFkdmk2MzYgZGl2aWRlaW50ICAxMDAwIE5hTiAgICAtPiAgTmFOCitkcWR2aTYzNyBkaXZpZGVpbnQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZHFkdmk2NDEgZGl2aWRlaW50ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDIgZGl2aWRlaW50ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDMgZGl2aWRlaW50ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDQgZGl2aWRlaW50ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDUgZGl2aWRlaW50ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDYgZGl2aWRlaW50ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDcgZGl2aWRlaW50ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDggZGl2aWRlaW50ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NDkgZGl2aWRlaW50ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTAgZGl2aWRlaW50ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTEgZGl2aWRlaW50IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTIgZGl2aWRlaW50IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTMgZGl2aWRlaW50IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTQgZGl2aWRlaW50IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTUgZGl2aWRlaW50ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTYgZGl2aWRlaW50ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTcgZGl2aWRlaW50ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTggZGl2aWRlaW50ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NTkgZGl2aWRlaW50ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcWR2aTY2MSBkaXZpZGVpbnQgIE5hTjkgLUluZiAgIC0+ICBOYU45CitkcWR2aTY2MiBkaXZpZGVpbnQgIE5hTjggIDEwMDAgIC0+ICBOYU44CitkcWR2aTY2MyBkaXZpZGVpbnQgIE5hTjcgIEluZiAgIC0+ICBOYU43CitkcWR2aTY2NCBkaXZpZGVpbnQgLU5hTjYgIE5hTjUgIC0+IC1OYU42CitkcWR2aTY2NSBkaXZpZGVpbnQgLUluZiAgIE5hTjQgIC0+ICBOYU40CitkcWR2aTY2NiBkaXZpZGVpbnQgLTEwMDAgIE5hTjMgIC0+ICBOYU4zCitkcWR2aTY2NyBkaXZpZGVpbnQgIEluZiAgLU5hTjIgIC0+IC1OYU4yCisKK2RxZHZpNjcxIGRpdmlkZWludCAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY3MiBkaXZpZGVpbnQgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NzMgZGl2aWRlaW50ICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNjc0IGRpdmlkZWludCAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY3NSBkaXZpZGVpbnQgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NzYgZGl2aWRlaW50IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxZHZpNjc3IGRpdmlkZWludCAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTY3OCBkaXZpZGVpbnQgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFkdmk2NzkgZGl2aWRlaW50ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gR3l1cmlzIGV4YW1wbGUKK2RxZHZpNzAwIGRpdmlkZWludCA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0MyA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4OTAwMEUtNjE0MyAtPiAwCisKKy0tIE51bGwgdGVzdHMKK2RxZHZpOTAwIGRpdmlkZWludCAgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWR2aTkwMSBkaXZpZGVpbnQgICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUVuY29kZS5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUVuY29kZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZWRmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRW5jb2RlLmRlY1Rlc3QKQEAgLTAsMCArMSw0NzcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFFbmNvZGUuZGVjVGVzdCAtLSBkZWNpbWFsIHNpeHRlZW4tYnl0ZSBmb3JtYXQgdGVzdGNhc2VzICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMCwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gW1ByZXZpb3VzbHkgY2FsbGVkIGRlY2ltYWwxMjguZGVjVGVzdF0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBzZXQgb2YgdGVzdHMgaXMgZm9yIHRoZSBzaXh0ZWVuLWJ5dGUgY29uY3JldGUgcmVwcmVzZW50YXRpb24uCistLSBJdHMgY2hhcmFjdGVyaXN0aWNzIGFyZToKKy0tCistLSAgIDEgYml0ICBzaWduCistLSAgIDUgYml0cyBjb21iaW5hdGlvbiBmaWVsZAorLS0gIDEyIGJpdHMgZXhwb25lbnQgY29udGludWF0aW9uCistLSAxMTAgYml0cyBjb2VmZmljaWVudCBjb250aW51YXRpb24KKy0tCistLSBUb3RhbCBleHBvbmVudCBsZW5ndGggMTQgYml0cworLS0gVG90YWwgY29lZmZpY2llbnQgbGVuZ3RoIDExNCBiaXRzICgzNCBkaWdpdHMpCistLQorLS0gRWxpbWl0ID0gMTIyODcgKG1heGltdW0gZW5jb2RlZCBleHBvbmVudCkKKy0tIEVtYXggICA9ICA2MTQ0IChsYXJnZXN0IGV4cG9uZW50IHZhbHVlKQorLS0gRW1pbiAgID0gLTYxNDMgKHNtYWxsZXN0IGV4cG9uZW50IHZhbHVlKQorLS0gYmlhcyAgID0gIDYxNzYgKHN1YnRyYWN0ZWQgZnJvbSBlbmNvZGVkIGV4cG9uZW50KSA9IC1FdGlueQorCistLSBUaGUgdGVzdGNhc2VzIGhlcmUgaGF2ZSBvbmx5IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBkYXRhIG9uIHRoZQorLS0gJ2xlZnQtaGFuZC1zaWRlJzsgcm91bmRpbmcgZnJvbSBzdHJpbmdzIGlzIHRlc3RlZCBpbiAnYmFzZScKKy0tIHRlc3RjYXNlIGdyb3Vwcy4KKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCisKKy0tIEdlbmVyYWwgdGVzdGNhc2VzCistLSAobW9zdGx5IGRlcml2ZWQgZnJvbSB0aGUgU3RyYXdtYW4gNCBkb2N1bWVudCBhbmQgZXhhbXBsZXMpCitkZWNxMDAxIGFwcGx5ICAgI0EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03LjUwCitkZWNxMDAyIGFwcGx5ICAgLTcuNTAgICAgICAgICAgICAgLT4gI0EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCistLSBkZXJpdmF0aXZlIGNhbm9uaWNhbCBwbGFpbiBzdHJpbmdzCitkZWNxMDAzIGFwcGx5ICAgI0EyMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03LjUwRSszCitkZWNxMDA0IGFwcGx5ICAgLTcuNTBFKzMgICAgICAgICAgLT4gI0EyMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCitkZWNxMDA1IGFwcGx5ICAgI0EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03NTAKK2RlY3EwMDYgYXBwbHkgICAtNzUwICAgICAgICAgICAgICAtPiAjQTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKK2RlY3EwMDcgYXBwbHkgICAjQTIwN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTc1LjAKK2RlY3EwMDggYXBwbHkgICAtNzUuMCAgICAgICAgICAgICAtPiAjQTIwN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKK2RlY3EwMDkgYXBwbHkgICAjQTIwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTAuNzUwCitkZWNxMDEwIGFwcGx5ICAgLTAuNzUwICAgICAgICAgICAgLT4gI0EyMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCitkZWNxMDExIGFwcGx5ICAgI0EyMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC0wLjA3NTAKK2RlY3EwMTIgYXBwbHkgICAtMC4wNzUwICAgICAgICAgICAtPiAjQTIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKK2RlY3EwMTMgYXBwbHkgICAjQTIwNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTAuMDAwNzUwCitkZWNxMDE0IGFwcGx5ICAgLTAuMDAwNzUwICAgICAgICAgLT4gI0EyMDY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCitkZWNxMDE1IGFwcGx5ICAgI0EyMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC0wLjAwMDAwNzUwCitkZWNxMDE2IGFwcGx5ICAgLTAuMDAwMDA3NTAgICAgICAgLT4gI0EyMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCitkZWNxMDE3IGFwcGx5ICAgI0EyMDVjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03LjUwRS03CitkZWNxMDE4IGFwcGx5ICAgLTcuNTBFLTcgICAgICAgICAgLT4gI0EyMDVjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCisKKy0tIE5vcm1hbGl0eQorZGVjcTAyMCBhcHBseSAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtPiAjMjYwODEzNGI5YzFlMjhlNTZmM2MxMjcxNzc4MjM1MzQKK2RlY3EwMjEgYXBwbHkgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLT4gI2E2MDgxMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0CitkZWNxMDIyIGFwcGx5ICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgIC0+ICMyNjA4MDkxMjQ0OTEyNDQ5MTI0NDkxMjQ0OTEyNDQ5MQorCistLSBObWF4IGFuZCBzaW1pbGFyCitkZWNxMDMxIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorZGVjcTAzMiBhcHBseSAgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZGVjcTAzMyBhcHBseSAgIDEuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0RSs2MTQ0IC0+ICM0N2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNAorZGVjcTAzNCBhcHBseSAgICM0N2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNCAtPiAxLjIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNEUrNjE0NAorLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykKK2RlY3EwMzUgYXBwbHkgICAxLjIzRSs2MTQ0ICAgIC0+ICM0N2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxMDM2IGFwcGx5ICAgIzQ3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0CitkZWNxMDM3IGFwcGx5ICAgMUUrNjE0NCAgICAgICAtPiAjNDdmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTAzOCBhcHBseSAgICM0N2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAorCitkZWNxMDUxIGFwcGx5ICAgMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1CitkZWNxMDUyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1ICAgICAgIC0+IDEyMzQ1CitkZWNxMDUzIGFwcGx5ICAgMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTM0CitkZWNxMDU0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTM0ICAgICAgIC0+IDEyMzQKK2RlY3EwNTUgYXBwbHkgICAxMjMgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMKK2RlY3EwNTYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMgICAgICAgLT4gMTIzCitkZWNxMDU3IGFwcGx5ICAgMTIgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCitkZWNxMDU4IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAgICAgIC0+IDEyCitkZWNxMDU5IGFwcGx5ICAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkZWNxMDYwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IDEKK2RlY3EwNjEgYXBwbHkgICAxLjIzICAgICAgICAgICAgICAgICAgICAtPiAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMKK2RlY3EwNjIgYXBwbHkgICAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMgICAgICAgLT4gMS4yMworZGVjcTA2MyBhcHBseSAgIDEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNQorZGVjcTA2NCBhcHBseSAgICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNSAgICAgICAtPiAxMjMuNDUKKworLS0gTm1pbiBhbmQgYmVsb3cKK2RlY3EwNzEgYXBwbHkgICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzAwMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkZWNxMDcyIGFwcGx5ICAgIzAwMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IDFFLTYxNDMKK2RlY3EwNzMgYXBwbHkgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxMDc0IGFwcGx5ICAgIzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkZWNxMDc1IGFwcGx5ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMgIC0+ICMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZGVjcTA3NiBhcHBseSAgICMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworCitkZWNxMDc3IGFwcGx5ICAgMC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICMwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgIFN1Ym5vcm1hbAorZGVjcTA3OCBhcHBseSAgICMwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0ICBTdWJub3JtYWwKK2RlY3EwNzkgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMEUtNjE0MyAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgICAgU3Vibm9ybWFsCitkZWNxMDgwIGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgICAgICAgIC0+IDEuMEUtNjE3NSAgICAgICAgICAgICAgU3Vibm9ybWFsCitkZWNxMDgxIGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgIC0+ICMwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgIFN1Ym5vcm1hbAorZGVjcTA4MiBhcHBseSAgICMwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAxRS02MTc1ICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAorZGVjcTA4MyBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzICAtPiAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICBTdWJub3JtYWwKK2RlY3EwODQgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgICAgLT4gMUUtNjE3NiAgICAgICAgICAgICAgICAgU3Vibm9ybWFsCisKKy0tIHVuZGVyZmxvd3MgY2Fubm90IGJlIHRlc3RlZCBmb3Igc2ltcGxlIGNvcGllcywgY2hlY2sgZWRnZSBjYXNlcworZGVjcTA5MCBhcHBseSAgIDFlLTYxNzYgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbAorZGVjcTEwMCBhcHBseSAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWUtNjE3NiAtPiAjMDAwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIFN1Ym5vcm1hbAorCistLSBzYW1lIGFnYWluLCBuZWdhdGl2ZXMKKy0tIE5tYXggYW5kIHNpbWlsYXIKK2RlY3ExMjIgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkZWNxMTIzIGFwcGx5ICAgI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZGVjcTEyNCBhcHBseSAgLTEuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0RSs2MTQ0IC0+ICNjN2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNAorZGVjcTEyNSBhcHBseSAgICNjN2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNCAtPiAtMS4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzRFKzYxNDQKKy0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpCitkZWNxMTMwIGFwcGx5ICAtMS4yM0UrNjE0NCAgICAtPiAjYzdmZmQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTEzMSBhcHBseSAgICNjN2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4yMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQKK2RlY3ExMzIgYXBwbHkgIC0xRSs2MTQ0ICAgICAgIC0+ICNjN2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxMTMzIGFwcGx5ICAgI2M3ZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAorCitkZWNxMTUxIGFwcGx5ICAtMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1CitkZWNxMTUyIGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1ICAgICAgIC0+IC0xMjM0NQorZGVjcTE1MyBhcHBseSAgLTEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzNAorZGVjcTE1NCBhcHBseSAgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzNCAgICAgICAtPiAtMTIzNAorZGVjcTE1NSBhcHBseSAgLTEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMworZGVjcTE1NiBhcHBseSAgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMyAgICAgICAtPiAtMTIzCitkZWNxMTU3IGFwcGx5ICAtMTIgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCitkZWNxMTU4IGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAgICAgIC0+IC0xMgorZGVjcTE1OSBhcHBseSAgLTEgICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZGVjcTE2MCBhcHBseSAgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAtMQorZGVjcTE2MSBhcHBseSAgLTEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMworZGVjcTE2MiBhcHBseSAgICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMyAgICAgICAtPiAtMS4yMworZGVjcTE2MyBhcHBseSAgLTEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNQorZGVjcTE2NCBhcHBseSAgICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNSAgICAgICAtPiAtMTIzLjQ1CisKKy0tIE5taW4gYW5kIGJlbG93CitkZWNxMTcxIGFwcGx5ICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICM4MDA4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZGVjcTE3MiBhcHBseSAgICM4MDA4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAtMUUtNjE0MworZGVjcTE3MyBhcHBseSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3ExNzQgYXBwbHkgICAjODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkZWNxMTc1IGFwcGx5ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMgIC0+ICM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZGVjcTE3NiBhcHBseSAgICM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKKworZGVjcTE3NyBhcHBseSAgLTAuMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjODAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICBTdWJub3JtYWwKK2RlY3ExNzggYXBwbHkgICAjODAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQgIFN1Ym5vcm1hbAorZGVjcTE3OSBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwRS02MTQzICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICBTdWJub3JtYWwKK2RlY3ExODAgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICAgICAgLT4gLTEuMEUtNjE3NSAgICAgICAgICAgICAgU3Vibm9ybWFsCitkZWNxMTgxIGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgIC0+ICM4MDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgIFN1Ym5vcm1hbAorZGVjcTE4MiBhcHBseSAgICM4MDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAtMUUtNjE3NSAgICAgICAgICAgICAgICBTdWJub3JtYWwKK2RlY3ExODMgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgLT4gIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsCitkZWNxMTg0IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IC0xRS02MTc2ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKKworLS0gdW5kZXJmbG93IGVkZ2UgY2FzZXMKK2RlY3ExOTAgYXBwbHkgICAtMWUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgU3Vibm9ybWFsCitkZWNxMjAwIGFwcGx5ICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWUtNjE3NiAtPiAjODAwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIFN1Ym5vcm1hbAorCistLSB6ZXJvcworZGVjcTQwMCBhcHBseSAgIDBFLTgwMDAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjcTQwMSBhcHBseSAgIDBFLTYxNzcgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjcTQwMiBhcHBseSAgIDBFLTYxNzYgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTQwMyBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRS02MTc2CitkZWNxNDA0IGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTQwNSBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRS02MTc2CitkZWNxNDA2IGFwcGx5ICAgMEUtMiAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDA3IGFwcGx5ICAgIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDAuMDAKK2RlY3E0MDggYXBwbHkgICAwICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MDkgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMAorZGVjcTQxMCBhcHBseSAgIDBFKzMgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTQxMSBhcHBseSAgICMyMjA4YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszCitkZWNxNDEyIGFwcGx5ICAgMEUrNjExMSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDEzIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzYxMTEKKy0tIGNsYW1wZWQgemVyb3MuLi4KK2RlY3E0MTQgYXBwbHkgICAwRSs2MTEyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY3E0MTUgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrNjExMQorZGVjcTQxNiBhcHBseSAgIDBFKzYxNDQgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAorZGVjcTQxNyBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSs2MTExCitkZWNxNDE4IGFwcGx5ICAgMEUrODAwMCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNxNDE5IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzYxMTEKKworLS0gbmVnYXRpdmUgemVyb3MKK2RlY3E0MjAgYXBwbHkgIC0wRS04MDAwICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY3E0MjEgYXBwbHkgIC0wRS02MTc3ICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKK2RlY3E0MjIgYXBwbHkgIC0wRS02MTc2ICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E0MjMgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFLTYxNzYKK2RlY3E0MjQgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDI1IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRS02MTc2CitkZWNxNDI2IGFwcGx5ICAtMEUtMiAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDI3IGFwcGx5ICAgI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wLjAwCitkZWNxNDI4IGFwcGx5ICAtMCAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDI5IGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wCitkZWNxNDMwIGFwcGx5ICAtMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDhjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDMxIGFwcGx5ICAgI2EyMDhjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszCitkZWNxNDMyIGFwcGx5ICAtMEUrNjExMSAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNDMzIGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExCistLSBjbGFtcGVkIHplcm9zLi4uCitkZWNxNDM0IGFwcGx5ICAtMEUrNjExMiAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNxNDM1IGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExCitkZWNxNDM2IGFwcGx5ICAtMEUrNjE0NCAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNxNDM3IGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExCitkZWNxNDM4IGFwcGx5ICAtMEUrODAwMCAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCitkZWNxNDM5IGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExCisKKy0tIGV4cG9uZW50IGxlbmd0aHMKK2RlY3E0NDAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAgICAgLT4gNworZGVjcTQ0MSBhcHBseSAgIDcgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkZWNxNDQyIGFwcGx5ICAgIzIyMGE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgICAgIC0+IDdFKzkKK2RlY3E0NDMgYXBwbHkgICA3RSs5IC0+ICMyMjBhNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZGVjcTQ0NCBhcHBseSAgICMyMjIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgICAgICAtPiA3RSs5OQorZGVjcTQ0NSBhcHBseSAgIDdFKzk5IC0+ICMyMjIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZGVjcTQ0NiBhcHBseSAgICMyMzAxYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgICAgICAtPiA3RSs5OTkKK2RlY3E0NDcgYXBwbHkgICA3RSs5OTkgLT4gIzIzMDFjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkZWNxNDQ4IGFwcGx5ICAgIzQzZTNjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgICAgIC0+IDdFKzU5OTkKK2RlY3E0NDkgYXBwbHkgICA3RSs1OTk5IC0+ICM0M2UzYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworCistLSBTcGVjaWFscworZGVjcTUwMCBhcHBseSAgIEluZmluaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MDEgYXBwbHkgICAjNzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4NzggLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTAyIGFwcGx5ICAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5CitkZWNxNTAzIGFwcGx5ICAgIzc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5IC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTUwNCBhcHBseSAgICM3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQorZGVjcTUwNSBhcHBseSAgICM3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YSAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MDYgYXBwbHkgICAjN2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkKK2RlY3E1MDcgYXBwbHkgICAjN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2IgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTA4IGFwcGx5ICAgIzdiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5CisKK2RlY3E1MDkgYXBwbHkgICBOYU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTEwIGFwcGx5ICAgIzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjIC0+ICM3YzAwM2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YworZGVjcTUxMSBhcHBseSAgICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBOYU4KK2RlY3E1MTIgYXBwbHkgICAjN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2QgLT4gIzdjMDAzZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkCitkZWNxNTEzIGFwcGx5ICAgIzdkMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IE5hTgorZGVjcTUxNCBhcHBseSAgICM3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZSAtPiAjN2UwMDNlN2U3YzdlN2U3ZTdlN2M3ZTdlN2U3ZTdjN2UKK2RlY3E1MTUgYXBwbHkgICAjN2UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gc05hTgorZGVjcTUxNiBhcHBseSAgICM3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZiAtPiAjN2UwMDNmN2Y3YzdmN2Y3ZjdmN2M3ZjdmN2Y3ZjdjN2YKK2RlY3E1MTcgYXBwbHkgICAjN2YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gc05hTgorZGVjcTUxOCBhcHBseSAgICM3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiAtPiBzTmFOOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkZWNxNTE5IGFwcGx5ICAgIzdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgorCitkZWNxNTIwIGFwcGx5ICAgLUluZmluaXR5ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTUyMSBhcHBseSAgICNmODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3OCAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MjIgYXBwbHkgICAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5CitkZWNxNTIzIGFwcGx5ICAgI2Y5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5IC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZGVjcTUyNCBhcHBseSAgICNmOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkKK2RlY3E1MjUgYXBwbHkgICAjZmE3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2EgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTI2IGFwcGx5ICAgI2ZhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQorZGVjcTUyNyBhcHBseSAgICNmYjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YiAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1MjggYXBwbHkgICAjZmIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5CisKK2RlY3E1MjkgYXBwbHkgICAtTmFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gI2ZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkZWNxNTMwIGFwcGx5ICAgI2ZjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjIC0+ICNmYzAwM2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YworZGVjcTUzMSBhcHBseSAgICNmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtTmFOCitkZWNxNTMyIGFwcGx5ICAgI2ZkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkIC0+ICNmYzAwM2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZAorZGVjcTUzMyBhcHBseSAgICNmZDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtTmFOCitkZWNxNTM0IGFwcGx5ICAgI2ZlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlIC0+ICNmZTAwM2U3ZTdjN2U3ZTdlN2U3YzdlN2U3ZTdlN2M3ZQorZGVjcTUzNSBhcHBseSAgICNmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtc05hTgorZGVjcTUzNiBhcHBseSAgICNmZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZiAtPiAjZmUwMDNmN2Y3YzdmN2Y3ZjdmN2M3ZjdmN2Y3ZjdjN2YKK2RlY3E1MzcgYXBwbHkgICAjZmYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLXNOYU4KK2RlY3E1MzggYXBwbHkgICAjZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgLT4gLXNOYU45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RlY3E1MzkgYXBwbHkgICAjZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgLT4gI2ZlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCisKK2RlY3E1NDAgYXBwbHkgICBOYU4gICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1NDEgYXBwbHkgICBOYU4wICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RlY3E1NDIgYXBwbHkgICBOYU4xICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RlY3E1NDMgYXBwbHkgICBOYU4xMiAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKK2RlY3E1NDQgYXBwbHkgICBOYU43OSAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKK2RlY3E1NDUgYXBwbHkgICBOYU4xMjM0NSAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUKK2RlY3E1NDYgYXBwbHkgICBOYU4xMjM0NTYgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjhlNTYKK2RlY3E1NDcgYXBwbHkgICBOYU43OTk3OTkgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZjdmZGYKK2RlY3E1NDggYXBwbHkgICBOYU43OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTkgIC0+ICM3YzAwM2RmZjdmZGZmN2ZkZmY3ZmRmZjdmZGZmN2ZkZgorZGVjcTU0OSBhcHBseSAgIE5hTjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCitkZWNxNTUwIGFwcGx5ICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAjNmUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKKworLS0gZm9sZC1kb3duIGZ1bGwgc2VxdWVuY2UKK2RlY3E2MDEgYXBwbHkgICAxRSs2MTQ0ICAgICAgICAgICAgICAgICAtPiAjNDdmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYwMiBhcHBseSAgICM0N2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAorZGVjcTYwMyBhcHBseSAgIDFFKzYxNDMgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjA0IGFwcGx5ICAgIzQzZmZjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMKK2RlY3E2MDUgYXBwbHkgICAxRSs2MTQyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYwNiBhcHBseSAgICM0M2ZmYzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDIKK2RlY3E2MDcgYXBwbHkgICAxRSs2MTQxICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYwOCBhcHBseSAgICM0M2ZmYzAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MQorZGVjcTYwOSBhcHBseSAgIDFFKzYxNDAgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjEwIGFwcGx5ICAgIzQzZmZjMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDAKK2RlY3E2MTEgYXBwbHkgICAxRSs2MTM5ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYxMiBhcHBseSAgICM0M2ZmYzAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzkKK2RlY3E2MTMgYXBwbHkgICAxRSs2MTM4ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYxNCBhcHBseSAgICM0M2ZmYzAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzOAorZGVjcTYxNSBhcHBseSAgIDFFKzYxMzcgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjE2IGFwcGx5ICAgIzQzZmZjMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzcKK2RlY3E2MTcgYXBwbHkgICAxRSs2MTM2ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYxOCBhcHBseSAgICM0M2ZmYzAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzYKK2RlY3E2MTkgYXBwbHkgICAxRSs2MTM1ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYyMCBhcHBseSAgICM0M2ZmYzAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNQorZGVjcTYyMSBhcHBseSAgIDFFKzYxMzQgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjIyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzQKK2RlY3E2MjMgYXBwbHkgICAxRSs2MTMzICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYyNCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzMKK2RlY3E2MjUgYXBwbHkgICAxRSs2MTMyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYyNiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzMgorZGVjcTYyNyBhcHBseSAgIDFFKzYxMzEgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjI4IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzEKK2RlY3E2MjkgYXBwbHkgICAxRSs2MTMwICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYzMCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzAKK2RlY3E2MzEgYXBwbHkgICAxRSs2MTI5ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYzMiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMEUrNjEyOQorZGVjcTYzMyBhcHBseSAgIDFFKzYxMjggICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjM0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDBFKzYxMjgKK2RlY3E2MzUgYXBwbHkgICAxRSs2MTI3ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYzNiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDBFKzYxMjcKK2RlY3E2MzcgYXBwbHkgICAxRSs2MTI2ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTYzOCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrNjEyNgorZGVjcTYzOSBhcHBseSAgIDFFKzYxMjUgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjQwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDBFKzYxMjUKK2RlY3E2NDEgYXBwbHkgICAxRSs2MTI0ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTY0MiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDBFKzYxMjQKK2RlY3E2NDMgYXBwbHkgICAxRSs2MTIzICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAgQ2xhbXBlZAorZGVjcTY0NCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMEUrNjEyMworZGVjcTY0NSBhcHBseSAgIDFFKzYxMjIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMCBDbGFtcGVkCitkZWNxNjQ2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDBFKzYxMjIKK2RlY3E2NDcgYXBwbHkgICAxRSs2MTIxICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAgQ2xhbXBlZAorZGVjcTY0OCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDBFKzYxMjEKK2RlY3E2NDkgYXBwbHkgICAxRSs2MTIwICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAgQ2xhbXBlZAorZGVjcTY1MCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMEUrNjEyMAorZGVjcTY1MSBhcHBseSAgIDFFKzYxMTkgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMCBDbGFtcGVkCitkZWNxNjUyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDBFKzYxMTkKK2RlY3E2NTMgYXBwbHkgICAxRSs2MTE4ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAgQ2xhbXBlZAorZGVjcTY1NCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDBFKzYxMTgKK2RlY3E2NTUgYXBwbHkgICAxRSs2MTE3ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAgQ2xhbXBlZAorZGVjcTY1NiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMCAgICAgICAtPiAxLjAwMDAwMEUrNjExNworZGVjcTY1NyBhcHBseSAgIDFFKzYxMTYgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMCBDbGFtcGVkCitkZWNxNjU4IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwICAgICAgIC0+IDEuMDAwMDBFKzYxMTYKK2RlY3E2NTkgYXBwbHkgICAxRSs2MTE1ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAgQ2xhbXBlZAorZGVjcTY2MCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMCAgICAgICAtPiAxLjAwMDBFKzYxMTUKK2RlY3E2NjEgYXBwbHkgICAxRSs2MTE0ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAgQ2xhbXBlZAorZGVjcTY2MiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMCAgICAgICAtPiAxLjAwMEUrNjExNAorZGVjcTY2MyBhcHBseSAgIDFFKzYxMTMgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MCBDbGFtcGVkCitkZWNxNjY0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwICAgICAgIC0+IDEuMDBFKzYxMTMKK2RlY3E2NjUgYXBwbHkgICAxRSs2MTEyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgQ2xhbXBlZAorZGVjcTY2NiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgICAgICAtPiAxLjBFKzYxMTIKK2RlY3E2NjcgYXBwbHkgICAxRSs2MTExICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RlY3E2NjggYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUrNjExMQorZGVjcTY2OSBhcHBseSAgIDFFKzYxMTAgICAgICAgICAgICAgICAgIC0+ICM0M2ZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZGVjcTY3MCBhcHBseSAgICM0M2ZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAxRSs2MTEwCisKKy0tIFNlbGVjdGVkIERQRCBjb2RlcworZGVjcTcwMCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwCitkZWNxNzAxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAgICAgIC0+IDkKK2RlY3E3MDIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICAgLT4gMTAKK2RlY3E3MDMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkgICAgICAgLT4gMTkKK2RlY3E3MDQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAgICAgICAgLT4gMjAKK2RlY3E3MDUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkgICAgICAgLT4gMjkKK2RlY3E3MDYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAgICAgICAgLT4gMzAKK2RlY3E3MDcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkgICAgICAgLT4gMzkKK2RlY3E3MDggYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAgICAgICAgLT4gNDAKK2RlY3E3MDkgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkgICAgICAgLT4gNDkKK2RlY3E3MTAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAgICAgICAgLT4gNTAKK2RlY3E3MTEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkgICAgICAgLT4gNTkKK2RlY3E3MTIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAgICAgICAgLT4gNjAKK2RlY3E3MTMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkgICAgICAgLT4gNjkKK2RlY3E3MTQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAgICAgICAgLT4gNzAKK2RlY3E3MTUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEgICAgICAgLT4gNzEKK2RlY3E3MTYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIgICAgICAgLT4gNzIKK2RlY3E3MTcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMgICAgICAgLT4gNzMKK2RlY3E3MTggYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQgICAgICAgLT4gNzQKK2RlY3E3MTkgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUgICAgICAgLT4gNzUKK2RlY3E3MjAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYgICAgICAgLT4gNzYKK2RlY3E3MjEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcgICAgICAgLT4gNzcKK2RlY3E3MjIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzggICAgICAgLT4gNzgKK2RlY3E3MjMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkgICAgICAgLT4gNzkKKworZGVjcTczMCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5ZSAgICAgICAtPiA5OTQKK2RlY3E3MzEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOWYgICAgICAgLT4gOTk1CitkZWNxNzMyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmEwICAgICAgIC0+IDUyMAorZGVjcTczMyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJhMSAgICAgICAtPiA1MjEKKworLS0gRFBEOiBvbmUgb2YgZWFjaCBvZiB0aGUgaHVmZm1hbiBncm91cHMKK2RlY3E3NDAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZjcgICAgICAgLT4gNzc3CitkZWNxNzQxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2Y4ICAgICAgIC0+IDc3OAorZGVjcTc0MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNlYiAgICAgICAtPiA3ODcKK2RlY3E3NDMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzN2QgICAgICAgLT4gODc3CitkZWNxNzQ0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzlmICAgICAgIC0+IDk5NworZGVjcTc0NSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNiZiAgICAgICAtPiA5NzkKK2RlY3E3NDYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZGYgICAgICAgLT4gNzk5CitkZWNxNzQ3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZlICAgICAgIC0+IDg4OAorCisKKy0tIERQRCBhbGwtaGlnaHMgY2FzZXMgKGluY2x1ZGVzIHRoZSAyNCByZWR1bmRhbnQgY29kZXMpCitkZWNxNzUwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZlICAgICAgIC0+IDg4OAorZGVjcTc1MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2ZSAgICAgICAtPiA4ODgKK2RlY3E3NTIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNmUgICAgICAgLT4gODg4CitkZWNxNzUzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzZlICAgICAgIC0+IDg4OAorZGVjcTc1NCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ZiAgICAgICAtPiA4ODkKK2RlY3E3NTUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNmYgICAgICAgLT4gODg5CitkZWNxNzU2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjZmICAgICAgIC0+IDg4OQorZGVjcTc1NyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2ZiAgICAgICAtPiA4ODkKKworZGVjcTc2MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ZSAgICAgICAtPiA4OTgKK2RlY3E3NjEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxN2UgICAgICAgLT4gODk4CitkZWNxNzYyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjdlICAgICAgIC0+IDg5OAorZGVjcTc2MyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3ZSAgICAgICAtPiA4OTgKK2RlY3E3NjQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN2YgICAgICAgLT4gODk5CitkZWNxNzY1IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTdmICAgICAgIC0+IDg5OQorZGVjcTc2NiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3ZiAgICAgICAtPiA4OTkKK2RlY3E3NjcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzN2YgICAgICAgLT4gODk5CisKK2RlY3E3NzAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZWUgICAgICAgLT4gOTg4CitkZWNxNzcxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWVlICAgICAgIC0+IDk4OAorZGVjcTc3MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJlZSAgICAgICAtPiA5ODgKK2RlY3E3NzMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZWUgICAgICAgLT4gOTg4CitkZWNxNzc0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGVmICAgICAgIC0+IDk4OQorZGVjcTc3NSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFlZiAgICAgICAtPiA5ODkKK2RlY3E3NzYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyZWYgICAgICAgLT4gOTg5CitkZWNxNzc3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2VmICAgICAgIC0+IDk4OQorCitkZWNxNzgwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZlICAgICAgIC0+IDk5OAorZGVjcTc4MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFmZSAgICAgICAtPiA5OTgKK2RlY3E3ODIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyZmUgICAgICAgLT4gOTk4CitkZWNxNzgzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2ZlICAgICAgIC0+IDk5OAorZGVjcTc4NCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZiAgICAgICAtPiA5OTkKK2RlY3E3ODUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxZmYgICAgICAgLT4gOTk5CitkZWNxNzg2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmZmICAgICAgIC0+IDk5OQorZGVjcTc4NyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNmZiAgICAgICAtPiA5OTkKKworLS0gTWlzY2VsbGFuZW91cyAodGVzdGVycycgcXVlcmllcywgZXRjLikKKworZGVjcTc5MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYzAwMCAgICAgICAtPiAzMDAwMAorZGVjcTc5MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgwMCAgICAgICAtPiA4OTAwMDAKK2RlY3E3OTIgYXBwbHkgICAzMDAwMCAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGMwMDAKK2RlY3E3OTMgYXBwbHkgICA4OTAwMDAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ODAwCisKKy0tIHZhbHVlcyBhcm91bmQgW3VdaW50MzIgZWRnZXMgKHplcm9zIGRvbmUgZWFybGllcikKK2RlY3E4MDAgYXBwbHkgLTIxNDc0ODM2NDYgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NgorZGVjcTgwMSBhcHBseSAtMjE0NzQ4MzY0NyAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ3CitkZWNxODAyIGFwcGx5IC0yMTQ3NDgzNjQ4ICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDgKK2RlY3E4MDMgYXBwbHkgLTIxNDc0ODM2NDkgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OQorZGVjcTgwNCBhcHBseSAgMjE0NzQ4MzY0NiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ2CitkZWNxODA1IGFwcGx5ICAyMTQ3NDgzNjQ3ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDcKK2RlY3E4MDYgYXBwbHkgIDIxNDc0ODM2NDggIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OAorZGVjcTgwNyBhcHBseSAgMjE0NzQ4MzY0OSAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ5CitkZWNxODA4IGFwcGx5ICA0Mjk0OTY3Mjk0ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1NWEKK2RlY3E4MDkgYXBwbHkgIDQyOTQ5NjcyOTUgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU1YgorZGVjcTgxMCBhcHBseSAgNDI5NDk2NzI5NiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTdhCitkZWNxODExIGFwcGx5ICA0Mjk0OTY3Mjk3ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1N2IKKworZGVjcTgyMCBhcHBseSAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ2IC0+IC0yMTQ3NDgzNjQ2CitkZWNxODIxIGFwcGx5ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDcgLT4gLTIxNDc0ODM2NDcKK2RlY3E4MjIgYXBwbHkgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OCAtPiAtMjE0NzQ4MzY0OAorZGVjcTgyMyBhcHBseSAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ5IC0+IC0yMTQ3NDgzNjQ5CitkZWNxODI0IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDYgLT4gIDIxNDc0ODM2NDYKK2RlY3E4MjUgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NyAtPiAgMjE0NzQ4MzY0NworZGVjcTgyNiBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ4IC0+ICAyMTQ3NDgzNjQ4CitkZWNxODI3IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDkgLT4gIDIxNDc0ODM2NDkKK2RlY3E4MjggYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU1YSAtPiAgNDI5NDk2NzI5NAorZGVjcTgyOSBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTViIC0+ICA0Mjk0OTY3Mjk1CitkZWNxODMwIGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1N2EgLT4gIDQyOTQ5NjcyOTYKK2RlY3E4MzEgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU3YiAtPiAgNDI5NDk2NzI5NworCistLSBWRyB0ZXN0Y2FzZQorZGVjcTg0MCBhcHBseSAgICAjMjA4MDAwMDAwMDAwMDAwMEYyOTQwMDAwMDAxNzI2MzYgLT4gOC44MTEyNTAwMDAwMDAwMTM0OTQzNkUtMTU0OAorZGVjcTg0MSBhcHBseSAgICAjMjA4MDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAgLT4gOC4wMDAwMDAwMDAwMDAwMDAwMDBFLTE1NTAKK2RlY3E4NDIgYXBwbHkgICAgIzFFRjk4NDkwMDAwMDAwMDEwRjZFNEUwMDAwMDAwMDAwIC0+IDcuMDQ5MDAwMDAwMDAwMDEwNzk1NDg4MDAwMDAwMDAwMDAwRS0zMDk3CitkZWNxODQzIG11bHRpcGx5ICMyMDgwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMCAjMjA4MDAwMDAwMDAwMDAwMEYyOTQwMDAwMDAxNzI2MzYgLT4gIzFFRjk4NDkwMDAwMDAwMDEwRjZFNEUwMDAwMDAwMDAwIFJvdW5kZWQKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUZNQS5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUZNQS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ODQ1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRk1BLmRlY1Rlc3QKQEAgLTAsMCArMSwxNzg2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxRk1BLmRlY1Rlc3QgLS0gZGVjUXVhZCBGdXNlZCBNdWx0aXBseSBBZGQgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gVGhlc2UgdGVzdHMgY29tcHJlc2UgdGhyZWUgcGFydHM6CistLSAgIDEuIFNhbml0eSBjaGVja3MgYW5kIG90aGVyIHRocmVlLW9wZXJhbmQgdGVzdHMgKGVzcGVjaWFsbHkgdGhvc2UKKy0tICAgICAgd2hlcmUgdGhlIGZ1c2VkIG9wZXJhdGlvbiBtYWtlcyBhIGRpZmZlcmVuY2UpCistLSAgIDIuIE11bHRpcGx5IHRlc3RzICh0aGlyZCBvcGVyYW5kIGlzIG5ldXRyYWwgemVybyBbMEUrZW1heF0pCistLSAgIDMuIEFkZGl0aW9uIHRlc3RzIChmaXJzdCBvcGVyYW5kIGlzIDEpCistLSBUaGUgbXVsdGlwbHkgYW5kIGFkZGl0aW9uIHRlc3RzIGFyZSBleHRlbnNpdmUgYmVjYXVzZSBGTUEgbWF5IGhhdmUKKy0tIGl0cyBvd24gZGVkaWNhdGVkIG11bHRpcGxpY2F0aW9uIG9yIGFkZGl0aW9uIHJvdXRpbmUocyksIGFuZCB0aGV5CistLSBhbHNvIGluaGVyZW50bHkgY2hlY2sgdGhlIGxlZnQtdG8tcmlnaHQgcHJvcGVydGllcy4KKworLS0gU2FuaXR5IGNoZWNrcworZHFmbWEwMDAxIGZtYSAgMSAgIDEgICAxIC0+ICAgMgorZHFmbWEwMDAyIGZtYSAgMSAgIDEgICAyIC0+ICAgMworZHFmbWEwMDAzIGZtYSAgMiAgIDIgICAzIC0+ICAgNworZHFmbWEwMDA0IGZtYSAgOSAgIDkgICA5IC0+ICA5MAorZHFmbWEwMDA1IGZtYSAtMSAgIDEgICAxIC0+ICAgMAorZHFmbWEwMDA2IGZtYSAtMSAgIDEgICAyIC0+ICAgMQorZHFmbWEwMDA3IGZtYSAtMiAgIDIgICAzIC0+ICAtMQorZHFmbWEwMDA4IGZtYSAtOSAgIDkgICA5IC0+IC03MgorZHFmbWEwMDExIGZtYSAgMSAgLTEgICAxIC0+ICAgMAorZHFmbWEwMDEyIGZtYSAgMSAgLTEgICAyIC0+ICAgMQorZHFmbWEwMDEzIGZtYSAgMiAgLTIgICAzIC0+ICAtMQorZHFmbWEwMDE0IGZtYSAgOSAgLTkgICA5IC0+IC03MgorZHFmbWEwMDE1IGZtYSAgMSAgIDEgIC0xIC0+ICAgMAorZHFmbWEwMDE2IGZtYSAgMSAgIDEgIC0yIC0+ICAtMQorZHFmbWEwMDE3IGZtYSAgMiAgIDIgIC0zIC0+ICAgMQorZHFmbWEwMDE4IGZtYSAgOSAgIDkgIC05IC0+ICA3MgorCistLSBub24taW50ZWdlciBleGFjdHMKK2RxZm1hMDEwMCAgZm1hICAgIDI1LjIgICA2My42ICAgLTQzOCAgLT4gIDExNjQuNzIKK2RxZm1hMDEwMSAgZm1hICAgMC4zMDEgIDAuMzgwICAgIDMzNCAgLT4gIDMzNC4xMTQzODAKK2RxZm1hMDEwMiAgZm1hICAgIDQ5LjIgICAtNC44ICAgMjMuMyAgLT4gIC0yMTIuODYKK2RxZm1hMDEwMyAgZm1hICAgIDQuMjIgIDAuMDc5ICAtOTQuNiAgLT4gIC05NC4yNjY2MgorZHFmbWEwMTA0ICBmbWEgICAgIDkwMyAgMC43OTcgIDAuODg3ICAtPiAgNzIwLjU3OAorZHFmbWEwMTA1ICBmbWEgICAgNi4xMyAgIC0xNjEgICA2NS45ICAtPiAgLTkyMS4wMworZHFmbWEwMTA2ICBmbWEgICAgMjguMiAgICA3MjcgICA1LjQ1ICAtPiAgMjA1MDYuODUKK2RxZm1hMDEwNyAgZm1hICAgICAgIDQgICAgNjA1ICAgIDY4OCAgLT4gIDMxMDgKK2RxZm1hMDEwOCAgZm1hICAgIDkzLjMgICAwLjE5ICAwLjIyNiAgLT4gIDE3Ljk1MworZHFmbWEwMTA5ICBmbWEgICAwLjE2OSAgIC0zNDEgICA1LjYxICAtPiAgLTUyLjAxOQorZHFmbWEwMTEwICBmbWEgICAtNzIuMiAgICAgMzAgIC01MS4yICAtPiAgLTIyMTcuMgorZHFmbWEwMTExICBmbWEgIC0wLjQwOSAgICAgMTMgICAyMC40ICAtPiAgMTUuMDgzCitkcWZtYTAxMTIgIGZtYSAgICAgMzE3ICAgNzcuMCAgIDE5LjAgIC0+ICAyNDQyOC4wCitkcWZtYTAxMTMgIGZtYSAgICAgIDQ3ICAgNi41OCAgIDEuNjIgIC0+ICAzMTAuODgKK2RxZm1hMDExNCAgZm1hICAgIDEuMzYgIDAuOTg0ICAwLjQ5MyAgLT4gIDEuODMxMjQKK2RxZm1hMDExNSAgZm1hICAgIDcyLjcgICAgMjc0ICAgMS41NiAgLT4gIDE5OTIxLjM2CitkcWZtYTAxMTYgIGZtYSAgICAgMzM1ICAgIDg0NyAgICAgODMgIC0+ICAyODM4MjgKK2RxZm1hMDExNyAgZm1hICAgICA2NjYgIDAuMjQ3ICAgMjUuNCAgLT4gIDE4OS45MDIKK2RxZm1hMDExOCAgZm1hICAgLTMuODcgICAzLjA2ICAgNzguMCAgLT4gIDY2LjE1NzgKK2RxZm1hMDExOSAgZm1hICAgMC43NDIgICAgMTkyICAgMzUuNiAgLT4gIDE3OC4wNjQKK2RxZm1hMDEyMCAgZm1hICAgLTkxLjYgICA1LjI5ICAwLjE1MyAgLT4gIC00ODQuNDExCisKKy0tIGNhc2VzIHdoZXJlIHJlc3VsdCBpcyBkaWZmZXJlbnQgZnJvbSBzZXBhcmF0ZSBtdWx0aXBseSArIGFkZDsgZWFjaAorLS0gaXMgcHJlY2VkZWQgYnkgdGhlIHJlc3VsdCBvZiB1bmZ1c2VkIG11bHRpcGx5IGFuZCBhZGQKKy0tIFt0aGlzIGlzIGFib3V0IDIwJSBvZiBhbGwgc2ltaWxhciAgY2FzZXMgaW4gZ2VuZXJhbF0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDQuNTAwMTE5MDAyMTAwMDAwMjA5NDY5NzI5Mzc1Njk4Nzc4RSszOAorZHFmbWEwMjAyICBmbWEgICAgICAgNjg1Mzc5ODU4NjEzNTU4NjQ0NTcuNTY5NCAgICAgIDY1NjU4NzU3NjI5NzIwODY2MDUuODU5NjkgICAgICAgMzU4OTI2MzQ0NDcyMzY3NTMuMTcyODEyICAtPiAgNC41MDAxMTkwMDIxMDAwMDAyMDk0Njk3MjkzNzU2OTg3NzlFKzM4IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNS45OTYyNDg0Njk1ODQ1OTQzNDY4NTg4ODE2MjAxODU1MTRFKzQxCitkcWZtYTAyMDggIGZtYSAgICAgICAgICA4OTI2MTgyMjM0NDcyNzYyODU3MS45ICAgICAgNjcxNzU5NTg0NTY1NDEzMTM4MzMzNi44OSAgICAgIDUwNjEwMzY0OTcyODg3OTYwNzYyNjYuMTEgIC0+ICA1Ljk5NjI0ODQ2OTU4NDU5NDM0Njg1ODg4MTYyMDE4NTUxM0UrNDEgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjg5OTI0Mjk2ODY3ODI1NjkyNDAyMTU5NDc3MDg3NDA3MEUrMzQKK2RxZm1hMDIxMCAgZm1hICAgICAgIDMyMDUwNjIzNzIzMjQ0ODY4NS40OTU5NzEgICAgICAgNTkyNTc1OTc3NjQwMTc5NjcuOTg0NDQ4ICAgICAgMzIwNTYxNTIzOTA3NzcxMTU4OTkxMi44NSAgLT4gIDEuODk5MjQyOTY4Njc4MjU2OTI0MDIxNTk0NzcwODc0MDcxRSszNCBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDcuMDc4NTk2OTc4ODQyODA5NTM3OTI5Njk5OTU0ODYwMzA5RSszNworZHFmbWEwMjE1ICBmbWEgICAgICAgIDIyMDI0Nzg0MzI1OTExMjI2My4xNzk5NSAgICAgICAzMjEzOTIzNDAyODc5ODc5NzkwMDIuODAgICAgICAgIDQ3NTMzMjc5ODE5OTk3MTY3NjU1NDQwICAtPiAgNy4wNzg1OTY5Nzg4NDI4MDk1Mzc5Mjk2OTk5NTQ4NjAzMDhFKzM3IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMS4yMjQ5NTU2Njc1ODE0Mjc1NTk3NTQxMDY4NjIzNTA3NDNFKzM3CitkcWZtYTAyMjYgIGZtYSAgICAgICAyMzg4MDcyOTc5MDM2ODg4MDQxMi4xNDQ5ICAgICAgIDUxMjk0NzMzMzgyNzA2NDcxOS41NTQwNyAgICAgIDIxNzExNzQzODQxOTU5MDgyNDUwMi45NjMgIC0+ICAxLjIyNDk1NTY2NzU4MTQyNzU1OTc1NDEwNjg2MjM1MDc0NEUrMzcgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMi41MzAwOTQwNDMyNTMxNDg4MDYyNzIyNzYzNjg1NzkxNDRFKzQyCitkcWZtYTAyMjkgIGZtYSAgICAgICAgMjUzOTg5MjM1NzAxNjA5OTcwNi40MTI2ICAgICAgLTk5NjE0MjIzMjY2NzUwNDgxNzcxNzQzNSAgICAgICA1MzY4MjA4MjU5ODMxNTk0OTQyNS45MzcgIC0+ICAtMi41MzAwOTQwNDMyNTMxNDg4MDYyNzIyNzYzNjg1NzkxNDNFKzQyIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMS43MTMzODcwODU3NTk3MTE5NTQzMTkzOTE0MTI3ODg0NTRFKzM3CitkcWZtYTAyMzMgIGZtYSAgICAgICAgNDU0NjMzOTQ5MTM0MTYyNDQ2NC4wODA0ICAgICAgICAgICAgMzc2ODcxNzg2NDE2OTIwNTU4MSAgICAgICA4MzU3ODk4MDI3ODY5MDM5NTE4NC42MjAgIC0+ICAxLjcxMzM4NzA4NTc1OTcxMTk1NDMxOTM5MTQxMjc4ODQ1M0UrMzcgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICA0LjA2MjI3NTY2MzQwNTgyMzcxNjQxMTU3OTExNzc3MTU0N0UrMzUKK2RxZm1hMDIzNSAgZm1hICAgICAgICA0MDkyNDIxMTk0MzM4MTYxMzEuNDIyNTMgICAgICA5OTI2MzM4MTUxNjY3NDE1MDEuNDc3MjQ5ICAgICAgICA3MDE3OTYzNjU0NDQxNjc1NjEyOTU0NiAgLT4gIDQuMDYyMjc1NjYzNDA1ODIzNzE2NDExNTc5MTE3NzcxNTQ4RSszNSBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDYuMDAyNjA0MzI3NzMyNTY4NDkwNTYyMjQ5ODc1MzA2ODIzRSs0NworZHFmbWEwMjU4ICBmbWEgICAgICAgIDgxNzk0MTMzNjU5MzU0MTc0MjE1OTY4NCAgICAgICA3MzM4NjczMzk3NjkzMTA3MjkyNjY1OTggICAgICA3ODU2Mzg0NDY1MDk0MjQxOTMxMTgzMC44ICAtPiAgNi4wMDI2MDQzMjc3MzI1Njg0OTA1NjIyNDk4NzUzMDY4MjJFKzQ3IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTIuMDI3MDIyNTE0MzgxNDUyMTk3NTEwMTAzMzk1MjgzODc0RSszOQorZHFmbWEwMjY0ICBmbWEgICAgICAgMzg3NjE3MzEwMTY5MTYxMjcwLjczNzUzMiAgICAgLTUyMjk0NDI3MDM0MTQ5NTYwNjEyMTYuNjIgICAgICA1NzY2NTY2NjgxNjY1Mjk2NzE1MDQ3My41ICAtPiAgLTIuMDI3MDIyNTE0MzgxNDUyMTk3NTEwMTAzMzk1MjgzODczRSszOSBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC03Ljg1NjUyNTAzOTgwMzU1NDAwMTE0NDA4OTg0MjczMDM2MUUrMzcKK2RxZm1hMDI2NyAgZm1hICAgICAgLTg0NzY1NTg0NTcyMDU2NTI3NDcwMS4yMTAgICAgICAgIDkyNjg1MzE2NTY0MTE3NzM5LjgzOTg0ICAgICAgMjI3ODA5NTAwNDEzNzY0MjQ0MjkuNTY4NiAgLT4gIC03Ljg1NjUyNTAzOTgwMzU1NDAwMTE0NDA4OTg0MjczMDM2MEUrMzcgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjY5NTUxNTU2MjAxMTUyMDc0NjEyNTYwNzUwMjIzNzU1OUUrMzgKK2RxZm1hMDI2OCAgZm1hICAgICAgICAgIDIxNTkwMjkwMzY1MTI3Njg1LjM2NzUgICAgICAgNzg1MzEzOTIyNzU3NjU0MTM3OTQyNi44ICAgICAgIC0zMjc1ODU5NDM3MjM2MTgwLjc2MTU0NCAgLT4gIDEuNjk1NTE1NTYyMDExNTIwNzQ2MTI1NjA3NTAyMjM3NTU4RSszOCBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC04LjQ0ODQyMjkzNTc4MzI4OTIxOTc0ODExNTAzODAxNDcxMEUrMzgKK2RxZm1hMDI2OSAgZm1hICAgICAgLTk3NDMyMDYzNjI3Mjg2MjY5Ny45NzE1ODYgICAgICA4NjcxMDkxMDM2NDE4NjAyNDc0NDAuNzU2ICAgICAgICAtOTc3NTE3MDc3NTkwMjQ1NDc2Mi45OCAgLT4gIC04LjQ0ODQyMjkzNTc4MzI4OTIxOTc0ODExNTAzODAxNDcwOUUrMzggSW5leGFjdCBSb3VuZGVkCisKKy0tIENhc2VzIHdoZXJlIG11bHRpcGx5IHdvdWxkIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBpZiBzZXBhcmF0ZQorZHFmbWEwMzAwICBmbWEgICA5ZSs2MTQ0ICAgIDEwICAgMCAgICAgICAgIC0+IEluZmluaXR5ICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMDMwMSAgZm1hICAgMWUrNjE0NCAgICAxMCAgIDAgICAgICAgICAtPiBJbmZpbml0eSAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWZtYTAzMDIgIGZtYSAgIDFlKzYxNDQgICAgMTAgICAtMWUrNjE0NCAgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZAorZHFmbWEwMzAzICBmbWEgICAxZSs2MTQ0ICAgIDEwICAgLTllKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQKKy0tIHN1Ym5vcm1hbCBldGMuCitkcWZtYTAzMDUgIGZtYSAgIDFlLTYxNzYgICAgMC4xICAwICAgICAgICAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWZtYTAzMDYgIGZtYSAgIDFlLTYxNzYgICAgMC4xICAxICAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWZtYTAzMDcgIGZtYSAgIDFlLTYxNzYgICAgMC4xICAxZS02MTc2ICAgLT4gMUUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBJbmZpbml0ZSBjb21iaW5hdGlvbnMKK2RxZm1hMDgwMCBmbWEgIEluZiAgIEluZiAgIEluZiAgICAtPiAgSW5maW5pdHkKK2RxZm1hMDgwMSBmbWEgIEluZiAgIEluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTA4MDIgZm1hICBJbmYgIC1JbmYgICBJbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEwODAzIGZtYSAgSW5mICAtSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQorZHFmbWEwODA0IGZtYSAtSW5mICAgSW5mICAgSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMDgwNSBmbWEgLUluZiAgIEluZiAgLUluZiAgICAtPiAtSW5maW5pdHkKK2RxZm1hMDgwNiBmbWEgLUluZiAgLUluZiAgIEluZiAgICAtPiAgSW5maW5pdHkKK2RxZm1hMDgwNyBmbWEgLUluZiAgLUluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIFRyaXBsZSBOYU4gcHJvcGFnYXRpb24KK2RxZm1hMDkwMCBmbWEgIE5hTjIgIE5hTjMgIE5hTjUgICAtPiAgTmFOMgorZHFmbWEwOTAxIGZtYSAgMCAgICAgTmFOMyAgTmFONSAgIC0+ICBOYU4zCitkcWZtYTA5MDIgZm1hICAwICAgICAwICAgICBOYU41ICAgLT4gIE5hTjUKKy0tIGZpcnN0IHNOYU4gd2lucyAoY29uc2lkZXIgcU5hTiBmcm9tIGVhcmxpZXIgc05hTiBiZWluZworLS0gb3ZlcnJpZGRlbiBieSBhbiBzTmFOIGluIHRoaXJkIG9wZXJhbmQpCitkcWZtYTA5MDMgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMDkwNCBmbWEgIDAgICAgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEwOTA1IGZtYSAgMCAgICAgMCAgICAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTA5MDYgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMDkwNyBmbWEgIE5hTjcgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEwOTA4IGZtYSAgTmFONyAgTmFONSAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE1VTFRJUExJQ0FUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcWZtYTIwMDAgZm1hICAyICAgICAgMiAgIDBlKzYxNDQgIC0+IDQKK2RxZm1hMjAwMSBmbWEgIDIgICAgICAzICAgMGUrNjE0NCAgLT4gNgorZHFmbWEyMDAyIGZtYSAgNSAgICAgIDEgICAwZSs2MTQ0ICAtPiA1CitkcWZtYTIwMDMgZm1hICA1ICAgICAgMiAgIDBlKzYxNDQgIC0+IDEwCitkcWZtYTIwMDQgZm1hICAxLjIwICAgMiAgIDBlKzYxNDQgIC0+IDIuNDAKK2RxZm1hMjAwNSBmbWEgIDEuMjAgICAwICAgMGUrNjE0NCAgLT4gMC4wMAorZHFmbWEyMDA2IGZtYSAgMS4yMCAgLTIgICAwZSs2MTQ0ICAtPiAtMi40MAorZHFmbWEyMDA3IGZtYSAgLTEuMjAgIDIgICAwZSs2MTQ0ICAtPiAtMi40MAorZHFmbWEyMDA4IGZtYSAgLTEuMjAgIDAgICAwZSs2MTQ0ICAtPiAwLjAwCitkcWZtYTIwMDkgZm1hICAtMS4yMCAtMiAgIDBlKzYxNDQgIC0+IDIuNDAKK2RxZm1hMjAxMCBmbWEgIDUuMDkgNy4xICAgMGUrNjE0NCAgLT4gMzYuMTM5CitkcWZtYTIwMTEgZm1hICAyLjUgICAgNCAgIDBlKzYxNDQgIC0+IDEwLjAKK2RxZm1hMjAxMiBmbWEgIDIuNTAgICA0ICAgMGUrNjE0NCAgLT4gMTAuMDAKK2RxZm1hMjAxMyBmbWEgIDEuMjM0NTY3ODkgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgMGUrNjE0NCAgLT4gMS4yMzQ1Njc4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZAorZHFmbWEyMDE1IGZtYSAgMi41MCAgIDQgICAwZSs2MTQ0ICAtPiAxMC4wMAorZHFmbWEyMDE2IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5OTkgIDkuOTk5OTk5OTk5OTk5OTk5OTkgICAwZSs2MTQ0ICAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWZtYTIwMTcgZm1hICAgOS45OTk5OTk5OTk5OTk5OTk5OSAtOS45OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+IC05OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjAxOCBmbWEgIC05Ljk5OTk5OTk5OTk5OTk5OTk5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5ICAgMGUrNjE0NCAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTgwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFmbWEyMDE5IGZtYSAgLTkuOTk5OTk5OTk5OTk5OTk5OTkgLTkuOTk5OTk5OTk5OTk5OTk5OTkgICAwZSs2MTQ0ICAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHplcm9zLCBldGMuCitkcWZtYTIwMjEgZm1hICAgMCAgICAgIDAgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjAyMiBmbWEgICAwICAgICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMAorZHFmbWEyMDIzIGZtYSAgLTAgICAgICAwICAgICAgIDBlKzYxNDQgIC0+ICAwCitkcWZtYTIwMjQgZm1hICAtMCAgICAgLTAgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjAyNSBmbWEgIC0wLjAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyMDI2IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTIwMjcgZm1hICAtMC4wICAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjAyOCBmbWEgIC0wLjAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyMDMwIGZtYSAgIDUuMDAgICAxRS0zICAgIDBlKzYxNDQgIC0+ICAwLjAwNTAwCitkcWZtYTIwMzEgZm1hICAgMDAuMDAgIDAuMDAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAKK2RxZm1hMjAzMiBmbWEgICAwMC4wMCAgMEUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RxZm1hMjAzMyBmbWEgICAwRS0zICAgMDAuMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RxZm1hMjAzNCBmbWEgIC01LjAwICAgMUUtMyAgICAwZSs2MTQ0ICAtPiAtMC4wMDUwMAorZHFmbWEyMDM1IGZtYSAgLTAwLjAwICAwLjAwMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwCitkcWZtYTIwMzYgZm1hICAtMDAuMDAgIDBFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkcWZtYTIwMzcgZm1hICAtMEUtMyAgIDAwLjAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkcWZtYTIwMzggZm1hICAgNS4wMCAgLTFFLTMgICAgMGUrNjE0NCAgLT4gLTAuMDA1MDAKK2RxZm1hMjAzOSBmbWEgICAwMC4wMCAtMC4wMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMAorZHFmbWEyMDQwIGZtYSAgIDAwLjAwIC0wRS0zICAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZHFmbWEyMDQxIGZtYSAgIDBFLTMgIC0wMC4wMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZHFmbWEyMDQyIGZtYSAgLTUuMDAgIC0xRS0zICAgIDBlKzYxNDQgIC0+ICAwLjAwNTAwCitkcWZtYTIwNDMgZm1hICAtMDAuMDAgLTAuMDAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAKK2RxZm1hMjA0NCBmbWEgIC0wMC4wMCAtMEUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RxZm1hMjA0NSBmbWEgIC0wRS0zICAtMDAuMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorZHFmbWEyMDUwIGZtYSAgMS4yMCAzICAgICAgICAgIDBlKzYxNDQgIC0+IDMuNjAKK2RxZm1hMjA1MSBmbWEgIDcgICAgMyAgICAgICAgICAwZSs2MTQ0ICAtPiAyMQorZHFmbWEyMDUyIGZtYSAgMC45ICAwLjggICAgICAgIDBlKzYxNDQgIC0+IDAuNzIKK2RxZm1hMjA1MyBmbWEgIDAuOSAgLTAgICAgICAgICAwZSs2MTQ0ICAtPiAwLjAKK2RxZm1hMjA1NCBmbWEgIDY1NDMyMSA2NTQzMjEgICAwZSs2MTQ0ICAtPiA0MjgxMzU5NzEwNDEKKworZHFmbWEyMDYwIGZtYSAgMTIzLjQ1IDFlNyAgICAwZSs2MTQ0ICAtPiAgMS4yMzQ1RSs5CitkcWZtYTIwNjEgZm1hICAxMjMuNDUgMWU4ICAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzEwCitkcWZtYTIwNjIgZm1hICAxMjMuNDUgMWUrOSAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzExCitkcWZtYTIwNjMgZm1hICAxMjMuNDUgMWUxMCAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzEyCitkcWZtYTIwNjQgZm1hICAxMjMuNDUgMWUxMSAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzEzCitkcWZtYTIwNjUgZm1hICAxMjMuNDUgMWUxMiAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzE0CitkcWZtYTIwNjYgZm1hICAxMjMuNDUgMWUxMyAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzE1CisKKworLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzCistLSAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZHFmbWEyMDgwIGZtYSAgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgICAgMGUrNjE0NCAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKK2RxZm1hMjA4NCBmbWEgIDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAgIDBlKzYxNDQgIC0+IDEyMzAxMjM0NTY0NTY3OC45CitkcWZtYTIwOTAgZm1hICAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgICAwZSs2MTQ0ICAtPiAxMjMwMTIzNDU2NDU2NzguOQorZHFmbWEyMDk0IGZtYSAgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xICAgMGUrNjE0NCAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKKworLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2FycmllcworZHFmbWEyMTAxIGZtYSAgOSA5ICAgICAwZSs2MTQ0ICAtPiA4MQorZHFmbWEyMTAyIGZtYSAgOSA5MCAgICAgMGUrNjE0NCAgLT4gODEwCitkcWZtYTIxMDMgZm1hICA5IDkwMCAgICAgMGUrNjE0NCAgLT4gODEwMAorZHFmbWEyMTA0IGZtYSAgOSA5MDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMAorZHFmbWEyMTA1IGZtYSAgOSA5MDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwCitkcWZtYTIxMDYgZm1hICA5IDkwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMAorZHFmbWEyMTA3IGZtYSAgOSA5MDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMAorZHFmbWEyMTA4IGZtYSAgOSA5MDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwCitkcWZtYTIxMDkgZm1hICA5IDkwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMAorZHFmbWEyMTEwIGZtYSAgOSA5MDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMAorZHFmbWEyMTExIGZtYSAgOSA5MDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwCitkcWZtYTIxMTIgZm1hICA5IDkwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMAorZHFmbWEyMTEzIGZtYSAgOSA5MDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMAorZHFmbWEyMTE0IGZtYSAgOSA5MDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwCitkcWZtYTIxMTUgZm1hICA5IDkwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMAorLS1kcWZtYTIxMTYgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjExNyBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMAorLS1kcWZtYTIxMTggZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMAorLS1kcWZtYTIxMTkgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjEyMCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kcWZtYTIxMjEgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS1kcWZtYTIxMjIgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRxZm1hMjEyMyBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMKK2RxZm1hMjEzMSBmbWEgIDMgMyAgICAgMGUrNjE0NCAgLT4gOQorZHFmbWEyMTMyIGZtYSAgMyAzMCAgICAgMGUrNjE0NCAgLT4gOTAKK2RxZm1hMjEzMyBmbWEgIDMgMzAwICAgICAwZSs2MTQ0ICAtPiA5MDAKK2RxZm1hMjEzNCBmbWEgIDMgMzAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMAorZHFmbWEyMTM1IGZtYSAgMyAzMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAKK2RxZm1hMjEzNiBmbWEgIDMgMzAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAKK2RxZm1hMjEzNyBmbWEgIDMgMzAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMAorZHFmbWEyMTM4IGZtYSAgMyAzMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAKK2RxZm1hMjEzOSBmbWEgIDMgMzAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAKK2RxZm1hMjE0MCBmbWEgIDMgMzAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMAorZHFmbWEyMTQxIGZtYSAgMyAzMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAKK2RxZm1hMjE0MiBmbWEgIDMgMzAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAKK2RxZm1hMjE0MyBmbWEgIDMgMzAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMAorZHFmbWEyMTQ0IGZtYSAgMyAzMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAKK2RxZm1hMjE0NSBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAKK2RxZm1hMjE0NiBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTQ3IGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjE0OCBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjE0OSBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTUwIGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjE1MSBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxZm1hMjE1MiBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMTUzIGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworZHFmbWEyMjYzIGZtYSAgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgIDBlKzYxNDQgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4Mjk2IEluZXhhY3QgUm91bmRlZAorCistLSB0ZXN0IHNvbWUgZWRnZSBjYXNlcyB3aXRoIGV4YWN0IHJvdW5kaW5nCitkcWZtYTIzMDEgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOSAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzAyIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzAzIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDQgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzA1IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzA2IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMDcgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzA4IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzA5IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTAgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzExIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzEyIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTMgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzE0IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzE1IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWZtYTIzMTYgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFmbWEyMzE3IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIFJvdW5kZWQKK2RxZm1hMjMxOCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgUm91bmRlZAorZHFmbWEyMzE5IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNiAgUm91bmRlZAorZHFmbWEyMzIwIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzcgIFJvdW5kZWQKK2RxZm1hMjMyMSBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCAgUm91bmRlZAorZHFmbWEyMzIyIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOSAgUm91bmRlZAorZHFmbWEyMzIzIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNDAgIFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK2RxZm1hMjUwNCAgZm1hICAgMEUtNDI2MCAxMDAwRS00MjYwICAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgQ2xhbXBlZAorZHFmbWEyNTA1ICBmbWEgICAxMDBFKzQyNjAgMEUrNDI2MCAgICAgMGUrNjE0NCAgLT4gMEUrNjExMSBDbGFtcGVkCisKKy0tIG1peGVkIHdpdGggemVyb3MKK2RxZm1hMjU0MSBmbWEgICAwICAgIC0xICAgICAgIDBlKzYxNDQgIC0+ICAwCitkcWZtYTI1NDIgZm1hICAtMCAgICAtMSAgICAgICAwZSs2MTQ0ICAtPiAgMAorZHFmbWEyNTQzIGZtYSAgIDAgICAgIDEgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjU0NCBmbWEgIC0wICAgICAxICAgICAgIDBlKzYxNDQgIC0+ICAwCitkcWZtYTI1NDUgZm1hICAtMSAgICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMAorZHFmbWEyNTQ2IGZtYSAgLTEgICAgLTAgICAgICAgMGUrNjE0NCAgLT4gIDAKK2RxZm1hMjU0NyBmbWEgICAxICAgICAwICAgICAgIDBlKzYxNDQgIC0+ICAwCitkcWZtYTI1NDggZm1hICAgMSAgICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMAorCitkcWZtYTI1NTEgZm1hICAgMC4wICAtMSAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCitkcWZtYTI1NTIgZm1hICAtMC4wICAtMSAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCitkcWZtYTI1NTMgZm1hICAgMC4wICAgMSAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCitkcWZtYTI1NTQgZm1hICAtMC4wICAgMSAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCitkcWZtYTI1NTUgZm1hICAtMS4wICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCitkcWZtYTI1NTYgZm1hICAtMS4wICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCitkcWZtYTI1NTcgZm1hICAgMS4wICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCitkcWZtYTI1NTggZm1hICAgMS4wICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMC4wCisKK2RxZm1hMjU2MSBmbWEgICAwICAgIC0xLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU2MiBmbWEgIC0wICAgIC0xLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU2MyBmbWEgICAwICAgICAxLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU2NCBmbWEgIC0wICAgICAxLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU2NSBmbWEgIC0xICAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU2NiBmbWEgIC0xICAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU2NyBmbWEgICAxICAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKK2RxZm1hMjU2OCBmbWEgICAxICAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAKKworZHFmbWEyNTcxIGZtYSAgIDAuMCAgLTEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjU3MiBmbWEgIC0wLjAgIC0xLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1NzMgZm1hICAgMC4wICAgMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTc0IGZtYSAgLTAuMCAgIDEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjU3NSBmbWEgIC0xLjAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1NzYgZm1hICAtMS4wICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTc3IGZtYSAgIDEuMCAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjU3OCBmbWEgICAxLjAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1NzkgZm1hICAgMS4wICAgMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAorZHFmbWEyNTMwIGZtYSAgLTEuMCAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjUzMSBmbWEgIC0xLjAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1MzIgZm1hICAgMS4wICAtMC4wICAgIC0wZSs2MTQ0ICAtPiAtMC4wMAorZHFmbWEyNTMzIGZtYSAgIDEuMCAgIDAuMCAgICAtMGUrNjE0NCAgLT4gIDAuMDAKK2RxZm1hMjUzNCBmbWEgIC0xLjAgIC0wLjAgICAgLTBlKzYxNDQgIC0+ICAwLjAwCitkcWZtYTI1MzUgZm1hICAtMS4wICAgMC4wICAgIC0wZSs2MTQ0ICAtPiAtMC4wMAorCisKKy0tIFNwZWNpYWxzCitkcWZtYTI1ODAgZm1hICAgSW5mICAtSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjU4MSBmbWEgICBJbmYgIC0xMDAwICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNTgyIGZtYSAgIEluZiAgLTEgICAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI1ODMgZm1hICAgSW5mICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNTg0IGZtYSAgIEluZiAgIDAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjU4NSBmbWEgICBJbmYgICAxICAgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQorZHFmbWEyNTg2IGZtYSAgIEluZiAgIDEwMDAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5CitkcWZtYTI1ODcgZm1hICAgSW5mICAgSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjU4OCBmbWEgIC0xMDAwICBJbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNTg5IGZtYSAgLUluZiAgIEluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI1OTAgZm1hICAtMSAgICAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjU5MSBmbWEgIC0wICAgICBJbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI1OTIgZm1hICAgMCAgICAgSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNTkzIGZtYSAgIDEgICAgIEluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5CitkcWZtYTI1OTQgZm1hICAgMTAwMCAgSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjU5NSBmbWEgICBJbmYgICBJbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQorCitkcWZtYTI2MDAgZm1hICAtSW5mICAtSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjYwMSBmbWEgIC1JbmYgIC0xMDAwICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQorZHFmbWEyNjAyIGZtYSAgLUluZiAgLTEgICAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5CitkcWZtYTI2MDMgZm1hICAtSW5mICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjA0IGZtYSAgLUluZiAgIDAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjYwNSBmbWEgIC1JbmYgICAxICAgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNjA2IGZtYSAgLUluZiAgIDEwMDAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI2MDcgZm1hICAtSW5mICAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjYwOCBmbWEgIC0xMDAwICBJbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorZHFmbWEyNjA5IGZtYSAgLUluZiAgLUluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5CitkcWZtYTI2MTAgZm1hICAtMSAgICAtSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKK2RxZm1hMjYxMSBmbWEgIC0wICAgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2MTIgZm1hICAgMCAgICAtSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjEzIGZtYSAgIDEgICAgLUluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5CitkcWZtYTI2MTQgZm1hICAgMTAwMCAtSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKK2RxZm1hMjYxNSBmbWEgICBJbmYgIC1JbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQorCitkcWZtYTI2MjEgZm1hICAgTmFOIC1JbmYgICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjIgZm1hICAgTmFOIC0xMDAwICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjMgZm1hICAgTmFOIC0xICAgICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjQgZm1hICAgTmFOIC0wICAgICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjUgZm1hICAgTmFOICAwICAgICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjYgZm1hICAgTmFOICAxICAgICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjcgZm1hICAgTmFOICAxMDAwICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjggZm1hICAgTmFOICBJbmYgICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MjkgZm1hICAgTmFOICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzAgZm1hICAtSW5mICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzEgZm1hICAtMTAwMCBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzIgZm1hICAtMSAgICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzMgZm1hICAtMCAgICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzQgZm1hICAgMCAgICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzUgZm1hICAgMSAgICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzYgZm1hICAgMTAwMCBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCitkcWZtYTI2MzcgZm1hICAgSW5mICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOCisKK2RxZm1hMjY0MSBmbWEgICBzTmFOIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NDIgZm1hICAgc05hTiAtMTAwMCAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjQzIGZtYSAgIHNOYU4gLTEgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY0NCBmbWEgICBzTmFOIC0wICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NDUgZm1hICAgc05hTiAgMCAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjQ2IGZtYSAgIHNOYU4gIDEgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY0NyBmbWEgICBzTmFOICAxMDAwICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NDggZm1hICAgc05hTiAgTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjQ5IGZtYSAgIHNOYU4gc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY1MCBmbWEgICBOYU4gIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NTEgZm1hICAtSW5mICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjUyIGZtYSAgLTEwMDAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY1MyBmbWEgIC0xICAgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NTQgZm1hICAtMCAgICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjU1IGZtYSAgIDAgICAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY1NiBmbWEgICAxICAgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NTcgZm1hICAgMTAwMCBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjU4IGZtYSAgIEluZiAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY1OSBmbWEgICBOYU4gIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxZm1hMjY2MSBmbWEgICBOYU45IC1JbmYgICAgIDBlKzYxNDQgIC0+ICBOYU45CitkcWZtYTI2NjIgZm1hICAgTmFOOCAgOTk5ICAgICAwZSs2MTQ0ICAtPiAgTmFOOAorZHFmbWEyNjYzIGZtYSAgIE5hTjcxIEluZiAgICAgMGUrNjE0NCAgLT4gIE5hTjcxCitkcWZtYTI2NjQgZm1hICAgTmFONiAgTmFONSAgICAwZSs2MTQ0ICAtPiAgTmFONgorZHFmbWEyNjY1IGZtYSAgLUluZiAgIE5hTjQgICAgMGUrNjE0NCAgLT4gIE5hTjQKK2RxZm1hMjY2NiBmbWEgIC05OTkgICBOYU4zMyAgIDBlKzYxNDQgIC0+ICBOYU4zMworZHFmbWEyNjY3IGZtYSAgIEluZiAgIE5hTjIgICAgMGUrNjE0NCAgLT4gIE5hTjIKKworZHFmbWEyNjcxIGZtYSAgIHNOYU45OSAtSW5mICAgICAgMGUrNjE0NCAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NzIgZm1hICAgc05hTjk4IC0xMSAgICAgICAwZSs2MTQ0ICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY3MyBmbWEgICBzTmFOOTcgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjc0IGZtYSAgIHNOYU4xNiBzTmFOOTQgICAgMGUrNjE0NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NzUgZm1hICAgTmFOOTUgIHNOYU45MyAgICAwZSs2MTQ0ICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY3NiBmbWEgIC1JbmYgICAgc05hTjkyICAgIDBlKzYxNDQgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjc3IGZtYSAgIDA4OCAgICBzTmFOOTEgICAgMGUrNjE0NCAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2NzggZm1hICAgSW5mICAgIHNOYU45MCAgICAwZSs2MTQ0ICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY3OSBmbWEgICBOYU4gICAgc05hTjg5ICAgIDBlKzYxNDQgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkcWZtYTI2ODEgZm1hICAtTmFOOSAtSW5mICAgICAwZSs2MTQ0ICAtPiAtTmFOOQorZHFmbWEyNjgyIGZtYSAgLU5hTjggIDk5OSAgICAgMGUrNjE0NCAgLT4gLU5hTjgKK2RxZm1hMjY4MyBmbWEgIC1OYU43MSBJbmYgICAgIDBlKzYxNDQgIC0+IC1OYU43MQorZHFmbWEyNjg0IGZtYSAgLU5hTjYgLU5hTjUgICAgMGUrNjE0NCAgLT4gLU5hTjYKK2RxZm1hMjY4NSBmbWEgIC1JbmYgIC1OYU40ICAgIDBlKzYxNDQgIC0+IC1OYU40CitkcWZtYTI2ODYgZm1hICAtOTk5ICAtTmFOMzMgICAwZSs2MTQ0ICAtPiAtTmFOMzMKK2RxZm1hMjY4NyBmbWEgICBJbmYgIC1OYU4yICAgIDBlKzYxNDQgIC0+IC1OYU4yCisKK2RxZm1hMjY5MSBmbWEgIC1zTmFOOTkgLUluZiAgICAgIDBlKzYxNDQgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjkyIGZtYSAgLXNOYU45OCAtMTEgICAgICAgMGUrNjE0NCAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2OTMgZm1hICAtc05hTjk3ICBOYU4gICAgICAwZSs2MTQ0ICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY5NCBmbWEgIC1zTmFOMTYgLXNOYU45NCAgIDBlKzYxNDQgIC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjk1IGZtYSAgLU5hTjk1ICAtc05hTjkzICAgMGUrNjE0NCAgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2OTYgZm1hICAtSW5mICAgIC1zTmFOOTIgICAwZSs2MTQ0ICAtPiAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxZm1hMjY5NyBmbWEgICAwODggICAgLXNOYU45MSAgIDBlKzYxNDQgIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFmbWEyNjk4IGZtYSAgIEluZiAgICAtc05hTjkwICAgMGUrNjE0NCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI2OTkgZm1hICAtTmFOICAgIC1zTmFOODkgICAwZSs2MTQ0ICAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworZHFmbWEyNzAxIGZtYSAgLU5hTiAgLUluZiAgICAgMGUrNjE0NCAgLT4gLU5hTgorZHFmbWEyNzAyIGZtYSAgLU5hTiAgIDk5OSAgICAgMGUrNjE0NCAgLT4gLU5hTgorZHFmbWEyNzAzIGZtYSAgLU5hTiAgIEluZiAgICAgMGUrNjE0NCAgLT4gLU5hTgorZHFmbWEyNzA0IGZtYSAgLU5hTiAgLU5hTiAgICAgMGUrNjE0NCAgLT4gLU5hTgorZHFmbWEyNzA1IGZtYSAgLUluZiAgLU5hTjAgICAgMGUrNjE0NCAgLT4gLU5hTgorZHFmbWEyNzA2IGZtYSAgLTk5OSAgLU5hTiAgICAgMGUrNjE0NCAgLT4gLU5hTgorZHFmbWEyNzA3IGZtYSAgIEluZiAgLU5hTiAgICAgMGUrNjE0NCAgLT4gLU5hTgorCitkcWZtYTI3MTEgZm1hICAtc05hTiAgIC1JbmYgICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTIgZm1hICAtc05hTiAgIC0xMSAgICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTMgZm1hICAtc05hTjAwICBOYU4gICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTQgZm1hICAtc05hTiAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTUgZm1hICAtTmFOICAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTYgZm1hICAtSW5mICAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTcgZm1hICAgMDg4ICAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTggZm1hICAgSW5mICAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI3MTkgZm1hICAtTmFOICAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cworLS0gc2lnbnMKK2RxZm1hMjc1MSBmbWEgICAxZSs0Mjc3ICAxZSszMzExICAgMGUrNjE0NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzUyIGZtYSAgIDFlKzQyNzcgLTFlKzMzMTEgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI3NTMgZm1hICAtMWUrNDI3NyAgMWUrMzMxMSAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjc1NCBmbWEgIC0xZSs0Mjc3IC0xZSszMzExICAgMGUrNjE0NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFmbWEyNzU1IGZtYSAgIDFlLTQyNzcgIDFlLTMzMTEgICAwZSs2MTQ0ICAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWZtYTI3NTYgZm1hICAgMWUtNDI3NyAtMWUtMzMxMSAgIDBlKzYxNDQgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjc1NyBmbWEgIC0xZS00Mjc3ICAxZS0zMzExICAgMGUrNjE0NCAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFmbWEyNzU4IGZtYSAgLTFlLTQyNzcgLTFlLTMzMTEgICAwZSs2MTQ0ICAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorZHFmbWEyNzYwIGZtYSAgMWUtNjA2OSAxZS0xMDEgICAwZSs2MTQ0ICAtPiAxRS02MTcwIFN1Ym5vcm1hbAorZHFmbWEyNzYxIGZtYSAgMWUtNjA2OSAxZS0xMDIgICAwZSs2MTQ0ICAtPiAxRS02MTcxIFN1Ym5vcm1hbAorZHFmbWEyNzYyIGZtYSAgMWUtNjA2OSAxZS0xMDMgICAwZSs2MTQ0ICAtPiAxRS02MTcyIFN1Ym5vcm1hbAorZHFmbWEyNzYzIGZtYSAgMWUtNjA2OSAxZS0xMDQgICAwZSs2MTQ0ICAtPiAxRS02MTczIFN1Ym5vcm1hbAorZHFmbWEyNzY0IGZtYSAgMWUtNjA2OSAxZS0xMDUgICAwZSs2MTQ0ICAtPiAxRS02MTc0IFN1Ym5vcm1hbAorZHFmbWEyNzY1IGZtYSAgMWUtNjA2OSAxZS0xMDYgICAwZSs2MTQ0ICAtPiAxRS02MTc1IFN1Ym5vcm1hbAorZHFmbWEyNzY2IGZtYSAgMWUtNjA2OSAxZS0xMDcgICAwZSs2MTQ0ICAtPiAxRS02MTc2IFN1Ym5vcm1hbAorZHFmbWEyNzY3IGZtYSAgMWUtNjA2OSAxZS0xMDggICAwZSs2MTQ0ICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjc2OCBmbWEgIDFlLTYwNjkgMWUtMTA5ICAgMGUrNjE0NCAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWZtYTI3NjkgZm1hICAxZS02MDY5IDFlLTExMCAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQorZHFmbWEyNzcwIGZtYSAgMWUrNDAgMWUrNjEwMSAgIDBlKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQxIENsYW1wZWQKK2RxZm1hMjc3MSBmbWEgIDFlKzQwIDFlKzYxMDIgICAwZSs2MTQ0ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDIgIENsYW1wZWQKK2RxZm1hMjc3MiBmbWEgIDFlKzQwIDFlKzYxMDMgICAwZSs2MTQ0ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzICBDbGFtcGVkCitkcWZtYTI3NzMgZm1hICAxZSs0MCAxZSs2MTA0ICAgMGUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgIENsYW1wZWQKK2RxZm1hMjc3NCBmbWEgIDFlKzQwIDFlKzYxMDUgICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjc3NSBmbWEgIDFlKzQwIDFlKzYxMDYgICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjc3NiBmbWEgIDFlKzQwIDFlKzYxMDcgICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjc3NyBmbWEgIDFlKzQwIDFlKzYxMDggICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjc3OCBmbWEgIDFlKzQwIDFlKzYxMDkgICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjc3OSBmbWEgIDFlKzQwIDFlKzYxMTAgICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworZHFmbWEyODAxIGZtYSAgIDEuMDAwMEUtNjE3MiAgMSAgICAgICAwZSs2MTQ0ICAtPiAxLjAwMDBFLTYxNzIgU3Vibm9ybWFsCitkcWZtYTI4MDIgZm1hICAgMS4wMDBFLTYxNzIgICAxZS0xICAgIDBlKzYxNDQgIC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwKK2RxZm1hMjgwMyBmbWEgICAxLjAwRS02MTcyICAgIDFlLTIgICAgMGUrNjE0NCAgLT4gMS4wMEUtNjE3NCAgIFN1Ym5vcm1hbAorZHFmbWEyODA0IGZtYSAgIDEuMEUtNjE3MiAgICAgMWUtMyAgICAwZSs2MTQ0ICAtPiAxLjBFLTYxNzUgICAgU3Vibm9ybWFsCitkcWZtYTI4MDUgZm1hICAgMS4wRS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkcWZtYTI4MDYgZm1hICAgMS4zRS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MDcgZm1hICAgMS41RS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MDggZm1hICAgMS43RS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MDkgZm1hICAgMi4zRS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTAgZm1hICAgMi41RS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTEgZm1hICAgMi43RS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTIgZm1hICAgMS40OUUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTMgZm1hICAgMS41MEUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTQgZm1hICAgMS41MUUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTUgZm1hICAgMi40OUUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTYgZm1hICAgMi41MEUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcWZtYTI4MTcgZm1hICAgMi41MUUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxZm1hMjgxOCBmbWEgICAxRS02MTcyICAgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsCitkcWZtYTI4MTkgZm1hICAgM0UtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjgyMCBmbWEgICA1RS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFmbWEyODIxIGZtYSAgIDdFLTYxNzIgICAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFmbWEyODIyIGZtYSAgIDlFLTYxNzIgICAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFmbWEyODIzIGZtYSAgIDkuOUUtNjE3MiAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkcWZtYTI4MjQgZm1hICAgMUUtNjE3MiAgICAgIC0xZS00ICAgIDBlKzYxNDQgIC0+IC0xRS02MTc2ICAgIFN1Ym5vcm1hbAorZHFmbWEyODI1IGZtYSAgIDNFLTYxNzIgICAgICAtMWUtNSAgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcWZtYTI4MjYgZm1hICAtNUUtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjgyNyBmbWEgICA3RS02MTcyICAgICAgLTFlLTUgICAgMGUrNjE0NCAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgyOCBmbWEgIC05RS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgyOSBmbWEgICA5LjlFLTYxNzIgICAgLTFlLTUgICAgMGUrNjE0NCAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxZm1hMjgzMCBmbWEgICAzLjBFLTYxNzIgICAgLTFlLTUgICAgMGUrNjE0NCAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkcWZtYTI4MzEgZm1hICAgMS4wRS01OTc3ICAgICAxZS0yMDAgICAwZSs2MTQ0ICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxZm1hMjgzMiBmbWEgICAxLjBFLTU5NzcgICAgIDFlLTE5OSAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxZm1hMjgzMyBmbWEgICAxLjBFLTU5NzcgICAgIDFlLTE5OCAgIDBlKzYxNDQgIC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwKK2RxZm1hMjgzNCBmbWEgICAyLjBFLTU5NzcgICAgIDJlLTE5OCAgIDBlKzYxNDQgIC0+IDQuMEUtNjE3NSAgICBTdWJub3JtYWwKK2RxZm1hMjgzNSBmbWEgICA0LjBFLTU5NzcgICAgIDRlLTE5OCAgIDBlKzYxNDQgIC0+IDEuNjBFLTYxNzQgICBTdWJub3JtYWwKK2RxZm1hMjgzNiBmbWEgIDEwLjBFLTU5NzcgICAgMTBlLTE5OCAgIDBlKzYxNDQgIC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwKK2RxZm1hMjgzNyBmbWEgIDMwLjBFLTU5NzcgICAgMzBlLTE5OCAgIDBlKzYxNDQgIC0+IDkuMDAwRS02MTczICBTdWJub3JtYWwKK2RxZm1hMjgzOCBmbWEgIDQwLjBFLTU5ODIgICAgNDBlLTE2NiAgIDBlKzYxNDQgIC0+IDEuNjAwMEUtNjE0NSBTdWJub3JtYWwKK2RxZm1hMjgzOSBmbWEgIDQwLjBFLTU5ODIgICAgNDBlLTE2NSAgIDBlKzYxNDQgIC0+IDEuNjAwMEUtNjE0NCBTdWJub3JtYWwKK2RxZm1hMjg0MCBmbWEgIDQwLjBFLTU5ODIgICAgNDBlLTE2NCAgIDBlKzYxNDQgIC0+IDEuNjAwMEUtNjE0MworCistLSBMb25nIG9wZXJhbmQgb3ZlcmZsb3cgbWF5IGJlIGEgZGlmZmVyZW50IHBhdGgKK2RxZm1hMjg3MCBmbWEgIDEwMCAgOS45OTlFKzYxNDMgICAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZHFmbWEyODcxIGZtYSAgMTAwIC05Ljk5OUUrNjE0MyAgICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkcWZtYTI4NzIgZm1hICAgICAgIDkuOTk5RSs2MTQzIDEwMCAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2RxZm1hMjg3MyBmbWEgICAgICAtOS45OTlFKzYxNDMgMTAwICAgMGUrNjE0NCAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscworZHFmbWEyODgxIGZtYSAgIDEuMjM0N0UtNjEzMyAxLjIzNDdFLTQwICAgIDBlKzYxNDQgIC0+ICAxLjUyNEUtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFmbWEyODgyIGZtYSAgIDEuMjM0RS02MTMzIDEuMjM0RS00MCAgICAgIDBlKzYxNDQgIC0+ICAxLjUyM0UtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFmbWEyODgzIGZtYSAgIDEuMjNFLTYxMzMgIDEuMjNFLTQwICAgICAgIDBlKzYxNDQgIC0+ICAxLjUxM0UtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFmbWEyODg0IGZtYSAgIDEuMkUtNjEzMyAgIDEuMkUtNDAgICAgICAgIDBlKzYxNDQgIC0+ICAxLjQ0RS02MTczICBTdWJub3JtYWwKK2RxZm1hMjg4NSBmbWEgICAxLjJFLTYxMzMgICAxLjJFLTQxICAgICAgICAwZSs2MTQ0ICAtPiAgMS40NEUtNjE3NCAgU3Vibm9ybWFsCitkcWZtYTI4ODYgZm1hICAgMS4yRS02MTMzICAgMS4yRS00MiAgICAgICAgMGUrNjE0NCAgLT4gIDEuNEUtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkcWZtYTI4ODcgZm1hICAgMS4yRS02MTMzICAgMS4zRS00MiAgICAgICAgMGUrNjE0NCAgLT4gIDEuNkUtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkcWZtYTI4ODggZm1hICAgMS4zRS02MTMzICAgMS4zRS00MiAgICAgICAgMGUrNjE0NCAgLT4gIDEuN0UtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkcWZtYTI4ODkgZm1hICAgMS4zRS02MTMzICAgMS4zRS00MyAgICAgICAgMGUrNjE0NCAgLT4gICAgMkUtNjE3NiAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkcWZtYTI4OTAgZm1hICAgMS4zRS02MTM0ICAgMS4zRS00MyAgICAgICAgMGUrNjE0NCAgLT4gICAgMEUtNjE3NiAgIENsYW1wZWQgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworZHFmbWEyODkxIGZtYSAgIDEuMjM0NUUtMzkgICAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MjM0RS02MTcyIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWZtYTI4OTIgZm1hICAgMS4yMzQ1NkUtMzkgICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyMzRFLTYxNzIgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxZm1hMjg5MyBmbWEgICAxLjIzNDVFLTQwICAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MjNFLTYxNzMgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcWZtYTI4OTQgZm1hICAgMS4yMzQ1NkUtNDAgIDEuMjM0RS02MTMzICAgMGUrNjE0NCAgLT4gIDEuNTIzRS02MTczICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFmbWEyODk1IGZtYSAgIDEuMjM0NUUtNDEgICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyRS02MTc0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxZm1hMjg5NiBmbWEgICAxLjIzNDU2RS00MSAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MkUtNjE3NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIE5vdyBleHBsb3JlIHRoZSBjYXNlIHdoZXJlIHdlIGdldCBhIG5vcm1hbCByZXN1bHQgd2l0aCBVbmRlcmZsb3cKKy0tIHByb3ZlIG9wZXJhbmRzIGFyZSBleGFjdAorZHFmbWEyOTA2IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAxICAgICAgICAgICAgICAgICAgICAgICAgIDBlKzYxNDQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzCitkcWZtYTI5MDcgZm1hICAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgICAwZSs2MTQ0ICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CistLSB0aGUgbmV4dCByb3VuZHMgdG8gTm1pbgorZHFmbWEyOTA4IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgIDBlKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCisKKy0tIGh1Z2VzdAorZHFmbWEyOTA5IGZtYSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgMGUrNjE0NCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzY3IEluZXhhY3QgUm91bmRlZAorCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK3ByZWNpc2lvbjogICAzNAorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK2RxZm1hMjEwMDEgIGZtYSAgMTMwRS0yICAxMjBFLTIgICAwZSs2MTQ0ICAtPiAxLjU2MDAKK2RxZm1hMjEwMDIgIGZtYSAgMTMwRS0yICAxMkUtMSAgICAwZSs2MTQ0ICAtPiAxLjU2MAorZHFmbWEyMTAwMyAgZm1hICAxMzBFLTIgIDFFMCAgICAgIDBlKzYxNDQgIC0+IDEuMzAKK2RxZm1hMjEwMDQgIGZtYSAgMUUyICAgICAxRTQgICAgICAwZSs2MTQ0ICAtPiAxRSs2CisKKy0tIE51bGwgdGVzdHMKK2RxZm1hMjk5MCBmbWEgIDEwICAjICAgMGUrNjE0NCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWZtYTI5OTEgZm1hICAgIyAxMCAgIDBlKzYxNDQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCisKKy0tIEFERElUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK2RxYWRkMzAwMSBmbWEgIDEgIDEgICAgICAgMSAgICAgICAtPiAgMgorZHFhZGQzMDAyIGZtYSAgMSAgMiAgICAgICAzICAgICAgIC0+ICA1CitkcWFkZDMwMDMgZm1hICAxICAnNS43NScgICczLjMnICAgLT4gIDkuMDUKK2RxYWRkMzAwNCBmbWEgIDEgICc1JyAgICAgJy0zJyAgICAtPiAgMgorZHFhZGQzMDA1IGZtYSAgMSAgJy01JyAgICAnLTMnICAgIC0+ICAtOAorZHFhZGQzMDA2IGZtYSAgMSAgJy03JyAgICAnMi41JyAgIC0+ICAtNC41CitkcWFkZDMwMDcgZm1hICAxICAnMC43JyAgICcwLjMnICAgLT4gIDEuMAorZHFhZGQzMDA4IGZtYSAgMSAgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwCitkcWFkZDMwMDkgZm1hICAxICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScKK2RxYWRkMzAxMCBmbWEgIDEgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJworCistLSAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZHFhZGQzMDExIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NicgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMwMTIgZm1hICAxICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitkcWFkZDMwMTMgZm1hICAxICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKK2RxYWRkMzAxNCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5JyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAxNSBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAxNiBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OTknIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAxNyBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDAnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAxOCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDEnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAxOSBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAyMCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUxJyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzMDIxIGZtYSAgMSAgMCAxIC0+IDEKK2RxYWRkMzAyMiBmbWEgIDEgIDEgMSAtPiAyCitkcWFkZDMwMjMgZm1hICAxICAyIDEgLT4gMworZHFhZGQzMDI0IGZtYSAgMSAgMyAxIC0+IDQKK2RxYWRkMzAyNSBmbWEgIDEgIDQgMSAtPiA1CitkcWFkZDMwMjYgZm1hICAxICA1IDEgLT4gNgorZHFhZGQzMDI3IGZtYSAgMSAgNiAxIC0+IDcKK2RxYWRkMzAyOCBmbWEgIDEgIDcgMSAtPiA4CitkcWFkZDMwMjkgZm1hICAxICA4IDEgLT4gOQorZHFhZGQzMDMwIGZtYSAgMSAgOSAxIC0+IDEwCisKKy0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cworZHFhZGQzMDMxIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnCitkcWFkZDMwMzIgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScKK2RxYWRkMzAzMyBmbWEgIDEgICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJworZHFhZGQzMDM0IGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnCisKK2RxYWRkMzAzNSBmbWEgIDEgICc3MCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDM2IGZtYSAgMSAgJzcwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDM3IGZtYSAgMSAgJzcwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzAzOCBmbWEgIDEgICc3MDAwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMDM5IGZtYSAgMSAgJzcwMDAwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UrMzgnIFJvdW5kZWQKKworLS0gc3ltbWV0cnk6CitkcWFkZDMwNDAgZm1hICAxICAnMTAwMDBlKzM0JyAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzA0MSBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzA0MiBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMwNDQgZm1hICAxICAnMTAwMDBlKzM0JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzA0NSBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFKzM4JyBSb3VuZGVkCisKKy0tIHNhbWUsIHdpdGhvdXQgcm91bmRpbmcKK2RxYWRkMzA0NiBmbWEgIDEgICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnCitkcWFkZDMwNDcgZm1hICAxICAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcKK2RxYWRkMzA0OCBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcKK2RxYWRkMzA0OSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnCitkcWFkZDMwNTAgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcKK2RxYWRkMzA1MSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcKK2RxYWRkMzA1MiBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK2RxYWRkMzA1MyBmbWEgIDEgICcxMicgJzcuMDAnIC0+ICcxOS4wMCcKK2RxYWRkMzA1NCBmbWEgIDEgICcxLjMnICctMS4wNycgLT4gJzAuMjMnCitkcWFkZDMwNTUgZm1hICAxICAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJworZHFhZGQzMDU2IGZtYSAgMSAgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnCitkcWFkZDMwNTcgZm1hICAxICAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0JworCistLSBsZWFkaW5nIHplcm8gcHJlc2VydmF0aW9uCitkcWFkZDMwNjEgZm1hICAxICAxICcwLjAwMDEnIC0+ICcxLjAwMDEnCitkcWFkZDMwNjIgZm1hICAxICAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScKK2RxYWRkMzA2MyBmbWEgIDEgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnCitkcWFkZDMwNjQgZm1hICAxICAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwMDEnCitkcWFkZDMwNjUgZm1hICAxICAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMScKKworLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQorZHFhZGQzMDcwIGZtYSAgMSAgMSAgMCAgICAtPiAxCitkcWFkZDMwNzEgZm1hICAxICAxIDAuICAgIC0+IDEKK2RxYWRkMzA3MiBmbWEgIDEgIDEgIC4wICAgLT4gMS4wCitkcWFkZDMwNzMgZm1hICAxICAxIDAuMCAgIC0+IDEuMAorZHFhZGQzMDc0IGZtYSAgMSAgMSAwLjAwICAtPiAxLjAwCitkcWFkZDMwNzUgZm1hICAxICAgMCAgMSAgIC0+IDEKK2RxYWRkMzA3NiBmbWEgIDEgIDAuICAxICAgLT4gMQorZHFhZGQzMDc3IGZtYSAgMSAgIC4wIDEgICAtPiAxLjAKK2RxYWRkMzA3OCBmbWEgIDEgIDAuMCAxICAgLT4gMS4wCitkcWFkZDMwNzkgZm1hICAxICAwLjAwIDEgIC0+IDEuMDAKKworLS0gc29tZSBjYXJyaWVzCitkcWFkZDMwODAgZm1hICAxICA5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5CitkcWFkZDMwODEgZm1hICAxICA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMAorZHFhZGQzMDgyIGZtYSAgMSAgIDk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMAorZHFhZGQzMDgzIGZtYSAgMSAgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwCitkcWFkZDMwODQgZm1hICAxICAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMAorZHFhZGQzMDg1IGZtYSAgMSAgICAgIDk5OTk5IDEgIC0+IDEwMDAwMAorZHFhZGQzMDg2IGZtYSAgMSAgICAgICA5OTk5IDEgIC0+IDEwMDAwCitkcWFkZDMwODcgZm1hICAxICAgICAgICA5OTkgMSAgLT4gMTAwMAorZHFhZGQzMDg4IGZtYSAgMSAgICAgICAgIDk5IDEgIC0+IDEwMAorZHFhZGQzMDg5IGZtYSAgMSAgICAgICAgICA5IDEgIC0+IDEwCisKKworLS0gbW9yZSBMSFMgc3dhcHMKK2RxYWRkMzA5MCBmbWEgIDEgICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JworZHFhZGQzMDkxIGZtYSAgMSAgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKK2RxYWRkMzA5MiBmbWEgIDEgICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKK2RxYWRkMzA5MyBmbWEgIDEgICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JworZHFhZGQzMDk0IGZtYSAgMSAgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCitkcWFkZDMwOTUgZm1hICAxICAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKK2RxYWRkMzA5NiBmbWEgIDEgICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JworZHFhZGQzMDk3IGZtYSAgMSAgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKK2RxYWRkMzA5OCBmbWEgIDEgICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCitkcWFkZDMwOTkgZm1hICAxICAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCitkcWFkZDMxMDAgZm1hICAxICAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JworZHFhZGQzMTAxIGZtYSAgMSAgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JworZHFhZGQzMTAyIGZtYSAgMSAgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCitkcWFkZDMxMDMgZm1hICAxICAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKK2RxYWRkMzEwNCBmbWEgIDEgICctNUUwJyAgICAgICAgIDAgLT4gICctNScKK2RxYWRkMzEwNSBmbWEgIDEgICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCitkcWFkZDMxMDYgZm1hICAxICAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKK2RxYWRkMzEwNyBmbWEgIDEgICctNUUzMycgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKK2RxYWRkMzEwOCBmbWEgIDEgICctNUUzNCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgUm91bmRlZAorZHFhZGQzMTA5IGZtYSAgMSAgJy01RTM1JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICBSb3VuZGVkCitkcWFkZDMxMTAgZm1hICAxICAnLTVFMzYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgIFJvdW5kZWQKK2RxYWRkMzExMSBmbWEgIDEgICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZAorCistLSBtb3JlIFJIUyBzd2FwcworZHFhZGQzMTEzIGZtYSAgMSAgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycKK2RxYWRkMzExNCBmbWEgIDEgIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycKK2RxYWRkMzExNiBmbWEgIDEgIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3JworZHFhZGQzMTE3IGZtYSAgMSAgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycKK2RxYWRkMzExOSBmbWEgIDEgIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnCitkcWFkZDMxMjAgZm1hICAxICAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3JworZHFhZGQzMTIxIGZtYSAgMSAgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycKK2RxYWRkMzEyMiBmbWEgIDEgIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycKK2RxYWRkMzEyMyBmbWEgIDEgIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcKK2RxYWRkMzEyNCBmbWEgIDEgIDAgICctNUUtNycgICAgICAtPiAgJy01RS03JworZHFhZGQzMTI1IGZtYSAgMSAgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1JworZHFhZGQzMTI2IGZtYSAgMSAgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnCitkcWFkZDMxMjcgZm1hICAxICAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1JworZHFhZGQzMTI4IGZtYSAgMSAgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScKK2RxYWRkMzEyOSBmbWEgIDEgIDAgICctNUUwJyAgICAgICAtPiAgJy01JworZHFhZGQzMTMwIGZtYSAgMSAgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJworZHFhZGQzMTMxIGZtYSAgMSAgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcKK2RxYWRkMzEzMiBmbWEgIDEgIDAgICctNUUzMycgICAgICAtPiAgJy01MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworZHFhZGQzMTMzIGZtYSAgMSAgMCAgJy01RTM0JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgICBSb3VuZGVkCitkcWFkZDMxMzQgZm1hICAxICAwICAnLTVFMzUnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgIFJvdW5kZWQKK2RxYWRkMzEzNSBmbWEgIDEgIDAgICctNUUzNicgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYnICAgUm91bmRlZAorZHFhZGQzMTM2IGZtYSAgMSAgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCisKKy0tIHJlbGF0ZWQKK2RxYWRkMzEzNyBmbWEgIDEgICAxICAnMEUtMzknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2RxYWRkMzEzOCBmbWEgIDEgIC0xICAnMEUtMzknICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RxYWRkMzEzOSBmbWEgIDEgICcwRS0zOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2RxYWRkMzE0MCBmbWEgIDEgICcwRS0zOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2RxYWRkMzE0MSBmbWEgIDEgIDFFKzI5ICAgMC4wMDAwICAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwMCcKK2RxYWRkMzE0MiBmbWEgIDEgIDFFKzI5ICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQKK2RxYWRkMzE0MyBmbWEgIDEgIDAuMDAwICAgMUUrMzAgICAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMCcKK2RxYWRkMzE0NCBmbWEgIDEgIDAuMDAwMCAgMUUrMzAgICAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMCcgIFJvdW5kZWQKKworLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10KK2RxYWRkMzE0NiBmbWEgIDEgICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcKK2RxYWRkMzE0NyBmbWEgIDEgICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnCitkcWFkZDMxNDggZm1hICAxICAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJworZHFhZGQzMTQ5IGZtYSAgMSAgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJworZHFhZGQzMTUwIGZtYSAgMSAgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcKK2RxYWRkMzE1MSBmbWEgIDEgICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnCitkcWFkZDMxNTIgZm1hICAxICAnMycgICAgICcuMycgICAgLT4gICczLjMnCitkcWFkZDMxNTMgZm1hICAxICAnMy4nICAgICcuMycgICAgLT4gICczLjMnCitkcWFkZDMxNTQgZm1hICAxICAnMy4wJyAgICcuMycgICAgLT4gICczLjMnCitkcWFkZDMxNTUgZm1hICAxICAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJworZHFhZGQzMTU2IGZtYSAgMSAgJzMnICAgICAnMycgICAgIC0+ICAnNicKK2RxYWRkMzE1NyBmbWEgIDEgICczJyAgICAgJyszJyAgICAtPiAgJzYnCitkcWFkZDMxNTggZm1hICAxICAnMycgICAgICctMycgICAgLT4gICcwJworZHFhZGQzMTU5IGZtYSAgMSAgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJworZHFhZGQzMTYwIGZtYSAgMSAgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcKKworLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KK2RxYWRkMzE2MSBmbWEgIDEgICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5JworZHFhZGQzMTYyIGZtYSAgMSAgJzFFKzEyJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAxLjExJworZHFhZGQzMTYzIGZtYSAgMSAgJzEuMTEnICAnMUUrMTInIC0+ICcxMDAwMDAwMDAwMDAxLjExJworZHFhZGQzMTY0IGZtYSAgMSAgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknCitkcWFkZDMxNjUgZm1hICAxICAnN0UrMTInICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTknCitkcWFkZDMxNjYgZm1hICAxICAnN0UrMTInICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitkcWFkZDMxNjcgZm1hICAxICAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitkcWFkZDMxNjggZm1hICAxICAnLTEnICAgICc3RSsxMicgLT4gJzY5OTk5OTk5OTk5OTknCisKK3JvdW5kaW5nOiBoYWxmX3VwCitkcWFkZDMxNzAgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY3JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTcxIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NicgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzE3MiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjUnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxNzMgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY0JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTc0IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzE3NSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxNzYgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTc3IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBSb3VuZGVkCitkcWFkZDMxNzggZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQ1JyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTc5IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0NCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzE4MCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMxODEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMTgyIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzE4MyBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgUm91bmRlZAorCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZHFhZGQzMjAwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknCitkcWFkZDMyMDEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDcgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDggZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMDkgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMTAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMTEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMTIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMTMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMTQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMTUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMTYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcKK2RxYWRkMzIxNyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxOCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIxOSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZHFhZGQzMjIwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknCitkcWFkZDMyMjEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjcgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjggZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMjkgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMzAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMzEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMzIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMzMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMzQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMzUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyMzYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcKK2RxYWRkMzIzNyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzOCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzIzOSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitkcWFkZDMyNDAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyNDEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMyNDIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkcWFkZDMyNTAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScKK2RxYWRkMzI1MSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1MiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1MyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1NCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1NSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1NiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1NyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1OCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI1OSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI2MCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI2MSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI2MiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI2MyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI2NCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI2NSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzI2NiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJworZHFhZGQzMjY3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjY4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzMjY5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCistLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMKK3JvdW5kaW5nOiBoYWxmX3VwCitkcWFkZDMzMDEgZm1hICAxICAgLTEgICAxICAgICAgLT4gICAwCitkcWFkZDMzMDIgZm1hICAxICAgIDAgICAxICAgICAgLT4gICAxCitkcWFkZDMzMDMgZm1hICAxICAgIDEgICAxICAgICAgLT4gICAyCitkcWFkZDMzMDQgZm1hICAxICAgMTIgICAxICAgICAgLT4gIDEzCitkcWFkZDMzMDUgZm1hICAxICAgOTggICAxICAgICAgLT4gIDk5CitkcWFkZDMzMDYgZm1hICAxICAgOTkgICAxICAgICAgLT4gMTAwCitkcWFkZDMzMDcgZm1hICAxICAxMDAgICAxICAgICAgLT4gMTAxCitkcWFkZDMzMDggZm1hICAxICAxMDEgICAxICAgICAgLT4gMTAyCitkcWFkZDMzMDkgZm1hICAxICAgLTEgIC0xICAgICAgLT4gIC0yCitkcWFkZDMzMTAgZm1hICAxICAgIDAgIC0xICAgICAgLT4gIC0xCitkcWFkZDMzMTEgZm1hICAxICAgIDEgIC0xICAgICAgLT4gICAwCitkcWFkZDMzMTIgZm1hICAxICAgMTIgIC0xICAgICAgLT4gIDExCitkcWFkZDMzMTMgZm1hICAxICAgOTggIC0xICAgICAgLT4gIDk3CitkcWFkZDMzMTQgZm1hICAxICAgOTkgIC0xICAgICAgLT4gIDk4CitkcWFkZDMzMTUgZm1hICAxICAxMDAgIC0xICAgICAgLT4gIDk5CitkcWFkZDMzMTYgZm1hICAxICAxMDEgIC0xICAgICAgLT4gMTAwCisKK2RxYWRkMzMyMSBmbWEgIDEgIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwCitkcWFkZDMzMjIgZm1hICAxICAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQorZHFhZGQzMzIzIGZtYSAgMSAgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDIKK2RxYWRkMzMyNCBmbWEgIDEgICAwLjEyICAwLjAxICAgIC0+ICAwLjEzCitkcWFkZDMzMjUgZm1hICAxICAgMC45OCAgMC4wMSAgICAtPiAgMC45OQorZHFhZGQzMzI2IGZtYSAgMSAgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDAKK2RxYWRkMzMyNyBmbWEgIDEgICAxLjAwICAwLjAxICAgIC0+ICAxLjAxCitkcWFkZDMzMjggZm1hICAxICAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMgorZHFhZGQzMzI5IGZtYSAgMSAgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDIKK2RxYWRkMzMzMCBmbWEgIDEgICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxCitkcWFkZDMzMzEgZm1hICAxICAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMAorZHFhZGQzMzMyIGZtYSAgMSAgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTEKK2RxYWRkMzMzMyBmbWEgIDEgICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3CitkcWFkZDMzMzQgZm1hICAxICAgMC45OSAtMC4wMSAgICAtPiAgMC45OAorZHFhZGQzMzM1IGZtYSAgMSAgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkKK2RxYWRkMzMzNiBmbWEgIDEgICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwCisKKy0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBhZGRpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudAorZHFhZGQzMzQwIGZtYSAgMSAgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMAorZHFhZGQzMzQxIGZtYSAgMSAgMUUrMzMgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxYWRkMzM0MiBmbWEgIDEgIDFFKzM0ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgUm91bmRlZAorZHFhZGQzMzQzIGZtYSAgMSAgMUUrMzUgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBSb3VuZGVkCistLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uCitkcWFkZDMzNDQgZm1hICAxICAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxCitkcWFkZDMzNDUgZm1hICAxICAxRSszMyAgIDEgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFhZGQzMzQ2IGZtYSAgMSAgMUUrMzQgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzM0NyBmbWEgIDEgIDFFKzM1ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDMzNDggZm1hICAxICAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3CitkcWFkZDMzNDkgZm1hICAxICAxRSszMyAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZHFhZGQzMzUwIGZtYSAgMSAgMUUrMzQgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM0ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzM1MSBmbWEgIDEgIDFFKzM1ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRyeXplcm9zIGNhc2VzCityb3VuZGluZzogICAgaGFsZl91cAorZHFhZGQzMzYwICBmbWEgIDEgIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUKK2RxYWRkMzM2MSAgZm1hICAxICAwRS01MCAxMDAwMEUrMSAgLT4gMTAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZAorZHFhZGQzMzYyICBmbWEgIDEgIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkCitkcWFkZDMzNjMgIGZtYSAgMSAgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkIEluZXhhY3QKK2RxYWRkMzM2NCAgZm1hICAxICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMEUrNjExMQorLS0gICAgICAgICAgICAxIDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorCistLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nCityb3VuZGluZzogICAgaGFsZl9kb3duCitkcWFkZDMzNzAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0CitkcWFkZDMzNzEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogICAgaGFsZl91cAorZHFhZGQzMzcyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNAorZHFhZGQzMzczIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorZHFhZGQzMzc0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNAorZHFhZGQzMzc1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdAorCistLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMKK2RxYWRkMzQwMCBmbWEgIDEgICAgMSAgIDc3ZS0zMiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3CitkcWFkZDM0MDEgZm1hICAxICAgIDEgICA3N2UtMzMgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkMzQwMiBmbWEgIDEgICAgMSAgIDc3ZS0zNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQwMyBmbWEgIDEgICAgMSAgIDc3ZS0zNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQwNCBmbWEgIDEgICAgMSAgIDc3ZS0zNiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQwNSBmbWEgIDEgICAgMSAgIDc3ZS0zNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQwNiBmbWEgIDEgICAgMSAgIDc3ZS0yOTkgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNDEwIGZtYSAgMSAgIDEwICAgNzdlLTMyICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3CitkcWFkZDM0MTEgZm1hICAxICAgMTAgICA3N2UtMzMgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MTIgZm1hICAxICAgMTAgICA3N2UtMzQgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MTMgZm1hICAxICAgMTAgICA3N2UtMzUgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MTQgZm1hICAxICAgMTAgICA3N2UtMzYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MTUgZm1hICAxICAgMTAgICA3N2UtMzcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MTYgZm1hICAxICAgMTAgICA3N2UtMjk5ICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkMzQyMCBmbWEgIDEgICA3N2UtMzIgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3CitkcWFkZDM0MjEgZm1hICAxICAgNzdlLTMzICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKK2RxYWRkMzQyMiBmbWEgIDEgICA3N2UtMzQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQyMyBmbWEgIDEgICA3N2UtMzUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQyNCBmbWEgIDEgICA3N2UtMzYgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQyNSBmbWEgIDEgICA3N2UtMzcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzQyNiBmbWEgIDEgICA3N2UtMjk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNDMwIGZtYSAgMSAgIDc3ZS0zMiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3CitkcWFkZDM0MzEgZm1hICAxICAgNzdlLTMzICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MzIgZm1hICAxICAgNzdlLTM0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MzMgZm1hICAxICAgNzdlLTM1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MzQgZm1hICAxICAgNzdlLTM2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MzUgZm1hICAxICAgNzdlLTM3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM0MzYgZm1hICAxICAgNzdlLTI5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2RxYWRkMzY0NDAgZm1hICAxICAgIDEgICAtNzdlLTMyICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0NDEgZm1hICAxICAgIDEgICAtNzdlLTMzICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDQyIGZtYSAgMSAgICAxICAgLTc3ZS0zNCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0NDMgZm1hICAxICAgIDEgICAtNzdlLTM1ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NDQgZm1hICAxICAgIDEgICAtNzdlLTM2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NDUgZm1hICAxICAgIDEgICAtNzdlLTM3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ0NiBmbWEgIDEgICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkMzY0NTAgZm1hICAxICAgMTAgICAtNzdlLTMyICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDUxIGZtYSAgMSAgIDEwICAgLTc3ZS0zMyAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0NTIgZm1hICAxICAgMTAgICAtNzdlLTM0ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NTMgZm1hICAxICAgMTAgICAtNzdlLTM1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NTQgZm1hICAxICAgMTAgICAtNzdlLTM2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ1NSBmbWEgIDEgICAxMCAgIC03N2UtMzcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDU2IGZtYSAgMSAgIDEwICAgLTc3ZS05OSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNjQ2MCBmbWEgIDEgICAtNzdlLTMyICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ2MSBmbWEgIDEgICAtNzdlLTMzICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0NjIgZm1hICAxICAgLTc3ZS0zNCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ2MyBmbWEgIDEgICAtNzdlLTM1ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ2NCBmbWEgIDEgICAtNzdlLTM2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ2NSBmbWEgIDEgICAtNzdlLTM3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDY2IGZtYSAgMSAgIC03N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNjQ3MCBmbWEgIDEgICAtNzdlLTMyICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY0NzEgZm1hICAxICAgLTc3ZS0zMyAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ3MiBmbWEgIDEgICAtNzdlLTM0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ3MyBmbWEgIDEgICAtNzdlLTM1ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ3NCBmbWEgIDEgICAtNzdlLTM2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NDc1IGZtYSAgMSAgIC03N2UtMzcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0NzYgZm1hICAxICAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSB1bHBzCitkcWFkZDM2NDgwIGZtYSAgMSAgIC0xICAgIDc3ZS0zMiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjQ4MSBmbWEgIDEgICAtMSAgICA3N2UtMzMgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDgyIGZtYSAgMSAgIC0xICAgIDc3ZS0zNCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDgzIGZtYSAgMSAgIC0xICAgIDc3ZS0zNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ4NCBmbWEgIDEgICAtMSAgICA3N2UtMzYgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0ODUgZm1hICAxICAgLTEgICAgNzdlLTM3ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0ODYgZm1hICAxICAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNjQ5MCBmbWEgIDEgIC0xMCAgICA3N2UtMzIgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDkxIGZtYSAgMSAgLTEwICAgIDc3ZS0zMyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCitkcWFkZDM2NDkyIGZtYSAgMSAgLTEwICAgIDc3ZS0zNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjQ5MyBmbWEgIDEgIC0xMCAgICA3N2UtMzUgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0OTQgZm1hICAxICAtMTAgICAgNzdlLTM2ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0OTUgZm1hICAxICAtMTAgICAgNzdlLTM3ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY0OTYgZm1hICAxICAtMTAgICAgNzdlLTk5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNjUwMCBmbWEgIDEgICAgNzdlLTMyICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKK2RxYWRkMzY1MDEgZm1hICAxICAgIDc3ZS0zMyAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjUwMiBmbWEgIDEgICAgNzdlLTM0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjUwMyBmbWEgIDEgICAgNzdlLTM1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1MDQgZm1hICAxICAgIDc3ZS0zNiAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTA1IGZtYSAgMSAgICA3N2UtMzcgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTA2IGZtYSAgMSAgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2RxYWRkMzY1MTAgZm1hICAxICAgIDc3ZS0zMiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjUxMSBmbWEgIDEgICAgNzdlLTMzICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMworZHFhZGQzNjUxMiBmbWEgIDEgICAgNzdlLTM0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1MTMgZm1hICAxICAgIDc3ZS0zNSAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTE0IGZtYSAgMSAgICA3N2UtMzYgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTE1IGZtYSAgMSAgICA3N2UtMzcgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTE2IGZtYSAgMSAgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGFuZCBzb21lIG1vcmUgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZHFhZGQzNjU0MCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JworZHFhZGQzNjU0MSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NDIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTQzIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU0NCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NDUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTQ2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU0NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NDggZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTQ5IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU1MCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NTEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTUyIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU1MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NTQgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTU1IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU1NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJworZHFhZGQzNjU1NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NTggZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTU5IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitkcWFkZDM2NTYwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknCitkcWFkZDM2NTYxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU2MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NjMgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTY0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU2NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NjYgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTY3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU2OCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NjkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTcwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU3MSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NzIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTczIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU3NCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NzUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM2NTc2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnCitkcWFkZDM2NTc3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNjU3OCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzY1NzkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitkcWFkZDM3NTQwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU0MSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NDIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkcWFkZDM3NTUwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknCitkcWFkZDM3NTUxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU1MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NTMgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTU0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU1NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NTYgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTU3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU1OCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NTkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTYwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU2MSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NjIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTYzIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU2NCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NjUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTY2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnCitkcWFkZDM3NTY3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzU2OCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1NjkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworZHFhZGQzNzcwMSBmbWEgIDEgIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwCitkcWFkZDM3NzAyIGZtYSAgMSAgMDAuMDAgMC4wMDAgIC0+IDAuMDAwCitkcWFkZDM3NzAzIGZtYSAgMSAgMDAuMDAgMEUtMyAgIC0+IDAuMDAwCitkcWFkZDM3NzA0IGZtYSAgMSAgMEUtMyAgMDAuMDAgIC0+IDAuMDAwCisKK2RxYWRkMzc3MTAgZm1hICAxICAwRSszICAwMC4wMCAgLT4gMC4wMAorZHFhZGQzNzcxMSBmbWEgIDEgIDBFKzMgIDAwLjAgICAtPiAwLjAKK2RxYWRkMzc3MTIgZm1hICAxICAwRSszICAwMC4gICAgLT4gMAorZHFhZGQzNzcxMyBmbWEgIDEgIDBFKzMgIDAwLkUrMSAtPiAwRSsxCitkcWFkZDM3NzE0IGZtYSAgMSAgMEUrMyAgMDAuRSsyIC0+IDBFKzIKK2RxYWRkMzc3MTUgZm1hICAxICAwRSszICAwMC5FKzMgLT4gMEUrMworZHFhZGQzNzcxNiBmbWEgIDEgIDBFKzMgIDAwLkUrNCAtPiAwRSszCitkcWFkZDM3NzE3IGZtYSAgMSAgMEUrMyAgMDAuRSs1IC0+IDBFKzMKK2RxYWRkMzc3MTggZm1hICAxICAwRSszICAtMDAuMCAgIC0+IDAuMAorZHFhZGQzNzcxOSBmbWEgIDEgIDBFKzMgIC0wMC4gICAgLT4gMAorZHFhZGQzNzczMSBmbWEgIDEgIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQorCitkcWFkZDM3NzIwIGZtYSAgMSAgMDAuMDAgIDBFKzMgIC0+IDAuMDAKK2RxYWRkMzc3MjEgZm1hICAxICAwMC4wICAgMEUrMyAgLT4gMC4wCitkcWFkZDM3NzIyIGZtYSAgMSAgMDAuICAgIDBFKzMgIC0+IDAKK2RxYWRkMzc3MjMgZm1hICAxICAwMC5FKzEgMEUrMyAgLT4gMEUrMQorZHFhZGQzNzcyNCBmbWEgIDEgIDAwLkUrMiAwRSszICAtPiAwRSsyCitkcWFkZDM3NzI1IGZtYSAgMSAgMDAuRSszIDBFKzMgIC0+IDBFKzMKK2RxYWRkMzc3MjYgZm1hICAxICAwMC5FKzQgMEUrMyAgLT4gMEUrMworZHFhZGQzNzcyNyBmbWEgIDEgIDAwLkUrNSAwRSszICAtPiAwRSszCitkcWFkZDM3NzI4IGZtYSAgMSAgLTAwLjAwIDBFKzMgIC0+IDAuMDAKK2RxYWRkMzc3MjkgZm1hICAxICAtMDAuMCAgMEUrMyAgLT4gMC4wCitkcWFkZDM3NzMwIGZtYSAgMSAgLTAwLiAgIDBFKzMgIC0+IDAKKworZHFhZGQzNzczMiBmbWEgIDEgICAwICAgICAwICAgICAtPiAgMAorZHFhZGQzNzczMyBmbWEgIDEgICAwICAgIC0wICAgICAtPiAgMAorZHFhZGQzNzczNCBmbWEgIDEgIC0wICAgICAwICAgICAtPiAgMAorZHFhZGQzNzczNSBmbWEgIDEgIC0wICAgIC0wICAgICAtPiAtMCAgICAgLS0gSUVFRSA4NTQgc3BlY2lhbCBjYXNlCisKK2RxYWRkMzc3MzYgZm1hICAxICAgMSAgICAtMSAgICAgLT4gIDAKK2RxYWRkMzc3MzcgZm1hICAxICAtMSAgICAtMSAgICAgLT4gLTIKK2RxYWRkMzc3MzggZm1hICAxICAgMSAgICAgMSAgICAgLT4gIDIKK2RxYWRkMzc3MzkgZm1hICAxICAtMSAgICAgMSAgICAgLT4gIDAKKworZHFhZGQzNzc0MSBmbWEgIDEgICAwICAgIC0xICAgICAtPiAtMQorZHFhZGQzNzc0MiBmbWEgIDEgIC0wICAgIC0xICAgICAtPiAtMQorZHFhZGQzNzc0MyBmbWEgIDEgICAwICAgICAxICAgICAtPiAgMQorZHFhZGQzNzc0NCBmbWEgIDEgIC0wICAgICAxICAgICAtPiAgMQorZHFhZGQzNzc0NSBmbWEgIDEgIC0xICAgICAwICAgICAtPiAtMQorZHFhZGQzNzc0NiBmbWEgIDEgIC0xICAgIC0wICAgICAtPiAtMQorZHFhZGQzNzc0NyBmbWEgIDEgICAxICAgICAwICAgICAtPiAgMQorZHFhZGQzNzc0OCBmbWEgIDEgICAxICAgIC0wICAgICAtPiAgMQorCitkcWFkZDM3NzUxIGZtYSAgMSAgIDAuMCAgLTEgICAgIC0+IC0xLjAKK2RxYWRkMzc3NTIgZm1hICAxICAtMC4wICAtMSAgICAgLT4gLTEuMAorZHFhZGQzNzc1MyBmbWEgIDEgICAwLjAgICAxICAgICAtPiAgMS4wCitkcWFkZDM3NzU0IGZtYSAgMSAgLTAuMCAgIDEgICAgIC0+ICAxLjAKK2RxYWRkMzc3NTUgZm1hICAxICAtMS4wICAgMCAgICAgLT4gLTEuMAorZHFhZGQzNzc1NiBmbWEgIDEgIC0xLjAgIC0wICAgICAtPiAtMS4wCitkcWFkZDM3NzU3IGZtYSAgMSAgIDEuMCAgIDAgICAgIC0+ICAxLjAKK2RxYWRkMzc3NTggZm1hICAxICAgMS4wICAtMCAgICAgLT4gIDEuMAorCitkcWFkZDM3NzYxIGZtYSAgMSAgIDAgICAgLTEuMCAgIC0+IC0xLjAKK2RxYWRkMzc3NjIgZm1hICAxICAtMCAgICAtMS4wICAgLT4gLTEuMAorZHFhZGQzNzc2MyBmbWEgIDEgICAwICAgICAxLjAgICAtPiAgMS4wCitkcWFkZDM3NzY0IGZtYSAgMSAgLTAgICAgIDEuMCAgIC0+ICAxLjAKK2RxYWRkMzc3NjUgZm1hICAxICAtMSAgICAgMC4wICAgLT4gLTEuMAorZHFhZGQzNzc2NiBmbWEgIDEgIC0xICAgIC0wLjAgICAtPiAtMS4wCitkcWFkZDM3NzY3IGZtYSAgMSAgIDEgICAgIDAuMCAgIC0+ICAxLjAKK2RxYWRkMzc3NjggZm1hICAxICAgMSAgICAtMC4wICAgLT4gIDEuMAorCitkcWFkZDM3NzcxIGZtYSAgMSAgIDAuMCAgLTEuMCAgIC0+IC0xLjAKK2RxYWRkMzc3NzIgZm1hICAxICAtMC4wICAtMS4wICAgLT4gLTEuMAorZHFhZGQzNzc3MyBmbWEgIDEgICAwLjAgICAxLjAgICAtPiAgMS4wCitkcWFkZDM3Nzc0IGZtYSAgMSAgLTAuMCAgIDEuMCAgIC0+ICAxLjAKK2RxYWRkMzc3NzUgZm1hICAxICAtMS4wICAgMC4wICAgLT4gLTEuMAorZHFhZGQzNzc3NiBmbWEgIDEgIC0xLjAgIC0wLjAgICAtPiAtMS4wCitkcWFkZDM3Nzc3IGZtYSAgMSAgIDEuMCAgIDAuMCAgIC0+ICAxLjAKK2RxYWRkMzc3NzggZm1hICAxICAgMS4wICAtMC4wICAgLT4gIDEuMAorCistLSBTcGVjaWFscworZHFhZGQzNzc4MCBmbWEgIDEgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3ODEgZm1hICAxICAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkcWFkZDM3NzgyIGZtYSAgMSAgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc4MyBmbWEgIDEgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3ODQgZm1hICAxICAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkcWFkZDM3Nzg1IGZtYSAgMSAgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc4NiBmbWEgIDEgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3ODcgZm1hICAxICAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDM3Nzg4IGZtYSAgMSAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc4OSBmbWEgIDEgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3OTAgZm1hICAxICAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDM3NzkxIGZtYSAgMSAgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFhZGQzNzc5MiBmbWEgIDEgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxYWRkMzc3OTMgZm1hICAxICAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkcWFkZDM3Nzk0IGZtYSAgMSAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2RxYWRkMzc4MDAgZm1hICAxICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4MDEgZm1hICAxICAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkcWFkZDM3ODAyIGZtYSAgMSAgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgwMyBmbWEgIDEgICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MDQgZm1hICAxICAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODA1IGZtYSAgMSAgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgwNiBmbWEgIDEgICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MDcgZm1hICAxICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODA4IGZtYSAgMSAgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgwOSBmbWEgIDEgIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzgxMCBmbWEgIDEgIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MTEgZm1hICAxICAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODEyIGZtYSAgMSAgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFhZGQzNzgxMyBmbWEgIDEgICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxYWRkMzc4MTQgZm1hICAxICAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitkcWFkZDM3ODE1IGZtYSAgMSAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcWFkZDM3ODIxIGZtYSAgMSAgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2RxYWRkMzc4MjIgZm1hICAxICAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFhZGQzNzgyMyBmbWEgIDEgICBOYU4gLTEgICAgICAtPiAgTmFOCitkcWFkZDM3ODI0IGZtYSAgMSAgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2RxYWRkMzc4MjUgZm1hICAxICAgTmFOICAwICAgICAgLT4gIE5hTgorZHFhZGQzNzgyNiBmbWEgIDEgICBOYU4gIDEgICAgICAtPiAgTmFOCitkcWFkZDM3ODI3IGZtYSAgMSAgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2RxYWRkMzc4MjggZm1hICAxICAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFhZGQzNzgyOSBmbWEgIDEgICBOYU4gIE5hTiAgICAtPiAgTmFOCitkcWFkZDM3ODMwIGZtYSAgMSAgLUluZiAgTmFOICAgIC0+ICBOYU4KK2RxYWRkMzc4MzEgZm1hICAxICAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFhZGQzNzgzMiBmbWEgIDEgIC0xICAgIE5hTiAgICAtPiAgTmFOCitkcWFkZDM3ODMzIGZtYSAgMSAgLTAgICAgTmFOICAgIC0+ICBOYU4KK2RxYWRkMzc4MzQgZm1hICAxICAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFhZGQzNzgzNSBmbWEgIDEgICAxICAgIE5hTiAgICAtPiAgTmFOCitkcWFkZDM3ODM2IGZtYSAgMSAgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2RxYWRkMzc4MzcgZm1hICAxICAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkcWFkZDM3ODQxIGZtYSAgMSAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQyIGZtYSAgMSAgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQzIGZtYSAgMSAgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQ0IGZtYSAgMSAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQ1IGZtYSAgMSAgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQ2IGZtYSAgMSAgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQ3IGZtYSAgMSAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQ4IGZtYSAgMSAgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODQ5IGZtYSAgMSAgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODUwIGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODUxIGZtYSAgMSAgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODUyIGZtYSAgMSAgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODUzIGZtYSAgMSAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODU0IGZtYSAgMSAgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODU1IGZtYSAgMSAgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODU2IGZtYSAgMSAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODU3IGZtYSAgMSAgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODU4IGZtYSAgMSAgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODU5IGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxYWRkMzc4NjEgZm1hICAxICAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2RxYWRkMzc4NjIgZm1hICAxICArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2RxYWRkMzc4NjMgZm1hICAxICAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2RxYWRkMzc4NjQgZm1hICAxICAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2RxYWRkMzc4NjUgZm1hICAxICAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2RxYWRkMzc4NjYgZm1hICAxICAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2RxYWRkMzc4NjcgZm1hICAxICAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2RxYWRkMzc4NjggZm1hICAxICAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2RxYWRkMzc4NjkgZm1hICAxICAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitkcWFkZDM3ODcxIGZtYSAgMSAgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NzIgZm1hICAxICAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg3MyBmbWEgIDEgICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODc0IGZtYSAgMSAgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NzUgZm1hICAxICAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg3NiBmbWEgIDEgICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODc3IGZtYSAgMSAgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4NzggZm1hICAxICAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg3OSBmbWEgIDEgICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitkcWFkZDM3ODgwIGZtYSAgMSAgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzc4ODEgZm1hICAxICArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg4MiBmbWEgIDEgIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2RxYWRkMzc4ODMgZm1hICAxICAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZHFhZGQzNzg4NCBmbWEgIDEgICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2RxYWRkMzc4ODUgZm1hICAxICAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBIZXJlIHdlIGV4cGxvcmUgbmVhciB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbgorZHFhZGQzNzU3NSBmbWEgIDEgICAxRS02MTQzIC0xRS02MTc2IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0IFN1Ym5vcm1hbAorZHFhZGQzNzU3NiBmbWEgIDEgIC0xRS02MTQzICsxRS02MTc2IC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0IFN1Ym5vcm1hbAorCistLSBjaGVjayBvdmVyZmxvdyBlZGdlIGNhc2UKKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZHFhZGQzNzk3MiBhcHBseSAgICAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcWFkZDM3OTczIGZtYSAgMSAgICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTc0IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTc1IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAxRSs2MTExICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5NzYgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDlFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzk3NyBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgOEUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTc4IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA3RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5NzkgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDZFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzk4MCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNUUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTgxIGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA0RSs2MTEwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5ODIgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDNFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzk4MyBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMkUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTg0IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAxRSs2MTEwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNzk4NSBhcHBseSAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFhZGQzNzk4NiBmbWEgIDEgICAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc5ODcgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTg4IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0xRSs2MTExICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTg5IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC05RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTkwIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC04RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTkxIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC03RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTkyIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC02RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTkzIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC01RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTk0IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC00RSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTk1IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0zRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTk2IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0yRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3OTk3IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0xRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCisKKy0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cworcm91bmRpbmc6ICAgICBkb3duCitkcWFkZDM3MTEwMCBmbWEgIDEgIDFlKzIgLTFlLTYxNDMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwMSBmbWEgIDEgIDFlKzEgLTFlLTYxNDMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQzNzExMDMgZm1hICAxICAgICsxIC0xZS02MTQzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwNCBmbWEgIDEgIDFlLTEgLTFlLTYxNDMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwNSBmbWEgIDEgIDFlLTIgLTFlLTYxNDMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQzNzExMDYgZm1hICAxICAxZS0zIC0xZS02MTQzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwNyBmbWEgIDEgIDFlLTQgLTFlLTYxNDMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTEwOCBmbWEgIDEgIDFlLTUgLTFlLTYxNDMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQzNzExMDkgZm1hICAxICAxZS02IC0xZS02MTQzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgICBjZWlsaW5nCitkcWFkZDM3MTExMCBmbWEgIDEgIC0xZSsyICsxZS02MTQzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorZHFhZGQzNzExMTEgZm1hICAxICAtMWUrMSArMWUtNjE0MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExMyBmbWEgIDEgICAgIC0xICsxZS02MTQzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExNCBmbWEgIDEgIC0xZS0xICsxZS02MTQzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQzNzExMTUgZm1hICAxICAtMWUtMiArMWUtNjE0MyAgIC0+IC0wLjAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExNiBmbWEgIDEgIC0xZS0zICsxZS02MTQzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExNyBmbWEgIDEgIC0xZS00ICsxZS02MTQzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZHFhZGQzNzExMTggZm1hICAxICAtMWUtNSArMWUtNjE0MyAgIC0+IC0wLjAwMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitkcWFkZDM3MTExOSBmbWEgIDEgIC0xZS02ICsxZS02MTQzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UKK3JvdW5kaW5nOiAgICAgaGFsZl9ldmVuCisKK2RxYWRkMzcxMzAwIGZtYSAgMSAgMUUzNCAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzEwIGZtYSAgMSAgMUUzNCAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzExIGZtYSAgMSAgMUUzNCAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzEyIGZtYSAgMSAgMUUzNCAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzEzIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzE0IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzE1IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzE2IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzE3IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzE4IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzE5IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzIwIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzIxIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzIyIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzIzIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzI0IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzI1IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzI2IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzI3IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzI4IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzI5IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzMwIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzMxIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzMyIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzMzIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzM0IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzM1IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzM2IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzM3IGZtYSAgMSAgMUUzNCAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzM4IGZtYSAgMSAgMUUzNCAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzM5IGZtYSAgMSAgMUUzNCAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKKworZHFhZGQzNzEzNDAgZm1hICAxICAxRTM0ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNDEgZm1hICAxICAxRTM0ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAorCitkcWFkZDM3MTM0OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNTAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDkgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzUxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM1MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNTMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTkgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzU0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM1NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNTYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTkgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzU3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM1OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNTkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTkgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzYwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM2MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNjIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTkgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzYzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM2NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNjUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzY3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM2OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNjkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzcwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNzIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzczIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM3NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNzUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzc2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM3NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzNzggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzc5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM4MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzODEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzgyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM4MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzODQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzg1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM4NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzODcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzg4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM4OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzOTAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDEgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzkxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM5MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzOTMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDEgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxMzk0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTM5NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzEzOTYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTEgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKKworLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQKKy0tIGV4cG9uZW50cyBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBwcmVjaXNpb24gYW5kIG9uZSBzaWRlIGlzIDAKK2RxYWRkMzcxNDIwIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTQyMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDIyIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDIzIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTQyNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDI1IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDI2IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTQyNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNworZHFhZGQzNzE0MjggZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTgKK2RxYWRkMzcxNDI5IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05CitkcWFkZDM3MTQzMCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAKK2RxYWRkMzcxNDMxIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZHFhZGQzNzE0MzIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyCitkcWFkZDM3MTQzMyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMKK2RxYWRkMzcxNDM0IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZHFhZGQzNzE0MzUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1CitkcWFkZDM3MTQzNiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYKK2RxYWRkMzcxNDM3IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNworZHFhZGQzNzE0MzggZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4CitkcWFkZDM3MTQzOSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkKK2RxYWRkMzcxNDQwIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMAorZHFhZGQzNzE0NDEgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxCitkcWFkZDM3MTQ0MiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIKK2RxYWRkMzcxNDQzIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMworZHFhZGQzNzE0NDQgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0CitkcWFkZDM3MTQ0NSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUKK2RxYWRkMzcxNDQ2IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNgorZHFhZGQzNzE0NDcgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3CitkcWFkZDM3MTQ0OCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjgKK2RxYWRkMzcxNDQ5IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOQorZHFhZGQzNzE0NTAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwCitkcWFkZDM3MTQ1MSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEKK2RxYWRkMzcxNDUyIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMgorZHFhZGQzNzE0NTMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzCitkcWFkZDM3MTQ1NCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQKK2RxYWRkMzcxNDU1IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNQorZHFhZGQzNzE0NTYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2CisKKy0tIHNhbWUsIHJldmVyc2VkIDAKK2RxYWRkMzcxNDYwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDYxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTQ2MiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDYzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDY0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTQ2NSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDY2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNDY3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcKK2RxYWRkMzcxNDY4IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTgKK2RxYWRkMzcxNDY5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkKK2RxYWRkMzcxNDcwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwCitkcWFkZDM3MTQ3MSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZHFhZGQzNzE0NzIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIKK2RxYWRkMzcxNDczIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzCitkcWFkZDM3MTQ3NCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZHFhZGQzNzE0NzUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUKK2RxYWRkMzcxNDc2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2CitkcWFkZDM3MTQ3NyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNworZHFhZGQzNzE0NzggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTgKK2RxYWRkMzcxNDc5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5CitkcWFkZDM3MTQ4MCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMAorZHFhZGQzNzE0ODEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEKK2RxYWRkMzcxNDgyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyCitkcWFkZDM3MTQ4MyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMworZHFhZGQzNzE0ODQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQKK2RxYWRkMzcxNDg1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1CitkcWFkZDM3MTQ4NiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNgorZHFhZGQzNzE0ODcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcKK2RxYWRkMzcxNDg4IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4CitkcWFkZDM3MTQ4OSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOQorZHFhZGQzNzE0OTAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAKK2RxYWRkMzcxNDkxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxCitkcWFkZDM3MTQ5MiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMgorZHFhZGQzNzE0OTMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMKK2RxYWRkMzcxNDk0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0CitkcWFkZDM3MTQ5NSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNQorZHFhZGQzNzE0OTYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYKKworLS0gc2FtZSwgRXMgb24gdGhlIDAKK2RxYWRkMzcxNTAwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MDEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUwMiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTAzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MDQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUwNSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTA2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MDcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUwOCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTA5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MTAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUxMSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTEyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MTMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUxNCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTE1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MTYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUxNyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTE4IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MTkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUyMCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTIxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIxICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MjIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUyMyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTI0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI0ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MjUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUyNiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTI3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI3ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MjggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUyOSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTMwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMwICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorZHFhZGQzNzE1MzEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1CitkcWFkZDM3MTUzMiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKK2RxYWRkMzcxNTMzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMzICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQorLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdAorZHFhZGQzNzE1MzQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2RxYWRkMzcxNTM1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM1ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitkcWFkZDM3MTUzNiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZHFhZGQzNzE1MzcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKKworLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTAKK3JvdW5kaW5nOiAgICBoYWxmX3VwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitkcWFkZDM3MTYwMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDM3MTYwMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitkcWFkZDM3MTYwMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitkcWFkZDM3MTYwMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZHFhZGQzNzE2MTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAorZHFhZGQzNzE2MTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAorLS0gb3ZlcmZsb3cKK2RxYWRkMzcxNjEzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzE2MTQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkMzcxNjIwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjIxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjIyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjIzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDM3MTYzMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDM3MTYzMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCistLSBvdmVyZmxvdworZHFhZGQzNzE2MzMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTYzNCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZHFhZGQzNzE2NDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2NDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2NDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZHFhZGQzNzE2NDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2RxYWRkMzcxNjUxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKK2RxYWRkMzcxNjUyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKKy0tIG92ZXJmbG93CitkcWFkZDM3MTY1MyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzcxNjU0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkMzcxNjYwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjYxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjYyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjYzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDM3MTY3MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDM3MTY3MiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCistLSBvdmVyZmxvdworZHFhZGQzNzE2NzMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTY3NCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGRvd24KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkMzcxNjgwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjgxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjgyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNjgzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDM3MTY5MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDM3MTY5MiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCistLSBvdmVyZmxvdworZHFhZGQzNzE2OTMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTY5NCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkMzcxNzAwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNzAxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNzAyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNzAzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDM3MTcxMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDM3MTcxMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCistLSBvdmVyZmxvdworZHFhZGQzNzE3MTMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTcxNCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqCityb3VuZGluZzogICAgZmxvb3IKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkMzcxNzIwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNzIxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2RxYWRkMzcxNzIyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2RxYWRkMzcxNzIzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDM3MTczMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCitkcWFkZDM3MTczMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCistLSBvdmVyZmxvdworZHFhZGQzNzE3MzMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTczNCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIDA1dXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2RxYWRkMzcxNzQwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNzQxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNzQyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2RxYWRkMzcxNzQzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitkcWFkZDM3MTc1MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCitkcWFkZDM3MTc1MiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCistLSBvdmVyZmxvdworZHFhZGQzNzE3NTMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3MTc1NCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitkcWFkZDM3MTc2MSBmbWEgIDEgIDEzMEUtMiAgICAxMjBFLTIgICAgLT4gMi41MAorZHFhZGQzNzE3NjIgZm1hICAxICAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTAKK2RxYWRkMzcxNzYzIGZtYSAgMSAgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwCitkcWFkZDM3MTc2NCBmbWEgIDEgIDFFMiAgICAgICAxRTQgICAgICAgLT4gMS4wMUUrNAorZHFhZGQzNzE3NjUgZm1hICAxICAxMzBFLTIgICAtMTIwRS0yIC0+IDAuMTAKK2RxYWRkMzcxNzY2IGZtYSAgMSAgMTMwRS0yICAgLTEyRS0xICAtPiAwLjEwCitkcWFkZDM3MTc2NyBmbWEgIDEgIDEzMEUtMiAgIC0xRTAgICAgLT4gMC4zMAorZHFhZGQzNzE3NjggZm1hICAxICAxRTIgICAgICAtMUU0ICAgIC0+IC05LjlFKzMKKworLS0gR2FwcHkgY29lZmZpY2llbnRzOyBjaGVjayByZXNpZHVlIGhhbmRsaW5nIGV2ZW4gd2l0aCBmdWxsIGNvZWZmaWNpZW50IGdhcAorcm91bmRpbmc6IGhhbGZfZXZlbgorCitkcWFkZDM3NTAwMSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTcKK2RxYWRkMzc1MDAyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAwLjYgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NyAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAwMyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgMC4wNiAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMDQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTMgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDA1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS00ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAwNiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNSAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMDcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTYgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDA4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS03ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAwOSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtOCAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMTAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTkgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDExIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAxMiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTEgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMTMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEyICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDE0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMyAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAxNSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTQgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMTYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE1ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDE3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNiAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAxOCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTcgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwMTkgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE4ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDIwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xOSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTAyMSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMjAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorCistLSB3aWRlbmluZyBzZWNvbmQgYXJndW1lbnQgYXQgZ2FwCitkcWFkZDM3NTAzMCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc5CitkcWFkZDM3NTAzMSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMSAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEKK2RxYWRkMzc1MDMyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMiAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIKK2RxYWRkMzc1MDMzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzCitkcWFkZDM3NTAzNCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNCAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQKK2RxYWRkMzc1MDM1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NSAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDUKK2RxYWRkMzc1MDM2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTYgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2CitkcWFkZDM3NTAzNyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2NyAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1NjcKK2RxYWRkMzc1MDM4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3OCAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzgKK2RxYWRkMzc1MDM5IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODkgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA0MCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1ICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNDEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDQyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUxICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA0MyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDEgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNDQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMSAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDQ1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAxICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA0NiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDEgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNDcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMSAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDQ4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA0OSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAxMjM0NTYKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RxYWRkMzc1MDUwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMjM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA1MSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNTIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDUzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwNTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA1NCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNTUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDU2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwNzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA1NyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNjAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDYxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA2MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNjMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDY0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA2NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNjYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDY3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwMDUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCistLSBmYXItb3V0IHJlc2lkdWVzIChmdWxsIGNvZWZmaWNpZW50IGdhcCBpcyAxNisxNSBkaWdpdHMpCityb3VuZGluZzogdXAKK2RxYWRkMzc1MDcwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtOCAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEKK2RxYWRkMzc1MDcxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtOSAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA3MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTEwICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNzMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDc0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTIgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA3NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTEzICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNzYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDc3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA3OCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE2ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwNzkgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDgwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTggICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA4MSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE5ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwODIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0yMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDgzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMjUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA4NCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMwICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwODUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDg2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzIgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitkcWFkZDM3NTA4NyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMzICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZHFhZGQzNzUwODggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zNCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2RxYWRkMzc1MDg5IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCisKKy0tIERlc3RydWN0aXZlIHN1YnRyYWN0IChmcm9tIHJlbWFpbmRlciB0ZXN0cykKKworLS0gKysrIHNvbWUgb2YgdGhlc2Ugd2lsbCBiZSBvZmYtYnktb25lIHJlbWFpbmRlciB2cyByZW1haW5kZXJOZWFyCisKK2RxZm1hNDAwMCAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzMyAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMC4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzMKK2RxZm1hNDAwMSAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIyMiAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMC4zNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIyMgorZHFmbWE0MDAyICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMTExICAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0wLjQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDExMTEKK2RxZm1hNDAwMyAgZm1hICAgLTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4NjQxOTcyNTMxNCAgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyNTUgIC0+ICAtMS4zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMTQKK2RxZm1hNDAwNCAgZm1hICAgLTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4NjQxOTcyNTMwOCAgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAxLjY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkxMzU4MDI3NDY5MgorZHFmbWE0MDA1ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjUyICAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0xLjMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NDgKK2RxZm1hNDAwNiAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NyAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAxLjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3CitkcWZtYTQwMDcgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTAuNzUzMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzUzCitkcWZtYTQwMDggIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTEuMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3CitkcWZtYTQwMDkgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDYgICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMS41MzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1NAorZHFmbWE0MDEwICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQyICAgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0wLjY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDIKK2RxZm1hNDAxMSAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzMiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAwLjc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2OAorZHFmbWE0MDEyICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjIxICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDAuNjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NzkKK2RxZm1hNDAxMyAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTExMCAgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAwLjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg4OTAKK2RxZm1hNDAxNCAgZm1hICAgLTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4NjQxOTcyNTMxMyAgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyNTUgIC0+ICAyLjY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkxMzU4MDI3NDY4NworZHFmbWE0MDE1ICBmbWEgICAtMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4ICAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDEuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkyCitkcWZtYTQwMTYgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNTEgICAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMy42OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjUxCitkcWZtYTQwMTcgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcgICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMS40NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NworZHFmbWE0MDE4ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2ICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDQuMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2CitkcWZtYTQwMTkgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDEgICAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgNC4zMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzU5CisKKy0tIE51bGwgdGVzdHMKK2RxYWRkMzk5OTAgZm1hICAxICAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxYWRkMzk5OTEgZm1hICAxICAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxSW52ZXJ0LmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxSW52ZXJ0LmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIyY2ZjOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFJbnZlcnQuZGVjVGVzdApAQCAtMCwwICsxLDI0NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUludmVydC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIElOVkVSVCBmb3IgZGVjUXVhZHMgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCitkcWludjAwMSBpbnZlcnQgICAgICAgICAgICAgMCAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWludjAwMiBpbnZlcnQgICAgICAgICAgICAgMSAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCitkcWludjAwMyBpbnZlcnQgICAgICAgICAgICAxMCAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxCitkcWludjAwNCBpbnZlcnQgICAgIDExMTExMTExMSAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwCitkcWludjAwNSBpbnZlcnQgICAgIDAwMDAwMDAwMCAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQorZHFpbnYwMDcgaW52ZXJ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWludjAwOCBpbnZlcnQgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2RxaW52MDA5IGludmVydCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFpbnYwMTAgaW52ZXJ0IDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcWludjAxMSBpbnZlcnQgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxaW52MDEyIGludmVydCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgICAgMAorZHFpbnYwMTMgaW52ZXJ0IDAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgLT4gICAxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcWludjAxNCBpbnZlcnQgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworLS0gVmFyaW91cyBsZW5ndGhzCitkcWludjYwMCBpbnZlcnQgMDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAKK2RxaW52NjAxIGludmVydCAwMDExMTExMTExMTExMTExMTEwMTAxMTExMTExMTExMTExIC0+ICAgMTEwMDAwMDAwMDAwMDAwMDAwMTAxMDAwMDAwMDAwMDAwMAorZHFpbnY2MDIgaW52ZXJ0IDAxMDExMTExMTExMTExMTExMDExMTAxMTExMTExMTExMTEgLT4gICAxMDEwMDAwMDAwMDAwMDAwMDEwMDAxMDAwMDAwMDAwMDAwCitkcWludjYwMyBpbnZlcnQgMDExMDExMTExMTExMTExMTAxMTExMTAxMTExMTExMTExMSAtPiAgIDEwMDEwMDAwMDAwMDAwMDAxMDAwMDAxMDAwMDAwMDAwMDAKK2RxaW52NjA0IGludmVydCAwMTExMDExMTExMTExMTEwMTExMTExMTAxMTExMTExMTExIC0+ICAgMTAwMDEwMDAwMDAwMDAwMTAwMDAwMDAxMDAwMDAwMDAwMAorZHFpbnY2MDUgaW52ZXJ0IDAxMTExMDExMTExMTExMDExMTExMTExMTAxMTExMTExMTEgLT4gICAxMDAwMDEwMDAwMDAwMDEwMDAwMDAwMDAxMDAwMDAwMDAwCitkcWludjYwNiBpbnZlcnQgMDExMTExMDExMTExMTAxMTExMTExMTExMTAxMTExMTExMSAtPiAgIDEwMDAwMDEwMDAwMDAxMDAwMDAwMDAwMDAxMDAwMDAwMDAKK2RxaW52NjA3IGludmVydCAwMTExMTExMDExMTEwMTExMTExMTExMTExMTAxMTExMTExIC0+ICAgMTAwMDAwMDEwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAwMAorZHFpbnY2MDggaW52ZXJ0IDAxMTExMTExMDExMDExMTExMTExMTExMTExMTAxMTExMTEgLT4gICAxMDAwMDAwMDEwMDEwMDAwMDAwMDAwMDAwMDAxMDAwMDAwCitkcWludjYwOSBpbnZlcnQgMDExMTExMTExMDAxMTExMTExMTExMTExMTExMTAxMTExMSAtPiAgIDEwMDAwMDAwMDExMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAKK2RxaW52NjEwIGludmVydCAwMTExMTExMTEwMDExMTExMTExMTExMTExMTExMTAxMTExIC0+ICAgMTAwMDAwMDAwMTEwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMAorZHFpbnY2MTEgaW52ZXJ0IDAxMTExMTExMDExMDExMTExMTExMTExMTExMTExMTAxMTEgLT4gICAxMDAwMDAwMDEwMDEwMDAwMDAwMDAwMDAwMDAwMDAxMDAwCitkcWludjYxMiBpbnZlcnQgMDExMTExMTAxMTExMDExMTExMTExMTExMTExMTExMTAxMSAtPiAgIDEwMDAwMDAxMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAxMDAKK2RxaW52NjEzIGludmVydCAwMTExMTEwMTExMTExMDExMTExMTExMTExMTExMTExMTAxIC0+ICAgMTAwMDAwMTAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAxMAorZHFpbnY2MTQgaW52ZXJ0IDAxMTExMDExMTExMTExMDExMTExMTExMTExMTExMTExMTAgLT4gICAxMDAwMDEwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAxCitkcWludjYxNSBpbnZlcnQgMDExMTAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAtPiAgIDEwMDAxMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAKK2RxaW52NjE2IGludmVydCAwMTEwMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEwIC0+ICAgMTAwMTAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMQorZHFpbnY2MTcgaW52ZXJ0IDAxMDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMDEgLT4gICAxMDEwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDEwCitkcWludjYxOCBpbnZlcnQgMDAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTAxMSAtPiAgIDExMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAxMDAKK2RxaW52NjE5IGludmVydCAwMTAxMTExMTExMTExMTExMTExMDExMTExMTExMTEwMTExIC0+ICAgMTAxMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMTAwMAorZHFpbnY2MjAgaW52ZXJ0IDAxMTAxMTExMTExMTExMTExMTExMDExMTExMTExMDExMTEgLT4gICAxMDAxMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDEwMDAwCitkcWludjYyMSBpbnZlcnQgMDExMTAxMTExMTExMTExMTExMTExMDExMTExMTAxMTExMSAtPiAgIDEwMDAxMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAxMDAwMDAKK2RxaW52NjIyIGludmVydCAwMTExMTAxMTExMTExMTExMTExMTExMDExMTEwMTExMTExIC0+ICAgMTAwMDAxMDAwMDAwMDAwMDAwMDAwMDEwMDAwMTAwMDAwMAorZHFpbnY2MjMgaW52ZXJ0IDAxMTExMTAxMTExMTExMTExMTExMTExMDExMDExMTExMTEgLT4gICAxMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDEwMDEwMDAwMDAwCitkcWludjYyNCBpbnZlcnQgMDExMTExMTAxMTExMTExMTExMTExMTExMDAxMTExMTExMSAtPiAgIDEwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDExMDAwMDAwMDAKK2RxaW52NjI1IGludmVydCAwMTExMTExMTAxMTExMTExMTExMTExMTEwMDExMTExMTExIC0+ICAgMTAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMTEwMDAwMDAwMAorZHFpbnY2MjYgaW52ZXJ0IDAxMTExMTExMTAxMTExMTExMTExMTExMDExMDExMTExMTEgLT4gICAxMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDEwMDAwMDAwCitkcWludjYyNyBpbnZlcnQgMDExMTExMTExMTAxMTExMTExMTExMTAxMTExMDExMTExMSAtPiAgIDEwMDAwMDAwMDAxMDAwMDAwMDAwMDAxMDAwMDEwMDAwMDAKK2RxaW52NjI4IGludmVydCAwMTExMTExMTExMTAxMTExMTExMTEwMTExMTExMDExMTExIC0+ICAgMTAwMDAwMDAwMDAxMDAwMDAwMDAwMTAwMDAwMDEwMDAwMAorZHFpbnY2MjkgaW52ZXJ0IDAxMTExMTExMTExMTAxMTExMTExMDExMTExMTExMDExMTEgLT4gICAxMDAwMDAwMDAwMDAxMDAwMDAwMDEwMDAwMDAwMDEwMDAwCitkcWludjYzMCBpbnZlcnQgMDExMTExMTExMTExMTAxMTExMTAxMTExMTExMTExMDExMSAtPiAgIDEwMDAwMDAwMDAwMDAxMDAwMDAxMDAwMDAwMDAwMDEwMDAKK2RxaW52NjMxIGludmVydCAwMTExMTExMTExMTExMTAxMTEwMTExMTExMTExMTExMDExIC0+ICAgMTAwMDAwMDAwMDAwMDAxMDAwMTAwMDAwMDAwMDAwMDEwMAorZHFpbnY2MzIgaW52ZXJ0IDAxMTExMTExMTExMTExMTAxMDExMTExMTExMTExMTExMDEgLT4gICAxMDAwMDAwMDAwMDAwMDAxMDEwMDAwMDAwMDAwMDAwMDEwCitkcWludjYzMyBpbnZlcnQgMDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDEKKworZHFpbnYwMjEgaW52ZXJ0IDExMTExMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMAorZHFpbnYwMjIgaW52ZXJ0IDExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMAorZHFpbnYwMjMgaW52ZXJ0ICAxMTExMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMAorZHFpbnYwMjUgaW52ZXJ0ICAgMTExMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMAorZHFpbnYwMjYgaW52ZXJ0ICAgIDExMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMAorZHFpbnYwMjcgaW52ZXJ0ICAgICAxMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMAorZHFpbnYwMjggaW52ZXJ0ICAgICAgMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMAorZHFpbnYwMjkgaW52ZXJ0ICAgICAgIDExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMAorZHFpbnYwMzEgaW52ZXJ0ICAgICAgICAxMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMAorZHFpbnYwMzIgaW52ZXJ0ICAgICAgICAgMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMAorZHFpbnYwMzMgaW52ZXJ0IDExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMAorZHFpbnYwMzQgaW52ZXJ0IDExMTExMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMAorZHFpbnYwMzUgaW52ZXJ0IDExMTExMTExMTEgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMAorZHFpbnYwMzYgaW52ZXJ0IDExMTExMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMAorCitkcWludjA0MCBpbnZlcnQgMDExMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMAorZHFpbnYwNDEgaW52ZXJ0IDEwMTExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMDAwMDAKK2RxaW52MDQyIGludmVydCAxMTAxMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAxMDAwMDAwCitkcWludjA0MyBpbnZlcnQgMTExMDExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDEwMDAwMAorZHFpbnYwNDQgaW52ZXJ0IDExMTEwMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMTAwMDAKK2RxaW52MDQ1IGludmVydCAxMTExMTAxMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAxMDAwCitkcWludjA0NiBpbnZlcnQgMTExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDEwMAorZHFpbnYwNDcgaW52ZXJ0IDExMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMTAKK2RxaW52MDQ4IGludmVydCAxMTExMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAxCitkcWludjA0OSBpbnZlcnQgMDExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDEwMAorZHFpbnYwNTAgaW52ZXJ0IDEwMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMDAwMTAKK2RxaW52MDUxIGludmVydCAxMTAxMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAxMDAwMDAxCitkcWludjA1MiBpbnZlcnQgMTExMDExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDEwMDAxMAorZHFpbnYwNTMgaW52ZXJ0IDExMTEwMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMTAxMDAKK2RxaW52MDU0IGludmVydCAxMTExMTAxMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAxMDAwCitkcWludjA1NSBpbnZlcnQgMTExMTAxMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAxMDEwMAorZHFpbnYwNTYgaW52ZXJ0IDExMTAxMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAxMDAwMTAKK2RxaW52MDU3IGludmVydCAxMTAxMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAxMDAwMDAxCitkcWludjA1OCBpbnZlcnQgMTAxMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMDAwMDAxMAorZHFpbnYwNTkgaW52ZXJ0IDAxMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAxMDAKKworZHFpbnYwODAgaW52ZXJ0IDEwMDAwMDAwMTExMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTEwMTExMTExMTAwMDAwMDAwCitkcWludjA4MSBpbnZlcnQgMDEwMDAwMDEwMTExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTEwMTAwMDAwMDAKK2RxaW52MDgyIGludmVydCAwMDEwMDAwMTEwMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTAwMTAwMDAwMAorZHFpbnYwODMgaW52ZXJ0IDAwMDEwMDAxMTEwMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMDAwMTAwMDAwCitkcWludjA4NCBpbnZlcnQgMDAwMDEwMDExMTEwMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTEwMDAwMTAwMDAKK2RxaW52MDg1IGludmVydCAwMDAwMDEwMTExMTEwMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMDAwMTAwMAorZHFpbnYwODYgaW52ZXJ0IDAwMDAwMDExMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMTAwCitkcWludjA4NyBpbnZlcnQgMDAwMDAxMDExMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDEwMDAwMDAwMTAKK2RxaW52MDg4IGludmVydCAwMDAwMTAwMTExMTExMTEwICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTAwMDAwMDAwMQorZHFpbnYwODkgaW52ZXJ0IDAwMDEwMDAwMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMTAwMDAwMTAwCitkcWludjA5MCBpbnZlcnQgMDAxMDAwMDEwMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMDExMTEwMTAwMDAwMTAKK2RxaW52MDkxIGludmVydCAwMTAwMDAwMTEwMTExMTEwICAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTAwMTAwMDAwMQorZHFpbnYwOTIgaW52ZXJ0IDEwMDAwMDAxMTEwMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTEwMTExMTExMDAwMTAwMDEwCitkcWludjA5MyBpbnZlcnQgMDEwMDAwMDExMTEwMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTEwMDAwMTAxMDAKK2RxaW52MDk0IGludmVydCAwMDEwMDAwMTExMTEwMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTAwMDAwMTAwMAorZHFpbnYwOTUgaW52ZXJ0IDAwMDEwMDAxMTExMDEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMDAwMDEwMTAwCitkcWludjA5NiBpbnZlcnQgMDAwMDEwMDExMTAxMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTEwMDAxMDAwMTAKK2RxaW52MDk3IGludmVydCAwMDAwMDEwMTEwMTExMTEwICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMTAwMDAwMQorZHFpbnYwOTggaW52ZXJ0IDAwMDAwMDExMDExMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMDEwMDAwMDEwCitkcWludjA5OSBpbnZlcnQgMDAwMDAxMDAxMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDExMDAwMDAxMDAKKworLS0gYW5kIG1vcmUgdGhvcm91Z2ggTVNEL0xTRCB0ZXN0cyBbOCBhbmQgOSBtZ2h0IGJlIGVuY29kZWQgZGlmZmVyZW50bHkuLi5dCitkcWludjE1MSBpbnZlcnQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorZHFpbnYxNTIgaW52ZXJ0IDExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAgIDExMTExMTExMTExMTExMTEKK2RxaW52MTUzIGludmVydCAxMDAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExIC0+ICAgMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMDAwMDAwCitkcWludjE1NCBpbnZlcnQgMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgICAgIDExMTExMTExMTExMTExMQorZHFpbnYxNTUgaW52ZXJ0IDAxMDAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTEgLT4gIDEwMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMDAwMDAKK2RxaW52MTU2IGludmVydCAxMDExMTExMTExMTExMTExMTEwMTAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAxMDExMTExMTExMTExMTExCitkcWludjE1NyBpbnZlcnQgMTEwMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMAorZHFpbnYxNTggaW52ZXJ0IDExMTAxMTExMTExMTExMTExMTAwMTExMTExMTExMTExMTEgLT4gICAgIDEwMDAwMDAwMDAwMDAwMDExMDAwMDAwMDAwMDAwMDAKKworLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCitkcWludjIyMCBpbnZlcnQgMTExMTExMTEyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMjEgaW52ZXJ0IDMzMzMzMzMzMyAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjIyIGludmVydCA1NTU1NTU1NTUgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIyMyBpbnZlcnQgNzc3Nzc3Nzc3ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMjQgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjI1IGludmVydCAyMjIyMjIyMjIgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIyNiBpbnZlcnQgNDQ0NDQ0NDQ0ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMjcgaW52ZXJ0IDY2NjY2NjY2NiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjI4IGludmVydCA4ODg4ODg4ODggICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIyOSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyMzAgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjMxIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjIzMiBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworZHFpbnYyNDAgaW52ZXJ0ICA1Njc0Njg2ODkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjQxIGludmVydCAgNTY3MzY3Njg5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI0MiBpbnZlcnQgLTYzMTkxNzc3MiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNDMgaW52ZXJ0IC03NTYyNTMyNTcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjQ0IGludmVydCAgODM1NTkwMTQ5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRAorZHFpbnYyNTAgaW52ZXJ0ICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjUxIGludmVydCAgMzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI1MiBpbnZlcnQgIDQwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNTMgaW52ZXJ0ICA1MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjU0IGludmVydCAgNjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI1NSBpbnZlcnQgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNTYgaW52ZXJ0ICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjU3IGludmVydCAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCitkcWludjI3MCBpbnZlcnQgIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNzEgaW52ZXJ0ICAwMzAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjcyIGludmVydCAgMDQwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI3MyBpbnZlcnQgIDA1MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNzQgaW52ZXJ0ICAxNjAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Mjc1IGludmVydCAgMTcwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI3NiBpbnZlcnQgIDE4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyNzcgaW52ZXJ0ICAxOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTFNECitkcWludjI4MCBpbnZlcnQgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyODEgaW52ZXJ0ICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjgyIGludmVydCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI4MyBpbnZlcnQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDUgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyODQgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDA2IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Mjg1IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI4NiBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyODcgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCitkcWludjI4OCBpbnZlcnQgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyODkgaW52ZXJ0ICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDMwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjkwIGludmVydCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDA0MDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI5MSBpbnZlcnQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwNTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyOTIgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDYwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MjkzIGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDE3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjI5NCBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwODAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYyOTUgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDkxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ25zCitkcWludjI5NiBpbnZlcnQgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52Mjk5IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgLT4gIDExMTExMTAwMDExMTAwMDExMTAwMDExMTExMDExMTExMQorCistLSBObWF4LCBObWluLCBOdGlueS1saWtlCitkcWludjM0MSBpbnZlcnQgIDkuOTk5OTk5OTlFKzI5OTggIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNDIgaW52ZXJ0ICAxRS0yOTk4ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MzQzIGludmVydCAgMS4wMDAwMDAwMEUtMjk5OCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM0NCBpbnZlcnQgIDFFLTIwNzggICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNDUgaW52ZXJ0ICAtMUUtMjA3OCAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MzQ2IGludmVydCAgLTEuMDAwMDAwMDBFLTI5OTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM0NyBpbnZlcnQgIC0xRS0yOTk4ICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNDggaW52ZXJ0ICAtOS45OTk5OTk5OUUrMjk5OCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCitkcWludjM2MSBpbnZlcnQgIDEuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNjIgaW52ZXJ0ICAxRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MzYzIGludmVydCAgMC4wICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjM2NCBpbnZlcnQgIDBFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnYzNjUgaW52ZXJ0ICA5LjkgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxaW52MzY2IGludmVydCAgOUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKK2RxaW52Nzg4IGludmVydCAtSW5mICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcWludjc5NCBpbnZlcnQgIEluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFpbnY4MjEgaW52ZXJ0ICBOYU4gICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxaW52ODQxIGludmVydCAgc05hTiAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCistLSBwcm9wYWdhdGluZyBOYU5zCitkcWludjg2MSBpbnZlcnQgIE5hTjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjg2MiBpbnZlcnQgK05hTjIgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjg2MyBpbnZlcnQgIE5hTjMgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjg2NCBpbnZlcnQgIE5hTjQgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjg2NSBpbnZlcnQgIE5hTjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjg3MSBpbnZlcnQgIHNOYU4xMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjg3MiBpbnZlcnQgIHNOYU4xMiAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjg3MyBpbnZlcnQgIHNOYU4xMyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjg3NCBpbnZlcnQgIHNOYU4xNCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjg3NSBpbnZlcnQgIHNOYU4xNSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjg3NiBpbnZlcnQgIE5hTjE2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjg4MSBpbnZlcnQgK05hTjI1ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjg4MiBpbnZlcnQgLU5hTjI2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcWludjg4MyBpbnZlcnQgLXNOYU4yNyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTG9nQi5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUxvZ0IuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDlmM2RjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUxvZ0IuZGVjVGVzdApAQCAtMCwwICsxLDE2MCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcUxvZ0IuZGVjVGVzdCAtLSBpbnRlZ3JhbCA3NTRyIGFkanVzdGVkIGV4cG9uZW50LCBmb3IgZGVjUXVhZHMgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIGJhc2ljcworZHFsb2diMDAwIGxvZ2IgIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMDAxIGxvZ2IgIDFFLTYxNzYgICAgICAgICAgIC0+IC02MTc2CitkcWxvZ2IwMDIgbG9nYiAgMUUtNjE0MyAgICAgICAgICAgLT4gLTYxNDMKK2RxbG9nYjAwMyBsb2diICAwLjAwMSAgICAgICAgICAgICAtPiAtMworZHFsb2diMDA0IGxvZ2IgIDAuMDMgICAgICAgICAgICAgIC0+IC0yCitkcWxvZ2IwMDUgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gIDAKK2RxbG9nYjAwNiBsb2diICAyICAgICAgICAgICAgICAgICAtPiAgMAorZHFsb2diMDA3IGxvZ2IgIDIuNSAgICAgICAgICAgICAgIC0+ICAwCitkcWxvZ2IwMDggbG9nYiAgMi41MCAgICAgICAgICAgICAgLT4gIDAKK2RxbG9nYjAwOSBsb2diICAyLjUwMCAgICAgICAgICAgICAtPiAgMAorZHFsb2diMDEwIGxvZ2IgIDEwICAgICAgICAgICAgICAgIC0+ICAxCitkcWxvZ2IwMTEgbG9nYiAgNzAgICAgICAgICAgICAgICAgLT4gIDEKK2RxbG9nYjAxMiBsb2diICAxMDAgICAgICAgICAgICAgICAtPiAgMgorZHFsb2diMDEzIGxvZ2IgIDI1MCAgICAgICAgICAgICAgIC0+ICAyCitkcWxvZ2IwMTQgbG9nYiAgOUUrNjE0NCAgICAgICAgICAgLT4gIDYxNDQKK2RxbG9nYjAxNSBsb2diICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKKworLS0gbmVnYXRpdmVzIGFwcGVhciB0byBiZSB0cmVhdGVkIGFzIHBvc2l0aXZlcworZHFsb2diMDIxIGxvZ2IgLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMDIyIGxvZ2IgLTFFLTYxNzYgICAgICAgICAgIC0+IC02MTc2CitkcWxvZ2IwMjMgbG9nYiAtOUUtNjE0MyAgICAgICAgICAgLT4gLTYxNDMKK2RxbG9nYjAyNCBsb2diIC0wLjAwMSAgICAgICAgICAgICAtPiAtMworZHFsb2diMDI1IGxvZ2IgLTEgICAgICAgICAgICAgICAgIC0+ICAwCitkcWxvZ2IwMjYgbG9nYiAtMiAgICAgICAgICAgICAgICAgLT4gIDAKK2RxbG9nYjAyNyBsb2diIC0xMCAgICAgICAgICAgICAgICAtPiAgMQorZHFsb2diMDI4IGxvZ2IgLTcwICAgICAgICAgICAgICAgIC0+ICAxCitkcWxvZ2IwMjkgbG9nYiAtMTAwICAgICAgICAgICAgICAgLT4gIDIKK2RxbG9nYjAzMCBsb2diIC05RSs2MTQ0ICAgICAgICAgICAtPiAgNjE0NAorZHFsb2diMDMxIGxvZ2IgLUluZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCistLSB6ZXJvcworZHFsb2diMTExIGxvZ2IgICAgICAgICAgMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMTEyIGxvZ2IgICAgICAgICAtMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMTEzIGxvZ2IgICAgICAgMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMTE0IGxvZ2IgICAgICAtMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMTE1IGxvZ2IgICAgIDAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMTE2IGxvZ2IgICAgLTAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMTE3IGxvZ2IgICAgICAwRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworZHFsb2diMTE4IGxvZ2IgICAgIC0wRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZHFsb2diMTIxIGxvZ2IgICAyNjgyNjgyNjggICAgICAgIC0+IDgKK2RxbG9nYjEyMiBsb2diICAtMjY4MjY4MjY4ICAgICAgICAtPiA4CitkcWxvZ2IxMjMgbG9nYiAgIDEzNDEzNDEzNCAgICAgICAgLT4gOAorZHFsb2diMTI0IGxvZ2IgIC0xMzQxMzQxMzQgICAgICAgIC0+IDgKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxbG9nYjEzMSBsb2diICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICA2MTQ0CitkcWxvZ2IxMzIgbG9nYiAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiAtNjE0MworZHFsb2diMTMzIGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gLTYxNDMKK2RxbG9nYjEzNCBsb2diICAxRS02MTc2ICAgICAgICAgICAgICAgICAgIC0+IC02MTc2CisKK2RxbG9nYjEzNSBsb2diICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC02MTc2CitkcWxvZ2IxMzYgbG9nYiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAtNjE0MworZHFsb2diMTM3IGxvZ2IgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gLTYxNDMKK2RxbG9nYjE2MTQgbG9nYiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgNjE0NAorCistLSBvbmVzCitkcWxvZ2IwMDYxIGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorZHFsb2diMDA2MiBsb2diICAxLjAgICAgICAgICAgICAgICAtPiAgIDAKK2RxbG9nYjAwNjMgbG9nYiAgMS4wMDAwMDAwMDAwMDAwMDAgLT4gICAwCisKKy0tIG5vdGFibGUgY2FzZXMgLS0gZXhhY3QgcG93ZXJzIG9mIDEwCitkcWxvZ2IxMTAwIGxvZ2IgMSAgICAgICAgICAgICAtPiAwCitkcWxvZ2IxMTAxIGxvZ2IgMTAgICAgICAgICAgICAtPiAxCitkcWxvZ2IxMTAyIGxvZ2IgMTAwICAgICAgICAgICAtPiAyCitkcWxvZ2IxMTAzIGxvZ2IgMTAwMCAgICAgICAgICAtPiAzCitkcWxvZ2IxMTA0IGxvZ2IgMTAwMDAgICAgICAgICAtPiA0CitkcWxvZ2IxMTA1IGxvZ2IgMTAwMDAwICAgICAgICAtPiA1CitkcWxvZ2IxMTA2IGxvZ2IgMTAwMDAwMCAgICAgICAtPiA2CitkcWxvZ2IxMTA3IGxvZ2IgMTAwMDAwMDAgICAgICAtPiA3CitkcWxvZ2IxMTA4IGxvZ2IgMTAwMDAwMDAwICAgICAtPiA4CitkcWxvZ2IxMTA5IGxvZ2IgMTAwMDAwMDAwMCAgICAtPiA5CitkcWxvZ2IxMTEwIGxvZ2IgMTAwMDAwMDAwMDAgICAtPiAxMAorZHFsb2diMTExMSBsb2diIDEwMDAwMDAwMDAwMCAgLT4gMTEKK2RxbG9nYjExMTIgbG9nYiAxMDAwMDAwMDAwMDAwIC0+IDEyCitkcWxvZ2IxMTEzIGxvZ2IgMC4wMDAwMDAwMDAwMSAtPiAtMTEKK2RxbG9nYjExMTQgbG9nYiAwLjAwMDAwMDAwMDEgLT4gLTEwCitkcWxvZ2IxMTE1IGxvZ2IgMC4wMDAwMDAwMDEgLT4gLTkKK2RxbG9nYjExMTYgbG9nYiAwLjAwMDAwMDAxIC0+IC04CitkcWxvZ2IxMTE3IGxvZ2IgMC4wMDAwMDAxIC0+IC03CitkcWxvZ2IxMTE4IGxvZ2IgMC4wMDAwMDEgLT4gLTYKK2RxbG9nYjExMTkgbG9nYiAwLjAwMDAxIC0+IC01CitkcWxvZ2IxMTIwIGxvZ2IgMC4wMDAxIC0+IC00CitkcWxvZ2IxMTIxIGxvZ2IgMC4wMDEgLT4gLTMKK2RxbG9nYjExMjIgbG9nYiAwLjAxIC0+IC0yCitkcWxvZ2IxMTIzIGxvZ2IgMC4xIC0+IC0xCitkcWxvZ2IxMTI0IGxvZ2IgMUUtOTkgIC0+IC05OQorZHFsb2diMTEyNSBsb2diIDFFLTEwMCAtPiAtMTAwCitkcWxvZ2IxMTI3IGxvZ2IgMUUtMjk5IC0+IC0yOTkKK2RxbG9nYjExMjYgbG9nYiAxRS02MTQzIC0+IC02MTQzCisKKy0tIHN1Z2dlc3Rpb25zIGZyb20gSWxhbiBOZWhhbWEKK2RxbG9nYjE0MDAgbG9nYiAxMEUtMyAgICAtPiAtMgorZHFsb2diMTQwMSBsb2diIDEwRS0yICAgIC0+IC0xCitkcWxvZ2IxNDAyIGxvZ2IgMTAwRS0yICAgLT4gIDAKK2RxbG9nYjE0MDMgbG9nYiAxMDAwRS0yICAtPiAgMQorZHFsb2diMTQwNCBsb2diIDEwMDAwRS0yIC0+ICAyCitkcWxvZ2IxNDA1IGxvZ2IgMTBFLTEgICAgLT4gIDAKK2RxbG9nYjE0MDYgbG9nYiAxMDBFLTEgICAtPiAgMQorZHFsb2diMTQwNyBsb2diIDEwMDBFLTEgIC0+ICAyCitkcWxvZ2IxNDA4IGxvZ2IgMTAwMDBFLTEgLT4gIDMKK2RxbG9nYjE0MDkgbG9nYiAxMEUwICAgICAtPiAgMQorZHFsb2diMTQxMCBsb2diIDEwMEUwICAgIC0+ICAyCitkcWxvZ2IxNDExIGxvZ2IgMTAwMEUwICAgLT4gIDMKK2RxbG9nYjE0MTIgbG9nYiAxMDAwMEUwICAtPiAgNAorZHFsb2diMTQxMyBsb2diIDEwRTEgICAgIC0+ICAyCitkcWxvZ2IxNDE0IGxvZ2IgMTAwRTEgICAgLT4gIDMKK2RxbG9nYjE0MTUgbG9nYiAxMDAwRTEgICAtPiAgNAorZHFsb2diMTQxNiBsb2diIDEwMDAwRTEgIC0+ICA1CitkcWxvZ2IxNDE3IGxvZ2IgMTBFMiAgICAgLT4gIDMKK2RxbG9nYjE0MTggbG9nYiAxMDBFMiAgICAtPiAgNAorZHFsb2diMTQxOSBsb2diIDEwMDBFMiAgIC0+ICA1CitkcWxvZ2IxNDIwIGxvZ2IgMTAwMDBFMiAgLT4gIDYKKworLS0gc3BlY2lhbCB2YWx1ZXMKK2RxbG9nYjgyMCAgbG9nYiAgIEluZmluaXR5IC0+ICAgSW5maW5pdHkKK2RxbG9nYjgyMSAgbG9nYiAgIDAgICAgICAgIC0+ICAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybworZHFsb2diODIyICBsb2diICAgTmFOICAgICAgLT4gICBOYU4KK2RxbG9nYjgyMyAgbG9nYiAgIHNOYU4gICAgIC0+ICAgTmFOICAgICBJbnZhbGlkX29wZXJhdGlvbgorLS0gcHJvcGFnYXRpbmcgTmFOcworZHFsb2diODI0ICBsb2diICAgc05hTjEyMyAgLT4gICBOYU4xMjMgIEludmFsaWRfb3BlcmF0aW9uCitkcWxvZ2I4MjUgIGxvZ2IgICAtc05hTjMyMSAtPiAgLU5hTjMyMSAgSW52YWxpZF9vcGVyYXRpb24KK2RxbG9nYjgyNiAgbG9nYiAgIE5hTjQ1NiAgIC0+ICAgTmFONDU2CitkcWxvZ2I4MjcgIGxvZ2IgICAtTmFONjU0ICAtPiAgLU5hTjY1NAorZHFsb2diODI4ICBsb2diICAgTmFOMSAgICAgLT4gICBOYU4xCisKKy0tIE51bGwgdGVzdAorZHFsb2diOTAwICBsb2diICMgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWF4LmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWF4LmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyZDRiZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNYXguZGVjVGVzdApAQCAtMCwwICsxLDMyMiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcU1heC5kZWNUZXN0IC0tIGRlY1F1YWQgbWF4bnVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbworLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcW1heDAwMSBtYXggIC0yICAtMiAgLT4gLTIKK2RxbWF4MDAyIG1heCAgLTIgIC0xICAtPiAtMQorZHFtYXgwMDMgbWF4ICAtMiAgIDAgIC0+ICAwCitkcW1heDAwNCBtYXggIC0yICAgMSAgLT4gIDEKK2RxbWF4MDA1IG1heCAgLTIgICAyICAtPiAgMgorZHFtYXgwMDYgbWF4ICAtMSAgLTIgIC0+IC0xCitkcW1heDAwNyBtYXggIC0xICAtMSAgLT4gLTEKK2RxbWF4MDA4IG1heCAgLTEgICAwICAtPiAgMAorZHFtYXgwMDkgbWF4ICAtMSAgIDEgIC0+ICAxCitkcW1heDAxMCBtYXggIC0xICAgMiAgLT4gIDIKK2RxbWF4MDExIG1heCAgIDAgIC0yICAtPiAgMAorZHFtYXgwMTIgbWF4ICAgMCAgLTEgIC0+ICAwCitkcW1heDAxMyBtYXggICAwICAgMCAgLT4gIDAKK2RxbWF4MDE0IG1heCAgIDAgICAxICAtPiAgMQorZHFtYXgwMTUgbWF4ICAgMCAgIDIgIC0+ICAyCitkcW1heDAxNiBtYXggICAxICAtMiAgLT4gIDEKK2RxbWF4MDE3IG1heCAgIDEgIC0xICAtPiAgMQorZHFtYXgwMTggbWF4ICAgMSAgIDAgIC0+ICAxCitkcW1heDAxOSBtYXggICAxICAgMSAgLT4gIDEKK2RxbWF4MDIwIG1heCAgIDEgICAyICAtPiAgMgorZHFtYXgwMjEgbWF4ICAgMiAgLTIgIC0+ICAyCitkcW1heDAyMiBtYXggICAyICAtMSAgLT4gIDIKK2RxbWF4MDIzIG1heCAgIDIgICAwICAtPiAgMgorZHFtYXgwMjUgbWF4ICAgMiAgIDEgIC0+ICAyCitkcW1heDAyNiBtYXggICAyICAgMiAgLT4gIDIKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RxbWF4MDMwIG1heCAgIDAgICAgIDAgICAtPiAgMAorZHFtYXgwMzEgbWF4ICAgMCAgICAtMCAgIC0+ICAwCitkcW1heDAzMiBtYXggICAwICAgIC0wLjAgLT4gIDAKK2RxbWF4MDMzIG1heCAgIDAgICAgIDAuMCAtPiAgMAorZHFtYXgwMzQgbWF4ICAtMCAgICAgMCAgIC0+ICAwICAgIC0tIG5vdGU6IC0wID0gMCwgYnV0IDAgY2hvc2VuCitkcW1heDAzNSBtYXggIC0wICAgIC0wICAgLT4gLTAKK2RxbWF4MDM2IG1heCAgLTAgICAgLTAuMCAtPiAtMC4wCitkcW1heDAzNyBtYXggIC0wICAgICAwLjAgLT4gIDAuMAorZHFtYXgwMzggbWF4ICAgMC4wICAgMCAgIC0+ICAwCitkcW1heDAzOSBtYXggICAwLjAgIC0wICAgLT4gIDAuMAorZHFtYXgwNDAgbWF4ICAgMC4wICAtMC4wIC0+ICAwLjAKK2RxbWF4MDQxIG1heCAgIDAuMCAgIDAuMCAtPiAgMC4wCitkcW1heDA0MiBtYXggIC0wLjAgICAwICAgLT4gIDAKK2RxbWF4MDQzIG1heCAgLTAuMCAgLTAgICAtPiAtMC4wCitkcW1heDA0NCBtYXggIC0wLjAgIC0wLjAgLT4gLTAuMAorZHFtYXgwNDUgbWF4ICAtMC4wICAgMC4wIC0+ICAwLjAKKworZHFtYXgwNTAgbWF4ICAtMEUxICAgMEUxIC0+ICAwRSsxCitkcW1heDA1MSBtYXggIC0wRTIgICAwRTIgLT4gIDBFKzIKK2RxbWF4MDUyIG1heCAgLTBFMiAgIDBFMSAtPiAgMEUrMQorZHFtYXgwNTMgbWF4ICAtMEUxICAgMEUyIC0+ICAwRSsyCitkcW1heDA1NCBtYXggICAwRTEgIC0wRTEgLT4gIDBFKzEKK2RxbWF4MDU1IG1heCAgIDBFMiAgLTBFMiAtPiAgMEUrMgorZHFtYXgwNTYgbWF4ICAgMEUyICAtMEUxIC0+ICAwRSsyCitkcW1heDA1NyBtYXggICAwRTEgIC0wRTIgLT4gIDBFKzEKKworZHFtYXgwNTggbWF4ICAgMEUxICAgMEUxIC0+ICAwRSsxCitkcW1heDA1OSBtYXggICAwRTIgICAwRTIgLT4gIDBFKzIKK2RxbWF4MDYwIG1heCAgIDBFMiAgIDBFMSAtPiAgMEUrMgorZHFtYXgwNjEgbWF4ICAgMEUxICAgMEUyIC0+ICAwRSsyCitkcW1heDA2MiBtYXggIC0wRTEgIC0wRTEgLT4gLTBFKzEKK2RxbWF4MDYzIG1heCAgLTBFMiAgLTBFMiAtPiAtMEUrMgorZHFtYXgwNjQgbWF4ICAtMEUyICAtMEUxIC0+IC0wRSsxCitkcW1heDA2NSBtYXggIC0wRTEgIC0wRTIgLT4gLTBFKzEKKworLS0gU3BlY2lhbHMKK2RxbWF4MDkwIG1heCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CitkcW1heDA5MSBtYXggIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZHFtYXgwOTIgbWF4ICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK2RxbWF4MDkzIG1heCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkcW1heDA5NCBtYXggIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQorZHFtYXgwOTUgbWF4ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK2RxbWF4MDk2IG1heCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkcW1heDA5NyBtYXggIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtYXgwOTggbWF4IC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbWF4MDk5IG1heCAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcW1heDEwMCBtYXggLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtYXgxMDEgbWF4IC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbWF4MTAyIG1heCAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcW1heDEwMyBtYXggIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtYXgxMDQgbWF4ICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbWF4MTA1IG1heCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxbWF4MTIwIG1heCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1heDEyMSBtYXggLUluZiAgLTEwMDAgIC0+IC0xMDAwCitkcW1heDEyMiBtYXggLUluZiAgLTEgICAgIC0+IC0xCitkcW1heDEyMyBtYXggLUluZiAgLTAgICAgIC0+IC0wCitkcW1heDEyNCBtYXggLUluZiAgIDAgICAgIC0+ICAwCitkcW1heDEyNSBtYXggLUluZiAgIDEgICAgIC0+ICAxCitkcW1heDEyNiBtYXggLUluZiAgIDEwMDAgIC0+ICAxMDAwCitkcW1heDEyNyBtYXggLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtYXgxMjggbWF4IC1JbmYgIC1JbmYgICAtPiAgLUluZmluaXR5CitkcW1heDEyOSBtYXggLTEwMDAgLUluZiAgIC0+ICAtMTAwMAorZHFtYXgxMzAgbWF4IC0xICAgIC1JbmYgICAtPiAgLTEKK2RxbWF4MTMxIG1heCAtMCAgICAtSW5mICAgLT4gIC0wCitkcW1heDEzMiBtYXggIDAgICAgLUluZiAgIC0+ICAwCitkcW1heDEzMyBtYXggIDEgICAgLUluZiAgIC0+ICAxCitkcW1heDEzNCBtYXggIDEwMDAgLUluZiAgIC0+ICAxMDAwCitkcW1heDEzNSBtYXggIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK2RxbWF4MTQxIG1heCAgTmFOIC1JbmYgICAgLT4gLUluZmluaXR5CitkcW1heDE0MiBtYXggIE5hTiAtMTAwMCAgIC0+IC0xMDAwCitkcW1heDE0MyBtYXggIE5hTiAtMSAgICAgIC0+IC0xCitkcW1heDE0NCBtYXggIE5hTiAtMCAgICAgIC0+IC0wCitkcW1heDE0NSBtYXggIE5hTiAgMCAgICAgIC0+ICAwCitkcW1heDE0NiBtYXggIE5hTiAgMSAgICAgIC0+ICAxCitkcW1heDE0NyBtYXggIE5hTiAgMTAwMCAgIC0+ICAxMDAwCitkcW1heDE0OCBtYXggIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQorZHFtYXgxNDkgbWF4ICBOYU4gIE5hTiAgICAtPiAgTmFOCitkcW1heDE1MCBtYXggLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQorZHFtYXgxNTEgbWF4IC0xMDAwIE5hTiAgICAtPiAtMTAwMAorZHFtYXgxNTIgbWF4IC0xICAgIE5hTiAgICAtPiAtMQorZHFtYXgxNTMgbWF4IC0wICAgIE5hTiAgICAtPiAtMAorZHFtYXgxNTQgbWF4ICAwICAgIE5hTiAgICAtPiAgMAorZHFtYXgxNTUgbWF4ICAxICAgIE5hTiAgICAtPiAgMQorZHFtYXgxNTYgbWF4ICAxMDAwIE5hTiAgICAtPiAgMTAwMAorZHFtYXgxNTcgbWF4ICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKKworZHFtYXgxNjEgbWF4ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjIgbWF4ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjMgbWF4ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjQgbWF4ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjUgbWF4ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjYgbWF4ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjcgbWF4ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjggbWF4ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNjkgbWF4ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzAgbWF4ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzEgbWF4IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzIgbWF4IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzMgbWF4IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzQgbWF4IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzUgbWF4ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzYgbWF4ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzcgbWF4ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzggbWF4ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxNzkgbWF4ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcW1heDE4MSBtYXggIE5hTjkgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbWF4MTgyIG1heCAgTmFOOCAgICAgOSAgIC0+ICA5CitkcW1heDE4MyBtYXggLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkKKworZHFtYXgxODQgbWF4IC1OYU4xICAgTmFOMTEgLT4gLU5hTjEKK2RxbWF4MTg1IG1heCAgTmFOMiAgIE5hTjEyIC0+ICBOYU4yCitkcW1heDE4NiBtYXggLU5hTjEzIC1OYU43ICAtPiAtTmFOMTMKK2RxbWF4MTg3IG1heCAgTmFOMTQgLU5hTjUgIC0+ICBOYU4xNAorCitkcW1heDE4OCBtYXggLUluZiAgICBOYU40ICAtPiAtSW5maW5pdHkKK2RxbWF4MTg5IG1heCAtOSAgICAgLU5hTjMgIC0+IC05CitkcW1heDE5MCBtYXggIEluZiAgICBOYU4yICAtPiAgSW5maW5pdHkKKworZHFtYXgxOTEgbWF4ICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTkyIG1heCAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE5MyBtYXggLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxOTQgbWF4ICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTk1IG1heCAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE5NiBtYXggLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXgxOTcgbWF4ICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RxbWF4MTk4IG1heCAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcW1heDE5OSBtYXggIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvbGQgcm91bmRpbmcgY2hlY2tzCitkcW1heDIyMSBtYXggMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDAKK2RxbWF4MjIyIG1heCAxIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMAorZHFtYXgyMjMgbWF4IDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDAKK2RxbWF4MjI0IG1heCAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwCitkcW1heDIyNSBtYXggMTIzNDU2Nzg5MCAgMSAgLT4gMTIzNDU2Nzg5MAorZHFtYXgyMjYgbWF4IDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTAKK2RxbWF4MjI3IG1heCAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxCitkcW1heDIyOCBtYXggMSAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQorZHFtYXgyMjkgbWF4IDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxCitkcW1heDIzMCBtYXggMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDEKK2RxbWF4MjMxIG1heCAxMjM0NTY3ODk2ICAxICAtPiAxMjM0NTY3ODk2CitkcW1heDIzMiBtYXggMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5NgorZHFtYXgyMzMgbWF4IC0xMjM0NTY3ODkxICAxIC0+IDEKK2RxbWF4MjM0IG1heCAxIC0xMjM0NTY3ODkxICAtPiAxCitkcW1heDIzNSBtYXggLTEyMzQ1Njc4OTAxIDEgLT4gMQorZHFtYXgyMzYgbWF4IDEgLTEyMzQ1Njc4OTAxIC0+IDEKK2RxbWF4MjM3IG1heCAtMTIzNDU2Nzg5NiAgMSAtPiAxCitkcW1heDIzOCBtYXggMSAtMTIzNDU2Nzg5NiAgLT4gMQorCistLSBmcm9tIGV4YW1wbGVzCitkcW1heDI4MCBtYXggJzMnICAgJzInICAtPiAgJzMnCitkcW1heDI4MSBtYXggJy0xMCcgJzMnICAtPiAgJzMnCitkcW1heDI4MiBtYXggJzEuMCcgJzEnICAtPiAgJzEnCitkcW1heDI4MyBtYXggJzEnICcxLjAnICAtPiAgJzEnCitkcW1heDI4NCBtYXggJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQorZHFtYXg0MDEgbWF4ICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkKK2RxbWF4NDAyIG1heCAgMS4xICAgIDEgICAgICAgLT4gIDEuMQorZHFtYXg0MDMgbWF4ICAxICAgICAgMS4wICAgICAtPiAgMQorZHFtYXg0MDQgbWF4ICAxLjAgICAgMC4xICAgICAtPiAgMS4wCitkcW1heDQwNSBtYXggIDAuMSAgICAwLjEwICAgIC0+ICAwLjEKK2RxbWF4NDA2IG1heCAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAKK2RxbWF4NDA3IG1heCAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTAKK2RxbWF4NDA4IG1heCAgMCAgICAgIDAuMCAgICAgLT4gIDAKK2RxbWF4NDA5IG1heCAgMC4wICAgLTAgICAgICAgLT4gIDAuMAorZHFtYXg0MTAgbWF4ICAwLjAgICAtMC4wICAgICAtPiAgMC4wCitkcW1heDQxMSBtYXggIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwCitkcW1heDQxMiBtYXggIDAuMCAgIC0wLjAwICAgIC0+ICAwLjAKK2RxbWF4NDEzIG1heCAgMCAgICAgLTAuMCAgICAgLT4gIDAKK2RxbWF4NDE0IG1heCAgMCAgICAgLTAgICAgICAgLT4gIDAKK2RxbWF4NDE1IG1heCAtMC4wICAgLTAgICAgICAgLT4gLTAuMAorZHFtYXg0MTYgbWF4IC0wICAgICAtMC4xMDAgICAtPiAtMAorZHFtYXg0MTcgbWF4IC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMDAKK2RxbWF4NDE4IG1heCAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTAKK2RxbWF4NDE5IG1heCAtMC4xICAgLTEuMCAgICAgLT4gLTAuMQorZHFtYXg0MjAgbWF4IC0xLjAgICAtMSAgICAgICAtPiAtMS4wCitkcW1heDQyMSBtYXggLTEgICAgIC0xLjEgICAgIC0+IC0xCitkcW1heDQyMyBtYXggLTEuMSAgIC1JbmYgICAgIC0+IC0xLjEKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorZHFtYXg0MzEgbWF4ICAxLjEgICAgSW5mICAgICAtPiAgSW5maW5pdHkKK2RxbWF4NDMyIG1heCAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQorZHFtYXg0MzMgbWF4ICAxLjAgICAgMSAgICAgICAtPiAgMQorZHFtYXg0MzQgbWF4ICAwLjEgICAgMS4wICAgICAtPiAgMS4wCitkcW1heDQzNSBtYXggIDAuMTAgICAwLjEgICAgIC0+ICAwLjEKK2RxbWF4NDM2IG1heCAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAKK2RxbWF4NDM3IG1heCAgMCAgICAgIDAuMTAgICAgLT4gIDAuMTAKK2RxbWF4NDM4IG1heCAgMC4wICAgIDAgICAgICAgLT4gIDAKK2RxbWF4NDM5IG1heCAtMCAgICAgIDAuMCAgICAgLT4gIDAuMAorZHFtYXg0NDAgbWF4IC0wLjAgICAgMC4wICAgICAtPiAgMC4wCitkcW1heDQ0MSBtYXggLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwCitkcW1heDQ0MiBtYXggLTAuMDAgICAwLjAgICAgIC0+ICAwLjAKK2RxbWF4NDQzIG1heCAtMC4wICAgIDAgICAgICAgLT4gIDAKK2RxbWF4NDQ0IG1heCAtMCAgICAgIDAgICAgICAgLT4gIDAKK2RxbWF4NDQ1IG1heCAtMCAgICAgLTAuMCAgICAgLT4gLTAuMAorZHFtYXg0NDYgbWF4IC0wLjEwMCAtMCAgICAgICAtPiAtMAorZHFtYXg0NDcgbWF4IC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMDAKK2RxbWF4NDQ4IG1heCAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTAKK2RxbWF4NDQ5IG1heCAtMS4wICAgLTAuMSAgICAgLT4gLTAuMQorZHFtYXg0NTAgbWF4IC0xICAgICAtMS4wICAgICAtPiAtMS4wCitkcW1heDQ1MSBtYXggLTEuMSAgIC0xICAgICAgIC0+IC0xCitkcW1heDQ1MyBtYXggLUluZiAgIC0xLjEgICAgIC0+IC0xLjEKKy0tIGxhcmdpZXMKK2RxbWF4NDYwIG1heCAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK2RxbWF4NDYxIG1heCAgMUUrMyAgIDEwMDAgICAgLT4gIDFFKzMKK2RxbWF4NDYyIG1heCAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDAKK2RxbWF4NDYzIG1heCAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMKK2RxbWF4NDY0IG1heCAtMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK2RxbWF4NDY1IG1heCAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK2RxbWF4NDY2IG1heCAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDAKK2RxbWF4NDY3IG1heCAtMUUrMyAgLTEwMDAgICAgLT4gLTEwMDAKKworLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuCitkcW1heDQ3MSBtYXggICAgICAxLjAgICAgICAgMC4xICAtPiAxLjAKK2RxbWF4NDcyIG1heCAgICAgIDAuMSAgICAgICAxLjAgIC0+IDEuMAorZHFtYXg0NzMgbWF4ICAgICAxMC4wICAgICAgIDAuMSAgLT4gMTAuMAorZHFtYXg0NzQgbWF4ICAgICAgMC4xICAgICAgMTAuMCAgLT4gMTAuMAorZHFtYXg0NzUgbWF4ICAgICAgMTAwICAgICAgIDEuMCAgLT4gMTAwCitkcW1heDQ3NiBtYXggICAgICAxLjAgICAgICAgMTAwICAtPiAxMDAKK2RxbWF4NDc3IG1heCAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDEwMDAKK2RxbWF4NDc4IG1heCAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwMDAKK2RxbWF4NDc5IG1heCAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDEwMDAwCitkcW1heDQ4MCBtYXggICAgMTAwLjAgICAgIDEwMDAwICAtPiAxMDAwMAorZHFtYXg0ODEgbWF4ICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMDAwCitkcW1heDQ4MiBtYXggICAxMDAwLjAgICAgMTAwMDAwICAtPiAxMDAwMDAKK2RxbWF4NDgzIG1heCAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDEwMDAwMDAKK2RxbWF4NDg0IG1heCAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwMDAKKworLS0gc3Vibm9ybWFscworZHFtYXg1MTAgbWF4ICAxLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMS4wMEUtNjE0MworZHFtYXg1MTEgbWF4ICAwLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMUUtNjE0NCAgICBTdWJub3JtYWwKK2RxbWF4NTEyIG1heCAgMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDEuMEUtNjE0NCAgU3Vibm9ybWFsCitkcW1heDUxMyBtYXggIDAuMTAwRS02MTQzICAgICAgMCAgLT4gICAxLjAwRS02MTQ0IFN1Ym5vcm1hbAorZHFtYXg1MTQgbWF4ICAwLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMUUtNjE0NSAgICBTdWJub3JtYWwKK2RxbWF4NTE1IG1heCAgMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDkuOTlFLTYxNDQgU3Vibm9ybWFsCitkcW1heDUxNiBtYXggIDAuMDk5RS02MTQzICAgICAgMCAgLT4gICA5LjlFLTYxNDUgIFN1Ym5vcm1hbAorZHFtYXg1MTcgbWF4ICAwLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgOUUtNjE0NiAgICBTdWJub3JtYWwKK2RxbWF4NTE4IG1heCAgMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDFFLTYxNDYgICAgU3Vibm9ybWFsCitkcW1heDUxOSBtYXggIDAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICA5RS02MTQ3ICAgIFN1Ym5vcm1hbAorZHFtYXg1MjAgbWF4ICAwLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMUUtNjE0NyAgICBTdWJub3JtYWwKKworZHFtYXg1MzAgbWF4IC0xLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzEgbWF4IC0wLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzIgbWF4IC0wLjEwRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzMgbWF4IC0wLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzQgbWF4IC0wLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzUgbWF4IC0wLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzYgbWF4IC0wLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzcgbWF4IC0wLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzggbWF4IC0wLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtYXg1MzkgbWF4IC0wLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgMAorZHFtYXg1NDAgbWF4IC0wLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMAorCistLSBOdWxsIHRlc3RzCitkcW1heDkwMCBtYXggMTAgICMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtYXg5MDEgbWF4ICAjIDEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNYXhNYWcuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNYXhNYWcuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjIxZTgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1heE1hZy5kZWNUZXN0CkBAIC0wLDAgKzEsMzA0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxTWF4TWFnLmRlY1Rlc3QgLS0gZGVjUXVhZCBtYXhudW1tYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RxbXhnMDAxIG1heG1hZyAgLTIgIC0yICAtPiAtMgorZHFteGcwMDIgbWF4bWFnICAtMiAgLTEgIC0+IC0yCitkcW14ZzAwMyBtYXhtYWcgIC0yICAgMCAgLT4gLTIKK2RxbXhnMDA0IG1heG1hZyAgLTIgICAxICAtPiAtMgorZHFteGcwMDUgbWF4bWFnICAtMiAgIDIgIC0+ICAyCitkcW14ZzAwNiBtYXhtYWcgIC0xICAtMiAgLT4gLTIKK2RxbXhnMDA3IG1heG1hZyAgLTEgIC0xICAtPiAtMQorZHFteGcwMDggbWF4bWFnICAtMSAgIDAgIC0+IC0xCitkcW14ZzAwOSBtYXhtYWcgIC0xICAgMSAgLT4gIDEKK2RxbXhnMDEwIG1heG1hZyAgLTEgICAyICAtPiAgMgorZHFteGcwMTEgbWF4bWFnICAgMCAgLTIgIC0+IC0yCitkcW14ZzAxMiBtYXhtYWcgICAwICAtMSAgLT4gLTEKK2RxbXhnMDEzIG1heG1hZyAgIDAgICAwICAtPiAgMAorZHFteGcwMTQgbWF4bWFnICAgMCAgIDEgIC0+ICAxCitkcW14ZzAxNSBtYXhtYWcgICAwICAgMiAgLT4gIDIKK2RxbXhnMDE2IG1heG1hZyAgIDEgIC0yICAtPiAtMgorZHFteGcwMTcgbWF4bWFnICAgMSAgLTEgIC0+ICAxCitkcW14ZzAxOCBtYXhtYWcgICAxICAgMCAgLT4gIDEKK2RxbXhnMDE5IG1heG1hZyAgIDEgICAxICAtPiAgMQorZHFteGcwMjAgbWF4bWFnICAgMSAgIDIgIC0+ICAyCitkcW14ZzAyMSBtYXhtYWcgICAyICAtMiAgLT4gIDIKK2RxbXhnMDIyIG1heG1hZyAgIDIgIC0xICAtPiAgMgorZHFteGcwMjMgbWF4bWFnICAgMiAgIDAgIC0+ICAyCitkcW14ZzAyNSBtYXhtYWcgICAyICAgMSAgLT4gIDIKK2RxbXhnMDI2IG1heG1hZyAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworZHFteGcwMzAgbWF4bWFnICAgMCAgICAgMCAgIC0+ICAwCitkcW14ZzAzMSBtYXhtYWcgICAwICAgIC0wICAgLT4gIDAKK2RxbXhnMDMyIG1heG1hZyAgIDAgICAgLTAuMCAtPiAgMAorZHFteGcwMzMgbWF4bWFnICAgMCAgICAgMC4wIC0+ICAwCitkcW14ZzAzNCBtYXhtYWcgIC0wICAgICAwICAgLT4gIDAgICAgLS0gbm90ZTogLTAgPSAwLCBidXQgMCBjaG9zZW4KK2RxbXhnMDM1IG1heG1hZyAgLTAgICAgLTAgICAtPiAtMAorZHFteGcwMzYgbWF4bWFnICAtMCAgICAtMC4wIC0+IC0wLjAKK2RxbXhnMDM3IG1heG1hZyAgLTAgICAgIDAuMCAtPiAgMC4wCitkcW14ZzAzOCBtYXhtYWcgICAwLjAgICAwICAgLT4gIDAKK2RxbXhnMDM5IG1heG1hZyAgIDAuMCAgLTAgICAtPiAgMC4wCitkcW14ZzA0MCBtYXhtYWcgICAwLjAgIC0wLjAgLT4gIDAuMAorZHFteGcwNDEgbWF4bWFnICAgMC4wICAgMC4wIC0+ICAwLjAKK2RxbXhnMDQyIG1heG1hZyAgLTAuMCAgIDAgICAtPiAgMAorZHFteGcwNDMgbWF4bWFnICAtMC4wICAtMCAgIC0+IC0wLjAKK2RxbXhnMDQ0IG1heG1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wCitkcW14ZzA0NSBtYXhtYWcgIC0wLjAgICAwLjAgLT4gIDAuMAorCitkcW14ZzA1MCBtYXhtYWcgIC0wRTEgICAwRTEgLT4gIDBFKzEKK2RxbXhnMDUxIG1heG1hZyAgLTBFMiAgIDBFMiAtPiAgMEUrMgorZHFteGcwNTIgbWF4bWFnICAtMEUyICAgMEUxIC0+ICAwRSsxCitkcW14ZzA1MyBtYXhtYWcgIC0wRTEgICAwRTIgLT4gIDBFKzIKK2RxbXhnMDU0IG1heG1hZyAgIDBFMSAgLTBFMSAtPiAgMEUrMQorZHFteGcwNTUgbWF4bWFnICAgMEUyICAtMEUyIC0+ICAwRSsyCitkcW14ZzA1NiBtYXhtYWcgICAwRTIgIC0wRTEgLT4gIDBFKzIKK2RxbXhnMDU3IG1heG1hZyAgIDBFMSAgLTBFMiAtPiAgMEUrMQorCitkcW14ZzA1OCBtYXhtYWcgICAwRTEgICAwRTEgLT4gIDBFKzEKK2RxbXhnMDU5IG1heG1hZyAgIDBFMiAgIDBFMiAtPiAgMEUrMgorZHFteGcwNjAgbWF4bWFnICAgMEUyICAgMEUxIC0+ICAwRSsyCitkcW14ZzA2MSBtYXhtYWcgICAwRTEgICAwRTIgLT4gIDBFKzIKK2RxbXhnMDYyIG1heG1hZyAgLTBFMSAgLTBFMSAtPiAtMEUrMQorZHFteGcwNjMgbWF4bWFnICAtMEUyICAtMEUyIC0+IC0wRSsyCitkcW14ZzA2NCBtYXhtYWcgIC0wRTIgIC0wRTEgLT4gLTBFKzEKK2RxbXhnMDY1IG1heG1hZyAgLTBFMSAgLTBFMiAtPiAtMEUrMQorCistLSBTcGVjaWFscworZHFteGcwOTAgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RxbXhnMDkxIG1heG1hZyAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkcW14ZzA5MiBtYXhtYWcgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZHFteGcwOTMgbWF4bWFnICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2RxbXhnMDk0IG1heG1hZyAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkcW14ZzA5NSBtYXhtYWcgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZHFteGcwOTYgbWF4bWFnICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2RxbXhnMDk3IG1heG1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcW14ZzA5OCBtYXhtYWcgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFteGcwOTkgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXhnMTAwIG1heG1hZyAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcW14ZzEwMSBtYXhtYWcgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFteGcxMDIgbWF4bWFnICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXhnMTAzIG1heG1hZyAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcW14ZzEwNCBtYXhtYWcgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFteGcxMDUgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZHFteGcxMjAgbWF4bWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbXhnMTIxIG1heG1hZyAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkcW14ZzEyMiBtYXhtYWcgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZHFteGcxMjMgbWF4bWFnIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RxbXhnMTI0IG1heG1hZyAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkcW14ZzEyNSBtYXhtYWcgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFteGcxMjYgbWF4bWFnIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RxbXhnMTI3IG1heG1hZyAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcW14ZzEyOCBtYXhtYWcgLUluZiAgLUluZiAgIC0+ICAtSW5maW5pdHkKK2RxbXhnMTI5IG1heG1hZyAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkcW14ZzEzMCBtYXhtYWcgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFteGcxMzEgbWF4bWFnIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbXhnMTMyIG1heG1hZyAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW14ZzEzMyBtYXhtYWcgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFteGcxMzQgbWF4bWFnICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbXhnMTM1IG1heG1hZyAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CisKKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcworZHFteGcxNDEgbWF4bWFnICBOYU4gLUluZiAgICAtPiAtSW5maW5pdHkKK2RxbXhnMTQyIG1heG1hZyAgTmFOIC0xMDAwICAgLT4gLTEwMDAKK2RxbXhnMTQzIG1heG1hZyAgTmFOIC0xICAgICAgLT4gLTEKK2RxbXhnMTQ0IG1heG1hZyAgTmFOIC0wICAgICAgLT4gLTAKK2RxbXhnMTQ1IG1heG1hZyAgTmFOICAwICAgICAgLT4gIDAKK2RxbXhnMTQ2IG1heG1hZyAgTmFOICAxICAgICAgLT4gIDEKK2RxbXhnMTQ3IG1heG1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDAKK2RxbXhnMTQ4IG1heG1hZyAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5CitkcW14ZzE0OSBtYXhtYWcgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxbXhnMTUwIG1heG1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5CitkcW14ZzE1MSBtYXhtYWcgLTEwMDAgTmFOICAgIC0+IC0xMDAwCitkcW14ZzE1MiBtYXhtYWcgLTEgICAgTmFOICAgIC0+IC0xCitkcW14ZzE1MyBtYXhtYWcgLTAgICAgTmFOICAgIC0+IC0wCitkcW14ZzE1NCBtYXhtYWcgIDAgICAgTmFOICAgIC0+ICAwCitkcW14ZzE1NSBtYXhtYWcgIDEgICAgTmFOICAgIC0+ICAxCitkcW14ZzE1NiBtYXhtYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwCitkcW14ZzE1NyBtYXhtYWcgIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQorCitkcW14ZzE2MSBtYXhtYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2MiBtYXhtYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2MyBtYXhtYWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2NCBtYXhtYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2NSBtYXhtYWcgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2NiBtYXhtYWcgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2NyBtYXhtYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2OCBtYXhtYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE2OSBtYXhtYWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3MCBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3MSBtYXhtYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3MiBtYXhtYWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3MyBtYXhtYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3NCBtYXhtYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3NSBtYXhtYWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3NiBtYXhtYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3NyBtYXhtYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3OCBtYXhtYWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE3OSBtYXhtYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxbXhnMTgxIG1heG1hZyAgTmFOOSAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFteGcxODIgbWF4bWFnICBOYU44ICAgICA5ICAgLT4gIDkKK2RxbXhnMTgzIG1heG1hZyAtTmFONyAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcW14ZzE4NCBtYXhtYWcgLU5hTjEgICBOYU4xMSAtPiAtTmFOMQorZHFteGcxODUgbWF4bWFnICBOYU4yICAgTmFOMTIgLT4gIE5hTjIKK2RxbXhnMTg2IG1heG1hZyAtTmFOMTMgLU5hTjcgIC0+IC1OYU4xMworZHFteGcxODcgbWF4bWFnICBOYU4xNCAtTmFONSAgLT4gIE5hTjE0CisKK2RxbXhnMTg4IG1heG1hZyAtSW5mICAgIE5hTjQgIC0+IC1JbmZpbml0eQorZHFteGcxODkgbWF4bWFnIC05ICAgICAtTmFOMyAgLT4gLTkKK2RxbXhnMTkwIG1heG1hZyAgSW5mICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCitkcW14ZzE5MSBtYXhtYWcgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFteGcxOTIgbWF4bWFnICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTkzIG1heG1hZyAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE5NCBtYXhtYWcgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbgorZHFteGcxOTUgbWF4bWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTk2IG1heG1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzE5NyBtYXhtYWcgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFteGcxOTggbWF4bWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXhnMTk5IG1heG1hZyAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG9sZCByb3VuZGluZyBjaGVja3MKK2RxbXhnMjIxIG1heG1hZyAxMjM0NTY3ODAwMCAxICAtPiAxMjM0NTY3ODAwMAorZHFteGcyMjIgbWF4bWFnIDEgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwCitkcW14ZzIyMyBtYXhtYWcgMTIzNDU2NzgwMCAgMSAgLT4gMTIzNDU2NzgwMAorZHFteGcyMjQgbWF4bWFnIDEgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDAKK2RxbXhnMjI1IG1heG1hZyAxMjM0NTY3ODkwICAxICAtPiAxMjM0NTY3ODkwCitkcW14ZzIyNiBtYXhtYWcgMSAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MAorZHFteGcyMjcgbWF4bWFnIDEyMzQ1Njc4OTEgIDEgIC0+IDEyMzQ1Njc4OTEKK2RxbXhnMjI4IG1heG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxCitkcW14ZzIyOSBtYXhtYWcgMTIzNDU2Nzg5MDEgMSAgLT4gMTIzNDU2Nzg5MDEKK2RxbXhnMjMwIG1heG1hZyAxIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQorZHFteGcyMzEgbWF4bWFnIDEyMzQ1Njc4OTYgIDEgIC0+IDEyMzQ1Njc4OTYKK2RxbXhnMjMyIG1heG1hZyAxIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2CitkcW14ZzIzMyBtYXhtYWcgLTEyMzQ1Njc4OTEgIDEgLT4gLTEyMzQ1Njc4OTEKK2RxbXhnMjM0IG1heG1hZyAxIC0xMjM0NTY3ODkxICAtPiAtMTIzNDU2Nzg5MQorZHFteGcyMzUgbWF4bWFnIC0xMjM0NTY3ODkwMSAxIC0+IC0xMjM0NTY3ODkwMQorZHFteGcyMzYgbWF4bWFnIDEgLTEyMzQ1Njc4OTAxIC0+IC0xMjM0NTY3ODkwMQorZHFteGcyMzcgbWF4bWFnIC0xMjM0NTY3ODk2ICAxIC0+IC0xMjM0NTY3ODk2CitkcW14ZzIzOCBtYXhtYWcgMSAtMTIzNDU2Nzg5NiAgLT4gLTEyMzQ1Njc4OTYKKworLS0gZnJvbSBleGFtcGxlcworZHFteGcyODAgbWF4bWFnICczJyAgICcyJyAgLT4gICczJworZHFteGcyODEgbWF4bWFnICctMTAnICczJyAgLT4gICctMTAnCitkcW14ZzI4MiBtYXhtYWcgJzEuMCcgJzEnICAtPiAgJzEnCitkcW14ZzI4MyBtYXhtYWcgJzEnICcxLjAnICAtPiAgJzEnCitkcW14ZzI4NCBtYXhtYWcgJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQorZHFteGc0MDEgbWF4bWFnICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkKK2RxbXhnNDAyIG1heG1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEuMQorZHFteGc0MDMgbWF4bWFnICAxICAgICAgMS4wICAgICAtPiAgMQorZHFteGc0MDQgbWF4bWFnICAxLjAgICAgMC4xICAgICAtPiAgMS4wCitkcW14ZzQwNSBtYXhtYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEKK2RxbXhnNDA2IG1heG1hZyAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAKK2RxbXhnNDA3IG1heG1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTAKK2RxbXhnNDA4IG1heG1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDAKK2RxbXhnNDA5IG1heG1hZyAgMC4wICAgLTAgICAgICAgLT4gIDAuMAorZHFteGc0MTAgbWF4bWFnICAwLjAgICAtMC4wICAgICAtPiAgMC4wCitkcW14ZzQxMSBtYXhtYWcgIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwCitkcW14ZzQxMiBtYXhtYWcgIDAuMCAgIC0wLjAwICAgIC0+ICAwLjAKK2RxbXhnNDEzIG1heG1hZyAgMCAgICAgLTAuMCAgICAgLT4gIDAKK2RxbXhnNDE0IG1heG1hZyAgMCAgICAgLTAgICAgICAgLT4gIDAKK2RxbXhnNDE1IG1heG1hZyAtMC4wICAgLTAgICAgICAgLT4gLTAuMAorZHFteGc0MTYgbWF4bWFnIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDAKK2RxbXhnNDE3IG1heG1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwCitkcW14ZzQxOCBtYXhtYWcgLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEwCitkcW14ZzQxOSBtYXhtYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0xLjAKK2RxbXhnNDIwIG1heG1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEuMAorZHFteGc0MjEgbWF4bWFnIC0xICAgICAtMS4xICAgICAtPiAtMS4xCitkcW14ZzQyMyBtYXhtYWcgLTEuMSAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkCitkcW14ZzQzMSBtYXhtYWcgIDEuMSAgICBJbmYgICAgIC0+ICBJbmZpbml0eQorZHFteGc0MzIgbWF4bWFnICAxICAgICAgMS4xICAgICAtPiAgMS4xCitkcW14ZzQzMyBtYXhtYWcgIDEuMCAgICAxICAgICAgIC0+ICAxCitkcW14ZzQzNCBtYXhtYWcgIDAuMSAgICAxLjAgICAgIC0+ICAxLjAKK2RxbXhnNDM1IG1heG1hZyAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMQorZHFteGc0MzYgbWF4bWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMAorZHFteGc0MzcgbWF4bWFnICAwICAgICAgMC4xMCAgICAtPiAgMC4xMAorZHFteGc0MzggbWF4bWFnICAwLjAgICAgMCAgICAgICAtPiAgMAorZHFteGc0MzkgbWF4bWFnIC0wICAgICAgMC4wICAgICAtPiAgMC4wCitkcW14ZzQ0MCBtYXhtYWcgLTAuMCAgICAwLjAgICAgIC0+ICAwLjAKK2RxbXhnNDQxIG1heG1hZyAtMC4wICAgIDAuMDAgICAgLT4gIDAuMDAKK2RxbXhnNDQyIG1heG1hZyAtMC4wMCAgIDAuMCAgICAgLT4gIDAuMAorZHFteGc0NDMgbWF4bWFnIC0wLjAgICAgMCAgICAgICAtPiAgMAorZHFteGc0NDQgbWF4bWFnIC0wICAgICAgMCAgICAgICAtPiAgMAorZHFteGc0NDUgbWF4bWFnIC0wICAgICAtMC4wICAgICAtPiAtMC4wCitkcW14ZzQ0NiBtYXhtYWcgLTAuMTAwIC0wICAgICAgIC0+IC0wLjEwMAorZHFteGc0NDcgbWF4bWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMDAKK2RxbXhnNDQ4IG1heG1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTAKK2RxbXhnNDQ5IG1heG1hZyAtMS4wICAgLTAuMSAgICAgLT4gLTEuMAorZHFteGc0NTAgbWF4bWFnIC0xICAgICAtMS4wICAgICAtPiAtMS4wCitkcW14ZzQ1MSBtYXhtYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xLjEKK2RxbXhnNDUzIG1heG1hZyAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5CistLSBsYXJnaWVzCitkcW14ZzQ2MCBtYXhtYWcgIDEwMDAgICAxRSszICAgIC0+ICAxRSszCitkcW14ZzQ2MSBtYXhtYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxRSszCitkcW14ZzQ2MiBtYXhtYWcgIDEwMDAgIC0xRSszICAgIC0+ICAxMDAwCitkcW14ZzQ2MyBtYXhtYWcgIDFFKzMgIC0xMDAwICAgIC0+ICAxRSszCitkcW14ZzQ2NCBtYXhtYWcgLTEwMDAgICAxRSszICAgIC0+ICAxRSszCitkcW14ZzQ2NSBtYXhtYWcgLTFFKzMgICAxMDAwICAgIC0+ICAxMDAwCitkcW14ZzQ2NiBtYXhtYWcgLTEwMDAgIC0xRSszICAgIC0+IC0xMDAwCitkcW14ZzQ2NyBtYXhtYWcgLTFFKzMgIC0xMDAwICAgIC0+IC0xMDAwCisKKy0tIHN1Ym5vcm1hbHMKK2RxbXhnNTEwIG1heG1hZyAgMS4wMEUtNjE0MyAgICAgICAwICAtPiAgIDEuMDBFLTYxNDMKK2RxbXhnNTExIG1heG1hZyAgMC4xRS02MTQzICAgICAgICAwICAtPiAgIDFFLTYxNDQgICAgU3Vibm9ybWFsCitkcW14ZzUxMiBtYXhtYWcgIDAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAxLjBFLTYxNDQgIFN1Ym5vcm1hbAorZHFteGc1MTMgbWF4bWFnICAwLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMS4wMEUtNjE0NCBTdWJub3JtYWwKK2RxbXhnNTE0IG1heG1hZyAgMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDFFLTYxNDUgICAgU3Vibm9ybWFsCitkcW14ZzUxNSBtYXhtYWcgIDAuOTk5RS02MTQzICAgICAgMCAgLT4gICA5Ljk5RS02MTQ0IFN1Ym5vcm1hbAorZHFteGc1MTYgbWF4bWFnICAwLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgOS45RS02MTQ1ICBTdWJub3JtYWwKK2RxbXhnNTE3IG1heG1hZyAgMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDlFLTYxNDYgICAgU3Vibm9ybWFsCitkcW14ZzUxOCBtYXhtYWcgIDAuMDAxRS02MTQzICAgICAgMCAgLT4gICAxRS02MTQ2ICAgIFN1Ym5vcm1hbAorZHFteGc1MTkgbWF4bWFnICAwLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgOUUtNjE0NyAgICBTdWJub3JtYWwKK2RxbXhnNTIwIG1heG1hZyAgMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDFFLTYxNDcgICAgU3Vibm9ybWFsCisKK2RxbXhnNTMwIG1heG1hZyAtMS4wMEUtNjE0MyAgICAgICAwICAtPiAgLTEuMDBFLTYxNDMKK2RxbXhnNTMxIG1heG1hZyAtMC4xRS02MTQzICAgICAgICAwICAtPiAgLTFFLTYxNDQgICAgU3Vibm9ybWFsCitkcW14ZzUzMiBtYXhtYWcgLTAuMTBFLTYxNDMgICAgICAgMCAgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbAorZHFteGc1MzMgbWF4bWFnIC0wLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAtMS4wMEUtNjE0NCBTdWJub3JtYWwKK2RxbXhnNTM0IG1heG1hZyAtMC4wMUUtNjE0MyAgICAgICAwICAtPiAgLTFFLTYxNDUgICAgU3Vibm9ybWFsCitkcW14ZzUzNSBtYXhtYWcgLTAuOTk5RS02MTQzICAgICAgMCAgLT4gIC05Ljk5RS02MTQ0IFN1Ym5vcm1hbAorZHFteGc1MzYgbWF4bWFnIC0wLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAtOS45RS02MTQ1ICBTdWJub3JtYWwKK2RxbXhnNTM3IG1heG1hZyAtMC4wMDlFLTYxNDMgICAgICAwICAtPiAgLTlFLTYxNDYgICAgU3Vibm9ybWFsCitkcW14ZzUzOCBtYXhtYWcgLTAuMDAxRS02MTQzICAgICAgMCAgLT4gIC0xRS02MTQ2ICAgIFN1Ym5vcm1hbAorZHFteGc1MzkgbWF4bWFnIC0wLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAtOUUtNjE0NyAgICBTdWJub3JtYWwKK2RxbXhnNTQwIG1heG1hZyAtMC4wMDAxRS02MTQzICAgICAwICAtPiAgLTFFLTYxNDcgICAgU3Vibm9ybWFsCisKKy0tIE51bGwgdGVzdHMKK2RxbXhnOTAwIG1heG1hZyAxMCAgIyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW14ZzkwMSBtYXhtYWcgICMgMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWluLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWluLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg3ZjRjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW4uZGVjVGVzdApAQCAtMCwwICsxLDMwOSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcU1pbi5kZWNUZXN0IC0tIGRlY1F1YWQgbWlubnVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbworLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcW1pbjAwMSBtaW4gIC0yICAtMiAgLT4gLTIKK2RxbWluMDAyIG1pbiAgLTIgIC0xICAtPiAtMgorZHFtaW4wMDMgbWluICAtMiAgIDAgIC0+IC0yCitkcW1pbjAwNCBtaW4gIC0yICAgMSAgLT4gLTIKK2RxbWluMDA1IG1pbiAgLTIgICAyICAtPiAtMgorZHFtaW4wMDYgbWluICAtMSAgLTIgIC0+IC0yCitkcW1pbjAwNyBtaW4gIC0xICAtMSAgLT4gLTEKK2RxbWluMDA4IG1pbiAgLTEgICAwICAtPiAtMQorZHFtaW4wMDkgbWluICAtMSAgIDEgIC0+IC0xCitkcW1pbjAxMCBtaW4gIC0xICAgMiAgLT4gLTEKK2RxbWluMDExIG1pbiAgIDAgIC0yICAtPiAtMgorZHFtaW4wMTIgbWluICAgMCAgLTEgIC0+IC0xCitkcW1pbjAxMyBtaW4gICAwICAgMCAgLT4gIDAKK2RxbWluMDE0IG1pbiAgIDAgICAxICAtPiAgMAorZHFtaW4wMTUgbWluICAgMCAgIDIgIC0+ICAwCitkcW1pbjAxNiBtaW4gICAxICAtMiAgLT4gLTIKK2RxbWluMDE3IG1pbiAgIDEgIC0xICAtPiAtMQorZHFtaW4wMTggbWluICAgMSAgIDAgIC0+ICAwCitkcW1pbjAxOSBtaW4gICAxICAgMSAgLT4gIDEKK2RxbWluMDIwIG1pbiAgIDEgICAyICAtPiAgMQorZHFtaW4wMjEgbWluICAgMiAgLTIgIC0+IC0yCitkcW1pbjAyMiBtaW4gICAyICAtMSAgLT4gLTEKK2RxbWluMDIzIG1pbiAgIDIgICAwICAtPiAgMAorZHFtaW4wMjUgbWluICAgMiAgIDEgIC0+ICAxCitkcW1pbjAyNiBtaW4gICAyICAgMiAgLT4gIDIKKworLS0gZXh0ZW5kZWQgemVyb3MKK2RxbWluMDMwIG1pbiAgIDAgICAgIDAgICAtPiAgMAorZHFtaW4wMzEgbWluICAgMCAgICAtMCAgIC0+IC0wCitkcW1pbjAzMiBtaW4gICAwICAgIC0wLjAgLT4gLTAuMAorZHFtaW4wMzMgbWluICAgMCAgICAgMC4wIC0+ICAwLjAKK2RxbWluMDM0IG1pbiAgLTAgICAgIDAgICAtPiAtMAorZHFtaW4wMzUgbWluICAtMCAgICAtMCAgIC0+IC0wCitkcW1pbjAzNiBtaW4gIC0wICAgIC0wLjAgLT4gLTAKK2RxbWluMDM3IG1pbiAgLTAgICAgIDAuMCAtPiAtMAorZHFtaW4wMzggbWluICAgMC4wICAgMCAgIC0+ICAwLjAKK2RxbWluMDM5IG1pbiAgIDAuMCAgLTAgICAtPiAtMAorZHFtaW4wNDAgbWluICAgMC4wICAtMC4wIC0+IC0wLjAKK2RxbWluMDQxIG1pbiAgIDAuMCAgIDAuMCAtPiAgMC4wCitkcW1pbjA0MiBtaW4gIC0wLjAgICAwICAgLT4gLTAuMAorZHFtaW4wNDMgbWluICAtMC4wICAtMCAgIC0+IC0wCitkcW1pbjA0NCBtaW4gIC0wLjAgIC0wLjAgLT4gLTAuMAorZHFtaW4wNDUgbWluICAtMC4wICAgMC4wIC0+IC0wLjAKKworZHFtaW4wNDYgbWluICAgMEUxICAtMEUxIC0+IC0wRSsxCitkcW1pbjA0NyBtaW4gIC0wRTEgICAwRTIgLT4gLTBFKzEKK2RxbWluMDQ4IG1pbiAgIDBFMiAgIDBFMSAtPiAgMEUrMQorZHFtaW4wNDkgbWluICAgMEUxICAgMEUyIC0+ICAwRSsxCitkcW1pbjA1MCBtaW4gIC0wRTMgIC0wRTIgLT4gLTBFKzMKK2RxbWluMDUxIG1pbiAgLTBFMiAgLTBFMyAtPiAtMEUrMworCistLSBTcGVjaWFscworZHFtaW4wOTAgbWluICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbWluMDkxIG1pbiAgSW5mICAtMTAwMCAgLT4gLTEwMDAKK2RxbWluMDkyIG1pbiAgSW5mICAtMSAgICAgLT4gLTEKK2RxbWluMDkzIG1pbiAgSW5mICAtMCAgICAgLT4gLTAKK2RxbWluMDk0IG1pbiAgSW5mICAgMCAgICAgLT4gIDAKK2RxbWluMDk1IG1pbiAgSW5mICAgMSAgICAgLT4gIDEKK2RxbWluMDk2IG1pbiAgSW5mICAgMTAwMCAgLT4gIDEwMDAKK2RxbWluMDk3IG1pbiAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitkcW1pbjA5OCBtaW4gLTEwMDAgIEluZiAgIC0+IC0xMDAwCitkcW1pbjA5OSBtaW4gLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4xMDAgbWluIC0xICAgICBJbmYgICAtPiAtMQorZHFtaW4xMDEgbWluIC0wICAgICBJbmYgICAtPiAtMAorZHFtaW4xMDIgbWluICAwICAgICBJbmYgICAtPiAgMAorZHFtaW4xMDMgbWluICAxICAgICBJbmYgICAtPiAgMQorZHFtaW4xMDQgbWluICAxMDAwICBJbmYgICAtPiAgMTAwMAorZHFtaW4xMDUgbWluICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZHFtaW4xMjAgbWluIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbWluMTIxIG1pbiAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkcW1pbjEyMiBtaW4gLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZHFtaW4xMjMgbWluIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2RxbWluMTI0IG1pbiAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitkcW1pbjEyNSBtaW4gLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFtaW4xMjYgbWluIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RxbWluMTI3IG1pbiAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjEyOCBtaW4gLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4xMjkgbWluIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbWluMTMwIG1pbiAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjEzMSBtaW4gLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4xMzIgbWluICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbWluMTMzIG1pbiAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1pbjEzNCBtaW4gIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtaW4xMzUgbWluICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKKworLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzCitkcW1pbjE0MSBtaW4gIE5hTiAtSW5mICAgIC0+ICAtSW5maW5pdHkKK2RxbWluMTQyIG1pbiAgTmFOIC0xMDAwICAgLT4gIC0xMDAwCitkcW1pbjE0MyBtaW4gIE5hTiAtMSAgICAgIC0+ICAtMQorZHFtaW4xNDQgbWluICBOYU4gLTAgICAgICAtPiAgLTAKK2RxbWluMTQ1IG1pbiAgTmFOICAwICAgICAgLT4gIDAKK2RxbWluMTQ2IG1pbiAgTmFOICAxICAgICAgLT4gIDEKK2RxbWluMTQ3IG1pbiAgTmFOICAxMDAwICAgLT4gIDEwMDAKK2RxbWluMTQ4IG1pbiAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5CitkcW1pbjE0OSBtaW4gIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxbWluMTUwIG1pbiAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5CitkcW1pbjE1MSBtaW4gLTEwMDAgTmFOICAgIC0+IC0xMDAwCitkcW1pbjE1MiBtaW4gLTEgICAtTmFOICAgIC0+IC0xCitkcW1pbjE1MyBtaW4gLTAgICAgTmFOICAgIC0+IC0wCitkcW1pbjE1NCBtaW4gIDAgICAtTmFOICAgIC0+ICAwCitkcW1pbjE1NSBtaW4gIDEgICAgTmFOICAgIC0+ICAxCitkcW1pbjE1NiBtaW4gIDEwMDAgTmFOICAgIC0+ICAxMDAwCitkcW1pbjE1NyBtaW4gIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQorCitkcW1pbjE2MSBtaW4gIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE2MiBtaW4gIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE2MyBtaW4gIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE2NCBtaW4gIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE2NSBtaW4gLXNOYU4gIDAgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE2NiBtaW4gLXNOYU4gIDEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE2NyBtaW4gIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE2OCBtaW4gIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE2OSBtaW4gIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE3MCBtaW4gIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE3MSBtaW4gLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE3MiBtaW4gLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE3MyBtaW4gLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE3NCBtaW4gLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE3NSBtaW4gIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE3NiBtaW4gIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE3NyBtaW4gIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE3OCBtaW4gIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE3OSBtaW4gIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxbWluMTgxIG1pbiAgTmFOOSAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2RxbWluMTgyIG1pbiAtTmFOOCAgICA5OTkwICAtPiAgOTk5MAorZHFtaW4xODMgbWluICBOYU43MSAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcW1pbjE4NCBtaW4gIE5hTjEgICAgTmFONTQgLT4gIE5hTjEKK2RxbWluMTg1IG1pbiAgTmFOMjIgIC1OYU41MyAtPiAgTmFOMjIKK2RxbWluMTg2IG1pbiAtTmFOMyAgICBOYU42ICAtPiAtTmFOMworZHFtaW4xODcgbWluIC1OYU40NCAgIE5hTjcgIC0+IC1OYU40NAorCitkcW1pbjE4OCBtaW4gLUluZiAgICAgTmFONDEgLT4gLUluZmluaXR5CitkcW1pbjE4OSBtaW4gLTk5OTkgICAtTmFOMzMgLT4gLTk5OTkKK2RxbWluMTkwIG1pbiAgSW5mICAgICBOYU4yICAtPiAgSW5maW5pdHkKKworZHFtaW4xOTEgbWluICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTkyIG1pbiAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE5MyBtaW4gLXNOYU45NyAgTmFOOCAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xOTQgbWluICBzTmFONjkgc05hTjk0ICAtPiAgTmFONjkgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTk1IG1pbiAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE5NiBtaW4gLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFtaW4xOTcgbWluICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RxbWluMTk4IG1pbiAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcW1pbjE5OSBtaW4gIE5hTiAgICBzTmFOODYgIC0+ICBOYU44NiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvbGQgcm91bmRpbmcgY2hlY2tzCitkcW1pbjIyMSBtaW4gLTEyMzQ1Njc4MDAwIDEgIC0+IC0xMjM0NTY3ODAwMAorZHFtaW4yMjIgbWluIDEgLTEyMzQ1Njc4MDAwICAtPiAtMTIzNDU2NzgwMDAKK2RxbWluMjIzIG1pbiAtMTIzNDU2NzgwMCAgMSAgLT4gLTEyMzQ1Njc4MDAKK2RxbWluMjI0IG1pbiAxIC0xMjM0NTY3ODAwICAgLT4gLTEyMzQ1Njc4MDAKK2RxbWluMjI1IG1pbiAtMTIzNDU2Nzg5MCAgMSAgLT4gLTEyMzQ1Njc4OTAKK2RxbWluMjI2IG1pbiAxIC0xMjM0NTY3ODkwICAgLT4gLTEyMzQ1Njc4OTAKK2RxbWluMjI3IG1pbiAtMTIzNDU2Nzg5MSAgMSAgLT4gLTEyMzQ1Njc4OTEKK2RxbWluMjI4IG1pbiAxIC0xMjM0NTY3ODkxICAgLT4gLTEyMzQ1Njc4OTEKK2RxbWluMjI5IG1pbiAtMTIzNDU2Nzg5MDEgMSAgLT4gLTEyMzQ1Njc4OTAxCitkcW1pbjIzMCBtaW4gMSAtMTIzNDU2Nzg5MDEgIC0+IC0xMjM0NTY3ODkwMQorZHFtaW4yMzEgbWluIC0xMjM0NTY3ODk2ICAxICAtPiAtMTIzNDU2Nzg5NgorZHFtaW4yMzIgbWluIDEgLTEyMzQ1Njc4OTYgICAtPiAtMTIzNDU2Nzg5NgorZHFtaW4yMzMgbWluIDEyMzQ1Njc4OTEgIDEgICAtPiAxCitkcW1pbjIzNCBtaW4gMSAxMjM0NTY3ODkxICAgIC0+IDEKK2RxbWluMjM1IG1pbiAxMjM0NTY3ODkwMSAxICAgLT4gMQorZHFtaW4yMzYgbWluIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkcW1pbjIzNyBtaW4gMTIzNDU2Nzg5NiAgMSAgIC0+IDEKK2RxbWluMjM4IG1pbiAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSBmcm9tIGV4YW1wbGVzCitkcW1pbjI4MCBtaW4gJzMnICAgJzInICAtPiAgJzInCitkcW1pbjI4MSBtaW4gJy0xMCcgJzMnICAtPiAgJy0xMCcKK2RxbWluMjgyIG1pbiAnMS4wJyAnMScgIC0+ICAnMS4wJworZHFtaW4yODMgbWluICcxJyAnMS4wJyAgLT4gICcxLjAnCitkcW1pbjI4NCBtaW4gJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQorZHFtaW40MDEgbWluICBJbmYgICAgMS4xICAgICAtPiAgMS4xCitkcW1pbjQwMiBtaW4gIDEuMSAgICAxICAgICAgIC0+ICAxCitkcW1pbjQwMyBtaW4gIDEgICAgICAxLjAgICAgIC0+ICAxLjAKK2RxbWluNDA0IG1pbiAgMS4wICAgIDAuMSAgICAgLT4gIDAuMQorZHFtaW40MDUgbWluICAwLjEgICAgMC4xMCAgICAtPiAgMC4xMAorZHFtaW40MDYgbWluICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMDAKK2RxbWluNDA3IG1pbiAgMC4xMCAgIDAgICAgICAgLT4gIDAKK2RxbWluNDA4IG1pbiAgMCAgICAgIDAuMCAgICAgLT4gIDAuMAorZHFtaW40MDkgbWluICAwLjAgICAtMCAgICAgICAtPiAtMAorZHFtaW40MTAgbWluICAwLjAgICAtMC4wICAgICAtPiAtMC4wCitkcW1pbjQxMSBtaW4gIDAuMDAgIC0wLjAgICAgIC0+IC0wLjAKK2RxbWluNDEyIG1pbiAgMC4wICAgLTAuMDAgICAgLT4gLTAuMDAKK2RxbWluNDEzIG1pbiAgMCAgICAgLTAuMCAgICAgLT4gLTAuMAorZHFtaW40MTQgbWluICAwICAgICAtMCAgICAgICAtPiAtMAorZHFtaW40MTUgbWluIC0wLjAgICAtMCAgICAgICAtPiAtMAorZHFtaW40MTYgbWluIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDAKK2RxbWluNDE3IG1pbiAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAKK2RxbWluNDE4IG1pbiAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMQorZHFtaW40MTkgbWluIC0wLjEgICAtMS4wICAgICAtPiAtMS4wCitkcW1pbjQyMCBtaW4gLTEuMCAgIC0xICAgICAgIC0+IC0xCitkcW1pbjQyMSBtaW4gLTEgICAgIC0xLjEgICAgIC0+IC0xLjEKK2RxbWluNDIzIG1pbiAtMS4xICAgLUluZiAgICAgLT4gLUluZmluaXR5CistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKK2RxbWluNDMxIG1pbiAgMS4xICAgIEluZiAgICAgLT4gIDEuMQorZHFtaW40MzIgbWluICAxICAgICAgMS4xICAgICAtPiAgMQorZHFtaW40MzMgbWluICAxLjAgICAgMSAgICAgICAtPiAgMS4wCitkcW1pbjQzNCBtaW4gIDAuMSAgICAxLjAgICAgIC0+ICAwLjEKK2RxbWluNDM1IG1pbiAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMTAKK2RxbWluNDM2IG1pbiAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAwCitkcW1pbjQzNyBtaW4gIDAgICAgICAwLjEwICAgIC0+ICAwCitkcW1pbjQzOCBtaW4gIDAuMCAgICAwICAgICAgIC0+ICAwLjAKK2RxbWluNDM5IG1pbiAtMCAgICAgIDAuMCAgICAgLT4gLTAKK2RxbWluNDQwIG1pbiAtMC4wICAgIDAuMCAgICAgLT4gLTAuMAorZHFtaW40NDEgbWluIC0wLjAgICAgMC4wMCAgICAtPiAtMC4wCitkcW1pbjQ0MiBtaW4gLTAuMDAgICAwLjAgICAgIC0+IC0wLjAwCitkcW1pbjQ0MyBtaW4gLTAuMCAgICAwICAgICAgIC0+IC0wLjAKK2RxbWluNDQ0IG1pbiAtMCAgICAgIDAgICAgICAgLT4gLTAKK2RxbWluNDQ1IG1pbiAtMCAgICAgLTAuMCAgICAgLT4gLTAKK2RxbWluNDQ2IG1pbiAtMC4xMDAgLTAgICAgICAgLT4gLTAuMTAwCitkcW1pbjQ0NyBtaW4gLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwCitkcW1pbjQ0OCBtaW4gLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEKK2RxbWluNDQ5IG1pbiAtMS4wICAgLTAuMSAgICAgLT4gLTEuMAorZHFtaW40NTAgbWluIC0xICAgICAtMS4wICAgICAtPiAtMQorZHFtaW40NTEgbWluIC0xLjEgICAtMSAgICAgICAtPiAtMS4xCitkcW1pbjQ1MyBtaW4gLUluZiAgIC0xLjEgICAgIC0+IC1JbmZpbml0eQorLS0gbGFyZ2llcworZHFtaW40NjAgbWluICAxMDAwICAgMUUrMyAgICAtPiAgMTAwMAorZHFtaW40NjEgbWluICAxRSszICAgMTAwMCAgICAtPiAgMTAwMAorZHFtaW40NjIgbWluICAxMDAwICAtMUUrMyAgICAtPiAtMUUrMworZHFtaW40NjMgbWluICAxRSszICAtMzg0ICAgIC0+IC0zODQKK2RxbWluNDY0IG1pbiAtMzg0ICAgMUUrMyAgICAtPiAtMzg0CitkcW1pbjQ2NSBtaW4gLTFFKzMgICAxMDAwICAgIC0+IC0xRSszCitkcW1pbjQ2NiBtaW4gLTM4NCAgLTFFKzMgICAgLT4gLTFFKzMKK2RxbWluNDY3IG1pbiAtMUUrMyAgLTM4NCAgICAtPiAtMUUrMworCistLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4KK2RxbWluNDcxIG1pbiAgICAgIDEuMCAgICAgICAwLjEgIC0+IDAuMQorZHFtaW40NzIgbWluICAgICAgMC4xICAgICAgIDEuMCAgLT4gMC4xCitkcW1pbjQ3MyBtaW4gICAgIDEwLjAgICAgICAgMC4xICAtPiAwLjEKK2RxbWluNDc0IG1pbiAgICAgIDAuMSAgICAgIDEwLjAgIC0+IDAuMQorZHFtaW40NzUgbWluICAgICAgMTAwICAgICAgIDEuMCAgLT4gMS4wCitkcW1pbjQ3NiBtaW4gICAgICAxLjAgICAgICAgMTAwICAtPiAxLjAKK2RxbWluNDc3IG1pbiAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDEwLjAKK2RxbWluNDc4IG1pbiAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwLjAKK2RxbWluNDc5IG1pbiAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDEwMC4wCitkcW1pbjQ4MCBtaW4gICAgMTAwLjAgICAgIDEwMDAwICAtPiAxMDAuMAorZHFtaW40ODEgbWluICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMC4wCitkcW1pbjQ4MiBtaW4gICAxMDAwLjAgICAgMTAwMDAwICAtPiAxMDAwLjAKK2RxbWluNDgzIG1pbiAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDEwMDAwLjAKK2RxbWluNDg0IG1pbiAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwLjAKKworLS0gc3Vibm9ybWFscworZHFtaW41MTAgbWluICAxLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtaW41MTEgbWluICAwLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMAorZHFtaW41MTIgbWluICAwLjEwRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtaW41MTMgbWluICAwLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtaW41MTQgbWluICAwLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMAorZHFtaW41MTUgbWluICAwLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtaW41MTYgbWluICAwLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtaW41MTcgbWluICAwLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtaW41MTggbWluICAwLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAgMAorZHFtaW41MTkgbWluICAwLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgMAorZHFtaW41MjAgbWluICAwLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMAorCitkcW1pbjUzMCBtaW4gLTEuMDBFLTYxNDMgICAgICAgMCAgLT4gIC0xLjAwRS02MTQzCitkcW1pbjUzMSBtaW4gLTAuMUUtNjE0MyAgICAgICAgMCAgLT4gIC0xRS02MTQ0ICAgIFN1Ym5vcm1hbAorZHFtaW41MzIgbWluIC0wLjEwRS02MTQzICAgICAgIDAgIC0+ICAtMS4wRS02MTQ0ICBTdWJub3JtYWwKK2RxbWluNTMzIG1pbiAtMC4xMDBFLTYxNDMgICAgICAwICAtPiAgLTEuMDBFLTYxNDQgU3Vibm9ybWFsCitkcW1pbjUzNCBtaW4gLTAuMDFFLTYxNDMgICAgICAgMCAgLT4gIC0xRS02MTQ1ICAgIFN1Ym5vcm1hbAorZHFtaW41MzUgbWluIC0wLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAtOS45OUUtNjE0NCBTdWJub3JtYWwKK2RxbWluNTM2IG1pbiAtMC4wOTlFLTYxNDMgICAgICAwICAtPiAgLTkuOUUtNjE0NSAgU3Vibm9ybWFsCitkcW1pbjUzNyBtaW4gLTAuMDA5RS02MTQzICAgICAgMCAgLT4gIC05RS02MTQ2ICAgIFN1Ym5vcm1hbAorZHFtaW41MzggbWluIC0wLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAtMUUtNjE0NiAgICBTdWJub3JtYWwKK2RxbWluNTM5IG1pbiAtMC4wMDA5RS02MTQzICAgICAwICAtPiAgLTlFLTYxNDcgICAgU3Vibm9ybWFsCitkcW1pbjU0MCBtaW4gLTAuMDAwMUUtNjE0MyAgICAgMCAgLT4gIC0xRS02MTQ3ICAgIFN1Ym5vcm1hbAorCisKKy0tIE51bGwgdGVzdHMKK2RxbWluOTAwIG1pbiAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbWluOTAxIG1pbiAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW5NYWcuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW5NYWcuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGMyZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbk1hZy5kZWNUZXN0CkBAIC0wLDAgKzEsMjkzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxTWluTWFnLmRlY1Rlc3QgLS0gZGVjUXVhZCBtaW5udW1tYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIHNhbml0eSBjaGVja3MKK2RxbW5nMDAxIG1pbm1hZyAgLTIgIC0yICAtPiAtMgorZHFtbmcwMDIgbWlubWFnICAtMiAgLTEgIC0+IC0xCitkcW1uZzAwMyBtaW5tYWcgIC0yICAgMCAgLT4gIDAKK2RxbW5nMDA0IG1pbm1hZyAgLTIgICAxICAtPiAgMQorZHFtbmcwMDUgbWlubWFnICAtMiAgIDIgIC0+IC0yCitkcW1uZzAwNiBtaW5tYWcgIC0xICAtMiAgLT4gLTEKK2RxbW5nMDA3IG1pbm1hZyAgLTEgIC0xICAtPiAtMQorZHFtbmcwMDggbWlubWFnICAtMSAgIDAgIC0+ICAwCitkcW1uZzAwOSBtaW5tYWcgIC0xICAgMSAgLT4gLTEKK2RxbW5nMDEwIG1pbm1hZyAgLTEgICAyICAtPiAtMQorZHFtbmcwMTEgbWlubWFnICAgMCAgLTIgIC0+ICAwCitkcW1uZzAxMiBtaW5tYWcgICAwICAtMSAgLT4gIDAKK2RxbW5nMDEzIG1pbm1hZyAgIDAgICAwICAtPiAgMAorZHFtbmcwMTQgbWlubWFnICAgMCAgIDEgIC0+ICAwCitkcW1uZzAxNSBtaW5tYWcgICAwICAgMiAgLT4gIDAKK2RxbW5nMDE2IG1pbm1hZyAgIDEgIC0yICAtPiAgMQorZHFtbmcwMTcgbWlubWFnICAgMSAgLTEgIC0+IC0xCitkcW1uZzAxOCBtaW5tYWcgICAxICAgMCAgLT4gIDAKK2RxbW5nMDE5IG1pbm1hZyAgIDEgICAxICAtPiAgMQorZHFtbmcwMjAgbWlubWFnICAgMSAgIDIgIC0+ICAxCitkcW1uZzAyMSBtaW5tYWcgICAyICAtMiAgLT4gLTIKK2RxbW5nMDIyIG1pbm1hZyAgIDIgIC0xICAtPiAtMQorZHFtbmcwMjMgbWlubWFnICAgMiAgIDAgIC0+ICAwCitkcW1uZzAyNSBtaW5tYWcgICAyICAgMSAgLT4gIDEKK2RxbW5nMDI2IG1pbm1hZyAgIDIgICAyICAtPiAgMgorCistLSBleHRlbmRlZCB6ZXJvcworZHFtbmcwMzAgbWlubWFnICAgMCAgICAgMCAgIC0+ICAwCitkcW1uZzAzMSBtaW5tYWcgICAwICAgIC0wICAgLT4gLTAKK2RxbW5nMDMyIG1pbm1hZyAgIDAgICAgLTAuMCAtPiAtMC4wCitkcW1uZzAzMyBtaW5tYWcgICAwICAgICAwLjAgLT4gIDAuMAorZHFtbmcwMzQgbWlubWFnICAtMCAgICAgMCAgIC0+IC0wCitkcW1uZzAzNSBtaW5tYWcgIC0wICAgIC0wICAgLT4gLTAKK2RxbW5nMDM2IG1pbm1hZyAgLTAgICAgLTAuMCAtPiAtMAorZHFtbmcwMzcgbWlubWFnICAtMCAgICAgMC4wIC0+IC0wCitkcW1uZzAzOCBtaW5tYWcgICAwLjAgICAwICAgLT4gIDAuMAorZHFtbmcwMzkgbWlubWFnICAgMC4wICAtMCAgIC0+IC0wCitkcW1uZzA0MCBtaW5tYWcgICAwLjAgIC0wLjAgLT4gLTAuMAorZHFtbmcwNDEgbWlubWFnICAgMC4wICAgMC4wIC0+ICAwLjAKK2RxbW5nMDQyIG1pbm1hZyAgLTAuMCAgIDAgICAtPiAtMC4wCitkcW1uZzA0MyBtaW5tYWcgIC0wLjAgIC0wICAgLT4gLTAKK2RxbW5nMDQ0IG1pbm1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wCitkcW1uZzA0NSBtaW5tYWcgIC0wLjAgICAwLjAgLT4gLTAuMAorCitkcW1uZzA0NiBtaW5tYWcgICAwRTEgIC0wRTEgLT4gLTBFKzEKK2RxbW5nMDQ3IG1pbm1hZyAgLTBFMSAgIDBFMiAtPiAtMEUrMQorZHFtbmcwNDggbWlubWFnICAgMEUyICAgMEUxIC0+ICAwRSsxCitkcW1uZzA0OSBtaW5tYWcgICAwRTEgICAwRTIgLT4gIDBFKzEKK2RxbW5nMDUwIG1pbm1hZyAgLTBFMyAgLTBFMiAtPiAtMEUrMworZHFtbmcwNTEgbWlubWFnICAtMEUyICAtMEUzIC0+IC0wRSszCisKKy0tIFNwZWNpYWxzCitkcW1uZzA5MCBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtbmcwOTEgbWlubWFnICBJbmYgIC0xMDAwICAtPiAtMTAwMAorZHFtbmcwOTIgbWlubWFnICBJbmYgIC0xICAgICAtPiAtMQorZHFtbmcwOTMgbWlubWFnICBJbmYgIC0wICAgICAtPiAtMAorZHFtbmcwOTQgbWlubWFnICBJbmYgICAwICAgICAtPiAgMAorZHFtbmcwOTUgbWlubWFnICBJbmYgICAxICAgICAtPiAgMQorZHFtbmcwOTYgbWlubWFnICBJbmYgICAxMDAwICAtPiAgMTAwMAorZHFtbmcwOTcgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbW5nMDk4IG1pbm1hZyAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK2RxbW5nMDk5IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CitkcW1uZzEwMCBtaW5tYWcgLTEgICAgIEluZiAgIC0+IC0xCitkcW1uZzEwMSBtaW5tYWcgLTAgICAgIEluZiAgIC0+IC0wCitkcW1uZzEwMiBtaW5tYWcgIDAgICAgIEluZiAgIC0+ICAwCitkcW1uZzEwMyBtaW5tYWcgIDEgICAgIEluZiAgIC0+ICAxCitkcW1uZzEwNCBtaW5tYWcgIDEwMDAgIEluZiAgIC0+ICAxMDAwCitkcW1uZzEwNSBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitkcW1uZzEyMCBtaW5tYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtbmcxMjEgbWlubWFnIC1JbmYgIC0xMDAwICAtPiAtMTAwMAorZHFtbmcxMjIgbWlubWFnIC1JbmYgIC0xICAgICAtPiAtMQorZHFtbmcxMjMgbWlubWFnIC1JbmYgIC0wICAgICAtPiAtMAorZHFtbmcxMjQgbWlubWFnIC1JbmYgICAwICAgICAtPiAgMAorZHFtbmcxMjUgbWlubWFnIC1JbmYgICAxICAgICAtPiAgMQorZHFtbmcxMjYgbWlubWFnIC1JbmYgICAxMDAwICAtPiAgMTAwMAorZHFtbmcxMjcgbWlubWFnIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RxbW5nMTI4IG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW1uZzEyOSBtaW5tYWcgLTEwMDAgLUluZiAgIC0+IC0xMDAwCitkcW1uZzEzMCBtaW5tYWcgLTEgICAgLUluZiAgIC0+IC0xCitkcW1uZzEzMSBtaW5tYWcgLTAgICAgLUluZiAgIC0+IC0wCitkcW1uZzEzMiBtaW5tYWcgIDAgICAgLUluZiAgIC0+ICAwCitkcW1uZzEzMyBtaW5tYWcgIDEgICAgLUluZiAgIC0+ICAxCitkcW1uZzEzNCBtaW5tYWcgIDEwMDAgLUluZiAgIC0+ICAxMDAwCitkcW1uZzEzNSBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK2RxbW5nMTQxIG1pbm1hZyAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQorZHFtbmcxNDIgbWlubWFnICBOYU4gLTEwMDAgICAtPiAgLTEwMDAKK2RxbW5nMTQzIG1pbm1hZyAgTmFOIC0xICAgICAgLT4gIC0xCitkcW1uZzE0NCBtaW5tYWcgIE5hTiAtMCAgICAgIC0+ICAtMAorZHFtbmcxNDUgbWlubWFnICBOYU4gIDAgICAgICAtPiAgMAorZHFtbmcxNDYgbWlubWFnICBOYU4gIDEgICAgICAtPiAgMQorZHFtbmcxNDcgbWlubWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMAorZHFtbmcxNDggbWlubWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKK2RxbW5nMTQ5IG1pbm1hZyAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFtbmcxNTAgbWlubWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK2RxbW5nMTUxIG1pbm1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDAKK2RxbW5nMTUyIG1pbm1hZyAtMSAgIC1OYU4gICAgLT4gLTEKK2RxbW5nMTUzIG1pbm1hZyAtMCAgICBOYU4gICAgLT4gLTAKK2RxbW5nMTU0IG1pbm1hZyAgMCAgIC1OYU4gICAgLT4gIDAKK2RxbW5nMTU1IG1pbm1hZyAgMSAgICBOYU4gICAgLT4gIDEKK2RxbW5nMTU2IG1pbm1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK2RxbW5nMTU3IG1pbm1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5CisKK2RxbW5nMTYxIG1pbm1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTYyIG1pbm1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTYzIG1pbm1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTY0IG1pbm1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTY1IG1pbm1hZyAtc05hTiAgMCAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTY2IG1pbm1hZyAtc05hTiAgMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTY3IG1pbm1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTY4IG1pbm1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTY5IG1pbm1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTcwIG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTcxIG1pbm1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTcyIG1pbm1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTczIG1pbm1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTc0IG1pbm1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTc1IG1pbm1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTc2IG1pbm1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTc3IG1pbm1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTc4IG1pbm1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTc5IG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFtbmcxODEgbWlubWFnICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFtbmcxODIgbWlubWFnIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwCitkcW1uZzE4MyBtaW5tYWcgIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5CisKK2RxbW5nMTg0IG1pbm1hZyAgTmFOMSAgICBOYU41NCAtPiAgTmFOMQorZHFtbmcxODUgbWlubWFnICBOYU4yMiAgLU5hTjUzIC0+ICBOYU4yMgorZHFtbmcxODYgbWlubWFnIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zCitkcW1uZzE4NyBtaW5tYWcgLU5hTjQ0ICAgTmFONyAgLT4gLU5hTjQ0CisKK2RxbW5nMTg4IG1pbm1hZyAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkKK2RxbW5nMTg5IG1pbm1hZyAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQorZHFtbmcxOTAgbWlubWFnICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCitkcW1uZzE5MSBtaW5tYWcgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxOTIgbWlubWFnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTkzIG1pbm1hZyAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE5NCBtaW5tYWcgIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxOTUgbWlubWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTk2IG1pbm1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzE5NyBtaW5tYWcgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFtbmcxOTggbWlubWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5nMTk5IG1pbm1hZyAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG9sZCByb3VuZGluZyBjaGVja3MKK2RxbW5nMjIxIG1pbm1hZyAtMTIzNDU2NzgwMDAgMSAgLT4gMQorZHFtbmcyMjIgbWlubWFnIDEgLTEyMzQ1Njc4MDAwICAtPiAxCitkcW1uZzIyMyBtaW5tYWcgLTEyMzQ1Njc4MDAgIDEgIC0+IDEKK2RxbW5nMjI0IG1pbm1hZyAxIC0xMjM0NTY3ODAwICAgLT4gMQorZHFtbmcyMjUgbWlubWFnIC0xMjM0NTY3ODkwICAxICAtPiAxCitkcW1uZzIyNiBtaW5tYWcgMSAtMTIzNDU2Nzg5MCAgIC0+IDEKK2RxbW5nMjI3IG1pbm1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gMQorZHFtbmcyMjggbWlubWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAxCitkcW1uZzIyOSBtaW5tYWcgLTEyMzQ1Njc4OTAxIDEgIC0+IDEKK2RxbW5nMjMwIG1pbm1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gMQorZHFtbmcyMzEgbWlubWFnIC0xMjM0NTY3ODk2ICAxICAtPiAxCitkcW1uZzIzMiBtaW5tYWcgMSAtMTIzNDU2Nzg5NiAgIC0+IDEKK2RxbW5nMjMzIG1pbm1hZyAxMjM0NTY3ODkxICAxICAgLT4gMQorZHFtbmcyMzQgbWlubWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkcW1uZzIzNSBtaW5tYWcgMTIzNDU2Nzg5MDEgMSAgIC0+IDEKK2RxbW5nMjM2IG1pbm1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gMQorZHFtbmcyMzcgbWlubWFnIDEyMzQ1Njc4OTYgIDEgICAtPiAxCitkcW1uZzIzOCBtaW5tYWcgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworLS0gZnJvbSBleGFtcGxlcworZHFtbmcyODAgbWlubWFnICczJyAgICcyJyAgLT4gICcyJworZHFtbmcyODEgbWlubWFnICctMTAnICczJyAgLT4gICczJworZHFtbmcyODIgbWlubWFnICcxLjAnICcxJyAgLT4gICcxLjAnCitkcW1uZzI4MyBtaW5tYWcgJzEnICcxLjAnICAtPiAgJzEuMCcKK2RxbW5nMjg0IG1pbm1hZyAnNycgJ05hTicgIC0+ICAnNycKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCitkcW1uZzQwMSBtaW5tYWcgIEluZiAgICAxLjEgICAgIC0+ICAxLjEKK2RxbW5nNDAyIG1pbm1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEKK2RxbW5nNDAzIG1pbm1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDEuMAorZHFtbmc0MDQgbWlubWFnICAxLjAgICAgMC4xICAgICAtPiAgMC4xCitkcW1uZzQwNSBtaW5tYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwCitkcW1uZzQwNiBtaW5tYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMAorZHFtbmc0MDcgbWlubWFnICAwLjEwICAgMCAgICAgICAtPiAgMAorZHFtbmc0MDggbWlubWFnICAwICAgICAgMC4wICAgICAtPiAgMC4wCitkcW1uZzQwOSBtaW5tYWcgIDAuMCAgIC0wICAgICAgIC0+IC0wCitkcW1uZzQxMCBtaW5tYWcgIDAuMCAgIC0wLjAgICAgIC0+IC0wLjAKK2RxbW5nNDExIG1pbm1hZyAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMAorZHFtbmc0MTIgbWlubWFnICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMAorZHFtbmc0MTMgbWlubWFnICAwICAgICAtMC4wICAgICAtPiAtMC4wCitkcW1uZzQxNCBtaW5tYWcgIDAgICAgIC0wICAgICAgIC0+IC0wCitkcW1uZzQxNSBtaW5tYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wCitkcW1uZzQxNiBtaW5tYWcgLTAgICAgIC0wLjEwMCAgIC0+IC0wCitkcW1uZzQxNyBtaW5tYWcgLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwCitkcW1uZzQxOCBtaW5tYWcgLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEKK2RxbW5nNDE5IG1pbm1hZyAtMC4xICAgLTEuMCAgICAgLT4gLTAuMQorZHFtbmc0MjAgbWlubWFnIC0xLjAgICAtMSAgICAgICAtPiAtMQorZHFtbmc0MjEgbWlubWFnIC0xICAgICAtMS4xICAgICAtPiAtMQorZHFtbmc0MjMgbWlubWFnIC0xLjEgICAtSW5mICAgICAtPiAtMS4xCistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKK2RxbW5nNDMxIG1pbm1hZyAgMS4xICAgIEluZiAgICAgLT4gIDEuMQorZHFtbmc0MzIgbWlubWFnICAxICAgICAgMS4xICAgICAtPiAgMQorZHFtbmc0MzMgbWlubWFnICAxLjAgICAgMSAgICAgICAtPiAgMS4wCitkcW1uZzQzNCBtaW5tYWcgIDAuMSAgICAxLjAgICAgIC0+ICAwLjEKK2RxbW5nNDM1IG1pbm1hZyAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMTAKK2RxbW5nNDM2IG1pbm1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAwCitkcW1uZzQzNyBtaW5tYWcgIDAgICAgICAwLjEwICAgIC0+ICAwCitkcW1uZzQzOCBtaW5tYWcgIDAuMCAgICAwICAgICAgIC0+ICAwLjAKK2RxbW5nNDM5IG1pbm1hZyAtMCAgICAgIDAuMCAgICAgLT4gLTAKK2RxbW5nNDQwIG1pbm1hZyAtMC4wICAgIDAuMCAgICAgLT4gLTAuMAorZHFtbmc0NDEgbWlubWFnIC0wLjAgICAgMC4wMCAgICAtPiAtMC4wCitkcW1uZzQ0MiBtaW5tYWcgLTAuMDAgICAwLjAgICAgIC0+IC0wLjAwCitkcW1uZzQ0MyBtaW5tYWcgLTAuMCAgICAwICAgICAgIC0+IC0wLjAKK2RxbW5nNDQ0IG1pbm1hZyAtMCAgICAgIDAgICAgICAgLT4gLTAKK2RxbW5nNDQ1IG1pbm1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTAKK2RxbW5nNDQ2IG1pbm1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTAKK2RxbW5nNDQ3IG1pbm1hZyAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAKK2RxbW5nNDQ4IG1pbm1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQorZHFtbmc0NDkgbWlubWFnIC0xLjAgICAtMC4xICAgICAtPiAtMC4xCitkcW1uZzQ1MCBtaW5tYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xCitkcW1uZzQ1MSBtaW5tYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xCitkcW1uZzQ1MyBtaW5tYWcgLUluZiAgIC0xLjEgICAgIC0+IC0xLjEKKy0tIGxhcmdpZXMKK2RxbW5nNDYwIG1pbm1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDAKK2RxbW5nNDYxIG1pbm1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK2RxbW5nNDYyIG1pbm1hZyAgMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMKK2RxbW5nNDYzIG1pbm1hZyAgMUUrMyAgIC0zODQgICAgLT4gLTM4NAorZHFtbmc0NjQgbWlubWFnIC0zODQgICAgMUUrMyAgICAtPiAtMzg0CitkcW1uZzQ2NSBtaW5tYWcgLTFFKzMgICAxMDAwICAgIC0+IC0xRSszCitkcW1uZzQ2NiBtaW5tYWcgLTM4NCAgIC0xRSszICAgIC0+IC0zODQKK2RxbW5nNDY3IG1pbm1hZyAtMUUrMyAgIC0zODQgICAgLT4gLTM4NAorCistLSBzdWJub3JtYWxzCitkcW1uZzUxMCBtaW5tYWcgIDEuMDBFLTYxNDMgICAgICAgMCAgLT4gICAwCitkcW1uZzUxMSBtaW5tYWcgIDAuMUUtNjE0MyAgICAgICAgMCAgLT4gICAwCitkcW1uZzUxMiBtaW5tYWcgIDAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAwCitkcW1uZzUxMyBtaW5tYWcgIDAuMTAwRS02MTQzICAgICAgMCAgLT4gICAwCitkcW1uZzUxNCBtaW5tYWcgIDAuMDFFLTYxNDMgICAgICAgMCAgLT4gICAwCitkcW1uZzUxNSBtaW5tYWcgIDAuOTk5RS02MTQzICAgICAgMCAgLT4gICAwCitkcW1uZzUxNiBtaW5tYWcgIDAuMDk5RS02MTQzICAgICAgMCAgLT4gICAwCitkcW1uZzUxNyBtaW5tYWcgIDAuMDA5RS02MTQzICAgICAgMCAgLT4gICAwCitkcW1uZzUxOCBtaW5tYWcgIDAuMDAxRS02MTQzICAgICAgMCAgLT4gICAwCitkcW1uZzUxOSBtaW5tYWcgIDAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICAwCitkcW1uZzUyMCBtaW5tYWcgIDAuMDAwMUUtNjE0MyAgICAgMCAgLT4gICAwCisKK2RxbW5nNTMwIG1pbm1hZyAtMS4wMEUtNjE0MyAgICAgICAwICAtPiAgIDAKK2RxbW5nNTMxIG1pbm1hZyAtMC4xRS02MTQzICAgICAgICAwICAtPiAgIDAKK2RxbW5nNTMyIG1pbm1hZyAtMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDAKK2RxbW5nNTMzIG1pbm1hZyAtMC4xMDBFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbW5nNTM0IG1pbm1hZyAtMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDAKK2RxbW5nNTM1IG1pbm1hZyAtMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbW5nNTM2IG1pbm1hZyAtMC4wOTlFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbW5nNTM3IG1pbm1hZyAtMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbW5nNTM4IG1pbm1hZyAtMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDAKK2RxbW5nNTM5IG1pbm1hZyAtMC4wMDA5RS02MTQzICAgICAwICAtPiAgIDAKK2RxbW5nNTQwIG1pbm1hZyAtMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDAKKworCistLSBOdWxsIHRlc3RzCitkcW1uZzkwMCBtaW5tYWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW1uZzkwMSBtaW5tYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWludXMuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW51cy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZTQ2MmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWludXMuZGVjVGVzdApAQCAtMCwwICsxLDg4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxTWludXMuZGVjVGVzdCAtLSBkZWNRdWFkIDAteCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZHFtbnMwMDEgbWludXMgICAgICAgKzcuNTAgIC0+IC03LjUwCisKKy0tIEluZmluaXRpZXMKK2RxbW5zMDExIG1pbnVzICBJbmZpbml0eSAgICAtPiAtSW5maW5pdHkKK2RxbW5zMDEyIG1pbnVzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RxbW5zMDIxIG1pbnVzICAgICAgICAgTmFOICAtPiBOYU4KK2RxbW5zMDIyIG1pbnVzICAgICAgICAtTmFOICAtPiAtTmFOCitkcW1uczAyMyBtaW51cyAgICAgICAgc05hTiAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbnMwMjQgbWludXMgICAgICAgLXNOYU4gIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gTmFOcywgbm9uLTAgcGF5bG9hZAorZHFtbnMwMzEgbWludXMgICAgICAgTmFOMTMgIC0+IE5hTjEzCitkcW1uczAzMiBtaW51cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzCitkcW1uczAzMyBtaW51cyAgICAgIHNOYU4xMyAgLT4gTmFOMTMgICBJbnZhbGlkX29wZXJhdGlvbgorZHFtbnMwMzQgbWludXMgICAgIC1zTmFOMTMgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5zMDM1IG1pbnVzICAgICAgIE5hTjcwICAtPiBOYU43MAorZHFtbnMwMzYgbWludXMgICAgICAtTmFONzAgIC0+IC1OYU43MAorZHFtbnMwMzcgbWludXMgICAgICBzTmFOMTAxIC0+IE5hTjEwMSAgSW52YWxpZF9vcGVyYXRpb24KK2RxbW5zMDM4IG1pbnVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZpbml0ZXMKK2RxbW5zMTAxIG1pbnVzICAgICAgICAgIDcgICAtPiAtNworZHFtbnMxMDIgbWludXMgICAgICAgICAtNyAgIC0+IDcKK2RxbW5zMTAzIG1pbnVzICAgICAgICAgNzUgICAtPiAtNzUKK2RxbW5zMTA0IG1pbnVzICAgICAgICAtNzUgICAtPiA3NQorZHFtbnMxMDUgbWludXMgICAgICAgNy41MCAgIC0+IC03LjUwCitkcW1uczEwNiBtaW51cyAgICAgIC03LjUwICAgLT4gNy41MAorZHFtbnMxMDcgbWludXMgICAgICAgNy41MDAgIC0+IC03LjUwMAorZHFtbnMxMDggbWludXMgICAgICAtNy41MDAgIC0+IDcuNTAwCisKKy0tIHplcm9zCitkcW1uczExMSBtaW51cyAgICAgICAgICAwICAgLT4gMAorZHFtbnMxMTIgbWludXMgICAgICAgICAtMCAgIC0+IDAKK2RxbW5zMTEzIG1pbnVzICAgICAgIDBFKzQgICAtPiAwRSs0CitkcW1uczExNCBtaW51cyAgICAgIC0wRSs0ICAgLT4gMEUrNAorZHFtbnMxMTUgbWludXMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAorZHFtbnMxMTYgbWludXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAorZHFtbnMxMTcgbWludXMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZHFtbnMxMTggbWludXMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQorCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cworZHFtbnMxMjEgbWludXMgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCitkcW1uczEyMiBtaW51cyAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxbW5zMTIzIG1pbnVzICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorZHFtbnMxMjQgbWludXMgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitkcW1uczEzMSBtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbW5zMTMyIG1pbnVzICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzCitkcW1uczEzMyBtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxbW5zMTM0IG1pbnVzICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2IFN1Ym5vcm1hbAorCitkcW1uczEzNSBtaW51cyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NiBTdWJub3JtYWwKK2RxbW5zMTM2IG1pbnVzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFtbnMxMzcgbWludXMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMKK2RxbW5zMTM4IG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NApkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU11bHRpcGx5LmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTXVsdGlwbHkuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzg3YTg1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU11bHRpcGx5LmRlY1Rlc3QKQEAgLTAsMCArMSw1ODkgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFNdWx0aXBseS5kZWNUZXN0IC0tIGRlY1F1YWQgbXVsdGlwbGljYXRpb24gICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY1F1YWRzIG9ubHk7IGFsbCBhcmd1bWVudHMgYXJlCistLSByZXByZXNlbnRhYmxlIGluIGEgZGVjUXVhZAorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gc2FuaXR5IGNoZWNrcworZHFtdWwwMDAgbXVsdGlwbHkgMiAgICAgIDIgLT4gNAorZHFtdWwwMDEgbXVsdGlwbHkgMiAgICAgIDMgLT4gNgorZHFtdWwwMDIgbXVsdGlwbHkgNSAgICAgIDEgLT4gNQorZHFtdWwwMDMgbXVsdGlwbHkgNSAgICAgIDIgLT4gMTAKK2RxbXVsMDA0IG11bHRpcGx5IDEuMjAgICAyIC0+IDIuNDAKK2RxbXVsMDA1IG11bHRpcGx5IDEuMjAgICAwIC0+IDAuMDAKK2RxbXVsMDA2IG11bHRpcGx5IDEuMjAgIC0yIC0+IC0yLjQwCitkcW11bDAwNyBtdWx0aXBseSAtMS4yMCAgMiAtPiAtMi40MAorZHFtdWwwMDggbXVsdGlwbHkgLTEuMjAgIDAgLT4gLTAuMDAKK2RxbXVsMDA5IG11bHRpcGx5IC0xLjIwIC0yIC0+IDIuNDAKK2RxbXVsMDEwIG11bHRpcGx5IDUuMDkgNy4xIC0+IDM2LjEzOQorZHFtdWwwMTEgbXVsdGlwbHkgMi41ICAgIDQgLT4gMTAuMAorZHFtdWwwMTIgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDAKK2RxbXVsMDEzIG11bHRpcGx5IDEuMjM0NTY3ODkgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEuMjM0NTY3ODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQKK2RxbXVsMDE1IG11bHRpcGx5IDIuNTAgICA0IC0+IDEwLjAwCitkcW11bDAxNiBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTk5OSAgOS45OTk5OTk5OTk5OTk5OTk5OSAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcW11bDAxNyBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTk5OSAtOS45OTk5OTk5OTk5OTk5OTk5OSAtPiAtOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcW11bDAxOCBtdWx0aXBseSAtOS45OTk5OTk5OTk5OTk5OTk5OSAgOS45OTk5OTk5OTk5OTk5OTk5OSAtPiAtOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcW11bDAxOSBtdWx0aXBseSAtOS45OTk5OTk5OTk5OTk5OTk5OSAtOS45OTk5OTk5OTk5OTk5OTk5OSAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHplcm9zLCBldGMuCitkcW11bDAyMSBtdWx0aXBseSAgMCAgICAgIDAgICAgIC0+ICAwCitkcW11bDAyMiBtdWx0aXBseSAgMCAgICAgLTAgICAgIC0+IC0wCitkcW11bDAyMyBtdWx0aXBseSAtMCAgICAgIDAgICAgIC0+IC0wCitkcW11bDAyNCBtdWx0aXBseSAtMCAgICAgLTAgICAgIC0+ICAwCitkcW11bDAyNSBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwCitkcW11bDAyNiBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwCitkcW11bDAyNyBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwCitkcW11bDAyOCBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwCitkcW11bDAzMCBtdWx0aXBseSAgNS4wMCAgIDFFLTMgIC0+ICAwLjAwNTAwCitkcW11bDAzMSBtdWx0aXBseSAgMDAuMDAgIDAuMDAwIC0+ICAwLjAwMDAwCitkcW11bDAzMiBtdWx0aXBseSAgMDAuMDAgIDBFLTMgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZHFtdWwwMzMgbXVsdGlwbHkgIDBFLTMgICAwMC4wMCAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK2RxbXVsMDM0IG11bHRpcGx5IC01LjAwICAgMUUtMyAgLT4gLTAuMDA1MDAKK2RxbXVsMDM1IG11bHRpcGx5IC0wMC4wMCAgMC4wMDAgLT4gLTAuMDAwMDAKK2RxbXVsMDM2IG11bHRpcGx5IC0wMC4wMCAgMEUtMyAgLT4gLTAuMDAwMDAgICAgIC0tIHJocyBpcyAwCitkcW11bDAzNyBtdWx0aXBseSAtMEUtMyAgIDAwLjAwIC0+IC0wLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZHFtdWwwMzggbXVsdGlwbHkgIDUuMDAgIC0xRS0zICAtPiAtMC4wMDUwMAorZHFtdWwwMzkgbXVsdGlwbHkgIDAwLjAwIC0wLjAwMCAtPiAtMC4wMDAwMAorZHFtdWwwNDAgbXVsdGlwbHkgIDAwLjAwIC0wRS0zICAtPiAtMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2RxbXVsMDQxIG11bHRpcGx5ICAwRS0zICAtMDAuMDAgLT4gLTAuMDAwMDAgICAgIC0tIGxocyBpcyAwCitkcW11bDA0MiBtdWx0aXBseSAtNS4wMCAgLTFFLTMgIC0+ICAwLjAwNTAwCitkcW11bDA0MyBtdWx0aXBseSAtMDAuMDAgLTAuMDAwIC0+ICAwLjAwMDAwCitkcW11bDA0NCBtdWx0aXBseSAtMDAuMDAgLTBFLTMgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAorZHFtdWwwNDUgbXVsdGlwbHkgLTBFLTMgIC0wMC4wMCAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAorZHFtdWwwNTAgbXVsdGlwbHkgMS4yMCAzICAgICAgICAtPiAzLjYwCitkcW11bDA1MSBtdWx0aXBseSA3ICAgIDMgICAgICAgIC0+IDIxCitkcW11bDA1MiBtdWx0aXBseSAwLjkgIDAuOCAgICAgIC0+IDAuNzIKK2RxbXVsMDUzIG11bHRpcGx5IDAuOSAgLTAgICAgICAgLT4gLTAuMAorZHFtdWwwNTQgbXVsdGlwbHkgNjU0MzIxIDY1NDMyMSAtPiA0MjgxMzU5NzEwNDEKKworZHFtdWwwNjAgbXVsdGlwbHkgMTIzLjQ1IDFlNyAgLT4gIDEuMjM0NUUrOQorZHFtdWwwNjEgbXVsdGlwbHkgMTIzLjQ1IDFlOCAgLT4gIDEuMjM0NUUrMTAKK2RxbXVsMDYyIG11bHRpcGx5IDEyMy40NSAxZSs5IC0+ICAxLjIzNDVFKzExCitkcW11bDA2MyBtdWx0aXBseSAxMjMuNDUgMWUxMCAtPiAgMS4yMzQ1RSsxMgorZHFtdWwwNjQgbXVsdGlwbHkgMTIzLjQ1IDFlMTEgLT4gIDEuMjM0NUUrMTMKK2RxbXVsMDY1IG11bHRpcGx5IDEyMy40NSAxZTEyIC0+ICAxLjIzNDVFKzE0CitkcW11bDA2NiBtdWx0aXBseSAxMjMuNDUgMWUxMyAtPiAgMS4yMzQ1RSsxNQorCisKKy0tIHRlc3Qgc29tZSBpbnRlcm1lZGlhdGUgbGVuZ3RocworLS0gICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RxbXVsMDgwIG11bHRpcGx5IDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAtPiAxMjMwMTIzNDU2NDU2NzguOQorZHFtdWwwODQgbXVsdGlwbHkgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgIC0+IDEyMzAxMjM0NTY0NTY3OC45CitkcW11bDA5MCBtdWx0aXBseSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKK2RxbXVsMDk0IG11bHRpcGx5IDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAtPiAxMjMwMTIzNDU2NDU2NzguOQorCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIGFuZCBjYXJyaWVzCitkcW11bDEwMSBtdWx0aXBseSA5IDkgICAtPiA4MQorZHFtdWwxMDIgbXVsdGlwbHkgOSA5MCAgIC0+IDgxMAorZHFtdWwxMDMgbXVsdGlwbHkgOSA5MDAgICAtPiA4MTAwCitkcW11bDEwNCBtdWx0aXBseSA5IDkwMDAgICAtPiA4MTAwMAorZHFtdWwxMDUgbXVsdGlwbHkgOSA5MDAwMCAgIC0+IDgxMDAwMAorZHFtdWwxMDYgbXVsdGlwbHkgOSA5MDAwMDAgICAtPiA4MTAwMDAwCitkcW11bDEwNyBtdWx0aXBseSA5IDkwMDAwMDAgICAtPiA4MTAwMDAwMAorZHFtdWwxMDggbXVsdGlwbHkgOSA5MDAwMDAwMCAgIC0+IDgxMDAwMDAwMAorZHFtdWwxMDkgbXVsdGlwbHkgOSA5MDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwCitkcW11bDExMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMAorZHFtdWwxMTEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMAorZHFtdWwxMTIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwCitkcW11bDExMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMAorZHFtdWwxMTQgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMAorZHFtdWwxMTUgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwCistLWRxbXVsMTE2IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwCistLWRxbXVsMTE3IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAKKy0tZHFtdWwxMTggbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwCistLWRxbXVsMTE5IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwCistLWRxbXVsMTIwIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tZHFtdWwxMjEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRxbXVsMTIyIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLWRxbXVsMTIzIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgd2l0aG91dCBjYXJyaWVzCitkcW11bDEzMSBtdWx0aXBseSAzIDMgICAtPiA5CitkcW11bDEzMiBtdWx0aXBseSAzIDMwICAgLT4gOTAKK2RxbXVsMTMzIG11bHRpcGx5IDMgMzAwICAgLT4gOTAwCitkcW11bDEzNCBtdWx0aXBseSAzIDMwMDAgICAtPiA5MDAwCitkcW11bDEzNSBtdWx0aXBseSAzIDMwMDAwICAgLT4gOTAwMDAKK2RxbXVsMTM2IG11bHRpcGx5IDMgMzAwMDAwICAgLT4gOTAwMDAwCitkcW11bDEzNyBtdWx0aXBseSAzIDMwMDAwMDAgICAtPiA5MDAwMDAwCitkcW11bDEzOCBtdWx0aXBseSAzIDMwMDAwMDAwICAgLT4gOTAwMDAwMDAKK2RxbXVsMTM5IG11bHRpcGx5IDMgMzAwMDAwMDAwICAgLT4gOTAwMDAwMDAwCitkcW11bDE0MCBtdWx0aXBseSAzIDMwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwCitkcW11bDE0MSBtdWx0aXBseSAzIDMwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAKK2RxbXVsMTQyIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwCitkcW11bDE0MyBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwCitkcW11bDE0NCBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAKK2RxbXVsMTQ1IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwCitkcW11bDE0NiBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwCitkcW11bDE0NyBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTQ4IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDE0OSBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDE1MCBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTUxIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDE1MiBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDE1MyBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworZHFtdWwyNjMgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTExOTkyODI5NiBJbmV4YWN0IFJvdW5kZWQKKworLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZworZHFtdWwzMDEgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMwMiBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMDMgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMDQgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMwNSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMDYgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMDcgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMwOCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMDkgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMTAgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMxMSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMTIgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMTMgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMxNCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMTUgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwzMTYgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDMxNyBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIFJvdW5kZWQKK2RxbXVsMzE4IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIFJvdW5kZWQKK2RxbXVsMzE5IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2ICBSb3VuZGVkCitkcW11bDMyMCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzcgIFJvdW5kZWQKK2RxbXVsMzIxIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzggIFJvdW5kZWQKK2RxbXVsMzIyIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM5ICBSb3VuZGVkCitkcW11bDMyMyBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNDAgIFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK2RxbXVsNTA0ICBtdWx0aXBseSAgMEUtNDI2MCAxMDAwRS00MjYwICAtPiAwRS02MTc2IENsYW1wZWQKK2RxbXVsNTA1ICBtdWx0aXBseSAgMTAwRSs0MjYwIDBFKzQyNjAgICAtPiAwRSs2MTExIENsYW1wZWQKKworLS0gbWl4ZWQgd2l0aCB6ZXJvcworZHFtdWw1NDEgbXVsdGlwbHkgIDAgICAgLTEgICAgIC0+IC0wCitkcW11bDU0MiBtdWx0aXBseSAtMCAgICAtMSAgICAgLT4gIDAKK2RxbXVsNTQzIG11bHRpcGx5ICAwICAgICAxICAgICAtPiAgMAorZHFtdWw1NDQgbXVsdGlwbHkgLTAgICAgIDEgICAgIC0+IC0wCitkcW11bDU0NSBtdWx0aXBseSAtMSAgICAgMCAgICAgLT4gLTAKK2RxbXVsNTQ2IG11bHRpcGx5IC0xICAgIC0wICAgICAtPiAgMAorZHFtdWw1NDcgbXVsdGlwbHkgIDEgICAgIDAgICAgIC0+ICAwCitkcW11bDU0OCBtdWx0aXBseSAgMSAgICAtMCAgICAgLT4gLTAKKworZHFtdWw1NTEgbXVsdGlwbHkgIDAuMCAgLTEgICAgIC0+IC0wLjAKK2RxbXVsNTUyIG11bHRpcGx5IC0wLjAgIC0xICAgICAtPiAgMC4wCitkcW11bDU1MyBtdWx0aXBseSAgMC4wICAgMSAgICAgLT4gIDAuMAorZHFtdWw1NTQgbXVsdGlwbHkgLTAuMCAgIDEgICAgIC0+IC0wLjAKK2RxbXVsNTU1IG11bHRpcGx5IC0xLjAgICAwICAgICAtPiAtMC4wCitkcW11bDU1NiBtdWx0aXBseSAtMS4wICAtMCAgICAgLT4gIDAuMAorZHFtdWw1NTcgbXVsdGlwbHkgIDEuMCAgIDAgICAgIC0+ICAwLjAKK2RxbXVsNTU4IG11bHRpcGx5ICAxLjAgIC0wICAgICAtPiAtMC4wCisKK2RxbXVsNTYxIG11bHRpcGx5ICAwICAgIC0xLjAgICAtPiAtMC4wCitkcW11bDU2MiBtdWx0aXBseSAtMCAgICAtMS4wICAgLT4gIDAuMAorZHFtdWw1NjMgbXVsdGlwbHkgIDAgICAgIDEuMCAgIC0+ICAwLjAKK2RxbXVsNTY0IG11bHRpcGx5IC0wICAgICAxLjAgICAtPiAtMC4wCitkcW11bDU2NSBtdWx0aXBseSAtMSAgICAgMC4wICAgLT4gLTAuMAorZHFtdWw1NjYgbXVsdGlwbHkgLTEgICAgLTAuMCAgIC0+ICAwLjAKK2RxbXVsNTY3IG11bHRpcGx5ICAxICAgICAwLjAgICAtPiAgMC4wCitkcW11bDU2OCBtdWx0aXBseSAgMSAgICAtMC4wICAgLT4gLTAuMAorCitkcW11bDU3MSBtdWx0aXBseSAgMC4wICAtMS4wICAgLT4gLTAuMDAKK2RxbXVsNTcyIG11bHRpcGx5IC0wLjAgIC0xLjAgICAtPiAgMC4wMAorZHFtdWw1NzMgbXVsdGlwbHkgIDAuMCAgIDEuMCAgIC0+ICAwLjAwCitkcW11bDU3NCBtdWx0aXBseSAtMC4wICAgMS4wICAgLT4gLTAuMDAKK2RxbXVsNTc1IG11bHRpcGx5IC0xLjAgICAwLjAgICAtPiAtMC4wMAorZHFtdWw1NzYgbXVsdGlwbHkgLTEuMCAgLTAuMCAgIC0+ICAwLjAwCitkcW11bDU3NyBtdWx0aXBseSAgMS4wICAgMC4wICAgLT4gIDAuMDAKK2RxbXVsNTc4IG11bHRpcGx5ICAxLjAgIC0wLjAgICAtPiAtMC4wMAorCisKKy0tIFNwZWNpYWxzCitkcW11bDU4MCBtdWx0aXBseSAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW11bDU4MSBtdWx0aXBseSAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitkcW11bDU4MiBtdWx0aXBseSAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcW11bDU4MyBtdWx0aXBseSAgSW5mICAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNTg0IG11bHRpcGx5ICBJbmYgICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw1ODUgbXVsdGlwbHkgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZHFtdWw1ODYgbXVsdGlwbHkgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorZHFtdWw1ODcgbXVsdGlwbHkgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFtdWw1ODggbXVsdGlwbHkgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFtdWw1ODkgbXVsdGlwbHkgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFtdWw1OTAgbXVsdGlwbHkgLTEgICAgIEluZiAgIC0+IC1JbmZpbml0eQorZHFtdWw1OTEgbXVsdGlwbHkgLTAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDU5MiBtdWx0aXBseSAgMCAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNTkzIG11bHRpcGx5ICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXVsNTk0IG11bHRpcGx5ICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbXVsNTk1IG11bHRpcGx5ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZHFtdWw2MDAgbXVsdGlwbHkgLUluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorZHFtdWw2MDEgbXVsdGlwbHkgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQorZHFtdWw2MDIgbXVsdGlwbHkgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZHFtdWw2MDMgbXVsdGlwbHkgLUluZiAgLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDYwNCBtdWx0aXBseSAtSW5mICAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjA1IG11bHRpcGx5IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2RxbXVsNjA2IG11bHRpcGx5IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2RxbXVsNjA3IG11bHRpcGx5IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2RxbXVsNjA4IG11bHRpcGx5IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkKK2RxbXVsNjA5IG11bHRpcGx5IC1JbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RxbXVsNjEwIG11bHRpcGx5IC0xICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RxbXVsNjExIG11bHRpcGx5IC0wICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2MTIgbXVsdGlwbHkgIDAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDYxMyBtdWx0aXBseSAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitkcW11bDYxNCBtdWx0aXBseSAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitkcW11bDYxNSBtdWx0aXBseSAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CisKK2RxbXVsNjIxIG11bHRpcGx5ICBOYU4gLUluZiAgICAtPiAgTmFOCitkcW11bDYyMiBtdWx0aXBseSAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFtdWw2MjMgbXVsdGlwbHkgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2RxbXVsNjI0IG11bHRpcGx5ICBOYU4gLTAgICAgICAtPiAgTmFOCitkcW11bDYyNSBtdWx0aXBseSAgTmFOICAwICAgICAgLT4gIE5hTgorZHFtdWw2MjYgbXVsdGlwbHkgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2RxbXVsNjI3IG11bHRpcGx5ICBOYU4gIDEwMDAgICAtPiAgTmFOCitkcW11bDYyOCBtdWx0aXBseSAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFtdWw2MjkgbXVsdGlwbHkgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2RxbXVsNjMwIG11bHRpcGx5IC1JbmYgIE5hTiAgICAtPiAgTmFOCitkcW11bDYzMSBtdWx0aXBseSAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFtdWw2MzIgbXVsdGlwbHkgLTEgICAgTmFOICAgIC0+ICBOYU4KK2RxbXVsNjMzIG11bHRpcGx5IC0wICAgIE5hTiAgICAtPiAgTmFOCitkcW11bDYzNCBtdWx0aXBseSAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFtdWw2MzUgbXVsdGlwbHkgIDEgICAgTmFOICAgIC0+ICBOYU4KK2RxbXVsNjM2IG11bHRpcGx5ICAxMDAwIE5hTiAgICAtPiAgTmFOCitkcW11bDYzNyBtdWx0aXBseSAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkcW11bDY0MSBtdWx0aXBseSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjQyIG11bHRpcGx5ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NDMgbXVsdGlwbHkgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY0NCBtdWx0aXBseSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjQ1IG11bHRpcGx5ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NDYgbXVsdGlwbHkgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY0NyBtdWx0aXBseSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjQ4IG11bHRpcGx5ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NDkgbXVsdGlwbHkgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY1MCBtdWx0aXBseSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjUxIG11bHRpcGx5IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NTIgbXVsdGlwbHkgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY1MyBtdWx0aXBseSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjU0IG11bHRpcGx5IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NTUgbXVsdGlwbHkgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY1NiBtdWx0aXBseSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNjU3IG11bHRpcGx5ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NTggbXVsdGlwbHkgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY1OSBtdWx0aXBseSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFtdWw2NjEgbXVsdGlwbHkgIE5hTjkgLUluZiAgIC0+ICBOYU45CitkcW11bDY2MiBtdWx0aXBseSAgTmFOOCAgOTk5ICAgLT4gIE5hTjgKK2RxbXVsNjYzIG11bHRpcGx5ICBOYU43MSBJbmYgICAtPiAgTmFONzEKK2RxbXVsNjY0IG11bHRpcGx5ICBOYU42ICBOYU41ICAtPiAgTmFONgorZHFtdWw2NjUgbXVsdGlwbHkgLUluZiAgIE5hTjQgIC0+ICBOYU40CitkcW11bDY2NiBtdWx0aXBseSAtOTk5ICAgTmFOMzMgLT4gIE5hTjMzCitkcW11bDY2NyBtdWx0aXBseSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKKworZHFtdWw2NzEgbXVsdGlwbHkgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzIgbXVsdGlwbHkgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzMgbXVsdGlwbHkgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzQgbXVsdGlwbHkgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzUgbXVsdGlwbHkgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzYgbXVsdGlwbHkgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzcgbXVsdGlwbHkgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzggbXVsdGlwbHkgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw2NzkgbXVsdGlwbHkgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgorCitkcW11bDY4MSBtdWx0aXBseSAtTmFOOSAtSW5mICAgLT4gLU5hTjkKK2RxbXVsNjgyIG11bHRpcGx5IC1OYU44ICA5OTkgICAtPiAtTmFOOAorZHFtdWw2ODMgbXVsdGlwbHkgLU5hTjcxIEluZiAgIC0+IC1OYU43MQorZHFtdWw2ODQgbXVsdGlwbHkgLU5hTjYgLU5hTjUgIC0+IC1OYU42CitkcW11bDY4NSBtdWx0aXBseSAtSW5mICAtTmFONCAgLT4gLU5hTjQKK2RxbXVsNjg2IG11bHRpcGx5IC05OTkgIC1OYU4zMyAtPiAtTmFOMzMKK2RxbXVsNjg3IG11bHRpcGx5ICBJbmYgIC1OYU4yICAtPiAtTmFOMgorCitkcW11bDY5MSBtdWx0aXBseSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5MiBtdWx0aXBseSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5MyBtdWx0aXBseSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5NCBtdWx0aXBseSAtc05hTjE2IC1zTmFOOTQgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5NSBtdWx0aXBseSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5NiBtdWx0aXBseSAtSW5mICAgIC1zTmFOOTIgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5NyBtdWx0aXBseSAgMDg4ICAgIC1zTmFOOTEgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5OCBtdWx0aXBseSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDY5OSBtdWx0aXBseSAtTmFOICAgIC1zTmFOODkgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK2RxbXVsNzAxIG11bHRpcGx5IC1OYU4gIC1JbmYgICAtPiAtTmFOCitkcW11bDcwMiBtdWx0aXBseSAtTmFOICAgOTk5ICAgLT4gLU5hTgorZHFtdWw3MDMgbXVsdGlwbHkgLU5hTiAgIEluZiAgIC0+IC1OYU4KK2RxbXVsNzA0IG11bHRpcGx5IC1OYU4gIC1OYU4gICAtPiAtTmFOCitkcW11bDcwNSBtdWx0aXBseSAtSW5mICAtTmFOMCAgLT4gLU5hTgorZHFtdWw3MDYgbXVsdGlwbHkgLTk5OSAgLU5hTiAgIC0+IC1OYU4KK2RxbXVsNzA3IG11bHRpcGx5ICBJbmYgIC1OYU4gICAtPiAtTmFOCisKK2RxbXVsNzExIG11bHRpcGx5IC1zTmFOICAgLUluZiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDcxMiBtdWx0aXBseSAtc05hTiAgIC0xMSAgICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw3MTMgbXVsdGlwbHkgLXNOYU4wMCAgTmFOICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNzE0IG11bHRpcGx5IC1zTmFOICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDcxNSBtdWx0aXBseSAtTmFOICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw3MTYgbXVsdGlwbHkgLUluZiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxbXVsNzE3IG11bHRpcGx5ICAwODggICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDcxOCBtdWx0aXBseSAgSW5mICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFtdWw3MTkgbXVsdGlwbHkgLU5hTiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzCistLSBzaWducworZHFtdWw3NTEgbXVsdGlwbHkgIDFlKzQyNzcgIDFlKzMzMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFtdWw3NTIgbXVsdGlwbHkgIDFlKzQyNzcgLTFlKzMzMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFtdWw3NTMgbXVsdGlwbHkgLTFlKzQyNzcgIDFlKzMzMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFtdWw3NTQgbXVsdGlwbHkgLTFlKzQyNzcgLTFlKzMzMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFtdWw3NTUgbXVsdGlwbHkgIDFlLTQyNzcgIDFlLTMzMTEgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw3NTYgbXVsdGlwbHkgIDFlLTQyNzcgLTFlLTMzMTEgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw3NTcgbXVsdGlwbHkgLTFlLTQyNzcgIDFlLTMzMTEgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw3NTggbXVsdGlwbHkgLTFlLTQyNzcgLTFlLTMzMTEgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykKK2RxbXVsNzYwIG11bHRpcGx5IDFlLTYwNjkgMWUtMTAxIC0+IDFFLTYxNzAgU3Vibm9ybWFsCitkcW11bDc2MSBtdWx0aXBseSAxZS02MDY5IDFlLTEwMiAtPiAxRS02MTcxIFN1Ym5vcm1hbAorZHFtdWw3NjIgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDMgLT4gMUUtNjE3MiBTdWJub3JtYWwKK2RxbXVsNzYzIG11bHRpcGx5IDFlLTYwNjkgMWUtMTA0IC0+IDFFLTYxNzMgU3Vibm9ybWFsCitkcW11bDc2NCBtdWx0aXBseSAxZS02MDY5IDFlLTEwNSAtPiAxRS02MTc0IFN1Ym5vcm1hbAorZHFtdWw3NjUgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDYgLT4gMUUtNjE3NSBTdWJub3JtYWwKK2RxbXVsNzY2IG11bHRpcGx5IDFlLTYwNjkgMWUtMTA3IC0+IDFFLTYxNzYgU3Vibm9ybWFsCitkcW11bDc2NyBtdWx0aXBseSAxZS02MDY5IDFlLTEwOCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RxbXVsNzY4IG11bHRpcGx5IDFlLTYwNjkgMWUtMTA5IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw3NjkgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMTAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCistLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddCitkcW11bDc3MCBtdWx0aXBseSAxZSs0MCAxZSs2MTAxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQxIENsYW1wZWQKK2RxbXVsNzcxIG11bHRpcGx5IDFlKzQwIDFlKzYxMDIgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQyICBDbGFtcGVkCitkcW11bDc3MiBtdWx0aXBseSAxZSs0MCAxZSs2MTAzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgIENsYW1wZWQKK2RxbXVsNzczIG11bHRpcGx5IDFlKzQwIDFlKzYxMDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgIENsYW1wZWQKK2RxbXVsNzc0IG11bHRpcGx5IDFlKzQwIDFlKzYxMDUgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcW11bDc3NSBtdWx0aXBseSAxZSs0MCAxZSs2MTA2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFtdWw3NzYgbXVsdGlwbHkgMWUrNDAgMWUrNjEwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsNzc3IG11bHRpcGx5IDFlKzQwIDFlKzYxMDggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcW11bDc3OCBtdWx0aXBseSAxZSs0MCAxZSs2MTA5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFtdWw3NzkgbXVsdGlwbHkgMWUrNDAgMWUrNjExMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworZHFtdWw4MDEgbXVsdGlwbHkgIDEuMDAwMEUtNjE3MiAgMSAgICAgLT4gMS4wMDAwRS02MTcyIFN1Ym5vcm1hbAorZHFtdWw4MDIgbXVsdGlwbHkgIDEuMDAwRS02MTcyICAgMWUtMSAgLT4gMS4wMDBFLTYxNzMgIFN1Ym5vcm1hbAorZHFtdWw4MDMgbXVsdGlwbHkgIDEuMDBFLTYxNzIgICAgMWUtMiAgLT4gMS4wMEUtNjE3NCAgIFN1Ym5vcm1hbAorZHFtdWw4MDQgbXVsdGlwbHkgIDEuMEUtNjE3MiAgICAgMWUtMyAgLT4gMS4wRS02MTc1ICAgIFN1Ym5vcm1hbAorZHFtdWw4MDUgbXVsdGlwbHkgIDEuMEUtNjE3MiAgICAgMWUtNCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxbXVsODA2IG11bHRpcGx5ICAxLjNFLTYxNzIgICAgIDFlLTQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgwNyBtdWx0aXBseSAgMS41RS02MTcyICAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MDggbXVsdGlwbHkgIDEuN0UtNjE3MiAgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODA5IG11bHRpcGx5ICAyLjNFLTYxNzIgICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgxMCBtdWx0aXBseSAgMi41RS02MTcyICAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MTEgbXVsdGlwbHkgIDIuN0UtNjE3MiAgICAgMWUtNCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODEyIG11bHRpcGx5ICAxLjQ5RS02MTcyICAgIDFlLTQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgxMyBtdWx0aXBseSAgMS41MEUtNjE3MiAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MTQgbXVsdGlwbHkgIDEuNTFFLTYxNzIgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODE1IG11bHRpcGx5ICAyLjQ5RS02MTcyICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgxNiBtdWx0aXBseSAgMi41MEUtNjE3MiAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MTcgbXVsdGlwbHkgIDIuNTFFLTYxNzIgICAgMWUtNCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHFtdWw4MTggbXVsdGlwbHkgIDFFLTYxNzIgICAgICAgMWUtNCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsCitkcW11bDgxOSBtdWx0aXBseSAgM0UtNjE3MiAgICAgICAxZS01ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcW11bDgyMCBtdWx0aXBseSAgNUUtNjE3MiAgICAgICAxZS01ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcW11bDgyMSBtdWx0aXBseSAgN0UtNjE3MiAgICAgICAxZS01ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MjIgbXVsdGlwbHkgIDlFLTYxNzIgICAgICAgMWUtNSAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODIzIG11bHRpcGx5ICA5LjlFLTYxNzIgICAgIDFlLTUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RxbXVsODI0IG11bHRpcGx5ICAxRS02MTcyICAgICAgLTFlLTQgIC0+IC0xRS02MTc2ICAgIFN1Ym5vcm1hbAorZHFtdWw4MjUgbXVsdGlwbHkgIDNFLTYxNzIgICAgICAtMWUtNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw4MjYgbXVsdGlwbHkgLTVFLTYxNzIgICAgICAgMWUtNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFtdWw4MjcgbXVsdGlwbHkgIDdFLTYxNzIgICAgICAtMWUtNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbXVsODI4IG11bHRpcGx5IC05RS02MTcyICAgICAgIDFlLTUgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW11bDgyOSBtdWx0aXBseSAgOS45RS02MTcyICAgIC0xZS01ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFtdWw4MzAgbXVsdGlwbHkgIDMuMEUtNjE3MiAgICAtMWUtNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkcW11bDgzMSBtdWx0aXBseSAgMS4wRS01OTc3ICAgICAxZS0yMDAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcW11bDgzMiBtdWx0aXBseSAgMS4wRS01OTc3ICAgICAxZS0xOTkgLT4gMUUtNjE3NiAgICBTdWJub3JtYWwgUm91bmRlZAorZHFtdWw4MzMgbXVsdGlwbHkgIDEuMEUtNTk3NyAgICAgMWUtMTk4IC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwKK2RxbXVsODM0IG11bHRpcGx5ICAyLjBFLTU5NzcgICAgIDJlLTE5OCAtPiA0LjBFLTYxNzUgICAgU3Vibm9ybWFsCitkcW11bDgzNSBtdWx0aXBseSAgNC4wRS01OTc3ICAgICA0ZS0xOTggLT4gMS42MEUtNjE3NCAgIFN1Ym5vcm1hbAorZHFtdWw4MzYgbXVsdGlwbHkgMTAuMEUtNTk3NyAgICAxMGUtMTk4IC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwKK2RxbXVsODM3IG11bHRpcGx5IDMwLjBFLTU5NzcgICAgMzBlLTE5OCAtPiA5LjAwMEUtNjE3MyAgU3Vibm9ybWFsCitkcW11bDgzOCBtdWx0aXBseSA0MC4wRS01OTgyICAgIDQwZS0xNjYgLT4gMS42MDAwRS02MTQ1IFN1Ym5vcm1hbAorZHFtdWw4MzkgbXVsdGlwbHkgNDAuMEUtNTk4MiAgICA0MGUtMTY1IC0+IDEuNjAwMEUtNjE0NCBTdWJub3JtYWwKK2RxbXVsODQwIG11bHRpcGx5IDQwLjBFLTU5ODIgICAgNDBlLTE2NCAtPiAxLjYwMDBFLTYxNDMKKworLS0gTG9uZyBvcGVyYW5kIG92ZXJmbG93IG1heSBiZSBhIGRpZmZlcmVudCBwYXRoCitkcW11bDg3MCBtdWx0aXBseSAxMDAgIDkuOTk5RSs2MTQzICAgICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkcW11bDg3MSBtdWx0aXBseSAxMDAgLTkuOTk5RSs2MTQzICAgICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkcW11bDg3MiBtdWx0aXBseSAgICAgIDkuOTk5RSs2MTQzIDEwMCAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitkcW11bDg3MyBtdWx0aXBseSAgICAgLTkuOTk5RSs2MTQzIDEwMCAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCisKKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzCitkcW11bDg4MSBtdWx0aXBseSAgMS4yMzQ3RS02MTMzIDEuMjM0N0UtNDAgIC0+ICAxLjUyNEUtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFtdWw4ODIgbXVsdGlwbHkgIDEuMjM0RS02MTMzIDEuMjM0RS00MCAgICAtPiAgMS41MjNFLTYxNzMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxbXVsODgzIG11bHRpcGx5ICAxLjIzRS02MTMzICAxLjIzRS00MCAgICAgLT4gIDEuNTEzRS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcW11bDg4NCBtdWx0aXBseSAgMS4yRS02MTMzICAgMS4yRS00MCAgICAgIC0+ICAxLjQ0RS02MTczICBTdWJub3JtYWwKK2RxbXVsODg1IG11bHRpcGx5ICAxLjJFLTYxMzMgICAxLjJFLTQxICAgICAgLT4gIDEuNDRFLTYxNzQgIFN1Ym5vcm1hbAorZHFtdWw4ODYgbXVsdGlwbHkgIDEuMkUtNjEzMyAgIDEuMkUtNDIgICAgICAtPiAgMS40RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RxbXVsODg3IG11bHRpcGx5ICAxLjJFLTYxMzMgICAxLjNFLTQyICAgICAgLT4gIDEuNkUtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitkcW11bDg4OCBtdWx0aXBseSAgMS4zRS02MTMzICAgMS4zRS00MiAgICAgIC0+ICAxLjdFLTYxNzUgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZHFtdWw4ODkgbXVsdGlwbHkgIDEuM0UtNjEzMyAgIDEuM0UtNDMgICAgICAtPiAgICAyRS02MTc2ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2RxbXVsODkwIG11bHRpcGx5ICAxLjNFLTYxMzQgICAxLjNFLTQzICAgICAgLT4gICAgMEUtNjE3NiAgIENsYW1wZWQgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKworZHFtdWw4OTEgbXVsdGlwbHkgIDEuMjM0NUUtMzkgICAgMS4yMzRFLTYxMzMgLT4gIDEuNTIzNEUtNjE3MiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFtdWw4OTIgbXVsdGlwbHkgIDEuMjM0NTZFLTM5ICAgMS4yMzRFLTYxMzMgLT4gIDEuNTIzNEUtNjE3MiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFtdWw4OTMgbXVsdGlwbHkgIDEuMjM0NUUtNDAgICAxLjIzNEUtNjEzMyAtPiAgMS41MjNFLTYxNzMgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitkcW11bDg5NCBtdWx0aXBseSAgMS4yMzQ1NkUtNDAgIDEuMjM0RS02MTMzIC0+ICAxLjUyM0UtNjE3MyAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2RxbXVsODk1IG11bHRpcGx5ICAxLjIzNDVFLTQxICAgMS4yMzRFLTYxMzMgLT4gIDEuNTJFLTYxNzQgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZHFtdWw4OTYgbXVsdGlwbHkgIDEuMjM0NTZFLTQxICAxLjIzNEUtNjEzMyAtPiAgMS41MkUtNjE3NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIE5vdyBleHBsb3JlIHRoZSBjYXNlIHdoZXJlIHdlIGdldCBhIG5vcm1hbCByZXN1bHQgd2l0aCBVbmRlcmZsb3cKKy0tIHByb3ZlIG9wZXJhbmRzIGFyZSBleGFjdAorZHFtdWw5MDYgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAxICAgICAgICAgICAgICAgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MworZHFtdWw5MDcgbXVsdGlwbHkgICAgICAgICAgICAgICAgICAgICAgIDEgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKKy0tIHRoZSBuZXh0IHJvdW5kcyB0byBObWluCitkcW11bDkwOCBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCisKKy0tIGh1Z2VzdAorZHFtdWw5MDkgbXVsdGlwbHkgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2NyBJbmV4YWN0IFJvdW5kZWQKKy0tIFZHIGNhc2UKK2RxbXVsOTEwIG11bHRpcGx5IDguODExMjUwMDAwMDAwMDEzNDk0MzZFLTE1NDggOC4wMDAwMDAwMDAwMDAwMDAwMDBFLTE1NTAgLT4gNy4wNDkwMDAwMDAwMDAwMTA3OTU0ODgwMDAwMDAwMDAwMDBFLTMwOTcgUm91bmRlZAorCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK3ByZWNpc2lvbjogICAzNAorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK2RxbXVsOTExICBtdWx0aXBseSAxMzBFLTIgIDEyMEUtMiAtPiAxLjU2MDAKK2RxbXVsOTEyICBtdWx0aXBseSAxMzBFLTIgIDEyRS0xICAtPiAxLjU2MAorZHFtdWw5MTMgIG11bHRpcGx5IDEzMEUtMiAgMUUwICAgIC0+IDEuMzAKK2RxbXVsOTE0ICBtdWx0aXBseSAxRTIgICAgIDFFNCAgICAtPiAxRSs2CisKKy0tIHBvd2VyLW9mLXRlbiBlZGdlIGNhc2VzCitkcW11bDEwMDEgbXVsdGlwbHkgIDEgICAgICAxMCAgICAgICAgICAgICAgIC0+IDEwCitkcW11bDEwMDIgbXVsdGlwbHkgIDEgICAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMAorZHFtdWwxMDAzIG11bHRpcGx5ICAxICAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwCitkcW11bDEwMDQgbXVsdGlwbHkgIDEgICAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwCitkcW11bDEwMDUgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMAorZHFtdWwxMDA2IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwCitkcW11bDEwMDcgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwCitkcW11bDEwMDggbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMAorZHFtdWwxMDA5IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwCitkcW11bDEwMTAgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwCitkcW11bDEwMTEgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMAorZHFtdWwxMDEyIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwCitkcW11bDEwMTMgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwCitkcW11bDEwMTQgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAgIC0+IDEwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDE1IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMTAxNiBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDE3IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDE4IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwMTkgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDIwIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMTAyMSBtdWx0aXBseSAgMTAgICAgIDEgICAgICAgICAgICAgICAgLT4gMTAKK2RxbXVsMTAyMiBtdWx0aXBseSAgMTAgICAgIDEwICAgICAgICAgICAgICAgLT4gMTAwCitkcW11bDEwMjMgbXVsdGlwbHkgIDEwICAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAKK2RxbXVsMTAyNCBtdWx0aXBseSAgMTAgICAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAKK2RxbXVsMTAyNSBtdWx0aXBseSAgMTAgICAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwCitkcW11bDEwMjYgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAKK2RxbXVsMTAyNyBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAKK2RxbXVsMTAyOCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwCitkcW11bDEwMjkgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAKK2RxbXVsMTAzMCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAKK2RxbXVsMTAzMSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwCitkcW11bDEwMzIgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAKK2RxbXVsMTAzMyBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDAKK2RxbXVsMTAzNCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwICAgLT4gMTAwMDAwMDAwMDAwMDAwCitkcW11bDEwMzUgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAgIC0+IDEwMDAwMDAwMDAwMDAwMDAKKworZHFtdWwxMDM2IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTAzNyBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDM4IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTAzOSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA0MCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMTA0MSBtdWx0aXBseSAgMTAwICAgIDAuMSAgICAgICAgICAgICAgLT4gMTAuMAorZHFtdWwxMDQyIG11bHRpcGx5ICAxMDAgICAgMSAgICAgICAgICAgICAgICAtPiAxMDAKK2RxbXVsMTA0MyBtdWx0aXBseSAgMTAwICAgIDEwICAgICAgICAgICAgICAgLT4gMTAwMAorZHFtdWwxMDQ0IG11bHRpcGx5ICAxMDAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwMAorZHFtdWwxMDQ1IG11bHRpcGx5ICAxMDAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDAKK2RxbXVsMTA0NiBtdWx0aXBseSAgMTAwICAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwMAorZHFtdWwxMDQ3IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwMAorZHFtdWwxMDQ4IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDAKK2RxbXVsMTA0OSBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwMAorZHFtdWwxMDUwIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMAorZHFtdWwxMDUxIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDAKK2RxbXVsMTA1MiBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMAorZHFtdWwxMDUzIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMAorZHFtdWwxMDU0IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA1NSBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAwICAgLT4gMTAwMDAwMDAwMDAwMDAwMAorCitkcW11bDEwNTYgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwNTcgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDU4IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDU5IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwNjAgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMTA2MSBtdWx0aXBseSAgMTAwMCAgIDAuMDEgICAgICAgICAgICAgLT4gMTAuMDAKK2RxbXVsMTA2MiBtdWx0aXBseSAgMTAwMCAgIDAuMSAgICAgICAgICAgICAgLT4gMTAwLjAKK2RxbXVsMTA2MyBtdWx0aXBseSAgMTAwMCAgIDEgICAgICAgICAgICAgICAgLT4gMTAwMAorZHFtdWwxMDY0IG11bHRpcGx5ICAxMDAwICAgMTAgICAgICAgICAgICAgICAtPiAxMDAwMAorZHFtdWwxMDY1IG11bHRpcGx5ICAxMDAwICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwMDAKK2RxbXVsMTA2NiBtdWx0aXBseSAgMTAwMCAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwMAorZHFtdWwxMDY3IG11bHRpcGx5ICAxMDAwICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwMAorZHFtdWwxMDY4IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwMDAKK2RxbXVsMTA2OSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwMAorZHFtdWwxMDcwIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwMAorZHFtdWwxMDcxIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMDAKK2RxbXVsMTA3MiBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMAorZHFtdWwxMDczIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwMAorZHFtdWwxMDc0IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA3NSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMAorCitkcW11bDEwNzYgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA3NyBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA3OCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDc5IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA4MCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCitkcW11bDEwODEgbXVsdGlwbHkgIDEwMDAwICAwLjAwMSAgICAgICAgICAgIC0+IDEwLjAwMAorZHFtdWwxMDgyIG11bHRpcGx5ICAxMDAwMCAgMC4wMSAgICAgICAgICAgICAtPiAxMDAuMDAKK2RxbXVsMTA4MyBtdWx0aXBseSAgMTAwMDAgIDAuMSAgICAgICAgICAgICAgLT4gMTAwMC4wCitkcW11bDEwODQgbXVsdGlwbHkgIDEwMDAwICAxICAgICAgICAgICAgICAgIC0+IDEwMDAwCitkcW11bDEwODUgbXVsdGlwbHkgIDEwMDAwICAxMCAgICAgICAgICAgICAgIC0+IDEwMDAwMAorZHFtdWwxMDg2IG11bHRpcGx5ICAxMDAwMCAgMTAwICAgICAgICAgICAgICAtPiAxMDAwMDAwCitkcW11bDEwODcgbXVsdGlwbHkgIDEwMDAwICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwMDAwCitkcW11bDEwODggbXVsdGlwbHkgIDEwMDAwICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDAwMAorZHFtdWwxMDg5IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwMDAwCitkcW11bDEwOTAgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwMDAwCitkcW11bDEwOTEgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDAwMAorZHFtdWwxMDkyIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMDAwCitkcW11bDEwOTMgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMDAwCitkcW11bDEwOTQgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMAorZHFtdWwxMDk1IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMDAwCisKK2RxbXVsMTA5NiBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwOTcgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbXVsMTA5OCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDEwOTkgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW11bDExMDAgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCitkcW11bDExMDcgbXVsdGlwbHkgIDEwMDAwICAgOTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTAwMDAKK2RxbXVsMTEwOCBtdWx0aXBseSAgMTAwMDAgICA5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5MDAwMAorCistLSBOdWxsIHRlc3RzCitkcW11bDk5OTAgbXVsdGlwbHkgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW11bDk5OTEgbXVsdGlwbHkgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0TWludXMuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0TWludXMuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTc3YjU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRNaW51cy5kZWNUZXN0CkBAIC0wLDAgKzEsMTI2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxTmV4dE1pbnVzLmRlY1Rlc3QgLS0gZGVjUXVhZCBuZXh0IHRoYXQgaXMgbGVzcyBbNzU0ciBuZXh0ZG93bl0gICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RxbmV4dG0wMDEgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQKK2RxbmV4dG0wMDIgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUKK2RxbmV4dG0wMDMgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYKK2RxbmV4dG0wMDQgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKK2RxbmV4dG0wMDUgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKK2RxbmV4dG0wMDYgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dG0wMDcgbmV4dG1pbnVzICAxLjAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0bTAwOCBuZXh0bWludXMgIDEgICAgICAgICAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHRtMDA5IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbmV4dG0wMTAgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0bTAxMSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCitkcW5leHRtMDEyIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKK2RxbmV4dG0wMTMgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorZHFuZXh0bTAxNCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CitkcW5leHRtMDE1IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKK2RxbmV4dG0wMTYgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZHFuZXh0bTAxNyBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4CitkcW5leHRtMDE4IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKK2RxbmV4dG0wMTkgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorZHFuZXh0bTAyMCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCisKK2RxbmV4dG0wMjEgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYKK2RxbmV4dG0wMjIgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKK2RxbmV4dG0wMjMgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKK2RxbmV4dG0wMjQgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dG0wMjUgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFuZXh0bTAyNiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHRtMDI3IG5leHRtaW51cyAtMS4wICAgICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0bTAyOCBuZXh0bWludXMgLTEgICAgICAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dG0wMjkgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorZHFuZXh0bTAzMCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCitkcW5leHRtMDMxIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKK2RxbmV4dG0wMzIgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorZHFuZXh0bTAzMyBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2CitkcW5leHRtMDM0IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RxbmV4dG0wMzUgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorZHFuZXh0bTAzNiBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5CitkcW5leHRtMDM3IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKK2RxbmV4dG0wMzggbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorZHFuZXh0bTAzOSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCisKKy0tIHVsdHJhLXRpbnkgaW5wdXRzCitkcW5leHRtMDYyIG5leHRtaW51cyAgMUUtNjE3NiAgICAgICAgIC0+ICAgMEUtNjE3NgorZHFuZXh0bTA2NSBuZXh0bWludXMgLTFFLTYxNzYgICAgICAgICAtPiAgLTJFLTYxNzYKKworLS0gWmVyb3MKK2RxbmV4dG0xMDAgbmV4dG1pbnVzIC0wICAgICAgICAgICAtPiAtMUUtNjE3NgorZHFuZXh0bTEwMSBuZXh0bWludXMgIDAgICAgICAgICAgIC0+IC0xRS02MTc2CitkcW5leHRtMTAyIG5leHRtaW51cyAgMC4wMCAgICAgICAgLT4gLTFFLTYxNzYKK2RxbmV4dG0xMDMgbmV4dG1pbnVzIC0wLjAwICAgICAgICAtPiAtMUUtNjE3NgorZHFuZXh0bTEwNCBuZXh0bWludXMgIDBFLTMwMCAgICAgIC0+IC0xRS02MTc2CitkcW5leHRtMTA1IG5leHRtaW51cyAgMEUrMzAwICAgICAgLT4gLTFFLTYxNzYKK2RxbmV4dG0xMDYgbmV4dG1pbnVzICAwRSszMDAwMCAgICAtPiAtMUUtNjE3NgorZHFuZXh0bTEwNyBuZXh0bWludXMgLTBFKzMwMDAwICAgIC0+IC0xRS02MTc2CisKKy0tIHNwZWNpYWxzCitkcW5leHRtMTUwIG5leHRtaW51cyAgIEluZiAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dG0xNTEgbmV4dG1pbnVzICAtSW5mICAgIC0+IC1JbmZpbml0eQorZHFuZXh0bTE1MiBuZXh0bWludXMgICBOYU4gICAgLT4gIE5hTgorZHFuZXh0bTE1MyBuZXh0bWludXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHRtMTU0IG5leHRtaW51cyAgIE5hTjc3ICAtPiAgTmFONzcKK2RxbmV4dG0xNTUgbmV4dG1pbnVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0bTE1NiBuZXh0bWludXMgIC1OYU4gICAgLT4gLU5hTgorZHFuZXh0bTE1NyBuZXh0bWludXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHRtMTU4IG5leHRtaW51cyAgLU5hTjc3ICAtPiAtTmFONzcKK2RxbmV4dG0xNTkgbmV4dG1pbnVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworZHFuZXh0bTE3MCBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQKK2RxbmV4dG0xNzEgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0CitkcW5leHRtMTcyIG5leHRtaW51cyAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0CitkcW5leHRtMTczIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0CitkcW5leHRtMTc0IG5leHRtaW51cyAgOUUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiA4RS02MTc2CitkcW5leHRtMTc1IG5leHRtaW51cyAgOS45RS02MTc1ICAgICAgICAgICAgICAgICAtPiA5LjhFLTYxNzUKK2RxbmV4dG0xNzYgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ3ICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDcKK2RxbmV4dG0xNzcgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQKK2RxbmV4dG0xNzggbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQKK2RxbmV4dG0xNzkgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTZFLTYxNDQKK2RxbmV4dG0xODAgbmV4dG1pbnVzICAwRS02MTc2ICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2CitkcW5leHRtMTgxIG5leHRtaW51cyAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiAwRS02MTc2CitkcW5leHRtMTgyIG5leHRtaW51cyAgMkUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiAxRS02MTc2CisKK2RxbmV4dG0xODMgbmV4dG1pbnVzICAtMEUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2CitkcW5leHRtMTg0IG5leHRtaW51cyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMkUtNjE3NgorZHFuZXh0bTE4NSBuZXh0bWludXMgIC0yRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTNFLTYxNzYKK2RxbmV4dG0xODYgbmV4dG1pbnVzICAtMTBFLTYxNzYgICAgICAgICAgICAgICAgIC0+IC0xLjFFLTYxNzUKK2RxbmV4dG0xODcgbmV4dG1pbnVzICAtMTAwRS02MTc2ICAgICAgICAgICAgICAgIC0+IC0xLjAxRS02MTc0CitkcW5leHRtMTg4IG5leHRtaW51cyAgLTEwMDAwMEUtNjE3NiAgICAgICAgICAgICAtPiAtMS4wMDAwMUUtNjE3MQorZHFuZXh0bTE4OSBuZXh0bWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHRtMTkwIG5leHRtaW51cyAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dG0xOTEgbmV4dG1pbnVzICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0bTE5MiBuZXh0bWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHRtMTkzIG5leHRtaW51cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtSW5maW5pdHkKKworLS0gTnVsbCB0ZXN0cworZHFuZXh0bTkwMCBuZXh0bWludXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0UGx1cy5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRQbHVzLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4ZTljZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0UGx1cy5kZWNUZXN0CkBAIC0wLDAgKzEsMTI0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxTmV4dFBsdXMuZGVjVGVzdCAtLSBkZWNRdWFkIG5leHQgdGhhdCBpcyBncmVhdGVyIFs3NTRyIG5leHR1cF0gICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RxbmV4dHAwMDEgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgorZHFuZXh0cDAwMiBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3CitkcW5leHRwMDAzIG5leHRwbHVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKK2RxbmV4dHAwMDQgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0cDAwNSBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbmV4dHAwMDYgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHRwMDA3IG5leHRwbHVzICAxLjAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHRwMDA4IG5leHRwbHVzICAxICAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHRwMDA5IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorZHFuZXh0cDAxMCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKK2RxbmV4dHAwMTEgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0CitkcW5leHRwMDEyIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorZHFuZXh0cDAxMyBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKK2RxbmV4dHAwMTQgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkcW5leHRwMDE1IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorZHFuZXh0cDAxNiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKK2RxbmV4dHAwMTcgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCitkcW5leHRwMDE4IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorZHFuZXh0cDAxOSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKworZHFuZXh0cDAyMSBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0CitkcW5leHRwMDIyIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUKK2RxbmV4dHAwMjMgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgorZHFuZXh0cDAyNCBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3CitkcW5leHRwMDI1IG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKK2RxbmV4dHAwMjYgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0cDAyNyBuZXh0cGx1cyAtMS4wICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHAwMjggbmV4dHBsdXMgLTEgICAgICAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHRwMDI5IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFuZXh0cDAzMCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHAwMzEgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCitkcW5leHRwMDMyIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworZHFuZXh0cDAzMyBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKK2RxbmV4dHAwMzQgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CitkcW5leHRwMDM1IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorZHFuZXh0cDAzNiBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RxbmV4dHAwMzcgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4CitkcW5leHRwMDM4IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorZHFuZXh0cDAzOSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKK2RxbmV4dHAwNDAgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCisKKy0tIFplcm9zCitkcW5leHRwMTAwIG5leHRwbHVzICAwICAgICAgICAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDEwMSBuZXh0cGx1cyAgMC4wMCAgICAgICAgLT4gIDFFLTYxNzYKK2RxbmV4dHAxMDIgbmV4dHBsdXMgIDBFLTMwMCAgICAgIC0+ICAxRS02MTc2CitkcW5leHRwMTAzIG5leHRwbHVzICAwRSszMDAgICAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDEwNCBuZXh0cGx1cyAgMEUrMzAwMDAgICAgLT4gIDFFLTYxNzYKK2RxbmV4dHAxMDUgbmV4dHBsdXMgLTAgICAgICAgICAgIC0+ICAxRS02MTc2CitkcW5leHRwMTA2IG5leHRwbHVzIC0wLjAwICAgICAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDEwNyBuZXh0cGx1cyAtMEUtMzAwICAgICAgLT4gIDFFLTYxNzYKK2RxbmV4dHAxMDggbmV4dHBsdXMgLTBFKzMwMCAgICAgIC0+ICAxRS02MTc2CitkcW5leHRwMTA5IG5leHRwbHVzIC0wRSszMDAwMCAgICAtPiAgMUUtNjE3NgorCistLSBzcGVjaWFscworZHFuZXh0cDE1MCBuZXh0cGx1cyAgIEluZiAgICAtPiAgSW5maW5pdHkKK2RxbmV4dHAxNTEgbmV4dHBsdXMgIC1JbmYgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHRwMTUyIG5leHRwbHVzICAgTmFOICAgIC0+ICBOYU4KK2RxbmV4dHAxNTMgbmV4dHBsdXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHRwMTU0IG5leHRwbHVzICAgTmFONzcgIC0+ICBOYU43NworZHFuZXh0cDE1NSBuZXh0cGx1cyAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHAxNTYgbmV4dHBsdXMgIC1OYU4gICAgLT4gLU5hTgorZHFuZXh0cDE1NyBuZXh0cGx1cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHAxNTggbmV4dHBsdXMgIC1OYU43NyAgLT4gLU5hTjc3CitkcW5leHRwMTU5IG5leHRwbHVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworZHFuZXh0cDE3MCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQKK2RxbmV4dHAxNzEgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0CitkcW5leHRwMTcyIG5leHRwbHVzICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0CitkcW5leHRwMTczIG5leHRwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0CitkcW5leHRwMTc0IG5leHRwbHVzICAtOUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC04RS02MTc2CitkcW5leHRwMTc1IG5leHRwbHVzICAtOS45RS02MTc1ICAgICAgICAgICAgICAgIC0+IC05LjhFLTYxNzUKK2RxbmV4dHAxNzYgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ3ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDcKK2RxbmV4dHAxNzcgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQKK2RxbmV4dHAxNzggbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQKK2RxbmV4dHAxNzkgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTZFLTYxNDQKK2RxbmV4dHAxODAgbmV4dHBsdXMgIC0wRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYKK2RxbmV4dHAxODEgbmV4dHBsdXMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTBFLTYxNzYKK2RxbmV4dHAxODIgbmV4dHBsdXMgIC0yRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYKKworZHFuZXh0cDE4MyBuZXh0cGx1cyAgIDBFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NgorZHFuZXh0cDE4NCBuZXh0cGx1cyAgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAgMkUtNjE3NgorZHFuZXh0cDE4NSBuZXh0cGx1cyAgIDJFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAgM0UtNjE3NgorZHFuZXh0cDE4NiBuZXh0cGx1cyAgIDEwRS02MTc2ICAgICAgICAgICAgICAgICAtPiAgMS4xRS02MTc1CitkcW5leHRwMTg3IG5leHRwbHVzICAgMTAwRS02MTc2ICAgICAgICAgICAgICAgIC0+ICAxLjAxRS02MTc0CitkcW5leHRwMTg4IG5leHRwbHVzICAgMTAwMDAwRS02MTc2ICAgICAgICAgICAgIC0+ICAxLjAwMDAxRS02MTcxCitkcW5leHRwMTg5IG5leHRwbHVzICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0cDE5MCBuZXh0cGx1cyAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dHAxOTEgbmV4dHBsdXMgICAxRS02MTQzICAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHRwMTkyIG5leHRwbHVzICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0cDE5MyBuZXh0cGx1cyAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgSW5maW5pdHkKKworLS0gTnVsbCB0ZXN0cworZHFuZXh0cDkwMCBuZXh0cGx1cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRUb3dhcmQuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0VG93YXJkLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA3ZTdmNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0VG93YXJkLmRlY1Rlc3QKQEAgLTAsMCArMSwzNzUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFOZXh0VG93YXJkLmRlY1Rlc3QgLS0gZGVjUXVhZCBuZXh0IHRvd2FyZCByaHMgWzc1NHIgbmV4dGFmdGVyXSAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgorZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworCistLSBTYW5pdHkgY2hlY2sgd2l0aCBhIHNjYXR0ZXJpbmcgb2YgbnVtZXJpY3MKK2RxbmV4dHQwMDEgbmV4dHRvd2FyZCAgIDEwICAgIDEwICAgLT4gIDEwCitkcW5leHR0MDAyIG5leHR0b3dhcmQgIC0xMCAgIC0xMCAgIC0+IC0xMAorZHFuZXh0dDAwMyBuZXh0dG93YXJkICAgMSAgICAgMTAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQwMDQgbmV4dHRvd2FyZCAgIDEgICAgLTEwICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDAwNSBuZXh0dG93YXJkICAtMSAgICAgMTAgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MDA2IG5leHR0b3dhcmQgIC0xICAgIC0xMCAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDAwNyBuZXh0dG93YXJkICAgMCAgICAgMTAgICAtPiAgMUUtNjE3NiAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDAwOCBuZXh0dG93YXJkICAgMCAgICAtMTAgICAtPiAtMUUtNjE3NiAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDAwOSBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgK0luZmluaXR5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQwMTAgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC1JbmZpbml0eSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MDExIG5leHR0b3dhcmQgICAgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIDEwICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbmV4dHQwMTIgbmV4dHRvd2FyZCAgIDEwICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDAxMyBuZXh0dG93YXJkICAgICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0xMCAgLT4gLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW5leHR0MDE0IG5leHR0b3dhcmQgIC0xMCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQwMTUgbmV4dHRvd2FyZCAgICAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgMTAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDAxNiBuZXh0dG93YXJkICAgMTAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ICAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MDE3IG5leHR0b3dhcmQgICAgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggLTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQwMTggbmV4dHRvd2FyZCAgLTEwIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorCistLS0tLS0tIGxocz1yaHMKKy0tIGZpbml0ZXMKK2RxbmV4dHQxMDEgbmV4dHRvd2FyZCAgICAgICAgICA3ICAgICAgIDcgLT4gIDcKK2RxbmV4dHQxMDIgbmV4dHRvd2FyZCAgICAgICAgIC03ICAgICAgLTcgLT4gLTcKK2RxbmV4dHQxMDMgbmV4dHRvd2FyZCAgICAgICAgIDc1ICAgICAgNzUgLT4gIDc1CitkcW5leHR0MTA0IG5leHR0b3dhcmQgICAgICAgIC03NSAgICAgLTc1IC0+IC03NQorZHFuZXh0dDEwNSBuZXh0dG93YXJkICAgICAgIDcuNTAgICAgIDcuNSAtPiAgNy41MAorZHFuZXh0dDEwNiBuZXh0dG93YXJkICAgICAgLTcuNTAgICAtNy41MCAtPiAtNy41MAorZHFuZXh0dDEwNyBuZXh0dG93YXJkICAgICAgIDcuNTAwIDcuNTAwMCAtPiAgNy41MDAKK2RxbmV4dHQxMDggbmV4dHRvd2FyZCAgICAgIC03LjUwMCAgIC03LjUgLT4gLTcuNTAwCisKKy0tIHplcm9zCitkcW5leHR0MTExIG5leHR0b3dhcmQgICAgICAgICAgMCAgICAgICAwIC0+ICAwCitkcW5leHR0MTEyIG5leHR0b3dhcmQgICAgICAgICAtMCAgICAgIC0wIC0+IC0wCitkcW5leHR0MTEzIG5leHR0b3dhcmQgICAgICAgMEUrNCAgICAgICAwIC0+ICAwRSs0CitkcW5leHR0MTE0IG5leHR0b3dhcmQgICAgICAtMEUrNCAgICAgIC0wIC0+IC0wRSs0CitkcW5leHR0MTE1IG5leHR0b3dhcmQgICAgIDAuMDAwMDAwMDAwMDAgICAwLjAwMDAwMDAwMDAwMCAtPiAgMEUtMTEKK2RxbmV4dHQxMTYgbmV4dHRvd2FyZCAgICAtMC4wMDAwMDAwMDAwMCAgLTAuMDAgICAgICAgICAgIC0+IC0wRS0xMQorZHFuZXh0dDExNyBuZXh0dG93YXJkICAgICAgMEUtMTQxICAgICAgMCAtPiAgMEUtMTQxCitkcW5leHR0MTE4IG5leHR0b3dhcmQgICAgIC0wRS0xNDEgICAtMDAwIC0+IC0wRS0xNDEKKworLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKK2RxbmV4dHQxMjEgbmV4dHRvd2FyZCAgIDI2ODI2ODI2OCAgICAyNjgyNjgyNjggLT4gICAyNjgyNjgyNjgKK2RxbmV4dHQxMjIgbmV4dHRvd2FyZCAgLTI2ODI2ODI2OCAgIC0yNjgyNjgyNjggLT4gIC0yNjgyNjgyNjgKK2RxbmV4dHQxMjMgbmV4dHRvd2FyZCAgIDEzNDEzNDEzNCAgICAxMzQxMzQxMzQgLT4gICAxMzQxMzQxMzQKK2RxbmV4dHQxMjQgbmV4dHRvd2FyZCAgLTEzNDEzNDEzNCAgIC0xMzQxMzQxMzQgLT4gIC0xMzQxMzQxMzQKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2RxbmV4dHQxMzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDEzMiBuZXh0dG93YXJkICAxRS02MTQzICAgICAgICAgICAxRS02MTQzICAgICAgICAgICAgLT4gICAxRS02MTQzCitkcW5leHR0MTMzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxbmV4dHQxMzQgbmV4dHRvd2FyZCAgMUUtNjE3NiAgICAgICAgICAgMUUtNjE3NiAgICAgICAgICAgIC0+ICAgMUUtNjE3NgorCitkcW5leHR0MTM1IG5leHR0b3dhcmQgIC0xRS02MTc2ICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgICAtPiAgLTFFLTYxNzYKK2RxbmV4dHQxMzYgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFuZXh0dDEzNyBuZXh0dG93YXJkICAtMUUtNjE0MyAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAgLT4gIC0xRS02MTQzCitkcW5leHR0MTM4IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKKworLS0tLS0tLSBsaHM8cmhzCitkcW5leHR0MjAxIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgorZHFuZXh0dDIwMiBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKK2RxbmV4dHQyMDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4CitkcW5leHR0MjA0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDIwNSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFuZXh0dDIwNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDIwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0MjA4IG5leHR0b3dhcmQgIDEgICAgICAgICAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQyMDkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKK2RxbmV4dHQyMTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKK2RxbmV4dHQyMTEgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKK2RxbmV4dHQyMTIgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKK2RxbmV4dHQyMTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKK2RxbmV4dHQyMTQgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RxbmV4dHQyMTUgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKK2RxbmV4dHQyMTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKK2RxbmV4dHQyMTcgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKK2RxbmV4dHQyMTggbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKK2RxbmV4dHQyMTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKworZHFuZXh0dDIyMSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQKK2RxbmV4dHQyMjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IEluZmluaXR5IC0+IC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUKK2RxbmV4dHQyMjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2CitkcW5leHR0MjI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NworZHFuZXh0dDIyNSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKK2RxbmV4dHQyMjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MjI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MjI4IG5leHR0b3dhcmQgLTEgICAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0MjI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW5leHR0MjMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0MjMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCitkcW5leHR0MjMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCitkcW5leHR0MjMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0CitkcW5leHR0MjM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CitkcW5leHR0MjM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2CitkcW5leHR0MjM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3CitkcW5leHR0MjM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4CitkcW5leHR0MjM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5CitkcW5leHR0MjM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCitkcW5leHR0MjQwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCisKKy0tIFplcm9zCitkcW5leHR0MzAwIG5leHR0b3dhcmQgIDAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDMwMSBuZXh0dG93YXJkICAwLjAwICAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzMDIgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzAzIG5leHR0b3dhcmQgIDBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDMwNCBuZXh0dG93YXJkICAwRSszMDAwMCAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzMDUgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzA2IG5leHR0b3dhcmQgLTAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDMwNyBuZXh0dG93YXJkIC0wRS0zMDAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzMDggbmV4dHRvd2FyZCAtMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzA5IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBzcGVjaWFscworZHFuZXh0dDM1MCBuZXh0dG93YXJkICAgSW5mICAgIEluZmluaXR5IC0+ICBJbmZpbml0eQorZHFuZXh0dDM1MSBuZXh0dG93YXJkICAtSW5mICAgIEluZmluaXR5IC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDM1MiBuZXh0dG93YXJkICAgTmFOICAgIEluZmluaXR5IC0+ICBOYU4KK2RxbmV4dHQzNTMgbmV4dHRvd2FyZCAgc05hTiAgICBJbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQzNTQgbmV4dHRvd2FyZCAgIE5hTjc3ICBJbmZpbml0eSAtPiAgTmFONzcKK2RxbmV4dHQzNTUgbmV4dHRvd2FyZCAgc05hTjg4ICBJbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQzNTYgbmV4dHRvd2FyZCAgLU5hTiAgICBJbmZpbml0eSAtPiAtTmFOCitkcW5leHR0MzU3IG5leHR0b3dhcmQgLXNOYU4gICAgSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0MzU4IG5leHR0b3dhcmQgIC1OYU43NyAgSW5maW5pdHkgLT4gLU5hTjc3CitkcW5leHR0MzU5IG5leHR0b3dhcmQgLXNOYU44OCAgSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCitkcW5leHR0MzcwIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NAorZHFuZXh0dDM3MSBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFKzYxNDQKK2RxbmV4dHQzNzIgbmV4dHRvd2FyZCAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0MzczIG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM3NCBuZXh0dG93YXJkICAtOUUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOEUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzNzUgbmV4dHRvd2FyZCAgLTkuOUUtNjE3NSAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTkuOEUtNjE3NSAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzc2IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ3ICAgICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ3ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM3NyBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzNzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzc5IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2RS02MTQ0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM4MCBuZXh0dG93YXJkICAtMEUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzODEgbmV4dHRvd2FyZCAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFuZXh0dDM4MiBuZXh0dG93YXJkICAtMkUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtMUUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHFuZXh0dDM4MyBuZXh0dG93YXJkICAgMEUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzODQgbmV4dHRvd2FyZCAgIDFFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDJFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzg1IG5leHR0b3dhcmQgICAyRS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAzRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM4NiBuZXh0dG93YXJkICAgMTBFLTYxNzYgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4xRS02MTc1ICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQzODcgbmV4dHRvd2FyZCAgIDEwMEUtNjE3NiAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDFFLTYxNzQgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Mzg4IG5leHR0b3dhcmQgICAxMDAwMDBFLTYxNzYgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAxRS02MTcxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDM4OSBuZXh0dG93YXJkICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIEluZmluaXR5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dHQzOTAgbmV4dHRvd2FyZCAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHR0MzkxIG5leHR0b3dhcmQgICAxRS02MTQzICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0dDM5MiBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFKzYxNDQgIEluZmluaXR5ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQKK2RxbmV4dHQzOTMgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICBJbmZpbml0eSAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0Mzk0IG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgSW5maW5pdHkgIC0+ICBJbmZpbml0eSAgICAgICAgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLS0tLS0tIGxocz5yaHMKK2RxbmV4dHQ0MDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQKK2RxbmV4dHQ0MDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUKK2RxbmV4dHQ0MDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYKK2RxbmV4dHQ0MDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKK2RxbmV4dHQ0MDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKK2RxbmV4dHQ0MDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQ0MDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQorZHFuZXh0dDQwOCBuZXh0dG93YXJkICAxICAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0NDA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxbmV4dHQ0MTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDQxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCitkcW5leHR0NDEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKK2RxbmV4dHQ0MTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorZHFuZXh0dDQxNCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1CitkcW5leHR0NDE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKK2RxbmV4dHQ0MTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworZHFuZXh0dDQxNyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4CitkcW5leHR0NDE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKK2RxbmV4dHQ0MTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorZHFuZXh0dDQyMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCisKK2RxbmV4dHQ0MjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYKK2RxbmV4dHQ0MjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKK2RxbmV4dHQ0MjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKK2RxbmV4dHQ0MjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQ0MjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFuZXh0dDQyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0NDI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDQyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQ0MjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorZHFuZXh0dDQzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCitkcW5leHR0NDMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKK2RxbmV4dHQ0MzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorZHFuZXh0dDQzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2CitkcW5leHR0NDM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKK2RxbmV4dHQ0MzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorZHFuZXh0dDQzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5CitkcW5leHR0NDM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKK2RxbmV4dHQ0MzggbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorZHFuZXh0dDQzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCisKKy0tIFplcm9zCitkcW5leHR0NTAwIG5leHR0b3dhcmQgLTAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDUwMSBuZXh0dG93YXJkICAwICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ1MDIgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0NTAzIG5leHR0b3dhcmQgLTAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDUwNCBuZXh0dG93YXJkICAwRS0zMDAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ1MDUgbmV4dHRvd2FyZCAgMEUrMzAwICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0NTA2IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDUwNyBuZXh0dG93YXJkIC0wRSszMDAwMCAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3BlY2lhbHMKK2RxbmV4dHQ1NTAgbmV4dHRvd2FyZCAgIEluZiAgICAgLUluZmluaXR5IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDU1MSBuZXh0dG93YXJkICAtSW5mICAgICAtSW5maW5pdHkgLT4gLUluZmluaXR5CitkcW5leHR0NTUyIG5leHR0b3dhcmQgICBOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOCitkcW5leHR0NTUzIG5leHR0b3dhcmQgIHNOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ1NTQgbmV4dHRvd2FyZCAgIE5hTjc3ICAgLUluZmluaXR5IC0+ICBOYU43NworZHFuZXh0dDU1NSBuZXh0dG93YXJkICBzTmFOODggICAtSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0NTU2IG5leHR0b3dhcmQgIC1OYU4gICAgIC1JbmZpbml0eSAtPiAtTmFOCitkcW5leHR0NTU3IG5leHR0b3dhcmQgLXNOYU4gICAgIC1JbmZpbml0eSAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ1NTggbmV4dHRvd2FyZCAgLU5hTjc3ICAgLUluZmluaXR5IC0+IC1OYU43NworZHFuZXh0dDU1OSBuZXh0dG93YXJkIC1zTmFOODggICAtSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCitkcW5leHR0NjcwIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NAorZHFuZXh0dDY3MSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFKzYxNDQKK2RxbmV4dHQ2NzIgbmV4dHRvd2FyZCAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2NzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2NzQgbmV4dHRvd2FyZCAgOUUtNjE3NiAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDhFLTYxNzYgICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2NzUgbmV4dHRvd2FyZCAgOS45RS02MTc1ICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDkuOEUtNjE3NSAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2NzYgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NyAgICAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDcgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2NzcgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2NzggbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2NzkgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTZFLTYxNDQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2ODAgbmV4dHRvd2FyZCAgMEUtNjE3NiAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ2ODEgbmV4dHRvd2FyZCAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDBFLTYxNzYgICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFuZXh0dDY4MiBuZXh0dG93YXJkICAyRS02MTc2ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gMUUtNjE3NiAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAorCitkcW5leHR0NjgzIG5leHR0b3dhcmQgIC0wRS02MTc2ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMUUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njg0IG5leHR0b3dhcmQgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMkUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njg1IG5leHR0b3dhcmQgIC0yRS02MTc2ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtM0UtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njg2IG5leHR0b3dhcmQgIC0xMEUtNjE3NiAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4xRS02MTc1ICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njg3IG5leHR0b3dhcmQgIC0xMDBFLTYxNzYgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4wMUUtNjE3NCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njg4IG5leHR0b3dhcmQgIC0xMDAwMDBFLTYxNzYgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMUUtNjE3MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0Njg5IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2RxbmV4dHQ2OTAgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworZHFuZXh0dDY5MSBuZXh0dG93YXJkICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitkcW5leHR0NjkyIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgLUluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ2OTMgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtSW5maW5pdHkgIC0+IC1JbmZpbml0eSAgICAgICAgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLS0tLS0tIFNwZWNpYWxzCitkcW5leHR0NzgwIG5leHR0b3dhcmQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZHFuZXh0dDc4MSBuZXh0dG93YXJkIC1JbmYgIC0xMDAwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ3ODIgbmV4dHRvd2FyZCAtSW5mICAtMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0NzgzIG5leHR0b3dhcmQgLUluZiAgLTAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDc4NCBuZXh0dG93YXJkIC1JbmYgICAwICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ3ODUgbmV4dHRvd2FyZCAtSW5mICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0Nzg2IG5leHR0b3dhcmQgLUluZiAgIDEwMDAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDc4NyBuZXh0dG93YXJkIC0xMDAwIC1JbmYgICAtPiAtMTAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxbmV4dHQ3ODggbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitkcW5leHR0Nzg5IG5leHR0b3dhcmQgLTEgICAgLUluZiAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDc5MCBuZXh0dG93YXJkIC0wICAgIC1JbmYgICAtPiAtMUUtNjE3NiAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ3OTEgbmV4dHRvd2FyZCAgMCAgICAtSW5mICAgLT4gLTFFLTYxNzYgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkcW5leHR0NzkyIG5leHR0b3dhcmQgIDEgICAgLUluZiAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2RxbmV4dHQ3OTMgbmV4dHRvd2FyZCAgMTAwMCAtSW5mICAgLT4gIDk5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0Nzk0IG5leHR0b3dhcmQgIEluZiAgLUluZiAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorCitkcW5leHR0ODAwIG5leHR0b3dhcmQgIEluZiAgLUluZiAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDgwMSBuZXh0dG93YXJkICBJbmYgIC0xMDAwICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ4MDIgbmV4dHRvd2FyZCAgSW5mICAtMSAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0ODAzIG5leHR0b3dhcmQgIEluZiAgLTAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDgwNCBuZXh0dG93YXJkICBJbmYgICAwICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxbmV4dHQ4MDUgbmV4dHRvd2FyZCAgSW5mICAgMSAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcW5leHR0ODA2IG5leHR0b3dhcmQgIEluZiAgIDEwMDAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDgwNyBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK2RxbmV4dHQ4MDggbmV4dHRvd2FyZCAtMTAwMCAgSW5mICAgLT4gLTk5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0ODA5IG5leHR0b3dhcmQgLUluZiAgIEluZiAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFuZXh0dDgxMCBuZXh0dG93YXJkIC0xICAgICBJbmYgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5CitkcW5leHR0ODExIG5leHR0b3dhcmQgLTAgICAgIEluZiAgIC0+ICAxRS02MTc2ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHFuZXh0dDgxMiBuZXh0dG93YXJkICAwICAgICBJbmYgICAtPiAgMUUtNjE3NiAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RxbmV4dHQ4MTMgbmV4dHRvd2FyZCAgMSAgICAgSW5mICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCitkcW5leHR0ODE0IG5leHR0b3dhcmQgIDEwMDAgIEluZiAgIC0+ICAxMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorZHFuZXh0dDgxNSBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZHFuZXh0dDgyMSBuZXh0dG93YXJkICBOYU4gLUluZiAgICAtPiAgTmFOCitkcW5leHR0ODIyIG5leHR0b3dhcmQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RxbmV4dHQ4MjMgbmV4dHRvd2FyZCAgTmFOIC0xICAgICAgLT4gIE5hTgorZHFuZXh0dDgyNCBuZXh0dG93YXJkICBOYU4gLTAgICAgICAtPiAgTmFOCitkcW5leHR0ODI1IG5leHR0b3dhcmQgIE5hTiAgMCAgICAgIC0+ICBOYU4KK2RxbmV4dHQ4MjYgbmV4dHRvd2FyZCAgTmFOICAxICAgICAgLT4gIE5hTgorZHFuZXh0dDgyNyBuZXh0dG93YXJkICBOYU4gIDEwMDAgICAtPiAgTmFOCitkcW5leHR0ODI4IG5leHR0b3dhcmQgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RxbmV4dHQ4MjkgbmV4dHRvd2FyZCAgTmFOICBOYU4gICAgLT4gIE5hTgorZHFuZXh0dDgzMCBuZXh0dG93YXJkIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkcW5leHR0ODMxIG5leHR0b3dhcmQgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RxbmV4dHQ4MzIgbmV4dHRvd2FyZCAtMSAgICBOYU4gICAgLT4gIE5hTgorZHFuZXh0dDgzMyBuZXh0dG93YXJkIC0wICAgIE5hTiAgICAtPiAgTmFOCitkcW5leHR0ODM0IG5leHR0b3dhcmQgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RxbmV4dHQ4MzUgbmV4dHRvd2FyZCAgMSAgICBOYU4gICAgLT4gIE5hTgorZHFuZXh0dDgzNiBuZXh0dG93YXJkICAxMDAwIE5hTiAgICAtPiAgTmFOCitkcW5leHR0ODM3IG5leHR0b3dhcmQgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZHFuZXh0dDg0MSBuZXh0dG93YXJkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0MiBuZXh0dG93YXJkICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0MyBuZXh0dG93YXJkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0NCBuZXh0dG93YXJkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0NSBuZXh0dG93YXJkICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0NiBuZXh0dG93YXJkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0NyBuZXh0dG93YXJkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0OCBuZXh0dG93YXJkICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg0OSBuZXh0dG93YXJkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1MCBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1MSBuZXh0dG93YXJkIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1MiBuZXh0dG93YXJkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1MyBuZXh0dG93YXJkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1NCBuZXh0dG93YXJkIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1NSBuZXh0dG93YXJkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1NiBuZXh0dG93YXJkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1NyBuZXh0dG93YXJkICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1OCBuZXh0dG93YXJkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg1OSBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcW5leHR0ODYxIG5leHR0b3dhcmQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitkcW5leHR0ODYyIG5leHR0b3dhcmQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCitkcW5leHR0ODYzIG5leHR0b3dhcmQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitkcW5leHR0ODY0IG5leHR0b3dhcmQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitkcW5leHR0ODY1IG5leHR0b3dhcmQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41CitkcW5leHR0ODY2IG5leHR0b3dhcmQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitkcW5leHR0ODY3IG5leHR0b3dhcmQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitkcW5leHR0ODY4IG5leHR0b3dhcmQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45CitkcW5leHR0ODY5IG5leHR0b3dhcmQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZHFuZXh0dDg3MSBuZXh0dG93YXJkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODcyIG5leHR0b3dhcmQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NzMgbmV4dHRvd2FyZCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg3NCBuZXh0dG93YXJkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODc1IG5leHR0b3dhcmQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NzYgbmV4dHRvd2FyZCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg3NyBuZXh0dG93YXJkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODc4IG5leHR0b3dhcmQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4NzkgbmV4dHRvd2FyZCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZHFuZXh0dDg4MCBuZXh0dG93YXJkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0ODgxIG5leHR0b3dhcmQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4ODIgbmV4dHRvd2FyZCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitkcW5leHR0ODgzIG5leHR0b3dhcmQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2RxbmV4dHQ4ODQgbmV4dHRvd2FyZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCitkcW5leHR0ODg1IG5leHR0b3dhcmQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0cworZHFuZXh0dDkwMCBuZXh0dG93YXJkIDEgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW5leHR0OTAxIG5leHR0b3dhcmQgIyAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU9yLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxT3IuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmQzNGIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU9yLmRlY1Rlc3QKQEAgLTAsMCArMSw0MDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFPci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIE9SIGZvciBkZWNRdWFkcyAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQorZHFvcjAwMSBvciAgICAgICAgICAgICAwICAgIDAgLT4gICAgMAorZHFvcjAwMiBvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQorZHFvcjAwMyBvciAgICAgICAgICAgICAxICAgIDAgLT4gICAgMQorZHFvcjAwNCBvciAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQorZHFvcjAwNSBvciAgICAgICAgICAxMTAwIDEwMTAgLT4gMTExMAorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKK2Rxb3IwMDYgb3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCitkcW9yMDA3IG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxb3IwMDggb3IgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFvcjAwOSBvciAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW9yMDEwIG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorZHFvcjAxMSBvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcW9yMDEyIG9yIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxb3IwMTMgb3IgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCistLSBWYXJpb3VzIGxlbmd0aHMKK2Rxb3I2MDEgb3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjAyIG9yIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYwMyBvciAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MDQgb3IgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjA1IG9yIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYwNiBvciAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MDcgb3IgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjA4IG9yIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYwOSBvciAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MTAgb3IgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjExIG9yIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYxMiBvciAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MTMgb3IgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjE0IG9yIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYxNSBvciAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MTYgb3IgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjE3IG9yIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYxOCBvciAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MTkgb3IgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjIwIG9yIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYyMSBvciAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MjIgb3IgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjIzIG9yIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYyNCBvciAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MjUgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjI2IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYyNyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2Mjggb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjI5IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYzMCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MzEgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjMyIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjYzMyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2MzQgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCisKK2Rxb3I2NDEgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjQyIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY0MyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NDQgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjQ1IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY0NiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NDcgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjQ4IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY0OSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NTAgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjUxIG9yIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY1MiBvciAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NTMgb3IgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjU0IG9yIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY1NSBvciAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NTYgb3IgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjU3IG9yIDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAgMTAxMDEwMTAxMDEwMTAxMDAwMTAxMDEwMTAxMDEwMTAxMCAgLT4gMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMAorZHFvcjY1OCBvciAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NTkgb3IgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjYwIG9yIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY2MSBvciAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NjIgb3IgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjYzIG9yIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY2NCBvciAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NjUgb3IgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjY2IG9yIDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEgMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDAwMTAxMDEwMSAgLT4gIDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMQorZHFvcjY2NyBvciAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2Njggb3IgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjY5IG9yIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY3MCBvciAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NzEgb3IgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjcyIG9yIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY3MyBvciAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2NzQgb3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjc1IG9yIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMAorZHFvcjY3NiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAKKworZHFvcjY4MSBvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTAgIC0+ICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2ODIgb3IgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMDExMTExMTEwMTAxMTExMTExMTExMTExMTExMTExMTAxICAtPiAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjgzIG9yIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTEwMTExMTEwMTExMDExMTExMTExMTExMTExMTExMTAxMSAgLT4gMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY4NCBvciAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTAxMTEwMTExMTEwMTExMTExMTExMTExMTExMTAxMTEgIC0+IDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2ODUgb3IgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMDEwMTExMTExMTAxMTExMTExMTExMTExMTAxMTExICAtPiAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjg2IG9yIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTEwMTExMTExMTExMDExMTExMTExMTExMTAxMTExMSAgLT4gMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY4NyBvciAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTEwMTAxMTExMTExMTEwMTExMTExMTExMTAxMTExMTEgIC0+IDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2ODggb3IgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTEwMTExMDExMTExMTExMTAxMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjg5IG9yIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgMTEwMTExMTEwMTExMTExMTExMDExMTExMTAxMTExMTExMSAgLT4gMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY5MCBvciAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExIDEwMTExMTExMTAxMTExMTExMTEwMTExMTAxMTExMTExMTAgIC0+IDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2OTEgb3IgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAwMTExMTExMTExMDExMTExMTExMTAxMTAxMTExMTExMTAxICAtPiAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExCitkcW9yNjkyIG9yIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTExMDAxMTExMTExMTAxMSAgLT4gMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMQorZHFvcjY5MyBvciAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTAwMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEKK2Rxb3I2OTQgb3IgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTAxMTAxMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExCitkcW9yNjk1IG9yIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTAxMTExMDExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMQorZHFvcjY5NiBvciAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTAxMTExMTEwMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEKK2Rxb3I2OTcgb3IgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMDAxMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExCitkcW9yNjk4IG9yIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTAwMTExMTExMTAxMDExMTExMSAgLT4gMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMQorZHFvcjY5OSBvciAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTAxMTExMTAxMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEKK2Rxb3I3MDAgb3IgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTAxMTExMDExMTAxMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExCitkcW9yNzAxIG9yIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTEwMTAxMTExMTExMDExMSAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMQorZHFvcjcwMiBvciAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTAxMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEKK2Rxb3I3MDMgb3IgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAxMTExMTExMTExMTAxMTExMTExMTAxMDExMTExMTExMTAxICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExCitkcW9yNzA0IG9yIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgMTExMTExMTExMTAxMTExMTExMTAxMTEwMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMQorZHFvcjcwNSBvciAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExIDAxMTExMTExMTAxMTExMTExMTAxMTExMTAxMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEKK2Rxb3I3MDYgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAxMDExMTExMTAxMTExMTExMTAxMTExMTExMDExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExCitkcW9yNzA3IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgMTEwMTExMTAxMTExMTExMTAxMTExMTExMTEwMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMQorZHFvcjcwOCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExIDExMTAxMTAxMTExMTExMTAxMTExMTExMTExMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEKK2Rxb3I3MDkgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAxMTExMDAxMTExMTExMTAxMTExMTExMTExMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExCitkcW9yNzEwIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgMTExMTAwMTExMTExMTAxMTExMTExMTExMTExMTEwMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMQorZHFvcjcxMSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExIDExMTAxMTAxMTExMTAxMTExMTExMTExMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEKK2Rxb3I3MTIgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAxMTAxMTExMDExMTAxMTExMTExMTExMTExMTExMTExMDExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExCitkcW9yNzEzIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgMTAxMTExMTEwMTAxMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMQorZHFvcjcxNCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAKKworCisKKy0tICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2CitkcW9yMDIwIG9yIDExMTExMTExMTExMTExMTEgICAgIDExMTExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTExMTExMTExCitkcW9yMDIxIG9yICAxMTExMTExMTExMTExMTEgICAgICAxMTExMTExMTExMTExMTEgIC0+ICAgMTExMTExMTExMTExMTExCitkcW9yMDIyIG9yICAgMTExMTExMTExMTExMTEgICAgICAgMTExMTExMTExMTExMTEgIC0+ICAgIDExMTExMTExMTExMTExCitkcW9yMDIzIG9yICAgIDExMTExMTExMTExMTEgICAgICAgIDExMTExMTExMTExMTEgIC0+ICAgICAxMTExMTExMTExMTExCitkcW9yMDI0IG9yICAgICAxMTExMTExMTExMTEgICAgICAgICAxMTExMTExMTExMTEgIC0+ICAgICAgMTExMTExMTExMTExCitkcW9yMDI1IG9yICAgICAgMTExMTExMTExMTEgICAgICAgICAgMTExMTExMTExMTEgIC0+ICAgICAgIDExMTExMTExMTExCitkcW9yMDI2IG9yICAgICAgIDExMTExMTExMTEgICAgICAgICAgIDExMTExMTExMTEgIC0+ICAgICAgICAxMTExMTExMTExCitkcW9yMDI3IG9yICAgICAgICAxMTExMTExMTEgICAgICAgICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgMTExMTExMTExCitkcW9yMDI4IG9yICAgICAgICAgMTExMTExMTEgICAgICAgICAgICAgMTExMTExMTEgIC0+ICAgICAgICAgIDExMTExMTExCitkcW9yMDI5IG9yICAgICAgICAgIDExMTExMTEgICAgICAgICAgICAgIDExMTExMTEgIC0+ICAgICAgICAgICAxMTExMTExCitkcW9yMDMwIG9yICAgICAgICAgICAxMTExMTEgICAgICAgICAgICAgICAxMTExMTEgIC0+ICAgICAgICAgICAgMTExMTExCitkcW9yMDMxIG9yICAgICAgICAgICAgMTExMTEgICAgICAgICAgICAgICAgMTExMTEgIC0+ICAgICAgICAgICAgIDExMTExCitkcW9yMDMyIG9yICAgICAgICAgICAgIDExMTEgICAgICAgICAgICAgICAgIDExMTEgIC0+ICAgICAgICAgICAgICAxMTExCitkcW9yMDMzIG9yICAgICAgICAgICAgICAxMTEgICAgICAgICAgICAgICAgICAxMTEgIC0+ICAgICAgICAgICAgICAgMTExCitkcW9yMDM0IG9yICAgICAgICAgICAgICAgMTEgICAgICAgICAgICAgICAgICAgMTEgIC0+ICAgICAgICAgICAgICAgIDExCitkcW9yMDM1IG9yICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgIDEgIC0+ICAgICAgICAgICAgICAgICAxCitkcW9yMDM2IG9yICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgIDAgIC0+ICAgICAgICAgICAgICAgICAwCisKK2Rxb3IwNDIgb3IgIDExMTExMTExMDAwMDAwMCAgICAgMTExMTExMTExMDAwMDAwMCAgLT4gIDExMTExMTExMTAwMDAwMDAKK2Rxb3IwNDMgb3IgICAxMTExMTExMDAwMDAwMCAgICAgMTAwMDAwMDEwMDAwMDAwMCAgLT4gIDEwMTExMTExMTAwMDAwMDAKK2Rxb3IwNDQgb3IgICAgMTExMTExMDAwMDAwMCAgICAgMTAwMDAwMTAwMDAwMDAwMCAgLT4gIDEwMDExMTExMTAwMDAwMDAKK2Rxb3IwNDUgb3IgICAgIDExMTExMDAwMDAwMCAgICAgMTAwMDAxMDAwMDAwMDAwMCAgLT4gIDEwMDAxMTExMTAwMDAwMDAKK2Rxb3IwNDYgb3IgICAgICAxMTExMDAwMDAwMCAgICAgMTAwMDEwMDAwMDAwMDAwMCAgLT4gIDEwMDAxMTExMTAwMDAwMDAKK2Rxb3IwNDcgb3IgICAgICAgMTExMDAwMDAwMCAgICAgMTAwMTAwMDAwMDAwMDAwMCAgLT4gIDEwMDEwMDExMTAwMDAwMDAKK2Rxb3IwNDggb3IgICAgICAgIDExMDAwMDAwMCAgICAgMTAxMDAwMDAwMDAwMDAwMCAgLT4gIDEwMTAwMDAxMTAwMDAwMDAKK2Rxb3IwNDkgb3IgICAgICAgICAxMDAwMDAwMCAgICAgMTEwMDAwMDAwMDAwMDAwMCAgLT4gIDExMDAwMDAwMTAwMDAwMDAKKworZHFvcjA5MCBvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorZHFvcjA5MSBvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorZHFvcjA5MiBvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorZHFvcjA5MyBvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorZHFvcjA5NCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQorZHFvcjA5NSBvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorZHFvcjA5NiBvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorZHFvcjA5NyBvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorZHFvcjA5OCBvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorCitkcW9yMTAwIG9yIDExMTEwMTExMSAgMDExMTExMTExICAtPiAgMTExMTExMTExCitkcW9yMTAxIG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgMTExMTExMTExCitkcW9yMTAyIG9yIDExMTEwMTExMSAgMTEwMTExMTExICAtPiAgMTExMTExMTExCitkcW9yMTAzIG9yIDExMTEwMTExMSAgMTExMDExMTExICAtPiAgMTExMTExMTExCitkcW9yMTA0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExCitkcW9yMTA1IG9yIDExMTEwMTExMSAgMTExMTEwMTExICAtPiAgMTExMTExMTExCitkcW9yMTA2IG9yIDExMTEwMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMTExCitkcW9yMTA3IG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTExCitkcW9yMTA4IG9yIDExMTEwMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTExCisKKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducworZHFvcjIyMCBvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjIyMSBvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjIyMiBvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjIyMyBvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjIyNCBvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjIyNSBvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjIyNiBvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjIyNyBvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjIyOCBvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjIyOSBvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjIzMCBvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjIzMSBvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjIzMiBvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworZHFvcjI0MCBvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI0MSBvciAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI0MiBvciAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI0MyBvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI0NCBvciAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QKK2Rxb3IyNTAgb3IgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjUxIG9yICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI1MiBvciAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNTMgb3IgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjU0IG9yICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI1NSBvciAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNTYgb3IgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjU3IG9yICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI1OCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNTkgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjYwIG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI2MSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNjIgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjYzIG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI2NCBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNjUgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCitkcW9yMjcwIG9yICAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI3MSBvciAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNzIgb3IgIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjczIG9yICAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI3NCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDEwMDAwMCAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyNzUgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjc2IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAxMDAwIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI3NyBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDEwMCAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTFNECitkcW9yMjgwIG9yICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI4MSBvciAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwNyAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyODIgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMDggMTAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjgzIG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDA5IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI4NCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyODUgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjg2IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDAxMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI4NyBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCitkcW9yMjg4IG9yICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI4OSBvciAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyOTAgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwODAwMDAwMTAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjkxIG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDkwMDAwMTAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI5MiBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyOTMgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjk0IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwODAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI5NSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ25zCitkcW9yMjk2IG9yIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IyOTcgb3IgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjI5OCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMjk5IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAxMTExMDAxMTExMDAxMTExMDAwMDExMDAwMTAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UKK2Rxb3IzMzEgb3IgIDIgICA5Ljk5OTk5OTk5RSsxOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjMzMiBvciAgMyAgIDFFLTE5OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzMzIG9yICA0ICAgMS4wMDAwMDAwMEUtMTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzMzQgb3IgIDUgICAxRS0xMDA5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjMzNSBvciAgNiAgIC0xRS0xMDA5ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzM2IG9yICA3ICAgLTEuMDAwMDAwMDBFLTE5OTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzMzcgb3IgIDggICAtMUUtMTk5OSAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjMzOCBvciAgOSAgIC05Ljk5OTk5OTk5RSsxOTk5ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzQxIG9yICA5Ljk5OTk5OTk5RSsyOTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNDIgb3IgIDFFLTI5OTkgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM0MyBvciAgMS4wMDAwMDAwMEUtMjk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzQ0IG9yICAxRS0xMDA5ICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNDUgb3IgIC0xRS0xMDA5ICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM0NiBvciAgLTEuMDAwMDAwMDBFLTI5OTkgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzQ3IG9yICAtMUUtMjk5OSAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNDggb3IgIC05Ljk5OTk5OTk5RSsyOTk5ICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKK2Rxb3IzNjEgb3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM2MiBvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzYzIG9yICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNjQgb3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM2NSBvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzY2IG9yICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNzEgb3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM3MiBvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzczIG9yICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3IzNzQgb3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjM3NSBvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yMzc2IG9yICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgorZHFvcjc4MCBvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzgxIG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3ODIgb3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc4MyBvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzg0IG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3ODUgb3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc4NiBvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzg3IG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3ODggb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc4OSBvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzkwIG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3OTEgb3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjc5MiBvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yNzkzIG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I3OTQgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcW9yODAwIG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MDEgb3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgwMiBvciAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODAzIG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MDQgb3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgwNSBvciAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODA2IG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MDcgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgwOCBvciAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODA5IG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MTAgb3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgxMSBvciAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODEyIG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MTMgb3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgxNCBvciAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODE1IG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFvcjgyMSBvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODIyIG9yICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MjMgb3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgyNCBvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODI1IG9yICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MjYgb3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgyNyBvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODI4IG9yICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4Mjkgb3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgzMCBvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODMxIG9yIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MzIgb3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgzMyBvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODM0IG9yICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4MzUgb3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjgzNiBvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODM3IG9yICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFvcjg0MSBvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NDIgb3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODQzIG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg0NCBvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NDUgb3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODQ2IG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg0NyBvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NDggb3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODQ5IG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg1MCBvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NTEgb3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODUyIG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg1MyBvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NTQgb3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODU1IG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg1NiBvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NTcgb3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODU4IG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg1OSBvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFvcjg2MSBvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODYyIG9yICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NjMgb3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg2NCBvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODY1IG9yICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NjYgb3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg2NyBvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODY4IG9yICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4Njkgb3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg3MSBvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODcyIG9yICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NzMgb3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg3NCBvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODc1IG9yICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4NzYgb3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg3NyBvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODc4IG9yIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4Nzkgb3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg4MCBvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODgxIG9yICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4ODIgb3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFvcjg4MyBvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcW9yODg0IG9yICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxb3I4ODUgb3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVBsdXMuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFQbHVzLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlY2FhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFQbHVzLmRlY1Rlc3QKQEAgLTAsMCArMSw4OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVBsdXMuZGVjVGVzdCAtLSBkZWNRdWFkIDAreCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2RxcGxzMDAxIHBsdXMgICAgICAgKzcuNTAgIC0+IDcuNTAKKworLS0gSW5maW5pdGllcworZHFwbHMwMTEgcGx1cyAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkKK2RxcGxzMDEyIHBsdXMgIC1JbmZpbml0eSAgIC0+IC1JbmZpbml0eQorCistLSBOYU5zLCAwIHBheWxvYWQKK2RkcWxzMDIxIHBsdXMgICAgICAgICBOYU4gIC0+IE5hTgorZGRxbHMwMjIgcGx1cyAgICAgICAgLU5hTiAgLT4gLU5hTgorZGRxbHMwMjMgcGx1cyAgICAgICAgc05hTiAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZGRxbHMwMjQgcGx1cyAgICAgICAtc05hTiAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCitkZHFsczAzMSBwbHVzICAgICAgIE5hTjEzICAtPiBOYU4xMworZGRxbHMwMzIgcGx1cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzCitkZHFsczAzMyBwbHVzICAgICAgc05hTjEzICAtPiBOYU4xMyAgIEludmFsaWRfb3BlcmF0aW9uCitkZHFsczAzNCBwbHVzICAgICAtc05hTjEzICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitkZHFsczAzNSBwbHVzICAgICAgIE5hTjcwICAtPiBOYU43MAorZGRxbHMwMzYgcGx1cyAgICAgIC1OYU43MCAgLT4gLU5hTjcwCitkZHFsczAzNyBwbHVzICAgICAgc05hTjEwMSAtPiBOYU4xMDEgIEludmFsaWRfb3BlcmF0aW9uCitkZHFsczAzOCBwbHVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZpbml0ZXMKK2RxcGxzMTAxIHBsdXMgICAgICAgICAgNyAgIC0+IDcKK2RxcGxzMTAyIHBsdXMgICAgICAgICAtNyAgIC0+IC03CitkcXBsczEwMyBwbHVzICAgICAgICAgNzUgICAtPiA3NQorZHFwbHMxMDQgcGx1cyAgICAgICAgLTc1ICAgLT4gLTc1CitkcXBsczEwNSBwbHVzICAgICAgIDcuNTAgICAtPiA3LjUwCitkcXBsczEwNiBwbHVzICAgICAgLTcuNTAgICAtPiAtNy41MAorZHFwbHMxMDcgcGx1cyAgICAgICA3LjUwMCAgLT4gNy41MDAKK2RxcGxzMTA4IHBsdXMgICAgICAtNy41MDAgIC0+IC03LjUwMAorCistLSB6ZXJvcworZHFwbHMxMTEgcGx1cyAgICAgICAgICAwICAgLT4gMAorZHFwbHMxMTIgcGx1cyAgICAgICAgIC0wICAgLT4gMAorZHFwbHMxMTMgcGx1cyAgICAgICAwRSs0ICAgLT4gMEUrNAorZHFwbHMxMTQgcGx1cyAgICAgIC0wRSs0ICAgLT4gMEUrNAorZHFwbHMxMTUgcGx1cyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCitkcXBsczExNiBwbHVzICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKK2RxcGxzMTE3IHBsdXMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQorZHFwbHMxMTggcGx1cyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitkcXBsczEyMSBwbHVzICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgorZHFwbHMxMjIgcGx1cyAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKK2RxcGxzMTIzIHBsdXMgICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCitkcXBsczEyNCBwbHVzICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQorCistLSBObWF4LCBObWluLCBOdGlueQorZHFwbHMxMzEgcGx1cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxcGxzMTMyIHBsdXMgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMKK2RxcGxzMTMzIHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcXBsczEzNCBwbHVzICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2IFN1Ym5vcm1hbAorCitkcXBsczEzNSBwbHVzICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2IFN1Ym5vcm1hbAorZHFwbHMxMzYgcGx1cyAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2RxcGxzMTM3IHBsdXMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNDMKK2RxcGxzMTM4IHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUXVhbnRpemUuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFRdWFudGl6ZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNDcxYzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUXVhbnRpemUuZGVjVGVzdApAQCAtMCwwICsxLDgzNiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVF1YW50aXplLmRlY1Rlc3QgLS0gZGVjUXVhZCBxdWFudGl6ZSBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIE1vc3Qgb2YgdGhlIHRlc3RzIGhlcmUgYXNzdW1lIGEgInJlZ3VsYXIgcGF0dGVybiIsIHdoZXJlIHRoZQorLS0gc2lnbiBhbmQgY29lZmZpY2llbnQgYXJlICsxLgorLS0gMjAwNC4wMy4xNSBVbmRlcmZsb3cgZm9yIHF1YW50aXplIGlzIHN1cHByZXNzZWQKKy0tIDIwMDUuMDYuMDggTW9yZSBleHRlbnNpdmUgdGVzdHMgZm9yICdkb2VzIG5vdCBmaXQnCistLSBbRm9ya2VkIGZyb20gcXVhbnRpemUuZGVjVGVzdCAyMDA2LjExLjI1XQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzCitkcXF1YTAwMSBxdWFudGl6ZSAwICAgICAgIDFlMCAgIC0+IDAKK2RxcXVhMDAyIHF1YW50aXplIDEgICAgICAgMWUwICAgLT4gMQorZHFxdWEwMDMgcXVhbnRpemUgMC4xICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMDUgcXVhbnRpemUgMC4xICAgIDFlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMDYgcXVhbnRpemUgMC4xICAgICAxZTAgICAtPiAwIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMDcgcXVhbnRpemUgMC4xICAgIDFlLTEgICAtPiAwLjEKK2RxcXVhMDA4IHF1YW50aXplIDAuMSAgICAxZS0yICAgLT4gMC4xMAorZHFxdWEwMDkgcXVhbnRpemUgMC4xICAgIDFlLTMgICAtPiAwLjEwMAorZHFxdWEwMTAgcXVhbnRpemUgMC45ICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMTEgcXVhbnRpemUgMC45ICAgIDFlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMTIgcXVhbnRpemUgMC45ICAgIDFlKzAgICAtPiAxIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMTMgcXVhbnRpemUgMC45ICAgIDFlLTEgICAtPiAwLjkKK2RxcXVhMDE0IHF1YW50aXplIDAuOSAgICAxZS0yICAgLT4gMC45MAorZHFxdWEwMTUgcXVhbnRpemUgMC45ICAgIDFlLTMgICAtPiAwLjkwMAorLS0gbmVnYXRpdmVzCitkcXF1YTAyMSBxdWFudGl6ZSAtMCAgICAgIDFlMCAgIC0+IC0wCitkcXF1YTAyMiBxdWFudGl6ZSAtMSAgICAgIDFlMCAgIC0+IC0xCitkcXF1YTAyMyBxdWFudGl6ZSAtMC4xICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMjUgcXVhbnRpemUgLTAuMSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDI2IHF1YW50aXplIC0wLjEgICAgMWUwICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAyNyBxdWFudGl6ZSAtMC4xICAgMWUtMSAgIC0+IC0wLjEKK2RxcXVhMDI4IHF1YW50aXplIC0wLjEgICAxZS0yICAgLT4gLTAuMTAKK2RxcXVhMDI5IHF1YW50aXplIC0wLjEgICAxZS0zICAgLT4gLTAuMTAwCitkcXF1YTAzMCBxdWFudGl6ZSAtMC45ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMzEgcXVhbnRpemUgLTAuOSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDMyIHF1YW50aXplIC0wLjkgICAxZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAzMyBxdWFudGl6ZSAtMC45ICAgMWUtMSAgIC0+IC0wLjkKK2RxcXVhMDM0IHF1YW50aXplIC0wLjkgICAxZS0yICAgLT4gLTAuOTAKK2RxcXVhMDM1IHF1YW50aXplIC0wLjkgICAxZS0zICAgLT4gLTAuOTAwCitkcXF1YTAzNiBxdWFudGl6ZSAtMC41ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEwMzcgcXVhbnRpemUgLTAuNSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDM4IHF1YW50aXplIC0wLjUgICAxZSswICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTAzOSBxdWFudGl6ZSAtMC41ICAgMWUtMSAgIC0+IC0wLjUKK2RxcXVhMDQwIHF1YW50aXplIC0wLjUgICAxZS0yICAgLT4gLTAuNTAKK2RxcXVhMDQxIHF1YW50aXplIC0wLjUgICAxZS0zICAgLT4gLTAuNTAwCitkcXF1YTA0MiBxdWFudGl6ZSAtMC45ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEwNDMgcXVhbnRpemUgLTAuOSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDQ0IHF1YW50aXplIC0wLjkgICAxZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA0NSBxdWFudGl6ZSAtMC45ICAgMWUtMSAgIC0+IC0wLjkKK2RxcXVhMDQ2IHF1YW50aXplIC0wLjkgICAxZS0yICAgLT4gLTAuOTAKK2RxcXVhMDQ3IHF1YW50aXplIC0wLjkgICAxZS0zICAgLT4gLTAuOTAwCisKKy0tIGV4YW1wbGVzIGZyb20gU3BlY2lmaWNhdGlvbgorZHFxdWEwNjAgcXVhbnRpemUgMi4xNyAgIDAuMDAxICAtPiAyLjE3MAorZHFxdWEwNjEgcXVhbnRpemUgMi4xNyAgIDAuMDEgICAtPiAyLjE3CitkcXF1YTA2MiBxdWFudGl6ZSAyLjE3ICAgMC4xICAgIC0+IDIuMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDYzIHF1YW50aXplIDIuMTcgICAxZSswICAgLT4gMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDY0IHF1YW50aXplIDIuMTcgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDY1IHF1YW50aXplIC1JbmYgICAgSW5mICAgLT4gLUluZmluaXR5CitkcXF1YTA2NiBxdWFudGl6ZSAyICAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWEwNjcgcXVhbnRpemUgLTAuMSAgICAxICAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDY4IHF1YW50aXplIC0wICAgICAgMWUrNSAgICAgLT4gLTBFKzUKK2RxcXVhMDY5IHF1YW50aXplICsxMjM0NTEyMzQ1Njc4OTk4NzY1NDMyMTY3ODkwMTIzNDUuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWEwNzAgcXVhbnRpemUgLTk4NzY1MTIzNDU2Nzg5OTg3NjU0MzIxNDMzNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTA3MSBxdWFudGl6ZSAyMTcgICAgMWUtMSAgIC0+IDIxNy4wCitkcXF1YTA3MiBxdWFudGl6ZSAyMTcgICAgMWUrMCAgIC0+IDIxNworZHFxdWEwNzMgcXVhbnRpemUgMjE3ICAgIDFlKzEgICAtPiAyLjJFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA3NCBxdWFudGl6ZSAyMTcgICAgMWUrMiAgIC0+IDJFKzIgSW5leGFjdCBSb3VuZGVkCisKKy0tIGdlbmVyYWwgdGVzdHMgLi4KK2RxcXVhMDg5IHF1YW50aXplIDEyICAgICAxZSs0ICAgLT4gMEUrNCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDkwIHF1YW50aXplIDEyICAgICAxZSszICAgLT4gMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDkxIHF1YW50aXplIDEyICAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDkyIHF1YW50aXplIDEyICAgICAxZSsxICAgLT4gMUUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDkzIHF1YW50aXplIDEuMjM0NSAxZS0yICAgLT4gMS4yMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDk0IHF1YW50aXplIDEuMjM1NSAxZS0yICAgLT4gMS4yNCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMDk1IHF1YW50aXplIDEuMjM0NSAxZS02ICAgLT4gMS4yMzQ1MDAKK2RxcXVhMDk2IHF1YW50aXplIDkuOTk5OSAxZS0yICAgLT4gMTAuMDAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA5NyBxdWFudGl6ZSAwLjAwMDEgMWUtMiAgIC0+IDAuMDAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA5OCBxdWFudGl6ZSAwLjAwMSAgMWUtMiAgIC0+IDAuMDAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTA5OSBxdWFudGl6ZSAwLjAwOSAgMWUtMiAgIC0+IDAuMDEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEwMCBxdWFudGl6ZSA5MiAgICAgMWUrMiAgIC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMTAxIHF1YW50aXplIC0xICAgICAgMWUwICAgLT4gIC0xCitkcXF1YTEwMiBxdWFudGl6ZSAtMSAgICAgMWUtMSAgIC0+ICAtMS4wCitkcXF1YTEwMyBxdWFudGl6ZSAtMSAgICAgMWUtMiAgIC0+ICAtMS4wMAorZHFxdWExMDQgcXVhbnRpemUgIDAgICAgICAxZTAgICAtPiAgMAorZHFxdWExMDUgcXVhbnRpemUgIDAgICAgIDFlLTEgICAtPiAgMC4wCitkcXF1YTEwNiBxdWFudGl6ZSAgMCAgICAgMWUtMiAgIC0+ICAwLjAwCitkcXF1YTEwNyBxdWFudGl6ZSAgMC4wMCAgIDFlMCAgIC0+ICAwCitkcXF1YTEwOCBxdWFudGl6ZSAgMCAgICAgMWUrMSAgIC0+ICAwRSsxCitkcXF1YTEwOSBxdWFudGl6ZSAgMCAgICAgMWUrMiAgIC0+ICAwRSsyCitkcXF1YTExMCBxdWFudGl6ZSArMSAgICAgIDFlMCAgIC0+ICAxCitkcXF1YTExMSBxdWFudGl6ZSArMSAgICAgMWUtMSAgIC0+ICAxLjAKK2RxcXVhMTEyIHF1YW50aXplICsxICAgICAxZS0yICAgLT4gIDEuMDAKKworZHFxdWExMjAgcXVhbnRpemUgICAxLjA0ICAxZS0zIC0+ICAxLjA0MAorZHFxdWExMjEgcXVhbnRpemUgICAxLjA0ICAxZS0yIC0+ICAxLjA0CitkcXF1YTEyMiBxdWFudGl6ZSAgIDEuMDQgIDFlLTEgLT4gIDEuMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTIzIHF1YW50aXplICAgMS4wNCAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTI0IHF1YW50aXplICAgMS4wNSAgMWUtMyAtPiAgMS4wNTAKK2RxcXVhMTI1IHF1YW50aXplICAgMS4wNSAgMWUtMiAtPiAgMS4wNQorZHFxdWExMjYgcXVhbnRpemUgICAxLjA1ICAxZS0xIC0+ICAxLjAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEzMSBxdWFudGl6ZSAgIDEuMDUgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEzMiBxdWFudGl6ZSAgIDEuMDYgIDFlLTMgLT4gIDEuMDYwCitkcXF1YTEzMyBxdWFudGl6ZSAgIDEuMDYgIDFlLTIgLT4gIDEuMDYKK2RxcXVhMTM0IHF1YW50aXplICAgMS4wNiAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZAorZHFxdWExMzUgcXVhbnRpemUgICAxLjA2ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTE0MCBxdWFudGl6ZSAgIC0xMCAgICAxZS0yICAtPiAgLTEwLjAwCitkcXF1YTE0MSBxdWFudGl6ZSAgICsxICAgICAxZS0yICAtPiAgMS4wMAorZHFxdWExNDIgcXVhbnRpemUgICArMTAgICAgMWUtMiAgLT4gIDEwLjAwCitkcXF1YTE0MyBxdWFudGl6ZSAgIDFFKzM3ICAxZS0yICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTE0NCBxdWFudGl6ZSAgIDFFLTM3ICAxZS0yICAtPiAgMC4wMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTQ1IHF1YW50aXplICAgMUUtMyAgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZAorZHFxdWExNDYgcXVhbnRpemUgICAxRS0yICAgMWUtMiAgLT4gIDAuMDEKK2RxcXVhMTQ3IHF1YW50aXplICAgMUUtMSAgIDFlLTIgIC0+ICAwLjEwCitkcXF1YTE0OCBxdWFudGl6ZSAgIDBFLTM3ICAxZS0yICAtPiAgMC4wMAorCitkcXF1YTE1MCBxdWFudGl6ZSAgIDEuMDYwMCAxZS01IC0+ICAxLjA2MDAwCitkcXF1YTE1MSBxdWFudGl6ZSAgIDEuMDYwMCAxZS00IC0+ICAxLjA2MDAKK2RxcXVhMTUyIHF1YW50aXplICAgMS4wNjAwIDFlLTMgLT4gIDEuMDYwIFJvdW5kZWQKK2RxcXVhMTUzIHF1YW50aXplICAgMS4wNjAwIDFlLTIgLT4gIDEuMDYgUm91bmRlZAorZHFxdWExNTQgcXVhbnRpemUgICAxLjA2MDAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTUgcXVhbnRpemUgICAxLjA2MDAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKKworLS0gYSBjb3VwbGUgd2hlcmUgcm91bmRpbmcgd2FzIGRpZmZlcmVudCBpbiBiYXNlIHRlc3RzCityb3VuZGluZzogICAgaGFsZl91cAorZHFxdWExNTcgcXVhbnRpemUgLTAuNSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTU4IHF1YW50aXplICAgMS4wNSAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTkgcXVhbnRpemUgICAxLjA2ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBiYXNlIHRlc3RzIHdpdGggbm9uLTEgY29lZmZpY2llbnRzCitkcXF1YTE2MSBxdWFudGl6ZSAwICAgICAgLTllMCAgIC0+IDAKK2RxcXVhMTYyIHF1YW50aXplIDEgICAgICAtN2UwICAgLT4gMQorZHFxdWExNjMgcXVhbnRpemUgMC4xICAgLTFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWExNjUgcXVhbnRpemUgMC4xICAgIDBlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWExNjYgcXVhbnRpemUgMC4xICAgICAyZTAgICAtPiAwIEluZXhhY3QgUm91bmRlZAorZHFxdWExNjcgcXVhbnRpemUgMC4xICAgIDNlLTEgICAtPiAwLjEKK2RxcXVhMTY4IHF1YW50aXplIDAuMSAgIDQ0ZS0yICAgLT4gMC4xMAorZHFxdWExNjkgcXVhbnRpemUgMC4xICA1NTVlLTMgICAtPiAwLjEwMAorZHFxdWExNzAgcXVhbnRpemUgMC45IDY2NjZlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWExNzEgcXVhbnRpemUgMC45IC03NzdlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWExNzIgcXVhbnRpemUgMC45ICAtODhlKzAgICAtPiAxIEluZXhhY3QgUm91bmRlZAorZHFxdWExNzMgcXVhbnRpemUgMC45ICAgLTllLTEgICAtPiAwLjkKK2RxcXVhMTc0IHF1YW50aXplIDAuOSAgICAwZS0yICAgLT4gMC45MAorZHFxdWExNzUgcXVhbnRpemUgMC45ICAxLjFlLTMgICAtPiAwLjkwMDAKKy0tIG5lZ2F0aXZlcworZHFxdWExODEgcXVhbnRpemUgLTAgICAgMS4xZTAgICAtPiAtMC4wCitkcXF1YTE4MiBxdWFudGl6ZSAtMSAgICAgLTFlMCAgIC0+IC0xCitkcXF1YTE4MyBxdWFudGl6ZSAtMC4xICAxMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWExODUgcXVhbnRpemUgLTAuMSAxMTFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTg2IHF1YW50aXplIC0wLjEgICA3MWUwICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE4NyBxdWFudGl6ZSAtMC4xIC05MWUtMSAgIC0+IC0wLjEKK2RxcXVhMTg4IHF1YW50aXplIC0wLjEgLS4xZS0yICAgLT4gLTAuMTAwCitkcXF1YTE4OSBxdWFudGl6ZSAtMC4xICAtMWUtMyAgIC0+IC0wLjEwMAorZHFxdWExOTAgcXVhbnRpemUgLTAuOSAgIDBlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTkxIHF1YW50aXplIC0wLjkgIC0wZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE5MiBxdWFudGl6ZSAtMC45IC0xMGUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAorZHFxdWExOTMgcXVhbnRpemUgLTAuOSAxMDBlLTEgICAtPiAtMC45CitkcXF1YTE5NCBxdWFudGl6ZSAtMC45IDk5OWUtMiAgIC0+IC0wLjkwCisKKy0tICt2ZSBleHBvbmVudHMgLi4KK2RxcXVhMjAxIHF1YW50aXplICAgLTEgICAxZSswIC0+ICAtMQorZHFxdWEyMDIgcXVhbnRpemUgICAtMSAgIDFlKzEgLT4gIC0wRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMDMgcXVhbnRpemUgICAtMSAgIDFlKzIgLT4gIC0wRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMDQgcXVhbnRpemUgICAgMCAgIDFlKzAgLT4gIDAKK2RxcXVhMjA1IHF1YW50aXplICAgIDAgICAxZSsxIC0+ICAwRSsxCitkcXF1YTIwNiBxdWFudGl6ZSAgICAwICAgMWUrMiAtPiAgMEUrMgorZHFxdWEyMDcgcXVhbnRpemUgICArMSAgIDFlKzAgLT4gIDEKK2RxcXVhMjA4IHF1YW50aXplICAgKzEgICAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMDkgcXVhbnRpemUgICArMSAgIDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMjIwIHF1YW50aXplICAgMS4wNCAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjEgcXVhbnRpemUgICAxLjA0IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyMiBxdWFudGl6ZSAgIDEuMDQgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjIzIHF1YW50aXplICAgMS4wNCAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjQgcXVhbnRpemUgICAxLjA1IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyNSBxdWFudGl6ZSAgIDEuMDUgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjI2IHF1YW50aXplICAgMS4wNSAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjcgcXVhbnRpemUgICAxLjA1IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyOCBxdWFudGl6ZSAgIDEuMDUgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjI5IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzAgcXVhbnRpemUgICAxLjA1IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMSBxdWFudGl6ZSAgIDEuMDUgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjMyIHF1YW50aXplICAgMS4wNiAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzMgcXVhbnRpemUgICAxLjA2IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzNCBxdWFudGl6ZSAgIDEuMDYgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjM1IHF1YW50aXplICAgMS4wNiAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTI0MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzEgIC0+ICAtMUUrMSBSb3VuZGVkCitkcXF1YTI0MSBxdWFudGl6ZSAgICsxICAgIDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyNDIgcXVhbnRpemUgICArMTAgICAxZSsxICAtPiAgMUUrMSBSb3VuZGVkCitkcXF1YTI0MyBxdWFudGl6ZSAgIDFFKzEgIDFlKzEgIC0+ICAxRSsxICAgICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RxcXVhMjQ0IHF1YW50aXplICAgMUUrMiAgMWUrMSAgLT4gIDEuMEUrMiAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZHFxdWEyNDUgcXVhbnRpemUgICAxRSszICAxZSsxICAtPiAgMS4wMEUrMyAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkcXF1YTI0NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzEgIC0+ICAxLjAwMEUrNCAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RxcXVhMjQ3IHF1YW50aXplICAgMUUrNSAgMWUrMSAgLT4gIDEuMDAwMEUrNSAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZHFxdWEyNDggcXVhbnRpemUgICAxRSs2ICAxZSsxICAtPiAgMS4wMDAwMEUrNiAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitkcXF1YTI0OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzEgIC0+ICAxLjAwMDAwMEUrNyAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK2RxcXVhMjUwIHF1YW50aXplICAgMUUrOCAgMWUrMSAgLT4gIDEuMDAwMDAwMEUrOCAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorZHFxdWEyNTEgcXVhbnRpemUgICAxRSs5ICAxZSsxICAtPiAgMS4wMDAwMDAwMEUrOSAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCistLSBuZXh0IG9uZSB0cmllcyB0byBhZGQgOSB6ZXJvcworZHFxdWEyNTIgcXVhbnRpemUgICAxRSszNyAxZSsxICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTI1MyBxdWFudGl6ZSAgIDFFLTM3IDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEyNTQgcXVhbnRpemUgICAxRS0yICAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjU1IHF1YW50aXplICAgMEUtMzcgMWUrMSAgLT4gIDBFKzEKK2RxcXVhMjU2IHF1YW50aXplICAtMEUtMzcgMWUrMSAgLT4gLTBFKzEKK2RxcXVhMjU3IHF1YW50aXplICAtMEUtMSAgMWUrMSAgLT4gLTBFKzEKK2RxcXVhMjU4IHF1YW50aXplICAtMCAgICAgMWUrMSAgLT4gLTBFKzEKK2RxcXVhMjU5IHF1YW50aXplICAtMEUrMSAgMWUrMSAgLT4gLTBFKzEKKworZHFxdWEyNjAgcXVhbnRpemUgICAtMTAgICAxZSsyICAtPiAgLTBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI2MSBxdWFudGl6ZSAgICsxICAgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEyNjIgcXVhbnRpemUgICArMTAgICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjYzIHF1YW50aXplICAgMUUrMSAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI2NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzIgIC0+ICAxRSsyCitkcXF1YTI2NSBxdWFudGl6ZSAgIDFFKzMgIDFlKzIgIC0+ICAxLjBFKzMKK2RxcXVhMjY2IHF1YW50aXplICAgMUUrNCAgMWUrMiAgLT4gIDEuMDBFKzQKK2RxcXVhMjY3IHF1YW50aXplICAgMUUrNSAgMWUrMiAgLT4gIDEuMDAwRSs1CitkcXF1YTI2OCBxdWFudGl6ZSAgIDFFKzYgIDFlKzIgIC0+ICAxLjAwMDBFKzYKK2RxcXVhMjY5IHF1YW50aXplICAgMUUrNyAgMWUrMiAgLT4gIDEuMDAwMDBFKzcKK2RxcXVhMjcwIHF1YW50aXplICAgMUUrOCAgMWUrMiAgLT4gIDEuMDAwMDAwRSs4CitkcXF1YTI3MSBxdWFudGl6ZSAgIDFFKzkgIDFlKzIgIC0+ICAxLjAwMDAwMDBFKzkKK2RxcXVhMjcyIHF1YW50aXplICAgMUUrMTAgMWUrMiAgLT4gIDEuMDAwMDAwMDBFKzEwCitkcXF1YTI3MyBxdWFudGl6ZSAgIDFFLTEwIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEyNzQgcXVhbnRpemUgICAxRS0yICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjc1IHF1YW50aXplICAgMEUtMTAgMWUrMiAgLT4gIDBFKzIKKworZHFxdWEyODAgcXVhbnRpemUgICAtMTAgICAxZSszICAtPiAgLTBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI4MSBxdWFudGl6ZSAgICsxICAgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEyODIgcXVhbnRpemUgICArMTAgICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjgzIHF1YW50aXplICAgMUUrMSAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI4NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorZHFxdWEyODUgcXVhbnRpemUgICAxRSszICAxZSszICAtPiAgMUUrMworZHFxdWEyODYgcXVhbnRpemUgICAxRSs0ICAxZSszICAtPiAgMS4wRSs0CitkcXF1YTI4NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzMgIC0+ICAxLjAwRSs1CitkcXF1YTI4OCBxdWFudGl6ZSAgIDFFKzYgIDFlKzMgIC0+ICAxLjAwMEUrNgorZHFxdWEyODkgcXVhbnRpemUgICAxRSs3ICAxZSszICAtPiAgMS4wMDAwRSs3CitkcXF1YTI5MCBxdWFudGl6ZSAgIDFFKzggIDFlKzMgIC0+ICAxLjAwMDAwRSs4CitkcXF1YTI5MSBxdWFudGl6ZSAgIDFFKzkgIDFlKzMgIC0+ICAxLjAwMDAwMEUrOQorZHFxdWEyOTIgcXVhbnRpemUgICAxRSsxMCAxZSszICAtPiAgMS4wMDAwMDAwRSsxMAorZHFxdWEyOTMgcXVhbnRpemUgICAxRS0xMCAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjk0IHF1YW50aXplICAgMUUtMiAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitkcXF1YTI5NSBxdWFudGl6ZSAgIDBFLTEwIDFlKzMgIC0+ICAwRSszCisKKy0tIHJvdW5kIHVwIGZyb20gYmVsb3cgW3NpZ24gd3JvbmcgaW4gSklUIGNvbXBpbGVyIG9uY2VdCitkcXF1YTMwMCBxdWFudGl6ZSAgIDAuMDA3OCAxZS01IC0+ICAwLjAwNzgwCitkcXF1YTMwMSBxdWFudGl6ZSAgIDAuMDA3OCAxZS00IC0+ICAwLjAwNzgKK2RxcXVhMzAyIHF1YW50aXplICAgMC4wMDc4IDFlLTMgLT4gIDAuMDA4IEluZXhhY3QgUm91bmRlZAorZHFxdWEzMDMgcXVhbnRpemUgICAwLjAwNzggMWUtMiAtPiAgMC4wMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzA0IHF1YW50aXplICAgMC4wMDc4IDFlLTEgLT4gIDAuMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzA1IHF1YW50aXplICAgMC4wMDc4ICAxZTAgLT4gIDAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMwNiBxdWFudGl6ZSAgIDAuMDA3OCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMDcgcXVhbnRpemUgICAwLjAwNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEzMTAgcXVhbnRpemUgIC0wLjAwNzggMWUtNSAtPiAtMC4wMDc4MAorZHFxdWEzMTEgcXVhbnRpemUgIC0wLjAwNzggMWUtNCAtPiAtMC4wMDc4CitkcXF1YTMxMiBxdWFudGl6ZSAgLTAuMDA3OCAxZS0zIC0+IC0wLjAwOCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzEzIHF1YW50aXplICAtMC4wMDc4IDFlLTIgLT4gLTAuMDEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMxNCBxdWFudGl6ZSAgLTAuMDA3OCAxZS0xIC0+IC0wLjAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTMxNSBxdWFudGl6ZSAgLTAuMDA3OCAgMWUwIC0+IC0wIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMTYgcXVhbnRpemUgIC0wLjAwNzggMWUrMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzE3IHF1YW50aXplICAtMC4wMDc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMzIwIHF1YW50aXplICAgMC4wNzggMWUtNSAtPiAgMC4wNzgwMAorZHFxdWEzMjEgcXVhbnRpemUgICAwLjA3OCAxZS00IC0+ICAwLjA3ODAKK2RxcXVhMzIyIHF1YW50aXplICAgMC4wNzggMWUtMyAtPiAgMC4wNzgKK2RxcXVhMzIzIHF1YW50aXplICAgMC4wNzggMWUtMiAtPiAgMC4wOCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzI0IHF1YW50aXplICAgMC4wNzggMWUtMSAtPiAgMC4xIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMjUgcXVhbnRpemUgICAwLjA3OCAgMWUwIC0+ICAwIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMjYgcXVhbnRpemUgICAwLjA3OCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzMjcgcXVhbnRpemUgICAwLjA3OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTMzMCBxdWFudGl6ZSAgLTAuMDc4IDFlLTUgLT4gLTAuMDc4MDAKK2RxcXVhMzMxIHF1YW50aXplICAtMC4wNzggMWUtNCAtPiAtMC4wNzgwCitkcXF1YTMzMiBxdWFudGl6ZSAgLTAuMDc4IDFlLTMgLT4gLTAuMDc4CitkcXF1YTMzMyBxdWFudGl6ZSAgLTAuMDc4IDFlLTIgLT4gLTAuMDggSW5leGFjdCBSb3VuZGVkCitkcXF1YTMzNCBxdWFudGl6ZSAgLTAuMDc4IDFlLTEgLT4gLTAuMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzM1IHF1YW50aXplICAtMC4wNzggIDFlMCAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzM2IHF1YW50aXplICAtMC4wNzggMWUrMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzM3IHF1YW50aXplICAtMC4wNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWEzNDAgcXVhbnRpemUgICAwLjc4IDFlLTUgLT4gIDAuNzgwMDAKK2RxcXVhMzQxIHF1YW50aXplICAgMC43OCAxZS00IC0+ICAwLjc4MDAKK2RxcXVhMzQyIHF1YW50aXplICAgMC43OCAxZS0zIC0+ICAwLjc4MAorZHFxdWEzNDMgcXVhbnRpemUgICAwLjc4IDFlLTIgLT4gIDAuNzgKK2RxcXVhMzQ0IHF1YW50aXplICAgMC43OCAxZS0xIC0+ICAwLjggSW5leGFjdCBSb3VuZGVkCitkcXF1YTM0NSBxdWFudGl6ZSAgIDAuNzggIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzQ2IHF1YW50aXplICAgMC43OCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzNDcgcXVhbnRpemUgICAwLjc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMzUwIHF1YW50aXplICAtMC43OCAxZS01IC0+IC0wLjc4MDAwCitkcXF1YTM1MSBxdWFudGl6ZSAgLTAuNzggMWUtNCAtPiAtMC43ODAwCitkcXF1YTM1MiBxdWFudGl6ZSAgLTAuNzggMWUtMyAtPiAtMC43ODAKK2RxcXVhMzUzIHF1YW50aXplICAtMC43OCAxZS0yIC0+IC0wLjc4CitkcXF1YTM1NCBxdWFudGl6ZSAgLTAuNzggMWUtMSAtPiAtMC44IEluZXhhY3QgUm91bmRlZAorZHFxdWEzNTUgcXVhbnRpemUgIC0wLjc4ICAxZTAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTM1NiBxdWFudGl6ZSAgLTAuNzggMWUrMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzU3IHF1YW50aXplICAtMC43OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTM2MCBxdWFudGl6ZSAgIDcuOCAxZS01IC0+ICA3LjgwMDAwCitkcXF1YTM2MSBxdWFudGl6ZSAgIDcuOCAxZS00IC0+ICA3LjgwMDAKK2RxcXVhMzYyIHF1YW50aXplICAgNy44IDFlLTMgLT4gIDcuODAwCitkcXF1YTM2MyBxdWFudGl6ZSAgIDcuOCAxZS0yIC0+ICA3LjgwCitkcXF1YTM2NCBxdWFudGl6ZSAgIDcuOCAxZS0xIC0+ICA3LjgKK2RxcXVhMzY1IHF1YW50aXplICAgNy44ICAxZTAgLT4gIDggSW5leGFjdCBSb3VuZGVkCitkcXF1YTM2NiBxdWFudGl6ZSAgIDcuOCAxZSsxIC0+ICAxRSsxIEluZXhhY3QgUm91bmRlZAorZHFxdWEzNjcgcXVhbnRpemUgICA3LjggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzY4IHF1YW50aXplICAgNy44IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMzcwIHF1YW50aXplICAtNy44IDFlLTUgLT4gLTcuODAwMDAKK2RxcXVhMzcxIHF1YW50aXplICAtNy44IDFlLTQgLT4gLTcuODAwMAorZHFxdWEzNzIgcXVhbnRpemUgIC03LjggMWUtMyAtPiAtNy44MDAKK2RxcXVhMzczIHF1YW50aXplICAtNy44IDFlLTIgLT4gLTcuODAKK2RxcXVhMzc0IHF1YW50aXplICAtNy44IDFlLTEgLT4gLTcuOAorZHFxdWEzNzUgcXVhbnRpemUgIC03LjggIDFlMCAtPiAtOCBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzc2IHF1YW50aXplICAtNy44IDFlKzEgLT4gLTFFKzEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTM3NyBxdWFudGl6ZSAgLTcuOCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorZHFxdWEzNzggcXVhbnRpemUgIC03LjggMWUrMyAtPiAtMEUrMyBJbmV4YWN0IFJvdW5kZWQKKworLS0gc29tZSBpbmRpdmlkdWFscworZHFxdWEzODAgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0LjUwNiAxZS0yIC0+IDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQuNTEgSW5leGFjdCBSb3VuZGVkCitkcXF1YTM4MSBxdWFudGl6ZSAgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1LjA2IDFlLTIgLT4gMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUuMDYKK2RxcXVhMzgyIHF1YW50aXplICAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhMzgzIHF1YW50aXplICAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUwNiAgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhMzg0IHF1YW50aXplICAtMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NC41MDYgMWUtMiAtPiAtMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMzg1IHF1YW50aXplICAtMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUuMDYgMWUtMiAtPiAtMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUuMDYKK2RxcXVhMzg2IHF1YW50aXplICAtMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhMzg3IHF1YW50aXplICAtMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUwNiAgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworcm91bmRpbmc6IGRvd24KK2RxcXVhMzg5IHF1YW50aXplICAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdW5kaW5nOiBoYWxmX3VwCisKKy0tIGFuZCBhIGZldyBtb3JlIGZyb20gZS1tYWlsIGRpc2N1c3Npb25zCitkcXF1YTM5MSBxdWFudGl6ZSAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2Nzg5MTIuMzQ1NjcgIDFlLTMgLT4gMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2Nzg5MTIuMzQ2ICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTM5MiBxdWFudGl6ZSAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2Nzg5MTIzLjQ1NjcgIDFlLTMgLT4gMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2Nzg5MTIzLjQ1NyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTM5MyBxdWFudGl6ZSAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2Nzg5MTIzNDU2Ny4gIDFlLTMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHNvbWUgOTk5OSByb3VuZC11cCBjYXNlcworZHFxdWE0MDAgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtNSAgLT4gIDkuOTk5MDAKK2RxcXVhNDAxIHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTQgIC0+ICA5Ljk5OTAKK2RxcXVhNDAyIHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTMgIC0+ICA5Ljk5OQorZHFxdWE0MDMgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMiAgLT4gMTAuMDAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MDQgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMSAgLT4gMTAuMCAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MDUgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgIDFlMCAgLT4gMTAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MDYgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgIDFlMSAgLT4gMUUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE0MDcgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgIDFlMiAgLT4gMEUrMiAgICAgIEluZXhhY3QgUm91bmRlZAorCitkcXF1YTQxMCBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS01ICAtPiAgMC45OTkwMAorZHFxdWE0MTEgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtNCAgLT4gIDAuOTk5MAorZHFxdWE0MTIgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtMyAgLT4gIDAuOTk5CitkcXF1YTQxMyBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0yICAtPiAgMS4wMCAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQxNCBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0xICAtPiAgMS4wICAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQxNSBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAgMWUwICAtPiAgMSAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQxNiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhNDIwIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTUgIC0+ICAwLjA5OTkwCitkcXF1YTQyMSBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS00ICAtPiAgMC4wOTk5CitkcXF1YTQyMiBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS0zICAtPiAgMC4xMDAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQyMyBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS0yICAtPiAgMC4xMCAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQyNCBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS0xICAtPiAgMC4xICAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQyNSBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQyNiBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhNDMwIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTUgIC0+ICAwLjAwOTk5CitkcXF1YTQzMSBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS00ICAtPiAgMC4wMTAwICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQzMiBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS0zICAtPiAgMC4wMTAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQzMyBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS0yICAtPiAgMC4wMSAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQzNCBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS0xICAtPiAgMC4wICAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQzNSBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQzNiBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhNDQwIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTUgIC0+ICAwLjAwMTAwICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDQxIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTQgIC0+ICAwLjAwMTAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDQyIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTMgIC0+ICAwLjAwMSAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDQzIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTIgIC0+ICAwLjAwICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDQ0IHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTEgIC0+ICAwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDQ1IHF1YW50aXplICAgMC4wMDA5OTkgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDQ2IHF1YW50aXplICAgMC4wMDA5OTkgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWExMDAxIHF1YW50aXplICAwLjAwMCAgICAgICAgMC4wMDEgLT4gIDAuMDAwCitkcXF1YTEwMDIgcXVhbnRpemUgIDAuMDAxICAgICAgICAwLjAwMSAtPiAgMC4wMDEKK2RxcXVhMTAwMyBxdWFudGl6ZSAgMC4wMDEyICAgICAgIDAuMDAxIC0+ICAwLjAwMSAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEwMDQgcXVhbnRpemUgIDAuMDAxOCAgICAgICAwLjAwMSAtPiAgMC4wMDIgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMDA1IHF1YW50aXplICAwLjUwMSAgICAgICAgMC4wMDEgLT4gIDAuNTAxCitkcXF1YTEwMDYgcXVhbnRpemUgIDAuNTAxMiAgICAgICAwLjAwMSAtPiAgMC41MDEgICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMDA3IHF1YW50aXplICAwLjUwMTggICAgICAgMC4wMDEgLT4gIDAuNTAyICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTAwOCBxdWFudGl6ZSAgMC45OTkgICAgICAgIDAuMDAxIC0+ICAwLjk5OQorCitkcXF1YTQ4MSBxdWFudGl6ZSAxMjM0NTY3ODAwMCAxZSszIC0+IDEuMjM0NTY3OEUrMTAgUm91bmRlZAorZHFxdWE0ODIgcXVhbnRpemUgMTIzNDU2NzgwMCAgMWUrMSAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK2RxcXVhNDgzIHF1YW50aXplIDEyMzQ1Njc4OTAgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitkcXF1YTQ4NCBxdWFudGl6ZSAxMjM0NTY3ODkxICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ4NSBxdWFudGl6ZSAxMjM0NTY3ODkwMSAxZSsyIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorZHFxdWE0ODYgcXVhbnRpemUgMTIzNDU2Nzg5NiAgMWUrMSAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorLS0gYSBwb3RlbnRpYWwgZG91YmxlLXJvdW5kCitkcXF1YTQ4NyBxdWFudGl6ZSAxMjM0Ljk4NzY0MyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNDg4IHF1YW50aXplIDEyMzQuOTg3NjQ3IDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorCitkcXF1YTQ5MSBxdWFudGl6ZSAxMjM0NTY3ODAwMCAxZSszIC0+IDEuMjM0NTY3OEUrMTAgUm91bmRlZAorZHFxdWE0OTIgcXVhbnRpemUgMTIzNDU2NzgwMCAgMWUrMSAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK2RxcXVhNDkzIHF1YW50aXplIDEyMzQ1Njc4OTAgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitkcXF1YTQ5NCBxdWFudGl6ZSAxMjM0NTY3ODkxICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ5NSBxdWFudGl6ZSAxMjM0NTY3ODkwMSAxZSsyIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorZHFxdWE0OTYgcXVhbnRpemUgMTIzNDU2Nzg5NiAgMWUrMSAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorZHFxdWE0OTcgcXVhbnRpemUgMTIzNC45ODc2NDMgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCitkcXF1YTQ5OCBxdWFudGl6ZSAxMjM0Ljk4NzY0NyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKKworLS0gWmVyb3MKK2RxcXVhNTAwIHF1YW50aXplICAgMCAgICAgMWUxIC0+ICAwRSsxCitkcXF1YTUwMSBxdWFudGl6ZSAgIDAgICAgIDFlMCAtPiAgMAorZHFxdWE1MDIgcXVhbnRpemUgICAwICAgIDFlLTEgLT4gIDAuMAorZHFxdWE1MDMgcXVhbnRpemUgICAwLjAgIDFlLTEgLT4gIDAuMAorZHFxdWE1MDQgcXVhbnRpemUgICAwLjAgICAxZTAgLT4gIDAKK2RxcXVhNTA1IHF1YW50aXplICAgMC4wICAxZSsxIC0+ICAwRSsxCitkcXF1YTUwNiBxdWFudGl6ZSAgIDBFKzEgMWUtMSAtPiAgMC4wCitkcXF1YTUwNyBxdWFudGl6ZSAgIDBFKzEgIDFlMCAtPiAgMAorZHFxdWE1MDggcXVhbnRpemUgICAwRSsxIDFlKzEgLT4gIDBFKzEKK2RxcXVhNTA5IHF1YW50aXplICAtMCAgICAgMWUxIC0+IC0wRSsxCitkcXF1YTUxMCBxdWFudGl6ZSAgLTAgICAgIDFlMCAtPiAtMAorZHFxdWE1MTEgcXVhbnRpemUgIC0wICAgIDFlLTEgLT4gLTAuMAorZHFxdWE1MTIgcXVhbnRpemUgIC0wLjAgIDFlLTEgLT4gLTAuMAorZHFxdWE1MTMgcXVhbnRpemUgIC0wLjAgICAxZTAgLT4gLTAKK2RxcXVhNTE0IHF1YW50aXplICAtMC4wICAxZSsxIC0+IC0wRSsxCitkcXF1YTUxNSBxdWFudGl6ZSAgLTBFKzEgMWUtMSAtPiAtMC4wCitkcXF1YTUxNiBxdWFudGl6ZSAgLTBFKzEgIDFlMCAtPiAtMAorZHFxdWE1MTcgcXVhbnRpemUgIC0wRSsxIDFlKzEgLT4gLTBFKzEKKy0tICM1MTkgaGVyZSBvbmNlIGEgcHJvYmxlbQorZHFxdWE1MTggcXVhbnRpemUgIDAgICAgMEUtMyAgLT4gMC4wMDAKK2RxcXVhNTE5IHF1YW50aXplICAwICAgIDBFLTMzIC0+IDBFLTMzCitkcXF1YTUyMCBxdWFudGl6ZSAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIDBFLTMzIC0+IDBFLTMzCitkcXF1YTUyMSBxdWFudGl6ZSAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDBFLTMzIC0+IDBFLTMzCisKKy0tIFNvbWUgbm9uLXplcm9zIHdpdGggbG90cyBvZiBwYWRkaW5nIG9uIHRoZSByaWdodAorZHFxdWE1MjMgcXVhbnRpemUgICAxICAgMEUtMzMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxcXVhNTI0IHF1YW50aXplICAxMiAgIDBFLTMyIC0+IDEyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXF1YTUyNSBxdWFudGl6ZSAxMjMgICAwRS0zMSAtPiAxMjMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFxdWE1MjYgcXVhbnRpemUgMTIzICAgMEUtMzIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTUyNyBxdWFudGl6ZSAxMjMuNCAwRS0zMSAtPiAxMjMuNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFxdWE1MjggcXVhbnRpemUgMTIzLjQgMEUtMzIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIFN1c3BpY2lvdXMgUkhTIHZhbHVlcworZHFxdWE1MzAgcXVhbnRpemUgICAxLjIzNCAgICAxZTM1OSAtPiAwRSszNTkgSW5leGFjdCBSb3VuZGVkCitkcXF1YTUzMSBxdWFudGl6ZSAxMjMuNDU2ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNTMyIHF1YW50aXplICAgMS4yMzQgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZAorZHFxdWE1MzMgcXVhbnRpemUgMTIzLjQ1NiAgICAxZTM1OSAtPiAwRSszNTkgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IGZvdXIgYXJlICJ3b24ndCBmaXQiIG92ZXJmbG93cworZHFxdWE1MzYgcXVhbnRpemUgICAxLjIzNCAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTM3IHF1YW50aXplIDEyMy40NTYgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTUzOCBxdWFudGl6ZSAgIDEuMjM0ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1MzkgcXVhbnRpemUgMTIzLjQ1NiAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFxdWE1NDIgcXVhbnRpemUgICAxLjIzNEUrMjk5ICAgIDFlMjk5IC0+IDFFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNTQzIHF1YW50aXplICAgMS4yMzRFKzI5OCAgICAxZTI5OSAtPiAwRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTU0NCBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAgMWUyOTkgLT4gMEUrMjk5ICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE1NDcgcXVhbnRpemUgICAwICAgICAgICAgICAgMWUtMjk5IC0+IDBFLTI5OQorLS0gbmV4dCB0d28gYXJlICJ3b24ndCBmaXQiIG92ZXJmbG93cworZHFxdWE1NDggcXVhbnRpemUgICAxLjIzNCAgICAgICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1NDkgcXVhbnRpemUgICAxLjIzNCAgICAgICAgMWUtMzAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gW21vcmUgYmVsb3ddCisKKy0tIFNwZWNpYWxzCitkcXF1YTU4MCBxdWFudGl6ZSAgSW5mICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RxcXVhNTgxIHF1YW50aXplICBJbmYgIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU4MiBxdWFudGl6ZSAgSW5mICAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1ODMgcXVhbnRpemUgIEluZiAgIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTg0IHF1YW50aXplICBJbmYgICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU4NSBxdWFudGl6ZSAgSW5mICAgMWUyOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1ODYgcXVhbnRpemUgIEluZiAgICAgSW5mICAgLT4gIEluZmluaXR5CitkcXF1YTU4NyBxdWFudGl6ZSAtMTAwMCAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1ODggcXVhbnRpemUgLUluZiAgICAgSW5mICAgLT4gIC1JbmZpbml0eQorZHFxdWE1ODkgcXVhbnRpemUgLTEgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTkwIHF1YW50aXplICAwICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTU5MSBxdWFudGl6ZSAgMSAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE1OTIgcXVhbnRpemUgIDEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTkzIHF1YW50aXplICBJbmYgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZHFxdWE1OTQgcXVhbnRpemUgIEluZiAgMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNTk1IHF1YW50aXplIC0wICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2RxcXVhNjAwIHF1YW50aXplIC1JbmYgICAgLUluZiAgIC0+ICAtSW5maW5pdHkKK2RxcXVhNjAxIHF1YW50aXplIC1JbmYgIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTYwMiBxdWFudGl6ZSAtSW5mICAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2MDMgcXVhbnRpemUgLUluZiAgIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjA0IHF1YW50aXplIC1JbmYgICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTYwNSBxdWFudGl6ZSAtSW5mICAgMWUyOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2MDYgcXVhbnRpemUgLUluZiAgICAgSW5mICAgLT4gIC1JbmZpbml0eQorZHFxdWE2MDcgcXVhbnRpemUgLTEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjA4IHF1YW50aXplIC1JbmYgICAgLUluZiAgIC0+ICAtSW5maW5pdHkKK2RxcXVhNjA5IHF1YW50aXplIC0xICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTYxMCBxdWFudGl6ZSAgMCAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2MTEgcXVhbnRpemUgIDEgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjEyIHF1YW50aXplICAxMDAwICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTYxMyBxdWFudGl6ZSAgSW5mICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2RxcXVhNjE0IHF1YW50aXplIC1JbmYgIDFlLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTYxNSBxdWFudGl6ZSAtMCAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCitkcXF1YTYyMSBxdWFudGl6ZSAgTmFOICAgLUluZiAgICAtPiAgTmFOCitkcXF1YTYyMiBxdWFudGl6ZSAgTmFOIDFlLTI5OSAgICAtPiAgTmFOCitkcXF1YTYyMyBxdWFudGl6ZSAgTmFOIDFlLTEgICAgICAtPiAgTmFOCitkcXF1YTYyNCBxdWFudGl6ZSAgTmFOICAxZTAgICAgICAtPiAgTmFOCitkcXF1YTYyNSBxdWFudGl6ZSAgTmFOICAxZTEgICAgICAtPiAgTmFOCitkcXF1YTYyNiBxdWFudGl6ZSAgTmFOICAxZTI5OSAgICAtPiAgTmFOCitkcXF1YTYyNyBxdWFudGl6ZSAgTmFOICAgIEluZiAgICAtPiAgTmFOCitkcXF1YTYyOCBxdWFudGl6ZSAgTmFOICAgIE5hTiAgICAtPiAgTmFOCitkcXF1YTYyOSBxdWFudGl6ZSAtSW5mICAgIE5hTiAgICAtPiAgTmFOCitkcXF1YTYzMCBxdWFudGl6ZSAtMTAwMCAgIE5hTiAgICAtPiAgTmFOCitkcXF1YTYzMSBxdWFudGl6ZSAtMSAgICAgIE5hTiAgICAtPiAgTmFOCitkcXF1YTYzMiBxdWFudGl6ZSAgMCAgICAgIE5hTiAgICAtPiAgTmFOCitkcXF1YTYzMyBxdWFudGl6ZSAgMSAgICAgIE5hTiAgICAtPiAgTmFOCitkcXF1YTYzNCBxdWFudGl6ZSAgMTAwMCAgIE5hTiAgICAtPiAgTmFOCitkcXF1YTYzNSBxdWFudGl6ZSAgSW5mICAgIE5hTiAgICAtPiAgTmFOCitkcXF1YTYzNiBxdWFudGl6ZSAgTmFOIDFlLTAgICAgICAtPiAgTmFOCitkcXF1YTYzNyBxdWFudGl6ZSAtMCAgICAgIE5hTiAgICAtPiAgTmFOCisKK2RxcXVhNjQxIHF1YW50aXplICBzTmFOICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY0MiBxdWFudGl6ZSAgc05hTiAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NDMgcXVhbnRpemUgIHNOYU4gMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjQ0IHF1YW50aXplICBzTmFOICAxZTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY0NSBxdWFudGl6ZSAgc05hTiAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NDYgcXVhbnRpemUgIHNOYU4gIDFlMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjQ3IHF1YW50aXplICBzTmFOICAgIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY0OCBxdWFudGl6ZSAgc05hTiAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NDkgcXVhbnRpemUgIE5hTiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjUwIHF1YW50aXplIC1JbmYgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY1MSBxdWFudGl6ZSAtMTAwMCAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NTIgcXVhbnRpemUgLTEgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjUzIHF1YW50aXplICAwICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY1NCBxdWFudGl6ZSAgMSAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NTUgcXVhbnRpemUgIDEwMDAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjU2IHF1YW50aXplICBJbmYgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTY1NyBxdWFudGl6ZSAgTmFOICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2NTggcXVhbnRpemUgIHNOYU4gMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjU5IHF1YW50aXplIC0wICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxcXVhNjYxIHF1YW50aXplICBOYU45IC1JbmYgICAtPiAgTmFOOQorZHFxdWE2NjIgcXVhbnRpemUgIE5hTjggIDkxOSAgIC0+ICBOYU44CitkcXF1YTY2MyBxdWFudGl6ZSAgTmFONzEgSW5mICAgLT4gIE5hTjcxCitkcXF1YTY2NCBxdWFudGl6ZSAgTmFONiAgTmFONSAgLT4gIE5hTjYKK2RxcXVhNjY1IHF1YW50aXplIC1JbmYgICBOYU40ICAtPiAgTmFONAorZHFxdWE2NjYgcXVhbnRpemUgLTkxOSAgIE5hTjMxIC0+ICBOYU4zMQorZHFxdWE2NjcgcXVhbnRpemUgIEluZiAgIE5hTjIgIC0+ICBOYU4yCisKK2RxcXVhNjcxIHF1YW50aXplICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjcyIHF1YW50aXplICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjczIHF1YW50aXplICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjc0IHF1YW50aXplICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjc1IHF1YW50aXplICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjc2IHF1YW50aXplIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjc3IHF1YW50aXplICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjc4IHF1YW50aXplICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2RxcXVhNjc5IHF1YW50aXplICBOYU4gICAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworZHFxdWE2ODEgcXVhbnRpemUgLU5hTjkgLUluZiAgIC0+IC1OYU45CitkcXF1YTY4MiBxdWFudGl6ZSAtTmFOOCAgOTE5ICAgLT4gLU5hTjgKK2RxcXVhNjgzIHF1YW50aXplIC1OYU43MSBJbmYgICAtPiAtTmFONzEKK2RxcXVhNjg0IHF1YW50aXplIC1OYU42IC1OYU41ICAtPiAtTmFONgorZHFxdWE2ODUgcXVhbnRpemUgLUluZiAgLU5hTjQgIC0+IC1OYU40CitkcXF1YTY4NiBxdWFudGl6ZSAtOTE5ICAtTmFOMzEgLT4gLU5hTjMxCitkcXF1YTY4NyBxdWFudGl6ZSAgSW5mICAtTmFOMiAgLT4gLU5hTjIKKworZHFxdWE2OTEgcXVhbnRpemUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2OTIgcXVhbnRpemUgLXNOYU45OCAtMTEgICAgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2OTMgcXVhbnRpemUgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2OTQgcXVhbnRpemUgLXNOYU4xNiBzTmFOOTQgIC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2OTUgcXVhbnRpemUgLU5hTjk1IC1zTmFOOTMgIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2OTYgcXVhbnRpemUgLUluZiAgIC1zTmFOOTIgIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2OTcgcXVhbnRpemUgIDA4OCAgIC1zTmFOOTEgIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2OTggcXVhbnRpemUgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorZHFxdWE2OTkgcXVhbnRpemUgIE5hTiAgIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKK2RxcXVhNzEwIHF1YW50aXplICAxLjAwRS02MTQzICAgMWUtNjE0MyAgLT4gICAxRS02MTQzICAgUm91bmRlZAorZHFxdWE3MTEgcXVhbnRpemUgIDAuMUUtNjE0MyAgICAyZS02MTQ0ICAtPiAgIDFFLTYxNDQgICBTdWJub3JtYWwKK2RxcXVhNzEyIHF1YW50aXplICAwLjEwRS02MTQzICAgM2UtNjE0NCAgLT4gICAxRS02MTQ0ICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxcXVhNzEzIHF1YW50aXplICAwLjEwMEUtNjE0MyAgNGUtNjE0NCAgLT4gICAxRS02MTQ0ICAgU3Vibm9ybWFsIFJvdW5kZWQKK2RxcXVhNzE0IHF1YW50aXplICAwLjAxRS02MTQzICAgNWUtNjE0NSAgLT4gICAxRS02MTQ1ICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorZHFxdWE3MTUgcXVhbnRpemUgIDAuOTk5RS02MTQzICAxZS02MTQzICAtPiAgIDFFLTYxNDMgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzE2IHF1YW50aXplICAwLjA5OUUtNjE0MyAxMGUtNjE0NCAgLT4gICAxRS02MTQ0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorCitkcXF1YTcxNyBxdWFudGl6ZSAgMC4wMDlFLTYxNDMgIDFlLTYxNDUgIC0+ICAgMUUtNjE0NSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKK2RxcXVhNzE4IHF1YW50aXplICAwLjAwMUUtNjE0MyAgMWUtNjE0NSAgLT4gICAwRS02MTQ1ICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTcxOSBxdWFudGl6ZSAgMC4wMDA5RS02MTQzIDFlLTYxNDUgIC0+ICAgMEUtNjE0NSAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE3MjAgcXVhbnRpemUgIDAuMDAwMUUtNjE0MyAxZS02MTQ1ICAtPiAgIDBFLTYxNDUgICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWE3MzAgcXVhbnRpemUgLTEuMDBFLTYxNDMgICAxZS02MTQzICAtPiAgLTFFLTYxNDMgICAgIFJvdW5kZWQKK2RxcXVhNzMxIHF1YW50aXplIC0wLjFFLTYxNDMgICAgMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBSb3VuZGVkIEluZXhhY3QKK2RxcXVhNzMyIHF1YW50aXplIC0wLjEwRS02MTQzICAgMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBSb3VuZGVkIEluZXhhY3QKK2RxcXVhNzMzIHF1YW50aXplIC0wLjEwMEUtNjE0MyAgMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBSb3VuZGVkIEluZXhhY3QKK2RxcXVhNzM0IHF1YW50aXplIC0wLjAxRS02MTQzICAgMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitkcXF1YTczNSBxdWFudGl6ZSAtMC45OTlFLTYxNDMgOTBlLTYxNDMgIC0+ICAtMUUtNjE0MyAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTczNiBxdWFudGl6ZSAtMC4wOTlFLTYxNDMgLTFlLTYxNDMgIC0+ICAtMEUtNjE0MyAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTczNyBxdWFudGl6ZSAtMC4wMDlFLTYxNDMgLTFlLTYxNDMgIC0+ICAtMEUtNjE0MyAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTczOCBxdWFudGl6ZSAtMC4wMDFFLTYxNDMgLTBlLTYxNDMgIC0+ICAtMEUtNjE0MyAgICAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTczOSBxdWFudGl6ZSAtMC4wMDAxRS02MTQzIDBlLTYxNDMgIC0+ICAtMEUtNjE0MyAgICAgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhNzQwIHF1YW50aXplIC0xLjAwRS02MTQzICAgMWUtNjE0NCAtPiAgLTEuMEUtNjE0MyAgIFJvdW5kZWQKK2RxcXVhNzQxIHF1YW50aXplIC0wLjFFLTYxNDMgICAgMWUtNjE0NCAtPiAgLTFFLTYxNDQgICAgU3Vibm9ybWFsCitkcXF1YTc0MiBxdWFudGl6ZSAtMC4xMEUtNjE0MyAgIDFlLTYxNDQgLT4gIC0xRS02MTQ0ICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXF1YTc0MyBxdWFudGl6ZSAtMC4xMDBFLTYxNDMgIDFlLTYxNDQgLT4gIC0xRS02MTQ0ICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkcXF1YTc0NCBxdWFudGl6ZSAtMC4wMUUtNjE0MyAgIDFlLTYxNDQgLT4gIC0wRS02MTQ0ICAgIEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK2RxcXVhNzQ1IHF1YW50aXplIC0wLjk5OUUtNjE0MyAgMWUtNjE0NCAtPiAgLTEuMEUtNjE0MyAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE3NDYgcXVhbnRpemUgLTAuMDk5RS02MTQzICAxZS02MTQ0IC0+ICAtMUUtNjE0NCAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCitkcXF1YTc0NyBxdWFudGl6ZSAtMC4wMDlFLTYxNDMgIDFlLTYxNDQgLT4gIC0wRS02MTQ0ICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE3NDggcXVhbnRpemUgLTAuMDAxRS02MTQzICAxZS02MTQ0IC0+ICAtMEUtNjE0NCAgICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzQ5IHF1YW50aXplIC0wLjAwMDFFLTYxNDMgMWUtNjE0NCAtPiAgLTBFLTYxNDQgICAgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhNzUwIHF1YW50aXplIC0xLjAwRS02MTQzICAgMWUtNjE0NSAtPiAgLTEuMDBFLTYxNDMKK2RxcXVhNzUxIHF1YW50aXplIC0wLjFFLTYxNDMgICAgMWUtNjE0NSAtPiAgLTEuMEUtNjE0NCAgU3Vibm9ybWFsCitkcXF1YTc1MiBxdWFudGl6ZSAtMC4xMEUtNjE0MyAgIDFlLTYxNDUgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbAorZHFxdWE3NTMgcXVhbnRpemUgLTAuMTAwRS02MTQzICAxZS02MTQ1IC0+ICAtMS4wRS02MTQ0ICBTdWJub3JtYWwgUm91bmRlZAorZHFxdWE3NTQgcXVhbnRpemUgLTAuMDFFLTYxNDMgICAxZS02MTQ1IC0+ICAtMUUtNjE0NSAgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitkcXF1YTc1NSBxdWFudGl6ZSAtMC45OTlFLTYxNDMgIDFlLTYxNDUgLT4gIC0xLjAwRS02MTQzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhNzU2IHF1YW50aXplIC0wLjA5OUUtNjE0MyAgMWUtNjE0NSAtPiAgLTEuMEUtNjE0NCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorZHFxdWE3NTcgcXVhbnRpemUgLTAuMDA5RS02MTQzICAxZS02MTQ1IC0+ICAtMUUtNjE0NSAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCitkcXF1YTc1OCBxdWFudGl6ZSAtMC4wMDFFLTYxNDMgIDFlLTYxNDUgLT4gIC0wRS02MTQ1ICAgIEluZXhhY3QgUm91bmRlZAorZHFxdWE3NTkgcXVhbnRpemUgLTAuMDAwMUUtNjE0MyAxZS02MTQ1IC0+ICAtMEUtNjE0NSAgICBJbmV4YWN0IFJvdW5kZWQKKworZHFxdWE3NjAgcXVhbnRpemUgLTEuMDBFLTYxNDMgICAxZS02MTQ2IC0+ICAtMS4wMDBFLTYxNDMKK2RxcXVhNzYxIHF1YW50aXplIC0wLjFFLTYxNDMgICAgMWUtNjE0NiAtPiAgLTEuMDBFLTYxNDQgIFN1Ym5vcm1hbAorZHFxdWE3NjIgcXVhbnRpemUgLTAuMTBFLTYxNDMgICAxZS02MTQ2IC0+ICAtMS4wMEUtNjE0NCAgU3Vibm9ybWFsCitkcXF1YTc2MyBxdWFudGl6ZSAtMC4xMDBFLTYxNDMgIDFlLTYxNDYgLT4gIC0xLjAwRS02MTQ0ICBTdWJub3JtYWwKK2RxcXVhNzY0IHF1YW50aXplIC0wLjAxRS02MTQzICAgMWUtNjE0NiAtPiAgLTEuMEUtNjE0NSAgIFN1Ym5vcm1hbAorZHFxdWE3NjUgcXVhbnRpemUgLTAuOTk5RS02MTQzICAxZS02MTQ2IC0+ICAtOS45OUUtNjE0NCAgU3Vibm9ybWFsCitkcXF1YTc2NiBxdWFudGl6ZSAtMC4wOTlFLTYxNDMgIDFlLTYxNDYgLT4gIC05LjlFLTYxNDUgICBTdWJub3JtYWwKK2RxcXVhNzY3IHF1YW50aXplIC0wLjAwOUUtNjE0MyAgMWUtNjE0NiAtPiAgLTlFLTYxNDYgICAgIFN1Ym5vcm1hbAorZHFxdWE3NjggcXVhbnRpemUgLTAuMDAxRS02MTQzICAxZS02MTQ2IC0+ICAtMUUtNjE0NiAgICAgU3Vibm9ybWFsCitkcXF1YTc2OSBxdWFudGl6ZSAtMC4wMDAxRS02MTQzIDFlLTYxNDYgLT4gIC0wRS02MTQ2ICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gTW9yZSBmcm9tIEZ1bmcgTGVlCistLSB0aGUgbmV4dCBmb3VyIHdvdWxkIGFwcGVhciB0byBiZSBpbiBlcnJvciwgYnV0IHRoZXkgYXJlIG1pc2xlYWRpbmcgKHRoZQorLS0gb3BlcmFuZHMgd2lsbCBiZSBjbGFtcGVkIHRvIGEgbG93ZXIgZXhwb25lbnQpIGFuZCBzbyBhcmUgb21pdHRlZAorLS0gZHFxdWExMDIxIHF1YW50aXplICA4LjY2NjY2NjY2NjY2NjAwMEUrNjE0NCAgMS4wMDAwMDAwMDAwMDAwMDBFKzYxNDQgLT4gIDguNjY2NjY2NjY2NjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0ICBDbGFtcGVkCistLSBkcXF1YTEwMjIgcXVhbnRpemUgLTguNjY2NjY2NjY2NjY2MDAwRSs2MTQ0ICAxLjAwMDAwMDAwMDAwMDAwMEUrNjE0NCAtPiAtOC42NjY2NjY2NjY2NjYwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgIENsYW1wZWQKKy0tIGRxcXVhMTAyNyBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzIzICAxRSszMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGRxcXVhMTAzMCBxdWFudGl6ZSA4LjY2NjY2NjY2RSszICAgICAgICAgICAxRSszICAgICAtPiA5RSszIEluZXhhY3QgUm91bmRlZAorCistLSBJbnQgYW5kIHVJbnQzMiBlZGdlIHZhbHVlcyBmb3IgdGVzdGluZyBjb252ZXJzaW9ucworZHFxdWExMDQwIHF1YW50aXplIC0yMTQ3NDgzNjQ2ICAgICAwIC0+IC0yMTQ3NDgzNjQ2CitkcXF1YTEwNDEgcXVhbnRpemUgLTIxNDc0ODM2NDcgICAgIDAgLT4gLTIxNDc0ODM2NDcKK2RxcXVhMTA0MiBxdWFudGl6ZSAtMjE0NzQ4MzY0OCAgICAgMCAtPiAtMjE0NzQ4MzY0OAorZHFxdWExMDQzIHF1YW50aXplIC0yMTQ3NDgzNjQ5ICAgICAwIC0+IC0yMTQ3NDgzNjQ5CitkcXF1YTEwNDQgcXVhbnRpemUgIDIxNDc0ODM2NDYgICAgIDAgLT4gIDIxNDc0ODM2NDYKK2RxcXVhMTA0NSBxdWFudGl6ZSAgMjE0NzQ4MzY0NyAgICAgMCAtPiAgMjE0NzQ4MzY0NworZHFxdWExMDQ2IHF1YW50aXplICAyMTQ3NDgzNjQ4ICAgICAwIC0+ICAyMTQ3NDgzNjQ4CitkcXF1YTEwNDcgcXVhbnRpemUgIDIxNDc0ODM2NDkgICAgIDAgLT4gIDIxNDc0ODM2NDkKK2RxcXVhMTA0OCBxdWFudGl6ZSAgNDI5NDk2NzI5NCAgICAgMCAtPiAgNDI5NDk2NzI5NAorZHFxdWExMDQ5IHF1YW50aXplICA0Mjk0OTY3Mjk1ICAgICAwIC0+ICA0Mjk0OTY3Mjk1CitkcXF1YTEwNTAgcXVhbnRpemUgIDQyOTQ5NjcyOTYgICAgIDAgLT4gIDQyOTQ5NjcyOTYKK2RxcXVhMTA1MSBxdWFudGl6ZSAgNDI5NDk2NzI5NyAgICAgMCAtPiAgNDI5NDk2NzI5NworCistLSBSb3VuZGluZyBzd2F0aGUKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2RxcXVhMTEwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RxcXVhMTEwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMTAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTExMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTEwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMTA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTExMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTEwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMTA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTExMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK2RxcXVhMTIwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RxcXVhMTIwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMjAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEyMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTIwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMjA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEyMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTIwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMjA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEyMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZG93bgorZHFxdWExMzAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZHFxdWExMzAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEzMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTMwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMzA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEzMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTMwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZHFxdWExMzA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTEzMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTMwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogdXAKK2RxcXVhMTQwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKK2RxcXVhMTQwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNDAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE0MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTQwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNDA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE0MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTQwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNDA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE0MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTQxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjQgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZG93bgorZHFxdWExNTAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAorZHFxdWExNTAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTUwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTUwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE1MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTUwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNTExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yMyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBjZWlsaW5nCitkcXF1YTE2MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkcXF1YTE2MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTYwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNjAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTYwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNjA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTYwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNjA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE2MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjIzICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGZsb29yCitkcXF1YTE3MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCitkcXF1YTE3MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTcwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNzAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTcwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNzA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTcwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAorZHFxdWExNzA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE3MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IDA1dXAKK2RxcXVhMTgwMCBxdWFudGl6ZSAgMS4yMDAwICAgIDEuMDAgICAgLT4gIDEuMjAgIFJvdW5kZWQKK2RxcXVhMTgwMSBxdWFudGl6ZSAgMS4yMDAxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExODAyIHF1YW50aXplICAxLjIwMTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE4MDMgcXVhbnRpemUgIDEuMjA1MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTgwNCBxdWFudGl6ZSAgMS4yMDUxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExODA3IHF1YW50aXplICAxLjIwNjAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE4MDggcXVhbnRpemUgIDEuMjA3MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTgwOSBxdWFudGl6ZSAgMS4yMDk5ICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExODExIHF1YW50aXplIC0xLjIwOTkgICAgMS4wMCAgICAtPiAtMS4yMSAgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMTkwMCBxdWFudGl6ZSAgMS4yMTAwICAgIDEuMDAgICAgLT4gIDEuMjEgIFJvdW5kZWQKK2RxcXVhMTkwMSBxdWFudGl6ZSAgMS4yMTAxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExOTAyIHF1YW50aXplICAxLjIxMTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE5MDMgcXVhbnRpemUgIDEuMjE1MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTkwNCBxdWFudGl6ZSAgMS4yMTUxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExOTA3IHF1YW50aXplICAxLjIxNjAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTE5MDggcXVhbnRpemUgIDEuMjE3MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMTkwOSBxdWFudGl6ZSAgMS4yMTk5ICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAorZHFxdWExOTExIHF1YW50aXplIC0xLjIxOTkgICAgMS4wMCAgICAtPiAtMS4yMSAgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMjAwMCBxdWFudGl6ZSAgMS4yNDAwICAgIDEuMDAgICAgLT4gIDEuMjQgIFJvdW5kZWQKK2RxcXVhMjAwMSBxdWFudGl6ZSAgMS4yNDAxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMDAyIHF1YW50aXplICAxLjI0MTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwMDMgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjAwNCBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMDA3IHF1YW50aXplICAxLjI0NjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIwMDggcXVhbnRpemUgIDEuMjQ3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjAwOSBxdWFudGl6ZSAgMS4yNDk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMDExIHF1YW50aXplIC0xLjI0OTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMjEwMCBxdWFudGl6ZSAgMS4yNTAwICAgIDEuMDAgICAgLT4gIDEuMjUgIFJvdW5kZWQKK2RxcXVhMjEwMSBxdWFudGl6ZSAgMS4yNTAxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMTAyIHF1YW50aXplICAxLjI1MTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIxMDMgcXVhbnRpemUgIDEuMjU1MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjEwNCBxdWFudGl6ZSAgMS4yNTUxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMTA3IHF1YW50aXplICAxLjI1NjAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIxMDggcXVhbnRpemUgIDEuMjU3MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjEwOSBxdWFudGl6ZSAgMS4yNTk5ICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMTExIHF1YW50aXplIC0xLjI1OTkgICAgMS4wMCAgICAtPiAtMS4yNiAgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMjIwMCBxdWFudGl6ZSAgMS4yNjAwICAgIDEuMDAgICAgLT4gIDEuMjYgIFJvdW5kZWQKK2RxcXVhMjIwMSBxdWFudGl6ZSAgMS4yNjAxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjAyIHF1YW50aXplICAxLjI2MTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyMDMgcXVhbnRpemUgIDEuMjY1MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjIwNCBxdWFudGl6ZSAgMS4yNjUxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjA3IHF1YW50aXplICAxLjI2NjAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIyMDggcXVhbnRpemUgIDEuMjY3MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjIwOSBxdWFudGl6ZSAgMS4yNjk5ICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMjExIHF1YW50aXplIC0xLjI2OTkgICAgMS4wMCAgICAtPiAtMS4yNiAgSW5leGFjdCBSb3VuZGVkCisKK2RxcXVhMjMwMCBxdWFudGl6ZSAgMS4yOTAwICAgIDEuMDAgICAgLT4gIDEuMjkgIFJvdW5kZWQKK2RxcXVhMjMwMSBxdWFudGl6ZSAgMS4yOTAxICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzAyIHF1YW50aXplICAxLjI5MTAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMDMgcXVhbnRpemUgIDEuMjk1MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjMwNCBxdWFudGl6ZSAgMS4yOTUxICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzA3IHF1YW50aXplICAxLjI5NjAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCitkcXF1YTIzMDggcXVhbnRpemUgIDEuMjk3MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKK2RxcXVhMjMwOSBxdWFudGl6ZSAgMS4yOTk5ICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAorZHFxdWEyMzExIHF1YW50aXplIC0xLjI5OTkgICAgMS4wMCAgICAtPiAtMS4yOSAgSW5leGFjdCBSb3VuZGVkCisKKy0tIE51bGwgdGVzdHMKK2RxcXVhOTk4IHF1YW50aXplIDEwICAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXF1YTk5OSBxdWFudGl6ZSAgIyAxZTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlZHVjZS5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlZHVjZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzVlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVkdWNlLmRlY1Rlc3QKQEAgLTAsMCArMSwxODMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFSZWR1Y2UuZGVjVGVzdCAtLSByZW1vdmUgdHJhaWxpbmcgemVyb3MgZnJvbSBhIGRlY1F1YWQgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMywgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RxcmVkMDAxIHJlZHVjZSAnMScgICAgICAtPiAnMScKK2RxcmVkMDAyIHJlZHVjZSAnLTEnICAgICAtPiAnLTEnCitkcXJlZDAwMyByZWR1Y2UgJzEuMDAnICAgLT4gJzEnCitkcXJlZDAwNCByZWR1Y2UgJy0xLjAwJyAgLT4gJy0xJworZHFyZWQwMDUgcmVkdWNlICcwJyAgICAgIC0+ICcwJworZHFyZWQwMDYgcmVkdWNlICcwLjAwJyAgIC0+ICcwJworZHFyZWQwMDcgcmVkdWNlICcwMC4wJyAgIC0+ICcwJworZHFyZWQwMDggcmVkdWNlICcwMC4wMCcgIC0+ICcwJworZHFyZWQwMDkgcmVkdWNlICcwMCcgICAgIC0+ICcwJworZHFyZWQwMTAgcmVkdWNlICcwRSsxJyAgIC0+ICcwJworZHFyZWQwMTEgcmVkdWNlICcwRSs1JyAgIC0+ICcwJworCitkcXJlZDAxMiByZWR1Y2UgJy0yJyAgICAgLT4gJy0yJworZHFyZWQwMTMgcmVkdWNlICcyJyAgICAgIC0+ICcyJworZHFyZWQwMTQgcmVkdWNlICctMi4wMCcgIC0+ICctMicKK2RxcmVkMDE1IHJlZHVjZSAnMi4wMCcgICAtPiAnMicKK2RxcmVkMDE2IHJlZHVjZSAnLTAnICAgICAtPiAnLTAnCitkcXJlZDAxNyByZWR1Y2UgJy0wLjAwJyAgLT4gJy0wJworZHFyZWQwMTggcmVkdWNlICctMDAuMCcgIC0+ICctMCcKK2RxcmVkMDE5IHJlZHVjZSAnLTAwLjAwJyAtPiAnLTAnCitkcXJlZDAyMCByZWR1Y2UgJy0wMCcgICAgLT4gJy0wJworZHFyZWQwMjEgcmVkdWNlICctMEUrNScgICAtPiAnLTAnCitkcXJlZDAyMiByZWR1Y2UgJy0wRSsxJyAgLT4gJy0wJworCitkcXJlZDAzMCByZWR1Y2UgJyswLjEnICAgICAgICAgICAgLT4gJzAuMScKK2RxcmVkMDMxIHJlZHVjZSAnLTAuMScgICAgICAgICAgICAtPiAnLTAuMScKK2RxcmVkMDMyIHJlZHVjZSAnKzAuMDEnICAgICAgICAgICAtPiAnMC4wMScKK2RxcmVkMDMzIHJlZHVjZSAnLTAuMDEnICAgICAgICAgICAtPiAnLTAuMDEnCitkcXJlZDAzNCByZWR1Y2UgJyswLjAwMScgICAgICAgICAgLT4gJzAuMDAxJworZHFyZWQwMzUgcmVkdWNlICctMC4wMDEnICAgICAgICAgIC0+ICctMC4wMDEnCitkcXJlZDAzNiByZWR1Y2UgJyswLjAwMDAwMScgICAgICAgLT4gJzAuMDAwMDAxJworZHFyZWQwMzcgcmVkdWNlICctMC4wMDAwMDEnICAgICAgIC0+ICctMC4wMDAwMDEnCitkcXJlZDAzOCByZWR1Y2UgJyswLjAwMDAwMDAwMDAwMScgLT4gJzFFLTEyJworZHFyZWQwMzkgcmVkdWNlICctMC4wMDAwMDAwMDAwMDEnIC0+ICctMUUtMTInCisKK2RxcmVkMDQxIHJlZHVjZSAxLjEgICAgICAgIC0+IDEuMQorZHFyZWQwNDIgcmVkdWNlIDEuMTAgICAgICAgLT4gMS4xCitkcXJlZDA0MyByZWR1Y2UgMS4xMDAgICAgICAtPiAxLjEKK2RxcmVkMDQ0IHJlZHVjZSAxLjExMCAgICAgIC0+IDEuMTEKK2RxcmVkMDQ1IHJlZHVjZSAtMS4xICAgICAgIC0+IC0xLjEKK2RxcmVkMDQ2IHJlZHVjZSAtMS4xMCAgICAgIC0+IC0xLjEKK2RxcmVkMDQ3IHJlZHVjZSAtMS4xMDAgICAgIC0+IC0xLjEKK2RxcmVkMDQ4IHJlZHVjZSAtMS4xMTAgICAgIC0+IC0xLjExCitkcXJlZDA0OSByZWR1Y2UgOS45ICAgICAgICAtPiA5LjkKK2RxcmVkMDUwIHJlZHVjZSA5LjkwICAgICAgIC0+IDkuOQorZHFyZWQwNTEgcmVkdWNlIDkuOTAwICAgICAgLT4gOS45CitkcXJlZDA1MiByZWR1Y2UgOS45OTAgICAgICAtPiA5Ljk5CitkcXJlZDA1MyByZWR1Y2UgLTkuOSAgICAgICAtPiAtOS45CitkcXJlZDA1NCByZWR1Y2UgLTkuOTAgICAgICAtPiAtOS45CitkcXJlZDA1NSByZWR1Y2UgLTkuOTAwICAgICAtPiAtOS45CitkcXJlZDA1NiByZWR1Y2UgLTkuOTkwICAgICAtPiAtOS45OQorCistLSBzb21lIHRyYWlsaW5nIGZyYWN0aW9uYWwgemVyb3Mgd2l0aCB6ZXJvcyBpbiB1bml0cworZHFyZWQwNjAgcmVkdWNlICAxMC4wICAgICAgICAtPiAxRSsxCitkcXJlZDA2MSByZWR1Y2UgIDEwLjAwICAgICAgIC0+IDFFKzEKK2RxcmVkMDYyIHJlZHVjZSAgMTAwLjAgICAgICAgLT4gMUUrMgorZHFyZWQwNjMgcmVkdWNlICAxMDAuMDAgICAgICAtPiAxRSsyCitkcXJlZDA2NCByZWR1Y2UgIDEuMTAwMEUrMyAgIC0+IDEuMUUrMworZHFyZWQwNjUgcmVkdWNlICAxLjEwMDAwRSszICAtPiAxLjFFKzMKK2RxcmVkMDY2IHJlZHVjZSAtMTAuMCAgICAgICAgLT4gLTFFKzEKK2RxcmVkMDY3IHJlZHVjZSAtMTAuMDAgICAgICAgLT4gLTFFKzEKK2RxcmVkMDY4IHJlZHVjZSAtMTAwLjAgICAgICAgLT4gLTFFKzIKK2RxcmVkMDY5IHJlZHVjZSAtMTAwLjAwICAgICAgLT4gLTFFKzIKK2RxcmVkMDcwIHJlZHVjZSAtMS4xMDAwRSszICAgLT4gLTEuMUUrMworZHFyZWQwNzEgcmVkdWNlIC0xLjEwMDAwRSszICAtPiAtMS4xRSszCisKKy0tIHNvbWUgaW5zaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcyB3aXRoIHBvc2l0aXZlIGV4cG9uZW50CitkcXJlZDA4MCByZWR1Y2UgIDEwRSsxICAgICAgIC0+IDFFKzIKK2RxcmVkMDgxIHJlZHVjZSAgMTAwRSsxICAgICAgLT4gMUUrMworZHFyZWQwODIgcmVkdWNlICAxLjBFKzIgICAgICAtPiAxRSsyCitkcXJlZDA4MyByZWR1Y2UgIDEuMEUrMyAgICAgIC0+IDFFKzMKK2RxcmVkMDg0IHJlZHVjZSAgMS4xRSszICAgICAgLT4gMS4xRSszCitkcXJlZDA4NSByZWR1Y2UgIDEuMDBFKzMgICAgIC0+IDFFKzMKK2RxcmVkMDg2IHJlZHVjZSAgMS4xMEUrMyAgICAgLT4gMS4xRSszCitkcXJlZDA4NyByZWR1Y2UgLTEwRSsxICAgICAgIC0+IC0xRSsyCitkcXJlZDA4OCByZWR1Y2UgLTEwMEUrMSAgICAgIC0+IC0xRSszCitkcXJlZDA4OSByZWR1Y2UgLTEuMEUrMiAgICAgIC0+IC0xRSsyCitkcXJlZDA5MCByZWR1Y2UgLTEuMEUrMyAgICAgIC0+IC0xRSszCitkcXJlZDA5MSByZWR1Y2UgLTEuMUUrMyAgICAgIC0+IC0xLjFFKzMKK2RxcmVkMDkyIHJlZHVjZSAtMS4wMEUrMyAgICAgLT4gLTFFKzMKK2RxcmVkMDkzIHJlZHVjZSAtMS4xMEUrMyAgICAgLT4gLTEuMUUrMworCistLSBzb21lIHNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zLCB3ZXJlIHdlIHRvIGJlIHRyaW1taW5nCitkcXJlZDEwMCByZWR1Y2UgIDExICAgICAgICAgIC0+IDExCitkcXJlZDEwMSByZWR1Y2UgIDEwICAgICAgICAgIC0+IDFFKzEKK2RxcmVkMTAyIHJlZHVjZSAgMTAuICAgICAgICAgLT4gMUUrMQorZHFyZWQxMDMgcmVkdWNlICAxLjFFKzEgICAgICAtPiAxMQorZHFyZWQxMDQgcmVkdWNlICAxLjBFKzEgICAgICAtPiAxRSsxCitkcXJlZDEwNSByZWR1Y2UgIDEuMTBFKzIgICAgIC0+IDEuMUUrMgorZHFyZWQxMDYgcmVkdWNlICAxLjAwRSsyICAgICAtPiAxRSsyCitkcXJlZDEwNyByZWR1Y2UgIDEuMTAwRSszICAgIC0+IDEuMUUrMworZHFyZWQxMDggcmVkdWNlICAxLjAwMEUrMyAgICAtPiAxRSszCitkcXJlZDEwOSByZWR1Y2UgIDEuMDAwMDAwRSs2IC0+IDFFKzYKK2RxcmVkMTEwIHJlZHVjZSAtMTEgICAgICAgICAgLT4gLTExCitkcXJlZDExMSByZWR1Y2UgLTEwICAgICAgICAgIC0+IC0xRSsxCitkcXJlZDExMiByZWR1Y2UgLTEwLiAgICAgICAgIC0+IC0xRSsxCitkcXJlZDExMyByZWR1Y2UgLTEuMUUrMSAgICAgIC0+IC0xMQorZHFyZWQxMTQgcmVkdWNlIC0xLjBFKzEgICAgICAtPiAtMUUrMQorZHFyZWQxMTUgcmVkdWNlIC0xLjEwRSsyICAgICAtPiAtMS4xRSsyCitkcXJlZDExNiByZWR1Y2UgLTEuMDBFKzIgICAgIC0+IC0xRSsyCitkcXJlZDExNyByZWR1Y2UgLTEuMTAwRSszICAgIC0+IC0xLjFFKzMKK2RxcmVkMTE4IHJlZHVjZSAtMS4wMDBFKzMgICAgLT4gLTFFKzMKK2RxcmVkMTE5IHJlZHVjZSAtMS4wMDAwMEUrNSAgLT4gLTFFKzUKK2RxcmVkMTIwIHJlZHVjZSAtMS4wMDAwMDBFKzYgLT4gLTFFKzYKK2RxcmVkMTIxIHJlZHVjZSAtMTAuMDAwMDBFKzYgLT4gLTFFKzcKK2RxcmVkMTIyIHJlZHVjZSAtMTAwLjAwMDBFKzYgLT4gLTFFKzgKK2RxcmVkMTIzIHJlZHVjZSAtMTAwMC4wMDBFKzYgLT4gLTFFKzkKK2RxcmVkMTI0IHJlZHVjZSAtMTAwMDAuMDBFKzYgLT4gLTFFKzEwCitkcXJlZDEyNSByZWR1Y2UgLTEwMDAwMC4wRSs2IC0+IC0xRSsxMQorZHFyZWQxMjYgcmVkdWNlIC0xMDAwMDAwLkUrNiAtPiAtMUUrMTIKKworLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aAorZHFyZWQxNDAgcmVkdWNlICcyLjEnICAgICAtPiAgJzIuMScKK2RxcmVkMTQxIHJlZHVjZSAnLTIuMCcgICAgLT4gICctMicKK2RxcmVkMTQyIHJlZHVjZSAnMS4yMDAnICAgLT4gICcxLjInCitkcXJlZDE0MyByZWR1Y2UgJy0xMjAnICAgIC0+ICAnLTEuMkUrMicKK2RxcmVkMTQ0IHJlZHVjZSAnMTIwLjAwJyAgLT4gICcxLjJFKzInCitkcXJlZDE0NSByZWR1Y2UgJzAuMDAnICAgIC0+ICAnMCcKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKKy0tIG5vdGUgb3JpZ2FtaSBlZmZlY3Qgb24gc29tZSBvZiB0aGVzZQorZHFyZWQxNTEgcmVkdWNlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcXJlZDE1MiByZWR1Y2UgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMDAwMDAwRSs2MTQwICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwMEUrNjE0MAorZHFyZWQxNTMgcmVkdWNlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMEUrNjE0NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwRSs2MTQ0CitkcXJlZDE1NCByZWR1Y2UgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgLT4gMUUtNjE0MworZHFyZWQxNTUgcmVkdWNlICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+IDFFLTYxNDMKK2RxcmVkMTU2IHJlZHVjZSAgMi4wMDBFLTYxNzMgICAgICAgICAgICAgICAtPiAyRS02MTczICAgU3Vibm9ybWFsCitkcXJlZDE1NyByZWR1Y2UgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgLT4gMUUtNjE3NiAgIFN1Ym5vcm1hbAorCitkcXJlZDE2MSByZWR1Y2UgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYgIFN1Ym5vcm1hbAorZHFyZWQxNjIgcmVkdWNlICAtMi4wMDBFLTYxNzMgICAgICAgICAgICAgIC0+IC0yRS02MTczICBTdWJub3JtYWwKK2RxcmVkMTYzIHJlZHVjZSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAtMUUtNjE0MworZHFyZWQxNjQgcmVkdWNlICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzCitkcXJlZDE2NSByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDAwMDAwMEUrNjE0MCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMDBFKzYxNDAKK2RxcmVkMTY2IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwRSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDBFKzYxNDQKK2RxcmVkMTY3IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwRSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQKK2RxcmVkMTY4IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2RxcmVkMTY5IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwRSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQKKworCistLSBzcGVjaWFscyAocmVkdWNlIGRvZXMgbm90IGFmZmVjdCBwYXlsb2FkKQorZHFyZWQ4MjAgcmVkdWNlICdJbmYnICAgIC0+ICdJbmZpbml0eScKK2RxcmVkODIxIHJlZHVjZSAnLUluZicgICAtPiAnLUluZmluaXR5JworZHFyZWQ4MjIgcmVkdWNlICAgTmFOICAgIC0+ICBOYU4KK2RxcmVkODIzIHJlZHVjZSAgc05hTiAgICAtPiAgTmFOICAgIEludmFsaWRfb3BlcmF0aW9uCitkcXJlZDgyNCByZWR1Y2UgICBOYU4xMDEgLT4gIE5hTjEwMQorZHFyZWQ4MjUgcmVkdWNlICBzTmFOMDEwIC0+ICBOYU4xMCAgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVkODI3IHJlZHVjZSAgLU5hTiAgICAtPiAtTmFOCitkcXJlZDgyOCByZWR1Y2UgLXNOYU4gICAgLT4gLU5hTiAgICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZWQ4MjkgcmVkdWNlICAtTmFOMTAxIC0+IC1OYU4xMDEKK2RxcmVkODMwIHJlZHVjZSAtc05hTjAxMCAtPiAtTmFOMTAgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE51bGwgdGVzdAorZHFyZWQ5MDAgcmVkdWNlICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlbWFpbmRlci5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlbWFpbmRlci5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MGQzY2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVtYWluZGVyLmRlY1Rlc3QKQEAgLTAsMCArMSw1OTcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFSZW1haW5kZXIuZGVjVGVzdCAtLSBkZWNRdWFkIHJlbWFpbmRlciAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkKK2RxcmVtMDAxIHJlbWFpbmRlciAgMSAgICAgMSAgICAtPiAgMAorZHFyZW0wMDIgcmVtYWluZGVyICAyICAgICAxICAgIC0+ICAwCitkcXJlbTAwMyByZW1haW5kZXIgIDEgICAgIDIgICAgLT4gIDEKK2RxcmVtMDA0IHJlbWFpbmRlciAgMiAgICAgMiAgICAtPiAgMAorZHFyZW0wMDUgcmVtYWluZGVyICAwICAgICAxICAgIC0+ICAwCitkcXJlbTAwNiByZW1haW5kZXIgIDAgICAgIDIgICAgLT4gIDAKK2RxcmVtMDA3IHJlbWFpbmRlciAgMSAgICAgMyAgICAtPiAgMQorZHFyZW0wMDggcmVtYWluZGVyICAyICAgICAzICAgIC0+ICAyCitkcXJlbTAwOSByZW1haW5kZXIgIDMgICAgIDMgICAgLT4gIDAKKworZHFyZW0wMTAgcmVtYWluZGVyICAyLjQgICAxICAgIC0+ICAwLjQKK2RxcmVtMDExIHJlbWFpbmRlciAgMi40ICAgLTEgICAtPiAgMC40CitkcXJlbTAxMiByZW1haW5kZXIgIC0yLjQgIDEgICAgLT4gIC0wLjQKK2RxcmVtMDEzIHJlbWFpbmRlciAgLTIuNCAgLTEgICAtPiAgLTAuNAorZHFyZW0wMTQgcmVtYWluZGVyICAyLjQwICAxICAgIC0+ICAwLjQwCitkcXJlbTAxNSByZW1haW5kZXIgIDIuNDAwIDEgICAgLT4gIDAuNDAwCitkcXJlbTAxNiByZW1haW5kZXIgIDIuNCAgIDIgICAgLT4gIDAuNAorZHFyZW0wMTcgcmVtYWluZGVyICAyLjQwMCAyICAgIC0+ICAwLjQwMAorZHFyZW0wMTggcmVtYWluZGVyICAyLiAgICAyICAgIC0+ICAwCitkcXJlbTAxOSByZW1haW5kZXIgIDIwICAgIDIwICAgLT4gIDAKKworZHFyZW0wMjAgcmVtYWluZGVyICAxODcgICAxODcgICAgLT4gIDAKK2RxcmVtMDIxIHJlbWFpbmRlciAgNSAgICAgMiAgICAgIC0+ICAxCitkcXJlbTAyMiByZW1haW5kZXIgIDUgICAgIDIuMCAgICAtPiAgMS4wCitkcXJlbTAyMyByZW1haW5kZXIgIDUgICAgIDIuMDAwICAtPiAgMS4wMDAKK2RxcmVtMDI0IHJlbWFpbmRlciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAorZHFyZW0wMjUgcmVtYWluZGVyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCisKK2RxcmVtMDMwIHJlbWFpbmRlciAgMSAgICAgMiAgICAgIC0+ICAxCitkcXJlbTAzMSByZW1haW5kZXIgIDEgICAgIDQgICAgICAtPiAgMQorZHFyZW0wMzIgcmVtYWluZGVyICAxICAgICA4ICAgICAgLT4gIDEKKworZHFyZW0wMzMgcmVtYWluZGVyICAxICAgICAxNiAgICAgLT4gIDEKK2RxcmVtMDM0IHJlbWFpbmRlciAgMSAgICAgMzIgICAgIC0+ICAxCitkcXJlbTAzNSByZW1haW5kZXIgIDEgICAgIDY0ICAgICAtPiAgMQorZHFyZW0wNDAgcmVtYWluZGVyICAxICAgIC0yICAgICAgLT4gIDEKK2RxcmVtMDQxIHJlbWFpbmRlciAgMSAgICAtNCAgICAgIC0+ICAxCitkcXJlbTA0MiByZW1haW5kZXIgIDEgICAgLTggICAgICAtPiAgMQorZHFyZW0wNDMgcmVtYWluZGVyICAxICAgIC0xNiAgICAgLT4gIDEKK2RxcmVtMDQ0IHJlbWFpbmRlciAgMSAgICAtMzIgICAgIC0+ICAxCitkcXJlbTA0NSByZW1haW5kZXIgIDEgICAgLTY0ICAgICAtPiAgMQorZHFyZW0wNTAgcmVtYWluZGVyIC0xICAgICAyICAgICAgLT4gIC0xCitkcXJlbTA1MSByZW1haW5kZXIgLTEgICAgIDQgICAgICAtPiAgLTEKK2RxcmVtMDUyIHJlbWFpbmRlciAtMSAgICAgOCAgICAgIC0+ICAtMQorZHFyZW0wNTMgcmVtYWluZGVyIC0xICAgICAxNiAgICAgLT4gIC0xCitkcXJlbTA1NCByZW1haW5kZXIgLTEgICAgIDMyICAgICAtPiAgLTEKK2RxcmVtMDU1IHJlbWFpbmRlciAtMSAgICAgNjQgICAgIC0+ICAtMQorZHFyZW0wNjAgcmVtYWluZGVyIC0xICAgIC0yICAgICAgLT4gIC0xCitkcXJlbTA2MSByZW1haW5kZXIgLTEgICAgLTQgICAgICAtPiAgLTEKK2RxcmVtMDYyIHJlbWFpbmRlciAtMSAgICAtOCAgICAgIC0+ICAtMQorZHFyZW0wNjMgcmVtYWluZGVyIC0xICAgIC0xNiAgICAgLT4gIC0xCitkcXJlbTA2NCByZW1haW5kZXIgLTEgICAgLTMyICAgICAtPiAgLTEKK2RxcmVtMDY1IHJlbWFpbmRlciAtMSAgICAtNjQgICAgIC0+ICAtMQorCitkcXJlbTA2NiByZW1haW5kZXIgIDk5OTk5OTk5OSAgICAgMSAgLT4gMAorZHFyZW0wNjcgcmVtYWluZGVyICA5OTk5OTk5OTkuNCAgIDEgIC0+IDAuNAorZHFyZW0wNjggcmVtYWluZGVyICA5OTk5OTk5OTkuNSAgIDEgIC0+IDAuNQorZHFyZW0wNjkgcmVtYWluZGVyICA5OTk5OTk5OTkuOSAgIDEgIC0+IDAuOQorZHFyZW0wNzAgcmVtYWluZGVyICA5OTk5OTk5OTkuOTk5IDEgIC0+IDAuOTk5CitkcXJlbTA3MSByZW1haW5kZXIgIDk5OTk5OS45OTk5OTkgMSAgLT4gMC45OTk5OTkKK2RxcmVtMDcyIHJlbWFpbmRlciAgOSAgICAgICAgICAgICAxICAtPiAwCisKK2RxcmVtMDgwIHJlbWFpbmRlciAgMC4gICAgICAgICAgICAxICAtPiAwCitkcXJlbTA4MSByZW1haW5kZXIgIC4wICAgICAgICAgICAgMSAgLT4gMC4wCitkcXJlbTA4MiByZW1haW5kZXIgIDAuMDAgICAgICAgICAgMSAgLT4gMC4wMAorZHFyZW0wODMgcmVtYWluZGVyICAwLjAwRSs5ICAgICAgIDEgIC0+IDAKK2RxcmVtMDg0IHJlbWFpbmRlciAgMC4wMEUrMyAgICAgICAxICAtPiAwCitkcXJlbTA4NSByZW1haW5kZXIgIDAuMDBFKzIgICAgICAgMSAgLT4gMAorZHFyZW0wODYgcmVtYWluZGVyICAwLjAwRSsxICAgICAgIDEgIC0+IDAuMAorZHFyZW0wODcgcmVtYWluZGVyICAwLjAwRSswICAgICAgIDEgIC0+IDAuMDAKK2RxcmVtMDg4IHJlbWFpbmRlciAgMC4wMEUtMCAgICAgICAxICAtPiAwLjAwCitkcXJlbTA4OSByZW1haW5kZXIgIDAuMDBFLTEgICAgICAgMSAgLT4gMC4wMDAKK2RxcmVtMDkwIHJlbWFpbmRlciAgMC4wMEUtMiAgICAgICAxICAtPiAwLjAwMDAKK2RxcmVtMDkxIHJlbWFpbmRlciAgMC4wMEUtMyAgICAgICAxICAtPiAwLjAwMDAwCitkcXJlbTA5MiByZW1haW5kZXIgIDAuMDBFLTQgICAgICAgMSAgLT4gMC4wMDAwMDAKK2RxcmVtMDkzIHJlbWFpbmRlciAgMC4wMEUtNSAgICAgICAxICAtPiAwRS03CitkcXJlbTA5NCByZW1haW5kZXIgIDAuMDBFLTYgICAgICAgMSAgLT4gMEUtOAorZHFyZW0wOTUgcmVtYWluZGVyICAwLjAwMDBFLTUwICAgIDEgIC0+IDBFLTU0CisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgcmVtYWluZGVyIGJ5IDAKK2RxcmVtMTAxIHJlbWFpbmRlciAgMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFyZW0xMDIgcmVtYWluZGVyICAwICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJlbTEwMyByZW1haW5kZXIgLTAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxcmVtMTA0IHJlbWFpbmRlciAtMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFyZW0xMDUgcmVtYWluZGVyICAwLjBFNSAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJlbTEwNiByZW1haW5kZXIgIDAuMDAwICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKKy0tIFtTb21lIHRoaW5rIHRoaXMgbmV4dCBncm91cCBzaG91bGQgYmUgRGl2aXNpb25fYnlfemVybyBleGNlcHRpb24sIGJ1dAorLS0gSUVFRSA4NTQgaXMgZXhwbGljaXQgdGhhdCBpdCBpcyBJbnZhbGlkIG9wZXJhdGlvbiAuLiBmb3IKKy0tIHJlbWFpbmRlci1uZWFyLCBhbnl3YXldCitkcXJlbTEwNyByZW1haW5kZXIgIDAuMDAwMSAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMDggcmVtYWluZGVyICAwLjAxICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTA5IHJlbWFpbmRlciAgMC4xICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTExMCByZW1haW5kZXIgIDEgICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMTEgcmVtYWluZGVyICAxICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTEyIHJlbWFpbmRlciAxMCAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTExMyByZW1haW5kZXIgMUUrMTAwICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMTQgcmVtYWluZGVyIDFFKzM4MCAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTE1IHJlbWFpbmRlciAgMC4wMDAxIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTExNiByZW1haW5kZXIgIDAuMDEgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMTkgcmVtYWluZGVyICAwLjEgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTIwIHJlbWFpbmRlciAgMSAgICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTEyMSByZW1haW5kZXIgIDEgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMjIgcmVtYWluZGVyIDEwICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtMTIzIHJlbWFpbmRlciAxRSsxMDAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTEyNCByZW1haW5kZXIgMUUrMzg0ICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYW5kIHplcm9zIG9uIGxlZnQKK2RxcmVtMTMwIHJlbWFpbmRlciAgMCAgICAgIDEgICAtPiAgMAorZHFyZW0xMzEgcmVtYWluZGVyICAwICAgICAtMSAgIC0+ICAwCitkcXJlbTEzMiByZW1haW5kZXIgIDAuMCAgICAxICAgLT4gIDAuMAorZHFyZW0xMzMgcmVtYWluZGVyICAwLjAgICAtMSAgIC0+ICAwLjAKK2RxcmVtMTM0IHJlbWFpbmRlciAtMCAgICAgIDEgICAtPiAtMAorZHFyZW0xMzUgcmVtYWluZGVyIC0wICAgICAtMSAgIC0+IC0wCitkcXJlbTEzNiByZW1haW5kZXIgLTAuMCAgICAxICAgLT4gLTAuMAorZHFyZW0xMzcgcmVtYWluZGVyIC0wLjAgICAtMSAgIC0+IC0wLjAKKworLS0gMC41ZXJzCitkcXJlbTE0MyByZW1haW5kZXIgICAwLjUgIDIgICAgIC0+ICAwLjUKK2RxcmVtMTQ0IHJlbWFpbmRlciAgIDAuNSAgMi4xICAgLT4gIDAuNQorZHFyZW0xNDUgcmVtYWluZGVyICAgMC41ICAyLjAxICAtPiAgMC41MAorZHFyZW0xNDYgcmVtYWluZGVyICAgMC41ICAyLjAwMSAtPiAgMC41MDAKK2RxcmVtMTQ3IHJlbWFpbmRlciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKK2RxcmVtMTQ4IHJlbWFpbmRlciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK2RxcmVtMTQ5IHJlbWFpbmRlciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwCisKKy0tIHN0ZWFkaWVzCitkcXJlbTE1MCByZW1haW5kZXIgIDEgIDEgICAtPiAwCitkcXJlbTE1MSByZW1haW5kZXIgIDEgIDIgICAtPiAxCitkcXJlbTE1MiByZW1haW5kZXIgIDEgIDMgICAtPiAxCitkcXJlbTE1MyByZW1haW5kZXIgIDEgIDQgICAtPiAxCitkcXJlbTE1NCByZW1haW5kZXIgIDEgIDUgICAtPiAxCitkcXJlbTE1NSByZW1haW5kZXIgIDEgIDYgICAtPiAxCitkcXJlbTE1NiByZW1haW5kZXIgIDEgIDcgICAtPiAxCitkcXJlbTE1NyByZW1haW5kZXIgIDEgIDggICAtPiAxCitkcXJlbTE1OCByZW1haW5kZXIgIDEgIDkgICAtPiAxCitkcXJlbTE1OSByZW1haW5kZXIgIDEgIDEwICAtPiAxCitkcXJlbTE2MCByZW1haW5kZXIgIDEgIDEgICAtPiAwCitkcXJlbTE2MSByZW1haW5kZXIgIDIgIDEgICAtPiAwCitkcXJlbTE2MiByZW1haW5kZXIgIDMgIDEgICAtPiAwCitkcXJlbTE2MyByZW1haW5kZXIgIDQgIDEgICAtPiAwCitkcXJlbTE2NCByZW1haW5kZXIgIDUgIDEgICAtPiAwCitkcXJlbTE2NSByZW1haW5kZXIgIDYgIDEgICAtPiAwCitkcXJlbTE2NiByZW1haW5kZXIgIDcgIDEgICAtPiAwCitkcXJlbTE2NyByZW1haW5kZXIgIDggIDEgICAtPiAwCitkcXJlbTE2OCByZW1haW5kZXIgIDkgIDEgICAtPiAwCitkcXJlbTE2OSByZW1haW5kZXIgIDEwIDEgICAtPiAwCisKKy0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXJOZWFyCitkcXJlbTE3MSByZW1haW5kZXIgICAwLjQgIDEuMDIwIC0+ICAwLjQwMAorZHFyZW0xNzIgcmVtYWluZGVyICAgMC41MCAxLjAyMCAtPiAgMC41MDAKK2RxcmVtMTczIHJlbWFpbmRlciAgIDAuNTEgMS4wMjAgLT4gIDAuNTEwCitkcXJlbTE3NCByZW1haW5kZXIgICAwLjUyIDEuMDIwIC0+ICAwLjUyMAorZHFyZW0xNzUgcmVtYWluZGVyICAgMC42ICAxLjAyMCAtPiAgMC42MDAKKworLS0gTW9yZSBmbGF2b3VycyBvZiByZW1haW5kZXIgYnkgMAorZHFyZW0yMDEgcmVtYWluZGVyICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2RxcmVtMjAyIHJlbWFpbmRlciAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJlbTIwMyByZW1haW5kZXIgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFyZW0yMDQgcmVtYWluZGVyICAwLjAwMDEgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0yMDUgcmVtYWluZGVyICAwLjAxICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0yMDYgcmVtYWluZGVyICAwLjEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0yMDcgcmVtYWluZGVyICAxICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0yMDggcmVtYWluZGVyICAxICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0yMDkgcmVtYWluZGVyIDEwICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0yMTAgcmVtYWluZGVyIDFFKzEwMCAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0yMTEgcmVtYWluZGVyIDFFKzM4MCAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyTmVhcgorZHFyZW0yMzEgcmVtYWluZGVyICAtMC40ICAxLjAyMCAtPiAtMC40MDAKK2RxcmVtMjMyIHJlbWFpbmRlciAgLTAuNTAgMS4wMjAgLT4gLTAuNTAwCitkcXJlbTIzMyByZW1haW5kZXIgIC0wLjUxIDEuMDIwIC0+IC0wLjUxMAorZHFyZW0yMzQgcmVtYWluZGVyICAtMC41MiAxLjAyMCAtPiAtMC41MjAKK2RxcmVtMjM1IHJlbWFpbmRlciAgLTAuNiAgMS4wMjAgLT4gLTAuNjAwCisKKy0tIGhpZ2ggWHMKK2RxcmVtMjQwIHJlbWFpbmRlciAgMUUrMiAgMS4wMCAgLT4gIDAuMDAKKworLS0gZHFyZW0zeHggYXJlIGZyb20gRGlhZ0JpZ0RlY2ltYWwKK2RxcmVtMzAxIHJlbWFpbmRlciAgIDEgICAgMyAgICAgLT4gIDEKK2RxcmVtMzAyIHJlbWFpbmRlciAgIDUgICAgNSAgICAgLT4gIDAKK2RxcmVtMzAzIHJlbWFpbmRlciAgIDEzICAgMTAgICAgLT4gIDMKK2RxcmVtMzA0IHJlbWFpbmRlciAgIDEzICAgNTAgICAgLT4gIDEzCitkcXJlbTMwNSByZW1haW5kZXIgICAxMyAgIDEwMCAgIC0+ICAxMworZHFyZW0zMDYgcmVtYWluZGVyICAgMTMgICAxMDAwICAtPiAgMTMKK2RxcmVtMzA3IHJlbWFpbmRlciAgIC4xMyAgICAxICAgLT4gIDAuMTMKK2RxcmVtMzA4IHJlbWFpbmRlciAgIDAuMTMzICAxICAgLT4gIDAuMTMzCitkcXJlbTMwOSByZW1haW5kZXIgICAwLjEwMzMgMSAgIC0+ICAwLjEwMzMKK2RxcmVtMzEwIHJlbWFpbmRlciAgIDEuMDMzICAxICAgLT4gIDAuMDMzCitkcXJlbTMxMSByZW1haW5kZXIgICAxMC4zMyAgMSAgIC0+ICAwLjMzCitkcXJlbTMxMiByZW1haW5kZXIgICAxMC4zMyAxMCAgIC0+ICAwLjMzCitkcXJlbTMxMyByZW1haW5kZXIgICAxMDMuMyAgMSAgIC0+ICAwLjMKK2RxcmVtMzE0IHJlbWFpbmRlciAgIDEzMyAgIDEwICAgLT4gIDMKK2RxcmVtMzE1IHJlbWFpbmRlciAgIDEwMzMgIDEwICAgLT4gIDMKK2RxcmVtMzE2IHJlbWFpbmRlciAgIDEwMzMgIDUwICAgLT4gIDMzCitkcXJlbTMxNyByZW1haW5kZXIgICAxMDEuMCAgMyAgIC0+ICAyLjAKK2RxcmVtMzE4IHJlbWFpbmRlciAgIDEwMi4wICAzICAgLT4gIDAuMAorZHFyZW0zMTkgcmVtYWluZGVyICAgMTAzLjAgIDMgICAtPiAgMS4wCitkcXJlbTMyMCByZW1haW5kZXIgICAyLjQwICAgMSAgIC0+ICAwLjQwCitkcXJlbTMyMSByZW1haW5kZXIgICAyLjQwMCAgMSAgIC0+ICAwLjQwMAorZHFyZW0zMjIgcmVtYWluZGVyICAgMi40ICAgIDEgICAtPiAgMC40CitkcXJlbTMyMyByZW1haW5kZXIgICAyLjQgICAgMiAgIC0+ICAwLjQKK2RxcmVtMzI0IHJlbWFpbmRlciAgIDIuNDAwICAyICAgLT4gIDAuNDAwCitkcXJlbTMyNSByZW1haW5kZXIgICAxICAgMC4zICAgIC0+ICAwLjEKK2RxcmVtMzI2IHJlbWFpbmRlciAgIDEgICAwLjMwICAgLT4gIDAuMTAKK2RxcmVtMzI3IHJlbWFpbmRlciAgIDEgICAwLjMwMCAgLT4gIDAuMTAwCitkcXJlbTMyOCByZW1haW5kZXIgICAxICAgMC4zMDAwIC0+ICAwLjEwMDAKK2RxcmVtMzI5IHJlbWFpbmRlciAgIDEuMCAgICAwLjMgLT4gIDAuMQorZHFyZW0zMzAgcmVtYWluZGVyICAgMS4wMCAgIDAuMyAtPiAgMC4xMAorZHFyZW0zMzEgcmVtYWluZGVyICAgMS4wMDAgIDAuMyAtPiAgMC4xMDAKK2RxcmVtMzMyIHJlbWFpbmRlciAgIDEuMDAwMCAwLjMgLT4gIDAuMTAwMAorZHFyZW0zMzMgcmVtYWluZGVyICAgMC41ICAyICAgICAtPiAgMC41CitkcXJlbTMzNCByZW1haW5kZXIgICAwLjUgIDIuMSAgIC0+ICAwLjUKK2RxcmVtMzM1IHJlbWFpbmRlciAgIDAuNSAgMi4wMSAgLT4gIDAuNTAKK2RxcmVtMzM2IHJlbWFpbmRlciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwCitkcXJlbTMzNyByZW1haW5kZXIgICAwLjUwIDIgICAgIC0+ICAwLjUwCitkcXJlbTMzOCByZW1haW5kZXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwCitkcXJlbTMzOSByZW1haW5kZXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMAorCitkcXJlbTM0MCByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDEgICAgLT4gIDAuNTAwMDAwMAorZHFyZW0zNDEgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMAorZHFyZW0zNDIgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwCitkcXJlbTM0MyByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwMAorZHFyZW0zNDQgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAwMAorZHFyZW0zNDUgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5ICAgIC0+ICAxRS03CitkcXJlbTM0NiByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5ICAgIC0+ICAxRS04CitkcXJlbTM0NyByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OSAgICAtPiAgMUUtOQorZHFyZW0zNDggcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5ICAgIC0+ICAxRS0xMAorZHFyZW0zNDkgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5OSAgICAtPiAgMUUtMTEKK2RxcmVtMzUwIHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMgorCitkcXJlbTM1MSByZW1haW5kZXIgICAwLjAzICA3ICAtPiAgMC4wMworZHFyZW0zNTIgcmVtYWluZGVyICAgNSAgIDIgICAgLT4gIDEKK2RxcmVtMzUzIHJlbWFpbmRlciAgIDQuMSAgIDIgICAgLT4gIDAuMQorZHFyZW0zNTQgcmVtYWluZGVyICAgNC4wMSAgIDIgICAgLT4gIDAuMDEKK2RxcmVtMzU1IHJlbWFpbmRlciAgIDQuMDAxICAgMiAgICAtPiAgMC4wMDEKK2RxcmVtMzU2IHJlbWFpbmRlciAgIDQuMDAwMSAgIDIgICAgLT4gIDAuMDAwMQorZHFyZW0zNTcgcmVtYWluZGVyICAgNC4wMDAwMSAgIDIgICAgLT4gIDAuMDAwMDEKK2RxcmVtMzU4IHJlbWFpbmRlciAgIDQuMDAwMDAxICAgMiAgICAtPiAgMC4wMDAwMDEKK2RxcmVtMzU5IHJlbWFpbmRlciAgIDQuMDAwMDAwMSAgIDIgICAgLT4gIDFFLTcKKworZHFyZW0zNjAgcmVtYWluZGVyICAgMS4yICAgMC43MzQ1IC0+ICAwLjQ2NTUKK2RxcmVtMzYxIHJlbWFpbmRlciAgIDAuOCAgIDEyICAgICAtPiAgMC44CitkcXJlbTM2MiByZW1haW5kZXIgICAwLjggICAwLjIgICAgLT4gIDAuMAorZHFyZW0zNjMgcmVtYWluZGVyICAgMC44ICAgMC4zICAgIC0+ICAwLjIKK2RxcmVtMzY0IHJlbWFpbmRlciAgIDAuODAwICAgMTIgICAtPiAgMC44MDAKK2RxcmVtMzY1IHJlbWFpbmRlciAgIDAuODAwICAgMS43ICAtPiAgMC44MDAKK2RxcmVtMzY2IHJlbWFpbmRlciAgIDIuNDAwICAgMiAgICAtPiAgMC40MDAKKworZHFyZW0zNzEgcmVtYWluZGVyICAgMi40MDAgIDIgICAgICAgIC0+ICAwLjQwMAorCitkcXJlbTM4MSByZW1haW5kZXIgMTIzNDUgIDEgICAgICAgICAtPiAgMAorZHFyZW0zODIgcmVtYWluZGVyIDEyMzQ1ICAxLjAwMDEgICAgLT4gIDAuNzY1NworZHFyZW0zODMgcmVtYWluZGVyIDEyMzQ1ICAxLjAwMSAgICAgLT4gIDAuNjY4CitkcXJlbTM4NCByZW1haW5kZXIgMTIzNDUgIDEuMDEgICAgICAtPiAgMC43OAorZHFyZW0zODUgcmVtYWluZGVyIDEyMzQ1ICAxLjEgICAgICAgLT4gIDAuOAorZHFyZW0zODYgcmVtYWluZGVyIDEyMzU1ICA0ICAgICAgICAgLT4gIDMKK2RxcmVtMzg3IHJlbWFpbmRlciAxMjM0NSAgNCAgICAgICAgIC0+ICAxCitkcXJlbTM4OCByZW1haW5kZXIgMTIzNTUgIDQuMDAwMSAgICAtPiAgMi42OTEyCitkcXJlbTM4OSByZW1haW5kZXIgMTIzNDUgIDQuMDAwMSAgICAtPiAgMC42OTE0CitkcXJlbTM5MCByZW1haW5kZXIgMTIzNDUgIDQuOSAgICAgICAtPiAgMS45CitkcXJlbTM5MSByZW1haW5kZXIgMTIzNDUgIDQuOTkgICAgICAtPiAgNC43MworZHFyZW0zOTIgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5OSAgICAgLT4gIDIuNDY5CitkcXJlbTM5MyByZW1haW5kZXIgMTIzNDUgIDQuOTk5OSAgICAtPiAgMC4yNDY5CitkcXJlbTM5NCByZW1haW5kZXIgMTIzNDUgIDUgICAgICAgICAtPiAgMAorZHFyZW0zOTUgcmVtYWluZGVyIDEyMzQ1ICA1LjAwMDEgICAgLT4gIDQuNzUzMgorZHFyZW0zOTYgcmVtYWluZGVyIDEyMzQ1ICA1LjAwMSAgICAgLT4gIDIuNTMyCitkcXJlbTM5NyByZW1haW5kZXIgMTIzNDUgIDUuMDEgICAgICAtPiAgMC4zNgorZHFyZW0zOTggcmVtYWluZGVyIDEyMzQ1ICA1LjEgICAgICAgLT4gIDMuMAorCistLSB0aGUgbmFzdHkgZGl2aXNpb24tYnktMSBjYXNlcworZHFyZW00MDEgcmVtYWluZGVyICAgMC41ICAgICAgICAgMSAgIC0+ICAwLjUKK2RxcmVtNDAyIHJlbWFpbmRlciAgIDAuNTUgICAgICAgIDEgICAtPiAgMC41NQorZHFyZW00MDMgcmVtYWluZGVyICAgMC41NTUgICAgICAgMSAgIC0+ICAwLjU1NQorZHFyZW00MDQgcmVtYWluZGVyICAgMC41NTU1ICAgICAgMSAgIC0+ICAwLjU1NTUKK2RxcmVtNDA1IHJlbWFpbmRlciAgIDAuNTU1NTUgICAgIDEgICAtPiAgMC41NTU1NQorZHFyZW00MDYgcmVtYWluZGVyICAgMC41NTU1NTUgICAgMSAgIC0+ICAwLjU1NTU1NQorZHFyZW00MDcgcmVtYWluZGVyICAgMC41NTU1NTU1ICAgMSAgIC0+ICAwLjU1NTU1NTUKK2RxcmVtNDA4IHJlbWFpbmRlciAgIDAuNTU1NTU1NTUgIDEgICAtPiAgMC41NTU1NTU1NQorZHFyZW00MDkgcmVtYWluZGVyICAgMC41NTU1NTU1NTUgMSAgIC0+ICAwLjU1NTU1NTU1NQorCistLSBmb2xkZG93bnMKK2RxcmVtNDIxIHJlbWFpbmRlciAgIDFFKzYxNDQgICAgICAgIDEgIC0+ICAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxcmVtNDIyIHJlbWFpbmRlciAgIDFFKzYxNDQgIDFFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkCitkcXJlbTQyMyByZW1haW5kZXIgICAxRSs2MTQ0ICAyRSs2MTQzICAtPiAgIDBFKzYxMTEgQ2xhbXBlZAorZHFyZW00MjQgcmVtYWluZGVyICAgMUUrNjE0NCAgM0UrNjE0MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKK2RxcmVtNDI1IHJlbWFpbmRlciAgIDFFKzYxNDQgIDRFKzYxNDMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCitkcXJlbTQyNiByZW1haW5kZXIgICAxRSs2MTQ0ICA1RSs2MTQzICAtPiAgIDBFKzYxMTEgQ2xhbXBlZAorZHFyZW00MjcgcmVtYWluZGVyICAgMUUrNjE0NCAgNkUrNjE0MyAgLT4gICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKK2RxcmVtNDI4IHJlbWFpbmRlciAgIDFFKzYxNDQgIDdFKzYxNDMgIC0+ICAgMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCitkcXJlbTQyOSByZW1haW5kZXIgICAxRSs2MTQ0ICA4RSs2MTQzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorZHFyZW00MzAgcmVtYWluZGVyICAgMUUrNjE0NCAgOUUrNjE0MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKKy0tIHRpbmllcworZHFyZW00MzEgcmVtYWluZGVyICAgMUUtNjE3NSAgMUUtNjE3NiAgLT4gICAwRS02MTc2CitkcXJlbTQzMiByZW1haW5kZXIgICAxRS02MTc1ICAyRS02MTc2ICAtPiAgIDBFLTYxNzYKK2RxcmVtNDMzIHJlbWFpbmRlciAgIDFFLTYxNzUgIDNFLTYxNzYgIC0+ICAgMUUtNjE3NiBTdWJub3JtYWwKK2RxcmVtNDM0IHJlbWFpbmRlciAgIDFFLTYxNzUgIDRFLTYxNzYgIC0+ICAgMkUtNjE3NiBTdWJub3JtYWwKK2RxcmVtNDM1IHJlbWFpbmRlciAgIDFFLTYxNzUgIDVFLTYxNzYgIC0+ICAgMEUtNjE3NgorZHFyZW00MzYgcmVtYWluZGVyICAgMUUtNjE3NSAgNkUtNjE3NiAgLT4gICA0RS02MTc2IFN1Ym5vcm1hbAorZHFyZW00MzcgcmVtYWluZGVyICAgMUUtNjE3NSAgN0UtNjE3NiAgLT4gICAzRS02MTc2IFN1Ym5vcm1hbAorZHFyZW00MzggcmVtYWluZGVyICAgMUUtNjE3NSAgOEUtNjE3NiAgLT4gICAyRS02MTc2IFN1Ym5vcm1hbAorZHFyZW00MzkgcmVtYWluZGVyICAgMUUtNjE3NSAgOUUtNjE3NiAgLT4gICAxRS02MTc2IFN1Ym5vcm1hbAorZHFyZW00NDAgcmVtYWluZGVyICAgMUUtNjE3NSAxMEUtNjE3NiAgLT4gICAwRS02MTc2CitkcXJlbTQ0MSByZW1haW5kZXIgICAxRS02MTc1IDExRS02MTc2ICAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsCitkcXJlbTQ0MiByZW1haW5kZXIgMTAwRS02MTc1IDExRS02MTc2ICAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsCitkcXJlbTQ0MyByZW1haW5kZXIgMTAwRS02MTc1IDIwRS02MTc2ICAtPiAgIDBFLTYxNzYKK2RxcmVtNDQ0IHJlbWFpbmRlciAxMDBFLTYxNzUgMjFFLTYxNzYgIC0+IDEuM0UtNjE3NSBTdWJub3JtYWwKK2RxcmVtNDQ1IHJlbWFpbmRlciAxMDBFLTYxNzUgMzBFLTYxNzYgIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwKKworLS0gemVybyBzaWducworZHFyZW02NTAgcmVtYWluZGVyICAxICAxIC0+ICAwCitkcXJlbTY1MSByZW1haW5kZXIgLTEgIDEgLT4gLTAKK2RxcmVtNjUyIHJlbWFpbmRlciAgMSAtMSAtPiAgMAorZHFyZW02NTMgcmVtYWluZGVyIC0xIC0xIC0+IC0wCitkcXJlbTY1NCByZW1haW5kZXIgIDAgIDEgLT4gIDAKK2RxcmVtNjU1IHJlbWFpbmRlciAtMCAgMSAtPiAtMAorZHFyZW02NTYgcmVtYWluZGVyICAwIC0xIC0+ICAwCitkcXJlbTY1NyByZW1haW5kZXIgLTAgLTEgLT4gLTAKK2RxcmVtNjU4IHJlbWFpbmRlciAgMC4wMCAgMSAgLT4gIDAuMDAKK2RxcmVtNjU5IHJlbWFpbmRlciAtMC4wMCAgMSAgLT4gLTAuMDAKKworLS0gU3BlY2lhbHMKK2RxcmVtNjgwIHJlbWFpbmRlciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW02ODEgcmVtYWluZGVyICBJbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTY4MiByZW1haW5kZXIgIEluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNjgzIHJlbWFpbmRlciAgSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW02ODQgcmVtYWluZGVyICBJbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTY4NSByZW1haW5kZXIgIEluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNjg2IHJlbWFpbmRlciAgSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW02ODcgcmVtYWluZGVyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTY4OCByZW1haW5kZXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwCitkcXJlbTY4OSByZW1haW5kZXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNjkxIHJlbWFpbmRlciAtMSAgICAgSW5mICAgLT4gLTEKK2RxcmVtNjkyIHJlbWFpbmRlciAgMCAgICAgSW5mICAgLT4gIDAKK2RxcmVtNjkzIHJlbWFpbmRlciAtMCAgICAgSW5mICAgLT4gLTAKK2RxcmVtNjk0IHJlbWFpbmRlciAgMSAgICAgSW5mICAgLT4gIDEKK2RxcmVtNjk1IHJlbWFpbmRlciAgMTAwMCAgSW5mICAgLT4gIDEwMDAKK2RxcmVtNjk2IHJlbWFpbmRlciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcXJlbTcwMCByZW1haW5kZXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzAxIHJlbWFpbmRlciAtSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03MDIgcmVtYWluZGVyIC1JbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTcwMyByZW1haW5kZXIgLUluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzA0IHJlbWFpbmRlciAtSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03MDUgcmVtYWluZGVyIC1JbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTcwNiByZW1haW5kZXIgLUluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzA3IHJlbWFpbmRlciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03MDggcmVtYWluZGVyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTcwOSByZW1haW5kZXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwCitkcXJlbTcxMCByZW1haW5kZXIgLTEgICAgLUluZiAgIC0+IC0xCitkcXJlbTcxMSByZW1haW5kZXIgLTAgICAgLUluZiAgIC0+IC0wCitkcXJlbTcxMiByZW1haW5kZXIgIDAgICAgLUluZiAgIC0+ICAwCitkcXJlbTcxMyByZW1haW5kZXIgIDEgICAgLUluZiAgIC0+ICAxCitkcXJlbTcxNCByZW1haW5kZXIgIDEwMDAgLUluZiAgIC0+ICAxMDAwCitkcXJlbTcxNSByZW1haW5kZXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFyZW03MjEgcmVtYWluZGVyICBOYU4gLUluZiAgICAtPiAgTmFOCitkcXJlbTcyMiByZW1haW5kZXIgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK2RxcmVtNzIzIHJlbWFpbmRlciAgTmFOIC0xICAgICAgLT4gIE5hTgorZHFyZW03MjQgcmVtYWluZGVyICBOYU4gLTAgICAgICAtPiAgTmFOCitkcXJlbTcyNSByZW1haW5kZXIgLU5hTiAgMCAgICAgIC0+IC1OYU4KK2RxcmVtNzI2IHJlbWFpbmRlciAgTmFOICAxICAgICAgLT4gIE5hTgorZHFyZW03MjcgcmVtYWluZGVyICBOYU4gIDEwMDAgICAtPiAgTmFOCitkcXJlbTcyOCByZW1haW5kZXIgIE5hTiAgSW5mICAgIC0+ICBOYU4KK2RxcmVtNzI5IHJlbWFpbmRlciAgTmFOIC1OYU4gICAgLT4gIE5hTgorZHFyZW03MzAgcmVtYWluZGVyIC1JbmYgIE5hTiAgICAtPiAgTmFOCitkcXJlbTczMSByZW1haW5kZXIgLTEwMDAgTmFOICAgIC0+ICBOYU4KK2RxcmVtNzMyIHJlbWFpbmRlciAtMSAgICBOYU4gICAgLT4gIE5hTgorZHFyZW03MzMgcmVtYWluZGVyIC0wICAgLU5hTiAgICAtPiAtTmFOCitkcXJlbTczNCByZW1haW5kZXIgIDAgICAgTmFOICAgIC0+ICBOYU4KK2RxcmVtNzM1IHJlbWFpbmRlciAgMSAgIC1OYU4gICAgLT4gLU5hTgorZHFyZW03MzYgcmVtYWluZGVyICAxMDAwIE5hTiAgICAtPiAgTmFOCitkcXJlbTczNyByZW1haW5kZXIgIEluZiAgTmFOICAgIC0+ICBOYU4KKworZHFyZW03NDEgcmVtYWluZGVyICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NDIgcmVtYWluZGVyICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NDMgcmVtYWluZGVyIC1zTmFOIC0xICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NDQgcmVtYWluZGVyICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NDUgcmVtYWluZGVyICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NDYgcmVtYWluZGVyICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NDcgcmVtYWluZGVyICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NDkgcmVtYWluZGVyICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NTAgcmVtYWluZGVyICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NTEgcmVtYWluZGVyICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NTIgcmVtYWluZGVyIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NTMgcmVtYWluZGVyIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NTQgcmVtYWluZGVyIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NTUgcmVtYWluZGVyIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NTYgcmVtYWluZGVyICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NTcgcmVtYWluZGVyICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NTggcmVtYWluZGVyICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NTkgcmVtYWluZGVyICBJbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdpbmcgTmFOcworZHFyZW03NjAgcmVtYWluZGVyICBOYU4xICAgTmFONyAgIC0+ICBOYU4xCitkcXJlbTc2MSByZW1haW5kZXIgc05hTjIgICBOYU44ICAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24KK2RxcmVtNzYyIHJlbWFpbmRlciAgTmFOMyAgc05hTjkgICAtPiAgTmFOOSBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW03NjMgcmVtYWluZGVyIHNOYU40ICBzTmFOMTAgIC0+ICBOYU40IEludmFsaWRfb3BlcmF0aW9uCitkcXJlbTc2NCByZW1haW5kZXIgICAgMTUgICBOYU4xMSAgLT4gIE5hTjExCitkcXJlbTc2NSByZW1haW5kZXIgIE5hTjYgICBOYU4xMiAgLT4gIE5hTjYKK2RxcmVtNzY2IHJlbWFpbmRlciAgSW5mICAgIE5hTjEzICAtPiAgTmFOMTMKK2RxcmVtNzY3IHJlbWFpbmRlciAgTmFOMTQgIC1JbmYgICAtPiAgTmFOMTQKK2RxcmVtNzY4IHJlbWFpbmRlciAgICAwICAgIE5hTjE1ICAtPiAgTmFOMTUKK2RxcmVtNzY5IHJlbWFpbmRlciAgTmFOMTYgICAtMCAgICAtPiAgTmFOMTYKKworLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlCitkcXJlbTc3MCAgcmVtYWluZGVyICAxMjM0NTY4ODg4ODg4ODg3Nzc3Nzc3Nzc3ODkwMTIzNDU2ICAxMCAgICAtPiAgNgorZHFyZW03NzEgIHJlbWFpbmRlciAgMTIzNDU2ODg4ODg4ODg4Nzc3Nzc3Nzc3Nzg5MDEyMzQ1NiAgIDEgICAgLT4gIDAKK2RxcmVtNzcyICByZW1haW5kZXIgIDEyMzQ1Njg4ODg4ODg4ODc3Nzc3Nzc3Nzc4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFyZW03NzMgIHJlbWFpbmRlciAgMTIzNDU2ODg4ODg4ODg4Nzc3Nzc3Nzc3Nzg5MDEyMzQ1NiAgIDAuMDEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MKK2RxcmVtODAxIHJlbWFpbmRlciAxMjM0NTY3ODAwMCAxMDAgLT4gMAorZHFyZW04MDIgcmVtYWluZGVyIDEgMTIzNDU2NzgwMDAgICAtPiAxCitkcXJlbTgwMyByZW1haW5kZXIgMTIzNDU2NzgwMCAgMTAgIC0+IDAKK2RxcmVtODA0IHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAgICAgLT4gMQorZHFyZW04MDUgcmVtYWluZGVyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCitkcXJlbTgwNiByZW1haW5kZXIgMSAxMjM0NTY3ODkwICAgIC0+IDEKK2RxcmVtODA3IHJlbWFpbmRlciAxMjM0NTY3ODkxICAxMCAgLT4gMQorZHFyZW04MDggcmVtYWluZGVyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkcXJlbTgwOSByZW1haW5kZXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDEKK2RxcmVtODEwIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAxICAgLT4gMQorZHFyZW04MTEgcmVtYWluZGVyIDEyMzQ1Njc4OTYgIDEwICAtPiA2CitkcXJlbTgxMiByZW1haW5kZXIgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworZHFyZW04MjEgcmVtYWluZGVyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCitkcXJlbTgyMiByZW1haW5kZXIgMSAxMjM0NTY3ODAwMCAgIC0+IDEKK2RxcmVtODIzIHJlbWFpbmRlciAxMjM0NTY3ODAwICAxMCAgLT4gMAorZHFyZW04MjQgcmVtYWluZGVyIDEgMTIzNDU2NzgwMCAgICAtPiAxCitkcXJlbTgyNSByZW1haW5kZXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDAKK2RxcmVtODI2IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAgICAgLT4gMQorZHFyZW04MjcgcmVtYWluZGVyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCitkcXJlbTgyOCByZW1haW5kZXIgMSAxMjM0NTY3ODkxICAgIC0+IDEKK2RxcmVtODI5IHJlbWFpbmRlciAxMjM0NTY3ODkwMSAxMDAgLT4gMQorZHFyZW04MzAgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkcXJlbTgzMSByZW1haW5kZXIgMTIzNDU2Nzg5NiAgMTAgIC0+IDYKK2RxcmVtODMyIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSBmcm9tIGRpdmlkZWludAorZHFyZW04NDAgcmVtYWluZGVyICAxMDAwMDAwMDAuMCAgIDEgIC0+ICAwLjAKK2RxcmVtODQxIHJlbWFpbmRlciAgMTAwMDAwMDAwLjQgICAxICAtPiAgMC40CitkcXJlbTg0MiByZW1haW5kZXIgIDEwMDAwMDAwMC41ICAgMSAgLT4gIDAuNQorZHFyZW04NDMgcmVtYWluZGVyICAxMDAwMDAwMDAuOSAgIDEgIC0+ICAwLjkKK2RxcmVtODQ0IHJlbWFpbmRlciAgMTAwMDAwMDAwLjk5OSAxICAtPiAgMC45OTkKK2RxcmVtODUwIHJlbWFpbmRlciAgMTAwMDAwMDAzICAgICA1ICAtPiAgMworZHFyZW04NTEgcmVtYWluZGVyICAxMDAwMDAwMyAgICAgIDUgIC0+ICAzCitkcXJlbTg1MiByZW1haW5kZXIgIDEwMDAwMDMgICAgICAgNSAgLT4gIDMKK2RxcmVtODUzIHJlbWFpbmRlciAgMTAwMDAzICAgICAgICA1ICAtPiAgMworZHFyZW04NTQgcmVtYWluZGVyICAxMDAwMyAgICAgICAgIDUgIC0+ICAzCitkcXJlbTg1NSByZW1haW5kZXIgIDEwMDMgICAgICAgICAgNSAgLT4gIDMKK2RxcmVtODU2IHJlbWFpbmRlciAgMTAzICAgICAgICAgICA1ICAtPiAgMworZHFyZW04NTcgcmVtYWluZGVyICAxMyAgICAgICAgICAgIDUgIC0+ICAzCitkcXJlbTg1OCByZW1haW5kZXIgIDEgICAgICAgICAgICAgNSAgLT4gIDEKKworLS0gVmxhZGltaXIncyBjYXNlcyAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2RxcmVtODYwIHJlbWFpbmRlciAxMjMuMGUxIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2RxcmVtODYxIHJlbWFpbmRlciAxMjMwICAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2RxcmVtODYyIHJlbWFpbmRlciAxMi4zZTIgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2RxcmVtODYzIHJlbWFpbmRlciAxLjIzZTMgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2RxcmVtODY0IHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2RxcmVtODcwIHJlbWFpbmRlciAxMjNlMSAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODcxIHJlbWFpbmRlciAxMjNlMSAgICAgMTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODcyIHJlbWFpbmRlciAxMjNlMSAgICAgIDEwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODczIHJlbWFpbmRlciAxMjNlMSAgICAgICAxMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODc0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgMTAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODc1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDEwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODc2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAxMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODc3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODc4IHJlbWFpbmRlciAxMjMwICAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODc5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDEwMDAwMDAwIC0+IDEyMzAKK2RxcmVtODgwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAxMDAwMDAwIC0+IDEyMzAKK2RxcmVtODgxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgMTAwMDAwIC0+IDEyMzAKK2RxcmVtODgyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDEwMDAwIC0+IDEyMzAKK2RxcmVtODgzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAxMDAwIC0+ICAyMzAKK2RxcmVtODg0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgMTAwIC0+ICAgMzAKK2RxcmVtODg1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDEwIC0+ICAgIDAKK2RxcmVtODg2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICAxIC0+ICAgIDAKKworZHFyZW04OTAgcmVtYWluZGVyIDEyM2UxICAgIDIwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04OTEgcmVtYWluZGVyIDEyM2UxICAgICAyMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04OTIgcmVtYWluZGVyIDEyM2UxICAgICAgMjAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04OTMgcmVtYWluZGVyIDEyM2UxICAgICAgIDIwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04OTQgcmVtYWluZGVyIDEyM2UxICAgICAgICAyMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04OTUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgMjAwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04OTYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDIwMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04OTcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAyMDAwMDAwMDAgLT4gMTIzMAorZHFyZW04OTkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgMjAwMDAwMDAgLT4gMTIzMAorZHFyZW05MDAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDIwMDAwMDAgLT4gMTIzMAorZHFyZW05MDEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAyMDAwMDAgLT4gMTIzMAorZHFyZW05MDIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgMjAwMDAgLT4gMTIzMAorZHFyZW05MDMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDIwMDAgLT4gMTIzMAorZHFyZW05MDQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAyMDAgLT4gICAzMAorZHFyZW05MDUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgMjAgLT4gICAxMAorZHFyZW05MDYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDIgLT4gICAgMAorCitkcXJlbTkxMCByZW1haW5kZXIgMTIzZTEgICAgNTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkxMSByZW1haW5kZXIgMTIzZTEgICAgIDUwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkxMiByZW1haW5kZXIgMTIzZTEgICAgICA1MDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkxMyByZW1haW5kZXIgMTIzZTEgICAgICAgNTAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkxNCByZW1haW5kZXIgMTIzZTEgICAgICAgIDUwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkxNSByZW1haW5kZXIgMTIzZTEgICAgICAgICA1MDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkxNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgNTAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkxNyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDUwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTkxOSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICA1MDAwMDAwMCAtPiAxMjMwCitkcXJlbTkyMCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgNTAwMDAwMCAtPiAxMjMwCitkcXJlbTkyMSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDUwMDAwMCAtPiAxMjMwCitkcXJlbTkyMiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICA1MDAwMCAtPiAxMjMwCitkcXJlbTkyMyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgNTAwMCAtPiAxMjMwCitkcXJlbTkyNCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDUwMCAtPiAgMjMwCitkcXJlbTkyNSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICA1MCAtPiAgIDMwCitkcXJlbTkyNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgNSAtPiAgICAwCisKK2RxcmVtOTMwIHJlbWFpbmRlciAxMjNlMSAgICA5MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTMxIHJlbWFpbmRlciAxMjNlMSAgICAgOTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTMyIHJlbWFpbmRlciAxMjNlMSAgICAgIDkwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTMzIHJlbWFpbmRlciAxMjNlMSAgICAgICA5MDAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTM0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgOTAwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTM1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDkwMDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTM2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICA5MDAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTM3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgOTAwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTM5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDkwMDAwMDAwIC0+IDEyMzAKK2RxcmVtOTQwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICA5MDAwMDAwIC0+IDEyMzAKK2RxcmVtOTQxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgOTAwMDAwIC0+IDEyMzAKK2RxcmVtOTQyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDkwMDAwIC0+IDEyMzAKK2RxcmVtOTQzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICA5MDAwIC0+IDEyMzAKK2RxcmVtOTQ0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgOTAwIC0+ICAzMzAKK2RxcmVtOTQ1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDkwIC0+ICAgNjAKK2RxcmVtOTQ2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICA5IC0+ICAgIDYKKworZHFyZW05NTAgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJlbTk2MSByZW1haW5kZXIgMTIzZTEgICAyOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RxcmVtOTYyIHJlbWFpbmRlciAxMjNlMSAgIDM5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFyZW05NjMgcmVtYWluZGVyIDEyM2UxICAgNDk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJlbTk2NCByZW1haW5kZXIgMTIzZTEgICA1OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RxcmVtOTY1IHJlbWFpbmRlciAxMjNlMSAgIDY5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFyZW05NjYgcmVtYWluZGVyIDEyM2UxICAgNzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCitkcXJlbTk2NyByZW1haW5kZXIgMTIzZTEgICA4OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK2RxcmVtOTY4IHJlbWFpbmRlciAxMjNlMSAgIDk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFyZW05NjkgcmVtYWluZGVyIDEyM2UxICAgOTg3NjU0MzIxMDk4NzY1NCAtPiAxMjMwCisKK2RxcmVtOTgwIHJlbWFpbmRlciAxMjNlMSAxMDAwRTI5OSAtPiAxLjIzRSszICAtLSAxMjNFKzEgaW50ZXJuYWxseQorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0KK2RxcmVtMTA1MSByZW1haW5kZXIgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFyZW0xMDUyIHJlbWFpbmRlciAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitkcXJlbTEwNTMgcmVtYWluZGVyIC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2RxcmVtMTA1NCByZW1haW5kZXIgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFyZW0xMDU1IHJlbWFpbmRlciAgMWUtMjc3ICAxZSszMTEgLT4gIDFFLTI3NworZHFyZW0xMDU2IHJlbWFpbmRlciAgMWUtMjc3IC0xZSszMTEgLT4gIDFFLTI3NworZHFyZW0xMDU3IHJlbWFpbmRlciAtMWUtMjc3ICAxZSszMTEgLT4gLTFFLTI3NworZHFyZW0xMDU4IHJlbWFpbmRlciAtMWUtMjc3IC0xZSszMTEgLT4gLTFFLTI3NworCistLSBHeXVyaXMgZXhhbXBsZQorZHFyZW0xMDcwIHJlbWFpbmRlciA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0MyA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4OTAwMEUtNjE0MyAtPiA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0MworCistLSBkZXN0cnVjdGl2ZSBzdWJ0cmFjdAorZHFyZW0xMTIwICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgMC43NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjgKK2RxcmVtMTEyMSAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAwLjY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4Nzc5CitkcXJlbTExMjIgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIDAuNTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODg5MAorZHFyZW0xMTIzICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyNTUgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgMi42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2ODcKK2RxcmVtMTEyNCAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkyCitkcXJlbTExMjUgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAgIDMuNjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI1MQorZHFyZW0xMTI2ICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAgIDEuNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcKK2RxcmVtMTEyNyAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIDQuMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2CitkcXJlbTExMjggIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIDQuMzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1OQorCistLSBOdWxsIHRlc3RzCitkcXJlbTEwMDAgcmVtYWluZGVyIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyZW0xMDAxIHJlbWFpbmRlciAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlbWFpbmRlck5lYXIuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSZW1haW5kZXJOZWFyLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkMjczZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSZW1haW5kZXJOZWFyLmRlY1Rlc3QKQEAgLTAsMCArMSw2MzEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFSZW1haW5kZXJOZWFyLmRlY1Rlc3QgLS0gZGVjUXVhZCByZW1haW5kZXItbmVhciAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkKK2Rxcm1uMDAxIHJlbWFpbmRlcm5lYXIgIDEgICAgIDEgICAgLT4gIDAKK2Rxcm1uMDAyIHJlbWFpbmRlcm5lYXIgIDIgICAgIDEgICAgLT4gIDAKK2Rxcm1uMDAzIHJlbWFpbmRlcm5lYXIgIDEgICAgIDIgICAgLT4gIDEKK2Rxcm1uMDA0IHJlbWFpbmRlcm5lYXIgIDIgICAgIDIgICAgLT4gIDAKK2Rxcm1uMDA1IHJlbWFpbmRlcm5lYXIgIDAgICAgIDEgICAgLT4gIDAKK2Rxcm1uMDA2IHJlbWFpbmRlcm5lYXIgIDAgICAgIDIgICAgLT4gIDAKK2Rxcm1uMDA3IHJlbWFpbmRlcm5lYXIgIDEgICAgIDMgICAgLT4gIDEKK2Rxcm1uMDA4IHJlbWFpbmRlcm5lYXIgIDIgICAgIDMgICAgLT4gLTEKK2Rxcm1uMDA5IHJlbWFpbmRlcm5lYXIgIDMgICAgIDMgICAgLT4gIDAKKworZHFybW4wMTAgcmVtYWluZGVybmVhciAgMi40ICAgMSAgICAtPiAgMC40CitkcXJtbjAxMSByZW1haW5kZXJuZWFyICAyLjQgICAtMSAgIC0+ICAwLjQKK2Rxcm1uMDEyIHJlbWFpbmRlcm5lYXIgIC0yLjQgIDEgICAgLT4gIC0wLjQKK2Rxcm1uMDEzIHJlbWFpbmRlcm5lYXIgIC0yLjQgIC0xICAgLT4gIC0wLjQKK2Rxcm1uMDE0IHJlbWFpbmRlcm5lYXIgIDIuNDAgIDEgICAgLT4gIDAuNDAKK2Rxcm1uMDE1IHJlbWFpbmRlcm5lYXIgIDIuNDAwIDEgICAgLT4gIDAuNDAwCitkcXJtbjAxNiByZW1haW5kZXJuZWFyICAyLjQgICAyICAgIC0+ICAwLjQKK2Rxcm1uMDE3IHJlbWFpbmRlcm5lYXIgIDIuNDAwIDIgICAgLT4gIDAuNDAwCitkcXJtbjAxOCByZW1haW5kZXJuZWFyICAyLiAgICAyICAgIC0+ICAwCitkcXJtbjAxOSByZW1haW5kZXJuZWFyICAyMCAgICAyMCAgIC0+ICAwCisKK2Rxcm1uMDIwIHJlbWFpbmRlcm5lYXIgIDE4NyAgIDE4NyAgICAtPiAgMAorZHFybW4wMjEgcmVtYWluZGVybmVhciAgNSAgICAgMiAgICAgIC0+ICAxCitkcXJtbjAyMiByZW1haW5kZXJuZWFyICA1ICAgICAyLjAgICAgLT4gIDEuMAorZHFybW4wMjMgcmVtYWluZGVybmVhciAgNSAgICAgMi4wMDAgIC0+ICAxLjAwMAorZHFybW4wMjQgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAorZHFybW4wMjUgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAorCitkcXJtbjAzMCByZW1haW5kZXJuZWFyICAxICAgICAyICAgICAgLT4gIDEKK2Rxcm1uMDMxIHJlbWFpbmRlcm5lYXIgIDEgICAgIDQgICAgICAtPiAgMQorZHFybW4wMzIgcmVtYWluZGVybmVhciAgMSAgICAgOCAgICAgIC0+ICAxCisKK2Rxcm1uMDMzIHJlbWFpbmRlcm5lYXIgIDEgICAgIDE2ICAgICAtPiAgMQorZHFybW4wMzQgcmVtYWluZGVybmVhciAgMSAgICAgMzIgICAgIC0+ICAxCitkcXJtbjAzNSByZW1haW5kZXJuZWFyICAxICAgICA2NCAgICAgLT4gIDEKK2Rxcm1uMDQwIHJlbWFpbmRlcm5lYXIgIDEgICAgLTIgICAgICAtPiAgMQorZHFybW4wNDEgcmVtYWluZGVybmVhciAgMSAgICAtNCAgICAgIC0+ICAxCitkcXJtbjA0MiByZW1haW5kZXJuZWFyICAxICAgIC04ICAgICAgLT4gIDEKK2Rxcm1uMDQzIHJlbWFpbmRlcm5lYXIgIDEgICAgLTE2ICAgICAtPiAgMQorZHFybW4wNDQgcmVtYWluZGVybmVhciAgMSAgICAtMzIgICAgIC0+ICAxCitkcXJtbjA0NSByZW1haW5kZXJuZWFyICAxICAgIC02NCAgICAgLT4gIDEKK2Rxcm1uMDUwIHJlbWFpbmRlcm5lYXIgLTEgICAgIDIgICAgICAtPiAgLTEKK2Rxcm1uMDUxIHJlbWFpbmRlcm5lYXIgLTEgICAgIDQgICAgICAtPiAgLTEKK2Rxcm1uMDUyIHJlbWFpbmRlcm5lYXIgLTEgICAgIDggICAgICAtPiAgLTEKK2Rxcm1uMDUzIHJlbWFpbmRlcm5lYXIgLTEgICAgIDE2ICAgICAtPiAgLTEKK2Rxcm1uMDU0IHJlbWFpbmRlcm5lYXIgLTEgICAgIDMyICAgICAtPiAgLTEKK2Rxcm1uMDU1IHJlbWFpbmRlcm5lYXIgLTEgICAgIDY0ICAgICAtPiAgLTEKK2Rxcm1uMDYwIHJlbWFpbmRlcm5lYXIgLTEgICAgLTIgICAgICAtPiAgLTEKK2Rxcm1uMDYxIHJlbWFpbmRlcm5lYXIgLTEgICAgLTQgICAgICAtPiAgLTEKK2Rxcm1uMDYyIHJlbWFpbmRlcm5lYXIgLTEgICAgLTggICAgICAtPiAgLTEKK2Rxcm1uMDYzIHJlbWFpbmRlcm5lYXIgLTEgICAgLTE2ICAgICAtPiAgLTEKK2Rxcm1uMDY0IHJlbWFpbmRlcm5lYXIgLTEgICAgLTMyICAgICAtPiAgLTEKK2Rxcm1uMDY1IHJlbWFpbmRlcm5lYXIgLTEgICAgLTY0ICAgICAtPiAgLTEKKworZHFybW4wNjYgcmVtYWluZGVybmVhciAgICAgICAgICA5LjkgICAxICAtPiAtMC4xCitkcXJtbjA2NyByZW1haW5kZXJuZWFyICAgICAgICAgOTkuNyAgIDEgIC0+IC0wLjMKK2Rxcm1uMDY4IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OSAgICAgMSAgLT4gMAorZHFybW4wNjkgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjQgICAxICAtPiAwLjQKK2Rxcm1uMDcwIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gLTAuNQorZHFybW4wNzEgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjkgICAxICAtPiAtMC4xCitkcXJtbjA3MiByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuOTk5IDEgIC0+IC0wLjAwMQorZHFybW4wNzMgcmVtYWluZGVybmVhciAgOTk5OTk5Ljk5OTk5OSAxICAtPiAtMC4wMDAwMDEKK2Rxcm1uMDc0IHJlbWFpbmRlcm5lYXIgIDkgICAgICAgICAgICAgMSAgLT4gMAorZHFybW4wNzUgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAwCitkcXJtbjA3NiByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDIgIC0+IC0xCitkcXJtbjA3NyByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDMgIC0+IDAKK2Rxcm1uMDc4IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgNCAgLT4gLTEKKworZHFybW4wODAgcmVtYWluZGVybmVhciAgMC4gICAgICAgICAgICAxICAtPiAwCitkcXJtbjA4MSByZW1haW5kZXJuZWFyICAuMCAgICAgICAgICAgIDEgIC0+IDAuMAorZHFybW4wODIgcmVtYWluZGVybmVhciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwCitkcXJtbjA4MyByZW1haW5kZXJuZWFyICAwLjAwRSs5ICAgICAgIDEgIC0+IDAKK2Rxcm1uMDg0IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzMgICAgICAgMSAgLT4gMAorZHFybW4wODUgcmVtYWluZGVybmVhciAgMC4wMEUrMiAgICAgICAxICAtPiAwCitkcXJtbjA4NiByZW1haW5kZXJuZWFyICAwLjAwRSsxICAgICAgIDEgIC0+IDAuMAorZHFybW4wODcgcmVtYWluZGVybmVhciAgMC4wMEUrMCAgICAgICAxICAtPiAwLjAwCitkcXJtbjA4OCByZW1haW5kZXJuZWFyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDAKK2Rxcm1uMDg5IHJlbWFpbmRlcm5lYXIgIDAuMDBFLTEgICAgICAgMSAgLT4gMC4wMDAKK2Rxcm1uMDkwIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTIgICAgICAgMSAgLT4gMC4wMDAwCitkcXJtbjA5MSByZW1haW5kZXJuZWFyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDAKK2Rxcm1uMDkyIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTQgICAgICAgMSAgLT4gMC4wMDAwMDAKK2Rxcm1uMDkzIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTUgICAgICAgMSAgLT4gMEUtNworZHFybW4wOTQgcmVtYWluZGVybmVhciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04CitkcXJtbjA5NSByZW1haW5kZXJuZWFyICAwLjAwMDBFLTUwICAgIDEgIC0+IDBFLTU0CisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwCitkcXJtbjEwMSByZW1haW5kZXJuZWFyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJtbjEwMiByZW1haW5kZXJuZWFyICAwICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJtbjEwMyByZW1haW5kZXJuZWFyIC0wICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJtbjEwNCByZW1haW5kZXJuZWFyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJtbjEwNSByZW1haW5kZXJuZWFyICAwLjBFNSAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJtbjEwNiByZW1haW5kZXJuZWFyICAwLjAwMCAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCistLSBbU29tZSB0aGluayB0aGlzIG5leHQgZ3JvdXAgc2hvdWxkIGJlIERpdmlzaW9uX2J5X3plcm8gZXhjZXB0aW9uLCBidXQKKy0tIElFRUUgODU0IGlzIGV4cGxpY2l0IHRoYXQgaXQgaXMgSW52YWxpZCBvcGVyYXRpb24gLi4gZm9yCistLSByZW1haW5kZXItbmVhciwgYW55d2F5XQorZHFybW4xMDcgcmVtYWluZGVybmVhciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjEwOCByZW1haW5kZXJuZWFyICAwLjAxICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTA5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMTAgcmVtYWluZGVybmVhciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjExMSByZW1haW5kZXJuZWFyICAxICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTEyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMTMgcmVtYWluZGVybmVhciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjExNCByZW1haW5kZXJuZWFyIDFFKzM4MCAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTE1IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMTYgcmVtYWluZGVybmVhciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjExOSByZW1haW5kZXJuZWFyICAwLjEgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTIwIHJlbWFpbmRlcm5lYXIgIDEgICAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMjEgcmVtYWluZGVybmVhciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjEyMiByZW1haW5kZXJuZWFyIDEwICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMTIzIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4xMjQgcmVtYWluZGVybmVhciAxRSszODQgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhbmQgemVyb3Mgb24gbGVmdAorZHFybW4xMzAgcmVtYWluZGVybmVhciAgMCAgICAgIDEgICAtPiAgMAorZHFybW4xMzEgcmVtYWluZGVybmVhciAgMCAgICAgLTEgICAtPiAgMAorZHFybW4xMzIgcmVtYWluZGVybmVhciAgMC4wICAgIDEgICAtPiAgMC4wCitkcXJtbjEzMyByZW1haW5kZXJuZWFyICAwLjAgICAtMSAgIC0+ICAwLjAKK2Rxcm1uMTM0IHJlbWFpbmRlcm5lYXIgLTAgICAgICAxICAgLT4gLTAKK2Rxcm1uMTM1IHJlbWFpbmRlcm5lYXIgLTAgICAgIC0xICAgLT4gLTAKK2Rxcm1uMTM2IHJlbWFpbmRlcm5lYXIgLTAuMCAgICAxICAgLT4gLTAuMAorZHFybW4xMzcgcmVtYWluZGVybmVhciAtMC4wICAgLTEgICAtPiAtMC4wCisKKy0tIDAuNWVycworZHFybW4xNDMgcmVtYWluZGVybmVhciAgIDAuNSAgMiAgICAgLT4gIDAuNQorZHFybW4xNDQgcmVtYWluZGVybmVhciAgIDAuNSAgMi4xICAgLT4gIDAuNQorZHFybW4xNDUgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMSAgLT4gIDAuNTAKK2Rxcm1uMTQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAorZHFybW4xNDcgcmVtYWluZGVybmVhciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKK2Rxcm1uMTQ4IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwCitkcXJtbjE0OSByZW1haW5kZXJuZWFyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKKworLS0gc3RlYWRpZXMKK2Rxcm1uMTUwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwCitkcXJtbjE1MSByZW1haW5kZXJuZWFyICAxICAyICAgLT4gMQorZHFybW4xNTIgcmVtYWluZGVybmVhciAgMSAgMyAgIC0+IDEKK2Rxcm1uMTUzIHJlbWFpbmRlcm5lYXIgIDEgIDQgICAtPiAxCitkcXJtbjE1NCByZW1haW5kZXJuZWFyICAxICA1ICAgLT4gMQorZHFybW4xNTUgcmVtYWluZGVybmVhciAgMSAgNiAgIC0+IDEKK2Rxcm1uMTU2IHJlbWFpbmRlcm5lYXIgIDEgIDcgICAtPiAxCitkcXJtbjE1NyByZW1haW5kZXJuZWFyICAxICA4ICAgLT4gMQorZHFybW4xNTggcmVtYWluZGVybmVhciAgMSAgOSAgIC0+IDEKK2Rxcm1uMTU5IHJlbWFpbmRlcm5lYXIgIDEgIDEwICAtPiAxCitkcXJtbjE2MCByZW1haW5kZXJuZWFyICAxICAxICAgLT4gMAorZHFybW4xNjEgcmVtYWluZGVybmVhciAgMiAgMSAgIC0+IDAKK2Rxcm1uMTYyIHJlbWFpbmRlcm5lYXIgIDMgIDEgICAtPiAwCitkcXJtbjE2MyByZW1haW5kZXJuZWFyICA0ICAxICAgLT4gMAorZHFybW4xNjQgcmVtYWluZGVybmVhciAgNSAgMSAgIC0+IDAKK2Rxcm1uMTY1IHJlbWFpbmRlcm5lYXIgIDYgIDEgICAtPiAwCitkcXJtbjE2NiByZW1haW5kZXJuZWFyICA3ICAxICAgLT4gMAorZHFybW4xNjcgcmVtYWluZGVybmVhciAgOCAgMSAgIC0+IDAKK2Rxcm1uMTY4IHJlbWFpbmRlcm5lYXIgIDkgIDEgICAtPiAwCitkcXJtbjE2OSByZW1haW5kZXJuZWFyICAxMCAxICAgLT4gMAorCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyCitkcXJtbjE3MSByZW1haW5kZXJuZWFyICAgMC40ICAxLjAyMCAtPiAgMC40MDAKK2Rxcm1uMTcyIHJlbWFpbmRlcm5lYXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMAorZHFybW4xNzMgcmVtYWluZGVybmVhciAgIDAuNTEgMS4wMjAgLT4gIDAuNTEwCitkcXJtbjE3NCByZW1haW5kZXJuZWFyICAgMC41MiAxLjAyMCAtPiAtMC41MDAKK2Rxcm1uMTc1IHJlbWFpbmRlcm5lYXIgICAwLjYgIDEuMDIwIC0+IC0wLjQyMAorCistLSBNb3JlIGZsYXZvdXJzIG9mIHJlbWFpbmRlcm5lYXIgYnkgMAorZHFybW4yMDEgcmVtYWluZGVybmVhciAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitkcXJtbjIwMiByZW1haW5kZXJuZWFyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK2Rxcm1uMjAzIHJlbWFpbmRlcm5lYXIgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorZHFybW4yMDQgcmVtYWluZGVybmVhciAgMC4wMDAxIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMjA1IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjIwNiByZW1haW5kZXJuZWFyICAwLjEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4yMDcgcmVtYWluZGVybmVhciAgMSAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMjA4IHJlbWFpbmRlcm5lYXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjIwOSByZW1haW5kZXJuZWFyIDEwICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW4yMTAgcmVtYWluZGVybmVhciAxRSsxMDAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uMjExIHJlbWFpbmRlcm5lYXIgMUUrMzgwICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHRlc3RzIGZyb20gdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24KK2Rxcm1uMjIxIHJlbWFpbmRlcm5lYXIgMi4xICAgICAzICAgLT4gLTAuOQorZHFybW4yMjIgcmVtYWluZGVybmVhciAgMTAgICAgIDYgICAtPiAtMgorZHFybW4yMjMgcmVtYWluZGVybmVhciAgMTAgICAgIDMgICAtPiAgMQorZHFybW4yMjQgcmVtYWluZGVybmVhciAtMTAgICAgIDMgICAtPiAtMQorZHFybW4yMjUgcmVtYWluZGVybmVhciAgMTAuMiAgIDEgICAtPiAwLjIKK2Rxcm1uMjI2IHJlbWFpbmRlcm5lYXIgIDEwICAgICAwLjMgLT4gMC4xCitkcXJtbjIyNyByZW1haW5kZXJuZWFyICAgMy42ICAgMS4zIC0+IC0wLjMKKworLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlcgorZHFybW4yMzEgcmVtYWluZGVybmVhciAgLTAuNCAgMS4wMjAgLT4gLTAuNDAwCitkcXJtbjIzMiByZW1haW5kZXJuZWFyICAtMC41MCAxLjAyMCAtPiAtMC41MDAKK2Rxcm1uMjMzIHJlbWFpbmRlcm5lYXIgIC0wLjUxIDEuMDIwIC0+IC0wLjUxMAorZHFybW4yMzQgcmVtYWluZGVybmVhciAgLTAuNTIgMS4wMjAgLT4gIDAuNTAwCitkcXJtbjIzNSByZW1haW5kZXJuZWFyICAtMC42ICAxLjAyMCAtPiAgMC40MjAKKworLS0gaGlnaCBYcworZHFybW4yNDAgcmVtYWluZGVybmVhciAgMUUrMiAgMS4wMCAgLT4gIDAuMDAKKworLS0gZHFybW4zeHggYXJlIGZyb20gRGlhZ0JpZ0RlY2ltYWwKK2Rxcm1uMzAxIHJlbWFpbmRlcm5lYXIgICAxICAgIDMgICAgIC0+ICAxCitkcXJtbjMwMiByZW1haW5kZXJuZWFyICAgNSAgICA1ICAgICAtPiAgMAorZHFybW4zMDMgcmVtYWluZGVybmVhciAgIDEzICAgMTAgICAgLT4gIDMKK2Rxcm1uMzA0IHJlbWFpbmRlcm5lYXIgICAxMyAgIDUwICAgIC0+ICAxMworZHFybW4zMDUgcmVtYWluZGVybmVhciAgIDEzICAgMTAwICAgLT4gIDEzCitkcXJtbjMwNiByZW1haW5kZXJuZWFyICAgMTMgICAxMDAwICAtPiAgMTMKK2Rxcm1uMzA3IHJlbWFpbmRlcm5lYXIgICAuMTMgICAgMSAgIC0+ICAwLjEzCitkcXJtbjMwOCByZW1haW5kZXJuZWFyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMKK2Rxcm1uMzA5IHJlbWFpbmRlcm5lYXIgICAwLjEwMzMgMSAgIC0+ICAwLjEwMzMKK2Rxcm1uMzEwIHJlbWFpbmRlcm5lYXIgICAxLjAzMyAgMSAgIC0+ICAwLjAzMworZHFybW4zMTEgcmVtYWluZGVybmVhciAgIDEwLjMzICAxICAgLT4gIDAuMzMKK2Rxcm1uMzEyIHJlbWFpbmRlcm5lYXIgICAxMC4zMyAxMCAgIC0+ICAwLjMzCitkcXJtbjMxMyByZW1haW5kZXJuZWFyICAgMTAzLjMgIDEgICAtPiAgMC4zCitkcXJtbjMxNCByZW1haW5kZXJuZWFyICAgMTMzICAgMTAgICAtPiAgMworZHFybW4zMTUgcmVtYWluZGVybmVhciAgIDEwMzMgIDEwICAgLT4gIDMKK2Rxcm1uMzE2IHJlbWFpbmRlcm5lYXIgICAxMDMzICA1MCAgIC0+IC0xNworZHFybW4zMTcgcmVtYWluZGVybmVhciAgIDEwMS4wICAzICAgLT4gLTEuMAorZHFybW4zMTggcmVtYWluZGVybmVhciAgIDEwMi4wICAzICAgLT4gIDAuMAorZHFybW4zMTkgcmVtYWluZGVybmVhciAgIDEwMy4wICAzICAgLT4gIDEuMAorZHFybW4zMjAgcmVtYWluZGVybmVhciAgIDIuNDAgICAxICAgLT4gIDAuNDAKK2Rxcm1uMzIxIHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgMSAgIC0+ICAwLjQwMAorZHFybW4zMjIgcmVtYWluZGVybmVhciAgIDIuNCAgICAxICAgLT4gIDAuNAorZHFybW4zMjMgcmVtYWluZGVybmVhciAgIDIuNCAgICAyICAgLT4gIDAuNAorZHFybW4zMjQgcmVtYWluZGVybmVhciAgIDIuNDAwICAyICAgLT4gIDAuNDAwCitkcXJtbjMyNSByZW1haW5kZXJuZWFyICAgMSAgIDAuMyAgICAtPiAgMC4xCitkcXJtbjMyNiByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAgICAtPiAgMC4xMAorZHFybW4zMjcgcmVtYWluZGVybmVhciAgIDEgICAwLjMwMCAgLT4gIDAuMTAwCitkcXJtbjMyOCByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAwMCAtPiAgMC4xMDAwCitkcXJtbjMyOSByZW1haW5kZXJuZWFyICAgMS4wICAgIDAuMyAtPiAgMC4xCitkcXJtbjMzMCByZW1haW5kZXJuZWFyICAgMS4wMCAgIDAuMyAtPiAgMC4xMAorZHFybW4zMzEgcmVtYWluZGVybmVhciAgIDEuMDAwICAwLjMgLT4gIDAuMTAwCitkcXJtbjMzMiByZW1haW5kZXJuZWFyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwCitkcXJtbjMzMyByZW1haW5kZXJuZWFyICAgMC41ICAyICAgICAtPiAgMC41CitkcXJtbjMzNCByZW1haW5kZXJuZWFyICAgMC41ICAyLjEgICAtPiAgMC41CitkcXJtbjMzNSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MAorZHFybW4zMzYgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwCitkcXJtbjMzNyByZW1haW5kZXJuZWFyICAgMC41MCAyICAgICAtPiAgMC41MAorZHFybW4zMzggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK2Rxcm1uMzM5IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMAorCitkcXJtbjM0MCByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAxICAgIC0+ICAtMUUtNworZHFybW4zNDEgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDEgICAgLT4gIC0xRS04CitkcXJtbjM0MiByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDEgICAgLT4gIC0xRS05CitkcXJtbjM0MyByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDAxICAgIC0+ICAtMUUtMTAKK2Rxcm1uMzQ0IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMDAxICAgIC0+ICAtMUUtMTEKK2Rxcm1uMzQ1IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTkgICAgLT4gIDFFLTcKK2Rxcm1uMzQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5ICAgIC0+ICAxRS04CitkcXJtbjM0NyByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTkgICAgLT4gIDFFLTkKK2Rxcm1uMzQ4IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTkgICAgLT4gIDFFLTEwCitkcXJtbjM0OSByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5OSAgICAtPiAgMUUtMTEKK2Rxcm1uMzUwIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5OSAgICAtPiAgMUUtMTIKKworZHFybW4zNTEgcmVtYWluZGVybmVhciAgIDAuMDMgIDcgIC0+ICAwLjAzCitkcXJtbjM1MiByZW1haW5kZXJuZWFyICAgNSAgIDIgICAgLT4gIDEKK2Rxcm1uMzUzIHJlbWFpbmRlcm5lYXIgICA0LjEgICAyICAgIC0+ICAwLjEKK2Rxcm1uMzU0IHJlbWFpbmRlcm5lYXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQorZHFybW4zNTUgcmVtYWluZGVybmVhciAgIDQuMDAxICAgMiAgICAtPiAgMC4wMDEKK2Rxcm1uMzU2IHJlbWFpbmRlcm5lYXIgICA0LjAwMDEgICAyICAgIC0+ICAwLjAwMDEKK2Rxcm1uMzU3IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQorZHFybW4zNTggcmVtYWluZGVybmVhciAgIDQuMDAwMDAxICAgMiAgICAtPiAgMC4wMDAwMDEKK2Rxcm1uMzU5IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAwMDEgICAyICAgIC0+ICAxRS03CisKK2Rxcm1uMzYwIHJlbWFpbmRlcm5lYXIgICAxLjIgICAwLjczNDUgLT4gLTAuMjY5MAorZHFybW4zNjEgcmVtYWluZGVybmVhciAgIDAuOCAgIDEyICAgICAtPiAgMC44CitkcXJtbjM2MiByZW1haW5kZXJuZWFyICAgMC44ICAgMC4yICAgIC0+ICAwLjAKK2Rxcm1uMzYzIHJlbWFpbmRlcm5lYXIgICAwLjggICAwLjMgICAgLT4gLTAuMQorZHFybW4zNjQgcmVtYWluZGVybmVhciAgIDAuODAwICAgMTIgICAtPiAgMC44MDAKK2Rxcm1uMzY1IHJlbWFpbmRlcm5lYXIgICAwLjgwMCAgIDEuNyAgLT4gIDAuODAwCitkcXJtbjM2NiByZW1haW5kZXJuZWFyICAgMi40MDAgICAyICAgIC0+ICAwLjQwMAorCistLSByb3VuZCB0byBldmVuCitkcXJtbjM3MSByZW1haW5kZXJuZWFyICAgMTIxICAgICAyICAgIC0+ICAxCitkcXJtbjM3MiByZW1haW5kZXJuZWFyICAgMTIyICAgICAyICAgIC0+ICAwCitkcXJtbjM3MyByZW1haW5kZXJuZWFyICAgMTIzICAgICAyICAgIC0+IC0xCitkcXJtbjM3NCByZW1haW5kZXJuZWFyICAgMTI0ICAgICAyICAgIC0+ICAwCitkcXJtbjM3NSByZW1haW5kZXJuZWFyICAgMTI1ICAgICAyICAgIC0+ICAxCitkcXJtbjM3NiByZW1haW5kZXJuZWFyICAgMTI2ICAgICAyICAgIC0+ICAwCitkcXJtbjM3NyByZW1haW5kZXJuZWFyICAgMTI3ICAgICAyICAgIC0+IC0xCisKK2Rxcm1uMzgxIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEgICAgICAgICAtPiAgMAorZHFybW4zODIgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDAxICAgIC0+IC0wLjIzNDQKK2Rxcm1uMzgzIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDAxICAgICAtPiAtMC4zMzMKK2Rxcm1uMzg0IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDEgICAgICAtPiAtMC4yMworZHFybW4zODUgcmVtYWluZGVybmVhciAxMjM0NSAgMS4xICAgICAgIC0+IC0wLjMKK2Rxcm1uMzg2IHJlbWFpbmRlcm5lYXIgMTIzNTUgIDQgICAgICAgICAtPiAtMQorZHFybW4zODcgcmVtYWluZGVybmVhciAxMjM0NSAgNCAgICAgICAgIC0+ICAxCitkcXJtbjM4OCByZW1haW5kZXJuZWFyIDEyMzU1ICA0LjAwMDEgICAgLT4gLTEuMzA4OQorZHFybW4zODkgcmVtYWluZGVybmVhciAxMjM0NSAgNC4wMDAxICAgIC0+ICAwLjY5MTQKK2Rxcm1uMzkwIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOSAgICAgICAtPiAgMS45CitkcXJtbjM5MSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0Ljk5ICAgICAgLT4gLTAuMjYKK2Rxcm1uMzkyIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTk5ICAgICAtPiAgMi40NjkKK2Rxcm1uMzkzIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTk5OSAgICAtPiAgMC4yNDY5CitkcXJtbjM5NCByZW1haW5kZXJuZWFyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDAKK2Rxcm1uMzk1IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDAwMSAgICAtPiAtMC4yNDY5CitkcXJtbjM5NiByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAwMSAgICAgLT4gLTIuNDY5CitkcXJtbjM5NyByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAxICAgICAgLT4gIDAuMzYKK2Rxcm1uMzk4IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMSAgICAgICAtPiAtMi4xCisKKy0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzCitkcXJtbjQwMSByZW1haW5kZXJuZWFyICAgMC40ICAgICAgICAgMSAgIC0+ICAwLjQKK2Rxcm1uNDAyIHJlbWFpbmRlcm5lYXIgICAwLjQ1ICAgICAgICAxICAgLT4gIDAuNDUKK2Rxcm1uNDAzIHJlbWFpbmRlcm5lYXIgICAwLjQ1NSAgICAgICAxICAgLT4gIDAuNDU1CitkcXJtbjQwNCByZW1haW5kZXJuZWFyICAgMC40NTU1ICAgICAgMSAgIC0+ICAwLjQ1NTUKK2Rxcm1uNDA1IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1ICAgICAxICAgLT4gIDAuNDU1NTUKK2Rxcm1uNDA2IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NSAgICAxICAgLT4gIDAuNDU1NTU1CitkcXJtbjQwNyByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1ICAgMSAgIC0+ICAwLjQ1NTU1NTUKK2Rxcm1uNDA4IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1ICAxICAgLT4gIDAuNDU1NTU1NTUKK2Rxcm1uNDA5IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1NSAxICAgLT4gIDAuNDU1NTU1NTU1CistLSB3aXRoIHNwaWxsLi4uIFs0MTIgZXhlcmNpc2VzIHN0aWNrdGFiIGxvb3BdCitkcXJtbjQxMSByZW1haW5kZXJuZWFyICAgMC41ICAgICAgICAgMSAgIC0+ICAwLjUKK2Rxcm1uNDEyIHJlbWFpbmRlcm5lYXIgICAwLjU1ICAgICAgICAxICAgLT4gLTAuNDUKK2Rxcm1uNDEzIHJlbWFpbmRlcm5lYXIgICAwLjU1NSAgICAgICAxICAgLT4gLTAuNDQ1CitkcXJtbjQxNCByZW1haW5kZXJuZWFyICAgMC41NTU1ICAgICAgMSAgIC0+IC0wLjQ0NDUKK2Rxcm1uNDE1IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1ICAgICAxICAgLT4gLTAuNDQ0NDUKK2Rxcm1uNDE2IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NSAgICAxICAgLT4gLTAuNDQ0NDQ1CitkcXJtbjQxNyByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1ICAgMSAgIC0+IC0wLjQ0NDQ0NDUKK2Rxcm1uNDE4IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTU1ICAxICAgLT4gLTAuNDQ0NDQ0NDUKK2Rxcm1uNDE5IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTU1NSAxICAgLT4gLTAuNDQ0NDQ0NDQ1CisKKy0tIGZvbGRkb3ducworZHFybW40MjEgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgICAgICAgIDEgIC0+ICAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK2Rxcm1uNDIyIHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICAxRSs2MTQzICAtPiAgIDBFKzYxMTEgQ2xhbXBlZAorZHFybW40MjMgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDJFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkCitkcXJtbjQyNCByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgM0UrNjE0MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKK2Rxcm1uNDI1IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA0RSs2MTQzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorZHFybW40MjYgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDVFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkCitkcXJtbjQyNyByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgNkUrNjE0MyAgLT4gIC0yLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKK2Rxcm1uNDI4IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA3RSs2MTQzICAtPiAgIDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAorZHFybW40MjkgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDhFKzYxNDMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCitkcXJtbjQzMCByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgOUUrNjE0MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKKy0tIHRpbmllcworZHFybW40MzEgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDFFLTYxNzYgIC0+ICAgMEUtNjE3NgorZHFybW40MzIgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDJFLTYxNzYgIC0+ICAgMEUtNjE3NgorZHFybW40MzMgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDNFLTYxNzYgIC0+ICAgMUUtNjE3NiBTdWJub3JtYWwKK2Rxcm1uNDM0IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA0RS02MTc2ICAtPiAgIDJFLTYxNzYgU3Vibm9ybWFsCitkcXJtbjQzNSByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgNUUtNjE3NiAgLT4gICAwRS02MTc2CitkcXJtbjQzNiByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgNkUtNjE3NiAgLT4gIC0yRS02MTc2IFN1Ym5vcm1hbAorZHFybW40MzcgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDdFLTYxNzYgIC0+ICAgM0UtNjE3NiBTdWJub3JtYWwKK2Rxcm1uNDM4IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA4RS02MTc2ICAtPiAgIDJFLTYxNzYgU3Vibm9ybWFsCitkcXJtbjQzOSByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgOUUtNjE3NiAgLT4gICAxRS02MTc2IFN1Ym5vcm1hbAorZHFybW40NDAgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgMTBFLTYxNzYgIC0+ICAgMEUtNjE3NgorZHFybW40NDEgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgMTFFLTYxNzYgIC0+ICAtMUUtNjE3NiBTdWJub3JtYWwKK2Rxcm1uNDQyIHJlbWFpbmRlcm5lYXIgMTAwRS02MTc1IDExRS02MTc2ICAtPiAgLTFFLTYxNzYgU3Vibm9ybWFsCitkcXJtbjQ0MyByZW1haW5kZXJuZWFyIDEwMEUtNjE3NSAyMEUtNjE3NiAgLT4gICAwRS02MTc2CitkcXJtbjQ0NCByZW1haW5kZXJuZWFyIDEwMEUtNjE3NSAyMUUtNjE3NiAgLT4gIC04RS02MTc2IFN1Ym5vcm1hbAorZHFybW40NDUgcmVtYWluZGVybmVhciAxMDBFLTYxNzUgMzBFLTYxNzYgIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwKKworLS0gemVybyBzaWducworZHFybW42NTAgcmVtYWluZGVybmVhciAgMSAgMSAtPiAgMAorZHFybW42NTEgcmVtYWluZGVybmVhciAtMSAgMSAtPiAtMAorZHFybW42NTIgcmVtYWluZGVybmVhciAgMSAtMSAtPiAgMAorZHFybW42NTMgcmVtYWluZGVybmVhciAtMSAtMSAtPiAtMAorZHFybW42NTQgcmVtYWluZGVybmVhciAgMCAgMSAtPiAgMAorZHFybW42NTUgcmVtYWluZGVybmVhciAtMCAgMSAtPiAtMAorZHFybW42NTYgcmVtYWluZGVybmVhciAgMCAtMSAtPiAgMAorZHFybW42NTcgcmVtYWluZGVybmVhciAtMCAtMSAtPiAtMAorZHFybW42NTggcmVtYWluZGVybmVhciAgMC4wMCAgMSAgLT4gIDAuMDAKK2Rxcm1uNjU5IHJlbWFpbmRlcm5lYXIgLTAuMDAgIDEgIC0+IC0wLjAwCisKKy0tIFNwZWNpYWxzCitkcXJtbjY4MCByZW1haW5kZXJuZWFyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4MSByZW1haW5kZXJuZWFyICBJbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4MiByZW1haW5kZXJuZWFyICBJbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4MyByZW1haW5kZXJuZWFyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4NCByZW1haW5kZXJuZWFyICBJbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4NSByZW1haW5kZXJuZWFyICBJbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4NiByZW1haW5kZXJuZWFyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4NyByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjY4OCByZW1haW5kZXJuZWFyIC0xMDAwICBJbmYgICAtPiAtMTAwMAorZHFybW42ODkgcmVtYWluZGVybmVhciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFybW42OTEgcmVtYWluZGVybmVhciAtMSAgICAgSW5mICAgLT4gLTEKK2Rxcm1uNjkyIHJlbWFpbmRlcm5lYXIgIDAgICAgIEluZiAgIC0+ICAwCitkcXJtbjY5MyByZW1haW5kZXJuZWFyIC0wICAgICBJbmYgICAtPiAtMAorZHFybW42OTQgcmVtYWluZGVybmVhciAgMSAgICAgSW5mICAgLT4gIDEKK2Rxcm1uNjk1IHJlbWFpbmRlcm5lYXIgIDEwMDAgIEluZiAgIC0+ICAxMDAwCitkcXJtbjY5NiByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rxcm1uNzAwIHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzAxIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzAyIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzAzIHJlbWFpbmRlcm5lYXIgLUluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzA0IHJlbWFpbmRlcm5lYXIgLUluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzA1IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzA2IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzA3IHJlbWFpbmRlcm5lYXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzA4IHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzA5IHJlbWFpbmRlcm5lYXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwCitkcXJtbjcxMCByZW1haW5kZXJuZWFyIC0xICAgIC1JbmYgICAtPiAtMQorZHFybW43MTEgcmVtYWluZGVybmVhciAtMCAgICAtSW5mICAgLT4gLTAKK2Rxcm1uNzEyIHJlbWFpbmRlcm5lYXIgIDAgICAgLUluZiAgIC0+ICAwCitkcXJtbjcxMyByZW1haW5kZXJuZWFyICAxICAgIC1JbmYgICAtPiAgMQorZHFybW43MTQgcmVtYWluZGVybmVhciAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK2Rxcm1uNzE1IHJlbWFpbmRlcm5lYXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworZHFybW43MjEgcmVtYWluZGVybmVhciAgTmFOIC1JbmYgICAgLT4gIE5hTgorZHFybW43MjIgcmVtYWluZGVybmVhciAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFybW43MjMgcmVtYWluZGVybmVhciAgTmFOIC0xICAgICAgLT4gIE5hTgorZHFybW43MjQgcmVtYWluZGVybmVhciAgTmFOIC0wICAgICAgLT4gIE5hTgorZHFybW43MjUgcmVtYWluZGVybmVhciAtTmFOICAwICAgICAgLT4gLU5hTgorZHFybW43MjYgcmVtYWluZGVybmVhciAgTmFOICAxICAgICAgLT4gIE5hTgorZHFybW43MjcgcmVtYWluZGVybmVhciAgTmFOICAxMDAwICAgLT4gIE5hTgorZHFybW43MjggcmVtYWluZGVybmVhciAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFybW43MjkgcmVtYWluZGVybmVhciAgTmFOIC1OYU4gICAgLT4gIE5hTgorZHFybW43MzAgcmVtYWluZGVybmVhciAtSW5mICBOYU4gICAgLT4gIE5hTgorZHFybW43MzEgcmVtYWluZGVybmVhciAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFybW43MzIgcmVtYWluZGVybmVhciAtMSAgICBOYU4gICAgLT4gIE5hTgorZHFybW43MzMgcmVtYWluZGVybmVhciAtMCAgIC1OYU4gICAgLT4gLU5hTgorZHFybW43MzQgcmVtYWluZGVybmVhciAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFybW43MzUgcmVtYWluZGVybmVhciAgMSAgIC1OYU4gICAgLT4gLU5hTgorZHFybW43MzYgcmVtYWluZGVybmVhciAgMTAwMCBOYU4gICAgLT4gIE5hTgorZHFybW43MzcgcmVtYWluZGVybmVhciAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkcXJtbjc0MSByZW1haW5kZXJuZWFyICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NDIgcmVtYWluZGVybmVhciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzQzIHJlbWFpbmRlcm5lYXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc0NCByZW1haW5kZXJuZWFyICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NDUgcmVtYWluZGVybmVhciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzQ2IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc0NyByZW1haW5kZXJuZWFyICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NDkgcmVtYWluZGVybmVhciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzUwIHJlbWFpbmRlcm5lYXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc1MSByZW1haW5kZXJuZWFyICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NTIgcmVtYWluZGVybmVhciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzUzIHJlbWFpbmRlcm5lYXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc1NCByZW1haW5kZXJuZWFyIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NTUgcmVtYWluZGVybmVhciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzU2IHJlbWFpbmRlcm5lYXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc1NyByZW1haW5kZXJuZWFyICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFybW43NTggcmVtYWluZGVybmVhciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm1uNzU5IHJlbWFpbmRlcm5lYXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2luZyBOYU5zCitkcXJtbjc2MCByZW1haW5kZXJuZWFyICBOYU4xICAgTmFONyAgIC0+ICBOYU4xCitkcXJtbjc2MSByZW1haW5kZXJuZWFyIHNOYU4yICAgTmFOOCAgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc2MiByZW1haW5kZXJuZWFyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc2MyByZW1haW5kZXJuZWFyIHNOYU40ICBzTmFOMTAgIC0+ICBOYU40IEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjc2NCByZW1haW5kZXJuZWFyICAgIDE1ICAgTmFOMTEgIC0+ICBOYU4xMQorZHFybW43NjUgcmVtYWluZGVybmVhciAgTmFONiAgIE5hTjEyICAtPiAgTmFONgorZHFybW43NjYgcmVtYWluZGVybmVhciAgSW5mICAgIE5hTjEzICAtPiAgTmFOMTMKK2Rxcm1uNzY3IHJlbWFpbmRlcm5lYXIgIE5hTjE0ICAtSW5mICAgLT4gIE5hTjE0CitkcXJtbjc2OCByZW1haW5kZXJuZWFyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQorZHFybW43NjkgcmVtYWluZGVybmVhciAgTmFOMTYgICAtMCAgICAtPiAgTmFOMTYKKworLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlCitkcXJtbjc3MCAgcmVtYWluZGVybmVhciAgMTIzNDUwMDAwMDAwMDAwMDAwMDAwMDA2Nzg5MDEyMzQ1NiAgMTAgICAgLT4gLTQKK2Rxcm1uNzcxICByZW1haW5kZXJuZWFyICAxMjM0NTAwMDAwMDAwMDAwMDAwMDAwMDY3ODkwMTIzNDU2ICAgMSAgICAtPiAgMAorZHFybW43NzIgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1MDAwMDAwMDAwMDAwMDAwMDAwNjc4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFybW43NzMgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1MDAwMDAwMDAwMDAwMDAwMDAwNjc4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSBsb25nIG9wZXJhbmQgY2hlY2tzCitkcXJtbjgwMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCitkcXJtbjgwMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxCitkcXJtbjgwMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitkcXJtbjgwNCByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMCAgICAtPiAxCitkcXJtbjgwNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCitkcXJtbjgwNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitkcXJtbjgwNyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCitkcXJtbjgwOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkcXJtbjgwOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitkcXJtbjgxMCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkcXJtbjgxMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNAorZHFybW44MTIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCitkcXJtbjgyMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCitkcXJtbjgyMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxCitkcXJtbjgyMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitkcXJtbjgyNCByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMCAgICAtPiAxCitkcXJtbjgyNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCitkcXJtbjgyNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitkcXJtbjgyNyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCitkcXJtbjgyOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCitkcXJtbjgyOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitkcXJtbjgzMCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCitkcXJtbjgzMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNAorZHFybW44MzIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSBmcm9tIGRpdmlkZWludAorZHFybW44NDAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjAgICAxICAtPiAgMC4wCitkcXJtbjg0MSByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuNCAgIDEgIC0+ICAwLjQKK2Rxcm1uODQyIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC41ICAgMSAgLT4gIDAuNQorZHFybW44NDMgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjkgICAxICAtPiAtMC4xCitkcXJtbjg0NCByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuOTk5IDEgIC0+IC0wLjAwMQorZHFybW44NTAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAzICAgICA1ICAtPiAtMgorZHFybW44NTEgcmVtYWluZGVybmVhciAgMTAwMDAwMDMgICAgICA1ICAtPiAtMgorZHFybW44NTIgcmVtYWluZGVybmVhciAgMTAwMDAwMyAgICAgICA1ICAtPiAtMgorZHFybW44NTMgcmVtYWluZGVybmVhciAgMTAwMDAzICAgICAgICA1ICAtPiAtMgorZHFybW44NTQgcmVtYWluZGVybmVhciAgMTAwMDMgICAgICAgICA1ICAtPiAtMgorZHFybW44NTUgcmVtYWluZGVybmVhciAgMTAwMyAgICAgICAgICA1ICAtPiAtMgorZHFybW44NTYgcmVtYWluZGVybmVhciAgMTAzICAgICAgICAgICA1ICAtPiAtMgorZHFybW44NTcgcmVtYWluZGVybmVhciAgMTMgICAgICAgICAgICA1ICAtPiAtMgorZHFybW44NTggcmVtYWluZGVybmVhciAgMSAgICAgICAgICAgICA1ICAtPiAgMQorCistLSBWbGFkaW1pcidzIGNhc2VzICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgorZHFybW44NjAgcmVtYWluZGVybmVhciAxMjMuMGUxIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2Rxcm1uODYxIHJlbWFpbmRlcm5lYXIgMTIzMCAgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkcXJtbjg2MiByZW1haW5kZXJuZWFyIDEyLjNlMiAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAorZHFybW44NjMgcmVtYWluZGVybmVhciAxLjIzZTMgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKK2Rxcm1uODY0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCitkcXJtbjg3MCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44NzEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgMTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODcyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAxMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg3MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDEwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44NzQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgMTAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODc1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAxMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg3NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDEwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44NzcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODc4IHJlbWFpbmRlcm5lYXIgMTIzMCAgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg3OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMTAwMDAwMDAgLT4gMTIzMAorZHFybW44ODAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAxMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODgxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDEwMDAwMCAtPiAxMjMwCitkcXJtbjg4MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMTAwMDAgLT4gMTIzMAorZHFybW44ODMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAxMDAwIC0+ICAyMzAKK2Rxcm1uODg0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDEwMCAtPiAgIDMwCitkcXJtbjg4NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMTAgLT4gICAgMAorZHFybW44ODYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICAxIC0+ICAgIDAKKworZHFybW44OTAgcmVtYWluZGVybmVhciAxMjNlMSAgICAyMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODkxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDIwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg5MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgMjAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44OTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAyMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODk0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDIwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg5NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgMjAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW44OTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAyMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uODk3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDIwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjg5OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMjAwMDAwMDAgLT4gMTIzMAorZHFybW45MDAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAyMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTAxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDIwMDAwMCAtPiAxMjMwCitkcXJtbjkwMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMjAwMDAgLT4gMTIzMAorZHFybW45MDMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAyMDAwIC0+IC03NzAKK2Rxcm1uOTA0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDIwMCAtPiAgIDMwCitkcXJtbjkwNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMjAgLT4gIC0xMAorZHFybW45MDYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICAyIC0+ICAgIDAKKworZHFybW45MTAgcmVtYWluZGVybmVhciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTExIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDUwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkxMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgNTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTE0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDUwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkxNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgNTAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTE3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDUwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkxOSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgNTAwMDAwMDAgLT4gMTIzMAorZHFybW45MjAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTIxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDUwMDAwMCAtPiAxMjMwCitkcXJtbjkyMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgNTAwMDAgLT4gMTIzMAorZHFybW45MjMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzAKK2Rxcm1uOTI0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDUwMCAtPiAgMjMwCitkcXJtbjkyNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgNTAgLT4gIC0yMAorZHFybW45MjYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDAKKworZHFybW45MzAgcmVtYWluZGVybmVhciAxMjNlMSAgICA5MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTMxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDkwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkzMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgOTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MzMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA5MDAwMDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTM0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDkwMDAwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkzNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgOTAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45MzYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA5MDAwMDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTM3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDkwMDAwMDAwMCAtPiAxMjMwCitkcXJtbjkzOSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgOTAwMDAwMDAgLT4gMTIzMAorZHFybW45NDAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA5MDAwMDAwIC0+IDEyMzAKK2Rxcm1uOTQxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDkwMDAwMCAtPiAxMjMwCitkcXJtbjk0MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgOTAwMDAgLT4gMTIzMAorZHFybW45NDMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA5MDAwIC0+IDEyMzAKK2Rxcm1uOTQ0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDkwMCAtPiAgMzMwCitkcXJtbjk0NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgOTAgLT4gIC0zMAorZHFybW45NDYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA5IC0+ICAgLTMKKworZHFybW45NTAgcmVtYWluZGVybmVhciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorZHFybW45NjEgcmVtYWluZGVybmVhciAxMjNlMSAgIDI5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjIgcmVtYWluZGVybmVhciAxMjNlMSAgIDM5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjMgcmVtYWluZGVybmVhciAxMjNlMSAgIDQ5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjQgcmVtYWluZGVybmVhciAxMjNlMSAgIDU5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjUgcmVtYWluZGVybmVhciAxMjNlMSAgIDY5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjYgcmVtYWluZGVybmVhciAxMjNlMSAgIDc5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjcgcmVtYWluZGVybmVhciAxMjNlMSAgIDg5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjggcmVtYWluZGVybmVhciAxMjNlMSAgIDk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorZHFybW45NjkgcmVtYWluZGVybmVhciAxMjNlMSAgIDk4NzY1NDMyMTA5ODc2NTQgLT4gMTIzMAorCitkcXJtbjk4MCByZW1haW5kZXJuZWFyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5CisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQorZHFybW4xMDUxIHJlbWFpbmRlcm5lYXIgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFybW4xMDUyIHJlbWFpbmRlcm5lYXIgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFybW4xMDUzIHJlbWFpbmRlcm5lYXIgLTFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFybW4xMDU0IHJlbWFpbmRlcm5lYXIgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorZHFybW4xMDU1IHJlbWFpbmRlcm5lYXIgIDFlLTI3NyAgMWUrMzExIC0+ICAxRS0yNzcKK2Rxcm1uMTA1NiByZW1haW5kZXJuZWFyICAxZS0yNzcgLTFlKzMxMSAtPiAgMUUtMjc3CitkcXJtbjEwNTcgcmVtYWluZGVybmVhciAtMWUtMjc3ICAxZSszMTEgLT4gLTFFLTI3NworZHFybW4xMDU4IHJlbWFpbmRlcm5lYXIgLTFlLTI3NyAtMWUrMzExIC0+IC0xRS0yNzcKKworLS0gR3l1cmlzIGV4YW1wbGUKK2Rxcm1uMTA3MCByZW1haW5kZXIgOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODE3MDlFLTYxNDMgOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODkwMDBFLTYxNDMgLT4gOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODE3MDlFLTYxNDMKKworLS0gZGVzdHJ1Y3RpdmUgc3VidHJhY3QKK2Rxcm1uMTEwMSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMC4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzMKK2Rxcm1uMTEwMiAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgLTAuMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMjIKK2Rxcm1uMTEwMyAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIC0wLjQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDExMTEKK2Rxcm1uMTEwNCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI1NSAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMTQKK2Rxcm1uMTEwNSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgMS42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTIKK2Rxcm1uMTEwNiAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAgIC0xLjMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NDgKK2Rxcm1uMTEwNyAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAgIDEuNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcKK2Rxcm1uMTEwOCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAtMC43NTMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTMKK2Rxcm1uMTEwOSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcKK2Rxcm1uMTExMCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIDEuNTMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTQKK2Rxcm1uMTExMSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIC0wLjY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDIKKworLS0gTnVsbCB0ZXN0cworZHFybW4xMDAwIHJlbWFpbmRlcm5lYXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJtbjEwMDEgcmVtYWluZGVybmVhciAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJvdGF0ZS5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJvdGF0ZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkY2Y5ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUm90YXRlLmRlY1Rlc3QKQEAgLTAsMCArMSwyOTggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFSb3RhdGUuZGVjVGVzdCAtLSByb3RhdGUgZGVjUXVhZCBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sKK2Rxcm90MDAxIHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAwICAtPiAgMAorZHFyb3QwMDIgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgIDIgIC0+ICAwCitkcXJvdDAwMyByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgMiAgLT4gIDEwMAorZHFyb3QwMDQgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgMzMgIC0+ICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXJvdDAwNSByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAzNCAgLT4gIDEKK2Rxcm90MDA2IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIC0xICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFyb3QwMDcgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgLTIgIC0+ICAwCitkcXJvdDAwOCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMSAgLT4gIDQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMKK2Rxcm90MDA5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAgMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MQorZHFyb3QwMTAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXJvdDAxMSByb3RhdGUgIDk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gIDkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDkKK2Rxcm90MDEyIHJvdGF0ZSAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorCistLSByaHMgbXVzdCBiZSBhbiBpbnRlZ2VyCitkcXJvdDAxNSByb3RhdGUgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3QwMTYgcm90YXRlICAgICAgICAxICAgIDEuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90MDE3IHJvdGF0ZSAgICAgICAgMSAgICAwLjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDAxOCByb3RhdGUgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3QwMTkgcm90YXRlICAgICAgICAxICAgIDFFKzEgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90MDIwIHJvdGF0ZSAgICAgICAgMSAgICAxRSs5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDAyMSByb3RhdGUgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3QwMjIgcm90YXRlICAgICAgICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGFuZCB8cmhzfCA8PSBwcmVjaXNpb24KK2Rxcm90MDI1IHJvdGF0ZSAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDAyNiByb3RhdGUgICAgICAgIDEgICAgLTM1ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3QwMjcgcm90YXRlICAgICAgICAxICAgICAzNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90MDI4IHJvdGF0ZSAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZ1bGwgcGF0dGVybgorZHFyb3QwMzAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTM0ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXJvdDAzMSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzMgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEKK2Rxcm90MDMyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMiAgLT4gMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMgorZHFyb3QwMzMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMxICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzCitkcXJvdDAzNCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzAgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQKK2Rxcm90MDM1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yOSAgLT4gNjc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NQorZHFyb3QwMzYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI4ICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2CitkcXJvdDAzNyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjcgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1NjcKK2Rxcm90MDM4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNiAgLT4gOTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3OAorZHFyb3QwMzkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI1ICAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5CitkcXJvdDA0MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjQgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAKK2Rxcm90MDQxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMyAgLT4gMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMQorZHFyb3QwNDIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIyICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyCitkcXJvdDA0MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjEgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjMKK2Rxcm90MDQ0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMCAgLT4gNTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNAorZHFyb3QwNDUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE5ICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1CitkcXJvdDA0NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTggIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTYKK2Rxcm90MDQ4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNyAgLT4gODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2NworZHFyb3QwNDkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE2ICAtPiA5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4CitkcXJvdDA1MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTUgIC0+ICAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkKK2Rxcm90MDUxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNCAgLT4gMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MAorZHFyb3QwNTIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEzICAtPiAyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxCitkcXJvdDA1MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTIgIC0+IDM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIKK2Rxcm90MDU0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMSAgLT4gNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworZHFyb3QwNTUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEwICAtPiA1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXJvdDA1NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtOSAgIC0+IDY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUKK2Rxcm90MDU3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC04ICAgLT4gNzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NgorZHFyb3QwNTggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTcgICAtPiA4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3CitkcXJvdDA1OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNiAgIC0+IDkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NzgKK2Rxcm90MDYwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC01ICAgLT4gIDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQorZHFyb3QwNjEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTQgICAtPiAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwCitkcXJvdDA2MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMyAgIC0+IDIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEKK2Rxcm90MDYzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yICAgLT4gMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMgorZHFyb3QwNjQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEgICAtPiA0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkcXJvdDA2NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKKworZHFyb3QwNjYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXJvdDA2NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEKK2Rxcm90MDY4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyICAgLT4gMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMgorZHFyb3QwNjkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMgICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzCitkcXJvdDA3MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNCAgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQKK2Rxcm90MDcxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs1ICAgLT4gNjc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NQorZHFyb3QwNzIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzYgICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2CitkcXJvdDA3MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNyAgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1NjcKK2Rxcm90MDc0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs4ICAgLT4gOTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3OAorZHFyb3QwNzUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzkgICAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5CitkcXJvdDA3NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAKK2Rxcm90MDc3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMSAgLT4gMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMQorZHFyb3QwNzggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEyICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyCitkcXJvdDA3OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTMgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjMKK2Rxcm90MDgwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNCAgLT4gNTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNAorZHFyb3QwODEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE1ICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1CitkcXJvdDA4MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTYgIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTYKK2Rxcm90MDgzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNyAgLT4gODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2NworZHFyb3QwODQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE4ICAtPiA5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4CitkcXJvdDA4NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTkgIC0+ICAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkKK2Rxcm90MDg2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMCAgLT4gMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MAorZHFyb3QwODcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIxICAtPiAyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxCitkcXJvdDA4OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjIgIC0+IDM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIKK2Rxcm90MDg5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMyAgLT4gNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworZHFyb3QwOTAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI0ICAtPiA1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXJvdDA5MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjUgIC0+IDY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUKK2Rxcm90MDkyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNiAgLT4gNzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NgorZHFyb3QwOTMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI3ICAtPiA4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3CitkcXJvdDA5NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjggIC0+IDkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NzgKK2Rxcm90MDk1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyOSAgLT4gIDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQorZHFyb3QwOTYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMwICAtPiAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwCitkcXJvdDA5NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzEgIC0+IDIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEKK2Rxcm90MDk4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMiAgLT4gMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMgorZHFyb3QwOTkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMzICAtPiA0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkcXJvdDEwMCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzQgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKKworLS0gemVyb3MKK2Rxcm90MjcwIHJvdGF0ZSAgMEUtMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMEUtMTAKK2Rxcm90MjcxIHJvdGF0ZSAgMEUtMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMEUtMTAKK2Rxcm90MjcyIHJvdGF0ZSAgMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMC4wMDAKK2Rxcm90MjczIHJvdGF0ZSAgMC4wMDAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMC4wMDAKK2Rxcm90Mjc0IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMEUrMTAKK2Rxcm90Mjc1IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMEUrMTAKK2Rxcm90Mjc2IHJvdGF0ZSAtMEUtMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMEUtMTAKK2Rxcm90Mjc3IHJvdGF0ZSAtMEUtMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMEUtMTAKK2Rxcm90Mjc4IHJvdGF0ZSAtMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMC4wMDAKK2Rxcm90Mjc5IHJvdGF0ZSAtMC4wMDAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMC4wMDAKK2Rxcm90MjgwIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMEUrMTAKK2Rxcm90MjgxIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMEUrMTAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Rxcm90MTQxIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFyb3QxNDIgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTMzIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CitkcXJvdDE0MyByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxcm90MTQ0IHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAzMyAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorZHFyb3QxNDUgcm90YXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwCitkcXJvdDE0NiByb3RhdGUgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gMS4wRS02MTQyCitkcXJvdDE0NyByb3RhdGUgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTQyCitkcXJvdDE0OCByb3RhdGUgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTAKK2Rxcm90MTUxIHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXJvdDE1MiByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gMUUtNjE3NgorZHFyb3QxNTMgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IDFFLTYxNzYKK2Rxcm90MTU0IHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXJvdDE1NSByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFyb3QxNTYgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IDlFLTYxNzYKK2Rxcm90MTU3IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiA5RS02MTc2CitkcXJvdDE1OCByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFyb3QxNjAgcm90YXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcXJvdDE2MSByb3RhdGUgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gMS4wRS02MTc1CitkcXJvdDE2MiByb3RhdGUgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTc1CitkcXJvdDE2MyByb3RhdGUgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKKy0tICBuZWdhdGl2ZXMKK2Rxcm90MTcxIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxcm90MTcyIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0zMyAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxcm90MTczIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAxICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxcm90MTc0IHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAzMyAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxcm90MTc1IHJvdGF0ZSAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTAKK2Rxcm90MTc2IHJvdGF0ZSAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAtMS4wRS02MTQyCitkcXJvdDE3NyByb3RhdGUgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtNjE0MgorZHFyb3QxNzggcm90YXRlIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjExMAorZHFyb3QxODEgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXJvdDE4MiByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gLTFFLTYxNzYKK2Rxcm90MTgzIHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAtMUUtNjE3NgorZHFyb3QxODQgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXJvdDE4NSByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKK2Rxcm90MTg2IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiAtOUUtNjE3NgorZHFyb3QxODcgcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IC05RS02MTc2CitkcXJvdDE4OCByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKK2Rxcm90MTkwIHJvdGF0ZSAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKK2Rxcm90MTkxIHJvdGF0ZSAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAtMS4wRS02MTc1CitkcXJvdDE5MiByb3RhdGUgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtNjE3NQorZHFyb3QxOTMgcm90YXRlIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworCistLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpCitkcXJvdDIwMSByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAgMCAgLT4gLTAKK2Rxcm90MjAyIHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMCAgICAyICAtPiAtMAorZHFyb3QyMDMgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgIDIgIC0+IC0xMDAKK2Rxcm90MjA0IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIDMzICAtPiAtMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFyb3QyMDUgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgMzQgIC0+IC0xCitkcXJvdDIwNiByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAtMSAgLT4gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxcm90MjA3IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMCAgIC0yICAtPiAtMAorZHFyb3QyMDggcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTEgIC0+IC00MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkcXJvdDIwOSByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gLTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEKK2Rxcm90MjEwIHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorZHFyb3QyMTEgcm90YXRlIC05OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+IC05MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ5CitkcXJvdDIxMiByb3RhdGUgLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKKworCistLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbAorZHFyb3Q3ODEgcm90YXRlIC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkKK2Rxcm90NzgyIHJvdGF0ZSAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitkcXJvdDc4MyByb3RhdGUgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFyb3Q3ODQgcm90YXRlIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK2Rxcm90Nzg1IHJvdGF0ZSAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitkcXJvdDc4NiByb3RhdGUgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQorZHFyb3Q3ODcgcm90YXRlIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90Nzg4IHJvdGF0ZSAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDc4OSByb3RhdGUgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q3OTAgcm90YXRlIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90NzkxIHJvdGF0ZSAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDc5MiByb3RhdGUgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q3OTMgcm90YXRlICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90Nzk0IHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rxcm90ODAwIHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDgwMSByb3RhdGUgIEluZiAgLTggICAgIC0+IEluZmluaXR5CitkcXJvdDgwMiByb3RhdGUgIEluZiAgLTEgICAgIC0+IEluZmluaXR5CitkcXJvdDgwMyByb3RhdGUgIEluZiAgLTAgICAgIC0+IEluZmluaXR5CitkcXJvdDgwNCByb3RhdGUgIEluZiAgIDAgICAgIC0+IEluZmluaXR5CitkcXJvdDgwNSByb3RhdGUgIEluZiAgIDEgICAgIC0+IEluZmluaXR5CitkcXJvdDgwNiByb3RhdGUgIEluZiAgIDggICAgIC0+IEluZmluaXR5CitkcXJvdDgwNyByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4MDggcm90YXRlIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODA5IHJvdGF0ZSAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDgxMCByb3RhdGUgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4MTEgcm90YXRlIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODEyIHJvdGF0ZSAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDgxMyByb3RhdGUgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4MTQgcm90YXRlICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODE1IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rxcm90ODIxIHJvdGF0ZSAgTmFOIC1JbmYgICAgLT4gIE5hTgorZHFyb3Q4MjIgcm90YXRlICBOYU4gLTEwMDAgICAtPiAgTmFOCitkcXJvdDgyMyByb3RhdGUgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2Rxcm90ODI0IHJvdGF0ZSAgTmFOIC0wICAgICAgLT4gIE5hTgorZHFyb3Q4MjUgcm90YXRlICBOYU4gIDAgICAgICAtPiAgTmFOCitkcXJvdDgyNiByb3RhdGUgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2Rxcm90ODI3IHJvdGF0ZSAgTmFOICAxMDAwICAgLT4gIE5hTgorZHFyb3Q4Mjggcm90YXRlICBOYU4gIEluZiAgICAtPiAgTmFOCitkcXJvdDgyOSByb3RhdGUgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2Rxcm90ODMwIHJvdGF0ZSAtSW5mICBOYU4gICAgLT4gIE5hTgorZHFyb3Q4MzEgcm90YXRlIC0xMDAwIE5hTiAgICAtPiAgTmFOCitkcXJvdDgzMiByb3RhdGUgLTEgICAgTmFOICAgIC0+ICBOYU4KK2Rxcm90ODMzIHJvdGF0ZSAtMCAgICBOYU4gICAgLT4gIE5hTgorZHFyb3Q4MzQgcm90YXRlICAwICAgIE5hTiAgICAtPiAgTmFOCitkcXJvdDgzNSByb3RhdGUgIDEgICAgTmFOICAgIC0+ICBOYU4KK2Rxcm90ODM2IHJvdGF0ZSAgMTAwMCBOYU4gICAgLT4gIE5hTgorZHFyb3Q4Mzcgcm90YXRlICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2Rxcm90ODQxIHJvdGF0ZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQyIHJvdGF0ZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQzIHJvdGF0ZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQ0IHJvdGF0ZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQ1IHJvdGF0ZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQ2IHJvdGF0ZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQ3IHJvdGF0ZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQ4IHJvdGF0ZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODQ5IHJvdGF0ZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODUwIHJvdGF0ZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODUxIHJvdGF0ZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODUyIHJvdGF0ZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODUzIHJvdGF0ZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODU0IHJvdGF0ZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODU1IHJvdGF0ZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODU2IHJvdGF0ZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODU3IHJvdGF0ZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODU4IHJvdGF0ZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODU5IHJvdGF0ZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFyb3Q4NjEgcm90YXRlICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorZHFyb3Q4NjIgcm90YXRlICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorZHFyb3Q4NjMgcm90YXRlICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworZHFyb3Q4NjQgcm90YXRlICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorZHFyb3Q4NjUgcm90YXRlICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorZHFyb3Q4NjYgcm90YXRlIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworZHFyb3Q4Njcgcm90YXRlIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorZHFyb3Q4Njggcm90YXRlICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorZHFyb3Q4Njkgcm90YXRlICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK2Rxcm90ODcxIHJvdGF0ZSAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NzIgcm90YXRlICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg3MyByb3RhdGUgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODc0IHJvdGF0ZSAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4NzUgcm90YXRlICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg3NiByb3RhdGUgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODc3IHJvdGF0ZSAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4Nzggcm90YXRlIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg3OSByb3RhdGUgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxcm90ODgwIHJvdGF0ZSAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorZHFyb3Q4ODEgcm90YXRlICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg4MiByb3RhdGUgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorZHFyb3Q4ODMgcm90YXRlIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitkcXJvdDg4NCByb3RhdGUgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorZHFyb3Q4ODUgcm90YXRlICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2FtZVF1YW50dW0uZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTYW1lUXVhbnR1bS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1N2NkYTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2FtZVF1YW50dW0uZGVjVGVzdApAQCAtMCwwICsxLDM4OSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVNhbWVRdWFudHVtLmRlY1Rlc3QgLS0gY2hlY2sgZGVjUXVhZCBxdWFudHVtcyBtYXRjaCAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitkcXNhbXEwMDEgc2FtZXF1YW50dW0gIDAgICAgICAwICAgICAgLT4gIDEKK2Rxc2FtcTAwMiBzYW1lcXVhbnR1bSAgMCAgICAgIDEgICAgICAtPiAgMQorZHFzYW1xMDAzIHNhbWVxdWFudHVtICAxICAgICAgMCAgICAgIC0+ICAxCitkcXNhbXEwMDQgc2FtZXF1YW50dW0gIDEgICAgICAxICAgICAgLT4gIDEKKworZHFzYW1xMDExIHNhbWVxdWFudHVtICAxMCAgICAgMUUrMSAgIC0+IDAKK2Rxc2FtcTAxMiBzYW1lcXVhbnR1bSAgMTBFKzEgIDEwRSsxICAtPiAxCitkcXNhbXEwMTMgc2FtZXF1YW50dW0gIDEwMCAgICAxMEUrMSAgLT4gMAorZHFzYW1xMDE0IHNhbWVxdWFudHVtICAxMDAgICAgMUUrMiAgIC0+IDAKK2Rxc2FtcTAxNSBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTIgICAtPiAwCitkcXNhbXEwMTYgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0xICAgLT4gMQorZHFzYW1xMDE3IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMCAgIC0+IDAKK2Rxc2FtcTAxOCBzYW1lcXVhbnR1bSAgOTk5ICAgIDk5OSAgICAtPiAxCitkcXNhbXEwMTkgc2FtZXF1YW50dW0gIDk5OUUtMSA5OS45ICAgLT4gMQorZHFzYW1xMDIwIHNhbWVxdWFudHVtICAxMTFFLTEgMjIuMiAgIC0+IDEKK2Rxc2FtcTAyMSBzYW1lcXVhbnR1bSAgMTExRS0xIDEyMzQuMiAtPiAxCisKKy0tIHplcm9zCitkcXNhbXEwMzAgc2FtZXF1YW50dW0gIDAuMCAgICAxLjEgICAgLT4gMQorZHFzYW1xMDMxIHNhbWVxdWFudHVtICAwLjAgICAgMS4xMSAgIC0+IDAKK2Rxc2FtcTAzMiBzYW1lcXVhbnR1bSAgMC4wICAgIDAgICAgICAtPiAwCitkcXNhbXEwMzMgc2FtZXF1YW50dW0gIDAuMCAgICAwLjAgICAgLT4gMQorZHFzYW1xMDM0IHNhbWVxdWFudHVtICAwLjAgICAgMC4wMCAgIC0+IDAKK2Rxc2FtcTAzNSBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzAgICAtPiAwCitkcXNhbXEwMzYgc2FtZXF1YW50dW0gIDBFKzEgICAwRSsxICAgLT4gMQorZHFzYW1xMDM3IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMiAgIC0+IDAKK2Rxc2FtcTAzOCBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE2ICAtPiAwCitkcXNhbXEwMzkgc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xNyAgLT4gMQorZHFzYW1xMDQwIHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTggIC0+IDAKK2Rxc2FtcTA0MSBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTUgLT4gMAorZHFzYW1xMDQyIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNiAtPiAxCitkcXNhbXEwNDMgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE3IC0+IDAKK2Rxc2FtcTA0NCBzYW1lcXVhbnR1bSAtMEUtMTcgIDAuMEUtMTYgLT4gMQorZHFzYW1xMDQ1IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNyAtPiAwCitkcXNhbXEwNDYgc2FtZXF1YW50dW0gIDBFLTE3IC0wLjBFLTE2IC0+IDEKK2Rxc2FtcTA0NyBzYW1lcXVhbnR1bSAtMEUtMTcgIDAuMEUtMTcgLT4gMAorZHFzYW1xMDQ4IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNiAtPiAxCitkcXNhbXEwNDkgc2FtZXF1YW50dW0gLTBFLTE3IC0wLjBFLTE3IC0+IDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Rxc2FtcTA1MSBzYW1lcXVhbnR1bSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAxCitkcXNhbXEwNTIgc2FtZXF1YW50dW0gIDFFLTYxNDMgICAgICAgICAgICAgMUUtNjE0MyAgICAgICAgICAgLT4gMQorZHFzYW1xMDUzIHNhbWVxdWFudHVtICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IDEKK2Rxc2FtcTA1NCBzYW1lcXVhbnR1bSAgMUUtNjE3NiAgICAgICAgICAgICAxRS02MTc2ICAgICAgICAgICAtPiAxCitkcXNhbXEwNTUgc2FtZXF1YW50dW0gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gMQorZHFzYW1xMDU2IHNhbWVxdWFudHVtICAxRS02MTQzICAgICAgICAgICAgIDFFLTYxNDMgICAgICAgICAgIC0+IDEKK2Rxc2FtcTA1NyBzYW1lcXVhbnR1bSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAxCitkcXNhbXEwNTggc2FtZXF1YW50dW0gIDFFLTYxNzYgICAgICAgICAgICAgMUUtNjE3NiAgICAgICAgICAgLT4gMQorCitkcXNhbXEwNjEgc2FtZXF1YW50dW0gIC0xRS02MTc2ICAgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgLT4gMQorZHFzYW1xMDYyIHNhbWVxdWFudHVtICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0+IDEKK2Rxc2FtcTA2MyBzYW1lcXVhbnR1bSAgLTFFLTYxNDMgICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAxCitkcXNhbXEwNjQgc2FtZXF1YW50dW0gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQorZHFzYW1xMDY1IHNhbWVxdWFudHVtICAtMUUtNjE3NiAgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDEKK2Rxc2FtcTA2NiBzYW1lcXVhbnR1bSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtPiAxCitkcXNhbXEwNjcgc2FtZXF1YW50dW0gIC0xRS02MTQzICAgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgLT4gMQorZHFzYW1xMDY4IHNhbWVxdWFudHVtICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDEKKworZHFzYW1xMDcxIHNhbWVxdWFudHVtICAtNEUtNjE3NiAgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDEKK2Rxc2FtcTA3MiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMEUtNjE0MyAtPiAxCitkcXNhbXEwNzMgc2FtZXF1YW50dW0gIC00RS02MTQzICAgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgLT4gMQorZHFzYW1xMDc0IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk5OTQ5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDEKK2Rxc2FtcTA3NSBzYW1lcXVhbnR1bSAgLTRFLTYxNzYgICAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAtPiAxCitkcXNhbXEwNzYgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLTEuMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLT4gMQorZHFzYW1xMDc3IHNhbWVxdWFudHVtICAtNEUtNjE0MyAgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDEKK2Rxc2FtcTA3OCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtOS45NDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxCisKK2Rxc2FtcTA4MSBzYW1lcXVhbnR1bSAgLTRFLTEwMDYgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDAKK2Rxc2FtcTA4MiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjEzNiAtPiAwCitkcXNhbXEwODMgc2FtZXF1YW50dW0gIC00RS02MTQwICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAwCitkcXNhbXEwODQgc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTk5NDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMzYgLT4gMAorZHFzYW1xMDg1IHNhbWVxdWFudHVtICAtNEUtMTAwNiAgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgLT4gMAorZHFzYW1xMDg2IHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTM2IC0+IDAKK2Rxc2FtcTA4NyBzYW1lcXVhbnR1bSAgLTRFLTYxMzMgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDAKK2Rxc2FtcTA4OCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtOS45NDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjEzNiAtPiAwCisKKy0tIHNwZWNpYWxzICYgY29tYmluYXRpb25zCitkcXNhbXEwMTEwIHNhbWVxdWFudHVtICAtSW5mICAgIC1JbmYgICAtPiAxCitkcXNhbXEwMTExIHNhbWVxdWFudHVtICAtSW5mICAgICBJbmYgICAtPiAxCitkcXNhbXEwMTEyIHNhbWVxdWFudHVtICAtSW5mICAgICBOYU4gICAtPiAwCitkcXNhbXEwMTEzIHNhbWVxdWFudHVtICAtSW5mICAgIC03RSszICAtPiAwCitkcXNhbXEwMTE0IHNhbWVxdWFudHVtICAtSW5mICAgIC03ICAgICAtPiAwCitkcXNhbXEwMTE1IHNhbWVxdWFudHVtICAtSW5mICAgIC03RS0zICAtPiAwCitkcXNhbXEwMTE2IHNhbWVxdWFudHVtICAtSW5mICAgIC0wRS0zICAtPiAwCitkcXNhbXEwMTE3IHNhbWVxdWFudHVtICAtSW5mICAgIC0wICAgICAtPiAwCitkcXNhbXEwMTE4IHNhbWVxdWFudHVtICAtSW5mICAgIC0wRSszICAtPiAwCitkcXNhbXEwMTE5IHNhbWVxdWFudHVtICAtSW5mICAgICAwRS0zICAtPiAwCitkcXNhbXEwMTIwIHNhbWVxdWFudHVtICAtSW5mICAgICAwICAgICAtPiAwCitkcXNhbXEwMTIxIHNhbWVxdWFudHVtICAtSW5mICAgICAwRSszICAtPiAwCitkcXNhbXEwMTIyIHNhbWVxdWFudHVtICAtSW5mICAgICA3RS0zICAtPiAwCitkcXNhbXEwMTIzIHNhbWVxdWFudHVtICAtSW5mICAgICA3ICAgICAtPiAwCitkcXNhbXEwMTI0IHNhbWVxdWFudHVtICAtSW5mICAgICA3RSszICAtPiAwCitkcXNhbXEwMTI1IHNhbWVxdWFudHVtICAtSW5mICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTAyMTAgc2FtZXF1YW50dW0gICBJbmYgICAgLUluZiAgIC0+IDEKK2Rxc2FtcTAyMTEgc2FtZXF1YW50dW0gICBJbmYgICAgIEluZiAgIC0+IDEKK2Rxc2FtcTAyMTIgc2FtZXF1YW50dW0gICBJbmYgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTAyMTMgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFKzMgIC0+IDAKK2Rxc2FtcTAyMTQgc2FtZXF1YW50dW0gICBJbmYgICAgLTcgICAgIC0+IDAKK2Rxc2FtcTAyMTUgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFLTMgIC0+IDAKK2Rxc2FtcTAyMTYgc2FtZXF1YW50dW0gICBJbmYgICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTAyMTcgc2FtZXF1YW50dW0gICBJbmYgICAgLTAgICAgIC0+IDAKK2Rxc2FtcTAyMTggc2FtZXF1YW50dW0gICBJbmYgICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTAyMTkgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTAyMjAgc2FtZXF1YW50dW0gICBJbmYgICAgIDAgICAgIC0+IDAKK2Rxc2FtcTAyMjEgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTAyMjIgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTAyMjMgc2FtZXF1YW50dW0gICBJbmYgICAgIDcgICAgIC0+IDAKK2Rxc2FtcTAyMjQgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTAyMjUgc2FtZXF1YW50dW0gICBJbmYgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMDMxMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtSW5mICAgLT4gMAorZHFzYW1xMDMxMSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgSW5mICAgLT4gMAorZHFzYW1xMDMxMiBzYW1lcXVhbnR1bSAgIE5hTiAgICAgTmFOICAgLT4gMQorZHFzYW1xMDMxMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtN0UrMyAgLT4gMAorZHFzYW1xMDMxNCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtNyAgICAgLT4gMAorZHFzYW1xMDMxNSBzYW1lcXVhbnR1bSAgIE5hTiAgICAtN0UtMyAgLT4gMAorZHFzYW1xMDMxNiBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMEUtMyAgLT4gMAorZHFzYW1xMDMxNyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMCAgICAgLT4gMAorZHFzYW1xMDMxOCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMEUrMyAgLT4gMAorZHFzYW1xMDMxOSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMEUtMyAgLT4gMAorZHFzYW1xMDMyMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMCAgICAgLT4gMAorZHFzYW1xMDMyMSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMEUrMyAgLT4gMAorZHFzYW1xMDMyMiBzYW1lcXVhbnR1bSAgIE5hTiAgICAgN0UtMyAgLT4gMAorZHFzYW1xMDMyMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAgNyAgICAgLT4gMAorZHFzYW1xMDMyNCBzYW1lcXVhbnR1bSAgIE5hTiAgICAgN0UrMyAgLT4gMAorZHFzYW1xMDMyNSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgc05hTiAgLT4gMQorCitkcXNhbXEwNDEwIHNhbWVxdWFudHVtICAtN0UrMyAgICAtSW5mICAgLT4gMAorZHFzYW1xMDQxMSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIEluZiAgIC0+IDAKK2Rxc2FtcTA0MTIgc2FtZXF1YW50dW0gIC03RSszICAgICBOYU4gICAtPiAwCitkcXNhbXEwNDEzIHNhbWVxdWFudHVtICAtN0UrMyAgICAtN0UrMyAgLT4gMQorZHFzYW1xMDQxNCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTcgICAgIC0+IDAKK2Rxc2FtcTA0MTUgc2FtZXF1YW50dW0gIC03RSszICAgIC03RS0zICAtPiAwCitkcXNhbXEwNDE2IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMEUtMyAgLT4gMAorZHFzYW1xMDQxNyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTAgICAgIC0+IDAKK2Rxc2FtcTA0MTggc2FtZXF1YW50dW0gIC03RSszICAgIC0wRSszICAtPiAxCitkcXNhbXEwNDE5IHNhbWVxdWFudHVtICAtN0UrMyAgICAgMEUtMyAgLT4gMAorZHFzYW1xMDQyMCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDAgICAgIC0+IDAKK2Rxc2FtcTA0MjEgc2FtZXF1YW50dW0gIC03RSszICAgICAwRSszICAtPiAxCitkcXNhbXEwNDIyIHNhbWVxdWFudHVtICAtN0UrMyAgICAgN0UtMyAgLT4gMAorZHFzYW1xMDQyMyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDcgICAgIC0+IDAKK2Rxc2FtcTA0MjQgc2FtZXF1YW50dW0gIC03RSszICAgICA3RSszICAtPiAxCitkcXNhbXEwNDI1IHNhbWVxdWFudHVtICAtN0UrMyAgICAgc05hTiAgLT4gMAorCitkcXNhbXEwNTEwIHNhbWVxdWFudHVtICAtNyAgICAgIC1JbmYgICAtPiAwCitkcXNhbXEwNTExIHNhbWVxdWFudHVtICAtNyAgICAgICBJbmYgICAtPiAwCitkcXNhbXEwNTEyIHNhbWVxdWFudHVtICAtNyAgICAgICBOYU4gICAtPiAwCitkcXNhbXEwNTEzIHNhbWVxdWFudHVtICAtNyAgICAgIC03RSszICAtPiAwCitkcXNhbXEwNTE0IHNhbWVxdWFudHVtICAtNyAgICAgIC03ICAgICAtPiAxCitkcXNhbXEwNTE1IHNhbWVxdWFudHVtICAtNyAgICAgIC03RS0zICAtPiAwCitkcXNhbXEwNTE2IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRS0zICAtPiAwCitkcXNhbXEwNTE3IHNhbWVxdWFudHVtICAtNyAgICAgIC0wICAgICAtPiAxCitkcXNhbXEwNTE4IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRSszICAtPiAwCitkcXNhbXEwNTE5IHNhbWVxdWFudHVtICAtNyAgICAgICAwRS0zICAtPiAwCitkcXNhbXEwNTIwIHNhbWVxdWFudHVtICAtNyAgICAgICAwICAgICAtPiAxCitkcXNhbXEwNTIxIHNhbWVxdWFudHVtICAtNyAgICAgICAwRSszICAtPiAwCitkcXNhbXEwNTIyIHNhbWVxdWFudHVtICAtNyAgICAgICA3RS0zICAtPiAwCitkcXNhbXEwNTIzIHNhbWVxdWFudHVtICAtNyAgICAgICA3ICAgICAtPiAxCitkcXNhbXEwNTI0IHNhbWVxdWFudHVtICAtNyAgICAgICA3RSszICAtPiAwCitkcXNhbXEwNTI1IHNhbWVxdWFudHVtICAtNyAgICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTA2MTAgc2FtZXF1YW50dW0gIC03RS0zICAgIC1JbmYgICAtPiAwCitkcXNhbXEwNjExIHNhbWVxdWFudHVtICAtN0UtMyAgICAgSW5mICAgLT4gMAorZHFzYW1xMDYxMiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTA2MTMgc2FtZXF1YW50dW0gIC03RS0zICAgIC03RSszICAtPiAwCitkcXNhbXEwNjE0IHNhbWVxdWFudHVtICAtN0UtMyAgICAtNyAgICAgLT4gMAorZHFzYW1xMDYxNSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTdFLTMgIC0+IDEKK2Rxc2FtcTA2MTYgc2FtZXF1YW50dW0gIC03RS0zICAgIC0wRS0zICAtPiAxCitkcXNhbXEwNjE3IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMCAgICAgLT4gMAorZHFzYW1xMDYxOCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTA2MTkgc2FtZXF1YW50dW0gIC03RS0zICAgICAwRS0zICAtPiAxCitkcXNhbXEwNjIwIHNhbWVxdWFudHVtICAtN0UtMyAgICAgMCAgICAgLT4gMAorZHFzYW1xMDYyMSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTA2MjIgc2FtZXF1YW50dW0gIC03RS0zICAgICA3RS0zICAtPiAxCitkcXNhbXEwNjIzIHNhbWVxdWFudHVtICAtN0UtMyAgICAgNyAgICAgLT4gMAorZHFzYW1xMDYyNCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTA2MjUgc2FtZXF1YW50dW0gIC03RS0zICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTA3MTAgc2FtZXF1YW50dW0gIC0wRS0zICAgIC1JbmYgICAtPiAwCitkcXNhbXEwNzExIHNhbWVxdWFudHVtICAtMEUtMyAgICAgSW5mICAgLT4gMAorZHFzYW1xMDcxMiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTA3MTMgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03RSszICAtPiAwCitkcXNhbXEwNzE0IHNhbWVxdWFudHVtICAtMEUtMyAgICAtNyAgICAgLT4gMAorZHFzYW1xMDcxNSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTdFLTMgIC0+IDEKK2Rxc2FtcTA3MTYgc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wRS0zICAtPiAxCitkcXNhbXEwNzE3IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMCAgICAgLT4gMAorZHFzYW1xMDcxOCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTA3MTkgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwRS0zICAtPiAxCitkcXNhbXEwNzIwIHNhbWVxdWFudHVtICAtMEUtMyAgICAgMCAgICAgLT4gMAorZHFzYW1xMDcyMSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTA3MjIgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3RS0zICAtPiAxCitkcXNhbXEwNzIzIHNhbWVxdWFudHVtICAtMEUtMyAgICAgNyAgICAgLT4gMAorZHFzYW1xMDcyNCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTA3MjUgc2FtZXF1YW50dW0gIC0wRS0zICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTA4MTAgc2FtZXF1YW50dW0gIC0wICAgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTA4MTEgc2FtZXF1YW50dW0gIC0wICAgICAgIEluZiAgIC0+IDAKK2Rxc2FtcTA4MTIgc2FtZXF1YW50dW0gIC0wICAgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTA4MTMgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFKzMgIC0+IDAKK2Rxc2FtcTA4MTQgc2FtZXF1YW50dW0gIC0wICAgICAgLTcgICAgIC0+IDEKK2Rxc2FtcTA4MTUgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFLTMgIC0+IDAKK2Rxc2FtcTA4MTYgc2FtZXF1YW50dW0gIC0wICAgICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTA4MTcgc2FtZXF1YW50dW0gIC0wICAgICAgLTAgICAgIC0+IDEKK2Rxc2FtcTA4MTggc2FtZXF1YW50dW0gIC0wICAgICAgLTBFKzMgIC0+IDAKK2Rxc2FtcTA4MTkgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTA4MjAgc2FtZXF1YW50dW0gIC0wICAgICAgIDAgICAgIC0+IDEKK2Rxc2FtcTA4MjEgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFKzMgIC0+IDAKK2Rxc2FtcTA4MjIgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTA4MjMgc2FtZXF1YW50dW0gIC0wICAgICAgIDcgICAgIC0+IDEKK2Rxc2FtcTA4MjQgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFKzMgIC0+IDAKK2Rxc2FtcTA4MjUgc2FtZXF1YW50dW0gIC0wICAgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMDkxMCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTA5MTEgc2FtZXF1YW50dW0gIC0wRSszICAgICBJbmYgICAtPiAwCitkcXNhbXEwOTEyIHNhbWVxdWFudHVtICAtMEUrMyAgICAgTmFOICAgLT4gMAorZHFzYW1xMDkxMyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTdFKzMgIC0+IDEKK2Rxc2FtcTA5MTQgc2FtZXF1YW50dW0gIC0wRSszICAgIC03ICAgICAtPiAwCitkcXNhbXEwOTE1IHNhbWVxdWFudHVtICAtMEUrMyAgICAtN0UtMyAgLT4gMAorZHFzYW1xMDkxNiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTA5MTcgc2FtZXF1YW50dW0gIC0wRSszICAgIC0wICAgICAtPiAwCitkcXNhbXEwOTE4IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMEUrMyAgLT4gMQorZHFzYW1xMDkxOSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTA5MjAgc2FtZXF1YW50dW0gIC0wRSszICAgICAwICAgICAtPiAwCitkcXNhbXEwOTIxIHNhbWVxdWFudHVtICAtMEUrMyAgICAgMEUrMyAgLT4gMQorZHFzYW1xMDkyMiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTA5MjMgc2FtZXF1YW50dW0gIC0wRSszICAgICA3ICAgICAtPiAwCitkcXNhbXEwOTI0IHNhbWVxdWFudHVtICAtMEUrMyAgICAgN0UrMyAgLT4gMQorZHFzYW1xMDkyNSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMTExMCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtSW5mICAgLT4gMAorZHFzYW1xMTExMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgSW5mICAgLT4gMAorZHFzYW1xMTExMiBzYW1lcXVhbnR1bSAgMEUtMyAgICAgTmFOICAgLT4gMAorZHFzYW1xMTExMyBzYW1lcXVhbnR1bSAgMEUtMyAgICAtN0UrMyAgLT4gMAorZHFzYW1xMTExNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtNyAgICAgLT4gMAorZHFzYW1xMTExNSBzYW1lcXVhbnR1bSAgMEUtMyAgICAtN0UtMyAgLT4gMQorZHFzYW1xMTExNiBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMEUtMyAgLT4gMQorZHFzYW1xMTExNyBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMCAgICAgLT4gMAorZHFzYW1xMTExOCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMEUrMyAgLT4gMAorZHFzYW1xMTExOSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMEUtMyAgLT4gMQorZHFzYW1xMTEyMCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMCAgICAgLT4gMAorZHFzYW1xMTEyMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMEUrMyAgLT4gMAorZHFzYW1xMTEyMiBzYW1lcXVhbnR1bSAgMEUtMyAgICAgN0UtMyAgLT4gMQorZHFzYW1xMTEyMyBzYW1lcXVhbnR1bSAgMEUtMyAgICAgNyAgICAgLT4gMAorZHFzYW1xMTEyNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgN0UrMyAgLT4gMAorZHFzYW1xMTEyNSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgc05hTiAgLT4gMAorCitkcXNhbXExMjEwIHNhbWVxdWFudHVtICAwICAgICAgIC1JbmYgICAtPiAwCitkcXNhbXExMjExIHNhbWVxdWFudHVtICAwICAgICAgICBJbmYgICAtPiAwCitkcXNhbXExMjEyIHNhbWVxdWFudHVtICAwICAgICAgICBOYU4gICAtPiAwCitkcXNhbXExMjEzIHNhbWVxdWFudHVtICAwICAgICAgIC03RSszICAtPiAwCitkcXNhbXExMjE0IHNhbWVxdWFudHVtICAwICAgICAgIC03ICAgICAtPiAxCitkcXNhbXExMjE1IHNhbWVxdWFudHVtICAwICAgICAgIC03RS0zICAtPiAwCitkcXNhbXExMjE2IHNhbWVxdWFudHVtICAwICAgICAgIC0wRS0zICAtPiAwCitkcXNhbXExMjE3IHNhbWVxdWFudHVtICAwICAgICAgIC0wICAgICAtPiAxCitkcXNhbXExMjE4IHNhbWVxdWFudHVtICAwICAgICAgIC0wRSszICAtPiAwCitkcXNhbXExMjE5IHNhbWVxdWFudHVtICAwICAgICAgICAwRS0zICAtPiAwCitkcXNhbXExMjIwIHNhbWVxdWFudHVtICAwICAgICAgICAwICAgICAtPiAxCitkcXNhbXExMjIxIHNhbWVxdWFudHVtICAwICAgICAgICAwRSszICAtPiAwCitkcXNhbXExMjIyIHNhbWVxdWFudHVtICAwICAgICAgICA3RS0zICAtPiAwCitkcXNhbXExMjIzIHNhbWVxdWFudHVtICAwICAgICAgICA3ICAgICAtPiAxCitkcXNhbXExMjI0IHNhbWVxdWFudHVtICAwICAgICAgICA3RSszICAtPiAwCitkcXNhbXExMjI1IHNhbWVxdWFudHVtICAwICAgICAgICBzTmFOICAtPiAwCisKK2Rxc2FtcTEzMTAgc2FtZXF1YW50dW0gIDBFKzMgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTEzMTEgc2FtZXF1YW50dW0gIDBFKzMgICAgIEluZiAgIC0+IDAKK2Rxc2FtcTEzMTIgc2FtZXF1YW50dW0gIDBFKzMgICAgIE5hTiAgIC0+IDAKK2Rxc2FtcTEzMTMgc2FtZXF1YW50dW0gIDBFKzMgICAgLTdFKzMgIC0+IDEKK2Rxc2FtcTEzMTQgc2FtZXF1YW50dW0gIDBFKzMgICAgLTcgICAgIC0+IDAKK2Rxc2FtcTEzMTUgc2FtZXF1YW50dW0gIDBFKzMgICAgLTdFLTMgIC0+IDAKK2Rxc2FtcTEzMTYgc2FtZXF1YW50dW0gIDBFKzMgICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTEzMTcgc2FtZXF1YW50dW0gIDBFKzMgICAgLTAgICAgIC0+IDAKK2Rxc2FtcTEzMTggc2FtZXF1YW50dW0gIDBFKzMgICAgLTBFKzMgIC0+IDEKK2Rxc2FtcTEzMTkgc2FtZXF1YW50dW0gIDBFKzMgICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTEzMjAgc2FtZXF1YW50dW0gIDBFKzMgICAgIDAgICAgIC0+IDAKK2Rxc2FtcTEzMjEgc2FtZXF1YW50dW0gIDBFKzMgICAgIDBFKzMgIC0+IDEKK2Rxc2FtcTEzMjIgc2FtZXF1YW50dW0gIDBFKzMgICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTEzMjMgc2FtZXF1YW50dW0gIDBFKzMgICAgIDcgICAgIC0+IDAKK2Rxc2FtcTEzMjQgc2FtZXF1YW50dW0gIDBFKzMgICAgIDdFKzMgIC0+IDEKK2Rxc2FtcTEzMjUgc2FtZXF1YW50dW0gIDBFKzMgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMTQxMCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtSW5mICAgLT4gMAorZHFzYW1xMTQxMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgSW5mICAgLT4gMAorZHFzYW1xMTQxMiBzYW1lcXVhbnR1bSAgN0UtMyAgICAgTmFOICAgLT4gMAorZHFzYW1xMTQxMyBzYW1lcXVhbnR1bSAgN0UtMyAgICAtN0UrMyAgLT4gMAorZHFzYW1xMTQxNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtNyAgICAgLT4gMAorZHFzYW1xMTQxNSBzYW1lcXVhbnR1bSAgN0UtMyAgICAtN0UtMyAgLT4gMQorZHFzYW1xMTQxNiBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMEUtMyAgLT4gMQorZHFzYW1xMTQxNyBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMCAgICAgLT4gMAorZHFzYW1xMTQxOCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMEUrMyAgLT4gMAorZHFzYW1xMTQxOSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMEUtMyAgLT4gMQorZHFzYW1xMTQyMCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMCAgICAgLT4gMAorZHFzYW1xMTQyMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMEUrMyAgLT4gMAorZHFzYW1xMTQyMiBzYW1lcXVhbnR1bSAgN0UtMyAgICAgN0UtMyAgLT4gMQorZHFzYW1xMTQyMyBzYW1lcXVhbnR1bSAgN0UtMyAgICAgNyAgICAgLT4gMAorZHFzYW1xMTQyNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgN0UrMyAgLT4gMAorZHFzYW1xMTQyNSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgc05hTiAgLT4gMAorCitkcXNhbXExNTEwIHNhbWVxdWFudHVtICA3ICAgICAgLUluZiAgIC0+IDAKK2Rxc2FtcTE1MTEgc2FtZXF1YW50dW0gIDcgICAgICAgSW5mICAgLT4gMAorZHFzYW1xMTUxMiBzYW1lcXVhbnR1bSAgNyAgICAgICBOYU4gICAtPiAwCitkcXNhbXExNTEzIHNhbWVxdWFudHVtICA3ICAgICAgLTdFKzMgIC0+IDAKK2Rxc2FtcTE1MTQgc2FtZXF1YW50dW0gIDcgICAgICAtNyAgICAgLT4gMQorZHFzYW1xMTUxNSBzYW1lcXVhbnR1bSAgNyAgICAgIC03RS0zICAtPiAwCitkcXNhbXExNTE2IHNhbWVxdWFudHVtICA3ICAgICAgLTBFLTMgIC0+IDAKK2Rxc2FtcTE1MTcgc2FtZXF1YW50dW0gIDcgICAgICAtMCAgICAgLT4gMQorZHFzYW1xMTUxOCBzYW1lcXVhbnR1bSAgNyAgICAgIC0wRSszICAtPiAwCitkcXNhbXExNTE5IHNhbWVxdWFudHVtICA3ICAgICAgIDBFLTMgIC0+IDAKK2Rxc2FtcTE1MjAgc2FtZXF1YW50dW0gIDcgICAgICAgMCAgICAgLT4gMQorZHFzYW1xMTUyMSBzYW1lcXVhbnR1bSAgNyAgICAgICAwRSszICAtPiAwCitkcXNhbXExNTIyIHNhbWVxdWFudHVtICA3ICAgICAgIDdFLTMgIC0+IDAKK2Rxc2FtcTE1MjMgc2FtZXF1YW50dW0gIDcgICAgICAgNyAgICAgLT4gMQorZHFzYW1xMTUyNCBzYW1lcXVhbnR1bSAgNyAgICAgICA3RSszICAtPiAwCitkcXNhbXExNTI1IHNhbWVxdWFudHVtICA3ICAgICAgIHNOYU4gIC0+IDAKKworZHFzYW1xMTYxMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtSW5mICAgLT4gMAorZHFzYW1xMTYxMSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgSW5mICAgLT4gMAorZHFzYW1xMTYxMiBzYW1lcXVhbnR1bSAgN0UrMyAgICAgTmFOICAgLT4gMAorZHFzYW1xMTYxMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtN0UrMyAgLT4gMQorZHFzYW1xMTYxNCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtNyAgICAgLT4gMAorZHFzYW1xMTYxNSBzYW1lcXVhbnR1bSAgN0UrMyAgICAtN0UtMyAgLT4gMAorZHFzYW1xMTYxNiBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMEUtMyAgLT4gMAorZHFzYW1xMTYxNyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMCAgICAgLT4gMAorZHFzYW1xMTYxOCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMEUrMyAgLT4gMQorZHFzYW1xMTYxOSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMEUtMyAgLT4gMAorZHFzYW1xMTYyMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMCAgICAgLT4gMAorZHFzYW1xMTYyMSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMEUrMyAgLT4gMQorZHFzYW1xMTYyMiBzYW1lcXVhbnR1bSAgN0UrMyAgICAgN0UtMyAgLT4gMAorZHFzYW1xMTYyMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAgNyAgICAgLT4gMAorZHFzYW1xMTYyNCBzYW1lcXVhbnR1bSAgN0UrMyAgICAgN0UrMyAgLT4gMQorZHFzYW1xMTYyNSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgc05hTiAgLT4gMAorCitkcXNhbXExNzEwIHNhbWVxdWFudHVtICBzTmFOICAgIC1JbmYgICAtPiAwCitkcXNhbXExNzExIHNhbWVxdWFudHVtICBzTmFOICAgICBJbmYgICAtPiAwCitkcXNhbXExNzEyIHNhbWVxdWFudHVtICBzTmFOICAgICBOYU4gICAtPiAxCitkcXNhbXExNzEzIHNhbWVxdWFudHVtICBzTmFOICAgIC03RSszICAtPiAwCitkcXNhbXExNzE0IHNhbWVxdWFudHVtICBzTmFOICAgIC03ICAgICAtPiAwCitkcXNhbXExNzE1IHNhbWVxdWFudHVtICBzTmFOICAgIC03RS0zICAtPiAwCitkcXNhbXExNzE2IHNhbWVxdWFudHVtICBzTmFOICAgIC0wRS0zICAtPiAwCitkcXNhbXExNzE3IHNhbWVxdWFudHVtICBzTmFOICAgIC0wICAgICAtPiAwCitkcXNhbXExNzE4IHNhbWVxdWFudHVtICBzTmFOICAgIC0wRSszICAtPiAwCitkcXNhbXExNzE5IHNhbWVxdWFudHVtICBzTmFOICAgICAwRS0zICAtPiAwCitkcXNhbXExNzIwIHNhbWVxdWFudHVtICBzTmFOICAgICAwICAgICAtPiAwCitkcXNhbXExNzIxIHNhbWVxdWFudHVtICBzTmFOICAgICAwRSszICAtPiAwCitkcXNhbXExNzIyIHNhbWVxdWFudHVtICBzTmFOICAgICA3RS0zICAtPiAwCitkcXNhbXExNzIzIHNhbWVxdWFudHVtICBzTmFOICAgICA3ICAgICAtPiAwCitkcXNhbXExNzI0IHNhbWVxdWFudHVtICBzTmFOICAgICA3RSszICAtPiAwCitkcXNhbXExNzI1IHNhbWVxdWFudHVtICBzTmFOICAgICBzTmFOICAtPiAxCistLSBub2lzeSBOYU5zCitkcXNhbXExNzMwIHNhbWVxdWFudHVtICBzTmFOMyAgICBzTmFOMyAtPiAxCitkcXNhbXExNzMxIHNhbWVxdWFudHVtICBzTmFOMyAgICBzTmFONCAtPiAxCitkcXNhbXExNzMyIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFOMyAtPiAxCitkcXNhbXExNzMzIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFONCAtPiAxCitkcXNhbXExNzM0IHNhbWVxdWFudHVtICBzTmFOMyAgICAgMyAgICAtPiAwCitkcXNhbXExNzM1IHNhbWVxdWFudHVtICAgTmFOMyAgICAgMyAgICAtPiAwCitkcXNhbXExNzM2IHNhbWVxdWFudHVtICAgICAgNCAgICBzTmFONCAtPiAwCitkcXNhbXExNzM3IHNhbWVxdWFudHVtICAgICAgMyAgICAgTmFOMyAtPiAwCitkcXNhbXExNzM4IHNhbWVxdWFudHVtICAgIEluZiAgICBzTmFONCAtPiAwCitkcXNhbXExNzM5IHNhbWVxdWFudHVtICAgLUluZiAgICAgTmFOMyAtPiAwCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTY2FsZUIuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTY2FsZUIuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDVkYzU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNjYWxlQi5kZWNUZXN0CkBAIC0wLDAgKzEsMjYwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGRxU2NhbGViQi5kZWNUZXN0IC0tIHNjYWxlIGEgZGVjUXVhZCBieSBwb3dlcnMgb2YgMTAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgMzQKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gTWF4IHxyaHN8IGlzIDIqKDYxNDQrMzQpID0gMTIzNTYKKworLS0gU2FuaXR5IGNoZWNrcworZHFzY2IwMDEgc2NhbGViICAgICAgIDcuNTAgICAxMCAtPiA3LjUwRSsxMAorZHFzY2IwMDIgc2NhbGViICAgICAgIDcuNTAgICAgMyAtPiA3LjUwRSszCitkcXNjYjAwMyBzY2FsZWIgICAgICAgNy41MCAgICAyIC0+IDc1MAorZHFzY2IwMDQgc2NhbGViICAgICAgIDcuNTAgICAgMSAtPiA3NS4wCitkcXNjYjAwNSBzY2FsZWIgICAgICAgNy41MCAgICAwIC0+IDcuNTAKK2Rxc2NiMDA2IHNjYWxlYiAgICAgICA3LjUwICAgLTEgLT4gMC43NTAKK2Rxc2NiMDA3IHNjYWxlYiAgICAgICA3LjUwICAgLTIgLT4gMC4wNzUwCitkcXNjYjAwOCBzY2FsZWIgICAgICAgNy41MCAgLTEwIC0+IDcuNTBFLTEwCitkcXNjYjAwOSBzY2FsZWIgICAgICAtNy41MCAgICAzIC0+IC03LjUwRSszCitkcXNjYjAxMCBzY2FsZWIgICAgICAtNy41MCAgICAyIC0+IC03NTAKK2Rxc2NiMDExIHNjYWxlYiAgICAgIC03LjUwICAgIDEgLT4gLTc1LjAKK2Rxc2NiMDEyIHNjYWxlYiAgICAgIC03LjUwICAgIDAgLT4gLTcuNTAKK2Rxc2NiMDEzIHNjYWxlYiAgICAgIC03LjUwICAgLTEgLT4gLTAuNzUwCisKKy0tIEluZmluaXRpZXMKK2Rxc2NiMDE0IHNjYWxlYiAgSW5maW5pdHkgICAxIC0+IEluZmluaXR5CitkcXNjYjAxNSBzY2FsZWIgIC1JbmZpbml0eSAgMiAtPiAtSW5maW5pdHkKK2Rxc2NiMDE2IHNjYWxlYiAgSW5maW5pdHkgIC0xIC0+IEluZmluaXR5CitkcXNjYjAxNyBzY2FsZWIgIC1JbmZpbml0eSAtMiAtPiAtSW5maW5pdHkKKworLS0gTmV4dCB0d28gYXJlIHNvbWV3aGF0IHVuZGVmaW5lZCBpbiA3NTRyOyB0cmVhdCBhcyBub24taW50ZWdlcgorZHFzY2IwMTggc2NhbGViICAxMCAgSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjAxOSBzY2FsZWIgIDEwIC1JbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gTmFOcyBhcmUgdW5kZWZpbmVkIGluIDc1NHI7IGFzc3VtZSB1c3VhbCBwcm9jZXNzaW5nCistLSBOYU5zLCAwIHBheWxvYWQKK2Rxc2NiMDIxIHNjYWxlYiAgICAgICAgIE5hTiAgMSAtPiBOYU4KK2Rxc2NiMDIyIHNjYWxlYiAgICAgICAgLU5hTiAtMSAtPiAtTmFOCitkcXNjYjAyMyBzY2FsZWIgICAgICAgIHNOYU4gIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjAyNCBzY2FsZWIgICAgICAgLXNOYU4gIDEgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwMjUgc2NhbGViICAgIDQgICAgTmFOICAgIC0+IE5hTgorZHFzY2IwMjYgc2NhbGViIC1JbmYgICAtTmFOICAgIC0+IC1OYU4KK2Rxc2NiMDI3IHNjYWxlYiAgICA0ICAgc05hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDI4IHNjYWxlYiAgSW5mICAtc05hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG5vbi1pbnRlZ2VyIFJIUworZHFzY2IwMzAgc2NhbGViICAxLjIzICAgIDEgICAgLT4gIDEyLjMKK2Rxc2NiMDMxIHNjYWxlYiAgMS4yMyAgICAxLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDMyIHNjYWxlYiAgMS4yMyAgICAxLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDMzIHNjYWxlYiAgMS4yMyAgICAxLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDM0IHNjYWxlYiAgMS4yMyAgICAwLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDM1IHNjYWxlYiAgMS4yMyAgICAwLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDM2IHNjYWxlYiAgMS4yMyAgICAwLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjAzNyBzY2FsZWIgIDEuMjMgICAtMSAgICAtPiAgMC4xMjMKK2Rxc2NiMDYxNCBzY2FsZWIgIDEuMjMgICAtMS4wMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjAzOSBzY2FsZWIgIDEuMjMgICAtMS4xICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjA0MCBzY2FsZWIgIDEuMjMgICAtMS4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjA0MSBzY2FsZWIgIDEuMjMgICAtMC4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjA0MiBzY2FsZWIgIDEuMjMgICAtMC4xMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjA0MyBzY2FsZWIgIDEuMjMgICAtMC45OTk5OTk5OTkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwNDQgc2NhbGViICAxLjIzICAgIDAuMSAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMDQ1IHNjYWxlYiAgMS4yMyAgICAxRSsxICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjA0NiBzY2FsZWIgIDEuMjMgICAgMS4xMjM0RSs2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IwNDcgc2NhbGViICAxLjIzICAgIDEuMTIzRSs0ICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gb3V0LW9mIHJhbmdlIFJIUworZHFzY2IxMjAgc2NhbGViICAxLjIzICAgIDEyMzU1ICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rxc2NiMTIxIHNjYWxlYiAgMS4yMyAgICAxMjM1NiAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcXNjYjEyMiBzY2FsZWIgIDEuMjMgICAgMTIzNTcgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2IxMjMgc2NhbGViICAxLjIzICAgIDEyMzU4ICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMTI0IHNjYWxlYiAgMS4yMyAgIC0xMjM1NSAgICAgICAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcXNjYjEyNSBzY2FsZWIgIDEuMjMgICAtMTIzNTYgICAgICAgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHFzY2IxMjYgc2NhbGViICAxLjIzICAgLTEyMzU3ICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiMTI3IHNjYWxlYiAgMS4yMyAgIC0xMjM1OCAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2Rxc2NiODYxIHNjYWxlYiAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQorZHFzY2I4NjIgc2NhbGViIC1OYU4wMiAgIC0xMDAwICAgIC0+IC1OYU4yCitkcXNjYjg2MyBzY2FsZWIgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMKK2Rxc2NiODY0IHNjYWxlYiAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONAorZHFzY2I4NjUgc2NhbGViICBOYU4wNSAgICBOYU42MSAgIC0+ICBOYU41CitkcXNjYjg2NiBzY2FsZWIgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxCitkcXNjYjg2NyBzY2FsZWIgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxCitkcXNjYjg2OCBzY2FsZWIgIDEwMDAgICAgIE5hTjkxICAgLT4gIE5hTjkxCitkcXNjYjg2OSBzY2FsZWIgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQorZHFzY2I4NzEgc2NhbGViICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiODcyIHNjYWxlYiAgc05hTjAxMiAgLTEwMDAgICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjg3MyBzY2FsZWIgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2I4NzQgc2NhbGViICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiODc1IHNjYWxlYiAgc05hTjAxNSAgc05hTjE4MSAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjg3NiBzY2FsZWIgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2I4Nzcgc2NhbGViIC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiODc4IHNjYWxlYiAtMTAwMCAgICAgc05hTjIxMSAtPiAgTmFOMjExIEludmFsaWRfb3BlcmF0aW9uCitkcXNjYjg3OSBzY2FsZWIgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbgorZHFzY2I4ODAgc2NhbGViICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2NiODgxIHNjYWxlYiAgTmFOMDI1ICAgc05hTjI0MSAtPiAgTmFOMjQxIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZpbml0ZXMKK2Rxc2NiMDUxIHNjYWxlYiAgICAgICAgICA3ICAgLTIgIC0+IDAuMDcKK2Rxc2NiMDUyIHNjYWxlYiAgICAgICAgIC03ICAgLTIgIC0+IC0wLjA3CitkcXNjYjA1MyBzY2FsZWIgICAgICAgICA3NSAgIC0yICAtPiAwLjc1CitkcXNjYjA1NCBzY2FsZWIgICAgICAgIC03NSAgIC0yICAtPiAtMC43NQorZHFzY2IwNTUgc2NhbGViICAgICAgIDcuNTAgICAtMiAgLT4gMC4wNzUwCitkcXNjYjA1NiBzY2FsZWIgICAgICAtNy41MCAgIC0yICAtPiAtMC4wNzUwCitkcXNjYjA1NyBzY2FsZWIgICAgICAgNy41MDAgIC0yICAtPiAwLjA3NTAwCitkcXNjYjA1OCBzY2FsZWIgICAgICAtNy41MDAgIC0yICAtPiAtMC4wNzUwMAorZHFzY2IwNjEgc2NhbGViICAgICAgICAgIDcgICAtMSAgLT4gMC43CitkcXNjYjA2MiBzY2FsZWIgICAgICAgICAtNyAgIC0xICAtPiAtMC43CitkcXNjYjA2MyBzY2FsZWIgICAgICAgICA3NSAgIC0xICAtPiA3LjUKK2Rxc2NiMDY0IHNjYWxlYiAgICAgICAgLTc1ICAgLTEgIC0+IC03LjUKK2Rxc2NiMDY1IHNjYWxlYiAgICAgICA3LjUwICAgLTEgIC0+IDAuNzUwCitkcXNjYjA2NiBzY2FsZWIgICAgICAtNy41MCAgIC0xICAtPiAtMC43NTAKK2Rxc2NiMDY3IHNjYWxlYiAgICAgICA3LjUwMCAgLTEgIC0+IDAuNzUwMAorZHFzY2IwNjggc2NhbGViICAgICAgLTcuNTAwICAtMSAgLT4gLTAuNzUwMAorZHFzY2IwNzEgc2NhbGViICAgICAgICAgIDcgICAgMCAgLT4gNworZHFzY2IwNzIgc2NhbGViICAgICAgICAgLTcgICAgMCAgLT4gLTcKK2Rxc2NiMDczIHNjYWxlYiAgICAgICAgIDc1ICAgIDAgIC0+IDc1CitkcXNjYjA3NCBzY2FsZWIgICAgICAgIC03NSAgICAwICAtPiAtNzUKK2Rxc2NiMDc1IHNjYWxlYiAgICAgICA3LjUwICAgIDAgIC0+IDcuNTAKK2Rxc2NiMDc2IHNjYWxlYiAgICAgIC03LjUwICAgIDAgIC0+IC03LjUwCitkcXNjYjA3NyBzY2FsZWIgICAgICAgNy41MDAgICAwICAtPiA3LjUwMAorZHFzY2IwNzggc2NhbGViICAgICAgLTcuNTAwICAgMCAgLT4gLTcuNTAwCitkcXNjYjA4MSBzY2FsZWIgICAgICAgICAgNyAgICAxICAtPiA3RSsxCitkcXNjYjA4MiBzY2FsZWIgICAgICAgICAtNyAgICAxICAtPiAtN0UrMQorZHFzY2IwODMgc2NhbGViICAgICAgICAgNzUgICAgMSAgLT4gNy41RSsyCitkcXNjYjA4NCBzY2FsZWIgICAgICAgIC03NSAgICAxICAtPiAtNy41RSsyCitkcXNjYjA4NSBzY2FsZWIgICAgICAgNy41MCAgICAxICAtPiA3NS4wCitkcXNjYjA4NiBzY2FsZWIgICAgICAtNy41MCAgICAxICAtPiAtNzUuMAorZHFzY2IwODcgc2NhbGViICAgICAgIDcuNTAwICAgMSAgLT4gNzUuMDAKK2Rxc2NiMDg4IHNjYWxlYiAgICAgIC03LjUwMCAgIDEgIC0+IC03NS4wMAorZHFzY2IwOTEgc2NhbGViICAgICAgICAgIDcgICAgMiAgLT4gN0UrMgorZHFzY2IwOTIgc2NhbGViICAgICAgICAgLTcgICAgMiAgLT4gLTdFKzIKK2Rxc2NiMDkzIHNjYWxlYiAgICAgICAgIDc1ICAgIDIgIC0+IDcuNUUrMworZHFzY2IwOTQgc2NhbGViICAgICAgICAtNzUgICAgMiAgLT4gLTcuNUUrMworZHFzY2IwOTUgc2NhbGViICAgICAgIDcuNTAgICAgMiAgLT4gNzUwCitkcXNjYjA5NiBzY2FsZWIgICAgICAtNy41MCAgICAyICAtPiAtNzUwCitkcXNjYjA5NyBzY2FsZWIgICAgICAgNy41MDAgICAyICAtPiA3NTAuMAorZHFzY2IwOTggc2NhbGViICAgICAgLTcuNTAwICAgMiAgLT4gLTc1MC4wCisKKy0tIHplcm9zCitkcXNjYjExMSBzY2FsZWIgICAgICAgICAgMCAgMSAtPiAwRSsxCitkcXNjYjExMiBzY2FsZWIgICAgICAgICAtMCAgMiAtPiAtMEUrMgorZHFzY2IxMTMgc2NhbGViICAgICAgIDBFKzQgIDMgLT4gMEUrNworZHFzY2IxMTQgc2NhbGViICAgICAgLTBFKzQgIDQgLT4gLTBFKzgKK2Rxc2NiMTE1IHNjYWxlYiAgICAgMC4wMDAwICA1IC0+IDBFKzEKK2Rxc2NiMTE2IHNjYWxlYiAgICAtMC4wMDAwICA2IC0+IC0wRSsyCitkcXNjYjExNyBzY2FsZWIgICAgICAwRS0xNDEgNyAtPiAwRS0xMzQKK2Rxc2NiMTE4IHNjYWxlYiAgICAgLTBFLTE0MSA4IC0+IC0wRS0xMzMKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Rxc2NiMTMyIHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICs2MTQ0IC0+IEluZmluaXR5ICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHFzY2IxMzMgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgKzEwIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rxc2NiMTM0IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICsxICAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcXNjYjEzNSBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxc2NiMTM2IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0MworZHFzY2IxMzcgc2NhbGViICAxRS02MTQzICAgICAgICAgICArMSAgLT4gMUUtNjE0MgorZHFzY2IxNjE0IHNjYWxlYiAgMUUtNjE0MyAgICAgICAgICAgLTAgIC0+IDFFLTYxNDMKK2Rxc2NiMTM5IHNjYWxlYiAgMUUtNjE0MyAgICAgICAgICAgLTEgIC0+IDFFLTYxNDQgICAgICAgICAgU3Vibm9ybWFsCitkcXNjYjE0MCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICArMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDIKK2Rxc2NiMTQxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFzY2IxNDIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMTQzIHNjYWxlYiAgMUUtNjE3NiAgICAgICAgICArMSAgLT4gMUUtNjE3NSAgICAgICAgIFN1Ym5vcm1hbAorZHFzY2IxNDQgc2NhbGViICAxRS02MTc2ICAgICAgICAgIC0wICAtPiAxRS02MTc2ICAgICAgICAgU3Vibm9ybWFsCitkcXNjYjE0NSBzY2FsZWIgIDFFLTYxNzYgICAgICAgICAgLTEgIC0+IDBFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK2Rxc2NiMTUwIHNjYWxlYiAgLTFFLTYxNzYgICAgICAgICArMSAgLT4gLTFFLTYxNzUgICAgICAgIFN1Ym5vcm1hbAorZHFzY2IxNTEgc2NhbGViICAtMUUtNjE3NiAgICAgICAgIC0wICAtPiAtMUUtNjE3NiAgICAgICAgU3Vibm9ybWFsCitkcXNjYjE1MiBzY2FsZWIgIC0xRS02MTc2ICAgICAgICAgLTEgIC0+IC0wRS02MTc2ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcXNjYjE1MyBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyArMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQyCitkcXNjYjE1NCBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyArMCAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCitkcXNjYjE1NSBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMTU2IHNjYWxlYiAgLTFFLTYxNDMgICAgICAgICAgKzEgIC0+IC0xRS02MTQyCitkcXNjYjE1NyBzY2FsZWIgIC0xRS02MTQzICAgICAgICAgIC0wICAtPiAtMUUtNjE0MworZHFzY2IxNTggc2NhbGViICAtMUUtNjE0MyAgICAgICAgICAtMSAgLT4gLTFFLTYxNDQgICAgICAgICAgU3Vibm9ybWFsCitkcXNjYjE1OSBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2Rxc2NiMTYwIHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICswICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKK2Rxc2NiMTYxIHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDMKK2Rxc2NiMTYyIHNjYWxlYiAgLTlFKzYxNDQgICAgICAgICAgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkcXNjYjE2MyBzY2FsZWIgIC0xRSs2MTQ0ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIE9yaWdhbWkKKy0tICh0aGVzZSBjaGVjayB0aGF0IG92ZXJmbG93IGlzIGJlaW5nIGRvbmUgY29ycmVjdGx5KQorZHFzY2IxNzEgc2NhbGViICAgMTAwMEUrNjEwOSAgKzEgLT4gMS4wMDBFKzYxMTMKK2Rxc2NiMTcyIHNjYWxlYiAgIDEwMDBFKzYxMTAgICsxIC0+IDEuMDAwRSs2MTE0CitkcXNjYjE3MyBzY2FsZWIgICAxMDAwRSs2MTExICArMSAtPiAxLjAwMDBFKzYxMTUgICAgICAgICAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTc0IHNjYWxlYiAgIDEwMDBFKzYxMTIgICsxIC0+IDEuMDAwMDBFKzYxMTYgICAgICAgICAgICAgICAgICAgQ2xhbXBlZAorZHFzY2IxNzUgc2NhbGViICAgMTAwMEUrNjExMyAgKzEgLT4gMS4wMDAwMDBFKzYxMTcgICAgICAgICAgICAgICAgICBDbGFtcGVkCitkcXNjYjE3NiBzY2FsZWIgICAxMDAwRSs2MTE0ICArMSAtPiAxLjAwMDAwMDBFKzYxMTggICAgICAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTc3IHNjYWxlYiAgIDEwMDBFKzYxMzEgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM1ICAgICAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTc4IHNjYWxlYiAgIDEwMDBFKzYxMzIgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNiAgICAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTc5IHNjYWxlYiAgIDEwMDBFKzYxMzMgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzcgICAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTgwIHNjYWxlYiAgIDEwMDBFKzYxMzQgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM4ICAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTgxIHNjYWxlYiAgIDEwMDBFKzYxMzUgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzOSAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTgyIHNjYWxlYiAgIDEwMDBFKzYxMzYgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDAgICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTgzIHNjYWxlYiAgIDEwMDBFKzYxMzcgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQxICAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTg0IHNjYWxlYiAgIDEwMDBFKzYxMzggICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MiAgICAgICAgIENsYW1wZWQKK2Rxc2NiMTg1IHNjYWxlYiAgIDEwMDBFKzYxMzkgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgICAgICAgIENsYW1wZWQKK2Rxc2NiMTg2IHNjYWxlYiAgIDEwMDBFKzYxNDAgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0ICAgICAgIENsYW1wZWQKK2Rxc2NiMTg3IHNjYWxlYiAgIDEwMDBFKzYxNDEgICsxIC0+IEluZmluaXR5ICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBhbmQgYSBmZXcgbW9yZSBzdWJub3JtYWwgdHJ1bmNhdGlvbnMKKy0tICh0aGVzZSBjaGVjayB0aGF0IHVuZGVyZmxvdyBpcyBiZWluZyBkb25lIGNvcnJlY3RseSkKK2Rxc2NiMjIxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworZHFzY2IyMjIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjIzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDUgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjI0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NiBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMjUgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDcgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjI2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC01ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDggU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjI3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC02ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0OSBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMjggc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTcgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTAgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjI5IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC04ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTEgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjMwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC05ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1MiBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMzEgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTEwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTMgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjMyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjMzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xMiAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1NSBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMzQgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTEzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTYgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjM1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xNCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTcgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjM2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1OCBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMzcgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTE2IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTkgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjM4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xNyAtPiAxLjAwMDAwMDAwMDAwMDAwMDBFLTYxNjAgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjM5IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xOCAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtNjE2MSBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMDIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTE5IC0+IDEuMDAwMDAwMDAwMDAwMDBFLTYxNjIgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjAzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yMCAtPiAxLjAwMDAwMDAwMDAwMDBFLTYxNjMgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjA0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yMSAtPiAxLjAwMDAwMDAwMDAwMEUtNjE2NCBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMDUgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTIyIC0+IDEuMDAwMDAwMDAwMDBFLTYxNjUgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjA2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yMyAtPiAxLjAwMDAwMDAwMDBFLTYxNjYgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjA3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yNCAtPiAxLjAwMDAwMDAwMEUtNjE2NyBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMDggc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTI1IC0+IDEuMDAwMDAwMDBFLTYxNjggU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjA5IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yNiAtPiAxLjAwMDAwMDBFLTYxNjkgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjEwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yNyAtPiAxLjAwMDAwMEUtNjE3MCBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMTEgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTI4IC0+IDEuMDAwMDBFLTYxNzEgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjEyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yOSAtPiAxLjAwMDBFLTYxNzIgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjEzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zMCAtPiAxLjAwMEUtNjE3MyBTdWJub3JtYWwgUm91bmRlZAorZHFzY2IyMTQgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTMxIC0+IDEuMDBFLTYxNzQgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjE1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zMiAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsIFJvdW5kZWQKK2Rxc2NiMjE2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zMyAtPiAxRS02MTc2IFN1Ym5vcm1hbCBSb3VuZGVkCitkcXNjYjIxNyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMzQgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkcXNjYjIxOCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMzUgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2hpZnQuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTaGlmdC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNjkyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2hpZnQuZGVjVGVzdApAQCAtMCwwICsxLDI5OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVNoaWZ0LmRlY1Rlc3QgLS0gc2hpZnQgZGVjUXVhZCBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIFNhbml0eSBjaGVjaworZHFzaGkwMDEgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDAKK2Rxc2hpMDAyIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgIDIgIC0+ICAwCitkcXNoaTAwMyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAyICAtPiAgMTAwCitkcXNoaTAwNCBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIDMzICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwMDUgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAzNCAgLT4gIDAKK2Rxc2hpMDA2IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgLTEgIC0+ICAwCitkcXNoaTAwNyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMAorZHFzaGkwMDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMSAgLT4gIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworZHFzaGkwMDkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gIDEKK2Rxc2hpMDEwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+ICAwCitkcXNoaTAxMSBzaGlmdCAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAgOQorZHFzaGkwMTIgc2hpZnQgIDk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gIDAKKworLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcgorZHFzaGkwMTUgc2hpZnQgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMTYgc2hpZnQgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMTcgc2hpZnQgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMTggc2hpZnQgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMTkgc2hpZnQgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMjAgc2hpZnQgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMjEgc2hpZnQgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMjIgc2hpZnQgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbgorZHFzaGkwMjUgc2hpZnQgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMjYgc2hpZnQgICAgICAgIDEgICAgLTM1ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMjcgc2hpZnQgICAgICAgIDEgICAgIDM1ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGkwMjggc2hpZnQgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBmdWxsIHNoaWZ0aW5nIHBhdHRlcm4KK2Rxc2hpMDMwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTM0ICAtPiAwCitkcXNoaTAzMSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMyAgLT4gMQorZHFzaGkwMzIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzIgIC0+IDEyCitkcXNoaTAzMyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMSAgLT4gMTIzCitkcXNoaTAzNCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMCAgLT4gMTIzNAorZHFzaGkwMzUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjkgIC0+IDEyMzQ1CitkcXNoaTAzNiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yOCAgLT4gMTIzNDU2CitkcXNoaTAzNyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNyAgLT4gMTIzNDU2NworZHFzaGkwMzggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjYgIC0+IDEyMzQ1Njc4CitkcXNoaTAzOSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNSAgLT4gMTIzNDU2Nzg5CitkcXNoaTA0MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNCAgLT4gMTIzNDU2Nzg5MAorZHFzaGkwNDEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjMgIC0+IDEyMzQ1Njc4OTAxCitkcXNoaTA0MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMiAgLT4gMTIzNDU2Nzg5MDEyCitkcXNoaTA0MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMSAgLT4gMTIzNDU2Nzg5MDEyMworZHFzaGkwNDQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjAgIC0+IDEyMzQ1Njc4OTAxMjM0CitkcXNoaTA0NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xOSAgLT4gMTIzNDU2Nzg5MDEyMzQ1CitkcXNoaTA0NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xOCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgorZHFzaGkwNDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTcgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3CitkcXNoaTA0OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4CitkcXNoaTA1MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNSAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OQorZHFzaGkwNTEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTQgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwCitkcXNoaTA1MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxCitkcXNoaTA1MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMiAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMgorZHFzaGkwNTQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTEgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkcXNoaTA1NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXNoaTA1NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC05ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NQorZHFzaGkwNTcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtOCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2CitkcXNoaTA1OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC03ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3CitkcXNoaTA1OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC02ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3OAorZHFzaGkwNjAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5CitkcXNoaTA2MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC00ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwCitkcXNoaTA2MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQorZHFzaGkwNjMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyCitkcXNoaTA2NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCitkcXNoaTA2NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorCitkcXNoaTA2NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICswICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAorZHFzaGkwNjcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAKK2Rxc2hpMDY4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwCitkcXNoaTA2OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszICAgLT4gNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMAorZHFzaGkwNzAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNCAgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAKK2Rxc2hpMDcxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzUgICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwCitkcXNoaTA3MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs2ICAgLT4gNzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMAorZHFzaGkwNzMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNyAgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAKK2Rxc2hpMDc0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzggICAtPiA5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwCitkcXNoaTA3NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs5ICAgLT4gIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMAorZHFzaGkwNzYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAKK2Rxc2hpMDc3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzExICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwCitkcXNoaTA3OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMiAgLT4gMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMAorZHFzaGkwNzkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTMgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDgwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE0ICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwCitkcXNoaTA4MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNSAgLT4gNjc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwODIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTYgIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDgzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE3ICAtPiA4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA4NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxOCAgLT4gOTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwODUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTkgIC0+ICAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDg2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIwICAtPiAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA4NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMSAgLT4gMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwODggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjIgIC0+IDM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDg5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIzICAtPiA0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA5MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNCAgLT4gNTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwOTEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjUgIC0+IDY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDkyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI2ICAtPiA3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA5MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNyAgLT4gODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwOTQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjggIC0+IDkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDk1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI5ICAtPiAgMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA5NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMCAgLT4gMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkwOTcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzEgIC0+IDIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2Rxc2hpMDk4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMyICAtPiAzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXNoaTA5OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMyAgLT4gNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkxMDAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzQgIC0+IDAKKworLS0gemVyb3MKK2Rxc2hpMjcwIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgKzI5ICAgLT4gICAwRS0xMAorZHFzaGkyNzEgc2hpZnQgIDBFLTEwICAgICAgICAgICAgICAtMjkgICAtPiAgIDBFLTEwCitkcXNoaTI3MiBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMC4wMDAKK2Rxc2hpMjczIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgLTI5ICAgLT4gICAwLjAwMAorZHFzaGkyNzQgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICArMjkgICAtPiAgIDBFKzEwCitkcXNoaTI3NSBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMEUrMTAKK2Rxc2hpMjc2IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgKzI5ICAgLT4gIC0wRS0xMAorZHFzaGkyNzcgc2hpZnQgLTBFLTEwICAgICAgICAgICAgICAtMjkgICAtPiAgLTBFLTEwCitkcXNoaTI3OCBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMC4wMDAKK2Rxc2hpMjc5IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgLTI5ICAgLT4gIC0wLjAwMAorZHFzaGkyODAgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICArMjkgICAtPiAgLTBFKzEwCitkcXNoaTI4MSBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMEUrMTAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2Rxc2hpMTQxIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDMKK2Rxc2hpMTQyIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTMzIC0+IDlFKzYxMTEKK2Rxc2hpMTQzIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwRSs2MTQ0CitkcXNoaTE0NCBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAzMyAtPiA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAorZHFzaGkxNDUgc2hpZnQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtNjE0MworZHFzaGkxNDYgc2hpZnQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gMEUtNjE0MworZHFzaGkxNDcgc2hpZnQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTQyCitkcXNoaTE0OCBzaGlmdCAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjExMAorZHFzaGkxNTEgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFzaGkxNTIgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gMUUtNjE3NgorZHFzaGkxNTMgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gMEUtNjE3NgorZHFzaGkxNTQgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gMEUtNjE3NgorZHFzaGkxNTUgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFzaGkxNTYgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gOUUtNjE3NgorZHFzaGkxNTcgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gMEUtNjE3NgorZHFzaGkxNTggc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gMEUtNjE3NgorZHFzaGkxNjAgc2hpZnQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtNjE3NgorZHFzaGkxNjEgc2hpZnQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gMEUtNjE3NgorZHFzaGkxNjIgc2hpZnQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTc1CitkcXNoaTE2MyBzaGlmdCAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MworLS0gIG5lZ2F0aXZlcworZHFzaGkxNzEgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDMKK2Rxc2hpMTcyIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTMzIC0+IC05RSs2MTExCitkcXNoaTE3MyBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAxICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQKK2Rxc2hpMTc0IHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDMzIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAorZHFzaGkxNzUgc2hpZnQgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTBFLTYxNDMKK2Rxc2hpMTc2IHNoaWZ0IC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IC0wRS02MTQzCitkcXNoaTE3NyBzaGlmdCAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS02MTQyCitkcXNoaTE3OCBzaGlmdCAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTAKK2Rxc2hpMTgxIHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0CitkcXNoaTE4MiBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiAtMUUtNjE3NgorZHFzaGkxODMgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gLTBFLTYxNzYKK2Rxc2hpMTg0IHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IC0wRS02MTc2CitkcXNoaTE4NSBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAorZHFzaGkxODYgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gLTlFLTYxNzYKK2Rxc2hpMTg3IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IC0wRS02MTc2CitkcXNoaTE4OCBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAtMEUtNjE3NgorZHFzaGkxOTAgc2hpZnQgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTBFLTYxNzYKK2Rxc2hpMTkxIHNoaWZ0IC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IC0wRS02MTc2CitkcXNoaTE5MiBzaGlmdCAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS02MTc1CitkcXNoaTE5MyBzaGlmdCAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKKworLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQorZHFzaGkyMDEgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAgMCAgLT4gLTAKK2Rxc2hpMjAyIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgIDIgIC0+IC0wCitkcXNoaTIwMyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgICAyICAtPiAtMTAwCitkcXNoaTIwNCBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIDMzICAtPiAtMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHFzaGkyMDUgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAzNCAgLT4gLTAKK2Rxc2hpMjA2IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgLTEgIC0+IC0wCitkcXNoaTIwNyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMCAgIC0yICAtPiAtMAorZHFzaGkyMDggc2hpZnQgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMSAgLT4gLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMworZHFzaGkyMDkgc2hpZnQgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gLTEKK2Rxc2hpMjEwIHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+IC0wCitkcXNoaTIxMSBzaGlmdCAtOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAtOQorZHFzaGkyMTIgc2hpZnQgLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gLTAKKworCistLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbAorZHFzaGk3ODEgc2hpZnQgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQorZHFzaGk3ODIgc2hpZnQgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZHFzaGk3ODMgc2hpZnQgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorZHFzaGk3ODQgc2hpZnQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorZHFzaGk3ODUgc2hpZnQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZHFzaGk3ODYgc2hpZnQgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQorZHFzaGk3ODcgc2hpZnQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk3ODggc2hpZnQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk3ODkgc2hpZnQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk3OTAgc2hpZnQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk3OTEgc2hpZnQgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk3OTIgc2hpZnQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk3OTMgc2hpZnQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk3OTQgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcXNoaTgwMCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgwMSBzaGlmdCAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkKK2Rxc2hpODAyIHNoaWZ0ICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQorZHFzaGk4MDMgc2hpZnQgIEluZiAgLTAgICAgIC0+IEluZmluaXR5CitkcXNoaTgwNCBzaGlmdCAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkKK2Rxc2hpODA1IHNoaWZ0ICBJbmYgICAxICAgICAtPiBJbmZpbml0eQorZHFzaGk4MDYgc2hpZnQgIEluZiAgIDggICAgIC0+IEluZmluaXR5CitkcXNoaTgwNyBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgwOCBzaGlmdCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgwOSBzaGlmdCAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgxMCBzaGlmdCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgxMSBzaGlmdCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgxMiBzaGlmdCAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgxMyBzaGlmdCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgxNCBzaGlmdCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTgxNSBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2Rxc2hpODIxIHNoaWZ0ICBOYU4gLUluZiAgICAtPiAgTmFOCitkcXNoaTgyMiBzaGlmdCAgTmFOIC0xMDAwICAgLT4gIE5hTgorZHFzaGk4MjMgc2hpZnQgIE5hTiAtMSAgICAgIC0+ICBOYU4KK2Rxc2hpODI0IHNoaWZ0ICBOYU4gLTAgICAgICAtPiAgTmFOCitkcXNoaTgyNSBzaGlmdCAgTmFOICAwICAgICAgLT4gIE5hTgorZHFzaGk4MjYgc2hpZnQgIE5hTiAgMSAgICAgIC0+ICBOYU4KK2Rxc2hpODI3IHNoaWZ0ICBOYU4gIDEwMDAgICAtPiAgTmFOCitkcXNoaTgyOCBzaGlmdCAgTmFOICBJbmYgICAgLT4gIE5hTgorZHFzaGk4Mjkgc2hpZnQgIE5hTiAgTmFOICAgIC0+ICBOYU4KK2Rxc2hpODMwIHNoaWZ0IC1JbmYgIE5hTiAgICAtPiAgTmFOCitkcXNoaTgzMSBzaGlmdCAtMTAwMCBOYU4gICAgLT4gIE5hTgorZHFzaGk4MzIgc2hpZnQgLTEgICAgTmFOICAgIC0+ICBOYU4KK2Rxc2hpODMzIHNoaWZ0IC0wICAgIE5hTiAgICAtPiAgTmFOCitkcXNoaTgzNCBzaGlmdCAgMCAgICBOYU4gICAgLT4gIE5hTgorZHFzaGk4MzUgc2hpZnQgIDEgICAgTmFOICAgIC0+ICBOYU4KK2Rxc2hpODM2IHNoaWZ0ICAxMDAwIE5hTiAgICAtPiAgTmFOCitkcXNoaTgzNyBzaGlmdCAgSW5mICBOYU4gICAgLT4gIE5hTgorCitkcXNoaTg0MSBzaGlmdCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODQyIHNoaWZ0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NDMgc2hpZnQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg0NCBzaGlmdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODQ1IHNoaWZ0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NDYgc2hpZnQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg0NyBzaGlmdCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODQ4IHNoaWZ0ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NDkgc2hpZnQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg1MCBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODUxIHNoaWZ0IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NTIgc2hpZnQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg1MyBzaGlmdCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODU0IHNoaWZ0IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NTUgc2hpZnQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg1NiBzaGlmdCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODU3IHNoaWZ0ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NTggc2hpZnQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg1OSBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworZHFzaGk4NjEgc2hpZnQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCitkcXNoaTg2MiBzaGlmdCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2Rxc2hpODYzIHNoaWZ0ICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMworZHFzaGk4NjQgc2hpZnQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40CitkcXNoaTg2NSBzaGlmdCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2Rxc2hpODY2IHNoaWZ0IC1JbmYgICAgIE5hTjcgICAtPiAgTmFONworZHFzaGk4Njcgc2hpZnQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44CitkcXNoaTg2OCBzaGlmdCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2Rxc2hpODY5IHNoaWZ0ICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKK2Rxc2hpODcxIHNoaWZ0ICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg3MiBzaGlmdCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NzMgc2hpZnQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODc0IHNoaWZ0ICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg3NSBzaGlmdCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4NzYgc2hpZnQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODc3IHNoaWZ0IC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg3OCBzaGlmdCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4Nzkgc2hpZnQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODgwIHNoaWZ0ICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCitkcXNoaTg4MSBzaGlmdCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZHFzaGk4ODIgc2hpZnQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgorZHFzaGk4ODMgc2hpZnQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc2hpODg0IHNoaWZ0ICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2Rxc2hpODg1IHNoaWZ0ICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU3VidHJhY3QuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTdWJ0cmFjdC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NTcyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU3VidHJhY3QuZGVjVGVzdApAQCAtMCwwICsxLDYzNSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkcVN1YnRyYWN0LmRlY1Rlc3QgLS0gZGVjUXVhZCBzdWJ0cmFjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjUXVhZHMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUKKy0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNRdWFkCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK2Rxc3ViMDAxIHN1YnRyYWN0ICAwICAgMCAgLT4gJzAnCitkcXN1YjAwMiBzdWJ0cmFjdCAgMSAgIDEgIC0+ICcwJworZHFzdWIwMDMgc3VidHJhY3QgIDEgICAyICAtPiAnLTEnCitkcXN1YjAwNCBzdWJ0cmFjdCAgMiAgIDEgIC0+ICcxJworZHFzdWIwMDUgc3VidHJhY3QgIDIgICAyICAtPiAnMCcKK2Rxc3ViMDA2IHN1YnRyYWN0ICAzICAgMiAgLT4gJzEnCitkcXN1YjAwNyBzdWJ0cmFjdCAgMiAgIDMgIC0+ICctMScKKworZHFzdWIwMTEgc3VidHJhY3QgLTAgICAwICAtPiAnLTAnCitkcXN1YjAxMiBzdWJ0cmFjdCAtMSAgIDEgIC0+ICctMicKK2Rxc3ViMDEzIHN1YnRyYWN0IC0xICAgMiAgLT4gJy0zJworZHFzdWIwMTQgc3VidHJhY3QgLTIgICAxICAtPiAnLTMnCitkcXN1YjAxNSBzdWJ0cmFjdCAtMiAgIDIgIC0+ICctNCcKK2Rxc3ViMDE2IHN1YnRyYWN0IC0zICAgMiAgLT4gJy01JworZHFzdWIwMTcgc3VidHJhY3QgLTIgICAzICAtPiAnLTUnCisKK2Rxc3ViMDIxIHN1YnRyYWN0ICAwICAtMCAgLT4gJzAnCitkcXN1YjAyMiBzdWJ0cmFjdCAgMSAgLTEgIC0+ICcyJworZHFzdWIwMjMgc3VidHJhY3QgIDEgIC0yICAtPiAnMycKK2Rxc3ViMDI0IHN1YnRyYWN0ICAyICAtMSAgLT4gJzMnCitkcXN1YjAyNSBzdWJ0cmFjdCAgMiAgLTIgIC0+ICc0JworZHFzdWIwMjYgc3VidHJhY3QgIDMgIC0yICAtPiAnNScKK2Rxc3ViMDI3IHN1YnRyYWN0ICAyICAtMyAgLT4gJzUnCisKK2Rxc3ViMDMwIHN1YnRyYWN0ICAxMSAgMSAgLT4gMTAKK2Rxc3ViMDMxIHN1YnRyYWN0ICAxMCAgMSAgLT4gIDkKK2Rxc3ViMDMyIHN1YnRyYWN0ICA5ICAgMSAgLT4gIDgKK2Rxc3ViMDMzIHN1YnRyYWN0ICAxICAgMSAgLT4gIDAKK2Rxc3ViMDM0IHN1YnRyYWN0ICAwICAgMSAgLT4gLTEKK2Rxc3ViMDM1IHN1YnRyYWN0IC0xICAgMSAgLT4gLTIKK2Rxc3ViMDM2IHN1YnRyYWN0IC05ICAgMSAgLT4gLTEwCitkcXN1YjAzNyBzdWJ0cmFjdCAtMTAgIDEgIC0+IC0xMQorZHFzdWIwMzggc3VidHJhY3QgLTExICAxICAtPiAtMTIKKworZHFzdWIwNDAgc3VidHJhY3QgJzUuNzUnICczLjMnICAtPiAnMi40NScKK2Rxc3ViMDQxIHN1YnRyYWN0ICc1JyAgICAnLTMnICAgLT4gJzgnCitkcXN1YjA0MiBzdWJ0cmFjdCAnLTUnICAgJy0zJyAgIC0+ICctMicKK2Rxc3ViMDQzIHN1YnRyYWN0ICctNycgICAnMi41JyAgLT4gJy05LjUnCitkcXN1YjA0NCBzdWJ0cmFjdCAnMC43JyAgJzAuMycgIC0+ICcwLjQnCitkcXN1YjA0NSBzdWJ0cmFjdCAnMS4zJyAgJzAuMycgIC0+ICcxLjAnCitkcXN1YjA0NiBzdWJ0cmFjdCAnMS4yNScgJzEuMjUnIC0+ICcwLjAwJworCitkcXN1YjA1MCBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwMDAnIC0+ICcwLjIzNDU2Nzg5JworZHFzdWIwNTEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAgICcxLjAwMDAwMDg5JyAtPiAnMC4yMzQ1NjcwMCcKKworZHFzdWIwNjAgc3VidHJhY3QgJzcwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjA2MSBzdWJ0cmFjdCAnNzAwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjA2MiBzdWJ0cmFjdCAnNzAwMCcgICAgJzEwMDAwZSszNCcgLT4gJy05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrMzcnIEluZXhhY3QgUm91bmRlZAorZHFzdWIwNjMgc3VidHJhY3QgJzcwMDAwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzRSszNycgUm91bmRlZAorZHFzdWIwNjQgc3VidHJhY3QgJzcwMDAwMCcgICAgJzEwMDAwZSszNCcgLT4gJy05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzMEUrMzcnIFJvdW5kZWQKKyAgLS0gc3ltbWV0cnk6CitkcXN1YjA2NSBzdWJ0cmFjdCAnMTAwMDBlKzM0JyAgICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAorZHFzdWIwNjYgc3VidHJhY3QgJzEwMDAwZSszNCcgICAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjA2NyBzdWJ0cmFjdCAnMTAwMDBlKzM0JyAgICAnNzAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSszNycgSW5leGFjdCBSb3VuZGVkCitkcXN1YjA2OCBzdWJ0cmFjdCAnMTAwMDBlKzM0JyAgICAnNzAwMDAnIC0+ICc5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5M0UrMzcnIFJvdW5kZWQKK2Rxc3ViMDY5IHN1YnRyYWN0ICcxMDAwMGUrMzQnICAgICc3MDAwMDAnIC0+ICc5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzMEUrMzcnIFJvdW5kZWQKKworICAtLSBzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHMKK2Rxc3ViMDkwIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wJyAgLT4gJzAuMCcKK2Rxc3ViMDkxIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wMCcgLT4gJzAuMDAnCitkcXN1YjA5MiBzdWJ0cmFjdCAnMC4wMCcgICAgJzAwLjAnIC0+ICcwLjAwJworZHFzdWIwOTMgc3VidHJhY3QgJzAwLjAnICAgICcwLjAwJyAtPiAnMC4wMCcKK2Rxc3ViMDk0IHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnCitkcXN1YjA5NSBzdWJ0cmFjdCAnMycgICAgJy4zJyAgIC0+ICcyLjcnCitkcXN1YjA5NiBzdWJ0cmFjdCAnMy4nICAgJy4zJyAgIC0+ICcyLjcnCitkcXN1YjA5NyBzdWJ0cmFjdCAnMy4wJyAgJy4zJyAgIC0+ICcyLjcnCitkcXN1YjA5OCBzdWJ0cmFjdCAnMy4wMCcgJy4zJyAgIC0+ICcyLjcwJworZHFzdWIwOTkgc3VidHJhY3QgJzMnICAgICczJyAgICAtPiAnMCcKK2Rxc3ViMTAwIHN1YnRyYWN0ICczJyAgICAnKzMnICAgLT4gJzAnCitkcXN1YjEwMSBzdWJ0cmFjdCAnMycgICAgJy0zJyAgIC0+ICc2JworZHFzdWIxMDIgc3VidHJhY3QgJzMnICAgICcwLjMnICAtPiAnMi43JworZHFzdWIxMDMgc3VidHJhY3QgJzMuJyAgICcwLjMnICAtPiAnMi43JworZHFzdWIxMDQgc3VidHJhY3QgJzMuMCcgICcwLjMnICAtPiAnMi43JworZHFzdWIxMDUgc3VidHJhY3QgJzMuMDAnICcwLjMnICAtPiAnMi43MCcKK2Rxc3ViMTA2IHN1YnRyYWN0ICczJyAgICAnMy4wJyAgLT4gJzAuMCcKK2Rxc3ViMTA3IHN1YnRyYWN0ICczJyAgICAnKzMuMCcgLT4gJzAuMCcKK2Rxc3ViMTA4IHN1YnRyYWN0ICczJyAgICAnLTMuMCcgLT4gJzYuMCcKKworLS0gdGhlIGFib3ZlIGFsbCBmcm9tIGFkZDsgbWFzc2FnZWQgYW5kIGV4dGVuZGVkLiAgTm93IHNvbWUgbmV3IG9uZXMuLi4KKy0tIFtwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBjb21wYXJpc29uc10KKy0tIE5COiAteEUtOCBiZWxvdyB3ZXJlIG5vbi1leHBvbmVudHMgcHJlLUFOU0kgWDMtMjc0LCBhbmQgLTFFLTcgb3IgMEUtNworLS0gd2l0aCBpbnB1dCByb3VuZGluZy4KK2Rxc3ViMTIwIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODQnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNUUtOCcKK2Rxc3ViMTIxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNEUtOCcKK2Rxc3ViMTIyIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctM0UtOCcKK2Rxc3ViMTIzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODcnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMkUtOCcKK2Rxc3ViMTI0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMUUtOCcKK2Rxc3ViMTI1IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4OScgIC0+ICcwRS04JworZHFzdWIxMjYgc3VidHJhY3QgICcxMC4yMzQ1Njc5MCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzFFLTgnCitkcXN1YjEyNyBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMkUtOCcKK2Rxc3ViMTI4IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTInICAgICcxMC4yMzQ1Njc4OScgIC0+ICczRS04JworZHFzdWIxMjkgc3VidHJhY3QgICcxMC4yMzQ1Njc5MycgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzRFLTgnCitkcXN1YjEzMCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzk0JyAgICAnMTAuMjM0NTY3ODknICAtPiAnNUUtOCcKK2Rxc3ViMTMxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODEnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctNUUtOCcKK2Rxc3ViMTMyIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODInICAgICcxMC4yMzQ1Njc4NicgIC0+ICctNEUtOCcKK2Rxc3ViMTMzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODMnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctM0UtOCcKK2Rxc3ViMTM0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODQnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctMkUtOCcKK2Rxc3ViMTM1IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctMUUtOCcKK2Rxc3ViMTM2IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcwRS04JworZHFzdWIxMzcgc3VidHJhY3QgICcxMC4yMzQ1Njc4NycgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzFFLTgnCitkcXN1YjEzOCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg4JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnMkUtOCcKK2Rxc3ViMTM5IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4NicgIC0+ICczRS04JworZHFzdWIxNDAgc3VidHJhY3QgICcxMC4yMzQ1Njc5MCcgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzRFLTgnCitkcXN1YjE0MSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnNUUtOCcKK2Rxc3ViMTQyIHN1YnRyYWN0ICAnMScgICAgICAgICAgICAgICcwLjk5OTk5OTk5OScgIC0+ICcxRS05JworZHFzdWIxNDMgc3VidHJhY3QgICcwLjk5OTk5OTk5OScgICAgJzEnICAgICAgICAgICAgLT4gJy0xRS05JworZHFzdWIxNDQgc3VidHJhY3QgICctMTAuMjM0NTY3ODAnICAgJy0xMC4yMzQ1Njc4NicgLT4gJzZFLTgnCitkcXN1YjE0NSBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTRFLTgnCitkcXN1YjE0NiBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MScgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTVFLTgnCisKKy0tIGFkZGl0aW9uYWwgc2NhbGVkIGFyaXRobWV0aWMgdGVzdHMgWzAuOTcgcHJvYmxlbV0KK2Rxc3ViMTYwIHN1YnRyYWN0ICcwJyAgICAgJy4xJyAgICAgIC0+ICctMC4xJworZHFzdWIxNjEgc3VidHJhY3QgJzAwJyAgICAnLjk3OTgzJyAgLT4gJy0wLjk3OTgzJworZHFzdWIxNjIgc3VidHJhY3QgJzAnICAgICAnLjknICAgICAgLT4gJy0wLjknCitkcXN1YjE2MyBzdWJ0cmFjdCAnMCcgICAgICcwLjEwMicgICAtPiAnLTAuMTAyJworZHFzdWIxNjQgc3VidHJhY3QgJzAnICAgICAnLjQnICAgICAgLT4gJy0wLjQnCitkcXN1YjE2NSBzdWJ0cmFjdCAnMCcgICAgICcuMzA3JyAgICAtPiAnLTAuMzA3JworZHFzdWIxNjYgc3VidHJhY3QgJzAnICAgICAnLjQzODIyJyAgLT4gJy0wLjQzODIyJworZHFzdWIxNjcgc3VidHJhY3QgJzAnICAgICAnLjkxMScgICAgLT4gJy0wLjkxMScKK2Rxc3ViMTY4IHN1YnRyYWN0ICcuMCcgICAgJy4wMicgICAgIC0+ICctMC4wMicKK2Rxc3ViMTY5IHN1YnRyYWN0ICcwMCcgICAgJy4zOTInICAgIC0+ICctMC4zOTInCitkcXN1YjE3MCBzdWJ0cmFjdCAnMCcgICAgICcuMjYnICAgICAtPiAnLTAuMjYnCitkcXN1YjE3MSBzdWJ0cmFjdCAnMCcgICAgICcwLjUxJyAgICAtPiAnLTAuNTEnCitkcXN1YjE3MiBzdWJ0cmFjdCAnMCcgICAgICcuMjIzNCcgICAtPiAnLTAuMjIzNCcKK2Rxc3ViMTczIHN1YnRyYWN0ICcwJyAgICAgJy4yJyAgICAgIC0+ICctMC4yJworZHFzdWIxNzQgc3VidHJhY3QgJy4wJyAgICAnLjAwMDgnICAgLT4gJy0wLjAwMDgnCistLSAwLiBvbiBsZWZ0CitkcXN1YjE4MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMScgICAgICAtPiAnMC4xJworZHFzdWIxODEgc3VidHJhY3QgJzAuMDAnICAgICctLjk3OTgzJyAgLT4gJzAuOTc5ODMnCitkcXN1YjE4MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uOScgICAgICAtPiAnMC45JworZHFzdWIxODMgc3VidHJhY3QgJzAuMCcgICAgICctMC4xMDInICAgLT4gJzAuMTAyJworZHFzdWIxODQgc3VidHJhY3QgJzAuMCcgICAgICctLjQnICAgICAgLT4gJzAuNCcKK2Rxc3ViMTg1IHN1YnRyYWN0ICcwLjAnICAgICAnLS4zMDcnICAgIC0+ICcwLjMwNycKK2Rxc3ViMTg2IHN1YnRyYWN0ICcwLjAnICAgICAnLS40MzgyMicgIC0+ICcwLjQzODIyJworZHFzdWIxODcgc3VidHJhY3QgJzAuMCcgICAgICctLjkxMScgICAgLT4gJzAuOTExJworZHFzdWIxODggc3VidHJhY3QgJzAuMCcgICAgICctLjAyJyAgICAgLT4gJzAuMDInCitkcXN1YjE4OSBzdWJ0cmFjdCAnMC4wMCcgICAgJy0uMzkyJyAgICAtPiAnMC4zOTInCitkcXN1YjE5MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjYnICAgICAtPiAnMC4yNicKK2Rxc3ViMTkxIHN1YnRyYWN0ICcwLjAnICAgICAnLTAuNTEnICAgIC0+ICcwLjUxJworZHFzdWIxOTIgc3VidHJhY3QgJzAuMCcgICAgICctLjIyMzQnICAgLT4gJzAuMjIzNCcKK2Rxc3ViMTkzIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yJyAgICAgIC0+ICcwLjInCitkcXN1YjE5NCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMDAwOCcgICAtPiAnMC4wMDA4JworLS0gbmVnYXRpdmVzIG9mIHNhbWUKK2Rxc3ViMjAwIHN1YnRyYWN0ICcwJyAgICAgJy0uMScgICAgICAtPiAnMC4xJworZHFzdWIyMDEgc3VidHJhY3QgJzAwJyAgICAnLS45Nzk4MycgIC0+ICcwLjk3OTgzJworZHFzdWIyMDIgc3VidHJhY3QgJzAnICAgICAnLS45JyAgICAgIC0+ICcwLjknCitkcXN1YjIwMyBzdWJ0cmFjdCAnMCcgICAgICctMC4xMDInICAgLT4gJzAuMTAyJworZHFzdWIyMDQgc3VidHJhY3QgJzAnICAgICAnLS40JyAgICAgIC0+ICcwLjQnCitkcXN1YjIwNSBzdWJ0cmFjdCAnMCcgICAgICctLjMwNycgICAgLT4gJzAuMzA3JworZHFzdWIyMDYgc3VidHJhY3QgJzAnICAgICAnLS40MzgyMicgIC0+ICcwLjQzODIyJworZHFzdWIyMDcgc3VidHJhY3QgJzAnICAgICAnLS45MTEnICAgIC0+ICcwLjkxMScKK2Rxc3ViMjA4IHN1YnRyYWN0ICcuMCcgICAgJy0uMDInICAgICAtPiAnMC4wMicKK2Rxc3ViMjA5IHN1YnRyYWN0ICcwMCcgICAgJy0uMzkyJyAgICAtPiAnMC4zOTInCitkcXN1YjIxMCBzdWJ0cmFjdCAnMCcgICAgICctLjI2JyAgICAgLT4gJzAuMjYnCitkcXN1YjIxMSBzdWJ0cmFjdCAnMCcgICAgICctMC41MScgICAgLT4gJzAuNTEnCitkcXN1YjIxMiBzdWJ0cmFjdCAnMCcgICAgICctLjIyMzQnICAgLT4gJzAuMjIzNCcKK2Rxc3ViMjEzIHN1YnRyYWN0ICcwJyAgICAgJy0uMicgICAgICAtPiAnMC4yJworZHFzdWIyMTQgc3VidHJhY3QgJy4wJyAgICAnLS4wMDA4JyAgIC0+ICcwLjAwMDgnCisKKy0tIG1vcmUgZml4ZWQsIExIUyBzd2FwcyBbcmVhbGx5IHRoZSBzYW1lIGFzIHRlc3RjYXNlcyB1bmRlciBhZGRdCitkcXN1YjIyMCBzdWJ0cmFjdCAnLTU2MjY3RS0xMicgMCAgLT4gJy01LjYyNjdFLTgnCitkcXN1YjIyMSBzdWJ0cmFjdCAnLTU2MjY3RS0xMScgMCAgLT4gJy01LjYyNjdFLTcnCitkcXN1YjIyMiBzdWJ0cmFjdCAnLTU2MjY3RS0xMCcgMCAgLT4gJy0wLjAwMDAwNTYyNjcnCitkcXN1YjIyMyBzdWJ0cmFjdCAnLTU2MjY3RS05JyAgMCAgLT4gJy0wLjAwMDA1NjI2NycKK2Rxc3ViMjI0IHN1YnRyYWN0ICctNTYyNjdFLTgnICAwICAtPiAnLTAuMDAwNTYyNjcnCitkcXN1YjIyNSBzdWJ0cmFjdCAnLTU2MjY3RS03JyAgMCAgLT4gJy0wLjAwNTYyNjcnCitkcXN1YjIyNiBzdWJ0cmFjdCAnLTU2MjY3RS02JyAgMCAgLT4gJy0wLjA1NjI2NycKK2Rxc3ViMjI3IHN1YnRyYWN0ICctNTYyNjdFLTUnICAwICAtPiAnLTAuNTYyNjcnCitkcXN1YjIyOCBzdWJ0cmFjdCAnLTU2MjY3RS0yJyAgMCAgLT4gJy01NjIuNjcnCitkcXN1YjIyOSBzdWJ0cmFjdCAnLTU2MjY3RS0xJyAgMCAgLT4gJy01NjI2LjcnCitkcXN1YjIzMCBzdWJ0cmFjdCAnLTU2MjY3RS0wJyAgMCAgLT4gJy01NjI2NycKKy0tIHN5bW1ldHJ5IC4uLgorZHFzdWIyNDAgc3VidHJhY3QgMCAnLTU2MjY3RS0xMicgIC0+ICc1LjYyNjdFLTgnCitkcXN1YjI0MSBzdWJ0cmFjdCAwICctNTYyNjdFLTExJyAgLT4gJzUuNjI2N0UtNycKK2Rxc3ViMjQyIHN1YnRyYWN0IDAgJy01NjI2N0UtMTAnICAtPiAnMC4wMDAwMDU2MjY3JworZHFzdWIyNDMgc3VidHJhY3QgMCAnLTU2MjY3RS05JyAgIC0+ICcwLjAwMDA1NjI2NycKK2Rxc3ViMjQ0IHN1YnRyYWN0IDAgJy01NjI2N0UtOCcgICAtPiAnMC4wMDA1NjI2NycKK2Rxc3ViMjQ1IHN1YnRyYWN0IDAgJy01NjI2N0UtNycgICAtPiAnMC4wMDU2MjY3JworZHFzdWIyNDYgc3VidHJhY3QgMCAnLTU2MjY3RS02JyAgIC0+ICcwLjA1NjI2NycKK2Rxc3ViMjQ3IHN1YnRyYWN0IDAgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycKK2Rxc3ViMjQ4IHN1YnRyYWN0IDAgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3JworZHFzdWIyNDkgc3VidHJhY3QgMCAnLTU2MjY3RS0xJyAgIC0+ICc1NjI2LjcnCitkcXN1YjI1MCBzdWJ0cmFjdCAwICctNTYyNjdFLTAnICAgLT4gJzU2MjY3JworCistLSBub3cgc29tZSBtb3JlIGZyb20gdGhlICduZXcnIGFkZAorZHFzdWIzMDEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzAuMjM0NTY3ODknCitkcXN1YjMwMiBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMC4yMzQ1Njc3OCcKKworLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCitkcXN1YjMyMSBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKK2Rxc3ViMzIyIHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk3JworZHFzdWIzMjMgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcwLjk5OTYnCitkcXN1YjMyNCBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzAuOTk5NScKK2Rxc3ViMzI1IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMCcgLT4gJzAuOTk5OCcKK2Rxc3ViMzI2IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMScgLT4gJzAuOTk5OScKK2Rxc3ViMzI3IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMicgLT4gJzEuMDAwMCcKK2Rxc3ViMzI4IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMycgLT4gJzEuMDAwMScKKworLS0gaW50ZXJuYWwgYm91bmRhcmllcworZHFzdWIzNDYgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcnICAgLT4gJzk5OTk5OTk5OTk5OTMnCitkcXN1YjM0NyBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAnICAgLT4gJzk5OTk5OTk5OTk5MzAnCitkcXN1YjM0OCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwJyAgIC0+ICc5OTk5OTk5OTk5MzAwJworZHFzdWIzNDkgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAnICAgLT4gJzk5OTk5OTk5OTMwMDAnCitkcXN1YjM1MCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAnICAgLT4gJzk5OTk5OTk5MzAwMDAnCitkcXN1YjM1MSBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAwJyAgIC0+ICc5OTk5OTk5MzAwMDAwJworZHFzdWIzNTIgc3VidHJhY3QgJzcnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5OTMnCitkcXN1YjM1MyBzdWJ0cmFjdCAnNzAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5MzAnCitkcXN1YjM1NCBzdWJ0cmFjdCAnNzAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTk5MzAwJworZHFzdWIzNTUgc3VidHJhY3QgJzcwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTMwMDAnCitkcXN1YjM1NiBzdWJ0cmFjdCAnNzAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5MzAwMDAnCitkcXN1YjM1NyBzdWJ0cmFjdCAnNzAwMDAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5MzAwMDAwJworCistLSB6ZXJvIHByZXNlcnZhdGlvbgorZHFzdWIzNjEgc3VidHJhY3QgMSAnMC4wMDAxJyAtPiAnMC45OTk5JworZHFzdWIzNjIgc3VidHJhY3QgMSAnMC4wMDAwMScgLT4gJzAuOTk5OTknCitkcXN1YjM2MyBzdWJ0cmFjdCAxICcwLjAwMDAwMScgLT4gJzAuOTk5OTk5JworZHFzdWIzNjQgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFzdWIzNjUgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViMzY2IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCitkcXN1YjM3MCBzdWJ0cmFjdCAxICAwICAtPiAxCitkcXN1YjM3MSBzdWJ0cmFjdCAxIDAuICAtPiAxCitkcXN1YjM3MiBzdWJ0cmFjdCAxICAuMCAtPiAxLjAKK2Rxc3ViMzczIHN1YnRyYWN0IDEgMC4wIC0+IDEuMAorZHFzdWIzNzQgc3VidHJhY3QgIDAgIDEgLT4gLTEKK2Rxc3ViMzc1IHN1YnRyYWN0IDAuICAxIC0+IC0xCitkcXN1YjM3NiBzdWJ0cmFjdCAgLjAgMSAtPiAtMS4wCitkcXN1YjM3NyBzdWJ0cmFjdCAwLjAgMSAtPiAtMS4wCisKKy0tIGxlYWRpbmcgMCBkaWdpdCBiZWZvcmUgcm91bmQKK2Rxc3ViOTEwIHN1YnRyYWN0IC0xMDM1MTkzNjIgLTUxODk3OTU1LjMgLT4gLTUxNjIxNDA2LjcKK2Rxc3ViOTExIHN1YnRyYWN0IDE1OTU3OS40NDQgODk4MjcuNTIyOSAtPiA2OTc1MS45MjExCisKK2Rxc3ViOTIwIHN1YnRyYWN0IDMzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY2IC0+IDI5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZHFzdWI5MjEgc3VidHJhY3QgMzMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjUgLT4gMzAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitkcXN1YjkyMiBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NSAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUKK2Rxc3ViOTIzIHN1YnRyYWN0IDEzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY0IC0+ICA5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgorZHFzdWI5MjQgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NDAgLT4gMTAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgUm91bmRlZAorZHFzdWI5MjUgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjAgLT4gIDkwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXN1YjkyNiBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiA0My4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2MSAtPiAgODkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKK2Rxc3ViOTI3IHN1YnRyYWN0IDEzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDQzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY2IC0+ICA4OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NAorZHFzdWI5Mjggc3VidHJhY3QgMTAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgOTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjYgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0CitkcXN1YjkyOSBzdWJ0cmFjdCAxMDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiA5OS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NiAtPiAgIDEuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQKKworLS0gbW9yZSBMSFMgc3dhcHMgW3dlcmUgZml4ZWRdCitkcXN1YjM5MCBzdWJ0cmFjdCAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKK2Rxc3ViMzkxIHN1YnRyYWN0ICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCitkcXN1YjM5MiBzdWJ0cmFjdCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCitkcXN1YjM5MyBzdWJ0cmFjdCAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKK2Rxc3ViMzk0IHN1YnRyYWN0ICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JworZHFzdWIzOTUgc3VidHJhY3QgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCitkcXN1YjM5NiBzdWJ0cmFjdCAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKK2Rxc3ViMzk3IHN1YnRyYWN0ICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCitkcXN1YjM5OCBzdWJ0cmFjdCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJworZHFzdWIzOTkgc3VidHJhY3QgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03JworZHFzdWI0MDAgc3VidHJhY3QgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKK2Rxc3ViNDAxIHN1YnRyYWN0ICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKK2Rxc3ViNDAyIHN1YnRyYWN0ICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1JworZHFzdWI0MDMgc3VidHJhY3QgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCitkcXN1YjQwNCBzdWJ0cmFjdCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCitkcXN1YjQwNSBzdWJ0cmFjdCAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJworZHFzdWI0MDYgc3VidHJhY3QgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCitkcXN1YjQwNyBzdWJ0cmFjdCAnLTVFMzMnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcXN1YjQwOCBzdWJ0cmFjdCAnLTVFMzQnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgIFJvdW5kZWQKK2Rxc3ViNDA5IHN1YnRyYWN0ICctNUUzNScgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgUm91bmRlZAorZHFzdWI0MTAgc3VidHJhY3QgJy01RTM2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYnICBSb3VuZGVkCitkcXN1YjQxMSBzdWJ0cmFjdCAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKKworLS0gbW9yZSBSSFMgc3dhcHMgW3dlcmUgZml4ZWRdCitkcXN1YjQyMCBzdWJ0cmFjdCAwICAnLTU2MjY3RS0xMCcgLT4gICcwLjAwMDAwNTYyNjcnCitkcXN1YjQyMSBzdWJ0cmFjdCAwICAnLTU2MjY3RS02JyAgLT4gICcwLjA1NjI2NycKK2Rxc3ViNDIyIHN1YnRyYWN0IDAgICctNTYyNjdFLTUnICAtPiAgJzAuNTYyNjcnCitkcXN1YjQyMyBzdWJ0cmFjdCAwICAnLTU2MjY3RS00JyAgLT4gICc1LjYyNjcnCitkcXN1YjQyNCBzdWJ0cmFjdCAwICAnLTU2MjY3RS0zJyAgLT4gICc1Ni4yNjcnCitkcXN1YjQyNSBzdWJ0cmFjdCAwICAnLTU2MjY3RS0yJyAgLT4gICc1NjIuNjcnCitkcXN1YjQyNiBzdWJ0cmFjdCAwICAnLTU2MjY3RS0xJyAgLT4gICc1NjI2LjcnCitkcXN1YjQyNyBzdWJ0cmFjdCAwICAnLTU2MjY3RS0wJyAgLT4gICc1NjI2NycKK2Rxc3ViNDI4IHN1YnRyYWN0IDAgICctNUUtMTAnICAgICAtPiAgJzVFLTEwJworZHFzdWI0Mjkgc3VidHJhY3QgMCAgJy01RS03JyAgICAgIC0+ICAnNUUtNycKK2Rxc3ViNDMwIHN1YnRyYWN0IDAgICctNUUtNicgICAgICAtPiAgJzAuMDAwMDA1JworZHFzdWI0MzEgc3VidHJhY3QgMCAgJy01RS01JyAgICAgIC0+ICAnMC4wMDAwNScKK2Rxc3ViNDMyIHN1YnRyYWN0IDAgICctNUUtNCcgICAgICAtPiAgJzAuMDAwNScKK2Rxc3ViNDMzIHN1YnRyYWN0IDAgICctNUUtMScgICAgICAtPiAgJzAuNScKK2Rxc3ViNDM0IHN1YnRyYWN0IDAgICctNUUwJyAgICAgICAtPiAgJzUnCitkcXN1YjQzNSBzdWJ0cmFjdCAwICAnLTVFMScgICAgICAgLT4gICc1MCcKK2Rxc3ViNDM2IHN1YnRyYWN0IDAgICctNUU1JyAgICAgICAtPiAgJzUwMDAwMCcKK2Rxc3ViNDM3IHN1YnRyYWN0IDAgICctNUUzMycgICAgICAtPiAgJzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCitkcXN1YjQzOCBzdWJ0cmFjdCAwICAnLTVFMzQnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQnICAgUm91bmRlZAorZHFzdWI0Mzkgc3VidHJhY3QgMCAgJy01RTM1JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgIFJvdW5kZWQKK2Rxc3ViNDQwIHN1YnRyYWN0IDAgICctNUUzNicgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgICBSb3VuZGVkCitkcXN1YjQ0MSBzdWJ0cmFjdCAwICAnLTVFMTAwJyAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZAorCisKKy0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCitkcXN1YjQ2MSBzdWJ0cmFjdCAnMUUrMTYnICcxJyAgICAgICAgLT4gJzk5OTk5OTk5OTk5OTk5OTknCitkcXN1YjQ2MiBzdWJ0cmFjdCAnMUUrMTInICctMS4xMTEnICAgLT4gJzEwMDAwMDAwMDAwMDEuMTExJworZHFzdWI0NjMgc3VidHJhY3QgJzEuMTExJyAgJy0xRSsxMicgIC0+ICcxMDAwMDAwMDAwMDAxLjExMScKK2Rxc3ViNDY0IHN1YnRyYWN0ICctMScgICAgJy0xRSsxNicgICAtPiAnOTk5OTk5OTk5OTk5OTk5OScKK2Rxc3ViNDY1IHN1YnRyYWN0ICc3RSsxNScgJzEnICAgICAgICAtPiAnNjk5OTk5OTk5OTk5OTk5OScKK2Rxc3ViNDY2IHN1YnRyYWN0ICc3RSsxMicgJy0xLjExMScgICAtPiAnNzAwMDAwMDAwMDAwMS4xMTEnCitkcXN1YjQ2NyBzdWJ0cmFjdCAnMS4xMTEnICAnLTdFKzEyJyAgLT4gJzcwMDAwMDAwMDAwMDEuMTExJworZHFzdWI0Njggc3VidHJhY3QgJy0xJyAgICAnLTdFKzE1JyAgIC0+ICc2OTk5OTk5OTk5OTk5OTk5JworCistLSAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxIDIzNDU2Nzg5MDEyMzQ1CitkcXN1YjQ3MCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjMnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjQ3MSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjInIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjQ3MiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjEnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjQ3MyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjQ3NCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTknIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjQ3NSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTgnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjQ3NiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTcnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjQ3NyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZHFzdWI0Nzggc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JworZHFzdWI0Nzkgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JworZHFzdWI0ODAgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUzJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3JworZHFzdWI0ODEgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUyJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2JworZHFzdWI0ODIgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1JworZHFzdWI0ODMgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0JworCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCityb3VuZGluZzogaGFsZl91cAorZHFzdWI1MDAgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknCitkcXN1YjUwMSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwNCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwNyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwOCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUwOSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUxMCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUxMSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUxMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUxMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUxNCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUxNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUxNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcKK2Rxc3ViNTE3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTE4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTE5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZHFzdWI1MjAgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknCitkcXN1YjUyMSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyNCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyNyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyOCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUyOSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUzMCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUzMSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUzMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUzMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUzNCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUzNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjUzNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcKK2Rxc3ViNTM3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTM4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTM5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitkcXN1YjU0MCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjU0MSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjU0MiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitkcXN1YjU1MCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScKK2Rxc3ViNTUxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTUyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTUzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTU0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTU1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTU2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTU3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTU4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTU5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTYwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTYxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTYyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTYzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTY0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTY1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNTY2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JworZHFzdWI1Njcgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1Njggc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorZHFzdWI1Njkgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorCistLSBzeW1tZXRyeS4uLgorcm91bmRpbmc6IGhhbGZfdXAKK2Rxc3ViNjAwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScKK2Rxc3ViNjAxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYwMiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MDMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjA0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYwNSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MDYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjA3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYwOCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MDkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjEwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYxMSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MTIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjEzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYxNCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MTUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjE2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcKK2Rxc3ViNjE3IHN1YnRyYWN0IDEuMDAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYxOCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MTkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorZHFzdWI2MjAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JworZHFzdWI2MjEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjIyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYyMyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MjQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjI1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYyNiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZHFzdWI2Mjcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjI4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYyOSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MzAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjMxIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYzMiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MzMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjM0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYzNSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2MzYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JworZHFzdWI2Mzcgc3VidHJhY3QgMS4wMDAwMDAwMSAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjM4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjYzOSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK2Rxc3ViNjQwIHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY0MSBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NDIgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK2Rxc3ViNjUwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScKK2Rxc3ViNjUxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY1MiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NTMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjU0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY1NSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NTYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjU3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY1OCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NTkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjYwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY2MSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NjIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjYzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY2NCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2NjUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2Rxc3ViNjY2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcKK2Rxc3ViNjY3IHN1YnRyYWN0IDEuMDAwMDAwMDEgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitkcXN1YjY2OCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorZHFzdWI2Njkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKKworCistLSBsb3RzIG9mIGxlYWRpbmcgemVyb3MgaW4gaW50ZXJtZWRpYXRlIHJlc3VsdCwgYW5kIHNob3dpbmcgZWZmZWN0cyBvZgorLS0gaW5wdXQgcm91bmRpbmcgd291bGQgaGF2ZSBhZmZlY3RlZCB0aGUgZm9sbG93aW5nCityb3VuZGluZzogaGFsZl91cAorZHFzdWI2NzAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQorZHFzdWI2NzEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQorZHFzdWI2NzIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjEKK2Rxc3ViNjczIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41CitkcXN1YjY3NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQorCityb3VuZGluZzogaGFsZl9ldmVuCitkcXN1YjY4MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45CitkcXN1YjY4MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xCitkcXN1YjY4MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQorZHFzdWI2ODMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUKK2Rxc3ViNjg0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45CisKK2Rxc3ViNjg1IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4Ny4xJyAtPiAwLjkKK2Rxc3ViNjg2IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4Ny45JyAtPiAwLjEKK2Rxc3ViNjg3IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAtMC4xCitkcXN1YjY4OCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguNScgLT4gLTAuNQorZHFzdWI2ODkgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjknIC0+IC0wLjkKKworcm91bmRpbmc6IGRvd24KK2Rxc3ViNjkwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkKK2Rxc3ViNjkxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjEKK2Rxc3ViNjkyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xCitkcXN1YjY5MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQorZHFzdWI2OTQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkKKworLS0gU3BlY2lhbHMKK2Rxc3ViNzgwIHN1YnRyYWN0IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzgxIHN1YnRyYWN0IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2Rxc3ViNzgyIHN1YnRyYWN0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzgzIHN1YnRyYWN0IC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzg0IHN1YnRyYWN0IC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzg1IHN1YnRyYWN0IC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK2Rxc3ViNzg3IHN1YnRyYWN0IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzg4IHN1YnRyYWN0IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzg5IHN1YnRyYWN0IC0xICAgICBJbmYgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzkwIHN1YnRyYWN0ICAwICAgICBJbmYgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzkxIHN1YnRyYWN0ICAxICAgICBJbmYgICAtPiAtSW5maW5pdHkKK2Rxc3ViNzkyIHN1YnRyYWN0ICAxMDAwICBJbmYgICAtPiAtSW5maW5pdHkKKworZHFzdWI4MDAgc3VidHJhY3QgIEluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1YjgwMSBzdWJ0cmFjdCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitkcXN1YjgwMiBzdWJ0cmFjdCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitkcXN1YjgwMyBzdWJ0cmFjdCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitkcXN1YjgwNCBzdWJ0cmFjdCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitkcXN1YjgwNSBzdWJ0cmFjdCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitkcXN1YjgwNiBzdWJ0cmFjdCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitkcXN1YjgwNyBzdWJ0cmFjdCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CitkcXN1YjgwOCBzdWJ0cmFjdCAtMTAwMCAtSW5mICAgLT4gIEluZmluaXR5CitkcXN1YjgwOSBzdWJ0cmFjdCAtSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODEwIHN1YnRyYWN0IC0xICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rxc3ViODExIHN1YnRyYWN0IC0wICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rxc3ViODEyIHN1YnRyYWN0ICAwICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rxc3ViODEzIHN1YnRyYWN0ICAxICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rxc3ViODE0IHN1YnRyYWN0ICAxMDAwIC1JbmYgICAtPiAgSW5maW5pdHkKK2Rxc3ViODE1IHN1YnRyYWN0ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKKworZHFzdWI4MjEgc3VidHJhY3QgIE5hTiAgIEluZiAgIC0+ICBOYU4KK2Rxc3ViODIyIHN1YnRyYWN0IC1OYU4gICAxMDAwICAtPiAtTmFOCitkcXN1YjgyMyBzdWJ0cmFjdCAgTmFOICAgMSAgICAgLT4gIE5hTgorZHFzdWI4MjQgc3VidHJhY3QgIE5hTiAgIDAgICAgIC0+ICBOYU4KK2Rxc3ViODI1IHN1YnRyYWN0ICBOYU4gIC0wICAgICAtPiAgTmFOCitkcXN1YjgyNiBzdWJ0cmFjdCAgTmFOICAtMSAgICAgLT4gIE5hTgorZHFzdWI4Mjcgc3VidHJhY3QgIE5hTiAgLTEwMDAgIC0+ICBOYU4KK2Rxc3ViODI4IHN1YnRyYWN0ICBOYU4gIC1JbmYgICAtPiAgTmFOCitkcXN1YjgyOSBzdWJ0cmFjdCAtTmFOICAgTmFOICAgLT4gLU5hTgorZHFzdWI4MzAgc3VidHJhY3QgLUluZiAgIE5hTiAgIC0+ICBOYU4KK2Rxc3ViODMxIHN1YnRyYWN0IC0xMDAwICBOYU4gICAtPiAgTmFOCitkcXN1YjgzMiBzdWJ0cmFjdCAtMSAgICAgTmFOICAgLT4gIE5hTgorZHFzdWI4MzMgc3VidHJhY3QgLTAgICAgIE5hTiAgIC0+ICBOYU4KK2Rxc3ViODM0IHN1YnRyYWN0ICAwICAgICBOYU4gICAtPiAgTmFOCitkcXN1YjgzNSBzdWJ0cmFjdCAgMSAgICAgTmFOICAgLT4gIE5hTgorZHFzdWI4MzYgc3VidHJhY3QgIDEwMDAgLU5hTiAgIC0+IC1OYU4KK2Rxc3ViODM3IHN1YnRyYWN0ICBJbmYgICBOYU4gICAtPiAgTmFOCisKK2Rxc3ViODQxIHN1YnRyYWN0ICBzTmFOICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NDIgc3VidHJhY3QgLXNOYU4gIDEwMDAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg0MyBzdWJ0cmFjdCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODQ0IHN1YnRyYWN0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NDUgc3VidHJhY3QgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg0NiBzdWJ0cmFjdCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODQ3IHN1YnRyYWN0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NDggc3VidHJhY3QgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg0OSBzdWJ0cmFjdCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODUwIHN1YnRyYWN0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NTEgc3VidHJhY3QgLUluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg1MiBzdWJ0cmFjdCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODUzIHN1YnRyYWN0IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NTQgc3VidHJhY3QgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg1NSBzdWJ0cmFjdCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODU2IHN1YnRyYWN0ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI4NTcgc3VidHJhY3QgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXN1Yjg1OCBzdWJ0cmFjdCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODU5IHN1YnRyYWN0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitkcXN1Yjg2MSBzdWJ0cmFjdCAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQorZHFzdWI4NjIgc3VidHJhY3QgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjIKK2Rxc3ViODYzIHN1YnRyYWN0ICBOYU4wMyAgICAxMDAwICAgIC0+ICBOYU4zCitkcXN1Yjg2NCBzdWJ0cmFjdCAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONAorZHFzdWI4NjUgc3VidHJhY3QgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUKK2Rxc3ViODY2IHN1YnRyYWN0IC1JbmYgICAgIC1OYU43MSAgIC0+IC1OYU43MQorZHFzdWI4Njcgc3VidHJhY3QgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxCitkcXN1Yjg2OCBzdWJ0cmFjdCAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTEKK2Rxc3ViODY5IHN1YnRyYWN0ICBJbmYgICAgICBOYU4xMDEgIC0+ICBOYU4xMDEKK2Rxc3ViODcxIHN1YnRyYWN0ICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODcyIHN1YnRyYWN0ICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODczIHN1YnRyYWN0IC1zTmFOMDEzICAgMTAwMCAgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODc0IHN1YnRyYWN0ICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODc1IHN1YnRyYWN0ICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODc2IHN1YnRyYWN0ICBOYU4wMTYgICBzTmFOMTkxIC0+ICBOYU4xOTEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODc3IHN1YnRyYWN0IC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODc4IHN1YnRyYWN0IC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODc5IHN1YnRyYWN0ICAxMDAwICAgIC1zTmFOMjIxIC0+IC1OYU4yMjEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODgwIHN1YnRyYWN0ICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24KK2Rxc3ViODgxIHN1YnRyYWN0ICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZWRnZSBjYXNlIHNwaWxscworZHFzdWI5MDEgc3VidHJhY3QgIDIuRS0zICAxLjAwMiAgLT4gLTEuMDAwCitkcXN1YjkwMiBzdWJ0cmFjdCAgMi4wRS0zICAxLjAwMiAgLT4gLTEuMDAwMAorZHFzdWI5MDMgc3VidHJhY3QgIDIuMDBFLTMgIDEuMDAyMCAgLT4gLTEuMDAwMDAKK2Rxc3ViOTA0IHN1YnRyYWN0ICAyLjAwMEUtMyAgMS4wMDIwMCAgLT4gLTEuMDAwMDAwCitkcXN1YjkwNSBzdWJ0cmFjdCAgMi4wMDAwRS0zICAxLjAwMjAwMCAgLT4gLTEuMDAwMDAwMAorZHFzdWI5MDYgc3VidHJhY3QgIDIuMDAwMDBFLTMgIDEuMDAyMDAwMCAgLT4gLTEuMDAwMDAwMDAKK2Rxc3ViOTA3IHN1YnRyYWN0ICAyLjAwMDAwMEUtMyAgMS4wMDIwMDAwMCAgLT4gLTEuMDAwMDAwMDAwCitkcXN1YjkwOCBzdWJ0cmFjdCAgMi4wMDAwMDAwRS0zICAxLjAwMjAwMDAwMCAgLT4gLTEuMDAwMDAwMDAwMAorCistLSBzdWJub3JtYWxzIGFuZCBvdmVyZmxvd3MgY292ZXJlZCB1bmRlciBBZGQKKworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitkcXN1YjExMjUgIHN1YnRyYWN0IDEzMEUtMiAgMTIwRS0yIC0+IDAuMTAKK2Rxc3ViMTEyNiAgc3VidHJhY3QgMTMwRS0yICAxMkUtMSAgLT4gMC4xMAorZHFzdWIxMTI3ICBzdWJ0cmFjdCAxMzBFLTIgIDFFMCAgICAtPiAwLjMwCitkcXN1YjExMjggIHN1YnRyYWN0IDFFMiAgICAgMUU0ICAgIC0+IC05LjlFKzMKKworLS0gTnVsbCB0ZXN0cworZHFzdWI5OTkwIHN1YnRyYWN0IDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHFzdWI5OTkxIHN1YnRyYWN0ICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVRvSW50ZWdyYWwuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFUb0ludGVncmFsLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1NWRlNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFUb0ludGVncmFsLmRlY1Rlc3QKQEAgLTAsMCArMSwyNTcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFUb0ludGVncmFsLmRlY1Rlc3QgLS0gcm91bmQgUXVhZCB0byBpbnRlZ3JhbCB2YWx1ZSAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyB0ZXN0cyB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbiAncm91bmQtdG8taW50ZWdyYWwKKy0tIHZhbHVlLWV4YWN0JyBvcGVyYXRpb25zIChmcm9tIElFRUUgODU0LCBsYXRlciBtb2RpZmllZCBpbiA3NTRyKS4KKy0tIEFsbCBub24temVybyByZXN1bHRzIGFyZSBkZWZpbmVkIGFzIGJlaW5nIHRob3NlIGZyb20gZWl0aGVyIGNvcHkgb3IKKy0tIHF1YW50aXplLCBzbyB0aG9zZSBhcmUgYXNzdW1lZCB0byBoYXZlIGJlZW4gdGVzdGVkIGV4dGVuc2l2ZWx5CistLSBlbHNld2hlcmU7IHRoZSB0ZXN0cyBoZXJlIGFyZSBmb3IgaW50ZWdyaXR5LCByb3VuZGluZyBtb2RlLCBldGMuCistLSBBbHNvLCBpdCBpcyBhc3N1bWVkIHRoZSB0ZXN0IGhhcm5lc3Mgd2lsbCB1c2UgdGhlc2UgdGVzdHMgZm9yIGJvdGgKKy0tIFRvSW50ZWdyYWxFeGFjdCAod2hpY2ggZG9lcyBzZXQgSW5leGFjdCkgYW5kIHRoZSBmaXhlZC1uYW1lCistLSBmdW5jdGlvbnMgKHdoaWNoIGRvIG5vdCBzZXQgSW5leGFjdCkuCisKKy0tIE5vdGUgdGhhdCBkZWNOdW1iZXIgaW1wbGVtZW50cyBhbiBlYXJsaWVyIGRlZmluaXRpb24gb2YgdG9JbnRlZ3JhbAorLS0gd2hpY2ggbmV2ZXIgc2V0cyBJbmV4YWN0OyB0aGUgZGVjVGVzdCBvcGVyYXRvciBmb3IgdGhhdCBpcyBjYWxsZWQKKy0tICd0b2ludGVncmFsJyBpbnN0ZWFkIG9mICd0b2ludGVncmFseCcuCisKK2V4dGVuZGVkOiAgICAxCitjbGFtcDogICAgICAgMQorcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RxaW50eDAwMSB0b2ludGVncmFseCAgICAgIDAgICAgIC0+ICAwCitkcWludHgwMDIgdG9pbnRlZ3JhbHggICAgICAwLjAgICAtPiAgMAorZHFpbnR4MDAzIHRvaW50ZWdyYWx4ICAgICAgMC4xICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDA0IHRvaW50ZWdyYWx4ICAgICAgMC4yICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDA1IHRvaW50ZWdyYWx4ICAgICAgMC4zICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDA2IHRvaW50ZWdyYWx4ICAgICAgMC40ICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDA3IHRvaW50ZWdyYWx4ICAgICAgMC41ICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDA4IHRvaW50ZWdyYWx4ICAgICAgMC42ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDA5IHRvaW50ZWdyYWx4ICAgICAgMC43ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDEwIHRvaW50ZWdyYWx4ICAgICAgMC44ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDExIHRvaW50ZWdyYWx4ICAgICAgMC45ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDEyIHRvaW50ZWdyYWx4ICAgICAgMSAgICAgLT4gIDEKK2RxaW50eDAxMyB0b2ludGVncmFseCAgICAgIDEuMCAgIC0+ICAxICBSb3VuZGVkCitkcWludHgwMTQgdG9pbnRlZ3JhbHggICAgICAxLjEgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTUgdG9pbnRlZ3JhbHggICAgICAxLjIgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTYgdG9pbnRlZ3JhbHggICAgICAxLjMgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTcgdG9pbnRlZ3JhbHggICAgICAxLjQgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTggdG9pbnRlZ3JhbHggICAgICAxLjUgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMTkgdG9pbnRlZ3JhbHggICAgICAxLjYgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMjAgdG9pbnRlZ3JhbHggICAgICAxLjcgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMjEgdG9pbnRlZ3JhbHggICAgICAxLjggICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwMjIgdG9pbnRlZ3JhbHggICAgICAxLjkgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkCistLSBuZWdhdGl2ZXMKK2RxaW50eDAzMSB0b2ludGVncmFseCAgICAgLTAgICAgIC0+IC0wCitkcWludHgwMzIgdG9pbnRlZ3JhbHggICAgIC0wLjAgICAtPiAtMAorZHFpbnR4MDMzIHRvaW50ZWdyYWx4ICAgICAtMC4xICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDM0IHRvaW50ZWdyYWx4ICAgICAtMC4yICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDM1IHRvaW50ZWdyYWx4ICAgICAtMC4zICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDM2IHRvaW50ZWdyYWx4ICAgICAtMC40ICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDM3IHRvaW50ZWdyYWx4ICAgICAtMC41ICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDM4IHRvaW50ZWdyYWx4ICAgICAtMC42ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDM5IHRvaW50ZWdyYWx4ICAgICAtMC43ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDQwIHRvaW50ZWdyYWx4ICAgICAtMC44ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDQxIHRvaW50ZWdyYWx4ICAgICAtMC45ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDQyIHRvaW50ZWdyYWx4ICAgICAtMSAgICAgLT4gLTEKK2RxaW50eDA0MyB0b2ludGVncmFseCAgICAgLTEuMCAgIC0+IC0xICBSb3VuZGVkCitkcWludHgwNDQgdG9pbnRlZ3JhbHggICAgIC0xLjEgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDUgdG9pbnRlZ3JhbHggICAgIC0xLjIgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDYgdG9pbnRlZ3JhbHggICAgIC0xLjMgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDcgdG9pbnRlZ3JhbHggICAgIC0xLjQgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDggdG9pbnRlZ3JhbHggICAgIC0xLjUgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNDkgdG9pbnRlZ3JhbHggICAgIC0xLjYgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNTAgdG9pbnRlZ3JhbHggICAgIC0xLjcgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNTEgdG9pbnRlZ3JhbHggICAgIC0xLjggICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNTIgdG9pbnRlZ3JhbHggICAgIC0xLjkgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IHR3byB3b3VsZCBiZSBOYU4gdXNpbmcgcXVhbnRpemUoeCwgMCkKK2RxaW50eDA1MyB0b2ludGVncmFseCAgICAxMEUrNjAgIC0+IDEuMEUrNjEKK2RxaW50eDA1NCB0b2ludGVncmFseCAgIC0xMEUrNjAgIC0+IC0xLjBFKzYxCisKKy0tIG51bWJlcnMgYXJvdW5kIHByZWNpc2lvbgorZHFpbnR4MDYwIHRvaW50ZWdyYWx4ICc1NjI2N0UtMTcnICAgLT4gJzAnICAgICAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNjEgdG9pbnRlZ3JhbHggJzU2MjY3RS01JyAgICAtPiAnMScgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA2MiB0b2ludGVncmFseCAnNTYyNjdFLTInICAgIC0+ICc1NjMnICAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MDYzIHRvaW50ZWdyYWx4ICc1NjI2N0UtMScgICAgLT4gJzU2MjcnICAgSW5leGFjdCBSb3VuZGVkCitkcWludHgwNjUgdG9pbnRlZ3JhbHggJzU2MjY3RS0wJyAgICAtPiAnNTYyNjcnCitkcWludHgwNjYgdG9pbnRlZ3JhbHggJzU2MjY3RSswJyAgICAtPiAnNTYyNjcnCitkcWludHgwNjcgdG9pbnRlZ3JhbHggJzU2MjY3RSsxJyAgICAtPiAnNS42MjY3RSs1JworZHFpbnR4MDY4IHRvaW50ZWdyYWx4ICc1NjI2N0UrOScgICAgLT4gJzUuNjI2N0UrMTMnCitkcWludHgwNjkgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMCcgICAtPiAnNS42MjY3RSsxNCcKK2RxaW50eDA3MCB0b2ludGVncmFseCAnNTYyNjdFKzExJyAgIC0+ICc1LjYyNjdFKzE1JworZHFpbnR4MDcxIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTInICAgLT4gJzUuNjI2N0UrMTYnCitkcWludHgwNzIgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMycgICAtPiAnNS42MjY3RSsxNycKK2RxaW50eDA3MyB0b2ludGVncmFseCAnMS4yM0UrOTYnICAgIC0+ICcxLjIzRSs5NicKK2RxaW50eDA3NCB0b2ludGVncmFseCAnMS4yM0UrNjE0NCcgIC0+ICM0N2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCisKK2RxaW50eDA4MCB0b2ludGVncmFseCAnLTU2MjY3RS0xMCcgIC0+ICctMCcgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA4MSB0b2ludGVncmFseCAnLTU2MjY3RS01JyAgIC0+ICctMScgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA4MiB0b2ludGVncmFseCAnLTU2MjY3RS0yJyAgIC0+ICctNTYzJyAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA4MyB0b2ludGVncmFseCAnLTU2MjY3RS0xJyAgIC0+ICctNTYyNycgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDA4NSB0b2ludGVncmFseCAnLTU2MjY3RS0wJyAgIC0+ICctNTYyNjcnCitkcWludHgwODYgdG9pbnRlZ3JhbHggJy01NjI2N0UrMCcgICAtPiAnLTU2MjY3JworZHFpbnR4MDg3IHRvaW50ZWdyYWx4ICctNTYyNjdFKzEnICAgLT4gJy01LjYyNjdFKzUnCitkcWludHgwODggdG9pbnRlZ3JhbHggJy01NjI2N0UrOScgICAtPiAnLTUuNjI2N0UrMTMnCitkcWludHgwODkgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTAnICAtPiAnLTUuNjI2N0UrMTQnCitkcWludHgwOTAgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTEnICAtPiAnLTUuNjI2N0UrMTUnCitkcWludHgwOTEgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTInICAtPiAnLTUuNjI2N0UrMTYnCitkcWludHgwOTIgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTMnICAtPiAnLTUuNjI2N0UrMTcnCitkcWludHgwOTMgdG9pbnRlZ3JhbHggJy0xLjIzRSs5NicgICAtPiAnLTEuMjNFKzk2JworZHFpbnR4MDk0IHRvaW50ZWdyYWx4ICctMS4yM0UrNjE0NCcgLT4gI2M3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQKKworLS0gc3Vibm9ybWFsIGlucHV0cworZHFpbnR4MTAwIHRvaW50ZWdyYWx4ICAgICAgICAxRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgxMDEgdG9pbnRlZ3JhbHggICAgICAwLjFFLTI5OSAtPiAwICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDEwMiB0b2ludGVncmFseCAgICAgMC4wMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MTAzIHRvaW50ZWdyYWx4ICAgICAgICAwRS0yOTkgLT4gMAorCistLSBzcGVjaWFscyBhbmQgemVyb3MKK2RxaW50eDEyMCB0b2ludGVncmFseCAnSW5mJyAgICAgICAtPiAgSW5maW5pdHkKK2RxaW50eDEyMSB0b2ludGVncmFseCAnLUluZicgICAgICAtPiAtSW5maW5pdHkKK2RxaW50eDEyMiB0b2ludGVncmFseCAgIE5hTiAgICAgICAtPiAgTmFOCitkcWludHgxMjMgdG9pbnRlZ3JhbHggIHNOYU4gICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2RxaW50eDEyNCB0b2ludGVncmFseCAgICAgMCAgICAgICAtPiAgMAorZHFpbnR4MTI1IHRvaW50ZWdyYWx4ICAgIC0wICAgICAgIC0+IC0wCitkcWludHgxMjYgdG9pbnRlZ3JhbHggICAgIDAuMDAwICAgLT4gIDAKK2RxaW50eDEyNyB0b2ludGVncmFseCAgICAgMC4wMCAgICAtPiAgMAorZHFpbnR4MTI4IHRvaW50ZWdyYWx4ICAgICAwLjAgICAgIC0+ICAwCitkcWludHgxMjkgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDAKK2RxaW50eDEzMCB0b2ludGVncmFseCAgICAgMEUtMyAgICAtPiAgMAorZHFpbnR4MTMxIHRvaW50ZWdyYWx4ICAgICAwRS0yICAgIC0+ICAwCitkcWludHgxMzIgdG9pbnRlZ3JhbHggICAgIDBFLTEgICAgLT4gIDAKK2RxaW50eDEzMyB0b2ludGVncmFseCAgICAgMEUtMCAgICAtPiAgMAorZHFpbnR4MTM0IHRvaW50ZWdyYWx4ICAgICAwRSsxICAgIC0+ICAwRSsxCitkcWludHgxMzUgdG9pbnRlZ3JhbHggICAgIDBFKzIgICAgLT4gIDBFKzIKK2RxaW50eDEzNiB0b2ludGVncmFseCAgICAgMEUrMyAgICAtPiAgMEUrMworZHFpbnR4MTM3IHRvaW50ZWdyYWx4ICAgICAwRSs0ICAgIC0+ICAwRSs0CitkcWludHgxMzggdG9pbnRlZ3JhbHggICAgIDBFKzUgICAgLT4gIDBFKzUKK2RxaW50eDEzOSB0b2ludGVncmFseCAgICAtMC4wMDAgICAtPiAtMAorZHFpbnR4MTQwIHRvaW50ZWdyYWx4ICAgIC0wLjAwICAgIC0+IC0wCitkcWludHgxNDEgdG9pbnRlZ3JhbHggICAgLTAuMCAgICAgLT4gLTAKK2RxaW50eDE0MiB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMAorZHFpbnR4MTQzIHRvaW50ZWdyYWx4ICAgIC0wRS0zICAgIC0+IC0wCitkcWludHgxNDQgdG9pbnRlZ3JhbHggICAgLTBFLTIgICAgLT4gLTAKK2RxaW50eDE0NSB0b2ludGVncmFseCAgICAtMEUtMSAgICAtPiAtMAorZHFpbnR4MTQ2IHRvaW50ZWdyYWx4ICAgIC0wRS0wICAgIC0+IC0wCitkcWludHgxNDcgdG9pbnRlZ3JhbHggICAgLTBFKzEgICAgLT4gLTBFKzEKK2RxaW50eDE0OCB0b2ludGVncmFseCAgICAtMEUrMiAgICAtPiAtMEUrMgorZHFpbnR4MTQ5IHRvaW50ZWdyYWx4ICAgIC0wRSszICAgIC0+IC0wRSszCitkcWludHgxNTAgdG9pbnRlZ3JhbHggICAgLTBFKzQgICAgLT4gLTBFKzQKK2RxaW50eDE1MSB0b2ludGVncmFseCAgICAtMEUrNSAgICAtPiAtMEUrNQorLS0gcHJvcGFnYXRpbmcgTmFOcworZHFpbnR4MTUyIHRvaW50ZWdyYWx4ICAgTmFOODA4ICAgIC0+ICBOYU44MDgKK2RxaW50eDE1MyB0b2ludGVncmFseCAgc05hTjA4MCAgICAtPiAgTmFOODAgIEludmFsaWRfb3BlcmF0aW9uCitkcWludHgxNTQgdG9pbnRlZ3JhbHggIC1OYU44MDggICAgLT4gLU5hTjgwOAorZHFpbnR4MTU1IHRvaW50ZWdyYWx4IC1zTmFOMDgwICAgIC0+IC1OYU44MCAgSW52YWxpZF9vcGVyYXRpb24KK2RxaW50eDE1NiB0b2ludGVncmFseCAgLU5hTiAgICAgICAtPiAtTmFOCitkcWludHgxNTcgdG9pbnRlZ3JhbHggLXNOYU4gICAgICAgLT4gLU5hTiAgICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBleGFtcGxlcworcm91bmRpbmc6ICAgIGhhbGZfdXAKK2RxaW50eDIwMCB0b2ludGVncmFseCAgICAgMi4xICAgIC0+IDIgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIwMSB0b2ludGVncmFseCAgIDEwMCAgICAgIC0+IDEwMAorZHFpbnR4MjAyIHRvaW50ZWdyYWx4ICAgMTAwLjAgICAgLT4gMTAwICAgICAgICAgIFJvdW5kZWQKK2RxaW50eDIwMyB0b2ludGVncmFseCAgIDEwMS41ICAgIC0+IDEwMiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIwNCB0b2ludGVncmFseCAgLTEwMS41ICAgIC0+IC0xMDIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIwNSB0b2ludGVncmFseCAgIDEwRSs1ICAgIC0+IDEuMEUrNgorZHFpbnR4MjA2IHRvaW50ZWdyYWx4ICA3Ljg5RSs3NyAgLT4gNy44OUUrNzcKK2RxaW50eDIwNyB0b2ludGVncmFseCAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQorCisKKy0tIGFsbCByb3VuZGluZyBtb2Rlcworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorZHFpbnR4MjEwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIxMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMTIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjEzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIxNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMTUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgaGFsZl91cAorCitkcWludHgyMjAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjIxIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIyMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMjMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjI0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIyNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24KKworZHFpbnR4MjMwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIzMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMzIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjMzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDIzNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyMzUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgdXAKKworZHFpbnR4MjQwIHRvaW50ZWdyYWx4ICAgICA1NS4zICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI0MSB0b2ludGVncmFseCAgICAgNTYuMyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNDIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjQzIHRvaW50ZWdyYWx4ICAgIC01NS4zICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI0NCB0b2ludGVncmFseCAgICAtNTYuMyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNDUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgZG93bgorCitkcWludHgyNTAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjUxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI1MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNTMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjU0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI1NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBjZWlsaW5nCisKK2RxaW50eDI2MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNjEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjYyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI2MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNjQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjY1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGZsb29yCisKK2RxaW50eDI3MCB0b2ludGVncmFseCAgICAgNTUuNyAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNzEgdG9pbnRlZ3JhbHggICAgIDU2LjcgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4MjcyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKK2RxaW50eDI3MyB0b2ludGVncmFseCAgICAtNTUuNyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCitkcWludHgyNzQgdG9pbnRlZ3JhbHggICAgLTU2LjcgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAorZHFpbnR4Mjc1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gSW50IGFuZCB1SW50MzIgZWRnZSB2YWx1ZXMgZm9yIHRlc3RpbmcgY29udmVyc2lvbnMKK2RxaW50eDMwMCB0b2ludGVncmFseCAtMjE0NzQ4MzY0NiAgLT4gLTIxNDc0ODM2NDYKK2RxaW50eDMwMSB0b2ludGVncmFseCAtMjE0NzQ4MzY0NyAgLT4gLTIxNDc0ODM2NDcKK2RxaW50eDMwMiB0b2ludGVncmFseCAtMjE0NzQ4MzY0OCAgLT4gLTIxNDc0ODM2NDgKK2RxaW50eDMwMyB0b2ludGVncmFseCAtMjE0NzQ4MzY0OSAgLT4gLTIxNDc0ODM2NDkKK2RxaW50eDMwNCB0b2ludGVncmFseCAgMjE0NzQ4MzY0NiAgLT4gIDIxNDc0ODM2NDYKK2RxaW50eDMwNSB0b2ludGVncmFseCAgMjE0NzQ4MzY0NyAgLT4gIDIxNDc0ODM2NDcKK2RxaW50eDMwNiB0b2ludGVncmFseCAgMjE0NzQ4MzY0OCAgLT4gIDIxNDc0ODM2NDgKK2RxaW50eDMwNyB0b2ludGVncmFseCAgMjE0NzQ4MzY0OSAgLT4gIDIxNDc0ODM2NDkKK2RxaW50eDMwOCB0b2ludGVncmFseCAgNDI5NDk2NzI5NCAgLT4gIDQyOTQ5NjcyOTQKK2RxaW50eDMwOSB0b2ludGVncmFseCAgNDI5NDk2NzI5NSAgLT4gIDQyOTQ5NjcyOTUKK2RxaW50eDMxMCB0b2ludGVncmFseCAgNDI5NDk2NzI5NiAgLT4gIDQyOTQ5NjcyOTYKK2RxaW50eDMxMSB0b2ludGVncmFseCAgNDI5NDk2NzI5NyAgLT4gIDQyOTQ5NjcyOTcKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVhvci5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVhvci5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMTZlOWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxWG9yLmRlY1Rlc3QKQEAgLTAsMCArMSw0MTAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHFYb3IuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBYT1IgZm9yIGRlY1F1YWRzICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorY2xhbXA6ICAgICAgIDEKK3ByZWNpc2lvbjogICAzNAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0Mworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQorZHF4b3IwMDEgeG9yICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwCitkcXhvcjAwMiB4b3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDEKK2RxeG9yMDAzIHhvciAgICAgICAgICAgICAxICAgIDAgLT4gICAgMQorZHF4b3IwMDQgeG9yICAgICAgICAgICAgIDEgICAgMSAtPiAgICAwCitkcXhvcjAwNSB4b3IgICAgICAgICAgMTEwMCAxMDEwIC0+ICAxMTAKKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCitkcXhvcjAwNiB4b3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCitkcXhvcjAwNyB4b3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3IwMDggeG9yIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yMDA5IHhvciAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2RxeG9yMDEwIHhvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK2RxeG9yMDExIHhvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjAxMiB4b3IgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZHF4b3IwMTMgeG9yIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorCistLSBWYXJpb3VzIGxlbmd0aHMKKy0tICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitkcXhvcjYwMSB4b3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwMiB4b3IgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwMyB4b3IgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwNCB4b3IgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwNSB4b3IgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwNiB4b3IgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwNyB4b3IgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwOCB4b3IgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYwOSB4b3IgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxMCB4b3IgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxMSB4b3IgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxMiB4b3IgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxMyB4b3IgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxNCB4b3IgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxNSB4b3IgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxNiB4b3IgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxNyB4b3IgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxOCB4b3IgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYxOSB4b3IgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwCitkcXhvcjYyMCB4b3IgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwCitkcXhvcjYyMSB4b3IgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwCitkcXhvcjYyMiB4b3IgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwCitkcXhvcjYyMyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwCitkcXhvcjYyNCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwCitkcXhvcjYyNSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwCitkcXhvcjYyNiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwCitkcXhvcjYyNyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwCitkcXhvcjYyOCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwCitkcXhvcjYyOSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwCitkcXhvcjYzMCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwCitkcXhvcjYzMSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwCitkcXhvcjYzMiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwCitkcXhvcjYzMyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCitkcXhvcjYzNCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKK2RxeG9yNjQxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQ0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQ1IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQ2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQ3IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQ4IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjQ5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjUwIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjUxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjUyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjUzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjU0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjU1IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjU2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjU3IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjU4IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjU5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjYwIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAKK2RxeG9yNjYxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAKK2RxeG9yNjYyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAKK2RxeG9yNjYzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAKK2RxeG9yNjY0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAKK2RxeG9yNjY1IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAKK2RxeG9yNjY2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAKK2RxeG9yNjY3IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAKK2RxeG9yNjY4IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAKK2RxeG9yNjY5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAKK2RxeG9yNjcwIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAKK2RxeG9yNjcxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAKK2RxeG9yNjcyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAKK2RxeG9yNjczIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKK2RxeG9yNjc0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKK2RxeG9yNjc1IHhvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK2RxeG9yNjc2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworCitkcXhvcjAyMSB4b3IgMTExMTExMTExMDAwMDAwMCAgICAgMTExMTExMTExMDAwMDAwMCAgLT4gIDAKK2RxeG9yMDIyIHhvciAgMTExMTExMTEwMDAwMDAwICAgICAgMTExMTExMTEwMDAwMDAwICAtPiAgMAorZHF4b3IwMjMgeG9yICAgMTExMTExMTAwMDAwMDAgICAgICAgMTExMTExMTAwMDAwMDAgIC0+ICAwCitkcXhvcjAyNCB4b3IgICAgMTExMTExMDAwMDAwMCAgICAgICAgMTExMTExMDAwMDAwMCAgLT4gIDAKK2RxeG9yMDI1IHhvciAgICAgMTExMTEwMDAwMDAwICAgICAgICAgMTExMTEwMDAwMDAwICAtPiAgMAorZHF4b3IwMjYgeG9yICAgICAgMTExMTAwMDAwMDAgICAgICAgICAgMTExMTAwMDAwMDAgIC0+ICAwCitkcXhvcjAyNyB4b3IgICAgICAgMTExMDAwMDAwMCAgICAgICAgICAgMTExMDAwMDAwMCAgLT4gIDAKK2RxeG9yMDI4IHhvciAgICAgICAgMTEwMDAwMDAwICAgICAgICAgICAgMTEwMDAwMDAwICAtPiAgMAorZHF4b3IwMjkgeG9yICAgICAgICAgMTAwMDAwMDAgICAgICAgICAgICAgMTAwMDAwMDAgIC0+ICAwCitkcXhvcjAzMCB4b3IgICAgICAgICAgMTAwMDAwMCAgICAgICAgICAgICAgMTAwMDAwMCAgLT4gIDAKK2RxeG9yMDMxIHhvciAgICAgICAgICAgMTAwMDAwICAgICAgICAgICAgICAgMTAwMDAwICAtPiAgMAorZHF4b3IwMzIgeG9yICAgICAgICAgICAgMTAwMDAgICAgICAgICAgICAgICAgMTAwMDAgIC0+ICAwCitkcXhvcjAzMyB4b3IgICAgICAgICAgICAgMTAwMCAgICAgICAgICAgICAgICAgMTAwMCAgLT4gIDAKK2RxeG9yMDM0IHhvciAgICAgICAgICAgICAgMTAwICAgICAgICAgICAgICAgICAgMTAwICAtPiAgMAorZHF4b3IwMzUgeG9yICAgICAgICAgICAgICAgMTAgICAgICAgICAgICAgICAgICAgMTAgIC0+ICAwCitkcXhvcjAzNiB4b3IgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgMSAgLT4gIDAKKworZHF4b3IwNDAgeG9yIDExMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTExMDAwMDAwMDAwCitkcXhvcjA0MSB4b3IgIDExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMDAwMDAwMDAKK2RxeG9yMDQyIHhvciAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDEwMDAwMDAwMAorZHF4b3IwNDMgeG9yICAgMTExMTExMSAgICAgMTAwMDAwMDEwICAtPiAgMTAxMTExMTAxCitkcXhvcjA0NCB4b3IgICAgMTExMTExICAgICAxMDAwMDAxMDAgIC0+ICAxMDAxMTEwMTEKK2RxeG9yMDQ1IHhvciAgICAgMTExMTEgICAgIDEwMDAwMTAwMCAgLT4gIDEwMDAxMDExMQorZHF4b3IwNDYgeG9yICAgICAgMTExMSAgICAgMTAwMDEwMDAwICAtPiAgMTAwMDExMTExCitkcXhvcjA0NyB4b3IgICAgICAgMTExICAgICAxMDAxMDAwMDAgIC0+ICAxMDAxMDAxMTEKK2RxeG9yMDQ4IHhvciAgICAgICAgMTEgICAgIDEwMTAwMDAwMCAgLT4gIDEwMTAwMDAxMQorZHF4b3IwNDkgeG9yICAgICAgICAgMSAgICAgMTEwMDAwMDAwICAtPiAgMTEwMDAwMDAxCisKK2RxeG9yMDUwIHhvciAxMTExMTExMTExICAxICAtPiAgMTExMTExMTExMAorZHF4b3IwNTEgeG9yICAxMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTAKK2RxeG9yMDUyIHhvciAgIDExMTExMTExICAxICAtPiAgMTExMTExMTAKK2RxeG9yMDUzIHhvciAgICAxMTExMTExICAxICAtPiAgMTExMTExMAorZHF4b3IwNTQgeG9yICAgICAxMTExMTEgIDEgIC0+ICAxMTExMTAKK2RxeG9yMDU1IHhvciAgICAgIDExMTExICAxICAtPiAgMTExMTAKK2RxeG9yMDU2IHhvciAgICAgICAxMTExICAxICAtPiAgMTExMAorZHF4b3IwNTcgeG9yICAgICAgICAxMTEgIDEgIC0+ICAxMTAKK2RxeG9yMDU4IHhvciAgICAgICAgIDExICAxICAtPiAgMTAKK2RxeG9yMDU5IHhvciAgICAgICAgICAxICAxICAtPiAgMAorCitkcXhvcjA2MCB4b3IgMTExMTExMTExMSAgMCAgLT4gIDExMTExMTExMTEKK2RxeG9yMDYxIHhvciAgMTExMTExMTExICAwICAtPiAgMTExMTExMTExCitkcXhvcjA2MiB4b3IgICAxMTExMTExMSAgMCAgLT4gIDExMTExMTExCitkcXhvcjA2MyB4b3IgICAgMTExMTExMSAgMCAgLT4gIDExMTExMTEKK2RxeG9yMDY0IHhvciAgICAgMTExMTExICAwICAtPiAgMTExMTExCitkcXhvcjA2NSB4b3IgICAgICAxMTExMSAgMCAgLT4gIDExMTExCitkcXhvcjA2NiB4b3IgICAgICAgMTExMSAgMCAgLT4gIDExMTEKK2RxeG9yMDY3IHhvciAgICAgICAgMTExICAwICAtPiAgMTExCitkcXhvcjA2OCB4b3IgICAgICAgICAxMSAgMCAgLT4gIDExCitkcXhvcjA2OSB4b3IgICAgICAgICAgMSAgMCAgLT4gIDEKKworZHF4b3IwNzAgeG9yIDEgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEwCitkcXhvcjA3MSB4b3IgMSAgIDExMTExMTExMSAgLT4gIDExMTExMTExMAorZHF4b3IwNzIgeG9yIDEgICAgMTExMTExMTEgIC0+ICAxMTExMTExMAorZHF4b3IwNzMgeG9yIDEgICAgIDExMTExMTEgIC0+ICAxMTExMTEwCitkcXhvcjA3NCB4b3IgMSAgICAgIDExMTExMSAgLT4gIDExMTExMAorZHF4b3IwNzUgeG9yIDEgICAgICAgMTExMTEgIC0+ICAxMTExMAorZHF4b3IwNzYgeG9yIDEgICAgICAgIDExMTEgIC0+ICAxMTEwCitkcXhvcjA3NyB4b3IgMSAgICAgICAgIDExMSAgLT4gIDExMAorZHF4b3IwNzggeG9yIDEgICAgICAgICAgMTEgIC0+ICAxMAorZHF4b3IwNzkgeG9yIDEgICAgICAgICAgIDEgIC0+ICAwCisKK2RxeG9yMDgwIHhvciAwICAxMTExMTExMTExICAtPiAgMTExMTExMTExMQorZHF4b3IwODEgeG9yIDAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKK2RxeG9yMDgyIHhvciAwICAgIDExMTExMTExICAtPiAgMTExMTExMTEKK2RxeG9yMDgzIHhvciAwICAgICAxMTExMTExICAtPiAgMTExMTExMQorZHF4b3IwODQgeG9yIDAgICAgICAxMTExMTEgIC0+ICAxMTExMTEKK2RxeG9yMDg1IHhvciAwICAgICAgIDExMTExICAtPiAgMTExMTEKK2RxeG9yMDg2IHhvciAwICAgICAgICAxMTExICAtPiAgMTExMQorZHF4b3IwODcgeG9yIDAgICAgICAgICAxMTEgIC0+ICAxMTEKK2RxeG9yMDg4IHhvciAwICAgICAgICAgIDExICAtPiAgMTEKK2RxeG9yMDg5IHhvciAwICAgICAgICAgICAxICAtPiAgMQorCitkcXhvcjA5MCB4b3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMDAwMTAwMDAKK2RxeG9yMDkxIHhvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gICAxMDAxMDAwMAorZHF4b3IwOTIgeG9yIDExMDExMTExMSAgMTExMTAxMTExICAtPiAgICAxMDEwMDAwCitkcXhvcjA5MyB4b3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAgICAxMTAwMDAKK2RxeG9yMDk0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMAorZHF4b3IwOTUgeG9yIDExMTExMDExMSAgMTExMTAxMTExICAtPiAgICAgIDExMDAwCitkcXhvcjA5NiB4b3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAgICAgMTAxMDAKK2RxeG9yMDk3IHhvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gICAgICAxMDAxMAorZHF4b3IwOTggeG9yIDExMTExMTExMCAgMTExMTAxMTExICAtPiAgICAgIDEwMDAxCisKK2RxeG9yMTAwIHhvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDEwMDAxMDAwMAorZHF4b3IxMDEgeG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgIDEwMDEwMDAwCitkcXhvcjEwMiB4b3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAgIDEwMTAwMDAKK2RxeG9yMTAzIHhvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gICAgIDExMDAwMAorZHF4b3IxMDQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwCitkcXhvcjEwNSB4b3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAgICAgMTEwMDAKK2RxeG9yMTA2IHhvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gICAgICAxMDEwMAorZHF4b3IxMDcgeG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgICAgIDEwMDEwCitkcXhvcjEwOCB4b3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAgICAgMTAwMDEKKworLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCitkcXhvcjIyMCB4b3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjIxIHhvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMjIgeG9yIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIyMyB4b3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjI0IHhvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMjUgeG9yIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIyNiB4b3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjI3IHhvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMjggeG9yIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIyOSB4b3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjMwIHhvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyMzEgeG9yIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjIzMiB4b3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK2RxeG9yMjQwIHhvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNDEgeG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI0MiB4b3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjQzIHhvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNDQgeG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRAorZHF4b3IyNTAgeG9yICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTEgeG9yICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTIgeG9yICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTMgeG9yICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTQgeG9yICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTUgeG9yICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTYgeG9yICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTcgeG9yICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTggeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNTkgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNjAgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNjEgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNjIgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNjMgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNjQgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNjUgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQorZHF4b3IyNzAgeG9yICAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNzEgeG9yICAwNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNzIgeG9yICAwODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNzMgeG9yICAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNzQgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMTAwMDAwIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNzUgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNzYgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAxMDAwIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyNzcgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMTAwIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBMU0QKK2RxeG9yMjgwIHhvciAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjgxIHhvciAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwNyAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjgyIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwOCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjgzIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwOSAxMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjg0IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjg1IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjg2IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAwMTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjg3IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTWlkZGllCitkcXhvcjI4OCB4b3IgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI4OSB4b3IgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwNzAwMDAwMDEgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5MCB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwODAwMDAwMTAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5MSB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwOTAwMDAxMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5MiB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5MyB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5NCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5NSB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworZHF4b3IyOTYgeG9yIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMjk3IHhvciAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjI5OCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IyOTkgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAxMDAxMDAxMDAxMDAxMDAxMDAwMDEwMDAwMTAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UKK2RxeG9yMzMxIHhvciAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjMzMiB4b3IgIDMgICAxRS05OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzMzMgeG9yICA0ICAgMS4wMDAwMDAwMEUtMjgyMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzM0IHhvciAgNSAgIDFFLTkwMCAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjMzNSB4b3IgIDYgICAtMUUtOTAwICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzMzYgeG9yICA3ICAgLTEuMDAwMDAwMDBFLTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzM3IHhvciAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjMzOCB4b3IgIDkgICAtOS45OTk5OTk5OUUrOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNDEgeG9yICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzQyIHhvciAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM0MyB4b3IgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNDQgeG9yICAxRS05MDggICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzQ1IHhvciAgLTFFLTkwNyAgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM0NiB4b3IgIC0xLjAwMDAwMDAwRS05OTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNDcgeG9yICAtMUUtOTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzQ4IHhvciAgLTkuOTk5OTk5OTlFKzI5OTEgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycworZHF4b3IzNjEgeG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzYyIHhvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM2MyB4b3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNjQgeG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzY1IHhvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM2NiB4b3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNzEgeG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzcyIHhvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM3MyB4b3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3IzNzQgeG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yMzc1IHhvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjM3NiB4b3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCitkcXhvcjc4MCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3ODEgeG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzgyIHhvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc4MyB4b3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3ODQgeG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzg1IHhvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc4NiB4b3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3ODcgeG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzg4IHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc4OSB4b3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3OTAgeG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzkxIHhvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjc5MiB4b3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I3OTMgeG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yNzk0IHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxeG9yODAwIHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgwMSB4b3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MDIgeG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODAzIHhvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgwNCB4b3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MDUgeG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODA2IHhvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgwNyB4b3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MDggeG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODA5IHhvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgxMCB4b3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MTEgeG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODEyIHhvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgxMyB4b3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MTQgeG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODE1IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2RxeG9yODIxIHhvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgyMiB4b3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MjMgeG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODI0IHhvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgyNSB4b3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MjYgeG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODI3IHhvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgyOCB4b3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MjkgeG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODMwIHhvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgzMSB4b3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MzIgeG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODMzIHhvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgzNCB4b3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4MzUgeG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODM2IHhvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjgzNyB4b3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitkcXhvcjg0MSB4b3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0MiB4b3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0MyB4b3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0NCB4b3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0NSB4b3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0NiB4b3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0NyB4b3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0OCB4b3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg0OSB4b3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1MCB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1MSB4b3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1MiB4b3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1MyB4b3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1NCB4b3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1NSB4b3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1NiB4b3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1NyB4b3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1OCB4b3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg1OSB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2RxeG9yODYxIHhvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg2MiB4b3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NjMgeG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODY0IHhvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg2NSB4b3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NjYgeG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODY3IHhvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg2OCB4b3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NjkgeG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODcxIHhvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg3MiB4b3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NzMgeG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODc0IHhvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg3NSB4b3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NzYgeG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODc3IHhvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg3OCB4b3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4NzkgeG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODgwIHhvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg4MSB4b3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4ODIgeG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2RxeG9yODgzIHhvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitkcXhvcjg4NCB4b3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZHF4b3I4ODUgeG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHNCYXNlLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RzQmFzZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNWU1YTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RzQmFzZS5kZWNUZXN0CkBAIC0wLDAgKzEsMTA2MiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBkc0Jhc2UuZGVjVGVzdCAtLSBiYXNlIGRlY1NpbmdsZSA8LS0+IHN0cmluZyBjb252ZXJzaW9ucyAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgZmlsZSB0ZXN0cyBiYXNlIGNvbnZlcnNpb25zIGZyb20gc3RyaW5nIHRvIGEgZGVjaW1hbCBudW1iZXIKKy0tIGFuZCBiYWNrIHRvIGEgc3RyaW5nIChpbiBTY2llbnRpZmljIGZvcm0pCisKKy0tIE5vdGUgdGhhdCB1bmxpa2Ugb3RoZXIgb3BlcmF0aW9ucyB0aGUgb3BlcmFuZCBpcyBzdWJqZWN0IHRvIHJvdW5kaW5nCistLSB0byBjb25mb3JtIHRvIGVtYXggYW5kIHByZWNpc2lvbiBzZXR0aW5ncyAodGhhdCBpcywgbnVtYmVycyB3aWxsCistLSBjb25mb3JtIHRvIHJ1bGVzIGFuZCBleHBvbmVudCB3aWxsIGJlIGluIHBlcm1pdHRlZCByYW5nZSkuICBUaGUKKy0tICdsZWZ0IGhhbmQgc2lkZScsIHRoZXJlZm9yZSwgbWF5IGhhdmUgbnVtYmVycyB0aGF0IGNhbm5vdCBiZQorLS0gcmVwcmVzZW50ZWQgaW4gYSBkZWNTaW5nbGUuICBTb21lIHRlc3RjYXNlcyBnbyB0byB0aGUgbGltaXQgb2YgdGhlCistLSBuZXh0LXdpZGVyIGZvcm1hdCwgYW5kIGhlbmNlIHRoZXNlIHRlc3RjYXNlcyBtYXkgYWxzbyBiZSB1c2VkIHRvCistLSB0ZXN0IG5hcnJvd2luZyBhbmQgd2lkZW5pbmcgb3BlcmF0aW9ucy4KKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgNworbWF4RXhwb25lbnQ6IDk2CittaW5FeHBvbmVudDogLTk1Cityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2RzYmFzMDAxIHRvU2NpICAgICAgIDAgLT4gMAorZHNiYXMwMDIgdG9TY2kgICAgICAgMSAtPiAxCitkc2JhczAwMyB0b1NjaSAgICAgMS4wIC0+IDEuMAorZHNiYXMwMDQgdG9TY2kgICAgMS4wMCAtPiAxLjAwCitkc2JhczAwNSB0b1NjaSAgICAgIDEwIC0+IDEwCitkc2JhczAwNiB0b1NjaSAgICAxMDAwIC0+IDEwMDAKK2RzYmFzMDA3IHRvU2NpICAgIDEwLjAgLT4gMTAuMAorZHNiYXMwMDggdG9TY2kgICAgMTAuMSAtPiAxMC4xCitkc2JhczAwOSB0b1NjaSAgICAxMC40IC0+IDEwLjQKK2RzYmFzMDEwIHRvU2NpICAgIDEwLjUgLT4gMTAuNQorZHNiYXMwMTEgdG9TY2kgICAgMTAuNiAtPiAxMC42Citkc2JhczAxMiB0b1NjaSAgICAxMC45IC0+IDEwLjkKK2RzYmFzMDEzIHRvU2NpICAgIDExLjAgLT4gMTEuMAorZHNiYXMwMTQgdG9TY2kgIDEuMjM0IC0+IDEuMjM0Citkc2JhczAxNSB0b1NjaSAgMC4xMjMgLT4gMC4xMjMKK2RzYmFzMDE2IHRvU2NpICAwLjAxMiAtPiAwLjAxMgorZHNiYXMwMTcgdG9TY2kgIC0wICAgIC0+IC0wCitkc2JhczAxOCB0b1NjaSAgLTAuMCAgLT4gLTAuMAorZHNiYXMwMTkgdG9TY2kgLTAwLjAwIC0+IC0wLjAwCisKK2RzYmFzMDIxIHRvU2NpICAgICAtMSAtPiAtMQorZHNiYXMwMjIgdG9TY2kgICAtMS4wIC0+IC0xLjAKK2RzYmFzMDIzIHRvU2NpICAgLTAuMSAtPiAtMC4xCitkc2JhczAyNCB0b1NjaSAgIC05LjEgLT4gLTkuMQorZHNiYXMwMjUgdG9TY2kgICAtOS4xMSAtPiAtOS4xMQorZHNiYXMwMjYgdG9TY2kgICAtOS4xMTkgLT4gLTkuMTE5Citkc2JhczAyNyB0b1NjaSAgIC05Ljk5OSAtPiAtOS45OTkKKworZHNiYXMwMzAgdG9TY2kgICcxMjM0LjU2NycgICAtPiAnMTIzNC41NjcnCitkc2JhczAzMSB0b1NjaSAgJzEyMzQuMDAwJyAgIC0+ICcxMjM0LjAwMCcKK2RzYmFzMDMyIHRvU2NpICAgJzEyMzQ5MTInICAgLT4gJzEyMzQ5MTInCitkc2JhczAzMyB0b1NjaSAgICcwLjAwMDAxMjM0NTY3JyAgIC0+ICcwLjAwMDAxMjM0NTY3JworZHNiYXMwMzQgdG9TY2kgICcwLjAwMDAwMTIzNDU2NycgICAtPiAnMC4wMDAwMDEyMzQ1NjcnCitkc2JhczAzNSB0b1NjaSAnMC4wMDAwMDAxMjM0NTY3JyAgIC0+ICcxLjIzNDU2N0UtNycKK2RzYmFzMDM2IHRvU2NpICcwLjAwMDAwMDAxMjM0NTY3JyAgLT4gJzEuMjM0NTY3RS04JworCitkc2JhczAzNyB0b1NjaSAnMC4xMjM0NTY0JyAgIC0+ICcwLjEyMzQ1NjQnCitkc2JhczAzOCB0b1NjaSAnMC4xMjM0NTY1JyAgIC0+ICcwLjEyMzQ1NjUnCisKKy0tIHRlc3QgZmluaXRlIGJvdW5kcyAoTmVncyBvZiwgdGhlbiAwLCBOdGlueSwgTm1pbiwgb3RoZXIsIE5tYXgpCitkc2JzbjAwMSB0b1NjaSAtOS45OTk5OTlFKzk2IC0+IC05Ljk5OTk5OUUrOTYKK2RzYnNuMDAyIHRvU2NpIC0xRS05NSAtPiAtMUUtOTUKK2RzYnNuMDAzIHRvU2NpIC0xRS0xMDEgLT4gLTFFLTEwMSBTdWJub3JtYWwKK2RzYnNuMDA0IHRvU2NpIC0wIC0+IC0wCitkc2JzbjAwNSB0b1NjaSArMCAtPiAgMAorZHNic24wMDYgdG9TY2kgKzFFLTEwMSAtPiAgMUUtMTAxIFN1Ym5vcm1hbAorZHNic24wMDcgdG9TY2kgKzFFLTk1IC0+ICAxRS05NQorZHNic24wMDggdG9TY2kgKzkuOTk5OTk5RSs5NiAtPiAgOS45OTk5OTlFKzk2CisKKy0tIFN0cmluZyBbbWFueSBtb3JlIGV4YW1wbGVzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCBlbHNld2hlcmVdCistLSBzdHJpbmdzIHdpdGhvdXQgRSBjYW5ub3QgZ2VuZXJhdGUgRSBpbiByZXN1bHQKK2RzYmFzMDQwIHRvU2NpICIxMiIgICAgICAgIC0+ICcxMicKK2RzYmFzMDQxIHRvU2NpICItNzYiICAgICAgIC0+ICctNzYnCitkc2JhczA0MiB0b1NjaSAiMTIuNzYiICAgICAtPiAnMTIuNzYnCitkc2JhczA0MyB0b1NjaSAiKzEyLjc2IiAgICAtPiAnMTIuNzYnCitkc2JhczA0NCB0b1NjaSAiMDEyLjc2IiAgICAtPiAnMTIuNzYnCitkc2JhczA0NSB0b1NjaSAiKzAuMDAzIiAgICAtPiAnMC4wMDMnCitkc2JhczA0NiB0b1NjaSAiMTcuIiAgICAgICAtPiAnMTcnCitkc2JhczA0NyB0b1NjaSAiLjUiICAgICAgICAtPiAnMC41JworZHNiYXMwNDggdG9TY2kgIjA0NCIgICAgICAgLT4gJzQ0JworZHNiYXMwNDkgdG9TY2kgIjAwNDQiICAgICAgLT4gJzQ0JworZHNiYXMwNTAgdG9TY2kgIjAuMDAwNSIgICAgICAtPiAnMC4wMDA1JworZHNiYXMwNTEgdG9TY2kgIjAwLjAwMDA1IiAgICAtPiAnMC4wMDAwNScKK2RzYmFzMDUyIHRvU2NpICIwLjAwMDAwNSIgICAgLT4gJzAuMDAwMDA1JworZHNiYXMwNTMgdG9TY2kgIjAuMDAwMDA1MCIgICAtPiAnMC4wMDAwMDUwJworZHNiYXMwNTQgdG9TY2kgIjAuMDAwMDAwNSIgICAtPiAnNUUtNycKK2RzYmFzMDU1IHRvU2NpICIwLjAwMDAwMDA1IiAgLT4gJzVFLTgnCitkc2JhczA1NiB0b1NjaSAiMTI2NzguNTQiIC0+ICcxMjY3OC41NCcKK2RzYmFzMDU3IHRvU2NpICIyNjc4LjU0MyIgLT4gJzI2NzguNTQzJworZHNiYXMwNTggdG9TY2kgIjM0NTY3OC41IiAtPiAnMzQ1Njc4LjUnCitkc2JhczA1OSB0b1NjaSAiMDY3OC41NDMyIiAtPiAnNjc4LjU0MzInCitkc2JhczA2MCB0b1NjaSAiNjc4LjU0MzIiIC0+ICc2NzguNTQzMicKK2RzYmFzMDYxIHRvU2NpICIrNjc4LjU0MzIiIC0+ICc2NzguNTQzMicKK2RzYmFzMDYyIHRvU2NpICIrMDY3OC41NDMyIiAtPiAnNjc4LjU0MzInCitkc2JhczA2MyB0b1NjaSAiKzAwNjc4LjU0MzIiIC0+ICc2NzguNTQzMicKK2RzYmFzMDY0IHRvU2NpICItNjc4LjU0MzIiICAtPiAnLTY3OC41NDMyJworZHNiYXMwNjUgdG9TY2kgIi0wNjc4LjU0MzIiICAtPiAnLTY3OC41NDMyJworZHNiYXMwNjYgdG9TY2kgIi0wMDY3OC41NDMyIiAgLT4gJy02NzguNTQzMicKKy0tIGV4YW1wbGVzCitkc2JhczA2NyB0b1NjaSAiNUUtNiIgICAgICAgIC0+ICcwLjAwMDAwNScKK2RzYmFzMDY4IHRvU2NpICI1MEUtNyIgICAgICAgLT4gJzAuMDAwMDA1MCcKK2RzYmFzMDY5IHRvU2NpICI1RS03IiAgICAgICAgLT4gJzVFLTcnCisKKy0tIFtObyBleG90aWNzIGFzIG5vIFVuaWNvZGVdCisKKy0tIHJvdW5kZWQgd2l0aCBkb3RzIGluIGFsbCAoaW5jbHVkaW5nIGVkZ2UpIHBsYWNlcworZHNiYXMwNzEgdG9TY2kgIC4xMjM0NTY3ODkwMTIzNDU2ICAtPiAwLjEyMzQ1NjggSW5leGFjdCBSb3VuZGVkCitkc2JhczA3MiB0b1NjaSAgMS4yMzQ1Njc4OTAxMjM0NTYgIC0+IDEuMjM0NTY4IEluZXhhY3QgUm91bmRlZAorZHNiYXMwNzMgdG9TY2kgIDEyLjM0NTY3ODkwMTIzNDU2ICAtPiAxMi4zNDU2OCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDc0IHRvU2NpICAxMjMuNDU2Nzg5MDEyMzQ1NiAgLT4gMTIzLjQ1NjggSW5leGFjdCBSb3VuZGVkCitkc2JhczA3NSB0b1NjaSAgMTIzNC41Njc4OTAxMjM0NTYgIC0+IDEyMzQuNTY4IEluZXhhY3QgUm91bmRlZAorZHNiYXMwNzYgdG9TY2kgIDEyMzQ1LjY3ODkwMTIzNDU2ICAtPiAxMjM0NS42OCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDc3IHRvU2NpICAxMjM0NTYuNzg5MDEyMzQ1NiAgLT4gMTIzNDU2LjggSW5leGFjdCBSb3VuZGVkCitkc2JhczA3OCB0b1NjaSAgMTIzNDU2Ny44OTAxMjM0NTYgIC0+IDEyMzQ1NjggIEluZXhhY3QgUm91bmRlZAorZHNiYXMwNzkgdG9TY2kgIDEyMzQ1Njc4LjkwMTIzNDU2ICAtPiAxLjIzNDU2OEUrNyBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDgwIHRvU2NpICAxMjM0NTY3ODkuMDEyMzQ1NiAgLT4gMS4yMzQ1NjhFKzggSW5leGFjdCBSb3VuZGVkCitkc2JhczA4MSB0b1NjaSAgMTIzNDU2Nzg5MC4xMjM0NTYgIC0+IDEuMjM0NTY4RSs5IEluZXhhY3QgUm91bmRlZAorZHNiYXMwODIgdG9TY2kgIDEyMzQ1Njc4OTAxLjIzNDU2ICAtPiAxLjIzNDU2OEUrMTAgSW5leGFjdCBSb3VuZGVkCitkc2JhczA4MyB0b1NjaSAgMTIzNDU2Nzg5MDEyLjM0NTYgIC0+IDEuMjM0NTY4RSsxMSBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDg0IHRvU2NpICAxMjM0NTY3ODkwMTIzLjQ1NiAgLT4gMS4yMzQ1NjhFKzEyIEluZXhhY3QgUm91bmRlZAorZHNiYXMwODUgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0LjU2ICAtPiAxLjIzNDU2OEUrMTMgSW5leGFjdCBSb3VuZGVkCitkc2JhczA4NiB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1LjYgIC0+IDEuMjM0NTY4RSsxNCBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMDg3IHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2LiAgLT4gMS4yMzQ1NjhFKzE1IEluZXhhY3QgUm91bmRlZAorZHNiYXMwODggdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYgICAtPiAxLjIzNDU2OEUrMTUgSW5leGFjdCBSb3VuZGVkCisKKy0tIE51bWJlcnMgd2l0aCBFCitkc2JhczEzMCB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJworZHNiYXMxMzEgdG9TY2kgIjAuMDAwRS0yIiAgLT4gJzAuMDAwMDAnCitkc2JhczEzMiB0b1NjaSAiMC4wMDBFLTMiICAtPiAnMC4wMDAwMDAnCitkc2JhczEzMyB0b1NjaSAiMC4wMDBFLTQiICAtPiAnMEUtNycKK2RzYmFzMTM0IHRvU2NpICIwLjAwRS0yIiAgIC0+ICcwLjAwMDAnCitkc2JhczEzNSB0b1NjaSAiMC4wMEUtMyIgICAtPiAnMC4wMDAwMCcKK2RzYmFzMTM2IHRvU2NpICIwLjAwRS00IiAgIC0+ICcwLjAwMDAwMCcKK2RzYmFzMTM3IHRvU2NpICIwLjAwRS01IiAgIC0+ICcwRS03JworZHNiYXMxMzggdG9TY2kgIiswRSs5IiAgICAgLT4gJzBFKzknCitkc2JhczEzOSB0b1NjaSAiLTBFKzkiICAgICAtPiAnLTBFKzknCitkc2JhczE0MCB0b1NjaSAiMUUrOSIgICAgICAtPiAnMUUrOScKK2RzYmFzMTQxIHRvU2NpICIxZSswOSIgICAgIC0+ICcxRSs5JworZHNiYXMxNDIgdG9TY2kgIjFFKzkwIiAgICAgLT4gJzFFKzkwJworZHNiYXMxNDMgdG9TY2kgIisxRSswMDkiICAgLT4gJzFFKzknCitkc2JhczE0NCB0b1NjaSAiMEUrOSIgICAgICAtPiAnMEUrOScKK2RzYmFzMTQ1IHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5JworZHNiYXMxNDYgdG9TY2kgIjFFKzA5IiAgICAgLT4gJzFFKzknCitkc2JhczE0NyB0b1NjaSAiMWUrOTAiICAgICAtPiAnMUUrOTAnCitkc2JhczE0OCB0b1NjaSAiMUUrMDA5IiAgICAtPiAnMUUrOScKK2RzYmFzMTQ5IHRvU2NpICIwMDBFKzkiICAgIC0+ICcwRSs5JworZHNiYXMxNTAgdG9TY2kgIjFFOSIgICAgICAgLT4gJzFFKzknCitkc2JhczE1MSB0b1NjaSAiMWUwOSIgICAgICAtPiAnMUUrOScKK2RzYmFzMTUyIHRvU2NpICIxRTkwIiAgICAgIC0+ICcxRSs5MCcKK2RzYmFzMTUzIHRvU2NpICIxRTAwOSIgICAgIC0+ICcxRSs5JworZHNiYXMxNTQgdG9TY2kgIjBFOSIgICAgICAgLT4gJzBFKzknCitkc2JhczE1NSB0b1NjaSAiMC4wMDBlKzAiICAtPiAnMC4wMDAnCitkc2JhczE1NiB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJworZHNiYXMxNTcgdG9TY2kgIjRFKzkiICAgICAgLT4gJzRFKzknCitkc2JhczE1OCB0b1NjaSAiNDRFKzkiICAgICAtPiAnNC40RSsxMCcKK2RzYmFzMTU5IHRvU2NpICIwLjczZS03IiAgIC0+ICc3LjNFLTgnCitkc2JhczE2MCB0b1NjaSAiMDBFKzkiICAgICAtPiAnMEUrOScKK2RzYmFzMTYxIHRvU2NpICIwMEUtOSIgICAgIC0+ICcwRS05JworZHNiYXMxNjIgdG9TY2kgIjEwRSs5IiAgICAgLT4gJzEuMEUrMTAnCitkc2JhczE2MyB0b1NjaSAiMTBFKzA5IiAgICAtPiAnMS4wRSsxMCcKK2RzYmFzMTY0IHRvU2NpICIxMGUrOTAiICAgIC0+ICcxLjBFKzkxJworZHNiYXMxNjUgdG9TY2kgIjEwRSswMDkiICAgLT4gJzEuMEUrMTAnCitkc2JhczE2NiB0b1NjaSAiMTAwZSs5IiAgICAtPiAnMS4wMEUrMTEnCitkc2JhczE2NyB0b1NjaSAiMTAwZSswOSIgICAtPiAnMS4wMEUrMTEnCitkc2JhczE2OCB0b1NjaSAiMTAwRSs5MCIgICAtPiAnMS4wMEUrOTInCitkc2JhczE2OSB0b1NjaSAiMTAwZSswMDkiICAtPiAnMS4wMEUrMTEnCisKK2RzYmFzMTcwIHRvU2NpICIxLjI2NSIgICAgIC0+ICcxLjI2NScKK2RzYmFzMTcxIHRvU2NpICIxLjI2NUUtMjAiIC0+ICcxLjI2NUUtMjAnCitkc2JhczE3MiB0b1NjaSAiMS4yNjVFLTgiICAtPiAnMS4yNjVFLTgnCitkc2JhczE3MyB0b1NjaSAiMS4yNjVFLTQiICAtPiAnMC4wMDAxMjY1JworZHNiYXMxNzQgdG9TY2kgIjEuMjY1RS0zIiAgLT4gJzAuMDAxMjY1JworZHNiYXMxNzUgdG9TY2kgIjEuMjY1RS0yIiAgLT4gJzAuMDEyNjUnCitkc2JhczE3NiB0b1NjaSAiMS4yNjVFLTEiICAtPiAnMC4xMjY1JworZHNiYXMxNzcgdG9TY2kgIjEuMjY1RS0wIiAgLT4gJzEuMjY1JworZHNiYXMxNzggdG9TY2kgIjEuMjY1RSsxIiAgLT4gJzEyLjY1JworZHNiYXMxNzkgdG9TY2kgIjEuMjY1RSsyIiAgLT4gJzEyNi41JworZHNiYXMxODAgdG9TY2kgIjEuMjY1RSszIiAgLT4gJzEyNjUnCitkc2JhczE4MSB0b1NjaSAiMS4yNjVFKzQiICAtPiAnMS4yNjVFKzQnCitkc2JhczE4MiB0b1NjaSAiMS4yNjVFKzgiICAtPiAnMS4yNjVFKzgnCitkc2JhczE4MyB0b1NjaSAiMS4yNjVFKzIwIiAtPiAnMS4yNjVFKzIwJworCitkc2JhczE5MCB0b1NjaSAiMTIuNjUiICAgICAtPiAnMTIuNjUnCitkc2JhczE5MSB0b1NjaSAiMTIuNjVFLTIwIiAtPiAnMS4yNjVFLTE5JworZHNiYXMxOTIgdG9TY2kgIjEyLjY1RS04IiAgLT4gJzEuMjY1RS03JworZHNiYXMxOTMgdG9TY2kgIjEyLjY1RS00IiAgLT4gJzAuMDAxMjY1JworZHNiYXMxOTQgdG9TY2kgIjEyLjY1RS0zIiAgLT4gJzAuMDEyNjUnCitkc2JhczE5NSB0b1NjaSAiMTIuNjVFLTIiICAtPiAnMC4xMjY1JworZHNiYXMxOTYgdG9TY2kgIjEyLjY1RS0xIiAgLT4gJzEuMjY1JworZHNiYXMxOTcgdG9TY2kgIjEyLjY1RS0wIiAgLT4gJzEyLjY1JworZHNiYXMxOTggdG9TY2kgIjEyLjY1RSsxIiAgLT4gJzEyNi41JworZHNiYXMxOTkgdG9TY2kgIjEyLjY1RSsyIiAgLT4gJzEyNjUnCitkc2JhczIwMCB0b1NjaSAiMTIuNjVFKzMiICAtPiAnMS4yNjVFKzQnCitkc2JhczIwMSB0b1NjaSAiMTIuNjVFKzQiICAtPiAnMS4yNjVFKzUnCitkc2JhczIwMiB0b1NjaSAiMTIuNjVFKzgiICAtPiAnMS4yNjVFKzknCitkc2JhczIwMyB0b1NjaSAiMTIuNjVFKzIwIiAtPiAnMS4yNjVFKzIxJworCitkc2JhczIxMCB0b1NjaSAiMTI2LjUiICAgICAtPiAnMTI2LjUnCitkc2JhczIxMSB0b1NjaSAiMTI2LjVFLTIwIiAtPiAnMS4yNjVFLTE4JworZHNiYXMyMTIgdG9TY2kgIjEyNi41RS04IiAgLT4gJzAuMDAwMDAxMjY1JworZHNiYXMyMTMgdG9TY2kgIjEyNi41RS00IiAgLT4gJzAuMDEyNjUnCitkc2JhczIxNCB0b1NjaSAiMTI2LjVFLTMiICAtPiAnMC4xMjY1JworZHNiYXMyMTUgdG9TY2kgIjEyNi41RS0yIiAgLT4gJzEuMjY1JworZHNiYXMyMTYgdG9TY2kgIjEyNi41RS0xIiAgLT4gJzEyLjY1JworZHNiYXMyMTcgdG9TY2kgIjEyNi41RS0wIiAgLT4gJzEyNi41JworZHNiYXMyMTggdG9TY2kgIjEyNi41RSsxIiAgLT4gJzEyNjUnCitkc2JhczIxOSB0b1NjaSAiMTI2LjVFKzIiICAtPiAnMS4yNjVFKzQnCitkc2JhczIyMCB0b1NjaSAiMTI2LjVFKzMiICAtPiAnMS4yNjVFKzUnCitkc2JhczIyMSB0b1NjaSAiMTI2LjVFKzQiICAtPiAnMS4yNjVFKzYnCitkc2JhczIyMiB0b1NjaSAiMTI2LjVFKzgiICAtPiAnMS4yNjVFKzEwJworZHNiYXMyMjMgdG9TY2kgIjEyNi41RSsyMCIgLT4gJzEuMjY1RSsyMicKKworZHNiYXMyMzAgdG9TY2kgIjEyNjUiICAgICAtPiAnMTI2NScKK2RzYmFzMjMxIHRvU2NpICIxMjY1RS0yMCIgLT4gJzEuMjY1RS0xNycKK2RzYmFzMjMyIHRvU2NpICIxMjY1RS04IiAgLT4gJzAuMDAwMDEyNjUnCitkc2JhczIzMyB0b1NjaSAiMTI2NUUtNCIgIC0+ICcwLjEyNjUnCitkc2JhczIzNCB0b1NjaSAiMTI2NUUtMyIgIC0+ICcxLjI2NScKK2RzYmFzMjM1IHRvU2NpICIxMjY1RS0yIiAgLT4gJzEyLjY1JworZHNiYXMyMzYgdG9TY2kgIjEyNjVFLTEiICAtPiAnMTI2LjUnCitkc2JhczIzNyB0b1NjaSAiMTI2NUUtMCIgIC0+ICcxMjY1JworZHNiYXMyMzggdG9TY2kgIjEyNjVFKzEiICAtPiAnMS4yNjVFKzQnCitkc2JhczIzOSB0b1NjaSAiMTI2NUUrMiIgIC0+ICcxLjI2NUUrNScKK2RzYmFzMjQwIHRvU2NpICIxMjY1RSszIiAgLT4gJzEuMjY1RSs2JworZHNiYXMyNDEgdG9TY2kgIjEyNjVFKzQiICAtPiAnMS4yNjVFKzcnCitkc2JhczI0MiB0b1NjaSAiMTI2NUUrOCIgIC0+ICcxLjI2NUUrMTEnCitkc2JhczI0MyB0b1NjaSAiMTI2NUUrMjAiIC0+ICcxLjI2NUUrMjMnCisKK2RzYmFzMjUwIHRvU2NpICIwLjEyNjUiICAgICAtPiAnMC4xMjY1JworZHNiYXMyNTEgdG9TY2kgIjAuMTI2NUUtMjAiIC0+ICcxLjI2NUUtMjEnCitkc2JhczI1MiB0b1NjaSAiMC4xMjY1RS04IiAgLT4gJzEuMjY1RS05JworZHNiYXMyNTMgdG9TY2kgIjAuMTI2NUUtNCIgIC0+ICcwLjAwMDAxMjY1JworZHNiYXMyNTQgdG9TY2kgIjAuMTI2NUUtMyIgIC0+ICcwLjAwMDEyNjUnCitkc2JhczI1NSB0b1NjaSAiMC4xMjY1RS0yIiAgLT4gJzAuMDAxMjY1JworZHNiYXMyNTYgdG9TY2kgIjAuMTI2NUUtMSIgIC0+ICcwLjAxMjY1JworZHNiYXMyNTcgdG9TY2kgIjAuMTI2NUUtMCIgIC0+ICcwLjEyNjUnCitkc2JhczI1OCB0b1NjaSAiMC4xMjY1RSsxIiAgLT4gJzEuMjY1JworZHNiYXMyNTkgdG9TY2kgIjAuMTI2NUUrMiIgIC0+ICcxMi42NScKK2RzYmFzMjYwIHRvU2NpICIwLjEyNjVFKzMiICAtPiAnMTI2LjUnCitkc2JhczI2MSB0b1NjaSAiMC4xMjY1RSs0IiAgLT4gJzEyNjUnCitkc2JhczI2MiB0b1NjaSAiMC4xMjY1RSs4IiAgLT4gJzEuMjY1RSs3JworZHNiYXMyNjMgdG9TY2kgIjAuMTI2NUUrMjAiIC0+ICcxLjI2NUUrMTknCisKKy0tIHNvbWUgbW9yZSBuZWdhdGl2ZSB6ZXJvcyBbc3lzdGVtYXRpYyB0ZXN0cyBiZWxvd10KK2RzYmFzMjkwIHRvU2NpICItMC4wMDBFLTEiICAtPiAnLTAuMDAwMCcKK2RzYmFzMjkxIHRvU2NpICItMC4wMDBFLTIiICAtPiAnLTAuMDAwMDAnCitkc2JhczI5MiB0b1NjaSAiLTAuMDAwRS0zIiAgLT4gJy0wLjAwMDAwMCcKK2RzYmFzMjkzIHRvU2NpICItMC4wMDBFLTQiICAtPiAnLTBFLTcnCitkc2JhczI5NCB0b1NjaSAiLTAuMDBFLTIiICAgLT4gJy0wLjAwMDAnCitkc2JhczI5NSB0b1NjaSAiLTAuMDBFLTMiICAgLT4gJy0wLjAwMDAwJworZHNiYXMyOTYgdG9TY2kgIi0wLjBFLTIiICAgIC0+ICctMC4wMDAnCitkc2JhczI5NyB0b1NjaSAiLTAuMEUtMyIgICAgLT4gJy0wLjAwMDAnCitkc2JhczI5OCB0b1NjaSAiLTBFLTIiICAgICAgLT4gJy0wLjAwJworZHNiYXMyOTkgdG9TY2kgIi0wRS0zIiAgICAgIC0+ICctMC4wMDAnCisKKy0tIEVuZ2luZWVyaW5nIG5vdGF0aW9uIHRlc3RzCitkc2JhczMwMSAgdG9TY2kgMTBlMTIgIC0+IDEuMEUrMTMKK2RzYmFzMzAyICB0b0VuZyAxMGUxMiAgLT4gMTBFKzEyCitkc2JhczMwMyAgdG9TY2kgMTBlMTEgIC0+IDEuMEUrMTIKK2RzYmFzMzA0ICB0b0VuZyAxMGUxMSAgLT4gMS4wRSsxMgorZHNiYXMzMDUgIHRvU2NpIDEwZTEwICAtPiAxLjBFKzExCitkc2JhczMwNiAgdG9FbmcgMTBlMTAgIC0+IDEwMEUrOQorZHNiYXMzMDcgIHRvU2NpIDEwZTkgICAtPiAxLjBFKzEwCitkc2JhczMwOCAgdG9FbmcgMTBlOSAgIC0+IDEwRSs5Citkc2JhczMwOSAgdG9TY2kgMTBlOCAgIC0+IDEuMEUrOQorZHNiYXMzMTAgIHRvRW5nIDEwZTggICAtPiAxLjBFKzkKK2RzYmFzMzExICB0b1NjaSAxMGU3ICAgLT4gMS4wRSs4Citkc2JhczMxMiAgdG9FbmcgMTBlNyAgIC0+IDEwMEUrNgorZHNiYXMzMTMgIHRvU2NpIDEwZTYgICAtPiAxLjBFKzcKK2RzYmFzMzE0ICB0b0VuZyAxMGU2ICAgLT4gMTBFKzYKK2RzYmFzMzE1ICB0b1NjaSAxMGU1ICAgLT4gMS4wRSs2Citkc2JhczMxNiAgdG9FbmcgMTBlNSAgIC0+IDEuMEUrNgorZHNiYXMzMTcgIHRvU2NpIDEwZTQgICAtPiAxLjBFKzUKK2RzYmFzMzE4ICB0b0VuZyAxMGU0ICAgLT4gMTAwRSszCitkc2JhczMxOSAgdG9TY2kgMTBlMyAgIC0+IDEuMEUrNAorZHNiYXMzMjAgIHRvRW5nIDEwZTMgICAtPiAxMEUrMworZHNiYXMzMjEgIHRvU2NpIDEwZTIgICAtPiAxLjBFKzMKK2RzYmFzMzIyICB0b0VuZyAxMGUyICAgLT4gMS4wRSszCitkc2JhczMyMyAgdG9TY2kgMTBlMSAgIC0+IDEuMEUrMgorZHNiYXMzMjQgIHRvRW5nIDEwZTEgICAtPiAxMDAKK2RzYmFzMzI1ICB0b1NjaSAxMGUwICAgLT4gMTAKK2RzYmFzMzI2ICB0b0VuZyAxMGUwICAgLT4gMTAKK2RzYmFzMzI3ICB0b1NjaSAxMGUtMSAgLT4gMS4wCitkc2JhczMyOCAgdG9FbmcgMTBlLTEgIC0+IDEuMAorZHNiYXMzMjkgIHRvU2NpIDEwZS0yICAtPiAwLjEwCitkc2JhczMzMCAgdG9FbmcgMTBlLTIgIC0+IDAuMTAKK2RzYmFzMzMxICB0b1NjaSAxMGUtMyAgLT4gMC4wMTAKK2RzYmFzMzMyICB0b0VuZyAxMGUtMyAgLT4gMC4wMTAKK2RzYmFzMzMzICB0b1NjaSAxMGUtNCAgLT4gMC4wMDEwCitkc2JhczMzNCAgdG9FbmcgMTBlLTQgIC0+IDAuMDAxMAorZHNiYXMzMzUgIHRvU2NpIDEwZS01ICAtPiAwLjAwMDEwCitkc2JhczMzNiAgdG9FbmcgMTBlLTUgIC0+IDAuMDAwMTAKK2RzYmFzMzM3ICB0b1NjaSAxMGUtNiAgLT4gMC4wMDAwMTAKK2RzYmFzMzM4ICB0b0VuZyAxMGUtNiAgLT4gMC4wMDAwMTAKK2RzYmFzMzM5ICB0b1NjaSAxMGUtNyAgLT4gMC4wMDAwMDEwCitkc2JhczM0MCAgdG9FbmcgMTBlLTcgIC0+IDAuMDAwMDAxMAorZHNiYXMzNDEgIHRvU2NpIDEwZS04ICAtPiAxLjBFLTcKK2RzYmFzMzQyICB0b0VuZyAxMGUtOCAgLT4gMTAwRS05Citkc2JhczM0MyAgdG9TY2kgMTBlLTkgIC0+IDEuMEUtOAorZHNiYXMzNDQgIHRvRW5nIDEwZS05ICAtPiAxMEUtOQorZHNiYXMzNDUgIHRvU2NpIDEwZS0xMCAtPiAxLjBFLTkKK2RzYmFzMzQ2ICB0b0VuZyAxMGUtMTAgLT4gMS4wRS05Citkc2JhczM0NyAgdG9TY2kgMTBlLTExIC0+IDEuMEUtMTAKK2RzYmFzMzQ4ICB0b0VuZyAxMGUtMTEgLT4gMTAwRS0xMgorZHNiYXMzNDkgIHRvU2NpIDEwZS0xMiAtPiAxLjBFLTExCitkc2JhczM1MCAgdG9FbmcgMTBlLTEyIC0+IDEwRS0xMgorZHNiYXMzNTEgIHRvU2NpIDEwZS0xMyAtPiAxLjBFLTEyCitkc2JhczM1MiAgdG9FbmcgMTBlLTEzIC0+IDEuMEUtMTIKKworZHNiYXMzNjEgIHRvU2NpIDdFMTIgIC0+IDdFKzEyCitkc2JhczM2MiAgdG9FbmcgN0UxMiAgLT4gN0UrMTIKK2RzYmFzMzYzICB0b1NjaSA3RTExICAtPiA3RSsxMQorZHNiYXMzNjQgIHRvRW5nIDdFMTEgIC0+IDcwMEUrOQorZHNiYXMzNjUgIHRvU2NpIDdFMTAgIC0+IDdFKzEwCitkc2JhczM2NiAgdG9FbmcgN0UxMCAgLT4gNzBFKzkKK2RzYmFzMzY3ICB0b1NjaSA3RTkgICAtPiA3RSs5Citkc2JhczM2OCAgdG9FbmcgN0U5ICAgLT4gN0UrOQorZHNiYXMzNjkgIHRvU2NpIDdFOCAgIC0+IDdFKzgKK2RzYmFzMzcwICB0b0VuZyA3RTggICAtPiA3MDBFKzYKK2RzYmFzMzcxICB0b1NjaSA3RTcgICAtPiA3RSs3Citkc2JhczM3MiAgdG9FbmcgN0U3ICAgLT4gNzBFKzYKK2RzYmFzMzczICB0b1NjaSA3RTYgICAtPiA3RSs2Citkc2JhczM3NCAgdG9FbmcgN0U2ICAgLT4gN0UrNgorZHNiYXMzNzUgIHRvU2NpIDdFNSAgIC0+IDdFKzUKK2RzYmFzMzc2ICB0b0VuZyA3RTUgICAtPiA3MDBFKzMKK2RzYmFzMzc3ICB0b1NjaSA3RTQgICAtPiA3RSs0Citkc2JhczM3OCAgdG9FbmcgN0U0ICAgLT4gNzBFKzMKK2RzYmFzMzc5ICB0b1NjaSA3RTMgICAtPiA3RSszCitkc2JhczM4MCAgdG9FbmcgN0UzICAgLT4gN0UrMworZHNiYXMzODEgIHRvU2NpIDdFMiAgIC0+IDdFKzIKK2RzYmFzMzgyICB0b0VuZyA3RTIgICAtPiA3MDAKK2RzYmFzMzgzICB0b1NjaSA3RTEgICAtPiA3RSsxCitkc2JhczM4NCAgdG9FbmcgN0UxICAgLT4gNzAKK2RzYmFzMzg1ICB0b1NjaSA3RTAgICAtPiA3Citkc2JhczM4NiAgdG9FbmcgN0UwICAgLT4gNworZHNiYXMzODcgIHRvU2NpIDdFLTEgIC0+IDAuNworZHNiYXMzODggIHRvRW5nIDdFLTEgIC0+IDAuNworZHNiYXMzODkgIHRvU2NpIDdFLTIgIC0+IDAuMDcKK2RzYmFzMzkwICB0b0VuZyA3RS0yICAtPiAwLjA3Citkc2JhczM5MSAgdG9TY2kgN0UtMyAgLT4gMC4wMDcKK2RzYmFzMzkyICB0b0VuZyA3RS0zICAtPiAwLjAwNworZHNiYXMzOTMgIHRvU2NpIDdFLTQgIC0+IDAuMDAwNworZHNiYXMzOTQgIHRvRW5nIDdFLTQgIC0+IDAuMDAwNworZHNiYXMzOTUgIHRvU2NpIDdFLTUgIC0+IDAuMDAwMDcKK2RzYmFzMzk2ICB0b0VuZyA3RS01ICAtPiAwLjAwMDA3Citkc2JhczM5NyAgdG9TY2kgN0UtNiAgLT4gMC4wMDAwMDcKK2RzYmFzMzk4ICB0b0VuZyA3RS02ICAtPiAwLjAwMDAwNworZHNiYXMzOTkgIHRvU2NpIDdFLTcgIC0+IDdFLTcKK2RzYmFzNDAwICB0b0VuZyA3RS03ICAtPiA3MDBFLTkKK2RzYmFzNDAxICB0b1NjaSA3RS04ICAtPiA3RS04Citkc2JhczQwMiAgdG9FbmcgN0UtOCAgLT4gNzBFLTkKK2RzYmFzNDAzICB0b1NjaSA3RS05ICAtPiA3RS05Citkc2JhczQwNCAgdG9FbmcgN0UtOSAgLT4gN0UtOQorZHNiYXM0MDUgIHRvU2NpIDdFLTEwIC0+IDdFLTEwCitkc2JhczQwNiAgdG9FbmcgN0UtMTAgLT4gNzAwRS0xMgorZHNiYXM0MDcgIHRvU2NpIDdFLTExIC0+IDdFLTExCitkc2JhczQwOCAgdG9FbmcgN0UtMTEgLT4gNzBFLTEyCitkc2JhczQwOSAgdG9TY2kgN0UtMTIgLT4gN0UtMTIKK2RzYmFzNDEwICB0b0VuZyA3RS0xMiAtPiA3RS0xMgorZHNiYXM0MTEgIHRvU2NpIDdFLTEzIC0+IDdFLTEzCitkc2JhczQxMiAgdG9FbmcgN0UtMTMgLT4gNzAwRS0xNQorCistLSBFeGFjdHMgcmVtYWluIGV4YWN0IHVwIHRvIHByZWNpc2lvbiAuLgorZHNiYXM0MjAgIHRvU2NpICAgIDEwMCAtPiAxMDAKK2RzYmFzNDIyICB0b1NjaSAgIDEwMDAgLT4gMTAwMAorZHNiYXM0MjQgIHRvU2NpICA5OTkuOSAtPiAgOTk5LjkKK2RzYmFzNDI2ICB0b1NjaSAxMDAwLjAgLT4gMTAwMC4wCitkc2JhczQyOCAgdG9TY2kgMTAwMC4xIC0+IDEwMDAuMQorZHNiYXM0MzAgIHRvU2NpIDEwMDAwIC0+IDEwMDAwCitkc2JhczQzMiAgdG9TY2kgMTAwMCAgICAgICAgLT4gMTAwMAorZHNiYXM0MzQgIHRvU2NpIDEwMDAwICAgICAgIC0+IDEwMDAwCitkc2JhczQzNiAgdG9TY2kgMTAwMDAwICAgICAgLT4gMTAwMDAwCitkc2JhczQzOCAgdG9TY2kgMTAwMDAwMCAgICAgLT4gMTAwMDAwMAorZHNiYXM0NDAgIHRvU2NpIDEwMDAwMDAwICAgIC0+IDEuMDAwMDAwRSs3ICAgUm91bmRlZAorZHNiYXM0NDIgIHRvU2NpIDEwMDAwMDAwICAgIC0+IDEuMDAwMDAwRSs3ICAgUm91bmRlZAorZHNiYXM0NDQgIHRvU2NpIDEwMDAwMDAzICAgIC0+IDEuMDAwMDAwRSs3ICAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ0NiAgdG9TY2kgMTAwMDAwMDUgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDQ4ICB0b1NjaSAxMDAwMDAwNTAgICAtPiAxLjAwMDAwMEUrOCAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NTAgIHRvU2NpIDEwMDAwMDA5ICAgIC0+IDEuMDAwMDAxRSs3ICAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ1MiAgdG9TY2kgMTAwMDAwMDAwICAgLT4gMS4wMDAwMDBFKzggICBSb3VuZGVkCitkc2JhczQ1NCAgdG9TY2kgMTAwMDAwMDAzICAgLT4gMS4wMDAwMDBFKzggICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDU2ICB0b1NjaSAxMDAwMDAwMDUgICAtPiAxLjAwMDAwMEUrOCAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NTggIHRvU2NpIDEwMDAwMDAwOSAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ2MCAgdG9TY2kgMTAwMDAwMDAwMCAgLT4gMS4wMDAwMDBFKzkgICBSb3VuZGVkCitkc2JhczQ2MiAgdG9TY2kgMTAwMDAwMDMwMCAgLT4gMS4wMDAwMDBFKzkgICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDY0ICB0b1NjaSAxMDAwMDAwNTAwICAtPiAxLjAwMDAwMEUrOSAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NjYgIHRvU2NpIDEwMDAwMDA5MDAgIC0+IDEuMDAwMDAxRSs5ICAgUm91bmRlZCBJbmV4YWN0Citkc2JhczQ2OCAgdG9TY2kgMTAwMDAwMDAwMDAgLT4gMS4wMDAwMDBFKzEwICBSb3VuZGVkCitkc2JhczQ3MCAgdG9TY2kgMTAwMDAwMDMwMDAgLT4gMS4wMDAwMDBFKzEwICBSb3VuZGVkIEluZXhhY3QKK2RzYmFzNDcyICB0b1NjaSAxMDAwMDAwNTAwMCAtPiAxLjAwMDAwMEUrMTAgIFJvdW5kZWQgSW5leGFjdAorZHNiYXM0NzQgIHRvU2NpIDEwMDAwMDA5MDAwIC0+IDEuMDAwMDAxRSsxMCAgUm91bmRlZCBJbmV4YWN0CisKKy0tIGNoZWNrIHJvdW5kaW5nIG1vZGVzIGhlZWRlZAorcm91bmRpbmc6ICBjZWlsaW5nCitkc2JzcjQwMSAgdG9TY2kgIDEuMTEyMzQ1MCAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNDAyICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQwMyAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MDQgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgdXAKK2RzYnNyNDA1ICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZAorZHNic3I0MDYgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDA3ICB0b1NjaSAgMS4xMTIzNDU1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQwOCAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBmbG9vcgorZHNic3I0MTAgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjQxMSAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MTIgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDEzICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZG93bgorZHNic3I0MTUgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjQxNiAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MTcgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDE4ICB0b1NjaSAgMS4xMTIzNDY1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQxOSAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RzYnNyNDIxICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZAorZHNic3I0MjIgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDIzICB0b1NjaSAgMS4xMTIzNDU1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQyNCAgdG9TY2kgIDEuMTEyMzQ2NTAgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MjUgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZG93bgorZHNic3I0MjYgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjQyNyAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MjggIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDI5ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfdXAKK2RzYnNyNDMxICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZAorZHNic3I0MzIgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNDMzICB0b1NjaSAgMS4xMTIzNDU1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjQzNCAgdG9TY2kgIDEuMTEyMzQ2NTAgICAtPiAgMS4xMTIzNDcgIFJvdW5kZWQgSW5leGFjdAorZHNic3I0MzUgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKKy0tIG5lZ2F0aXZlcworcm91bmRpbmc6ICBjZWlsaW5nCitkc2JzcjUwMSAgdG9TY2kgLTEuMTEyMzQ1MCAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQKK2RzYnNyNTAyICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUwMyAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MDQgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgdXAKK2RzYnNyNTA1ICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZAorZHNic3I1MDYgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTA3ICB0b1NjaSAtMS4xMTIzNDU1MCAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUwOCAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBmbG9vcgorZHNic3I1MTAgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjUxMSAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MTIgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTEzICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfZG93bgorZHNic3I1MTUgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjUxNiAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MTcgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTE4ICB0b1NjaSAtMS4xMTIzNDY1MCAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUxOSAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICBoYWxmX2V2ZW4KK2RzYnNyNTIxICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZAorZHNic3I1MjIgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTIzICB0b1NjaSAtMS4xMTIzNDU1MCAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUyNCAgdG9TY2kgLTEuMTEyMzQ2NTAgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MjUgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgZG93bgorZHNic3I1MjYgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkCitkc2JzcjUyNyAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MjggIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTI5ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Cityb3VuZGluZzogIGhhbGZfdXAKK2RzYnNyNTMxICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZAorZHNic3I1MzIgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKK2RzYnNyNTMzICB0b1NjaSAtMS4xMTIzNDU1MCAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Citkc2JzcjUzNCAgdG9TY2kgLTEuMTEyMzQ2NTAgICAtPiAtMS4xMTIzNDcgIFJvdW5kZWQgSW5leGFjdAorZHNic3I1MzUgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBUaGUgJ2JhZGRpZXMnIHRlc3RzIGZyb20gRGlhZ0JpZ0RlY2ltYWwsIHBsdXMgc29tZSBuZXcgb25lcworZHNiYXM1MDAgdG9TY2kgJzEuLjInICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUwMSB0b1NjaSAnLicgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTAyIHRvU2NpICcuLicgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MDMgdG9TY2kgJysrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUwNCB0b1NjaSAnLS0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTA1IHRvU2NpICctKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MDYgdG9TY2kgJystMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUwNyB0b1NjaSAnMTJlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTA4IHRvU2NpICcxMmUrKycgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MDkgdG9TY2kgJzEyZjQnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUxMCB0b1NjaSAnICsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTExIHRvU2NpICcrIDEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MTIgdG9TY2kgJzEyICcgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUxMyB0b1NjaSAnICsgMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTE0IHRvU2NpICcgLSAxICcgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MTUgdG9TY2kgJ3gnICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUxNiB0b1NjaSAnLTEtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTE3IHRvU2NpICcxMi0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MTggdG9TY2kgJzMrJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUxOSB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTIwIHRvU2NpICcxZS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MjEgdG9TY2kgJzdlOTk5OTlhJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUyMiB0b1NjaSAnN2UxMjM1Njc4OTB4JyAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTIzIHRvU2NpICc3ZTEyMzU2Nzg5MDEyeCcgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MjQgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUyNSB0b1NjaSAnZTEwMCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTI2IHRvU2NpICdcdTBlNWEnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MjcgdG9TY2kgJ1x1MGI2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUyOCB0b1NjaSAnMTIzLDY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTI5IHRvU2NpICcxLjM0LjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MzAgdG9TY2kgJy4xMjMuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUzMSB0b1NjaSAnMDEuMzUuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTMyIHRvU2NpICcwMS4zNS0nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MzMgdG9TY2kgJzAwMDAuLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUzNCB0b1NjaSAnLjAwMDAuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTM1IHRvU2NpICcwMC4uMDAnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MzYgdG9TY2kgJzExMWUqMTIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczUzNyB0b1NjaSAnMTExZTEyMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTM4IHRvU2NpICcxMTFlKzEyKycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1MzkgdG9TY2kgJzExMWUxLTMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU0MCB0b1NjaSAnMTExZTEqMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTQxIHRvU2NpICcxMTFlMWUrMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NDIgdG9TY2kgJzFlMS4wJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU0MyB0b1NjaSAnMWUxMjNlJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTQ0IHRvU2NpICd0ZW4nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NDUgdG9TY2kgJ09ORScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU0NiB0b1NjaSAnMWUuMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTQ3IHRvU2NpICcxZTEuJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NDggdG9TY2kgJzFlZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU0OSB0b1NjaSAnZSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTUwIHRvU2NpICcxLjIzLjQnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NTEgdG9TY2kgJzEuMi4xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU1MiB0b1NjaSAnMUUrMS4yJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTUzIHRvU2NpICcxRSsxLjIuMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NTQgdG9TY2kgJzFFKysxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU1NSB0b1NjaSAnMUUtLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTU2IHRvU2NpICcxRSstMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NTcgdG9TY2kgJzFFLSsxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU1OCB0b1NjaSAnMUUnJzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTU5IHRvU2NpICIxRSIiMSIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NjAgdG9TY2kgIjFFIiIiIiIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CistLSBOZWFyLXNwZWNpYWxzCitkc2JhczU2MSB0b1NjaSAicU5hTiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTYyIHRvU2NpICJOYU5xIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NjMgdG9TY2kgIk5hTnMiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU2NCB0b1NjaSAiSW5maSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTY1IHRvU2NpICJJbmZpbiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NjYgdG9TY2kgIkluZmluaSIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU2NyB0b1NjaSAiSW5maW5pdCIgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTY4IHRvU2NpICItSW5maW5pdCIgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NjkgdG9TY2kgIjBJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU3MCB0b1NjaSAiOUluZiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTcxIHRvU2NpICItMEluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NzIgdG9TY2kgIi05SW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU3MyB0b1NjaSAiLXNOYSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNTc0IHRvU2NpICJ4TmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NzUgdG9TY2kgIjBzTmFOIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKKy0tIHNvbWUgYmFkZGllcyB3aXRoIGRvdHMgYW5kIEVzIGFuZCBkb3RzIGFuZCBzcGVjaWFscworZHNiYXM1NzYgdG9TY2kgICdlKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NzcgdG9TY2kgICcuZSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NzggdG9TY2kgICcrLmUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1NzkgdG9TY2kgICctLmUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1ODAgdG9TY2kgICctLmUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1ODEgdG9TY2kgICdFKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1ODIgdG9TY2kgICcuRSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1ODMgdG9TY2kgICcrLkUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1ODQgdG9TY2kgICctLkUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM1ODUgdG9TY2kgICctLkUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAorCitkc2JhczU4NiB0b1NjaSAgJy5OYU4nICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4NyB0b1NjaSAgJy0uTmFOJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4OCB0b1NjaSAgJysuc05hTicgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU4OSB0b1NjaSAgJysuSW5mJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczU5MCB0b1NjaSAgJy5JbmZpbml0eScgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4CisKKy0tIFplcm9zCitkc2JhczYwMSB0b1NjaSAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05Citkc2JhczYwMiB0b1NjaSAwLjAwMDAwMDAwICAgICAgICAtPiAwRS04Citkc2JhczYwMyB0b1NjaSAwLjAwMDAwMDAgICAgICAgICAtPiAwRS03Citkc2JhczYwNCB0b1NjaSAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMAorZHNiYXM2MDUgdG9TY2kgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMAorZHNiYXM2MDYgdG9TY2kgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwCitkc2JhczYwNyB0b1NjaSAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMAorZHNiYXM2MDggdG9TY2kgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMAorZHNiYXM2MDkgdG9TY2kgMC4wICAgICAgICAgICAgICAgLT4gMC4wCitkc2JhczYxMCB0b1NjaSAgLjAgICAgICAgICAgICAgICAtPiAwLjAKK2RzYmFzNjExIHRvU2NpIDAuICAgICAgICAgICAgICAgIC0+IDAKK2RzYmFzNjEyIHRvU2NpIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjAKK2RzYmFzNjEzIHRvU2NpIC0wLiAgICAgICAgICAgICAgIC0+IC0wCitkc2JhczYxNCB0b1NjaSAtMC4wICAgICAgICAgICAgICAtPiAtMC4wCitkc2JhczYxNSB0b1NjaSAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMAorZHNiYXM2MTYgdG9TY2kgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwCitkc2JhczYxNyB0b1NjaSAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwCitkc2JhczYxOCB0b1NjaSAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMAorZHNiYXM2MTkgdG9TY2kgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwCitkc2JhczYyMCB0b1NjaSAtMC4wMDAwMDAwICAgICAgICAtPiAtMEUtNworZHNiYXM2MjEgdG9TY2kgLTAuMDAwMDAwMDAgICAgICAgLT4gLTBFLTgKK2RzYmFzNjIyIHRvU2NpIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05CisKK2RzYmFzNjMwIHRvU2NpICAwLjAwRSswICAgICAgICAgIC0+IDAuMDAKK2RzYmFzNjMxIHRvU2NpICAwLjAwRSsxICAgICAgICAgIC0+IDAuMAorZHNiYXM2MzIgdG9TY2kgIDAuMDBFKzIgICAgICAgICAgLT4gMAorZHNiYXM2MzMgdG9TY2kgIDAuMDBFKzMgICAgICAgICAgLT4gMEUrMQorZHNiYXM2MzQgdG9TY2kgIDAuMDBFKzQgICAgICAgICAgLT4gMEUrMgorZHNiYXM2MzUgdG9TY2kgIDAuMDBFKzUgICAgICAgICAgLT4gMEUrMworZHNiYXM2MzYgdG9TY2kgIDAuMDBFKzYgICAgICAgICAgLT4gMEUrNAorZHNiYXM2MzcgdG9TY2kgIDAuMDBFKzcgICAgICAgICAgLT4gMEUrNQorZHNiYXM2MzggdG9TY2kgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNgorZHNiYXM2MzkgdG9TY2kgIDAuMDBFKzkgICAgICAgICAgLT4gMEUrNworCitkc2JhczY0MCB0b1NjaSAgMC4wRSswICAgICAgICAgICAtPiAwLjAKK2RzYmFzNjQxIHRvU2NpICAwLjBFKzEgICAgICAgICAgIC0+IDAKK2RzYmFzNjQyIHRvU2NpICAwLjBFKzIgICAgICAgICAgIC0+IDBFKzEKK2RzYmFzNjQzIHRvU2NpICAwLjBFKzMgICAgICAgICAgIC0+IDBFKzIKK2RzYmFzNjQ0IHRvU2NpICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMKK2RzYmFzNjQ1IHRvU2NpICAwLjBFKzUgICAgICAgICAgIC0+IDBFKzQKK2RzYmFzNjQ2IHRvU2NpICAwLjBFKzYgICAgICAgICAgIC0+IDBFKzUKK2RzYmFzNjQ3IHRvU2NpICAwLjBFKzcgICAgICAgICAgIC0+IDBFKzYKK2RzYmFzNjQ4IHRvU2NpICAwLjBFKzggICAgICAgICAgIC0+IDBFKzcKK2RzYmFzNjQ5IHRvU2NpICAwLjBFKzkgICAgICAgICAgIC0+IDBFKzgKKworZHNiYXM2NTAgdG9TY2kgIDBFKzAgICAgICAgICAgICAgLT4gMAorZHNiYXM2NTEgdG9TY2kgIDBFKzEgICAgICAgICAgICAgLT4gMEUrMQorZHNiYXM2NTIgdG9TY2kgIDBFKzIgICAgICAgICAgICAgLT4gMEUrMgorZHNiYXM2NTMgdG9TY2kgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMworZHNiYXM2NTQgdG9TY2kgIDBFKzQgICAgICAgICAgICAgLT4gMEUrNAorZHNiYXM2NTUgdG9TY2kgIDBFKzUgICAgICAgICAgICAgLT4gMEUrNQorZHNiYXM2NTYgdG9TY2kgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNgorZHNiYXM2NTcgdG9TY2kgIDBFKzcgICAgICAgICAgICAgLT4gMEUrNworZHNiYXM2NTggdG9TY2kgIDBFKzggICAgICAgICAgICAgLT4gMEUrOAorZHNiYXM2NTkgdG9TY2kgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQorCitkc2JhczY2MCB0b1NjaSAgMC4wRS0wICAgICAgICAgICAtPiAwLjAKK2RzYmFzNjYxIHRvU2NpICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDAKK2RzYmFzNjYyIHRvU2NpICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwCitkc2JhczY2MyB0b1NjaSAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDAKK2RzYmFzNjY0IHRvU2NpICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDAKK2RzYmFzNjY1IHRvU2NpICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwCitkc2JhczY2NiB0b1NjaSAgMC4wRS02ICAgICAgICAgICAtPiAwRS03Citkc2JhczY2NyB0b1NjaSAgMC4wRS03ICAgICAgICAgICAtPiAwRS04Citkc2JhczY2OCB0b1NjaSAgMC4wRS04ICAgICAgICAgICAtPiAwRS05Citkc2JhczY2OSB0b1NjaSAgMC4wRS05ICAgICAgICAgICAtPiAwRS0xMAorCitkc2JhczY3MCB0b1NjaSAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwCitkc2JhczY3MSB0b1NjaSAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMAorZHNiYXM2NzIgdG9TY2kgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwCitkc2JhczY3MyB0b1NjaSAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwCitkc2JhczY3NCB0b1NjaSAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMAorZHNiYXM2NzUgdG9TY2kgIDAuMDBFLTUgICAgICAgICAgLT4gMEUtNworZHNiYXM2NzYgdG9TY2kgIDAuMDBFLTYgICAgICAgICAgLT4gMEUtOAorZHNiYXM2NzcgdG9TY2kgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQorZHNiYXM2NzggdG9TY2kgIDAuMDBFLTggICAgICAgICAgLT4gMEUtMTAKK2RzYmFzNjc5IHRvU2NpICAwLjAwRS05ICAgICAgICAgIC0+IDBFLTExCisKK2RzYmFzNjgwIHRvU2NpICAwMDAwMDAuICAgICAgICAgIC0+ICAwCitkc2JhczY4MSB0b1NjaSAgIDAwMDAwLiAgICAgICAgICAtPiAgMAorZHNiYXM2ODIgdG9TY2kgICAgMDAwMC4gICAgICAgICAgLT4gIDAKK2RzYmFzNjgzIHRvU2NpICAgICAwMDAuICAgICAgICAgIC0+ICAwCitkc2JhczY4NCB0b1NjaSAgICAgIDAwLiAgICAgICAgICAtPiAgMAorZHNiYXM2ODUgdG9TY2kgICAgICAgMC4gICAgICAgICAgLT4gIDAKK2RzYmFzNjg2IHRvU2NpICArMDAwMDAuICAgICAgICAgIC0+ICAwCitkc2JhczY4NyB0b1NjaSAgLTAwMDAwLiAgICAgICAgICAtPiAtMAorZHNiYXM2ODggdG9TY2kgICswLiAgICAgICAgICAgICAgLT4gIDAKK2RzYmFzNjg5IHRvU2NpICAtMC4gICAgICAgICAgICAgIC0+IC0wCisKKy0tIFNwZWNpYWxzCitkc2JhczcwMCB0b1NjaSAiTmFOIiAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzNzAxIHRvU2NpICJuYW4iICAgICAgICAgICAgIC0+IE5hTgorZHNiYXM3MDIgdG9TY2kgIm5BbiIgICAgICAgICAgICAgLT4gTmFOCitkc2JhczcwMyB0b1NjaSAiTkFOIiAgICAgICAgICAgICAtPiBOYU4KK2RzYmFzNzA0IHRvU2NpICIrTmFOIiAgICAgICAgICAgIC0+IE5hTgorZHNiYXM3MDUgdG9TY2kgIituYW4iICAgICAgICAgICAgLT4gTmFOCitkc2JhczcwNiB0b1NjaSAiK25BbiIgICAgICAgICAgICAtPiBOYU4KK2RzYmFzNzA3IHRvU2NpICIrTkFOIiAgICAgICAgICAgIC0+IE5hTgorZHNiYXM3MDggdG9TY2kgIi1OYU4iICAgICAgICAgICAgLT4gLU5hTgorZHNiYXM3MDkgdG9TY2kgIi1uYW4iICAgICAgICAgICAgLT4gLU5hTgorZHNiYXM3MTAgdG9TY2kgIi1uQW4iICAgICAgICAgICAgLT4gLU5hTgorZHNiYXM3MTEgdG9TY2kgIi1OQU4iICAgICAgICAgICAgLT4gLU5hTgorZHNiYXM3MTIgdG9TY2kgJ05hTjAnICAgICAgICAgICAgLT4gTmFOCitkc2JhczcxMyB0b1NjaSAnTmFOMScgICAgICAgICAgICAtPiBOYU4xCitkc2JhczcxNCB0b1NjaSAnTmFOMTInICAgICAgICAgICAtPiBOYU4xMgorZHNiYXM3MTUgdG9TY2kgJ05hTjEyMycgICAgICAgICAgLT4gTmFOMTIzCitkc2JhczcxNiB0b1NjaSAnTmFOMTIzNCcgICAgICAgICAtPiBOYU4xMjM0Citkc2JhczcxNyB0b1NjaSAnTmFOMDEnICAgICAgICAgICAtPiBOYU4xCitkc2JhczcxOCB0b1NjaSAnTmFOMDEyJyAgICAgICAgICAtPiBOYU4xMgorZHNiYXM3MTkgdG9TY2kgJ05hTjAxMjMnICAgICAgICAgLT4gTmFOMTIzCitkc2JhczcyMCB0b1NjaSAnTmFOMDEyMzQnICAgICAgICAtPiBOYU4xMjM0Citkc2JhczcyMSB0b1NjaSAnTmFOMDAxJyAgICAgICAgICAtPiBOYU4xCitkc2JhczcyMiB0b1NjaSAnTmFOMDAxMicgICAgICAgICAtPiBOYU4xMgorZHNiYXM3MjMgdG9TY2kgJ05hTjAwMTIzJyAgICAgICAgLT4gTmFOMTIzCitkc2JhczcyNCB0b1NjaSAnTmFOMDAxMjM0JyAgICAgICAtPiBOYU4xMjM0Citkc2JhczcyNSB0b1NjaSAnTmFOMTIzNDU2Nzg5MDEyMzQ1NicgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczcyNiB0b1NjaSAnTmFOMTIzZSsxJyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNzI3IHRvU2NpICdOYU4xMi40NScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM3MjggdG9TY2kgJ05hTi0xMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Citkc2JhczcyOSB0b1NjaSAnTmFOKzEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKKworZHNiYXM3MzAgdG9TY2kgInNOYU4iICAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzEgdG9TY2kgInNuYW4iICAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzIgdG9TY2kgIlNuQW4iICAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzMgdG9TY2kgIlNOQU4iICAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzQgdG9TY2kgIitzTmFOIiAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzUgdG9TY2kgIitzbmFuIiAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzYgdG9TY2kgIitTbkFuIiAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzcgdG9TY2kgIitTTkFOIiAgICAgICAgICAgLT4gc05hTgorZHNiYXM3MzggdG9TY2kgIi1zTmFOIiAgICAgICAgICAgLT4gLXNOYU4KK2RzYmFzNzM5IHRvU2NpICItc25hbiIgICAgICAgICAgIC0+IC1zTmFOCitkc2Jhczc0MCB0b1NjaSAiLVNuQW4iICAgICAgICAgICAtPiAtc05hTgorZHNiYXM3NDEgdG9TY2kgIi1TTkFOIiAgICAgICAgICAgLT4gLXNOYU4KK2RzYmFzNzQyIHRvU2NpICdzTmFOMDAwMCcgICAgICAgIC0+IHNOYU4KK2RzYmFzNzQzIHRvU2NpICdzTmFONycgICAgICAgICAgIC0+IHNOYU43Citkc2Jhczc0NCB0b1NjaSAnc05hTjAwNzIzNCcgICAgICAtPiBzTmFONzIzNAorZHNiYXM3NDUgdG9TY2kgJ3NOYU43MjM0NTYxMjM0NTY3ODkwJyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKK2RzYmFzNzQ2IHRvU2NpICdzTmFONzIuNDUnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAorZHNiYXM3NDcgdG9TY2kgJ3NOYU4tNzInICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4CisKK2RzYmFzNzQ4IHRvU2NpICJJbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc0OSB0b1NjaSAiaW5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NTAgdG9TY2kgImlOZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzUxIHRvU2NpICJJTkYiICAgICAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc1MiB0b1NjaSAiK0luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NTMgdG9TY2kgIitpbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzU0IHRvU2NpICIraU5mIiAgICAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc1NSB0b1NjaSAiK0lORiIgICAgICAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NTYgdG9TY2kgIi1JbmYiICAgICAgICAgICAgLT4gLUluZmluaXR5Citkc2Jhczc1NyB0b1NjaSAiLWluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2RzYmFzNzU4IHRvU2NpICItaU5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQorZHNiYXM3NTkgdG9TY2kgIi1JTkYiICAgICAgICAgICAgLT4gLUluZmluaXR5CisKK2RzYmFzNzYwIHRvU2NpICJJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc2MSB0b1NjaSAiaW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NjIgdG9TY2kgImlOZkluSXRZIiAgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzYzIHRvU2NpICJJTkZJTklUWSIgICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc2NCB0b1NjaSAiK0luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NjUgdG9TY2kgIitpbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkKK2RzYmFzNzY2IHRvU2NpICIraU5mSW5JdFkiICAgICAgIC0+IEluZmluaXR5Citkc2Jhczc2NyB0b1NjaSAiK0lORklOSVRZIiAgICAgICAtPiBJbmZpbml0eQorZHNiYXM3NjggdG9TY2kgIi1JbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5Citkc2Jhczc2OSB0b1NjaSAiLWluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkKK2RzYmFzNzcwIHRvU2NpICItaU5mSW5JdFkiICAgICAgIC0+IC1JbmZpbml0eQorZHNiYXM3NzEgdG9TY2kgIi1JTkZJTklUWSIgICAgICAgLT4gLUluZmluaXR5CisKKy0tIFNwZWNpYWxzIGFuZCB6ZXJvcyBmb3IgdG9FbmcKK2RzYmFzdDc3MiB0b0VuZyAiTmFOIiAgICAgICAgICAgICAgLT4gTmFOCitkc2Jhc3Q3NzMgdG9FbmcgIi1JbmZpbml0eSIgICAgICAgIC0+IC1JbmZpbml0eQorZHNiYXN0Nzc0IHRvRW5nICItc05hTiIgICAgICAgICAgICAtPiAtc05hTgorZHNiYXN0Nzc1IHRvRW5nICItTmFOIiAgICAgICAgICAgICAtPiAtTmFOCitkc2Jhc3Q3NzYgdG9FbmcgIitJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5Citkc2Jhc3Q3NzggdG9FbmcgIitzTmFOIiAgICAgICAgICAgIC0+IHNOYU4KK2RzYmFzdDc3OSB0b0VuZyAiK05hTiIgICAgICAgICAgICAgLT4gTmFOCitkc2Jhc3Q3ODAgdG9FbmcgIklORklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhc3Q3ODEgdG9FbmcgIlNOQU4iICAgICAgICAgICAgIC0+IHNOYU4KK2RzYmFzdDc4MiB0b0VuZyAiTkFOIiAgICAgICAgICAgICAgLT4gTmFOCitkc2Jhc3Q3ODMgdG9FbmcgImluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhc3Q3ODQgdG9FbmcgInNuYW4iICAgICAgICAgICAgIC0+IHNOYU4KK2RzYmFzdDc4NSB0b0VuZyAibmFuIiAgICAgICAgICAgICAgLT4gTmFOCitkc2Jhc3Q3ODYgdG9FbmcgIkluRklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhc3Q3ODcgdG9FbmcgIlNuQU4iICAgICAgICAgICAgIC0+IHNOYU4KK2RzYmFzdDc4OCB0b0VuZyAibkFOIiAgICAgICAgICAgICAgLT4gTmFOCitkc2Jhc3Q3ODkgdG9FbmcgImlOZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhc3Q3OTAgdG9FbmcgInNOYW4iICAgICAgICAgICAgIC0+IHNOYU4KK2RzYmFzdDc5MSB0b0VuZyAiTmFuIiAgICAgICAgICAgICAgLT4gTmFOCitkc2Jhc3Q3OTIgdG9FbmcgIkluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5Citkc2Jhc3Q3OTMgdG9FbmcgInNOYU4iICAgICAgICAgICAgIC0+IHNOYU4KKworLS0gWmVybyB0b0VuZywgZXRjLgorZHNiYXN0ODAwIHRvRW5nIDBlKzEgICAgICAgICAgICAgIC0+ICIwLjAwRSszIiAgLS0gZG9jIGV4YW1wbGUKKworZHNiYXN0ODAxIHRvRW5nIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkKK2RzYmFzdDgwMiB0b0VuZyAwLjAwMDAwMDAwICAgICAgICAtPiAwLjAwRS02Citkc2Jhc3Q4MDMgdG9FbmcgMC4wMDAwMDAwICAgICAgICAgLT4gMC4wRS02Citkc2Jhc3Q4MDQgdG9FbmcgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDAKK2RzYmFzdDgwNSB0b0VuZyAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwCitkc2Jhc3Q4MDYgdG9FbmcgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwCitkc2Jhc3Q4MDcgdG9FbmcgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDAKK2RzYmFzdDgwOCB0b0VuZyAwLjAwICAgICAgICAgICAgICAtPiAwLjAwCitkc2Jhc3Q4MDkgdG9FbmcgMC4wICAgICAgICAgICAgICAgLT4gMC4wCitkc2Jhc3Q4MTAgdG9FbmcgIC4wICAgICAgICAgICAgICAgLT4gMC4wCitkc2Jhc3Q4MTEgdG9FbmcgMC4gICAgICAgICAgICAgICAgLT4gMAorZHNiYXN0ODEyIHRvRW5nIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjAKK2RzYmFzdDgxMyB0b0VuZyAtMC4gICAgICAgICAgICAgICAtPiAtMAorZHNiYXN0ODE0IHRvRW5nIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjAKK2RzYmFzdDgxNSB0b0VuZyAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMAorZHNiYXN0ODE2IHRvRW5nIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMAorZHNiYXN0ODE3IHRvRW5nIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDAKK2RzYmFzdDgxOCB0b0VuZyAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMAorZHNiYXN0ODE5IHRvRW5nIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMAorZHNiYXN0ODIwIHRvRW5nIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wLjBFLTYKK2RzYmFzdDgyMSB0b0VuZyAtMC4wMDAwMDAwMCAgICAgICAtPiAtMC4wMEUtNgorZHNiYXN0ODIyIHRvRW5nIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05CisKK2RzYmFzdDgzMCB0b0VuZyAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwCitkc2Jhc3Q4MzEgdG9FbmcgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wCitkc2Jhc3Q4MzIgdG9FbmcgIDAuMDBFKzIgICAgICAgICAgLT4gMAorZHNiYXN0ODMzIHRvRW5nICAwLjAwRSszICAgICAgICAgIC0+IDAuMDBFKzMKK2RzYmFzdDgzNCB0b0VuZyAgMC4wMEUrNCAgICAgICAgICAtPiAwLjBFKzMKK2RzYmFzdDgzNSB0b0VuZyAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszCitkc2Jhc3Q4MzYgdG9FbmcgIDAuMDBFKzYgICAgICAgICAgLT4gMC4wMEUrNgorZHNiYXN0ODM3IHRvRW5nICAwLjAwRSs3ICAgICAgICAgIC0+IDAuMEUrNgorZHNiYXN0ODM4IHRvRW5nICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYKK2RzYmFzdDgzOSB0b0VuZyAgMC4wMEUrOSAgICAgICAgICAtPiAwLjAwRSs5CisKK2RzYmFzdDg0MCB0b0VuZyAgMC4wRSswICAgICAgICAgICAtPiAwLjAKK2RzYmFzdDg0MSB0b0VuZyAgMC4wRSsxICAgICAgICAgICAtPiAwCitkc2Jhc3Q4NDIgdG9FbmcgIDAuMEUrMiAgICAgICAgICAgLT4gMC4wMEUrMworZHNiYXN0ODQzIHRvRW5nICAwLjBFKzMgICAgICAgICAgIC0+IDAuMEUrMworZHNiYXN0ODQ0IHRvRW5nICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMKK2RzYmFzdDg0NSB0b0VuZyAgMC4wRSs1ICAgICAgICAgICAtPiAwLjAwRSs2Citkc2Jhc3Q4NDYgdG9FbmcgIDAuMEUrNiAgICAgICAgICAgLT4gMC4wRSs2Citkc2Jhc3Q4NDcgdG9FbmcgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNgorZHNiYXN0ODQ4IHRvRW5nICAwLjBFKzggICAgICAgICAgIC0+IDAuMDBFKzkKK2RzYmFzdDg0OSB0b0VuZyAgMC4wRSs5ICAgICAgICAgICAtPiAwLjBFKzkKKworZHNiYXN0ODUwIHRvRW5nICAwRSswICAgICAgICAgICAgIC0+IDAKK2RzYmFzdDg1MSB0b0VuZyAgMEUrMSAgICAgICAgICAgICAtPiAwLjAwRSszCitkc2Jhc3Q4NTIgdG9FbmcgIDBFKzIgICAgICAgICAgICAgLT4gMC4wRSszCitkc2Jhc3Q4NTMgdG9FbmcgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMworZHNiYXN0ODU0IHRvRW5nICAwRSs0ICAgICAgICAgICAgIC0+IDAuMDBFKzYKK2RzYmFzdDg1NSB0b0VuZyAgMEUrNSAgICAgICAgICAgICAtPiAwLjBFKzYKK2RzYmFzdDg1NiB0b0VuZyAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2Citkc2Jhc3Q4NTcgdG9FbmcgIDBFKzcgICAgICAgICAgICAgLT4gMC4wMEUrOQorZHNiYXN0ODU4IHRvRW5nICAwRSs4ICAgICAgICAgICAgIC0+IDAuMEUrOQorZHNiYXN0ODU5IHRvRW5nICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkKKworZHNiYXN0ODYwIHRvRW5nICAwLjBFLTAgICAgICAgICAgIC0+IDAuMAorZHNiYXN0ODYxIHRvRW5nICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDAKK2RzYmFzdDg2MiB0b0VuZyAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMAorZHNiYXN0ODYzIHRvRW5nICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMAorZHNiYXN0ODY0IHRvRW5nICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDAKK2RzYmFzdDg2NSB0b0VuZyAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMAorZHNiYXN0ODY2IHRvRW5nICAwLjBFLTYgICAgICAgICAgIC0+IDAuMEUtNgorZHNiYXN0ODY3IHRvRW5nICAwLjBFLTcgICAgICAgICAgIC0+IDAuMDBFLTYKK2RzYmFzdDg2OCB0b0VuZyAgMC4wRS04ICAgICAgICAgICAtPiAwRS05Citkc2Jhc3Q4NjkgdG9FbmcgIDAuMEUtOSAgICAgICAgICAgLT4gMC4wRS05CisKK2RzYmFzdDg3MCB0b0VuZyAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwCitkc2Jhc3Q4NzEgdG9FbmcgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDAKK2RzYmFzdDg3MiB0b0VuZyAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDAKK2RzYmFzdDg3MyB0b0VuZyAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwCitkc2Jhc3Q4NzQgdG9FbmcgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDAKK2RzYmFzdDg3NSB0b0VuZyAgMC4wMEUtNSAgICAgICAgICAtPiAwLjBFLTYKK2RzYmFzdDg3NiB0b0VuZyAgMC4wMEUtNiAgICAgICAgICAtPiAwLjAwRS02Citkc2Jhc3Q4NzcgdG9FbmcgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQorZHNiYXN0ODc4IHRvRW5nICAwLjAwRS04ICAgICAgICAgIC0+IDAuMEUtOQorZHNiYXN0ODc5IHRvRW5nICAwLjAwRS05ICAgICAgICAgIC0+IDAuMDBFLTkKKworLS0gbG9uZyBpbnB1dCBzdHJpbmdzCitkc2JhczgwMSB0b3NjaSAgICAgICAgICAnMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKK2RzYmFzODAyIHRvc2NpICAgICAgICAgJzAwMTIzNDU2NycgLT4gMTIzNDU2NworZHNiYXM4MDMgdG9zY2kgICAgICAgICcwMDAxMjM0NTY3JyAtPiAxMjM0NTY3Citkc2JhczgwNCB0b3NjaSAgICAgICAnMDAwMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKK2RzYmFzODA1IHRvc2NpICAgICAgJzAwMDAwMTIzNDU2NycgLT4gMTIzNDU2NworZHNiYXM4MDYgdG9zY2kgICAgICcwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3Citkc2JhczgwNyB0b3NjaSAgICAnMDAwMDAwMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKK2RzYmFzODA4IHRvc2NpICAgJzAwMDAwMDAwMTIzNDU2NycgLT4gMTIzNDU2NworZHNiYXM4MDkgdG9zY2kgICcwMDAwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3Citkc2JhczgxMCB0b3NjaSAnMDAwMDAwMDAwMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKKworZHNiYXM4MTEgdG9zY2kgICAgICAgICAgJzAuMTIzNDU2NycgLT4gICAgICAwLjEyMzQ1NjcKK2RzYmFzODEyIHRvc2NpICAgICAgICAgJzAuMDEyMzQ1NjcnIC0+ICAgICAwLjAxMjM0NTY3Citkc2JhczgxMyB0b3NjaSAgICAgICAgJzAuMDAxMjM0NTY3JyAtPiAgICAwLjAwMTIzNDU2NworZHNiYXM4MTQgdG9zY2kgICAgICAgJzAuMDAwMTIzNDU2NycgLT4gICAwLjAwMDEyMzQ1NjcKK2RzYmFzODE1IHRvc2NpICAgICAgJzAuMDAwMDEyMzQ1NjcnIC0+ICAwLjAwMDAxMjM0NTY3Citkc2JhczgxNiB0b3NjaSAgICAgJzAuMDAwMDAxMjM0NTY3JyAtPiAwLjAwMDAwMTIzNDU2NworZHNiYXM4MTcgdG9zY2kgICAgJzAuMDAwMDAwMTIzNDU2NycgLT4gICAgICAgMS4yMzQ1NjdFLTcKK2RzYmFzODE4IHRvc2NpICAgJzAuMDAwMDAwMDEyMzQ1NjcnIC0+ICAgICAgIDEuMjM0NTY3RS04Citkc2JhczgxOSB0b3NjaSAgJzAuMDAwMDAwMDAxMjM0NTY3JyAtPiAgICAgICAxLjIzNDU2N0UtOQorZHNiYXM4MjAgdG9zY2kgJzAuMDAwMDAwMDAwMTIzNDU2NycgLT4gICAgICAgMS4yMzQ1NjdFLTEwCisKK2RzYmFzODIxIHRvc2NpICcxMjM0NTY3OTAnICAgICAgICAgLT4gMS4yMzQ1NjhFKzggSW5leGFjdCBSb3VuZGVkCitkc2JhczgyMiB0b3NjaSAnMTIzNDU2NzkwMScgICAgICAgIC0+IDEuMjM0NTY4RSs5ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzODIzIHRvc2NpICcxMjM0NTY3OTAxMicgICAgICAgLT4gMS4yMzQ1NjhFKzEwIEluZXhhY3QgUm91bmRlZAorZHNiYXM4MjQgdG9zY2kgJzEyMzQ1Njc5MDEyMycgICAgICAtPiAxLjIzNDU2OEUrMTEgSW5leGFjdCBSb3VuZGVkCitkc2JhczgyNSB0b3NjaSAnMTIzNDU2NzkwMTIzNCcgICAgIC0+IDEuMjM0NTY4RSsxMiBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzODI2IHRvc2NpICcxMjM0NTY3OTAxMjM0NScgICAgLT4gMS4yMzQ1NjhFKzEzIEluZXhhY3QgUm91bmRlZAorZHNiYXM4MjcgdG9zY2kgJzEyMzQ1Njc5MDEyMzQ1NicgICAtPiAxLjIzNDU2OEUrMTQgSW5leGFjdCBSb3VuZGVkCitkc2JhczgyOCB0b3NjaSAnMTIzNDU2NzkwMTIzNDU2NycgIC0+IDEuMjM0NTY4RSsxNSBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzODI5IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2JyAgLT4gMS4yMzQ1NjhFKzE1IEluZXhhY3QgUm91bmRlZAorCistLSBzdWJub3JtYWxzIGFuZCBvdmVyZmxvd3MKK2RzYmFzOTA2IHRvU2NpICc5OWU5OTk5OTk5OTknICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTA3IHRvU2NpICc5OTllOTk5OTk5OTk5JyAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTA4IHRvU2NpICcwLjllLTk5OTk5OTk5OScgICAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkwOSB0b1NjaSAnMC4wOWUtOTk5OTk5OTk5JyAgICAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MTAgdG9TY2kgJzAuMWUxMDAwMDAwMDAwJyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MTEgdG9TY2kgJzEwZS0xMDAwMDAwMDAwJyAgICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzOTEyIHRvU2NpICcwLjllOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTEzIHRvU2NpICc5OWUtOTk5OTk5OTk5OScgICAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkxNCB0b1NjaSAnMTExZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkxNSB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OScgICAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MTYgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTk5JyAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzOTE3IHRvU2NpICc3ZTEwMDAwMDAwMDAnICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5lZ2F0aXZlcyB0aGUgc2FtZQorZHNiYXM5MTggdG9TY2kgJy05OWU5OTk5OTk5OTknICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTE5IHRvU2NpICctOTk5ZTk5OTk5OTk5OScgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkyMCB0b1NjaSAnLTAuOWUtOTk5OTk5OTk5JyAgICAtPiAtMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzOTIxIHRvU2NpICctMC4wOWUtOTk5OTk5OTk5JyAgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MjIgdG9TY2kgJy0wLjFlMTAwMDAwMDAwMCcgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTIzIHRvU2NpICctMTBlLTEwMDAwMDAwMDAnICAgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MjQgdG9TY2kgJy0wLjllOTk5OTk5OTk5OScgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTI1IHRvU2NpICctOTllLTk5OTk5OTk5OTknICAgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MjYgdG9TY2kgJy0xMTFlOTk5OTk5OTk5OScgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzOTI3IHRvU2NpICctMTExMWUtOTk5OTk5OTk5OScgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXM5MjggdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5OScgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczkyOSB0b1NjaSAnLTdlMTAwMDAwMDAwMCcgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorCistLSBvdmVyZmxvdyByZXN1bHRzIGF0IGRpZmZlcmVudCByb3VuZGluZyBtb2Rlcworcm91bmRpbmc6ICBjZWlsaW5nCitkc2JhczkzMCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MzEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLTkuOTk5OTk5RSs5NiBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogIHVwCitkc2JhczkzMiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MzMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgZG93bgorZHNiYXM5MzQgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5RSs5NiBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitkc2JhczkzNSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTlFKzk2IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgZmxvb3IKK2RzYmFzOTM2IHRvU2NpICAnN2UxMDAwMCcgIC0+ICA5Ljk5OTk5OUUrOTYgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MzcgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX3VwCitkc2JhczkzOCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5MzkgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitkc2Jhczk0MCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5NDEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiAgaGFsZl9kb3duCitkc2Jhczk0MiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAorZHNiYXM5NDMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICBoYWxmX2V2ZW4KKworLS0gTm93IGNoZWNrIDg1NC83NTRyIHNvbWUgc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93IHRvIDAKK2RzYmVtNDAwIHRvU2NpICAxLjAwMDBFLTg2ICAgICAtPiAxLjAwMDBFLTg2Citkc2JlbTQwMSB0b1NjaSAgMC4xRS05NyAgICAgICAgLT4gMUUtOTggICAgICAgU3Vibm9ybWFsCitkc2JlbTQwMiB0b1NjaSAgMC4xMDAwRS05NyAgICAgLT4gMS4wMDBFLTk4ICAgU3Vibm9ybWFsCitkc2JlbTQwMyB0b1NjaSAgMC4wMTAwRS05NyAgICAgLT4gMS4wMEUtOTkgICAgU3Vibm9ybWFsCitkc2JlbTQwNCB0b1NjaSAgMC4wMDEwRS05NyAgICAgLT4gMS4wRS0xMDAgICAgIFN1Ym5vcm1hbAorZHNiZW00MDUgdG9TY2kgIDAuMDAwMUUtOTcgICAgIC0+IDFFLTEwMSAgICAgICBTdWJub3JtYWwKK2RzYmVtNDA2IHRvU2NpICAwLjAwMDEwRS05NyAgICAtPiAxRS0xMDEgICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitkc2JlbTQwNyB0b1NjaSAgMC4wMDAxM0UtOTcgICAgLT4gMUUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MDggdG9TY2kgIDAuMDAwMTVFLTk3ICAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDA5IHRvU2NpICAwLjAwMDE3RS05NyAgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQxMCB0b1NjaSAgMC4wMDAyM0UtOTcgICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MTEgdG9TY2kgIDAuMDAwMjVFLTk3ICAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDEyIHRvU2NpICAwLjAwMDI3RS05NyAgICAtPiAzRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQxMyB0b1NjaSAgMC4wMDAxNDlFLTk3ICAgLT4gMUUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MTQgdG9TY2kgIDAuMDAwMTUwRS05NyAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDE1IHRvU2NpICAwLjAwMDE1MUUtOTcgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQxNiB0b1NjaSAgMC4wMDAyNDlFLTk3ICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MTcgdG9TY2kgIDAuMDAwMjUwRS05NyAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDE4IHRvU2NpICAwLjAwMDI1MUUtOTcgICAtPiAzRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQxOSB0b1NjaSAgMC4wMDAwOUUtOTcgICAgLT4gMUUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MjAgdG9TY2kgIDAuMDAwMDVFLTk3ICAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiZW00MjEgdG9TY2kgIDAuMDAwMDNFLTk3ICAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiZW00MjIgdG9TY2kgIDAuMDAwMDA5RS05NyAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiZW00MjMgdG9TY2kgIDAuMDAwMDA1RS05NyAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiZW00MjQgdG9TY2kgIDAuMDAwMDAzRS05NyAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitkc2JlbTQyNSB0b1NjaSAgMC4wMDEwNDlFLTk3ICAgLT4gMS4wRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MjYgdG9TY2kgIDAuMDAxMDUwRS05NyAgIC0+IDEuMEUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDI3IHRvU2NpICAwLjAwMTA1MUUtOTcgICAtPiAxLjFFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQyOCB0b1NjaSAgMC4wMDExNDlFLTk3ICAgLT4gMS4xRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00MjkgdG9TY2kgIDAuMDAxMTUwRS05NyAgIC0+IDEuMkUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDMwIHRvU2NpICAwLjAwMTE1MUUtOTcgICAtPiAxLjJFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2RzYmVtNDMyIHRvU2NpICAwLjAxMDA0OUUtOTcgICAtPiAxLjAwRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDMzIHRvU2NpICAwLjAxMDA1MEUtOTcgICAtPiAxLjAwRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDM0IHRvU2NpICAwLjAxMDA1MUUtOTcgICAtPiAxLjAxRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDM1IHRvU2NpICAwLjAxMDE0OUUtOTcgICAtPiAxLjAxRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDM2IHRvU2NpICAwLjAxMDE1MEUtOTcgICAtPiAxLjAyRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDM3IHRvU2NpICAwLjAxMDE1MUUtOTcgICAtPiAxLjAyRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworZHNiZW00NDAgdG9TY2kgIDAuMTAxMDNFLTk3ICAgIC0+IDEuMDEwRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NDEgdG9TY2kgIDAuMTAxMDVFLTk3ICAgIC0+IDEuMDEwRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NDIgdG9TY2kgIDAuMTAxMDdFLTk3ICAgIC0+IDEuMDExRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NDMgdG9TY2kgIDAuMTAxMTNFLTk3ICAgIC0+IDEuMDExRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NDQgdG9TY2kgIDAuMTAxMTVFLTk3ICAgIC0+IDEuMDEyRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NDUgdG9TY2kgIDAuMTAxMTdFLTk3ICAgIC0+IDEuMDEyRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitkc2JlbTQ1MCB0b1NjaSAgMS4xMDczMEUtOTggICAgLT4gMS4xMDdFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ1MSB0b1NjaSAgMS4xMDc1MEUtOTggICAgLT4gMS4xMDhFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ1MiB0b1NjaSAgMS4xMDc3MEUtOTggICAgLT4gMS4xMDhFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ1MyB0b1NjaSAgMS4xMDgzMEUtOTggICAgLT4gMS4xMDhFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ1NCB0b1NjaSAgMS4xMDg1MEUtOTggICAgLT4gMS4xMDhFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ1NSB0b1NjaSAgMS4xMDg3MEUtOTggICAgLT4gMS4xMDlFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIG1ha2Ugc3VyZSBzaWduIE9LCitkc2JlbTQ1NiB0b1NjaSAgLTAuMTAxMDNFLTk3ICAgLT4gLTEuMDEwRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NTcgdG9TY2kgIC0wLjEwMTA1RS05NyAgIC0+IC0xLjAxMEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDU4IHRvU2NpICAtMC4xMDEwN0UtOTcgICAtPiAtMS4wMTFFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ1OSB0b1NjaSAgLTAuMTAxMTNFLTk3ICAgLT4gLTEuMDExRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NjAgdG9TY2kgIC0wLjEwMTE1RS05NyAgIC0+IC0xLjAxMkUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDYxIHRvU2NpICAtMC4xMDExN0UtOTcgICAtPiAtMS4wMTJFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tICc5OTlzJyBjYXNlcworZHNiZW00NjQgdG9TY2kgIDk5OTk5OUUtOTggICAgICAgICAtPiA5Ljk5OTk5RS05MworZHNiZW00NjUgdG9TY2kgIDk5OTk5LjBFLTk3ICAgICAgICAtPiA5Ljk5OTkwRS05MworZHNiZW00NjYgdG9TY2kgIDk5OTk5LkUtOTcgICAgICAgICAtPiA5Ljk5OTlFLTkzCitkc2JlbTQ2NyB0b1NjaSAgOTk5OS45RS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTQKK2RzYmVtNDY4IHRvU2NpICA5OTkuOTlFLTk3ICAgICAgICAgLT4gOS45OTk5RS05NQorZHNiZW00NjkgdG9TY2kgIDk5Ljk5OUUtOTcgICAgICAgICAtPiA5Ljk5OTlFLTk2IFN1Ym5vcm1hbAorZHNiZW00NzAgdG9TY2kgIDkuOTk5OUUtOTcgICAgICAgICAtPiA5Ljk5OTlFLTk3IFN1Ym5vcm1hbAorZHNiZW00NzEgdG9TY2kgIDAuOTk5OTlFLTk3ICAgICAgICAtPiAxLjAwMDBFLTk3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ3MiB0b1NjaSAgMC4wOTk5OTlFLTk3ICAgICAgIC0+IDEuMDAwRS05OCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDczIHRvU2NpICAwLjAwOTk5OTlFLTk3ICAgICAgLT4gMS4wMEUtOTkgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZHNiZW00NzQgdG9TY2kgIDAuMDAwOTk5OTlFLTk3ICAgICAtPiAxLjBFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitkc2JlbTQ3NSB0b1NjaSAgMC4wMDAwOTk5OTlFLTk3ICAgIC0+IDFFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2RzYmVtNDc2IHRvU2NpICAwLjAwMDAwOTk5OTlFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JlbTQ3NyB0b1NjaSAgMC4wMDAwMDA5OTk5OUUtOTcgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiZW00NzggdG9TY2kgIDAuMDAwMDAwMDk5OTk5RS05NyAtPiAwRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gRXhwb25lbnRzIHdpdGggaW5zaWduaWZpY2FudCBsZWFkaW5nIHplcm9zCitkc2JhczEwMDEgdG9TY2kgIDFlOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHNiYXMxMDAyIHRvU2NpICAxZTA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkc2JhczEwMDMgdG9TY2kgIDFlMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkc2JhczEwMDQgdG9TY2kgIDFlMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZHNiYXMxMDA1IHRvU2NpICAxZTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2RzYmFzMTAwNiB0b1NjaSAgMWUwMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkc2JhczEwMDcgdG9TY2kgIDFlLTk5OTk5OTk5OSAtPiAwRS0xMDEgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXMxMDA4IHRvU2NpICAxZS0wOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzMTAwOSB0b1NjaSAgMWUtMDA5OTk5OTk5OTkgLT4gMEUtMTAxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitkc2JhczEwMTAgdG9TY2kgIDFlLTAwMDk5OTk5OTk5OSAtPiAwRS0xMDEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZHNiYXMxMDExIHRvU2NpICAxZS0wMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2RzYmFzMTAxMiB0b1NjaSAgMWUtMDAwMDAwMDAwMDAxMDAwMDAwMDA3IC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzCitkc2JhczEwNDEgdG9TY2kgICAgIDEuMTE1MjQ0NEUtOTYgLT4gIDEuMTE1MjRFLTk2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Citkc2JhczEwNDIgdG9TY2kgICAgIDEuMTE1MjQ0NUUtOTYgLT4gIDEuMTE1MjRFLTk2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Citkc2JhczEwNDMgdG9TY2kgICAgIDEuMTE1MjQ0NkUtOTYgLT4gIDEuMTE1MjRFLTk2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIGNsYW1wZWQgemVyb3MgW3NlZSBhbHNvIGNsYW1wLmRlY1Rlc3RdCitkc2JhczEwNzUgdG9TY2kgICAwZSsxMDAwMCAgLT4gIDBFKzkwICAgQ2xhbXBlZAorZHNiYXMxMDc2IHRvU2NpICAgMGUtMTAwMDAgIC0+ICAwRS0xMDEgIENsYW1wZWQKK2RzYmFzMTA3NyB0b1NjaSAgLTBlKzEwMDAwICAtPiAtMEUrOTAgICBDbGFtcGVkCitkc2JhczEwNzggdG9TY2kgIC0wZS0xMDAwMCAgLT4gLTBFLTEwMSAgQ2xhbXBlZAorCistLSBleHRyZW1lIHZhbHVlcyBmcm9tIG5leHQtd2lkZXIKK2RzYmFzMTEwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitkc2JhczExMDIgdG9TY2kgLTFFLTM4MyAtPiAtMEUtMTAxIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK2RzYmFzMTEwMyB0b1NjaSAtMUUtMzk4IC0+IC0wRS0xMDEgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZHNiYXMxMTA0IHRvU2NpIC0wIC0+IC0wCitkc2JhczExMDUgdG9TY2kgKzAgLT4gIDAKK2RzYmFzMTEwNiB0b1NjaSArMUUtMzk4IC0+ICAwRS0xMDEgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZHNiYXMxMTA3IHRvU2NpICsxRS0zODMgLT4gIDBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitkc2JhczExMDggdG9TY2kgKzkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSBuYXJyb3dpbmcgY2FzZQorZHNiYXMxMTEwIHRvU2NpIDIuMDAwMDAwMDAwMDAwMDAwRS05OSAtPiAyLjAwRS05OSBSb3VuZGVkIFN1Ym5vcm1hbApkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kc0VuY29kZS5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kc0VuY29kZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxODU3OGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RzRW5jb2RlLmRlY1Rlc3QKQEAgLTAsMCArMSwzNzIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZHNFbmNvZGUuZGVjVGVzdCAtLSBkZWNpbWFsIGZvdXItYnl0ZSBmb3JtYXQgdGVzdGNhc2VzICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMCwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gW1ByZXZpb3VzbHkgY2FsbGVkIGRlY2ltYWwzMi5kZWNUZXN0XQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyBpcyBmb3IgdGhlIGZvdXItYnl0ZSBjb25jcmV0ZSByZXByZXNlbnRhdGlvbi4KKy0tIEl0cyBjaGFyYWN0ZXJpc3RpY3MgYXJlOgorLS0KKy0tICAxIGJpdCAgc2lnbgorLS0gIDUgYml0cyBjb21iaW5hdGlvbiBmaWVsZAorLS0gIDYgYml0cyBleHBvbmVudCBjb250aW51YXRpb24KKy0tIDIwIGJpdHMgY29lZmZpY2llbnQgY29udGludWF0aW9uCistLQorLS0gVG90YWwgZXhwb25lbnQgbGVuZ3RoIDggYml0cworLS0gVG90YWwgY29lZmZpY2llbnQgbGVuZ3RoIDI0IGJpdHMgKDcgZGlnaXRzKQorLS0KKy0tIEVsaW1pdCA9ICAxOTEgKG1heGltdW0gZW5jb2RlZCBleHBvbmVudCkKKy0tIEVtYXggICA9ICAgOTYgKGxhcmdlc3QgZXhwb25lbnQgdmFsdWUpCistLSBFbWluICAgPSAgLTk1IChzbWFsbGVzdCBleHBvbmVudCB2YWx1ZSkKKy0tIGJpYXMgICA9ICAxMDEgKHN1YnRyYWN0ZWQgZnJvbSBlbmNvZGVkIGV4cG9uZW50KSA9IC1FdGlueQorCistLSBUaGUgdGVzdGNhc2VzIGhlcmUgaGF2ZSBvbmx5IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBkYXRhIG9uIHRoZQorLS0gJ2xlZnQtaGFuZC1zaWRlJzsgcm91bmRpbmcgZnJvbSBzdHJpbmdzIGlzIHRlc3RlZCBpbiAnYmFzZScKKy0tIHRlc3RjYXNlIGdyb3Vwcy4KKworZXh0ZW5kZWQ6ICAgIDEKK2NsYW1wOiAgICAgICAxCitwcmVjaXNpb246ICAgNworcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5NgorbWluRXhwb25lbnQ6IC05NQorCistLSBHZW5lcmFsIHRlc3RjYXNlcworLS0gKG1vc3RseSBkZXJpdmVkIGZyb20gdGhlIFN0cmF3bWFuIDQgZG9jdW1lbnQgYW5kIGV4YW1wbGVzKQorZGVjczAwMSBhcHBseSAgICNBMjMwMDNEMCAgICAgICAgICAtPiAtNy41MAorZGVjczAwMiBhcHBseSAgIC03LjUwICAgICAgICAgICAgICAtPiAjQTIzMDAzRDAKKy0tIGRlcml2YXRpdmUgY2Fub25pY2FsIHBsYWluIHN0cmluZ3MKK2RlY3MwMDMgYXBwbHkgICAjQTI2MDAzRDAgICAgICAgICAtPiAtNy41MEUrMworZGVjczAwNCBhcHBseSAgIC03LjUwRSszICAgICAgICAgIC0+ICNBMjYwMDNEMAorZGVjczAwNSBhcHBseSAgICNBMjUwMDNEMCAgICAgICAgIC0+IC03NTAKK2RlY3MwMDYgYXBwbHkgICAtNzUwICAgICAgICAgICAgICAtPiAjQTI1MDAzRDAKK2RlY3MwMDcgYXBwbHkgICAjQTI0MDAzRDAgICAgICAgICAtPiAtNzUuMAorZGVjczAwOCBhcHBseSAgIC03NS4wICAgICAgICAgICAgIC0+ICNBMjQwMDNEMAorZGVjczAwOSBhcHBseSAgICNBMjIwMDNEMCAgICAgICAgIC0+IC0wLjc1MAorZGVjczAxMCBhcHBseSAgIC0wLjc1MCAgICAgICAgICAgIC0+ICNBMjIwMDNEMAorZGVjczAxMSBhcHBseSAgICNBMjEwMDNEMCAgICAgICAgIC0+IC0wLjA3NTAKK2RlY3MwMTIgYXBwbHkgICAtMC4wNzUwICAgICAgICAgICAtPiAjQTIxMDAzRDAKK2RlY3MwMTMgYXBwbHkgICAjQTFmMDAzRDAgICAgICAgICAtPiAtMC4wMDA3NTAKK2RlY3MwMTQgYXBwbHkgICAtMC4wMDA3NTAgICAgICAgICAtPiAjQTFmMDAzRDAKK2RlY3MwMTUgYXBwbHkgICAjQTFkMDAzRDAgICAgICAgICAtPiAtMC4wMDAwMDc1MAorZGVjczAxNiBhcHBseSAgIC0wLjAwMDAwNzUwICAgICAgIC0+ICNBMWQwMDNEMAorZGVjczAxNyBhcHBseSAgICNBMWMwMDNEMCAgICAgICAgIC0+IC03LjUwRS03CitkZWNzMDE4IGFwcGx5ICAgLTcuNTBFLTcgICAgICAgICAgLT4gI0ExYzAwM0QwCisKKy0tIE5vcm1hbGl0eQorZGVjczAyMCBhcHBseSAgIDEyMzQ1NjcgICAgICAgICAgICAtPiAjMjY1NGQyZTcKK2RlY3MwMjEgYXBwbHkgIC0xMjM0NTY3ICAgICAgICAgICAgLT4gI2E2NTRkMmU3CitkZWNzMDIyIGFwcGx5ICAgMTExMTExMSAgICAgICAgICAgIC0+ICMyNjUyNDQ5MQorCistLSBObWF4IGFuZCBzaW1pbGFyCitkZWNzMDMxIGFwcGx5ICAgOS45OTk5OTlFKzk2ICAgICAgICAgICAgLT4gIzc3ZjNmY2ZmCitkZWNzMDMyIGFwcGx5ICAgIzc3ZjNmY2ZmICAgICAgICAgICAgICAgLT4gOS45OTk5OTlFKzk2CitkZWNzMDMzIGFwcGx5ICAgMS4yMzQ1NjdFKzk2ICAgICAgICAgICAgLT4gIzQ3ZjRkMmU3CitkZWNzMDM0IGFwcGx5ICAgIzQ3ZjRkMmU3ICAgICAgICAgICAgICAgLT4gMS4yMzQ1NjdFKzk2CistLSBmb2xkLWRvd25zIChtb3JlIGJlbG93KQorZGVjczAzNSBhcHBseSAgIDEuMjNFKzk2ICAgICAgICAgICAgICAgIC0+ICM0N2Y0YzAwMCBDbGFtcGVkCitkZWNzMDM2IGFwcGx5ICAgIzQ3ZjRjMDAwICAgICAgICAgICAgICAgLT4gMS4yMzAwMDBFKzk2CitkZWNzMDM3IGFwcGx5ICAgMUUrOTYgICAgICAgICAgICAgICAgICAgLT4gIzQ3ZjAwMDAwIENsYW1wZWQKK2RlY3MwMzggYXBwbHkgICAjNDdmMDAwMDAgICAgICAgICAgICAgICAtPiAxLjAwMDAwMEUrOTYKKworZGVjczA1MSBhcHBseSAgIDEyMzQ1ICAgICAgICAgICAgICAgICAgIC0+ICMyMjUwNDljNQorZGVjczA1MiBhcHBseSAgICMyMjUwNDljNSAgICAgICAgICAgICAgIC0+IDEyMzQ1CitkZWNzMDUzIGFwcGx5ICAgMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwNTM0CitkZWNzMDU0IGFwcGx5ICAgIzIyNTAwNTM0ICAgICAgICAgICAgICAgLT4gMTIzNAorZGVjczA1NSBhcHBseSAgIDEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjUwMDBhMworZGVjczA1NiBhcHBseSAgICMyMjUwMDBhMyAgICAgICAgICAgICAgIC0+IDEyMworZGVjczA1NyBhcHBseSAgIDEyICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjUwMDAxMgorZGVjczA1OCBhcHBseSAgICMyMjUwMDAxMiAgICAgICAgICAgICAgIC0+IDEyCitkZWNzMDU5IGFwcGx5ICAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwMDAxCitkZWNzMDYwIGFwcGx5ICAgIzIyNTAwMDAxICAgICAgICAgICAgICAgLT4gMQorZGVjczA2MSBhcHBseSAgIDEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDBhMworZGVjczA2MiBhcHBseSAgICMyMjMwMDBhMyAgICAgICAgICAgICAgIC0+IDEuMjMKK2RlY3MwNjMgYXBwbHkgICAxMjMuNDUgICAgICAgICAgICAgICAgICAtPiAjMjIzMDQ5YzUKK2RlY3MwNjQgYXBwbHkgICAjMjIzMDQ5YzUgICAgICAgICAgICAgICAtPiAxMjMuNDUKKworLS0gTm1pbiBhbmQgYmVsb3cKK2RlY3MwNzEgYXBwbHkgICAxRS05NSAgICAgICAgICAgICAgICAgICAtPiAjMDA2MDAwMDEKK2RlY3MwNzIgYXBwbHkgICAjMDA2MDAwMDEgICAgICAgICAgICAgICAtPiAxRS05NQorZGVjczA3MyBhcHBseSAgIDEuMDAwMDAwRS05NSAgICAgICAgICAgIC0+ICMwNDAwMDAwMAorZGVjczA3NCBhcHBseSAgICMwNDAwMDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMDAwRS05NQorZGVjczA3NSBhcHBseSAgIDEuMDAwMDAxRS05NSAgICAgICAgICAgIC0+ICMwNDAwMDAwMQorZGVjczA3NiBhcHBseSAgICMwNDAwMDAwMSAgICAgICAgICAgICAgIC0+IDEuMDAwMDAxRS05NQorCitkZWNzMDc3IGFwcGx5ICAgMC4xMDAwMDBFLTk1ICAgICAgICAgICAgLT4gIzAwMDIwMDAwICAgICBTdWJub3JtYWwKK2RlY3MwN3ggYXBwbHkgICAxLjAwMDAwRS05NiAgICAgICAgICAgICAtPiAxLjAwMDAwRS05NiAgIFN1Ym5vcm1hbAorZGVjczA3OCBhcHBseSAgICMwMDAyMDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMDBFLTk2ICAgU3Vibm9ybWFsCitkZWNzMDc5IGFwcGx5ICAgMC4wMDAwMTBFLTk1ICAgICAgICAgICAgLT4gIzAwMDAwMDEwICAgICBTdWJub3JtYWwKK2RlY3MwODAgYXBwbHkgICAjMDAwMDAwMTAgICAgICAgICAgICAgICAtPiAxLjBFLTEwMCAgICAgIFN1Ym5vcm1hbAorZGVjczA4MSBhcHBseSAgIDAuMDAwMDAxRS05NSAgICAgICAgICAgIC0+ICMwMDAwMDAwMSAgICAgU3Vibm9ybWFsCitkZWNzMDgyIGFwcGx5ICAgIzAwMDAwMDAxICAgICAgICAgICAgICAgLT4gMUUtMTAxICAgICAgICBTdWJub3JtYWwKK2RlY3MwODMgYXBwbHkgICAxZS0xMDEgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDEgICAgIFN1Ym5vcm1hbAorZGVjczA4NCBhcHBseSAgICMwMDAwMDAwMSAgICAgICAgICAgICAgIC0+IDFFLTEwMSAgICAgICAgU3Vibm9ybWFsCitkZWNzMDh4IGFwcGx5ICAgMWUtMTAxICAgICAgICAgICAgICAgICAgLT4gMUUtMTAxICAgICAgICBTdWJub3JtYWwKKworLS0gdW5kZXJmbG93cyBjYW5ub3QgYmUgdGVzdGVkOyBqdXN0IGNoZWNrIGVkZ2UgY2FzZQorZGVjczA5MCBhcHBseSAgIDFlLTEwMSAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMSAgU3Vibm9ybWFsCisKKy0tIHNhbWUgYWdhaW4sIG5lZ2F0aXZlcyAtLQorCistLSBObWF4IGFuZCBzaW1pbGFyCitkZWNzMTIyIGFwcGx5ICAtOS45OTk5OTlFKzk2ICAgICAgICAgICAgLT4gI2Y3ZjNmY2ZmCitkZWNzMTIzIGFwcGx5ICAgI2Y3ZjNmY2ZmICAgICAgICAgICAgICAgLT4gLTkuOTk5OTk5RSs5NgorZGVjczEyNCBhcHBseSAgLTEuMjM0NTY3RSs5NiAgICAgICAgICAgIC0+ICNjN2Y0ZDJlNworZGVjczEyNSBhcHBseSAgICNjN2Y0ZDJlNyAgICAgICAgICAgICAgIC0+IC0xLjIzNDU2N0UrOTYKKy0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpCitkZWNzMTMwIGFwcGx5ICAtMS4yM0UrOTYgICAgICAgICAgICAgICAgLT4gI2M3ZjRjMDAwIENsYW1wZWQKK2RlY3MxMzEgYXBwbHkgICAjYzdmNGMwMDAgICAgICAgICAgICAgICAtPiAtMS4yMzAwMDBFKzk2CitkZWNzMTMyIGFwcGx5ICAtMUUrOTYgICAgICAgICAgICAgICAgICAgLT4gI2M3ZjAwMDAwIENsYW1wZWQKK2RlY3MxMzMgYXBwbHkgICAjYzdmMDAwMDAgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDBFKzk2CisKK2RlY3MxNTEgYXBwbHkgIC0xMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDQ5YzUKK2RlY3MxNTIgYXBwbHkgICAjYTI1MDQ5YzUgICAgICAgICAgICAgICAtPiAtMTIzNDUKK2RlY3MxNTMgYXBwbHkgIC0xMjM0ICAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDA1MzQKK2RlY3MxNTQgYXBwbHkgICAjYTI1MDA1MzQgICAgICAgICAgICAgICAtPiAtMTIzNAorZGVjczE1NSBhcHBseSAgLTEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDBhMworZGVjczE1NiBhcHBseSAgICNhMjUwMDBhMyAgICAgICAgICAgICAgIC0+IC0xMjMKK2RlY3MxNTcgYXBwbHkgIC0xMiAgICAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDAwMTIKK2RlY3MxNTggYXBwbHkgICAjYTI1MDAwMTIgICAgICAgICAgICAgICAtPiAtMTIKK2RlY3MxNTkgYXBwbHkgIC0xICAgICAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDAwMDEKK2RlY3MxNjAgYXBwbHkgICAjYTI1MDAwMDEgICAgICAgICAgICAgICAtPiAtMQorZGVjczE2MSBhcHBseSAgLTEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICNhMjMwMDBhMworZGVjczE2MiBhcHBseSAgICNhMjMwMDBhMyAgICAgICAgICAgICAgIC0+IC0xLjIzCitkZWNzMTYzIGFwcGx5ICAtMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gI2EyMzA0OWM1CitkZWNzMTY0IGFwcGx5ICAgI2EyMzA0OWM1ICAgICAgICAgICAgICAgLT4gLTEyMy40NQorCistLSBObWluIGFuZCBiZWxvdworZGVjczE3MSBhcHBseSAgLTFFLTk1ICAgICAgICAgICAgICAgICAgIC0+ICM4MDYwMDAwMQorZGVjczE3MiBhcHBseSAgICM4MDYwMDAwMSAgICAgICAgICAgICAgIC0+IC0xRS05NQorZGVjczE3MyBhcHBseSAgLTEuMDAwMDAwRS05NSAgICAgICAgICAgIC0+ICM4NDAwMDAwMAorZGVjczE3NCBhcHBseSAgICM4NDAwMDAwMCAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwMEUtOTUKK2RlY3MxNzUgYXBwbHkgIC0xLjAwMDAwMUUtOTUgICAgICAgICAgICAtPiAjODQwMDAwMDEKK2RlY3MxNzYgYXBwbHkgICAjODQwMDAwMDEgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDFFLTk1CisKK2RlY3MxNzcgYXBwbHkgIC0wLjEwMDAwMEUtOTUgICAgICAgICAgICAtPiAjODAwMjAwMDAgICAgIFN1Ym5vcm1hbAorZGVjczE3OCBhcHBseSAgICM4MDAyMDAwMCAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwRS05NiAgU3Vibm9ybWFsCitkZWNzMTc5IGFwcGx5ICAtMC4wMDAwMTBFLTk1ICAgICAgICAgICAgLT4gIzgwMDAwMDEwICAgICBTdWJub3JtYWwKK2RlY3MxODAgYXBwbHkgICAjODAwMDAwMTAgICAgICAgICAgICAgICAtPiAtMS4wRS0xMDAgICAgIFN1Ym5vcm1hbAorZGVjczE4MSBhcHBseSAgLTAuMDAwMDAxRS05NSAgICAgICAgICAgIC0+ICM4MDAwMDAwMSAgICAgU3Vibm9ybWFsCitkZWNzMTgyIGFwcGx5ICAgIzgwMDAwMDAxICAgICAgICAgICAgICAgLT4gLTFFLTEwMSAgICAgICBTdWJub3JtYWwKK2RlY3MxODMgYXBwbHkgIC0xZS0xMDEgICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDEgICAgIFN1Ym5vcm1hbAorZGVjczE4NCBhcHBseSAgICM4MDAwMDAwMSAgICAgICAgICAgICAgIC0+IC0xRS0xMDEgICAgICAgU3Vibm9ybWFsCisKKy0tIHVuZGVyZmxvdyBlZGdlIGNhc2UKK2RlY3MxOTAgYXBwbHkgIC0xZS0xMDEgICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDEgIFN1Ym5vcm1hbAorCistLSB6ZXJvcworZGVjczQwMCBhcHBseSAgIDBFLTQwMCAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMCAgQ2xhbXBlZAorZGVjczQwMSBhcHBseSAgIDBFLTEwMSAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMAorZGVjczQwMiBhcHBseSAgICMwMDAwMDAwMCAgICAgICAgICAgICAgIC0+IDBFLTEwMQorZGVjczQwMyBhcHBseSAgIDAuMDAwMDAwRS05NSAgICAgICAgICAgIC0+ICMwMDAwMDAwMAorZGVjczQwNCBhcHBseSAgICMwMDAwMDAwMCAgICAgICAgICAgICAgIC0+IDBFLTEwMQorZGVjczQwNSBhcHBseSAgIDBFLTIgICAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDAwMAorZGVjczQwNiBhcHBseSAgICMyMjMwMDAwMCAgICAgICAgICAgICAgIC0+IDAuMDAKK2RlY3M0MDcgYXBwbHkgICAwICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDAwMDAKK2RlY3M0MDggYXBwbHkgICAjMjI1MDAwMDAgICAgICAgICAgICAgICAtPiAwCitkZWNzNDA5IGFwcGx5ICAgMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyODAwMDAwCitkZWNzNDEwIGFwcGx5ICAgIzIyODAwMDAwICAgICAgICAgICAgICAgLT4gMEUrMworZGVjczQxMSBhcHBseSAgIDBFKzkwICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAwMAorZGVjczQxMiBhcHBseSAgICM0M2YwMDAwMCAgICAgICAgICAgICAgIC0+IDBFKzkwCistLSBjbGFtcGVkIHplcm9zLi4uCitkZWNzNDEzIGFwcGx5ICAgMEUrOTEgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDAwICBDbGFtcGVkCitkZWNzNDE0IGFwcGx5ICAgIzQzZjAwMDAwICAgICAgICAgICAgICAgLT4gMEUrOTAKK2RlY3M0MTUgYXBwbHkgICAwRSs5NiAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMDAgIENsYW1wZWQKK2RlY3M0MTYgYXBwbHkgICAjNDNmMDAwMDAgICAgICAgICAgICAgICAtPiAwRSs5MAorZGVjczQxNyBhcHBseSAgIDBFKzQwMCAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAwMCAgQ2xhbXBlZAorZGVjczQxOCBhcHBseSAgICM0M2YwMDAwMCAgICAgICAgICAgICAgIC0+IDBFKzkwCisKKy0tIG5lZ2F0aXZlIHplcm9zCitkZWNzNDIwIGFwcGx5ICAgLTBFLTQwMCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwICBDbGFtcGVkCitkZWNzNDIxIGFwcGx5ICAgLTBFLTEwMSAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwCitkZWNzNDIyIGFwcGx5ICAgIzgwMDAwMDAwICAgICAgICAgICAgICAgLT4gLTBFLTEwMQorZGVjczQyMyBhcHBseSAgIC0wLjAwMDAwMEUtOTUgICAgICAgICAgIC0+ICM4MDAwMDAwMAorZGVjczQyNCBhcHBseSAgICM4MDAwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRS0xMDEKK2RlY3M0MjUgYXBwbHkgICAtMEUtMiAgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwMDAKK2RlY3M0MjYgYXBwbHkgICAjYTIzMDAwMDAgICAgICAgICAgICAgICAtPiAtMC4wMAorZGVjczQyNyBhcHBseSAgIC0wICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDAwMAorZGVjczQyOCBhcHBseSAgICNhMjUwMDAwMCAgICAgICAgICAgICAgIC0+IC0wCitkZWNzNDI5IGFwcGx5ICAgLTBFKzMgICAgICAgICAgICAgICAgICAgLT4gI2EyODAwMDAwCitkZWNzNDMwIGFwcGx5ICAgI2EyODAwMDAwICAgICAgICAgICAgICAgLT4gLTBFKzMKK2RlY3M0MzEgYXBwbHkgICAtMEUrOTAgICAgICAgICAgICAgICAgICAtPiAjYzNmMDAwMDAKK2RlY3M0MzIgYXBwbHkgICAjYzNmMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrOTAKKy0tIGNsYW1wZWQgemVyb3MuLi4KK2RlY3M0MzMgYXBwbHkgICAtMEUrOTEgICAgICAgICAgICAgICAgICAtPiAjYzNmMDAwMDAgIENsYW1wZWQKK2RlY3M0MzQgYXBwbHkgICAjYzNmMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrOTAKK2RlY3M0MzUgYXBwbHkgICAtMEUrOTYgICAgICAgICAgICAgICAgICAtPiAjYzNmMDAwMDAgIENsYW1wZWQKK2RlY3M0MzYgYXBwbHkgICAjYzNmMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrOTAKK2RlY3M0MzcgYXBwbHkgICAtMEUrNDAwICAgICAgICAgICAgICAgICAtPiAjYzNmMDAwMDAgIENsYW1wZWQKK2RlY3M0MzggYXBwbHkgICAjYzNmMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrOTAKKworLS0gU3BlY2lhbHMKK2RlY3M1MDAgYXBwbHkgICBJbmZpbml0eSAgLT4gIzc4MDAwMDAwCitkZWNzNTAxIGFwcGx5ICAgIzc4Nzg3ODc4IC0+ICM3ODAwMDAwMAorZGVjczUwMiBhcHBseSAgICM3ODAwMDAwMCAtPiBJbmZpbml0eQorZGVjczUwMyBhcHBseSAgICM3OTc5Nzk3OSAtPiAjNzgwMDAwMDAKK2RlY3M1MDQgYXBwbHkgICAjNzkwMDAwMDAgLT4gSW5maW5pdHkKK2RlY3M1MDUgYXBwbHkgICAjN2E3YTdhN2EgLT4gIzc4MDAwMDAwCitkZWNzNTA2IGFwcGx5ICAgIzdhMDAwMDAwIC0+IEluZmluaXR5CitkZWNzNTA3IGFwcGx5ICAgIzdiN2I3YjdiIC0+ICM3ODAwMDAwMAorZGVjczUwOCBhcHBseSAgICM3YjAwMDAwMCAtPiBJbmZpbml0eQorZGVjczUwOSBhcHBseSAgICM3YzdjN2M3YyAtPiAjN2MwYzdjN2MKKworZGVjczUxMCBhcHBseSAgIE5hTiAgICAgICAtPiAjN2MwMDAwMDAKK2RlY3M1MTEgYXBwbHkgICAjN2MwMDAwMDAgLT4gTmFOCitkZWNzNTEyIGFwcGx5ICAgIzdkN2Q3ZDdkIC0+ICM3YzBkN2Q3ZAorZGVjczUxMyBhcHBseSAgICM3ZDAwMDAwMCAtPiBOYU4KK2RlY3M1MTQgYXBwbHkgICAjN2U3ZTdlN2UgLT4gIzdlMGU3YzdlCitkZWNzNTE1IGFwcGx5ICAgIzdlMDAwMDAwIC0+IHNOYU4KK2RlY3M1MTYgYXBwbHkgICAjN2Y3ZjdmN2YgLT4gIzdlMGY3YzdmCitkZWNzNTE3IGFwcGx5ICAgIzdmMDAwMDAwIC0+IHNOYU4KK2RlY3M1MTggYXBwbHkgICAjN2ZmZmZmZmYgLT4gc05hTjk5OTk5OQorZGVjczUxOSBhcHBseSAgICM3ZmZmZmZmZiAtPiAjN2UwM2ZjZmYKKworZGVjczUyMCBhcHBseSAgIC1JbmZpbml0eSAtPiAjZjgwMDAwMDAKK2RlY3M1MjEgYXBwbHkgICAjZjg3ODc4NzggLT4gI2Y4MDAwMDAwCitkZWNzNTIyIGFwcGx5ICAgI2Y4MDAwMDAwIC0+IC1JbmZpbml0eQorZGVjczUyMyBhcHBseSAgICNmOTc5Nzk3OSAtPiAjZjgwMDAwMDAKK2RlY3M1MjQgYXBwbHkgICAjZjkwMDAwMDAgLT4gLUluZmluaXR5CitkZWNzNTI1IGFwcGx5ICAgI2ZhN2E3YTdhIC0+ICNmODAwMDAwMAorZGVjczUyNiBhcHBseSAgICNmYTAwMDAwMCAtPiAtSW5maW5pdHkKK2RlY3M1MjcgYXBwbHkgICAjZmI3YjdiN2IgLT4gI2Y4MDAwMDAwCitkZWNzNTI4IGFwcGx5ICAgI2ZiMDAwMDAwIC0+IC1JbmZpbml0eQorCitkZWNzNTI5IGFwcGx5ICAgLU5hTiAgICAgIC0+ICNmYzAwMDAwMAorZGVjczUzMCBhcHBseSAgICNmYzdjN2M3YyAtPiAjZmMwYzdjN2MKK2RlY3M1MzEgYXBwbHkgICAjZmMwMDAwMDAgLT4gLU5hTgorZGVjczUzMiBhcHBseSAgICNmZDdkN2Q3ZCAtPiAjZmMwZDdkN2QKK2RlY3M1MzMgYXBwbHkgICAjZmQwMDAwMDAgLT4gLU5hTgorZGVjczUzNCBhcHBseSAgICNmZTdlN2U3ZSAtPiAjZmUwZTdjN2UKK2RlY3M1MzUgYXBwbHkgICAjZmUwMDAwMDAgLT4gLXNOYU4KK2RlY3M1MzYgYXBwbHkgICAjZmY3ZjdmN2YgLT4gI2ZlMGY3YzdmCitkZWNzNTM3IGFwcGx5ICAgI2ZmMDAwMDAwIC0+IC1zTmFOCitkZWNzNTM4IGFwcGx5ICAgI2ZmZmZmZmZmIC0+IC1zTmFOOTk5OTk5CitkZWNzNTM5IGFwcGx5ICAgI2ZmZmZmZmZmIC0+ICNmZTAzZmNmZgorCistLSBkaWFnbm9zdGljIE5hTnMKK2RlY3M1NDAgYXBwbHkgICBOYU4gICAgICAgLT4gIzdjMDAwMDAwCitkZWNzNTQxIGFwcGx5ICAgTmFOMCAgICAgIC0+ICM3YzAwMDAwMAorZGVjczU0MiBhcHBseSAgIE5hTjEgICAgICAtPiAjN2MwMDAwMDEKK2RlY3M1NDMgYXBwbHkgICBOYU4xMiAgICAgLT4gIzdjMDAwMDEyCitkZWNzNTQ0IGFwcGx5ICAgTmFONzkgICAgIC0+ICM3YzAwMDA3OQorZGVjczU0NSBhcHBseSAgIE5hTjEyMzQ1ICAgLT4gIzdjMDA0OWM1CitkZWNzNTQ2IGFwcGx5ICAgTmFOMTIzNDU2ICAtPiAjN2MwMjhlNTYKK2RlY3M1NDcgYXBwbHkgICBOYU43OTk3OTkgIC0+ICM3YzBmN2ZkZgorZGVjczU0OCBhcHBseSAgIE5hTjk5OTk5OSAgLT4gIzdjMDNmY2ZmCisKKworLS0gZm9sZC1kb3duIGZ1bGwgc2VxdWVuY2UKK2RlY3M2MDEgYXBwbHkgICAxRSs5NiAgICAgICAgICAgICAgICAgICAtPiAjNDdmMDAwMDAgQ2xhbXBlZAorZGVjczYwMiBhcHBseSAgICM0N2YwMDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMDAwRSs5NgorZGVjczYwMyBhcHBseSAgIDFFKzk1ICAgICAgICAgICAgICAgICAgIC0+ICM0M2YyMDAwMCBDbGFtcGVkCitkZWNzNjA0IGFwcGx5ICAgIzQzZjIwMDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwMEUrOTUKK2RlY3M2MDUgYXBwbHkgICAxRSs5NCAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDQwMDAgQ2xhbXBlZAorZGVjczYwNiBhcHBseSAgICM0M2YwNDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMEUrOTQKK2RlY3M2MDcgYXBwbHkgICAxRSs5MyAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDA0MDAgQ2xhbXBlZAorZGVjczYwOCBhcHBseSAgICM0M2YwMDQwMCAgICAgICAgICAgICAgIC0+IDEuMDAwRSs5MworZGVjczYwOSBhcHBseSAgIDFFKzkyICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDA4MCBDbGFtcGVkCitkZWNzNjEwIGFwcGx5ICAgIzQzZjAwMDgwICAgICAgICAgICAgICAgLT4gMS4wMEUrOTIKK2RlY3M2MTEgYXBwbHkgICAxRSs5MSAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMTAgQ2xhbXBlZAorZGVjczYxMiBhcHBseSAgICM0M2YwMDAxMCAgICAgICAgICAgICAgIC0+IDEuMEUrOTEKK2RlY3M2MTMgYXBwbHkgICAxRSs5MCAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMDEKK2RlY3M2MTQgYXBwbHkgICAjNDNmMDAwMDEgICAgICAgICAgICAgICAtPiAxRSs5MAorCisKKy0tIFNlbGVjdGVkIERQRCBjb2RlcworZGVjczcwMCBhcHBseSAgICMyMjUwMDAwMCAgICAgICAtPiAwCitkZWNzNzAxIGFwcGx5ICAgIzIyNTAwMDA5ICAgICAgIC0+IDkKK2RlY3M3MDIgYXBwbHkgICAjMjI1MDAwMTAgICAgICAgLT4gMTAKK2RlY3M3MDMgYXBwbHkgICAjMjI1MDAwMTkgICAgICAgLT4gMTkKK2RlY3M3MDQgYXBwbHkgICAjMjI1MDAwMjAgICAgICAgLT4gMjAKK2RlY3M3MDUgYXBwbHkgICAjMjI1MDAwMjkgICAgICAgLT4gMjkKK2RlY3M3MDYgYXBwbHkgICAjMjI1MDAwMzAgICAgICAgLT4gMzAKK2RlY3M3MDcgYXBwbHkgICAjMjI1MDAwMzkgICAgICAgLT4gMzkKK2RlY3M3MDggYXBwbHkgICAjMjI1MDAwNDAgICAgICAgLT4gNDAKK2RlY3M3MDkgYXBwbHkgICAjMjI1MDAwNDkgICAgICAgLT4gNDkKK2RlY3M3MTAgYXBwbHkgICAjMjI1MDAwNTAgICAgICAgLT4gNTAKK2RlY3M3MTEgYXBwbHkgICAjMjI1MDAwNTkgICAgICAgLT4gNTkKK2RlY3M3MTIgYXBwbHkgICAjMjI1MDAwNjAgICAgICAgLT4gNjAKK2RlY3M3MTMgYXBwbHkgICAjMjI1MDAwNjkgICAgICAgLT4gNjkKK2RlY3M3MTQgYXBwbHkgICAjMjI1MDAwNzAgICAgICAgLT4gNzAKK2RlY3M3MTUgYXBwbHkgICAjMjI1MDAwNzEgICAgICAgLT4gNzEKK2RlY3M3MTYgYXBwbHkgICAjMjI1MDAwNzIgICAgICAgLT4gNzIKK2RlY3M3MTcgYXBwbHkgICAjMjI1MDAwNzMgICAgICAgLT4gNzMKK2RlY3M3MTggYXBwbHkgICAjMjI1MDAwNzQgICAgICAgLT4gNzQKK2RlY3M3MTkgYXBwbHkgICAjMjI1MDAwNzUgICAgICAgLT4gNzUKK2RlY3M3MjAgYXBwbHkgICAjMjI1MDAwNzYgICAgICAgLT4gNzYKK2RlY3M3MjEgYXBwbHkgICAjMjI1MDAwNzcgICAgICAgLT4gNzcKK2RlY3M3MjIgYXBwbHkgICAjMjI1MDAwNzggICAgICAgLT4gNzgKK2RlY3M3MjMgYXBwbHkgICAjMjI1MDAwNzkgICAgICAgLT4gNzkKKworZGVjczczMCBhcHBseSAgICMyMjUwMDI5ZSAgICAgICAtPiA5OTQKK2RlY3M3MzEgYXBwbHkgICAjMjI1MDAyOWYgICAgICAgLT4gOTk1CitkZWNzNzMyIGFwcGx5ICAgIzIyNTAwMmEwICAgICAgIC0+IDUyMAorZGVjczczMyBhcHBseSAgICMyMjUwMDJhMSAgICAgICAtPiA1MjEKKworLS0gRFBEOiBvbmUgb2YgZWFjaCBvZiB0aGUgaHVmZm1hbiBncm91cHMKK2RlY3M3NDAgYXBwbHkgICAjMjI1MDAzZjcgICAgICAgLT4gNzc3CitkZWNzNzQxIGFwcGx5ICAgIzIyNTAwM2Y4ICAgICAgIC0+IDc3OAorZGVjczc0MiBhcHBseSAgICMyMjUwMDNlYiAgICAgICAtPiA3ODcKK2RlY3M3NDMgYXBwbHkgICAjMjI1MDAzN2QgICAgICAgLT4gODc3CitkZWNzNzQ0IGFwcGx5ICAgIzIyNTAwMzlmICAgICAgIC0+IDk5NworZGVjczc0NSBhcHBseSAgICMyMjUwMDNiZiAgICAgICAtPiA5NzkKK2RlY3M3NDYgYXBwbHkgICAjMjI1MDAzZGYgICAgICAgLT4gNzk5CitkZWNzNzQ3IGFwcGx5ICAgIzIyNTAwMDZlICAgICAgIC0+IDg4OAorCisKKy0tIERQRCBhbGwtaGlnaHMgY2FzZXMgKGluY2x1ZGVzIHRoZSAyNCByZWR1bmRhbnQgY29kZXMpCitkZWNzNzUwIGFwcGx5ICAgIzIyNTAwMDZlICAgICAgIC0+IDg4OAorZGVjczc1MSBhcHBseSAgICMyMjUwMDE2ZSAgICAgICAtPiA4ODgKK2RlY3M3NTIgYXBwbHkgICAjMjI1MDAyNmUgICAgICAgLT4gODg4CitkZWNzNzUzIGFwcGx5ICAgIzIyNTAwMzZlICAgICAgIC0+IDg4OAorZGVjczc1NCBhcHBseSAgICMyMjUwMDA2ZiAgICAgICAtPiA4ODkKK2RlY3M3NTUgYXBwbHkgICAjMjI1MDAxNmYgICAgICAgLT4gODg5CitkZWNzNzU2IGFwcGx5ICAgIzIyNTAwMjZmICAgICAgIC0+IDg4OQorZGVjczc1NyBhcHBseSAgICMyMjUwMDM2ZiAgICAgICAtPiA4ODkKKworZGVjczc2MCBhcHBseSAgICMyMjUwMDA3ZSAgICAgICAtPiA4OTgKK2RlY3M3NjEgYXBwbHkgICAjMjI1MDAxN2UgICAgICAgLT4gODk4CitkZWNzNzYyIGFwcGx5ICAgIzIyNTAwMjdlICAgICAgIC0+IDg5OAorZGVjczc2MyBhcHBseSAgICMyMjUwMDM3ZSAgICAgICAtPiA4OTgKK2RlY3M3NjQgYXBwbHkgICAjMjI1MDAwN2YgICAgICAgLT4gODk5CitkZWNzNzY1IGFwcGx5ICAgIzIyNTAwMTdmICAgICAgIC0+IDg5OQorZGVjczc2NiBhcHBseSAgICMyMjUwMDI3ZiAgICAgICAtPiA4OTkKK2RlY3M3NjcgYXBwbHkgICAjMjI1MDAzN2YgICAgICAgLT4gODk5CisKK2RlY3M3NzAgYXBwbHkgICAjMjI1MDAwZWUgICAgICAgLT4gOTg4CitkZWNzNzcxIGFwcGx5ICAgIzIyNTAwMWVlICAgICAgIC0+IDk4OAorZGVjczc3MiBhcHBseSAgICMyMjUwMDJlZSAgICAgICAtPiA5ODgKK2RlY3M3NzMgYXBwbHkgICAjMjI1MDAzZWUgICAgICAgLT4gOTg4CitkZWNzNzc0IGFwcGx5ICAgIzIyNTAwMGVmICAgICAgIC0+IDk4OQorZGVjczc3NSBhcHBseSAgICMyMjUwMDFlZiAgICAgICAtPiA5ODkKK2RlY3M3NzYgYXBwbHkgICAjMjI1MDAyZWYgICAgICAgLT4gOTg5CitkZWNzNzc3IGFwcGx5ICAgIzIyNTAwM2VmICAgICAgIC0+IDk4OQorCitkZWNzNzgwIGFwcGx5ICAgIzIyNTAwMGZlICAgICAgIC0+IDk5OAorZGVjczc4MSBhcHBseSAgICMyMjUwMDFmZSAgICAgICAtPiA5OTgKK2RlY3M3ODIgYXBwbHkgICAjMjI1MDAyZmUgICAgICAgLT4gOTk4CitkZWNzNzgzIGFwcGx5ICAgIzIyNTAwM2ZlICAgICAgIC0+IDk5OAorZGVjczc4NCBhcHBseSAgICMyMjUwMDBmZiAgICAgICAtPiA5OTkKK2RlY3M3ODUgYXBwbHkgICAjMjI1MDAxZmYgICAgICAgLT4gOTk5CitkZWNzNzg2IGFwcGx5ICAgIzIyNTAwMmZmICAgICAgIC0+IDk5OQorZGVjczc4NyBhcHBseSAgICMyMjUwMDNmZiAgICAgICAtPiA5OTkKKworLS0gbmFycm93aW5nIGNhc2UKK2RlY3M3OTAgYXBwbHkgMi4wMEUtOTkgLT4gIzAwMDAwMTAwIFN1Ym5vcm1hbAorZGVjczc5MSBhcHBseSAjMDAwMDAxMDAgLT4gMi4wMEUtOTkgU3Vibm9ybWFsCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2V4cC5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9leHAuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWI5OTBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9leHAuZGVjVGVzdApAQCAtMCwwICsxLDY3NCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBleHAuZGVjVGVzdCAtLSBkZWNpbWFsIG5hdHVyYWwgZXhwb25lbnRpYXRpb24gICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRlc3RzIG9mIHRoZSBleHBvbmVudGlhbCBmdW50aW9uLiAgQ3VycmVudGx5IGFsbCB0ZXN0Y2FzZXMgaGVyZQorLS0gc2hvdyByZXN1bHRzIHdoaWNoIGFyZSBjb3JyZWN0bHkgcm91bmRlZCAod2l0aGluIDw9IDAuNSB1bHApLgorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIGJhc2ljcyAoZXhhbXBsZXMgaW4gc3BlY2lmaWNpYXRpb24sIGV0Yy4pCitleHB4MDAxIGV4cCAgLUluZmluaXR5ICAgICAtPiAwCitleHB4MDAyIGV4cCAgLTEwICAgICAgICAgICAtPiAwLjAwMDA0NTM5OTkyOTggSW5leGFjdCBSb3VuZGVkCitleHB4MDAzIGV4cCAgLTEgICAgICAgICAgICAtPiAwLjM2Nzg3OTQ0MSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMDQgZXhwICAgMCAgICAgICAgICAgIC0+IDEKK2V4cHgwMDUgZXhwICAtMCAgICAgICAgICAgIC0+IDEKK2V4cHgwMDYgZXhwICAgMSAgICAgICAgICAgIC0+IDIuNzE4MjgxODMgIEluZXhhY3QgUm91bmRlZAorZXhweDAwNyBleHAgICAwLjY5MzE0NzE4MSAgLT4gMi4wMDAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitleHB4MDA4IGV4cCAgIDEwICAgICAgICAgICAtPiAyMjAyNi40NjU4ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMDkgZXhwICArSW5maW5pdHkgICAgIC0+IEluZmluaXR5CisKKy0tIHRpbnkgZWRnZSBjYXNlcworcHJlY2lzaW9uOiAgIDcKK2V4cHgwMTEgZXhwICAwLjEgICAgICAgICAgLT4gIDEuMTA1MTcxICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMTIgZXhwICAwLjAxICAgICAgICAgLT4gIDEuMDEwMDUwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMTMgZXhwICAwLjAwMSAgICAgICAgLT4gIDEuMDAxMDAxICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMTQgZXhwICAwLjAwMDEgICAgICAgLT4gIDEuMDAwMTAwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMTUgZXhwICAwLjAwMDAxICAgICAgLT4gIDEuMDAwMDEwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMTYgZXhwICAwLjAwMDAwMSAgICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMTcgZXhwICAwLjAwMDAwMDEgICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMTggZXhwICAwLjAwMDAwMDMgICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMTkgZXhwICAwLjAwMDAwMDQgICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMjAgZXhwICAwLjAwMDAwMDUgICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMjEgZXhwICAwLjAwMDAwMDggICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMjIgZXhwICAwLjAwMDAwMDkgICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMjMgZXhwICAwLjAwMDAwMTAgICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMjQgZXhwICAwLjAwMDAwMTEgICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMjUgZXhwICAwLjAwMDAwMDA5ICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMjYgZXhwICAwLjAwMDAwMDA1ICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMjcgZXhwICAwLjAwMDAwMDA0ICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwMjggZXhwICAwLjAwMDAwMDAxICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKKworLS0gYW5kIHNvbWUgbW9yZSB6ZXJvcworZXhweDAzMCBleHAgIDAuMDAwMDAwMDAgICAtPiAgMQorZXhweDAzMSBleHAgIDBFKzEwMCAgICAgICAtPiAgMQorZXhweDAzMiBleHAgIDBFLTEwMCAgICAgICAtPiAgMQorZXhweDAzMyBleHAgLTAuMDAwMDAwMDAgICAtPiAgMQorZXhweDAzNCBleHAgLTBFKzEwMCAgICAgICAtPiAgMQorZXhweDAzNSBleHAgLTBFLTEwMCAgICAgICAtPiAgMQorCistLSBiYXNpYyBlPTAsIGU9MSwgZT0yLCBlPTQsIGU+PTggY2FzZXMKK3ByZWNpc2lvbjogICA3CitleHB4MDQxIGV4cCAgMSAgICAgICAgICAtPiAgMi43MTgyODIgIEluZXhhY3QgUm91bmRlZAorZXhweDA0MiBleHAgLTEgICAgICAgICAgLT4gIDAuMzY3ODc5NCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwNDMgZXhwICAxMCAgICAgICAgIC0+ICAyMjAyNi40NyAgSW5leGFjdCBSb3VuZGVkCitleHB4MDQ0IGV4cCAtMTAgICAgICAgICAtPiAgMC4wMDAwNDUzOTk5MyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwNDUgZXhwICAxMDAgICAgICAgIC0+ICAyLjY4ODExN0UrNDMgIEluZXhhY3QgUm91bmRlZAorZXhweDA0NiBleHAgLTEwMCAgICAgICAgLT4gIDMuNzIwMDc2RS00NCAgSW5leGFjdCBSb3VuZGVkCitleHB4MDQ3IGV4cCAgMTAwMCAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4MDQ4IGV4cCAtMTAwMCAgICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKK2V4cHgwNDkgZXhwICAxMDAwMDAwMDAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgwNTAgZXhwIC0xMDAwMDAwMDAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAorCistLSBtaXNjZWxsYW5lYQorLS0gc2ltaWxhciB0byAnVkYgYnVnJyB0ZXN0LCBhdCAxNywgYnV0IHdpdGggbGFzdCBkaWdpdCBjb3JyZWN0ZWQgZm9yIGRlY2ltYWwKK3ByZWNpc2lvbjogMTYKK2V4cHgwNTUgZXhwIC01LjQyNDEwMzExMjg3NDQxNDU5MTcyRSsyIC0+IDIuNzE3NjU4NDg2ODg0NTcyRS0yMzYgSW5leGFjdCBSb3VuZGVkCistLSAgcmVzdWx0IGZyb20gTmV0UmV4eC9KYXZhIHByb3RvdHlwZSAtPiAyLjcxNzY1ODQ4Njg4NDU3MjExMTc2Nzc5Mjk2Mjg2MTcyNDYwNTQ0NTk2NDQ3MTExMDhFLTIzNgorLS0gICByZXN1bHQgZnJvbSBSZXh4IChzZXJpZXMpIHZlcnNpb24gLT4gMi43MTc2NTg0ODY4ODQ1NzIxMTE3Njc3OTI5NjI4NjE3MjQ2MDU0NDZFLTIzNgorcHJlY2lzaW9uOiAxNworZXhweDA1NiBleHAgLTUuNDI0MTAzMTEyODc0NDE0NTkxNzJFKzIgLT4gMi43MTc2NTg0ODY4ODQ1NzIxRS0yMzYgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE4CitleHB4MDU3IGV4cCAtNS40MjQxMDMxMTI4NzQ0MTQ1OTE3MkUrMiAtPiAyLjcxNzY1ODQ4Njg4NDU3MjExRS0yMzYgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE5CitleHB4MDU4IGV4cCAtNS40MjQxMDMxMTI4NzQ0MTQ1OTE3MkUrMiAtPiAyLjcxNzY1ODQ4Njg4NDU3MjExMkUtMjM2IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMAorZXhweDA1OSBleHAgLTUuNDI0MTAzMTEyODc0NDE0NTkxNzJFKzIgLT4gMi43MTc2NTg0ODY4ODQ1NzIxMTE4RS0yMzYgSW5leGFjdCBSb3VuZGVkCisKKy0tIHJvdW5kaW5nIGluIGFyZWFzIG9mIC4uNTAwLi4sIC4uNDk5Li4sIC4uMTAwLi4sIC4uOTk5Li4gc2VxdWVuY2VzCitwcmVjaXNpb246ICAgNTAKK2V4cHgxMDEgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAyNzMzNzQ5OTUwNzkyNTAwNzM4MTEgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMzEKK2V4cHgxMDIgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAyNyBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAzMAorZXhweDEwMyBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDMgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDI5CitleHB4MTA0IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjgKK2V4cHgxMDUgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyNworZXhweDEwNiBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDI2CitleHB4MTA3IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjUKK2V4cHgxMDggZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyNAorZXhweDEwOSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4NzkgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDIzCitleHB4MTEwIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg4ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjIKK2V4cHgxMTEgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5OSAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyMQorZXhweDExMiBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNTAwMDAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDIwCitleHB4MTEzIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAwICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTkKK2V4cHgxMTQgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDUwMCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxOAorZXhweDExNSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNTAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE3CitleHB4MTE2IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA1ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTYKK2V4cHgxMTcgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxNQorZXhweDExOCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE0CitleHB4MTE5IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTMKK2V4cHgxMjAgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMCAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxMgorZXhweDEyMSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDExCitleHB4MTIyIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTAKK2V4cHgxMjMgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMCAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgOQorZXhweDEyNCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA4CitleHB4MTI1IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDcKK2V4cHgxMjYgZXhwIC05RS04IC0+IDAuOTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgNgorZXhweDEyNyBleHAgLTlFLTggLT4gMS4wMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA1CitleHB4MTI4IGV4cCAtOUUtOCAtPiAxLjAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDQKK2V4cHgxMjkgZXhwIC05RS04IC0+IDEuMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMworZXhweDEzMCBleHAgLTlFLTggLT4gMS4wMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAyCitleHB4MTMxIGV4cCAtOUUtOCAtPiAxLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDEKK2V4cHgxMzIgZXhwIC05RS04IC0+IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworCistLSBzYW5pdHkgY2hlY2tzLCB3aXRoIGl0ZXJhdGlvbiBjb3VudHMgW25vcm1hbGl6ZWQgc28gMDw9fHh8PDFdCitwcmVjaXNpb246ICAgNTAKKworZXhweDIxMCBleHAgMCAtPiAxCistLSBpdGVyYXRpb25zOiAyCitleHB4MjExIGV4cCAtMUUtNDAgLT4gMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDgKK2V4cHgyMTIgZXhwIC05RS03IC0+IDAuOTk5OTk5MTAwMDAwNDA0OTk5ODc4NTAwMDI3MzM3NDk1MDc5MjUwNzM4MTEyNDA1MTAgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiA2CitleHB4MjEzIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMjczMzc0OTk1MDc5MjUwMDczODExIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMTUKK2V4cHgyMTQgZXhwIC0wLjAwMyAtPiAwLjk5NzAwNDQ5NTUwMzM3Mjk3NjAxMjA2NjIzNDA5NzU2MDkxMDc0MTc3NDgwNDg5ODQ1IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMTQKK2V4cHgyMTUgZXhwIC0wLjAwMSAtPiAwLjk5OTAwMDQ5OTgzMzM3NDk5MTY2ODA1NTM1NzE2NzY1NTk3NDcwMjM1NTkwMjM2MDA4IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjYKK2V4cHgyMTYgZXhwIC0wLjEgLT4gMC45MDQ4Mzc0MTgwMzU5NTk1NzMxNjQyNDkwNTk0NDY0MzY2MjExOTQ3MDUzNjA5ODA0MCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDM5CitleHB4MjE3IGV4cCAtMC43IC0+IDAuNDk2NTg1MzAzNzkxNDA5NTE0NzA0ODAwMDkzMzk3NTI4OTYxNzA3NjY3MTY1NzExODIgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiA0MQorZXhweDIxOCBleHAgLTAuOSAtPiAwLjQwNjU2OTY1OTc0MDU5OTExMTg4MzQ1NDIzOTY0NTYyNTk4NzgzMzcwMzM3NjE3MDM4IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogNDMKK2V4cHgyMTkgZXhwIC0wLjk5IC0+IDAuMzcxNTc2NjkxMDIyMDQ1NjkwNTMxNTI0MTE5OTA4MjAxMzg2OTE4MDI4ODU0OTA1MDEgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyNgorZXhweDIyMCBleHAgLTEgLT4gMC4zNjc4Nzk0NDExNzE0NDIzMjE1OTU1MjM3NzAxNjE0NjA4Njc0NDU4MTExMzEwMzE3NyBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI2CitleHB4MjIxIGV4cCAtMS4wMSAtPiAwLjM2NDIxODk3OTU3MTUyMzMxOTc1NzA0NjI5NTYzNzM0NTQ4OTU5NTg5MTM5MTkyNDgyIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjcKK2V4cHgyMjIgZXhwIC0xLjEgLT4gMC4zMzI4NzEwODM2OTgwNzk1NTMyODg4NDY5MDY0MzEzMTU1MjE2MTI0Nzk1MjE1NjkyMSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI4CitleHB4MjIzIGV4cCAtMS41IC0+IDAuMjIzMTMwMTYwMTQ4NDI5ODI4OTMzMjgwNDcwNzY0MDEyNTIxMzQyMTcxNjI5MzYxMDggSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAzMAorZXhweDIyNCBleHAgLTIgLT4gMC4xMzUzMzUyODMyMzY2MTI2OTE4OTM5OTk0OTQ5NzI0ODQ0MDM0MDc2MzE1NDU5MDk1OCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDM2CitleHB4MjI1IGV4cCAtNSAtPiAwLjAwNjczNzk0Njk5OTA4NTQ2NzA5NjYzNjA0ODQyMzE0ODQyNDI0ODg0OTU4NTAyNzM1NTEgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyNgorZXhweDIyNiBleHAgLTEwIC0+IDAuMDAwMDQ1Mzk5OTI5NzYyNDg0ODUxNTM1NTkxNTE1NTYwNTUwNjEwMjM3OTE4MDg4ODY2NTY1IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjgKK2V4cHgyMjcgZXhwIC0xNCAtPiA4LjMxNTI4NzE5MTAzNTY3ODg0MDYzOTg1MTQyNTY1MjYyMjk0NjA3NjU4MzY0OTg0NTdFLTcgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyOQorZXhweDIyOCBleHAgLTE1IC0+IDMuMDU5MDIzMjA1MDE4MjU3ODgzNzE0Nzk0OTc3MDIyODk2MzkzNzA4MjA3ODA4MTg1NkUtNyBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDMwCitleHB4MjMzIGV4cCAwIC0+IDEKKy0tIGl0ZXJhdGlvbnM6IDIKK2V4cHgyMzQgZXhwIDFFLTQwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDcKK2V4cHgyMzUgZXhwIDlFLTcgLT4gMS4wMDAwMDA5MDAwMDA0MDUwMDAxMjE1MDAwMjczMzc1MDQ5MjA3NTA3MzgxMTI1OTQ5IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogNgorZXhweDIzNiBleHAgOUUtOCAtPiAxLjAwMDAwMDA5MDAwMDAwNDA1MDAwMDEyMTUwMDAwMjczMzc1MDA0OTIwNzUwMDczODEgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAxNQorZXhweDIzNyBleHAgMC4wMDMgLT4gMS4wMDMwMDQ1MDQ1MDMzNzcwMjYwMTI5MzQwOTEzNDg5MDAyMDUzMzE4NzI3MTk1NjE5IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMTMKK2V4cHgyMzggZXhwIDAuMDAxIC0+IDEuMDAxMDAwNTAwMTY2NzA4MzQxNjY4MDU1NzUzOTkzMDU4MzExNTYzMDc2MjAwNTgwNyBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI1CitleHB4MjM5IGV4cCAwLjEgLT4gMS4xMDUxNzA5MTgwNzU2NDc2MjQ4MTE3MDc4MjY0OTAyNDY2NjgyMjQ1NDcxOTQ3Mzc1IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMzgKK2V4cHgyNDAgZXhwIDAuNyAtPiAyLjAxMzc1MjcwNzQ3MDQ3NjUyMTYyNDU0OTM4ODU4MzA2NTI3MDAxNzU0MjM5NDE0NTkgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiA0MQorZXhweDI0MSBleHAgMC45IC0+IDIuNDU5NjAzMTExMTU2OTQ5NjYzODAwMTI2NTYzNjAyNDcwNjk1NDIxNzcyMzA2NDQwMSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDQyCitleHB4MjQyIGV4cCAwLjk5IC0+IDIuNjkxMjM0NDcyMzQ5MjYyMjg5MDk5ODc5NDA0MDcxMDEzOTcyMTgwMjkzMTg0MTAzMCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI2CitleHB4MjQzIGV4cCAxIC0+IDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYyNDk3NzU3MjQ3MDkzNzAwMCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI2CitleHB4MjQ0IGV4cCAxLjAxIC0+IDIuNzQ1NjAxMDE1MDE2OTE2NDkzOTg5Nzc2MzE2NjYwMzg3NjI0MDczNzUwODE5NTk2MCBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI2CitleHB4MjQ1IGV4cCAxLjEgLT4gMy4wMDQxNjYwMjM5NDY0MzMxMTIwNTg0MDc5NTM1ODg2NzIzOTMyODI2ODEwMjYwMTYzIEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjgKK2V4cHgyNDYgZXhwIDEuNSAtPiA0LjQ4MTY4OTA3MDMzODA2NDgyMjYwMjA1NTQ2MDExOTI3NTgxOTAwNTc0OTg2ODM2OTcgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyOQorZXhweDI0NyBleHAgMiAtPiA3LjM4OTA1NjA5ODkzMDY1MDIyNzIzMDQyNzQ2MDU3NTAwNzgxMzE4MDMxNTU3MDU1MTggSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAzNgorZXhweDI0OCBleHAgNSAtPiAxNDguNDEzMTU5MTAyNTc2NjAzNDIxMTE1NTgwMDQwNTUyMjc5NjIzNDg3NjY3NTkzODggSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyNgorZXhweDI0OSBleHAgMTAgLT4gMjIwMjYuNDY1Nzk0ODA2NzE2NTE2OTU3OTAwNjQ1Mjg0MjQ0MzY2MzUzNTEyNjE4NTU3IEluZXhhY3QgUm91bmRlZAorLS0gaXRlcmF0aW9uczogMjgKK2V4cHgyNTAgZXhwIDE0IC0+IDEyMDI2MDQuMjg0MTY0Nzc2Nzc3NzQ5MjM2NzcwNzY3ODU5NDQ5NDEyNDg2NTQzMzc2MSBJbmV4YWN0IFJvdW5kZWQKKy0tIGl0ZXJhdGlvbnM6IDI4CitleHB4MjUxIGV4cCAxNSAtPiAzMjY5MDE3LjM3MjQ3MjExMDYzOTMwMTg1NTA0NjA5MTcyMTMxNTUwNTczODU0MzgyMDAgSW5leGFjdCBSb3VuZGVkCistLSBpdGVyYXRpb25zOiAyOQorCistLSBhIGJpZ2dpZSBbcmVzdWx0IHZlcmlmaWVkIDMgd2F5c10KK3ByZWNpc2lvbjogMjUwCitleHB4MjYwIGV4cCAxIC0+IDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYyNDk3NzU3MjQ3MDkzNjk5OTU5NTc0OTY2OTY3NjI3NzI0MDc2NjMwMzUzNTQ3NTk0NTcxMzgyMTc4NTI1MTY2NDI3NDI3NDY2MzkxOTMyMDAzMDU5OTIxODE3NDEzNTk2NjI5MDQzNTcyOTAwMzM0Mjk1MjYwNTk1NjMwNzM4MTMyMzI4NjI3OTQzNDkwNzYzMjMzODI5ODgwNzUzMTk1MjUxMDE5MDExNTczODM0MTg3OTMwNzAyMTU0MDg5MTQ5OTM0ODg0MTY3NTA5MjQ0NzYxNDYwNjY4IEluZXhhY3QgUm91bmRlZAorCistLSBleHRyZW1lIHJhbmdlIGJvdW5kYXJpZXMKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDk5OTk5OQorbWluRXhwb25lbnQ6IC05OTk5OTkKKy0tIE50aW55IGJvdW5kYXJ5CitleHB4MjkwIGV4cCAgLTIzMDI2MTguMDIyMzMyNTI5IC0+IDBFLTEwMDAwMTQgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZXhweDI5MSBleHAgIC0yMzAyNjE4LjAyMjMzMjUyOCAtPiAxRS0xMDAwMDE0IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCistLSBObWF4LzEwIGFuZCBObWF4IGJvdW5kYXJ5CitleHB4MjkyIGV4cCAgMjMwMjU4Mi43OTA0MDg5NTIgLT4gOS45OTk5OTk5OTMxMDAyNzdFKzk5OTk5OCAgSW5leGFjdCBSb3VuZGVkCitleHB4MjkzIGV4cCAgMjMwMjU4Mi43OTA0MDg5NTMgLT4gMS4wMDAwMDAwMDAzMTAwMjhFKzk5OTk5OSAgSW5leGFjdCBSb3VuZGVkCitleHB4Mjk0IGV4cCAgMjMwMjU4NS4wOTI5OTM5NDYgLT4gOS45OTk5OTkwMDMxNTk4NzBFKzk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgyOTUgZXhwICAyMzAyNTg1LjA5Mjk5NDAzNiAtPiA5Ljk5OTk5OTkwMzE1OTgyMUUrOTk5OTk5IEluZXhhY3QgUm91bmRlZAorZXhweDI5NiBleHAgIDIzMDI1ODUuMDkyOTk0MDQ1IC0+IDkuOTk5OTk5OTkzMTU5ODIwRSs5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitleHB4Mjk3IGV4cCAgMjMwMjU4NS4wOTI5OTQwNDYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gMDwteDw8MSBlZmZlY3RzCitwcmVjaXNpb246ICAgIDMwCitleHB4MzIwIGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjUwMDAwOTc5MTY2NjE3IEluZXhhY3QgUm91bmRlZAorZXhweDMyMSBleHAgLTUuMDAwMDAwMDAwMDAwMEUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwMTI0OTk5OTk3OTE2NjY2NyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMjIgZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNDk5OTg5NzkxNjY3MTcgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDIwCitleHB4MzIzIGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjUwMDAgSW5leGFjdCBSb3VuZGVkCitleHB4MzI0IGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjUwMDAgSW5leGFjdCBSb3VuZGVkCitleHB4MzI1IGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjUwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDE0CitleHB4MzI2IGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDAuOTk5OTk5OTUwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitleHB4MzI3IGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitleHB4MzI4IGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAgSW5leGFjdCBSb3VuZGVkCistLSBvdmVycHJlY2lzZSBhbmQgMDwteDw8MQorcHJlY2lzaW9uOiAgICA4CitleHB4MzMwIGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDAuOTk5OTk5OTUgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzMxIGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDAuOTk5OTk5OTUgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzMyIGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDAuOTk5OTk5OTUgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDcKK2V4cHgzMzMgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMzQgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzMzUgZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMworZXhweDMzNiBleHAgLTQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDMzNyBleHAgLTUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDMzOCBleHAgLTUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorCistLSAwPHg8PDEgZWZmZWN0cworcHJlY2lzaW9uOiAgICAzMAorZXhweDM0MCBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI0OTk5OTAyMDgzMzI4ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzNDEgZXhwICA1LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAwNTAwMDAwMDEyNTAwMDAwMjA4MzMzMyAgSW5leGFjdCBSb3VuZGVkCitleHB4MzQyIGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjUwMDAxMDIwODMzMzggIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAyMAorZXhweDM0MyBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI1MDAgIEluZXhhY3QgUm91bmRlZAorZXhweDM0NCBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI1MDAgIEluZXhhY3QgUm91bmRlZAorZXhweDM0NSBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI1MDAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAxNAorZXhweDM0NiBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDM0NyBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMDA1MDAwMDAgIEluZXhhY3QgUm91bmRlZAorZXhweDM0OCBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAgIEluZXhhY3QgUm91bmRlZAorLS0gb3ZlcnByZWNpc2UgYW5kIDA8eDw8MQorcHJlY2lzaW9uOiAgICA4CitleHB4MzUwIGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwMSAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzUxIGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAwMDAwMSAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4MzUyIGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwMSAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDcKK2V4cHgzNTMgZXhwICA0Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzNTQgZXhwICA1LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHgzNTUgZXhwICA1LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMworZXhweDM1NiBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDM1NyBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDM1OCBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBjYXNlcyBuZWFyIDEgICAgICAgICAgICAgIC0tICAxIDIzNDU2Nzg5MDEyMzQ1Njc4OTAKK3ByZWNpc2lvbjogICAgMjAKK2V4cHg0MDEgZXhwIDAuOTk5OTk5OTk5OTk5OTYgIC0+IDIuNzE4MjgxODI4NDU4OTM2NTA0MSAgSW5leGFjdCBSb3VuZGVkCitleHB4NDAyIGV4cCAwLjk5OTk5OTk5OTk5OTk3ICAtPiAyLjcxODI4MTgyODQ1ODk2MzY4NjkgIEluZXhhY3QgUm91bmRlZAorZXhweDQwMyBleHAgMC45OTk5OTk5OTk5OTk5OCAgLT4gMi43MTgyODE4Mjg0NTg5OTA4Njk3ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MDQgZXhwIDAuOTk5OTk5OTk5OTk5OTkgIC0+IDIuNzE4MjgxODI4NDU5MDE4MDUyNSAgSW5leGFjdCBSb3VuZGVkCitleHB4NDA1IGV4cCAxLjAwMDAwMDAwMDAwMDAgICAtPiAyLjcxODI4MTgyODQ1OTA0NTIzNTQgIEluZXhhY3QgUm91bmRlZAorZXhweDQwNiBleHAgMS4wMDAwMDAwMDAwMDAxICAgLT4gMi43MTgyODE4Mjg0NTkzMTcwNjM1ICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MDcgZXhwIDEuMDAwMDAwMDAwMDAwMiAgIC0+IDIuNzE4MjgxODI4NDU5NTg4ODkxNyAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDE0CitleHB4NDExIGV4cCAwLjk5OTk5OTk5OTk5OTk2ICAtPiAyLjcxODI4MTgyODQ1ODkgIEluZXhhY3QgUm91bmRlZAorZXhweDQxMiBleHAgMC45OTk5OTk5OTk5OTk5NyAgLT4gMi43MTgyODE4Mjg0NTkwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MTMgZXhwIDAuOTk5OTk5OTk5OTk5OTggIC0+IDIuNzE4MjgxODI4NDU5MCAgSW5leGFjdCBSb3VuZGVkCitleHB4NDE0IGV4cCAwLjk5OTk5OTk5OTk5OTk5ICAtPiAyLjcxODI4MTgyODQ1OTAgIEluZXhhY3QgUm91bmRlZAorZXhweDQxNSBleHAgMS4wMDAwMDAwMDAwMDAwICAgLT4gMi43MTgyODE4Mjg0NTkwICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MTYgZXhwIDEuMDAwMDAwMDAwMDAwMSAgIC0+IDIuNzE4MjgxODI4NDU5MyAgSW5leGFjdCBSb3VuZGVkCitleHB4NDE3IGV4cCAxLjAwMDAwMDAwMDAwMDIgICAtPiAyLjcxODI4MTgyODQ1OTYgIEluZXhhY3QgUm91bmRlZAorLS0gb3ZlcnByZWNpc2UuLi4KK3ByZWNpc2lvbjogICAgNworZXhweDQyMSBleHAgMC45OTk5OTk5OTk5OTk5NiAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MjIgZXhwIDAuOTk5OTk5OTk5OTk5OTcgIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDIzIGV4cCAwLjk5OTk5OTk5OTk5OTk4ICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQyNCBleHAgMC45OTk5OTk5OTk5OTk5OSAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MjUgZXhwIDEuMDAwMDAwMDAwMDAwMSAgIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDI2IGV4cCAxLjAwMDAwMDAwMDAwMDIgICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQyNyBleHAgMS4wMDAwMDAwMDAwMDAzICAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMgorZXhweDQzMSBleHAgMC45OTk5OTk5OTk5OTk5NiAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MzIgZXhwIDAuOTk5OTk5OTk5OTk5OTcgIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDMzIGV4cCAwLjk5OTk5OTk5OTk5OTk4ICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQzNCBleHAgMC45OTk5OTk5OTk5OTk5OSAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg0MzUgZXhwIDEuMDAwMDAwMDAwMDAwMSAgIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NDM2IGV4cCAxLjAwMDAwMDAwMDAwMDIgICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDQzNyBleHAgMS4wMDAwMDAwMDAwMDAzICAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gYmFzaWNzIGF0IGxvdyBwcmVjaXNpb25zCitwcmVjaXNpb246IDMKK2V4cHg1MDEgZXhwICAtSW5maW5pdHkgICAgIC0+IDAKK2V4cHg1MDIgZXhwICAtMTAgICAgICAgICAgIC0+IDAuMDAwMDQ1NCAgIEluZXhhY3QgUm91bmRlZAorZXhweDUwMyBleHAgIC0xICAgICAgICAgICAgLT4gMC4zNjggICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTA0IGV4cCAgIDAgICAgICAgICAgICAtPiAxCitleHB4NTA1IGV4cCAgLTAgICAgICAgICAgICAtPiAxCitleHB4NTA2IGV4cCAgIDEgICAgICAgICAgICAtPiAyLjcyICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MDcgZXhwICAgMC42OTMxNDcxODEgIC0+IDIuMDAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUwOCBleHAgICAxMCAgICAgICAgICAgLT4gMi4yMEUrNCAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTA5IGV4cCAgK0luZmluaXR5ICAgICAtPiBJbmZpbml0eQorcHJlY2lzaW9uOiAyCitleHB4NTExIGV4cCAgLUluZmluaXR5ICAgICAtPiAwCitleHB4NTEyIGV4cCAgLTEwICAgICAgICAgICAtPiAwLjAwMDA0NSAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MTMgZXhwICAtMSAgICAgICAgICAgIC0+IDAuMzcgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUxNCBleHAgICAwICAgICAgICAgICAgLT4gMQorZXhweDUxNSBleHAgIC0wICAgICAgICAgICAgLT4gMQorZXhweDUxNiBleHAgICAxICAgICAgICAgICAgLT4gMi43ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTE3IGV4cCAgIDAuNjkzMTQ3MTgxICAtPiAyLjAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MTggZXhwICAgMTAgICAgICAgICAgIC0+IDIuMkUrNCAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUxOSBleHAgICtJbmZpbml0eSAgICAgLT4gSW5maW5pdHkKK3ByZWNpc2lvbjogMQorZXhweDUyMSBleHAgIC1JbmZpbml0eSAgICAgLT4gMAorZXhweDUyMiBleHAgIC0xMCAgICAgICAgICAgLT4gMC4wMDAwNSAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTIzIGV4cCAgLTEgICAgICAgICAgICAtPiAwLjQgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MjQgZXhwICAgMCAgICAgICAgICAgIC0+IDEKK2V4cHg1MjUgZXhwICAtMCAgICAgICAgICAgIC0+IDEKK2V4cHg1MjYgZXhwICAgMSAgICAgICAgICAgIC0+IDMgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorZXhweDUyNyBleHAgICAwLjY5MzE0NzE4MSAgLT4gMiAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitleHB4NTI4IGV4cCAgIDEwICAgICAgICAgICAtPiAyRSs0ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2V4cHg1MjkgZXhwICArSW5maW5pdHkgICAgIC0+IEluZmluaXR5CisKKy0tIG92ZXJmbG93cywgaW5jbHVkaW5nIHNvbWUgb3ZlcnByZWNpc2UgYm9yZGVybGluZXMKK3ByZWNpc2lvbjogICA3CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXhweDcwMSBleHAgIDEwMDAwMDAwMDAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDcwMiBleHAgIDEwMDAwMDAwMCAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDcwMyBleHAgIDEwMDAwMDAwICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDcwNCBleHAgIDEwMDAwMDAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDcwNSBleHAgIDEwMDAwMCAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDcwNiBleHAgIDEwMDAwICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDcwNyBleHAgIDEwMDAgICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDcwOCBleHAgIDg4Ni40OTUyNjA4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDcwOSBleHAgIDg4Ni40OTUyNjA3IC0+IDkuOTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitleHB4NzEwIGV4cCAgODg2LjQ5NTI3ICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzExIGV4cCAgODg2LjQ5NTI2ICAgLT4gOS45OTk5OTJFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxNgorZXhweDcyMSBleHAgIDg4Ni40OTUyNjA4MDI3MDc1ODgzIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDcyMiBleHAgIDg4Ni40OTUyNjA4MDI3MDc1ODgyIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitleHB4NzIzIGV4cCAgODg2LjQ5NTI2MDgwMjcwNzU5ICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzI0IGV4cCAgODg2LjQ5NTI2MDgwMjcwNzU4ICAgLT4gOS45OTk5OTk5OTk5OTk5MTdFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MjUgZXhwICA4ODYuNDk1MjYwODAyNzA3NiAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MjYgZXhwICA4ODYuNDk1MjYwODAyNzA3NSAgICAtPiA5Ljk5OTk5OTk5OTk5OTExN0UrMzg0IEluZXhhY3QgUm91bmRlZAorLS0gYW5kIGJ5IHNwZWNpYWwgcmVxdWVzdCAuLi4KK3ByZWNpc2lvbjogICAxNQorZXhweDczMSBleHAgIDg4Ni40OTUyNjA4MDI3MDggICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXhweDczMiBleHAgIDg4Ni40OTUyNjA4MDI3MDcgICAgIC0+IDkuOTk5OTk5OTk5OTk0MTJFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2V4cHg3MzMgZXhwICA4ODYuNDk1MjYwODAyNzA2ICAgICAtPiA5Ljk5OTk5OTk5OTk4NDEyRSszODQgSW5leGFjdCBSb3VuZGVkCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorZXhweDczNSBleHAgIDIzMDIuNTg1MDkyOTk0MDUgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHB4NzM2IGV4cCAgMjMwMi41ODUwOTI5OTQwNCAgICAtPiA5Ljk5OTk5OTk5OTk0MzE2RSs5OTkgSW5leGFjdCBSb3VuZGVkCitleHB4NzM3IGV4cCAgMjMwMi41ODUwOTI5OTQwMyAgICAtPiA5Ljk5OTk5OTk5OTg0MzE2RSs5OTkgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvd3MsIGluY2x1ZGluZyB1bmRlcmZsb3ctdG8temVybyBlZGdlIHBvaW50CitwcmVjaXNpb246ICAgNworbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2V4cHg3NTEgZXhwIC0xMDAwMDAwMDAwICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsCitleHB4NzUyIGV4cCAtMTAwMDAwMDAwICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAorZXhweDc1MyBleHAgLTEwMDAwMDAwICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKK2V4cHg3NTQgZXhwIC0xMDAwMDAwICAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsCitleHB4NzU1IGV4cCAtMTAwMDAwICAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAorZXhweDc1NiBleHAgLTEwMDAwICAgICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKK2V4cHg3NTcgZXhwIC0xMDAwICAgICAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsCitleHB4NzU4IGV4cCAtODgxLjg5MDA5ICAgIC0+ICAxLjAwMDAwMUUtMzgzIEluZXhhY3QgUm91bmRlZAorZXhweDc1OSBleHAgLTg4MS44OTAxICAgICAtPiAgOS45OTk5MUUtMzg0ICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorZXhweDc2MCBleHAgLTg4NSAgICAgICAgICAtPiAgNC40NjA1RS0zODUgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorZXhweDc2MSBleHAgLTg4OCAgICAgICAgICAtPiAgMi4yMjFFLTM4NiAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorZXhweDc2MiBleHAgLTg5MCAgICAgICAgICAtPiAgMy4wMUUtMzg3ICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorZXhweDc2MyBleHAgLTg5Mi45ICAgICAgICAtPiAgMS43RS0zODggICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorZXhweDc2NCBleHAgLTg5MyAgICAgICAgICAtPiAgMS41RS0zODggICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorZXhweDc2NSBleHAgLTg5My41ICAgICAgICAtPiAgOUUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorZXhweDc2NiBleHAgLTg5NS43MDU2ICAgICAtPiAgMUUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorZXhweDc2OSBleHAgLTg5NS44ICAgICAgICAtPiAgMUUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorZXhweDc3MCBleHAgLTg5NS43MyAgICAgICAtPiAgMUUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorZXhweDc3MSBleHAgLTg5Ni4zOTg3ICAgICAtPiAgMUUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorZXhweDc3MiBleHAgLTg5Ni4zOTg4ICAgICAtPiAgMEUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkCitleHB4NzczIGV4cCAtODk4LjAwODEgICAgIC0+ICAwRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsIENsYW1wZWQKK2V4cHg3NzQgZXhwIC04OTguMDA4MiAgICAgLT4gIDBFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwgQ2xhbXBlZAorCistLSBzcGVjaWFsIHZhbHVlcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK2V4cHg4MjAgZXhwICAgSW5mICAgIC0+IEluZmluaXR5CitleHB4ODIxIGV4cCAgLUluZiAgICAtPiAwCitleHB4ODIyIGV4cCAgIE5hTiAgICAtPiBOYU4KK2V4cHg4MjMgZXhwICBzTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gcHJvcGFnYXRpbmcgTmFOcworZXhweDgyNCBleHAgIHNOYU4xMjMgLT4gIE5hTjEyMyBJbnZhbGlkX29wZXJhdGlvbgorZXhweDgyNSBleHAgLXNOYU4zMjEgLT4gLU5hTjMyMSBJbnZhbGlkX29wZXJhdGlvbgorZXhweDgyNiBleHAgICBOYU40NTYgLT4gIE5hTjQ1NgorZXhweDgyNyBleHAgIC1OYU42NTQgLT4gLU5hTjY1NAorZXhweDgyOCBleHAgICBOYU4xICAgLT4gIE5hTjEKKworLS0gSW52YWxpZCBvcGVyYXRpb25zIGR1ZSB0byByZXN0cmljdGlvbnMKKy0tIFtuZXh0IHR3byBwcm9iYWJseSBza2lwcGVkIGJ5IG1vc3QgdGVzdCBoYXJuZXNzZXNdCitwcmVjaXNpb246IDEwMDAwMDAwMAorZXhweDkwMSBleHAgIC1JbmZpbml0eSAgICAgLT4gTmFOIEludmFsaWRfY29udGV4dAorcHJlY2lzaW9uOiAgOTk5OTk5OTkKK2V4cHg5MDIgZXhwICAtSW5maW5pdHkgICAgIC0+IE5hTiBJbnZhbGlkX2NvbnRleHQKKworcHJlY2lzaW9uOiA5CittYXhFeHBvbmVudDogICAxMDAwMDAwCittaW5FeHBvbmVudDogICAtOTk5OTk5CitleHB4OTAzIGV4cCAgLUluZmluaXR5ICAgICAtPiBOYU4gSW52YWxpZF9jb250ZXh0CittYXhFeHBvbmVudDogICAgOTk5OTk5CittaW5FeHBvbmVudDogICAtOTk5OTk5CitleHB4OTA0IGV4cCAgLUluZmluaXR5ICAgICAtPiAwCittYXhFeHBvbmVudDogICAgOTk5OTk5CittaW5FeHBvbmVudDogIC0xMDAwMDAwCitleHB4OTA1IGV4cCAgLUluZmluaXR5ICAgICAtPiBOYU4gSW52YWxpZF9jb250ZXh0CittYXhFeHBvbmVudDogICAgOTk5OTk5CittaW5FeHBvbmVudDogICAtOTk5OTk4CitleHB4OTA2IGV4cCAgLUluZmluaXR5ICAgICAtPiAwCisKKy0tCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIE51bGwgdGVzdAorZXhweDkwMCBleHAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKworLS0gUmFuZG9tcyBQPTUwLCB3aXRoaW4gMC05OTkKK1ByZWNpc2lvbjogNTAKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitleHB4MTUwMSBleHAgNjU2LjM1Mzk3OTUwNTkwMjg1NjEyMjY2MDk1NTk2NTM5OTM0MjEzOTQzODcyODg1NzI4ICAtPiAxLjEyNDM3NTc2MTA2NDAzMTk3ODM2MTExNzg1Mjg4Mzk2NTI2NzIwNjI4MjAwNDAzMTRFKzI4NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTAyIGV4cCAwLjkzNjIwNTcxMDkzNjUyODAwMjI1MDM4NTUwNjAwNzgwMzIyODMxMjM2MDgyNzgxNDcxIC0+IDIuNTUwMjg2NTEzMDk4NjE3NjY4OTE5OTcxMTg1NzgyNTc3MTMxMTE3ODA0Njg0MjAwOSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTAzIGV4cCAwLjAwMDAwMDAwMDAwMDAwMDA4MzQwNzg1ODU2NjAxNTE0NzE0MTgzMzczODc0MTA1NzkxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDgzNDA3ODU4NTY2MDE1MTUwNjIwMjY5MTc0MDI1MjUxMiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTA0IGV4cCAwLjAwMDA5MTc0MDU3MjYyODg3Nzg5NjI1NzQ1NTc0Njg2NTQ1MTYzMTY4Nzg4NDU2MjAzIC0+IDEuMDAwMDkxNzQ0NzgwOTIzOTAwNTE0NjcyMjM0MTI1MTUyNDA4MTAwNjA1MTQ3MzI3MyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTA1IGV4cCAzMy45MDkxMTY4OTc5NzM3OTc3MzU2NTc3NTE1OTEwMTQ5MjY2MjkwNTExMTc1NDEyNDMgIC0+IDUzMjc3MzE4MTAyNTAwMi4wMzU0MzYxODkwMTMwNjcyNjQ5NTg3MDQ3NjYxNzIzMjIyOSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTA2IGV4cCAwLjAwMDAwNzQwNDcwNDEzMDA0NDA2NTkyMTI0NTc1Mjk1Mjc4NDU2OTM2ODA5NTg3MzExIC0+IDEuMDAwMDA3NDA0NzMxNTQ0OTMzMzU5MDA2NjM5NTY3MDMwNjEzNTU2Nzg4OTIxMDgxNCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTA3IGV4cCAwLjAwMDAwMDAwMDAwMTI0ODU0OTIyMjIyMTA4ODAyNDUzNzQ2OTIyNDgzMDcxNDQ1NDkyIC0+IDEuMDAwMDAwMDAwMDAxMjQ4NTQ5MjIyMjIxODY3NDYyMTE3NjIzOTkxMTQyNDk2ODI2MyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTA4IGV4cCA0LjE3OTMyODA2NzQxNTU2NTk3OTQyODY5NTExNTk0MzA2NTEyNTgzNTYwMTQzOTEzODIgIC0+IDY1LjMyMTk0NjUyMDE0NzE5OTQwNDE5OTc4NzgxMTMzNjg2MDA4Nzk3NTExODI3ODE4NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTA5IGV4cCA0ODUuNDM1OTU3NDU0NjA2NTU4OTM3NDYxNzk4OTAyNTU1Mjk5MTkyMjE1NTAyMDE2ODYgIC0+IDYuNjM5ODQwMzkyMDQ1OTYxNzI1NTk1MDQ3Njk1MzEyOTM3NzQ1OTg0NTM2NjU4NTQ2M0UrMjEwIEluZXhhY3QgUm91bmRlZAorZXhweDE1MTAgZXhwIDAuMDAwMDAwMDAwMDM1NDcyNTk4MDY1OTA4NTYwMzI1Mjc4NzUxNTc4MzAzMjgxNTY1OTcgLT4gMS4wMDAwMDAwMDAwMzU0NzI1OTgwNjY1Mzc3MTI5MzIwNTg5NDA2NzE1MDAwNjg1NTE1IEluZXhhY3QgUm91bmRlZAorZXhweDE1MTEgZXhwIDAuMDAwMDAwMDAwMDAwMDA3NTk2MjE0OTczMzkxMDQwNDc5MzA2MTY0Nzg2MzUwNDI2NzggLT4gMS4wMDAwMDAwMDAwMDAwMDc1OTYyMTQ5NzMzOTEwNjkzMzA1NDcxMjU3NzE1NDYzODg3IEluZXhhY3QgUm91bmRlZAorZXhweDE1MTIgZXhwIDkuNzk1OTE2ODgyMTc2MDMzOTMwNDU3MTU5NTQ3NDQ4MDY0MDI4NjA3MjcyMDIzMzc5NiAgLT4gMTc5NjAuMjYxMTQ2MDQyOTU1MTc5MTY0MzAzNjUzNDEyNjUwNzUxNjgxNDM2MzUyNDM3IEluZXhhY3QgUm91bmRlZAorZXhweDE1MTMgZXhwIDAuMDAwMDAwMDA1NjY2NDIwMDYyNTgyOTA1MjY3ODM5MDE0NTExOTQ5NDMxNjQ1MzU1ODEgLT4gMS4wMDAwMDAwMDU2NjY0MjAwNzg2MzcwNjM0NjA5ODMyNDM4ODE1NjY1MjQ5MzQ3NjUwIEluZXhhY3QgUm91bmRlZAorZXhweDE1MTQgZXhwIDc0MS4yOTg4ODc5MTEzNDI5ODE5NDA4ODgyNzU3MjM3NDcxODk0MDkyNTgyMDAyNzM1NCAgLT4gOC43NTAxNjk0MDA2MzE3MzMyODA4MTI4OTQ2NjY2NDAyNjIyNDMyMDY0OTIzMTk4NzMxRSszMjEgSW5leGFjdCBSb3VuZGVkCitleHB4MTUxNSBleHAgMDMyLjc1NTczMDAzNTUyNTE3NjY4ODA4NTI5MDk5ODk3MTUzNzEwODg3MDE0OTQ3OTM1ICAtPiAxNjgxMjUxOTY1Nzg2NzguMTc3MjU4NDExMDg2MTc5NTU5MDQ0MjUzNDU2MzEwOTIzMzkgSW5leGFjdCBSb3VuZGVkCitleHB4MTUxNiBleHAgNDIuMzMzNzAwNzI2NDI5MzMzMzA4NTk0MjY1NTUzNDIyOTAyNDYzNzM3Mzk5NDM3NjQ0ICAtPiAyNDI4MjQ1Njc1ODY0MTcyNDc1LjQ2ODExMTk0OTMwNDU2NTc3OTczMDkzNjk2NzIwMTIgSW5leGFjdCBSb3VuZGVkCitleHB4MTUxNyBleHAgMC4wMDAwMDAwMDAwMDAwMDU1OTY4MjYxNjg3NjQ5MTg4ODE5NzYwOTE1ODgwMjgzNTc5OCAtPiAxLjAwMDAwMDAwMDAwMDAwNTU5NjgyNjE2ODc2NDkzNDU0NDIwNzY3MzI3Mzk1NzcwNDkgSW5leGFjdCBSb3VuZGVkCitleHB4MTUxOCBleHAgMC4wMDAwMDAwMDAwMDA4MDcwMzY4ODY2ODI4MDE5MzU4NDc1ODMwMDk3MzU0OTQ4NjMxMiAtPiAxLjAwMDAwMDAwMDAwMDgwNzAzNjg4NjY4MzEyNzU5MDExNTgxNjQzMjE4Njc5MTQzNDIgSW5leGFjdCBSb3VuZGVkCitleHB4MTUxOSBleHAgNjQwLjcyMzk2MDEyNzk2NTA5NDgyMzgyNzEyODkxNzA5MDcyNTcwNjUzNjA2ODM4MjUxICAtPiAxLjgzMTgwOTQ5OTA2ODMzOTQyMjkzMDQxMzMwNjg5ODM5MTQyMzY5OTUzMjY4OTEwNDVFKzI3OCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTIwIGV4cCAwLjAwMDAwMDAwMDAwMDAwNTA5NDU4OTIyMTY3NjMxMDcxNDE2OTQ4MTEyMjE5NTEyMjI0IC0+IDEuMDAwMDAwMDAwMDAwMDA1MDk0NTg5MjIxNjc2MzIzNjkxNTg5MTQ5OTMyNDM1ODU1NiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTIxIGV4cCA2Ljc2NzAzOTQzMTQzMTUyMDYzNzg2MjUyMjE1ODM5NzM0MTQ2NjA3Mjc5NjAyNDEzOTUgIC0+IDg2OC43MzYxMzAxMjgyMjAzMTM2NzgwNjI0ODY5NzA5Mjg4NDQxNTExOTU2ODI3MTMxNSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTIyIGV4cCAwNC44MjMyMTc0MDc0MTI5NjM1MDY2MzgyNjcyMjY4OTEwMjQxMzgwNTQ3ODMxMjI1NDggIC0+IDEyNC4zNjQ1NzkyOTU4ODgzNzEyOTczMTgyMTA3NzU4NjcwNTUwNTU2NTkwNDIwNTM2NiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxNTIzIGV4cCAxOTMuNTEzMDc4Nzg3MDExOTY0MDM5OTEyMDg0ODI1MjAxMTUzNTk2OTAxMDYxNDM2MTUgIC0+IDEuMTAwNjgzMDg3Mjg1NDcxNTY3NzM5MDkxNDY1NTQ1MjI2MTU1MDc2ODk1NzU3NjAzNEUrODQgSW5leGFjdCBSb3VuZGVkCitleHB4MTUyNCBleHAgNS43MzA3NzQ5MDM4MzAzNjUwNTM5MjAwMzQ1OTAxMjEwNDk3MDE1NjE3MzkzOTcwNDYzICAtPiAzMDguMjA4MDA3NDMxMDY4NDMwODM1MjI3MjE1MjM3MTU2NDU5NTA1NzQ4NjY0OTUxOTYgSW5leGFjdCBSb3VuZGVkCitleHB4MTUyNSBleHAgMC4wMDAwMDAwMDAwMDA5NTIxNzgyNTE5OTc5Nzk2NTIwMDU0MTE2OTEyMzc0MzUwMDI2NyAtPiAxLjAwMDAwMDAwMDAwMDk1MjE3ODI1MTk5ODQzMjk3MzcxNzIwMDc5OTEzOTAzODEyNzMgSW5leGFjdCBSb3VuZGVkCitleHB4MTUyNiBleHAgMC4wMDAyNzEzMTQ0MDk0OTE4MzM3MDk2NjM5MzY4MjYxNzkzMDE1MzQ5NTAyODkxOTE0MCAtPiAxLjAwMDI3MTM1MTIxODU3NTEwMjI5MDYwNTgxNjA0ODA2MDY1OTg3NTQ5MTM2MDczNjQgSW5leGFjdCBSb3VuZGVkCitleHB4MTUyNyBleHAgMC4wMDAwMDAwMDA2NDUwMzA1OTExNDY4MDY4MjM0MzAwMjMxNTY2MjA2OTI3MjcwNzEyMyAtPiAxLjAwMDAwMDAwMDY0NTAzMDU5MTM1NDgzOTA1NTIzMjM1MTc0MDM2MTMxMzU0OTY2MzMgSW5leGFjdCBSb3VuZGVkCitleHB4MTUyOCBleHAgMC4wMDAwMDAwMDAwMDAwMDA5NTYxNjY0MzUwNjUyNzI4ODg2NjIzNTIzODU0ODQ0MDU5MyAtPiAxLjAwMDAwMDAwMDAwMDAwMDk1NjE2NjQzNTA2NTI3MzM0NTc4OTQ3ODE1ODIwMDkwOTQgSW5leGFjdCBSb3VuZGVkCitleHB4MTUyOSBleHAgMC4wMDAwMDAwMDAwMDAwMDA4NjQ0OTk0MjgxMTY3ODY1MDI0NDQ1OTU1MDI1Mjc0MzQzMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDg2NDQ5OTQyODExNjc4Njg3NjEyNDIyNjEwOTY1Mjk5ODYgSW5leGFjdCBSb3VuZGVkCitleHB4MTUzMCBleHAgMC4wNjIyMzQ4ODM1NTYzNTM1OTk2NTY4MzA1MzE1NzcyOTIwNDk4ODM4MTg4NzYyMTg1MCAtPiAxLjA2NDIxMjI4MTMzOTI0MDY2NTc3ODk2ODg5MzE4Mzg5MTkzMjM4MjYyNTA2MzA4MzEgSW5leGFjdCBSb3VuZGVkCitleHB4MTUzMSBleHAgMC4wMDAwMDQwMDcxMDgwNzgwNDQyOTQzNTUwMjY1NzEzMTkxMjMwODY4MDY3NDA1NzA1MyAtPiAxLjAwMDAwNDAwNzExNjEwNjUxMjU5MjU2MjA4OTAwMTkzMTk4MzIxMjc4NjM1NTkyNjAgSW5leGFjdCBSb3VuZGVkCitleHB4MTUzMiBleHAgODUuNTIyNzk2ODk0NzQ0NTc2MjExNTczMjMyMDU1NDk0NTUxNDI5Mjk3ODc4NDEzMDE3ICAtPiAxMzg3MDA3MzY4NjQwNDIyODQ1Mjc1Nzc5OTc3MDI1MTA4NTE3Ny44NTMzMzczNjg5MzUgSW5leGFjdCBSb3VuZGVkCitleHB4MTUzMyBleHAgOS4xNDk2NzIwODExMzYzNjc4Njk2OTM4MDM2Mzc5NzU2NjYzNTQ4MzUzMzk5OTU0MzYzICAtPiA5NDExLjM1MzcxMjI4MzI3NDMzODY3ODM1OTc2MjkxNjE3NjMwNTczNzAwMzQ0OTUxNTcgSW5leGFjdCBSb3VuZGVkCitleHB4MTUzNCBleHAgOC4yMjE1NzA1MjQwNzg4Mjk0NDcyOTQ0MzgyMDU2MzMwNTE2NzM4NTc3Nzg1MTc3OTQyICAtPiAzNzIwLjM0MDY4MTMzODMwNzY5NTM4OTk2NTQ3MDE2MTUwODQ0MjU1OTgzNzc3NTgxODkgSW5leGFjdCBSb3VuZGVkCitleHB4MTUzNSBleHAgMC4wMDAwMDAwMDAxNTc3MjA2NDU2OTY0MDYxMzE0MjgyMzIwMzcyNjgyMTA3NjIzOTU2MSAtPiAxLjAwMDAwMDAwMDE1NzcyMDY0NTcwODg0NDAzMjQ2ODMzMTU3ODgzNTg5MjYxMjk4MzAgSW5leGFjdCBSb3VuZGVkCitleHB4MTUzNiBleHAgMC41ODE3OTM0NjQ3Mzk1OTUzMTQzMjYyNDE1MzU3Njg4MzQ0MDYyNTUzODAxNzUzMjQ4MCAtPiAxLjc4OTI0NDUwMTgyNzUzNjAxNjM3OTcwMjIzNzI2NTU4MzcxODg0MjMxOTQ4NjM2MDUgSW5leGFjdCBSb3VuZGVkCitleHB4MTUzNyBleHAgMzMuNTU1NzI2MTk3MTQ5NTI1MDYxNDU1NTE3Nzg0ODcwNTcwNDcwODMzNDk4MDk2NTU5ICAtPiAzNzQxNjgwNjk4OTYzMjQuNjI1NzgwNzMxNDg5OTM1MjY2MjYzMDcwOTU4NTQ0MDc5NTIgSW5leGFjdCBSb3VuZGVkCitleHB4MTUzOCBleHAgOS43ODk4MDc5ODAzOTA2MjE1MDk0MTQwMDEwMDA5NTgzMzc1NTM3MjU5ODEwMzk4NjU5ICAtPiAxNzg1MC44NzgxMTk5MTIyMDg4ODgyMTcxMDA5OTgwMTk5ODY2MzQ2MjAzNjg1Mzg0MjYgSW5leGFjdCBSb3VuZGVkCitleHB4MTUzOSBleHAgODkuMTU3Njk3MzI3MTc0NTIxNTQyNTAyNDQ3OTUzMDMyNTM2NTQxMDM4NjM2OTY2MzQ3ICAtPiA1MjU2NDkxNTIzMjAxNjY1MDM3NzEyMjQxNDkzMzA0NDgwODk1NTAuNjcyOTM4MjkyMjcgSW5leGFjdCBSb3VuZGVkCitleHB4MTU0MCBleHAgMjUuMDIyOTQ3NjAwMTIzMzI4OTEyMDI5MDUxODk3MTcxMzE5NTczMzIyODg4NTE0ODg1ICAtPiA3MzY3NjM0MzQ0Mi45NTI1MTc4MjQzNDU0MzE0Mzc2ODMxNTMzMDQ2NDU4NTE5NjA1MjQgSW5leGFjdCBSb3VuZGVkCisKKy0tIGV4cCgxKSBhdCAzNAorUHJlY2lzaW9uOiAzNAorZXhweDEyMDAgZXhwIDEgLT4gMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjIgSW5leGFjdCBSb3VuZGVkCisKKy0tIFJhbmRvbXMgUD0zNCwgd2l0aGluIDAtOTk5CitQcmVjaXNpb246IDM0CittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCitleHB4MTIwMSBleHAgMzA5LjU5NDg4NTU4MjE1MTAyMTI5OTY3MDA2NDUwODcxODggIC0+IDIuODUzMzE5NjkyOTAxMzg3NTIxMjAxNzM4MDE1MDUwNzI0RSsxMzQgSW5leGFjdCBSb3VuZGVkCitleHB4MTIwMiBleHAgOS45MzY1NDMwNjg3MDYyMTE0MjA0MjI4MDM5NjI2ODAxNjQgIC0+IDIwNjcyLjE1ODM5MjAzMTcxODc3NDc2NTExMDkzMjc2MDIyIEluZXhhY3QgUm91bmRlZAorZXhweDEyMDMgZXhwIDYuMzA3ODcwMzIzODgxNTA1Njg0NDI5ODM5NDkxNzA3OTA4ICAtPiA1NDguODc0Nzc3NzA1NDYzNzI5NjEzNzI3NzM5MTc1NDY2NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjA0IGV4cCAwLjAwMDM1NDMyODEzODk0Mzg0MjA1MzUyMDEzMDgyODI1MDMgLT4gMS4wMDAzNTQzOTA5MjA1NzM3NDYxNjQ3MzMzNTA4NDMxNTUgSW5leGFjdCBSb3VuZGVkCitleHB4MTIwNSBleHAgMC4wMDAwMDM3MDg3NDUzMzYzOTE4Mzc1NTk4Mzk0OTIwMjI5IC0+IDEuMDAwMDAzNzA4NzUyMjEzNzk2MzI0ODQxOTIwMTg5MzIzIEluZXhhY3QgUm91bmRlZAorZXhweDEyMDYgZXhwIDAuMDAyMDQzMjMxMjY4NzUxMjQzODA0MDIyMjQ0NDExNjU4NSAtPiAxLjAwMjA0NTMyMDA4ODE2NDgyNjAxMzU2MTYzMDk3NTMwOCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjA3IGV4cCA2Ljg1NjMxMzM0MDAzMjE3NzY3MjU1MDM0MzIxNjEyOTU4NiAgLT4gOTQ5Ljg1ODc5ODE2MDQxNDQxNDc5ODM1ODk2NjA1MjQzOTYgSW5leGFjdCBSb3VuZGVkCitleHB4MTIwOCBleHAgMC4wMDAwMDAwMDAwNDAyMDk0OTI4MzMzODE1NjQzMzI2NDE4IC0+IDEuMDAwMDAwMDAwMDQwMjA5NDkyODM0MTg5OTY1OTg5NjEyIEluZXhhY3QgUm91bmRlZAorZXhweDEyMDkgZXhwIDAuMDA0OTYxMDc4NDcyMjQxMjExNzYzMjY0NzAwMzU0NTgzOSAtPiAxLjAwNDk3MzQwNDk5NzkwMTk4NzAzOTU4OTAyOTI3NzgzMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjEwIGV4cCAwLjAwMDA4OTE0NzE4ODM3MjQwNjY5MDk3NDY3ODY3MDI2ODYgLT4gMS4wMDAwODkxNTExNjIxMDEwODU0MTI3ODAwODgyNjY2OTkgSW5leGFjdCBSb3VuZGVkCitleHB4MTIxMSBleHAgMDguNTk5NzkxNzAzNzYwNjE4OTA2ODQ3MjMyMTExMTI1NjYgIC0+IDU0MzAuNTI4MzE0OTIwOTA1NzE0NjE1MzM5MjczNzM4MDk3IEluZXhhY3QgUm91bmRlZAorZXhweDEyMTIgZXhwIDkuNDczMTE3MDM5MzQxMDAzODU0ODcyNzc4MTEyNzUyNTkwICAtPiAxMzAwNS4zNjIzNDMzMTIyNDk1MzQ2MDA1NTg5NzkxMzkxNyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjEzIGV4cCAwLjA5OTkwNjA3MjQ2OTIyMDc2NDg0Mjk5Njk5OTkzMTAxMTggLT4gMS4xMDUwNjcxMTY5NzUxOTA2MDIyOTYwNTI3MDA3MjY4MDIgSW5leGFjdCBSb3VuZGVkCitleHB4MTIxNCBleHAgMC4wMDAwMDAwOTI3ODA0NTMzNTU1ODc3ODg0MDgyMjY5MjQ3IC0+IDEuMDAwMDAwMDkyNzgwNDU3NjU5Njk0MTgzOTU0NzQwNzcyIEluZXhhY3QgUm91bmRlZAorZXhweDEyMTUgZXhwIDAuMDM3NjU3ODU4Mzg3Mjg4OTkxNjI5ODc3MjgxODI2NTY3NyAtPiAxLjAzODM3NTkwMDQ4OTc3MTk0NjQ3Nzg1NzgxODQ0NzU1NiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjE2IGV4cCAyNjEuNjg5NjQxMTY5NzUzOTUyNDkxMTUzNjExNjcxMjMwNyAgLT4gNC40NzA2MTM1NjIxMjc0NjUwOTUyNDE2MDAxNzQ5NDE0NjBFKzExMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjE3IGV4cCAwLjA3MDk5OTc0MjMyNjkxNjI5ODA4NzU4MjQyMTM4ODk2MjYgLT4gMS4wNzM1ODA5NDkyMzU0MDc5NDk0MTc4MTQ0ODU1MzMxNzIgSW5leGFjdCBSb3VuZGVkCitleHB4MTIxOCBleHAgMC4wMDAwMDAwNDQ0NjA1NTgzMjk1MTY5ODk1MjM1NjU4NzMxIC0+IDEuMDAwMDAwMDQ0NDYwNTU5MzE3ODg3NjI3NjU3NTkzOTAwIEluZXhhY3QgUm91bmRlZAorZXhweDEyMTkgZXhwIDAuMDAwMDAyMTIyNDA3Mjg1NDc3NzUxMjI4MTM2OTgxNTE4NSAtPiAxLjAwMDAwMjEyMjQwOTUzNzc4NTY4NzM5MDYzMTA3MDkwNiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjIwIGV4cCA1NDcuNTE3NDQ2MjU3NDE1Njg4NTQ3MzU1ODQ4NTQ3NTA1MiAgLT4gNi4wNzg2MjkyNDczODM4MDc5NDI2MTIxMTQ1Nzk3Mjg2NzJFKzIzNyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjIxIGV4cCAwLjAwMDAwMDkwNjc1OTgwNDE2MTUxOTIwMDIzMzk4NDQ2NzAgLT4gMS4wMDAwMDA5MDY3NjAyMTUyNjgzMTQ2ODAxMTUzNzQzODcgSW5leGFjdCBSb3VuZGVkCitleHB4MTIyMiBleHAgMC4wMzE2NDc2NTAwMzA4MDY1MzY1ODAzNDU1NTMzMjQ0NjAzIC0+IDEuMDMyMTUzNzYxODgwMTg3OTc3NjU4Mzg3OTYxNzY5MDM0IEluZXhhY3QgUm91bmRlZAorZXhweDEyMjMgZXhwIDg0LjQ2MTYwNTMwMzc3NjQ1MTAxODMzOTk2NzA2Mzg0NDczICAtPiA0Ljc5OTY0NDk5NTg5Nzk2ODM4MzUwMzI2OTg3MTY5Nzg1NkUrMzYgSW5leGFjdCBSb3VuZGVkCitleHB4MTIyNCBleHAgMC4wMDAwMDAwMDAwNTIwNTk5NzQwMjkwODQ4MDE4OTA0MTQ1IC0+IDEuMDAwMDAwMDAwMDUyMDU5OTc0MDMwNDM5OTIyMzM4MzkzIEluZXhhY3QgUm91bmRlZAorZXhweDEyMjUgZXhwIDAuMDAwMDAwNjc0ODUzMDY0MDA5MzYyMDY2NTY1MTcyNjcwOCAtPiAxLjAwMDAwMDY3NDg1MzI5MTcyMjc0MjI5MjMzMTgxMjk5NyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjI2IGV4cCAwLjAwMDAwMDAxMTY4NTMxMTk3NjEwNDIwMjA1MDc5MTYxNjkgLT4gMS4wMDAwMDAwMTE2ODUzMTIwNDQzNzc0NjAzMDYxNjUyMDMgSW5leGFjdCBSb3VuZGVkCitleHB4MTIyNyBleHAgMC4wMDIyNTkzODE4MDk0MjU4NjM2NzI3NjE2ODg2NjkzMjgwIC0+IDEuMDAyMjYxOTM2MTM1ODc2ODkzNzA3MDk0ODQ1NTQzNDYxIEluZXhhY3QgUm91bmRlZAorZXhweDEyMjggZXhwIDAuMDAyOTM5ODg1NzY3MzQ3ODkxMjI0OTg1NjUwOTY2NzUxNyAtPiAxLjAwMjk0NDIxMTQ2OTQ5NTA4NjgxMzA4NzY1MTI4NzAxMiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjI5IGV4cCAwLjc1MTE0ODAwMjk5Mjg4MDI3NzUzNzYyNzA1NTc2MzY5NjMgLT4gMi4xMTk0MzE3MzQ1MTAzMjAxNjk4MDY5NzY1NjkzNjY3ODkgSW5leGFjdCBSb3VuZGVkCitleHB4MTIzMCBleHAgMTc0Ljk0MzE5NTIxNzY3NTA2NzExNTA4ODY0MjMwNDg0NDcgIC0+IDkuNDgxMjIyMzA1Mzc0OTU1MDExNDY0NjE5NDY4MDQ0MDUxRSs3NSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjMxIGV4cCAwLjAwMDA4MTA2MTI0NTE2OTQxMzYxMjkxOTk4OTUxNjQ0MjQgLT4gMS4wMDAwODEwNjQ1MzA3MjA5MjQxODY2MTUxNDk2NDY5MjAgSW5leGFjdCBSb3VuZGVkCitleHB4MTIzMiBleHAgNTEuMDY4ODg5ODk3MDI2NjkyODgxODA5NDYyNzI0OTkwMzUgIC0+IDE1MDk4NjEzODg4NjE5MTY1MDczOTU5Ljg5ODk2MDE4NzQ5IEluZXhhY3QgUm91bmRlZAorZXhweDEyMzMgZXhwIDAuMDAwMDAwMDAwNTk5Mjg4NzU5OTQzNzA5MzY1MTQ5NDUxMCAtPiAxLjAwMDAwMDAwMDU5OTI4ODc2MDEyMzI4Mjg3NDA4Mjc1OCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjM0IGV4cCA3MTQuODU0OTA0Njc2MTA1NDg1NjMxMTEwODgyODkwMzk3MiAgLT4gMi44Njc3NDQ1NDQ4OTEwODExMTczODE1OTUwODA0ODA3ODRFKzMxMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjM1IGV4cCAwLjAwMDAwMDAwMDQ0NjgyNDc4MDI5OTA2NDM2NDU2MDcxMTAgLT4gMS4wMDAwMDAwMDA0NDY4MjQ3ODAzOTg4OTA1NTY3MjAyMzMgSW5leGFjdCBSb3VuZGVkCitleHB4MTIzNiBleHAgODMxLjU4MTgxNTE1ODk4OTAzNjYzMjM1NTE2NzIwNDM3MDkgIC0+IDEuNDE3MDc3NDA5MTgyNjI0OTY5NDM1OTM4MDYyMjYxNjU1RSszNjEgSW5leGFjdCBSb3VuZGVkCitleHB4MTIzNyBleHAgMC4wMDAwMDAwMDA2ODY4MzIzODI1MTc5NjA1NzQ3MTA4MDQ0IC0+IDEuMDAwMDAwMDAwNjg2ODMyMzgyNzUzODI5OTM1NjAyNDU0IEluZXhhY3QgUm91bmRlZAorZXhweDEyMzggZXhwIDAuMDAwMDAwMTMwNjc0MDI2NjQwODk3Njg0MDIyODQ0MDI1NSAtPiAxLjAwMDAwMDEzMDY3NDAzNTE3ODc0ODY3NTE4NzY0ODA5OCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMjM5IGV4cCAwLjMxODIyMTA2MDkwMjIyNjc3MDQ4MTE1MDI0MTIzMzUxNjMgLT4gMS4zNzQ2ODAxMTU2Njc3OTgxODU3NTg5MjcyNDc4OTQ4NTkgSW5leGFjdCBSb3VuZGVkCitleHB4MTI0MCBleHAgMC4wMTQ3NzQxMjM0MTc5MTA0NDM3NDQwMjY0NjQ0Mjk1NTAxIC0+IDEuMDE0ODgzODAwMjM5OTUwNjgyNjI4Mjc3NTM0ODM5MjIyIEluZXhhY3QgUm91bmRlZAorCistLSBSYW5kb21zIFA9MTYsIHdpdGhpbiAwLTk5CitQcmVjaXNpb246IDE2CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworZXhweDExMDEgZXhwIDguNDczMDExNTI3MDEzNzI0ICAtPiA0NzgzLjkwMDY0Mzk2OTI0NiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTAyIGV4cCAwLjAwMDAwNTU3NTMwMjI3NjQgLT4gMS4wMDAwMDU1NzUzMTc4MTggSW5leGFjdCBSb3VuZGVkCitleHB4MTEwMyBleHAgMC4wMDAwMzIzNDc0MTE0NDgyIC0+IDEuMDAwMDMyMzQ3OTM0NjMxIEluZXhhY3QgUm91bmRlZAorZXhweDExMDQgZXhwIDY0LjU0Mzc0MTM4NTQ0MTY2ICAtPiAxLjA3Mzk2NjQ3NjE3MzUzMUUrMjggSW5leGFjdCBSb3VuZGVkCitleHB4MTEwNSBleHAgOTAuNDcyMDMyNDY0MTY1NjkgIC0+IDEuOTU2NjEwODg3MjUwNjQzRSszOSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTA2IGV4cCA5LjI5OTkzMTUzMjM0Mjc1NyAgLT4gMTA5MzcuMjcwMzMzMjUyMjcgSW5leGFjdCBSb3VuZGVkCitleHB4MTEwNyBleHAgOC43NTk2Nzg0Mzc4NTIyMDMgIC0+IDYzNzIuMDYyMjM0NDk1MzgxIEluZXhhY3QgUm91bmRlZAorZXhweDExMDggZXhwIDAuMDAwMDkzMTc1NTEyNzE3MiAtPiAxLjAwMDA5MzE3OTg1MzY5MCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTA5IGV4cCAwLjAwMDAwMjgxMDExNTgzNzMgLT4gMS4wMDAwMDI4MTAxMTk3ODYgSW5leGFjdCBSb3VuZGVkCitleHB4MTExMCBleHAgMC4wMDAwMDA4MDA4MTMwOTE5IC0+IDEuMDAwMDAwODAwODEzNDEzIEluZXhhY3QgUm91bmRlZAorZXhweDExMTEgZXhwIDguMzM5NzcxNzIyMjk5MDQ5ICAtPiA0MTg3LjEzMzgwMzA4MTg3OCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTEyIGV4cCAwLjAwMjYxNDA0OTc5OTU0NzQgLT4gMS4wMDI2MTc0Njk0MDY3NTAgSW5leGFjdCBSb3VuZGVkCitleHB4MTExMyBleHAgMC43NDc4MDMzMzU2MjYxNzcxIC0+IDIuMTEyMzU0NzgxOTc1NDE4IEluZXhhY3QgUm91bmRlZAorZXhweDExMTQgZXhwIDUxLjc3NjYzNzYxODI3OTY2ICAtPiAzLjA2NDEzNTgwMTEyMDM2NUUrMjIgSW5leGFjdCBSb3VuZGVkCitleHB4MTExNSBleHAgMC4xNTI0OTg5NzgzMDYxMDEyIC0+IDEuMTY0NzQxMjcyMDg0OTU1IEluZXhhY3QgUm91bmRlZAorZXhweDExMTYgZXhwIDAuMDA2NjI5ODc5ODY2OTIxOSAtPiAxLjAwNjY1MTkwNjE3MDc5MSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTE3IGV4cCA5Ljk1NTE0MTg2NTUzNDk2MCAgLT4gMjEwNjAuMjMzMzQyODcwMzggSW5leGFjdCBSb3VuZGVkCitleHB4MTExOCBleHAgOTIuMzQ1MDMwNTkxOTg0ODMgIC0+IDEuMjczMzE4OTkzNDgxMjI2RSs0MCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTE5IGV4cCAwLjAwMDA3MDkzODg2NzczNDYgLT4gMS4wMDAwNzA5NDEzODM5NTYgSW5leGFjdCBSb3VuZGVkCitleHB4MTEyMCBleHAgNzkuMTI4ODMwMzY0MzMyMDQgIC0+IDIuMzE4NTM4ODk5Mzg5MjQzRSszNCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTIxIGV4cCAwLjAwMDAwOTA4ODE1NDg4NzMgLT4gMS4wMDAwMDkwODgxOTYxODUgSW5leGFjdCBSb3VuZGVkCitleHB4MTEyMiBleHAgMC4wNDI0ODI4ODA5NjAzNDExIC0+IDEuMDQzMzk4MTk0MjQ1NzIwIEluZXhhY3QgUm91bmRlZAorZXhweDExMjMgZXhwIDAuODAwOTAzNTg5MTQyNzQxNiAtPiAyLjIyNzU1MjgxMTkzMzMxMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTI0IGV4cCA4LjgyNTc4NjE2NzI4MzEwMiAgLT4gNjgwNy41NDA0NTUyODk5OTUgSW5leGFjdCBSb3VuZGVkCitleHB4MTEyNSBleHAgMS41MzU0NTcyNDk3NDYyNzUgIC0+IDQuNjQzNDQ4MjYwMTQ2ODQ5IEluZXhhY3QgUm91bmRlZAorZXhweDExMjYgZXhwIDY5LjAyMjU0MjU0MzU1ODAwICAtPiA5LjQ2NDc1NDUwMDY3MDY1M0UrMjkgSW5leGFjdCBSb3VuZGVkCitleHB4MTEyNyBleHAgMC4wMDA3MDUwNTU0MzY4NzEzIC0+IDEuMDAwNzA1MzA0MDQ2ODgwIEluZXhhY3QgUm91bmRlZAorZXhweDExMjggZXhwIDAuMDAwMDA4MTIwNjU0OTUwNCAtPiAxLjAwMDAwODEyMDY4NzkyMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTI5IGV4cCAwLjYyMTc3NDg1NDY0MTEzNyAgLT4gMS44NjIyMzAyOTg1NTQ5MDMgSW5leGFjdCBSb3VuZGVkCitleHB4MTEzMCBleHAgMy44NDc2MjkwMzE0MDQzNTQgIC0+IDQ2Ljg4MTc3NjEzNTY4MjAzIEluZXhhY3QgUm91bmRlZAorZXhweDExMzEgZXhwIDI0LjgxMjUwMTg0Njk3NzMyICAtPiA1OTY5NDI2ODQ1Ni4xOTk2NiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTMyIGV4cCA1LjEwNzU0NjUwMDUxNjA0NCAgLT4gMTY1LjI2NDM4MDk3NTU2NzAgSW5leGFjdCBSb3VuZGVkCitleHB4MTEzMyBleHAgNzkuMTc4MTA5NDM5NTE5ODYgIC0+IDIuNDM1NjU2MzcyNTQxMzYwRSszNCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTM0IGV4cCAwLjAwNTEzOTQ2OTU2NjcwMTUgLT4gMS4wMDUxNTI2OTkyOTUzMDEgSW5leGFjdCBSb3VuZGVkCitleHB4MTEzNSBleHAgNTcuNDQ1MDQ0ODg1MDE3MjUgIC0+IDguODcyOTA4NTY2OTI5Njg4RSsyNCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTM2IGV4cCAwLjAwMDA1MDgzODg5NjgwMzYgLT4gMS4wMDAwNTA4NDAxODkxMjIgSW5leGFjdCBSb3VuZGVkCitleHB4MTEzNyBleHAgNjkuNzEzMDk5MzIxNDg5OTcgIC0+IDEuODg4MDUzNzQwNjkzNTQxRSszMCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMTM4IGV4cCAwLjAwNjQxODM0MTI5ODE1MDIgLT4gMS4wMDY0Mzg5ODI5ODg4MzUgSW5leGFjdCBSb3VuZGVkCitleHB4MTEzOSBleHAgOS4zNDY5OTEyMjA4MTQ2NzcgIC0+IDExNDY0LjI3ODAyMDM1MDgyIEluZXhhY3QgUm91bmRlZAorZXhweDExNDAgZXhwIDMzLjA5MDg3MTM5OTk5MTUyICAtPiAyMzUwNjIyMjkxNjg3NjMuNSBJbmV4YWN0IFJvdW5kZWQKKworLS0gUmFuZG9tcyBQPTcsIHdpdGhpbiAwLTkKK1ByZWNpc2lvbjogNworbWF4RXhwb25lbnQ6IDk2CittaW5FeHBvbmVudDogLTk1CitleHB4MTAwMSBleHAgMi4zOTU0NDEgIC0+IDEwLjk3MzA0IEluZXhhY3QgUm91bmRlZAorZXhweDEwMDIgZXhwIDAuNjQwNjc3OSAtPiAxLjg5Nzc2NyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDAzIGV4cCAwLjU2MTgyMTggLT4gMS43NTM4NjUgSW5leGFjdCBSb3VuZGVkCitleHB4MTAwNCBleHAgMy4wNTUxMjAgIC0+IDIxLjIyMzczIEluZXhhY3QgUm91bmRlZAorZXhweDEwMDUgZXhwIDEuNTM2NzkyICAtPiA0LjY0OTY1MCBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDA2IGV4cCAwLjA4MDE1OTEgLT4gMS4wODM0NTkgSW5leGFjdCBSb3VuZGVkCitleHB4MTAwNyBleHAgMC4wOTY2ODc1IC0+IDEuMTAxNTE2IEluZXhhY3QgUm91bmRlZAorZXhweDEwMDggZXhwIDAuMDY0Njc2MSAtPiAxLjA2NjgxMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDA5IGV4cCAwLjAwOTU2NzAgLT4gMS4wMDk2MTMgSW5leGFjdCBSb3VuZGVkCitleHB4MTAxMCBleHAgMi45NTY4NTkgIC0+IDE5LjIzNzQ1IEluZXhhY3QgUm91bmRlZAorZXhweDEwMTEgZXhwIDcuNTA0Njc5ICAtPiAxODE2LjUyMiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDEyIGV4cCAwLjAwNDUyNTkgLT4gMS4wMDQ1MzYgSW5leGFjdCBSb3VuZGVkCitleHB4MTAxMyBleHAgMy44MTAwNzEgIC0+IDQ1LjE1MzY0IEluZXhhY3QgUm91bmRlZAorZXhweDEwMTQgZXhwIDEuNTAyMzkwICAtPiA0LjQ5MjQxMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDE1IGV4cCAwLjAzMjE1MjMgLT4gMS4wMzI2NzUgSW5leGFjdCBSb3VuZGVkCitleHB4MTAxNiBleHAgMC4wMDU3MjE0IC0+IDEuMDA1NzM4IEluZXhhY3QgUm91bmRlZAorZXhweDEwMTcgZXhwIDkuODExNDQ1ICAtPiAxODI0MS4zMyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDE4IGV4cCAzLjI0NTI0OSAgLT4gMjUuNjY4MTAgSW5leGFjdCBSb3VuZGVkCitleHB4MTAxOSBleHAgMC4zMTg5NzQyIC0+IDEuMzc1NzE2IEluZXhhY3QgUm91bmRlZAorZXhweDEwMjAgZXhwIDAuODYyMTYxMCAtPiAyLjM2ODI3MyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDIxIGV4cCAwLjAxMjI1MTEgLT4gMS4wMTIzMjYgSW5leGFjdCBSb3VuZGVkCitleHB4MTAyMiBleHAgMi4yMDIwODggIC0+IDkuMDQzODc3IEluZXhhY3QgUm91bmRlZAorZXhweDEwMjMgZXhwIDguNzc4MjAzICAtPiA2NDkxLjIwMiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDI0IGV4cCAwLjE4OTYyNzkgLT4gMS4yMDg4MDAgSW5leGFjdCBSb3VuZGVkCitleHB4MTAyNSBleHAgMC40NTEwOTQ3IC0+IDEuNTcwMDMwIEluZXhhY3QgUm91bmRlZAorZXhweDEwMjYgZXhwIDAuMjc2NDEzICAtPiAxLjMxODM5MiBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDI3IGV4cCA0LjQ5MDA2NyAgLT4gODkuMTI3NDIgSW5leGFjdCBSb3VuZGVkCitleHB4MTAyOCBleHAgMC4wNDM5Nzg2IC0+IDEuMDQ0OTYwIEluZXhhY3QgUm91bmRlZAorZXhweDEwMjkgZXhwIDAuODE2ODI0NSAtPiAyLjI2MzMwMSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDMwIGV4cCAwLjAzOTE2NTggLT4gMS4wMzk5NDMgSW5leGFjdCBSb3VuZGVkCitleHB4MTAzMSBleHAgOS4yNjE4MTYgIC0+IDEwNTI4LjI0IEluZXhhY3QgUm91bmRlZAorZXhweDEwMzIgZXhwIDkuNjExMTg2ICAtPiAxNDkzMC44NyBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDMzIGV4cCA5LjExODEyNSAgLT4gOTExOS4wODcgSW5leGFjdCBSb3VuZGVkCitleHB4MTAzNCBleHAgOS40NjkwODMgIC0+IDEyOTUzLjAwIEluZXhhY3QgUm91bmRlZAorZXhweDEwMzUgZXhwIDAuMDQ5OTk4MyAtPiAxLjA1MTI2OSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDM2IGV4cCAwLjAwNTA3NDYgLT4gMS4wMDUwODcgSW5leGFjdCBSb3VuZGVkCitleHB4MTAzNyBleHAgMC4wMDE0Njk2IC0+IDEuMDAxNDcxIEluZXhhY3QgUm91bmRlZAorZXhweDEwMzggZXhwIDkuMTM4NDk0ICAtPiA5MzA2LjczOSBJbmV4YWN0IFJvdW5kZWQKK2V4cHgxMDM5IGV4cCAwLjAwNjU0MzYgLT4gMS4wMDY1NjUgSW5leGFjdCBSb3VuZGVkCitleHB4MTA0MCBleHAgMC43Mjg0ODAzIC0+IDIuMDcxOTMwIEluZXhhY3QgUm91bmRlZAorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2V4dHJhLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2V4dHJhLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzMGQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZXh0cmEuZGVjVGVzdApAQCAtMCwwICsxLDI4MzAgQEAKK3ZlcnNpb246ID8uPz8KKworZXh0ZW5kZWQ6IDEKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworLS0gdGVzdGluZyBmb2xkZG93biBhbmQgY2xhbXBpbmcKK21heGV4cG9uZW50OiA5CittaW5leHBvbmVudDogLTkKK3ByZWNpc2lvbjogNgorY2xhbXA6IDEKK2V4dHIwMDAwIGFwcGx5IDFFKzExIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXh0cjAwMDEgYXBwbHkgMUUrMTAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHRyMDAwMiBhcHBseSAxRSs5IC0+IDEuMDAwMDBFKzkgQ2xhbXBlZAorZXh0cjAwMDMgYXBwbHkgMUUrOCAtPiAxLjAwMDBFKzggQ2xhbXBlZAorZXh0cjAwMDQgYXBwbHkgMUUrNyAtPiAxLjAwMEUrNyBDbGFtcGVkCitleHRyMDAwNSBhcHBseSAxRSs2IC0+IDEuMDBFKzYgQ2xhbXBlZAorZXh0cjAwMDYgYXBwbHkgMUUrNSAtPiAxLjBFKzUgQ2xhbXBlZAorZXh0cjAwMDcgYXBwbHkgMUUrNCAtPiAxRSs0CitleHRyMDAwOCBhcHBseSAxRSszIC0+IDFFKzMKK2V4dHIwMDA5IGFwcGx5IDFFKzIgLT4gMUUrMgorZXh0cjAwMTAgYXBwbHkgMUUrMSAtPiAxRSsxCitleHRyMDAxMSBhcHBseSAxIC0+IDEKK2V4dHIwMDEyIGFwcGx5IDFFLTEgLT4gMC4xCitleHRyMDAxMyBhcHBseSAxRS0yIC0+IDAuMDEKK2V4dHIwMDE0IGFwcGx5IDFFLTMgLT4gMC4wMDEKK2V4dHIwMDE1IGFwcGx5IDFFLTQgLT4gMC4wMDAxCitleHRyMDAxNiBhcHBseSAxRS01IC0+IDAuMDAwMDEKK2V4dHIwMDE3IGFwcGx5IDFFLTYgLT4gMC4wMDAwMDEKK2V4dHIwMDE4IGFwcGx5IDFFLTcgLT4gMUUtNworZXh0cjAwMTkgYXBwbHkgMUUtOCAtPiAxRS04CitleHRyMDAyMCBhcHBseSAxRS05IC0+IDFFLTkKK2V4dHIwMDIxIGFwcGx5IDFFLTEwIC0+IDFFLTEwIFN1Ym5vcm1hbAorZXh0cjAwMjIgYXBwbHkgMUUtMTEgLT4gMUUtMTEgU3Vibm9ybWFsCitleHRyMDAyMyBhcHBseSAxRS0xMiAtPiAxRS0xMiBTdWJub3JtYWwKK2V4dHIwMDI0IGFwcGx5IDFFLTEzIC0+IDFFLTEzIFN1Ym5vcm1hbAorZXh0cjAwMjUgYXBwbHkgMUUtMTQgLT4gMUUtMTQgU3Vibm9ybWFsCitleHRyMDAyNiBhcHBseSAxRS0xNSAtPiAwRS0xNCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitleHRyMDAyNyBhcHBseSAxRS0xNiAtPiAwRS0xNCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitjbGFtcDogMAorCistLSBsYXJnZSBwcmVjaXNpb24sIHNtYWxsIG1pbmltdW0gYW5kIG1heGltdW0gZXhwb25lbnQ7IGluIHRoaXMgY2FzZQorLS0gaXQncyBwb3NzaWJsZSB0aGF0IGZvbGRkb3duIGlzIHJlcXVpcmVkIG9uIGEgc3Vibm9ybWFsIHJlc3VsdAorbWF4ZXhwb25lbnQ6IDkKK21pbmV4cG9uZW50OiAtOQorcHJlY2lzaW9uOiAyNAorY2xhbXA6IDEKK2V4dHIwMTAwIGFwcGx5IDFFKzExIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZXh0cjAxMDEgYXBwbHkgMUUrMTAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHRyMDEwMiBhcHBseSAxRSs5IC0+IDEwMDAwMDAwMDAuMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZXh0cjAxMDMgYXBwbHkgMUUrOCAtPiAxMDAwMDAwMDAuMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZXh0cjAxMDQgYXBwbHkgMUUrNyAtPiAxMDAwMDAwMC4wMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitleHRyMDEwNSBhcHBseSAxRSs2IC0+IDEwMDAwMDAuMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZXh0cjAxMDYgYXBwbHkgMUUrNSAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZXh0cjAxMDcgYXBwbHkgMUUrNCAtPiAxMDAwMC4wMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitleHRyMDEwOCBhcHBseSAxRSszIC0+IDEwMDAuMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZXh0cjAxMDkgYXBwbHkgMUUrMiAtPiAxMDAuMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZXh0cjAxMTAgYXBwbHkgMUUrMSAtPiAxMC4wMDAwMDAwMDAwMDAwMCBDbGFtcGVkCitleHRyMDExMSBhcHBseSAxIC0+ICAgIDEuMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAorZXh0cjAxMTIgYXBwbHkgMUUtMSAtPiAwLjEwMDAwMDAwMDAwMDAwIENsYW1wZWQKK2V4dHIwMTEzIGFwcGx5IDFFLTIgLT4gMC4wMTAwMDAwMDAwMDAwMCBDbGFtcGVkCitleHRyMDExNCBhcHBseSAxRS0zIC0+IDAuMDAxMDAwMDAwMDAwMDAgQ2xhbXBlZAorZXh0cjAxMTUgYXBwbHkgMUUtNCAtPiAwLjAwMDEwMDAwMDAwMDAwIENsYW1wZWQKK2V4dHIwMTE2IGFwcGx5IDFFLTUgLT4gMC4wMDAwMTAwMDAwMDAwMCBDbGFtcGVkCitleHRyMDExNyBhcHBseSAxRS02IC0+IDAuMDAwMDAxMDAwMDAwMDAgQ2xhbXBlZAorZXh0cjAxMTggYXBwbHkgMUUtNyAtPiAxLjAwMDAwMDBFLTcgQ2xhbXBlZAorZXh0cjAxMTkgYXBwbHkgMUUtOCAtPiAxLjAwMDAwMEUtOCBDbGFtcGVkCitleHRyMDEyMCBhcHBseSAxRS05IC0+IDEuMDAwMDBFLTkgQ2xhbXBlZAorZXh0cjAxMjEgYXBwbHkgMUUtMTAgLT4gMS4wMDAwRS0xMCBTdWJub3JtYWwgQ2xhbXBlZAorZXh0cjAxMjIgYXBwbHkgMUUtMTEgLT4gMS4wMDBFLTExIFN1Ym5vcm1hbCBDbGFtcGVkCitleHRyMDEyMyBhcHBseSAxRS0xMiAtPiAxLjAwRS0xMiBTdWJub3JtYWwgQ2xhbXBlZAorZXh0cjAxMjQgYXBwbHkgMUUtMTMgLT4gMS4wRS0xMyBTdWJub3JtYWwgQ2xhbXBlZAorZXh0cjAxMjUgYXBwbHkgMUUtMTQgLT4gMUUtMTQgU3Vibm9ybWFsCitleHRyMDEyNiBhcHBseSAxRS0xNSAtPiAxRS0xNSBTdWJub3JtYWwKK2V4dHIwMTI3IGFwcGx5IDFFLTE2IC0+IDFFLTE2IFN1Ym5vcm1hbAorZXh0cjAxMjggYXBwbHkgMUUtMTcgLT4gMUUtMTcgU3Vibm9ybWFsCitleHRyMDEyOSBhcHBseSAxRS0xOCAtPiAxRS0xOCBTdWJub3JtYWwKK2V4dHIwMTMwIGFwcGx5IDFFLTE5IC0+IDFFLTE5IFN1Ym5vcm1hbAorZXh0cjAxMzEgYXBwbHkgMUUtMjAgLT4gMUUtMjAgU3Vibm9ybWFsCitleHRyMDEzMiBhcHBseSAxRS0yMSAtPiAxRS0yMSBTdWJub3JtYWwKK2V4dHIwMTMzIGFwcGx5IDFFLTIyIC0+IDFFLTIyIFN1Ym5vcm1hbAorZXh0cjAxMzQgYXBwbHkgMUUtMjMgLT4gMUUtMjMgU3Vibm9ybWFsCitleHRyMDEzNSBhcHBseSAxRS0yNCAtPiAxRS0yNCBTdWJub3JtYWwKK2V4dHIwMTM2IGFwcGx5IDFFLTI1IC0+IDFFLTI1IFN1Ym5vcm1hbAorZXh0cjAxMzcgYXBwbHkgMUUtMjYgLT4gMUUtMjYgU3Vibm9ybWFsCitleHRyMDEzOCBhcHBseSAxRS0yNyAtPiAxRS0yNyBTdWJub3JtYWwKK2V4dHIwMTM5IGFwcGx5IDFFLTI4IC0+IDFFLTI4IFN1Ym5vcm1hbAorZXh0cjAxNDAgYXBwbHkgMUUtMjkgLT4gMUUtMjkgU3Vibm9ybWFsCitleHRyMDE0MSBhcHBseSAxRS0zMCAtPiAxRS0zMCBTdWJub3JtYWwKK2V4dHIwMTQyIGFwcGx5IDFFLTMxIC0+IDFFLTMxIFN1Ym5vcm1hbAorZXh0cjAxNDMgYXBwbHkgMUUtMzIgLT4gMUUtMzIgU3Vibm9ybWFsCitleHRyMDE0NCBhcHBseSAxRS0zMyAtPiAwRS0zMiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitleHRyMDE0NSBhcHBseSAxRS0zNCAtPiAwRS0zMiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitjbGFtcDogMAorCistLSBzb21lIGJ1Z2d5IGFkZGl0aW9uIGNhc2VzIGZyb20gUHl0aG9uIDIuNS54CittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA2CitleHRyMTAwMCBhZGQgMEUrMTAwMCAwRSsyMDAwIC0+IDBFKzk5OSBDbGFtcGVkCitleHRyMTAwMSBhZGQgMEUrMTAwNCAwRSsxMDAxIC0+IDBFKzk5OSBDbGFtcGVkCitjbGFtcDogMQorZXh0cjEwMDIgYWRkIDBFKzEwMDAgMEUrMTAwMCAtPiAwRSs5OTQgQ2xhbXBlZAorY2xhbXA6IDAKK2V4dHIxMDAzIGFkZCAwRSsxMDAwIDBFLTEwMDUgLT4gMEUtMTAwNCBDbGFtcGVkCitleHRyMTAwNCBhZGQgMEUtMTAwNiAwIC0+IDBFLTEwMDQgQ2xhbXBlZAorZXh0cjEwMDUgYWRkIDFFKzEwMDAgLTFFKzEwMDAgLT4gMEUrOTk5IENsYW1wZWQKK2V4dHIxMDA2IGFkZCAtMy4xRSsxMDA0IDMuMUUrMTAwNCAtPiAwRSs5OTkgQ2xhbXBlZAorY2xhbXA6IDEKK2V4dHIxMDA3IGFkZCAxRSs5OTggLTFFKzk5OCAtPiAwRSs5OTQgQ2xhbXBlZAorY2xhbXA6IDAKK2V4dHIxMDA4IGFkZCAyRS0xMDA1IC0yRS0xMDA1IC0+IDBFLTEwMDQgQ2xhbXBlZAorZXh0cjEwMDkgYWRkIC0zLjFFLTEwMDUgMy4xRS0xMDA1IC0+IDBFLTEwMDQgQ2xhbXBlZAorCitwcmVjaXNpb246IDMKK2V4dHIxMDEwIGFkZCA5OTk0OS45IDAuMjAwMDAwIC0+IDEuMDBFKzUgSW5leGFjdCBSb3VuZGVkCitleHRyMTAxMSBhZGQgOTk5NDkuOSAwLjEwMDAwMCAtPiAxLjAwRSs1IEluZXhhY3QgUm91bmRlZAorZXh0cjEwMTIgYWRkIDk5ODQ5LjkgMC4yMDAwMDAgLT4gOS45OUUrNCBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxMDEzIGFkZCA5OTg0OS45IDAuMTAwMDAwIC0+IDkuOThFKzQgSW5leGFjdCBSb3VuZGVkCitleHRyMTAxNCBhZGQgMS4wMTQ5IDAuMDAwMTEgLT4gMS4wMiBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxMDE1IGFkZCAxLjAxNDkgMC4wMDAxMCAtPiAxLjAyIEluZXhhY3QgUm91bmRlZAorZXh0cjEwMTYgYWRkIDEuMDE0OSAwLjAwMDA5IC0+IDEuMDEgSW5leGFjdCBSb3VuZGVkCitleHRyMTAxNyBhZGQgMS4wMDQ5IDAuMDAwMTEgLT4gMS4wMSBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxMDE4IGFkZCAxLjAwNDkgMC4wMDAxMCAtPiAxLjAwIEluZXhhY3QgUm91bmRlZAorZXh0cjEwMTkgYWRkIDEuMDA0OSAwLjAwMDA5IC0+IDEuMDAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZG93bgorZXh0cjEwMjAgYWRkIDk5OTk5LjkgMC4yMDAwMDAgLT4gMS4wMEUrNSBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxMDIxIGFkZCA5OTk5OS44IDAuMjAwMDAwIC0+IDEuMDBFKzUgUm91bmRlZAorZXh0cjEwMjIgYWRkIDk5OTk5LjcgMC4yMDAwMDAgLT4gOS45OUUrNCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworLS0gYSBidWcgaW4gX3Jlc2NhbGUgY2F1c2VkIHRoZSBmb2xsb3dpbmcgdG8gZmFpbCBpbiBQeXRob24gMi41LjEKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDYKK2V4dHIxMTAwIGFkZCAwRSsxMDAwIDFFKzEwMDAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitleHRyMTEwMSByZW1haW5kZXIgMUUrMTAwMCAyRSsxMDAwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLSB0ZXN0cyBmb3Igc2NhbGViIGluIGNhc2Ugd2hlcmUgaW5wdXQgcHJlY2lzaW9uID4gY29udGV4dCBwcmVjaXNpb24uCistLSBSZXN1bHQgc2hvdWxkIGJlIHJvdW5kZWQuICAoVGhpcyBpc24ndCB0b3RhbGx5IGNsZWFyIGZyb20gdGhlCistLSBzcGVjaWZpY2F0aW9uLCBidXQgdGhlIHRyZWF0bWVudCBvZiB1bmRlcmZsb3cgaW4gdGhlIHRlc3RjYXNlcworLS0gc3VnZ2VzdHMgdGhhdCByb3VuZGluZyBzaG91bGQgb2NjdXIgaW4gZ2VuZXJhbC4gIEZ1cnRoZXJtb3JlLCBpdCdzCistLSB0aGUgd2F5IHRoYXQgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBiZWhhdmVzLikKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDMKK2V4dHIxMjAwIHNjYWxlYiAxMjM0IDEgLT4gMS4yM0UrNCBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxMjAxIHNjYWxlYiA1Njc4IDAgLT4gNS42OEUrMyBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxMjAyIHNjYWxlYiAtOTEwNSAtMSAtPiAtOTEwIEluZXhhY3QgUm91bmRlZAorCistLSBJbnZhbGlkIG9wZXJhdGlvbiBmcm9tIDAgKiBpbmZpbml0eSBpbiBmbWEKKy0tIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBhIHRoaXJkLWFyZ3VtZW50IHNOYU4KK2V4dHIxMzAwIGZtYSAwIEluZiBzTmFOMTIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZXh0cjEzMDEgZm1hIEluZiAwIHNOYU40NTYgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitleHRyMTMwMiBmbWEgMEUxMjMgLUluZiBzTmFONzg5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZXh0cjEzMDIgZm1hIC1JbmYgMEUtNDU2IHNOYU4xNDggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG1heC9taW4vbWF4X21hZy9taW5fbWFnIGJ1ZyBpbiAyLjUuMi8yLjYvMy4wOiBtYXgoTmFOLCBmaW5pdGUpIGdhdmUKKy0tIGluY29ycmVjdCBhbnN3ZXJzIHdoZW4gdGhlIGZpbml0ZSBudW1iZXIgcmVxdWlyZWQgcm91bmRpbmc7IHNpbWlsYXJseQorLS0gZm9yIHRoZSBvdGhlciB0aHJlIGZ1bmN0aW9ucworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogNgorcm91bmRpbmc6IGhhbGZfZXZlbgorZXh0cjE0MDAgbWF4IE5hTiAxMjM0NTY3IC0+IDEuMjM0NTdFKzYgSW5leGFjdCBSb3VuZGVkCitleHRyMTQwMSBtYXggMzE0MTU5MEUtMTIzIE5hTjE3MjkgLT4gMy4xNDE1OUUtMTE3IFJvdW5kZWQKK2V4dHIxNDAyIG1heCAtNy42NTQzMjEgLU5hTiAtPiAtNy42NTQzMiBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxNDEwIG1pbiAtTmFOIC03NjU0MzIuMSAtPiAtNzY1NDMyIEluZXhhY3QgUm91bmRlZAorZXh0cjE0MTEgbWluIDMxNDE1OTIgTmFOIC0+IDMuMTQxNTlFKzYgSW5leGFjdCBSb3VuZGVkCitleHRyMTQyMCBtYXhfbWFnIDAuMTExMTExMSAtTmFOMTIzIC0+IDAuMTExMTExIEluZXhhY3QgUm91bmRlZAorZXh0cjE0MjEgbWF4X21hZyBOYU45OTk5OTk5OTkgMC4wMDEyMzQ1NjcgLT4gMC4wMDEyMzQ1NyBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxNDMwIG1pbl9tYWcgOTE4MTcxNjE1MSAtTmFOIC0+IDkuMTgxNzJFKzkgSW5leGFjdCBSb3VuZGVkCitleHRyMTQzMSBtaW5fbWFnIE5hTjQgMS44MTgxODBFMTAwIC0+IDEuODE4MThFKzEwMCBSb3VuZGVkCisKKy0tIElzc3VlICM2Nzk0OiB3aGVuIGNvbXBhcmluZyBOYU5zIHVzaW5nIGNvbXBhcmVfdG90YWwsIHBheWxvYWRzCistLSBzaG91bGQgYmUgY29tcGFyZWQgYXMgdGhvdWdoIHBvc2l0aXZlIGludGVnZXJzOyBub3QKKy0tIGxleGljb2dyYXBoaWNhbGx5IGFzIHN0cmluZ3MuCitleHRyMTUwMCBjb21wYXJldG90YWwgTmFOMTIzIE5hTjQ1IC0+IDEKK2V4dHIxNTAxIGNvbXBhcmV0b3RhbCBzTmFOMTIzIHNOYU40NSAtPiAxCitleHRyMTUwMiBjb21wYXJldG90YWwgLU5hTjEyMyAtTmFONDUgLT4gLTEKK2V4dHIxNTAzIGNvbXBhcmV0b3RhbCAtc05hTjEyMyAtc05hTjQ1IC0+IC0xCitleHRyMTUwNCBjb21wYXJldG90YWwgTmFONDUgTmFOMTIzIC0+IC0xCitleHRyMTUwNSBjb21wYXJldG90YWwgc05hTjQ1IHNOYU4xMjMgLT4gLTEKK2V4dHIxNTA2IGNvbXBhcmV0b3RhbCAtTmFONDUgLU5hTjEyMyAtPiAxCitleHRyMTUwNyBjb21wYXJldG90YWwgLXNOYU40NSAtc05hTjEyMyAtPiAxCisKK2V4dHIxNTEwIGNvbXBhcmV0b3RhbCAtc05hTjYzNDUwNzQ4ODU0MTcyNDE2IC1zTmFOOTExOTkzIC0+IC0xCitleHRyMTUxMSBjb21wYXJldG90bWFnIE5hTjEyMjIyMjIyMjIyMjIgLU5hTjk5OTk5OSAtPiAxCisKKy0tIElzc3VlICM3MjMzOiByb3RhdGUgYW5kIHNjYWxlIHNob3VsZCB0cnVuY2F0ZSBhbiBhcmd1bWVudAorLS0gb2YgbGVuZ3RoIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBwcmVjaXNpb24uCitwcmVjaXNpb246IDQKK2V4dHIxNjAwIHJvdGF0ZSAxMjM0NTY3IC01IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZXh0cjE2MDEgcm90YXRlIDEyMzQ1NjcgLTQgLT4gNDU2NworZXh0cjE2MDIgcm90YXRlIDEyMzQ1NjcgLTMgLT4gNTY3NAorZXh0cjE2MDMgcm90YXRlIDEyMzQ1NjcgLTIgLT4gNjc0NQorZXh0cjE2MDQgcm90YXRlIDEyMzQ1NjcgLTEgLT4gNzQ1NgorZXh0cjE2MDUgcm90YXRlIDEyMzQ1NjcgMCAtPiA0NTY3CitleHRyMTYwNiByb3RhdGUgMTIzNDU2NyAxIC0+IDU2NzQKK2V4dHIxNjA3IHJvdGF0ZSAxMjM0NTY3IDIgLT4gNjc0NQorZXh0cjE2MDggcm90YXRlIDEyMzQ1NjcgMyAtPiA3NDU2CitleHRyMTYwOSByb3RhdGUgMTIzNDU2NyA0IC0+IDQ1NjcKK2V4dHIxNjEwIHJvdGF0ZSAxMjM0NTY3IDUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK2V4dHIxNjUwIHNoaWZ0IDEyMzQ1NjcgLTUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitleHRyMTY1MSBzaGlmdCAxMjM0NTY3IC00IC0+IDAKK2V4dHIxNjUyIHNoaWZ0IDEyMzQ1NjcgLTMgLT4gNAorZXh0cjE2NTMgc2hpZnQgMTIzNDU2NyAtMiAtPiA0NQorZXh0cjE2NTQgc2hpZnQgMTIzNDU2NyAtMSAtPiA0NTYKK2V4dHIxNjU1IHNoaWZ0IDEyMzQ1NjcgMCAtPiA0NTY3CitleHRyMTY1NiBzaGlmdCAxMjM0NTY3IDEgLT4gNTY3MAorZXh0cjE2NTcgc2hpZnQgMTIzNDU2NyAyIC0+IDY3MDAKK2V4dHIxNjU4IHNoaWZ0IDEyMzQ1NjcgMyAtPiA3MDAwCitleHRyMTY1OSBzaGlmdCAxMjM0NTY3IDQgLT4gMAorZXh0cjE2NjAgc2hpZnQgMTIzNDU2NyA1IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBDYXNlcyB3aGVyZSB0aGUgcG93ZXIgZnVuY3Rpb24gd2FzIGltcG9zc2libHkgc2xvdyB0byBkZXRlcm1pbmUgdGhhdCB0aGUKKy0tIHJlc3VsdCBpcyBpbmV4YWN0LiAgVGhhbmtzIFN0ZWZhbiBLcmFoIGZvciBpZGVudGlmeWluZyB0aGlzIHByb2JsZW0uCitwcmVjaXNpb246IDE2CittYXhFeHBvbmVudDogOTk5OTk5OTk5CittaW5FeHBvbmVudDogLTk5OTk5OTk5OQorZXh0cjE3MDAgcG93ZXIgMTAgMWUtOTk5OTk5OTk5IC0+IDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZXh0cjE3MDEgcG93ZXIgMTAwLjAgLTU1Ny43MWUtNzQyODg4ODg4IC0+IDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZXh0cjE3MDIgcG93ZXIgMTAgMWUtMTAwIC0+IDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBBbm90aGVyIG9uZSAoc2VlIGlzc3VlICMxMjA4MCkuICBUaGFua3MgYWdhaW4gdG8gU3RlZmFuIEtyYWguCitleHRyMTcwMyBwb3dlciA0IC0xLjJlLTk5OTk5OTk5OSAtPiAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gQSBjb3VwbGUgb2YgaW50ZXJlc3RpbmcgZXhhY3QgY2FzZXMgZm9yIHBvd2VyLiAgTm90ZSB0aGF0IHRoZSBzcGVjaWZpY2F0aW9uCistLSByZXF1aXJlcyB0aGVzZSB0byBiZSByZXBvcnRlZCBhcyBJbmV4YWN0LgorZXh0cjE3MTAgcG93ZXIgMWUzNzUgNTZlLTMgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzIxIEluZXhhY3QgUm91bmRlZAorZXh0cjE3MTEgcG93ZXIgMTAwMDAgMC43NSAtPiAxMDAwLjAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxNzEyIHBvd2VyIDFlLTI0IDAuODc1IC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0yMSBJbmV4YWN0IFJvdW5kZWQKKworLS0gU29tZSBtb3JlIGV4YWN0IGNhc2VzLCBleGVyY2lzaW5nIHBvd2VyIHdpdGggbmVnYXRpdmUgc2Vjb25kIGFyZ3VtZW50LgorZXh0cjE3MjAgcG93ZXIgNDAwIC0wLjUgLT4gMC4wNTAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2V4dHIxNzIxIHBvd2VyIDQwOTYgLTAuNzUgLT4gMC4wMDE5NTMxMjUwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitleHRyMTcyMiBwb3dlciA2MjVlNCAtMC4yNSAtPiAwLjAyMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBOb25leGFjdCBjYXNlcywgdG8gZXhlcmNpc2Ugc29tZSBvZiB0aGUgZWFybHkgZXhpdCBjb25kaXRpb25zIGZyb20KKy0tIF9wb3dlcl9leGFjdC4KK2V4dHIxNzMwIHBvd2VyIDIwNDggLTAuNzUgLT4gMC4wMDMyODQ3NTE2MjIwODQ4MjIgSW5leGFjdCBSb3VuZGVkCisKKworLS0gVGVzdHMgZm9yIHRoZSBpc18qIGJvb2xlYW4gb3BlcmF0aW9ucworcHJlY2lzaW9uOiA5CittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCitib29sMDAwMCBpc2Nhbm9uaWNhbCAwRS0yMDAwIC0+IDEKK2Jvb2wwMDAxIGlzY2Fub25pY2FsIC0wRS0yMDAwIC0+IDEKK2Jvb2wwMDAyIGlzY2Fub25pY2FsIDBFLTEwMDggLT4gMQorYm9vbDAwMDMgaXNjYW5vbmljYWwgLTBFLTEwMDggLT4gMQorYm9vbDAwMDQgaXNjYW5vbmljYWwgMEUtMTAwNyAtPiAxCitib29sMDAwNSBpc2Nhbm9uaWNhbCAtMEUtMTAwNyAtPiAxCitib29sMDAwNiBpc2Nhbm9uaWNhbCAwRS0xMDA2IC0+IDEKK2Jvb2wwMDA3IGlzY2Fub25pY2FsIC0wRS0xMDA2IC0+IDEKK2Jvb2wwMDA4IGlzY2Fub25pY2FsIDBFLTEwMDAgLT4gMQorYm9vbDAwMDkgaXNjYW5vbmljYWwgLTBFLTEwMDAgLT4gMQorYm9vbDAwMTAgaXNjYW5vbmljYWwgMEUtOTk5IC0+IDEKK2Jvb2wwMDExIGlzY2Fub25pY2FsIC0wRS05OTkgLT4gMQorYm9vbDAwMTIgaXNjYW5vbmljYWwgMEUtOTk4IC0+IDEKK2Jvb2wwMDEzIGlzY2Fub25pY2FsIC0wRS05OTggLT4gMQorYm9vbDAwMTQgaXNjYW5vbmljYWwgMEUtMTAwIC0+IDEKK2Jvb2wwMDE1IGlzY2Fub25pY2FsIC0wRS0xMDAgLT4gMQorYm9vbDAwMTYgaXNjYW5vbmljYWwgMC4wMDAwMDAgLT4gMQorYm9vbDAwMTcgaXNjYW5vbmljYWwgLTAuMDAwMDAwIC0+IDEKK2Jvb2wwMDE4IGlzY2Fub25pY2FsIDAuMDAwIC0+IDEKK2Jvb2wwMDE5IGlzY2Fub25pY2FsIC0wLjAwMCAtPiAxCitib29sMDAyMCBpc2Nhbm9uaWNhbCAwLjAwIC0+IDEKK2Jvb2wwMDIxIGlzY2Fub25pY2FsIC0wLjAwIC0+IDEKK2Jvb2wwMDIyIGlzY2Fub25pY2FsIDAuMCAtPiAxCitib29sMDAyMyBpc2Nhbm9uaWNhbCAtMC4wIC0+IDEKK2Jvb2wwMDI0IGlzY2Fub25pY2FsIDAgLT4gMQorYm9vbDAwMjUgaXNjYW5vbmljYWwgLTAgLT4gMQorYm9vbDAwMjYgaXNjYW5vbmljYWwgMEUrMSAtPiAxCitib29sMDAyNyBpc2Nhbm9uaWNhbCAtMEUrMSAtPiAxCitib29sMDAyOCBpc2Nhbm9uaWNhbCAwRSsyIC0+IDEKK2Jvb2wwMDI5IGlzY2Fub25pY2FsIC0wRSsyIC0+IDEKK2Jvb2wwMDMwIGlzY2Fub25pY2FsIDBFKzMgLT4gMQorYm9vbDAwMzEgaXNjYW5vbmljYWwgLTBFKzMgLT4gMQorYm9vbDAwMzIgaXNjYW5vbmljYWwgMEUrNiAtPiAxCitib29sMDAzMyBpc2Nhbm9uaWNhbCAtMEUrNiAtPiAxCitib29sMDAzNCBpc2Nhbm9uaWNhbCAwRSsxMDAgLT4gMQorYm9vbDAwMzUgaXNjYW5vbmljYWwgLTBFKzEwMCAtPiAxCitib29sMDAzNiBpc2Nhbm9uaWNhbCAwRSs5OTAgLT4gMQorYm9vbDAwMzcgaXNjYW5vbmljYWwgLTBFKzk5MCAtPiAxCitib29sMDAzOCBpc2Nhbm9uaWNhbCAwRSs5OTEgLT4gMQorYm9vbDAwMzkgaXNjYW5vbmljYWwgLTBFKzk5MSAtPiAxCitib29sMDA0MCBpc2Nhbm9uaWNhbCAwRSs5OTIgLT4gMQorYm9vbDAwNDEgaXNjYW5vbmljYWwgLTBFKzk5MiAtPiAxCitib29sMDA0MiBpc2Nhbm9uaWNhbCAwRSs5OTggLT4gMQorYm9vbDAwNDMgaXNjYW5vbmljYWwgLTBFKzk5OCAtPiAxCitib29sMDA0NCBpc2Nhbm9uaWNhbCAwRSs5OTkgLT4gMQorYm9vbDAwNDUgaXNjYW5vbmljYWwgLTBFKzk5OSAtPiAxCitib29sMDA0NiBpc2Nhbm9uaWNhbCAwRSsxMDAwIC0+IDEKK2Jvb2wwMDQ3IGlzY2Fub25pY2FsIC0wRSsxMDAwIC0+IDEKK2Jvb2wwMDQ4IGlzY2Fub25pY2FsIDBFKzIwMDAgLT4gMQorYm9vbDAwNDkgaXNjYW5vbmljYWwgLTBFKzIwMDAgLT4gMQorYm9vbDAwNTAgaXNjYW5vbmljYWwgMUUtMjAwMCAtPiAxCitib29sMDA1MSBpc2Nhbm9uaWNhbCAtMUUtMjAwMCAtPiAxCitib29sMDA1MiBpc2Nhbm9uaWNhbCAxRS0xMDA4IC0+IDEKK2Jvb2wwMDUzIGlzY2Fub25pY2FsIC0xRS0xMDA4IC0+IDEKK2Jvb2wwMDU0IGlzY2Fub25pY2FsIDFFLTEwMDcgLT4gMQorYm9vbDAwNTUgaXNjYW5vbmljYWwgLTFFLTEwMDcgLT4gMQorYm9vbDAwNTYgaXNjYW5vbmljYWwgMUUtMTAwNiAtPiAxCitib29sMDA1NyBpc2Nhbm9uaWNhbCAtMUUtMTAwNiAtPiAxCitib29sMDA1OCBpc2Nhbm9uaWNhbCAxRS0xMDAwIC0+IDEKK2Jvb2wwMDU5IGlzY2Fub25pY2FsIC0xRS0xMDAwIC0+IDEKK2Jvb2wwMDYwIGlzY2Fub25pY2FsIDFFLTk5OSAtPiAxCitib29sMDA2MSBpc2Nhbm9uaWNhbCAtMUUtOTk5IC0+IDEKK2Jvb2wwMDYyIGlzY2Fub25pY2FsIDFFLTk5OCAtPiAxCitib29sMDA2MyBpc2Nhbm9uaWNhbCAtMUUtOTk4IC0+IDEKK2Jvb2wwMDY0IGlzY2Fub25pY2FsIDFFLTEwMCAtPiAxCitib29sMDA2NSBpc2Nhbm9uaWNhbCAtMUUtMTAwIC0+IDEKK2Jvb2wwMDY2IGlzY2Fub25pY2FsIDAuMDAwMDAxIC0+IDEKK2Jvb2wwMDY3IGlzY2Fub25pY2FsIC0wLjAwMDAwMSAtPiAxCitib29sMDA2OCBpc2Nhbm9uaWNhbCAwLjAwMSAtPiAxCitib29sMDA2OSBpc2Nhbm9uaWNhbCAtMC4wMDEgLT4gMQorYm9vbDAwNzAgaXNjYW5vbmljYWwgMC4wMSAtPiAxCitib29sMDA3MSBpc2Nhbm9uaWNhbCAtMC4wMSAtPiAxCitib29sMDA3MiBpc2Nhbm9uaWNhbCAwLjEgLT4gMQorYm9vbDAwNzMgaXNjYW5vbmljYWwgLTAuMSAtPiAxCitib29sMDA3NCBpc2Nhbm9uaWNhbCAxIC0+IDEKK2Jvb2wwMDc1IGlzY2Fub25pY2FsIC0xIC0+IDEKK2Jvb2wwMDc2IGlzY2Fub25pY2FsIDFFKzEgLT4gMQorYm9vbDAwNzcgaXNjYW5vbmljYWwgLTFFKzEgLT4gMQorYm9vbDAwNzggaXNjYW5vbmljYWwgMUUrMiAtPiAxCitib29sMDA3OSBpc2Nhbm9uaWNhbCAtMUUrMiAtPiAxCitib29sMDA4MCBpc2Nhbm9uaWNhbCAxRSszIC0+IDEKK2Jvb2wwMDgxIGlzY2Fub25pY2FsIC0xRSszIC0+IDEKK2Jvb2wwMDgyIGlzY2Fub25pY2FsIDFFKzYgLT4gMQorYm9vbDAwODMgaXNjYW5vbmljYWwgLTFFKzYgLT4gMQorYm9vbDAwODQgaXNjYW5vbmljYWwgMUUrMTAwIC0+IDEKK2Jvb2wwMDg1IGlzY2Fub25pY2FsIC0xRSsxMDAgLT4gMQorYm9vbDAwODYgaXNjYW5vbmljYWwgMUUrOTkwIC0+IDEKK2Jvb2wwMDg3IGlzY2Fub25pY2FsIC0xRSs5OTAgLT4gMQorYm9vbDAwODggaXNjYW5vbmljYWwgMUUrOTkxIC0+IDEKK2Jvb2wwMDg5IGlzY2Fub25pY2FsIC0xRSs5OTEgLT4gMQorYm9vbDAwOTAgaXNjYW5vbmljYWwgMUUrOTkyIC0+IDEKK2Jvb2wwMDkxIGlzY2Fub25pY2FsIC0xRSs5OTIgLT4gMQorYm9vbDAwOTIgaXNjYW5vbmljYWwgMUUrOTk4IC0+IDEKK2Jvb2wwMDkzIGlzY2Fub25pY2FsIC0xRSs5OTggLT4gMQorYm9vbDAwOTQgaXNjYW5vbmljYWwgMUUrOTk5IC0+IDEKK2Jvb2wwMDk1IGlzY2Fub25pY2FsIC0xRSs5OTkgLT4gMQorYm9vbDAwOTYgaXNjYW5vbmljYWwgMUUrMTAwMCAtPiAxCitib29sMDA5NyBpc2Nhbm9uaWNhbCAtMUUrMTAwMCAtPiAxCitib29sMDA5OCBpc2Nhbm9uaWNhbCAxRSsyMDAwIC0+IDEKK2Jvb2wwMDk5IGlzY2Fub25pY2FsIC0xRSsyMDAwIC0+IDEKK2Jvb2wwMTAwIGlzY2Fub25pY2FsIDlFLTIwMDAgLT4gMQorYm9vbDAxMDEgaXNjYW5vbmljYWwgLTlFLTIwMDAgLT4gMQorYm9vbDAxMDIgaXNjYW5vbmljYWwgOUUtMTAwOCAtPiAxCitib29sMDEwMyBpc2Nhbm9uaWNhbCAtOUUtMTAwOCAtPiAxCitib29sMDEwNCBpc2Nhbm9uaWNhbCA5RS0xMDA3IC0+IDEKK2Jvb2wwMTA1IGlzY2Fub25pY2FsIC05RS0xMDA3IC0+IDEKK2Jvb2wwMTA2IGlzY2Fub25pY2FsIDlFLTEwMDYgLT4gMQorYm9vbDAxMDcgaXNjYW5vbmljYWwgLTlFLTEwMDYgLT4gMQorYm9vbDAxMDggaXNjYW5vbmljYWwgOUUtMTAwMCAtPiAxCitib29sMDEwOSBpc2Nhbm9uaWNhbCAtOUUtMTAwMCAtPiAxCitib29sMDExMCBpc2Nhbm9uaWNhbCA5RS05OTkgLT4gMQorYm9vbDAxMTEgaXNjYW5vbmljYWwgLTlFLTk5OSAtPiAxCitib29sMDExMiBpc2Nhbm9uaWNhbCA5RS05OTggLT4gMQorYm9vbDAxMTMgaXNjYW5vbmljYWwgLTlFLTk5OCAtPiAxCitib29sMDExNCBpc2Nhbm9uaWNhbCA5RS0xMDAgLT4gMQorYm9vbDAxMTUgaXNjYW5vbmljYWwgLTlFLTEwMCAtPiAxCitib29sMDExNiBpc2Nhbm9uaWNhbCAwLjAwMDAwOSAtPiAxCitib29sMDExNyBpc2Nhbm9uaWNhbCAtMC4wMDAwMDkgLT4gMQorYm9vbDAxMTggaXNjYW5vbmljYWwgMC4wMDkgLT4gMQorYm9vbDAxMTkgaXNjYW5vbmljYWwgLTAuMDA5IC0+IDEKK2Jvb2wwMTIwIGlzY2Fub25pY2FsIDAuMDkgLT4gMQorYm9vbDAxMjEgaXNjYW5vbmljYWwgLTAuMDkgLT4gMQorYm9vbDAxMjIgaXNjYW5vbmljYWwgMC45IC0+IDEKK2Jvb2wwMTIzIGlzY2Fub25pY2FsIC0wLjkgLT4gMQorYm9vbDAxMjQgaXNjYW5vbmljYWwgOSAtPiAxCitib29sMDEyNSBpc2Nhbm9uaWNhbCAtOSAtPiAxCitib29sMDEyNiBpc2Nhbm9uaWNhbCA5RSsxIC0+IDEKK2Jvb2wwMTI3IGlzY2Fub25pY2FsIC05RSsxIC0+IDEKK2Jvb2wwMTI4IGlzY2Fub25pY2FsIDlFKzIgLT4gMQorYm9vbDAxMjkgaXNjYW5vbmljYWwgLTlFKzIgLT4gMQorYm9vbDAxMzAgaXNjYW5vbmljYWwgOUUrMyAtPiAxCitib29sMDEzMSBpc2Nhbm9uaWNhbCAtOUUrMyAtPiAxCitib29sMDEzMiBpc2Nhbm9uaWNhbCA5RSs2IC0+IDEKK2Jvb2wwMTMzIGlzY2Fub25pY2FsIC05RSs2IC0+IDEKK2Jvb2wwMTM0IGlzY2Fub25pY2FsIDlFKzEwMCAtPiAxCitib29sMDEzNSBpc2Nhbm9uaWNhbCAtOUUrMTAwIC0+IDEKK2Jvb2wwMTM2IGlzY2Fub25pY2FsIDlFKzk5MCAtPiAxCitib29sMDEzNyBpc2Nhbm9uaWNhbCAtOUUrOTkwIC0+IDEKK2Jvb2wwMTM4IGlzY2Fub25pY2FsIDlFKzk5MSAtPiAxCitib29sMDEzOSBpc2Nhbm9uaWNhbCAtOUUrOTkxIC0+IDEKK2Jvb2wwMTQwIGlzY2Fub25pY2FsIDlFKzk5MiAtPiAxCitib29sMDE0MSBpc2Nhbm9uaWNhbCAtOUUrOTkyIC0+IDEKK2Jvb2wwMTQyIGlzY2Fub25pY2FsIDlFKzk5OCAtPiAxCitib29sMDE0MyBpc2Nhbm9uaWNhbCAtOUUrOTk4IC0+IDEKK2Jvb2wwMTQ0IGlzY2Fub25pY2FsIDlFKzk5OSAtPiAxCitib29sMDE0NSBpc2Nhbm9uaWNhbCAtOUUrOTk5IC0+IDEKK2Jvb2wwMTQ2IGlzY2Fub25pY2FsIDlFKzEwMDAgLT4gMQorYm9vbDAxNDcgaXNjYW5vbmljYWwgLTlFKzEwMDAgLT4gMQorYm9vbDAxNDggaXNjYW5vbmljYWwgOUUrMjAwMCAtPiAxCitib29sMDE0OSBpc2Nhbm9uaWNhbCAtOUUrMjAwMCAtPiAxCitib29sMDE1MCBpc2Nhbm9uaWNhbCA5Ljk5OTk5OTk5RS0yMDAwIC0+IDEKK2Jvb2wwMTUxIGlzY2Fub25pY2FsIC05Ljk5OTk5OTk5RS0yMDAwIC0+IDEKK2Jvb2wwMTUyIGlzY2Fub25pY2FsIDkuOTk5OTk5OTlFLTEwMDggLT4gMQorYm9vbDAxNTMgaXNjYW5vbmljYWwgLTkuOTk5OTk5OTlFLTEwMDggLT4gMQorYm9vbDAxNTQgaXNjYW5vbmljYWwgOS45OTk5OTk5OUUtMTAwNyAtPiAxCitib29sMDE1NSBpc2Nhbm9uaWNhbCAtOS45OTk5OTk5OUUtMTAwNyAtPiAxCitib29sMDE1NiBpc2Nhbm9uaWNhbCA5Ljk5OTk5OTk5RS0xMDA2IC0+IDEKK2Jvb2wwMTU3IGlzY2Fub25pY2FsIC05Ljk5OTk5OTk5RS0xMDA2IC0+IDEKK2Jvb2wwMTU4IGlzY2Fub25pY2FsIDkuOTk5OTk5OTlFLTEwMDAgLT4gMQorYm9vbDAxNTkgaXNjYW5vbmljYWwgLTkuOTk5OTk5OTlFLTEwMDAgLT4gMQorYm9vbDAxNjAgaXNjYW5vbmljYWwgOS45OTk5OTk5OUUtOTk5IC0+IDEKK2Jvb2wwMTYxIGlzY2Fub25pY2FsIC05Ljk5OTk5OTk5RS05OTkgLT4gMQorYm9vbDAxNjIgaXNjYW5vbmljYWwgOS45OTk5OTk5OUUtOTk4IC0+IDEKK2Jvb2wwMTYzIGlzY2Fub25pY2FsIC05Ljk5OTk5OTk5RS05OTggLT4gMQorYm9vbDAxNjQgaXNjYW5vbmljYWwgOS45OTk5OTk5OUUtMTAwIC0+IDEKK2Jvb2wwMTY1IGlzY2Fub25pY2FsIC05Ljk5OTk5OTk5RS0xMDAgLT4gMQorYm9vbDAxNjYgaXNjYW5vbmljYWwgMC4wMDAwMDk5OTk5OTk5OSAtPiAxCitib29sMDE2NyBpc2Nhbm9uaWNhbCAtMC4wMDAwMDk5OTk5OTk5OSAtPiAxCitib29sMDE2OCBpc2Nhbm9uaWNhbCAwLjAwOTk5OTk5OTk5IC0+IDEKK2Jvb2wwMTY5IGlzY2Fub25pY2FsIC0wLjAwOTk5OTk5OTk5IC0+IDEKK2Jvb2wwMTcwIGlzY2Fub25pY2FsIDAuMDk5OTk5OTk5OSAtPiAxCitib29sMDE3MSBpc2Nhbm9uaWNhbCAtMC4wOTk5OTk5OTk5IC0+IDEKK2Jvb2wwMTcyIGlzY2Fub25pY2FsIDAuOTk5OTk5OTk5IC0+IDEKK2Jvb2wwMTczIGlzY2Fub25pY2FsIC0wLjk5OTk5OTk5OSAtPiAxCitib29sMDE3NCBpc2Nhbm9uaWNhbCA5Ljk5OTk5OTk5IC0+IDEKK2Jvb2wwMTc1IGlzY2Fub25pY2FsIC05Ljk5OTk5OTk5IC0+IDEKK2Jvb2wwMTc2IGlzY2Fub25pY2FsIDk5Ljk5OTk5OTkgLT4gMQorYm9vbDAxNzcgaXNjYW5vbmljYWwgLTk5Ljk5OTk5OTkgLT4gMQorYm9vbDAxNzggaXNjYW5vbmljYWwgOTk5Ljk5OTk5OSAtPiAxCitib29sMDE3OSBpc2Nhbm9uaWNhbCAtOTk5Ljk5OTk5OSAtPiAxCitib29sMDE4MCBpc2Nhbm9uaWNhbCA5OTk5Ljk5OTk5IC0+IDEKK2Jvb2wwMTgxIGlzY2Fub25pY2FsIC05OTk5Ljk5OTk5IC0+IDEKK2Jvb2wwMTgyIGlzY2Fub25pY2FsIDk5OTk5OTkuOTkgLT4gMQorYm9vbDAxODMgaXNjYW5vbmljYWwgLTk5OTk5OTkuOTkgLT4gMQorYm9vbDAxODQgaXNjYW5vbmljYWwgOS45OTk5OTk5OUUrMTAwIC0+IDEKK2Jvb2wwMTg1IGlzY2Fub25pY2FsIC05Ljk5OTk5OTk5RSsxMDAgLT4gMQorYm9vbDAxODYgaXNjYW5vbmljYWwgOS45OTk5OTk5OUUrOTkwIC0+IDEKK2Jvb2wwMTg3IGlzY2Fub25pY2FsIC05Ljk5OTk5OTk5RSs5OTAgLT4gMQorYm9vbDAxODggaXNjYW5vbmljYWwgOS45OTk5OTk5OUUrOTkxIC0+IDEKK2Jvb2wwMTg5IGlzY2Fub25pY2FsIC05Ljk5OTk5OTk5RSs5OTEgLT4gMQorYm9vbDAxOTAgaXNjYW5vbmljYWwgOS45OTk5OTk5OUUrOTkyIC0+IDEKK2Jvb2wwMTkxIGlzY2Fub25pY2FsIC05Ljk5OTk5OTk5RSs5OTIgLT4gMQorYm9vbDAxOTIgaXNjYW5vbmljYWwgOS45OTk5OTk5OUUrOTk4IC0+IDEKK2Jvb2wwMTkzIGlzY2Fub25pY2FsIC05Ljk5OTk5OTk5RSs5OTggLT4gMQorYm9vbDAxOTQgaXNjYW5vbmljYWwgOS45OTk5OTk5OUUrOTk5IC0+IDEKK2Jvb2wwMTk1IGlzY2Fub25pY2FsIC05Ljk5OTk5OTk5RSs5OTkgLT4gMQorYm9vbDAxOTYgaXNjYW5vbmljYWwgOS45OTk5OTk5OUUrMTAwMCAtPiAxCitib29sMDE5NyBpc2Nhbm9uaWNhbCAtOS45OTk5OTk5OUUrMTAwMCAtPiAxCitib29sMDE5OCBpc2Nhbm9uaWNhbCA5Ljk5OTk5OTk5RSsyMDAwIC0+IDEKK2Jvb2wwMTk5IGlzY2Fub25pY2FsIC05Ljk5OTk5OTk5RSsyMDAwIC0+IDEKK2Jvb2wwMjAwIGlzY2Fub25pY2FsIEluZmluaXR5IC0+IDEKK2Jvb2wwMjAxIGlzY2Fub25pY2FsIC1JbmZpbml0eSAtPiAxCitib29sMDIwMiBpc2Nhbm9uaWNhbCBOYU4gLT4gMQorYm9vbDAyMDMgaXNjYW5vbmljYWwgLU5hTiAtPiAxCitib29sMDIwNCBpc2Nhbm9uaWNhbCBOYU4xMjMgLT4gMQorYm9vbDAyMDUgaXNjYW5vbmljYWwgLU5hTjEyMyAtPiAxCitib29sMDIwNiBpc2Nhbm9uaWNhbCBzTmFOIC0+IDEKK2Jvb2wwMjA3IGlzY2Fub25pY2FsIC1zTmFOIC0+IDEKK2Jvb2wwMjA4IGlzY2Fub25pY2FsIHNOYU4xMjMgLT4gMQorYm9vbDAyMDkgaXNjYW5vbmljYWwgLXNOYU4xMjMgLT4gMQorYm9vbDAyMTAgaXNmaW5pdGUgMEUtMjAwMCAtPiAxCitib29sMDIxMSBpc2Zpbml0ZSAtMEUtMjAwMCAtPiAxCitib29sMDIxMiBpc2Zpbml0ZSAwRS0xMDA4IC0+IDEKK2Jvb2wwMjEzIGlzZmluaXRlIC0wRS0xMDA4IC0+IDEKK2Jvb2wwMjE0IGlzZmluaXRlIDBFLTEwMDcgLT4gMQorYm9vbDAyMTUgaXNmaW5pdGUgLTBFLTEwMDcgLT4gMQorYm9vbDAyMTYgaXNmaW5pdGUgMEUtMTAwNiAtPiAxCitib29sMDIxNyBpc2Zpbml0ZSAtMEUtMTAwNiAtPiAxCitib29sMDIxOCBpc2Zpbml0ZSAwRS0xMDAwIC0+IDEKK2Jvb2wwMjE5IGlzZmluaXRlIC0wRS0xMDAwIC0+IDEKK2Jvb2wwMjIwIGlzZmluaXRlIDBFLTk5OSAtPiAxCitib29sMDIyMSBpc2Zpbml0ZSAtMEUtOTk5IC0+IDEKK2Jvb2wwMjIyIGlzZmluaXRlIDBFLTk5OCAtPiAxCitib29sMDIyMyBpc2Zpbml0ZSAtMEUtOTk4IC0+IDEKK2Jvb2wwMjI0IGlzZmluaXRlIDBFLTEwMCAtPiAxCitib29sMDIyNSBpc2Zpbml0ZSAtMEUtMTAwIC0+IDEKK2Jvb2wwMjI2IGlzZmluaXRlIDAuMDAwMDAwIC0+IDEKK2Jvb2wwMjI3IGlzZmluaXRlIC0wLjAwMDAwMCAtPiAxCitib29sMDIyOCBpc2Zpbml0ZSAwLjAwMCAtPiAxCitib29sMDIyOSBpc2Zpbml0ZSAtMC4wMDAgLT4gMQorYm9vbDAyMzAgaXNmaW5pdGUgMC4wMCAtPiAxCitib29sMDIzMSBpc2Zpbml0ZSAtMC4wMCAtPiAxCitib29sMDIzMiBpc2Zpbml0ZSAwLjAgLT4gMQorYm9vbDAyMzMgaXNmaW5pdGUgLTAuMCAtPiAxCitib29sMDIzNCBpc2Zpbml0ZSAwIC0+IDEKK2Jvb2wwMjM1IGlzZmluaXRlIC0wIC0+IDEKK2Jvb2wwMjM2IGlzZmluaXRlIDBFKzEgLT4gMQorYm9vbDAyMzcgaXNmaW5pdGUgLTBFKzEgLT4gMQorYm9vbDAyMzggaXNmaW5pdGUgMEUrMiAtPiAxCitib29sMDIzOSBpc2Zpbml0ZSAtMEUrMiAtPiAxCitib29sMDI0MCBpc2Zpbml0ZSAwRSszIC0+IDEKK2Jvb2wwMjQxIGlzZmluaXRlIC0wRSszIC0+IDEKK2Jvb2wwMjQyIGlzZmluaXRlIDBFKzYgLT4gMQorYm9vbDAyNDMgaXNmaW5pdGUgLTBFKzYgLT4gMQorYm9vbDAyNDQgaXNmaW5pdGUgMEUrMTAwIC0+IDEKK2Jvb2wwMjQ1IGlzZmluaXRlIC0wRSsxMDAgLT4gMQorYm9vbDAyNDYgaXNmaW5pdGUgMEUrOTkwIC0+IDEKK2Jvb2wwMjQ3IGlzZmluaXRlIC0wRSs5OTAgLT4gMQorYm9vbDAyNDggaXNmaW5pdGUgMEUrOTkxIC0+IDEKK2Jvb2wwMjQ5IGlzZmluaXRlIC0wRSs5OTEgLT4gMQorYm9vbDAyNTAgaXNmaW5pdGUgMEUrOTkyIC0+IDEKK2Jvb2wwMjUxIGlzZmluaXRlIC0wRSs5OTIgLT4gMQorYm9vbDAyNTIgaXNmaW5pdGUgMEUrOTk4IC0+IDEKK2Jvb2wwMjUzIGlzZmluaXRlIC0wRSs5OTggLT4gMQorYm9vbDAyNTQgaXNmaW5pdGUgMEUrOTk5IC0+IDEKK2Jvb2wwMjU1IGlzZmluaXRlIC0wRSs5OTkgLT4gMQorYm9vbDAyNTYgaXNmaW5pdGUgMEUrMTAwMCAtPiAxCitib29sMDI1NyBpc2Zpbml0ZSAtMEUrMTAwMCAtPiAxCitib29sMDI1OCBpc2Zpbml0ZSAwRSsyMDAwIC0+IDEKK2Jvb2wwMjU5IGlzZmluaXRlIC0wRSsyMDAwIC0+IDEKK2Jvb2wwMjYwIGlzZmluaXRlIDFFLTIwMDAgLT4gMQorYm9vbDAyNjEgaXNmaW5pdGUgLTFFLTIwMDAgLT4gMQorYm9vbDAyNjIgaXNmaW5pdGUgMUUtMTAwOCAtPiAxCitib29sMDI2MyBpc2Zpbml0ZSAtMUUtMTAwOCAtPiAxCitib29sMDI2NCBpc2Zpbml0ZSAxRS0xMDA3IC0+IDEKK2Jvb2wwMjY1IGlzZmluaXRlIC0xRS0xMDA3IC0+IDEKK2Jvb2wwMjY2IGlzZmluaXRlIDFFLTEwMDYgLT4gMQorYm9vbDAyNjcgaXNmaW5pdGUgLTFFLTEwMDYgLT4gMQorYm9vbDAyNjggaXNmaW5pdGUgMUUtMTAwMCAtPiAxCitib29sMDI2OSBpc2Zpbml0ZSAtMUUtMTAwMCAtPiAxCitib29sMDI3MCBpc2Zpbml0ZSAxRS05OTkgLT4gMQorYm9vbDAyNzEgaXNmaW5pdGUgLTFFLTk5OSAtPiAxCitib29sMDI3MiBpc2Zpbml0ZSAxRS05OTggLT4gMQorYm9vbDAyNzMgaXNmaW5pdGUgLTFFLTk5OCAtPiAxCitib29sMDI3NCBpc2Zpbml0ZSAxRS0xMDAgLT4gMQorYm9vbDAyNzUgaXNmaW5pdGUgLTFFLTEwMCAtPiAxCitib29sMDI3NiBpc2Zpbml0ZSAwLjAwMDAwMSAtPiAxCitib29sMDI3NyBpc2Zpbml0ZSAtMC4wMDAwMDEgLT4gMQorYm9vbDAyNzggaXNmaW5pdGUgMC4wMDEgLT4gMQorYm9vbDAyNzkgaXNmaW5pdGUgLTAuMDAxIC0+IDEKK2Jvb2wwMjgwIGlzZmluaXRlIDAuMDEgLT4gMQorYm9vbDAyODEgaXNmaW5pdGUgLTAuMDEgLT4gMQorYm9vbDAyODIgaXNmaW5pdGUgMC4xIC0+IDEKK2Jvb2wwMjgzIGlzZmluaXRlIC0wLjEgLT4gMQorYm9vbDAyODQgaXNmaW5pdGUgMSAtPiAxCitib29sMDI4NSBpc2Zpbml0ZSAtMSAtPiAxCitib29sMDI4NiBpc2Zpbml0ZSAxRSsxIC0+IDEKK2Jvb2wwMjg3IGlzZmluaXRlIC0xRSsxIC0+IDEKK2Jvb2wwMjg4IGlzZmluaXRlIDFFKzIgLT4gMQorYm9vbDAyODkgaXNmaW5pdGUgLTFFKzIgLT4gMQorYm9vbDAyOTAgaXNmaW5pdGUgMUUrMyAtPiAxCitib29sMDI5MSBpc2Zpbml0ZSAtMUUrMyAtPiAxCitib29sMDI5MiBpc2Zpbml0ZSAxRSs2IC0+IDEKK2Jvb2wwMjkzIGlzZmluaXRlIC0xRSs2IC0+IDEKK2Jvb2wwMjk0IGlzZmluaXRlIDFFKzEwMCAtPiAxCitib29sMDI5NSBpc2Zpbml0ZSAtMUUrMTAwIC0+IDEKK2Jvb2wwMjk2IGlzZmluaXRlIDFFKzk5MCAtPiAxCitib29sMDI5NyBpc2Zpbml0ZSAtMUUrOTkwIC0+IDEKK2Jvb2wwMjk4IGlzZmluaXRlIDFFKzk5MSAtPiAxCitib29sMDI5OSBpc2Zpbml0ZSAtMUUrOTkxIC0+IDEKK2Jvb2wwMzAwIGlzZmluaXRlIDFFKzk5MiAtPiAxCitib29sMDMwMSBpc2Zpbml0ZSAtMUUrOTkyIC0+IDEKK2Jvb2wwMzAyIGlzZmluaXRlIDFFKzk5OCAtPiAxCitib29sMDMwMyBpc2Zpbml0ZSAtMUUrOTk4IC0+IDEKK2Jvb2wwMzA0IGlzZmluaXRlIDFFKzk5OSAtPiAxCitib29sMDMwNSBpc2Zpbml0ZSAtMUUrOTk5IC0+IDEKK2Jvb2wwMzA2IGlzZmluaXRlIDFFKzEwMDAgLT4gMQorYm9vbDAzMDcgaXNmaW5pdGUgLTFFKzEwMDAgLT4gMQorYm9vbDAzMDggaXNmaW5pdGUgMUUrMjAwMCAtPiAxCitib29sMDMwOSBpc2Zpbml0ZSAtMUUrMjAwMCAtPiAxCitib29sMDMxMCBpc2Zpbml0ZSA5RS0yMDAwIC0+IDEKK2Jvb2wwMzExIGlzZmluaXRlIC05RS0yMDAwIC0+IDEKK2Jvb2wwMzEyIGlzZmluaXRlIDlFLTEwMDggLT4gMQorYm9vbDAzMTMgaXNmaW5pdGUgLTlFLTEwMDggLT4gMQorYm9vbDAzMTQgaXNmaW5pdGUgOUUtMTAwNyAtPiAxCitib29sMDMxNSBpc2Zpbml0ZSAtOUUtMTAwNyAtPiAxCitib29sMDMxNiBpc2Zpbml0ZSA5RS0xMDA2IC0+IDEKK2Jvb2wwMzE3IGlzZmluaXRlIC05RS0xMDA2IC0+IDEKK2Jvb2wwMzE4IGlzZmluaXRlIDlFLTEwMDAgLT4gMQorYm9vbDAzMTkgaXNmaW5pdGUgLTlFLTEwMDAgLT4gMQorYm9vbDAzMjAgaXNmaW5pdGUgOUUtOTk5IC0+IDEKK2Jvb2wwMzIxIGlzZmluaXRlIC05RS05OTkgLT4gMQorYm9vbDAzMjIgaXNmaW5pdGUgOUUtOTk4IC0+IDEKK2Jvb2wwMzIzIGlzZmluaXRlIC05RS05OTggLT4gMQorYm9vbDAzMjQgaXNmaW5pdGUgOUUtMTAwIC0+IDEKK2Jvb2wwMzI1IGlzZmluaXRlIC05RS0xMDAgLT4gMQorYm9vbDAzMjYgaXNmaW5pdGUgMC4wMDAwMDkgLT4gMQorYm9vbDAzMjcgaXNmaW5pdGUgLTAuMDAwMDA5IC0+IDEKK2Jvb2wwMzI4IGlzZmluaXRlIDAuMDA5IC0+IDEKK2Jvb2wwMzI5IGlzZmluaXRlIC0wLjAwOSAtPiAxCitib29sMDMzMCBpc2Zpbml0ZSAwLjA5IC0+IDEKK2Jvb2wwMzMxIGlzZmluaXRlIC0wLjA5IC0+IDEKK2Jvb2wwMzMyIGlzZmluaXRlIDAuOSAtPiAxCitib29sMDMzMyBpc2Zpbml0ZSAtMC45IC0+IDEKK2Jvb2wwMzM0IGlzZmluaXRlIDkgLT4gMQorYm9vbDAzMzUgaXNmaW5pdGUgLTkgLT4gMQorYm9vbDAzMzYgaXNmaW5pdGUgOUUrMSAtPiAxCitib29sMDMzNyBpc2Zpbml0ZSAtOUUrMSAtPiAxCitib29sMDMzOCBpc2Zpbml0ZSA5RSsyIC0+IDEKK2Jvb2wwMzM5IGlzZmluaXRlIC05RSsyIC0+IDEKK2Jvb2wwMzQwIGlzZmluaXRlIDlFKzMgLT4gMQorYm9vbDAzNDEgaXNmaW5pdGUgLTlFKzMgLT4gMQorYm9vbDAzNDIgaXNmaW5pdGUgOUUrNiAtPiAxCitib29sMDM0MyBpc2Zpbml0ZSAtOUUrNiAtPiAxCitib29sMDM0NCBpc2Zpbml0ZSA5RSsxMDAgLT4gMQorYm9vbDAzNDUgaXNmaW5pdGUgLTlFKzEwMCAtPiAxCitib29sMDM0NiBpc2Zpbml0ZSA5RSs5OTAgLT4gMQorYm9vbDAzNDcgaXNmaW5pdGUgLTlFKzk5MCAtPiAxCitib29sMDM0OCBpc2Zpbml0ZSA5RSs5OTEgLT4gMQorYm9vbDAzNDkgaXNmaW5pdGUgLTlFKzk5MSAtPiAxCitib29sMDM1MCBpc2Zpbml0ZSA5RSs5OTIgLT4gMQorYm9vbDAzNTEgaXNmaW5pdGUgLTlFKzk5MiAtPiAxCitib29sMDM1MiBpc2Zpbml0ZSA5RSs5OTggLT4gMQorYm9vbDAzNTMgaXNmaW5pdGUgLTlFKzk5OCAtPiAxCitib29sMDM1NCBpc2Zpbml0ZSA5RSs5OTkgLT4gMQorYm9vbDAzNTUgaXNmaW5pdGUgLTlFKzk5OSAtPiAxCitib29sMDM1NiBpc2Zpbml0ZSA5RSsxMDAwIC0+IDEKK2Jvb2wwMzU3IGlzZmluaXRlIC05RSsxMDAwIC0+IDEKK2Jvb2wwMzU4IGlzZmluaXRlIDlFKzIwMDAgLT4gMQorYm9vbDAzNTkgaXNmaW5pdGUgLTlFKzIwMDAgLT4gMQorYm9vbDAzNjAgaXNmaW5pdGUgOS45OTk5OTk5OUUtMjAwMCAtPiAxCitib29sMDM2MSBpc2Zpbml0ZSAtOS45OTk5OTk5OUUtMjAwMCAtPiAxCitib29sMDM2MiBpc2Zpbml0ZSA5Ljk5OTk5OTk5RS0xMDA4IC0+IDEKK2Jvb2wwMzYzIGlzZmluaXRlIC05Ljk5OTk5OTk5RS0xMDA4IC0+IDEKK2Jvb2wwMzY0IGlzZmluaXRlIDkuOTk5OTk5OTlFLTEwMDcgLT4gMQorYm9vbDAzNjUgaXNmaW5pdGUgLTkuOTk5OTk5OTlFLTEwMDcgLT4gMQorYm9vbDAzNjYgaXNmaW5pdGUgOS45OTk5OTk5OUUtMTAwNiAtPiAxCitib29sMDM2NyBpc2Zpbml0ZSAtOS45OTk5OTk5OUUtMTAwNiAtPiAxCitib29sMDM2OCBpc2Zpbml0ZSA5Ljk5OTk5OTk5RS0xMDAwIC0+IDEKK2Jvb2wwMzY5IGlzZmluaXRlIC05Ljk5OTk5OTk5RS0xMDAwIC0+IDEKK2Jvb2wwMzcwIGlzZmluaXRlIDkuOTk5OTk5OTlFLTk5OSAtPiAxCitib29sMDM3MSBpc2Zpbml0ZSAtOS45OTk5OTk5OUUtOTk5IC0+IDEKK2Jvb2wwMzcyIGlzZmluaXRlIDkuOTk5OTk5OTlFLTk5OCAtPiAxCitib29sMDM3MyBpc2Zpbml0ZSAtOS45OTk5OTk5OUUtOTk4IC0+IDEKK2Jvb2wwMzc0IGlzZmluaXRlIDkuOTk5OTk5OTlFLTEwMCAtPiAxCitib29sMDM3NSBpc2Zpbml0ZSAtOS45OTk5OTk5OUUtMTAwIC0+IDEKK2Jvb2wwMzc2IGlzZmluaXRlIDAuMDAwMDA5OTk5OTk5OTkgLT4gMQorYm9vbDAzNzcgaXNmaW5pdGUgLTAuMDAwMDA5OTk5OTk5OTkgLT4gMQorYm9vbDAzNzggaXNmaW5pdGUgMC4wMDk5OTk5OTk5OSAtPiAxCitib29sMDM3OSBpc2Zpbml0ZSAtMC4wMDk5OTk5OTk5OSAtPiAxCitib29sMDM4MCBpc2Zpbml0ZSAwLjA5OTk5OTk5OTkgLT4gMQorYm9vbDAzODEgaXNmaW5pdGUgLTAuMDk5OTk5OTk5OSAtPiAxCitib29sMDM4MiBpc2Zpbml0ZSAwLjk5OTk5OTk5OSAtPiAxCitib29sMDM4MyBpc2Zpbml0ZSAtMC45OTk5OTk5OTkgLT4gMQorYm9vbDAzODQgaXNmaW5pdGUgOS45OTk5OTk5OSAtPiAxCitib29sMDM4NSBpc2Zpbml0ZSAtOS45OTk5OTk5OSAtPiAxCitib29sMDM4NiBpc2Zpbml0ZSA5OS45OTk5OTk5IC0+IDEKK2Jvb2wwMzg3IGlzZmluaXRlIC05OS45OTk5OTk5IC0+IDEKK2Jvb2wwMzg4IGlzZmluaXRlIDk5OS45OTk5OTkgLT4gMQorYm9vbDAzODkgaXNmaW5pdGUgLTk5OS45OTk5OTkgLT4gMQorYm9vbDAzOTAgaXNmaW5pdGUgOTk5OS45OTk5OSAtPiAxCitib29sMDM5MSBpc2Zpbml0ZSAtOTk5OS45OTk5OSAtPiAxCitib29sMDM5MiBpc2Zpbml0ZSA5OTk5OTk5Ljk5IC0+IDEKK2Jvb2wwMzkzIGlzZmluaXRlIC05OTk5OTk5Ljk5IC0+IDEKK2Jvb2wwMzk0IGlzZmluaXRlIDkuOTk5OTk5OTlFKzEwMCAtPiAxCitib29sMDM5NSBpc2Zpbml0ZSAtOS45OTk5OTk5OUUrMTAwIC0+IDEKK2Jvb2wwMzk2IGlzZmluaXRlIDkuOTk5OTk5OTlFKzk5MCAtPiAxCitib29sMDM5NyBpc2Zpbml0ZSAtOS45OTk5OTk5OUUrOTkwIC0+IDEKK2Jvb2wwMzk4IGlzZmluaXRlIDkuOTk5OTk5OTlFKzk5MSAtPiAxCitib29sMDM5OSBpc2Zpbml0ZSAtOS45OTk5OTk5OUUrOTkxIC0+IDEKK2Jvb2wwNDAwIGlzZmluaXRlIDkuOTk5OTk5OTlFKzk5MiAtPiAxCitib29sMDQwMSBpc2Zpbml0ZSAtOS45OTk5OTk5OUUrOTkyIC0+IDEKK2Jvb2wwNDAyIGlzZmluaXRlIDkuOTk5OTk5OTlFKzk5OCAtPiAxCitib29sMDQwMyBpc2Zpbml0ZSAtOS45OTk5OTk5OUUrOTk4IC0+IDEKK2Jvb2wwNDA0IGlzZmluaXRlIDkuOTk5OTk5OTlFKzk5OSAtPiAxCitib29sMDQwNSBpc2Zpbml0ZSAtOS45OTk5OTk5OUUrOTk5IC0+IDEKK2Jvb2wwNDA2IGlzZmluaXRlIDkuOTk5OTk5OTlFKzEwMDAgLT4gMQorYm9vbDA0MDcgaXNmaW5pdGUgLTkuOTk5OTk5OTlFKzEwMDAgLT4gMQorYm9vbDA0MDggaXNmaW5pdGUgOS45OTk5OTk5OUUrMjAwMCAtPiAxCitib29sMDQwOSBpc2Zpbml0ZSAtOS45OTk5OTk5OUUrMjAwMCAtPiAxCitib29sMDQxMCBpc2Zpbml0ZSBJbmZpbml0eSAtPiAwCitib29sMDQxMSBpc2Zpbml0ZSAtSW5maW5pdHkgLT4gMAorYm9vbDA0MTIgaXNmaW5pdGUgTmFOIC0+IDAKK2Jvb2wwNDEzIGlzZmluaXRlIC1OYU4gLT4gMAorYm9vbDA0MTQgaXNmaW5pdGUgTmFOMTIzIC0+IDAKK2Jvb2wwNDE1IGlzZmluaXRlIC1OYU4xMjMgLT4gMAorYm9vbDA0MTYgaXNmaW5pdGUgc05hTiAtPiAwCitib29sMDQxNyBpc2Zpbml0ZSAtc05hTiAtPiAwCitib29sMDQxOCBpc2Zpbml0ZSBzTmFOMTIzIC0+IDAKK2Jvb2wwNDE5IGlzZmluaXRlIC1zTmFOMTIzIC0+IDAKK2Jvb2wwNDIwIGlzaW5maW5pdGUgMEUtMjAwMCAtPiAwCitib29sMDQyMSBpc2luZmluaXRlIC0wRS0yMDAwIC0+IDAKK2Jvb2wwNDIyIGlzaW5maW5pdGUgMEUtMTAwOCAtPiAwCitib29sMDQyMyBpc2luZmluaXRlIC0wRS0xMDA4IC0+IDAKK2Jvb2wwNDI0IGlzaW5maW5pdGUgMEUtMTAwNyAtPiAwCitib29sMDQyNSBpc2luZmluaXRlIC0wRS0xMDA3IC0+IDAKK2Jvb2wwNDI2IGlzaW5maW5pdGUgMEUtMTAwNiAtPiAwCitib29sMDQyNyBpc2luZmluaXRlIC0wRS0xMDA2IC0+IDAKK2Jvb2wwNDI4IGlzaW5maW5pdGUgMEUtMTAwMCAtPiAwCitib29sMDQyOSBpc2luZmluaXRlIC0wRS0xMDAwIC0+IDAKK2Jvb2wwNDMwIGlzaW5maW5pdGUgMEUtOTk5IC0+IDAKK2Jvb2wwNDMxIGlzaW5maW5pdGUgLTBFLTk5OSAtPiAwCitib29sMDQzMiBpc2luZmluaXRlIDBFLTk5OCAtPiAwCitib29sMDQzMyBpc2luZmluaXRlIC0wRS05OTggLT4gMAorYm9vbDA0MzQgaXNpbmZpbml0ZSAwRS0xMDAgLT4gMAorYm9vbDA0MzUgaXNpbmZpbml0ZSAtMEUtMTAwIC0+IDAKK2Jvb2wwNDM2IGlzaW5maW5pdGUgMC4wMDAwMDAgLT4gMAorYm9vbDA0MzcgaXNpbmZpbml0ZSAtMC4wMDAwMDAgLT4gMAorYm9vbDA0MzggaXNpbmZpbml0ZSAwLjAwMCAtPiAwCitib29sMDQzOSBpc2luZmluaXRlIC0wLjAwMCAtPiAwCitib29sMDQ0MCBpc2luZmluaXRlIDAuMDAgLT4gMAorYm9vbDA0NDEgaXNpbmZpbml0ZSAtMC4wMCAtPiAwCitib29sMDQ0MiBpc2luZmluaXRlIDAuMCAtPiAwCitib29sMDQ0MyBpc2luZmluaXRlIC0wLjAgLT4gMAorYm9vbDA0NDQgaXNpbmZpbml0ZSAwIC0+IDAKK2Jvb2wwNDQ1IGlzaW5maW5pdGUgLTAgLT4gMAorYm9vbDA0NDYgaXNpbmZpbml0ZSAwRSsxIC0+IDAKK2Jvb2wwNDQ3IGlzaW5maW5pdGUgLTBFKzEgLT4gMAorYm9vbDA0NDggaXNpbmZpbml0ZSAwRSsyIC0+IDAKK2Jvb2wwNDQ5IGlzaW5maW5pdGUgLTBFKzIgLT4gMAorYm9vbDA0NTAgaXNpbmZpbml0ZSAwRSszIC0+IDAKK2Jvb2wwNDUxIGlzaW5maW5pdGUgLTBFKzMgLT4gMAorYm9vbDA0NTIgaXNpbmZpbml0ZSAwRSs2IC0+IDAKK2Jvb2wwNDUzIGlzaW5maW5pdGUgLTBFKzYgLT4gMAorYm9vbDA0NTQgaXNpbmZpbml0ZSAwRSsxMDAgLT4gMAorYm9vbDA0NTUgaXNpbmZpbml0ZSAtMEUrMTAwIC0+IDAKK2Jvb2wwNDU2IGlzaW5maW5pdGUgMEUrOTkwIC0+IDAKK2Jvb2wwNDU3IGlzaW5maW5pdGUgLTBFKzk5MCAtPiAwCitib29sMDQ1OCBpc2luZmluaXRlIDBFKzk5MSAtPiAwCitib29sMDQ1OSBpc2luZmluaXRlIC0wRSs5OTEgLT4gMAorYm9vbDA0NjAgaXNpbmZpbml0ZSAwRSs5OTIgLT4gMAorYm9vbDA0NjEgaXNpbmZpbml0ZSAtMEUrOTkyIC0+IDAKK2Jvb2wwNDYyIGlzaW5maW5pdGUgMEUrOTk4IC0+IDAKK2Jvb2wwNDYzIGlzaW5maW5pdGUgLTBFKzk5OCAtPiAwCitib29sMDQ2NCBpc2luZmluaXRlIDBFKzk5OSAtPiAwCitib29sMDQ2NSBpc2luZmluaXRlIC0wRSs5OTkgLT4gMAorYm9vbDA0NjYgaXNpbmZpbml0ZSAwRSsxMDAwIC0+IDAKK2Jvb2wwNDY3IGlzaW5maW5pdGUgLTBFKzEwMDAgLT4gMAorYm9vbDA0NjggaXNpbmZpbml0ZSAwRSsyMDAwIC0+IDAKK2Jvb2wwNDY5IGlzaW5maW5pdGUgLTBFKzIwMDAgLT4gMAorYm9vbDA0NzAgaXNpbmZpbml0ZSAxRS0yMDAwIC0+IDAKK2Jvb2wwNDcxIGlzaW5maW5pdGUgLTFFLTIwMDAgLT4gMAorYm9vbDA0NzIgaXNpbmZpbml0ZSAxRS0xMDA4IC0+IDAKK2Jvb2wwNDczIGlzaW5maW5pdGUgLTFFLTEwMDggLT4gMAorYm9vbDA0NzQgaXNpbmZpbml0ZSAxRS0xMDA3IC0+IDAKK2Jvb2wwNDc1IGlzaW5maW5pdGUgLTFFLTEwMDcgLT4gMAorYm9vbDA0NzYgaXNpbmZpbml0ZSAxRS0xMDA2IC0+IDAKK2Jvb2wwNDc3IGlzaW5maW5pdGUgLTFFLTEwMDYgLT4gMAorYm9vbDA0NzggaXNpbmZpbml0ZSAxRS0xMDAwIC0+IDAKK2Jvb2wwNDc5IGlzaW5maW5pdGUgLTFFLTEwMDAgLT4gMAorYm9vbDA0ODAgaXNpbmZpbml0ZSAxRS05OTkgLT4gMAorYm9vbDA0ODEgaXNpbmZpbml0ZSAtMUUtOTk5IC0+IDAKK2Jvb2wwNDgyIGlzaW5maW5pdGUgMUUtOTk4IC0+IDAKK2Jvb2wwNDgzIGlzaW5maW5pdGUgLTFFLTk5OCAtPiAwCitib29sMDQ4NCBpc2luZmluaXRlIDFFLTEwMCAtPiAwCitib29sMDQ4NSBpc2luZmluaXRlIC0xRS0xMDAgLT4gMAorYm9vbDA0ODYgaXNpbmZpbml0ZSAwLjAwMDAwMSAtPiAwCitib29sMDQ4NyBpc2luZmluaXRlIC0wLjAwMDAwMSAtPiAwCitib29sMDQ4OCBpc2luZmluaXRlIDAuMDAxIC0+IDAKK2Jvb2wwNDg5IGlzaW5maW5pdGUgLTAuMDAxIC0+IDAKK2Jvb2wwNDkwIGlzaW5maW5pdGUgMC4wMSAtPiAwCitib29sMDQ5MSBpc2luZmluaXRlIC0wLjAxIC0+IDAKK2Jvb2wwNDkyIGlzaW5maW5pdGUgMC4xIC0+IDAKK2Jvb2wwNDkzIGlzaW5maW5pdGUgLTAuMSAtPiAwCitib29sMDQ5NCBpc2luZmluaXRlIDEgLT4gMAorYm9vbDA0OTUgaXNpbmZpbml0ZSAtMSAtPiAwCitib29sMDQ5NiBpc2luZmluaXRlIDFFKzEgLT4gMAorYm9vbDA0OTcgaXNpbmZpbml0ZSAtMUUrMSAtPiAwCitib29sMDQ5OCBpc2luZmluaXRlIDFFKzIgLT4gMAorYm9vbDA0OTkgaXNpbmZpbml0ZSAtMUUrMiAtPiAwCitib29sMDUwMCBpc2luZmluaXRlIDFFKzMgLT4gMAorYm9vbDA1MDEgaXNpbmZpbml0ZSAtMUUrMyAtPiAwCitib29sMDUwMiBpc2luZmluaXRlIDFFKzYgLT4gMAorYm9vbDA1MDMgaXNpbmZpbml0ZSAtMUUrNiAtPiAwCitib29sMDUwNCBpc2luZmluaXRlIDFFKzEwMCAtPiAwCitib29sMDUwNSBpc2luZmluaXRlIC0xRSsxMDAgLT4gMAorYm9vbDA1MDYgaXNpbmZpbml0ZSAxRSs5OTAgLT4gMAorYm9vbDA1MDcgaXNpbmZpbml0ZSAtMUUrOTkwIC0+IDAKK2Jvb2wwNTA4IGlzaW5maW5pdGUgMUUrOTkxIC0+IDAKK2Jvb2wwNTA5IGlzaW5maW5pdGUgLTFFKzk5MSAtPiAwCitib29sMDUxMCBpc2luZmluaXRlIDFFKzk5MiAtPiAwCitib29sMDUxMSBpc2luZmluaXRlIC0xRSs5OTIgLT4gMAorYm9vbDA1MTIgaXNpbmZpbml0ZSAxRSs5OTggLT4gMAorYm9vbDA1MTMgaXNpbmZpbml0ZSAtMUUrOTk4IC0+IDAKK2Jvb2wwNTE0IGlzaW5maW5pdGUgMUUrOTk5IC0+IDAKK2Jvb2wwNTE1IGlzaW5maW5pdGUgLTFFKzk5OSAtPiAwCitib29sMDUxNiBpc2luZmluaXRlIDFFKzEwMDAgLT4gMAorYm9vbDA1MTcgaXNpbmZpbml0ZSAtMUUrMTAwMCAtPiAwCitib29sMDUxOCBpc2luZmluaXRlIDFFKzIwMDAgLT4gMAorYm9vbDA1MTkgaXNpbmZpbml0ZSAtMUUrMjAwMCAtPiAwCitib29sMDUyMCBpc2luZmluaXRlIDlFLTIwMDAgLT4gMAorYm9vbDA1MjEgaXNpbmZpbml0ZSAtOUUtMjAwMCAtPiAwCitib29sMDUyMiBpc2luZmluaXRlIDlFLTEwMDggLT4gMAorYm9vbDA1MjMgaXNpbmZpbml0ZSAtOUUtMTAwOCAtPiAwCitib29sMDUyNCBpc2luZmluaXRlIDlFLTEwMDcgLT4gMAorYm9vbDA1MjUgaXNpbmZpbml0ZSAtOUUtMTAwNyAtPiAwCitib29sMDUyNiBpc2luZmluaXRlIDlFLTEwMDYgLT4gMAorYm9vbDA1MjcgaXNpbmZpbml0ZSAtOUUtMTAwNiAtPiAwCitib29sMDUyOCBpc2luZmluaXRlIDlFLTEwMDAgLT4gMAorYm9vbDA1MjkgaXNpbmZpbml0ZSAtOUUtMTAwMCAtPiAwCitib29sMDUzMCBpc2luZmluaXRlIDlFLTk5OSAtPiAwCitib29sMDUzMSBpc2luZmluaXRlIC05RS05OTkgLT4gMAorYm9vbDA1MzIgaXNpbmZpbml0ZSA5RS05OTggLT4gMAorYm9vbDA1MzMgaXNpbmZpbml0ZSAtOUUtOTk4IC0+IDAKK2Jvb2wwNTM0IGlzaW5maW5pdGUgOUUtMTAwIC0+IDAKK2Jvb2wwNTM1IGlzaW5maW5pdGUgLTlFLTEwMCAtPiAwCitib29sMDUzNiBpc2luZmluaXRlIDAuMDAwMDA5IC0+IDAKK2Jvb2wwNTM3IGlzaW5maW5pdGUgLTAuMDAwMDA5IC0+IDAKK2Jvb2wwNTM4IGlzaW5maW5pdGUgMC4wMDkgLT4gMAorYm9vbDA1MzkgaXNpbmZpbml0ZSAtMC4wMDkgLT4gMAorYm9vbDA1NDAgaXNpbmZpbml0ZSAwLjA5IC0+IDAKK2Jvb2wwNTQxIGlzaW5maW5pdGUgLTAuMDkgLT4gMAorYm9vbDA1NDIgaXNpbmZpbml0ZSAwLjkgLT4gMAorYm9vbDA1NDMgaXNpbmZpbml0ZSAtMC45IC0+IDAKK2Jvb2wwNTQ0IGlzaW5maW5pdGUgOSAtPiAwCitib29sMDU0NSBpc2luZmluaXRlIC05IC0+IDAKK2Jvb2wwNTQ2IGlzaW5maW5pdGUgOUUrMSAtPiAwCitib29sMDU0NyBpc2luZmluaXRlIC05RSsxIC0+IDAKK2Jvb2wwNTQ4IGlzaW5maW5pdGUgOUUrMiAtPiAwCitib29sMDU0OSBpc2luZmluaXRlIC05RSsyIC0+IDAKK2Jvb2wwNTUwIGlzaW5maW5pdGUgOUUrMyAtPiAwCitib29sMDU1MSBpc2luZmluaXRlIC05RSszIC0+IDAKK2Jvb2wwNTUyIGlzaW5maW5pdGUgOUUrNiAtPiAwCitib29sMDU1MyBpc2luZmluaXRlIC05RSs2IC0+IDAKK2Jvb2wwNTU0IGlzaW5maW5pdGUgOUUrMTAwIC0+IDAKK2Jvb2wwNTU1IGlzaW5maW5pdGUgLTlFKzEwMCAtPiAwCitib29sMDU1NiBpc2luZmluaXRlIDlFKzk5MCAtPiAwCitib29sMDU1NyBpc2luZmluaXRlIC05RSs5OTAgLT4gMAorYm9vbDA1NTggaXNpbmZpbml0ZSA5RSs5OTEgLT4gMAorYm9vbDA1NTkgaXNpbmZpbml0ZSAtOUUrOTkxIC0+IDAKK2Jvb2wwNTYwIGlzaW5maW5pdGUgOUUrOTkyIC0+IDAKK2Jvb2wwNTYxIGlzaW5maW5pdGUgLTlFKzk5MiAtPiAwCitib29sMDU2MiBpc2luZmluaXRlIDlFKzk5OCAtPiAwCitib29sMDU2MyBpc2luZmluaXRlIC05RSs5OTggLT4gMAorYm9vbDA1NjQgaXNpbmZpbml0ZSA5RSs5OTkgLT4gMAorYm9vbDA1NjUgaXNpbmZpbml0ZSAtOUUrOTk5IC0+IDAKK2Jvb2wwNTY2IGlzaW5maW5pdGUgOUUrMTAwMCAtPiAwCitib29sMDU2NyBpc2luZmluaXRlIC05RSsxMDAwIC0+IDAKK2Jvb2wwNTY4IGlzaW5maW5pdGUgOUUrMjAwMCAtPiAwCitib29sMDU2OSBpc2luZmluaXRlIC05RSsyMDAwIC0+IDAKK2Jvb2wwNTcwIGlzaW5maW5pdGUgOS45OTk5OTk5OUUtMjAwMCAtPiAwCitib29sMDU3MSBpc2luZmluaXRlIC05Ljk5OTk5OTk5RS0yMDAwIC0+IDAKK2Jvb2wwNTcyIGlzaW5maW5pdGUgOS45OTk5OTk5OUUtMTAwOCAtPiAwCitib29sMDU3MyBpc2luZmluaXRlIC05Ljk5OTk5OTk5RS0xMDA4IC0+IDAKK2Jvb2wwNTc0IGlzaW5maW5pdGUgOS45OTk5OTk5OUUtMTAwNyAtPiAwCitib29sMDU3NSBpc2luZmluaXRlIC05Ljk5OTk5OTk5RS0xMDA3IC0+IDAKK2Jvb2wwNTc2IGlzaW5maW5pdGUgOS45OTk5OTk5OUUtMTAwNiAtPiAwCitib29sMDU3NyBpc2luZmluaXRlIC05Ljk5OTk5OTk5RS0xMDA2IC0+IDAKK2Jvb2wwNTc4IGlzaW5maW5pdGUgOS45OTk5OTk5OUUtMTAwMCAtPiAwCitib29sMDU3OSBpc2luZmluaXRlIC05Ljk5OTk5OTk5RS0xMDAwIC0+IDAKK2Jvb2wwNTgwIGlzaW5maW5pdGUgOS45OTk5OTk5OUUtOTk5IC0+IDAKK2Jvb2wwNTgxIGlzaW5maW5pdGUgLTkuOTk5OTk5OTlFLTk5OSAtPiAwCitib29sMDU4MiBpc2luZmluaXRlIDkuOTk5OTk5OTlFLTk5OCAtPiAwCitib29sMDU4MyBpc2luZmluaXRlIC05Ljk5OTk5OTk5RS05OTggLT4gMAorYm9vbDA1ODQgaXNpbmZpbml0ZSA5Ljk5OTk5OTk5RS0xMDAgLT4gMAorYm9vbDA1ODUgaXNpbmZpbml0ZSAtOS45OTk5OTk5OUUtMTAwIC0+IDAKK2Jvb2wwNTg2IGlzaW5maW5pdGUgMC4wMDAwMDk5OTk5OTk5OSAtPiAwCitib29sMDU4NyBpc2luZmluaXRlIC0wLjAwMDAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wwNTg4IGlzaW5maW5pdGUgMC4wMDk5OTk5OTk5OSAtPiAwCitib29sMDU4OSBpc2luZmluaXRlIC0wLjAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wwNTkwIGlzaW5maW5pdGUgMC4wOTk5OTk5OTk5IC0+IDAKK2Jvb2wwNTkxIGlzaW5maW5pdGUgLTAuMDk5OTk5OTk5OSAtPiAwCitib29sMDU5MiBpc2luZmluaXRlIDAuOTk5OTk5OTk5IC0+IDAKK2Jvb2wwNTkzIGlzaW5maW5pdGUgLTAuOTk5OTk5OTk5IC0+IDAKK2Jvb2wwNTk0IGlzaW5maW5pdGUgOS45OTk5OTk5OSAtPiAwCitib29sMDU5NSBpc2luZmluaXRlIC05Ljk5OTk5OTk5IC0+IDAKK2Jvb2wwNTk2IGlzaW5maW5pdGUgOTkuOTk5OTk5OSAtPiAwCitib29sMDU5NyBpc2luZmluaXRlIC05OS45OTk5OTk5IC0+IDAKK2Jvb2wwNTk4IGlzaW5maW5pdGUgOTk5Ljk5OTk5OSAtPiAwCitib29sMDU5OSBpc2luZmluaXRlIC05OTkuOTk5OTk5IC0+IDAKK2Jvb2wwNjAwIGlzaW5maW5pdGUgOTk5OS45OTk5OSAtPiAwCitib29sMDYwMSBpc2luZmluaXRlIC05OTk5Ljk5OTk5IC0+IDAKK2Jvb2wwNjAyIGlzaW5maW5pdGUgOTk5OTk5OS45OSAtPiAwCitib29sMDYwMyBpc2luZmluaXRlIC05OTk5OTk5Ljk5IC0+IDAKK2Jvb2wwNjA0IGlzaW5maW5pdGUgOS45OTk5OTk5OUUrMTAwIC0+IDAKK2Jvb2wwNjA1IGlzaW5maW5pdGUgLTkuOTk5OTk5OTlFKzEwMCAtPiAwCitib29sMDYwNiBpc2luZmluaXRlIDkuOTk5OTk5OTlFKzk5MCAtPiAwCitib29sMDYwNyBpc2luZmluaXRlIC05Ljk5OTk5OTk5RSs5OTAgLT4gMAorYm9vbDA2MDggaXNpbmZpbml0ZSA5Ljk5OTk5OTk5RSs5OTEgLT4gMAorYm9vbDA2MDkgaXNpbmZpbml0ZSAtOS45OTk5OTk5OUUrOTkxIC0+IDAKK2Jvb2wwNjEwIGlzaW5maW5pdGUgOS45OTk5OTk5OUUrOTkyIC0+IDAKK2Jvb2wwNjExIGlzaW5maW5pdGUgLTkuOTk5OTk5OTlFKzk5MiAtPiAwCitib29sMDYxMiBpc2luZmluaXRlIDkuOTk5OTk5OTlFKzk5OCAtPiAwCitib29sMDYxMyBpc2luZmluaXRlIC05Ljk5OTk5OTk5RSs5OTggLT4gMAorYm9vbDA2MTQgaXNpbmZpbml0ZSA5Ljk5OTk5OTk5RSs5OTkgLT4gMAorYm9vbDA2MTUgaXNpbmZpbml0ZSAtOS45OTk5OTk5OUUrOTk5IC0+IDAKK2Jvb2wwNjE2IGlzaW5maW5pdGUgOS45OTk5OTk5OUUrMTAwMCAtPiAwCitib29sMDYxNyBpc2luZmluaXRlIC05Ljk5OTk5OTk5RSsxMDAwIC0+IDAKK2Jvb2wwNjE4IGlzaW5maW5pdGUgOS45OTk5OTk5OUUrMjAwMCAtPiAwCitib29sMDYxOSBpc2luZmluaXRlIC05Ljk5OTk5OTk5RSsyMDAwIC0+IDAKK2Jvb2wwNjIwIGlzaW5maW5pdGUgSW5maW5pdHkgLT4gMQorYm9vbDA2MjEgaXNpbmZpbml0ZSAtSW5maW5pdHkgLT4gMQorYm9vbDA2MjIgaXNpbmZpbml0ZSBOYU4gLT4gMAorYm9vbDA2MjMgaXNpbmZpbml0ZSAtTmFOIC0+IDAKK2Jvb2wwNjI0IGlzaW5maW5pdGUgTmFOMTIzIC0+IDAKK2Jvb2wwNjI1IGlzaW5maW5pdGUgLU5hTjEyMyAtPiAwCitib29sMDYyNiBpc2luZmluaXRlIHNOYU4gLT4gMAorYm9vbDA2MjcgaXNpbmZpbml0ZSAtc05hTiAtPiAwCitib29sMDYyOCBpc2luZmluaXRlIHNOYU4xMjMgLT4gMAorYm9vbDA2MjkgaXNpbmZpbml0ZSAtc05hTjEyMyAtPiAwCitib29sMDYzMCBpc25hbiAwRS0yMDAwIC0+IDAKK2Jvb2wwNjMxIGlzbmFuIC0wRS0yMDAwIC0+IDAKK2Jvb2wwNjMyIGlzbmFuIDBFLTEwMDggLT4gMAorYm9vbDA2MzMgaXNuYW4gLTBFLTEwMDggLT4gMAorYm9vbDA2MzQgaXNuYW4gMEUtMTAwNyAtPiAwCitib29sMDYzNSBpc25hbiAtMEUtMTAwNyAtPiAwCitib29sMDYzNiBpc25hbiAwRS0xMDA2IC0+IDAKK2Jvb2wwNjM3IGlzbmFuIC0wRS0xMDA2IC0+IDAKK2Jvb2wwNjM4IGlzbmFuIDBFLTEwMDAgLT4gMAorYm9vbDA2MzkgaXNuYW4gLTBFLTEwMDAgLT4gMAorYm9vbDA2NDAgaXNuYW4gMEUtOTk5IC0+IDAKK2Jvb2wwNjQxIGlzbmFuIC0wRS05OTkgLT4gMAorYm9vbDA2NDIgaXNuYW4gMEUtOTk4IC0+IDAKK2Jvb2wwNjQzIGlzbmFuIC0wRS05OTggLT4gMAorYm9vbDA2NDQgaXNuYW4gMEUtMTAwIC0+IDAKK2Jvb2wwNjQ1IGlzbmFuIC0wRS0xMDAgLT4gMAorYm9vbDA2NDYgaXNuYW4gMC4wMDAwMDAgLT4gMAorYm9vbDA2NDcgaXNuYW4gLTAuMDAwMDAwIC0+IDAKK2Jvb2wwNjQ4IGlzbmFuIDAuMDAwIC0+IDAKK2Jvb2wwNjQ5IGlzbmFuIC0wLjAwMCAtPiAwCitib29sMDY1MCBpc25hbiAwLjAwIC0+IDAKK2Jvb2wwNjUxIGlzbmFuIC0wLjAwIC0+IDAKK2Jvb2wwNjUyIGlzbmFuIDAuMCAtPiAwCitib29sMDY1MyBpc25hbiAtMC4wIC0+IDAKK2Jvb2wwNjU0IGlzbmFuIDAgLT4gMAorYm9vbDA2NTUgaXNuYW4gLTAgLT4gMAorYm9vbDA2NTYgaXNuYW4gMEUrMSAtPiAwCitib29sMDY1NyBpc25hbiAtMEUrMSAtPiAwCitib29sMDY1OCBpc25hbiAwRSsyIC0+IDAKK2Jvb2wwNjU5IGlzbmFuIC0wRSsyIC0+IDAKK2Jvb2wwNjYwIGlzbmFuIDBFKzMgLT4gMAorYm9vbDA2NjEgaXNuYW4gLTBFKzMgLT4gMAorYm9vbDA2NjIgaXNuYW4gMEUrNiAtPiAwCitib29sMDY2MyBpc25hbiAtMEUrNiAtPiAwCitib29sMDY2NCBpc25hbiAwRSsxMDAgLT4gMAorYm9vbDA2NjUgaXNuYW4gLTBFKzEwMCAtPiAwCitib29sMDY2NiBpc25hbiAwRSs5OTAgLT4gMAorYm9vbDA2NjcgaXNuYW4gLTBFKzk5MCAtPiAwCitib29sMDY2OCBpc25hbiAwRSs5OTEgLT4gMAorYm9vbDA2NjkgaXNuYW4gLTBFKzk5MSAtPiAwCitib29sMDY3MCBpc25hbiAwRSs5OTIgLT4gMAorYm9vbDA2NzEgaXNuYW4gLTBFKzk5MiAtPiAwCitib29sMDY3MiBpc25hbiAwRSs5OTggLT4gMAorYm9vbDA2NzMgaXNuYW4gLTBFKzk5OCAtPiAwCitib29sMDY3NCBpc25hbiAwRSs5OTkgLT4gMAorYm9vbDA2NzUgaXNuYW4gLTBFKzk5OSAtPiAwCitib29sMDY3NiBpc25hbiAwRSsxMDAwIC0+IDAKK2Jvb2wwNjc3IGlzbmFuIC0wRSsxMDAwIC0+IDAKK2Jvb2wwNjc4IGlzbmFuIDBFKzIwMDAgLT4gMAorYm9vbDA2NzkgaXNuYW4gLTBFKzIwMDAgLT4gMAorYm9vbDA2ODAgaXNuYW4gMUUtMjAwMCAtPiAwCitib29sMDY4MSBpc25hbiAtMUUtMjAwMCAtPiAwCitib29sMDY4MiBpc25hbiAxRS0xMDA4IC0+IDAKK2Jvb2wwNjgzIGlzbmFuIC0xRS0xMDA4IC0+IDAKK2Jvb2wwNjg0IGlzbmFuIDFFLTEwMDcgLT4gMAorYm9vbDA2ODUgaXNuYW4gLTFFLTEwMDcgLT4gMAorYm9vbDA2ODYgaXNuYW4gMUUtMTAwNiAtPiAwCitib29sMDY4NyBpc25hbiAtMUUtMTAwNiAtPiAwCitib29sMDY4OCBpc25hbiAxRS0xMDAwIC0+IDAKK2Jvb2wwNjg5IGlzbmFuIC0xRS0xMDAwIC0+IDAKK2Jvb2wwNjkwIGlzbmFuIDFFLTk5OSAtPiAwCitib29sMDY5MSBpc25hbiAtMUUtOTk5IC0+IDAKK2Jvb2wwNjkyIGlzbmFuIDFFLTk5OCAtPiAwCitib29sMDY5MyBpc25hbiAtMUUtOTk4IC0+IDAKK2Jvb2wwNjk0IGlzbmFuIDFFLTEwMCAtPiAwCitib29sMDY5NSBpc25hbiAtMUUtMTAwIC0+IDAKK2Jvb2wwNjk2IGlzbmFuIDAuMDAwMDAxIC0+IDAKK2Jvb2wwNjk3IGlzbmFuIC0wLjAwMDAwMSAtPiAwCitib29sMDY5OCBpc25hbiAwLjAwMSAtPiAwCitib29sMDY5OSBpc25hbiAtMC4wMDEgLT4gMAorYm9vbDA3MDAgaXNuYW4gMC4wMSAtPiAwCitib29sMDcwMSBpc25hbiAtMC4wMSAtPiAwCitib29sMDcwMiBpc25hbiAwLjEgLT4gMAorYm9vbDA3MDMgaXNuYW4gLTAuMSAtPiAwCitib29sMDcwNCBpc25hbiAxIC0+IDAKK2Jvb2wwNzA1IGlzbmFuIC0xIC0+IDAKK2Jvb2wwNzA2IGlzbmFuIDFFKzEgLT4gMAorYm9vbDA3MDcgaXNuYW4gLTFFKzEgLT4gMAorYm9vbDA3MDggaXNuYW4gMUUrMiAtPiAwCitib29sMDcwOSBpc25hbiAtMUUrMiAtPiAwCitib29sMDcxMCBpc25hbiAxRSszIC0+IDAKK2Jvb2wwNzExIGlzbmFuIC0xRSszIC0+IDAKK2Jvb2wwNzEyIGlzbmFuIDFFKzYgLT4gMAorYm9vbDA3MTMgaXNuYW4gLTFFKzYgLT4gMAorYm9vbDA3MTQgaXNuYW4gMUUrMTAwIC0+IDAKK2Jvb2wwNzE1IGlzbmFuIC0xRSsxMDAgLT4gMAorYm9vbDA3MTYgaXNuYW4gMUUrOTkwIC0+IDAKK2Jvb2wwNzE3IGlzbmFuIC0xRSs5OTAgLT4gMAorYm9vbDA3MTggaXNuYW4gMUUrOTkxIC0+IDAKK2Jvb2wwNzE5IGlzbmFuIC0xRSs5OTEgLT4gMAorYm9vbDA3MjAgaXNuYW4gMUUrOTkyIC0+IDAKK2Jvb2wwNzIxIGlzbmFuIC0xRSs5OTIgLT4gMAorYm9vbDA3MjIgaXNuYW4gMUUrOTk4IC0+IDAKK2Jvb2wwNzIzIGlzbmFuIC0xRSs5OTggLT4gMAorYm9vbDA3MjQgaXNuYW4gMUUrOTk5IC0+IDAKK2Jvb2wwNzI1IGlzbmFuIC0xRSs5OTkgLT4gMAorYm9vbDA3MjYgaXNuYW4gMUUrMTAwMCAtPiAwCitib29sMDcyNyBpc25hbiAtMUUrMTAwMCAtPiAwCitib29sMDcyOCBpc25hbiAxRSsyMDAwIC0+IDAKK2Jvb2wwNzI5IGlzbmFuIC0xRSsyMDAwIC0+IDAKK2Jvb2wwNzMwIGlzbmFuIDlFLTIwMDAgLT4gMAorYm9vbDA3MzEgaXNuYW4gLTlFLTIwMDAgLT4gMAorYm9vbDA3MzIgaXNuYW4gOUUtMTAwOCAtPiAwCitib29sMDczMyBpc25hbiAtOUUtMTAwOCAtPiAwCitib29sMDczNCBpc25hbiA5RS0xMDA3IC0+IDAKK2Jvb2wwNzM1IGlzbmFuIC05RS0xMDA3IC0+IDAKK2Jvb2wwNzM2IGlzbmFuIDlFLTEwMDYgLT4gMAorYm9vbDA3MzcgaXNuYW4gLTlFLTEwMDYgLT4gMAorYm9vbDA3MzggaXNuYW4gOUUtMTAwMCAtPiAwCitib29sMDczOSBpc25hbiAtOUUtMTAwMCAtPiAwCitib29sMDc0MCBpc25hbiA5RS05OTkgLT4gMAorYm9vbDA3NDEgaXNuYW4gLTlFLTk5OSAtPiAwCitib29sMDc0MiBpc25hbiA5RS05OTggLT4gMAorYm9vbDA3NDMgaXNuYW4gLTlFLTk5OCAtPiAwCitib29sMDc0NCBpc25hbiA5RS0xMDAgLT4gMAorYm9vbDA3NDUgaXNuYW4gLTlFLTEwMCAtPiAwCitib29sMDc0NiBpc25hbiAwLjAwMDAwOSAtPiAwCitib29sMDc0NyBpc25hbiAtMC4wMDAwMDkgLT4gMAorYm9vbDA3NDggaXNuYW4gMC4wMDkgLT4gMAorYm9vbDA3NDkgaXNuYW4gLTAuMDA5IC0+IDAKK2Jvb2wwNzUwIGlzbmFuIDAuMDkgLT4gMAorYm9vbDA3NTEgaXNuYW4gLTAuMDkgLT4gMAorYm9vbDA3NTIgaXNuYW4gMC45IC0+IDAKK2Jvb2wwNzUzIGlzbmFuIC0wLjkgLT4gMAorYm9vbDA3NTQgaXNuYW4gOSAtPiAwCitib29sMDc1NSBpc25hbiAtOSAtPiAwCitib29sMDc1NiBpc25hbiA5RSsxIC0+IDAKK2Jvb2wwNzU3IGlzbmFuIC05RSsxIC0+IDAKK2Jvb2wwNzU4IGlzbmFuIDlFKzIgLT4gMAorYm9vbDA3NTkgaXNuYW4gLTlFKzIgLT4gMAorYm9vbDA3NjAgaXNuYW4gOUUrMyAtPiAwCitib29sMDc2MSBpc25hbiAtOUUrMyAtPiAwCitib29sMDc2MiBpc25hbiA5RSs2IC0+IDAKK2Jvb2wwNzYzIGlzbmFuIC05RSs2IC0+IDAKK2Jvb2wwNzY0IGlzbmFuIDlFKzEwMCAtPiAwCitib29sMDc2NSBpc25hbiAtOUUrMTAwIC0+IDAKK2Jvb2wwNzY2IGlzbmFuIDlFKzk5MCAtPiAwCitib29sMDc2NyBpc25hbiAtOUUrOTkwIC0+IDAKK2Jvb2wwNzY4IGlzbmFuIDlFKzk5MSAtPiAwCitib29sMDc2OSBpc25hbiAtOUUrOTkxIC0+IDAKK2Jvb2wwNzcwIGlzbmFuIDlFKzk5MiAtPiAwCitib29sMDc3MSBpc25hbiAtOUUrOTkyIC0+IDAKK2Jvb2wwNzcyIGlzbmFuIDlFKzk5OCAtPiAwCitib29sMDc3MyBpc25hbiAtOUUrOTk4IC0+IDAKK2Jvb2wwNzc0IGlzbmFuIDlFKzk5OSAtPiAwCitib29sMDc3NSBpc25hbiAtOUUrOTk5IC0+IDAKK2Jvb2wwNzc2IGlzbmFuIDlFKzEwMDAgLT4gMAorYm9vbDA3NzcgaXNuYW4gLTlFKzEwMDAgLT4gMAorYm9vbDA3NzggaXNuYW4gOUUrMjAwMCAtPiAwCitib29sMDc3OSBpc25hbiAtOUUrMjAwMCAtPiAwCitib29sMDc4MCBpc25hbiA5Ljk5OTk5OTk5RS0yMDAwIC0+IDAKK2Jvb2wwNzgxIGlzbmFuIC05Ljk5OTk5OTk5RS0yMDAwIC0+IDAKK2Jvb2wwNzgyIGlzbmFuIDkuOTk5OTk5OTlFLTEwMDggLT4gMAorYm9vbDA3ODMgaXNuYW4gLTkuOTk5OTk5OTlFLTEwMDggLT4gMAorYm9vbDA3ODQgaXNuYW4gOS45OTk5OTk5OUUtMTAwNyAtPiAwCitib29sMDc4NSBpc25hbiAtOS45OTk5OTk5OUUtMTAwNyAtPiAwCitib29sMDc4NiBpc25hbiA5Ljk5OTk5OTk5RS0xMDA2IC0+IDAKK2Jvb2wwNzg3IGlzbmFuIC05Ljk5OTk5OTk5RS0xMDA2IC0+IDAKK2Jvb2wwNzg4IGlzbmFuIDkuOTk5OTk5OTlFLTEwMDAgLT4gMAorYm9vbDA3ODkgaXNuYW4gLTkuOTk5OTk5OTlFLTEwMDAgLT4gMAorYm9vbDA3OTAgaXNuYW4gOS45OTk5OTk5OUUtOTk5IC0+IDAKK2Jvb2wwNzkxIGlzbmFuIC05Ljk5OTk5OTk5RS05OTkgLT4gMAorYm9vbDA3OTIgaXNuYW4gOS45OTk5OTk5OUUtOTk4IC0+IDAKK2Jvb2wwNzkzIGlzbmFuIC05Ljk5OTk5OTk5RS05OTggLT4gMAorYm9vbDA3OTQgaXNuYW4gOS45OTk5OTk5OUUtMTAwIC0+IDAKK2Jvb2wwNzk1IGlzbmFuIC05Ljk5OTk5OTk5RS0xMDAgLT4gMAorYm9vbDA3OTYgaXNuYW4gMC4wMDAwMDk5OTk5OTk5OSAtPiAwCitib29sMDc5NyBpc25hbiAtMC4wMDAwMDk5OTk5OTk5OSAtPiAwCitib29sMDc5OCBpc25hbiAwLjAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wwNzk5IGlzbmFuIC0wLjAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wwODAwIGlzbmFuIDAuMDk5OTk5OTk5OSAtPiAwCitib29sMDgwMSBpc25hbiAtMC4wOTk5OTk5OTk5IC0+IDAKK2Jvb2wwODAyIGlzbmFuIDAuOTk5OTk5OTk5IC0+IDAKK2Jvb2wwODAzIGlzbmFuIC0wLjk5OTk5OTk5OSAtPiAwCitib29sMDgwNCBpc25hbiA5Ljk5OTk5OTk5IC0+IDAKK2Jvb2wwODA1IGlzbmFuIC05Ljk5OTk5OTk5IC0+IDAKK2Jvb2wwODA2IGlzbmFuIDk5Ljk5OTk5OTkgLT4gMAorYm9vbDA4MDcgaXNuYW4gLTk5Ljk5OTk5OTkgLT4gMAorYm9vbDA4MDggaXNuYW4gOTk5Ljk5OTk5OSAtPiAwCitib29sMDgwOSBpc25hbiAtOTk5Ljk5OTk5OSAtPiAwCitib29sMDgxMCBpc25hbiA5OTk5Ljk5OTk5IC0+IDAKK2Jvb2wwODExIGlzbmFuIC05OTk5Ljk5OTk5IC0+IDAKK2Jvb2wwODEyIGlzbmFuIDk5OTk5OTkuOTkgLT4gMAorYm9vbDA4MTMgaXNuYW4gLTk5OTk5OTkuOTkgLT4gMAorYm9vbDA4MTQgaXNuYW4gOS45OTk5OTk5OUUrMTAwIC0+IDAKK2Jvb2wwODE1IGlzbmFuIC05Ljk5OTk5OTk5RSsxMDAgLT4gMAorYm9vbDA4MTYgaXNuYW4gOS45OTk5OTk5OUUrOTkwIC0+IDAKK2Jvb2wwODE3IGlzbmFuIC05Ljk5OTk5OTk5RSs5OTAgLT4gMAorYm9vbDA4MTggaXNuYW4gOS45OTk5OTk5OUUrOTkxIC0+IDAKK2Jvb2wwODE5IGlzbmFuIC05Ljk5OTk5OTk5RSs5OTEgLT4gMAorYm9vbDA4MjAgaXNuYW4gOS45OTk5OTk5OUUrOTkyIC0+IDAKK2Jvb2wwODIxIGlzbmFuIC05Ljk5OTk5OTk5RSs5OTIgLT4gMAorYm9vbDA4MjIgaXNuYW4gOS45OTk5OTk5OUUrOTk4IC0+IDAKK2Jvb2wwODIzIGlzbmFuIC05Ljk5OTk5OTk5RSs5OTggLT4gMAorYm9vbDA4MjQgaXNuYW4gOS45OTk5OTk5OUUrOTk5IC0+IDAKK2Jvb2wwODI1IGlzbmFuIC05Ljk5OTk5OTk5RSs5OTkgLT4gMAorYm9vbDA4MjYgaXNuYW4gOS45OTk5OTk5OUUrMTAwMCAtPiAwCitib29sMDgyNyBpc25hbiAtOS45OTk5OTk5OUUrMTAwMCAtPiAwCitib29sMDgyOCBpc25hbiA5Ljk5OTk5OTk5RSsyMDAwIC0+IDAKK2Jvb2wwODI5IGlzbmFuIC05Ljk5OTk5OTk5RSsyMDAwIC0+IDAKK2Jvb2wwODMwIGlzbmFuIEluZmluaXR5IC0+IDAKK2Jvb2wwODMxIGlzbmFuIC1JbmZpbml0eSAtPiAwCitib29sMDgzMiBpc25hbiBOYU4gLT4gMQorYm9vbDA4MzMgaXNuYW4gLU5hTiAtPiAxCitib29sMDgzNCBpc25hbiBOYU4xMjMgLT4gMQorYm9vbDA4MzUgaXNuYW4gLU5hTjEyMyAtPiAxCitib29sMDgzNiBpc25hbiBzTmFOIC0+IDEKK2Jvb2wwODM3IGlzbmFuIC1zTmFOIC0+IDEKK2Jvb2wwODM4IGlzbmFuIHNOYU4xMjMgLT4gMQorYm9vbDA4MzkgaXNuYW4gLXNOYU4xMjMgLT4gMQorYm9vbDA4NDAgaXNub3JtYWwgMEUtMjAwMCAtPiAwCitib29sMDg0MSBpc25vcm1hbCAtMEUtMjAwMCAtPiAwCitib29sMDg0MiBpc25vcm1hbCAwRS0xMDA4IC0+IDAKK2Jvb2wwODQzIGlzbm9ybWFsIC0wRS0xMDA4IC0+IDAKK2Jvb2wwODQ0IGlzbm9ybWFsIDBFLTEwMDcgLT4gMAorYm9vbDA4NDUgaXNub3JtYWwgLTBFLTEwMDcgLT4gMAorYm9vbDA4NDYgaXNub3JtYWwgMEUtMTAwNiAtPiAwCitib29sMDg0NyBpc25vcm1hbCAtMEUtMTAwNiAtPiAwCitib29sMDg0OCBpc25vcm1hbCAwRS0xMDAwIC0+IDAKK2Jvb2wwODQ5IGlzbm9ybWFsIC0wRS0xMDAwIC0+IDAKK2Jvb2wwODUwIGlzbm9ybWFsIDBFLTk5OSAtPiAwCitib29sMDg1MSBpc25vcm1hbCAtMEUtOTk5IC0+IDAKK2Jvb2wwODUyIGlzbm9ybWFsIDBFLTk5OCAtPiAwCitib29sMDg1MyBpc25vcm1hbCAtMEUtOTk4IC0+IDAKK2Jvb2wwODU0IGlzbm9ybWFsIDBFLTEwMCAtPiAwCitib29sMDg1NSBpc25vcm1hbCAtMEUtMTAwIC0+IDAKK2Jvb2wwODU2IGlzbm9ybWFsIDAuMDAwMDAwIC0+IDAKK2Jvb2wwODU3IGlzbm9ybWFsIC0wLjAwMDAwMCAtPiAwCitib29sMDg1OCBpc25vcm1hbCAwLjAwMCAtPiAwCitib29sMDg1OSBpc25vcm1hbCAtMC4wMDAgLT4gMAorYm9vbDA4NjAgaXNub3JtYWwgMC4wMCAtPiAwCitib29sMDg2MSBpc25vcm1hbCAtMC4wMCAtPiAwCitib29sMDg2MiBpc25vcm1hbCAwLjAgLT4gMAorYm9vbDA4NjMgaXNub3JtYWwgLTAuMCAtPiAwCitib29sMDg2NCBpc25vcm1hbCAwIC0+IDAKK2Jvb2wwODY1IGlzbm9ybWFsIC0wIC0+IDAKK2Jvb2wwODY2IGlzbm9ybWFsIDBFKzEgLT4gMAorYm9vbDA4NjcgaXNub3JtYWwgLTBFKzEgLT4gMAorYm9vbDA4NjggaXNub3JtYWwgMEUrMiAtPiAwCitib29sMDg2OSBpc25vcm1hbCAtMEUrMiAtPiAwCitib29sMDg3MCBpc25vcm1hbCAwRSszIC0+IDAKK2Jvb2wwODcxIGlzbm9ybWFsIC0wRSszIC0+IDAKK2Jvb2wwODcyIGlzbm9ybWFsIDBFKzYgLT4gMAorYm9vbDA4NzMgaXNub3JtYWwgLTBFKzYgLT4gMAorYm9vbDA4NzQgaXNub3JtYWwgMEUrMTAwIC0+IDAKK2Jvb2wwODc1IGlzbm9ybWFsIC0wRSsxMDAgLT4gMAorYm9vbDA4NzYgaXNub3JtYWwgMEUrOTkwIC0+IDAKK2Jvb2wwODc3IGlzbm9ybWFsIC0wRSs5OTAgLT4gMAorYm9vbDA4NzggaXNub3JtYWwgMEUrOTkxIC0+IDAKK2Jvb2wwODc5IGlzbm9ybWFsIC0wRSs5OTEgLT4gMAorYm9vbDA4ODAgaXNub3JtYWwgMEUrOTkyIC0+IDAKK2Jvb2wwODgxIGlzbm9ybWFsIC0wRSs5OTIgLT4gMAorYm9vbDA4ODIgaXNub3JtYWwgMEUrOTk4IC0+IDAKK2Jvb2wwODgzIGlzbm9ybWFsIC0wRSs5OTggLT4gMAorYm9vbDA4ODQgaXNub3JtYWwgMEUrOTk5IC0+IDAKK2Jvb2wwODg1IGlzbm9ybWFsIC0wRSs5OTkgLT4gMAorYm9vbDA4ODYgaXNub3JtYWwgMEUrMTAwMCAtPiAwCitib29sMDg4NyBpc25vcm1hbCAtMEUrMTAwMCAtPiAwCitib29sMDg4OCBpc25vcm1hbCAwRSsyMDAwIC0+IDAKK2Jvb2wwODg5IGlzbm9ybWFsIC0wRSsyMDAwIC0+IDAKK2Jvb2wwODkwIGlzbm9ybWFsIDFFLTIwMDAgLT4gMAorYm9vbDA4OTEgaXNub3JtYWwgLTFFLTIwMDAgLT4gMAorYm9vbDA4OTIgaXNub3JtYWwgMUUtMTAwOCAtPiAwCitib29sMDg5MyBpc25vcm1hbCAtMUUtMTAwOCAtPiAwCitib29sMDg5NCBpc25vcm1hbCAxRS0xMDA3IC0+IDAKK2Jvb2wwODk1IGlzbm9ybWFsIC0xRS0xMDA3IC0+IDAKK2Jvb2wwODk2IGlzbm9ybWFsIDFFLTEwMDYgLT4gMAorYm9vbDA4OTcgaXNub3JtYWwgLTFFLTEwMDYgLT4gMAorYm9vbDA4OTggaXNub3JtYWwgMUUtMTAwMCAtPiAwCitib29sMDg5OSBpc25vcm1hbCAtMUUtMTAwMCAtPiAwCitib29sMDkwMCBpc25vcm1hbCAxRS05OTkgLT4gMQorYm9vbDA5MDEgaXNub3JtYWwgLTFFLTk5OSAtPiAxCitib29sMDkwMiBpc25vcm1hbCAxRS05OTggLT4gMQorYm9vbDA5MDMgaXNub3JtYWwgLTFFLTk5OCAtPiAxCitib29sMDkwNCBpc25vcm1hbCAxRS0xMDAgLT4gMQorYm9vbDA5MDUgaXNub3JtYWwgLTFFLTEwMCAtPiAxCitib29sMDkwNiBpc25vcm1hbCAwLjAwMDAwMSAtPiAxCitib29sMDkwNyBpc25vcm1hbCAtMC4wMDAwMDEgLT4gMQorYm9vbDA5MDggaXNub3JtYWwgMC4wMDEgLT4gMQorYm9vbDA5MDkgaXNub3JtYWwgLTAuMDAxIC0+IDEKK2Jvb2wwOTEwIGlzbm9ybWFsIDAuMDEgLT4gMQorYm9vbDA5MTEgaXNub3JtYWwgLTAuMDEgLT4gMQorYm9vbDA5MTIgaXNub3JtYWwgMC4xIC0+IDEKK2Jvb2wwOTEzIGlzbm9ybWFsIC0wLjEgLT4gMQorYm9vbDA5MTQgaXNub3JtYWwgMSAtPiAxCitib29sMDkxNSBpc25vcm1hbCAtMSAtPiAxCitib29sMDkxNiBpc25vcm1hbCAxRSsxIC0+IDEKK2Jvb2wwOTE3IGlzbm9ybWFsIC0xRSsxIC0+IDEKK2Jvb2wwOTE4IGlzbm9ybWFsIDFFKzIgLT4gMQorYm9vbDA5MTkgaXNub3JtYWwgLTFFKzIgLT4gMQorYm9vbDA5MjAgaXNub3JtYWwgMUUrMyAtPiAxCitib29sMDkyMSBpc25vcm1hbCAtMUUrMyAtPiAxCitib29sMDkyMiBpc25vcm1hbCAxRSs2IC0+IDEKK2Jvb2wwOTIzIGlzbm9ybWFsIC0xRSs2IC0+IDEKK2Jvb2wwOTI0IGlzbm9ybWFsIDFFKzEwMCAtPiAxCitib29sMDkyNSBpc25vcm1hbCAtMUUrMTAwIC0+IDEKK2Jvb2wwOTI2IGlzbm9ybWFsIDFFKzk5MCAtPiAxCitib29sMDkyNyBpc25vcm1hbCAtMUUrOTkwIC0+IDEKK2Jvb2wwOTI4IGlzbm9ybWFsIDFFKzk5MSAtPiAxCitib29sMDkyOSBpc25vcm1hbCAtMUUrOTkxIC0+IDEKK2Jvb2wwOTMwIGlzbm9ybWFsIDFFKzk5MiAtPiAxCitib29sMDkzMSBpc25vcm1hbCAtMUUrOTkyIC0+IDEKK2Jvb2wwOTMyIGlzbm9ybWFsIDFFKzk5OCAtPiAxCitib29sMDkzMyBpc25vcm1hbCAtMUUrOTk4IC0+IDEKK2Jvb2wwOTM0IGlzbm9ybWFsIDFFKzk5OSAtPiAxCitib29sMDkzNSBpc25vcm1hbCAtMUUrOTk5IC0+IDEKK2Jvb2wwOTM2IGlzbm9ybWFsIDFFKzEwMDAgLT4gMQorYm9vbDA5MzcgaXNub3JtYWwgLTFFKzEwMDAgLT4gMQorYm9vbDA5MzggaXNub3JtYWwgMUUrMjAwMCAtPiAxCitib29sMDkzOSBpc25vcm1hbCAtMUUrMjAwMCAtPiAxCitib29sMDk0MCBpc25vcm1hbCA5RS0yMDAwIC0+IDAKK2Jvb2wwOTQxIGlzbm9ybWFsIC05RS0yMDAwIC0+IDAKK2Jvb2wwOTQyIGlzbm9ybWFsIDlFLTEwMDggLT4gMAorYm9vbDA5NDMgaXNub3JtYWwgLTlFLTEwMDggLT4gMAorYm9vbDA5NDQgaXNub3JtYWwgOUUtMTAwNyAtPiAwCitib29sMDk0NSBpc25vcm1hbCAtOUUtMTAwNyAtPiAwCitib29sMDk0NiBpc25vcm1hbCA5RS0xMDA2IC0+IDAKK2Jvb2wwOTQ3IGlzbm9ybWFsIC05RS0xMDA2IC0+IDAKK2Jvb2wwOTQ4IGlzbm9ybWFsIDlFLTEwMDAgLT4gMAorYm9vbDA5NDkgaXNub3JtYWwgLTlFLTEwMDAgLT4gMAorYm9vbDA5NTAgaXNub3JtYWwgOUUtOTk5IC0+IDEKK2Jvb2wwOTUxIGlzbm9ybWFsIC05RS05OTkgLT4gMQorYm9vbDA5NTIgaXNub3JtYWwgOUUtOTk4IC0+IDEKK2Jvb2wwOTUzIGlzbm9ybWFsIC05RS05OTggLT4gMQorYm9vbDA5NTQgaXNub3JtYWwgOUUtMTAwIC0+IDEKK2Jvb2wwOTU1IGlzbm9ybWFsIC05RS0xMDAgLT4gMQorYm9vbDA5NTYgaXNub3JtYWwgMC4wMDAwMDkgLT4gMQorYm9vbDA5NTcgaXNub3JtYWwgLTAuMDAwMDA5IC0+IDEKK2Jvb2wwOTU4IGlzbm9ybWFsIDAuMDA5IC0+IDEKK2Jvb2wwOTU5IGlzbm9ybWFsIC0wLjAwOSAtPiAxCitib29sMDk2MCBpc25vcm1hbCAwLjA5IC0+IDEKK2Jvb2wwOTYxIGlzbm9ybWFsIC0wLjA5IC0+IDEKK2Jvb2wwOTYyIGlzbm9ybWFsIDAuOSAtPiAxCitib29sMDk2MyBpc25vcm1hbCAtMC45IC0+IDEKK2Jvb2wwOTY0IGlzbm9ybWFsIDkgLT4gMQorYm9vbDA5NjUgaXNub3JtYWwgLTkgLT4gMQorYm9vbDA5NjYgaXNub3JtYWwgOUUrMSAtPiAxCitib29sMDk2NyBpc25vcm1hbCAtOUUrMSAtPiAxCitib29sMDk2OCBpc25vcm1hbCA5RSsyIC0+IDEKK2Jvb2wwOTY5IGlzbm9ybWFsIC05RSsyIC0+IDEKK2Jvb2wwOTcwIGlzbm9ybWFsIDlFKzMgLT4gMQorYm9vbDA5NzEgaXNub3JtYWwgLTlFKzMgLT4gMQorYm9vbDA5NzIgaXNub3JtYWwgOUUrNiAtPiAxCitib29sMDk3MyBpc25vcm1hbCAtOUUrNiAtPiAxCitib29sMDk3NCBpc25vcm1hbCA5RSsxMDAgLT4gMQorYm9vbDA5NzUgaXNub3JtYWwgLTlFKzEwMCAtPiAxCitib29sMDk3NiBpc25vcm1hbCA5RSs5OTAgLT4gMQorYm9vbDA5NzcgaXNub3JtYWwgLTlFKzk5MCAtPiAxCitib29sMDk3OCBpc25vcm1hbCA5RSs5OTEgLT4gMQorYm9vbDA5NzkgaXNub3JtYWwgLTlFKzk5MSAtPiAxCitib29sMDk4MCBpc25vcm1hbCA5RSs5OTIgLT4gMQorYm9vbDA5ODEgaXNub3JtYWwgLTlFKzk5MiAtPiAxCitib29sMDk4MiBpc25vcm1hbCA5RSs5OTggLT4gMQorYm9vbDA5ODMgaXNub3JtYWwgLTlFKzk5OCAtPiAxCitib29sMDk4NCBpc25vcm1hbCA5RSs5OTkgLT4gMQorYm9vbDA5ODUgaXNub3JtYWwgLTlFKzk5OSAtPiAxCitib29sMDk4NiBpc25vcm1hbCA5RSsxMDAwIC0+IDEKK2Jvb2wwOTg3IGlzbm9ybWFsIC05RSsxMDAwIC0+IDEKK2Jvb2wwOTg4IGlzbm9ybWFsIDlFKzIwMDAgLT4gMQorYm9vbDA5ODkgaXNub3JtYWwgLTlFKzIwMDAgLT4gMQorYm9vbDA5OTAgaXNub3JtYWwgOS45OTk5OTk5OUUtMjAwMCAtPiAwCitib29sMDk5MSBpc25vcm1hbCAtOS45OTk5OTk5OUUtMjAwMCAtPiAwCitib29sMDk5MiBpc25vcm1hbCA5Ljk5OTk5OTk5RS0xMDA4IC0+IDAKK2Jvb2wwOTkzIGlzbm9ybWFsIC05Ljk5OTk5OTk5RS0xMDA4IC0+IDAKK2Jvb2wwOTk0IGlzbm9ybWFsIDkuOTk5OTk5OTlFLTEwMDcgLT4gMAorYm9vbDA5OTUgaXNub3JtYWwgLTkuOTk5OTk5OTlFLTEwMDcgLT4gMAorYm9vbDA5OTYgaXNub3JtYWwgOS45OTk5OTk5OUUtMTAwNiAtPiAwCitib29sMDk5NyBpc25vcm1hbCAtOS45OTk5OTk5OUUtMTAwNiAtPiAwCitib29sMDk5OCBpc25vcm1hbCA5Ljk5OTk5OTk5RS0xMDAwIC0+IDAKK2Jvb2wwOTk5IGlzbm9ybWFsIC05Ljk5OTk5OTk5RS0xMDAwIC0+IDAKK2Jvb2wxMDAwIGlzbm9ybWFsIDkuOTk5OTk5OTlFLTk5OSAtPiAxCitib29sMTAwMSBpc25vcm1hbCAtOS45OTk5OTk5OUUtOTk5IC0+IDEKK2Jvb2wxMDAyIGlzbm9ybWFsIDkuOTk5OTk5OTlFLTk5OCAtPiAxCitib29sMTAwMyBpc25vcm1hbCAtOS45OTk5OTk5OUUtOTk4IC0+IDEKK2Jvb2wxMDA0IGlzbm9ybWFsIDkuOTk5OTk5OTlFLTEwMCAtPiAxCitib29sMTAwNSBpc25vcm1hbCAtOS45OTk5OTk5OUUtMTAwIC0+IDEKK2Jvb2wxMDA2IGlzbm9ybWFsIDAuMDAwMDA5OTk5OTk5OTkgLT4gMQorYm9vbDEwMDcgaXNub3JtYWwgLTAuMDAwMDA5OTk5OTk5OTkgLT4gMQorYm9vbDEwMDggaXNub3JtYWwgMC4wMDk5OTk5OTk5OSAtPiAxCitib29sMTAwOSBpc25vcm1hbCAtMC4wMDk5OTk5OTk5OSAtPiAxCitib29sMTAxMCBpc25vcm1hbCAwLjA5OTk5OTk5OTkgLT4gMQorYm9vbDEwMTEgaXNub3JtYWwgLTAuMDk5OTk5OTk5OSAtPiAxCitib29sMTAxMiBpc25vcm1hbCAwLjk5OTk5OTk5OSAtPiAxCitib29sMTAxMyBpc25vcm1hbCAtMC45OTk5OTk5OTkgLT4gMQorYm9vbDEwMTQgaXNub3JtYWwgOS45OTk5OTk5OSAtPiAxCitib29sMTAxNSBpc25vcm1hbCAtOS45OTk5OTk5OSAtPiAxCitib29sMTAxNiBpc25vcm1hbCA5OS45OTk5OTk5IC0+IDEKK2Jvb2wxMDE3IGlzbm9ybWFsIC05OS45OTk5OTk5IC0+IDEKK2Jvb2wxMDE4IGlzbm9ybWFsIDk5OS45OTk5OTkgLT4gMQorYm9vbDEwMTkgaXNub3JtYWwgLTk5OS45OTk5OTkgLT4gMQorYm9vbDEwMjAgaXNub3JtYWwgOTk5OS45OTk5OSAtPiAxCitib29sMTAyMSBpc25vcm1hbCAtOTk5OS45OTk5OSAtPiAxCitib29sMTAyMiBpc25vcm1hbCA5OTk5OTk5Ljk5IC0+IDEKK2Jvb2wxMDIzIGlzbm9ybWFsIC05OTk5OTk5Ljk5IC0+IDEKK2Jvb2wxMDI0IGlzbm9ybWFsIDkuOTk5OTk5OTlFKzEwMCAtPiAxCitib29sMTAyNSBpc25vcm1hbCAtOS45OTk5OTk5OUUrMTAwIC0+IDEKK2Jvb2wxMDI2IGlzbm9ybWFsIDkuOTk5OTk5OTlFKzk5MCAtPiAxCitib29sMTAyNyBpc25vcm1hbCAtOS45OTk5OTk5OUUrOTkwIC0+IDEKK2Jvb2wxMDI4IGlzbm9ybWFsIDkuOTk5OTk5OTlFKzk5MSAtPiAxCitib29sMTAyOSBpc25vcm1hbCAtOS45OTk5OTk5OUUrOTkxIC0+IDEKK2Jvb2wxMDMwIGlzbm9ybWFsIDkuOTk5OTk5OTlFKzk5MiAtPiAxCitib29sMTAzMSBpc25vcm1hbCAtOS45OTk5OTk5OUUrOTkyIC0+IDEKK2Jvb2wxMDMyIGlzbm9ybWFsIDkuOTk5OTk5OTlFKzk5OCAtPiAxCitib29sMTAzMyBpc25vcm1hbCAtOS45OTk5OTk5OUUrOTk4IC0+IDEKK2Jvb2wxMDM0IGlzbm9ybWFsIDkuOTk5OTk5OTlFKzk5OSAtPiAxCitib29sMTAzNSBpc25vcm1hbCAtOS45OTk5OTk5OUUrOTk5IC0+IDEKK2Jvb2wxMDM2IGlzbm9ybWFsIDkuOTk5OTk5OTlFKzEwMDAgLT4gMQorYm9vbDEwMzcgaXNub3JtYWwgLTkuOTk5OTk5OTlFKzEwMDAgLT4gMQorYm9vbDEwMzggaXNub3JtYWwgOS45OTk5OTk5OUUrMjAwMCAtPiAxCitib29sMTAzOSBpc25vcm1hbCAtOS45OTk5OTk5OUUrMjAwMCAtPiAxCitib29sMTA0MCBpc25vcm1hbCBJbmZpbml0eSAtPiAwCitib29sMTA0MSBpc25vcm1hbCAtSW5maW5pdHkgLT4gMAorYm9vbDEwNDIgaXNub3JtYWwgTmFOIC0+IDAKK2Jvb2wxMDQzIGlzbm9ybWFsIC1OYU4gLT4gMAorYm9vbDEwNDQgaXNub3JtYWwgTmFOMTIzIC0+IDAKK2Jvb2wxMDQ1IGlzbm9ybWFsIC1OYU4xMjMgLT4gMAorYm9vbDEwNDYgaXNub3JtYWwgc05hTiAtPiAwCitib29sMTA0NyBpc25vcm1hbCAtc05hTiAtPiAwCitib29sMTA0OCBpc25vcm1hbCBzTmFOMTIzIC0+IDAKK2Jvb2wxMDQ5IGlzbm9ybWFsIC1zTmFOMTIzIC0+IDAKK2Jvb2wxMDUwIGlzcW5hbiAwRS0yMDAwIC0+IDAKK2Jvb2wxMDUxIGlzcW5hbiAtMEUtMjAwMCAtPiAwCitib29sMTA1MiBpc3FuYW4gMEUtMTAwOCAtPiAwCitib29sMTA1MyBpc3FuYW4gLTBFLTEwMDggLT4gMAorYm9vbDEwNTQgaXNxbmFuIDBFLTEwMDcgLT4gMAorYm9vbDEwNTUgaXNxbmFuIC0wRS0xMDA3IC0+IDAKK2Jvb2wxMDU2IGlzcW5hbiAwRS0xMDA2IC0+IDAKK2Jvb2wxMDU3IGlzcW5hbiAtMEUtMTAwNiAtPiAwCitib29sMTA1OCBpc3FuYW4gMEUtMTAwMCAtPiAwCitib29sMTA1OSBpc3FuYW4gLTBFLTEwMDAgLT4gMAorYm9vbDEwNjAgaXNxbmFuIDBFLTk5OSAtPiAwCitib29sMTA2MSBpc3FuYW4gLTBFLTk5OSAtPiAwCitib29sMTA2MiBpc3FuYW4gMEUtOTk4IC0+IDAKK2Jvb2wxMDYzIGlzcW5hbiAtMEUtOTk4IC0+IDAKK2Jvb2wxMDY0IGlzcW5hbiAwRS0xMDAgLT4gMAorYm9vbDEwNjUgaXNxbmFuIC0wRS0xMDAgLT4gMAorYm9vbDEwNjYgaXNxbmFuIDAuMDAwMDAwIC0+IDAKK2Jvb2wxMDY3IGlzcW5hbiAtMC4wMDAwMDAgLT4gMAorYm9vbDEwNjggaXNxbmFuIDAuMDAwIC0+IDAKK2Jvb2wxMDY5IGlzcW5hbiAtMC4wMDAgLT4gMAorYm9vbDEwNzAgaXNxbmFuIDAuMDAgLT4gMAorYm9vbDEwNzEgaXNxbmFuIC0wLjAwIC0+IDAKK2Jvb2wxMDcyIGlzcW5hbiAwLjAgLT4gMAorYm9vbDEwNzMgaXNxbmFuIC0wLjAgLT4gMAorYm9vbDEwNzQgaXNxbmFuIDAgLT4gMAorYm9vbDEwNzUgaXNxbmFuIC0wIC0+IDAKK2Jvb2wxMDc2IGlzcW5hbiAwRSsxIC0+IDAKK2Jvb2wxMDc3IGlzcW5hbiAtMEUrMSAtPiAwCitib29sMTA3OCBpc3FuYW4gMEUrMiAtPiAwCitib29sMTA3OSBpc3FuYW4gLTBFKzIgLT4gMAorYm9vbDEwODAgaXNxbmFuIDBFKzMgLT4gMAorYm9vbDEwODEgaXNxbmFuIC0wRSszIC0+IDAKK2Jvb2wxMDgyIGlzcW5hbiAwRSs2IC0+IDAKK2Jvb2wxMDgzIGlzcW5hbiAtMEUrNiAtPiAwCitib29sMTA4NCBpc3FuYW4gMEUrMTAwIC0+IDAKK2Jvb2wxMDg1IGlzcW5hbiAtMEUrMTAwIC0+IDAKK2Jvb2wxMDg2IGlzcW5hbiAwRSs5OTAgLT4gMAorYm9vbDEwODcgaXNxbmFuIC0wRSs5OTAgLT4gMAorYm9vbDEwODggaXNxbmFuIDBFKzk5MSAtPiAwCitib29sMTA4OSBpc3FuYW4gLTBFKzk5MSAtPiAwCitib29sMTA5MCBpc3FuYW4gMEUrOTkyIC0+IDAKK2Jvb2wxMDkxIGlzcW5hbiAtMEUrOTkyIC0+IDAKK2Jvb2wxMDkyIGlzcW5hbiAwRSs5OTggLT4gMAorYm9vbDEwOTMgaXNxbmFuIC0wRSs5OTggLT4gMAorYm9vbDEwOTQgaXNxbmFuIDBFKzk5OSAtPiAwCitib29sMTA5NSBpc3FuYW4gLTBFKzk5OSAtPiAwCitib29sMTA5NiBpc3FuYW4gMEUrMTAwMCAtPiAwCitib29sMTA5NyBpc3FuYW4gLTBFKzEwMDAgLT4gMAorYm9vbDEwOTggaXNxbmFuIDBFKzIwMDAgLT4gMAorYm9vbDEwOTkgaXNxbmFuIC0wRSsyMDAwIC0+IDAKK2Jvb2wxMTAwIGlzcW5hbiAxRS0yMDAwIC0+IDAKK2Jvb2wxMTAxIGlzcW5hbiAtMUUtMjAwMCAtPiAwCitib29sMTEwMiBpc3FuYW4gMUUtMTAwOCAtPiAwCitib29sMTEwMyBpc3FuYW4gLTFFLTEwMDggLT4gMAorYm9vbDExMDQgaXNxbmFuIDFFLTEwMDcgLT4gMAorYm9vbDExMDUgaXNxbmFuIC0xRS0xMDA3IC0+IDAKK2Jvb2wxMTA2IGlzcW5hbiAxRS0xMDA2IC0+IDAKK2Jvb2wxMTA3IGlzcW5hbiAtMUUtMTAwNiAtPiAwCitib29sMTEwOCBpc3FuYW4gMUUtMTAwMCAtPiAwCitib29sMTEwOSBpc3FuYW4gLTFFLTEwMDAgLT4gMAorYm9vbDExMTAgaXNxbmFuIDFFLTk5OSAtPiAwCitib29sMTExMSBpc3FuYW4gLTFFLTk5OSAtPiAwCitib29sMTExMiBpc3FuYW4gMUUtOTk4IC0+IDAKK2Jvb2wxMTEzIGlzcW5hbiAtMUUtOTk4IC0+IDAKK2Jvb2wxMTE0IGlzcW5hbiAxRS0xMDAgLT4gMAorYm9vbDExMTUgaXNxbmFuIC0xRS0xMDAgLT4gMAorYm9vbDExMTYgaXNxbmFuIDAuMDAwMDAxIC0+IDAKK2Jvb2wxMTE3IGlzcW5hbiAtMC4wMDAwMDEgLT4gMAorYm9vbDExMTggaXNxbmFuIDAuMDAxIC0+IDAKK2Jvb2wxMTE5IGlzcW5hbiAtMC4wMDEgLT4gMAorYm9vbDExMjAgaXNxbmFuIDAuMDEgLT4gMAorYm9vbDExMjEgaXNxbmFuIC0wLjAxIC0+IDAKK2Jvb2wxMTIyIGlzcW5hbiAwLjEgLT4gMAorYm9vbDExMjMgaXNxbmFuIC0wLjEgLT4gMAorYm9vbDExMjQgaXNxbmFuIDEgLT4gMAorYm9vbDExMjUgaXNxbmFuIC0xIC0+IDAKK2Jvb2wxMTI2IGlzcW5hbiAxRSsxIC0+IDAKK2Jvb2wxMTI3IGlzcW5hbiAtMUUrMSAtPiAwCitib29sMTEyOCBpc3FuYW4gMUUrMiAtPiAwCitib29sMTEyOSBpc3FuYW4gLTFFKzIgLT4gMAorYm9vbDExMzAgaXNxbmFuIDFFKzMgLT4gMAorYm9vbDExMzEgaXNxbmFuIC0xRSszIC0+IDAKK2Jvb2wxMTMyIGlzcW5hbiAxRSs2IC0+IDAKK2Jvb2wxMTMzIGlzcW5hbiAtMUUrNiAtPiAwCitib29sMTEzNCBpc3FuYW4gMUUrMTAwIC0+IDAKK2Jvb2wxMTM1IGlzcW5hbiAtMUUrMTAwIC0+IDAKK2Jvb2wxMTM2IGlzcW5hbiAxRSs5OTAgLT4gMAorYm9vbDExMzcgaXNxbmFuIC0xRSs5OTAgLT4gMAorYm9vbDExMzggaXNxbmFuIDFFKzk5MSAtPiAwCitib29sMTEzOSBpc3FuYW4gLTFFKzk5MSAtPiAwCitib29sMTE0MCBpc3FuYW4gMUUrOTkyIC0+IDAKK2Jvb2wxMTQxIGlzcW5hbiAtMUUrOTkyIC0+IDAKK2Jvb2wxMTQyIGlzcW5hbiAxRSs5OTggLT4gMAorYm9vbDExNDMgaXNxbmFuIC0xRSs5OTggLT4gMAorYm9vbDExNDQgaXNxbmFuIDFFKzk5OSAtPiAwCitib29sMTE0NSBpc3FuYW4gLTFFKzk5OSAtPiAwCitib29sMTE0NiBpc3FuYW4gMUUrMTAwMCAtPiAwCitib29sMTE0NyBpc3FuYW4gLTFFKzEwMDAgLT4gMAorYm9vbDExNDggaXNxbmFuIDFFKzIwMDAgLT4gMAorYm9vbDExNDkgaXNxbmFuIC0xRSsyMDAwIC0+IDAKK2Jvb2wxMTUwIGlzcW5hbiA5RS0yMDAwIC0+IDAKK2Jvb2wxMTUxIGlzcW5hbiAtOUUtMjAwMCAtPiAwCitib29sMTE1MiBpc3FuYW4gOUUtMTAwOCAtPiAwCitib29sMTE1MyBpc3FuYW4gLTlFLTEwMDggLT4gMAorYm9vbDExNTQgaXNxbmFuIDlFLTEwMDcgLT4gMAorYm9vbDExNTUgaXNxbmFuIC05RS0xMDA3IC0+IDAKK2Jvb2wxMTU2IGlzcW5hbiA5RS0xMDA2IC0+IDAKK2Jvb2wxMTU3IGlzcW5hbiAtOUUtMTAwNiAtPiAwCitib29sMTE1OCBpc3FuYW4gOUUtMTAwMCAtPiAwCitib29sMTE1OSBpc3FuYW4gLTlFLTEwMDAgLT4gMAorYm9vbDExNjAgaXNxbmFuIDlFLTk5OSAtPiAwCitib29sMTE2MSBpc3FuYW4gLTlFLTk5OSAtPiAwCitib29sMTE2MiBpc3FuYW4gOUUtOTk4IC0+IDAKK2Jvb2wxMTYzIGlzcW5hbiAtOUUtOTk4IC0+IDAKK2Jvb2wxMTY0IGlzcW5hbiA5RS0xMDAgLT4gMAorYm9vbDExNjUgaXNxbmFuIC05RS0xMDAgLT4gMAorYm9vbDExNjYgaXNxbmFuIDAuMDAwMDA5IC0+IDAKK2Jvb2wxMTY3IGlzcW5hbiAtMC4wMDAwMDkgLT4gMAorYm9vbDExNjggaXNxbmFuIDAuMDA5IC0+IDAKK2Jvb2wxMTY5IGlzcW5hbiAtMC4wMDkgLT4gMAorYm9vbDExNzAgaXNxbmFuIDAuMDkgLT4gMAorYm9vbDExNzEgaXNxbmFuIC0wLjA5IC0+IDAKK2Jvb2wxMTcyIGlzcW5hbiAwLjkgLT4gMAorYm9vbDExNzMgaXNxbmFuIC0wLjkgLT4gMAorYm9vbDExNzQgaXNxbmFuIDkgLT4gMAorYm9vbDExNzUgaXNxbmFuIC05IC0+IDAKK2Jvb2wxMTc2IGlzcW5hbiA5RSsxIC0+IDAKK2Jvb2wxMTc3IGlzcW5hbiAtOUUrMSAtPiAwCitib29sMTE3OCBpc3FuYW4gOUUrMiAtPiAwCitib29sMTE3OSBpc3FuYW4gLTlFKzIgLT4gMAorYm9vbDExODAgaXNxbmFuIDlFKzMgLT4gMAorYm9vbDExODEgaXNxbmFuIC05RSszIC0+IDAKK2Jvb2wxMTgyIGlzcW5hbiA5RSs2IC0+IDAKK2Jvb2wxMTgzIGlzcW5hbiAtOUUrNiAtPiAwCitib29sMTE4NCBpc3FuYW4gOUUrMTAwIC0+IDAKK2Jvb2wxMTg1IGlzcW5hbiAtOUUrMTAwIC0+IDAKK2Jvb2wxMTg2IGlzcW5hbiA5RSs5OTAgLT4gMAorYm9vbDExODcgaXNxbmFuIC05RSs5OTAgLT4gMAorYm9vbDExODggaXNxbmFuIDlFKzk5MSAtPiAwCitib29sMTE4OSBpc3FuYW4gLTlFKzk5MSAtPiAwCitib29sMTE5MCBpc3FuYW4gOUUrOTkyIC0+IDAKK2Jvb2wxMTkxIGlzcW5hbiAtOUUrOTkyIC0+IDAKK2Jvb2wxMTkyIGlzcW5hbiA5RSs5OTggLT4gMAorYm9vbDExOTMgaXNxbmFuIC05RSs5OTggLT4gMAorYm9vbDExOTQgaXNxbmFuIDlFKzk5OSAtPiAwCitib29sMTE5NSBpc3FuYW4gLTlFKzk5OSAtPiAwCitib29sMTE5NiBpc3FuYW4gOUUrMTAwMCAtPiAwCitib29sMTE5NyBpc3FuYW4gLTlFKzEwMDAgLT4gMAorYm9vbDExOTggaXNxbmFuIDlFKzIwMDAgLT4gMAorYm9vbDExOTkgaXNxbmFuIC05RSsyMDAwIC0+IDAKK2Jvb2wxMjAwIGlzcW5hbiA5Ljk5OTk5OTk5RS0yMDAwIC0+IDAKK2Jvb2wxMjAxIGlzcW5hbiAtOS45OTk5OTk5OUUtMjAwMCAtPiAwCitib29sMTIwMiBpc3FuYW4gOS45OTk5OTk5OUUtMTAwOCAtPiAwCitib29sMTIwMyBpc3FuYW4gLTkuOTk5OTk5OTlFLTEwMDggLT4gMAorYm9vbDEyMDQgaXNxbmFuIDkuOTk5OTk5OTlFLTEwMDcgLT4gMAorYm9vbDEyMDUgaXNxbmFuIC05Ljk5OTk5OTk5RS0xMDA3IC0+IDAKK2Jvb2wxMjA2IGlzcW5hbiA5Ljk5OTk5OTk5RS0xMDA2IC0+IDAKK2Jvb2wxMjA3IGlzcW5hbiAtOS45OTk5OTk5OUUtMTAwNiAtPiAwCitib29sMTIwOCBpc3FuYW4gOS45OTk5OTk5OUUtMTAwMCAtPiAwCitib29sMTIwOSBpc3FuYW4gLTkuOTk5OTk5OTlFLTEwMDAgLT4gMAorYm9vbDEyMTAgaXNxbmFuIDkuOTk5OTk5OTlFLTk5OSAtPiAwCitib29sMTIxMSBpc3FuYW4gLTkuOTk5OTk5OTlFLTk5OSAtPiAwCitib29sMTIxMiBpc3FuYW4gOS45OTk5OTk5OUUtOTk4IC0+IDAKK2Jvb2wxMjEzIGlzcW5hbiAtOS45OTk5OTk5OUUtOTk4IC0+IDAKK2Jvb2wxMjE0IGlzcW5hbiA5Ljk5OTk5OTk5RS0xMDAgLT4gMAorYm9vbDEyMTUgaXNxbmFuIC05Ljk5OTk5OTk5RS0xMDAgLT4gMAorYm9vbDEyMTYgaXNxbmFuIDAuMDAwMDA5OTk5OTk5OTkgLT4gMAorYm9vbDEyMTcgaXNxbmFuIC0wLjAwMDAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wxMjE4IGlzcW5hbiAwLjAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wxMjE5IGlzcW5hbiAtMC4wMDk5OTk5OTk5OSAtPiAwCitib29sMTIyMCBpc3FuYW4gMC4wOTk5OTk5OTk5IC0+IDAKK2Jvb2wxMjIxIGlzcW5hbiAtMC4wOTk5OTk5OTk5IC0+IDAKK2Jvb2wxMjIyIGlzcW5hbiAwLjk5OTk5OTk5OSAtPiAwCitib29sMTIyMyBpc3FuYW4gLTAuOTk5OTk5OTk5IC0+IDAKK2Jvb2wxMjI0IGlzcW5hbiA5Ljk5OTk5OTk5IC0+IDAKK2Jvb2wxMjI1IGlzcW5hbiAtOS45OTk5OTk5OSAtPiAwCitib29sMTIyNiBpc3FuYW4gOTkuOTk5OTk5OSAtPiAwCitib29sMTIyNyBpc3FuYW4gLTk5Ljk5OTk5OTkgLT4gMAorYm9vbDEyMjggaXNxbmFuIDk5OS45OTk5OTkgLT4gMAorYm9vbDEyMjkgaXNxbmFuIC05OTkuOTk5OTk5IC0+IDAKK2Jvb2wxMjMwIGlzcW5hbiA5OTk5Ljk5OTk5IC0+IDAKK2Jvb2wxMjMxIGlzcW5hbiAtOTk5OS45OTk5OSAtPiAwCitib29sMTIzMiBpc3FuYW4gOTk5OTk5OS45OSAtPiAwCitib29sMTIzMyBpc3FuYW4gLTk5OTk5OTkuOTkgLT4gMAorYm9vbDEyMzQgaXNxbmFuIDkuOTk5OTk5OTlFKzEwMCAtPiAwCitib29sMTIzNSBpc3FuYW4gLTkuOTk5OTk5OTlFKzEwMCAtPiAwCitib29sMTIzNiBpc3FuYW4gOS45OTk5OTk5OUUrOTkwIC0+IDAKK2Jvb2wxMjM3IGlzcW5hbiAtOS45OTk5OTk5OUUrOTkwIC0+IDAKK2Jvb2wxMjM4IGlzcW5hbiA5Ljk5OTk5OTk5RSs5OTEgLT4gMAorYm9vbDEyMzkgaXNxbmFuIC05Ljk5OTk5OTk5RSs5OTEgLT4gMAorYm9vbDEyNDAgaXNxbmFuIDkuOTk5OTk5OTlFKzk5MiAtPiAwCitib29sMTI0MSBpc3FuYW4gLTkuOTk5OTk5OTlFKzk5MiAtPiAwCitib29sMTI0MiBpc3FuYW4gOS45OTk5OTk5OUUrOTk4IC0+IDAKK2Jvb2wxMjQzIGlzcW5hbiAtOS45OTk5OTk5OUUrOTk4IC0+IDAKK2Jvb2wxMjQ0IGlzcW5hbiA5Ljk5OTk5OTk5RSs5OTkgLT4gMAorYm9vbDEyNDUgaXNxbmFuIC05Ljk5OTk5OTk5RSs5OTkgLT4gMAorYm9vbDEyNDYgaXNxbmFuIDkuOTk5OTk5OTlFKzEwMDAgLT4gMAorYm9vbDEyNDcgaXNxbmFuIC05Ljk5OTk5OTk5RSsxMDAwIC0+IDAKK2Jvb2wxMjQ4IGlzcW5hbiA5Ljk5OTk5OTk5RSsyMDAwIC0+IDAKK2Jvb2wxMjQ5IGlzcW5hbiAtOS45OTk5OTk5OUUrMjAwMCAtPiAwCitib29sMTI1MCBpc3FuYW4gSW5maW5pdHkgLT4gMAorYm9vbDEyNTEgaXNxbmFuIC1JbmZpbml0eSAtPiAwCitib29sMTI1MiBpc3FuYW4gTmFOIC0+IDEKK2Jvb2wxMjUzIGlzcW5hbiAtTmFOIC0+IDEKK2Jvb2wxMjU0IGlzcW5hbiBOYU4xMjMgLT4gMQorYm9vbDEyNTUgaXNxbmFuIC1OYU4xMjMgLT4gMQorYm9vbDEyNTYgaXNxbmFuIHNOYU4gLT4gMAorYm9vbDEyNTcgaXNxbmFuIC1zTmFOIC0+IDAKK2Jvb2wxMjU4IGlzcW5hbiBzTmFOMTIzIC0+IDAKK2Jvb2wxMjU5IGlzcW5hbiAtc05hTjEyMyAtPiAwCitib29sMTI2MCBpc3NpZ25lZCAwRS0yMDAwIC0+IDAKK2Jvb2wxMjYxIGlzc2lnbmVkIC0wRS0yMDAwIC0+IDEKK2Jvb2wxMjYyIGlzc2lnbmVkIDBFLTEwMDggLT4gMAorYm9vbDEyNjMgaXNzaWduZWQgLTBFLTEwMDggLT4gMQorYm9vbDEyNjQgaXNzaWduZWQgMEUtMTAwNyAtPiAwCitib29sMTI2NSBpc3NpZ25lZCAtMEUtMTAwNyAtPiAxCitib29sMTI2NiBpc3NpZ25lZCAwRS0xMDA2IC0+IDAKK2Jvb2wxMjY3IGlzc2lnbmVkIC0wRS0xMDA2IC0+IDEKK2Jvb2wxMjY4IGlzc2lnbmVkIDBFLTEwMDAgLT4gMAorYm9vbDEyNjkgaXNzaWduZWQgLTBFLTEwMDAgLT4gMQorYm9vbDEyNzAgaXNzaWduZWQgMEUtOTk5IC0+IDAKK2Jvb2wxMjcxIGlzc2lnbmVkIC0wRS05OTkgLT4gMQorYm9vbDEyNzIgaXNzaWduZWQgMEUtOTk4IC0+IDAKK2Jvb2wxMjczIGlzc2lnbmVkIC0wRS05OTggLT4gMQorYm9vbDEyNzQgaXNzaWduZWQgMEUtMTAwIC0+IDAKK2Jvb2wxMjc1IGlzc2lnbmVkIC0wRS0xMDAgLT4gMQorYm9vbDEyNzYgaXNzaWduZWQgMC4wMDAwMDAgLT4gMAorYm9vbDEyNzcgaXNzaWduZWQgLTAuMDAwMDAwIC0+IDEKK2Jvb2wxMjc4IGlzc2lnbmVkIDAuMDAwIC0+IDAKK2Jvb2wxMjc5IGlzc2lnbmVkIC0wLjAwMCAtPiAxCitib29sMTI4MCBpc3NpZ25lZCAwLjAwIC0+IDAKK2Jvb2wxMjgxIGlzc2lnbmVkIC0wLjAwIC0+IDEKK2Jvb2wxMjgyIGlzc2lnbmVkIDAuMCAtPiAwCitib29sMTI4MyBpc3NpZ25lZCAtMC4wIC0+IDEKK2Jvb2wxMjg0IGlzc2lnbmVkIDAgLT4gMAorYm9vbDEyODUgaXNzaWduZWQgLTAgLT4gMQorYm9vbDEyODYgaXNzaWduZWQgMEUrMSAtPiAwCitib29sMTI4NyBpc3NpZ25lZCAtMEUrMSAtPiAxCitib29sMTI4OCBpc3NpZ25lZCAwRSsyIC0+IDAKK2Jvb2wxMjg5IGlzc2lnbmVkIC0wRSsyIC0+IDEKK2Jvb2wxMjkwIGlzc2lnbmVkIDBFKzMgLT4gMAorYm9vbDEyOTEgaXNzaWduZWQgLTBFKzMgLT4gMQorYm9vbDEyOTIgaXNzaWduZWQgMEUrNiAtPiAwCitib29sMTI5MyBpc3NpZ25lZCAtMEUrNiAtPiAxCitib29sMTI5NCBpc3NpZ25lZCAwRSsxMDAgLT4gMAorYm9vbDEyOTUgaXNzaWduZWQgLTBFKzEwMCAtPiAxCitib29sMTI5NiBpc3NpZ25lZCAwRSs5OTAgLT4gMAorYm9vbDEyOTcgaXNzaWduZWQgLTBFKzk5MCAtPiAxCitib29sMTI5OCBpc3NpZ25lZCAwRSs5OTEgLT4gMAorYm9vbDEyOTkgaXNzaWduZWQgLTBFKzk5MSAtPiAxCitib29sMTMwMCBpc3NpZ25lZCAwRSs5OTIgLT4gMAorYm9vbDEzMDEgaXNzaWduZWQgLTBFKzk5MiAtPiAxCitib29sMTMwMiBpc3NpZ25lZCAwRSs5OTggLT4gMAorYm9vbDEzMDMgaXNzaWduZWQgLTBFKzk5OCAtPiAxCitib29sMTMwNCBpc3NpZ25lZCAwRSs5OTkgLT4gMAorYm9vbDEzMDUgaXNzaWduZWQgLTBFKzk5OSAtPiAxCitib29sMTMwNiBpc3NpZ25lZCAwRSsxMDAwIC0+IDAKK2Jvb2wxMzA3IGlzc2lnbmVkIC0wRSsxMDAwIC0+IDEKK2Jvb2wxMzA4IGlzc2lnbmVkIDBFKzIwMDAgLT4gMAorYm9vbDEzMDkgaXNzaWduZWQgLTBFKzIwMDAgLT4gMQorYm9vbDEzMTAgaXNzaWduZWQgMUUtMjAwMCAtPiAwCitib29sMTMxMSBpc3NpZ25lZCAtMUUtMjAwMCAtPiAxCitib29sMTMxMiBpc3NpZ25lZCAxRS0xMDA4IC0+IDAKK2Jvb2wxMzEzIGlzc2lnbmVkIC0xRS0xMDA4IC0+IDEKK2Jvb2wxMzE0IGlzc2lnbmVkIDFFLTEwMDcgLT4gMAorYm9vbDEzMTUgaXNzaWduZWQgLTFFLTEwMDcgLT4gMQorYm9vbDEzMTYgaXNzaWduZWQgMUUtMTAwNiAtPiAwCitib29sMTMxNyBpc3NpZ25lZCAtMUUtMTAwNiAtPiAxCitib29sMTMxOCBpc3NpZ25lZCAxRS0xMDAwIC0+IDAKK2Jvb2wxMzE5IGlzc2lnbmVkIC0xRS0xMDAwIC0+IDEKK2Jvb2wxMzIwIGlzc2lnbmVkIDFFLTk5OSAtPiAwCitib29sMTMyMSBpc3NpZ25lZCAtMUUtOTk5IC0+IDEKK2Jvb2wxMzIyIGlzc2lnbmVkIDFFLTk5OCAtPiAwCitib29sMTMyMyBpc3NpZ25lZCAtMUUtOTk4IC0+IDEKK2Jvb2wxMzI0IGlzc2lnbmVkIDFFLTEwMCAtPiAwCitib29sMTMyNSBpc3NpZ25lZCAtMUUtMTAwIC0+IDEKK2Jvb2wxMzI2IGlzc2lnbmVkIDAuMDAwMDAxIC0+IDAKK2Jvb2wxMzI3IGlzc2lnbmVkIC0wLjAwMDAwMSAtPiAxCitib29sMTMyOCBpc3NpZ25lZCAwLjAwMSAtPiAwCitib29sMTMyOSBpc3NpZ25lZCAtMC4wMDEgLT4gMQorYm9vbDEzMzAgaXNzaWduZWQgMC4wMSAtPiAwCitib29sMTMzMSBpc3NpZ25lZCAtMC4wMSAtPiAxCitib29sMTMzMiBpc3NpZ25lZCAwLjEgLT4gMAorYm9vbDEzMzMgaXNzaWduZWQgLTAuMSAtPiAxCitib29sMTMzNCBpc3NpZ25lZCAxIC0+IDAKK2Jvb2wxMzM1IGlzc2lnbmVkIC0xIC0+IDEKK2Jvb2wxMzM2IGlzc2lnbmVkIDFFKzEgLT4gMAorYm9vbDEzMzcgaXNzaWduZWQgLTFFKzEgLT4gMQorYm9vbDEzMzggaXNzaWduZWQgMUUrMiAtPiAwCitib29sMTMzOSBpc3NpZ25lZCAtMUUrMiAtPiAxCitib29sMTM0MCBpc3NpZ25lZCAxRSszIC0+IDAKK2Jvb2wxMzQxIGlzc2lnbmVkIC0xRSszIC0+IDEKK2Jvb2wxMzQyIGlzc2lnbmVkIDFFKzYgLT4gMAorYm9vbDEzNDMgaXNzaWduZWQgLTFFKzYgLT4gMQorYm9vbDEzNDQgaXNzaWduZWQgMUUrMTAwIC0+IDAKK2Jvb2wxMzQ1IGlzc2lnbmVkIC0xRSsxMDAgLT4gMQorYm9vbDEzNDYgaXNzaWduZWQgMUUrOTkwIC0+IDAKK2Jvb2wxMzQ3IGlzc2lnbmVkIC0xRSs5OTAgLT4gMQorYm9vbDEzNDggaXNzaWduZWQgMUUrOTkxIC0+IDAKK2Jvb2wxMzQ5IGlzc2lnbmVkIC0xRSs5OTEgLT4gMQorYm9vbDEzNTAgaXNzaWduZWQgMUUrOTkyIC0+IDAKK2Jvb2wxMzUxIGlzc2lnbmVkIC0xRSs5OTIgLT4gMQorYm9vbDEzNTIgaXNzaWduZWQgMUUrOTk4IC0+IDAKK2Jvb2wxMzUzIGlzc2lnbmVkIC0xRSs5OTggLT4gMQorYm9vbDEzNTQgaXNzaWduZWQgMUUrOTk5IC0+IDAKK2Jvb2wxMzU1IGlzc2lnbmVkIC0xRSs5OTkgLT4gMQorYm9vbDEzNTYgaXNzaWduZWQgMUUrMTAwMCAtPiAwCitib29sMTM1NyBpc3NpZ25lZCAtMUUrMTAwMCAtPiAxCitib29sMTM1OCBpc3NpZ25lZCAxRSsyMDAwIC0+IDAKK2Jvb2wxMzU5IGlzc2lnbmVkIC0xRSsyMDAwIC0+IDEKK2Jvb2wxMzYwIGlzc2lnbmVkIDlFLTIwMDAgLT4gMAorYm9vbDEzNjEgaXNzaWduZWQgLTlFLTIwMDAgLT4gMQorYm9vbDEzNjIgaXNzaWduZWQgOUUtMTAwOCAtPiAwCitib29sMTM2MyBpc3NpZ25lZCAtOUUtMTAwOCAtPiAxCitib29sMTM2NCBpc3NpZ25lZCA5RS0xMDA3IC0+IDAKK2Jvb2wxMzY1IGlzc2lnbmVkIC05RS0xMDA3IC0+IDEKK2Jvb2wxMzY2IGlzc2lnbmVkIDlFLTEwMDYgLT4gMAorYm9vbDEzNjcgaXNzaWduZWQgLTlFLTEwMDYgLT4gMQorYm9vbDEzNjggaXNzaWduZWQgOUUtMTAwMCAtPiAwCitib29sMTM2OSBpc3NpZ25lZCAtOUUtMTAwMCAtPiAxCitib29sMTM3MCBpc3NpZ25lZCA5RS05OTkgLT4gMAorYm9vbDEzNzEgaXNzaWduZWQgLTlFLTk5OSAtPiAxCitib29sMTM3MiBpc3NpZ25lZCA5RS05OTggLT4gMAorYm9vbDEzNzMgaXNzaWduZWQgLTlFLTk5OCAtPiAxCitib29sMTM3NCBpc3NpZ25lZCA5RS0xMDAgLT4gMAorYm9vbDEzNzUgaXNzaWduZWQgLTlFLTEwMCAtPiAxCitib29sMTM3NiBpc3NpZ25lZCAwLjAwMDAwOSAtPiAwCitib29sMTM3NyBpc3NpZ25lZCAtMC4wMDAwMDkgLT4gMQorYm9vbDEzNzggaXNzaWduZWQgMC4wMDkgLT4gMAorYm9vbDEzNzkgaXNzaWduZWQgLTAuMDA5IC0+IDEKK2Jvb2wxMzgwIGlzc2lnbmVkIDAuMDkgLT4gMAorYm9vbDEzODEgaXNzaWduZWQgLTAuMDkgLT4gMQorYm9vbDEzODIgaXNzaWduZWQgMC45IC0+IDAKK2Jvb2wxMzgzIGlzc2lnbmVkIC0wLjkgLT4gMQorYm9vbDEzODQgaXNzaWduZWQgOSAtPiAwCitib29sMTM4NSBpc3NpZ25lZCAtOSAtPiAxCitib29sMTM4NiBpc3NpZ25lZCA5RSsxIC0+IDAKK2Jvb2wxMzg3IGlzc2lnbmVkIC05RSsxIC0+IDEKK2Jvb2wxMzg4IGlzc2lnbmVkIDlFKzIgLT4gMAorYm9vbDEzODkgaXNzaWduZWQgLTlFKzIgLT4gMQorYm9vbDEzOTAgaXNzaWduZWQgOUUrMyAtPiAwCitib29sMTM5MSBpc3NpZ25lZCAtOUUrMyAtPiAxCitib29sMTM5MiBpc3NpZ25lZCA5RSs2IC0+IDAKK2Jvb2wxMzkzIGlzc2lnbmVkIC05RSs2IC0+IDEKK2Jvb2wxMzk0IGlzc2lnbmVkIDlFKzEwMCAtPiAwCitib29sMTM5NSBpc3NpZ25lZCAtOUUrMTAwIC0+IDEKK2Jvb2wxMzk2IGlzc2lnbmVkIDlFKzk5MCAtPiAwCitib29sMTM5NyBpc3NpZ25lZCAtOUUrOTkwIC0+IDEKK2Jvb2wxMzk4IGlzc2lnbmVkIDlFKzk5MSAtPiAwCitib29sMTM5OSBpc3NpZ25lZCAtOUUrOTkxIC0+IDEKK2Jvb2wxNDAwIGlzc2lnbmVkIDlFKzk5MiAtPiAwCitib29sMTQwMSBpc3NpZ25lZCAtOUUrOTkyIC0+IDEKK2Jvb2wxNDAyIGlzc2lnbmVkIDlFKzk5OCAtPiAwCitib29sMTQwMyBpc3NpZ25lZCAtOUUrOTk4IC0+IDEKK2Jvb2wxNDA0IGlzc2lnbmVkIDlFKzk5OSAtPiAwCitib29sMTQwNSBpc3NpZ25lZCAtOUUrOTk5IC0+IDEKK2Jvb2wxNDA2IGlzc2lnbmVkIDlFKzEwMDAgLT4gMAorYm9vbDE0MDcgaXNzaWduZWQgLTlFKzEwMDAgLT4gMQorYm9vbDE0MDggaXNzaWduZWQgOUUrMjAwMCAtPiAwCitib29sMTQwOSBpc3NpZ25lZCAtOUUrMjAwMCAtPiAxCitib29sMTQxMCBpc3NpZ25lZCA5Ljk5OTk5OTk5RS0yMDAwIC0+IDAKK2Jvb2wxNDExIGlzc2lnbmVkIC05Ljk5OTk5OTk5RS0yMDAwIC0+IDEKK2Jvb2wxNDEyIGlzc2lnbmVkIDkuOTk5OTk5OTlFLTEwMDggLT4gMAorYm9vbDE0MTMgaXNzaWduZWQgLTkuOTk5OTk5OTlFLTEwMDggLT4gMQorYm9vbDE0MTQgaXNzaWduZWQgOS45OTk5OTk5OUUtMTAwNyAtPiAwCitib29sMTQxNSBpc3NpZ25lZCAtOS45OTk5OTk5OUUtMTAwNyAtPiAxCitib29sMTQxNiBpc3NpZ25lZCA5Ljk5OTk5OTk5RS0xMDA2IC0+IDAKK2Jvb2wxNDE3IGlzc2lnbmVkIC05Ljk5OTk5OTk5RS0xMDA2IC0+IDEKK2Jvb2wxNDE4IGlzc2lnbmVkIDkuOTk5OTk5OTlFLTEwMDAgLT4gMAorYm9vbDE0MTkgaXNzaWduZWQgLTkuOTk5OTk5OTlFLTEwMDAgLT4gMQorYm9vbDE0MjAgaXNzaWduZWQgOS45OTk5OTk5OUUtOTk5IC0+IDAKK2Jvb2wxNDIxIGlzc2lnbmVkIC05Ljk5OTk5OTk5RS05OTkgLT4gMQorYm9vbDE0MjIgaXNzaWduZWQgOS45OTk5OTk5OUUtOTk4IC0+IDAKK2Jvb2wxNDIzIGlzc2lnbmVkIC05Ljk5OTk5OTk5RS05OTggLT4gMQorYm9vbDE0MjQgaXNzaWduZWQgOS45OTk5OTk5OUUtMTAwIC0+IDAKK2Jvb2wxNDI1IGlzc2lnbmVkIC05Ljk5OTk5OTk5RS0xMDAgLT4gMQorYm9vbDE0MjYgaXNzaWduZWQgMC4wMDAwMDk5OTk5OTk5OSAtPiAwCitib29sMTQyNyBpc3NpZ25lZCAtMC4wMDAwMDk5OTk5OTk5OSAtPiAxCitib29sMTQyOCBpc3NpZ25lZCAwLjAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wxNDI5IGlzc2lnbmVkIC0wLjAwOTk5OTk5OTk5IC0+IDEKK2Jvb2wxNDMwIGlzc2lnbmVkIDAuMDk5OTk5OTk5OSAtPiAwCitib29sMTQzMSBpc3NpZ25lZCAtMC4wOTk5OTk5OTk5IC0+IDEKK2Jvb2wxNDMyIGlzc2lnbmVkIDAuOTk5OTk5OTk5IC0+IDAKK2Jvb2wxNDMzIGlzc2lnbmVkIC0wLjk5OTk5OTk5OSAtPiAxCitib29sMTQzNCBpc3NpZ25lZCA5Ljk5OTk5OTk5IC0+IDAKK2Jvb2wxNDM1IGlzc2lnbmVkIC05Ljk5OTk5OTk5IC0+IDEKK2Jvb2wxNDM2IGlzc2lnbmVkIDk5Ljk5OTk5OTkgLT4gMAorYm9vbDE0MzcgaXNzaWduZWQgLTk5Ljk5OTk5OTkgLT4gMQorYm9vbDE0MzggaXNzaWduZWQgOTk5Ljk5OTk5OSAtPiAwCitib29sMTQzOSBpc3NpZ25lZCAtOTk5Ljk5OTk5OSAtPiAxCitib29sMTQ0MCBpc3NpZ25lZCA5OTk5Ljk5OTk5IC0+IDAKK2Jvb2wxNDQxIGlzc2lnbmVkIC05OTk5Ljk5OTk5IC0+IDEKK2Jvb2wxNDQyIGlzc2lnbmVkIDk5OTk5OTkuOTkgLT4gMAorYm9vbDE0NDMgaXNzaWduZWQgLTk5OTk5OTkuOTkgLT4gMQorYm9vbDE0NDQgaXNzaWduZWQgOS45OTk5OTk5OUUrMTAwIC0+IDAKK2Jvb2wxNDQ1IGlzc2lnbmVkIC05Ljk5OTk5OTk5RSsxMDAgLT4gMQorYm9vbDE0NDYgaXNzaWduZWQgOS45OTk5OTk5OUUrOTkwIC0+IDAKK2Jvb2wxNDQ3IGlzc2lnbmVkIC05Ljk5OTk5OTk5RSs5OTAgLT4gMQorYm9vbDE0NDggaXNzaWduZWQgOS45OTk5OTk5OUUrOTkxIC0+IDAKK2Jvb2wxNDQ5IGlzc2lnbmVkIC05Ljk5OTk5OTk5RSs5OTEgLT4gMQorYm9vbDE0NTAgaXNzaWduZWQgOS45OTk5OTk5OUUrOTkyIC0+IDAKK2Jvb2wxNDUxIGlzc2lnbmVkIC05Ljk5OTk5OTk5RSs5OTIgLT4gMQorYm9vbDE0NTIgaXNzaWduZWQgOS45OTk5OTk5OUUrOTk4IC0+IDAKK2Jvb2wxNDUzIGlzc2lnbmVkIC05Ljk5OTk5OTk5RSs5OTggLT4gMQorYm9vbDE0NTQgaXNzaWduZWQgOS45OTk5OTk5OUUrOTk5IC0+IDAKK2Jvb2wxNDU1IGlzc2lnbmVkIC05Ljk5OTk5OTk5RSs5OTkgLT4gMQorYm9vbDE0NTYgaXNzaWduZWQgOS45OTk5OTk5OUUrMTAwMCAtPiAwCitib29sMTQ1NyBpc3NpZ25lZCAtOS45OTk5OTk5OUUrMTAwMCAtPiAxCitib29sMTQ1OCBpc3NpZ25lZCA5Ljk5OTk5OTk5RSsyMDAwIC0+IDAKK2Jvb2wxNDU5IGlzc2lnbmVkIC05Ljk5OTk5OTk5RSsyMDAwIC0+IDEKK2Jvb2wxNDYwIGlzc2lnbmVkIEluZmluaXR5IC0+IDAKK2Jvb2wxNDYxIGlzc2lnbmVkIC1JbmZpbml0eSAtPiAxCitib29sMTQ2MiBpc3NpZ25lZCBOYU4gLT4gMAorYm9vbDE0NjMgaXNzaWduZWQgLU5hTiAtPiAxCitib29sMTQ2NCBpc3NpZ25lZCBOYU4xMjMgLT4gMAorYm9vbDE0NjUgaXNzaWduZWQgLU5hTjEyMyAtPiAxCitib29sMTQ2NiBpc3NpZ25lZCBzTmFOIC0+IDAKK2Jvb2wxNDY3IGlzc2lnbmVkIC1zTmFOIC0+IDEKK2Jvb2wxNDY4IGlzc2lnbmVkIHNOYU4xMjMgLT4gMAorYm9vbDE0NjkgaXNzaWduZWQgLXNOYU4xMjMgLT4gMQorYm9vbDE0NzAgaXNzbmFuIDBFLTIwMDAgLT4gMAorYm9vbDE0NzEgaXNzbmFuIC0wRS0yMDAwIC0+IDAKK2Jvb2wxNDcyIGlzc25hbiAwRS0xMDA4IC0+IDAKK2Jvb2wxNDczIGlzc25hbiAtMEUtMTAwOCAtPiAwCitib29sMTQ3NCBpc3NuYW4gMEUtMTAwNyAtPiAwCitib29sMTQ3NSBpc3NuYW4gLTBFLTEwMDcgLT4gMAorYm9vbDE0NzYgaXNzbmFuIDBFLTEwMDYgLT4gMAorYm9vbDE0NzcgaXNzbmFuIC0wRS0xMDA2IC0+IDAKK2Jvb2wxNDc4IGlzc25hbiAwRS0xMDAwIC0+IDAKK2Jvb2wxNDc5IGlzc25hbiAtMEUtMTAwMCAtPiAwCitib29sMTQ4MCBpc3NuYW4gMEUtOTk5IC0+IDAKK2Jvb2wxNDgxIGlzc25hbiAtMEUtOTk5IC0+IDAKK2Jvb2wxNDgyIGlzc25hbiAwRS05OTggLT4gMAorYm9vbDE0ODMgaXNzbmFuIC0wRS05OTggLT4gMAorYm9vbDE0ODQgaXNzbmFuIDBFLTEwMCAtPiAwCitib29sMTQ4NSBpc3NuYW4gLTBFLTEwMCAtPiAwCitib29sMTQ4NiBpc3NuYW4gMC4wMDAwMDAgLT4gMAorYm9vbDE0ODcgaXNzbmFuIC0wLjAwMDAwMCAtPiAwCitib29sMTQ4OCBpc3NuYW4gMC4wMDAgLT4gMAorYm9vbDE0ODkgaXNzbmFuIC0wLjAwMCAtPiAwCitib29sMTQ5MCBpc3NuYW4gMC4wMCAtPiAwCitib29sMTQ5MSBpc3NuYW4gLTAuMDAgLT4gMAorYm9vbDE0OTIgaXNzbmFuIDAuMCAtPiAwCitib29sMTQ5MyBpc3NuYW4gLTAuMCAtPiAwCitib29sMTQ5NCBpc3NuYW4gMCAtPiAwCitib29sMTQ5NSBpc3NuYW4gLTAgLT4gMAorYm9vbDE0OTYgaXNzbmFuIDBFKzEgLT4gMAorYm9vbDE0OTcgaXNzbmFuIC0wRSsxIC0+IDAKK2Jvb2wxNDk4IGlzc25hbiAwRSsyIC0+IDAKK2Jvb2wxNDk5IGlzc25hbiAtMEUrMiAtPiAwCitib29sMTUwMCBpc3NuYW4gMEUrMyAtPiAwCitib29sMTUwMSBpc3NuYW4gLTBFKzMgLT4gMAorYm9vbDE1MDIgaXNzbmFuIDBFKzYgLT4gMAorYm9vbDE1MDMgaXNzbmFuIC0wRSs2IC0+IDAKK2Jvb2wxNTA0IGlzc25hbiAwRSsxMDAgLT4gMAorYm9vbDE1MDUgaXNzbmFuIC0wRSsxMDAgLT4gMAorYm9vbDE1MDYgaXNzbmFuIDBFKzk5MCAtPiAwCitib29sMTUwNyBpc3NuYW4gLTBFKzk5MCAtPiAwCitib29sMTUwOCBpc3NuYW4gMEUrOTkxIC0+IDAKK2Jvb2wxNTA5IGlzc25hbiAtMEUrOTkxIC0+IDAKK2Jvb2wxNTEwIGlzc25hbiAwRSs5OTIgLT4gMAorYm9vbDE1MTEgaXNzbmFuIC0wRSs5OTIgLT4gMAorYm9vbDE1MTIgaXNzbmFuIDBFKzk5OCAtPiAwCitib29sMTUxMyBpc3NuYW4gLTBFKzk5OCAtPiAwCitib29sMTUxNCBpc3NuYW4gMEUrOTk5IC0+IDAKK2Jvb2wxNTE1IGlzc25hbiAtMEUrOTk5IC0+IDAKK2Jvb2wxNTE2IGlzc25hbiAwRSsxMDAwIC0+IDAKK2Jvb2wxNTE3IGlzc25hbiAtMEUrMTAwMCAtPiAwCitib29sMTUxOCBpc3NuYW4gMEUrMjAwMCAtPiAwCitib29sMTUxOSBpc3NuYW4gLTBFKzIwMDAgLT4gMAorYm9vbDE1MjAgaXNzbmFuIDFFLTIwMDAgLT4gMAorYm9vbDE1MjEgaXNzbmFuIC0xRS0yMDAwIC0+IDAKK2Jvb2wxNTIyIGlzc25hbiAxRS0xMDA4IC0+IDAKK2Jvb2wxNTIzIGlzc25hbiAtMUUtMTAwOCAtPiAwCitib29sMTUyNCBpc3NuYW4gMUUtMTAwNyAtPiAwCitib29sMTUyNSBpc3NuYW4gLTFFLTEwMDcgLT4gMAorYm9vbDE1MjYgaXNzbmFuIDFFLTEwMDYgLT4gMAorYm9vbDE1MjcgaXNzbmFuIC0xRS0xMDA2IC0+IDAKK2Jvb2wxNTI4IGlzc25hbiAxRS0xMDAwIC0+IDAKK2Jvb2wxNTI5IGlzc25hbiAtMUUtMTAwMCAtPiAwCitib29sMTUzMCBpc3NuYW4gMUUtOTk5IC0+IDAKK2Jvb2wxNTMxIGlzc25hbiAtMUUtOTk5IC0+IDAKK2Jvb2wxNTMyIGlzc25hbiAxRS05OTggLT4gMAorYm9vbDE1MzMgaXNzbmFuIC0xRS05OTggLT4gMAorYm9vbDE1MzQgaXNzbmFuIDFFLTEwMCAtPiAwCitib29sMTUzNSBpc3NuYW4gLTFFLTEwMCAtPiAwCitib29sMTUzNiBpc3NuYW4gMC4wMDAwMDEgLT4gMAorYm9vbDE1MzcgaXNzbmFuIC0wLjAwMDAwMSAtPiAwCitib29sMTUzOCBpc3NuYW4gMC4wMDEgLT4gMAorYm9vbDE1MzkgaXNzbmFuIC0wLjAwMSAtPiAwCitib29sMTU0MCBpc3NuYW4gMC4wMSAtPiAwCitib29sMTU0MSBpc3NuYW4gLTAuMDEgLT4gMAorYm9vbDE1NDIgaXNzbmFuIDAuMSAtPiAwCitib29sMTU0MyBpc3NuYW4gLTAuMSAtPiAwCitib29sMTU0NCBpc3NuYW4gMSAtPiAwCitib29sMTU0NSBpc3NuYW4gLTEgLT4gMAorYm9vbDE1NDYgaXNzbmFuIDFFKzEgLT4gMAorYm9vbDE1NDcgaXNzbmFuIC0xRSsxIC0+IDAKK2Jvb2wxNTQ4IGlzc25hbiAxRSsyIC0+IDAKK2Jvb2wxNTQ5IGlzc25hbiAtMUUrMiAtPiAwCitib29sMTU1MCBpc3NuYW4gMUUrMyAtPiAwCitib29sMTU1MSBpc3NuYW4gLTFFKzMgLT4gMAorYm9vbDE1NTIgaXNzbmFuIDFFKzYgLT4gMAorYm9vbDE1NTMgaXNzbmFuIC0xRSs2IC0+IDAKK2Jvb2wxNTU0IGlzc25hbiAxRSsxMDAgLT4gMAorYm9vbDE1NTUgaXNzbmFuIC0xRSsxMDAgLT4gMAorYm9vbDE1NTYgaXNzbmFuIDFFKzk5MCAtPiAwCitib29sMTU1NyBpc3NuYW4gLTFFKzk5MCAtPiAwCitib29sMTU1OCBpc3NuYW4gMUUrOTkxIC0+IDAKK2Jvb2wxNTU5IGlzc25hbiAtMUUrOTkxIC0+IDAKK2Jvb2wxNTYwIGlzc25hbiAxRSs5OTIgLT4gMAorYm9vbDE1NjEgaXNzbmFuIC0xRSs5OTIgLT4gMAorYm9vbDE1NjIgaXNzbmFuIDFFKzk5OCAtPiAwCitib29sMTU2MyBpc3NuYW4gLTFFKzk5OCAtPiAwCitib29sMTU2NCBpc3NuYW4gMUUrOTk5IC0+IDAKK2Jvb2wxNTY1IGlzc25hbiAtMUUrOTk5IC0+IDAKK2Jvb2wxNTY2IGlzc25hbiAxRSsxMDAwIC0+IDAKK2Jvb2wxNTY3IGlzc25hbiAtMUUrMTAwMCAtPiAwCitib29sMTU2OCBpc3NuYW4gMUUrMjAwMCAtPiAwCitib29sMTU2OSBpc3NuYW4gLTFFKzIwMDAgLT4gMAorYm9vbDE1NzAgaXNzbmFuIDlFLTIwMDAgLT4gMAorYm9vbDE1NzEgaXNzbmFuIC05RS0yMDAwIC0+IDAKK2Jvb2wxNTcyIGlzc25hbiA5RS0xMDA4IC0+IDAKK2Jvb2wxNTczIGlzc25hbiAtOUUtMTAwOCAtPiAwCitib29sMTU3NCBpc3NuYW4gOUUtMTAwNyAtPiAwCitib29sMTU3NSBpc3NuYW4gLTlFLTEwMDcgLT4gMAorYm9vbDE1NzYgaXNzbmFuIDlFLTEwMDYgLT4gMAorYm9vbDE1NzcgaXNzbmFuIC05RS0xMDA2IC0+IDAKK2Jvb2wxNTc4IGlzc25hbiA5RS0xMDAwIC0+IDAKK2Jvb2wxNTc5IGlzc25hbiAtOUUtMTAwMCAtPiAwCitib29sMTU4MCBpc3NuYW4gOUUtOTk5IC0+IDAKK2Jvb2wxNTgxIGlzc25hbiAtOUUtOTk5IC0+IDAKK2Jvb2wxNTgyIGlzc25hbiA5RS05OTggLT4gMAorYm9vbDE1ODMgaXNzbmFuIC05RS05OTggLT4gMAorYm9vbDE1ODQgaXNzbmFuIDlFLTEwMCAtPiAwCitib29sMTU4NSBpc3NuYW4gLTlFLTEwMCAtPiAwCitib29sMTU4NiBpc3NuYW4gMC4wMDAwMDkgLT4gMAorYm9vbDE1ODcgaXNzbmFuIC0wLjAwMDAwOSAtPiAwCitib29sMTU4OCBpc3NuYW4gMC4wMDkgLT4gMAorYm9vbDE1ODkgaXNzbmFuIC0wLjAwOSAtPiAwCitib29sMTU5MCBpc3NuYW4gMC4wOSAtPiAwCitib29sMTU5MSBpc3NuYW4gLTAuMDkgLT4gMAorYm9vbDE1OTIgaXNzbmFuIDAuOSAtPiAwCitib29sMTU5MyBpc3NuYW4gLTAuOSAtPiAwCitib29sMTU5NCBpc3NuYW4gOSAtPiAwCitib29sMTU5NSBpc3NuYW4gLTkgLT4gMAorYm9vbDE1OTYgaXNzbmFuIDlFKzEgLT4gMAorYm9vbDE1OTcgaXNzbmFuIC05RSsxIC0+IDAKK2Jvb2wxNTk4IGlzc25hbiA5RSsyIC0+IDAKK2Jvb2wxNTk5IGlzc25hbiAtOUUrMiAtPiAwCitib29sMTYwMCBpc3NuYW4gOUUrMyAtPiAwCitib29sMTYwMSBpc3NuYW4gLTlFKzMgLT4gMAorYm9vbDE2MDIgaXNzbmFuIDlFKzYgLT4gMAorYm9vbDE2MDMgaXNzbmFuIC05RSs2IC0+IDAKK2Jvb2wxNjA0IGlzc25hbiA5RSsxMDAgLT4gMAorYm9vbDE2MDUgaXNzbmFuIC05RSsxMDAgLT4gMAorYm9vbDE2MDYgaXNzbmFuIDlFKzk5MCAtPiAwCitib29sMTYwNyBpc3NuYW4gLTlFKzk5MCAtPiAwCitib29sMTYwOCBpc3NuYW4gOUUrOTkxIC0+IDAKK2Jvb2wxNjA5IGlzc25hbiAtOUUrOTkxIC0+IDAKK2Jvb2wxNjEwIGlzc25hbiA5RSs5OTIgLT4gMAorYm9vbDE2MTEgaXNzbmFuIC05RSs5OTIgLT4gMAorYm9vbDE2MTIgaXNzbmFuIDlFKzk5OCAtPiAwCitib29sMTYxMyBpc3NuYW4gLTlFKzk5OCAtPiAwCitib29sMTYxNCBpc3NuYW4gOUUrOTk5IC0+IDAKK2Jvb2wxNjE1IGlzc25hbiAtOUUrOTk5IC0+IDAKK2Jvb2wxNjE2IGlzc25hbiA5RSsxMDAwIC0+IDAKK2Jvb2wxNjE3IGlzc25hbiAtOUUrMTAwMCAtPiAwCitib29sMTYxOCBpc3NuYW4gOUUrMjAwMCAtPiAwCitib29sMTYxOSBpc3NuYW4gLTlFKzIwMDAgLT4gMAorYm9vbDE2MjAgaXNzbmFuIDkuOTk5OTk5OTlFLTIwMDAgLT4gMAorYm9vbDE2MjEgaXNzbmFuIC05Ljk5OTk5OTk5RS0yMDAwIC0+IDAKK2Jvb2wxNjIyIGlzc25hbiA5Ljk5OTk5OTk5RS0xMDA4IC0+IDAKK2Jvb2wxNjIzIGlzc25hbiAtOS45OTk5OTk5OUUtMTAwOCAtPiAwCitib29sMTYyNCBpc3NuYW4gOS45OTk5OTk5OUUtMTAwNyAtPiAwCitib29sMTYyNSBpc3NuYW4gLTkuOTk5OTk5OTlFLTEwMDcgLT4gMAorYm9vbDE2MjYgaXNzbmFuIDkuOTk5OTk5OTlFLTEwMDYgLT4gMAorYm9vbDE2MjcgaXNzbmFuIC05Ljk5OTk5OTk5RS0xMDA2IC0+IDAKK2Jvb2wxNjI4IGlzc25hbiA5Ljk5OTk5OTk5RS0xMDAwIC0+IDAKK2Jvb2wxNjI5IGlzc25hbiAtOS45OTk5OTk5OUUtMTAwMCAtPiAwCitib29sMTYzMCBpc3NuYW4gOS45OTk5OTk5OUUtOTk5IC0+IDAKK2Jvb2wxNjMxIGlzc25hbiAtOS45OTk5OTk5OUUtOTk5IC0+IDAKK2Jvb2wxNjMyIGlzc25hbiA5Ljk5OTk5OTk5RS05OTggLT4gMAorYm9vbDE2MzMgaXNzbmFuIC05Ljk5OTk5OTk5RS05OTggLT4gMAorYm9vbDE2MzQgaXNzbmFuIDkuOTk5OTk5OTlFLTEwMCAtPiAwCitib29sMTYzNSBpc3NuYW4gLTkuOTk5OTk5OTlFLTEwMCAtPiAwCitib29sMTYzNiBpc3NuYW4gMC4wMDAwMDk5OTk5OTk5OSAtPiAwCitib29sMTYzNyBpc3NuYW4gLTAuMDAwMDA5OTk5OTk5OTkgLT4gMAorYm9vbDE2MzggaXNzbmFuIDAuMDA5OTk5OTk5OTkgLT4gMAorYm9vbDE2MzkgaXNzbmFuIC0wLjAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wxNjQwIGlzc25hbiAwLjA5OTk5OTk5OTkgLT4gMAorYm9vbDE2NDEgaXNzbmFuIC0wLjA5OTk5OTk5OTkgLT4gMAorYm9vbDE2NDIgaXNzbmFuIDAuOTk5OTk5OTk5IC0+IDAKK2Jvb2wxNjQzIGlzc25hbiAtMC45OTk5OTk5OTkgLT4gMAorYm9vbDE2NDQgaXNzbmFuIDkuOTk5OTk5OTkgLT4gMAorYm9vbDE2NDUgaXNzbmFuIC05Ljk5OTk5OTk5IC0+IDAKK2Jvb2wxNjQ2IGlzc25hbiA5OS45OTk5OTk5IC0+IDAKK2Jvb2wxNjQ3IGlzc25hbiAtOTkuOTk5OTk5OSAtPiAwCitib29sMTY0OCBpc3NuYW4gOTk5Ljk5OTk5OSAtPiAwCitib29sMTY0OSBpc3NuYW4gLTk5OS45OTk5OTkgLT4gMAorYm9vbDE2NTAgaXNzbmFuIDk5OTkuOTk5OTkgLT4gMAorYm9vbDE2NTEgaXNzbmFuIC05OTk5Ljk5OTk5IC0+IDAKK2Jvb2wxNjUyIGlzc25hbiA5OTk5OTk5Ljk5IC0+IDAKK2Jvb2wxNjUzIGlzc25hbiAtOTk5OTk5OS45OSAtPiAwCitib29sMTY1NCBpc3NuYW4gOS45OTk5OTk5OUUrMTAwIC0+IDAKK2Jvb2wxNjU1IGlzc25hbiAtOS45OTk5OTk5OUUrMTAwIC0+IDAKK2Jvb2wxNjU2IGlzc25hbiA5Ljk5OTk5OTk5RSs5OTAgLT4gMAorYm9vbDE2NTcgaXNzbmFuIC05Ljk5OTk5OTk5RSs5OTAgLT4gMAorYm9vbDE2NTggaXNzbmFuIDkuOTk5OTk5OTlFKzk5MSAtPiAwCitib29sMTY1OSBpc3NuYW4gLTkuOTk5OTk5OTlFKzk5MSAtPiAwCitib29sMTY2MCBpc3NuYW4gOS45OTk5OTk5OUUrOTkyIC0+IDAKK2Jvb2wxNjYxIGlzc25hbiAtOS45OTk5OTk5OUUrOTkyIC0+IDAKK2Jvb2wxNjYyIGlzc25hbiA5Ljk5OTk5OTk5RSs5OTggLT4gMAorYm9vbDE2NjMgaXNzbmFuIC05Ljk5OTk5OTk5RSs5OTggLT4gMAorYm9vbDE2NjQgaXNzbmFuIDkuOTk5OTk5OTlFKzk5OSAtPiAwCitib29sMTY2NSBpc3NuYW4gLTkuOTk5OTk5OTlFKzk5OSAtPiAwCitib29sMTY2NiBpc3NuYW4gOS45OTk5OTk5OUUrMTAwMCAtPiAwCitib29sMTY2NyBpc3NuYW4gLTkuOTk5OTk5OTlFKzEwMDAgLT4gMAorYm9vbDE2NjggaXNzbmFuIDkuOTk5OTk5OTlFKzIwMDAgLT4gMAorYm9vbDE2NjkgaXNzbmFuIC05Ljk5OTk5OTk5RSsyMDAwIC0+IDAKK2Jvb2wxNjcwIGlzc25hbiBJbmZpbml0eSAtPiAwCitib29sMTY3MSBpc3NuYW4gLUluZmluaXR5IC0+IDAKK2Jvb2wxNjcyIGlzc25hbiBOYU4gLT4gMAorYm9vbDE2NzMgaXNzbmFuIC1OYU4gLT4gMAorYm9vbDE2NzQgaXNzbmFuIE5hTjEyMyAtPiAwCitib29sMTY3NSBpc3NuYW4gLU5hTjEyMyAtPiAwCitib29sMTY3NiBpc3NuYW4gc05hTiAtPiAxCitib29sMTY3NyBpc3NuYW4gLXNOYU4gLT4gMQorYm9vbDE2NzggaXNzbmFuIHNOYU4xMjMgLT4gMQorYm9vbDE2NzkgaXNzbmFuIC1zTmFOMTIzIC0+IDEKK2Jvb2wxNjgwIGlzc3Vibm9ybWFsIDBFLTIwMDAgLT4gMAorYm9vbDE2ODEgaXNzdWJub3JtYWwgLTBFLTIwMDAgLT4gMAorYm9vbDE2ODIgaXNzdWJub3JtYWwgMEUtMTAwOCAtPiAwCitib29sMTY4MyBpc3N1Ym5vcm1hbCAtMEUtMTAwOCAtPiAwCitib29sMTY4NCBpc3N1Ym5vcm1hbCAwRS0xMDA3IC0+IDAKK2Jvb2wxNjg1IGlzc3Vibm9ybWFsIC0wRS0xMDA3IC0+IDAKK2Jvb2wxNjg2IGlzc3Vibm9ybWFsIDBFLTEwMDYgLT4gMAorYm9vbDE2ODcgaXNzdWJub3JtYWwgLTBFLTEwMDYgLT4gMAorYm9vbDE2ODggaXNzdWJub3JtYWwgMEUtMTAwMCAtPiAwCitib29sMTY4OSBpc3N1Ym5vcm1hbCAtMEUtMTAwMCAtPiAwCitib29sMTY5MCBpc3N1Ym5vcm1hbCAwRS05OTkgLT4gMAorYm9vbDE2OTEgaXNzdWJub3JtYWwgLTBFLTk5OSAtPiAwCitib29sMTY5MiBpc3N1Ym5vcm1hbCAwRS05OTggLT4gMAorYm9vbDE2OTMgaXNzdWJub3JtYWwgLTBFLTk5OCAtPiAwCitib29sMTY5NCBpc3N1Ym5vcm1hbCAwRS0xMDAgLT4gMAorYm9vbDE2OTUgaXNzdWJub3JtYWwgLTBFLTEwMCAtPiAwCitib29sMTY5NiBpc3N1Ym5vcm1hbCAwLjAwMDAwMCAtPiAwCitib29sMTY5NyBpc3N1Ym5vcm1hbCAtMC4wMDAwMDAgLT4gMAorYm9vbDE2OTggaXNzdWJub3JtYWwgMC4wMDAgLT4gMAorYm9vbDE2OTkgaXNzdWJub3JtYWwgLTAuMDAwIC0+IDAKK2Jvb2wxNzAwIGlzc3Vibm9ybWFsIDAuMDAgLT4gMAorYm9vbDE3MDEgaXNzdWJub3JtYWwgLTAuMDAgLT4gMAorYm9vbDE3MDIgaXNzdWJub3JtYWwgMC4wIC0+IDAKK2Jvb2wxNzAzIGlzc3Vibm9ybWFsIC0wLjAgLT4gMAorYm9vbDE3MDQgaXNzdWJub3JtYWwgMCAtPiAwCitib29sMTcwNSBpc3N1Ym5vcm1hbCAtMCAtPiAwCitib29sMTcwNiBpc3N1Ym5vcm1hbCAwRSsxIC0+IDAKK2Jvb2wxNzA3IGlzc3Vibm9ybWFsIC0wRSsxIC0+IDAKK2Jvb2wxNzA4IGlzc3Vibm9ybWFsIDBFKzIgLT4gMAorYm9vbDE3MDkgaXNzdWJub3JtYWwgLTBFKzIgLT4gMAorYm9vbDE3MTAgaXNzdWJub3JtYWwgMEUrMyAtPiAwCitib29sMTcxMSBpc3N1Ym5vcm1hbCAtMEUrMyAtPiAwCitib29sMTcxMiBpc3N1Ym5vcm1hbCAwRSs2IC0+IDAKK2Jvb2wxNzEzIGlzc3Vibm9ybWFsIC0wRSs2IC0+IDAKK2Jvb2wxNzE0IGlzc3Vibm9ybWFsIDBFKzEwMCAtPiAwCitib29sMTcxNSBpc3N1Ym5vcm1hbCAtMEUrMTAwIC0+IDAKK2Jvb2wxNzE2IGlzc3Vibm9ybWFsIDBFKzk5MCAtPiAwCitib29sMTcxNyBpc3N1Ym5vcm1hbCAtMEUrOTkwIC0+IDAKK2Jvb2wxNzE4IGlzc3Vibm9ybWFsIDBFKzk5MSAtPiAwCitib29sMTcxOSBpc3N1Ym5vcm1hbCAtMEUrOTkxIC0+IDAKK2Jvb2wxNzIwIGlzc3Vibm9ybWFsIDBFKzk5MiAtPiAwCitib29sMTcyMSBpc3N1Ym5vcm1hbCAtMEUrOTkyIC0+IDAKK2Jvb2wxNzIyIGlzc3Vibm9ybWFsIDBFKzk5OCAtPiAwCitib29sMTcyMyBpc3N1Ym5vcm1hbCAtMEUrOTk4IC0+IDAKK2Jvb2wxNzI0IGlzc3Vibm9ybWFsIDBFKzk5OSAtPiAwCitib29sMTcyNSBpc3N1Ym5vcm1hbCAtMEUrOTk5IC0+IDAKK2Jvb2wxNzI2IGlzc3Vibm9ybWFsIDBFKzEwMDAgLT4gMAorYm9vbDE3MjcgaXNzdWJub3JtYWwgLTBFKzEwMDAgLT4gMAorYm9vbDE3MjggaXNzdWJub3JtYWwgMEUrMjAwMCAtPiAwCitib29sMTcyOSBpc3N1Ym5vcm1hbCAtMEUrMjAwMCAtPiAwCitib29sMTczMCBpc3N1Ym5vcm1hbCAxRS0yMDAwIC0+IDEKK2Jvb2wxNzMxIGlzc3Vibm9ybWFsIC0xRS0yMDAwIC0+IDEKK2Jvb2wxNzMyIGlzc3Vibm9ybWFsIDFFLTEwMDggLT4gMQorYm9vbDE3MzMgaXNzdWJub3JtYWwgLTFFLTEwMDggLT4gMQorYm9vbDE3MzQgaXNzdWJub3JtYWwgMUUtMTAwNyAtPiAxCitib29sMTczNSBpc3N1Ym5vcm1hbCAtMUUtMTAwNyAtPiAxCitib29sMTczNiBpc3N1Ym5vcm1hbCAxRS0xMDA2IC0+IDEKK2Jvb2wxNzM3IGlzc3Vibm9ybWFsIC0xRS0xMDA2IC0+IDEKK2Jvb2wxNzM4IGlzc3Vibm9ybWFsIDFFLTEwMDAgLT4gMQorYm9vbDE3MzkgaXNzdWJub3JtYWwgLTFFLTEwMDAgLT4gMQorYm9vbDE3NDAgaXNzdWJub3JtYWwgMUUtOTk5IC0+IDAKK2Jvb2wxNzQxIGlzc3Vibm9ybWFsIC0xRS05OTkgLT4gMAorYm9vbDE3NDIgaXNzdWJub3JtYWwgMUUtOTk4IC0+IDAKK2Jvb2wxNzQzIGlzc3Vibm9ybWFsIC0xRS05OTggLT4gMAorYm9vbDE3NDQgaXNzdWJub3JtYWwgMUUtMTAwIC0+IDAKK2Jvb2wxNzQ1IGlzc3Vibm9ybWFsIC0xRS0xMDAgLT4gMAorYm9vbDE3NDYgaXNzdWJub3JtYWwgMC4wMDAwMDEgLT4gMAorYm9vbDE3NDcgaXNzdWJub3JtYWwgLTAuMDAwMDAxIC0+IDAKK2Jvb2wxNzQ4IGlzc3Vibm9ybWFsIDAuMDAxIC0+IDAKK2Jvb2wxNzQ5IGlzc3Vibm9ybWFsIC0wLjAwMSAtPiAwCitib29sMTc1MCBpc3N1Ym5vcm1hbCAwLjAxIC0+IDAKK2Jvb2wxNzUxIGlzc3Vibm9ybWFsIC0wLjAxIC0+IDAKK2Jvb2wxNzUyIGlzc3Vibm9ybWFsIDAuMSAtPiAwCitib29sMTc1MyBpc3N1Ym5vcm1hbCAtMC4xIC0+IDAKK2Jvb2wxNzU0IGlzc3Vibm9ybWFsIDEgLT4gMAorYm9vbDE3NTUgaXNzdWJub3JtYWwgLTEgLT4gMAorYm9vbDE3NTYgaXNzdWJub3JtYWwgMUUrMSAtPiAwCitib29sMTc1NyBpc3N1Ym5vcm1hbCAtMUUrMSAtPiAwCitib29sMTc1OCBpc3N1Ym5vcm1hbCAxRSsyIC0+IDAKK2Jvb2wxNzU5IGlzc3Vibm9ybWFsIC0xRSsyIC0+IDAKK2Jvb2wxNzYwIGlzc3Vibm9ybWFsIDFFKzMgLT4gMAorYm9vbDE3NjEgaXNzdWJub3JtYWwgLTFFKzMgLT4gMAorYm9vbDE3NjIgaXNzdWJub3JtYWwgMUUrNiAtPiAwCitib29sMTc2MyBpc3N1Ym5vcm1hbCAtMUUrNiAtPiAwCitib29sMTc2NCBpc3N1Ym5vcm1hbCAxRSsxMDAgLT4gMAorYm9vbDE3NjUgaXNzdWJub3JtYWwgLTFFKzEwMCAtPiAwCitib29sMTc2NiBpc3N1Ym5vcm1hbCAxRSs5OTAgLT4gMAorYm9vbDE3NjcgaXNzdWJub3JtYWwgLTFFKzk5MCAtPiAwCitib29sMTc2OCBpc3N1Ym5vcm1hbCAxRSs5OTEgLT4gMAorYm9vbDE3NjkgaXNzdWJub3JtYWwgLTFFKzk5MSAtPiAwCitib29sMTc3MCBpc3N1Ym5vcm1hbCAxRSs5OTIgLT4gMAorYm9vbDE3NzEgaXNzdWJub3JtYWwgLTFFKzk5MiAtPiAwCitib29sMTc3MiBpc3N1Ym5vcm1hbCAxRSs5OTggLT4gMAorYm9vbDE3NzMgaXNzdWJub3JtYWwgLTFFKzk5OCAtPiAwCitib29sMTc3NCBpc3N1Ym5vcm1hbCAxRSs5OTkgLT4gMAorYm9vbDE3NzUgaXNzdWJub3JtYWwgLTFFKzk5OSAtPiAwCitib29sMTc3NiBpc3N1Ym5vcm1hbCAxRSsxMDAwIC0+IDAKK2Jvb2wxNzc3IGlzc3Vibm9ybWFsIC0xRSsxMDAwIC0+IDAKK2Jvb2wxNzc4IGlzc3Vibm9ybWFsIDFFKzIwMDAgLT4gMAorYm9vbDE3NzkgaXNzdWJub3JtYWwgLTFFKzIwMDAgLT4gMAorYm9vbDE3ODAgaXNzdWJub3JtYWwgOUUtMjAwMCAtPiAxCitib29sMTc4MSBpc3N1Ym5vcm1hbCAtOUUtMjAwMCAtPiAxCitib29sMTc4MiBpc3N1Ym5vcm1hbCA5RS0xMDA4IC0+IDEKK2Jvb2wxNzgzIGlzc3Vibm9ybWFsIC05RS0xMDA4IC0+IDEKK2Jvb2wxNzg0IGlzc3Vibm9ybWFsIDlFLTEwMDcgLT4gMQorYm9vbDE3ODUgaXNzdWJub3JtYWwgLTlFLTEwMDcgLT4gMQorYm9vbDE3ODYgaXNzdWJub3JtYWwgOUUtMTAwNiAtPiAxCitib29sMTc4NyBpc3N1Ym5vcm1hbCAtOUUtMTAwNiAtPiAxCitib29sMTc4OCBpc3N1Ym5vcm1hbCA5RS0xMDAwIC0+IDEKK2Jvb2wxNzg5IGlzc3Vibm9ybWFsIC05RS0xMDAwIC0+IDEKK2Jvb2wxNzkwIGlzc3Vibm9ybWFsIDlFLTk5OSAtPiAwCitib29sMTc5MSBpc3N1Ym5vcm1hbCAtOUUtOTk5IC0+IDAKK2Jvb2wxNzkyIGlzc3Vibm9ybWFsIDlFLTk5OCAtPiAwCitib29sMTc5MyBpc3N1Ym5vcm1hbCAtOUUtOTk4IC0+IDAKK2Jvb2wxNzk0IGlzc3Vibm9ybWFsIDlFLTEwMCAtPiAwCitib29sMTc5NSBpc3N1Ym5vcm1hbCAtOUUtMTAwIC0+IDAKK2Jvb2wxNzk2IGlzc3Vibm9ybWFsIDAuMDAwMDA5IC0+IDAKK2Jvb2wxNzk3IGlzc3Vibm9ybWFsIC0wLjAwMDAwOSAtPiAwCitib29sMTc5OCBpc3N1Ym5vcm1hbCAwLjAwOSAtPiAwCitib29sMTc5OSBpc3N1Ym5vcm1hbCAtMC4wMDkgLT4gMAorYm9vbDE4MDAgaXNzdWJub3JtYWwgMC4wOSAtPiAwCitib29sMTgwMSBpc3N1Ym5vcm1hbCAtMC4wOSAtPiAwCitib29sMTgwMiBpc3N1Ym5vcm1hbCAwLjkgLT4gMAorYm9vbDE4MDMgaXNzdWJub3JtYWwgLTAuOSAtPiAwCitib29sMTgwNCBpc3N1Ym5vcm1hbCA5IC0+IDAKK2Jvb2wxODA1IGlzc3Vibm9ybWFsIC05IC0+IDAKK2Jvb2wxODA2IGlzc3Vibm9ybWFsIDlFKzEgLT4gMAorYm9vbDE4MDcgaXNzdWJub3JtYWwgLTlFKzEgLT4gMAorYm9vbDE4MDggaXNzdWJub3JtYWwgOUUrMiAtPiAwCitib29sMTgwOSBpc3N1Ym5vcm1hbCAtOUUrMiAtPiAwCitib29sMTgxMCBpc3N1Ym5vcm1hbCA5RSszIC0+IDAKK2Jvb2wxODExIGlzc3Vibm9ybWFsIC05RSszIC0+IDAKK2Jvb2wxODEyIGlzc3Vibm9ybWFsIDlFKzYgLT4gMAorYm9vbDE4MTMgaXNzdWJub3JtYWwgLTlFKzYgLT4gMAorYm9vbDE4MTQgaXNzdWJub3JtYWwgOUUrMTAwIC0+IDAKK2Jvb2wxODE1IGlzc3Vibm9ybWFsIC05RSsxMDAgLT4gMAorYm9vbDE4MTYgaXNzdWJub3JtYWwgOUUrOTkwIC0+IDAKK2Jvb2wxODE3IGlzc3Vibm9ybWFsIC05RSs5OTAgLT4gMAorYm9vbDE4MTggaXNzdWJub3JtYWwgOUUrOTkxIC0+IDAKK2Jvb2wxODE5IGlzc3Vibm9ybWFsIC05RSs5OTEgLT4gMAorYm9vbDE4MjAgaXNzdWJub3JtYWwgOUUrOTkyIC0+IDAKK2Jvb2wxODIxIGlzc3Vibm9ybWFsIC05RSs5OTIgLT4gMAorYm9vbDE4MjIgaXNzdWJub3JtYWwgOUUrOTk4IC0+IDAKK2Jvb2wxODIzIGlzc3Vibm9ybWFsIC05RSs5OTggLT4gMAorYm9vbDE4MjQgaXNzdWJub3JtYWwgOUUrOTk5IC0+IDAKK2Jvb2wxODI1IGlzc3Vibm9ybWFsIC05RSs5OTkgLT4gMAorYm9vbDE4MjYgaXNzdWJub3JtYWwgOUUrMTAwMCAtPiAwCitib29sMTgyNyBpc3N1Ym5vcm1hbCAtOUUrMTAwMCAtPiAwCitib29sMTgyOCBpc3N1Ym5vcm1hbCA5RSsyMDAwIC0+IDAKK2Jvb2wxODI5IGlzc3Vibm9ybWFsIC05RSsyMDAwIC0+IDAKK2Jvb2wxODMwIGlzc3Vibm9ybWFsIDkuOTk5OTk5OTlFLTIwMDAgLT4gMQorYm9vbDE4MzEgaXNzdWJub3JtYWwgLTkuOTk5OTk5OTlFLTIwMDAgLT4gMQorYm9vbDE4MzIgaXNzdWJub3JtYWwgOS45OTk5OTk5OUUtMTAwOCAtPiAxCitib29sMTgzMyBpc3N1Ym5vcm1hbCAtOS45OTk5OTk5OUUtMTAwOCAtPiAxCitib29sMTgzNCBpc3N1Ym5vcm1hbCA5Ljk5OTk5OTk5RS0xMDA3IC0+IDEKK2Jvb2wxODM1IGlzc3Vibm9ybWFsIC05Ljk5OTk5OTk5RS0xMDA3IC0+IDEKK2Jvb2wxODM2IGlzc3Vibm9ybWFsIDkuOTk5OTk5OTlFLTEwMDYgLT4gMQorYm9vbDE4MzcgaXNzdWJub3JtYWwgLTkuOTk5OTk5OTlFLTEwMDYgLT4gMQorYm9vbDE4MzggaXNzdWJub3JtYWwgOS45OTk5OTk5OUUtMTAwMCAtPiAxCitib29sMTgzOSBpc3N1Ym5vcm1hbCAtOS45OTk5OTk5OUUtMTAwMCAtPiAxCitib29sMTg0MCBpc3N1Ym5vcm1hbCA5Ljk5OTk5OTk5RS05OTkgLT4gMAorYm9vbDE4NDEgaXNzdWJub3JtYWwgLTkuOTk5OTk5OTlFLTk5OSAtPiAwCitib29sMTg0MiBpc3N1Ym5vcm1hbCA5Ljk5OTk5OTk5RS05OTggLT4gMAorYm9vbDE4NDMgaXNzdWJub3JtYWwgLTkuOTk5OTk5OTlFLTk5OCAtPiAwCitib29sMTg0NCBpc3N1Ym5vcm1hbCA5Ljk5OTk5OTk5RS0xMDAgLT4gMAorYm9vbDE4NDUgaXNzdWJub3JtYWwgLTkuOTk5OTk5OTlFLTEwMCAtPiAwCitib29sMTg0NiBpc3N1Ym5vcm1hbCAwLjAwMDAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wxODQ3IGlzc3Vibm9ybWFsIC0wLjAwMDAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wxODQ4IGlzc3Vibm9ybWFsIDAuMDA5OTk5OTk5OTkgLT4gMAorYm9vbDE4NDkgaXNzdWJub3JtYWwgLTAuMDA5OTk5OTk5OTkgLT4gMAorYm9vbDE4NTAgaXNzdWJub3JtYWwgMC4wOTk5OTk5OTk5IC0+IDAKK2Jvb2wxODUxIGlzc3Vibm9ybWFsIC0wLjA5OTk5OTk5OTkgLT4gMAorYm9vbDE4NTIgaXNzdWJub3JtYWwgMC45OTk5OTk5OTkgLT4gMAorYm9vbDE4NTMgaXNzdWJub3JtYWwgLTAuOTk5OTk5OTk5IC0+IDAKK2Jvb2wxODU0IGlzc3Vibm9ybWFsIDkuOTk5OTk5OTkgLT4gMAorYm9vbDE4NTUgaXNzdWJub3JtYWwgLTkuOTk5OTk5OTkgLT4gMAorYm9vbDE4NTYgaXNzdWJub3JtYWwgOTkuOTk5OTk5OSAtPiAwCitib29sMTg1NyBpc3N1Ym5vcm1hbCAtOTkuOTk5OTk5OSAtPiAwCitib29sMTg1OCBpc3N1Ym5vcm1hbCA5OTkuOTk5OTk5IC0+IDAKK2Jvb2wxODU5IGlzc3Vibm9ybWFsIC05OTkuOTk5OTk5IC0+IDAKK2Jvb2wxODYwIGlzc3Vibm9ybWFsIDk5OTkuOTk5OTkgLT4gMAorYm9vbDE4NjEgaXNzdWJub3JtYWwgLTk5OTkuOTk5OTkgLT4gMAorYm9vbDE4NjIgaXNzdWJub3JtYWwgOTk5OTk5OS45OSAtPiAwCitib29sMTg2MyBpc3N1Ym5vcm1hbCAtOTk5OTk5OS45OSAtPiAwCitib29sMTg2NCBpc3N1Ym5vcm1hbCA5Ljk5OTk5OTk5RSsxMDAgLT4gMAorYm9vbDE4NjUgaXNzdWJub3JtYWwgLTkuOTk5OTk5OTlFKzEwMCAtPiAwCitib29sMTg2NiBpc3N1Ym5vcm1hbCA5Ljk5OTk5OTk5RSs5OTAgLT4gMAorYm9vbDE4NjcgaXNzdWJub3JtYWwgLTkuOTk5OTk5OTlFKzk5MCAtPiAwCitib29sMTg2OCBpc3N1Ym5vcm1hbCA5Ljk5OTk5OTk5RSs5OTEgLT4gMAorYm9vbDE4NjkgaXNzdWJub3JtYWwgLTkuOTk5OTk5OTlFKzk5MSAtPiAwCitib29sMTg3MCBpc3N1Ym5vcm1hbCA5Ljk5OTk5OTk5RSs5OTIgLT4gMAorYm9vbDE4NzEgaXNzdWJub3JtYWwgLTkuOTk5OTk5OTlFKzk5MiAtPiAwCitib29sMTg3MiBpc3N1Ym5vcm1hbCA5Ljk5OTk5OTk5RSs5OTggLT4gMAorYm9vbDE4NzMgaXNzdWJub3JtYWwgLTkuOTk5OTk5OTlFKzk5OCAtPiAwCitib29sMTg3NCBpc3N1Ym5vcm1hbCA5Ljk5OTk5OTk5RSs5OTkgLT4gMAorYm9vbDE4NzUgaXNzdWJub3JtYWwgLTkuOTk5OTk5OTlFKzk5OSAtPiAwCitib29sMTg3NiBpc3N1Ym5vcm1hbCA5Ljk5OTk5OTk5RSsxMDAwIC0+IDAKK2Jvb2wxODc3IGlzc3Vibm9ybWFsIC05Ljk5OTk5OTk5RSsxMDAwIC0+IDAKK2Jvb2wxODc4IGlzc3Vibm9ybWFsIDkuOTk5OTk5OTlFKzIwMDAgLT4gMAorYm9vbDE4NzkgaXNzdWJub3JtYWwgLTkuOTk5OTk5OTlFKzIwMDAgLT4gMAorYm9vbDE4ODAgaXNzdWJub3JtYWwgSW5maW5pdHkgLT4gMAorYm9vbDE4ODEgaXNzdWJub3JtYWwgLUluZmluaXR5IC0+IDAKK2Jvb2wxODgyIGlzc3Vibm9ybWFsIE5hTiAtPiAwCitib29sMTg4MyBpc3N1Ym5vcm1hbCAtTmFOIC0+IDAKK2Jvb2wxODg0IGlzc3Vibm9ybWFsIE5hTjEyMyAtPiAwCitib29sMTg4NSBpc3N1Ym5vcm1hbCAtTmFOMTIzIC0+IDAKK2Jvb2wxODg2IGlzc3Vibm9ybWFsIHNOYU4gLT4gMAorYm9vbDE4ODcgaXNzdWJub3JtYWwgLXNOYU4gLT4gMAorYm9vbDE4ODggaXNzdWJub3JtYWwgc05hTjEyMyAtPiAwCitib29sMTg4OSBpc3N1Ym5vcm1hbCAtc05hTjEyMyAtPiAwCitib29sMTg5MCBpc3plcm8gMEUtMjAwMCAtPiAxCitib29sMTg5MSBpc3plcm8gLTBFLTIwMDAgLT4gMQorYm9vbDE4OTIgaXN6ZXJvIDBFLTEwMDggLT4gMQorYm9vbDE4OTMgaXN6ZXJvIC0wRS0xMDA4IC0+IDEKK2Jvb2wxODk0IGlzemVybyAwRS0xMDA3IC0+IDEKK2Jvb2wxODk1IGlzemVybyAtMEUtMTAwNyAtPiAxCitib29sMTg5NiBpc3plcm8gMEUtMTAwNiAtPiAxCitib29sMTg5NyBpc3plcm8gLTBFLTEwMDYgLT4gMQorYm9vbDE4OTggaXN6ZXJvIDBFLTEwMDAgLT4gMQorYm9vbDE4OTkgaXN6ZXJvIC0wRS0xMDAwIC0+IDEKK2Jvb2wxOTAwIGlzemVybyAwRS05OTkgLT4gMQorYm9vbDE5MDEgaXN6ZXJvIC0wRS05OTkgLT4gMQorYm9vbDE5MDIgaXN6ZXJvIDBFLTk5OCAtPiAxCitib29sMTkwMyBpc3plcm8gLTBFLTk5OCAtPiAxCitib29sMTkwNCBpc3plcm8gMEUtMTAwIC0+IDEKK2Jvb2wxOTA1IGlzemVybyAtMEUtMTAwIC0+IDEKK2Jvb2wxOTA2IGlzemVybyAwLjAwMDAwMCAtPiAxCitib29sMTkwNyBpc3plcm8gLTAuMDAwMDAwIC0+IDEKK2Jvb2wxOTA4IGlzemVybyAwLjAwMCAtPiAxCitib29sMTkwOSBpc3plcm8gLTAuMDAwIC0+IDEKK2Jvb2wxOTEwIGlzemVybyAwLjAwIC0+IDEKK2Jvb2wxOTExIGlzemVybyAtMC4wMCAtPiAxCitib29sMTkxMiBpc3plcm8gMC4wIC0+IDEKK2Jvb2wxOTEzIGlzemVybyAtMC4wIC0+IDEKK2Jvb2wxOTE0IGlzemVybyAwIC0+IDEKK2Jvb2wxOTE1IGlzemVybyAtMCAtPiAxCitib29sMTkxNiBpc3plcm8gMEUrMSAtPiAxCitib29sMTkxNyBpc3plcm8gLTBFKzEgLT4gMQorYm9vbDE5MTggaXN6ZXJvIDBFKzIgLT4gMQorYm9vbDE5MTkgaXN6ZXJvIC0wRSsyIC0+IDEKK2Jvb2wxOTIwIGlzemVybyAwRSszIC0+IDEKK2Jvb2wxOTIxIGlzemVybyAtMEUrMyAtPiAxCitib29sMTkyMiBpc3plcm8gMEUrNiAtPiAxCitib29sMTkyMyBpc3plcm8gLTBFKzYgLT4gMQorYm9vbDE5MjQgaXN6ZXJvIDBFKzEwMCAtPiAxCitib29sMTkyNSBpc3plcm8gLTBFKzEwMCAtPiAxCitib29sMTkyNiBpc3plcm8gMEUrOTkwIC0+IDEKK2Jvb2wxOTI3IGlzemVybyAtMEUrOTkwIC0+IDEKK2Jvb2wxOTI4IGlzemVybyAwRSs5OTEgLT4gMQorYm9vbDE5MjkgaXN6ZXJvIC0wRSs5OTEgLT4gMQorYm9vbDE5MzAgaXN6ZXJvIDBFKzk5MiAtPiAxCitib29sMTkzMSBpc3plcm8gLTBFKzk5MiAtPiAxCitib29sMTkzMiBpc3plcm8gMEUrOTk4IC0+IDEKK2Jvb2wxOTMzIGlzemVybyAtMEUrOTk4IC0+IDEKK2Jvb2wxOTM0IGlzemVybyAwRSs5OTkgLT4gMQorYm9vbDE5MzUgaXN6ZXJvIC0wRSs5OTkgLT4gMQorYm9vbDE5MzYgaXN6ZXJvIDBFKzEwMDAgLT4gMQorYm9vbDE5MzcgaXN6ZXJvIC0wRSsxMDAwIC0+IDEKK2Jvb2wxOTM4IGlzemVybyAwRSsyMDAwIC0+IDEKK2Jvb2wxOTM5IGlzemVybyAtMEUrMjAwMCAtPiAxCitib29sMTk0MCBpc3plcm8gMUUtMjAwMCAtPiAwCitib29sMTk0MSBpc3plcm8gLTFFLTIwMDAgLT4gMAorYm9vbDE5NDIgaXN6ZXJvIDFFLTEwMDggLT4gMAorYm9vbDE5NDMgaXN6ZXJvIC0xRS0xMDA4IC0+IDAKK2Jvb2wxOTQ0IGlzemVybyAxRS0xMDA3IC0+IDAKK2Jvb2wxOTQ1IGlzemVybyAtMUUtMTAwNyAtPiAwCitib29sMTk0NiBpc3plcm8gMUUtMTAwNiAtPiAwCitib29sMTk0NyBpc3plcm8gLTFFLTEwMDYgLT4gMAorYm9vbDE5NDggaXN6ZXJvIDFFLTEwMDAgLT4gMAorYm9vbDE5NDkgaXN6ZXJvIC0xRS0xMDAwIC0+IDAKK2Jvb2wxOTUwIGlzemVybyAxRS05OTkgLT4gMAorYm9vbDE5NTEgaXN6ZXJvIC0xRS05OTkgLT4gMAorYm9vbDE5NTIgaXN6ZXJvIDFFLTk5OCAtPiAwCitib29sMTk1MyBpc3plcm8gLTFFLTk5OCAtPiAwCitib29sMTk1NCBpc3plcm8gMUUtMTAwIC0+IDAKK2Jvb2wxOTU1IGlzemVybyAtMUUtMTAwIC0+IDAKK2Jvb2wxOTU2IGlzemVybyAwLjAwMDAwMSAtPiAwCitib29sMTk1NyBpc3plcm8gLTAuMDAwMDAxIC0+IDAKK2Jvb2wxOTU4IGlzemVybyAwLjAwMSAtPiAwCitib29sMTk1OSBpc3plcm8gLTAuMDAxIC0+IDAKK2Jvb2wxOTYwIGlzemVybyAwLjAxIC0+IDAKK2Jvb2wxOTYxIGlzemVybyAtMC4wMSAtPiAwCitib29sMTk2MiBpc3plcm8gMC4xIC0+IDAKK2Jvb2wxOTYzIGlzemVybyAtMC4xIC0+IDAKK2Jvb2wxOTY0IGlzemVybyAxIC0+IDAKK2Jvb2wxOTY1IGlzemVybyAtMSAtPiAwCitib29sMTk2NiBpc3plcm8gMUUrMSAtPiAwCitib29sMTk2NyBpc3plcm8gLTFFKzEgLT4gMAorYm9vbDE5NjggaXN6ZXJvIDFFKzIgLT4gMAorYm9vbDE5NjkgaXN6ZXJvIC0xRSsyIC0+IDAKK2Jvb2wxOTcwIGlzemVybyAxRSszIC0+IDAKK2Jvb2wxOTcxIGlzemVybyAtMUUrMyAtPiAwCitib29sMTk3MiBpc3plcm8gMUUrNiAtPiAwCitib29sMTk3MyBpc3plcm8gLTFFKzYgLT4gMAorYm9vbDE5NzQgaXN6ZXJvIDFFKzEwMCAtPiAwCitib29sMTk3NSBpc3plcm8gLTFFKzEwMCAtPiAwCitib29sMTk3NiBpc3plcm8gMUUrOTkwIC0+IDAKK2Jvb2wxOTc3IGlzemVybyAtMUUrOTkwIC0+IDAKK2Jvb2wxOTc4IGlzemVybyAxRSs5OTEgLT4gMAorYm9vbDE5NzkgaXN6ZXJvIC0xRSs5OTEgLT4gMAorYm9vbDE5ODAgaXN6ZXJvIDFFKzk5MiAtPiAwCitib29sMTk4MSBpc3plcm8gLTFFKzk5MiAtPiAwCitib29sMTk4MiBpc3plcm8gMUUrOTk4IC0+IDAKK2Jvb2wxOTgzIGlzemVybyAtMUUrOTk4IC0+IDAKK2Jvb2wxOTg0IGlzemVybyAxRSs5OTkgLT4gMAorYm9vbDE5ODUgaXN6ZXJvIC0xRSs5OTkgLT4gMAorYm9vbDE5ODYgaXN6ZXJvIDFFKzEwMDAgLT4gMAorYm9vbDE5ODcgaXN6ZXJvIC0xRSsxMDAwIC0+IDAKK2Jvb2wxOTg4IGlzemVybyAxRSsyMDAwIC0+IDAKK2Jvb2wxOTg5IGlzemVybyAtMUUrMjAwMCAtPiAwCitib29sMTk5MCBpc3plcm8gOUUtMjAwMCAtPiAwCitib29sMTk5MSBpc3plcm8gLTlFLTIwMDAgLT4gMAorYm9vbDE5OTIgaXN6ZXJvIDlFLTEwMDggLT4gMAorYm9vbDE5OTMgaXN6ZXJvIC05RS0xMDA4IC0+IDAKK2Jvb2wxOTk0IGlzemVybyA5RS0xMDA3IC0+IDAKK2Jvb2wxOTk1IGlzemVybyAtOUUtMTAwNyAtPiAwCitib29sMTk5NiBpc3plcm8gOUUtMTAwNiAtPiAwCitib29sMTk5NyBpc3plcm8gLTlFLTEwMDYgLT4gMAorYm9vbDE5OTggaXN6ZXJvIDlFLTEwMDAgLT4gMAorYm9vbDE5OTkgaXN6ZXJvIC05RS0xMDAwIC0+IDAKK2Jvb2wyMDAwIGlzemVybyA5RS05OTkgLT4gMAorYm9vbDIwMDEgaXN6ZXJvIC05RS05OTkgLT4gMAorYm9vbDIwMDIgaXN6ZXJvIDlFLTk5OCAtPiAwCitib29sMjAwMyBpc3plcm8gLTlFLTk5OCAtPiAwCitib29sMjAwNCBpc3plcm8gOUUtMTAwIC0+IDAKK2Jvb2wyMDA1IGlzemVybyAtOUUtMTAwIC0+IDAKK2Jvb2wyMDA2IGlzemVybyAwLjAwMDAwOSAtPiAwCitib29sMjAwNyBpc3plcm8gLTAuMDAwMDA5IC0+IDAKK2Jvb2wyMDA4IGlzemVybyAwLjAwOSAtPiAwCitib29sMjAwOSBpc3plcm8gLTAuMDA5IC0+IDAKK2Jvb2wyMDEwIGlzemVybyAwLjA5IC0+IDAKK2Jvb2wyMDExIGlzemVybyAtMC4wOSAtPiAwCitib29sMjAxMiBpc3plcm8gMC45IC0+IDAKK2Jvb2wyMDEzIGlzemVybyAtMC45IC0+IDAKK2Jvb2wyMDE0IGlzemVybyA5IC0+IDAKK2Jvb2wyMDE1IGlzemVybyAtOSAtPiAwCitib29sMjAxNiBpc3plcm8gOUUrMSAtPiAwCitib29sMjAxNyBpc3plcm8gLTlFKzEgLT4gMAorYm9vbDIwMTggaXN6ZXJvIDlFKzIgLT4gMAorYm9vbDIwMTkgaXN6ZXJvIC05RSsyIC0+IDAKK2Jvb2wyMDIwIGlzemVybyA5RSszIC0+IDAKK2Jvb2wyMDIxIGlzemVybyAtOUUrMyAtPiAwCitib29sMjAyMiBpc3plcm8gOUUrNiAtPiAwCitib29sMjAyMyBpc3plcm8gLTlFKzYgLT4gMAorYm9vbDIwMjQgaXN6ZXJvIDlFKzEwMCAtPiAwCitib29sMjAyNSBpc3plcm8gLTlFKzEwMCAtPiAwCitib29sMjAyNiBpc3plcm8gOUUrOTkwIC0+IDAKK2Jvb2wyMDI3IGlzemVybyAtOUUrOTkwIC0+IDAKK2Jvb2wyMDI4IGlzemVybyA5RSs5OTEgLT4gMAorYm9vbDIwMjkgaXN6ZXJvIC05RSs5OTEgLT4gMAorYm9vbDIwMzAgaXN6ZXJvIDlFKzk5MiAtPiAwCitib29sMjAzMSBpc3plcm8gLTlFKzk5MiAtPiAwCitib29sMjAzMiBpc3plcm8gOUUrOTk4IC0+IDAKK2Jvb2wyMDMzIGlzemVybyAtOUUrOTk4IC0+IDAKK2Jvb2wyMDM0IGlzemVybyA5RSs5OTkgLT4gMAorYm9vbDIwMzUgaXN6ZXJvIC05RSs5OTkgLT4gMAorYm9vbDIwMzYgaXN6ZXJvIDlFKzEwMDAgLT4gMAorYm9vbDIwMzcgaXN6ZXJvIC05RSsxMDAwIC0+IDAKK2Jvb2wyMDM4IGlzemVybyA5RSsyMDAwIC0+IDAKK2Jvb2wyMDM5IGlzemVybyAtOUUrMjAwMCAtPiAwCitib29sMjA0MCBpc3plcm8gOS45OTk5OTk5OUUtMjAwMCAtPiAwCitib29sMjA0MSBpc3plcm8gLTkuOTk5OTk5OTlFLTIwMDAgLT4gMAorYm9vbDIwNDIgaXN6ZXJvIDkuOTk5OTk5OTlFLTEwMDggLT4gMAorYm9vbDIwNDMgaXN6ZXJvIC05Ljk5OTk5OTk5RS0xMDA4IC0+IDAKK2Jvb2wyMDQ0IGlzemVybyA5Ljk5OTk5OTk5RS0xMDA3IC0+IDAKK2Jvb2wyMDQ1IGlzemVybyAtOS45OTk5OTk5OUUtMTAwNyAtPiAwCitib29sMjA0NiBpc3plcm8gOS45OTk5OTk5OUUtMTAwNiAtPiAwCitib29sMjA0NyBpc3plcm8gLTkuOTk5OTk5OTlFLTEwMDYgLT4gMAorYm9vbDIwNDggaXN6ZXJvIDkuOTk5OTk5OTlFLTEwMDAgLT4gMAorYm9vbDIwNDkgaXN6ZXJvIC05Ljk5OTk5OTk5RS0xMDAwIC0+IDAKK2Jvb2wyMDUwIGlzemVybyA5Ljk5OTk5OTk5RS05OTkgLT4gMAorYm9vbDIwNTEgaXN6ZXJvIC05Ljk5OTk5OTk5RS05OTkgLT4gMAorYm9vbDIwNTIgaXN6ZXJvIDkuOTk5OTk5OTlFLTk5OCAtPiAwCitib29sMjA1MyBpc3plcm8gLTkuOTk5OTk5OTlFLTk5OCAtPiAwCitib29sMjA1NCBpc3plcm8gOS45OTk5OTk5OUUtMTAwIC0+IDAKK2Jvb2wyMDU1IGlzemVybyAtOS45OTk5OTk5OUUtMTAwIC0+IDAKK2Jvb2wyMDU2IGlzemVybyAwLjAwMDAwOTk5OTk5OTk5IC0+IDAKK2Jvb2wyMDU3IGlzemVybyAtMC4wMDAwMDk5OTk5OTk5OSAtPiAwCitib29sMjA1OCBpc3plcm8gMC4wMDk5OTk5OTk5OSAtPiAwCitib29sMjA1OSBpc3plcm8gLTAuMDA5OTk5OTk5OTkgLT4gMAorYm9vbDIwNjAgaXN6ZXJvIDAuMDk5OTk5OTk5OSAtPiAwCitib29sMjA2MSBpc3plcm8gLTAuMDk5OTk5OTk5OSAtPiAwCitib29sMjA2MiBpc3plcm8gMC45OTk5OTk5OTkgLT4gMAorYm9vbDIwNjMgaXN6ZXJvIC0wLjk5OTk5OTk5OSAtPiAwCitib29sMjA2NCBpc3plcm8gOS45OTk5OTk5OSAtPiAwCitib29sMjA2NSBpc3plcm8gLTkuOTk5OTk5OTkgLT4gMAorYm9vbDIwNjYgaXN6ZXJvIDk5Ljk5OTk5OTkgLT4gMAorYm9vbDIwNjcgaXN6ZXJvIC05OS45OTk5OTk5IC0+IDAKK2Jvb2wyMDY4IGlzemVybyA5OTkuOTk5OTk5IC0+IDAKK2Jvb2wyMDY5IGlzemVybyAtOTk5Ljk5OTk5OSAtPiAwCitib29sMjA3MCBpc3plcm8gOTk5OS45OTk5OSAtPiAwCitib29sMjA3MSBpc3plcm8gLTk5OTkuOTk5OTkgLT4gMAorYm9vbDIwNzIgaXN6ZXJvIDk5OTk5OTkuOTkgLT4gMAorYm9vbDIwNzMgaXN6ZXJvIC05OTk5OTk5Ljk5IC0+IDAKK2Jvb2wyMDc0IGlzemVybyA5Ljk5OTk5OTk5RSsxMDAgLT4gMAorYm9vbDIwNzUgaXN6ZXJvIC05Ljk5OTk5OTk5RSsxMDAgLT4gMAorYm9vbDIwNzYgaXN6ZXJvIDkuOTk5OTk5OTlFKzk5MCAtPiAwCitib29sMjA3NyBpc3plcm8gLTkuOTk5OTk5OTlFKzk5MCAtPiAwCitib29sMjA3OCBpc3plcm8gOS45OTk5OTk5OUUrOTkxIC0+IDAKK2Jvb2wyMDc5IGlzemVybyAtOS45OTk5OTk5OUUrOTkxIC0+IDAKK2Jvb2wyMDgwIGlzemVybyA5Ljk5OTk5OTk5RSs5OTIgLT4gMAorYm9vbDIwODEgaXN6ZXJvIC05Ljk5OTk5OTk5RSs5OTIgLT4gMAorYm9vbDIwODIgaXN6ZXJvIDkuOTk5OTk5OTlFKzk5OCAtPiAwCitib29sMjA4MyBpc3plcm8gLTkuOTk5OTk5OTlFKzk5OCAtPiAwCitib29sMjA4NCBpc3plcm8gOS45OTk5OTk5OUUrOTk5IC0+IDAKK2Jvb2wyMDg1IGlzemVybyAtOS45OTk5OTk5OUUrOTk5IC0+IDAKK2Jvb2wyMDg2IGlzemVybyA5Ljk5OTk5OTk5RSsxMDAwIC0+IDAKK2Jvb2wyMDg3IGlzemVybyAtOS45OTk5OTk5OUUrMTAwMCAtPiAwCitib29sMjA4OCBpc3plcm8gOS45OTk5OTk5OUUrMjAwMCAtPiAwCitib29sMjA4OSBpc3plcm8gLTkuOTk5OTk5OTlFKzIwMDAgLT4gMAorYm9vbDIwOTAgaXN6ZXJvIEluZmluaXR5IC0+IDAKK2Jvb2wyMDkxIGlzemVybyAtSW5maW5pdHkgLT4gMAorYm9vbDIwOTIgaXN6ZXJvIE5hTiAtPiAwCitib29sMjA5MyBpc3plcm8gLU5hTiAtPiAwCitib29sMjA5NCBpc3plcm8gTmFOMTIzIC0+IDAKK2Jvb2wyMDk1IGlzemVybyAtTmFOMTIzIC0+IDAKK2Jvb2wyMDk2IGlzemVybyBzTmFOIC0+IDAKK2Jvb2wyMDk3IGlzemVybyAtc05hTiAtPiAwCitib29sMjA5OCBpc3plcm8gc05hTjEyMyAtPiAwCitib29sMjA5OSBpc3plcm8gLXNOYU4xMjMgLT4gMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFRoZSBmb2xsb3dpbmcgdGVzdHMgKHB3bXgwIHRocm91Z2ggcHdteDQ0MCkgYXJlIGZvciB0aGUgICAgICAgICAgICAtLQorLS0gdGhyZWUtYXJndW1lbnQgdmVyc2lvbiBvZiBwb3dlcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgcG93KHgsIHksIHopIDo9IHgqKnkgJSB6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBOb3RlIHRoYXQgdGhlIHRocmVlLWFyZ3VtZW50IHZlcnNpb24gb2YgcG93ZXIgaXMgKm5vdCogcGFydCBvZiAgICAgLS0KKy0tIHRoZSBJQk0gR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgc3BlY2lmaWNhdGlvbi4gIFF1ZXN0aW9ucyAgICAgICAtLQorLS0gYWJvdXQgaXQsIG9yIGFib3V0IHRoZXNlIHRlc3RjYXNlcywgc2hvdWxkIGdvIHRvIG9uZSBvZiB0aGUgICAgICAgIC0tCistLSBQeXRob24gZGVjaW1hbCBhdXRob3JzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitleHRlbmRlZDogMQorcHJlY2lzaW9uOiA5Cityb3VuZGluZzogZG93bgorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworLS0gU21hbGwgbnVtYmVycworLS0gTm90ZSB0aGF0IHBvd2VyKDAsIDAsIG0pIGlzIGFuIGVycm9yIGZvciBhbnkgbQorcHdteDAgcG93ZXIgMCAtMCAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDEgcG93ZXIgMCAtMCAyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDIgcG93ZXIgMCAtMCAzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDMgcG93ZXIgMCAtMCA0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDQgcG93ZXIgMCAtMCAtMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXg1IHBvd2VyIDAgLTAgLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214NiBwb3dlciAwIDAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXg3IHBvd2VyIDAgMCAyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDggcG93ZXIgMCAwIDMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214OSBwb3dlciAwIDAgNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXgxMCBwb3dlciAwIDAgLTEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MTEgcG93ZXIgMCAwIC0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDEyIHBvd2VyIDAgMSAxIC0+IDAKK3B3bXgxMyBwb3dlciAwIDEgMiAtPiAwCitwd214MTQgcG93ZXIgMCAxIDMgLT4gMAorcHdteDE1IHBvd2VyIDAgMSA0IC0+IDAKK3B3bXgxNiBwb3dlciAwIDEgLTEgLT4gMAorcHdteDE3IHBvd2VyIDAgMSAtMiAtPiAwCitwd214MTggcG93ZXIgMCAyIDEgLT4gMAorcHdteDE5IHBvd2VyIDAgMiAyIC0+IDAKK3B3bXgyMCBwb3dlciAwIDIgMyAtPiAwCitwd214MjEgcG93ZXIgMCAyIDQgLT4gMAorcHdteDIyIHBvd2VyIDAgMiAtMSAtPiAwCitwd214MjMgcG93ZXIgMCAyIC0yIC0+IDAKK3B3bXgyNCBwb3dlciAwIDMgMSAtPiAwCitwd214MjUgcG93ZXIgMCAzIDIgLT4gMAorcHdteDI2IHBvd2VyIDAgMyAzIC0+IDAKK3B3bXgyNyBwb3dlciAwIDMgNCAtPiAwCitwd214MjggcG93ZXIgMCAzIC0xIC0+IDAKK3B3bXgyOSBwb3dlciAwIDMgLTIgLT4gMAorcHdteDMwIHBvd2VyIDAgNCAxIC0+IDAKK3B3bXgzMSBwb3dlciAwIDQgMiAtPiAwCitwd214MzIgcG93ZXIgMCA0IDMgLT4gMAorcHdteDMzIHBvd2VyIDAgNCA0IC0+IDAKK3B3bXgzNCBwb3dlciAwIDQgLTEgLT4gMAorcHdteDM1IHBvd2VyIDAgNCAtMiAtPiAwCitwd214MzYgcG93ZXIgMCA1IDEgLT4gMAorcHdteDM3IHBvd2VyIDAgNSAyIC0+IDAKK3B3bXgzOCBwb3dlciAwIDUgMyAtPiAwCitwd214MzkgcG93ZXIgMCA1IDQgLT4gMAorcHdteDQwIHBvd2VyIDAgNSAtMSAtPiAwCitwd214NDEgcG93ZXIgMCA1IC0yIC0+IDAKK3B3bXg0MiBwb3dlciAxIC0wIDEgLT4gMAorcHdteDQzIHBvd2VyIDEgLTAgMiAtPiAxCitwd214NDQgcG93ZXIgMSAtMCAzIC0+IDEKK3B3bXg0NSBwb3dlciAxIC0wIDQgLT4gMQorcHdteDQ2IHBvd2VyIDEgLTAgLTEgLT4gMAorcHdteDQ3IHBvd2VyIDEgLTAgLTIgLT4gMQorcHdteDQ4IHBvd2VyIDEgMCAxIC0+IDAKK3B3bXg0OSBwb3dlciAxIDAgMiAtPiAxCitwd214NTAgcG93ZXIgMSAwIDMgLT4gMQorcHdteDUxIHBvd2VyIDEgMCA0IC0+IDEKK3B3bXg1MiBwb3dlciAxIDAgLTEgLT4gMAorcHdteDUzIHBvd2VyIDEgMCAtMiAtPiAxCitwd214NTQgcG93ZXIgMSAxIDEgLT4gMAorcHdteDU1IHBvd2VyIDEgMSAyIC0+IDEKK3B3bXg1NiBwb3dlciAxIDEgMyAtPiAxCitwd214NTcgcG93ZXIgMSAxIDQgLT4gMQorcHdteDU4IHBvd2VyIDEgMSAtMSAtPiAwCitwd214NTkgcG93ZXIgMSAxIC0yIC0+IDEKK3B3bXg2MCBwb3dlciAxIDIgMSAtPiAwCitwd214NjEgcG93ZXIgMSAyIDIgLT4gMQorcHdteDYyIHBvd2VyIDEgMiAzIC0+IDEKK3B3bXg2MyBwb3dlciAxIDIgNCAtPiAxCitwd214NjQgcG93ZXIgMSAyIC0xIC0+IDAKK3B3bXg2NSBwb3dlciAxIDIgLTIgLT4gMQorcHdteDY2IHBvd2VyIDEgMyAxIC0+IDAKK3B3bXg2NyBwb3dlciAxIDMgMiAtPiAxCitwd214NjggcG93ZXIgMSAzIDMgLT4gMQorcHdteDY5IHBvd2VyIDEgMyA0IC0+IDEKK3B3bXg3MCBwb3dlciAxIDMgLTEgLT4gMAorcHdteDcxIHBvd2VyIDEgMyAtMiAtPiAxCitwd214NzIgcG93ZXIgMSA0IDEgLT4gMAorcHdteDczIHBvd2VyIDEgNCAyIC0+IDEKK3B3bXg3NCBwb3dlciAxIDQgMyAtPiAxCitwd214NzUgcG93ZXIgMSA0IDQgLT4gMQorcHdteDc2IHBvd2VyIDEgNCAtMSAtPiAwCitwd214NzcgcG93ZXIgMSA0IC0yIC0+IDEKK3B3bXg3OCBwb3dlciAxIDUgMSAtPiAwCitwd214NzkgcG93ZXIgMSA1IDIgLT4gMQorcHdteDgwIHBvd2VyIDEgNSAzIC0+IDEKK3B3bXg4MSBwb3dlciAxIDUgNCAtPiAxCitwd214ODIgcG93ZXIgMSA1IC0xIC0+IDAKK3B3bXg4MyBwb3dlciAxIDUgLTIgLT4gMQorcHdteDg0IHBvd2VyIDIgLTAgMSAtPiAwCitwd214ODUgcG93ZXIgMiAtMCAyIC0+IDEKK3B3bXg4NiBwb3dlciAyIC0wIDMgLT4gMQorcHdteDg3IHBvd2VyIDIgLTAgNCAtPiAxCitwd214ODggcG93ZXIgMiAtMCAtMSAtPiAwCitwd214ODkgcG93ZXIgMiAtMCAtMiAtPiAxCitwd214OTAgcG93ZXIgMiAwIDEgLT4gMAorcHdteDkxIHBvd2VyIDIgMCAyIC0+IDEKK3B3bXg5MiBwb3dlciAyIDAgMyAtPiAxCitwd214OTMgcG93ZXIgMiAwIDQgLT4gMQorcHdteDk0IHBvd2VyIDIgMCAtMSAtPiAwCitwd214OTUgcG93ZXIgMiAwIC0yIC0+IDEKK3B3bXg5NiBwb3dlciAyIDEgMSAtPiAwCitwd214OTcgcG93ZXIgMiAxIDIgLT4gMAorcHdteDk4IHBvd2VyIDIgMSAzIC0+IDIKK3B3bXg5OSBwb3dlciAyIDEgNCAtPiAyCitwd214MTAwIHBvd2VyIDIgMSAtMSAtPiAwCitwd214MTAxIHBvd2VyIDIgMSAtMiAtPiAwCitwd214MTAyIHBvd2VyIDIgMiAxIC0+IDAKK3B3bXgxMDMgcG93ZXIgMiAyIDIgLT4gMAorcHdteDEwNCBwb3dlciAyIDIgMyAtPiAxCitwd214MTA1IHBvd2VyIDIgMiA0IC0+IDAKK3B3bXgxMDYgcG93ZXIgMiAyIC0xIC0+IDAKK3B3bXgxMDcgcG93ZXIgMiAyIC0yIC0+IDAKK3B3bXgxMDggcG93ZXIgMiAzIDEgLT4gMAorcHdteDEwOSBwb3dlciAyIDMgMiAtPiAwCitwd214MTEwIHBvd2VyIDIgMyAzIC0+IDIKK3B3bXgxMTEgcG93ZXIgMiAzIDQgLT4gMAorcHdteDExMiBwb3dlciAyIDMgLTEgLT4gMAorcHdteDExMyBwb3dlciAyIDMgLTIgLT4gMAorcHdteDExNCBwb3dlciAyIDQgMSAtPiAwCitwd214MTE1IHBvd2VyIDIgNCAyIC0+IDAKK3B3bXgxMTYgcG93ZXIgMiA0IDMgLT4gMQorcHdteDExNyBwb3dlciAyIDQgNCAtPiAwCitwd214MTE4IHBvd2VyIDIgNCAtMSAtPiAwCitwd214MTE5IHBvd2VyIDIgNCAtMiAtPiAwCitwd214MTIwIHBvd2VyIDIgNSAxIC0+IDAKK3B3bXgxMjEgcG93ZXIgMiA1IDIgLT4gMAorcHdteDEyMiBwb3dlciAyIDUgMyAtPiAyCitwd214MTIzIHBvd2VyIDIgNSA0IC0+IDAKK3B3bXgxMjQgcG93ZXIgMiA1IC0xIC0+IDAKK3B3bXgxMjUgcG93ZXIgMiA1IC0yIC0+IDAKK3B3bXgxMjYgcG93ZXIgMyAtMCAxIC0+IDAKK3B3bXgxMjcgcG93ZXIgMyAtMCAyIC0+IDEKK3B3bXgxMjggcG93ZXIgMyAtMCAzIC0+IDEKK3B3bXgxMjkgcG93ZXIgMyAtMCA0IC0+IDEKK3B3bXgxMzAgcG93ZXIgMyAtMCAtMSAtPiAwCitwd214MTMxIHBvd2VyIDMgLTAgLTIgLT4gMQorcHdteDEzMiBwb3dlciAzIDAgMSAtPiAwCitwd214MTMzIHBvd2VyIDMgMCAyIC0+IDEKK3B3bXgxMzQgcG93ZXIgMyAwIDMgLT4gMQorcHdteDEzNSBwb3dlciAzIDAgNCAtPiAxCitwd214MTM2IHBvd2VyIDMgMCAtMSAtPiAwCitwd214MTM3IHBvd2VyIDMgMCAtMiAtPiAxCitwd214MTM4IHBvd2VyIDMgMSAxIC0+IDAKK3B3bXgxMzkgcG93ZXIgMyAxIDIgLT4gMQorcHdteDE0MCBwb3dlciAzIDEgMyAtPiAwCitwd214MTQxIHBvd2VyIDMgMSA0IC0+IDMKK3B3bXgxNDIgcG93ZXIgMyAxIC0xIC0+IDAKK3B3bXgxNDMgcG93ZXIgMyAxIC0yIC0+IDEKK3B3bXgxNDQgcG93ZXIgMyAyIDEgLT4gMAorcHdteDE0NSBwb3dlciAzIDIgMiAtPiAxCitwd214MTQ2IHBvd2VyIDMgMiAzIC0+IDAKK3B3bXgxNDcgcG93ZXIgMyAyIDQgLT4gMQorcHdteDE0OCBwb3dlciAzIDIgLTEgLT4gMAorcHdteDE0OSBwb3dlciAzIDIgLTIgLT4gMQorcHdteDE1MCBwb3dlciAzIDMgMSAtPiAwCitwd214MTUxIHBvd2VyIDMgMyAyIC0+IDEKK3B3bXgxNTIgcG93ZXIgMyAzIDMgLT4gMAorcHdteDE1MyBwb3dlciAzIDMgNCAtPiAzCitwd214MTU0IHBvd2VyIDMgMyAtMSAtPiAwCitwd214MTU1IHBvd2VyIDMgMyAtMiAtPiAxCitwd214MTU2IHBvd2VyIDMgNCAxIC0+IDAKK3B3bXgxNTcgcG93ZXIgMyA0IDIgLT4gMQorcHdteDE1OCBwb3dlciAzIDQgMyAtPiAwCitwd214MTU5IHBvd2VyIDMgNCA0IC0+IDEKK3B3bXgxNjAgcG93ZXIgMyA0IC0xIC0+IDAKK3B3bXgxNjEgcG93ZXIgMyA0IC0yIC0+IDEKK3B3bXgxNjIgcG93ZXIgMyA1IDEgLT4gMAorcHdteDE2MyBwb3dlciAzIDUgMiAtPiAxCitwd214MTY0IHBvd2VyIDMgNSAzIC0+IDAKK3B3bXgxNjUgcG93ZXIgMyA1IDQgLT4gMworcHdteDE2NiBwb3dlciAzIDUgLTEgLT4gMAorcHdteDE2NyBwb3dlciAzIDUgLTIgLT4gMQorcHdteDE2OCBwb3dlciAtMCAtMCAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDE2OSBwb3dlciAtMCAtMCAyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDE3MCBwb3dlciAtMCAtMCAzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDE3MSBwb3dlciAtMCAtMCA0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDE3MiBwb3dlciAtMCAtMCAtMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXgxNzMgcG93ZXIgLTAgLTAgLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MTc0IHBvd2VyIC0wIDAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXgxNzUgcG93ZXIgLTAgMCAyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDE3NiBwb3dlciAtMCAwIDMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MTc3IHBvd2VyIC0wIDAgNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXgxNzggcG93ZXIgLTAgMCAtMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXgxNzkgcG93ZXIgLTAgMCAtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXgxODAgcG93ZXIgLTAgMSAxIC0+IC0wCitwd214MTgxIHBvd2VyIC0wIDEgMiAtPiAtMAorcHdteDE4MiBwb3dlciAtMCAxIDMgLT4gLTAKK3B3bXgxODMgcG93ZXIgLTAgMSA0IC0+IC0wCitwd214MTg0IHBvd2VyIC0wIDEgLTEgLT4gLTAKK3B3bXgxODUgcG93ZXIgLTAgMSAtMiAtPiAtMAorcHdteDE4NiBwb3dlciAtMCAyIDEgLT4gMAorcHdteDE4NyBwb3dlciAtMCAyIDIgLT4gMAorcHdteDE4OCBwb3dlciAtMCAyIDMgLT4gMAorcHdteDE4OSBwb3dlciAtMCAyIDQgLT4gMAorcHdteDE5MCBwb3dlciAtMCAyIC0xIC0+IDAKK3B3bXgxOTEgcG93ZXIgLTAgMiAtMiAtPiAwCitwd214MTkyIHBvd2VyIC0wIDMgMSAtPiAtMAorcHdteDE5MyBwb3dlciAtMCAzIDIgLT4gLTAKK3B3bXgxOTQgcG93ZXIgLTAgMyAzIC0+IC0wCitwd214MTk1IHBvd2VyIC0wIDMgNCAtPiAtMAorcHdteDE5NiBwb3dlciAtMCAzIC0xIC0+IC0wCitwd214MTk3IHBvd2VyIC0wIDMgLTIgLT4gLTAKK3B3bXgxOTggcG93ZXIgLTAgNCAxIC0+IDAKK3B3bXgxOTkgcG93ZXIgLTAgNCAyIC0+IDAKK3B3bXgyMDAgcG93ZXIgLTAgNCAzIC0+IDAKK3B3bXgyMDEgcG93ZXIgLTAgNCA0IC0+IDAKK3B3bXgyMDIgcG93ZXIgLTAgNCAtMSAtPiAwCitwd214MjAzIHBvd2VyIC0wIDQgLTIgLT4gMAorcHdteDIwNCBwb3dlciAtMCA1IDEgLT4gLTAKK3B3bXgyMDUgcG93ZXIgLTAgNSAyIC0+IC0wCitwd214MjA2IHBvd2VyIC0wIDUgMyAtPiAtMAorcHdteDIwNyBwb3dlciAtMCA1IDQgLT4gLTAKK3B3bXgyMDggcG93ZXIgLTAgNSAtMSAtPiAtMAorcHdteDIwOSBwb3dlciAtMCA1IC0yIC0+IC0wCitwd214MjEwIHBvd2VyIC0xIC0wIDEgLT4gMAorcHdteDIxMSBwb3dlciAtMSAtMCAyIC0+IDEKK3B3bXgyMTIgcG93ZXIgLTEgLTAgMyAtPiAxCitwd214MjEzIHBvd2VyIC0xIC0wIDQgLT4gMQorcHdteDIxNCBwb3dlciAtMSAtMCAtMSAtPiAwCitwd214MjE1IHBvd2VyIC0xIC0wIC0yIC0+IDEKK3B3bXgyMTYgcG93ZXIgLTEgMCAxIC0+IDAKK3B3bXgyMTcgcG93ZXIgLTEgMCAyIC0+IDEKK3B3bXgyMTggcG93ZXIgLTEgMCAzIC0+IDEKK3B3bXgyMTkgcG93ZXIgLTEgMCA0IC0+IDEKK3B3bXgyMjAgcG93ZXIgLTEgMCAtMSAtPiAwCitwd214MjIxIHBvd2VyIC0xIDAgLTIgLT4gMQorcHdteDIyMiBwb3dlciAtMSAxIDEgLT4gLTAKK3B3bXgyMjMgcG93ZXIgLTEgMSAyIC0+IC0xCitwd214MjI0IHBvd2VyIC0xIDEgMyAtPiAtMQorcHdteDIyNSBwb3dlciAtMSAxIDQgLT4gLTEKK3B3bXgyMjYgcG93ZXIgLTEgMSAtMSAtPiAtMAorcHdteDIyNyBwb3dlciAtMSAxIC0yIC0+IC0xCitwd214MjI4IHBvd2VyIC0xIDIgMSAtPiAwCitwd214MjI5IHBvd2VyIC0xIDIgMiAtPiAxCitwd214MjMwIHBvd2VyIC0xIDIgMyAtPiAxCitwd214MjMxIHBvd2VyIC0xIDIgNCAtPiAxCitwd214MjMyIHBvd2VyIC0xIDIgLTEgLT4gMAorcHdteDIzMyBwb3dlciAtMSAyIC0yIC0+IDEKK3B3bXgyMzQgcG93ZXIgLTEgMyAxIC0+IC0wCitwd214MjM1IHBvd2VyIC0xIDMgMiAtPiAtMQorcHdteDIzNiBwb3dlciAtMSAzIDMgLT4gLTEKK3B3bXgyMzcgcG93ZXIgLTEgMyA0IC0+IC0xCitwd214MjM4IHBvd2VyIC0xIDMgLTEgLT4gLTAKK3B3bXgyMzkgcG93ZXIgLTEgMyAtMiAtPiAtMQorcHdteDI0MCBwb3dlciAtMSA0IDEgLT4gMAorcHdteDI0MSBwb3dlciAtMSA0IDIgLT4gMQorcHdteDI0MiBwb3dlciAtMSA0IDMgLT4gMQorcHdteDI0MyBwb3dlciAtMSA0IDQgLT4gMQorcHdteDI0NCBwb3dlciAtMSA0IC0xIC0+IDAKK3B3bXgyNDUgcG93ZXIgLTEgNCAtMiAtPiAxCitwd214MjQ2IHBvd2VyIC0xIDUgMSAtPiAtMAorcHdteDI0NyBwb3dlciAtMSA1IDIgLT4gLTEKK3B3bXgyNDggcG93ZXIgLTEgNSAzIC0+IC0xCitwd214MjQ5IHBvd2VyIC0xIDUgNCAtPiAtMQorcHdteDI1MCBwb3dlciAtMSA1IC0xIC0+IC0wCitwd214MjUxIHBvd2VyIC0xIDUgLTIgLT4gLTEKKworLS0gUmFuZG9tbHkgY2hvc2VuIGxhcmdlciB2YWx1ZXMKK3B3bXgyNTIgcG93ZXIgMCA0IDcgLT4gMAorcHdteDI1MyBwb3dlciAtNCA1IC05IC0+IC03Citwd214MjU0IHBvd2VyIC01IDQgLTkgLT4gNAorcHdteDI1NSBwb3dlciAtNTAgMjkgMiAtPiAtMAorcHdteDI1NiBwb3dlciAtMSA4MyAzIC0+IC0xCitwd214MjU3IHBvd2VyIC01NSA2NSAtNzUgLT4gLTI1Citwd214MjU4IHBvd2VyIC02MTMgMTUxIC0zMDIgLT4gLTkKK3B3bXgyNTkgcG93ZXIgNTUxIDIzIC0zNSAtPiAzMQorcHdteDI2MCBwb3dlciA1MSAxNDIgOTQyIC0+IDkKK3B3bXgyNjEgcG93ZXIgNjg4NiA5MjA0IC02MDkxIC0+IDUwMzQKK3B3bXgyNjIgcG93ZXIgMzA1NyA1ODkwIC0zIC0+IDAKK3B3bXgyNjMgcG93ZXIgNTYgNDQzOCA1MzY1IC0+IDUyMQorcHdteDI2NCBwb3dlciA5NjIzNyAzNTY2OSAtNDY2NjkgLT4gMzA3MTcKK3B3bXgyNjUgcG93ZXIgNDAwMTEgMzQzNzUgLTU3NjExIC0+IDYyNQorcHdteDI2NiBwb3dlciA0NDMxNyAzODQ5MyAtMTIxOTYgLT4gMTEwODEKK3B3bXgyNjcgcG93ZXIgLTI4MjM2OCA4OTU2MzMgLTIzNTg3MCAtPiAtMjIwOTI4Citwd214MjY4IHBvd2VyIDc3MzI4IDg1MjU1MyAtNDA1NTI5IC0+IDEyOTE3MworcHdteDI2OSBwb3dlciAtOTI5NjU5IDg1NTcxMyA2NTAzNDggLT4gLTkwODAzCitwd214MjcwIHBvd2VyIDkwNzA1NyA2NTc0MzA5IDQ5MjQ3NjggLT4gMzAxODI1NworcHdteDI3MSBwb3dlciAtMjg4Nzc1NyAzMTk4NDkyIC01ODY0MzUyIC0+IDM0NDAxMTMKK3B3bXgyNzIgcG93ZXIgLTI0NzMxMCA2NTczNzEgLTc0MTU3MzkgLT4gLTEzMDE4NDAKK3B3bXgyNzMgcG93ZXIgLTgzOTkwNDYgNDUzMzQwODcgLTIyMzk1MDIwIC0+IC0xODUxNTg5NgorcHdteDI3NCBwb3dlciA3OTYyMTM5NyA0ODUwMjM2IDE0ODY1NTUgLT4gOTI4NzA2Citwd214Mjc1IHBvd2VyIDk2MDEyMjUxIDI3OTcxOTAxIDY5NjA5MDMxIC0+IDUwMDI4NzI5Citwd214Mjc2IHBvd2VyIC05MDczMzU0ODEgNzQxMjc5ODYgNTgyMzMwMDE3IC0+IDUxNTI3MTg3Citwd214Mjc3IHBvd2VyIC0xNDExOTI5NjAgODIxMDYzODI2IC0yNjA4Nzc5MjggLT4gMTEyMzE4NTYwCitwd214Mjc4IHBvd2VyIC01MDE3MTE3MDIgOTM0MzU1OTk0IDgyMTM1MTQzIC0+IDY2NTg2OTk1Citwd214Mjc5IHBvd2VyIC05MjU2MzU4MDc1IDg5MDA5MDAxMzggLTQ2NzIyMjAzMSAtPiA5NTgwMDI0NgorcHdteDI4MCBwb3dlciAtNzAzMTk2NDI5MSAxNzUxMjU3NDgzIC05MzUzMzQ0OTggLT4gLTYwNzYyNjYwOQorcHdteDI4MSBwb3dlciA4NDk0MzE0OTcxIDg3NDAxOTcyNTIgMTA3NTIyNDkxIC0+IDE3MzczNjU1Citwd214MjgyIHBvd2VyIDg4MzA2MjE2ODkwIDg3NDc3Mzc0MTY2IC0yMzQ5ODA3NiAtPiAxNTEyOTUyOAorcHdteDI4MyBwb3dlciAtMzM5Mzk0MzI0NzggNzE3MDE5NjIzOSAyMjEzMzU4MyAtPiAtMTEwMTcwMzYKK3B3bXgyODQgcG93ZXIgMTk0NjYyMjI3NjcgMzA0MTA3MTA2MTQgMzA1NzUyMDU2IC0+IDE5MTUwOTUzNworcHdteDI4NSBwb3dlciAtODY0OTQyNDk0MDA4IDM3MDU1ODg5OTYzOCAzNDY2ODg4NTYgLT4gNTY5NTY3NjgKK3B3bXgyODYgcG93ZXIgLTUyNTQwNjIyNTYwMyAzNDU3MDAyMjY4OTggMjM3MTYzNjIxIC0+IDU2Nzg5NTM0Citwd214Mjg3IHBvd2VyIDQ2NDYxMjIxNTk1NSAzMTI0NzQ2MjE2NTEgLTMyOTQ4NTcwMCAtPiAxODUzOTc1Citwd214Mjg4IHBvd2VyIC0xNjY0MjgzMDMxMjQ0IDM3NzQ0NzQ2Njk4NTUgOTE5MDIyODY3IC0+IC01MTYwMzQ1MjAKK3B3bXgyODkgcG93ZXIgLTM0NzI0Mzg1MDY5MTMgNzQwNzMyNzU0OTk5NSAtNDUxMjA2ODU0IC0+IC03NDU5NDc2MQorcHdteDI5MCBwb3dlciAtNDIyMzY2MjE1Mjk0OSA2ODkxMDY5Mjc5MDY5IDQ5OTg0MzUwMyAtPiAtODAxMzUyOTAKK3B3bXgyOTEgcG93ZXIgLTQ0MDIyMTE5Mjc2ODE2IDgxNjgyNjYxNzAzMjYgNTY5Njc5NTA5IC0+IDM3NTczNDQ3NQorcHdteDI5MiBwb3dlciAtNjYxOTU4OTEyMDc5MDIgMTI1MzI2OTA1NTU4NzUgLTI0MzI2MjEyOSAtPiAtMTEzMTg2ODMzCitwd214MjkzIHBvd2VyIC02OTAzOTkxMTI2MzE2NCA1MjcyNjYwNTg1NzY3MyAzNjA2MjUxOTYgLT4gLTI2ODY2Mjc0OAorcHdteDI5NCBwb3dlciAtMjk5MDEwMTE2Njk5MjA4IDg4NTA5MjU4OTM1OTIzMSAtNzMxMzEwMTIzIC0+IC0xMDQxMDM3NjUKK3B3bXgyOTUgcG93ZXIgLTIwMjQ5NTc3NjI5OTc1OCA1MDExNTkxMjI5NDMxNDUgLTY4NjIzNDg3MCAtPiAtMTM1NTExODc4Citwd214Mjk2IHBvd2VyIC01OTU0MTE0NzgwODc2NzYgODM2MjY5MjcwNDcyNDgxIC0yMTQ2MTQ5MDEgLT4gLTE4MzQ0MDgxOQorcHdteDI5NyBwb3dlciAtMTM5NTU1MzgxMDU2MjI5IDEzMjQ4MDg1MjAwMjA1MDcgLTIyODk0NDczOCAtPiAtMjE4OTkxNDczCitwd214Mjk4IHBvd2VyIDc4NDYzNTYyNTA3NzA1NDMgMTc5ODA0NTA1MTAzNjgxNCAtMTAxMDI4OTg1IC0+IDc4MDUxNzkKK3B3bXgyOTkgcG93ZXIgLTQyOTgwMTU4NjI3MDk0MTUgNjA0OTY2OTQ0ODQ0MjA5IDg4MDIxMjg5MyAtPiAtODc0MDg2NzEKK3B3bXgzMDAgcG93ZXIgLTM3Mzg0ODk3NTM4OTEwODkzIDc2MDIyMjA2OTk1NjU5Mjk1IC05MzA1MTI4NDIgLT4gLTY5Nzc1NzE1NworcHdteDMwMSBwb3dlciA4MjE2NjY1OTAyODAwNTQ0MyAyMzM3NTQwODI1MTc2NzcwNCA4MTcyNzA3MDAgLT4gNzcwNjk3MDAxCitwd214MzAyIHBvd2VyIDk3NDIwMzAxMTk4MTY1NjQxIDcyMjEzMjgyOTgzNDE2OTI0IDk0NzUxOTcxNiAtPiA2MTA3MTE3MjEKK3B3bXgzMDMgcG93ZXIgOTEzMzgyMDQzNDUzMjQzNjA3IDQ0OTY4MTcwNzI0ODUwMDI2MiAyMTExMzU1NDUgLT4gNzk1NDQ4OTkKK3B3bXgzMDQgcG93ZXIgLTMxMzgyMzYxMzQxODA1MjE3MSA1MzQ1Nzk0MDk2MTAxNDI5MzcgLTk0MzA2Mjk2OCAtPiAtNDQ2MDAxMzc5Citwd214MzA1IHBvd2VyIC05MjgxMDY1MTY4OTQ0OTQwOTMgNzYwMDIwMTc3MzMwMTE2NTA5IC01MDA0Mzk5NCAtPiAtNDYwMTA1NzUKK3B3bXgzMDYgcG93ZXIgNDY5MjE0NjYwMTY3OTQzOTc5NiA0NTY1MzU0NTExODA2NzY3ODA0IC02NjczMzkwNzUgLT4gNDgwMjcyMDgxCitwd214MzA3IHBvd2VyIDk3MjIyNTY2MzM1MDkxNzc5MzAgNzI3NjU2ODc5MTg2MDUwNTc5MCA3OTI2NzUzMjEgLT4gMTgyODc5NzUyCitwd214MzA4IHBvd2VyIDg2ODk4OTk0ODQ4MzAwNjQyMjggNDI5MDgyOTY3MTI5NjE1MjYxIC04NDQ1NTU2MzcgLT4gMjcwMzc0NTU3CisKKy0tIEFsbCBpbnB1dHMgbXVzdCBiZSBpbnRlZ2VycworcHdteDMwOSBwb3dlciAyLjEgMyAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDMxMCBwb3dlciAwLjQgMSA1IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDMxMSBwb3dlciAyIDMuMSA1IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDMxMiBwb3dlciAxMyAtMS4yIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDMxMyBwb3dlciAyIDMgNS4xIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBTZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBub25uZWdhdGl2ZSAoLTAgaXMgb2theSkKK3B3bXgzMTQgcG93ZXIgMiAtMyA1IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDMxNSBwb3dlciA3IC0xIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MzE2IHBvd2VyIDAgLTIgNiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gVGhpcmQgYXJndW1lbnQgbXVzdCBiZSBub256ZXJvCitwd214MzE3IHBvd2VyIDEzIDEwMDMgMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXgzMTggcG93ZXIgMSAwIDBFKzk4NyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXgzMTkgcG93ZXIgMCAyIC0wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBJbnRlZ2VycyBhcmUgZmluZSwgbm8gbWF0dGVyIGhvdyB0aGV5J3JlIGV4cHJlc3NlZAorcHdteDMyMCBwb3dlciAxMy4wIDExNy4wMCAxRSsyIC0+IDMzCitwd214MzIxIHBvd2VyIC0yRSszIDEuMUUrMTAgLTEyMzIzIC0+IDQ4MTEKK3B3bXgzMjIgcG93ZXIgMjAgMEUtMzAwIDE0MyAtPiAxCitwd214MzIzIHBvd2VyIC0yMCAtMEUrMTAwNSAxMTc5IC0+IDEKK3B3bXgzMjQgcG93ZXIgMEUtMTAwMSAxNyA1LjZFKzQgLT4gMAorCistLSBNb2R1bHVzIG11c3Qgbm90IGV4Y2VlZCBwcmVjaXNpb24KK3B3bXgzMjUgcG93ZXIgMCAxIDEyMzQ1Njc4OTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214MzI2IHBvd2VyIDEgMCAxMDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDMyNyBwb3dlciAtMjMgNSAtMTAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXgzMjggcG93ZXIgNDE1NTcgMjEzIC05OTk5OTk5OTkgLT4gNDc2NTA0NTYKK3B3bXgzMjkgcG93ZXIgLTIxMzQgMTk5IDk5OTk5OTk5NyAtPiAtOTQ2OTU3OTEyCisKKy0tIEh1Z2UgYmFzZSBzaG91bGRuJ3QgcHJlc2VudCBhbnkgcHJvYmxlbXMKK3B3bXgzMzAgcG93ZXIgMS4yM0UrMTIzNDU2NzkxIDEwMTIzODk4IDE3MjkxMDY1IC0+IDU2NzQwNDUKKworLS0gTGFyZ2UgZXhwb25lbnQsIG1heSBiZSBzbG93CistLSAoaWYgc2Vjb25kIGFyZ3VtZW50IGlzIDFFbiB0aGVuIGV4cGVjdCBPKG4pIHJ1bm5pbmcgdGltZSkKK3B3bXgzMzEgcG93ZXIgMTAwMDI4ODg5NiA5Ljg3RSsxMjM0NyA5MzM3OTkwOCAtPiA0MzIyNDkyNAorCistLSBUcmlwbGUgTmFOIHByb3BhZ2F0aW9uIChhZGFwdGVkIGZyb20gZXhhbXBsZXMgaW4gZm1hLmRlY1Rlc3QpCitwd214NDAwIHBvd2VyICBOYU4yICBOYU4zICBOYU41ICAgLT4gIE5hTjIKK3B3bXg0MDEgcG93ZXIgIDEgICAgIE5hTjMgIE5hTjUgICAtPiAgTmFOMworcHdteDQwMiBwb3dlciAgMSAgICAgMSAgICAgTmFONSAgIC0+ICBOYU41Citwd214NDAzIHBvd2VyICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24KK3B3bXg0MDQgcG93ZXIgIDEgICAgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDQwNSBwb3dlciAgMSAgICAgMSAgICAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCitwd214NDA2IHBvd2VyICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24KK3B3bXg0MDcgcG93ZXIgIE5hTjcgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDQwOCBwb3dlciAgTmFONyAgTmFONSAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEluZmluaXRpZXMgbm90IGFsbG93ZWQKK3B3bXg0MTAgcG93ZXIgSW5mIDEgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXg0MTEgcG93ZXIgMSBJbmYgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXg0MTIgcG93ZXIgMSAxIEluZiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3bXg0MTMgcG93ZXIgLUluZiAxIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd214NDE0IHBvd2VyIDEgLUluZiAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdteDQxNSBwb3dlciAxIDEgLUluZiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gSnVzdCBmb3IgZnVuOiAxNzI5IGlzIGEgQ2FybWljaGFlbCBudW1iZXIKK3B3bXg0MjAgcG93ZXIgMCAxNzI4IDE3MjkgLT4gMAorcHdteDQyMSBwb3dlciAxIDE3MjggMTcyOSAtPiAxCitwd214NDIyIHBvd2VyIDIgMTcyOCAxNzI5IC0+IDEKK3B3bXg0MjMgcG93ZXIgMyAxNzI4IDE3MjkgLT4gMQorcHdteDQyNCBwb3dlciA0IDE3MjggMTcyOSAtPiAxCitwd214NDI1IHBvd2VyIDUgMTcyOCAxNzI5IC0+IDEKK3B3bXg0MjYgcG93ZXIgNiAxNzI4IDE3MjkgLT4gMQorcHdteDQyNyBwb3dlciA3IDE3MjggMTcyOSAtPiA3NDIKK3B3bXg0MjggcG93ZXIgOCAxNzI4IDE3MjkgLT4gMQorcHdteDQyOSBwb3dlciA5IDE3MjggMTcyOSAtPiAxCitwd214NDMwIHBvd2VyIDEwIDE3MjggMTcyOSAtPiAxCitwd214NDMxIHBvd2VyIDExIDE3MjggMTcyOSAtPiAxCitwd214NDMyIHBvd2VyIDEyIDE3MjggMTcyOSAtPiAxCitwd214NDMzIHBvd2VyIDEzIDE3MjggMTcyOSAtPiA1MzMKK3B3bXg0MzQgcG93ZXIgMTQgMTcyOCAxNzI5IC0+IDc0MgorcHdteDQzNSBwb3dlciAxNSAxNzI4IDE3MjkgLT4gMQorcHdteDQzNiBwb3dlciAxNiAxNzI4IDE3MjkgLT4gMQorcHdteDQzNyBwb3dlciAxNyAxNzI4IDE3MjkgLT4gMQorcHdteDQzOCBwb3dlciAxOCAxNzI4IDE3MjkgLT4gMQorcHdteDQzOSBwb3dlciAxOSAxNzI4IDE3MjkgLT4gNDU2Citwd214NDQwIHBvd2VyIDIwIDE3MjggMTcyOSAtPiAxCisKKy0tIHBsdXMgYW5kIG1pbnVzIHplcm8gaW4gdmFyaW91cyByb3VuZGluZyBtb2RlcyAoc2VlIGlzc3VlIDExMTMxKQorZXh0ZW5kZWQ6IDEKK3ByZWNpc2lvbjogOQorbWF4ZXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworcm91bmRpbmc6IGhhbGZfZXZlbgorcGx1eDEwMDAgcGx1cyAwLjAgLT4gMC4wCitwbHV4MTAwMSBwbHVzIC0wLjAgLT4gMC4wCittaW54MTAwMCBtaW51cyAwLjAgLT4gMC4wCittaW54MTAwMSBtaW51cyAtMC4wIC0+IDAuMAorYWJzeDEwMDAgYWJzIDAuMCAtPiAwLjAKK2Fic3gxMDAxIGFicyAtMC4wIC0+IDAuMAorCityb3VuZGluZzogaGFsZl91cAorcGx1eDEwMTAgcGx1cyAwLjAgLT4gMC4wCittaW54MTAxMCBtaW51cyAwLjAgLT4gMC4wCitwbHV4MTAxMSBwbHVzIC0wLjAgLT4gMC4wCittaW54MTAxMSBtaW51cyAtMC4wIC0+IDAuMAorYWJzeDEwMTAgYWJzIDAuMCAtPiAwLjAKK2Fic3gxMDExIGFicyAtMC4wIC0+IDAuMAorCityb3VuZGluZzogY2VpbGluZworcGx1eDEwMjAgcGx1cyAwLjAgLT4gMC4wCittaW54MTAyMCBtaW51cyAwLjAgLT4gMC4wCitwbHV4MTAyMSBwbHVzIC0wLjAgLT4gMC4wCittaW54MTAyMSBtaW51cyAtMC4wIC0+IDAuMAorYWJzeDEwMjAgYWJzIDAuMCAtPiAwLjAKK2Fic3gxMDIxIGFicyAtMC4wIC0+IDAuMAorCityb3VuZGluZzogZmxvb3IKK3BsdXgxMDMwIHBsdXMgMC4wIC0+IDAuMAorbWlueDEwMzAgbWludXMgMC4wIC0+IC0wLjAKK3BsdXgxMDMxIHBsdXMgLTAuMCAtPiAtMC4wCittaW54MTAzMSBtaW51cyAtMC4wIC0+IDAuMAorYWJzeDEwMzAgYWJzIDAuMCAtPiAwLjAKK2Fic3gxMDMxIGFicyAtMC4wIC0+IDAuMAorCityb3VuZGluZzogZG93bgorcGx1eDEwNDAgcGx1cyAwLjAgLT4gMC4wCittaW54MTA0MCBtaW51cyAwLjAgLT4gMC4wCitwbHV4MTA0MSBwbHVzIC0wLjAgLT4gMC4wCittaW54MTA0MSBtaW51cyAtMC4wIC0+IDAuMAorYWJzeDEwNDAgYWJzIDAuMCAtPiAwLjAKK2Fic3gxMDQxIGFicyAtMC4wIC0+IDAuMAorCityb3VuZGluZzogdXAKK3BsdXgxMDUwIHBsdXMgMC4wIC0+IDAuMAorbWlueDEwNTAgbWludXMgMC4wIC0+IDAuMAorcGx1eDEwNTEgcGx1cyAtMC4wIC0+IDAuMAorbWlueDEwNTEgbWludXMgLTAuMCAtPiAwLjAKK2Fic3gxMDUwIGFicyAwLjAgLT4gMC4wCithYnN4MTA1MSBhYnMgLTAuMCAtPiAwLjAKKworcm91bmRpbmc6IGhhbGZfZG93bgorcGx1eDEwNjAgcGx1cyAwLjAgLT4gMC4wCittaW54MTA2MCBtaW51cyAwLjAgLT4gMC4wCitwbHV4MTA2MSBwbHVzIC0wLjAgLT4gMC4wCittaW54MTA2MSBtaW51cyAtMC4wIC0+IDAuMAorYWJzeDEwNjAgYWJzIDAuMCAtPiAwLjAKK2Fic3gxMDYxIGFicyAtMC4wIC0+IDAuMAorCityb3VuZGluZzogMDV1cAorcGx1eDEwNzAgcGx1cyAwLjAgLT4gMC4wCittaW54MTA3MCBtaW51cyAwLjAgLT4gMC4wCitwbHV4MTA3MSBwbHVzIC0wLjAgLT4gMC4wCittaW54MTA3MSBtaW51cyAtMC4wIC0+IDAuMAorYWJzeDEwNzAgYWJzIDAuMCAtPiAwLjAKK2Fic3gxMDcxIGFicyAtMC4wIC0+IDAuMApkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9mbWEuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZm1hLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgxOTdlZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZm1hLmRlY1Rlc3QKQEAgLTAsMCArMSwzNDI2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGZtYS5kZWNUZXN0IC0tIGRlY2ltYWwgZnVzZWQgbXVsdGlwbHkgYWRkICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gVGhlc2UgdGVzdHMgY29tcHJlc2UgdGhyZWUgcGFydHM6CistLSAgIDEuIFNhbml0eSBjaGVja3MgYW5kIG90aGVyIHRocmVlLW9wZXJhbmQgdGVzdHMgKGVzcGVjaWFsbHkgdGhvc2UKKy0tICAgICAgd2hlcmUgdGhlIGZ1c2VkIG9wZXJhdGlvbiBtYWtlcyBhIGRpZmZlcmVuY2UpCistLSAgIDIuIE11bHRpcGx5IHRlc3RzICh0aGlyZCBvcGVyYW5kIGlzIG5ldXRyYWwgemVybyBbMEUrZW1heF0pCistLSAgIDMuIEFkZGl0aW9uIHRlc3RzIChmaXJzdCBvcGVyYW5kIGlzIDEpCistLSBUaGUgbXVsdGlwbHkgYW5kIGFkZGl0aW9uIHRlc3RzIGFyZSBleHRlbnNpdmUgYmVjYXVzZSBGTUEgbWF5IGhhdmUKKy0tIGl0cyBvd24gZGVkaWNhdGVkIG11bHRpcGxpY2F0aW9uIG9yIGFkZGl0aW9uIHJvdXRpbmUocyksIGFuZCB0aGV5CistLSBhbHNvIGluaGVyZW50bHkgY2hlY2sgdGhlIGxlZnQtdG8tcmlnaHQgcHJvcGVydGllcy4KKworLS0gU2FuaXR5IGNoZWNrcworZm1heDAwMDEgZm1hICAxICAgMSAgIDEgLT4gICAyCitmbWF4MDAwMiBmbWEgIDEgICAxICAgMiAtPiAgIDMKK2ZtYXgwMDAzIGZtYSAgMiAgIDIgICAzIC0+ICAgNworZm1heDAwMDQgZm1hICA5ICAgOSAgIDkgLT4gIDkwCitmbWF4MDAwNSBmbWEgLTEgICAxICAgMSAtPiAgIDAKK2ZtYXgwMDA2IGZtYSAtMSAgIDEgICAyIC0+ICAgMQorZm1heDAwMDcgZm1hIC0yICAgMiAgIDMgLT4gIC0xCitmbWF4MDAwOCBmbWEgLTkgICA5ICAgOSAtPiAtNzIKK2ZtYXgwMDExIGZtYSAgMSAgLTEgICAxIC0+ICAgMAorZm1heDAwMTIgZm1hICAxICAtMSAgIDIgLT4gICAxCitmbWF4MDAxMyBmbWEgIDIgIC0yICAgMyAtPiAgLTEKK2ZtYXgwMDE0IGZtYSAgOSAgLTkgICA5IC0+IC03MgorZm1heDAwMTUgZm1hICAxICAgMSAgLTEgLT4gICAwCitmbWF4MDAxNiBmbWEgIDEgICAxICAtMiAtPiAgLTEKK2ZtYXgwMDE3IGZtYSAgMiAgIDIgIC0zIC0+ICAgMQorZm1heDAwMTggZm1hICA5ICAgOSAgLTkgLT4gIDcyCitmbWF4MDAxOSBmbWEgIDMgICA1ICAgNyAtPiAgMjIKK2ZtYXgwMDI5IGZtYSAgMyAgLTUgICA3IC0+ICAtOAorCistLSBub24taW50ZWdlciBleGFjdHMKK2ZtYTAxMDAgIGZtYSAgICAyNS4yICAgNjMuNiAgIC00MzggIC0+ICAxMTY0LjcyCitmbWEwMTAxICBmbWEgICAwLjMwMSAgMC4zODAgICAgMzM0ICAtPiAgMzM0LjExNDM4MAorZm1hMDEwMiAgZm1hICAgIDQ5LjIgICAtNC44ICAgMjMuMyAgLT4gIC0yMTIuODYKK2ZtYTAxMDMgIGZtYSAgICA0LjIyICAwLjA3OSAgLTk0LjYgIC0+ICAtOTQuMjY2NjIKK2ZtYTAxMDQgIGZtYSAgICAgOTAzICAwLjc5NyAgMC44ODcgIC0+ICA3MjAuNTc4CitmbWEwMTA1ICBmbWEgICAgNi4xMyAgIC0xNjEgICA2NS45ICAtPiAgLTkyMS4wMworZm1hMDEwNiAgZm1hICAgIDI4LjIgICAgNzI3ICAgNS40NSAgLT4gIDIwNTA2Ljg1CitmbWEwMTA3ICBmbWEgICAgICAgNCAgICA2MDUgICAgNjg4ICAtPiAgMzEwOAorZm1hMDEwOCAgZm1hICAgIDkzLjMgICAwLjE5ICAwLjIyNiAgLT4gIDE3Ljk1MworZm1hMDEwOSAgZm1hICAgMC4xNjkgICAtMzQxICAgNS42MSAgLT4gIC01Mi4wMTkKK2ZtYTAxMTAgIGZtYSAgIC03Mi4yICAgICAzMCAgLTUxLjIgIC0+ICAtMjIxNy4yCitmbWEwMTExICBmbWEgIC0wLjQwOSAgICAgMTMgICAyMC40ICAtPiAgMTUuMDgzCitmbWEwMTEyICBmbWEgICAgIDMxNyAgIDc3LjAgICAxOS4wICAtPiAgMjQ0MjguMAorZm1hMDExMyAgZm1hICAgICAgNDcgICA2LjU4ICAgMS42MiAgLT4gIDMxMC44OAorZm1hMDExNCAgZm1hICAgIDEuMzYgIDAuOTg0ICAwLjQ5MyAgLT4gIDEuODMxMjQKK2ZtYTAxMTUgIGZtYSAgICA3Mi43ICAgIDI3NCAgIDEuNTYgIC0+ICAxOTkyMS4zNgorZm1hMDExNiAgZm1hICAgICAzMzUgICAgODQ3ICAgICA4MyAgLT4gIDI4MzgyOAorZm1hMDExNyAgZm1hICAgICA2NjYgIDAuMjQ3ICAgMjUuNCAgLT4gIDE4OS45MDIKK2ZtYTAxMTggIGZtYSAgIC0zLjg3ICAgMy4wNiAgIDc4LjAgIC0+ICA2Ni4xNTc4CitmbWEwMTE5ICBmbWEgICAwLjc0MiAgICAxOTIgICAzNS42ICAtPiAgMTc4LjA2NAorZm1hMDEyMCAgZm1hICAgLTkxLjYgICA1LjI5ICAwLjE1MyAgLT4gIC00ODQuNDExCisKKy0tIGNhc2VzIHdoZXJlIHJlc3VsdCBpcyBkaWZmZXJlbnQgZnJvbSBzZXBhcmF0ZSBtdWx0aXBseSArIGFkZDsgZWFjaAorLS0gaXMgcHJlY2VkZWQgYnkgdGhlIHJlc3VsdCBvZiB1bmZ1c2VkIG11bHRpcGx5IGFuZCBhZGQKKy0tIFt0aGlzIGlzIGFib3V0IDIwJSBvZiBhbGwgc2ltaWxhciAgY2FzZXMgaW4gZ2VuZXJhbF0KKy0tICAgICAgICAgICAgICAgODg4NTY1MjkwICAgMTU1Ny45NjkzMCAgLTg2MDg3Ljc1NzggIC0+IDEuMzg0MzU3MzVFKzEyCitmbWEwMjAxICBmbWEgICAgIDg4ODU2NTI5MCAgIDE1NTcuOTY5MzAgIC04NjA4Ny43NTc4ICAtPiAxLjM4NDM1NzM2RSsxMiAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAtODU1MTkzNDIuOSAgICA3MzUxNTU0MTkgICAgIDQyMDEwNDMxICAtPiAtNi4yODcwMDA4NEUrMTYKK2ZtYTAyMDUgIGZtYSAgIC04NTUxOTM0Mi45ICAgIDczNTE1NTQxOSAgICAgNDIwMTA0MzEgIC0+IC02LjI4NzAwMDgzRSsxNiBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgIC05ODAyNS41ICAtMjk0NjAzLjQ3MiAgIDEwNDE0MzQ4LjIgIC0+IDIuODg4OTA2NjlFKzEwCitmbWEwMjA4ICBmbWEgICAgICAtOTgwMjUuNSAgLTI5NDYwMy40NzIgICAxMDQxNDM0OC4yICAtPiAyLjg4ODkwNjcwRSsxMCAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgNTk2NzYyNy4zOSAgIDgzNTI2NTQwLjYgICA0OTg0OTQuODEwICAtPiA0Ljk4NDU1MjcxRSsxNAorZm1hMDIxMSAgZm1hICAgIDU5Njc2MjcuMzkgICA4MzUyNjU0MC42ICAgNDk4NDk0LjgxMCAgLT4gNC45ODQ1NTI3MkUrMTQgIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAzNDU2Ljk0MzMgICAgODc0LjM5NTE4ICAgMTk3ODY2LjYxNSAgLT4gIDMyMjA2MDEuMTgKK2ZtYTAyMTYgIGZtYSAgICAgMzQ1Ni45NDMzICAgIDg3NC4zOTUxOCAgIDE5Nzg2Ni42MTUgIC0+ICAzMjIwNjAxLjE3ICAgICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICA2Mjc2OS44Mjg3ICAgMjA5Ni45ODkyNyAgICA0OC40MjAzMTcgIC0+ICAxMzE2Mjc3MDUKK2ZtYTAyMTggIGZtYSAgICA2Mjc2OS44Mjg3ICAgMjA5Ni45ODkyNyAgICA0OC40MjAzMTcgIC0+ICAxMzE2Mjc3MDYgICAgICBJbmV4YWN0IFJvdW5kZWQKKy0tICAgICAgICAgICAgICAgLTY4LjgxNTAwICAgNTk5NjExMTMuOSAgICAgLTg5ODg4NjIgIC0+IC00LjEzNTIxMjkxRSs5CitmbWEwMjE5ICBmbWEgICAgIC02OC44MTUwMCAgIDU5OTYxMTEzLjkgICAgIC04OTg4ODYyICAtPiAtNC4xMzUyMTI5MkUrOSAgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgMjEyNjM0MS4wMiAgIDYzNDkxLjUxNTIgICAgMzAyNDI3NDU1ICAtPiAxLjM1MzA3MDQwRSsxMQorZm1hMDIyNiAgZm1hICAgIDIxMjYzNDEuMDIgICA2MzQ5MS41MTUyICAgIDMwMjQyNzQ1NSAgLT4gMS4zNTMwNzA0MUUrMTEgIEluZXhhY3QgUm91bmRlZAorCisKKy0tIEluZmluaXRlIGNvbWJpbmF0aW9ucworZm1heDA4MDAgZm1hICBJbmYgICBJbmYgICBJbmYgICAgLT4gIEluZmluaXR5CitmbWF4MDgwMSBmbWEgIEluZiAgIEluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MDgwMiBmbWEgIEluZiAgLUluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MDgwMyBmbWEgIEluZiAgLUluZiAgLUluZiAgICAtPiAtSW5maW5pdHkKK2ZtYXgwODA0IGZtYSAtSW5mICAgSW5mICAgSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgwODA1IGZtYSAtSW5mICAgSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQorZm1heDA4MDYgZm1hIC1JbmYgIC1JbmYgICBJbmYgICAgLT4gIEluZmluaXR5CitmbWF4MDgwNyBmbWEgLUluZiAgLUluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MDgwOCBmbWEgLUluZiAgIDAgICAgICAgMSAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MDgwOSBmbWEgLUluZiAgIDAgICAgIE5hTiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIFRyaXBsZSBOYU4gcHJvcGFnYXRpb24KK2ZtYXgwOTAwIGZtYSAgTmFOMiAgTmFOMyAgTmFONSAgIC0+ICBOYU4yCitmbWF4MDkwMSBmbWEgIDAgICAgIE5hTjMgIE5hTjUgICAtPiAgTmFOMworZm1heDA5MDIgZm1hICAwICAgICAwICAgICBOYU41ICAgLT4gIE5hTjUKKy0tIGZpcnN0IHNOYU4gd2lucyAoY29uc2lkZXIgcU5hTiBmcm9tIGVhcmxpZXIgc05hTiBiZWluZworLS0gb3ZlcnJpZGRlbiBieSBhbiBzTmFOIGluIHRoaXJkIG9wZXJhbmQpCitmbWF4MDkwMyBmbWEgIHNOYU4xIHNOYU4yIHNOYU4zICAtPiAgTmFOMSBJbnZhbGlkX29wZXJhdGlvbgorZm1heDA5MDQgZm1hICAwICAgICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgwOTA1IGZtYSAgMCAgICAgMCAgICAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MDkwNiBmbWEgIHNOYU4xIHNOYU4yIHNOYU4zICAtPiAgTmFOMSBJbnZhbGlkX29wZXJhdGlvbgorZm1heDA5MDcgZm1hICBOYU43ICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgwOTA4IGZtYSAgTmFONyAgTmFONSAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE1VTFRJUExJQ0FUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gc2FuaXR5IGNoZWNrcyAoYXMgYmFzZSwgYWJvdmUpCitmbWF4MjAwMCBmbWEgMiAgICAgIDIgIDBFKzk5OTk5OSAgLT4gNAorZm1heDIwMDEgZm1hIDIgICAgICAzICAwRSs5OTk5OTkgIC0+IDYKK2ZtYXgyMDAyIGZtYSA1ICAgICAgMSAgMEUrOTk5OTk5ICAtPiA1CitmbWF4MjAwMyBmbWEgNSAgICAgIDIgIDBFKzk5OTk5OSAgLT4gMTAKK2ZtYXgyMDA0IGZtYSAxLjIwICAgMiAgMEUrOTk5OTk5ICAtPiAyLjQwCitmbWF4MjAwNSBmbWEgMS4yMCAgIDAgIDBFKzk5OTk5OSAgLT4gMC4wMAorZm1heDIwMDYgZm1hIDEuMjAgIC0yICAwRSs5OTk5OTkgIC0+IC0yLjQwCitmbWF4MjAwNyBmbWEgLTEuMjAgIDIgIDBFKzk5OTk5OSAgLT4gLTIuNDAKK2ZtYXgyMDA4IGZtYSAtMS4yMCAgMCAgMEUrOTk5OTk5ICAtPiAwLjAwCitmbWF4MjAwOSBmbWEgLTEuMjAgLTIgIDBFKzk5OTk5OSAgLT4gMi40MAorZm1heDIwMTAgZm1hIDUuMDkgNy4xICAwRSs5OTk5OTkgIC0+IDM2LjEzOQorZm1heDIwMTEgZm1hIDIuNSAgICA0ICAwRSs5OTk5OTkgIC0+IDEwLjAKK2ZtYXgyMDEyIGZtYSAyLjUwICAgNCAgMEUrOTk5OTk5ICAtPiAxMC4wMAorZm1heDIwMTMgZm1hIDEuMjM0NTY3ODkgMS4wMDAwMDAwMCAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2Nzg5IFJvdW5kZWQKK2ZtYXgyMDE0IGZtYSA5Ljk5OTk5OTk5OSA5Ljk5OTk5OTk5OSAgMEUrOTk5OTk5ICAtPiAxMDAuMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDIwMTUgZm1hIDIuNTAgICA0ICAwRSs5OTk5OTkgIC0+IDEwLjAwCitwcmVjaXNpb246IDYKK2ZtYXgyMDE2IGZtYSAyLjUwICAgNCAgMEUrOTk5OTk5ICAtPiAxMC4wMAorZm1heDIwMTcgZm1hICA5Ljk5OTk5OSAgOS45OTk5OTkgIDBFKzk5OTk5OSAgLT4gIDEwMC4wMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MjAxOCBmbWEgIDkuOTk5OTk5IC05Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAtMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDE5IGZtYSAtOS45OTk5OTkgIDkuOTk5OTk5ICAwRSs5OTk5OTkgIC0+IC0xMDAuMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDIwMjAgZm1hIC05Ljk5OTk5OSAtOS45OTk5OTkgIDBFKzk5OTk5OSAgLT4gIDEwMC4wMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIDE5OTkuMTIuMjE6IG5leHQgb25lIGlzIGEgZWRnZSBjYXNlIGlmIGludGVybWVkaWF0ZSBsb25ncyBhcmUgdXNlZAorcHJlY2lzaW9uOiAxNQorZm1heDIwNTkgZm1hIDk5OTk5OTk5OTk5OSA5NzY1NjI1ICAwRSs5OTk5OTkgIC0+IDkuNzY1NjI0OTk5OTkwMjNFKzE4IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMAorZm1heDIxNjAgZm1hIDk5OTk5OTk5OTk5OSA5NzY1NjI1ICAwRSs5OTk5OTkgIC0+IDk3NjU2MjQ5OTk5OTAyMzQzNzUKK3ByZWNpc2lvbjogOQorLS0tLS0KKworLS0gemVyb3MsIGV0Yy4KK2ZtYXgyMDIxIGZtYSAgMCAgICAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjAyMiBmbWEgIDAgICAgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgMAorZm1heDIwMjMgZm1hIC0wICAgICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAKK2ZtYXgyMDI0IGZtYSAtMCAgICAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwCitmbWF4MjAyNSBmbWEgLTAuMCAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMAorZm1heDIwMjYgZm1hIC0wLjAgICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKK2ZtYXgyMDI3IGZtYSAtMC4wICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCitmbWF4MjAyOCBmbWEgLTAuMCAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMAorZm1heDIwMzAgZm1hICA1LjAwICAgMUUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDA1MDAKK2ZtYXgyMDMxIGZtYSAgMDAuMDAgIDAuMDAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwCitmbWF4MjAzMiBmbWEgIDAwLjAwICAwRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2ZtYXgyMDMzIGZtYSAgMEUtMyAgIDAwLjAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZm1heDIwMzQgZm1hIC01LjAwICAgMUUtMyAgIDBFKzk5OTk5OSAgLT4gLTAuMDA1MDAKK2ZtYXgyMDM1IGZtYSAtMDAuMDAgIDAuMDAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwCitmbWF4MjAzNiBmbWEgLTAwLjAwICAwRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2ZtYXgyMDM3IGZtYSAtMEUtMyAgIDAwLjAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZm1heDIwMzggZm1hICA1LjAwICAtMUUtMyAgIDBFKzk5OTk5OSAgLT4gLTAuMDA1MDAKK2ZtYXgyMDM5IGZtYSAgMDAuMDAgLTAuMDAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwCitmbWF4MjA0MCBmbWEgIDAwLjAwIC0wRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2ZtYXgyMDQxIGZtYSAgMEUtMyAgLTAwLjAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorZm1heDIwNDIgZm1hIC01LjAwICAtMUUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDA1MDAKK2ZtYXgyMDQzIGZtYSAtMDAuMDAgLTAuMDAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwCitmbWF4MjA0NCBmbWEgLTAwLjAwIC0wRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK2ZtYXgyMDQ1IGZtYSAtMEUtMyAgLTAwLjAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAorCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoIG11bHRpcGx5CitmbWF4MjA1MCBmbWEgMS4yMCAzICAgICAgICAgMEUrOTk5OTk5ICAtPiAzLjYwCitmbWF4MjA1MSBmbWEgNyAgICAzICAgICAgICAgMEUrOTk5OTk5ICAtPiAyMQorZm1heDIwNTIgZm1hIDAuOSAgMC44ICAgICAgIDBFKzk5OTk5OSAgLT4gMC43MgorZm1heDIwNTMgZm1hIDAuOSAgLTAgICAgICAgIDBFKzk5OTk5OSAgLT4gMC4wCitmbWF4MjA1NCBmbWEgNjU0MzIxIDY1NDMyMSAgMEUrOTk5OTk5ICAtPiA0LjI4MTM1OTcxRSsxMSAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgyMDYwIGZtYSAxMjMuNDUgMWU3ICAgMEUrOTk5OTk5ICAtPiAgMS4yMzQ1RSs5CitmbWF4MjA2MSBmbWEgMTIzLjQ1IDFlOCAgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTAKK2ZtYXgyMDYyIGZtYSAxMjMuNDUgMWUrOSAgMEUrOTk5OTk5ICAtPiAgMS4yMzQ1RSsxMQorZm1heDIwNjMgZm1hIDEyMy40NSAxZTEwICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzEyCitmbWF4MjA2NCBmbWEgMTIzLjQ1IDFlMTEgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTMKK2ZtYXgyMDY1IGZtYSAxMjMuNDUgMWUxMiAgMEUrOTk5OTk5ICAtPiAgMS4yMzQ1RSsxNAorZm1heDIwNjYgZm1hIDEyMy40NSAxZTEzICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzE1CisKKworLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzCitwcmVjaXNpb246IDkKK2ZtYXgyMDgwIGZtYSAwLjEgMTIzNDU2Nzg5ICAgICAgICAgICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4LjkKK2ZtYXgyMDgxIGZtYSAwLjEgMTIzNDU2Nzg5MSAgICAgICAgICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDgyIGZtYSAwLjEgMTIzNDU2Nzg5MTIgICAgICAgICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MjA4MyBmbWEgMC4xIDEyMzQ1Njc4OTEyMzQ1ICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2Nzg5RSsxMiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDg0IGZtYSAwLjEgMTIzNDU2Nzg5ICAgICAgICAgICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4LjkKK3ByZWNpc2lvbjogOAorZm1heDIwODUgZm1hIDAuMSAxMjM0NTY3ODkxMiAgICAgICAgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc5RSs5IEluZXhhY3QgUm91bmRlZAorZm1heDIwODYgZm1hIDAuMSAxMjM0NTY3ODkxMjM0NSAgICAgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc5RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNworZm1heDIwODcgZm1hIDAuMSAxMjM0NTY3ODkxMiAgICAgICAgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1NjhFKzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MjA4OCBmbWEgMC4xIDEyMzQ1Njc4OTEyMzQ1ICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogOQorZm1heDIwOTAgZm1hIDEyMzQ1Njc4OSAgICAgICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMTIzNDU2NzguOQorZm1heDIwOTEgZm1hIDEyMzQ1Njc4OTEgICAgICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorZm1heDIwOTIgZm1hIDEyMzQ1Njc4OTEyICAgICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDkzIGZtYSAxMjM0NTY3ODkxMjM0NSAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODlFKzEyIEluZXhhY3QgUm91bmRlZAorZm1heDIwOTQgZm1hIDEyMzQ1Njc4OSAgICAgICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMTIzNDU2NzguOQorcHJlY2lzaW9uOiA4CitmbWF4MjA5NSBmbWEgMTIzNDU2Nzg5MTIgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2NzlFKzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MjA5NiBmbWEgMTIzNDU2Nzg5MTIzNDUgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2NzlFKzEyIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA3CitmbWF4MjA5NyBmbWEgMTIzNDU2Nzg5MTIgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2OEUrOSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyMDk4IGZtYSAxMjM0NTY3ODkxMjM0NSAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY4RSsxMiBJbmV4YWN0IFJvdW5kZWQKKworLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2FycmllcworbWF4ZXhwb25lbnQ6IDk5OTkKK21pbmV4cG9uZW50OiAtOTk5OQorcHJlY2lzaW9uOiAzMworZm1heDIxMDEgZm1hIDkgOSAgICAwRSs5OTk5OTkgIC0+IDgxCitmbWF4MjEwMiBmbWEgOSA5MCAgICAwRSs5OTk5OTkgIC0+IDgxMAorZm1heDIxMDMgZm1hIDkgOTAwICAgIDBFKzk5OTk5OSAgLT4gODEwMAorZm1heDIxMDQgZm1hIDkgOTAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwCitmbWF4MjEwNSBmbWEgOSA5MDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMAorZm1heDIxMDYgZm1hIDkgOTAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMAorZm1heDIxMDcgZm1hIDkgOTAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwCitmbWF4MjEwOCBmbWEgOSA5MDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMAorZm1heDIxMDkgZm1hIDkgOTAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMAorZm1heDIxMTAgZm1hIDkgOTAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwCitmbWF4MjExMSBmbWEgOSA5MDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMAorZm1heDIxMTIgZm1hIDkgOTAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMAorZm1heDIxMTMgZm1hIDkgOTAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwCitmbWF4MjExNCBmbWEgOSA5MDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMAorZm1heDIxMTUgZm1hIDkgOTAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMAorZm1heDIxMTYgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwCitmbWF4MjExNyBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMAorZm1heDIxMTggZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMAorZm1heDIxMTkgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjEyMCBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMAorZm1heDIxMjEgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMAorZm1heDIxMjIgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjEyMyBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMKK2ZtYXgyMTMxIGZtYSAzIDMgICAgMEUrOTk5OTk5ICAtPiA5CitmbWF4MjEzMiBmbWEgMyAzMCAgICAwRSs5OTk5OTkgIC0+IDkwCitmbWF4MjEzMyBmbWEgMyAzMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAKK2ZtYXgyMTM0IGZtYSAzIDMwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwCitmbWF4MjEzNSBmbWEgMyAzMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwCitmbWF4MjEzNiBmbWEgMyAzMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAKK2ZtYXgyMTM3IGZtYSAzIDMwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwCitmbWF4MjEzOCBmbWEgMyAzMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwCitmbWF4MjEzOSBmbWEgMyAzMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAKK2ZtYXgyMTQwIGZtYSAzIDMwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwCitmbWF4MjE0MSBmbWEgMyAzMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwCitmbWF4MjE0MiBmbWEgMyAzMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAKK2ZtYXgyMTQzIGZtYSAzIDMwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwCitmbWF4MjE0NCBmbWEgMyAzMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwCitmbWF4MjE0NSBmbWEgMyAzMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTQ2IGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwCitmbWF4MjE0NyBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjE0OCBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTQ5IGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjE1MCBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjE1MSBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAKK2ZtYXgyMTUyIGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwCitmbWF4MjE1MyBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKK21heGV4cG9uZW50OiA5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5CitwcmVjaXNpb246IDkKKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdy91bmRlcmZsb3cKK2ZtYXgyMTcwIGZtYSAxIDllOTk5OTk5ICAgICAwRSs5OTk5OTkgIC0+IDlFKzk5OTk5OQorZm1heDIxNzEgZm1hIDEgOS45ZTk5OTk5OSAgIDBFKzk5OTk5OSAgLT4gOS45RSs5OTk5OTkKK2ZtYXgyMTcyIGZtYSAxIDkuOTllOTk5OTk5ICAwRSs5OTk5OTkgIC0+IDkuOTlFKzk5OTk5OQorZm1heDIxNzMgZm1hIDllOTk5OTk5ICAgIDEgIDBFKzk5OTk5OSAgLT4gOUUrOTk5OTk5CitmbWF4MjE3NCBmbWEgOS45ZTk5OTk5OSAgMSAgMEUrOTk5OTk5ICAtPiA5LjlFKzk5OTk5OQorZm1heDIxNzYgZm1hIDkuOTllOTk5OTk5IDEgIDBFKzk5OTk5OSAgLT4gOS45OUUrOTk5OTk5CitmbWF4MjE3NyBmbWEgMSA5Ljk5OTk5ZTk5OTk5OSAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5RSs5OTk5OTkKK2ZtYXgyMTc4IGZtYSA5Ljk5OTk5ZTk5OTk5OSAxICAwRSs5OTk5OTkgIC0+IDkuOTk5OTlFKzk5OTk5OQorCitmbWF4MjE4MCBmbWEgMC4xIDllLTk5OTk5OCAgICAwRSs5OTk5OTkgIC0+IDlFLTk5OTk5OQorZm1heDIxODEgZm1hIDAuMSA5OWUtOTk5OTk4ICAgMEUrOTk5OTk5ICAtPiA5LjlFLTk5OTk5OAorZm1heDIxODIgZm1hIDAuMSA5OTllLTk5OTk5OCAgMEUrOTk5OTk5ICAtPiA5Ljk5RS05OTk5OTcKKworZm1heDIxODMgZm1hIDAuMSA5ZS05OTk5OTggICAgICAwRSs5OTk5OTkgIC0+IDlFLTk5OTk5OQorZm1heDIxODQgZm1hIDAuMSA5OWUtOTk5OTk4ICAgICAwRSs5OTk5OTkgIC0+IDkuOUUtOTk5OTk4CitmbWF4MjE4NSBmbWEgMC4xIDk5OWUtOTk5OTk4ICAgIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk3CitmbWF4MjE4NiBmbWEgMC4xIDk5OWUtOTk5OTk3ICAgIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk2CitmbWF4MjE4NyBmbWEgMC4xIDk5OTllLTk5OTk5NyAgIDBFKzk5OTk5OSAgLT4gOS45OTlFLTk5OTk5NQorZm1heDIxODggZm1hIDAuMSA5OTk5OWUtOTk5OTk3ICAwRSs5OTk5OTkgIC0+IDkuOTk5OUUtOTk5OTk0CisKK2ZtYXgyMTkwIGZtYSAxIDllLTk5OTk5OCAgICAwRSs5OTk5OTkgIC0+IDlFLTk5OTk5OAorZm1heDIxOTEgZm1hIDEgOTllLTk5OTk5OCAgIDBFKzk5OTk5OSAgLT4gOS45RS05OTk5OTcKK2ZtYXgyMTkyIGZtYSAxIDk5OWUtOTk5OTk4ICAwRSs5OTk5OTkgIC0+IDkuOTlFLTk5OTk5NgorZm1heDIxOTMgZm1hIDllLTk5OTk5OCAgIDEgIDBFKzk5OTk5OSAgLT4gOUUtOTk5OTk4CitmbWF4MjE5NCBmbWEgOTllLTk5OTk5OCAgMSAgMEUrOTk5OTk5ICAtPiA5LjlFLTk5OTk5NworZm1heDIxOTUgZm1hIDk5OWUtOTk5OTk4IDEgIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk2CisKKy0tIGxvbmcgb3BlcmFuZCB0cmlhbmdsZQorcHJlY2lzaW9uOiAzMworZm1heDIyNDYgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjgzMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzIKK2ZtYXgyMjQ3IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4MyAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMxCitmbWF4MjI0OCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTExOTkyOCAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMAorZm1heDIyNDkgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MyAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjkKK2ZtYXgyMjUwIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OSAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI4CitmbWF4MjI1MSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTEyMCAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNworZm1heDIyNTIgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMiAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjYKK2ZtYXgyMjUzIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MSAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI1CitmbWF4MjI1NCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNAorZm1heDIyNTUgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNyAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjMKK2ZtYXgyMjU2IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MiAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIyCitmbWF4MjI1NyBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOSAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMQorZm1heDIyNTggZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjAKK2ZtYXgyMjU5IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE5CitmbWF4MjI2MCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NyAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxOAorZm1heDIyNjEgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM3MCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTcKK2ZtYXgyMjYyIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNyAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE2CitmbWF4MjI2MyBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzNCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNQorZm1heDIyNjQgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MyAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTQKK2ZtYXgyMjY1IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOSAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEzCitmbWF4MjI2NiBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMiAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMgorZm1heDIyNjcgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMSAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTEKK2ZtYXgyMjY4IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MCAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEwCitmbWF4MjI2OSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwOCAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgOQorZm1heDIyNzAgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDgKK2ZtYXgyMjcxIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOSAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA3CitmbWF4MjI3MiBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNgorZm1heDIyNzMgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNQorZm1heDIyNzQgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMS40NTQzRSs1ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNAorZm1heDIyNzUgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMS40NTRFKzUgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzCitmbWF4MjI3NiBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxLjQ1RSs1ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMgorZm1heDIyNzcgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMS41RSs1ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMQorZm1heDIyNzggZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMUUrNSAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRlc3Qgc29tZSBlZGdlIGNhc2VzIHdpdGggZXhhY3Qgcm91bmRpbmcKK21heGV4cG9uZW50OiA5OTk5CittaW5leHBvbmVudDogLTk5OTkKK3ByZWNpc2lvbjogOQorZm1heDIzMDEgZm1hIDkgOSAgICAwRSs5OTk5OTkgIC0+IDgxCitmbWF4MjMwMiBmbWEgOSA5MCAgICAwRSs5OTk5OTkgIC0+IDgxMAorZm1heDIzMDMgZm1hIDkgOTAwICAgIDBFKzk5OTk5OSAgLT4gODEwMAorZm1heDIzMDQgZm1hIDkgOTAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwCitmbWF4MjMwNSBmbWEgOSA5MDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMAorZm1heDIzMDYgZm1hIDkgOTAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMAorZm1heDIzMDcgZm1hIDkgOTAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwCitmbWF4MjMwOCBmbWEgOSA5MDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMAorZm1heDIzMDkgZm1hIDkgOTAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrOSAgIFJvdW5kZWQKK2ZtYXgyMzEwIGZtYSA5IDkwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxMCAgUm91bmRlZAorZm1heDIzMTEgZm1hIDkgOTAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxMSAgUm91bmRlZAorZm1heDIzMTIgZm1hIDkgOTAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTIgIFJvdW5kZWQKK2ZtYXgyMzEzIGZtYSA5IDkwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxMyAgUm91bmRlZAorZm1heDIzMTQgZm1hIDkgOTAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxNCAgUm91bmRlZAorZm1heDIzMTUgZm1hIDkgOTAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTUgIFJvdW5kZWQKK2ZtYXgyMzE2IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxNiAgUm91bmRlZAorZm1heDIzMTcgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxNyAgUm91bmRlZAorZm1heDIzMTggZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTggIFJvdW5kZWQKK2ZtYXgyMzE5IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxOSAgUm91bmRlZAorZm1heDIzMjAgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsyMCAgUm91bmRlZAorZm1heDIzMjEgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMjEgIFJvdW5kZWQKK2ZtYXgyMzIyIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsyMiAgUm91bmRlZAorZm1heDIzMjMgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsyMyAgUm91bmRlZAorCistLSBmYXN0cGF0aCBicmVha2VycworcHJlY2lzaW9uOiAgIDI5CitmbWF4MjMzMCBmbWEgMS40OTE4MjQ2OTc2NDEyNzAzMTc4MjQ4NTI5NTI4MzcyMjQgMS4xMDUxNzA5MTgwNzU2NDc2MjQ4MTE3MDc4MjY0OTAyNDY1MTQ2NzU2Mjg2MTQ1NjI4ODM1MzczNDU3NDc2MDMgIDBFKzk5OTk5OSAgLT4gMS42NDg3MjEyNzA3MDAxMjgxNDY4NDg2NTA3ODc4IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDU1CitmbWF4MjMzMSBmbWEgMC44OTU4MzQxMzUyOTY1MjgyNTA2NzY4NTQ1ODI4NzY1MTE3ODAzODczNzE3Mjg0ODkxMDQwNDI4IDAuODk1ODM0MTM1Mjk2NTI4MjUwNjc2ODU0NTgyODc2NTExNzgwMzg3MzcxNzI4NDg5MTA0MDQyOCAgMEUrOTk5OTk5ICAtPiAwLjgwMjUxODc5Nzk2MjQ3ODQ4Mjk4NDI1NTM4Mjk5MzQwNjk5NTU4OTA5ODM2OTY3NTIyMjgyOTkgSW5leGFjdCBSb3VuZGVkCisKKworLS0gdHJ5emVyb3MgY2FzZXMKK3ByZWNpc2lvbjogICA3Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDkyCittaW5leHBvbmVudDogLTkyCitmbWF4MjUwNCAgZm1hICAwRS02MCAxMDAwRS02MCAgIDBFKzk5OTk5OSAgLT4gMEUtOTggQ2xhbXBlZAorZm1heDI1MDUgIGZtYSAgMTAwRSs2MCAwRSs2MCAgICAwRSs5OTk5OTkgIC0+IDBFKzkyIENsYW1wZWQKKworLS0gbWl4ZWQgd2l0aCB6ZXJvcworbWF4ZXhwb25lbnQ6IDk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTkKK3ByZWNpc2lvbjogOQorZm1heDI1NDEgZm1hICAwICAgIC0xICAgICAgMEUrOTk5OTk5ICAtPiAgMAorZm1heDI1NDIgZm1hIC0wICAgIC0xICAgICAgMEUrOTk5OTk5ICAtPiAgMAorZm1heDI1NDMgZm1hICAwICAgICAxICAgICAgMEUrOTk5OTk5ICAtPiAgMAorZm1heDI1NDQgZm1hIC0wICAgICAxICAgICAgMEUrOTk5OTk5ICAtPiAgMAorZm1heDI1NDUgZm1hIC0xICAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMAorZm1heDI1NDYgZm1hIC0xICAgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgMAorZm1heDI1NDcgZm1hICAxICAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMAorZm1heDI1NDggZm1hICAxICAgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgMAorCitmbWF4MjU1MSBmbWEgIDAuMCAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTUyIGZtYSAtMC4wICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NTMgZm1hICAwLjAgICAxICAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU1NCBmbWEgLTAuMCAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTU1IGZtYSAtMS4wICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NTYgZm1hIC0xLjAgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU1NyBmbWEgIDEuMCAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTU4IGZtYSAgMS4wICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorCitmbWF4MjU2MSBmbWEgIDAgICAgLTEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTYyIGZtYSAtMCAgICAtMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NjMgZm1hICAwICAgICAxLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU2NCBmbWEgLTAgICAgIDEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTY1IGZtYSAtMSAgICAgMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorZm1heDI1NjYgZm1hIC0xICAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCitmbWF4MjU2NyBmbWEgIDEgICAgIDAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAKK2ZtYXgyNTY4IGZtYSAgMSAgICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMAorCitmbWF4MjU3MSBmbWEgIDAuMCAgLTEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCitmbWF4MjU3MiBmbWEgLTAuMCAgLTEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCitmbWF4MjU3MyBmbWEgIDAuMCAgIDEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCitmbWF4MjU3NCBmbWEgLTAuMCAgIDEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCitmbWF4MjU3NSBmbWEgLTEuMCAgIDAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCitmbWF4MjU3NiBmbWEgLTEuMCAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCitmbWF4MjU3NyBmbWEgIDEuMCAgIDAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCitmbWF4MjU3OCBmbWEgIDEuMCAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCisKKworLS0gU3BlY2lhbHMKK2ZtYXgyNTgwIGZtYSAgSW5mICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CitmbWF4MjU4MSBmbWEgIEluZiAgLTEwMDAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI1ODIgZm1hICBJbmYgIC0xICAgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNTgzIGZtYSAgSW5mICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNTg0IGZtYSAgSW5mICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNTg1IGZtYSAgSW5mICAgMSAgICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5CitmbWF4MjU4NiBmbWEgIEluZiAgIDEwMDAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQorZm1heDI1ODcgZm1hICBJbmYgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKK2ZtYXgyNTg4IGZtYSAtMTAwMCAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CitmbWF4MjU4OSBmbWEgLUluZiAgIEluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI1OTAgZm1hIC0xICAgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNTkxIGZtYSAtMCAgICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNTkyIGZtYSAgMCAgICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNTkzIGZtYSAgMSAgICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5CitmbWF4MjU5NCBmbWEgIDEwMDAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQorZm1heDI1OTUgZm1hICBJbmYgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKKworZm1heDI2MDAgZm1hIC1JbmYgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKK2ZtYXgyNjAxIGZtYSAtSW5mICAtMTAwMCAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5CitmbWF4MjYwMiBmbWEgLUluZiAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQorZm1heDI2MDMgZm1hIC1JbmYgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2MDQgZm1hIC1JbmYgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2MDUgZm1hIC1JbmYgICAxICAgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNjA2IGZtYSAtSW5mICAgMTAwMCAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CitmbWF4MjYwNyBmbWEgLUluZiAgIEluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorZm1heDI2MDggZm1hIC0xMDAwICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNjA5IGZtYSAtSW5mICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5CitmbWF4MjYxMCBmbWEgLTEgICAgLUluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQorZm1heDI2MTEgZm1hIC0wICAgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2MTIgZm1hICAwICAgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2MTMgZm1hICAxICAgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKK2ZtYXgyNjE0IGZtYSAgMTAwMCAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5CitmbWF4MjYxNSBmbWEgIEluZiAgLUluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQorCitmbWF4MjYyMSBmbWEgIE5hTiAtSW5mICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjIyIGZtYSAgTmFOIC0xMDAwICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MjMgZm1hICBOYU4gLTEgICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYyNCBmbWEgIE5hTiAtMCAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjI1IGZtYSAgTmFOICAwICAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MjYgZm1hICBOYU4gIDEgICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYyNyBmbWEgIE5hTiAgMTAwMCAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjI4IGZtYSAgTmFOICBJbmYgICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MjkgZm1hICBOYU4gIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYzMCBmbWEgLUluZiAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjMxIGZtYSAtMTAwMCBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MzIgZm1hIC0xICAgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYzMyBmbWEgLTAgICAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjM0IGZtYSAgMCAgICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorZm1heDI2MzUgZm1hICAxICAgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCitmbWF4MjYzNiBmbWEgIDEwMDAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KK2ZtYXgyNjM3IGZtYSAgSW5mICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTgorCitmbWF4MjY0MSBmbWEgIHNOYU4gLUluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY0MiBmbWEgIHNOYU4gLTEwMDAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY0MyBmbWEgIHNOYU4gLTEgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY0NCBmbWEgIHNOYU4gLTAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY0NSBmbWEgIHNOYU4gIDAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY0NiBmbWEgIHNOYU4gIDEgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY0NyBmbWEgIHNOYU4gIDEwMDAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY0OCBmbWEgIHNOYU4gIE5hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY0OSBmbWEgIHNOYU4gc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY1MCBmbWEgIE5hTiAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY1MSBmbWEgLUluZiAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY1MiBmbWEgLTEwMDAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY1MyBmbWEgLTEgICAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY1NCBmbWEgLTAgICAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY1NSBmbWEgIDAgICAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY1NiBmbWEgIDEgICAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY1NyBmbWEgIDEwMDAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY1OCBmbWEgIEluZiAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY1OSBmbWEgIE5hTiAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2ZtYXgyNjYxIGZtYSAgTmFOOSAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTjkKK2ZtYXgyNjYyIGZtYSAgTmFOOCAgOTk5ICAgIDBFKzk5OTk5OSAgLT4gIE5hTjgKK2ZtYXgyNjYzIGZtYSAgTmFONzEgSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTjcxCitmbWF4MjY2NCBmbWEgIE5hTjYgIE5hTjUgICAwRSs5OTk5OTkgIC0+ICBOYU42CitmbWF4MjY2NSBmbWEgLUluZiAgIE5hTjQgICAwRSs5OTk5OTkgIC0+ICBOYU40CitmbWF4MjY2NiBmbWEgLTk5OSAgIE5hTjMzICAwRSs5OTk5OTkgIC0+ICBOYU4zMworZm1heDI2NjcgZm1hICBJbmYgICBOYU4yICAgMEUrOTk5OTk5ICAtPiAgTmFOMgorCitmbWF4MjY3MSBmbWEgIHNOYU45OSAtSW5mICAgICAwRSs5OTk5OTkgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NzIgZm1hICBzTmFOOTggLTExICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjczIGZtYSAgc05hTjk3ICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY3NCBmbWEgIHNOYU4xNiBzTmFOOTQgICAwRSs5OTk5OTkgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NzUgZm1hICBOYU45NSAgc05hTjkzICAgMEUrOTk5OTk5ICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjc2IGZtYSAtSW5mICAgIHNOYU45MiAgIDBFKzk5OTk5OSAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY3NyBmbWEgIDA4OCAgICBzTmFOOTEgICAwRSs5OTk5OTkgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2NzggZm1hICBJbmYgICAgc05hTjkwICAgMEUrOTk5OTk5ICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjc5IGZtYSAgTmFOICAgIHNOYU44OSAgIDBFKzk5OTk5OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK2ZtYXgyNjgxIGZtYSAtTmFOOSAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLU5hTjkKK2ZtYXgyNjgyIGZtYSAtTmFOOCAgOTk5ICAgIDBFKzk5OTk5OSAgLT4gLU5hTjgKK2ZtYXgyNjgzIGZtYSAtTmFONzEgSW5mICAgIDBFKzk5OTk5OSAgLT4gLU5hTjcxCitmbWF4MjY4NCBmbWEgLU5hTjYgLU5hTjUgICAwRSs5OTk5OTkgIC0+IC1OYU42CitmbWF4MjY4NSBmbWEgLUluZiAgLU5hTjQgICAwRSs5OTk5OTkgIC0+IC1OYU40CitmbWF4MjY4NiBmbWEgLTk5OSAgLU5hTjMzICAwRSs5OTk5OTkgIC0+IC1OYU4zMworZm1heDI2ODcgZm1hICBJbmYgIC1OYU4yICAgMEUrOTk5OTk5ICAtPiAtTmFOMgorCitmbWF4MjY5MSBmbWEgLXNOYU45OSAtSW5mICAgICAwRSs5OTk5OTkgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2OTIgZm1hIC1zTmFOOTggLTExICAgICAgMEUrOTk5OTk5ICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjkzIGZtYSAtc05hTjk3ICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY5NCBmbWEgLXNOYU4xNiAtc05hTjk0ICAwRSs5OTk5OTkgIC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2OTUgZm1hIC1OYU45NSAgLXNOYU45MyAgMEUrOTk5OTk5ICAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjk2IGZtYSAtSW5mICAgIC1zTmFOOTIgIDBFKzk5OTk5OSAgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjY5NyBmbWEgIDA4OCAgICAtc05hTjkxICAwRSs5OTk5OTkgIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI2OTggZm1hICBJbmYgICAgLXNOYU45MCAgMEUrOTk5OTk5ICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNjk5IGZtYSAtTmFOICAgIC1zTmFOODkgIDBFKzk5OTk5OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK2ZtYXgyNzAxIGZtYSAtTmFOICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLU5hTgorZm1heDI3MDIgZm1hIC1OYU4gICA5OTkgICAgMEUrOTk5OTk5ICAtPiAtTmFOCitmbWF4MjcwMyBmbWEgLU5hTiAgIEluZiAgICAwRSs5OTk5OTkgIC0+IC1OYU4KK2ZtYXgyNzA0IGZtYSAtTmFOICAtTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTgorZm1heDI3MDUgZm1hIC1JbmYgIC1OYU4wICAgMEUrOTk5OTk5ICAtPiAtTmFOCitmbWF4MjcwNiBmbWEgLTk5OSAgLU5hTiAgICAwRSs5OTk5OTkgIC0+IC1OYU4KK2ZtYXgyNzA3IGZtYSAgSW5mICAtTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTgorCitmbWF4MjcxMSBmbWEgLXNOYU4gICAtSW5mICAgICAwRSs5OTk5OTkgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNzEyIGZtYSAtc05hTiAgIC0xMSAgICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI3MTMgZm1hIC1zTmFOMDAgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjcxNCBmbWEgLXNOYU4gICAtc05hTiAgICAwRSs5OTk5OTkgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNzE1IGZtYSAtTmFOICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI3MTYgZm1hIC1JbmYgICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MjcxNyBmbWEgIDA4OCAgICAtc05hTiAgICAwRSs5OTk5OTkgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgyNzE4IGZtYSAgSW5mICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDI3MTkgZm1hIC1OYU4gICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cworbWF4ZXhwb25lbnQ6IDk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTkKK2ZtYXgyNzMwIGZtYSArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTkgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitmbWF4MjczMSBmbWEgOUUrOTk5OTk5ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZm1heDI3MzIgZm1hICswLjEwMCA5RS05OTk5OTkgIDBFKzk5OTk5OSAgLT4gOS4wMEUtMTAwMDAwMCBTdWJub3JtYWwKK2ZtYXgyNzMzIGZtYSA5RS05OTk5OTkgKzAuMTAwICAwRSs5OTk5OTkgIC0+IDkuMDBFLTEwMDAwMDAgU3Vibm9ybWFsCitmbWF4MjczNSBmbWEgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5ICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2ZtYXgyNzM2IGZtYSA5RSs5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZm1heDI3MzcgZm1hIC0wLjEwMCA5RS05OTk5OTkgIDBFKzk5OTk5OSAgLT4gLTkuMDBFLTEwMDAwMDAgU3Vibm9ybWFsCitmbWF4MjczOCBmbWEgOUUtOTk5OTk5IC0wLjEwMCAgMEUrOTk5OTk5ICAtPiAtOS4wMEUtMTAwMDAwMCBTdWJub3JtYWwKKworLS0gc2lnbnMKK2ZtYXgyNzUxIGZtYSAgMWUrNzc3Nzc3ICAxZSs0MTExMTEgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NTIgZm1hICAxZSs3Nzc3NzcgLTFlKzQxMTExMSAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc1MyBmbWEgLTFlKzc3Nzc3NyAgMWUrNDExMTExICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzU0IGZtYSAtMWUrNzc3Nzc3IC0xZSs0MTExMTEgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NTUgZm1hICAxZS03Nzc3NzcgIDFlLTQxMTExMSAgMEUrOTk5OTk5ICAtPiAgMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitmbWF4Mjc1NiBmbWEgIDFlLTc3Nzc3NyAtMWUtNDExMTExICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYXgyNzU3IGZtYSAtMWUtNzc3Nzc3ICAxZS00MTExMTEgIDBFKzk5OTk5OSAgLT4gLTBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI3NTggZm1hIC0xZS03Nzc3NzcgLTFlLTQxMTExMSAgMEUrOTk5OTk5ICAtPiAgMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorcHJlY2lzaW9uOiA5CitmbWF4Mjc2MCBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwMSAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDAxIFN1Ym5vcm1hbAorZm1heDI3NjEgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDIgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwMiBTdWJub3JtYWwKK2ZtYXgyNzYyIGZtYSAxZS02MDAwMDAgMWUtNDAwMDAzICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDMgU3Vibm9ybWFsCitmbWF4Mjc2MyBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwNCAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA0IFN1Ym5vcm1hbAorZm1heDI3NjQgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDUgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwNSBTdWJub3JtYWwKK2ZtYXgyNzY1IGZtYSAxZS02MDAwMDAgMWUtNDAwMDA2ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDYgU3Vibm9ybWFsCitmbWF4Mjc2NiBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwNyAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA3IFN1Ym5vcm1hbAorZm1heDI3NjcgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDggIDBFKzk5OTk5OSAgLT4gMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitmbWF4Mjc2OCBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwOSAgMEUrOTk5OTk5ICAtPiAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYXgyNzY5IGZtYSAxZS02MDAwMDAgMWUtNDAwMDEwICAwRSs5OTk5OTkgIC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQorZm1heDI3NzAgZm1hIDFlKzYwMDAwMCAxZSs0MDAwMDEgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc3MSBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwMiAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzcyIGZtYSAxZSs2MDAwMDAgMWUrNDAwMDAzICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NzMgZm1hIDFlKzYwMDAwMCAxZSs0MDAwMDQgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc3NCBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwNSAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzc1IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA2ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NzYgZm1hIDFlKzYwMDAwMCAxZSs0MDAwMDcgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjc3NyBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwOCAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyNzc4IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA5ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDI3NzkgZm1hIDFlKzYwMDAwMCAxZSs0MDAwMTAgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tICdzdWJub3JtYWwnIHRlc3QgZWRnZSBjb25kaXRpb24gYXQgaGlnaGVyIHByZWNpc2lvbnMKK3ByZWNpc2lvbjogOTkKK2ZtYXgyNzgwIGZtYSAxZS02MDAwMDAgMWUtNDAwMDA3ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDcgU3Vibm9ybWFsCitmbWF4Mjc4MSBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwOCAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA4IFN1Ym5vcm1hbAorZm1heDI3ODIgZm1hIDFlLTYwMDAwMCAxZS00MDAwOTcgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDA5NyBTdWJub3JtYWwKK2ZtYXgyNzgzIGZtYSAxZS02MDAwMDAgMWUtNDAwMDk4ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDAwOTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcHJlY2lzaW9uOiA5OTkKK2ZtYXgyNzg0IGZtYSAxZS02MDAwMDAgMWUtNDAwOTk3ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDA5OTcgU3Vibm9ybWFsCitmbWF4Mjc4NSBmbWEgMWUtNjAwMDAwIDFlLTQwMDk5OCAgMEUrOTk5OTk5ICAtPiAwRS0xMDAwOTk3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gdGVzdCBzdWJub3JtYWxzIHJvdW5kaW5nCitwcmVjaXNpb246ICAgNQorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworZm1heDI4MDEgZm1hICAxLjAwMDBFLTk5OSAgMSAgICAgIDBFKzk5OTk5OSAgLT4gMS4wMDAwRS05OTkKK2ZtYXgyODAyIGZtYSAgMS4wMDBFLTk5OSAgIDFlLTEgICAwRSs5OTk5OTkgIC0+IDEuMDAwRS0xMDAwIFN1Ym5vcm1hbAorZm1heDI4MDMgZm1hICAxLjAwRS05OTkgICAgMWUtMiAgIDBFKzk5OTk5OSAgLT4gMS4wMEUtMTAwMSAgU3Vibm9ybWFsCitmbWF4MjgwNCBmbWEgIDEuMEUtOTk5ICAgICAxZS0zICAgMEUrOTk5OTk5ICAtPiAxLjBFLTEwMDIgICBTdWJub3JtYWwKK2ZtYXgyODA1IGZtYSAgMS4wRS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MjgwNiBmbWEgIDEuM0UtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MDcgZm1hICAxLjVFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODA4IGZtYSAgMS43RS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgwOSBmbWEgIDIuM0UtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MTAgZm1hICAyLjVFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODExIGZtYSAgMi43RS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDNFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgxMiBmbWEgIDEuNDlFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MTMgZm1hICAxLjUwRS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODE0IGZtYSAgMS41MUUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgxNSBmbWEgIDIuNDlFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MTYgZm1hICAyLjUwRS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODE3IGZtYSAgMi41MUUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDNFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgyODE4IGZtYSAgMUUtOTk5ICAgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFN1Ym5vcm1hbAorZm1heDI4MTkgZm1hICAzRS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI4MjAgZm1hICA1RS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorZm1heDI4MjEgZm1hICA3RS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODIyIGZtYSAgOUUtOTk5ICAgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgyMyBmbWEgIDkuOUUtOTk5ICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitmbWF4MjgyNCBmbWEgIDFFLTk5OSAgICAgIC0xZS00ICAgMEUrOTk5OTk5ICAtPiAtMUUtMTAwMyAgICBTdWJub3JtYWwKK2ZtYXgyODI1IGZtYSAgM0UtOTk5ICAgICAgLTFlLTUgICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYXgyODI2IGZtYSAtNUUtOTk5ICAgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYXgyODI3IGZtYSAgN0UtOTk5ICAgICAgLTFlLTUgICAwRSs5OTk5OTkgIC0+IC0xRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitmbWF4MjgyOCBmbWEgLTlFLTk5OSAgICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAtMUUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorZm1heDI4MjkgZm1hICA5LjlFLTk5OSAgICAtMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTFFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgyODMwIGZtYSAgMy4wRS05OTkgICAgLTFlLTUgICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworZm1heDI4MzEgZm1hICAxLjBFLTUwMSAgICAgMWUtNTAxICAwRSs5OTk5OTkgIC0+IDEuMEUtMTAwMiAgIFN1Ym5vcm1hbAorZm1heDI4MzIgZm1hICAyLjBFLTUwMSAgICAgMmUtNTAxICAwRSs5OTk5OTkgIC0+IDQuMEUtMTAwMiAgIFN1Ym5vcm1hbAorZm1heDI4MzMgZm1hICA0LjBFLTUwMSAgICAgNGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuNjBFLTEwMDEgIFN1Ym5vcm1hbAorZm1heDI4MzQgZm1hIDEwLjBFLTUwMSAgICAxMGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuMDAwRS0xMDAwIFN1Ym5vcm1hbAorZm1heDI4MzUgZm1hIDMwLjBFLTUwMSAgICAzMGUtNTAxICAwRSs5OTk5OTkgIC0+IDkuMDAwRS0xMDAwIFN1Ym5vcm1hbAorZm1heDI4MzYgZm1hIDQwLjBFLTUwMSAgICA0MGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuNjAwMEUtOTk5CisKKy0tIHNxdWFyZXMKK2ZtYXgyODQwIGZtYSAgMUUtNTAyICAgICAgIDFlLTUwMiAgMEUrOTk5OTk5ICAtPiAwRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitmbWF4Mjg0MSBmbWEgIDFFLTUwMSAgICAgICAxZS01MDEgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMiAgICAgU3Vibm9ybWFsCitmbWF4Mjg0MiBmbWEgIDJFLTUwMSAgICAgICAyZS01MDEgIDBFKzk5OTk5OSAgLT4gNEUtMTAwMiAgICAgU3Vibm9ybWFsCitmbWF4Mjg0MyBmbWEgIDRFLTUwMSAgICAgICA0ZS01MDEgIDBFKzk5OTk5OSAgLT4gMS42RS0xMDAxICAgU3Vibm9ybWFsCitmbWF4Mjg0NCBmbWEgMTBFLTUwMSAgICAgIDEwZS01MDEgIDBFKzk5OTk5OSAgLT4gMS4wMEUtMTAwMCAgU3Vibm9ybWFsCitmbWF4Mjg0NSBmbWEgMzBFLTUwMSAgICAgIDMwZS01MDEgIDBFKzk5OTk5OSAgLT4gOS4wMEUtMTAwMCAgU3Vibm9ybWFsCitmbWF4Mjg0NiBmbWEgNDBFLTUwMSAgICAgIDQwZS01MDEgIDBFKzk5OTk5OSAgLT4gMS42MDBFLTk5OQorCistLSBjdWJlcworZm1heDI4NTAgZm1hICAxRS02NzAgICAgIDFlLTMzNSAgMEUrOTk5OTk5ICAtPiAwRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK2ZtYXgyODUxIGZtYSAgMUUtNjY4ICAgICAxZS0zMzQgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMiAgICBTdWJub3JtYWwKK2ZtYXgyODUyIGZtYSAgNEUtNjY4ICAgICAyZS0zMzQgIDBFKzk5OTk5OSAgLT4gOEUtMTAwMiAgICBTdWJub3JtYWwKK2ZtYXgyODUzIGZtYSAgOUUtNjY4ICAgICAzZS0zMzQgIDBFKzk5OTk5OSAgLT4gMi43RS0xMDAxICBTdWJub3JtYWwKK2ZtYXgyODU0IGZtYSAxNkUtNjY4ICAgICA0ZS0zMzQgIDBFKzk5OTk5OSAgLT4gNi40RS0xMDAxICBTdWJub3JtYWwKK2ZtYXgyODU1IGZtYSAyNUUtNjY4ICAgICA1ZS0zMzQgIDBFKzk5OTk5OSAgLT4gMS4yNUUtMTAwMCBTdWJub3JtYWwKK2ZtYXgyODU2IGZtYSAxMEUtNjY4ICAgMTAwZS0zMzQgIDBFKzk5OTk5OSAgLT4gMS4wMDBFLTk5OQorCistLSB0ZXN0IGRlcml2ZWQgZnJvbSByZXN1bHQgb2YgMC4wOTkgKiogOTk5IGF0IDE1IGRpZ2l0cyB3aXRoIHVubGltaXRlZCBleHBvbmVudAorcHJlY2lzaW9uOiAxOQorZm1heDI4NjAgZm1hICA2NjM2ODUxNTU3OTk0NTc4NzE2RS01MjAgNjYzNjg1MTU1Nzk5NDU3ODcxNkUtNTIwICAwRSs5OTk5OTkgIC0+IDQuNDA0Nzc5ODYwMjg1NTFFLTEwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gTG9uZyBvcGVyYW5kIG92ZXJmbG93IG1heSBiZSBhIGRpZmZlcmVudCBwYXRoCitwcmVjaXNpb246IDMKK21heEV4cG9uZW50OiA5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5CitmbWF4Mjg3MCBmbWEgMSAgOS45OTlFKzk5OTk5OSAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2ZtYXgyODcxIGZtYSAxIC05Ljk5OUUrOTk5OTk5ICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorZm1heDI4NzIgZm1hICAgIDkuOTk5RSs5OTk5OTkgMSAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitmbWF4Mjg3MyBmbWEgICAtOS45OTlFKzk5OTk5OSAxICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK3ByZWNpc2lvbjogICA1CittYXhleHBvbmVudDogNzkKK21pbmV4cG9uZW50OiAtNzkKK2ZtYXgyODgxIGZtYSAgMS4yMzQ3RS00MCAgMS4yMzQ3RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTI0RS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgyODgyIGZtYSAgMS4yMzRFLTQwICAxLjIzNEUtNDAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNTIzRS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgyODgzIGZtYSAgMS4yM0UtNDAgICAxLjIzRS00MCAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNTEzRS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgyODg0IGZtYSAgMS4yRS00MCAgICAxLjJFLTQwICAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNDRFLTgwICAgU3Vibm9ybWFsCitmbWF4Mjg4NSBmbWEgIDEuMkUtNDAgICAgMS4yRS00MSAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjQ0RS04MSAgIFN1Ym5vcm1hbAorZm1heDI4ODYgZm1hICAxLjJFLTQwICAgIDEuMkUtNDIgICAgICAgMEUrOTk5OTk5ICAtPiAgMS40RS04MiAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDI4ODcgZm1hICAxLjJFLTQwICAgIDEuM0UtNDIgICAgICAgMEUrOTk5OTk5ICAtPiAgMS42RS04MiAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDI4ODggZm1hICAxLjNFLTQwICAgIDEuM0UtNDIgICAgICAgMEUrOTk5OTk5ICAtPiAgMS43RS04MiAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDI4ODkgZm1hICAxLjNFLTQwICAgIDEuM0UtNDMgICAgICAgMEUrOTk5OTk5ICAtPiAgICAyRS04MyAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDI4OTAgZm1hICAxLjNFLTQxICAgIDEuM0UtNDMgICAgICAgMEUrOTk5OTk5ICAtPiAgICAwRS04MyAgICBDbGFtcGVkIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKK2ZtYXgyODkxIGZtYSAgMS4yMzQ1RS0zOSAgIDEuMjM0RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTIzNEUtNzkgSW5leGFjdCBSb3VuZGVkCitmbWF4Mjg5MiBmbWEgIDEuMjM0NTZFLTM5ICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyMzRFLTc5IEluZXhhY3QgUm91bmRlZAorZm1heDI4OTMgZm1hICAxLjIzNDVFLTQwICAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MjNFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDI4OTQgZm1hICAxLjIzNDU2RS00MCAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MjNFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDI4OTUgZm1hICAxLjIzNDVFLTQxICAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MkUtODEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDI4OTYgZm1hICAxLjIzNDU2RS00MSAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MkUtODEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCistLSBOb3cgZXhwbG9yZSB0aGUgY2FzZSB3aGVyZSB3ZSBnZXQgYSBub3JtYWwgcmVzdWx0IHdpdGggVW5kZXJmbG93CitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworCitmbWF4MjkwMCBmbWEgIDAuMzAwMDAwMDAwMEUtMTkxIDAuMzAwMDAwMDAwMEUtMTkxICAwRSs5OTk5OTkgIC0+IDkuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZAorZm1heDI5MDEgZm1hICAwLjMwMDAwMDAwMDFFLTE5MSAwLjMwMDAwMDAwMDFFLTE5MSAgMEUrOTk5OTk5ICAtPiA5LjAwMDAwMDAwNjAwMDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgyOTAyIGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5ICAgICAgICAgIDBFKzk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTAwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MjkwMyBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTkgICAgICAgICAwRSs5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTk5MDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDI5MDQgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OSAgICAgICAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5OTkwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgyOTA1IGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5ICAgICAgIDBFKzk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCistLSBwcm92ZSBvcGVyYW5kcyBhcmUgZXhhY3QKK2ZtYXgyOTA2IGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMSAgICAgICAgICAgICAgICAgICAgICAgIDBFKzk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTM4MworZm1heDI5MDcgZm1hICAgICAgICAgICAgICAgICAgICAgICAxICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAgMEUrOTk5OTk5ICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5CistLSB0aGUgbmV4dCByb3VuZHMgdG8gTm1pbgorZm1heDI5MDggZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAgMEUrOTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MjkwOSBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTk5ICAgICAwRSs5OTk5OTkgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgyOTEwIGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OTk5ICAgIDBFKzk5OTk5OSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDI5MTEgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5ICAgMEUrOTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorcHJlY2lzaW9uOiAgIDM0Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0MworZm1heDI5MjEgIGZtYSAxMzBFLTIgIDEyMEUtMiAgMEUrOTk5OTk5ICAtPiAxLjU2MDAKK2ZtYXgyOTIyICBmbWEgMTMwRS0yICAxMkUtMSAgIDBFKzk5OTk5OSAgLT4gMS41NjAKK2ZtYXgyOTIzICBmbWEgMTMwRS0yICAxRTAgICAgIDBFKzk5OTk5OSAgLT4gMS4zMAorCistLSBOdWxsIHRlc3RzCitmbWF4Mjk5MCBmbWEgICMgMTAgIDBFKzk5OTk5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mjk5MSBmbWEgMTAgICMgIDBFKzk5OTk5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEFERElUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK2ZtYXgzMDAxIGZtYSAgMSAgIDEgICAgICAgMSAgICAgICAtPiAgMgorZm1heDMwMDIgZm1hICAxICAgMiAgICAgICAzICAgICAgIC0+ICA1CitmbWF4MzAwMyBmbWEgIDEgICAnNS43NScgICczLjMnICAgLT4gIDkuMDUKK2ZtYXgzMDA0IGZtYSAgMSAgICc1JyAgICAgJy0zJyAgICAtPiAgMgorZm1heDMwMDUgZm1hICAxICAgJy01JyAgICAnLTMnICAgIC0+ICAtOAorZm1heDMwMDYgZm1hICAxICAgJy03JyAgICAnMi41JyAgIC0+ICAtNC41CitmbWF4MzAwNyBmbWEgIDEgICAnMC43JyAgICcwLjMnICAgLT4gIDEuMAorZm1heDMwMDggZm1hICAxICAgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwCitmbWF4MzAwOSBmbWEgIDEgICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScKK2ZtYXgzMDEwIGZtYSAgMSAgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJworCitmbWF4MzAxMSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDMwMTIgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0MCcgICcwLjU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDEzIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAorZm1heDMwMTQgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDknICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZm1heDMwMTUgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDk5JyAgICcwJyAtPiAnMC40NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZm1heDMwMTYgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDk5OScgICcwJyAtPiAnMC40NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorZm1heDMwMTcgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NTAwMCcgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorZm1heDMwMTggZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NTAwMScgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorZm1heDMwMTkgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NTAxJyAgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorZm1heDMwMjAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NTEnICAgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzAyMSBmbWEgIDEgICAwIDEgLT4gMQorZm1heDMwMjIgZm1hICAxICAgMSAxIC0+IDIKK2ZtYXgzMDIzIGZtYSAgMSAgIDIgMSAtPiAzCitmbWF4MzAyNCBmbWEgIDEgICAzIDEgLT4gNAorZm1heDMwMjUgZm1hICAxICAgNCAxIC0+IDUKK2ZtYXgzMDI2IGZtYSAgMSAgIDUgMSAtPiA2CitmbWF4MzAyNyBmbWEgIDEgICA2IDEgLT4gNworZm1heDMwMjggZm1hICAxICAgNyAxIC0+IDgKK2ZtYXgzMDI5IGZtYSAgMSAgIDggMSAtPiA5CitmbWF4MzAzMCBmbWEgIDEgICA5IDEgLT4gMTAKKworLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCitmbWF4MzAzMSBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKK2ZtYXgzMDMyIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk5JworZm1heDMwMzMgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnCitmbWF4MzAzNCBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScKKworZm1heDMwMzUgZm1hICAxICAgJzcwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorZm1heDMwMzYgZm1hICAxICAgJzcwMCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDM3IGZtYSAgMSAgICc3MDAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorZm1heDMwMzggZm1hICAxICAgJzcwMDAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMUUrMTMnIEluZXhhY3QgUm91bmRlZAorZm1heDMwMzkgZm1hICAxICAgJzcwMDAwMCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDdFKzEzJyBSb3VuZGVkCisKKy0tIHN5bW1ldHJ5OgorZm1heDMwNDAgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorZm1heDMwNDEgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDQyIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorZm1heDMwNDQgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMUUrMTMnIEluZXhhY3QgUm91bmRlZAorZm1heDMwNDUgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDdFKzEzJyBSb3VuZGVkCisKKy0tIHNhbWUsIGhpZ2hlciBwcmVjaXNpb24KK3ByZWNpc2lvbjogMTUKK2ZtYXgzMDQ2IGZtYSAgMSAgICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnCitmbWF4MzA0NyBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcKK2ZtYXgzMDQ4IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcKK2ZtYXgzMDQ5IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnCitmbWF4MzA1MCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcKK2ZtYXgzMDUxIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcKK2ZtYXgzMDUyIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK2ZtYXgzMDUzIGZtYSAgMSAgICcxMicgJzcuMDAnIC0+ICcxOS4wMCcKK2ZtYXgzMDU0IGZtYSAgMSAgICcxLjMnICctMS4wNycgLT4gJzAuMjMnCitmbWF4MzA1NSBmbWEgIDEgICAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJworZm1heDMwNTYgZm1hICAxICAgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnCitmbWF4MzA1NyBmbWEgIDEgICAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0JworCistLSB6ZXJvIHByZXNlcnZhdGlvbgorcHJlY2lzaW9uOiA2CitmbWF4MzA2MCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxLjAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzA2MSBmbWEgIDEgICAxICcwLjAwMDEnIC0+ICcxLjAwMDEnCitmbWF4MzA2MiBmbWEgIDEgICAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScKK2ZtYXgzMDYzIGZtYSAgMSAgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzA2NCBmbWEgIDEgICAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMDY1IGZtYSAgMSAgIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKKworLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQorZm1heDMwNzAgZm1hICAxICAgMSAgMCAgICAtPiAxCitmbWF4MzA3MSBmbWEgIDEgICAxIDAuICAgIC0+IDEKK2ZtYXgzMDcyIGZtYSAgMSAgIDEgIC4wICAgLT4gMS4wCitmbWF4MzA3MyBmbWEgIDEgICAxIDAuMCAgIC0+IDEuMAorZm1heDMwNzQgZm1hICAxICAgMSAwLjAwICAtPiAxLjAwCitmbWF4MzA3NSBmbWEgIDEgICAgMCAgMSAgIC0+IDEKK2ZtYXgzMDc2IGZtYSAgMSAgIDAuICAxICAgLT4gMQorZm1heDMwNzcgZm1hICAxICAgIC4wIDEgICAtPiAxLjAKK2ZtYXgzMDc4IGZtYSAgMSAgIDAuMCAxICAgLT4gMS4wCitmbWF4MzA3OSBmbWEgIDEgICAwLjAwIDEgIC0+IDEuMDAKKworcHJlY2lzaW9uOiA5CisKKy0tIHNvbWUgY2FycmllcworZm1heDMwODAgZm1hICAxICAgOTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OQorZm1heDMwODEgZm1hICAxICAgOTk5OTk5OTk5IDEgIC0+IDEuMDAwMDAwMDBFKzkgUm91bmRlZAorZm1heDMwODIgZm1hICAxICAgIDk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMAorZm1heDMwODMgZm1hICAxICAgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwCitmbWF4MzA4NCBmbWEgIDEgICAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMAorZm1heDMwODUgZm1hICAxICAgICAgIDk5OTk5IDEgIC0+IDEwMDAwMAorZm1heDMwODYgZm1hICAxICAgICAgICA5OTk5IDEgIC0+IDEwMDAwCitmbWF4MzA4NyBmbWEgIDEgICAgICAgICA5OTkgMSAgLT4gMTAwMAorZm1heDMwODggZm1hICAxICAgICAgICAgIDk5IDEgIC0+IDEwMAorZm1heDMwODkgZm1hICAxICAgICAgICAgICA5IDEgIC0+IDEwCisKKworLS0gbW9yZSBMSFMgc3dhcHMKK2ZtYXgzMDkwIGZtYSAgMSAgICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JworZm1heDMwOTEgZm1hICAxICAgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKK2ZtYXgzMDkyIGZtYSAgMSAgICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKK2ZtYXgzMDkzIGZtYSAgMSAgICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JworZm1heDMwOTQgZm1hICAxICAgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCitmbWF4MzA5NSBmbWEgIDEgICAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKK2ZtYXgzMDk2IGZtYSAgMSAgICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JworZm1heDMwOTcgZm1hICAxICAgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKK2ZtYXgzMDk4IGZtYSAgMSAgICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCitmbWF4MzA5OSBmbWEgIDEgICAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCitmbWF4MzEwMCBmbWEgIDEgICAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JworZm1heDMxMDEgZm1hICAxICAgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JworZm1heDMxMDIgZm1hICAxICAgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCitmbWF4MzEwMyBmbWEgIDEgICAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKK2ZtYXgzMTA0IGZtYSAgMSAgICctNUUwJyAgICAgICAgIDAgLT4gICctNScKK2ZtYXgzMTA1IGZtYSAgMSAgICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCitmbWF4MzEwNiBmbWEgIDEgICAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKK2ZtYXgzMTA3IGZtYSAgMSAgICctNUU4JyAgICAgICAgIDAgLT4gICctNTAwMDAwMDAwJworZm1heDMxMDggZm1hICAxICAgJy01RTknICAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwRSs5JyAgIFJvdW5kZWQKK2ZtYXgzMTA5IGZtYSAgMSAgICctNUUxMCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrMTAnICBSb3VuZGVkCitmbWF4MzExMCBmbWEgIDEgICAnLTVFMTEnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzExJyAgUm91bmRlZAorZm1heDMxMTEgZm1hICAxICAgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKKworLS0gbW9yZSBSSFMgc3dhcHMKK2ZtYXgzMTEzIGZtYSAgMSAgIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnCitmbWF4MzExNCBmbWEgIDEgICAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnCitmbWF4MzExNiBmbWEgIDEgICAwICAnLTU2MjY3RS01JyAgLT4gICctMC41NjI2NycKK2ZtYXgzMTE3IGZtYSAgMSAgIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnCitmbWF4MzExOSBmbWEgIDEgICAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3JworZm1heDMxMjAgZm1hICAxICAgMCAgJy01NjI2N0UtMicgIC0+ICAnLTU2Mi42NycKK2ZtYXgzMTIxIGZtYSAgMSAgIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnCitmbWF4MzEyMiBmbWEgIDEgICAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnCitmbWF4MzEyMyBmbWEgIDEgICAwICAnLTVFLTEwJyAgICAgLT4gICctNUUtMTAnCitmbWF4MzEyNCBmbWEgIDEgICAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycKK2ZtYXgzMTI1IGZtYSAgMSAgIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScKK2ZtYXgzMTI2IGZtYSAgMSAgIDAgICctNUUtNScgICAgICAtPiAgJy0wLjAwMDA1JworZm1heDMxMjcgZm1hICAxICAgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScKK2ZtYXgzMTI4IGZtYSAgMSAgIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnCitmbWF4MzEyOSBmbWEgIDEgICAwICAnLTVFMCcgICAgICAgLT4gICctNScKK2ZtYXgzMTMwIGZtYSAgMSAgIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcKK2ZtYXgzMTMxIGZtYSAgMSAgIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnCitmbWF4MzEzMiBmbWEgIDEgICAwICAnLTVFOCcgICAgICAgLT4gICctNTAwMDAwMDAwJworZm1heDMxMzMgZm1hICAxICAgMCAgJy01RTknICAgICAgIC0+ICAnLTUuMDAwMDAwMDBFKzknICAgIFJvdW5kZWQKK2ZtYXgzMTM0IGZtYSAgMSAgIDAgICctNUUxMCcgICAgICAtPiAgJy01LjAwMDAwMDAwRSsxMCcgICBSb3VuZGVkCitmbWF4MzEzNSBmbWEgIDEgICAwICAnLTVFMTEnICAgICAgLT4gICctNS4wMDAwMDAwMEUrMTEnICAgUm91bmRlZAorZm1heDMxMzYgZm1hICAxICAgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQKKworLS0gcmVsYXRlZAorZm1heDMxMzcgZm1hICAxICAgIDEgICcwRS0xMicgICAgICAtPiAgJzEuMDAwMDAwMDAnICBSb3VuZGVkCitmbWF4MzEzOCBmbWEgIDEgICAtMSAgJzBFLTEyJyAgICAgIC0+ICAnLTEuMDAwMDAwMDAnIFJvdW5kZWQKK2ZtYXgzMTM5IGZtYSAgMSAgICcwRS0xMicgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwJyAgUm91bmRlZAorZm1heDMxNDAgZm1hICAxICAgJzBFLTEyJyAtMSAgICAgICAtPiAgJy0xLjAwMDAwMDAwJyBSb3VuZGVkCitmbWF4MzE0MSBmbWEgIDEgICAxRSs0ICAgIDAuMDAwMCAgIC0+ICAnMTAwMDAuMDAwMCcKK2ZtYXgzMTQyIGZtYSAgMSAgIDFFKzQgICAgMC4wMDAwMCAgLT4gICcxMDAwMC4wMDAwJyAgUm91bmRlZAorZm1heDMxNDMgZm1hICAxICAgMC4wMDAgICAxRSs1ICAgICAtPiAgJzEwMDAwMC4wMDAnCitmbWF4MzE0NCBmbWEgIDEgICAwLjAwMDAgIDFFKzUgICAgIC0+ICAnMTAwMDAwLjAwMCcgIFJvdW5kZWQKKworLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10KK2ZtYXgzMTQ2IGZtYSAgMSAgICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcKK2ZtYXgzMTQ3IGZtYSAgMSAgICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnCitmbWF4MzE0OCBmbWEgIDEgICAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJworZm1heDMxNDkgZm1hICAxICAgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJworZm1heDMxNTAgZm1hICAxICAgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcKK2ZtYXgzMTUxIGZtYSAgMSAgICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnCitmbWF4MzE1MiBmbWEgIDEgICAnMycgICAgICcuMycgICAgLT4gICczLjMnCitmbWF4MzE1MyBmbWEgIDEgICAnMy4nICAgICcuMycgICAgLT4gICczLjMnCitmbWF4MzE1NCBmbWEgIDEgICAnMy4wJyAgICcuMycgICAgLT4gICczLjMnCitmbWF4MzE1NSBmbWEgIDEgICAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJworZm1heDMxNTYgZm1hICAxICAgJzMnICAgICAnMycgICAgIC0+ICAnNicKK2ZtYXgzMTU3IGZtYSAgMSAgICczJyAgICAgJyszJyAgICAtPiAgJzYnCitmbWF4MzE1OCBmbWEgIDEgICAnMycgICAgICctMycgICAgLT4gICcwJworZm1heDMxNTkgZm1hICAxICAgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJworZm1heDMxNjAgZm1hICAxICAgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcKKworLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KK3ByZWNpc2lvbjogMTUKK2ZtYXgzMTYxIGZtYSAgMSAgICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5JworZm1heDMxNjIgZm1hICAxICAgJzFFKzEyJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAxLjExJworZm1heDMxNjMgZm1hICAxICAgJzEuMTEnICAnMUUrMTInIC0+ICcxMDAwMDAwMDAwMDAxLjExJworZm1heDMxNjQgZm1hICAxICAgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknCitmbWF4MzE2NSBmbWEgIDEgICAnN0UrMTInICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTknCitmbWF4MzE2NiBmbWEgIDEgICAnN0UrMTInICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitmbWF4MzE2NyBmbWEgIDEgICAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitmbWF4MzE2OCBmbWEgIDEgICAnLTEnICAgICc3RSsxMicgLT4gJzY5OTk5OTk5OTk5OTknCisKKy0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NSAgICAgIDEyMzQ1Njc4OTAxMjM0NSAgICAgIDEgMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTcwIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU2MycgLT4gJzEuMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorZm1heDMxNzEgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTYyJyAtPiAnMS4wMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzE3MiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjEnIC0+ICcxLjAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTczIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU2MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDMxNzQgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU5JyAtPiAnMS4wMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzE3NSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTgnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTc2IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NycgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDMxNzcgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMCcgUm91bmRlZAorZm1heDMxNzggZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTknCitmbWF4MzE3OSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OCcKK2ZtYXgzMTgwIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1MycgLT4gJzAuOTk5OTk5OTk5OTk5OTk3JworZm1heDMxODEgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUyJyAtPiAnMC45OTk5OTk5OTk5OTk5OTYnCitmbWF4MzE4MiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5NScKK2ZtYXgzMTgzIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk0JworCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCitwcmVjaXNpb246IDkKK3JvdW5kaW5nOiBoYWxmX3VwCitmbWF4MzIwMCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTY3ODknCitmbWF4MzIwMSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMDIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjAzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIwNCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMDUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjA2IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIwNyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMDggZm1hICAxICAgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjA5IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIxMCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMTEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjEyIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIxMyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMTQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjE1IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIxNiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnCitmbWF4MzIxNyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMTggZm1hICAxICAgJzEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjE5IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2ZtYXgzMjIwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScKK2ZtYXgzMjIxIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIyMiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMjMgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjI0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIyNSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyMjYgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjI3IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIyOCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMjkgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjMwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIzMSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMzIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjMzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIzNCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMzUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjM2IGZtYSAgMSAgICcxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcKK2ZtYXgzMjM3IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzIzOCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyMzkgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitmbWF4MzI0MCBmbWEgIDEgICAnMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZm1heDMyNDEgZm1hICAxICAgJzEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjQyIGZtYSAgMSAgICcxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitmbWF4MzI1MCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTY3ODknCitmbWF4MzI1MSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNTIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjUzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI1NCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNTUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjU2IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI1NyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNTggZm1hICAxICAgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjU5IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI2MCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNjEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjYyIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI2MyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDMyNjQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjY1IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI2NiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnCitmbWF4MzI2NyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDMyNjggZm1hICAxICAgJzEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjY5IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIGlucHV0IHByZXBhcmF0aW9uIHRlc3RzIChvcGVyYW5kcyBzaG91bGQgbm90IGJlIHJvdW5kZWQpCitwcmVjaXNpb246IDMKK3JvdW5kaW5nOiBoYWxmX3VwCisKK2ZtYXgzMjcwIGZtYSAgMSAgICcxMjM0NTY3ODkwMDAwMCcgIDk5OTk5OTk5OTk5OTkgLT4gICcyLjIzRSsxMycgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI3MSBmbWEgIDEgICAgJzk5OTk5OTk5OTk5OTknIDEyMzQ1Njc4OTAwMDAwIC0+ICAnMi4yM0UrMTMnIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzI3MiBmbWEgIDEgICAnMTJFKzMnICAnMzQ0NCcgICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyNzMgZm1hICAxICAgJzEyRSszJyAgJzM0NDYnICAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjc0IGZtYSAgMSAgICcxMkUrMycgICczNDQ5LjknIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI3NSBmbWEgIDEgICAnMTJFKzMnICAnMzQ1MC4wJyAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyNzYgZm1hICAxICAgJzEyRSszJyAgJzM0NTAuMScgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjc3IGZtYSAgMSAgICcxMkUrMycgICczNDU0JyAgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI3OCBmbWEgIDEgICAnMTJFKzMnICAnMzQ1NicgICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzI4MSBmbWEgIDEgICAnMzQ0NCcgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyODIgZm1hICAxICAgJzM0NDYnICAgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjgzIGZtYSAgMSAgICczNDQ5LjknICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI4NCBmbWEgIDEgICAnMzQ1MC4wJyAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyODUgZm1hICAxICAgJzM0NTAuMScgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjg2IGZtYSAgMSAgICczNDU0JyAgICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI4NyBmbWEgIDEgICAnMzQ1NicgICAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9kb3duCitmbWF4MzI5MSBmbWEgIDEgICAnMzQ0NCcgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyOTIgZm1hICAxICAgJzM0NDYnICAgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjkzIGZtYSAgMSAgICczNDQ5LjknICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI5NCBmbWEgIDEgICAnMzQ1MC4wJyAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorZm1heDMyOTUgZm1hICAxICAgJzM0NTAuMScgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMjk2IGZtYSAgMSAgICczNDU0JyAgICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzI5NyBmbWEgIDEgICAnMzQ1NicgICAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorCistLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMKK3JvdW5kaW5nOiBoYWxmX3VwCitmbWF4MzMwMSBmbWEgIDEgICAgLTEgICAxICAgICAgLT4gICAwCitmbWF4MzMwMiBmbWEgIDEgICAgIDAgICAxICAgICAgLT4gICAxCitmbWF4MzMwMyBmbWEgIDEgICAgIDEgICAxICAgICAgLT4gICAyCitmbWF4MzMwNCBmbWEgIDEgICAgMTIgICAxICAgICAgLT4gIDEzCitmbWF4MzMwNSBmbWEgIDEgICAgOTggICAxICAgICAgLT4gIDk5CitmbWF4MzMwNiBmbWEgIDEgICAgOTkgICAxICAgICAgLT4gMTAwCitmbWF4MzMwNyBmbWEgIDEgICAxMDAgICAxICAgICAgLT4gMTAxCitmbWF4MzMwOCBmbWEgIDEgICAxMDEgICAxICAgICAgLT4gMTAyCitmbWF4MzMwOSBmbWEgIDEgICAgLTEgIC0xICAgICAgLT4gIC0yCitmbWF4MzMxMCBmbWEgIDEgICAgIDAgIC0xICAgICAgLT4gIC0xCitmbWF4MzMxMSBmbWEgIDEgICAgIDEgIC0xICAgICAgLT4gICAwCitmbWF4MzMxMiBmbWEgIDEgICAgMTIgIC0xICAgICAgLT4gIDExCitmbWF4MzMxMyBmbWEgIDEgICAgOTggIC0xICAgICAgLT4gIDk3CitmbWF4MzMxNCBmbWEgIDEgICAgOTkgIC0xICAgICAgLT4gIDk4CitmbWF4MzMxNSBmbWEgIDEgICAxMDAgIC0xICAgICAgLT4gIDk5CitmbWF4MzMxNiBmbWEgIDEgICAxMDEgIC0xICAgICAgLT4gMTAwCisKK2ZtYXgzMzIxIGZtYSAgMSAgIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwCitmbWF4MzMyMiBmbWEgIDEgICAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQorZm1heDMzMjMgZm1hICAxICAgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDIKK2ZtYXgzMzI0IGZtYSAgMSAgICAwLjEyICAwLjAxICAgIC0+ICAwLjEzCitmbWF4MzMyNSBmbWEgIDEgICAgMC45OCAgMC4wMSAgICAtPiAgMC45OQorZm1heDMzMjYgZm1hICAxICAgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDAKK2ZtYXgzMzI3IGZtYSAgMSAgICAxLjAwICAwLjAxICAgIC0+ICAxLjAxCitmbWF4MzMyOCBmbWEgIDEgICAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMgorZm1heDMzMjkgZm1hICAxICAgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDIKK2ZtYXgzMzMwIGZtYSAgMSAgICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxCitmbWF4MzMzMSBmbWEgIDEgICAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMAorZm1heDMzMzIgZm1hICAxICAgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTEKK2ZtYXgzMzMzIGZtYSAgMSAgICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3CitmbWF4MzMzNCBmbWEgIDEgICAgMC45OSAtMC4wMSAgICAtPiAgMC45OAorZm1heDMzMzUgZm1hICAxICAgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkKK2ZtYXgzMzM2IGZtYSAgMSAgICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwCisKKy0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBmbWEgIDEgIGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50CitwcmVjaXNpb246IDkKK2ZtYXgzMzQwIGZtYSAgMSAgIDFFKzMgICAgMCAgICAtPiAgICAgICAgIDEwMDAKK2ZtYXgzMzQxIGZtYSAgMSAgIDFFKzggICAgMCAgICAtPiAgICAxMDAwMDAwMDAKK2ZtYXgzMzQyIGZtYSAgMSAgIDFFKzkgICAgMCAgICAtPiAgIDEuMDAwMDAwMDBFKzkgICBSb3VuZGVkCitmbWF4MzM0MyBmbWEgIDEgICAxRSsxMCAgIDAgICAgLT4gICAxLjAwMDAwMDAwRSsxMCAgUm91bmRlZAorLS0gd2hpY2ggc2ltcGx5IGZvbGxvdyBmcm9tIHRoZXNlIGNhc2VzIC4uLgorZm1heDMzNDQgZm1hICAxICAgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQorZm1heDMzNDUgZm1hICAxICAgMUUrOCAgICAxICAgIC0+ICAgIDEwMDAwMDAwMQorZm1heDMzNDYgZm1hICAxICAgMUUrOSAgICAxICAgIC0+ICAgMS4wMDAwMDAwMEUrOSAgIEluZXhhY3QgUm91bmRlZAorZm1heDMzNDcgZm1hICAxICAgMUUrMTAgICAxICAgIC0+ICAgMS4wMDAwMDAwMEUrMTAgIEluZXhhY3QgUm91bmRlZAorZm1heDMzNDggZm1hICAxICAgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNworZm1heDMzNDkgZm1hICAxICAgMUUrOCAgICA3ICAgIC0+ICAgIDEwMDAwMDAwNworZm1heDMzNTAgZm1hICAxICAgMUUrOSAgICA3ICAgIC0+ICAgMS4wMDAwMDAwMUUrOSAgIEluZXhhY3QgUm91bmRlZAorZm1heDMzNTEgZm1hICAxICAgMUUrMTAgICA3ICAgIC0+ICAgMS4wMDAwMDAwMEUrMTAgIEluZXhhY3QgUm91bmRlZAorCistLSB0cnl6ZXJvcyBjYXNlcworcHJlY2lzaW9uOiAgIDcKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTIKK21pbmV4cG9uZW50OiAtOTIKK2ZtYXgzMzYxICBmbWEgIDEgICAwRSs1MCAxMDAwMEUrMSAgLT4gMS4wMDAwRSs1CitmbWF4MzM2MiAgZm1hICAxICAgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wICBSb3VuZGVkCitmbWF4MzM2MyAgZm1hICAxICAgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMCAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzM2NCAgZm1hICAxICAgOS45OTk5OTlFKzkyIC05Ljk5OTk5OUUrOTIgLT4gMEUrODYKKworLS0gYSBjdXJpb3NpdHkgZnJvbSBKU1IgMTMgdGVzdGluZworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorcHJlY2lzaW9uOiAgIDEwCitmbWF4MzM3MCBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxMDAwODE1MTEKK3ByZWNpc2lvbjogICAgICA2CitmbWF4MzM3MSBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxLjAwMDgyRSs4IFJvdW5kZWQgSW5leGFjdAorcm91bmRpbmc6ICAgIGhhbGZfdXAKK3ByZWNpc2lvbjogICAxMAorZm1heDMzNzIgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMTAwMDgxNTExCitwcmVjaXNpb246ICAgICAgNgorZm1heDMzNzMgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMS4wMDA4MkUrOCBSb3VuZGVkIEluZXhhY3QKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK3ByZWNpc2lvbjogICAxMAorZm1heDMzNzQgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMTAwMDgxNTExCitwcmVjaXNpb246ICAgICAgNgorZm1heDMzNzUgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMS4wMDA4MkUrOCBSb3VuZGVkIEluZXhhY3QKKworLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzCitwcmVjaXNpb246IDkKK21heGV4cG9uZW50OiA5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5CitmbWF4MzQwMCBmbWEgIDEgICAgIDEgICA3N2UtNyAgICAgICAtPiAgMS4wMDAwMDc3CitmbWF4MzQwMSBmbWEgIDEgICAgIDEgICA3N2UtOCAgICAgICAtPiAgMS4wMDAwMDA3NworZm1heDM0MDIgZm1hICAxICAgICAxICAgNzdlLTkgICAgICAgLT4gIDEuMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitmbWF4MzQwMyBmbWEgIDEgICAgIDEgICA3N2UtMTAgICAgICAtPiAgMS4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDA0IGZtYSAgMSAgICAgMSAgIDc3ZS0xMSAgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MDUgZm1hICAxICAgICAxICAgNzdlLTEyICAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQwNiBmbWEgIDEgICAgIDEgICA3N2UtOTk5ICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDA3IGZtYSAgMSAgICAgMSAgIDc3ZS05OTk5OTkgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzQxMCBmbWEgIDEgICAgMTAgICA3N2UtNyAgICAgICAtPiAgMTAuMDAwMDA3NworZm1heDM0MTEgZm1hICAxICAgIDEwICAgNzdlLTggICAgICAgLT4gIDEwLjAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitmbWF4MzQxMiBmbWEgIDEgICAgMTAgICA3N2UtOSAgICAgICAtPiAgMTAuMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDEzIGZtYSAgMSAgICAxMCAgIDc3ZS0xMCAgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MTQgZm1hICAxICAgIDEwICAgNzdlLTExICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQxNSBmbWEgIDEgICAgMTAgICA3N2UtMTIgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDE2IGZtYSAgMSAgICAxMCAgIDc3ZS05OTkgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MTcgZm1hICAxICAgIDEwICAgNzdlLTk5OTk5OSAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNDIwIGZtYSAgMSAgICA3N2UtNyAgICAgICAgMSAgIC0+ICAxLjAwMDAwNzcKK2ZtYXgzNDIxIGZtYSAgMSAgICA3N2UtOCAgICAgICAgMSAgIC0+ICAxLjAwMDAwMDc3CitmbWF4MzQyMiBmbWEgIDEgICAgNzdlLTkgICAgICAgIDEgICAtPiAgMS4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDIzIGZtYSAgMSAgICA3N2UtMTAgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM0MjQgZm1hICAxICAgIDc3ZS0xMSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQyNSBmbWEgIDEgICAgNzdlLTEyICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDI2IGZtYSAgMSAgICA3N2UtOTk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MjcgZm1hICAxICAgIDc3ZS05OTk5OTkgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNDMwIGZtYSAgMSAgICA3N2UtNyAgICAgICAxMCAgIC0+ICAxMC4wMDAwMDc3CitmbWF4MzQzMSBmbWEgIDEgICAgNzdlLTggICAgICAgMTAgICAtPiAgMTAuMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDMyIGZtYSAgMSAgICA3N2UtOSAgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM0MzMgZm1hICAxICAgIDc3ZS0xMCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQzNCBmbWEgIDEgICAgNzdlLTExICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDM1IGZtYSAgMSAgICA3N2UtMTIgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0MzYgZm1hICAxICAgIDc3ZS05OTkgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQzNyBmbWEgIDEgICAgNzdlLTk5OTk5OSAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgdWxwcworZm1heDM0NDAgZm1hICAxICAgICAxICAgLTc3ZS03ICAgICAgIC0+ICAwLjk5OTk5MjMKK2ZtYXgzNDQxIGZtYSAgMSAgICAgMSAgIC03N2UtOCAgICAgICAtPiAgMC45OTk5OTkyMworZm1heDM0NDIgZm1hICAxICAgICAxICAgLTc3ZS05ICAgICAgIC0+ICAwLjk5OTk5OTkyMworZm1heDM0NDMgZm1hICAxICAgICAxICAgLTc3ZS0xMCAgICAgIC0+ICAwLjk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDQ0IGZtYSAgMSAgICAgMSAgIC03N2UtMTEgICAgICAtPiAgMC45OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ0NSBmbWEgIDEgICAgIDEgICAtNzdlLTEyICAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ0NiBmbWEgIDEgICAgIDEgICAtNzdlLTk5OSAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ0NyBmbWEgIDEgICAgIDEgICAtNzdlLTk5OTk5OSAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNDUwIGZtYSAgMSAgICAxMCAgIC03N2UtNyAgICAgICAtPiAgIDkuOTk5OTkyMworZm1heDM0NTEgZm1hICAxICAgIDEwICAgLTc3ZS04ICAgICAgIC0+ICAgOS45OTk5OTkyMworZm1heDM0NTIgZm1hICAxICAgIDEwICAgLTc3ZS05ICAgICAgIC0+ICAgOS45OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDUzIGZtYSAgMSAgICAxMCAgIC03N2UtMTAgICAgICAtPiAgIDkuOTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ1NCBmbWEgIDEgICAgMTAgICAtNzdlLTExICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ1NSBmbWEgIDEgICAgMTAgICAtNzdlLTEyICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ1NiBmbWEgIDEgICAgMTAgICAtNzdlLTk5OSAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ1NyBmbWEgIDEgICAgMTAgICAtNzdlLTk5OTk5OSAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNDYwIGZtYSAgMSAgICAtNzdlLTcgICAgICAgIDEgICAtPiAgMC45OTk5OTIzCitmbWF4MzQ2MSBmbWEgIDEgICAgLTc3ZS04ICAgICAgICAxICAgLT4gIDAuOTk5OTk5MjMKK2ZtYXgzNDYyIGZtYSAgMSAgICAtNzdlLTkgICAgICAgIDEgICAtPiAgMC45OTk5OTk5MjMKK2ZtYXgzNDYzIGZtYSAgMSAgICAtNzdlLTEwICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ2NCBmbWEgIDEgICAgLTc3ZS0xMSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM0NjUgZm1hICAxICAgIC03N2UtMTIgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0NjYgZm1hICAxICAgIC03N2UtOTk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0NjcgZm1hICAxICAgIC03N2UtOTk5OTk5ICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzQ3MCBmbWEgIDEgICAgLTc3ZS03ICAgICAgIDEwICAgLT4gICA5Ljk5OTk5MjMKK2ZtYXgzNDcxIGZtYSAgMSAgICAtNzdlLTggICAgICAgMTAgICAtPiAgIDkuOTk5OTk5MjMKK2ZtYXgzNDcyIGZtYSAgMSAgICAtNzdlLTkgICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ3MyBmbWEgIDEgICAgLTc3ZS0xMCAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM0NzQgZm1hICAxICAgIC03N2UtMTEgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0NzUgZm1hICAxICAgIC03N2UtMTIgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0NzYgZm1hICAxICAgIC03N2UtOTk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0NzcgZm1hICAxICAgIC03N2UtOTk5OTk5ICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCistLSBuZWdhdGl2ZSB1bHBzCitmbWF4MzQ4MCBmbWEgIDEgICAgLTEgICAgNzdlLTcgICAgICAgLT4gIC0wLjk5OTk5MjMKK2ZtYXgzNDgxIGZtYSAgMSAgICAtMSAgICA3N2UtOCAgICAgICAtPiAgLTAuOTk5OTk5MjMKK2ZtYXgzNDgyIGZtYSAgMSAgICAtMSAgICA3N2UtOSAgICAgICAtPiAgLTAuOTk5OTk5OTIzCitmbWF4MzQ4MyBmbWEgIDEgICAgLTEgICAgNzdlLTEwICAgICAgLT4gIC0wLjk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDg0IGZtYSAgMSAgICAtMSAgICA3N2UtMTEgICAgICAtPiAgLTAuOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM0ODUgZm1hICAxICAgIC0xICAgIDc3ZS0xMiAgICAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDg2IGZtYSAgMSAgICAtMSAgICA3N2UtOTk5ICAgICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ4NyBmbWEgIDEgICAgLTEgICAgNzdlLTk5OTk5OSAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzQ5MCBmbWEgIDEgICAtMTAgICAgNzdlLTcgICAgICAgLT4gICAtOS45OTk5OTIzCitmbWF4MzQ5MSBmbWEgIDEgICAtMTAgICAgNzdlLTggICAgICAgLT4gICAtOS45OTk5OTkyMworZm1heDM0OTIgZm1hICAxICAgLTEwICAgIDc3ZS05ICAgICAgIC0+ICAgLTkuOTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ5MyBmbWEgIDEgICAtMTAgICAgNzdlLTEwICAgICAgLT4gICAtOS45OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDk0IGZtYSAgMSAgIC0xMCAgICA3N2UtMTEgICAgICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzQ5NSBmbWEgIDEgICAtMTAgICAgNzdlLTEyICAgICAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM0OTYgZm1hICAxICAgLTEwICAgIDc3ZS05OTkgICAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNDk3IGZtYSAgMSAgIC0xMCAgICA3N2UtOTk5OTk5ICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNTAwIGZtYSAgMSAgICAgNzdlLTcgICAgICAgLTEgICAtPiAgLTAuOTk5OTkyMworZm1heDM1MDEgZm1hICAxICAgICA3N2UtOCAgICAgICAtMSAgIC0+ICAtMC45OTk5OTkyMworZm1heDM1MDIgZm1hICAxICAgICA3N2UtOSAgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5MjMKK2ZtYXgzNTAzIGZtYSAgMSAgICAgNzdlLTEwICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM1MDQgZm1hICAxICAgICA3N2UtMTEgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUwNSBmbWEgIDEgICAgIDc3ZS0xMiAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM1MDYgZm1hICAxICAgICA3N2UtOTk5ICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTA3IGZtYSAgMSAgICAgNzdlLTk5OTk5OSAgLTEgICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNTEwIGZtYSAgMSAgICAgNzdlLTcgICAgICAgLTEwICAtPiAgIC05Ljk5OTk5MjMKK2ZtYXgzNTExIGZtYSAgMSAgICAgNzdlLTggICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTIzCitmbWF4MzUxMiBmbWEgIDEgICAgIDc3ZS05ICAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTEzIGZtYSAgMSAgICAgNzdlLTEwICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM1MTQgZm1hICAxICAgICA3N2UtMTEgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTE1IGZtYSAgMSAgICAgNzdlLTEyICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUxNiBmbWEgIDEgICAgIDc3ZS05OTkgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM1MTcgZm1hICAxICAgICA3N2UtOTk5OTk5ICAtMTAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworCistLSBsb25nIG9wZXJhbmRzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA5CitmbWF4MzUyMSBmbWEgIDEgICAxMjM0NTY3ODAwMCAwIC0+IDEuMjM0NTY3ODBFKzEwIFJvdW5kZWQKK2ZtYXgzNTIyIGZtYSAgMSAgIDAgMTIzNDU2NzgwMDAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAorZm1heDM1MjMgZm1hICAxICAgMTIzNDU2NzgwMCAgMCAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK2ZtYXgzNTI0IGZtYSAgMSAgIDAgMTIzNDU2NzgwMCAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCitmbWF4MzUyNSBmbWEgIDEgICAxMjM0NTY3ODkwICAwIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAorZm1heDM1MjYgZm1hICAxICAgMCAxMjM0NTY3ODkwICAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK2ZtYXgzNTI3IGZtYSAgMSAgIDEyMzQ1Njc4OTEgIDAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTI4IGZtYSAgMSAgIDAgMTIzNDU2Nzg5MSAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNTI5IGZtYSAgMSAgIDEyMzQ1Njc4OTAxIDAgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzUzMCBmbWEgIDEgICAwIDEyMzQ1Njc4OTAxIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorZm1heDM1MzEgZm1hICAxICAgMTIzNDU2Nzg5NiAgMCAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorZm1heDM1MzIgZm1hICAxICAgMCAxMjM0NTY3ODk2ICAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDE1CistLSBzdGlsbCBjaGVja2luZworZm1heDM1NDEgZm1hICAxICAgMTIzNDU2NzgwMDAgMCAtPiAxMjM0NTY3ODAwMAorZm1heDM1NDIgZm1hICAxICAgMCAxMjM0NTY3ODAwMCAtPiAxMjM0NTY3ODAwMAorZm1heDM1NDMgZm1hICAxICAgMTIzNDU2NzgwMCAgMCAtPiAxMjM0NTY3ODAwCitmbWF4MzU0NCBmbWEgIDEgICAwIDEyMzQ1Njc4MDAgIC0+IDEyMzQ1Njc4MDAKK2ZtYXgzNTQ1IGZtYSAgMSAgIDEyMzQ1Njc4OTAgIDAgLT4gMTIzNDU2Nzg5MAorZm1heDM1NDYgZm1hICAxICAgMCAxMjM0NTY3ODkwICAtPiAxMjM0NTY3ODkwCitmbWF4MzU0NyBmbWEgIDEgICAxMjM0NTY3ODkxICAwIC0+IDEyMzQ1Njc4OTEKK2ZtYXgzNTQ4IGZtYSAgMSAgIDAgMTIzNDU2Nzg5MSAgLT4gMTIzNDU2Nzg5MQorZm1heDM1NDkgZm1hICAxICAgMTIzNDU2Nzg5MDEgMCAtPiAxMjM0NTY3ODkwMQorZm1heDM1NTAgZm1hICAxICAgMCAxMjM0NTY3ODkwMSAtPiAxMjM0NTY3ODkwMQorZm1heDM1NTEgZm1hICAxICAgMTIzNDU2Nzg5NiAgMCAtPiAxMjM0NTY3ODk2CitmbWF4MzU1MiBmbWEgIDEgICAwIDEyMzQ1Njc4OTYgIC0+IDEyMzQ1Njc4OTYKKworLS0gdmVyaWZ5IGEgcXVlcnkKK3ByZWNpc2lvbjogICAgMTYKK21heEV4cG9uZW50OiArMzk0CittaW5FeHBvbmVudDogLTM5Mworcm91bmRpbmc6ICAgICBkb3duCitmbWF4MzU2MSBmbWEgIDEgICAxZS0zOTggOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IEluZXhhY3QgUm91bmRlZAorZm1heDM1NjIgZm1hICAxICAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBSb3VuZGVkCistLSBhbmQgdXNpbmcgZGVjaW1hbDY0IGJvdW5kcy4uLgorcHJlY2lzaW9uOiAgICAxNgorbWF4RXhwb25lbnQ6ICszODQKK21pbkV4cG9uZW50OiAtMzgzCityb3VuZGluZzogICAgIGRvd24KK2ZtYXgzNTYzIGZtYSAgMSAgIDFlLTM4OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzU2NCBmbWEgIDEgICAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IFJvdW5kZWQKKworCistLSBzb21lIG1vcmUgcmVzaWR1ZSBlZmZlY3RzIHdpdGggZXh0cmVtZSByb3VuZGluZworcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiBoYWxmX3VwCitmbWF4MzYwMSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2ZtYXgzNjAyIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZG93bgorZm1heDM2MDMgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZmxvb3IKK2ZtYXgzNjA0IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGNlaWxpbmcKK2ZtYXgzNjA1IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IHVwCitmbWF4MzYwNiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBkb3duCitmbWF4MzYwNyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK2ZtYXgzNjExIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZXZlbgorZm1heDM2MTIgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9kb3duCitmbWF4MzYxMyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBmbG9vcgorZm1heDM2MTQgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogY2VpbGluZworZm1heDM2MTUgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogdXAKK2ZtYXgzNjE2IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGRvd24KK2ZtYXgzNjE3IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorZm1heDM2MjEgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9ldmVuCitmbWF4MzYyMiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2ZtYXgzNjIzIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGZsb29yCitmbWF4MzYyNCBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBjZWlsaW5nCitmbWF4MzYyNSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiB1cAorZm1heDM2MjYgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZG93bgorZm1heDM2MjcgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitmbWF4MzYzMSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2ZtYXgzNjMyIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZG93bgorZm1heDM2MzMgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZmxvb3IKK2ZtYXgzNjM0IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGNlaWxpbmcKK2ZtYXgzNjM1IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IHVwCitmbWF4MzYzNiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBkb3duCitmbWF4MzYzNyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK2ZtYXgzNjQxIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGhhbGZfZXZlbgorZm1heDM2NDIgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9kb3duCitmbWF4MzY0MyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBmbG9vcgorZm1heDM2NDQgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogY2VpbGluZworZm1heDM2NDUgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogdXAKK2ZtYXgzNjQ2IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGRvd24KK2ZtYXgzNjQ3IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorZm1heDM2NTEgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9ldmVuCitmbWF4MzY1MiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK2ZtYXgzNjUzIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGZsb29yCitmbWF4MzY1NCBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBjZWlsaW5nCitmbWF4MzY1NSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiB1cAorZm1heDM2NTYgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogZG93bgorZm1heDM2NTcgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCisKKy0tIGxvbmcgb3BlcmFuZCB0cmlhbmdsZQorcm91bmRpbmc6IGhhbGZfdXAKK3ByZWNpc2lvbjogIDM3CitmbWF4MzY2MCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzQ1MzgKK3ByZWNpc2lvbjogIDM2CitmbWF4MzY2MSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzQ1NCAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzNQorZm1heDM2NjIgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE0ODM0NSAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMzQKK2ZtYXgzNjYzIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzNSAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDMzCitmbWF4MzY2NCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MyAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzMgorZm1heDM2NjUgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE0OCAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMzEKK2ZtYXgzNjY2IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDMwCitmbWF4MzY2NyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMSAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyOQorZm1heDM2NjggZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjgKK2ZtYXgzNjY5IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNyAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDI3CitmbWF4MzY3MCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzNCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyNgorZm1heDM2NzEgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjUKK2ZtYXgzNjcyIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDI0CitmbWF4MzY3MyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MiAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyMworZm1heDM2NzQgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OSAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMjIKK2ZtYXgzNjc1IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzOSAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDIxCitmbWF4MzY3NiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2NCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyMAorZm1heDM2NzcgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNiAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTkKK2ZtYXgzNjc4IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyNCAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDE4CitmbWF4MzY3OSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMiAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxNworZm1heDM2ODAgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMCAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTYKK2ZtYXgzNjgxIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMSAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDE1CitmbWF4MzY4MiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMSAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxNAorZm1heDM2ODMgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMiAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTMKK2ZtYXgzNjg0IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MiAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDEyCitmbWF4MzY4NSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxMQorZm1heDM2ODYgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMTAKK2ZtYXgzNjg3IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzExNzQxN0UrMTAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICA5CitmbWF4MzY4OCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTc0MkUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgOAorZm1heDM2ODkgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MTE3NEUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDcKK2ZtYXgzNjkwIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzExN0UrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDYKK2ZtYXgzNjkxIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzEyRSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgNQorZm1heDM2OTIgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MUUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDQKK2ZtYXgzNjkzIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0N0UrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDMKK2ZtYXgzNjk0IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg1RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMgorZm1heDM2OTUgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuOEUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDEKK2ZtYXgzNjk2IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiAxRSsxMSAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK3JvdW5kaW5nOiBoYWxmX3VwCitwcmVjaXNpb246ICAgOQorCitmbWF4MzcwMSBmbWEgIDEgICA1LjAwIDEuMDBFLTMgLT4gNS4wMDEwMAorZm1heDM3MDIgZm1hICAxICAgMDAuMDAgMC4wMDAgIC0+IDAuMDAwCitmbWF4MzcwMyBmbWEgIDEgICAwMC4wMCAwRS0zICAgLT4gMC4wMDAKK2ZtYXgzNzA0IGZtYSAgMSAgIDBFLTMgIDAwLjAwICAtPiAwLjAwMAorCitmbWF4MzcxMCBmbWEgIDEgICAwRSszICAwMC4wMCAgLT4gMC4wMAorZm1heDM3MTEgZm1hICAxICAgMEUrMyAgMDAuMCAgIC0+IDAuMAorZm1heDM3MTIgZm1hICAxICAgMEUrMyAgMDAuICAgIC0+IDAKK2ZtYXgzNzEzIGZtYSAgMSAgIDBFKzMgIDAwLkUrMSAtPiAwRSsxCitmbWF4MzcxNCBmbWEgIDEgICAwRSszICAwMC5FKzIgLT4gMEUrMgorZm1heDM3MTUgZm1hICAxICAgMEUrMyAgMDAuRSszIC0+IDBFKzMKK2ZtYXgzNzE2IGZtYSAgMSAgIDBFKzMgIDAwLkUrNCAtPiAwRSszCitmbWF4MzcxNyBmbWEgIDEgICAwRSszICAwMC5FKzUgLT4gMEUrMworZm1heDM3MTggZm1hICAxICAgMEUrMyAgLTAwLjAgICAtPiAwLjAKK2ZtYXgzNzE5IGZtYSAgMSAgIDBFKzMgIC0wMC4gICAgLT4gMAorZm1heDM3MzEgZm1hICAxICAgMEUrMyAgLTAwLkUrMSAtPiAwRSsxCisKK2ZtYXgzNzIwIGZtYSAgMSAgIDAwLjAwICAwRSszICAtPiAwLjAwCitmbWF4MzcyMSBmbWEgIDEgICAwMC4wICAgMEUrMyAgLT4gMC4wCitmbWF4MzcyMiBmbWEgIDEgICAwMC4gICAgMEUrMyAgLT4gMAorZm1heDM3MjMgZm1hICAxICAgMDAuRSsxIDBFKzMgIC0+IDBFKzEKK2ZtYXgzNzI0IGZtYSAgMSAgIDAwLkUrMiAwRSszICAtPiAwRSsyCitmbWF4MzcyNSBmbWEgIDEgICAwMC5FKzMgMEUrMyAgLT4gMEUrMworZm1heDM3MjYgZm1hICAxICAgMDAuRSs0IDBFKzMgIC0+IDBFKzMKK2ZtYXgzNzI3IGZtYSAgMSAgIDAwLkUrNSAwRSszICAtPiAwRSszCitmbWF4MzcyOCBmbWEgIDEgICAtMDAuMDAgMEUrMyAgLT4gMC4wMAorZm1heDM3MjkgZm1hICAxICAgLTAwLjAgIDBFKzMgIC0+IDAuMAorZm1heDM3MzAgZm1hICAxICAgLTAwLiAgIDBFKzMgIC0+IDAKKworZm1heDM3MzIgZm1hICAxICAgIDAgICAgIDAgICAgIC0+ICAwCitmbWF4MzczMyBmbWEgIDEgICAgMCAgICAtMCAgICAgLT4gIDAKK2ZtYXgzNzM0IGZtYSAgMSAgIC0wICAgICAwICAgICAtPiAgMAorZm1heDM3MzUgZm1hICAxICAgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UKKworZm1heDM3MzYgZm1hICAxICAgIDEgICAgLTEgICAgIC0+ICAwCitmbWF4MzczNyBmbWEgIDEgICAtMSAgICAtMSAgICAgLT4gLTIKK2ZtYXgzNzM4IGZtYSAgMSAgICAxICAgICAxICAgICAtPiAgMgorZm1heDM3MzkgZm1hICAxICAgLTEgICAgIDEgICAgIC0+ICAwCisKK2ZtYXgzNzQxIGZtYSAgMSAgICAwICAgIC0xICAgICAtPiAtMQorZm1heDM3NDIgZm1hICAxICAgLTAgICAgLTEgICAgIC0+IC0xCitmbWF4Mzc0MyBmbWEgIDEgICAgMCAgICAgMSAgICAgLT4gIDEKK2ZtYXgzNzQ0IGZtYSAgMSAgIC0wICAgICAxICAgICAtPiAgMQorZm1heDM3NDUgZm1hICAxICAgLTEgICAgIDAgICAgIC0+IC0xCitmbWF4Mzc0NiBmbWEgIDEgICAtMSAgICAtMCAgICAgLT4gLTEKK2ZtYXgzNzQ3IGZtYSAgMSAgICAxICAgICAwICAgICAtPiAgMQorZm1heDM3NDggZm1hICAxICAgIDEgICAgLTAgICAgIC0+ICAxCisKK2ZtYXgzNzUxIGZtYSAgMSAgICAwLjAgIC0xICAgICAtPiAtMS4wCitmbWF4Mzc1MiBmbWEgIDEgICAtMC4wICAtMSAgICAgLT4gLTEuMAorZm1heDM3NTMgZm1hICAxICAgIDAuMCAgIDEgICAgIC0+ICAxLjAKK2ZtYXgzNzU0IGZtYSAgMSAgIC0wLjAgICAxICAgICAtPiAgMS4wCitmbWF4Mzc1NSBmbWEgIDEgICAtMS4wICAgMCAgICAgLT4gLTEuMAorZm1heDM3NTYgZm1hICAxICAgLTEuMCAgLTAgICAgIC0+IC0xLjAKK2ZtYXgzNzU3IGZtYSAgMSAgICAxLjAgICAwICAgICAtPiAgMS4wCitmbWF4Mzc1OCBmbWEgIDEgICAgMS4wICAtMCAgICAgLT4gIDEuMAorCitmbWF4Mzc2MSBmbWEgIDEgICAgMCAgICAtMS4wICAgLT4gLTEuMAorZm1heDM3NjIgZm1hICAxICAgLTAgICAgLTEuMCAgIC0+IC0xLjAKK2ZtYXgzNzYzIGZtYSAgMSAgICAwICAgICAxLjAgICAtPiAgMS4wCitmbWF4Mzc2NCBmbWEgIDEgICAtMCAgICAgMS4wICAgLT4gIDEuMAorZm1heDM3NjUgZm1hICAxICAgLTEgICAgIDAuMCAgIC0+IC0xLjAKK2ZtYXgzNzY2IGZtYSAgMSAgIC0xICAgIC0wLjAgICAtPiAtMS4wCitmbWF4Mzc2NyBmbWEgIDEgICAgMSAgICAgMC4wICAgLT4gIDEuMAorZm1heDM3NjggZm1hICAxICAgIDEgICAgLTAuMCAgIC0+ICAxLjAKKworZm1heDM3NzEgZm1hICAxICAgIDAuMCAgLTEuMCAgIC0+IC0xLjAKK2ZtYXgzNzcyIGZtYSAgMSAgIC0wLjAgIC0xLjAgICAtPiAtMS4wCitmbWF4Mzc3MyBmbWEgIDEgICAgMC4wICAgMS4wICAgLT4gIDEuMAorZm1heDM3NzQgZm1hICAxICAgLTAuMCAgIDEuMCAgIC0+ICAxLjAKK2ZtYXgzNzc1IGZtYSAgMSAgIC0xLjAgICAwLjAgICAtPiAtMS4wCitmbWF4Mzc3NiBmbWEgIDEgICAtMS4wICAtMC4wICAgLT4gLTEuMAorZm1heDM3NzcgZm1hICAxICAgIDEuMCAgIDAuMCAgIC0+ICAxLjAKK2ZtYXgzNzc4IGZtYSAgMSAgICAxLjAgIC0wLjAgICAtPiAgMS4wCisKKy0tIFNwZWNpYWxzCitmbWF4Mzc4MCBmbWEgIDEgICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4Mzc4MSBmbWEgIDEgICAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitmbWF4Mzc4MiBmbWEgIDEgICAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5CitmbWF4Mzc4MyBmbWEgIDEgICAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitmbWF4Mzc4NCBmbWEgIDEgICAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitmbWF4Mzc4NSBmbWEgIDEgICAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitmbWF4Mzc4NiBmbWEgIDEgICAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5CitmbWF4Mzc4NyBmbWEgIDEgICAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4Mzc4OCBmbWEgIDEgICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4Mzc4OSBmbWEgIDEgICAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4Mzc5MCBmbWEgIDEgICAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4Mzc5MSBmbWEgIDEgICAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4Mzc5MiBmbWEgIDEgICAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4Mzc5MyBmbWEgIDEgICAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4Mzc5NCBmbWEgIDEgICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworZm1heDM4MDAgZm1hICAxICAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzgwMSBmbWEgIDEgICAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitmbWF4MzgwMiBmbWEgIDEgICAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CitmbWF4MzgwMyBmbWEgIDEgICAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CitmbWF4MzgwNCBmbWEgIDEgICAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitmbWF4MzgwNSBmbWEgIDEgICAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CitmbWF4MzgwNiBmbWEgIDEgICAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CitmbWF4MzgwNyBmbWEgIDEgICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzgwOCBmbWEgIDEgICAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzgwOSBmbWEgIDEgICAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODEwIGZtYSAgMSAgIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzODExIGZtYSAgMSAgIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzODEyIGZtYSAgMSAgICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzODEzIGZtYSAgMSAgICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzODE0IGZtYSAgMSAgICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzODE1IGZtYSAgMSAgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworZm1heDM4MjEgZm1hICAxICAgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2ZtYXgzODIyIGZtYSAgMSAgICBOYU4gLTEwMDAgICAtPiAgTmFOCitmbWF4MzgyMyBmbWEgIDEgICAgTmFOIC0xICAgICAgLT4gIE5hTgorZm1heDM4MjQgZm1hICAxICAgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2ZtYXgzODI1IGZtYSAgMSAgICBOYU4gIDAgICAgICAtPiAgTmFOCitmbWF4MzgyNiBmbWEgIDEgICAgTmFOICAxICAgICAgLT4gIE5hTgorZm1heDM4MjcgZm1hICAxICAgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2ZtYXgzODI4IGZtYSAgMSAgICBOYU4gIEluZiAgICAtPiAgTmFOCitmbWF4MzgyOSBmbWEgIDEgICAgTmFOICBOYU4gICAgLT4gIE5hTgorZm1heDM4MzAgZm1hICAxICAgLUluZiAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzODMxIGZtYSAgMSAgIC0xMDAwIE5hTiAgICAtPiAgTmFOCitmbWF4MzgzMiBmbWEgIDEgICAtMSAgICBOYU4gICAgLT4gIE5hTgorZm1heDM4MzMgZm1hICAxICAgLTAgICAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzODM0IGZtYSAgMSAgICAwICAgIE5hTiAgICAtPiAgTmFOCitmbWF4MzgzNSBmbWEgIDEgICAgMSAgICBOYU4gICAgLT4gIE5hTgorZm1heDM4MzYgZm1hICAxICAgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzODM3IGZtYSAgMSAgICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK2ZtYXgzODQxIGZtYSAgMSAgICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NDIgZm1hICAxICAgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg0MyBmbWEgIDEgICAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODQ0IGZtYSAgMSAgICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NDUgZm1hICAxICAgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg0NiBmbWEgIDEgICAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODQ3IGZtYSAgMSAgICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NDggZm1hICAxICAgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg0OSBmbWEgIDEgICAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODUwIGZtYSAgMSAgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NTEgZm1hICAxICAgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg1MiBmbWEgIDEgICAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODUzIGZtYSAgMSAgIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NTQgZm1hICAxICAgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg1NSBmbWEgIDEgICAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODU2IGZtYSAgMSAgICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NTcgZm1hICAxICAgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg1OCBmbWEgIDEgICAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODU5IGZtYSAgMSAgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitmbWF4Mzg2MSBmbWEgIDEgICAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2ZtYXgzODYyIGZtYSAgMSAgICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorZm1heDM4NjMgZm1hICAxICAgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitmbWF4Mzg2NCBmbWEgIDEgICAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2ZtYXgzODY1IGZtYSAgMSAgICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorZm1heDM4NjYgZm1hICAxICAgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitmbWF4Mzg2NyBmbWEgIDEgICAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2ZtYXgzODY4IGZtYSAgMSAgICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorZm1heDM4NjkgZm1hICAxICAgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorZm1heDM4NzEgZm1hICAxICAgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODcyIGZtYSAgMSAgICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg3MyBmbWEgIDEgICAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NzQgZm1hICAxICAgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODc1IGZtYSAgMSAgICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg3NiBmbWEgIDEgICAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4NzcgZm1hICAxICAgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODc4IGZtYSAgMSAgIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg3OSBmbWEgIDEgICAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4ODAgZm1hICAxICAgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzODgxIGZtYSAgMSAgICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4Mzg4MiBmbWEgIDEgICAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitmbWF4Mzg4MyBmbWEgIDEgICAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM4ODQgZm1hICAxICAgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorZm1heDM4ODUgZm1hICAxICAgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gb3ZlcmZsb3csIHVuZGVyZmxvdyBhbmQgc3Vibm9ybWFsIHRlc3RzCittYXhleHBvbmVudDogOTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OQorcHJlY2lzaW9uOiA5CitmbWF4Mzg5MCBmbWEgIDEgICAxRSs5OTk5OTkgICAgIDlFKzk5OTk5OSAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM4OTEgZm1hICAxICAgOUUrOTk5OTk5ICAgICAxRSs5OTk5OTkgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzODkyIGZtYSAgMSAgIC0xLjFFLTk5OTk5OSAgMUUtOTk5OTk5ICAgLT4gLTFFLTEwMDAwMDAgICAgU3Vibm9ybWFsCitmbWF4Mzg5MyBmbWEgIDEgICAxRS05OTk5OTkgICAgLTEuMWUtOTk5OTk5IC0+IC0xRS0xMDAwMDAwICAgIFN1Ym5vcm1hbAorZm1heDM4OTQgZm1hICAxICAgLTEuMDAwMUUtOTk5OTk5ICAxRS05OTk5OTkgICAtPiAtMUUtMTAwMDAwMyBTdWJub3JtYWwKK2ZtYXgzODk1IGZtYSAgMSAgIDFFLTk5OTk5OSAgICAtMS4wMDAxZS05OTk5OTkgLT4gLTFFLTEwMDAwMDMgU3Vibm9ybWFsCitmbWF4Mzg5NiBmbWEgIDEgICAtMUUrOTk5OTk5ICAgLTlFKzk5OTk5OSAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzODk3IGZtYSAgMSAgIC05RSs5OTk5OTkgICAtMUUrOTk5OTk5ICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM4OTggZm1hICAxICAgKzEuMUUtOTk5OTk5IC0xRS05OTk5OTkgICAtPiAxRS0xMDAwMDAwICAgU3Vibm9ybWFsCitmbWF4Mzg5OSBmbWEgIDEgICAtMUUtOTk5OTk5ICAgKzEuMWUtOTk5OTk5IC0+IDFFLTEwMDAwMDAgICAgU3Vibm9ybWFsCitmbWF4MzkwMCBmbWEgIDEgICArMS4wMDAxRS05OTk5OTkgLTFFLTk5OTk5OSAgIC0+IDFFLTEwMDAwMDMgU3Vibm9ybWFsCitmbWF4MzkwMSBmbWEgIDEgICAtMUUtOTk5OTk5ICAgKzEuMDAwMWUtOTk5OTk5IC0+IDFFLTEwMDAwMDMgU3Vibm9ybWFsCitmbWF4MzkwMiBmbWEgIDEgICAtMUUrOTk5OTk5ICAgKzlFKzk5OTk5OSAgIC0+ICA4RSs5OTk5OTkKK2ZtYXgzOTAzIGZtYSAgMSAgIC05RSs5OTk5OTkgICArMUUrOTk5OTk5ICAgLT4gLThFKzk5OTk5OQorCitwcmVjaXNpb246IDMKK2ZtYXgzOTA0IGZtYSAgMSAgICAgICAgMCAtOS45OTlFKzk5OTk5OSAgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2ZtYXgzOTA1IGZtYSAgMSAgICAgICAgICAtOS45OTlFKzk5OTk5OSAwIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2ZtYXgzOTA2IGZtYSAgMSAgICAgICAgMCAgOS45OTlFKzk5OTk5OSAgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK2ZtYXgzOTA3IGZtYSAgMSAgICAgICAgICAgOS45OTlFKzk5OTk5OSAwIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKKworcHJlY2lzaW9uOiAzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorZm1heDM5MTAgZm1hICAxICAgIDEuMDBFLTk5OSAgIDAgICAgLT4gICAxLjAwRS05OTkKK2ZtYXgzOTExIGZtYSAgMSAgICAwLjFFLTk5OSAgICAwICAgIC0+ICAgMUUtMTAwMCAgIFN1Ym5vcm1hbAorZm1heDM5MTIgZm1hICAxICAgIDAuMTBFLTk5OSAgIDAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsCitmbWF4MzkxMyBmbWEgIDEgICAgMC4xMDBFLTk5OSAgMCAgICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorZm1heDM5MTQgZm1hICAxICAgIDAuMDFFLTk5OSAgIDAgICAgLT4gICAxRS0xMDAxICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gTm1pbgorZm1heDM5MTUgZm1hICAxICAgIDAuOTk5RS05OTkgIDAgICAgLT4gICAxLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTE2IGZtYSAgMSAgICAwLjA5OUUtOTk5ICAwICAgIC0+ICAgMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzkxNyBmbWEgIDEgICAgMC4wMDlFLTk5OSAgMCAgICAtPiAgIDFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5MTggZm1hICAxICAgIDAuMDAxRS05OTkgIDAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM5MTkgZm1hICAxICAgIDAuMDAwOUUtOTk5IDAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM5MjAgZm1hICAxICAgIDAuMDAwMUUtOTk5IDAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorCitmbWF4MzkzMCBmbWEgIDEgICAtMS4wMEUtOTk5ICAgMCAgICAtPiAgLTEuMDBFLTk5OQorZm1heDM5MzEgZm1hICAxICAgLTAuMUUtOTk5ICAgIDAgICAgLT4gIC0xRS0xMDAwICAgU3Vibm9ybWFsCitmbWF4MzkzMiBmbWEgIDEgICAtMC4xMEUtOTk5ICAgMCAgICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwKK2ZtYXgzOTMzIGZtYSAgMSAgIC0wLjEwMEUtOTk5ICAwICAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MzkzNCBmbWEgIDEgICAtMC4wMUUtOTk5ICAgMCAgICAtPiAgLTFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBObWluCitmbWF4MzkzNSBmbWEgIDEgICAtMC45OTlFLTk5OSAgMCAgICAtPiAgLTEuMDBFLTk5OSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5MzYgZm1hICAxICAgLTAuMDk5RS05OTkgIDAgICAgLT4gIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTM3IGZtYSAgMSAgIC0wLjAwOUUtOTk5ICAwICAgIC0+ICAtMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzkzOCBmbWEgIDEgICAtMC4wMDFFLTk5OSAgMCAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzkzOSBmbWEgIDEgICAtMC4wMDA5RS05OTkgMCAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4Mzk0MCBmbWEgIDEgICAtMC4wMDAxRS05OTkgMCAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKKy0tIHNvbWUgbm9uLXplcm8gc3Vibm9ybWFsIGZtYSAgMSAgcworZm1heDM5NTAgZm1hICAxICAgIDEuMDBFLTk5OSAgICAwLjFFLTk5OSAgLT4gICAxLjEwRS05OTkKK2ZtYXgzOTUxIGZtYSAgMSAgICAwLjFFLTk5OSAgICAgMC4xRS05OTkgIC0+ICAgMkUtMTAwMCAgICBTdWJub3JtYWwKK2ZtYXgzOTUyIGZtYSAgMSAgICAwLjEwRS05OTkgICAgMC4xRS05OTkgIC0+ICAgMi4wRS0xMDAwICBTdWJub3JtYWwKK2ZtYXgzOTUzIGZtYSAgMSAgICAwLjEwMEUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMi4wRS0xMDAwICBTdWJub3JtYWwgUm91bmRlZAorZm1heDM5NTQgZm1hICAxICAgIDAuMDFFLTk5OSAgICAwLjFFLTk5OSAgLT4gICAxLjFFLTEwMDAgIFN1Ym5vcm1hbAorZm1heDM5NTUgZm1hICAxICAgIDAuOTk5RS05OTkgICAwLjFFLTk5OSAgLT4gICAxLjEwRS05OTkgIEluZXhhY3QgUm91bmRlZAorZm1heDM5NTYgZm1hICAxICAgIDAuMDk5RS05OTkgICAwLjFFLTk5OSAgLT4gICAyLjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mzk1NyBmbWEgIDEgICAgMC4wMDlFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDEuMUUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTU4IGZtYSAgMSAgICAwLjAwMUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5NTkgZm1hICAxICAgIDAuMDAwOUUtOTk5ICAwLjFFLTk5OSAgLT4gICAxLjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mzk2MCBmbWEgIDEgICAgMC4wMDAxRS05OTkgIDAuMUUtOTk5ICAtPiAgIDEuMEUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKy0tIG5lZ2F0aXZlcy4uLgorZm1heDM5NjEgZm1hICAxICAgIDEuMDBFLTk5OSAgIC0wLjFFLTk5OSAgLT4gICA5LjBFLTEwMDAgIFN1Ym5vcm1hbAorZm1heDM5NjIgZm1hICAxICAgIDAuMUUtOTk5ICAgIC0wLjFFLTk5OSAgLT4gICAwRS0xMDAwCitmbWF4Mzk2MyBmbWEgIDEgICAgMC4xMEUtOTk5ICAgLTAuMUUtOTk5ICAtPiAgIDBFLTEwMDEKK2ZtYXgzOTY0IGZtYSAgMSAgICAwLjEwMEUtOTk5ICAtMC4xRS05OTkgIC0+ICAgMEUtMTAwMSAgICBDbGFtcGVkCitmbWF4Mzk2NSBmbWEgIDEgICAgMC4wMUUtOTk5ICAgLTAuMUUtOTk5ICAtPiAgIC05RS0xMDAxICAgU3Vibm9ybWFsCitmbWF4Mzk2NiBmbWEgIDEgICAgMC45OTlFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIDkuMEUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTY3IGZtYSAgMSAgICAwLjA5OUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4Mzk2OCBmbWEgIDEgICAgMC4wMDlFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIC05RS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzOTY5IGZtYSAgMSAgICAwLjAwMUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDM5NzAgZm1hICAxICAgIDAuMDAwOUUtOTk5IC0wLjFFLTk5OSAgLT4gICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4Mzk3MSBmbWEgIDEgICAgMC4wMDAxRS05OTkgLTAuMUUtOTk5ICAtPiAgIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gc29tZSAncmVhbCcgbnVtYmVycworbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK3ByZWNpc2lvbjogOAorZm1heDM1NjYgZm1hICAxICAgOTk5OTkwNjE3MzVFLTM5NCAgMEUtMzk0IC0+IDkuOTk5OTA2RS0zODQgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK3ByZWNpc2lvbjogNworZm1heDM1NjcgZm1hICAxICAgOTk5OTkwNjE3MzVFLTM5NCAgMEUtMzk0IC0+IDkuOTk5OTFFLTM4NCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorcHJlY2lzaW9uOiA2CitmbWF4MzU2OCBmbWEgIDEgICA5OTk5OTA2MTczNUUtMzk0ICAwRS0zOTQgLT4gOS45OTk5RS0zODQgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKKworLS0gbm93IHRoZSBjYXNlIHdoZXJlIHdlIGNhbiBnZXQgdW5kZXJmbG93IGJ1dCB0aGUgcmVzdWx0IGlzIG5vcm1hbAorLS0gW25vdGUgdGhpcyBjYW4ndCBoYXBwZW4gaWYgdGhlIG9wZXJhbmRzIGFyZSBhbHNvIGJvdW5kZWQsIGFzIHdlCistLSBjYW5ub3QgcmVwcmVzZW50IDFFLTM5OSwgZm9yIGV4YW1wbGVdCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworCitmbWF4MzU3MSBmbWEgIDEgICAgICAgICAxRS0zODMgICAgICAgMCAgLT4gMUUtMzgzCitmbWF4MzU3MiBmbWEgIDEgICAgICAgICAxRS0zODQgICAgICAgMCAgLT4gMUUtMzg0ICAgU3Vibm9ybWFsCitmbWF4MzU3MyBmbWEgIDEgICAgICAgICAxRS0zODMgIDFFLTM4NCAgLT4gMS4xRS0zODMKK2ZtYXgzNTc0IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM4NCAgLT4gICA5RS0zODQgU3Vibm9ybWFsCisKKy0tIEhlcmUgd2UgZXhwbG9yZSB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbgorZm1heDM1NzUgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk4ICAtPiAgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCitmbWF4MzU3NiBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTggIC0+ICAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKK2ZtYXgzNTc3IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MzU3OCBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDM1Nzkgc3VidHJhY3QgIDFFLTM4MyAgMUUtNDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgzNTgwIHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCisKKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzCitwcmVjaXNpb246ICAgNQorbWF4ZXhwb25lbnQ6IDc5CittaW5leHBvbmVudDogLTc5CistLSBBZGQ6IGxocyBhbmQgcmhzIDAKK2ZtYXgzMTAwMSBmbWEgIDEgICAgICAgICAxLjUyNDQ0RS04MCAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDAyIGZtYSAgMSAgICAgICAgIDEuNTI0NDVFLTgwIDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMDMgZm1hICAxICAgICAgICAgMS41MjQ0NkUtODAgMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAwNCBmbWEgIDEgICAgICAgICAwIDEuNTI0NDRFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDA1IGZtYSAgMSAgICAgICAgIDAgMS41MjQ0NUUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMDYgZm1hICAxICAgICAgICAgMCAxLjUyNDQ2RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gQWRkOiBsaHMgPj4gcmhzIGFuZCB2aWNlIHZlcnNhCitmbWF4MzEwMTEgZm1hICAxICAgICAgICAgMS41MjQ0NEUtODAgMUUtMTAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDEyIGZtYSAgMSAgICAgICAgIDEuNTI0NDVFLTgwIDFFLTEwMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAxMyBmbWEgIDEgICAgICAgICAxLjUyNDQ2RS04MCAxRS0xMDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMTQgZm1hICAxICAgICAgICAgMUUtMTAwIDEuNTI0NDRFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDE1IGZtYSAgMSAgICAgICAgIDFFLTEwMCAxLjUyNDQ1RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAxNiBmbWEgIDEgICAgICAgICAxRS0xMDAgMS41MjQ0NkUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIEFkZDogbGhzICsgcmhzIGZtYSAgMSAgaXRpb24gY2FycmllZCBvdXQKK2ZtYXgzMTAyMSBmbWEgIDEgICAgICAgICAxLjUyNDQzRS04MCAxLjAwMDAxRS04MCAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMjIgZm1hICAxICAgICAgICAgMS41MjQ0NEUtODAgMS4wMDAwMUUtODAgIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDIzIGZtYSAgMSAgICAgICAgIDEuNTI0NDVFLTgwIDEuMDAwMDFFLTgwICAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTAyNCBmbWEgIDEgICAgICAgICAxLjAwMDAxRS04MCAgMS41MjQ0M0UtODAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzEwMjUgZm1hICAxICAgICAgICAgMS4wMDAwMUUtODAgIDEuNTI0NDRFLTgwIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMDI2IGZtYSAgMSAgICAgICAgIDEuMDAwMDFFLTgwICAxLjUyNDQ1RS04MCAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzCitwcmVjaXNpb246ICAgIDE2CittYXhFeHBvbmVudDogKzM4NAorbWluRXhwb25lbnQ6IC0zODMKK3JvdW5kaW5nOiAgICAgZG93bgorCitmbWF4MzExMDAgZm1hICAxICAgMWUrMiAtMWUtMzgzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTAxIGZtYSAgMSAgIDFlKzEgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMDMgZm1hICAxICAgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMDQgZm1hICAxICAgMWUtMSAtMWUtMzgzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTA1IGZtYSAgMSAgIDFlLTIgLTFlLTM4MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMDYgZm1hICAxICAgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMDcgZm1hICAxICAgMWUtNCAtMWUtMzgzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTA4IGZtYSAgMSAgIDFlLTUgLTFlLTM4MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMDkgZm1hICAxICAgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgICBjZWlsaW5nCitmbWF4MzExMTAgZm1hICAxICAgLTFlKzIgKzFlLTM4MyAgIC0+IC05OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTExMSBmbWEgIDEgICAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTExMyBmbWEgIDEgICAgICAtMSArMWUtMzgzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMTQgZm1hICAxICAgLTFlLTEgKzFlLTM4MyAgIC0+IC0wLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTExNSBmbWEgIDEgICAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTExNiBmbWEgIDEgICAtMWUtMyArMWUtMzgzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzExMTcgZm1hICAxICAgLTFlLTQgKzFlLTM4MyAgIC0+IC0wLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTExOCBmbWEgIDEgICAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTExOSBmbWEgIDEgICAtMWUtNiArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKKworcm91bmRpbmc6ICAgICBkb3duCitwcmVjaXNpb246ICAgIDcKK21heEV4cG9uZW50OiArOTYKK21pbkV4cG9uZW50OiAtOTUKK2ZtYXgzMTEzMCBmbWEgIDEgICAgIDEgICAgICAgICAgICAtMWUtMjAwICAtPiAwLjk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorLS0gc3Vibm9ybWFsIGJvdW5kYXJ5CitmbWF4MzExMzEgZm1hICAxICAgICAxLjAwMDAwMEUtOTQgIC0xZS0yMDAgIC0+ICA5Ljk5OTk5OUUtOTUgIFJvdW5kZWQgSW5leGFjdAorZm1heDMxMTMyIGZtYSAgMSAgICAgMS4wMDAwMDFFLTk1ICAtMWUtMjAwICAtPiAgMS4wMDAwMDBFLTk1ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzMTEzMyBmbWEgIDEgICAgIDEuMDAwMDAwRS05NSAgLTFlLTIwMCAgLT4gIDkuOTk5OTlFLTk2ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMTM0IGZtYSAgMSAgICAgMC45OTk5OTlFLTk1ICAtMWUtMjAwICAtPiAgOS45OTk5OEUtOTYgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93CitmbWF4MzExMzUgZm1hICAxICAgICAwLjAwMTAwMEUtOTUgIC0xZS0yMDAgIC0+ICA5Ljk5RS05OSAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKK2ZtYXgzMTEzNiBmbWEgIDEgICAgIDAuMDAwOTk5RS05NSAgLTFlLTIwMCAgLT4gIDkuOThFLTk5ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdworZm1heDMxMTM3IGZtYSAgMSAgICAgMS4wMDAwMDBFLTk1ICAtMWUtMTAxICAtPiAgOS45OTk5OUUtOTYgIFN1Ym5vcm1hbAorZm1heDMxMTM4IGZtYSAgMSAgICAgICAgMTAwMDBFLTEwMSAtMWUtMjAwICAtPiAgOS45OTlFLTk4ICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxMTM5IGZtYSAgMSAgICAgICAgIDEwMDBFLTEwMSAtMWUtMjAwICAtPiAgOS45OUUtOTkgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxMTQwIGZtYSAgMSAgICAgICAgICAxMDBFLTEwMSAtMWUtMjAwICAtPiAgOS45RS0xMDAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxMTQxIGZtYSAgMSAgICAgICAgICAgMTBFLTEwMSAtMWUtMjAwICAtPiAgOUUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxMTQyIGZtYSAgMSAgICAgICAgICAgIDFFLTEwMSAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzExNDMgZm1hICAxICAgICAgICAgICAgMEUtMTAxIC0xZS0yMDAgIC0+IC0wRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTE0NCBmbWEgIDEgICAgICAgICAgICAxRS0xMDIgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCitmbWF4MzExNTEgZm1hICAxICAgICAgICAxMDAwMEUtMTAyIC0xZS0yMDAgIC0+ICA5Ljk5RS05OSAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTE1MiBmbWEgIDEgICAgICAgICAxMDAwRS0xMDIgLTFlLTIwMCAgLT4gIDkuOUUtMTAwICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxMTUzIGZtYSAgMSAgICAgICAgICAxMDBFLTEwMiAtMWUtMjAwICAtPiAgOUUtMTAxICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTE1NCBmbWEgIDEgICAgICAgICAgIDEwRS0xMDIgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxMTU1IGZtYSAgMSAgICAgICAgICAgIDFFLTEwMiAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzExNTYgZm1hICAxICAgICAgICAgICAgMEUtMTAyIC0xZS0yMDAgIC0+IC0wRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTE1NyBmbWEgIDEgICAgICAgICAgICAxRS0xMDMgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCitmbWF4MzExNjAgZm1hICAxICAgICAgICAgIDEwMEUtMTA1IC0xZS0xMDEgIC0+IC0wRS0xMDEgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxMTYxIGZtYSAgMSAgICAgICAgICAxMDBFLTEwNSAtMWUtMjAxICAtPiAgMEUtMTAxIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UKK3ByZWNpc2lvbjogICAxNQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKK2ZtYXgzMTIwMCBmbWEgIDEgICAxRTE1ICAtMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMEUrMTUgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMDEgZm1hICAxICAgMUUxNSAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDBFKzE1IEluZXhhY3QgUm91bmRlZAorZm1heDMxMjEwIGZtYSAgMSAgIDFFMTUgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIxMSBmbWEgIDEgICAxRTE1ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMTIgZm1hICAxICAgMUUxNSAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjEzIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIxNCBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMTUgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjE2IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIxNyBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMTggZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjE5IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIyMCBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMjEgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjIyIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIyMyBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEyMjQgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMjI1IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwRSsxNSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTIzMCBmbWEgIDEgICAxRTE1ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogICAxNgorCitmbWF4MzEzMDAgZm1hICAxICAgMUUxNiAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMxMCBmbWEgIDEgICAxRTE2ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzExIGZtYSAgMSAgIDFFMTYgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMTIgZm1hICAxICAgMUUxNiAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMxMyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzE0IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMTUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMxNiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzE3IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMTggZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMxOSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzIwIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMjEgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMyMiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzIzIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMjQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMyNSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzI2IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMjcgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMyOCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzI5IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMzAgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMzMSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzMyIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMzMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMzNCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzM1IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMzYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzMTMzNyBmbWEgIDEgICAxRTE2ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzM4IGZtYSAgMSAgIDFFMTYgIC0wLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzMzkgZm1hICAxICAgMUUxNiAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKKworZm1heDMxMzQwIGZtYSAgMSAgIDFFMTYgIC01MDAwMDAwLjAwMDAxMDAwMSAgIC0+ICA5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzEzNDEgZm1hICAxICAgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZm1heDMxMzQ5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzUwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzUxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzUyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzUzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzU0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzU1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzU2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzU3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzU4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzU5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzYwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzYxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzYyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzYzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzY0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDMxMzY1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzY3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzY4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzY5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzcwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzcxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzcyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzczIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzc0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzc1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzc2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzc3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzc4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzc5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzgwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzgxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzgyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzgzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzg0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzg1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzg2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzg3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzg4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzg5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzkwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzkxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzkyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzkzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzk0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzk1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDMxMzk2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorCistLSBNb3JlIEdEIGVkZ2UgY2FzZXMsIHdoZXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdW5hZGp1c3RlZAorLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMAorcHJlY2lzaW9uOiAgIDE1Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworZm1heDMxNDAwIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQwMSBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDAyIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDAzIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQwNCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDA1IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDA2IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQwNyBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS03CitmbWF4MzE0MDggZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtOAorZm1heDMxNDA5IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTkKK2ZtYXgzMTQxMCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xMAorZm1heDMxNDExIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTExCitmbWF4MzE0MTIgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTIKK2ZtYXgzMTQxMyBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xMworZm1heDMxNDE0IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMjM0NTY3ODkwMTIzNDVFLTE0CitmbWF4MzE0MTUgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTUKK2ZtYXgzMTQxNiBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xNgorZm1heDMxNDE3IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMjM0NTY3ODkwMTIzNDVFLTE3CitmbWF4MzE0MTggZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTgKK2ZtYXgzMTQxOSBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xOQorCistLSBzYW1lLCBwcmVjaXNpb24gMTYuLgorcHJlY2lzaW9uOiAgIDE2CitmbWF4MzE0MjAgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MjEgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDIyIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MjMgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MjQgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDI1IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MjYgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0MjcgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03CitmbWF4MzE0MjggZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04CitmbWF4MzE0MjkgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05CitmbWF4MzE0MzAgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMAorZm1heDMxNDMxIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEKK2ZtYXgzMTQzMiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyCitmbWF4MzE0MzMgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMworZm1heDMxNDM0IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQKK2ZtYXgzMTQzNSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1CitmbWF4MzE0MzYgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNgorZm1heDMxNDM3IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcKK2ZtYXgzMTQzOCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4CitmbWF4MzE0MzkgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQorCistLSBzYW1lLCByZXZlcnNlZCAwCitmbWF4MzE0NDAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ0MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ0MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgMCAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NDMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ0NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ0NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgMCAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NDYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ0NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNworZm1heDMxNDQ4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04CitmbWF4MzE0NDkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKK2ZtYXgzMTQ1MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKK2ZtYXgzMTQ1MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEKK2ZtYXgzMTQ1MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKK2ZtYXgzMTQ1MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKK2ZtYXgzMTQ1NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQKK2ZtYXgzMTQ1NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKK2ZtYXgzMTQ1NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKK2ZtYXgzMTQ1NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcKK2ZtYXgzMTQ1OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKK2ZtYXgzMTQ1OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKKworLS0gc2FtZSwgRXMgb24gdGhlIDAKK2ZtYXgzMTQ2MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NjEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDYyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ2MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NjQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDY1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ2NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NjcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDY4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ2OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NzAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDcxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ3MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTIgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzE0NzMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDMxNDc0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzMTQ3NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTUgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CistLSBuZXh0IGZvdXIgZmxhZyBSb3VuZGVkIGJlY2F1c2UgdGhlIDAgZXh0ZW5kcyB0aGUgcmVzdWx0CitmbWF4MzE0NzYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitmbWF4MzE0NzcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitmbWF4MzE0NzggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitmbWF4MzE0NzkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCisKKy0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wCitwcmVjaXNpb246ICAgMTYKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKK3JvdW5kaW5nOiAgICBoYWxmX3VwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzE1MDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTUwMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTAyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1MDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzMTUwNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTA1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1MDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTUwNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDMxNTExIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1MTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTUxMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTE0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzE1MTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTUxNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTE3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1MTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDMxNTIwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1MjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTUyMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTIzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzE1MjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTUyNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTI2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1MjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzMTUzMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTMyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1MzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTUzNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDMxNTM1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1MzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTUzNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTM4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzMTU0MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTQxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1NDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTU0MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDMxNTQ0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1NDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU0NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTQ3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzE1NTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTU1MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTUzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1NTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzMTU1NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTU2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1NTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU1OCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCityb3VuZGluZzogICAgdXAKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzMTU2MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTYxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1NjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTU2MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDMxNTY0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1NjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU2NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTY3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzE1NzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzE1NzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzE1NzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzE1NzQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzE1NzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzE1NzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU3NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTc4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworCityb3VuZGluZzogICAgZG93bgorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDMxNTgwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE1ODEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTU4MiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNTgzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzE1ODQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU4NSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTg2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE1ODcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzMTU5MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNTkyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1OTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTU5NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDMxNTk1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE1OTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTU5NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNTk4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICBjZWlsaW5nCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzE2MDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzMTYwMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNjAyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitmbWF4MzE2MDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzMTYwNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNjA1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE2MDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzMTYwNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDMxNjExIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxNjEyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxNjEzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE2MTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzMTYxNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzMTYxNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDMxNjE3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE2MTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqCityb3VuZGluZzogICAgZmxvb3IKKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzMTYyMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDMxNjIxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCitmbWF4MzE2MjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKK2ZtYXgzMTYyMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDMxNjI0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzE2MjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2ZtYXgzMTYyNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorZm1heDMxNjI3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzE2MzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzMTYzMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDMxNjMzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDMxNjM0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDMxNjM1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzE2MzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2ZtYXgzMTYzNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgorZm1heDMxNjM4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworCistLSBCaWdEZWNpbWFsIHByb2JsZW0gdGVzdGNhc2VzIDIwMDYuMDEuMjMKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworcm91bmRpbmc6ICBkb3duCitwcmVjaXNpb246IDcKK2ZtYXgzMTY1MSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYKK3ByZWNpc2lvbjogNgorZm1heDMxNjUyIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgorcHJlY2lzaW9uOiA1CitmbWF4MzE2NTMgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDBFKzYgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNAorZm1heDMxNjU0IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDBFKzYgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMKK2ZtYXgzMTY1NSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDBFKzYgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyCitmbWF4MzE2NTYgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjBFKzYgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMQorZm1heDMxNjU3IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMUUrNiAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgaGFsZl9ldmVuCitwcmVjaXNpb246IDcKK2ZtYXgzMTY2MSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYKK3ByZWNpc2lvbjogNgorZm1heDMxNjYyIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgorcHJlY2lzaW9uOiA1CitmbWF4MzE2NjMgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDFFKzYgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNAorZm1heDMxNjY0IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDBFKzYgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMKK2ZtYXgzMTY2NSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDBFKzYgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyCitmbWF4MzE2NjYgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjBFKzYgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMQorZm1heDMxNjY3IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMUUrNiAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgdXAKK3ByZWNpc2lvbjogNworZm1heDMxNjcxIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgorcHJlY2lzaW9uOiA2CitmbWF4MzE2NzIgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2CitwcmVjaXNpb246IDUKK2ZtYXgzMTY3MyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMUUrNiAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0CitmbWF4MzE2NzQgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMUUrNiAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMworZm1heDMxNjc1IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMUUrNiAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIKK2ZtYXgzMTY3NiBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMUUrNiAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxCitmbWF4MzE2NzcgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAyRSs2ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAgIDM0Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0MworLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCitmbWF4MzE3MDEgIGZtYSAgMSAgIDEzMEUtMiAgICAxMjBFLTIgICAgLT4gMi41MAorZm1heDMxNzAyICBmbWEgIDEgICAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTAKK2ZtYXgzMTcwMyAgZm1hICAxICAgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwCitmbWF4MzE3MDQgIGZtYSAgMSAgIDFFMiAgICAgICAxRTQgICAgICAgLT4gMS4wMUUrNAorZm1heDMxNzA1ICBzdWJ0cmFjdCAxMzBFLTIgIDEyMEUtMiAtPiAwLjEwCitmbWF4MzE3MDYgIHN1YnRyYWN0IDEzMEUtMiAgMTJFLTEgIC0+IDAuMTAKK2ZtYXgzMTcwNyAgc3VidHJhY3QgMTMwRS0yICAxRTAgICAgLT4gMC4zMAorZm1heDMxNzA4ICBzdWJ0cmFjdCAxRTIgICAgIDFFNCAgICAtPiAtOS45RSszCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gU2FtZSBhcyBhYm92ZSwgdXNpbmcgZGVjaW1hbDY0IGRlZmF1bHQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddCitmbWF4MzYwMDEgZm1hICAxICAgMSAgICAgICAxICAgICAgIC0+ICAyCitmbWF4MzYwMDIgZm1hICAxICAgMiAgICAgICAzICAgICAgIC0+ICA1CitmbWF4MzYwMDMgZm1hICAxICAgJzUuNzUnICAnMy4zJyAgIC0+ICA5LjA1CitmbWF4MzYwMDQgZm1hICAxICAgJzUnICAgICAnLTMnICAgIC0+ICAyCitmbWF4MzYwMDUgZm1hICAxICAgJy01JyAgICAnLTMnICAgIC0+ICAtOAorZm1heDM2MDA2IGZtYSAgMSAgICctNycgICAgJzIuNScgICAtPiAgLTQuNQorZm1heDM2MDA3IGZtYSAgMSAgICcwLjcnICAgJzAuMycgICAtPiAgMS4wCitmbWF4MzYwMDggZm1hICAxICAgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwCitmbWF4MzYwMDkgZm1hICAxICAgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzIuMjM0NTY3ODknCitmbWF4MzYwMTAgZm1hICAxICAgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzIuMjM0NTY4MDAnCisKK2ZtYXgzNjAxMSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDEyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQwJyAgJzAuNTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwMTMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwMTQgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ5JyAgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwMTUgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ5OScgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwMTYgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ5OTknICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwMTcgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDUwMDAnICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwMTggZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDUwMDEnICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwMTkgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDUwMScgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwMjAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDUxJyAgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjAyMSBmbWEgIDEgICAwIDEgLT4gMQorZm1heDM2MDIyIGZtYSAgMSAgIDEgMSAtPiAyCitmbWF4MzYwMjMgZm1hICAxICAgMiAxIC0+IDMKK2ZtYXgzNjAyNCBmbWEgIDEgICAzIDEgLT4gNAorZm1heDM2MDI1IGZtYSAgMSAgIDQgMSAtPiA1CitmbWF4MzYwMjYgZm1hICAxICAgNSAxIC0+IDYKK2ZtYXgzNjAyNyBmbWEgIDEgICA2IDEgLT4gNworZm1heDM2MDI4IGZtYSAgMSAgIDcgMSAtPiA4CitmbWF4MzYwMjkgZm1hICAxICAgOCAxIC0+IDkKK2ZtYXgzNjAzMCBmbWEgIDEgICA5IDEgLT4gMTAKKworLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCitmbWF4MzYwMzEgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnCitmbWF4MzYwMzIgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknCitmbWF4MzYwMzMgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnCitmbWF4MzYwMzQgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnCisKK2ZtYXgzNjAzNSBmbWEgIDEgICAnNzAnICAgICAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwMzYgZm1hICAxICAgJzcwMCcgICAgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDM3IGZtYSAgMSAgICc3MDAwJyAgICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjAzOCBmbWEgIDEgICAnNzAwMDAnICAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAxRSsyMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwMzkgZm1hICAxICAgJzcwMDAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwN0UrMjAnIFJvdW5kZWQKKworLS0gc3ltbWV0cnk6CitmbWF4MzYwNDAgZm1hICAxICAgJzEwMDAwZSsxNicgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwNDEgZm1hICAxICAgJzEwMDAwZSsxNicgICc3MDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MDQyIGZtYSAgMSAgICcxMDAwMGUrMTYnICAnNzAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwNDQgZm1hICAxICAgJzEwMDAwZSsxNicgICc3MDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAxRSsyMCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYwNDUgZm1hICAxICAgJzEwMDAwZSsxNicgICc3MDAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwN0UrMjAnIFJvdW5kZWQKKworZm1heDM2MDQ2IGZtYSAgMSAgICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnCitmbWF4MzYwNDcgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnCitmbWF4MzYwNDggZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJworZm1heDM2MDQ5IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnCitmbWF4MzYwNTAgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnCitmbWF4MzYwNTEgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJworCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCitmbWF4MzYwNTMgZm1hICAxICAgJzEyJyAnNy4wMCcgLT4gJzE5LjAwJworZm1heDM2MDU0IGZtYSAgMSAgICcxLjMnICctMS4wNycgLT4gJzAuMjMnCitmbWF4MzYwNTUgZm1hICAxICAgJzEuMycgJy0xLjMwJyAtPiAnMC4wMCcKK2ZtYXgzNjA1NiBmbWEgIDEgICAnMS4zJyAnLTIuMDcnIC0+ICctMC43NycKK2ZtYXgzNjA1NyBmbWEgIDEgICAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0JworCistLSBmcm9tIGFib3ZlCitmbWF4MzYwNjEgZm1hICAxICAgMSAnMC4xJyAtPiAnMS4xJworZm1heDM2MDYyIGZtYSAgMSAgIDEgJzAuMDEnIC0+ICcxLjAxJworZm1heDM2MDYzIGZtYSAgMSAgIDEgJzAuMDAxJyAtPiAnMS4wMDEnCitmbWF4MzYwNjQgZm1hICAxICAgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJworZm1heDM2MDY1IGZtYSAgMSAgIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJworZm1heDM2MDY2IGZtYSAgMSAgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnCitmbWF4MzYwNjcgZm1hICAxICAgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMDAxJworZm1heDM2MDY4IGZtYSAgMSAgIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAxJworCistLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCitmbWF4MzYwNzAgZm1hICAxICAgMSAgMCAgICAtPiAxCitmbWF4MzYwNzEgZm1hICAxICAgMSAwLiAgICAtPiAxCitmbWF4MzYwNzIgZm1hICAxICAgMSAgLjAgICAtPiAxLjAKK2ZtYXgzNjA3MyBmbWEgIDEgICAxIDAuMCAgIC0+IDEuMAorZm1heDM2MDc0IGZtYSAgMSAgIDEgMC4wMCAgLT4gMS4wMAorZm1heDM2MDc1IGZtYSAgMSAgICAwICAxICAgLT4gMQorZm1heDM2MDc2IGZtYSAgMSAgIDAuICAxICAgLT4gMQorZm1heDM2MDc3IGZtYSAgMSAgICAuMCAxICAgLT4gMS4wCitmbWF4MzYwNzggZm1hICAxICAgMC4wIDEgICAtPiAxLjAKK2ZtYXgzNjA3OSBmbWEgIDEgICAwLjAwIDEgIC0+IDEuMDAKKworLS0gc29tZSBjYXJyaWVzCitmbWF4MzYwODAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTk5OTk5OTk5CitmbWF4MzYwODEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgUm91bmRlZAorZm1heDM2MDgyIGZtYSAgMSAgICA5OTk5OTk5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMDAwMDAwMAorZm1heDM2MDgzIGZtYSAgMSAgICAgIDk5OTk5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMDAwMDAKK2ZtYXgzNjA4NCBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAwMAorZm1heDM2MDg1IGZtYSAgMSAgICAgICAgICA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMAorZm1heDM2MDg2IGZtYSAgMSAgICAgICAgICAgIDk5OTk5OTkgMSAgLT4gMTAwMDAwMDAKK2ZtYXgzNjA4NyBmbWEgIDEgICAgICAgICAgICAgIDk5OTk5IDEgIC0+IDEwMDAwMAorZm1heDM2MDg4IGZtYSAgMSAgICAgICAgICAgICAgICA5OTkgMSAgLT4gMTAwMAorZm1heDM2MDg5IGZtYSAgMSAgICAgICAgICAgICAgICAgIDkgMSAgLT4gMTAKKworCistLSBtb3JlIExIUyBzd2FwcworZm1heDM2MDkwIGZtYSAgMSAgICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JworZm1heDM2MDkxIGZtYSAgMSAgICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCitmbWF4MzYwOTIgZm1hICAxICAgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3JworZm1heDM2MDkzIGZtYSAgMSAgICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JworZm1heDM2MDk0IGZtYSAgMSAgICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JworZm1heDM2MDk1IGZtYSAgMSAgICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3JworZm1heDM2MDk2IGZtYSAgMSAgICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JworZm1heDM2MDk3IGZtYSAgMSAgICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCitmbWF4MzYwOTggZm1hICAxICAgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcKK2ZtYXgzNjA5OSBmbWEgIDEgICAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCitmbWF4MzYxMDAgZm1hICAxICAgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKK2ZtYXgzNjEwMSBmbWEgIDEgICAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnCitmbWF4MzYxMDIgZm1hICAxICAgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCitmbWF4MzYxMDMgZm1hICAxICAgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCitmbWF4MzYxMDQgZm1hICAxICAgJy01RTAnICAgICAgICAgMCAtPiAgJy01JworZm1heDM2MTA1IGZtYSAgMSAgICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCitmbWF4MzYxMDYgZm1hICAxICAgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCitmbWF4MzYxMDcgZm1hICAxICAgJy01RTE1JyAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJworZm1heDM2MTA4IGZtYSAgMSAgICctNUUxNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgIFJvdW5kZWQKK2ZtYXgzNjEwOSBmbWEgIDEgICAnLTVFMTcnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgIFJvdW5kZWQKK2ZtYXgzNjExMCBmbWEgIDEgICAnLTVFMTgnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgIFJvdW5kZWQKK2ZtYXgzNjExMSBmbWEgIDEgICAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKKworLS0gbW9yZSBSSFMgc3dhcHMKK2ZtYXgzNjExMyBmbWEgIDEgICAwICAnLTU2MjY3RS0xMCcgLT4gICctMC4wMDAwMDU2MjY3JworZm1heDM2MTE0IGZtYSAgMSAgIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycKK2ZtYXgzNjExNiBmbWEgIDEgICAwICAnLTU2MjY3RS01JyAgLT4gICctMC41NjI2NycKK2ZtYXgzNjExNyBmbWEgIDEgICAwICAnLTU2MjY3RS00JyAgLT4gICctNS42MjY3JworZm1heDM2MTE5IGZtYSAgMSAgIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnCitmbWF4MzYxMjAgZm1hICAxICAgMCAgJy01NjI2N0UtMicgIC0+ICAnLTU2Mi42NycKK2ZtYXgzNjEyMSBmbWEgIDEgICAwICAnLTU2MjY3RS0xJyAgLT4gICctNTYyNi43JworZm1heDM2MTIyIGZtYSAgMSAgIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycKK2ZtYXgzNjEyMyBmbWEgIDEgICAwICAnLTVFLTEwJyAgICAgLT4gICctNUUtMTAnCitmbWF4MzYxMjQgZm1hICAxICAgMCAgJy01RS03JyAgICAgIC0+ICAnLTVFLTcnCitmbWF4MzYxMjUgZm1hICAxICAgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1JworZm1heDM2MTI2IGZtYSAgMSAgIDAgICctNUUtNScgICAgICAtPiAgJy0wLjAwMDA1JworZm1heDM2MTI3IGZtYSAgMSAgIDAgICctNUUtNCcgICAgICAtPiAgJy0wLjAwMDUnCitmbWF4MzYxMjggZm1hICAxICAgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScKK2ZtYXgzNjEyOSBmbWEgIDEgICAwICAnLTVFMCcgICAgICAgLT4gICctNScKK2ZtYXgzNjEzMCBmbWEgIDEgICAwICAnLTVFMScgICAgICAgLT4gICctNTAnCitmbWF4MzYxMzEgZm1hICAxICAgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcKK2ZtYXgzNjEzMiBmbWEgIDEgICAwICAnLTVFMTUnICAgICAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcKK2ZtYXgzNjEzMyBmbWEgIDEgICAwICAnLTVFMTYnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgIFJvdW5kZWQKK2ZtYXgzNjEzNCBmbWEgIDEgICAwICAnLTVFMTcnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgIFJvdW5kZWQKK2ZtYXgzNjEzNSBmbWEgIDEgICAwICAnLTVFMTgnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgIFJvdW5kZWQKK2ZtYXgzNjEzNiBmbWEgIDEgICAwICAnLTVFMTAwJyAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQKKworLS0gcmVsYXRlZAorZm1heDM2MTM3IGZtYSAgMSAgICAxICAnMEUtMTknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKK2ZtYXgzNjEzOCBmbWEgIDEgICAtMSAgJzBFLTE5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitmbWF4MzYxMzkgZm1hICAxICAgJzBFLTE5JyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZAorZm1heDM2MTQwIGZtYSAgMSAgICcwRS0xOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK2ZtYXgzNjE0MSBmbWEgIDEgICAxRSsxMSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnCitmbWF4MzYxNDIgZm1hICAxICAgMUUrMTEgICAwLjAwMDAwICAtPiAgJzEwMDAwMDAwMDAwMC4wMDAwJyAgUm91bmRlZAorZm1heDM2MTQzIGZtYSAgMSAgIDAuMDAwICAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcKK2ZtYXgzNjE0NCBmbWEgIDEgICAwLjAwMDAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkCisKKy0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdCitmbWF4MzYxNDYgZm1hICAxICAgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJworZm1heDM2MTQ3IGZtYSAgMSAgICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnCitmbWF4MzYxNDggZm1hICAxICAgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcKK2ZtYXgzNjE0OSBmbWEgIDEgICAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnCitmbWF4MzYxNTAgZm1hICAxICAgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcKK2ZtYXgzNjE1MSBmbWEgIDEgICAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJworZm1heDM2MTUyIGZtYSAgMSAgICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycKK2ZtYXgzNjE1MyBmbWEgIDEgICAnMy4nICAgICcuMycgICAgLT4gICczLjMnCitmbWF4MzYxNTQgZm1hICAxICAgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJworZm1heDM2MTU1IGZtYSAgMSAgICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnCitmbWF4MzYxNTYgZm1hICAxICAgJzMnICAgICAnMycgICAgIC0+ICAnNicKK2ZtYXgzNjE1NyBmbWEgIDEgICAnMycgICAgICcrMycgICAgLT4gICc2JworZm1heDM2MTU4IGZtYSAgMSAgICczJyAgICAgJy0zJyAgICAtPiAgJzAnCitmbWF4MzYxNTkgZm1hICAxICAgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJworZm1heDM2MTYwIGZtYSAgMSAgICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnCisKKy0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCitmbWF4MzYxNjEgZm1hICAxICAgJzFFKzEzJyAnLTEnICAgIC0+ICc5OTk5OTk5OTk5OTk5JworZm1heDM2MTYyIGZtYSAgMSAgICcxRSsxMycgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMDEuMTEnCitmbWF4MzYxNjMgZm1hICAxICAgJzEuMTEnICAnMUUrMTMnIC0+ICcxMDAwMDAwMDAwMDAwMS4xMScKK2ZtYXgzNjE2NCBmbWEgIDEgICAnLTEnICAgICcxRSsxMycgLT4gJzk5OTk5OTk5OTk5OTknCitmbWF4MzYxNjUgZm1hICAxICAgJzdFKzEzJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5OScKK2ZtYXgzNjE2NiBmbWEgIDEgICAnN0UrMTMnICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDAxLjExJworZm1heDM2MTY3IGZtYSAgMSAgICcxLjExJyAgJzdFKzEzJyAtPiAnNzAwMDAwMDAwMDAwMDEuMTEnCitmbWF4MzYxNjggZm1hICAxICAgJy0xJyAgICAnN0UrMTMnIC0+ICc2OTk5OTk5OTk5OTk5OScKKworLS0gICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYKK2ZtYXgzNjE3MCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MycgLT4gJzEuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjE3MSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MicgLT4gJzEuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjE3MiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjE3MyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjE3NCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1OScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjE3NSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1OCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjE3NiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NycgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjE3NyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCitmbWF4MzYxNzggZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknCitmbWF4MzYxNzkgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTQnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTgnCitmbWF4MzYxODAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTMnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTcnCitmbWF4MzYxODEgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTInIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTYnCitmbWF4MzYxODIgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTUnCitmbWF4MzYxODMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTQnCisKKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKK3JvdW5kaW5nOiBoYWxmX3VwCitmbWF4MzYyMDAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknCitmbWF4MzYyMDEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA1IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDcgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwOSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMTAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjExIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIxMiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMTMgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjE0IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIxNSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMTYgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnCitmbWF4MzYyMTcgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjE4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIxOSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK2ZtYXgzNjIyMCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKK2ZtYXgzNjIyMSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMjIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjIzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIyNCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMjUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjI2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIyNyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMjggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjI5IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIzMCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMzEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjMyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIzMyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMzQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjM1IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIzNiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKK2ZtYXgzNjIzNyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMzggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjM5IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitmbWF4MzYyNDAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNDk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjQxIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI0MiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitmbWF4MzYyNTAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknCitmbWF4MzYyNTEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjUyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI1MyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNTQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjU1IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI1NiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNTcgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjU4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI1OSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNjAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjYxIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI2MiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNjMgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjY0IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI2NSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyNjYgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnCitmbWF4MzYyNjcgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjY4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjI2OSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCisKKy0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cworcm91bmRpbmc6IGhhbGZfZXZlbgorZm1heDM2MzAxIGZtYSAgMSAgICAtMSAgIDEgICAgICAtPiAgIDAKK2ZtYXgzNjMwMiBmbWEgIDEgICAgIDAgICAxICAgICAgLT4gICAxCitmbWF4MzYzMDMgZm1hICAxICAgICAxICAgMSAgICAgIC0+ICAgMgorZm1heDM2MzA0IGZtYSAgMSAgICAxMiAgIDEgICAgICAtPiAgMTMKK2ZtYXgzNjMwNSBmbWEgIDEgICAgOTggICAxICAgICAgLT4gIDk5CitmbWF4MzYzMDYgZm1hICAxICAgIDk5ICAgMSAgICAgIC0+IDEwMAorZm1heDM2MzA3IGZtYSAgMSAgIDEwMCAgIDEgICAgICAtPiAxMDEKK2ZtYXgzNjMwOCBmbWEgIDEgICAxMDEgICAxICAgICAgLT4gMTAyCitmbWF4MzYzMDkgZm1hICAxICAgIC0xICAtMSAgICAgIC0+ICAtMgorZm1heDM2MzEwIGZtYSAgMSAgICAgMCAgLTEgICAgICAtPiAgLTEKK2ZtYXgzNjMxMSBmbWEgIDEgICAgIDEgIC0xICAgICAgLT4gICAwCitmbWF4MzYzMTIgZm1hICAxICAgIDEyICAtMSAgICAgIC0+ICAxMQorZm1heDM2MzEzIGZtYSAgMSAgICA5OCAgLTEgICAgICAtPiAgOTcKK2ZtYXgzNjMxNCBmbWEgIDEgICAgOTkgIC0xICAgICAgLT4gIDk4CitmbWF4MzYzMTUgZm1hICAxICAgMTAwICAtMSAgICAgIC0+ICA5OQorZm1heDM2MzE2IGZtYSAgMSAgIDEwMSAgLTEgICAgICAtPiAxMDAKKworZm1heDM2MzIxIGZtYSAgMSAgIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwCitmbWF4MzYzMjIgZm1hICAxICAgIDAuMDAgIDAuMDEgICAgLT4gIDAuMDEKK2ZtYXgzNjMyMyBmbWEgIDEgICAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMgorZm1heDM2MzI0IGZtYSAgMSAgICAwLjEyICAwLjAxICAgIC0+ICAwLjEzCitmbWF4MzYzMjUgZm1hICAxICAgIDAuOTggIDAuMDEgICAgLT4gIDAuOTkKK2ZtYXgzNjMyNiBmbWEgIDEgICAgMC45OSAgMC4wMSAgICAtPiAgMS4wMAorZm1heDM2MzI3IGZtYSAgMSAgICAxLjAwICAwLjAxICAgIC0+ICAxLjAxCitmbWF4MzYzMjggZm1hICAxICAgIDEuMDEgIDAuMDEgICAgLT4gIDEuMDIKK2ZtYXgzNjMyOSBmbWEgIDEgICAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMgorZm1heDM2MzMwIGZtYSAgMSAgICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxCitmbWF4MzYzMzEgZm1hICAxICAgIDAuMDEgLTAuMDEgICAgLT4gIDAuMDAKK2ZtYXgzNjMzMiBmbWEgIDEgICAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQorZm1heDM2MzMzIGZtYSAgMSAgICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3CitmbWF4MzYzMzQgZm1hICAxICAgIDAuOTkgLTAuMDEgICAgLT4gIDAuOTgKK2ZtYXgzNjMzNSBmbWEgIDEgICAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQorZm1heDM2MzM2IGZtYSAgMSAgICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwCisKKy0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBmbWEgIDEgIGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50CitmbWF4MzYzNDAgZm1hICAxICAgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMAorZm1heDM2MzQxIGZtYSAgMSAgIDFFKzE1ICAgMCAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwCitmbWF4MzYzNDIgZm1hICAxICAgMUUrMTYgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkCitmbWF4MzYzNDMgZm1hICAxICAgMUUrMTcgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICBSb3VuZGVkCistLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uCitmbWF4MzYzNDQgZm1hICAxICAgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQorZm1heDM2MzQ1IGZtYSAgMSAgIDFFKzE1ICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAxCitmbWF4MzYzNDYgZm1hICAxICAgMUUrMTYgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjM0NyBmbWEgIDEgICAxRSsxNyAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MzQ4IGZtYSAgMSAgIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcKK2ZtYXgzNjM0OSBmbWEgIDEgICAxRSsxNSAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwNworZm1heDM2MzUwIGZtYSAgMSAgIDFFKzE2ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYzNTEgZm1hICAxICAgMUUrMTcgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gdHJ5emVyb3MgY2FzZXMKK2ZtYXgzNjM2MSAgZm1hICAxICAgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQorZm1heDM2MzYyICBmbWEgIDEgICAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgIFJvdW5kZWQKK2ZtYXgzNjM2MyAgZm1hICAxICAgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYzNjQgIGZtYSAgMSAgIDEyLjM0ICAgIDBlLTM5OCAgLT4gMTIuMzQwMDAwMDAwMDAwMDAgIFJvdW5kZWQKKworLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzCitmbWF4MzY0MDAgZm1hICAxICAgICAxICAgNzdlLTE0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcKK2ZtYXgzNjQwMSBmbWEgIDEgICAgIDEgICA3N2UtMTUgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcKK2ZtYXgzNjQwMiBmbWEgIDEgICAgIDEgICA3N2UtMTYgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MDMgZm1hICAxICAgICAxICAgNzdlLTE3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDA0IGZtYSAgMSAgICAgMSAgIDc3ZS0xOCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQwNSBmbWEgIDEgICAgIDEgICA3N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MDYgZm1hICAxICAgICAxICAgNzdlLTk5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzY0MTAgZm1hICAxICAgIDEwICAgNzdlLTE0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3CitmbWF4MzY0MTEgZm1hICAxICAgIDEwICAgNzdlLTE1ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZm1heDM2NDEyIGZtYSAgMSAgICAxMCAgIDc3ZS0xNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQxMyBmbWEgIDEgICAgMTAgICA3N2UtMTcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MTQgZm1hICAxICAgIDEwICAgNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDE1IGZtYSAgMSAgICAxMCAgIDc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQxNiBmbWEgIDEgICAgMTAgICA3N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjQyMCBmbWEgIDEgICAgNzdlLTE0ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDA3NworZm1heDM2NDIxIGZtYSAgMSAgICA3N2UtMTUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3NworZm1heDM2NDIyIGZtYSAgMSAgICA3N2UtMTYgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQyMyBmbWEgIDEgICAgNzdlLTE3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MjQgZm1hICAxICAgIDc3ZS0xOCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDI1IGZtYSAgMSAgICA3N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQyNiBmbWEgIDEgICAgNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjQzMCBmbWEgIDEgICAgNzdlLTE0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcKK2ZtYXgzNjQzMSBmbWEgIDEgICAgNzdlLTE1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MzIgZm1hICAxICAgIDc3ZS0xNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDMzIGZtYSAgMSAgICA3N2UtMTcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQzNCBmbWEgIDEgICAgNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0MzUgZm1hICAxICAgIDc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDM2IGZtYSAgMSAgICA3N2UtOTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgdWxwcworZm1heDM2NDQwIGZtYSAgMSAgICAgMSAgIC03N2UtMTQgICAgICAtPiAgMC45OTk5OTk5OTk5OTkyMworZm1heDM2NDQxIGZtYSAgMSAgICAgMSAgIC03N2UtMTUgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ0MiBmbWEgIDEgICAgIDEgICAtNzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMworZm1heDM2NDQzIGZtYSAgMSAgICAgMSAgIC03N2UtMTcgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDQ0IGZtYSAgMSAgICAgMSAgIC03N2UtMTggICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM2NDQ1IGZtYSAgMSAgICAgMSAgIC03N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NDYgZm1hICAxICAgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2NDUwIGZtYSAgMSAgICAxMCAgIC03N2UtMTQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ1MSBmbWEgIDEgICAgMTAgICAtNzdlLTE1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMworZm1heDM2NDUyIGZtYSAgMSAgICAxMCAgIC03N2UtMTYgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDUzIGZtYSAgMSAgICAxMCAgIC03N2UtMTcgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM2NDU0IGZtYSAgMSAgICAxMCAgIC03N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NTUgZm1hICAxICAgIDEwICAgLTc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ1NiBmbWEgIDEgICAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzY0NjAgZm1hICAxICAgIC03N2UtMTQgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTIzCitmbWF4MzY0NjEgZm1hICAxICAgIC03N2UtMTUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMworZm1heDM2NDYyIGZtYSAgMSAgICAtNzdlLTE2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzCitmbWF4MzY0NjMgZm1hICAxICAgIC03N2UtMTcgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NjQgZm1hICAxICAgIC03N2UtMTggICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NjUgZm1hICAxICAgIC03N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ2NiBmbWEgIDEgICAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzY0NzAgZm1hICAxICAgIC03N2UtMTQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMworZm1heDM2NDcxIGZtYSAgMSAgICAtNzdlLTE1ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTIzCitmbWF4MzY0NzIgZm1hICAxICAgIC03N2UtMTYgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NzMgZm1hICAxICAgIC03N2UtMTcgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0NzQgZm1hICAxICAgIC03N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjQ3NSBmbWEgIDEgICAgLTc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDc2IGZtYSAgMSAgICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHVscHMKK2ZtYXgzNjQ4MCBmbWEgIDEgICAgLTEgICAgNzdlLTE0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzCitmbWF4MzY0ODEgZm1hICAxICAgIC0xICAgIDc3ZS0xNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ4MiBmbWEgIDEgICAgLTEgICAgNzdlLTE2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ4MyBmbWEgIDEgICAgLTEgICAgNzdlLTE3ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0ODQgZm1hICAxICAgIC0xICAgIDc3ZS0xOCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM2NDg1IGZtYSAgMSAgICAtMSAgICA3N2UtMTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDg2IGZtYSAgMSAgICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzY0OTAgZm1hICAxICAgLTEwICAgIDc3ZS0xNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ5MSBmbWEgIDEgICAtMTAgICAgNzdlLTE1ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMKK2ZtYXgzNjQ5MiBmbWEgIDEgICAtMTAgICAgNzdlLTE2ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY0OTMgZm1hICAxICAgLTEwICAgIDc3ZS0xNyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAorZm1heDM2NDk0IGZtYSAgMSAgIC0xMCAgICA3N2UtMTggICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDk1IGZtYSAgMSAgIC0xMCAgICA3N2UtMTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorZm1heDM2NDk2IGZtYSAgMSAgIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorCitmbWF4MzY1MDAgZm1hICAxICAgICA3N2UtMTQgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMworZm1heDM2NTAxIGZtYSAgMSAgICAgNzdlLTE1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzCitmbWF4MzY1MDIgZm1hICAxICAgICA3N2UtMTYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzCitmbWF4MzY1MDMgZm1hICAxICAgICA3N2UtMTcgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM2NTA0IGZtYSAgMSAgICAgNzdlLTE4ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjUwNSBmbWEgIDEgICAgIDc3ZS0xOSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjUwNiBmbWEgIDEgICAgIDc3ZS05OSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2NTEwIGZtYSAgMSAgICAgNzdlLTE0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzCitmbWF4MzY1MTEgZm1hICAxICAgICA3N2UtMTUgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzCitmbWF4MzY1MTIgZm1hICAxICAgICA3N2UtMTYgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAorZm1heDM2NTEzIGZtYSAgMSAgICAgNzdlLTE3ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjUxNCBmbWEgIDEgICAgIDc3ZS0xOCAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjUxNSBmbWEgIDEgICAgIDc3ZS0xOSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjUxNiBmbWEgIDEgICAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworCistLSBsb25nIG9wZXJhbmRzCitmbWF4MzY1MjEgZm1hICAxICAgMTAxMjM0NTYyMzQ1Njc4MDAwIDAgLT4gMS4wMTIzNDU2MjM0NTY3ODBFKzE3IFJvdW5kZWQKK2ZtYXgzNjUyMiBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODAwMCAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTcgUm91bmRlZAorZm1heDM2NTIzIGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODAwICAwIC0+IDEuMDEyMzQ1NjIzNDU2NzgwRSsxNiBSb3VuZGVkCitmbWF4MzY1MjQgZm1hICAxICAgMCAxMDEyMzQ1NjIzNDU2NzgwMCAgLT4gMS4wMTIzNDU2MjM0NTY3ODBFKzE2IFJvdW5kZWQKK2ZtYXgzNjUyNSBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2Nzg5MCAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTYgUm91bmRlZAorZm1heDM2NTI2IGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4OTAgIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNiBSb3VuZGVkCitmbWF4MzY1MjcgZm1hICAxICAgMTAxMjM0NTYyMzQ1Njc4OTEgIDAgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2NTI4IGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4OTEgIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjUyOSBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2Nzg5MDEgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTcgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1MzAgZm1hICAxICAgMCAxMDEyMzQ1NjIzNDU2Nzg5MDEgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE3IEluZXhhY3QgUm91bmRlZAorZm1heDM2NTMxIGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODk2ICAwIC0+IDEuMDEyMzQ1NjIzNDU2NzkwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjUzMiBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODk2ICAtPiAxLjAxMjM0NTYyMzQ1Njc5MEUrMTYgSW5leGFjdCBSb3VuZGVkCisKKy0tIHZlcmlmeSBhIHF1ZXJ5Cityb3VuZGluZzogICAgIGRvd24KK2ZtYXgzNjU2MSBmbWEgIDEgICAxZS0zOTggOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IEluZXhhY3QgUm91bmRlZAorZm1heDM2NTYyIGZtYSAgMSAgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZAorLS0gYW5kIHVzaW5nIGRlY2ltYWw2NCBib3VuZHMuLi4KK3JvdW5kaW5nOiAgICAgZG93bgorZm1heDM2NTYzIGZtYSAgMSAgIDFlLTM4OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY1NjQgZm1hICAxICAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBSb3VuZGVkCisKKy0tIG1vcmUgemVyb3MsIGV0Yy4KK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworZm1heDM2NzAxIGZtYSAgMSAgIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwCitmbWF4MzY3MDIgZm1hICAxICAgMDAuMDAgMC4wMDAgIC0+IDAuMDAwCitmbWF4MzY3MDMgZm1hICAxICAgMDAuMDAgMEUtMyAgIC0+IDAuMDAwCitmbWF4MzY3MDQgZm1hICAxICAgMEUtMyAgMDAuMDAgIC0+IDAuMDAwCisKK2ZtYXgzNjcxMCBmbWEgIDEgICAwRSszICAwMC4wMCAgLT4gMC4wMAorZm1heDM2NzExIGZtYSAgMSAgIDBFKzMgIDAwLjAgICAtPiAwLjAKK2ZtYXgzNjcxMiBmbWEgIDEgICAwRSszICAwMC4gICAgLT4gMAorZm1heDM2NzEzIGZtYSAgMSAgIDBFKzMgIDAwLkUrMSAtPiAwRSsxCitmbWF4MzY3MTQgZm1hICAxICAgMEUrMyAgMDAuRSsyIC0+IDBFKzIKK2ZtYXgzNjcxNSBmbWEgIDEgICAwRSszICAwMC5FKzMgLT4gMEUrMworZm1heDM2NzE2IGZtYSAgMSAgIDBFKzMgIDAwLkUrNCAtPiAwRSszCitmbWF4MzY3MTcgZm1hICAxICAgMEUrMyAgMDAuRSs1IC0+IDBFKzMKK2ZtYXgzNjcxOCBmbWEgIDEgICAwRSszICAtMDAuMCAgIC0+IDAuMAorZm1heDM2NzE5IGZtYSAgMSAgIDBFKzMgIC0wMC4gICAgLT4gMAorZm1heDM2NzMxIGZtYSAgMSAgIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQorCitmbWF4MzY3MjAgZm1hICAxICAgMDAuMDAgIDBFKzMgIC0+IDAuMDAKK2ZtYXgzNjcyMSBmbWEgIDEgICAwMC4wICAgMEUrMyAgLT4gMC4wCitmbWF4MzY3MjIgZm1hICAxICAgMDAuICAgIDBFKzMgIC0+IDAKK2ZtYXgzNjcyMyBmbWEgIDEgICAwMC5FKzEgMEUrMyAgLT4gMEUrMQorZm1heDM2NzI0IGZtYSAgMSAgIDAwLkUrMiAwRSszICAtPiAwRSsyCitmbWF4MzY3MjUgZm1hICAxICAgMDAuRSszIDBFKzMgIC0+IDBFKzMKK2ZtYXgzNjcyNiBmbWEgIDEgICAwMC5FKzQgMEUrMyAgLT4gMEUrMworZm1heDM2NzI3IGZtYSAgMSAgIDAwLkUrNSAwRSszICAtPiAwRSszCitmbWF4MzY3MjggZm1hICAxICAgLTAwLjAwIDBFKzMgIC0+IDAuMDAKK2ZtYXgzNjcyOSBmbWEgIDEgICAtMDAuMCAgMEUrMyAgLT4gMC4wCitmbWF4MzY3MzAgZm1hICAxICAgLTAwLiAgIDBFKzMgIC0+IDAKKworZm1heDM2NzMyIGZtYSAgMSAgICAwICAgICAwICAgICAtPiAgMAorZm1heDM2NzMzIGZtYSAgMSAgICAwICAgIC0wICAgICAtPiAgMAorZm1heDM2NzM0IGZtYSAgMSAgIC0wICAgICAwICAgICAtPiAgMAorZm1heDM2NzM1IGZtYSAgMSAgIC0wICAgIC0wICAgICAtPiAtMCAgICAgLS0gSUVFRSA4NTQgc3BlY2lhbCBjYXNlCisKK2ZtYXgzNjczNiBmbWEgIDEgICAgMSAgICAtMSAgICAgLT4gIDAKK2ZtYXgzNjczNyBmbWEgIDEgICAtMSAgICAtMSAgICAgLT4gLTIKK2ZtYXgzNjczOCBmbWEgIDEgICAgMSAgICAgMSAgICAgLT4gIDIKK2ZtYXgzNjczOSBmbWEgIDEgICAtMSAgICAgMSAgICAgLT4gIDAKKworZm1heDM2NzQxIGZtYSAgMSAgICAwICAgIC0xICAgICAtPiAtMQorZm1heDM2NzQyIGZtYSAgMSAgIC0wICAgIC0xICAgICAtPiAtMQorZm1heDM2NzQzIGZtYSAgMSAgICAwICAgICAxICAgICAtPiAgMQorZm1heDM2NzQ0IGZtYSAgMSAgIC0wICAgICAxICAgICAtPiAgMQorZm1heDM2NzQ1IGZtYSAgMSAgIC0xICAgICAwICAgICAtPiAtMQorZm1heDM2NzQ2IGZtYSAgMSAgIC0xICAgIC0wICAgICAtPiAtMQorZm1heDM2NzQ3IGZtYSAgMSAgICAxICAgICAwICAgICAtPiAgMQorZm1heDM2NzQ4IGZtYSAgMSAgICAxICAgIC0wICAgICAtPiAgMQorCitmbWF4MzY3NTEgZm1hICAxICAgIDAuMCAgLTEgICAgIC0+IC0xLjAKK2ZtYXgzNjc1MiBmbWEgIDEgICAtMC4wICAtMSAgICAgLT4gLTEuMAorZm1heDM2NzUzIGZtYSAgMSAgICAwLjAgICAxICAgICAtPiAgMS4wCitmbWF4MzY3NTQgZm1hICAxICAgLTAuMCAgIDEgICAgIC0+ICAxLjAKK2ZtYXgzNjc1NSBmbWEgIDEgICAtMS4wICAgMCAgICAgLT4gLTEuMAorZm1heDM2NzU2IGZtYSAgMSAgIC0xLjAgIC0wICAgICAtPiAtMS4wCitmbWF4MzY3NTcgZm1hICAxICAgIDEuMCAgIDAgICAgIC0+ICAxLjAKK2ZtYXgzNjc1OCBmbWEgIDEgICAgMS4wICAtMCAgICAgLT4gIDEuMAorCitmbWF4MzY3NjEgZm1hICAxICAgIDAgICAgLTEuMCAgIC0+IC0xLjAKK2ZtYXgzNjc2MiBmbWEgIDEgICAtMCAgICAtMS4wICAgLT4gLTEuMAorZm1heDM2NzYzIGZtYSAgMSAgICAwICAgICAxLjAgICAtPiAgMS4wCitmbWF4MzY3NjQgZm1hICAxICAgLTAgICAgIDEuMCAgIC0+ICAxLjAKK2ZtYXgzNjc2NSBmbWEgIDEgICAtMSAgICAgMC4wICAgLT4gLTEuMAorZm1heDM2NzY2IGZtYSAgMSAgIC0xICAgIC0wLjAgICAtPiAtMS4wCitmbWF4MzY3NjcgZm1hICAxICAgIDEgICAgIDAuMCAgIC0+ICAxLjAKK2ZtYXgzNjc2OCBmbWEgIDEgICAgMSAgICAtMC4wICAgLT4gIDEuMAorCitmbWF4MzY3NzEgZm1hICAxICAgIDAuMCAgLTEuMCAgIC0+IC0xLjAKK2ZtYXgzNjc3MiBmbWEgIDEgICAtMC4wICAtMS4wICAgLT4gLTEuMAorZm1heDM2NzczIGZtYSAgMSAgICAwLjAgICAxLjAgICAtPiAgMS4wCitmbWF4MzY3NzQgZm1hICAxICAgLTAuMCAgIDEuMCAgIC0+ICAxLjAKK2ZtYXgzNjc3NSBmbWEgIDEgICAtMS4wICAgMC4wICAgLT4gLTEuMAorZm1heDM2Nzc2IGZtYSAgMSAgIC0xLjAgIC0wLjAgICAtPiAtMS4wCitmbWF4MzY3NzcgZm1hICAxICAgIDEuMCAgIDAuMCAgIC0+ICAxLjAKK2ZtYXgzNjc3OCBmbWEgIDEgICAgMS4wICAtMC4wICAgLT4gIDEuMAorCistLSBTcGVjaWFscworZm1heDM2NzgwIGZtYSAgMSAgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc4MSBmbWEgIDEgICAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitmbWF4MzY3ODIgZm1hICAxICAgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorZm1heDM2NzgzIGZtYSAgMSAgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc4NCBmbWEgIDEgICAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5CitmbWF4MzY3ODUgZm1hICAxICAgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorZm1heDM2Nzg2IGZtYSAgMSAgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc4NyBmbWEgIDEgICAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4MzY3ODggZm1hICAxICAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM2Nzg5IGZtYSAgMSAgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc5MCBmbWEgIDEgICAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4MzY3OTEgZm1hICAxICAgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorZm1heDM2NzkyIGZtYSAgMSAgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK2ZtYXgzNjc5MyBmbWEgIDEgICAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CitmbWF4MzY3OTQgZm1hICAxICAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK2ZtYXgzNjgwMCBmbWEgIDEgICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjgwMSBmbWEgIDEgICAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitmbWF4MzY4MDIgZm1hICAxICAgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorZm1heDM2ODAzIGZtYSAgMSAgICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgwNCBmbWEgIDEgICAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitmbWF4MzY4MDUgZm1hICAxICAgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorZm1heDM2ODA2IGZtYSAgMSAgICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgwNyBmbWEgIDEgICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzY4MDggZm1hICAxICAgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM2ODA5IGZtYSAgMSAgIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODEwIGZtYSAgMSAgIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgxMSBmbWEgIDEgICAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzY4MTIgZm1hICAxICAgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQorZm1heDM2ODEzIGZtYSAgMSAgICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK2ZtYXgzNjgxNCBmbWEgIDEgICAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CitmbWF4MzY4MTUgZm1hICAxICAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorCitmbWF4MzY4MjEgZm1hICAxICAgIE5hTiAtSW5mICAgIC0+ICBOYU4KK2ZtYXgzNjgyMiBmbWEgIDEgICAgTmFOIC0xMDAwICAgLT4gIE5hTgorZm1heDM2ODIzIGZtYSAgMSAgICBOYU4gLTEgICAgICAtPiAgTmFOCitmbWF4MzY4MjQgZm1hICAxICAgIE5hTiAtMCAgICAgIC0+ICBOYU4KK2ZtYXgzNjgyNSBmbWEgIDEgICAgTmFOICAwICAgICAgLT4gIE5hTgorZm1heDM2ODI2IGZtYSAgMSAgICBOYU4gIDEgICAgICAtPiAgTmFOCitmbWF4MzY4MjcgZm1hICAxICAgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK2ZtYXgzNjgyOCBmbWEgIDEgICAgTmFOICBJbmYgICAgLT4gIE5hTgorZm1heDM2ODI5IGZtYSAgMSAgICBOYU4gIE5hTiAgICAtPiAgTmFOCitmbWF4MzY4MzAgZm1hICAxICAgLUluZiAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzNjgzMSBmbWEgIDEgICAtMTAwMCBOYU4gICAgLT4gIE5hTgorZm1heDM2ODMyIGZtYSAgMSAgIC0xICAgIE5hTiAgICAtPiAgTmFOCitmbWF4MzY4MzMgZm1hICAxICAgLTAgICAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzNjgzNCBmbWEgIDEgICAgMCAgICBOYU4gICAgLT4gIE5hTgorZm1heDM2ODM1IGZtYSAgMSAgICAxICAgIE5hTiAgICAtPiAgTmFOCitmbWF4MzY4MzYgZm1hICAxICAgIDEwMDAgTmFOICAgIC0+ICBOYU4KK2ZtYXgzNjgzNyBmbWEgIDEgICAgSW5mICBOYU4gICAgLT4gIE5hTgorCitmbWF4MzY4NDEgZm1hICAxICAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NDIgZm1hICAxICAgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NDMgZm1hICAxICAgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NDQgZm1hICAxICAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NDUgZm1hICAxICAgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NDYgZm1hICAxICAgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NDcgZm1hICAxICAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NDggZm1hICAxICAgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NDkgZm1hICAxICAgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NTAgZm1hICAxICAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NTEgZm1hICAxICAgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NTIgZm1hICAxICAgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NTMgZm1hICAxICAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NTQgZm1hICAxICAgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NTUgZm1hICAxICAgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NTYgZm1hICAxICAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NTcgZm1hICAxICAgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NTggZm1hICAxICAgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NTkgZm1hICAxICAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2ZtYXgzNjg2MSBmbWEgIDEgICAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK2ZtYXgzNjg2MiBmbWEgIDEgICArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK2ZtYXgzNjg2MyBmbWEgIDEgICAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKK2ZtYXgzNjg2NCBmbWEgIDEgICAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK2ZtYXgzNjg2NSBmbWEgIDEgICAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK2ZtYXgzNjg2NiBmbWEgIDEgICAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKK2ZtYXgzNjg2NyBmbWEgIDEgICAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK2ZtYXgzNjg2OCBmbWEgIDEgICAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK2ZtYXgzNjg2OSBmbWEgIDEgICAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCitmbWF4MzY4NzEgZm1hICAxICAgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg3MiBmbWEgIDEgICAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODczIGZtYSAgMSAgICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NzQgZm1hICAxICAgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg3NSBmbWEgIDEgICAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODc2IGZtYSAgMSAgICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4NzcgZm1hICAxICAgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg3OCBmbWEgIDEgICAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODc5IGZtYSAgMSAgICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzY4ODAgZm1hICAxICAgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK2ZtYXgzNjg4MSBmbWEgIDEgICArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODgyIGZtYSAgMSAgIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKK2ZtYXgzNjg4MyBmbWEgIDEgICAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2ODg0IGZtYSAgMSAgICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK2ZtYXgzNjg4NSBmbWEgIDEgICAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBub3cgdGhlIGNhc2Ugd2hlcmUgd2UgY2FuIGdldCB1bmRlcmZsb3cgYnV0IHRoZSByZXN1bHQgaXMgbm9ybWFsCistLSBbbm90ZSB0aGlzIGNhbid0IGhhcHBlbiBpZiB0aGUgb3BlcmFuZHMgYXJlIGFsc28gYm91bmRlZCwgYXMgd2UKKy0tIGNhbm5vdCByZXByZXNlbnQgMUUtMzk5LCBmb3IgZXhhbXBsZV0KKworZm1heDM2NTcxIGZtYSAgMSAgICAgICAgIDFFLTM4MyAgICAgICAwICAtPiAxRS0zODMKK2ZtYXgzNjU3MiBmbWEgIDEgICAgICAgICAxRS0zODQgICAgICAgMCAgLT4gMUUtMzg0ICAgU3Vibm9ybWFsCitmbWF4MzY1NzMgZm1hICAxICAgICAgICAgMUUtMzgzICAxRS0zODQgIC0+IDEuMUUtMzgzCitmbWF4MzY1NzQgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzg0ICAtPiAgIDlFLTM4NCBTdWJub3JtYWwKKworLS0gSGVyZSB3ZSBleHBsb3JlIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluCitmbWF4MzY1NzUgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk4ICAtPiAgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCitmbWF4MzY1NzYgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk4ICAtPiAgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCitmbWF4MzY1Nzcgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK2ZtYXgzNjU3OCBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorZm1heDM2NTc5IHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCitmbWF4MzY1ODAgc3VidHJhY3QgIDFFLTM4MyAgMUUtNDAyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKKworLS0gY2hlY2sgb3ZlcmZsb3cgZWRnZSBjYXNlCistLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKK2ZtYXgzNjk3MiBhcHBseSAgICAgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKK2ZtYXgzNjk3MyBmbWEgIDEgICAgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5NzQgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTc1IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTc2IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTc3IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA4RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTc4IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA3RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTc5IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA2RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTgwIGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA1RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTgxIGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA0RSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5ODIgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDNFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk4MyBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMkUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTg0IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjk4NSBhcHBseSAgICAgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CitmbWF4MzY5ODYgZm1hICAxICAgICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk4NyBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTg4IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk4OSBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5OTAgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLThFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTkxIGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC03RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjk5MiBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNkUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitmbWF4MzY5OTMgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTVFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTk0IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC00RSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTk1IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0zRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTk2IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0yRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorZm1heDM2OTk3IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAorCistLSBBbmQgZm9yIHJvdW5kIGRvd24gZnVsbCBhbmQgc3Vibm9ybWFsIHJlc3VsdHMKK3JvdW5kaW5nOiAgICAgZG93bgorZm1heDM2MTEwMCBmbWEgIDEgICAxZSsyIC0xZS0zODMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTAxIGZtYSAgMSAgIDFlKzEgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTAzIGZtYSAgMSAgICAgKzEgLTFlLTM4MyAgICAtPiAwLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTEwNCBmbWEgIDEgICAxZS0xIC0xZS0zODMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTA1IGZtYSAgMSAgIDFlLTIgLTFlLTM4MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTA2IGZtYSAgMSAgIDFlLTMgLTFlLTM4MyAgICAtPiAwLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTEwNyBmbWEgIDEgICAxZS00IC0xZS0zODMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTA4IGZtYSAgMSAgIDFlLTUgLTFlLTM4MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0CitmbWF4MzYxMTA5IGZtYSAgMSAgIDFlLTYgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CisKK3JvdW5kaW5nOiAgICAgY2VpbGluZworZm1heDM2MTExMCBmbWEgIDEgICAtMWUrMiArMWUtMzgzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTExMSBmbWEgIDEgICAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMTMgZm1hICAxICAgICAgLTEgKzFlLTM4MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTExNCBmbWEgIDEgICAtMWUtMSArMWUtMzgzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTExNSBmbWEgIDEgICAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMTYgZm1hICAxICAgLTFlLTMgKzFlLTM4MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTExNyBmbWEgIDEgICAtMWUtNCArMWUtMzgzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAorZm1heDM2MTExOCBmbWEgIDEgICAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKK2ZtYXgzNjExMTkgZm1hICAxICAgLTFlLTYgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0CisKKy0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlCityb3VuZGluZzogICAgIGhhbGZfZXZlbgorCitmbWF4MzYxMzAwIGZtYSAgMSAgIDFFMTYgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzEwIGZtYSAgMSAgIDFFMTYgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzExIGZtYSAgMSAgIDFFMTYgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzEyIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzEzIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzE0IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzE1IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzE2IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzE3IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzE4IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzE5IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzIwIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzIxIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzIyIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzIzIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzI0IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzI1IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzI2IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzI3IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzI4IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzI5IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzMwIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzMxIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzMyIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzMzIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzM0IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzM1IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzM2IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzM3IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzM4IGZtYSAgMSAgIDFFMTYgIC0wLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzM5IGZtYSAgMSAgIDFFMTYgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCisKK2ZtYXgzNjEzNDAgZm1hICAxICAgMUUxNiAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNDEgZm1hICAxICAgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworZm1heDM2MTM0OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNCAgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNTAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzUxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM1MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNTMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzU0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM1NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNTYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzU3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM1OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNTkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzYwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM2MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNjIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzYzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM2NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNjUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzY3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM2OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNjkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzcwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM3MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNzIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzczIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM3NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNzUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzc2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM3NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzNzggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzc5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM4MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzODEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzgyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM4MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzODQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzg1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM4NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzODcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzg4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM4OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAxICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzOTAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzkxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM5MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAxICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzOTMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYxMzk0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAorZm1heDM2MTM5NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAxICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjEzOTYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCisKKy0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkCistLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwCitmbWF4MzYxNDIwIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQyMSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDIyIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDIzIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQyNCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDI1IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDI2IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQyNyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKK2ZtYXgzNjE0MjggZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04CitmbWF4MzYxNDI5IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQorZm1heDM2MTQzMCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCitmbWF4MzYxNDMxIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEKK2ZtYXgzNjE0MzIgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgorZm1heDM2MTQzMyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCitmbWF4MzYxNDM0IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQKK2ZtYXgzNjE0MzUgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQorZm1heDM2MTQzNiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2CitmbWF4MzYxNDM3IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcKK2ZtYXgzNjE0MzggZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAorZm1heDM2MTQzOSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIHJldmVyc2VkIDAKK2ZtYXgzNjE0NDAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NDEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDQyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NDMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NDQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDQ1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NDYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NDcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKK2ZtYXgzNjE0NDggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKK2ZtYXgzNjE0NDkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKK2ZtYXgzNjE0NTAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCitmbWF4MzYxNDUxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQorZm1heDM2MTQ1MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKK2ZtYXgzNjE0NTMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCitmbWF4MzYxNDU0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAorZm1heDM2MTQ1NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKK2ZtYXgzNjE0NTYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2CitmbWF4MzYxNDU3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNworZm1heDM2MTQ1OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKK2ZtYXgzNjE0NTkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5CisKKy0tIHNhbWUsIEVzIG9uIHRoZSAwCitmbWF4MzYxNDYwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NjEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ2MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDYzIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NjQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ2NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDY2IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NjcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ2OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDY5IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NzAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ3MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDcyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKK2ZtYXgzNjE0NzMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQorZm1heDM2MTQ3NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1CitmbWF4MzYxNDc1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKKy0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQKK2ZtYXgzNjE0NzYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCitmbWF4MzYxNDc3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAorZm1heDM2MTQ3OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKK2ZtYXgzNjE0NzkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCisKKy0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wCityb3VuZGluZzogICAgaGFsZl91cAorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcworZm1heDM2MTUwMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTUwMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTUwMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQorZm1heDM2MTUwMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQorZm1heDM2MTUwNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTUwNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTUwNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTUwNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAorLS0gaW5leGFjdCB6ZXJvcworZm1heDM2MTUxMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTUxMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTUxMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTUxNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDM2MTUxNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorZm1heDM2MTUxNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTUxNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAorZm1heDM2MTUxOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAorCityb3VuZGluZzogICAgaGFsZl9kb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzYxNTIwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTIxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTIyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTIzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzYxNTI0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTI1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTI2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTI3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzYxNTMxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTMyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTMzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTM0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzYxNTM1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTM2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTM3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTM4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKK2ZtYXgzNjE1NDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1NDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1NDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKK2ZtYXgzNjE1NDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKK2ZtYXgzNjE1NDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1NDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1NDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1NDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKKy0tIGluZXhhY3QgemVyb3MKK2ZtYXgzNjE1NTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1NTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1NTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1NTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzNjE1NTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE1NTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1NTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1NTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKworcm91bmRpbmc6ICAgIHVwCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzYxNTYwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTYxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTYyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTYzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzYxNTY0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTY1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTY2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTY3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzYxNTcxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDM2MTU3MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzNjE1NzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzYxNTc0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcworZm1heDM2MTU3NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzNjE1NzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1NzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKK2ZtYXgzNjE1NzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKK3JvdW5kaW5nOiAgICBkb3duCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzYxNTgwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTgxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTgyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNTgzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzYxNTg0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTg1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTg2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTg3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzYxNTkxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTkyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTkzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTk0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCitmbWF4MzYxNTk1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNTk2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTk3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNTk4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKK3JvdW5kaW5nOiAgICBjZWlsaW5nCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzYxNjAwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNjAxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNjAyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNjAzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzYxNjA0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNjA1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNjA2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNjA3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzYxNjExIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDM2MTYxMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK2ZtYXgzNjE2MTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE2MTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzNjE2MTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CitmbWF4MzYxNjE2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNjE3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNjE4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCisKKy0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKgorcm91bmRpbmc6ICAgIGZsb29yCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCitmbWF4MzYxNjIwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5CitmbWF4MzYxNjIxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCitmbWF4MzYxNjIyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCitmbWF4MzYxNjIzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5CitmbWF4MzYxNjI0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCitmbWF4MzYxNjI1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCitmbWF4MzYxNjI2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCitmbWF4MzYxNjI3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCistLSBpbmV4YWN0IHplcm9zCitmbWF4MzYxNjMxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNjMyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCitmbWF4MzYxNjMzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworZm1heDM2MTYzNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKK2ZtYXgzNjE2MzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKK2ZtYXgzNjE2MzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2ZtYXgzNjE2MzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKK2ZtYXgzNjE2MzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorZm1heDM2MTcwMSBmbWEgIDEgICAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTAKK2ZtYXgzNjE3MDIgZm1hICAxICAgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwCitmbWF4MzYxNzAzIGZtYSAgMSAgIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMAorZm1heDM2MTcwNCBmbWEgIDEgICAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQKK2ZtYXgzNjE3MDUgc3VidHJhY3QgMTMwRS0yICAxMjBFLTIgLT4gMC4xMAorZm1heDM2MTcwNiBzdWJ0cmFjdCAxMzBFLTIgIDEyRS0xICAtPiAwLjEwCitmbWF4MzYxNzA3IHN1YnRyYWN0IDEzMEUtMiAgMUUwICAgIC0+IDAuMzAKK2ZtYXgzNjE3MDggc3VidHJhY3QgMUUyICAgICAxRTQgICAgLT4gLTkuOUUrMworCistLSBHYXBweSBjb2VmZmljaWVudHM7IGNoZWNrIHJlc2lkdWUgaGFuZGxpbmcgZXZlbiB3aXRoIGZ1bGwgY29lZmZpY2llbnQgZ2FwCityb3VuZGluZzogaGFsZl9ldmVuCisKK2ZtYXgzNjIwMDEgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiAxICAgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NworZm1heDM2MjAwMiBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDAuNiAgICAtPiAxMjM0NTY3ODkwMTIzNDU3ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMDMgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiAwLjA2ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDA0IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAwNSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTQgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMDYgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS01ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDA3IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAwOCBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTcgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMDkgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS04ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDEwIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAxMSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTEwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMTIgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDEzIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTIgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAxNCBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTEzICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMTUgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDE2IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTUgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAxNyBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMTggZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDE5IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTggIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjAyMCBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE5ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwMjEgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0yMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHdpZGVuaW5nIHNlY29uZCBhcmd1bWVudCBhdCBnYXAKK2ZtYXgzNjIwMzAgZm1hICAxICAgMTIzNDU2NzggMSAgICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzkKK2ZtYXgzNjIwMzEgZm1hICAxICAgMTIzNDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMQorZm1heDM2MjAzMiBmbWEgIDEgICAxMjM0NTY3OCAwLjEyICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMgorZm1heDM2MjAzMyBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjMKK2ZtYXgzNjIwMzQgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNAorZm1heDM2MjAzNSBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1ICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NQorZm1heDM2MjAzNiBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1NiAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTYKK2ZtYXgzNjIwMzcgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NworZm1heDM2MjAzOCBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4ICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OAorZm1heDM2MjAzOSBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4OSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNDAgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDQxIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MCAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA0MiBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTEgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNDMgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDQ0IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAxICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA0NSBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDEgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNDYgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDQ3IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAxICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA0OCBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNDkgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDEyMzQ1Ngorcm91bmRpbmc6IGhhbGZfZXZlbgorZm1heDM2MjA1MCBmbWEgIDEgICAxMjM0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNTEgZm1hICAxICAgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDUyIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA1MyBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNTQgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDU1IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA1NiBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNTcgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDYwIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA2MSBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNjIgZm1hICAxICAgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDYzIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA2NCBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNjUgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDY2IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA2NyBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKKy0tIGZhci1vdXQgcmVzaWR1ZXMgKGZ1bGwgY29lZmZpY2llbnQgZ2FwIGlzIDE2KzE1IGRpZ2l0cykKK3JvdW5kaW5nOiB1cAorZm1heDM2MjA3MCBmbWEgIDEgICAxMjM0NTY3OCAxRS04ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMQorZm1heDM2MjA3MSBmbWEgIDEgICAxMjM0NTY3OCAxRS05ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNzIgZm1hICAxICAgMTIzNDU2NzggMUUtMTAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDczIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTExICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA3NCBmbWEgIDEgICAxMjM0NTY3OCAxRS0xMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNzUgZm1hICAxICAgMTIzNDU2NzggMUUtMTMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDc2IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA3NyBmbWEgIDEgICAxMjM0NTY3OCAxRS0xNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwNzggZm1hICAxICAgMTIzNDU2NzggMUUtMTYgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDc5IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE3ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA4MCBmbWEgIDEgICAxMjM0NTY3OCAxRS0xOCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwODEgZm1hICAxICAgMTIzNDU2NzggMUUtMTkgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDgyIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTIwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA4MyBmbWEgIDEgICAxMjM0NTY3OCAxRS0yNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwODQgZm1hICAxICAgMTIzNDU2NzggMUUtMzAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDg1IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTMxICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA4NiBmbWEgIDEgICAxMjM0NTY3OCAxRS0zMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKK2ZtYXgzNjIwODcgZm1hICAxICAgMTIzNDU2NzggMUUtMzMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCitmbWF4MzYyMDg4IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTM0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAorZm1heDM2MjA4OSBmbWEgIDEgICAxMjM0NTY3OCAxRS0zNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKKworLS0gcGF5bG9hZCBkZWNhcGl0YXRlIHgzCitwcmVjaXNpb246IDUKK2ZtYXgzNjMwMDAgZm1hICAxIDEgIHNOYU4xMjM0NTY3ODkwICAgICAtPiAgTmFONjc4OTAgIEludmFsaWRfb3BlcmF0aW9uCitmbWF4MzYzMDAxIGZtYSAgICAxIC1zTmFOMTIzNDUxMjM0NSAxICAgLT4gLU5hTjEyMzQ1ICBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM2MzAwMiBmbWEgICAgICAgc05hTjEyMzQ1NTQzMjEgMSAxIC0+ICBOYU41NDMyMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0cworZm1heDM5OTkwIGZtYSAgMSAgIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorZm1heDM5OTkxIGZtYSAgMSAgICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9pbmV4YWN0LmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2luZXhhY3QuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWNlYWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9pbmV4YWN0LmRlY1Rlc3QKQEAgLTAsMCArMSwyMTUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gaW5leGFjdC5kZWNUZXN0IC0tIGRlY2ltYWwgaW5leGFjdCBhbmQgcm91bmRlZCBlZGdlIGNhc2VzICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorCitpbngwMDEgYWRkIDEgICAgICAgICAgMSAgICAgICAgICAgICAgLT4gMgoraW54MDAyIGFkZCAxMjM0NTY3ODkgIDAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4OQoraW54MDAzIGFkZCAxMjM0NTY3ODkgIDAuMCAgICAgICAgICAgIC0+IDEyMzQ1Njc4OSBSb3VuZGVkCitpbngwMDQgYWRkIDEyMzQ1Njc4OSAgMC4wMCAgICAgICAgICAgLT4gMTIzNDU2Nzg5IFJvdW5kZWQKK2lueDAwNSBhZGQgMTIzNDU2Nzg5ICAxICAgICAgICAgICAgICAtPiAxMjM0NTY3OTAKK2lueDAwNiBhZGQgMTIzNDU2Nzg5ICAwLjEgICAgICAgICAgICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwMDcgYWRkIDEyMzQ1Njc4OSAgMC4wMSAgICAgICAgICAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDA4IGFkZCAxMjM0NTY3ODkgIDAuMDAxICAgICAgICAgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDAwOSBhZGQgMTIzNDU2Nzg5ICAwLjAwMDAwMSAgICAgICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwMTAgYWRkIDEyMzQ1Njc4OSAgMC4wMDAwMDAwMDEgICAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDExIGFkZCAxMjM0NTY3ODkgIDAuMDAwMDAwMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKKworaW54MDEyIGFkZCAxMjM0NTY3ODkgIDAuOSAgICAgICAgICAgIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKK2lueDAxMyBhZGQgMTIzNDU2Nzg5ICAwLjA5ICAgICAgICAgICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwMTQgYWRkIDEyMzQ1Njc4OSAgMC4wMDkgICAgICAgICAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDE1IGFkZCAxMjM0NTY3ODkgIDAuMDAwMDA5ICAgICAgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDAxNiBhZGQgMTIzNDU2Nzg5ICAwLjAwMDAwMDAwOSAgICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwMTcgYWRkIDEyMzQ1Njc4OSAgMC4wMDAwMDAwMDAwMDkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorCitpbngwMjEgYWRkIDEgICAgICAgICAgLTEgICAgICAgICAgICAgIC0+IDAKK2lueDAyMiBhZGQgMTIzNDU2Nzg5ICAtMCAgICAgICAgICAgICAgLT4gMTIzNDU2Nzg5CitpbngwMjMgYWRkIDEyMzQ1Njc4OSAgLTAuMCAgICAgICAgICAgIC0+IDEyMzQ1Njc4OSBSb3VuZGVkCitpbngwMjQgYWRkIDEyMzQ1Njc4OSAgLTAuMDAgICAgICAgICAgIC0+IDEyMzQ1Njc4OSBSb3VuZGVkCitpbngwMjUgYWRkIDEyMzQ1Njc4OSAgLTEgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4OAoraW54MDI2IGFkZCAxMjM0NTY3ODkgIC0wLjEgICAgICAgICAgICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwMjcgYWRkIDEyMzQ1Njc4OSAgLTAuMDEgICAgICAgICAgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDAyOCBhZGQgMTIzNDU2Nzg5ICAtMC4wMDEgICAgICAgICAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDI5IGFkZCAxMjM0NTY3ODkgIC0wLjAwMDAwMSAgICAgICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwMzAgYWRkIDEyMzQ1Njc4OSAgLTAuMDAwMDAwMDAxICAgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDAzMSBhZGQgMTIzNDU2Nzg5ICAtMC4wMDAwMDAwMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDMyIGFkZCAxMjM0NTY3ODkgIC0wLjkgICAgICAgICAgICAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCitpbngwMzMgYWRkIDEyMzQ1Njc4OSAgLTAuMDkgICAgICAgICAgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDAzNCBhZGQgMTIzNDU2Nzg5ICAtMC4wMDkgICAgICAgICAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDM1IGFkZCAxMjM0NTY3ODkgIC0wLjAwMDAwOSAgICAgICAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwMzYgYWRkIDEyMzQ1Njc4OSAgLTAuMDAwMDAwMDA5ICAgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDAzNyBhZGQgMTIzNDU2Nzg5ICAtMC4wMDAwMDAwMDAwMDkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorCitpbngwNDIgYWRkICAwICAgICAgICAgICAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OQoraW54MDQzIGFkZCAgMC4wICAgICAgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgUm91bmRlZAoraW54MDQ0IGFkZCAgMC4wMCAgICAgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgUm91bmRlZAoraW54MDQ1IGFkZCAgMSAgICAgICAgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3OTAKK2lueDA0NiBhZGQgIDAuMSAgICAgICAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDQ3IGFkZCAgMC4wMSAgICAgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwNDggYWRkICAwLjAwMSAgICAgICAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDA0OSBhZGQgIDAuMDAwMDAxICAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDUwIGFkZCAgMC4wMDAwMDAwMDEgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwNTEgYWRkICAwLjAwMDAwMDAwMDAwMSAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDA1MiBhZGQgIDAuOSAgICAgICAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAoraW54MDUzIGFkZCAgMC4wOSAgICAgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwNTQgYWRkICAwLjAwOSAgICAgICAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDA1NSBhZGQgIDAuMDAwMDA5ICAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDU2IGFkZCAgMC4wMDAwMDAwMDkgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwNTcgYWRkICAwLjAwMDAwMDAwMDAwOSAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKKworaW54MDYyIGFkZCAgLTAgICAgICAgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkKK2lueDA2MyBhZGQgIC0wLjAgICAgICAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IFJvdW5kZWQKK2lueDA2NCBhZGQgIC0wLjAwICAgICAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IFJvdW5kZWQKK2lueDA2NSBhZGQgIC0xICAgICAgICAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg4CitpbngwNjYgYWRkICAtMC4xICAgICAgICAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDA2NyBhZGQgIC0wLjAxICAgICAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDY4IGFkZCAgLTAuMDAxICAgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwNjkgYWRkICAtMC4wMDAwMDEgICAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDA3MCBhZGQgIC0wLjAwMDAwMDAwMSAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDcxIGFkZCAgLTAuMDAwMDAwMDAwMDAxIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwNzIgYWRkICAtMC45ICAgICAgICAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKK2lueDA3MyBhZGQgIC0wLjA5ICAgICAgICAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDc0IGFkZCAgLTAuMDA5ICAgICAgICAgIDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCitpbngwNzUgYWRkICAtMC4wMDAwMDkgICAgICAgMTIzNDU2Nzg5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK2lueDA3NiBhZGQgIC0wLjAwMDAwMDAwOSAgICAxMjM0NTY3ODkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAoraW54MDc3IGFkZCAgLTAuMDAwMDAwMDAwMDA5IDEyMzQ1Njc4OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCisKKy0tIHNvbWUgYm91bmRhcmllcworaW54MDgxIGFkZCAgICA5OTk5OTk5OTkgICAgICAgICAgIDAgICAgIC0+IDk5OTk5OTk5OQoraW54MDgyIGFkZCAgMC45OTk5OTk5OTkgMC4wMDAwMDAwMDAgICAgIC0+IDAuOTk5OTk5OTk5CitpbngwODMgYWRkICAgIDk5OTk5OTk5OSAgICAgICAgICAgMSAgICAgLT4gMS4wMDAwMDAwMEUrOSBSb3VuZGVkCitpbngwODQgYWRkICAwLjk5OTk5OTk5OSAwLjAwMDAwMDAwMSAgICAgLT4gMS4wMDAwMDAwMCAgICBSb3VuZGVkCitpbngwODUgYWRkICAgIDk5OTk5OTk5OSAgICAgICAgICAgMiAgICAgLT4gMS4wMDAwMDAwMEUrOSBJbmV4YWN0IFJvdW5kZWQKK2lueDA4NiBhZGQgIDAuOTk5OTk5OTk5IDAuMDAwMDAwMDAyICAgICAtPiAxLjAwMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZAoraW54MDg3IGFkZCAgICA5OTk5OTk5OTkgICAgICAgICAgIDMgICAgIC0+IDEuMDAwMDAwMDBFKzkgSW5leGFjdCBSb3VuZGVkCitpbngwODkgYWRkICAwLjk5OTk5OTk5OSAwLjAwMDAwMDAwMyAgICAgLT4gMS4wMDAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gbWludXMsIHBsdXMsIGFuZCBzdWJ0cmFjdCBhbGwgYXNzdW1lZCB0byB3b3JrIGxpa2UgYWRkLgorCistLSBtdWx0aXBseQorcHJlY2lzaW9uOiA4CitpbngxMDEgbXVsdGlwbHkgIDEwMDAgIDEwMDAgICAgICAgIC0+ICAxMDAwMDAwCitpbngxMDIgbXVsdGlwbHkgIDkwMDAgIDkwMDAgICAgICAgIC0+IDgxMDAwMDAwCitpbngxMDMgbXVsdGlwbHkgIDk5OTkgIDk5OTkgICAgICAgIC0+IDk5OTgwMDAxCitpbngxMDQgbXVsdGlwbHkgIDEwMDAgMTAwMDAgICAgICAgIC0+IDEwMDAwMDAwCitpbngxMDUgbXVsdGlwbHkgMTAwMDAgMTAwMDAgICAgICAgIC0+IDEuMDAwMDAwMEUrOCBSb3VuZGVkCitpbngxMDYgbXVsdGlwbHkgMTAwMDEgMTAwMDAgICAgICAgIC0+IDEuMDAwMTAwMEUrOCBSb3VuZGVkCitpbngxMDcgbXVsdGlwbHkgMTAwMDEgMTAwMDEgICAgICAgIC0+IDEuMDAwMjAwMEUrOCBJbmV4YWN0IFJvdW5kZWQKK2lueDEwOCBtdWx0aXBseSAxMDEwMSAxMDAwMSAgICAgICAgLT4gMS4wMTAyMDEwRSs4IEluZXhhY3QgUm91bmRlZAoraW54MTA5IG11bHRpcGx5IDEwMDAxIDEwMTAxICAgICAgICAtPiAxLjAxMDIwMTBFKzggSW5leGFjdCBSb3VuZGVkCisKKy0tIGRpdmlkZQorcHJlY2lzaW9uOiA0CitpbngyMDEgZGl2aWRlICAxMDAwICAxMDAwICAgICAgICAtPiAgMQoraW54MjAyIGRpdmlkZSAgMTAwMCAgICAgMSAgICAgICAgLT4gIDEwMDAKK2lueDIwMyBkaXZpZGUgIDEwMDAgICAgIDIgICAgICAgIC0+ICAgNTAwCitpbngyMDQgZGl2aWRlICAxMDAwICAgICAzICAgICAgICAtPiAgIDMzMy4zICBJbmV4YWN0IFJvdW5kZWQKK2lueDIwNSBkaXZpZGUgIDEwMDAgICAgIDQgICAgICAgIC0+ICAgMjUwCitpbngyMDYgZGl2aWRlICAxMDAwICAgICA1ICAgICAgICAtPiAgIDIwMAoraW54MjA3IGRpdmlkZSAgMTAwMCAgICAgNiAgICAgICAgLT4gICAxNjYuNyAgSW5leGFjdCBSb3VuZGVkCitpbngyMDggZGl2aWRlICAxMDAwICAgICA3ICAgICAgICAtPiAgIDE0Mi45ICBJbmV4YWN0IFJvdW5kZWQKK2lueDIwOSBkaXZpZGUgIDEwMDAgICAgIDggICAgICAgIC0+ICAgMTI1CitpbngyMTAgZGl2aWRlICAxMDAwICAgICA5ICAgICAgICAtPiAgIDExMS4xICBJbmV4YWN0IFJvdW5kZWQKK2lueDIxMSBkaXZpZGUgIDEwMDAgICAgMTAgICAgICAgIC0+ICAgMTAwCisKK2lueDIyMCBkaXZpZGUgICAgIDEgICAgIDEgICAgICAgIC0+ICAgMQoraW54MjIxIGRpdmlkZSAgICAgMSAgICAgMiAgICAgICAgLT4gICAwLjUKK2lueDIyMiBkaXZpZGUgICAgIDEgICAgIDQgICAgICAgIC0+ICAgMC4yNQoraW54MjIzIGRpdmlkZSAgICAgMSAgICAgOCAgICAgICAgLT4gICAwLjEyNQoraW54MjI0IGRpdmlkZSAgICAgMSAgICAxNiAgICAgICAgLT4gICAwLjA2MjUKK2lueDIyNSBkaXZpZGUgICAgIDEgICAgMzIgICAgICAgIC0+ICAgMC4wMzEyNQoraW54MjI2IGRpdmlkZSAgICAgMSAgICA2NCAgICAgICAgLT4gICAwLjAxNTYzICBJbmV4YWN0IFJvdW5kZWQKK2lueDIyNyBkaXZpZGUgICAgIDEgICAxMjggICAgICAgIC0+ICAgMC4wMDc4MTMgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogNQoraW54MjMwIGRpdmlkZSAgICAgMSAgICAgMSAgICAgICAgLT4gICAxCitpbngyMzEgZGl2aWRlICAgICAxICAgICAyICAgICAgICAtPiAgIDAuNQoraW54MjMyIGRpdmlkZSAgICAgMSAgICAgNCAgICAgICAgLT4gICAwLjI1CitpbngyMzMgZGl2aWRlICAgICAxICAgICA4ICAgICAgICAtPiAgIDAuMTI1CitpbngyMzQgZGl2aWRlICAgICAxICAgIDE2ICAgICAgICAtPiAgIDAuMDYyNQoraW54MjM1IGRpdmlkZSAgICAgMSAgICAzMiAgICAgICAgLT4gICAwLjAzMTI1CitpbngyMzYgZGl2aWRlICAgICAxICAgIDY0ICAgICAgICAtPiAgIDAuMDE1NjI1CitpbngyMzcgZGl2aWRlICAgICAxICAgMTI4ICAgICAgICAtPiAgIDAuMDA3ODEyNQorCitwcmVjaXNpb246IDMKK2lueDI0MCBkaXZpZGUgICAgIDEgICAgIDEgICAgICAgIC0+ICAgMQoraW54MjQxIGRpdmlkZSAgICAgMSAgICAgMiAgICAgICAgLT4gICAwLjUKK2lueDI0MiBkaXZpZGUgICAgIDEgICAgIDQgICAgICAgIC0+ICAgMC4yNQoraW54MjQzIGRpdmlkZSAgICAgMSAgICAgOCAgICAgICAgLT4gICAwLjEyNQoraW54MjQ0IGRpdmlkZSAgICAgMSAgICAxNiAgICAgICAgLT4gICAwLjA2MjUKK2lueDI0NSBkaXZpZGUgICAgIDEgICAgMzIgICAgICAgIC0+ICAgMC4wMzEzICAgSW5leGFjdCBSb3VuZGVkCitpbngyNDYgZGl2aWRlICAgICAxICAgIDY0ICAgICAgICAtPiAgIDAuMDE1NiAgIEluZXhhY3QgUm91bmRlZAoraW54MjQ3IGRpdmlkZSAgICAgMSAgIDEyOCAgICAgICAgLT4gICAwLjAwNzgxICBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAyCitpbngyNTAgZGl2aWRlICAgICAxICAgICAxICAgICAgICAtPiAgIDEKK2lueDI1MSBkaXZpZGUgICAgIDEgICAgIDIgICAgICAgIC0+ICAgMC41CitpbngyNTIgZGl2aWRlICAgICAxICAgICA0ICAgICAgICAtPiAgIDAuMjUKK2lueDI1MyBkaXZpZGUgICAgIDEgICAgIDggICAgICAgIC0+ICAgMC4xMyAgICAgSW5leGFjdCBSb3VuZGVkCitpbngyNTQgZGl2aWRlICAgICAxICAgIDE2ICAgICAgICAtPiAgIDAuMDYzICAgIEluZXhhY3QgUm91bmRlZAoraW54MjU1IGRpdmlkZSAgICAgMSAgICAzMiAgICAgICAgLT4gICAwLjAzMSAgICBJbmV4YWN0IFJvdW5kZWQKK2lueDI1NiBkaXZpZGUgICAgIDEgICAgNjQgICAgICAgIC0+ICAgMC4wMTYgICAgSW5leGFjdCBSb3VuZGVkCitpbngyNTcgZGl2aWRlICAgICAxICAgMTI4ICAgICAgICAtPiAgIDAuMDA3OCAgIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDEKK2lueDI2MCBkaXZpZGUgICAgIDEgICAgIDEgICAgICAgIC0+ICAgMQoraW54MjYxIGRpdmlkZSAgICAgMSAgICAgMiAgICAgICAgLT4gICAwLjUKK2lueDI2MiBkaXZpZGUgICAgIDEgICAgIDQgICAgICAgIC0+ICAgMC4zICAgICAgSW5leGFjdCBSb3VuZGVkCitpbngyNjMgZGl2aWRlICAgICAxICAgICA4ICAgICAgICAtPiAgIDAuMSAgICAgIEluZXhhY3QgUm91bmRlZAoraW54MjY0IGRpdmlkZSAgICAgMSAgICAxNiAgICAgICAgLT4gICAwLjA2ICAgICBJbmV4YWN0IFJvdW5kZWQKK2lueDI2NSBkaXZpZGUgICAgIDEgICAgMzIgICAgICAgIC0+ICAgMC4wMyAgICAgSW5leGFjdCBSb3VuZGVkCitpbngyNjYgZGl2aWRlICAgICAxICAgIDY0ICAgICAgICAtPiAgIDAuMDIgICAgIEluZXhhY3QgUm91bmRlZAoraW54MjY3IGRpdmlkZSAgICAgMSAgIDEyOCAgICAgICAgLT4gICAwLjAwOCAgICBJbmV4YWN0IFJvdW5kZWQKKworCistLSBwb3dlcgorcHJlY2lzaW9uOiA0CitpbngzMDEgcG93ZXIgICAgMC41ICAgICAyICAgICAgICAtPiAgIDAuMjUKK2lueDMwMiBwb3dlciAgICAwLjUgICAgIDQgICAgICAgIC0+ICAgMC4wNjI1CitpbngzMDMgcG93ZXIgICAgMC41ICAgICA4ICAgICAgICAtPiAgIDAuMDAzOTA2ICAgSW5leGFjdCBSb3VuZGVkCitpbngzMDQgcG93ZXIgICAgMC41ICAgIDE2ICAgICAgICAtPiAgIDAuMDAwMDE1MjYgSW5leGFjdCBSb3VuZGVkCitpbngzMDUgcG93ZXIgICAgMC41ICAgIDMyICAgICAgICAtPiAgIDIuMzI4RS0xMCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGNvbXBhcmUsIGRpdmlkZUludGVnZXIsIGFuZCByZW1haW5kZXIgYXJlIGFsd2F5cyBleGFjdAorCistLSByZXNjYWxlCitwcmVjaXNpb246IDQKK2lueDQwMSByZXNjYWxlIDAgICAgICAgMCAgIC0+IDAKK2lueDQwMiByZXNjYWxlIDEgICAgICAgMCAgIC0+IDEKK2lueDQwMyByZXNjYWxlIDAuMSAgICArMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitpbng0MDQgcmVzY2FsZSAwLjEgICAgKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAoraW54NDA1IHJlc2NhbGUgMC4xICAgICAwICAgLT4gMCBJbmV4YWN0IFJvdW5kZWQKK2lueDQwNiByZXNjYWxlIDAuMSAgICAtMSAgIC0+IDAuMQoraW54NDA3IHJlc2NhbGUgMC4xICAgIC0yICAgLT4gMC4xMAorCistLSBsb25nIG9wZXJhbmRzIGNhdXNlIHJvdW5kaW5nIHRvbworcHJlY2lzaW9uOiA5Citpbng4MDEgcGx1cyAgMTIzNDU2Nzg5ICAtPiAxMjM0NTY3ODkKK2lueDgwMiBwbHVzICAxMjM0NTY3ODkwIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAoraW54ODAzIHBsdXMgIDEyMzQ1Njc4OTEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK2lueDgwNCBwbHVzICAxMjM0NTY3ODkyIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCitpbng4MDUgcGx1cyAgMTIzNDU2Nzg5OSAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAoraW54ODA2IHBsdXMgIDEyMzQ1Njc5MDAgLT4gMS4yMzQ1Njc5MEUrOSBSb3VuZGVkCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvaW52ZXJ0LmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2ludmVydC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZjdiZTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2ludmVydC5kZWNUZXN0CkBAIC0wLDAgKzEsMTc2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGludmVydC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIElOVkVSVCAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSksIGFuZCBleGFtcGxlcyBmcm9tIGRlY0FyaXRoCitpbnZ4MDAxIGludmVydCAgICAgICAgICAgICAwIC0+IDExMTExMTExMQoraW52eDAwMiBpbnZlcnQgICAgICAgICAgICAgMSAtPiAxMTExMTExMTAKK2ludngwMDMgaW52ZXJ0ICAgICAgICAgICAgMTAgLT4gMTExMTExMTAxCitpbnZ4MDA0IGludmVydCAgICAgMTExMTExMTExIC0+ICAgICAgICAgMAoraW52eDAwNSBpbnZlcnQgICAgIDAwMDAwMDAwMCAtPiAxMTExMTExMTEKK2ludngwMDYgaW52ZXJ0ICAgICAxMDEwMTAxMDEgLT4gJzEwMTAxMDEwJworLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKK2ludngwMDcgaW52ZXJ0IDAwMDAwMDAwMCAtPiAgIDExMTExMTExMQoraW52eDAwOSBpbnZlcnQgMTAwMDAwMDAwIC0+ICAgIDExMTExMTExCitpbnZ4MDExIGludmVydCAwMDAwMDAwMDAgLT4gICAxMTExMTExMTEKK2ludngwMTMgaW52ZXJ0IDAxMDAwMDAwMCAtPiAgIDEwMTExMTExMQorCistLSBWYXJpb3VzIGxlbmd0aHMKKy0tICAgICAgICAgICAgIDEyMzQ1Njc4OSAgICAgICAgIDEyMzQ1Njc4OQoraW52eDAyMSBpbnZlcnQgMTExMTExMTExICAgICAtPiAgMAoraW52eDAyMiBpbnZlcnQgMTExMTExMTExMTExICAtPiAgMAoraW52eDAyMyBpbnZlcnQgIDExMTExMTExICAgICAtPiAgMTAwMDAwMDAwCitpbnZ4MDI1IGludmVydCAgIDExMTExMTEgICAgIC0+ICAxMTAwMDAwMDAKK2ludngwMjYgaW52ZXJ0ICAgIDExMTExMSAgICAgLT4gIDExMTAwMDAwMAoraW52eDAyNyBpbnZlcnQgICAgIDExMTExICAgICAtPiAgMTExMTAwMDAwCitpbnZ4MDI4IGludmVydCAgICAgIDExMTEgICAgIC0+ICAxMTExMTAwMDAKK2ludngwMjkgaW52ZXJ0ICAgICAgIDExMSAgICAgLT4gIDExMTExMTAwMAoraW52eDAzMSBpbnZlcnQgICAgICAgIDExICAgICAtPiAgMTExMTExMTAwCitpbnZ4MDMyIGludmVydCAgICAgICAgIDEgICAgIC0+ICAxMTExMTExMTAKK2ludngwMzMgaW52ZXJ0IDExMTExMTExMTExMSAgLT4gIDAKK2ludngwMzQgaW52ZXJ0IDExMTExMTExMTExICAgLT4gIDAKK2ludngwMzUgaW52ZXJ0IDExMTExMTExMTEgICAgLT4gIDAKK2ludngwMzYgaW52ZXJ0IDExMTExMTExMSAgICAgLT4gIDAKKworaW52eDA4MCBpbnZlcnQgMDExMTExMTExICAgLT4gIDEwMDAwMDAwMAoraW52eDA4MSBpbnZlcnQgMTAxMTExMTExICAgLT4gICAxMDAwMDAwMAoraW52eDA4MiBpbnZlcnQgMTEwMTExMTExICAgLT4gICAgMTAwMDAwMAoraW52eDA4MyBpbnZlcnQgMTExMDExMTExICAgLT4gICAgIDEwMDAwMAoraW52eDA4NCBpbnZlcnQgMTExMTAxMTExICAgLT4gICAgICAxMDAwMAoraW52eDA4NSBpbnZlcnQgMTExMTEwMTExICAgLT4gICAgICAgMTAwMAoraW52eDA4NiBpbnZlcnQgMTExMTExMDExICAgLT4gICAgICAgIDEwMAoraW52eDA4NyBpbnZlcnQgMTExMTExMTAxICAgLT4gICAgICAgICAxMAoraW52eDA4OCBpbnZlcnQgMTExMTExMTEwICAgLT4gICAgICAgICAgMQoraW52eDA4OSBpbnZlcnQgMDExMTExMDExICAgLT4gIDEwMDAwMDEwMAoraW52eDA5MCBpbnZlcnQgMTAxMTExMTAxICAgLT4gICAxMDAwMDAxMAoraW52eDA5MSBpbnZlcnQgMTEwMTExMTEwICAgLT4gICAgMTAwMDAwMQoraW52eDA5MiBpbnZlcnQgMTExMDExMTAxICAgLT4gICAgIDEwMDAxMAoraW52eDA5MyBpbnZlcnQgMTExMTAxMDExICAgLT4gICAgICAxMDEwMAoraW52eDA5NCBpbnZlcnQgMTExMTEwMTExICAgLT4gICAgICAgMTAwMAoraW52eDA5NSBpbnZlcnQgMTExMTAxMDExICAgLT4gICAgICAxMDEwMAoraW52eDA5NiBpbnZlcnQgMTExMDExMTAxICAgLT4gICAgIDEwMDAxMAoraW52eDA5NyBpbnZlcnQgMTEwMTExMTEwICAgLT4gICAgMTAwMDAwMQoraW52eDA5OCBpbnZlcnQgMTAxMTExMTAxICAgLT4gICAxMDAwMDAxMAoraW52eDA5OSBpbnZlcnQgMDExMTExMDExICAgLT4gIDEwMDAwMDEwMAorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK2ludngyMjAgaW52ZXJ0IDExMTExMTExMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyMjEgaW52ZXJ0IDMzMzMzMzMzMyAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyMjIgaW52ZXJ0IDU1NTU1NTU1NSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyMjMgaW52ZXJ0IDc3Nzc3Nzc3NyAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyMjQgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyMjUgaW52ZXJ0IDIyMjIyMjIyMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyMjYgaW52ZXJ0IDQ0NDQ0NDQ0NCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyMjcgaW52ZXJ0IDY2NjY2NjY2NiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyMjggaW52ZXJ0IDg4ODg4ODg4OCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyMjkgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyMzAgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyMzEgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyMzIgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIGEgZmV3IHJhbmRvbXMKK2ludngyNDAgaW52ZXJ0ICA1Njc0Njg2ODkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNDEgaW52ZXJ0ICA1NjczNjc2ODkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNDIgaW52ZXJ0IC02MzE5MTc3NzIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNDMgaW52ZXJ0IC03NTYyNTMyNTcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyNDQgaW52ZXJ0ICA4MzU1OTAxNDkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitpbnZ4MjUwIGludmVydCAgMjAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjUxIGludmVydCAgMzAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjUyIGludmVydCAgNDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjUzIGludmVydCAgNTAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjU0IGludmVydCAgNjAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjU1IGludmVydCAgNzAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjU2IGludmVydCAgODAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjU3IGludmVydCAgOTAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCitpbnZ4MjcwIGludmVydCAgMDIxMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjcxIGludmVydCAgMDMwMTAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjcyIGludmVydCAgMDQwMDEwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MjczIGludmVydCAgMDUwMDAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjc0IGludmVydCAgMTYwMDAwMTAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjc1IGludmVydCAgMTcwMDAwMDEwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjc2IGludmVydCAgMTgwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjc3IGludmVydCAgMTkwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAoraW52eDI4MCBpbnZlcnQgIDAwMDAwMDAwMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI4MSBpbnZlcnQgIDAwMDAwMDAwMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI4MiBpbnZlcnQgIDAwMDAwMDAwNCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI4MyBpbnZlcnQgIDAwMDAwMDAwNSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI4NCBpbnZlcnQgIDEwMTAwMDAwNiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI4NSBpbnZlcnQgIDEwMDEwMDAwNyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI4NiBpbnZlcnQgIDEwMDAxMDAwOCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDI4NyBpbnZlcnQgIDEwMDAwMTAwOSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK2ludngyODggaW52ZXJ0ICAwMDAwMjAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyODkgaW52ZXJ0ICAwMDAwMzAwMDEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyOTAgaW52ZXJ0ICAwMDAwNDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyOTEgaW52ZXJ0ICAwMDAwNTAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyOTIgaW52ZXJ0ICAxMDEwNjAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyOTMgaW52ZXJ0ICAxMDAxNzAwMTAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyOTQgaW52ZXJ0ICAxMDAwODAxMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngyOTUgaW52ZXJ0ICAxMDAwOTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ25zCitpbnZ4Mjk2IGludmVydCAtMTAwMDAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4Mjk5IGludmVydCAgMTAwMDAxMDAwICAtPiAgMTExMTAxMTEKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK2ludngzNDEgaW52ZXJ0ICA5Ljk5OTk5OTk5RSs5OTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNDIgaW52ZXJ0ICAxRS05OTkgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNDMgaW52ZXJ0ICAxLjAwMDAwMDAwRS05OTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNDQgaW52ZXJ0ICAxRS0xMDA3ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNDUgaW52ZXJ0ICAtMUUtMTAwNyAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNDYgaW52ZXJ0ICAtMS4wMDAwMDAwMEUtOTk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNDcgaW52ZXJ0ICAtMUUtOTk5ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludngzNDggaW52ZXJ0ICAtOS45OTk5OTk5OUUrOTk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCitpbnZ4MzYxIGludmVydCAgMS4wICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MzYyIGludmVydCAgMUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MzYzIGludmVydCAgMC4wICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MzY0IGludmVydCAgMEUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MzY1IGludmVydCAgOS45ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4MzY2IGludmVydCAgOUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKK2ludng3ODggaW52ZXJ0IC1JbmYgICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ludng3OTQgaW52ZXJ0ICBJbmYgICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ludng4MjEgaW52ZXJ0ICBOYU4gICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ludng4NDEgaW52ZXJ0ICBzTmFOICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2ludng4NjEgaW52ZXJ0ICBOYU4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg2MiBpbnZlcnQgK05hTjIgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODYzIGludmVydCAgTmFOMyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4NjQgaW52ZXJ0ICBOYU40ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg2NSBpbnZlcnQgIE5hTjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODcxIGludmVydCAgc05hTjExICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4NzIgaW52ZXJ0ICBzTmFOMTIgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg3MyBpbnZlcnQgIHNOYU4xMyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODc0IGludmVydCAgc05hTjE0ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4NzUgaW52ZXJ0ICBzTmFOMTUgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg3NiBpbnZlcnQgIE5hTjE2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitpbnZ4ODgxIGludmVydCArTmFOMjUgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2ludng4ODIgaW52ZXJ0IC1OYU4yNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoraW52eDg4MyBpbnZlcnQgLXNOYU4yNyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2xuLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2xuLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYwMmFmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG4uZGVjVGVzdApAQCAtMCwwICsxLDYxMSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBsbi5kZWNUZXN0IC0tIGRlY2ltYWwgbmF0dXJhbCBsb2dhcml0aG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIGJhc2ljcyAoZXhhbXBsZXMgaW4gc3BlY2lmaWNhdGlvbikKK3ByZWNpc2lvbjogOQorbG54czAwMSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CitsbnhzMDAyIGxuICAxLjAwMCAgICAgICAgICAgICAtPiAgIDAKK2xueHMwMDMgbG4gIDIuNzE4MjgxODMgICAgICAgIC0+ICAgMS4wMDAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54czAwNCBsbiAgMTAgICAgICAgICAgICAgICAgLT4gICAyLjMwMjU4NTA5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbnhzMDA1IGxuICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKKworCistLSBiYXNpY3MKK3ByZWNpc2lvbjogICAxNgorbG54MDAwMSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CitsbngwMDAyIGxuICAxRS05ICAgICAgICAgICAgICAtPiAtMjAuNzIzMjY1ODM2OTQ2NDEgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMDMgbG4gIDAuMDAwNyAgICAgICAgICAgIC0+ICAtNy4yNjQ0MzAyMjI5MjA4NjkgIEluZXhhY3QgUm91bmRlZAorbG54MDAwNCBsbiAgMC4xICAgICAgICAgICAgICAgLT4gIC0yLjMwMjU4NTA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkCitsbngwMDA1IGxuICAwLjcgICAgICAgICAgICAgICAtPiAgLTAuMzU2Njc0OTQzOTM4NzMyNCBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMDYgbG4gIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorbG54MDAwNyBsbiAgMS4wMDAgICAgICAgICAgICAgLT4gICAwCitsbngwMDA4IGxuICAxLjUgICAgICAgICAgICAgICAtPiAgIDAuNDA1NDY1MTA4MTA4MTY0NCBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMDkgbG4gIDIgICAgICAgICAgICAgICAgIC0+ICAgMC42OTMxNDcxODA1NTk5NDUzIEluZXhhY3QgUm91bmRlZAorbG54MDAxMCBsbiAgMi43MTgyODE4Mjg0NTkwNDUgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitsbngwMDExIGxuICAyLjcxODI4MTgyODQ1OTA0NiAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMTIgbG4gIDIuNzE4MjgxODI4NDU5MDQ3IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEgIEluZXhhY3QgUm91bmRlZAorbG54MDAxMyBsbiAgMTAgICAgICAgICAgICAgICAgLT4gICAyLjMwMjU4NTA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkCitsbngwMDE0IGxuICAxMC41ICAgICAgICAgICAgICAtPiAgIDIuMzUxMzc1MjU3MTYzNDc4ICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMTUgbG4gIDk5OTkgICAgICAgICAgICAgIC0+ICAgOS4yMTAyNDAzNjY5NzU4NDkgIEluZXhhY3QgUm91bmRlZAorbG54MDAxNiBsbiAgMUU2ICAgICAgICAgICAgICAgLT4gIDEzLjgxNTUxMDU1Nzk2NDI3ICAgSW5leGFjdCBSb3VuZGVkCitsbngwMDE3IGxuICAxRSs5ICAgICAgICAgICAgICAtPiAgMjAuNzIzMjY1ODM2OTQ2NDEgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwMTggbG4gK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCistLSBub3RhYmxlIGNhc2VzCistLSBuZWdhdGl2ZXMKK2xueDAwMjEgbG4gLTFFLTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDAyMiBsbiAtMC4wMDA3ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDIzIGxuIC0wLjEgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xueDAwMjQgbG4gLTAuNyAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDAyNSBsbiAtMSAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDI2IGxuIC0xLjUgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xueDAwMjcgbG4gLTIgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDAyOSBsbiAtMTAuNSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDI4IGxuIC05OTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xueDAwMzAgbG4gLTIuNzE4MjgxODI4NDU5MDQ1IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbG54MDAzMSBsbiAtMi43MTgyODE4Mjg0NTkwNDYgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDMyIGxuIC0wICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xueDAwMzMgbG4gLTBFKzE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorbG54MDAzNCBsbiAtMEUtMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5CistLSBvdGhlciB6ZXJvcworbG54MDA0MSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CitsbngwMDQyIGxuICAwRSsxNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xueDAwNDMgbG4gIDBFLTE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQorLS0gaW5maW5pdGllcworbG54MDA0NSBsbiAtSW5maW5pdHkgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsbngwMDQ2IGxuICtJbmZpbml0eSAgICAgICAgICAtPiBJbmZpbml0eQorLS0gb25lcworbG54MDA1MCBsbiAgMSAgICAgICAgICAgICAgICAgLT4gICAwCitsbngwMDUxIGxuICAxLjAgICAgICAgICAgICAgICAtPiAgIDAKK2xueDAwNTIgbG4gIDEuMDAwMDAwMDAwMDAwMDAwIC0+ICAgMAorbG54MDA1MyBsbiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAwCisKKy0tIGxvd2VyIHByZWNpc2lvbiBiYXNpY3MKK1ByZWNpc2lvbjogNworbG54MDEwMSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CitsbngwMTAyIGxuICAxRS05ICAgICAgICAgICAgICAtPiAtMjAuNzIzMjcgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMDMgbG4gIDAuMDAwNyAgICAgICAgICAgIC0+ICAtNy4yNjQ0MzAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEwNCBsbiAgMC4xICAgICAgICAgICAgICAgLT4gIC0yLjMwMjU4NSAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTA1IGxuICAwLjcgICAgICAgICAgICAgICAtPiAgLTAuMzU2Njc0OSAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMDYgbG4gIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorbG54MDEwNyBsbiAgMS41ICAgICAgICAgICAgICAgLT4gICAwLjQwNTQ2NTEgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTA4IGxuICAyICAgICAgICAgICAgICAgICAtPiAgIDAuNjkzMTQ3MiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMDkgbG4gIDIuNzE4MjgxODI4NDU5MDQ1IC0+ICAgMS4wMDAwMDAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDExMCBsbiAgMi43MTgyODE4Mjg0NTkwNDYgLT4gICAxLjAwMDAwMCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTExIGxuICAyLjcxODI4MTgyODQ1OTA0NyAtPiAgIDEuMDAwMDAwICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMTIgbG4gIDEwICAgICAgICAgICAgICAgIC0+ICAgMi4zMDI1ODUgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDExMyBsbiAgMTAuNSAgICAgICAgICAgICAgLT4gICAyLjM1MTM3NSAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTE0IGxuICA5OTk5ICAgICAgICAgICAgICAtPiAgIDkuMjEwMjQwICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMTUgbG4gIDFFNiAgICAgICAgICAgICAgIC0+ICAxMy44MTU1MSAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDExNiBsbiAgMUUrOSAgICAgICAgICAgICAgLT4gIDIwLjcyMzI3ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTE3IGxuICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKK1ByZWNpc2lvbjogMgorbG54MDEyMSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CitsbngwMTIyIGxuICAxRS05ICAgICAgICAgICAgICAtPiAtMjEgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMjMgbG4gIDAuMDAwNyAgICAgICAgICAgIC0+ICAtNy4zICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEyNCBsbiAgMC4xICAgICAgICAgICAgICAgLT4gIC0yLjMgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTI1IGxuICAwLjcgICAgICAgICAgICAgICAtPiAgLTAuMzYgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMjYgbG4gIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorbG54MDEyNyBsbiAgMS41ICAgICAgICAgICAgICAgLT4gICAwLjQxICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTI4IGxuICAyICAgICAgICAgICAgICAgICAtPiAgIDAuNjkgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMjkgbG4gIDIuNzE4MjgxODI4NDU5MDQ1IC0+ICAgMS4wICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEzMCBsbiAgMi43MTgyODE4Mjg0NTkwNDYgLT4gICAxLjAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTMxIGxuICAyLjcxODI4MTgyODQ1OTA0NyAtPiAgIDEuMCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMzIgbG4gIDEwICAgICAgICAgICAgICAgIC0+ICAgMi4zICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEzMyBsbiAgMTAuNSAgICAgICAgICAgICAgLT4gICAyLjQgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTM0IGxuICA5OTk5ICAgICAgICAgICAgICAtPiAgIDkuMiAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxMzUgbG4gIDFFNiAgICAgICAgICAgICAgIC0+ICAxNCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDEzNiBsbiAgMUUrOSAgICAgICAgICAgICAgLT4gIDIxICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTM3IGxuICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKK1ByZWNpc2lvbjogMQorbG54MDE0MSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5CitsbngwMTQyIGxuICAxRS05ICAgICAgICAgICAgICAtPiAtMkUrMSAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNDMgbG4gIDAuMDAwNyAgICAgICAgICAgIC0+ICAtNyAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE0NCBsbiAgMC4xICAgICAgICAgICAgICAgLT4gIC0yICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTQ1IGxuICAwLjcgICAgICAgICAgICAgICAtPiAgLTAuNCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNDYgbG4gIDEgICAgICAgICAgICAgICAgIC0+ICAgMAorbG54MDE0NyBsbiAgMS41ICAgICAgICAgICAgICAgLT4gICAwLjQgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTQ4IGxuICAyICAgICAgICAgICAgICAgICAtPiAgIDAuNyAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNDkgbG4gIDIuNzE4MjgxODI4NDU5MDQ1IC0+ICAgMSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE1MCBsbiAgMi43MTgyODE4Mjg0NTkwNDYgLT4gICAxICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTUxIGxuICAyLjcxODI4MTgyODQ1OTA0NyAtPiAgIDEgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNTIgbG4gIDEwICAgICAgICAgICAgICAgIC0+ICAgMiAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE1MyBsbiAgMTAuNSAgICAgICAgICAgICAgLT4gICAyICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTU0IGxuICA5OTk5ICAgICAgICAgICAgICAtPiAgIDkgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAxNTUgbG4gIDFFNiAgICAgICAgICAgICAgIC0+ICAxRSsxICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MDE1NiBsbiAgMUUrOSAgICAgICAgICAgICAgLT4gIDJFKzEgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTU3IGxuICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKKworLS0gZ3JvdXAgbG93LXByZWNpc2lvbiBsbigxKXM6CitwcmVjaXNpb246IDEKK2xueDAxNjEgbG4gIDEgLT4gMAorcHJlY2lzaW9uOiAyCitsbngwMTYyIGxuICAxIC0+IDAKK3ByZWNpc2lvbjogMworbG54MDE2MyBsbiAgMSAtPiAwCitwcmVjaXNpb246IDQKK2xueDAxNjQgbG4gIDEgLT4gMAorcHJlY2lzaW9uOiA1CitsbngwMTY1IGxuICAxIC0+IDAKK3ByZWNpc2lvbjogNgorbG54MDE2NiBsbiAgMSAtPiAwCitwcmVjaXNpb246IDcKK2xueDAxNjcgbG4gIDEgLT4gMAorcHJlY2lzaW9uOiA4CitsbngwMTY4IGxuICAxIC0+IDAKKworLS0gZWRnZS10ZXN0IGxuKDIpIGFuZCBsbigxMCkgaW4gY2FzZSBvZiBsb29rYXNpZGVzCitwcmVjaXNpb246IDQ1CitsbngyMDEgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NTAwMTM0ICBJbmV4YWN0IFJvdW5kZWQKK2xueDIwMiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDExMDE0OSAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0NAorbG54MjAzICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUwMDEzICAgSW5leGFjdCBSb3VuZGVkCitsbngyMDQgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxNSAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDMKK2xueDIwNSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1MDAxICAgIEluZXhhY3QgUm91bmRlZAorbG54MjA2ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMTEwMSAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQyCitsbngyMDcgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NTAwICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIwOCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDExMCAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0MQorbG54MjA5ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUwICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMTAgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDAKK2xueDIxMSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1ICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjEyICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMSAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM5CitsbngyMTMgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc2ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIxNCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzOAorbG54MjE1ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA4ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMTYgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzcKK2xueDIxNyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgxICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjE4ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwOCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM2CitsbngyMTkgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIyMCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMSAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzNQorbG54MjIxICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU3ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMjIgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzQKK2xueDIyMyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY2ICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjI0ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NCAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMzCitsbngyMjUgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc3ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIyNiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNiAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMgorbG54MjI3ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE4ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngyMjggIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0NCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzEKK2xueDIyOSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgyICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54MjMwICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMwCitsbngyMzEgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDIzMiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2OCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBleHRyZW1lIGlucHV0IHJhbmdlIHZhbHVlcworbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK1ByZWNpc2lvbjogMTYKKworbG54MDkwMSBsbiAxZS00MDAgICAgLT4gLTkyMS4wMzQwMzcxOTc2MTgzICBJbmV4YWN0IFJvdW5kZWQKK2xueDA5MDIgbG4gMWUrNDAwICAgIC0+ICA5MjEuMDM0MDM3MTk3NjE4MyAgSW5leGFjdCBSb3VuZGVkCitsbngwOTAzIGxuIDFlLTk5OTk5OSAtPiAtMjMwMjU4Mi43OTA0MDg5NTMgIEluZXhhY3QgUm91bmRlZAorbG54MDkwNCBsbiAxZSs5OTk5OTkgLT4gIDIzMDI1ODIuNzkwNDA4OTUzICBJbmV4YWN0IFJvdW5kZWQKK2xueDA5MDUgbG4gMWUtMTAwMDAxMyAgICAgICAgICAgICAgICAtPiAtMjMwMjYxNS4wMjY2MDAyNTUgIEluZXhhY3QgUm91bmRlZAorbG54MDkwNiBsbiAyZS0xMDAwMDEzICAgICAgICAgICAgICAgIC0+IC0yMzAyNjE0LjMzMzQ1MzA3NCAgSW5leGFjdCBSb3VuZGVkCisKK2xueDA5MTAgbG4gOS45OTk5OTllKzk5OTk5OSAgICAgICAgICAtPiAgMjMwMjU4NS4wOTI5OTM5NDYgIEluZXhhY3QgUm91bmRlZAorbG54MDkxMSBsbiA5Ljk5OTk5OTllKzk5OTk5OSAgICAgICAgIC0+ICAyMzAyNTg1LjA5Mjk5NDAzNiAgSW5leGFjdCBSb3VuZGVkCitsbngwOTEyIGxuIDkuOTk5OTk5OTllKzk5OTk5OSAgICAgICAgLT4gIDIzMDI1ODUuMDkyOTk0MDQ1ICBJbmV4YWN0IFJvdW5kZWQKK2xueDA5MTMgbG4gOS45OTk5OTk5OTllKzk5OTk5OSAgICAgICAtPiAgMjMwMjU4NS4wOTI5OTQwNDYgIEluZXhhY3QgUm91bmRlZAorbG54MDkxNCBsbiA5Ljk5OTk5OTk5OTk5OWUrOTk5OTk5ICAgIC0+ICAyMzAyNTg1LjA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkCitsbngwOTE1IGxuIDkuOTk5OTk5OTk5OTk5OTk5ZSs5OTk5OTkgLT4gIDIzMDI1ODUuMDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQKK2xueDA5MTYgbG4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTllKzk5OTk5OSAtPiAgMjMwMjU4NS4wOTI5OTQwNDYgIEluZXhhY3QgUm91bmRlZAorCistLSByYW5kb21zCistLSBQPTUwLCB3aXRoaW4gMC05OTkKK1ByZWNpc2lvbjogNTAKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitsbngxNTAxIGxuIDAuMDAwOTg4MDA5MDY1NzQ0ODYzODg2MDQ2MDg0Nzc4Njk4MTI1MTg4NTcwMjM3Njg5NTEgLT4gLTYuOTE5ODE4Njg0NDAzMzc4Nzk5NTk0NTE0NzgzNjk1NTU4NjAwOTU0ODUxMzA0MzY4OSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MDIgbG4gMTU4LjE1ODY2NjI0NjY0NjIzMDcwMTg0NTk1MDQ1MzA0MTQ1OTQ5OTAwNzE0OTg3ODI3ICAtPiA1LjA2MzU5ODc0NTg4OTU2NDc0NTQ5MDc4MDY1MDc1MDM4MjU2MDI3NTgzOTIyODc2ODQgSW5leGFjdCBSb3VuZGVkCitsbngxNTAzIGxuIDAuMDA1NjU2NjE0MTIwNTk1NzE5MjUwNDAyODU4MTQwMjE3OTk3NzUyNDkyODgzMDkzMjEgLT4gLTUuMTc0OTI5Nzc3Njc2MDYzMjEwMjA0NzU0MDMwMDQ5MTU1MDkzMTY1MTMxODk3NTIzNyBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MDQgbG4gMC4wMDAwMDAwNjkxNDIzMjUzMjYyMDQ4OTYwMjAwODQwMjA5MTY2NjU0NzkwMzE4MDYwNyAtPiAtMTYuNDg3MDk4NzcwODc3ODI1MzA4MTM4OTc2ODE4Njg4NzcxNjM4MTcyMzMzMDM0MzQ3IEluZXhhY3QgUm91bmRlZAorbG54MTUwNSBsbiAwLjAwMDI1MzgwMzc0NjIxMjk3NjU3NTA0NjYxNTQwNzQ5MzU1MjUxMjMxNzcwMDcwNzIzIC0+IC04LjI3ODk0OTI0MjMwMDUwMDMyMDUyNDIxNjI3NDE1NjkwMzMxMjQyNjAzMjE5NTQ1ODkgSW5leGFjdCBSb3VuZGVkCitsbngxNTA2IGxuIDgzLjAzMzY1NDA2Mzg3NzQyNjI2MTEwODU5MjU5OTE4MjQxODk1MzQ0MjY3NzU1NDgwNiAgLT4gNC40MTkyNDU5OTYyNjQ3MTM3OTc2OTQ5MjQ5ODEwODE1Njk4NDY1MDMxNjA5ODQzNjY5IEluZXhhY3QgUm91bmRlZAorbG54MTUwNyBsbiAwLjAwMDAwMDAwNDE2ODYzMjI4MDkyNDgxNjUxNjI3NzM0NjY4NDQwNjYzNjc4MTE4NzI5IC0+IC0xOS4yOTU2Nzc4NDUxMjIxNDE3NzI3OTEyOTQ1OTk3MTQ5NTAxNzUyODQ5MTU2NjY0MzAgSW5leGFjdCBSb3VuZGVkCitsbngxNTA4IGxuIDAuMDAwMDAxNDA4NDc4NzMxODc4MjA1NzAxODEyMTQyNzE5NjA1MTEwODA1MjM0NTc2NjkgLT4gLTEzLjQ3MzAwMDM0OTU4MTk2NzE4OTY2ODMwNTMxNDM4NDk1MjI1MTU1NjgwOTQ4MDMzOSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MDkgbG4gNjYuMTc2MTA2NTU1MTgxNTI3MTAxNjMwMzUxMTI3NTgzOTQ0Njg5NzUyMDY5MTMyNTIyICAtPiA0LjE5MjMxOTQ2OTYyMzI1MDU4ODM2NjYxNzExMTY5NjYxMzc2OTQwMTM0MzE1MDQyNTIgSW5leGFjdCBSb3VuZGVkCitsbngxNTEwIGxuIDAuMDAwMDAwMDAwMDAwMDk4OTkwNDM0ODc0MDM1OTA5MDAxMTE2MDIwMjQ1NjIyOTc5MDggLT4gLTI5Ljk0Mzc1MzE2Njg3Nzg0MDk4NTgyMTUwODExMjkxNzk5MTUwNjY1NjU0NTE3NDE2MyBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MTEgbG4gMC4wMDAwMDAwMDAwMDMyNDYxODI5NjcyMTc0NzA5NzUxMDQ1MzM4ODY4MzkxMjczMzU2OSAtPiAtMjYuNDUzNTQxMjgxNDQ0NTg2ODE5MDA5NTQ2NDE4NTc3NTA3MTYzMzYyNTkwMTM5NDIyIEluZXhhY3QgUm91bmRlZAorbG54MTUxMiBsbiA3Mi42NDY5Njg4MTg0NjM1NDY0NDk0OTkxNDc1NzkwMjM1NTUwMDgzOTI4NjA0MjMzODUgIC0+IDQuMjg1NjExNjY2MDY4OTY0Njg4Mjg1MjEyODg1MzQyMzU2NjI3NjcxODIzMDQyNjQ3OSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MTMgbG4gMC4wMDAwMDAwMDAwMDAwMDA2Njc1NTQ4MzEyNDYzNTYxMjU3NDI2MzE1MzgyNTk5MDUyMyAtPiAtMzQuOTQyOTEwMTQyODAyNzY5MzE5MjYyODc1MDgwMzk4ODUyNDkxNTg4NzA3MTcyNDgzIEluZXhhY3QgUm91bmRlZAorbG54MTUxNCBsbiA2MS4wMDI5MTA0NDcyMDIzOTgyMDQxMTQ5MDk0NTE4NTExMTE0MjQ2NTc2NzE5MTEwMDIgIC0+IDQuMTEwOTIxNTc1Mjg0MzM3NzMyMzM2MzE4MjA1MTQ0NjE3NzA2NjQzNDAzODA5NjUyOSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MTUgbG4gOTE3LjA2OTE3NjExMzMxOTgwOTk5MjI3ODkzNTg0MDEwNTQ0NTQyMzEyMjM5MTc0Nzc0ICAtPiA2LjgyMTE4MjkwNjgzMDMxMTQxMjg3NTI0NTM2NjE5NDY0NDY5Nzk3ODc4MjYyODI5MDcgSW5leGFjdCBSb3VuZGVkCitsbngxNTE2IGxuIDAuMDAwMDAwMDAxNzA4MjM3OTQ4ODM2NzMwODMzNTg1NDk3NDkwNzg5NzIwMDM5NjUxOTQgLT4gLTIwLjE4NzgwMzQzNjk3NjE1MDQ3NzI5NzI0NjY2Njc3MTYyNjgyNzA1NzE5MTAyMzAwNCBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MTcgbG4gMC41MzczMTc2Nzg0NTM1ODIyNDQ0NTgwOTc2MTMxNTE1OTI0OTg5ODU2NjU0MjkxMDY0OSAtPiAtMC42MjExNjU3NzkzOTk2ODQwOTIxMTczNjQxMzYyODIzNjI4NTE2MDA0ODM1NzAwMDk2MSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MTggbG4gMC4wMDAwMDAwMDAwMDAwMDAwODk2NTI5MTM5Mjg4MjgwNDE2MTI5OTc1ODcwODAzMzM3MyAtPiAtMzYuOTUwNTg1OTcwOTgwODU3Mzc2MDgxMjY1MDczMjc2MzAzNjcwODIwMDU2OTE2MjA2IEluZXhhY3QgUm91bmRlZAorbG54MTUxOSBsbiAwLjAwMDAwMDAwMDA2OTkwMjQ0OTE2MDI2NDI5OTA0NDk4Mjc4OTgyNTMwMTcwMjk1NjY4IC0+IC0yMy4zODM5MjA0MjkyNDQ0NTc1NzgzNzM1MjM1MDg0Mjc3ODMxNDQ1ODk0ODA0MjA3NTMgSW5leGFjdCBSb3VuZGVkCitsbngxNTIwIGxuIDQuMDMxMjU0Mjk3NzA3MDMwMDA3MDUwNjA2NDY2NjUzNjQ3ODM3MzgwMTk4ODU0MDYxNCAgLT4gMS4zOTQwNzc1Njc2NTkyNDUxOTQ1Nzk1NzUyNzk2NDIxMzkxODcxMzAyMDI0NzYzMzA1IEluZXhhY3QgUm91bmRlZAorbG54MTUyMSBsbiAyNzEuODQ5OTEzMTE1NTE4NzU2MDE0MzI1MTg4MTk1NjIzOTE2OTkzMjQ2MzIzOTY0MjMgIC0+IDUuNjA1MjUwMTIzOTg3Mzg2MjUxNzkxNjY3OTc0NzE0NjUzOTgwODA3NzQzMTg3MzQ3OCBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MjIgbG4gNy40MTE4NjcxNjI5MzczODY0NjY3MjI5NDQ1NzQ2ODYyMzE0NDQzODk1NDA0ODE4Njg5ICAtPiAyLjAwMzA4MjM4NjM3MDYzNDQ2MjgyMzkxNDc2MzkzMTgyODk5NjE5MTcwNjAxMjExNDEgSW5leGFjdCBSb3VuZGVkCitsbngxNTIzIGxuIDAuMDAwMDAwMDAwMDAwMDIwMjYzMTE0NTI2MjUzNjQ5MDUzNTczMjE2NjQxODYwMzQyNTggLT4gLTMxLjUyOTk3NDE4MDA1NDQzODc5MjA0Mzg1Njg3NzMxNDA0Mzc5NDMyMDk1MTEzNDc1NCBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MjQgbG4gMC4wMDAwMDAwMDAwMDAwOTU2MzM5ODY1MTI2MTc1Njk1MjM5ODI1MDYyNDczNzgwOTM0NyAtPiAtMjkuOTc4MjQ4MTMwNTc2OTcyOTUzMTQxMjg0MTM2OTYyNjcwMDIxMzY4ODM0NzkyNTc5IEluZXhhY3QgUm91bmRlZAorbG54MTUyNSBsbiAwLjAwMDAwMDAwMDA5NTU2NzcyNjY5NDA5ODU4NjUzMDI2NTU4MjIzNDY1MTk3ODA4OTkxIC0+IC0yMy4wNzExODU5Mzk3NDgyODU1NDEyMjgyMDYxNjE0NzI5NTY2NjExOTY5NTY3NDExODYgSW5leGFjdCBSb3VuZGVkCitsbngxNTI2IGxuIDYuODQ0MTY0ODI5ODAyNzMwMTI5MjM0MjA1NzI0ODczNzMyNjE1MjI1MDc5NDAyNjc2MSAgLT4gMS45MjMzOTY0Mzk1ODAxOTQ2NTk3MjcyNTg5NDczNDE3OTQ4MDI0MzYxMDA1MDgyOTA4IEluZXhhY3QgUm91bmRlZAorbG54MTUyNyBsbiAwLjAwMDAwMDAwMDAwMDczMDU5Njk5ODg0NDM5OTc5Mzk0OTQ1ODIyMDM1NzA0MjY0NTc3IC0+IC0yNy45NDQ5MTQzODgzNTM3MjQ3MTg4MzYxMDE4Mjg2Nzc3NzE5NjcxMjg1MDk2MDMxNTggSW5leGFjdCBSb3VuZGVkCitsbngxNTI4IGxuIDAuMDAwMDAwMDAwMDAwMDAwMDI2MTAwNzgyODA0MTkwODIyNjMxMzgwNjQ3NDU0MTY3ODcgLT4gLTM4LjE4NDU2NjM2NzUxNjIwNzg4NTU3Mzc3MzMyMDEzNTk2NTc5ODcxNzEyMDczNTExNSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MjkgbG4gMC4wMDAwMDAwMDAwMDAwMDAwMDE1MDI1OTUxNzE2NjI5NDI0MzA4ODU0NjgwNjA4MzI4MyAtPiAtNDEuMDM5MzM3OTQ2MjY2Njc2MTA4NTM4MTcwODM3NTgwMDUxNjk5NjE4MzM0OTI4NDIxIEluZXhhY3QgUm91bmRlZAorbG54MTUzMCBsbiAwLjAwMDAwMDAwMDAwMDAwMDg3OTE5MTYwNTQxNzE0NTgwNzA3MTgxOTY5NzA4NTAyMDkxIC0+IC0zNC42Njc1Mjg4MTg4Mjc2NzE1MDc1MTQzMTk3NDQwNDc0NDA2OTYxODczNTg2NzY4NDggSW5leGFjdCBSb3VuZGVkCitsbngxNTMxIGxuIDAuMDAwMDAwMDAwMDAzOTU3MjY3MjUxMjA3ODc3NjMyNzE4NDk1Nzc3MDgwNjg1ODQ1OTggLT4gLTI2LjI1NTQ2NzQxNjk2MTM1Nzc0MTgxODczNTc4NzIyNjY3MTkzODY3ODQyNDc0ODQzMSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MzIgbG4gMC4wMDAwMDAwMDAwMjAxNDMzNDkwMTY2OTM2NjIxODAxODM3NzIxMzE1MDcxNTkzODM1NSAtPiAtMjQuNjI4MTQ2OTU1NjM1MzU5MDM1Mjg5MTIzMDI3MzE5OTY5MjAxNjkzNzM3MTU5MTA4IEluZXhhY3QgUm91bmRlZAorbG54MTUzMyBsbiAwLjAwMDAwMDA4MDk3OTI3MTAxMTAxMDkzMTE3NzUzOTM4NzY2MjQxNDQyODk2MDMwNjM3IC0+IC0xNi4zMjkwNzI2Mjg0Njk3MTUxNzg2MzcxNzgzNjU3MTAzNzMzOTgyMDMxOTA5Mzc0NTQgSW5leGFjdCBSb3VuZGVkCitsbngxNTM0IGxuIDAuMDAwMDAwMDAwMDAwMTcxMTU4MzQxNjI2MzI4NjQzOTIwMzk2NjgxMTYyNDM5ODQxNzYgLT4gLTI5LjM5NjE4NzI5MjQzNDg5ODIyNTQ1MzYyNjc5NDQ1OTI4NTE1NzI2MzE3NzUyODAzNCBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MzUgbG4gMC4zOTE2ODMxNzU5Mzg2NjMzNDA4NzMwNTQ1OTkzMzcyMzg2NDI5NDg1NzA4NjEwNTAzNSAtPiAtMC45MzczMDE5OTA2Mjc1NzI0MDQ4NTgzNjYzNzMwNjc4NTAzNzM2ODc0NjczNzY5MzAyOSBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MzYgbG4gNzkuMzM1MDM2Nzk4OTcxNTE1MDI2NTE5NjMwMTAzMzI1MzY5NzI5NjM3NTE0MTI3NjE3ICAtPiA0LjM3MzY3OTg1NzAyODc4Mjg4MjM3NzIxNDk3MzUxNzA0MzEwMTA2MTY5NjE5NzY5NjUgSW5leGFjdCBSb3VuZGVkCitsbngxNTM3IGxuIDAuMDAwMDAwMDAwMDAwMDAwNTYwMDQ5NTIxMjk5MjYxMzc0MTM2MDIxMTY1OTE0OTM2MjUgLT4gLTM1LjExODUwNjQ2MzE4MTg3MDAyMDczMDY4NTg4NDMzMzAwMDI0MTAzOTAyODEyNzIxMyBJbmV4YWN0IFJvdW5kZWQKK2xueDE1MzggbG4gMC4wMDAwMDAwNjAwNjAzNTkwNzg0Mzg5MDkxODgzMjQ4MTA5OTY2MDYzOTU1MzY2NjA3OCAtPiAtMTYuNjI3OTE1Nzk1NzQ3MTEyNTY2NTMyNzA1OTc0ODUzMTE0NDU0NDA1MDEwNDcyMDQzIEluZXhhY3QgUm91bmRlZAorbG54MTUzOSBsbiAwLjAwMDAwMDAwMDg1MjQyMDI0OTM3NDE0OTA2MzcxMzMzODI2NTc0NjMyNDUwNTg3NTkwIC0+IC0yMC44ODI5NDE0NjAyNjgxMDEwODAxODY0ODIyMzA2NTc3NzQ5OTcyNzM0OTQxMDcyMjEgSW5leGFjdCBSb3VuZGVkCitsbngxNTQwIGxuIDAuMDAwMDAwMDAwMDAwNDM2NzEwOTk0OTkyNjIzNTAzMTYxNzMyNDY1NTA3NzE5NTE1NjEgLT4gLTI4LjQ1OTUwNDc1NzI4NTYzOTIyMTc3NjMwNTk2ODQ2OTA1ODg1NDU1ODcyNjU5Mzk0NSBJbmV4YWN0IFJvdW5kZWQKKworLS0gUD0zNCwgd2l0aGluIDAtOTk5CitQcmVjaXNpb246IDM0CitsbngxMjAxIGxuIDAuMDA4NjczMjg4MDgxNTkyNzE4Mjk5NzU2NjgxMDMzNDM5NCAtPiAtNC43NDc1MDczMTE5MjA4NDQ3NTI0ODY5MzgxODc5NzM3MjEgSW5leGFjdCBSb3VuZGVkCitsbngxMjAyIGxuIDAuMDAwNzEwNDEwMzY5MzQ2MDI2MDYwOTc5MjIyMjU2OTg1NCAtPiAtNy4yNDk2Njc3Njk5MDM1MDMwMjMwMDU1NDkyNTAzNDc2OTUgSW5leGFjdCBSb3VuZGVkCitsbngxMjAzIGxuIDc4Ni44Mzk4OTQ1Mzg1MTA1MTkwNjk3NTQxNDkzMzkyNzQyICAtPiA2LjY2ODAyNDc5MDAzMTgzNjM0MDQ3MTgyNDE0NzAxMDU0NiBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMDQgbG4gMC43NzIzMDczNjIwMjgyNjg3NjU2ODk1MTkwMTcxOTY3Mzk5IC0+IC0wLjI1ODM3MjY3MDg1MDY4NTA4Njg3ODY4MTYyMzgyMTczMjYgSW5leGFjdCBSb3VuZGVkCitsbngxMjA1IGxuIDAuMDA2MTA1Nzk1MTUxNzE5NzYzMTI4NzE4MzkzODQxMjIwMCAtPiAtNS4wOTg1MTY5MzM5MTg3OTczNDcwNjQ0NTQxMDM3NDI2MzUgSW5leGFjdCBSb3VuZGVkCitsbngxMjA2IGxuIDAuNjE4MTM3OTcwODE4NDM5MzczMDEwMzkxNzU2MjQ5ODc0NSAtPiAtMC40ODEwNDM1OTI2OTAzMzY1MDg3NDYzMzg3NzYwMzUwMDIxIEluZXhhY3QgUm91bmRlZAorbG54MTIwNyBsbiAwOS4xMzg4ODI2MTIyOTAzOTk4OTExMDc1MzM4OTA5Njc2MCAgLT4gMi4yMTI1MzgxMjU1MDc5NzU1NzQ1MDk1NjMwMjc2OTYwMjEgSW5leGFjdCBSb3VuZGVkCitsbngxMjA4IGxuIDgwMi4wMTA1NDE3MDYzMTQzNjk2NDk3MjkyMTU4MTQ3MTc0ICAtPiA2LjY4NzEyMTc1MjA1MjM0MTczNzIzNDgzMjIwMzM1MDIxNCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMDkgbG4gNzc4Ljc3NDk3MTAzODc3NzM3MTM1MjMwMjg0OTczMzMwNTggIC0+IDYuNjU3NzIyMTM1MTI2OTM1NDcyMDg2NjI1MDMxNDEzMDMxIEluZXhhY3QgUm91bmRlZAorbG54MTIxMCBsbiAwLjAwMjQ0NTcyOTU4OTUzNDY1MDI1MTM1Njc2NzkzOTA2MTYgLT4gLTYuMDEzNDExNzk5OTQwMjQ1MzQ1MzIxMzQ4MjkwMzk4NTE3IEluZXhhY3QgUm91bmRlZAorbG54MTIxMSBsbiAwLjAwMDA1MTEyOTY5NDc4NzI4MjgzMTAzMzg4NjQyMTc4NjAgLT4gLTkuODgxMTQ1MTE4MjM3MjgxNzk4MDgxNTczMTMxNzExNjM2IEluZXhhY3QgUm91bmRlZAorbG54MTIxMiBsbiAwLjAwMDAyNDY4MDM1MDg2MDI1NTQ5MjQ5Mzg2ODUxNTU2NTggLT4gLTEwLjYwOTUwMzE0MjY0ODI1NjYxODI1MzYwOTcxNDMwMjE4IEluZXhhY3QgUm91bmRlZAorbG54MTIxMyBsbiA5LjAyNzg5ODE5OTI1MzUxMTY2ODI0Mjk3Nzc2NjYxNjA4MiAgLT4gMi4yMDAzMTk1ODI3Nzg4OTkwMjk3ODYwMTc4MzA1NTcyOTMgSW5leGFjdCBSb3VuZGVkCitsbngxMjE0IGxuIDAuMDk5MTgxMjM5NjU0MjUwNTYzMTg1MDY5MjgwMDkwNDE4OCAtPiAtMi4zMTA4MDYzOTg5NjQ2NzIyNTg4MjMwNDMxODA0MDAzODQgSW5leGFjdCBSb3VuZGVkCitsbngxMjE1IGxuIDAuMDAwMDAwMDAwMDA3MDIzODgxMDE0MzAyODgxMTIyMzkyNCAtPiAtMjUuNjgxNzA1MTk5NjE2MzY2NDcxNzQ3MTQ1MzgyOTAwNzUgSW5leGFjdCBSb3VuZGVkCitsbngxMjE2IGxuIDIuNjMwMTAxNjY1MzQyODI2NDk0NzMwMzk0NzI5MzEzMTY3ICAtPiAwLjk2NzAyMjUwMTQ2NjQzNjc0NjUxMjgyNDMwMzk3NDk1NTkgSW5leGFjdCBSb3VuZGVkCitsbngxMjE3IGxuIDAuMDA1Njg3ODkyODU5NDM1OTU4NzY5MTUyNjA2MzI1NDY4MyAtPiAtNS4xNjk0MTU0MjI5MDQwMzc4MTk3MzY2MzczOTk0NDUwOTYgSW5leGFjdCBSb3VuZGVkCitsbngxMjE4IGxuIDU2Ny4zNDM2MDQ3MTIxMDU3ODQzOTA4MTA2NTczMDk1NTkwICAtPiA2LjM0MDk2NTEyNDk2NDI1ODQ4NjQ2MzQ0NDM2MDc4Nzk3MCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMTkgbG4gMS4xOTkyOTEyNDgxMjQ2NTU5OTY2MTQ2MDU3NDU2NDk3MjUgIC0+IDAuMTgxNzMwNzU1NzQyNTkxMTgwNTc2NTA4Nzc1NTY3NTY1NyBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMjAgbG4gMjUuMDIwNTA0NDg1ODIwMzEwOTg2OTYyNjc0NzkxMzU1NTcgIC0+IDMuMjE5Njk1NjY4MTM3NjU5MTM5NTQ0MTc4OTA1NDU5MzE3IEluZXhhY3QgUm91bmRlZAorbG54MTIyMSBsbiAwLjAwMDAwMDAwMDAwMDk5Mzk1OTcwMjM1NTg3NTY5NjEzMDAgLT4gLTI3LjYzNzA3OTcyOTk2NTM3NjM2NTA0Mzk2NTU4MjU5MDU4IEluZXhhY3QgUm91bmRlZAorbG54MTIyMiBsbiAwLjAwMDAwMDc5ODg1NTE2NzAxNTk0Mjk3MTY1MDY0MzA0MDMgLT4gLTE0LjA0MDA4NjE3NTQyNTk3MjMwOTg4MTk4NjEyMzc2NDE1IEluZXhhY3QgUm91bmRlZAorbG54MTIyMyBsbiA0LjY4MTUxNTgwMDE3NjEyOTE4NDg3Mzc3MDYwNTU4OTc5NSAgLT4gMS41NDM2MjE5NDY0MTUzODMzMzg5NzIxMjQ0NDU0NDU3NDggSW5leGFjdCBSb3VuZGVkCitsbngxMjI0IGxuIDE1Ljk1MTI2NjY5MTYxMTAzMDExMjA2NjU4NzQ5MzQ1NzgxICAtPiAyLjc2OTUzODI0MjQ3OTQ4MzUzOTI3NTk4NjM5NTQ0MzUzOSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMjUgbG4gMC4wMzAxNjI2NzgzOTIyMjExMjEzNjc1NDU3Mjc5MDc2MDY2IC0+IC0zLjUwMTE0OTkzMzY3NzI4MzM0MTAyMzkzMjI4MTgyNjM0MSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMjYgbG4gMDAwLjAwNDA1NDQwNjQ4ODE4MjE3NzA1Mjg0NzUxODU2NzQgIC0+IC01LjUwNzk1MDk2NzU1NzAyMTY3MTY0NzE2NTg4OTYwODMyNCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMjcgbG4gMjkuMDE2MTcwOTU5MzU1OTM3OTIwOTU5MTM3ODUxMDAzNjAgIC0+IDMuMzY3ODUzMjkzODYyNzQ1NjUxODg4NDUwMDA0NDczMjk3IEluZXhhY3QgUm91bmRlZAorbG54MTIyOCBsbiA3OC4wMTgzNjE2NzM0NDczNjczMzAyNDgwNDI0MzE5NTMyMyAgLT4gNC4zNTY5NDQyMDUwNTU3Njg1NzU5ODc3ODEzNzUwMDM5OTIgSW5leGFjdCBSb3VuZGVkCitsbngxMjI5IGxuIDAuMDAwMDAwMDA5NjU0NTMxOTMxNjk2NTMyMTE1ODYzNDg5MyAtPiAtMTguNDU1ODM4NDAxNjA5NjU4MTQ0NjIwOTU0NzczNjUwMTMgSW5leGFjdCBSb3VuZGVkCitsbngxMjMwIGxuIDk3Ljk1NDc1MjM3NzIwNTc5NzUyNzcwNTg3MTg1MDc0NDI4ICAtPiA0LjU4NDUwNTY2MTYxMjgxMjc0MjIwODYxOTM1ODIxNDcyOSBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMzEgbG4gNTI4LjA2MDkyNjIwNTA0MjMyNDY0MDI1NjQyMjg0MzIzNzEgIC0+IDYuMjY5MjExNjY3NTg5MTM4MTEzMzk2NTgzODk0MzE1OTU2IEluZXhhY3QgUm91bmRlZAorbG54MTIzMiBsbiAwLjAwMDAwMDIyNTAwNjQzNDk3MzI5Njk2OTY2NjA0NTI5NzIgLT4gLTE1LjMwNzEzNjgzNTI2OTYzOTk2NzEyMTY3NzAxNzM4NzI0IEluZXhhY3QgUm91bmRlZAorbG54MTIzMyBsbiA0Ny45NzA2MzYzNzc2Nzk5ODY1ODU2NzE5OTA0OTcyNTc1NCAgLT4gMy44NzA1ODkwODE1ODU2NjA2OTIxOTU5ODk4NTQ4NDIzNzIgSW5leGFjdCBSb3VuZGVkCitsbngxMjM0IGxuIDAuMDAwNTM5NDMxMTM0NDU0MTQzMjMxODg1MzUxMzQxNDM2MSAtPiAtNy41MjQ5OTU0MjgzOTM5MjU5MzQwODcxMjY3MDI5NzQxMjEgSW5leGFjdCBSb3VuZGVkCitsbngxMjM1IGxuIDAuMDAwMDAwMDA5MDk3MzM4NTY0OTU2NzQ3MTY3NDk3MjYzMyAtPiAtMTguNTE1MjgzOTMxNTg5MzE3ODM0NDcwMzUwMDQxMjU3OTEgSW5leGFjdCBSb3VuZGVkCitsbngxMjM2IGxuIDAuMDAwMDAwMDAwMDIzODc3NjQ5MDIyNzU3NjE5NzMxNzk3NyAtPiAtMjQuNDU4MDc4MjgxODgzODk1NjEzMzExNTg4NzkyMDcyNjIgSW5leGFjdCBSb3VuZGVkCitsbngxMjM3IGxuIDAuMDAwMDIzNjU4NzAwMDIzMTkyMTUzMjE0NTMyNjIxODc1OCAtPiAtMTAuNjUxNzc5NjQ0OTk4MjMzMTQ5NTI0MjkyNzc5NzkwMzQgSW5leGFjdCBSb3VuZGVkCitsbngxMjM4IGxuIDQ5OS4xMjc3NDQ4ODQ2MTMwNzA5ODI3MTU0NTU2MTI1OTQyICAtPiA2LjIxMjg2MjA2NDc2MTQyNzk2NzQ2MTE4ODA4MzUxNDc3NCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyMzkgbG4gMC4wMDAwMDAzOTYwMTkyMzAwMjg0Nzg3NjYzNzEyNDE3NjQ3IC0+IC0xNC43NDE4MDMwNjYxOTI5ODU0ODA5MzY5NzYwODI5MzI4NCBJbmV4YWN0IFJvdW5kZWQKK2xueDEyNDAgbG4gNDEuMDgyNjgzNTA4Mjk0Nzc0NTE2NjcyMjg4OTI0OTUxMzYgIC0+IDMuNzE1NTg2NzA2ODg3Mjc4MDM5MTczNTg0ODU5MjE4OTYwIEluZXhhY3QgUm91bmRlZAorCistLSBQPTE2LCB3aXRoaW4gMC05OQorUHJlY2lzaW9uOiAxNgorbG54MTEwMSBsbiA3Ljk2NDg3NTI2MTAzMzk0OCAgLT4gMi4wNzUwNDEyODIzNTIyNDEgSW5leGFjdCBSb3VuZGVkCitsbngxMTAyIGxuIDEzLjU0NTI3Mzk2ODQ1Mzk0ICAtPiAyLjYwNjAzNzcwMTg3MDI2MyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMDMgbG4gMC4wMDA4MDI2NTU0MzQxMzMxIC0+IC03LjEyNzU4NTAzNDMyMTgxNCBJbmV4YWN0IFJvdW5kZWQKK2xueDExMDQgbG4gMC4wMDAwMDMwNTgyMjMzMjYxIC0+IC0xMi42OTc2NzY0MjMwMDYyNSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMDUgbG4gMC4wMDA0NDc3NDk3NTA5NjcyIC0+IC03LjcxMTI3NjA3MzIxMDc2NiBJbmV4YWN0IFJvdW5kZWQKK2xueDExMDYgbG4gNy42MTYyNjg2MjI0NzQzNzEgIC0+IDIuMDMwMjg2NTY3Njc1MTQ4IEluZXhhY3QgUm91bmRlZAorbG54MTEwNyBsbiA1MS41ODMyOTkyNTgwNjM4MSAgLT4gMy45NDMxOTc5NjIzMDk1NjkgSW5leGFjdCBSb3VuZGVkCitsbngxMTA4IGxuIDAuMDAxODE5NzQ5Nzk1MTI2MyAtPiAtNi4zMDkwNTYyNjI1NDkzNDUgSW5leGFjdCBSb3VuZGVkCitsbngxMTA5IGxuIDIuOTU2MjgyNDU3MDcyOTg0ICAtPiAxLjA4MzkzMjU1MjMzNDU3NSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMTAgbG4gMC4zODQzMzI1NTc5MTg5OTA2IC0+IC0wLjk1NjI0NzA2NDk0MDA1NTggSW5leGFjdCBSb3VuZGVkCitsbngxMTExIGxuIDAuMDA3NDQ2NjMyOTI2NTY2MyAtPiAtNC44OTk5OTMzMDQ5MTkyMzcgSW5leGFjdCBSb3VuZGVkCitsbngxMTEyIGxuIDAuMDAwMzM3MjQ3ODUzMjk5MyAtPiAtNy45OTQ2OTI0MjgyMDYzNzggSW5leGFjdCBSb3VuZGVkCitsbngxMTEzIGxuIDAuMDA4NDc5MjI2MzE2NzgwOSAtPiAtNC43NzAxMzYwNjk1NjkyNzEgSW5leGFjdCBSb3VuZGVkCitsbngxMTE0IGxuIDUuOTI2NzU2OTk4MTUxMTAyICAtPiAxLjc3OTQ3NzE4MjgzNDMwNSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMTUgbG4gOS4wMjU2OTkxNTIxODA4OTcgIC0+IDIuMjAwMDc1OTY5NjA0MTE5IEluZXhhY3QgUm91bmRlZAorbG54MTExNiBsbiAxLjkxMDEyNDY0MzUzMzUyNiAgLT4gMC42NDcxNjg0OTgzMjM4MTgzIEluZXhhY3QgUm91bmRlZAorbG54MTExNyBsbiAwLjgxNTg5MjI3MTE0MTEwMjAgLT4gLTAuMjAzNDcyOTUzMzkzOTM4NyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMTggbG4gMC4wMDY3MDgwMDE2NDc1MzIyIC0+IC01LjAwNDQ1NDE4OTQxNDEzOSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMTkgbG4gMC4wMDQ3NTgzMjQyMDkyNzE2IC0+IC01LjM0Nzg1OTcyOTYwMTA5NCBJbmV4YWN0IFJvdW5kZWQKK2xueDExMjAgbG4gMC4wMzg2NjQ3NDExNjQxMzM5IC0+IC0zLjI1MjgyNzE3NTI2MzExMyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMjEgbG4gMC4wMDUwMjI2NDI3ODQxNzYxIC0+IC01LjI5Mzc5OTAzMjc3NDEzMSBJbmV4YWN0IFJvdW5kZWQKK2xueDExMjIgbG4gNi45Mjc5Mzc1NDE2MzcyNjEgIC0+IDEuOTM1NTYyMTU1ODY2OTA2IEluZXhhY3QgUm91bmRlZAorbG54MTEyMyBsbiAwLjAwMDAwOTU3NDUzNDM1MTMgLT4gLTExLjU1NjQwMzY1NTc5ODE0IEluZXhhY3QgUm91bmRlZAorbG54MTEyNCBsbiAxLjYwMjQ2NTQ5Mjk1NjUzOCAgLT4gMC40NzE1NDMzNzYzMjQzOTM2IEluZXhhY3QgUm91bmRlZAorbG54MTEyNSBsbiAzOC45ODQxNTYyNTA4NzUzNSAgLT4gMy42NjMxNTUzMTM2MTAyMTMgSW5leGFjdCBSb3VuZGVkCitsbngxMTI2IGxuIDUuMzQzMTgyMDQyMjc2NzM0ICAtPiAxLjY3NTgyMTM2MzU2ODExMiBJbmV4YWN0IFJvdW5kZWQKK2xueDExMjcgbG4gNTUuODk3NjM3MDMyNDU4MTYgIC0+IDQuMDIzNTIyMTA3OTM0MTEwIEluZXhhY3QgUm91bmRlZAorbG54MTEyOCBsbiAwLjc0NDUyNTc4MTAyODA4NDcgLT4gLTAuMjk1MDA3Nzk4ODEwMTAzMCBJbmV4YWN0IFJvdW5kZWQKK2xueDExMjkgbG4gMS42MzE0MDczMTQ5NDYwOTQgIC0+IDAuNDg5NDQzMDI1NzIwMTI0OCBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzAgbG4gMC4wMDA1NDYyNDUxOTMyNjAyIC0+IC03LjUxMjQ0MjYxMTExNjg1MiBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzEgbG4gMC4wMDAwODY0MTczMjY5MzYyIC0+IC05LjM1NjMyMjM1OTAxNzMxNyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzIgbG4gNS4yMjcxNjE3MTkxMzI4NDkgIC0+IDEuNjUzODY4NDM4NDM5NjM3IEluZXhhY3QgUm91bmRlZAorbG54MTEzMyBsbiA2MC41NzA3ODQ2Njk0MTk5OCAgLT4gNC4xMDM4MTI2NzU2NjI0NTIgSW5leGFjdCBSb3VuZGVkCitsbngxMTM0IGxuIDAuMDk5Mjg2NDMyNTMzMzE2MCAtPiAtMi4zMDk3NDYzNDgzNTAzMTggSW5leGFjdCBSb3VuZGVkCitsbngxMTM1IGxuIDA5LjQ4NTY0MjY4NDQ3MzI1ICAtPiAyLjI0OTc3OTM1OTA3NDk4MyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzYgbG4gMC4wMDM2MTA2MDg5MzU1NjM0IC0+IC01LjYyMzg3ODg0MDY1MDc4NyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzcgbG4gMS44MDUxNzY4NjU1ODcxNzIgIC0+IDAuNTkwNjU4NTczNDU5MzcwNyBJbmV4YWN0IFJvdW5kZWQKK2xueDExMzggbG4gNjIuNTkzNjMyNTk2NDIyNTUgIC0+IDQuMTM2NjYzNTU3MjIwNTU5IEluZXhhY3QgUm91bmRlZAorbG54MTEzOSBsbiA0LjM3MzgyODI2MTEzNzIwMSAgLT4gMS40NzU2Mzg2NTc5MTIwMDAgSW5leGFjdCBSb3VuZGVkCitsbngxMTQwIGxuIDAuOTk0NDgzNTI0MTQ4NzM4ICAtPiAtMC4wMDU1MzE3NDc3OTQ5Mzg2OTAgSW5leGFjdCBSb3VuZGVkCisKKy0tIFA9Nywgd2l0aGluIDAtOQorUHJlY2lzaW9uOiA3CitsbngxMDAxIGxuIDAuMDkxMjAyNSAtPiAtMi4zOTQ2NzMgSW5leGFjdCBSb3VuZGVkCitsbngxMDAyIGxuIDAuOTcyODYyNiAtPiAtMC4wMjc1MTI0MiBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMDMgbG4gMC4zODg2MDMyIC0+IC0wLjk0NTE5NjUgSW5leGFjdCBSb3VuZGVkCitsbngxMDA0IGxuIDguNzk4NjM5ICAtPiAyLjE3NDU5NyBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMDUgbG4gMi40NTkxMjEgIC0+IDAuODk5ODA0MCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMDYgbG4gMi4wMTMxOTMgIC0+IDAuNjk5NzIyMCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMDcgbG4gOS4wNjQ4NTcgIC0+IDIuMjA0NDA1IEluZXhhY3QgUm91bmRlZAorbG54MTAwOCBsbiA1Ljc5NjQxNyAgLT4gMS43NTcyNDAgSW5leGFjdCBSb3VuZGVkCitsbngxMDA5IGxuIDAuMTE0MzQ3MSAtPiAtMi4xNjg1MTcgSW5leGFjdCBSb3VuZGVkCitsbngxMDEwIGxuIDAuNTM0MTU0MiAtPiAtMC42MjcwNzA3IEluZXhhY3QgUm91bmRlZAorbG54MTAxMSBsbiA2LjY5Mzc4MSAgLT4gMS45MDExNzkgSW5leGFjdCBSb3VuZGVkCitsbngxMDEyIGxuIDAuMDA4MTc3OSAtPiAtNC44MDYzMjAgSW5leGFjdCBSb3VuZGVkCitsbngxMDEzIGxuIDguMzEzNjE2ICAtPiAyLjExNzg5NSBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMTQgbG4gMy40ODY5MjUgIC0+IDEuMjQ5MDIwIEluZXhhY3QgUm91bmRlZAorbG54MTAxNSBsbiAwLjE4MDE0MDEgLT4gLTEuNzE0MDIwIEluZXhhY3QgUm91bmRlZAorbG54MTAxNiBsbiAwLjUyMjcxNDggLT4gLTAuNjQ4NzE5MyBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMTcgbG4gNy44MTgxMTEgIC0+IDIuMDU2NDQzIEluZXhhY3QgUm91bmRlZAorbG54MTAxOCBsbiAwLjA4NzA2NzEgLT4gLTIuNDQxMDc2IEluZXhhY3QgUm91bmRlZAorbG54MTAxOSBsbiA4LjE1Mzk2NiAgLT4gMi4wOTg1MDQgSW5leGFjdCBSb3VuZGVkCitsbngxMDIwIGxuIDIuMDQwOTc1ICAtPiAwLjcxMzQyNzYgSW5leGFjdCBSb3VuZGVkCitsbngxMDIxIGxuIDEuNDgxNjQyICAtPiAwLjM5MzE1MDkgSW5leGFjdCBSb3VuZGVkCitsbngxMDIyIGxuIDAuMjYxMDEyMyAtPiAtMS4zNDMxODggSW5leGFjdCBSb3VuZGVkCitsbngxMDIzIGxuIDAuNDY2NzIzICAtPiAtMC43NjIwMTkzIEluZXhhY3QgUm91bmRlZAorbG54MTAyNCBsbiAwLjA1MTg3NTYgLT4gLTIuOTU4OTA3IEluZXhhY3QgUm91bmRlZAorbG54MTAyNSBsbiAyLjA1NjQxMCAgLT4gMC43MjA5NjE3IEluZXhhY3QgUm91bmRlZAorbG54MTAyNiBsbiAwLjE4MTUyMiAgLT4gLTEuNzA2Mzc4IEluZXhhY3QgUm91bmRlZAorbG54MTAyNyBsbiAwLjUxNTU1MSAgLT4gLTAuNjYyNTE5MCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMjggbG4gOC40MjUwODkgIC0+IDIuMTMxMjE0IEluZXhhY3QgUm91bmRlZAorbG54MTAyOSBsbiAyLjA3NzA5MSAgLT4gMC43MzA5Njg0IEluZXhhY3QgUm91bmRlZAorbG54MTAzMCBsbiA2LjIxMjcwNSAgLT4gMS44MjY1OTYgSW5leGFjdCBSb3VuZGVkCitsbngxMDMxIGxuIDUuNzI5MzQzICAtPiAxLjc0NTYwMSBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMzIgbG4gNC44MzEyNTEgIC0+IDEuNTc1MTA1IEluZXhhY3QgUm91bmRlZAorbG54MTAzMyBsbiAyLjAyOTc2MCAgLT4gMC43MDc5MTc2IEluZXhhY3QgUm91bmRlZAorbG54MTAzNCBsbiA4LjYxNTA2MCAgLT4gMi4xNTM1MTIgSW5leGFjdCBSb3VuZGVkCitsbngxMDM1IGxuIDAuMDYxMTUxMSAtPiAtMi43OTQ0MDcgSW5leGFjdCBSb3VuZGVkCitsbngxMDM2IGxuIDUuMTk1MjY5ICAtPiAxLjY0Nzc0OCBJbmV4YWN0IFJvdW5kZWQKK2xueDEwMzcgbG4gOS42MTc2ODYgIC0+IDIuMjYzNjA0IEluZXhhY3QgUm91bmRlZAorbG54MTAzOCBsbiAwLjAwNDkzODIgLT4gLTUuMzEwNzU0IEluZXhhY3QgUm91bmRlZAorbG54MTAzOSBsbiAyLjc4Njg0MCAgLT4gMS4wMjQ5MDggSW5leGFjdCBSb3VuZGVkCitsbngxMDQwIGxuIDAuMDA5MTA3MyAtPiAtNC42OTg2NzkgSW5leGFjdCBSb3VuZGVkCisKKy0tIGZyb20gaGVyZSAzLWRpZ2l0IHRlc3RzIGFyZSBiYXNlZCBvbiByZXZlcnNlIGV4cCB0ZXN0cworcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKK2xueDAwMSAgbG4gMCAgICAgICAgICAgLT4gIC1JbmZpbml0eQorbG54MDAyICBsbiAwLjM2Nzg3OTQ0MSAtPiAgLTEuMDAwMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMDMgIGxuIDEgICAgICAgICAgIC0+ICAgMAorbG54MDA1ICBsbiAyLjcxODI4MTgzICAtPiAgIDEuMDAwMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMDYgIGxuIDIuMDAwMDAwMDAgIC0+ICAgMC42OTMxNDcxODEgICBJbmV4YWN0IFJvdW5kZWQKK2xueDAwNyAgbG4gK0luZmluaXR5ICAgLT4gICBJbmZpbml0eQorCistLSB0aW55IGVkZ2UgY2FzZXMKK3ByZWNpc2lvbjogICA3CitsbngwMTEgIGxuIDEuMTA1MTcxIC0+ICAwLjEwMDAwMDEgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTIgIGxuIDEuMDEwMDUwIC0+ICAwLjAwOTk5OTgzNSAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTMgIGxuIDEuMDAwMDEwIC0+ICAwLjAwMDAwOTk5OTk1MCAgSW5leGFjdCBSb3VuZGVkCitsbngwMTQgIGxuIDEuMDAwMDAxIC0+ICA5Ljk5OTk5NUUtNyAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwMTUgIGxuIDEuMDAwMDAwIC0+ICAwCisKKy0tIGJhc2ljIGU9MCwgZT0xLCBlPTIsIGU9NCwgZT49OCBjYXNlcworcHJlY2lzaW9uOiAgIDcKK2xueDA0MSAgbG4gMi43MTgyODIgICAgICAtPiAgMS4wMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwNDIgIGxuIDAuMzY3ODc5NCAgICAgLT4gLTEuMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZAorbG54MDQzICBsbiAyMjAyNi40NyAgICAgIC0+ICAxMC4wMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDA0NCAgbG4gMC4wMDAwNDUzOTk5MyAtPiAtMTAuMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitsbngwNDUgIGxuIDIuNjg4MTE3RSs0MyAgLT4gIDEwMC4wMDAwICAgIEluZXhhY3QgUm91bmRlZAorbG54MDQ2ICBsbiAzLjcyMDA3NkUtNDQgIC0+IC0xMDAuMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDA0NyAgbG4gSW5maW5pdHkgICAgICAtPiAgSW5maW5pdHkKK2xueDA0OCAgbG4gMEUtMzg5ICAgICAgICAtPiAtSW5maW5pdHkKKworLS0gbWlzY2VsbGFuZWEKK3ByZWNpc2lvbjogMTYKK2xueDA1NSAgbG4gMi43MTc2NTg0ODY4ODQ1NzJFLTIzNiAgICAgLT4gLTU0Mi40MTAzMTEyODc0NDE1ICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNworbG54MDU2ICBsbiAyLjcxNzY1ODQ4Njg4NDU3MjFFLTIzNiAgICAtPiAtNTQyLjQxMDMxMTI4NzQ0MTQ2ICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE4CitsbngwNTcgIGxuIDIuNzE3NjU4NDg2ODg0NTcyMTFFLTIzNiAgIC0+IC01NDIuNDEwMzExMjg3NDQxNDU5ICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTkKK2xueDA1OCAgbG4gMi43MTc2NTg0ODY4ODQ1NzIxMTJFLTIzNiAgLT4gLTU0Mi40MTAzMTEyODc0NDE0NTkyICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMAorbG54MDU5ICBsbiAyLjcxNzY1ODQ4Njg4NDU3MjExMThFLTIzNiAtPiAtNTQyLjQxMDMxMTI4NzQ0MTQ1OTE3ICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGlucHV0cyBlbmRpbmcgaW4gLi41MDAuLiwgLi40OTkuLiwgLi4xMDAuLiwgLi45OTkuLiBzZXF1ZW5jZXMKK3ByZWNpc2lvbjogICA1MAorbG54MTAyICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMjcgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMzc0OTk1MzgyOTk5NjQ0NjEyNDg2MTc1MEUtOCAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMzAKK2xueDEwMyAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDMgLT4gLTguOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTczMzc0OTlFLTggICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyOQorbG54MTA0ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3MzM3NTBFLTggICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjgKK2xueDEwNSAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3MzM3NUUtOCAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjcKK2xueDEwNiAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjczMzhFLTggICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyNgorbG54MTA3ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3MzRFLTggICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjUKK2xueDEwOCAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1IC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3M0UtOCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjQKK2xueDEwOSAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4NzkgLT4gLTguOTk5OTk5OTk5OTk5OTk5OTUwMDAwMjdFLTggICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyMworbG54MTEwICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg4IC0+IC04Ljk5OTk5OTk5OTk5OTk5OTg1MDAwMDNFLTggICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjIKK2xueDExMSAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk5IC0+IC04Ljk5OTk5OTk5OTk5OTk5Nzg1MDAwMEUtOCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMjEKK2xueDExMiAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNTAwMDAgLT4gLTguOTk5OTk5OTk5OTk5OTg3ODUwMDBFLTggICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAyMAorbG54MTEzICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAwIC0+IC04Ljk5OTk5OTk5OTk5OTk4Nzg1MDBFLTggICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTkKK2xueDExNCAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNTAwIC0+IC04Ljk5OTk5OTk5OTk5OTk4Nzg1MEUtOCAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTgKK2xueDExNSAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNTAgLT4gLTguOTk5OTk5OTk5OTk5OTg3ODVFLTggICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgbWF5IGJlIGEgPiAwLjV1bHAgY2FzZTsgYSBtb3JlIHByZWNpc2UgYW5zd2VyIGlzOgorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC04Ljk5OTk5OTk5OTk5OTk4Nzg0OTk5OTE4RS04CitwcmVjaXNpb246ICAgMTcKK2xueDExNiAgbG4gMC45OTk5OTk5MTAwMDAwMDQwNSAtPiAtOC45OTk5OTk5OTk5OTk5ODc4RS04ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTYKK2xueDExNyAgbG4gMC45OTk5OTk5MTAwMDAwMDQwIC0+IC05LjAwMDAwMDAwNDk5OTk4OEUtOCAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDE1CitsbngxMTggIGxuIDAuOTk5OTk5OTEwMDAwMDA0IC0+IC05LjAwMDAwMDAwNDk5OTk5RS04ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTQKK2xueDExOSAgbG4gMC45OTk5OTk5MTAwMDAwMCAtPiAtOS4wMDAwMDA0MDUwMDAwRS04ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTMKK2xueDEyMCAgbG4gMC45OTk5OTk5MTAwMDAwIC0+IC05LjAwMDAwMDQwNTAwMEUtOCAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxMgorbG54MTIxICBsbiAwLjk5OTk5OTkxMDAwMCAtPiAtOS4wMDAwMDA0MDUwMEUtOCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTEKK2xueDEyMiAgbG4gMC45OTk5OTk5MTAwMCAtPiAtOS4wMDAwMDA0MDUwRS04ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTAKK2xueDEyMyAgbG4gMC45OTk5OTk5MTAwIC0+IC05LjAwMDAwMDQwNUUtOCAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgOQorbG54MTI0ICBsbiAwLjk5OTk5OTkxMCAtPiAtOS4wMDAwMDA0MUUtOCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDgKK2xueDEyNSAgbG4gMC45OTk5OTk5MSAtPiAtOS4wMDAwMDA0RS04ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDcKK2xueDEyNiAgbG4gMC45OTk5OTk5IC0+IC0xLjAwMDAwMEUtNyAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAxNgorbG54MTI2YiBsbiAwLjk5OTk5OTkgLT4gLTEuMDAwMDAwMDUwMDAwMDAzRS03ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICA2CitsbngxMjcgIGxuIDAuOTk5OTk5IC0+IC0wLjAwMDAwMTAwMDAwICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDUKK2xueDEyOCAgbG4gMC45OTk5OSAtPiAtMC4wMDAwMTAwMDAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgNAorbG54MTI5ICBsbiAwLjk5OTkgLT4gLTAuMDAwMTAwMCAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgICAzCitsbngxMzAgIGxuIDAuOTk5IC0+IC0wLjAwMTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgIDIKK2xueDEzMSAgbG4gMC45OSAtPiAtMC4wMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMQorbG54MTMyICBsbiAwLjkgLT4gLTAuMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorCisKKy0tIGNhc2VzIG5lYXIgMSAgICAgICAgICAgICAgLS0gIDEgMjM0NTY3ODkwMTIzNDU2Nzg5MAorcHJlY2lzaW9uOiAgICAyMAorbG54NDAxICBsbiAyLjcxODI4MTgyODQ1ODkzNjUwNDEgLT4gMC45OTk5OTk5OTk5OTk5NjAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK2xueDQwMiAgbG4gMi43MTgyODE4Mjg0NTg5NjM2ODY5IC0+IDAuOTk5OTk5OTk5OTk5OTcwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitsbng0MDMgIGxuIDIuNzE4MjgxODI4NDU4OTkwODY5NyAtPiAwLjk5OTk5OTk5OTk5OTk3OTk5OTk5IEluZXhhY3QgUm91bmRlZAorbG54NDA0ICBsbiAyLjcxODI4MTgyODQ1OTAxODA1MjUgLT4gMC45OTk5OTk5OTk5OTk5ODk5OTk5OCBJbmV4YWN0IFJvdW5kZWQKK2xueDQwNSAgbG4gMi43MTgyODE4Mjg0NTkwNDUyMzU0IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitsbng0MDYgIGxuIDIuNzE4MjgxODI4NDU5MzE3MDYzNSAtPiAxLjAwMDAwMDAwMDAwMDEwMDAwMDAgIEluZXhhY3QgUm91bmRlZAorbG54NDA3ICBsbiAyLjcxODI4MTgyODQ1OTU4ODg5MTcgLT4gMS4wMDAwMDAwMDAwMDAyMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogICAgMTQKK2xueDQxMSAgbG4gMi43MTgyODE4Mjg0NTg5IC0+IDAuOTk5OTk5OTk5OTk5OTUgICAgSW5leGFjdCBSb3VuZGVkCitsbng0MTMgIGxuIDIuNzE4MjgxODI4NDU5MCAtPiAwLjk5OTk5OTk5OTk5OTk4ICAgIEluZXhhY3QgUm91bmRlZAorbG54NDE2ICBsbiAyLjcxODI4MTgyODQ1OTEgLT4gMS4wMDAwMDAwMDAwMDAwICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDQxNyAgbG4gMi43MTgyODE4Mjg0NTkyIC0+IDEuMDAwMDAwMDAwMDAwMSAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG92ZXJmbG93cywgaW5jbHVkaW5nIHNvbWUgZXhwIG92ZXJwcmVjaXNlIGJvcmRlcmxpbmVzCitwcmVjaXNpb246ICAgNworbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK2xueDcwOSAgbG4gOS45OTk5OTlFKzM4NCAtPiAgODg2LjQ5NTMgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzExICBsbiA5Ljk5OTk5MkUrMzg0IC0+ICA4ODYuNDk1MyAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAgMTYKK2xueDcyMiAgbG4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAgODg2LjQ5NTI2MDgwMjcwNzYgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzI0ICBsbiA5Ljk5OTk5OTk5OTk5OTkxN0UrMzg0IC0+ICA4ODYuNDk1MjYwODAyNzA3NiAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3MjYgIGxuIDkuOTk5OTk5OTk5OTk5MTE3RSszODQgLT4gIDg4Ni40OTUyNjA4MDI3MDc1ICAgICBJbmV4YWN0IFJvdW5kZWQKKy0tIGFuZCBtb3JlLi4uCitwcmVjaXNpb246ICAgMTUKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5Citsbng3MzEgIGxuIDkuOTk5OTk5OTk5OTk5OTlFKzk5OSAtPiAyMzAyLjU4NTA5Mjk5NDA1ICAgICAgIEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCBtYXkgYmUgYSA+IDAuNXVscCBjYXNlOyBhIG1vcmUgcHJlY2lzZSBhbnN3ZXIgaXM6CistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzAyLjU4NTA5Mjk5NDA0NDk1MDAxNzk5MTQ1NDQyCitsbng3MzIgIGxuIDkuOTk5OTk5OTk5OTkyNjZFKzk5OSAtPiAyMzAyLjU4NTA5Mjk5NDA0ICAgICAgIEluZXhhY3QgUm91bmRlZAorbG54NzMzICBsbiA5Ljk5OTk5OTk5OTk5MjY1RSs5OTkgLT4gMjMwMi41ODUwOTI5OTQwNCAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2xueDczNCAgbG4gOS45OTk5OTk5OTk5OTI2NEUrOTk5IC0+IDIzMDIuNTg1MDkyOTk0MDQgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvd3MgZm9yIGV4cCwgaW5jbHVkaW5nIHVuZGVyZmxvdy10by16ZXJvIGVkZ2UgcG9pbnQKK3ByZWNpc2lvbjogICA3CittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworbG54NzUxICBsbiAwRS0zODkgLT4gLUluZmluaXR5Citsbng3NTggIGxuIDEuMDAwMDAxRS0zODMgLT4gLTg4MS44OTAxICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NTkgIGxuIDkuOTk5OTFFLTM4NCAtPiAtODgxLjg5MDEgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NjAgIGxuIDQuNDYwNUUtMzg1IC0+IC04ODUuMDAwMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NjEgIGxuIDIuMjIxRS0zODYgLT4gLTg4Ny45OTk5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NjIgIGxuIDMuMDFFLTM4NyAtPiAtODg5Ljk5ODUgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NjMgIGxuIDEuN0UtMzg4IC0+IC04OTIuODcyNCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NjQgIGxuIDEuNUUtMzg4IC0+IC04OTIuOTk3NiAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NjUgIGxuIDlFLTM4OSAtPiAtODkzLjUwODQgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NjYgIGxuIDFFLTM4OSAtPiAtODk1LjcwNTYgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsbng3NzQgIGxuIDBFLTM4OSAtPiAtSW5maW5pdHkKKworLS0gc3BlY2lhbCB2YWx1ZXMKK2xueDgyMCAgbG4gSW5maW5pdHkgLT4gICBJbmZpbml0eQorbG54ODIxICBsbiAwICAgICAgICAtPiAgLUluZmluaXR5Citsbng4MjIgIGxuIE5hTiAgICAgIC0+ICAgTmFOCitsbng4MjMgIGxuIHNOYU4gICAgIC0+ICAgTmFOICAgICBJbnZhbGlkX29wZXJhdGlvbgorLS0gcHJvcGFnYXRpbmcgTmFOcworbG54ODI0ICBsbiBzTmFOMTIzICAtPiAgIE5hTjEyMyAgSW52YWxpZF9vcGVyYXRpb24KK2xueDgyNSAgbG4gLXNOYU4zMjEgLT4gIC1OYU4zMjEgIEludmFsaWRfb3BlcmF0aW9uCitsbng4MjYgIGxuIE5hTjQ1NiAgIC0+ICAgTmFONDU2Citsbng4MjcgIGxuIC1OYU42NTQgIC0+ICAtTmFONjU0Citsbng4MjggIGxuIE5hTjEgICAgIC0+ICAgTmFOMQorCistLSBJbnZhbGlkIG9wZXJhdGlvbnMgZHVlIHRvIHJlc3RyaWN0aW9ucworLS0gW25leHQgdHdvIHByb2JhYmx5IHNraXBwZWQgYnkgbW9zdCB0ZXN0IGhhcm5lc3Nlc10KK3ByZWNpc2lvbjogMTAwMDAwMDAwCitsbng5MDEgIGxuIDEgLT4gIE5hTiAgICAgICAgICAgIEludmFsaWRfY29udGV4dAorcHJlY2lzaW9uOiAgOTk5OTk5OTkKK2xueDkwMiAgbG4gMCAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0CisKK3ByZWNpc2lvbjogOQorbWF4RXhwb25lbnQ6ICAgMTAwMDAwMAorbWluRXhwb25lbnQ6ICAgLTk5OTk5OQorbG54OTAzICBsbiAxICAgLT4gIE5hTiAgICAgICAgICBJbnZhbGlkX2NvbnRleHQKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgIC05OTk5OTkKK2xueDkwNCAgbG4gMCAtPiAgLUluZmluaXR5CittYXhFeHBvbmVudDogICAgOTk5OTk5CittaW5FeHBvbmVudDogIC0xMDAwMDAwCitsbng5MDUgIGxuIDEgICAtPiAgTmFOICAgICAgICAgIEludmFsaWRfY29udGV4dAorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQorbWluRXhwb25lbnQ6ICAgLTk5OTk5OAorbG54OTA2ICBsbiAwIC0+ICAtSW5maW5pdHkKKworLS0gcGF5bG9hZCBkZWNhcGl0YXRlCitwcmVjaXNpb246IDUKK2xueDkxMCAgbG4gLXNOYU4xMjM0NTY3ODkwIC0+IC1OYU42Nzg5MCAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0Citsbng5MDAgIGxuICMgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2xvZzEwLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2xvZzEwLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwMmYwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG9nMTAuZGVjVGVzdApAQCAtMCwwICsxLDU1MSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBsb2cxMC5kZWNUZXN0IC0tIGRlY2ltYWwgbG9nYXJpdGhtIGluIGJhc2UgMTAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgZW1waGFzaXNlcyB0aGUgdGVzdGluZyBvZiBub3RhYmxlIGNhc2VzLCBhcyB0aGV5IHdpbGwgb2Z0ZW4KKy0tIGhhdmUgdW51c3VhbCBwYXRocyAoZXNwZWNpYWxseSB0aGUgMTAqKm4gcmVzdWx0cykuCisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIGV4YW1wbGVzIGluIHNwZWNpZmljYXRpb24KK3ByZWNpc2lvbjogICA5Citsb2d4czAwMCBsb2cxMCAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5Citsb2d4czAwMSBsb2cxMCAgMC4wMDEgICAgICAgICAgICAgLT4gLTMKK2xvZ3hzMDAyIGxvZzEwICAxICAgICAgICAgICAgICAgICAtPiAgMAorbG9neHMwMDMgbG9nMTAgIDIgICAgICAgICAgICAgICAgIC0+ICAwLjMwMTAyOTk5NiAgICAgICAgIEluZXhhY3QgUm91bmRlZAorbG9neHMwMDQgbG9nMTAgIDEwICAgICAgICAgICAgICAgIC0+ICAxCitsb2d4czAwNSBsb2cxMCAgNzAgICAgICAgICAgICAgICAgLT4gIDEuODQ1MDk4MDQgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitsb2d4czAwNiBsb2cxMCArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5CisKKworLS0gYmFzaWNzIChleGFtcGxlcyBpbiBzcGVjaWZpY2F0aW9uLCBldGMuKQorcHJlY2lzaW9uOiAgIDE2Citsb2d4MDAwMCBsb2cxMCAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5Citsb2d4MDAwMSBsb2cxMCAgN0UtMTAwMCAgICAgICAgICAgLT4gLTk5OS4xNTQ5MDE5NTk5ODU3ICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAwMiBsb2cxMCAgMS4xRS05ICAgICAgICAgICAgLT4gLTguOTU4NjA3MzE0ODQxNzc1ICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAwMyBsb2cxMCAgMC4wMDA3ICAgICAgICAgICAgLT4gLTMuMTU0OTAxOTU5OTg1NzQzICAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAwNCBsb2cxMCAgMC4xMSAgICAgICAgICAgICAgLT4gLTAuOTU4NjA3MzE0ODQxNzc1MCAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAwNSBsb2cxMCAgMC43ICAgICAgICAgICAgICAgLT4gLTAuMTU0OTAxOTU5OTg1NzQzMiAgSW5leGFjdCBSb3VuZGVkCitsb2d4MDAwNiBsb2cxMCAgMSAgICAgICAgICAgICAgICAgLT4gIDAKK2xvZ3gwMDA3IGxvZzEwICAxLjUgICAgICAgICAgICAgICAtPiAgMC4xNzYwOTEyNTkwNTU2ODEyICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDA4IGxvZzEwICAyICAgICAgICAgICAgICAgICAtPiAgMC4zMDEwMjk5OTU2NjM5ODEyICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDA5IGxvZzEwICAyLjcxODI4MTgyODQ1OTA0NSAtPiAgMC40MzQyOTQ0ODE5MDMyNTE4ICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDEwIGxvZzEwICAyLjcxODI4MTgyODQ1OTA0NiAtPiAgMC40MzQyOTQ0ODE5MDMyNTE5ICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDExIGxvZzEwICAyLjcxODI4MTgyODQ1OTA0NyAtPiAgMC40MzQyOTQ0ODE5MDMyNTIxICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDEyIGxvZzEwICA3ICAgICAgICAgICAgICAgICAtPiAgMC44NDUwOTgwNDAwMTQyNTY4ICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gwMDEzIGxvZzEwICAxMCAgICAgICAgICAgICAgICAtPiAgMQorbG9neDAwMTQgbG9nMTAgIDEwLjUgICAgICAgICAgICAgIC0+ICAxLjAyMTE4OTI5OTA2OTkzOCAgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTUgbG9nMTAgIDExICAgICAgICAgICAgICAgIC0+ICAxLjA0MTM5MjY4NTE1ODIyNSAgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTYgbG9nMTAgIDcwICAgICAgICAgICAgICAgIC0+ICAxLjg0NTA5ODA0MDAxNDI1NyAgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTcgbG9nMTAgIDk5OTkgICAgICAgICAgICAgIC0+ICAzLjk5OTk1NjU2ODM4MDE5MiAgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTggbG9nMTAgIDEuMjFFNiAgICAgICAgICAgIC0+ICA2LjA4Mjc4NTM3MDMxNjQ1MCAgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMTkgbG9nMTAgIDEuMUUrOSAgICAgICAgICAgIC0+ICA5LjA0MTM5MjY4NTE1ODIyNSAgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMjAgbG9nMTAgIDdFKzEwMDAgICAgICAgICAgIC0+ICAxMDAwLjg0NTA5ODA0MDAxNCAgIEluZXhhY3QgUm91bmRlZAorbG9neDAwMjEgbG9nMTAgK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCistLSBub3RhYmxlIGNhc2VzCistLSBuZWdhdGl2ZXMKK2xvZ3gwMDMxIGxvZzEwIC0xRS05ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDMyIGxvZzEwIC0wLjAwMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDMzIGxvZzEwIC0wLjEgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDM0IGxvZzEwIC0wLjcgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDM1IGxvZzEwIC0xICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDM2IGxvZzEwIC0xLjUgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDM3IGxvZzEwIC0yICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDM4IGxvZzEwIC0xMC41ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDM5IGxvZzEwIC0xMC41ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDQwIGxvZzEwIC05OTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDQxIGxvZzEwIC0xMCAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK2xvZ3gwMDQyIGxvZzEwIC0wICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xvZ3gwMDQzIGxvZzEwIC0wRSsxNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkKK2xvZ3gwMDQ0IGxvZzEwIC0wRS0xNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkKKy0tIG90aGVyIHplcm9zCitsb2d4MDA1MSBsb2cxMCAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5Citsb2d4MDA1MiBsb2cxMCAgMEUrMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5Citsb2d4MDA1MyBsb2cxMCAgMEUtMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5CistLSBpbmZpbml0aWVzCitsb2d4MDA1NSBsb2cxMCAtSW5maW5pdHkgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitsb2d4MDA1NiBsb2cxMCArSW5maW5pdHkgICAgICAgICAgLT4gSW5maW5pdHkKKy0tIG9uZXMKK2xvZ3gwMDYxIGxvZzEwICAxICAgICAgICAgICAgICAgICAtPiAgIDAKK2xvZ3gwMDYyIGxvZzEwICAxLjAgICAgICAgICAgICAgICAtPiAgIDAKK2xvZ3gwMDYzIGxvZzEwICAxLjAwMDAwMDAwMDAwMDAwMCAtPiAgIDAKK2xvZ3gwMDY0IGxvZzEwICAxLjAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDAKKworLS0gbm90YWJsZSBjYXNlcyAtLSBleGFjdCBwb3dlcnMgb2YgMTAKK2xvZ3gxMTAwIGxvZzEwIDEgICAgICAgICAgICAgLT4gMAorbG9neDExMDEgbG9nMTAgMTAgICAgICAgICAgICAtPiAxCitsb2d4MTEwMiBsb2cxMCAxMDAgICAgICAgICAgIC0+IDIKK2xvZ3gxMTAzIGxvZzEwIDEwMDAgICAgICAgICAgLT4gMworbG9neDExMDQgbG9nMTAgMTAwMDAgICAgICAgICAtPiA0Citsb2d4MTEwNSBsb2cxMCAxMDAwMDAgICAgICAgIC0+IDUKK2xvZ3gxMTA2IGxvZzEwIDEwMDAwMDAgICAgICAgLT4gNgorbG9neDExMDcgbG9nMTAgMTAwMDAwMDAgICAgICAtPiA3Citsb2d4MTEwOCBsb2cxMCAxMDAwMDAwMDAgICAgIC0+IDgKK2xvZ3gxMTA5IGxvZzEwIDEwMDAwMDAwMDAgICAgLT4gOQorbG9neDExMTAgbG9nMTAgMTAwMDAwMDAwMDAgICAtPiAxMAorbG9neDExMTEgbG9nMTAgMTAwMDAwMDAwMDAwICAtPiAxMQorbG9neDExMTIgbG9nMTAgMTAwMDAwMDAwMDAwMCAtPiAxMgorbG9neDExMTMgbG9nMTAgMC4wMDAwMDAwMDAwMSAtPiAtMTEKK2xvZ3gxMTE0IGxvZzEwIDAuMDAwMDAwMDAwMSAtPiAtMTAKK2xvZ3gxMTE1IGxvZzEwIDAuMDAwMDAwMDAxIC0+IC05Citsb2d4MTExNiBsb2cxMCAwLjAwMDAwMDAxIC0+IC04Citsb2d4MTExNyBsb2cxMCAwLjAwMDAwMDEgLT4gLTcKK2xvZ3gxMTE4IGxvZzEwIDAuMDAwMDAxIC0+IC02Citsb2d4MTExOSBsb2cxMCAwLjAwMDAxIC0+IC01Citsb2d4MTEyMCBsb2cxMCAwLjAwMDEgLT4gLTQKK2xvZ3gxMTIxIGxvZzEwIDAuMDAxIC0+IC0zCitsb2d4MTEyMiBsb2cxMCAwLjAxIC0+IC0yCitsb2d4MTEyMyBsb2cxMCAwLjEgLT4gLTEKK2xvZ3gxMTI0IGxvZzEwIDFFLTk5ICAtPiAtOTkKK2xvZ3gxMTI1IGxvZzEwIDFFLTEwMCAtPiAtMTAwCitsb2d4MTEyNiBsb2cxMCAxRS0zODMgLT4gLTM4MworCistLSBjaGVjayBub3JtYWxseSBleGFjdCBjYXNlcyByb3VuZCBwcm9wZXJseQorcHJlY2lzaW9uOiAxCitsb2d4MTE0MSBsb2cxMCAxMDAwMDAwMDAwMCAgIC0+IDFFKzEgICAgICAgICBSb3VuZGVkCitsb2d4MTE0MiBsb2cxMCAxMDAwMDAwMDAwMDAwIC0+IDFFKzEgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE0MyBsb2cxMCAxRSsxMDAgICAgICAgIC0+IDFFKzIgICAgICAgICBSb3VuZGVkCitsb2d4MTE0NCBsb2cxMCAxRSsxMjMgICAgICAgIC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE0NSBsb2cxMCAxRSsxMjYgICAgICAgIC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE0NiBsb2cxMCAxRSs5MTYgICAgICAgIC0+IDlFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE0NyBsb2cxMCAxRSs5OTkgICAgICAgIC0+IDFFKzMgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMgorbG9neDExNTEgbG9nMTAgMTAwMDAwMDAwMDAgICAtPiAxMAorbG9neDExNTIgbG9nMTAgMTAwMDAwMDAwMDAwMCAtPiAxMgorbG9neDExNTMgbG9nMTAgMUUrMTAwICAgICAgICAtPiAxLjBFKzIgICAgICAgICBSb3VuZGVkCitsb2d4MTE1NCBsb2cxMCAxRSsxMjMgICAgICAgIC0+IDEuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTU1IGxvZzEwIDFFKzEyNiAgICAgICAgLT4gMS4zRSsyIEluZXhhY3QgUm91bmRlZAorbG9neDExNTYgbG9nMTAgMUUrOTE2ICAgICAgICAtPiA5LjJFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE1NyBsb2cxMCAxRSs5OTkgICAgICAgIC0+IDEuMEUrMyBJbmV4YWN0IFJvdW5kZWQKKy0tIHNvbWUgaGFsZi13YXkgcG9pbnQgcm91bmRzLCBvdGhlciBjYXNlcywgYW5kIG5lZ2F0aXZlcworbG9neDExNTggbG9nMTAgMUUrMTI1ICAgICAgICAtPiAxLjJFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE1OSBsb2cxMCAxRSsxMzUgICAgICAgIC0+IDEuNEUrMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMTYwIGxvZzEwIDFFKzEyOSAgICAgICAgLT4gMS4zRSsyIEluZXhhY3QgUm91bmRlZAorbG9neDExNjEgbG9nMTAgMUUrMTMxICAgICAgICAtPiAxLjNFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2MiBsb2cxMCAxRS0xMjMgICAgICAgIC0+IC0xLjJFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2MyBsb2cxMCAxRS0xMjYgICAgICAgIC0+IC0xLjNFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2NCBsb2cxMCAxRS05MTYgICAgICAgIC0+IC05LjJFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2NSBsb2cxMCAxRS05OTkgICAgICAgIC0+IC0xLjBFKzMgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2NiBsb2cxMCAxRS0xMjUgICAgICAgIC0+IC0xLjJFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2NyBsb2cxMCAxRS0xMzUgICAgICAgIC0+IC0xLjRFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2OCBsb2cxMCAxRS0xMjkgICAgICAgIC0+IC0xLjNFKzIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTE2OSBsb2cxMCAxRS0xMzEgICAgICAgIC0+IC0xLjNFKzIgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMworbG9neDExNzEgbG9nMTAgMTAwMDAwMDAwMDAgICAtPiAxMAorbG9neDExNzIgbG9nMTAgMTAwMDAwMDAwMDAwMCAtPiAxMgorbG9neDExNzMgbG9nMTAgMUUrMTAwICAgICAgICAtPiAxMDAKK2xvZ3gxMTc0IGxvZzEwIDFFKzEyMyAgICAgICAgLT4gMTIzCitsb2d4MTE3NSBsb2cxMCAxRSsxMjYgICAgICAgIC0+IDEyNgorbG9neDExNzYgbG9nMTAgMUUrOTE2ICAgICAgICAtPiA5MTYKK2xvZ3gxMTc3IGxvZzEwIDFFKzk5OSAgICAgICAgLT4gOTk5CisKKy0tIGxvZzEwKDIpIC4uIHRlc3RzIGJvdGggbG4oMikgYW5kIGxuKDEwKSBjb25zdGFudHMsIHRvbworcHJlY2lzaW9uOiA1MAorbG9neDEyMDEgbG9nMTAgMiAgICAgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NjIxMSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMjAyIGxvZzEwIDIuMDAwIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyMTEgSW5leGFjdCBSb3VuZGVkCitsb2d4MTIwMyBsb2cxMCAwLjJFMSAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2MjExIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0OQorbG9neDEyMDQgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2MjEgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQ4Citsb2d4MTIwNSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDcKK2xvZ3gxMjA2IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NiAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0NgorbG9neDEyMDcgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTUgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQ1Citsb2d4MTIwOCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDQKK2xvZ3gxMjA5IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4OCAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0MworbG9neDEyMTAgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTkgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQyCitsb2d4MTIxMSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTkwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDEKK2xvZ3gxMjEyIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxOSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0MAorbG9neDEyMTMgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODIgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM5Citsb2d4MTIxNCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzgKK2xvZ3gxMjE1IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzNworbG9neDEyMTYgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjggICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM2Citsb2d4MTIxNyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI3ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzUKK2xvZ3gxMjE4IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMyAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzNAorbG9neDEyMTkgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMzCitsb2d4MTIyMCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzIKK2xvZ3gxMjIxIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMQorbG9neDEyMjIgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDUgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMwCitsb2d4MTIyMyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0ICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjkKK2xvZ3gxMjI0IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MiAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyOAorbG9neDEyMjUgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI3Citsb2d4MTIyNiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk1ICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjYKK2xvZ3gxMjI3IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OSAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNQorbG9neDEyMjggbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODkgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI0Citsb2d4MTIyOSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM5ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjMKK2xvZ3gxMjMwIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3NCAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMgorbG9neDEyMzEgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIxCitsb2d4MTIzMiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjAKK2xvZ3gxMjMzIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxOQorbG9neDEyMzQgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE4Citsb2d4MTIzNSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTcKK2xvZ3gxMjM2IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODEyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNgorbG9neDEyMzcgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE1Citsb2d4MTIzOCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTQKK2xvZ3gxMjM5IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMworbG9neDEyNDAgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2NDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEyCitsb2d4MTI0MSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTEKK2xvZ3gxMjQyIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMAorbG9neDEyNDMgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA5Citsb2d4MTI0NCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDgKK2xvZ3gxMjQ1IGxvZzEwIDIgLT4gMC4zMDEwMzAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNworbG9neDEyNDYgbG9nMTAgMiAtPiAwLjMwMTAzMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA2Citsb2d4MTI0NyBsb2cxMCAyIC0+IDAuMzAxMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDUKK2xvZ3gxMjQ4IGxvZzEwIDIgLT4gMC4zMDEwMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNAorbG9neDEyNDkgbG9nMTAgMiAtPiAwLjMwMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzCitsb2d4MTI1MCBsb2cxMCAyIC0+IDAuMzAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDIKK2xvZ3gxMjUxIGxvZzEwIDIgLT4gMC4zMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgMQorbG9neDEyNTIgbG9nMTAgMiAtPiAwLjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KKworLS0gTW9yZSBjbG9zZS10by1lLCBldGMuLCB0ZXN0cworcHJlY2lzaW9uOiAgIDM0Citsb2d4MTMwMSBsb2cxMCAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MSAgLT4gMC40MzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDQ4IEluZXhhY3QgUm91bmRlZAorbG9neDEzMDIgbG9nMTAgMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjIgIC0+IDAuNDM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzAzIGxvZzEwIDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYzICAtPiAwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTIgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMwNCBsb2cxMCAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgLT4gLTQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDczRS0zMyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzA1IGxvZzEwIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAtNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTNFLTM0IEluZXhhY3QgUm91bmRlZAorbG9neDEzMDYgbG9nMTAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+IC00LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MUUtMzUgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMwNyBsb2cxMCAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gMAorbG9neDEzMDggbG9nMTAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIC0+IDQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUxRS0zNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzA5IGxvZzEwIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiA0LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA0OUUtMzQgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMxMCBsb2cxMCAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgLT4gNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwMjlFLTMzIEluZXhhY3QgUm91bmRlZAorLS0gbG93ZXIgcAorcHJlY2lzaW9uOiAgICA3Citsb2d4MTMyMCBsb2cxMCAwLjk5OTk5OSAgICAtPiAtNC4zNDI5NDdFLTcgIEluZXhhY3QgUm91bmRlZAorbG9neDEzMjEgbG9nMTAgMC45OTk5OTk5ICAgLT4gLTQuMzQyOTQ1RS04ICBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzIyIGxvZzEwIDAuOTk5OTk5OTkgIC0+IC00LjM0Mjk0NUUtOSAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMyMyBsb2cxMCAwLjk5OTk5OTk5OSAtPiAtNC4zNDI5NDVFLTEwIEluZXhhY3QgUm91bmRlZAorbG9neDEzMjQgbG9nMTAgMS4wMDAwMDAwMCAgLT4gIDAKK2xvZ3gxMzI1IGxvZzEwIDEuMDAwMDAwMDEgIC0+ICA0LjM0Mjk0NUUtOSAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMyNiBsb2cxMCAxLjAwMDAwMDEgICAtPiAgNC4zNDI5NDVFLTggIEluZXhhY3QgUm91bmRlZAorbG9neDEzMjcgbG9nMTAgMS4wMDAwMDEgICAgLT4gIDQuMzQyOTQzRS03ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVhciAxMF4zCitwcmVjaXNpb246ICAgOQorbG9neDEzMzEgbG9nMTAgIDk5OS45OTk5OTk4ICAtPiAzLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorbG9neDEzMzIgbG9nMTAgIDk5OS45OTk5OTk5ICAtPiAzLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorbG9neDEzMzMgbG9nMTAgMTAwMC4wMDAwMDAgICAtPiAzCitsb2d4MTMzNCBsb2cxMCAxMDAwLjAwMDAwMSAgIC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitsb2d4MTMzNSBsb2cxMCAxMDAwLjAwMDAwMiAgIC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE2Citsb2d4MTM0MSBsb2cxMCAgOTk5Ljk5OTk5OTggIC0+IDIuOTk5OTk5OTk5OTEzMTQxIEluZXhhY3QgUm91bmRlZAorbG9neDEzNDIgbG9nMTAgIDk5OS45OTk5OTk5ICAtPiAyLjk5OTk5OTk5OTk1NjU3MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzQzIGxvZzEwIDEwMDAuMDAwMDAwICAgLT4gMworbG9neDEzNDQgbG9nMTAgMTAwMC4wMDAwMDEgICAtPiAzLjAwMDAwMDAwMDQzNDI5NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gxMzQ1IGxvZzEwIDEwMDAuMDAwMDAyICAgLT4gMy4wMDAwMDAwMDA4Njg1ODkgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN1Z2dlc3Rpb25zIGZyb20gSWxhbiBOZWhhbWEKK2xvZ3gxNDAwIGxvZzEwIDEwRS0zICAgIC0+IC0yCitsb2d4MTQwMSBsb2cxMCAxMEUtMiAgICAtPiAtMQorbG9neDE0MDIgbG9nMTAgMTAwRS0yICAgLT4gIDAKK2xvZ3gxNDAzIGxvZzEwIDEwMDBFLTIgIC0+ICAxCitsb2d4MTQwNCBsb2cxMCAxMDAwMEUtMiAtPiAgMgorbG9neDE0MDUgbG9nMTAgMTBFLTEgICAgLT4gIDAKK2xvZ3gxNDA2IGxvZzEwIDEwMEUtMSAgIC0+ICAxCitsb2d4MTQwNyBsb2cxMCAxMDAwRS0xICAtPiAgMgorbG9neDE0MDggbG9nMTAgMTAwMDBFLTEgLT4gIDMKK2xvZ3gxNDA5IGxvZzEwIDEwRTAgICAgIC0+ICAxCitsb2d4MTQxMCBsb2cxMCAxMDBFMCAgICAtPiAgMgorbG9neDE0MTEgbG9nMTAgMTAwMEUwICAgLT4gIDMKK2xvZ3gxNDEyIGxvZzEwIDEwMDAwRTAgIC0+ICA0Citsb2d4MTQxMyBsb2cxMCAxMEUxICAgICAtPiAgMgorbG9neDE0MTQgbG9nMTAgMTAwRTEgICAgLT4gIDMKK2xvZ3gxNDE1IGxvZzEwIDEwMDBFMSAgIC0+ICA0Citsb2d4MTQxNiBsb2cxMCAxMDAwMEUxICAtPiAgNQorbG9neDE0MTcgbG9nMTAgMTBFMiAgICAgLT4gIDMKK2xvZ3gxNDE4IGxvZzEwIDEwMEUyICAgIC0+ICA0Citsb2d4MTQxOSBsb2cxMCAxMDAwRTIgICAtPiAgNQorbG9neDE0MjAgbG9nMTAgMTAwMDBFMiAgLT4gIDYKKworLS0gUmFuZG9tcworLS0gUD01MCwgd2l0aGluIDAtOTk5OQorUHJlY2lzaW9uOiA1MAorbG9neDI1MDEgbG9nMTAgMC4wMDAzNTQ0ODAwMTY2Nzk2ODE0MTc3NTg5MTI0Njk5MTkxMjY1NTk2MTE2MzM0NTkwNCAtPiAgLTMuNDUwNDA4MjQyNTQxMTc3NTI5MDg2NDA1MzMxODI0NzI3NDk0NDY4NTU4NjE4ODUwNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTAyIGxvZzEwIDcwLjYzNjQ1NTcyNjQyNDMxMTIyODI1NTMzODYzNzkzNTMzMDgyNjk5NTEzNjU5NzY0NCAgLT4gICAxLjg0OTAyODg5OTg0MDg0OTIwNDU3OTMwNzAyNTUzMDIzMzU1NTgxNDA5NzU3MTkyNDcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUwMyBsb2cxMCAwLjAwMDAwMDAwMDAwMDAwMjMzNTUwMzYyNDczODIxODg5MDYwODEyODA0MDYzMDQwMTY5IC0+IC0xNC42MzE2MTk0NTQzNDM4MzQ4NTgwMjM1NzgyOTkxNDI4NjY1NTc3MTc5MDQyMjM2NjcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUwNCBsb2cxMCA5Ny43ODM2Mjg2MjE1MjMyNDQ2Nzk5MDEyNjAzNTgyODY4OTg5NTg4MzIxMzU0MzM3NjQgIC0+ICAgMS45OTAyNjYxNDkzMjI0MjE5NTE3ODk3NjU3OTY0MzYyNTcxNjkwNTkyNzM0NDA3MzMwIEluZXhhY3QgUm91bmRlZAorbG9neDI1MDUgbG9nMTAgMDA2Mi4yMzc3MTM1MzE1ODU4MzkyODAyNjEyODEyMDIyODA3ODM4NTk5NTcyMDE3MzQyICAtPiAgIDEuNzk0MDUzNjI5MzA4NTA2NjE5OTI4NzYzMjcyNTAyNjgzNzAxODQ4NjUzMzU0NDE0MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTA2IGxvZzEwIDYuMzc2NzYzNDY1MjA3MTA1MzYxOTk3NzYwMjgwNDcyNDEyOTY1Mjk4MTc0Nzg3OTUzMiAgLT4gICAwLjgwNDYwMDMwNzg5ODI1OTYxNjE1MTAwMTYzNTc2MDgwNzYxMzI2ODU3Mzc0MDk4NjQ0IEluZXhhY3QgUm91bmRlZAorbG9neDI1MDcgbG9nMTAgNjMuMjk3MDg4OTgxMzEzMjc4NTI5MzA2NTMzODE0MTk1MDY4ODUwNTMyNjY2NjU4Nzk4ICAtPiAgIDEuODAxMzgzNzM3MzcyNDQyNzA5MjQxNzE3MDE0OTA5ODYxNDQxMDg0OTM1MzgzOTY3MyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTA4IGxvZzEwIDAuMDAwMDAwNzcyMzk2OTMzMTY4ODE3OTc3MTc4MjAxMTA4OTgxNjc3MjE2MDIyOTkxODcgLT4gIC02LjExMjE1OTQ1OTI3MTg1NTA2MTM3NzM4ODYyNDE5NTE5NjYyNjQ4MjY3NjAzMTAwNDcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUwOSBsb2cxMCAwLjAwMDAwMDAzOTUzNTgwMzU5NzgwMTg1NTM0ODMwNTcyNDYxOTIyNTI3ODMxMzk1MDAyIC0+ICAtNy40MDMwMDk0MjkzODMzODQ3MTM2MjUyNTQ3MDY5OTA1NDc3MjEzNTQxNzg3MTc3NTYxIEluZXhhY3QgUm91bmRlZAorbG9neDI1MTAgbG9nMTAgNzU0LjYyOTA1ODE3MzY5OTg5MTY5MTg4OTk4MTExNTI3MjcyNjg4NzkxNTQ0NTc3MjA0ICAtPiAgIDIuODc3NzMzNTI0Mzc2MTMwMDA0Nzc1ODUzNDMwNDM3MTkxMjA5OTk1ODA1NzU0NTQxNiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTExIGxvZzEwIDAuMDAwMDAwNDgzNjAzNzg0MTAyNDE0Mjg5MzY2MDcxNDcwNTYyODMyODI4NDkxNTgzMTIgLT4gIC02LjMxNTUxMDMwOTUzMDkzNTM0NTc2MDQwMzgzOTc5ODAwOTE2NTA3NjAzNDYzMzQ1MTIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxMiBsb2cxMCAwLjAwMDA3NTA5MDM3NTgzNjQ1NjEyNTc3MTk2MTA0NTkxNjcyMDgwNTQyOTMyMTY2MDg5IC0+ICAtNC4xMjQ0MTU3MjE5NzAwMTY2MzE0MDEyMzQ0NzA1NTM4MDg4MDMwNTkyODk2MTExMDI2IEluZXhhY3QgUm91bmRlZAorbG9neDI1MTMgbG9nMTAgMC4wMDAwMDAwMDAwMDcwNTQ3NTk0NDYzODkxNTA1MzQxOTgzOTA2MzU2Nzg5ODA5MjA2NCAtPiAtMTEuMTUxNTE3NzkwMjU2NDY2MDQ4NTUzODEwMDAyNTI1ODY4MTk4MTc4MTY3OTUwMzc3IEluZXhhY3QgUm91bmRlZAorbG9neDI1MTQgbG9nMTAgOS42MjEwMzAwNDYwNDk3NjU3OTE3NDQ1NDEwOTQ3MDk5NjMzNDc5NjA5MTY1MTIwNjYxICAtPiAgIDAuOTgzMjIxNTcwOTMyNjA5NzgyMDY2MzM5MjI4Nzc3MTYwNzg2ODM1MTg2MTc3Njg0MTEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUxNSBsb2cxMCAwLjAwMDAwMDAwMDUwMTUwMzYxMzg2NTU1NTI3NDk2NjA3MjQ1OTc2MTIwODY0OTg1NjExIC0+ICAtOS4yOTk3MjU5MzMwNzk4MjYxMDQwNDExMDg2ODM1NTYzMjM0MzkwOTM0OTM0NjI5MzQwIEluZXhhY3QgUm91bmRlZAorbG9neDI1MTYgbG9nMTAgMDk4LjI0NzU0MDI5NzMxOTk0MTI1Nzk3NzIzNTQ1MzMzNjc3NjA0NDkwMDc0ODEwNzUxICAtPiAgIDEuOTkyMzIxNjg2Mjg3NDMzNzA3Nzc5NTI3ODYyOTM1MTA2MDgxOTEwNTY3OTY3MDYzMyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTE3IGxvZzEwIDcuNTA5MTk5ODE1MDA0Njk5NDMyMDQ0MTQ2Mzg1NDMwMTYyNDc0MjQ5MTAxNTc1Mjk4MCAgLT4gICAwLjg3NTU5MzY2MDc4MDA1OTI0MDgwNzY2NDY5MTU4NzYzNDk5NzI1NDE0MDI0MTI4NzgxIEluZXhhY3QgUm91bmRlZAorbG9neDI1MTggbG9nMTAgMC4wMDAwMDAwMDAwMDA3OTU0MDU3MTI3MzMzMDA3NTE5MzY2ODU5Njk0MjI2ODU0MjQyNSAtPiAtMTIuMDk5NDExMjk0MTY1MTc2MDI4ODE3MzA1MTA4NDc1MzI2MzI1MDA2MjUwOTM2OTYzIEluZXhhY3QgUm91bmRlZAorbG9neDI1MTkgbG9nMTAgMC4wMDAwMDA0MjM5NTAzNDc5OTU1NTIxNTc4MjkwNzUxNTA3NDEzNDE1NDkxNTQ5MTcwMSAtPiAgLTYuMzcyNjg1MDAzOTEyNTM4MTEzNDA2OTQ1MDgwMjEwODg5MzA3NTYwNDQ2NDEzNTI5NyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTIwIGxvZzEwIDU2LjY4MzM3NjMwNDY3NDM1NTQ4MTkwNTAyMzE0NTIzODc5OTkwOTMwMTczMjY5NDk4MiAgLT4gICAxLjc1MzQ1NTcxMDc4NTM0ODA0MzU3MDM0MjE4MjYwNzc2MDYyNTA2MzY1ODAwOTE3NTQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUyMSBsb2cxMCA0OC43MzQwMzM4MTE0NDQxOTUwNzA4MDc2MDY3MjE1MTcxNjk4MTA0MzgwNDk1ODEyMjcgIC0+ICAgMS42ODc4MzIzNjAyNzQxMDY1MTkwOTQyNjU0NzEwMDQ5NDMzODA4MjA4MjkxNTY0MDQ5IEluZXhhY3QgUm91bmRlZAorbG9neDI1MjIgbG9nMTAgMC4wMDA3NDgzMDMxMDkzMDA0Njg2NTAwOTg1MTcwNjk4OTQzMDIyODU2MTg4MDIyMTA2MyAtPiAgLTMuMTI1OTIyNDUwMjIwOTk3NDA4MjIyMzY2NzcxMjAxNjQ0NTU3MjQzMTc5MTkyMDYxOCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTIzIGxvZzEwIDM2LjY3NzM0ODg4NTExMTU5MzM4NDAyMDgzNjcyMDM5NjI2MjQ5NzEyMjcwODU5ODM1OSAgLT4gICAxLjU2NDM5NzkzNjQyNjA3OTYwODY3NTQ1MzAyODIzMDI2MDU0Nzc1Njc0NjkzOTU0MjUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUyNCBsb2cxMCAwLjAwMDAwMDAwMDAwMDAwMDA0NDk1Njc4NTYwNDgwNDMyODU4ODEyNDE5MTQ1ODMzNzQ0IC0+IC0xNi4zNDcyMDQ3NDgyMzk3NDA1MTAwMTQzMjA2MzAzNjMyNDQwMTU5MTYwMjk2MTk1NjEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUyNSBsb2cxMCA5NTA5LjU4NTQwMTM2NTA2NDI3OTkzNzQxNTkxMzE5NDAxMDg3NDg1OTQ3NzQzMDcxMDQgIC0+ICAgMy45NzgxNjE1ODI5OTE2MzI2NzQxMTAwMTY2NTE5NzI2ODI0NDMwOTQ1NDA2MzAyNjYxIEluZXhhY3QgUm91bmRlZAorbG9neDI1MjYgbG9nMTAgMC4wNzgzNDg5MTI2ODY4OTE3NzAxNDA0NDQ1NDc5MzYwODcxNTI3NjYxNTc0MzgxOTA5NyAtPiAgLTEuMTA1OTY3MDI2MjE5NzY0MzE0NzgwNTUxNzM5ODYyMTI4ODg5NzY2OTg3Njk5NjM0OCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTI3IGxvZzEwIDAuMDAwMDAwMjk1ODQ1Mjk4ODA3MDYxMjg0NDQ0NTQ2ODg0NTQ5OTkwMzI4MDE5MDQ3OTQgLT4gIC02LjUyODkzNTMyNzU4MTQwNDM3MTAwNzY1MjY5MjA1NjY3MjE1NzAzNzUwMjY5MTcyMDYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUyOCBsb2cxMCAzLjA3MTM0OTY1NDQ0OTc2MTgwOTg3OTQzMzI3ODc3NzIxODYxNzY5ODEwMTE5MDQyOTQgIC0+ICAgMC40ODczMjkyNjEwMzg5NjgyODU0NjQyNDM0MTAyOTQ5MjQ2ODEwMDQzMTQxNDA3Mjk5NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTI5IGxvZzEwIDM1Mi42NjM5MjY3MDc4ODgxNjQ3NDQwNzQ0Mjc4NTQ2MDgwMzgzMzkyNzEzNjQxMzk0MyAgLT4gICAyLjU0NzM2MTAzODgxOTk1NjI3MTQ3MDk4MzYzOTgyNDM5MzMzMjAyODQwNzcwMDgzMTQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUzMCBsb2cxMCAwLjAwMzA0NzQzMTI1MTgxODc2MjY3MjEwNTE2NTI3MzYxNzQyMTg1NjE3MDkxODAxNjUwIC0+ICAtMi41MTYwNjYwODMwMTYzOTgxOTY3Nzc0MTI0NzQ1MzExNDk3NDQ3MDUwMDU2NDAwMjA3IEluZXhhY3QgUm91bmRlZAorbG9neDI1MzEgbG9nMTAgMC4wMDAwMDA3NjEyMDUzNTg5NDk1MjEzNjQ5OTI1MDM2NDYwNDUzODExNzcyOTQzNzE4MyAtPiAgLTYuMTE4NDk4MTYyOTA0NzA1MTUzMjQ0ODQxMzg2Mzk1MDc3NjQ5NjY1MjQ4MzAxOTQxNSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTMyIGxvZzEwIDc2OS44ODc5NTk3ODUzNDM1MzA1Mjk2NTI4NjE5NTA1MzczNTAwNzQ3MzE4NzczNTgxNSAgLT4gICAyLjg4NjQyNzUyNzc4NjI2NTI3MDk5ODY0OTg1ODEwNjQxMTc5NTAyODg3OTgyMjIxMDAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUzMyBsb2cxMCAwLjAwMDAwMDAwMDAwMDAwMDQxMjk3NDk0ODA4NjEyMjI2MzA0NjE5NTcwMDE2MzM2MTg4IC0+IC0xNS4zODQwNzYyOTI3NDU0MTU5MTc1MTA2Njg0NTQzNjE4Njg2NTk0Njg2Njk4MDQ3MTAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUzNCBsb2cxMCA4NjAuODg4NjQ1OTU3MTQ0MjY5NDAyNDc5NDA5NjAyNTg1NTg4NzY5MDM3NDE5NjY5NzQgIC0+ICAgMi45MzQ5NDY5ODAwNTU0Mjc3OTE1OTIwMjc4MDkwNjQ3MjgzMjMzNDQwODU5MTU1MTc2IEluZXhhY3QgUm91bmRlZAorbG9neDI1MzUgbG9nMTAgNTgzOS4wMzI4ODEyOTk0Nzg3MjM1OTAwMTc4NTg3MzcxMDUxMDk2ODk4NjgzOTcyNDQ0ICAtPiAgIDMuNzY2MzQwOTIwODk3MjM5MjU2OTI2OTEyNTUzOTQzODg3NDczNzE0NzkwNjIzODU0MyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTM2IGxvZzEwIDAuMDAwMDAwMjg1MzI3MTAxNTEyODQ4NDA0NzE2NzA0OTcxMTI4MjEyMDE1OTgzNzc4NDEgLT4gIC02LjU0NDY1Njk3NTM1MTQwMjc2NzU4Nzg4Nzk4NDMyMzgwNjU0ODg0OTA2MTgxNTk0OTAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUzNyBsb2cxMCAwLjAwMDAwMDAwMDAwMDAwMDA5NzM0NDkwMDU5OTMxNjM4NDgzNDQ1NjMxODM1NjUxNTgxIC0+IC0xNi4wMTE2ODY3OTQwMTEyNzExMzU5Nzg2MzM4ODA4NjQyNzg2OTIyNTQyNDMxMDY5MzEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjUzOCBsb2cxMCA1Ljg2MTA5NDk1MjY0Mzk1Mjk0ODkyNTIzMDI0NjM0NTAzMDI5ODE1MTE3MTQxNDQzMzAgIC0+ICAgMC43Njc5Nzg3NTcyMjQ1MjU0OTI4MTAyODU1MjA2NzY0NTczMjQ5MDkyOTM2MTk1MjI3OCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyNTM5IGxvZzEwIDYuNjI4MjQzMjIyMTExNTkyMzM3MjE1MTE0ODk5MDEzNzE3OTYxMTk3NzU3NjMyNzIwNiAgLT4gICAwLjgyMTM5ODQzNjM5MjI3MjEzMjExMDEyMDQ0MDAwNzg1NzU3MjY3MTU1NzM2MDcxMzYxIEluZXhhY3QgUm91bmRlZAorbG9neDI1NDAgbG9nMTAgMC4wMDAwMDAwMDAwMTk5NDA3MTg2MjM4Njg0NjYyNjk1NDgxOTkyMzkyMzM0NDQxMzQ1NCAtPiAtMTAuNzAwMjU5MTk0NjMyMzM5OTgwMjY2NTU5MjI0NDQ3MjEyMjYwMTE1MDIxNjM3NjI2IEluZXhhY3QgUm91bmRlZAorCistLSBQPTM0LCB3aXRoaW4gMC05OTk5CitQcmVjaXNpb246IDM0Citsb2d4MjIwMSBsb2cxMCAxLjUyMjUxMzIwMzg4OTcxNDE3OTA4ODMyNzMyODg2NDE4MyAgLT4gMC4xODI1NjEwNjc3MDk4ODk2MjUwNDk2NjUxMzMwNDkyMTA5IEluZXhhY3QgUm91bmRlZAorbG9neDIyMDIgbG9nMTAgMC4xNzExMjM3NzQ3Njk3MTczMTYxNTQwODA4ODg5MzA0MDQgIC0+IC0wLjc2NjY4OTY0ODM1NDg0NjI1ODI0NjE4OTgwOTI3NjQ0MDggSW5leGFjdCBSb3VuZGVkCitsb2d4MjIwMyBsb2cxMCAwLjAwMDAwMDA5OTc0NjcyMzYyNTE3MTQyODMxMDQ5NjM4MzggLT4gLTcuMDAxMTAxMzYwNjUyNTE4Mjc0MjcxNTY5MDEwMzEyMTE1IEluZXhhY3QgUm91bmRlZAorbG9neDIyMDQgbG9nMTAgMC4wMDA4ODU2MTAzNjI0MTIyNDc5NzY5NjQ3NTQzNDY4NjMzIC0+IC0zLjA1Mjc1NzMxMDQ3NjA3MDg5MTgzMDQ5MDMyNzEzODE5MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjA1IGxvZzEwIDEuOTM4Mjc0ODY4NzM4MDMyOTMwNzA5NDk4MjIxMjM2NzU4ICAtPiAwLjI4NzQxNTM2NDgyNTk0NDk1MjAyMDE1MzYxNzE3MTQ1OTQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIwNiBsb2cxMCA0NzkuNTY2Nzg0NzgyMzgyNjcxMzA4MjYxMzQ0NTAxMDA5NyAgLT4gMi42ODA4NDkwOTU4NTAzNjEwNjg3MDkxNjUxNTcyODY0MzUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIwNyBsb2cxMCA4ODU2LjEzNjU5OTE3ODgyMDIwMjE0MTgyMzE1NzMzNjgwNCAgLT4gMy45NDcyNDQzMDY1ODQ3NjcxMDE0ODA0NTQyNjE5NTA1NTkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIwOCBsb2cxMCAwLjAwMDA5MTEwMjYzMTg4MDE5MDM5ODI2NDI4NzEzNDQ4NTggLT4gLTQuMDQwNDY5MDc2NDM0OTc5Mzk4NDM4NjE3NDY0MDMzODI2IEluZXhhY3QgUm91bmRlZAorbG9neDIyMDkgbG9nMTAgMC4wMDAwMDAwMDAwMDE3MjcxMTEyNjUwNDI3NDE0NzMyNjMwIC0+IC0xMS43NjI2Nzk2ODMxNDAzODc0ODk5NTE3ODIxMjY1NDkyMSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjEwIGxvZzEwIDYuOTYyNjA1MzcwMDc4ODg1NjQ3NjM5NTAzNTQ4MjI5Njk1ICAtPiAwLjg0Mjc3MTc4MDcyMDAzMjIzNTI2ODYzOTY5MjU5OTIyNTAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIxMSBsb2cxMCAwLjMzNTQ4MDQ0Mjg5OTI3OTMxMzI4NTU5MjM1NDE2OTI3ODEgLT4gLTAuNDc0MzMyNzkyMzAxMjE1OTE3MDk2NzYzNjA3MDg0NDgzNCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjEyIGxvZzEwIDIuMDc5ODY0MjU3NDc0ODU5MDA4MjUyMTY1ODM2NjYzNTA0ICAtPiAwLjMxODAzNDk5MTYxOTgwNTkwNDY4MTI1MDY3NDEzODg4NTYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIxMyBsb2cxMCAyODA1LjQ3OTUyOTI5MjkzOTQ5OTIyMDI3Njk4NjYyMTk4OCAgLT4gMy40NDgwMDcxMDQxMzk5NzQzNDQ1NjU5Nzg3ODA2MjQ3NDQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIxNCBsb2cxMCA2Ni40NTczMTEzMzAzNDE4NzM3NDU1NzAyODUzNzIxMzk0OSAgLT4gMS44MjI1NDI3NjcwMDU2NDQwNDE2NjE1MjA5MzYyMjMwODYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIxNSBsb2cxMCAwLjAwMDAwMDEyMDY1MjEyNjE3NjI2ODE3MzgyNzQ4MjI4MzUgLT4gLTYuOTE4NDY1MDIwMzkwMjE2OTY5NTYxNDk0NzU1NzY3MzE4IEluZXhhY3QgUm91bmRlZAorbG9neDIyMTYgbG9nMTAgMC4wMDAwMDAwMDAxODg0ODkxOTE2MjY0NDAxMTYwNDcyMzgxIC0+IC05LjcyNDcxMzU0ODExOTA2NTM4NjA5MTkzMzAwNzUyODYzMyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjE3IGxvZzEwIDAuMDAwMDAxNTQ2NzI3OTU1MTcyNjMyNjU4MTMxNDU4Mjc1OSAtPiAtNS44MTA1ODYwNjUwNzA0MzUzODM3NTU3NTk1MTQ2MDg3MzggSW5leGFjdCBSb3VuZGVkCitsb2d4MjIxOCBsb2cxMCAwLjAwOTA3NzYzMTY3MjgwNjg1ODY3NDQ2MzM5MTQxMzU5NTIgLT4gLTIuMDQyMDI3NDQyODQzNzQ1ODg0NTAzMjgwOTU0MzkwMTE0IEluZXhhY3QgUm91bmRlZAorbG9neDIyMTkgbG9nMTAgMC4wMDAwMDAwMDAwMDI0NTQxMTA2NTI4NzEzMzkzNzQwMDMwIC0+IC0xMS42MTAxMDU4NTkzNTYzNTcxMzA5MDExOTE1NjA2OTQ3OSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjIwIGxvZzEwIDE0LjEyOTM2ODc5Mzg1ODYzNDEwMDgxMDg3NzUwNjQ1ODU2ICAtPiAxLjE1MDEyMjc2MDg5NTQ2Njk4OTg0MTA1NzM4NTc0MjY2MiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjIxIGxvZzEwIDAuMDAwMDAzNjkxMjQ4MTgzMTM5MjkyMjkyMjY0NzIzMTM5MiAtPiAtNS40MzI4MjY3NTM3ODk4OTIyODM1NTYyMTEzODA4MjQyMDMgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIyMiBsb2cxMCAwLjAwMDAwMDAwMDQwNjc0Nzc1MjU0MjA0MjQyNzAxMzg3MzQgLT4gLTkuMzkwNjc0ODM4MDUwMDczMTIyODU3ODY4MDEyNDc1MDYwIEluZXhhY3QgUm91bmRlZAorbG9neDIyMjMgbG9nMTAgNzA4MC4xMjI1NjI3MDUzOTk3NDQ5NjkzMTk1ODk4MDYxOTQgIC0+IDMuODUwMDQwNzc1NzQ3MTAzMzE4NzI0MzMwMDQ3NTQ2OTE2IEluZXhhY3QgUm91bmRlZAorbG9neDIyMjQgbG9nMTAgMjYxLjM0OTE0MTEzNjM2NzkyMDkxNzU1MjQ3OTAyNTU3MjUgIC0+IDIuNDE3MjIxMDc3MjI3NTM2MzE5NjU1Njk5NTE3NTMwODU1IEluZXhhY3QgUm91bmRlZAorbG9neDIyMjUgbG9nMTAgMDAzLjk5NDU1ODE0NDk5MTUyNDAwOTQ3MjgzODAwNDE0OTQgIC0+IDAuNjAxNDY4NzQ3MTUzMTk4ODI2MDgyMzA2Njk5Nzg0NTY5MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjI2IGxvZzEwIDAuMDAwMDAwMDAwMDU4MzU0OTE2NDU4ODQ5NTIwNjc2Nzg0MCAtPiAtMTAuMjMzOTIyNTQ4MzQxODI2NzcwMjMyMzE3MTM1MTkzNDEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIyNyBsb2cxMCA5NTY3Ljk2MTgzMjYwNzI0MDI3ODM0Mjc2MTA4ODQ4NzQ4NCAgLT4gMy45ODA4MTk0MzQyMTExMDc2MzE1NjkzODYxNDcwMTYzNjggSW5leGFjdCBSb3VuZGVkCitsb2d4MjIyOCBsb2cxMCAwNi4yNjU5Mjk3OTE2MDM0Mjk3Mjc3NzIxOTgyODg2NzAzMyAgLT4gMC43OTY5ODU1MjQzOTY2MjIxNDA4NTk1MDI0MDEyNTc0NzI5IEluZXhhY3QgUm91bmRlZAorbG9neDIyMjkgbG9nMTAgMC4wMDAwMDAwMDAwNTg5ODQ3MDQ2NTk4MDY3MjczMjg3MzE5IC0+IC0xMC4yMjkyNjA1OTA3ODIwNjIxODcxNzc1NTI1MzU4MjkwNyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjMwIGxvZzEwIDU2Ny45Mzg4NjQ4MjM1NTg5MjA0NzY5NDQyODYzNzI0OTk3ICAtPiAyLjc1NDMwMTU4OTA1ODMxMzU3NjQ3MjM4MDI2MjkwNzYzOCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjMxIGxvZzEwIDAzOS43NzkwMzI1NDgwMDM3Nzc4OTE4MTYyMjY0ODgzNDE1ICAtPiAxLjU5OTY1NDIxNjU5MjAxOTE5OTYzOTI4NTMwODk5Nzg4NiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjMyIGxvZzEwIDAuMDAwMDAwMDAwNTEyMzk1MTkyMTg5NDE2MjE0OTgxNzIwNyAtPiAtOS4yOTAzOTQ5NTM4OTg4NjI2OTQ4NDczMjcxMzcyNDI2OTAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIzMyBsb2cxMCAwLjAwMDAwMDAwMDAwMzg1MDA5OTk3MjM2MzY5MDQyNzY3MjMgLT4gLTExLjQxNDUyNzk5MzM3OTI0MDU2MTg2ODY3MzI0ODU0NjkxIEluZXhhY3QgUm91bmRlZAorbG9neDIyMzQgbG9nMTAgMC4wMDA2NzI2NTAwNjU4OTc3NzU5ODI1NjE2NTM3OTM1ODY0IC0+IC0zLjE3MjIxMDgxMDkyMjc2ODcyNTY4NzY3MTg0OTQyMTc5MiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjM1IGxvZzEwIDI2MC4yNDAwMjUwNDc1OTY3NTI4NDI5OTQzNzc5MTI2NTA3ICAtPiAyLjQxNTM3NDA5MjA3Mzc5OTIwNDIzNjgwMTM4MzA3MDA2NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjM2IGxvZzEwIDAuMDAwMDAwMDAwNjEwMTk0MjMzOTM4NTEwMjU4NTA0MjU0OCAtPiAtOS4yMTQ1MzE5MDA1NjIwNDY1NTcxOTEyNjEyMjY2MzI1MDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjIzNyBsb2cxMCAwLjAwMDAwMDAwMTA4NDY4Njc1MDEzODI3NDY3NjAwNjY1NTcgLT4gLTguOTY0Njk1NjY0ODgzMjgyNDA2MzU5ODc0MjQyMzg3MjM2IEluZXhhY3QgUm91bmRlZAorbG9neDIyMzggbG9nMTAgNjAuMjQwNzgzNzU1Njg4MTQ3NjkwMTAzMzM3MTE1MDk5MjggIC0+IDEuNzc5ODkwNjEzNTY3MDg0MjUzMTY4MzczMjY2NjQ4OTIyIEluZXhhY3QgUm91bmRlZAorbG9neDIyMzkgbG9nMTAgMC4wMDEyMDU4NzM4NzExNzU3NjY5MzM3NjAwMjUyOTg2MDkzIC0+IC0yLjkxODY5ODExNTAxMjYwNTkxNTc1MzcyODIyMDg5NjAxMCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMjQwIGxvZzEwIDIzMC45NDUwOTMwMTk3ODQxNjAwNjExNTAzMDk1MTg1NjAwICAtPiAyLjM2MzUwODczOTA1NjgyMjg0Njc0Mjk0MjU5OTYyODk2NiBJbmV4YWN0IFJvdW5kZWQKKworLS0gUD0xNiwgd2l0aGluIDAtOTk5CitQcmVjaXNpb246IDE2Citsb2d4MjEwMSBsb2cxMCAwLjAwNzIwNjcxMTk2MDUxODQgLT4gLTIuMTQyMjYyODM1NTczMDM4IEluZXhhY3QgUm91bmRlZAorbG9neDIxMDIgbG9nMTAgNTAzLjY4Mjg0ODIyMjY2MjQgIC0+IDIuNzAyMTU3MTYyMTk1NjUyIEluZXhhY3QgUm91bmRlZAorbG9neDIxMDMgbG9nMTAgNjQuOTYwNzQ0NDc4MjE4MTUgIC0+IDEuODEyNjUwOTkzNDY0MTc0IEluZXhhY3QgUm91bmRlZAorbG9neDIxMDQgbG9nMTAgNDguNzU0MDg1OTc0NjcyNDYgIC0+IDEuNjg4MDExMDE4ODQyNjAwIEluZXhhY3QgUm91bmRlZAorbG9neDIxMDUgbG9nMTAgMC4wMzI5MDA5ODM5MjY5NTg3IC0+IC0xLjQ4Mjc5MTExMzk3NTI4MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTA2IGxvZzEwIDIyMy41MzIwNDE1MDYwNjMzICAtPiAyLjM0OTMzOTc4NDUyMzQxMCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTA3IGxvZzEwIDczLjEyNzY1MDAyMjkyMTk0ICAtPiAxLjg2NDA4MTYxNzQ3NjI2OCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTA4IGxvZzEwIDQ4Ny4zNzQ5Mzc4MzU4NTA5ICAtPiAyLjY4Nzg2MzE5MjgwMjI1MiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTA5IGxvZzEwIDAuMDAwMDAxOTY3MTk4NzYyMSAtPiAtNS43MDYxNTE3NTc1NTc5MjYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjExMCBsb2cxMCAwLjA1NzA2ODA2NjA2MDk3ODQgLT4gLTEuMjQzNjA2ODQ0Njk3ODczIEluZXhhY3QgUm91bmRlZAorbG9neDIxMTEgbG9nMTAgMzMuMTAzMTE2Mzg3ODg5OTggIC0+IDEuNTE5ODY4ODgwOTc2NzczIEluZXhhY3QgUm91bmRlZAorbG9neDIxMTIgbG9nMTAgMC4wNjg3MzgyNjk5MTg3MDc3IC0+IC0xLjE2MjgwMTQwMjg2ODE4NSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTEzIGxvZzEwIDI1OC45NDE2MTkzNjI2NDg0ICAtPiAyLjQxMzIwMTg1OTY1NDE0NSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTE0IGxvZzEwIDAuMDAwNTMwNjEwMDEzNjczNiAtPiAtMy4yNzUyMjQ1NTgyNjk3MjUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjExNSBsb2cxMCA2NS43ODQ5MDM5MzQwODU3MiAgLT4gMS44MTgxMjYyNDQ4MjUxMDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjExNiBsb2cxMCA1MDQuMjMyODg0MjA3MzUxMCAgLT4gMi43MDI2MzExNjUzNDY5NTggSW5leGFjdCBSb3VuZGVkCitsb2d4MjExNyBsb2cxMCA5LjQxNzQzMjc1NTgxNTAyNyAgLT4gMC45NzM5MzI1Mjc4NTI0NTAzIEluZXhhY3QgUm91bmRlZAorbG9neDIxMTggbG9nMTAgMDA2LjcwNTQ4MzUzNTU0OTggIC0+IDAuODI2NDMwMTAwNDk0NzY0MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTE5IGxvZzEwIDAuMDkxNzAxMjI3MjM2MzkxNSAtPiAtMS4wMzc2MjQ4NTIxMzMzOTkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyMCBsb2cxMCA1Ljk1OTQwNDM4NTI0NDkyMSAgLT4gMC43NzUyMDI4NTYxOTUzNDAxIEluZXhhY3QgUm91bmRlZAorbG9neDIxMjEgbG9nMTAgMC4wMDAxMjA5NzU5MTQ4NDg2IC0+IC0zLjkxNzMwMTA4NDk2ODkwMyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTIyIGxvZzEwIDAuMDAwNDcwNjExMjEzOTgzOCAtPiAtMy4zMjczMzc3Mjg0MjgwMzkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyMyBsb2cxMCAwLjAwNjk3MDA0NTczNzcwNDYgLT4gLTIuMTU2NzY0MzcyMDM1NzcxIEluZXhhY3QgUm91bmRlZAorbG9neDIxMjQgbG9nMTAgMC41MTU1NTg0NTY5ODUyNjE5IC0+IC0wLjI4NzcyMjA4NDc4MDUwMjUgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyNSBsb2cxMCA4OC4wNjAwNTg4NTYwNzQxNCAgLT4gMS45NDQ3Nzg5NzEzODk5MTMgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyNiBsb2cxMCAwLjA0NDgyNDAwMzgyMTk4NjYgLT4gLTEuMzQ4NDg5MzUzNTA5NzA5IEluZXhhY3QgUm91bmRlZAorbG9neDIxMjcgbG9nMTAgMy40MTk2MjI0ODQwNTk1NjUgIC0+IDAuNTMzOTc4MTYzOTEwMTE0NSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTI4IGxvZzEwIDUuMTcxMTIzMzUzODU4NzIxICAtPiAwLjcxMzU4NDg5NzcxNDI4NTQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEyOSBsb2cxMCAwLjAwMDIxMzMxODgzMTk4MDcgLT4gLTMuNjcwOTcwODAyOTQ1ODcyIEluZXhhY3QgUm91bmRlZAorbG9neDIxMzAgbG9nMTAgNDYuMjEwODY3MDMxMzY5NjYgIC0+IDEuNjY0NzQ0MTE3MDQ1MTQ5IEluZXhhY3QgUm91bmRlZAorbG9neDIxMzEgbG9nMTAgMC4wMDAwNjMxMDUzNzE0NDE1IC0+IC00LjE5OTkzMzY3MjYzOTg4MCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTMyIGxvZzEwIDc4LjY2MDE5MTk2ODcwNjk4ICAtPiAxLjg5NTc1NTAwMTk2MjQ2OSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTMzIGxvZzEwIDAuMDAwNzE1MjI3ODM1MTE4OCAtPiAtMy4xNDU1NTU1OTIwODIyOTcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEzNCBsb2cxMCA0NS41MjUwOTgxOTkyODUzNiAgLT4gMS42NTgyNTA4OTEyNTY4OTIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjEzNSBsb2cxMCAwLjAwMDA3MDMyMjc3OTU3NDAgLT4gLTQuMTUyOTAzOTcxNjk3MTgzIEluZXhhY3QgUm91bmRlZAorbG9neDIxMzYgbG9nMTAgMjYuMjQ0Mzg2NDE0MjY2NjkgIC0+IDEuNDE5MDM2NDIzNTUwNTk5IEluZXhhY3QgUm91bmRlZAorbG9neDIxMzcgbG9nMTAgMC4wMDAwMDQ0NjU0ODI5NTM1IC0+IC01LjM1MDEzMTU2NDE2NjgxNyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTM4IGxvZzEwIDAuNzM2MDcwMjczMzA2MjUyOSAtPiAtMC4xMzMwODA3MjExODkzNjExIEluZXhhY3QgUm91bmRlZAorbG9neDIxMzkgbG9nMTAgOC40MTcwNTkxNzY0Njk2NTUgIC0+IDAuOTI1MTYwMzgwNTExMjc3OCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMTQwIGxvZzEwIDAuMDAwMjkyNjU3MDc2Nzk2OCAtPiAtMy41MzM2NDA5Njk2NjQ4MTggSW5leGFjdCBSb3VuZGVkCisKKy0tIFA9Nywgd2l0aGluIDAtOTkKK1ByZWNpc2lvbjogNworbG9neDIwMDEgbG9nMTAgNTcuMjYwODkgIC0+IDEuNzU3ODU4IEluZXhhY3QgUm91bmRlZAorbG9neDIwMDIgbG9nMTAgMC4wNTc1NDIxIC0+IC0xLjI0MDAxNCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDAzIGxvZzEwIDAuNTkxODQ2NSAtPiAtMC4yMjc3OTA5IEluZXhhY3QgUm91bmRlZAorbG9neDIwMDQgbG9nMTAgMC4wMDY4Nzc2IC0+IC0yLjE2MjU2MyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDA1IGxvZzEwIDAuMDA2NjgzMyAtPiAtMi4xNzUwMDkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAwNiBsb2cxMCA5LjkyNjk2MyAgLT4gMC45OTY4MTY0IEluZXhhY3QgUm91bmRlZAorbG9neDIwMDcgbG9nMTAgMC4wMDQxODUyIC0+IC0yLjM3ODI4NCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDA4IGxvZzEwIDg0LjE1NDEyICAtPiAxLjkyNTA3NSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDA5IGxvZzEwIDIuNDY2ODU2ICAtPiAwLjM5MjE0MzggSW5leGFjdCBSb3VuZGVkCitsb2d4MjAxMCBsb2cxMCAwLjAwNTgwNDcgLT4gLTIuMjM2MjIwIEluZXhhY3QgUm91bmRlZAorbG9neDIwMTEgbG9nMTAgOS44ODUxNTQgIC0+IDAuOTk0OTgzNCBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDEyIGxvZzEwIDAuNjY2NzY1NCAtPiAtMC4xNzYwMjY5IEluZXhhY3QgUm91bmRlZAorbG9neDIwMTMgbG9nMTAgMzQuNjU3MzYgIC0+IDEuNTM5Nzk1IEluZXhhY3QgUm91bmRlZAorbG9neDIwMTQgbG9nMTAgMC4wMDI2ODg0IC0+IC0yLjU3MDUwNiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDE1IGxvZzEwIDAuMDQzMjc2NyAtPiAtMS4zNjM3NDYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAxNiBsb2cxMCA2Ni4wMTQwNyAgLT4gMS44MTk2MzcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAxNyBsb2cxMCAwLjAwNzA1NzIgLT4gLTIuMTUxMzY4IEluZXhhY3QgUm91bmRlZAorbG9neDIwMTggbG9nMTAgMC4wNzMxNjEzIC0+IC0xLjEzNTcxOSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDE5IGxvZzEwIDkuODM4OTgzICAtPiAwLjk5Mjk1MDIgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAyMCBsb2cxMCAxNS44OTY5NiAgLT4gMS4yMDEzMTQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAyMSBsb2cxMCA4LjQ1OTI0NyAgLT4gMC45MjczMzE3IEluZXhhY3QgUm91bmRlZAorbG9neDIwMjIgbG9nMTAgMC4wMDEwODczIC0+IC0yLjk2MzY1MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDIzIGxvZzEwIDAuNjQ5ODYxOSAtPiAtMC4xODcxNzg5IEluZXhhY3QgUm91bmRlZAorbG9neDIwMjQgbG9nMTAgMC4wODQ3MDA4IC0+IC0xLjA3MjExMiBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDI1IGxvZzEwIDAuMDA3NTQ4OSAtPiAtMi4xMjIxMTYgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAyNiBsb2cxMCA1MS4xMTE1MiAgLT4gMS43MDg1MTkgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAyNyBsb2cxMCAwLjcyMzM4NjYgLT4gLTAuMTQwNjI5NSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDI4IGxvZzEwIDIuMjU0NzIxICAtPiAwLjM1MzA5MjggSW5leGFjdCBSb3VuZGVkCitsb2d4MjAyOSBsb2cxMCA2LjU2ODQ0NCAgLT4gMC44MTc0NjI1IEluZXhhY3QgUm91bmRlZAorbG9neDIwMzAgbG9nMTAgODMuNzI2MzkgIC0+IDEuOTIyODYyIEluZXhhY3QgUm91bmRlZAorbG9neDIwMzEgbG9nMTAgNi43MjA1ODUgIC0+IDAuODI3NDA3MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDMyIGxvZzEwIDg3LjkwMzY2ICAtPiAxLjk0NDAwNyBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDMzIGxvZzEwIDAuMDQzMzMyNCAtPiAtMS4zNjMxODcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAzNCBsb2cxMCAzNC42MzkxMiAgLT4gMS41Mzk1NjcgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAzNSBsb2cxMCAwLjgwODkwNTkgLT4gLTAuMDkyMTAyMDAgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAzNiBsb2cxMCA3Ljc5MzQwNSAgLT4gMC44OTE3MjcyIEluZXhhY3QgUm91bmRlZAorbG9neDIwMzcgbG9nMTAgMC4wMDQxNzU3IC0+IC0yLjM3OTI3MSBJbmV4YWN0IFJvdW5kZWQKK2xvZ3gyMDM4IGxvZzEwIDcuMTM1NDE3ICAtPiAwLjg1MzQxOTQgSW5leGFjdCBSb3VuZGVkCitsb2d4MjAzOSBsb2cxMCAxMi40OTU3MCAgLT4gMS4wOTY3NjEgSW5leGFjdCBSb3VuZGVkCitsb2d4MjA0MCBsb2cxMCA2LjM1NjI3NiAgLT4gMC44MDMyMDI3IEluZXhhY3QgUm91bmRlZAorCistLS0tLS0tLQorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCistLSBzcGVjaWFsIHZhbHVlcworbG9neDgyMCAgbG9nMTAgICBJbmZpbml0eSAtPiAgIEluZmluaXR5Citsb2d4ODIxICBsb2cxMCAgIDAgICAgICAgIC0+ICAtSW5maW5pdHkKK2xvZ3g4MjIgIGxvZzEwICAgTmFOICAgICAgLT4gICBOYU4KK2xvZ3g4MjMgIGxvZzEwICAgc05hTiAgICAgLT4gICBOYU4gICAgIEludmFsaWRfb3BlcmF0aW9uCistLSBwcm9wYWdhdGluZyBOYU5zCitsb2d4ODI0ICBsb2cxMCAgIHNOYU4xMjMgIC0+ICAgTmFOMTIzICBJbnZhbGlkX29wZXJhdGlvbgorbG9neDgyNSAgbG9nMTAgICAtc05hTjMyMSAtPiAgLU5hTjMyMSAgSW52YWxpZF9vcGVyYXRpb24KK2xvZ3g4MjYgIGxvZzEwICAgTmFONDU2ICAgLT4gICBOYU40NTYKK2xvZ3g4MjcgIGxvZzEwICAgLU5hTjY1NCAgLT4gIC1OYU42NTQKK2xvZ3g4MjggIGxvZzEwICAgTmFOMSAgICAgLT4gICBOYU4xCisKKworLS0gSW52YWxpZCBvcGVyYXRpb25zIGR1ZSB0byByZXN0cmljdGlvbnMKKy0tIFtuZXh0IHR3byBwcm9iYWJseSBza2lwcGVkIGJ5IG1vc3QgdGVzdCBoYXJuZXNzZXNdCitwcmVjaXNpb246IDEwMDAwMDAwMAorbG9neDkwMSAgbG9nMTAgMSAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0CitwcmVjaXNpb246ICA5OTk5OTk5OQorbG9neDkwMiAgbG9nMTAgMCAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0CisKK3ByZWNpc2lvbjogOQorbWF4RXhwb25lbnQ6ICAgMTAwMDAwMAorbWluRXhwb25lbnQ6ICAgLTk5OTk5OQorbG9neDkwMyAgbG9nMTAgMSAgIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgIC05OTk5OTkKK2xvZ3g5MDQgIGxvZzEwIDAgLT4gIC1JbmZpbml0eQorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQorbWluRXhwb25lbnQ6ICAtMTAwMDAwMAorbG9neDkwNSAgbG9nMTAgMSAgIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgIC05OTk5OTgKK2xvZ3g5MDYgIGxvZzEwIDAgLT4gIC1JbmZpbml0eQorCistLSBOdWxsIHRlc3QKK2xvZ3g5MDAgIGxvZzEwICMgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2xvZ2IuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG9nYi5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNzkwMDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2xvZ2IuZGVjVGVzdApAQCAtMCwwICsxLDE4OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBsb2diLmRlY1Rlc3QgLS0gcmV0dXJuIGludGVncmFsIGFkanVzdGVkIGV4cG9uZW50IGFzIHBlciA3NTRyICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA5LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgZW1waGFzaXNlcyB0aGUgdGVzdGluZyBvZiBub3RhYmxlIGNhc2VzLCBhcyB0aGV5IHdpbGwgb2Z0ZW4KKy0tIGhhdmUgdW51c3VhbCBwYXRocyAoZXNwZWNpYWxseSB0aGUgMTAqKm4gcmVzdWx0cykuCisKK2V4dGVuZGVkOiAgICAxCityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorCistLSBiYXNpY3MgJiBleGFtcGxlcworcHJlY2lzaW9uOiAgIDkKK2xvZ2J4MDAxIGxvZ2IgIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworbG9nYngwMDIgbG9nYiAgMUUtOTk5ICAgICAgICAgICAgLT4gLTk5OQorbG9nYngwMDMgbG9nYiAgOUUtOTk5ICAgICAgICAgICAgLT4gLTk5OQorbG9nYngwMDQgbG9nYiAgMC4wMDEgICAgICAgICAgICAgLT4gLTMKK2xvZ2J4MDA1IGxvZ2IgIDAuMDMgICAgICAgICAgICAgIC0+IC0yCitsb2dieDAwNiBsb2diICAxICAgICAgICAgICAgICAgICAtPiAgMAorbG9nYngwMDcgbG9nYiAgMiAgICAgICAgICAgICAgICAgLT4gIDAKK2xvZ2J4MDA4IGxvZ2IgIDIuNSAgICAgICAgICAgICAgIC0+ICAwCitsb2dieDAwOSBsb2diICAyLjUwICAgICAgICAgICAgICAtPiAgMAorbG9nYngwMTAgbG9nYiAgMTAgICAgICAgICAgICAgICAgLT4gIDEKK2xvZ2J4MDExIGxvZ2IgIDcwICAgICAgICAgICAgICAgIC0+ICAxCitsb2dieDAxMiBsb2diICAxMDAgICAgICAgICAgICAgICAtPiAgMgorbG9nYngwMTMgbG9nYiAgMjUwICAgICAgICAgICAgICAgLT4gIDIKK2xvZ2J4MDE0IGxvZ2IgK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQorCistLSBuZWdhdGl2ZXMgYXJlIHRyZWF0ZWQgYXMgcG9zaXRpdmVzCitsb2dieDAyMSBsb2diIC0wICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2xvZ2J4MDIyIGxvZ2IgLTFFLTk5OSAgICAgICAgICAgIC0+IC05OTkKK2xvZ2J4MDIzIGxvZ2IgLTlFLTk5OSAgICAgICAgICAgIC0+IC05OTkKK2xvZ2J4MDI0IGxvZ2IgLTAuMDAxICAgICAgICAgICAgIC0+IC0zCitsb2dieDAyNSBsb2diIC0xICAgICAgICAgICAgICAgICAtPiAgMAorbG9nYngwMjYgbG9nYiAtMiAgICAgICAgICAgICAgICAgLT4gIDAKK2xvZ2J4MDI3IGxvZ2IgLTEwICAgICAgICAgICAgICAgIC0+ICAxCitsb2dieDAyOCBsb2diIC03MCAgICAgICAgICAgICAgICAtPiAgMQorbG9nYngwMjkgbG9nYiAtMTAwICAgICAgICAgICAgICAgLT4gIDIKK2xvZ2J4MDMwIGxvZ2IgLTEwMDAwMDAwMCAgICAgICAgIC0+ICA4Citsb2dieDAzMSBsb2diIC1JbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKKworLS0gemVyb3MKK2xvZ2J4MTExIGxvZ2IgICAgICAgICAgMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworbG9nYngxMTIgbG9nYiAgICAgICAgIC0wICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitsb2dieDExMyBsb2diICAgICAgIDBFKzQgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2xvZ2J4MTE0IGxvZ2IgICAgICAtMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworbG9nYngxMTUgbG9nYiAgICAgMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCitsb2dieDExNiBsb2diICAgIC0wLjAwMDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KK2xvZ2J4MTE3IGxvZ2IgICAgICAwRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybworbG9nYngxMTggbG9nYiAgICAgLTBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCitsb2dieDEyMSBsb2diICAgMjY4MjY4MjY4ICAgICAgICAtPiA4Citsb2dieDEyMiBsb2diICAtMjY4MjY4MjY4ICAgICAgICAtPiA4Citsb2dieDEyMyBsb2diICAgMTM0MTM0MTM0ICAgICAgICAtPiA4Citsb2dieDEyNCBsb2diICAtMTM0MTM0MTM0ICAgICAgICAtPiA4CisKKy0tIE5tYXgsIE5taW4sIE50aW55Citsb2dieDEzMSBsb2diICA5Ljk5OTk5OTk5RSs5OTkgICAtPiA5OTkKK2xvZ2J4MTMyIGxvZ2IgIDFFLTk5OSAgICAgICAgICAgIC0+IC05OTkKK2xvZ2J4MTMzIGxvZ2IgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IC05OTkKK2xvZ2J4MTM0IGxvZ2IgIDFFLTEwMDcgICAgICAgICAgIC0+IC0xMDA3CisKK2xvZ2J4MTM1IGxvZ2IgIC0xRS0xMDA3ICAgICAgICAgIC0+IC0xMDA3Citsb2dieDEzNiBsb2diICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAtOTk5Citsb2dieDEzNyBsb2diICAtMUUtOTk5ICAgICAgICAgICAtPiAtOTk5Citsb2dieDEzOCBsb2diICAtOS45OTk5OTk5OUUrOTk5ICAtPiAgOTk5CisKKy0tIG9uZXMKK2xvZ2J4MDA2MSBsb2diICAxICAgICAgICAgICAgICAgICAtPiAgIDAKK2xvZ2J4MDA2MiBsb2diICAxLjAgICAgICAgICAgICAgICAtPiAgIDAKK2xvZ2J4MDA2MyBsb2diICAxLjAwMDAwMDAwMDAwMDAwMCAtPiAgIDAKK2xvZ2J4MDA2NCBsb2diICAxLjAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDAKKworLS0gbm90YWJsZSBjYXNlcyAtLSBleGFjdCBwb3dlcnMgb2YgMTAKK2xvZ2J4MTEwMCBsb2diIDEgICAgICAgICAgICAgLT4gMAorbG9nYngxMTAxIGxvZ2IgMTAgICAgICAgICAgICAtPiAxCitsb2dieDExMDIgbG9nYiAxMDAgICAgICAgICAgIC0+IDIKK2xvZ2J4MTEwMyBsb2diIDEwMDAgICAgICAgICAgLT4gMworbG9nYngxMTA0IGxvZ2IgMTAwMDAgICAgICAgICAtPiA0Citsb2dieDExMDUgbG9nYiAxMDAwMDAgICAgICAgIC0+IDUKK2xvZ2J4MTEwNiBsb2diIDEwMDAwMDAgICAgICAgLT4gNgorbG9nYngxMTA3IGxvZ2IgMTAwMDAwMDAgICAgICAtPiA3Citsb2dieDExMDggbG9nYiAxMDAwMDAwMDAgICAgIC0+IDgKK2xvZ2J4MTEwOSBsb2diIDEwMDAwMDAwMDAgICAgLT4gOQorbG9nYngxMTEwIGxvZ2IgMTAwMDAwMDAwMDAgICAtPiAxMAorbG9nYngxMTExIGxvZ2IgMTAwMDAwMDAwMDAwICAtPiAxMQorbG9nYngxMTEyIGxvZ2IgMTAwMDAwMDAwMDAwMCAtPiAxMgorbG9nYngxMTEzIGxvZ2IgMC4wMDAwMDAwMDAwMSAtPiAtMTEKK2xvZ2J4MTExNCBsb2diIDAuMDAwMDAwMDAwMSAtPiAtMTAKK2xvZ2J4MTExNSBsb2diIDAuMDAwMDAwMDAxIC0+IC05Citsb2dieDExMTYgbG9nYiAwLjAwMDAwMDAxIC0+IC04Citsb2dieDExMTcgbG9nYiAwLjAwMDAwMDEgLT4gLTcKK2xvZ2J4MTExOCBsb2diIDAuMDAwMDAxIC0+IC02Citsb2dieDExMTkgbG9nYiAwLjAwMDAxIC0+IC01Citsb2dieDExMjAgbG9nYiAwLjAwMDEgLT4gLTQKK2xvZ2J4MTEyMSBsb2diIDAuMDAxIC0+IC0zCitsb2dieDExMjIgbG9nYiAwLjAxIC0+IC0yCitsb2dieDExMjMgbG9nYiAwLjEgLT4gLTEKK2xvZ2J4MTEyNCBsb2diIDFFLTk5ICAtPiAtOTkKK2xvZ2J4MTEyNSBsb2diIDFFLTEwMCAtPiAtMTAwCitsb2dieDExMjYgbG9nYiAxRS0zODMgLT4gLTM4MworbG9nYngxMTI3IGxvZ2IgMUUtOTk5IC0+IC05OTkKKworLS0gc3VnZ2VzdGlvbnMgZnJvbSBJbGFuIE5laGFtYQorbG9nYngxNDAwIGxvZ2IgMTBFLTMgICAgLT4gLTIKK2xvZ2J4MTQwMSBsb2diIDEwRS0yICAgIC0+IC0xCitsb2dieDE0MDIgbG9nYiAxMDBFLTIgICAtPiAgMAorbG9nYngxNDAzIGxvZ2IgMTAwMEUtMiAgLT4gIDEKK2xvZ2J4MTQwNCBsb2diIDEwMDAwRS0yIC0+ICAyCitsb2dieDE0MDUgbG9nYiAxMEUtMSAgICAtPiAgMAorbG9nYngxNDA2IGxvZ2IgMTAwRS0xICAgLT4gIDEKK2xvZ2J4MTQwNyBsb2diIDEwMDBFLTEgIC0+ICAyCitsb2dieDE0MDggbG9nYiAxMDAwMEUtMSAtPiAgMworbG9nYngxNDA5IGxvZ2IgMTBFMCAgICAgLT4gIDEKK2xvZ2J4MTQxMCBsb2diIDEwMEUwICAgIC0+ICAyCitsb2dieDE0MTEgbG9nYiAxMDAwRTAgICAtPiAgMworbG9nYngxNDEyIGxvZ2IgMTAwMDBFMCAgLT4gIDQKK2xvZ2J4MTQxMyBsb2diIDEwRTEgICAgIC0+ICAyCitsb2dieDE0MTQgbG9nYiAxMDBFMSAgICAtPiAgMworbG9nYngxNDE1IGxvZ2IgMTAwMEUxICAgLT4gIDQKK2xvZ2J4MTQxNiBsb2diIDEwMDAwRTEgIC0+ICA1Citsb2dieDE0MTcgbG9nYiAxMEUyICAgICAtPiAgMworbG9nYngxNDE4IGxvZ2IgMTAwRTIgICAgLT4gIDQKK2xvZ2J4MTQxOSBsb2diIDEwMDBFMiAgIC0+ICA1Citsb2dieDE0MjAgbG9nYiAxMDAwMEUyICAtPiAgNgorCistLSBpbmV4YWN0cworcHJlY2lzaW9uOiAyCitsb2dieDE1MDAgbG9nYiAxMDAwMEUyICAgICAgIC0+ICA2Citsb2dieDE1MDEgbG9nYiAxRSs5OSAgICAgICAgIC0+ICA5OQorbG9nYngxNTAyIGxvZ2IgMUUtOTkgICAgICAgICAtPiAtOTkKK2xvZ2J4MTUwMyBsb2diIDFFKzEwMCAgICAgICAgLT4gIDEuMEUrMiAgUm91bmRlZAorbG9nYngxNTA0IGxvZ2IgMUUrOTk5ICAgICAgICAtPiAgMS4wRSszICBJbmV4YWN0IFJvdW5kZWQKK2xvZ2J4MTUwNSBsb2diIDFFLTEwMCAgICAgICAgLT4gLTEuMEUrMiAgUm91bmRlZAorbG9nYngxNTA2IGxvZ2IgMUUtOTk5ICAgICAgICAtPiAtMS4wRSszICBJbmV4YWN0IFJvdW5kZWQKK2xvZ2J4MTUwNyBsb2diIDFFLTExMTEgICAgICAgLT4gLTEuMUUrMyAgSW5leGFjdCBSb3VuZGVkCitsb2dieDE1MDggbG9nYiAxRS0zMzMzICAgICAgIC0+IC0zLjNFKzMgIEluZXhhY3QgUm91bmRlZAorbG9nYngxNTA5IGxvZ2IgMUUtNjY2NiAgICAgICAtPiAtNi43RSszICBJbmV4YWN0IFJvdW5kZWQKK2xvZ2J4MTUxMCBsb2diIDFFKzk5OTk5OTk5OSAgLT4gIDEuMEUrOSAgSW5leGFjdCBSb3VuZGVkCitsb2dieDE1MTEgbG9nYiAxRS05OTk5OTk5OTkgIC0+IC0xLjBFKzkgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxCitsb2dieDE1MTcgbG9nYiAxRS0xMTExICAgICAgIC0+IC0xRSszICAgIEluZXhhY3QgUm91bmRlZAorbG9nYngxNTE4IGxvZ2IgMUUtMzMzMyAgICAgICAtPiAtM0UrMyAgICBJbmV4YWN0IFJvdW5kZWQKK2xvZ2J4MTUxOSBsb2diIDFFLTY2NjYgICAgICAgLT4gLTdFKzMgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDgKK2xvZ2J4MTUyMCBsb2diIDFFKzk5OTk5OTk5OSAgLT4gIDEuMDAwMDAwMEUrOSBJbmV4YWN0IFJvdW5kZWQKK2xvZ2J4MTUyMSBsb2diIDFFLTk5OTk5OTk5OSAgLT4gLTEuMDAwMDAwMEUrOSBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogOQorbG9nYngxNTIzIGxvZ2IgMUUrOTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5Citsb2dieDE1MjQgbG9nYiAxRS05OTk5OTk5OTkgIC0+IC05OTk5OTk5OTkKKworLS0gc3BlY2lhbCB2YWx1ZXMKK3ByZWNpc2lvbjogOQorbG9nYng4MjAgIGxvZ2IgICBJbmZpbml0eSAtPiAgIEluZmluaXR5Citsb2dieDgyMSAgbG9nYiAgLUluZmluaXR5IC0+ICAgSW5maW5pdHkKK2xvZ2J4ODIyICBsb2diICAgMCAgICAgICAgLT4gIC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCitsb2dieDgyMyAgbG9nYiAgIE5hTiAgICAgIC0+ICAgTmFOCitsb2dieDgyNCAgbG9nYiAgIHNOYU4gICAgIC0+ICAgTmFOICAgICBJbnZhbGlkX29wZXJhdGlvbgorLS0gcHJvcGFnYXRpbmcgTmFOcworbG9nYng4MjUgIGxvZ2IgICBzTmFOMTIzICAtPiAgIE5hTjEyMyAgSW52YWxpZF9vcGVyYXRpb24KK2xvZ2J4ODI2ICBsb2diICAgLXNOYU4zMjEgLT4gIC1OYU4zMjEgIEludmFsaWRfb3BlcmF0aW9uCitsb2dieDgyNyAgbG9nYiAgIE5hTjQ1NiAgIC0+ICAgTmFONDU2Citsb2dieDgyOCAgbG9nYiAgIC1OYU42NTQgIC0+ICAtTmFONjU0Citsb2dieDgyOSAgbG9nYiAgIE5hTjEgICAgIC0+ICAgTmFOMQorCistLSBOdWxsIHRlc3QKK2xvZ2J4OTAwICBsb2diICMgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21heC5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9tYXguZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmI1NzFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9tYXguZGVjVGVzdApAQCAtMCwwICsxLDQyNCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBtYXguZGVjVGVzdCAtLSBkZWNpbWFsIG1heGltdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbworLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nCisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIHNhbml0eSBjaGVja3MKK21heHgwMDEgbWF4ICAtMiAgLTIgIC0+IC0yCittYXh4MDAyIG1heCAgLTIgIC0xICAtPiAtMQorbWF4eDAwMyBtYXggIC0yICAgMCAgLT4gIDAKK21heHgwMDQgbWF4ICAtMiAgIDEgIC0+ICAxCittYXh4MDA1IG1heCAgLTIgICAyICAtPiAgMgorbWF4eDAwNiBtYXggIC0xICAtMiAgLT4gLTEKK21heHgwMDcgbWF4ICAtMSAgLTEgIC0+IC0xCittYXh4MDA4IG1heCAgLTEgICAwICAtPiAgMAorbWF4eDAwOSBtYXggIC0xICAgMSAgLT4gIDEKK21heHgwMTAgbWF4ICAtMSAgIDIgIC0+ICAyCittYXh4MDExIG1heCAgIDAgIC0yICAtPiAgMAorbWF4eDAxMiBtYXggICAwICAtMSAgLT4gIDAKK21heHgwMTMgbWF4ICAgMCAgIDAgIC0+ICAwCittYXh4MDE0IG1heCAgIDAgICAxICAtPiAgMQorbWF4eDAxNSBtYXggICAwICAgMiAgLT4gIDIKK21heHgwMTYgbWF4ICAgMSAgLTIgIC0+ICAxCittYXh4MDE3IG1heCAgIDEgIC0xICAtPiAgMQorbWF4eDAxOCBtYXggICAxICAgMCAgLT4gIDEKK21heHgwMTkgbWF4ICAgMSAgIDEgIC0+ICAxCittYXh4MDIwIG1heCAgIDEgICAyICAtPiAgMgorbWF4eDAyMSBtYXggICAyICAtMiAgLT4gIDIKK21heHgwMjIgbWF4ICAgMiAgLTEgIC0+ICAyCittYXh4MDIzIG1heCAgIDIgICAwICAtPiAgMgorbWF4eDAyNSBtYXggICAyICAgMSAgLT4gIDIKK21heHgwMjYgbWF4ICAgMiAgIDIgIC0+ICAyCisKKy0tIGV4dGVuZGVkIHplcm9zCittYXh4MDMwIG1heCAgIDAgICAgIDAgICAtPiAgMAorbWF4eDAzMSBtYXggICAwICAgIC0wICAgLT4gIDAKK21heHgwMzIgbWF4ICAgMCAgICAtMC4wIC0+ICAwCittYXh4MDMzIG1heCAgIDAgICAgIDAuMCAtPiAgMAorbWF4eDAzNCBtYXggIC0wICAgICAwICAgLT4gIDAgICAgLS0gbm90ZTogLTAgPSAwLCBidXQgMCBjaG9zZW4KK21heHgwMzUgbWF4ICAtMCAgICAtMCAgIC0+IC0wCittYXh4MDM2IG1heCAgLTAgICAgLTAuMCAtPiAtMC4wCittYXh4MDM3IG1heCAgLTAgICAgIDAuMCAtPiAgMC4wCittYXh4MDM4IG1heCAgIDAuMCAgIDAgICAtPiAgMAorbWF4eDAzOSBtYXggICAwLjAgIC0wICAgLT4gIDAuMAorbWF4eDA0MCBtYXggICAwLjAgIC0wLjAgLT4gIDAuMAorbWF4eDA0MSBtYXggICAwLjAgICAwLjAgLT4gIDAuMAorbWF4eDA0MiBtYXggIC0wLjAgICAwICAgLT4gIDAKK21heHgwNDMgbWF4ICAtMC4wICAtMCAgIC0+IC0wLjAKK21heHgwNDQgbWF4ICAtMC4wICAtMC4wIC0+IC0wLjAKK21heHgwNDUgbWF4ICAtMC4wICAgMC4wIC0+ICAwLjAKKworbWF4eDA1MCBtYXggIC0wRTEgICAwRTEgLT4gIDBFKzEKK21heHgwNTEgbWF4ICAtMEUyICAgMEUyIC0+ICAwRSsyCittYXh4MDUyIG1heCAgLTBFMiAgIDBFMSAtPiAgMEUrMQorbWF4eDA1MyBtYXggIC0wRTEgICAwRTIgLT4gIDBFKzIKK21heHgwNTQgbWF4ICAgMEUxICAtMEUxIC0+ICAwRSsxCittYXh4MDU1IG1heCAgIDBFMiAgLTBFMiAtPiAgMEUrMgorbWF4eDA1NiBtYXggICAwRTIgIC0wRTEgLT4gIDBFKzIKK21heHgwNTcgbWF4ICAgMEUxICAtMEUyIC0+ICAwRSsxCisKK21heHgwNTggbWF4ICAgMEUxICAgMEUxIC0+ICAwRSsxCittYXh4MDU5IG1heCAgIDBFMiAgIDBFMiAtPiAgMEUrMgorbWF4eDA2MCBtYXggICAwRTIgICAwRTEgLT4gIDBFKzIKK21heHgwNjEgbWF4ICAgMEUxICAgMEUyIC0+ICAwRSsyCittYXh4MDYyIG1heCAgLTBFMSAgLTBFMSAtPiAtMEUrMQorbWF4eDA2MyBtYXggIC0wRTIgIC0wRTIgLT4gLTBFKzIKK21heHgwNjQgbWF4ICAtMEUyICAtMEUxIC0+IC0wRSsxCittYXh4MDY1IG1heCAgLTBFMSAgLTBFMiAtPiAtMEUrMQorCistLSBTcGVjaWFscworcHJlY2lzaW9uOiA5CittYXh4MDkwIG1heCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CittYXh4MDkxIG1heCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CittYXh4MDkyIG1heCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5CittYXh4MDkzIG1heCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5CittYXh4MDk0IG1heCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CittYXh4MDk1IG1heCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5CittYXh4MDk2IG1heCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5CittYXh4MDk3IG1heCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CittYXh4MDk4IG1heCAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CittYXh4MDk5IG1heCAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5CittYXh4MTAwIG1heCAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5CittYXh4MTAxIG1heCAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5CittYXh4MTAyIG1heCAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5CittYXh4MTAzIG1heCAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5CittYXh4MTA0IG1heCAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CittYXh4MTA1IG1heCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK21heHgxMjAgbWF4IC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK21heHgxMjEgbWF4IC1JbmYgIC0xMDAwICAtPiAtMTAwMAorbWF4eDEyMiBtYXggLUluZiAgLTEgICAgIC0+IC0xCittYXh4MTIzIG1heCAtSW5mICAtMCAgICAgLT4gLTAKK21heHgxMjQgbWF4IC1JbmYgICAwICAgICAtPiAgMAorbWF4eDEyNSBtYXggLUluZiAgIDEgICAgIC0+ICAxCittYXh4MTI2IG1heCAtSW5mICAgMTAwMCAgLT4gIDEwMDAKK21heHgxMjcgbWF4IC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK21heHgxMjggbWF4IC1JbmYgIC1JbmYgICAtPiAgLUluZmluaXR5CittYXh4MTI5IG1heCAtMTAwMCAtSW5mICAgLT4gIC0xMDAwCittYXh4MTMwIG1heCAtMSAgICAtSW5mICAgLT4gIC0xCittYXh4MTMxIG1heCAtMCAgICAtSW5mICAgLT4gIC0wCittYXh4MTMyIG1heCAgMCAgICAtSW5mICAgLT4gIDAKK21heHgxMzMgbWF4ICAxICAgIC1JbmYgICAtPiAgMQorbWF4eDEzNCBtYXggIDEwMDAgLUluZiAgIC0+ICAxMDAwCittYXh4MTM1IG1heCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CisKKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcworbWF4eDE0MSBtYXggIE5hTiAtSW5mICAgIC0+IC1JbmZpbml0eQorbWF4eDE0MiBtYXggIE5hTiAtMTAwMCAgIC0+IC0xMDAwCittYXh4MTQzIG1heCAgTmFOIC0xICAgICAgLT4gLTEKK21heHgxNDQgbWF4ICBOYU4gLTAgICAgICAtPiAtMAorbWF4eDE0NSBtYXggIE5hTiAgMCAgICAgIC0+ICAwCittYXh4MTQ2IG1heCAgTmFOICAxICAgICAgLT4gIDEKK21heHgxNDcgbWF4ICBOYU4gIDEwMDAgICAtPiAgMTAwMAorbWF4eDE0OCBtYXggIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQorbWF4eDE0OSBtYXggIE5hTiAgTmFOICAgIC0+ICBOYU4KK21heHgxNTAgbWF4IC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK21heHgxNTEgbWF4IC0xMDAwIE5hTiAgICAtPiAtMTAwMAorbWF4eDE1MiBtYXggLTEgICAgTmFOICAgIC0+IC0xCittYXh4MTUzIG1heCAtMCAgICBOYU4gICAgLT4gLTAKK21heHgxNTQgbWF4ICAwICAgIE5hTiAgICAtPiAgMAorbWF4eDE1NSBtYXggIDEgICAgTmFOICAgIC0+ICAxCittYXh4MTU2IG1heCAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK21heHgxNTcgbWF4ICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKKworbWF4eDE2MSBtYXggIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittYXh4MTYyIG1heCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21heHgxNjMgbWF4ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE2NCBtYXggIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittYXh4MTY1IG1heCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21heHgxNjYgbWF4ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE2NyBtYXggIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittYXh4MTY4IG1heCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21heHgxNjkgbWF4ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE3MCBtYXggIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittYXh4MTcxIG1heCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21heHgxNzIgbWF4IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE3MyBtYXggLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittYXh4MTc0IG1heCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21heHgxNzUgbWF4ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE3NiBtYXggIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittYXh4MTc3IG1heCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21heHgxNzggbWF4ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbWF4eDE3OSBtYXggIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK21heHgxODEgbWF4ICBOYU45ICAtSW5mICAgLT4gLUluZmluaXR5CittYXh4MTgyIG1heCAgTmFOOCAgICAgOSAgIC0+ICA5CittYXh4MTgzIG1heCAtTmFONyAgIEluZiAgIC0+ICBJbmZpbml0eQorCittYXh4MTg0IG1heCAtTmFOMSAgIE5hTjExIC0+IC1OYU4xCittYXh4MTg1IG1heCAgTmFOMiAgIE5hTjEyIC0+ICBOYU4yCittYXh4MTg2IG1heCAtTmFOMTMgLU5hTjcgIC0+IC1OYU4xMworbWF4eDE4NyBtYXggIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQKKworbWF4eDE4OCBtYXggLUluZiAgICBOYU40ICAtPiAtSW5maW5pdHkKK21heHgxODkgbWF4IC05ICAgICAtTmFOMyAgLT4gLTkKK21heHgxOTAgbWF4ICBJbmYgICAgTmFOMiAgLT4gIEluZmluaXR5CisKK21heHgxOTEgbWF4ICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK21heHgxOTIgbWF4ICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK21heHgxOTMgbWF4IC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK21heHgxOTQgbWF4ICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KK21heHgxOTUgbWF4ICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK21heHgxOTYgbWF4IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK21heHgxOTcgbWF4ICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK21heHgxOTggbWF4ICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK21heHgxOTkgbWF4ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcm91bmRpbmcgY2hlY2tzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA5CittYXh4MjAxIG1heCAxMjM0NTY3ODAwMCAxICAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCittYXh4MjAyIG1heCAxIDEyMzQ1Njc4MDAwICAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCittYXh4MjAzIG1heCAxMjM0NTY3ODAwICAxICAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK21heHgyMDQgbWF4IDEgMTIzNDU2NzgwMCAgIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAorbWF4eDIwNSBtYXggMTIzNDU2Nzg5MCAgMSAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCittYXh4MjA2IG1heCAxIDEyMzQ1Njc4OTAgICAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK21heHgyMDcgbWF4IDEyMzQ1Njc4OTEgIDEgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCittYXh4MjA4IG1heCAxIDEyMzQ1Njc4OTEgICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorbWF4eDIwOSBtYXggMTIzNDU2Nzg5MDEgMSAgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCittYXh4MjEwIG1heCAxIDEyMzQ1Njc4OTAxICAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK21heHgyMTEgbWF4IDEyMzQ1Njc4OTYgIDEgIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCittYXh4MjEyIG1heCAxIDEyMzQ1Njc4OTYgICAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorbWF4eDIxMyBtYXggLTEyMzQ1Njc4OTEgIDEgLT4gMQorbWF4eDIxNCBtYXggMSAtMTIzNDU2Nzg5MSAgLT4gMQorbWF4eDIxNSBtYXggLTEyMzQ1Njc4OTAxIDEgLT4gMQorbWF4eDIxNiBtYXggMSAtMTIzNDU2Nzg5MDEgLT4gMQorbWF4eDIxNyBtYXggLTEyMzQ1Njc4OTYgIDEgLT4gMQorbWF4eDIxOCBtYXggMSAtMTIzNDU2Nzg5NiAgLT4gMQorCitwcmVjaXNpb246IDE1CittYXh4MjIxIG1heCAxMjM0NTY3ODAwMCAxICAtPiAxMjM0NTY3ODAwMAorbWF4eDIyMiBtYXggMSAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDAKK21heHgyMjMgbWF4IDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDAKK21heHgyMjQgbWF4IDEgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDAKK21heHgyMjUgbWF4IDEyMzQ1Njc4OTAgIDEgIC0+IDEyMzQ1Njc4OTAKK21heHgyMjYgbWF4IDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTAKK21heHgyMjcgbWF4IDEyMzQ1Njc4OTEgIDEgIC0+IDEyMzQ1Njc4OTEKK21heHgyMjggbWF4IDEgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTEKK21heHgyMjkgbWF4IDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxCittYXh4MjMwIG1heCAxIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQorbWF4eDIzMSBtYXggMTIzNDU2Nzg5NiAgMSAgLT4gMTIzNDU2Nzg5NgorbWF4eDIzMiBtYXggMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5NgorbWF4eDIzMyBtYXggLTEyMzQ1Njc4OTEgIDEgLT4gMQorbWF4eDIzNCBtYXggMSAtMTIzNDU2Nzg5MSAgLT4gMQorbWF4eDIzNSBtYXggLTEyMzQ1Njc4OTAxIDEgLT4gMQorbWF4eDIzNiBtYXggMSAtMTIzNDU2Nzg5MDEgLT4gMQorbWF4eDIzNyBtYXggLTEyMzQ1Njc4OTYgIDEgLT4gMQorbWF4eDIzOCBtYXggMSAtMTIzNDU2Nzg5NiAgLT4gMQorCistLSBmcm9tIGV4YW1wbGVzCittYXh4MjgwIG1heCAnMycgICAnMicgIC0+ICAnMycKK21heHgyODEgbWF4ICctMTAnICczJyAgLT4gICczJworbWF4eDI4MiBtYXggJzEuMCcgJzEnICAtPiAgJzEnCittYXh4MjgzIG1heCAnMScgJzEuMCcgIC0+ICAnMScKK21heHgyODQgbWF4ICc3JyAnTmFOJyAgLT4gICc3JworCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uLgorbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK21heHgzMzAgbWF4ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAtPiAgOUUrOTk5OTk5OTk5CittYXh4MzMxIG1heCA5RSs5OTk5OTk5OTkgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDlFKzk5OTk5OTk5OQorbWF4eDMzMiBtYXggKzAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+ICAwLjEwMAorbWF4eDMzMyBtYXggOUUtOTk5OTk5OTk5ICswLjEwMCAgICAgICAgICAgICAgIC0+ICAwLjEwMAorbWF4eDMzNSBtYXggLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+ICA5RSs5OTk5OTk5OTkKK21heHgzMzYgbWF4IDlFKzk5OTk5OTk5OSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgOUUrOTk5OTk5OTk5CittYXh4MzM3IG1heCAtMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gIDlFLTk5OTk5OTk5OQorbWF4eDMzOCBtYXggOUUtOTk5OTk5OTk5IC0wLjEwMCAgICAgICAgICAgICAgIC0+ICA5RS05OTk5OTk5OTkKKworbWF4eDMzOSBtYXggMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMSAgIC0+ICAxRS00MDAwMDAwMDEKK21heHgzNDAgbWF4IDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDAgICAtPiAgMUUtNDAwMDAwMDAwCittYXh4MzQxIG1heCAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDAwICAgLT4gIDFFLTQwMDAwMDAwMAorbWF4eDM0MiBtYXggOWUtOTk5OTk5OTk4IDAuMDEgICAgICAgICAgIC0+ICAwLjAxCittYXh4MzQzIG1heCA5ZS05OTk5OTk5OTggMC4xICAgICAgICAgICAgLT4gIDAuMQorbWF4eDM0NCBtYXggMC4wMSA5ZS05OTk5OTk5OTggICAgICAgICAgIC0+ICAwLjAxCittYXh4MzQ1IG1heCAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMSAgICAgLT4gIDFFKzU5OTk5OTk5OQorbWF4eDM0NiBtYXggMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDAgICAgIC0+ICAxRSs1OTk5OTk5OTkKK21heHgzNDcgbWF4IDFlNjAwMDAwMDAwIDFlNDAwMDAwMDAwICAgICAtPiAgMUUrNjAwMDAwMDAwCittYXh4MzQ4IG1heCA5ZTk5OTk5OTk5OCAxMDAgICAgICAgICAgICAgLT4gIDlFKzk5OTk5OTk5OAorbWF4eDM0OSBtYXggOWU5OTk5OTk5OTggMTAgICAgICAgICAgICAgIC0+ICA5RSs5OTk5OTk5OTgKK21heHgzNTAgbWF4IDEwMCAgOWU5OTk5OTk5OTggICAgICAgICAgICAtPiAgOUUrOTk5OTk5OTk4CistLSBzaWducworbWF4eDM1MSBtYXggIDFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+ICAxRSs3Nzc3Nzc3NzcKK21heHgzNTIgbWF4ICAxZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAgMUUrNzc3Nzc3Nzc3CittYXh4MzUzIG1heCAtMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gIDFFKzQxMTExMTExMQorbWF4eDM1NCBtYXggLTFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC0xRSs0MTExMTExMTEKK21heHgzNTUgbWF4ICAxZS03Nzc3Nzc3NzcgIDFlLTQxMTExMTExMSAtPiAgMUUtNDExMTExMTExCittYXh4MzU2IG1heCAgMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gIDFFLTc3Nzc3Nzc3NworbWF4eDM1NyBtYXggLTFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+ICAxRS00MTExMTExMTEKK21heHgzNTggbWF4IC0xZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAtMUUtNzc3Nzc3Nzc3CisKKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQorbWF4eDQwMSBtYXggIEluZiAgICAxLjEgICAgIC0+ICBJbmZpbml0eQorbWF4eDQwMiBtYXggIDEuMSAgICAxICAgICAgIC0+ICAxLjEKK21heHg0MDMgbWF4ICAxICAgICAgMS4wICAgICAtPiAgMQorbWF4eDQwNCBtYXggIDEuMCAgICAwLjEgICAgIC0+ICAxLjAKK21heHg0MDUgbWF4ICAwLjEgICAgMC4xMCAgICAtPiAgMC4xCittYXh4NDA2IG1heCAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAKK21heHg0MDcgbWF4ICAwLjEwICAgMCAgICAgICAtPiAgMC4xMAorbWF4eDQwOCBtYXggIDAgICAgICAwLjAgICAgIC0+ICAwCittYXh4NDA5IG1heCAgMC4wICAgLTAgICAgICAgLT4gIDAuMAorbWF4eDQxMCBtYXggIDAuMCAgIC0wLjAgICAgIC0+ICAwLjAKK21heHg0MTEgbWF4ICAwLjAwICAtMC4wICAgICAtPiAgMC4wMAorbWF4eDQxMiBtYXggIDAuMCAgIC0wLjAwICAgIC0+ICAwLjAKK21heHg0MTMgbWF4ICAwICAgICAtMC4wICAgICAtPiAgMAorbWF4eDQxNCBtYXggIDAgICAgIC0wICAgICAgIC0+ICAwCittYXh4NDE1IG1heCAtMC4wICAgLTAgICAgICAgLT4gLTAuMAorbWF4eDQxNiBtYXggLTAgICAgIC0wLjEwMCAgIC0+IC0wCittYXh4NDE3IG1heCAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwCittYXh4NDE4IG1heCAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTAKK21heHg0MTkgbWF4IC0wLjEgICAtMS4wICAgICAtPiAtMC4xCittYXh4NDIwIG1heCAtMS4wICAgLTEgICAgICAgLT4gLTEuMAorbWF4eDQyMSBtYXggLTEgICAgIC0xLjEgICAgIC0+IC0xCittYXh4NDIzIG1heCAtMS4xICAgLUluZiAgICAgLT4gLTEuMQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkCittYXh4NDMxIG1heCAgMS4xICAgIEluZiAgICAgLT4gIEluZmluaXR5CittYXh4NDMyIG1heCAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQorbWF4eDQzMyBtYXggIDEuMCAgICAxICAgICAgIC0+ICAxCittYXh4NDM0IG1heCAgMC4xICAgIDEuMCAgICAgLT4gIDEuMAorbWF4eDQzNSBtYXggIDAuMTAgICAwLjEgICAgIC0+ICAwLjEKK21heHg0MzYgbWF4ICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMAorbWF4eDQzNyBtYXggIDAgICAgICAwLjEwICAgIC0+ICAwLjEwCittYXh4NDM4IG1heCAgMC4wICAgIDAgICAgICAgLT4gIDAKK21heHg0MzkgbWF4IC0wICAgICAgMC4wICAgICAtPiAgMC4wCittYXh4NDQwIG1heCAtMC4wICAgIDAuMCAgICAgLT4gIDAuMAorbWF4eDQ0MSBtYXggLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwCittYXh4NDQyIG1heCAtMC4wMCAgIDAuMCAgICAgLT4gIDAuMAorbWF4eDQ0MyBtYXggLTAuMCAgICAwICAgICAgIC0+ICAwCittYXh4NDQ0IG1heCAtMCAgICAgIDAgICAgICAgLT4gIDAKK21heHg0NDUgbWF4IC0wICAgICAtMC4wICAgICAtPiAtMC4wCittYXh4NDQ2IG1heCAtMC4xMDAgLTAgICAgICAgLT4gLTAKK21heHg0NDcgbWF4IC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMDAKK21heHg0NDggbWF4IC0wLjEgICAtMC4xMCAgICAtPiAtMC4xMAorbWF4eDQ0OSBtYXggLTEuMCAgIC0wLjEgICAgIC0+IC0wLjEKK21heHg0NTAgbWF4IC0xICAgICAtMS4wICAgICAtPiAtMS4wCittYXh4NDUxIG1heCAtMS4xICAgLTEgICAgICAgLT4gLTEKK21heHg0NTMgbWF4IC1JbmYgICAtMS4xICAgICAtPiAtMS4xCistLSBsYXJnaWVzCittYXh4NDYwIG1heCAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK21heHg0NjEgbWF4ICAxRSszICAgMTAwMCAgICAtPiAgMUUrMworbWF4eDQ2MiBtYXggIDEwMDAgIC0xRSszICAgIC0+ICAxMDAwCittYXh4NDYzIG1heCAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMKK21heHg0NjQgbWF4IC0xMDAwICAgMUUrMyAgICAtPiAgMUUrMworbWF4eDQ2NSBtYXggLTFFKzMgICAxMDAwICAgIC0+ICAxMDAwCittYXh4NDY2IG1heCAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDAKK21heHg0NjcgbWF4IC0xRSszICAtMTAwMCAgICAtPiAtMTAwMAorCistLSByb3VuZGluZyAocmVzdWx0cyB0cmVhdGVkIGFzIHRob3VnaCBwbHVzKQorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3ByZWNpc2lvbjogMworCittYXh4NDcwIG1heCAgMSAgICAgIC41ICAgICAtPiAgMQorbWF4eDQ3MSBtYXggIDEwICAgICA1ICAgICAgLT4gIDEwCittYXh4NDcyIG1heCAgMTAwICAgIDUwICAgICAtPiAgMTAwCittYXh4NDczIG1heCAgMTAwMCAgIDUwMCAgICAtPiAgMS4wMEUrMyBSb3VuZGVkCittYXh4NDc0IG1heCAgMTAwMDAgIDUwMDAgICAtPiAgMS4wMEUrNCBSb3VuZGVkCittYXh4NDc1IG1heCAgNiAgICAgIC41ICAgICAtPiAgNgorbWF4eDQ3NiBtYXggIDY2ICAgICA1ICAgICAgLT4gIDY2CittYXh4NDc3IG1heCAgNjY2ICAgIDUwICAgICAtPiAgNjY2CittYXh4NDc4IG1heCAgNjY2NiAgIDUwMCAgICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QKK21heHg0NzkgbWF4ICA2NjY2NiAgNTAwMCAgIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdAorbWF4eDQ4MCBtYXggIDMzMzMzICA1MDAwICAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0CittYXh4NDgxIG1heCAgLjUgICAgIDEgICAgICAtPiAgMQorbWF4eDQ4MiBtYXggIC41ICAgICAxMCAgICAgLT4gIDEwCittYXh4NDgzIG1heCAgLjUgICAgIDEwMCAgICAtPiAgMTAwCittYXh4NDg0IG1heCAgLjUgICAgIDEwMDAgICAtPiAgMS4wMEUrMyBSb3VuZGVkCittYXh4NDg1IG1heCAgLjUgICAgIDEwMDAwICAtPiAgMS4wMEUrNCBSb3VuZGVkCittYXh4NDg2IG1heCAgLjUgICAgIDYgICAgICAtPiAgNgorbWF4eDQ4NyBtYXggIC41ICAgICA2NiAgICAgLT4gIDY2CittYXh4NDg4IG1heCAgLjUgICAgIDY2NiAgICAtPiAgNjY2CittYXh4NDg5IG1heCAgLjUgICAgIDY2NjYgICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QKK21heHg0OTAgbWF4ICAuNSAgICAgNjY2NjYgIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdAorbWF4eDQ5MSBtYXggIC41ICAgICAzMzMzMyAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0CisKKy0tIG92ZXJmbG93IHRlc3RzCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiAzCittYXh4NTAwIG1heCA5Ljk5OUUrOTk5OTk5OTk5ICAwIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK21heHg1MDEgbWF4IC05Ljk5OUUrOTk5OTk5OTk5IDAgLT4gIDAKKworLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93CitwcmVjaXNpb246IDMKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CittYXh4NTEwIG1heCAgMS4wMEUtOTk5ICAgICAgIDAgIC0+ICAgMS4wMEUtOTk5CittYXh4NTExIG1heCAgMC4xRS05OTkgICAgICAgIDAgIC0+ICAgMUUtMTAwMCAgIFN1Ym5vcm1hbAorbWF4eDUxMiBtYXggIDAuMTBFLTk5OSAgICAgICAwICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwKK21heHg1MTMgbWF4ICAwLjEwMEUtOTk5ICAgICAgMCAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQKK21heHg1MTQgbWF4ICAwLjAxRS05OTkgICAgICAgMCAgLT4gICAxRS0xMDAxICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gTm1pbgorbWF4eDUxNSBtYXggIDAuOTk5RS05OTkgICAgICAwICAtPiAgIDEuMDBFLTk5OSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbWF4eDUxNiBtYXggIDAuMDk5RS05OTkgICAgICAwICAtPiAgIDEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbWF4eDUxNyBtYXggIDAuMDA5RS05OTkgICAgICAwICAtPiAgIDFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbWF4eDUxOCBtYXggIDAuMDAxRS05OTkgICAgICAwICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCittYXh4NTE5IG1heCAgMC4wMDA5RS05OTkgICAgIDAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK21heHg1MjAgbWF4ICAwLjAwMDFFLTk5OSAgICAgMCAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorCittYXh4NTMwIG1heCAtMS4wMEUtOTk5ICAgICAgIDAgIC0+ICAgMAorbWF4eDUzMSBtYXggLTAuMUUtOTk5ICAgICAgICAwICAtPiAgIDAKK21heHg1MzIgbWF4IC0wLjEwRS05OTkgICAgICAgMCAgLT4gICAwCittYXh4NTMzIG1heCAtMC4xMDBFLTk5OSAgICAgIDAgIC0+ICAgMAorbWF4eDUzNCBtYXggLTAuMDFFLTk5OSAgICAgICAwICAtPiAgIDAKK21heHg1MzUgbWF4IC0wLjk5OUUtOTk5ICAgICAgMCAgLT4gICAwCittYXh4NTM2IG1heCAtMC4wOTlFLTk5OSAgICAgIDAgIC0+ICAgMAorbWF4eDUzNyBtYXggLTAuMDA5RS05OTkgICAgICAwICAtPiAgIDAKK21heHg1MzggbWF4IC0wLjAwMUUtOTk5ICAgICAgMCAgLT4gICAwCittYXh4NTM5IG1heCAtMC4wMDA5RS05OTkgICAgIDAgIC0+ICAgMAorbWF4eDU0MCBtYXggLTAuMDAwMUUtOTk5ICAgICAwICAtPiAgIDAKKworLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuCitwcmVjaXNpb246IDkKK21heHg1NTEgbWF4ICAgICAgMS4wICAgICAgIDAuMSAgLT4gMS4wCittYXh4NTUyIG1heCAgICAgIDAuMSAgICAgICAxLjAgIC0+IDEuMAorbWF4eDU1MyBtYXggICAgIDEwLjAgICAgICAgMC4xICAtPiAxMC4wCittYXh4NTU0IG1heCAgICAgIDAuMSAgICAgIDEwLjAgIC0+IDEwLjAKK21heHg1NTUgbWF4ICAgICAgMTAwICAgICAgIDEuMCAgLT4gMTAwCittYXh4NTU2IG1heCAgICAgIDEuMCAgICAgICAxMDAgIC0+IDEwMAorbWF4eDU1NyBtYXggICAgIDEwMDAgICAgICAxMC4wICAtPiAxMDAwCittYXh4NTU4IG1heCAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwMDAKK21heHg1NTkgbWF4ICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMTAwMDAKK21heHg1NjAgbWF4ICAgIDEwMC4wICAgICAxMDAwMCAgLT4gMTAwMDAKK21heHg2NjEgbWF4ICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMDAwCittYXh4NjYyIG1heCAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IDEwMDAwMAorbWF4eDY2MyBtYXggIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxMDAwMDAwCittYXh4NjY0IG1heCAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwMDAKKworLS0gcGF5bG9hZCBkZWNhcGl0YXRlCitwcmVjaXNpb246IDUKK21heHg2NzAgbWF4ICAgICAgMTEgLXNOYU4xMjM0NTY3ODkwMSAtPiAtTmFONzg5MDEgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE51bGwgdGVzdHMKK21heHg5MDAgbWF4IDEwICAjICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK21heHg5MDEgbWF4ICAjIDEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWF4bWFnLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21heG1hZy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NWU5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21heG1hZy5kZWNUZXN0CkBAIC0wLDAgKzEsNDA0IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIG1heG1hZy5kZWNUZXN0IC0tIGRlY2ltYWwgbWF4aW11bSBieSBtYWduaXR1ZGUgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gc2FuaXR5IGNoZWNrcworbXhneDAwMSBtYXhtYWcgIC0yICAtMiAgLT4gLTIKK214Z3gwMDIgbWF4bWFnICAtMiAgLTEgIC0+IC0yCitteGd4MDAzIG1heG1hZyAgLTIgICAwICAtPiAtMgorbXhneDAwNCBtYXhtYWcgIC0yICAgMSAgLT4gLTIKK214Z3gwMDUgbWF4bWFnICAtMiAgIDIgIC0+ICAyCitteGd4MDA2IG1heG1hZyAgLTEgIC0yICAtPiAtMgorbXhneDAwNyBtYXhtYWcgIC0xICAtMSAgLT4gLTEKK214Z3gwMDggbWF4bWFnICAtMSAgIDAgIC0+IC0xCitteGd4MDA5IG1heG1hZyAgLTEgICAxICAtPiAgMQorbXhneDAxMCBtYXhtYWcgIC0xICAgMiAgLT4gIDIKK214Z3gwMTEgbWF4bWFnICAgMCAgLTIgIC0+IC0yCitteGd4MDEyIG1heG1hZyAgIDAgIC0xICAtPiAtMQorbXhneDAxMyBtYXhtYWcgICAwICAgMCAgLT4gIDAKK214Z3gwMTQgbWF4bWFnICAgMCAgIDEgIC0+ICAxCitteGd4MDE1IG1heG1hZyAgIDAgICAyICAtPiAgMgorbXhneDAxNiBtYXhtYWcgICAxICAtMiAgLT4gLTIKK214Z3gwMTcgbWF4bWFnICAgMSAgLTEgIC0+ICAxCitteGd4MDE4IG1heG1hZyAgIDEgICAwICAtPiAgMQorbXhneDAxOSBtYXhtYWcgICAxICAgMSAgLT4gIDEKK214Z3gwMjAgbWF4bWFnICAgMSAgIDIgIC0+ICAyCitteGd4MDIxIG1heG1hZyAgIDIgIC0yICAtPiAgMgorbXhneDAyMiBtYXhtYWcgICAyICAtMSAgLT4gIDIKK214Z3gwMjMgbWF4bWFnICAgMiAgIDAgIC0+ICAyCitteGd4MDI1IG1heG1hZyAgIDIgICAxICAtPiAgMgorbXhneDAyNiBtYXhtYWcgICAyICAgMiAgLT4gIDIKKworLS0gZXh0ZW5kZWQgemVyb3MKK214Z3gwMzAgbWF4bWFnICAgMCAgICAgMCAgIC0+ICAwCitteGd4MDMxIG1heG1hZyAgIDAgICAgLTAgICAtPiAgMAorbXhneDAzMiBtYXhtYWcgICAwICAgIC0wLjAgLT4gIDAKK214Z3gwMzMgbWF4bWFnICAgMCAgICAgMC4wIC0+ICAwCitteGd4MDM0IG1heG1hZyAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3NlbgorbXhneDAzNSBtYXhtYWcgIC0wICAgIC0wICAgLT4gLTAKK214Z3gwMzYgbWF4bWFnICAtMCAgICAtMC4wIC0+IC0wLjAKK214Z3gwMzcgbWF4bWFnICAtMCAgICAgMC4wIC0+ICAwLjAKK214Z3gwMzggbWF4bWFnICAgMC4wICAgMCAgIC0+ICAwCitteGd4MDM5IG1heG1hZyAgIDAuMCAgLTAgICAtPiAgMC4wCitteGd4MDQwIG1heG1hZyAgIDAuMCAgLTAuMCAtPiAgMC4wCitteGd4MDQxIG1heG1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wCitteGd4MDQyIG1heG1hZyAgLTAuMCAgIDAgICAtPiAgMAorbXhneDA0MyBtYXhtYWcgIC0wLjAgIC0wICAgLT4gLTAuMAorbXhneDA0NCBtYXhtYWcgIC0wLjAgIC0wLjAgLT4gLTAuMAorbXhneDA0NSBtYXhtYWcgIC0wLjAgICAwLjAgLT4gIDAuMAorCitteGd4MDUwIG1heG1hZyAgLTBFMSAgIDBFMSAtPiAgMEUrMQorbXhneDA1MSBtYXhtYWcgIC0wRTIgICAwRTIgLT4gIDBFKzIKK214Z3gwNTIgbWF4bWFnICAtMEUyICAgMEUxIC0+ICAwRSsxCitteGd4MDUzIG1heG1hZyAgLTBFMSAgIDBFMiAtPiAgMEUrMgorbXhneDA1NCBtYXhtYWcgICAwRTEgIC0wRTEgLT4gIDBFKzEKK214Z3gwNTUgbWF4bWFnICAgMEUyICAtMEUyIC0+ICAwRSsyCitteGd4MDU2IG1heG1hZyAgIDBFMiAgLTBFMSAtPiAgMEUrMgorbXhneDA1NyBtYXhtYWcgICAwRTEgIC0wRTIgLT4gIDBFKzEKKworbXhneDA1OCBtYXhtYWcgICAwRTEgICAwRTEgLT4gIDBFKzEKK214Z3gwNTkgbWF4bWFnICAgMEUyICAgMEUyIC0+ICAwRSsyCitteGd4MDYwIG1heG1hZyAgIDBFMiAgIDBFMSAtPiAgMEUrMgorbXhneDA2MSBtYXhtYWcgICAwRTEgICAwRTIgLT4gIDBFKzIKK214Z3gwNjIgbWF4bWFnICAtMEUxICAtMEUxIC0+IC0wRSsxCitteGd4MDYzIG1heG1hZyAgLTBFMiAgLTBFMiAtPiAtMEUrMgorbXhneDA2NCBtYXhtYWcgIC0wRTIgIC0wRTEgLT4gLTBFKzEKK214Z3gwNjUgbWF4bWFnICAtMEUxICAtMEUyIC0+IC0wRSsxCisKKy0tIFNwZWNpYWxzCitwcmVjaXNpb246IDkKK214Z3gwOTAgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK214Z3gwOTEgbWF4bWFnICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK214Z3gwOTIgbWF4bWFnICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKK214Z3gwOTMgbWF4bWFnICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK214Z3gwOTQgbWF4bWFnICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKK214Z3gwOTUgbWF4bWFnICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK214Z3gwOTYgbWF4bWFnICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK214Z3gwOTcgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gwOTggbWF4bWFnIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gwOTkgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gxMDAgbWF4bWFnIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gxMDEgbWF4bWFnIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gxMDIgbWF4bWFnICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gxMDMgbWF4bWFnICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gxMDQgbWF4bWFnICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKK214Z3gxMDUgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworbXhneDEyMCBtYXhtYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEyMSBtYXhtYWcgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQorbXhneDEyMiBtYXhtYWcgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorbXhneDEyMyBtYXhtYWcgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQorbXhneDEyNCBtYXhtYWcgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQorbXhneDEyNSBtYXhtYWcgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorbXhneDEyNiBtYXhtYWcgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorbXhneDEyNyBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQorbXhneDEyOCBtYXhtYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEyOSBtYXhtYWcgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEzMCBtYXhtYWcgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEzMSBtYXhtYWcgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEzMiBtYXhtYWcgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEzMyBtYXhtYWcgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEzNCBtYXhtYWcgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDEzNSBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKK214Z3gxNDEgbWF4bWFnICBOYU4gLUluZiAgICAtPiAtSW5maW5pdHkKK214Z3gxNDIgbWF4bWFnICBOYU4gLTEwMDAgICAtPiAtMTAwMAorbXhneDE0MyBtYXhtYWcgIE5hTiAtMSAgICAgIC0+IC0xCitteGd4MTQ0IG1heG1hZyAgTmFOIC0wICAgICAgLT4gLTAKK214Z3gxNDUgbWF4bWFnICBOYU4gIDAgICAgICAtPiAgMAorbXhneDE0NiBtYXhtYWcgIE5hTiAgMSAgICAgIC0+ICAxCitteGd4MTQ3IG1heG1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDAKK214Z3gxNDggbWF4bWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKK214Z3gxNDkgbWF4bWFnICBOYU4gIE5hTiAgICAtPiAgTmFOCitteGd4MTUwIG1heG1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5CitteGd4MTUxIG1heG1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDAKK214Z3gxNTIgbWF4bWFnIC0xICAgIE5hTiAgICAtPiAtMQorbXhneDE1MyBtYXhtYWcgLTAgICAgTmFOICAgIC0+IC0wCitteGd4MTU0IG1heG1hZyAgMCAgICBOYU4gICAgLT4gIDAKK214Z3gxNTUgbWF4bWFnICAxICAgIE5hTiAgICAtPiAgMQorbXhneDE1NiBtYXhtYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwCitteGd4MTU3IG1heG1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5CisKK214Z3gxNjEgbWF4bWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE2MiBtYXhtYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTYzIG1heG1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNjQgbWF4bWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE2NSBtYXhtYWcgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTY2IG1heG1hZyAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNjcgbWF4bWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE2OCBtYXhtYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTY5IG1heG1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNzAgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE3MSBtYXhtYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTcyIG1heG1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNzMgbWF4bWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE3NCBtYXhtYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTc1IG1heG1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNzYgbWF4bWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXhneDE3NyBtYXhtYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTc4IG1heG1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK214Z3gxNzkgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitteGd4MTgxIG1heG1hZyAgTmFOOSAgLUluZiAgIC0+IC1JbmZpbml0eQorbXhneDE4MiBtYXhtYWcgIE5hTjggICAgIDkgICAtPiAgOQorbXhneDE4MyBtYXhtYWcgLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkKKworbXhneDE4NCBtYXhtYWcgLU5hTjEgICBOYU4xMSAtPiAtTmFOMQorbXhneDE4NSBtYXhtYWcgIE5hTjIgICBOYU4xMiAtPiAgTmFOMgorbXhneDE4NiBtYXhtYWcgLU5hTjEzIC1OYU43ICAtPiAtTmFOMTMKK214Z3gxODcgbWF4bWFnICBOYU4xNCAtTmFONSAgLT4gIE5hTjE0CisKK214Z3gxODggbWF4bWFnIC1JbmYgICAgTmFONCAgLT4gLUluZmluaXR5CitteGd4MTg5IG1heG1hZyAtOSAgICAgLU5hTjMgIC0+IC05CitteGd4MTkwIG1heG1hZyAgSW5mICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCitteGd4MTkxIG1heG1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitteGd4MTkyIG1heG1hZyAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCitteGd4MTkzIG1heG1hZyAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitteGd4MTk0IG1heG1hZyAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCitteGd4MTk1IG1heG1hZyAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTk2IG1heG1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTk3IG1heG1hZyAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTk4IG1heG1hZyAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCitteGd4MTk5IG1heG1hZyAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHJvdW5kaW5nIGNoZWNrcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorbXhneDIwMSBtYXhtYWcgMTIzNDU2NzgwMDAgMSAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAorbXhneDIwMiBtYXhtYWcgMSAxMjM0NTY3ODAwMCAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAorbXhneDIwMyBtYXhtYWcgMTIzNDU2NzgwMCAgMSAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCitteGd4MjA0IG1heG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK214Z3gyMDUgbWF4bWFnIDEyMzQ1Njc4OTAgIDEgIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAorbXhneDIwNiBtYXhtYWcgMSAxMjM0NTY3ODkwICAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitteGd4MjA3IG1heG1hZyAxMjM0NTY3ODkxICAxICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorbXhneDIwOCBtYXhtYWcgMSAxMjM0NTY3ODkxICAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK214Z3gyMDkgbWF4bWFnIDEyMzQ1Njc4OTAxIDEgIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorbXhneDIxMCBtYXhtYWcgMSAxMjM0NTY3ODkwMSAgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCitteGd4MjExIG1heG1hZyAxMjM0NTY3ODk2ICAxICAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorbXhneDIxMiBtYXhtYWcgMSAxMjM0NTY3ODk2ICAgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKK214Z3gyMTMgbWF4bWFnIC0xMjM0NTY3ODkxICAxIC0+IC0xLjIzNDU2Nzg5RSs5ICAgSW5leGFjdCBSb3VuZGVkCitteGd4MjE0IG1heG1hZyAxIC0xMjM0NTY3ODkxICAtPiAtMS4yMzQ1Njc4OUUrOSAgIEluZXhhY3QgUm91bmRlZAorbXhneDIxNSBtYXhtYWcgLTEyMzQ1Njc4OTAxIDEgLT4gLTEuMjM0NTY3ODlFKzEwICBJbmV4YWN0IFJvdW5kZWQKK214Z3gyMTYgbWF4bWFnIDEgLTEyMzQ1Njc4OTAxIC0+IC0xLjIzNDU2Nzg5RSsxMCAgSW5leGFjdCBSb3VuZGVkCitteGd4MjE3IG1heG1hZyAtMTIzNDU2Nzg5NiAgMSAtPiAtMS4yMzQ1Njc5MEUrOSAgIEluZXhhY3QgUm91bmRlZAorbXhneDIxOCBtYXhtYWcgMSAtMTIzNDU2Nzg5NiAgLT4gLTEuMjM0NTY3OTBFKzkgICBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiAxNQorbXhneDIyMSBtYXhtYWcgMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDAKK214Z3gyMjIgbWF4bWFnIDEgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwCitteGd4MjIzIG1heG1hZyAxMjM0NTY3ODAwICAxICAtPiAxMjM0NTY3ODAwCitteGd4MjI0IG1heG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwCitteGd4MjI1IG1heG1hZyAxMjM0NTY3ODkwICAxICAtPiAxMjM0NTY3ODkwCitteGd4MjI2IG1heG1hZyAxIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwCitteGd4MjI3IG1heG1hZyAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxCitteGd4MjI4IG1heG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxCitteGd4MjI5IG1heG1hZyAxMjM0NTY3ODkwMSAxICAtPiAxMjM0NTY3ODkwMQorbXhneDIzMCBtYXhtYWcgMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDEKK214Z3gyMzEgbWF4bWFnIDEyMzQ1Njc4OTYgIDEgIC0+IDEyMzQ1Njc4OTYKK214Z3gyMzIgbWF4bWFnIDEgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKK214Z3gyMzMgbWF4bWFnIC0xMjM0NTY3ODkxICAxIC0+IC0xMjM0NTY3ODkxCitteGd4MjM0IG1heG1hZyAxIC0xMjM0NTY3ODkxICAtPiAtMTIzNDU2Nzg5MQorbXhneDIzNSBtYXhtYWcgLTEyMzQ1Njc4OTAxIDEgLT4gLTEyMzQ1Njc4OTAxCitteGd4MjM2IG1heG1hZyAxIC0xMjM0NTY3ODkwMSAtPiAtMTIzNDU2Nzg5MDEKK214Z3gyMzcgbWF4bWFnIC0xMjM0NTY3ODk2ICAxIC0+IC0xMjM0NTY3ODk2CitteGd4MjM4IG1heG1hZyAxIC0xMjM0NTY3ODk2ICAtPiAtMTIzNDU2Nzg5NgorCistLSBmcm9tIGV4YW1wbGVzCitteGd4MjgwIG1heG1hZyAnMycgICAnMicgIC0+ICAnMycKK214Z3gyODEgbWF4bWFnICctMTAnICczJyAgLT4gICctMTAnCitteGd4MjgyIG1heG1hZyAnMS4wJyAnMScgIC0+ICAnMScKK214Z3gyODMgbWF4bWFnICcxJyAnMS4wJyAgLT4gICcxJworbXhneDI4NCBtYXhtYWcgJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4uCittYXhFeHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorbXhneDMzMCBtYXhtYWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+ICA5RSs5OTk5OTk5OTkKK214Z3gzMzEgbWF4bWFnIDlFKzk5OTk5OTk5OSArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgOUUrOTk5OTk5OTk5CitteGd4MzMyIG1heG1hZyArMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gIDAuMTAwCitteGd4MzMzIG1heG1hZyA5RS05OTk5OTk5OTkgKzAuMTAwICAgICAgICAgICAgICAgLT4gIDAuMTAwCitteGd4MzM1IG1heG1hZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gIDlFKzk5OTk5OTk5OQorbXhneDMzNiBtYXhtYWcgOUUrOTk5OTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICA5RSs5OTk5OTk5OTkKK214Z3gzMzcgbWF4bWFnIC0wLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAgLTAuMTAwCitteGd4MzM4IG1heG1hZyA5RS05OTk5OTk5OTkgLTAuMTAwICAgICAgICAgICAgICAgLT4gIC0wLjEwMAorCitteGd4MzM5IG1heG1hZyAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAxICAgLT4gIDFFLTQwMDAwMDAwMQorbXhneDM0MCBtYXhtYWcgMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMCAgIC0+ICAxRS00MDAwMDAwMDAKK214Z3gzNDEgbWF4bWFnIDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDAgICAtPiAgMUUtNDAwMDAwMDAwCitteGd4MzQyIG1heG1hZyA5ZS05OTk5OTk5OTggMC4wMSAgICAgICAgICAgLT4gIDAuMDEKK214Z3gzNDMgbWF4bWFnIDllLTk5OTk5OTk5OCAwLjEgICAgICAgICAgICAtPiAgMC4xCitteGd4MzQ0IG1heG1hZyAwLjAxIDllLTk5OTk5OTk5OCAgICAgICAgICAgLT4gIDAuMDEKK214Z3gzNDUgbWF4bWFnIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAxICAgICAtPiAgMUUrNTk5OTk5OTk5CitteGd4MzQ2IG1heG1hZyAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMCAgICAgLT4gIDFFKzU5OTk5OTk5OQorbXhneDM0NyBtYXhtYWcgMWU2MDAwMDAwMDAgMWU0MDAwMDAwMDAgICAgIC0+ICAxRSs2MDAwMDAwMDAKK214Z3gzNDggbWF4bWFnIDllOTk5OTk5OTk4IDEwMCAgICAgICAgICAgICAtPiAgOUUrOTk5OTk5OTk4CitteGd4MzQ5IG1heG1hZyA5ZTk5OTk5OTk5OCAxMCAgICAgICAgICAgICAgLT4gIDlFKzk5OTk5OTk5OAorbXhneDM1MCBtYXhtYWcgMTAwICA5ZTk5OTk5OTk5OCAgICAgICAgICAgIC0+ICA5RSs5OTk5OTk5OTgKKy0tIHNpZ25zCitteGd4MzUxIG1heG1hZyAgMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gIDFFKzc3Nzc3Nzc3NworbXhneDM1MiBtYXhtYWcgIDFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+ICAxRSs3Nzc3Nzc3NzcKK214Z3gzNTMgbWF4bWFnIC0xZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAtPiAtMUUrNzc3Nzc3Nzc3CitteGd4MzU0IG1heG1hZyAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTFFKzc3Nzc3Nzc3NworbXhneDM1NSBtYXhtYWcgIDFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+ICAxRS00MTExMTExMTEKK214Z3gzNTYgbWF4bWFnICAxZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAtMUUtNDExMTExMTExCitteGd4MzU3IG1heG1hZyAtMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gIDFFLTQxMTExMTExMQorbXhneDM1OCBtYXhtYWcgLTFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+IC0xRS00MTExMTExMTEKKworLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCitteGd4NDAxIG1heG1hZyAgSW5mICAgIDEuMSAgICAgLT4gIEluZmluaXR5CitteGd4NDAyIG1heG1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEuMQorbXhneDQwMyBtYXhtYWcgIDEgICAgICAxLjAgICAgIC0+ICAxCitteGd4NDA0IG1heG1hZyAgMS4wICAgIDAuMSAgICAgLT4gIDEuMAorbXhneDQwNSBtYXhtYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEKK214Z3g0MDYgbWF4bWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMAorbXhneDQwNyBtYXhtYWcgIDAuMTAgICAwICAgICAgIC0+ICAwLjEwCitteGd4NDA4IG1heG1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDAKK214Z3g0MDkgbWF4bWFnICAwLjAgICAtMCAgICAgICAtPiAgMC4wCitteGd4NDEwIG1heG1hZyAgMC4wICAgLTAuMCAgICAgLT4gIDAuMAorbXhneDQxMSBtYXhtYWcgIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwCitteGd4NDEyIG1heG1hZyAgMC4wICAgLTAuMDAgICAgLT4gIDAuMAorbXhneDQxMyBtYXhtYWcgIDAgICAgIC0wLjAgICAgIC0+ICAwCitteGd4NDE0IG1heG1hZyAgMCAgICAgLTAgICAgICAgLT4gIDAKK214Z3g0MTUgbWF4bWFnIC0wLjAgICAtMCAgICAgICAtPiAtMC4wCitteGd4NDE2IG1heG1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTAuMTAwCitteGd4NDE3IG1heG1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwCitteGd4NDE4IG1heG1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTAKK214Z3g0MTkgbWF4bWFnIC0wLjEgICAtMS4wICAgICAtPiAtMS4wCitteGd4NDIwIG1heG1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEuMAorbXhneDQyMSBtYXhtYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xLjEKK214Z3g0MjMgbWF4bWFnIC0xLjEgICAtSW5mICAgICAtPiAtSW5maW5pdHkKKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAorbXhneDQzMSBtYXhtYWcgIDEuMSAgICBJbmYgICAgIC0+ICBJbmZpbml0eQorbXhneDQzMiBtYXhtYWcgIDEgICAgICAxLjEgICAgIC0+ICAxLjEKK214Z3g0MzMgbWF4bWFnICAxLjAgICAgMSAgICAgICAtPiAgMQorbXhneDQzNCBtYXhtYWcgIDAuMSAgICAxLjAgICAgIC0+ICAxLjAKK214Z3g0MzUgbWF4bWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xCitteGd4NDM2IG1heG1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAKK214Z3g0MzcgbWF4bWFnICAwICAgICAgMC4xMCAgICAtPiAgMC4xMAorbXhneDQzOCBtYXhtYWcgIDAuMCAgICAwICAgICAgIC0+ICAwCitteGd4NDM5IG1heG1hZyAtMCAgICAgIDAuMCAgICAgLT4gIDAuMAorbXhneDQ0MCBtYXhtYWcgLTAuMCAgICAwLjAgICAgIC0+ICAwLjAKK214Z3g0NDEgbWF4bWFnIC0wLjAgICAgMC4wMCAgICAtPiAgMC4wMAorbXhneDQ0MiBtYXhtYWcgLTAuMDAgICAwLjAgICAgIC0+ICAwLjAKK214Z3g0NDMgbWF4bWFnIC0wLjAgICAgMCAgICAgICAtPiAgMAorbXhneDQ0NCBtYXhtYWcgLTAgICAgICAwICAgICAgIC0+ICAwCitteGd4NDQ1IG1heG1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTAuMAorbXhneDQ0NiBtYXhtYWcgLTAuMTAwIC0wICAgICAgIC0+IC0wLjEwMAorbXhneDQ0NyBtYXhtYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMAorbXhneDQ0OCBtYXhtYWcgLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwCitteGd4NDQ5IG1heG1hZyAtMS4wICAgLTAuMSAgICAgLT4gLTEuMAorbXhneDQ1MCBtYXhtYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xLjAKK214Z3g0NTEgbWF4bWFnIC0xLjEgICAtMSAgICAgICAtPiAtMS4xCitteGd4NDUzIG1heG1hZyAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5CistLSBsYXJnaWVzCitteGd4NDYwIG1heG1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKK214Z3g0NjEgbWF4bWFnICAxRSszICAgMTAwMCAgICAtPiAgMUUrMworbXhneDQ2MiBtYXhtYWcgIDEwMDAgIC0xRSszICAgIC0+ICAxMDAwCitteGd4NDYzIG1heG1hZyAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMKK214Z3g0NjQgbWF4bWFnIC0xMDAwICAgMUUrMyAgICAtPiAgMUUrMworbXhneDQ2NSBtYXhtYWcgLTFFKzMgICAxMDAwICAgIC0+ICAxMDAwCitteGd4NDY2IG1heG1hZyAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDAKK214Z3g0NjcgbWF4bWFnIC0xRSszICAtMTAwMCAgICAtPiAtMTAwMAorCistLSByb3VuZGluZyAocmVzdWx0cyB0cmVhdGVkIGFzIHRob3VnaCBwbHVzKQorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3ByZWNpc2lvbjogMworCitteGd4NDcwIG1heG1hZyAgMSAgICAgIC41ICAgICAtPiAgMQorbXhneDQ3MSBtYXhtYWcgIDEwICAgICA1ICAgICAgLT4gIDEwCitteGd4NDcyIG1heG1hZyAgMTAwICAgIDUwICAgICAtPiAgMTAwCitteGd4NDczIG1heG1hZyAgMTAwMCAgIDUwMCAgICAtPiAgMS4wMEUrMyBSb3VuZGVkCitteGd4NDc0IG1heG1hZyAgMTAwMDAgIDUwMDAgICAtPiAgMS4wMEUrNCBSb3VuZGVkCitteGd4NDc1IG1heG1hZyAgNiAgICAgIC41ICAgICAtPiAgNgorbXhneDQ3NiBtYXhtYWcgIDY2ICAgICA1ICAgICAgLT4gIDY2CitteGd4NDc3IG1heG1hZyAgNjY2ICAgIDUwICAgICAtPiAgNjY2CitteGd4NDc4IG1heG1hZyAgNjY2NiAgIDUwMCAgICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QKK214Z3g0NzkgbWF4bWFnICA2NjY2NiAgNTAwMCAgIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdAorbXhneDQ4MCBtYXhtYWcgIDMzMzMzICA1MDAwICAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0CitteGd4NDgxIG1heG1hZyAgLjUgICAgIDEgICAgICAtPiAgMQorbXhneDQ4MiBtYXhtYWcgIC41ICAgICAxMCAgICAgLT4gIDEwCitteGd4NDgzIG1heG1hZyAgLjUgICAgIDEwMCAgICAtPiAgMTAwCitteGd4NDg0IG1heG1hZyAgLjUgICAgIDEwMDAgICAtPiAgMS4wMEUrMyBSb3VuZGVkCitteGd4NDg1IG1heG1hZyAgLjUgICAgIDEwMDAwICAtPiAgMS4wMEUrNCBSb3VuZGVkCitteGd4NDg2IG1heG1hZyAgLjUgICAgIDYgICAgICAtPiAgNgorbXhneDQ4NyBtYXhtYWcgIC41ICAgICA2NiAgICAgLT4gIDY2CitteGd4NDg4IG1heG1hZyAgLjUgICAgIDY2NiAgICAtPiAgNjY2CitteGd4NDg5IG1heG1hZyAgLjUgICAgIDY2NjYgICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QKK214Z3g0OTAgbWF4bWFnICAuNSAgICAgNjY2NjYgIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdAorbXhneDQ5MSBtYXhtYWcgIC41ICAgICAzMzMzMyAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0CisKKy0tIG92ZXJmbG93IHRlc3RzCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiAzCitteGd4NTAwIG1heG1hZyA5Ljk5OUUrOTk5OTk5OTk5ICAwIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK214Z3g1MDEgbWF4bWFnIC05Ljk5OUUrOTk5OTk5OTk5IDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKK3ByZWNpc2lvbjogMworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK214Z3g1MTAgbWF4bWFnICAxLjAwRS05OTkgICAgICAgMCAgLT4gICAxLjAwRS05OTkKK214Z3g1MTEgbWF4bWFnICAwLjFFLTk5OSAgICAgICAgMCAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsCitteGd4NTEyIG1heG1hZyAgMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbAorbXhneDUxMyBtYXhtYWcgIDAuMTAwRS05OTkgICAgICAwICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorbXhneDUxNCBtYXhtYWcgIDAuMDFFLTk5OSAgICAgICAwICAtPiAgIDFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBObWluCitteGd4NTE1IG1heG1hZyAgMC45OTlFLTk5OSAgICAgIDAgIC0+ICAgMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitteGd4NTE2IG1heG1hZyAgMC4wOTlFLTk5OSAgICAgIDAgIC0+ICAgMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitteGd4NTE3IG1heG1hZyAgMC4wMDlFLTk5OSAgICAgIDAgIC0+ICAgMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitteGd4NTE4IG1heG1hZyAgMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK214Z3g1MTkgbWF4bWFnICAwLjAwMDlFLTk5OSAgICAgMCAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorbXhneDUyMCBtYXhtYWcgIDAuMDAwMUUtOTk5ICAgICAwICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKK214Z3g1MzAgbWF4bWFnIC0xLjAwRS05OTkgICAgICAgMCAgLT4gIC0xLjAwRS05OTkKK214Z3g1MzEgbWF4bWFnIC0wLjFFLTk5OSAgICAgICAgMCAgLT4gIC0xRS0xMDAwICAgU3Vibm9ybWFsCitteGd4NTMyIG1heG1hZyAtMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbAorbXhneDUzMyBtYXhtYWcgLTAuMTAwRS05OTkgICAgICAwICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorbXhneDUzNCBtYXhtYWcgLTAuMDFFLTk5OSAgICAgICAwICAtPiAgLTFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byAtTm1pbgorbXhneDUzNSBtYXhtYWcgLTAuOTk5RS05OTkgICAgICAwICAtPiAgLTEuMDBFLTk5OSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbXhneDUzNiBtYXhtYWcgLTAuMDk5RS05OTkgICAgICAwICAtPiAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbXhneDUzNyBtYXhtYWcgLTAuMDA5RS05OTkgICAgICAwICAtPiAgLTFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbXhneDUzOCBtYXhtYWcgLTAuMDAxRS05OTkgICAgICAwICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitteGd4NTM5IG1heG1hZyAtMC4wMDA5RS05OTkgICAgIDAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK214Z3g1NDAgbWF4bWFnIC0wLjAwMDFFLTk5OSAgICAgMCAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSBOdWxsIHRlc3RzCitteGd4OTAwIG1heG1hZyAxMCAgIyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitteGd4OTAxIG1heG1hZyAgIyAxMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKworCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21pbi5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9taW4uZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmY3NTgxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9taW4uZGVjVGVzdApAQCAtMCwwICsxLDQwNyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBtaW4uZGVjVGVzdCAtLSBkZWNpbWFsIG1pbmltdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbworLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nCisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIHNhbml0eSBjaGVja3MKK21ubXgwMDEgbWluICAtMiAgLTIgIC0+IC0yCittbm14MDAyIG1pbiAgLTIgIC0xICAtPiAtMgorbW5teDAwMyBtaW4gIC0yICAgMCAgLT4gLTIKK21ubXgwMDQgbWluICAtMiAgIDEgIC0+IC0yCittbm14MDA1IG1pbiAgLTIgICAyICAtPiAtMgorbW5teDAwNiBtaW4gIC0xICAtMiAgLT4gLTIKK21ubXgwMDcgbWluICAtMSAgLTEgIC0+IC0xCittbm14MDA4IG1pbiAgLTEgICAwICAtPiAtMQorbW5teDAwOSBtaW4gIC0xICAgMSAgLT4gLTEKK21ubXgwMTAgbWluICAtMSAgIDIgIC0+IC0xCittbm14MDExIG1pbiAgIDAgIC0yICAtPiAtMgorbW5teDAxMiBtaW4gICAwICAtMSAgLT4gLTEKK21ubXgwMTMgbWluICAgMCAgIDAgIC0+ICAwCittbm14MDE0IG1pbiAgIDAgICAxICAtPiAgMAorbW5teDAxNSBtaW4gICAwICAgMiAgLT4gIDAKK21ubXgwMTYgbWluICAgMSAgLTIgIC0+IC0yCittbm14MDE3IG1pbiAgIDEgIC0xICAtPiAtMQorbW5teDAxOCBtaW4gICAxICAgMCAgLT4gIDAKK21ubXgwMTkgbWluICAgMSAgIDEgIC0+ICAxCittbm14MDIwIG1pbiAgIDEgICAyICAtPiAgMQorbW5teDAyMSBtaW4gICAyICAtMiAgLT4gLTIKK21ubXgwMjIgbWluICAgMiAgLTEgIC0+IC0xCittbm14MDIzIG1pbiAgIDIgICAwICAtPiAgMAorbW5teDAyNSBtaW4gICAyICAgMSAgLT4gIDEKK21ubXgwMjYgbWluICAgMiAgIDIgIC0+ICAyCisKKy0tIGV4dGVuZGVkIHplcm9zCittbm14MDMwIG1pbiAgIDAgICAgIDAgICAtPiAgMAorbW5teDAzMSBtaW4gICAwICAgIC0wICAgLT4gLTAKK21ubXgwMzIgbWluICAgMCAgICAtMC4wIC0+IC0wLjAKK21ubXgwMzMgbWluICAgMCAgICAgMC4wIC0+ICAwLjAKK21ubXgwMzQgbWluICAtMCAgICAgMCAgIC0+IC0wCittbm14MDM1IG1pbiAgLTAgICAgLTAgICAtPiAtMAorbW5teDAzNiBtaW4gIC0wICAgIC0wLjAgLT4gLTAKK21ubXgwMzcgbWluICAtMCAgICAgMC4wIC0+IC0wCittbm14MDM4IG1pbiAgIDAuMCAgIDAgICAtPiAgMC4wCittbm14MDM5IG1pbiAgIDAuMCAgLTAgICAtPiAtMAorbW5teDA0MCBtaW4gICAwLjAgIC0wLjAgLT4gLTAuMAorbW5teDA0MSBtaW4gICAwLjAgICAwLjAgLT4gIDAuMAorbW5teDA0MiBtaW4gIC0wLjAgICAwICAgLT4gLTAuMAorbW5teDA0MyBtaW4gIC0wLjAgIC0wICAgLT4gLTAKK21ubXgwNDQgbWluICAtMC4wICAtMC4wIC0+IC0wLjAKK21ubXgwNDUgbWluICAtMC4wICAgMC4wIC0+IC0wLjAKKworbW5teDA0NiBtaW4gICAwRTEgIC0wRTEgLT4gLTBFKzEKK21ubXgwNDcgbWluICAtMEUxICAgMEUyIC0+IC0wRSsxCittbm14MDQ4IG1pbiAgIDBFMiAgIDBFMSAtPiAgMEUrMQorbW5teDA0OSBtaW4gICAwRTEgICAwRTIgLT4gIDBFKzEKK21ubXgwNTAgbWluICAtMEUzICAtMEUyIC0+IC0wRSszCittbm14MDUxIG1pbiAgLTBFMiAgLTBFMyAtPiAtMEUrMworCistLSBTcGVjaWFscworcHJlY2lzaW9uOiA5Cittbm14MDkwIG1pbiAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5Cittbm14MDkxIG1pbiAgSW5mICAtMTAwMCAgLT4gLTEwMDAKK21ubXgwOTIgbWluICBJbmYgIC0xICAgICAtPiAtMQorbW5teDA5MyBtaW4gIEluZiAgLTAgICAgIC0+IC0wCittbm14MDk0IG1pbiAgSW5mICAgMCAgICAgLT4gIDAKK21ubXgwOTUgbWluICBJbmYgICAxICAgICAtPiAgMQorbW5teDA5NiBtaW4gIEluZiAgIDEwMDAgIC0+ICAxMDAwCittbm14MDk3IG1pbiAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5Cittbm14MDk4IG1pbiAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK21ubXgwOTkgbWluIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK21ubXgxMDAgbWluIC0xICAgICBJbmYgICAtPiAtMQorbW5teDEwMSBtaW4gLTAgICAgIEluZiAgIC0+IC0wCittbm14MTAyIG1pbiAgMCAgICAgSW5mICAgLT4gIDAKK21ubXgxMDMgbWluICAxICAgICBJbmYgICAtPiAgMQorbW5teDEwNCBtaW4gIDEwMDAgIEluZiAgIC0+ICAxMDAwCittbm14MTA1IG1pbiAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK21ubXgxMjAgbWluIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK21ubXgxMjEgbWluIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK21ubXgxMjIgbWluIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK21ubXgxMjMgbWluIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK21ubXgxMjQgbWluIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK21ubXgxMjUgbWluIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK21ubXgxMjYgbWluIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKK21ubXgxMjcgbWluIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK21ubXgxMjggbWluIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK21ubXgxMjkgbWluIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK21ubXgxMzAgbWluIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK21ubXgxMzEgbWluIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK21ubXgxMzIgbWluICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK21ubXgxMzMgbWluICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKK21ubXgxMzQgbWluICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKK21ubXgxMzUgbWluICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKKworLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzCittbm14MTQxIG1pbiAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQorbW5teDE0MiBtaW4gIE5hTiAtMTAwMCAgIC0+ICAtMTAwMAorbW5teDE0MyBtaW4gIE5hTiAtMSAgICAgIC0+ICAtMQorbW5teDE0NCBtaW4gIE5hTiAtMCAgICAgIC0+ICAtMAorbW5teDE0NSBtaW4gIE5hTiAgMCAgICAgIC0+ICAwCittbm14MTQ2IG1pbiAgTmFOICAxICAgICAgLT4gIDEKK21ubXgxNDcgbWluICBOYU4gIDEwMDAgICAtPiAgMTAwMAorbW5teDE0OCBtaW4gIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQorbW5teDE0OSBtaW4gIE5hTiAgTmFOICAgIC0+ICBOYU4KK21ubXgxNTAgbWluIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK21ubXgxNTEgbWluIC0xMDAwIE5hTiAgICAtPiAtMTAwMAorbW5teDE1MiBtaW4gLTEgICAtTmFOICAgIC0+IC0xCittbm14MTUzIG1pbiAtMCAgICBOYU4gICAgLT4gLTAKK21ubXgxNTQgbWluICAwICAgLU5hTiAgICAtPiAgMAorbW5teDE1NSBtaW4gIDEgICAgTmFOICAgIC0+ICAxCittbm14MTU2IG1pbiAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK21ubXgxNTcgbWluICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKKworbW5teDE2MSBtaW4gIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbm14MTYyIG1pbiAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxNjMgbWluICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5teDE2NCBtaW4gIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbm14MTY1IG1pbiAtc05hTiAgMCAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxNjYgbWluIC1zTmFOICAxICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5teDE2NyBtaW4gIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbm14MTY4IG1pbiAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxNjkgbWluICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5teDE3MCBtaW4gIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbm14MTcxIG1pbiAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxNzIgbWluIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5teDE3MyBtaW4gLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbm14MTc0IG1pbiAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxNzUgbWluICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5teDE3NiBtaW4gIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbm14MTc3IG1pbiAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21ubXgxNzggbWluICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5teDE3OSBtaW4gIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK21ubXgxODEgbWluICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQorbW5teDE4MiBtaW4gLU5hTjggICAgOTk5MCAgLT4gIDk5OTAKK21ubXgxODMgbWluICBOYU43MSAgIEluZiAgIC0+ICBJbmZpbml0eQorCittbm14MTg0IG1pbiAgTmFOMSAgICBOYU41NCAtPiAgTmFOMQorbW5teDE4NSBtaW4gIE5hTjIyICAtTmFONTMgLT4gIE5hTjIyCittbm14MTg2IG1pbiAtTmFOMyAgICBOYU42ICAtPiAtTmFOMworbW5teDE4NyBtaW4gLU5hTjQ0ICAgTmFONyAgLT4gLU5hTjQ0CisKK21ubXgxODggbWluIC1JbmYgICAgIE5hTjQxIC0+IC1JbmZpbml0eQorbW5teDE4OSBtaW4gLTk5OTkgICAtTmFOMzMgLT4gLTk5OTkKK21ubXgxOTAgbWluICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCittbm14MTkxIG1pbiAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCittbm14MTkyIG1pbiAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCittbm14MTkzIG1pbiAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCittbm14MTk0IG1pbiAgc05hTjY5IHNOYU45NCAgLT4gIE5hTjY5IEludmFsaWRfb3BlcmF0aW9uCittbm14MTk1IG1pbiAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCittbm14MTk2IG1pbiAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCittbm14MTk3IG1pbiAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCittbm14MTk4IG1pbiAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCittbm14MTk5IG1pbiAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHJvdW5kaW5nIGNoZWNrcyAtLSBjaG9zZW4gaXMgcm91bmRlZCwgb3Igbm90CittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA5Cittbm14MjAxIG1pbiAtMTIzNDU2NzgwMDAgMSAgLT4gLTEuMjM0NTY3ODBFKzEwIFJvdW5kZWQKK21ubXgyMDIgbWluIDEgLTEyMzQ1Njc4MDAwICAtPiAtMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAorbW5teDIwMyBtaW4gLTEyMzQ1Njc4MDAgIDEgIC0+IC0xLjIzNDU2NzgwRSs5IFJvdW5kZWQKK21ubXgyMDQgbWluIDEgLTEyMzQ1Njc4MDAgICAtPiAtMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCittbm14MjA1IG1pbiAtMTIzNDU2Nzg5MCAgMSAgLT4gLTEuMjM0NTY3ODlFKzkgUm91bmRlZAorbW5teDIwNiBtaW4gMSAtMTIzNDU2Nzg5MCAgIC0+IC0xLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK21ubXgyMDcgbWluIC0xMjM0NTY3ODkxICAxICAtPiAtMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK21ubXgyMDggbWluIDEgLTEyMzQ1Njc4OTEgICAtPiAtMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK21ubXgyMDkgbWluIC0xMjM0NTY3ODkwMSAxICAtPiAtMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCittbm14MjEwIG1pbiAxIC0xMjM0NTY3ODkwMSAgLT4gLTEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorbW5teDIxMSBtaW4gLTEyMzQ1Njc4OTYgIDEgIC0+IC0xLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorbW5teDIxMiBtaW4gMSAtMTIzNDU2Nzg5NiAgIC0+IC0xLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorbW5teDIxMyBtaW4gMTIzNDU2Nzg5MSAgMSAgIC0+IDEKK21ubXgyMTQgbWluIDEgMTIzNDU2Nzg5MSAgICAtPiAxCittbm14MjE1IG1pbiAxMjM0NTY3ODkwMSAxICAgLT4gMQorbW5teDIxNiBtaW4gMSAxMjM0NTY3ODkwMSAgIC0+IDEKK21ubXgyMTcgbWluIDEyMzQ1Njc4OTYgIDEgICAtPiAxCittbm14MjE4IG1pbiAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCitwcmVjaXNpb246IDE1Cittbm14MjIxIG1pbiAtMTIzNDU2NzgwMDAgMSAgLT4gLTEyMzQ1Njc4MDAwCittbm14MjIyIG1pbiAxIC0xMjM0NTY3ODAwMCAgLT4gLTEyMzQ1Njc4MDAwCittbm14MjIzIG1pbiAtMTIzNDU2NzgwMCAgMSAgLT4gLTEyMzQ1Njc4MDAKK21ubXgyMjQgbWluIDEgLTEyMzQ1Njc4MDAgICAtPiAtMTIzNDU2NzgwMAorbW5teDIyNSBtaW4gLTEyMzQ1Njc4OTAgIDEgIC0+IC0xMjM0NTY3ODkwCittbm14MjI2IG1pbiAxIC0xMjM0NTY3ODkwICAgLT4gLTEyMzQ1Njc4OTAKK21ubXgyMjcgbWluIC0xMjM0NTY3ODkxICAxICAtPiAtMTIzNDU2Nzg5MQorbW5teDIyOCBtaW4gMSAtMTIzNDU2Nzg5MSAgIC0+IC0xMjM0NTY3ODkxCittbm14MjI5IG1pbiAtMTIzNDU2Nzg5MDEgMSAgLT4gLTEyMzQ1Njc4OTAxCittbm14MjMwIG1pbiAxIC0xMjM0NTY3ODkwMSAgLT4gLTEyMzQ1Njc4OTAxCittbm14MjMxIG1pbiAtMTIzNDU2Nzg5NiAgMSAgLT4gLTEyMzQ1Njc4OTYKK21ubXgyMzIgbWluIDEgLTEyMzQ1Njc4OTYgICAtPiAtMTIzNDU2Nzg5NgorbW5teDIzMyBtaW4gMTIzNDU2Nzg5MSAgMSAgIC0+IDEKK21ubXgyMzQgbWluIDEgMTIzNDU2Nzg5MSAgICAtPiAxCittbm14MjM1IG1pbiAxMjM0NTY3ODkwMSAxICAgLT4gMQorbW5teDIzNiBtaW4gMSAxMjM0NTY3ODkwMSAgIC0+IDEKK21ubXgyMzcgbWluIDEyMzQ1Njc4OTYgIDEgICAtPiAxCittbm14MjM4IG1pbiAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSBmcm9tIGV4YW1wbGVzCittbm14MjgwIG1pbiAnMycgICAnMicgIC0+ICAnMicKK21ubXgyODEgbWluICctMTAnICczJyAgLT4gICctMTAnCittbm14MjgyIG1pbiAnMS4wJyAnMScgIC0+ICAnMS4wJworbW5teDI4MyBtaW4gJzEnICcxLjAnICAtPiAgJzEuMCcKK21ubXgyODQgbWluICc3JyAnTmFOJyAgLT4gICc3JworCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIHN1Ym5vcm1hbCByZXN1bHRzIFtpbnB1dHNdIG5vdyBhbGxvd2VkCittYXhFeHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorbW5teDMzMCBtaW4gLTEuMjM0NTY3ODkwMTIzNDVFLTAgLTlFKzk5OTk5OTk5OSAtPiAtOUUrOTk5OTk5OTk5Cittbm14MzMxIG1pbiAtOUUrOTk5OTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+IC05RSs5OTk5OTk5OTkKK21ubXgzMzIgbWluIC0wLjEwMCAtOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gLTAuMTAwCittbm14MzMzIG1pbiAtOUUtOTk5OTk5OTk5IC0wLjEwMCAgICAgICAgICAgICAgIC0+IC0wLjEwMAorbW5teDMzNSBtaW4gKzEuMjM0NTY3ODkwMTIzNDVFLTAgLTlFKzk5OTk5OTk5OSAtPiAtOUUrOTk5OTk5OTk5Cittbm14MzM2IG1pbiAtOUUrOTk5OTk5OTk5IDEuMjM0NTY3ODkwMTIzNDVFLTAgIC0+IC05RSs5OTk5OTk5OTkKK21ubXgzMzcgbWluICswLjEwMCAtOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gLTlFLTk5OTk5OTk5OQorbW5teDMzOCBtaW4gLTlFLTk5OTk5OTk5OSAwLjEwMCAgICAgICAgICAgICAgICAtPiAtOUUtOTk5OTk5OTk5CisKK21ubXgzMzkgbWluIC0xZS01OTk5OTk5OTkgLTFlLTQwMDAwMDAwMSAgIC0+ICAtMUUtNDAwMDAwMDAxCittbm14MzQwIG1pbiAtMWUtNTk5OTk5OTk5IC0xZS00MDAwMDAwMDAgICAtPiAgLTFFLTQwMDAwMDAwMAorbW5teDM0MSBtaW4gLTFlLTYwMDAwMDAwMCAtMWUtNDAwMDAwMDAwICAgLT4gIC0xRS00MDAwMDAwMDAKK21ubXgzNDIgbWluIC05ZS05OTk5OTk5OTggLTAuMDEgICAgICAgICAgIC0+ICAtMC4wMQorbW5teDM0MyBtaW4gLTllLTk5OTk5OTk5OCAtMC4xICAgICAgICAgICAgLT4gIC0wLjEKK21ubXgzNDQgbWluIC0wLjAxICAgICAgICAgLTllLTk5OTk5OTk5OCAgIC0+ICAtMC4wMQorbW5teDM0NSBtaW4gLTFlNTk5OTk5OTk5ICAtMWU0MDAwMDAwMDEgICAgLT4gIC0xRSs1OTk5OTk5OTkKK21ubXgzNDYgbWluIC0xZTU5OTk5OTk5OSAgLTFlNDAwMDAwMDAwICAgIC0+ICAtMUUrNTk5OTk5OTk5Cittbm14MzQ3IG1pbiAtMWU2MDAwMDAwMDAgIC0xZTQwMDAwMDAwMCAgICAtPiAgLTFFKzYwMDAwMDAwMAorbW5teDM0OCBtaW4gLTllOTk5OTk5OTk4ICAtMTAwICAgICAgICAgICAgLT4gIC05RSs5OTk5OTk5OTgKK21ubXgzNDkgbWluIC05ZTk5OTk5OTk5OCAgLTEwICAgICAgICAgICAgIC0+ICAtOUUrOTk5OTk5OTk4Cittbm14MzUwIG1pbiAtMTAwICAgICAgICAgIC05ZTk5OTk5OTk5OCAgICAtPiAgLTlFKzk5OTk5OTk5OAorLS0gc2lnbnMKK21ubXgzNTEgbWluIC0xZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAtMUUrNzc3Nzc3Nzc3Cittbm14MzUyIG1pbiAtMWUrNzc3Nzc3Nzc3ICsxZSs0MTExMTExMTEgLT4gLTFFKzc3Nzc3Nzc3NworbW5teDM1MyBtaW4gKzFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC0xRSs0MTExMTExMTEKK21ubXgzNTQgbWluICsxZSs3Nzc3Nzc3NzcgKzFlKzQxMTExMTExMSAtPiAgMUUrNDExMTExMTExCittbm14MzU1IG1pbiAtMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gLTFFLTQxMTExMTExMQorbW5teDM1NiBtaW4gLTFlLTc3Nzc3Nzc3NyArMWUtNDExMTExMTExIC0+IC0xRS03Nzc3Nzc3NzcKK21ubXgzNTcgbWluICsxZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAtMUUtNDExMTExMTExCittbm14MzU4IG1pbiArMWUtNzc3Nzc3Nzc3ICsxZS00MTExMTExMTEgLT4gIDFFLTc3Nzc3Nzc3NworCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQorLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KK21ubXg0MDEgbWluICBJbmYgICAgMS4xICAgICAtPiAgMS4xCittbm14NDAyIG1pbiAgMS4xICAgIDEgICAgICAgLT4gIDEKK21ubXg0MDMgbWluICAxICAgICAgMS4wICAgICAtPiAgMS4wCittbm14NDA0IG1pbiAgMS4wICAgIDAuMSAgICAgLT4gIDAuMQorbW5teDQwNSBtaW4gIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwCittbm14NDA2IG1pbiAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAwCittbm14NDA3IG1pbiAgMC4xMCAgIDAgICAgICAgLT4gIDAKK21ubXg0MDggbWluICAwICAgICAgMC4wICAgICAtPiAgMC4wCittbm14NDA5IG1pbiAgMC4wICAgLTAgICAgICAgLT4gLTAKK21ubXg0MTAgbWluICAwLjAgICAtMC4wICAgICAtPiAtMC4wCittbm14NDExIG1pbiAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMAorbW5teDQxMiBtaW4gIDAuMCAgIC0wLjAwICAgIC0+IC0wLjAwCittbm14NDEzIG1pbiAgMCAgICAgLTAuMCAgICAgLT4gLTAuMAorbW5teDQxNCBtaW4gIDAgICAgIC0wICAgICAgIC0+IC0wCittbm14NDE1IG1pbiAtMC4wICAgLTAgICAgICAgLT4gLTAKK21ubXg0MTYgbWluIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDAKK21ubXg0MTcgbWluIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMAorbW5teDQxOCBtaW4gLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEKK21ubXg0MTkgbWluIC0wLjEgICAtMS4wICAgICAtPiAtMS4wCittbm14NDIwIG1pbiAtMS4wICAgLTEgICAgICAgLT4gLTEKK21ubXg0MjEgbWluIC0xICAgICAtMS4xICAgICAtPiAtMS4xCittbm14NDIzIG1pbiAtMS4xICAgLUluZiAgICAgLT4gLUluZmluaXR5CistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKK21ubXg0MzEgbWluICAxLjEgICAgSW5mICAgICAtPiAgMS4xCittbm14NDMyIG1pbiAgMSAgICAgIDEuMSAgICAgLT4gIDEKK21ubXg0MzMgbWluICAxLjAgICAgMSAgICAgICAtPiAgMS4wCittbm14NDM0IG1pbiAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQorbW5teDQzNSBtaW4gIDAuMTAgICAwLjEgICAgIC0+ICAwLjEwCittbm14NDM2IG1pbiAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAwCittbm14NDM3IG1pbiAgMCAgICAgIDAuMTAgICAgLT4gIDAKK21ubXg0MzggbWluICAwLjAgICAgMCAgICAgICAtPiAgMC4wCittbm14NDM5IG1pbiAtMCAgICAgIDAuMCAgICAgLT4gLTAKK21ubXg0NDAgbWluIC0wLjAgICAgMC4wICAgICAtPiAtMC4wCittbm14NDQxIG1pbiAtMC4wICAgIDAuMDAgICAgLT4gLTAuMAorbW5teDQ0MiBtaW4gLTAuMDAgICAwLjAgICAgIC0+IC0wLjAwCittbm14NDQzIG1pbiAtMC4wICAgIDAgICAgICAgLT4gLTAuMAorbW5teDQ0NCBtaW4gLTAgICAgICAwICAgICAgIC0+IC0wCittbm14NDQ1IG1pbiAtMCAgICAgLTAuMCAgICAgLT4gLTAKK21ubXg0NDYgbWluIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDAKK21ubXg0NDcgbWluIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMAorbW5teDQ0OCBtaW4gLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEKK21ubXg0NDkgbWluIC0xLjAgICAtMC4xICAgICAtPiAtMS4wCittbm14NDUwIG1pbiAtMSAgICAgLTEuMCAgICAgLT4gLTEKK21ubXg0NTEgbWluIC0xLjEgICAtMSAgICAgICAtPiAtMS4xCittbm14NDUzIG1pbiAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5CistLSBsYXJnaWVzCittbm14NDYwIG1pbiAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDAKK21ubXg0NjEgbWluICAxRSszICAgMTAwMCAgICAtPiAgMTAwMAorbW5teDQ2MiBtaW4gIDEwMDAgIC0xRSszICAgIC0+IC0xRSszCittbm14NDYzIG1pbiAgMUUrMyAgLTEwMDAgICAgLT4gLTEwMDAKK21ubXg0NjQgbWluIC0xMDAwICAgMUUrMyAgICAtPiAtMTAwMAorbW5teDQ2NSBtaW4gLTFFKzMgICAxMDAwICAgIC0+IC0xRSszCittbm14NDY2IG1pbiAtMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMKK21ubXg0NjcgbWluIC0xRSszICAtMTAwMCAgICAtPiAtMUUrMworCistLSByb3VuZGluZyAocmVzdWx0cyB0cmVhdGVkIGFzIHRob3VnaCBwbHVzKQorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3ByZWNpc2lvbjogMworCittbm14NDcwIG1pbiAgMSAgICAgIDUgICAgICAtPiAgMQorbW5teDQ3MSBtaW4gIDEwICAgICA1MCAgICAgLT4gIDEwCittbm14NDcyIG1pbiAgMTAwICAgIDUwMCAgICAtPiAgMTAwCittbm14NDczIG1pbiAgMTAwMCAgIDUwMDAgICAtPiAgMS4wMEUrMyBSb3VuZGVkCittbm14NDc0IG1pbiAgMTAwMDAgIDUwMDAwICAtPiAgMS4wMEUrNCBSb3VuZGVkCittbm14NDc1IG1pbiAgNiAgICAgIDUwICAgICAtPiAgNgorbW5teDQ3NiBtaW4gIDY2ICAgICA1MDAgICAgLT4gIDY2Cittbm14NDc3IG1pbiAgNjY2ICAgIDUwMDAgICAtPiAgNjY2Cittbm14NDc4IG1pbiAgNjY2NiAgIDUwMDAwICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QKK21ubXg0NzkgbWluICA2NjY2NiAgNTAwMDAwIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdAorbW5teDQ4MCBtaW4gIDMzMzMzICA1MDAwMDAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0Cittbm14NDgxIG1pbiAgNzU0MDEgIDEgICAgICAtPiAgMQorbW5teDQ4MiBtaW4gIDc1NDAyICAxMCAgICAgLT4gIDEwCittbm14NDgzIG1pbiAgNzU0MDMgIDEwMCAgICAtPiAgMTAwCittbm14NDg0IG1pbiAgNzU0MDQgIDEwMDAgICAtPiAgMS4wMEUrMyBSb3VuZGVkCittbm14NDg1IG1pbiAgNzU0MDUgIDEwMDAwICAtPiAgMS4wMEUrNCBSb3VuZGVkCittbm14NDg2IG1pbiAgNzU0MDYgIDYgICAgICAtPiAgNgorbW5teDQ4NyBtaW4gIDc1NDA3ICA2NiAgICAgLT4gIDY2Cittbm14NDg4IG1pbiAgNzU0MDggIDY2NiAgICAtPiAgNjY2Cittbm14NDg5IG1pbiAgNzU0MDkgIDY2NjYgICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QKK21ubXg0OTAgbWluICA3NTQxMCAgNjY2NjYgIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdAorbW5teDQ5MSBtaW4gIDc1NDExICAzMzMzMyAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0CisKKworLS0gb3ZlcmZsb3cgdGVzdHMKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitwcmVjaXNpb246IDMKK21ubXg1MDAgbWluIDkuOTk5RSs5OTk5OTk5OTkgIDAgLT4gIDAKK21ubXg1MDEgbWluIC05Ljk5OUUrOTk5OTk5OTk5IDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKK3ByZWNpc2lvbjogMworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK21ubXg1MTAgbWluICAxLjAwRS05OTkgICAgICAgMCAgLT4gICAwCittbm14NTExIG1pbiAgMC4xRS05OTkgICAgICAgIDAgIC0+ICAgMAorbW5teDUxMiBtaW4gIDAuMTBFLTk5OSAgICAgICAwICAtPiAgIDAKK21ubXg1MTMgbWluICAwLjEwMEUtOTk5ICAgICAgMCAgLT4gICAwCittbm14NTE0IG1pbiAgMC4wMUUtOTk5ICAgICAgIDAgIC0+ICAgMAorbW5teDUxNSBtaW4gIDAuOTk5RS05OTkgICAgICAwICAtPiAgIDAKK21ubXg1MTYgbWluICAwLjA5OUUtOTk5ICAgICAgMCAgLT4gICAwCittbm14NTE3IG1pbiAgMC4wMDlFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5teDUxOCBtaW4gIDAuMDAxRS05OTkgICAgICAwICAtPiAgIDAKK21ubXg1MTkgbWluICAwLjAwMDlFLTk5OSAgICAgMCAgLT4gICAwCittbm14NTIwIG1pbiAgMC4wMDAxRS05OTkgICAgIDAgIC0+ICAgMAorCittbm14NTMwIG1pbiAtMS4wMEUtOTk5ICAgICAgIDAgIC0+ICAtMS4wMEUtOTk5Cittbm14NTMxIG1pbiAtMC4xRS05OTkgICAgICAgIDAgIC0+ICAtMUUtMTAwMCAgIFN1Ym5vcm1hbAorbW5teDUzMiBtaW4gLTAuMTBFLTk5OSAgICAgICAwICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwKK21ubXg1MzMgbWluIC0wLjEwMEUtOTk5ICAgICAgMCAgLT4gIC0xLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQKK21ubXg1MzQgbWluIC0wLjAxRS05OTkgICAgICAgMCAgLT4gIC0xRS0xMDAxICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gTm1pbgorbW5teDUzNSBtaW4gLTAuOTk5RS05OTkgICAgICAwICAtPiAgLTEuMDBFLTk5OSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbW5teDUzNiBtaW4gLTAuMDk5RS05OTkgICAgICAwICAtPiAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbW5teDUzNyBtaW4gLTAuMDA5RS05OTkgICAgICAwICAtPiAgLTFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbW5teDUzOCBtaW4gLTAuMDAxRS05OTkgICAgICAwICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCittbm14NTM5IG1pbiAtMC4wMDA5RS05OTkgICAgIDAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK21ubXg1NDAgbWluIC0wLjAwMDFFLTk5OSAgICAgMCAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorCistLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4KK3ByZWNpc2lvbjogOQorbW5teDU1MSBtaW4gICAgICAxLjAgICAgICAgMC4xICAtPiAwLjEKK21ubXg1NTIgbWluICAgICAgMC4xICAgICAgIDEuMCAgLT4gMC4xCittbm14NTUzIG1pbiAgICAgMTAuMCAgICAgICAwLjEgIC0+IDAuMQorbW5teDU1NCBtaW4gICAgICAwLjEgICAgICAxMC4wICAtPiAwLjEKK21ubXg1NTUgbWluICAgICAgMTAwICAgICAgIDEuMCAgLT4gMS4wCittbm14NTU2IG1pbiAgICAgIDEuMCAgICAgICAxMDAgIC0+IDEuMAorbW5teDU1NyBtaW4gICAgIDEwMDAgICAgICAxMC4wICAtPiAxMC4wCittbm14NTU4IG1pbiAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwLjAKK21ubXg1NTkgbWluICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMTAwLjAKK21ubXg1NjAgbWluICAgIDEwMC4wICAgICAxMDAwMCAgLT4gMTAwLjAKK21ubXg1NjEgbWluICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMC4wCittbm14NTYyIG1pbiAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IDEwMDAuMAorbW5teDU2MyBtaW4gIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxMDAwMC4wCittbm14NTY0IG1pbiAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwLjAKKworLS0gTnVsbCB0ZXN0cworbW5tOTAwIG1pbiAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK21ubTkwMSBtaW4gICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21pbm1hZy5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9taW5tYWcuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWFjMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9taW5tYWcuZGVjVGVzdApAQCAtMCwwICsxLDM5MCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBtaW5tYWcuZGVjVGVzdCAtLSBkZWNpbWFsIG1pbmltdW0gYnkgbWFnbml0dWRlICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbworLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nCisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIHNhbml0eSBjaGVja3MKK21uZ3gwMDEgbWlubWFnICAtMiAgLTIgIC0+IC0yCittbmd4MDAyIG1pbm1hZyAgLTIgIC0xICAtPiAtMQorbW5neDAwMyBtaW5tYWcgIC0yICAgMCAgLT4gIDAKK21uZ3gwMDQgbWlubWFnICAtMiAgIDEgIC0+ICAxCittbmd4MDA1IG1pbm1hZyAgLTIgICAyICAtPiAtMgorbW5neDAwNiBtaW5tYWcgIC0xICAtMiAgLT4gLTEKK21uZ3gwMDcgbWlubWFnICAtMSAgLTEgIC0+IC0xCittbmd4MDA4IG1pbm1hZyAgLTEgICAwICAtPiAgMAorbW5neDAwOSBtaW5tYWcgIC0xICAgMSAgLT4gLTEKK21uZ3gwMTAgbWlubWFnICAtMSAgIDIgIC0+IC0xCittbmd4MDExIG1pbm1hZyAgIDAgIC0yICAtPiAgMAorbW5neDAxMiBtaW5tYWcgICAwICAtMSAgLT4gIDAKK21uZ3gwMTMgbWlubWFnICAgMCAgIDAgIC0+ICAwCittbmd4MDE0IG1pbm1hZyAgIDAgICAxICAtPiAgMAorbW5neDAxNSBtaW5tYWcgICAwICAgMiAgLT4gIDAKK21uZ3gwMTYgbWlubWFnICAgMSAgLTIgIC0+ICAxCittbmd4MDE3IG1pbm1hZyAgIDEgIC0xICAtPiAtMQorbW5neDAxOCBtaW5tYWcgICAxICAgMCAgLT4gIDAKK21uZ3gwMTkgbWlubWFnICAgMSAgIDEgIC0+ICAxCittbmd4MDIwIG1pbm1hZyAgIDEgICAyICAtPiAgMQorbW5neDAyMSBtaW5tYWcgICAyICAtMiAgLT4gLTIKK21uZ3gwMjIgbWlubWFnICAgMiAgLTEgIC0+IC0xCittbmd4MDIzIG1pbm1hZyAgIDIgICAwICAtPiAgMAorbW5neDAyNSBtaW5tYWcgICAyICAgMSAgLT4gIDEKK21uZ3gwMjYgbWlubWFnICAgMiAgIDIgIC0+ICAyCisKKy0tIGV4dGVuZGVkIHplcm9zCittbmd4MDMwIG1pbm1hZyAgIDAgICAgIDAgICAtPiAgMAorbW5neDAzMSBtaW5tYWcgICAwICAgIC0wICAgLT4gLTAKK21uZ3gwMzIgbWlubWFnICAgMCAgICAtMC4wIC0+IC0wLjAKK21uZ3gwMzMgbWlubWFnICAgMCAgICAgMC4wIC0+ICAwLjAKK21uZ3gwMzQgbWlubWFnICAtMCAgICAgMCAgIC0+IC0wCittbmd4MDM1IG1pbm1hZyAgLTAgICAgLTAgICAtPiAtMAorbW5neDAzNiBtaW5tYWcgIC0wICAgIC0wLjAgLT4gLTAKK21uZ3gwMzcgbWlubWFnICAtMCAgICAgMC4wIC0+IC0wCittbmd4MDM4IG1pbm1hZyAgIDAuMCAgIDAgICAtPiAgMC4wCittbmd4MDM5IG1pbm1hZyAgIDAuMCAgLTAgICAtPiAtMAorbW5neDA0MCBtaW5tYWcgICAwLjAgIC0wLjAgLT4gLTAuMAorbW5neDA0MSBtaW5tYWcgICAwLjAgICAwLjAgLT4gIDAuMAorbW5neDA0MiBtaW5tYWcgIC0wLjAgICAwICAgLT4gLTAuMAorbW5neDA0MyBtaW5tYWcgIC0wLjAgIC0wICAgLT4gLTAKK21uZ3gwNDQgbWlubWFnICAtMC4wICAtMC4wIC0+IC0wLjAKK21uZ3gwNDUgbWlubWFnICAtMC4wICAgMC4wIC0+IC0wLjAKKworbW5neDA0NiBtaW5tYWcgICAwRTEgIC0wRTEgLT4gLTBFKzEKK21uZ3gwNDcgbWlubWFnICAtMEUxICAgMEUyIC0+IC0wRSsxCittbmd4MDQ4IG1pbm1hZyAgIDBFMiAgIDBFMSAtPiAgMEUrMQorbW5neDA0OSBtaW5tYWcgICAwRTEgICAwRTIgLT4gIDBFKzEKK21uZ3gwNTAgbWlubWFnICAtMEUzICAtMEUyIC0+IC0wRSszCittbmd4MDUxIG1pbm1hZyAgLTBFMiAgLTBFMyAtPiAtMEUrMworCistLSBTcGVjaWFscworcHJlY2lzaW9uOiA5Cittbmd4MDkwIG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5Cittbmd4MDkxIG1pbm1hZyAgSW5mICAtMTAwMCAgLT4gLTEwMDAKK21uZ3gwOTIgbWlubWFnICBJbmYgIC0xICAgICAtPiAtMQorbW5neDA5MyBtaW5tYWcgIEluZiAgLTAgICAgIC0+IC0wCittbmd4MDk0IG1pbm1hZyAgSW5mICAgMCAgICAgLT4gIDAKK21uZ3gwOTUgbWlubWFnICBJbmYgICAxICAgICAtPiAgMQorbW5neDA5NiBtaW5tYWcgIEluZiAgIDEwMDAgIC0+ICAxMDAwCittbmd4MDk3IG1pbm1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5Cittbmd4MDk4IG1pbm1hZyAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK21uZ3gwOTkgbWlubWFnIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK21uZ3gxMDAgbWlubWFnIC0xICAgICBJbmYgICAtPiAtMQorbW5neDEwMSBtaW5tYWcgLTAgICAgIEluZiAgIC0+IC0wCittbmd4MTAyIG1pbm1hZyAgMCAgICAgSW5mICAgLT4gIDAKK21uZ3gxMDMgbWlubWFnICAxICAgICBJbmYgICAtPiAgMQorbW5neDEwNCBtaW5tYWcgIDEwMDAgIEluZiAgIC0+ICAxMDAwCittbmd4MTA1IG1pbm1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK21uZ3gxMjAgbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK21uZ3gxMjEgbWlubWFnIC1JbmYgIC0xMDAwICAtPiAtMTAwMAorbW5neDEyMiBtaW5tYWcgLUluZiAgLTEgICAgIC0+IC0xCittbmd4MTIzIG1pbm1hZyAtSW5mICAtMCAgICAgLT4gLTAKK21uZ3gxMjQgbWlubWFnIC1JbmYgICAwICAgICAtPiAgMAorbW5neDEyNSBtaW5tYWcgLUluZiAgIDEgICAgIC0+ICAxCittbmd4MTI2IG1pbm1hZyAtSW5mICAgMTAwMCAgLT4gIDEwMDAKK21uZ3gxMjcgbWlubWFnIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK21uZ3gxMjggbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKK21uZ3gxMjkgbWlubWFnIC0xMDAwIC1JbmYgICAtPiAtMTAwMAorbW5neDEzMCBtaW5tYWcgLTEgICAgLUluZiAgIC0+IC0xCittbmd4MTMxIG1pbm1hZyAtMCAgICAtSW5mICAgLT4gLTAKK21uZ3gxMzIgbWlubWFnICAwICAgIC1JbmYgICAtPiAgMAorbW5neDEzMyBtaW5tYWcgIDEgICAgLUluZiAgIC0+ICAxCittbmd4MTM0IG1pbm1hZyAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK21uZ3gxMzUgbWlubWFnICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKKworLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzCittbmd4MTQxIG1pbm1hZyAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQorbW5neDE0MiBtaW5tYWcgIE5hTiAtMTAwMCAgIC0+ICAtMTAwMAorbW5neDE0MyBtaW5tYWcgIE5hTiAtMSAgICAgIC0+ICAtMQorbW5neDE0NCBtaW5tYWcgIE5hTiAtMCAgICAgIC0+ICAtMAorbW5neDE0NSBtaW5tYWcgIE5hTiAgMCAgICAgIC0+ICAwCittbmd4MTQ2IG1pbm1hZyAgTmFOICAxICAgICAgLT4gIDEKK21uZ3gxNDcgbWlubWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMAorbW5neDE0OCBtaW5tYWcgIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQorbW5neDE0OSBtaW5tYWcgIE5hTiAgTmFOICAgIC0+ICBOYU4KK21uZ3gxNTAgbWlubWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKK21uZ3gxNTEgbWlubWFnIC0xMDAwIE5hTiAgICAtPiAtMTAwMAorbW5neDE1MiBtaW5tYWcgLTEgICAtTmFOICAgIC0+IC0xCittbmd4MTUzIG1pbm1hZyAtMCAgICBOYU4gICAgLT4gLTAKK21uZ3gxNTQgbWlubWFnICAwICAgLU5hTiAgICAtPiAgMAorbW5neDE1NSBtaW5tYWcgIDEgICAgTmFOICAgIC0+ICAxCittbmd4MTU2IG1pbm1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDAKK21uZ3gxNTcgbWlubWFnICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKKworbW5neDE2MSBtaW5tYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTYyIG1pbm1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNjMgbWlubWFnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE2NCBtaW5tYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTY1IG1pbm1hZyAtc05hTiAgMCAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNjYgbWlubWFnIC1zTmFOICAxICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE2NyBtaW5tYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTY4IG1pbm1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNjkgbWlubWFnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE3MCBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTcxIG1pbm1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNzIgbWlubWFnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE3MyBtaW5tYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTc0IG1pbm1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNzUgbWlubWFnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE3NiBtaW5tYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTc3IG1pbm1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK21uZ3gxNzggbWlubWFnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbW5neDE3OSBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK21uZ3gxODEgbWlubWFnICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQorbW5neDE4MiBtaW5tYWcgLU5hTjggICAgOTk5MCAgLT4gIDk5OTAKK21uZ3gxODMgbWlubWFnICBOYU43MSAgIEluZiAgIC0+ICBJbmZpbml0eQorCittbmd4MTg0IG1pbm1hZyAgTmFOMSAgICBOYU41NCAtPiAgTmFOMQorbW5neDE4NSBtaW5tYWcgIE5hTjIyICAtTmFONTMgLT4gIE5hTjIyCittbmd4MTg2IG1pbm1hZyAtTmFOMyAgICBOYU42ICAtPiAtTmFOMworbW5neDE4NyBtaW5tYWcgLU5hTjQ0ICAgTmFONyAgLT4gLU5hTjQ0CisKK21uZ3gxODggbWlubWFnIC1JbmYgICAgIE5hTjQxIC0+IC1JbmZpbml0eQorbW5neDE4OSBtaW5tYWcgLTk5OTkgICAtTmFOMzMgLT4gLTk5OTkKK21uZ3gxOTAgbWlubWFnICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQorCittbmd4MTkxIG1pbm1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCittbmd4MTkyIG1pbm1hZyAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCittbmd4MTkzIG1pbm1hZyAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCittbmd4MTk0IG1pbm1hZyAgc05hTjY5IHNOYU45NCAgLT4gIE5hTjY5IEludmFsaWRfb3BlcmF0aW9uCittbmd4MTk1IG1pbm1hZyAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTk2IG1pbm1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTk3IG1pbm1hZyAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTk4IG1pbm1hZyAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCittbmd4MTk5IG1pbm1hZyAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHJvdW5kaW5nIGNoZWNrcyAtLSBjaG9zZW4gaXMgcm91bmRlZCwgb3Igbm90CittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA5Cittbmd4MjAxIG1pbm1hZyAtMTIzNDU2NzgwMDAgMSAgLT4gMQorbW5neDIwMiBtaW5tYWcgMSAtMTIzNDU2NzgwMDAgIC0+IDEKK21uZ3gyMDMgbWlubWFnIC0xMjM0NTY3ODAwICAxICAtPiAxCittbmd4MjA0IG1pbm1hZyAxIC0xMjM0NTY3ODAwICAgLT4gMQorbW5neDIwNSBtaW5tYWcgLTEyMzQ1Njc4OTAgIDEgIC0+IDEKK21uZ3gyMDYgbWlubWFnIDEgLTEyMzQ1Njc4OTAgICAtPiAxCittbmd4MjA3IG1pbm1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gMQorbW5neDIwOCBtaW5tYWcgMSAtMTIzNDU2Nzg5MSAgIC0+IDEKK21uZ3gyMDkgbWlubWFnIC0xMjM0NTY3ODkwMSAxICAtPiAxCittbmd4MjEwIG1pbm1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gMQorbW5neDIxMSBtaW5tYWcgLTEyMzQ1Njc4OTYgIDEgIC0+IDEKK21uZ3gyMTIgbWlubWFnIDEgLTEyMzQ1Njc4OTYgICAtPiAxCittbmd4MjEzIG1pbm1hZyAxMjM0NTY3ODkxICAxICAgLT4gMQorbW5neDIxNCBtaW5tYWcgMSAxMjM0NTY3ODkxICAgIC0+IDEKK21uZ3gyMTUgbWlubWFnIDEyMzQ1Njc4OTAxIDEgICAtPiAxCittbmd4MjE2IG1pbm1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gMQorbW5neDIxNyBtaW5tYWcgMTIzNDU2Nzg5NiAgMSAgIC0+IDEKK21uZ3gyMTggbWlubWFnIDEgMTIzNDU2Nzg5NiAgICAtPiAxCisKK3ByZWNpc2lvbjogMTUKK21uZ3gyMjEgbWlubWFnIC0xMjM0NTY3ODAwMCAxICAtPiAxCittbmd4MjIyIG1pbm1hZyAxIC0xMjM0NTY3ODAwMCAgLT4gMQorbW5neDIyMyBtaW5tYWcgLTEyMzQ1Njc4MDAgIDEgIC0+IDEKK21uZ3gyMjQgbWlubWFnIDEgLTEyMzQ1Njc4MDAgICAtPiAxCittbmd4MjI1IG1pbm1hZyAtMTIzNDU2Nzg5MCAgMSAgLT4gMQorbW5neDIyNiBtaW5tYWcgMSAtMTIzNDU2Nzg5MCAgIC0+IDEKK21uZ3gyMjcgbWlubWFnIC0xMjM0NTY3ODkxICAxICAtPiAxCittbmd4MjI4IG1pbm1hZyAxIC0xMjM0NTY3ODkxICAgLT4gMQorbW5neDIyOSBtaW5tYWcgLTEyMzQ1Njc4OTAxIDEgIC0+IDEKK21uZ3gyMzAgbWlubWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAxCittbmd4MjMxIG1pbm1hZyAtMTIzNDU2Nzg5NiAgMSAgLT4gMQorbW5neDIzMiBtaW5tYWcgMSAtMTIzNDU2Nzg5NiAgIC0+IDEKK21uZ3gyMzMgbWlubWFnIDEyMzQ1Njc4OTEgIDEgICAtPiAxCittbmd4MjM0IG1pbm1hZyAxIDEyMzQ1Njc4OTEgICAgLT4gMQorbW5neDIzNSBtaW5tYWcgMTIzNDU2Nzg5MDEgMSAgIC0+IDEKK21uZ3gyMzYgbWlubWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAxCittbmd4MjM3IG1pbm1hZyAxMjM0NTY3ODk2ICAxICAgLT4gMQorbW5neDIzOCBtaW5tYWcgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworLS0gZnJvbSBleGFtcGxlcworbW5neDI4MCBtaW5tYWcgJzMnICAgJzInICAtPiAgJzInCittbmd4MjgxIG1pbm1hZyAnLTEwJyAnMycgIC0+ICAnMycKK21uZ3gyODIgbWlubWFnICcxLjAnICcxJyAgLT4gICcxLjAnCittbmd4MjgzIG1pbm1hZyAnMScgJzEuMCcgIC0+ICAnMS4wJworbW5neDI4NCBtaW5tYWcgJzcnICdOYU4nICAtPiAgJzcnCisKKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gc3Vibm9ybWFsIHJlc3VsdHMgW2lucHV0c10gbm93IGFsbG93ZWQKK21heEV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5Cittbmd4MzMwIG1pbm1hZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtOUUrOTk5OTk5OTk5IC0+IC0xLjIzNDU2Nzg5MDEyMzQ1Cittbmd4MzMxIG1pbm1hZyAtOUUrOTk5OTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+IC0xLjIzNDU2Nzg5MDEyMzQ1Cittbmd4MzMyIG1pbm1hZyAtMC4xMDAgLTlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+IC05RS05OTk5OTk5OTkKK21uZ3gzMzMgbWlubWFnIC05RS05OTk5OTk5OTkgLTAuMTAwICAgICAgICAgICAgICAgLT4gLTlFLTk5OTk5OTk5OQorbW5neDMzNSBtaW5tYWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLTlFKzk5OTk5OTk5OSAtPiAgMS4yMzQ1Njc4OTAxMjM0NQorbW5neDMzNiBtaW5tYWcgLTlFKzk5OTk5OTk5OSAxLjIzNDU2Nzg5MDEyMzQ1RS0wICAtPiAgMS4yMzQ1Njc4OTAxMjM0NQorbW5neDMzNyBtaW5tYWcgKzAuMTAwIC05RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAtOUUtOTk5OTk5OTk5Cittbmd4MzM4IG1pbm1hZyAtOUUtOTk5OTk5OTk5IDAuMTAwICAgICAgICAgICAgICAgIC0+IC05RS05OTk5OTk5OTkKKworbW5neDMzOSBtaW5tYWcgLTFlLTU5OTk5OTk5OSAtMWUtNDAwMDAwMDAxICAgLT4gIC0xRS01OTk5OTk5OTkKK21uZ3gzNDAgbWlubWFnIC0xZS01OTk5OTk5OTkgLTFlLTQwMDAwMDAwMCAgIC0+ICAtMUUtNTk5OTk5OTk5Cittbmd4MzQxIG1pbm1hZyAtMWUtNjAwMDAwMDAwIC0xZS00MDAwMDAwMDAgICAtPiAgLTFFLTYwMDAwMDAwMAorbW5neDM0MiBtaW5tYWcgLTllLTk5OTk5OTk5OCAtMC4wMSAgICAgICAgICAgLT4gIC05RS05OTk5OTk5OTgKK21uZ3gzNDMgbWlubWFnIC05ZS05OTk5OTk5OTggLTAuMSAgICAgICAgICAgIC0+ICAtOUUtOTk5OTk5OTk4Cittbmd4MzQ0IG1pbm1hZyAtMC4wMSAgICAgICAgIC05ZS05OTk5OTk5OTggICAtPiAgLTlFLTk5OTk5OTk5OAorbW5neDM0NSBtaW5tYWcgLTFlNTk5OTk5OTk5ICAtMWU0MDAwMDAwMDEgICAgLT4gIC0xRSs0MDAwMDAwMDEKK21uZ3gzNDYgbWlubWFnIC0xZTU5OTk5OTk5OSAgLTFlNDAwMDAwMDAwICAgIC0+ICAtMUUrNDAwMDAwMDAwCittbmd4MzQ3IG1pbm1hZyAtMWU2MDAwMDAwMDAgIC0xZTQwMDAwMDAwMCAgICAtPiAgLTFFKzQwMDAwMDAwMAorbW5neDM0OCBtaW5tYWcgLTllOTk5OTk5OTk4ICAtMTAwICAgICAgICAgICAgLT4gIC0xMDAKK21uZ3gzNDkgbWlubWFnIC05ZTk5OTk5OTk5OCAgLTEwICAgICAgICAgICAgIC0+ICAtMTAKK21uZ3gzNTAgbWlubWFnIC0xMDAgICAgICAgICAgLTllOTk5OTk5OTk4ICAgIC0+ICAtMTAwCistLSBzaWducworbW5neDM1MSBtaW5tYWcgLTFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC0xRSs0MTExMTExMTEKK21uZ3gzNTIgbWlubWFnIC0xZSs3Nzc3Nzc3NzcgKzFlKzQxMTExMTExMSAtPiAgMUUrNDExMTExMTExCittbmd4MzUzIG1pbm1hZyArMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTFFKzQxMTExMTExMQorbW5neDM1NCBtaW5tYWcgKzFlKzc3Nzc3Nzc3NyArMWUrNDExMTExMTExIC0+ICAxRSs0MTExMTExMTEKK21uZ3gzNTUgbWlubWFnIC0xZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAtMUUtNzc3Nzc3Nzc3Cittbmd4MzU2IG1pbm1hZyAtMWUtNzc3Nzc3Nzc3ICsxZS00MTExMTExMTEgLT4gLTFFLTc3Nzc3Nzc3NworbW5neDM1NyBtaW5tYWcgKzFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+ICAxRS03Nzc3Nzc3NzcKK21uZ3gzNTggbWlubWFnICsxZS03Nzc3Nzc3NzcgKzFlLTQxMTExMTExMSAtPiAgMUUtNzc3Nzc3Nzc3CisKKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQorbW5neDQwMSBtaW5tYWcgIEluZiAgICAxLjEgICAgIC0+ICAxLjEKK21uZ3g0MDIgbWlubWFnICAxLjEgICAgMSAgICAgICAtPiAgMQorbW5neDQwMyBtaW5tYWcgIDEgICAgICAxLjAgICAgIC0+ICAxLjAKK21uZ3g0MDQgbWlubWFnICAxLjAgICAgMC4xICAgICAtPiAgMC4xCittbmd4NDA1IG1pbm1hZyAgMC4xICAgIDAuMTAgICAgLT4gIDAuMTAKK21uZ3g0MDYgbWlubWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMDAKK21uZ3g0MDcgbWlubWFnICAwLjEwICAgMCAgICAgICAtPiAgMAorbW5neDQwOCBtaW5tYWcgIDAgICAgICAwLjAgICAgIC0+ICAwLjAKK21uZ3g0MDkgbWlubWFnICAwLjAgICAtMCAgICAgICAtPiAtMAorbW5neDQxMCBtaW5tYWcgIDAuMCAgIC0wLjAgICAgIC0+IC0wLjAKK21uZ3g0MTEgbWlubWFnICAwLjAwICAtMC4wICAgICAtPiAtMC4wCittbmd4NDEyIG1pbm1hZyAgMC4wICAgLTAuMDAgICAgLT4gLTAuMDAKK21uZ3g0MTMgbWlubWFnICAwICAgICAtMC4wICAgICAtPiAtMC4wCittbmd4NDE0IG1pbm1hZyAgMCAgICAgLTAgICAgICAgLT4gLTAKK21uZ3g0MTUgbWlubWFnIC0wLjAgICAtMCAgICAgICAtPiAtMAorbW5neDQxNiBtaW5tYWcgLTAgICAgIC0wLjEwMCAgIC0+IC0wCittbmd4NDE3IG1pbm1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAKK21uZ3g0MTggbWlubWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xCittbmd4NDE5IG1pbm1hZyAtMC4xICAgLTEuMCAgICAgLT4gLTAuMQorbW5neDQyMCBtaW5tYWcgLTEuMCAgIC0xICAgICAgIC0+IC0xCittbmd4NDIxIG1pbm1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTEKK21uZ3g0MjMgbWlubWFnIC0xLjEgICAtSW5mICAgICAtPiAtMS4xCistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKK21uZ3g0MzEgbWlubWFnICAxLjEgICAgSW5mICAgICAtPiAgMS4xCittbmd4NDMyIG1pbm1hZyAgMSAgICAgIDEuMSAgICAgLT4gIDEKK21uZ3g0MzMgbWlubWFnICAxLjAgICAgMSAgICAgICAtPiAgMS4wCittbmd4NDM0IG1pbm1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQorbW5neDQzNSBtaW5tYWcgIDAuMTAgICAwLjEgICAgIC0+ICAwLjEwCittbmd4NDM2IG1pbm1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAwCittbmd4NDM3IG1pbm1hZyAgMCAgICAgIDAuMTAgICAgLT4gIDAKK21uZ3g0MzggbWlubWFnICAwLjAgICAgMCAgICAgICAtPiAgMC4wCittbmd4NDM5IG1pbm1hZyAtMCAgICAgIDAuMCAgICAgLT4gLTAKK21uZ3g0NDAgbWlubWFnIC0wLjAgICAgMC4wICAgICAtPiAtMC4wCittbmd4NDQxIG1pbm1hZyAtMC4wICAgIDAuMDAgICAgLT4gLTAuMAorbW5neDQ0MiBtaW5tYWcgLTAuMDAgICAwLjAgICAgIC0+IC0wLjAwCittbmd4NDQzIG1pbm1hZyAtMC4wICAgIDAgICAgICAgLT4gLTAuMAorbW5neDQ0NCBtaW5tYWcgLTAgICAgICAwICAgICAgIC0+IC0wCittbmd4NDQ1IG1pbm1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTAKK21uZ3g0NDYgbWlubWFnIC0wLjEwMCAtMCAgICAgICAtPiAtMAorbW5neDQ0NyBtaW5tYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwCittbmd4NDQ4IG1pbm1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQorbW5neDQ0OSBtaW5tYWcgLTEuMCAgIC0wLjEgICAgIC0+IC0wLjEKK21uZ3g0NTAgbWlubWFnIC0xICAgICAtMS4wICAgICAtPiAtMQorbW5neDQ1MSBtaW5tYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xCittbmd4NDUzIG1pbm1hZyAtSW5mICAgLTEuMSAgICAgLT4gLTEuMQorLS0gbGFyZ2llcworbW5neDQ2MCBtaW5tYWcgIDEwMDAgICAxRSszICAgIC0+ICAxMDAwCittbmd4NDYxIG1pbm1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKK21uZ3g0NjIgbWlubWFnICAxMDAwICAtMUUrMyAgICAtPiAtMUUrMworbW5neDQ2MyBtaW5tYWcgIDFFKzMgIC0xMDAwICAgIC0+IC0xMDAwCittbmd4NDY0IG1pbm1hZyAtMTAwMCAgIDFFKzMgICAgLT4gLTEwMDAKK21uZ3g0NjUgbWlubWFnIC0xRSszICAgMTAwMCAgICAtPiAtMUUrMworbW5neDQ2NiBtaW5tYWcgLTEwMDAgIC0xRSszICAgIC0+IC0xRSszCittbmd4NDY3IG1pbm1hZyAtMUUrMyAgLTEwMDAgICAgLT4gLTFFKzMKKworLS0gcm91bmRpbmcgKHJlc3VsdHMgdHJlYXRlZCBhcyB0aG91Z2ggcGx1cykKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitwcmVjaXNpb246IDMKKworbW5neDQ3MCBtaW5tYWcgIDEgICAgICA1ICAgICAgLT4gIDEKK21uZ3g0NzEgbWlubWFnICAxMCAgICAgNTAgICAgIC0+ICAxMAorbW5neDQ3MiBtaW5tYWcgIDEwMCAgICA1MDAgICAgLT4gIDEwMAorbW5neDQ3MyBtaW5tYWcgIDEwMDAgICA1MDAwICAgLT4gIDEuMDBFKzMgUm91bmRlZAorbW5neDQ3NCBtaW5tYWcgIDEwMDAwICA1MDAwMCAgLT4gIDEuMDBFKzQgUm91bmRlZAorbW5neDQ3NSBtaW5tYWcgIDYgICAgICA1MCAgICAgLT4gIDYKK21uZ3g0NzYgbWlubWFnICA2NiAgICAgNTAwICAgIC0+ICA2NgorbW5neDQ3NyBtaW5tYWcgIDY2NiAgICA1MDAwICAgLT4gIDY2NgorbW5neDQ3OCBtaW5tYWcgIDY2NjYgICA1MDAwMCAgLT4gIDYuNjdFKzMgUm91bmRlZCBJbmV4YWN0Cittbmd4NDc5IG1pbm1hZyAgNjY2NjYgIDUwMDAwMCAtPiAgNi42N0UrNCBSb3VuZGVkIEluZXhhY3QKK21uZ3g0ODAgbWlubWFnICAzMzMzMyAgNTAwMDAwIC0+ICAzLjMzRSs0IFJvdW5kZWQgSW5leGFjdAorbW5neDQ4MSBtaW5tYWcgIDc1NDAxICAxICAgICAgLT4gIDEKK21uZ3g0ODIgbWlubWFnICA3NTQwMiAgMTAgICAgIC0+ICAxMAorbW5neDQ4MyBtaW5tYWcgIDc1NDAzICAxMDAgICAgLT4gIDEwMAorbW5neDQ4NCBtaW5tYWcgIDc1NDA0ICAxMDAwICAgLT4gIDEuMDBFKzMgUm91bmRlZAorbW5neDQ4NSBtaW5tYWcgIDc1NDA1ICAxMDAwMCAgLT4gIDEuMDBFKzQgUm91bmRlZAorbW5neDQ4NiBtaW5tYWcgIDc1NDA2ICA2ICAgICAgLT4gIDYKK21uZ3g0ODcgbWlubWFnICA3NTQwNyAgNjYgICAgIC0+ICA2NgorbW5neDQ4OCBtaW5tYWcgIDc1NDA4ICA2NjYgICAgLT4gIDY2NgorbW5neDQ4OSBtaW5tYWcgIDc1NDA5ICA2NjY2ICAgLT4gIDYuNjdFKzMgUm91bmRlZCBJbmV4YWN0Cittbmd4NDkwIG1pbm1hZyAgNzU0MTAgIDY2NjY2ICAtPiAgNi42N0UrNCBSb3VuZGVkIEluZXhhY3QKK21uZ3g0OTEgbWlubWFnICA3NTQxMSAgMzMzMzMgIC0+ICAzLjMzRSs0IFJvdW5kZWQgSW5leGFjdAorCisKKy0tIG92ZXJmbG93IHRlc3RzCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiAzCittbmd4NTAwIG1pbm1hZyA5Ljk5OUUrOTk5OTk5OTk5ICAwIC0+ICAwCittbmd4NTAxIG1pbm1hZyAtOS45OTlFKzk5OTk5OTk5OSAwIC0+ICAwCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdworcHJlY2lzaW9uOiAzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorbW5neDUxMCBtaW5tYWcgIDEuMDBFLTk5OSAgICAgICAwICAtPiAgIDAKK21uZ3g1MTEgbWlubWFnICAwLjFFLTk5OSAgICAgICAgMCAgLT4gICAwCittbmd4NTEyIG1pbm1hZyAgMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAgMAorbW5neDUxMyBtaW5tYWcgIDAuMTAwRS05OTkgICAgICAwICAtPiAgIDAKK21uZ3g1MTQgbWlubWFnICAwLjAxRS05OTkgICAgICAgMCAgLT4gICAwCittbmd4NTE1IG1pbm1hZyAgMC45OTlFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5neDUxNiBtaW5tYWcgIDAuMDk5RS05OTkgICAgICAwICAtPiAgIDAKK21uZ3g1MTcgbWlubWFnICAwLjAwOUUtOTk5ICAgICAgMCAgLT4gICAwCittbmd4NTE4IG1pbm1hZyAgMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5neDUxOSBtaW5tYWcgIDAuMDAwOUUtOTk5ICAgICAwICAtPiAgIDAKK21uZ3g1MjAgbWlubWFnICAwLjAwMDFFLTk5OSAgICAgMCAgLT4gICAwCisKK21uZ3g1MzAgbWlubWFnIC0xLjAwRS05OTkgICAgICAgMCAgLT4gICAwCittbmd4NTMxIG1pbm1hZyAtMC4xRS05OTkgICAgICAgIDAgIC0+ICAgMAorbW5neDUzMiBtaW5tYWcgLTAuMTBFLTk5OSAgICAgICAwICAtPiAgIDAKK21uZ3g1MzMgbWlubWFnIC0wLjEwMEUtOTk5ICAgICAgMCAgLT4gICAwCittbmd4NTM0IG1pbm1hZyAtMC4wMUUtOTk5ICAgICAgIDAgIC0+ICAgMAorbW5neDUzNSBtaW5tYWcgLTAuOTk5RS05OTkgICAgICAwICAtPiAgIDAKK21uZ3g1MzYgbWlubWFnIC0wLjA5OUUtOTk5ICAgICAgMCAgLT4gICAwCittbmd4NTM3IG1pbm1hZyAtMC4wMDlFLTk5OSAgICAgIDAgIC0+ICAgMAorbW5neDUzOCBtaW5tYWcgLTAuMDAxRS05OTkgICAgICAwICAtPiAgIDAKK21uZ3g1MzkgbWlubWFnIC0wLjAwMDlFLTk5OSAgICAgMCAgLT4gICAwCittbmd4NTQwIG1pbm1hZyAtMC4wMDAxRS05OTkgICAgIDAgIC0+ICAgMAorCisKKy0tIE51bGwgdGVzdHMKK21uZzkwMCBtaW5tYWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCittbmc5MDEgbWlubWFnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9taW51cy5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9taW51cy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NzQ5YzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21pbnVzLmRlY1Rlc3QKQEAgLTAsMCArMSwxODIgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbWludXMuZGVjVGVzdCAtLSBkZWNpbWFsIG5lZ2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyBwcmltYXJpbHkgdGVzdHMgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgb3BlcmF0b3IuCistLSBTdWJ0cmFjdGlvbiwgcm91bmRpbmcsIGFuZCBtb3JlIG92ZXJmbG93cyBhcmUgdGVzdGVkIGVsc2V3aGVyZS4KKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworbWlueDAwMSBtaW51cyAnMScgICAgICAtPiAnLTEnCittaW54MDAyIG1pbnVzICctMScgICAgIC0+ICcxJworbWlueDAwMyBtaW51cyAnMS4wMCcgICAtPiAnLTEuMDAnCittaW54MDA0IG1pbnVzICctMS4wMCcgIC0+ICcxLjAwJworbWlueDAwNSBtaW51cyAnMCcgICAgICAtPiAnMCcKK21pbngwMDYgbWludXMgJzAuMDAnICAgLT4gJzAuMDAnCittaW54MDA3IG1pbnVzICcwMC4wJyAgIC0+ICcwLjAnCittaW54MDA4IG1pbnVzICcwMC4wMCcgIC0+ICcwLjAwJworbWlueDAwOSBtaW51cyAnMDAnICAgICAtPiAnMCcKKworbWlueDAxMCBtaW51cyAnLTInICAgICAtPiAnMicKK21pbngwMTEgbWludXMgJzInICAgICAgLT4gJy0yJworbWlueDAxMiBtaW51cyAnLTIuMDAnICAtPiAnMi4wMCcKK21pbngwMTMgbWludXMgJzIuMDAnICAgLT4gJy0yLjAwJworbWlueDAxNCBtaW51cyAnLTAnICAgICAtPiAnMCcKK21pbngwMTUgbWludXMgJy0wLjAwJyAgLT4gJzAuMDAnCittaW54MDE2IG1pbnVzICctMDAuMCcgIC0+ICcwLjAnCittaW54MDE3IG1pbnVzICctMDAuMDAnIC0+ICcwLjAwJworbWlueDAxOCBtaW51cyAnLTAwJyAgICAtPiAnMCcKKworLS0gImxocyIgemVyb3MgaW4gcGx1cyBhbmQgbWludXMgaGF2ZSBleHBvbmVudCA9IG9wZXJhbmQKK21pbngwMjAgbWludXMgJy0wRTMnICAgLT4gJzBFKzMnCittaW54MDIxIG1pbnVzICctMEUyJyAgIC0+ICcwRSsyJworbWlueDAyMiBtaW51cyAnLTBFMScgICAtPiAnMEUrMScKK21pbngwMjMgbWludXMgJy0wRTAnICAgLT4gJzAnCittaW54MDI0IG1pbnVzICcrMEUwJyAgIC0+ICcwJworbWlueDAyNSBtaW51cyAnKzBFMScgICAtPiAnMEUrMScKK21pbngwMjYgbWludXMgJyswRTInICAgLT4gJzBFKzInCittaW54MDI3IG1pbnVzICcrMEUzJyAgIC0+ICcwRSszJworCittaW54MDMwIG1pbnVzICctNUUzJyAgIC0+ICc1RSszJworbWlueDAzMSBtaW51cyAnLTVFOCcgICAtPiAnNUUrOCcKK21pbngwMzIgbWludXMgJy01RTEzJyAgLT4gJzVFKzEzJworbWlueDAzMyBtaW51cyAnLTVFMTgnICAtPiAnNUUrMTgnCittaW54MDM0IG1pbnVzICcrNUUzJyAgIC0+ICctNUUrMycKK21pbngwMzUgbWludXMgJys1RTgnICAgLT4gJy01RSs4JworbWlueDAzNiBtaW51cyAnKzVFMTMnICAtPiAnLTVFKzEzJworbWlueDAzNyBtaW51cyAnKzVFMTgnICAtPiAnLTVFKzE4JworCittaW54MDUwIG1pbnVzICctMjAwMDAwMCcgLT4gJzIwMDAwMDAnCittaW54MDUxIG1pbnVzICcyMDAwMDAwJyAgLT4gJy0yMDAwMDAwJworcHJlY2lzaW9uOiA3CittaW54MDUyIG1pbnVzICctMjAwMDAwMCcgLT4gJzIwMDAwMDAnCittaW54MDUzIG1pbnVzICcyMDAwMDAwJyAgLT4gJy0yMDAwMDAwJworcHJlY2lzaW9uOiA2CittaW54MDU0IG1pbnVzICctMjAwMDAwMCcgLT4gJzIuMDAwMDBFKzYnIFJvdW5kZWQKK21pbngwNTUgbWludXMgJzIwMDAwMDAnICAtPiAnLTIuMDAwMDBFKzYnIFJvdW5kZWQKK3ByZWNpc2lvbjogMworbWlueDA1NiBtaW51cyAnLTIwMDAwMDAnIC0+ICcyLjAwRSs2JyBSb3VuZGVkCittaW54MDU3IG1pbnVzICcyMDAwMDAwJyAgLT4gJy0yLjAwRSs2JyBSb3VuZGVkCisKKy0tIG1vcmUgZml4ZWQsIHBvdGVudGlhbCBMSFMgc3dhcHMvb3ZlcmxheXMgaWYgZG9uZSBieSAwIHN1YnRyYWN0IHgKK3ByZWNpc2lvbjogOQorbWlueDA2MCBtaW51cyAnNTYyNjdFLTEwJyAgIC0+ICctMC4wMDAwMDU2MjY3JworbWlueDA2MSBtaW51cyAnNTYyNjdFLTUnICAgIC0+ICctMC41NjI2NycKK21pbngwNjIgbWludXMgJzU2MjY3RS0yJyAgICAtPiAnLTU2Mi42NycKK21pbngwNjMgbWludXMgJzU2MjY3RS0xJyAgICAtPiAnLTU2MjYuNycKK21pbngwNjUgbWludXMgJzU2MjY3RS0wJyAgICAtPiAnLTU2MjY3JworbWlueDA2NiBtaW51cyAnNTYyNjdFKzAnICAgIC0+ICctNTYyNjcnCittaW54MDY3IG1pbnVzICc1NjI2N0UrMScgICAgLT4gJy01LjYyNjdFKzUnCittaW54MDY4IG1pbnVzICc1NjI2N0UrMicgICAgLT4gJy01LjYyNjdFKzYnCittaW54MDY5IG1pbnVzICc1NjI2N0UrMycgICAgLT4gJy01LjYyNjdFKzcnCittaW54MDcwIG1pbnVzICc1NjI2N0UrNCcgICAgLT4gJy01LjYyNjdFKzgnCittaW54MDcxIG1pbnVzICc1NjI2N0UrNScgICAgLT4gJy01LjYyNjdFKzknCittaW54MDcyIG1pbnVzICc1NjI2N0UrNicgICAgLT4gJy01LjYyNjdFKzEwJworbWlueDA4MCBtaW51cyAnLTU2MjY3RS0xMCcgIC0+ICcwLjAwMDAwNTYyNjcnCittaW54MDgxIG1pbnVzICctNTYyNjdFLTUnICAgLT4gJzAuNTYyNjcnCittaW54MDgyIG1pbnVzICctNTYyNjdFLTInICAgLT4gJzU2Mi42NycKK21pbngwODMgbWludXMgJy01NjI2N0UtMScgICAtPiAnNTYyNi43JworbWlueDA4NSBtaW51cyAnLTU2MjY3RS0wJyAgIC0+ICc1NjI2NycKK21pbngwODYgbWludXMgJy01NjI2N0UrMCcgICAtPiAnNTYyNjcnCittaW54MDg3IG1pbnVzICctNTYyNjdFKzEnICAgLT4gJzUuNjI2N0UrNScKK21pbngwODggbWludXMgJy01NjI2N0UrMicgICAtPiAnNS42MjY3RSs2JworbWlueDA4OSBtaW51cyAnLTU2MjY3RSszJyAgIC0+ICc1LjYyNjdFKzcnCittaW54MDkwIG1pbnVzICctNTYyNjdFKzQnICAgLT4gJzUuNjI2N0UrOCcKK21pbngwOTEgbWludXMgJy01NjI2N0UrNScgICAtPiAnNS42MjY3RSs5JworbWlueDA5MiBtaW51cyAnLTU2MjY3RSs2JyAgIC0+ICc1LjYyNjdFKzEwJworCisKKy0tIG92ZXJmbG93IHRlc3RzCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiAzCittaW54MTAwIG1pbnVzIDkuOTk5RSs5OTk5OTk5OTkgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK21pbngxMDEgbWludXMgLTkuOTk5RSs5OTk5OTk5OTkgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKK3ByZWNpc2lvbjogMworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK21pbngxMTAgbWludXMgIDEuMDBFLTk5OSAgICAgICAgLT4gIC0xLjAwRS05OTkKK21pbngxMTEgbWludXMgIDAuMUUtOTk5ICAgICAgICAgLT4gIC0xRS0xMDAwICAgU3Vibm9ybWFsCittaW54MTEyIG1pbnVzICAwLjEwRS05OTkgICAgICAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbAorbWlueDExMyBtaW51cyAgMC4xMDBFLTk5OSAgICAgICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorbWlueDExNCBtaW51cyAgMC4wMUUtOTk5ICAgICAgICAtPiAgLTFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCittaW54MTE1IG1pbnVzICAwLjk5OUUtOTk5ICAgICAgIC0+ICAtMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CittaW54MTE2IG1pbnVzICAwLjA5OUUtOTk5ICAgICAgIC0+ICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CittaW54MTE3IG1pbnVzICAwLjAwOUUtOTk5ICAgICAgIC0+ICAtMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CittaW54MTE4IG1pbnVzICAwLjAwMUUtOTk5ICAgICAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK21pbngxMTkgbWludXMgIDAuMDAwOUUtOTk5ICAgICAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorbWlueDEyMCBtaW51cyAgMC4wMDAxRS05OTkgICAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKK21pbngxMzAgbWludXMgLTEuMDBFLTk5OSAgICAgICAgLT4gICAxLjAwRS05OTkKK21pbngxMzEgbWludXMgLTAuMUUtOTk5ICAgICAgICAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsCittaW54MTMyIG1pbnVzIC0wLjEwRS05OTkgICAgICAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbAorbWlueDEzMyBtaW51cyAtMC4xMDBFLTk5OSAgICAgICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorbWlueDEzNCBtaW51cyAtMC4wMUUtOTk5ICAgICAgICAtPiAgIDFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCittaW54MTM1IG1pbnVzIC0wLjk5OUUtOTk5ICAgICAgIC0+ICAgMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CittaW54MTM2IG1pbnVzIC0wLjA5OUUtOTk5ICAgICAgIC0+ICAgMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CittaW54MTM3IG1pbnVzIC0wLjAwOUUtOTk5ICAgICAgIC0+ICAgMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CittaW54MTM4IG1pbnVzIC0wLjAwMUUtOTk5ICAgICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK21pbngxMzkgbWludXMgLTAuMDAwOUUtOTk5ICAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorbWlueDE0MCBtaW51cyAtMC4wMDAxRS05OTkgICAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKKworLS0gbG9uZyBvcGVyYW5kIGNoZWNrcworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogOQorbWlueDMwMSBtaW51cyAxMjM0NTY3ODAwMCAgLT4gLTEuMjM0NTY3ODBFKzEwIFJvdW5kZWQKK21pbngzMDIgbWludXMgMTIzNDU2NzgwMCAgIC0+IC0xLjIzNDU2NzgwRSs5IFJvdW5kZWQKK21pbngzMDMgbWludXMgMTIzNDU2Nzg5MCAgIC0+IC0xLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK21pbngzMDQgbWludXMgMTIzNDU2Nzg5MSAgIC0+IC0xLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorbWlueDMwNSBtaW51cyAxMjM0NTY3ODkwMSAgLT4gLTEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorbWlueDMwNiBtaW51cyAxMjM0NTY3ODk2ICAgLT4gLTEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMTUKKy0tIHN0aWxsIGNoZWNraW5nCittaW54MzIxIG1pbnVzIDEyMzQ1Njc4MDAwICAtPiAtMTIzNDU2NzgwMDAKK21pbngzMjIgbWludXMgMTIzNDU2NzgwMCAgIC0+IC0xMjM0NTY3ODAwCittaW54MzIzIG1pbnVzIDEyMzQ1Njc4OTAgICAtPiAtMTIzNDU2Nzg5MAorbWlueDMyNCBtaW51cyAxMjM0NTY3ODkxICAgLT4gLTEyMzQ1Njc4OTEKK21pbngzMjUgbWludXMgMTIzNDU2Nzg5MDEgIC0+IC0xMjM0NTY3ODkwMQorbWlueDMyNiBtaW51cyAxMjM0NTY3ODk2ICAgLT4gLTEyMzQ1Njc4OTYKKworLS0gc3BlY2lhbHMKK21pbng0MjAgbWludXMgJ0luZicgICAgLT4gJy1JbmZpbml0eScKK21pbng0MjEgbWludXMgJy1JbmYnICAgLT4gJ0luZmluaXR5JworbWlueDQyMiBtaW51cyAgIE5hTiAgICAtPiAgTmFOCittaW54NDIzIG1pbnVzICBzTmFOICAgIC0+ICBOYU4gICAgSW52YWxpZF9vcGVyYXRpb24KK21pbng0MjQgbWludXMgICBOYU4yNTUgLT4gIE5hTjI1NQorbWlueDQyNSBtaW51cyAgc05hTjI1NiAtPiAgTmFOMjU2IEludmFsaWRfb3BlcmF0aW9uCittaW54NDI2IG1pbnVzICAtTmFOICAgIC0+IC1OYU4KK21pbng0MjcgbWludXMgLXNOYU4gICAgLT4gLU5hTiAgICBJbnZhbGlkX29wZXJhdGlvbgorbWlueDQyOCBtaW51cyAgLU5hTjI1NSAtPiAtTmFOMjU1CittaW54NDI5IG1pbnVzIC1zTmFOMjU2IC0+IC1OYU4yNTYgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0cworbWlueDkwMCBtaW51cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9tdWx0aXBseS5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9tdWx0aXBseS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMjNkNWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL211bHRpcGx5LmRlY1Rlc3QKQEAgLTAsMCArMSw3MzEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbXVsdGlwbHkuZGVjVGVzdCAtLSBkZWNpbWFsIG11bHRpcGxpY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkKK211bHgwMDAgbXVsdGlwbHkgMiAgICAgIDIgLT4gNAorbXVseDAwMSBtdWx0aXBseSAyICAgICAgMyAtPiA2CittdWx4MDAyIG11bHRpcGx5IDUgICAgICAxIC0+IDUKK211bHgwMDMgbXVsdGlwbHkgNSAgICAgIDIgLT4gMTAKK211bHgwMDQgbXVsdGlwbHkgMS4yMCAgIDIgLT4gMi40MAorbXVseDAwNSBtdWx0aXBseSAxLjIwICAgMCAtPiAwLjAwCittdWx4MDA2IG11bHRpcGx5IDEuMjAgIC0yIC0+IC0yLjQwCittdWx4MDA3IG11bHRpcGx5IC0xLjIwICAyIC0+IC0yLjQwCittdWx4MDA4IG11bHRpcGx5IC0xLjIwICAwIC0+IC0wLjAwCittdWx4MDA5IG11bHRpcGx5IC0xLjIwIC0yIC0+IDIuNDAKK211bHgwMTAgbXVsdGlwbHkgNS4wOSA3LjEgLT4gMzYuMTM5CittdWx4MDExIG11bHRpcGx5IDIuNSAgICA0IC0+IDEwLjAKK211bHgwMTIgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDAKK211bHgwMTMgbXVsdGlwbHkgMS4yMzQ1Njc4OSAxLjAwMDAwMDAwIC0+IDEuMjM0NTY3ODkgUm91bmRlZAorbXVseDAxNCBtdWx0aXBseSA5Ljk5OTk5OTk5OSA5Ljk5OTk5OTk5OSAtPiAxMDAuMDAwMDAwIEluZXhhY3QgUm91bmRlZAorbXVseDAxNSBtdWx0aXBseSAyLjUwICAgNCAtPiAxMC4wMAorcHJlY2lzaW9uOiA2CittdWx4MDE2IG11bHRpcGx5IDIuNTAgICA0IC0+IDEwLjAwCittdWx4MDE3IG11bHRpcGx5ICA5Ljk5OTk5OTk5OSAgOS45OTk5OTk5OTkgLT4gIDEwMC4wMDAgSW5leGFjdCBSb3VuZGVkCittdWx4MDE4IG11bHRpcGx5ICA5Ljk5OTk5OTk5OSAtOS45OTk5OTk5OTkgLT4gLTEwMC4wMDAgSW5leGFjdCBSb3VuZGVkCittdWx4MDE5IG11bHRpcGx5IC05Ljk5OTk5OTk5OSAgOS45OTk5OTk5OTkgLT4gLTEwMC4wMDAgSW5leGFjdCBSb3VuZGVkCittdWx4MDIwIG11bHRpcGx5IC05Ljk5OTk5OTk5OSAtOS45OTk5OTk5OTkgLT4gIDEwMC4wMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIDE5OTkuMTIuMjE6IG5leHQgb25lIGlzIGEgZWRnZSBjYXNlIGlmIGludGVybWVkaWF0ZSBsb25ncyBhcmUgdXNlZAorcHJlY2lzaW9uOiAxNQorbXVseDA1OSBtdWx0aXBseSA5OTk5OTk5OTk5OTkgOTc2NTYyNSAtPiA5Ljc2NTYyNDk5OTk5MDIzRSsxOCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzAKK211bHgxNjAgbXVsdGlwbHkgOTk5OTk5OTk5OTk5IDk3NjU2MjUgLT4gOTc2NTYyNDk5OTk5MDIzNDM3NQorcHJlY2lzaW9uOiA5CistLS0tLQorCistLSB6ZXJvcywgZXRjLgorbXVseDAyMSBtdWx0aXBseSAgMCAgICAgIDAgICAgIC0+ICAwCittdWx4MDIyIG11bHRpcGx5ICAwICAgICAtMCAgICAgLT4gLTAKK211bHgwMjMgbXVsdGlwbHkgLTAgICAgICAwICAgICAtPiAtMAorbXVseDAyNCBtdWx0aXBseSAtMCAgICAgLTAgICAgIC0+ICAwCittdWx4MDI1IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKK211bHgwMjYgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMAorbXVseDAyNyBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwCittdWx4MDI4IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKK211bHgwMzAgbXVsdGlwbHkgIDUuMDAgICAxRS0zICAtPiAgMC4wMDUwMAorbXVseDAzMSBtdWx0aXBseSAgMDAuMDAgIDAuMDAwIC0+ICAwLjAwMDAwCittdWx4MDMyIG11bHRpcGx5ICAwMC4wMCAgMEUtMyAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCittdWx4MDMzIG11bHRpcGx5ICAwRS0zICAgMDAuMDAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCittdWx4MDM0IG11bHRpcGx5IC01LjAwICAgMUUtMyAgLT4gLTAuMDA1MDAKK211bHgwMzUgbXVsdGlwbHkgLTAwLjAwICAwLjAwMCAtPiAtMC4wMDAwMAorbXVseDAzNiBtdWx0aXBseSAtMDAuMDAgIDBFLTMgIC0+IC0wLjAwMDAwICAgICAtLSByaHMgaXMgMAorbXVseDAzNyBtdWx0aXBseSAtMEUtMyAgIDAwLjAwIC0+IC0wLjAwMDAwICAgICAtLSBsaHMgaXMgMAorbXVseDAzOCBtdWx0aXBseSAgNS4wMCAgLTFFLTMgIC0+IC0wLjAwNTAwCittdWx4MDM5IG11bHRpcGx5ICAwMC4wMCAtMC4wMDAgLT4gLTAuMDAwMDAKK211bHgwNDAgbXVsdGlwbHkgIDAwLjAwIC0wRS0zICAtPiAtMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKK211bHgwNDEgbXVsdGlwbHkgIDBFLTMgIC0wMC4wMCAtPiAtMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKK211bHgwNDIgbXVsdGlwbHkgLTUuMDAgIC0xRS0zICAtPiAgMC4wMDUwMAorbXVseDA0MyBtdWx0aXBseSAtMDAuMDAgLTAuMDAwIC0+ICAwLjAwMDAwCittdWx4MDQ0IG11bHRpcGx5IC0wMC4wMCAtMEUtMyAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCittdWx4MDQ1IG11bHRpcGx5IC0wRS0zICAtMDAuMDAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKK211bHgwNTAgbXVsdGlwbHkgMS4yMCAzICAgICAgICAtPiAzLjYwCittdWx4MDUxIG11bHRpcGx5IDcgICAgMyAgICAgICAgLT4gMjEKK211bHgwNTIgbXVsdGlwbHkgMC45ICAwLjggICAgICAtPiAwLjcyCittdWx4MDUzIG11bHRpcGx5IDAuOSAgLTAgICAgICAgLT4gLTAuMAorbXVseDA1NCBtdWx0aXBseSA2NTQzMjEgNjU0MzIxIC0+IDQuMjgxMzU5NzFFKzExICBJbmV4YWN0IFJvdW5kZWQKKworbXVseDA2MCBtdWx0aXBseSAxMjMuNDUgMWU3ICAtPiAgMS4yMzQ1RSs5CittdWx4MDYxIG11bHRpcGx5IDEyMy40NSAxZTggIC0+ICAxLjIzNDVFKzEwCittdWx4MDYyIG11bHRpcGx5IDEyMy40NSAxZSs5IC0+ICAxLjIzNDVFKzExCittdWx4MDYzIG11bHRpcGx5IDEyMy40NSAxZTEwIC0+ICAxLjIzNDVFKzEyCittdWx4MDY0IG11bHRpcGx5IDEyMy40NSAxZTExIC0+ICAxLjIzNDVFKzEzCittdWx4MDY1IG11bHRpcGx5IDEyMy40NSAxZTEyIC0+ICAxLjIzNDVFKzE0CittdWx4MDY2IG11bHRpcGx5IDEyMy40NSAxZTEzIC0+ICAxLjIzNDVFKzE1CisKKworLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzCitwcmVjaXNpb246IDkKK211bHgwODAgbXVsdGlwbHkgMC4xIDEyMzQ1Njc4OSAgICAgICAgICAtPiAxMjM0NTY3OC45CittdWx4MDgxIG11bHRpcGx5IDAuMSAxMjM0NTY3ODkxICAgICAgICAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorbXVseDA4MiBtdWx0aXBseSAwLjEgMTIzNDU2Nzg5MTIgICAgICAgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCittdWx4MDgzIG11bHRpcGx5IDAuMSAxMjM0NTY3ODkxMjM0NSAgICAgLT4gMS4yMzQ1Njc4OUUrMTIgSW5leGFjdCBSb3VuZGVkCittdWx4MDg0IG11bHRpcGx5IDAuMSAxMjM0NTY3ODkgICAgICAgICAgLT4gMTIzNDU2NzguOQorcHJlY2lzaW9uOiA4CittdWx4MDg1IG11bHRpcGx5IDAuMSAxMjM0NTY3ODkxMiAgICAgICAgLT4gMS4yMzQ1Njc5RSs5IEluZXhhY3QgUm91bmRlZAorbXVseDA4NiBtdWx0aXBseSAwLjEgMTIzNDU2Nzg5MTIzNDUgICAgIC0+IDEuMjM0NTY3OUUrMTIgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDcKK211bHgwODcgbXVsdGlwbHkgMC4xIDEyMzQ1Njc4OTEyICAgICAgICAtPiAxLjIzNDU2OEUrOSBJbmV4YWN0IFJvdW5kZWQKK211bHgwODggbXVsdGlwbHkgMC4xIDEyMzQ1Njc4OTEyMzQ1ICAgICAtPiAxLjIzNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogOQorbXVseDA5MCBtdWx0aXBseSAxMjM0NTY3ODkgICAgICAgICAgMC4xIC0+IDEyMzQ1Njc4LjkKK211bHgwOTEgbXVsdGlwbHkgMTIzNDU2Nzg5MSAgICAgICAgIDAuMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCittdWx4MDkyIG11bHRpcGx5IDEyMzQ1Njc4OTEyICAgICAgICAwLjEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK211bHgwOTMgbXVsdGlwbHkgMTIzNDU2Nzg5MTIzNDUgICAgIDAuMSAtPiAxLjIzNDU2Nzg5RSsxMiBJbmV4YWN0IFJvdW5kZWQKK211bHgwOTQgbXVsdGlwbHkgMTIzNDU2Nzg5ICAgICAgICAgIDAuMSAtPiAxMjM0NTY3OC45CitwcmVjaXNpb246IDgKK211bHgwOTUgbXVsdGlwbHkgMTIzNDU2Nzg5MTIgICAgICAgIDAuMSAtPiAxLjIzNDU2NzlFKzkgSW5leGFjdCBSb3VuZGVkCittdWx4MDk2IG11bHRpcGx5IDEyMzQ1Njc4OTEyMzQ1ICAgICAwLjEgLT4gMS4yMzQ1Njc5RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNworbXVseDA5NyBtdWx0aXBseSAxMjM0NTY3ODkxMiAgICAgICAgMC4xIC0+IDEuMjM0NTY4RSs5IEluZXhhY3QgUm91bmRlZAorbXVseDA5OCBtdWx0aXBseSAxMjM0NTY3ODkxMjM0NSAgICAgMC4xIC0+IDEuMjM0NTY4RSsxMiBJbmV4YWN0IFJvdW5kZWQKKworLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2FycmllcworbWF4ZXhwb25lbnQ6IDk5OTkKK21pbmV4cG9uZW50OiAtOTk5OQorcHJlY2lzaW9uOiAzMworbXVseDEwMSBtdWx0aXBseSA5IDkgICAtPiA4MQorbXVseDEwMiBtdWx0aXBseSA5IDkwICAgLT4gODEwCittdWx4MTAzIG11bHRpcGx5IDkgOTAwICAgLT4gODEwMAorbXVseDEwNCBtdWx0aXBseSA5IDkwMDAgICAtPiA4MTAwMAorbXVseDEwNSBtdWx0aXBseSA5IDkwMDAwICAgLT4gODEwMDAwCittdWx4MTA2IG11bHRpcGx5IDkgOTAwMDAwICAgLT4gODEwMDAwMAorbXVseDEwNyBtdWx0aXBseSA5IDkwMDAwMDAgICAtPiA4MTAwMDAwMAorbXVseDEwOCBtdWx0aXBseSA5IDkwMDAwMDAwICAgLT4gODEwMDAwMDAwCittdWx4MTA5IG11bHRpcGx5IDkgOTAwMDAwMDAwICAgLT4gODEwMDAwMDAwMAorbXVseDExMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMAorbXVseDExMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwCittdWx4MTEyIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMAorbXVseDExMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMAorbXVseDExNCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwCittdWx4MTE1IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMAorbXVseDExNiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMAorbXVseDExNyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwCittdWx4MTE4IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMAorbXVseDExOSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMAorbXVseDEyMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwCittdWx4MTIxIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMAorbXVseDEyMiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMAorbXVseDEyMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIHdpdGhvdXQgY2FycmllcworbXVseDEzMSBtdWx0aXBseSAzIDMgICAtPiA5CittdWx4MTMyIG11bHRpcGx5IDMgMzAgICAtPiA5MAorbXVseDEzMyBtdWx0aXBseSAzIDMwMCAgIC0+IDkwMAorbXVseDEzNCBtdWx0aXBseSAzIDMwMDAgICAtPiA5MDAwCittdWx4MTM1IG11bHRpcGx5IDMgMzAwMDAgICAtPiA5MDAwMAorbXVseDEzNiBtdWx0aXBseSAzIDMwMDAwMCAgIC0+IDkwMDAwMAorbXVseDEzNyBtdWx0aXBseSAzIDMwMDAwMDAgICAtPiA5MDAwMDAwCittdWx4MTM4IG11bHRpcGx5IDMgMzAwMDAwMDAgICAtPiA5MDAwMDAwMAorbXVseDEzOSBtdWx0aXBseSAzIDMwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMAorbXVseDE0MCBtdWx0aXBseSAzIDMwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwCittdWx4MTQxIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMAorbXVseDE0MiBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMAorbXVseDE0MyBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwCittdWx4MTQ0IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMAorbXVseDE0NSBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMAorbXVseDE0NiBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwCittdWx4MTQ3IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMAorbXVseDE0OCBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMAorbXVseDE0OSBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwCittdWx4MTUwIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMAorbXVseDE1MSBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMAorbXVseDE1MiBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwCittdWx4MTUzIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiA5CistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cvdW5kZXJmbG93CittdWx4MTcwIG11bHRpcGx5IDEgOWU5OTk5OTk5OTkgICAgLT4gOUUrOTk5OTk5OTk5CittdWx4MTcxIG11bHRpcGx5IDEgOS45ZTk5OTk5OTk5OSAgLT4gOS45RSs5OTk5OTk5OTkKK211bHgxNzIgbXVsdGlwbHkgMSA5Ljk5ZTk5OTk5OTk5OSAtPiA5Ljk5RSs5OTk5OTk5OTkKK211bHgxNzMgbXVsdGlwbHkgOWU5OTk5OTk5OTkgICAgMSAtPiA5RSs5OTk5OTk5OTkKK211bHgxNzQgbXVsdGlwbHkgOS45ZTk5OTk5OTk5OSAgMSAtPiA5LjlFKzk5OTk5OTk5OQorbXVseDE3NiBtdWx0aXBseSA5Ljk5ZTk5OTk5OTk5OSAxIC0+IDkuOTlFKzk5OTk5OTk5OQorbXVseDE3NyBtdWx0aXBseSAxIDkuOTk5OTk5OTllOTk5OTk5OTk5IC0+IDkuOTk5OTk5OTlFKzk5OTk5OTk5OQorbXVseDE3OCBtdWx0aXBseSA5Ljk5OTk5OTk5ZTk5OTk5OTk5OSAxIC0+IDkuOTk5OTk5OTlFKzk5OTk5OTk5OQorCittdWx4MTgwIG11bHRpcGx5IDAuMSA5ZS05OTk5OTk5OTggICAtPiA5RS05OTk5OTk5OTkKK211bHgxODEgbXVsdGlwbHkgMC4xIDk5ZS05OTk5OTk5OTggIC0+IDkuOUUtOTk5OTk5OTk4CittdWx4MTgyIG11bHRpcGx5IDAuMSA5OTllLTk5OTk5OTk5OCAtPiA5Ljk5RS05OTk5OTk5OTcKKworbXVseDE4MyBtdWx0aXBseSAwLjEgOWUtOTk5OTk5OTk4ICAgICAtPiA5RS05OTk5OTk5OTkKK211bHgxODQgbXVsdGlwbHkgMC4xIDk5ZS05OTk5OTk5OTggICAgLT4gOS45RS05OTk5OTk5OTgKK211bHgxODUgbXVsdGlwbHkgMC4xIDk5OWUtOTk5OTk5OTk4ICAgLT4gOS45OUUtOTk5OTk5OTk3CittdWx4MTg2IG11bHRpcGx5IDAuMSA5OTllLTk5OTk5OTk5NyAgIC0+IDkuOTlFLTk5OTk5OTk5NgorbXVseDE4NyBtdWx0aXBseSAwLjEgOTk5OWUtOTk5OTk5OTk3ICAtPiA5Ljk5OUUtOTk5OTk5OTk1CittdWx4MTg4IG11bHRpcGx5IDAuMSA5OTk5OWUtOTk5OTk5OTk3IC0+IDkuOTk5OUUtOTk5OTk5OTk0CisKK211bHgxOTAgbXVsdGlwbHkgMSA5ZS05OTk5OTk5OTggICAtPiA5RS05OTk5OTk5OTgKK211bHgxOTEgbXVsdGlwbHkgMSA5OWUtOTk5OTk5OTk4ICAtPiA5LjlFLTk5OTk5OTk5NworbXVseDE5MiBtdWx0aXBseSAxIDk5OWUtOTk5OTk5OTk4IC0+IDkuOTlFLTk5OTk5OTk5NgorbXVseDE5MyBtdWx0aXBseSA5ZS05OTk5OTk5OTggICAxIC0+IDlFLTk5OTk5OTk5OAorbXVseDE5NCBtdWx0aXBseSA5OWUtOTk5OTk5OTk4ICAxIC0+IDkuOUUtOTk5OTk5OTk3CittdWx4MTk1IG11bHRpcGx5IDk5OWUtOTk5OTk5OTk4IDEgLT4gOS45OUUtOTk5OTk5OTk2CisKK211bHgxOTYgbXVsdGlwbHkgMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMCAtPiAxRS05OTk5OTk5OTkKK211bHgxOTcgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTM5OTk5OTk5OSAtPiAxRS05OTk5OTk5OTkKK211bHgxOTggbXVsdGlwbHkgMS4yZS01OTk5OTk5OTkgMS4yZS00MDAwMDAwMDAgLT4gMS40NEUtOTk5OTk5OTk5CittdWx4MTk5IG11bHRpcGx5IDEuMmUtNjAwMDAwMDAwIDEuMmUtMzk5OTk5OTk5IC0+IDEuNDRFLTk5OTk5OTk5OQorCittdWx4MjAxIG11bHRpcGx5IDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAwIC0+IDFFKzk5OTk5OTk5OQorbXVseDIwMiBtdWx0aXBseSAxZTYwMDAwMDAwMCAxZTM5OTk5OTk5OSAtPiAxRSs5OTk5OTk5OTkKK211bHgyMDMgbXVsdGlwbHkgMS4yZTU5OTk5OTk5OSAxLjJlNDAwMDAwMDAwIC0+IDEuNDRFKzk5OTk5OTk5OQorbXVseDIwNCBtdWx0aXBseSAxLjJlNjAwMDAwMDAwIDEuMmUzOTk5OTk5OTkgLT4gMS40NEUrOTk5OTk5OTk5CisKKy0tIGxvbmcgb3BlcmFuZCB0cmlhbmdsZQorcHJlY2lzaW9uOiAzMworbXVseDI0NiBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4MzAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMyCittdWx4MjQ3IG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjgzICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzEKK211bHgyNDggbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTExOTkyOCAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzMAorbXVseDI0OSBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTMgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI5CittdWx4MjUwIG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5ICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjgKK211bHgyNTEgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTEyMCAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNworbXVseDI1MiBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTIgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI2CittdWx4MjUzIG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjUKK211bHgyNTQgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NSAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyNAorbXVseDI1NSBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTcgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIzCittdWx4MjU2IG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkyICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjIKK211bHgyNTcgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOSAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMQorbXVseDI1OCBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzIgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIwCittdWx4MjU5IG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTkKK211bHgyNjAgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NyAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxOAorbXVseDI2MSBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMzNzAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE3CittdWx4MjYyIG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM3ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTYKK211bHgyNjMgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMTkzNCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNQorbXVseDI2NCBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE0CittdWx4MjY1IG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5ICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTMKK211bHgyNjYgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwODAxMiAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMgorbXVseDI2NyBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDEgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDExCittdWx4MjY4IG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTAKK211bHgyNjkgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMjkwOCAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgOQorbXVseDI3MCBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTEgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA4CittdWx4MjcxIG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDcKK211bHgyNzIgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxNDU0MzMuMyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgNgorbXVseDI3MyBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDUKK211bHgyNzQgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxLjQ1NDNFKzUgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA0CittdWx4Mjc1IG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMS40NTRFKzUgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAzCittdWx4Mjc2IG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMS40NUUrNSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDIKK211bHgyNzcgbXVsdGlwbHkgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxLjVFKzUgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAxCittdWx4Mjc4IG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMUUrNSAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRlc3Qgc29tZSBlZGdlIGNhc2VzIHdpdGggZXhhY3Qgcm91bmRpbmcKK21heGV4cG9uZW50OiA5OTk5CittaW5leHBvbmVudDogLTk5OTkKK3ByZWNpc2lvbjogOQorbXVseDMwMSBtdWx0aXBseSA5IDkgICAtPiA4MQorbXVseDMwMiBtdWx0aXBseSA5IDkwICAgLT4gODEwCittdWx4MzAzIG11bHRpcGx5IDkgOTAwICAgLT4gODEwMAorbXVseDMwNCBtdWx0aXBseSA5IDkwMDAgICAtPiA4MTAwMAorbXVseDMwNSBtdWx0aXBseSA5IDkwMDAwICAgLT4gODEwMDAwCittdWx4MzA2IG11bHRpcGx5IDkgOTAwMDAwICAgLT4gODEwMDAwMAorbXVseDMwNyBtdWx0aXBseSA5IDkwMDAwMDAgICAtPiA4MTAwMDAwMAorbXVseDMwOCBtdWx0aXBseSA5IDkwMDAwMDAwICAgLT4gODEwMDAwMDAwCittdWx4MzA5IG11bHRpcGx5IDkgOTAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMEUrOSAgIFJvdW5kZWQKK211bHgzMTAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMEUrMTAgIFJvdW5kZWQKK211bHgzMTEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDBFKzExICBSb3VuZGVkCittdWx4MzEyIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMEUrMTIgIFJvdW5kZWQKK211bHgzMTMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMEUrMTMgIFJvdW5kZWQKK211bHgzMTQgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDBFKzE0ICBSb3VuZGVkCittdWx4MzE1IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMEUrMTUgIFJvdW5kZWQKK211bHgzMTYgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMEUrMTYgIFJvdW5kZWQKK211bHgzMTcgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDBFKzE3ICBSb3VuZGVkCittdWx4MzE4IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMEUrMTggIFJvdW5kZWQKK211bHgzMTkgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMEUrMTkgIFJvdW5kZWQKK211bHgzMjAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDBFKzIwICBSb3VuZGVkCittdWx4MzIxIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMEUrMjEgIFJvdW5kZWQKK211bHgzMjIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMEUrMjIgIFJvdW5kZWQKK211bHgzMjMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDBFKzIzICBSb3VuZGVkCisKKy0tIGZhc3RwYXRoIGJyZWFrZXJzCitwcmVjaXNpb246ICAgMjkKK211bHgzMzAgbXVsdGlwbHkgMS40OTE4MjQ2OTc2NDEyNzAzMTc4MjQ4NTI5NTI4MzcyMjQgMS4xMDUxNzA5MTgwNzU2NDc2MjQ4MTE3MDc4MjY0OTAyNDY1MTQ2NzU2Mjg2MTQ1NjI4ODM1MzczNDU3NDc2MDMgLT4gMS42NDg3MjEyNzA3MDAxMjgxNDY4NDg2NTA3ODc4IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAgIDU1CittdWx4MzMxIG11bHRpcGx5IDAuODk1ODM0MTM1Mjk2NTI4MjUwNjc2ODU0NTgyODc2NTExNzgwMzg3MzcxNzI4NDg5MTA0MDQyOCAwLjg5NTgzNDEzNTI5NjUyODI1MDY3Njg1NDU4Mjg3NjUxMTc4MDM4NzM3MTcyODQ4OTEwNDA0MjggLT4gMC44MDI1MTg3OTc5NjI0Nzg0ODI5ODQyNTUzODI5OTM0MDY5OTU1ODkwOTgzNjk2NzUyMjI4Mjk5IEluZXhhY3QgUm91bmRlZAorCisKKy0tIHRyeXplcm9zIGNhc2VzCitwcmVjaXNpb246ICAgNworcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5MgorbWluZXhwb25lbnQ6IC05MgorbXVseDUwNCAgbXVsdGlwbHkgIDBFLTYwIDEwMDBFLTYwICAtPiAwRS05OCBDbGFtcGVkCittdWx4NTA1ICBtdWx0aXBseSAgMTAwRSs2MCAwRSs2MCAgIC0+IDBFKzkyIENsYW1wZWQKKworLS0gbWl4ZWQgd2l0aCB6ZXJvcworbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3ByZWNpc2lvbjogOQorbXVseDU0MSBtdWx0aXBseSAgMCAgICAtMSAgICAgLT4gLTAKK211bHg1NDIgbXVsdGlwbHkgLTAgICAgLTEgICAgIC0+ICAwCittdWx4NTQzIG11bHRpcGx5ICAwICAgICAxICAgICAtPiAgMAorbXVseDU0NCBtdWx0aXBseSAtMCAgICAgMSAgICAgLT4gLTAKK211bHg1NDUgbXVsdGlwbHkgLTEgICAgIDAgICAgIC0+IC0wCittdWx4NTQ2IG11bHRpcGx5IC0xICAgIC0wICAgICAtPiAgMAorbXVseDU0NyBtdWx0aXBseSAgMSAgICAgMCAgICAgLT4gIDAKK211bHg1NDggbXVsdGlwbHkgIDEgICAgLTAgICAgIC0+IC0wCisKK211bHg1NTEgbXVsdGlwbHkgIDAuMCAgLTEgICAgIC0+IC0wLjAKK211bHg1NTIgbXVsdGlwbHkgLTAuMCAgLTEgICAgIC0+ICAwLjAKK211bHg1NTMgbXVsdGlwbHkgIDAuMCAgIDEgICAgIC0+ICAwLjAKK211bHg1NTQgbXVsdGlwbHkgLTAuMCAgIDEgICAgIC0+IC0wLjAKK211bHg1NTUgbXVsdGlwbHkgLTEuMCAgIDAgICAgIC0+IC0wLjAKK211bHg1NTYgbXVsdGlwbHkgLTEuMCAgLTAgICAgIC0+ICAwLjAKK211bHg1NTcgbXVsdGlwbHkgIDEuMCAgIDAgICAgIC0+ICAwLjAKK211bHg1NTggbXVsdGlwbHkgIDEuMCAgLTAgICAgIC0+IC0wLjAKKworbXVseDU2MSBtdWx0aXBseSAgMCAgICAtMS4wICAgLT4gLTAuMAorbXVseDU2MiBtdWx0aXBseSAtMCAgICAtMS4wICAgLT4gIDAuMAorbXVseDU2MyBtdWx0aXBseSAgMCAgICAgMS4wICAgLT4gIDAuMAorbXVseDU2NCBtdWx0aXBseSAtMCAgICAgMS4wICAgLT4gLTAuMAorbXVseDU2NSBtdWx0aXBseSAtMSAgICAgMC4wICAgLT4gLTAuMAorbXVseDU2NiBtdWx0aXBseSAtMSAgICAtMC4wICAgLT4gIDAuMAorbXVseDU2NyBtdWx0aXBseSAgMSAgICAgMC4wICAgLT4gIDAuMAorbXVseDU2OCBtdWx0aXBseSAgMSAgICAtMC4wICAgLT4gLTAuMAorCittdWx4NTcxIG11bHRpcGx5ICAwLjAgIC0xLjAgICAtPiAtMC4wMAorbXVseDU3MiBtdWx0aXBseSAtMC4wICAtMS4wICAgLT4gIDAuMDAKK211bHg1NzMgbXVsdGlwbHkgIDAuMCAgIDEuMCAgIC0+ICAwLjAwCittdWx4NTc0IG11bHRpcGx5IC0wLjAgICAxLjAgICAtPiAtMC4wMAorbXVseDU3NSBtdWx0aXBseSAtMS4wICAgMC4wICAgLT4gLTAuMDAKK211bHg1NzYgbXVsdGlwbHkgLTEuMCAgLTAuMCAgIC0+ICAwLjAwCittdWx4NTc3IG11bHRpcGx5ICAxLjAgICAwLjAgICAtPiAgMC4wMAorbXVseDU3OCBtdWx0aXBseSAgMS4wICAtMC4wICAgLT4gLTAuMDAKKworCistLSBTcGVjaWFscworbXVseDU4MCBtdWx0aXBseSAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5CittdWx4NTgxIG11bHRpcGx5ICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKK211bHg1ODIgbXVsdGlwbHkgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorbXVseDU4MyBtdWx0aXBseSAgSW5mICAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg1ODQgbXVsdGlwbHkgIEluZiAgIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NTg1IG11bHRpcGx5ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKK211bHg1ODYgbXVsdGlwbHkgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorbXVseDU4NyBtdWx0aXBseSAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CittdWx4NTg4IG11bHRpcGx5IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkKK211bHg1ODkgbXVsdGlwbHkgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorbXVseDU5MCBtdWx0aXBseSAtMSAgICAgSW5mICAgLT4gLUluZmluaXR5CittdWx4NTkxIG11bHRpcGx5IC0wICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDU5MiBtdWx0aXBseSAgMCAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg1OTMgbXVsdGlwbHkgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQorbXVseDU5NCBtdWx0aXBseSAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5CittdWx4NTk1IG11bHRpcGx5ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworbXVseDYwMCBtdWx0aXBseSAtSW5mICAtSW5mICAgLT4gIEluZmluaXR5CittdWx4NjAxIG11bHRpcGx5IC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKK211bHg2MDIgbXVsdGlwbHkgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorbXVseDYwMyBtdWx0aXBseSAtSW5mICAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2MDQgbXVsdGlwbHkgLUluZiAgIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NjA1IG11bHRpcGx5IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK211bHg2MDYgbXVsdGlwbHkgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorbXVseDYwNyBtdWx0aXBseSAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5CittdWx4NjA4IG11bHRpcGx5IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkKK211bHg2MDkgbXVsdGlwbHkgLUluZiAgLUluZiAgIC0+ICBJbmZpbml0eQorbXVseDYxMCBtdWx0aXBseSAtMSAgICAtSW5mICAgLT4gIEluZmluaXR5CittdWx4NjExIG11bHRpcGx5IC0wICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDYxMiBtdWx0aXBseSAgMCAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2MTMgbXVsdGlwbHkgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQorbXVseDYxNCBtdWx0aXBseSAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5CittdWx4NjE1IG11bHRpcGx5ICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKKworbXVseDYyMSBtdWx0aXBseSAgTmFOIC1JbmYgICAgLT4gIE5hTgorbXVseDYyMiBtdWx0aXBseSAgTmFOIC0xMDAwICAgLT4gIE5hTgorbXVseDYyMyBtdWx0aXBseSAgTmFOIC0xICAgICAgLT4gIE5hTgorbXVseDYyNCBtdWx0aXBseSAgTmFOIC0wICAgICAgLT4gIE5hTgorbXVseDYyNSBtdWx0aXBseSAgTmFOICAwICAgICAgLT4gIE5hTgorbXVseDYyNiBtdWx0aXBseSAgTmFOICAxICAgICAgLT4gIE5hTgorbXVseDYyNyBtdWx0aXBseSAgTmFOICAxMDAwICAgLT4gIE5hTgorbXVseDYyOCBtdWx0aXBseSAgTmFOICBJbmYgICAgLT4gIE5hTgorbXVseDYyOSBtdWx0aXBseSAgTmFOICBOYU4gICAgLT4gIE5hTgorbXVseDYzMCBtdWx0aXBseSAtSW5mICBOYU4gICAgLT4gIE5hTgorbXVseDYzMSBtdWx0aXBseSAtMTAwMCBOYU4gICAgLT4gIE5hTgorbXVseDYzMiBtdWx0aXBseSAtMSAgICBOYU4gICAgLT4gIE5hTgorbXVseDYzMyBtdWx0aXBseSAtMCAgICBOYU4gICAgLT4gIE5hTgorbXVseDYzNCBtdWx0aXBseSAgMCAgICBOYU4gICAgLT4gIE5hTgorbXVseDYzNSBtdWx0aXBseSAgMSAgICBOYU4gICAgLT4gIE5hTgorbXVseDYzNiBtdWx0aXBseSAgMTAwMCBOYU4gICAgLT4gIE5hTgorbXVseDYzNyBtdWx0aXBseSAgSW5mICBOYU4gICAgLT4gIE5hTgorCittdWx4NjQxIG11bHRpcGx5ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY0MiBtdWx0aXBseSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NDMgbXVsdGlwbHkgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NjQ0IG11bHRpcGx5ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY0NSBtdWx0aXBseSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NDYgbXVsdGlwbHkgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NjQ3IG11bHRpcGx5ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY0OCBtdWx0aXBseSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NDkgbXVsdGlwbHkgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NjUwIG11bHRpcGx5ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY1MSBtdWx0aXBseSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NTIgbXVsdGlwbHkgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NjUzIG11bHRpcGx5IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY1NCBtdWx0aXBseSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NTUgbXVsdGlwbHkgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NjU2IG11bHRpcGx5ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY1NyBtdWx0aXBseSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NTggbXVsdGlwbHkgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCittdWx4NjU5IG11bHRpcGx5ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCittdWx4NjYxIG11bHRpcGx5ICBOYU45IC1JbmYgICAtPiAgTmFOOQorbXVseDY2MiBtdWx0aXBseSAgTmFOOCAgOTk5ICAgLT4gIE5hTjgKK211bHg2NjMgbXVsdGlwbHkgIE5hTjcxIEluZiAgIC0+ICBOYU43MQorbXVseDY2NCBtdWx0aXBseSAgTmFONiAgTmFONSAgLT4gIE5hTjYKK211bHg2NjUgbXVsdGlwbHkgLUluZiAgIE5hTjQgIC0+ICBOYU40CittdWx4NjY2IG11bHRpcGx5IC05OTkgICBOYU4zMyAtPiAgTmFOMzMKK211bHg2NjcgbXVsdGlwbHkgIEluZiAgIE5hTjIgIC0+ICBOYU4yCisKK211bHg2NzEgbXVsdGlwbHkgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY3MiBtdWx0aXBseSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCittdWx4NjczIG11bHRpcGx5ICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NzQgbXVsdGlwbHkgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY3NSBtdWx0aXBseSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCittdWx4Njc2IG11bHRpcGx5IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KK211bHg2NzcgbXVsdGlwbHkgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY3OCBtdWx0aXBseSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCittdWx4Njc5IG11bHRpcGx5ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KKworbXVseDY4MSBtdWx0aXBseSAtTmFOOSAtSW5mICAgLT4gLU5hTjkKK211bHg2ODIgbXVsdGlwbHkgLU5hTjggIDk5OSAgIC0+IC1OYU44CittdWx4NjgzIG11bHRpcGx5IC1OYU43MSBJbmYgICAtPiAtTmFONzEKK211bHg2ODQgbXVsdGlwbHkgLU5hTjYgLU5hTjUgIC0+IC1OYU42CittdWx4Njg1IG11bHRpcGx5IC1JbmYgIC1OYU40ICAtPiAtTmFONAorbXVseDY4NiBtdWx0aXBseSAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzCittdWx4Njg3IG11bHRpcGx5ICBJbmYgIC1OYU4yICAtPiAtTmFOMgorCittdWx4NjkxIG11bHRpcGx5IC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK211bHg2OTIgbXVsdGlwbHkgLXNOYU45OCAtMTEgICAgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY5MyBtdWx0aXBseSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCittdWx4Njk0IG11bHRpcGx5IC1zTmFOMTYgLXNOYU45NCAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK211bHg2OTUgbXVsdGlwbHkgLU5hTjk1ICAtc05hTjkzIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY5NiBtdWx0aXBseSAtSW5mICAgIC1zTmFOOTIgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCittdWx4Njk3IG11bHRpcGx5ICAwODggICAgLXNOYU45MSAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK211bHg2OTggbXVsdGlwbHkgIEluZiAgICAtc05hTjkwIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgorbXVseDY5OSBtdWx0aXBseSAtTmFOICAgIC1zTmFOODkgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCisKK211bHg3MDEgbXVsdGlwbHkgLU5hTiAgLUluZiAgIC0+IC1OYU4KK211bHg3MDIgbXVsdGlwbHkgLU5hTiAgIDk5OSAgIC0+IC1OYU4KK211bHg3MDMgbXVsdGlwbHkgLU5hTiAgIEluZiAgIC0+IC1OYU4KK211bHg3MDQgbXVsdGlwbHkgLU5hTiAgLU5hTiAgIC0+IC1OYU4KK211bHg3MDUgbXVsdGlwbHkgLUluZiAgLU5hTjAgIC0+IC1OYU4KK211bHg3MDYgbXVsdGlwbHkgLTk5OSAgLU5hTiAgIC0+IC1OYU4KK211bHg3MDcgbXVsdGlwbHkgIEluZiAgLU5hTiAgIC0+IC1OYU4KKworbXVseDcxMSBtdWx0aXBseSAtc05hTiAgIC1JbmYgICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorbXVseDcxMiBtdWx0aXBseSAtc05hTiAgIC0xMSAgICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorbXVseDcxMyBtdWx0aXBseSAtc05hTjAwICBOYU4gICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorbXVseDcxNCBtdWx0aXBseSAtc05hTiAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorbXVseDcxNSBtdWx0aXBseSAtTmFOICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorbXVseDcxNiBtdWx0aXBseSAtSW5mICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorbXVseDcxNyBtdWx0aXBseSAgMDg4ICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorbXVseDcxOCBtdWx0aXBseSAgSW5mICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorbXVseDcxOSBtdWx0aXBseSAtTmFOICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIG5vdGUgc3Vibm9ybWFsIHJlc3VsdHMKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CittdWx4NzMwIG11bHRpcGx5ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAtPiBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK211bHg3MzEgbXVsdGlwbHkgOUUrOTk5OTk5OTk5ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+IEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorbXVseDczMiBtdWx0aXBseSArMC4xMDAgOUUtOTk5OTk5OTk5IC0+IDkuMDBFLTEwMDAwMDAwMDAgU3Vibm9ybWFsCittdWx4NzMzIG11bHRpcGx5IDlFLTk5OTk5OTk5OSArMC4xMDAgLT4gOS4wMEUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK211bHg3MzUgbXVsdGlwbHkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK211bHg3MzYgbXVsdGlwbHkgOUUrOTk5OTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK211bHg3MzcgbXVsdGlwbHkgLTAuMTAwIDlFLTk5OTk5OTk5OSAtPiAtOS4wMEUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK211bHg3MzggbXVsdGlwbHkgOUUtOTk5OTk5OTk5IC0wLjEwMCAtPiAtOS4wMEUtMTAwMDAwMDAwMCBTdWJub3JtYWwKKworbXVseDczOSBtdWx0aXBseSAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAxIC0+IDFFLTEwMDAwMDAwMDAgU3Vibm9ybWFsCittdWx4NzQwIG11bHRpcGx5IDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDAgLT4gMUUtOTk5OTk5OTk5CittdWx4NzQxIG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDAgLT4gMUUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK211bHg3NDIgbXVsdGlwbHkgOWUtOTk5OTk5OTk4IDAuMDEgLT4gOUUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK211bHg3NDMgbXVsdGlwbHkgOWUtOTk5OTk5OTk4IDAuMSAgLT4gOUUtOTk5OTk5OTk5CittdWx4NzQ0IG11bHRpcGx5IDAuMDEgOWUtOTk5OTk5OTk4IC0+IDlFLTEwMDAwMDAwMDAgU3Vibm9ybWFsCittdWx4NzQ1IG11bHRpcGx5IDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAxIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorbXVseDc0NiBtdWx0aXBseSAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMCAtPiAxRSs5OTk5OTk5OTkKK211bHg3NDcgbXVsdGlwbHkgMWU2MDAwMDAwMDAgMWU0MDAwMDAwMDAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCittdWx4NzQ4IG11bHRpcGx5IDllOTk5OTk5OTk4IDEwMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCittdWx4NzQ5IG11bHRpcGx5IDllOTk5OTk5OTk4IDEwICAgLT4gOS4wRSs5OTk5OTk5OTkKK211bHg3NTAgbXVsdGlwbHkgMTAwICA5ZTk5OTk5OTk5OCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKy0tIHNpZ25zCittdWx4NzUxIG11bHRpcGx5ICAxZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCittdWx4NzUyIG11bHRpcGx5ICAxZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCittdWx4NzUzIG11bHRpcGx5IC0xZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCittdWx4NzU0IG11bHRpcGx5IC0xZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCittdWx4NzU1IG11bHRpcGx5ICAxZS03Nzc3Nzc3NzcgIDFlLTQxMTExMTExMSAtPiAgMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCittdWx4NzU2IG11bHRpcGx5ICAxZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCittdWx4NzU3IG11bHRpcGx5IC0xZS03Nzc3Nzc3NzcgIDFlLTQxMTExMTExMSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCittdWx4NzU4IG11bHRpcGx5IC0xZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAgMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQorcHJlY2lzaW9uOiA5CittdWx4NzYwIG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDEgLT4gMUUtMTAwMDAwMDAwMSBTdWJub3JtYWwKK211bHg3NjEgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwMiAtPiAxRS0xMDAwMDAwMDAyIFN1Ym5vcm1hbAorbXVseDc2MiBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDAzIC0+IDFFLTEwMDAwMDAwMDMgU3Vibm9ybWFsCittdWx4NzYzIG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDQgLT4gMUUtMTAwMDAwMDAwNCBTdWJub3JtYWwKK211bHg3NjQgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwNSAtPiAxRS0xMDAwMDAwMDA1IFN1Ym5vcm1hbAorbXVseDc2NSBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDA2IC0+IDFFLTEwMDAwMDAwMDYgU3Vibm9ybWFsCittdWx4NzY2IG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDcgLT4gMUUtMTAwMDAwMDAwNyBTdWJub3JtYWwKK211bHg3NjcgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwOCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK211bHg3NjggbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwOSAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK211bHg3NjkgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAxMCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKy0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10KK211bHg3NzAgbXVsdGlwbHkgMWUrNjAwMDAwMDAwIDFlKzQwMDAwMDAwMSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK211bHg3NzEgbXVsdGlwbHkgMWUrNjAwMDAwMDAwIDFlKzQwMDAwMDAwMiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK211bHg3NzIgbXVsdGlwbHkgMWUrNjAwMDAwMDAwIDFlKzQwMDAwMDAwMyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK211bHg3NzMgbXVsdGlwbHkgMWUrNjAwMDAwMDAwIDFlKzQwMDAwMDAwNCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK211bHg3NzQgbXVsdGlwbHkgMWUrNjAwMDAwMDAwIDFlKzQwMDAwMDAwNSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK211bHg3NzUgbXVsdGlwbHkgMWUrNjAwMDAwMDAwIDFlKzQwMDAwMDAwNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK211bHg3NzYgbXVsdGlwbHkgMWUrNjAwMDAwMDAwIDFlKzQwMDAwMDAwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK211bHg3NzcgbXVsdGlwbHkgMWUrNjAwMDAwMDAwIDFlKzQwMDAwMDAwOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK211bHg3NzggbXVsdGlwbHkgMWUrNjAwMDAwMDAwIDFlKzQwMDAwMDAwOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK211bHg3NzkgbXVsdGlwbHkgMWUrNjAwMDAwMDAwIDFlKzQwMDAwMDAxMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gJ3N1Ym5vcm1hbCcgdGVzdCBlZGdlIGNvbmRpdGlvbiBhdCBoaWdoZXIgcHJlY2lzaW9ucworcHJlY2lzaW9uOiA5OQorbXVseDc4MCBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDA3IC0+IDFFLTEwMDAwMDAwMDcgU3Vibm9ybWFsCittdWx4NzgxIG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDggLT4gMUUtMTAwMDAwMDAwOCBTdWJub3JtYWwKK211bHg3ODIgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDA5NyAtPiAxRS0xMDAwMDAwMDk3IFN1Ym5vcm1hbAorbXVseDc4MyBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDk4IC0+IDBFLTEwMDAwMDAwOTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcHJlY2lzaW9uOiA5OTkKK211bHg3ODQgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDk5NyAtPiAxRS0xMDAwMDAwOTk3IFN1Ym5vcm1hbAorbXVseDc4NSBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDAwOTk4IC0+IDBFLTEwMDAwMDA5OTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBmb2xsb3dpbmcgdGVzdGNhc2VzIFt0aHJvdWdoIG11bHg4MDBdIG5vdCB5ZXQgcnVuIGFnYWluc3QgY29kZQorcHJlY2lzaW9uOiA5OTk5CittdWx4Nzg2IG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00MDAwMDk5OTcgLT4gMUUtMTAwMDAwOTk5NyBTdWJub3JtYWwKK211bHg3ODcgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwOTk5OCAtPiAwRS0xMDAwMDA5OTk3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3ByZWNpc2lvbjogOTk5OTkKK211bHg3ODggbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDA5OTk5NyAtPiAxRS0xMDAwMDk5OTk3IFN1Ym5vcm1hbAorbXVseDc4OSBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwMDk5OTk4IC0+IDBFLTEwMDAwOTk5OTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcHJlY2lzaW9uOiA5OTk5OTkKK211bHg3OTAgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDk5OTk5NyAtPiAxRS0xMDAwOTk5OTk3IFN1Ym5vcm1hbAorbXVseDc5MSBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDAwOTk5OTk4IC0+IDBFLTEwMDA5OTk5OTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcHJlY2lzaW9uOiA5OTk5OTk5CittdWx4NzkyIG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00MDk5OTk5OTcgLT4gMUUtMTAwOTk5OTk5NyBTdWJub3JtYWwKK211bHg3OTMgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwOTk5OTk5OCAtPiAwRS0xMDA5OTk5OTk3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3ByZWNpc2lvbjogOTk5OTk5OTkKK211bHg3OTQgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQ5OTk5OTk5NyAtPiAxRS0xMDk5OTk5OTk3IFN1Ym5vcm1hbAorbXVseDc5NSBtdWx0aXBseSAxZS02MDAwMDAwMDAgMWUtNDk5OTk5OTk4IC0+IDBFLTEwOTk5OTk5OTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcHJlY2lzaW9uOiA5OTk5OTk5OTkKK211bHg3OTYgbXVsdGlwbHkgMWUtOTk5OTk5OTk5IDFlLTk5OTk5OTk5NyAtPiAxRS0xOTk5OTk5OTk2IFN1Ym5vcm1hbAorbXVseDc5NyBtdWx0aXBseSAxZS05OTk5OTk5OTkgMWUtOTk5OTk5OTk4IC0+IDFFLTE5OTk5OTk5OTcgU3Vibm9ybWFsCittdWx4Nzk4IG11bHRpcGx5IDFlLTk5OTk5OTk5OSAxZS05OTk5OTk5OTkgLT4gMEUtMTk5OTk5OTk5NyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCittdWx4Nzk5IG11bHRpcGx5IDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDcgLT4gMUUtMTAwMDAwMDAwNyBTdWJub3JtYWwKK211bHg4MDAgbXVsdGlwbHkgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwOCAtPiAxRS0xMDAwMDAwMDA4IFN1Ym5vcm1hbAorCistLSB0ZXN0IHN1Ym5vcm1hbHMgcm91bmRpbmcKK3ByZWNpc2lvbjogICA1CittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCittdWx4ODAxIG11bHRpcGx5ICAxLjAwMDBFLTk5OSAgMSAgICAgLT4gMS4wMDAwRS05OTkKK211bHg4MDIgbXVsdGlwbHkgIDEuMDAwRS05OTkgICAxZS0xICAtPiAxLjAwMEUtMTAwMCBTdWJub3JtYWwKK211bHg4MDMgbXVsdGlwbHkgIDEuMDBFLTk5OSAgICAxZS0yICAtPiAxLjAwRS0xMDAxICBTdWJub3JtYWwKK211bHg4MDQgbXVsdGlwbHkgIDEuMEUtOTk5ICAgICAxZS0zICAtPiAxLjBFLTEwMDIgICBTdWJub3JtYWwKK211bHg4MDUgbXVsdGlwbHkgIDEuMEUtOTk5ICAgICAxZS00ICAtPiAxRS0xMDAzICAgICBTdWJub3JtYWwgUm91bmRlZAorbXVseDgwNiBtdWx0aXBseSAgMS4zRS05OTkgICAgIDFlLTQgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCittdWx4ODA3IG11bHRpcGx5ICAxLjVFLTk5OSAgICAgMWUtNCAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK211bHg4MDggbXVsdGlwbHkgIDEuN0UtOTk5ICAgICAxZS00ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbXVseDgwOSBtdWx0aXBseSAgMi4zRS05OTkgICAgIDFlLTQgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCittdWx4ODEwIG11bHRpcGx5ICAyLjVFLTk5OSAgICAgMWUtNCAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK211bHg4MTEgbXVsdGlwbHkgIDIuN0UtOTk5ICAgICAxZS00ICAtPiAzRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbXVseDgxMiBtdWx0aXBseSAgMS40OUUtOTk5ICAgIDFlLTQgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCittdWx4ODEzIG11bHRpcGx5ICAxLjUwRS05OTkgICAgMWUtNCAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK211bHg4MTQgbXVsdGlwbHkgIDEuNTFFLTk5OSAgICAxZS00ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbXVseDgxNSBtdWx0aXBseSAgMi40OUUtOTk5ICAgIDFlLTQgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCittdWx4ODE2IG11bHRpcGx5ICAyLjUwRS05OTkgICAgMWUtNCAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK211bHg4MTcgbXVsdGlwbHkgIDIuNTFFLTk5OSAgICAxZS00ICAtPiAzRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCittdWx4ODE4IG11bHRpcGx5ICAxRS05OTkgICAgICAgMWUtNCAgLT4gMUUtMTAwMyAgICAgU3Vibm9ybWFsCittdWx4ODE5IG11bHRpcGx5ICAzRS05OTkgICAgICAgMWUtNSAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbXVseDgyMCBtdWx0aXBseSAgNUUtOTk5ICAgICAgIDFlLTUgIC0+IDBFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK211bHg4MjEgbXVsdGlwbHkgIDdFLTk5OSAgICAgICAxZS01ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbXVseDgyMiBtdWx0aXBseSAgOUUtOTk5ICAgICAgIDFlLTUgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCittdWx4ODIzIG11bHRpcGx5ICA5LjlFLTk5OSAgICAgMWUtNSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworbXVseDgyNCBtdWx0aXBseSAgMUUtOTk5ICAgICAgLTFlLTQgIC0+IC0xRS0xMDAzICAgIFN1Ym5vcm1hbAorbXVseDgyNSBtdWx0aXBseSAgM0UtOTk5ICAgICAgLTFlLTUgIC0+IC0wRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK211bHg4MjYgbXVsdGlwbHkgLTVFLTk5OSAgICAgICAxZS01ICAtPiAtMEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCittdWx4ODI3IG11bHRpcGx5ICA3RS05OTkgICAgICAtMWUtNSAgLT4gLTFFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK211bHg4MjggbXVsdGlwbHkgLTlFLTk5OSAgICAgICAxZS01ICAtPiAtMUUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbXVseDgyOSBtdWx0aXBseSAgOS45RS05OTkgICAgLTFlLTUgIC0+IC0xRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCittdWx4ODMwIG11bHRpcGx5ICAzLjBFLTk5OSAgICAtMWUtNSAgLT4gLTBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCittdWx4ODMxIG11bHRpcGx5ICAxLjBFLTUwMSAgICAgMWUtNTAxIC0+IDEuMEUtMTAwMiAgIFN1Ym5vcm1hbAorbXVseDgzMiBtdWx0aXBseSAgMi4wRS01MDEgICAgIDJlLTUwMSAtPiA0LjBFLTEwMDIgICBTdWJub3JtYWwKK211bHg4MzMgbXVsdGlwbHkgIDQuMEUtNTAxICAgICA0ZS01MDEgLT4gMS42MEUtMTAwMSAgU3Vibm9ybWFsCittdWx4ODM0IG11bHRpcGx5IDEwLjBFLTUwMSAgICAxMGUtNTAxIC0+IDEuMDAwRS0xMDAwIFN1Ym5vcm1hbAorbXVseDgzNSBtdWx0aXBseSAzMC4wRS01MDEgICAgMzBlLTUwMSAtPiA5LjAwMEUtMTAwMCBTdWJub3JtYWwKK211bHg4MzYgbXVsdGlwbHkgNDAuMEUtNTAxICAgIDQwZS01MDEgLT4gMS42MDAwRS05OTkKKworLS0gc3F1YXJlcworbXVseDg0MCBtdWx0aXBseSAgMUUtNTAyICAgICAgIDFlLTUwMiAtPiAwRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCittdWx4ODQxIG11bHRpcGx5ICAxRS01MDEgICAgICAgMWUtNTAxIC0+IDFFLTEwMDIgICAgIFN1Ym5vcm1hbAorbXVseDg0MiBtdWx0aXBseSAgMkUtNTAxICAgICAgIDJlLTUwMSAtPiA0RS0xMDAyICAgICBTdWJub3JtYWwKK211bHg4NDMgbXVsdGlwbHkgIDRFLTUwMSAgICAgICA0ZS01MDEgLT4gMS42RS0xMDAxICAgU3Vibm9ybWFsCittdWx4ODQ0IG11bHRpcGx5IDEwRS01MDEgICAgICAxMGUtNTAxIC0+IDEuMDBFLTEwMDAgIFN1Ym5vcm1hbAorbXVseDg0NSBtdWx0aXBseSAzMEUtNTAxICAgICAgMzBlLTUwMSAtPiA5LjAwRS0xMDAwICBTdWJub3JtYWwKK211bHg4NDYgbXVsdGlwbHkgNDBFLTUwMSAgICAgIDQwZS01MDEgLT4gMS42MDBFLTk5OQorCistLSBjdWJlcworbXVseDg1MCBtdWx0aXBseSAgMUUtNjcwICAgICAxZS0zMzUgLT4gMEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCittdWx4ODUxIG11bHRpcGx5ICAxRS02NjggICAgIDFlLTMzNCAtPiAxRS0xMDAyICAgIFN1Ym5vcm1hbAorbXVseDg1MiBtdWx0aXBseSAgNEUtNjY4ICAgICAyZS0zMzQgLT4gOEUtMTAwMiAgICBTdWJub3JtYWwKK211bHg4NTMgbXVsdGlwbHkgIDlFLTY2OCAgICAgM2UtMzM0IC0+IDIuN0UtMTAwMSAgU3Vibm9ybWFsCittdWx4ODU0IG11bHRpcGx5IDE2RS02NjggICAgIDRlLTMzNCAtPiA2LjRFLTEwMDEgIFN1Ym5vcm1hbAorbXVseDg1NSBtdWx0aXBseSAyNUUtNjY4ICAgICA1ZS0zMzQgLT4gMS4yNUUtMTAwMCBTdWJub3JtYWwKK211bHg4NTYgbXVsdGlwbHkgMTBFLTY2OCAgIDEwMGUtMzM0IC0+IDEuMDAwRS05OTkKKworLS0gdGVzdCBkZXJpdmVkIGZyb20gcmVzdWx0IG9mIDAuMDk5ICoqIDk5OSBhdCAxNSBkaWdpdHMgd2l0aCB1bmxpbWl0ZWQgZXhwb25lbnQKK3ByZWNpc2lvbjogMTkKK211bHg4NjAgbXVsdGlwbHkgIDY2MzY4NTE1NTc5OTQ1Nzg3MTZFLTUyMCA2NjM2ODUxNTU3OTk0NTc4NzE2RS01MjAgLT4gNC40MDQ3Nzk4NjAyODU1MUUtMTAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSBMb25nIG9wZXJhbmQgb3ZlcmZsb3cgbWF5IGJlIGEgZGlmZmVyZW50IHBhdGgKK3ByZWNpc2lvbjogMworbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK211bHg4NzAgbXVsdGlwbHkgMSAgOS45OTlFKzk5OTk5OTk5OSAgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK211bHg4NzEgbXVsdGlwbHkgMSAtOS45OTlFKzk5OTk5OTk5OSAgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK211bHg4NzIgbXVsdGlwbHkgICAgOS45OTlFKzk5OTk5OTk5OSAxIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK211bHg4NzMgbXVsdGlwbHkgICAtOS45OTlFKzk5OTk5OTk5OSAxIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKKworLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK3ByZWNpc2lvbjogICA1CittYXhleHBvbmVudDogNzkKK21pbmV4cG9uZW50OiAtNzkKK211bHg4ODEgbXVsdGlwbHkgIDEuMjM0N0UtNDAgIDEuMjM0N0UtNDAgIC0+ICAxLjUyNEUtODAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CittdWx4ODgyIG11bHRpcGx5ICAxLjIzNEUtNDAgIDEuMjM0RS00MCAgICAtPiAgMS41MjNFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbXVseDg4MyBtdWx0aXBseSAgMS4yM0UtNDAgICAxLjIzRS00MCAgICAgLT4gIDEuNTEzRS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK211bHg4ODQgbXVsdGlwbHkgIDEuMkUtNDAgICAgMS4yRS00MCAgICAgIC0+ICAxLjQ0RS04MCAgIFN1Ym5vcm1hbAorbXVseDg4NSBtdWx0aXBseSAgMS4yRS00MCAgICAxLjJFLTQxICAgICAgLT4gIDEuNDRFLTgxICAgU3Vibm9ybWFsCittdWx4ODg2IG11bHRpcGx5ICAxLjJFLTQwICAgIDEuMkUtNDIgICAgICAtPiAgMS40RS04MiAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworbXVseDg4NyBtdWx0aXBseSAgMS4yRS00MCAgICAxLjNFLTQyICAgICAgLT4gIDEuNkUtODIgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKK211bHg4ODggbXVsdGlwbHkgIDEuM0UtNDAgICAgMS4zRS00MiAgICAgIC0+ICAxLjdFLTgyICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93CittdWx4ODg5IG11bHRpcGx5ICAxLjNFLTQwICAgIDEuM0UtNDMgICAgICAtPiAgICAyRS04MyAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworbXVseDg5MCBtdWx0aXBseSAgMS4zRS00MSAgICAxLjNFLTQzICAgICAgLT4gICAgMEUtODMgICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdworCittdWx4ODkxIG11bHRpcGx5ICAxLjIzNDVFLTM5ICAgMS4yMzRFLTQwICAtPiAgMS41MjM0RS03OSBJbmV4YWN0IFJvdW5kZWQKK211bHg4OTIgbXVsdGlwbHkgIDEuMjM0NTZFLTM5ICAxLjIzNEUtNDAgIC0+ICAxLjUyMzRFLTc5IEluZXhhY3QgUm91bmRlZAorbXVseDg5MyBtdWx0aXBseSAgMS4yMzQ1RS00MCAgIDEuMjM0RS00MCAgLT4gIDEuNTIzRS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK211bHg4OTQgbXVsdGlwbHkgIDEuMjM0NTZFLTQwICAxLjIzNEUtNDAgIC0+ICAxLjUyM0UtODAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CittdWx4ODk1IG11bHRpcGx5ICAxLjIzNDVFLTQxICAgMS4yMzRFLTQwICAtPiAgMS41MkUtODEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworbXVseDg5NiBtdWx0aXBseSAgMS4yMzQ1NkUtNDEgIDEuMjM0RS00MCAgLT4gIDEuNTJFLTgxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKKworLS0gTm93IGV4cGxvcmUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgbm9ybWFsIHJlc3VsdCB3aXRoIFVuZGVyZmxvdworcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKKworbXVseDkwMCBtdWx0aXBseSAgMC4zMDAwMDAwMDAwRS0xOTEgMC4zMDAwMDAwMDAwRS0xOTEgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkCittdWx4OTAxIG11bHRpcGx5ICAwLjMwMDAwMDAwMDFFLTE5MSAwLjMwMDAwMDAwMDFFLTE5MSAtPiA5LjAwMDAwMDAwNjAwMDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK211bHg5MDIgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OSAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTkwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorbXVseDkwMyBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OSAgICAgICAgLT4gOS45OTk5OTk5OTk5OTkwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCittdWx4OTA0IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OSAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTkwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKK211bHg5MDUgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorLS0gcHJvdmUgb3BlcmFuZHMgYXJlIGV4YWN0CittdWx4OTA2IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAxICAgICAgICAgICAgICAgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzCittdWx4OTA3IG11bHRpcGx5ICAgICAgICAgICAgICAgICAgICAgICAxICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5CistLSB0aGUgbmV4dCByb3VuZHMgdG8gTm1pbgorbXVseDkwOCBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorbXVseDkwOSBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OTkgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorbXVseDkxMCBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OTk5ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorbXVseDkxMSBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAorCisKKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQorcHJlY2lzaW9uOiAgIDM0Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDYxNDQKK21pbkV4cG9uZW50OiAtNjE0MworbXVseDEwMDEgIG11bHRpcGx5IDEzMEUtMiAgMTIwRS0yIC0+IDEuNTYwMAorbXVseDEwMDIgIG11bHRpcGx5IDEzMEUtMiAgMTJFLTEgIC0+IDEuNTYwCittdWx4MTAwMyAgbXVsdGlwbHkgMTMwRS0yICAxRTAgICAgLT4gMS4zMAorbXVseDEwMDQgIG11bHRpcGx5IDFFMiAgICAgMUU0ICAgIC0+IDFFKzYKKworLS0gcGF5bG9hZCBkZWNhcGl0YXRlCitwcmVjaXNpb246IDUKK211bHgxMDEwICBtdWx0aXBseSAxMSAtc05hTjEyMzQ1Njc4OTAgLT4gLU5hTjY3ODkwICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCittdWx4OTkwIG11bHRpcGx5IDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbXVseDk5MSBtdWx0aXBseSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0bWludXMuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dG1pbnVzLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMxYzUyNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dG1pbnVzLmRlY1Rlc3QKQEAgLTAsMCArMSwxNDggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbmV4dG1pbnVzLmRlY1Rlc3QgLS0gZGVjaW1hbCBuZXh0IHRoYXQgaXMgbGVzcyBbNzU0ciBuZXh0ZG93bl0gICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCituZXh0bTAwMSBuZXh0bWludXMgIDAuOTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTQKK25leHRtMDAyIG5leHRtaW51cyAgMC45OTk5OTk5OTYgLT4gICAwLjk5OTk5OTk5NQorbmV4dG0wMDMgbmV4dG1pbnVzICAwLjk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk2CituZXh0bTAwNCBuZXh0bWludXMgIDAuOTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTcKK25leHRtMDA1IG5leHRtaW51cyAgMC45OTk5OTk5OTkgLT4gICAwLjk5OTk5OTk5OAorbmV4dG0wMDYgbmV4dG1pbnVzICAxLjAwMDAwMDAwICAtPiAgIDAuOTk5OTk5OTk5CituZXh0bTAwNyBuZXh0bWludXMgIDEuMCAgICAgICAgIC0+ICAgMC45OTk5OTk5OTkKK25leHRtMDA4IG5leHRtaW51cyAgMSAgICAgICAgICAgLT4gICAwLjk5OTk5OTk5OQorbmV4dG0wMDkgbmV4dG1pbnVzICAxLjAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDAKK25leHRtMDEwIG5leHRtaW51cyAgMS4wMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAxCituZXh0bTAxMSBuZXh0bWludXMgIDEuMDAwMDAwMDMgIC0+ICAgMS4wMDAwMDAwMgorbmV4dG0wMTIgbmV4dG1pbnVzICAxLjAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDMKK25leHRtMDEzIG5leHRtaW51cyAgMS4wMDAwMDAwNSAgLT4gICAxLjAwMDAwMDA0CituZXh0bTAxNCBuZXh0bWludXMgIDEuMDAwMDAwMDYgIC0+ICAgMS4wMDAwMDAwNQorbmV4dG0wMTUgbmV4dG1pbnVzICAxLjAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDYKK25leHRtMDE2IG5leHRtaW51cyAgMS4wMDAwMDAwOCAgLT4gICAxLjAwMDAwMDA3CituZXh0bTAxNyBuZXh0bWludXMgIDEuMDAwMDAwMDkgIC0+ICAgMS4wMDAwMDAwOAorbmV4dG0wMTggbmV4dG1pbnVzICAxLjAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDkKK25leHRtMDE5IG5leHRtaW51cyAgMS4wMDAwMDAxMSAgLT4gICAxLjAwMDAwMDEwCituZXh0bTAyMCBuZXh0bWludXMgIDEuMDAwMDAwMTIgIC0+ICAgMS4wMDAwMDAxMQorCituZXh0bTAyMSBuZXh0bWludXMgLTAuOTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTYKK25leHRtMDIyIG5leHRtaW51cyAtMC45OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5NworbmV4dG0wMjMgbmV4dG1pbnVzIC0wLjk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk4CituZXh0bTAyNCBuZXh0bWludXMgLTAuOTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTkKK25leHRtMDI1IG5leHRtaW51cyAtMC45OTk5OTk5OTkgLT4gIC0xLjAwMDAwMDAwCituZXh0bTAyNiBuZXh0bWludXMgLTEuMDAwMDAwMDAgIC0+ICAtMS4wMDAwMDAwMQorbmV4dG0wMjcgbmV4dG1pbnVzIC0xLjAgICAgICAgICAtPiAgLTEuMDAwMDAwMDEKK25leHRtMDI4IG5leHRtaW51cyAtMSAgICAgICAgICAgLT4gIC0xLjAwMDAwMDAxCituZXh0bTAyOSBuZXh0bWludXMgLTEuMDAwMDAwMDEgIC0+ICAtMS4wMDAwMDAwMgorbmV4dG0wMzAgbmV4dG1pbnVzIC0xLjAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDMKK25leHRtMDMxIG5leHRtaW51cyAtMS4wMDAwMDAwMyAgLT4gIC0xLjAwMDAwMDA0CituZXh0bTAzMiBuZXh0bWludXMgLTEuMDAwMDAwMDQgIC0+ICAtMS4wMDAwMDAwNQorbmV4dG0wMzMgbmV4dG1pbnVzIC0xLjAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDYKK25leHRtMDM0IG5leHRtaW51cyAtMS4wMDAwMDAwNiAgLT4gIC0xLjAwMDAwMDA3CituZXh0bTAzNSBuZXh0bWludXMgLTEuMDAwMDAwMDcgIC0+ICAtMS4wMDAwMDAwOAorbmV4dG0wMzYgbmV4dG1pbnVzIC0xLjAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDkKK25leHRtMDM3IG5leHRtaW51cyAtMS4wMDAwMDAwOSAgLT4gIC0xLjAwMDAwMDEwCituZXh0bTAzOCBuZXh0bWludXMgLTEuMDAwMDAwMTAgIC0+ICAtMS4wMDAwMDAxMQorbmV4dG0wMzkgbmV4dG1pbnVzIC0xLjAwMDAwMDExICAtPiAgLTEuMDAwMDAwMTIKKworLS0gaW5wdXQgb3BlcmFuZCBpcyA+cHJlY2lzaW9uCituZXh0bTA0MSBuZXh0bWludXMgIDEuMDAwMDAwMTA5OTggIC0+ICAgMS4wMDAwMDAxMAorbmV4dG0wNDIgbmV4dG1pbnVzICAxLjAwMDAwMDEwOTk5ICAtPiAgIDEuMDAwMDAwMTAKK25leHRtMDQzIG5leHRtaW51cyAgMS4wMDAwMDAxMTAwMCAgLT4gICAxLjAwMDAwMDEwCituZXh0bTA0NCBuZXh0bWludXMgIDEuMDAwMDAwMTEwMDEgIC0+ICAgMS4wMDAwMDAxMQorbmV4dG0wNDUgbmV4dG1pbnVzICAxLjAwMDAwMDExMDAyICAtPiAgIDEuMDAwMDAwMTEKK25leHRtMDQ2IG5leHRtaW51cyAgMS4wMDAwMDAxMTAwMiAgLT4gICAxLjAwMDAwMDExCituZXh0bTA0NyBuZXh0bWludXMgIDEuMDAwMDAwMTEwNTIgIC0+ICAgMS4wMDAwMDAxMQorbmV4dG0wNDggbmV4dG1pbnVzICAxLjAwMDAwMDExNTUyICAtPiAgIDEuMDAwMDAwMTEKK25leHRtMDQ5IG5leHRtaW51cyAtMS4wMDAwMDAxMDk5OCAgLT4gIC0xLjAwMDAwMDExCituZXh0bTA1MCBuZXh0bWludXMgLTEuMDAwMDAwMTA5OTkgIC0+ICAtMS4wMDAwMDAxMQorbmV4dG0wNTEgbmV4dG1pbnVzIC0xLjAwMDAwMDExMDAwICAtPiAgLTEuMDAwMDAwMTIKK25leHRtMDUyIG5leHRtaW51cyAtMS4wMDAwMDAxMTAwMSAgLT4gIC0xLjAwMDAwMDEyCituZXh0bTA1MyBuZXh0bWludXMgLTEuMDAwMDAwMTEwMDIgIC0+ICAtMS4wMDAwMDAxMgorbmV4dG0wNTQgbmV4dG1pbnVzIC0xLjAwMDAwMDExMDAyICAtPiAgLTEuMDAwMDAwMTIKK25leHRtMDU1IG5leHRtaW51cyAtMS4wMDAwMDAxMTA1MiAgLT4gIC0xLjAwMDAwMDEyCituZXh0bTA1NiBuZXh0bWludXMgLTEuMDAwMDAwMTE1NTIgIC0+ICAtMS4wMDAwMDAxMgorLS0gdWx0cmEtdGlueSBpbnB1dHMKK25leHRtMDYwIG5leHRtaW51cyAgMUUtOTk5OTkgICAgICAgLT4gICAwRS0zOTEKK25leHRtMDYxIG5leHRtaW51cyAgMUUtOTk5OTk5OTk5ICAgLT4gICAwRS0zOTEKK25leHRtMDYyIG5leHRtaW51cyAgMUUtMzkxICAgICAgICAgLT4gICAwRS0zOTEKK25leHRtMDYzIG5leHRtaW51cyAtMUUtOTk5OTkgICAgICAgLT4gIC0xRS0zOTEKK25leHRtMDY0IG5leHRtaW51cyAtMUUtOTk5OTk5OTk5ICAgLT4gIC0xRS0zOTEKK25leHRtMDY1IG5leHRtaW51cyAtMUUtMzkxICAgICAgICAgLT4gIC0yRS0zOTEKKworLS0gWmVyb3MKK25leHRtMTAwIG5leHRtaW51cyAtMCAgICAgICAgICAgLT4gLTFFLTM5MQorbmV4dG0xMDEgbmV4dG1pbnVzICAwICAgICAgICAgICAtPiAtMUUtMzkxCituZXh0bTEwMiBuZXh0bWludXMgIDAuMDAgICAgICAgIC0+IC0xRS0zOTEKK25leHRtMTAzIG5leHRtaW51cyAtMC4wMCAgICAgICAgLT4gLTFFLTM5MQorbmV4dG0xMDQgbmV4dG1pbnVzICAwRS0zMDAgICAgICAtPiAtMUUtMzkxCituZXh0bTEwNSBuZXh0bWludXMgIDBFKzMwMCAgICAgIC0+IC0xRS0zOTEKK25leHRtMTA2IG5leHRtaW51cyAgMEUrMzAwMDAgICAgLT4gLTFFLTM5MQorbmV4dG0xMDcgbmV4dG1pbnVzIC0wRSszMDAwMCAgICAtPiAtMUUtMzkxCisKK3ByZWNpc2lvbjogOQorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKKy0tIHNwZWNpYWxzCituZXh0bTE1MCBuZXh0bWludXMgICBJbmYgICAgLT4gIDkuOTk5OTk5OTlFKzk5OQorbmV4dG0xNTEgbmV4dG1pbnVzICAtSW5mICAgIC0+IC1JbmZpbml0eQorbmV4dG0xNTIgbmV4dG1pbnVzICAgTmFOICAgIC0+ICBOYU4KK25leHRtMTUzIG5leHRtaW51cyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK25leHRtMTU0IG5leHRtaW51cyAgIE5hTjc3ICAtPiAgTmFONzcKK25leHRtMTU1IG5leHRtaW51cyAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK25leHRtMTU2IG5leHRtaW51cyAgLU5hTiAgICAtPiAtTmFOCituZXh0bTE1NyBuZXh0bWludXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCituZXh0bTE1OCBuZXh0bWludXMgIC1OYU43NyAgLT4gLU5hTjc3CituZXh0bTE1OSBuZXh0bWludXMgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCituZXh0bTE3MCBuZXh0bWludXMgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IDkuOTk5OTk5OThFKzk5OQorbmV4dG0xNzEgbmV4dG1pbnVzICA5Ljk5OTk5OTk4RSs5OTkgICAtPiA5Ljk5OTk5OTk3RSs5OTkKK25leHRtMTcyIG5leHRtaW51cyAgMUUtOTk5ICAgICAgICAgICAgLT4gOS45OTk5OTk5RS0xMDAwCituZXh0bTE3MyBuZXh0bWludXMgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IDkuOTk5OTk5OUUtMTAwMAorbmV4dG0xNzQgbmV4dG1pbnVzICA5RS0xMDA3ICAgICAgICAgICAtPiA4RS0xMDA3CituZXh0bTE3NSBuZXh0bWludXMgIDkuOUUtMTAwNiAgICAgICAgIC0+IDkuOEUtMTAwNgorbmV4dG0xNzYgbmV4dG1pbnVzICA5Ljk5OTlFLTEwMDMgICAgICAtPiA5Ljk5OThFLTEwMDMKK25leHRtMTc3IG5leHRtaW51cyAgOS45OTk5OTk5RS0xMDAwICAgLT4gOS45OTk5OTk4RS0xMDAwCituZXh0bTE3OCBuZXh0bWludXMgIDkuOTk5OTk5OEUtMTAwMCAgIC0+IDkuOTk5OTk5N0UtMTAwMAorbmV4dG0xNzkgbmV4dG1pbnVzICA5Ljk5OTk5OTdFLTEwMDAgICAtPiA5Ljk5OTk5OTZFLTEwMDAKK25leHRtMTgwIG5leHRtaW51cyAgMEUtMTAwNyAgICAgICAgICAgLT4gLTFFLTEwMDcKK25leHRtMTgxIG5leHRtaW51cyAgMUUtMTAwNyAgICAgICAgICAgLT4gMEUtMTAwNworbmV4dG0xODIgbmV4dG1pbnVzICAyRS0xMDA3ICAgICAgICAgICAtPiAxRS0xMDA3CisKK25leHRtMTgzIG5leHRtaW51cyAgLTBFLTEwMDcgICAgICAgICAgLT4gLTFFLTEwMDcKK25leHRtMTg0IG5leHRtaW51cyAgLTFFLTEwMDcgICAgICAgICAgLT4gLTJFLTEwMDcKK25leHRtMTg1IG5leHRtaW51cyAgLTJFLTEwMDcgICAgICAgICAgLT4gLTNFLTEwMDcKK25leHRtMTg2IG5leHRtaW51cyAgLTEwRS0xMDA3ICAgICAgICAgLT4gLTEuMUUtMTAwNgorbmV4dG0xODcgbmV4dG1pbnVzICAtMTAwRS0xMDA3ICAgICAgICAtPiAtMS4wMUUtMTAwNQorbmV4dG0xODggbmV4dG1pbnVzICAtMTAwMDAwRS0xMDA3ICAgICAtPiAtMS4wMDAwMUUtMTAwMgorbmV4dG0xODkgbmV4dG1pbnVzICAtMS4wMDAwRS05OTkgICAgICAtPiAtMS4wMDAwMDAwMUUtOTk5CituZXh0bTE5MCBuZXh0bWludXMgIC0xLjAwMDAwMDAwRS05OTkgIC0+IC0xLjAwMDAwMDAxRS05OTkKK25leHRtMTkxIG5leHRtaW51cyAgLTFFLTk5OSAgICAgICAgICAgLT4gLTEuMDAwMDAwMDFFLTk5OQorbmV4dG0xOTIgbmV4dG1pbnVzICAtOS45OTk5OTk5OEUrOTk5ICAtPiAtOS45OTk5OTk5OUUrOTk5CituZXh0bTE5MyBuZXh0bWludXMgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IC1JbmZpbml0eQorCistLSBOdWxsIHRlc3RzCituZXh0bTkwMCBuZXh0bWludXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dHBsdXMuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dHBsdXMuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjZlMzI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0cGx1cy5kZWNUZXN0CkBAIC0wLDAgKzEsMTUwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIG5leHRwbHVzLmRlY1Rlc3QgLS0gZGVjaW1hbCBuZXh0IHRoYXQgaXMgZ3JlYXRlciBbNzU0ciBuZXh0dXBdICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworbmV4dHAwMDEgbmV4dHBsdXMgIDAuOTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTYKK25leHRwMDAyIG5leHRwbHVzICAwLjk5OTk5OTk5NiAtPiAgIDAuOTk5OTk5OTk3CituZXh0cDAwMyBuZXh0cGx1cyAgMC45OTk5OTk5OTcgLT4gICAwLjk5OTk5OTk5OAorbmV4dHAwMDQgbmV4dHBsdXMgIDAuOTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTkKK25leHRwMDA1IG5leHRwbHVzICAwLjk5OTk5OTk5OSAtPiAgIDEuMDAwMDAwMDAKK25leHRwMDA2IG5leHRwbHVzICAxLjAwMDAwMDAwICAtPiAgIDEuMDAwMDAwMDEKK25leHRwMDA3IG5leHRwbHVzICAxLjAgICAgICAgICAtPiAgIDEuMDAwMDAwMDEKK25leHRwMDA4IG5leHRwbHVzICAxICAgICAgICAgICAtPiAgIDEuMDAwMDAwMDEKK25leHRwMDA5IG5leHRwbHVzICAxLjAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDIKK25leHRwMDEwIG5leHRwbHVzICAxLjAwMDAwMDAyICAtPiAgIDEuMDAwMDAwMDMKK25leHRwMDExIG5leHRwbHVzICAxLjAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDQKK25leHRwMDEyIG5leHRwbHVzICAxLjAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDUKK25leHRwMDEzIG5leHRwbHVzICAxLjAwMDAwMDA1ICAtPiAgIDEuMDAwMDAwMDYKK25leHRwMDE0IG5leHRwbHVzICAxLjAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDcKK25leHRwMDE1IG5leHRwbHVzICAxLjAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDgKK25leHRwMDE2IG5leHRwbHVzICAxLjAwMDAwMDA4ICAtPiAgIDEuMDAwMDAwMDkKK25leHRwMDE3IG5leHRwbHVzICAxLjAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMTAKK25leHRwMDE4IG5leHRwbHVzICAxLjAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMTEKK25leHRwMDE5IG5leHRwbHVzICAxLjAwMDAwMDExICAtPiAgIDEuMDAwMDAwMTIKKworbmV4dHAwMjEgbmV4dHBsdXMgLTAuOTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTQKK25leHRwMDIyIG5leHRwbHVzIC0wLjk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk1CituZXh0cDAyMyBuZXh0cGx1cyAtMC45OTk5OTk5OTcgLT4gIC0wLjk5OTk5OTk5NgorbmV4dHAwMjQgbmV4dHBsdXMgLTAuOTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTcKK25leHRwMDI1IG5leHRwbHVzIC0wLjk5OTk5OTk5OSAtPiAgLTAuOTk5OTk5OTk4CituZXh0cDAyNiBuZXh0cGx1cyAtMS4wMDAwMDAwMCAgLT4gIC0wLjk5OTk5OTk5OQorbmV4dHAwMjcgbmV4dHBsdXMgLTEuMCAgICAgICAgIC0+ICAtMC45OTk5OTk5OTkKK25leHRwMDI4IG5leHRwbHVzIC0xICAgICAgICAgICAtPiAgLTAuOTk5OTk5OTk5CituZXh0cDAyOSBuZXh0cGx1cyAtMS4wMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwCituZXh0cDAzMCBuZXh0cGx1cyAtMS4wMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAxCituZXh0cDAzMSBuZXh0cGx1cyAtMS4wMDAwMDAwMyAgLT4gIC0xLjAwMDAwMDAyCituZXh0cDAzMiBuZXh0cGx1cyAtMS4wMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAzCituZXh0cDAzMyBuZXh0cGx1cyAtMS4wMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDA0CituZXh0cDAzNCBuZXh0cGx1cyAtMS4wMDAwMDAwNiAgLT4gIC0xLjAwMDAwMDA1CituZXh0cDAzNSBuZXh0cGx1cyAtMS4wMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDA2CituZXh0cDAzNiBuZXh0cGx1cyAtMS4wMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDA3CituZXh0cDAzNyBuZXh0cGx1cyAtMS4wMDAwMDAwOSAgLT4gIC0xLjAwMDAwMDA4CituZXh0cDAzOCBuZXh0cGx1cyAtMS4wMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDA5CituZXh0cDAzOSBuZXh0cGx1cyAtMS4wMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDEwCituZXh0cDA0MCBuZXh0cGx1cyAtMS4wMDAwMDAxMiAgLT4gIC0xLjAwMDAwMDExCisKKy0tIGlucHV0IG9wZXJhbmQgaXMgPnByZWNpc2lvbgorbmV4dHAwNDEgbmV4dHBsdXMgIDEuMDAwMDAwMTA5OTggIC0+ICAgMS4wMDAwMDAxMQorbmV4dHAwNDIgbmV4dHBsdXMgIDEuMDAwMDAwMTA5OTkgIC0+ICAgMS4wMDAwMDAxMQorbmV4dHAwNDMgbmV4dHBsdXMgIDEuMDAwMDAwMTEwMDAgIC0+ICAgMS4wMDAwMDAxMgorbmV4dHAwNDQgbmV4dHBsdXMgIDEuMDAwMDAwMTEwMDEgIC0+ICAgMS4wMDAwMDAxMgorbmV4dHAwNDUgbmV4dHBsdXMgIDEuMDAwMDAwMTEwMDIgIC0+ICAgMS4wMDAwMDAxMgorbmV4dHAwNDYgbmV4dHBsdXMgIDEuMDAwMDAwMTEwMDIgIC0+ICAgMS4wMDAwMDAxMgorbmV4dHAwNDcgbmV4dHBsdXMgIDEuMDAwMDAwMTEwNTIgIC0+ICAgMS4wMDAwMDAxMgorbmV4dHAwNDggbmV4dHBsdXMgIDEuMDAwMDAwMTE1NTIgIC0+ICAgMS4wMDAwMDAxMgorbmV4dHAwNDkgbmV4dHBsdXMgLTEuMDAwMDAwMTA5OTggIC0+ICAtMS4wMDAwMDAxMAorbmV4dHAwNTAgbmV4dHBsdXMgLTEuMDAwMDAwMTA5OTkgIC0+ICAtMS4wMDAwMDAxMAorbmV4dHAwNTEgbmV4dHBsdXMgLTEuMDAwMDAwMTEwMDAgIC0+ICAtMS4wMDAwMDAxMAorbmV4dHAwNTIgbmV4dHBsdXMgLTEuMDAwMDAwMTEwMDEgIC0+ICAtMS4wMDAwMDAxMQorbmV4dHAwNTMgbmV4dHBsdXMgLTEuMDAwMDAwMTEwMDIgIC0+ICAtMS4wMDAwMDAxMQorbmV4dHAwNTQgbmV4dHBsdXMgLTEuMDAwMDAwMTEwMDIgIC0+ICAtMS4wMDAwMDAxMQorbmV4dHAwNTUgbmV4dHBsdXMgLTEuMDAwMDAwMTEwNTIgIC0+ICAtMS4wMDAwMDAxMQorbmV4dHAwNTYgbmV4dHBsdXMgLTEuMDAwMDAwMTE1NTIgIC0+ICAtMS4wMDAwMDAxMQorLS0gdWx0cmEtdGlueSBpbnB1dHMKK25leHRwMDYwIG5leHRwbHVzICAxRS05OTk5OSAgICAgICAtPiAgIDFFLTM5MQorbmV4dHAwNjEgbmV4dHBsdXMgIDFFLTk5OTk5OTk5OSAgIC0+ICAgMUUtMzkxCituZXh0cDA2MiBuZXh0cGx1cyAgMUUtMzkxICAgICAgICAgLT4gICAyRS0zOTEKK25leHRwMDYzIG5leHRwbHVzIC0xRS05OTk5OSAgICAgICAtPiAgLTBFLTM5MQorbmV4dHAwNjQgbmV4dHBsdXMgLTFFLTk5OTk5OTk5OSAgIC0+ICAtMEUtMzkxCituZXh0cDA2NSBuZXh0cGx1cyAtMUUtMzkxICAgICAgICAgLT4gIC0wRS0zOTEKKworLS0gWmVyb3MKK25leHRwMTAwIG5leHRwbHVzICAwICAgICAgICAgICAtPiAgMUUtMzkxCituZXh0cDEwMSBuZXh0cGx1cyAgMC4wMCAgICAgICAgLT4gIDFFLTM5MQorbmV4dHAxMDIgbmV4dHBsdXMgIDBFLTMwMCAgICAgIC0+ICAxRS0zOTEKK25leHRwMTAzIG5leHRwbHVzICAwRSszMDAgICAgICAtPiAgMUUtMzkxCituZXh0cDEwNCBuZXh0cGx1cyAgMEUrMzAwMDAgICAgLT4gIDFFLTM5MQorbmV4dHAxMDUgbmV4dHBsdXMgLTAgICAgICAgICAgIC0+ICAxRS0zOTEKK25leHRwMTA2IG5leHRwbHVzIC0wLjAwICAgICAgICAtPiAgMUUtMzkxCituZXh0cDEwNyBuZXh0cGx1cyAtMEUtMzAwICAgICAgLT4gIDFFLTM5MQorbmV4dHAxMDggbmV4dHBsdXMgLTBFKzMwMCAgICAgIC0+ICAxRS0zOTEKK25leHRwMTA5IG5leHRwbHVzIC0wRSszMDAwMCAgICAtPiAgMUUtMzkxCisKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKKy0tIHNwZWNpYWxzCituZXh0cDE1MCBuZXh0cGx1cyAgIEluZiAgICAtPiAgSW5maW5pdHkKK25leHRwMTUxIG5leHRwbHVzICAtSW5mICAgIC0+IC05Ljk5OTk5OTk5RSs5OTkKK25leHRwMTUyIG5leHRwbHVzICAgTmFOICAgIC0+ICBOYU4KK25leHRwMTUzIG5leHRwbHVzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHAxNTQgbmV4dHBsdXMgICBOYU43NyAgLT4gIE5hTjc3CituZXh0cDE1NSBuZXh0cGx1cyAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KK25leHRwMTU2IG5leHRwbHVzICAtTmFOICAgIC0+IC1OYU4KK25leHRwMTU3IG5leHRwbHVzIC1zTmFOICAgIC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHAxNTggbmV4dHBsdXMgIC1OYU43NyAgLT4gLU5hTjc3CituZXh0cDE1OSBuZXh0cGx1cyAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKK25leHRwMTcwIG5leHRwbHVzICA5Ljk5OTk5OTk5RSs5OTkgICAtPiBJbmZpbml0eQorbmV4dHAxNzEgbmV4dHBsdXMgIDkuOTk5OTk5OThFKzk5OSAgIC0+IDkuOTk5OTk5OTlFKzk5OQorbmV4dHAxNzIgbmV4dHBsdXMgIDFFLTk5OSAgICAgICAgICAgIC0+IDEuMDAwMDAwMDFFLTk5OQorbmV4dHAxNzMgbmV4dHBsdXMgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IDEuMDAwMDAwMDFFLTk5OQorbmV4dHAxNzQgbmV4dHBsdXMgIDlFLTEwMDcgICAgICAgICAgIC0+IDEuMEUtMTAwNgorbmV4dHAxNzUgbmV4dHBsdXMgIDkuOUUtMTAwNiAgICAgICAgIC0+IDEuMDBFLTEwMDUKK25leHRwMTc2IG5leHRwbHVzICA5Ljk5OTlFLTEwMDMgICAgICAtPiAxLjAwMDAwRS0xMDAyCituZXh0cDE3NyBuZXh0cGx1cyAgOS45OTk5OTk5RS0xMDAwICAgLT4gMS4wMDAwMDAwMEUtOTk5CituZXh0cDE3OCBuZXh0cGx1cyAgOS45OTk5OTk4RS0xMDAwICAgLT4gOS45OTk5OTk5RS0xMDAwCituZXh0cDE3OSBuZXh0cGx1cyAgOS45OTk5OTk3RS0xMDAwICAgLT4gOS45OTk5OTk4RS0xMDAwCituZXh0cDE4MCBuZXh0cGx1cyAgMEUtMTAwNyAgICAgICAgICAgLT4gMUUtMTAwNworbmV4dHAxODEgbmV4dHBsdXMgIDFFLTEwMDcgICAgICAgICAgIC0+IDJFLTEwMDcKK25leHRwMTgyIG5leHRwbHVzICAyRS0xMDA3ICAgICAgICAgICAtPiAzRS0xMDA3CisKK25leHRwMTgzIG5leHRwbHVzICAtMEUtMTAwNyAgICAgICAgICAtPiAgMUUtMTAwNworbmV4dHAxODQgbmV4dHBsdXMgIC0xRS0xMDA3ICAgICAgICAgIC0+IC0wRS0xMDA3CituZXh0cDE4NSBuZXh0cGx1cyAgLTJFLTEwMDcgICAgICAgICAgLT4gLTFFLTEwMDcKK25leHRwMTg2IG5leHRwbHVzICAtMTBFLTEwMDcgICAgICAgICAtPiAtOUUtMTAwNworbmV4dHAxODcgbmV4dHBsdXMgIC0xMDBFLTEwMDcgICAgICAgIC0+IC05LjlFLTEwMDYKK25leHRwMTg4IG5leHRwbHVzICAtMTAwMDAwRS0xMDA3ICAgICAtPiAtOS45OTk5RS0xMDAzCituZXh0cDE4OSBuZXh0cGx1cyAgLTEuMDAwMEUtOTk5ICAgICAgLT4gLTkuOTk5OTk5OUUtMTAwMAorbmV4dHAxOTAgbmV4dHBsdXMgIC0xLjAwMDAwMDAwRS05OTkgIC0+IC05Ljk5OTk5OTlFLTEwMDAKK25leHRwMTkxIG5leHRwbHVzICAtMUUtOTk5ICAgICAgICAgICAtPiAtOS45OTk5OTk5RS0xMDAwCituZXh0cDE5MiBuZXh0cGx1cyAgLTkuOTk5OTk5OThFKzk5OSAgLT4gLTkuOTk5OTk5OTdFKzk5OQorbmV4dHAxOTMgbmV4dHBsdXMgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IC05Ljk5OTk5OTk4RSs5OTkKKworLS0gTnVsbCB0ZXN0cworbmV4dHA5MDAgbmV4dHBsdXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dHRvd2FyZC5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0dG93YXJkLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyMzg1YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dHRvd2FyZC5kZWNUZXN0CkBAIC0wLDAgKzEsNDI2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIG5leHR0b3dhcmQuZGVjVGVzdCAtLSBkZWNpbWFsIG5leHQgdG93YXJkIHJocyBbNzU0ciBuZXh0YWZ0ZXJdICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gU2FuaXR5IGNoZWNrIHdpdGggYSBzY2F0dGVyaW5nIG9mIG51bWVyaWNzCituZXh0dDAwMSBuZXh0dG93YXJkICAgMTAgICAgMTAgICAtPiAgMTAKK25leHR0MDAyIG5leHR0b3dhcmQgIC0xMCAgIC0xMCAgIC0+IC0xMAorbmV4dHQwMDMgbmV4dHRvd2FyZCAgIDEgICAgIDEwICAgLT4gIDEuMDAwMDAwMDEKK25leHR0MDA0IG5leHR0b3dhcmQgICAxICAgIC0xMCAgIC0+ICAwLjk5OTk5OTk5OQorbmV4dHQwMDUgbmV4dHRvd2FyZCAgLTEgICAgIDEwICAgLT4gLTAuOTk5OTk5OTk5CituZXh0dDAwNiBuZXh0dG93YXJkICAtMSAgICAtMTAgICAtPiAtMS4wMDAwMDAwMQorbmV4dHQwMDcgbmV4dHRvd2FyZCAgIDAgICAgIDEwICAgLT4gIDFFLTM5MSAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQwMDggbmV4dHRvd2FyZCAgIDAgICAgLTEwICAgLT4gLTFFLTM5MSAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQwMDkgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTlFKzM4NCArSW5maW5pdHkgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorbmV4dHQwMTAgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTlFKzM4NCAtSW5maW5pdHkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCistLS0tLS0tIGxocz1yaHMKKy0tIGZpbml0ZXMKK25leHR0MTAxIG5leHR0b3dhcmQgICAgICAgICAgNyAgICAgICA3IC0+ICA3CituZXh0dDEwMiBuZXh0dG93YXJkICAgICAgICAgLTcgICAgICAtNyAtPiAtNworbmV4dHQxMDMgbmV4dHRvd2FyZCAgICAgICAgIDc1ICAgICAgNzUgLT4gIDc1CituZXh0dDEwNCBuZXh0dG93YXJkICAgICAgICAtNzUgICAgIC03NSAtPiAtNzUKK25leHR0MTA1IG5leHR0b3dhcmQgICAgICAgNy41MCAgICAgNy41IC0+ICA3LjUwCituZXh0dDEwNiBuZXh0dG93YXJkICAgICAgLTcuNTAgICAtNy41MCAtPiAtNy41MAorbmV4dHQxMDcgbmV4dHRvd2FyZCAgICAgICA3LjUwMCA3LjUwMDAgLT4gIDcuNTAwCituZXh0dDEwOCBuZXh0dG93YXJkICAgICAgLTcuNTAwICAgLTcuNSAtPiAtNy41MDAKKworLS0gemVyb3MKK25leHR0MTExIG5leHR0b3dhcmQgICAgICAgICAgMCAgICAgICAwIC0+ICAwCituZXh0dDExMiBuZXh0dG93YXJkICAgICAgICAgLTAgICAgICAtMCAtPiAtMAorbmV4dHQxMTMgbmV4dHRvd2FyZCAgICAgICAwRSs0ICAgICAgIDAgLT4gIDBFKzQKK25leHR0MTE0IG5leHR0b3dhcmQgICAgICAtMEUrNCAgICAgIC0wIC0+IC0wRSs0CituZXh0dDExNSBuZXh0dG93YXJkICAgICAwLjAwMDAgMC4wMDAwMCAtPiAgMC4wMDAwCituZXh0dDExNiBuZXh0dG93YXJkICAgIC0wLjAwMDAgICAtMC4wMCAtPiAtMC4wMDAwCituZXh0dDExNyBuZXh0dG93YXJkICAgICAgMEUtMTQxICAgICAgMCAtPiAgMEUtMTQxCituZXh0dDExOCBuZXh0dG93YXJkICAgICAtMEUtMTQxICAgLTAwMCAtPiAtMEUtMTQxCisKKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCituZXh0dDEyMSBuZXh0dG93YXJkICAgMjY4MjY4MjY4ICAgIDI2ODI2ODI2OCAtPiAgIDI2ODI2ODI2OAorbmV4dHQxMjIgbmV4dHRvd2FyZCAgLTI2ODI2ODI2OCAgIC0yNjgyNjgyNjggLT4gIC0yNjgyNjgyNjgKK25leHR0MTIzIG5leHR0b3dhcmQgICAxMzQxMzQxMzQgICAgMTM0MTM0MTM0IC0+ICAgMTM0MTM0MTM0CituZXh0dDEyNCBuZXh0dG93YXJkICAtMTM0MTM0MTM0ICAgLTEzNDEzNDEzNCAtPiAgLTEzNDEzNDEzNAorCistLSBObWF4LCBObWluLCBOdGlueQorbmV4dHQxMzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OUUrMzg0ICA5Ljk5OTk5OTk5RSszODQgICAtPiAgIDkuOTk5OTk5OTlFKzM4NAorbmV4dHQxMzIgbmV4dHRvd2FyZCAgMUUtMzgzICAgICAgICAgICAxRS0zODMgICAgICAgICAgICAtPiAgIDFFLTM4MworbmV4dHQxMzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMEUtMzgzICAxLjAwMDAwMDAwRS0zODMgICAtPiAgIDEuMDAwMDAwMDBFLTM4MworbmV4dHQxMzQgbmV4dHRvd2FyZCAgMUUtMzkxICAgICAgICAgICAxRS0zOTEgICAgICAgICAgICAtPiAgIDFFLTM5MQorCituZXh0dDEzNSBuZXh0dG93YXJkICAtMUUtMzkxICAgICAgICAgIC0xRS0zOTEgICAgICAgICAgIC0+ICAtMUUtMzkxCituZXh0dDEzNiBuZXh0dG93YXJkICAtMS4wMDAwMDAwMEUtMzgzIC0xLjAwMDAwMDAwRS0zODMgIC0+ICAtMS4wMDAwMDAwMEUtMzgzCituZXh0dDEzNyBuZXh0dG93YXJkICAtMUUtMzgzICAgICAgICAgIC0xRS0zODMgICAgICAgICAgIC0+ICAtMUUtMzgzCituZXh0dDEzOCBuZXh0dG93YXJkICAtOS45OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5RSszODQgIC0+ICAtOS45OTk5OTk5OUUrMzg0CisKKy0tLS0tLS0gbGhzPHJocworbmV4dHQyMDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTUgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5NgorbmV4dHQyMDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTYgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5NworbmV4dHQyMDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTcgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OAorbmV4dHQyMDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTggSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OQorbmV4dHQyMDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTkgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwCituZXh0dDIwNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDEKK25leHR0MjA3IG5leHR0b3dhcmQgIDEuMCAgICAgICAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMQorbmV4dHQyMDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAxCituZXh0dDIwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAxICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDIKK25leHR0MjEwIG5leHR0b3dhcmQgIDEuMDAwMDAwMDIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMworbmV4dHQyMTEgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA0CituZXh0dDIxMiBuZXh0dG93YXJkICAxLjAwMDAwMDA0ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDUKK25leHR0MjEzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDUgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwNgorbmV4dHQyMTQgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA3CituZXh0dDIxNSBuZXh0dG93YXJkICAxLjAwMDAwMDA3ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDgKK25leHR0MjE2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDggIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwOQorbmV4dHQyMTcgbmV4dHRvd2FyZCAgMS4wMDAwMDAwOSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDEwCituZXh0dDIxOCBuZXh0dG93YXJkICAxLjAwMDAwMDEwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTEKK25leHR0MjE5IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMgorCituZXh0dDIyMSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5NSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk0CituZXh0dDIyMiBuZXh0dG93YXJkIC0wLjk5OTk5OTk5NiBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk1CituZXh0dDIyMyBuZXh0dG93YXJkIC0wLjk5OTk5OTk5NyBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk2CituZXh0dDIyNCBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OCBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk3CituZXh0dDIyNSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk4CituZXh0dDIyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5CituZXh0dDIyNyBuZXh0dG93YXJkIC0xLjAgICAgICAgICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5CituZXh0dDIyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5CituZXh0dDIyOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAxICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAKK25leHR0MjMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMQorbmV4dHQyMzEgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMyAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAyCituZXh0dDIzMiBuZXh0dG93YXJkIC0xLjAwMDAwMDA0ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDMKK25leHR0MjMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDUgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwNAorbmV4dHQyMzQgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA1CituZXh0dDIzNSBuZXh0dG93YXJkIC0xLjAwMDAwMDA3ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDYKK25leHR0MjM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDggIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwNworbmV4dHQyMzcgbmV4dHRvd2FyZCAtMS4wMDAwMDAwOSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA4CituZXh0dDIzOCBuZXh0dG93YXJkIC0xLjAwMDAwMDEwICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDkKK25leHR0MjM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMAorbmV4dHQyNDAgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExCisKKy0tIGlucHV0IG9wZXJhbmQgaXMgPnByZWNpc2lvbgorbmV4dHQyNDEgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMDk5OCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCituZXh0dDI0MiBuZXh0dG93YXJkICAxLjAwMDAwMDEwOTk5ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTEKK25leHR0MjQzIG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMgorbmV4dHQyNDQgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDEyCituZXh0dDI0NSBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTIKK25leHR0MjQ2IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMgorbmV4dHQyNDcgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTA1MiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDEyCituZXh0dDI0OCBuZXh0dG93YXJkICAxLjAwMDAwMDExNTUyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTIKK25leHR0MjQ5IG5leHR0b3dhcmQgLTEuMDAwMDAwMTA5OTggIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMAorbmV4dHQyNTAgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMDk5OSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEwCituZXh0dDI1MSBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAwICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTAKK25leHR0MjUyIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQorbmV4dHQyNTMgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExCituZXh0dDI1NCBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKK25leHR0MjU1IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwNTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQorbmV4dHQyNTYgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTU1MiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExCistLSB1bHRyYS10aW55IGlucHV0cworbmV4dHQyNjAgbmV4dHRvd2FyZCAgMUUtOTk5OTkgICAgICAgSW5maW5pdHkgLT4gICAxRS0zOTEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MjYxIG5leHR0b3dhcmQgIDFFLTk5OTk5OTk5OSAgIEluZmluaXR5IC0+ICAgMUUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDI2MiBuZXh0dG93YXJkICAxRS0zOTEgICAgICAgICBJbmZpbml0eSAtPiAgIDJFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQyNjMgbmV4dHRvd2FyZCAtMUUtOTk5OTkgICAgICAgSW5maW5pdHkgLT4gIC0wRS0zOTEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbmV4dHQyNjQgbmV4dHRvd2FyZCAtMUUtOTk5OTk5OTk5ICAgSW5maW5pdHkgLT4gIC0wRS0zOTEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbmV4dHQyNjUgbmV4dHRvd2FyZCAtMUUtMzkxICAgICAgICAgSW5maW5pdHkgLT4gIC0wRS0zOTEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBaZXJvcworbmV4dHQzMDAgbmV4dHRvd2FyZCAgMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzAxIG5leHR0b3dhcmQgIDAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDMwMiBuZXh0dG93YXJkICAwRS0zMDAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzMDMgbmV4dHRvd2FyZCAgMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzA0IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDMwNSBuZXh0dG93YXJkIC0wICAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzMDYgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzA3IG5leHR0b3dhcmQgLTBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDMwOCBuZXh0dG93YXJkIC0wRSszMDAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzMDkgbmV4dHRvd2FyZCAtMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gc3BlY2lhbHMKK25leHR0MzUwIG5leHR0b3dhcmQgICBJbmYgICAgSW5maW5pdHkgLT4gIEluZmluaXR5CituZXh0dDM1MSBuZXh0dG93YXJkICAtSW5mICAgIEluZmluaXR5IC0+IC05Ljk5OTk5OTk5RSszODQKK25leHR0MzUyIG5leHR0b3dhcmQgICBOYU4gICAgSW5maW5pdHkgLT4gIE5hTgorbmV4dHQzNTMgbmV4dHRvd2FyZCAgc05hTiAgICBJbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0MzU0IG5leHR0b3dhcmQgICBOYU43NyAgSW5maW5pdHkgLT4gIE5hTjc3CituZXh0dDM1NSBuZXh0dG93YXJkICBzTmFOODggIEluZmluaXR5IC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQzNTYgbmV4dHRvd2FyZCAgLU5hTiAgICBJbmZpbml0eSAtPiAtTmFOCituZXh0dDM1NyBuZXh0dG93YXJkIC1zTmFOICAgIEluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQzNTggbmV4dHRvd2FyZCAgLU5hTjc3ICBJbmZpbml0eSAtPiAtTmFONzcKK25leHR0MzU5IG5leHR0b3dhcmQgLXNOYU44OCAgSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorbmV4dHQzNzAgbmV4dHRvd2FyZCAgOS45OTk5OTk5OUUrOTk5ICAgSW5maW5pdHkgLT4gSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorbmV4dHQzNzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OEUrOTk5ICAgSW5maW5pdHkgLT4gOS45OTk5OTk5OUUrOTk5CituZXh0dDM3MiBuZXh0dG93YXJkICAxRS05OTkgICAgICAgICAgICBJbmZpbml0eSAtPiAxLjAwMDAwMDAxRS05OTkKK25leHR0MzczIG5leHR0b3dhcmQgIDEuMDAwMDAwMDBFLTk5OSAgIEluZmluaXR5IC0+IDEuMDAwMDAwMDFFLTk5OQorbmV4dHQzNzQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTlFLTk5OSAgSW5maW5pdHkgLT4gMS4wMDAwMDAwMEUtOTk5CituZXh0dDM3NSBuZXh0dG93YXJkICAwLjk5OTk5OTk5RS05OTkgICBJbmZpbml0eSAtPiAxLjAwMDAwMDAwRS05OTkKK25leHR0Mzc2IG5leHR0b3dhcmQgIDlFLTEwMDcgICAgICAgICAgIEluZmluaXR5IC0+IDEuMEUtMTAwNiAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzNzcgbmV4dHRvd2FyZCAgOS45RS0xMDA2ICAgICAgICAgSW5maW5pdHkgLT4gMS4wMEUtMTAwNSAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM3OCBuZXh0dG93YXJkICA5Ljk5OTlFLTEwMDMgICAgICBJbmZpbml0eSAtPiAxLjAwMDAwRS0xMDAyICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0Mzc5IG5leHR0b3dhcmQgIDkuOTk5OTk5OEUtMTAwMCAgIEluZmluaXR5IC0+IDkuOTk5OTk5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzODAgbmV4dHRvd2FyZCAgOS45OTk5OTk3RS0xMDAwICAgSW5maW5pdHkgLT4gOS45OTk5OTk4RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM4MSBuZXh0dG93YXJkICAwRS0xMDA3ICAgICAgICAgICBJbmZpbml0eSAtPiAxRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzgyIG5leHR0b3dhcmQgIDFFLTEwMDcgICAgICAgICAgIEluZmluaXR5IC0+IDJFLTEwMDcgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzODMgbmV4dHRvd2FyZCAgMkUtMTAwNyAgICAgICAgICAgSW5maW5pdHkgLT4gM0UtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK25leHR0Mzg1IG5leHR0b3dhcmQgIC0wRS0xMDA3ICAgICAgICAgIEluZmluaXR5IC0+ICAxRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzODYgbmV4dHRvd2FyZCAgLTFFLTEwMDcgICAgICAgICAgSW5maW5pdHkgLT4gLTBFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK25leHR0Mzg3IG5leHR0b3dhcmQgIC0yRS0xMDA3ICAgICAgICAgIEluZmluaXR5IC0+IC0xRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzODggbmV4dHRvd2FyZCAgLTEwRS0xMDA3ICAgICAgICAgSW5maW5pdHkgLT4gLTlFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM4OSBuZXh0dG93YXJkICAtMTAwRS0xMDA3ICAgICAgICBJbmZpbml0eSAtPiAtOS45RS0xMDA2ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzkwIG5leHR0b3dhcmQgIC0xMDAwMDBFLTEwMDcgICAgIEluZmluaXR5IC0+IC05Ljk5OTlFLTEwMDMgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzOTEgbmV4dHRvd2FyZCAgLTEuMDAwMEUtOTk5ICAgICAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OUUtMTAwMCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0MzkyIG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwRS05OTkgIEluZmluaXR5IC0+IC05Ljk5OTk5OTlFLTEwMDAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDM5MyBuZXh0dG93YXJkICAtMUUtOTk5ICAgICAgICAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5RS0xMDAwICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQzOTQgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OThFKzk5OSAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OTdFKzk5OQorbmV4dHQzOTUgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTlFKzk5OSAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OThFKzk5OQorCistLS0tLS0tIGxocz5yaHMKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCituZXh0dDQwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5NSAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTQKK25leHR0NDAyIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5NQorbmV4dHQ0MDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk2CituZXh0dDQwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OCAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTcKK25leHR0NDA1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OAorbmV4dHQ0MDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5CituZXh0dDQwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTkKK25leHR0NDA4IG5leHR0b3dhcmQgIDEgICAgICAgICAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OQorbmV4dHQ0MDkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAKK25leHR0NDEwIG5leHR0b3dhcmQgIDEuMDAwMDAwMDIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAxCituZXh0dDQxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMgorbmV4dHQ0MTIgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDMKK25leHR0NDEzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDUgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA0CituZXh0dDQxNCBuZXh0dG93YXJkICAxLjAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwNQorbmV4dHQ0MTUgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDYKK25leHR0NDE2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDggICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA3CituZXh0dDQxNyBuZXh0dG93YXJkICAxLjAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwOAorbmV4dHQ0MTggbmV4dHRvd2FyZCAgMS4wMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDkKK25leHR0NDE5IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDEwCituZXh0dDQyMCBuZXh0dG93YXJkICAxLjAwMDAwMDEyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQorCituZXh0dDQyMSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5NSAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTYKK25leHR0NDIyIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5NworbmV4dHQ0MjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk4CituZXh0dDQyNCBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OCAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTkKK25leHR0NDI1IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwCituZXh0dDQyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMQorbmV4dHQ0MjcgbmV4dHRvd2FyZCAtMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDEKK25leHR0NDI4IG5leHR0b3dhcmQgLTEgICAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAxCituZXh0dDQyOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMgorbmV4dHQ0MzAgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDMKK25leHR0NDMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDMgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA0CituZXh0dDQzMiBuZXh0dG93YXJkIC0xLjAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwNQorbmV4dHQ0MzMgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDYKK25leHR0NDM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDYgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA3CituZXh0dDQzNSBuZXh0dG93YXJkIC0xLjAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwOAorbmV4dHQ0MzYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDkKK25leHR0NDM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDkgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEwCituZXh0dDQzOCBuZXh0dG93YXJkIC0xLjAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQorbmV4dHQ0MzkgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTIKKworLS0gaW5wdXQgb3BlcmFuZCBpcyA+cHJlY2lzaW9uCituZXh0dDQ0MSBuZXh0dG93YXJkICAxLjAwMDAwMDEwOTk4ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMAorbmV4dHQ0NDIgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMDk5OSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTAKK25leHR0NDQzIG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDAgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDEwCituZXh0dDQ0NCBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAxICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQorbmV4dHQ0NDUgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTEKK25leHR0NDQ2IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCituZXh0dDQ0NyBuZXh0dG93YXJkICAxLjAwMDAwMDExMDUyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQorbmV4dHQ0NDggbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTU1MiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTEKK25leHR0NDQ5IG5leHR0b3dhcmQgLTEuMDAwMDAwMTA5OTggICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExCituZXh0dDQ1MCBuZXh0dG93YXJkIC0xLjAwMDAwMDEwOTk5ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQorbmV4dHQ0NTEgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTIKK25leHR0NDUyIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyCituZXh0dDQ1MyBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMgorbmV4dHQ0NTQgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTIKK25leHR0NDU1IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwNTIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyCituZXh0dDQ1NiBuZXh0dG93YXJkIC0xLjAwMDAwMDExNTUyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMgorLS0gdWx0cmEtdGlueSBpbnB1dHMKK25leHR0NDYwIG5leHR0b3dhcmQgIDFFLTk5OTk5ICAgICAgICAtSW5maW5pdHkgLT4gICAwRS0zOTEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK25leHR0NDYxIG5leHR0b3dhcmQgIDFFLTk5OTk5OTk5OSAgICAtSW5maW5pdHkgLT4gICAwRS0zOTEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK25leHR0NDYyIG5leHR0b3dhcmQgIDFFLTM5MSAgICAgICAgICAtSW5maW5pdHkgLT4gICAwRS0zOTEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK25leHR0NDYzIG5leHR0b3dhcmQgLTFFLTk5OTk5ICAgICAgICAtSW5maW5pdHkgLT4gIC0xRS0zOTEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDQ2NCBuZXh0dG93YXJkIC0xRS05OTk5OTk5OTkgICAgLUluZmluaXR5IC0+ICAtMUUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ0NjUgbmV4dHRvd2FyZCAtMUUtMzkxICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTJFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gWmVyb3MKK25leHR0NTAwIG5leHR0b3dhcmQgLTAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDUwMSBuZXh0dG93YXJkICAwICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1MDIgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTAzIG5leHR0b3dhcmQgLTAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDUwNCBuZXh0dG93YXJkICAwRS0zMDAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1MDUgbmV4dHRvd2FyZCAgMEUrMzAwICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTA2IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDUwNyBuZXh0dG93YXJkIC0wRSszMDAwMCAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1MDggbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgIC0wLjAwMDAgICAtPiAtMC4wMAorCistLSBzcGVjaWFscworbmV4dHQ1NTAgbmV4dHRvd2FyZCAgIEluZiAgICAgLUluZmluaXR5IC0+ICA5Ljk5OTk5OTk5RSszODQKK25leHR0NTUxIG5leHR0b3dhcmQgIC1JbmYgICAgIC1JbmZpbml0eSAtPiAtSW5maW5pdHkKK25leHR0NTUyIG5leHR0b3dhcmQgICBOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOCituZXh0dDU1MyBuZXh0dG93YXJkICBzTmFOICAgICAtSW5maW5pdHkgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDU1NCBuZXh0dG93YXJkICAgTmFONzcgICAtSW5maW5pdHkgLT4gIE5hTjc3CituZXh0dDU1NSBuZXh0dG93YXJkICBzTmFOODggICAtSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCituZXh0dDU1NiBuZXh0dG93YXJkICAtTmFOICAgICAtSW5maW5pdHkgLT4gLU5hTgorbmV4dHQ1NTcgbmV4dHRvd2FyZCAtc05hTiAgICAgLUluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ1NTggbmV4dHRvd2FyZCAgLU5hTjc3ICAgLUluZmluaXR5IC0+IC1OYU43NworbmV4dHQ1NTkgbmV4dHRvd2FyZCAtc05hTjg4ICAgLUluZmluaXR5IC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscworbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK25leHR0NTcwIG5leHR0b3dhcmQgIDkuOTk5OTk5OTlFKzk5OSAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk5OEUrOTk5CituZXh0dDU3MSBuZXh0dG93YXJkICA5Ljk5OTk5OTk4RSs5OTkgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5OTdFKzk5OQorbmV4dHQ1NzIgbmV4dHRvd2FyZCAgMUUtOTk5ICAgICAgICAgICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTczIG5leHR0b3dhcmQgIDEuMDAwMDAwMDBFLTk5OSAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU3NCBuZXh0dG93YXJkICA5RS0xMDA3ICAgICAgICAgICAgLUluZmluaXR5IC0+IDhFLTEwMDcgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1NzUgbmV4dHRvd2FyZCAgOS45RS0xMDA2ICAgICAgICAgIC1JbmZpbml0eSAtPiA5LjhFLTEwMDYgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTc2IG5leHR0b3dhcmQgIDkuOTk5OUUtMTAwMyAgICAgICAtSW5maW5pdHkgLT4gOS45OTk4RS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU3NyBuZXh0dG93YXJkICA5Ljk5OTk5OTlFLTEwMDAgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5OEUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1NzggbmV4dHRvd2FyZCAgOS45OTk5OTk4RS0xMDAwICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OTdFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTc5IG5leHR0b3dhcmQgIDkuOTk5OTk5N0UtMTAwMCAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk2RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU4MCBuZXh0dG93YXJkICAwRS0xMDA3ICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1ODEgbmV4dHRvd2FyZCAgMUUtMTAwNyAgICAgICAgICAgIC1JbmZpbml0eSAtPiAwRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorbmV4dHQ1ODIgbmV4dHRvd2FyZCAgMkUtMTAwNyAgICAgICAgICAgIC1JbmZpbml0eSAtPiAxRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworbmV4dHQ1ODMgbmV4dHRvd2FyZCAgLTBFLTEwMDcgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTg0IG5leHR0b3dhcmQgIC0xRS0xMDA3ICAgICAgICAgICAtSW5maW5pdHkgLT4gLTJFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU4NSBuZXh0dG93YXJkICAtMkUtMTAwNyAgICAgICAgICAgLUluZmluaXR5IC0+IC0zRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1ODYgbmV4dHRvd2FyZCAgLTEwRS0xMDA3ICAgICAgICAgIC1JbmZpbml0eSAtPiAtMS4xRS0xMDA2ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK25leHR0NTg3IG5leHR0b3dhcmQgIC0xMDBFLTEwMDcgICAgICAgICAtSW5maW5pdHkgLT4gLTEuMDFFLTEwMDUgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDU4OCBuZXh0dG93YXJkICAtMTAwMDAwRS0xMDA3ICAgICAgLUluZmluaXR5IC0+IC0xLjAwMDAxRS0xMDAyICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ1ODkgbmV4dHRvd2FyZCAgLTEuMDAwMEUtOTk5ICAgICAgIC1JbmZpbml0eSAtPiAtMS4wMDAwMDAwMUUtOTk5CituZXh0dDU5MCBuZXh0dG93YXJkICAtMS4wMDAwMDAwMEUtOTk5ICAgLUluZmluaXR5IC0+IC0xLjAwMDAwMDAxRS05OTkKK25leHR0NTkxIG5leHR0b3dhcmQgIC0xRS05OTkgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTEuMDAwMDAwMDFFLTk5OQorbmV4dHQ1OTIgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OThFKzk5OSAgIC1JbmZpbml0eSAtPiAtOS45OTk5OTk5OUUrOTk5CituZXh0dDU5MyBuZXh0dG93YXJkICAtOS45OTk5OTk5OUUrOTk5ICAgLUluZmluaXR5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworCisKKworLS0tLS0tLSBTcGVjaWFscworbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKK25leHR0NzgwIG5leHR0b3dhcmQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorbmV4dHQ3ODEgbmV4dHRvd2FyZCAtSW5mICAtMTAwMCAgLT4gLTkuOTk5OTk5OTlFKzM4NAorbmV4dHQ3ODIgbmV4dHRvd2FyZCAtSW5mICAtMSAgICAgLT4gLTkuOTk5OTk5OTlFKzM4NAorbmV4dHQ3ODMgbmV4dHRvd2FyZCAtSW5mICAtMCAgICAgLT4gLTkuOTk5OTk5OTlFKzM4NAorbmV4dHQ3ODQgbmV4dHRvd2FyZCAtSW5mICAgMCAgICAgLT4gLTkuOTk5OTk5OTlFKzM4NAorbmV4dHQ3ODUgbmV4dHRvd2FyZCAtSW5mICAgMSAgICAgLT4gLTkuOTk5OTk5OTlFKzM4NAorbmV4dHQ3ODYgbmV4dHRvd2FyZCAtSW5mICAgMTAwMCAgLT4gLTkuOTk5OTk5OTlFKzM4NAorbmV4dHQ3ODcgbmV4dHRvd2FyZCAtMTAwMCAtSW5mICAgLT4gLTEwMDAuMDAwMDEKK25leHR0Nzg4IG5leHR0b3dhcmQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQorbmV4dHQ3ODkgbmV4dHRvd2FyZCAtMSAgICAtSW5mICAgLT4gLTEuMDAwMDAwMDEKK25leHR0NzkwIG5leHR0b3dhcmQgLTAgICAgLUluZiAgIC0+IC0xRS0zOTEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDc5MSBuZXh0dG93YXJkICAwICAgIC1JbmYgICAtPiAtMUUtMzkxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ3OTIgbmV4dHRvd2FyZCAgMSAgICAtSW5mICAgLT4gIDAuOTk5OTk5OTk5CituZXh0dDc5MyBuZXh0dG93YXJkICAxMDAwIC1JbmYgICAtPiAgOTk5Ljk5OTk5OQorbmV4dHQ3OTQgbmV4dHRvd2FyZCAgSW5mICAtSW5mICAgLT4gIDkuOTk5OTk5OTlFKzM4NAorCituZXh0dDgwMCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OUUrMzg0CituZXh0dDgwMSBuZXh0dG93YXJkICBJbmYgIC0xMDAwICAtPiAgOS45OTk5OTk5OUUrMzg0CituZXh0dDgwMiBuZXh0dG93YXJkICBJbmYgIC0xICAgICAtPiAgOS45OTk5OTk5OUUrMzg0CituZXh0dDgwMyBuZXh0dG93YXJkICBJbmYgIC0wICAgICAtPiAgOS45OTk5OTk5OUUrMzg0CituZXh0dDgwNCBuZXh0dG93YXJkICBJbmYgICAwICAgICAtPiAgOS45OTk5OTk5OUUrMzg0CituZXh0dDgwNSBuZXh0dG93YXJkICBJbmYgICAxICAgICAtPiAgOS45OTk5OTk5OUUrMzg0CituZXh0dDgwNiBuZXh0dG93YXJkICBJbmYgICAxMDAwICAtPiAgOS45OTk5OTk5OUUrMzg0CituZXh0dDgwNyBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK25leHR0ODA4IG5leHR0b3dhcmQgLTEwMDAgIEluZiAgIC0+IC05OTkuOTk5OTk5CituZXh0dDgwOSBuZXh0dG93YXJkIC1JbmYgICBJbmYgICAtPiAtOS45OTk5OTk5OUUrMzg0CituZXh0dDgxMCBuZXh0dG93YXJkIC0xICAgICBJbmYgICAtPiAtMC45OTk5OTk5OTkKK25leHR0ODExIG5leHR0b3dhcmQgLTAgICAgIEluZiAgIC0+ICAxRS0zOTEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCituZXh0dDgxMiBuZXh0dG93YXJkICAwICAgICBJbmYgICAtPiAgMUUtMzkxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorbmV4dHQ4MTMgbmV4dHRvd2FyZCAgMSAgICAgSW5mICAgLT4gIDEuMDAwMDAwMDEKK25leHR0ODE0IG5leHR0b3dhcmQgIDEwMDAgIEluZiAgIC0+ICAxMDAwLjAwMDAxCituZXh0dDgxNSBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKKworbmV4dHQ4MjEgbmV4dHRvd2FyZCAgTmFOIC1JbmYgICAgLT4gIE5hTgorbmV4dHQ4MjIgbmV4dHRvd2FyZCAgTmFOIC0xMDAwICAgLT4gIE5hTgorbmV4dHQ4MjMgbmV4dHRvd2FyZCAgTmFOIC0xICAgICAgLT4gIE5hTgorbmV4dHQ4MjQgbmV4dHRvd2FyZCAgTmFOIC0wICAgICAgLT4gIE5hTgorbmV4dHQ4MjUgbmV4dHRvd2FyZCAgTmFOICAwICAgICAgLT4gIE5hTgorbmV4dHQ4MjYgbmV4dHRvd2FyZCAgTmFOICAxICAgICAgLT4gIE5hTgorbmV4dHQ4MjcgbmV4dHRvd2FyZCAgTmFOICAxMDAwICAgLT4gIE5hTgorbmV4dHQ4MjggbmV4dHRvd2FyZCAgTmFOICBJbmYgICAgLT4gIE5hTgorbmV4dHQ4MjkgbmV4dHRvd2FyZCAgTmFOICBOYU4gICAgLT4gIE5hTgorbmV4dHQ4MzAgbmV4dHRvd2FyZCAtSW5mICBOYU4gICAgLT4gIE5hTgorbmV4dHQ4MzEgbmV4dHRvd2FyZCAtMTAwMCBOYU4gICAgLT4gIE5hTgorbmV4dHQ4MzIgbmV4dHRvd2FyZCAtMSAgICBOYU4gICAgLT4gIE5hTgorbmV4dHQ4MzMgbmV4dHRvd2FyZCAtMCAgICBOYU4gICAgLT4gIE5hTgorbmV4dHQ4MzQgbmV4dHRvd2FyZCAgMCAgICBOYU4gICAgLT4gIE5hTgorbmV4dHQ4MzUgbmV4dHRvd2FyZCAgMSAgICBOYU4gICAgLT4gIE5hTgorbmV4dHQ4MzYgbmV4dHRvd2FyZCAgMTAwMCBOYU4gICAgLT4gIE5hTgorbmV4dHQ4MzcgbmV4dHRvd2FyZCAgSW5mICBOYU4gICAgLT4gIE5hTgorCituZXh0dDg0MSBuZXh0dG93YXJkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NDIgbmV4dHRvd2FyZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODQzIG5leHR0b3dhcmQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg0NCBuZXh0dG93YXJkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NDUgbmV4dHRvd2FyZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODQ2IG5leHR0b3dhcmQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg0NyBuZXh0dG93YXJkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NDggbmV4dHRvd2FyZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODQ5IG5leHR0b3dhcmQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg1MCBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NTEgbmV4dHRvd2FyZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODUyIG5leHR0b3dhcmQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg1MyBuZXh0dG93YXJkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NTQgbmV4dHRvd2FyZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODU1IG5leHR0b3dhcmQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg1NiBuZXh0dG93YXJkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NTcgbmV4dHRvd2FyZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK25leHR0ODU4IG5leHR0b3dhcmQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg1OSBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCituZXh0dDg2MSBuZXh0dG93YXJkICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorbmV4dHQ4NjIgbmV4dHRvd2FyZCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK25leHR0ODYzIG5leHR0b3dhcmQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCituZXh0dDg2NCBuZXh0dG93YXJkICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorbmV4dHQ4NjUgbmV4dHRvd2FyZCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK25leHR0ODY2IG5leHR0b3dhcmQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CituZXh0dDg2NyBuZXh0dG93YXJkIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorbmV4dHQ4NjggbmV4dHRvd2FyZCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK25leHR0ODY5IG5leHR0b3dhcmQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorbmV4dHQ4NzEgbmV4dHRvd2FyZCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NzIgbmV4dHRvd2FyZCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NzMgbmV4dHRvd2FyZCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NzQgbmV4dHRvd2FyZCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NzUgbmV4dHRvd2FyZCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NzYgbmV4dHRvd2FyZCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NzcgbmV4dHRvd2FyZCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NzggbmV4dHRvd2FyZCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4NzkgbmV4dHRvd2FyZCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4ODAgbmV4dHRvd2FyZCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4ODEgbmV4dHRvd2FyZCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ4ODIgbmV4dHRvd2FyZCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CituZXh0dDg4MyBuZXh0dG93YXJkIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCituZXh0dDg4NCBuZXh0dG93YXJkICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK25leHR0ODg1IG5leHR0b3dhcmQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0cworbmV4dHQ5MDAgbmV4dHRvd2FyZCAxICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorbmV4dHQ5MDEgbmV4dHRvd2FyZCAjICAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL29yLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL29yLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFlYmZmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvb3IuZGVjVGVzdApAQCAtMCwwICsxLDMzNCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBvci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbkV4cG9uZW50OiAtOTk5CisKKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCitvcngwMDEgb3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK29yeDAwMiBvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQorb3J4MDAzIG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxCitvcngwMDQgb3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDEKK29yeDAwNSBvciAgICAgICAgICAxMTAwIDEwMTAgLT4gMTExMAorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKK29yeDAwNiBvciAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCitvcngwMDcgb3IgMDAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMAorb3J4MDA4IG9yIDEwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAKK29yeDAwOSBvciAxMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwCitvcngwMTAgb3IgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAorb3J4MDExIG9yIDAwMDAwMDAwMCAwMTAwMDAwMDAgLT4gICAgMTAwMDAwMDAKK29yeDAxMiBvciAwMTAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwCitvcngwMTMgb3IgMDEwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAxMDAwMDAwMAorCistLSBWYXJpb3VzIGxlbmd0aHMKKy0tICAgICAgICAxMjM0NTY3ODkgICAgIDEyMzQ1Njc4OSAgICAgIDEyMzQ1Njc4OQorb3J4MDIxIG9yIDExMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwMjIgb3IgMTExMTExMTExMTExICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDAyMyBvciAgMTExMTExMTEgICAgICAxMTExMTExMSAgLT4gICAxMTExMTExMQorb3J4MDI1IG9yICAgMTExMTExMSAgICAgICAxMTExMTExICAtPiAgICAxMTExMTExCitvcngwMjYgb3IgICAgMTExMTExICAgICAgICAxMTExMTEgIC0+ICAgICAxMTExMTEKK29yeDAyNyBvciAgICAgMTExMTEgICAgICAgICAxMTExMSAgLT4gICAgICAxMTExMQorb3J4MDI4IG9yICAgICAgMTExMSAgICAgICAgICAxMTExICAtPiAgICAgICAxMTExCitvcngwMjkgb3IgICAgICAgMTExICAgICAgICAgICAxMTEgIC0+ICAgICAgICAxMTEKK29yeDAzMSBvciAgICAgICAgMTEgICAgICAgICAgICAxMSAgLT4gICAgICAgICAxMQorb3J4MDMyIG9yICAgICAgICAgMSAgICAgICAgICAgICAxICAtPiAgICAgICAgICAxCitvcngwMzMgb3IgMTExMTExMTExMTExIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDAzNCBvciAxMTExMTExMTExMSAxMTExMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MDM1IG9yIDExMTExMTExMTEgMTExMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwMzYgb3IgMTExMTExMTExIDExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKKworb3J4MDQwIG9yIDExMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwNDEgb3IgIDExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDA0MiBvciAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MDQzIG9yICAgMTExMTExMSAgICAgMTAwMDAwMDEwICAtPiAgMTAxMTExMTExCitvcngwNDQgb3IgICAgMTExMTExICAgICAxMDAwMDAxMDAgIC0+ICAxMDAxMTExMTEKK29yeDA0NSBvciAgICAgMTExMTEgICAgIDEwMDAwMTAwMCAgLT4gIDEwMDAxMTExMQorb3J4MDQ2IG9yICAgICAgMTExMSAgICAgMTAwMDEwMDAwICAtPiAgMTAwMDExMTExCitvcngwNDcgb3IgICAgICAgMTExICAgICAxMDAxMDAwMDAgIC0+ICAxMDAxMDAxMTEKK29yeDA0OCBvciAgICAgICAgMTEgICAgIDEwMTAwMDAwMCAgLT4gIDEwMTAwMDAxMQorb3J4MDQ5IG9yICAgICAgICAgMSAgICAgMTEwMDAwMDAwICAtPiAgMTEwMDAwMDAxCisKK29yeDA1MCBvciAxMTExMTExMTExICAxICAtPiAgMTExMTExMTExCitvcngwNTEgb3IgIDExMTExMTExMSAgMSAgLT4gIDExMTExMTExMQorb3J4MDUyIG9yICAgMTExMTExMTEgIDEgIC0+ICAxMTExMTExMQorb3J4MDUzIG9yICAgIDExMTExMTEgIDEgIC0+ICAxMTExMTExCitvcngwNTQgb3IgICAgIDExMTExMSAgMSAgLT4gIDExMTExMQorb3J4MDU1IG9yICAgICAgMTExMTEgIDEgIC0+ICAxMTExMQorb3J4MDU2IG9yICAgICAgIDExMTEgIDEgIC0+ICAxMTExCitvcngwNTcgb3IgICAgICAgIDExMSAgMSAgLT4gIDExMQorb3J4MDU4IG9yICAgICAgICAgMTEgIDEgIC0+ICAxMQorb3J4MDU5IG9yICAgICAgICAgIDEgIDEgIC0+ICAxCisKK29yeDA2MCBvciAxMTExMTExMTExICAwICAtPiAgMTExMTExMTExCitvcngwNjEgb3IgIDExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQorb3J4MDYyIG9yICAgMTExMTExMTEgIDAgIC0+ICAxMTExMTExMQorb3J4MDYzIG9yICAgIDExMTExMTEgIDAgIC0+ICAxMTExMTExCitvcngwNjQgb3IgICAgIDExMTExMSAgMCAgLT4gIDExMTExMQorb3J4MDY1IG9yICAgICAgMTExMTEgIDAgIC0+ICAxMTExMQorb3J4MDY2IG9yICAgICAgIDExMTEgIDAgIC0+ICAxMTExCitvcngwNjcgb3IgICAgICAgIDExMSAgMCAgLT4gIDExMQorb3J4MDY4IG9yICAgICAgICAgMTEgIDAgIC0+ICAxMQorb3J4MDY5IG9yICAgICAgICAgIDEgIDAgIC0+ICAxCisKK29yeDA3MCBvciAxICAxMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwNzEgb3IgMSAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MDcyIG9yIDEgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQorb3J4MDczIG9yIDEgICAgIDExMTExMTEgIC0+ICAxMTExMTExCitvcngwNzQgb3IgMSAgICAgIDExMTExMSAgLT4gIDExMTExMQorb3J4MDc1IG9yIDEgICAgICAgMTExMTEgIC0+ICAxMTExMQorb3J4MDc2IG9yIDEgICAgICAgIDExMTEgIC0+ICAxMTExCitvcngwNzcgb3IgMSAgICAgICAgIDExMSAgLT4gIDExMQorb3J4MDc4IG9yIDEgICAgICAgICAgMTEgIC0+ICAxMQorb3J4MDc5IG9yIDEgICAgICAgICAgIDEgIC0+ICAxCisKK29yeDA4MCBvciAwICAxMTExMTExMTExICAtPiAgMTExMTExMTExCitvcngwODEgb3IgMCAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQorb3J4MDgyIG9yIDAgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQorb3J4MDgzIG9yIDAgICAgIDExMTExMTEgIC0+ICAxMTExMTExCitvcngwODQgb3IgMCAgICAgIDExMTExMSAgLT4gIDExMTExMQorb3J4MDg1IG9yIDAgICAgICAgMTExMTEgIC0+ICAxMTExMQorb3J4MDg2IG9yIDAgICAgICAgIDExMTEgIC0+ICAxMTExCitvcngwODcgb3IgMCAgICAgICAgIDExMSAgLT4gIDExMQorb3J4MDg4IG9yIDAgICAgICAgICAgMTEgIC0+ICAxMQorb3J4MDg5IG9yIDAgICAgICAgICAgIDEgIC0+ICAxCisKK29yeDA5MCBvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorb3J4MDkxIG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitvcngwOTIgb3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK29yeDA5MyBvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorb3J4MDk0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExCitvcngwOTUgb3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKK29yeDA5NiBvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQorb3J4MDk3IG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCitvcngwOTggb3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKKworb3J4MTAwIG9yIDExMTEwMTExMSAgMDExMTExMTExICAtPiAgMTExMTExMTExCitvcngxMDEgb3IgMTExMTAxMTExICAxMDExMTExMTEgIC0+ICAxMTExMTExMTEKK29yeDEwMiBvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gIDExMTExMTExMQorb3J4MTAzIG9yIDExMTEwMTExMSAgMTExMDExMTExICAtPiAgMTExMTExMTExCitvcngxMDQgb3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKK29yeDEwNSBvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gIDExMTExMTExMQorb3J4MTA2IG9yIDExMTEwMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMTExCitvcngxMDcgb3IgMTExMTAxMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMTEKK29yeDEwOCBvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMQorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK29yeDIyMCBvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjIxIG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMjIgb3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIyMyBvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjI0IG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMjUgb3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIyNiBvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjI3IG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMjggb3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIyOSBvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjMwIG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyMzEgb3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDIzMiBvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYSBmZXcgcmFuZG9tcworb3J4MjQwIG9yICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNDEgb3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI0MiBvciAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjQzIG9yIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNDQgb3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECitvcngyNTAgb3IgIDIwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjUxIG9yICA3MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI1MiBvciAgODAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNTMgb3IgIDkwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjU0IG9yICAyMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI1NSBvciAgNzAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNTYgb3IgIDgwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjU3IG9yICA5MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI1OCBvciAgMTAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNTkgb3IgIDEwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjYwIG9yICAxMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI2MSBvciAgMTAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNjIgb3IgIDAwMDAwMDAwMCAyMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjYzIG9yICAwMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI2NCBvciAgMDAwMDAwMDAwIDgwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNjUgb3IgIDAwMDAwMDAwMCA5MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNU0QtMQorb3J4MjcwIG9yICAwMjAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI3MSBvciAgMDcwMTAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNzIgb3IgIDA4MDAxMDAwMCAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjczIG9yICAwOTAwMDEwMDAgMTAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI3NCBvciAgMTAwMDAwMTAwIDAyMDAxMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyNzUgb3IgIDEwMDAwMDAwMCAwNzAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjc2IG9yICAxMDAwMDAwMTAgMDgwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI3NyBvciAgMTAwMDAwMDAwIDA5MDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAorb3J4MjgwIG9yICAwMDEwMDAwMDIgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI4MSBvciAgMDAwMDAwMDA3IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyODIgb3IgIDAwMDAwMDAwOCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjgzIG9yICAwMDAwMDAwMDkgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI4NCBvciAgMTAwMDAwMDAwIDAwMDEwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyODUgb3IgIDEwMDEwMDAwMCAwMDEwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjg2IG9yICAxMDAwMTAwMDAgMDEwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI4NyBvciAgMTAwMDAxMDAwIDEwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1pZGRpZQorb3J4Mjg4IG9yICAwMDEwMjAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI4OSBvciAgMDAwMDcwMDAxIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyOTAgb3IgIDAwMDA4MDAwMCAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MjkxIG9yICAwMDAwOTAwMDAgMTAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI5MiBvciAgMTAwMDAwMDEwIDAwMDAyMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyOTMgb3IgIDEwMDEwMDAwMCAwMDAwNzAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjk0IG9yICAxMDAwMTAxMDAgMDAwMDgwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI5NSBvciAgMTAwMDAxMDAwIDAwMDA5MDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBzaWducworb3J4Mjk2IG9yIC0xMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngyOTcgb3IgLTEwMDAwMTAwMCAgMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDI5OCBvciAgMTAwMDAxMDAwIC0wMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mjk5IG9yICAxMDAwMDEwMDAgIDAwMDAxMTAwMCAtPiAgMTAwMDExMDAwCisKKy0tIE5tYXgsIE5taW4sIE50aW55CitvcngzMzEgb3IgIDIgICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzMyIG9yICAzICAgMUUtOTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDMzMyBvciAgNCAgIDEuMDAwMDAwMDBFLTk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzMzQgb3IgIDUgICAxRS0xMDA3ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzM1IG9yICA2ICAgLTFFLTEwMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDMzNiBvciAgNyAgIC0xLjAwMDAwMDAwRS05OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzMzcgb3IgIDggICAtMUUtOTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzM4IG9yICA5ICAgLTkuOTk5OTk5OTlFKzk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM0MSBvciAgOS45OTk5OTk5OUUrOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNDIgb3IgIDFFLTk5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzQzIG9yICAxLjAwMDAwMDAwRS05OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM0NCBvciAgMUUtMTAwNyAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNDUgb3IgIC0xRS0xMDA3ICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzQ2IG9yICAtMS4wMDAwMDAwMEUtOTk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM0NyBvciAgLTFFLTk5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNDggb3IgIC05Ljk5OTk5OTk5RSs5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKK29yeDM2MSBvciAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNjIgb3IgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzYzIG9yICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM2NCBvciAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNjUgb3IgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzY2IG9yICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM3MSBvciAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNzIgb3IgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4MzczIG9yICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDM3NCBvciAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcngzNzUgb3IgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Mzc2IG9yICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgorb3J4NzgwIG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc4MSBvciAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3ODIgb3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4NzgzIG9yIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc4NCBvciAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3ODUgb3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Nzg2IG9yIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc4NyBvciAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3ODggb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4Nzg5IG9yIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc5MCBvciAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3OTEgb3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4NzkyIG9yICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDc5MyBvciAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng3OTQgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitvcng4MDAgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODAxIG9yICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgwMiBvciAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MDMgb3IgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODA0IG9yICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgwNSBvciAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MDYgb3IgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODA3IG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgwOCBvciAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MDkgb3IgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODEwIG9yIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgxMSBvciAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MTIgb3IgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODEzIG9yICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgxNCBvciAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MTUgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitvcng4MjEgb3IgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODIyIG9yICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgyMyBvciAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MjQgb3IgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODI1IG9yICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgyNiBvciAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4Mjcgb3IgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODI4IG9yICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgyOSBvciAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MzAgb3IgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODMxIG9yIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgzMiBvciAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MzMgb3IgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODM0IG9yICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDgzNSBvciAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4MzYgb3IgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODM3IG9yICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworb3J4ODQxIG9yICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQyIG9yICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQzIG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQ0IG9yICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQ1IG9yICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQ2IG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQ3IG9yICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQ4IG9yICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODQ5IG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODUwIG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODUxIG9yIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODUyIG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODUzIG9yIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODU0IG9yIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODU1IG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODU2IG9yICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODU3IG9yICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODU4IG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODU5IG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitvcng4NjEgb3IgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODYyIG9yICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg2MyBvciAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4NjQgb3IgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODY1IG9yICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg2NiBvciAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4Njcgb3IgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODY4IG9yICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg2OSBvciAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4NzEgb3IgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODcyIG9yICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg3MyBvciAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4NzQgb3IgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODc1IG9yICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg3NiBvciAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4Nzcgb3IgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODc4IG9yIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg3OSBvciAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4ODAgb3IgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODgxIG9yICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg4MiBvciAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitvcng4ODMgb3IgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorb3J4ODg0IG9yICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK29yeDg4NSBvciAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3BsdXMuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcGx1cy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZTg0M2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3BsdXMuZGVjVGVzdApAQCAtMCwwICsxLDE5NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBwbHVzLmRlY1Rlc3QgLS0gZGVjaW1hbCBtb25hZGljIGFkZGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoaXMgc2V0IG9mIHRlc3RzIHByaW1hcmlseSB0ZXN0cyB0aGUgZXhpc3RlbmNlIG9mIHRoZSBvcGVyYXRvci4KKy0tIEFkZGl0aW9uIGFuZCByb3VuZGluZywgYW5kIG1vc3Qgb3ZlcmZsb3dzLCBhcmUgdGVzdGVkIGVsc2V3aGVyZS4KKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworcGx1eDAwMSBwbHVzICcxJyAgICAgIC0+ICcxJworcGx1eDAwMiBwbHVzICctMScgICAgIC0+ICctMScKK3BsdXgwMDMgcGx1cyAnMS4wMCcgICAtPiAnMS4wMCcKK3BsdXgwMDQgcGx1cyAnLTEuMDAnICAtPiAnLTEuMDAnCitwbHV4MDA1IHBsdXMgJzAnICAgICAgLT4gJzAnCitwbHV4MDA2IHBsdXMgJzAuMDAnICAgLT4gJzAuMDAnCitwbHV4MDA3IHBsdXMgJzAwLjAnICAgLT4gJzAuMCcKK3BsdXgwMDggcGx1cyAnMDAuMDAnICAtPiAnMC4wMCcKK3BsdXgwMDkgcGx1cyAnMDAnICAgICAtPiAnMCcKKworcGx1eDAxMCBwbHVzICctMicgICAgIC0+ICctMicKK3BsdXgwMTEgcGx1cyAnMicgICAgICAtPiAnMicKK3BsdXgwMTIgcGx1cyAnLTIuMDAnICAtPiAnLTIuMDAnCitwbHV4MDEzIHBsdXMgJzIuMDAnICAgLT4gJzIuMDAnCitwbHV4MDE0IHBsdXMgJy0wJyAgICAgLT4gJzAnCitwbHV4MDE1IHBsdXMgJy0wLjAwJyAgLT4gJzAuMDAnCitwbHV4MDE2IHBsdXMgJy0wMC4wJyAgLT4gJzAuMCcKK3BsdXgwMTcgcGx1cyAnLTAwLjAwJyAtPiAnMC4wMCcKK3BsdXgwMTggcGx1cyAnLTAwJyAgICAtPiAnMCcKKworcGx1eDAyMCBwbHVzICctMjAwMDAwMCcgLT4gJy0yMDAwMDAwJworcGx1eDAyMSBwbHVzICcyMDAwMDAwJyAgLT4gJzIwMDAwMDAnCitwcmVjaXNpb246IDcKK3BsdXgwMjIgcGx1cyAnLTIwMDAwMDAnIC0+ICctMjAwMDAwMCcKK3BsdXgwMjMgcGx1cyAnMjAwMDAwMCcgIC0+ICcyMDAwMDAwJworcHJlY2lzaW9uOiA2CitwbHV4MDI0IHBsdXMgJy0yMDAwMDAwJyAtPiAnLTIuMDAwMDBFKzYnIFJvdW5kZWQKK3BsdXgwMjUgcGx1cyAnMjAwMDAwMCcgIC0+ICcyLjAwMDAwRSs2JyBSb3VuZGVkCitwcmVjaXNpb246IDMKK3BsdXgwMjYgcGx1cyAnLTIwMDAwMDAnIC0+ICctMi4wMEUrNicgUm91bmRlZAorcGx1eDAyNyBwbHVzICcyMDAwMDAwJyAgLT4gJzIuMDBFKzYnIFJvdW5kZWQKKworLS0gbW9yZSBmaXhlZCwgcG90ZW50aWFsIExIUyBzd2FwcyBpZiBkb25lIGJ5IGFkZCAwCitwcmVjaXNpb246IDkKK3BsdXgwNjAgcGx1cyAnNTYyNjdFLTEwJyAgIC0+ICcwLjAwMDAwNTYyNjcnCitwbHV4MDYxIHBsdXMgJzU2MjY3RS01JyAgICAtPiAnMC41NjI2NycKK3BsdXgwNjIgcGx1cyAnNTYyNjdFLTInICAgIC0+ICc1NjIuNjcnCitwbHV4MDYzIHBsdXMgJzU2MjY3RS0xJyAgICAtPiAnNTYyNi43JworcGx1eDA2NSBwbHVzICc1NjI2N0UtMCcgICAgLT4gJzU2MjY3JworcGx1eDA2NiBwbHVzICc1NjI2N0UrMCcgICAgLT4gJzU2MjY3JworcGx1eDA2NyBwbHVzICc1NjI2N0UrMScgICAgLT4gJzUuNjI2N0UrNScKK3BsdXgwNjggcGx1cyAnNTYyNjdFKzInICAgIC0+ICc1LjYyNjdFKzYnCitwbHV4MDY5IHBsdXMgJzU2MjY3RSszJyAgICAtPiAnNS42MjY3RSs3JworcGx1eDA3MCBwbHVzICc1NjI2N0UrNCcgICAgLT4gJzUuNjI2N0UrOCcKK3BsdXgwNzEgcGx1cyAnNTYyNjdFKzUnICAgIC0+ICc1LjYyNjdFKzknCitwbHV4MDcyIHBsdXMgJzU2MjY3RSs2JyAgICAtPiAnNS42MjY3RSsxMCcKK3BsdXgwODAgcGx1cyAnLTU2MjY3RS0xMCcgIC0+ICctMC4wMDAwMDU2MjY3JworcGx1eDA4MSBwbHVzICctNTYyNjdFLTUnICAgLT4gJy0wLjU2MjY3JworcGx1eDA4MiBwbHVzICctNTYyNjdFLTInICAgLT4gJy01NjIuNjcnCitwbHV4MDgzIHBsdXMgJy01NjI2N0UtMScgICAtPiAnLTU2MjYuNycKK3BsdXgwODUgcGx1cyAnLTU2MjY3RS0wJyAgIC0+ICctNTYyNjcnCitwbHV4MDg2IHBsdXMgJy01NjI2N0UrMCcgICAtPiAnLTU2MjY3JworcGx1eDA4NyBwbHVzICctNTYyNjdFKzEnICAgLT4gJy01LjYyNjdFKzUnCitwbHV4MDg4IHBsdXMgJy01NjI2N0UrMicgICAtPiAnLTUuNjI2N0UrNicKK3BsdXgwODkgcGx1cyAnLTU2MjY3RSszJyAgIC0+ICctNS42MjY3RSs3JworcGx1eDA5MCBwbHVzICctNTYyNjdFKzQnICAgLT4gJy01LjYyNjdFKzgnCitwbHV4MDkxIHBsdXMgJy01NjI2N0UrNScgICAtPiAnLTUuNjI2N0UrOScKK3BsdXgwOTIgcGx1cyAnLTU2MjY3RSs2JyAgIC0+ICctNS42MjY3RSsxMCcKKworLS0gImxocyIgemVyb3MgaW4gcGx1cyBhbmQgbWludXMgaGF2ZSBleHBvbmVudCA9IG9wZXJhbmQKK3BsdXgxMjAgcGx1cyAnLTBFMycgICAtPiAnMEUrMycKK3BsdXgxMjEgcGx1cyAnLTBFMicgICAtPiAnMEUrMicKK3BsdXgxMjIgcGx1cyAnLTBFMScgICAtPiAnMEUrMScKK3BsdXgxMjMgcGx1cyAnLTBFMCcgICAtPiAnMCcKK3BsdXgxMjQgcGx1cyAnKzBFMCcgICAtPiAnMCcKK3BsdXgxMjUgcGx1cyAnKzBFMScgICAtPiAnMEUrMScKK3BsdXgxMjYgcGx1cyAnKzBFMicgICAtPiAnMEUrMicKK3BsdXgxMjcgcGx1cyAnKzBFMycgICAtPiAnMEUrMycKKworcGx1eDEzMCBwbHVzICctNUUzJyAgIC0+ICctNUUrMycKK3BsdXgxMzEgcGx1cyAnLTVFOCcgICAtPiAnLTVFKzgnCitwbHV4MTMyIHBsdXMgJy01RTEzJyAgLT4gJy01RSsxMycKK3BsdXgxMzMgcGx1cyAnLTVFMTgnICAtPiAnLTVFKzE4JworcGx1eDEzNCBwbHVzICcrNUUzJyAgIC0+ICc1RSszJworcGx1eDEzNSBwbHVzICcrNUU4JyAgIC0+ICc1RSs4JworcGx1eDEzNiBwbHVzICcrNUUxMycgIC0+ICc1RSsxMycKK3BsdXgxMzcgcGx1cyAnKzVFMTgnICAtPiAnNUUrMTgnCisKKy0tIHNwZWNpYWxzCitwbHV4MTUwIHBsdXMgJ0luZicgICAgLT4gJ0luZmluaXR5JworcGx1eDE1MSBwbHVzICctSW5mJyAgIC0+ICctSW5maW5pdHknCitwbHV4MTUyIHBsdXMgICBOYU4gICAgLT4gIE5hTgorcGx1eDE1MyBwbHVzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgorcGx1eDE1NCBwbHVzICAgTmFONzcgIC0+ICBOYU43NworcGx1eDE1NSBwbHVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgorcGx1eDE1NiBwbHVzICAtTmFOICAgIC0+IC1OYU4KK3BsdXgxNTcgcGx1cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KK3BsdXgxNTggcGx1cyAgLU5hTjc3ICAtPiAtTmFONzcKK3BsdXgxNTkgcGx1cyAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KKworLS0gb3ZlcmZsb3cgdGVzdHMKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitwcmVjaXNpb246IDMKK3BsdXgxNjAgcGx1cyA5Ljk5OUUrOTk5OTk5OTk5ICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCitwbHV4MTYxIHBsdXMgLTkuOTk5RSs5OTk5OTk5OTkgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKK3ByZWNpc2lvbjogMworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3BsdXgyMTAgcGx1cyAgMS4wMEUtOTk5ICAgICAgICAtPiAgIDEuMDBFLTk5OQorcGx1eDIxMSBwbHVzICAwLjFFLTk5OSAgICAgICAgIC0+ICAgMUUtMTAwMCAgIFN1Ym5vcm1hbAorcGx1eDIxMiBwbHVzICAwLjEwRS05OTkgICAgICAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbAorcGx1eDIxMyBwbHVzICAwLjEwMEUtOTk5ICAgICAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCitwbHV4MjE0IHBsdXMgIDAuMDFFLTk5OSAgICAgICAgLT4gICAxRS0xMDAxICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorcGx1eDIxNSBwbHVzICAwLjk5OUUtOTk5ICAgICAgIC0+ICAgMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitwbHV4MjE2IHBsdXMgIDAuMDk5RS05OTkgICAgICAgLT4gICAxLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3BsdXgyMTcgcGx1cyAgMC4wMDlFLTk5OSAgICAgICAtPiAgIDFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworcGx1eDIxOCBwbHVzICAwLjAwMUUtOTk5ICAgICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK3BsdXgyMTkgcGx1cyAgMC4wMDA5RS05OTkgICAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitwbHV4MjIwIHBsdXMgIDAuMDAwMUUtOTk5ICAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorCitwbHV4MjMwIHBsdXMgLTEuMDBFLTk5OSAgICAgICAgLT4gIC0xLjAwRS05OTkKK3BsdXgyMzEgcGx1cyAtMC4xRS05OTkgICAgICAgICAtPiAgLTFFLTEwMDAgICBTdWJub3JtYWwKK3BsdXgyMzIgcGx1cyAtMC4xMEUtOTk5ICAgICAgICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwKK3BsdXgyMzMgcGx1cyAtMC4xMDBFLTk5OSAgICAgICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorcGx1eDIzNCBwbHVzIC0wLjAxRS05OTkgICAgICAgIC0+ICAtMUUtMTAwMSAgIFN1Ym5vcm1hbAorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KK3BsdXgyMzUgcGx1cyAtMC45OTlFLTk5OSAgICAgICAtPiAgLTEuMDBFLTk5OSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworcGx1eDIzNiBwbHVzIC0wLjA5OUUtOTk5ICAgICAgIC0+ICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitwbHV4MjM3IHBsdXMgLTAuMDA5RS05OTkgICAgICAgLT4gIC0xRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3BsdXgyMzggcGx1cyAtMC4wMDFFLTk5OSAgICAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitwbHV4MjM5IHBsdXMgLTAuMDAwOUUtOTk5ICAgICAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorcGx1eDI0MCBwbHVzIC0wLjAwMDFFLTk5OSAgICAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKKworLS0gc3Vibm9ybWFscyBjbGFtcGVkIHRvIDAtRXRpbnkKK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK3BsdXgyNTEgcGx1cyA3RS0zOTggICAgIC0+IDdFLTM5OCBTdWJub3JtYWwKK3BsdXgyNTIgcGx1cyAwRS0zOTggICAgIC0+IDBFLTM5OAorcGx1eDI1MyBwbHVzIDdFLTM5OSAgICAgLT4gMUUtMzk4IFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwbHV4MjU0IHBsdXMgNEUtMzk5ICAgICAtPiAwRS0zOTggQ2xhbXBlZCBTdWJub3JtYWwgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZAorcGx1eDI1NSBwbHVzIDdFLTQwMCAgICAgLT4gMEUtMzk4IENsYW1wZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3BsdXgyNTYgcGx1cyA3RS00MDEgICAgIC0+IDBFLTM5OCBDbGFtcGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwbHV4MjU3IHBsdXMgMEUtMzk5ICAgICAtPiAwRS0zOTggQ2xhbXBlZAorcGx1eDI1OCBwbHVzIDBFLTQwMCAgICAgLT4gMEUtMzk4IENsYW1wZWQKK3BsdXgyNTkgcGx1cyAwRS00MDEgICAgIC0+IDBFLTM5OCBDbGFtcGVkCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK3BsdXgzMDEgcGx1cyAxMjM0NTY3ODAwMCAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAorcGx1eDMwMiBwbHVzIDEyMzQ1Njc4MDAgICAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK3BsdXgzMDMgcGx1cyAxMjM0NTY3ODkwICAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitwbHV4MzA0IHBsdXMgMTIzNDU2Nzg5MSAgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCitwbHV4MzA1IHBsdXMgMTIzNDU2Nzg5MDEgIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorcGx1eDMwNiBwbHVzIDEyMzQ1Njc4OTYgICAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorCistLSBzdGlsbCBjaGVja2luZworcHJlY2lzaW9uOiAxNQorcGx1eDMyMSBwbHVzIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMAorcGx1eDMyMiBwbHVzIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwCitwbHV4MzIzIHBsdXMgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTAKK3BsdXgzMjQgcGx1cyAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQorcGx1eDMyNSBwbHVzIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQorcGx1eDMyNiBwbHVzIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2CitwcmVjaXNpb246IDkKKworLS0gTnVsbCB0ZXN0cworcGx1OTAwIHBsdXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcG93ZXIuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcG93ZXIuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2YxNDZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9wb3dlci5kZWNUZXN0CkBAIC0wLDAgKzEsMTYyNCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBwb3dlci5kZWNUZXN0IC0tIGRlY2ltYWwgZXhwb25lbnRpYXRpb24gW3Bvd2VyKHgsIHkpXSAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIEluIGFkZGl0aW9uIHRvIHRoZSBwb3dlciBvcGVyYXRvciB0ZXN0Y2FzZXMgaGVyZSwgc2VlIGFsc28gdGhlIGZpbGUKKy0tIHBvd2Vyc3FydC5kZWNUZXN0IHdoaWNoIGluY2x1ZGVzIGFsbCB0aGUgdGVzdHMgZnJvbQorLS0gc3F1YXJlcm9vdC5kZWNUZXN0IGltcGxlbWVudGVkIHVzaW5nIHBvd2VyKHgsIDAuNSkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKKworLS0gYmFzZSBjaGVja3MuICBOb3RlIDAqKjAgaXMgYW4gZXJyb3IuCitwb3d4MDAxIHBvd2VyICAgICcwJyAgJzAnICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwb3d4MDAyIHBvd2VyICAgICcwJyAgJzEnICAgICAgICAgLT4gJzAnCitwb3d4MDAzIHBvd2VyICAgICcwJyAgJzInICAgICAgICAgLT4gJzAnCitwb3d4MDA0IHBvd2VyICAgICcxJyAgJzAnICAgICAgICAgLT4gJzEnCitwb3d4MDA1IHBvd2VyICAgICcxJyAgJzEnICAgICAgICAgLT4gJzEnCitwb3d4MDA2IHBvd2VyICAgICcxJyAgJzInICAgICAgICAgLT4gJzEnCisKK3Bvd3gwMTAgcG93ZXIgICAgJzInICAnMCcgICAgICAgICAtPiAnMScKK3Bvd3gwMTEgcG93ZXIgICAgJzInICAnMScgICAgICAgICAtPiAnMicKK3Bvd3gwMTIgcG93ZXIgICAgJzInICAnMicgICAgICAgICAtPiAnNCcKK3Bvd3gwMTMgcG93ZXIgICAgJzInICAnMycgICAgICAgICAtPiAnOCcKK3Bvd3gwMTQgcG93ZXIgICAgJzInICAnNCcgICAgICAgICAtPiAnMTYnCitwb3d4MDE1IHBvd2VyICAgICcyJyAgJzUnICAgICAgICAgLT4gJzMyJworcG93eDAxNiBwb3dlciAgICAnMicgICc2JyAgICAgICAgIC0+ICc2NCcKK3Bvd3gwMTcgcG93ZXIgICAgJzInICAnNycgICAgICAgICAtPiAnMTI4JworcG93eDAxOCBwb3dlciAgICAnMicgICc4JyAgICAgICAgIC0+ICcyNTYnCitwb3d4MDE5IHBvd2VyICAgICcyJyAgJzknICAgICAgICAgLT4gJzUxMicKK3Bvd3gwMjAgcG93ZXIgICAgJzInICAnMTAnICAgICAgICAtPiAnMTAyNCcKK3Bvd3gwMjEgcG93ZXIgICAgJzInICAnMTEnICAgICAgICAtPiAnMjA0OCcKK3Bvd3gwMjIgcG93ZXIgICAgJzInICAnMTInICAgICAgICAtPiAnNDA5NicKK3Bvd3gwMjMgcG93ZXIgICAgJzInICAnMTUnICAgICAgICAtPiAnMzI3NjgnCitwb3d4MDI0IHBvd2VyICAgICcyJyAgJzE2JyAgICAgICAgLT4gJzY1NTM2JworcG93eDAyNSBwb3dlciAgICAnMicgICczMScgICAgICAgIC0+ICcyMTQ3NDgzNjQ4JworLS0gTkIgMCBub3Qgc3RyaXBwZWQgaW4gbmV4dAorcG93eDAyNiBwb3dlciAgICAnMicgICczMicgICAgICAgIC0+ICc0Mjk0OTY3Mjk2JworCitwcmVjaXNpb246IDkKK3Bvd3gwMjcgcG93ZXIgICAgJzInICAnMzEnICAgICAgICAtPiAnMi4xNDc0ODM2NUUrOScgSW5leGFjdCBSb3VuZGVkCistLSBOQiAwIG5vdCBzdHJpcHBlZCBpbiBuZXh0Citwb3d4MDI4IHBvd2VyICAgICcyJyAgJzMyJyAgICAgICAgLT4gJzQuMjk0OTY3MzBFKzknIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMAorcG93eDAyOSBwb3dlciAgICAnMicgICczMScgICAgICAgIC0+ICcyMTQ3NDgzNjQ4JworcG93eDAzMCBwb3dlciAgICAnMicgICczMicgICAgICAgIC0+ICc0Mjk0OTY3Mjk2JworcHJlY2lzaW9uOiA5CisKK3Bvd3gwMzEgcG93ZXIgICAgJzMnICAnMicgICAgICAgICAtPiA5Citwb3d4MDMyIHBvd2VyICAgICc0JyAgJzInICAgICAgICAgLT4gMTYKK3Bvd3gwMzMgcG93ZXIgICAgJzUnICAnMicgICAgICAgICAtPiAyNQorcG93eDAzNCBwb3dlciAgICAnNicgICcyJyAgICAgICAgIC0+IDM2Citwb3d4MDM1IHBvd2VyICAgICc3JyAgJzInICAgICAgICAgLT4gNDkKK3Bvd3gwMzYgcG93ZXIgICAgJzgnICAnMicgICAgICAgICAtPiA2NAorcG93eDAzNyBwb3dlciAgICAnOScgICcyJyAgICAgICAgIC0+IDgxCitwb3d4MDM4IHBvd2VyICAgICcxMCcgJzInICAgICAgICAgLT4gMTAwCitwb3d4MDM5IHBvd2VyICAgICcxMScgJzInICAgICAgICAgLT4gMTIxCitwb3d4MDQwIHBvd2VyICAgICcxMicgJzInICAgICAgICAgLT4gMTQ0CisKK3Bvd3gwNDEgcG93ZXIgICAgJzMnICAnMycgICAgICAgICAtPiAyNworcG93eDA0MiBwb3dlciAgICAnNCcgICczJyAgICAgICAgIC0+IDY0Citwb3d4MDQzIHBvd2VyICAgICc1JyAgJzMnICAgICAgICAgLT4gMTI1Citwb3d4MDQ0IHBvd2VyICAgICc2JyAgJzMnICAgICAgICAgLT4gMjE2Citwb3d4MDQ1IHBvd2VyICAgICc3JyAgJzMnICAgICAgICAgLT4gMzQzCitwb3d4MDQ3IHBvd2VyICAgJy0zJyAgJzMnICAgICAgICAgLT4gLTI3Citwb3d4MDQ4IHBvd2VyICAgJy00JyAgJzMnICAgICAgICAgLT4gLTY0Citwb3d4MDQ5IHBvd2VyICAgJy01JyAgJzMnICAgICAgICAgLT4gLTEyNQorcG93eDA1MCBwb3dlciAgICctNicgICczJyAgICAgICAgIC0+IC0yMTYKK3Bvd3gwNTEgcG93ZXIgICAnLTcnICAnMycgICAgICAgICAtPiAtMzQzCisKK3Bvd3gwNTIgcG93ZXIgICAnMTAnICAnMCcgICAgICAgICAtPiAxCitwb3d4MDUzIHBvd2VyICAgJzEwJyAgJzEnICAgICAgICAgLT4gMTAKK3Bvd3gwNTQgcG93ZXIgICAnMTAnICAnMicgICAgICAgICAtPiAxMDAKK3Bvd3gwNTUgcG93ZXIgICAnMTAnICAnMycgICAgICAgICAtPiAxMDAwCitwb3d4MDU2IHBvd2VyICAgJzEwJyAgJzQnICAgICAgICAgLT4gMTAwMDAKK3Bvd3gwNTcgcG93ZXIgICAnMTAnICAnNScgICAgICAgICAtPiAxMDAwMDAKK3Bvd3gwNTggcG93ZXIgICAnMTAnICAnNicgICAgICAgICAtPiAxMDAwMDAwCitwb3d4MDU5IHBvd2VyICAgJzEwJyAgJzcnICAgICAgICAgLT4gMTAwMDAwMDAKK3Bvd3gwNjAgcG93ZXIgICAnMTAnICAnOCcgICAgICAgICAtPiAxMDAwMDAwMDAKK3Bvd3gwNjEgcG93ZXIgICAnMTAnICAnOScgICAgICAgICAtPiAxLjAwMDAwMDAwRSs5IFJvdW5kZWQKK3Bvd3gwNjIgcG93ZXIgICAnMTAnICAnMjInICAgICAgICAtPiAxLjAwMDAwMDAwRSsyMiBSb3VuZGVkCitwb3d4MDYzIHBvd2VyICAgJzEwJyAgJzc3JyAgICAgICAgLT4gMS4wMDAwMDAwMEUrNzcgUm91bmRlZAorcG93eDA2NCBwb3dlciAgICcxMCcgICc5OScgICAgICAgIC0+IDEuMDAwMDAwMDBFKzk5IFJvdW5kZWQKKworcG93eDA3MCBwb3dlciAgJzAuMycgICcwJyAgICAgICAgICAgLT4gJzEnCitwb3d4MDcxIHBvd2VyICAnMC4zJyAgJzEnICAgICAgICAgICAtPiAnMC4zJworcG93eDA3MiBwb3dlciAgJzAuMycgICcxLjAwJyAgICAgICAgLT4gJzAuMycKK3Bvd3gwNzMgcG93ZXIgICcwLjMnICAnMi4wMCcgICAgICAgIC0+ICcwLjA5JworcG93eDA3NCBwb3dlciAgJzAuMycgICcyLjAwMDAwMDAwMCcgLT4gJzAuMDknCitwb3d4MDc1IHBvd2VyICAnNi4wJyAgJzEnICAgICAgICAgICAtPiAnNi4wJyAgICAgLS0gTkIgemVyb3Mgbm90IHN0cmlwcGVkCitwb3d4MDc2IHBvd2VyICAnNi4wJyAgJzInICAgICAgICAgICAtPiAnMzYuMDAnICAgLS0gLi4KK3Bvd3gwNzcgcG93ZXIgICAnLTMnICAnMicgICAgICAgICAgIC0+ICc5JyAgICAgICAtLSBmcm9tIE5ldFJleHggYm9vaworcG93eDA3OCBwb3dlciAgICAnNCcgICczJyAgICAgICAgICAgLT4gJzY0JyAgICAgIC0tIC4uIChzb3J0IG9mKQorCitwb3d4MDgwIHBvd2VyICAgMC4xICAgIDAgICAgICAgICAgICAtPiAxCitwb3d4MDgxIHBvd2VyICAgMC4xICAgIDEgICAgICAgICAgICAtPiAwLjEKK3Bvd3gwODIgcG93ZXIgICAwLjEgICAgMiAgICAgICAgICAgIC0+IDAuMDEKK3Bvd3gwODMgcG93ZXIgICAwLjEgICAgMyAgICAgICAgICAgIC0+IDAuMDAxCitwb3d4MDg0IHBvd2VyICAgMC4xICAgIDQgICAgICAgICAgICAtPiAwLjAwMDEKK3Bvd3gwODUgcG93ZXIgICAwLjEgICAgNSAgICAgICAgICAgIC0+IDAuMDAwMDEKK3Bvd3gwODYgcG93ZXIgICAwLjEgICAgNiAgICAgICAgICAgIC0+IDAuMDAwMDAxCitwb3d4MDg3IHBvd2VyICAgMC4xICAgIDcgICAgICAgICAgICAtPiAxRS03Citwb3d4MDg4IHBvd2VyICAgMC4xICAgIDggICAgICAgICAgICAtPiAxRS04Citwb3d4MDg5IHBvd2VyICAgMC4xICAgIDkgICAgICAgICAgICAtPiAxRS05CisKK3Bvd3gwOTAgcG93ZXIgICAxMDEgICAgMiAgICAgICAgICAgIC0+IDEwMjAxCitwb3d4MDkxIHBvd2VyICAgMTAxICAgIDMgICAgICAgICAgICAtPiAxMDMwMzAxCitwb3d4MDkyIHBvd2VyICAgMTAxICAgIDQgICAgICAgICAgICAtPiAxMDQwNjA0MDEKK3Bvd3gwOTMgcG93ZXIgICAxMDEgICAgNSAgICAgICAgICAgIC0+IDEuMDUxMDEwMDVFKzEwIEluZXhhY3QgUm91bmRlZAorcG93eDA5NCBwb3dlciAgIDEwMSAgICA2ICAgICAgICAgICAgLT4gMS4wNjE1MjAxNUUrMTIgSW5leGFjdCBSb3VuZGVkCitwb3d4MDk1IHBvd2VyICAgMTAxICAgIDcgICAgICAgICAgICAtPiAxLjA3MjEzNTM1RSsxNCBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgcG93ZXJzCitwb3d4MDk5IHBvd2VyICAnMScgICctMScgICAgLT4gMQorcG93eDEwMCBwb3dlciAgJzMnICAnLTEnICAgIC0+IDAuMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAorcG93eDEwMSBwb3dlciAgJzInICAnLTEnICAgIC0+IDAuNQorcG93eDEwMiBwb3dlciAgJzInICAnLTInICAgIC0+IDAuMjUKK3Bvd3gxMDMgcG93ZXIgICcyJyAgJy00JyAgICAtPiAwLjA2MjUKK3Bvd3gxMDQgcG93ZXIgICcyJyAgJy04JyAgICAtPiAwLjAwMzkwNjI1Citwb3d4MTA1IHBvd2VyICAnMicgICctMTYnICAgLT4gMC4wMDAwMTUyNTg3ODkxIEluZXhhY3QgUm91bmRlZAorcG93eDEwNiBwb3dlciAgJzInICAnLTMyJyAgIC0+IDIuMzI4MzA2NDRFLTEwIEluZXhhY3QgUm91bmRlZAorcG93eDEwOCBwb3dlciAgJzInICAnLTY0JyAgIC0+IDUuNDIxMDEwODZFLTIwIEluZXhhY3QgUm91bmRlZAorcG93eDExMCBwb3dlciAgJzEwJyAgJy04JyAgIC0+IDFFLTgKK3Bvd3gxMTEgcG93ZXIgICcxMCcgICctNycgICAtPiAxRS03Citwb3d4MTEyIHBvd2VyICAnMTAnICAnLTYnICAgLT4gMC4wMDAwMDEKK3Bvd3gxMTMgcG93ZXIgICcxMCcgICctNScgICAtPiAwLjAwMDAxCitwb3d4MTE0IHBvd2VyICAnMTAnICAnLTQnICAgLT4gMC4wMDAxCitwb3d4MTE1IHBvd2VyICAnMTAnICAnLTMnICAgLT4gMC4wMDEKK3Bvd3gxMTYgcG93ZXIgICcxMCcgICctMicgICAtPiAwLjAxCitwb3d4MTE3IHBvd2VyICAnMTAnICAnLTEnICAgLT4gMC4xCitwb3d4MTIxIHBvd2VyICAnMTAnICAnLTc3JyAgLT4gJzFFLTc3JworcG93eDEyMiBwb3dlciAgJzEwJyAgJy0yMicgIC0+ICcxRS0yMicKKworcG93eDEyMyBwb3dlciAgICcyJyAgJy0xJyAgIC0+ICcwLjUnCitwb3d4MTI0IHBvd2VyICAgJzInICAnLTInICAgLT4gJzAuMjUnCitwb3d4MTI1IHBvd2VyICAgJzInICAnLTQnICAgLT4gJzAuMDYyNScKKworcG93eDEyNiBwb3dlciAgICcwJyAgJy0xJyAgIC0+IEluZmluaXR5Citwb3d4MTI3IHBvd2VyICAgJzAnICAnLTInICAgLT4gSW5maW5pdHkKK3Bvd3gxMjggcG93ZXIgICAtMCAgICctMScgICAtPiAtSW5maW5pdHkKK3Bvd3gxMjkgcG93ZXIgICAtMCAgICctMicgICAtPiBJbmZpbml0eQorCistLSAiMC41IiB0ZXN0cyBmcm9tIG9yaWdpbmFsIFJleHggZGlhZ25vc3RpY3MgW2xvb3AgdW5yb2xsZWRdCitwb3d4MjAwIHBvd2VyICAgMC41ICAgIDAgICAgLT4gMQorcG93eDIwMSBwb3dlciAgIDAuNSAgICAxICAgIC0+IDAuNQorcG93eDIwMiBwb3dlciAgIDAuNSAgICAyICAgIC0+IDAuMjUKK3Bvd3gyMDMgcG93ZXIgICAwLjUgICAgMyAgICAtPiAwLjEyNQorcG93eDIwNCBwb3dlciAgIDAuNSAgICA0ICAgIC0+IDAuMDYyNQorcG93eDIwNSBwb3dlciAgIDAuNSAgICA1ICAgIC0+IDAuMDMxMjUKK3Bvd3gyMDYgcG93ZXIgICAwLjUgICAgNiAgICAtPiAwLjAxNTYyNQorcG93eDIwNyBwb3dlciAgIDAuNSAgICA3ICAgIC0+IDAuMDA3ODEyNQorcG93eDIwOCBwb3dlciAgIDAuNSAgICA4ICAgIC0+IDAuMDAzOTA2MjUKK3Bvd3gyMDkgcG93ZXIgICAwLjUgICAgOSAgICAtPiAwLjAwMTk1MzEyNQorcG93eDIxMCBwb3dlciAgIDAuNSAgIDEwICAgIC0+IDAuMDAwOTc2NTYyNQorCitwb3d4MjExIHBvd2VyIDEgIDEwMDAwMDAwMCAgLT4gMQorcG93eDIxMiBwb3dlciAxICA5OTk5OTk5OTggIC0+IDEKK3Bvd3gyMTMgcG93ZXIgMSAgOTk5OTk5OTk5ICAtPiAxCisKKworLS0gVGhlIFZpZW5uYSBjYXNlLiAgQ2hlY2tzIGJvdGggc2V0dXAgYW5kIDEvYWNjIHdvcmtpbmcgcHJlY2lzaW9uCistLSBNb2RpZmllZCAxOTk4LjEyLjE0IGFzIFJIUyBubyBsb25nZXIgcm91bmRlZCBiZWZvcmUgdXNlIChtdXN0IGZpdCkKKy0tIE1vZGlmaWVkIDE5OTAuMDIuMDQgYXMgTEhTIGlzIG5vdyByb3VuZGVkIChpbnN0ZWFkIG9mIHRydW5jYXRlZCB0byBndWFyZCkKKy0tICAgICcxMjM0NTY3ODlFKzEwJyAgICAtLSBsaHMgLi4gcm91bmRlZCB0byAxLjIzRSsxOAorLS0gICAgJy0xLjIzMDAwZSsyJyAgICAgIC0tIHJocyAuLiBbd2FzOiAtMS4yMzQ1NWUrMiwgcm91bmRzIHRvIC0xMjNdCistLSBNb2RpZmllZCAyMDAyLjEwLjA2IC0tIGZpbmFsbHksIG5vIGlucHV0IHJvdW5kaW5nCistLSBXaXRoIGlucHV0IHJvdW5kaW5nLCByZXN1bHQgd291bGQgYmUgOC43NEUtMjIyNgorcHJlY2lzaW9uOiAzCittYXhleHBvbmVudDogNTAwMAorbWluZXhwb25lbnQ6IC01MDAwCitwb3d4MjE5IHBvd2VyICcxMjM0NTY3ODlFKzEwJyAnLTEuMjMwMDBlKzInIC0+ICc1LjU0RS0yMjI2JyBJbmV4YWN0IFJvdW5kZWQKKworLS0gemVyb3MKK21heGV4cG9uZW50OiArOTYKK21pbmV4cG9uZW50OiAtOTUKK3ByZWNpc2lvbjogNworcG93eDIyMyBwb3dlciAgICAgICAgICAwRS0zMCAzICAtPiAgMAorcG93eDIyNCBwb3dlciAgICAgICAgICAwRS0xMCAzICAtPiAgMAorcG93eDIyNSBwb3dlciAgICAgICAgICAwRS0xICAzICAtPiAgMAorcG93eDIyNiBwb3dlciAgICAgICAgICAwRSswICAzICAtPiAgMAorcG93eDIyNyBwb3dlciAgICAgICAgICAwICAgICAzICAtPiAgMAorcG93eDIyOCBwb3dlciAgICAgICAgICAwRSsxICAzICAtPiAgMAorcG93eDIyOSBwb3dlciAgICAgICAgICAwRSsxMCAzICAtPiAgMAorcG93eDIzMCBwb3dlciAgICAgICAgICAwRSszMCAzICAtPiAgMAorcG93eDIzMSBwb3dlciAgICAgMyAgICAwRS0zMCAgICAtPiAgMQorcG93eDIzMiBwb3dlciAgICAgMyAgICAwRS0xMCAgICAtPiAgMQorcG93eDIzMyBwb3dlciAgICAgMyAgICAwRS0xICAgICAtPiAgMQorcG93eDIzNCBwb3dlciAgICAgMyAgICAwRSswICAgICAtPiAgMQorcG93eDIzNSBwb3dlciAgICAgMyAgICAwICAgICAgICAtPiAgMQorcG93eDIzNiBwb3dlciAgICAgMyAgICAwRSsxICAgICAtPiAgMQorcG93eDIzNyBwb3dlciAgICAgMyAgICAwRSsxMCAgICAtPiAgMQorcG93eDIzOCBwb3dlciAgICAgMyAgICAwRSszMCAgICAtPiAgMQorcG93eDIzOSBwb3dlciAgICAgICAgICAwRS0zMCAtMyAtPiAgSW5maW5pdHkKK3Bvd3gyNDAgcG93ZXIgICAgICAgICAgMEUtMTAgLTMgLT4gIEluZmluaXR5Citwb3d4MjQxIHBvd2VyICAgICAgICAgIDBFLTEgIC0zIC0+ICBJbmZpbml0eQorcG93eDI0MiBwb3dlciAgICAgICAgICAwRSswICAtMyAtPiAgSW5maW5pdHkKK3Bvd3gyNDMgcG93ZXIgICAgICAgICAgMCAgICAgLTMgLT4gIEluZmluaXR5Citwb3d4MjQ0IHBvd2VyICAgICAgICAgIDBFKzEgIC0zIC0+ICBJbmZpbml0eQorcG93eDI0NSBwb3dlciAgICAgICAgICAwRSsxMCAtMyAtPiAgSW5maW5pdHkKK3Bvd3gyNDYgcG93ZXIgICAgICAgICAgMEUrMzAgLTMgLT4gIEluZmluaXR5Citwb3d4MjQ3IHBvd2VyICAgIC0zICAgIDBFLTMwICAgIC0+ICAxCitwb3d4MjQ4IHBvd2VyICAgIC0zICAgIDBFLTEwICAgIC0+ICAxCitwb3d4MjQ5IHBvd2VyICAgIC0zICAgIDBFLTEgICAgIC0+ICAxCitwb3d4MjUwIHBvd2VyICAgIC0zICAgIDBFKzAgICAgIC0+ICAxCitwb3d4MjUxIHBvd2VyICAgIC0zICAgIDAgICAgICAgIC0+ICAxCitwb3d4MjUyIHBvd2VyICAgIC0zICAgIDBFKzEgICAgIC0+ICAxCitwb3d4MjUzIHBvd2VyICAgIC0zICAgIDBFKzEwICAgIC0+ICAxCitwb3d4MjU0IHBvd2VyICAgIC0zICAgIDBFKzMwICAgIC0+ICAxCisKKy0tIGEgZmV3IGxocyBuZWdhdGl2ZXMKK3ByZWNpc2lvbjogOQorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3Bvd3gyNjAgcG93ZXIgICAtMTAgICAnMCcgICAgICAgICAtPiAxCitwb3d4MjYxIHBvd2VyICAgLTEwICAgJzEnICAgICAgICAgLT4gLTEwCitwb3d4MjYyIHBvd2VyICAgLTEwICAgJzInICAgICAgICAgLT4gMTAwCitwb3d4MjYzIHBvd2VyICAgLTEwICAgJzMnICAgICAgICAgLT4gLTEwMDAKK3Bvd3gyNjQgcG93ZXIgICAtMTAgICAnNCcgICAgICAgICAtPiAxMDAwMAorcG93eDI2NSBwb3dlciAgIC0xMCAgICc1JyAgICAgICAgIC0+IC0xMDAwMDAKK3Bvd3gyNjYgcG93ZXIgICAtMTAgICAnNicgICAgICAgICAtPiAxMDAwMDAwCitwb3d4MjY3IHBvd2VyICAgLTEwICAgJzcnICAgICAgICAgLT4gLTEwMDAwMDAwCitwb3d4MjY4IHBvd2VyICAgLTEwICAgJzgnICAgICAgICAgLT4gMTAwMDAwMDAwCitwb3d4MjY5IHBvd2VyICAgLTEwICAgJzknICAgICAgICAgLT4gLTEuMDAwMDAwMDBFKzkgUm91bmRlZAorcG93eDI3MCBwb3dlciAgIC0xMCAgICcyMicgICAgICAgIC0+IDEuMDAwMDAwMDBFKzIyIFJvdW5kZWQKK3Bvd3gyNzEgcG93ZXIgICAtMTAgICAnNzcnICAgICAgICAtPiAtMS4wMDAwMDAwMEUrNzcgUm91bmRlZAorcG93eDI3MiBwb3dlciAgIC0xMCAgICc5OScgICAgICAgIC0+IC0xLjAwMDAwMDAwRSs5OSBSb3VuZGVkCisKKy0tIHNvbWUgbW9yZSBlZGdlIGNhc2VzCitwcmVjaXNpb246ICAgMTUKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5Citwb3d4MzkxIHBvd2VyICAwLjEgICA5OTkgLT4gMUUtOTk5Citwb3d4MzkyIHBvd2VyICAwLjA5OSA5OTkgLT4gNC4zNjA3MzIwNjJFLTEwMDQgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzOTMgcG93ZXIgIDAuMDk4IDk5OSAtPiAxLjcxNzMxRS0xMDA4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4Mzk0IHBvd2VyICAwLjA5NyA5OTkgLT4gNkUtMTAxMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcG93eDM5NSBwb3dlciAgMC4wOTYgOTk5IC0+IDBFLTEwMTMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDM5NiBwb3dlciAgMC4wMSAgOTk5IC0+IDBFLTEwMTMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDM5NyBwb3dlciAgMC4wMiAxMDAwMDAwMDAgLT4gMEUtMTAxMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIG11bHRpcGx5IHRlc3RzIGFyZSBoZXJlIHRvIGFpZCBjaGVja2luZyBhbmQgdGVzdCBmb3IgY29uc2lzdGVudCBoYW5kbGluZworLS0gb2YgdW5kZXJmbG93CitwcmVjaXNpb246IDUKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CisKKy0tIHNxdWFyZXMKK211bHg0MDAgbXVsdGlwbHkgIDFFLTUwMiAgICAgMWUtNTAyIC0+IDBFLTEwMDMgICAgU3Vibm9ybWFsIEluZXhhY3QgVW5kZXJmbG93IFJvdW5kZWQgQ2xhbXBlZAorbXVseDQwMSBtdWx0aXBseSAgMUUtNTAxICAgICAxZS01MDEgLT4gMUUtMTAwMiAgICBTdWJub3JtYWwKK211bHg0MDIgbXVsdGlwbHkgIDJFLTUwMSAgICAgMmUtNTAxIC0+IDRFLTEwMDIgICAgU3Vibm9ybWFsCittdWx4NDAzIG11bHRpcGx5ICA0RS01MDEgICAgIDRlLTUwMSAtPiAxLjZFLTEwMDEgIFN1Ym5vcm1hbAorbXVseDQwNCBtdWx0aXBseSAxMEUtNTAxICAgIDEwZS01MDEgLT4gMS4wMEUtMTAwMCBTdWJub3JtYWwKK211bHg0MDUgbXVsdGlwbHkgMzBFLTUwMSAgICAzMGUtNTAxIC0+IDkuMDBFLTEwMDAgU3Vibm9ybWFsCittdWx4NDA2IG11bHRpcGx5IDQwRS01MDEgICAgNDBlLTUwMSAtPiAxLjYwMEUtOTk5CisKK3Bvd3g0MDAgcG93ZXIgICAgIDFFLTUwMiAgICAgMiAgICAgIC0+IDBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDQwMSBwb3dlciAgICAgMUUtNTAxICAgICAyICAgICAgLT4gMUUtMTAwMiAgICBTdWJub3JtYWwKK3Bvd3g0MDIgcG93ZXIgICAgIDJFLTUwMSAgICAgMiAgICAgIC0+IDRFLTEwMDIgICAgU3Vibm9ybWFsCitwb3d4NDAzIHBvd2VyICAgICA0RS01MDEgICAgIDIgICAgICAtPiAxLjZFLTEwMDEgIFN1Ym5vcm1hbAorcG93eDQwNCBwb3dlciAgICAxMEUtNTAxICAgICAyICAgICAgLT4gMS4wMEUtMTAwMCBTdWJub3JtYWwKK3Bvd3g0MDUgcG93ZXIgICAgMzBFLTUwMSAgICAgMiAgICAgIC0+IDkuMDBFLTEwMDAgU3Vibm9ybWFsCitwb3d4NDA2IHBvd2VyICAgIDQwRS01MDEgICAgIDIgICAgICAtPiAxLjYwMEUtOTk5CisKKy0tIGN1YmVzCittdWx4NDEwIG11bHRpcGx5ICAxRS02NzAgICAgIDFlLTMzNSAtPiAwRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK211bHg0MTEgbXVsdGlwbHkgIDFFLTY2OCAgICAgMWUtMzM0IC0+IDFFLTEwMDIgICAgU3Vibm9ybWFsCittdWx4NDEyIG11bHRpcGx5ICA0RS02NjggICAgIDJlLTMzNCAtPiA4RS0xMDAyICAgIFN1Ym5vcm1hbAorbXVseDQxMyBtdWx0aXBseSAgOUUtNjY4ICAgICAzZS0zMzQgLT4gMi43RS0xMDAxICBTdWJub3JtYWwKK211bHg0MTQgbXVsdGlwbHkgMTZFLTY2OCAgICAgNGUtMzM0IC0+IDYuNEUtMTAwMSAgU3Vibm9ybWFsCittdWx4NDE1IG11bHRpcGx5IDI1RS02NjggICAgIDVlLTMzNCAtPiAxLjI1RS0xMDAwIFN1Ym5vcm1hbAorbXVseDQxNiBtdWx0aXBseSAxMEUtNjY4ICAgMTAwZS0zMzQgLT4gMS4wMDBFLTk5OQorCitwb3d4NDEwIHBvd2VyICAgICAxRS0zMzUgICAgIDMgICAgICAtPiAwRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3g0MTEgcG93ZXIgICAgIDFFLTMzNCAgICAgMyAgICAgIC0+IDFFLTEwMDIgICAgU3Vibm9ybWFsCitwb3d4NDEyIHBvd2VyICAgICAyRS0zMzQgICAgIDMgICAgICAtPiA4RS0xMDAyICAgIFN1Ym5vcm1hbAorcG93eDQxMyBwb3dlciAgICAgM0UtMzM0ICAgICAzICAgICAgLT4gMi43RS0xMDAxICBTdWJub3JtYWwKK3Bvd3g0MTQgcG93ZXIgICAgIDRFLTMzNCAgICAgMyAgICAgIC0+IDYuNEUtMTAwMSAgU3Vibm9ybWFsCitwb3d4NDE1IHBvd2VyICAgICA1RS0zMzQgICAgIDMgICAgICAtPiAxLjI1RS0xMDAwIFN1Ym5vcm1hbAorcG93eDQxNiBwb3dlciAgICAxMEUtMzM0ICAgICAzICAgICAgLT4gMS4wMDBFLTk5OQorCistLSBuZWdhdGl2ZSBwb3dlcnMsIHRlc3Rpbmcgc3Vibm9ybWFscworcHJlY2lzaW9uOiAgIDUKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5Citwb3d4NDIxIHBvd2VyICAyLjVFLTUwMSAgICAgLTIgICAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NDIyIHBvd2VyICAyLjVFLTUwMCAgICAgLTIgICAgICAgICAtPiAgMS42RSs5OTkKKworcG93eDQyMyBwb3dlciAgMi41RSs0OTkgICAgIC0yICAgICAgICAgLT4gIDEuNkUtOTk5Citwb3d4NDI0IHBvd2VyICAyLjVFKzUwMCAgICAgLTIgICAgICAgICAtPiAgMS42RS0xMDAxIFN1Ym5vcm1hbAorcG93eDQyNSBwb3dlciAgMi41RSs1MDEgICAgIC0yICAgICAgICAgLT4gICAgMkUtMTAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcG93eDQyNiBwb3dlciAgMi41RSs1MDIgICAgIC0yICAgICAgICAgLT4gICAgMEUtMTAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK3Bvd3g0MjcgcG93ZXIgMC4yNUUrNDk5ICAgICAtMiAgICAgICAgIC0+ICAxLjZFLTk5NworcG93eDQyOCBwb3dlciAwLjI1RSs1MDAgICAgIC0yICAgICAgICAgLT4gIDEuNkUtOTk5Citwb3d4NDI5IHBvd2VyIDAuMjVFKzUwMSAgICAgLTIgICAgICAgICAtPiAgMS42RS0xMDAxIFN1Ym5vcm1hbAorcG93eDQzMCBwb3dlciAwLjI1RSs1MDIgICAgIC0yICAgICAgICAgLT4gICAgMkUtMTAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcG93eDQzMSBwb3dlciAwLjI1RSs1MDMgICAgIC0yICAgICAgICAgLT4gICAgMEUtMTAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK3Bvd3g0MzIgcG93ZXIgMC4wNEUrNDk5ICAgICAtMiAgICAgICAgIC0+ICA2LjI1RS05OTYKK3Bvd3g0MzMgcG93ZXIgMC4wNEUrNTAwICAgICAtMiAgICAgICAgIC0+ICA2LjI1RS05OTgKK3Bvd3g0MzQgcG93ZXIgMC4wNEUrNTAxICAgICAtMiAgICAgICAgIC0+ICA2LjI1RS0xMDAwIFN1Ym5vcm1hbAorcG93eDQzNSBwb3dlciAwLjA0RSs1MDIgICAgIC0yICAgICAgICAgLT4gICA2LjJFLTEwMDIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzYgcG93ZXIgMC4wNEUrNTAzICAgICAtMiAgICAgICAgIC0+ICAgICAxRS0xMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4NDM3IHBvd2VyIDAuMDRFKzUwNCAgICAgLTIgICAgICAgICAtPiAgICAgMEUtMTAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK3Bvd3g0NDEgcG93ZXIgMC4wNEUrMzM0ICAgICAtMyAgICAgICAgIC0+ICAxLjU2MjVFLTk5OAorcG93eDQ0MiBwb3dlciAwLjA0RSszMzUgICAgIC0zICAgICAgICAgLT4gICAgMS41NkUtMTAwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcG93eDQ0MyBwb3dlciAwLjA0RSszMzYgICAgIC0zICAgICAgICAgLT4gICAgICAgMEUtMTAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4NDQ0IHBvd2VyIDAuMjVFKzMzMyAgICAgLTMgICAgICAgICAtPiAgICAgNi40RS05OTgKK3Bvd3g0NDUgcG93ZXIgMC4yNUUrMzM0ICAgICAtMyAgICAgICAgIC0+ICAgICA2LjRFLTEwMDEgU3Vibm9ybWFsCitwb3d4NDQ2IHBvd2VyIDAuMjVFKzMzNSAgICAgLTMgICAgICAgICAtPiAgICAgICAxRS0xMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4NDQ3IHBvd2VyIDAuMjVFKzMzNiAgICAgLTMgICAgICAgICAtPiAgICAgICAwRS0xMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKy0tIGNoZWNrIHNpZ24gZm9yIGN1YmVzICBhbmQgYSBmZXcgc3F1YXJlcworcG93eDQ0OCBwb3dlciAtMC4wNEUrMzM0ICAgIC0zICAgICAgICAgLT4gLTEuNTYyNUUtOTk4Citwb3d4NDQ5IHBvd2VyIC0wLjA0RSszMzUgICAgLTMgICAgICAgICAtPiAgIC0xLjU2RS0xMDAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4NDUwIHBvd2VyIC0wLjA0RSszMzYgICAgLTMgICAgICAgICAtPiAgICAgIC0wRS0xMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3g0NTEgcG93ZXIgLTAuMjVFKzMzMyAgICAtMyAgICAgICAgIC0+ICAgIC02LjRFLTk5OAorcG93eDQ1MiBwb3dlciAtMC4yNUUrMzM0ICAgIC0zICAgICAgICAgLT4gICAgLTYuNEUtMTAwMSBTdWJub3JtYWwKK3Bvd3g0NTMgcG93ZXIgLTAuMjVFKzMzNSAgICAtMyAgICAgICAgIC0+ICAgICAgLTFFLTEwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0NTQgcG93ZXIgLTAuMjVFKzMzNiAgICAtMyAgICAgICAgIC0+ICAgICAgLTBFLTEwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDQ1NSBwb3dlciAtMC4wNEUrNDk5ICAgIC0yICAgICAgICAgLT4gICAgNi4yNUUtOTk2Citwb3d4NDU2IHBvd2VyIC0wLjA0RSs1MDAgICAgLTIgICAgICAgICAtPiAgICA2LjI1RS05OTgKK3Bvd3g0NTcgcG93ZXIgLTAuMDRFKzUwMSAgICAtMiAgICAgICAgIC0+ICAgIDYuMjVFLTEwMDAgU3Vibm9ybWFsCitwb3d4NDU4IHBvd2VyIC0wLjA0RSs1MDIgICAgLTIgICAgICAgICAtPiAgICAgNi4yRS0xMDAyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIHRlc3QgLTBzCitwcmVjaXNpb246IDkKK3Bvd3g1NjAgcG93ZXIgIDAgIDAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g1NjEgcG93ZXIgIDAgLTAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g1NjIgcG93ZXIgLTAgIDAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g1NjMgcG93ZXIgLTAgLTAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g1NjQgcG93ZXIgIDEgIDAgICAgICAgIC0+ICAxCitwb3d4NTY1IHBvd2VyICAxIC0wICAgICAgICAtPiAgMQorcG93eDU2NiBwb3dlciAtMSAgMCAgICAgICAgLT4gIDEKK3Bvd3g1NjcgcG93ZXIgLTEgLTAgICAgICAgIC0+ICAxCitwb3d4NTY4IHBvd2VyICAwICAxICAgICAgICAtPiAgMAorcG93eDU2OSBwb3dlciAgMCAtMSAgICAgICAgLT4gIEluZmluaXR5Citwb3d4NTcwIHBvd2VyIC0wICAxICAgICAgICAtPiAtMAorcG93eDU3MSBwb3dlciAtMCAtMSAgICAgICAgLT4gLUluZmluaXR5Citwb3d4NTcyIHBvd2VyICAwICAyICAgICAgICAtPiAgMAorcG93eDU3MyBwb3dlciAgMCAtMiAgICAgICAgLT4gIEluZmluaXR5Citwb3d4NTc0IHBvd2VyIC0wICAyICAgICAgICAtPiAgMAorcG93eDU3NSBwb3dlciAtMCAtMiAgICAgICAgLT4gIEluZmluaXR5Citwb3d4NTc2IHBvd2VyICAwICAzICAgICAgICAtPiAgMAorcG93eDU3NyBwb3dlciAgMCAtMyAgICAgICAgLT4gIEluZmluaXR5Citwb3d4NTc4IHBvd2VyIC0wICAzICAgICAgICAtPiAtMAorcG93eDU3OSBwb3dlciAtMCAtMyAgICAgICAgLT4gLUluZmluaXR5CisKKy0tIFNwZWNpYWxzCitwb3d4NTgwIHBvd2VyICBJbmYgIC1JbmYgICAtPiAgMAorcG93eDU4MSBwb3dlciAgSW5mICAtMTAwMCAgLT4gIDAKK3Bvd3g1ODIgcG93ZXIgIEluZiAgLTEgICAgIC0+ICAwCitwb3d4NTgzIHBvd2VyICBJbmYgIC0wLjUgICAtPiAgMAorcG93eDU4NCBwb3dlciAgSW5mICAtMCAgICAgLT4gIDEKK3Bvd3g1ODUgcG93ZXIgIEluZiAgIDAgICAgIC0+ICAxCitwb3d4NTg2IHBvd2VyICBJbmYgICAwLjUgICAtPiAgSW5maW5pdHkKK3Bvd3g1ODcgcG93ZXIgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorcG93eDU4OCBwb3dlciAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5Citwb3d4NTg5IHBvd2VyICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKK3Bvd3g1OTAgcG93ZXIgLTEwMDAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NTkxIHBvd2VyIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDU5MiBwb3dlciAtMSAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g1OTMgcG93ZXIgLTAuNSAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NTk0IHBvd2VyIC0wICAgICBJbmYgICAtPiAgMAorcG93eDU5NSBwb3dlciAgMCAgICAgSW5mICAgLT4gIDAKK3Bvd3g1OTYgcG93ZXIgIDAuNSAgIEluZiAgIC0+ICAwCitwb3d4NTk3IHBvd2VyICAxICAgICBJbmYgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g1OTggcG93ZXIgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQorcG93eDU5OSBwb3dlciAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CisKK3Bvd3g2MDAgcG93ZXIgLUluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjAxIHBvd2VyIC1JbmYgIC0xMDAwICAtPiAgMAorcG93eDYwMiBwb3dlciAtSW5mICAtMSAgICAgLT4gLTAKK3Bvd3g2MDMgcG93ZXIgLUluZiAgLTAuNSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjA0IHBvd2VyIC1JbmYgIC0wICAgICAtPiAgMQorcG93eDYwNSBwb3dlciAtSW5mICAgMCAgICAgLT4gIDEKK3Bvd3g2MDYgcG93ZXIgLUluZiAgIDAuNSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjA3IHBvd2VyIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK3Bvd3g2MDggcG93ZXIgLUluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQorcG93eDYwOSBwb3dlciAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2MTAgcG93ZXIgLTEwMDAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjExIHBvd2VyIC1JbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDYxMiBwb3dlciAtMSAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2MTMgcG93ZXIgLTAuNSAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjE0IHBvd2VyIC0wICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK3Bvd3g2MTUgcG93ZXIgIDAgICAgLUluZiAgIC0+ICBJbmZpbml0eQorcG93eDYxNiBwb3dlciAgMC41ICAtSW5mICAgLT4gIEluZmluaXR5Citwb3d4NjE3IHBvd2VyICAxICAgIC1JbmYgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g2MTggcG93ZXIgIDEwMDAgLUluZiAgIC0+ICAwCitwb3d4NjE5IHBvd2VyICBJbmYgIC1JbmYgICAtPiAgMAorCitwb3d4NjIxIHBvd2VyICBOYU4gLUluZiAgICAtPiAgTmFOCitwb3d4NjIyIHBvd2VyICBOYU4gLTEwMDAgICAtPiAgTmFOCitwb3d4NjIzIHBvd2VyICBOYU4gLTEgICAgICAtPiAgTmFOCitwb3d4NjI0IHBvd2VyICBOYU4gLTAuNSAgICAtPiAgTmFOCitwb3d4NjI1IHBvd2VyICBOYU4gLTAgICAgICAtPiAgTmFOCitwb3d4NjI2IHBvd2VyICBOYU4gIDAgICAgICAtPiAgTmFOCitwb3d4NjI3IHBvd2VyICBOYU4gIDAuNSAgICAtPiAgTmFOCitwb3d4NjI4IHBvd2VyICBOYU4gIDEgICAgICAtPiAgTmFOCitwb3d4NjI5IHBvd2VyICBOYU4gIDEwMDAgICAtPiAgTmFOCitwb3d4NjMwIHBvd2VyICBOYU4gIEluZiAgICAtPiAgTmFOCitwb3d4NjMxIHBvd2VyICBOYU4gIE5hTiAgICAtPiAgTmFOCitwb3d4NjMyIHBvd2VyIC1JbmYgIE5hTiAgICAtPiAgTmFOCitwb3d4NjMzIHBvd2VyIC0xMDAwIE5hTiAgICAtPiAgTmFOCitwb3d4NjM0IHBvd2VyIC0xICAgIE5hTiAgICAtPiAgTmFOCitwb3d4NjM1IHBvd2VyIC0wICAgIE5hTiAgICAtPiAgTmFOCitwb3d4NjM2IHBvd2VyICAwICAgIE5hTiAgICAtPiAgTmFOCitwb3d4NjM3IHBvd2VyICAxICAgIE5hTiAgICAtPiAgTmFOCitwb3d4NjM4IHBvd2VyICAxMDAwIE5hTiAgICAtPiAgTmFOCitwb3d4NjM5IHBvd2VyICBJbmYgIE5hTiAgICAtPiAgTmFOCisKK3Bvd3g2NDEgcG93ZXIgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjQyIHBvd2VyICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY0MyBwb3dlciAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NDQgcG93ZXIgIHNOYU4gLTAuNSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjQ1IHBvd2VyICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY0NiBwb3dlciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NDcgcG93ZXIgIHNOYU4gIDAuNSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjQ4IHBvd2VyICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY0OSBwb3dlciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NTAgcG93ZXIgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjUxIHBvd2VyICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY1MiBwb3dlciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NTMgcG93ZXIgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjU0IHBvd2VyIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY1NSBwb3dlciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NTYgcG93ZXIgLTAuNSAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjU3IHBvd2VyIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY1OCBwb3dlciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NTkgcG93ZXIgIDAuNSAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjYwIHBvd2VyICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY2MSBwb3dlciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NjIgcG93ZXIgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NjYzIHBvd2VyICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU4gcHJvcGFnYXRpb24KK3Bvd3g2NzAgcG93ZXIgIE5hTjMgIHNOYU43ICAtPiAgTmFONyAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NzEgcG93ZXIgIHNOYU44ICBOYU42ICAtPiAgTmFOOCAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NzIgcG93ZXIgIDEgICAgIHNOYU43ICAtPiAgTmFONyAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NzMgcG93ZXIgIHNOYU44ICAxICAgICAtPiAgTmFOOCAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NzQgcG93ZXIgIEluZiAgIHNOYU43ICAtPiAgTmFONyAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NzUgcG93ZXIgIHNOYU44ICBJbmYgICAtPiAgTmFOOCAgSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g2NzYgcG93ZXIgIEluZiAgICBOYU45ICAtPiAgTmFOOQorcG93eDY3NyBwb3dlciAgTmFONiAgIEluZiAgIC0+ICBOYU42Citwb3d4Njc4IHBvd2VyICAxICAgICAgTmFONSAgLT4gIE5hTjUKK3Bvd3g2NzkgcG93ZXIgIE5hTjIgICAxICAgICAtPiAgTmFOMgorcG93eDY4MCBwb3dlciAgTmFOMiAgIE5hbjQgIC0+ICBOYU4yCitwb3d4NjgxIHBvd2VyICBOYU4gICAgTmFuNCAgLT4gIE5hTgorcG93eDY4MiBwb3dlciAgTmFOMzQ1IE5hbiAgIC0+ICBOYU4zNDUKK3Bvd3g2ODMgcG93ZXIgIEluZiAgICAtc05hTjcgLT4gLU5hTjcgIEludmFsaWRfb3BlcmF0aW9uCitwb3d4Njg0IHBvd2VyICAtc05hTjggIEluZiAgIC0+IC1OYU44ICBJbnZhbGlkX29wZXJhdGlvbgorcG93eDY4NSBwb3dlciAgSW5mICAgIC1OYU45ICAtPiAtTmFOOQorcG93eDY4NiBwb3dlciAgLU5hTjYgICBJbmYgICAtPiAtTmFONgorcG93eDY4NyBwb3dlciAgLU5hTjIgIC1OYW40ICAtPiAtTmFOMgorCistLSBsb25nIG9wZXJhbmQgYW5kIFJIUyByYW5nZSBjaGVja3MKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK3Bvd3g3MDEgcG93ZXIgMTIzNDU2NzgwMDAgMSAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCitwb3d4NzAyIHBvd2VyIDEyMzQ1Njc4MDAgIDEgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCitwb3d4NzAzIHBvd2VyIDEyMzQ1Njc4OTAgIDEgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitwb3d4NzA0IHBvd2VyIDEyMzQ1Njc4OTEgIDEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g3MDUgcG93ZXIgMTIzNDU2Nzg5MDEgMSAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g3MDYgcG93ZXIgMTIzNDU2Nzg5NiAgMSAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDE1CistLSBzdGlsbCBjaGVja2luZworcG93eDc0MSBwb3dlciAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwCitwb3d4NzQyIHBvd2VyIDEyMzQ1Njc4MDAgIDEgLT4gMTIzNDU2NzgwMAorcG93eDc0MyBwb3dlciAxMjM0NTY3ODkwICAxIC0+IDEyMzQ1Njc4OTAKK3Bvd3g3NDQgcG93ZXIgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxCitwb3d4NzQ1IHBvd2VyIDEyMzQ1Njc4OTAxIDEgLT4gMTIzNDU2Nzg5MDEKK3Bvd3g3NDYgcG93ZXIgMTIzNDU2Nzg5NiAgMSAtPiAxMjM0NTY3ODk2CisKK21heGV4cG9uZW50OiA5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5CitwcmVjaXNpb246IDkKKworLS0gbmVhciBvdXQtb2YtcmFuZ2UgZWRnZSBjYXNlcworcG93eDE2MyBwb3dlciAgICcxMCcgICc5OTk5OTknIC0+ICcxLjAwMDAwMDAwRSs5OTk5OTknIFJvdW5kZWQKK3Bvd3gxNjQgcG93ZXIgICAnMTAnICAnOTk5OTk4JyAtPiAnMS4wMDAwMDAwMEUrOTk5OTk4JyBSb3VuZGVkCitwb3d4MTY1IHBvd2VyICAgJzEwJyAgJzk5OTk5NycgLT4gJzEuMDAwMDAwMDBFKzk5OTk5NycgUm91bmRlZAorcG93eDE2NiBwb3dlciAgICcxMCcgICczMzMzMzMnIC0+ICcxLjAwMDAwMDAwRSszMzMzMzMnIFJvdW5kZWQKK3Bvd3gxODMgcG93ZXIgICAnNycgICAnMTAwMDAwMCcgIC0+IDEuMDk2NTE0MTlFKzg0NTA5OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxODQgcG93ZXIgICAnNycgICAnMTAwMDAwMScgIC0+IDcuNjc1NTk5MzRFKzg0NTA5OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxODYgcG93ZXIgICAnNycgICAnLTEwMDAwMDEnIC0+IDEuMzAyODI5ODZFLTg0NTA5OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxODcgcG93ZXIgICAnNycgICAnLTEwMDAwMDAnIC0+IDkuMTE5ODA5MDFFLTg0NTA5OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMTggcG93ZXIgICcxMCcgICctMzMzMzMzJyAgIC0+IDFFLTMzMzMzMworcG93eDExOSBwb3dlciAgJzEwJyAgJy05OTk5OTgnICAgLT4gMUUtOTk5OTk4Citwb3d4MTIwIHBvd2VyICAnMTAnICAnLTk5OTk5OScgICAtPiAxRS05OTk5OTkKK3Bvd3gxODEgcG93ZXIgICAnNycgICAnOTk5OTk4JyAgIC0+IDIuMjM3Nzg0MDZFKzg0NTA5NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxODIgcG93ZXIgICAnNycgICAnOTk5OTk5JyAgIC0+IDEuNTY2NDQ4ODRFKzg0NTA5NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxODkgcG93ZXIgICAnNycgICAnLTk5OTk5OScgIC0+IDYuMzgzODY2MzFFLTg0NTA5OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxOTAgcG93ZXIgICAnNycgICAnLTk5OTk5OCcgIC0+IDQuNDY4NzA2NDFFLTg0NTA5NyBJbmV4YWN0IFJvdW5kZWQKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cworcHJlY2lzaW9uOiA5CisKK3Bvd3gyNzcgcG93ZXIgIDkgICAgICAgICAgICAgOTk5OTk5IC0+IDMuNTkwODQ2MjlFKzk1NDI0MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyNzggcG93ZXIgIDkuOTk5OTk5OTkgICAgOTk5OTk5IC0+IDkuOTkwMDA1MDFFKzk5OTk5OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyNzkgcG93ZXIgMTAgICAgICAgICAgICAgOTk5OTk5IC0+IDEuMDAwMDAwMDBFKzk5OTk5OSAgICAgICAgIFJvdW5kZWQKK3Bvd3gyODAgcG93ZXIgMTAuMDAwMDAwMSAgICAgOTk5OTk5IC0+IDEuMDEwMDUwMTZFKzk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyODEgcG93ZXIgMTAuMDAwMDAxICAgICAgOTk5OTk5IC0+IDEuMTA1MTcwODBFKzk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyODIgcG93ZXIgMTAuMDAwMDEgICAgICAgOTk5OTk5IC0+IDIuNzE4Mjc3NzVFKzk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyODMgcG93ZXIgMTAuMDAwMSAgICAgICAgOTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDI4NSBwb3dlciAxMSAgICAgICAgICAgICA5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4Mjg2IHBvd2VyIDEyICAgICAgICAgICAgIDk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyODcgcG93ZXIgOTk5ICAgICAgICAgICAgOTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDI4OCBwb3dlciA5OTk5OTk5OTkgICAgICA5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4Mjg5IHBvd2VyIDkuOUU5OTk5OTk5OTkgIDk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcG93eDI5MCBwb3dlciAwLjUgICAgICAgICAgICA5OTk5OTkgLT4gMi4wMjAwNjgxMkUtMzAxMDMwIEluZXhhY3QgUm91bmRlZAorcG93eDI5MSBwb3dlciAwLjEgICAgICAgICAgICA5OTk5OTkgLT4gMUUtOTk5OTk5ICAtLSB1bnJvdW5kZWQKK3Bvd3gyOTIgcG93ZXIgMC4wOSAgICAgICAgICAgOTk5OTk5IC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDI5MyBwb3dlciAwLjA1ICAgICAgICAgICA5OTk5OTkgLT4gMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4Mjk0IHBvd2VyIDAuMDEgICAgICAgICAgIDk5OTk5OSAtPiAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gyOTUgcG93ZXIgMC4wMDAxICAgICAgICAgOTk5OTk5IC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDI5NyBwb3dlciAwLjAwMDAwMDEgICAgICA5OTk5OTkgLT4gMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4Mjk4IHBvd2VyIDAuMDAwMDAwMDAwMSAgIDk5OTk5OSAtPiAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gyOTkgcG93ZXIgMUUtOTk5OTk5OTk5ICAgOTk5OTk5IC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitwb3d4MzEwIHBvd2VyIC05ICAgICAgICAgICAgIDk5OTk5OSAtPiAtMy41OTA4NDYyOUUrOTU0MjQxIEluZXhhY3QgUm91bmRlZAorcG93eDMxMSBwb3dlciAtMTAgICAgICAgICAgICA5OTk5OTkgLT4gLTEuMDAwMDAwMDBFKzk5OTk5OSBSb3VuZGVkCitwb3d4MzEyIHBvd2VyIC0xMC4wMDAxICAgICAgIDk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEzIHBvd2VyIC0xMC4xICAgICAgICAgIDk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MzE0IHBvd2VyIC0xMSAgICAgICAgICAgIDk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MzE1IHBvd2VyIC0xMiAgICAgICAgICAgIDk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MzE2IHBvd2VyIC05OTkgICAgICAgICAgIDk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MzE3IHBvd2VyIC05OTk5OTkgICAgICAgIDk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MzE4IHBvd2VyIC05OTk5OTk5OTkgICAgIDk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MzE5IHBvd2VyIC05LjlFOTk5OTk5OTk5IDk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3Bvd3gzMjAgcG93ZXIgLTAuNSAgICAgICAgICAgOTk5OTk5IC0+IC0yLjAyMDA2ODEyRS0zMDEwMzAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIxIHBvd2VyIC0wLjEgICAgICAgICAgIDk5OTk5OSAtPiAtMUUtOTk5OTk5Citwb3d4MzIyIHBvd2VyIC0wLjA5ICAgICAgICAgIDk5OTk5OSAtPiAtMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MzIzIHBvd2VyIC0wLjA1ICAgICAgICAgIDk5OTk5OSAtPiAtMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MzI0IHBvd2VyIC0wLjAxICAgICAgICAgIDk5OTk5OSAtPiAtMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MzI1IHBvd2VyIC0wLjAwMDEgICAgICAgIDk5OTk5OSAtPiAtMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MzI3IHBvd2VyIC0wLjAwMDAwMDEgICAgIDk5OTk5OSAtPiAtMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MzI4IHBvd2VyIC0wLjAwMDAwMDAwMDEgIDk5OTk5OSAtPiAtMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MzI5IHBvd2VyIC0xRS05OTk5OTk5OTkgIDk5OTk5OSAtPiAtMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIG5vdGUgbm8gdHJpbSBvZiBuZXh0IHJlc3VsdAorcG93eDMzMCBwb3dlciAtOSAgICAgICAgICAgICA5OTk5OTggLT4gIDMuOTg5ODI5MjFFKzk1NDI0MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMzEgcG93ZXIgLTEwICAgICAgICAgICAgOTk5OTk4IC0+ICAxLjAwMDAwMDAwRSs5OTk5OTggUm91bmRlZAorcG93eDMzMiBwb3dlciAtMTAuMDAwMSAgICAgICA5OTk5OTggLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDMzMyBwb3dlciAtMTAuMSAgICAgICAgICA5OTk5OTggLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDMzNCBwb3dlciAtMTEgICAgICAgICAgICA5OTk5OTggLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDMzNSBwb3dlciAtMTIgICAgICAgICAgICA5OTk5OTggLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDMzNiBwb3dlciAtOTk5ICAgICAgICAgICA5OTk5OTggLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDMzNyBwb3dlciAtOTk5OTk5ICAgICAgICA5OTk5OTggLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDMzOCBwb3dlciAtOTk5OTk5OTk5ICAgICA5OTk5OTggLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDMzOSBwb3dlciAtOS45RTk5OTk5OTk5OSA5OTk5OTggLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitwb3d4MzQwIHBvd2VyIC0wLjUgICAgICAgICAgIDk5OTk5OCAtPiAgNC4wNDAxMzYyNEUtMzAxMDMwIEluZXhhY3QgUm91bmRlZAorcG93eDM0MSBwb3dlciAtMC4xICAgICAgICAgICA5OTk5OTggLT4gIDFFLTk5OTk5OCAgLS0gTkIgZXhhY3QgdW5yb3VuZGVkCitwb3d4MzQyIHBvd2VyIC0wLjA5ICAgICAgICAgIDk5OTk5OCAtPiAgMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MzQzIHBvd2VyIC0wLjA1ICAgICAgICAgIDk5OTk5OCAtPiAgMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MzQ0IHBvd2VyIC0wLjAxICAgICAgICAgIDk5OTk5OCAtPiAgMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MzQ1IHBvd2VyIC0wLjAwMDEgICAgICAgIDk5OTk5OCAtPiAgMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MzQ3IHBvd2VyIC0wLjAwMDAwMDEgICAgIDk5OTk5OCAtPiAgMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MzQ4IHBvd2VyIC0wLjAwMDAwMDAwMDEgIDk5OTk5OCAtPiAgMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MzQ5IHBvd2VyIC0xRS05OTk5OTk5OTkgIDk5OTk5OCAtPiAgMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIHNvbWUgc3Vibm9ybWFscworcHJlY2lzaW9uOiA5CistLSBbcHJlY2lzaW9uIGlzIDksIHNvIHNtYWxsZXN0IGV4cG9uZW50IGlzIC0xMDAwMDAwMDA3Citwb3d4MzUwIHBvd2VyICAxZS0xICAgICAgICAgIDUwMDAwMCAtPiAgMUUtNTAwMDAwCitwb3d4MzUxIHBvd2VyICAxZS0yICAgICAgICAgIDk5OTk5OSAtPiAgMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MzUyIHBvd2VyICAxZS0yICAgICAgICAgIDUwMDAwMCAtPiAgMUUtMTAwMDAwMCBTdWJub3JtYWwKK3Bvd3gzNTMgcG93ZXIgIDFlLTIgICAgICAgICAgNTAwMDAxIC0+ICAxRS0xMDAwMDAyIFN1Ym5vcm1hbAorcG93eDM1NCBwb3dlciAgMWUtMiAgICAgICAgICA1MDAwMDIgLT4gIDFFLTEwMDAwMDQgU3Vibm9ybWFsCitwb3d4MzU1IHBvd2VyICAxZS0yICAgICAgICAgIDUwMDAwMyAtPiAgMUUtMTAwMDAwNiBTdWJub3JtYWwKK3Bvd3gzNTYgcG93ZXIgIDFlLTIgICAgICAgICAgNTAwMDA0IC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworcG93eDM2MCBwb3dlciAgMC4wMTAwMDEgICAgICA1MDAwMDAgLT4gIDUuMTcxNzYwODJFLTk5OTk3OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjEgcG93ZXIgIDAuMDEwMDAwMDAxICAgNTAwMDAwIC0+ICAxLjA1MTI3MTFFLTEwMDAwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjIgcG93ZXIgIDAuMDEwMDAwMDAxICAgNTAwMDAxIC0+ICAxLjA1MTI3RS0xMDAwMDAyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYzIHBvd2VyICAwLjAxMDAwMDAwMDkgIDUwMDAwMCAtPiAgMS4wNDYwMjc5RS0xMDAwMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4MzY0IHBvd2VyICAwLjAxMDAwMDAwMDEgIDUwMDAwMCAtPiAgMS4wMDUwMTI1RS0xMDAwMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4MzY1IHBvd2VyICAwLjAxICAgICAgICAgIDUwMDAwMCAtPiAgMUUtMTAwMDAwMCBTdWJub3JtYWwKK3Bvd3gzNjYgcG93ZXIgIDAuMDA5OTk5OTk5OSAgNTAwMDAwIC0+ICA5Ljk1MDEyNUUtMTAwMDAwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcG93eDM2NyBwb3dlciAgMC4wMDk5OTk5OTk4ICA1MDAwMDAgLT4gIDkuOTAwNDk4RS0xMDAwMDAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4MzY4IHBvd2VyICAwLjAwOTk5OTk5OTcgIDUwMDAwMCAtPiAgOS44NTExMTlFLTEwMDAwMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNjkgcG93ZXIgIDAuMDA5OTk5OTk5NiAgNTAwMDAwIC0+ICA5LjgwMTk4N0UtMTAwMDAwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcG93eDM3MCBwb3dlciAgMC4wMDkgICAgICAgICA1MDAwMDAgLT4gIDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSAxL3N1Ym5vcm1hbCAtPiBvdmVyZmxvdworcG93eDM3MSBwb3dlciAgMWUtMSAgICAgICAgIC01MDAwMDAgLT4gIDFFKzUwMDAwMAorcG93eDM3MiBwb3dlciAgMWUtMiAgICAgICAgIC05OTk5OTkgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDM3MyBwb3dlciAgMWUtMiAgICAgICAgIC01MDAwMDAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDM3NCBwb3dlciAgMWUtMiAgICAgICAgIC01MDAwMDEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDM3NSBwb3dlciAgMWUtMiAgICAgICAgIC01MDAwMDIgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDM3NiBwb3dlciAgMWUtMiAgICAgICAgIC01MDAwMDMgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDM3NyBwb3dlciAgMWUtMiAgICAgICAgIC01MDAwMDQgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitwb3d4MzgxIHBvd2VyICAwLjAxMDAwMSAgICAgLTUwMDAwMCAtPiAgMS45MzM1Nzc0M0UrOTk5OTc4IEluZXhhY3QgUm91bmRlZAorcG93eDM4MiBwb3dlciAgMC4wMTAwMDAwMDEgIC01MDAwMDAgLT4gIDkuNTEyMjk0MjdFKzk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzODMgcG93ZXIgIDAuMDEwMDAwMDAxICAtNTAwMDAxIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCitwb3d4Mzg0IHBvd2VyICAwLjAxMDAwMDAwMDkgLTUwMDAwMCAtPiAgOS41NTk5NzQ4NEUrOTk5OTk5IEluZXhhY3QgUm91bmRlZAorcG93eDM4NSBwb3dlciAgMC4wMTAwMDAwMDAxIC01MDAwMDAgLT4gIDkuOTUwMTI0NzlFKzk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzODYgcG93ZXIgIDAuMDEgICAgICAgICAtNTAwMDAwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzODcgcG93ZXIgIDAuMDA5OTk5ICAgICAtNTAwMDAwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmUgcG93ZXIgZ2l2aW5nIHN1Ym5vcm1hbAorcG93eDM4OCBwb3dlciAgMTAwLjAwMDAwMSAgIC01MDAwMDAgLT4gIDkuOTUwMTI1RS0xMDAwMDAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKworLS0gdGVzdCBzb21lICdmYWxzZSBpbnRlZ2VyJyBib3VuZGFyaWVzCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCitwb3d4NTAxIHBvd2VyICAxMDAgIDFFKzEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICAgICBSb3VuZGVkCitwb3d4NTAyIHBvd2VyICAxMDAgIDFFKzIgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwMCAgICBSb3VuZGVkCitwb3d4NTAzIHBvd2VyICAxMDAgIDFFKzMgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTA0IHBvd2VyICAxMDAgIDFFKzQgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTA1IHBvd2VyICAxMDAgIDFFKzUgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTA2IHBvd2VyICAxMDAgIDFFKzYgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTA3IHBvd2VyICAxMDAgIDFFKzcgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTA4IHBvd2VyICAxMDAgIDFFKzggICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTA5IHBvd2VyICAxMDAgIDFFKzkgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTEwIHBvd2VyICAxMDAgIDFFKzEwICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTExIHBvd2VyICAxMDAgIDFFKzExICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTEyIHBvd2VyICAxMDAgIDFFKzEyICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTEzIHBvd2VyICAxMDAgIDFFKzEzICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTE0IHBvd2VyICAxMDAgIDFFKzE0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTE1IHBvd2VyICAxMDAgIDFFKzE1ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTE2IHBvd2VyICAxMDAgIDFFKzE2ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTE3IHBvd2VyICAxMDAgIDFFKzE3ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTE4IHBvd2VyICAxMDAgIDFFKzE4ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTE5IHBvd2VyICAxMDAgIDFFKzE5ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTIwIHBvd2VyICAxMDAgIDFFKzIwICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTIxIHBvd2VyICAxMDAgIDFFKzIxICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTIyIHBvd2VyICAxMDAgIDFFKzIyICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTIzIHBvd2VyICAxMDAgIDFFKzIzICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTI0IHBvd2VyICAxMDAgIDFFKzI0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTI1IHBvd2VyICAxMDAgIDFFKzI1ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTI2IHBvd2VyICAxMDAgIDFFKzI2ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTI3IHBvd2VyICAxMDAgIDFFKzI3ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTI4IHBvd2VyICAxMDAgIDFFKzI4ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTI5IHBvd2VyICAxMDAgIDFFKzI5ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTMwIHBvd2VyICAxMDAgIDFFKzMwICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTMxIHBvd2VyICAxMDAgIDFFKzQwICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTMyIHBvd2VyICAxMDAgIDFFKzUwICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTMzIHBvd2VyICAxMDAgIDFFKzEwMCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4NTM0IHBvd2VyICAxMDAgIDFFKzM4MyAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tIGEgY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKK3ByZWNpc2lvbjogICA1CittYXhleHBvbmVudDogNzkKK21pbmV4cG9uZW50OiAtNzkKK3Bvd3g3NTAgcG93ZXIgICAgIDEuMjM0N0UtNDAgIDIgICAgICAtPiAgMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKKy0tIE51bGwgdGVzdHMKK3Bvd3g5MDAgcG93ZXIgIDEgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Bvd3g5MDEgcG93ZXIgICMgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gQmVsb3cgaGVyZSBhcmUgdGVzdHMgd2l0aCBhIHByZWNpc2lvbiBvciBjb250ZXh0IG91dHNpZGUgb2YgdGhlICAtLQorLS0gZGVjTnVtYmVyICdtYXRoZW1hdGljYWwgZnVuY3Rpb25zJyByZXN0cmljdGVkIHJhbmdlLiAgVGhlc2UgICAgICAtLQorLS0gcmVtYWluIHN1cHBvcnRlZCBpbiBkZWNOdW1iZXIgdG8gbWluaW1pemUgYnJlYWthZ2UsIGJ1dCBtYXkgYmUgICAtLQorLS0gb3V0c2lkZSB0aGUgcmFuZ2Ugb2Ygb3RoZXIgaW1wbGVtZW50YXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3ByZWNpc2lvbjogOQorcG93eDEwNjMgcG93ZXIgICAnMTAnICAnOTk5OTk5OTk5JyAtPiAnMS4wMDAwMDAwMEUrOTk5OTk5OTk5JyBSb3VuZGVkCitwb3d4MTA2NCBwb3dlciAgICcxMCcgICc5OTk5OTk5OTgnIC0+ICcxLjAwMDAwMDAwRSs5OTk5OTk5OTgnIFJvdW5kZWQKK3Bvd3gxMDY1IHBvd2VyICAgJzEwJyAgJzk5OTk5OTk5NycgLT4gJzEuMDAwMDAwMDBFKzk5OTk5OTk5NycgUm91bmRlZAorcG93eDEwNjYgcG93ZXIgICAnMTAnICAnMzMzMzMzMzMzJyAtPiAnMS4wMDAwMDAwMEUrMzMzMzMzMzMzJyBSb3VuZGVkCistLSBuZXh0IHR3byBhcmUgaW50ZWdlci1vdXQtb2YgcmFuZ2UKK3Bvd3gxMTgzIHBvd2VyICAgJzcnICAgJzEwMDAwMDAwMDAnICAtPiBOYU4gSW52YWxpZF9jb250ZXh0Citwb3d4MTE4NCBwb3dlciAgICc3JyAgICcxMDAwMDAwMDAxJyAgLT4gTmFOIEludmFsaWRfY29udGV4dAorcG93eDExODYgcG93ZXIgICAnNycgICAnLTEwMDAwMDAwMDEnIC0+IDEuMzgyNDM2MzBFLTg0NTA5ODA0MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMTg3IHBvd2VyICAgJzcnICAgJy0xMDAwMDAwMDAwJyAtPiA5LjY3NzA1NDExRS04NDUwOTgwNDEgSW5leGFjdCBSb3VuZGVkCisKKy0tIG91dC1vZi1yYW5nZSBlZGdlIGNhc2VzCitwb3d4MTExOCBwb3dlciAgJzEwJyAgJy0zMzMzMzMzMzMnICAgLT4gMUUtMzMzMzMzMzMzCitwb3d4MTExOSBwb3dlciAgJzEwJyAgJy05OTk5OTk5OTgnICAgLT4gMUUtOTk5OTk5OTk4Citwb3d4MTEyMCBwb3dlciAgJzEwJyAgJy05OTk5OTk5OTknICAgLT4gMUUtOTk5OTk5OTk5Citwb3d4MTE4MSBwb3dlciAgICc3JyAgICc5OTk5OTk5OTgnICAgLT4gMi4xMDg5MjMxM0UrODQ1MDk4MDM4IEluZXhhY3QgUm91bmRlZAorcG93eDExODIgcG93ZXIgICAnNycgICAnOTk5OTk5OTk5JyAgIC0+IDEuNDc2MjQ2MTlFKzg0NTA5ODAzOSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMTg5IHBvd2VyICAgJzcnICAgJy05OTk5OTk5OTknICAtPiA2Ljc3MzkzNzg3RS04NDUwOTgwNDAgSW5leGFjdCBSb3VuZGVkCitwb3d4MTE5MCBwb3dlciAgICc3JyAgICctOTk5OTk5OTk4JyAgLT4gNC43NDE3NTY1MUUtODQ1MDk4MDM5IEluZXhhY3QgUm91bmRlZAorCistLSBBIChyYXJlKSBjYXNlIHdoZXJlIHRoZSBsYXN0IGRpZ2l0IGlzIG5vdCB3aXRoaW4gMC41IFVMUCB3aXRoIGNsYXNzaWMgcHJlY2lzaW9uCitwcmVjaXNpb246IDkKK3Bvd3gxMjE1IHBvd2VyICItMjE5NzE1NzUuMEUrMzE0NTQ0NDEiICItNyIgLT4gIi00LjA0NTQ5NTAyRS0yMjAxODExMzkiIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAyMAorcG93eDEyMTYgcG93ZXIgIi0yMTk3MTU3NS4wRSszMTQ1NDQ0MSIgIi03IiAtPiAiLTQuMDQ1NDk1MDI0OTMyNDg5MTc4OEUtMjIwMTgxMTM5IiBJbmV4YWN0IFJvdW5kZWQKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cworcHJlY2lzaW9uOiA5Citwb3d4MTI4MCBwb3dlciAgOSAgICAgICAgICAgIDk5OTk5OTk5OSAtPiAzLjA1NTUwMDU0RSs5NTQyNDI1MDggSW5leGFjdCBSb3VuZGVkCitwb3d4MTI4MSBwb3dlciAxMCAgICAgICAgICAgIDk5OTk5OTk5OSAtPiAxLjAwMDAwMDAwRSs5OTk5OTk5OTkgUm91bmRlZAorcG93eDEyODIgcG93ZXIgMTAuMDAwMSAgICAgICA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTI4MyBwb3dlciAxMC4xICAgICAgICAgIDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMjg0IHBvd2VyIDExICAgICAgICAgICAgOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEyODUgcG93ZXIgMTIgICAgICAgICAgICA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTI4NiBwb3dlciA5OTkgICAgICAgICAgIDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMjg3IHBvd2VyIDk5OTk5OSAgICAgICAgOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEyODggcG93ZXIgOTk5OTk5OTk5ICAgICA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTI4OSBwb3dlciA5LjlFOTk5OTk5OTk5IDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworcG93eDEyOTAgcG93ZXIgMC41ICAgICAgICAgICA5OTk5OTk5OTkgLT4gNC4zMzU1OTU5NEUtMzAxMDI5OTk2IEluZXhhY3QgUm91bmRlZAorcG93eDEyOTEgcG93ZXIgMC4xICAgICAgICAgICA5OTk5OTk5OTkgLT4gMUUtOTk5OTk5OTk5ICAtLSB1bnJvdW5kZWQKK3Bvd3gxMjkyIHBvd2VyIDAuMDkgICAgICAgICAgOTk5OTk5OTk5IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDEyOTMgcG93ZXIgMC4wNSAgICAgICAgICA5OTk5OTk5OTkgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MTI5NCBwb3dlciAwLjAxICAgICAgICAgIDk5OTk5OTk5OSAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gxMjk1IHBvd2VyIDAuMDAwMSAgICAgICAgOTk5OTk5OTk5IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDEyOTcgcG93ZXIgMC4wMDAwMDAxICAgICA5OTk5OTk5OTkgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MTI5OCBwb3dlciAwLjAwMDAwMDAwMDEgIDk5OTk5OTk5OSAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gxMjk5IHBvd2VyIDFFLTk5OTk5OTk5OSAgOTk5OTk5OTk5IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCitwb3d4MTMxMCBwb3dlciAtOSAgICAgICAgICAgICA5OTk5OTk5OTkgLT4gLTMuMDU1NTAwNTRFKzk1NDI0MjUwOCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzExIHBvd2VyIC0xMCAgICAgICAgICAgIDk5OTk5OTk5OSAtPiAtMS4wMDAwMDAwMEUrOTk5OTk5OTk5IFJvdW5kZWQKK3Bvd3gxMzEyIHBvd2VyIC0xMC4wMDAxICAgICAgIDk5OTk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTMxMyBwb3dlciAtMTAuMSAgICAgICAgICA5OTk5OTk5OTkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEzMTQgcG93ZXIgLTExICAgICAgICAgICAgOTk5OTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzE1IHBvd2VyIC0xMiAgICAgICAgICAgIDk5OTk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTMxNiBwb3dlciAtOTk5ICAgICAgICAgICA5OTk5OTk5OTkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEzMTcgcG93ZXIgLTk5OTk5OSAgICAgICAgOTk5OTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzE4IHBvd2VyIC05OTk5OTk5OTkgICAgIDk5OTk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTMxOSBwb3dlciAtOS45RTk5OTk5OTk5OSA5OTk5OTk5OTkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitwb3d4MTMyMCBwb3dlciAtMC41ICAgICAgICAgICA5OTk5OTk5OTkgLT4gLTQuMzM1NTk1OTRFLTMwMTAyOTk5NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzIxIHBvd2VyIC0wLjEgICAgICAgICAgIDk5OTk5OTk5OSAtPiAtMUUtOTk5OTk5OTk5Citwb3d4MTMyMiBwb3dlciAtMC4wOSAgICAgICAgICA5OTk5OTk5OTkgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDEzMjMgcG93ZXIgLTAuMDUgICAgICAgICAgOTk5OTk5OTk5IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gxMzI0IHBvd2VyIC0wLjAxICAgICAgICAgIDk5OTk5OTk5OSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MTMyNSBwb3dlciAtMC4wMDAxICAgICAgICA5OTk5OTk5OTkgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDEzMjcgcG93ZXIgLTAuMDAwMDAwMSAgICAgOTk5OTk5OTk5IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gxMzI4IHBvd2VyIC0wLjAwMDAwMDAwMDEgIDk5OTk5OTk5OSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MTMyOSBwb3dlciAtMUUtOTk5OTk5OTk5ICA5OTk5OTk5OTkgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCistLSBub3RlIG5vIHRyaW0gb2YgbmV4dCByZXN1bHQKK3Bvd3gxMzMwIHBvd2VyIC05ICAgICAgICAgICAgIDk5OTk5OTk5OCAtPiAgMy4zOTUwMDA2MEUrOTU0MjQyNTA3IEluZXhhY3QgUm91bmRlZAorcG93eDEzMzEgcG93ZXIgLTEwICAgICAgICAgICAgOTk5OTk5OTk4IC0+ICAxLjAwMDAwMDAwRSs5OTk5OTk5OTggUm91bmRlZAorcG93eDEzMzIgcG93ZXIgLTEwLjAwMDEgICAgICAgOTk5OTk5OTk4IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzMzIHBvd2VyIC0xMC4xICAgICAgICAgIDk5OTk5OTk5OCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTMzNCBwb3dlciAtMTEgICAgICAgICAgICA5OTk5OTk5OTggLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEzMzUgcG93ZXIgLTEyICAgICAgICAgICAgOTk5OTk5OTk4IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzM2IHBvd2VyIC05OTkgICAgICAgICAgIDk5OTk5OTk5OCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTMzNyBwb3dlciAtOTk5OTk5ICAgICAgICA5OTk5OTk5OTggLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEzMzggcG93ZXIgLTk5OTk5OTk5OSAgICAgOTk5OTk5OTk4IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzM5IHBvd2VyIC05LjlFOTk5OTk5OTk5IDk5OTk5OTk5OCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3Bvd3gxMzQwIHBvd2VyIC0wLjUgICAgICAgICAgIDk5OTk5OTk5OCAtPiAgOC42NzExOTE4N0UtMzAxMDI5OTk2IEluZXhhY3QgUm91bmRlZAorcG93eDEzNDEgcG93ZXIgLTAuMSAgICAgICAgICAgOTk5OTk5OTk4IC0+ICAxRS05OTk5OTk5OTggIC0tIE5CIGV4YWN0IHVucm91bmRlZAorcG93eDEzNDIgcG93ZXIgLTAuMDkgICAgICAgICAgOTk5OTk5OTk4IC0+ICAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gxMzQzIHBvd2VyIC0wLjA1ICAgICAgICAgIDk5OTk5OTk5OCAtPiAgMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MTM0NCBwb3dlciAtMC4wMSAgICAgICAgICA5OTk5OTk5OTggLT4gIDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDEzNDUgcG93ZXIgLTAuMDAwMSAgICAgICAgOTk5OTk5OTk4IC0+ICAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gxMzQ3IHBvd2VyIC0wLjAwMDAwMDEgICAgIDk5OTk5OTk5OCAtPiAgMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4MTM0OCBwb3dlciAtMC4wMDAwMDAwMDAxICA5OTk5OTk5OTggLT4gIDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDEzNDkgcG93ZXIgLTFFLTk5OTk5OTk5OSAgOTk5OTk5OTk4IC0+ICAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gc29tZSBzdWJub3JtYWxzCitwcmVjaXNpb246IDkKKy0tIFtwcmVjaXNpb24gaXMgOSwgc28gc21hbGxlc3QgZXhwb25lbnQgaXMgLTEwMDAwMDAwMDcKK3Bvd3gxMzUwIHBvd2VyICAxZS0xICAgICAgICAgIDUwMDAwMDAwMCAtPiAgMUUtNTAwMDAwMDAwCitwb3d4MTM1MSBwb3dlciAgMWUtMiAgICAgICAgICA5OTk5OTk5OTkgLT4gIDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDEzNTIgcG93ZXIgIDFlLTIgICAgICAgICAgNTAwMDAwMDAwIC0+ICAxRS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorcG93eDEzNTMgcG93ZXIgIDFlLTIgICAgICAgICAgNTAwMDAwMDAxIC0+ICAxRS0xMDAwMDAwMDAyIFN1Ym5vcm1hbAorcG93eDEzNTQgcG93ZXIgIDFlLTIgICAgICAgICAgNTAwMDAwMDAyIC0+ICAxRS0xMDAwMDAwMDA0IFN1Ym5vcm1hbAorcG93eDEzNTUgcG93ZXIgIDFlLTIgICAgICAgICAgNTAwMDAwMDAzIC0+ICAxRS0xMDAwMDAwMDA2IFN1Ym5vcm1hbAorcG93eDEzNTYgcG93ZXIgIDFlLTIgICAgICAgICAgNTAwMDAwMDA0IC0+ICAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworcG93eDEzNjAgcG93ZXIgIDAuMDEwMDAxICAgICAgNTAwMDAwMDAwIC0+ICA0LjM0OTQxOTg4RS05OTk5NzgyODcgSW5leGFjdCBSb3VuZGVkCitwb3d4MTM2MSBwb3dlciAgMC4wMTAwMDAwMDEgICA1MDAwMDAwMDAgLT4gIDUuMTg0NjkyNTdFLTk5OTk5OTk3OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzYyIHBvd2VyICAwLjAxMDAwMDAwMSAgIDUwMDAwMDAwMSAtPiAgNS4xODQ2OTMwOUUtOTk5OTk5OTgxIEluZXhhY3QgUm91bmRlZAorcG93eDEzNjMgcG93ZXIgIDAuMDEwMDAwMDAwOSAgNTAwMDAwMDAwIC0+ICAzLjQ5MzQyMDAzRS05OTk5OTk5ODEgSW5leGFjdCBSb3VuZGVkCitwb3d4MTM2NCBwb3dlciAgMC4wMTAwMDAwMDAxICA1MDAwMDAwMDAgLT4gIDEuNDg0MTMxNTVFLTk5OTk5OTk5OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzY1IHBvd2VyICAwLjAxICAgICAgICAgIDUwMDAwMDAwMCAtPiAgMUUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK3Bvd3gxMzY2IHBvd2VyICAwLjAwOTk5OTk5OTkgIDUwMDAwMDAwMCAtPiAgNi43Mzc5RS0xMDAwMDAwMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwb3d4MTM2NyBwb3dlciAgMC4wMDk5OTk5OTk4ICA1MDAwMDAwMDAgLT4gIDQuNTRFLTEwMDAwMDAwMDUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzY4IHBvd2VyICAwLjAwOTk5OTk5OTcgIDUwMDAwMDAwMCAtPiAgM0UtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcG93eDEzNjkgcG93ZXIgIDAuMDA5OTk5OTk5NiAgNTAwMDAwMDAwIC0+ICAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3Bvd3gxMzcwIHBvd2VyICAwLjAwOSAgICAgICAgIDUwMDAwMDAwMCAtPiAgMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIDEvc3Vibm9ybWFsIC0+IG92ZXJmbG93Citwb3d4MTM3MSBwb3dlciAgMWUtMSAgICAgICAgIC01MDAwMDAwMDAgLT4gIDFFKzUwMDAwMDAwMAorcG93eDEzNzIgcG93ZXIgIDFlLTIgICAgICAgICAtOTk5OTk5OTk5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzczIHBvd2VyICAxZS0yICAgICAgICAgLTUwMDAwMDAwMCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTM3NCBwb3dlciAgMWUtMiAgICAgICAgIC01MDAwMDAwMDEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDEzNzUgcG93ZXIgIDFlLTIgICAgICAgICAtNTAwMDAwMDAyIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzc2IHBvd2VyICAxZS0yICAgICAgICAgLTUwMDAwMDAwMyAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitwb3d4MTM3NyBwb3dlciAgMWUtMiAgICAgICAgIC01MDAwMDAwMDQgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitwb3d4MTM4MSBwb3dlciAgMC4wMTAwMDEgICAgIC01MDAwMDAwMDAgLT4gIDIuMjk5MTU3MTlFKzk5OTk3ODI4NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzgyIHBvd2VyICAwLjAxMDAwMDAwMSAgLTUwMDAwMDAwMCAtPiAgMS45Mjg3NTQ2N0UrOTk5OTk5OTc4IEluZXhhY3QgUm91bmRlZAorcG93eDEzODMgcG93ZXIgIDAuMDEwMDAwMDAxICAtNTAwMDAwMDAxIC0+ICAxLjkyODc1NDQ4RSs5OTk5OTk5ODAgSW5leGFjdCBSb3VuZGVkCitwb3d4MTM4NCBwb3dlciAgMC4wMTAwMDAwMDA5IC01MDAwMDAwMDAgLT4gIDIuODYyNTI0MzhFKzk5OTk5OTk4MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzg1IHBvd2VyICAwLjAxMDAwMDAwMDEgLTUwMDAwMDAwMCAtPiAgNi43Mzc5NDcxN0UrOTk5OTk5OTk3IEluZXhhY3QgUm91bmRlZAorcG93eDEzODYgcG93ZXIgIDAuMDEgICAgICAgICAtNTAwMDAwMDAwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gxMzg3IHBvd2VyICAwLjAwOTk5OSAgICAgLTUwMDAwMDAwMCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tIG5lZ2F0aXZlIHBvd2VyIGdpdmluZyBzdWJub3JtYWwKK3Bvd3gxMzg4IHBvd2VyICAxMDAuMDAwMDAxICAgLTUwMDAwMDAwMCAtPiAgNi43Mzc5RS0xMDAwMDAwMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIEJlbG93IGhlcmUgYXJlIHRoZSB0ZXN0cyB3aXRoIGEgbm9uLWludGVnZXIgcmhzLCBpbmNsdWRpbmcgdGhlICAgLS0KKy0tIHRlc3RzIHRoYXQgcHJldmlvdXNseSBjYXVzZWQgSW52YWxpZCBvcGVyYXRpb24uICBBbiBpbnRlZ2VyLW9ubHkgLS0KKy0tIChvbiByaHMpIGltcGxlbWVudGF0aW9uIHNob3VsZCBoYW5kbGUgYWxsIHRoZSB0ZXN0cyBhYm92ZSBhcyAgICAgLS0KKy0tIHNob3duLCBhbmQgd291bGQgZmxhZyBtb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXMgSW52YWxpZC4gICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ByZWNpc2lvbjogICAxNgorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKKworcG93eDIwMDAgcG93ZXIgNyAnMTAwMDAwMDAwMDAnICAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDAxIHBvd2VyIDIgJzIuMDAwMDAxJyAgICAgICAgICAgLT4gNC4wMDAwMDI3NzI1ODk2ODMgSW5leGFjdCBSb3VuZGVkCitwb3d4MjAwMiBwb3dlciAyICcyLjAwMDAwMDAwJyAgICAgICAgIC0+IDQKK3Bvd3gyMDAzIHBvd2VyIDIgJzIuMDAwMDAwMDAxJyAgICAgICAgLT4gNC4wMDAwMDAwMDI3NzI1ODkgSW5leGFjdCBSb3VuZGVkCitwb3d4MjAwNCBwb3dlciAyICcyLjAwMDAwMDAwMDEnICAgICAgIC0+IDQuMDAwMDAwMDAwMjc3MjU5IEluZXhhY3QgUm91bmRlZAorcG93eDIwMDUgcG93ZXIgMiAnMi4wMDAwMDAwMDAwMScgICAgICAtPiA0LjAwMDAwMDAwMDAyNzcyNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDA2IHBvd2VyIDIgJzIuMDAwMDAwMDAwMDAxJyAgICAgLT4gNC4wMDAwMDAwMDAwMDI3NzMgSW5leGFjdCBSb3VuZGVkCitwb3d4MjAwNyBwb3dlciAyICcyLjAwMDAwMDAwMDAwMDEnICAgIC0+IDQuMDAwMDAwMDAwMDAwMjc3IEluZXhhY3QgUm91bmRlZAorcG93eDIwMDggcG93ZXIgMiAnMi4wMDAwMDAwMDAwMDAwMScgICAtPiA0LjAwMDAwMDAwMDAwMDAyOCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDA5IHBvd2VyIDIgJzIuMDAwMDAwMDAwMDAwMDAxJyAgLT4gNC4wMDAwMDAwMDAwMDAwMDMgSW5leGFjdCBSb3VuZGVkCitwb3d4MjAxMCBwb3dlciAyICcyLjAwMDAwMDAwMDAwMDAwMDEnIC0+IDQuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorLS0gICAgICAgICAgICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYKKworcG93eDIwMTEgcG93ZXIgMSAxMjM0IC0+IDEKK3ByZWNpc2lvbjogNAorcG93eDIwMTIgcG93ZXIgMSAxMjM0IC0+IDEKK3ByZWNpc2lvbjogMworcG93eDIwMTMgcG93ZXIgMSAxMjM0ICAgICAtPiAxCitwb3d4MjAxNCBwb3dlciAxIDEyLjM0ZSsyIC0+IDEKK3Bvd3gyMDE1IHBvd2VyIDEgMTIuMyAgICAgLT4gMS4wMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDE2IHBvd2VyIDEgMTIuMCAgICAgLT4gMQorcG93eDIwMTcgcG93ZXIgMSAxLjAxICAgICAtPiAxLjAwIEluZXhhY3QgUm91bmRlZAorcG93eDIwMTggcG93ZXIgMiAxLjAwICAgICAtPiAyCitwb3d4MjAxOSBwb3dlciAyIDIuMDAgICAgIC0+IDQKK3ByZWNpc2lvbjogOQorcG93eDIwMzAgcG93ZXIgMSAxLjAwMDEgICAgICAgICAgIC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjAzMSBwb3dlciAxIDEuMDAwMDAwMSAgICAgICAgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDMyIHBvd2VyIDEgMS4wMDAwMDAwMDAxICAgICAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcG93eDIwMzMgcG93ZXIgMSAxLjAwMDAwMDAwMDAwMDEgIC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDUKK3Bvd3gyMDM0IHBvd2VyIDEgMS4wMDAxICAgICAgICAgICAtPiAxLjAwMDAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjAzNSBwb3dlciAxIDEuMDAwMDAwMSAgICAgICAgLT4gMS4wMDAwIEluZXhhY3QgUm91bmRlZAorcG93eDIwMzYgcG93ZXIgMSAxLjAwMDAwMDAwMDEgICAgIC0+IDEuMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDM3IHBvd2VyIDEgMS4wMDAwMDAwMDAwMDAxICAtPiAxLjAwMDAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjAzOCBwb3dlciAxIDEuMDAwMDAwMDAwMDAwMSAgLT4gMS4wMDAwIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogY2VpbGluZworcHJlY2lzaW9uOiAzCitwb3d4MjAzOSBwb3dlciAxIDEuMDEgICAgIC0+IDEuMDAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjA0MCBwb3dlciAxIDEyLjMgICAgIC0+IDEuMDAgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9ldmVuCisKKy0tIDEgKiogYW55IGludGVnZXIsIGluY2x1ZGluZyBiaWcgb25lcywgc2hvdWxkIGJlIGV4YWN0Citwb3d4MjA0MSBwb3dlciAxIDEwMDAwMDAwMDAgICAtPiAxCitwb3d4MjA0MiBwb3dlciAxIDk5OTk5OTk5OTkgICAtPiAxCitwb3d4MjA0MyBwb3dlciAxIDEyMzQ1Njc4MDAwICAtPiAxCitwb3d4MjA0NCBwb3dlciAxIDEyMzQ1Njc4MDAgICAtPiAxCitwb3d4MjA0NSBwb3dlciAxIDEyMzQ1Njc4OTAgICAtPiAxCitwb3d4MjA0NiBwb3dlciAxIDExMjM0NTY3ODkxICAtPiAxCitwb3d4MjA0NyBwb3dlciAxIDEyMzQ1Njc4OTAxICAtPiAxCitwb3d4MjA0OCBwb3dlciAxIDEyMzQ1Njc4OTYgICAtPiAxCitwb3d4MjA0OSBwb3dlciAxIC0xMjM0NTY3ODk2ICAtPiAxCitwb3d4MjA1MSBwb3dlciAxIDEwMDAwMDAwMDAgICAtPiAxCitwb3d4MjA1MiBwb3dlciAxIC0xMDAwMDAwMDAwICAtPiAxCitwb3d4MjA1MyBwb3dlciAxIDEyMzQ1Njc4MDAwICAtPiAxCitwb3d4MjA1NCBwb3dlciAxIC0xMjM0NTY3ODk2ICAtPiAxCitwb3d4MjA1NSBwb3dlciAxIDEwMDAwMDAwMDAgICAtPiAxCitwb3d4MjA1NiBwb3dlciAxIDQzMDAwMDAwMDAgICAtPiAxCitwb3d4MjA1NyBwb3dlciAxIC0xMDAwMDAwMDAwICAtPiAxCistLSBuZWdhdGl2ZXMgLi4uIGJ1dCBub3Qgb3V0IG9mIHJhbmdlIGZvciBkZWNOdW1iZXIKK3Bvd3gyMDYxIHBvd2VyIC0xIDEwMDAwMCAgIC0+IDEKK3Bvd3gyMDYyIHBvd2VyIC0xIDk5OTk5OSAgIC0+IC0xCitwb3d4MjA2MyBwb3dlciAtMSAxMjc4MDAwICAtPiAxCitwb3d4MjA2NCBwb3dlciAtMSAxMjc4MDMgICAtPiAtMQorcG93eDIwNjUgcG93ZXIgLTEgMTI3ODkwICAgLT4gMQorcG93eDIwNjYgcG93ZXIgLTEgMTE2Nzg5MSAgLT4gLTEKK3Bvd3gyMDY3IHBvd2VyIC0xIDEyNzg5MDEgIC0+IC0xCitwb3d4MjA2OCBwb3dlciAtMSAxMjc4OTYgICAtPiAxCitwb3d4MjA2OSBwb3dlciAtMSAtMTY3ODk3ICAtPiAtMQorcG93eDIwNzEgcG93ZXIgLTEgMTAwMDAwICAgLT4gMQorcG93eDIwNzIgcG93ZXIgLTEgLTEwMDAwMSAgLT4gLTEKK3Bvd3gyMDczIHBvd2VyIC0xIDEyNzgwMDAgIC0+IDEKK3Bvd3gyMDc0IHBvd2VyIC0xIC0xNjc4OTYgIC0+IDEKK3Bvd3gyMDc1IHBvd2VyIC0xIDEwMDAwMCAgIC0+IDEKK3Bvd3gyMDc2IHBvd2VyIC0xIC0xMDAwMDkgIC0+IC0xCisKKy0tIFRoZSBhYm92ZSB3ZXJlIGRlcml2ZWQgZnJvbSB0aGUgZWFybGllciB2ZXJzaW9uIG9mIHBvd2VyLmRlY1Rlc3Q7CistLSBub3cgc3RhcnQgbmV3IHRlc3RzIGZvciBwb3dlcih4LHkpIGZvciBub24taW50ZWdlciB5CitwcmVjaXNpb246IDkKKworLS0gdGVzdHMgZnJvbSBzcGVjaWZpY2F0aW9uCitwb3d4MjA4MSBwb3dlciAyICAgICAgICAgICAzICAgIC0+ICAnOCcKK3Bvd3gyMDgyIHBvd2VyIC0yICAgICAgICAgIDMgICAgLT4gICctOCcKK3Bvd3gyMDgzIHBvd2VyIDIgICAgICAgICAgLTMgICAgLT4gICcwLjEyNScKK3Bvd3gyMDg0IHBvd2VyIDEuNyAgICAgICAgJzgnICAgLT4gICc2OS43NTc1NzQ0JyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDg1IHBvd2VyIDEwIDAuMzAxMDI5OTk2ICAgLT4gIDIuMDAwMDAwMDAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMDg2IHBvd2VyIEluZmluaXR5ICAgJy0xJyAgLT4gICcwJworcG93eDIwODcgcG93ZXIgSW5maW5pdHkgICAnMCcgICAtPiAgJzEnCitwb3d4MjA4OCBwb3dlciBJbmZpbml0eSAgICcxJyAgIC0+ICAnSW5maW5pdHknCitwb3d4MjA4OSBwb3dlciAtSW5maW5pdHkgICctMScgIC0+ICAnLTAnCitwb3d4MjA5MCBwb3dlciAtSW5maW5pdHkgICcwJyAgIC0+ICAnMScKK3Bvd3gyMDkxIHBvd2VyIC1JbmZpbml0eSAgJzEnICAgLT4gICctSW5maW5pdHknCitwb3d4MjA5MiBwb3dlciAtSW5maW5pdHkgICcyJyAgIC0+ICAnSW5maW5pdHknCitwb3d4MjA5MyBwb3dlciAwICAwICAgICAgICAgICAgIC0+ICAnTmFOJyBJbnZhbGlkX29wZXJhdGlvbgorCitwcmVjaXNpb246ICAgMTYKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiAzODQKK21pbkV4cG9uZW50OiAtMzgzCisKKy0tIGJhc2ljcworcG93eDIxMDAgcG93ZXIgMUUtNyAgICAgMUUtNyAgIC0+IDAuOTk5OTk4Mzg4MTkxNzMzOSAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxMDEgcG93ZXIgMC4wMDMgICAgMUUtNyAgIC0+IDAuOTk5OTk5NDE5MDg1ODY5NyAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxMDIgcG93ZXIgMC43ICAgICAgMUUtNyAgIC0+IDAuOTk5OTk5OTY0MzMyNTA2MiAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxMDMgcG93ZXIgMS4yICAgICAgMUUtNyAgIC0+IDEuMDAwMDAwMDE4MjMyMTU2ICAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxMDQgcG93ZXIgNzEgICAgICAgMUUtNyAgIC0+IDEuMDAwMDAwNDI2MjY4MDc5ICAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxMDUgcG93ZXIgOUUrOSAgICAgMUUtNyAgIC0+IDEuMDAwMDAyMjkyMDUxNjY4ICAgICAgIEluZXhhY3QgUm91bmRlZAorCitwb3d4MjExMCBwb3dlciAxRS03ICAgICAwLjAwMyAgLT4gMC45NTI3OTYxNjQwMjM2NTE5ICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjExMSBwb3dlciAwLjAwMyAgICAwLjAwMyAgLT4gMC45ODI3MjM1NTAzMzY2Nzk3ICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjExMiBwb3dlciAwLjcgICAgICAwLjAwMyAgLT4gMC45OTg5MzA1NDc0NDA2MjA3ICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjExMyBwb3dlciAxLjIgICAgICAwLjAwMyAgLT4gMS4wMDA1NDcxMTQyODI4MzQgICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjExNCBwb3dlciA3MSAgICAgICAwLjAwMyAgLT4gMS4wMTI4NzAxNTYyNzM1NDUgICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjExNSBwb3dlciA5RSs5ICAgICAwLjAwMyAgLT4gMS4wNzExODA2NzEyNzg3ODcgICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3Bvd3gyMTIwIHBvd2VyIDFFLTcgICAgIDAuNyAgICAtPiAwLjAwMDAxMjU4OTI1NDExNzk0MTY3ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMTIxIHBvd2VyIDAuMDAzICAgIDAuNyAgICAtPiAwLjAxNzEzODk3NjMwMjgxMDMwICAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMTIyIHBvd2VyIDAuNyAgICAgIDAuNyAgICAtPiAwLjc3OTA1NTkxMjY3MDQ0OTEgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMTIzIHBvd2VyIDEuMiAgICAgIDAuNyAgICAtPiAxLjEzNjEyNjk3NzE5ODg4OSAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMTI0IHBvd2VyIDcxICAgICAgIDAuNyAgICAtPiAxOS43NjQyNzMwMDA5Mzg3MCAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMTI1IHBvd2VyIDlFKzkgICAgIDAuNyAgICAtPiA5Mjg5MDE2Ljk3Njg1MzcxMCAgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcG93eDIxMzAgcG93ZXIgMUUtNyAgICAgMS4yICAgIC0+IDMuOTgxMDcxNzA1NTM0OTczRS05ICAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxMzEgcG93ZXIgMC4wMDMgICAgMS4yICAgIC0+IDAuMDAwOTM4NzQwMzkzMzU5NTY5NCAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxMzIgcG93ZXIgMC43ICAgICAgMS4yICAgIC0+IDAuNjUxODA0OTQwNTY2Mzg2NCAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxMzMgcG93ZXIgMS4yICAgICAgMS4yICAgIC0+IDEuMjQ0NTY0NzQ3MjAzOTc4ICAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxMzQgcG93ZXIgNzEgICAgICAgMS4yICAgIC0+IDE2Ni41MzY3MjQ0NjM4NTUyICAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxMzUgcG93ZXIgOUUrOSAgICAgMS4yICAgIC0+IDg4MTIzMzUyNjEyNC44NzkxICAgICAgIEluZXhhY3QgUm91bmRlZAorCitwb3d4MjE0MCBwb3dlciAxRS03ICAgICA3MSAgICAgLT4gMEUtMzk4ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwgQ2xhbXBlZAorcG93eDIxNDEgcG93ZXIgMC4wMDMgICAgNzEgICAgIC0+IDcuNTA5NDY2NTE0OTc5NzI1RS0xODAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxNDIgcG93ZXIgMC43ICAgICAgNzEgICAgIC0+IDEuMDA0NTI1MjExMjY5MDc5RS0xMSAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxNDMgcG93ZXIgMS4yICAgICAgNzEgICAgIC0+IDQxODY2Ni43NDgzMTg2NTE1ICAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDIxNDQgcG93ZXIgNzEgICAgICAgNzEgICAgIC0+IDIuNzUwMDYzNzM0ODM0NjE2RSsxMzEgIEluZXhhY3QgUm91bmRlZAorcG93eDIxNDUgcG93ZXIgOUUrOSAgICAgNzEgICAgIC0+IEluZmluaXR5ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZCBPdmVyZmxvdworCitwb3d4MjE1MCBwb3dlciAxRS03ICAgICA5RSs5ICAgLT4gMEUtMzk4ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwgQ2xhbXBlZAorcG93eDIxNTEgcG93ZXIgMC4wMDMgICAgOUUrOSAgIC0+IDBFLTM5OCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsIENsYW1wZWQKK3Bvd3gyMTUyIHBvd2VyIDAuNyAgICAgIDlFKzkgICAtPiAwRS0zOTggICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkCitwb3d4MjE1MyBwb3dlciAxLjIgICAgICA5RSs5ICAgLT4gSW5maW5pdHkgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkIE92ZXJmbG93Citwb3d4MjE1NCBwb3dlciA3MSAgICAgICA5RSs5ICAgLT4gSW5maW5pdHkgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkIE92ZXJmbG93Citwb3d4MjE1NSBwb3dlciA5RSs5ICAgICA5RSs5ICAgLT4gSW5maW5pdHkgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkIE92ZXJmbG93CisKKy0tIG51bWJlciBsaW5lIG1pbGVzdG9uZXMgd2l0aCBsaHM8MSBhbmQgbGhzPjEKKworLS0gT3ZlcmZsb3cgYm91bmRhcnkgKE5tYXgpCitwb3d4MjIwMiBwb3dlciA3MSAgICAgMjA3Ljk2NjY1MTU4Mzk4MzIwMCAtPiBJbmZpbml0eSBJbmV4YWN0IFJvdW5kZWQgT3ZlcmZsb3cKK3Bvd3gyMjAxIHBvd2VyIDcxICAgICAyMDcuOTY2NjUxNTgzOTgzMTk5IC0+IDkuOTk5OTk5OTk5OTk5OTk0RSszODQgSW5leGFjdCBSb3VuZGVkCitwb3d4MjIwNCBwb3dlciAwLjAwMyAtMTUyLjYwMzQ0OTgxNzA5MzU3NyAtPiBJbmZpbml0eSBJbmV4YWN0IFJvdW5kZWQgT3ZlcmZsb3cKK3Bvd3gyMjAzIHBvd2VyIDAuMDAzIC0xNTIuNjAzNDQ5ODE3MDkzNTc2IC0+IDkuOTk5OTk5OTk5OTk5OTk0RSszODQgSW5leGFjdCBSb3VuZGVkCisKKy0tIE5taW4gYm91bmRhcnkKK3Bvd3gyMjExIHBvd2VyIDcxICAgIC0yMDYuODg2MzA1MzQxOTg4NDgwIC0+IDEuMDAwMDAwMDAwMDAwMDA1RS0zODMgSW5leGFjdCBSb3VuZGVkCitwb3d4MjIxMiBwb3dlciA3MSAgICAtMjA2Ljg4NjMwNTM0MTk4ODQ4MSAtPiAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzIEluZXhhY3QgUm91bmRlZAorcG93eDIyMTMgcG93ZXIgNzEgICAgLTIwNi44ODYzMDUzNDE5ODg0ODIgLT4gOS45OTk5OTk5OTk5OTk5N0UtMzg0ICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorcG93eDIyMTQgcG93ZXIgNzEgICAgLTIwNi44ODYzMDUzNDE5ODg0ODMgLT4gOS45OTk5OTk5OTk5OTk5MkUtMzg0ICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOS45OTk5OTk5OTk5OTk5MjQ1NjUzNTcwMTk4MjAKKworcG93eDIyMTUgcG93ZXIgMC4wMDMgIDE1MS44MTA3MDQ2MjMyMzg1NDMgLT4gMS4wMDAwMDAwMDAwMDAwMDlFLTM4MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMjE2IHBvd2VyIDAuMDAzICAxNTEuODEwNzA0NjIzMjM4NTQ0IC0+IDEuMDAwMDAwMDAwMDAwMDAzRS0zODMgSW5leGFjdCBSb3VuZGVkCitwb3d4MjIxNyBwb3dlciAwLjAwMyAgMTUxLjgxMDcwNDYyMzIzODU0NSAtPiA5Ljk5OTk5OTk5OTk5OTk3RS0zODQgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitwb3d4MjIxOCBwb3dlciAwLjAwMyAgMTUxLjgxMDcwNDYyMzIzODU0NiAtPiA5Ljk5OTk5OTk5OTk5OTkxRS0zODQgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCisKKy0tIE50aW55IGJvdW5kYXJ5LCB0aGVzZSBlZGdlIGNhc2VzIGRldGVybWluZWQgdXNpbmcgaGFsZl91cCByb3VuZGluZworcm91bmRpbmc6IGhhbGZfdXAKK3Bvd3gyMjIxIHBvd2VyIDcxICAgIC0yMTUuMTUxNTEwNDY5MjIwNDk4IC0+IDFFLTM5OCAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAorcG93eDIyMjIgcG93ZXIgNzEgICAgLTIxNS4xNTE1MTA0NjkyMjA0OTkgLT4gMUUtMzk4ICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitwb3d4MjIyMyBwb3dlciA3MSAgICAtMjE1LjE1MTUxMDQ2OTIyMDUwMCAtPiAwRS0zOTggICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwgQ2xhbXBlZAorcG93eDIyMjQgcG93ZXIgNzEgICAgLTIxNS4xNTE1MTA0NjkyMjA1MDEgLT4gMEUtMzk4ICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsIENsYW1wZWQKKworcG93eDIyMjUgcG93ZXIgMC4wMDMgIDE1Ny44NzU2MTM2MTgyODU2OTEgLT4gMUUtMzk4ICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsCitwb3d4MjIyNiBwb3dlciAwLjAwMyAgMTU3Ljg3NTYxMzYxODI4NTY5MiAtPiAxRS0zOTggICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK3Bvd3gyMjI3IHBvd2VyIDAuMDAzICAxNTcuODc1NjEzNjE4Mjg1NjkzIC0+IDBFLTM5OCAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkCitwb3d4MjIyOCBwb3dlciAwLjAwMyAgMjIwICAgICAgICAgICAgICAgICAtPiAwRS0zOTggICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwgQ2xhbXBlZAorcm91bmRpbmc6IGhhbGZfZXZlbgorCistLSBwb3dlcigxMCwgeSkgYXJlIGltcG9ydGFudCAuLi4KKworLS0gSW50ZWdlciBwb3dlcnMgYXJlIGV4YWN0LCB1bmxlc3Mgb3Zlci91bmRlcmZsb3cKK3Bvd3gyMzAxIHBvd2VyIDEwICAgICAzODUgICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcG93eDIzMDIgcG93ZXIgMTAgICAgIDM4NCAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBSb3VuZGVkCitwb3d4MjMwMyBwb3dlciAxMCAgICAgIDE3ICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgUm91bmRlZAorcG93eDIzMDQgcG93ZXIgMTAgICAgICAxNiAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE2IFJvdW5kZWQKK3Bvd3gyMzA1IHBvd2VyIDEwICAgICAgMTUgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAKK3Bvd3gyMzA2IHBvd2VyIDEwICAgICAgMTAgICAgIC0+IDEwMDAwMDAwMDAwCitwb3d4MjMwNyBwb3dlciAxMCAgICAgICA1ICAgICAtPiAxMDAwMDAKK3Bvd3gyMzA4IHBvd2VyIDEwICAgICAgIDEgICAgIC0+IDEwCitwb3d4MjMwOSBwb3dlciAxMCAgICAgICAwICAgICAtPiAxCitwb3d4MjMxMCBwb3dlciAxMCAgICAgIC0xICAgICAtPiAwLjEKK3Bvd3gyMzExIHBvd2VyIDEwICAgICAgLTUgICAgIC0+IDAuMDAwMDEKK3Bvd3gyMzEyIHBvd2VyIDEwICAgICAgLTYgICAgIC0+IDAuMDAwMDAxCitwb3d4MjMxMyBwb3dlciAxMCAgICAgIC03ICAgICAtPiAxRS03Citwb3d4MjMxNCBwb3dlciAxMCAgICAgIC04ICAgICAtPiAxRS04Citwb3d4MjMxNSBwb3dlciAxMCAgICAgIC05ICAgICAtPiAxRS05Citwb3d4MjMxNiBwb3dlciAxMCAgICAgLTEwICAgICAtPiAxRS0xMAorcG93eDIzMTcgcG93ZXIgMTAgICAgLTM4MyAgICAgLT4gMUUtMzgzCitwb3d4MjMxOCBwb3dlciAxMCAgICAtMzg0ICAgICAtPiAxRS0zODQgU3Vibm9ybWFsCitwb3d4MjMxOSBwb3dlciAxMCAgICAtMzg1ICAgICAtPiAxRS0zODUgU3Vibm9ybWFsCitwb3d4MjMyMCBwb3dlciAxMCAgICAtMzk3ICAgICAtPiAxRS0zOTcgU3Vibm9ybWFsCitwb3d4MjMyMSBwb3dlciAxMCAgICAtMzk4ICAgICAtPiAxRS0zOTggU3Vibm9ybWFsCitwb3d4MjMyMiBwb3dlciAxMCAgICAtMzk5ICAgICAtPiAwRS0zOTggU3Vibm9ybWFsIFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcG93eDIzMjMgcG93ZXIgMTAgICAgLTQwMCAgICAgLT4gMEUtMzk4IFN1Ym5vcm1hbCBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworLS0gSW5kZXBlbmRlbnQgc2FuaXR5IGNoZWNrOiAxOTYxIEdvZGZyZXkgJiBTaWRkb25zIGZvdXItZmlndXJlIGxvZ3MKK3Bvd3gyMzUxIHBvd2VyIDEwICAgMC4wMDAwICAgIC0+IDEKK3Bvd3gyMzUyIHBvd2VyIDEwICAgMC4zMDEwICAgIC0+IDEuOTk5ODYxODY5NjMyNzQ0IEluZXhhY3QgUm91bmRlZAorcG93eDIzNTMgcG93ZXIgMTAgICAwLjQ3NzEgICAgLT4gMi45OTk4NTMxODExOTA3OTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MjM1NCBwb3dlciAxMCAgIDAuNjAyMSAgICAtPiA0LjAwMDM2ODUxMDQ2MTI1MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMzU1IHBvd2VyIDEwICAgMC42OTkwICAgIC0+IDUuMDAwMzQ1MzQ5NzY5Nzg1IEluZXhhY3QgUm91bmRlZAorcG93eDIzNTYgcG93ZXIgMTAgICAwLjc3ODIgICAgLT4gNi4wMDA2NzM1Mzg2NDExNjQgSW5leGFjdCBSb3VuZGVkCitwb3d4MjM1NyBwb3dlciAxMCAgIDAuODQ1MSAgICAtPiA3LjAwMDAzMTU5MTMwODk2OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMzU4IHBvd2VyIDEwICAgMC45MDMxICAgIC0+IDguMDAwMTg0NDQ4NTUwOTkwIEluZXhhY3QgUm91bmRlZAorcG93eDIzNTkgcG93ZXIgMTAgICAwLjk1NDIgICAgLT4gOC45OTkxMTkxMDg3MDA1MjAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjM2MCBwb3dlciAxMCAgIDAuOTk1NiAgICAtPiA5Ljg5OTE5Nzc1MDgwNTg0MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMzYxIHBvd2VyIDEwICAgMC45OTk2ICAgIC0+IDkuOTkwNzkzODk5ODQ0NjE4IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0Citwb3d4MjM3MSBwb3dlciAxMCAgIDAuMDAwMCAgICAtPiAxCitwb3d4MjM3MiBwb3dlciAxMCAgIDAuMzAxMCAgICAtPiAyLjAwMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMzczIHBvd2VyIDEwICAgMC40NzcxICAgIC0+IDMuMDAwIEluZXhhY3QgUm91bmRlZAorcG93eDIzNzQgcG93ZXIgMTAgICAwLjYwMjEgICAgLT4gNC4wMDAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjM3NSBwb3dlciAxMCAgIDAuNjk5MCAgICAtPiA1LjAwMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMzc2IHBvd2VyIDEwICAgMC43NzgyICAgIC0+IDYuMDAxIEluZXhhY3QgUm91bmRlZAorcG93eDIzNzcgcG93ZXIgMTAgICAwLjg0NTEgICAgLT4gNy4wMDAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjM3OCBwb3dlciAxMCAgIDAuOTAzMSAgICAtPiA4LjAwMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyMzc5IHBvd2VyIDEwICAgMC45NTQyICAgIC0+IDguOTk5IEluZXhhY3QgUm91bmRlZAorcG93eDIzODAgcG93ZXIgMTAgICAwLjk5NTYgICAgLT4gOS44OTkgSW5leGFjdCBSb3VuZGVkCitwb3d4MjM4MSBwb3dlciAxMCAgIDAuOTk5NiAgICAtPiA5Ljk5MSBJbmV4YWN0IFJvdW5kZWQKKworLS0gMTAqKnggfj0yIChpbnZlcnNlIG9mIHRoZSB0ZXN0IGluIGxvZzEwLmRlY1Rlc3QpCitwcmVjaXNpb246IDUwCitwb3d4MjQwMSBwb3dlciAxMCAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2MjExIC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDkKK3Bvd3gyNDAyIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyMSAtPiAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDgKK3Bvd3gyNDAzIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyIC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQ3Citwb3d4MjQwNCBwb3dlciAxMCAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDYKK3Bvd3gyNDA1IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNSAtPiAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDUKK3Bvd3gyNDA2IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxIC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQ0Citwb3d4MjQwNyBwb3dlciAxMCAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDMKK3Bvd3gyNDA4IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5OSAtPiAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDIKK3Bvd3gyNDA5IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTkwIC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQxCitwb3d4MjQxMCBwb3dlciAxMCAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE5IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNDAKK3Bvd3gyNDExIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MiAtPiAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzkKK3Bvd3gyNDEyIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM4Citwb3d4MjQxMyBwb3dlciAxMCAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc3IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzcKK3Bvd3gyNDE0IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2OCAtPiAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzYKK3Bvd3gyNDE1IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI3IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDM1Citwb3d4MjQxNiBwb3dlciAxMCAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAzIC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzQKK3Bvd3gyNDE3IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMCAtPiAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzMKK3Bvd3gyNDE4IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzIC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMyCitwb3d4MjQxOSBwb3dlciAxMCAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzEKK3Bvd3gyNDIwIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NSAtPiAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMzAKK3Bvd3gyNDIxIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI1IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI5Citwb3d4MjQyMiBwb3dlciAxMCAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyIC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjgKK3Bvd3gyNDIzIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NyAtPiAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjcKK3Bvd3gyNDI0IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk1IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDI2Citwb3d4MjQyNSBwb3dlciAxMCAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjUKK3Bvd3gyNDI2IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4OSAtPiAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjQKK3Bvd3gyNDI3IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM5IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIzCitwb3d4MjQyOCBwb3dlciAxMCAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzc0IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjIKK3Bvd3gyNDI5IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNyAtPiAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMjEKK3Bvd3gyNDMwIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MjE0IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIwCitwb3d4MjQzMSBwb3dlciAxMCAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxIC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTkKK3Bvd3gyNDMyIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1MiAtPiAyLjAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTgKK3Bvd3gyNDMzIHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMTk1IC0+IDIuMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE3Citwb3d4MjQzNCBwb3dlciAxMCAwLjMwMTAyOTk5NTY2Mzk4MTIwIC0+IDIuMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTYKK3Bvd3gyNDM1IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxMiAtPiAyLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTUKK3Bvd3gyNDM2IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjYzOTgxIC0+IDIuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE0Citwb3d4MjQzNyBwb3dlciAxMCAwLjMwMTAyOTk5NTY2Mzk4IC0+IDIuMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTMKK3Bvd3gyNDM4IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjY0MCAtPiAyLjAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTIKK3Bvd3gyNDM5IHBvd2VyIDEwIDAuMzAxMDI5OTk1NjY0IC0+IDIuMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDExCitwb3d4MjQ0MCBwb3dlciAxMCAwLjMwMTAyOTk5NTY2IC0+IDIuMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTAKK3Bvd3gyNDQxIHBvd2VyIDEwIDAuMzAxMDI5OTk1NyAtPiAyLjAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDkKK3Bvd3gyNDQyIHBvd2VyIDEwIDAuMzAxMDI5OTk2IC0+IDIuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA4Citwb3d4MjQ0MyBwb3dlciAxMCAwLjMwMTAzMDAwIC0+IDIuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDcKK3Bvd3gyNDQ0IHBvd2VyIDEwIDAuMzAxMDMwMCAtPiAyLjAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDYKK3Bvd3gyNDQ1IHBvd2VyIDEwIDAuMzAxMDMwIC0+IDIuMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICA1Citwb3d4MjQ0NiBwb3dlciAxMCAwLjMwMTAzIC0+IDIuMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDQKK3Bvd3gyNDQ3IHBvd2VyIDEwIDAuMzAxMCAtPiAyLjAwMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDMKK3Bvd3gyNDQ4IHBvd2VyIDEwIDAuMzAxIC0+IDIuMDAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246ICAyCitwb3d4MjQ0OSBwb3dlciAxMCAwLjMwIC0+IDIuMCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogIDEKK3Bvd3gyNDUwIHBvd2VyIDEwIDAuMyAtPiAyIEluZXhhY3QgUm91bmRlZAorCittYXhFeHBvbmVudDogMzg0CittaW5FeHBvbmVudDogLTM4MworcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl9ldmVuCisKKy0tIENsb3NlLXRvLWUgdGVzdHMKK3ByZWNpc2lvbjogICAzNAorcG93eDI1MDAgcG93ZXIgMTAgMC40MzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDQ4ICAgICAtPiAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjUwMSBwb3dlciAxMCAwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNDkgICAgIC0+IDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYxICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyNTAyIHBvd2VyIDEwIDAuNDM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MCAgICAgLT4gMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjIgIEluZXhhY3QgUm91bmRlZAorcG93eDI1MDMgcG93ZXIgMTAgMC40MzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUxICAgICAtPiAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MyAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjUwNCBwb3dlciAxMCAwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTIgICAgIC0+IDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYzICBJbmV4YWN0IFJvdW5kZWQKKworLS0gZSoqZSwgMTYtPjM0Citwb3d4MjUwNSBwb3dlciAyLjcxODI4MTgyODQ1OTA0NSAyLjcxODI4MTgyODQ1OTA0NSAtPiAnMTUuMTU0MjYyMjQxNDc5MjU3MDU2MzM3Mzk1MTMwOTgyMTknIEluZXhhY3QgUm91bmRlZAorCistLSBTZXF1ZW5jZSBhcm91bmQgYW4gaW50ZWdlcgorcG93eDI1MTIgcG93ZXIgMTAgMi45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ICAgICAtPiA5OTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MyAgSW5leGFjdCBSb3VuZGVkCitwb3d4MjUxMyBwb3dlciAxMCAyLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggICAgIC0+IDk5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyNTE0IHBvd2VyIDEwIDIuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgLT4gOTk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggIEluZXhhY3QgUm91bmRlZAorcG93eDI1MTUgcG93ZXIgMTAgMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAtPiAxMDAwCitwb3d4MjUxNiBwb3dlciAxMCAzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgIC0+IDEwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gyNTE3IHBvd2VyIDEwIDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgICAgLT4gMTAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZAorcG93eDI1MTggcG93ZXIgMTAgMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAgICAtPiAxMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgSW5leGFjdCBSb3VuZGVkCisKKy0tIHJhbmRvbWx5IGdlbmVyYXRlZCB0ZXN0cworbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKKworLS0gUD0zNCwgd2l0aGluIDAtOTk5IC0tIHBvc2l0aXZlIGFyZzIKK1ByZWNpc2lvbjogMzQKK3Bvd3gzMjAxIHBvd2VyIDUuMzAxNTU3NzQ0MTMxOTY5MjQ5MTQ1OTA0NjExMjkwNzM1ICAzNjkuMzE3NTY0Nzk4NDQzNTUzNDI0MzgxMzQ2NjM4MDU3OSAtPiAzLjQyNzE2NTY3NjM0NTY4ODI0MDAyMzExMzMyNjYwMzk2MEUrMjY3IEluZXhhY3QgUm91bmRlZAorcG93eDMyMDIgcG93ZXIgMC4wMDAwMDAwMDAwNTA2ODc1NjU1ODE5MTY1OTczNzM4MjI1IDIxLjkzNTE0MTAyNzA0NDY2NDM0MTIxODI2OTY1MTk2ODc4IC0+IDEuNDk4MTY5ODYwMDMzNDg3MzIxNTY2NjU5NDk1MzQwNzg5RS0yMjYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIwMyBwb3dlciA5Ny44ODg3NzY4MDcyMTUxOTkxNzg1ODAwNzgxMDQ5NDA0MyAgNS4xNTk4OTg0NDUyNDI3OTM0NzA0NzY2NzMxMDk4OTk1NTQgLT4gMTg3MDU5NDI5MDQuNDMyOTA0NjcyODE0NDk1NTk0Mjc5ODIgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjA0IHBvd2VyIDcuMzgwNDQxMDE1NTk0Mzk5NzQ3OTczOTI0MzgwNDkzNzk5ICAxNy45MzYxNDE3MzkwNDgxODMxMzUwNzUyNTEwOTAzMzI4OCAtPiAzNzE1NzU3OTg1ODIwMDc2LjI3MzMzNjA4MjcwMjU3NzI3NCAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDMyMDUgcG93ZXIgMi4wNDU2MjM2Mjc2NDczNTA5MTg4MTkyMTkxNjk4NTUwNDAgIDEwODIuOTk5NjUyNDA3NDMwNjk3OTU4MTc1OTY2OTk2MjU0IC0+IDQuMjA4ODA2NDM1MDA2NzA0ODY3NDQ3MTUwOTA0Mjc5ODU0RSszMzYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIwNiBwb3dlciAwLjAwMDAwMDA3NjI1ODI4NzMxMTIxMTg5MjYxNDI5NTU0MjMgMjAuMzA1MzQyMzcwNTUwNzM5OTY5NzUyMDM4NjQxNzA0MzIgLT4gMi45Njc1NzQyNzg2NzcwMTMwOTA2OTcxMzAzNDkxOTg4NzdFLTE0NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjA3IHBvd2VyIDAuMDAwMDAwMDAwMDE5NDA5MTQ3MDkwNzgxNDg1NTY2MDUzNSAxNC43MTE2NDIxMzk0NzcyMjIzODg1NjgzNTQ0MDI0MjkxMSAtPiAyLjU2NDM5MTM5NzQ2OTU1NDczNTAzNzE1ODM0NTk2MzI4MEUtMTU4IEluZXhhY3QgUm91bmRlZAorcG93eDMyMDggcG93ZXIgMC4wMDAwMDAwMDAwNTA5NDM0MTg1MzgyODE4NTk2ODUzNTA0IDIwLjk3MDUxNDk4MjA0MTg4Mjc3MzQ3MjAzNzM1NDIxNTk1IC0+IDEuNDIwMTU3MzcyNzQ4MDgzMDAwOTI3MTM4Njc4NDE3MjcyRS0yMTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIwOSBwb3dlciAwLjAwMDUzODkyMTcyMTIwNzMzMDczMDEzOTU3NTA3NDUxMTkgNDMuOTY3OTgyMjU0ODU3NDczMTU4NTg2Nzg3NTU1Mzg5NzEgLT4gMS45NTc4NTAxODU3ODEyOTIwMDc5Nzc4OTg2MjYxMzcyNDBFLTE0NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjEwIHBvd2VyIDQ5OC41NjkwMTA1OTg5MTM2MDUwNDQ0MDc3NDQ3NDExMTk4ICAxMjguMTAzODgxMzgwNzI0MzM3NTg3ODgzMTEwNDc0NTgwMyAtPiAzLjg4MjIxMjk3MDkwMzg5MzEyNzAwOTEwMjI5MzU5NjI2OEUrMzQ1IEluZXhhY3QgUm91bmRlZAorcG93eDMyMTEgcG93ZXIgMC4wMDAwMDAwOTM1NDI4OTE4NjM3MzAzOTU0MjgxOTM4OTc1IDUuNzM2OTMzNDU0ODYzMjc4NTk3NDYwMDkxNTk2NDk2MDk5IC0+IDQuNzMzMjE5NjQ0NTQwNDk2MTUyNDAzOTY3ODIzNjM1MTk1RS00MSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIxMiBwb3dlciA4LjU4MTU4Njc4NDczNDE2MTMwOTE4MDM2MzExMDEyNjM1MiAgMjUyLjAyMjk0NTk5Njg4Njk3ODQ2NDMzNzQ5ODE0NzcyMDggLT4gMS45MDc0NjQ4NDI0NTg2NzQ2MjIzNTYxNzc4NTAwNDk4NzNFKzIzNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjEzIHBvd2VyIDI5NC4xMDA1MzAyOTUxNjIxNzA5MTQzMzIwNzk1Mjc4MzA1ICAxNTUuNTQ2NjM3NDE0MTcwODYxNTk3NTExMTAxNDY2MzcyMiAtPiA5LjI1MTcxNzAzMzI5MjA3Mjk1OTE2NjczNzI4MDcyOTcyOEUrMzgzIEluZXhhY3QgUm91bmRlZAorcG93eDMyMTQgcG93ZXIgMC4wMDAwMDAwMDQxMjUzMzQzNjU0Mzk2ODY1ODU1NzIyMDkwIDE5LjAwMTcwOTc0NzYwNDI1NTc2MjQ3NjYyMTI1MTEwNDcyIC0+IDQuNzc5NTY2Mjg4NTUzODY0NDA1NzkwOTIxMzUzNTkzNTEyRS0xNjAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIxNSBwb3dlciAwLjAwMDAwMDAwMDAwNDY5MTIyNTczNTIxNDEzOTUxODQwOTIgMjQuNjYwODk1MjMxNDg3MjkyNjkwOTg3NzMyMzY2MzY4NzggLT4gNC4yMDUxMjY4NzQwNDg1OTc4NDk0NzY3MjM1MzgwNTc1MjdFLTI4MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjE2IHBvd2VyIDAuMDAwMDAwMDAwMDAzNjc5NjY3NDI5NjUyMDYzOTQ1MDQ5NCAyMi4wOTcxMzk1NjkwMDY5NDY4OTIzNDMzNTkxMjUyMzA3OCAtPiAyLjE3MzA4MTg0MzgzNzUzOTgxODQ3MjA3MTMxNjQyMDQwNUUtMjUzIEluZXhhY3QgUm91bmRlZAorcG93eDMyMTcgcG93ZXIgOS42NTk4ODcxMDAzMDMwMzc2NTc5MzQzNzIxNDg1Njc2ODUgIDI3Ny4zNzY1NjY1NDI0MzIwODc1OTkzMDI2NDA0NDkyMjE2IC0+IDEuNjE0OTc0MDQzMTQ1NTE5MzgyNzQ5NzQwNjE2NjY1MDQxRSsyNzMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIxOCBwb3dlciAwLjAwMDAwODMyMzEzMTA2NDIyMjkyMDQzOTg5NDMwNzY0MDMgMjkuMzMxMjMyMTE3ODIxMzE0NjY0NzEzNTkxMjgxOTAzNzIgLT4gMS4wMTMzMzA0Mzk3ODY2NjAyMTA3NTcyMjY1OTc3ODUzMjhFLTE0OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjE5IHBvd2VyIDAuMDkzODA4NDg1OTA4NjQ1MDk1NDk1Njg2MzcyNTY1MzY2NCAyNjIuNjA5MTkxODE5OTkwNTI3MjgzNzI4Njc4NDk3NTAxMiAtPiAxLjI2MjgwMjQ4NTI4NjMwMTA2Njk2NzU1NTgyMTUwOTM0NEUtMjcwIEluZXhhY3QgUm91bmRlZAorcG93eDMyMjAgcG93ZXIgOC4xOTQ5MjY5Nzc1ODA5MDAxNDU2OTYzMDU5MTAyMjMzMDQgIDE4NC4zNzA1MTMzOTQ1NTQ2MjAyMDEyOTk1NDg1Mjk3MjQ4IC0+IDIuNjk2MzUzOTEwOTA3ODI0MDE2NjkwMDIxNDk1ODI4NTg0RSsxNjggSW5leGFjdCBSb3VuZGVkCitwb3d4MzIyMSBwb3dlciA3Mi4zOTU5NDU5NDY1MzA4NTE2MTUyMjI4NTExNDU2NjEyMCAgMTY4Ljc3MjE5MDk0ODkzMjE0MDIxNTIwMzM5Mzk4MzY3MjUgLT4gNy4zNzk4NTgyOTM2MzA0NjAwNDMzNjE1ODQ0MTA3OTUwMzFFKzMxMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjIyIHBvd2VyIDAuMDAwMDAwMDAwMDAwMzQzNjg1NjAxMDE0NDE4NTQ0NTUzNyAyNi4zNDMyOTg2ODk2MTI3NDk4ODk5NDQ1MjUyNjE3ODk4MyAtPiA0LjU4NTM3OTU3MzU5NTg2NTY4OTYwNTU2NzcyMDE5Mjc2OEUtMzI5IEluZXhhY3QgUm91bmRlZAorcG93eDMyMjMgcG93ZXIgMjAuMTgzNjU2MzM3NjIyMjY1NTAyNTQ1NDI0ODk0OTI2MjMgIDEyNy4yMDk5NzA1MjM3MDIxMzUwMTAzNjc4MDcyNzA3NzkwIC0+IDEuMDIwOTE5NjI5MzM2OTc5MzUzNjkwMjcxNzYyMjA2MDYwRSsxNjYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIyNCBwb3dlciAwLjAwMDAwMDA1NTM3MjM5OTA3NjE1MzAyOTAxMjkyNjgxMzEgOC4xNTc1OTc1NjYxMzQ3NTQ2MzgwMTUxOTk1MDExNjI0MDUgLT4gNi4zNDkwMzA1MTMzOTYxNDc0ODA5NTQ0NzQ2MTUwNjcxNDVFLTYwICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjI1IHBvd2VyIDAuMDAwMTAyODc0MjY3NDI2NTg0MDY1NjYxNDY4MjYxODAzNSA5My45OTg0MjMxNzMwNjYwMzc5Nzk2NTQ3MDI4MTcxNjQ4MiAtPiAxLjQ1NTg3MTExMDIyMjczNjUzMTg1NDk5MDM5Nzc2OTk0MEUtMzc1IEluZXhhY3QgUm91bmRlZAorcG93eDMyMjYgcG93ZXIgOTUuOTAxOTUxNTI3NzU1NDM4NzY0ODk3NDYzNDMyNjYwNTAgIDE0My41OTkyODUwMDAyMjExNTA5Nzc3NzIwNzk5MzUyNDc1IC0+IDMuODgxNTQwMDE1ODQ4NTMwNDA1MTg5ODM0MzY2NTg4NTY3RSsyODQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIyNyBwb3dlciAwLjAwMDAwMDAwMDAwNDE3ODM3NDcwNTcyMzM4NzgzNjAzMzMgMTIuMTQ1OTExNjc3NjQ5OTM1MDY4MjEzMzQ3NjA5NTQ0MzAgLT4gNi4xOTA5OTg1NTc0NTY4ODU5ODUxMjQ1OTI4MDczODMxNjNFLTEzOSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjI4IHBvd2VyIDAuNTU3MjgzMDQ5NzA4Njc0MDc5ODQzNDkxNzA5MDAxODc2OCAxMDAxLjkyMTgxMTI2MzkxOTUyMjIzMDMzMDI0MTM0OTE2NiAtPiAzLjg3MTE0NTE1ODUzNzE3MDQ1MDA5MzgzMzg4MTYyNTgzOEUtMjU1IEluZXhhY3QgUm91bmRlZAorcG93eDMyMjkgcG93ZXIgNTE2LjQ3NTQ3NTk3NzkwOTM5NTQ3OTA4MTM4ODEzMzMyMzIgIDI5LjIzODEyNDYzMTI2MzA5MDU3ODAwNzkzNjQ1MzM2MzQzIC0+IDIuMTEwOTg2MTkyNDA4ODc4Mjk0MDEyNDUwMDUyOTI5MTg1RSs3OSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIzMCBwb3dlciAwLjAwMDA4MzU4OTIwOTk0NjQ1ODQ3NzY4NDcyOTkwMjA3MDYgMjcuNjQyNzk5OTI4ODQ4NDM4Nzc0NTM1OTI2NTkzNDE1ODggLT4gMS44OTE1MzUwOTg5MDU1MDY2ODk1MTIzNzYyMjQ5NDMyOTNFLTExMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjMxIHBvd2VyIDcyLjQ1ODM2NTc3NzQ4NTcxODM4MTM5OTAwMTY1MTg0OTU1ICAxNjYuMjU2Mjg5MDczNTAzMjU0NTA5MTY4ODAxNTE2MDA4NCAtPiAxLjc4NDA5MTU0OTA0MTU2MTUxNjkyMzA5MjU0MjkzOTE0MUUrMzA5IEluZXhhY3QgUm91bmRlZAorcG93eDMyMzIgcG93ZXIgMzA1LjE4MjMzMTc2NDMzMzU5MjQwMDc2Mjk1NjMwMDkwMzIgIDgzLjAxMDY1MTU5NTA4NDcyODg0MjE5MjkwMTM2MzE5NjIzIC0+IDEuNzU3NDkzMTM2MTY0Mzk1MjI5NjAyNDU2NzgyNzc5MTEwRSsyMDYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIzMyBwb3dlciA3LjEwODUyNzEwMjk1MTcxMzYwMzU0MjgzNTc5MTczMzc4NiAgMTQ1LjcwNTc4NTI3NjYyMzYzNjU0NTA0NjM0Mjg4MjE5NDggLT4gMS4yODU5MzQ3NzQxMTMxMDQzNjI2NjM2MTk4OTY1NTA1MjhFKzEyNCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjM0IHBvd2VyIDYuNDcxMzkzNTAzMTc1NDY0ODI4MTQ5MzY1Njk3MDQ5ODI0ICA2NC4xMTc0MTkzNzI2MjQ1NTcyNTI4NDc1NDE3MTk5NTcyMCAtPiA5Ljk3ODk5MDM1NTg4MTgwMzE5NTI4MDAyNzUzMzAxMTY5OUUrNTEgIEluZXhhY3QgUm91bmRlZAorcG93eDMyMzUgcG93ZXIgMzkuNzI4OTgwOTQxMzg0NTk4ODU2NjIzODA4NjYyNjgzODUgIDIzOS45Njc3Mjg4MDE3NDQ3NDAwNzg2NjcyNzc5NzM1MTY4IC0+IDUuNDIyMjE4MjA4NTE3MDk4MzM1ODMyODQ4NDg3Mzc1MDg2RSszODMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIzNiBwb3dlciAwLjAwMDI4NjU1OTIzMzI3MzY5NzMwMDAxODMyODczMjk5MzMgOTAuMzQ3MzM4Njk1OTA1ODM3ODcwNjU2NDI1MzI2NDEwOTYgLT4gOC4yOTM3MzMxMjY5NzYyMTIwMzMyMDkyNDMyNTcxMzY3OTZFLTMyMSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjM3IHBvd2VyIDAuMDAwMDAxMTM0MzM4NDM5NDg2NDgxMTE5NTA3NzM1NzkzNiAxLjkyNjU2ODI4NTUyODM5OTY1Njc4OTE0MDgwOTM5OTM5NiAtPiAzLjUxNjA1NTYzOTM3ODM1MDE0Njg3NDI2MTA3NzQ3MDE0MkUtMTIgIEluZXhhY3QgUm91bmRlZAorcG93eDMyMzggcG93ZXIgMC4wMDAwMDAwMDM1MzIxNjEwMjk1MDY1Mjk5Mzg0ODg5MjI0IDcuNTgzODYxNzc4ODI0Mjg0MDkyNDM0MDg1MjY1MjY1NTgyIC0+IDcuOTcwODk5ODIzODE3MzY5NzY0MzgxOTc2Mjg2NTM2MjMwRS02NSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIzOSBwb3dlciA2NTcuNTAyODMwMTU2OTM1MjY3NzU0Mzc3MDc1ODM0NjY4MyAgOTAuNTU3Nzg0NTM4MTE5NjUxMTYyMDAyMDYwMjAxNzI3NTggLT4gMS41MjI1MzA4OTg1ODE1NjQyMDA2NTUxNjA2NjU3MjMyNjhFKzI1NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjQwIHBvd2VyIDguNDg0NzU2Mzk4MzI1NzQ4ODc5NDUwNTc3NTIwMjUxNDQ3ICAzODkuNzQ2ODI5MjQ3NjI2MjQ3ODU3ODI4MDUzMTIyMjQxNyAtPiA4LjU5NTE0MjgwMzU4NzM2ODA5MzM5MjUxMDMxMDgxMTIxOEUrMzYxIEluZXhhY3QgUm91bmRlZAorCistLSBQPTE2LCB3aXRoaW4gMC05OSAtLSBwb3NpdGl2ZSBhcmcyCitQcmVjaXNpb246IDE2Citwb3d4MzEwMSBwb3dlciAwLjAwMDAyMTU1MjQ2MzkyMjMgNDguMzc1MzI1MjIzNTUyNTIgLT4gMS44MDQ2NjMyNTcyODcyNzdFLTIyNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTAyIHBvd2VyIDAwLjgwNzA1ODU2MjI3OTk5ICAyNzA2Ljc3NzUzNTEyMTM5MSAtPiAxLjAyOTYyNTA2NTg3NjE1N0UtMjUyIEluZXhhY3QgUm91bmRlZAorcG93eDMxMDMgcG93ZXIgMy40NDU0NDE2NzYzODM2ODkgIDQyOC41MTg1ODkyNDU1ODMwIC0+IDEuNjU3NDAxNjgzMDk2NDU0RSsyMzAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEwNCBwb3dlciAwLjAwNDAxNTg2ODk0OTU4MjYgMTU5LjU3MjU1NTg4MTYyNDAgLT4gNC4yNTU3NDM2NjU3NjI0OTJFLTM4MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTA1IHBvd2VyIDAuMDAwMDg0MTU1MzI4MTIxNSAzOC4zMjUwNDQxMzQ1Mzk0NCAtPiA2LjczODY1MzkwMjUxMjA1MkUtMTU3IEluZXhhY3QgUm91bmRlZAorcG93eDMxMDYgcG93ZXIgMC43MzIyNjEwMjUyNTcxMzUzIDUwMi4xMjU0NDU3Njc0MTE4IC0+IDEuMTA5OTc4MTI2OTg1OTQzRS02OCAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEwNyBwb3dlciAxMC43NTA1MjUzMjE0NDg4MCAgNjcuMzQxODA2MDQ3MzQ3ODEgLT4gMi44NzMwMTUwMTk0NzAxODlFKzY5ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTA4IHBvd2VyIDI2LjIwNDI1OTUyOTQ1NjE3ICAxMDQuNjAwMjY3MTE4NjQ4OCAtPiAyLjMwMTg1OTM1NTc3NzAzMEUrMTQ4IEluZXhhY3QgUm91bmRlZAorcG93eDMxMDkgcG93ZXIgMC4wMDAwMDU1NzM3NDczODUwIDMxLjE2Mjg1ODU5MDA1NDI0IC0+IDEuODgzMzQ4NDcwMTAwNDQ2RS0xNjQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzExMCBwb3dlciA2MS4wNjA5NjAxMTM2MDcwMCAgMTAuOTM2MDg0MzkwODg3MjYgLT4gMy4zODI2ODY0NzMwMjgyNDlFKzE5ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTExIHBvd2VyIDkuMzQwODgwODUzMjU3MTM3ICAxNzkuOTA5NDkzODEzMTcyNiAtPiAzLjgxOTI5OTc5NTkzNzY5NkUrMTc0IEluZXhhY3QgUm91bmRlZAorcG93eDMxMTIgcG93ZXIgMC4wMDAwMDUwNzY3MzcxNzU2IDcyLjAzMzQ2Mzk0MTg2NzQxIC0+IDQuMjE2MjM2NjkxNTY5ODY5RS0zODIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzExMyBwb3dlciA2LjgzODQ3ODgwNzg2MDU5NiAgNDcuNDk2NjU1OTA2MDIyODUgLT4gNC41NDc2MjE2MzAwOTkyMDNFKzM5ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTE0IHBvd2VyIDAuMTI5OTMyNDM0NjQzOTA4MSAzOTcuNzQ0MDUyMzU3NjkzOCAtPiAzLjA2NTA0NzcwNTU1Mzk4MUUtMzUzIEluZXhhY3QgUm91bmRlZAorcG93eDMxMTUgcG93ZXIgMC4wMDAzNDE4MDQ3MDM0MjY0IDIwLjAwNTE2NzkxNTEyMDE4IC0+IDQuNTQ2MTg5NjY1MzgwNDg3RS03MCAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzExNiBwb3dlciAwLjAwMDEyNzY4OTk2MTE3MTUgNzguMTI5NjgyODczNTU3MDMgLT4gNS45NjAyMTc0MDUwNjM5OTVFLTMwNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTE3IHBvd2VyIDI1LjkzMTYwNTg4MTgwNTA5ICAyNTIuNjI0NTA3MTAwNDYyMCAtPiAxLjQ3MjE3MTU5NzU4OTE0NkUrMzU3IEluZXhhY3QgUm91bmRlZAorcG93eDMxMTggcG93ZXIgMzUuNDc1MTY4NTc3NjMxNzggIDg2LjE0NzIzMDM3MzYwOTI1IC0+IDMuMzI0Mjk5OTA4NDgxMTI1RSsxMzMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzExOSBwb3dlciAwLjAwMDAwNDgxNzEwODY3MjEgNDMuMzE5NjU2MDMwMzg2NjYgLT4gNC41NzIzMzE1MTY2MTYyMjhFLTIzMSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTIwIHBvd2VyIDE3Ljk3NjUyNjgxMDk3ODUxICAxNDQuNDY4NDU3NjU1MDI5MiAtPiAxLjg0MjUwOTkwNjA5Nzg2MEUrMTgxIEluZXhhY3QgUm91bmRlZAorcG93eDMxMjEgcG93ZXIgMy42MjI3NjUxNDE1MTg3MjkgIDMwNS4xOTQ4NjgwMzQ0OTUwIC0+IDQuMTMyMzIwOTY3NTc4NzA0RSsxNzAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEyMiBwb3dlciAwLjAwODA5NTkwMDI0NTM1MTkgMTQzLjk4OTk0NDQ5NDU2MjcgLT4gNi40NzQ2Mjc4MTI5NDcwNDdFLTMwMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTIzIHBvd2VyIDkuODQxNjk5OTI3Mjc2NTcxICAyOTkuMjQ2NjY2ODgzNzE4OCAtPiAxLjQ4OTA5NzY1NjIwODczNkUrMjk3IEluZXhhY3QgUm91bmRlZAorcG93eDMxMjQgcG93ZXIgMC4wNzg2NjU5MjA2MjMyMzU1IDM0Ny40NzUwNzk2OTYyNTcwIC0+IDIuMDU3NjQ4MDk2NDY5MjVFLTM4NCAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK3Bvd3gzMTI1IHBvd2VyIDAuMDAwMDA4NDQ1OTc5MjY0NSA1Mi40NzM0ODY5MDc0NTQ4NyAtPiA2LjA3NjI1MTg3NjUxNjk0MkUtMjY3IEluZXhhY3QgUm91bmRlZAorcG93eDMxMjYgcG93ZXIgMjcuODY1ODk5MDk5Njc1MDQgIDE5MS43Mjk2NTM3MTAyMjgzIC0+IDEuMTU3MDY0MTEyOTg5Mzg2RSsyNzcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEyNyBwb3dlciAwLjAwMDA0MTk5MDc5MzcyMzQgNTguNDQ5NTc3MDI3MzA3NjcgLT4gMS40OTY5NTA2NzIwNzUxNjJFLTI1NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTI4IHBvd2VyIDAuMDAwMDY2NDk3NzczOTM4MiA4MC4wNjc0OTIxMzI2MTg3NiAtPiAzLjQ4ODUxNzYyMDEwNzg3NUUtMzM1IEluZXhhY3QgUm91bmRlZAorcG93eDMxMjkgcG93ZXIgNTguNDk1NTQ0ODQ4ODY2NTYgIDEyNS44NDgwNzY4MzczNDk5IC0+IDIuNDQ5MDg5ODYyMTQ2NjQwRSsyMjIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEzMCBwb3dlciAxNS4wMjgyMDA2MDAyNDQ0OSAgMjEyLjM1Mjc5ODg5NzMzMzggLT4gOC4zMDc5MTM5MzI2ODIwNjdFKzI0OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTMxIHBvd2VyIDAuMDAwMjY1MDA4OTk0Mjk5MiAzMC45MjE3MzEyMzY3ODc2MSAtPiAyLjUxNzgyNzY2NDgzNjE0N0UtMTExIEluZXhhY3QgUm91bmRlZAorcG93eDMxMzIgcG93ZXIgMC4wMDA3MzQyOTc3NDI2NTc4IDY5LjQ5MTY4ODgwNzQxMTIzIC0+IDEuNjAwMTY4NjY1Njc0NDQwRS0yMTggSW5leGFjdCBSb3VuZGVkCitwb3d4MzEzMyBwb3dlciAwLjAwNjM4MTYwNjg2NTA2MjkgMTUwLjE0MDAwOTQxODM4MTIgLT4gMi43MDUwNTcyOTU3OTkwMDFFLTMzMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTM0IHBvd2VyIDkuOTEyOTIxMTIyNzI4NzkxICAyOTcuODI3NDAxMzYzMzQxMSAtPiA0Ljk2NzYyNDk5MzQzODkwMEUrMjk2IEluZXhhY3QgUm91bmRlZAorcG93eDMxMzUgcG93ZXIgMS45ODg2MDM1NjM5ODkyNDUgIDc2OC40ODYyOTY3OTIyMTgyIC0+IDIuNjkyODQyNDc0ODk5NTk2RSsyMjkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEzNiBwb3dlciA4LjQxODAxNDUxOTUxNzY5MSAgMTY0LjI0MzEzNTk5ODA3MjUgLT4gOS4xMDYyMTE1ODU4ODg4MzZFKzE1MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTM3IHBvd2VyIDYuMDY4ODIzNjA0NDUwNjg2ICAxMjAuMjk1NTIxMjM2NTgzNyAtPiAxLjU5OTQzMTkxODEwNTk4MkUrOTQgIEluZXhhY3QgUm91bmRlZAorcG93eDMxMzggcG93ZXIgNTYuOTAwNjI3MzgzMDM4NTAgIDU0LjkwNDY4Mjk0NjgzNjQ1IC0+IDIuMzEyODM5MTc3OTAyNDI4RSs5NiAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzEzOSBwb3dlciA1LjcxMDkwNTEzOTc1MDg3MSAgNzMuNDQ2MDg3NTI5NjIxNTYgLT4gMy43NzU4NzYwNTM3MDk5MjlFKzU1ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTQwIHBvd2VyIDAuMDAwMDAxNzQ0Njc2MTIwMyAxLjIyMzk4MTQ5MjIyODg5OSAtPiA4Ljk1MjkzNjU5NTQ2NTYzNUUtOCAgIEluZXhhY3QgUm91bmRlZAorCistLSBQPTcsIHdpdGhpbiAwLTkgLS0gcG9zaXRpdmUgYXJnMgorUHJlY2lzaW9uOiA3Citwb3d4MzAwMSBwb3dlciA4LjczODY4OSAgNTUuOTY1MjMgLT4gNC44NzgxODBFKzUyICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDAyIHBvd2VyIDAuMDQwNDc2MyAxNDcuNDk2NSAtPiAzLjY4OTcyMkUtMjA2IEluZXhhY3QgUm91bmRlZAorcG93eDMwMDMgcG93ZXIgMC4wNjA0MjMyIDc2LjY5Nzc4IC0+IDMuMzE5MTgzRS05NCAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAwNCBwb3dlciAwLjAwNTg4NTUgMTA3LjUwMTggLT4gMS43Njg4NzVFLTI0MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDA1IHBvd2VyIDIuMDU4MzAyICAxMTczLjA1MCAtPiA1Ljc3ODg5OUUrMzY3IEluZXhhY3QgUm91bmRlZAorcG93eDMwMDYgcG93ZXIgMC4wMDU2OTk4IDg1LjcwMTU3IC0+IDQuNzE2NzgzRS0xOTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAwNyBwb3dlciAwLjgxNjkyOTcgMzY5My41MzcgLT4gNC40NzU5NjJFLTMyNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDA4IHBvd2VyIDAuMjgxMDE1MyA2NTkuOTU2OCAtPiAxLjUzMzE3N0UtMzY0IEluZXhhY3QgUm91bmRlZAorcG93eDMwMDkgcG93ZXIgNC42MTc0NzggIDE1LjY4MzA4IC0+IDIuNjI5NzQ4RSsxMCAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAxMCBwb3dlciAwLjAyOTY0MTggMjQ0LjIzMDIgLT4gNi4yMDc5NDlFLTM3NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDExIHBvd2VyIDAuMDAzNjQ1NiAxMjcuOTk4NyAtPiA4LjEyMDg5MUUtMzEzIEluZXhhY3QgUm91bmRlZAorcG93eDMwMTIgcG93ZXIgMC41MDEyODEzIDU3Ny41NDE4IC0+IDYuMDg4ODAyRS0xNzQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAxMyBwb3dlciAwLjAwMzMyNzUgMTE5Ljk4MDAgLT4gNS4wNTUwNDlFLTI5OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDE0IHBvd2VyIDAuMDAzNzY1MiAxMTEuNzA5MiAtPiAxLjU2MDM1MUUtMjcxIEluZXhhY3QgUm91bmRlZAorcG93eDMwMTUgcG93ZXIgMC42NDYzMjUyIDIzOS4wNTY4IC0+IDQuODY0NTY0RS00NiAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAxNiBwb3dlciA0Ljc4NDM3OCAgNDc1LjA1MjEgLT4gOC45NjQ0NjBFKzMyMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDE3IHBvd2VyIDQuNjEwMzA1ICA1NjMuMTc5MSAtPiA2LjI5MDI5OEUrMzczIEluZXhhY3QgUm91bmRlZAorcG93eDMwMTggcG93ZXIgMC4wMTc1MTY3IDgwLjUyMjA4IC0+IDMuNjIzNDcyRS0xNDIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAxOSBwb3dlciA1LjIzODMwNyAgMzU2Ljc5NDQgLT4gNC4wMTE0NjFFKzI1NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDIwIHBvd2VyIDAuMDAwMzUyNyA5Ni4yNjM0NyAtPiA0LjM3NzkzMkUtMzMzIEluZXhhY3QgUm91bmRlZAorcG93eDMwMjEgcG93ZXIgMC4wMDE1MTU1IDEzNi4wNTE2IC0+IDIuNTcxMTNFLTM4NCAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKK3Bvd3gzMDIyIHBvd2VyIDUuNzUzNTczICAyNzMuMjM0MCAtPiA0LjM3MzE4NEUrMjA3IEluZXhhY3QgUm91bmRlZAorcG93eDMwMjMgcG93ZXIgNy43Nzg2NjUgIDMzMi43OTE3IC0+IDMuMDYwNjQwRSsyOTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAyNCBwb3dlciAxLjQzMjQ3OSAgMjA0Ni4wNjQgLT4gMi4zMjU4MjlFKzMxOSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDI1IHBvd2VyIDUuNjEwNTE2ICAxMzYuNDU2MyAtPiAxLjYwNzUwMkUrMTAyIEluZXhhY3QgUm91bmRlZAorcG93eDMwMjYgcG93ZXIgMC4wMDUwNjk3IDEzNy40NTEzIC0+IDMuNTIyMzE1RS0zMTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAyNyBwb3dlciA1LjY3ODczNyAgODUuMTYyNTMgLT4gMS43MTM5MDlFKzY0ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDI4IHBvd2VyIDAuMDgxNjE2NyAyMzYuMTk3MyAtPiA5LjIyODgwMkUtMjU4IEluZXhhY3QgUm91bmRlZAorcG93eDMwMjkgcG93ZXIgMC4yNjAyODA1IDU2Mi4wMTU3IC0+IDIuOTQ0NTU2RS0zMjkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAzMCBwb3dlciAwLjAwODA5MzYgMjQuMjUzNjcgLT4gMS44Mzk3NTVFLTUxICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDMxIHBvd2VyIDQuMDkyMDE2ICA4Mi45NDYwMyAtPiA1LjcyNDk0OEUrNTAgIEluZXhhY3QgUm91bmRlZAorcG93eDMwMzIgcG93ZXIgMC4wMDc4MjU1IDcuMjA0MTg0IC0+IDYuNjc1MzQyRS0xNiAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAzMyBwb3dlciAwLjk5MTc2OTMgMjk4NDYuNDQgLT4gNy40MzAxNzdFLTEwOCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDM0IHBvd2VyIDEuNjEwMzgwICAzMDEuMjQ2NyAtPiAyLjE3MDE0MkUrNjIgIEluZXhhY3QgUm91bmRlZAorcG93eDMwMzUgcG93ZXIgMC4wNTg4MjM2IDIxMi4xMDk3IC0+IDEuMDIzMTk2RS0yNjEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAzNiBwb3dlciAyLjQ5ODA2OSAgNTMxLjQ2NDcgLT4gMi4wNTQ1NjFFKzIxMSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDM3IHBvd2VyIDkuOTY0MzQyICAzMjYuNTQzOCAtPiAxLjA4OTQ1MkUrMzI2IEluZXhhY3QgUm91bmRlZAorcG93eDMwMzggcG93ZXIgMC4wODIwNjI2IDI2OC44NzE4IC0+IDEuMTA3MzUwRS0yOTIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAzOSBwb3dlciA2LjE3NjQ4NiAgMzYwLjc3NzkgLT4gMS45MTQ0NDlFKzI4NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDQwIHBvd2VyIDQuMjA2MzYzICAxNi4xNzI4OCAtPiAxLjIzMTMxNEUrMTAgIEluZXhhY3QgUm91bmRlZAorCistLSBQPTM0LCB3aXRoaW4gMC05OTkgLS0gbmVnYXRpdmUgYXJnMgorUHJlY2lzaW9uOiAzNAorcG93eDM3MDEgcG93ZXIgMzc2LjA5MTUyNzAwMDAxMDk0ODY2MzM0MDI4MjcwMDc5MDIgIC0zNS42OTgyMjM0OTkwNDEwMjEzMTY0OTI0MzcwMTk1ODQ2MyAtPiAxLjE2NTcyMjgzMTIyNTUwNjQ1NzgyODY1MzQxMzIwMDE0M0UtOTIgIEluZXhhY3QgUm91bmRlZAorcG93eDM3MDIgcG93ZXIgMC4wMDAwMDAwNTAzNzQ3NDQwMDc0NjEzMTkxNjY1ODQ1MzE0IC05LjUyMDMwODM0MTQ5Nzk3OTA5MzAyMTgxMzU3MTQ1MDU3NSAtPiAzLjAwMDQzMjQ3ODg2MTg4Mzk1Mzk3Nzk3MTIyNjc3MDQxMEUrNjkgIEluZXhhY3QgUm91bmRlZAorcG93eDM3MDMgcG93ZXIgMjkwLjY4NTg3MzE0OTUzMzk3NzgzMzc5NTM0MDc5MzgzMDggIC0xMTguNTQ1OTA0ODU5Nzc4OTY5MzI5MjQ1NTY3MzQyODM2NyAtPiA5LjM1Nzk2OTA0NzExMzk4OTIzODM5MjUyNzU2NTIwMDMwMkUtMjkzIEluZXhhY3QgUm91bmRlZAorcG93eDM3MDQgcG93ZXIgNC41OTg4NjQ2MDc2MjAwNTIwNjI5MDg3MDA5Mjg0NTQxODIgIC0yOTkuODMyMzY2NzY5ODkzMTEyNTcyMDIxODUzNzQ4Mzc1MyAtPiAyLjA2OTY0MTI2OTg1NTQxMzUzOTU3OTEyODExNDQ0ODQ3OEUtMTk5IEluZXhhY3QgUm91bmRlZAorcG93eDM3MDUgcG93ZXIgMi41NTY5NTI2NzY5ODY4MzA2NDU3MDgzNDkyNTQ5Mzg5MDMgIC00MjUuMTc1NTM3MzI1MTk0MTM4MzE0Nzk5ODkyNDcwMzU5MyAtPiA0LjQyODc5OTc3NzgzMzU5ODY1NDI2MDg4Mzg2MTUxNDYzOEUtMTc0IEluZXhhY3QgUm91bmRlZAorcG93eDM3MDYgcG93ZXIgMC4wMDAwMDA1NjU2MTk4NzYzNDA0MjIxOTg2NjQwNjEwMTE4IC0zMi44MzM2MTM4MDY3ODMwMTMyMTIzMDAyODczMDA3NTMxNSAtPiAxLjM0MDI3MDYyMjQwMTgyOTE0NTk2ODQ3NzYwMTAyOTI1MUUrMjA1IEluZXhhY3QgUm91bmRlZAorcG93eDM3MDcgcG93ZXIgMDEyLjQ4NDE5Nzg2NDI0NTI5NjA3NTA4MDE0MTAzNzIxMjUgIC0yMTQuMzczNDI5MTgyODcxMjk2MjgwOTg2NjY2MzMyMTkyMSAtPiA5LjMxOTg1Nzc1MTE3MDYwMzE0MDQ1OTA1NzUzNTk3MTIwMkUtMjM2IEluZXhhY3QgUm91bmRlZAorcG93eDM3MDggcG93ZXIgMC4wMDAwMDAwMDU2MDQxNTg2MTQ4MDY2OTE5MTc0MzE1NTUxIC0zNy4yMTEyOTA0OTIxMzg1ODM0MTUyODAzMzM0MzExNjUzMyAtPiAxLjExODM0NTAxMDY1MjQ1NDMxMzE4NjcwMjM0MTg3MzE2OUUrMzA3IEluZXhhY3QgUm91bmRlZAorcG93eDM3MDkgcG93ZXIgMC4wNjk0NTY5MjE4OTQxODMzNzY3MTk5OTk4ODA0MjAyMTUyIC04LjY5NzUwOTA3MjM2ODk3MzkzMjUwMTIzOTgxNTY3NzczMiAtPiAxMTg2Mjg2Njk5NS41MTAyNjQ4OTAzMjgzODE3NDI5MDI3MSAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDM3MTAgcG93ZXIgNi4zODA5ODQwMjQyNTk0NTAzOTg3MjkyNDM1MjIzNTQxNDQgIC00NTEuMDYzNTY5Njg4OTE5MzU2MTQ1Nzk4NTQ4NjM2NjgyNyAtPiA4LjgwMDM1MzEwOTM4NzMyMjQ3NDgwOTMyNTY3MDMxNDMzMEUtMzY0IEluZXhhY3QgUm91bmRlZAorcG93eDM3MTEgcG93ZXIgNzg2LjAyNjQ4NDA3NTY4MDkwNDgyODgwMDcyMDQ5MTc4MDEgIC00My4wOTkzNTM4NDY3ODc2Mjc3MzA1NzM0MjE2MTcxODU0MCAtPiAxLjYxNjMyNDE4MzM2NTY0NDEzMzk3OTU4NTQxOTkyNTkzNEUtMTI1IEluZXhhY3QgUm91bmRlZAorcG93eDM3MTIgcG93ZXIgOTYuMDc4MzY0MjcxMTMyMDQ3NDQxMDEyODc5NDg0NDUxMzAgIC0xODUuMTQxNDU3MjU0NjMzMDAyNDM4ODkxNDcyMDI3MTg3NiAtPiA4LjU4NjMyMDgxNTIxODM4MzAwNDAyMzI2NDk4MDAxODYxMEUtMzY4IEluZXhhY3QgUm91bmRlZAorcG93eDM3MTMgcG93ZXIgMC4wMDAwMDAwMDAyMzMyMTg5Nzk2ODU1ODcwNjU5NzkyNDA2IC01Ljc3OTU2MTYxMzE2NDYyODA3Njg4MDYwOTg5Mzc1MzMyNyAtPiA0LjY3ODQ1MDc3NTg3NjM4NTc5MzYxODU3MDQ4MzM0NTA2NkUrNTUgIEluZXhhY3QgUm91bmRlZAorcG93eDM3MTQgcG93ZXIgMC43MjU0MTQ2NjcyMDI0NjAyMjQyMzY5OTQzMjM3OTY4ODU3IC0yMTE1LjUxMjg5MTM5NzgyODYxNTcxMDEzMDA5MjI0NTY5MSAtPiA4LjUzOTA4MDk1ODA0MTY4OTI4ODIwMjExMTQwMzEwMjQ5NUUrMjk0IEluZXhhY3QgUm91bmRlZAorcG93eDM3MTUgcG93ZXIgMC4wMDE3MzgwNTQzNjQ5NzAyODY0Nzk2MTQ0MDA4NTkyMTM3IC02LjMwNzY2ODAxNzc2MTAyMjc4ODIyMDU3ODYzMzUzODcxMyAtPiAyNTYzMDkxNDE0NTkwNzU2NTEuMjI3NTc5ODAxNzY5NTAxNyAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDM3MTYgcG93ZXIgMDUuMjk0OTg3NTg5NTIyNzY5MDgyNjc2NDkxMTYxNDIzNzkgIC0yODcuMzIzMzg5NjczNDEwMzQ0Mjk5MTk4MTA1NjEzNDE2NyAtPiAxLjAzOTEzMDAyNzg0NzQ4OTM2NDAwOTM2ODYwODEwNDI5MUUtMjA4IEluZXhhY3QgUm91bmRlZAorcG93eDM3MTcgcG93ZXIgMTUuNjQ0MDM1OTM4NjU5MzI2MjIwMDM0NjI3NzkxMDQxNzggIC0xMTAuNTI5NjYzMzM1ODA2MzI2NzQ3ODYwOTAzMjAwMjQ3NSAtPiA5Ljc1MDU0MDI3NjAyNjUyNDUyNzM3NTEyNTk4MDI5NjE0MkUtMTMzIEluZXhhY3QgUm91bmRlZAorcG93eDM3MTggcG93ZXIgODkuNjk2MzkwMDY3NjE1NzEwODc2MzQ5NDUwNzczNzM1MDggIC0xODEuMzIwOTkxNDEzOTM1NzY2NTYwOTI2ODMzOTQyMjYyNyAtPiA4LjMzNTAzNDIzMjI3Nzc2MjkyNDUzOTM5NTYzMjAyNTI4MUUtMzU1IEluZXhhY3QgUm91bmRlZAorcG93eDM3MTkgcG93ZXIgNi45NzQwODc0ODM3MzEwMDYzNTk5MTQ5MTQxMTAxMzUwNTggIC0xNzQuNjgxNTYyNTc0NjcxMDM0NTE3MzYxNTUwODE3OTg0MiAtPiA0LjU1MzA3MjI2NTEyMjAxMTE3NjY0MTU5MDEwOTU2ODAzMUUtMTQ4IEluZXhhY3QgUm91bmRlZAorcG93eDM3MjAgcG93ZXIgMC4wMDM0MzkzMDI0MDEwNTU0ODIxMTMwNTUzNzcyNjgxOTkzIC05My42MDkzMTU5ODQxMzkxOTI3MjU5NTQ5NzEwMDQ5NzM2NCAtPiA0LjA2NzQ2ODg1NTgxNzE0NTUzOTU4OTk4ODM0OTQ0OTM5NEUrMjMwIEluZXhhY3QgUm91bmRlZAorcG93eDM3MjEgcG93ZXIgNjMuMzI4MzQwNzIzMDAzNzkxNTUwNTM3MzcyNjA5NjU2MzMgIC0xNjguMzkyNjc5OTQzNTA4ODMyNDgyNTc1MTQ0Njk1NzYxNiAtPiA0LjIwNzkwNzgzNTQ2MjY0MDQ3MTYxNzUxOTUwMTc0MTA5NEUtMzA0IEluZXhhY3QgUm91bmRlZAorcG93eDM3MjIgcG93ZXIgMDAuMDAyMTYwODgxNzQyMDYyNzYzNjkwMTEyNTU5MDc3ODUgIC03MC4xMjI3OTU2Mjg1NTQ0Mjc4NDc1Nzg3NDUwODk5MTAxMyAtPiA4LjAwMDY1NzE0MzM3ODE4NzAyOTYwOTM0MzQzNTA2NzA1N0UrMTg2IEluZXhhY3QgUm91bmRlZAorcG93eDM3MjMgcG93ZXIgOTM0LjU5NTc5ODI3MDM1NDU4OTM1NzIxMzQzOTMwMDQzNzUgIC0xMDIuMjI4NzczNTU2NTg3ODI1MjQ4NDAzMTQyNjAyNjcyNiAtPiAyLjA3MzgxMzc2OTIwOTI1NzYxNzI0NjU0NDQyNDgyNzI0MEUtMzA0IEluZXhhY3QgUm91bmRlZAorcG93eDM3MjQgcG93ZXIgMTA3LjkxMTY3OTI1NTg3OTM5MjE4NzM5OTU4ODU0NDExNzcgIC00NC4xMTk0MTA5MjI2MDg2OTc4NjMxMzgzODE4MTQ5OTE1OCAtPiAyLjAwNTQ3NjUzMzYzMTE4MzI2ODkxMjU1MjE2ODc1OTU5NUUtOTAgIEluZXhhY3QgUm91bmRlZAorcG93eDM3MjUgcG93ZXIgMC4wMDAwMDAwMDAwMTg4MDQ5ODI3MzgxNDI4MTkxNzY5MjYyIC0xOS4zMjExODkxNzE5MjI0MjAyNzk2Njg0NzUwMTcyNDA3MyAtPiAxLjcxMzE3NDI5NzEwMDkxODg1NzA1MzMzODI4NjM4OTAzNEUrMjA3IEluZXhhY3QgUm91bmRlZAorcG93eDM3MjYgcG93ZXIgNjE0Ljk4MjA5MDczNjYyNDgxNDIxNjY2MzYyNTkwMjc3MjggIC00LjA2OTkxMzI1NzAzMDc5MTU4NjY0NTI1MDAzNTY5ODEyMyAtPiA0LjQ2MjQzMjU3MjU3NjkzNTc1MjcxMzg3NjI5Mzc0NjcxN0UtMTIgIEluZXhhY3QgUm91bmRlZAorcG93eDM3MjcgcG93ZXIgNzUyLjA2NTUxNzU3NjkxODIwOTYxNjU2NTEyNzQwNDk0MjIgIC0yMi41OTI5MjA2MDM0ODc5NzQ3MjAxMzU5ODM3ODMzNDM3MCAtPiAxLjAzOTg4MTUyNjY5NDYzNTIwNTA0MDE5MjUzMTUwNDEzMUUtNjUgIEluZXhhY3QgUm91bmRlZAorcG93eDM3MjggcG93ZXIgNzIuMjA0NDY2MzIwNDc2NTk0NDk2MTYxNzU0NTYwNTkwMTMgIC0xNzUuNDcwNTM1NjQwMTg1MzkyNDAyMDg0MjM1NjYwNTA3MiAtPiA3LjUyOTU0MDE3NTc5MTU4MjQyMTk2Njk0NzgxNDU0OTAyOEUtMzI3IEluZXhhY3QgUm91bmRlZAorcG93eDM3MjkgcG93ZXIgNTE4LjgzNDY0ODY2MDA0MDM0MDU3NjQwNTU4NDc5Mzc0MTYgIC02NS44NzMyMDI2ODU5Mjc2MTU4ODc1Njk2MzIxNTU4ODIzMiAtPiAxLjQyMDE4OTQyNjk5MjE3MDkzNjk1ODg5MTE4MDA3MzE1MUUtMTc5IEluZXhhY3QgUm91bmRlZAorcG93eDM3MzAgcG93ZXIgMy40NTcxNjQzNzIwMDM5NjA1NzY0NTM0NTg1MDIyNzA3MTYgIC00NDAuMzIwMTExODE3Nzg2MTI3MzgxNDUyOTcxMzQ0MzY5OCAtPiA2LjE3NjQxODU5NTc1MTIwMTI4NzE4NjI5MjY2NDI1NzM2OUUtMjM4IEluZXhhY3QgUm91bmRlZAorcG93eDM3MzEgcG93ZXIgNy45MDgzNTI3OTMzNDQxODk3MjA3Mzk0Njc2NzU1MDM5OTEgIC0yOTguNjY0NjExMjg5NDcxOTY4MDM5NDE1MjY2NDc0MDI1NSAtPiA1LjkzNTg1NzEyMDIyOTE0NzYzODEwNDY3NTA1NzY5NTEyNUUtMjY5IEluZXhhY3QgUm91bmRlZAorcG93eDM3MzIgcG93ZXIgMC4wMDAwMDA0Mjk3Mzk5NDAzNzg4NTk1MDI3OTI2MDc1MDg2IC0yMi42NjUwNDYxNzE4NTA3MTI5MzU4ODgxNzUwMTQ2ODMzOSAtPiAyLjAxMjI3MDQwNTUyMDYwMDgyMDQ2OTY2NTE0NTYzNjIwNEUrMTQ0IEluZXhhY3QgUm91bmRlZAorcG93eDM3MzMgcG93ZXIgMC4wMDAwMDA4NTkyMTI0MDk3MzIyOTY2MzU0ODY4NzE2NDQzIC05LjkxMzEwOTU4NjU1ODAzMDIwNDc4OTUyMDE5MDE4MDkwNiAtPiAxLjM1NDk1ODc2Mzg0MzMxMDIzNzA0NjgxODgzMjc1NTIxNUUrNjAgIEluZXhhY3QgUm91bmRlZAorcG93eDM3MzQgcG93ZXIgMTYxLjQ4MDYwODA1NjEyNTgxMDU4ODA5MDc0NzA5ODk5MjUgIC03MC43MjkwNzgzNzQzNDgxNDI2MTcxNjMxMTk5MDI3MTU3OCAtPiA2LjYzMjU1NTAwMzY5ODk0NTU0NDk0MTMyOTg3MjkwMTkyOUUtMTU3IEluZXhhY3QgUm91bmRlZAorcG93eDM3MzUgcG93ZXIgMC4wMDAwMDAwMDkwNjY5NTY4NjI0MTczODMyNzA1NjMxOTE4IC0zNi41Mzc1OTYyNDYxMzY2NTk0MDEyNzA1ODQzOTEwNjY0MCAtPiA3LjE2MTgwODQwMTAyMzQxNDczNTQyODEzMDExMjk0MTU1OUUrMjkzIEluZXhhY3QgUm91bmRlZAorcG93eDM3MzYgcG93ZXIgMC4wMDAwMDAwMDAwMDI5NDQwMjk1OTc4MzY1NzA5MzQyNzUyIC0xLjI5NzM1NDIzODczODkyMTk4ODg4NDQyMTExNzczMTU2MiAtPiA5MTE3MzEwNjA1NzkyOTEuNzY2MTI2NzM1ODg3MjkxNzM4MCAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDM3MzcgcG93ZXIgMjEuMzc0NzcyMjAxNDQ4MzIxNzIxNzU0NjA0MjUxNDM2OTIgIC03Ni45NTk0OTkzMzY0MDUzOTIyNjQ3NTY4Njk5NzQ3Nzg4OSAtPiA0LjQ4MTc0MTI0MjQxODA5MTkxNDAxMTk2MjM5OTkxMjg4NUUtMTAzIEluZXhhY3QgUm91bmRlZAorcG93eDM3MzggcG93ZXIgMC4wMDAwMDAwMDAwMTg2NjU3Nzk4MjAxNjM2MzQyMTUwOTAzIC0yMC4xODI5NjI0MDM1MDY3ODI0NTU2NzA0OTE2MTczMDkwOSAtPiAzLjQ4Mzk1NDAwNzExNDkwMDQwNjkwNjMzODUyNjU3NTY3MkUrMjE2IEluZXhhY3QgUm91bmRlZAorcG93eDM3MzkgcG93ZXIgMC4wMDA2NTIyNDY0NzkyOTYwMTkxOTg1OTk2OTU5MTI2NzkyIC04MC4wMzc2MjQ5MTQ4MzUxNDY3OTg4NjUwNDA5OTE5NDQxNCAtPiA5LjI2NjU0ODUxMzYxNDIxNTU1NzIyODQ2NzUxNzA1MzAzNUUrMjU0IEluZXhhY3QgUm91bmRlZAorcG93eDM3NDAgcG93ZXIgMC4wMDAwMDAwMDMyODUxMzQzNjk0MjAwNTY4OTY2MTY4MDU1IC0yMS41MzQ2MjExNjkyNjM3NTUxMjI0MjQwMzE2MDAwODAyNiAtPiA0Ljg3MzIwMTY3OTY2ODQ1NTI0MDg2MTM3NjIxMzYwMTE4OUUrMTgyIEluZXhhY3QgUm91bmRlZAorCistLSBQPTE2LCB3aXRoaW4gMC05OSAtLSBuZWdhdGl2ZSBhcmcyCitQcmVjaXNpb246IDE2Citwb3d4MzYwMSBwb3dlciAwLjAwMDAxNTEzMzg3NDg0NzQgLTQwLjg0NjU1NjE4MzY0Njg4IC0+IDcuNjI4NDcwODI0MTM3NzU1RSsxOTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYwMiBwb3dlciAwLjE1NDI3NzE4NDg2NTQ4NjIgLTQzNS44ODMwMDA5NDY2ODAwIC0+IDYuMzg5ODE3MTc3ODAwNzQ0RSszNTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYwMyBwb3dlciA0OC4yODQ3Nzc0OTM2NzM2NCAgLTIxOC41OTI5MjA5OTAyMDUwIC0+IDguNTMxMDQ5NTMyNTc2MTU0RS0zNjkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYwNCBwb3dlciA3Ljk2MDc3NTg5MTU4NDkxMSAgLTEyLjc4MTEzNzMyMTgyNTA1IC0+IDMuMDUzMjcwODg5NzY5NDg4RS0xMiAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYwNSBwb3dlciAwLjk0MzAzNDA2NTE4NjMwNTggLTkwMTAuNDcwMDU2OTEzNzQ4IC0+IDMuMzEzMzc0NjU0OTIzODA3RSsyMjkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYwNiBwb3dlciAwLjAwMDAyMDI2NjE1MDE2MDIgLTY1LjU3OTE1MjA3MzgzMzA2IC0+IDUuOTk3Mzc5MTc2NTM2NDY0RSszMDcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYwNyBwb3dlciAwNC4zMzAwNzQ0MDc5ODM5MCAgLTIzMi4wNDc2ODM0NjY2NTg4IC0+IDIuMDA3ODI3MTgzMDEwNDU2RS0xNDggSW5leGFjdCBSb3VuZGVkCitwb3d4MzYwOCBwb3dlciAwLjAwMDAxNDE5NDQ2NDM5MTQgLTExLjMyNDA3OTIxOTU4NzE3IC0+IDcuOTAyOTM0NDg1MDc0ODQ2RSs1NCAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYwOSBwb3dlciAwLjAwMDAwMjE5Nzc3NTgyNjEgLTUzLjUzNzA2MTM4MjUzMzA3IC0+IDguMTk1NjMxNzcyMzE3ODE1RSszMDIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYxMCBwb3dlciAzOS41MTI5NzY1NTQ3NDE4OCAgLTE5LjQwMzcwOTc2MDEyMzI2IC0+IDEuMDQwNjk5NjA4MDcyNjU5RS0zMSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYxMSBwb3dlciAzOC43MTIxMDIzMjQ4ODc3NSAgLTY2LjU4MzQxNjE4MjI3OTIxIC0+IDEuODg2ODU1MDY2MTQ2NDk1RS0xMDYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYxMiBwb3dlciAwLjAwMDA4MDQyMzUyMjkwNjIgLTYuNzE1MjA3OTQ4OTkyODU5IC0+IDMuMTM0NzU3ODY0Mzg5MzMzRSsyNyAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYxMyBwb3dlciAwLjAwMDAwNzM1NDcwOTIzOTkgLTExLjI3NzI1Njg1NzE5OTM0IC0+IDcuNzgxNDI4MzkwOTUzNjk1RSs1NyAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYxNCBwb3dlciA1Mi43MjE4MTI3MjU5OTMxNiAgLTE4Ni4xNDIyMzExNjA3NDM1IC0+IDIuOTE2NjAxOTk4NzQ0MTc3RS0zMjEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYxNSBwb3dlciAwLjA5Njk1MTk5NjMwODMzMDYgLTI4MC44MjIwODYyMTUxMzY5IC0+IDMuOTU1OTA2ODg1OTcwOTg3RSsyODQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYxNiBwb3dlciA5NC4wNzI2MzMwMjE1MDA4MSAgLTE0OC4yMDMxMTQ2MDcxMjMwIC0+IDMuMzYxOTU4OTkwNzUyNDkwRS0yOTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYxNyBwb3dlciA4NS44MDI4Njk2NTA1MzcwNCAgLTkwLjIxNDUzNjk1ODEzNzU5IC0+IDMuNzE1NjAyNDI5NjQ1Nzk4RS0xNzUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYxOCBwb3dlciAwMy41MjY5OTg1ODE1MjI1OSAgLTQ5Mi4wNDE0MzYyNTM5MTk2IC0+IDQuNTA3MzA5MjIwMDgxMDkyRS0yNzAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYxOSBwb3dlciAwLjA1MDgyNzgwODYzOTYwNjggLTE4MS4wODcxNzMxNTcyMTY3IC0+IDIuMDM0NDI4MDEzMDE3OTQ5RSsyMzQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYyMCBwb3dlciAwLjM5NTU3Njc0MDMwMzE3MiAgLTkxNS41NTI0NTA3NDMyMzkyIC0+IDUuNzA2NTg1MTg3NDM3NTc4RSszNjggSW5leGFjdCBSb3VuZGVkCitwb3d4MzYyMSBwb3dlciAzOC4wNjEwNTgyNjc4OTIwMiAgLTQ5Ljc1OTEzNzUzNDM1MzM1IC0+IDIuMjczMTg4OTkxNDMxNzM4RS03OSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYyMiBwb3dlciAwLjAwMDM2NTY3NDg5MTA2NDYgLTczLjI4OTg4NDkxMzEwMzU0IC0+IDcuNzY4OTM2OTQwNTY4NzYzRSsyNTEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYyMyBwb3dlciAwLjAwMDAwMDYzNzM1NTE4MDkgLTUxLjMwODI1MjM0MjAwNjkwIC0+IDcuNjk3NjE4MTY3NzAxOTg1RSszMTcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYyNCBwb3dlciA4Mi40MTcyOTkyMDY3Mzg1NiAgLTM1LjczMzE5NjMxNjI1Njk5IC0+IDMuNDI0MDQyMzU0NTg1NTI5RS02OSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYyNSBwb3dlciAwLjc4NDU4MjE0NTMxMjc2NzAgLTk3MS40OTgyMDI4ODk3NjYzIC0+IDIuMjgzNDE1NTI3NjYxMDg5RSsxMDIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYyNiBwb3dlciA0Ljg0MDk4MzY3MzQzMzQ5NyAgLTE4Mi4zNzMwNDUyMzcwNTE1IC0+IDEuMjIwNTkxNDA3OTI3NzcwRS0xMjUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYyNyBwb3dlciAwLjAwMDAwMDYxMzc1OTIxMzkgLTIuMTIyMTM5NDc0NDMxNDg0IC0+IDE1MjMxMjE3MDM0ODM5LjI5ICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYyOCBwb3dlciAwLjAwMDM2NTc5NjI4NjI5ODQgLTM1Ljk3OTkzNzgyNDQ4MDk5IC0+IDQuNTEyNzAxMzE5MjUwODM5RSsxMjMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYyOSBwb3dlciA0MC45MzY5MzAwNDQ0MzE1MCAgLTE2NS4xMzYyNDA4NzkyOTk3IC0+IDYuMDQ0Mjc2NDExMDU3MjM5RS0yNjcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYzMCBwb3dlciAwLjI5NDE1NTI1ODMwMjg4OTggLTE3LjQxMDQ2MjY0OTQ1ODkyIC0+IDE3ODc4MzMxMDMuNTAzMzQ2ICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYzMSBwb3dlciA2My45OTMzNTEzNTM2OTk3NyAgLTY5LjkyNDE3MjA1MTY4NTc5IC0+IDUuMDk5MzU5ODA0ODcyNTA5RS0xMjcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYzMiBwb3dlciAwLjAwMDA2NTc5MjQ0NjczODggLTg5LjE0NDk3MjkzNTg4MzEzIC0+IDYuMTQ1ODc4MjY2Njg4NTIxRSszNzIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYzMyBwb3dlciAxMS4zNTA3MTI1MDMzOTE0NyAgLTMyMy4zNzA1ODY1NjE0NTQyIC0+IDYuODYzNjI2MjQ4NzY2Nzc1RS0zNDIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYzNCBwb3dlciAyMy44ODAyNDcxODQ3MDg5NSAgLTI3Ny43MTE3NTEzMzI5NTEwIC0+IDIuMDA2NDQxNDIyNjEyODE1RS0zODMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYzNSBwb3dlciAwLjAwMDAwMDkxMTE5Mzk5MTQgLTU4LjUxNzgyOTQ2OTI5MTgyIC0+IDIuOTU0MzUyODgzOTk2NzczRSszNTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYzNiBwb3dlciAwLjAwMDA4NzgxNzkwNDg3ODIgLTc1LjgxMDYwNDIwMjM4NjY5IC0+IDMuMzA2ODc4NDU1MjA3NTg1RSszMDcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYzNyBwb3dlciAwNy4zOTE5MDU2NDI3Mzc3OSAgLTI4Ny41MDQ3MzA3MjQ0NjM2IC0+IDEuNjkyMDgwMzU0NjU5ODA1RS0yNTAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYzOCBwb3dlciAwLjAwMDAyOTgzMTA4MTk3OTkgLTEuODQ0NzQwMzc3NzU5MzU1IC0+IDIyMjg3NDcxOC43MjM4ODg4ICAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzYzOSBwb3dlciAwLjAwMDAwMDY0MTI5MjkzODQgLTI4LjI0ODUwMDc4MjI5MjkwIC0+IDguNzM3MTY0MjMwNjY2NTI5RSsxNzQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzY0MCBwb3dlciAwLjAwMDAwMTAyMDI5NjU5OTggLTQ3LjE3NTczNzAxOTU2NDk4IC0+IDQuMzkyODQ1MzA2MDQ5MzQxRSsyODIgSW5leGFjdCBSb3VuZGVkCisKKy0tIFA9Nywgd2l0aGluIDAtOSAtLSBuZWdhdGl2ZSBhcmcyCitQcmVjaXNpb246IDcKK3Bvd3gzNTAxIHBvd2VyIDAuMzI2MzI0ICAtNzEuOTY1MDkgIC0+IDEuMDAwNjczRSszNSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUwMiBwb3dlciAwLjAwMTc2MzUgLTAuNzE4Njk2NyAtPiA5NS4yODQxOSAgICAgIEluZXhhY3QgUm91bmRlZAorcG93eDM1MDMgcG93ZXIgOC41NjQxNTUgIC0yNTMuMDg5OSAgLT4gOC44NTA1MTJFLTIzNyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTA0IHBvd2VyIDguOTg3MjcyICAtMi4xNTU3ODkgIC0+IDAuMDA4NzkzODU5ICAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUwNSBwb3dlciA5LjYwNDg1NiAgLTEzOS45NjMwICAtPiAzLjA3MzQ5MkUtMTM4IEluZXhhY3QgUm91bmRlZAorcG93eDM1MDYgcG93ZXIgMC44NDcyOTE5IC0yNTM5LjA4NSAgLT4gNS4zNzI2ODZFKzE4MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTA3IHBvd2VyIDUuMzEyMzI5ICAtNjAuMzI5NjUgIC0+IDEuNzUzMTIxRS00NCAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUwOCBwb3dlciAwLjAzMzgyOTQgLTEwMC41NDQwICAtPiA3LjQyMzkzOUUrMTQ3IEluZXhhY3QgUm91bmRlZAorcG93eDM1MDkgcG93ZXIgMC4wMDE3Nzc3IC0xMzAuODU4MyAgLT4gNy41NjU2MjlFKzM1OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTEwIHBvd2VyIDguMDE2MTU0ICAtNDA1LjU2ODkgIC0+IDIuMzk1OTc3RS0zNjcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUxMSBwb3dlciA1LjAxNjU3MCAgLTMyNy44OTA2ICAtPiAyLjIwMzc4NEUtMjMwIEluZXhhY3QgUm91bmRlZAorcG93eDM1MTIgcG93ZXIgMC44MTYxNzQzIC03NDQuNTI3NiAgLT4gNC43ODY4OTlFKzY1ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTEzIHBvd2VyIDAuMDY2NjM0MyAtMTY0LjczMjAgIC0+IDUuOTUxMjQwRSsxOTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUxNCBwb3dlciAwLjA4MDM5NjYgLTIwMi4yNjY2ICAtPiAyLjcxNTUxMkUrMjIxIEluZXhhY3QgUm91bmRlZAorcG93eDM1MTUgcG93ZXIgMC4wMDE0NzUyIC0xMi41NTU0NyAgLT4gMy41MTg5MDVFKzM1ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTE2IHBvd2VyIDkuNzM3NTY1ICAtMTQuNjk2MTUgIC0+IDIuOTc1NjcyRS0xNSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUxNyBwb3dlciAwLjY2MzQxNzIgLTE1Mi43MzA4ICAtPiAxLjY1NDQ1OEUrMjcgIEluZXhhY3QgUm91bmRlZAorcG93eDM1MTggcG93ZXIgMC4wMDA5MzM3IC0zMy4zMjkzOSAgLT4gOS41NzUwMzlFKzEwMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTE5IHBvd2VyIDguNjc5OTIyICAtMjI0LjQxOTQgIC0+IDIuMzkyNDQ2RS0yMTEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUyMCBwb3dlciA3LjM5MDQ5NCAgLTE2MS45NDgzICAtPiAyLjA4ODM3NUUtMTQxIEluZXhhY3QgUm91bmRlZAorcG93eDM1MjEgcG93ZXIgMC40NjMxNDg5IC00MTcuMTY3MyAgLT4gMi44MjExMDZFKzEzOSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTIyIHBvd2VyIDAuMDA5NTQ3MSAtNy42Nzc0NTggIC0+IDMuMjMxODU1RSsxNSAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUyMyBwb3dlciA2LjU2NjMzOSAgLTE3Ni4xODY3ICAtPiA5Ljk2NTYzM0UtMTQ1IEluZXhhY3QgUm91bmRlZAorcG93eDM1MjQgcG93ZXIgMi42OTYxMjggIC0yNi4xNTUwMSAgLT4gNS40MTk3MzFFLTEyICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTI1IHBvd2VyIDAuNDQ2NDM2NiAtODUyLjE4OTMgIC0+IDIuOTU3NzI1RSsyOTggSW5leGFjdCBSb3VuZGVkCitwb3d4MzUyNiBwb3dlciAwLjQ3NzIwMDYgLTkyMS40MTExICAtPiAxLjExODEwNUUrMjk2IEluZXhhY3QgUm91bmRlZAorcG93eDM1MjcgcG93ZXIgOC45MjM2OTYgIC0zNTkuMjIxMSAgLT4gMy41MDE1NzNFLTM0MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTI4IHBvd2VyIDAuMDAxODAwOCAtNjYuOTEyNTIgIC0+IDQuNDAyNzE4RSsxODMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUyOSBwb3dlciAwLjA4MTE5NjQgLTkyLjgzMjc4ICAtPiAxLjcwMTExMUUrMTAxIEluZXhhY3QgUm91bmRlZAorcG93eDM1MzAgcG93ZXIgMC4wNzExMjE5IC01OC45NDM0NyAgLT4gNC42NDQxNDhFKzY3ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTMxIHBvd2VyIDcuOTU4MTIxICAtNTAuNjYxMjMgIC0+IDIuMzExMTYxRS00NiAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUzMiBwb3dlciA2LjEwNjQ2NiAgLTgxLjgzNjEwICAtPiA0Ljk0MzI4NUUtNjUgIEluZXhhY3QgUm91bmRlZAorcG93eDM1MzMgcG93ZXIgNC41NTc2MzQgIC0xMjkuNTI2OCAgLT4gNC43Mzc5MTdFLTg2ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTM0IHBvd2VyIDAuMDAyNzM0OCAtOS4xODAxMzUgIC0+IDMuMzgzNTI0RSsyMyAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUzNSBwb3dlciAwLjAwODM5MjQgLTQ2LjI0MDE2ICAtPiA5Ljk5NjIxMkUrOTUgIEluZXhhY3QgUm91bmRlZAorcG93eDM1MzYgcG93ZXIgMi4xMzg1MjMgIC00Ny4yNTg5NyAgLT4gMi41MDcwMDlFLTE2ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTM3IHBvd2VyIDEuNjI2NzI4ICAtMTU3My44MzAgIC0+IDIuNjY4MTE3RS0zMzMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzUzOCBwb3dlciAwLjA4MjYxNSAgLTE2NC41ODQyICAtPiAxLjcxNzg4MkUrMTc4IEluZXhhY3QgUm91bmRlZAorcG93eDM1MzkgcG93ZXIgNy42MzYwMDMgIC0zNjMuNjc2MyAgLT4gOC4zNjYxNzRFLTMyMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTQwIHBvd2VyIDAuMDAyMTQ4MSAtMTM4LjAwNjUgIC0+IDEuNTYyNTA1RSszNjggSW5leGFjdCBSb3VuZGVkCisKKworLS0gSW52YWxpZCBvcGVyYXRpb25zIGR1ZSB0byByZXN0cmljdGlvbnMKKy0tIFtuZXh0IHR3byBwcm9iYWJseSBza2lwcGVkIGJ5IG1vc3QgdGVzdCBoYXJuZXNzZXNdCitwcmVjaXNpb246IDEwMDAwMDAwMAorcG93eDQwMDEgIHBvd2VyIDEgMS4xIC0+ICBOYU4gICAgICAgICBJbnZhbGlkX2NvbnRleHQKK3ByZWNpc2lvbjogIDk5OTk5OTk5Citwb3d4NDAwMiAgcG93ZXIgMSAxLjEgLT4gIE5hTiAgICAgICAgIEludmFsaWRfY29udGV4dAorCitwcmVjaXNpb246IDkKK21heEV4cG9uZW50OiAgIDEwMDAwMDAKK21pbkV4cG9uZW50OiAgIC05OTk5OTkKK3Bvd3g0MDAzICBwb3dlciAxIDEuMSAgLT4gIE5hTiAgICAgICAgSW52YWxpZF9jb250ZXh0CittYXhFeHBvbmVudDogICAgOTk5OTk5CittaW5FeHBvbmVudDogICAtOTk5OTk5Citwb3d4NDAwNCAgcG93ZXIgMSAxLjEgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQorbWluRXhwb25lbnQ6ICAtMTAwMDAwMAorcG93eDQwMDUgIHBvd2VyIDEgMS4xICAtPiAgTmFOICAgICAgICBJbnZhbGlkX2NvbnRleHQKK21heEV4cG9uZW50OiAgICA5OTk5OTkKK21pbkV4cG9uZW50OiAgIC05OTk5OTgKK3Bvd3g0MDA2ICBwb3dlciAxIDEuMSAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIG9wZXJhbmQgcmFuZ2UgdmlvbGF0aW9ucworcG93eDQwMDcgIHBvd2VyIDEgICAgICAgICAgICAgMS4xRSs5OTk5OTkgIC0+ICAxCitwb3d4NDAwOCAgcG93ZXIgMSAgICAgICAgICAgICAxLjFFKzEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcG93eDQwMDkgIHBvd2VyIDEuMUUrOTk5OTk5ICAgMS4xICAgICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MDEwICBwb3dlciAxLjFFKzEwMDAwMDAgIDEuMSAgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitwb3d4NDAxMSAgcG93ZXIgMSAgICAgICAgICAgICAxLjFFLTE5OTk5OTcgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDAxMiAgcG93ZXIgMSAgICAgICAgICAgICAxLjFFLTE5OTk5OTggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcG93eDQwMTMgIHBvd2VyIDEuMUUtMTk5OTk5NyAgMS4xICAgICAgICAgIC0+ICAwRS0xMDAwMDA2IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKK3Bvd3g0MDE0ICBwb3dlciAxLjFFLTE5OTk5OTggIDEuMSAgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHJvdW5kaW5nIG1vZGVzIC0tIHBvd2VyIGlzIHNlbnNpdGl2ZQorcHJlY2lzaW9uOiAgIDcKK21heEV4cG9uZW50OiA5OQorbWluRXhwb25lbnQ6IC05OQorCistLSAgIDAuNyAgKiogMy4zID0+ICAgMC4zMDgxOTM1NDA1MzQxODk0MzgyMgorLS0gICAwLjcgICoqIDMuNCA9PiAgIDAuMjk3Mzk0Nzc2MzgyNzI1MzM4NTQKKy0tICAtMS4yICAqKiAxNyAgPT4gLTIyLjE4NjExMTA2NzQwNDM2OTkyCistLSAgLTEuMyAgKiogMTcgID0+IC04Ni41MDQxNTkxOTM4MTMzNzkzMworLS0gICAwLjUgICoqIDExICA9PiAgIDAuMDAwNDg4MjgxMjUKKy0tICAgMy4xNSAqKiAzICAgPT4gIDMxLjI1NTg3NQorCityb3VuZGluZzogdXAKK3Bvd3g0MTAwICBwb3dlciAgICAgIDAuNyAgMy4zIC0+ICAwLjMwODE5MzYgSW5leGFjdCBSb3VuZGVkCitwb3d4NDEwMSAgcG93ZXIgICAgICAwLjcgIDMuNCAtPiAgMC4yOTczOTQ4IEluZXhhY3QgUm91bmRlZAorcG93eDQxMDIgIHBvd2VyICAgICAtMS4yICAxNyAgLT4gLTIyLjE4NjEyICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTAzICBwb3dlciAgICAgLTEuMyAgMTcgIC0+IC04Ni41MDQxNiAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDEwNCAgcG93ZXIgIDE3IDgxLjI3MTE1ICAtPiA5Ljk5OTk3NEUrOTkgSW5leGFjdCBSb3VuZGVkCitwb3d4NDEwNSAgcG93ZXIgIDE3IDgxLjI3MTE2ICAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitwb3d4NDEyMCAgcG93ZXIgICAgICAwLjcgIDMuMyAtPiAgMC4zMDgxOTM1IEluZXhhY3QgUm91bmRlZAorcG93eDQxMjEgIHBvd2VyICAgICAgMC43ICAzLjQgLT4gIDAuMjk3Mzk0NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTIyICBwb3dlciAgICAgLTEuMiAgMTcgIC0+IC0yMi4xODYxMSAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDEyMyAgcG93ZXIgICAgIC0xLjMgIDE3ICAtPiAtODYuNTA0MTUgIEluZXhhY3QgUm91bmRlZAorcG93eDQxMjQgIHBvd2VyICAxNyA4MS4yNzExNSAgLT4gOS45OTk5NzNFKzk5IEluZXhhY3QgUm91bmRlZAorcG93eDQxMjUgIHBvd2VyICAxNyA4MS4yNzExNiAgLT4gOS45OTk5OTlFKzk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZmxvb3IKK3Bvd3g0MTQwICBwb3dlciAgICAgIDAuNyAgMy4zIC0+ICAwLjMwODE5MzUgSW5leGFjdCBSb3VuZGVkCitwb3d4NDE0MSAgcG93ZXIgICAgICAwLjcgIDMuNCAtPiAgMC4yOTczOTQ3IEluZXhhY3QgUm91bmRlZAorcG93eDQxNDIgIHBvd2VyICAgICAtMS4yICAxNyAgLT4gLTIyLjE4NjEyICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTQzICBwb3dlciAgICAgLTEuMyAgMTcgIC0+IC04Ni41MDQxNiAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDE0NCAgcG93ZXIgIDE3IDgxLjI3MTE1ICAtPiA5Ljk5OTk3M0UrOTkgSW5leGFjdCBSb3VuZGVkCitwb3d4NDE0NSAgcG93ZXIgIDE3IDgxLjI3MTE2ICAtPiA5Ljk5OTk5OUUrOTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBjZWlsaW5nCitwb3d4NDE2MCAgcG93ZXIgICAgICAwLjcgIDMuMyAtPiAgMC4zMDgxOTM2IEluZXhhY3QgUm91bmRlZAorcG93eDQxNjEgIHBvd2VyICAgICAgMC43ICAzLjQgLT4gIDAuMjk3Mzk0OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTYyICBwb3dlciAgICAgLTEuMiAgMTcgIC0+IC0yMi4xODYxMSAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDE2MyAgcG93ZXIgICAgIC0xLjMgIDE3ICAtPiAtODYuNTA0MTUgIEluZXhhY3QgUm91bmRlZAorcG93eDQxNjQgIHBvd2VyICAxNyA4MS4yNzExNSAgLT4gOS45OTk5NzRFKzk5IEluZXhhY3QgUm91bmRlZAorcG93eDQxNjUgIHBvd2VyICAxNyA4MS4yNzExNiAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorcG93eDQxODAgIHBvd2VyICAgICAgMC43ICAzLjMgLT4gIDAuMzA4MTkzNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTgxICBwb3dlciAgICAgIDAuNyAgMy40IC0+ICAwLjI5NzM5NDggSW5leGFjdCBSb3VuZGVkCitwb3d4NDE4MiAgcG93ZXIgICAgIC0xLjIgIDE3ICAtPiAtMjIuMTg2MTEgIEluZXhhY3QgUm91bmRlZAorcG93eDQxODMgIHBvd2VyICAgICAtMS4zICAxNyAgLT4gLTg2LjUwNDE2ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MTg0ICBwb3dlciAgICAgIDAuNSAgMTEgIC0+ICAwLjAwMDQ4ODI4MTMgSW5leGFjdCBSb3VuZGVkCitwb3d4NDE4NSAgcG93ZXIgICAgICAzLjE1ICAzICAtPiAgMzEuMjU1ODggIEluZXhhY3QgUm91bmRlZAorcG93eDQxODYgIHBvd2VyICAxNyA4MS4yNzExNSAgLT4gOS45OTk5NzRFKzk5IEluZXhhY3QgUm91bmRlZAorcG93eDQxODcgIHBvd2VyICAxNyA4MS4yNzExNiAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitwb3d4NDIwMCAgcG93ZXIgICAgICAwLjcgIDMuMyAtPiAgMC4zMDgxOTM1IEluZXhhY3QgUm91bmRlZAorcG93eDQyMDEgIHBvd2VyICAgICAgMC43ICAzLjQgLT4gIDAuMjk3Mzk0OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MjAyICBwb3dlciAgICAgLTEuMiAgMTcgIC0+IC0yMi4xODYxMSAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDIwMyAgcG93ZXIgICAgIC0xLjMgIDE3ICAtPiAtODYuNTA0MTYgIEluZXhhY3QgUm91bmRlZAorcG93eDQyMDQgIHBvd2VyICAgICAgMC41ICAxMSAgLT4gIDAuMDAwNDg4MjgxMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MjA1ICBwb3dlciAgICAgIDMuMTUgIDMgIC0+ICAzMS4yNTU4OCAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDIwNiAgcG93ZXIgIDE3IDgxLjI3MTE1ICAtPiA5Ljk5OTk3NEUrOTkgSW5leGFjdCBSb3VuZGVkCitwb3d4NDIwNyAgcG93ZXIgIDE3IDgxLjI3MTE2ICAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK3Bvd3g0MjIwICBwb3dlciAgICAgIDAuNyAgMy4zIC0+ICAwLjMwODE5MzUgSW5leGFjdCBSb3VuZGVkCitwb3d4NDIyMSAgcG93ZXIgICAgICAwLjcgIDMuNCAtPiAgMC4yOTczOTQ4IEluZXhhY3QgUm91bmRlZAorcG93eDQyMjIgIHBvd2VyICAgICAtMS4yICAxNyAgLT4gLTIyLjE4NjExICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MjIzICBwb3dlciAgICAgLTEuMyAgMTcgIC0+IC04Ni41MDQxNiAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDIyNCAgcG93ZXIgICAgICAwLjUgIDExICAtPiAgMC4wMDA0ODgyODEyIEluZXhhY3QgUm91bmRlZAorcG93eDQyMjUgIHBvd2VyICAgICAgMy4xNSAgMyAgLT4gIDMxLjI1NTg3ICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MjI2ICBwb3dlciAgICAgLTMuMTUgIDMgIC0+IC0zMS4yNTU4NyAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDIyNyAgcG93ZXIgIDE3IDgxLjI3MTE1ICAtPiA5Ljk5OTk3NEUrOTkgSW5leGFjdCBSb3VuZGVkCitwb3d4NDIyOCAgcG93ZXIgIDE3IDgxLjI3MTE2ICAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKworLS0gbW9yZSByb3VuZGluZyB0ZXN0cyBhcyBwZXIgSWxhbiBOZWhhbWEncyBzdWdnZXN0aW9ucyAmIGFuYWx5c2lzCistLSB0aGVzZSBhcmUgbGlrZWx5IHRvIHNob3cgPiAwLjUgdWxwIGVycm9yIGZvciB2ZXJ5IHNtYWxsIHBvd2VycworcHJlY2lzaW9uOiAgIDcKK21heEV4cG9uZW50OiA5NgorbWluRXhwb25lbnQ6IC05NQorCistLSBGb3IgeD1uZXh0ZnAoMSk9MS4wMC4uMDAxICh3aGVyZSB0aGUgbnVtYmVyIG9mIDBzIGlzIHByZWNpc2lvbi0yKQorLS0gICBwb3dlcih4LHkpPXggd2hlbiB0aGUgcm91bmRpbmcgaXMgdXAgKGUuZy4sIHRvd2FyZF9wb3NfaW5mIG9yCistLSAgIGNlaWwpIGZvciBhbnkgeSBpbiAoMCwxXS4KK3JvdW5kaW5nOiBjZWlsaW5nCitwb3d4NDMwMSAgcG93ZXIgIDEuMDAwMDAxIDAgICAgICAgICAgLT4gMQorLS0gVGhlIG5leHQgdGVzdCBzaG91bGQgYmUgc2tpcHBlZCBmb3IgZGVjTnVtYmVyCitwb3d4NDMwMiAgcG93ZXIgIDEuMDAwMDAxIDFlLTEwMSAgICAgLT4gMS4wMDAwMDEgICBJbmV4YWN0IFJvdW5kZWQKKy0tIFRoZSBuZXh0IHRlc3Qgc2hvdWxkIGJlIHNraXBwZWQgZm9yIGRlY051bWJlcgorcG93eDQzMDMgIHBvd2VyICAxLjAwMDAwMSAxZS05NSAgICAgIC0+IDEuMDAwMDAxICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDMwNCAgcG93ZXIgIDEuMDAwMDAxIDFlLTEwICAgICAgLT4gMS4wMDAwMDEgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzA1ICBwb3dlciAgMS4wMDAwMDEgMC4xICAgICAgICAtPiAxLjAwMDAwMSAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzMDYgIHBvd2VyICAxLjAwMDAwMSAwLjEyMzQ1NjcgIC0+IDEuMDAwMDAxICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDMwNyAgcG93ZXIgIDEuMDAwMDAxIDAuNyAgICAgICAgLT4gMS4wMDAwMDEgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzA4ICBwb3dlciAgMS4wMDAwMDEgMC45OTk5OTk5ICAtPiAxLjAwMDAwMSAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzMDkgIHBvd2VyICAxLjAwMDAwMSAxLjAwMDAwMCAgIC0+IDEuMDAwMDAxCistLSAgIHBvd2VyKHgseSk9MSB3aGVuIHRoZSByb3VuZGluZyBpcyBkb3duIChlLmcuIHRvd2FyZF96ZXJvIG9yCistLSAgIGZsb29yKSBmb3IgYW55IHkgaW4gWzAsMSkuCityb3VuZGluZzogZmxvb3IKK3Bvd3g0MzIxICBwb3dlciAgMS4wMDAwMDEgMCAgICAgICAgICAtPiAxCitwb3d4NDMyMiAgcG93ZXIgIDEuMDAwMDAxIDFlLTEwMSAgICAgLT4gMS4wMDAwMDAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzIzICBwb3dlciAgMS4wMDAwMDEgMWUtOTUgICAgICAtPiAxLjAwMDAwMCAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzMjQgIHBvd2VyICAxLjAwMDAwMSAxZS0xMCAgICAgIC0+IDEuMDAwMDAwICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDMyNSAgcG93ZXIgIDEuMDAwMDAxIDAuMSAgICAgICAgLT4gMS4wMDAwMDAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzI2ICBwb3dlciAgMS4wMDAwMDEgMC4xMjM0NTY3ICAtPiAxLjAwMDAwMCAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzMjcgIHBvd2VyICAxLjAwMDAwMSAwLjcgICAgICAgIC0+IDEuMDAwMDAwICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDMyOCAgcG93ZXIgIDEuMDAwMDAxIDAuOTk5OTk5OSAgLT4gMS4wMDAwMDAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzI5ICBwb3dlciAgMS4wMDAwMDEgMS4wMDAwMDAgICAtPiAxLjAwMDAwMQorCistLSBGb3IgeD1wcmV2ZnAoMSk9MC45OS4uOTkgKHdoZXJlIHRoZSBudW1iZXIgb2YgOXMgaXMgcHJlY2lzaW9uKQorLS0gICBwb3dlcih4LHkpPXggd2hlbiB0aGUgcm91bmRpbmcgaXMgZG93biBmb3IgYW55IHkgaW4gKDAsMV0uCityb3VuZGluZzogZmxvb3IKK3Bvd3g0MzQxICBwb3dlciAgMC45OTk5OTk5IDAgICAgICAgICAgLT4gMQorLS0gVGhlIG5leHQgdGVzdCBzaG91bGQgYmUgc2tpcHBlZCBmb3IgZGVjTnVtYmVyCitwb3d4NDM0MiAgcG93ZXIgIDAuOTk5OTk5OSAxZS0xMDEgICAgIC0+IDAuOTk5OTk5OSAgIEluZXhhY3QgUm91bmRlZAorLS0gVGhlIG5leHQgdGVzdCBzaG91bGQgYmUgc2tpcHBlZCBmb3IgZGVjTnVtYmVyCitwb3d4NDM0MyAgcG93ZXIgIDAuOTk5OTk5OSAxZS05NSAgICAgIC0+IDAuOTk5OTk5OSAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzNDQgIHBvd2VyICAwLjk5OTk5OTkgMWUtMTAgICAgICAtPiAwLjk5OTk5OTkgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzQ1ICBwb3dlciAgMC45OTk5OTk5IDAuMSAgICAgICAgLT4gMC45OTk5OTk5ICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDM0NiAgcG93ZXIgIDAuOTk5OTk5OSAwLjEyMzQ1NjcgIC0+IDAuOTk5OTk5OSAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzNDcgIHBvd2VyICAwLjk5OTk5OTkgMC43ICAgICAgICAtPiAwLjk5OTk5OTkgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzQ4ICBwb3dlciAgMC45OTk5OTk5IDAuOTk5OTk5OSAgLT4gMC45OTk5OTk5ICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDM0OSAgcG93ZXIgIDAuOTk5OTk5OSAxLjAwMDAwMCAgIC0+IDAuOTk5OTk5OQorLS0gICBwb3dlcih4LHkpPTEgd2hlbiB0aGUgcm91bmRpbmcgaXMgdXAgZm9yIGFueSB5IGluICgwLDFdLgorcm91bmRpbmc6IGNlaWxpbmcKK3Bvd3g0MzYxICBwb3dlciAgMC45OTk5OTk5IDAgICAgICAgICAgLT4gMQorcG93eDQzNjIgIHBvd2VyICAwLjk5OTk5OTkgMWUtMTAxICAgICAtPiAxLjAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzYzICBwb3dlciAgMC45OTk5OTk5IDFlLTk1ICAgICAgLT4gMS4wMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDM2NCAgcG93ZXIgIDAuOTk5OTk5OSAxZS0xMCAgICAgIC0+IDEuMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzNjUgIHBvd2VyICAwLjk5OTk5OTkgMC4xICAgICAgICAtPiAxLjAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzY2ICBwb3dlciAgMC45OTk5OTk5IDAuMTIzNDU2NyAgLT4gMS4wMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitwb3d4NDM2NyAgcG93ZXIgIDAuOTk5OTk5OSAwLjcgICAgICAgIC0+IDEuMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZAorcG93eDQzNjggIHBvd2VyICAwLjk5OTk5OTkgMC45OTk5OTk5ICAtPiAxLjAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK3Bvd3g0MzY5ICBwb3dlciAgMC45OTk5OTk5IDEuMDAwMDAwICAgLT4gMC45OTk5OTk5CisKKy0tIEZvciB4PW5leHRmcCgwKQorLS0gICBwb3dlcih4LHkpPTAgd2hlbiB0aGUgcm91bmRpbmcgaXMgZG93biBmb3IgYW55IHkgbGFyZ2VyIHRoYW4gMS4KK3JvdW5kaW5nOiBmbG9vcgorcG93eDQzODIgIHBvd2VyICAxZS0xMDEgICAgMCAgICAgICAgICAtPiAxCitwb3d4NDM4MyAgcG93ZXIgIDFlLTEwMSAgICAwLjk5OTk5OTkgIC0+IDFFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcG93eDQzODQgIHBvd2VyICAxZS0xMDEgICAgMS4wMDAwMDAgICAtPiAxRS0xMDEgU3Vibm9ybWFsCitwb3d4NDM4NSAgcG93ZXIgIDFlLTEwMSAgICAxLjAwMDAwMSAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitwb3d4NDM4NiAgcG93ZXIgIDFlLTEwMSAgICAyLjAwMDAwMCAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3Bvd2Vyc3FydC5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9wb3dlcnNxcnQuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjBiOTQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9wb3dlcnNxcnQuZGVjVGVzdApAQCAtMCwwICsxLDI5NzAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gcG93ZXJzcXJ0LmRlY1Rlc3QgLS0gZGVjaW1hbCBzcXVhcmUgcm9vdCwgdXNpbmcgcG93ZXIgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNCwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIHRha2VuIGZyb20gc3F1YXJlcm9vdC5kZWNUZXN0IGJ1dCBhcmUKKy0tIGV2YWx1YXRlZCB1c2luZyB0aGUgcG93ZXIgb3BlcmF0b3IuICBUaGUgZGlmZmVyZW5jZXMgaW4gcmVzdWx0cworLS0gKDE1MyBvdXQgb2YgMjg1NikgZmFsbCBpbnRvIHRoZSBmb2xsb3dpbmcgY2F0ZWdvcmllczoKKy0tCistLSAgICB4ICAgICoqIDAuNSAoeD4wKSBoYXMgbm8gcHJlZmVycmVkIGV4cG9uZW50LCBhbmQgaXMgSW5leGFjdAorLS0gICAgICAgICAgICAgICAgKGFuZCBoZW5jZSBmdWxsIHByZWNpc2lvbik7IGFsbW9zdCBhbGwgZGlmZmVyZW5jZXMgYXJlCistLSAgICAgICAgICAgICAgICBpbiB0aGlzIGNhdGVnb3J5CistLSAgICAwLjAwICoqIDAuNSBiZWNvbWVzIDAgKG5vdCAwLjApLCBldGMuCistLSAgIC0wICAgICoqIDAuNSBiZWNvbWVzIDAgKG5ldmVyIC0wKQorLS0gICAgU29tZSBleGFjdCBzdWJub3JtYWxzIGJlY29tZSBpbmV4YWN0IGFuZCBoZW5jZSB1bmRlcmZsb3dzCisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gYmFzaWNzCitwd3N4MDAxICBwb3dlciAxICAgICAgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMDIgIHBvd2VyIC0xICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwMDMgIHBvd2VyIDEuMDAgICAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDAwNCAgcG93ZXIgLTEuMDAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDAwNSAgcG93ZXIgMCAgICAgICAgMC41IC0+IDAKK3B3c3gwMDYgIHBvd2VyIDAwLjAgICAgIDAuNSAtPiAwCitwd3N4MDA3ICBwb3dlciAwLjAwICAgICAwLjUgLT4gMAorcHdzeDAwOCAgcG93ZXIgMDAuMDAgICAgMC41IC0+IDAKK3B3c3gwMDkgIHBvd2VyIDAwLjAwMCAgIDAuNSAtPiAwCitwd3N4MDEwICBwb3dlciAwMC4wMDAwICAwLjUgLT4gMAorcHdzeDAxMSAgcG93ZXIgMDAgICAgICAgMC41IC0+IDAKKworcHdzeDAxMiAgcG93ZXIgLTIgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDAxMyAgcG93ZXIgMiAgICAgICAgMC41IC0+IDEuNDE0MjEzNTYgSW5leGFjdCBSb3VuZGVkCitwd3N4MDE0ICBwb3dlciAtMi4wMCAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDE1ICBwb3dlciAyLjAwICAgICAwLjUgLT4gMS40MTQyMTM1NiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwMTYgIHBvd2VyIC0wICAgICAgIDAuNSAtPiAwCitwd3N4MDE3ICBwb3dlciAtMC4wICAgICAwLjUgLT4gMAorcHdzeDAxOCAgcG93ZXIgLTAwLjAwICAgMC41IC0+IDAKK3B3c3gwMTkgIHBvd2VyIC0wMC4wMDAgIDAuNSAtPiAwCitwd3N4MDIwICBwb3dlciAtMC4wMDAwICAwLjUgLT4gMAorcHdzeDAyMSAgcG93ZXIgLTBFKzkgICAgMC41IC0+IDAKK3B3c3gwMjIgIHBvd2VyIC0wRSsxMCAgIDAuNSAtPiAwCitwd3N4MDIzICBwb3dlciAtMEUrMTEgICAwLjUgLT4gMAorcHdzeDAyNCAgcG93ZXIgLTBFKzEyICAgMC41IC0+IDAKK3B3c3gwMjUgIHBvd2VyIC0wMCAgICAgIDAuNSAtPiAwCitwd3N4MDI2ICBwb3dlciAwRSs1ICAgICAwLjUgLT4gMAorcHdzeDAyNyAgcG93ZXIgNC4wICAgICAgMC41IC0+IDIuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDI4ICBwb3dlciA0LjAwICAgICAwLjUgLT4gMi4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKKworcHdzeDAzMCAgcG93ZXIgKzAuMSAgICAgICAgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkCitwd3N4MDMxICBwb3dlciAtMC4xICAgICAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwMzIgIHBvd2VyICswLjAxICAgICAgICAgICAgMC41IC0+IDAuMTAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDAzMyAgcG93ZXIgLTAuMDEgICAgICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDM0ICBwb3dlciArMC4wMDEgICAgICAgICAgIDAuNSAtPiAwLjAzMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkCitwd3N4MDM1ICBwb3dlciAtMC4wMDEgICAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwMzYgIHBvd2VyICswLjAwMDAwMSAgICAgICAgMC41IC0+IDAuMDAxMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDM3ICBwb3dlciAtMC4wMDAwMDEgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwMzggIHBvd2VyICswLjAwMDAwMDAwMDAwMSAgMC41IC0+IDAuMDAwMDAxMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDM5ICBwb3dlciAtMC4wMDAwMDAwMDAwMDEgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworcHdzeDA0MSAgcG93ZXIgMS4xICAgICAgICAgMC41IC0+IDEuMDQ4ODA4ODUgSW5leGFjdCBSb3VuZGVkCitwd3N4MDQyICBwb3dlciAxLjEwICAgICAgICAwLjUgLT4gMS4wNDg4MDg4NSBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNDMgIHBvd2VyIDEuMTAwICAgICAgIDAuNSAtPiAxLjA0ODgwODg1IEluZXhhY3QgUm91bmRlZAorcHdzeDA0NCAgcG93ZXIgMS4xMTAgICAgICAgMC41IC0+IDEuMDUzNTY1MzggSW5leGFjdCBSb3VuZGVkCitwd3N4MDQ1ICBwb3dlciAtMS4xICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDQ2ICBwb3dlciAtMS4xMCAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDQ3ICBwb3dlciAtMS4xMDAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDQ4ICBwb3dlciAtMS4xMTAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDQ5ICBwb3dlciA5LjkgICAgICAgICAwLjUgLT4gMy4xNDY0MjY1NCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNTAgIHBvd2VyIDkuOTAgICAgICAgIDAuNSAtPiAzLjE0NjQyNjU0IEluZXhhY3QgUm91bmRlZAorcHdzeDA1MSAgcG93ZXIgOS45MDAgICAgICAgMC41IC0+IDMuMTQ2NDI2NTQgSW5leGFjdCBSb3VuZGVkCitwd3N4MDUyICBwb3dlciA5Ljk5MCAgICAgICAwLjUgLT4gMy4xNjA2OTYxMyBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNTMgIHBvd2VyIC05LjkgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNTQgIHBvd2VyIC05LjkwICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNTUgIHBvd2VyIC05LjkwMCAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNTYgIHBvd2VyIC05Ljk5MCAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworcHdzeDA2MCAgcG93ZXIgIDEgICAgICAgICAgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNjEgIHBvd2VyICAxLjAgICAgICAgICAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDYyICBwb3dlciAgMS4wMCAgICAgICAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA2MyAgcG93ZXIgIDEwLjAgICAgICAgICAwLjUgLT4gMy4xNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNjQgIHBvd2VyICAxMC4wICAgICAgICAgMC41IC0+IDMuMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkCitwd3N4MDY1ICBwb3dlciAgMTAuMCAgICAgICAgIDAuNSAtPiAzLjE2MjI3NzY2IEluZXhhY3QgUm91bmRlZAorcHdzeDA2NiAgcG93ZXIgIDEwLjAwICAgICAgICAwLjUgLT4gMy4xNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNjcgIHBvd2VyICAxMDAgICAgICAgICAgMC41IC0+IDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDY4ICBwb3dlciAgMTAwLjAgICAgICAgIDAuNSAtPiAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA2OSAgcG93ZXIgIDEwMC4wMCAgICAgICAwLjUgLT4gMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwNzAgIHBvd2VyICAxLjEwMDBFKzMgICAgMC41IC0+IDMzLjE2NjI0NzkgSW5leGFjdCBSb3VuZGVkCitwd3N4MDcxICBwb3dlciAgMS4xMDAwMEUrMyAgIDAuNSAtPiAzMy4xNjYyNDc5IEluZXhhY3QgUm91bmRlZAorcHdzeDA3MiAgcG93ZXIgLTEwLjAgICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDczICBwb3dlciAtMTAuMDAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNzQgIHBvd2VyIC0xMDAuMCAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDA3NSAgcG93ZXIgLTEwMC4wMCAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitwd3N4MDc2ICBwb3dlciAtMS4xMDAwRSszICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3gwNzcgIHBvd2VyIC0xLjEwMDAwRSszICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBmYW1vdXMgc3F1YXJlcworcHdzeDA4MCAgcG93ZXIgICAgIDEgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwODEgIHBvd2VyICAgICA0ICAgMC41IC0+IDIuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDgyICBwb3dlciAgICAgOSAgIDAuNSAtPiAzLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA4MyAgcG93ZXIgICAgMTYgICAwLjUgLT4gNC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwODQgIHBvd2VyICAgIDI1ICAgMC41IC0+IDUuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDg1ICBwb3dlciAgICAzNiAgIDAuNSAtPiA2LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA4NiAgcG93ZXIgICAgNDkgICAwLjUgLT4gNy4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwODcgIHBvd2VyICAgIDY0ICAgMC41IC0+IDguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDg4ICBwb3dlciAgICA4MSAgIDAuNSAtPiA5LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA4OSAgcG93ZXIgICAxMDAgICAwLjUgLT4gMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwOTAgIHBvd2VyICAgMTIxICAgMC41IC0+IDExLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDkxICBwb3dlciAgIDE0NCAgIDAuNSAtPiAxMi4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA5MiAgcG93ZXIgICAxNjkgICAwLjUgLT4gMTMuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gwOTMgIHBvd2VyICAgMjU2ICAgMC41IC0+IDE2LjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MDk0ICBwb3dlciAgMTAyNCAgIDAuNSAtPiAzMi4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDA5NSAgcG93ZXIgIDQwOTYgICAwLjUgLT4gNjQuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMDAgIHBvd2VyICAgMC4wMSAgMC41IC0+IDAuMTAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDEwMSAgcG93ZXIgICAwLjA0ICAwLjUgLT4gMC4yMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTAyICBwb3dlciAgIDAuMDkgIDAuNSAtPiAwLjMwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMDMgIHBvd2VyICAgMC4xNiAgMC41IC0+IDAuNDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDEwNCAgcG93ZXIgICAwLjI1ICAwLjUgLT4gMC41MDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTA1ICBwb3dlciAgIDAuMzYgIDAuNSAtPiAwLjYwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMDYgIHBvd2VyICAgMC40OSAgMC41IC0+IDAuNzAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDEwNyAgcG93ZXIgICAwLjY0ICAwLjUgLT4gMC44MDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTA4ICBwb3dlciAgIDAuODEgIDAuNSAtPiAwLjkwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMDkgIHBvd2VyICAgMS4wMCAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTEwICBwb3dlciAgIDEuMjEgIDAuNSAtPiAxLjEwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDExMSAgcG93ZXIgICAxLjQ0ICAwLjUgLT4gMS4yMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMTIgIHBvd2VyICAgMS42OSAgMC41IC0+IDEuMzAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTEzICBwb3dlciAgIDIuNTYgIDAuNSAtPiAxLjYwMDAwMDAwIEluZXhhY3QgUm91bmRlZAorcHdzeDExNCAgcG93ZXIgIDEwLjI0ICAwLjUgLT4gMy4yMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMTUgIHBvd2VyICA0MC45NiAgMC41IC0+IDYuNDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIFByZWNpc2lvbiAxIHNxdWFyZXJvb3QgdGVzdHMgW2V4aGF1c3RpdmUsIHBsdXMgZXhwb25lbnQgYWRqdXN0c10KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246ICAgMQorcHdzeDEyMDEgIHBvd2VyIDAuMSAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIwMiAgcG93ZXIgMC4wMSAgMC41IC0+IDAuMSBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjAzICBwb3dlciAxLjBFLTEgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMDQgIHBvd2VyIDEuMDBFLTIgIDAuNSAtPiAwLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMDUgIHBvd2VyIDFFLTMgIDAuNSAtPiAwLjAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjA2ICBwb3dlciAxRSsxICAwLjUgLT4gMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIwNyAgcG93ZXIgMUUrMiAgMC41IC0+IDFFKzEgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIwOCAgcG93ZXIgMUUrMyAgMC41IC0+IDNFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMDkgIHBvd2VyIDAuMiAgMC41IC0+IDAuNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIxMCAgcG93ZXIgMC4wMiAgMC41IC0+IDAuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIxMSAgcG93ZXIgMi4wRS0xICAwLjUgLT4gMC40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjEyICBwb3dlciAyLjAwRS0yICAwLjUgLT4gMC4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjEzICBwb3dlciAyRS0zICAwLjUgLT4gMC4wNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIxNCAgcG93ZXIgMkUrMSAgMC41IC0+IDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMTUgIHBvd2VyIDJFKzIgIDAuNSAtPiAxRSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjE2ICBwb3dlciAyRSszICAwLjUgLT4gNEUrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIxNyAgcG93ZXIgMC4zICAwLjUgLT4gMC41ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjE4ICBwb3dlciAwLjAzICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjE5ICBwb3dlciAzLjBFLTEgIDAuNSAtPiAwLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjAgIHBvd2VyIDMuMDBFLTIgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjEgIHBvd2VyIDNFLTMgIDAuNSAtPiAwLjA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjIyICBwb3dlciAzRSsxICAwLjUgLT4gNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIyMyAgcG93ZXIgM0UrMiAgMC41IC0+IDJFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjQgIHBvd2VyIDNFKzMgIDAuNSAtPiA1RSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjI1ICBwb3dlciAwLjQgIDAuNSAtPiAwLjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMjYgIHBvd2VyIDAuMDQgIDAuNSAtPiAwLjIgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIyNyAgcG93ZXIgNC4wRS0xICAwLjUgLT4gMC42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjI4ICBwb3dlciA0LjAwRS0yICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjI5ICBwb3dlciA0RS0zICAwLjUgLT4gMC4wNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzMCAgcG93ZXIgNEUrMSAgMC41IC0+IDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMzEgIHBvd2VyIDRFKzIgIDAuNSAtPiAyRSsxIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMzIgIHBvd2VyIDRFKzMgIDAuNSAtPiA2RSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjMzICBwb3dlciAwLjUgIDAuNSAtPiAwLjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMzQgIHBvd2VyIDAuMDUgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMzUgIHBvd2VyIDUuMEUtMSAgMC41IC0+IDAuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzNiAgcG93ZXIgNS4wMEUtMiAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTIzNyAgcG93ZXIgNUUtMyAgMC41IC0+IDAuMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyMzggIHBvd2VyIDVFKzEgIDAuNSAtPiA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjM5ICBwb3dlciA1RSsyICAwLjUgLT4gMkUrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI0MCAgcG93ZXIgNUUrMyAgMC41IC0+IDdFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNDEgIHBvd2VyIDAuNiAgMC41IC0+IDAuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI0MiAgcG93ZXIgMC4wNiAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI0MyAgcG93ZXIgNi4wRS0xICAwLjUgLT4gMC44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQ0ICBwb3dlciA2LjAwRS0yICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQ1ICBwb3dlciA2RS0zICAwLjUgLT4gMC4wOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI0NiAgcG93ZXIgNkUrMSAgMC41IC0+IDggIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNDcgIHBvd2VyIDZFKzIgIDAuNSAtPiAyRSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjQ4ICBwb3dlciA2RSszICAwLjUgLT4gOEUrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI0OSAgcG93ZXIgMC43ICAwLjUgLT4gMC44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjUwICBwb3dlciAwLjA3ICAwLjUgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjUxICBwb3dlciA3LjBFLTEgIDAuNSAtPiAwLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTIgIHBvd2VyIDcuMDBFLTIgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTMgIHBvd2VyIDdFLTMgIDAuNSAtPiAwLjA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjU0ICBwb3dlciA3RSsxICAwLjUgLT4gOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI1NSAgcG93ZXIgN0UrMiAgMC41IC0+IDNFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTYgIHBvd2VyIDdFKzMgIDAuNSAtPiA4RSsxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjU3ICBwb3dlciAwLjggIDAuNSAtPiAwLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTggIHBvd2VyIDAuMDggIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNTkgIHBvd2VyIDguMEUtMSAgMC41IC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2MCAgcG93ZXIgOC4wMEUtMiAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2MSAgcG93ZXIgOEUtMyAgMC41IC0+IDAuMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNjIgIHBvd2VyIDhFKzEgIDAuNSAtPiA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjYzICBwb3dlciA4RSsyICAwLjUgLT4gM0UrMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2NCAgcG93ZXIgOEUrMyAgMC41IC0+IDlFKzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNjUgIHBvd2VyIDAuOSAgMC41IC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI2NiAgcG93ZXIgMC4wOSAgMC41IC0+IDAuMyBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjY3ICBwb3dlciA5LjBFLTEgIDAuNSAtPiAwLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNjggIHBvd2VyIDkuMDBFLTIgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDEyNjkgIHBvd2VyIDlFLTMgIDAuNSAtPiAwLjA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gxMjcwICBwb3dlciA5RSsxICAwLjUgLT4gOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI3MSAgcG93ZXIgOUUrMiAgMC41IC0+IDNFKzEgSW5leGFjdCBSb3VuZGVkCitwd3N4MTI3MiAgcG93ZXIgOUUrMyAgMC41IC0+IDlFKzEgIEluZXhhY3QgUm91bmRlZAorCistLSBQcmVjaXNpb24gMiBzcXVhcmVyb290IHRlc3RzIFtleGhhdXN0aXZlLCBwbHVzIGV4cG9uZW50IGFkanVzdHNdCityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiAgIDIKK3B3c3gyMjAxICBwb3dlciAwLjEgIDAuNSAtPiAwLjMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjAyICBwb3dlciAwLjAxICAwLjUgLT4gMC4xMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjAzICBwb3dlciAxLjBFLTEgIDAuNSAtPiAwLjMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjA0ICBwb3dlciAxLjAwRS0yICAwLjUgLT4gMC4xMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjA1ICBwb3dlciAxRS0zICAwLjUgLT4gMC4wMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDYgIHBvd2VyIDFFKzEgIDAuNSAtPiAzLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDcgIHBvd2VyIDFFKzIgIDAuNSAtPiAxMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjA4ICBwb3dlciAxRSszICAwLjUgLT4gMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMDkgIHBvd2VyIDAuMiAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMTAgIHBvd2VyIDAuMDIgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjExICBwb3dlciAyLjBFLTEgIDAuNSAtPiAwLjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjEyICBwb3dlciAyLjAwRS0yICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIxMyAgcG93ZXIgMkUtMyAgMC41IC0+IDAuMDQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjE0ICBwb3dlciAyRSsxICAwLjUgLT4gNC41ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjE1ICBwb3dlciAyRSsyICAwLjUgLT4gMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMTYgIHBvd2VyIDJFKzMgIDAuNSAtPiA0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIxNyAgcG93ZXIgMC4zICAwLjUgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIxOCAgcG93ZXIgMC4wMyAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMTkgIHBvd2VyIDMuMEUtMSAgMC41IC0+IDAuNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjAgIHBvd2VyIDMuMDBFLTIgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjIxICBwb3dlciAzRS0zICAwLjUgLT4gMC4wNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjIgIHBvd2VyIDNFKzEgIDAuNSAtPiA1LjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMjMgIHBvd2VyIDNFKzIgIDAuNSAtPiAxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIyNCAgcG93ZXIgM0UrMyAgMC41IC0+IDU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjI1ICBwb3dlciAwLjQgIDAuNSAtPiAwLjYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjI2ICBwb3dlciAwLjA0ICAwLjUgLT4gMC4yMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjI3ICBwb3dlciA0LjBFLTEgIDAuNSAtPiAwLjYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjI4ICBwb3dlciA0LjAwRS0yICAwLjUgLT4gMC4yMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjI5ICBwb3dlciA0RS0zICAwLjUgLT4gMC4wNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzAgIHBvd2VyIDRFKzEgIDAuNSAtPiA2LjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzEgIHBvd2VyIDRFKzIgIDAuNSAtPiAyMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjMyICBwb3dlciA0RSszICAwLjUgLT4gNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzMgIHBvd2VyIDAuNSAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyMzQgIHBvd2VyIDAuMDUgIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjM1ICBwb3dlciA1LjBFLTEgIDAuNSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjM2ICBwb3dlciA1LjAwRS0yICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjIzNyAgcG93ZXIgNUUtMyAgMC41IC0+IDAuMDcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjM4ICBwb3dlciA1RSsxICAwLjUgLT4gNy4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjM5ICBwb3dlciA1RSsyICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNDAgIHBvd2VyIDVFKzMgIDAuNSAtPiA3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0MSAgcG93ZXIgMC42ICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0MiAgcG93ZXIgMC4wNiAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNDMgIHBvd2VyIDYuMEUtMSAgMC41IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNDQgIHBvd2VyIDYuMDBFLTIgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjQ1ICBwb3dlciA2RS0zICAwLjUgLT4gMC4wNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNDYgIHBvd2VyIDZFKzEgIDAuNSAtPiA3LjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNDcgIHBvd2VyIDZFKzIgIDAuNSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI0OCAgcG93ZXIgNkUrMyAgMC41IC0+IDc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjQ5ICBwb3dlciAwLjcgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjUwICBwb3dlciAwLjA3ICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI1MSAgcG93ZXIgNy4wRS0xICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI1MiAgcG93ZXIgNy4wMEUtMiAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNTMgIHBvd2VyIDdFLTMgIDAuNSAtPiAwLjA4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI1NCAgcG93ZXIgN0UrMSAgMC41IC0+IDguNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI1NSAgcG93ZXIgN0UrMiAgMC41IC0+IDI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjU2ICBwb3dlciA3RSszICAwLjUgLT4gODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNTcgIHBvd2VyIDAuOCAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNTggIHBvd2VyIDAuMDggIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjU5ICBwb3dlciA4LjBFLTEgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjYwICBwb3dlciA4LjAwRS0yICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI2MSAgcG93ZXIgOEUtMyAgMC41IC0+IDAuMDg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjYyICBwb3dlciA4RSsxICAwLjUgLT4gOC45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjYzICBwb3dlciA4RSsyICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNjQgIHBvd2VyIDhFKzMgIDAuNSAtPiA4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI2NSAgcG93ZXIgMC45ICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI2NiAgcG93ZXIgMC4wOSAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNjcgIHBvd2VyIDkuMEUtMSAgMC41IC0+IDAuOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNjggIHBvd2VyIDkuMDBFLTIgIDAuNSAtPiAwLjMwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNjkgIHBvd2VyIDlFLTMgIDAuNSAtPiAwLjA5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3MCAgcG93ZXIgOUUrMSAgMC41IC0+IDkuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3MSAgcG93ZXIgOUUrMiAgMC41IC0+IDMwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNzIgIHBvd2VyIDlFKzMgIDAuNSAtPiA5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3MyAgcG93ZXIgMC4xMCAgMC41IC0+IDAuMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNzQgIHBvd2VyIDAuMDEwICAwLjUgLT4gMC4xMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjc1ICBwb3dlciAxMC4wRS0xICAwLjUgLT4gMS4wIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNzYgIHBvd2VyIDEwLjAwRS0yICAwLjUgLT4gMC4zMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3NyAgcG93ZXIgMTBFLTMgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZAorcHdzeDIyNzggIHBvd2VyIDEwRSsxICAwLjUgLT4gMTAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI3OSAgcG93ZXIgMTBFKzIgIDAuNSAtPiAzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4MCAgcG93ZXIgMTBFKzMgIDAuNSAtPiAxLjBFKzIgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4MSAgcG93ZXIgMC4xMSAgMC41IC0+IDAuMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyODIgIHBvd2VyIDAuMDExICAwLjUgLT4gMC4xMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4MyAgcG93ZXIgMTEuMEUtMSAgMC41IC0+IDEuMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI4NCAgcG93ZXIgMTEuMDBFLTIgIDAuNSAtPiAwLjMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjg1ICBwb3dlciAxMUUtMyAgMC41IC0+IDAuMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyODYgIHBvd2VyIDExRSsxICAwLjUgLT4gMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyODcgIHBvd2VyIDExRSsyICAwLjUgLT4gMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyODggIHBvd2VyIDExRSszICAwLjUgLT4gMS4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjg5ICBwb3dlciAwLjEyICAwLjUgLT4gMC4zNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI5MCAgcG93ZXIgMC4wMTIgIDAuNSAtPiAwLjExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjkxICBwb3dlciAxMi4wRS0xICAwLjUgLT4gMS4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjkyICBwb3dlciAxMi4wMEUtMiAgMC41IC0+IDAuMzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyOTMgIHBvd2VyIDEyRS0zICAwLjUgLT4gMC4xMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI5NCAgcG93ZXIgMTJFKzEgIDAuNSAtPiAxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI5NSAgcG93ZXIgMTJFKzIgIDAuNSAtPiAzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjI5NiAgcG93ZXIgMTJFKzMgIDAuNSAtPiAxLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyOTcgIHBvd2VyIDAuMTMgIDAuNSAtPiAwLjM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMjk4ICBwb3dlciAwLjAxMyAgMC41IC0+IDAuMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIyOTkgIHBvd2VyIDEzLjBFLTEgIDAuNSAtPiAxLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMDAgIHBvd2VyIDEzLjAwRS0yICAwLjUgLT4gMC4zNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMwMSAgcG93ZXIgMTNFLTMgIDAuNSAtPiAwLjExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzAyICBwb3dlciAxM0UrMSAgMC41IC0+IDExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzAzICBwb3dlciAxM0UrMiAgMC41IC0+IDM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzA0ICBwb3dlciAxM0UrMyAgMC41IC0+IDEuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMwNSAgcG93ZXIgMC4xNCAgMC41IC0+IDAuMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMDYgIHBvd2VyIDAuMDE0ICAwLjUgLT4gMC4xMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMwNyAgcG93ZXIgMTQuMEUtMSAgMC41IC0+IDEuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMwOCAgcG93ZXIgMTQuMDBFLTIgIDAuNSAtPiAwLjM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzA5ICBwb3dlciAxNEUtMyAgMC41IC0+IDAuMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMTAgIHBvd2VyIDE0RSsxICAwLjUgLT4gMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMTEgIHBvd2VyIDE0RSsyICAwLjUgLT4gMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMTIgIHBvd2VyIDE0RSszICAwLjUgLT4gMS4yRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzEzICBwb3dlciAwLjE1ICAwLjUgLT4gMC4zOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMxNCAgcG93ZXIgMC4wMTUgIDAuNSAtPiAwLjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzE1ICBwb3dlciAxNS4wRS0xICAwLjUgLT4gMS4yICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzE2ICBwb3dlciAxNS4wMEUtMiAgMC41IC0+IDAuMzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMTcgIHBvd2VyIDE1RS0zICAwLjUgLT4gMC4xMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMxOCAgcG93ZXIgMTVFKzEgIDAuNSAtPiAxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMxOSAgcG93ZXIgMTVFKzIgIDAuNSAtPiAzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyMCAgcG93ZXIgMTVFKzMgIDAuNSAtPiAxLjJFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMjEgIHBvd2VyIDAuMTYgIDAuNSAtPiAwLjQwIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMjIgIHBvd2VyIDAuMDE2ICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyMyAgcG93ZXIgMTYuMEUtMSAgMC41IC0+IDEuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyNCAgcG93ZXIgMTYuMDBFLTIgIDAuNSAtPiAwLjQwIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMjUgIHBvd2VyIDE2RS0zICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyNiAgcG93ZXIgMTZFKzEgIDAuNSAtPiAxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyNyAgcG93ZXIgMTZFKzIgIDAuNSAtPiA0MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzI4ICBwb3dlciAxNkUrMyAgMC41IC0+IDEuM0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMyOSAgcG93ZXIgMC4xNyAgMC41IC0+IDAuNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMzAgIHBvd2VyIDAuMDE3ICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMzMSAgcG93ZXIgMTcuMEUtMSAgMC41IC0+IDEuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMzMiAgcG93ZXIgMTcuMDBFLTIgIDAuNSAtPiAwLjQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzMzICBwb3dlciAxN0UtMyAgMC41IC0+IDAuMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMzQgIHBvd2VyIDE3RSsxICAwLjUgLT4gMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMzUgIHBvd2VyIDE3RSsyICAwLjUgLT4gNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzMzYgIHBvd2VyIDE3RSszICAwLjUgLT4gMS4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzM3ICBwb3dlciAwLjE4ICAwLjUgLT4gMC40MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjMzOCAgcG93ZXIgMC4wMTggIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzM5ICBwb3dlciAxOC4wRS0xICAwLjUgLT4gMS4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzQwICBwb3dlciAxOC4wMEUtMiAgMC41IC0+IDAuNDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNDEgIHBvd2VyIDE4RS0zICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0MiAgcG93ZXIgMThFKzEgIDAuNSAtPiAxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0MyAgcG93ZXIgMThFKzIgIDAuNSAtPiA0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0NCAgcG93ZXIgMThFKzMgIDAuNSAtPiAxLjNFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNDUgIHBvd2VyIDAuMTkgIDAuNSAtPiAwLjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzQ2ICBwb3dlciAwLjAxOSAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNDcgIHBvd2VyIDE5LjBFLTEgIDAuNSAtPiAxLjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNDggIHBvd2VyIDE5LjAwRS0yICAwLjUgLT4gMC40NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM0OSAgcG93ZXIgMTlFLTMgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzUwICBwb3dlciAxOUUrMSAgMC41IC0+IDE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzUxICBwb3dlciAxOUUrMiAgMC41IC0+IDQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzUyICBwb3dlciAxOUUrMyAgMC41IC0+IDEuNEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM1MyAgcG93ZXIgMC4yMCAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNTQgIHBvd2VyIDAuMDIwICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM1NSAgcG93ZXIgMjAuMEUtMSAgMC41IC0+IDEuNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM1NiAgcG93ZXIgMjAuMDBFLTIgIDAuNSAtPiAwLjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzU3ICBwb3dlciAyMEUtMyAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNTggIHBvd2VyIDIwRSsxICAwLjUgLT4gMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNTkgIHBvd2VyIDIwRSsyICAwLjUgLT4gNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNjAgIHBvd2VyIDIwRSszICAwLjUgLT4gMS40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzYxICBwb3dlciAwLjIxICAwLjUgLT4gMC40NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM2MiAgcG93ZXIgMC4wMjEgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzYzICBwb3dlciAyMS4wRS0xICAwLjUgLT4gMS40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzY0ICBwb3dlciAyMS4wMEUtMiAgMC41IC0+IDAuNDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNjUgIHBvd2VyIDIxRS0zICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM2NiAgcG93ZXIgMjFFKzEgIDAuNSAtPiAxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM2NyAgcG93ZXIgMjFFKzIgIDAuNSAtPiA0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM2OCAgcG93ZXIgMjFFKzMgIDAuNSAtPiAxLjRFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNjkgIHBvd2VyIDAuMjIgIDAuNSAtPiAwLjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzcwICBwb3dlciAwLjAyMiAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNzEgIHBvd2VyIDIyLjBFLTEgIDAuNSAtPiAxLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNzIgIHBvd2VyIDIyLjAwRS0yICAwLjUgLT4gMC40NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM3MyAgcG93ZXIgMjJFLTMgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzc0ICBwb3dlciAyMkUrMSAgMC41IC0+IDE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzc1ICBwb3dlciAyMkUrMiAgMC41IC0+IDQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzc2ICBwb3dlciAyMkUrMyAgMC41IC0+IDEuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM3NyAgcG93ZXIgMC4yMyAgMC41IC0+IDAuNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDIzNzggIHBvd2VyIDAuMDIzICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM3OSAgcG93ZXIgMjMuMEUtMSAgMC41IC0+IDEuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM4MCAgcG93ZXIgMjMuMDBFLTIgIDAuNSAtPiAwLjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzgxICBwb3dlciAyM0UtMyAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODIgIHBvd2VyIDIzRSsxICAwLjUgLT4gMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODMgIHBvd2VyIDIzRSsyICAwLjUgLT4gNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODQgIHBvd2VyIDIzRSszICAwLjUgLT4gMS41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzg1ICBwb3dlciAwLjI0ICAwLjUgLT4gMC40OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM4NiAgcG93ZXIgMC4wMjQgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzg3ICBwb3dlciAyNC4wRS0xICAwLjUgLT4gMS41ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyMzg4ICBwb3dlciAyNC4wMEUtMiAgMC41IC0+IDAuNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzODkgIHBvd2VyIDI0RS0zICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5MCAgcG93ZXIgMjRFKzEgIDAuNSAtPiAxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5MSAgcG93ZXIgMjRFKzIgIDAuNSAtPiA0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5MiAgcG93ZXIgMjRFKzMgIDAuNSAtPiAxLjVFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDIzOTMgIHBvd2VyIDAuMjUgIDAuNSAtPiAwLjUwIEluZXhhY3QgUm91bmRlZAorcHdzeDIzOTQgIHBvd2VyIDAuMDI1ICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5NSAgcG93ZXIgMjUuMEUtMSAgMC41IC0+IDEuNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5NiAgcG93ZXIgMjUuMDBFLTIgIDAuNSAtPiAwLjUwIEluZXhhY3QgUm91bmRlZAorcHdzeDIzOTcgIHBvd2VyIDI1RS0zICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5OCAgcG93ZXIgMjVFKzEgIDAuNSAtPiAxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjM5OSAgcG93ZXIgMjVFKzIgIDAuNSAtPiA1MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDAwICBwb3dlciAyNUUrMyAgMC41IC0+IDEuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQwMSAgcG93ZXIgMC4yNiAgMC41IC0+IDAuNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MDIgIHBvd2VyIDAuMDI2ICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQwMyAgcG93ZXIgMjYuMEUtMSAgMC41IC0+IDEuNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQwNCAgcG93ZXIgMjYuMDBFLTIgIDAuNSAtPiAwLjUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDA1ICBwb3dlciAyNkUtMyAgMC41IC0+IDAuMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MDYgIHBvd2VyIDI2RSsxICAwLjUgLT4gMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MDcgIHBvd2VyIDI2RSsyICAwLjUgLT4gNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MDggIHBvd2VyIDI2RSszICAwLjUgLT4gMS42RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDA5ICBwb3dlciAwLjI3ICAwLjUgLT4gMC41MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQxMCAgcG93ZXIgMC4wMjcgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDExICBwb3dlciAyNy4wRS0xICAwLjUgLT4gMS42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDEyICBwb3dlciAyNy4wMEUtMiAgMC41IC0+IDAuNTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MTMgIHBvd2VyIDI3RS0zICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQxNCAgcG93ZXIgMjdFKzEgIDAuNSAtPiAxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQxNSAgcG93ZXIgMjdFKzIgIDAuNSAtPiA1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQxNiAgcG93ZXIgMjdFKzMgIDAuNSAtPiAxLjZFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MTcgIHBvd2VyIDAuMjggIDAuNSAtPiAwLjUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDE4ICBwb3dlciAwLjAyOCAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MTkgIHBvd2VyIDI4LjBFLTEgIDAuNSAtPiAxLjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MjAgIHBvd2VyIDI4LjAwRS0yICAwLjUgLT4gMC41MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQyMSAgcG93ZXIgMjhFLTMgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDIyICBwb3dlciAyOEUrMSAgMC41IC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDIzICBwb3dlciAyOEUrMiAgMC41IC0+IDUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDI0ICBwb3dlciAyOEUrMyAgMC41IC0+IDEuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQyNSAgcG93ZXIgMC4yOSAgMC41IC0+IDAuNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MjYgIHBvd2VyIDAuMDI5ICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQyNyAgcG93ZXIgMjkuMEUtMSAgMC41IC0+IDEuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQyOCAgcG93ZXIgMjkuMDBFLTIgIDAuNSAtPiAwLjU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDI5ICBwb3dlciAyOUUtMyAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MzAgIHBvd2VyIDI5RSsxICAwLjUgLT4gMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MzEgIHBvd2VyIDI5RSsyICAwLjUgLT4gNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MzIgIHBvd2VyIDI5RSszICAwLjUgLT4gMS43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDMzICBwb3dlciAwLjMwICAwLjUgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQzNCAgcG93ZXIgMC4wMzAgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDM1ICBwb3dlciAzMC4wRS0xICAwLjUgLT4gMS43ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDM2ICBwb3dlciAzMC4wMEUtMiAgMC41IC0+IDAuNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0MzcgIHBvd2VyIDMwRS0zICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQzOCAgcG93ZXIgMzBFKzEgIDAuNSAtPiAxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQzOSAgcG93ZXIgMzBFKzIgIDAuNSAtPiA1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ0MCAgcG93ZXIgMzBFKzMgIDAuNSAtPiAxLjdFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NDEgIHBvd2VyIDAuMzEgIDAuNSAtPiAwLjU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDQyICBwb3dlciAwLjAzMSAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NDMgIHBvd2VyIDMxLjBFLTEgIDAuNSAtPiAxLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NDQgIHBvd2VyIDMxLjAwRS0yICAwLjUgLT4gMC41NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ0NSAgcG93ZXIgMzFFLTMgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDQ2ICBwb3dlciAzMUUrMSAgMC41IC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDQ3ICBwb3dlciAzMUUrMiAgMC41IC0+IDU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDQ4ICBwb3dlciAzMUUrMyAgMC41IC0+IDEuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ0OSAgcG93ZXIgMC4zMiAgMC41IC0+IDAuNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NTAgIHBvd2VyIDAuMDMyICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ1MSAgcG93ZXIgMzIuMEUtMSAgMC41IC0+IDEuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ1MiAgcG93ZXIgMzIuMDBFLTIgIDAuNSAtPiAwLjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDUzICBwb3dlciAzMkUtMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NTQgIHBvd2VyIDMyRSsxICAwLjUgLT4gMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NTUgIHBvd2VyIDMyRSsyICAwLjUgLT4gNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NTYgIHBvd2VyIDMyRSszICAwLjUgLT4gMS44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDU3ICBwb3dlciAwLjMzICAwLjUgLT4gMC41NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ1OCAgcG93ZXIgMC4wMzMgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDU5ICBwb3dlciAzMy4wRS0xICAwLjUgLT4gMS44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDYwICBwb3dlciAzMy4wMEUtMiAgMC41IC0+IDAuNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NjEgIHBvd2VyIDMzRS0zICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2MiAgcG93ZXIgMzNFKzEgIDAuNSAtPiAxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2MyAgcG93ZXIgMzNFKzIgIDAuNSAtPiA1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2NCAgcG93ZXIgMzNFKzMgIDAuNSAtPiAxLjhFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NjUgIHBvd2VyIDAuMzQgIDAuNSAtPiAwLjU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDY2ICBwb3dlciAwLjAzNCAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NjcgIHBvd2VyIDM0LjBFLTEgIDAuNSAtPiAxLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NjggIHBvd2VyIDM0LjAwRS0yICAwLjUgLT4gMC41OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ2OSAgcG93ZXIgMzRFLTMgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDcwICBwb3dlciAzNEUrMSAgMC41IC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDcxICBwb3dlciAzNEUrMiAgMC41IC0+IDU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDcyICBwb3dlciAzNEUrMyAgMC41IC0+IDEuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ3MyAgcG93ZXIgMC4zNSAgMC41IC0+IDAuNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NzQgIHBvd2VyIDAuMDM1ICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ3NSAgcG93ZXIgMzUuMEUtMSAgMC41IC0+IDEuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ3NiAgcG93ZXIgMzUuMDBFLTIgIDAuNSAtPiAwLjU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDc3ICBwb3dlciAzNUUtMyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NzggIHBvd2VyIDM1RSsxICAwLjUgLT4gMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0NzkgIHBvd2VyIDM1RSsyICAwLjUgLT4gNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODAgIHBvd2VyIDM1RSszICAwLjUgLT4gMS45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDgxICBwb3dlciAwLjM2ICAwLjUgLT4gMC42MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDgyICBwb3dlciAwLjAzNiAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODMgIHBvd2VyIDM2LjBFLTEgIDAuNSAtPiAxLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODQgIHBvd2VyIDM2LjAwRS0yICAwLjUgLT4gMC42MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDg1ICBwb3dlciAzNkUtMyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODYgIHBvd2VyIDM2RSsxICAwLjUgLT4gMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODcgIHBvd2VyIDM2RSsyICAwLjUgLT4gNjAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ4OCAgcG93ZXIgMzZFKzMgIDAuNSAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0ODkgIHBvd2VyIDAuMzcgIDAuNSAtPiAwLjYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDkwICBwb3dlciAwLjAzNyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0OTEgIHBvd2VyIDM3LjBFLTEgIDAuNSAtPiAxLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0OTIgIHBvd2VyIDM3LjAwRS0yICAwLjUgLT4gMC42MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ5MyAgcG93ZXIgMzdFLTMgIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDk0ICBwb3dlciAzN0UrMSAgMC41IC0+IDE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDk1ICBwb3dlciAzN0UrMiAgMC41IC0+IDYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNDk2ICBwb3dlciAzN0UrMyAgMC41IC0+IDEuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ5NyAgcG93ZXIgMC4zOCAgMC41IC0+IDAuNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI0OTggIHBvd2VyIDAuMDM4ICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjQ5OSAgcG93ZXIgMzguMEUtMSAgMC41IC0+IDEuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUwMCAgcG93ZXIgMzguMDBFLTIgIDAuNSAtPiAwLjYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTAxICBwb3dlciAzOEUtMyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDIgIHBvd2VyIDM4RSsxICAwLjUgLT4gMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDMgIHBvd2VyIDM4RSsyICAwLjUgLT4gNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDQgIHBvd2VyIDM4RSszICAwLjUgLT4gMS45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTA1ICBwb3dlciAwLjM5ICAwLjUgLT4gMC42MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUwNiAgcG93ZXIgMC4wMzkgIDAuNSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTA3ICBwb3dlciAzOS4wRS0xICAwLjUgLT4gMi4wICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTA4ICBwb3dlciAzOS4wMEUtMiAgMC41IC0+IDAuNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MDkgIHBvd2VyIDM5RS0zICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUxMCAgcG93ZXIgMzlFKzEgIDAuNSAtPiAyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUxMSAgcG93ZXIgMzlFKzIgIDAuNSAtPiA2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUxMiAgcG93ZXIgMzlFKzMgIDAuNSAtPiAyLjBFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MTMgIHBvd2VyIDAuNDAgIDAuNSAtPiAwLjYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTE0ICBwb3dlciAwLjA0MCAgMC41IC0+IDAuMjAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUxNSAgcG93ZXIgNDAuMEUtMSAgMC41IC0+IDIuMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTE2ICBwb3dlciA0MC4wMEUtMiAgMC41IC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MTcgIHBvd2VyIDQwRS0zICAwLjUgLT4gMC4yMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTE4ICBwb3dlciA0MEUrMSAgMC41IC0+IDIwIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MTkgIHBvd2VyIDQwRSsyICAwLjUgLT4gNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjAgIHBvd2VyIDQwRSszICAwLjUgLT4gMi4wRSsyIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjEgIHBvd2VyIDAuNDEgIDAuNSAtPiAwLjY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTIyICBwb3dlciAwLjA0MSAgMC41IC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjMgIHBvd2VyIDQxLjBFLTEgIDAuNSAtPiAyLjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MjQgIHBvd2VyIDQxLjAwRS0yICAwLjUgLT4gMC42NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUyNSAgcG93ZXIgNDFFLTMgIDAuNSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTI2ICBwb3dlciA0MUUrMSAgMC41IC0+IDIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTI3ICBwb3dlciA0MUUrMiAgMC41IC0+IDY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTI4ICBwb3dlciA0MUUrMyAgMC41IC0+IDIuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUyOSAgcG93ZXIgMC40MiAgMC41IC0+IDAuNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MzAgIHBvd2VyIDAuMDQyICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUzMSAgcG93ZXIgNDIuMEUtMSAgMC41IC0+IDIuMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUzMiAgcG93ZXIgNDIuMDBFLTIgIDAuNSAtPiAwLjY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTMzICBwb3dlciA0MkUtMyAgMC41IC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MzQgIHBvd2VyIDQyRSsxICAwLjUgLT4gMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MzUgIHBvd2VyIDQyRSsyICAwLjUgLT4gNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1MzYgIHBvd2VyIDQyRSszICAwLjUgLT4gMi4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTM3ICBwb3dlciAwLjQzICAwLjUgLT4gMC42NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjUzOCAgcG93ZXIgMC4wNDMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTM5ICBwb3dlciA0My4wRS0xICAwLjUgLT4gMi4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTQwICBwb3dlciA0My4wMEUtMiAgMC41IC0+IDAuNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NDEgIHBvd2VyIDQzRS0zICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0MiAgcG93ZXIgNDNFKzEgIDAuNSAtPiAyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0MyAgcG93ZXIgNDNFKzIgIDAuNSAtPiA2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0NCAgcG93ZXIgNDNFKzMgIDAuNSAtPiAyLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NDUgIHBvd2VyIDAuNDQgIDAuNSAtPiAwLjY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTQ2ICBwb3dlciAwLjA0NCAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NDcgIHBvd2VyIDQ0LjBFLTEgIDAuNSAtPiAyLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NDggIHBvd2VyIDQ0LjAwRS0yICAwLjUgLT4gMC42NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU0OSAgcG93ZXIgNDRFLTMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTUwICBwb3dlciA0NEUrMSAgMC41IC0+IDIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTUxICBwb3dlciA0NEUrMiAgMC41IC0+IDY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTUyICBwb3dlciA0NEUrMyAgMC41IC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU1MyAgcG93ZXIgMC40NSAgMC41IC0+IDAuNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NTQgIHBvd2VyIDAuMDQ1ICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU1NSAgcG93ZXIgNDUuMEUtMSAgMC41IC0+IDIuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU1NiAgcG93ZXIgNDUuMDBFLTIgIDAuNSAtPiAwLjY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTU3ICBwb3dlciA0NUUtMyAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NTggIHBvd2VyIDQ1RSsxICAwLjUgLT4gMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NTkgIHBvd2VyIDQ1RSsyICAwLjUgLT4gNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NjAgIHBvd2VyIDQ1RSszICAwLjUgLT4gMi4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTYxICBwb3dlciAwLjQ2ICAwLjUgLT4gMC42OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU2MiAgcG93ZXIgMC4wNDYgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTYzICBwb3dlciA0Ni4wRS0xICAwLjUgLT4gMi4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTY0ICBwb3dlciA0Ni4wMEUtMiAgMC41IC0+IDAuNjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NjUgIHBvd2VyIDQ2RS0zICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU2NiAgcG93ZXIgNDZFKzEgIDAuNSAtPiAyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU2NyAgcG93ZXIgNDZFKzIgIDAuNSAtPiA2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU2OCAgcG93ZXIgNDZFKzMgIDAuNSAtPiAyLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NjkgIHBvd2VyIDAuNDcgIDAuNSAtPiAwLjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTcwICBwb3dlciAwLjA0NyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NzEgIHBvd2VyIDQ3LjBFLTEgIDAuNSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NzIgIHBvd2VyIDQ3LjAwRS0yICAwLjUgLT4gMC42OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU3MyAgcG93ZXIgNDdFLTMgIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTc0ICBwb3dlciA0N0UrMSAgMC41IC0+IDIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTc1ICBwb3dlciA0N0UrMiAgMC41IC0+IDY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTc2ICBwb3dlciA0N0UrMyAgMC41IC0+IDIuMkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU3NyAgcG93ZXIgMC40OCAgMC41IC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1NzggIHBvd2VyIDAuMDQ4ICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU3OSAgcG93ZXIgNDguMEUtMSAgMC41IC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU4MCAgcG93ZXIgNDguMDBFLTIgIDAuNSAtPiAwLjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTgxICBwb3dlciA0OEUtMyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODIgIHBvd2VyIDQ4RSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODMgIHBvd2VyIDQ4RSsyICAwLjUgLT4gNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODQgIHBvd2VyIDQ4RSszICAwLjUgLT4gMi4yRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTg1ICBwb3dlciAwLjQ5ICAwLjUgLT4gMC43MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTg2ICBwb3dlciAwLjA0OSAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODcgIHBvd2VyIDQ5LjBFLTEgIDAuNSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1ODggIHBvd2VyIDQ5LjAwRS0yICAwLjUgLT4gMC43MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTg5ICBwb3dlciA0OUUtMyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTAgIHBvd2VyIDQ5RSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTEgIHBvd2VyIDQ5RSsyICAwLjUgLT4gNzAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU5MiAgcG93ZXIgNDlFKzMgIDAuNSAtPiAyLjJFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTMgIHBvd2VyIDAuNTAgIDAuNSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTk0ICBwb3dlciAwLjA1MCAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTUgIHBvd2VyIDUwLjBFLTEgIDAuNSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI1OTYgIHBvd2VyIDUwLjAwRS0yICAwLjUgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjU5NyAgcG93ZXIgNTBFLTMgIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTk4ICBwb3dlciA1MEUrMSAgMC41IC0+IDIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNTk5ICBwb3dlciA1MEUrMiAgMC41IC0+IDcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjAwICBwb3dlciA1MEUrMyAgMC41IC0+IDIuMkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYwMSAgcG93ZXIgMC41MSAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MDIgIHBvd2VyIDAuMDUxICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYwMyAgcG93ZXIgNTEuMEUtMSAgMC41IC0+IDIuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYwNCAgcG93ZXIgNTEuMDBFLTIgIDAuNSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjA1ICBwb3dlciA1MUUtMyAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MDYgIHBvd2VyIDUxRSsxICAwLjUgLT4gMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MDcgIHBvd2VyIDUxRSsyICAwLjUgLT4gNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MDggIHBvd2VyIDUxRSszICAwLjUgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjA5ICBwb3dlciAwLjUyICAwLjUgLT4gMC43MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYxMCAgcG93ZXIgMC4wNTIgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjExICBwb3dlciA1Mi4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjEyICBwb3dlciA1Mi4wMEUtMiAgMC41IC0+IDAuNzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MTMgIHBvd2VyIDUyRS0zICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYxNCAgcG93ZXIgNTJFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYxNSAgcG93ZXIgNTJFKzIgIDAuNSAtPiA3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYxNiAgcG93ZXIgNTJFKzMgIDAuNSAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MTcgIHBvd2VyIDAuNTMgIDAuNSAtPiAwLjczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjE4ICBwb3dlciAwLjA1MyAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MTkgIHBvd2VyIDUzLjBFLTEgIDAuNSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MjAgIHBvd2VyIDUzLjAwRS0yICAwLjUgLT4gMC43MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYyMSAgcG93ZXIgNTNFLTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjIyICBwb3dlciA1M0UrMSAgMC41IC0+IDIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjIzICBwb3dlciA1M0UrMiAgMC41IC0+IDczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjI0ICBwb3dlciA1M0UrMyAgMC41IC0+IDIuM0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYyNSAgcG93ZXIgMC41NCAgMC41IC0+IDAuNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MjYgIHBvd2VyIDAuMDU0ICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYyNyAgcG93ZXIgNTQuMEUtMSAgMC41IC0+IDIuMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYyOCAgcG93ZXIgNTQuMDBFLTIgIDAuNSAtPiAwLjczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjI5ICBwb3dlciA1NEUtMyAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MzAgIHBvd2VyIDU0RSsxICAwLjUgLT4gMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MzEgIHBvd2VyIDU0RSsyICAwLjUgLT4gNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MzIgIHBvd2VyIDU0RSszICAwLjUgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjMzICBwb3dlciAwLjU1ICAwLjUgLT4gMC43NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYzNCAgcG93ZXIgMC4wNTUgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjM1ICBwb3dlciA1NS4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjM2ICBwb3dlciA1NS4wMEUtMiAgMC41IC0+IDAuNzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2MzcgIHBvd2VyIDU1RS0zICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYzOCAgcG93ZXIgNTVFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjYzOSAgcG93ZXIgNTVFKzIgIDAuNSAtPiA3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY0MCAgcG93ZXIgNTVFKzMgIDAuNSAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NDEgIHBvd2VyIDAuNTYgIDAuNSAtPiAwLjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjQyICBwb3dlciAwLjA1NiAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NDMgIHBvd2VyIDU2LjBFLTEgIDAuNSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NDQgIHBvd2VyIDU2LjAwRS0yICAwLjUgLT4gMC43NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY0NSAgcG93ZXIgNTZFLTMgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjQ2ICBwb3dlciA1NkUrMSAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjQ3ICBwb3dlciA1NkUrMiAgMC41IC0+IDc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjQ4ICBwb3dlciA1NkUrMyAgMC41IC0+IDIuNEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY0OSAgcG93ZXIgMC41NyAgMC41IC0+IDAuNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NTAgIHBvd2VyIDAuMDU3ICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY1MSAgcG93ZXIgNTcuMEUtMSAgMC41IC0+IDIuNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY1MiAgcG93ZXIgNTcuMDBFLTIgIDAuNSAtPiAwLjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjUzICBwb3dlciA1N0UtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NTQgIHBvd2VyIDU3RSsxICAwLjUgLT4gMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NTUgIHBvd2VyIDU3RSsyICAwLjUgLT4gNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NTYgIHBvd2VyIDU3RSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjU3ICBwb3dlciAwLjU4ICAwLjUgLT4gMC43NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY1OCAgcG93ZXIgMC4wNTggIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjU5ICBwb3dlciA1OC4wRS0xICAwLjUgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjYwICBwb3dlciA1OC4wMEUtMiAgMC41IC0+IDAuNzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NjEgIHBvd2VyIDU4RS0zICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2MiAgcG93ZXIgNThFKzEgIDAuNSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2MyAgcG93ZXIgNThFKzIgIDAuNSAtPiA3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2NCAgcG93ZXIgNThFKzMgIDAuNSAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NjUgIHBvd2VyIDAuNTkgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjY2ICBwb3dlciAwLjA1OSAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NjcgIHBvd2VyIDU5LjBFLTEgIDAuNSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NjggIHBvd2VyIDU5LjAwRS0yICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY2OSAgcG93ZXIgNTlFLTMgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjcwICBwb3dlciA1OUUrMSAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjcxICBwb3dlciA1OUUrMiAgMC41IC0+IDc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjcyICBwb3dlciA1OUUrMyAgMC41IC0+IDIuNEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY3MyAgcG93ZXIgMC42MCAgMC41IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NzQgIHBvd2VyIDAuMDYwICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY3NSAgcG93ZXIgNjAuMEUtMSAgMC41IC0+IDIuNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY3NiAgcG93ZXIgNjAuMDBFLTIgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjc3ICBwb3dlciA2MEUtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NzggIHBvd2VyIDYwRSsxICAwLjUgLT4gMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2NzkgIHBvd2VyIDYwRSsyICAwLjUgLT4gNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2ODAgIHBvd2VyIDYwRSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjgxICBwb3dlciAwLjYxICAwLjUgLT4gMC43OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY4MiAgcG93ZXIgMC4wNjEgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjgzICBwb3dlciA2MS4wRS0xICAwLjUgLT4gMi41ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjg0ICBwb3dlciA2MS4wMEUtMiAgMC41IC0+IDAuNzggIEluZXhhY3QgUm91bmRlZAorcHdzeDI2ODUgIHBvd2VyIDYxRS0zICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY4NiAgcG93ZXIgNjFFKzEgIDAuNSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY4NyAgcG93ZXIgNjFFKzIgIDAuNSAtPiA3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY4OCAgcG93ZXIgNjFFKzMgIDAuNSAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2ODkgIHBvd2VyIDAuNjIgIDAuNSAtPiAwLjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjkwICBwb3dlciAwLjA2MiAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2OTEgIHBvd2VyIDYyLjBFLTEgIDAuNSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2OTIgIHBvd2VyIDYyLjAwRS0yICAwLjUgLT4gMC43OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY5MyAgcG93ZXIgNjJFLTMgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjk0ICBwb3dlciA2MkUrMSAgMC41IC0+IDI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjk1ICBwb3dlciA2MkUrMiAgMC41IC0+IDc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNjk2ICBwb3dlciA2MkUrMyAgMC41IC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY5NyAgcG93ZXIgMC42MyAgMC41IC0+IDAuNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI2OTggIHBvd2VyIDAuMDYzICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjY5OSAgcG93ZXIgNjMuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcwMCAgcG93ZXIgNjMuMDBFLTIgIDAuNSAtPiAwLjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzAxICBwb3dlciA2M0UtMyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDIgIHBvd2VyIDYzRSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDMgIHBvd2VyIDYzRSsyICAwLjUgLT4gNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDQgIHBvd2VyIDYzRSszICAwLjUgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzA1ICBwb3dlciAwLjY0ICAwLjUgLT4gMC44MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzA2ICBwb3dlciAwLjA2NCAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDcgIHBvd2VyIDY0LjBFLTEgIDAuNSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MDggIHBvd2VyIDY0LjAwRS0yICAwLjUgLT4gMC44MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzA5ICBwb3dlciA2NEUtMyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTAgIHBvd2VyIDY0RSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTEgIHBvd2VyIDY0RSsyICAwLjUgLT4gODAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcxMiAgcG93ZXIgNjRFKzMgIDAuNSAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTMgIHBvd2VyIDAuNjUgIDAuNSAtPiAwLjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzE0ICBwb3dlciAwLjA2NSAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTUgIHBvd2VyIDY1LjBFLTEgIDAuNSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MTYgIHBvd2VyIDY1LjAwRS0yICAwLjUgLT4gMC44MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcxNyAgcG93ZXIgNjVFLTMgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzE4ICBwb3dlciA2NUUrMSAgMC41IC0+IDI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzE5ICBwb3dlciA2NUUrMiAgMC41IC0+IDgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzIwICBwb3dlciA2NUUrMyAgMC41IC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcyMSAgcG93ZXIgMC42NiAgMC41IC0+IDAuODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MjIgIHBvd2VyIDAuMDY2ICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcyMyAgcG93ZXIgNjYuMEUtMSAgMC41IC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjcyNCAgcG93ZXIgNjYuMDBFLTIgIDAuNSAtPiAwLjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzI1ICBwb3dlciA2NkUtMyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MjYgIHBvd2VyIDY2RSsxICAwLjUgLT4gMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MjcgIHBvd2VyIDY2RSsyICAwLjUgLT4gODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MjggIHBvd2VyIDY2RSszICAwLjUgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzI5ICBwb3dlciAwLjY3ICAwLjUgLT4gMC44MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjczMCAgcG93ZXIgMC4wNjcgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzMxICBwb3dlciA2Ny4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzMyICBwb3dlciA2Ny4wMEUtMiAgMC41IC0+IDAuODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MzMgIHBvd2VyIDY3RS0zICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjczNCAgcG93ZXIgNjdFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjczNSAgcG93ZXIgNjdFKzIgIDAuNSAtPiA4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjczNiAgcG93ZXIgNjdFKzMgIDAuNSAtPiAyLjZFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MzcgIHBvd2VyIDAuNjggIDAuNSAtPiAwLjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzM4ICBwb3dlciAwLjA2OCAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3MzkgIHBvd2VyIDY4LjBFLTEgIDAuNSAtPiAyLjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NDAgIHBvd2VyIDY4LjAwRS0yICAwLjUgLT4gMC44MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc0MSAgcG93ZXIgNjhFLTMgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQyICBwb3dlciA2OEUrMSAgMC41IC0+IDI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQzICBwb3dlciA2OEUrMiAgMC41IC0+IDgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQ0ICBwb3dlciA2OEUrMyAgMC41IC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc0NSAgcG93ZXIgMC42OSAgMC41IC0+IDAuODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NDYgIHBvd2VyIDAuMDY5ICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc0NyAgcG93ZXIgNjkuMEUtMSAgMC41IC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc0OCAgcG93ZXIgNjkuMDBFLTIgIDAuNSAtPiAwLjgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzQ5ICBwb3dlciA2OUUtMyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NTAgIHBvd2VyIDY5RSsxICAwLjUgLT4gMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NTEgIHBvd2VyIDY5RSsyICAwLjUgLT4gODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NTIgIHBvd2VyIDY5RSszICAwLjUgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzUzICBwb3dlciAwLjcwICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc1NCAgcG93ZXIgMC4wNzAgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzU1ICBwb3dlciA3MC4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzU2ICBwb3dlciA3MC4wMEUtMiAgMC41IC0+IDAuODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NTcgIHBvd2VyIDcwRS0zICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc1OCAgcG93ZXIgNzBFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc1OSAgcG93ZXIgNzBFKzIgIDAuNSAtPiA4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc2MCAgcG93ZXIgNzBFKzMgIDAuNSAtPiAyLjZFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NjEgIHBvd2VyIDAuNzEgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzYyICBwb3dlciAwLjA3MSAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NjMgIHBvd2VyIDcxLjBFLTEgIDAuNSAtPiAyLjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NjQgIHBvd2VyIDcxLjAwRS0yICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc2NSAgcG93ZXIgNzFFLTMgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzY2ICBwb3dlciA3MUUrMSAgMC41IC0+IDI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzY3ICBwb3dlciA3MUUrMiAgMC41IC0+IDg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzY4ICBwb3dlciA3MUUrMyAgMC41IC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc2OSAgcG93ZXIgMC43MiAgMC41IC0+IDAuODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NzAgIHBvd2VyIDAuMDcyICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc3MSAgcG93ZXIgNzIuMEUtMSAgMC41IC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc3MiAgcG93ZXIgNzIuMDBFLTIgIDAuNSAtPiAwLjg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzczICBwb3dlciA3MkUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NzQgIHBvd2VyIDcyRSsxICAwLjUgLT4gMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NzUgIHBvd2VyIDcyRSsyICAwLjUgLT4gODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3NzYgIHBvd2VyIDcyRSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzc3ICBwb3dlciAwLjczICAwLjUgLT4gMC44NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc3OCAgcG93ZXIgMC4wNzMgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzc5ICBwb3dlciA3My4wRS0xICAwLjUgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzgwICBwb3dlciA3My4wMEUtMiAgMC41IC0+IDAuODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3ODEgIHBvd2VyIDczRS0zICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4MiAgcG93ZXIgNzNFKzEgIDAuNSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4MyAgcG93ZXIgNzNFKzIgIDAuNSAtPiA4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4NCAgcG93ZXIgNzNFKzMgIDAuNSAtPiAyLjdFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3ODUgIHBvd2VyIDAuNzQgIDAuNSAtPiAwLjg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzg2ICBwb3dlciAwLjA3NCAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3ODcgIHBvd2VyIDc0LjBFLTEgIDAuNSAtPiAyLjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3ODggIHBvd2VyIDc0LjAwRS0yICAwLjUgLT4gMC44NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc4OSAgcG93ZXIgNzRFLTMgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzkwICBwb3dlciA3NEUrMSAgMC41IC0+IDI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzkxICBwb3dlciA3NEUrMiAgMC41IC0+IDg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzkyICBwb3dlciA3NEUrMyAgMC41IC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc5MyAgcG93ZXIgMC43NSAgMC41IC0+IDAuODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3OTQgIHBvd2VyIDAuMDc1ICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc5NSAgcG93ZXIgNzUuMEUtMSAgMC41IC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjc5NiAgcG93ZXIgNzUuMDBFLTIgIDAuNSAtPiAwLjg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyNzk3ICBwb3dlciA3NUUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3OTggIHBvd2VyIDc1RSsxICAwLjUgLT4gMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI3OTkgIHBvd2VyIDc1RSsyICAwLjUgLT4gODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MDAgIHBvd2VyIDc1RSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODAxICBwb3dlciAwLjc2ICAwLjUgLT4gMC44NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgwMiAgcG93ZXIgMC4wNzYgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODAzICBwb3dlciA3Ni4wRS0xICAwLjUgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODA0ICBwb3dlciA3Ni4wMEUtMiAgMC41IC0+IDAuODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MDUgIHBvd2VyIDc2RS0zICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgwNiAgcG93ZXIgNzZFKzEgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgwNyAgcG93ZXIgNzZFKzIgIDAuNSAtPiA4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgwOCAgcG93ZXIgNzZFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MDkgIHBvd2VyIDAuNzcgIDAuNSAtPiAwLjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODEwICBwb3dlciAwLjA3NyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MTEgIHBvd2VyIDc3LjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MTIgIHBvd2VyIDc3LjAwRS0yICAwLjUgLT4gMC44OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgxMyAgcG93ZXIgNzdFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODE0ICBwb3dlciA3N0UrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODE1ICBwb3dlciA3N0UrMiAgMC41IC0+IDg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODE2ICBwb3dlciA3N0UrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgxNyAgcG93ZXIgMC43OCAgMC41IC0+IDAuODggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MTggIHBvd2VyIDAuMDc4ICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgxOSAgcG93ZXIgNzguMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgyMCAgcG93ZXIgNzguMDBFLTIgIDAuNSAtPiAwLjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODIxICBwb3dlciA3OEUtMyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjIgIHBvd2VyIDc4RSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjMgIHBvd2VyIDc4RSsyICAwLjUgLT4gODggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjQgIHBvd2VyIDc4RSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODI1ICBwb3dlciAwLjc5ICAwLjUgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgyNiAgcG93ZXIgMC4wNzkgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODI3ICBwb3dlciA3OS4wRS0xICAwLjUgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODI4ICBwb3dlciA3OS4wMEUtMiAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MjkgIHBvd2VyIDc5RS0zICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgzMCAgcG93ZXIgNzlFKzEgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgzMSAgcG93ZXIgNzlFKzIgIDAuNSAtPiA4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgzMiAgcG93ZXIgNzlFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MzMgIHBvd2VyIDAuODAgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODM0ICBwb3dlciAwLjA4MCAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MzUgIHBvd2VyIDgwLjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZAorcHdzeDI4MzYgIHBvd2VyIDgwLjAwRS0yICAwLjUgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjgzNyAgcG93ZXIgODBFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODM4ICBwb3dlciA4MEUrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODM5ICBwb3dlciA4MEUrMiAgMC41IC0+IDg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQwICBwb3dlciA4MEUrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg0MSAgcG93ZXIgMC44MSAgMC41IC0+IDAuOTAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg0MiAgcG93ZXIgMC4wODEgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQzICBwb3dlciA4MS4wRS0xICAwLjUgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQ0ICBwb3dlciA4MS4wMEUtMiAgMC41IC0+IDAuOTAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg0NSAgcG93ZXIgODFFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQ2ICBwb3dlciA4MUUrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQ3ICBwb3dlciA4MUUrMiAgMC41IC0+IDkwIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NDggIHBvd2VyIDgxRSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODQ5ICBwb3dlciAwLjgyICAwLjUgLT4gMC45MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg1MCAgcG93ZXIgMC4wODIgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODUxICBwb3dlciA4Mi4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODUyICBwb3dlciA4Mi4wMEUtMiAgMC41IC0+IDAuOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NTMgIHBvd2VyIDgyRS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg1NCAgcG93ZXIgODJFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg1NSAgcG93ZXIgODJFKzIgIDAuNSAtPiA5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg1NiAgcG93ZXIgODJFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NTcgIHBvd2VyIDAuODMgIDAuNSAtPiAwLjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODU4ICBwb3dlciAwLjA4MyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NTkgIHBvd2VyIDgzLjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NjAgIHBvd2VyIDgzLjAwRS0yICAwLjUgLT4gMC45MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg2MSAgcG93ZXIgODNFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODYyICBwb3dlciA4M0UrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODYzICBwb3dlciA4M0UrMiAgMC41IC0+IDkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODY0ICBwb3dlciA4M0UrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg2NSAgcG93ZXIgMC44NCAgMC41IC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NjYgIHBvd2VyIDAuMDg0ICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg2NyAgcG93ZXIgODQuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg2OCAgcG93ZXIgODQuMDBFLTIgIDAuNSAtPiAwLjkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODY5ICBwb3dlciA4NEUtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NzAgIHBvd2VyIDg0RSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NzEgIHBvd2VyIDg0RSsyICAwLjUgLT4gOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NzIgIHBvd2VyIDg0RSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODczICBwb3dlciAwLjg1ICAwLjUgLT4gMC45MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg3NCAgcG93ZXIgMC4wODUgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODc1ICBwb3dlciA4NS4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODc2ICBwb3dlciA4NS4wMEUtMiAgMC41IC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4NzcgIHBvd2VyIDg1RS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg3OCAgcG93ZXIgODVFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg3OSAgcG93ZXIgODVFKzIgIDAuNSAtPiA5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg4MCAgcG93ZXIgODVFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4ODEgIHBvd2VyIDAuODYgIDAuNSAtPiAwLjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODgyICBwb3dlciAwLjA4NiAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4ODMgIHBvd2VyIDg2LjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4ODQgIHBvd2VyIDg2LjAwRS0yICAwLjUgLT4gMC45MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg4NSAgcG93ZXIgODZFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODg2ICBwb3dlciA4NkUrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODg3ICBwb3dlciA4NkUrMiAgMC41IC0+IDkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODg4ICBwb3dlciA4NkUrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg4OSAgcG93ZXIgMC44NyAgMC41IC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4OTAgIHBvd2VyIDAuMDg3ICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg5MSAgcG93ZXIgODcuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg5MiAgcG93ZXIgODcuMDBFLTIgIDAuNSAtPiAwLjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODkzICBwb3dlciA4N0UtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4OTQgIHBvd2VyIDg3RSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4OTUgIHBvd2VyIDg3RSsyICAwLjUgLT4gOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDI4OTYgIHBvd2VyIDg3RSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODk3ICBwb3dlciAwLjg4ICAwLjUgLT4gMC45NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjg5OCAgcG93ZXIgMC4wODggIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyODk5ICBwb3dlciA4OC4wRS0xICAwLjUgLT4gMy4wICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTAwICBwb3dlciA4OC4wMEUtMiAgMC41IC0+IDAuOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MDEgIHBvd2VyIDg4RS0zICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwMiAgcG93ZXIgODhFKzEgIDAuNSAtPiAzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwMyAgcG93ZXIgODhFKzIgIDAuNSAtPiA5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwNCAgcG93ZXIgODhFKzMgIDAuNSAtPiAzLjBFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MDUgIHBvd2VyIDAuODkgIDAuNSAtPiAwLjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTA2ICBwb3dlciAwLjA4OSAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MDcgIHBvd2VyIDg5LjBFLTEgIDAuNSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MDggIHBvd2VyIDg5LjAwRS0yICAwLjUgLT4gMC45NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkwOSAgcG93ZXIgODlFLTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTEwICBwb3dlciA4OUUrMSAgMC41IC0+IDMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTExICBwb3dlciA4OUUrMiAgMC41IC0+IDk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTEyICBwb3dlciA4OUUrMyAgMC41IC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkxMyAgcG93ZXIgMC45MCAgMC41IC0+IDAuOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MTQgIHBvd2VyIDAuMDkwICAwLjUgLT4gMC4zMCBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTE1ICBwb3dlciA5MC4wRS0xICAwLjUgLT4gMy4wIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MTYgIHBvd2VyIDkwLjAwRS0yICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkxNyAgcG93ZXIgOTBFLTMgIDAuNSAtPiAwLjMwIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MTggIHBvd2VyIDkwRSsxICAwLjUgLT4gMzAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkxOSAgcG93ZXIgOTBFKzIgIDAuNSAtPiA5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyMCAgcG93ZXIgOTBFKzMgIDAuNSAtPiAzLjBFKzIgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyMSAgcG93ZXIgMC45MSAgMC41IC0+IDAuOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MjIgIHBvd2VyIDAuMDkxICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyMyAgcG93ZXIgOTEuMEUtMSAgMC41IC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkyNCAgcG93ZXIgOTEuMDBFLTIgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTI1ICBwb3dlciA5MUUtMyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MjYgIHBvd2VyIDkxRSsxICAwLjUgLT4gMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MjcgIHBvd2VyIDkxRSsyICAwLjUgLT4gOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MjggIHBvd2VyIDkxRSszICAwLjUgLT4gMy4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTI5ICBwb3dlciAwLjkyICAwLjUgLT4gMC45NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkzMCAgcG93ZXIgMC4wOTIgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTMxICBwb3dlciA5Mi4wRS0xICAwLjUgLT4gMy4wICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTMyICBwb3dlciA5Mi4wMEUtMiAgMC41IC0+IDAuOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MzMgIHBvd2VyIDkyRS0zICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkzNCAgcG93ZXIgOTJFKzEgIDAuNSAtPiAzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkzNSAgcG93ZXIgOTJFKzIgIDAuNSAtPiA5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MjkzNiAgcG93ZXIgOTJFKzMgIDAuNSAtPiAzLjBFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MzcgIHBvd2VyIDAuOTMgIDAuNSAtPiAwLjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTM4ICBwb3dlciAwLjA5MyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5MzkgIHBvd2VyIDkzLjBFLTEgIDAuNSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NDAgIHBvd2VyIDkzLjAwRS0yICAwLjUgLT4gMC45NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk0MSAgcG93ZXIgOTNFLTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQyICBwb3dlciA5M0UrMSAgMC41IC0+IDMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQzICBwb3dlciA5M0UrMiAgMC41IC0+IDk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQ0ICBwb3dlciA5M0UrMyAgMC41IC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk0NSAgcG93ZXIgMC45NCAgMC41IC0+IDAuOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NDYgIHBvd2VyIDAuMDk0ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk0NyAgcG93ZXIgOTQuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk0OCAgcG93ZXIgOTQuMDBFLTIgIDAuNSAtPiAwLjk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTQ5ICBwb3dlciA5NEUtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NTAgIHBvd2VyIDk0RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NTEgIHBvd2VyIDk0RSsyICAwLjUgLT4gOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NTIgIHBvd2VyIDk0RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTUzICBwb3dlciAwLjk1ICAwLjUgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk1NCAgcG93ZXIgMC4wOTUgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTU1ICBwb3dlciA5NS4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTU2ICBwb3dlciA5NS4wMEUtMiAgMC41IC0+IDAuOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NTcgIHBvd2VyIDk1RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk1OCAgcG93ZXIgOTVFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk1OSAgcG93ZXIgOTVFKzIgIDAuNSAtPiA5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk2MCAgcG93ZXIgOTVFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NjEgIHBvd2VyIDAuOTYgIDAuNSAtPiAwLjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTYyICBwb3dlciAwLjA5NiAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NjMgIHBvd2VyIDk2LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NjQgIHBvd2VyIDk2LjAwRS0yICAwLjUgLT4gMC45OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk2NSAgcG93ZXIgOTZFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTY2ICBwb3dlciA5NkUrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTY3ICBwb3dlciA5NkUrMiAgMC41IC0+IDk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTY4ICBwb3dlciA5NkUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk2OSAgcG93ZXIgMC45NyAgMC41IC0+IDAuOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NzAgIHBvd2VyIDAuMDk3ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk3MSAgcG93ZXIgOTcuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk3MiAgcG93ZXIgOTcuMDBFLTIgIDAuNSAtPiAwLjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTczICBwb3dlciA5N0UtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NzQgIHBvd2VyIDk3RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NzUgIHBvd2VyIDk3RSsyICAwLjUgLT4gOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDI5NzYgIHBvd2VyIDk3RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTc3ICBwb3dlciAwLjk4ICAwLjUgLT4gMC45OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk3OCAgcG93ZXIgMC4wOTggIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTc5ICBwb3dlciA5OC4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTgwICBwb3dlciA5OC4wMEUtMiAgMC41IC0+IDAuOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5ODEgIHBvd2VyIDk4RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4MiAgcG93ZXIgOThFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4MyAgcG93ZXIgOThFKzIgIDAuNSAtPiA5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4NCAgcG93ZXIgOThFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5ODUgIHBvd2VyIDAuOTkgIDAuNSAtPiAwLjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTg2ICBwb3dlciAwLjA5OSAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5ODcgIHBvd2VyIDk5LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDI5ODggIHBvd2VyIDk5LjAwRS0yICAwLjUgLT4gMC45OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mjk4OSAgcG93ZXIgOTlFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTkwICBwb3dlciA5OUUrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTkxICBwb3dlciA5OUUrMiAgMC41IC0+IDk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gyOTkyICBwb3dlciA5OUUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCisKKy0tIFByZWNpc2lvbiAzIHNxdWFyZXJvb3QgdGVzdHMgW2V4aGF1c3RpdmUsIGYgYW5kIGYvMTBdCityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiAgIDMKK3B3c3gzMDAxICBwb3dlciAwLjEgIDAuNSAtPiAwLjMxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAwMiAgcG93ZXIgMC4wMSAgMC41IC0+IDAuMTAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDAzICBwb3dlciAwLjIgIDAuNSAtPiAwLjQ0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAwNCAgcG93ZXIgMC4wMiAgMC41IC0+IDAuMTQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDA1ICBwb3dlciAwLjMgIDAuNSAtPiAwLjU0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAwNiAgcG93ZXIgMC4wMyAgMC41IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDA3ICBwb3dlciAwLjQgIDAuNSAtPiAwLjYzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAwOCAgcG93ZXIgMC4wNCAgMC41IC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDA5ICBwb3dlciAwLjUgIDAuNSAtPiAwLjcwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAxMCAgcG93ZXIgMC4wNSAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDExICBwb3dlciAwLjYgIDAuNSAtPiAwLjc3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAxMiAgcG93ZXIgMC4wNiAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDEzICBwb3dlciAwLjcgIDAuNSAtPiAwLjgzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAxNCAgcG93ZXIgMC4wNyAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDE1ICBwb3dlciAwLjggIDAuNSAtPiAwLjg5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAxNiAgcG93ZXIgMC4wOCAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDE3ICBwb3dlciAwLjkgIDAuNSAtPiAwLjk0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAxOCAgcG93ZXIgMC4wOSAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDE5ICBwb3dlciAwLjExICAwLjUgLT4gMC4zMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMjAgIHBvd2VyIDAuMDExICAwLjUgLT4gMC4xMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMjEgIHBvd2VyIDAuMTIgIDAuNSAtPiAwLjM0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyMiAgcG93ZXIgMC4wMTIgIDAuNSAtPiAwLjExMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyMyAgcG93ZXIgMC4xMyAgMC41IC0+IDAuMzYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDI0ICBwb3dlciAwLjAxMyAgMC41IC0+IDAuMTE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDI1ICBwb3dlciAwLjE0ICAwLjUgLT4gMC4zNzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMjYgIHBvd2VyIDAuMDE0ICAwLjUgLT4gMC4xMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMjcgIHBvd2VyIDAuMTUgIDAuNSAtPiAwLjM4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyOCAgcG93ZXIgMC4wMTUgIDAuNSAtPiAwLjEyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAyOSAgcG93ZXIgMC4xNiAgMC41IC0+IDAuNDAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDMwICBwb3dlciAwLjAxNiAgMC41IC0+IDAuMTI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDMxICBwb3dlciAwLjE3ICAwLjUgLT4gMC40MTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzIgIHBvd2VyIDAuMDE3ICAwLjUgLT4gMC4xMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzMgIHBvd2VyIDAuMTggIDAuNSAtPiAwLjQyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAzNCAgcG93ZXIgMC4wMTggIDAuNSAtPiAwLjEzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzAzNSAgcG93ZXIgMC4xOSAgMC41IC0+IDAuNDM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDM2ICBwb3dlciAwLjAxOSAgMC41IC0+IDAuMTM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDM3ICBwb3dlciAwLjIxICAwLjUgLT4gMC40NTggIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzggIHBvd2VyIDAuMDIxICAwLjUgLT4gMC4xNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwMzkgIHBvd2VyIDAuMjIgIDAuNSAtPiAwLjQ2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA0MCAgcG93ZXIgMC4wMjIgIDAuNSAtPiAwLjE0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA0MSAgcG93ZXIgMC4yMyAgMC41IC0+IDAuNDgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQyICBwb3dlciAwLjAyMyAgMC41IC0+IDAuMTUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQzICBwb3dlciAwLjI0ICAwLjUgLT4gMC40OTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNDQgIHBvd2VyIDAuMDI0ICAwLjUgLT4gMC4xNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNDUgIHBvd2VyIDAuMjUgIDAuNSAtPiAwLjUwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA0NiAgcG93ZXIgMC4wMjUgIDAuNSAtPiAwLjE1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA0NyAgcG93ZXIgMC4yNiAgMC41IC0+IDAuNTEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQ4ICBwb3dlciAwLjAyNiAgMC41IC0+IDAuMTYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDQ5ICBwb3dlciAwLjI3ICAwLjUgLT4gMC41MjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNTAgIHBvd2VyIDAuMDI3ICAwLjUgLT4gMC4xNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNTEgIHBvd2VyIDAuMjggIDAuNSAtPiAwLjUyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1MiAgcG93ZXIgMC4wMjggIDAuNSAtPiAwLjE2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1MyAgcG93ZXIgMC4yOSAgMC41IC0+IDAuNTM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDU0ICBwb3dlciAwLjAyOSAgMC41IC0+IDAuMTcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDU1ICBwb3dlciAwLjMxICAwLjUgLT4gMC41NTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNTYgIHBvd2VyIDAuMDMxICAwLjUgLT4gMC4xNzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNTcgIHBvd2VyIDAuMzIgIDAuNSAtPiAwLjU2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1OCAgcG93ZXIgMC4wMzIgIDAuNSAtPiAwLjE3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA1OSAgcG93ZXIgMC4zMyAgMC41IC0+IDAuNTc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDYwICBwb3dlciAwLjAzMyAgMC41IC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDYxICBwb3dlciAwLjM0ICAwLjUgLT4gMC41ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjIgIHBvd2VyIDAuMDM0ICAwLjUgLT4gMC4xODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjMgIHBvd2VyIDAuMzUgIDAuNSAtPiAwLjU5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA2NCAgcG93ZXIgMC4wMzUgIDAuNSAtPiAwLjE4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA2NSAgcG93ZXIgMC4zNiAgMC41IC0+IDAuNjAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDY2ICBwb3dlciAwLjAzNiAgMC41IC0+IDAuMTkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDY3ICBwb3dlciAwLjM3ICAwLjUgLT4gMC42MDggIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjggIHBvd2VyIDAuMDM3ICAwLjUgLT4gMC4xOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNjkgIHBvd2VyIDAuMzggIDAuNSAtPiAwLjYxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA3MCAgcG93ZXIgMC4wMzggIDAuNSAtPiAwLjE5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA3MSAgcG93ZXIgMC4zOSAgMC41IC0+IDAuNjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDcyICBwb3dlciAwLjAzOSAgMC41IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDczICBwb3dlciAwLjQxICAwLjUgLT4gMC42NDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNzQgIHBvd2VyIDAuMDQxICAwLjUgLT4gMC4yMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwNzUgIHBvd2VyIDAuNDIgIDAuNSAtPiAwLjY0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA3NiAgcG93ZXIgMC4wNDIgIDAuNSAtPiAwLjIwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA3NyAgcG93ZXIgMC40MyAgMC41IC0+IDAuNjU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDc4ICBwb3dlciAwLjA0MyAgMC41IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDc5ICBwb3dlciAwLjQ0ICAwLjUgLT4gMC42NjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwODAgIHBvd2VyIDAuMDQ0ICAwLjUgLT4gMC4yMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwODEgIHBvd2VyIDAuNDUgIDAuNSAtPiAwLjY3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4MiAgcG93ZXIgMC4wNDUgIDAuNSAtPiAwLjIxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4MyAgcG93ZXIgMC40NiAgMC41IC0+IDAuNjc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDg0ICBwb3dlciAwLjA0NiAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDg1ICBwb3dlciAwLjQ3ICAwLjUgLT4gMC42ODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwODYgIHBvd2VyIDAuMDQ3ICAwLjUgLT4gMC4yMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwODcgIHBvd2VyIDAuNDggIDAuNSAtPiAwLjY5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4OCAgcG93ZXIgMC4wNDggIDAuNSAtPiAwLjIxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA4OSAgcG93ZXIgMC40OSAgMC41IC0+IDAuNzAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDkwICBwb3dlciAwLjA0OSAgMC41IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDkxICBwb3dlciAwLjUxICAwLjUgLT4gMC43MTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTIgIHBvd2VyIDAuMDUxICAwLjUgLT4gMC4yMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTMgIHBvd2VyIDAuNTIgIDAuNSAtPiAwLjcyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA5NCAgcG93ZXIgMC4wNTIgIDAuNSAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzA5NSAgcG93ZXIgMC41MyAgMC41IC0+IDAuNzI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDk2ICBwb3dlciAwLjA1MyAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMDk3ICBwb3dlciAwLjU0ICAwLjUgLT4gMC43MzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTggIHBvd2VyIDAuMDU0ICAwLjUgLT4gMC4yMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMwOTkgIHBvd2VyIDAuNTUgIDAuNSAtPiAwLjc0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEwMCAgcG93ZXIgMC4wNTUgIDAuNSAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEwMSAgcG93ZXIgMC41NiAgMC41IC0+IDAuNzQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTAyICBwb3dlciAwLjA1NiAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTAzICBwb3dlciAwLjU3ICAwLjUgLT4gMC43NTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMDQgIHBvd2VyIDAuMDU3ICAwLjUgLT4gMC4yMzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMDUgIHBvd2VyIDAuNTggIDAuNSAtPiAwLjc2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEwNiAgcG93ZXIgMC4wNTggIDAuNSAtPiAwLjI0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEwNyAgcG93ZXIgMC41OSAgMC41IC0+IDAuNzY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTA4ICBwb3dlciAwLjA1OSAgMC41IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTA5ICBwb3dlciAwLjYxICAwLjUgLT4gMC43ODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMTAgIHBvd2VyIDAuMDYxICAwLjUgLT4gMC4yNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMTEgIHBvd2VyIDAuNjIgIDAuNSAtPiAwLjc4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExMiAgcG93ZXIgMC4wNjIgIDAuNSAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExMyAgcG93ZXIgMC42MyAgMC41IC0+IDAuNzk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTE0ICBwb3dlciAwLjA2MyAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTE1ICBwb3dlciAwLjY0ICAwLjUgLT4gMC44MDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMTYgIHBvd2VyIDAuMDY0ICAwLjUgLT4gMC4yNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMTcgIHBvd2VyIDAuNjUgIDAuNSAtPiAwLjgwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExOCAgcG93ZXIgMC4wNjUgIDAuNSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzExOSAgcG93ZXIgMC42NiAgMC41IC0+IDAuODEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTIwICBwb3dlciAwLjA2NiAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTIxICBwb3dlciAwLjY3ICAwLjUgLT4gMC44MTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjIgIHBvd2VyIDAuMDY3ICAwLjUgLT4gMC4yNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjMgIHBvd2VyIDAuNjggIDAuNSAtPiAwLjgyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEyNCAgcG93ZXIgMC4wNjggIDAuNSAtPiAwLjI2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEyNSAgcG93ZXIgMC42OSAgMC41IC0+IDAuODMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTI2ICBwb3dlciAwLjA2OSAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTI3ICBwb3dlciAwLjcxICAwLjUgLT4gMC44NDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjggIHBvd2VyIDAuMDcxICAwLjUgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMjkgIHBvd2VyIDAuNzIgIDAuNSAtPiAwLjg0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEzMCAgcG93ZXIgMC4wNzIgIDAuNSAtPiAwLjI2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEzMSAgcG93ZXIgMC43MyAgMC41IC0+IDAuODU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTMyICBwb3dlciAwLjA3MyAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTMzICBwb3dlciAwLjc0ICAwLjUgLT4gMC44NjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMzQgIHBvd2VyIDAuMDc0ICAwLjUgLT4gMC4yNzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxMzUgIHBvd2VyIDAuNzUgIDAuNSAtPiAwLjg2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEzNiAgcG93ZXIgMC4wNzUgIDAuNSAtPiAwLjI3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzEzNyAgcG93ZXIgMC43NiAgMC41IC0+IDAuODcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTM4ICBwb3dlciAwLjA3NiAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTM5ICBwb3dlciAwLjc3ICAwLjUgLT4gMC44NzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNDAgIHBvd2VyIDAuMDc3ICAwLjUgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNDEgIHBvd2VyIDAuNzggIDAuNSAtPiAwLjg4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0MiAgcG93ZXIgMC4wNzggIDAuNSAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0MyAgcG93ZXIgMC43OSAgMC41IC0+IDAuODg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTQ0ICBwb3dlciAwLjA3OSAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTQ1ICBwb3dlciAwLjgxICAwLjUgLT4gMC45MDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNDYgIHBvd2VyIDAuMDgxICAwLjUgLT4gMC4yODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNDcgIHBvd2VyIDAuODIgIDAuNSAtPiAwLjkwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0OCAgcG93ZXIgMC4wODIgIDAuNSAtPiAwLjI4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE0OSAgcG93ZXIgMC44MyAgMC41IC0+IDAuOTExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTUwICBwb3dlciAwLjA4MyAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTUxICBwb3dlciAwLjg0ICAwLjUgLT4gMC45MTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTIgIHBvd2VyIDAuMDg0ICAwLjUgLT4gMC4yOTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTMgIHBvd2VyIDAuODUgIDAuNSAtPiAwLjkyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE1NCAgcG93ZXIgMC4wODUgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE1NSAgcG93ZXIgMC44NiAgMC41IC0+IDAuOTI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTU2ICBwb3dlciAwLjA4NiAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTU3ICBwb3dlciAwLjg3ICAwLjUgLT4gMC45MzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTggIHBvd2VyIDAuMDg3ICAwLjUgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNTkgIHBvd2VyIDAuODggIDAuNSAtPiAwLjkzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE2MCAgcG93ZXIgMC4wODggIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE2MSAgcG93ZXIgMC44OSAgMC41IC0+IDAuOTQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTYyICBwb3dlciAwLjA4OSAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTYzICBwb3dlciAwLjkxICAwLjUgLT4gMC45NTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNjQgIHBvd2VyIDAuMDkxICAwLjUgLT4gMC4zMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNjUgIHBvd2VyIDAuOTIgIDAuNSAtPiAwLjk1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE2NiAgcG93ZXIgMC4wOTIgIDAuNSAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE2NyAgcG93ZXIgMC45MyAgMC41IC0+IDAuOTY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTY4ICBwb3dlciAwLjA5MyAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTY5ICBwb3dlciAwLjk0ICAwLjUgLT4gMC45NzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNzAgIHBvd2VyIDAuMDk0ICAwLjUgLT4gMC4zMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNzEgIHBvd2VyIDAuOTUgIDAuNSAtPiAwLjk3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3MiAgcG93ZXIgMC4wOTUgIDAuNSAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3MyAgcG93ZXIgMC45NiAgMC41IC0+IDAuOTgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTc0ICBwb3dlciAwLjA5NiAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTc1ICBwb3dlciAwLjk3ICAwLjUgLT4gMC45ODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNzYgIHBvd2VyIDAuMDk3ICAwLjUgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxNzcgIHBvd2VyIDAuOTggIDAuNSAtPiAwLjk5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3OCAgcG93ZXIgMC4wOTggIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE3OSAgcG93ZXIgMC45OSAgMC41IC0+IDAuOTk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTgwICBwb3dlciAwLjA5OSAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTgxICBwb3dlciAwLjEwMSAgMC41IC0+IDAuMzE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTgyICBwb3dlciAwLjAxMDEgIDAuNSAtPiAwLjEwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE4MyAgcG93ZXIgMC4xMDIgIDAuNSAtPiAwLjMxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE4NCAgcG93ZXIgMC4wMTAyICAwLjUgLT4gMC4xMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxODUgIHBvd2VyIDAuMTAzICAwLjUgLT4gMC4zMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxODYgIHBvd2VyIDAuMDEwMyAgMC41IC0+IDAuMTAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTg3ICBwb3dlciAwLjEwNCAgMC41IC0+IDAuMzIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTg4ICBwb3dlciAwLjAxMDQgIDAuNSAtPiAwLjEwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE4OSAgcG93ZXIgMC4xMDUgIDAuNSAtPiAwLjMyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE5MCAgcG93ZXIgMC4wMTA1ICAwLjUgLT4gMC4xMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxOTEgIHBvd2VyIDAuMTA2ICAwLjUgLT4gMC4zMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxOTIgIHBvd2VyIDAuMDEwNiAgMC41IC0+IDAuMTAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTkzICBwb3dlciAwLjEwNyAgMC41IC0+IDAuMzI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTk0ICBwb3dlciAwLjAxMDcgIDAuNSAtPiAwLjEwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE5NSAgcG93ZXIgMC4xMDggIDAuNSAtPiAwLjMyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzE5NiAgcG93ZXIgMC4wMTA4ICAwLjUgLT4gMC4xMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxOTcgIHBvd2VyIDAuMTA5ICAwLjUgLT4gMC4zMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMxOTggIHBvd2VyIDAuMDEwOSAgMC41IC0+IDAuMTA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMTk5ICBwb3dlciAwLjExMSAgMC41IC0+IDAuMzMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjAwICBwb3dlciAwLjAxMTEgIDAuNSAtPiAwLjEwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIwMSAgcG93ZXIgMC4xMTIgIDAuNSAtPiAwLjMzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIwMiAgcG93ZXIgMC4wMTEyICAwLjUgLT4gMC4xMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMDMgIHBvd2VyIDAuMTEzICAwLjUgLT4gMC4zMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMDQgIHBvd2VyIDAuMDExMyAgMC41IC0+IDAuMTA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjA1ICBwb3dlciAwLjExNCAgMC41IC0+IDAuMzM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjA2ICBwb3dlciAwLjAxMTQgIDAuNSAtPiAwLjEwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIwNyAgcG93ZXIgMC4xMTUgIDAuNSAtPiAwLjMzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIwOCAgcG93ZXIgMC4wMTE1ICAwLjUgLT4gMC4xMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMDkgIHBvd2VyIDAuMTE2ICAwLjUgLT4gMC4zNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMTAgIHBvd2VyIDAuMDExNiAgMC41IC0+IDAuMTA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjExICBwb3dlciAwLjExNyAgMC41IC0+IDAuMzQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjEyICBwb3dlciAwLjAxMTcgIDAuNSAtPiAwLjEwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIxMyAgcG93ZXIgMC4xMTggIDAuNSAtPiAwLjM0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIxNCAgcG93ZXIgMC4wMTE4ICAwLjUgLT4gMC4xMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMTUgIHBvd2VyIDAuMTE5ICAwLjUgLT4gMC4zNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMTYgIHBvd2VyIDAuMDExOSAgMC41IC0+IDAuMTA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjE3ICBwb3dlciAwLjEyMSAgMC41IC0+IDAuMzQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjE4ICBwb3dlciAwLjAxMjEgIDAuNSAtPiAwLjExMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIxOSAgcG93ZXIgMC4xMjIgIDAuNSAtPiAwLjM0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIyMCAgcG93ZXIgMC4wMTIyICAwLjUgLT4gMC4xMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMjEgIHBvd2VyIDAuMTIzICAwLjUgLT4gMC4zNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMjIgIHBvd2VyIDAuMDEyMyAgMC41IC0+IDAuMTExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjIzICBwb3dlciAwLjEyNCAgMC41IC0+IDAuMzUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjI0ICBwb3dlciAwLjAxMjQgIDAuNSAtPiAwLjExMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIyNSAgcG93ZXIgMC4xMjUgIDAuNSAtPiAwLjM1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIyNiAgcG93ZXIgMC4wMTI1ICAwLjUgLT4gMC4xMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMjcgIHBvd2VyIDAuMTI2ICAwLjUgLT4gMC4zNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMjggIHBvd2VyIDAuMDEyNiAgMC41IC0+IDAuMTEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjI5ICBwb3dlciAwLjEyNyAgMC41IC0+IDAuMzU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjMwICBwb3dlciAwLjAxMjcgIDAuNSAtPiAwLjExMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIzMSAgcG93ZXIgMC4xMjggIDAuNSAtPiAwLjM1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIzMiAgcG93ZXIgMC4wMTI4ICAwLjUgLT4gMC4xMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMzMgIHBvd2VyIDAuMTI5ICAwLjUgLT4gMC4zNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMzQgIHBvd2VyIDAuMDEyOSAgMC41IC0+IDAuMTE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjM1ICBwb3dlciAwLjEzMSAgMC41IC0+IDAuMzYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjM2ICBwb3dlciAwLjAxMzEgIDAuNSAtPiAwLjExNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIzNyAgcG93ZXIgMC4xMzIgIDAuNSAtPiAwLjM2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzIzOCAgcG93ZXIgMC4wMTMyICAwLjUgLT4gMC4xMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyMzkgIHBvd2VyIDAuMTMzICAwLjUgLT4gMC4zNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNDAgIHBvd2VyIDAuMDEzMyAgMC41IC0+IDAuMTE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjQxICBwb3dlciAwLjEzNCAgMC41IC0+IDAuMzY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjQyICBwb3dlciAwLjAxMzQgIDAuNSAtPiAwLjExNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI0MyAgcG93ZXIgMC4xMzUgIDAuNSAtPiAwLjM2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI0NCAgcG93ZXIgMC4wMTM1ICAwLjUgLT4gMC4xMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNDUgIHBvd2VyIDAuMTM2ICAwLjUgLT4gMC4zNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNDYgIHBvd2VyIDAuMDEzNiAgMC41IC0+IDAuMTE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjQ3ICBwb3dlciAwLjEzNyAgMC41IC0+IDAuMzcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjQ4ICBwb3dlciAwLjAxMzcgIDAuNSAtPiAwLjExNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI0OSAgcG93ZXIgMC4xMzggIDAuNSAtPiAwLjM3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI1MCAgcG93ZXIgMC4wMTM4ICAwLjUgLT4gMC4xMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNTEgIHBvd2VyIDAuMTM5ICAwLjUgLT4gMC4zNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNTIgIHBvd2VyIDAuMDEzOSAgMC41IC0+IDAuMTE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjUzICBwb3dlciAwLjE0MSAgMC41IC0+IDAuMzc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjU0ICBwb3dlciAwLjAxNDEgIDAuNSAtPiAwLjExOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI1NSAgcG93ZXIgMC4xNDIgIDAuNSAtPiAwLjM3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI1NiAgcG93ZXIgMC4wMTQyICAwLjUgLT4gMC4xMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNTcgIHBvd2VyIDAuMTQzICAwLjUgLT4gMC4zNzggIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNTggIHBvd2VyIDAuMDE0MyAgMC41IC0+IDAuMTIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjU5ICBwb3dlciAwLjE0NCAgMC41IC0+IDAuMzc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjYwICBwb3dlciAwLjAxNDQgIDAuNSAtPiAwLjEyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI2MSAgcG93ZXIgMC4xNDUgIDAuNSAtPiAwLjM4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI2MiAgcG93ZXIgMC4wMTQ1ICAwLjUgLT4gMC4xMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNjMgIHBvd2VyIDAuMTQ2ICAwLjUgLT4gMC4zODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNjQgIHBvd2VyIDAuMDE0NiAgMC41IC0+IDAuMTIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjY1ICBwb3dlciAwLjE0NyAgMC41IC0+IDAuMzgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjY2ICBwb3dlciAwLjAxNDcgIDAuNSAtPiAwLjEyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI2NyAgcG93ZXIgMC4xNDggIDAuNSAtPiAwLjM4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI2OCAgcG93ZXIgMC4wMTQ4ICAwLjUgLT4gMC4xMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNjkgIHBvd2VyIDAuMTQ5ICAwLjUgLT4gMC4zODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNzAgIHBvd2VyIDAuMDE0OSAgMC41IC0+IDAuMTIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjcxICBwb3dlciAwLjE1MSAgMC41IC0+IDAuMzg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjcyICBwb3dlciAwLjAxNTEgIDAuNSAtPiAwLjEyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI3MyAgcG93ZXIgMC4xNTIgIDAuNSAtPiAwLjM5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI3NCAgcG93ZXIgMC4wMTUyICAwLjUgLT4gMC4xMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNzUgIHBvd2VyIDAuMTUzICAwLjUgLT4gMC4zOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyNzYgIHBvd2VyIDAuMDE1MyAgMC41IC0+IDAuMTI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjc3ICBwb3dlciAwLjE1NCAgMC41IC0+IDAuMzkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjc4ICBwb3dlciAwLjAxNTQgIDAuNSAtPiAwLjEyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI3OSAgcG93ZXIgMC4xNTUgIDAuNSAtPiAwLjM5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI4MCAgcG93ZXIgMC4wMTU1ICAwLjUgLT4gMC4xMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyODEgIHBvd2VyIDAuMTU2ICAwLjUgLT4gMC4zOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyODIgIHBvd2VyIDAuMDE1NiAgMC41IC0+IDAuMTI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjgzICBwb3dlciAwLjE1NyAgMC41IC0+IDAuMzk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjg0ICBwb3dlciAwLjAxNTcgIDAuNSAtPiAwLjEyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI4NSAgcG93ZXIgMC4xNTggIDAuNSAtPiAwLjM5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI4NiAgcG93ZXIgMC4wMTU4ICAwLjUgLT4gMC4xMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyODcgIHBvd2VyIDAuMTU5ICAwLjUgLT4gMC4zOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyODggIHBvd2VyIDAuMDE1OSAgMC41IC0+IDAuMTI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjg5ICBwb3dlciAwLjE2MSAgMC41IC0+IDAuNDAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjkwICBwb3dlciAwLjAxNjEgIDAuNSAtPiAwLjEyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI5MSAgcG93ZXIgMC4xNjIgIDAuNSAtPiAwLjQwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI5MiAgcG93ZXIgMC4wMTYyICAwLjUgLT4gMC4xMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyOTMgIHBvd2VyIDAuMTYzICAwLjUgLT4gMC40MDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMyOTQgIHBvd2VyIDAuMDE2MyAgMC41IC0+IDAuMTI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjk1ICBwb3dlciAwLjE2NCAgMC41IC0+IDAuNDA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMjk2ICBwb3dlciAwLjAxNjQgIDAuNSAtPiAwLjEyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI5NyAgcG93ZXIgMC4xNjUgIDAuNSAtPiAwLjQwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzI5OCAgcG93ZXIgMC4wMTY1ICAwLjUgLT4gMC4xMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDMyOTkgIHBvd2VyIDAuMTY2ICAwLjUgLT4gMC40MDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMDAgIHBvd2VyIDAuMDE2NiAgMC41IC0+IDAuMTI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzAxICBwb3dlciAwLjE2NyAgMC41IC0+IDAuNDA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzAyICBwb3dlciAwLjAxNjcgIDAuNSAtPiAwLjEyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMwMyAgcG93ZXIgMC4xNjggIDAuNSAtPiAwLjQxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMwNCAgcG93ZXIgMC4wMTY4ICAwLjUgLT4gMC4xMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMDUgIHBvd2VyIDAuMTY5ICAwLjUgLT4gMC40MTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMDYgIHBvd2VyIDAuMDE2OSAgMC41IC0+IDAuMTMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzA3ICBwb3dlciAwLjE3MSAgMC41IC0+IDAuNDE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzA4ICBwb3dlciAwLjAxNzEgIDAuNSAtPiAwLjEzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMwOSAgcG93ZXIgMC4xNzIgIDAuNSAtPiAwLjQxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMxMCAgcG93ZXIgMC4wMTcyICAwLjUgLT4gMC4xMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMTEgIHBvd2VyIDAuMTczICAwLjUgLT4gMC40MTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMTIgIHBvd2VyIDAuMDE3MyAgMC41IC0+IDAuMTMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzEzICBwb3dlciAwLjE3NCAgMC41IC0+IDAuNDE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzE0ICBwb3dlciAwLjAxNzQgIDAuNSAtPiAwLjEzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMxNSAgcG93ZXIgMC4xNzUgIDAuNSAtPiAwLjQxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMxNiAgcG93ZXIgMC4wMTc1ICAwLjUgLT4gMC4xMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMTcgIHBvd2VyIDAuMTc2ICAwLjUgLT4gMC40MjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMTggIHBvd2VyIDAuMDE3NiAgMC41IC0+IDAuMTMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzE5ICBwb3dlciAwLjE3NyAgMC41IC0+IDAuNDIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzIwICBwb3dlciAwLjAxNzcgIDAuNSAtPiAwLjEzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMyMSAgcG93ZXIgMC4xNzggIDAuNSAtPiAwLjQyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMyMiAgcG93ZXIgMC4wMTc4ICAwLjUgLT4gMC4xMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMjMgIHBvd2VyIDAuMTc5ICAwLjUgLT4gMC40MjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMjQgIHBvd2VyIDAuMDE3OSAgMC41IC0+IDAuMTM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzI1ICBwb3dlciAwLjE4MSAgMC41IC0+IDAuNDI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzI2ICBwb3dlciAwLjAxODEgIDAuNSAtPiAwLjEzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMyNyAgcG93ZXIgMC4xODIgIDAuNSAtPiAwLjQyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMyOCAgcG93ZXIgMC4wMTgyICAwLjUgLT4gMC4xMzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMjkgIHBvd2VyIDAuMTgzICAwLjUgLT4gMC40MjggIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMzAgIHBvd2VyIDAuMDE4MyAgMC41IC0+IDAuMTM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzMxICBwb3dlciAwLjE4NCAgMC41IC0+IDAuNDI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzMyICBwb3dlciAwLjAxODQgIDAuNSAtPiAwLjEzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMzMyAgcG93ZXIgMC4xODUgIDAuNSAtPiAwLjQzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMzNCAgcG93ZXIgMC4wMTg1ICAwLjUgLT4gMC4xMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMzUgIHBvd2VyIDAuMTg2ICAwLjUgLT4gMC40MzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzMzYgIHBvd2VyIDAuMDE4NiAgMC41IC0+IDAuMTM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzM3ICBwb3dlciAwLjE4NyAgMC41IC0+IDAuNDMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzM4ICBwb3dlciAwLjAxODcgIDAuNSAtPiAwLjEzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzMzOSAgcG93ZXIgMC4xODggIDAuNSAtPiAwLjQzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM0MCAgcG93ZXIgMC4wMTg4ICAwLjUgLT4gMC4xMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNDEgIHBvd2VyIDAuMTg5ICAwLjUgLT4gMC40MzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNDIgIHBvd2VyIDAuMDE4OSAgMC41IC0+IDAuMTM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzQzICBwb3dlciAwLjE5MSAgMC41IC0+IDAuNDM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzQ0ICBwb3dlciAwLjAxOTEgIDAuNSAtPiAwLjEzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM0NSAgcG93ZXIgMC4xOTIgIDAuNSAtPiAwLjQzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM0NiAgcG93ZXIgMC4wMTkyICAwLjUgLT4gMC4xMzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNDcgIHBvd2VyIDAuMTkzICAwLjUgLT4gMC40MzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNDggIHBvd2VyIDAuMDE5MyAgMC41IC0+IDAuMTM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzQ5ICBwb3dlciAwLjE5NCAgMC41IC0+IDAuNDQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzUwICBwb3dlciAwLjAxOTQgIDAuNSAtPiAwLjEzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM1MSAgcG93ZXIgMC4xOTUgIDAuNSAtPiAwLjQ0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM1MiAgcG93ZXIgMC4wMTk1ICAwLjUgLT4gMC4xNDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNTMgIHBvd2VyIDAuMTk2ICAwLjUgLT4gMC40NDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNTQgIHBvd2VyIDAuMDE5NiAgMC41IC0+IDAuMTQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzU1ICBwb3dlciAwLjE5NyAgMC41IC0+IDAuNDQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzU2ICBwb3dlciAwLjAxOTcgIDAuNSAtPiAwLjE0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM1NyAgcG93ZXIgMC4xOTggIDAuNSAtPiAwLjQ0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM1OCAgcG93ZXIgMC4wMTk4ICAwLjUgLT4gMC4xNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNTkgIHBvd2VyIDAuMTk5ICAwLjUgLT4gMC40NDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNjAgIHBvd2VyIDAuMDE5OSAgMC41IC0+IDAuMTQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzYxICBwb3dlciAwLjIwMSAgMC41IC0+IDAuNDQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzYyICBwb3dlciAwLjAyMDEgIDAuNSAtPiAwLjE0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM2MyAgcG93ZXIgMC4yMDIgIDAuNSAtPiAwLjQ0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM2NCAgcG93ZXIgMC4wMjAyICAwLjUgLT4gMC4xNDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNjUgIHBvd2VyIDAuMjAzICAwLjUgLT4gMC40NTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNjYgIHBvd2VyIDAuMDIwMyAgMC41IC0+IDAuMTQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzY3ICBwb3dlciAwLjIwNCAgMC41IC0+IDAuNDUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzY4ICBwb3dlciAwLjAyMDQgIDAuNSAtPiAwLjE0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM2OSAgcG93ZXIgMC4yMDUgIDAuNSAtPiAwLjQ1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM3MCAgcG93ZXIgMC4wMjA1ICAwLjUgLT4gMC4xNDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNzEgIHBvd2VyIDAuMjA2ICAwLjUgLT4gMC40NTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNzIgIHBvd2VyIDAuMDIwNiAgMC41IC0+IDAuMTQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzczICBwb3dlciAwLjIwNyAgMC41IC0+IDAuNDU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzc0ICBwb3dlciAwLjAyMDcgIDAuNSAtPiAwLjE0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM3NSAgcG93ZXIgMC4yMDggIDAuNSAtPiAwLjQ1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM3NiAgcG93ZXIgMC4wMjA4ICAwLjUgLT4gMC4xNDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNzcgIHBvd2VyIDAuMjA5ICAwLjUgLT4gMC40NTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzNzggIHBvd2VyIDAuMDIwOSAgMC41IC0+IDAuMTQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzc5ICBwb3dlciAwLjIxMSAgMC41IC0+IDAuNDU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzgwICBwb3dlciAwLjAyMTEgIDAuNSAtPiAwLjE0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM4MSAgcG93ZXIgMC4yMTIgIDAuNSAtPiAwLjQ2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM4MiAgcG93ZXIgMC4wMjEyICAwLjUgLT4gMC4xNDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzODMgIHBvd2VyIDAuMjEzICAwLjUgLT4gMC40NjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzODQgIHBvd2VyIDAuMDIxMyAgMC41IC0+IDAuMTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzg1ICBwb3dlciAwLjIxNCAgMC41IC0+IDAuNDYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzg2ICBwb3dlciAwLjAyMTQgIDAuNSAtPiAwLjE0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM4NyAgcG93ZXIgMC4yMTUgIDAuNSAtPiAwLjQ2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM4OCAgcG93ZXIgMC4wMjE1ICAwLjUgLT4gMC4xNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzODkgIHBvd2VyIDAuMjE2ICAwLjUgLT4gMC40NjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDMzOTAgIHBvd2VyIDAuMDIxNiAgMC41IC0+IDAuMTQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzkxICBwb3dlciAwLjIxNyAgMC41IC0+IDAuNDY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzkyICBwb3dlciAwLjAyMTcgIDAuNSAtPiAwLjE0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM5MyAgcG93ZXIgMC4yMTggIDAuNSAtPiAwLjQ2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM5NCAgcG93ZXIgMC4wMjE4ICAwLjUgLT4gMC4xNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDMzOTUgIHBvd2VyIDAuMjE5ICAwLjUgLT4gMC40NjggIEluZXhhY3QgUm91bmRlZAorcHdzeDMzOTYgIHBvd2VyIDAuMDIxOSAgMC41IC0+IDAuMTQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzk3ICBwb3dlciAwLjIyMSAgMC41IC0+IDAuNDcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzMzk4ICBwb3dlciAwLjAyMjEgIDAuNSAtPiAwLjE0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzM5OSAgcG93ZXIgMC4yMjIgIDAuNSAtPiAwLjQ3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQwMCAgcG93ZXIgMC4wMjIyICAwLjUgLT4gMC4xNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MDEgIHBvd2VyIDAuMjIzICAwLjUgLT4gMC40NzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MDIgIHBvd2VyIDAuMDIyMyAgMC41IC0+IDAuMTQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDAzICBwb3dlciAwLjIyNCAgMC41IC0+IDAuNDczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDA0ICBwb3dlciAwLjAyMjQgIDAuNSAtPiAwLjE1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQwNSAgcG93ZXIgMC4yMjUgIDAuNSAtPiAwLjQ3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQwNiAgcG93ZXIgMC4wMjI1ICAwLjUgLT4gMC4xNTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MDcgIHBvd2VyIDAuMjI2ICAwLjUgLT4gMC40NzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MDggIHBvd2VyIDAuMDIyNiAgMC41IC0+IDAuMTUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDA5ICBwb3dlciAwLjIyNyAgMC41IC0+IDAuNDc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDEwICBwb3dlciAwLjAyMjcgIDAuNSAtPiAwLjE1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQxMSAgcG93ZXIgMC4yMjggIDAuNSAtPiAwLjQ3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQxMiAgcG93ZXIgMC4wMjI4ICAwLjUgLT4gMC4xNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MTMgIHBvd2VyIDAuMjI5ICAwLjUgLT4gMC40NzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MTQgIHBvd2VyIDAuMDIyOSAgMC41IC0+IDAuMTUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDE1ICBwb3dlciAwLjIzMSAgMC41IC0+IDAuNDgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDE2ICBwb3dlciAwLjAyMzEgIDAuNSAtPiAwLjE1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQxNyAgcG93ZXIgMC4yMzIgIDAuNSAtPiAwLjQ4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQxOCAgcG93ZXIgMC4wMjMyICAwLjUgLT4gMC4xNTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MTkgIHBvd2VyIDAuMjMzICAwLjUgLT4gMC40ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MjAgIHBvd2VyIDAuMDIzMyAgMC41IC0+IDAuMTUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDIxICBwb3dlciAwLjIzNCAgMC41IC0+IDAuNDg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDIyICBwb3dlciAwLjAyMzQgIDAuNSAtPiAwLjE1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQyMyAgcG93ZXIgMC4yMzUgIDAuNSAtPiAwLjQ4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQyNCAgcG93ZXIgMC4wMjM1ICAwLjUgLT4gMC4xNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MjUgIHBvd2VyIDAuMjM2ICAwLjUgLT4gMC40ODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MjYgIHBvd2VyIDAuMDIzNiAgMC41IC0+IDAuMTU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDI3ICBwb3dlciAwLjIzNyAgMC41IC0+IDAuNDg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDI4ICBwb3dlciAwLjAyMzcgIDAuNSAtPiAwLjE1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQyOSAgcG93ZXIgMC4yMzggIDAuNSAtPiAwLjQ4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQzMCAgcG93ZXIgMC4wMjM4ICAwLjUgLT4gMC4xNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MzEgIHBvd2VyIDAuMjM5ICAwLjUgLT4gMC40ODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MzIgIHBvd2VyIDAuMDIzOSAgMC41IC0+IDAuMTU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDMzICBwb3dlciAwLjI0MSAgMC41IC0+IDAuNDkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDM0ICBwb3dlciAwLjAyNDEgIDAuNSAtPiAwLjE1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQzNSAgcG93ZXIgMC4yNDIgIDAuNSAtPiAwLjQ5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQzNiAgcG93ZXIgMC4wMjQyICAwLjUgLT4gMC4xNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MzcgIHBvd2VyIDAuMjQzICAwLjUgLT4gMC40OTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0MzggIHBvd2VyIDAuMDI0MyAgMC41IC0+IDAuMTU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDM5ICBwb3dlciAwLjI0NCAgMC41IC0+IDAuNDk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDQwICBwb3dlciAwLjAyNDQgIDAuNSAtPiAwLjE1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ0MSAgcG93ZXIgMC4yNDUgIDAuNSAtPiAwLjQ5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ0MiAgcG93ZXIgMC4wMjQ1ICAwLjUgLT4gMC4xNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NDMgIHBvd2VyIDAuMjQ2ICAwLjUgLT4gMC40OTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NDQgIHBvd2VyIDAuMDI0NiAgMC41IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDQ1ICBwb3dlciAwLjI0NyAgMC41IC0+IDAuNDk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDQ2ICBwb3dlciAwLjAyNDcgIDAuNSAtPiAwLjE1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ0NyAgcG93ZXIgMC4yNDggIDAuNSAtPiAwLjQ5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ0OCAgcG93ZXIgMC4wMjQ4ICAwLjUgLT4gMC4xNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NDkgIHBvd2VyIDAuMjQ5ICAwLjUgLT4gMC40OTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NTAgIHBvd2VyIDAuMDI0OSAgMC41IC0+IDAuMTU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDUxICBwb3dlciAwLjI1MSAgMC41IC0+IDAuNTAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDUyICBwb3dlciAwLjAyNTEgIDAuNSAtPiAwLjE1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ1MyAgcG93ZXIgMC4yNTIgIDAuNSAtPiAwLjUwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ1NCAgcG93ZXIgMC4wMjUyICAwLjUgLT4gMC4xNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NTUgIHBvd2VyIDAuMjUzICAwLjUgLT4gMC41MDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NTYgIHBvd2VyIDAuMDI1MyAgMC41IC0+IDAuMTU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDU3ICBwb3dlciAwLjI1NCAgMC41IC0+IDAuNTA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDU4ICBwb3dlciAwLjAyNTQgIDAuNSAtPiAwLjE1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ1OSAgcG93ZXIgMC4yNTUgIDAuNSAtPiAwLjUwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ2MCAgcG93ZXIgMC4wMjU1ICAwLjUgLT4gMC4xNjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NjEgIHBvd2VyIDAuMjU2ICAwLjUgLT4gMC41MDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NjIgIHBvd2VyIDAuMDI1NiAgMC41IC0+IDAuMTYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDYzICBwb3dlciAwLjI1NyAgMC41IC0+IDAuNTA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDY0ICBwb3dlciAwLjAyNTcgIDAuNSAtPiAwLjE2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ2NSAgcG93ZXIgMC4yNTggIDAuNSAtPiAwLjUwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ2NiAgcG93ZXIgMC4wMjU4ICAwLjUgLT4gMC4xNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NjcgIHBvd2VyIDAuMjU5ICAwLjUgLT4gMC41MDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NjggIHBvd2VyIDAuMDI1OSAgMC41IC0+IDAuMTYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDY5ICBwb3dlciAwLjI2MSAgMC41IC0+IDAuNTExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDcwICBwb3dlciAwLjAyNjEgIDAuNSAtPiAwLjE2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ3MSAgcG93ZXIgMC4yNjIgIDAuNSAtPiAwLjUxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ3MiAgcG93ZXIgMC4wMjYyICAwLjUgLT4gMC4xNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NzMgIHBvd2VyIDAuMjYzICAwLjUgLT4gMC41MTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NzQgIHBvd2VyIDAuMDI2MyAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDc1ICBwb3dlciAwLjI2NCAgMC41IC0+IDAuNTE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDc2ICBwb3dlciAwLjAyNjQgIDAuNSAtPiAwLjE2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ3NyAgcG93ZXIgMC4yNjUgIDAuNSAtPiAwLjUxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ3OCAgcG93ZXIgMC4wMjY1ICAwLjUgLT4gMC4xNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0NzkgIHBvd2VyIDAuMjY2ICAwLjUgLT4gMC41MTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0ODAgIHBvd2VyIDAuMDI2NiAgMC41IC0+IDAuMTYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDgxICBwb3dlciAwLjI2NyAgMC41IC0+IDAuNTE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDgyICBwb3dlciAwLjAyNjcgIDAuNSAtPiAwLjE2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ4MyAgcG93ZXIgMC4yNjggIDAuNSAtPiAwLjUxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ4NCAgcG93ZXIgMC4wMjY4ICAwLjUgLT4gMC4xNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0ODUgIHBvd2VyIDAuMjY5ICAwLjUgLT4gMC41MTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0ODYgIHBvd2VyIDAuMDI2OSAgMC41IC0+IDAuMTY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDg3ICBwb3dlciAwLjI3MSAgMC41IC0+IDAuNTIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDg4ICBwb3dlciAwLjAyNzEgIDAuNSAtPiAwLjE2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ4OSAgcG93ZXIgMC4yNzIgIDAuNSAtPiAwLjUyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ5MCAgcG93ZXIgMC4wMjcyICAwLjUgLT4gMC4xNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0OTEgIHBvd2VyIDAuMjczICAwLjUgLT4gMC41MjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0OTIgIHBvd2VyIDAuMDI3MyAgMC41IC0+IDAuMTY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDkzICBwb3dlciAwLjI3NCAgMC41IC0+IDAuNTIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDk0ICBwb3dlciAwLjAyNzQgIDAuNSAtPiAwLjE2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ5NSAgcG93ZXIgMC4yNzUgIDAuNSAtPiAwLjUyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzQ5NiAgcG93ZXIgMC4wMjc1ICAwLjUgLT4gMC4xNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0OTcgIHBvd2VyIDAuMjc2ICAwLjUgLT4gMC41MjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM0OTggIHBvd2VyIDAuMDI3NiAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNDk5ICBwb3dlciAwLjI3NyAgMC41IC0+IDAuNTI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTAwICBwb3dlciAwLjAyNzcgIDAuNSAtPiAwLjE2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUwMSAgcG93ZXIgMC4yNzggIDAuNSAtPiAwLjUyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUwMiAgcG93ZXIgMC4wMjc4ICAwLjUgLT4gMC4xNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MDMgIHBvd2VyIDAuMjc5ICAwLjUgLT4gMC41MjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MDQgIHBvd2VyIDAuMDI3OSAgMC41IC0+IDAuMTY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTA1ICBwb3dlciAwLjI4MSAgMC41IC0+IDAuNTMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTA2ICBwb3dlciAwLjAyODEgIDAuNSAtPiAwLjE2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUwNyAgcG93ZXIgMC4yODIgIDAuNSAtPiAwLjUzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUwOCAgcG93ZXIgMC4wMjgyICAwLjUgLT4gMC4xNjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MDkgIHBvd2VyIDAuMjgzICAwLjUgLT4gMC41MzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MTAgIHBvd2VyIDAuMDI4MyAgMC41IC0+IDAuMTY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTExICBwb3dlciAwLjI4NCAgMC41IC0+IDAuNTMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTEyICBwb3dlciAwLjAyODQgIDAuNSAtPiAwLjE2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUxMyAgcG93ZXIgMC4yODUgIDAuNSAtPiAwLjUzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUxNCAgcG93ZXIgMC4wMjg1ICAwLjUgLT4gMC4xNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MTUgIHBvd2VyIDAuMjg2ICAwLjUgLT4gMC41MzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MTYgIHBvd2VyIDAuMDI4NiAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTE3ICBwb3dlciAwLjI4NyAgMC41IC0+IDAuNTM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTE4ICBwb3dlciAwLjAyODcgIDAuNSAtPiAwLjE2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUxOSAgcG93ZXIgMC4yODggIDAuNSAtPiAwLjUzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUyMCAgcG93ZXIgMC4wMjg4ICAwLjUgLT4gMC4xNzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MjEgIHBvd2VyIDAuMjg5ICAwLjUgLT4gMC41MzggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MjIgIHBvd2VyIDAuMDI4OSAgMC41IC0+IDAuMTcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTIzICBwb3dlciAwLjI5MSAgMC41IC0+IDAuNTM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTI0ICBwb3dlciAwLjAyOTEgIDAuNSAtPiAwLjE3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUyNSAgcG93ZXIgMC4yOTIgIDAuNSAtPiAwLjU0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUyNiAgcG93ZXIgMC4wMjkyICAwLjUgLT4gMC4xNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MjcgIHBvd2VyIDAuMjkzICAwLjUgLT4gMC41NDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MjggIHBvd2VyIDAuMDI5MyAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTI5ICBwb3dlciAwLjI5NCAgMC41IC0+IDAuNTQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTMwICBwb3dlciAwLjAyOTQgIDAuNSAtPiAwLjE3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUzMSAgcG93ZXIgMC4yOTUgIDAuNSAtPiAwLjU0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUzMiAgcG93ZXIgMC4wMjk1ICAwLjUgLT4gMC4xNzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MzMgIHBvd2VyIDAuMjk2ICAwLjUgLT4gMC41NDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MzQgIHBvd2VyIDAuMDI5NiAgMC41IC0+IDAuMTcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTM1ICBwb3dlciAwLjI5NyAgMC41IC0+IDAuNTQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTM2ICBwb3dlciAwLjAyOTcgIDAuNSAtPiAwLjE3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUzNyAgcG93ZXIgMC4yOTggIDAuNSAtPiAwLjU0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzUzOCAgcG93ZXIgMC4wMjk4ICAwLjUgLT4gMC4xNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1MzkgIHBvd2VyIDAuMjk5ICAwLjUgLT4gMC41NDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NDAgIHBvd2VyIDAuMDI5OSAgMC41IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTQxICBwb3dlciAwLjMwMSAgMC41IC0+IDAuNTQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTQyICBwb3dlciAwLjAzMDEgIDAuNSAtPiAwLjE3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU0MyAgcG93ZXIgMC4zMDIgIDAuNSAtPiAwLjU1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU0NCAgcG93ZXIgMC4wMzAyICAwLjUgLT4gMC4xNzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NDUgIHBvd2VyIDAuMzAzICAwLjUgLT4gMC41NTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NDYgIHBvd2VyIDAuMDMwMyAgMC41IC0+IDAuMTc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTQ3ICBwb3dlciAwLjMwNCAgMC41IC0+IDAuNTUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTQ4ICBwb3dlciAwLjAzMDQgIDAuNSAtPiAwLjE3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU0OSAgcG93ZXIgMC4zMDUgIDAuNSAtPiAwLjU1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU1MCAgcG93ZXIgMC4wMzA1ICAwLjUgLT4gMC4xNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NTEgIHBvd2VyIDAuMzA2ICAwLjUgLT4gMC41NTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NTIgIHBvd2VyIDAuMDMwNiAgMC41IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTUzICBwb3dlciAwLjMwNyAgMC41IC0+IDAuNTU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTU0ICBwb3dlciAwLjAzMDcgIDAuNSAtPiAwLjE3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU1NSAgcG93ZXIgMC4zMDggIDAuNSAtPiAwLjU1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU1NiAgcG93ZXIgMC4wMzA4ICAwLjUgLT4gMC4xNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NTcgIHBvd2VyIDAuMzA5ICAwLjUgLT4gMC41NTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NTggIHBvd2VyIDAuMDMwOSAgMC41IC0+IDAuMTc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTU5ICBwb3dlciAwLjMxMSAgMC41IC0+IDAuNTU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTYwICBwb3dlciAwLjAzMTEgIDAuNSAtPiAwLjE3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU2MSAgcG93ZXIgMC4zMTIgIDAuNSAtPiAwLjU1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU2MiAgcG93ZXIgMC4wMzEyICAwLjUgLT4gMC4xNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NjMgIHBvd2VyIDAuMzEzICAwLjUgLT4gMC41NTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NjQgIHBvd2VyIDAuMDMxMyAgMC41IC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTY1ICBwb3dlciAwLjMxNCAgMC41IC0+IDAuNTYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTY2ICBwb3dlciAwLjAzMTQgIDAuNSAtPiAwLjE3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU2NyAgcG93ZXIgMC4zMTUgIDAuNSAtPiAwLjU2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU2OCAgcG93ZXIgMC4wMzE1ICAwLjUgLT4gMC4xNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NjkgIHBvd2VyIDAuMzE2ICAwLjUgLT4gMC41NjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NzAgIHBvd2VyIDAuMDMxNiAgMC41IC0+IDAuMTc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTcxICBwb3dlciAwLjMxNyAgMC41IC0+IDAuNTYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTcyICBwb3dlciAwLjAzMTcgIDAuNSAtPiAwLjE3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU3MyAgcG93ZXIgMC4zMTggIDAuNSAtPiAwLjU2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU3NCAgcG93ZXIgMC4wMzE4ICAwLjUgLT4gMC4xNzggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NzUgIHBvd2VyIDAuMzE5ICAwLjUgLT4gMC41NjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1NzYgIHBvd2VyIDAuMDMxOSAgMC41IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTc3ICBwb3dlciAwLjMyMSAgMC41IC0+IDAuNTY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTc4ICBwb3dlciAwLjAzMjEgIDAuNSAtPiAwLjE3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU3OSAgcG93ZXIgMC4zMjIgIDAuNSAtPiAwLjU2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU4MCAgcG93ZXIgMC4wMzIyICAwLjUgLT4gMC4xNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1ODEgIHBvd2VyIDAuMzIzICAwLjUgLT4gMC41NjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM1ODIgIHBvd2VyIDAuMDMyMyAgMC41IC0+IDAuMTgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTgzICBwb3dlciAwLjMyNCAgMC41IC0+IDAuNTY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTg0ICBwb3dlciAwLjAzMjQgIDAuNSAtPiAwLjE4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU4NSAgcG93ZXIgMC4zMjUgIDAuNSAtPiAwLjU3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU4NiAgcG93ZXIgMC4wMzI1ICAwLjUgLT4gMC4xODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1ODcgIHBvd2VyIDAuMzI2ICAwLjUgLT4gMC41NzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1ODggIHBvd2VyIDAuMDMyNiAgMC41IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTg5ICBwb3dlciAwLjMyNyAgMC41IC0+IDAuNTcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTkwICBwb3dlciAwLjAzMjcgIDAuNSAtPiAwLjE4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU5MSAgcG93ZXIgMC4zMjggIDAuNSAtPiAwLjU3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU5MiAgcG93ZXIgMC4wMzI4ICAwLjUgLT4gMC4xODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1OTMgIHBvd2VyIDAuMzI5ICAwLjUgLT4gMC41NzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1OTQgIHBvd2VyIDAuMDMyOSAgMC41IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTk1ICBwb3dlciAwLjMzMSAgMC41IC0+IDAuNTc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNTk2ICBwb3dlciAwLjAzMzEgIDAuNSAtPiAwLjE4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU5NyAgcG93ZXIgMC4zMzIgIDAuNSAtPiAwLjU3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzU5OCAgcG93ZXIgMC4wMzMyICAwLjUgLT4gMC4xODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM1OTkgIHBvd2VyIDAuMzMzICAwLjUgLT4gMC41NzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MDAgIHBvd2VyIDAuMDMzMyAgMC41IC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjAxICBwb3dlciAwLjMzNCAgMC41IC0+IDAuNTc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjAyICBwb3dlciAwLjAzMzQgIDAuNSAtPiAwLjE4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYwMyAgcG93ZXIgMC4zMzUgIDAuNSAtPiAwLjU3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYwNCAgcG93ZXIgMC4wMzM1ICAwLjUgLT4gMC4xODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MDUgIHBvd2VyIDAuMzM2ICAwLjUgLT4gMC41ODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MDYgIHBvd2VyIDAuMDMzNiAgMC41IC0+IDAuMTgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjA3ICBwb3dlciAwLjMzNyAgMC41IC0+IDAuNTgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjA4ICBwb3dlciAwLjAzMzcgIDAuNSAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYwOSAgcG93ZXIgMC4zMzggIDAuNSAtPiAwLjU4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYxMCAgcG93ZXIgMC4wMzM4ICAwLjUgLT4gMC4xODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MTEgIHBvd2VyIDAuMzM5ICAwLjUgLT4gMC41ODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MTIgIHBvd2VyIDAuMDMzOSAgMC41IC0+IDAuMTg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjEzICBwb3dlciAwLjM0MSAgMC41IC0+IDAuNTg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjE0ICBwb3dlciAwLjAzNDEgIDAuNSAtPiAwLjE4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYxNSAgcG93ZXIgMC4zNDIgIDAuNSAtPiAwLjU4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYxNiAgcG93ZXIgMC4wMzQyICAwLjUgLT4gMC4xODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MTcgIHBvd2VyIDAuMzQzICAwLjUgLT4gMC41ODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MTggIHBvd2VyIDAuMDM0MyAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjE5ICBwb3dlciAwLjM0NCAgMC41IC0+IDAuNTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjIwICBwb3dlciAwLjAzNDQgIDAuNSAtPiAwLjE4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYyMSAgcG93ZXIgMC4zNDUgIDAuNSAtPiAwLjU4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYyMiAgcG93ZXIgMC4wMzQ1ICAwLjUgLT4gMC4xODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MjMgIHBvd2VyIDAuMzQ2ICAwLjUgLT4gMC41ODggIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MjQgIHBvd2VyIDAuMDM0NiAgMC41IC0+IDAuMTg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjI1ICBwb3dlciAwLjM0NyAgMC41IC0+IDAuNTg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjI2ICBwb3dlciAwLjAzNDcgIDAuNSAtPiAwLjE4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYyNyAgcG93ZXIgMC4zNDggIDAuNSAtPiAwLjU5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYyOCAgcG93ZXIgMC4wMzQ4ICAwLjUgLT4gMC4xODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MjkgIHBvd2VyIDAuMzQ5ICAwLjUgLT4gMC41OTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MzAgIHBvd2VyIDAuMDM0OSAgMC41IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjMxICBwb3dlciAwLjM1MSAgMC41IC0+IDAuNTkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjMyICBwb3dlciAwLjAzNTEgIDAuNSAtPiAwLjE4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYzMyAgcG93ZXIgMC4zNTIgIDAuNSAtPiAwLjU5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYzNCAgcG93ZXIgMC4wMzUyICAwLjUgLT4gMC4xODggIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MzUgIHBvd2VyIDAuMzUzICAwLjUgLT4gMC41OTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2MzYgIHBvd2VyIDAuMDM1MyAgMC41IC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjM3ICBwb3dlciAwLjM1NCAgMC41IC0+IDAuNTk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjM4ICBwb3dlciAwLjAzNTQgIDAuNSAtPiAwLjE4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzYzOSAgcG93ZXIgMC4zNTUgIDAuNSAtPiAwLjU5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY0MCAgcG93ZXIgMC4wMzU1ICAwLjUgLT4gMC4xODggIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NDEgIHBvd2VyIDAuMzU2ICAwLjUgLT4gMC41OTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NDIgIHBvd2VyIDAuMDM1NiAgMC41IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjQzICBwb3dlciAwLjM1NyAgMC41IC0+IDAuNTk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjQ0ICBwb3dlciAwLjAzNTcgIDAuNSAtPiAwLjE4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY0NSAgcG93ZXIgMC4zNTggIDAuNSAtPiAwLjU5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY0NiAgcG93ZXIgMC4wMzU4ICAwLjUgLT4gMC4xODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NDcgIHBvd2VyIDAuMzU5ICAwLjUgLT4gMC41OTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NDggIHBvd2VyIDAuMDM1OSAgMC41IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjQ5ICBwb3dlciAwLjM2MSAgMC41IC0+IDAuNjAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjUwICBwb3dlciAwLjAzNjEgIDAuNSAtPiAwLjE5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY1MSAgcG93ZXIgMC4zNjIgIDAuNSAtPiAwLjYwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY1MiAgcG93ZXIgMC4wMzYyICAwLjUgLT4gMC4xOTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NTMgIHBvd2VyIDAuMzYzICAwLjUgLT4gMC42MDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NTQgIHBvd2VyIDAuMDM2MyAgMC41IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjU1ICBwb3dlciAwLjM2NCAgMC41IC0+IDAuNjAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjU2ICBwb3dlciAwLjAzNjQgIDAuNSAtPiAwLjE5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY1NyAgcG93ZXIgMC4zNjUgIDAuNSAtPiAwLjYwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY1OCAgcG93ZXIgMC4wMzY1ICAwLjUgLT4gMC4xOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NTkgIHBvd2VyIDAuMzY2ICAwLjUgLT4gMC42MDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NjAgIHBvd2VyIDAuMDM2NiAgMC41IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjYxICBwb3dlciAwLjM2NyAgMC41IC0+IDAuNjA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjYyICBwb3dlciAwLjAzNjcgIDAuNSAtPiAwLjE5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY2MyAgcG93ZXIgMC4zNjggIDAuNSAtPiAwLjYwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY2NCAgcG93ZXIgMC4wMzY4ICAwLjUgLT4gMC4xOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NjUgIHBvd2VyIDAuMzY5ICAwLjUgLT4gMC42MDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NjYgIHBvd2VyIDAuMDM2OSAgMC41IC0+IDAuMTkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjY3ICBwb3dlciAwLjM3MSAgMC41IC0+IDAuNjA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjY4ICBwb3dlciAwLjAzNzEgIDAuNSAtPiAwLjE5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY2OSAgcG93ZXIgMC4zNzIgIDAuNSAtPiAwLjYxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY3MCAgcG93ZXIgMC4wMzcyICAwLjUgLT4gMC4xOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NzEgIHBvd2VyIDAuMzczICAwLjUgLT4gMC42MTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NzIgIHBvd2VyIDAuMDM3MyAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjczICBwb3dlciAwLjM3NCAgMC41IC0+IDAuNjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjc0ICBwb3dlciAwLjAzNzQgIDAuNSAtPiAwLjE5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY3NSAgcG93ZXIgMC4zNzUgIDAuNSAtPiAwLjYxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY3NiAgcG93ZXIgMC4wMzc1ICAwLjUgLT4gMC4xOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NzcgIHBvd2VyIDAuMzc2ICAwLjUgLT4gMC42MTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2NzggIHBvd2VyIDAuMDM3NiAgMC41IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjc5ICBwb3dlciAwLjM3NyAgMC41IC0+IDAuNjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjgwICBwb3dlciAwLjAzNzcgIDAuNSAtPiAwLjE5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY4MSAgcG93ZXIgMC4zNzggIDAuNSAtPiAwLjYxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY4MiAgcG93ZXIgMC4wMzc4ICAwLjUgLT4gMC4xOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2ODMgIHBvd2VyIDAuMzc5ICAwLjUgLT4gMC42MTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2ODQgIHBvd2VyIDAuMDM3OSAgMC41IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjg1ICBwb3dlciAwLjM4MSAgMC41IC0+IDAuNjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjg2ICBwb3dlciAwLjAzODEgIDAuNSAtPiAwLjE5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY4NyAgcG93ZXIgMC4zODIgIDAuNSAtPiAwLjYxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY4OCAgcG93ZXIgMC4wMzgyICAwLjUgLT4gMC4xOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2ODkgIHBvd2VyIDAuMzgzICAwLjUgLT4gMC42MTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2OTAgIHBvd2VyIDAuMDM4MyAgMC41IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjkxICBwb3dlciAwLjM4NCAgMC41IC0+IDAuNjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjkyICBwb3dlciAwLjAzODQgIDAuNSAtPiAwLjE5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY5MyAgcG93ZXIgMC4zODUgIDAuNSAtPiAwLjYyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY5NCAgcG93ZXIgMC4wMzg1ICAwLjUgLT4gMC4xOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2OTUgIHBvd2VyIDAuMzg2ICAwLjUgLT4gMC42MjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM2OTYgIHBvd2VyIDAuMDM4NiAgMC41IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjk3ICBwb3dlciAwLjM4NyAgMC41IC0+IDAuNjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNjk4ICBwb3dlciAwLjAzODcgIDAuNSAtPiAwLjE5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzY5OSAgcG93ZXIgMC4zODggIDAuNSAtPiAwLjYyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcwMCAgcG93ZXIgMC4wMzg4ICAwLjUgLT4gMC4xOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MDEgIHBvd2VyIDAuMzg5ICAwLjUgLT4gMC42MjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MDIgIHBvd2VyIDAuMDM4OSAgMC41IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzAzICBwb3dlciAwLjM5MSAgMC41IC0+IDAuNjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzA0ICBwb3dlciAwLjAzOTEgIDAuNSAtPiAwLjE5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcwNSAgcG93ZXIgMC4zOTIgIDAuNSAtPiAwLjYyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcwNiAgcG93ZXIgMC4wMzkyICAwLjUgLT4gMC4xOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MDcgIHBvd2VyIDAuMzkzICAwLjUgLT4gMC42MjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MDggIHBvd2VyIDAuMDM5MyAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzA5ICBwb3dlciAwLjM5NCAgMC41IC0+IDAuNjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzEwICBwb3dlciAwLjAzOTQgIDAuNSAtPiAwLjE5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcxMSAgcG93ZXIgMC4zOTUgIDAuNSAtPiAwLjYyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcxMiAgcG93ZXIgMC4wMzk1ICAwLjUgLT4gMC4xOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MTMgIHBvd2VyIDAuMzk2ICAwLjUgLT4gMC42MjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MTQgIHBvd2VyIDAuMDM5NiAgMC41IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzE1ICBwb3dlciAwLjM5NyAgMC41IC0+IDAuNjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzE2ICBwb3dlciAwLjAzOTcgIDAuNSAtPiAwLjE5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcxNyAgcG93ZXIgMC4zOTggIDAuNSAtPiAwLjYzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcxOCAgcG93ZXIgMC4wMzk4ICAwLjUgLT4gMC4xOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MTkgIHBvd2VyIDAuMzk5ICAwLjUgLT4gMC42MzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MjAgIHBvd2VyIDAuMDM5OSAgMC41IC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzIxICBwb3dlciAwLjQwMSAgMC41IC0+IDAuNjMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzIyICBwb3dlciAwLjA0MDEgIDAuNSAtPiAwLjIwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcyMyAgcG93ZXIgMC40MDIgIDAuNSAtPiAwLjYzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcyNCAgcG93ZXIgMC4wNDAyICAwLjUgLT4gMC4yMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MjUgIHBvd2VyIDAuNDAzICAwLjUgLT4gMC42MzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MjYgIHBvd2VyIDAuMDQwMyAgMC41IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzI3ICBwb3dlciAwLjQwNCAgMC41IC0+IDAuNjM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzI4ICBwb3dlciAwLjA0MDQgIDAuNSAtPiAwLjIwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzcyOSAgcG93ZXIgMC40MDUgIDAuNSAtPiAwLjYzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzczMCAgcG93ZXIgMC4wNDA1ICAwLjUgLT4gMC4yMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MzEgIHBvd2VyIDAuNDA2ICAwLjUgLT4gMC42MzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MzIgIHBvd2VyIDAuMDQwNiAgMC41IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzMzICBwb3dlciAwLjQwNyAgMC41IC0+IDAuNjM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzM0ICBwb3dlciAwLjA0MDcgIDAuNSAtPiAwLjIwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzczNSAgcG93ZXIgMC40MDggIDAuNSAtPiAwLjYzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzczNiAgcG93ZXIgMC4wNDA4ICAwLjUgLT4gMC4yMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MzcgIHBvd2VyIDAuNDA5ICAwLjUgLT4gMC42NDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3MzggIHBvd2VyIDAuMDQwOSAgMC41IC0+IDAuMjAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzM5ICBwb3dlciAwLjQxMSAgMC41IC0+IDAuNjQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzQwICBwb3dlciAwLjA0MTEgIDAuNSAtPiAwLjIwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc0MSAgcG93ZXIgMC40MTIgIDAuNSAtPiAwLjY0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc0MiAgcG93ZXIgMC4wNDEyICAwLjUgLT4gMC4yMDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NDMgIHBvd2VyIDAuNDEzICAwLjUgLT4gMC42NDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NDQgIHBvd2VyIDAuMDQxMyAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzQ1ICBwb3dlciAwLjQxNCAgMC41IC0+IDAuNjQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzQ2ICBwb3dlciAwLjA0MTQgIDAuNSAtPiAwLjIwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc0NyAgcG93ZXIgMC40MTUgIDAuNSAtPiAwLjY0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc0OCAgcG93ZXIgMC4wNDE1ICAwLjUgLT4gMC4yMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NDkgIHBvd2VyIDAuNDE2ICAwLjUgLT4gMC42NDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NTAgIHBvd2VyIDAuMDQxNiAgMC41IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzUxICBwb3dlciAwLjQxNyAgMC41IC0+IDAuNjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzUyICBwb3dlciAwLjA0MTcgIDAuNSAtPiAwLjIwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc1MyAgcG93ZXIgMC40MTggIDAuNSAtPiAwLjY0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc1NCAgcG93ZXIgMC4wNDE4ICAwLjUgLT4gMC4yMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NTUgIHBvd2VyIDAuNDE5ICAwLjUgLT4gMC42NDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NTYgIHBvd2VyIDAuMDQxOSAgMC41IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzU3ICBwb3dlciAwLjQyMSAgMC41IC0+IDAuNjQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzU4ICBwb3dlciAwLjA0MjEgIDAuNSAtPiAwLjIwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc1OSAgcG93ZXIgMC40MjIgIDAuNSAtPiAwLjY1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc2MCAgcG93ZXIgMC4wNDIyICAwLjUgLT4gMC4yMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NjEgIHBvd2VyIDAuNDIzICAwLjUgLT4gMC42NTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NjIgIHBvd2VyIDAuMDQyMyAgMC41IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzYzICBwb3dlciAwLjQyNCAgMC41IC0+IDAuNjUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzY0ICBwb3dlciAwLjA0MjQgIDAuNSAtPiAwLjIwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc2NSAgcG93ZXIgMC40MjUgIDAuNSAtPiAwLjY1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc2NiAgcG93ZXIgMC4wNDI1ICAwLjUgLT4gMC4yMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NjcgIHBvd2VyIDAuNDI2ICAwLjUgLT4gMC42NTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NjggIHBvd2VyIDAuMDQyNiAgMC41IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzY5ICBwb3dlciAwLjQyNyAgMC41IC0+IDAuNjUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzcwICBwb3dlciAwLjA0MjcgIDAuNSAtPiAwLjIwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc3MSAgcG93ZXIgMC40MjggIDAuNSAtPiAwLjY1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc3MiAgcG93ZXIgMC4wNDI4ICAwLjUgLT4gMC4yMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NzMgIHBvd2VyIDAuNDI5ICAwLjUgLT4gMC42NTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NzQgIHBvd2VyIDAuMDQyOSAgMC41IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzc1ICBwb3dlciAwLjQzMSAgMC41IC0+IDAuNjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzc2ICBwb3dlciAwLjA0MzEgIDAuNSAtPiAwLjIwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc3NyAgcG93ZXIgMC40MzIgIDAuNSAtPiAwLjY1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc3OCAgcG93ZXIgMC4wNDMyICAwLjUgLT4gMC4yMDggIEluZXhhY3QgUm91bmRlZAorcHdzeDM3NzkgIHBvd2VyIDAuNDMzICAwLjUgLT4gMC42NTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM3ODAgIHBvd2VyIDAuMDQzMyAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzgxICBwb3dlciAwLjQzNCAgMC41IC0+IDAuNjU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzgyICBwb3dlciAwLjA0MzQgIDAuNSAtPiAwLjIwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc4MyAgcG93ZXIgMC40MzUgIDAuNSAtPiAwLjY2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc4NCAgcG93ZXIgMC4wNDM1ICAwLjUgLT4gMC4yMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3ODUgIHBvd2VyIDAuNDM2ICAwLjUgLT4gMC42NjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3ODYgIHBvd2VyIDAuMDQzNiAgMC41IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzg3ICBwb3dlciAwLjQzNyAgMC41IC0+IDAuNjYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzg4ICBwb3dlciAwLjA0MzcgIDAuNSAtPiAwLjIwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc4OSAgcG93ZXIgMC40MzggIDAuNSAtPiAwLjY2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc5MCAgcG93ZXIgMC4wNDM4ICAwLjUgLT4gMC4yMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3OTEgIHBvd2VyIDAuNDM5ICAwLjUgLT4gMC42NjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3OTIgIHBvd2VyIDAuMDQzOSAgMC41IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzkzICBwb3dlciAwLjQ0MSAgMC41IC0+IDAuNjY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzk0ICBwb3dlciAwLjA0NDEgIDAuNSAtPiAwLjIxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc5NSAgcG93ZXIgMC40NDIgIDAuNSAtPiAwLjY2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzc5NiAgcG93ZXIgMC4wNDQyICAwLjUgLT4gMC4yMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3OTcgIHBvd2VyIDAuNDQzICAwLjUgLT4gMC42NjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM3OTggIHBvd2VyIDAuMDQ0MyAgMC41IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzNzk5ICBwb3dlciAwLjQ0NCAgMC41IC0+IDAuNjY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODAwICBwb3dlciAwLjA0NDQgIDAuNSAtPiAwLjIxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgwMSAgcG93ZXIgMC40NDUgIDAuNSAtPiAwLjY2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgwMiAgcG93ZXIgMC4wNDQ1ICAwLjUgLT4gMC4yMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MDMgIHBvd2VyIDAuNDQ2ICAwLjUgLT4gMC42NjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MDQgIHBvd2VyIDAuMDQ0NiAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODA1ICBwb3dlciAwLjQ0NyAgMC41IC0+IDAuNjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODA2ICBwb3dlciAwLjA0NDcgIDAuNSAtPiAwLjIxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgwNyAgcG93ZXIgMC40NDggIDAuNSAtPiAwLjY2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgwOCAgcG93ZXIgMC4wNDQ4ICAwLjUgLT4gMC4yMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MDkgIHBvd2VyIDAuNDQ5ICAwLjUgLT4gMC42NzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MTAgIHBvd2VyIDAuMDQ0OSAgMC41IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODExICBwb3dlciAwLjQ1MSAgMC41IC0+IDAuNjcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODEyICBwb3dlciAwLjA0NTEgIDAuNSAtPiAwLjIxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgxMyAgcG93ZXIgMC40NTIgIDAuNSAtPiAwLjY3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgxNCAgcG93ZXIgMC4wNDUyICAwLjUgLT4gMC4yMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MTUgIHBvd2VyIDAuNDUzICAwLjUgLT4gMC42NzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MTYgIHBvd2VyIDAuMDQ1MyAgMC41IC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODE3ICBwb3dlciAwLjQ1NCAgMC41IC0+IDAuNjc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODE4ICBwb3dlciAwLjA0NTQgIDAuNSAtPiAwLjIxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgxOSAgcG93ZXIgMC40NTUgIDAuNSAtPiAwLjY3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgyMCAgcG93ZXIgMC4wNDU1ICAwLjUgLT4gMC4yMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MjEgIHBvd2VyIDAuNDU2ICAwLjUgLT4gMC42NzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MjIgIHBvd2VyIDAuMDQ1NiAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODIzICBwb3dlciAwLjQ1NyAgMC41IC0+IDAuNjc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODI0ICBwb3dlciAwLjA0NTcgIDAuNSAtPiAwLjIxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgyNSAgcG93ZXIgMC40NTggIDAuNSAtPiAwLjY3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgyNiAgcG93ZXIgMC4wNDU4ICAwLjUgLT4gMC4yMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MjcgIHBvd2VyIDAuNDU5ICAwLjUgLT4gMC42NzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MjggIHBvd2VyIDAuMDQ1OSAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODI5ICBwb3dlciAwLjQ2MSAgMC41IC0+IDAuNjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODMwICBwb3dlciAwLjA0NjEgIDAuNSAtPiAwLjIxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgzMSAgcG93ZXIgMC40NjIgIDAuNSAtPiAwLjY4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgzMiAgcG93ZXIgMC4wNDYyICAwLjUgLT4gMC4yMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MzMgIHBvd2VyIDAuNDYzICAwLjUgLT4gMC42ODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MzQgIHBvd2VyIDAuMDQ2MyAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODM1ICBwb3dlciAwLjQ2NCAgMC41IC0+IDAuNjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODM2ICBwb3dlciAwLjA0NjQgIDAuNSAtPiAwLjIxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgzNyAgcG93ZXIgMC40NjUgIDAuNSAtPiAwLjY4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzgzOCAgcG93ZXIgMC4wNDY1ICAwLjUgLT4gMC4yMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4MzkgIHBvd2VyIDAuNDY2ICAwLjUgLT4gMC42ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NDAgIHBvd2VyIDAuMDQ2NiAgMC41IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODQxICBwb3dlciAwLjQ2NyAgMC41IC0+IDAuNjgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODQyICBwb3dlciAwLjA0NjcgIDAuNSAtPiAwLjIxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg0MyAgcG93ZXIgMC40NjggIDAuNSAtPiAwLjY4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg0NCAgcG93ZXIgMC4wNDY4ICAwLjUgLT4gMC4yMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NDUgIHBvd2VyIDAuNDY5ICAwLjUgLT4gMC42ODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NDYgIHBvd2VyIDAuMDQ2OSAgMC41IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODQ3ICBwb3dlciAwLjQ3MSAgMC41IC0+IDAuNjg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODQ4ICBwb3dlciAwLjA0NzEgIDAuNSAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg0OSAgcG93ZXIgMC40NzIgIDAuNSAtPiAwLjY4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg1MCAgcG93ZXIgMC4wNDcyICAwLjUgLT4gMC4yMTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NTEgIHBvd2VyIDAuNDczICAwLjUgLT4gMC42ODggIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NTIgIHBvd2VyIDAuMDQ3MyAgMC41IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODUzICBwb3dlciAwLjQ3NCAgMC41IC0+IDAuNjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODU0ICBwb3dlciAwLjA0NzQgIDAuNSAtPiAwLjIxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg1NSAgcG93ZXIgMC40NzUgIDAuNSAtPiAwLjY4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg1NiAgcG93ZXIgMC4wNDc1ICAwLjUgLT4gMC4yMTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NTcgIHBvd2VyIDAuNDc2ICAwLjUgLT4gMC42OTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NTggIHBvd2VyIDAuMDQ3NiAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODU5ICBwb3dlciAwLjQ3NyAgMC41IC0+IDAuNjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODYwICBwb3dlciAwLjA0NzcgIDAuNSAtPiAwLjIxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg2MSAgcG93ZXIgMC40NzggIDAuNSAtPiAwLjY5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg2MiAgcG93ZXIgMC4wNDc4ICAwLjUgLT4gMC4yMTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NjMgIHBvd2VyIDAuNDc5ICAwLjUgLT4gMC42OTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NjQgIHBvd2VyIDAuMDQ3OSAgMC41IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODY1ICBwb3dlciAwLjQ4MSAgMC41IC0+IDAuNjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODY2ICBwb3dlciAwLjA0ODEgIDAuNSAtPiAwLjIxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg2NyAgcG93ZXIgMC40ODIgIDAuNSAtPiAwLjY5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg2OCAgcG93ZXIgMC4wNDgyICAwLjUgLT4gMC4yMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NjkgIHBvd2VyIDAuNDgzICAwLjUgLT4gMC42OTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NzAgIHBvd2VyIDAuMDQ4MyAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODcxICBwb3dlciAwLjQ4NCAgMC41IC0+IDAuNjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODcyICBwb3dlciAwLjA0ODQgIDAuNSAtPiAwLjIyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg3MyAgcG93ZXIgMC40ODUgIDAuNSAtPiAwLjY5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg3NCAgcG93ZXIgMC4wNDg1ICAwLjUgLT4gMC4yMjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NzUgIHBvd2VyIDAuNDg2ICAwLjUgLT4gMC42OTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4NzYgIHBvd2VyIDAuMDQ4NiAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODc3ICBwb3dlciAwLjQ4NyAgMC41IC0+IDAuNjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODc4ICBwb3dlciAwLjA0ODcgIDAuNSAtPiAwLjIyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg3OSAgcG93ZXIgMC40ODggIDAuNSAtPiAwLjY5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg4MCAgcG93ZXIgMC4wNDg4ICAwLjUgLT4gMC4yMjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4ODEgIHBvd2VyIDAuNDg5ICAwLjUgLT4gMC42OTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4ODIgIHBvd2VyIDAuMDQ4OSAgMC41IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODgzICBwb3dlciAwLjQ5MSAgMC41IC0+IDAuNzAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODg0ICBwb3dlciAwLjA0OTEgIDAuNSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg4NSAgcG93ZXIgMC40OTIgIDAuNSAtPiAwLjcwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg4NiAgcG93ZXIgMC4wNDkyICAwLjUgLT4gMC4yMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4ODcgIHBvd2VyIDAuNDkzICAwLjUgLT4gMC43MDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4ODggIHBvd2VyIDAuMDQ5MyAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODg5ICBwb3dlciAwLjQ5NCAgMC41IC0+IDAuNzAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODkwICBwb3dlciAwLjA0OTQgIDAuNSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg5MSAgcG93ZXIgMC40OTUgIDAuNSAtPiAwLjcwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg5MiAgcG93ZXIgMC4wNDk1ICAwLjUgLT4gMC4yMjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4OTMgIHBvd2VyIDAuNDk2ICAwLjUgLT4gMC43MDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4OTQgIHBvd2VyIDAuMDQ5NiAgMC41IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODk1ICBwb3dlciAwLjQ5NyAgMC41IC0+IDAuNzA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzODk2ICBwb3dlciAwLjA0OTcgIDAuNSAtPiAwLjIyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg5NyAgcG93ZXIgMC40OTggIDAuNSAtPiAwLjcwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzg5OCAgcG93ZXIgMC4wNDk4ICAwLjUgLT4gMC4yMjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM4OTkgIHBvd2VyIDAuNDk5ICAwLjUgLT4gMC43MDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MDAgIHBvd2VyIDAuMDQ5OSAgMC41IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTAxICBwb3dlciAwLjUwMSAgMC41IC0+IDAuNzA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTAyICBwb3dlciAwLjA1MDEgIDAuNSAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkwMyAgcG93ZXIgMC41MDIgIDAuNSAtPiAwLjcwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkwNCAgcG93ZXIgMC4wNTAyICAwLjUgLT4gMC4yMjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MDUgIHBvd2VyIDAuNTAzICAwLjUgLT4gMC43MDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MDYgIHBvd2VyIDAuMDUwMyAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTA3ICBwb3dlciAwLjUwNCAgMC41IC0+IDAuNzEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTA4ICBwb3dlciAwLjA1MDQgIDAuNSAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkwOSAgcG93ZXIgMC41MDUgIDAuNSAtPiAwLjcxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkxMCAgcG93ZXIgMC4wNTA1ICAwLjUgLT4gMC4yMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MTEgIHBvd2VyIDAuNTA2ICAwLjUgLT4gMC43MTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MTIgIHBvd2VyIDAuMDUwNiAgMC41IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTEzICBwb3dlciAwLjUwNyAgMC41IC0+IDAuNzEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTE0ICBwb3dlciAwLjA1MDcgIDAuNSAtPiAwLjIyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkxNSAgcG93ZXIgMC41MDggIDAuNSAtPiAwLjcxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkxNiAgcG93ZXIgMC4wNTA4ICAwLjUgLT4gMC4yMjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MTcgIHBvd2VyIDAuNTA5ICAwLjUgLT4gMC43MTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MTggIHBvd2VyIDAuMDUwOSAgMC41IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTE5ICBwb3dlciAwLjUxMSAgMC41IC0+IDAuNzE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTIwICBwb3dlciAwLjA1MTEgIDAuNSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkyMSAgcG93ZXIgMC41MTIgIDAuNSAtPiAwLjcxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkyMiAgcG93ZXIgMC4wNTEyICAwLjUgLT4gMC4yMjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MjMgIHBvd2VyIDAuNTEzICAwLjUgLT4gMC43MTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MjQgIHBvd2VyIDAuMDUxMyAgMC41IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTI1ICBwb3dlciAwLjUxNCAgMC41IC0+IDAuNzE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTI2ICBwb3dlciAwLjA1MTQgIDAuNSAtPiAwLjIyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkyNyAgcG93ZXIgMC41MTUgIDAuNSAtPiAwLjcxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkyOCAgcG93ZXIgMC4wNTE1ICAwLjUgLT4gMC4yMjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MjkgIHBvd2VyIDAuNTE2ICAwLjUgLT4gMC43MTggIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MzAgIHBvd2VyIDAuMDUxNiAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTMxICBwb3dlciAwLjUxNyAgMC41IC0+IDAuNzE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTMyICBwb3dlciAwLjA1MTcgIDAuNSAtPiAwLjIyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkzMyAgcG93ZXIgMC41MTggIDAuNSAtPiAwLjcyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkzNCAgcG93ZXIgMC4wNTE4ICAwLjUgLT4gMC4yMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MzUgIHBvd2VyIDAuNTE5ICAwLjUgLT4gMC43MjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5MzYgIHBvd2VyIDAuMDUxOSAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTM3ICBwb3dlciAwLjUyMSAgMC41IC0+IDAuNzIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTM4ICBwb3dlciAwLjA1MjEgIDAuNSAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4MzkzOSAgcG93ZXIgMC41MjIgIDAuNSAtPiAwLjcyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk0MCAgcG93ZXIgMC4wNTIyICAwLjUgLT4gMC4yMjggIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NDEgIHBvd2VyIDAuNTIzICAwLjUgLT4gMC43MjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NDIgIHBvd2VyIDAuMDUyMyAgMC41IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTQzICBwb3dlciAwLjUyNCAgMC41IC0+IDAuNzI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTQ0ICBwb3dlciAwLjA1MjQgIDAuNSAtPiAwLjIyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk0NSAgcG93ZXIgMC41MjUgIDAuNSAtPiAwLjcyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk0NiAgcG93ZXIgMC4wNTI1ICAwLjUgLT4gMC4yMjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NDcgIHBvd2VyIDAuNTI2ICAwLjUgLT4gMC43MjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NDggIHBvd2VyIDAuMDUyNiAgMC41IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTQ5ICBwb3dlciAwLjUyNyAgMC41IC0+IDAuNzI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTUwICBwb3dlciAwLjA1MjcgIDAuNSAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk1MSAgcG93ZXIgMC41MjggIDAuNSAtPiAwLjcyNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk1MiAgcG93ZXIgMC4wNTI4ICAwLjUgLT4gMC4yMzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NTMgIHBvd2VyIDAuNTI5ICAwLjUgLT4gMC43MjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NTQgIHBvd2VyIDAuMDUyOSAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTU1ICBwb3dlciAwLjUzMSAgMC41IC0+IDAuNzI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTU2ICBwb3dlciAwLjA1MzEgIDAuNSAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk1NyAgcG93ZXIgMC41MzIgIDAuNSAtPiAwLjcyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk1OCAgcG93ZXIgMC4wNTMyICAwLjUgLT4gMC4yMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NTkgIHBvd2VyIDAuNTMzICAwLjUgLT4gMC43MzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NjAgIHBvd2VyIDAuMDUzMyAgMC41IC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTYxICBwb3dlciAwLjUzNCAgMC41IC0+IDAuNzMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTYyICBwb3dlciAwLjA1MzQgIDAuNSAtPiAwLjIzMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk2MyAgcG93ZXIgMC41MzUgIDAuNSAtPiAwLjczMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk2NCAgcG93ZXIgMC4wNTM1ICAwLjUgLT4gMC4yMzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NjUgIHBvd2VyIDAuNTM2ICAwLjUgLT4gMC43MzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NjYgIHBvd2VyIDAuMDUzNiAgMC41IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTY3ICBwb3dlciAwLjUzNyAgMC41IC0+IDAuNzMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTY4ICBwb3dlciAwLjA1MzcgIDAuNSAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk2OSAgcG93ZXIgMC41MzggIDAuNSAtPiAwLjczMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk3MCAgcG93ZXIgMC4wNTM4ICAwLjUgLT4gMC4yMzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NzEgIHBvd2VyIDAuNTM5ICAwLjUgLT4gMC43MzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NzIgIHBvd2VyIDAuMDUzOSAgMC41IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTczICBwb3dlciAwLjU0MSAgMC41IC0+IDAuNzM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTc0ICBwb3dlciAwLjA1NDEgIDAuNSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk3NSAgcG93ZXIgMC41NDIgIDAuNSAtPiAwLjczNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk3NiAgcG93ZXIgMC4wNTQyICAwLjUgLT4gMC4yMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NzcgIHBvd2VyIDAuNTQzICAwLjUgLT4gMC43MzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5NzggIHBvd2VyIDAuMDU0MyAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTc5ICBwb3dlciAwLjU0NCAgMC41IC0+IDAuNzM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTgwICBwb3dlciAwLjA1NDQgIDAuNSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk4MSAgcG93ZXIgMC41NDUgIDAuNSAtPiAwLjczOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk4MiAgcG93ZXIgMC4wNTQ1ICAwLjUgLT4gMC4yMzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5ODMgIHBvd2VyIDAuNTQ2ICAwLjUgLT4gMC43MzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5ODQgIHBvd2VyIDAuMDU0NiAgMC41IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTg1ICBwb3dlciAwLjU0NyAgMC41IC0+IDAuNzQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTg2ICBwb3dlciAwLjA1NDcgIDAuNSAtPiAwLjIzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk4NyAgcG93ZXIgMC41NDggIDAuNSAtPiAwLjc0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk4OCAgcG93ZXIgMC4wNTQ4ICAwLjUgLT4gMC4yMzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5ODkgIHBvd2VyIDAuNTQ5ICAwLjUgLT4gMC43NDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5OTAgIHBvd2VyIDAuMDU0OSAgMC41IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTkxICBwb3dlciAwLjU1MSAgMC41IC0+IDAuNzQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTkyICBwb3dlciAwLjA1NTEgIDAuNSAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk5MyAgcG93ZXIgMC41NTIgIDAuNSAtPiAwLjc0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk5NCAgcG93ZXIgMC4wNTUyICAwLjUgLT4gMC4yMzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5OTUgIHBvd2VyIDAuNTUzICAwLjUgLT4gMC43NDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDM5OTYgIHBvd2VyIDAuMDU1MyAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTk3ICBwb3dlciAwLjU1NCAgMC41IC0+IDAuNzQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3gzOTk4ICBwb3dlciAwLjA1NTQgIDAuNSAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Mzk5OSAgcG93ZXIgMC41NTUgIDAuNSAtPiAwLjc0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAwMCAgcG93ZXIgMC4wNTU1ICAwLjUgLT4gMC4yMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMDEgIHBvd2VyIDAuNTU2ICAwLjUgLT4gMC43NDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMDIgIHBvd2VyIDAuMDU1NiAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDAzICBwb3dlciAwLjU1NyAgMC41IC0+IDAuNzQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDA0ICBwb3dlciAwLjA1NTcgIDAuNSAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAwNSAgcG93ZXIgMC41NTggIDAuNSAtPiAwLjc0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAwNiAgcG93ZXIgMC4wNTU4ICAwLjUgLT4gMC4yMzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMDcgIHBvd2VyIDAuNTU5ICAwLjUgLT4gMC43NDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMDggIHBvd2VyIDAuMDU1OSAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDA5ICBwb3dlciAwLjU2MSAgMC41IC0+IDAuNzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDEwICBwb3dlciAwLjA1NjEgIDAuNSAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAxMSAgcG93ZXIgMC41NjIgIDAuNSAtPiAwLjc1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAxMiAgcG93ZXIgMC4wNTYyICAwLjUgLT4gMC4yMzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMTMgIHBvd2VyIDAuNTYzICAwLjUgLT4gMC43NTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMTQgIHBvd2VyIDAuMDU2MyAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDE1ICBwb3dlciAwLjU2NCAgMC41IC0+IDAuNzUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDE2ICBwb3dlciAwLjA1NjQgIDAuNSAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAxNyAgcG93ZXIgMC41NjUgIDAuNSAtPiAwLjc1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAxOCAgcG93ZXIgMC4wNTY1ICAwLjUgLT4gMC4yMzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMTkgIHBvd2VyIDAuNTY2ICAwLjUgLT4gMC43NTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMjAgIHBvd2VyIDAuMDU2NiAgMC41IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDIxICBwb3dlciAwLjU2NyAgMC41IC0+IDAuNzUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDIyICBwb3dlciAwLjA1NjcgIDAuNSAtPiAwLjIzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAyMyAgcG93ZXIgMC41NjggIDAuNSAtPiAwLjc1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAyNCAgcG93ZXIgMC4wNTY4ICAwLjUgLT4gMC4yMzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMjUgIHBvd2VyIDAuNTY5ICAwLjUgLT4gMC43NTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMjYgIHBvd2VyIDAuMDU2OSAgMC41IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDI3ICBwb3dlciAwLjU3MSAgMC41IC0+IDAuNzU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDI4ICBwb3dlciAwLjA1NzEgIDAuNSAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAyOSAgcG93ZXIgMC41NzIgIDAuNSAtPiAwLjc1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAzMCAgcG93ZXIgMC4wNTcyICAwLjUgLT4gMC4yMzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMzEgIHBvd2VyIDAuNTczICAwLjUgLT4gMC43NTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMzIgIHBvd2VyIDAuMDU3MyAgMC41IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDMzICBwb3dlciAwLjU3NCAgMC41IC0+IDAuNzU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDM0ICBwb3dlciAwLjA1NzQgIDAuNSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAzNSAgcG93ZXIgMC41NzUgIDAuNSAtPiAwLjc1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDAzNiAgcG93ZXIgMC4wNTc1ICAwLjUgLT4gMC4yNDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMzcgIHBvd2VyIDAuNTc2ICAwLjUgLT4gMC43NTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwMzggIHBvd2VyIDAuMDU3NiAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDM5ICBwb3dlciAwLjU3NyAgMC41IC0+IDAuNzYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDQwICBwb3dlciAwLjA1NzcgIDAuNSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA0MSAgcG93ZXIgMC41NzggIDAuNSAtPiAwLjc2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA0MiAgcG93ZXIgMC4wNTc4ICAwLjUgLT4gMC4yNDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNDMgIHBvd2VyIDAuNTc5ICAwLjUgLT4gMC43NjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNDQgIHBvd2VyIDAuMDU3OSAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDQ1ICBwb3dlciAwLjU4MSAgMC41IC0+IDAuNzYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDQ2ICBwb3dlciAwLjA1ODEgIDAuNSAtPiAwLjI0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA0NyAgcG93ZXIgMC41ODIgIDAuNSAtPiAwLjc2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA0OCAgcG93ZXIgMC4wNTgyICAwLjUgLT4gMC4yNDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNDkgIHBvd2VyIDAuNTgzICAwLjUgLT4gMC43NjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNTAgIHBvd2VyIDAuMDU4MyAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDUxICBwb3dlciAwLjU4NCAgMC41IC0+IDAuNzY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDUyICBwb3dlciAwLjA1ODQgIDAuNSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA1MyAgcG93ZXIgMC41ODUgIDAuNSAtPiAwLjc2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA1NCAgcG93ZXIgMC4wNTg1ICAwLjUgLT4gMC4yNDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNTUgIHBvd2VyIDAuNTg2ICAwLjUgLT4gMC43NjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNTYgIHBvd2VyIDAuMDU4NiAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDU3ICBwb3dlciAwLjU4NyAgMC41IC0+IDAuNzY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDU4ICBwb3dlciAwLjA1ODcgIDAuNSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA1OSAgcG93ZXIgMC41ODggIDAuNSAtPiAwLjc2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA2MCAgcG93ZXIgMC4wNTg4ICAwLjUgLT4gMC4yNDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNjEgIHBvd2VyIDAuNTg5ICAwLjUgLT4gMC43NjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNjIgIHBvd2VyIDAuMDU4OSAgMC41IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDYzICBwb3dlciAwLjU5MSAgMC41IC0+IDAuNzY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDY0ICBwb3dlciAwLjA1OTEgIDAuNSAtPiAwLjI0MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA2NSAgcG93ZXIgMC41OTIgIDAuNSAtPiAwLjc2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA2NiAgcG93ZXIgMC4wNTkyICAwLjUgLT4gMC4yNDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNjcgIHBvd2VyIDAuNTkzICAwLjUgLT4gMC43NzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNjggIHBvd2VyIDAuMDU5MyAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDY5ICBwb3dlciAwLjU5NCAgMC41IC0+IDAuNzcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDcwICBwb3dlciAwLjA1OTQgIDAuNSAtPiAwLjI0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA3MSAgcG93ZXIgMC41OTUgIDAuNSAtPiAwLjc3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA3MiAgcG93ZXIgMC4wNTk1ICAwLjUgLT4gMC4yNDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNzMgIHBvd2VyIDAuNTk2ICAwLjUgLT4gMC43NzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNzQgIHBvd2VyIDAuMDU5NiAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDc1ICBwb3dlciAwLjU5NyAgMC41IC0+IDAuNzczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDc2ICBwb3dlciAwLjA1OTcgIDAuNSAtPiAwLjI0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA3NyAgcG93ZXIgMC41OTggIDAuNSAtPiAwLjc3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA3OCAgcG93ZXIgMC4wNTk4ICAwLjUgLT4gMC4yNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwNzkgIHBvd2VyIDAuNTk5ICAwLjUgLT4gMC43NzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwODAgIHBvd2VyIDAuMDU5OSAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDgxICBwb3dlciAwLjYwMSAgMC41IC0+IDAuNzc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDgyICBwb3dlciAwLjA2MDEgIDAuNSAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA4MyAgcG93ZXIgMC42MDIgIDAuNSAtPiAwLjc3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA4NCAgcG93ZXIgMC4wNjAyICAwLjUgLT4gMC4yNDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwODUgIHBvd2VyIDAuNjAzICAwLjUgLT4gMC43NzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwODYgIHBvd2VyIDAuMDYwMyAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDg3ICBwb3dlciAwLjYwNCAgMC41IC0+IDAuNzc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDg4ICBwb3dlciAwLjA2MDQgIDAuNSAtPiAwLjI0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA4OSAgcG93ZXIgMC42MDUgIDAuNSAtPiAwLjc3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA5MCAgcG93ZXIgMC4wNjA1ICAwLjUgLT4gMC4yNDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwOTEgIHBvd2VyIDAuNjA2ICAwLjUgLT4gMC43NzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQwOTIgIHBvd2VyIDAuMDYwNiAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDkzICBwb3dlciAwLjYwNyAgMC41IC0+IDAuNzc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDk0ICBwb3dlciAwLjA2MDcgIDAuNSAtPiAwLjI0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA5NSAgcG93ZXIgMC42MDggIDAuNSAtPiAwLjc4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDA5NiAgcG93ZXIgMC4wNjA4ICAwLjUgLT4gMC4yNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwOTcgIHBvd2VyIDAuNjA5ICAwLjUgLT4gMC43ODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQwOTggIHBvd2VyIDAuMDYwOSAgMC41IC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MDk5ICBwb3dlciAwLjYxMSAgMC41IC0+IDAuNzgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTAwICBwb3dlciAwLjA2MTEgIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEwMSAgcG93ZXIgMC42MTIgIDAuNSAtPiAwLjc4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEwMiAgcG93ZXIgMC4wNjEyICAwLjUgLT4gMC4yNDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMDMgIHBvd2VyIDAuNjEzICAwLjUgLT4gMC43ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMDQgIHBvd2VyIDAuMDYxMyAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTA1ICBwb3dlciAwLjYxNCAgMC41IC0+IDAuNzg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTA2ICBwb3dlciAwLjA2MTQgIDAuNSAtPiAwLjI0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEwNyAgcG93ZXIgMC42MTUgIDAuNSAtPiAwLjc4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEwOCAgcG93ZXIgMC4wNjE1ICAwLjUgLT4gMC4yNDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMDkgIHBvd2VyIDAuNjE2ICAwLjUgLT4gMC43ODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMTAgIHBvd2VyIDAuMDYxNiAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTExICBwb3dlciAwLjYxNyAgMC41IC0+IDAuNzg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTEyICBwb3dlciAwLjA2MTcgIDAuNSAtPiAwLjI0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDExMyAgcG93ZXIgMC42MTggIDAuNSAtPiAwLjc4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDExNCAgcG93ZXIgMC4wNjE4ICAwLjUgLT4gMC4yNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMTUgIHBvd2VyIDAuNjE5ICAwLjUgLT4gMC43ODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMTYgIHBvd2VyIDAuMDYxOSAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTE3ICBwb3dlciAwLjYyMSAgMC41IC0+IDAuNzg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTE4ICBwb3dlciAwLjA2MjEgIDAuNSAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDExOSAgcG93ZXIgMC42MjIgIDAuNSAtPiAwLjc4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEyMCAgcG93ZXIgMC4wNjIyICAwLjUgLT4gMC4yNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMjEgIHBvd2VyIDAuNjIzICAwLjUgLT4gMC43ODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMjIgIHBvd2VyIDAuMDYyMyAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTIzICBwb3dlciAwLjYyNCAgMC41IC0+IDAuNzkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTI0ICBwb3dlciAwLjA2MjQgIDAuNSAtPiAwLjI1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEyNSAgcG93ZXIgMC42MjUgIDAuNSAtPiAwLjc5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEyNiAgcG93ZXIgMC4wNjI1ICAwLjUgLT4gMC4yNTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMjcgIHBvd2VyIDAuNjI2ICAwLjUgLT4gMC43OTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMjggIHBvd2VyIDAuMDYyNiAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTI5ICBwb3dlciAwLjYyNyAgMC41IC0+IDAuNzkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTMwICBwb3dlciAwLjA2MjcgIDAuNSAtPiAwLjI1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEzMSAgcG93ZXIgMC42MjggIDAuNSAtPiAwLjc5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEzMiAgcG93ZXIgMC4wNjI4ICAwLjUgLT4gMC4yNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMzMgIHBvd2VyIDAuNjI5ICAwLjUgLT4gMC43OTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMzQgIHBvd2VyIDAuMDYyOSAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTM1ICBwb3dlciAwLjYzMSAgMC41IC0+IDAuNzk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTM2ICBwb3dlciAwLjA2MzEgIDAuNSAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEzNyAgcG93ZXIgMC42MzIgIDAuNSAtPiAwLjc5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDEzOCAgcG93ZXIgMC4wNjMyICAwLjUgLT4gMC4yNTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxMzkgIHBvd2VyIDAuNjMzICAwLjUgLT4gMC43OTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNDAgIHBvd2VyIDAuMDYzMyAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTQxICBwb3dlciAwLjYzNCAgMC41IC0+IDAuNzk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTQyICBwb3dlciAwLjA2MzQgIDAuNSAtPiAwLjI1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE0MyAgcG93ZXIgMC42MzUgIDAuNSAtPiAwLjc5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE0NCAgcG93ZXIgMC4wNjM1ICAwLjUgLT4gMC4yNTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNDUgIHBvd2VyIDAuNjM2ICAwLjUgLT4gMC43OTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNDYgIHBvd2VyIDAuMDYzNiAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTQ3ICBwb3dlciAwLjYzNyAgMC41IC0+IDAuNzk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTQ4ICBwb3dlciAwLjA2MzcgIDAuNSAtPiAwLjI1MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE0OSAgcG93ZXIgMC42MzggIDAuNSAtPiAwLjc5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE1MCAgcG93ZXIgMC4wNjM4ICAwLjUgLT4gMC4yNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNTEgIHBvd2VyIDAuNjM5ICAwLjUgLT4gMC43OTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNTIgIHBvd2VyIDAuMDYzOSAgMC41IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTUzICBwb3dlciAwLjY0MSAgMC41IC0+IDAuODAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTU0ICBwb3dlciAwLjA2NDEgIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE1NSAgcG93ZXIgMC42NDIgIDAuNSAtPiAwLjgwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE1NiAgcG93ZXIgMC4wNjQyICAwLjUgLT4gMC4yNTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNTcgIHBvd2VyIDAuNjQzICAwLjUgLT4gMC44MDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNTggIHBvd2VyIDAuMDY0MyAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTU5ICBwb3dlciAwLjY0NCAgMC41IC0+IDAuODAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTYwICBwb3dlciAwLjA2NDQgIDAuNSAtPiAwLjI1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE2MSAgcG93ZXIgMC42NDUgIDAuNSAtPiAwLjgwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE2MiAgcG93ZXIgMC4wNjQ1ICAwLjUgLT4gMC4yNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNjMgIHBvd2VyIDAuNjQ2ICAwLjUgLT4gMC44MDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNjQgIHBvd2VyIDAuMDY0NiAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTY1ICBwb3dlciAwLjY0NyAgMC41IC0+IDAuODA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTY2ICBwb3dlciAwLjA2NDcgIDAuNSAtPiAwLjI1NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE2NyAgcG93ZXIgMC42NDggIDAuNSAtPiAwLjgwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE2OCAgcG93ZXIgMC4wNjQ4ICAwLjUgLT4gMC4yNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNjkgIHBvd2VyIDAuNjQ5ICAwLjUgLT4gMC44MDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNzAgIHBvd2VyIDAuMDY0OSAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTcxICBwb3dlciAwLjY1MSAgMC41IC0+IDAuODA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTcyICBwb3dlciAwLjA2NTEgIDAuNSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE3MyAgcG93ZXIgMC42NTIgIDAuNSAtPiAwLjgwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE3NCAgcG93ZXIgMC4wNjUyICAwLjUgLT4gMC4yNTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNzUgIHBvd2VyIDAuNjUzICAwLjUgLT4gMC44MDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQxNzYgIHBvd2VyIDAuMDY1MyAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTc3ICBwb3dlciAwLjY1NCAgMC41IC0+IDAuODA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTc4ICBwb3dlciAwLjA2NTQgIDAuNSAtPiAwLjI1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE3OSAgcG93ZXIgMC42NTUgIDAuNSAtPiAwLjgwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE4MCAgcG93ZXIgMC4wNjU1ICAwLjUgLT4gMC4yNTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxODEgIHBvd2VyIDAuNjU2ICAwLjUgLT4gMC44MTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxODIgIHBvd2VyIDAuMDY1NiAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTgzICBwb3dlciAwLjY1NyAgMC41IC0+IDAuODExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTg0ICBwb3dlciAwLjA2NTcgIDAuNSAtPiAwLjI1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE4NSAgcG93ZXIgMC42NTggIDAuNSAtPiAwLjgxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE4NiAgcG93ZXIgMC4wNjU4ICAwLjUgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxODcgIHBvd2VyIDAuNjU5ICAwLjUgLT4gMC44MTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxODggIHBvd2VyIDAuMDY1OSAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTg5ICBwb3dlciAwLjY2MSAgMC41IC0+IDAuODEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTkwICBwb3dlciAwLjA2NjEgIDAuNSAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE5MSAgcG93ZXIgMC42NjIgIDAuNSAtPiAwLjgxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE5MiAgcG93ZXIgMC4wNjYyICAwLjUgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxOTMgIHBvd2VyIDAuNjYzICAwLjUgLT4gMC44MTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQxOTQgIHBvd2VyIDAuMDY2MyAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTk1ICBwb3dlciAwLjY2NCAgMC41IC0+IDAuODE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MTk2ICBwb3dlciAwLjA2NjQgIDAuNSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE5NyAgcG93ZXIgMC42NjUgIDAuNSAtPiAwLjgxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDE5OCAgcG93ZXIgMC4wNjY1ICAwLjUgLT4gMC4yNTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQxOTkgIHBvd2VyIDAuNjY2ICAwLjUgLT4gMC44MTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMDAgIHBvd2VyIDAuMDY2NiAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjAxICBwb3dlciAwLjY2NyAgMC41IC0+IDAuODE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjAyICBwb3dlciAwLjA2NjcgIDAuNSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIwMyAgcG93ZXIgMC42NjggIDAuNSAtPiAwLjgxNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIwNCAgcG93ZXIgMC4wNjY4ICAwLjUgLT4gMC4yNTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMDUgIHBvd2VyIDAuNjY5ICAwLjUgLT4gMC44MTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMDYgIHBvd2VyIDAuMDY2OSAgMC41IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjA3ICBwb3dlciAwLjY3MSAgMC41IC0+IDAuODE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjA4ICBwb3dlciAwLjA2NzEgIDAuNSAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIwOSAgcG93ZXIgMC42NzIgIDAuNSAtPiAwLjgyMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIxMCAgcG93ZXIgMC4wNjcyICAwLjUgLT4gMC4yNTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMTEgIHBvd2VyIDAuNjczICAwLjUgLT4gMC44MjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMTIgIHBvd2VyIDAuMDY3MyAgMC41IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjEzICBwb3dlciAwLjY3NCAgMC41IC0+IDAuODIxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjE0ICBwb3dlciAwLjA2NzQgIDAuNSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIxNSAgcG93ZXIgMC42NzUgIDAuNSAtPiAwLjgyMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIxNiAgcG93ZXIgMC4wNjc1ICAwLjUgLT4gMC4yNjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMTcgIHBvd2VyIDAuNjc2ICAwLjUgLT4gMC44MjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMTggIHBvd2VyIDAuMDY3NiAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjE5ICBwb3dlciAwLjY3NyAgMC41IC0+IDAuODIzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjIwICBwb3dlciAwLjA2NzcgIDAuNSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIyMSAgcG93ZXIgMC42NzggIDAuNSAtPiAwLjgyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIyMiAgcG93ZXIgMC4wNjc4ICAwLjUgLT4gMC4yNjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMjMgIHBvd2VyIDAuNjc5ICAwLjUgLT4gMC44MjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMjQgIHBvd2VyIDAuMDY3OSAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjI1ICBwb3dlciAwLjY4MSAgMC41IC0+IDAuODI1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjI2ICBwb3dlciAwLjA2ODEgIDAuNSAtPiAwLjI2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIyNyAgcG93ZXIgMC42ODIgIDAuNSAtPiAwLjgyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIyOCAgcG93ZXIgMC4wNjgyICAwLjUgLT4gMC4yNjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMjkgIHBvd2VyIDAuNjgzICAwLjUgLT4gMC44MjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMzAgIHBvd2VyIDAuMDY4MyAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjMxICBwb3dlciAwLjY4NCAgMC41IC0+IDAuODI3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjMyICBwb3dlciAwLjA2ODQgIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIzMyAgcG93ZXIgMC42ODUgIDAuNSAtPiAwLjgyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIzNCAgcG93ZXIgMC4wNjg1ICAwLjUgLT4gMC4yNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMzUgIHBvd2VyIDAuNjg2ICAwLjUgLT4gMC44MjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyMzYgIHBvd2VyIDAuMDY4NiAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjM3ICBwb3dlciAwLjY4NyAgMC41IC0+IDAuODI5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjM4ICBwb3dlciAwLjA2ODcgIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDIzOSAgcG93ZXIgMC42ODggIDAuNSAtPiAwLjgyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI0MCAgcG93ZXIgMC4wNjg4ICAwLjUgLT4gMC4yNjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNDEgIHBvd2VyIDAuNjg5ICAwLjUgLT4gMC44MzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNDIgIHBvd2VyIDAuMDY4OSAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjQzICBwb3dlciAwLjY5MSAgMC41IC0+IDAuODMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjQ0ICBwb3dlciAwLjA2OTEgIDAuNSAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI0NSAgcG93ZXIgMC42OTIgIDAuNSAtPiAwLjgzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI0NiAgcG93ZXIgMC4wNjkyICAwLjUgLT4gMC4yNjMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNDcgIHBvd2VyIDAuNjkzICAwLjUgLT4gMC44MzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNDggIHBvd2VyIDAuMDY5MyAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjQ5ICBwb3dlciAwLjY5NCAgMC41IC0+IDAuODMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjUwICBwb3dlciAwLjA2OTQgIDAuNSAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI1MSAgcG93ZXIgMC42OTUgIDAuNSAtPiAwLjgzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI1MiAgcG93ZXIgMC4wNjk1ICAwLjUgLT4gMC4yNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNTMgIHBvd2VyIDAuNjk2ICAwLjUgLT4gMC44MzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNTQgIHBvd2VyIDAuMDY5NiAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjU1ICBwb3dlciAwLjY5NyAgMC41IC0+IDAuODM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjU2ICBwb3dlciAwLjA2OTcgIDAuNSAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI1NyAgcG93ZXIgMC42OTggIDAuNSAtPiAwLjgzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI1OCAgcG93ZXIgMC4wNjk4ICAwLjUgLT4gMC4yNjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNTkgIHBvd2VyIDAuNjk5ICAwLjUgLT4gMC44MzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNjAgIHBvd2VyIDAuMDY5OSAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjYxICBwb3dlciAwLjcwMSAgMC41IC0+IDAuODM3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjYyICBwb3dlciAwLjA3MDEgIDAuNSAtPiAwLjI2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI2MyAgcG93ZXIgMC43MDIgIDAuNSAtPiAwLjgzOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI2NCAgcG93ZXIgMC4wNzAyICAwLjUgLT4gMC4yNjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNjUgIHBvd2VyIDAuNzAzICAwLjUgLT4gMC44MzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNjYgIHBvd2VyIDAuMDcwMyAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjY3ICBwb3dlciAwLjcwNCAgMC41IC0+IDAuODM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjY4ICBwb3dlciAwLjA3MDQgIDAuNSAtPiAwLjI2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI2OSAgcG93ZXIgMC43MDUgIDAuNSAtPiAwLjg0MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI3MCAgcG93ZXIgMC4wNzA1ICAwLjUgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNzEgIHBvd2VyIDAuNzA2ICAwLjUgLT4gMC44NDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNzIgIHBvd2VyIDAuMDcwNiAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjczICBwb3dlciAwLjcwNyAgMC41IC0+IDAuODQxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjc0ICBwb3dlciAwLjA3MDcgIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI3NSAgcG93ZXIgMC43MDggIDAuNSAtPiAwLjg0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI3NiAgcG93ZXIgMC4wNzA4ICAwLjUgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNzcgIHBvd2VyIDAuNzA5ICAwLjUgLT4gMC44NDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyNzggIHBvd2VyIDAuMDcwOSAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjc5ICBwb3dlciAwLjcxMSAgMC41IC0+IDAuODQzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjgwICBwb3dlciAwLjA3MTEgIDAuNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI4MSAgcG93ZXIgMC43MTIgIDAuNSAtPiAwLjg0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI4MiAgcG93ZXIgMC4wNzEyICAwLjUgLT4gMC4yNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyODMgIHBvd2VyIDAuNzEzICAwLjUgLT4gMC44NDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyODQgIHBvd2VyIDAuMDcxMyAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjg1ICBwb3dlciAwLjcxNCAgMC41IC0+IDAuODQ1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjg2ICBwb3dlciAwLjA3MTQgIDAuNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI4NyAgcG93ZXIgMC43MTUgIDAuNSAtPiAwLjg0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI4OCAgcG93ZXIgMC4wNzE1ICAwLjUgLT4gMC4yNjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyODkgIHBvd2VyIDAuNzE2ICAwLjUgLT4gMC44NDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQyOTAgIHBvd2VyIDAuMDcxNiAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjkxICBwb3dlciAwLjcxNyAgMC41IC0+IDAuODQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MjkyICBwb3dlciAwLjA3MTcgIDAuNSAtPiAwLjI2OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI5MyAgcG93ZXIgMC43MTggIDAuNSAtPiAwLjg0NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI5NCAgcG93ZXIgMC4wNzE4ICAwLjUgLT4gMC4yNjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyOTUgIHBvd2VyIDAuNzE5ICAwLjUgLT4gMC44NDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQyOTYgIHBvd2VyIDAuMDcxOSAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjk3ICBwb3dlciAwLjcyMSAgMC41IC0+IDAuODQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mjk4ICBwb3dlciAwLjA3MjEgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDI5OSAgcG93ZXIgMC43MjIgIDAuNSAtPiAwLjg1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMwMCAgcG93ZXIgMC4wNzIyICAwLjUgLT4gMC4yNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMDEgIHBvd2VyIDAuNzIzICAwLjUgLT4gMC44NTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMDIgIHBvd2VyIDAuMDcyMyAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzAzICBwb3dlciAwLjcyNCAgMC41IC0+IDAuODUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzA0ICBwb3dlciAwLjA3MjQgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMwNSAgcG93ZXIgMC43MjUgIDAuNSAtPiAwLjg1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMwNiAgcG93ZXIgMC4wNzI1ICAwLjUgLT4gMC4yNjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMDcgIHBvd2VyIDAuNzI2ICAwLjUgLT4gMC44NTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMDggIHBvd2VyIDAuMDcyNiAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzA5ICBwb3dlciAwLjcyNyAgMC41IC0+IDAuODUzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzEwICBwb3dlciAwLjA3MjcgIDAuNSAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMxMSAgcG93ZXIgMC43MjggIDAuNSAtPiAwLjg1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMxMiAgcG93ZXIgMC4wNzI4ICAwLjUgLT4gMC4yNzAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMTMgIHBvd2VyIDAuNzI5ICAwLjUgLT4gMC44NTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMTQgIHBvd2VyIDAuMDcyOSAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzE1ICBwb3dlciAwLjczMSAgMC41IC0+IDAuODU1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzE2ICBwb3dlciAwLjA3MzEgIDAuNSAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMxNyAgcG93ZXIgMC43MzIgIDAuNSAtPiAwLjg1NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMxOCAgcG93ZXIgMC4wNzMyICAwLjUgLT4gMC4yNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMTkgIHBvd2VyIDAuNzMzICAwLjUgLT4gMC44NTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMjAgIHBvd2VyIDAuMDczMyAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzIxICBwb3dlciAwLjczNCAgMC41IC0+IDAuODU3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzIyICBwb3dlciAwLjA3MzQgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMyMyAgcG93ZXIgMC43MzUgIDAuNSAtPiAwLjg1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMyNCAgcG93ZXIgMC4wNzM1ICAwLjUgLT4gMC4yNzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMjUgIHBvd2VyIDAuNzM2ICAwLjUgLT4gMC44NTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMjYgIHBvd2VyIDAuMDczNiAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzI3ICBwb3dlciAwLjczNyAgMC41IC0+IDAuODU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzI4ICBwb3dlciAwLjA3MzcgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMyOSAgcG93ZXIgMC43MzggIDAuNSAtPiAwLjg1OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMzMCAgcG93ZXIgMC4wNzM4ICAwLjUgLT4gMC4yNzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMzEgIHBvd2VyIDAuNzM5ICAwLjUgLT4gMC44NjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMzIgIHBvd2VyIDAuMDczOSAgMC41IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzMzICBwb3dlciAwLjc0MSAgMC41IC0+IDAuODYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzM0ICBwb3dlciAwLjA3NDEgIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMzNSAgcG93ZXIgMC43NDIgIDAuNSAtPiAwLjg2MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDMzNiAgcG93ZXIgMC4wNzQyICAwLjUgLT4gMC4yNzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMzcgIHBvd2VyIDAuNzQzICAwLjUgLT4gMC44NjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzMzggIHBvd2VyIDAuMDc0MyAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzM5ICBwb3dlciAwLjc0NCAgMC41IC0+IDAuODYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzQwICBwb3dlciAwLjA3NDQgIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM0MSAgcG93ZXIgMC43NDUgIDAuNSAtPiAwLjg2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM0MiAgcG93ZXIgMC4wNzQ1ICAwLjUgLT4gMC4yNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNDMgIHBvd2VyIDAuNzQ2ICAwLjUgLT4gMC44NjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNDQgIHBvd2VyIDAuMDc0NiAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzQ1ICBwb3dlciAwLjc0NyAgMC41IC0+IDAuODY0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzQ2ICBwb3dlciAwLjA3NDcgIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM0NyAgcG93ZXIgMC43NDggIDAuNSAtPiAwLjg2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM0OCAgcG93ZXIgMC4wNzQ4ICAwLjUgLT4gMC4yNzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNDkgIHBvd2VyIDAuNzQ5ICAwLjUgLT4gMC44NjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNTAgIHBvd2VyIDAuMDc0OSAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzUxICBwb3dlciAwLjc1MSAgMC41IC0+IDAuODY3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzUyICBwb3dlciAwLjA3NTEgIDAuNSAtPiAwLjI3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM1MyAgcG93ZXIgMC43NTIgIDAuNSAtPiAwLjg2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM1NCAgcG93ZXIgMC4wNzUyICAwLjUgLT4gMC4yNzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNTUgIHBvd2VyIDAuNzUzICAwLjUgLT4gMC44NjggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNTYgIHBvd2VyIDAuMDc1MyAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzU3ICBwb3dlciAwLjc1NCAgMC41IC0+IDAuODY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzU4ICBwb3dlciAwLjA3NTQgIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM1OSAgcG93ZXIgMC43NTUgIDAuNSAtPiAwLjg2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM2MCAgcG93ZXIgMC4wNzU1ICAwLjUgLT4gMC4yNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNjEgIHBvd2VyIDAuNzU2ICAwLjUgLT4gMC44NjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNjIgIHBvd2VyIDAuMDc1NiAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzYzICBwb3dlciAwLjc1NyAgMC41IC0+IDAuODcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzY0ICBwb3dlciAwLjA3NTcgIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM2NSAgcG93ZXIgMC43NTggIDAuNSAtPiAwLjg3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM2NiAgcG93ZXIgMC4wNzU4ICAwLjUgLT4gMC4yNzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNjcgIHBvd2VyIDAuNzU5ICAwLjUgLT4gMC44NzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNjggIHBvd2VyIDAuMDc1OSAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzY5ICBwb3dlciAwLjc2MSAgMC41IC0+IDAuODcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzcwICBwb3dlciAwLjA3NjEgIDAuNSAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM3MSAgcG93ZXIgMC43NjIgIDAuNSAtPiAwLjg3MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM3MiAgcG93ZXIgMC4wNzYyICAwLjUgLT4gMC4yNzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNzMgIHBvd2VyIDAuNzYzICAwLjUgLT4gMC44NzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNzQgIHBvd2VyIDAuMDc2MyAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzc1ICBwb3dlciAwLjc2NCAgMC41IC0+IDAuODc0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzc2ICBwb3dlciAwLjA3NjQgIDAuNSAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM3NyAgcG93ZXIgMC43NjUgIDAuNSAtPiAwLjg3NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM3OCAgcG93ZXIgMC4wNzY1ICAwLjUgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzNzkgIHBvd2VyIDAuNzY2ICAwLjUgLT4gMC44NzUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzODAgIHBvd2VyIDAuMDc2NiAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzgxICBwb3dlciAwLjc2NyAgMC41IC0+IDAuODc2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzgyICBwb3dlciAwLjA3NjcgIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM4MyAgcG93ZXIgMC43NjggIDAuNSAtPiAwLjg3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM4NCAgcG93ZXIgMC4wNzY4ICAwLjUgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzODUgIHBvd2VyIDAuNzY5ICAwLjUgLT4gMC44NzcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzODYgIHBvd2VyIDAuMDc2OSAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzg3ICBwb3dlciAwLjc3MSAgMC41IC0+IDAuODc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzg4ICBwb3dlciAwLjA3NzEgIDAuNSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM4OSAgcG93ZXIgMC43NzIgIDAuNSAtPiAwLjg3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM5MCAgcG93ZXIgMC4wNzcyICAwLjUgLT4gMC4yNzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzOTEgIHBvd2VyIDAuNzczICAwLjUgLT4gMC44NzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzOTIgIHBvd2VyIDAuMDc3MyAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0MzkzICBwb3dlciAwLjc3NCAgMC41IC0+IDAuODgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzk0ICBwb3dlciAwLjA3NzQgIDAuNSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM5NSAgcG93ZXIgMC43NzUgIDAuNSAtPiAwLjg4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDM5NiAgcG93ZXIgMC4wNzc1ICAwLjUgLT4gMC4yNzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQzOTcgIHBvd2VyIDAuNzc2ICAwLjUgLT4gMC44ODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQzOTggIHBvd2VyIDAuMDc3NiAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Mzk5ICBwb3dlciAwLjc3NyAgMC41IC0+IDAuODgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDAwICBwb3dlciAwLjA3NzcgIDAuNSAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQwMSAgcG93ZXIgMC43NzggIDAuNSAtPiAwLjg4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQwMiAgcG93ZXIgMC4wNzc4ICAwLjUgLT4gMC4yNzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MDMgIHBvd2VyIDAuNzc5ICAwLjUgLT4gMC44ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MDQgIHBvd2VyIDAuMDc3OSAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDA1ICBwb3dlciAwLjc4MSAgMC41IC0+IDAuODg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDA2ICBwb3dlciAwLjA3ODEgIDAuNSAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQwNyAgcG93ZXIgMC43ODIgIDAuNSAtPiAwLjg4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQwOCAgcG93ZXIgMC4wNzgyICAwLjUgLT4gMC4yODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MDkgIHBvd2VyIDAuNzgzICAwLjUgLT4gMC44ODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MTAgIHBvd2VyIDAuMDc4MyAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDExICBwb3dlciAwLjc4NCAgMC41IC0+IDAuODg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDEyICBwb3dlciAwLjA3ODQgIDAuNSAtPiAwLjI4MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQxMyAgcG93ZXIgMC43ODUgIDAuNSAtPiAwLjg4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQxNCAgcG93ZXIgMC4wNzg1ICAwLjUgLT4gMC4yODAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MTUgIHBvd2VyIDAuNzg2ICAwLjUgLT4gMC44ODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MTYgIHBvd2VyIDAuMDc4NiAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDE3ICBwb3dlciAwLjc4NyAgMC41IC0+IDAuODg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDE4ICBwb3dlciAwLjA3ODcgIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQxOSAgcG93ZXIgMC43ODggIDAuNSAtPiAwLjg4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQyMCAgcG93ZXIgMC4wNzg4ICAwLjUgLT4gMC4yODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MjEgIHBvd2VyIDAuNzg5ICAwLjUgLT4gMC44ODggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MjIgIHBvd2VyIDAuMDc4OSAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDIzICBwb3dlciAwLjc5MSAgMC41IC0+IDAuODg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDI0ICBwb3dlciAwLjA3OTEgIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQyNSAgcG93ZXIgMC43OTIgIDAuNSAtPiAwLjg5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQyNiAgcG93ZXIgMC4wNzkyICAwLjUgLT4gMC4yODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MjcgIHBvd2VyIDAuNzkzICAwLjUgLT4gMC44OTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MjggIHBvd2VyIDAuMDc5MyAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDI5ICBwb3dlciAwLjc5NCAgMC41IC0+IDAuODkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDMwICBwb3dlciAwLjA3OTQgIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQzMSAgcG93ZXIgMC43OTUgIDAuNSAtPiAwLjg5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQzMiAgcG93ZXIgMC4wNzk1ICAwLjUgLT4gMC4yODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MzMgIHBvd2VyIDAuNzk2ICAwLjUgLT4gMC44OTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MzQgIHBvd2VyIDAuMDc5NiAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDM1ICBwb3dlciAwLjc5NyAgMC41IC0+IDAuODkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDM2ICBwb3dlciAwLjA3OTcgIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQzNyAgcG93ZXIgMC43OTggIDAuNSAtPiAwLjg5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQzOCAgcG93ZXIgMC4wNzk4ICAwLjUgLT4gMC4yODIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0MzkgIHBvd2VyIDAuNzk5ICAwLjUgLT4gMC44OTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NDAgIHBvd2VyIDAuMDc5OSAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDQxICBwb3dlciAwLjgwMSAgMC41IC0+IDAuODk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDQyICBwb3dlciAwLjA4MDEgIDAuNSAtPiAwLjI4MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ0MyAgcG93ZXIgMC44MDIgIDAuNSAtPiAwLjg5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ0NCAgcG93ZXIgMC4wODAyICAwLjUgLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NDUgIHBvd2VyIDAuODAzICAwLjUgLT4gMC44OTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NDYgIHBvd2VyIDAuMDgwMyAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDQ3ICBwb3dlciAwLjgwNCAgMC41IC0+IDAuODk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDQ4ICBwb3dlciAwLjA4MDQgIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ0OSAgcG93ZXIgMC44MDUgIDAuNSAtPiAwLjg5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ1MCAgcG93ZXIgMC4wODA1ICAwLjUgLT4gMC4yODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NTEgIHBvd2VyIDAuODA2ICAwLjUgLT4gMC44OTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NTIgIHBvd2VyIDAuMDgwNiAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDUzICBwb3dlciAwLjgwNyAgMC41IC0+IDAuODk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDU0ICBwb3dlciAwLjA4MDcgIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ1NSAgcG93ZXIgMC44MDggIDAuNSAtPiAwLjg5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ1NiAgcG93ZXIgMC4wODA4ICAwLjUgLT4gMC4yODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NTcgIHBvd2VyIDAuODA5ICAwLjUgLT4gMC44OTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NTggIHBvd2VyIDAuMDgwOSAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDU5ICBwb3dlciAwLjgxMSAgMC41IC0+IDAuOTAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDYwICBwb3dlciAwLjA4MTEgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ2MSAgcG93ZXIgMC44MTIgIDAuNSAtPiAwLjkwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ2MiAgcG93ZXIgMC4wODEyICAwLjUgLT4gMC4yODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NjMgIHBvd2VyIDAuODEzICAwLjUgLT4gMC45MDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NjQgIHBvd2VyIDAuMDgxMyAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDY1ICBwb3dlciAwLjgxNCAgMC41IC0+IDAuOTAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDY2ICBwb3dlciAwLjA4MTQgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ2NyAgcG93ZXIgMC44MTUgIDAuNSAtPiAwLjkwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ2OCAgcG93ZXIgMC4wODE1ICAwLjUgLT4gMC4yODUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NjkgIHBvd2VyIDAuODE2ICAwLjUgLT4gMC45MDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NzAgIHBvd2VyIDAuMDgxNiAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDcxICBwb3dlciAwLjgxNyAgMC41IC0+IDAuOTA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDcyICBwb3dlciAwLjA4MTcgIDAuNSAtPiAwLjI4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ3MyAgcG93ZXIgMC44MTggIDAuNSAtPiAwLjkwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ3NCAgcG93ZXIgMC4wODE4ICAwLjUgLT4gMC4yODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NzUgIHBvd2VyIDAuODE5ICAwLjUgLT4gMC45MDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0NzYgIHBvd2VyIDAuMDgxOSAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDc3ICBwb3dlciAwLjgyMSAgMC41IC0+IDAuOTA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDc4ICBwb3dlciAwLjA4MjEgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ3OSAgcG93ZXIgMC44MjIgIDAuNSAtPiAwLjkwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ4MCAgcG93ZXIgMC4wODIyICAwLjUgLT4gMC4yODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0ODEgIHBvd2VyIDAuODIzICAwLjUgLT4gMC45MDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0ODIgIHBvd2VyIDAuMDgyMyAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDgzICBwb3dlciAwLjgyNCAgMC41IC0+IDAuOTA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDg0ICBwb3dlciAwLjA4MjQgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ4NSAgcG93ZXIgMC44MjUgIDAuNSAtPiAwLjkwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ4NiAgcG93ZXIgMC4wODI1ICAwLjUgLT4gMC4yODcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0ODcgIHBvd2VyIDAuODI2ICAwLjUgLT4gMC45MDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0ODggIHBvd2VyIDAuMDgyNiAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDg5ICBwb3dlciAwLjgyNyAgMC41IC0+IDAuOTA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDkwICBwb3dlciAwLjA4MjcgIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ5MSAgcG93ZXIgMC44MjggIDAuNSAtPiAwLjkxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ5MiAgcG93ZXIgMC4wODI4ICAwLjUgLT4gMC4yODggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0OTMgIHBvd2VyIDAuODI5ICAwLjUgLT4gMC45MTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0OTQgIHBvd2VyIDAuMDgyOSAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDk1ICBwb3dlciAwLjgzMSAgMC41IC0+IDAuOTEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NDk2ICBwb3dlciAwLjA4MzEgIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ5NyAgcG93ZXIgMC44MzIgIDAuNSAtPiAwLjkxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDQ5OCAgcG93ZXIgMC4wODMyICAwLjUgLT4gMC4yODggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ0OTkgIHBvd2VyIDAuODMzICAwLjUgLT4gMC45MTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MDAgIHBvd2VyIDAuMDgzMyAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTAxICBwb3dlciAwLjgzNCAgMC41IC0+IDAuOTEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTAyICBwb3dlciAwLjA4MzQgIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUwMyAgcG93ZXIgMC44MzUgIDAuNSAtPiAwLjkxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUwNCAgcG93ZXIgMC4wODM1ICAwLjUgLT4gMC4yODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MDUgIHBvd2VyIDAuODM2ICAwLjUgLT4gMC45MTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MDYgIHBvd2VyIDAuMDgzNiAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTA3ICBwb3dlciAwLjgzNyAgMC41IC0+IDAuOTE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTA4ICBwb3dlciAwLjA4MzcgIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUwOSAgcG93ZXIgMC44MzggIDAuNSAtPiAwLjkxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUxMCAgcG93ZXIgMC4wODM4ICAwLjUgLT4gMC4yODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MTEgIHBvd2VyIDAuODM5ICAwLjUgLT4gMC45MTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MTIgIHBvd2VyIDAuMDgzOSAgMC41IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTEzICBwb3dlciAwLjg0MSAgMC41IC0+IDAuOTE3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTE0ICBwb3dlciAwLjA4NDEgIDAuNSAtPiAwLjI5MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUxNSAgcG93ZXIgMC44NDIgIDAuNSAtPiAwLjkxOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUxNiAgcG93ZXIgMC4wODQyICAwLjUgLT4gMC4yOTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MTcgIHBvd2VyIDAuODQzICAwLjUgLT4gMC45MTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MTggIHBvd2VyIDAuMDg0MyAgMC41IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTE5ICBwb3dlciAwLjg0NCAgMC41IC0+IDAuOTE5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTIwICBwb3dlciAwLjA4NDQgIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUyMSAgcG93ZXIgMC44NDUgIDAuNSAtPiAwLjkxOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUyMiAgcG93ZXIgMC4wODQ1ICAwLjUgLT4gMC4yOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MjMgIHBvd2VyIDAuODQ2ICAwLjUgLT4gMC45MjAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MjQgIHBvd2VyIDAuMDg0NiAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTI1ICBwb3dlciAwLjg0NyAgMC41IC0+IDAuOTIwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTI2ICBwb3dlciAwLjA4NDcgIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUyNyAgcG93ZXIgMC44NDggIDAuNSAtPiAwLjkyMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUyOCAgcG93ZXIgMC4wODQ4ICAwLjUgLT4gMC4yOTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MjkgIHBvd2VyIDAuODQ5ICAwLjUgLT4gMC45MjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MzAgIHBvd2VyIDAuMDg0OSAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTMxICBwb3dlciAwLjg1MSAgMC41IC0+IDAuOTIyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTMyICBwb3dlciAwLjA4NTEgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUzMyAgcG93ZXIgMC44NTIgIDAuNSAtPiAwLjkyMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUzNCAgcG93ZXIgMC4wODUyICAwLjUgLT4gMC4yOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MzUgIHBvd2VyIDAuODUzICAwLjUgLT4gMC45MjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1MzYgIHBvd2VyIDAuMDg1MyAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTM3ICBwb3dlciAwLjg1NCAgMC41IC0+IDAuOTI0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTM4ICBwb3dlciAwLjA4NTQgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDUzOSAgcG93ZXIgMC44NTUgIDAuNSAtPiAwLjkyNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU0MCAgcG93ZXIgMC4wODU1ICAwLjUgLT4gMC4yOTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NDEgIHBvd2VyIDAuODU2ICAwLjUgLT4gMC45MjUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NDIgIHBvd2VyIDAuMDg1NiAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTQzICBwb3dlciAwLjg1NyAgMC41IC0+IDAuOTI2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTQ0ICBwb3dlciAwLjA4NTcgIDAuNSAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU0NSAgcG93ZXIgMC44NTggIDAuNSAtPiAwLjkyNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU0NiAgcG93ZXIgMC4wODU4ICAwLjUgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NDcgIHBvd2VyIDAuODU5ICAwLjUgLT4gMC45MjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NDggIHBvd2VyIDAuMDg1OSAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTQ5ICBwb3dlciAwLjg2MSAgMC41IC0+IDAuOTI4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTUwICBwb3dlciAwLjA4NjEgIDAuNSAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU1MSAgcG93ZXIgMC44NjIgIDAuNSAtPiAwLjkyOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU1MiAgcG93ZXIgMC4wODYyICAwLjUgLT4gMC4yOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NTMgIHBvd2VyIDAuODYzICAwLjUgLT4gMC45MjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NTQgIHBvd2VyIDAuMDg2MyAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTU1ICBwb3dlciAwLjg2NCAgMC41IC0+IDAuOTMwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTU2ICBwb3dlciAwLjA4NjQgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU1NyAgcG93ZXIgMC44NjUgIDAuNSAtPiAwLjkzMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU1OCAgcG93ZXIgMC4wODY1ICAwLjUgLT4gMC4yOTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NTkgIHBvd2VyIDAuODY2ICAwLjUgLT4gMC45MzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NjAgIHBvd2VyIDAuMDg2NiAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTYxICBwb3dlciAwLjg2NyAgMC41IC0+IDAuOTMxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTYyICBwb3dlciAwLjA4NjcgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU2MyAgcG93ZXIgMC44NjggIDAuNSAtPiAwLjkzMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU2NCAgcG93ZXIgMC4wODY4ICAwLjUgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NjUgIHBvd2VyIDAuODY5ICAwLjUgLT4gMC45MzIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NjYgIHBvd2VyIDAuMDg2OSAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTY3ICBwb3dlciAwLjg3MSAgMC41IC0+IDAuOTMzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTY4ICBwb3dlciAwLjA4NzEgIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU2OSAgcG93ZXIgMC44NzIgIDAuNSAtPiAwLjkzNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU3MCAgcG93ZXIgMC4wODcyICAwLjUgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NzEgIHBvd2VyIDAuODczICAwLjUgLT4gMC45MzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NzIgIHBvd2VyIDAuMDg3MyAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTczICBwb3dlciAwLjg3NCAgMC41IC0+IDAuOTM1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTc0ICBwb3dlciAwLjA4NzQgIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU3NSAgcG93ZXIgMC44NzUgIDAuNSAtPiAwLjkzNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU3NiAgcG93ZXIgMC4wODc1ICAwLjUgLT4gMC4yOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NzcgIHBvd2VyIDAuODc2ICAwLjUgLT4gMC45MzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1NzggIHBvd2VyIDAuMDg3NiAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTc5ICBwb3dlciAwLjg3NyAgMC41IC0+IDAuOTM2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTgwICBwb3dlciAwLjA4NzcgIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU4MSAgcG93ZXIgMC44NzggIDAuNSAtPiAwLjkzNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU4MiAgcG93ZXIgMC4wODc4ICAwLjUgLT4gMC4yOTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1ODMgIHBvd2VyIDAuODc5ICAwLjUgLT4gMC45MzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1ODQgIHBvd2VyIDAuMDg3OSAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTg1ICBwb3dlciAwLjg4MSAgMC41IC0+IDAuOTM5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTg2ICBwb3dlciAwLjA4ODEgIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU4NyAgcG93ZXIgMC44ODIgIDAuNSAtPiAwLjkzOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU4OCAgcG93ZXIgMC4wODgyICAwLjUgLT4gMC4yOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1ODkgIHBvd2VyIDAuODgzICAwLjUgLT4gMC45NDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1OTAgIHBvd2VyIDAuMDg4MyAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTkxICBwb3dlciAwLjg4NCAgMC41IC0+IDAuOTQwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTkyICBwb3dlciAwLjA4ODQgIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU5MyAgcG93ZXIgMC44ODUgIDAuNSAtPiAwLjk0MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU5NCAgcG93ZXIgMC4wODg1ICAwLjUgLT4gMC4yOTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1OTUgIHBvd2VyIDAuODg2ICAwLjUgLT4gMC45NDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ1OTYgIHBvd2VyIDAuMDg4NiAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTk3ICBwb3dlciAwLjg4NyAgMC41IC0+IDAuOTQyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NTk4ICBwb3dlciAwLjA4ODcgIDAuNSAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDU5OSAgcG93ZXIgMC44ODggIDAuNSAtPiAwLjk0MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYwMCAgcG93ZXIgMC4wODg4ICAwLjUgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MDEgIHBvd2VyIDAuODg5ICAwLjUgLT4gMC45NDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MDIgIHBvd2VyIDAuMDg4OSAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjAzICBwb3dlciAwLjg5MSAgMC41IC0+IDAuOTQ0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjA0ICBwb3dlciAwLjA4OTEgIDAuNSAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYwNSAgcG93ZXIgMC44OTIgIDAuNSAtPiAwLjk0NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYwNiAgcG93ZXIgMC4wODkyICAwLjUgLT4gMC4yOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MDcgIHBvd2VyIDAuODkzICAwLjUgLT4gMC45NDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MDggIHBvd2VyIDAuMDg5MyAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjA5ICBwb3dlciAwLjg5NCAgMC41IC0+IDAuOTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjEwICBwb3dlciAwLjA4OTQgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYxMSAgcG93ZXIgMC44OTUgIDAuNSAtPiAwLjk0NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYxMiAgcG93ZXIgMC4wODk1ICAwLjUgLT4gMC4yOTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MTMgIHBvd2VyIDAuODk2ICAwLjUgLT4gMC45NDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MTQgIHBvd2VyIDAuMDg5NiAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjE1ICBwb3dlciAwLjg5NyAgMC41IC0+IDAuOTQ3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjE2ICBwb3dlciAwLjA4OTcgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYxNyAgcG93ZXIgMC44OTggIDAuNSAtPiAwLjk0OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYxOCAgcG93ZXIgMC4wODk4ICAwLjUgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MTkgIHBvd2VyIDAuODk5ICAwLjUgLT4gMC45NDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MjAgIHBvd2VyIDAuMDg5OSAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjIxICBwb3dlciAwLjkwMSAgMC41IC0+IDAuOTQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjIyICBwb3dlciAwLjA5MDEgIDAuNSAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYyMyAgcG93ZXIgMC45MDIgIDAuNSAtPiAwLjk1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYyNCAgcG93ZXIgMC4wOTAyICAwLjUgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MjUgIHBvd2VyIDAuOTAzICAwLjUgLT4gMC45NTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MjYgIHBvd2VyIDAuMDkwMyAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjI3ICBwb3dlciAwLjkwNCAgMC41IC0+IDAuOTUxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjI4ICBwb3dlciAwLjA5MDQgIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYyOSAgcG93ZXIgMC45MDUgIDAuNSAtPiAwLjk1MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYzMCAgcG93ZXIgMC4wOTA1ICAwLjUgLT4gMC4zMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MzEgIHBvd2VyIDAuOTA2ICAwLjUgLT4gMC45NTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MzIgIHBvd2VyIDAuMDkwNiAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjMzICBwb3dlciAwLjkwNyAgMC41IC0+IDAuOTUyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjM0ICBwb3dlciAwLjA5MDcgIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYzNSAgcG93ZXIgMC45MDggIDAuNSAtPiAwLjk1MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDYzNiAgcG93ZXIgMC4wOTA4ICAwLjUgLT4gMC4zMDEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MzcgIHBvd2VyIDAuOTA5ICAwLjUgLT4gMC45NTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2MzggIHBvd2VyIDAuMDkwOSAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjM5ICBwb3dlciAwLjkxMSAgMC41IC0+IDAuOTU0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjQwICBwb3dlciAwLjA5MTEgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY0MSAgcG93ZXIgMC45MTIgIDAuNSAtPiAwLjk1NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY0MiAgcG93ZXIgMC4wOTEyICAwLjUgLT4gMC4zMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NDMgIHBvd2VyIDAuOTEzICAwLjUgLT4gMC45NTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NDQgIHBvd2VyIDAuMDkxMyAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjQ1ICBwb3dlciAwLjkxNCAgMC41IC0+IDAuOTU2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjQ2ICBwb3dlciAwLjA5MTQgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY0NyAgcG93ZXIgMC45MTUgIDAuNSAtPiAwLjk1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY0OCAgcG93ZXIgMC4wOTE1ICAwLjUgLT4gMC4zMDIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NDkgIHBvd2VyIDAuOTE2ICAwLjUgLT4gMC45NTcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NTAgIHBvd2VyIDAuMDkxNiAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjUxICBwb3dlciAwLjkxNyAgMC41IC0+IDAuOTU4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjUyICBwb3dlciAwLjA5MTcgIDAuNSAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY1MyAgcG93ZXIgMC45MTggIDAuNSAtPiAwLjk1OCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY1NCAgcG93ZXIgMC4wOTE4ICAwLjUgLT4gMC4zMDMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NTUgIHBvd2VyIDAuOTE5ICAwLjUgLT4gMC45NTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NTYgIHBvd2VyIDAuMDkxOSAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjU3ICBwb3dlciAwLjkyMSAgMC41IC0+IDAuOTYwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjU4ICBwb3dlciAwLjA5MjEgIDAuNSAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY1OSAgcG93ZXIgMC45MjIgIDAuNSAtPiAwLjk2MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY2MCAgcG93ZXIgMC4wOTIyICAwLjUgLT4gMC4zMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NjEgIHBvd2VyIDAuOTIzICAwLjUgLT4gMC45NjEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NjIgIHBvd2VyIDAuMDkyMyAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjYzICBwb3dlciAwLjkyNCAgMC41IC0+IDAuOTYxICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjY0ICBwb3dlciAwLjA5MjQgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY2NSAgcG93ZXIgMC45MjUgIDAuNSAtPiAwLjk2MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY2NiAgcG93ZXIgMC4wOTI1ICAwLjUgLT4gMC4zMDQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NjcgIHBvd2VyIDAuOTI2ICAwLjUgLT4gMC45NjIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NjggIHBvd2VyIDAuMDkyNiAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjY5ICBwb3dlciAwLjkyNyAgMC41IC0+IDAuOTYzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjcwICBwb3dlciAwLjA5MjcgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY3MSAgcG93ZXIgMC45MjggIDAuNSAtPiAwLjk2MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY3MiAgcG93ZXIgMC4wOTI4ICAwLjUgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NzMgIHBvd2VyIDAuOTI5ICAwLjUgLT4gMC45NjQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NzQgIHBvd2VyIDAuMDkyOSAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njc1ICBwb3dlciAwLjkzMSAgMC41IC0+IDAuOTY1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njc2ICBwb3dlciAwLjA5MzEgIDAuNSAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY3NyAgcG93ZXIgMC45MzIgIDAuNSAtPiAwLjk2NSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY3OCAgcG93ZXIgMC4wOTMyICAwLjUgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2NzkgIHBvd2VyIDAuOTMzICAwLjUgLT4gMC45NjYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2ODAgIHBvd2VyIDAuMDkzMyAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjgxICBwb3dlciAwLjkzNCAgMC41IC0+IDAuOTY2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjgyICBwb3dlciAwLjA5MzQgIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY4MyAgcG93ZXIgMC45MzUgIDAuNSAtPiAwLjk2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY4NCAgcG93ZXIgMC4wOTM1ICAwLjUgLT4gMC4zMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2ODUgIHBvd2VyIDAuOTM2ICAwLjUgLT4gMC45NjcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2ODYgIHBvd2VyIDAuMDkzNiAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njg3ICBwb3dlciAwLjkzNyAgMC41IC0+IDAuOTY4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njg4ICBwb3dlciAwLjA5MzcgIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY4OSAgcG93ZXIgMC45MzggIDAuNSAtPiAwLjk2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY5MCAgcG93ZXIgMC4wOTM4ICAwLjUgLT4gMC4zMDYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2OTEgIHBvd2VyIDAuOTM5ICAwLjUgLT4gMC45NjkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2OTIgIHBvd2VyIDAuMDkzOSAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NjkzICBwb3dlciAwLjk0MSAgMC41IC0+IDAuOTcwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njk0ICBwb3dlciAwLjA5NDEgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY5NSAgcG93ZXIgMC45NDIgIDAuNSAtPiAwLjk3MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDY5NiAgcG93ZXIgMC4wOTQyICAwLjUgLT4gMC4zMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2OTcgIHBvd2VyIDAuOTQzICAwLjUgLT4gMC45NzEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ2OTggIHBvd2VyIDAuMDk0MyAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Njk5ICBwb3dlciAwLjk0NCAgMC41IC0+IDAuOTcyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzAwICBwb3dlciAwLjA5NDQgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcwMSAgcG93ZXIgMC45NDUgIDAuNSAtPiAwLjk3MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcwMiAgcG93ZXIgMC4wOTQ1ICAwLjUgLT4gMC4zMDcgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MDMgIHBvd2VyIDAuOTQ2ICAwLjUgLT4gMC45NzMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MDQgIHBvd2VyIDAuMDk0NiAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzA1ICBwb3dlciAwLjk0NyAgMC41IC0+IDAuOTczICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzA2ICBwb3dlciAwLjA5NDcgIDAuNSAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcwNyAgcG93ZXIgMC45NDggIDAuNSAtPiAwLjk3NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcwOCAgcG93ZXIgMC4wOTQ4ICAwLjUgLT4gMC4zMDggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MDkgIHBvd2VyIDAuOTQ5ICAwLjUgLT4gMC45NzQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MTAgIHBvd2VyIDAuMDk0OSAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzExICBwb3dlciAwLjk1MSAgMC41IC0+IDAuOTc1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzEyICBwb3dlciAwLjA5NTEgIDAuNSAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcxMyAgcG93ZXIgMC45NTIgIDAuNSAtPiAwLjk3NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcxNCAgcG93ZXIgMC4wOTUyICAwLjUgLT4gMC4zMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MTUgIHBvd2VyIDAuOTUzICAwLjUgLT4gMC45NzYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MTYgIHBvd2VyIDAuMDk1MyAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzE3ICBwb3dlciAwLjk1NCAgMC41IC0+IDAuOTc3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzE4ICBwb3dlciAwLjA5NTQgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcxOSAgcG93ZXIgMC45NTUgIDAuNSAtPiAwLjk3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcyMCAgcG93ZXIgMC4wOTU1ICAwLjUgLT4gMC4zMDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MjEgIHBvd2VyIDAuOTU2ICAwLjUgLT4gMC45NzggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MjIgIHBvd2VyIDAuMDk1NiAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzIzICBwb3dlciAwLjk1NyAgMC41IC0+IDAuOTc4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzI0ICBwb3dlciAwLjA5NTcgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcyNSAgcG93ZXIgMC45NTggIDAuNSAtPiAwLjk3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDcyNiAgcG93ZXIgMC4wOTU4ICAwLjUgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MjcgIHBvd2VyIDAuOTU5ICAwLjUgLT4gMC45NzkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MjggIHBvd2VyIDAuMDk1OSAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzI5ICBwb3dlciAwLjk2MSAgMC41IC0+IDAuOTgwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzMwICBwb3dlciAwLjA5NjEgIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDczMSAgcG93ZXIgMC45NjIgIDAuNSAtPiAwLjk4MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDczMiAgcG93ZXIgMC4wOTYyICAwLjUgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MzMgIHBvd2VyIDAuOTYzICAwLjUgLT4gMC45ODEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MzQgIHBvd2VyIDAuMDk2MyAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzM1ICBwb3dlciAwLjk2NCAgMC41IC0+IDAuOTgyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzM2ICBwb3dlciAwLjA5NjQgIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDczNyAgcG93ZXIgMC45NjUgIDAuNSAtPiAwLjk4MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDczOCAgcG93ZXIgMC4wOTY1ICAwLjUgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3MzkgIHBvd2VyIDAuOTY2ICAwLjUgLT4gMC45ODMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NDAgIHBvd2VyIDAuMDk2NiAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzQxICBwb3dlciAwLjk2NyAgMC41IC0+IDAuOTgzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzQyICBwb3dlciAwLjA5NjcgIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc0MyAgcG93ZXIgMC45NjggIDAuNSAtPiAwLjk4NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc0NCAgcG93ZXIgMC4wOTY4ICAwLjUgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NDUgIHBvd2VyIDAuOTY5ICAwLjUgLT4gMC45ODQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NDYgIHBvd2VyIDAuMDk2OSAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzQ3ICBwb3dlciAwLjk3MSAgMC41IC0+IDAuOTg1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzQ4ICBwb3dlciAwLjA5NzEgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc0OSAgcG93ZXIgMC45NzIgIDAuNSAtPiAwLjk4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc1MCAgcG93ZXIgMC4wOTcyICAwLjUgLT4gMC4zMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NTEgIHBvd2VyIDAuOTczICAwLjUgLT4gMC45ODYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NTIgIHBvd2VyIDAuMDk3MyAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzUzICBwb3dlciAwLjk3NCAgMC41IC0+IDAuOTg3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzU0ICBwb3dlciAwLjA5NzQgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc1NSAgcG93ZXIgMC45NzUgIDAuNSAtPiAwLjk4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc1NiAgcG93ZXIgMC4wOTc1ICAwLjUgLT4gMC4zMTIgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NTcgIHBvd2VyIDAuOTc2ICAwLjUgLT4gMC45ODggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NTggIHBvd2VyIDAuMDk3NiAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzU5ICBwb3dlciAwLjk3NyAgMC41IC0+IDAuOTg4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzYwICBwb3dlciAwLjA5NzcgIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc2MSAgcG93ZXIgMC45NzggIDAuNSAtPiAwLjk4OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc2MiAgcG93ZXIgMC4wOTc4ICAwLjUgLT4gMC4zMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NjMgIHBvd2VyIDAuOTc5ICAwLjUgLT4gMC45ODkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NjQgIHBvd2VyIDAuMDk3OSAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzY1ICBwb3dlciAwLjk4MSAgMC41IC0+IDAuOTkwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzY2ICBwb3dlciAwLjA5ODEgIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc2NyAgcG93ZXIgMC45ODIgIDAuNSAtPiAwLjk5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc2OCAgcG93ZXIgMC4wOTgyICAwLjUgLT4gMC4zMTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NjkgIHBvd2VyIDAuOTgzICAwLjUgLT4gMC45OTEgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NzAgIHBvd2VyIDAuMDk4MyAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzcxICBwb3dlciAwLjk4NCAgMC41IC0+IDAuOTkyICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzcyICBwb3dlciAwLjA5ODQgIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc3MyAgcG93ZXIgMC45ODUgIDAuNSAtPiAwLjk5MiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc3NCAgcG93ZXIgMC4wOTg1ICAwLjUgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NzUgIHBvd2VyIDAuOTg2ICAwLjUgLT4gMC45OTMgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3NzYgIHBvd2VyIDAuMDk4NiAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzc3ICBwb3dlciAwLjk4NyAgMC41IC0+IDAuOTkzICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzc4ICBwb3dlciAwLjA5ODcgIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc3OSAgcG93ZXIgMC45ODggIDAuNSAtPiAwLjk5NCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc4MCAgcG93ZXIgMC4wOTg4ICAwLjUgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3ODEgIHBvd2VyIDAuOTg5ICAwLjUgLT4gMC45OTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3ODIgIHBvd2VyIDAuMDk4OSAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzgzICBwb3dlciAwLjk5MSAgMC41IC0+IDAuOTk1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzg0ICBwb3dlciAwLjA5OTEgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc4NSAgcG93ZXIgMC45OTIgIDAuNSAtPiAwLjk5NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc4NiAgcG93ZXIgMC4wOTkyICAwLjUgLT4gMC4zMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3ODcgIHBvd2VyIDAuOTkzICAwLjUgLT4gMC45OTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3ODggIHBvd2VyIDAuMDk5MyAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzg5ICBwb3dlciAwLjk5NCAgMC41IC0+IDAuOTk3ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0NzkwICBwb3dlciAwLjA5OTQgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc5MSAgcG93ZXIgMC45OTUgIDAuNSAtPiAwLjk5NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc5MiAgcG93ZXIgMC4wOTk1ICAwLjUgLT4gMC4zMTUgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3OTMgIHBvd2VyIDAuOTk2ICAwLjUgLT4gMC45OTggIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3OTQgIHBvd2VyIDAuMDk5NiAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzk1ICBwb3dlciAwLjk5NyAgMC41IC0+IDAuOTk4ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g0Nzk2ICBwb3dlciAwLjA5OTcgIDAuNSAtPiAwLjMxNiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc5NyAgcG93ZXIgMC45OTggIDAuNSAtPiAwLjk5OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NDc5OCAgcG93ZXIgMC4wOTk4ICAwLjUgLT4gMC4zMTYgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ3OTkgIHBvd2VyIDAuOTk5ICAwLjUgLT4gMC45OTkgIEluZXhhY3QgUm91bmRlZAorcHdzeDQ4MDAgIHBvd2VyIDAuMDk5OSAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gQSBncm91cCBvZiBwcmVjaXNpb24gNCB0ZXN0cyB3aGVyZSBIdWxsICYgQWJyaGFtIGFkanVzdG1lbnRzIGFyZQorLS0gbmVlZGVkIGluIHNvbWUgY2FzZXMgKGJvdGggdXAgYW5kIGRvd24pIFtzZWUgSHVsbDE5ODViXQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogICA0Citwd3N4NTAwMSAgcG93ZXIgMC4wMTE4ICAgMC41IC0+IDAuMTA4NiAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwMiAgcG93ZXIgMC4xMTkgICAgMC41IC0+IDAuMzQ1MCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwMyAgcG93ZXIgMC4wMTE5ICAgMC41IC0+IDAuMTA5MSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwNCAgcG93ZXIgMC4xMjEgICAgMC41IC0+IDAuMzQ3OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwNSAgcG93ZXIgMC4wMTIxICAgMC41IC0+IDAuMTEwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwNiAgcG93ZXIgMC4xMjIgICAgMC41IC0+IDAuMzQ5MyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwNyAgcG93ZXIgMC4wMTIyICAgMC41IC0+IDAuMTEwNSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwOCAgcG93ZXIgMC4xMjMgICAgMC41IC0+IDAuMzUwNyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAwOSAgcG93ZXIgMC40OTQgICAgMC41IC0+IDAuNzAyOSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxMCAgcG93ZXIgMC4wNjY5ICAgMC41IC0+IDAuMjU4NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxMSAgcG93ZXIgMC45NTU4ICAgMC41IC0+IDAuOTc3NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxMiAgcG93ZXIgMC45MzQ4ICAgMC41IC0+IDAuOTY2OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxMyAgcG93ZXIgMC45MzQ1ICAgMC41IC0+IDAuOTY2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxNCAgcG93ZXIgMC4wOTM0NSAgMC41IC0+IDAuMzA1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxNSAgcG93ZXIgMC45MzQ2ICAgMC41IC0+IDAuOTY2NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxNiAgcG93ZXIgMC4wOTM0NiAgMC41IC0+IDAuMzA1NyAgSW5leGFjdCBSb3VuZGVkCitwd3N4NTAxNyAgcG93ZXIgMC45MzQ3ICAgMC41IC0+IDAuOTY2OCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKK3ByZWNpc2lvbjogOQorcHdzeDcwMCAgcG93ZXIgIDAgICAgICAgIDAuNSAtPiAnMCcKK3B3c3g3MDEgIHBvd2VyICAtMCAgICAgICAwLjUgLT4gJzAnCitwd3N4NzAyICBwb3dlciAgMC4zOSAgICAgMC41IC0+IDAuNjI0NDk5ODAwICAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcwMyAgcG93ZXIgIDEwMCAgICAgIDAuNSAtPiAnMTAuMDAwMDAwMCcgICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MDQgIHBvd2VyICAxLjAwICAgICAwLjUgLT4gJzEuMDAwMDAwMDAnICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzA1ICBwb3dlciAgNyAgICAgICAgMC41IC0+ICcyLjY0NTc1MTMxJyAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcwNiAgcG93ZXIgIDEwICAgICAgIDAuNSAtPiAzLjE2MjI3NzY2ICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gc29tZSBvbmUtb2ZmcworcHJlY2lzaW9uOiA5Citwd3N4NzExICBwb3dlciAgMC4xICAgICAgMC41IC0+IDAuMzE2MjI3NzY2ICAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcxMiAgcG93ZXIgIDAuMiAgICAgIDAuNSAtPiAwLjQ0NzIxMzU5NSAgICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MTMgIHBvd2VyICAwLjMgICAgICAwLjUgLT4gMC41NDc3MjI1NTggICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzE0ICBwb3dlciAgMC40ICAgICAgMC41IC0+IDAuNjMyNDU1NTMyICAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcxNSAgcG93ZXIgIDAuNSAgICAgIDAuNSAtPiAwLjcwNzEwNjc4MSAgICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MTYgIHBvd2VyICAwLjYgICAgICAwLjUgLT4gMC43NzQ1OTY2NjkgICAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzE3ICBwb3dlciAgMC43ICAgICAgMC41IC0+IDAuODM2NjYwMDI3ICAgIEluZXhhY3QgUm91bmRlZAorcHdzeDcxOCAgcG93ZXIgIDAuOCAgICAgIDAuNSAtPiAwLjg5NDQyNzE5MSAgICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MTkgIHBvd2VyICAwLjkgICAgICAwLjUgLT4gMC45NDg2ODMyOTggICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEwICAgICAgICAgICAgICAgLS0gbm90ZSBubyBub3JtYWxpemF0b2luIGhlcmUKK3B3c3g3MjAgIHBvd2VyICswLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYwICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDExCitwd3N4NzIxICBwb3dlciArMC4xICAgICAgMC41IC0+IDAuMzE2MjI3NzY2MDIgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMgorcHdzeDcyMiAgcG93ZXIgKzAuMSAgICAgIDAuNSAtPiAwLjMxNjIyNzc2NjAxNyBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogOQorcHdzeDcyMyAgcG93ZXIgIDAuMzkgICAgIDAuNSAtPiAwLjYyNDQ5OTgwMCAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTUKK3B3c3g3MjQgIHBvd2VyICAwLjM5ICAgICAwLjUgLT4gMC42MjQ0OTk3OTk4Mzk4NDAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGRpc2N1c3Npb24gY2FzZXMKK3ByZWNpc2lvbjogNworcHdzeDczMSAgcG93ZXIgICAgIDkgICAgMC41IC0+IDMuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MzIgIHBvd2VyICAgMTAwICAgIDAuNSAtPiAxMC4wMDAwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzMzICBwb3dlciAgIDEyMyAgICAwLjUgLT4gMTEuMDkwNTQgIEluZXhhY3QgUm91bmRlZAorcHdzeDczNCAgcG93ZXIgICAxNDQgICAgMC41IC0+IDEyLjAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3MzUgIHBvd2VyICAgMTU2ICAgIDAuNSAtPiAxMi40OTAwMCAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzM2ICBwb3dlciAxMDAwMCAgICAwLjUgLT4gMTAwLjAwMDAgIEluZXhhY3QgUm91bmRlZAorCistLSB2YWx1ZXMgY2xvc2UgdG8gb3ZlcmZsb3cgKGlmIHRoZXJlIHdlcmUgaW5wdXQgcm91bmRpbmcpCittYXhleHBvbmVudDogOTkKK21pbmV4cG9uZW50OiAtOTkKK3ByZWNpc2lvbjogNQorcHdzeDc2MCAgcG93ZXIgIDkuOTk5N0UrOTkgICAgMC41IC0+IDkuOTk5OEUrNDkgSW5leGFjdCBSb3VuZGVkCitwd3N4NzYxICBwb3dlciAgOS45OTk4RSs5OSAgICAwLjUgLT4gOS45OTk5RSs0OSBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NjIgIHBvd2VyICA5Ljk5OTlFKzk5ICAgIDAuNSAtPiA5Ljk5OTlFKzQ5IEluZXhhY3QgUm91bmRlZAorcHdzeDc2MyAgcG93ZXIgIDkuOTk5OTFFKzk5ICAgMC41IC0+IDEuMDAwMEUrNTAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzY0ICBwb3dlciAgOS45OTk5NEUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NjUgIHBvd2VyICA5Ljk5OTk1RSs5OSAgIDAuNSAtPiAxLjAwMDBFKzUwIEluZXhhY3QgUm91bmRlZAorcHdzeDc2NiAgcG93ZXIgIDkuOTk5OTlFKzk5ICAgMC41IC0+IDEuMDAwMEUrNTAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDkKK3B3c3g3NzAgIHBvd2VyICA5Ljk5OTdFKzk5ICAgIDAuNSAtPiA5Ljk5OTg1MDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4NzcxICBwb3dlciAgOS45OTk4RSs5OSAgICAwLjUgLT4gOS45OTk5MDAwMEUrNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDc3MiAgcG93ZXIgIDkuOTk5OUUrOTkgICAgMC41IC0+IDkuOTk5OTUwMDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NzMgIHBvd2VyICA5Ljk5OTkxRSs5OSAgIDAuNSAtPiA5Ljk5OTk1NTAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitwd3N4Nzc0ICBwb3dlciAgOS45OTk5NEUrOTkgICAwLjUgLT4gOS45OTk5NzAwMEUrNDkgIEluZXhhY3QgUm91bmRlZAorcHdzeDc3NSAgcG93ZXIgIDkuOTk5OTVFKzk5ICAgMC41IC0+IDkuOTk5OTc1MDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3NzYgIHBvd2VyICA5Ljk5OTk5RSs5OSAgIDAuNSAtPiA5Ljk5OTk5NTAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIwCitwd3N4NzgwICBwb3dlciAgOS45OTk3RSs5OSAgICAwLjUgLT4gJzkuOTk5ODQ5OTk4ODc0OTgzMTI0N0UrNDknIEluZXhhY3QgUm91bmRlZAorcHdzeDc4MSAgcG93ZXIgIDkuOTk5OEUrOTkgICAgMC41IC0+ICc5Ljk5OTg5OTk5OTQ5OTk5NDk5OTlFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3ODIgIHBvd2VyICA5Ljk5OTlFKzk5ICAgIDAuNSAtPiAnOS45OTk5NDk5OTk4NzQ5OTkzNzUwRSs0OScgSW5leGFjdCBSb3VuZGVkCitwd3N4NzgzICBwb3dlciAgOS45OTk5MUUrOTkgICAwLjUgLT4gJzkuOTk5OTU0OTk5ODk4NzQ5NTQ0NEUrNDknIEluZXhhY3QgUm91bmRlZAorcHdzeDc4NCAgcG93ZXIgIDkuOTk5OTRFKzk5ICAgMC41IC0+ICc5Ljk5OTk2OTk5OTk1NDk5OTg2NTBFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKK3B3c3g3ODUgIHBvd2VyICA5Ljk5OTk1RSs5OSAgIDAuNSAtPiAnOS45OTk5NzQ5OTk5Njg3NDk5MjE5RSs0OScgSW5leGFjdCBSb3VuZGVkCitwd3N4Nzg2ICBwb3dlciAgOS45OTk5OUUrOTkgICAwLjUgLT4gJzkuOTk5OTk0OTk5OTk4NzQ5OTk5NEUrNDknIEluZXhhY3QgUm91bmRlZAorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3dzIFt0aGVzZSBjYW4gb25seSByZXN1bHQgd2hlbiBlTWF4IGlzIDwgZGlnaXRzKzFdCistLSBFdGlueSA9IC0oRW1heCArIChwcmVjaXNpb24tMSkpCistLSBzdGFydCB3aXRoIHN1Ym5vcm1hbCBvcGVyYW5kcyBhbmQgbm9ybWFsIHJlc3VsdHMKK21heGV4cG9uZW50OiA5CittaW5leHBvbmVudDogLTkKK3ByZWNpc2lvbjogOSAgICAgICAgICAgICAgICAtLSBFdGlueT0tMTcKK3B3c3g4MDAgIHBvd2VyICAxRS0xNyAgICAwLjUgLT4gMy4xNjIyNzc2NkUtOSBJbmV4YWN0IFJvdW5kZWQKK3B3c3g4MDEgIHBvd2VyIDEwRS0xNyAgICAwLjUgLT4gMS4wMDAwMDAwMEUtOCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTAgICAgICAgICAgICAgICAtLSBFdGlueT0tMTgKK3B3c3g4MDIgIHBvd2VyIDEwRS0xOCAgICAwLjUgLT4gMy4xNjIyNzc2NjBFLTkgSW5leGFjdCBSb3VuZGVkCitwd3N4ODAzICBwb3dlciAgMUUtMTggICAgMC41IC0+IDEuMDAwMDAwMDAwRS05IEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDExICAgICAgICAgICAgICAgLS0gRXRpbnk9LTE5Citwd3N4ODA0ICBwb3dlciAgMUUtMTkgICAgMC41IC0+IDMuMTYyMjc3NjYwRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorLS0gVGhlIG5leHQgdGVzdCBzaG91bGQgYmUgc2tpcHBlZCBmb3IgZGVjTnVtYmVyCitwd3N4ODA1ICBwb3dlciAxMEUtMTkgICAgMC41IC0+IDEuMDAwMDAwMDAwMEUtOSBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTIgICAgICAgICAgICAgICAtLSBFdGlueT0tMjAKK3B3c3g4MDYgIHBvd2VyIDEwRS0yMCAgICAwLjUgLT4gMy4xNjIyNzc2NjAyRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcHdzeDgwNyAgcG93ZXIgIDFFLTIwICAgIDAuNSAtPiAxLjAwMDAwMDAwMDBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMTMgICAgICAgICAgICAgICAtLSBFdGlueT0tMjEKK3B3c3g4MDggIHBvd2VyICAxRS0yMSAgICAwLjUgLT4gMy4xNjIyNzc2NjAyRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcHdzeDgwOSAgcG93ZXIgMTBFLTIxICAgIDAuNSAtPiAxLjAwMDAwMDAwMDAwRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNCAgICAgICAgICAgICAgIC0tIEV0aW55PS0yMgorcHdzeDgxMCAgcG93ZXIgIDFFLTIxICAgIDAuNSAtPiAzLjE2MjI3NzY2MDE3RS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcHdzeDgxMSAgcG93ZXIgMTBFLTIyICAgIDAuNSAtPiAzLjE2MjI3NzY2MDE3RS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcHdzeDgxMiAgcG93ZXIgIDFFLTIyICAgIDAuNSAtPiAxLjAwMDAwMDAwMDAwRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCisKKy0tIHNwZWNpYWwgdmFsdWVzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHdzeDgyMCAgcG93ZXIgICBJbmYgICAgIDAuNSAtPiBJbmZpbml0eQorcHdzeDgyMSAgcG93ZXIgIC1JbmYgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3B3c3g4MjIgIHBvd2VyICAgTmFOICAgICAwLjUgLT4gTmFOCitwd3N4ODIzICBwb3dlciAgc05hTiAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gcHJvcGFnYXRpbmcgTmFOcworcHdzeDgyNCAgcG93ZXIgIHNOYU4xMjMgIDAuNSAtPiBOYU4xMjMgSW52YWxpZF9vcGVyYXRpb24KK3B3c3g4MjUgIHBvd2VyIC1zTmFOMzIxICAwLjUgLT4gLU5hTjMyMSBJbnZhbGlkX29wZXJhdGlvbgorcHdzeDgyNiAgcG93ZXIgICBOYU40NTYgIDAuNSAtPiBOYU40NTYKK3B3c3g4MjcgIHBvd2VyICAtTmFONjU0ICAwLjUgLT4gLU5hTjY1NAorcHdzeDgyOCAgcG93ZXIgICBOYU4xICAgIDAuNSAtPiBOYU4xCisKKy0tIE51bGwgdGVzdAorcHdzeDkwMCAgcG93ZXIgICMgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcXVhbnRpemUuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcXVhbnRpemUuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Y4NGJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9xdWFudGl6ZS5kZWNUZXN0CkBAIC0wLDAgKzEsOTQ4IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHF1YW50aXplLmRlY1Rlc3QgLS0gZGVjaW1hbCBxdWFudGl6ZSBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gTW9zdCBvZiB0aGUgdGVzdHMgaGVyZSBhc3N1bWUgYSAicmVndWxhciBwYXR0ZXJuIiwgd2hlcmUgdGhlCistLSBzaWduIGFuZCBjb2VmZmljaWVudCBhcmUgKzEuCistLSAyMDA0LjAzLjE1IFVuZGVyZmxvdyBmb3IgcXVhbnRpemUgaXMgc3VwcHJlc3NlZAorLS0gMjAwNS4wNi4wOCBNb3JlIGV4dGVuc2l2ZSB0ZXN0cyBmb3IgJ2RvZXMgbm90IGZpdCcKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKKworLS0gc2FuaXR5IGNoZWNrcworcXVheDAwMSBxdWFudGl6ZSAwICAgICAgIDFlMCAgIC0+IDAKK3F1YXgwMDIgcXVhbnRpemUgMSAgICAgICAxZTAgICAtPiAxCitxdWF4MDAzIHF1YW50aXplIDAuMSAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwMDUgcXVhbnRpemUgMC4xICAgIDFlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDAwNiBxdWFudGl6ZSAwLjEgICAgIDFlMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkCitxdWF4MDA3IHF1YW50aXplIDAuMSAgICAxZS0xICAgLT4gMC4xCitxdWF4MDA4IHF1YW50aXplIDAuMSAgICAxZS0yICAgLT4gMC4xMAorcXVheDAwOSBxdWFudGl6ZSAwLjEgICAgMWUtMyAgIC0+IDAuMTAwCitxdWF4MDEwIHF1YW50aXplIDAuOSAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwMTEgcXVhbnRpemUgMC45ICAgIDFlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDAxMiBxdWFudGl6ZSAwLjkgICAgMWUrMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkCitxdWF4MDEzIHF1YW50aXplIDAuOSAgICAxZS0xICAgLT4gMC45CitxdWF4MDE0IHF1YW50aXplIDAuOSAgICAxZS0yICAgLT4gMC45MAorcXVheDAxNSBxdWFudGl6ZSAwLjkgICAgMWUtMyAgIC0+IDAuOTAwCistLSBuZWdhdGl2ZXMKK3F1YXgwMjEgcXVhbnRpemUgLTAgICAgICAxZTAgICAtPiAtMAorcXVheDAyMiBxdWFudGl6ZSAtMSAgICAgIDFlMCAgIC0+IC0xCitxdWF4MDIzIHF1YW50aXplIC0wLjEgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MDI1IHF1YW50aXplIC0wLjEgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MDI2IHF1YW50aXplIC0wLjEgICAgMWUwICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitxdWF4MDI3IHF1YW50aXplIC0wLjEgICAxZS0xICAgLT4gLTAuMQorcXVheDAyOCBxdWFudGl6ZSAtMC4xICAgMWUtMiAgIC0+IC0wLjEwCitxdWF4MDI5IHF1YW50aXplIC0wLjEgICAxZS0zICAgLT4gLTAuMTAwCitxdWF4MDMwIHF1YW50aXplIC0wLjkgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MDMxIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MDMyIHF1YW50aXplIC0wLjkgICAxZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitxdWF4MDMzIHF1YW50aXplIC0wLjkgICAxZS0xICAgLT4gLTAuOQorcXVheDAzNCBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwCitxdWF4MDM1IHF1YW50aXplIC0wLjkgICAxZS0zICAgLT4gLTAuOTAwCitxdWF4MDM2IHF1YW50aXplIC0wLjUgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MDM3IHF1YW50aXplIC0wLjUgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MDM4IHF1YW50aXplIC0wLjUgICAxZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitxdWF4MDM5IHF1YW50aXplIC0wLjUgICAxZS0xICAgLT4gLTAuNQorcXVheDA0MCBxdWFudGl6ZSAtMC41ICAgMWUtMiAgIC0+IC0wLjUwCitxdWF4MDQxIHF1YW50aXplIC0wLjUgICAxZS0zICAgLT4gLTAuNTAwCitxdWF4MDQyIHF1YW50aXplIC0wLjkgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MDQzIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MDQ0IHF1YW50aXplIC0wLjkgICAxZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitxdWF4MDQ1IHF1YW50aXplIC0wLjkgICAxZS0xICAgLT4gLTAuOQorcXVheDA0NiBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwCitxdWF4MDQ3IHF1YW50aXplIC0wLjkgICAxZS0zICAgLT4gLTAuOTAwCisKKy0tIGV4YW1wbGVzIGZyb20gU3BlY2lmaWNhdGlvbgorcXVheDA2MCBxdWFudGl6ZSAyLjE3ICAgMC4wMDEgIC0+IDIuMTcwCitxdWF4MDYxIHF1YW50aXplIDIuMTcgICAwLjAxICAgLT4gMi4xNworcXVheDA2MiBxdWFudGl6ZSAyLjE3ICAgMC4xICAgIC0+IDIuMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwNjMgcXVhbnRpemUgMi4xNyAgIDFlKzAgICAtPiAyIEluZXhhY3QgUm91bmRlZAorcXVheDA2NCBxdWFudGl6ZSAyLjE3ICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MDY1IHF1YW50aXplIC1JbmYgICAgSW5mICAgLT4gLUluZmluaXR5CitxdWF4MDY2IHF1YW50aXplIDIgICAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4MDY3IHF1YW50aXplIC0wLjEgICAgMSAgICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitxdWF4MDY4IHF1YW50aXplIC0wICAgICAgMWUrNSAgICAgLT4gLTBFKzUKK3F1YXgwNjkgcXVhbnRpemUgKzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXgwNzAgcXVhbnRpemUgLTM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXgwNzEgcXVhbnRpemUgMjE3ICAgIDFlLTEgICAtPiAyMTcuMAorcXVheDA3MiBxdWFudGl6ZSAyMTcgICAgMWUrMCAgIC0+IDIxNworcXVheDA3MyBxdWFudGl6ZSAyMTcgICAgMWUrMSAgIC0+IDIuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwNzQgcXVhbnRpemUgMjE3ICAgIDFlKzIgICAtPiAyRSsyIEluZXhhY3QgUm91bmRlZAorCistLSBnZW5lcmFsIHRlc3RzIC4uCitxdWF4MDg5IHF1YW50aXplIDEyICAgICAxZSs0ICAgLT4gMEUrNCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwOTAgcXVhbnRpemUgMTIgICAgIDFlKzMgICAtPiAwRSszIEluZXhhY3QgUm91bmRlZAorcXVheDA5MSBxdWFudGl6ZSAxMiAgICAgMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MDkyIHF1YW50aXplIDEyICAgICAxZSsxICAgLT4gMUUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwOTMgcXVhbnRpemUgMS4yMzQ1IDFlLTIgICAtPiAxLjIzIEluZXhhY3QgUm91bmRlZAorcXVheDA5NCBxdWFudGl6ZSAxLjIzNTUgMWUtMiAgIC0+IDEuMjQgSW5leGFjdCBSb3VuZGVkCitxdWF4MDk1IHF1YW50aXplIDEuMjM0NSAxZS02ICAgLT4gMS4yMzQ1MDAKK3F1YXgwOTYgcXVhbnRpemUgOS45OTk5IDFlLTIgICAtPiAxMC4wMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwOTcgcXVhbnRpemUgMC4wMDAxIDFlLTIgICAtPiAwLjAwIEluZXhhY3QgUm91bmRlZAorcXVheDA5OCBxdWFudGl6ZSAwLjAwMSAgMWUtMiAgIC0+IDAuMDAgSW5leGFjdCBSb3VuZGVkCitxdWF4MDk5IHF1YW50aXplIDAuMDA5ICAxZS0yICAgLT4gMC4wMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxMDAgcXVhbnRpemUgOTIgICAgIDFlKzIgICAtPiAxRSsyIEluZXhhY3QgUm91bmRlZAorCitxdWF4MTAxIHF1YW50aXplIC0xICAgICAgMWUwICAgLT4gIC0xCitxdWF4MTAyIHF1YW50aXplIC0xICAgICAxZS0xICAgLT4gIC0xLjAKK3F1YXgxMDMgcXVhbnRpemUgLTEgICAgIDFlLTIgICAtPiAgLTEuMDAKK3F1YXgxMDQgcXVhbnRpemUgIDAgICAgICAxZTAgICAtPiAgMAorcXVheDEwNSBxdWFudGl6ZSAgMCAgICAgMWUtMSAgIC0+ICAwLjAKK3F1YXgxMDYgcXVhbnRpemUgIDAgICAgIDFlLTIgICAtPiAgMC4wMAorcXVheDEwNyBxdWFudGl6ZSAgMC4wMCAgIDFlMCAgIC0+ICAwCitxdWF4MTA4IHF1YW50aXplICAwICAgICAxZSsxICAgLT4gIDBFKzEKK3F1YXgxMDkgcXVhbnRpemUgIDAgICAgIDFlKzIgICAtPiAgMEUrMgorcXVheDExMCBxdWFudGl6ZSArMSAgICAgIDFlMCAgIC0+ICAxCitxdWF4MTExIHF1YW50aXplICsxICAgICAxZS0xICAgLT4gIDEuMAorcXVheDExMiBxdWFudGl6ZSArMSAgICAgMWUtMiAgIC0+ICAxLjAwCisKK3F1YXgxMjAgcXVhbnRpemUgICAxLjA0ICAxZS0zIC0+ICAxLjA0MAorcXVheDEyMSBxdWFudGl6ZSAgIDEuMDQgIDFlLTIgLT4gIDEuMDQKK3F1YXgxMjIgcXVhbnRpemUgICAxLjA0ICAxZS0xIC0+ICAxLjAgSW5leGFjdCBSb3VuZGVkCitxdWF4MTIzIHF1YW50aXplICAgMS4wNCAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxMjQgcXVhbnRpemUgICAxLjA1ICAxZS0zIC0+ICAxLjA1MAorcXVheDEyNSBxdWFudGl6ZSAgIDEuMDUgIDFlLTIgLT4gIDEuMDUKK3F1YXgxMjYgcXVhbnRpemUgICAxLjA1ICAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCitxdWF4MTMxIHF1YW50aXplICAgMS4wNSAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxMzIgcXVhbnRpemUgICAxLjA2ICAxZS0zIC0+ICAxLjA2MAorcXVheDEzMyBxdWFudGl6ZSAgIDEuMDYgIDFlLTIgLT4gIDEuMDYKK3F1YXgxMzQgcXVhbnRpemUgICAxLjA2ICAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCitxdWF4MTM1IHF1YW50aXplICAgMS4wNiAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKKworcXVheDE0MCBxdWFudGl6ZSAgIC0xMCAgICAxZS0yICAtPiAgLTEwLjAwCitxdWF4MTQxIHF1YW50aXplICAgKzEgICAgIDFlLTIgIC0+ICAxLjAwCitxdWF4MTQyIHF1YW50aXplICAgKzEwICAgIDFlLTIgIC0+ICAxMC4wMAorcXVheDE0MyBxdWFudGl6ZSAgIDFFKzEwICAxZS0yICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4MTQ0IHF1YW50aXplICAgMUUtMTAgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZAorcXVheDE0NSBxdWFudGl6ZSAgIDFFLTMgICAxZS0yICAtPiAgMC4wMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxNDYgcXVhbnRpemUgICAxRS0yICAgMWUtMiAgLT4gIDAuMDEKK3F1YXgxNDcgcXVhbnRpemUgICAxRS0xICAgMWUtMiAgLT4gIDAuMTAKK3F1YXgxNDggcXVhbnRpemUgICAwRS0xMCAgMWUtMiAgLT4gIDAuMDAKKworcXVheDE1MCBxdWFudGl6ZSAgIDEuMDYwMCAxZS01IC0+ICAxLjA2MDAwCitxdWF4MTUxIHF1YW50aXplICAgMS4wNjAwIDFlLTQgLT4gIDEuMDYwMAorcXVheDE1MiBxdWFudGl6ZSAgIDEuMDYwMCAxZS0zIC0+ICAxLjA2MCBSb3VuZGVkCitxdWF4MTUzIHF1YW50aXplICAgMS4wNjAwIDFlLTIgLT4gIDEuMDYgUm91bmRlZAorcXVheDE1NCBxdWFudGl6ZSAgIDEuMDYwMCAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCitxdWF4MTU1IHF1YW50aXplICAgMS4wNjAwICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCisKKy0tIGJhc2UgdGVzdHMgd2l0aCBub24tMSBjb2VmZmljaWVudHMKK3F1YXgxNjEgcXVhbnRpemUgMCAgICAgIC05ZTAgICAtPiAwCitxdWF4MTYyIHF1YW50aXplIDEgICAgICAtN2UwICAgLT4gMQorcXVheDE2MyBxdWFudGl6ZSAwLjEgICAtMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MTY1IHF1YW50aXplIDAuMSAgICAwZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxNjYgcXVhbnRpemUgMC4xICAgICAyZTAgICAtPiAwIEluZXhhY3QgUm91bmRlZAorcXVheDE2NyBxdWFudGl6ZSAwLjEgICAgM2UtMSAgIC0+IDAuMQorcXVheDE2OCBxdWFudGl6ZSAwLjEgICA0NGUtMiAgIC0+IDAuMTAKK3F1YXgxNjkgcXVhbnRpemUgMC4xICA1NTVlLTMgICAtPiAwLjEwMAorcXVheDE3MCBxdWFudGl6ZSAwLjkgNjY2NmUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MTcxIHF1YW50aXplIDAuOSAtNzc3ZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxNzIgcXVhbnRpemUgMC45ICAtODhlKzAgICAtPiAxIEluZXhhY3QgUm91bmRlZAorcXVheDE3MyBxdWFudGl6ZSAwLjkgICAtOWUtMSAgIC0+IDAuOQorcXVheDE3NCBxdWFudGl6ZSAwLjkgICAgMGUtMiAgIC0+IDAuOTAKK3F1YXgxNzUgcXVhbnRpemUgMC45ICAxLjFlLTMgICAtPiAwLjkwMDAKKy0tIG5lZ2F0aXZlcworcXVheDE4MSBxdWFudGl6ZSAtMCAgICAxLjFlMCAgIC0+IC0wLjAKK3F1YXgxODIgcXVhbnRpemUgLTEgICAgIC0xZTAgICAtPiAtMQorcXVheDE4MyBxdWFudGl6ZSAtMC4xICAxMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorcXVheDE4NSBxdWFudGl6ZSAtMC4xIDExMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDE4NiBxdWFudGl6ZSAtMC4xICAgNzFlMCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAorcXVheDE4NyBxdWFudGl6ZSAtMC4xIC05MWUtMSAgIC0+IC0wLjEKK3F1YXgxODggcXVhbnRpemUgLTAuMSAtLjFlLTIgICAtPiAtMC4xMDAKK3F1YXgxODkgcXVhbnRpemUgLTAuMSAgLTFlLTMgICAtPiAtMC4xMDAKK3F1YXgxOTAgcXVhbnRpemUgLTAuOSAgIDBlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxOTEgcXVhbnRpemUgLTAuOSAgLTBlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxOTIgcXVhbnRpemUgLTAuOSAtMTBlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxOTMgcXVhbnRpemUgLTAuOSAxMDBlLTEgICAtPiAtMC45CitxdWF4MTk0IHF1YW50aXplIC0wLjkgOTk5ZS0yICAgLT4gLTAuOTAKKworLS0gK3ZlIGV4cG9uZW50cyAuLgorcXVheDIwMSBxdWFudGl6ZSAgIC0xICAgMWUrMCAtPiAgLTEKK3F1YXgyMDIgcXVhbnRpemUgICAtMSAgIDFlKzEgLT4gIC0wRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDIwMyBxdWFudGl6ZSAgIC0xICAgMWUrMiAtPiAgLTBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MjA0IHF1YW50aXplICAgIDAgICAxZSswIC0+ICAwCitxdWF4MjA1IHF1YW50aXplICAgIDAgICAxZSsxIC0+ICAwRSsxCitxdWF4MjA2IHF1YW50aXplICAgIDAgICAxZSsyIC0+ICAwRSsyCitxdWF4MjA3IHF1YW50aXplICAgKzEgICAxZSswIC0+ICAxCitxdWF4MjA4IHF1YW50aXplICAgKzEgICAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDIwOSBxdWFudGl6ZSAgICsxICAgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworcXVheDIyMCBxdWFudGl6ZSAgIDEuMDQgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyMjEgcXVhbnRpemUgICAxLjA0IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MjIyIHF1YW50aXplICAgMS4wNCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDIyMyBxdWFudGl6ZSAgIDEuMDQgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyMjQgcXVhbnRpemUgICAxLjA1IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitxdWF4MjI1IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorcXVheDIyNiBxdWFudGl6ZSAgIDEuMDUgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyMjcgcXVhbnRpemUgICAxLjA1IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitxdWF4MjI4IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorcXVheDIyOSBxdWFudGl6ZSAgIDEuMDUgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyMzAgcXVhbnRpemUgICAxLjA1IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MjMxIHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorcXVheDIzMiBxdWFudGl6ZSAgIDEuMDYgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3F1YXgyMzMgcXVhbnRpemUgICAxLjA2IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MjM0IHF1YW50aXplICAgMS4wNiAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDIzNSBxdWFudGl6ZSAgIDEuMDYgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKKworcXVheDI0MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzEgIC0+ICAtMUUrMSBSb3VuZGVkCitxdWF4MjQxIHF1YW50aXplICAgKzEgICAgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MjQyIHF1YW50aXplICAgKzEwICAgMWUrMSAgLT4gIDFFKzEgUm91bmRlZAorcXVheDI0MyBxdWFudGl6ZSAgIDFFKzEgIDFlKzEgIC0+ICAxRSsxICAgICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK3F1YXgyNDQgcXVhbnRpemUgICAxRSsyICAxZSsxICAtPiAgMS4wRSsyICAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitxdWF4MjQ1IHF1YW50aXplICAgMUUrMyAgMWUrMSAgLT4gIDEuMDBFKzMgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorcXVheDI0NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzEgIC0+ICAxLjAwMEUrNCAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK3F1YXgyNDcgcXVhbnRpemUgICAxRSs1ICAxZSsxICAtPiAgMS4wMDAwRSs1ICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitxdWF4MjQ4IHF1YW50aXplICAgMUUrNiAgMWUrMSAgLT4gIDEuMDAwMDBFKzYgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorcXVheDI0OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzEgIC0+ICAxLjAwMDAwMEUrNyAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK3F1YXgyNTAgcXVhbnRpemUgICAxRSs4ICAxZSsxICAtPiAgMS4wMDAwMDAwRSs4ICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCitxdWF4MjUxIHF1YW50aXplICAgMUUrOSAgMWUrMSAgLT4gIDEuMDAwMDAwMDBFKzkgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorLS0gbmV4dCBvbmUgdHJpZXMgdG8gYWRkIDkgemVyb3MKK3F1YXgyNTIgcXVhbnRpemUgICAxRSsxMCAxZSsxICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4MjUzIHF1YW50aXplICAgMUUtMTAgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MjU0IHF1YW50aXplICAgMUUtMiAgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MjU1IHF1YW50aXplICAgMEUtMTAgMWUrMSAgLT4gIDBFKzEKK3F1YXgyNTYgcXVhbnRpemUgIC0wRS0xMCAxZSsxICAtPiAtMEUrMQorcXVheDI1NyBxdWFudGl6ZSAgLTBFLTEgIDFlKzEgIC0+IC0wRSsxCitxdWF4MjU4IHF1YW50aXplICAtMCAgICAgMWUrMSAgLT4gLTBFKzEKK3F1YXgyNTkgcXVhbnRpemUgIC0wRSsxICAxZSsxICAtPiAtMEUrMQorCitxdWF4MjYwIHF1YW50aXplICAgLTEwICAgMWUrMiAgLT4gIC0wRSsyIEluZXhhY3QgUm91bmRlZAorcXVheDI2MSBxdWFudGl6ZSAgICsxICAgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorcXVheDI2MiBxdWFudGl6ZSAgICsxMCAgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorcXVheDI2MyBxdWFudGl6ZSAgIDFFKzEgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorcXVheDI2NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzIgIC0+ICAxRSsyCitxdWF4MjY1IHF1YW50aXplICAgMUUrMyAgMWUrMiAgLT4gIDEuMEUrMworcXVheDI2NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzIgIC0+ICAxLjAwRSs0CitxdWF4MjY3IHF1YW50aXplICAgMUUrNSAgMWUrMiAgLT4gIDEuMDAwRSs1CitxdWF4MjY4IHF1YW50aXplICAgMUUrNiAgMWUrMiAgLT4gIDEuMDAwMEUrNgorcXVheDI2OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzIgIC0+ICAxLjAwMDAwRSs3CitxdWF4MjcwIHF1YW50aXplICAgMUUrOCAgMWUrMiAgLT4gIDEuMDAwMDAwRSs4CitxdWF4MjcxIHF1YW50aXplICAgMUUrOSAgMWUrMiAgLT4gIDEuMDAwMDAwMEUrOQorcXVheDI3MiBxdWFudGl6ZSAgIDFFKzEwIDFlKzIgIC0+ICAxLjAwMDAwMDAwRSsxMAorcXVheDI3MyBxdWFudGl6ZSAgIDFFLTEwIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorcXVheDI3NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorcXVheDI3NSBxdWFudGl6ZSAgIDBFLTEwIDFlKzIgIC0+ICAwRSsyCisKK3F1YXgyODAgcXVhbnRpemUgICAtMTAgICAxZSszICAtPiAgLTBFKzMgSW5leGFjdCBSb3VuZGVkCitxdWF4MjgxIHF1YW50aXplICAgKzEgICAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitxdWF4MjgyIHF1YW50aXplICAgKzEwICAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitxdWF4MjgzIHF1YW50aXplICAgMUUrMSAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitxdWF4Mjg0IHF1YW50aXplICAgMUUrMiAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCitxdWF4Mjg1IHF1YW50aXplICAgMUUrMyAgMWUrMyAgLT4gIDFFKzMKK3F1YXgyODYgcXVhbnRpemUgICAxRSs0ICAxZSszICAtPiAgMS4wRSs0CitxdWF4Mjg3IHF1YW50aXplICAgMUUrNSAgMWUrMyAgLT4gIDEuMDBFKzUKK3F1YXgyODggcXVhbnRpemUgICAxRSs2ICAxZSszICAtPiAgMS4wMDBFKzYKK3F1YXgyODkgcXVhbnRpemUgICAxRSs3ICAxZSszICAtPiAgMS4wMDAwRSs3CitxdWF4MjkwIHF1YW50aXplICAgMUUrOCAgMWUrMyAgLT4gIDEuMDAwMDBFKzgKK3F1YXgyOTEgcXVhbnRpemUgICAxRSs5ICAxZSszICAtPiAgMS4wMDAwMDBFKzkKK3F1YXgyOTIgcXVhbnRpemUgICAxRSsxMCAxZSszICAtPiAgMS4wMDAwMDAwRSsxMAorcXVheDI5MyBxdWFudGl6ZSAgIDFFLTEwIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorcXVheDI5NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorcXVheDI5NSBxdWFudGl6ZSAgIDBFLTEwIDFlKzMgIC0+ICAwRSszCisKKy0tIHJvdW5kIHVwIGZyb20gYmVsb3cgW3NpZ24gd3JvbmcgaW4gSklUIGNvbXBpbGVyIG9uY2VdCitxdWF4MzAwIHF1YW50aXplICAgMC4wMDc4IDFlLTUgLT4gIDAuMDA3ODAKK3F1YXgzMDEgcXVhbnRpemUgICAwLjAwNzggMWUtNCAtPiAgMC4wMDc4CitxdWF4MzAyIHF1YW50aXplICAgMC4wMDc4IDFlLTMgLT4gIDAuMDA4IEluZXhhY3QgUm91bmRlZAorcXVheDMwMyBxdWFudGl6ZSAgIDAuMDA3OCAxZS0yIC0+ICAwLjAxIEluZXhhY3QgUm91bmRlZAorcXVheDMwNCBxdWFudGl6ZSAgIDAuMDA3OCAxZS0xIC0+ICAwLjAgSW5leGFjdCBSb3VuZGVkCitxdWF4MzA1IHF1YW50aXplICAgMC4wMDc4ICAxZTAgLT4gIDAgSW5leGFjdCBSb3VuZGVkCitxdWF4MzA2IHF1YW50aXplICAgMC4wMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MzA3IHF1YW50aXplICAgMC4wMDc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCisKK3F1YXgzMTAgcXVhbnRpemUgIC0wLjAwNzggMWUtNSAtPiAtMC4wMDc4MAorcXVheDMxMSBxdWFudGl6ZSAgLTAuMDA3OCAxZS00IC0+IC0wLjAwNzgKK3F1YXgzMTIgcXVhbnRpemUgIC0wLjAwNzggMWUtMyAtPiAtMC4wMDggSW5leGFjdCBSb3VuZGVkCitxdWF4MzEzIHF1YW50aXplICAtMC4wMDc4IDFlLTIgLT4gLTAuMDEgSW5leGFjdCBSb3VuZGVkCitxdWF4MzE0IHF1YW50aXplICAtMC4wMDc4IDFlLTEgLT4gLTAuMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzMTUgcXVhbnRpemUgIC0wLjAwNzggIDFlMCAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzMTYgcXVhbnRpemUgIC0wLjAwNzggMWUrMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzMTcgcXVhbnRpemUgIC0wLjAwNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworcXVheDMyMCBxdWFudGl6ZSAgIDAuMDc4IDFlLTUgLT4gIDAuMDc4MDAKK3F1YXgzMjEgcXVhbnRpemUgICAwLjA3OCAxZS00IC0+ICAwLjA3ODAKK3F1YXgzMjIgcXVhbnRpemUgICAwLjA3OCAxZS0zIC0+ICAwLjA3OAorcXVheDMyMyBxdWFudGl6ZSAgIDAuMDc4IDFlLTIgLT4gIDAuMDggSW5leGFjdCBSb3VuZGVkCitxdWF4MzI0IHF1YW50aXplICAgMC4wNzggMWUtMSAtPiAgMC4xIEluZXhhY3QgUm91bmRlZAorcXVheDMyNSBxdWFudGl6ZSAgIDAuMDc4ICAxZTAgLT4gIDAgSW5leGFjdCBSb3VuZGVkCitxdWF4MzI2IHF1YW50aXplICAgMC4wNzggMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzMjcgcXVhbnRpemUgICAwLjA3OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCitxdWF4MzMwIHF1YW50aXplICAtMC4wNzggMWUtNSAtPiAtMC4wNzgwMAorcXVheDMzMSBxdWFudGl6ZSAgLTAuMDc4IDFlLTQgLT4gLTAuMDc4MAorcXVheDMzMiBxdWFudGl6ZSAgLTAuMDc4IDFlLTMgLT4gLTAuMDc4CitxdWF4MzMzIHF1YW50aXplICAtMC4wNzggMWUtMiAtPiAtMC4wOCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzMzQgcXVhbnRpemUgIC0wLjA3OCAxZS0xIC0+IC0wLjEgSW5leGFjdCBSb3VuZGVkCitxdWF4MzM1IHF1YW50aXplICAtMC4wNzggIDFlMCAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzMzYgcXVhbnRpemUgIC0wLjA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDMzNyBxdWFudGl6ZSAgLTAuMDc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCisKK3F1YXgzNDAgcXVhbnRpemUgICAwLjc4IDFlLTUgLT4gIDAuNzgwMDAKK3F1YXgzNDEgcXVhbnRpemUgICAwLjc4IDFlLTQgLT4gIDAuNzgwMAorcXVheDM0MiBxdWFudGl6ZSAgIDAuNzggMWUtMyAtPiAgMC43ODAKK3F1YXgzNDMgcXVhbnRpemUgICAwLjc4IDFlLTIgLT4gIDAuNzgKK3F1YXgzNDQgcXVhbnRpemUgICAwLjc4IDFlLTEgLT4gIDAuOCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzNDUgcXVhbnRpemUgICAwLjc4ICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitxdWF4MzQ2IHF1YW50aXplICAgMC43OCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorcXVheDM0NyBxdWFudGl6ZSAgIDAuNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworcXVheDM1MCBxdWFudGl6ZSAgLTAuNzggMWUtNSAtPiAtMC43ODAwMAorcXVheDM1MSBxdWFudGl6ZSAgLTAuNzggMWUtNCAtPiAtMC43ODAwCitxdWF4MzUyIHF1YW50aXplICAtMC43OCAxZS0zIC0+IC0wLjc4MAorcXVheDM1MyBxdWFudGl6ZSAgLTAuNzggMWUtMiAtPiAtMC43OAorcXVheDM1NCBxdWFudGl6ZSAgLTAuNzggMWUtMSAtPiAtMC44IEluZXhhY3QgUm91bmRlZAorcXVheDM1NSBxdWFudGl6ZSAgLTAuNzggIDFlMCAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzNTYgcXVhbnRpemUgIC0wLjc4IDFlKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MzU3IHF1YW50aXplICAtMC43OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorCitxdWF4MzYwIHF1YW50aXplICAgNy44IDFlLTUgLT4gIDcuODAwMDAKK3F1YXgzNjEgcXVhbnRpemUgICA3LjggMWUtNCAtPiAgNy44MDAwCitxdWF4MzYyIHF1YW50aXplICAgNy44IDFlLTMgLT4gIDcuODAwCitxdWF4MzYzIHF1YW50aXplICAgNy44IDFlLTIgLT4gIDcuODAKK3F1YXgzNjQgcXVhbnRpemUgICA3LjggMWUtMSAtPiAgNy44CitxdWF4MzY1IHF1YW50aXplICAgNy44ICAxZTAgLT4gIDggSW5leGFjdCBSb3VuZGVkCitxdWF4MzY2IHF1YW50aXplICAgNy44IDFlKzEgLT4gIDFFKzEgSW5leGFjdCBSb3VuZGVkCitxdWF4MzY3IHF1YW50aXplICAgNy44IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCitxdWF4MzY4IHF1YW50aXplICAgNy44IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCisKK3F1YXgzNzAgcXVhbnRpemUgIC03LjggMWUtNSAtPiAtNy44MDAwMAorcXVheDM3MSBxdWFudGl6ZSAgLTcuOCAxZS00IC0+IC03LjgwMDAKK3F1YXgzNzIgcXVhbnRpemUgIC03LjggMWUtMyAtPiAtNy44MDAKK3F1YXgzNzMgcXVhbnRpemUgIC03LjggMWUtMiAtPiAtNy44MAorcXVheDM3NCBxdWFudGl6ZSAgLTcuOCAxZS0xIC0+IC03LjgKK3F1YXgzNzUgcXVhbnRpemUgIC03LjggIDFlMCAtPiAtOCBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzNzYgcXVhbnRpemUgIC03LjggMWUrMSAtPiAtMUUrMSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzNzcgcXVhbnRpemUgIC03LjggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzNzggcXVhbnRpemUgIC03LjggMWUrMyAtPiAtMEUrMyBJbmV4YWN0IFJvdW5kZWQKKworLS0gc29tZSBpbmRpdmlkdWFscworcHJlY2lzaW9uOiA5CitxdWF4MzgwIHF1YW50aXplICAgMzUyMzY0LjUwNiAxZS0yIC0+IDM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzODEgcXVhbnRpemUgICAzNTIzNjQ1LjA2IDFlLTIgLT4gMzUyMzY0NS4wNgorcXVheDM4MiBxdWFudGl6ZSAgIDM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXgzODMgcXVhbnRpemUgICAzNTIzNjQ1MDYgIDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4Mzg0IHF1YW50aXplICAtMzUyMzY0LjUwNiAxZS0yIC0+IC0zNTIzNjQuNTEgSW5leGFjdCBSb3VuZGVkCitxdWF4Mzg1IHF1YW50aXplICAtMzUyMzY0NS4wNiAxZS0yIC0+IC0zNTIzNjQ1LjA2CitxdWF4Mzg2IHF1YW50aXplICAtMzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDM4NyBxdWFudGl6ZSAgLTM1MjM2NDUwNiAgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworcm91bmRpbmc6IGRvd24KK3F1YXgzODkgcXVhbnRpemUgICAzNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSA/IHNob3VsZCB0aGF0IG9uZSBpbnN0ZWFkIGhhdmUgYmVlbjoKKy0tIHF1YXgzODkgcXVhbnRpemUgICAzNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityb3VuZGluZzogaGFsZl91cAorCistLSBhbmQgYSBmZXcgbW9yZSBmcm9tIGUtbWFpbCBkaXNjdXNzaW9ucworcHJlY2lzaW9uOiA3CitxdWF4MzkxIHF1YW50aXplICAxMi4zNDU2NyAgMWUtMyAtPiAxMi4zNDYgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXgzOTIgcXVhbnRpemUgIDEyMy40NTY3ICAxZS0zIC0+IDEyMy40NTcgIEluZXhhY3QgUm91bmRlZAorcXVheDM5MyBxdWFudGl6ZSAgMTIzNC41NjcgIDFlLTMgLT4gMTIzNC41NjcKK3F1YXgzOTQgcXVhbnRpemUgIDEyMzQ1LjY3ICAxZS0zIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDM5NSBxdWFudGl6ZSAgMTIzNDU2LjcgIDFlLTMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4Mzk2IHF1YW50aXplICAxMjM0NTY3LiAgMWUtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gc29tZSA5OTk5IHJvdW5kLXVwIGNhc2VzCitwcmVjaXNpb246IDkKK3F1YXg0MDAgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtNSAgLT4gIDkuOTk5MDAKK3F1YXg0MDEgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtNCAgLT4gIDkuOTk5MAorcXVheDQwMiBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0zICAtPiAgOS45OTkKK3F1YXg0MDMgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMiAgLT4gMTAuMDAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQwNCBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0xICAtPiAxMC4wICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDA1IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTAgIC0+IDEwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0MDYgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgIDFlMSAgLT4gMUUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQwNyBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUyICAtPiAwRSsyICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3F1YXg0MTAgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtNSAgLT4gIDAuOTk5MDAKK3F1YXg0MTEgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtNCAgLT4gIDAuOTk5MAorcXVheDQxMiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0zICAtPiAgMC45OTkKK3F1YXg0MTMgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtMiAgLT4gIDEuMDAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQxNCBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0xICAtPiAgMS4wICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDE1IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTAgIC0+ICAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0MTYgcXVhbnRpemUgICAwLjk5OSAgICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCitxdWF4NDIwIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTUgIC0+ICAwLjA5OTkwCitxdWF4NDIxIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTQgIC0+ICAwLjA5OTkKK3F1YXg0MjIgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMyAgLT4gIDAuMTAwICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQyMyBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS0yICAtPiAgMC4xMCAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDI0IHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTEgIC0+ICAwLjEgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0MjUgcXVhbnRpemUgICAwLjA5OTkgICAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQyNiBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3F1YXg0MzAgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtNSAgLT4gIDAuMDA5OTkKK3F1YXg0MzEgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtNCAgLT4gIDAuMDEwMCAgIEluZXhhY3QgUm91bmRlZAorcXVheDQzMiBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS0zICAtPiAgMC4wMTAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDMzIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTIgIC0+ICAwLjAxICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0MzQgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMSAgLT4gIDAuMCAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQzNSBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDM2IHF1YW50aXplICAgMC4wMDk5OSAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcXVheDQ0MCBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS01ICAtPiAgMC4wMDEwMCAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDQxIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTQgIC0+ICAwLjAwMTAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NDIgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMyAgLT4gIDAuMDAxICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ0MyBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0yICAtPiAgMC4wMCAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NDQ0IHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTEgIC0+ICAwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NDUgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDQ0NiBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogOAorcXVheDQ0OSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0yMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NDUwIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTIyIC0+ICA5Ljk5OTAwMDBFLTE1CitxdWF4NDUxIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTIxIC0+ICA5Ljk5OTAwMEUtMTUKK3F1YXg0NTIgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMjAgLT4gIDkuOTk5MDBFLTE1CitxdWF4NDUzIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE5IC0+ICA5Ljk5OTBFLTE1CitxdWF4NDU0IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE4IC0+ICA5Ljk5OUUtMTUKK3F1YXg0NTUgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTcgLT4gIDEuMDAwRS0xNCBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NTYgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTYgLT4gIDEuMDBFLTE0ICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NTcgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTUgLT4gIDEuMEUtMTQgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NTggcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTQgLT4gIDFFLTE0ICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NTkgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTMgLT4gIDBFLTEzICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NjAgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTIgLT4gIDBFLTEyICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NjEgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTEgLT4gIDBFLTExICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NjIgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTAgLT4gIDBFLTEwICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NjMgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTkgLT4gIDBFLTkgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NjQgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTggLT4gIDBFLTggICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NjUgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTcgLT4gIDBFLTcgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NjYgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTYgLT4gIDAuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NjcgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTUgLT4gIDAuMDAwMDAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NjggcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTQgLT4gIDAuMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NjkgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTMgLT4gIDAuMDAwICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NzAgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTIgLT4gIDAuMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NzEgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgIDFlLTEgLT4gIDAuMCAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NzIgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgICAxZTAgLT4gIDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0NzMgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgICAxZTEgLT4gIDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiA3CitxdWF4OTAwIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTIyIC0+ICBOYU4gICAgICAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg5MDEgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMjEgLT4gIDkuOTk5MDAwRS0xNQorcXVheDkwMiBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0yMCAtPiAgOS45OTkwMEUtMTUKK3F1YXg5MDMgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTkgLT4gIDkuOTk5MEUtMTUKK3F1YXg5MDQgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTggLT4gIDkuOTk5RS0xNQorcXVheDkwNSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xNyAtPiAgMS4wMDBFLTE0IEluZXhhY3QgUm91bmRlZAorcXVheDkwNiBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xNiAtPiAgMS4wMEUtMTQgIEluZXhhY3QgUm91bmRlZAorcXVheDkwNyBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xNSAtPiAgMS4wRS0xNCAgIEluZXhhY3QgUm91bmRlZAorcXVheDkwOCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xNCAtPiAgMUUtMTQgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDkwOSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xMyAtPiAgMEUtMTMgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDkxMCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xMiAtPiAgMEUtMTIgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDkxMSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xMSAtPiAgMEUtMTEgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDkxMiBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xMCAtPiAgMEUtMTAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDkxMyBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtOSAtPiAgMEUtOSAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDkxNCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtOCAtPiAgMEUtOCAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDkxNSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtNyAtPiAgMEUtNyAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDkxNiBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtNiAtPiAgMC4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorcXVheDkxNyBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtNSAtPiAgMC4wMDAwMCAgIEluZXhhY3QgUm91bmRlZAorcXVheDkxOCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtNCAtPiAgMC4wMDAwICAgIEluZXhhY3QgUm91bmRlZAorcXVheDkxOSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtMyAtPiAgMC4wMDAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDkyMCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtMiAtPiAgMC4wMCAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDkyMSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtMSAtPiAgMC4wICAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDkyMiBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgIDFlMCAtPiAgMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDkyMyBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgIDFlMSAtPiAgMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDYKK3F1YXg5MzAgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMjIgLT4gIE5hTiAgICAgICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDkzMSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0yMSAtPiAgTmFOICAgICAgIEludmFsaWRfb3BlcmF0aW9uCitxdWF4OTMyIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTIwIC0+ICA5Ljk5OTAwRS0xNQorcXVheDkzMyBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xOSAtPiAgOS45OTkwRS0xNQorcXVheDkzNCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xOCAtPiAgOS45OTlFLTE1CitxdWF4OTM1IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE3IC0+ICAxLjAwMEUtMTQgSW5leGFjdCBSb3VuZGVkCitxdWF4OTM2IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE2IC0+ICAxLjAwRS0xNCAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTM3IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE1IC0+ICAxLjBFLTE0ICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTM4IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE0IC0+ICAxRS0xNCAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTM5IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTEzIC0+ICAwRS0xMyAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTQwIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTEyIC0+ICAwRS0xMiAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTQxIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTExIC0+ICAwRS0xMSAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTQyIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTEwIC0+ICAwRS0xMCAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTQzIHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS05IC0+ICAwRS05ICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTQ0IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS04IC0+ICAwRS04ICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTQ1IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS03IC0+ICAwRS03ICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTQ2IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS02IC0+ICAwLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTQ3IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS01IC0+ICAwLjAwMDAwICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTQ4IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS00IC0+ICAwLjAwMDAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTQ5IHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS0zIC0+ICAwLjAwMCAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTUwIHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS0yIC0+ICAwLjAwICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTUxIHF1YW50aXplICAgOS45OTlFLTE1ICAgICAxZS0xIC0+ICAwLjAgICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTUyIHF1YW50aXplICAgOS45OTlFLTE1ICAgICAgMWUwIC0+ICAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4OTUzIHF1YW50aXplICAgOS45OTlFLTE1ICAgICAgMWUxIC0+ICAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMworcXVheDk2MCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0yMiAtPiAgTmFOICAgICAgIEludmFsaWRfb3BlcmF0aW9uCitxdWF4OTYxIHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTIxIC0+ICBOYU4gICAgICAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg5NjIgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMjAgLT4gIE5hTiAgICAgICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDk2MyBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xOSAtPiAgTmFOICAgICAgIEludmFsaWRfb3BlcmF0aW9uCitxdWF4OTY0IHF1YW50aXplICAgOS45OTlFLTE1ICAgIDFlLTE4IC0+ICBOYU4gICAgICAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg5NjUgcXVhbnRpemUgICA5Ljk5OUUtMTUgICAgMWUtMTcgLT4gIE5hTiAgICAgICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDk2NiBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xNiAtPiAgMS4wMEUtMTQgIEluZXhhY3QgUm91bmRlZAorcXVheDk2NyBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xNSAtPiAgMS4wRS0xNCAgIEluZXhhY3QgUm91bmRlZAorcXVheDk2OCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xNCAtPiAgMUUtMTQgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDk2OSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xMyAtPiAgMEUtMTMgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDk3MCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xMiAtPiAgMEUtMTIgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDk3MSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xMSAtPiAgMEUtMTEgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDk3MiBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAxZS0xMCAtPiAgMEUtMTAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDk3MyBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtOSAtPiAgMEUtOSAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDk3NCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtOCAtPiAgMEUtOCAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDk3NSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtNyAtPiAgMEUtNyAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDk3NiBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtNiAtPiAgMC4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAorcXVheDk3NyBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtNSAtPiAgMC4wMDAwMCAgIEluZXhhY3QgUm91bmRlZAorcXVheDk3OCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtNCAtPiAgMC4wMDAwICAgIEluZXhhY3QgUm91bmRlZAorcXVheDk3OSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtMyAtPiAgMC4wMDAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDk4MCBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtMiAtPiAgMC4wMCAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDk4MSBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgMWUtMSAtPiAgMC4wICAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDk4MiBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgIDFlMCAtPiAgMCAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDk4MyBxdWFudGl6ZSAgIDkuOTk5RS0xNSAgICAgIDFlMSAtPiAgMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCistLSBGdW5nIExlZSdzIGNhc2UgJiBzaW1pbGFyCitwcmVjaXNpb246IDMKK3F1YXgxMDAxIHF1YW50aXplICAwLjAwMCAgICAgICAgMC4wMDEgLT4gIDAuMDAwCitxdWF4MTAwMiBxdWFudGl6ZSAgMC4wMDEgICAgICAgIDAuMDAxIC0+ICAwLjAwMQorcXVheDEwMDMgcXVhbnRpemUgIDAuMDAxMiAgICAgICAwLjAwMSAtPiAgMC4wMDEgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDEwMDQgcXVhbnRpemUgIDAuMDAxOCAgICAgICAwLjAwMSAtPiAgMC4wMDIgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDEwMDUgcXVhbnRpemUgIDAuNTAxICAgICAgICAwLjAwMSAtPiAgMC41MDEKK3F1YXgxMDA2IHF1YW50aXplICAwLjUwMTIgICAgICAgMC4wMDEgLT4gIDAuNTAxICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxMDA3IHF1YW50aXplICAwLjUwMTggICAgICAgMC4wMDEgLT4gIDAuNTAyICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXgxMDA4IHF1YW50aXplICAwLjk5OSAgICAgICAgMC4wMDEgLT4gIDAuOTk5CitxdWF4MTAwOSBxdWFudGl6ZSAgMC45OTkyICAgICAgIDAuMDAxIC0+ICAwLjk5OSAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4MTAxMCBxdWFudGl6ZSAgMC45OTk4ICAgICAgIDAuMDAxIC0+ICBOYU4gICAgICAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXgxMDExIHF1YW50aXplICAxLjAwMDEgICAgICAgMC4wMDEgLT4gIE5hTiAgICAgICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDEwMTIgcXVhbnRpemUgIDEuMDA1MSAgICAgICAwLjAwMSAtPiAgTmFOICAgICAgIEludmFsaWRfb3BlcmF0aW9uCitxdWF4MTAxMyBxdWFudGl6ZSAgMS4wNTUxICAgICAgIDAuMDAxIC0+ICBOYU4gICAgICAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXgxMDE0IHF1YW50aXplICAxLjU1NTEgICAgICAgMC4wMDEgLT4gIE5hTiAgICAgICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDEwMTUgcXVhbnRpemUgIDEuOTk5OSAgICAgICAwLjAwMSAtPiAgTmFOICAgICAgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MgW3JocyBjaGVja3MgcmVtb3ZlZF0KK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK3F1YXg0ODEgcXVhbnRpemUgMTIzNDU2NzgwMDAgMWUrMyAtPiAxLjIzNDU2NzhFKzEwIFJvdW5kZWQKK3F1YXg0ODIgcXVhbnRpemUgMTIzNDU2NzgwMCAgMWUrMSAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK3F1YXg0ODMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK3F1YXg0ODQgcXVhbnRpemUgMTIzNDU2Nzg5MSAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorcXVheDQ4NSBxdWFudGl6ZSAxMjM0NTY3ODkwMSAxZSsyIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorcXVheDQ4NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCistLSBhIHBvdGVudGlhbCBkb3VibGUtcm91bmQKK3F1YXg0ODcgcXVhbnRpemUgMTIzNC45ODc2NDMgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCitxdWF4NDg4IHF1YW50aXplIDEyMzQuOTg3NjQ3IDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDE1CitxdWF4NDkxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkCitxdWF4NDkyIHF1YW50aXplIDEyMzQ1Njc4MDAgIDFlKzEgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCitxdWF4NDkzIHF1YW50aXplIDEyMzQ1Njc4OTAgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCitxdWF4NDk0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0OTUgcXVhbnRpemUgMTIzNDU2Nzg5MDEgMWUrMiAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0OTYgcXVhbnRpemUgMTIzNDU2Nzg5NiAgMWUrMSAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorcXVheDQ5NyBxdWFudGl6ZSAxMjM0Ljk4NzY0MyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKK3F1YXg0OTggcXVhbnRpemUgMTIzNC45ODc2NDcgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCisKKy0tIFplcm9zCitxdWF4NTAwIHF1YW50aXplICAgMCAgICAgMWUxIC0+ICAwRSsxCitxdWF4NTAxIHF1YW50aXplICAgMCAgICAgMWUwIC0+ICAwCitxdWF4NTAyIHF1YW50aXplICAgMCAgICAxZS0xIC0+ICAwLjAKK3F1YXg1MDMgcXVhbnRpemUgICAwLjAgIDFlLTEgLT4gIDAuMAorcXVheDUwNCBxdWFudGl6ZSAgIDAuMCAgIDFlMCAtPiAgMAorcXVheDUwNSBxdWFudGl6ZSAgIDAuMCAgMWUrMSAtPiAgMEUrMQorcXVheDUwNiBxdWFudGl6ZSAgIDBFKzEgMWUtMSAtPiAgMC4wCitxdWF4NTA3IHF1YW50aXplICAgMEUrMSAgMWUwIC0+ICAwCitxdWF4NTA4IHF1YW50aXplICAgMEUrMSAxZSsxIC0+ICAwRSsxCitxdWF4NTA5IHF1YW50aXplICAtMCAgICAgMWUxIC0+IC0wRSsxCitxdWF4NTEwIHF1YW50aXplICAtMCAgICAgMWUwIC0+IC0wCitxdWF4NTExIHF1YW50aXplICAtMCAgICAxZS0xIC0+IC0wLjAKK3F1YXg1MTIgcXVhbnRpemUgIC0wLjAgIDFlLTEgLT4gLTAuMAorcXVheDUxMyBxdWFudGl6ZSAgLTAuMCAgIDFlMCAtPiAtMAorcXVheDUxNCBxdWFudGl6ZSAgLTAuMCAgMWUrMSAtPiAtMEUrMQorcXVheDUxNSBxdWFudGl6ZSAgLTBFKzEgMWUtMSAtPiAtMC4wCitxdWF4NTE2IHF1YW50aXplICAtMEUrMSAgMWUwIC0+IC0wCitxdWF4NTE3IHF1YW50aXplICAtMEUrMSAxZSsxIC0+IC0wRSsxCisKKy0tIFN1c3BpY2lvdXMgUkhTIHZhbHVlcworbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3ByZWNpc2lvbjogMTUKK3F1YXg1MjAgcXVhbnRpemUgICAxLjIzNCAgICAxZTk5OTk5OTAwMCAtPiAwRSs5OTk5OTkwMDAgSW5leGFjdCBSb3VuZGVkCitxdWF4NTIxIHF1YW50aXplIDEyMy40NTYgICAgMWU5OTk5OTkwMDAgLT4gMEUrOTk5OTk5MDAwIEluZXhhY3QgUm91bmRlZAorcXVheDUyMiBxdWFudGl6ZSAgIDEuMjM0ICAgIDFlOTk5OTk5OTk5IC0+IDBFKzk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK3F1YXg1MjMgcXVhbnRpemUgMTIzLjQ1NiAgICAxZTk5OTk5OTk5OSAtPiAwRSs5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCitxdWF4NTI0IHF1YW50aXplIDEyMy40NTYgICAxZTEwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NTI1IHF1YW50aXplIDEyMy40NTYgIDFlMTIzNDU2Nzg5MDMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBuZXh0IGZvdXIgYXJlICJ3b24ndCBmaXQiIG92ZXJmbG93cworcXVheDUyNiBxdWFudGl6ZSAgIDEuMjM0ICAgMWUtOTk5OTk5MDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDUyNyBxdWFudGl6ZSAxMjMuNDU2ICAgMWUtOTk5OTk5MDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDUyOCBxdWFudGl6ZSAgIDEuMjM0ICAgMWUtOTk5OTk5OTk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDUyOSBxdWFudGl6ZSAxMjMuNDU2ICAgMWUtOTk5OTk5OTk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDUzMCBxdWFudGl6ZSAxMjMuNDU2ICAxZS0xMDAwMDAwMDE0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDUzMSBxdWFudGl6ZSAxMjMuNDU2IDFlLTEyMzQ1Njc4OTAzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiAxNQorcXVheDUzMiBxdWFudGl6ZSAgIDEuMjM0RSs5OTkgICAgMWU5OTkgLT4gMUUrOTk5ICAgIEluZXhhY3QgUm91bmRlZAorcXVheDUzMyBxdWFudGl6ZSAgIDEuMjM0RSs5OTggICAgMWU5OTkgLT4gMEUrOTk5ICAgIEluZXhhY3QgUm91bmRlZAorcXVheDUzNCBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAgMWU5OTkgLT4gMEUrOTk5ICAgIEluZXhhY3QgUm91bmRlZAorcXVheDUzNSBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZTEwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NTM2IHF1YW50aXplICAgMS4yMzQgICAgICAgIDFlNTAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1MzcgcXVhbnRpemUgICAwICAgICAgICAgICAgMWUtOTk5IC0+IDBFLTk5OQorLS0gbmV4dCB0d28gYXJlICJ3b24ndCBmaXQiIG92ZXJmbG93cworcXVheDUzOCBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZS05OTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NTM5IHF1YW50aXplICAgMS4yMzQgICAgICAgMWUtMTAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1NDAgcXVhbnRpemUgICAxLjIzNCAgICAgICAxZS01MDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gW21vcmUgYmVsb3ddCisKKy0tIGNoZWNrIGJvdW5kcyAobGhzIG1heWJlIG91dCBvZiByYW5nZSBmb3IgZGVzdGluYXRpb24sIGV0Yy4pCitwcmVjaXNpb246ICAgICA3CitxdWF4NTQxIHF1YW50aXplICAgMUUrOTk5ICAgMWUrOTk5IC0+IDFFKzk5OQorcXVheDU0MiBxdWFudGl6ZSAgIDFFKzEwMDAgIDFlKzk5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1NDMgcXVhbnRpemUgICAxRSs5OTkgIDFlKzEwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NTQ0IHF1YW50aXplICAgMUUtOTk5ICAgMWUtOTk5IC0+IDFFLTk5OQorcXVheDU0NSBxdWFudGl6ZSAgIDFFLTEwMDAgIDFlLTk5OSAtPiAwRS05OTkgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NTQ2IHF1YW50aXplICAgMUUtOTk5ICAxZS0xMDAwIC0+IDEuMEUtOTk5CitxdWF4NTQ3IHF1YW50aXplICAgMUUtMTAwNSAgMWUtOTk5IC0+IDBFLTk5OSAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg1NDggcXVhbnRpemUgICAxRS0xMDA2ICAxZS05OTkgLT4gMEUtOTk5ICAgIEluZXhhY3QgUm91bmRlZAorcXVheDU0OSBxdWFudGl6ZSAgIDFFLTEwMDcgIDFlLTk5OSAtPiAwRS05OTkgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NTUwIHF1YW50aXplICAgMUUtOTk4ICAxZS0xMDA1IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbiAgLS0gd29uJ3QgZml0CitxdWF4NTUxIHF1YW50aXplICAgMUUtOTk5ICAxZS0xMDA1IC0+IDEuMDAwMDAwRS05OTkKK3F1YXg1NTIgcXVhbnRpemUgICAxRS0xMDAwIDFlLTEwMDUgLT4gMS4wMDAwMEUtMTAwMCBTdWJub3JtYWwKK3F1YXg1NTMgcXVhbnRpemUgICAxRS05OTkgIDFlLTEwMDYgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NTU0IHF1YW50aXplICAgMUUtOTk5ICAxZS0xMDA3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gcmVsYXRlZCBzdWJub3JtYWwgcm91bmRpbmcKK3F1YXg1NTUgcXVhbnRpemUgICAxLjY2NjY2NkUtOTk5ICAxZS0xMDA1IC0+IDEuNjY2NjY2RS05OTkKK3F1YXg1NTYgcXVhbnRpemUgICAxLjY2NjY2NkUtMTAwMCAxZS0xMDA1IC0+IDEuNjY2NjdFLTEwMDAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3F1YXg1NTcgcXVhbnRpemUgICAxLjY2NjY2NkUtMTAwMSAxZS0xMDA1IC0+IDEuNjY2N0UtMTAwMSAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcXVheDU1OCBxdWFudGl6ZSAgIDEuNjY2NjY2RS0xMDAyIDFlLTEwMDUgLT4gMS42NjdFLTEwMDIgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3F1YXg1NTkgcXVhbnRpemUgICAxLjY2NjY2NkUtMTAwMyAxZS0xMDA1IC0+IDEuNjdFLTEwMDMgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3F1YXg1NjAgcXVhbnRpemUgICAxLjY2NjY2NkUtMTAwNCAxZS0xMDA1IC0+IDEuN0UtMTAwNCAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcXVheDU2MSBxdWFudGl6ZSAgIDEuNjY2NjY2RS0xMDA1IDFlLTEwMDUgLT4gMkUtMTAwNSAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcXVheDU2MiBxdWFudGl6ZSAgIDEuNjY2NjY2RS0xMDA2IDFlLTEwMDUgLT4gMEUtMTAwNSAgIEluZXhhY3QgUm91bmRlZAorcXVheDU2MyBxdWFudGl6ZSAgIDEuNjY2NjY2RS0xMDA3IDFlLTEwMDUgLT4gMEUtMTAwNSAgIEluZXhhY3QgUm91bmRlZAorCistLSBTcGVjaWFscworcXVheDU4MCBxdWFudGl6ZSAgSW5mICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK3F1YXg1ODEgcXVhbnRpemUgIEluZiAgMWUtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1ODIgcXVhbnRpemUgIEluZiAgMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1ODMgcXVhbnRpemUgIEluZiAgIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1ODQgcXVhbnRpemUgIEluZiAgIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1ODUgcXVhbnRpemUgIEluZiAgIDFlMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1ODYgcXVhbnRpemUgIEluZiAgICAgSW5mICAgLT4gIEluZmluaXR5CitxdWF4NTg3IHF1YW50aXplIC0xMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NTg4IHF1YW50aXplIC1JbmYgICAgIEluZiAgIC0+ICAtSW5maW5pdHkKK3F1YXg1ODkgcXVhbnRpemUgLTEgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1OTAgcXVhbnRpemUgIDAgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1OTEgcXVhbnRpemUgIDEgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1OTIgcXVhbnRpemUgIDEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg1OTMgcXVhbnRpemUgIEluZiAgICAgSW5mICAgLT4gIEluZmluaXR5CitxdWF4NTk0IHF1YW50aXplICBJbmYgIDFlLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NTk1IHF1YW50aXplIC0wICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK3F1YXg2MDAgcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQorcXVheDYwMSBxdWFudGl6ZSAtSW5mICAxZS0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDYwMiBxdWFudGl6ZSAtSW5mICAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDYwMyBxdWFudGl6ZSAtSW5mICAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDYwNCBxdWFudGl6ZSAtSW5mICAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDYwNSBxdWFudGl6ZSAtSW5mICAgMWUxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcXVheDYwNiBxdWFudGl6ZSAtSW5mICAgICBJbmYgICAtPiAgLUluZmluaXR5CitxdWF4NjA3IHF1YW50aXplIC0xMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NjA4IHF1YW50aXplIC1JbmYgICAgLUluZiAgIC0+ICAtSW5maW5pdHkKK3F1YXg2MDkgcXVhbnRpemUgLTEgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2MTAgcXVhbnRpemUgIDAgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2MTEgcXVhbnRpemUgIDEgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2MTIgcXVhbnRpemUgIDEwMDAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2MTMgcXVhbnRpemUgIEluZiAgICAtSW5mICAgLT4gIEluZmluaXR5CitxdWF4NjE0IHF1YW50aXplIC1JbmYgIDFlLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NjE1IHF1YW50aXplIC0wICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK3F1YXg2MjEgcXVhbnRpemUgIE5hTiAgIC1JbmYgICAgLT4gIE5hTgorcXVheDYyMiBxdWFudGl6ZSAgTmFOIDFlLTEwMDAgICAtPiAgTmFOCitxdWF4NjIzIHF1YW50aXplICBOYU4gMWUtMSAgICAgIC0+ICBOYU4KK3F1YXg2MjQgcXVhbnRpemUgIE5hTiAgMWUwICAgICAgLT4gIE5hTgorcXVheDYyNSBxdWFudGl6ZSAgTmFOICAxZTEgICAgICAtPiAgTmFOCitxdWF4NjI2IHF1YW50aXplICBOYU4gIDFlMTAwMCAgIC0+ICBOYU4KK3F1YXg2MjcgcXVhbnRpemUgIE5hTiAgICBJbmYgICAgLT4gIE5hTgorcXVheDYyOCBxdWFudGl6ZSAgTmFOICAgIE5hTiAgICAtPiAgTmFOCitxdWF4NjI5IHF1YW50aXplIC1JbmYgICAgTmFOICAgIC0+ICBOYU4KK3F1YXg2MzAgcXVhbnRpemUgLTEwMDAgICBOYU4gICAgLT4gIE5hTgorcXVheDYzMSBxdWFudGl6ZSAtMSAgICAgIE5hTiAgICAtPiAgTmFOCitxdWF4NjMyIHF1YW50aXplICAwICAgICAgTmFOICAgIC0+ICBOYU4KK3F1YXg2MzMgcXVhbnRpemUgIDEgICAgICBOYU4gICAgLT4gIE5hTgorcXVheDYzNCBxdWFudGl6ZSAgMTAwMCAgIE5hTiAgICAtPiAgTmFOCitxdWF4NjM1IHF1YW50aXplICBJbmYgICAgTmFOICAgIC0+ICBOYU4KK3F1YXg2MzYgcXVhbnRpemUgIE5hTiAxZS0wICAgICAgLT4gIE5hTgorcXVheDYzNyBxdWFudGl6ZSAtMCAgICAgIE5hTiAgICAtPiAgTmFOCisKK3F1YXg2NDEgcXVhbnRpemUgIHNOYU4gICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NDIgcXVhbnRpemUgIHNOYU4gMWUtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NDMgcXVhbnRpemUgIHNOYU4gMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NDQgcXVhbnRpemUgIHNOYU4gIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NDUgcXVhbnRpemUgIHNOYU4gIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NDYgcXVhbnRpemUgIHNOYU4gIDFlMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NDcgcXVhbnRpemUgIHNOYU4gICAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NDggcXVhbnRpemUgIHNOYU4gICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NDkgcXVhbnRpemUgIE5hTiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NTAgcXVhbnRpemUgLUluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NTEgcXVhbnRpemUgLTEwMDAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NTIgcXVhbnRpemUgLTEgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NTMgcXVhbnRpemUgIDAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NTQgcXVhbnRpemUgIDEgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NTUgcXVhbnRpemUgIDEwMDAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NTYgcXVhbnRpemUgIEluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NTcgcXVhbnRpemUgIE5hTiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NTggcXVhbnRpemUgIHNOYU4gMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NTkgcXVhbnRpemUgLTAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworcXVheDY2MSBxdWFudGl6ZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkKK3F1YXg2NjIgcXVhbnRpemUgIE5hTjggIDkxOSAgIC0+ICBOYU44CitxdWF4NjYzIHF1YW50aXplICBOYU43MSBJbmYgICAtPiAgTmFONzEKK3F1YXg2NjQgcXVhbnRpemUgIE5hTjYgIE5hTjUgIC0+ICBOYU42CitxdWF4NjY1IHF1YW50aXplIC1JbmYgICBOYU40ICAtPiAgTmFONAorcXVheDY2NiBxdWFudGl6ZSAtOTE5ICAgTmFOMzEgLT4gIE5hTjMxCitxdWF4NjY3IHF1YW50aXplICBJbmYgICBOYU4yICAtPiAgTmFOMgorCitxdWF4NjcxIHF1YW50aXplICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NzIgcXVhbnRpemUgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY3MyBxdWFudGl6ZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCitxdWF4Njc0IHF1YW50aXplICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NzUgcXVhbnRpemUgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY3NiBxdWFudGl6ZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCitxdWF4Njc3IHF1YW50aXplICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2NzggcXVhbnRpemUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY3OSBxdWFudGl6ZSAgTmFOICAgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCisKK3F1YXg2ODEgcXVhbnRpemUgLU5hTjkgLUluZiAgIC0+IC1OYU45CitxdWF4NjgyIHF1YW50aXplIC1OYU44ICA5MTkgICAtPiAtTmFOOAorcXVheDY4MyBxdWFudGl6ZSAtTmFONzEgSW5mICAgLT4gLU5hTjcxCitxdWF4Njg0IHF1YW50aXplIC1OYU42IC1OYU41ICAtPiAtTmFONgorcXVheDY4NSBxdWFudGl6ZSAtSW5mICAtTmFONCAgLT4gLU5hTjQKK3F1YXg2ODYgcXVhbnRpemUgLTkxOSAgLU5hTjMxIC0+IC1OYU4zMQorcXVheDY4NyBxdWFudGl6ZSAgSW5mICAtTmFOMiAgLT4gLU5hTjIKKworcXVheDY5MSBxdWFudGl6ZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCitxdWF4NjkyIHF1YW50aXplIC1zTmFOOTggLTExICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2OTMgcXVhbnRpemUgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY5NCBxdWFudGl6ZSAtc05hTjE2IHNOYU45NCAgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCitxdWF4Njk1IHF1YW50aXplIC1OYU45NSAtc05hTjkzICAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2OTYgcXVhbnRpemUgLUluZiAgIC1zTmFOOTIgIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDY5NyBxdWFudGl6ZSAgMDg4ICAgLXNOYU45MSAgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCitxdWF4Njk4IHF1YW50aXplICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KK3F1YXg2OTkgcXVhbnRpemUgIE5hTiAgIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKK3ByZWNpc2lvbjogNAorbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3F1YXg3MTAgcXVhbnRpemUgIDEuMDBFLTk5OSAgICAxZS05OTkgIC0+ICAgMUUtOTk5ICAgIFJvdW5kZWQKK3F1YXg3MTEgcXVhbnRpemUgIDAuMUUtOTk5ICAgIDJlLTEwMDAgIC0+ICAgMUUtMTAwMCAgIFN1Ym5vcm1hbAorcXVheDcxMiBxdWFudGl6ZSAgMC4xMEUtOTk5ICAgM2UtMTAwMCAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsIFJvdW5kZWQKK3F1YXg3MTMgcXVhbnRpemUgIDAuMTAwRS05OTkgIDRlLTEwMDAgIC0+ICAgMUUtMTAwMCAgIFN1Ym5vcm1hbCBSb3VuZGVkCitxdWF4NzE0IHF1YW50aXplICAwLjAxRS05OTkgICA1ZS0xMDAxICAtPiAgIDFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitxdWF4NzE1IHF1YW50aXplICAwLjk5OUUtOTk5ICAgMWUtOTk5ICAtPiAgIDFFLTk5OSAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg3MTYgcXVhbnRpemUgIDAuMDk5RS05OTkgMTBlLTEwMDAgIC0+ICAgMUUtMTAwMCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKKworcXVheDcxNyBxdWFudGl6ZSAgMC4wMDlFLTk5OSAgMWUtMTAwMSAgLT4gICAxRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorcXVheDcxOCBxdWFudGl6ZSAgMC4wMDFFLTk5OSAgMWUtMTAwMSAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NzE5IHF1YW50aXplICAwLjAwMDlFLTk5OSAxZS0xMDAxICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg3MjAgcXVhbnRpemUgIDAuMDAwMUUtOTk5IDFlLTEwMDEgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZAorCitxdWF4NzMwIHF1YW50aXplIC0xLjAwRS05OTkgICAxZS05OTkgIC0+ICAtMUUtOTk5ICAgICBSb3VuZGVkCitxdWF4NzMxIHF1YW50aXplIC0wLjFFLTk5OSAgICAxZS05OTkgIC0+ICAtMEUtOTk5ICAgICBSb3VuZGVkIEluZXhhY3QKK3F1YXg3MzIgcXVhbnRpemUgLTAuMTBFLTk5OSAgIDFlLTk5OSAgLT4gIC0wRS05OTkgICAgIFJvdW5kZWQgSW5leGFjdAorcXVheDczMyBxdWFudGl6ZSAtMC4xMDBFLTk5OSAgMWUtOTk5ICAtPiAgLTBFLTk5OSAgICAgUm91bmRlZCBJbmV4YWN0CitxdWF4NzM0IHF1YW50aXplIC0wLjAxRS05OTkgICAxZS05OTkgIC0+ICAtMEUtOTk5ICAgICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitxdWF4NzM1IHF1YW50aXplIC0wLjk5OUUtOTk5IDkwZS05OTkgIC0+ICAtMUUtOTk5ICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg3MzYgcXVhbnRpemUgLTAuMDk5RS05OTkgLTFlLTk5OSAgLT4gIC0wRS05OTkgICAgIEluZXhhY3QgUm91bmRlZAorcXVheDczNyBxdWFudGl6ZSAtMC4wMDlFLTk5OSAtMWUtOTk5ICAtPiAgLTBFLTk5OSAgICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NzM4IHF1YW50aXplIC0wLjAwMUUtOTk5IC0wZS05OTkgIC0+ICAtMEUtOTk5ICAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg3MzkgcXVhbnRpemUgLTAuMDAwMUUtOTk5IDBlLTk5OSAgLT4gIC0wRS05OTkgICAgIEluZXhhY3QgUm91bmRlZAorCitxdWF4NzQwIHF1YW50aXplIC0xLjAwRS05OTkgICAxZS0xMDAwIC0+ICAtMS4wRS05OTkgICBSb3VuZGVkCitxdWF4NzQxIHF1YW50aXplIC0wLjFFLTk5OSAgICAxZS0xMDAwIC0+ICAtMUUtMTAwMCAgICBTdWJub3JtYWwKK3F1YXg3NDIgcXVhbnRpemUgLTAuMTBFLTk5OSAgIDFlLTEwMDAgLT4gIC0xRS0xMDAwICAgIFN1Ym5vcm1hbCBSb3VuZGVkCitxdWF4NzQzIHF1YW50aXplIC0wLjEwMEUtOTk5ICAxZS0xMDAwIC0+ICAtMUUtMTAwMCAgICBTdWJub3JtYWwgUm91bmRlZAorcXVheDc0NCBxdWFudGl6ZSAtMC4wMUUtOTk5ICAgMWUtMTAwMCAtPiAgLTBFLTEwMDAgICAgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorcXVheDc0NSBxdWFudGl6ZSAtMC45OTlFLTk5OSAgMWUtMTAwMCAtPiAgLTEuMEUtOTk5ICAgSW5leGFjdCBSb3VuZGVkCitxdWF4NzQ2IHF1YW50aXplIC0wLjA5OUUtOTk5ICAxZS0xMDAwIC0+ICAtMUUtMTAwMCAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCitxdWF4NzQ3IHF1YW50aXplIC0wLjAwOUUtOTk5ICAxZS0xMDAwIC0+ICAtMEUtMTAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg3NDggcXVhbnRpemUgLTAuMDAxRS05OTkgIDFlLTEwMDAgLT4gIC0wRS0xMDAwICAgIEluZXhhY3QgUm91bmRlZAorcXVheDc0OSBxdWFudGl6ZSAtMC4wMDAxRS05OTkgMWUtMTAwMCAtPiAgLTBFLTEwMDAgICAgSW5leGFjdCBSb3VuZGVkCisKK3F1YXg3NTAgcXVhbnRpemUgLTEuMDBFLTk5OSAgIDFlLTEwMDEgLT4gIC0xLjAwRS05OTkKK3F1YXg3NTEgcXVhbnRpemUgLTAuMUUtOTk5ICAgIDFlLTEwMDEgLT4gIC0xLjBFLTEwMDAgIFN1Ym5vcm1hbAorcXVheDc1MiBxdWFudGl6ZSAtMC4xMEUtOTk5ICAgMWUtMTAwMSAtPiAgLTEuMEUtMTAwMCAgU3Vibm9ybWFsCitxdWF4NzUzIHF1YW50aXplIC0wLjEwMEUtOTk5ICAxZS0xMDAxIC0+ICAtMS4wRS0xMDAwICBTdWJub3JtYWwgUm91bmRlZAorcXVheDc1NCBxdWFudGl6ZSAtMC4wMUUtOTk5ICAgMWUtMTAwMSAtPiAgLTFFLTEwMDEgICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorcXVheDc1NSBxdWFudGl6ZSAtMC45OTlFLTk5OSAgMWUtMTAwMSAtPiAgLTEuMDBFLTk5OSAgSW5leGFjdCBSb3VuZGVkCitxdWF4NzU2IHF1YW50aXplIC0wLjA5OUUtOTk5ICAxZS0xMDAxIC0+ICAtMS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCitxdWF4NzU3IHF1YW50aXplIC0wLjAwOUUtOTk5ICAxZS0xMDAxIC0+ICAtMUUtMTAwMSAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCitxdWF4NzU4IHF1YW50aXplIC0wLjAwMUUtOTk5ICAxZS0xMDAxIC0+ICAtMEUtMTAwMSAgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXg3NTkgcXVhbnRpemUgLTAuMDAwMUUtOTk5IDFlLTEwMDEgLT4gIC0wRS0xMDAxICAgIEluZXhhY3QgUm91bmRlZAorCitxdWF4NzYwIHF1YW50aXplIC0xLjAwRS05OTkgICAxZS0xMDAyIC0+ICAtMS4wMDBFLTk5OQorcXVheDc2MSBxdWFudGl6ZSAtMC4xRS05OTkgICAgMWUtMTAwMiAtPiAgLTEuMDBFLTEwMDAgIFN1Ym5vcm1hbAorcXVheDc2MiBxdWFudGl6ZSAtMC4xMEUtOTk5ICAgMWUtMTAwMiAtPiAgLTEuMDBFLTEwMDAgIFN1Ym5vcm1hbAorcXVheDc2MyBxdWFudGl6ZSAtMC4xMDBFLTk5OSAgMWUtMTAwMiAtPiAgLTEuMDBFLTEwMDAgIFN1Ym5vcm1hbAorcXVheDc2NCBxdWFudGl6ZSAtMC4wMUUtOTk5ICAgMWUtMTAwMiAtPiAgLTEuMEUtMTAwMSAgIFN1Ym5vcm1hbAorcXVheDc2NSBxdWFudGl6ZSAtMC45OTlFLTk5OSAgMWUtMTAwMiAtPiAgLTkuOTlFLTEwMDAgIFN1Ym5vcm1hbAorcXVheDc2NiBxdWFudGl6ZSAtMC4wOTlFLTk5OSAgMWUtMTAwMiAtPiAgLTkuOUUtMTAwMSAgIFN1Ym5vcm1hbAorcXVheDc2NyBxdWFudGl6ZSAtMC4wMDlFLTk5OSAgMWUtMTAwMiAtPiAgLTlFLTEwMDIgICAgIFN1Ym5vcm1hbAorcXVheDc2OCBxdWFudGl6ZSAtMC4wMDFFLTk5OSAgMWUtMTAwMiAtPiAgLTFFLTEwMDIgICAgIFN1Ym5vcm1hbAorcXVheDc2OSBxdWFudGl6ZSAtMC4wMDAxRS05OTkgMWUtMTAwMiAtPiAgLTBFLTEwMDIgICAgIEluZXhhY3QgUm91bmRlZAorCistLSByaHMgbXVzdCBiZSBubyBsZXNzIHRoYW4gRXRpbnkKK3F1YXg3NzAgcXVhbnRpemUgLTEuMDBFLTk5OSAgIDFlLTEwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDc3MSBxdWFudGl6ZSAtMC4xRS05OTkgICAgMWUtMTAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4NzcyIHF1YW50aXplIC0wLjEwRS05OTkgICAxZS0xMDAzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg3NzMgcXVhbnRpemUgLTAuMTAwRS05OTkgIDFlLTEwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDc3NCBxdWFudGl6ZSAtMC4wMUUtOTk5ICAgMWUtMTAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4Nzc1IHF1YW50aXplIC0wLjk5OUUtOTk5ICAxZS0xMDAzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg3NzYgcXVhbnRpemUgLTAuMDk5RS05OTkgIDFlLTEwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDc3NyBxdWFudGl6ZSAtMC4wMDlFLTk5OSAgMWUtMTAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4Nzc4IHF1YW50aXplIC0wLjAwMUUtOTk5ICAxZS0xMDAzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg3NzkgcXVhbnRpemUgLTAuMDAwMUUtOTk5IDFlLTEwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDc4MCBxdWFudGl6ZSAtMC4wMDAxRS05OTkgMWUtMTAwNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3ByZWNpc2lvbjogICA5CittYXhFeHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorCistLSBzb21lIGV4dHJlbWVzIGRlcml2ZWQgZnJvbSBSZXNjYWxlIHRlc3RjYXNlcworcXVheDgwMSBxdWFudGl6ZSAgIDAgICAxZTEwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODAyIHF1YW50aXplICAgMCAgMWUtMTAwMDAwMDAwMCAtPiAwRS0xMDAwMDAwMDAwCitxdWF4ODAzIHF1YW50aXplICAgMCAgIDFlMjAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4MDQgcXVhbnRpemUgICAwICAxZS0yMDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDgwNSBxdWFudGl6ZSAgIDAgICAxZTMwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODA2IHF1YW50aXplICAgMCAgMWUtMzAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4MDcgcXVhbnRpemUgICAwICAgMWU0MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDgwOCBxdWFudGl6ZSAgIDAgIDFlLTQwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODA5IHF1YW50aXplICAgMCAgIDFlNTAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4MTAgcXVhbnRpemUgICAwICAxZS01MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDgxMSBxdWFudGl6ZSAgIDAgICAxZTYwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODEyIHF1YW50aXplICAgMCAgMWUtNjAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4MTMgcXVhbnRpemUgICAwICAgMWU3MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDgxNCBxdWFudGl6ZSAgIDAgIDFlLTcwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODE1IHF1YW50aXplICAgMCAgIDFlODAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4MTYgcXVhbnRpemUgICAwICAxZS04MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDgxNyBxdWFudGl6ZSAgIDAgICAxZTkwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODE4IHF1YW50aXplICAgMCAgMWUtOTAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4MTkgcXVhbnRpemUgICAwICAgMWU5OTk5OTk5OTk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDgyMCBxdWFudGl6ZSAgIDAgIDFlLTk5OTk5OTk5OTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODIxIHF1YW50aXplICAgMCAgIDFlMTAwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODIyIHF1YW50aXplICAgMCAgMWUtMTAwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3F1YXg4NDMgcXVhbnRpemUgICAwICAgIDFlOTk5OTk5OTk5IC0+IDBFKzk5OTk5OTk5OQorcXVheDg0NCBxdWFudGl6ZSAgIDAgICAxZTEwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODQ1IHF1YW50aXplICAgMCAgIDFlLTk5OTk5OTk5OSAtPiAwRS05OTk5OTk5OTkKK3F1YXg4NDYgcXVhbnRpemUgICAwICAxZS0xMDAwMDAwMDAwIC0+IDBFLTEwMDAwMDAwMDAKK3F1YXg4NDcgcXVhbnRpemUgICAwICAxZS0xMDAwMDAwMDAxIC0+IDBFLTEwMDAwMDAwMDEKK3F1YXg4NDggcXVhbnRpemUgICAwICAxZS0xMDAwMDAwMDAyIC0+IDBFLTEwMDAwMDAwMDIKK3F1YXg4NDkgcXVhbnRpemUgICAwICAxZS0xMDAwMDAwMDAzIC0+IDBFLTEwMDAwMDAwMDMKK3F1YXg4NTAgcXVhbnRpemUgICAwICAxZS0xMDAwMDAwMDA0IC0+IDBFLTEwMDAwMDAwMDQKK3F1YXg4NTEgcXVhbnRpemUgICAwICAxZS0xMDAwMDAwMDA1IC0+IDBFLTEwMDAwMDAwMDUKK3F1YXg4NTIgcXVhbnRpemUgICAwICAxZS0xMDAwMDAwMDA2IC0+IDBFLTEwMDAwMDAwMDYKK3F1YXg4NTMgcXVhbnRpemUgICAwICAxZS0xMDAwMDAwMDA3IC0+IDBFLTEwMDAwMDAwMDcKK3F1YXg4NTQgcXVhbnRpemUgICAwICAxZS0xMDAwMDAwMDA4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitxdWF4ODYxIHF1YW50aXplICAgMSAgMWUrMjE0NzQ4MzY0OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4NjIgcXVhbnRpemUgICAxICAxZSsyMTQ3NDgzNjQ4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDg2MyBxdWFudGl6ZSAgIDEgIDFlKzIxNDc0ODM2NDcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4ODY0IHF1YW50aXplICAgMSAgMWUtMjE0NzQ4MzY0NyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg4NjUgcXVhbnRpemUgICAxICAxZS0yMTQ3NDgzNjQ4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcXVheDg2NiBxdWFudGl6ZSAgIDEgIDFlLTIxNDc0ODM2NDkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE1vcmUgZnJvbSBGdW5nIExlZQorcHJlY2lzaW9uOiAgIDE2Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK3F1YXgxMDIxIHF1YW50aXplICAgIDguNjY2NjY2NjY2NjY2MDAwRSszODQgICAgIDEuMDAwMDAwMDAwMDAwMDAwRSszODQgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQKK3F1YXgxMDIyIHF1YW50aXplIDY0IzguNjY2NjY2NjY2NjY2MDAwRSszODQgIDY0IzEuMDAwMDAwMDAwMDAwMDAwRSszODQgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQKK3F1YXgxMDIzIHF1YW50aXplIDY0IzguNjY2NjY2NjY2NjY2MDAwRSszODQgIDEyOCMxLjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQKK3F1YXgxMDI0IHF1YW50aXplIDY0IzguNjY2NjY2NjY2NjY2MDAwRSszODQgIDY0IzFFKzM4NCAgICAgICAgICAgICAgICAgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQKK3F1YXgxMDI1IHF1YW50aXplIDY0IzguNjY2NjY2NjY2NjY2MDAwRSszODQgIDY0IzFFKzM4NCAgIC0+IDY0IzguNjY2NjY2NjY2NjY2MDAwRSszODQKK3F1YXgxMDI2IHF1YW50aXplIDY0IzguNjY2NjY2NjY2NjY2MDAwRSszODQgMTI4IzFFKzM4NCAgIC0+IDY0IzlFKzM4NCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcXVheDEwMjcgcXVhbnRpemUgNjQjOC42NjY2NjY2NjY2NjYwMDBFKzMyMyAgNjQjMUUrMzEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitxdWF4MTAyOCBxdWFudGl6ZSA2NCM4LjY2NjY2NjY2NjY2NjAwMEUrMzIzIDEyOCMxRSszMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXgxMDI5IHF1YW50aXplIDY0IzguNjY2NjY2NjZFKzMgICAgICAgICAgMTI4IzFFKzEwICAgIC0+IDY0IzBFMTAgSW5leGFjdCBSb3VuZGVkCitxdWF4MTAzMCBxdWFudGl6ZSAgICA4LjY2NjY2NjY2RSszICAgICAgICAgICAgICAxRSszICAgICAtPiA5RSszIEluZXhhY3QgUm91bmRlZAorCistLSBJbnQgYW5kIHVJbnQzMiBlZGdlIHZhbHVlcyBmb3IgdGVzdGluZyBjb252ZXJzaW9ucworcXVheDEwNDAgcXVhbnRpemUgLTIxNDc0ODM2NDYgICAgIDAgLT4gLTIxNDc0ODM2NDYKK3F1YXgxMDQxIHF1YW50aXplIC0yMTQ3NDgzNjQ3ICAgICAwIC0+IC0yMTQ3NDgzNjQ3CitxdWF4MTA0MiBxdWFudGl6ZSAtMjE0NzQ4MzY0OCAgICAgMCAtPiAtMjE0NzQ4MzY0OAorcXVheDEwNDMgcXVhbnRpemUgLTIxNDc0ODM2NDkgICAgIDAgLT4gLTIxNDc0ODM2NDkKK3F1YXgxMDQ0IHF1YW50aXplICAyMTQ3NDgzNjQ2ICAgICAwIC0+ICAyMTQ3NDgzNjQ2CitxdWF4MTA0NSBxdWFudGl6ZSAgMjE0NzQ4MzY0NyAgICAgMCAtPiAgMjE0NzQ4MzY0NworcXVheDEwNDYgcXVhbnRpemUgIDIxNDc0ODM2NDggICAgIDAgLT4gIDIxNDc0ODM2NDgKK3F1YXgxMDQ3IHF1YW50aXplICAyMTQ3NDgzNjQ5ICAgICAwIC0+ICAyMTQ3NDgzNjQ5CitxdWF4MTA0OCBxdWFudGl6ZSAgNDI5NDk2NzI5NCAgICAgMCAtPiAgNDI5NDk2NzI5NAorcXVheDEwNDkgcXVhbnRpemUgIDQyOTQ5NjcyOTUgICAgIDAgLT4gIDQyOTQ5NjcyOTUKK3F1YXgxMDUwIHF1YW50aXplICA0Mjk0OTY3Mjk2ICAgICAwIC0+ICA0Mjk0OTY3Mjk2CitxdWF4MTA1MSBxdWFudGl6ZSAgNDI5NDk2NzI5NyAgICAgMCAtPiAgNDI5NDk2NzI5NworLS0gYW5kIHBvd2VycyBvZiB0ZW4gZm9yIHNhbWUKK3F1YXgxMTAxIHF1YW50aXplICA1MDAwMDAwMDAwICAgICAwIC0+ICA1MDAwMDAwMDAwCitxdWF4MTEwMiBxdWFudGl6ZSAgNDAwMDAwMDAwMCAgICAgMCAtPiAgNDAwMDAwMDAwMAorcXVheDExMDMgcXVhbnRpemUgIDIwMDAwMDAwMDAgICAgIDAgLT4gIDIwMDAwMDAwMDAKK3F1YXgxMTA0IHF1YW50aXplICAxMDAwMDAwMDAwICAgICAwIC0+ICAxMDAwMDAwMDAwCitxdWF4MTEwNSBxdWFudGl6ZSAgMDEwMDAwMDAwMCAgICAgMCAtPiAgMTAwMDAwMDAwCitxdWF4MTEwNiBxdWFudGl6ZSAgMDAxMDAwMDAwMCAgICAgMCAtPiAgMTAwMDAwMDAKK3F1YXgxMTA3IHF1YW50aXplICAwMDAxMDAwMDAwICAgICAwIC0+ICAxMDAwMDAwCitxdWF4MTEwOCBxdWFudGl6ZSAgMDAwMDEwMDAwMCAgICAgMCAtPiAgMTAwMDAwCitxdWF4MTEwOSBxdWFudGl6ZSAgMDAwMDAxMDAwMCAgICAgMCAtPiAgMTAwMDAKK3F1YXgxMTEwIHF1YW50aXplICAwMDAwMDAxMDAwICAgICAwIC0+ICAxMDAwCitxdWF4MTExMSBxdWFudGl6ZSAgMDAwMDAwMDEwMCAgICAgMCAtPiAgMTAwCitxdWF4MTExMiBxdWFudGl6ZSAgMDAwMDAwMDAxMCAgICAgMCAtPiAgMTAKK3F1YXgxMTEzIHF1YW50aXplICAwMDAwMDAwMDAxICAgICAwIC0+ICAxCitxdWF4MTExNCBxdWFudGl6ZSAgMDAwMDAwMDAwMCAgICAgMCAtPiAgMAorLS0gYW5kIHBvd2VycyBvZiB0ZW4gZm9yIHNhbWUKK3F1YXgxMTIxIHF1YW50aXplIC01MDAwMDAwMDAwICAgICAwIC0+IC01MDAwMDAwMDAwCitxdWF4MTEyMiBxdWFudGl6ZSAtNDAwMDAwMDAwMCAgICAgMCAtPiAtNDAwMDAwMDAwMAorcXVheDExMjMgcXVhbnRpemUgLTIwMDAwMDAwMDAgICAgIDAgLT4gLTIwMDAwMDAwMDAKK3F1YXgxMTI0IHF1YW50aXplIC0xMDAwMDAwMDAwICAgICAwIC0+IC0xMDAwMDAwMDAwCitxdWF4MTEyNSBxdWFudGl6ZSAtMDEwMDAwMDAwMCAgICAgMCAtPiAtMTAwMDAwMDAwCitxdWF4MTEyNiBxdWFudGl6ZSAtMDAxMDAwMDAwMCAgICAgMCAtPiAtMTAwMDAwMDAKK3F1YXgxMTI3IHF1YW50aXplIC0wMDAxMDAwMDAwICAgICAwIC0+IC0xMDAwMDAwCitxdWF4MTEyOCBxdWFudGl6ZSAtMDAwMDEwMDAwMCAgICAgMCAtPiAtMTAwMDAwCitxdWF4MTEyOSBxdWFudGl6ZSAtMDAwMDAxMDAwMCAgICAgMCAtPiAtMTAwMDAKK3F1YXgxMTMwIHF1YW50aXplIC0wMDAwMDAxMDAwICAgICAwIC0+IC0xMDAwCitxdWF4MTEzMSBxdWFudGl6ZSAtMDAwMDAwMDEwMCAgICAgMCAtPiAtMTAwCitxdWF4MTEzMiBxdWFudGl6ZSAtMDAwMDAwMDAxMCAgICAgMCAtPiAtMTAKK3F1YXgxMTMzIHF1YW50aXplIC0wMDAwMDAwMDAxICAgICAwIC0+IC0xCitxdWF4MTEzNCBxdWFudGl6ZSAtMDAwMDAwMDAwMCAgICAgMCAtPiAtMAorCistLSBTb21lIG1pc2NlbGxhbnkKK3ByZWNpc2lvbjogICAzNAorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA2MTQ0CittaW5FeHBvbmVudDogLTYxNDMKKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgMiAgICAgICAgIDMKKy0tICAgICAgICAgICAgICAgICAgIDEgMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0CitxdWF4MGExIHF1YW50aXplICAgICA4LjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NUUrNjE0MyAgMUUrNjE0MyAgICAgIC0+IDlFKzYxNDMgICBJbmV4YWN0IFJvdW5kZWQKK3F1YXgwYTIgcXVhbnRpemUgMTI4IzguNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1RSs2MTQzICAxMjgjMUUrNjE0MyAgLT4gOC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NkUrNjE0MyAgIFJvdW5kZWQgSW5leGFjdAorcXVheDBhMyBxdWFudGl6ZSAxMjgjOC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTVFKzYxNDQgIDEyOCMxRSs2MTQ0ICAtPiA4LjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NUUrNjE0NAorCistLSBwYXlsb2FkIGRlY2FwaXRhdGUKK3ByZWNpc2lvbjogNQorcXVheDYyMTAwIHF1YW50aXplIDExIC1zTmFOMTIzNDU2Nzg5MCAtPiAtTmFONjc4OTAgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE51bGwgdGVzdHMKK3F1YXg5OTggcXVhbnRpemUgMTAgICAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3F1YXg5OTkgcXVhbnRpemUgICMgMWUxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcmFuZG9tQm91bmQzMi5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yYW5kb21Cb3VuZDMyLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q1OWI5YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcmFuZG9tQm91bmQzMi5kZWNUZXN0CkBAIC0wLDAgKzEsMjQ0MyBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSByYW5kb21Cb3VuZDMyLmRlY1Rlc3QgLS0gZGVjaW1hbCB0ZXN0Y2FzZXMgLS0gYm91bmRhcmllcyBuZWFyIDMyICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFRoZXNlIHRlc3RjYXNlcyB0ZXN0IGNhbGN1bGF0aW9ucyBhdCBwcmVjaXNpb25zIDMxLCAzMiwgYW5kIDMzLCB0bworLS0gZXhlcmNpc2UgdGhlIGJvdW5kYXJpZXMgYXJvdW5kIDIqKjUKKworLS0gcmFuZG9tbHkgZ2VuZXJhdGVkIHRlc3RjYXNlcyBbMjYgU2VwIDIwMDFdCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDMxCityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OTkKK21pbmV4cG9uZW50OiAtOTk5OQorCithZGR4MzAwMSBhZGQgNDk1MzczNDY3NTkxMy4wNjUzMTQ3Mzg3NDMzMjI1NzkgMDIxOC45MzIwMTAzOTY1MzQzNzE3MDQ5MzA3MTQ4NjBFKzc5NyAtPiAyLjE4OTMyMDEwMzk2NTM0MzcxNzA0OTMwNzE0ODYwMEUrNzk5IEluZXhhY3QgUm91bmRlZAorY29teDMwMDEgY29tcGFyZSA0OTUzNzM0Njc1OTEzLjA2NTMxNDczODc0MzMyMjU3OSAwMjE4LjkzMjAxMDM5NjUzNDM3MTcwNDkzMDcxNDg2MEUrNzk3IC0+IC0xCitkaXZ4MzAwMSBkaXZpZGUgNDk1MzczNDY3NTkxMy4wNjUzMTQ3Mzg3NDMzMjI1NzkgMDIxOC45MzIwMTAzOTY1MzQzNzE3MDQ5MzA3MTQ4NjBFKzc5NyAtPiAyLjI2MjY4MTc2NDUwNzk2NTAwNTI4NDA4MDgwMDQzOEUtNzg3IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMDEgZGl2aWRlaW50IDQ5NTM3MzQ2NzU5MTMuMDY1MzE0NzM4NzQzMzIyNTc5IDAyMTguOTMyMDEwMzk2NTM0MzcxNzA0OTMwNzE0ODYwRSs3OTcgLT4gMAorbXVseDMwMDEgbXVsdGlwbHkgNDk1MzczNDY3NTkxMy4wNjUzMTQ3Mzg3NDMzMjI1NzkgMDIxOC45MzIwMTAzOTY1MzQzNzE3MDQ5MzA3MTQ4NjBFKzc5NyAtPiAxLjA4NDUzMTA5MTU2ODY3MjA0MTkyMzE1MTYzMjA2NkUrODEyIEluZXhhY3QgUm91bmRlZAorcG93eDMwMDEgcG93ZXIgNDk1MzczNDY3NTkxMy4wNjUzMTQ3Mzg3NDMzMjI1NzkgMiAtPiAyNDUzOTQ4NzIzOTM0MzUyMjI0NjE1NTg5MC45OTQ5NSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDAxIHJlbWFpbmRlciA0OTUzNzM0Njc1OTEzLjA2NTMxNDczODc0MzMyMjU3OSAwMjE4LjkzMjAxMDM5NjUzNDM3MTcwNDkzMDcxNDg2MEUrNzk3IC0+IDQ5NTM3MzQ2NzU5MTMuMDY1MzE0NzM4NzQzMzIyNTc5CitzdWJ4MzAwMSBzdWJ0cmFjdCA0OTUzNzM0Njc1OTEzLjA2NTMxNDczODc0MzMyMjU3OSAwMjE4LjkzMjAxMDM5NjUzNDM3MTcwNDkzMDcxNDg2MEUrNzk3IC0+IC0yLjE4OTMyMDEwMzk2NTM0MzcxNzA0OTMwNzE0ODYwMEUrNzk5IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMDIgYWRkIDk2NDEuNjg0MzIzMzg2OTU1ODgxNTk1NDkwMzQ3OTEwRS04NDQgLTc4ODY0NTMyMDQ3LjEyMjg3NDg0NDMwOTgwNjM2Nzk4RSs5MzQgLT4gLTcuODg2NDUzMjA0NzEyMjg3NDg0NDMwOTgwNjM2Nzk4RSs5NDQgSW5leGFjdCBSb3VuZGVkCitjb214MzAwMiBjb21wYXJlIDk2NDEuNjg0MzIzMzg2OTU1ODgxNTk1NDkwMzQ3OTEwRS04NDQgLTc4ODY0NTMyMDQ3LjEyMjg3NDg0NDMwOTgwNjM2Nzk4RSs5MzQgLT4gMQorZGl2eDMwMDIgZGl2aWRlIDk2NDEuNjg0MzIzMzg2OTU1ODgxNTk1NDkwMzQ3OTEwRS04NDQgLTc4ODY0NTMyMDQ3LjEyMjg3NDg0NDMwOTgwNjM2Nzk4RSs5MzQgLT4gLTEuMjIyNTYyODAxNDQxMDY5NjY3ODQ5NDAyNzgyNzE2RS0xNzg1IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMDIgZGl2aWRlaW50IDk2NDEuNjg0MzIzMzg2OTU1ODgxNTk1NDkwMzQ3OTEwRS04NDQgLTc4ODY0NTMyMDQ3LjEyMjg3NDg0NDMwOTgwNjM2Nzk4RSs5MzQgLT4gLTAKK211bHgzMDAyIG11bHRpcGx5IDk2NDEuNjg0MzIzMzg2OTU1ODgxNTk1NDkwMzQ3OTEwRS04NDQgLTc4ODY0NTMyMDQ3LjEyMjg3NDg0NDMwOTgwNjM2Nzk4RSs5MzQgLT4gLTcuNjAzODY5MjIzMDk5OTI4MTQxNjU5ODMxNTg5OTA1RSsxMDQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAwMiBwb3dlciA5NjQxLjY4NDMyMzM4Njk1NTg4MTU5NTQ5MDM0NzkxMEUtODQ0IC04IC0+IDEuMzM4OTg4MTUyMDY3MTgwMzM3NzM4OTU1NzU3NTg3RSs2NzIwIEluZXhhY3QgUm91bmRlZAorcmVteDMwMDIgcmVtYWluZGVyIDk2NDEuNjg0MzIzMzg2OTU1ODgxNTk1NDkwMzQ3OTEwRS04NDQgLTc4ODY0NTMyMDQ3LjEyMjg3NDg0NDMwOTgwNjM2Nzk4RSs5MzQgLT4gOS42NDE2ODQzMjMzODY5NTU4ODE1OTU0OTAzNDc5MTBFLTg0MQorc3VieDMwMDIgc3VidHJhY3QgOTY0MS42ODQzMjMzODY5NTU4ODE1OTU0OTAzNDc5MTBFLTg0NCAtNzg4NjQ1MzIwNDcuMTIyODc0ODQ0MzA5ODA2MzY3OThFKzkzNCAtPiA3Ljg4NjQ1MzIwNDcxMjI4NzQ4NDQzMDk4MDYzNjc5OEUrOTQ0IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMDMgYWRkIC0xLjAyODA0ODU3MTYyODMyNjg3MTA1NDk2NDMwNzc3NEUrNTI5IDQ5MjAwMDA4NjQ1Njk5LjM1NTc3OTM3NTgyNzE0NzM5IC0+IC0xLjAyODA0ODU3MTYyODMyNjg3MTA1NDk2NDMwNzc3NEUrNTI5IEluZXhhY3QgUm91bmRlZAorY29teDMwMDMgY29tcGFyZSAtMS4wMjgwNDg1NzE2MjgzMjY4NzEwNTQ5NjQzMDc3NzRFKzUyOSA0OTIwMDAwODY0NTY5OS4zNTU3NzkzNzU4MjcxNDczOSAtPiAtMQorZGl2eDMwMDMgZGl2aWRlIC0xLjAyODA0ODU3MTYyODMyNjg3MTA1NDk2NDMwNzc3NEUrNTI5IDQ5MjAwMDA4NjQ1Njk5LjM1NTc3OTM3NTgyNzE0NzM5IC0+IC0yLjA4OTUyOTI0OTk0Njk3MTQ4Mjg2MTg0MzY5MjQ2NUUrNTE1IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMDMgZGl2aWRlaW50IC0xLjAyODA0ODU3MTYyODMyNjg3MTA1NDk2NDMwNzc3NEUrNTI5IDQ5MjAwMDA4NjQ1Njk5LjM1NTc3OTM3NTgyNzE0NzM5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzAwMyBtdWx0aXBseSAtMS4wMjgwNDg1NzE2MjgzMjY4NzEwNTQ5NjQzMDc3NzRFKzUyOSA0OTIwMDAwODY0NTY5OS4zNTU3NzkzNzU4MjcxNDczOSAtPiAtNS4wNTc5OTk4NjEyMzEyNTU1NDkyODM3Mzc4NjEyMDdFKzU0MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDAzIHBvd2VyIC0xLjAyODA0ODU3MTYyODMyNjg3MTA1NDk2NDMwNzc3NEUrNTI5IDUgLT4gLTEuMTQ4MzMzODU4MjUzNzA0Mjg0MjMyNzgwODE5NzM5RSsyNjQ1IEluZXhhY3QgUm91bmRlZAorcmVteDMwMDMgcmVtYWluZGVyIC0xLjAyODA0ODU3MTYyODMyNjg3MTA1NDk2NDMwNzc3NEUrNTI5IDQ5MjAwMDA4NjQ1Njk5LjM1NTc3OTM3NTgyNzE0NzM5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzAwMyBzdWJ0cmFjdCAtMS4wMjgwNDg1NzE2MjgzMjY4NzEwNTQ5NjQzMDc3NzRFKzUyOSA0OTIwMDAwODY0NTY5OS4zNTU3NzkzNzU4MjcxNDczOSAtPiAtMS4wMjgwNDg1NzE2MjgzMjY4NzEwNTQ5NjQzMDc3NzRFKzUyOSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDA0IGFkZCA0NzkwODQuODU2MTgwODkzMDUyNTQxNzczNTIwNTUxOSAwODQxNTc1NzEwNTQuMjY5MTc4NDY2MDk4Mzk4OTkzMSAtPiA4NDE1ODA1MDEzOS4xMjUzNTkzNTkxNTA5NDA3NjY2MiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDA0IGNvbXBhcmUgNDc5MDg0Ljg1NjE4MDg5MzA1MjU0MTc3MzUyMDU1MTkgMDg0MTU3NTcxMDU0LjI2OTE3ODQ2NjA5ODM5ODk5MzEgLT4gLTEKK2RpdngzMDA0IGRpdmlkZSA0NzkwODQuODU2MTgwODkzMDUyNTQxNzczNTIwNTUxOSAwODQxNTc1NzEwNTQuMjY5MTc4NDY2MDk4Mzk4OTkzMSAtPiAwLjAwMDAwNTY5MjcxMjQ5MzcwOTYxNzkwNTQ5MzcxMDIwNzk2OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDA0IGRpdmlkZWludCA0NzkwODQuODU2MTgwODkzMDUyNTQxNzczNTIwNTUxOSAwODQxNTc1NzEwNTQuMjY5MTc4NDY2MDk4Mzk4OTkzMSAtPiAwCittdWx4MzAwNCBtdWx0aXBseSA0NzkwODQuODU2MTgwODkzMDUyNTQxNzczNTIwNTUxOSAwODQxNTc1NzEwNTQuMjY5MTc4NDY2MDk4Mzk4OTkzMSAtPiA0MDMxODYxNzgyNTA2NzgzNy40NzMxNzcwMDUyMzY4NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDA0IHBvd2VyIDQ3OTA4NC44NTYxODA4OTMwNTI1NDE3NzM1MjA1NTE5IDggLT4gMi43NzUyMzM1OTgwMjEyMzU5NzM1NDU5MzMwNDU4MzdFKzQ1IEluZXhhY3QgUm91bmRlZAorcmVteDMwMDQgcmVtYWluZGVyIDQ3OTA4NC44NTYxODA4OTMwNTI1NDE3NzM1MjA1NTE5IDA4NDE1NzU3MTA1NC4yNjkxNzg0NjYwOTgzOTg5OTMxIC0+IDQ3OTA4NC44NTYxODA4OTMwNTI1NDE3NzM1MjA1NTE5CitzdWJ4MzAwNCBzdWJ0cmFjdCA0NzkwODQuODU2MTgwODkzMDUyNTQxNzczNTIwNTUxOSAwODQxNTc1NzEwNTQuMjY5MTc4NDY2MDk4Mzk4OTkzMSAtPiAtODQxNTcwOTE5NjkuNDEyOTk3NTczMDQ1ODU3MjE5NTggSW5leGFjdCBSb3VuZGVkCithZGR4MzAwNSBhZGQgLTAzNjM3NTA3ODguNTczNzgyMjA1NjY0MzQ5NTYyOTMxIC0zMTcyLjA4MDkzNDQ2NDEzMzY5MTkwOTkwNTk4MDA5NiAtPiAtMzYzNzUzOTYwLjY1NDcxNjY2OTc5ODA0MTQ3MjgzNzAgSW5leGFjdCBSb3VuZGVkCitjb214MzAwNSBjb21wYXJlIC0wMzYzNzUwNzg4LjU3Mzc4MjIwNTY2NDM0OTU2MjkzMSAtMzE3Mi4wODA5MzQ0NjQxMzM2OTE5MDk5MDU5ODAwOTYgLT4gLTEKK2RpdngzMDA1IGRpdmlkZSAtMDM2Mzc1MDc4OC41NzM3ODIyMDU2NjQzNDk1NjI5MzEgLTMxNzIuMDgwOTM0NDY0MTMzNjkxOTA5OTA1OTgwMDk2IC0+IDExNDY3Mi42MDY0MzM3NDIwMTY3MDk2Mjk1MjkwODkwIEluZXhhY3QgUm91bmRlZAorZHZpeDMwMDUgZGl2aWRlaW50IC0wMzYzNzUwNzg4LjU3Mzc4MjIwNTY2NDM0OTU2MjkzMSAtMzE3Mi4wODA5MzQ0NjQxMzM2OTE5MDk5MDU5ODAwOTYgLT4gMTE0NjcyCittdWx4MzAwNSBtdWx0aXBseSAtMDM2Mzc1MDc4OC41NzM3ODIyMDU2NjQzNDk1NjI5MzEgLTMxNzIuMDgwOTM0NDY0MTMzNjkxOTA5OTA1OTgwMDk2IC0+IDExNTM4NDY5NDEzMzEuMTg4NTgzMjkyMjM5MjMwODE4IEluZXhhY3QgUm91bmRlZAorcG93eDMwMDUgcG93ZXIgLTAzNjM3NTA3ODguNTczNzgyMjA1NjY0MzQ5NTYyOTMxIC0zMTcyIC0+IDBFLTEwMDI5IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMDA1IHJlbWFpbmRlciAtMDM2Mzc1MDc4OC41NzM3ODIyMDU2NjQzNDk1NjI5MzEgLTMxNzIuMDgwOTM0NDY0MTMzNjkxOTA5OTA1OTgwMDk2IC0+IC0xOTIzLjY1NjkxMTA2Njk0NTY1NjgyNDM4MTQzMTQ4OAorc3VieDMwMDUgc3VidHJhY3QgLTAzNjM3NTA3ODguNTczNzgyMjA1NjY0MzQ5NTYyOTMxIC0zMTcyLjA4MDkzNDQ2NDEzMzY5MTkwOTkwNTk4MDA5NiAtPiAtMzYzNzQ3NjE2LjQ5Mjg0Nzc0MTUzMDY1NzY1MzAyNTAgSW5leGFjdCBSb3VuZGVkCithZGR4MzAwNiBhZGQgMTM4MTAyNjU1MTQyMzY2OTkxOTAxMDE5MTg3ODQ0OSAtODIuNjY2MTQ3NzU0NDUzNzEyNTQ5OTkzNTc4MDA3MzkgLT4gMTM4MTAyNjU1MTQyMzY2OTkxOTAxMDE5MTg3ODM2NiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDA2IGNvbXBhcmUgMTM4MTAyNjU1MTQyMzY2OTkxOTAxMDE5MTg3ODQ0OSAtODIuNjY2MTQ3NzU0NDUzNzEyNTQ5OTkzNTc4MDA3MzkgLT4gMQorZGl2eDMwMDYgZGl2aWRlIDEzODEwMjY1NTE0MjM2Njk5MTkwMTAxOTE4Nzg0NDkgLTgyLjY2NjE0Nzc1NDQ1MzcxMjU0OTk5MzU3ODAwNzM5IC0+IC0xNjcwNjA3MTIxNDYxMzU1MjM3NzM3NjYzOTU1Ny45MCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDA2IGRpdmlkZWludCAxMzgxMDI2NTUxNDIzNjY5OTE5MDEwMTkxODc4NDQ5IC04Mi42NjYxNDc3NTQ0NTM3MTI1NDk5OTM1NzgwMDczOSAtPiAtMTY3MDYwNzEyMTQ2MTM1NTIzNzczNzY2Mzk1NTcKK211bHgzMDA2IG11bHRpcGx5IDEzODEwMjY1NTE0MjM2Njk5MTkwMTAxOTE4Nzg0NDkgLTgyLjY2NjE0Nzc1NDQ1MzcxMjU0OTk5MzU3ODAwNzM5IC0+IC0xLjE0MTY0MTQ0OTUyODEyNzY1NjU2MDc3MDA1NzIyOEUrMzIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAwNiBwb3dlciAxMzgxMDI2NTUxNDIzNjY5OTE5MDEwMTkxODc4NDQ5IC04MyAtPiAyLjMwNzk3NzkwODEwNjU2NDI5OTkyNTE5MzAxMTA1MkUtMjUwMiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDA2IHJlbWFpbmRlciAxMzgxMDI2NTUxNDIzNjY5OTE5MDEwMTkxODc4NDQ5IC04Mi42NjYxNDc3NTQ0NTM3MTI1NDk5OTM1NzgwMDczOSAtPiA3NC4yMjExNTk1MzU1MzYwMjAzNjA0MjE2ODc2NzM3Nworc3VieDMwMDYgc3VidHJhY3QgMTM4MTAyNjU1MTQyMzY2OTkxOTAxMDE5MTg3ODQ0OSAtODIuNjY2MTQ3NzU0NDUzNzEyNTQ5OTkzNTc4MDA3MzkgLT4gMTM4MTAyNjU1MTQyMzY2OTkxOTAxMDE5MTg3ODUzMiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDA3IGFkZCA0NjI3LjAyNjk2MDQyMzA3MjEyNzk1MzU1NjYzNTU4NSAtNDQxMDU4MzEzMjkwMS44MzAwMTc0Nzk3NDEyMzExMzEgLT4gLTQ0MTA1ODMxMjgyNzQuODAzMDU3MDU2NjY5MTAzMTc3IEluZXhhY3QgUm91bmRlZAorY29teDMwMDcgY29tcGFyZSA0NjI3LjAyNjk2MDQyMzA3MjEyNzk1MzU1NjYzNTU4NSAtNDQxMDU4MzEzMjkwMS44MzAwMTc0Nzk3NDEyMzExMzEgLT4gMQorZGl2eDMwMDcgZGl2aWRlIDQ2MjcuMDI2OTYwNDIzMDcyMTI3OTUzNTU2NjM1NTg1IC00NDEwNTgzMTMyOTAxLjgzMDAxNzQ3OTc0MTIzMTEzMSAtPiAtMS4wNDkwNzM3NDM5OTI0MDQ1NzA1NjkwMDMxMjkzNDZFLTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzAwNyBkaXZpZGVpbnQgNDYyNy4wMjY5NjA0MjMwNzIxMjc5NTM1NTY2MzU1ODUgLTQ0MTA1ODMxMzI5MDEuODMwMDE3NDc5NzQxMjMxMTMxIC0+IC0wCittdWx4MzAwNyBtdWx0aXBseSA0NjI3LjAyNjk2MDQyMzA3MjEyNzk1MzU1NjYzNTU4NSAtNDQxMDU4MzEzMjkwMS44MzAwMTc0Nzk3NDEyMzExMzEgLT4gLTIwNDA3ODg3MDY3MTI0MDI1LjMxNTc2ODg3NTY1MTEzIEluZXhhY3QgUm91bmRlZAorcG93eDMwMDcgcG93ZXIgNDYyNy4wMjY5NjA0MjMwNzIxMjc5NTM1NTY2MzU1ODUgLTQgLT4gMi4xODE2ODQxNjcyMjIzMzQ5MzQyMjE0MDc3ODE3MDFFLTE1IEluZXhhY3QgUm91bmRlZAorcmVteDMwMDcgcmVtYWluZGVyIDQ2MjcuMDI2OTYwNDIzMDcyMTI3OTUzNTU2NjM1NTg1IC00NDEwNTgzMTMyOTAxLjgzMDAxNzQ3OTc0MTIzMTEzMSAtPiA0NjI3LjAyNjk2MDQyMzA3MjEyNzk1MzU1NjYzNTU4NQorc3VieDMwMDcgc3VidHJhY3QgNDYyNy4wMjY5NjA0MjMwNzIxMjc5NTM1NTY2MzU1ODUgLTQ0MTA1ODMxMzI5MDEuODMwMDE3NDc5NzQxMjMxMTMxIC0+IDQ0MTA1ODMxMzc1MjguODU2OTc3OTAyODEzMzU5MDg1IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMDggYWRkIDc1MzUzNTc0NDkzLjg0NDg0MTUzNDg0OTE4MjEyMDQyIC04Njg0MTExNjk1MDk1ODQ5OTIyMjYzMDQ0MTkxMjIxIC0+IC04Njg0MTExNjk1MDk1ODQ5OTIyMTg3NjkwNjE2NzI3IEluZXhhY3QgUm91bmRlZAorY29teDMwMDggY29tcGFyZSA3NTM1MzU3NDQ5My44NDQ4NDE1MzQ4NDkxODIxMjA0MiAtODY4NDExMTY5NTA5NTg0OTkyMjI2MzA0NDE5MTIyMSAtPiAxCitkaXZ4MzAwOCBkaXZpZGUgNzUzNTM1NzQ0OTMuODQ0ODQxNTM0ODQ5MTgyMTIwNDIgLTg2ODQxMTE2OTUwOTU4NDk5MjIyNjMwNDQxOTEyMjEgLT4gLTguNjc3MTc3MDI2MjIzNTM2NDc1NTMxNTkyNDMyMTE4RS0yMSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDA4IGRpdmlkZWludCA3NTM1MzU3NDQ5My44NDQ4NDE1MzQ4NDkxODIxMjA0MiAtODY4NDExMTY5NTA5NTg0OTkyMjI2MzA0NDE5MTIyMSAtPiAtMAorbXVseDMwMDggbXVsdGlwbHkgNzUzNTM1NzQ0OTMuODQ0ODQxNTM0ODQ5MTgyMTIwNDIgLTg2ODQxMTE2OTUwOTU4NDk5MjIyNjMwNDQxOTEyMjEgLT4gLTYuNTQzNzg4NTc1MjkyNzQzMjgxNDU2ODMwNzAxMTI3RSs0MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDA4IHBvd2VyIDc1MzUzNTc0NDkzLjg0NDg0MTUzNDg0OTE4MjEyMDQyIC05IC0+IDEuMjc2NjMwNjcwMjg3OTA2OTI1NTcwNjQ1NDkwNzA3RS05OCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDA4IHJlbWFpbmRlciA3NTM1MzU3NDQ5My44NDQ4NDE1MzQ4NDkxODIxMjA0MiAtODY4NDExMTY5NTA5NTg0OTkyMjI2MzA0NDE5MTIyMSAtPiA3NTM1MzU3NDQ5My44NDQ4NDE1MzQ4NDkxODIxMjA0Mgorc3VieDMwMDggc3VidHJhY3QgNzUzNTM1NzQ0OTMuODQ0ODQxNTM0ODQ5MTgyMTIwNDIgLTg2ODQxMTE2OTUwOTU4NDk5MjIyNjMwNDQxOTEyMjEgLT4gODY4NDExMTY5NTA5NTg0OTkyMjMzODM5Nzc2NTcxNSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDA5IGFkZCA2OTA3MDU4LjIxNjQzNTM1NTg3NDcyOTU5MjM3MzAxMSAyLjg1NzAwNTQ0NjkxNzY3MDUxNTY2MjM5ODc0MTU0NSAtPiA2OTA3MDYxLjA3MzQ0MDgwMjc5MjQwMDEwODAzNTQxMCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDA5IGNvbXBhcmUgNjkwNzA1OC4yMTY0MzUzNTU4NzQ3Mjk1OTIzNzMwMTEgMi44NTcwMDU0NDY5MTc2NzA1MTU2NjIzOTg3NDE1NDUgLT4gMQorZGl2eDMwMDkgZGl2aWRlIDY5MDcwNTguMjE2NDM1MzU1ODc0NzI5NTkyMzczMDExIDIuODU3MDA1NDQ2OTE3NjcwNTE1NjYyMzk4NzQxNTQ1IC0+IDI0MTc1ODYuNjQ2MTQ2MjgzODU2NDM2ODY0MTIxMTA0IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMDkgZGl2aWRlaW50IDY5MDcwNTguMjE2NDM1MzU1ODc0NzI5NTkyMzczMDExIDIuODU3MDA1NDQ2OTE3NjcwNTE1NjYyMzk4NzQxNTQ1IC0+IDI0MTc1ODYKK211bHgzMDA5IG11bHRpcGx5IDY5MDcwNTguMjE2NDM1MzU1ODc0NzI5NTkyMzczMDExIDIuODU3MDA1NDQ2OTE3NjcwNTE1NjYyMzk4NzQxNTQ1IC0+IDE5NzMzNTAyLjk0NjUzMzI2MjExNjIzNjk4MDM0NzE3IEluZXhhY3QgUm91bmRlZAorcG93eDMwMDkgcG93ZXIgNjkwNzA1OC4yMTY0MzUzNTU4NzQ3Mjk1OTIzNzMwMTEgMyAtPiAzMjk1MTgxNTY2NDYzNjk1MDU0OTQuODk3MTM1MzI0MCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDA5IHJlbWFpbmRlciA2OTA3MDU4LjIxNjQzNTM1NTg3NDcyOTU5MjM3MzAxMSAyLjg1NzAwNTQ0NjkxNzY3MDUxNTY2MjM5ODc0MTU0NSAtPiAxLjg0NjA0MzQ1MjQ4MzQ1MTM5NjQ0OTAzNDE4OTYzMAorc3VieDMwMDkgc3VidHJhY3QgNjkwNzA1OC4yMTY0MzUzNTU4NzQ3Mjk1OTIzNzMwMTEgMi44NTcwMDU0NDY5MTc2NzA1MTU2NjIzOTg3NDE1NDUgLT4gNjkwNzA1NS4zNTk0Mjk5MDg5NTcwNTkwNzY3MTA2MTIgSW5leGFjdCBSb3VuZGVkCithZGR4MzAxMCBhZGQgLTM4OTQ5NTMwNDI3MjUzLjI0MDMwNjgwNDY4Njc3MTkwIDcxMjE2ODAyMS4xMjY1Mzg0NDY2NDQyNTc2NjE5MDY0RS05OTIgLT4gLTM4OTQ5NTMwNDI3MjUzLjI0MDMwNjgwNDY4Njc3MTkwIEluZXhhY3QgUm91bmRlZAorY29teDMwMTAgY29tcGFyZSAtMzg5NDk1MzA0MjcyNTMuMjQwMzA2ODA0Njg2NzcxOTAgNzEyMTY4MDIxLjEyNjUzODQ0NjY0NDI1NzY2MTkwNjRFLTk5MiAtPiAtMQorZGl2eDMwMTAgZGl2aWRlIC0zODk0OTUzMDQyNzI1My4yNDAzMDY4MDQ2ODY3NzE5MCA3MTIxNjgwMjEuMTI2NTM4NDQ2NjQ0MjU3NjYxOTA2NEUtOTkyIC0+IC01LjQ2OTE0OTAzMTEwMDk5OTcwMDQ4OTIyMTEyMjUwOUUrOTk2IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMTAgZGl2aWRlaW50IC0zODk0OTUzMDQyNzI1My4yNDAzMDY4MDQ2ODY3NzE5MCA3MTIxNjgwMjEuMTI2NTM4NDQ2NjQ0MjU3NjYxOTA2NEUtOTkyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzAxMCBtdWx0aXBseSAtMzg5NDk1MzA0MjcyNTMuMjQwMzA2ODA0Njg2NzcxOTAgNzEyMTY4MDIxLjEyNjUzODQ0NjY0NDI1NzY2MTkwNjRFLTk5MiAtPiAtMi43NzM4NjEwMDA4MTg0ODM3NjkyOTIyNDAxMDk0MTdFLTk3MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDEwIHBvd2VyIC0zODk0OTUzMDQyNzI1My4yNDAzMDY4MDQ2ODY3NzE5MCA3IC0+IC0xLjM1OTkyNjk1OTgyMzA3MTMzMjU5OTgxNzM2Mzg3N0UrOTUgSW5leGFjdCBSb3VuZGVkCityZW14MzAxMCByZW1haW5kZXIgLTM4OTQ5NTMwNDI3MjUzLjI0MDMwNjgwNDY4Njc3MTkwIDcxMjE2ODAyMS4xMjY1Mzg0NDY2NDQyNTc2NjE5MDY0RS05OTIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMDEwIHN1YnRyYWN0IC0zODk0OTUzMDQyNzI1My4yNDAzMDY4MDQ2ODY3NzE5MCA3MTIxNjgwMjEuMTI2NTM4NDQ2NjQ0MjU3NjYxOTA2NEUtOTkyIC0+IC0zODk0OTUzMDQyNzI1My4yNDAzMDY4MDQ2ODY3NzE5MCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDExIGFkZCAtMDcwODA2OS4wMjU2Njc0NzE5OTYzNzgwODE0ODI1NDkgLTU2Mjg0Mi40NzAxNTIwNzg3ODMxMDE4NzMyMjAyODA0IC0+IC0xMjcwOTExLjQ5NTgxOTU1MDc3OTQ3OTk1NDcwMjgyOSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDExIGNvbXBhcmUgLTA3MDgwNjkuMDI1NjY3NDcxOTk2Mzc4MDgxNDgyNTQ5IC01NjI4NDIuNDcwMTUyMDc4NzgzMTAxODczMjIwMjgwNCAtPiAtMQorZGl2eDMwMTEgZGl2aWRlIC0wNzA4MDY5LjAyNTY2NzQ3MTk5NjM3ODA4MTQ4MjU0OSAtNTYyODQyLjQ3MDE1MjA3ODc4MzEwMTg3MzIyMDI4MDQgLT4gMS4yNTgwMjM0NDkyMTg2NjU2MDgzNDkxNDUzOTQwNjkgSW5leGFjdCBSb3VuZGVkCitkdml4MzAxMSBkaXZpZGVpbnQgLTA3MDgwNjkuMDI1NjY3NDcxOTk2Mzc4MDgxNDgyNTQ5IC01NjI4NDIuNDcwMTUyMDc4NzgzMTAxODczMjIwMjgwNCAtPiAxCittdWx4MzAxMSBtdWx0aXBseSAtMDcwODA2OS4wMjU2Njc0NzE5OTYzNzgwODE0ODI1NDkgLTU2Mjg0Mi40NzAxNTIwNzg3ODMxMDE4NzMyMjAyODA0IC0+IDM5ODUzMTMxOTQ0NC44NTU2MTI4NzI5MDg2MTEyMjA1IEluZXhhY3QgUm91bmRlZAorcG93eDMwMTEgcG93ZXIgLTA3MDgwNjkuMDI1NjY3NDcxOTk2Mzc4MDgxNDgyNTQ5IC01NjI4NDIgLT4gMEUtMTAwMjkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMwMTEgcmVtYWluZGVyIC0wNzA4MDY5LjAyNTY2NzQ3MTk5NjM3ODA4MTQ4MjU0OSAtNTYyODQyLjQ3MDE1MjA3ODc4MzEwMTg3MzIyMDI4MDQgLT4gLTE0NTIyNi41NTU1MTUzOTMyMTMyNzYyMDgyNjIyNjg2CitzdWJ4MzAxMSBzdWJ0cmFjdCAtMDcwODA2OS4wMjU2Njc0NzE5OTYzNzgwODE0ODI1NDkgLTU2Mjg0Mi40NzAxNTIwNzg3ODMxMDE4NzMyMjAyODA0IC0+IC0xNDUyMjYuNTU1NTE1MzkzMjEzMjc2MjA4MjYyMjY4NgorYWRkeDMwMTIgYWRkIDQwNTUwODcuMjQ2OTk0NjQ0NzA5NzI5OTQyNjczOTc2IC00MzE4MzE0NjkyMTg5Ny42NzM4MzQ3NjEwNDA4NDU3NUUrMjExIC0+IC00LjMxODMxNDY5MjE4OTc2NzM4MzQ3NjEwNDA4NDU3NUUrMjI0IEluZXhhY3QgUm91bmRlZAorY29teDMwMTIgY29tcGFyZSA0MDU1MDg3LjI0Njk5NDY0NDcwOTcyOTk0MjY3Mzk3NiAtNDMxODMxNDY5MjE4OTcuNjczODM0NzYxMDQwODQ1NzVFKzIxMSAtPiAxCitkaXZ4MzAxMiBkaXZpZGUgNDA1NTA4Ny4yNDY5OTQ2NDQ3MDk3Mjk5NDI2NzM5NzYgLTQzMTgzMTQ2OTIxODk3LjY3MzgzNDc2MTA0MDg0NTc1RSsyMTEgLT4gLTkuMzkwNDM5NDA5OTEzMzA3OTA2OTIzOTA5NjMwMjQ3RS0yMTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzAxMiBkaXZpZGVpbnQgNDA1NTA4Ny4yNDY5OTQ2NDQ3MDk3Mjk5NDI2NzM5NzYgLTQzMTgzMTQ2OTIxODk3LjY3MzgzNDc2MTA0MDg0NTc1RSsyMTEgLT4gLTAKK211bHgzMDEyIG11bHRpcGx5IDQwNTUwODcuMjQ2OTk0NjQ0NzA5NzI5OTQyNjczOTc2IC00MzE4MzE0NjkyMTg5Ny42NzM4MzQ3NjEwNDA4NDU3NUUrMjExIC0+IC0xLjc1MTExNDI4MzY4MDgzMzAzOTE5NzYzNzg3NDQ1M0UrMjMxIEluZXhhY3QgUm91bmRlZAorcG93eDMwMTIgcG93ZXIgNDA1NTA4Ny4yNDY5OTQ2NDQ3MDk3Mjk5NDI2NzM5NzYgLTQgLT4gMy42OTgyNzQ4OTM4NDkyNDExMTYxOTU3OTU1MTUzMDJFLTI3IEluZXhhY3QgUm91bmRlZAorcmVteDMwMTIgcmVtYWluZGVyIDQwNTUwODcuMjQ2OTk0NjQ0NzA5NzI5OTQyNjczOTc2IC00MzE4MzE0NjkyMTg5Ny42NzM4MzQ3NjEwNDA4NDU3NUUrMjExIC0+IDQwNTUwODcuMjQ2OTk0NjQ0NzA5NzI5OTQyNjczOTc2CitzdWJ4MzAxMiBzdWJ0cmFjdCA0MDU1MDg3LjI0Njk5NDY0NDcwOTcyOTk0MjY3Mzk3NiAtNDMxODMxNDY5MjE4OTcuNjczODM0NzYxMDQwODQ1NzVFKzIxMSAtPiA0LjMxODMxNDY5MjE4OTc2NzM4MzQ3NjEwNDA4NDU3NUUrMjI0IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMTMgYWRkIDQ1MDI4OTU4OTI1MjAuMzk2NTgxMzQ4MTEwOTA2OTA5RS01MTIgLTgxNS45MDQ3MzA1OTIxODYyMzQ4MjYzNTIxODc2MDM0IC0+IC04MTUuOTA0NzMwNTkyMTg2MjM0ODI2MzUyMTg3NjAzNCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDEzIGNvbXBhcmUgNDUwMjg5NTg5MjUyMC4zOTY1ODEzNDgxMTA5MDY5MDlFLTUxMiAtODE1LjkwNDczMDU5MjE4NjIzNDgyNjM1MjE4NzYwMzQgLT4gMQorZGl2eDMwMTMgZGl2aWRlIDQ1MDI4OTU4OTI1MjAuMzk2NTgxMzQ4MTEwOTA2OTA5RS01MTIgLTgxNS45MDQ3MzA1OTIxODYyMzQ4MjYzNTIxODc2MDM0IC0+IC01LjUxODg5OTExMTIzODM2Nzg2MjIzNDc5ODQzMzU1MUUtNTAzIEluZXhhY3QgUm91bmRlZAorZHZpeDMwMTMgZGl2aWRlaW50IDQ1MDI4OTU4OTI1MjAuMzk2NTgxMzQ4MTEwOTA2OTA5RS01MTIgLTgxNS45MDQ3MzA1OTIxODYyMzQ4MjYzNTIxODc2MDM0IC0+IC0wCittdWx4MzAxMyBtdWx0aXBseSA0NTAyODk1ODkyNTIwLjM5NjU4MTM0ODExMDkwNjkwOUUtNTEyIC04MTUuOTA0NzMwNTkyMTg2MjM0ODI2MzUyMTg3NjAzNCAtPiAtMy42NzM5MzQwNjAwNzE1MTYxNTY2MDQ0NTM3NTY1NDFFLTQ5NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDEzIHBvd2VyIDQ1MDI4OTU4OTI1MjAuMzk2NTgxMzQ4MTEwOTA2OTA5RS01MTIgLTgxNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDEzIHJlbWFpbmRlciA0NTAyODk1ODkyNTIwLjM5NjU4MTM0ODExMDkwNjkwOUUtNTEyIC04MTUuOTA0NzMwNTkyMTg2MjM0ODI2MzUyMTg3NjAzNCAtPiA0LjUwMjg5NTg5MjUyMDM5NjU4MTM0ODExMDkwNjkwOUUtNTAwCitzdWJ4MzAxMyBzdWJ0cmFjdCA0NTAyODk1ODkyNTIwLjM5NjU4MTM0ODExMDkwNjkwOUUtNTEyIC04MTUuOTA0NzMwNTkyMTg2MjM0ODI2MzUyMTg3NjAzNCAtPiA4MTUuOTA0NzMwNTkyMTg2MjM0ODI2MzUyMTg3NjAzNCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDE0IGFkZCA0NjcuNjcyMTI5NTA3MjYyODEwMDI2MDIzOTE3OTg2NSAtMDIuMDcxNTUwNzMzOTU1NzM1Njk4NTIzMTYwNzMwMjUgLT4gNDY1LjYwMDU3ODc3MzMwNzA3NDMyNzUwMDc1NzI1NjMgSW5leGFjdCBSb3VuZGVkCitjb214MzAxNCBjb21wYXJlIDQ2Ny42NzIxMjk1MDcyNjI4MTAwMjYwMjM5MTc5ODY1IC0wMi4wNzE1NTA3MzM5NTU3MzU2OTg1MjMxNjA3MzAyNSAtPiAxCitkaXZ4MzAxNCBkaXZpZGUgNDY3LjY3MjEyOTUwNzI2MjgxMDAyNjAyMzkxNzk4NjUgLTAyLjA3MTU1MDczMzk1NTczNTY5ODUyMzE2MDczMDI1IC0+IC0yMjUuNzU5NDM4MDEwMTAyNzcwNTk5NzQ5NjA0NTk5OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDE0IGRpdmlkZWludCA0NjcuNjcyMTI5NTA3MjYyODEwMDI2MDIzOTE3OTg2NSAtMDIuMDcxNTUwNzMzOTU1NzM1Njk4NTIzMTYwNzMwMjUgLT4gLTIyNQorbXVseDMwMTQgbXVsdGlwbHkgNDY3LjY3MjEyOTUwNzI2MjgxMDAyNjAyMzkxNzk4NjUgLTAyLjA3MTU1MDczMzk1NTczNTY5ODUyMzE2MDczMDI1IC0+IC05NjguODA2NTQzMTMxNDEyMTUyMzA3NDg3NTA2OTgwNyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDE0IHBvd2VyIDQ2Ny42NzIxMjk1MDcyNjI4MTAwMjYwMjM5MTc5ODY1IC0yIC0+IDAuMDAwMDA0NTcyMTEzNjk0MTkzMjIxODEwNjA5ODM2MDgwOTMxIEluZXhhY3QgUm91bmRlZAorcmVteDMwMTQgcmVtYWluZGVyIDQ2Ny42NzIxMjk1MDcyNjI4MTAwMjYwMjM5MTc5ODY1IC0wMi4wNzE1NTA3MzM5NTU3MzU2OTg1MjMxNjA3MzAyNSAtPiAxLjU3MzIxNDM2NzIyMjI3Nzg1ODMxMjc1MzY4MDI1CitzdWJ4MzAxNCBzdWJ0cmFjdCA0NjcuNjcyMTI5NTA3MjYyODEwMDI2MDIzOTE3OTg2NSAtMDIuMDcxNTUwNzMzOTU1NzM1Njk4NTIzMTYwNzMwMjUgLT4gNDY5Ljc0MzY4MDI0MTIxODU0NTcyNDU0NzA3ODcxNjggSW5leGFjdCBSb3VuZGVkCithZGR4MzAxNSBhZGQgMi4xNTY3OTUzMTMzMTExNTAxNDM5NDk5OTc1NTI1MDFFLTU3MSAtODY3NzE0Ny41ODYzODk0MDE2ODI3MTIxODAxNDY4NTUgLT4gLTg2NzcxNDcuNTg2Mzg5NDAxNjgyNzEyMTgwMTQ2ODU1IEluZXhhY3QgUm91bmRlZAorY29teDMwMTUgY29tcGFyZSAyLjE1Njc5NTMxMzMxMTE1MDE0Mzk0OTk5NzU1MjUwMUUtNTcxIC04Njc3MTQ3LjU4NjM4OTQwMTY4MjcxMjE4MDE0Njg1NSAtPiAxCitkaXZ4MzAxNSBkaXZpZGUgMi4xNTY3OTUzMTMzMTExNTAxNDM5NDk5OTc1NTI1MDFFLTU3MSAtODY3NzE0Ny41ODYzODk0MDE2ODI3MTIxODAxNDY4NTUgLT4gLTIuNDg1NjA0MDQ0MjMwMTYzNzk5NjA0MjQzNTI5MDA1RS01NzggSW5leGFjdCBSb3VuZGVkCitkdml4MzAxNSBkaXZpZGVpbnQgMi4xNTY3OTUzMTMzMTExNTAxNDM5NDk5OTc1NTI1MDFFLTU3MSAtODY3NzE0Ny41ODYzODk0MDE2ODI3MTIxODAxNDY4NTUgLT4gLTAKK211bHgzMDE1IG11bHRpcGx5IDIuMTU2Nzk1MzEzMzExMTUwMTQzOTQ5OTk3NTUyNTAxRS01NzEgLTg2NzcxNDcuNTg2Mzg5NDAxNjgyNzEyMTgwMTQ2ODU1IC0+IC0xLjg3MTQ4MzEyNDcyMzM4MTk4NjI3MjgzNzk0MjU3N0UtNTY0IEluZXhhY3QgUm91bmRlZAorcG93eDMwMTUgcG93ZXIgMi4xNTY3OTUzMTMzMTExNTAxNDM5NDk5OTc1NTI1MDFFLTU3MSAtODY3NzE0OCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDE1IHJlbWFpbmRlciAyLjE1Njc5NTMxMzMxMTE1MDE0Mzk0OTk5NzU1MjUwMUUtNTcxIC04Njc3MTQ3LjU4NjM4OTQwMTY4MjcxMjE4MDE0Njg1NSAtPiAyLjE1Njc5NTMxMzMxMTE1MDE0Mzk0OTk5NzU1MjUwMUUtNTcxCitzdWJ4MzAxNSBzdWJ0cmFjdCAyLjE1Njc5NTMxMzMxMTE1MDE0Mzk0OTk5NzU1MjUwMUUtNTcxIC04Njc3MTQ3LjU4NjM4OTQwMTY4MjcxMjE4MDE0Njg1NSAtPiA4Njc3MTQ3LjU4NjM4OTQwMTY4MjcxMjE4MDE0Njg1NSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDE2IGFkZCAtOTc0OTUzLjI4MDE2MzcyMDgzNjgwMDI1ODU4MjI0NTcgLTY5MzA5NTc5My4zNjY3NTc4MDY3ODAyNjk4MTkxMjQ2IC0+IC02OTQwNzA3NDYuNjQ2OTIxNTI3NjE3MDcwMDc3NzA2OCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDE2IGNvbXBhcmUgLTk3NDk1My4yODAxNjM3MjA4MzY4MDAyNTg1ODIyNDU3IC02OTMwOTU3OTMuMzY2NzU3ODA2NzgwMjY5ODE5MTI0NiAtPiAxCitkaXZ4MzAxNiBkaXZpZGUgLTk3NDk1My4yODAxNjM3MjA4MzY4MDAyNTg1ODIyNDU3IC02OTMwOTU3OTMuMzY2NzU3ODA2NzgwMjY5ODE5MTI0NiAtPiAwLjAwMTQwNjY2NDU0Njk0MjA5Mjk0MTk2MTA3NTYwODc2OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDE2IGRpdmlkZWludCAtOTc0OTUzLjI4MDE2MzcyMDgzNjgwMDI1ODU4MjI0NTcgLTY5MzA5NTc5My4zNjY3NTc4MDY3ODAyNjk4MTkxMjQ2IC0+IDAKK211bHgzMDE2IG11bHRpcGx5IC05NzQ5NTMuMjgwMTYzNzIwODM2ODAwMjU4NTgyMjQ1NyAtNjkzMDk1NzkzLjM2Njc1NzgwNjc4MDI2OTgxOTEyNDYgLT4gNjc1NzM2MDE3MjEwNTk2Ljk4OTk1ODc3NDk5OTEzNjMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAxNiBwb3dlciAtOTc0OTUzLjI4MDE2MzcyMDgzNjgwMDI1ODU4MjI0NTcgLTY5MzA5NTc5MyAtPiAtMEUtMTAwMjkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMwMTYgcmVtYWluZGVyIC05NzQ5NTMuMjgwMTYzNzIwODM2ODAwMjU4NTgyMjQ1NyAtNjkzMDk1NzkzLjM2Njc1NzgwNjc4MDI2OTgxOTEyNDYgLT4gLTk3NDk1My4yODAxNjM3MjA4MzY4MDAyNTg1ODIyNDU3CitzdWJ4MzAxNiBzdWJ0cmFjdCAtOTc0OTUzLjI4MDE2MzcyMDgzNjgwMDI1ODU4MjI0NTcgLTY5MzA5NTc5My4zNjY3NTc4MDY3ODAyNjk4MTkxMjQ2IC0+IDY5MjEyMDg0MC4wODY1OTQwODU5NDM0Njk1NjA1NDI0IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMTcgYWRkIC03NjM0NjgwMTQwMDA5NTcxODQ2MTU1NjU0MzM5NzgxIDMwMDk2MzA5NDk1MDIuMDM1ODUyNDMzNDM0MjE0NDEzRS00OTAgLT4gLTc2MzQ2ODAxNDAwMDk1NzE4NDYxNTU2NTQzMzk3ODEgSW5leGFjdCBSb3VuZGVkCitjb214MzAxNyBjb21wYXJlIC03NjM0NjgwMTQwMDA5NTcxODQ2MTU1NjU0MzM5NzgxIDMwMDk2MzA5NDk1MDIuMDM1ODUyNDMzNDM0MjE0NDEzRS00OTAgLT4gLTEKK2RpdngzMDE3IGRpdmlkZSAtNzYzNDY4MDE0MDAwOTU3MTg0NjE1NTY1NDMzOTc4MSAzMDA5NjMwOTQ5NTAyLjAzNTg1MjQzMzQzNDIxNDQxM0UtNDkwIC0+IC0yLjUzNjc0OTYxMDg2OTMyNjc1Mzc0MTAyNDY1OTk0OEUrNTA4IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMTcgZGl2aWRlaW50IC03NjM0NjgwMTQwMDA5NTcxODQ2MTU1NjU0MzM5NzgxIDMwMDk2MzA5NDk1MDIuMDM1ODUyNDMzNDM0MjE0NDEzRS00OTAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDE3IG11bHRpcGx5IC03NjM0NjgwMTQwMDA5NTcxODQ2MTU1NjU0MzM5NzgxIDMwMDk2MzA5NDk1MDIuMDM1ODUyNDMzNDM0MjE0NDEzRS00OTAgLT4gLTIuMjk3NzU2OTYzODkyMTM0MzczNjU3NTQ0MDI1MTA3RS00NDcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAxNyBwb3dlciAtNzYzNDY4MDE0MDAwOTU3MTg0NjE1NTY1NDMzOTc4MSAzIC0+IC00LjQ1MDEyODM4MjA3MjE1NzE3MDIwNzU4NDg0NzgzMUUrOTIgSW5leGFjdCBSb3VuZGVkCityZW14MzAxNyByZW1haW5kZXIgLTc2MzQ2ODAxNDAwMDk1NzE4NDYxNTU2NTQzMzk3ODEgMzAwOTYzMDk0OTUwMi4wMzU4NTI0MzM0MzQyMTQ0MTNFLTQ5MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMwMTcgc3VidHJhY3QgLTc2MzQ2ODAxNDAwMDk1NzE4NDYxNTU2NTQzMzk3ODEgMzAwOTYzMDk0OTUwMi4wMzU4NTI0MzM0MzQyMTQ0MTNFLTQ5MCAtPiAtNzYzNDY4MDE0MDAwOTU3MTg0NjE1NTY1NDMzOTc4MSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDE4IGFkZCAyNjIyNzMuMDIyMjg1MTE4NjUyMzY1MDg4OTg5NjQyOEUtNjI0IDc0MTc3LjIxMDczMzM4MDkwODQzMTQ1ODM4ODM1NDgwIC0+IDc0MTc3LjIxMDczMzM4MDkwODQzMTQ1ODM4ODM1NDgwIEluZXhhY3QgUm91bmRlZAorY29teDMwMTggY29tcGFyZSAyNjIyNzMuMDIyMjg1MTE4NjUyMzY1MDg4OTg5NjQyOEUtNjI0IDc0MTc3LjIxMDczMzM4MDkwODQzMTQ1ODM4ODM1NDgwIC0+IC0xCitkaXZ4MzAxOCBkaXZpZGUgMjYyMjczLjAyMjI4NTExODY1MjM2NTA4ODk4OTY0MjhFLTYyNCA3NDE3Ny4yMTA3MzMzODA5MDg0MzE0NTgzODgzNTQ4MCAtPiAzLjUzNTc2Mjc5OTU0NTI3NDMyOTM1ODI5MjA2NTM0M0UtNjI0IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMTggZGl2aWRlaW50IDI2MjI3My4wMjIyODUxMTg2NTIzNjUwODg5ODk2NDI4RS02MjQgNzQxNzcuMjEwNzMzMzgwOTA4NDMxNDU4Mzg4MzU0ODAgLT4gMAorbXVseDMwMTggbXVsdGlwbHkgMjYyMjczLjAyMjI4NTExODY1MjM2NTA4ODk4OTY0MjhFLTYyNCA3NDE3Ny4yMTA3MzMzODA5MDg0MzE0NTgzODgzNTQ4MCAtPiAxLjk0NTQ2ODEyNDM3MjM5NTM0OTE5MjY2NTAzMTY3NUUtNjE0IEluZXhhY3QgUm91bmRlZAorcG93eDMwMTggcG93ZXIgMjYyMjczLjAyMjI4NTExODY1MjM2NTA4ODk4OTY0MjhFLTYyNCA3NDE3NyAtPiAwRS0xMDAyOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzAxOCByZW1haW5kZXIgMjYyMjczLjAyMjI4NTExODY1MjM2NTA4ODk4OTY0MjhFLTYyNCA3NDE3Ny4yMTA3MzMzODA5MDg0MzE0NTgzODgzNTQ4MCAtPiAyLjYyMjczMDIyMjg1MTE4NjUyMzY1MDg4OTg5NjQyOEUtNjE5CitzdWJ4MzAxOCBzdWJ0cmFjdCAyNjIyNzMuMDIyMjg1MTE4NjUyMzY1MDg4OTg5NjQyOEUtNjI0IDc0MTc3LjIxMDczMzM4MDkwODQzMTQ1ODM4ODM1NDgwIC0+IC03NDE3Ny4yMTA3MzMzODA5MDg0MzE0NTgzODgzNTQ4MCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDE5IGFkZCAtODAzNjA1Mjc0ODgxNTkwMzE3NzYyNDcxNjU4MTczMiAtMDY2Njc3MzU3LjQ0Mzg4MDk1NDg4NTA5NjYxNjc1NzMgLT4gLTgwMzYwNTI3NDg4MTU5MDMxNzc2MjQ3ODMyNTkwODkgSW5leGFjdCBSb3VuZGVkCitjb214MzAxOSBjb21wYXJlIC04MDM2MDUyNzQ4ODE1OTAzMTc3NjI0NzE2NTgxNzMyIC0wNjY2NzczNTcuNDQzODgwOTU0ODg1MDk2NjE2NzU3MyAtPiAtMQorZGl2eDMwMTkgZGl2aWRlIC04MDM2MDUyNzQ4ODE1OTAzMTc3NjI0NzE2NTgxNzMyIC0wNjY2NzczNTcuNDQzODgwOTU0ODg1MDk2NjE2NzU3MyAtPiAxMjA1MjE0NjQyMTAzODczNTE3MzI3MzIuNjI3MTQ2OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDE5IGRpdmlkZWludCAtODAzNjA1Mjc0ODgxNTkwMzE3NzYyNDcxNjU4MTczMiAtMDY2Njc3MzU3LjQ0Mzg4MDk1NDg4NTA5NjYxNjc1NzMgLT4gMTIwNTIxNDY0MjEwMzg3MzUxNzMyNzMyCittdWx4MzAxOSBtdWx0aXBseSAtODAzNjA1Mjc0ODgxNTkwMzE3NzYyNDcxNjU4MTczMiAtMDY2Njc3MzU3LjQ0Mzg4MDk1NDg4NTA5NjYxNjc1NzMgLT4gNS4zNTgyMjc2MTU3MDY4MDA3MTEwMzMyNjIxMjQ1OThFKzM4IEluZXhhY3QgUm91bmRlZAorcG93eDMwMTkgcG93ZXIgLTgwMzYwNTI3NDg4MTU5MDMxNzc2MjQ3MTY1ODE3MzIgLTY2Njc3MzU3IC0+IC0wRS0xMDAyOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzAxOSByZW1haW5kZXIgLTgwMzYwNTI3NDg4MTU5MDMxNzc2MjQ3MTY1ODE3MzIgLTA2NjY3NzM1Ny40NDM4ODA5NTQ4ODUwOTY2MTY3NTczIC0+IC00MTgxNjQ5OS41MDQ4OTkzMDI4Mjg4OTc4OTAwNTY0CitzdWJ4MzAxOSBzdWJ0cmFjdCAtODAzNjA1Mjc0ODgxNTkwMzE3NzYyNDcxNjU4MTczMiAtMDY2Njc3MzU3LjQ0Mzg4MDk1NDg4NTA5NjYxNjc1NzMgLT4gLTgwMzYwNTI3NDg4MTU5MDMxNzc2MjQ2NDk5MDQzNzUgSW5leGFjdCBSb3VuZGVkCithZGR4MzAyMCBhZGQgODgzNDI5LjU5MjgwMzE0OTgxMDM2Mzc3MTM1NzAxNjZFKzc2NSAtNDM5NzguOTcyODM3MTI5MzkxOTgxMTEwNDMwMzI3MjYgLT4gOC44MzQyOTU5MjgwMzE0OTgxMDM2Mzc3MTM1NzAxNjZFKzc3MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDIwIGNvbXBhcmUgODgzNDI5LjU5MjgwMzE0OTgxMDM2Mzc3MTM1NzAxNjZFKzc2NSAtNDM5NzguOTcyODM3MTI5MzkxOTgxMTEwNDMwMzI3MjYgLT4gMQorZGl2eDMwMjAgZGl2aWRlIDg4MzQyOS41OTI4MDMxNDk4MTAzNjM3NzEzNTcwMTY2RSs3NjUgLTQzOTc4Ljk3MjgzNzEyOTM5MTk4MTExMDQzMDMyNzI2IC0+IC0yLjAwODc1NDQ5MjkxMzczOTYzMzIwODY3MjQ1NTAyNUUrNzY2IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMjAgZGl2aWRlaW50IDg4MzQyOS41OTI4MDMxNDk4MTAzNjM3NzEzNTcwMTY2RSs3NjUgLTQzOTc4Ljk3MjgzNzEyOTM5MTk4MTExMDQzMDMyNzI2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzAyMCBtdWx0aXBseSA4ODM0MjkuNTkyODAzMTQ5ODEwMzYzNzcxMzU3MDE2NkUrNzY1IC00Mzk3OC45NzI4MzcxMjkzOTE5ODExMTA0MzAzMjcyNiAtPiAtMy44ODUyMzI2MDY1NDA2MDA0OTAzMjE0MzgxOTE1MTZFKzc3NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDIwIHBvd2VyIDg4MzQyOS41OTI4MDMxNDk4MTAzNjM3NzEzNTcwMTY2RSs3NjUgLTQzOTc5IC0+IDBFLTEwMDI5IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMDIwIHJlbWFpbmRlciA4ODM0MjkuNTkyODAzMTQ5ODEwMzYzNzcxMzU3MDE2NkUrNzY1IC00Mzk3OC45NzI4MzcxMjkzOTE5ODExMTA0MzAzMjcyNiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMwMjAgc3VidHJhY3QgODgzNDI5LjU5MjgwMzE0OTgxMDM2Mzc3MTM1NzAxNjZFKzc2NSAtNDM5NzguOTcyODM3MTI5MzkxOTgxMTEwNDMwMzI3MjYgLT4gOC44MzQyOTU5MjgwMzE0OTgxMDM2Mzc3MTM1NzAxNjZFKzc3MCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDIxIGFkZCAyNDc5MTMwMTA2MC4zNzkzODM2MDU2Nzc3NTUwNjk3MyAtNTYxMzMyNzg2NjQ4MC4zMjI2NDkwODAyMDU4Nzc1NjQgLT4gLTU1ODg1MzY1NjU0MTkuOTQzMjY1NDc0NTI4MTIyNDk0IEluZXhhY3QgUm91bmRlZAorY29teDMwMjEgY29tcGFyZSAyNDc5MTMwMTA2MC4zNzkzODM2MDU2Nzc3NTUwNjk3MyAtNTYxMzMyNzg2NjQ4MC4zMjI2NDkwODAyMDU4Nzc1NjQgLT4gMQorZGl2eDMwMjEgZGl2aWRlIDI0NzkxMzAxMDYwLjM3OTM4MzYwNTY3Nzc1NTA2OTczIC01NjEzMzI3ODY2NDgwLjMyMjY0OTA4MDIwNTg3NzU2NCAtPiAtMC4wMDQ0MTY1MDY4NjU0NTg0MTUyNzUxODIxMjAwMzgzOTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzAyMSBkaXZpZGVpbnQgMjQ3OTEzMDEwNjAuMzc5MzgzNjA1Njc3NzU1MDY5NzMgLTU2MTMzMjc4NjY0ODAuMzIyNjQ5MDgwMjA1ODc3NTY0IC0+IC0wCittdWx4MzAyMSBtdWx0aXBseSAyNDc5MTMwMTA2MC4zNzkzODM2MDU2Nzc3NTUwNjk3MyAtNTYxMzMyNzg2NjQ4MC4zMjI2NDkwODAyMDU4Nzc1NjQgLT4gLTEzOTE2MTcwMTA4ODUzMDc2NTkyNTEyMC44NDA4ODUyIEluZXhhY3QgUm91bmRlZAorcG93eDMwMjEgcG93ZXIgMjQ3OTEzMDEwNjAuMzc5MzgzNjA1Njc3NzU1MDY5NzMgLTYgLT4gNC4zMDcyODk3MTIzNzU2NzMwMjg5OTYxMjYyNDk2NTZFLTYzIEluZXhhY3QgUm91bmRlZAorcmVteDMwMjEgcmVtYWluZGVyIDI0NzkxMzAxMDYwLjM3OTM4MzYwNTY3Nzc1NTA2OTczIC01NjEzMzI3ODY2NDgwLjMyMjY0OTA4MDIwNTg3NzU2NCAtPiAyNDc5MTMwMTA2MC4zNzkzODM2MDU2Nzc3NTUwNjk3Mworc3VieDMwMjEgc3VidHJhY3QgMjQ3OTEzMDEwNjAuMzc5MzgzNjA1Njc3NzU1MDY5NzMgLTU2MTMzMjc4NjY0ODAuMzIyNjQ5MDgwMjA1ODc3NTY0IC0+IDU2MzgxMTkxNjc1NDAuNzAyMDMyNjg1ODgzNjMyNjM0IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMjIgYWRkIC05MzA3MTE0NDMuOTQ3NDc4MTU4NjE2MjkxMDc3NjEzOSAtNzQwLjM4NjA5NzkyOTI3NzU0NzI2MjI3OTgzNDgwMzAgLT4gLTkzMDcxMjE4NC4zMzM1NzYwODc4OTM4MzgzMzk4OTM3IEluZXhhY3QgUm91bmRlZAorY29teDMwMjIgY29tcGFyZSAtOTMwNzExNDQzLjk0NzQ3ODE1ODYxNjI5MTA3NzYxMzkgLTc0MC4zODYwOTc5MjkyNzc1NDcyNjIyNzk4MzQ4MDMwIC0+IC0xCitkaXZ4MzAyMiBkaXZpZGUgLTkzMDcxMTQ0My45NDc0NzgxNTg2MTYyOTEwNzc2MTM5IC03NDAuMzg2MDk3OTI5Mjc3NTQ3MjYyMjc5ODM0ODAzMCAtPiAxMjU3MDYyLjI5MDI3MDU4MzUwNzEzMTYwMjk1ODc5OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDIyIGRpdmlkZWludCAtOTMwNzExNDQzLjk0NzQ3ODE1ODYxNjI5MTA3NzYxMzkgLTc0MC4zODYwOTc5MjkyNzc1NDcyNjIyNzk4MzQ4MDMwIC0+IDEyNTcwNjIKK211bHgzMDIyIG11bHRpcGx5IC05MzA3MTE0NDMuOTQ3NDc4MTU4NjE2MjkxMDc3NjEzOSAtNzQwLjM4NjA5NzkyOTI3NzU0NzI2MjI3OTgzNDgwMzAgLT4gNjg5MDg1ODE0MjgyLjM5Njg3NDY5MTExMDAxNTQxMzMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAyMiBwb3dlciAtOTMwNzExNDQzLjk0NzQ3ODE1ODYxNjI5MTA3NzYxMzkgLTc0MCAtPiAxLjE5MzYwMzM5NDE2NTA1MTg5OTk5NzIyNjk5NTE3OEUtNjYzNyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDIyIHJlbWFpbmRlciAtOTMwNzExNDQzLjk0NzQ3ODE1ODYxNjI5MTA3NzYxMzkgLTc0MC4zODYwOTc5MjkyNzc1NDcyNjIyNzk4MzQ4MDMwIC0+IC0yMTQuOTEyMzA0NjY2NDk5Njc1MDYzOTE2NzcxMjE0MAorc3VieDMwMjIgc3VidHJhY3QgLTkzMDcxMTQ0My45NDc0NzgxNTg2MTYyOTEwNzc2MTM5IC03NDAuMzg2MDk3OTI5Mjc3NTQ3MjYyMjc5ODM0ODAzMCAtPiAtOTMwNzEwNzAzLjU2MTM4MDIyOTMzODc0MzgxNTMzNDEgSW5leGFjdCBSb3VuZGVkCithZGR4MzAyMyBhZGQgMjM1ODI3NjQyODc2NS4wNjQxOTEwODI3NzMzODU1MzkgMjE0LjM1ODk3OTYwODIzMjg2NjU4Nzg2MDIzMDQ0NjkgLT4gMjM1ODI3NjQyODk3OS40MjMxNzA2OTEwMDYyNTIxMjcgSW5leGFjdCBSb3VuZGVkCitjb214MzAyMyBjb21wYXJlIDIzNTgyNzY0Mjg3NjUuMDY0MTkxMDgyNzczMzg1NTM5IDIxNC4zNTg5Nzk2MDgyMzI4NjY1ODc4NjAyMzA0NDY5IC0+IDEKK2RpdngzMDIzIGRpdmlkZSAyMzU4Mjc2NDI4NzY1LjA2NDE5MTA4Mjc3MzM4NTUzOSAyMTQuMzU4OTc5NjA4MjMyODY2NTg3ODYwMjMwNDQ2OSAtPiAxMTAwMTUyODUyNS4wNzA4OTUwMjE1MjczNjQ4OTQ3MyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDIzIGRpdmlkZWludCAyMzU4Mjc2NDI4NzY1LjA2NDE5MTA4Mjc3MzM4NTUzOSAyMTQuMzU4OTc5NjA4MjMyODY2NTg3ODYwMjMwNDQ2OSAtPiAxMTAwMTUyODUyNQorbXVseDMwMjMgbXVsdGlwbHkgMjM1ODI3NjQyODc2NS4wNjQxOTEwODI3NzMzODU1MzkgMjE0LjM1ODk3OTYwODIzMjg2NjU4Nzg2MDIzMDQ0NjkgLT4gNTA1NTE3NzI4OTA0MjI2LjYyMzM0NDMyMDk2NTkwMDEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAyMyBwb3dlciAyMzU4Mjc2NDI4NzY1LjA2NDE5MTA4Mjc3MzM4NTUzOSAyMTQgLT4gNS40MzU4NTY0ODA3ODI4NTAwODA3NDEyNzY5MzkyNTZFKzI2NDcgSW5leGFjdCBSb3VuZGVkCityZW14MzAyMyByZW1haW5kZXIgMjM1ODI3NjQyODc2NS4wNjQxOTEwODI3NzMzODU1MzkgMjE0LjM1ODk3OTYwODIzMjg2NjU4Nzg2MDIzMDQ0NjkgLT4gMTUuMTk2OTg0NDczOTA5NjQxNTY0MzU2MTUyMTc3NQorc3VieDMwMjMgc3VidHJhY3QgMjM1ODI3NjQyODc2NS4wNjQxOTEwODI3NzMzODU1MzkgMjE0LjM1ODk3OTYwODIzMjg2NjU4Nzg2MDIzMDQ0NjkgLT4gMjM1ODI3NjQyODU1MC43MDUyMTE0NzQ1NDA1MTg5NTEgSW5leGFjdCBSb3VuZGVkCithZGR4MzAyNCBhZGQgLTMuODY4NzQ0NDQ5Nzk1NjUzNjUxNjM4MzA4OTI2OTg3RSs3NTAgODI3MC40NzI0OTI5NjU1NTk4NzIzODQwMTgzMjk0MTggLT4gLTMuODY4NzQ0NDQ5Nzk1NjUzNjUxNjM4MzA4OTI2OTg3RSs3NTAgSW5leGFjdCBSb3VuZGVkCitjb214MzAyNCBjb21wYXJlIC0zLjg2ODc0NDQ0OTc5NTY1MzY1MTYzODMwODkyNjk4N0UrNzUwIDgyNzAuNDcyNDkyOTY1NTU5ODcyMzg0MDE4MzI5NDE4IC0+IC0xCitkaXZ4MzAyNCBkaXZpZGUgLTMuODY4NzQ0NDQ5Nzk1NjUzNjUxNjM4MzA4OTI2OTg3RSs3NTAgODI3MC40NzI0OTI5NjU1NTk4NzIzODQwMTgzMjk0MTggLT4gLTQuNjc3Nzc5MjM1ODEyOTU5MjMzMDkyNzM5NDMzNDUzRSs3NDYgSW5leGFjdCBSb3VuZGVkCitkdml4MzAyNCBkaXZpZGVpbnQgLTMuODY4NzQ0NDQ5Nzk1NjUzNjUxNjM4MzA4OTI2OTg3RSs3NTAgODI3MC40NzI0OTI5NjU1NTk4NzIzODQwMTgzMjk0MTggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDI0IG11bHRpcGx5IC0zLjg2ODc0NDQ0OTc5NTY1MzY1MTYzODMwODkyNjk4N0UrNzUwIDgyNzAuNDcyNDkyOTY1NTU5ODcyMzg0MDE4MzI5NDE4IC0+IC0zLjE5OTYzNDQ1NTQzNDgxMzI5NDQyNjUwNTUyNjA2M0UrNzU0IEluZXhhY3QgUm91bmRlZAorcG93eDMwMjQgcG93ZXIgLTMuODY4NzQ0NDQ5Nzk1NjUzNjUxNjM4MzA4OTI2OTg3RSs3NTAgODI3MCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDI0IHJlbWFpbmRlciAtMy44Njg3NDQ0NDk3OTU2NTM2NTE2MzgzMDg5MjY5ODdFKzc1MCA4MjcwLjQ3MjQ5Mjk2NTU1OTg3MjM4NDAxODMyOTQxOCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMwMjQgc3VidHJhY3QgLTMuODY4NzQ0NDQ5Nzk1NjUzNjUxNjM4MzA4OTI2OTg3RSs3NTAgODI3MC40NzI0OTI5NjU1NTk4NzIzODQwMTgzMjk0MTggLT4gLTMuODY4NzQ0NDQ5Nzk1NjUzNjUxNjM4MzA4OTI2OTg3RSs3NTAgSW5leGFjdCBSb3VuZGVkCithZGR4MzAyNSBhZGQgMTQwNDIyMDY5LjU4NjMyNDY0OTAxODAyMDY4MTQzNzRFLTQ0NyAtNTY3MTk1NjUyNTg2LjI0NTQyMTcwNjkwMDMxODY0ODcgLT4gLTU2NzE5NTY1MjU4Ni4yNDU0MjE3MDY5MDAzMTg2NDg3IEluZXhhY3QgUm91bmRlZAorY29teDMwMjUgY29tcGFyZSAxNDA0MjIwNjkuNTg2MzI0NjQ5MDE4MDIwNjgxNDM3NEUtNDQ3IC01NjcxOTU2NTI1ODYuMjQ1NDIxNzA2OTAwMzE4NjQ4NyAtPiAxCitkaXZ4MzAyNSBkaXZpZGUgMTQwNDIyMDY5LjU4NjMyNDY0OTAxODAyMDY4MTQzNzRFLTQ0NyAtNTY3MTk1NjUyNTg2LjI0NTQyMTcwNjkwMDMxODY0ODcgLT4gLTIuNDc1NzI1NDIxMTMxODY2ODUxMTkwNjQwMjAzNjMzRS00NTEgSW5leGFjdCBSb3VuZGVkCitkdml4MzAyNSBkaXZpZGVpbnQgMTQwNDIyMDY5LjU4NjMyNDY0OTAxODAyMDY4MTQzNzRFLTQ0NyAtNTY3MTk1NjUyNTg2LjI0NTQyMTcwNjkwMDMxODY0ODcgLT4gLTAKK211bHgzMDI1IG11bHRpcGx5IDE0MDQyMjA2OS41ODYzMjQ2NDkwMTgwMjA2ODE0Mzc0RS00NDcgLTU2NzE5NTY1MjU4Ni4yNDU0MjE3MDY5MDAzMTg2NDg3IC0+IC03Ljk2NDY3ODczOTY1MjY1NzQ5ODUwMzc5OTU1OTk1MEUtNDI4IEluZXhhY3QgUm91bmRlZAorcG93eDMwMjUgcG93ZXIgMTQwNDIyMDY5LjU4NjMyNDY0OTAxODAyMDY4MTQzNzRFLTQ0NyAtNiAtPiAxLjMwNDMzMDg5OTczMTk4ODM5NTQ3MzU3ODQyNTg1NEUrMjYzMyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDI1IHJlbWFpbmRlciAxNDA0MjIwNjkuNTg2MzI0NjQ5MDE4MDIwNjgxNDM3NEUtNDQ3IC01NjcxOTU2NTI1ODYuMjQ1NDIxNzA2OTAwMzE4NjQ4NyAtPiAxLjQwNDIyMDY5NTg2MzI0NjQ5MDE4MDIwNjgxNDM3NEUtNDM5CitzdWJ4MzAyNSBzdWJ0cmFjdCAxNDA0MjIwNjkuNTg2MzI0NjQ5MDE4MDIwNjgxNDM3NEUtNDQ3IC01NjcxOTU2NTI1ODYuMjQ1NDIxNzA2OTAwMzE4NjQ4NyAtPiA1NjcxOTU2NTI1ODYuMjQ1NDIxNzA2OTAwMzE4NjQ4NyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDI2IGFkZCA3NTkyOTA5NjQ3NS42MzQ1MDQyNTMzOTQ3MjU1OTY0NkUrMTUzIC0wOTQ1MjYwMTkzLjUwMzgwMzUxOTU3MjYwNDE1MTI5MEUrNDU5IC0+IC05LjQ1MjYwMTkzNTAzODAzNTE5NTcyNjA0MTUxMjkwMEUrNDY3IEluZXhhY3QgUm91bmRlZAorY29teDMwMjYgY29tcGFyZSA3NTkyOTA5NjQ3NS42MzQ1MDQyNTMzOTQ3MjU1OTY0NkUrMTUzIC0wOTQ1MjYwMTkzLjUwMzgwMzUxOTU3MjYwNDE1MTI5MEUrNDU5IC0+IDEKK2RpdngzMDI2IGRpdmlkZSA3NTkyOTA5NjQ3NS42MzQ1MDQyNTMzOTQ3MjU1OTY0NkUrMTUzIC0wOTQ1MjYwMTkzLjUwMzgwMzUxOTU3MjYwNDE1MTI5MEUrNDU5IC0+IC04LjAzMjYxMzM0Nzg4NTQ2NTgwNTYxMzI2NTYwNDk3M0UtMzA1IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMjYgZGl2aWRlaW50IDc1OTI5MDk2NDc1LjYzNDUwNDI1MzM5NDcyNTU5NjQ2RSsxNTMgLTA5NDUyNjAxOTMuNTAzODAzNTE5NTcyNjA0MTUxMjkwRSs0NTkgLT4gLTAKK211bHgzMDI2IG11bHRpcGx5IDc1OTI5MDk2NDc1LjYzNDUwNDI1MzM5NDcyNTU5NjQ2RSsxNTMgLTA5NDUyNjAxOTMuNTAzODAzNTE5NTcyNjA0MTUxMjkwRSs0NTkgLT4gLTcuMTc3Mjc1MjQyNzEyNzIzNzMzMDQxNTY5NjA2ODgyRSs2MzEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAyNiBwb3dlciA3NTkyOTA5NjQ3NS42MzQ1MDQyNTMzOTQ3MjU1OTY0NkUrMTUzIC05IC0+IDEuMTkyMTM2Mjk5NjU3MTc3MzI0MDUxNDc3Mzc1NTYxRS0xNDc1IEluZXhhY3QgUm91bmRlZAorcmVteDMwMjYgcmVtYWluZGVyIDc1OTI5MDk2NDc1LjYzNDUwNDI1MzM5NDcyNTU5NjQ2RSsxNTMgLTA5NDUyNjAxOTMuNTAzODAzNTE5NTcyNjA0MTUxMjkwRSs0NTkgLT4gNy41OTI5MDk2NDc1NjM0NTA0MjUzMzk0NzI1NTk2NDZFKzE2Mworc3VieDMwMjYgc3VidHJhY3QgNzU5MjkwOTY0NzUuNjM0NTA0MjUzMzk0NzI1NTk2NDZFKzE1MyAtMDk0NTI2MDE5My41MDM4MDM1MTk1NzI2MDQxNTEyOTBFKzQ1OSAtPiA5LjQ1MjYwMTkzNTAzODAzNTE5NTcyNjA0MTUxMjkwMEUrNDY3IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMjcgYWRkIDYzMTIzMTgzMDkuMTQyMDQ0OTUzMzU3NDYwNDYzNzMyIC01NjQxMzE3ODIzLjIwMjI3NDA4Mzk4MjQ4NzU1ODUxNEUrNjI4IC0+IC01LjY0MTMxNzgyMzIwMjI3NDA4Mzk4MjQ4NzU1ODUxNEUrNjM3IEluZXhhY3QgUm91bmRlZAorY29teDMwMjcgY29tcGFyZSA2MzEyMzE4MzA5LjE0MjA0NDk1MzM1NzQ2MDQ2MzczMiAtNTY0MTMxNzgyMy4yMDIyNzQwODM5ODI0ODc1NTg1MTRFKzYyOCAtPiAxCitkaXZ4MzAyNyBkaXZpZGUgNjMxMjMxODMwOS4xNDIwNDQ5NTMzNTc0NjA0NjM3MzIgLTU2NDEzMTc4MjMuMjAyMjc0MDgzOTgyNDg3NTU4NTE0RSs2MjggLT4gLTEuMTE4OTQzOTI1MzMyNDgxOTQ0NzY1ODA5NjgyNTAyRS02MjggSW5leGFjdCBSb3VuZGVkCitkdml4MzAyNyBkaXZpZGVpbnQgNjMxMjMxODMwOS4xNDIwNDQ5NTMzNTc0NjA0NjM3MzIgLTU2NDEzMTc4MjMuMjAyMjc0MDgzOTgyNDg3NTU4NTE0RSs2MjggLT4gLTAKK211bHgzMDI3IG11bHRpcGx5IDYzMTIzMTgzMDkuMTQyMDQ0OTUzMzU3NDYwNDYzNzMyIC01NjQxMzE3ODIzLjIwMjI3NDA4Mzk4MjQ4NzU1ODUxNEUrNjI4IC0+IC0zLjU2MDk3OTM3ODMwODkwNjA0Mzc4MzAyMzcyNjc4N0UrNjQ3IEluZXhhY3QgUm91bmRlZAorcG93eDMwMjcgcG93ZXIgNjMxMjMxODMwOS4xNDIwNDQ5NTMzNTc0NjA0NjM3MzIgLTYgLT4gMS41ODA3NjI2MTE1MTI3ODc3MjAwNzY1MzM3NDcyNjVFLTU5IEluZXhhY3QgUm91bmRlZAorcmVteDMwMjcgcmVtYWluZGVyIDYzMTIzMTgzMDkuMTQyMDQ0OTUzMzU3NDYwNDYzNzMyIC01NjQxMzE3ODIzLjIwMjI3NDA4Mzk4MjQ4NzU1ODUxNEUrNjI4IC0+IDYzMTIzMTgzMDkuMTQyMDQ0OTUzMzU3NDYwNDYzNzMyCitzdWJ4MzAyNyBzdWJ0cmFjdCA2MzEyMzE4MzA5LjE0MjA0NDk1MzM1NzQ2MDQ2MzczMiAtNTY0MTMxNzgyMy4yMDIyNzQwODM5ODI0ODc1NTg1MTRFKzYyOCAtPiA1LjY0MTMxNzgyMzIwMjI3NDA4Mzk4MjQ4NzU1ODUxNEUrNjM3IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMjggYWRkIDkzNzkzNjUyNDI4MTAwLjUyMTA1OTI4MjM5NDY5OTM3IDkxNy4yNTcxMzEzMTA5NzMwNDMzMzY5NTk0OTM2NDE2RS03MTIgLT4gOTM3OTM2NTI0MjgxMDAuNTIxMDU5MjgyMzk0Njk5MzcgSW5leGFjdCBSb3VuZGVkCitjb214MzAyOCBjb21wYXJlIDkzNzkzNjUyNDI4MTAwLjUyMTA1OTI4MjM5NDY5OTM3IDkxNy4yNTcxMzEzMTA5NzMwNDMzMzY5NTk0OTM2NDE2RS03MTIgLT4gMQorZGl2eDMwMjggZGl2aWRlIDkzNzkzNjUyNDI4MTAwLjUyMTA1OTI4MjM5NDY5OTM3IDkxNy4yNTcxMzEzMTA5NzMwNDMzMzY5NTk0OTM2NDE2RS03MTIgLT4gMS4wMjI1NDQ4MTU2OTQ2NzQ5NzI1NTk5MjQ5OTcyNTZFKzcyMyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDI4IGRpdmlkZWludCA5Mzc5MzY1MjQyODEwMC41MjEwNTkyODIzOTQ2OTkzNyA5MTcuMjU3MTMxMzEwOTczMDQzMzM2OTU5NDkzNjQxNkUtNzEyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzAyOCBtdWx0aXBseSA5Mzc5MzY1MjQyODEwMC41MjEwNTkyODIzOTQ2OTkzNyA5MTcuMjU3MTMxMzEwOTczMDQzMzM2OTU5NDkzNjQxNkUtNzEyIC0+IDguNjAzMjg5NjU2MTM3Nzk2NTI2NzY5Nzg2OTY1MzQxRS02OTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAyOCBwb3dlciA5Mzc5MzY1MjQyODEwMC41MjEwNTkyODIzOTQ2OTkzNyA5IC0+IDUuNjE3NzMyMjA2NjYzMTM2NjU0MTg3MjYzOTY0MzY1RSsxMjUgSW5leGFjdCBSb3VuZGVkCityZW14MzAyOCByZW1haW5kZXIgOTM3OTM2NTI0MjgxMDAuNTIxMDU5MjgyMzk0Njk5MzcgOTE3LjI1NzEzMTMxMDk3MzA0MzMzNjk1OTQ5MzY0MTZFLTcxMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMwMjggc3VidHJhY3QgOTM3OTM2NTI0MjgxMDAuNTIxMDU5MjgyMzk0Njk5MzcgOTE3LjI1NzEzMTMxMDk3MzA0MzMzNjk1OTQ5MzY0MTZFLTcxMiAtPiA5Mzc5MzY1MjQyODEwMC41MjEwNTkyODIzOTQ2OTkzNyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDI5IGFkZCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTUgSW5leGFjdCBSb3VuZGVkCitjb214MzAyOSBjb21wYXJlIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiAxCitkaXZ4MzAyOSBkaXZpZGUgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IC00MTAzOTY4LjEwNjMzNjcxMDEyNjI0MTI2NjY4NTQzNCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDI5IGRpdmlkZWludCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gLTQxMDM5NjgKK211bHgzMDI5IG11bHRpcGx5IDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiAtMjM2MjczMjAyMzIzNTExMi4zNzU5NjA1MjgzMDQ5NzQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAyOSBwb3dlciA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQgLT4gMEUtMTAwMjkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMwMjkgcmVtYWluZGVyIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiAyNTUxLjQ1ODI0MzE2MTI1NTg4NDkzMjQ5MjQ2Nzg0CitzdWJ4MzAyOSBzdWJ0cmFjdCA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzEyMjIxNTQuNzA4Mzc4MTE1MTg0MDk0MzUwMDUgSW5leGFjdCBSb3VuZGVkCithZGR4MzAzMCBhZGQgMzI5MzI2NTUyLjAyMDgzOTgwMDIyNTA4MzY1OTIwNDMgLTAyNDUxLjEwMDY1Mzk3MDEwNTkxNTQ2MDQxMDM0MDQxIC0+IDMyOTMyNDEwMC45MjAxODU4MzAxMTkxNjgxOTg3OTQwIEluZXhhY3QgUm91bmRlZAorY29teDMwMzAgY29tcGFyZSAzMjkzMjY1NTIuMDIwODM5ODAwMjI1MDgzNjU5MjA0MyAtMDI0NTEuMTAwNjUzOTcwMTA1OTE1NDYwNDEwMzQwNDEgLT4gMQorZGl2eDMwMzAgZGl2aWRlIDMyOTMyNjU1Mi4wMjA4Mzk4MDAyMjUwODM2NTkyMDQzIC0wMjQ1MS4xMDA2NTM5NzAxMDU5MTU0NjA0MTAzNDA0MSAtPiAtMTM0MzU4LjY0MDY3MzI5MTcxNzM3MzkxODc0MjE5NzggSW5leGFjdCBSb3VuZGVkCitkdml4MzAzMCBkaXZpZGVpbnQgMzI5MzI2NTUyLjAyMDgzOTgwMDIyNTA4MzY1OTIwNDMgLTAyNDUxLjEwMDY1Mzk3MDEwNTkxNTQ2MDQxMDM0MDQxIC0+IC0xMzQzNTgKK211bHgzMDMwIG11bHRpcGx5IDMyOTMyNjU1Mi4wMjA4Mzk4MDAyMjUwODM2NTkyMDQzIC0wMjQ1MS4xMDA2NTM5NzAxMDU5MTU0NjA0MTAzNDA0MSAtPiAtODA3MjEyNTI3MDI4LjAwMDU0MDE3MzY4OTM0NzQ0MzAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAzMCBwb3dlciAzMjkzMjY1NTIuMDIwODM5ODAwMjI1MDgzNjU5MjA0MyAtMjQ1MSAtPiAwRS0xMDAyOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzAzMCByZW1haW5kZXIgMzI5MzI2NTUyLjAyMDgzOTgwMDIyNTA4MzY1OTIwNDMgLTAyNDUxLjEwMDY1Mzk3MDEwNTkxNTQ2MDQxMDM0MDQxIC0+IDE1NzAuMzU0NzI0MzA5NjM1NjUzODQ2Njg3NDkzMjIKK3N1YngzMDMwIHN1YnRyYWN0IDMyOTMyNjU1Mi4wMjA4Mzk4MDAyMjUwODM2NTkyMDQzIC0wMjQ1MS4xMDA2NTM5NzAxMDU5MTU0NjA0MTAzNDA0MSAtPiAzMjkzMjkwMDMuMTIxNDkzNzcwMzMwOTk5MTE5NjE0NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDMxIGFkZCAtOTI5ODAuNjg0MzEzNzEwOTAzNTQ0MzU3NjMyMTg0MzkgLTIyODIxNzg1MDcwNDYwMTk3MjE5MjU4MDA5OTcwNjUgLT4gLTIyODIxNzg1MDcwNDYwMTk3MjE5MjU4MDEwOTAwNDYgSW5leGFjdCBSb3VuZGVkCitjb214MzAzMSBjb21wYXJlIC05Mjk4MC42ODQzMTM3MTA5MDM1NDQzNTc2MzIxODQzOSAtMjI4MjE3ODUwNzA0NjAxOTcyMTkyNTgwMDk5NzA2NSAtPiAxCitkaXZ4MzAzMSBkaXZpZGUgLTkyOTgwLjY4NDMxMzcxMDkwMzU0NDM1NzYzMjE4NDM5IC0yMjgyMTc4NTA3MDQ2MDE5NzIxOTI1ODAwOTk3MDY1IC0+IDQuMDc0MjA3MzQyOTY4MTk2ODYzMDcwNDk2OTk0NDU3RS0yNiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDMxIGRpdmlkZWludCAtOTI5ODAuNjg0MzEzNzEwOTAzNTQ0MzU3NjMyMTg0MzkgLTIyODIxNzg1MDcwNDYwMTk3MjE5MjU4MDA5OTcwNjUgLT4gMAorbXVseDMwMzEgbXVsdGlwbHkgLTkyOTgwLjY4NDMxMzcxMDkwMzU0NDM1NzYzMjE4NDM5IC0yMjgyMTc4NTA3MDQ2MDE5NzIxOTI1ODAwOTk3MDY1IC0+IDIuMTIxOTg1MTkzMTExODIwMTQ3MTcwNzA3NzE3OTM4RSszNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDMxIHBvd2VyIC05Mjk4MC42ODQzMTM3MTA5MDM1NDQzNTc2MzIxODQzOSAtMiAtPiAxLjE1NjY4MzQ1NTM3MTkwOTc5Mzg3MDIwNzE4NDMzN0UtMTAgSW5leGFjdCBSb3VuZGVkCityZW14MzAzMSByZW1haW5kZXIgLTkyOTgwLjY4NDMxMzcxMDkwMzU0NDM1NzYzMjE4NDM5IC0yMjgyMTc4NTA3MDQ2MDE5NzIxOTI1ODAwOTk3MDY1IC0+IC05Mjk4MC42ODQzMTM3MTA5MDM1NDQzNTc2MzIxODQzOQorc3VieDMwMzEgc3VidHJhY3QgLTkyOTgwLjY4NDMxMzcxMDkwMzU0NDM1NzYzMjE4NDM5IC0yMjgyMTc4NTA3MDQ2MDE5NzIxOTI1ODAwOTk3MDY1IC0+IDIyODIxNzg1MDcwNDYwMTk3MjE5MjU4MDA5MDQwODQgSW5leGFjdCBSb3VuZGVkCithZGR4MzAzMiBhZGQgMTIxMzU4MTc3NjIuMjc4NTg2MDYyNTk4MjIyNTY5ODdFKzczOCA5OC4zNTY0OTE2Nzg3MjM1NjEzMjI0OTU2MTAyMTkxMEUtOTAyIC0+IDEuMjEzNTgxNzc2MjI3ODU4NjA2MjU5ODIyMjU2OTg3RSs3NDggSW5leGFjdCBSb3VuZGVkCitjb214MzAzMiBjb21wYXJlIDEyMTM1ODE3NzYyLjI3ODU4NjA2MjU5ODIyMjU2OTg3RSs3MzggOTguMzU2NDkxNjc4NzIzNTYxMzIyNDk1NjEwMjE5MTBFLTkwMiAtPiAxCitkaXZ4MzAzMiBkaXZpZGUgMTIxMzU4MTc3NjIuMjc4NTg2MDYyNTk4MjIyNTY5ODdFKzczOCA5OC4zNTY0OTE2Nzg3MjM1NjEzMjI0OTU2MTAyMTkxMEUtOTAyIC0+IDEuMjMzODYwMzc0MTQ5OTQ1NTYxODg2OTU1Mzk4NzI0RSsxNjQ4IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMzIgZGl2aWRlaW50IDEyMTM1ODE3NzYyLjI3ODU4NjA2MjU5ODIyMjU2OTg3RSs3MzggOTguMzU2NDkxNjc4NzIzNTYxMzIyNDk1NjEwMjE5MTBFLTkwMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwMzIgbXVsdGlwbHkgMTIxMzU4MTc3NjIuMjc4NTg2MDYyNTk4MjIyNTY5ODdFKzczOCA5OC4zNTY0OTE2Nzg3MjM1NjEzMjI0OTU2MTAyMTkxMEUtOTAyIC0+IDEuMTkzNjM2NDU4NzUwMDU5MzQwNzMzMTg4ODc2MDE1RS0xNTIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAzMiBwb3dlciAxMjEzNTgxNzc2Mi4yNzg1ODYwNjI1OTgyMjI1Njk4N0UrNzM4IDEwIC0+IDYuOTI5MzE3NTIwNTc3NDM3NzIwNDU3NTE3NDk5OTM2RSs3NDgwIEluZXhhY3QgUm91bmRlZAorcmVteDMwMzIgcmVtYWluZGVyIDEyMTM1ODE3NzYyLjI3ODU4NjA2MjU5ODIyMjU2OTg3RSs3MzggOTguMzU2NDkxNjc4NzIzNTYxMzIyNDk1NjEwMjE5MTBFLTkwMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMwMzIgc3VidHJhY3QgMTIxMzU4MTc3NjIuMjc4NTg2MDYyNTk4MjIyNTY5ODdFKzczOCA5OC4zNTY0OTE2Nzg3MjM1NjEzMjI0OTU2MTAyMTkxMEUtOTAyIC0+IDEuMjEzNTgxNzc2MjI3ODU4NjA2MjU5ODIyMjU2OTg3RSs3NDggSW5leGFjdCBSb3VuZGVkCithZGR4MzAzMyBhZGQgMzcuMjc0NTc1Nzg3OTM1MjExNjY4MDk3MzkxNDAwODEgLTM5MjU1MC40NzkwMDk1MDM1OTc5OTk4MzU1NTY5OTE2IC0+IC0zOTI1MTMuMjA0NDMzNzE1NjYyNzg4MTY3NDU5NjAwMiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDMzIGNvbXBhcmUgMzcuMjc0NTc1Nzg3OTM1MjExNjY4MDk3MzkxNDAwODEgLTM5MjU1MC40NzkwMDk1MDM1OTc5OTk4MzU1NTY5OTE2IC0+IDEKK2RpdngzMDMzIGRpdmlkZSAzNy4yNzQ1NzU3ODc5MzUyMTE2NjgwOTczOTE0MDA4MSAtMzkyNTUwLjQ3OTAwOTUwMzU5Nzk5OTgzNTU1Njk5MTYgLT4gLTAuMDAwMDk0OTU0ODYwMDI3MTQyNjQ2NDExNzcyMTEwNjIxOTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzAzMyBkaXZpZGVpbnQgMzcuMjc0NTc1Nzg3OTM1MjExNjY4MDk3MzkxNDAwODEgLTM5MjU1MC40NzkwMDk1MDM1OTc5OTk4MzU1NTY5OTE2IC0+IC0wCittdWx4MzAzMyBtdWx0aXBseSAzNy4yNzQ1NzU3ODc5MzUyMTE2NjgwOTczOTE0MDA4MSAtMzkyNTUwLjQ3OTAwOTUwMzU5Nzk5OTgzNTU1Njk5MTYgLT4gLTE0NjMyMTUyLjU4MDQzMDAxMjM0NTE4MDk1OTk3MTQwIEluZXhhY3QgUm91bmRlZAorcG93eDMwMzMgcG93ZXIgMzcuMjc0NTc1Nzg3OTM1MjExNjY4MDk3MzkxNDAwODEgLTM5MjU1MCAtPiAwRS0xMDAyOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzAzMyByZW1haW5kZXIgMzcuMjc0NTc1Nzg3OTM1MjExNjY4MDk3MzkxNDAwODEgLTM5MjU1MC40NzkwMDk1MDM1OTc5OTk4MzU1NTY5OTE2IC0+IDM3LjI3NDU3NTc4NzkzNTIxMTY2ODA5NzM5MTQwMDgxCitzdWJ4MzAzMyBzdWJ0cmFjdCAzNy4yNzQ1NzU3ODc5MzUyMTE2NjgwOTczOTE0MDA4MSAtMzkyNTUwLjQ3OTAwOTUwMzU5Nzk5OTgzNTU1Njk5MTYgLT4gMzkyNTg3Ljc1MzU4NTI5MTUzMzIxMTUwMzY1NDM4MzAgSW5leGFjdCBSb3VuZGVkCithZGR4MzAzNCBhZGQgLTI3ODcuOTgwNTkwMzA0MTk5ODc4NzU1MjY1MjczNzAzIDcxMTc2MzExNzkzMDUzMTkyMDgyMTAzODc1NjUzMjQgLT4gNzExNzYzMTE3OTMwNTMxOTIwODIxMDM4NzU2MjUzNiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDM0IGNvbXBhcmUgLTI3ODcuOTgwNTkwMzA0MTk5ODc4NzU1MjY1MjczNzAzIDcxMTc2MzExNzkzMDUzMTkyMDgyMTAzODc1NjUzMjQgLT4gLTEKK2RpdngzMDM0IGRpdmlkZSAtMjc4Ny45ODA1OTAzMDQxOTk4Nzg3NTUyNjUyNzM3MDMgNzExNzYzMTE3OTMwNTMxOTIwODIxMDM4NzU2NTMyNCAtPiAtMy45MTcwMDYyNjI0MzUwNjMwOTM0NzUxNDAyNTA4NzBFLTI4IEluZXhhY3QgUm91bmRlZAorZHZpeDMwMzQgZGl2aWRlaW50IC0yNzg3Ljk4MDU5MDMwNDE5OTg3ODc1NTI2NTI3MzcwMyA3MTE3NjMxMTc5MzA1MzE5MjA4MjEwMzg3NTY1MzI0IC0+IC0wCittdWx4MzAzNCBtdWx0aXBseSAtMjc4Ny45ODA1OTAzMDQxOTk4Nzg3NTUyNjUyNzM3MDMgNzExNzYzMTE3OTMwNTMxOTIwODIxMDM4NzU2NTMyNCAtPiAtMS45ODQzODE3NTc2ODQ3MjIyMTc4MDE0MTAzMDU3MTRFKzM0IEluZXhhY3QgUm91bmRlZAorcG93eDMwMzQgcG93ZXIgLTI3ODcuOTgwNTkwMzA0MTk5ODc4NzU1MjY1MjczNzAzIDcgLT4gLTEzMDkyNjY5OTkyMzMwOTkyMjAxMjcxMzkuNDQwMDgyIEluZXhhY3QgUm91bmRlZAorcmVteDMwMzQgcmVtYWluZGVyIC0yNzg3Ljk4MDU5MDMwNDE5OTg3ODc1NTI2NTI3MzcwMyA3MTE3NjMxMTc5MzA1MzE5MjA4MjEwMzg3NTY1MzI0IC0+IC0yNzg3Ljk4MDU5MDMwNDE5OTg3ODc1NTI2NTI3MzcwMworc3VieDMwMzQgc3VidHJhY3QgLTI3ODcuOTgwNTkwMzA0MTk5ODc4NzU1MjY1MjczNzAzIDcxMTc2MzExNzkzMDUzMTkyMDgyMTAzODc1NjUzMjQgLT4gLTcxMTc2MzExNzkzMDUzMTkyMDgyMTAzODc1NjgxMTIgSW5leGFjdCBSb3VuZGVkCithZGR4MzAzNSBhZGQgLTk4OTA2MzMuODU0NjA5NDM0OTQzNTU5ODMxOTExMjc2RSs5NzEgLTE5Mzk5ODU3MjkuNDM2ODI3Nzc3MDU1Njk5MzYxMjM3IC0+IC05Ljg5MDYzMzg1NDYwOTQzNDk0MzU1OTgzMTkxMTI3NkUrOTc3IEluZXhhY3QgUm91bmRlZAorY29teDMwMzUgY29tcGFyZSAtOTg5MDYzMy44NTQ2MDk0MzQ5NDM1NTk4MzE5MTEyNzZFKzk3MSAtMTkzOTk4NTcyOS40MzY4Mjc3NzcwNTU2OTkzNjEyMzcgLT4gLTEKK2RpdngzMDM1IGRpdmlkZSAtOTg5MDYzMy44NTQ2MDk0MzQ5NDM1NTk4MzE5MTEyNzZFKzk3MSAtMTkzOTk4NTcyOS40MzY4Mjc3NzcwNTU2OTkzNjEyMzcgLT4gNS4wOTgzMDIzNzY0MjAzOTYyNjA0MDQ4MjExNTgxNThFKzk2OCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDM1IGRpdmlkZWludCAtOTg5MDYzMy44NTQ2MDk0MzQ5NDM1NTk4MzE5MTEyNzZFKzk3MSAtMTkzOTk4NTcyOS40MzY4Mjc3NzcwNTU2OTkzNjEyMzcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDM1IG11bHRpcGx5IC05ODkwNjMzLjg1NDYwOTQzNDk0MzU1OTgzMTkxMTI3NkUrOTcxIC0xOTM5OTg1NzI5LjQzNjgyNzc3NzA1NTY5OTM2MTIzNyAtPiAxLjkxODc2ODg1MzMwMjcwNjgyNTk2NDA4NzcwMjMwN0UrOTg3IEluZXhhY3QgUm91bmRlZAorcG93eDMwMzUgcG93ZXIgLTk4OTA2MzMuODU0NjA5NDM0OTQzNTU5ODMxOTExMjc2RSs5NzEgLTIgLT4gMS4wMjIyMzczNjI2Njc1OTI4Njc3Njg1MTE0ODc4MTRFLTE5NTYgSW5leGFjdCBSb3VuZGVkCityZW14MzAzNSByZW1haW5kZXIgLTk4OTA2MzMuODU0NjA5NDM0OTQzNTU5ODMxOTExMjc2RSs5NzEgLTE5Mzk5ODU3MjkuNDM2ODI3Nzc3MDU1Njk5MzYxMjM3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzAzNSBzdWJ0cmFjdCAtOTg5MDYzMy44NTQ2MDk0MzQ5NDM1NTk4MzE5MTEyNzZFKzk3MSAtMTkzOTk4NTcyOS40MzY4Mjc3NzcwNTU2OTkzNjEyMzcgLT4gLTkuODkwNjMzODU0NjA5NDM0OTQzNTU5ODMxOTExMjc2RSs5NzcgSW5leGFjdCBSb3VuZGVkCithZGR4MzAzNiBhZGQgMzk0NDU3MDMyMy4zMzExMjE3NTA2NjE5MjA0NzUxOTEgLTE3MzYwNzIyLjI4ODc4MTQ1NjQxMzk0OTYyNDg0MzY2IC0+IDM5MjcyMDk2MDEuMDQyMzQwMjk0MjQ3OTcwODUwMzQ3IEluZXhhY3QgUm91bmRlZAorY29teDMwMzYgY29tcGFyZSAzOTQ0NTcwMzIzLjMzMTEyMTc1MDY2MTkyMDQ3NTE5MSAtMTczNjA3MjIuMjg4NzgxNDU2NDEzOTQ5NjI0ODQzNjYgLT4gMQorZGl2eDMwMzYgZGl2aWRlIDM5NDQ1NzAzMjMuMzMxMTIxNzUwNjYxOTIwNDc1MTkxIC0xNzM2MDcyMi4yODg3ODE0NTY0MTM5NDk2MjQ4NDM2NiAtPiAtMjI3LjIxMjMzOTMwOTE4Mzc3MDY4Mjc3MDgxOTYxMDEgSW5leGFjdCBSb3VuZGVkCitkdml4MzAzNiBkaXZpZGVpbnQgMzk0NDU3MDMyMy4zMzExMjE3NTA2NjE5MjA0NzUxOTEgLTE3MzYwNzIyLjI4ODc4MTQ1NjQxMzk0OTYyNDg0MzY2IC0+IC0yMjcKK211bHgzMDM2IG11bHRpcGx5IDM5NDQ1NzAzMjMuMzMxMTIxNzUwNjYxOTIwNDc1MTkxIC0xNzM2MDcyMi4yODg3ODE0NTY0MTM5NDk2MjQ4NDM2NiAtPiAtNjg0ODA1ODk5MzE5MjA0ODEuNTYwMjAwNDMyMTM3NjcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzAzNiBwb3dlciAzOTQ0NTcwMzIzLjMzMTEyMTc1MDY2MTkyMDQ3NTE5MSAtMTczNjA3MjIgLT4gMEUtMTAwMjkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMwMzYgcmVtYWluZGVyIDM5NDQ1NzAzMjMuMzMxMTIxNzUwNjYxOTIwNDc1MTkxIC0xNzM2MDcyMi4yODg3ODE0NTY0MTM5NDk2MjQ4NDM2NiAtPiAzNjg2MzYzLjc3NzczMTE0NDY5NTM1NTYzNTY4MDE4CitzdWJ4MzAzNiBzdWJ0cmFjdCAzOTQ0NTcwMzIzLjMzMTEyMTc1MDY2MTkyMDQ3NTE5MSAtMTczNjA3MjIuMjg4NzgxNDU2NDEzOTQ5NjI0ODQzNjYgLT4gMzk2MTkzMTA0NS42MTk5MDMyMDcwNzU4NzAxMDAwMzUgSW5leGFjdCBSb3VuZGVkCithZGR4MzAzNyBhZGQgMTk1NDQuMTQwMTg1MDM0MjcwMjkwMDI1NTI4NzI3MDcgMTc4NjY5Nzc2Mi44ODUxNzg5OTQxODIxMzM4Mzk1NDYgLT4gMTc4NjcxNzMwNy4wMjUzNjQwMjg0NTI0MjM4NjUwNzUgSW5leGFjdCBSb3VuZGVkCitjb214MzAzNyBjb21wYXJlIDE5NTQ0LjE0MDE4NTAzNDI3MDI5MDAyNTUyODcyNzA3IDE3ODY2OTc3NjIuODg1MTc4OTk0MTgyMTMzODM5NTQ2IC0+IC0xCitkaXZ4MzAzNyBkaXZpZGUgMTk1NDQuMTQwMTg1MDM0MjcwMjkwMDI1NTI4NzI3MDcgMTc4NjY5Nzc2Mi44ODUxNzg5OTQxODIxMzM4Mzk1NDYgLT4gMC4wMDAwMTA5Mzg2OTQwNDgzMjg2Nzc1OTIzNDM1OTg3MTk5MSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDM3IGRpdmlkZWludCAxOTU0NC4xNDAxODUwMzQyNzAyOTAwMjU1Mjg3MjcwNyAxNzg2Njk3NzYyLjg4NTE3ODk5NDE4MjEzMzgzOTU0NiAtPiAwCittdWx4MzAzNyBtdWx0aXBseSAxOTU0NC4xNDAxODUwMzQyNzAyOTAwMjU1Mjg3MjcwNyAxNzg2Njk3NzYyLjg4NTE3ODk5NDE4MjEzMzgzOTU0NiAtPiAzNDkxOTQ3MTU0NjExNS4wNTg5NzE2MzQ5NjE2MjI5MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDM3IHBvd2VyIDE5NTQ0LjE0MDE4NTAzNDI3MDI5MDAyNTUyODcyNzA3IDIgLT4gMzgxOTczNDE1LjU3MjI3MTQwMDkyOTg4MDI1NTc5NDAgSW5leGFjdCBSb3VuZGVkCityZW14MzAzNyByZW1haW5kZXIgMTk1NDQuMTQwMTg1MDM0MjcwMjkwMDI1NTI4NzI3MDcgMTc4NjY5Nzc2Mi44ODUxNzg5OTQxODIxMzM4Mzk1NDYgLT4gMTk1NDQuMTQwMTg1MDM0MjcwMjkwMDI1NTI4NzI3MDcKK3N1YngzMDM3IHN1YnRyYWN0IDE5NTQ0LjE0MDE4NTAzNDI3MDI5MDAyNTUyODcyNzA3IDE3ODY2OTc3NjIuODg1MTc4OTk0MTgyMTMzODM5NTQ2IC0+IC0xNzg2Njc4MjE4Ljc0NDk5Mzk1OTkxMTg0MzgxNDAxNyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDM4IGFkZCAtMDUuNzU0ODU5NTc5Mzc2MTc3NTc5ODM1MTM2NjI5ODEgNTU2NDQ3Njg3NS45ODk2NDA0MzExNzM2OTQzNzIwODMgLT4gNTU2NDQ3Njg3MC4yMzQ3ODA4NTE3OTc1MTY3OTIyNDggSW5leGFjdCBSb3VuZGVkCitjb214MzAzOCBjb21wYXJlIC0wNS43NTQ4NTk1NzkzNzYxNzc1Nzk4MzUxMzY2Mjk4MSA1NTY0NDc2ODc1Ljk4OTY0MDQzMTE3MzY5NDM3MjA4MyAtPiAtMQorZGl2eDMwMzggZGl2aWRlIC0wNS43NTQ4NTk1NzkzNzYxNzc1Nzk4MzUxMzY2Mjk4MSA1NTY0NDc2ODc1Ljk4OTY0MDQzMTE3MzY5NDM3MjA4MyAtPiAtMS4wMzQyMTM5NDQ1NjgyNzEzMjQ4NDE2MDg4MjUxMzZFLTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzAzOCBkaXZpZGVpbnQgLTA1Ljc1NDg1OTU3OTM3NjE3NzU3OTgzNTEzNjYyOTgxIDU1NjQ0NzY4NzUuOTg5NjQwNDMxMTczNjk0MzcyMDgzIC0+IC0wCittdWx4MzAzOCBtdWx0aXBseSAtMDUuNzU0ODU5NTc5Mzc2MTc3NTc5ODM1MTM2NjI5ODEgNTU2NDQ3Njg3NS45ODk2NDA0MzExNzM2OTQzNzIwODMgLT4gLTMyMDIyNzgzMDU0LjAwNjIwODc4NDM2Mzk4OTkwMTM1IEluZXhhY3QgUm91bmRlZAorcG93eDMwMzggcG93ZXIgLTA1Ljc1NDg1OTU3OTM3NjE3NzU3OTgzNTEzNjYyOTgxIDYgLT4gMzYzMjUuMjMxMTgyMjM2MTE0MjEzMDMyMzg5MDg0NzIgSW5leGFjdCBSb3VuZGVkCityZW14MzAzOCByZW1haW5kZXIgLTA1Ljc1NDg1OTU3OTM3NjE3NzU3OTgzNTEzNjYyOTgxIDU1NjQ0NzY4NzUuOTg5NjQwNDMxMTczNjk0MzcyMDgzIC0+IC01Ljc1NDg1OTU3OTM3NjE3NzU3OTgzNTEzNjYyOTgxCitzdWJ4MzAzOCBzdWJ0cmFjdCAtMDUuNzU0ODU5NTc5Mzc2MTc3NTc5ODM1MTM2NjI5ODEgNTU2NDQ3Njg3NS45ODk2NDA0MzExNzM2OTQzNzIwODMgLT4gLTU1NjQ0NzY4ODEuNzQ0NTAwMDEwNTQ5ODcxOTUxOTE4IEluZXhhY3QgUm91bmRlZAorYWRkeDMwMzkgYWRkIC00MjA4ODIwLjg5ODcxODA2OTE5NDAwODUyNjMwMjc0NiA2MjY4ODcuNzU1Mzc3NDcwNTY3ODIwMTExMjg0NTQ2MkUrMjA2IC0+IDYuMjY4ODc3NTUzNzc0NzA1Njc4MjAxMTEyODQ1NDYyRSsyMTEgSW5leGFjdCBSb3VuZGVkCitjb214MzAzOSBjb21wYXJlIC00MjA4ODIwLjg5ODcxODA2OTE5NDAwODUyNjMwMjc0NiA2MjY4ODcuNzU1Mzc3NDcwNTY3ODIwMTExMjg0NTQ2MkUrMjA2IC0+IC0xCitkaXZ4MzAzOSBkaXZpZGUgLTQyMDg4MjAuODk4NzE4MDY5MTk0MDA4NTI2MzAyNzQ2IDYyNjg4Ny43NTUzNzc0NzA1Njc4MjAxMTEyODQ1NDYyRSsyMDYgLT4gLTYuNzEzODM0OTEzMjExNTI3MTg0OTA3NDIxODU2NDM0RS0yMDYgSW5leGFjdCBSb3VuZGVkCitkdml4MzAzOSBkaXZpZGVpbnQgLTQyMDg4MjAuODk4NzE4MDY5MTk0MDA4NTI2MzAyNzQ2IDYyNjg4Ny43NTUzNzc0NzA1Njc4MjAxMTEyODQ1NDYyRSsyMDYgLT4gLTAKK211bHgzMDM5IG11bHRpcGx5IC00MjA4ODIwLjg5ODcxODA2OTE5NDAwODUyNjMwMjc0NiA2MjY4ODcuNzU1Mzc3NDcwNTY3ODIwMTExMjg0NTQ2MkUrMjA2IC0+IC0yLjYzODQ1ODI4NTk4MzE1ODc4OTQ1ODkyNTE3MDI2N0UrMjE4IEluZXhhY3QgUm91bmRlZAorcG93eDMwMzkgcG93ZXIgLTQyMDg4MjAuODk4NzE4MDY5MTk0MDA4NTI2MzAyNzQ2IDYgLT4gNS41NTg1NjQ3ODMyOTEyNjAzNTkxNDIyMjMzMzc5OTRFKzM5IEluZXhhY3QgUm91bmRlZAorcmVteDMwMzkgcmVtYWluZGVyIC00MjA4ODIwLjg5ODcxODA2OTE5NDAwODUyNjMwMjc0NiA2MjY4ODcuNzU1Mzc3NDcwNTY3ODIwMTExMjg0NTQ2MkUrMjA2IC0+IC00MjA4ODIwLjg5ODcxODA2OTE5NDAwODUyNjMwMjc0Ngorc3VieDMwMzkgc3VidHJhY3QgLTQyMDg4MjAuODk4NzE4MDY5MTk0MDA4NTI2MzAyNzQ2IDYyNjg4Ny43NTUzNzc0NzA1Njc4MjAxMTEyODQ1NDYyRSsyMDYgLT4gLTYuMjY4ODc3NTUzNzc0NzA1Njc4MjAxMTEyODQ1NDYyRSsyMTEgSW5leGFjdCBSb3VuZGVkCithZGR4MzA0MCBhZGQgLTcwMDc3MTk1NDc4MDY2LjMwODk2OTc5MDg1ODIxMjY5RSs1NDkgNDYwNy4xNjMyNDg1NTQxNTU0ODM2ODE0MzAwMTMwNzMgLT4gLTcuMDA3NzE5NTQ3ODA2NjMwODk2OTc5MDg1ODIxMjY5RSs1NjIgSW5leGFjdCBSb3VuZGVkCitjb214MzA0MCBjb21wYXJlIC03MDA3NzE5NTQ3ODA2Ni4zMDg5Njk3OTA4NTgyMTI2OUUrNTQ5IDQ2MDcuMTYzMjQ4NTU0MTU1NDgzNjgxNDMwMDEzMDczIC0+IC0xCitkaXZ4MzA0MCBkaXZpZGUgLTcwMDc3MTk1NDc4MDY2LjMwODk2OTc5MDg1ODIxMjY5RSs1NDkgNDYwNy4xNjMyNDg1NTQxNTU0ODM2ODE0MzAwMTMwNzMgLT4gLTEuNTIxMDQ4NjczNDk4OTk3NjI3MzYwMjMwMDc4MzA2RSs1NTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzA0MCBkaXZpZGVpbnQgLTcwMDc3MTk1NDc4MDY2LjMwODk2OTc5MDg1ODIxMjY5RSs1NDkgNDYwNy4xNjMyNDg1NTQxNTU0ODM2ODE0MzAwMTMwNzMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDQwIG11bHRpcGx5IC03MDA3NzE5NTQ3ODA2Ni4zMDg5Njk3OTA4NTgyMTI2OUUrNTQ5IDQ2MDcuMTYzMjQ4NTU0MTU1NDgzNjgxNDMwMDEzMDczIC0+IC0zLjIyODU3MDc5NTY4MjkyNTUwOTQ3ODE5MTM5Nzg3OEUrNTY2IEluZXhhY3QgUm91bmRlZAorcG93eDMwNDAgcG93ZXIgLTcwMDc3MTk1NDc4MDY2LjMwODk2OTc5MDg1ODIxMjY5RSs1NDkgNDYwNyAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzA0MCByZW1haW5kZXIgLTcwMDc3MTk1NDc4MDY2LjMwODk2OTc5MDg1ODIxMjY5RSs1NDkgNDYwNy4xNjMyNDg1NTQxNTU0ODM2ODE0MzAwMTMwNzMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMDQwIHN1YnRyYWN0IC03MDA3NzE5NTQ3ODA2Ni4zMDg5Njk3OTA4NTgyMTI2OUUrNTQ5IDQ2MDcuMTYzMjQ4NTU0MTU1NDgzNjgxNDMwMDEzMDczIC0+IC03LjAwNzcxOTU0NzgwNjYzMDg5Njk3OTA4NTgyMTI2OUUrNTYyIEluZXhhY3QgUm91bmRlZAorYWRkeDMwNDEgYWRkIC00NDI5NDEuNzU0MTgxMTUyNzk0MDkxODI0NDM4MzQ1NCAtMDY4MTI2NzY4LjA1NjM1NTk4MTkxNTYzNzkxNTEwMTYgLT4gLTY4NTY5NzA5LjgxMDUzNzEzNDcwOTcyOTczOTUzOTk1IEluZXhhY3QgUm91bmRlZAorY29teDMwNDEgY29tcGFyZSAtNDQyOTQxLjc1NDE4MTE1Mjc5NDA5MTgyNDQzODM0NTQgLTA2ODEyNjc2OC4wNTYzNTU5ODE5MTU2Mzc5MTUxMDE2IC0+IDEKK2RpdngzMDQxIGRpdmlkZSAtNDQyOTQxLjc1NDE4MTE1Mjc5NDA5MTgyNDQzODM0NTQgLTA2ODEyNjc2OC4wNTYzNTU5ODE5MTU2Mzc5MTUxMDE2IC0+IDAuMDA2NTAxNzI4NTY4OTM0MDQyMTQzOTEzMTExNzY4NTU3IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNDEgZGl2aWRlaW50IC00NDI5NDEuNzU0MTgxMTUyNzk0MDkxODI0NDM4MzQ1NCAtMDY4MTI2NzY4LjA1NjM1NTk4MTkxNTYzNzkxNTEwMTYgLT4gMAorbXVseDMwNDEgbXVsdGlwbHkgLTQ0Mjk0MS43NTQxODExNTI3OTQwOTE4MjQ0MzgzNDU0IC0wNjgxMjY3NjguMDU2MzU1OTgxOTE1NjM3OTE1MTAxNiAtPiAzMDE3NjE5MDE0OTU3NC44NDM4NjM5NTk0NzU5Mzk3MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDQxIHBvd2VyIC00NDI5NDEuNzU0MTgxMTUyNzk0MDkxODI0NDM4MzQ1NCAtNjgxMjY3NjggLT4gMEUtMTAwMjkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMwNDEgcmVtYWluZGVyIC00NDI5NDEuNzU0MTgxMTUyNzk0MDkxODI0NDM4MzQ1NCAtMDY4MTI2NzY4LjA1NjM1NTk4MTkxNTYzNzkxNTEwMTYgLT4gLTQ0Mjk0MS43NTQxODExNTI3OTQwOTE4MjQ0MzgzNDU0CitzdWJ4MzA0MSBzdWJ0cmFjdCAtNDQyOTQxLjc1NDE4MTE1Mjc5NDA5MTgyNDQzODM0NTQgLTA2ODEyNjc2OC4wNTYzNTU5ODE5MTU2Mzc5MTUxMDE2IC0+IDY3NjgzODI2LjMwMjE3NDgyOTEyMTU0NjA5MDY2MzI1IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNDIgYWRkIC0wNDA3MjY3Nzg3MTEuODY3NzYxNTYxNjcxMTY3NjE1OSAyOTk2OTEuOTQzMDM0NTI1OTE3NDYxNDk5NzA2NDkxNiAtPiAtNDA3MjY0NzkwMTkuOTI0NzI3MDM1NzUzNzA2MTE2MTkgSW5leGFjdCBSb3VuZGVkCitjb214MzA0MiBjb21wYXJlIC0wNDA3MjY3Nzg3MTEuODY3NzYxNTYxNjcxMTY3NjE1OSAyOTk2OTEuOTQzMDM0NTI1OTE3NDYxNDk5NzA2NDkxNiAtPiAtMQorZGl2eDMwNDIgZGl2aWRlIC0wNDA3MjY3Nzg3MTEuODY3NzYxNTYxNjcxMTY3NjE1OSAyOTk2OTEuOTQzMDM0NTI1OTE3NDYxNDk5NzA2NDkxNiAtPiAtMTM1ODk1LjQ3NDE5NzU2OTA4NzI1NDgyMzMxMTE4ODggSW5leGFjdCBSb3VuZGVkCitkdml4MzA0MiBkaXZpZGVpbnQgLTA0MDcyNjc3ODcxMS44Njc3NjE1NjE2NzExNjc2MTU5IDI5OTY5MS45NDMwMzQ1MjU5MTc0NjE0OTk3MDY0OTE2IC0+IC0xMzU4OTUKK211bHgzMDQyIG11bHRpcGx5IC0wNDA3MjY3Nzg3MTEuODY3NzYxNTYxNjcxMTY3NjE1OSAyOTk2OTEuOTQzMDM0NTI1OTE3NDYxNDk5NzA2NDkxNiAtPiAtMTIyMDU0ODc0NDU2OTY4MTYuMDIxNzU2NjU2MjIyNDIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA0MiBwb3dlciAtMDQwNzI2Nzc4NzExLjg2Nzc2MTU2MTY3MTE2NzYxNTkgMjk5NjkyIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMwNDIgcmVtYWluZGVyIC0wNDA3MjY3Nzg3MTEuODY3NzYxNTYxNjcxMTY3NjE1OSAyOTk2OTEuOTQzMDM0NTI1OTE3NDYxNDk5NzA2NDkxNiAtPiAtMTQyMTEzLjE5MDg2MjAwODI0MDY2NTAwMjIyNDAxODAKK3N1YngzMDQyIHN1YnRyYWN0IC0wNDA3MjY3Nzg3MTEuODY3NzYxNTYxNjcxMTY3NjE1OSAyOTk2OTEuOTQzMDM0NTI1OTE3NDYxNDk5NzA2NDkxNiAtPiAtNDA3MjcwNzg0MDMuODEwNzk2MDg3NTg4NjI5MTE1NjEgSW5leGFjdCBSb3VuZGVkCithZGR4MzA0MyBhZGQgLTE5MzQxOTc1MjAuNzM4MzY2OTEyMTc5MTQzMDg1OTU1IDMuODEwNzUxNDIyNTE1MTc4NDAwMjkzNjkzMzcxNTE5IC0+IC0xOTM0MTk3NTE2LjkyNzYxNTQ4OTY2Mzk2NDY4NTY2MSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDQzIGNvbXBhcmUgLTE5MzQxOTc1MjAuNzM4MzY2OTEyMTc5MTQzMDg1OTU1IDMuODEwNzUxNDIyNTE1MTc4NDAwMjkzNjkzMzcxNTE5IC0+IC0xCitkaXZ4MzA0MyBkaXZpZGUgLTE5MzQxOTc1MjAuNzM4MzY2OTEyMTc5MTQzMDg1OTU1IDMuODEwNzUxNDIyNTE1MTc4NDAwMjkzNjkzMzcxNTE5IC0+IC01MDc1NjMyODcuNzMxMjU2NjA3MTUzNzIzMzY5NzQ3MyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDQzIGRpdmlkZWludCAtMTkzNDE5NzUyMC43MzgzNjY5MTIxNzkxNDMwODU5NTUgMy44MTA3NTE0MjI1MTUxNzg0MDAyOTM2OTMzNzE1MTkgLT4gLTUwNzU2MzI4NworbXVseDMwNDMgbXVsdGlwbHkgLTE5MzQxOTc1MjAuNzM4MzY2OTEyMTc5MTQzMDg1OTU1IDMuODEwNzUxNDIyNTE1MTc4NDAwMjkzNjkzMzcxNTE5IC0+IC03MzcwNzQ1OTUzLjU3OTA2Mjk4NTEzMDQzODMwOTAyMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDQzIHBvd2VyIC0xOTM0MTk3NTIwLjczODM2NjkxMjE3OTE0MzA4NTk1NSA0IC0+IDEuMzk5NTk3OTIyMjc1NDAwOTQ3NDk3ODU1NTM5NDc1RSszNyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDQzIHJlbWFpbmRlciAtMTkzNDE5NzUyMC43MzgzNjY5MTIxNzkxNDMwODU5NTUgMy44MTA3NTE0MjI1MTUxNzg0MDAyOTM2OTMzNzE1MTkgLT4gLTIuNzg2NjM3MTU1OTM0Njc0MzEyOTM2NzA0MTc3MDQ3CitzdWJ4MzA0MyBzdWJ0cmFjdCAtMTkzNDE5NzUyMC43MzgzNjY5MTIxNzkxNDMwODU5NTUgMy44MTA3NTE0MjI1MTUxNzg0MDAyOTM2OTMzNzE1MTkgLT4gLTE5MzQxOTc1MjQuNTQ5MTE4MzM0Njk0MzIxNDg2MjQ5IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNDQgYWRkIDgxMzI2Mi43NzIzNTMzODMzMDM4ODI5NTU5NjQ2ODMwIC0zMDMyODQ4MjI3MTYuODI4MjE3ODEzMTExODE4NTkwNyAtPiAtMzAzMjg0MDA5NDU0LjA1NTg2NDQyOTgwNzkzNTYzNDcgSW5leGFjdCBSb3VuZGVkCitjb214MzA0NCBjb21wYXJlIDgxMzI2Mi43NzIzNTMzODMzMDM4ODI5NTU5NjQ2ODMwIC0zMDMyODQ4MjI3MTYuODI4MjE3ODEzMTExODE4NTkwNyAtPiAxCitkaXZ4MzA0NCBkaXZpZGUgODEzMjYyLjc3MjM1MzM4MzMwMzg4Mjk1NTk2NDY4MzAgLTMwMzI4NDgyMjcxNi44MjgyMTc4MTMxMTE4MTg1OTA3IC0+IC0wLjAwMDAwMjY4MTUxNDkwNDI2Nzc3MDI5NDIxMzM4MTQ4NTEwOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDQ0IGRpdmlkZWludCA4MTMyNjIuNzcyMzUzMzgzMzAzODgyOTU1OTY0NjgzMCAtMzAzMjg0ODIyNzE2LjgyODIxNzgxMzExMTgxODU5MDcgLT4gLTAKK211bHgzMDQ0IG11bHRpcGx5IDgxMzI2Mi43NzIzNTMzODMzMDM4ODI5NTU5NjQ2ODMwIC0zMDMyODQ4MjI3MTYuODI4MjE3ODEzMTExODE4NTkwNyAtPiAtMjQ2NjUwMjU1NzM1MzkyMDgwLjEzNTc0MDQyODA0MzEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA0NCBwb3dlciA4MTMyNjIuNzcyMzUzMzgzMzAzODgyOTU1OTY0NjgzMCAtMyAtPiAxLjg1OTExOTU2ODMxMDk5NzYwNTU0NTkxNDg5NTEzM0UtMTggSW5leGFjdCBSb3VuZGVkCityZW14MzA0NCByZW1haW5kZXIgODEzMjYyLjc3MjM1MzM4MzMwMzg4Mjk1NTk2NDY4MzAgLTMwMzI4NDgyMjcxNi44MjgyMTc4MTMxMTE4MTg1OTA3IC0+IDgxMzI2Mi43NzIzNTMzODMzMDM4ODI5NTU5NjQ2ODMwCitzdWJ4MzA0NCBzdWJ0cmFjdCA4MTMyNjIuNzcyMzUzMzgzMzAzODgyOTU1OTY0NjgzMCAtMzAzMjg0ODIyNzE2LjgyODIxNzgxMzExMTgxODU5MDcgLT4gMzAzMjg1NjM1OTc5LjYwMDU3MTE5NjQxNTcwMTU0NjcgSW5leGFjdCBSb3VuZGVkCithZGR4MzA0NSBhZGQgMzYxMDU5NTQ4ODQuOTQ2MjE0MzQ5NzkzNjU1ODkzMTEgNzQ1NTU4MjA1Ljc2OTIzOTc0ODEzMTMwMDU2NTk1MjNFLTk1MiAtPiAzNjEwNTk1NDg4NC45NDYyMTQzNDk3OTM2NTU4OTMxMSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDQ1IGNvbXBhcmUgMzYxMDU5NTQ4ODQuOTQ2MjE0MzQ5NzkzNjU1ODkzMTEgNzQ1NTU4MjA1Ljc2OTIzOTc0ODEzMTMwMDU2NTk1MjNFLTk1MiAtPiAxCitkaXZ4MzA0NSBkaXZpZGUgMzYxMDU5NTQ4ODQuOTQ2MjE0MzQ5NzkzNjU1ODkzMTEgNzQ1NTU4MjA1Ljc2OTIzOTc0ODEzMTMwMDU2NTk1MjNFLTk1MiAtPiA0Ljg0MjgwODMyODc4NjgwNTgyMTQxMTY3NDMwMjY4NkUrOTUzIEluZXhhY3QgUm91bmRlZAorZHZpeDMwNDUgZGl2aWRlaW50IDM2MTA1OTU0ODg0Ljk0NjIxNDM0OTc5MzY1NTg5MzExIDc0NTU1ODIwNS43NjkyMzk3NDgxMzEzMDA1NjU5NTIzRS05NTIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDQ1IG11bHRpcGx5IDM2MTA1OTU0ODg0Ljk0NjIxNDM0OTc5MzY1NTg5MzExIDc0NTU1ODIwNS43NjkyMzk3NDgxMzEzMDA1NjU5NTIzRS05NTIgLT4gMi42OTE5MDkwOTQxNjA1NjE2NzMzOTEzNTI3NDM4NjlFLTkzMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDQ1IHBvd2VyIDM2MTA1OTU0ODg0Ljk0NjIxNDM0OTc5MzY1NTg5MzExIDcgLT4gNy45OTkyOTc0NDk3MTMzMDE3MTk1ODI3MzI0NDczODZFKzczIEluZXhhY3QgUm91bmRlZAorcmVteDMwNDUgcmVtYWluZGVyIDM2MTA1OTU0ODg0Ljk0NjIxNDM0OTc5MzY1NTg5MzExIDc0NTU1ODIwNS43NjkyMzk3NDgxMzEzMDA1NjU5NTIzRS05NTIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMDQ1IHN1YnRyYWN0IDM2MTA1OTU0ODg0Ljk0NjIxNDM0OTc5MzY1NTg5MzExIDc0NTU1ODIwNS43NjkyMzk3NDgxMzEzMDA1NjU5NTIzRS05NTIgLT4gMzYxMDU5NTQ4ODQuOTQ2MjE0MzQ5NzkzNjU1ODkzMTEgSW5leGFjdCBSb3VuZGVkCithZGR4MzA0NiBhZGQgLTA3NTUzNzE3NzUzOC4xODE0NTE2NjIxOTYyMTg1NDkwIDI2OTgwNzc1MjU1LjUxNTQyODU2NDgzMTIyNDg0ODk4IC0+IC00ODU1NjQwMjI4Mi42NjYwMjMwOTczNjQ5OTM3MDAwMgorY29teDMwNDYgY29tcGFyZSAtMDc1NTM3MTc3NTM4LjE4MTQ1MTY2MjE5NjIxODU0OTAgMjY5ODA3NzUyNTUuNTE1NDI4NTY0ODMxMjI0ODQ4OTggLT4gLTEKK2RpdngzMDQ2IGRpdmlkZSAtMDc1NTM3MTc3NTM4LjE4MTQ1MTY2MjE5NjIxODU0OTAgMjY5ODA3NzUyNTUuNTE1NDI4NTY0ODMxMjI0ODQ4OTggLT4gLTIuNzk5NjY2NjgyMDI5MDg5OTU2MjY5MDE4NTQxNjQ5IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNDYgZGl2aWRlaW50IC0wNzU1MzcxNzc1MzguMTgxNDUxNjYyMTk2MjE4NTQ5MCAyNjk4MDc3NTI1NS41MTU0Mjg1NjQ4MzEyMjQ4NDg5OCAtPiAtMgorbXVseDMwNDYgbXVsdGlwbHkgLTA3NTUzNzE3NzUzOC4xODE0NTE2NjIxOTYyMTg1NDkwIDI2OTgwNzc1MjU1LjUxNTQyODU2NDgzMTIyNDg0ODk4IC0+IC0yMDM4MDUxNjEwNTkzNjQxOTQ3NzE3LjI2ODY1MjE3NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDQ2IHBvd2VyIC0wNzU1MzcxNzc1MzguMTgxNDUxNjYyMTk2MjE4NTQ5MCAzIC0+IC00LjMxMDA0OTUxODk4Nzk4ODA4NDU5NTI2NDYxNzcyN0UrMzIgSW5leGFjdCBSb3VuZGVkCityZW14MzA0NiByZW1haW5kZXIgLTA3NTUzNzE3NzUzOC4xODE0NTE2NjIxOTYyMTg1NDkwIDI2OTgwNzc1MjU1LjUxNTQyODU2NDgzMTIyNDg0ODk4IC0+IC0yMTU3NTYyNzAyNy4xNTA1OTQ1MzI1MzM3Njg4NTEwNAorc3VieDMwNDYgc3VidHJhY3QgLTA3NTUzNzE3NzUzOC4xODE0NTE2NjIxOTYyMTg1NDkwIDI2OTgwNzc1MjU1LjUxNTQyODU2NDgzMTIyNDg0ODk4IC0+IC0xMDI1MTc5NTI3OTMuNjk2ODgwMjI3MDI3NDQzMzk4MCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDQ3IGFkZCAtNDIyMzc2NS40MTUzMTk1NjQ4OTg4NDAwNDA2OTc2NDcgLTI1OTA1OTAzMDU0OTc0NTQxODU0NTU0NTkxNDk5MThFLTIxNSAtPiAtNDIyMzc2NS40MTUzMTk1NjQ4OTg4NDAwNDA2OTc2NDcgSW5leGFjdCBSb3VuZGVkCitjb214MzA0NyBjb21wYXJlIC00MjIzNzY1LjQxNTMxOTU2NDg5ODg0MDA0MDY5NzY0NyAtMjU5MDU5MDMwNTQ5NzQ1NDE4NTQ1NTQ1OTE0OTkxOEUtMjE1IC0+IC0xCitkaXZ4MzA0NyBkaXZpZGUgLTQyMjM3NjUuNDE1MzE5NTY0ODk4ODQwMDQwNjk3NjQ3IC0yNTkwNTkwMzA1NDk3NDU0MTg1NDU1NDU5MTQ5OTE4RS0yMTUgLT4gMS42MzA0MjU4NTU1ODgzNDczNTY1NzAwNzY5MDkwNTNFKzE5MSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDQ3IGRpdmlkZWludCAtNDIyMzc2NS40MTUzMTk1NjQ4OTg4NDAwNDA2OTc2NDcgLTI1OTA1OTAzMDU0OTc0NTQxODU0NTU0NTkxNDk5MThFLTIxNSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwNDcgbXVsdGlwbHkgLTQyMjM3NjUuNDE1MzE5NTY0ODk4ODQwMDQwNjk3NjQ3IC0yNTkwNTkwMzA1NDk3NDU0MTg1NDU1NDU5MTQ5OTE4RS0yMTUgLT4gMS4wOTQyMDQ1NzM3NjIyMjkzMDg3OTg2MDQ4NDUzOTVFLTE3OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDQ3IHBvd2VyIC00MjIzNzY1LjQxNTMxOTU2NDg5ODg0MDA0MDY5NzY0NyAtMyAtPiAtMS4zMjcwOTA3NzU4NjM2MTY5MzkzMDk1Njk3OTExMzhFLTIwIEluZXhhY3QgUm91bmRlZAorcmVteDMwNDcgcmVtYWluZGVyIC00MjIzNzY1LjQxNTMxOTU2NDg5ODg0MDA0MDY5NzY0NyAtMjU5MDU5MDMwNTQ5NzQ1NDE4NTQ1NTQ1OTE0OTkxOEUtMjE1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzA0NyBzdWJ0cmFjdCAtNDIyMzc2NS40MTUzMTk1NjQ4OTg4NDAwNDA2OTc2NDcgLTI1OTA1OTAzMDU0OTc0NTQxODU0NTU0NTkxNDk5MThFLTIxNSAtPiAtNDIyMzc2NS40MTUzMTk1NjQ4OTg4NDAwNDA2OTc2NDcgSW5leGFjdCBSb3VuZGVkCithZGR4MzA0OCBhZGQgLTY0NjguOTAzNzM4NTIyOTUxMjU5MDYzMDk5OTQ2MTk1IC03ODc3LjMyNDMxNDI3MzY5NDMxMjE2NDQwNzc5NDkzOUUrMjY3IC0+IC03Ljg3NzMyNDMxNDI3MzY5NDMxMjE2NDQwNzc5NDkzOUUrMjcwIEluZXhhY3QgUm91bmRlZAorY29teDMwNDggY29tcGFyZSAtNjQ2OC45MDM3Mzg1MjI5NTEyNTkwNjMwOTk5NDYxOTUgLTc4NzcuMzI0MzE0MjczNjk0MzEyMTY0NDA3Nzk0OTM5RSsyNjcgLT4gMQorZGl2eDMwNDggZGl2aWRlIC02NDY4LjkwMzczODUyMjk1MTI1OTA2MzA5OTk0NjE5NSAtNzg3Ny4zMjQzMTQyNzM2OTQzMTIxNjQ0MDc3OTQ5MzlFKzI2NyAtPiA4LjIxMjA1NzE0MDc3NDcwNjg3NDY2NjMwNzI0NjYyOEUtMjY4IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNDggZGl2aWRlaW50IC02NDY4LjkwMzczODUyMjk1MTI1OTA2MzA5OTk0NjE5NSAtNzg3Ny4zMjQzMTQyNzM2OTQzMTIxNjQ0MDc3OTQ5MzlFKzI2NyAtPiAwCittdWx4MzA0OCBtdWx0aXBseSAtNjQ2OC45MDM3Mzg1MjI5NTEyNTkwNjMwOTk5NDYxOTUgLTc4NzcuMzI0MzE0MjczNjk0MzEyMTY0NDA3Nzk0OTM5RSsyNjcgLT4gNS4wOTU3NjUyNzA2MTYyODQ0NTU5MjI3NDc1MzA2NzZFKzI3NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDQ4IHBvd2VyIC02NDY4LjkwMzczODUyMjk1MTI1OTA2MzA5OTk0NjE5NSAtOCAtPiAzLjI2MTAyNzcyNDk4MjA4OTI5ODAzMDM2MjM2NzYxNkUtMzEgSW5leGFjdCBSb3VuZGVkCityZW14MzA0OCByZW1haW5kZXIgLTY0NjguOTAzNzM4NTIyOTUxMjU5MDYzMDk5OTQ2MTk1IC03ODc3LjMyNDMxNDI3MzY5NDMxMjE2NDQwNzc5NDkzOUUrMjY3IC0+IC02NDY4LjkwMzczODUyMjk1MTI1OTA2MzA5OTk0NjE5NQorc3VieDMwNDggc3VidHJhY3QgLTY0NjguOTAzNzM4NTIyOTUxMjU5MDYzMDk5OTQ2MTk1IC03ODc3LjMyNDMxNDI3MzY5NDMxMjE2NDQwNzc5NDkzOUUrMjY3IC0+IDcuODc3MzI0MzE0MjczNjk0MzEyMTY0NDA3Nzk0OTM5RSsyNzAgSW5leGFjdCBSb3VuZGVkCithZGR4MzA0OSBhZGQgLTk1NjcyMjEuMTgzNjYzMjM2ODE3MjM5MjU0NzgzMzcyRS0yMDMgMTY1MC4xOTg5NjEyNTYwNjExNjUzNjIzMTk0NzEyNjQgLT4gMTY1MC4xOTg5NjEyNTYwNjExNjUzNjIzMTk0NzEyNjQgSW5leGFjdCBSb3VuZGVkCitjb214MzA0OSBjb21wYXJlIC05NTY3MjIxLjE4MzY2MzIzNjgxNzIzOTI1NDc4MzM3MkUtMjAzIDE2NTAuMTk4OTYxMjU2MDYxMTY1MzYyMzE5NDcxMjY0IC0+IC0xCitkaXZ4MzA0OSBkaXZpZGUgLTk1NjcyMjEuMTgzNjYzMjM2ODE3MjM5MjU0NzgzMzcyRS0yMDMgMTY1MC4xOTg5NjEyNTYwNjExNjUzNjIzMTk0NzEyNjQgLT4gLTUuNzk3NjE2Nzc3MzAxMjUwNzExOTg1NzI5Nzc2OTU3RS0yMDAgSW5leGFjdCBSb3VuZGVkCitkdml4MzA0OSBkaXZpZGVpbnQgLTk1NjcyMjEuMTgzNjYzMjM2ODE3MjM5MjU0NzgzMzcyRS0yMDMgMTY1MC4xOTg5NjEyNTYwNjExNjUzNjIzMTk0NzEyNjQgLT4gLTAKK211bHgzMDQ5IG11bHRpcGx5IC05NTY3MjIxLjE4MzY2MzIzNjgxNzIzOTI1NDc4MzM3MkUtMjAzIDE2NTAuMTk4OTYxMjU2MDYxMTY1MzYyMzE5NDcxMjY0IC0+IC0xLjU3ODc4MTg0NTkzODgwNTczNzUyNzMwNDMwMzk3NkUtMTkzIEluZXhhY3QgUm91bmRlZAorcG93eDMwNDkgcG93ZXIgLTk1NjcyMjEuMTgzNjYzMjM2ODE3MjM5MjU0NzgzMzcyRS0yMDMgMTY1MCAtPiAwRS0xMDAyOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzA0OSByZW1haW5kZXIgLTk1NjcyMjEuMTgzNjYzMjM2ODE3MjM5MjU0NzgzMzcyRS0yMDMgMTY1MC4xOTg5NjEyNTYwNjExNjUzNjIzMTk0NzEyNjQgLT4gLTkuNTY3MjIxMTgzNjYzMjM2ODE3MjM5MjU0NzgzMzcyRS0xOTcKK3N1YngzMDQ5IHN1YnRyYWN0IC05NTY3MjIxLjE4MzY2MzIzNjgxNzIzOTI1NDc4MzM3MkUtMjAzIDE2NTAuMTk4OTYxMjU2MDYxMTY1MzYyMzE5NDcxMjY0IC0+IC0xNjUwLjE5ODk2MTI1NjA2MTE2NTM2MjMxOTQ3MTI2NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDUwIGFkZCA4ODEyMzA2MDk4NzcwLjIwMDc1MjEzOTE0MjAzMzU2OUUtNDI4IDI2NzkwLjE3MzgwMTYzOTc1MTg2OTcyNzIwNDI3MDMwRSs1NjggLT4gMi42NzkwMTczODAxNjM5NzUxODY5NzI3MjA0MjcwMzBFKzU3MiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDUwIGNvbXBhcmUgODgxMjMwNjA5ODc3MC4yMDA3NTIxMzkxNDIwMzM1NjlFLTQyOCAyNjc5MC4xNzM4MDE2Mzk3NTE4Njk3MjcyMDQyNzAzMEUrNTY4IC0+IC0xCitkaXZ4MzA1MCBkaXZpZGUgODgxMjMwNjA5ODc3MC4yMDA3NTIxMzkxNDIwMzM1NjlFLTQyOCAyNjc5MC4xNzM4MDE2Mzk3NTE4Njk3MjcyMDQyNzAzMEUrNTY4IC0+IDMuMjg5Mzc5OTY1OTYwMDY1NTczNDQ0MTQwNzQ5NjM1RS05ODggSW5leGFjdCBSb3VuZGVkCitkdml4MzA1MCBkaXZpZGVpbnQgODgxMjMwNjA5ODc3MC4yMDA3NTIxMzkxNDIwMzM1NjlFLTQyOCAyNjc5MC4xNzM4MDE2Mzk3NTE4Njk3MjcyMDQyNzAzMEUrNTY4IC0+IDAKK211bHgzMDUwIG11bHRpcGx5IDg4MTIzMDYwOTg3NzAuMjAwNzUyMTM5MTQyMDMzNTY5RS00MjggMjY3OTAuMTczODAxNjM5NzUxODY5NzI3MjA0MjcwMzBFKzU2OCAtPiAyLjM2MDgzMjExOTc5MzAzNjM5ODEyNzY1MjE4NzczMkUrMTU3IEluZXhhY3QgUm91bmRlZAorcG93eDMwNTAgcG93ZXIgODgxMjMwNjA5ODc3MC4yMDA3NTIxMzkxNDIwMzM1NjlFLTQyOCAzIC0+IDYuODQzMzQ5NTI3NDc2OTY3Mjc0MTI5MDQzOTQ5OTY5RS0xMjQ2IEluZXhhY3QgUm91bmRlZAorcmVteDMwNTAgcmVtYWluZGVyIDg4MTIzMDYwOTg3NzAuMjAwNzUyMTM5MTQyMDMzNTY5RS00MjggMjY3OTAuMTczODAxNjM5NzUxODY5NzI3MjA0MjcwMzBFKzU2OCAtPiA4LjgxMjMwNjA5ODc3MDIwMDc1MjEzOTE0MjAzMzU2OUUtNDE2CitzdWJ4MzA1MCBzdWJ0cmFjdCA4ODEyMzA2MDk4NzcwLjIwMDc1MjEzOTE0MjAzMzU2OUUtNDI4IDI2NzkwLjE3MzgwMTYzOTc1MTg2OTcyNzIwNDI3MDMwRSs1NjggLT4gLTIuNjc5MDE3MzgwMTYzOTc1MTg2OTcyNzIwNDI3MDMwRSs1NzIgSW5leGFjdCBSb3VuZGVkCithZGR4MzA1MSBhZGQgODAxMDgwMzMuMTI3MjQ4Mzg3MTg3MzY5MjI1MDA5MDQgLTcwNjIwNzI1NTA5Mi43NjQ1MTkyMzEwMDc4ODkyODY5IC0+IC03MDYxMjcxNDcwNTkuNjM3MjcwODQzODIwNTIwMDYxOSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDUxIGNvbXBhcmUgODAxMDgwMzMuMTI3MjQ4Mzg3MTg3MzY5MjI1MDA5MDQgLTcwNjIwNzI1NTA5Mi43NjQ1MTkyMzEwMDc4ODkyODY5IC0+IDEKK2RpdngzMDUxIGRpdmlkZSA4MDEwODAzMy4xMjcyNDgzODcxODczNjkyMjUwMDkwNCAtNzA2MjA3MjU1MDkyLjc2NDUxOTIzMTAwNzg4OTI4NjkgLT4gLTAuMDAwMTEzNDM0MTY5MDA1NzA2MDEwNTMyNTM5Nzg2Mzk5NiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDUxIGRpdmlkZWludCA4MDEwODAzMy4xMjcyNDgzODcxODczNjkyMjUwMDkwNCAtNzA2MjA3MjU1MDkyLjc2NDUxOTIzMTAwNzg4OTI4NjkgLT4gLTAKK211bHgzMDUxIG11bHRpcGx5IDgwMTA4MDMzLjEyNzI0ODM4NzE4NzM2OTIyNTAwOTA0IC03MDYyMDcyNTUwOTIuNzY0NTE5MjMxMDA3ODg5Mjg2OSAtPiAtNTY1NzI4NzQxODU2NzQzMzIzOTguMzYwMDQxMTQzNzIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA1MSBwb3dlciA4MDEwODAzMy4xMjcyNDgzODcxODczNjkyMjUwMDkwNCAtNyAtPiA0LjcyMzUzOTE0NTA0MjMzNjQ4MzAwODY3NDA2MDMyNEUtNTYgSW5leGFjdCBSb3VuZGVkCityZW14MzA1MSByZW1haW5kZXIgODAxMDgwMzMuMTI3MjQ4Mzg3MTg3MzY5MjI1MDA5MDQgLTcwNjIwNzI1NTA5Mi43NjQ1MTkyMzEwMDc4ODkyODY5IC0+IDgwMTA4MDMzLjEyNzI0ODM4NzE4NzM2OTIyNTAwOTA0CitzdWJ4MzA1MSBzdWJ0cmFjdCA4MDEwODAzMy4xMjcyNDgzODcxODczNjkyMjUwMDkwNCAtNzA2MjA3MjU1MDkyLjc2NDUxOTIzMTAwNzg4OTI4NjkgLT4gNzA2Mjg3MzYzMTI1Ljg5MTc2NzYxODE5NTI1ODUxMTkgSW5leGFjdCBSb3VuZGVkCithZGR4MzA1MiBhZGQgLTM3OTQyODQ2MjgyLjc2MTAxNjYzNzg5MDU5MDAzNTA1IC01LjY0OTQ1NjA1Mzk0Mjg1MDM1MTMxMzg2OTk4MzE5NyAtPiAtMzc5NDI4NDYyODguNDEwNDcyNjkxODMzNDQwMzg2MzYgSW5leGFjdCBSb3VuZGVkCitjb214MzA1MiBjb21wYXJlIC0zNzk0Mjg0NjI4Mi43NjEwMTY2Mzc4OTA1OTAwMzUwNSAtNS42NDk0NTYwNTM5NDI4NTAzNTEzMTM4Njk5ODMxOTcgLT4gLTEKK2RpdngzMDUyIGRpdmlkZSAtMzc5NDI4NDYyODIuNzYxMDE2NjM3ODkwNTkwMDM1MDUgLTUuNjQ5NDU2MDUzOTQyODUwMzUxMzEzODY5OTgzMTk3IC0+IDY3MTYxOTQ2MDcuMTM5MjI0NzM1MDMyNTY2MzI4OTYwIEluZXhhY3QgUm91bmRlZAorZHZpeDMwNTIgZGl2aWRlaW50IC0zNzk0Mjg0NjI4Mi43NjEwMTY2Mzc4OTA1OTAwMzUwNSAtNS42NDk0NTYwNTM5NDI4NTAzNTEzMTM4Njk5ODMxOTcgLT4gNjcxNjE5NDYwNworbXVseDMwNTIgbXVsdGlwbHkgLTM3OTQyODQ2MjgyLjc2MTAxNjYzNzg5MDU5MDAzNTA1IC01LjY0OTQ1NjA1Mzk0Mjg1MDM1MTMxMzg2OTk4MzE5NyAtPiAyMTQzNTY0NDI2MzUuOTY3MjAwOTQ0OTE0MDkzMzM2NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDUyIHBvd2VyIC0zNzk0Mjg0NjI4Mi43NjEwMTY2Mzc4OTA1OTAwMzUwNSAtNiAtPiAzLjM1MTM1NTk4NjM4MjY0NjA0Njc3MzAwODc1Mzg4NUUtNjQgSW5leGFjdCBSb3VuZGVkCityZW14MzA1MiByZW1haW5kZXIgLTM3OTQyODQ2MjgyLjc2MTAxNjYzNzg5MDU5MDAzNTA1IC01LjY0OTQ1NjA1Mzk0Mjg1MDM1MTMxMzg2OTk4MzE5NyAtPiAtMC43ODY1NDQwMjIxODgzMjEwODk2MDMxMjc5ODE0MjEKK3N1YngzMDUyIHN1YnRyYWN0IC0zNzk0Mjg0NjI4Mi43NjEwMTY2Mzc4OTA1OTAwMzUwNSAtNS42NDk0NTYwNTM5NDI4NTAzNTEzMTM4Njk5ODMxOTcgLT4gLTM3OTQyODQ2Mjc3LjExMTU2MDU4Mzk0NzczOTY4Mzc0IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNTMgYWRkIDkyNjU5NjMyMTE1MzA1LjEzNzM1NDM3NzI4NDQ1NTQxIDY0ODM0MzguMzE3ODYyODUxNjc2NDY4MDk0MjYxNDEwRS0xMzkgLT4gOTI2NTk2MzIxMTUzMDUuMTM3MzU0Mzc3Mjg0NDU1NDEgSW5leGFjdCBSb3VuZGVkCitjb214MzA1MyBjb21wYXJlIDkyNjU5NjMyMTE1MzA1LjEzNzM1NDM3NzI4NDQ1NTQxIDY0ODM0MzguMzE3ODYyODUxNjc2NDY4MDk0MjYxNDEwRS0xMzkgLT4gMQorZGl2eDMwNTMgZGl2aWRlIDkyNjU5NjMyMTE1MzA1LjEzNzM1NDM3NzI4NDQ1NTQxIDY0ODM0MzguMzE3ODYyODUxNjc2NDY4MDk0MjYxNDEwRS0xMzkgLT4gMS40MjkxNzQyNjc5MTkxMzU3MTA0MTA1MjkyMTE3OTFFKzE0NiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDUzIGRpdmlkZWludCA5MjY1OTYzMjExNTMwNS4xMzczNTQzNzcyODQ0NTU0MSA2NDgzNDM4LjMxNzg2Mjg1MTY3NjQ2ODA5NDI2MTQxMEUtMTM5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzA1MyBtdWx0aXBseSA5MjY1OTYzMjExNTMwNS4xMzczNTQzNzcyODQ0NTU0MSA2NDgzNDM4LjMxNzg2Mjg1MTY3NjQ2ODA5NDI2MTQxMEUtMTM5IC0+IDYuMDA3NTMwMDkzNzU0NDQ2MDg1ODE5MjU1OTg3ODc4RS0xMTkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA1MyBwb3dlciA5MjY1OTYzMjExNTMwNS4xMzczNTQzNzcyODQ0NTU0MSA2IC0+IDYuMzI5MTIxNDUxOTUzNDYxNTQ2Njk2MDUxNTYzMzIzRSs4MyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDUzIHJlbWFpbmRlciA5MjY1OTYzMjExNTMwNS4xMzczNTQzNzcyODQ0NTU0MSA2NDgzNDM4LjMxNzg2Mjg1MTY3NjQ2ODA5NDI2MTQxMEUtMTM5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzA1MyBzdWJ0cmFjdCA5MjY1OTYzMjExNTMwNS4xMzczNTQzNzcyODQ0NTU0MSA2NDgzNDM4LjMxNzg2Mjg1MTY3NjQ2ODA5NDI2MTQxMEUtMTM5IC0+IDkyNjU5NjMyMTE1MzA1LjEzNzM1NDM3NzI4NDQ1NTQxIEluZXhhY3QgUm91bmRlZAorYWRkeDMwNTQgYWRkIDI4Mzg5NDguNTg5ODM3NTk1NDk0MTUyMTUwNjQ3MTk0IDU2OTU0NzAyNjI0Ny41NDY5NTYzNzAxNDE1NzE1OTYwIC0+IDU2OTU0OTg2NTE5Ni4xMzY3OTM5NjU2MzU3MjM3NDY2IEluZXhhY3QgUm91bmRlZAorY29teDMwNTQgY29tcGFyZSAyODM4OTQ4LjU4OTgzNzU5NTQ5NDE1MjE1MDY0NzE5NCA1Njk1NDcwMjYyNDcuNTQ2OTU2MzcwMTQxNTcxNTk2MCAtPiAtMQorZGl2eDMwNTQgZGl2aWRlIDI4Mzg5NDguNTg5ODM3NTk1NDk0MTUyMTUwNjQ3MTk0IDU2OTU0NzAyNjI0Ny41NDY5NTYzNzAxNDE1NzE1OTYwIC0+IDAuMDAwMDA0OTg0NTcyNzU1MTk4MDU3NDgxOTA3MjgxMDgwNDA2IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNTQgZGl2aWRlaW50IDI4Mzg5NDguNTg5ODM3NTk1NDk0MTUyMTUwNjQ3MTk0IDU2OTU0NzAyNjI0Ny41NDY5NTYzNzAxNDE1NzE1OTYwIC0+IDAKK211bHgzMDU0IG11bHRpcGx5IDI4Mzg5NDguNTg5ODM3NTk1NDk0MTUyMTUwNjQ3MTk0IDU2OTU0NzAyNjI0Ny41NDY5NTYzNzAxNDE1NzE1OTYwIC0+IDE2MTY5MTQ3MjcwMTE2Njk0MTkuMzkwOTU5OTg0MjczIEluZXhhY3QgUm91bmRlZAorcG93eDMwNTQgcG93ZXIgMjgzODk0OC41ODk4Mzc1OTU0OTQxNTIxNTA2NDcxOTQgNiAtPiA1LjIzNTM0MzMzNDk4NjA1OTc1MzA5Njg4NDA4MDY3M0UrMzggSW5leGFjdCBSb3VuZGVkCityZW14MzA1NCByZW1haW5kZXIgMjgzODk0OC41ODk4Mzc1OTU0OTQxNTIxNTA2NDcxOTQgNTY5NTQ3MDI2MjQ3LjU0Njk1NjM3MDE0MTU3MTU5NjAgLT4gMjgzODk0OC41ODk4Mzc1OTU0OTQxNTIxNTA2NDcxOTQKK3N1YngzMDU0IHN1YnRyYWN0IDI4Mzg5NDguNTg5ODM3NTk1NDk0MTUyMTUwNjQ3MTk0IDU2OTU0NzAyNjI0Ny41NDY5NTYzNzAxNDE1NzE1OTYwIC0+IC01Njk1NDQxODcyOTguOTU3MTE4Nzc0NjQ3NDE5NDQ1NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDU1IGFkZCA1MjQ5OTUyMDQ1MjMuNjA1MzMwNzk0MTc3NTc5NDI4N0UrNjk0IDE1ODk2MDA4Nzk2ODk1MTcxMDA1MjcyOTMwMjg1NTMgLT4gNS4yNDk5NTIwNDUyMzYwNTMzMDc5NDE3NzU3OTQyODdFKzcwNSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDU1IGNvbXBhcmUgNTI0OTk1MjA0NTIzLjYwNTMzMDc5NDE3NzU3OTQyODdFKzY5NCAxNTg5NjAwODc5Njg5NTE3MTAwNTI3MjkzMDI4NTUzIC0+IDEKK2RpdngzMDU1IGRpdmlkZSA1MjQ5OTUyMDQ1MjMuNjA1MzMwNzk0MTc3NTc5NDI4N0UrNjk0IDE1ODk2MDA4Nzk2ODk1MTcxMDA1MjcyOTMwMjg1NTMgLT4gMy4zMDI2ODU2NjkyODY2NzA3MDg1NTQ3NTMxMzkyMzNFKzY3NSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDU1IGRpdmlkZWludCA1MjQ5OTUyMDQ1MjMuNjA1MzMwNzk0MTc3NTc5NDI4N0UrNjk0IDE1ODk2MDA4Nzk2ODk1MTcxMDA1MjcyOTMwMjg1NTMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDU1IG11bHRpcGx5IDUyNDk5NTIwNDUyMy42MDUzMzA3OTQxNzc1Nzk0Mjg3RSs2OTQgMTU4OTYwMDg3OTY4OTUxNzEwMDUyNzI5MzAyODU1MyAtPiA4LjM0NTMyODM4OTQzNTAwOTgxMjkzMzU5OTg4OTQ0N0UrNzM1IEluZXhhY3QgUm91bmRlZAorcG93eDMwNTUgcG93ZXIgNTI0OTk1MjA0NTIzLjYwNTMzMDc5NDE3NzU3OTQyODdFKzY5NCAyIC0+IDIuNzU2MTk5NjQ3NzI3ODIxOTExODU3MTYwMjMwODQ5RSsxNDExIEluZXhhY3QgUm91bmRlZAorcmVteDMwNTUgcmVtYWluZGVyIDUyNDk5NTIwNDUyMy42MDUzMzA3OTQxNzc1Nzk0Mjg3RSs2OTQgMTU4OTYwMDg3OTY4OTUxNzEwMDUyNzI5MzAyODU1MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMwNTUgc3VidHJhY3QgNTI0OTk1MjA0NTIzLjYwNTMzMDc5NDE3NzU3OTQyODdFKzY5NCAxNTg5NjAwODc5Njg5NTE3MTAwNTI3MjkzMDI4NTUzIC0+IDUuMjQ5OTUyMDQ1MjM2MDUzMzA3OTQxNzc1Nzk0Mjg3RSs3MDUgSW5leGFjdCBSb3VuZGVkCithZGR4MzA1NiBhZGQgLTU3MTMxNTczNjc3NDUyLjE1NDQ5OTIxNzI1MDk3MjkwIDQ2Njk2ODE0MzA3MzYuMzI2ODU4NTA4NzE1NjQzNzY5IC0+IC01MjQ2MTg5MjI0NjcxNS44Mjc2NDA3MDg1MzUzMjkxMyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDU2IGNvbXBhcmUgLTU3MTMxNTczNjc3NDUyLjE1NDQ5OTIxNzI1MDk3MjkwIDQ2Njk2ODE0MzA3MzYuMzI2ODU4NTA4NzE1NjQzNzY5IC0+IC0xCitkaXZ4MzA1NiBkaXZpZGUgLTU3MTMxNTczNjc3NDUyLjE1NDQ5OTIxNzI1MDk3MjkwIDQ2Njk2ODE0MzA3MzYuMzI2ODU4NTA4NzE1NjQzNzY5IC0+IC0xMi4yMzQ1NzYyODIxMDA1NzczMzY0MzU3NTE0MzY5NCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDU2IGRpdmlkZWludCAtNTcxMzE1NzM2Nzc0NTIuMTU0NDk5MjE3MjUwOTcyOTAgNDY2OTY4MTQzMDczNi4zMjY4NTg1MDg3MTU2NDM3NjkgLT4gLTEyCittdWx4MzA1NiBtdWx0aXBseSAtNTcxMzE1NzM2Nzc0NTIuMTU0NDk5MjE3MjUwOTcyOTAgNDY2OTY4MTQzMDczNi4zMjY4NTg1MDg3MTU2NDM3NjkgLT4gLTI2Njc4NjI0ODcxMDM0MjY0Nzc0NjA2MzMyMi4wNTQ0IEluZXhhY3QgUm91bmRlZAorcG93eDMwNTYgcG93ZXIgLTU3MTMxNTczNjc3NDUyLjE1NDQ5OTIxNzI1MDk3MjkwIDUgLT4gLTYuMDg2Njg2NTAzNzUyNjc5Mzc1NDMwMDE5NTAzNjc5RSs2OCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDU2IHJlbWFpbmRlciAtNTcxMzE1NzM2Nzc0NTIuMTU0NDk5MjE3MjUwOTcyOTAgNDY2OTY4MTQzMDczNi4zMjY4NTg1MDg3MTU2NDM3NjkgLT4gLTEwOTUzOTY1MDg2MTYuMjMyMTk3MTEyNjYzMjQ3NjcyCitzdWJ4MzA1NiBzdWJ0cmFjdCAtNTcxMzE1NzM2Nzc0NTIuMTU0NDk5MjE3MjUwOTcyOTAgNDY2OTY4MTQzMDczNi4zMjY4NTg1MDg3MTU2NDM3NjkgLT4gLTYxODAxMjU1MTA4MTg4LjQ4MTM1NzcyNTk2NjYxNjY3IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNTcgYWRkIDkwNzk0ODI2LjU1NTI4MDE4NzgxODMwNDYzMzgzNDExIC01LjQ3MTUwMjI3MDM1MTIzMTExMDAyNzY0NzIxNjEyOCAtPiA5MDc5NDgyMS4wODM3Nzc5MTc0NjcwNzM1MjM4MDY0NiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDU3IGNvbXBhcmUgOTA3OTQ4MjYuNTU1MjgwMTg3ODE4MzA0NjMzODM0MTEgLTUuNDcxNTAyMjcwMzUxMjMxMTEwMDI3NjQ3MjE2MTI4IC0+IDEKK2RpdngzMDU3IGRpdmlkZSA5MDc5NDgyNi41NTUyODAxODc4MTgzMDQ2MzM4MzQxMSAtNS40NzE1MDIyNzAzNTEyMzExMTAwMjc2NDcyMTYxMjggLT4gLTE2NTk0MTMxLjIwMzY1MDU0OTI4NDI4MzEzMjMyMjQ2IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNTcgZGl2aWRlaW50IDkwNzk0ODI2LjU1NTI4MDE4NzgxODMwNDYzMzgzNDExIC01LjQ3MTUwMjI3MDM1MTIzMTExMDAyNzY0NzIxNjEyOCAtPiAtMTY1OTQxMzEKK211bHgzMDU3IG11bHRpcGx5IDkwNzk0ODI2LjU1NTI4MDE4NzgxODMwNDYzMzgzNDExIC01LjQ3MTUwMjI3MDM1MTIzMTExMDAyNzY0NzIxNjEyOCAtPiAtNDk2Nzg0MDk5LjYzMzM2MTc5NTg0OTY1ODkxMjQ5NjQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA1NyBwb3dlciA5MDc5NDgyNi41NTUyODAxODc4MTgzMDQ2MzM4MzQxMSAtNSAtPiAxLjYyMDY2OTU5MDUzMjg1NjUyMzU2NTc0Mjk1Mzk5N0UtNDAgSW5leGFjdCBSb3VuZGVkCityZW14MzA1NyByZW1haW5kZXIgOTA3OTQ4MjYuNTU1MjgwMTg3ODE4MzA0NjMzODM0MTEgLTUuNDcxNTAyMjcwMzUxMjMxMTEwMDI3NjQ3MjE2MTI4IC0+IDEuMTE0Mjc0NDQyNzY3MjMwNDQyMzA3ODk2NjU1MjMyCitzdWJ4MzA1NyBzdWJ0cmFjdCA5MDc5NDgyNi41NTUyODAxODc4MTgzMDQ2MzM4MzQxMSAtNS40NzE1MDIyNzAzNTEyMzExMTAwMjc2NDcyMTYxMjggLT4gOTA3OTQ4MzIuMDI2NzgyNDU4MTY5NTM1NzQzODYxNzYgSW5leGFjdCBSb3VuZGVkCithZGR4MzA1OCBhZGQgNTg1MDg3OTQ3MjkuMzUxOTExNjA4NDA5ODA0ODkxMzggLTQ3MDYwODY3LjI0OTg4Mjc5NjgwODI0Mzk3NDQ3NTUxIC0+IDU4NDYxNzMzODYyLjEwMjAyODgxMTYwMTU2MDkxNjkwIEluZXhhY3QgUm91bmRlZAorY29teDMwNTggY29tcGFyZSA1ODUwODc5NDcyOS4zNTE5MTE2MDg0MDk4MDQ4OTEzOCAtNDcwNjA4NjcuMjQ5ODgyNzk2ODA4MjQzOTc0NDc1NTEgLT4gMQorZGl2eDMwNTggZGl2aWRlIDU4NTA4Nzk0NzI5LjM1MTkxMTYwODQwOTgwNDg5MTM4IC00NzA2MDg2Ny4yNDk4ODI3OTY4MDgyNDM5NzQ0NzU1MSAtPiAtMTI0My4yNTc4OTQ0NzcwMjE2Nzg4MDkzMzc4NzUzMDQgSW5leGFjdCBSb3VuZGVkCitkdml4MzA1OCBkaXZpZGVpbnQgNTg1MDg3OTQ3MjkuMzUxOTExNjA4NDA5ODA0ODkxMzggLTQ3MDYwODY3LjI0OTg4Mjc5NjgwODI0Mzk3NDQ3NTUxIC0+IC0xMjQzCittdWx4MzA1OCBtdWx0aXBseSA1ODUwODc5NDcyOS4zNTE5MTE2MDg0MDk4MDQ4OTEzOCAtNDcwNjA4NjcuMjQ5ODgyNzk2ODA4MjQzOTc0NDc1NTEgLT4gLTI3NTM0NzQ2MjE3MDg2NzI1NzMuMjQ5MDI5NjQzOTY3IEluZXhhY3QgUm91bmRlZAorcG93eDMwNTggcG93ZXIgNTg1MDg3OTQ3MjkuMzUxOTExNjA4NDA5ODA0ODkxMzggLTQ3MDYwODY3IC0+IDBFLTEwMDI5IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMDU4IHJlbWFpbmRlciA1ODUwODc5NDcyOS4zNTE5MTE2MDg0MDk4MDQ4OTEzOCAtNDcwNjA4NjcuMjQ5ODgyNzk2ODA4MjQzOTc0NDc1NTEgLT4gMTIxMzY3MzcuNzQ3NTk1MTc1NzYyNTQ0NjE4MzIxMDcKK3N1YngzMDU4IHN1YnRyYWN0IDU4NTA4Nzk0NzI5LjM1MTkxMTYwODQwOTgwNDg5MTM4IC00NzA2MDg2Ny4yNDk4ODI3OTY4MDgyNDM5NzQ0NzU1MSAtPiA1ODU1NTg1NTU5Ni42MDE3OTQ0MDUyMTgwNDg4NjU4NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDU5IGFkZCAtNzQ2MTA0LjA3NjgwNzg0NzQ0MjY0NjQyMTk0MTYzMzJFKzAwNiA5NTk1NDE4LjMwMDYxMzc1NDU1NjY3MTg1MjgwMTY2N0UrMzg1IC0+IDkuNTk1NDE4MzAwNjEzNzU0NTU2NjcxODUyODAxNjY3RSszOTEgSW5leGFjdCBSb3VuZGVkCitjb214MzA1OSBjb21wYXJlIC03NDYxMDQuMDc2ODA3ODQ3NDQyNjQ2NDIxOTQxNjMzMkUrMDA2IDk1OTU0MTguMzAwNjEzNzU0NTU2NjcxODUyODAxNjY3RSszODUgLT4gLTEKK2RpdngzMDU5IGRpdmlkZSAtNzQ2MTA0LjA3NjgwNzg0NzQ0MjY0NjQyMTk0MTYzMzJFKzAwNiA5NTk1NDE4LjMwMDYxMzc1NDU1NjY3MTg1MjgwMTY2N0UrMzg1IC0+IC03Ljc3NTYyODQ2NTkzMjc4OTcwMDU0Nzg3MjUxMTc0NUUtMzgxIEluZXhhY3QgUm91bmRlZAorZHZpeDMwNTkgZGl2aWRlaW50IC03NDYxMDQuMDc2ODA3ODQ3NDQyNjQ2NDIxOTQxNjMzMkUrMDA2IDk1OTU0MTguMzAwNjEzNzU0NTU2NjcxODUyODAxNjY3RSszODUgLT4gLTAKK211bHgzMDU5IG11bHRpcGx5IC03NDYxMDQuMDc2ODA3ODQ3NDQyNjQ2NDIxOTQxNjMzMkUrMDA2IDk1OTU0MTguMzAwNjEzNzU0NTU2NjcxODUyODAxNjY3RSszODUgLT4gLTcuMTU5MTgwNzEyNzY0NTQ5NzExNjY5OTM5OTQ3MDg0RSs0MDMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA1OSBwb3dlciAtNzQ2MTA0LjA3NjgwNzg0NzQ0MjY0NjQyMTk0MTYzMzJFKzAwNiAxMCAtPiA1LjM0NTU3MTM0NjMwMjU4Mjg4MjgwNTAzNTk5NjY5NkUrMTE4IEluZXhhY3QgUm91bmRlZAorcmVteDMwNTkgcmVtYWluZGVyIC03NDYxMDQuMDc2ODA3ODQ3NDQyNjQ2NDIxOTQxNjMzMkUrMDA2IDk1OTU0MTguMzAwNjEzNzU0NTU2NjcxODUyODAxNjY3RSszODUgLT4gLTc0NjEwNDA3NjgwNy44NDc0NDI2NDY0MjE5NDE2MzMyCitzdWJ4MzA1OSBzdWJ0cmFjdCAtNzQ2MTA0LjA3NjgwNzg0NzQ0MjY0NjQyMTk0MTYzMzJFKzAwNiA5NTk1NDE4LjMwMDYxMzc1NDU1NjY3MTg1MjgwMTY2N0UrMzg1IC0+IC05LjU5NTQxODMwMDYxMzc1NDU1NjY3MTg1MjgwMTY2N0UrMzkxIEluZXhhY3QgUm91bmRlZAorYWRkeDMwNjAgYWRkIDU1Ljk5NDI3NjMyNjg4Mzg3NDAwNDAzNzg5NjU5NDU5RSsxMTkgLTkuMTcwNTMwNDUwODgxNjEyODUzOTk4NDg5MzQwMTI3IC0+IDUuNTk5NDI3NjMyNjg4Mzg3NDAwNDAzNzg5NjU5NDU5RSsxMjAgSW5leGFjdCBSb3VuZGVkCitjb214MzA2MCBjb21wYXJlIDU1Ljk5NDI3NjMyNjg4Mzg3NDAwNDAzNzg5NjU5NDU5RSsxMTkgLTkuMTcwNTMwNDUwODgxNjEyODUzOTk4NDg5MzQwMTI3IC0+IDEKK2RpdngzMDYwIGRpdmlkZSA1NS45OTQyNzYzMjY4ODM4NzQwMDQwMzc4OTY1OTQ1OUUrMTE5IC05LjE3MDUzMDQ1MDg4MTYxMjg1Mzk5ODQ4OTM0MDEyNyAtPiAtNi4xMDU4OTI4NTE3NTk4MjgxNzY2NTU2ODUxMTE0OTFFKzExOSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDYwIGRpdmlkZWludCA1NS45OTQyNzYzMjY4ODM4NzQwMDQwMzc4OTY1OTQ1OUUrMTE5IC05LjE3MDUzMDQ1MDg4MTYxMjg1Mzk5ODQ4OTM0MDEyNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwNjAgbXVsdGlwbHkgNTUuOTk0Mjc2MzI2ODgzODc0MDA0MDM3ODk2NTk0NTlFKzExOSAtOS4xNzA1MzA0NTA4ODE2MTI4NTM5OTg0ODkzNDAxMjcgLT4gLTUuMTM0OTcyMTYxMzA3Njc5OTM5MjgxMTcwOTQ0NTU2RSsxMjEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA2MCBwb3dlciA1NS45OTQyNzYzMjY4ODM4NzQwMDQwMzc4OTY1OTQ1OUUrMTE5IC05IC0+IDEuODQ4MDIyNTg0NzY0Mzg0MDc3NjcyMDQxMDU2Mzk2RS0xMDg3IEluZXhhY3QgUm91bmRlZAorcmVteDMwNjAgcmVtYWluZGVyIDU1Ljk5NDI3NjMyNjg4Mzg3NDAwNDAzNzg5NjU5NDU5RSsxMTkgLTkuMTcwNTMwNDUwODgxNjEyODUzOTk4NDg5MzQwMTI3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzA2MCBzdWJ0cmFjdCA1NS45OTQyNzYzMjY4ODM4NzQwMDQwMzc4OTY1OTQ1OUUrMTE5IC05LjE3MDUzMDQ1MDg4MTYxMjg1Mzk5ODQ4OTM0MDEyNyAtPiA1LjU5OTQyNzYzMjY4ODM4NzQwMDQwMzc4OTY1OTQ1OUUrMTIwIEluZXhhY3QgUm91bmRlZAorYWRkeDMwNjEgYWRkIC00MTIxNDI2NTYyOC44MzgwMTI0MTQ2NzMxNzI3MDU5NSAxMDE1MzM2MzIzNzk4Mzg5OTAzMzYxOTc4MjcxMzU0IC0+IDEwMTUzMzYzMjM3OTgzODk5MDMzMjA3NjQwMDU3MjUgSW5leGFjdCBSb3VuZGVkCitjb214MzA2MSBjb21wYXJlIC00MTIxNDI2NTYyOC44MzgwMTI0MTQ2NzMxNzI3MDU5NSAxMDE1MzM2MzIzNzk4Mzg5OTAzMzYxOTc4MjcxMzU0IC0+IC0xCitkaXZ4MzA2MSBkaXZpZGUgLTQxMjE0MjY1NjI4LjgzODAxMjQxNDY3MzE3MjcwNTk1IDEwMTUzMzYzMjM3OTgzODk5MDMzNjE5NzgyNzEzNTQgLT4gLTQuMDU5MTczNzU5NzUwMzQyMjQ3NjIwNzA2Mzg0MDI3RS0yMCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDYxIGRpdmlkZWludCAtNDEyMTQyNjU2MjguODM4MDEyNDE0NjczMTcyNzA1OTUgMTAxNTMzNjMyMzc5ODM4OTkwMzM2MTk3ODI3MTM1NCAtPiAtMAorbXVseDMwNjEgbXVsdGlwbHkgLTQxMjE0MjY1NjI4LjgzODAxMjQxNDY3MzE3MjcwNTk1IDEwMTUzMzYzMjM3OTgzODk5MDMzNjE5NzgyNzEzNTQgLT4gLTQuMTg0NjM0MDk1MTYzNDcyMzg0MDI4NTQ5Mzc4MzkyRSs0MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDYxIHBvd2VyIC00MTIxNDI2NTYyOC44MzgwMTI0MTQ2NzMxNzI3MDU5NSAxIC0+IC00MTIxNDI2NTYyOC44MzgwMTI0MTQ2NzMxNzI3MDU5NQorcmVteDMwNjEgcmVtYWluZGVyIC00MTIxNDI2NTYyOC44MzgwMTI0MTQ2NzMxNzI3MDU5NSAxMDE1MzM2MzIzNzk4Mzg5OTAzMzYxOTc4MjcxMzU0IC0+IC00MTIxNDI2NTYyOC44MzgwMTI0MTQ2NzMxNzI3MDU5NQorc3VieDMwNjEgc3VidHJhY3QgLTQxMjE0MjY1NjI4LjgzODAxMjQxNDY3MzE3MjcwNTk1IDEwMTUzMzYzMjM3OTgzODk5MDMzNjE5NzgyNzEzNTQgLT4gLTEwMTUzMzYzMjM3OTgzODk5MDM0MDMxOTI1MzY5ODMgSW5leGFjdCBSb3VuZGVkCithZGR4MzA2MiBhZGQgODk5MzcuMzk3NDkyMDEwOTU1NzAzNTc1NTc0MzA4MjIgODIzNTE1NTQyMTAwOTMuNjA4Nzk0NzYwMjc4MDAzMzEgLT4gODIzNTE1NTQzMDAwMzEuMDA2Mjg2NzcxMjMzNzA2ODkgSW5leGFjdCBSb3VuZGVkCitjb214MzA2MiBjb21wYXJlIDg5OTM3LjM5NzQ5MjAxMDk1NTcwMzU3NTU3NDMwODIyIDgyMzUxNTU0MjEwMDkzLjYwODc5NDc2MDI3ODAwMzMxIC0+IC0xCitkaXZ4MzA2MiBkaXZpZGUgODk5MzcuMzk3NDkyMDEwOTU1NzAzNTc1NTc0MzA4MjIgODIzNTE1NTQyMTAwOTMuNjA4Nzk0NzYwMjc4MDAzMzEgLT4gMS4wOTIxMTUzNjI2NjI5MTM0MTU1OTI5MzA5ODIxMjlFLTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzA2MiBkaXZpZGVpbnQgODk5MzcuMzk3NDkyMDEwOTU1NzAzNTc1NTc0MzA4MjIgODIzNTE1NTQyMTAwOTMuNjA4Nzk0NzYwMjc4MDAzMzEgLT4gMAorbXVseDMwNjIgbXVsdGlwbHkgODk5MzcuMzk3NDkyMDEwOTU1NzAzNTc1NTc0MzA4MjIgODIzNTE1NTQyMTAwOTMuNjA4Nzk0NzYwMjc4MDAzMzEgLT4gNzQwNjQ4NDQ2NTA3ODA3NzE5MS45MjAwMTU3OTM2NjIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA2MiBwb3dlciA4OTkzNy4zOTc0OTIwMTA5NTU3MDM1NzU1NzQzMDgyMiA4IC0+IDQuMjgwNzc2MjY3NzIzOTEzMDQzMDUwMTAwOTM0MjkxRSszOSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDYyIHJlbWFpbmRlciA4OTkzNy4zOTc0OTIwMTA5NTU3MDM1NzU1NzQzMDgyMiA4MjM1MTU1NDIxMDA5My42MDg3OTQ3NjAyNzgwMDMzMSAtPiA4OTkzNy4zOTc0OTIwMTA5NTU3MDM1NzU1NzQzMDgyMgorc3VieDMwNjIgc3VidHJhY3QgODk5MzcuMzk3NDkyMDEwOTU1NzAzNTc1NTc0MzA4MjIgODIzNTE1NTQyMTAwOTMuNjA4Nzk0NzYwMjc4MDAzMzEgLT4gLTgyMzUxNTU0MTIwMTU2LjIxMTMwMjc0OTMyMjI5OTczIEluZXhhY3QgUm91bmRlZAorYWRkeDMwNjMgYWRkIDAxNzEyNjYxLjY0Njc3MDgyMTU2Mjg0MTI1NDg2OTQzRSszNTkgNTc5MzIuNzg0MzU1Mjk0ODMyNDE1NTIwNDIxMTU4MzdFLTAzNyAtPiAxLjcxMjY2MTY0Njc3MDgyMTU2Mjg0MTI1NDg2OTQzMEUrMzY1IEluZXhhY3QgUm91bmRlZAorY29teDMwNjMgY29tcGFyZSAwMTcxMjY2MS42NDY3NzA4MjE1NjI4NDEyNTQ4Njk0M0UrMzU5IDU3OTMyLjc4NDM1NTI5NDgzMjQxNTUyMDQyMTE1ODM3RS0wMzcgLT4gMQorZGl2eDMwNjMgZGl2aWRlIDAxNzEyNjYxLjY0Njc3MDgyMTU2Mjg0MTI1NDg2OTQzRSszNTkgNTc5MzIuNzg0MzU1Mjk0ODMyNDE1NTIwNDIxMTU4MzdFLTAzNyAtPiAyLjk1NjI5MDkyNTQ3NTQxNDE4NTk2MDk5OTc4ODg0OEUrMzk3IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNjMgZGl2aWRlaW50IDAxNzEyNjYxLjY0Njc3MDgyMTU2Mjg0MTI1NDg2OTQzRSszNTkgNTc5MzIuNzg0MzU1Mjk0ODMyNDE1NTIwNDIxMTU4MzdFLTAzNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwNjMgbXVsdGlwbHkgMDE3MTI2NjEuNjQ2NzcwODIxNTYyODQxMjU0ODY5NDNFKzM1OSA1NzkzMi43ODQzNTUyOTQ4MzI0MTU1MjA0MjExNTgzN0UtMDM3IC0+IDkuOTIxOTI1Nzg1NTk1ODEzNTg3NjU1MzEyMzA3OTMwRSszMzIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA2MyBwb3dlciAwMTcxMjY2MS42NDY3NzA4MjE1NjI4NDEyNTQ4Njk0M0UrMzU5IDYgLT4gMi41MjM2NTE4MDMzMjMwNDc3MTE3MzU1MDE5NDQ5NTlFKzIxOTEgSW5leGFjdCBSb3VuZGVkCityZW14MzA2MyByZW1haW5kZXIgMDE3MTI2NjEuNjQ2NzcwODIxNTYyODQxMjU0ODY5NDNFKzM1OSA1NzkzMi43ODQzNTUyOTQ4MzI0MTU1MjA0MjExNTgzN0UtMDM3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzA2MyBzdWJ0cmFjdCAwMTcxMjY2MS42NDY3NzA4MjE1NjI4NDEyNTQ4Njk0M0UrMzU5IDU3OTMyLjc4NDM1NTI5NDgzMjQxNTUyMDQyMTE1ODM3RS0wMzcgLT4gMS43MTI2NjE2NDY3NzA4MjE1NjI4NDEyNTQ4Njk0MzBFKzM2NSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDY0IGFkZCAtMjY0NzU5MzMwNi41Mjg2MTc2OTEzNzM0NzAwNTkyMTMgLTY1NTUzMTU1ODcwOS40NTgyMTY4OTMwMTkxMDE0NDYxIC0+IC02NTgxNzkxNTIwMTUuOTg2ODM0NTg0MzkyNTcxNTA1MyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDY0IGNvbXBhcmUgLTI2NDc1OTMzMDYuNTI4NjE3NjkxMzczNDcwMDU5MjEzIC02NTU1MzE1NTg3MDkuNDU4MjE2ODkzMDE5MTAxNDQ2MSAtPiAxCitkaXZ4MzA2NCBkaXZpZGUgLTI2NDc1OTMzMDYuNTI4NjE3NjkxMzczNDcwMDU5MjEzIC02NTU1MzE1NTg3MDkuNDU4MjE2ODkzMDE5MTAxNDQ2MSAtPiAwLjAwNDAzODg0OTQ5NzU2MDMwMzE1ODYzOTE5Mjg5NTU0NCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDY0IGRpdmlkZWludCAtMjY0NzU5MzMwNi41Mjg2MTc2OTEzNzM0NzAwNTkyMTMgLTY1NTUzMTU1ODcwOS40NTgyMTY4OTMwMTkxMDE0NDYxIC0+IDAKK211bHgzMDY0IG11bHRpcGx5IC0yNjQ3NTkzMzA2LjUyODYxNzY5MTM3MzQ3MDA1OTIxMyAtNjU1NTMxNTU4NzA5LjQ1ODIxNjg5MzAxOTEwMTQ0NjEgLT4gMTczNTU4MDk2NzA1NzQzMzE1MzEyMC4wOTk2NDM2NDEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA2NCBwb3dlciAtMjY0NzU5MzMwNi41Mjg2MTc2OTEzNzM0NzAwNTkyMTMgLTcgLT4gLTEuMDk2NTgxOTE0MDA1OTAyNTgzNDEzODEwMjAxNTcxRS02NiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDY0IHJlbWFpbmRlciAtMjY0NzU5MzMwNi41Mjg2MTc2OTEzNzM0NzAwNTkyMTMgLTY1NTUzMTU1ODcwOS40NTgyMTY4OTMwMTkxMDE0NDYxIC0+IC0yNjQ3NTkzMzA2LjUyODYxNzY5MTM3MzQ3MDA1OTIxMworc3VieDMwNjQgc3VidHJhY3QgLTI2NDc1OTMzMDYuNTI4NjE3NjkxMzczNDcwMDU5MjEzIC02NTU1MzE1NTg3MDkuNDU4MjE2ODkzMDE5MTAxNDQ2MSAtPiA2NTI4ODM5NjU0MDIuOTI5NTk5MjAxNjQ1NjMxMzg2OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDY1IGFkZCAyOTA0MDc4NjkwNjY1NzY1MTE2NjAzMjUzMDk5NjY4RS0zMjkgLTcxLjQ1NTg2NjE5MTc2MDkxNTk5MjY0NzE3MDQ3ODg1RSs3ODcgLT4gLTcuMTQ1NTg2NjE5MTc2MDkxNTk5MjY0NzE3MDQ3ODg1RSs3ODggSW5leGFjdCBSb3VuZGVkCitjb214MzA2NSBjb21wYXJlIDI5MDQwNzg2OTA2NjU3NjUxMTY2MDMyNTMwOTk2NjhFLTMyOSAtNzEuNDU1ODY2MTkxNzYwOTE1OTkyNjQ3MTcwNDc4ODVFKzc4NyAtPiAxCitkaXZ4MzA2NSBkaXZpZGUgMjkwNDA3ODY5MDY2NTc2NTExNjYwMzI1MzA5OTY2OEUtMzI5IC03MS40NTU4NjYxOTE3NjA5MTU5OTI2NDcxNzA0Nzg4NUUrNzg3IC0+IC00LjA2NDE1NzE0NDAzNjcxMjMyNTA4NDQ3MjAyMjMxNkUtMTA4OCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDY1IGRpdmlkZWludCAyOTA0MDc4NjkwNjY1NzY1MTE2NjAzMjUzMDk5NjY4RS0zMjkgLTcxLjQ1NTg2NjE5MTc2MDkxNTk5MjY0NzE3MDQ3ODg1RSs3ODcgLT4gLTAKK211bHgzMDY1IG11bHRpcGx5IDI5MDQwNzg2OTA2NjU3NjUxMTY2MDMyNTMwOTk2NjhFLTMyOSAtNzEuNDU1ODY2MTkxNzYwOTE1OTkyNjQ3MTcwNDc4ODVFKzc4NyAtPiAtMi4wNzUxMzQ1ODMzMDU1NzE1Mjc5NjI3MTAwMTcyNjJFKzQ5MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDY1IHBvd2VyIDI5MDQwNzg2OTA2NjU3NjUxMTY2MDMyNTMwOTk2NjhFLTMyOSAtNyAtPiA1Ljc0MDM4OTIwODg0Mjg5NTU2MTI1MDEyODQwNzgwM0UrMjA4OSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDY1IHJlbWFpbmRlciAyOTA0MDc4NjkwNjY1NzY1MTE2NjAzMjUzMDk5NjY4RS0zMjkgLTcxLjQ1NTg2NjE5MTc2MDkxNTk5MjY0NzE3MDQ3ODg1RSs3ODcgLT4gMi45MDQwNzg2OTA2NjU3NjUxMTY2MDMyNTMwOTk2NjhFLTI5OQorc3VieDMwNjUgc3VidHJhY3QgMjkwNDA3ODY5MDY2NTc2NTExNjYwMzI1MzA5OTY2OEUtMzI5IC03MS40NTU4NjYxOTE3NjA5MTU5OTI2NDcxNzA0Nzg4NUUrNzg3IC0+IDcuMTQ1NTg2NjE5MTc2MDkxNTk5MjY0NzE3MDQ3ODg1RSs3ODggSW5leGFjdCBSb3VuZGVkCithZGR4MzA2NiBhZGQgMjIwOTQzMzg5NzIuMzkxMDk3MjY1MjI0Nzc5OTk1MTUgLTQwOTg0NjU0OTM3MS4zOTAwODA1MDM5NjY4NDE3MjAzRS00OTkgLT4gMjIwOTQzMzg5NzIuMzkxMDk3MjY1MjI0Nzc5OTk1MTUgSW5leGFjdCBSb3VuZGVkCitjb214MzA2NiBjb21wYXJlIDIyMDk0MzM4OTcyLjM5MTA5NzI2NTIyNDc3OTk5NTE1IC00MDk4NDY1NDkzNzEuMzkwMDgwNTAzOTY2ODQxNzIwM0UtNDk5IC0+IDEKK2RpdngzMDY2IGRpdmlkZSAyMjA5NDMzODk3Mi4zOTEwOTcyNjUyMjQ3Nzk5OTUxNSAtNDA5ODQ2NTQ5MzcxLjM5MDA4MDUwMzk2Njg0MTcyMDNFLTQ5OSAtPiAtNS4zOTA4ODA4MDgwMTkxNzQxOTQwMTAyMjQ3MzY5NjVFKzQ5NyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDY2IGRpdmlkZWludCAyMjA5NDMzODk3Mi4zOTEwOTcyNjUyMjQ3Nzk5OTUxNSAtNDA5ODQ2NTQ5MzcxLjM5MDA4MDUwMzk2Njg0MTcyMDNFLTQ5OSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwNjYgbXVsdGlwbHkgMjIwOTQzMzg5NzIuMzkxMDk3MjY1MjI0Nzc5OTk1MTUgLTQwOTg0NjU0OTM3MS4zOTAwODA1MDM5NjY4NDE3MjAzRS00OTkgLT4gLTkuMDU1Mjg4NTg4NDc2MzE1ODIyMTEzOTc1NDI2NzMwRS00NzggSW5leGFjdCBSb3VuZGVkCitwb3d4MzA2NiBwb3dlciAyMjA5NDMzODk3Mi4zOTEwOTcyNjUyMjQ3Nzk5OTUxNSAtNCAtPiA0LjE5NjM5MTAyMjM1NDEyMjY4NjcyNTMxNTIwOTk2N0UtNDIgSW5leGFjdCBSb3VuZGVkCityZW14MzA2NiByZW1haW5kZXIgMjIwOTQzMzg5NzIuMzkxMDk3MjY1MjI0Nzc5OTk1MTUgLTQwOTg0NjU0OTM3MS4zOTAwODA1MDM5NjY4NDE3MjAzRS00OTkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMDY2IHN1YnRyYWN0IDIyMDk0MzM4OTcyLjM5MTA5NzI2NTIyNDc3OTk5NTE1IC00MDk4NDY1NDkzNzEuMzkwMDgwNTAzOTY2ODQxNzIwM0UtNDk5IC0+IDIyMDk0MzM4OTcyLjM5MTA5NzI2NTIyNDc3OTk5NTE1IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNjcgYWRkIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC0zMzc0OTg4NTgxNjA3NTg2MDYxMTczMjQ4MzA1OTIzIEluZXhhY3QgUm91bmRlZAorY29teDMwNjcgY29tcGFyZSAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtMQorZGl2eDMwNjcgZGl2aWRlIC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC00MTAxMTQwODg4Mzc5NjgxNzc5Ny44MTMxMDk3NzAzOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDY3IGRpdmlkZWludCAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtNDEwMTE0MDg4ODM3OTY4MTc3OTcKK211bHgzMDY3IG11bHRpcGx5IC0zMzc0OTg4NTgxNjA3NTg2MDYxMjU1NTQyMjAxMDQ4IDgyMjkzODk1MTI0LjkwMDQ1MjcxNTA0ODM2NTY4NjgxIC0+IC0yLjc3NzQwOTU2MzgyNTUxMjIwMjc5MzMzNjEzMjMxMEUrNDEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA2NyBwb3dlciAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4IC0+IDEuNjgzMzY1NjU3MjM4ODc4MDU3NjIwNjM0MjA3MjY3RSsyNDQgSW5leGFjdCBSb3VuZGVkCityZW14MzA2NyByZW1haW5kZXIgLTMzNzQ5ODg1ODE2MDc1ODYwNjEyNTU1NDIyMDEwNDggODIyOTM4OTUxMjQuOTAwNDUyNzE1MDQ4MzY1Njg2ODEgLT4gLTY2OTEzOTcwMTY4LjYyMDQ2MjU3MTc1NTY2Mzg0MjQzCitzdWJ4MzA2NyBzdWJ0cmFjdCAtMzM3NDk4ODU4MTYwNzU4NjA2MTI1NTU0MjIwMTA0OCA4MjI5Mzg5NTEyNC45MDA0NTI3MTUwNDgzNjU2ODY4MSAtPiAtMzM3NDk4ODU4MTYwNzU4NjA2MTMzNzgzNjA5NjE3MyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDY4IGFkZCAtODQxNzI1NTgxNjA2NjEuMzU4NjM4MzEwMjkzNTIzMjMgLTExMjcxLjU4OTE2NjAwOTMxMTU1OTM3MjkxOTA0ODkwIC0+IC04NDE3MjU1ODE3MTkzMi45NDc4MDQzMTk2MDUwODI2MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDY4IGNvbXBhcmUgLTg0MTcyNTU4MTYwNjYxLjM1ODYzODMxMDI5MzUyMzIzIC0xMTI3MS41ODkxNjYwMDkzMTE1NTkzNzI5MTkwNDg5MCAtPiAtMQorZGl2eDMwNjggZGl2aWRlIC04NDE3MjU1ODE2MDY2MS4zNTg2MzgzMTAyOTM1MjMyMyAtMTEyNzEuNTg5MTY2MDA5MzExNTU5MzcyOTE5MDQ4OTAgLT4gNzQ2NzY3NDQyNi40Njc5ODY3MzY0NTk2NzgzNDc1ODcgSW5leGFjdCBSb3VuZGVkCitkdml4MzA2OCBkaXZpZGVpbnQgLTg0MTcyNTU4MTYwNjYxLjM1ODYzODMxMDI5MzUyMzIzIC0xMTI3MS41ODkxNjYwMDkzMTE1NTkzNzI5MTkwNDg5MCAtPiA3NDY3Njc0NDI2CittdWx4MzA2OCBtdWx0aXBseSAtODQxNzI1NTgxNjA2NjEuMzU4NjM4MzEwMjkzNTIzMjMgLTExMjcxLjU4OTE2NjAwOTMxMTU1OTM3MjkxOTA0ODkwIC0+IDk0ODc1ODQ5NDYzODk5OTIzNS4xOTUzMDIyOTcwNzU1IEluZXhhY3QgUm91bmRlZAorcG93eDMwNjggcG93ZXIgLTg0MTcyNTU4MTYwNjYxLjM1ODYzODMxMDI5MzUyMzIzIC0xMTI3MiAtPiAwRS0xMDAyOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzA2OCByZW1haW5kZXIgLTg0MTcyNTU4MTYwNjYxLjM1ODYzODMxMDI5MzUyMzIzIC0xMTI3MS41ODkxNjYwMDkzMTE1NTkzNzI5MTkwNDg5MCAtPiAtNTI3NC45NTQyMjg1MTQ5NjUzNDQ3OTEyMjY1Njg2MAorc3VieDMwNjggc3VidHJhY3QgLTg0MTcyNTU4MTYwNjYxLjM1ODYzODMxMDI5MzUyMzIzIC0xMTI3MS41ODkxNjYwMDkzMTE1NTkzNzI5MTkwNDg5MCAtPiAtODQxNzI1NTgxNDkzODkuNzY5NDcyMzAwOTgxOTYzODYgSW5leGFjdCBSb3VuZGVkCithZGR4MzA2OSBhZGQgLTcwMDQ2OTMyMzI0NjE0LjkwNTk2Mzk2MjM3NTA4NTQxRS01NjggMzMuNjMxNjM5NjQwMDQ2MDg4NjU4MzY1NzcyOTc2OThFLTkxOCAtPiAtNy4wMDQ2OTMyMzI0NjE0OTA1OTYzOTYyMzc1MDg1NDFFLTU1NSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDY5IGNvbXBhcmUgLTcwMDQ2OTMyMzI0NjE0LjkwNTk2Mzk2MjM3NTA4NTQxRS01NjggMzMuNjMxNjM5NjQwMDQ2MDg4NjU4MzY1NzcyOTc2OThFLTkxOCAtPiAtMQorZGl2eDMwNjkgZGl2aWRlIC03MDA0NjkzMjMyNDYxNC45MDU5NjM5NjIzNzUwODU0MUUtNTY4IDMzLjYzMTYzOTY0MDA0NjA4ODY1ODM2NTc3Mjk3Njk4RS05MTggLT4gLTIuMDgyNzY4ODc2OTk1NDYzNDg3OTI2OTIwMDcyMzU5RSszNjIgSW5leGFjdCBSb3VuZGVkCitkdml4MzA2OSBkaXZpZGVpbnQgLTcwMDQ2OTMyMzI0NjE0LjkwNTk2Mzk2MjM3NTA4NTQxRS01NjggMzMuNjMxNjM5NjQwMDQ2MDg4NjU4MzY1NzcyOTc2OThFLTkxOCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMwNjkgbXVsdGlwbHkgLTcwMDQ2OTMyMzI0NjE0LjkwNTk2Mzk2MjM3NTA4NTQxRS01NjggMzMuNjMxNjM5NjQwMDQ2MDg4NjU4MzY1NzcyOTc2OThFLTkxOCAtPiAtMi4zNTU3OTMxODU4MzIxNDQzODgyODU5NDkwMjE3MzhFLTE0NzEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA2OSBwb3dlciAtNzAwNDY5MzIzMjQ2MTQuOTA1OTYzOTYyMzc1MDg1NDFFLTU2OCAzIC0+IC0zLjQzNjkwMzY3ODMwMjYzOTY3NzI4MDUwODQwOTgyOUUtMTY2MyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDY5IHJlbWFpbmRlciAtNzAwNDY5MzIzMjQ2MTQuOTA1OTYzOTYyMzc1MDg1NDFFLTU2OCAzMy42MzE2Mzk2NDAwNDYwODg2NTgzNjU3NzI5NzY5OEUtOTE4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzA2OSBzdWJ0cmFjdCAtNzAwNDY5MzIzMjQ2MTQuOTA1OTYzOTYyMzc1MDg1NDFFLTU2OCAzMy42MzE2Mzk2NDAwNDYwODg2NTgzNjU3NzI5NzY5OEUtOTE4IC0+IC03LjAwNDY5MzIzMjQ2MTQ5MDU5NjM5NjIzNzUwODU0MUUtNTU1IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNzAgYWRkIDAwMDQxMjUzODQ0MDcuMDUzNzgyNjYwMTE1NjgwODg2IC0zOTE0MjkwODQuNTg0NzMyMTQwMjUxNDM4NTYwMzIyM0UtNjQ4IC0+IDQxMjUzODQ0MDcuMDUzNzgyNjYwMTE1NjgwODg2MDAwIEluZXhhY3QgUm91bmRlZAorY29teDMwNzAgY29tcGFyZSAwMDA0MTI1Mzg0NDA3LjA1Mzc4MjY2MDExNTY4MDg4NiAtMzkxNDI5MDg0LjU4NDczMjE0MDI1MTQzODU2MDMyMjNFLTY0OCAtPiAxCitkaXZ4MzA3MCBkaXZpZGUgMDAwNDEyNTM4NDQwNy4wNTM3ODI2NjAxMTU2ODA4ODYgLTM5MTQyOTA4NC41ODQ3MzIxNDAyNTE0Mzg1NjAzMjIzRS02NDggLT4gLTEuMDUzOTI4OTQxMjg3MTMyNzE3MjUwNTQwOTU1NDU3RSs2NDkgSW5leGFjdCBSb3VuZGVkCitkdml4MzA3MCBkaXZpZGVpbnQgMDAwNDEyNTM4NDQwNy4wNTM3ODI2NjAxMTU2ODA4ODYgLTM5MTQyOTA4NC41ODQ3MzIxNDAyNTE0Mzg1NjAzMjIzRS02NDggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDcwIG11bHRpcGx5IDAwMDQxMjUzODQ0MDcuMDUzNzgyNjYwMTE1NjgwODg2IC0zOTE0MjkwODQuNTg0NzMyMTQwMjUxNDM4NTYwMzIyM0UtNjQ4IC0+IC0xLjYxNDc5NTQ0MjAxMzE5MDEzOTA4MDYzNDQ0OTI3M0UtNjMwIEluZXhhY3QgUm91bmRlZAorcG93eDMwNzAgcG93ZXIgMDAwNDEyNTM4NDQwNy4wNTM3ODI2NjAxMTU2ODA4ODYgLTQgLT4gMy40NTI1Njg1NDE1OTc0NTAxMDYyNjY1NTU3ODMzNjJFLTM5IEluZXhhY3QgUm91bmRlZAorcmVteDMwNzAgcmVtYWluZGVyIDAwMDQxMjUzODQ0MDcuMDUzNzgyNjYwMTE1NjgwODg2IC0zOTE0MjkwODQuNTg0NzMyMTQwMjUxNDM4NTYwMzIyM0UtNjQ4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzA3MCBzdWJ0cmFjdCAwMDA0MTI1Mzg0NDA3LjA1Mzc4MjY2MDExNTY4MDg4NiAtMzkxNDI5MDg0LjU4NDczMjE0MDI1MTQzODU2MDMyMjNFLTY0OCAtPiA0MTI1Mzg0NDA3LjA1Mzc4MjY2MDExNTY4MDg4NjAwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDcxIGFkZCAtMzE4MjMxMzEuMTU2OTE1ODMzOTM4MjA2Mjg0ODA5OTdFLTQ0MCA5MjkxMy45MTU4Mjk0NzIzNzIwMDI4NjQyNzAzMDAyOEUrNzcxIC0+IDkuMjkxMzkxNTgyOTQ3MjM3MjAwMjg2NDI3MDMwMDI4RSs3NzUgSW5leGFjdCBSb3VuZGVkCitjb214MzA3MSBjb21wYXJlIC0zMTgyMzEzMS4xNTY5MTU4MzM5MzgyMDYyODQ4MDk5N0UtNDQwIDkyOTEzLjkxNTgyOTQ3MjM3MjAwMjg2NDI3MDMwMDI4RSs3NzEgLT4gLTEKK2RpdngzMDcxIGRpdmlkZSAtMzE4MjMxMzEuMTU2OTE1ODMzOTM4MjA2Mjg0ODA5OTdFLTQ0MCA5MjkxMy45MTU4Mjk0NzIzNzIwMDI4NjQyNzAzMDAyOEUrNzcxIC0+IC0zLjQyNTAxMjM3NTQ2ODI1MTQ0NzE5NDQwMDg0MTY1OEUtMTIwOSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDcxIGRpdmlkZWludCAtMzE4MjMxMzEuMTU2OTE1ODMzOTM4MjA2Mjg0ODA5OTdFLTQ0MCA5MjkxMy45MTU4Mjk0NzIzNzIwMDI4NjQyNzAzMDAyOEUrNzcxIC0+IC0wCittdWx4MzA3MSBtdWx0aXBseSAtMzE4MjMxMzEuMTU2OTE1ODMzOTM4MjA2Mjg0ODA5OTdFLTQ0MCA5MjkxMy45MTU4Mjk0NzIzNzIwMDI4NjQyNzAzMDAyOEUrNzcxIC0+IC0yLjk1NjgxMTcyOTc0MzkzNzU0MTk3Mzg0NTAyOTgxNkUrMzQzIEluZXhhY3QgUm91bmRlZAorcG93eDMwNzEgcG93ZXIgLTMxODIzMTMxLjE1NjkxNTgzMzkzODIwNjI4NDgwOTk3RS00NDAgOSAtPiAtMy4zNDcyMzQ4MDM0ODc1NzU4NzAzMjEzMzgzMDg2NTVFLTM4OTMgSW5leGFjdCBSb3VuZGVkCityZW14MzA3MSByZW1haW5kZXIgLTMxODIzMTMxLjE1NjkxNTgzMzkzODIwNjI4NDgwOTk3RS00NDAgOTI5MTMuOTE1ODI5NDcyMzcyMDAyODY0MjcwMzAwMjhFKzc3MSAtPiAtMy4xODIzMTMxMTU2OTE1ODMzOTM4MjA2Mjg0ODA5OTdFLTQzMworc3VieDMwNzEgc3VidHJhY3QgLTMxODIzMTMxLjE1NjkxNTgzMzkzODIwNjI4NDgwOTk3RS00NDAgOTI5MTMuOTE1ODI5NDcyMzcyMDAyODY0MjcwMzAwMjhFKzc3MSAtPiAtOS4yOTEzOTE1ODI5NDcyMzcyMDAyODY0MjcwMzAwMjhFKzc3NSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDcyIGFkZCA1NTU3Mzg2Nzg4OC45MTU3NTMzMDU2MzY5ODEyODE1MCA1OTkuNTIzMTYxNDczNjIzMjE4ODM1NDM5MzIxMjIzNCAtPiA1NTU3Mzg2ODQ4OC40Mzg5MTQ3NzkyNjAyMDAxMTY5NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDcyIGNvbXBhcmUgNTU1NzM4Njc4ODguOTE1NzUzMzA1NjM2OTgxMjgxNTAgNTk5LjUyMzE2MTQ3MzYyMzIxODgzNTQzOTMyMTIyMzQgLT4gMQorZGl2eDMwNzIgZGl2aWRlIDU1NTczODY3ODg4LjkxNTc1MzMwNTYzNjk4MTI4MTUwIDU5OS41MjMxNjE0NzM2MjMyMTg4MzU0MzkzMjEyMjM0IC0+IDkyNjk2NzgyLjE0MzE4Nzk2NzYzMDk4MzM1NDk4NjU3IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNzIgZGl2aWRlaW50IDU1NTczODY3ODg4LjkxNTc1MzMwNTYzNjk4MTI4MTUwIDU5OS41MjMxNjE0NzM2MjMyMTg4MzU0MzkzMjEyMjM0IC0+IDkyNjk2NzgyCittdWx4MzA3MiBtdWx0aXBseSA1NTU3Mzg2Nzg4OC45MTU3NTMzMDU2MzY5ODEyODE1MCA1OTkuNTIzMTYxNDczNjIzMjE4ODM1NDM5MzIxMjIzNCAtPiAzMzMxNzgyMDk3MjA4MC4yNDM0NzcxNzU0MjIyMTQ3NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDcyIHBvd2VyIDU1NTczODY3ODg4LjkxNTc1MzMwNTYzNjk4MTI4MTUwIDYwMCAtPiA4LjM2MzI0MDY3MTA3MDEzNjI3ODIyMTk2NTYxNjk3M0UrNjQ0NiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDcyIHJlbWFpbmRlciA1NTU3Mzg2Nzg4OC45MTU3NTMzMDU2MzY5ODEyODE1MCA1OTkuNTIzMTYxNDczNjIzMjE4ODM1NDM5MzIxMjIzNCAtPiA4NS44NDQ1MDMwMzkxMDk5Njg2NDc4MjY1MTY5MDEyCitzdWJ4MzA3MiBzdWJ0cmFjdCA1NTU3Mzg2Nzg4OC45MTU3NTMzMDU2MzY5ODEyODE1MCA1OTkuNTIzMTYxNDczNjIzMjE4ODM1NDM5MzIxMjIzNCAtPiA1NTU3Mzg2NzI4OS4zOTI1OTE4MzIwMTM3NjI0NDYwNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDczIGFkZCAtNTQ0NzcyNzQ0ODQzMTY4MDg3ODY5OTU1NTcxNDc5NkUtODAwIDU0ODcyMDcuMTQyNjg3MDAxNjA3MDI2NjY1NTE1MzQ5RS0zNjIgLT4gNS40ODcyMDcxNDI2ODcwMDE2MDcwMjY2NjU1MTUzNDlFLTM1NiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDczIGNvbXBhcmUgLTU0NDc3Mjc0NDg0MzE2ODA4Nzg2OTk1NTU3MTQ3OTZFLTgwMCA1NDg3MjA3LjE0MjY4NzAwMTYwNzAyNjY2NTUxNTM0OUUtMzYyIC0+IC0xCitkaXZ4MzA3MyBkaXZpZGUgLTU0NDc3Mjc0NDg0MzE2ODA4Nzg2OTk1NTU3MTQ3OTZFLTgwMCA1NDg3MjA3LjE0MjY4NzAwMTYwNzAyNjY2NTUxNTM0OUUtMzYyIC0+IC05LjkyODA1MTM4NzExMDU4NzMyNzg4OTAwOTM2MzA2OUUtNDE1IEluZXhhY3QgUm91bmRlZAorZHZpeDMwNzMgZGl2aWRlaW50IC01NDQ3NzI3NDQ4NDMxNjgwODc4Njk5NTU1NzE0Nzk2RS04MDAgNTQ4NzIwNy4xNDI2ODcwMDE2MDcwMjY2NjU1MTUzNDlFLTM2MiAtPiAtMAorbXVseDMwNzMgbXVsdGlwbHkgLTU0NDc3Mjc0NDg0MzE2ODA4Nzg2OTk1NTU3MTQ3OTZFLTgwMCA1NDg3MjA3LjE0MjY4NzAwMTYwNzAyNjY2NTUxNTM0OUUtMzYyIC0+IC0yLjk4OTI4MDg5NjY0NDYzNTM1MjgzODA4Nzg2NDM3M0UtMTEyNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDczIHBvd2VyIC01NDQ3NzI3NDQ4NDMxNjgwODc4Njk5NTU1NzE0Nzk2RS04MDAgNSAtPiAtNC43OTgxODM1NTMyNzg1NDMwNjUyMDQ4MzMzMDA3MjVFLTM4NDcgSW5leGFjdCBSb3VuZGVkCityZW14MzA3MyByZW1haW5kZXIgLTU0NDc3Mjc0NDg0MzE2ODA4Nzg2OTk1NTU3MTQ3OTZFLTgwMCA1NDg3MjA3LjE0MjY4NzAwMTYwNzAyNjY2NTUxNTM0OUUtMzYyIC0+IC01LjQ0NzcyNzQ0ODQzMTY4MDg3ODY5OTU1NTcxNDc5NkUtNzcwCitzdWJ4MzA3MyBzdWJ0cmFjdCAtNTQ0NzcyNzQ0ODQzMTY4MDg3ODY5OTU1NTcxNDc5NkUtODAwIDU0ODcyMDcuMTQyNjg3MDAxNjA3MDI2NjY1NTE1MzQ5RS0zNjIgLT4gLTUuNDg3MjA3MTQyNjg3MDAxNjA3MDI2NjY1NTE1MzQ5RS0zNTYgSW5leGFjdCBSb3VuZGVkCithZGR4MzA3NCBhZGQgMDQxODM0OTQwNDgzNC41NDcxMTAyMzk1NDIyOTAxMzQgMDk4MTk5MTUuOTI0MDUyODgwNjY2MDYxMjQ1NTQ4NDEgLT4gNDE4MzU5MjI0NzUwLjQ3MTE2MzEyMDIwODM1MTM3OTUgSW5leGFjdCBSb3VuZGVkCitjb214MzA3NCBjb21wYXJlIDA0MTgzNDk0MDQ4MzQuNTQ3MTEwMjM5NTQyMjkwMTM0IDA5ODE5OTE1LjkyNDA1Mjg4MDY2NjA2MTI0NTU0ODQxIC0+IDEKK2RpdngzMDc0IGRpdmlkZSAwNDE4MzQ5NDA0ODM0LjU0NzExMDIzOTU0MjI5MDEzNCAwOTgxOTkxNS45MjQwNTI4ODA2NjYwNjEyNDU1NDg0MSAtPiA0MjYwMi4xMzcxMzMzNTgwMzUxMzg3NDMzOTMwOTEzMiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDc0IGRpdmlkZWludCAwNDE4MzQ5NDA0ODM0LjU0NzExMDIzOTU0MjI5MDEzNCAwOTgxOTkxNS45MjQwNTI4ODA2NjYwNjEyNDU1NDg0MSAtPiA0MjYwMgorbXVseDMwNzQgbXVsdGlwbHkgMDQxODM0OTQwNDgzNC41NDcxMTAyMzk1NDIyOTAxMzQgMDk4MTk5MTUuOTI0MDUyODgwNjY2MDYxMjQ1NTQ4NDEgLT4gNDEwODE1NTk4MjM1MjgxNDM0OC4zNDM0NDEyOTkwODIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA3NCBwb3dlciAwNDE4MzQ5NDA0ODM0LjU0NzExMDIzOTU0MjI5MDEzNCA5ODE5OTE2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMwNzQgcmVtYWluZGVyIDA0MTgzNDk0MDQ4MzQuNTQ3MTEwMjM5NTQyMjkwMTM0IDA5ODE5OTE1LjkyNDA1Mjg4MDY2NjA2MTI0NTU0ODQxIC0+IDEzNDY2MzguMDQ2Mjg4MTA0MDAxMTA3MjgwNjM3MTgKK3N1YngzMDc0IHN1YnRyYWN0IDA0MTgzNDk0MDQ4MzQuNTQ3MTEwMjM5NTQyMjkwMTM0IDA5ODE5OTE1LjkyNDA1Mjg4MDY2NjA2MTI0NTU0ODQxIC0+IDQxODMzOTU4NDkxOC42MjMwNTczNTg4NzYyMjg4ODg1IEluZXhhY3QgUm91bmRlZAorYWRkeDMwNzUgYWRkIC0yNjIwMjEuNzU2NTE5NDczNzM5NjQ0ODAxNDI4NjQzNiAtNzk4Mzk5MjYwMDA5NDgzNjMwNDM4NzMyNDE2MjA0MkUrMzkwIC0+IC03Ljk4Mzk5MjYwMDA5NDgzNjMwNDM4NzMyNDE2MjA0MkUrNDIwIEluZXhhY3QgUm91bmRlZAorY29teDMwNzUgY29tcGFyZSAtMjYyMDIxLjc1NjUxOTQ3MzczOTY0NDgwMTQyODY0MzYgLTc5ODM5OTI2MDAwOTQ4MzYzMDQzODczMjQxNjIwNDJFKzM5MCAtPiAxCitkaXZ4MzA3NSBkaXZpZGUgLTI2MjAyMS43NTY1MTk0NzM3Mzk2NDQ4MDE0Mjg2NDM2IC03OTgzOTkyNjAwMDk0ODM2MzA0Mzg3MzI0MTYyMDQyRSszOTAgLT4gMy4yODE4Mzg2Njk0OTQyNzQ4OTYxODAzNzYzMjg0MzNFLTQxNiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDc1IGRpdmlkZWludCAtMjYyMDIxLjc1NjUxOTQ3MzczOTY0NDgwMTQyODY0MzYgLTc5ODM5OTI2MDAwOTQ4MzYzMDQzODczMjQxNjIwNDJFKzM5MCAtPiAwCittdWx4MzA3NSBtdWx0aXBseSAtMjYyMDIxLjc1NjUxOTQ3MzczOTY0NDgwMTQyODY0MzYgLTc5ODM5OTI2MDAwOTQ4MzYzMDQzODczMjQxNjIwNDJFKzM5MCAtPiAyLjA5MTk3OTc2NTExNTMyOTI2ODI3NTgwMzM4NTUzNEUrNDI2IEluZXhhY3QgUm91bmRlZAorcG93eDMwNzUgcG93ZXIgLTI2MjAyMS43NTY1MTk0NzM3Mzk2NDQ4MDE0Mjg2NDM2IC04IC0+IDQuNTAwOTE4NzIxMDMzMDMzMDMyNzA2NzgyMzA0MTk1RS00NCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDc1IHJlbWFpbmRlciAtMjYyMDIxLjc1NjUxOTQ3MzczOTY0NDgwMTQyODY0MzYgLTc5ODM5OTI2MDAwOTQ4MzYzMDQzODczMjQxNjIwNDJFKzM5MCAtPiAtMjYyMDIxLjc1NjUxOTQ3MzczOTY0NDgwMTQyODY0MzYKK3N1YngzMDc1IHN1YnRyYWN0IC0yNjIwMjEuNzU2NTE5NDczNzM5NjQ0ODAxNDI4NjQzNiAtNzk4Mzk5MjYwMDA5NDgzNjMwNDM4NzMyNDE2MjA0MkUrMzkwIC0+IDcuOTgzOTkyNjAwMDk0ODM2MzA0Mzg3MzI0MTYyMDQyRSs0MjAgSW5leGFjdCBSb3VuZGVkCithZGR4MzA3NiBhZGQgNDg2OTYwNTA2MzEuNDI1NjUzODAzMDEyMDQ1OTIzOTJFLTUwNSAtMzM4Njg3NTIzMzkuODUwNTcyNjc2MDk5Njc4MDYxODdFKzgyMSAtPiAtMy4zODY4NzUyMzM5ODUwNTcyNjc2MDk5Njc4MDYxODdFKzgzMSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDc2IGNvbXBhcmUgNDg2OTYwNTA2MzEuNDI1NjUzODAzMDEyMDQ1OTIzOTJFLTUwNSAtMzM4Njg3NTIzMzkuODUwNTcyNjc2MDk5Njc4MDYxODdFKzgyMSAtPiAxCitkaXZ4MzA3NiBkaXZpZGUgNDg2OTYwNTA2MzEuNDI1NjUzODAzMDEyMDQ1OTIzOTJFLTUwNSAtMzM4Njg3NTIzMzkuODUwNTcyNjc2MDk5Njc4MDYxODdFKzgyMSAtPiAtMS40Mzc3ODY5NjQ4OTI5NzY1ODIwMDk5NTIxNzI0MjBFLTEzMjYgSW5leGFjdCBSb3VuZGVkCitkdml4MzA3NiBkaXZpZGVpbnQgNDg2OTYwNTA2MzEuNDI1NjUzODAzMDEyMDQ1OTIzOTJFLTUwNSAtMzM4Njg3NTIzMzkuODUwNTcyNjc2MDk5Njc4MDYxODdFKzgyMSAtPiAtMAorbXVseDMwNzYgbXVsdGlwbHkgNDg2OTYwNTA2MzEuNDI1NjUzODAzMDEyMDQ1OTIzOTJFLTUwNSAtMzM4Njg3NTIzMzkuODUwNTcyNjc2MDk5Njc4MDYxODdFKzgyMSAtPiAtMS42NDkyNzQ0Nzg3NjQ1Nzk1NjkyNDY0MjU2MTE2MjlFKzMzNyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDc2IHBvd2VyIDQ4Njk2MDUwNjMxLjQyNTY1MzgwMzAxMjA0NTkyMzkyRS01MDUgLTMgLT4gOC42NjAwMTc2ODg3NzM3NTk0NjMwMjAzNDA3Nzg4NTNFKzE0ODIgSW5leGFjdCBSb3VuZGVkCityZW14MzA3NiByZW1haW5kZXIgNDg2OTYwNTA2MzEuNDI1NjUzODAzMDEyMDQ1OTIzOTJFLTUwNSAtMzM4Njg3NTIzMzkuODUwNTcyNjc2MDk5Njc4MDYxODdFKzgyMSAtPiA0Ljg2OTYwNTA2MzE0MjU2NTM4MDMwMTIwNDU5MjM5MkUtNDk1CitzdWJ4MzA3NiBzdWJ0cmFjdCA0ODY5NjA1MDYzMS40MjU2NTM4MDMwMTIwNDU5MjM5MkUtNTA1IC0zMzg2ODc1MjMzOS44NTA1NzI2NzYwOTk2NzgwNjE4N0UrODIxIC0+IDMuMzg2ODc1MjMzOTg1MDU3MjY3NjA5OTY3ODA2MTg3RSs4MzEgSW5leGFjdCBSb3VuZGVkCithZGR4MzA3NyBhZGQgOTUzMTY5OTkuMTk0NDAxNDQzNTY0NzExMjY2ODA3MDggLTYwNzkxLjMzODA1MDU3NDAyODQ1ODg1OTc4MzkwNDM1IC0+IDk1MjU2MjA3Ljg1NjM1MDg2OTUzNjI1MjQwNzAyMzE4IEluZXhhY3QgUm91bmRlZAorY29teDMwNzcgY29tcGFyZSA5NTMxNjk5OS4xOTQ0MDE0NDM1NjQ3MTEyNjY4MDcwOCAtNjA3OTEuMzM4MDUwNTc0MDI4NDU4ODU5NzgzOTA0MzUgLT4gMQorZGl2eDMwNzcgZGl2aWRlIDk1MzE2OTk5LjE5NDQwMTQ0MzU2NDcxMTI2NjgwNzA4IC02MDc5MS4zMzgwNTA1NzQwMjg0NTg4NTk3ODM5MDQzNSAtPiAtMTU2Ny45MzcxODA3MDY2NDE4NTY4NzAyODYxMjI2MjMgSW5leGFjdCBSb3VuZGVkCitkdml4MzA3NyBkaXZpZGVpbnQgOTUzMTY5OTkuMTk0NDAxNDQzNTY0NzExMjY2ODA3MDggLTYwNzkxLjMzODA1MDU3NDAyODQ1ODg1OTc4MzkwNDM1IC0+IC0xNTY3CittdWx4MzA3NyBtdWx0aXBseSA5NTMxNjk5OS4xOTQ0MDE0NDM1NjQ3MTEyNjY4MDcwOCAtNjA3OTEuMzM4MDUwNTc0MDI4NDU4ODU5NzgzOTA0MzUgLT4gLTU3OTQ0NDc5MTk5OTMuMTUwNDkzMzAxMDYxMTk1NzE0IEluZXhhY3QgUm91bmRlZAorcG93eDMwNzcgcG93ZXIgOTUzMTY5OTkuMTk0NDAxNDQzNTY0NzExMjY2ODA3MDggLTYwNzkxIC0+IDBFLTEwMDI5IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMDc3IHJlbWFpbmRlciA5NTMxNjk5OS4xOTQ0MDE0NDM1NjQ3MTEyNjY4MDcwOCAtNjA3OTEuMzM4MDUwNTc0MDI4NDU4ODU5NzgzOTA0MzUgLT4gNTY5NzIuNDY5MTUxOTQwOTY5Njc3OTg1NDI4OTYzNTUKK3N1YngzMDc3IHN1YnRyYWN0IDk1MzE2OTk5LjE5NDQwMTQ0MzU2NDcxMTI2NjgwNzA4IC02MDc5MS4zMzgwNTA1NzQwMjg0NTg4NTk3ODM5MDQzNSAtPiA5NTM3Nzc5MC41MzI0NTIwMTc1OTMxNzAxMjY1OTA5OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDc4IGFkZCAtNTMyNjcwMjI5NjQwMjcwODIzNDcyMjIxNTIyNDk3OUUtMTM2IDgwMzI0NTkuNDUwOTk4ODIwMjA1OTE2NTM4NTQzMjU4IC0+IDgwMzI0NTkuNDUwOTk4ODIwMjA1OTE2NTM4NTQzMjU4IEluZXhhY3QgUm91bmRlZAorY29teDMwNzggY29tcGFyZSAtNTMyNjcwMjI5NjQwMjcwODIzNDcyMjIxNTIyNDk3OUUtMTM2IDgwMzI0NTkuNDUwOTk4ODIwMjA1OTE2NTM4NTQzMjU4IC0+IC0xCitkaXZ4MzA3OCBkaXZpZGUgLTUzMjY3MDIyOTY0MDI3MDgyMzQ3MjIyMTUyMjQ5NzlFLTEzNiA4MDMyNDU5LjQ1MDk5ODgyMDIwNTkxNjUzODU0MzI1OCAtPiAtNi42MzE0NzExMzE0NzMxMTc0ODc4MzkyNDM1ODI4NzNFLTExMyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDc4IGRpdmlkZWludCAtNTMyNjcwMjI5NjQwMjcwODIzNDcyMjIxNTIyNDk3OUUtMTM2IDgwMzI0NTkuNDUwOTk4ODIwMjA1OTE2NTM4NTQzMjU4IC0+IC0wCittdWx4MzA3OCBtdWx0aXBseSAtNTMyNjcwMjI5NjQwMjcwODIzNDcyMjIxNTIyNDk3OUUtMTM2IDgwMzI0NTkuNDUwOTk4ODIwMjA1OTE2NTM4NTQzMjU4IC0+IC00LjI3ODY1MjAyMDMzOTcwNTI2NTAxMzYzMjc1NzM0OUUtOTkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA3OCBwb3dlciAtNTMyNjcwMjI5NjQwMjcwODIzNDcyMjIxNTIyNDk3OUUtMTM2IDgwMzI0NTkgLT4gLTBFLTEwMDI5IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMDc4IHJlbWFpbmRlciAtNTMyNjcwMjI5NjQwMjcwODIzNDcyMjIxNTIyNDk3OUUtMTM2IDgwMzI0NTkuNDUwOTk4ODIwMjA1OTE2NTM4NTQzMjU4IC0+IC01LjMyNjcwMjI5NjQwMjcwODIzNDcyMjIxNTIyNDk3OUUtMTA2CitzdWJ4MzA3OCBzdWJ0cmFjdCAtNTMyNjcwMjI5NjQwMjcwODIzNDcyMjIxNTIyNDk3OUUtMTM2IDgwMzI0NTkuNDUwOTk4ODIwMjA1OTE2NTM4NTQzMjU4IC0+IC04MDMyNDU5LjQ1MDk5ODgyMDIwNTkxNjUzODU0MzI1OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDc5IGFkZCA2Ny4xODc1MDY4NDA3OTUwMTU3NTMzNTQ4MjYxNTc4MEUtMjgxIDczNC4xMTY4ODQxNjgzNDM4NDEwMzE0ODQzMDExNTQxRS04NTQgLT4gNi43MTg3NTA2ODQwNzk1MDE1NzUzMzU0ODI2MTU3ODBFLTI4MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDc5IGNvbXBhcmUgNjcuMTg3NTA2ODQwNzk1MDE1NzUzMzU0ODI2MTU3ODBFLTI4MSA3MzQuMTE2ODg0MTY4MzQzODQxMDMxNDg0MzAxMTU0MUUtODU0IC0+IDEKK2RpdngzMDc5IGRpdmlkZSA2Ny4xODc1MDY4NDA3OTUwMTU3NTMzNTQ4MjYxNTc4MEUtMjgxIDczNC4xMTY4ODQxNjgzNDM4NDEwMzE0ODQzMDExNTQxRS04NTQgLT4gOS4xNTIxNTM4NzIxODc0NjA1OTg5NTg2MTY1OTI0NDJFKzU3MSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDc5IGRpdmlkZWludCA2Ny4xODc1MDY4NDA3OTUwMTU3NTMzNTQ4MjYxNTc4MEUtMjgxIDczNC4xMTY4ODQxNjgzNDM4NDEwMzE0ODQzMDExNTQxRS04NTQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDc5IG11bHRpcGx5IDY3LjE4NzUwNjg0MDc5NTAxNTc1MzM1NDgyNjE1NzgwRS0yODEgNzM0LjExNjg4NDE2ODM0Mzg0MTAzMTQ4NDMwMTE1NDFFLTg1NCAtPiA0LjkzMjM0ODMxNzcwMDM3MjQwMTg0OTIzMTc2NzAwN0UtMTEzMSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDc5IHBvd2VyIDY3LjE4NzUwNjg0MDc5NTAxNTc1MzM1NDgyNjE1NzgwRS0yODEgNyAtPiA2LjE4MDQ0NDA3MTAyMzExMTMwMDgxNzUxODQwOTU1MEUtMTk1NSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDc5IHJlbWFpbmRlciA2Ny4xODc1MDY4NDA3OTUwMTU3NTMzNTQ4MjYxNTc4MEUtMjgxIDczNC4xMTY4ODQxNjgzNDM4NDEwMzE0ODQzMDExNTQxRS04NTQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMDc5IHN1YnRyYWN0IDY3LjE4NzUwNjg0MDc5NTAxNTc1MzM1NDgyNjE1NzgwRS0yODEgNzM0LjExNjg4NDE2ODM0Mzg0MTAzMTQ4NDMwMTE1NDFFLTg1NCAtPiA2LjcxODc1MDY4NDA3OTUwMTU3NTMzNTQ4MjYxNTc4MEUtMjgwIEluZXhhY3QgUm91bmRlZAorYWRkeDMwODAgYWRkIC04NzM5Mjk5MzcyMTE0LjA5MjQ4MjkxNDEzOTI4MTY2OSA1MDc2MTAwNzQuNzM0MzU3NzAyOTM0NTA3NzM4NTgzOCAtPiAtODczODc5MTc2MjAzOS4zNTgxMjUyMTEyMDQ3NzM5MzAgSW5leGFjdCBSb3VuZGVkCitjb214MzA4MCBjb21wYXJlIC04NzM5Mjk5MzcyMTE0LjA5MjQ4MjkxNDEzOTI4MTY2OSA1MDc2MTAwNzQuNzM0MzU3NzAyOTM0NTA3NzM4NTgzOCAtPiAtMQorZGl2eDMwODAgZGl2aWRlIC04NzM5Mjk5MzcyMTE0LjA5MjQ4MjkxNDEzOTI4MTY2OSA1MDc2MTAwNzQuNzM0MzU3NzAyOTM0NTA3NzM4NTgzOCAtPiAtMTcyMTYuNTYwMTI1Nzc2NzM3MzE2MTIxMzAwNjgxMzAgSW5leGFjdCBSb3VuZGVkCitkdml4MzA4MCBkaXZpZGVpbnQgLTg3MzkyOTkzNzIxMTQuMDkyNDgyOTE0MTM5MjgxNjY5IDUwNzYxMDA3NC43MzQzNTc3MDI5MzQ1MDc3Mzg1ODM4IC0+IC0xNzIxNgorbXVseDMwODAgbXVsdGlwbHkgLTg3MzkyOTkzNzIxMTQuMDkyNDgyOTE0MTM5MjgxNjY5IDUwNzYxMDA3NC43MzQzNTc3MDI5MzQ1MDc3Mzg1ODM4IC0+IC00NDM2MTU2NDA3NDA0NzU5ODMzODU3LjU4MDcwNzAyNCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDgwIHBvd2VyIC04NzM5Mjk5MzcyMTE0LjA5MjQ4MjkxNDEzOTI4MTY2OSA1MDc2MTAwNzUgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMwODAgcmVtYWluZGVyIC04NzM5Mjk5MzcyMTE0LjA5MjQ4MjkxNDEzOTI4MTY2OSA1MDc2MTAwNzQuNzM0MzU3NzAyOTM0NTA3NzM4NTgzOCAtPiAtMjg0MzI1NDg3LjM5MDI2OTE5MzY1NDA1NDIxMDI5OTIKK3N1YngzMDgwIHN1YnRyYWN0IC04NzM5Mjk5MzcyMTE0LjA5MjQ4MjkxNDEzOTI4MTY2OSA1MDc2MTAwNzQuNzM0MzU3NzAyOTM0NTA3NzM4NTgzOCAtPiAtODczOTgwNjk4MjE4OC44MjY4NDA2MTcwNzM3ODk0MDggSW5leGFjdCBSb3VuZGVkCithZGR4MzA4MSBhZGQgMjQ1NC4wMDIwNzg0Njg5Mjg2NjUwMDgyMTc3Mjc3MzEgNTgzNTQ2MDM5LjYyMzM4NDI4NjkxMTk5NTA5ODIwMDlFLTE0NyAtPiAyNDU0LjAwMjA3ODQ2ODkyODY2NTAwODIxNzcyNzczMSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDgxIGNvbXBhcmUgMjQ1NC4wMDIwNzg0Njg5Mjg2NjUwMDgyMTc3Mjc3MzEgNTgzNTQ2MDM5LjYyMzM4NDI4NjkxMTk5NTA5ODIwMDlFLTE0NyAtPiAxCitkaXZ4MzA4MSBkaXZpZGUgMjQ1NC4wMDIwNzg0Njg5Mjg2NjUwMDgyMTc3Mjc3MzEgNTgzNTQ2MDM5LjYyMzM4NDI4NjkxMTk5NTA5ODIwMDlFLTE0NyAtPiA0LjIwNTMyNzI3ODEyMzExMjYxMTAwNjY1MjUzMzYxOEUrMTQxIEluZXhhY3QgUm91bmRlZAorZHZpeDMwODEgZGl2aWRlaW50IDI0NTQuMDAyMDc4NDY4OTI4NjY1MDA4MjE3NzI3NzMxIDU4MzU0NjAzOS42MjMzODQyODY5MTE5OTUwOTgyMDA5RS0xNDcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDgxIG11bHRpcGx5IDI0NTQuMDAyMDc4NDY4OTI4NjY1MDA4MjE3NzI3NzMxIDU4MzU0NjAzOS42MjMzODQyODY5MTE5OTUwOTgyMDA5RS0xNDcgLT4gMS40MzIwMjMxOTQxMTgwOTY4NDI4MDYwMTAyOTMwMjdFLTEzNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDgxIHBvd2VyIDI0NTQuMDAyMDc4NDY4OTI4NjY1MDA4MjE3NzI3NzMxIDYgLT4gMjE4Mzk4NDUyNzkyMjkzODUzNzg2LjkyNjMwNTQ0MjAgSW5leGFjdCBSb3VuZGVkCityZW14MzA4MSByZW1haW5kZXIgMjQ1NC4wMDIwNzg0Njg5Mjg2NjUwMDgyMTc3Mjc3MzEgNTgzNTQ2MDM5LjYyMzM4NDI4NjkxMTk5NTA5ODIwMDlFLTE0NyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMwODEgc3VidHJhY3QgMjQ1NC4wMDIwNzg0Njg5Mjg2NjUwMDgyMTc3Mjc3MzEgNTgzNTQ2MDM5LjYyMzM4NDI4NjkxMTk5NTA5ODIwMDlFLTE0NyAtPiAyNDU0LjAwMjA3ODQ2ODkyODY2NTAwODIxNzcyNzczMSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDgyIGFkZCA3NjQ1NzguNTIwNDg0OTkzNjkxMjA2NjAzMzE3NzQyOSA2NDYwMy4xMzU3MTI1OTE2NDgxMjYwOTQzNjgzMjUwNiAtPiA4MjkxODEuNjU2MTk3NTg1MzM5MzMyNjk3Njg2MDY4MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDgyIGNvbXBhcmUgNzY0NTc4LjUyMDQ4NDk5MzY5MTIwNjYwMzMxNzc0MjkgNjQ2MDMuMTM1NzEyNTkxNjQ4MTI2MDk0MzY4MzI1MDYgLT4gMQorZGl2eDMwODIgZGl2aWRlIDc2NDU3OC41MjA0ODQ5OTM2OTEyMDY2MDMzMTc3NDI5IDY0NjAzLjEzNTcxMjU5MTY0ODEyNjA5NDM2ODMyNTA2IC0+IDExLjgzNTAwNjMzNjAxNTUzNTc4ODUxMTI0MjgxNDE3IEluZXhhY3QgUm91bmRlZAorZHZpeDMwODIgZGl2aWRlaW50IDc2NDU3OC41MjA0ODQ5OTM2OTEyMDY2MDMzMTc3NDI5IDY0NjAzLjEzNTcxMjU5MTY0ODEyNjA5NDM2ODMyNTA2IC0+IDExCittdWx4MzA4MiBtdWx0aXBseSA3NjQ1NzguNTIwNDg0OTkzNjkxMjA2NjAzMzE3NzQyOSA2NDYwMy4xMzU3MTI1OTE2NDgxMjYwOTQzNjgzMjUwNiAtPiA0OTM5NDE2OTkyMS44MjQ1ODA5NDEzODA5NjYyODk1NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDgyIHBvd2VyIDc2NDU3OC41MjA0ODQ5OTM2OTEyMDY2MDMzMTc3NDI5IDY0NjAzIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMwODIgcmVtYWluZGVyIDc2NDU3OC41MjA0ODQ5OTM2OTEyMDY2MDMzMTc3NDI5IDY0NjAzLjEzNTcxMjU5MTY0ODEyNjA5NDM2ODMyNTA2IC0+IDUzOTQ0LjAyNzY0NjQ4NTU2MTgxOTU2NTI2NjE2NzI0CitzdWJ4MzA4MiBzdWJ0cmFjdCA3NjQ1NzguNTIwNDg0OTkzNjkxMjA2NjAzMzE3NzQyOSA2NDYwMy4xMzU3MTI1OTE2NDgxMjYwOTQzNjgzMjUwNiAtPiA2OTk5NzUuMzg0NzcyNDAyMDQzMDgwNTA4OTQ5NDE3OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDgzIGFkZCAwNzkyMDMuNzMzMDEwMzc3NzcxNjkwMzUxODM2NzU2MCA4NDYzODg5MzQzNDcuNjMyNDAzNjEzMjk1OTY2NDcwNSAtPiA4NDYzODkwMTM1NTEuMzY1NDEzOTkxMDY3NjU2ODIyMyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDgzIGNvbXBhcmUgMDc5MjAzLjczMzAxMDM3Nzc3MTY5MDM1MTgzNjc1NjAgODQ2Mzg4OTM0MzQ3LjYzMjQwMzYxMzI5NTk2NjQ3MDUgLT4gLTEKK2RpdngzMDgzIGRpdmlkZSAwNzkyMDMuNzMzMDEwMzc3NzcxNjkwMzUxODM2NzU2MCA4NDYzODg5MzQzNDcuNjMyNDAzNjEzMjk1OTY2NDcwNSAtPiA5LjM1Nzg0MTI3MDg2MDMzOTg1ODE0NjQ3MTg3NjA0NEUtOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDgzIGRpdmlkZWludCAwNzkyMDMuNzMzMDEwMzc3NzcxNjkwMzUxODM2NzU2MCA4NDYzODg5MzQzNDcuNjMyNDAzNjEzMjk1OTY2NDcwNSAtPiAwCittdWx4MzA4MyBtdWx0aXBseSAwNzkyMDMuNzMzMDEwMzc3NzcxNjkwMzUxODM2NzU2MCA4NDYzODg5MzQzNDcuNjMyNDAzNjEzMjk1OTY2NDcwNSAtPiA2NzAzNzE2MzE3OTAwODAzNy4xOTk4MzU2NDc4OTIwMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDgzIHBvd2VyIDA3OTIwMy43MzMwMTAzNzc3NzE2OTAzNTE4MzY3NTYwIDggLT4gMS41NDg2OTI1NDk1MDMzNTY3ODgxMTU2ODI5OTY3NTZFKzM5IEluZXhhY3QgUm91bmRlZAorcmVteDMwODMgcmVtYWluZGVyIDA3OTIwMy43MzMwMTAzNzc3NzE2OTAzNTE4MzY3NTYwIDg0NjM4ODkzNDM0Ny42MzI0MDM2MTMyOTU5NjY0NzA1IC0+IDc5MjAzLjczMzAxMDM3Nzc3MTY5MDM1MTgzNjc1NjAKK3N1YngzMDgzIHN1YnRyYWN0IDA3OTIwMy43MzMwMTAzNzc3NzE2OTAzNTE4MzY3NTYwIDg0NjM4ODkzNDM0Ny42MzI0MDM2MTMyOTU5NjY0NzA1IC0+IC04NDYzODg4NTUxNDMuODk5MzkzMjM1NTI0Mjc2MTE4NyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDg0IGFkZCAtNDI3OC41ODE1MTQ2ODg2NjkyNDkyNDcwMDcxMjc4OTlFLTMyOSA1LjQ3NDk3Mzk5Mjk1MzkwMjYzMTg5MDIwODM2MDgyOSAtPiA1LjQ3NDk3Mzk5Mjk1MzkwMjYzMTg5MDIwODM2MDgyOSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDg0IGNvbXBhcmUgLTQyNzguNTgxNTE0Njg4NjY5MjQ5MjQ3MDA3MTI3ODk5RS0zMjkgNS40NzQ5NzM5OTI5NTM5MDI2MzE4OTAyMDgzNjA4MjkgLT4gLTEKK2RpdngzMDg0IGRpdmlkZSAtNDI3OC41ODE1MTQ2ODg2NjkyNDkyNDcwMDcxMjc4OTlFLTMyOSA1LjQ3NDk3Mzk5Mjk1MzkwMjYzMTg5MDIwODM2MDgyOSAtPiAtNy44MTQ3OTc4Nzg4NDg0NjkyODIwMzM4OTY5Njk1MzJFLTMyNyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDg0IGRpdmlkZWludCAtNDI3OC41ODE1MTQ2ODg2NjkyNDkyNDcwMDcxMjc4OTlFLTMyOSA1LjQ3NDk3Mzk5Mjk1MzkwMjYzMTg5MDIwODM2MDgyOSAtPiAtMAorbXVseDMwODQgbXVsdGlwbHkgLTQyNzguNTgxNTE0Njg4NjY5MjQ5MjQ3MDA3MTI3ODk5RS0zMjkgNS40NzQ5NzM5OTI5NTM5MDI2MzE4OTAyMDgzNjA4MjkgLT4gLTIuMzQyNTEyMjUxOTY1Mzc4MDI4NDMzNTg0NTM4ODcwRS0zMjUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA4NCBwb3dlciAtNDI3OC41ODE1MTQ2ODg2NjkyNDkyNDcwMDcxMjc4OTlFLTMyOSA1IC0+IC0xLjQzMzgzNDU4NzgwMTc3MTI0NDEwNDY3NjY4Mjk4NkUtMTYyNyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDg0IHJlbWFpbmRlciAtNDI3OC41ODE1MTQ2ODg2NjkyNDkyNDcwMDcxMjc4OTlFLTMyOSA1LjQ3NDk3Mzk5Mjk1MzkwMjYzMTg5MDIwODM2MDgyOSAtPiAtNC4yNzg1ODE1MTQ2ODg2NjkyNDkyNDcwMDcxMjc4OTlFLTMyNgorc3VieDMwODQgc3VidHJhY3QgLTQyNzguNTgxNTE0Njg4NjY5MjQ5MjQ3MDA3MTI3ODk5RS0zMjkgNS40NzQ5NzM5OTI5NTM5MDI2MzE4OTAyMDgzNjA4MjkgLT4gLTUuNDc0OTczOTkyOTUzOTAyNjMxODkwMjA4MzYwODI5IEluZXhhY3QgUm91bmRlZAorYWRkeDMwODUgYWRkIDYwODY3MDE5LjgxNzY0Nzk4ODQ1NDY4NDQ1MTk2ODY5RSs2NTEgNi4xNDk2MTI1NjU0MDQwODA1MDExNTcwOTM4NTE4OTVFKzgxNyAtPiA2LjE0OTYxMjU2NTQwNDA4MDUwMTE1NzA5Mzg1MTg5NUUrODE3IEluZXhhY3QgUm91bmRlZAorY29teDMwODUgY29tcGFyZSA2MDg2NzAxOS44MTc2NDc5ODg0NTQ2ODQ0NTE5Njg2OUUrNjUxIDYuMTQ5NjEyNTY1NDA0MDgwNTAxMTU3MDkzODUxODk1RSs4MTcgLT4gLTEKK2RpdngzMDg1IGRpdmlkZSA2MDg2NzAxOS44MTc2NDc5ODg0NTQ2ODQ0NTE5Njg2OUUrNjUxIDYuMTQ5NjEyNTY1NDA0MDgwNTAxMTU3MDkzODUxODk1RSs4MTcgLT4gOS44OTc2OTk5MjM0MTc2MTc5MjA5OTYxODc0MjA5NjhFLTE2MCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDg1IGRpdmlkZWludCA2MDg2NzAxOS44MTc2NDc5ODg0NTQ2ODQ0NTE5Njg2OUUrNjUxIDYuMTQ5NjEyNTY1NDA0MDgwNTAxMTU3MDkzODUxODk1RSs4MTcgLT4gMAorbXVseDMwODUgbXVsdGlwbHkgNjA4NjcwMTkuODE3NjQ3OTg4NDU0Njg0NDUxOTY4NjlFKzY1MSA2LjE0OTYxMjU2NTQwNDA4MDUwMTE1NzA5Mzg1MTg5NUUrODE3IC0+IDMuNzQzMDg1ODk4ODkzMDcyNTQ0MTk3NTY0MDEzNDk3RSsxNDc2IEluZXhhY3QgUm91bmRlZAorcG93eDMwODUgcG93ZXIgNjA4NjcwMTkuODE3NjQ3OTg4NDU0Njg0NDUxOTY4NjlFKzY1MSA2IC0+IDUuMDg1MDE0ODk3Mzg4ODcxNzM2NzY3NjAyMDg2NjQ2RSszOTUyIEluZXhhY3QgUm91bmRlZAorcmVteDMwODUgcmVtYWluZGVyIDYwODY3MDE5LjgxNzY0Nzk4ODQ1NDY4NDQ1MTk2ODY5RSs2NTEgNi4xNDk2MTI1NjU0MDQwODA1MDExNTcwOTM4NTE4OTVFKzgxNyAtPiA2LjA4NjcwMTk4MTc2NDc5ODg0NTQ2ODQ0NTE5Njg2OUUrNjU4CitzdWJ4MzA4NSBzdWJ0cmFjdCA2MDg2NzAxOS44MTc2NDc5ODg0NTQ2ODQ0NTE5Njg2OUUrNjUxIDYuMTQ5NjEyNTY1NDA0MDgwNTAxMTU3MDkzODUxODk1RSs4MTcgLT4gLTYuMTQ5NjEyNTY1NDA0MDgwNTAxMTU3MDkzODUxODk1RSs4MTcgSW5leGFjdCBSb3VuZGVkCithZGR4MzA4NiBhZGQgMTg1NTQ0MTc3MzgyMTcuNjIyMTg1OTA5NjU4MDM2MDVFLTM4MiAtMDg5NDUwNTkwOTUyOS4wNTIzNzg0NzQ2MTg0MzU3ODJFKzUyNyAtPiAtOC45NDUwNTkwOTUyOTA1MjM3ODQ3NDYxODQzNTc4MjBFKzUzOCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDg2IGNvbXBhcmUgMTg1NTQ0MTc3MzgyMTcuNjIyMTg1OTA5NjU4MDM2MDVFLTM4MiAtMDg5NDUwNTkwOTUyOS4wNTIzNzg0NzQ2MTg0MzU3ODJFKzUyNyAtPiAxCitkaXZ4MzA4NiBkaXZpZGUgMTg1NTQ0MTc3MzgyMTcuNjIyMTg1OTA5NjU4MDM2MDVFLTM4MiAtMDg5NDUwNTkwOTUyOS4wNTIzNzg0NzQ2MTg0MzU3ODJFKzUyNyAtPiAtMi4wNzQyNjQ0MTEyODY3MDkyMjg2NzQ4NDE2NzI5NTRFLTkwOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDg2IGRpdmlkZWludCAxODU1NDQxNzczODIxNy42MjIxODU5MDk2NTgwMzYwNUUtMzgyIC0wODk0NTA1OTA5NTI5LjA1MjM3ODQ3NDYxODQzNTc4MkUrNTI3IC0+IC0wCittdWx4MzA4NiBtdWx0aXBseSAxODU1NDQxNzczODIxNy42MjIxODU5MDk2NTgwMzYwNUUtMzgyIC0wODk0NTA1OTA5NTI5LjA1MjM3ODQ3NDYxODQzNTc4MkUrNTI3IC0+IC0xLjY1OTcwMzYzMTQ3MDYzMzcwMDg4NDEzNjg4NzYxNEUrMTcwIEluZXhhY3QgUm91bmRlZAorcG93eDMwODYgcG93ZXIgMTg1NTQ0MTc3MzgyMTcuNjIyMTg1OTA5NjU4MDM2MDVFLTM4MiAtOSAtPiAzLjgzNjg0Mjk5ODI5NTUzMTg5OTA4MjY4ODcyMTUzMUUrMzMxOCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDg2IHJlbWFpbmRlciAxODU1NDQxNzczODIxNy42MjIxODU5MDk2NTgwMzYwNUUtMzgyIC0wODk0NTA1OTA5NTI5LjA1MjM3ODQ3NDYxODQzNTc4MkUrNTI3IC0+IDEuODU1NDQxNzczODIxNzYyMjE4NTkwOTY1ODAzNjA1RS0zNjkKK3N1YngzMDg2IHN1YnRyYWN0IDE4NTU0NDE3NzM4MjE3LjYyMjE4NTkwOTY1ODAzNjA1RS0zODIgLTA4OTQ1MDU5MDk1MjkuMDUyMzc4NDc0NjE4NDM1NzgyRSs1MjcgLT4gOC45NDUwNTkwOTUyOTA1MjM3ODQ3NDYxODQzNTc4MjBFKzUzOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDg3IGFkZCA2OTA3MzM1NTUxNzE0NC4zNjM1NjY4ODY0MjIxMzgzOSA5OTc3ODQ3ODI1MzUuNjEwNDYzNDgyMzYyNzMyNzAzM0UrMTE2IC0+IDkuOTc3ODQ3ODI1MzU2MTA0NjM0ODIzNjI3MzI3MDMzRSsxMjcgSW5leGFjdCBSb3VuZGVkCitjb214MzA4NyBjb21wYXJlIDY5MDczMzU1NTE3MTQ0LjM2MzU2Njg4NjQyMjEzODM5IDk5Nzc4NDc4MjUzNS42MTA0NjM0ODIzNjI3MzI3MDMzRSsxMTYgLT4gLTEKK2RpdngzMDg3IGRpdmlkZSA2OTA3MzM1NTUxNzE0NC4zNjM1NjY4ODY0MjIxMzgzOSA5OTc3ODQ3ODI1MzUuNjEwNDYzNDgyMzYyNzMyNzAzM0UrMTE2IC0+IDYuOTIyNjcwNzcyOTEwODA3Mzg4Mzk1Mzg0ODY2ODg0RS0xMTUgSW5leGFjdCBSb3VuZGVkCitkdml4MzA4NyBkaXZpZGVpbnQgNjkwNzMzNTU1MTcxNDQuMzYzNTY2ODg2NDIyMTM4MzkgOTk3Nzg0NzgyNTM1LjYxMDQ2MzQ4MjM2MjczMjcwMzNFKzExNiAtPiAwCittdWx4MzA4NyBtdWx0aXBseSA2OTA3MzM1NTUxNzE0NC4zNjM1NjY4ODY0MjIxMzgzOSA5OTc3ODQ3ODI1MzUuNjEwNDYzNDgyMzYyNzMyNzAzM0UrMTE2IC0+IDYuODkyMDM0MzAxMzY3ODc5ODAyNjkzNDIyMDY2NDI1RSsxNDEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA4NyBwb3dlciA2OTA3MzM1NTUxNzE0NC4zNjM1NjY4ODY0MjIxMzgzOSAxMCAtPiAyLjQ3MjMyNDg5MDg0MTMzNDMwMjYyODQzNTQ2MTUxNkUrMTM4IEluZXhhY3QgUm91bmRlZAorcmVteDMwODcgcmVtYWluZGVyIDY5MDczMzU1NTE3MTQ0LjM2MzU2Njg4NjQyMjEzODM5IDk5Nzc4NDc4MjUzNS42MTA0NjM0ODIzNjI3MzI3MDMzRSsxMTYgLT4gNjkwNzMzNTU1MTcxNDQuMzYzNTY2ODg2NDIyMTM4MzkKK3N1YngzMDg3IHN1YnRyYWN0IDY5MDczMzU1NTE3MTQ0LjM2MzU2Njg4NjQyMjEzODM5IDk5Nzc4NDc4MjUzNS42MTA0NjM0ODIzNjI3MzI3MDMzRSsxMTYgLT4gLTkuOTc3ODQ3ODI1MzU2MTA0NjM0ODIzNjI3MzI3MDMzRSsxMjcgSW5leGFjdCBSb3VuZGVkCithZGR4MzA4OCBhZGQgNDUwMjgyMjU5MDcyLjg2NTcwOTkzNTkxMDQyNzc0NzcgLTE3OTEzMDc5NjUzMTQzMDkxNzU0Nzc5MTEzNjk4MjQgLT4gLTE3OTEzMDc5NjUzMTQzMDkxNzUwMjc2MjkxMTA3NTEgSW5leGFjdCBSb3VuZGVkCitjb214MzA4OCBjb21wYXJlIDQ1MDI4MjI1OTA3Mi44NjU3MDk5MzU5MTA0Mjc3NDc3IC0xNzkxMzA3OTY1MzE0MzA5MTc1NDc3OTExMzY5ODI0IC0+IDEKK2RpdngzMDg4IGRpdmlkZSA0NTAyODIyNTkwNzIuODY1NzA5OTM1OTEwNDI3NzQ3NyAtMTc5MTMwNzk2NTMxNDMwOTE3NTQ3NzkxMTM2OTgyNCAtPiAtMi41MTM3MDY1NjQwOTYzNTA3MTQyMTM3NzEwMDY0ODNFLTE5IEluZXhhY3QgUm91bmRlZAorZHZpeDMwODggZGl2aWRlaW50IDQ1MDI4MjI1OTA3Mi44NjU3MDk5MzU5MTA0Mjc3NDc3IC0xNzkxMzA3OTY1MzE0MzA5MTc1NDc3OTExMzY5ODI0IC0+IC0wCittdWx4MzA4OCBtdWx0aXBseSA0NTAyODIyNTkwNzIuODY1NzA5OTM1OTEwNDI3NzQ3NyAtMTc5MTMwNzk2NTMxNDMwOTE3NTQ3NzkxMTM2OTgyNCAtPiAtOC4wNjU5NDE5NzMxNjk0NTcwNzE2NTA5OTY4NjE2NzdFKzQxIEluZXhhY3QgUm91bmRlZAorcG93eDMwODggcG93ZXIgNDUwMjgyMjU5MDcyLjg2NTcwOTkzNTkxMDQyNzc0NzcgLTIgLT4gNC45MzIwODI0NDIxOTQ1NDQ2NzE2MzM1NzAzNDg4MzhFLTI0IEluZXhhY3QgUm91bmRlZAorcmVteDMwODggcmVtYWluZGVyIDQ1MDI4MjI1OTA3Mi44NjU3MDk5MzU5MTA0Mjc3NDc3IC0xNzkxMzA3OTY1MzE0MzA5MTc1NDc3OTExMzY5ODI0IC0+IDQ1MDI4MjI1OTA3Mi44NjU3MDk5MzU5MTA0Mjc3NDc3CitzdWJ4MzA4OCBzdWJ0cmFjdCA0NTAyODIyNTkwNzIuODY1NzA5OTM1OTEwNDI3NzQ3NyAtMTc5MTMwNzk2NTMxNDMwOTE3NTQ3NzkxMTM2OTgyNCAtPiAxNzkxMzA3OTY1MzE0MzA5MTc1OTI4MTkzNjI4ODk3IEluZXhhY3QgUm91bmRlZAorYWRkeDMwODkgYWRkIDk1NDY3ODQxMS43ODM4MTQ5MjY2NDU1MTc3ODUwMDM3IDE0Mjk4OC43MDk2MjA0MjU0NTI5Mjg0MzM0Mjc4Nzk0IC0+IDk1NDgyMTQwMC40OTM0MzUzNTIwOTg0NDYyMTg0MzE2IEluZXhhY3QgUm91bmRlZAorY29teDMwODkgY29tcGFyZSA5NTQ2Nzg0MTEuNzgzODE0OTI2NjQ1NTE3Nzg1MDAzNyAxNDI5ODguNzA5NjIwNDI1NDUyOTI4NDMzNDI3ODc5NCAtPiAxCitkaXZ4MzA4OSBkaXZpZGUgOTU0Njc4NDExLjc4MzgxNDkyNjY0NTUxNzc4NTAwMzcgMTQyOTg4LjcwOTYyMDQyNTQ1MjkyODQzMzQyNzg3OTQgLT4gNjY3Ni41OTk5NTE5Njg4MTE1ODkzMzU0Mjc3NzAwNDYgSW5leGFjdCBSb3VuZGVkCitkdml4MzA4OSBkaXZpZGVpbnQgOTU0Njc4NDExLjc4MzgxNDkyNjY0NTUxNzc4NTAwMzcgMTQyOTg4LjcwOTYyMDQyNTQ1MjkyODQzMzQyNzg3OTQgLT4gNjY3NgorbXVseDMwODkgbXVsdGlwbHkgOTU0Njc4NDExLjc4MzgxNDkyNjY0NTUxNzc4NTAwMzcgMTQyOTg4LjcwOTYyMDQyNTQ1MjkyODQzMzQyNzg3OTQgLT4gMTM2NTA4MjM0MjAzNDQ0Ljg2OTQ4Nzk0MzE0MTIzNzUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzA4OSBwb3dlciA5NTQ2Nzg0MTEuNzgzODE0OTI2NjQ1NTE3Nzg1MDAzNyAxNDI5ODkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzA4OSByZW1haW5kZXIgOTU0Njc4NDExLjc4MzgxNDkyNjY0NTUxNzc4NTAwMzcgMTQyOTg4LjcwOTYyMDQyNTQ1MjkyODQzMzQyNzg3OTQgLT4gODU3ODYuMzU3ODU0NjAyODk1Mjk2MjIwNDgwODI1Ngorc3VieDMwODkgc3VidHJhY3QgOTU0Njc4NDExLjc4MzgxNDkyNjY0NTUxNzc4NTAwMzcgMTQyOTg4LjcwOTYyMDQyNTQ1MjkyODQzMzQyNzg3OTQgLT4gOTU0NTM1NDIzLjA3NDE5NDUwMTE5MjU4OTM1MTU3NTggSW5leGFjdCBSb3VuZGVkCithZGR4MzA5MCBhZGQgLTkyNDQ1MzA5NzYuMjIwODEyMTI3MTU1ODUyMzg5ODA3RSs1NTcgNTQxMDg5LjQ3MTU0NDY4NTg4OTY2MTkwNzg2Mjc5NDEgLT4gLTkuMjQ0NTMwOTc2MjIwODEyMTI3MTU1ODUyMzg5ODA3RSs1NjYgSW5leGFjdCBSb3VuZGVkCitjb214MzA5MCBjb21wYXJlIC05MjQ0NTMwOTc2LjIyMDgxMjEyNzE1NTg1MjM4OTgwN0UrNTU3IDU0MTA4OS40NzE1NDQ2ODU4ODk2NjE5MDc4NjI3OTQxIC0+IC0xCitkaXZ4MzA5MCBkaXZpZGUgLTkyNDQ1MzA5NzYuMjIwODEyMTI3MTU1ODUyMzg5ODA3RSs1NTcgNTQxMDg5LjQ3MTU0NDY4NTg4OTY2MTkwNzg2Mjc5NDEgLT4gLTEuNzA4NTAzMjA3Mzk1NTkxMDAyMzcwNjQ5ODQ4NzU3RSs1NjEgSW5leGFjdCBSb3VuZGVkCitkdml4MzA5MCBkaXZpZGVpbnQgLTkyNDQ1MzA5NzYuMjIwODEyMTI3MTU1ODUyMzg5ODA3RSs1NTcgNTQxMDg5LjQ3MTU0NDY4NTg4OTY2MTkwNzg2Mjc5NDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMDkwIG11bHRpcGx5IC05MjQ0NTMwOTc2LjIyMDgxMjEyNzE1NTg1MjM4OTgwN0UrNTU3IDU0MTA4OS40NzE1NDQ2ODU4ODk2NjE5MDc4NjI3OTQxIC0+IC01LjAwMjExODM4MDYwMTc5ODM5MjM2MzA0MzU1ODk0MUUrNTcyIEluZXhhY3QgUm91bmRlZAorcG93eDMwOTAgcG93ZXIgLTkyNDQ1MzA5NzYuMjIwODEyMTI3MTU1ODUyMzg5ODA3RSs1NTcgNTQxMDg5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDkwIHJlbWFpbmRlciAtOTI0NDUzMDk3Ni4yMjA4MTIxMjcxNTU4NTIzODk4MDdFKzU1NyA1NDEwODkuNDcxNTQ0Njg1ODg5NjYxOTA3ODYyNzk0MSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMwOTAgc3VidHJhY3QgLTkyNDQ1MzA5NzYuMjIwODEyMTI3MTU1ODUyMzg5ODA3RSs1NTcgNTQxMDg5LjQ3MTU0NDY4NTg4OTY2MTkwNzg2Mjc5NDEgLT4gLTkuMjQ0NTMwOTc2MjIwODEyMTI3MTU1ODUyMzg5ODA3RSs1NjYgSW5leGFjdCBSb3VuZGVkCithZGR4MzA5MSBhZGQgLTc1NDkyMDI0LjIwOTkwMTk3MDA1OTc0MjQxOTc1NDQ5IC0xNDc2MDQyMTMxMTM0OC4zNTI2OTA0NDYzMzAwMDkyNyAtPiAtMTQ3NjA0OTY4MDMzNzIuNTYyNTkyNDE2Mzg5NzUxNjkgSW5leGFjdCBSb3VuZGVkCitjb214MzA5MSBjb21wYXJlIC03NTQ5MjAyNC4yMDk5MDE5NzAwNTk3NDI0MTk3NTQ0OSAtMTQ3NjA0MjEzMTEzNDguMzUyNjkwNDQ2MzMwMDA5MjcgLT4gMQorZGl2eDMwOTEgZGl2aWRlIC03NTQ5MjAyNC4yMDk5MDE5NzAwNTk3NDI0MTk3NTQ0OSAtMTQ3NjA0MjEzMTEzNDguMzUyNjkwNDQ2MzMwMDA5MjcgLT4gMC4wMDAwMDUxMTQ0ODk3OTc5MjA2Njg4MzYyNzgzNDQ2MzUxMDggSW5leGFjdCBSb3VuZGVkCitkdml4MzA5MSBkaXZpZGVpbnQgLTc1NDkyMDI0LjIwOTkwMTk3MDA1OTc0MjQxOTc1NDQ5IC0xNDc2MDQyMTMxMTM0OC4zNTI2OTA0NDYzMzAwMDkyNyAtPiAwCittdWx4MzA5MSBtdWx0aXBseSAtNzU0OTIwMjQuMjA5OTAxOTcwMDU5NzQyNDE5NzU0NDkgLTE0NzYwNDIxMzExMzQ4LjM1MjY5MDQ0NjMzMDAwOTI3IC0+IDExMTQyOTQwODI5ODQ2NjI4MjU4MzEuNDY0Nzg3NDg3IEluZXhhY3QgUm91bmRlZAorcG93eDMwOTEgcG93ZXIgLTc1NDkyMDI0LjIwOTkwMTk3MDA1OTc0MjQxOTc1NDQ5IC0xIC0+IC0xLjMyNDY0MzI0NjA0NjE2MjA4MjM0ODk3MDczNTU3NkUtOCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDkxIHJlbWFpbmRlciAtNzU0OTIwMjQuMjA5OTAxOTcwMDU5NzQyNDE5NzU0NDkgLTE0NzYwNDIxMzExMzQ4LjM1MjY5MDQ0NjMzMDAwOTI3IC0+IC03NTQ5MjAyNC4yMDk5MDE5NzAwNTk3NDI0MTk3NTQ0OQorc3VieDMwOTEgc3VidHJhY3QgLTc1NDkyMDI0LjIwOTkwMTk3MDA1OTc0MjQxOTc1NDQ5IC0xNDc2MDQyMTMxMTM0OC4zNTI2OTA0NDYzMzAwMDkyNyAtPiAxNDc2MDM0NTgxOTMyNC4xNDI3ODg0NzYyNzAyNjY4NSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDkyIGFkZCAzMTc3NDcuNjk3MjIxNTcxNTQzNDE4NjU5NjE3ODAzNkUtNDUyIDI0NzU5NzYzLjMzMTQ0ODI0NjEzNTkxMjI4MDk3MzMwRSswOTIgLT4gMi40NzU5NzYzMzMxNDQ4MjQ2MTM1OTEyMjgwOTczMzBFKzk5IEluZXhhY3QgUm91bmRlZAorY29teDMwOTIgY29tcGFyZSAzMTc3NDcuNjk3MjIxNTcxNTQzNDE4NjU5NjE3ODAzNkUtNDUyIDI0NzU5NzYzLjMzMTQ0ODI0NjEzNTkxMjI4MDk3MzMwRSswOTIgLT4gLTEKK2RpdngzMDkyIGRpdmlkZSAzMTc3NDcuNjk3MjIxNTcxNTQzNDE4NjU5NjE3ODAzNkUtNDUyIDI0NzU5NzYzLjMzMTQ0ODI0NjEzNTkxMjI4MDk3MzMwRSswOTIgLT4gMS4yODMzMjI4MzcwMDc4NTIyNDc1OTQyMTYxNTE2MzRFLTU0NiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDkyIGRpdmlkZWludCAzMTc3NDcuNjk3MjIxNTcxNTQzNDE4NjU5NjE3ODAzNkUtNDUyIDI0NzU5NzYzLjMzMTQ0ODI0NjEzNTkxMjI4MDk3MzMwRSswOTIgLT4gMAorbXVseDMwOTIgbXVsdGlwbHkgMzE3NzQ3LjY5NzIyMTU3MTU0MzQxODY1OTYxNzgwMzZFLTQ1MiAyNDc1OTc2My4zMzE0NDgyNDYxMzU5MTIyODA5NzMzMEUrMDkyIC0+IDcuODY3MzU3NzgyMzE4Nzg2ODYwNDA0OTk3NjQ3NTEzRS0zNDggSW5leGFjdCBSb3VuZGVkCitwb3d4MzA5MiBwb3dlciAzMTc3NDcuNjk3MjIxNTcxNTQzNDE4NjU5NjE3ODAzNkUtNDUyIDIgLT4gMS4wMDk2MzU5OTA4OTYxMTUwNDMzMzEyMzE0OTYyMDlFLTg5MyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDkyIHJlbWFpbmRlciAzMTc3NDcuNjk3MjIxNTcxNTQzNDE4NjU5NjE3ODAzNkUtNDUyIDI0NzU5NzYzLjMzMTQ0ODI0NjEzNTkxMjI4MDk3MzMwRSswOTIgLT4gMy4xNzc0NzY5NzIyMTU3MTU0MzQxODY1OTYxNzgwMzZFLTQ0Nworc3VieDMwOTIgc3VidHJhY3QgMzE3NzQ3LjY5NzIyMTU3MTU0MzQxODY1OTYxNzgwMzZFLTQ1MiAyNDc1OTc2My4zMzE0NDgyNDYxMzU5MTIyODA5NzMzMEUrMDkyIC0+IC0yLjQ3NTk3NjMzMzE0NDgyNDYxMzU5MTIyODA5NzMzMEUrOTkgSW5leGFjdCBSb3VuZGVkCithZGR4MzA5MyBhZGQgLTguMTUzMzM0NDMwMzU4NjQ3MTM0MzM0NTQ1MzUzNDI3IC05LjcxNzg3MjAyNTgxNDU5NjU0ODQ2Mjg1NDg1MzUyMiAtPiAtMTcuODcxMjA2NDU2MTczMjQzNjgyNzk3NDAwMjA2OTUgSW5leGFjdCBSb3VuZGVkCitjb214MzA5MyBjb21wYXJlIC04LjE1MzMzNDQzMDM1ODY0NzEzNDMzNDU0NTM1MzQyNyAtOS43MTc4NzIwMjU4MTQ1OTY1NDg0NjI4NTQ4NTM1MjIgLT4gMQorZGl2eDMwOTMgZGl2aWRlIC04LjE1MzMzNDQzMDM1ODY0NzEzNDMzNDU0NTM1MzQyNyAtOS43MTc4NzIwMjU4MTQ1OTY1NDg0NjI4NTQ4NTM1MjIgLT4gMC44MzkwMDQwOTU2MTg4ODU5OTcyMDQ0MzQ0NTMyMDE5IEluZXhhY3QgUm91bmRlZAorZHZpeDMwOTMgZGl2aWRlaW50IC04LjE1MzMzNDQzMDM1ODY0NzEzNDMzNDU0NTM1MzQyNyAtOS43MTc4NzIwMjU4MTQ1OTY1NDg0NjI4NTQ4NTM1MjIgLT4gMAorbXVseDMwOTMgbXVsdGlwbHkgLTguMTUzMzM0NDMwMzU4NjQ3MTM0MzM0NTQ1MzUzNDI3IC05LjcxNzg3MjAyNTgxNDU5NjU0ODQ2Mjg1NDg1MzUyMiAtPiA3OS4yMzMwNjA1Nzc4OTMyODU3ODkwMjk2MDYwNTIyMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDkzIHBvd2VyIC04LjE1MzMzNDQzMDM1ODY0NzEzNDMzNDU0NTM1MzQyNyAtMTAgLT4gNy43MDI3Nzg5NjY4NzY3MjcwNTY2MzU5NTI4MDExNjJFLTEwIEluZXhhY3QgUm91bmRlZAorcmVteDMwOTMgcmVtYWluZGVyIC04LjE1MzMzNDQzMDM1ODY0NzEzNDMzNDU0NTM1MzQyNyAtOS43MTc4NzIwMjU4MTQ1OTY1NDg0NjI4NTQ4NTM1MjIgLT4gLTguMTUzMzM0NDMwMzU4NjQ3MTM0MzM0NTQ1MzUzNDI3CitzdWJ4MzA5MyBzdWJ0cmFjdCAtOC4xNTMzMzQ0MzAzNTg2NDcxMzQzMzQ1NDUzNTM0MjcgLTkuNzE3ODcyMDI1ODE0NTk2NTQ4NDYyODU0ODUzNTIyIC0+IDEuNTY0NTM3NTk1NDU1OTQ5NDE0MTI4MzA5NTAwMDk1CithZGR4MzA5NCBhZGQgNy4yNjczNDUxOTc0OTI5NjczMzIzMjA0NTYwNjI5NjFFLTQ3OCA1MDU0MDE1NDgxODMzLjI2MzU0MTE4OTkxNjIwODA2NSAtPiA1MDU0MDE1NDgxODMzLjI2MzU0MTE4OTkxNjIwODA2NSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDk0IGNvbXBhcmUgNy4yNjczNDUxOTc0OTI5NjczMzIzMjA0NTYwNjI5NjFFLTQ3OCA1MDU0MDE1NDgxODMzLjI2MzU0MTE4OTkxNjIwODA2NSAtPiAtMQorZGl2eDMwOTQgZGl2aWRlIDcuMjY3MzQ1MTk3NDkyOTY3MzMyMzIwNDU2MDYyOTYxRS00NzggNTA1NDAxNTQ4MTgzMy4yNjM1NDExODk5MTYyMDgwNjUgLT4gMS40Mzc5MzQ4OTAzMDk2MDY1OTQ4OTUyOTk1NTg2NTRFLTQ5MCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDk0IGRpdmlkZWludCA3LjI2NzM0NTE5NzQ5Mjk2NzMzMjMyMDQ1NjA2Mjk2MUUtNDc4IDUwNTQwMTU0ODE4MzMuMjYzNTQxMTg5OTE2MjA4MDY1IC0+IDAKK211bHgzMDk0IG11bHRpcGx5IDcuMjY3MzQ1MTk3NDkyOTY3MzMyMzIwNDU2MDYyOTYxRS00NzggNTA1NDAxNTQ4MTgzMy4yNjM1NDExODk5MTYyMDgwNjUgLT4gMy42NzI5Mjc1MTM5OTU2MDczMDgwNDg3Mzc3NTE5NzJFLTQ2NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDk0IHBvd2VyIDcuMjY3MzQ1MTk3NDkyOTY3MzMyMzIwNDU2MDYyOTYxRS00NzggNSAtPiAyLjAyNzExNzYxNjg0NjY2ODU2ODEwODA5NjU4Mzg5N0UtMjM4NiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDk0IHJlbWFpbmRlciA3LjI2NzM0NTE5NzQ5Mjk2NzMzMjMyMDQ1NjA2Mjk2MUUtNDc4IDUwNTQwMTU0ODE4MzMuMjYzNTQxMTg5OTE2MjA4MDY1IC0+IDcuMjY3MzQ1MTk3NDkyOTY3MzMyMzIwNDU2MDYyOTYxRS00NzgKK3N1YngzMDk0IHN1YnRyYWN0IDcuMjY3MzQ1MTk3NDkyOTY3MzMyMzIwNDU2MDYyOTYxRS00NzggNTA1NDAxNTQ4MTgzMy4yNjM1NDExODk5MTYyMDgwNjUgLT4gLTUwNTQwMTU0ODE4MzMuMjYzNTQxMTg5OTE2MjA4MDY1IEluZXhhY3QgUm91bmRlZAorYWRkeDMwOTUgYWRkIC0xMjIzMzU0MDI5Ljg2MjU2NzA1NDIzMDkxMjI3MTE3MSA4MTM1Nzc0MjIzNDAxMzIyNzg1NDc1MDE0ODU1NjI1IC0+IDgxMzU3NzQyMjM0MDEzMjI3ODU0NzM3OTE1MDE1OTUgSW5leGFjdCBSb3VuZGVkCitjb214MzA5NSBjb21wYXJlIC0xMjIzMzU0MDI5Ljg2MjU2NzA1NDIzMDkxMjI3MTE3MSA4MTM1Nzc0MjIzNDAxMzIyNzg1NDc1MDE0ODU1NjI1IC0+IC0xCitkaXZ4MzA5NSBkaXZpZGUgLTEyMjMzNTQwMjkuODYyNTY3MDU0MjMwOTEyMjcxMTcxIDgxMzU3NzQyMjM0MDEzMjI3ODU0NzUwMTQ4NTU2MjUgLT4gLTEuNTAzNjcyNTQwODkyMDIwMzM3Njg4Mjc3NTUzNjkyRS0yMiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDk1IGRpdmlkZWludCAtMTIyMzM1NDAyOS44NjI1NjcwNTQyMzA5MTIyNzExNzEgODEzNTc3NDIyMzQwMTMyMjc4NTQ3NTAxNDg1NTYyNSAtPiAtMAorbXVseDMwOTUgbXVsdGlwbHkgLTEyMjMzNTQwMjkuODYyNTY3MDU0MjMwOTEyMjcxMTcxIDgxMzU3NzQyMjM0MDEzMjI3ODU0NzUwMTQ4NTU2MjUgLT4gLTkuOTUyOTMyMTgyMjUwMDA1MTE5MzA3NDI5MDYwODk0RSszOSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDk1IHBvd2VyIC0xMjIzMzU0MDI5Ljg2MjU2NzA1NDIzMDkxMjI3MTE3MSA4IC0+IDUuMDE2Njg5ODg3MTkyODMwNjY2ODQ4MDY4ODQxMjI3RSs3MiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDk1IHJlbWFpbmRlciAtMTIyMzM1NDAyOS44NjI1NjcwNTQyMzA5MTIyNzExNzEgODEzNTc3NDIyMzQwMTMyMjc4NTQ3NTAxNDg1NTYyNSAtPiAtMTIyMzM1NDAyOS44NjI1NjcwNTQyMzA5MTIyNzExNzEKK3N1YngzMDk1IHN1YnRyYWN0IC0xMjIzMzU0MDI5Ljg2MjU2NzA1NDIzMDkxMjI3MTE3MSA4MTM1Nzc0MjIzNDAxMzIyNzg1NDc1MDE0ODU1NjI1IC0+IC04MTM1Nzc0MjIzNDAxMzIyNzg1NDc2MjM4MjA5NjU1IEluZXhhY3QgUm91bmRlZAorYWRkeDMwOTYgYWRkIDI4NTM5NzY0NDExMS41NjU1Njc5OTYxMjExMzQ5OTgyRSs2NDUgLTI0Nzk0OTk0Mjc2MTMxNTc1MTkzNTk2MjcyODA3MDQgLT4gMi44NTM5NzY0NDExMTU2NTU2Nzk5NjEyMTEzNDk5ODJFKzY1NiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDk2IGNvbXBhcmUgMjg1Mzk3NjQ0MTExLjU2NTU2Nzk5NjEyMTEzNDk5ODJFKzY0NSAtMjQ3OTQ5OTQyNzYxMzE1NzUxOTM1OTYyNzI4MDcwNCAtPiAxCitkaXZ4MzA5NiBkaXZpZGUgMjg1Mzk3NjQ0MTExLjU2NTU2Nzk5NjEyMTEzNDk5ODJFKzY0NSAtMjQ3OTQ5OTQyNzYxMzE1NzUxOTM1OTYyNzI4MDcwNCAtPiAtMS4xNTEwMjkyODAwNzY0OTU2MjY0MjExMzQ3MzMxMjJFKzYyNiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDk2IGRpdmlkZWludCAyODUzOTc2NDQxMTEuNTY1NTY3OTk2MTIxMTM0OTk4MkUrNjQ1IC0yNDc5NDk5NDI3NjEzMTU3NTE5MzU5NjI3MjgwNzA0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzA5NiBtdWx0aXBseSAyODUzOTc2NDQxMTEuNTY1NTY3OTk2MTIxMTM0OTk4MkUrNjQ1IC0yNDc5NDk5NDI3NjEzMTU3NTE5MzU5NjI3MjgwNzA0IC0+IC03LjA3NjQzMjk1MjE2NzcwNDYxNDEzODQxMTc0MDAwMUUrNjg2IEluZXhhY3QgUm91bmRlZAorcG93eDMwOTYgcG93ZXIgMjg1Mzk3NjQ0MTExLjU2NTU2Nzk5NjEyMTEzNDk5ODJFKzY0NSAtMiAtPiAxLjIyNzcxOTcyMjA4Nzg2MDQwMTIzMzAzMDQ3OTQ1MUUtMTMxMyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMDk2IHJlbWFpbmRlciAyODUzOTc2NDQxMTEuNTY1NTY3OTk2MTIxMTM0OTk4MkUrNjQ1IC0yNDc5NDk5NDI3NjEzMTU3NTE5MzU5NjI3MjgwNzA0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzA5NiBzdWJ0cmFjdCAyODUzOTc2NDQxMTEuNTY1NTY3OTk2MTIxMTM0OTk4MkUrNjQ1IC0yNDc5NDk5NDI3NjEzMTU3NTE5MzU5NjI3MjgwNzA0IC0+IDIuODUzOTc2NDQxMTE1NjU1Njc5OTYxMjExMzQ5OTgyRSs2NTYgSW5leGFjdCBSb3VuZGVkCithZGR4MzA5NyBhZGQgLTQ2NzMxMTIuNjYzNDQyMzY2MjkzODEyMzQ2NjUzNDI5IC0zNDI5Ljk5ODQwMzE0MjU0NjAwMTQzODIzODQ2MDk1OCAtPiAtNDY3NjU0Mi42NjE4NDU1MDg4Mzk4MTM3ODQ4OTE4OTAgSW5leGFjdCBSb3VuZGVkCitjb214MzA5NyBjb21wYXJlIC00NjczMTEyLjY2MzQ0MjM2NjI5MzgxMjM0NjY1MzQyOSAtMzQyOS45OTg0MDMxNDI1NDYwMDE0MzgyMzg0NjA5NTggLT4gLTEKK2RpdngzMDk3IGRpdmlkZSAtNDY3MzExMi42NjM0NDIzNjYyOTM4MTIzNDY2NTM0MjkgLTM0MjkuOTk4NDAzMTQyNTQ2MDAxNDM4MjM4NDYwOTU4IC0+IDEzNjIuNDI0MTUxMzIzNDc3NTA1MDY0Njg2NTg5NzE2IEluZXhhY3QgUm91bmRlZAorZHZpeDMwOTcgZGl2aWRlaW50IC00NjczMTEyLjY2MzQ0MjM2NjI5MzgxMjM0NjY1MzQyOSAtMzQyOS45OTg0MDMxNDI1NDYwMDE0MzgyMzg0NjA5NTggLT4gMTM2MgorbXVseDMwOTcgbXVsdGlwbHkgLTQ2NzMxMTIuNjYzNDQyMzY2MjkzODEyMzQ2NjUzNDI5IC0zNDI5Ljk5ODQwMzE0MjU0NjAwMTQzODIzODQ2MDk1OCAtPiAxNjAyODc2ODk3My4zMTI1MjYzOTQ3NjE0ODM3MTM2MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDk3IHBvd2VyIC00NjczMTEyLjY2MzQ0MjM2NjI5MzgxMjM0NjY1MzQyOSAtMzQzMCAtPiAwRS0xMDAyOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzA5NyByZW1haW5kZXIgLTQ2NzMxMTIuNjYzNDQyMzY2MjkzODEyMzQ2NjUzNDI5IC0zNDI5Ljk5ODQwMzE0MjU0NjAwMTQzODIzODQ2MDk1OCAtPiAtMTQ1NC44MzgzNjIyMTg2Mzk4NTM0NjU4Njk2MDQyMDQKK3N1YngzMDk3IHN1YnRyYWN0IC00NjczMTEyLjY2MzQ0MjM2NjI5MzgxMjM0NjY1MzQyOSAtMzQyOS45OTg0MDMxNDI1NDYwMDE0MzgyMzg0NjA5NTggLT4gLTQ2Njk2ODIuNjY1MDM5MjIzNzQ3ODEwOTA4NDE0OTY4IEluZXhhY3QgUm91bmRlZAorYWRkeDMwOTggYWRkIDg4Ljk2NDkyNDc5NjgxMjc4MDc5ODYxNDU2MDUxMTAzIDM4NjkzOS40NjIxMDA2NTE0NzUxODg5MDk2NTEwOTIzRSsxMzkgLT4gMy44NjkzOTQ2MjEwMDY1MTQ3NTE4ODkwOTY1MTA5MjNFKzE0NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMDk4IGNvbXBhcmUgODguOTY0OTI0Nzk2ODEyNzgwNzk4NjE0NTYwNTExMDMgMzg2OTM5LjQ2MjEwMDY1MTQ3NTE4ODkwOTY1MTA5MjNFKzEzOSAtPiAtMQorZGl2eDMwOTggZGl2aWRlIDg4Ljk2NDkyNDc5NjgxMjc4MDc5ODYxNDU2MDUxMTAzIDM4NjkzOS40NjIxMDA2NTE0NzUxODg5MDk2NTEwOTIzRSsxMzkgLT4gMi4yOTkxOTQ5MjYwOTU5ODU2NDc4MjEzODU5Mzc2MThFLTE0MyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMDk4IGRpdmlkZWludCA4OC45NjQ5MjQ3OTY4MTI3ODA3OTg2MTQ1NjA1MTEwMyAzODY5MzkuNDYyMTAwNjUxNDc1MTg4OTA5NjUxMDkyM0UrMTM5IC0+IDAKK211bHgzMDk4IG11bHRpcGx5IDg4Ljk2NDkyNDc5NjgxMjc4MDc5ODYxNDU2MDUxMTAzIDM4NjkzOS40NjIxMDA2NTE0NzUxODg5MDk2NTEwOTIzRSsxMzkgLT4gMy40NDI0MDQwMTQ2NzAzNjQ3NjM3ODA5NDYyOTc4NTZFKzE0NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMDk4IHBvd2VyIDg4Ljk2NDkyNDc5NjgxMjc4MDc5ODYxNDU2MDUxMTAzIDQgLT4gNjI2NDMzOTEuNzMwNzgyOTAyMjY0NzQ3NTg4NTg5NzAgSW5leGFjdCBSb3VuZGVkCityZW14MzA5OCByZW1haW5kZXIgODguOTY0OTI0Nzk2ODEyNzgwNzk4NjE0NTYwNTExMDMgMzg2OTM5LjQ2MjEwMDY1MTQ3NTE4ODkwOTY1MTA5MjNFKzEzOSAtPiA4OC45NjQ5MjQ3OTY4MTI3ODA3OTg2MTQ1NjA1MTEwMworc3VieDMwOTggc3VidHJhY3QgODguOTY0OTI0Nzk2ODEyNzgwNzk4NjE0NTYwNTExMDMgMzg2OTM5LjQ2MjEwMDY1MTQ3NTE4ODkwOTY1MTA5MjNFKzEzOSAtPiAtMy44NjkzOTQ2MjEwMDY1MTQ3NTE4ODkwOTY1MTA5MjNFKzE0NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMDk5IGFkZCAwNjQzMjY4NDYuNDI4NjQzNzMwNDc4ODA2OTQ0NDMyNkUtOTQyIDkyLjIzNjQ5OTQyMDEwODYyMDg3MTQ5MDE1MDkxMzUwIC0+IDkyLjIzNjQ5OTQyMDEwODYyMDg3MTQ5MDE1MDkxMzUwIEluZXhhY3QgUm91bmRlZAorY29teDMwOTkgY29tcGFyZSAwNjQzMjY4NDYuNDI4NjQzNzMwNDc4ODA2OTQ0NDMyNkUtOTQyIDkyLjIzNjQ5OTQyMDEwODYyMDg3MTQ5MDE1MDkxMzUwIC0+IC0xCitkaXZ4MzA5OSBkaXZpZGUgMDY0MzI2ODQ2LjQyODY0MzczMDQ3ODgwNjk0NDQzMjZFLTk0MiA5Mi4yMzY0OTk0MjAxMDg2MjA4NzE0OTAxNTA5MTM1MCAtPiA2Ljk3NDEyMDUzMDcwODIzMDIyOTM0NDM0OTUzMTcxOUUtOTM3IEluZXhhY3QgUm91bmRlZAorZHZpeDMwOTkgZGl2aWRlaW50IDA2NDMyNjg0Ni40Mjg2NDM3MzA0Nzg4MDY5NDQ0MzI2RS05NDIgOTIuMjM2NDk5NDIwMTA4NjIwODcxNDkwMTUwOTEzNTAgLT4gMAorbXVseDMwOTkgbXVsdGlwbHkgMDY0MzI2ODQ2LjQyODY0MzczMDQ3ODgwNjk0NDQzMjZFLTk0MiA5Mi4yMzY0OTk0MjAxMDg2MjA4NzE0OTAxNTA5MTM1MCAtPiA1LjkzMzI4MzEzMzMxMzAxMzc1NTgxNDQwNTQzNjM0MkUtOTMzIEluZXhhY3QgUm91bmRlZAorcG93eDMwOTkgcG93ZXIgMDY0MzI2ODQ2LjQyODY0MzczMDQ3ODgwNjk0NDQzMjZFLTk0MiA5MiAtPiAwRS0xMDAyOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzA5OSByZW1haW5kZXIgMDY0MzI2ODQ2LjQyODY0MzczMDQ3ODgwNjk0NDQzMjZFLTk0MiA5Mi4yMzY0OTk0MjAxMDg2MjA4NzE0OTAxNTA5MTM1MCAtPiA2LjQzMjY4NDY0Mjg2NDM3MzA0Nzg4MDY5NDQ0MzI2RS05MzUKK3N1YngzMDk5IHN1YnRyYWN0IDA2NDMyNjg0Ni40Mjg2NDM3MzA0Nzg4MDY5NDQ0MzI2RS05NDIgOTIuMjM2NDk5NDIwMTA4NjIwODcxNDkwMTUwOTEzNTAgLT4gLTkyLjIzNjQ5OTQyMDEwODYyMDg3MTQ5MDE1MDkxMzUwIEluZXhhY3QgUm91bmRlZAorYWRkeDMxMDAgYWRkIDUwNDUwNy4wMDQzOTQ5MzI0NDMzMTcwNDA1Njk5MzYwIDYwNTM4Ny43MTc1NTIyOTU1MzQ0NjU5MzExMDcyMDk5IC0+IDExMDk4OTQuNzIxOTQ3MjI3OTc3NzgyOTcxNjc3MTQ2IEluZXhhY3QgUm91bmRlZAorY29teDMxMDAgY29tcGFyZSA1MDQ1MDcuMDA0Mzk0OTMyNDQzMzE3MDQwNTY5OTM2MCA2MDUzODcuNzE3NTUyMjk1NTM0NDY1OTMxMTA3MjA5OSAtPiAtMQorZGl2eDMxMDAgZGl2aWRlIDUwNDUwNy4wMDQzOTQ5MzI0NDMzMTcwNDA1Njk5MzYwIDYwNTM4Ny43MTc1NTIyOTU1MzQ0NjU5MzExMDcyMDk5IC0+IDAuODMzMzYxODEwNTY3ODcxODg5NTIxNjA2NzQ2MzgzMiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMTAwIGRpdmlkZWludCA1MDQ1MDcuMDA0Mzk0OTMyNDQzMzE3MDQwNTY5OTM2MCA2MDUzODcuNzE3NTUyMjk1NTM0NDY1OTMxMTA3MjA5OSAtPiAwCittdWx4MzEwMCBtdWx0aXBseSA1MDQ1MDcuMDA0Mzk0OTMyNDQzMzE3MDQwNTY5OTM2MCA2MDUzODcuNzE3NTUyMjk1NTM0NDY1OTMxMTA3MjA5OSAtPiAzMDU0MjIzNDM4NzkuNzk0MDgzODYzMDQwMTY1NjU4NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMTAwIHBvd2VyIDUwNDUwNy4wMDQzOTQ5MzI0NDMzMTcwNDA1Njk5MzYwIDYwNTM4OCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMTAwIHJlbWFpbmRlciA1MDQ1MDcuMDA0Mzk0OTMyNDQzMzE3MDQwNTY5OTM2MCA2MDUzODcuNzE3NTUyMjk1NTM0NDY1OTMxMTA3MjA5OSAtPiA1MDQ1MDcuMDA0Mzk0OTMyNDQzMzE3MDQwNTY5OTM2MAorc3VieDMxMDAgc3VidHJhY3QgNTA0NTA3LjAwNDM5NDkzMjQ0MzMxNzA0MDU2OTkzNjAgNjA1Mzg3LjcxNzU1MjI5NTUzNDQ2NTkzMTEwNzIwOTkgLT4gLTEwMDg4MC43MTMxNTczNjMwOTExNDg4OTA1MzcyNzM5CisKKy0tIHJhbmRvbWx5IGdlbmVyYXRlZCB0ZXN0Y2FzZXMgWzI2IFNlcCAyMDAxXQorcHJlY2lzaW9uOiAzMgorcm91bmRpbmc6IGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTk5CisKK2FkZHgzMjAxIGFkZCAxLjUyODM1NTAxNjM4Mzk3ODkzMTkxNDI0MzAyNTM2NDQgLTEuNjU3ODE1ODQ4NDgyMjk2OTUyMDQwNTI5MTM3OTQ5MiAtPiAtMC4xMjk0NjA4MzIwOTgzMTgwMjAxMjYyODYxMTI1ODQ4Citjb214MzIwMSBjb21wYXJlIDEuNTI4MzU1MDE2MzgzOTc4OTMxOTE0MjQzMDI1MzY0NCAtMS42NTc4MTU4NDg0ODIyOTY5NTIwNDA1MjkxMzc5NDkyIC0+IDEKK2RpdngzMjAxIGRpdmlkZSAxLjUyODM1NTAxNjM4Mzk3ODkzMTkxNDI0MzAyNTM2NDQgLTEuNjU3ODE1ODQ4NDgyMjk2OTUyMDQwNTI5MTM3OTQ5MiAtPiAtMC45MjE5MDg3OTgxMjMyNDMxMzYzMDI4Mjk4MDExMDI4MCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjAxIGRpdmlkZWludCAxLjUyODM1NTAxNjM4Mzk3ODkzMTkxNDI0MzAyNTM2NDQgLTEuNjU3ODE1ODQ4NDgyMjk2OTUyMDQwNTI5MTM3OTQ5MiAtPiAtMAorbXVseDMyMDEgbXVsdGlwbHkgMS41MjgzNTUwMTYzODM5Nzg5MzE5MTQyNDMwMjUzNjQ0IC0xLjY1NzgxNTg0ODQ4MjI5Njk1MjA0MDUyOTEzNzk0OTIgLT4gLTIuNTMzNzMxMTY4MjY4NzgwODkyNjYzMzkxMDc2MTYxNCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjAxIHBvd2VyIDEuNTI4MzU1MDE2MzgzOTc4OTMxOTE0MjQzMDI1MzY0NCAtMiAtPiAwLjQyODEwNjE4OTE2NTg0OTI0NDUxNDY2NjkxNjAzMTI4IEluZXhhY3QgUm91bmRlZAorcmVteDMyMDEgcmVtYWluZGVyIDEuNTI4MzU1MDE2MzgzOTc4OTMxOTE0MjQzMDI1MzY0NCAtMS42NTc4MTU4NDg0ODIyOTY5NTIwNDA1MjkxMzc5NDkyIC0+IDEuNTI4MzU1MDE2MzgzOTc4OTMxOTE0MjQzMDI1MzY0NAorc3VieDMyMDEgc3VidHJhY3QgMS41MjgzNTUwMTYzODM5Nzg5MzE5MTQyNDMwMjUzNjQ0IC0xLjY1NzgxNTg0ODQ4MjI5Njk1MjA0MDUyOTEzNzk0OTIgLT4gMy4xODYxNzA4NjQ4NjYyNzU4ODM5NTQ3NzIxNjMzMTM2CithZGR4MzIwMiBhZGQgLTYyMjkwMzAzMDYwNS4yODY3NTAzOTM3ODM2NTA3MzI2IDY1MTkzODg2MDcuMTMzMTg1NTcwNDQ3MTMyODc5NTgyMSAtPiAtNjE2MzgzNjQxOTk4LjE1MzU2NDgyMzMzNjUxNzg1MzAyIEluZXhhY3QgUm91bmRlZAorY29teDMyMDIgY29tcGFyZSAtNjIyOTAzMDMwNjA1LjI4Njc1MDM5Mzc4MzY1MDczMjYgNjUxOTM4ODYwNy4xMzMxODU1NzA0NDcxMzI4Nzk1ODIxIC0+IC0xCitkaXZ4MzIwMiBkaXZpZGUgLTYyMjkwMzAzMDYwNS4yODY3NTAzOTM3ODM2NTA3MzI2IDY1MTkzODg2MDcuMTMzMTg1NTcwNDQ3MTMyODc5NTgyMSAtPiAtOTUuNTQ2MjM0MTg1Nzg1MTEwNDkxNjc2ODk0MTUzNTEwIEluZXhhY3QgUm91bmRlZAorZHZpeDMyMDIgZGl2aWRlaW50IC02MjI5MDMwMzA2MDUuMjg2NzUwMzkzNzgzNjUwNzMyNiA2NTE5Mzg4NjA3LjEzMzE4NTU3MDQ0NzEzMjg3OTU4MjEgLT4gLTk1CittdWx4MzIwMiBtdWx0aXBseSAtNjIyOTAzMDMwNjA1LjI4Njc1MDM5Mzc4MzY1MDczMjYgNjUxOTM4ODYwNy4xMzMxODU1NzA0NDcxMzI4Nzk1ODIxIC0+IC00MDYwOTQ2OTIxMDc2ODQwNDQ5OTQ5LjY5ODg4Mjg0ODYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIwMiBwb3dlciAtNjIyOTAzMDMwNjA1LjI4Njc1MDM5Mzc4MzY1MDczMjYgNyAtPiAtMy42Mzg2NzM2NTk3NzAyNDA0MzUyODEzMzA4MDY0MzAwRSs4MiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjAyIHJlbWFpbmRlciAtNjIyOTAzMDMwNjA1LjI4Njc1MDM5Mzc4MzY1MDczMjYgNjUxOTM4ODYwNy4xMzMxODU1NzA0NDcxMzI4Nzk1ODIxIC0+IC0zNTYxMTEyOTI3LjYzNDEyMTIwMTMwNjAyNzE3MjMwMDUKK3N1YngzMjAyIHN1YnRyYWN0IC02MjI5MDMwMzA2MDUuMjg2NzUwMzkzNzgzNjUwNzMyNiA2NTE5Mzg4NjA3LjEzMzE4NTU3MDQ0NzEzMjg3OTU4MjEgLT4gLTYyOTQyMjQxOTIxMi40MTk5MzU5NjQyMzA3ODM2MTIxOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjAzIGFkZCAtNTY3NTkxNS4yNDY1NDU3NDg3NjMyMjUwMjQ1MjA5MDU0IDczOTEzOTA5ODgwLjM4MTM2Nzg5NTIwNTA4NjAyNzQxNiAtPiA3MzkwODIzMzk2NS4xMzQ4MjIxNDY0NDE4NjEwMDI4OTUgSW5leGFjdCBSb3VuZGVkCitjb214MzIwMyBjb21wYXJlIC01Njc1OTE1LjI0NjU0NTc0ODc2MzIyNTAyNDUyMDkwNTQgNzM5MTM5MDk4ODAuMzgxMzY3ODk1MjA1MDg2MDI3NDE2IC0+IC0xCitkaXZ4MzIwMyBkaXZpZGUgLTU2NzU5MTUuMjQ2NTQ1NzQ4NzYzMjI1MDI0NTIwOTA1NCA3MzkxMzkwOTg4MC4zODEzNjc4OTUyMDUwODYwMjc0MTYgLT4gLTAuMDAwMDc2NzkwODk0Mzc2MDU2ODI3NTUyMzg4MDU0NjU3MDgyIEluZXhhY3QgUm91bmRlZAorZHZpeDMyMDMgZGl2aWRlaW50IC01Njc1OTE1LjI0NjU0NTc0ODc2MzIyNTAyNDUyMDkwNTQgNzM5MTM5MDk4ODAuMzgxMzY3ODk1MjA1MDg2MDI3NDE2IC0+IC0wCittdWx4MzIwMyBtdWx0aXBseSAtNTY3NTkxNS4yNDY1NDU3NDg3NjMyMjUwMjQ1MjA5MDU0IDczOTEzOTA5ODgwLjM4MTM2Nzg5NTIwNTA4NjAyNzQxNiAtPiAtNDE5NTI5MDg4MDIxODY1MDY3LjIzMzA3MzUyOTczNTg5IEluZXhhY3QgUm91bmRlZAorcG93eDMyMDMgcG93ZXIgLTU2NzU5MTUuMjQ2NTQ1NzQ4NzYzMjI1MDI0NTIwOTA1NCA3IC0+IC0xLjg5NzgwMzgwNjAyMDc3NzcyMzEzODkyMzQ3MjE5MDhFKzQ3IEluZXhhY3QgUm91bmRlZAorcmVteDMyMDMgcmVtYWluZGVyIC01Njc1OTE1LjI0NjU0NTc0ODc2MzIyNTAyNDUyMDkwNTQgNzM5MTM5MDk4ODAuMzgxMzY3ODk1MjA1MDg2MDI3NDE2IC0+IC01Njc1OTE1LjI0NjU0NTc0ODc2MzIyNTAyNDUyMDkwNTQKK3N1YngzMjAzIHN1YnRyYWN0IC01Njc1OTE1LjI0NjU0NTc0ODc2MzIyNTAyNDUyMDkwNTQgNzM5MTM5MDk4ODAuMzgxMzY3ODk1MjA1MDg2MDI3NDE2IC0+IC03MzkxOTU4NTc5NS42Mjc5MTM2NDM5NjgzMTEwNTE5MzcgSW5leGFjdCBSb3VuZGVkCithZGR4MzIwNCBhZGQgOTcuNjQ3MzIxMTcyNTU1MTQ0OTAwNjg1NjA1MzE4NjM1IDQuODYyMDkxMTU4NzU0NzU0ODc1MTIwOTg0MTU3MDg4NSAtPiAxMDIuNTA5NDEyMzMxMzA5ODk5Nzc1ODA2NTg5NDc1NzIgSW5leGFjdCBSb3VuZGVkCitjb214MzIwNCBjb21wYXJlIDk3LjY0NzMyMTE3MjU1NTE0NDkwMDY4NTYwNTMxODYzNSA0Ljg2MjA5MTE1ODc1NDc1NDg3NTEyMDk4NDE1NzA4ODUgLT4gMQorZGl2eDMyMDQgZGl2aWRlIDk3LjY0NzMyMTE3MjU1NTE0NDkwMDY4NTYwNTMxODYzNSA0Ljg2MjA5MTE1ODc1NDc1NDg3NTEyMDk4NDE1NzA4ODUgLT4gMjAuMDgzMzk5OTE2NjY1NDY2Mzc0NzQxNzA4OTQ5NjIxIEluZXhhY3QgUm91bmRlZAorZHZpeDMyMDQgZGl2aWRlaW50IDk3LjY0NzMyMTE3MjU1NTE0NDkwMDY4NTYwNTMxODYzNSA0Ljg2MjA5MTE1ODc1NDc1NDg3NTEyMDk4NDE1NzA4ODUgLT4gMjAKK211bHgzMjA0IG11bHRpcGx5IDk3LjY0NzMyMTE3MjU1NTE0NDkwMDY4NTYwNTMxODYzNSA0Ljg2MjA5MTE1ODc1NDc1NDg3NTEyMDk4NDE1NzA4ODUgLT4gNDc0Ljc3MDE3Njk0OTE2NjM1Mzk4NjUyMjc2MDQyMTc1IEluZXhhY3QgUm91bmRlZAorcG93eDMyMDQgcG93ZXIgOTcuNjQ3MzIxMTcyNTU1MTQ0OTAwNjg1NjA1MzE4NjM1IDUgLT4gODg3NzcyNDU3OC43OTM1MzEyOTM5MjMxODI4NzE5ODQyIEluZXhhY3QgUm91bmRlZAorcmVteDMyMDQgcmVtYWluZGVyIDk3LjY0NzMyMTE3MjU1NTE0NDkwMDY4NTYwNTMxODYzNSA0Ljg2MjA5MTE1ODc1NDc1NDg3NTEyMDk4NDE1NzA4ODUgLT4gMC40MDU0OTc5OTc0NjAwNDczOTgyNjU5MjIxNzY4NjUwCitzdWJ4MzIwNCBzdWJ0cmFjdCA5Ny42NDczMjExNzI1NTUxNDQ5MDA2ODU2MDUzMTg2MzUgNC44NjIwOTExNTg3NTQ3NTQ4NzUxMjA5ODQxNTcwODg1IC0+IDkyLjc4NTIzMDAxMzgwMDM5MDAyNTU2NDYyMTE2MTU0NyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjA1IGFkZCAtOTcxNzI1MzI2NzAyNC41MzgwNjUxNDM1NDM1NjAzNTUyIC0yNjY5LjI1Mzk2OTUxOTM4MjA0MjQwMDIwMTM0ODg0ODBFKzM2MyAtPiAtMi42NjkyNTM5Njk1MTkzODIwNDI0MDAyMDEzNDg4NDgwRSszNjYgSW5leGFjdCBSb3VuZGVkCitjb214MzIwNSBjb21wYXJlIC05NzE3MjUzMjY3MDI0LjUzODA2NTE0MzU0MzU2MDM1NTIgLTI2NjkuMjUzOTY5NTE5MzgyMDQyNDAwMjAxMzQ4ODQ4MEUrMzYzIC0+IDEKK2RpdngzMjA1IGRpdmlkZSAtOTcxNzI1MzI2NzAyNC41MzgwNjUxNDM1NDM1NjAzNTUyIC0yNjY5LjI1Mzk2OTUxOTM4MjA0MjQwMDIwMTM0ODg0ODBFKzM2MyAtPiAzLjY0MDQzNzg4MTg5MDM0NjI2OTU2MzMzMzc2MzEwOThFLTM1NCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjA1IGRpdmlkZWludCAtOTcxNzI1MzI2NzAyNC41MzgwNjUxNDM1NDM1NjAzNTUyIC0yNjY5LjI1Mzk2OTUxOTM4MjA0MjQwMDIwMTM0ODg0ODBFKzM2MyAtPiAwCittdWx4MzIwNSBtdWx0aXBseSAtOTcxNzI1MzI2NzAyNC41MzgwNjUxNDM1NDM1NjAzNTUyIC0yNjY5LjI1Mzk2OTUxOTM4MjA0MjQwMDIwMTM0ODg0ODBFKzM2MyAtPiAyLjU5Mzc4MTY4NTU4MzA0MzE4OTkxMjMyMTc5MTIxNDRFKzM3OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjA1IHBvd2VyIC05NzE3MjUzMjY3MDI0LjUzODA2NTE0MzU0MzU2MDM1NTIgLTMgLT4gLTEuMDg5ODU2Nzg4MDA4NTMzNzc4MDA0MTMyODY2MTMzMEUtMzkgSW5leGFjdCBSb3VuZGVkCityZW14MzIwNSByZW1haW5kZXIgLTk3MTcyNTMyNjcwMjQuNTM4MDY1MTQzNTQzNTYwMzU1MiAtMjY2OS4yNTM5Njk1MTkzODIwNDI0MDAyMDEzNDg4NDgwRSszNjMgLT4gLTk3MTcyNTMyNjcwMjQuNTM4MDY1MTQzNTQzNTYwMzU1Mgorc3VieDMyMDUgc3VidHJhY3QgLTk3MTcyNTMyNjcwMjQuNTM4MDY1MTQzNTQzNTYwMzU1MiAtMjY2OS4yNTM5Njk1MTkzODIwNDI0MDAyMDEzNDg4NDgwRSszNjMgLT4gMi42NjkyNTM5Njk1MTkzODIwNDI0MDAyMDEzNDg4NDgwRSszNjYgSW5leGFjdCBSb3VuZGVkCithZGR4MzIwNiBhZGQgLTQuMDgxNzM5MTcxNzE5MDEyODUwNjA4MzAwMTcwMjMzNUUtNzY3IDEyNzcyLjgwNzEwNTkyMDcxMjY2MDk5MTAzMzY4OTIwNiAtPiAxMjc3Mi44MDcxMDU5MjA3MTI2NjA5OTEwMzM2ODkyMDYgSW5leGFjdCBSb3VuZGVkCitjb214MzIwNiBjb21wYXJlIC00LjA4MTczOTE3MTcxOTAxMjg1MDYwODMwMDE3MDIzMzVFLTc2NyAxMjc3Mi44MDcxMDU5MjA3MTI2NjA5OTEwMzM2ODkyMDYgLT4gLTEKK2RpdngzMjA2IGRpdmlkZSAtNC4wODE3MzkxNzE3MTkwMTI4NTA2MDgzMDAxNzAyMzM1RS03NjcgMTI3NzIuODA3MTA1OTIwNzEyNjYwOTkxMDMzNjg5MjA2IC0+IC0zLjE5NTY0NzcwNTIxNTA1OTMxNzUyMDY3Njk4OTE0MzRFLTc3MSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjA2IGRpdmlkZWludCAtNC4wODE3MzkxNzE3MTkwMTI4NTA2MDgzMDAxNzAyMzM1RS03NjcgMTI3NzIuODA3MTA1OTIwNzEyNjYwOTkxMDMzNjg5MjA2IC0+IC0wCittdWx4MzIwNiBtdWx0aXBseSAtNC4wODE3MzkxNzE3MTkwMTI4NTA2MDgzMDAxNzAyMzM1RS03NjcgMTI3NzIuODA3MTA1OTIwNzEyNjYwOTkxMDMzNjg5MjA2IC0+IC01LjIxMzUyNjcwOTcwNDc1MzEzMzYxMDA3NTAxMTAzMTRFLTc2MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjA2IHBvd2VyIC00LjA4MTczOTE3MTcxOTAxMjg1MDYwODMwMDE3MDIzMzVFLTc2NyAxMjc3MyAtPiAtMEUtMTAwMzAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMyMDYgcmVtYWluZGVyIC00LjA4MTczOTE3MTcxOTAxMjg1MDYwODMwMDE3MDIzMzVFLTc2NyAxMjc3Mi44MDcxMDU5MjA3MTI2NjA5OTEwMzM2ODkyMDYgLT4gLTQuMDgxNzM5MTcxNzE5MDEyODUwNjA4MzAwMTcwMjMzNUUtNzY3CitzdWJ4MzIwNiBzdWJ0cmFjdCAtNC4wODE3MzkxNzE3MTkwMTI4NTA2MDgzMDAxNzAyMzM1RS03NjcgMTI3NzIuODA3MTA1OTIwNzEyNjYwOTkxMDMzNjg5MjA2IC0+IC0xMjc3Mi44MDcxMDU5MjA3MTI2NjA5OTEwMzM2ODkyMDYgSW5leGFjdCBSb3VuZGVkCithZGR4MzIwNyBhZGQgNjg2MjUzMjI2NTU5MzQxNDY4NDUwMDMwMjg5Mjg2NDcgLTU5LjYzNDE2OTk0NDg0MDI4MDE1OTc4MjQ4ODA5ODcwMCAtPiA2ODYyNTMyMjY1NTkzNDE0Njg0NTAwMzAyODkyODU4NyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjA3IGNvbXBhcmUgNjg2MjUzMjI2NTU5MzQxNDY4NDUwMDMwMjg5Mjg2NDcgLTU5LjYzNDE2OTk0NDg0MDI4MDE1OTc4MjQ4ODA5ODcwMCAtPiAxCitkaXZ4MzIwNyBkaXZpZGUgNjg2MjUzMjI2NTU5MzQxNDY4NDUwMDMwMjg5Mjg2NDcgLTU5LjYzNDE2OTk0NDg0MDI4MDE1OTc4MjQ4ODA5ODcwMCAtPiAtMTE1MDc3MTgyNjI3Njk1NDk0Njg0NDMyMjk4ODE5Mi41IEluZXhhY3QgUm91bmRlZAorZHZpeDMyMDcgZGl2aWRlaW50IDY4NjI1MzIyNjU1OTM0MTQ2ODQ1MDAzMDI4OTI4NjQ3IC01OS42MzQxNjk5NDQ4NDAyODAxNTk3ODI0ODgwOTg3MDAgLT4gLTExNTA3NzE4MjYyNzY5NTQ5NDY4NDQzMjI5ODgxOTIKK211bHgzMjA3IG11bHRpcGx5IDY4NjI1MzIyNjU1OTM0MTQ2ODQ1MDAzMDI4OTI4NjQ3IC01OS42MzQxNjk5NDQ4NDAyODAxNTk3ODI0ODgwOTg3MDAgLT4gLTQuMDkyNDE0MTUzNzgzNDc0ODUwMTE0MDE1MTk5Nzc3OEUrMzMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIwNyBwb3dlciA2ODYyNTMyMjY1NTkzNDE0Njg0NTAwMzAyODkyODY0NyAtNjAgLT4gNi40NzA0NzMxMTExOTQzMzcwMTcxNzExMTMxOTQyNjAzRS0xOTExIEluZXhhY3QgUm91bmRlZAorcmVteDMyMDcgcmVtYWluZGVyIDY4NjI1MzIyNjU1OTM0MTQ2ODQ1MDAzMDI4OTI4NjQ3IC01OS42MzQxNjk5NDQ4NDAyODAxNTk3ODI0ODgwOTg3MDAgLT4gMjguMjAxMjU0MDA0ODk3MjU3NTUyOTM5MzY5NDQ5NjAwCitzdWJ4MzIwNyBzdWJ0cmFjdCA2ODYyNTMyMjY1NTkzNDE0Njg0NTAwMzAyODkyODY0NyAtNTkuNjM0MTY5OTQ0ODQwMjgwMTU5NzgyNDg4MDk4NzAwIC0+IDY4NjI1MzIyNjU1OTM0MTQ2ODQ1MDAzMDI4OTI4NzA3IEluZXhhY3QgUm91bmRlZAorYWRkeDMyMDggYWRkIDczMjUxNS43NjUzMjA0OTI5MDgxNTY2NTg1NjcyNzY0MSAtOTIxMzQ0Nzk4MzU4MjEuMzE5NjE5ODI3MDIzNzI5ODI5IC0+IC05MjEzNDQ3OTEwMzMwNS41NTQyOTkzMzQxMTU1NzMxNzAgSW5leGFjdCBSb3VuZGVkCitjb214MzIwOCBjb21wYXJlIDczMjUxNS43NjUzMjA0OTI5MDgxNTY2NTg1NjcyNzY0MSAtOTIxMzQ0Nzk4MzU4MjEuMzE5NjE5ODI3MDIzNzI5ODI5IC0+IDEKK2RpdngzMjA4IGRpdmlkZSA3MzI1MTUuNzY1MzIwNDkyOTA4MTU2NjU4NTY3Mjc2NDEgLTkyMTM0NDc5ODM1ODIxLjMxOTYxOTgyNzAyMzcyOTgyOSAtPiAtNy45NTA1MDYzMzE4OTQzODQ2NjU1NTkzODg3OTkxOTE0RS05IEluZXhhY3QgUm91bmRlZAorZHZpeDMyMDggZGl2aWRlaW50IDczMjUxNS43NjUzMjA0OTI5MDgxNTY2NTg1NjcyNzY0MSAtOTIxMzQ0Nzk4MzU4MjEuMzE5NjE5ODI3MDIzNzI5ODI5IC0+IC0wCittdWx4MzIwOCBtdWx0aXBseSA3MzI1MTUuNzY1MzIwNDkyOTA4MTU2NjU4NTY3Mjc2NDEgLTkyMTM0NDc5ODM1ODIxLjMxOTYxOTgyNzAyMzcyOTgyOSAtPiAtNjc0ODk5NTkwMDkzNDIxNzU3MjguNzEwNDk0MzU2MzIyIEluZXhhY3QgUm91bmRlZAorcG93eDMyMDggcG93ZXIgNzMyNTE1Ljc2NTMyMDQ5MjkwODE1NjY1ODU2NzI3NjQxIC05IC0+IDEuNjQ2ODI0MTA1MDQ0MzQ3MTM1OTM1ODAxNjU4NTg3N0UtNTMgSW5leGFjdCBSb3VuZGVkCityZW14MzIwOCByZW1haW5kZXIgNzMyNTE1Ljc2NTMyMDQ5MjkwODE1NjY1ODU2NzI3NjQxIC05MjEzNDQ3OTgzNTgyMS4zMTk2MTk4MjcwMjM3Mjk4MjkgLT4gNzMyNTE1Ljc2NTMyMDQ5MjkwODE1NjY1ODU2NzI3NjQxCitzdWJ4MzIwOCBzdWJ0cmFjdCA3MzI1MTUuNzY1MzIwNDkyOTA4MTU2NjU4NTY3Mjc2NDEgLTkyMTM0NDc5ODM1ODIxLjMxOTYxOTgyNzAyMzcyOTgyOSAtPiA5MjEzNDQ4MDU2ODMzNy4wODQ5NDAzMTk5MzE4ODY0ODggSW5leGFjdCBSb3VuZGVkCithZGR4MzIwOSBhZGQgLTMwLjQ1ODAxMTk0Mjk3ODMzODQyMTY3NjQ1NDc3ODczMyAtNTAyMzM3MjAyNDU5NzY2NTEwMjMzNjQzMDQxMDQwM0UrODMxIC0+IC01LjAyMzM3MjAyNDU5NzY2NTEwMjMzNjQzMDQxMDQwMzBFKzg2MSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjA5IGNvbXBhcmUgLTMwLjQ1ODAxMTk0Mjk3ODMzODQyMTY3NjQ1NDc3ODczMyAtNTAyMzM3MjAyNDU5NzY2NTEwMjMzNjQzMDQxMDQwM0UrODMxIC0+IDEKK2RpdngzMjA5IGRpdmlkZSAtMzAuNDU4MDExOTQyOTc4MzM4NDIxNjc2NDU0Nzc4NzMzIC01MDIzMzcyMDI0NTk3NjY1MTAyMzM2NDMwNDEwNDAzRSs4MzEgLT4gNi4wNjMyNjAyNTUwMzExNDEwODIxNDgzMDAxMzA1MDEwRS04NjEgSW5leGFjdCBSb3VuZGVkCitkdml4MzIwOSBkaXZpZGVpbnQgLTMwLjQ1ODAxMTk0Mjk3ODMzODQyMTY3NjQ1NDc3ODczMyAtNTAyMzM3MjAyNDU5NzY2NTEwMjMzNjQzMDQxMDQwM0UrODMxIC0+IDAKK211bHgzMjA5IG11bHRpcGx5IC0zMC40NTgwMTE5NDI5NzgzMzg0MjE2NzY0NTQ3Nzg3MzMgLTUwMjMzNzIwMjQ1OTc2NjUxMDIzMzY0MzA0MTA0MDNFKzgzMSAtPiAxLjUzMDAxOTI1MTE5MjE4OTU5MjkwMzE4MTg2Mzg5NjFFKzg2MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjA5IHBvd2VyIC0zMC40NTgwMTE5NDI5NzgzMzg0MjE2NzY0NTQ3Nzg3MzMgLTUgLT4gLTMuODE0OTc5NzQ4MTQwNTEzNjA0MjQ4NzY0MzI1MzEwOUUtOCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjA5IHJlbWFpbmRlciAtMzAuNDU4MDExOTQyOTc4MzM4NDIxNjc2NDU0Nzc4NzMzIC01MDIzMzcyMDI0NTk3NjY1MTAyMzM2NDMwNDEwNDAzRSs4MzEgLT4gLTMwLjQ1ODAxMTk0Mjk3ODMzODQyMTY3NjQ1NDc3ODczMworc3VieDMyMDkgc3VidHJhY3QgLTMwLjQ1ODAxMTk0Mjk3ODMzODQyMTY3NjQ1NDc3ODczMyAtNTAyMzM3MjAyNDU5NzY2NTEwMjMzNjQzMDQxMDQwM0UrODMxIC0+IDUuMDIzMzcyMDI0NTk3NjY1MTAyMzM2NDMwNDEwNDAzMEUrODYxIEluZXhhY3QgUm91bmRlZAorYWRkeDMyMTAgYWRkIC04OTY0MC4wOTQxNDk0MTQ2NDQ2NjA0ODAyODY0MzA0NjIgLTU4NzAzNDE5NzU4LjgwMDg4OTkwMzIyNzUwOTIxNTQ3NCAtPiAtNTg3MDM1MDkzOTguODk1MDM5MzE3ODcyMTY5Njk1NzYwIEluZXhhY3QgUm91bmRlZAorY29teDMyMTAgY29tcGFyZSAtODk2NDAuMDk0MTQ5NDE0NjQ0NjYwNDgwMjg2NDMwNDYyIC01ODcwMzQxOTc1OC44MDA4ODk5MDMyMjc1MDkyMTU0NzQgLT4gMQorZGl2eDMyMTAgZGl2aWRlIC04OTY0MC4wOTQxNDk0MTQ2NDQ2NjA0ODAyODY0MzA0NjIgLTU4NzAzNDE5NzU4LjgwMDg4OTkwMzIyNzUwOTIxNTQ3NCAtPiAwLjAwMDAwMTUyNjk5OTUyNjA1MzYwMjUyMzcxNjcxOTk5NzAyMzggSW5leGFjdCBSb3VuZGVkCitkdml4MzIxMCBkaXZpZGVpbnQgLTg5NjQwLjA5NDE0OTQxNDY0NDY2MDQ4MDI4NjQzMDQ2MiAtNTg3MDM0MTk3NTguODAwODg5OTAzMjI3NTA5MjE1NDc0IC0+IDAKK211bHgzMjEwIG11bHRpcGx5IC04OTY0MC4wOTQxNDk0MTQ2NDQ2NjA0ODAyODY0MzA0NjIgLTU4NzAzNDE5NzU4LjgwMDg4OTkwMzIyNzUwOTIxNTQ3NCAtPiA1MjYyMTgwMDc0MDcxNTE5LjcwMTgyNTIxNzE1Nzk3NTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIxMCBwb3dlciAtODk2NDAuMDk0MTQ5NDE0NjQ0NjYwNDgwMjg2NDMwNDYyIC02IC0+IDEuOTI3NDYzNTU5MTE2NTQwNTg4ODcyNDU5NTE2NTc0MUUtMzAgSW5leGFjdCBSb3VuZGVkCityZW14MzIxMCByZW1haW5kZXIgLTg5NjQwLjA5NDE0OTQxNDY0NDY2MDQ4MDI4NjQzMDQ2MiAtNTg3MDM0MTk3NTguODAwODg5OTAzMjI3NTA5MjE1NDc0IC0+IC04OTY0MC4wOTQxNDk0MTQ2NDQ2NjA0ODAyODY0MzA0NjIKK3N1YngzMjEwIHN1YnRyYWN0IC04OTY0MC4wOTQxNDk0MTQ2NDQ2NjA0ODAyODY0MzA0NjIgLTU4NzAzNDE5NzU4LjgwMDg4OTkwMzIyNzUwOTIxNTQ3NCAtPiA1ODcwMzMzMDExOC43MDY3NDA0ODg1ODI4NDg3MzUxODggSW5leGFjdCBSb3VuZGVkCithZGR4MzIxMSBhZGQgNDU4NjUzLjE1Njc4NzAwODE4MTAwNTI5MTc3MTQyNTkgMTgzNTMxMDYyMzguNTE2MjM1MTE2MDgwNDQ5ODE0MDUzRS0wMzggLT4gNDU4NjUzLjE1Njc4NzAwODE4MTAwNTI5MTc3MTQyNTkwIEluZXhhY3QgUm91bmRlZAorY29teDMyMTEgY29tcGFyZSA0NTg2NTMuMTU2Nzg3MDA4MTgxMDA1MjkxNzcxNDI1OSAxODM1MzEwNjIzOC41MTYyMzUxMTYwODA0NDk4MTQwNTNFLTAzOCAtPiAxCitkaXZ4MzIxMSBkaXZpZGUgNDU4NjUzLjE1Njc4NzAwODE4MTAwNTI5MTc3MTQyNTkgMTgzNTMxMDYyMzguNTE2MjM1MTE2MDgwNDQ5ODE0MDUzRS0wMzggLT4gMi40OTkwNDkyMTE3NTk0MTYwMjE1NjQxMzExNzYwNDk4RSszMyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjExIGRpdmlkZWludCA0NTg2NTMuMTU2Nzg3MDA4MTgxMDA1MjkxNzcxNDI1OSAxODM1MzEwNjIzOC41MTYyMzUxMTYwODA0NDk4MTQwNTNFLTAzOCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMyMTEgbXVsdGlwbHkgNDU4NjUzLjE1Njc4NzAwODE4MTAwNTI5MTc3MTQyNTkgMTgzNTMxMDYyMzguNTE2MjM1MTE2MDgwNDQ5ODE0MDUzRS0wMzggLT4gOC40MTc3MTAxMTMxNDI4MDQ3NDk3OTk4NTk0Mzc5NTkzRS0yMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjExIHBvd2VyIDQ1ODY1My4xNTY3ODcwMDgxODEwMDUyOTE3NzE0MjU5IDIgLT4gMjEwMzYyNzE4MjMwLjY4NzkwODY1MTE3NDUyNDI5OTkwIEluZXhhY3QgUm91bmRlZAorcmVteDMyMTEgcmVtYWluZGVyIDQ1ODY1My4xNTY3ODcwMDgxODEwMDUyOTE3NzE0MjU5IDE4MzUzMTA2MjM4LjUxNjIzNTExNjA4MDQ0OTgxNDA1M0UtMDM4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzIxMSBzdWJ0cmFjdCA0NTg2NTMuMTU2Nzg3MDA4MTgxMDA1MjkxNzcxNDI1OSAxODM1MzEwNjIzOC41MTYyMzUxMTYwODA0NDk4MTQwNTNFLTAzOCAtPiA0NTg2NTMuMTU2Nzg3MDA4MTgxMDA1MjkxNzcxNDI1OTAgSW5leGFjdCBSb3VuZGVkCithZGR4MzIxMiBhZGQgOTEzMzkxLjQyNzQ0MjI0NDU4MjE2MTc0OTY3ODUzNzIyIC0yMTA1MTYzOC44MTY0MzI4MTczOTMyMDIyNjI3MTA2MzBFKzQzMiAtPiAtMi4xMDUxNjM4ODE2NDMyODE3MzkzMjAyMjYyNzEwNjMwRSs0MzkgSW5leGFjdCBSb3VuZGVkCitjb214MzIxMiBjb21wYXJlIDkxMzM5MS40Mjc0NDIyNDQ1ODIxNjE3NDk2Nzg1MzcyMiAtMjEwNTE2MzguODE2NDMyODE3MzkzMjAyMjYyNzEwNjMwRSs0MzIgLT4gMQorZGl2eDMyMTIgZGl2aWRlIDkxMzM5MS40Mjc0NDIyNDQ1ODIxNjE3NDk2Nzg1MzcyMiAtMjEwNTE2MzguODE2NDMyODE3MzkzMjAyMjYyNzEwNjMwRSs0MzIgLT4gLTQuMzM4ODEzODgyNDEwMjE1MTEyNzI3MzI1OTA5MjYxM0UtNDM0IEluZXhhY3QgUm91bmRlZAorZHZpeDMyMTIgZGl2aWRlaW50IDkxMzM5MS40Mjc0NDIyNDQ1ODIxNjE3NDk2Nzg1MzcyMiAtMjEwNTE2MzguODE2NDMyODE3MzkzMjAyMjYyNzEwNjMwRSs0MzIgLT4gLTAKK211bHgzMjEyIG11bHRpcGx5IDkxMzM5MS40Mjc0NDIyNDQ1ODIxNjE3NDk2Nzg1MzcyMiAtMjEwNTE2MzguODE2NDMyODE3MzkzMjAyMjYyNzEwNjMwRSs0MzIgLT4gLTEuOTIyODM4NjQyODU0MDEzNTM0MDYwMDgzNjcwNzI3MEUrNDQ1IEluZXhhY3QgUm91bmRlZAorcG93eDMyMTIgcG93ZXIgOTEzMzkxLjQyNzQ0MjI0NDU4MjE2MTc0OTY3ODUzNzIyIC0yIC0+IDEuMTk4NjMyNzQzOTk3MTUzMjQ3MDI5NzMwMDEyODA3NEUtMTIgSW5leGFjdCBSb3VuZGVkCityZW14MzIxMiByZW1haW5kZXIgOTEzMzkxLjQyNzQ0MjI0NDU4MjE2MTc0OTY3ODUzNzIyIC0yMTA1MTYzOC44MTY0MzI4MTczOTMyMDIyNjI3MTA2MzBFKzQzMiAtPiA5MTMzOTEuNDI3NDQyMjQ0NTgyMTYxNzQ5Njc4NTM3MjIKK3N1YngzMjEyIHN1YnRyYWN0IDkxMzM5MS40Mjc0NDIyNDQ1ODIxNjE3NDk2Nzg1MzcyMiAtMjEwNTE2MzguODE2NDMyODE3MzkzMjAyMjYyNzEwNjMwRSs0MzIgLT4gMi4xMDUxNjM4ODE2NDMyODE3MzkzMjAyMjYyNzEwNjMwRSs0MzkgSW5leGFjdCBSb3VuZGVkCithZGR4MzIxMyBhZGQgLTkxNzU5MTQ1NjgyOS4xMjEwOTAyNzQ4NDM5OTUzNjU2NyAtMjg4OTIxNzc3MjY4NTgwMjY5NTU1MTM0Mzg4NDMzNzFFKzcwOCAtPiAtMi44ODkyMTc3NzI2ODU4MDI2OTU1NTEzNDM4ODQzMzcxRSs3MzkgSW5leGFjdCBSb3VuZGVkCitjb214MzIxMyBjb21wYXJlIC05MTc1OTE0NTY4MjkuMTIxMDkwMjc0ODQzOTk1MzY1NjcgLTI4ODkyMTc3NzI2ODU4MDI2OTU1NTEzNDM4ODQzMzcxRSs3MDggLT4gMQorZGl2eDMyMTMgZGl2aWRlIC05MTc1OTE0NTY4MjkuMTIxMDkwMjc0ODQzOTk1MzY1NjcgLTI4ODkyMTc3NzI2ODU4MDI2OTU1NTEzNDM4ODQzMzcxRSs3MDggLT4gMy4xNzU5MTY1NTk1MDU3Njc0MTk2NjQ0OTI3MTA2NDQ3RS03MjggSW5leGFjdCBSb3VuZGVkCitkdml4MzIxMyBkaXZpZGVpbnQgLTkxNzU5MTQ1NjgyOS4xMjEwOTAyNzQ4NDM5OTUzNjU2NyAtMjg4OTIxNzc3MjY4NTgwMjY5NTU1MTM0Mzg4NDMzNzFFKzcwOCAtPiAwCittdWx4MzIxMyBtdWx0aXBseSAtOTE3NTkxNDU2ODI5LjEyMTA5MDI3NDg0Mzk5NTM2NTY3IC0yODg5MjE3NzcyNjg1ODAyNjk1NTUxMzQzODg0MzM3MUUrNzA4IC0+IDIuNjUxMTIxNTQ1MTM1MzU0MTE1NjcwMzkxNDcyMTcyNUUrNzUxIEluZXhhY3QgUm91bmRlZAorcG93eDMyMTMgcG93ZXIgLTkxNzU5MTQ1NjgyOS4xMjEwOTAyNzQ4NDM5OTUzNjU2NyAtMyAtPiAtMS4yOTQzNTA1NTkxODUzNzM5MjQwMDAzNDUzMzQxOTExRS0zNiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjEzIHJlbWFpbmRlciAtOTE3NTkxNDU2ODI5LjEyMTA5MDI3NDg0Mzk5NTM2NTY3IC0yODg5MjE3NzcyNjg1ODAyNjk1NTUxMzQzODg0MzM3MUUrNzA4IC0+IC05MTc1OTE0NTY4MjkuMTIxMDkwMjc0ODQzOTk1MzY1NjcKK3N1YngzMjEzIHN1YnRyYWN0IC05MTc1OTE0NTY4MjkuMTIxMDkwMjc0ODQzOTk1MzY1NjcgLTI4ODkyMTc3NzI2ODU4MDI2OTU1NTEzNDM4ODQzMzcxRSs3MDggLT4gMi44ODkyMTc3NzI2ODU4MDI2OTU1NTEzNDM4ODQzMzcxRSs3MzkgSW5leGFjdCBSb3VuZGVkCithZGR4MzIxNCBhZGQgMzQ5Mzg0MTA4NDA2NDUuOTEzMzk5Njk5MjE5MjI4MjE4IDMwLjgxODIyMDM5MzI0MjQwMjg0NjA3Nzc1NTQ4MDU0OCAtPiAzNDkzODQxMDg0MDY3Ni43MzE2MjAwOTI0NjE2MzEwNjQgSW5leGFjdCBSb3VuZGVkCitjb214MzIxNCBjb21wYXJlIDM0OTM4NDEwODQwNjQ1LjkxMzM5OTY5OTIxOTIyODIxOCAzMC44MTgyMjAzOTMyNDI0MDI4NDYwNzc3NTU0ODA1NDggLT4gMQorZGl2eDMyMTQgZGl2aWRlIDM0OTM4NDEwODQwNjQ1LjkxMzM5OTY5OTIxOTIyODIxOCAzMC44MTgyMjAzOTMyNDI0MDI4NDYwNzc3NTU0ODA1NDggLT4gMTEzMzY5MzMyNzk5OS43ODc5NTAzMjYwMDk4NjY2OTY2IEluZXhhY3QgUm91bmRlZAorZHZpeDMyMTQgZGl2aWRlaW50IDM0OTM4NDEwODQwNjQ1LjkxMzM5OTY5OTIxOTIyODIxOCAzMC44MTgyMjAzOTMyNDI0MDI4NDYwNzc3NTU0ODA1NDggLT4gMTEzMzY5MzMyNzk5OQorbXVseDMyMTQgbXVsdGlwbHkgMzQ5Mzg0MTA4NDA2NDUuOTEzMzk5Njk5MjE5MjI4MjE4IDMwLjgxODIyMDM5MzI0MjQwMjg0NjA3Nzc1NTQ4MDU0OCAtPiAxMDc2NzM5NjQ1NDc2Njc1LjMzMTg1MTkyODkxMjg5NjEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIxNCBwb3dlciAzNDkzODQxMDg0MDY0NS45MTMzOTk2OTkyMTkyMjgyMTggMzEgLT4gNi45NTY2MDg1OTU4Nzk4NzMyNzg2NTA5OTA5NjgzMjY3RSs0MTkgSW5leGFjdCBSb3VuZGVkCityZW14MzIxNCByZW1haW5kZXIgMzQ5Mzg0MTA4NDA2NDUuOTEzMzk5Njk5MjE5MjI4MjE4IDMwLjgxODIyMDM5MzI0MjQwMjg0NjA3Nzc1NTQ4MDU0OCAtPiAyNC4yODMyMjY4MDU4OTkyNzM1NTEzNzYzNzE3MzY1NDgKK3N1YngzMjE0IHN1YnRyYWN0IDM0OTM4NDEwODQwNjQ1LjkxMzM5OTY5OTIxOTIyODIxOCAzMC44MTgyMjAzOTMyNDI0MDI4NDYwNzc3NTU0ODA1NDggLT4gMzQ5Mzg0MTA4NDA2MTUuMDk1MTc5MzA1OTc2ODI1MzcyIEluZXhhY3QgUm91bmRlZAorYWRkeDMyMTUgYWRkIDYwMzQuNzM3NDQxMTAyMjU5ODA4MTc0NTAwNjc2OTAyM0UtNTE3IDI5NzcxODMzNDI4MDU0NzA5MDc3ODUwNTg4OTA0NjUzIC0+IDI5NzcxODMzNDI4MDU0NzA5MDc3ODUwNTg4OTA0NjUzIEluZXhhY3QgUm91bmRlZAorY29teDMyMTUgY29tcGFyZSA2MDM0LjczNzQ0MTEwMjI1OTgwODE3NDUwMDY3NjkwMjNFLTUxNyAyOTc3MTgzMzQyODA1NDcwOTA3Nzg1MDU4ODkwNDY1MyAtPiAtMQorZGl2eDMyMTUgZGl2aWRlIDYwMzQuNzM3NDQxMTAyMjU5ODA4MTc0NTAwNjc2OTAyM0UtNTE3IDI5NzcxODMzNDI4MDU0NzA5MDc3ODUwNTg4OTA0NjUzIC0+IDIuMDI2OTk1NTY4MDM3NjY4MzUyNjA5OTQ0NDUyMzY5MUUtNTQ1IEluZXhhY3QgUm91bmRlZAorZHZpeDMyMTUgZGl2aWRlaW50IDYwMzQuNzM3NDQxMTAyMjU5ODA4MTc0NTAwNjc2OTAyM0UtNTE3IDI5NzcxODMzNDI4MDU0NzA5MDc3ODUwNTg4OTA0NjUzIC0+IDAKK211bHgzMjE1IG11bHRpcGx5IDYwMzQuNzM3NDQxMTAyMjU5ODA4MTc0NTAwNjc2OTAyM0UtNTE3IDI5NzcxODMzNDI4MDU0NzA5MDc3ODUwNTg4OTA0NjUzIC0+IDEuNzk2NjUxOTc4Nzg1NDE1OTQ2NDM4MjM1OTQxMTY0MkUtNDgyIEluZXhhY3QgUm91bmRlZAorcG93eDMyMTUgcG93ZXIgNjAzNC43Mzc0NDExMDIyNTk4MDgxNzQ1MDA2NzY5MDIzRS01MTcgMyAtPiAyLjE5NzczNDA1OTczMDE4NDA2ODE1Mjg1MDc2NDAwMzJFLTE1NDAgSW5leGFjdCBSb3VuZGVkCityZW14MzIxNSByZW1haW5kZXIgNjAzNC43Mzc0NDExMDIyNTk4MDgxNzQ1MDA2NzY5MDIzRS01MTcgMjk3NzE4MzM0MjgwNTQ3MDkwNzc4NTA1ODg5MDQ2NTMgLT4gNi4wMzQ3Mzc0NDExMDIyNTk4MDgxNzQ1MDA2NzY5MDIzRS01MTQKK3N1YngzMjE1IHN1YnRyYWN0IDYwMzQuNzM3NDQxMTAyMjU5ODA4MTc0NTAwNjc2OTAyM0UtNTE3IDI5NzcxODMzNDI4MDU0NzA5MDc3ODUwNTg4OTA0NjUzIC0+IC0yOTc3MTgzMzQyODA1NDcwOTA3Nzg1MDU4ODkwNDY1MyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjE2IGFkZCAtNTU2NTc0NzY3MTczNC4xNjg2MDA5NzA1NTc0NTAzMTUyIC00OTAuMzA4OTk0OTQ4ODEwNzEyODI3ODc0ODcwMzAzMDMgLT4gLTU1NjU3NDc2NzIyMjQuNDc3NTk1OTE5MzY4MTYzMTQzMSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjE2IGNvbXBhcmUgLTU1NjU3NDc2NzE3MzQuMTY4NjAwOTcwNTU3NDUwMzE1MiAtNDkwLjMwODk5NDk0ODgxMDcxMjgyNzg3NDg3MDMwMzAzIC0+IC0xCitkaXZ4MzIxNiBkaXZpZGUgLTU1NjU3NDc2NzE3MzQuMTY4NjAwOTcwNTU3NDUwMzE1MiAtNDkwLjMwODk5NDk0ODgxMDcxMjgyNzg3NDg3MDMwMzAzIC0+IDExMzUxNTEwNDMzLjM2NTA3NDg3MTU3NDUxOTc1NjI0NSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjE2IGRpdmlkZWludCAtNTU2NTc0NzY3MTczNC4xNjg2MDA5NzA1NTc0NTAzMTUyIC00OTAuMzA4OTk0OTQ4ODEwNzEyODI3ODc0ODcwMzAzMDMgLT4gMTEzNTE1MTA0MzMKK211bHgzMjE2IG11bHRpcGx5IC01NTY1NzQ3NjcxNzM0LjE2ODYwMDk3MDU1NzQ1MDMxNTIgLTQ5MC4zMDg5OTQ5NDg4MTA3MTI4Mjc4NzQ4NzAzMDMwMyAtPiAyNzI4OTM2MTQ3MDY2NjYzLjQ1ODAwNjQ0Mjg2Mzk3NDUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIxNiBwb3dlciAtNTU2NTc0NzY3MTczNC4xNjg2MDA5NzA1NTc0NTAzMTUyIC00OTAgLT4gNC45MzcxNzQ1Mjk3NjE5NTI2MTEzOTkxNzI4OTUzMTk3RS02MjQ2IEluZXhhY3QgUm91bmRlZAorcmVteDMyMTYgcmVtYWluZGVyIC01NTY1NzQ3NjcxNzM0LjE2ODYwMDk3MDU1NzQ1MDMxNTIgLTQ5MC4zMDg5OTQ5NDg4MTA3MTI4Mjc4NzQ4NzAzMDMwMyAtPiAtMTc4Ljk5OTQ5MzM2Mjc2ODkyNjg1MTgzMzA4MzQ4ODAxCitzdWJ4MzIxNiBzdWJ0cmFjdCAtNTU2NTc0NzY3MTczNC4xNjg2MDA5NzA1NTc0NTAzMTUyIC00OTAuMzA4OTk0OTQ4ODEwNzEyODI3ODc0ODcwMzAzMDMgLT4gLTU1NjU3NDc2NzEyNDMuODU5NjA2MDIxNzQ2NzM3NDg3MyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjE3IGFkZCAzMTk1NDU1MTEuODkyMDM0OTU1NDY2ODkyNzM1NjQ3MjhFKzAzNiAtMjk1NTk0MzUzMzk0MzMyMTg5OTE1MDMxMDE5MjA2MSAtPiAzLjE5NTQ1NTExODkyMDMxOTk5NTIzMzU4NzkyMzI1MzhFKzQ0IEluZXhhY3QgUm91bmRlZAorY29teDMyMTcgY29tcGFyZSAzMTk1NDU1MTEuODkyMDM0OTU1NDY2ODkyNzM1NjQ3MjhFKzAzNiAtMjk1NTk0MzUzMzk0MzMyMTg5OTE1MDMxMDE5MjA2MSAtPiAxCitkaXZ4MzIxNyBkaXZpZGUgMzE5NTQ1NTExLjg5MjAzNDk1NTQ2Njg5MjczNTY0NzI4RSswMzYgLTI5NTU5NDM1MzM5NDMzMjE4OTkxNTAzMTAxOTIwNjEgLT4gLTEwODEwMjcxMTc4MTQyMi42ODY2MzA4NDg1OTkwMjkzMSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjE3IGRpdmlkZWludCAzMTk1NDU1MTEuODkyMDM0OTU1NDY2ODkyNzM1NjQ3MjhFKzAzNiAtMjk1NTk0MzUzMzk0MzMyMTg5OTE1MDMxMDE5MjA2MSAtPiAtMTA4MTAyNzExNzgxNDIyCittdWx4MzIxNyBtdWx0aXBseSAzMTk1NDU1MTEuODkyMDM0OTU1NDY2ODkyNzM1NjQ3MjhFKzAzNiAtMjk1NTk0MzUzMzk0MzMyMTg5OTE1MDMxMDE5MjA2MSAtPiAtOS40NDU1ODQ4OTY3Nzg2OTU5OTk2NTI1NzAyMTk3MTM5RSs3NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjE3IHBvd2VyIDMxOTU0NTUxMS44OTIwMzQ5NTU0NjY4OTI3MzU2NDcyOEUrMDM2IC0zIC0+IDMuMDY0Nzk3ODQ0ODk0NjI5NDQ1Nzk4NTIyMzk1MzQ3MkUtMTM0IEluZXhhY3QgUm91bmRlZAorcmVteDMyMTcgcmVtYWluZGVyIDMxOTU0NTUxMS44OTIwMzQ5NTU0NjY4OTI3MzU2NDcyOEUrMDM2IC0yOTU1OTQzNTMzOTQzMzIxODk5MTUwMzEwMTkyMDYxIC0+IDIwMjk2NDIwMTcxMjIzMTY3MjE1MzE3MjgzMDkyNTgKK3N1YngzMjE3IHN1YnRyYWN0IDMxOTU0NTUxMS44OTIwMzQ5NTU0NjY4OTI3MzU2NDcyOEUrMDM2IC0yOTU1OTQzNTMzOTQzMzIxODk5MTUwMzEwMTkyMDYxIC0+IDMuMTk1NDU1MTE4OTIwMzc5MTE0MTA0MjY2Nzg5NjkxOEUrNDQgSW5leGFjdCBSb3VuZGVkCithZGR4MzIxOCBhZGQgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC01ODMwNjI5LjgzNDcwODUwMjU4MDg3MTYzNjAzNTc5NDAgLT4gLTQyNjgyNzY0LjY3NjY1MTQ2NTA4OTMwNzQzMDMyNTEwNCBSb3VuZGVkCitjb214MzIxOCBjb21wYXJlIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtNTgzMDYyOS44MzQ3MDg1MDI1ODA4NzE2MzYwMzU3OTQwIC0+IC0xCitkaXZ4MzIxOCBkaXZpZGUgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC01ODMwNjI5LjgzNDcwODUwMjU4MDg3MTYzNjAzNTc5NDAgLT4gNi4zMjA0MzgwODA3MzE4NjU1NDc1NDU5MDQ3NDEwMTYwIEluZXhhY3QgUm91bmRlZAorZHZpeDMyMTggZGl2aWRlaW50IC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtNTgzMDYyOS44MzQ3MDg1MDI1ODA4NzE2MzYwMzU3OTQwIC0+IDYKK211bHgzMjE4IG11bHRpcGx5IC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtNTgzMDYyOS44MzQ3MDg1MDI1ODA4NzE2MzYwMzU3OTQwIC0+IDIxNDg3MTE1Njg4MjEzMy4zNDQzNzQxNzUzNDg3MzA5OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjE4IHBvd2VyIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtNTgzMDYzMCAtPiAwRS0xMDAzMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzIxOCByZW1haW5kZXIgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC01ODMwNjI5LjgzNDcwODUwMjU4MDg3MTYzNjAzNTc5NDAgLT4gLTE4NjgzNTUuODMzNjkxOTQ3MDIzMjA1OTc4MDc0NTQ2MAorc3VieDMyMTggc3VidHJhY3QgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC01ODMwNjI5LjgzNDcwODUwMjU4MDg3MTYzNjAzNTc5NDAgLT4gLTMxMDIxNTA1LjAwNzIzNDQ1OTkyNzU2NDE1ODI1MzUxNiBSb3VuZGVkCithZGR4MzIxOSBhZGQgOC42MDIxOTA1MDAxNzk4NTc4NjU5Mjc1ODgwMDE4MjIxRS0zNzQgLTM5NTA1Mjg1MzQ0OTQzLjcyOTY4MTgzNTM3NzUzMDkwOCAtPiAtMzk1MDUyODUzNDQ5NDMuNzI5NjgxODM1Mzc3NTMwOTA4IEluZXhhY3QgUm91bmRlZAorY29teDMyMTkgY29tcGFyZSA4LjYwMjE5MDUwMDE3OTg1Nzg2NTkyNzU4ODAwMTgyMjFFLTM3NCAtMzk1MDUyODUzNDQ5NDMuNzI5NjgxODM1Mzc3NTMwOTA4IC0+IDEKK2RpdngzMjE5IGRpdmlkZSA4LjYwMjE5MDUwMDE3OTg1Nzg2NTkyNzU4ODAwMTgyMjFFLTM3NCAtMzk1MDUyODUzNDQ5NDMuNzI5NjgxODM1Mzc3NTMwOTA4IC0+IC0yLjE3NzQ3ODM4Njc3MDA1MDIwMDI1MTE0ODY4ODUyNzJFLTM4NyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjE5IGRpdmlkZWludCA4LjYwMjE5MDUwMDE3OTg1Nzg2NTkyNzU4ODAwMTgyMjFFLTM3NCAtMzk1MDUyODUzNDQ5NDMuNzI5NjgxODM1Mzc3NTMwOTA4IC0+IC0wCittdWx4MzIxOSBtdWx0aXBseSA4LjYwMjE5MDUwMDE3OTg1Nzg2NTkyNzU4ODAwMTgyMjFFLTM3NCAtMzk1MDUyODUzNDQ5NDMuNzI5NjgxODM1Mzc3NTMwOTA4IC0+IC0zLjM5ODMxOTkwMzAxMTY5NTEwODE4NjU0MzAzNjIwNTNFLTM2MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjE5IHBvd2VyIDguNjAyMTkwNTAwMTc5ODU3ODY1OTI3NTg4MDAxODIyMUUtMzc0IC00IC0+IDEuODI2MjY0OTE1NTgyMDQzMzEyNjI0MDc1NDEyMzI1N0UrMTQ5MiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjE5IHJlbWFpbmRlciA4LjYwMjE5MDUwMDE3OTg1Nzg2NTkyNzU4ODAwMTgyMjFFLTM3NCAtMzk1MDUyODUzNDQ5NDMuNzI5NjgxODM1Mzc3NTMwOTA4IC0+IDguNjAyMTkwNTAwMTc5ODU3ODY1OTI3NTg4MDAxODIyMUUtMzc0CitzdWJ4MzIxOSBzdWJ0cmFjdCA4LjYwMjE5MDUwMDE3OTg1Nzg2NTkyNzU4ODAwMTgyMjFFLTM3NCAtMzk1MDUyODUzNDQ5NDMuNzI5NjgxODM1Mzc3NTMwOTA4IC0+IDM5NTA1Mjg1MzQ0OTQzLjcyOTY4MTgzNTM3NzUzMDkwOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjIwIGFkZCAtNTQ4NjMxNjUuMTUyMTc0MTA5NzIwMzEyODg3ODA1MDE3IDczNi4xMzk4NDc2NTYwMTY5MTQxMTA1MzI4MjU2NjI4IC0+IC01NDg2MjQyOS4wMTIzMjY0NTM3MDMzOTg3NzcyNzIxOTEgSW5leGFjdCBSb3VuZGVkCitjb214MzIyMCBjb21wYXJlIC01NDg2MzE2NS4xNTIxNzQxMDk3MjAzMTI4ODc4MDUwMTcgNzM2LjEzOTg0NzY1NjAxNjkxNDExMDUzMjgyNTY2MjggLT4gLTEKK2RpdngzMjIwIGRpdmlkZSAtNTQ4NjMxNjUuMTUyMTc0MTA5NzIwMzEyODg3ODA1MDE3IDczNi4xMzk4NDc2NTYwMTY5MTQxMTA1MzI4MjU2NjI4IC0+IC03NDUyOC4xODI4MjY3NjQzODQwODg2MDI4MTMxNDI4NDcgSW5leGFjdCBSb3VuZGVkCitkdml4MzIyMCBkaXZpZGVpbnQgLTU0ODYzMTY1LjE1MjE3NDEwOTcyMDMxMjg4NzgwNTAxNyA3MzYuMTM5ODQ3NjU2MDE2OTE0MTEwNTMyODI1NjYyOCAtPiAtNzQ1MjgKK211bHgzMjIwIG11bHRpcGx5IC01NDg2MzE2NS4xNTIxNzQxMDk3MjAzMTI4ODc4MDUwMTcgNzM2LjEzOTg0NzY1NjAxNjkxNDExMDUzMjgyNTY2MjggLT4gLTQwMzg2OTYyMDM3LjA0ODM0NTE0ODMzODEyMjUzOTQwNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjIwIHBvd2VyIC01NDg2MzE2NS4xNTIxNzQxMDk3MjAzMTI4ODc4MDUwMTcgNzM2IC0+IDEuMjkwMzY0Mzk4MTY3OTExMTYyNTM3MDE3NDU3MzYzOUUrNTY5NiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjIwIHJlbWFpbmRlciAtNTQ4NjMxNjUuMTUyMTc0MTA5NzIwMzEyODg3ODA1MDE3IDczNi4xMzk4NDc2NTYwMTY5MTQxMTA1MzI4MjU2NjI4IC0+IC0xMzQuNTg2MDY2NDgxMTQ1NDgzMDk3Mzc0MDE5ODQxNgorc3VieDMyMjAgc3VidHJhY3QgLTU0ODYzMTY1LjE1MjE3NDEwOTcyMDMxMjg4NzgwNTAxNyA3MzYuMTM5ODQ3NjU2MDE2OTE0MTEwNTMyODI1NjYyOCAtPiAtNTQ4NjM5MDEuMjkyMDIxNzY1NzM3MjI2OTk4MzM3ODQzIEluZXhhY3QgUm91bmRlZAorYWRkeDMyMjEgYWRkIC0zMjYzNzQzNDY0NTE3ODUxMDEyNTMxNzA4ODEwMzA3IDI0NTcyMDYuMjQ3MTI0ODM4MjEzNjI3MzY0MzIwODEwOSAtPiAtMzI2Mzc0MzQ2NDUxNzg1MTAxMjUzMTcwNjM1MzEwMC44IEluZXhhY3QgUm91bmRlZAorY29teDMyMjEgY29tcGFyZSAtMzI2Mzc0MzQ2NDUxNzg1MTAxMjUzMTcwODgxMDMwNyAyNDU3MjA2LjI0NzEyNDgzODIxMzYyNzM2NDMyMDgxMDkgLT4gLTEKK2RpdngzMjIxIGRpdmlkZSAtMzI2Mzc0MzQ2NDUxNzg1MTAxMjUzMTcwODgxMDMwNyAyNDU3MjA2LjI0NzEyNDgzODIxMzYyNzM2NDMyMDgxMDkgLT4gLTEzMjgyMzM0MjI5NTIwNzY5NzUwNTUwODIuNTc2ODA4MiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjIxIGRpdmlkZWludCAtMzI2Mzc0MzQ2NDUxNzg1MTAxMjUzMTcwODgxMDMwNyAyNDU3MjA2LjI0NzEyNDgzODIxMzYyNzM2NDMyMDgxMDkgLT4gLTEzMjgyMzM0MjI5NTIwNzY5NzUwNTUwODIKK211bHgzMjIxIG11bHRpcGx5IC0zMjYzNzQzNDY0NTE3ODUxMDEyNTMxNzA4ODEwMzA3IDI0NTcyMDYuMjQ3MTI0ODM4MjEzNjI3MzY0MzIwODEwOSAtPiAtOC4wMTk2OTA4MzAwMjYxMjYyNTQ4NTY1ODM4MDMxOTQzRSszNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjIxIHBvd2VyIC0zMjYzNzQzNDY0NTE3ODUxMDEyNTMxNzA4ODEwMzA3IDI0NTcyMDYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzIyMSByZW1haW5kZXIgLTMyNjM3NDM0NjQ1MTc4NTEwMTI1MzE3MDg4MTAzMDcgMjQ1NzIwNi4yNDcxMjQ4MzgyMTM2MjczNjQzMjA4MTA5IC0+IC0xNDE3MzM2Ljc1NzMzOTgzNjYwNjI5OTQ1MzU5NDAwNjIKK3N1YngzMjIxIHN1YnRyYWN0IC0zMjYzNzQzNDY0NTE3ODUxMDEyNTMxNzA4ODEwMzA3IDI0NTcyMDYuMjQ3MTI0ODM4MjEzNjI3MzY0MzIwODEwOSAtPiAtMzI2Mzc0MzQ2NDUxNzg1MTAxMjUzMTcxMTI2NzUxMy4yIEluZXhhY3QgUm91bmRlZAorYWRkeDMyMjIgYWRkIDI4NTY1ODY3NDQuMDU0ODYzNzc5NzI5MTE1MTE1NDkwMkUtODk1IDk1MzU0NTYzNzY0Ni41NzY5NDgzNTg2MDMzOTU4MjgyMUUrMDgwIC0+IDkuNTM1NDU2Mzc2NDY1NzY5NDgzNTg2MDMzOTU4MjgyMUUrOTEgSW5leGFjdCBSb3VuZGVkCitjb214MzIyMiBjb21wYXJlIDI4NTY1ODY3NDQuMDU0ODYzNzc5NzI5MTE1MTE1NDkwMkUtODk1IDk1MzU0NTYzNzY0Ni41NzY5NDgzNTg2MDMzOTU4MjgyMUUrMDgwIC0+IC0xCitkaXZ4MzIyMiBkaXZpZGUgMjg1NjU4Njc0NC4wNTQ4NjM3Nzk3MjkxMTUxMTU0OTAyRS04OTUgOTUzNTQ1NjM3NjQ2LjU3Njk0ODM1ODYwMzM5NTgyODIxRSswODAgLT4gMi45OTU3NTI1MTcwMDA3OTgwMDA4NzEyODI4OTY4MzAwRS05NzggSW5leGFjdCBSb3VuZGVkCitkdml4MzIyMiBkaXZpZGVpbnQgMjg1NjU4Njc0NC4wNTQ4NjM3Nzk3MjkxMTUxMTU0OTAyRS04OTUgOTUzNTQ1NjM3NjQ2LjU3Njk0ODM1ODYwMzM5NTgyODIxRSswODAgLT4gMAorbXVseDMyMjIgbXVsdGlwbHkgMjg1NjU4Njc0NC4wNTQ4NjM3Nzk3MjkxMTUxMTU0OTAyRS04OTUgOTUzNTQ1NjM3NjQ2LjU3Njk0ODM1ODYwMzM5NTgyODIxRSswODAgLT4gMi43MjM4ODU4MjgzNTI1NTQxODU0ODI2NTk0MzQzOTU0RS03OTQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIyMiBwb3dlciAyODU2NTg2NzQ0LjA1NDg2Mzc3OTcyOTExNTExNTQ5MDJFLTg5NSAxMCAtPiAzLjYxODA0NjY3NTMzMDcwNzIyNTY4MDc1OTM5ODgzMzZFLTg4NTYgSW5leGFjdCBSb3VuZGVkCityZW14MzIyMiByZW1haW5kZXIgMjg1NjU4Njc0NC4wNTQ4NjM3Nzk3MjkxMTUxMTU0OTAyRS04OTUgOTUzNTQ1NjM3NjQ2LjU3Njk0ODM1ODYwMzM5NTgyODIxRSswODAgLT4gMi44NTY1ODY3NDQwNTQ4NjM3Nzk3MjkxMTUxMTU0OTAyRS04ODYKK3N1YngzMjIyIHN1YnRyYWN0IDI4NTY1ODY3NDQuMDU0ODYzNzc5NzI5MTE1MTE1NDkwMkUtODk1IDk1MzU0NTYzNzY0Ni41NzY5NDgzNTg2MDMzOTU4MjgyMUUrMDgwIC0+IC05LjUzNTQ1NjM3NjQ2NTc2OTQ4MzU4NjAzMzk1ODI4MjFFKzkxIEluZXhhY3QgUm91bmRlZAorYWRkeDMyMjMgYWRkIDU2MjQxNTcyMzMuMzQzMzY2MTAwOTIwMzUyOTkzNzYyNSA2MjYwOTg0MDkyNjUuOTM3Mzg1ODY3NTAwOTAxNjA2MzggLT4gNjMxNzIyNTY2NDk5LjI4MDc1MTk2ODQyMTI1NDYwMDE0IEluZXhhY3QgUm91bmRlZAorY29teDMyMjMgY29tcGFyZSA1NjI0MTU3MjMzLjM0MzM2NjEwMDkyMDM1Mjk5Mzc2MjUgNjI2MDk4NDA5MjY1LjkzNzM4NTg2NzUwMDkwMTYwNjM4IC0+IC0xCitkaXZ4MzIyMyBkaXZpZGUgNTYyNDE1NzIzMy4zNDMzNjYxMDA5MjAzNTI5OTM3NjI1IDYyNjA5ODQwOTI2NS45MzczODU4Njc1MDA5MDE2MDYzOCAtPiAwLjAwODk4Mjg2NDU5NDYyMDc1ODA0OTI3NTI1NDQyMTgzMTYgSW5leGFjdCBSb3VuZGVkCitkdml4MzIyMyBkaXZpZGVpbnQgNTYyNDE1NzIzMy4zNDMzNjYxMDA5MjAzNTI5OTM3NjI1IDYyNjA5ODQwOTI2NS45MzczODU4Njc1MDA5MDE2MDYzOCAtPiAwCittdWx4MzIyMyBtdWx0aXBseSA1NjI0MTU3MjMzLjM0MzM2NjEwMDkyMDM1Mjk5Mzc2MjUgNjI2MDk4NDA5MjY1LjkzNzM4NTg2NzUwMDkwMTYwNjM4IC0+IDM1MjEyNzU4OTcyNTc3OTY5Mzg4MzMuODk3NTAzNzkwOSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjIzIHBvd2VyIDU2MjQxNTcyMzMuMzQzMzY2MTAwOTIwMzUyOTkzNzYyNSA2IC0+IDMuMTY0Nzg4NzE5NjMwMzI2MjU0MDE1ODMyODQ1OTAzMEUrNTggSW5leGFjdCBSb3VuZGVkCityZW14MzIyMyByZW1haW5kZXIgNTYyNDE1NzIzMy4zNDMzNjYxMDA5MjAzNTI5OTM3NjI1IDYyNjA5ODQwOTI2NS45MzczODU4Njc1MDA5MDE2MDYzOCAtPiA1NjI0MTU3MjMzLjM0MzM2NjEwMDkyMDM1Mjk5Mzc2MjUKK3N1YngzMjIzIHN1YnRyYWN0IDU2MjQxNTcyMzMuMzQzMzY2MTAwOTIwMzUyOTkzNzYyNSA2MjYwOTg0MDkyNjUuOTM3Mzg1ODY3NTAwOTAxNjA2MzggLT4gLTYyMDQ3NDI1MjAzMi41OTQwMTk3NjY1ODA1NDg2MTI2MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjI0IGFkZCAtMjEzNDk5MzYyLjkxNDc2OTk4NzAxODM0MDY3MDkyNjExIDQxOTI3MjQzOC4wMjU1NTc1NzY5OTg2MzAyMjY0MzQ0NCAtPiAyMDU3NzMwNzUuMTEwNzg3NTg5OTgwMjg5NTU1NTA4MzMKK2NvbXgzMjI0IGNvbXBhcmUgLTIxMzQ5OTM2Mi45MTQ3Njk5ODcwMTgzNDA2NzA5MjYxMSA0MTkyNzI0MzguMDI1NTU3NTc2OTk4NjMwMjI2NDM0NDQgLT4gLTEKK2RpdngzMjI0IGRpdmlkZSAtMjEzNDk5MzYyLjkxNDc2OTk4NzAxODM0MDY3MDkyNjExIDQxOTI3MjQzOC4wMjU1NTc1NzY5OTg2MzAyMjY0MzQ0NCAtPiAtMC41MDkyMTM5MjI4NjE2Njg1NTc3OTgyODA2MTE0Nzc4NiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjI0IGRpdmlkZWludCAtMjEzNDk5MzYyLjkxNDc2OTk4NzAxODM0MDY3MDkyNjExIDQxOTI3MjQzOC4wMjU1NTc1NzY5OTg2MzAyMjY0MzQ0NCAtPiAtMAorbXVseDMyMjQgbXVsdGlwbHkgLTIxMzQ5OTM2Mi45MTQ3Njk5ODcwMTgzNDA2NzA5MjYxMSA0MTkyNzI0MzguMDI1NTU3NTc2OTk4NjMwMjI2NDM0NDQgLT4gLTg5NTE0Mzk4NDA2MTc4OTI1LjA3MzI2MDc3NjQxMDY3MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjI0IHBvd2VyIC0yMTM0OTkzNjIuOTE0NzY5OTg3MDE4MzQwNjcwOTI2MTEgNDE5MjcyNDM4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMyMjQgcmVtYWluZGVyIC0yMTM0OTkzNjIuOTE0NzY5OTg3MDE4MzQwNjcwOTI2MTEgNDE5MjcyNDM4LjAyNTU1NzU3Njk5ODYzMDIyNjQzNDQ0IC0+IC0yMTM0OTkzNjIuOTE0NzY5OTg3MDE4MzQwNjcwOTI2MTEKK3N1YngzMjI0IHN1YnRyYWN0IC0yMTM0OTkzNjIuOTE0NzY5OTg3MDE4MzQwNjcwOTI2MTEgNDE5MjcyNDM4LjAyNTU1NzU3Njk5ODYzMDIyNjQzNDQ0IC0+IC02MzI3NzE4MDAuOTQwMzI3NTY0MDE2OTcwODk3MzYwNTUKK2FkZHgzMjI1IGFkZCAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDMwMjc0LjM5MjM1NjYxNDEwMTIzODMxNjg0NTQwMTUxOCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjI1IGNvbXBhcmUgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAxCitkaXZ4MzIyNSBkaXZpZGUgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiA2MzAwLjEyNTIxNzg4Mzc2NTUzNTk4MzE1MjcxNzM4MzIgSW5leGFjdCBSb3VuZGVkCitkdml4MzIyNSBkaXZpZGVpbnQgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiA2MzAwCittdWx4MzIyNSBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjI1IHBvd2VyIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA1IC0+IDI1NDExNjMwNDgxNTQ3NDY0MTI4MzgzLjIyMDM2ODIwOCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjI1IHJlbWFpbmRlciAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDAuNjAxNjIxOTY2MjUxOTExNTM3Mzc2Njk3MDExOTEwMAorc3VieDMyMjUgc3VidHJhY3QgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAtPiAzMDI2NC43ODMxNTQ2NjY5MDMwNjM2Mzc2NTgxMzk1OTAgSW5leGFjdCBSb3VuZGVkCithZGR4MzIyNiBhZGQgNDcuNTI1Njc2NDU5MzUxNTA1NjgyMDA1MzU5Njk5NjgwRSs3MDQgLTU4NjMxOTQzNTA4NDM2NjU3MzgzMzY5NzYwOTcwMjEwIC0+IDQuNzUyNTY3NjQ1OTM1MTUwNTY4MjAwNTM1OTY5OTY4MEUrNzA1IEluZXhhY3QgUm91bmRlZAorY29teDMyMjYgY29tcGFyZSA0Ny41MjU2NzY0NTkzNTE1MDU2ODIwMDUzNTk2OTk2ODBFKzcwNCAtNTg2MzE5NDM1MDg0MzY2NTczODMzNjk3NjA5NzAyMTAgLT4gMQorZGl2eDMyMjYgZGl2aWRlIDQ3LjUyNTY3NjQ1OTM1MTUwNTY4MjAwNTM1OTY5OTY4MEUrNzA0IC01ODYzMTk0MzUwODQzNjY1NzM4MzM2OTc2MDk3MDIxMCAtPiAtOC4xMDU3NjUxNTM4NTU1ODU0NTIwOTk0NDM4MDM4NTM3RSs2NzMgSW5leGFjdCBSb3VuZGVkCitkdml4MzIyNiBkaXZpZGVpbnQgNDcuNTI1Njc2NDU5MzUxNTA1NjgyMDA1MzU5Njk5NjgwRSs3MDQgLTU4NjMxOTQzNTA4NDM2NjU3MzgzMzY5NzYwOTcwMjEwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzIyNiBtdWx0aXBseSA0Ny41MjU2NzY0NTkzNTE1MDU2ODIwMDUzNTk2OTk2ODBFKzcwNCAtNTg2MzE5NDM1MDg0MzY2NTczODMzNjk3NjA5NzAyMTAgLT4gLTIuNzg2NTIyNzc3MzY0OTM1Mzc2OTg3Njk3NTM2NjUwNkUrNzM3IEluZXhhY3QgUm91bmRlZAorcG93eDMyMjYgcG93ZXIgNDcuNTI1Njc2NDU5MzUxNTA1NjgyMDA1MzU5Njk5NjgwRSs3MDQgLTYgLT4gOC42NzgyMTAwMzkzOTQxMjI2NTM1MTUwMzg1NDc1NDY0RS00MjM1IEluZXhhY3QgUm91bmRlZAorcmVteDMyMjYgcmVtYWluZGVyIDQ3LjUyNTY3NjQ1OTM1MTUwNTY4MjAwNTM1OTY5OTY4MEUrNzA0IC01ODYzMTk0MzUwODQzNjY1NzM4MzM2OTc2MDk3MDIxMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyMjYgc3VidHJhY3QgNDcuNTI1Njc2NDU5MzUxNTA1NjgyMDA1MzU5Njk5NjgwRSs3MDQgLTU4NjMxOTQzNTA4NDM2NjU3MzgzMzY5NzYwOTcwMjEwIC0+IDQuNzUyNTY3NjQ1OTM1MTUwNTY4MjAwNTM1OTY5OTY4MEUrNzA1IEluZXhhY3QgUm91bmRlZAorYWRkeDMyMjcgYWRkIC03NDM5Njg2MjI3MzgwMC42MjU2NzkxMzA3NzI5MzU1NTAgLTExNTYxNjYwNS41MjgyNjk4MTI4NDE4Mzk5MjAxMzE1NyAtPiAtNzQzOTY5Nzc4OTA0MDYuMTUzOTQ4OTQzNjE0Nzc1NDcwIEluZXhhY3QgUm91bmRlZAorY29teDMyMjcgY29tcGFyZSAtNzQzOTY4NjIyNzM4MDAuNjI1Njc5MTMwNzcyOTM1NTUwIC0xMTU2MTY2MDUuNTI4MjY5ODEyODQxODM5OTIwMTMxNTcgLT4gLTEKK2RpdngzMjI3IGRpdmlkZSAtNzQzOTY4NjIyNzM4MDAuNjI1Njc5MTMwNzcyOTM1NTUwIC0xMTU2MTY2MDUuNTI4MjY5ODEyODQxODM5OTIwMTMxNTcgLT4gNjQzNDc5LjAzOTQ4NDU5NzE2NDI0Nzc4MDA1NjEzMTEyIEluZXhhY3QgUm91bmRlZAorZHZpeDMyMjcgZGl2aWRlaW50IC03NDM5Njg2MjI3MzgwMC42MjU2NzkxMzA3NzI5MzU1NTAgLTExNTYxNjYwNS41MjgyNjk4MTI4NDE4Mzk5MjAxMzE1NyAtPiA2NDM0NzkKK211bHgzMjI3IG11bHRpcGx5IC03NDM5Njg2MjI3MzgwMC42MjU2NzkxMzA3NzI5MzU1NTAgLTExNTYxNjYwNS41MjgyNjk4MTI4NDE4Mzk5MjAxMzE1NyAtPiA4NjAxNTEyNjc4MDUxMDI1Mjk3Mjk3LjcxNjk2NTQ0NjcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIyNyBwb3dlciAtNzQzOTY4NjIyNzM4MDAuNjI1Njc5MTMwNzcyOTM1NTUwIC0xMTU2MTY2MDYgLT4gMEUtMTAwMzAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMyMjcgcmVtYWluZGVyIC03NDM5Njg2MjI3MzgwMC42MjU2NzkxMzA3NzI5MzU1NTAgLTExNTYxNjYwNS41MjgyNjk4MTI4NDE4Mzk5MjAxMzE1NyAtPiAtNDU2NTA3NS4wOTQ3ODE0NzY0NjI5NjkyMDc0Njc5Nworc3VieDMyMjcgc3VidHJhY3QgLTc0Mzk2ODYyMjczODAwLjYyNTY3OTEzMDc3MjkzNTU1MCAtMTE1NjE2NjA1LjUyODI2OTgxMjg0MTgzOTkyMDEzMTU3IC0+IC03NDM5Njc0NjY1NzE5NS4wOTc0MDkzMTc5MzEwOTU2MzAgSW5leGFjdCBSb3VuZGVkCithZGR4MzIyOCBhZGQgNjc1ODU1NjAuNTYyNTYxMjI5NDk3NzIwOTU1NzA1OTc5IDgyNi45NjI5MDI4ODYwODU2NjczNzE3NzUwMzQ1MTYxMyAtPiA2NzU4NjM4Ny41MjU0NjQxMTU1ODMzODgzMjc0ODEwMTQgSW5leGFjdCBSb3VuZGVkCitjb214MzIyOCBjb21wYXJlIDY3NTg1NTYwLjU2MjU2MTIyOTQ5NzcyMDk1NTcwNTk3OSA4MjYuOTYyOTAyODg2MDg1NjY3MzcxNzc1MDM0NTE2MTMgLT4gMQorZGl2eDMyMjggZGl2aWRlIDY3NTg1NTYwLjU2MjU2MTIyOTQ5NzcyMDk1NTcwNTk3OSA4MjYuOTYyOTAyODg2MDg1NjY3MzcxNzc1MDM0NTE2MTMgLT4gODE3MjcuNDM5NDM3MzU0MjQ4Nzg5ODUyNzE1NTg2NTEwIEluZXhhY3QgUm91bmRlZAorZHZpeDMyMjggZGl2aWRlaW50IDY3NTg1NTYwLjU2MjU2MTIyOTQ5NzcyMDk1NTcwNTk3OSA4MjYuOTYyOTAyODg2MDg1NjY3MzcxNzc1MDM0NTE2MTMgLT4gODE3MjcKK211bHgzMjI4IG11bHRpcGx5IDY3NTg1NTYwLjU2MjU2MTIyOTQ5NzcyMDk1NTcwNTk3OSA4MjYuOTYyOTAyODg2MDg1NjY3MzcxNzc1MDM0NTE2MTMgLT4gNTU4OTA3NTEzNTUuOTk4OTgzNDMzODk1OTEwMjk1NTk2IEluZXhhY3QgUm91bmRlZAorcG93eDMyMjggcG93ZXIgNjc1ODU1NjAuNTYyNTYxMjI5NDk3NzIwOTU1NzA1OTc5IDgyNyAtPiAxLjk0NjIyMDQ1ODMzNTIxOTExMDg3ODExOTc3ODgyNTVFKzY0NzUgSW5leGFjdCBSb3VuZGVkCityZW14MzIyOCByZW1haW5kZXIgNjc1ODU1NjAuNTYyNTYxMjI5NDk3NzIwOTU1NzA1OTc5IDgyNi45NjI5MDI4ODYwODU2NjczNzE3NzUwMzQ1MTYxMyAtPiAzNjMuMzk4MzkwMTA2MTYwNDI3ODk3NDYwMDc5MjQzNDkKK3N1YngzMjI4IHN1YnRyYWN0IDY3NTg1NTYwLjU2MjU2MTIyOTQ5NzcyMDk1NTcwNTk3OSA4MjYuOTYyOTAyODg2MDg1NjY3MzcxNzc1MDM0NTE2MTMgLT4gNjc1ODQ3MzMuNTk5NjU4MzQzNDEyMDUzNTgzOTMwOTQ0IEluZXhhY3QgUm91bmRlZAorYWRkeDMyMjkgYWRkIDY4NzczODY4NjguOTQ5ODA1MTg2MDc0MjI5ODczNTE1NkUtMjMyIDM5MC4zMTU0Mjg5ODYwNjQzNTA5MzkzNzY5NzU0NTUxIC0+IDM5MC4zMTU0Mjg5ODYwNjQzNTA5MzkzNzY5NzU0NTUxMCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjI5IGNvbXBhcmUgNjg3NzM4Njg2OC45NDk4MDUxODYwNzQyMjk4NzM1MTU2RS0yMzIgMzkwLjMxNTQyODk4NjA2NDM1MDkzOTM3Njk3NTQ1NTEgLT4gLTEKK2RpdngzMjI5IGRpdmlkZSA2ODc3Mzg2ODY4Ljk0OTgwNTE4NjA3NDIyOTg3MzUxNTZFLTIzMiAzOTAuMzE1NDI4OTg2MDY0MzUwOTM5Mzc2OTc1NDU1MSAtPiAxLjc2MjAwNzQzMjUwNTQwMzgxNzQ1NzE1NjQ0MDk4NzFFLTIyNSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjI5IGRpdmlkZWludCA2ODc3Mzg2ODY4Ljk0OTgwNTE4NjA3NDIyOTg3MzUxNTZFLTIzMiAzOTAuMzE1NDI4OTg2MDY0MzUwOTM5Mzc2OTc1NDU1MSAtPiAwCittdWx4MzIyOSBtdWx0aXBseSA2ODc3Mzg2ODY4Ljk0OTgwNTE4NjA3NDIyOTg3MzUxNTZFLTIzMiAzOTAuMzE1NDI4OTg2MDY0MzUwOTM5Mzc2OTc1NDU1MSAtPiAyLjY4NDM1MDIwNjA1NzI2OTE0MDgwOTE2NjM4MjI3MzJFLTIyMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjI5IHBvd2VyIDY4NzczODY4NjguOTQ5ODA1MTg2MDc0MjI5ODczNTE1NkUtMjMyIDM5MCAtPiAwRS0xMDAzMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzIyOSByZW1haW5kZXIgNjg3NzM4Njg2OC45NDk4MDUxODYwNzQyMjk4NzM1MTU2RS0yMzIgMzkwLjMxNTQyODk4NjA2NDM1MDkzOTM3Njk3NTQ1NTEgLT4gNi44NzczODY4Njg5NDk4MDUxODYwNzQyMjk4NzM1MTU2RS0yMjMKK3N1YngzMjI5IHN1YnRyYWN0IDY4NzczODY4NjguOTQ5ODA1MTg2MDc0MjI5ODczNTE1NkUtMjMyIDM5MC4zMTU0Mjg5ODYwNjQzNTA5MzkzNzY5NzU0NTUxIC0+IC0zOTAuMzE1NDI4OTg2MDY0MzUwOTM5Mzc2OTc1NDU1MTAgSW5leGFjdCBSb3VuZGVkCithZGR4MzIzMCBhZGQgLTE2NDczMzUuMjAxMTQ0NjA5MjU2MTM0OTI1ODM4OTM3IC0xODY2NTQ4MjM3ODIuNTA0NTk4MDIyMzUwMjQyMzA4NTYgLT4gLTE4NjY1NjQ3MTExNy43MDU3NDI2MzE2MDYzNzcyMzQ0MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjMwIGNvbXBhcmUgLTE2NDczMzUuMjAxMTQ0NjA5MjU2MTM0OTI1ODM4OTM3IC0xODY2NTQ4MjM3ODIuNTA0NTk4MDIyMzUwMjQyMzA4NTYgLT4gMQorZGl2eDMyMzAgZGl2aWRlIC0xNjQ3MzM1LjIwMTE0NDYwOTI1NjEzNDkyNTgzODkzNyAtMTg2NjU0ODIzNzgyLjUwNDU5ODAyMjM1MDI0MjMwODU2IC0+IDAuMDAwMDA4ODI1NTY5OTM1Nzg3NjIzMzQ1ODY2MDMzMTE0NjU4MyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjMwIGRpdmlkZWludCAtMTY0NzMzNS4yMDExNDQ2MDkyNTYxMzQ5MjU4Mzg5MzcgLTE4NjY1NDgyMzc4Mi41MDQ1OTgwMjIzNTAyNDIzMDg1NiAtPiAwCittdWx4MzIzMCBtdWx0aXBseSAtMTY0NzMzNS4yMDExNDQ2MDkyNTYxMzQ5MjU4Mzg5MzcgLTE4NjY1NDgyMzc4Mi41MDQ1OTgwMjIzNTAyNDIzMDg1NiAtPiAzMDc0ODMwNjE2ODAzNjM4MDcuNDg3NzU2MTkzMzMyODUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIzMCBwb3dlciAtMTY0NzMzNS4yMDExNDQ2MDkyNTYxMzQ5MjU4Mzg5MzcgLTIgLT4gMy42ODQ5ODc2OTkwNDM5NTAyMTUyNzg0Mzg5MjM3ODkxRS0xMyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjMwIHJlbWFpbmRlciAtMTY0NzMzNS4yMDExNDQ2MDkyNTYxMzQ5MjU4Mzg5MzcgLTE4NjY1NDgyMzc4Mi41MDQ1OTgwMjIzNTAyNDIzMDg1NiAtPiAtMTY0NzMzNS4yMDExNDQ2MDkyNTYxMzQ5MjU4Mzg5MzcKK3N1YngzMjMwIHN1YnRyYWN0IC0xNjQ3MzM1LjIwMTE0NDYwOTI1NjEzNDkyNTgzODkzNyAtMTg2NjU0ODIzNzgyLjUwNDU5ODAyMjM1MDI0MjMwODU2IC0+IDE4NjY1MzE3NjQ0Ny4zMDM0NTM0MTMwOTQxMDczODI3MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjMxIGFkZCA0MTQwNzgxODE0MDk0OC44NjY2MzA5MjM5MzQxMzgxNTUgLTUxNTYuNzYyNDUzNDAwMDMxMTM0MjMxMDEwNjY3MTYyN0UtOTYzIC0+IDQxNDA3ODE4MTQwOTQ4Ljg2NjYzMDkyMzkzNDEzODE1NSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjMxIGNvbXBhcmUgNDE0MDc4MTgxNDA5NDguODY2NjMwOTIzOTM0MTM4MTU1IC01MTU2Ljc2MjQ1MzQwMDAzMTEzNDIzMTAxMDY2NzE2MjdFLTk2MyAtPiAxCitkaXZ4MzIzMSBkaXZpZGUgNDE0MDc4MTgxNDA5NDguODY2NjMwOTIzOTM0MTM4MTU1IC01MTU2Ljc2MjQ1MzQwMDAzMTEzNDIzMTAxMDY2NzE2MjdFLTk2MyAtPiAtOC4wMjk4MDkxMTI4MTc5MjA0MDc2Nzk2NTA3Njk3NTE3RSs5NzIgSW5leGFjdCBSb3VuZGVkCitkdml4MzIzMSBkaXZpZGVpbnQgNDE0MDc4MTgxNDA5NDguODY2NjMwOTIzOTM0MTM4MTU1IC01MTU2Ljc2MjQ1MzQwMDAzMTEzNDIzMTAxMDY2NzE2MjdFLTk2MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMyMzEgbXVsdGlwbHkgNDE0MDc4MTgxNDA5NDguODY2NjMwOTIzOTM0MTM4MTU1IC01MTU2Ljc2MjQ1MzQwMDAzMTEzNDIzMTAxMDY2NzE2MjdFLTk2MyAtPiAtMi4xMzUzMDI4MTg2NjQ2MTc5MzY5MjIwODM0NjkxMTU2RS05NDYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIzMSBwb3dlciA0MTQwNzgxODE0MDk0OC44NjY2MzA5MjM5MzQxMzgxNTUgLTUgLT4gOC4yMTQ2MzQ4NTU2NjQ4NTQ3NTI1NjkzNTI4MDA0MDgxRS02OSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjMxIHJlbWFpbmRlciA0MTQwNzgxODE0MDk0OC44NjY2MzA5MjM5MzQxMzgxNTUgLTUxNTYuNzYyNDUzNDAwMDMxMTM0MjMxMDEwNjY3MTYyN0UtOTYzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzIzMSBzdWJ0cmFjdCA0MTQwNzgxODE0MDk0OC44NjY2MzA5MjM5MzQxMzgxNTUgLTUxNTYuNzYyNDUzNDAwMDMxMTM0MjMxMDEwNjY3MTYyN0UtOTYzIC0+IDQxNDA3ODE4MTQwOTQ4Ljg2NjYzMDkyMzkzNDEzODE1NSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjMyIGFkZCAtNi42NTQ3NDI0MDEyNTE2ODM0NjYyMDExNzA2MTY1Mjk3IC01NzQ0NTQ1ODU1ODAuMDYyMTU5NzQxMzk4ODQ3NDY0NDEgLT4gLTU3NDQ1NDU4NTU4Ni43MTY5MDIxNDI2NTA1MzA5MzA2MSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjMyIGNvbXBhcmUgLTYuNjU0NzQyNDAxMjUxNjgzNDY2MjAxMTcwNjE2NTI5NyAtNTc0NDU0NTg1NTgwLjA2MjE1OTc0MTM5ODg0NzQ2NDQxIC0+IDEKK2RpdngzMjMyIGRpdmlkZSAtNi42NTQ3NDI0MDEyNTE2ODM0NjYyMDExNzA2MTY1Mjk3IC01NzQ0NTQ1ODU1ODAuMDYyMTU5NzQxMzk4ODQ3NDY0NDEgLT4gMS4xNTg0NDUzNDQyMDk3NTY4NzQ1NDExNTY4MDM3MDc4RS0xMSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjMyIGRpdmlkZWludCAtNi42NTQ3NDI0MDEyNTE2ODM0NjYyMDExNzA2MTY1Mjk3IC01NzQ0NTQ1ODU1ODAuMDYyMTU5NzQxMzk4ODQ3NDY0NDEgLT4gMAorbXVseDMyMzIgbXVsdGlwbHkgLTYuNjU0NzQyNDAxMjUxNjgzNDY2MjAxMTcwNjE2NTI5NyAtNTc0NDU0NTg1NTgwLjA2MjE1OTc0MTM5ODg0NzQ2NDQxIC0+IDM4MjI4NDcyODgyNTMuMTAzNTU1OTIwNjY5MTUzMjgyNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjMyIHBvd2VyIC02LjY1NDc0MjQwMTI1MTY4MzQ2NjIwMTE3MDYxNjUyOTcgLTYgLT4gMC4wMDAwMTE1MTM2MzYyODMzODg3OTE0ODgxMjgyMzkyMzI5MDYgSW5leGFjdCBSb3VuZGVkCityZW14MzIzMiByZW1haW5kZXIgLTYuNjU0NzQyNDAxMjUxNjgzNDY2MjAxMTcwNjE2NTI5NyAtNTc0NDU0NTg1NTgwLjA2MjE1OTc0MTM5ODg0NzQ2NDQxIC0+IC02LjY1NDc0MjQwMTI1MTY4MzQ2NjIwMTE3MDYxNjUyOTcKK3N1YngzMjMyIHN1YnRyYWN0IC02LjY1NDc0MjQwMTI1MTY4MzQ2NjIwMTE3MDYxNjUyOTcgLTU3NDQ1NDU4NTU4MC4wNjIxNTk3NDEzOTg4NDc0NjQ0MSAtPiA1NzQ0NTQ1ODU1NzMuNDA3NDE3MzQwMTQ3MTYzOTk4MjEgSW5leGFjdCBSb3VuZGVkCithZGR4MzIzMyBhZGQgLTI3NjI3Ljc1ODc0NTM4MTI2Nzc4MDg4NTA2NzQ0NzY3MSAtMjMzODU5NzIxODk0NDEuNzA5NTg2NDMzNzU4MTExMDYyIC0+IC0yMzM4NTk3MjIxNzA2OS40NjgzMzE4MTUwMjU4OTE5NDcgSW5leGFjdCBSb3VuZGVkCitjb214MzIzMyBjb21wYXJlIC0yNzYyNy43NTg3NDUzODEyNjc3ODA4ODUwNjc0NDc2NzEgLTIzMzg1OTcyMTg5NDQxLjcwOTU4NjQzMzc1ODExMTA2MiAtPiAxCitkaXZ4MzIzMyBkaXZpZGUgLTI3NjI3Ljc1ODc0NTM4MTI2Nzc4MDg4NTA2NzQ0NzY3MSAtMjMzODU5NzIxODk0NDEuNzA5NTg2NDMzNzU4MTExMDYyIC0+IDEuMTgxMzgxNjY0MjU0ODkyMDE5NDcwOTg5ODExMTYyNEUtOSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjMzIGRpdmlkZWludCAtMjc2MjcuNzU4NzQ1MzgxMjY3NzgwODg1MDY3NDQ3NjcxIC0yMzM4NTk3MjE4OTQ0MS43MDk1ODY0MzM3NTgxMTEwNjIgLT4gMAorbXVseDMyMzMgbXVsdGlwbHkgLTI3NjI3Ljc1ODc0NTM4MTI2Nzc4MDg4NTA2NzQ0NzY3MSAtMjMzODU5NzIxODk0NDEuNzA5NTg2NDMzNzU4MTExMDYyIC0+IDY0NjEwMTk5NzY3NjA5MTMwNi40MTQ4NTM5MzY3ODY1NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjMzIHBvd2VyIC0yNzYyNy43NTg3NDUzODEyNjc3ODA4ODUwNjc0NDc2NzEgLTIgLT4gMS4zMTAxMTI4MDA5NTYwODEyNTI5MTk4NTIxOTIyMjY5RS05IEluZXhhY3QgUm91bmRlZAorcmVteDMyMzMgcmVtYWluZGVyIC0yNzYyNy43NTg3NDUzODEyNjc3ODA4ODUwNjc0NDc2NzEgLTIzMzg1OTcyMTg5NDQxLjcwOTU4NjQzMzc1ODExMTA2MiAtPiAtMjc2MjcuNzU4NzQ1MzgxMjY3NzgwODg1MDY3NDQ3NjcxCitzdWJ4MzIzMyBzdWJ0cmFjdCAtMjc2MjcuNzU4NzQ1MzgxMjY3NzgwODg1MDY3NDQ3NjcxIC0yMzM4NTk3MjE4OTQ0MS43MDk1ODY0MzM3NTgxMTEwNjIgLT4gMjMzODU5NzIxNjE4MTMuOTUwODQxMDUyNDkwMzMwMTc3IEluZXhhY3QgUm91bmRlZAorYWRkeDMyMzQgYWRkIDIwOTgxOS43NDM3OTA5OTkxNDc1Mjk2MzcxMTk0NDMwN0UtMjI4IC00NDAyMzAuNjcwMDk4OTUzMjQ2NzgzMTM3MDMyMDI2NkUtOTYwIC0+IDIuMDk4MTk3NDM3OTA5OTkxNDc1Mjk2MzcxMTk0NDMwN0UtMjIzIEluZXhhY3QgUm91bmRlZAorY29teDMyMzQgY29tcGFyZSAyMDk4MTkuNzQzNzkwOTk5MTQ3NTI5NjM3MTE5NDQzMDdFLTIyOCAtNDQwMjMwLjY3MDA5ODk1MzI0Njc4MzEzNzAzMjAyNjZFLTk2MCAtPiAxCitkaXZ4MzIzNCBkaXZpZGUgMjA5ODE5Ljc0Mzc5MDk5OTE0NzUyOTYzNzExOTQ0MzA3RS0yMjggLTQ0MDIzMC42NzAwOTg5NTMyNDY3ODMxMzcwMzIwMjY2RS05NjAgLT4gLTQuNzY2MTMxODk0OTg2NzA2MDU5NTU0NTc2NTA1MzE4N0UrNzMxIEluZXhhY3QgUm91bmRlZAorZHZpeDMyMzQgZGl2aWRlaW50IDIwOTgxOS43NDM3OTA5OTkxNDc1Mjk2MzcxMTk0NDMwN0UtMjI4IC00NDAyMzAuNjcwMDk4OTUzMjQ2NzgzMTM3MDMyMDI2NkUtOTYwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzIzNCBtdWx0aXBseSAyMDk4MTkuNzQzNzkwOTk5MTQ3NTI5NjM3MTE5NDQzMDdFLTIyOCAtNDQwMjMwLjY3MDA5ODk1MzI0Njc4MzEzNzAzMjAyNjZFLTk2MCAtPiAtOS4yMzY5MDg2NDA5MTAyMjM5NTczNzI2MzE2NTkzNjQ4RS0xMTc4IEluZXhhY3QgUm91bmRlZAorcG93eDMyMzQgcG93ZXIgMjA5ODE5Ljc0Mzc5MDk5OTE0NzUyOTYzNzExOTQ0MzA3RS0yMjggLTQgLT4gNS4xNTk1ODI4NDk0MTExNjkwOTEwNjUwOTE5Nzc2NzA1RSs4OTAgSW5leGFjdCBSb3VuZGVkCityZW14MzIzNCByZW1haW5kZXIgMjA5ODE5Ljc0Mzc5MDk5OTE0NzUyOTYzNzExOTQ0MzA3RS0yMjggLTQ0MDIzMC42NzAwOTg5NTMyNDY3ODMxMzcwMzIwMjY2RS05NjAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjM0IHN1YnRyYWN0IDIwOTgxOS43NDM3OTA5OTkxNDc1Mjk2MzcxMTk0NDMwN0UtMjI4IC00NDAyMzAuNjcwMDk4OTUzMjQ2NzgzMTM3MDMyMDI2NkUtOTYwIC0+IDIuMDk4MTk3NDM3OTA5OTkxNDc1Mjk2MzcxMTk0NDMwN0UtMjIzIEluZXhhY3QgUm91bmRlZAorYWRkeDMyMzUgYWRkIDIuMzQ4ODQ1NzYwMDQxNTQ3NDI3MDI1OTMzMDg2NTE4NCA5MTgyNDM0LjY2NjAyMTI0ODI1MDAzNzYyMjA1MDg2MDVFLTYxMiAtPiAyLjM0ODg0NTc2MDA0MTU0NzQyNzAyNTkzMzA4NjUxODQgSW5leGFjdCBSb3VuZGVkCitjb214MzIzNSBjb21wYXJlIDIuMzQ4ODQ1NzYwMDQxNTQ3NDI3MDI1OTMzMDg2NTE4NCA5MTgyNDM0LjY2NjAyMTI0ODI1MDAzNzYyMjA1MDg2MDVFLTYxMiAtPiAxCitkaXZ4MzIzNSBkaXZpZGUgMi4zNDg4NDU3NjAwNDE1NDc0MjcwMjU5MzMwODY1MTg0IDkxODI0MzQuNjY2MDIxMjQ4MjUwMDM3NjIyMDUwODYwNUUtNjEyIC0+IDIuNTU3OTc3MTAwMjcwODQwMjc1MzQxMjI2NjU3NDk0MUUrNjA1IEluZXhhY3QgUm91bmRlZAorZHZpeDMyMzUgZGl2aWRlaW50IDIuMzQ4ODQ1NzYwMDQxNTQ3NDI3MDI1OTMzMDg2NTE4NCA5MTgyNDM0LjY2NjAyMTI0ODI1MDAzNzYyMjA1MDg2MDVFLTYxMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMyMzUgbXVsdGlwbHkgMi4zNDg4NDU3NjAwNDE1NDc0MjcwMjU5MzMwODY1MTg0IDkxODI0MzQuNjY2MDIxMjQ4MjUwMDM3NjIyMDUwODYwNUUtNjEyIC0+IDIuMTU2ODEyMjczMjE0MjUzMTU1NjIxNTIwNDQ1OTQwN0UtNjA1IEluZXhhY3QgUm91bmRlZAorcG93eDMyMzUgcG93ZXIgMi4zNDg4NDU3NjAwNDE1NDc0MjcwMjU5MzMwODY1MTg0IDkgLT4gMjE3Ni4xNTgzNDQ2MTQ3NTExNTc5MTEzMDIyNjIyMjU1IEluZXhhY3QgUm91bmRlZAorcmVteDMyMzUgcmVtYWluZGVyIDIuMzQ4ODQ1NzYwMDQxNTQ3NDI3MDI1OTMzMDg2NTE4NCA5MTgyNDM0LjY2NjAyMTI0ODI1MDAzNzYyMjA1MDg2MDVFLTYxMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyMzUgc3VidHJhY3QgMi4zNDg4NDU3NjAwNDE1NDc0MjcwMjU5MzMwODY1MTg0IDkxODI0MzQuNjY2MDIxMjQ4MjUwMDM3NjIyMDUwODYwNUUtNjEyIC0+IDIuMzQ4ODQ1NzYwMDQxNTQ3NDI3MDI1OTMzMDg2NTE4NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjM2IGFkZCAtNTEwNzU4NjMwMDE5Ny45NzAzOTQxMDM0NDA0NTU3NDA5IDU2NjA5LjA1NDg2MDU1MDU3ODM4Njc4MDM5NDk2Njg2RS03NjggLT4gLTUxMDc1ODYzMDAxOTcuOTcwMzk0MTAzNDQwNDU1NzQwOSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjM2IGNvbXBhcmUgLTUxMDc1ODYzMDAxOTcuOTcwMzk0MTAzNDQwNDU1NzQwOSA1NjYwOS4wNTQ4NjA1NTA1NzgzODY3ODAzOTQ5NjY4NkUtNzY4IC0+IC0xCitkaXZ4MzIzNiBkaXZpZGUgLTUxMDc1ODYzMDAxOTcuOTcwMzk0MTAzNDQwNDU1NzQwOSA1NjYwOS4wNTQ4NjA1NTA1NzgzODY3ODAzOTQ5NjY4NkUtNzY4IC0+IC05LjAyMjU2MDYzNTg5MDk4Nzc4NTUzMjYzNTc0MDIyNDJFKzc3NSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjM2IGRpdmlkZWludCAtNTEwNzU4NjMwMDE5Ny45NzAzOTQxMDM0NDA0NTU3NDA5IDU2NjA5LjA1NDg2MDU1MDU3ODM4Njc4MDM5NDk2Njg2RS03NjggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMjM2IG11bHRpcGx5IC01MTA3NTg2MzAwMTk3Ljk3MDM5NDEwMzQ0MDQ1NTc0MDkgNTY2MDkuMDU0ODYwNTUwNTc4Mzg2NzgwMzk0OTY2ODZFLTc2OCAtPiAtMi44OTEzNTYzMzA3MjkwMzQ2MTUyNTk2MjEyNTkzNTMyRS03NTEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzIzNiBwb3dlciAtNTEwNzU4NjMwMDE5Ny45NzAzOTQxMDM0NDA0NTU3NDA5IDYgLT4gMS43NzUzOTIwODk0MTg4MDIyMTI1OTE5NTU5NTY1MDI5RSs3NiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjM2IHJlbWFpbmRlciAtNTEwNzU4NjMwMDE5Ny45NzAzOTQxMDM0NDA0NTU3NDA5IDU2NjA5LjA1NDg2MDU1MDU3ODM4Njc4MDM5NDk2Njg2RS03NjggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjM2IHN1YnRyYWN0IC01MTA3NTg2MzAwMTk3Ljk3MDM5NDEwMzQ0MDQ1NTc0MDkgNTY2MDkuMDU0ODYwNTUwNTc4Mzg2NzgwMzk0OTY2ODZFLTc2OCAtPiAtNTEwNzU4NjMwMDE5Ny45NzAzOTQxMDM0NDA0NTU3NDA5IEluZXhhY3QgUm91bmRlZAorYWRkeDMyMzcgYWRkIC03MDQ1NDA3MDA5NTg2OS43MDcxNzg3MTIxMjYwMTM5MCAtNjIwMDE3OC4zNzAyNDkyNjAwMDkxNjg4ODgzOTI0MDYgLT4gLTcwNDU0MDc2Mjk2MDQ4LjA3NzQyNzk3MjEzNTE4Mjc4OCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjM3IGNvbXBhcmUgLTcwNDU0MDcwMDk1ODY5LjcwNzE3ODcxMjEyNjAxMzkwIC02MjAwMTc4LjM3MDI0OTI2MDAwOTE2ODg4ODM5MjQwNiAtPiAtMQorZGl2eDMyMzcgZGl2aWRlIC03MDQ1NDA3MDA5NTg2OS43MDcxNzg3MTIxMjYwMTM5MCAtNjIwMDE3OC4zNzAyNDkyNjAwMDkxNjg4ODgzOTI0MDYgLT4gMTEzNjMyMzIuNzc5NTQ5NDIyNDkwNTQ4OTk3NTE3MTk0IEluZXhhY3QgUm91bmRlZAorZHZpeDMyMzcgZGl2aWRlaW50IC03MDQ1NDA3MDA5NTg2OS43MDcxNzg3MTIxMjYwMTM5MCAtNjIwMDE3OC4zNzAyNDkyNjAwMDkxNjg4ODgzOTI0MDYgLT4gMTEzNjMyMzIKK211bHgzMjM3IG11bHRpcGx5IC03MDQ1NDA3MDA5NTg2OS43MDcxNzg3MTIxMjYwMTM5MCAtNjIwMDE3OC4zNzAyNDkyNjAwMDkxNjg4ODgzOTI0MDYgLT4gNDM2ODI3ODAxNTA0NDM2NTY2OTQ1Ljc2NjYzNjg3OTI0IEluZXhhY3QgUm91bmRlZAorcG93eDMyMzcgcG93ZXIgLTcwNDU0MDcwMDk1ODY5LjcwNzE3ODcxMjEyNjAxMzkwIC02MjAwMTc4IC0+IDBFLTEwMDMwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMjM3IHJlbWFpbmRlciAtNzA0NTQwNzAwOTU4NjkuNzA3MTc4NzEyMTI2MDEzOTAgLTYyMDAxNzguMzcwMjQ5MjYwMDA5MTY4ODg4MzkyNDA2IC0+IC00ODMzMzQ1LjQ2Nzg2NjIwMzkyMDAyODg4MzU4MzgwOAorc3VieDMyMzcgc3VidHJhY3QgLTcwNDU0MDcwMDk1ODY5LjcwNzE3ODcxMjEyNjAxMzkwIC02MjAwMTc4LjM3MDI0OTI2MDAwOTE2ODg4ODM5MjQwNiAtPiAtNzA0NTQwNjM4OTU2OTEuMzM2OTI5NDUyMTE2ODQ1MDEyIEluZXhhY3QgUm91bmRlZAorYWRkeDMyMzggYWRkIDI5MTE5LjIyMDYyMTUxMTA0NjU1ODc1NzkwMDY0NTIyOCAzNTE3NjEyLjg4MTA3NjE0NzAwMTg2NzYzMTE4NjMwMTBFLTIyMiAtPiAyOTExOS4yMjA2MjE1MTEwNDY1NTg3NTc5MDA2NDUyMjggSW5leGFjdCBSb3VuZGVkCitjb214MzIzOCBjb21wYXJlIDI5MTE5LjIyMDYyMTUxMTA0NjU1ODc1NzkwMDY0NTIyOCAzNTE3NjEyLjg4MTA3NjE0NzAwMTg2NzYzMTE4NjMwMTBFLTIyMiAtPiAxCitkaXZ4MzIzOCBkaXZpZGUgMjkxMTkuMjIwNjIxNTExMDQ2NTU4NzU3OTAwNjQ1MjI4IDM1MTc2MTIuODgxMDc2MTQ3MDAxODY3NjMxMTg2MzAxMEUtMjIyIC0+IDguMjc4MTE5NzM4MDA4OTY4NDA2MzIzOTc1MjMzNzQ2N0UrMjE5IEluZXhhY3QgUm91bmRlZAorZHZpeDMyMzggZGl2aWRlaW50IDI5MTE5LjIyMDYyMTUxMTA0NjU1ODc1NzkwMDY0NTIyOCAzNTE3NjEyLjg4MTA3NjE0NzAwMTg2NzYzMTE4NjMwMTBFLTIyMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMyMzggbXVsdGlwbHkgMjkxMTkuMjIwNjIxNTExMDQ2NTU4NzU3OTAwNjQ1MjI4IDM1MTc2MTIuODgxMDc2MTQ3MDAxODY3NjMxMTg2MzAxMEUtMjIyIC0+IDEuMDI0MzAxNDU1NDUxMjU0MjQ0MDU5Mjc2ODA4ODYwMEUtMjExIEluZXhhY3QgUm91bmRlZAorcG93eDMyMzggcG93ZXIgMjkxMTkuMjIwNjIxNTExMDQ2NTU4NzU3OTAwNjQ1MjI4IDQgLT4gNzE4OTgzNjA1MzI4NDE3NDYxLjMyODM1OTg0MjE3MjU1IEluZXhhY3QgUm91bmRlZAorcmVteDMyMzggcmVtYWluZGVyIDI5MTE5LjIyMDYyMTUxMTA0NjU1ODc1NzkwMDY0NTIyOCAzNTE3NjEyLjg4MTA3NjE0NzAwMTg2NzYzMTE4NjMwMTBFLTIyMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyMzggc3VidHJhY3QgMjkxMTkuMjIwNjIxNTExMDQ2NTU4NzU3OTAwNjQ1MjI4IDM1MTc2MTIuODgxMDc2MTQ3MDAxODY3NjMxMTg2MzAxMEUtMjIyIC0+IDI5MTE5LjIyMDYyMTUxMTA0NjU1ODc1NzkwMDY0NTIyOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjM5IGFkZCAtNTE2OC4yMjE0MTExMDkxMTMyOTEzNzc2MDQyMjE0NTI1IC01NjkwMjc0LjA5NzExNzM0NzY1MjcxMjM1Njg2Mjc3MjAgLT4gLTU2OTU0NDIuMzE4NTI4NDU2NzY2MDAzNzM0NDY2OTkzNSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjM5IGNvbXBhcmUgLTUxNjguMjIxNDExMTA5MTEzMjkxMzc3NjA0MjIxNDUyNSAtNTY5MDI3NC4wOTcxMTczNDc2NTI3MTIzNTY4NjI3NzIwIC0+IDEKK2RpdngzMjM5IGRpdmlkZSAtNTE2OC4yMjE0MTExMDkxMTMyOTEzNzc2MDQyMjE0NTI1IC01NjkwMjc0LjA5NzExNzM0NzY1MjcxMjM1Njg2Mjc3MjAgLT4gMC4wMDA5MDgyNTUyNjU1NDYzOTkxNTU4MDUzOTMxNjcxNDQ1MSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjM5IGRpdmlkZWludCAtNTE2OC4yMjE0MTExMDkxMTMyOTEzNzc2MDQyMjE0NTI1IC01NjkwMjc0LjA5NzExNzM0NzY1MjcxMjM1Njg2Mjc3MjAgLT4gMAorbXVseDMyMzkgbXVsdGlwbHkgLTUxNjguMjIxNDExMTA5MTEzMjkxMzc3NjA0MjIxNDUyNSAtNTY5MDI3NC4wOTcxMTczNDc2NTI3MTIzNTY4NjI3NzIwIC0+IDI5NDA4NTk2NDIzLjgwMTQ1NDA1Mzg1NTc5Mzg5ODMyMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjM5IHBvd2VyIC01MTY4LjIyMTQxMTEwOTExMzI5MTM3NzYwNDIyMTQ1MjUgLTU2OTAyNzQgLT4gMEUtMTAwMzAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMyMzkgcmVtYWluZGVyIC01MTY4LjIyMTQxMTEwOTExMzI5MTM3NzYwNDIyMTQ1MjUgLTU2OTAyNzQuMDk3MTE3MzQ3NjUyNzEyMzU2ODYyNzcyMCAtPiAtNTE2OC4yMjE0MTExMDkxMTMyOTEzNzc2MDQyMjE0NTI1CitzdWJ4MzIzOSBzdWJ0cmFjdCAtNTE2OC4yMjE0MTExMDkxMTMyOTEzNzc2MDQyMjE0NTI1IC01NjkwMjc0LjA5NzExNzM0NzY1MjcxMjM1Njg2Mjc3MjAgLT4gNTY4NTEwNS44NzU3MDYyMzg1Mzk0MjA5NzkyNTg1NTA1IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNDAgYWRkIDMzNzgzLjA2MDg1NzE5NzA2NzM5MTQ2MjE0NDUxNzk2NCAtMjA3MC4wODA2OTU5NDY1MDg4MTk4NTA4MzIyODE1NDA2IC0+IDMxNzEyLjk4MDE2MTI1MDU1ODU3MTYxMTMxMjIzNjQyMyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjQwIGNvbXBhcmUgMzM3ODMuMDYwODU3MTk3MDY3MzkxNDYyMTQ0NTE3OTY0IC0yMDcwLjA4MDY5NTk0NjUwODgxOTg1MDgzMjI4MTU0MDYgLT4gMQorZGl2eDMyNDAgZGl2aWRlIDMzNzgzLjA2MDg1NzE5NzA2NzM5MTQ2MjE0NDUxNzk2NCAtMjA3MC4wODA2OTU5NDY1MDg4MTk4NTA4MzIyODE1NDA2IC0+IC0xNi4zMTk2ODMwNTU1MTk4OTI4ODEzOTQzNTg0NDkyMjAgSW5leGFjdCBSb3VuZGVkCitkdml4MzI0MCBkaXZpZGVpbnQgMzM3ODMuMDYwODU3MTk3MDY3MzkxNDYyMTQ0NTE3OTY0IC0yMDcwLjA4MDY5NTk0NjUwODgxOTg1MDgzMjI4MTU0MDYgLT4gLTE2CittdWx4MzI0MCBtdWx0aXBseSAzMzc4My4wNjA4NTcxOTcwNjczOTE0NjIxNDQ1MTc5NjQgLTIwNzAuMDgwNjk1OTQ2NTA4ODE5ODUwODMyMjgxNTQwNiAtPiAtNjk5MzM2NjIuMTMwNDY5NzY2MDgwNTc0MjM1ODQzNDQ4IEluZXhhY3QgUm91bmRlZAorcG93eDMyNDAgcG93ZXIgMzM3ODMuMDYwODU3MTk3MDY3MzkxNDYyMTQ0NTE3OTY0IC0yMDcwIC0+IDMuOTE4MTMzNjAwMTgwMzAwODU5NzI5MzgxODk4NDQwNkUtOTM3NSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjQwIHJlbWFpbmRlciAzMzc4My4wNjA4NTcxOTcwNjczOTE0NjIxNDQ1MTc5NjQgLTIwNzAuMDgwNjk1OTQ2NTA4ODE5ODUwODMyMjgxNTQwNiAtPiA2NjEuNzY5NzIyMDUyOTI2MjczODQ4ODI4MDEzMzE0NAorc3VieDMyNDAgc3VidHJhY3QgMzM3ODMuMDYwODU3MTk3MDY3MzkxNDYyMTQ0NTE3OTY0IC0yMDcwLjA4MDY5NTk0NjUwODgxOTg1MDgzMjI4MTU0MDYgLT4gMzU4NTMuMTQxNTUzMTQzNTc2MjExMzEyOTc2Nzk5NTA1IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNDEgYWRkIDQyMjA3NDM1MDkxMDUwLjg0MDI5NjM1Mzg3NDczMzE2OUUtOTA1IDczMzMwNjMzMDc4LjgyODIxNjAxODUzNjMyNjc0MzMyNUUrOTc2IC0+IDcuMzMzMDYzMzA3ODgyODIxNjAxODUzNjMyNjc0MzMyNUUrOTg2IEluZXhhY3QgUm91bmRlZAorY29teDMyNDEgY29tcGFyZSA0MjIwNzQzNTA5MTA1MC44NDAyOTYzNTM4NzQ3MzMxNjlFLTkwNSA3MzMzMDYzMzA3OC44MjgyMTYwMTg1MzYzMjY3NDMzMjVFKzk3NiAtPiAtMQorZGl2eDMyNDEgZGl2aWRlIDQyMjA3NDM1MDkxMDUwLjg0MDI5NjM1Mzg3NDczMzE2OUUtOTA1IDczMzMwNjMzMDc4LjgyODIxNjAxODUzNjMyNjc0MzMyNUUrOTc2IC0+IDUuNzU1NzcxMjY3NjA2NDIwNjYzNjE3ODI0NzU1NDA1NkUtMTg3OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjQxIGRpdmlkZWludCA0MjIwNzQzNTA5MTA1MC44NDAyOTYzNTM4NzQ3MzMxNjlFLTkwNSA3MzMzMDYzMzA3OC44MjgyMTYwMTg1MzYzMjY3NDMzMjVFKzk3NiAtPiAwCittdWx4MzI0MSBtdWx0aXBseSA0MjIwNzQzNTA5MTA1MC44NDAyOTYzNTM4NzQ3MzMxNjlFLTkwNSA3MzMzMDYzMzA3OC44MjgyMTYwMTg1MzYzMjY3NDMzMjVFKzk3NiAtPiAzLjA5NTA5NzkzNTg2MDMwNzU2NTA1OTI0MzMzOTg5MzlFKzk1IEluZXhhY3QgUm91bmRlZAorcG93eDMyNDEgcG93ZXIgNDIyMDc0MzUwOTEwNTAuODQwMjk2MzUzODc0NzMzMTY5RS05MDUgNyAtPiAyLjM4NjI4NzI5NDA2MTUyODM1OTk1NzMwODI5NjY2NDJFLTYyNDAgSW5leGFjdCBSb3VuZGVkCityZW14MzI0MSByZW1haW5kZXIgNDIyMDc0MzUwOTEwNTAuODQwMjk2MzUzODc0NzMzMTY5RS05MDUgNzMzMzA2MzMwNzguODI4MjE2MDE4NTM2MzI2NzQzMzI1RSs5NzYgLT4gNC4yMjA3NDM1MDkxMDUwODQwMjk2MzUzODc0NzMzMTY5RS04OTIKK3N1YngzMjQxIHN1YnRyYWN0IDQyMjA3NDM1MDkxMDUwLjg0MDI5NjM1Mzg3NDczMzE2OUUtOTA1IDczMzMwNjMzMDc4LjgyODIxNjAxODUzNjMyNjc0MzMyNUUrOTc2IC0+IC03LjMzMzA2MzMwNzg4MjgyMTYwMTg1MzYzMjY3NDMzMjVFKzk4NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjQyIGFkZCAtNzE4MDAuODA2NzAwODY4Nzg0ODQxMDQ1NDA2Njc5NjQxIC0zOTYxNzQ1Njk2NDI1MDY5NzkwMjUxOTE1MDUyNjcwMSAtPiAtMzk2MTc0NTY5NjQyNTA2OTc5MDI1MTkxNTA1OTg1MDIgSW5leGFjdCBSb3VuZGVkCitjb214MzI0MiBjb21wYXJlIC03MTgwMC44MDY3MDA4Njg3ODQ4NDEwNDU0MDY2Nzk2NDEgLTM5NjE3NDU2OTY0MjUwNjk3OTAyNTE5MTUwNTI2NzAxIC0+IDEKK2RpdngzMjQyIGRpdmlkZSAtNzE4MDAuODA2NzAwODY4Nzg0ODQxMDQ1NDA2Njc5NjQxIC0zOTYxNzQ1Njk2NDI1MDY5NzkwMjUxOTE1MDUyNjcwMSAtPiAxLjgxMjM1Mjc0MDUwMTcyMjAxNzg1NzkwNDk5NjQxMjZFLTI3IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNDIgZGl2aWRlaW50IC03MTgwMC44MDY3MDA4Njg3ODQ4NDEwNDU0MDY2Nzk2NDEgLTM5NjE3NDU2OTY0MjUwNjk3OTAyNTE5MTUwNTI2NzAxIC0+IDAKK211bHgzMjQyIG11bHRpcGx5IC03MTgwMC44MDY3MDA4Njg3ODQ4NDEwNDU0MDY2Nzk2NDEgLTM5NjE3NDU2OTY0MjUwNjk3OTAyNTE5MTUwNTI2NzAxIC0+IDIuODQ0NTY1MzY5NDcwMTUyMjE2NDkwMTgyNzUyNDUzOEUrMzYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI0MiBwb3dlciAtNzE4MDAuODA2NzAwODY4Nzg0ODQxMDQ1NDA2Njc5NjQxIC00IC0+IDMuNzYyNTUzNjg1MDg5NTQ4MDg4MjE3ODU5OTQyODc3NEUtMjAgSW5leGFjdCBSb3VuZGVkCityZW14MzI0MiByZW1haW5kZXIgLTcxODAwLjgwNjcwMDg2ODc4NDg0MTA0NTQwNjY3OTY0MSAtMzk2MTc0NTY5NjQyNTA2OTc5MDI1MTkxNTA1MjY3MDEgLT4gLTcxODAwLjgwNjcwMDg2ODc4NDg0MTA0NTQwNjY3OTY0MQorc3VieDMyNDIgc3VidHJhY3QgLTcxODAwLjgwNjcwMDg2ODc4NDg0MTA0NTQwNjY3OTY0MSAtMzk2MTc0NTY5NjQyNTA2OTc5MDI1MTkxNTA1MjY3MDEgLT4gMzk2MTc0NTY5NjQyNTA2OTc5MDI1MTkxNTA0NTQ5MDAgSW5leGFjdCBSb3VuZGVkCithZGR4MzI0MyBhZGQgNTM2Mjc0ODA4MDEuNjMxNTA0ODkyMzEwMDE2MDYyMTYwIDMyODI1OS41Njk0NzY2MTA0OTMxMzMxMTk4MzEwOTUwMyAtPiA1MzYyNzgwOTA2MS4yMDA5ODE1MDI4MDMxNDkxODE5OTEgSW5leGFjdCBSb3VuZGVkCitjb214MzI0MyBjb21wYXJlIDUzNjI3NDgwODAxLjYzMTUwNDg5MjMxMDAxNjA2MjE2MCAzMjgyNTkuNTY5NDc2NjEwNDkzMTMzMTE5ODMxMDk1MDMgLT4gMQorZGl2eDMyNDMgZGl2aWRlIDUzNjI3NDgwODAxLjYzMTUwNDg5MjMxMDAxNjA2MjE2MCAzMjgyNTkuNTY5NDc2NjEwNDkzMTMzMTE5ODMxMDk1MDMgLT4gMTYzMzY5LjEzMTU5MDM5NzE3OTAxNTAwNDY1MTA5ODM5IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNDMgZGl2aWRlaW50IDUzNjI3NDgwODAxLjYzMTUwNDg5MjMxMDAxNjA2MjE2MCAzMjgyNTkuNTY5NDc2NjEwNDkzMTMzMTE5ODMxMDk1MDMgLT4gMTYzMzY5CittdWx4MzI0MyBtdWx0aXBseSA1MzYyNzQ4MDgwMS42MzE1MDQ4OTIzMTAwMTYwNjIxNjAgMzI4MjU5LjU2OTQ3NjYxMDQ5MzEzMzExOTgzMTA5NTAzIC0+IDE3NjAzNzMzNzYwMDU4NzUyLjM2MzEyMzU4NTIyNDM2OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjQzIHBvd2VyIDUzNjI3NDgwODAxLjYzMTUwNDg5MjMxMDAxNjA2MjE2MCAzMjgyNjAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzI0MyByZW1haW5kZXIgNTM2Mjc0ODA4MDEuNjMxNTA0ODkyMzEwMDE2MDYyMTYwIDMyODI1OS41Njk0NzY2MTA0OTMxMzMxMTk4MzEwOTUwMyAtPiA0MzE5NS44MDcxMjUyMzk2NDUzNjIzNzU5OTYwNDM5Mworc3VieDMyNDMgc3VidHJhY3QgNTM2Mjc0ODA4MDEuNjMxNTA0ODkyMzEwMDE2MDYyMTYwIDMyODI1OS41Njk0NzY2MTA0OTMxMzMxMTk4MzEwOTUwMyAtPiA1MzYyNzE1MjU0Mi4wNjIwMjgyODE4MTY4ODI5NDIzMjkgSW5leGFjdCBSb3VuZGVkCithZGR4MzI0NCBhZGQgLTUwNTI2MDE1OTguNTU1OTM3MTMzODQyODM2ODQzODcyOCAtOTc4NTUzNzIuMjI0MzIxNjY0Nzg1MzE0NzgyNTU2MDY0IC0+IC01MTUwNDU2OTcwLjc4MDI1ODc5ODYyODE1MTYyNjQyODkgSW5leGFjdCBSb3VuZGVkCitjb214MzI0NCBjb21wYXJlIC01MDUyNjAxNTk4LjU1NTkzNzEzMzg0MjgzNjg0Mzg3MjggLTk3ODU1MzcyLjIyNDMyMTY2NDc4NTMxNDc4MjU1NjA2NCAtPiAtMQorZGl2eDMyNDQgZGl2aWRlIC01MDUyNjAxNTk4LjU1NTkzNzEzMzg0MjgzNjg0Mzg3MjggLTk3ODU1MzcyLjIyNDMyMTY2NDc4NTMxNDc4MjU1NjA2NCAtPiA1MS42MzMzNTkzNTE3MzI0MzIyODM4NzkyNzQxOTI5NDcgSW5leGFjdCBSb3VuZGVkCitkdml4MzI0NCBkaXZpZGVpbnQgLTUwNTI2MDE1OTguNTU1OTM3MTMzODQyODM2ODQzODcyOCAtOTc4NTUzNzIuMjI0MzIxNjY0Nzg1MzE0NzgyNTU2MDY0IC0+IDUxCittdWx4MzI0NCBtdWx0aXBseSAtNTA1MjYwMTU5OC41NTU5MzcxMzM4NDI4MzY4NDM4NzI4IC05Nzg1NTM3Mi4yMjQzMjE2NjQ3ODUzMTQ3ODI1NTYwNjQgLT4gNDk0NDI0MjEwMTI3ODkzODkzLjEyNTgxNTEyOTU0Nzg3IEluZXhhY3QgUm91bmRlZAorcG93eDMyNDQgcG93ZXIgLTUwNTI2MDE1OTguNTU1OTM3MTMzODQyODM2ODQzODcyOCAtOTc4NTUzNzIgLT4gMEUtMTAwMzAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMyNDQgcmVtYWluZGVyIC01MDUyNjAxNTk4LjU1NTkzNzEzMzg0MjgzNjg0Mzg3MjggLTk3ODU1MzcyLjIyNDMyMTY2NDc4NTMxNDc4MjU1NjA2NCAtPiAtNjE5Nzc2MTUuMTE1NTMyMjI5NzkxNzgyOTMzNTEzNTM2CitzdWJ4MzI0NCBzdWJ0cmFjdCAtNTA1MjYwMTU5OC41NTU5MzcxMzM4NDI4MzY4NDM4NzI4IC05Nzg1NTM3Mi4yMjQzMjE2NjQ3ODUzMTQ3ODI1NTYwNjQgLT4gLTQ5NTQ3NDYyMjYuMzMxNjE1NDY5MDU3NTIyMDYxMzE2NyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjQ1IGFkZCA0MjA4MTM0MzIwNzMzLjcwNjk3NDI5ODgyMjgwNjgxOTFFKzE0NiA0MjcwODY5LjE3NjAxNDk0Nzc1OTg5MjA5NjA2MjgzOTJFKzQ3MSAtPiA0LjI3MDg2OTE3NjAxNDk0Nzc1OTg5MjA5NjA2MjgzOTJFKzQ3NyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjQ1IGNvbXBhcmUgNDIwODEzNDMyMDczMy43MDY5NzQyOTg4MjI4MDY4MTkxRSsxNDYgNDI3MDg2OS4xNzYwMTQ5NDc3NTk4OTIwOTYwNjI4MzkyRSs0NzEgLT4gLTEKK2RpdngzMjQ1IGRpdmlkZSA0MjA4MTM0MzIwNzMzLjcwNjk3NDI5ODgyMjgwNjgxOTFFKzE0NiA0MjcwODY5LjE3NjAxNDk0Nzc1OTg5MjA5NjA2MjgzOTJFKzQ3MSAtPiA5Ljg1MzEwOTg2NDMwMjE5NTEwNDg3NDQwNzgwMjcyODNFLTMyMCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjQ1IGRpdmlkZWludCA0MjA4MTM0MzIwNzMzLjcwNjk3NDI5ODgyMjgwNjgxOTFFKzE0NiA0MjcwODY5LjE3NjAxNDk0Nzc1OTg5MjA5NjA2MjgzOTJFKzQ3MSAtPiAwCittdWx4MzI0NSBtdWx0aXBseSA0MjA4MTM0MzIwNzMzLjcwNjk3NDI5ODgyMjgwNjgxOTFFKzE0NiA0MjcwODY5LjE3NjAxNDk0Nzc1OTg5MjA5NjA2MjgzOTJFKzQ3MSAtPiAxLjc5NzIzOTExNTg5NTIxODkwMDIxNjkwODI3NTMxODNFKzYzNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjQ1IHBvd2VyIDQyMDgxMzQzMjA3MzMuNzA2OTc0Mjk4ODIyODA2ODE5MUUrMTQ2IDQgLT4gMy4xMzU4NzIzNDM5ODMwODcyMTI3MTI5ODIxOTYzODU3RSs2MzQgSW5leGFjdCBSb3VuZGVkCityZW14MzI0NSByZW1haW5kZXIgNDIwODEzNDMyMDczMy43MDY5NzQyOTg4MjI4MDY4MTkxRSsxNDYgNDI3MDg2OS4xNzYwMTQ5NDc3NTk4OTIwOTYwNjI4MzkyRSs0NzEgLT4gNC4yMDgxMzQzMjA3MzM3MDY5NzQyOTg4MjI4MDY4MTkxRSsxNTgKK3N1YngzMjQ1IHN1YnRyYWN0IDQyMDgxMzQzMjA3MzMuNzA2OTc0Mjk4ODIyODA2ODE5MUUrMTQ2IDQyNzA4NjkuMTc2MDE0OTQ3NzU5ODkyMDk2MDYyODM5MkUrNDcxIC0+IC00LjI3MDg2OTE3NjAxNDk0Nzc1OTg5MjA5NjA2MjgzOTJFKzQ3NyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjQ2IGFkZCAtOC41MDc3MDA5NjU3OTQyNTgxNTE1NTkwNDcxMTg5MDg0RSszMDggOTY1MjE0NTE1NS4zNzQyMTcwNDc4NDIxMTQwNDIzNzZFLTI1MCAtPiAtOC41MDc3MDA5NjU3OTQyNTgxNTE1NTkwNDcxMTg5MDg0RSszMDggSW5leGFjdCBSb3VuZGVkCitjb214MzI0NiBjb21wYXJlIC04LjUwNzcwMDk2NTc5NDI1ODE1MTU1OTA0NzExODkwODRFKzMwOCA5NjUyMTQ1MTU1LjM3NDIxNzA0Nzg0MjExNDA0MjM3NkUtMjUwIC0+IC0xCitkaXZ4MzI0NiBkaXZpZGUgLTguNTA3NzAwOTY1Nzk0MjU4MTUxNTU5MDQ3MTE4OTA4NEUrMzA4IDk2NTIxNDUxNTUuMzc0MjE3MDQ3ODQyMTE0MDQyMzc2RS0yNTAgLT4gLTguODE0MzExMDQ1NzIzNjA4OTk3ODA3MDQxOTA0Nzk3MEUrNTQ4IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNDYgZGl2aWRlaW50IC04LjUwNzcwMDk2NTc5NDI1ODE1MTU1OTA0NzExODkwODRFKzMwOCA5NjUyMTQ1MTU1LjM3NDIxNzA0Nzg0MjExNDA0MjM3NkUtMjUwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzI0NiBtdWx0aXBseSAtOC41MDc3MDA5NjU3OTQyNTgxNTE1NTkwNDcxMTg5MDg0RSszMDggOTY1MjE0NTE1NS4zNzQyMTcwNDc4NDIxMTQwNDIzNzZFLTI1MCAtPiAtOC4yMTE3NTY0NjYwMzYzNTk2MjgzNzMyOTQyMDkxODUyRSs2OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjQ2IHBvd2VyIC04LjUwNzcwMDk2NTc5NDI1ODE1MTU1OTA0NzExODkwODRFKzMwOCAxMCAtPiAxLjk4NjY1MzY4MTI1NzMyMDc4NjgzNTA2NDA3NjA2NzhFKzMwODkgSW5leGFjdCBSb3VuZGVkCityZW14MzI0NiByZW1haW5kZXIgLTguNTA3NzAwOTY1Nzk0MjU4MTUxNTU5MDQ3MTE4OTA4NEUrMzA4IDk2NTIxNDUxNTUuMzc0MjE3MDQ3ODQyMTE0MDQyMzc2RS0yNTAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjQ2IHN1YnRyYWN0IC04LjUwNzcwMDk2NTc5NDI1ODE1MTU1OTA0NzExODkwODRFKzMwOCA5NjUyMTQ1MTU1LjM3NDIxNzA0Nzg0MjExNDA0MjM3NkUtMjUwIC0+IC04LjUwNzcwMDk2NTc5NDI1ODE1MTU1OTA0NzExODkwODRFKzMwOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjQ3IGFkZCAtOTUwNC45NzAzMDMyMjg2OTYwNzkwOTA0MTgxMDc4MDYzRSs2MTkgLTg2LjI0NTk1Njk0OTA0OTE4NjUzMzQ2OTIwNjQ4NTAwMyAtPiAtOS41MDQ5NzAzMDMyMjg2OTYwNzkwOTA0MTgxMDc4MDYzRSs2MjIgSW5leGFjdCBSb3VuZGVkCitjb214MzI0NyBjb21wYXJlIC05NTA0Ljk3MDMwMzIyODY5NjA3OTA5MDQxODEwNzgwNjNFKzYxOSAtODYuMjQ1OTU2OTQ5MDQ5MTg2NTMzNDY5MjA2NDg1MDAzIC0+IC0xCitkaXZ4MzI0NyBkaXZpZGUgLTk1MDQuOTcwMzAzMjI4Njk2MDc5MDkwNDE4MTA3ODA2M0UrNjE5IC04Ni4yNDU5NTY5NDkwNDkxODY1MzM0NjkyMDY0ODUwMDMgLT4gMS4xMDIwNzcyMDMzMjI1NzA3MTI1MzkxMjEyNTE5NDIxRSs2MjEgSW5leGFjdCBSb3VuZGVkCitkdml4MzI0NyBkaXZpZGVpbnQgLTk1MDQuOTcwMzAzMjI4Njk2MDc5MDkwNDE4MTA3ODA2M0UrNjE5IC04Ni4yNDU5NTY5NDkwNDkxODY1MzM0NjkyMDY0ODUwMDMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMjQ3IG11bHRpcGx5IC05NTA0Ljk3MDMwMzIyODY5NjA3OTA5MDQxODEwNzgwNjNFKzYxOSAtODYuMjQ1OTU2OTQ5MDQ5MTg2NTMzNDY5MjA2NDg1MDAzIC0+IDguMTk3NjUyNTk1NzQyNTMxMTQyNzg1ODA4NzExNzY1NUUrNjI0IEluZXhhY3QgUm91bmRlZAorcG93eDMyNDcgcG93ZXIgLTk1MDQuOTcwMzAzMjI4Njk2MDc5MDkwNDE4MTA3ODA2M0UrNjE5IC04NiAtPiAwRS0xMDAzMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzI0NyByZW1haW5kZXIgLTk1MDQuOTcwMzAzMjI4Njk2MDc5MDkwNDE4MTA3ODA2M0UrNjE5IC04Ni4yNDU5NTY5NDkwNDkxODY1MzM0NjkyMDY0ODUwMDMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjQ3IHN1YnRyYWN0IC05NTA0Ljk3MDMwMzIyODY5NjA3OTA5MDQxODEwNzgwNjNFKzYxOSAtODYuMjQ1OTU2OTQ5MDQ5MTg2NTMzNDY5MjA2NDg1MDAzIC0+IC05LjUwNDk3MDMwMzIyODY5NjA3OTA5MDQxODEwNzgwNjNFKzYyMiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjQ4IGFkZCAtNDQwMjIwOTE2LjY2NzE2NzQzMDI2ODk2OTMxMTk0NzQ5IC0xMDI3MjUuMDE1OTQzNzc4NzE1NjA1NjQ4MjQzNTg3NzUgLT4gLTQ0MDMyMzY0MS42ODMxMTEyMDg5ODQ1NzQ5NjAxOTEwOCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjQ4IGNvbXBhcmUgLTQ0MDIyMDkxNi42NjcxNjc0MzAyNjg5NjkzMTE5NDc0OSAtMTAyNzI1LjAxNTk0Mzc3ODcxNTYwNTY0ODI0MzU4Nzc1IC0+IC0xCitkaXZ4MzI0OCBkaXZpZGUgLTQ0MDIyMDkxNi42NjcxNjc0MzAyNjg5NjkzMTE5NDc0OSAtMTAyNzI1LjAxNTk0Mzc3ODcxNTYwNTY0ODI0MzU4Nzc1IC0+IDQyODUuNDMwNTAyMjI2NDQ3MzI2OTc3MDI0NjEyNjIzNCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjQ4IGRpdmlkZWludCAtNDQwMjIwOTE2LjY2NzE2NzQzMDI2ODk2OTMxMTk0NzQ5IC0xMDI3MjUuMDE1OTQzNzc4NzE1NjA1NjQ4MjQzNTg3NzUgLT4gNDI4NQorbXVseDMyNDggbXVsdGlwbHkgLTQ0MDIyMDkxNi42NjcxNjc0MzAyNjg5NjkzMTE5NDc0OSAtMTAyNzI1LjAxNTk0Mzc3ODcxNTYwNTY0ODI0MzU4Nzc1IC0+IDQ1MjIxNzAwNjgzNDE5LjY1NTU5Njc3MTcxMTYwMzUwNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjQ4IHBvd2VyIC00NDAyMjA5MTYuNjY3MTY3NDMwMjY4OTY5MzExOTQ3NDkgLTEwMjcyNSAtPiAtMEUtMTAwMzAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMyNDggcmVtYWluZGVyIC00NDAyMjA5MTYuNjY3MTY3NDMwMjY4OTY5MzExOTQ3NDkgLTEwMjcyNS4wMTU5NDM3Nzg3MTU2MDU2NDgyNDM1ODc3NSAtPiAtNDQyMjMuMzQ4MDc1NjMzODk4NzY2NTg4MTczOTgxMjUKK3N1YngzMjQ4IHN1YnRyYWN0IC00NDAyMjA5MTYuNjY3MTY3NDMwMjY4OTY5MzExOTQ3NDkgLTEwMjcyNS4wMTU5NDM3Nzg3MTU2MDU2NDgyNDM1ODc3NSAtPiAtNDQwMTE4MTkxLjY1MTIyMzY1MTU1MzM2MzY2MzcwMzkwIEluZXhhY3QgUm91bmRlZAorYWRkeDMyNDkgYWRkIC00Ni4yNTA3MzUwODYwMDYzNTA1MTc5NDM0NjQ3NTgwMTkgMTQ2NTYzNTc1NTUxNzQuMjYzMjk1MjY2MDc0OTA4MDI0IC0+IDE0NjU2MzU3NTU1MTI4LjAxMjU2MDE4MDA2ODU1NzUwNiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjQ5IGNvbXBhcmUgLTQ2LjI1MDczNTA4NjAwNjM1MDUxNzk0MzQ2NDc1ODAxOSAxNDY1NjM1NzU1NTE3NC4yNjMyOTUyNjYwNzQ5MDgwMjQgLT4gLTEKK2RpdngzMjQ5IGRpdmlkZSAtNDYuMjUwNzM1MDg2MDA2MzUwNTE3OTQzNDY0NzU4MDE5IDE0NjU2MzU3NTU1MTc0LjI2MzI5NTI2NjA3NDkwODAyNCAtPiAtMy4xNTU2NzczMTY5NTIzMzEzOTMyMjA3NzI1NTIyODY2RS0xMiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjQ5IGRpdmlkZWludCAtNDYuMjUwNzM1MDg2MDA2MzUwNTE3OTQzNDY0NzU4MDE5IDE0NjU2MzU3NTU1MTc0LjI2MzI5NTI2NjA3NDkwODAyNCAtPiAtMAorbXVseDMyNDkgbXVsdGlwbHkgLTQ2LjI1MDczNTA4NjAwNjM1MDUxNzk0MzQ2NDc1ODAxOSAxNDY1NjM1NzU1NTE3NC4yNjMyOTUyNjYwNzQ5MDgwMjQgLT4gLTY3Nzg2NzMxMDYxMDE1Mi41NTU2OTYyMDQ1OTc4ODUzMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjQ5IHBvd2VyIC00Ni4yNTA3MzUwODYwMDYzNTA1MTc5NDM0NjQ3NTgwMTkgMSAtPiAtNDYuMjUwNzM1MDg2MDA2MzUwNTE3OTQzNDY0NzU4MDE5CityZW14MzI0OSByZW1haW5kZXIgLTQ2LjI1MDczNTA4NjAwNjM1MDUxNzk0MzQ2NDc1ODAxOSAxNDY1NjM1NzU1NTE3NC4yNjMyOTUyNjYwNzQ5MDgwMjQgLT4gLTQ2LjI1MDczNTA4NjAwNjM1MDUxNzk0MzQ2NDc1ODAxOQorc3VieDMyNDkgc3VidHJhY3QgLTQ2LjI1MDczNTA4NjAwNjM1MDUxNzk0MzQ2NDc1ODAxOSAxNDY1NjM1NzU1NTE3NC4yNjMyOTUyNjYwNzQ5MDgwMjQgLT4gLTE0NjU2MzU3NTU1MjIwLjUxNDAzMDM1MjA4MTI1ODU0MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjUwIGFkZCAtNjE2NDExMjEyOTkzOTEuMzE2NDIwNjQ3MTAyNjk5NjI3RSs3NjMgLTkxODk2NDY5ODYzLjQ2MTAwNjkwMzU5MDAwNDE4ODE4N0UrNDc0IC0+IC02LjE2NDExMjEyOTkzOTEzMTY0MjA2NDcxMDI2OTk2MjdFKzc3NiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjUwIGNvbXBhcmUgLTYxNjQxMTIxMjk5MzkxLjMxNjQyMDY0NzEwMjY5OTYyN0UrNzYzIC05MTg5NjQ2OTg2My40NjEwMDY5MDM1OTAwMDQxODgxODdFKzQ3NCAtPiAtMQorZGl2eDMyNTAgZGl2aWRlIC02MTY0MTEyMTI5OTM5MS4zMTY0MjA2NDcxMDI2OTk2MjdFKzc2MyAtOTE4OTY0Njk4NjMuNDYxMDA2OTAzNTkwMDA0MTg4MTg3RSs0NzQgLT4gNi43MDc2NzAyMDY1ODk3ODE5NjA0NzE2OTQ2ODUyNTgxRSsyOTEgSW5leGFjdCBSb3VuZGVkCitkdml4MzI1MCBkaXZpZGVpbnQgLTYxNjQxMTIxMjk5MzkxLjMxNjQyMDY0NzEwMjY5OTYyN0UrNzYzIC05MTg5NjQ2OTg2My40NjEwMDY5MDM1OTAwMDQxODgxODdFKzQ3NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMyNTAgbXVsdGlwbHkgLTYxNjQxMTIxMjk5MzkxLjMxNjQyMDY0NzEwMjY5OTYyN0UrNzYzIC05MTg5NjQ2OTg2My40NjEwMDY5MDM1OTAwMDQxODgxODdFKzQ3NCAtPiA1LjY2NDYwMTQ0NTgzOTQ1ODQ5MjE1Nzk0MTc1MDQ5MzlFKzEyNjEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI1MCBwb3dlciAtNjE2NDExMjEyOTkzOTEuMzE2NDIwNjQ3MTAyNjk5NjI3RSs3NjMgLTkgLT4gLTcuNzgzMzI2MTE3OTk3NTUzMjUwODc0ODE1MDcwODYwNUUtNjk5MiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjUwIHJlbWFpbmRlciAtNjE2NDExMjEyOTkzOTEuMzE2NDIwNjQ3MTAyNjk5NjI3RSs3NjMgLTkxODk2NDY5ODYzLjQ2MTAwNjkwMzU5MDAwNDE4ODE4N0UrNDc0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzI1MCBzdWJ0cmFjdCAtNjE2NDExMjEyOTkzOTEuMzE2NDIwNjQ3MTAyNjk5NjI3RSs3NjMgLTkxODk2NDY5ODYzLjQ2MTAwNjkwMzU5MDAwNDE4ODE4N0UrNDc0IC0+IC02LjE2NDExMjEyOTkzOTEzMTY0MjA2NDcxMDI2OTk2MjdFKzc3NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjUxIGFkZCA5NjY2ODQxOTgwMjc0OS41NTU3MzgwMTAyMzkwODc0NDlFLTgzOCAtMTk0OTg3MzIxMzEzNjU4MjQ5MjE2Mzk0NjcwNDQ5MjdFLTU0MiAtPiAtMS45NDk4NzMyMTMxMzY1ODI0OTIxNjM5NDY3MDQ0OTI3RS01MTEgSW5leGFjdCBSb3VuZGVkCitjb214MzI1MSBjb21wYXJlIDk2NjY4NDE5ODAyNzQ5LjU1NTczODAxMDIzOTA4NzQ0OUUtODM4IC0xOTQ5ODczMjEzMTM2NTgyNDkyMTYzOTQ2NzA0NDkyN0UtNTQyIC0+IDEKK2RpdngzMjUxIGRpdmlkZSA5NjY2ODQxOTgwMjc0OS41NTU3MzgwMTAyMzkwODc0NDlFLTgzOCAtMTk0OTg3MzIxMzEzNjU4MjQ5MjE2Mzk0NjcwNDQ5MjdFLTU0MiAtPiAtNC45NTc2NzcyMDQ0MTkyNTE0NzE1NDUzMjE1OTMzNzA0RS0zMTQgSW5leGFjdCBSb3VuZGVkCitkdml4MzI1MSBkaXZpZGVpbnQgOTY2Njg0MTk4MDI3NDkuNTU1NzM4MDEwMjM5MDg3NDQ5RS04MzggLTE5NDk4NzMyMTMxMzY1ODI0OTIxNjM5NDY3MDQ0OTI3RS01NDIgLT4gLTAKK211bHgzMjUxIG11bHRpcGx5IDk2NjY4NDE5ODAyNzQ5LjU1NTczODAxMDIzOTA4NzQ0OUUtODM4IC0xOTQ5ODczMjEzMTM2NTgyNDkyMTYzOTQ2NzA0NDkyN0UtNTQyIC0+IC0xLjg4NDkxMTYyMzI5NjIzMzE2MTcxNDA2NzYyNzQ2MTFFLTEzMzUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI1MSBwb3dlciA5NjY2ODQxOTgwMjc0OS41NTU3MzgwMTAyMzkwODc0NDlFLTgzOCAtMiAtPiAxLjA3MDExNTc2MjUyNjg4OTYzMjM2MTE2MzMzNTAwMDNFKzE2NDggSW5leGFjdCBSb3VuZGVkCityZW14MzI1MSByZW1haW5kZXIgOTY2Njg0MTk4MDI3NDkuNTU1NzM4MDEwMjM5MDg3NDQ5RS04MzggLTE5NDk4NzMyMTMxMzY1ODI0OTIxNjM5NDY3MDQ0OTI3RS01NDIgLT4gOS42NjY4NDE5ODAyNzQ5NTU1NzM4MDEwMjM5MDg3NDQ5RS04MjUKK3N1YngzMjUxIHN1YnRyYWN0IDk2NjY4NDE5ODAyNzQ5LjU1NTczODAxMDIzOTA4NzQ0OUUtODM4IC0xOTQ5ODczMjEzMTM2NTgyNDkyMTYzOTQ2NzA0NDkyN0UtNTQyIC0+IDEuOTQ5ODczMjEzMTM2NTgyNDkyMTYzOTQ2NzA0NDkyN0UtNTExIEluZXhhY3QgUm91bmRlZAorYWRkeDMyNTIgYWRkIC04NTM0NTQzOTExMTk3OTk1OTA2MDMxMjQ1NzE5NTE5RSsxMjQgMTY0ODcxMTcwNTAwMzEuNTk0ODg2NTQxNjUwODk3OTc0IC0+IC04LjUzNDU0MzkxMTE5Nzk5NTkwNjAzMTI0NTcxOTUxOTBFKzE1NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjUyIGNvbXBhcmUgLTg1MzQ1NDM5MTExOTc5OTU5MDYwMzEyNDU3MTk1MTlFKzEyNCAxNjQ4NzExNzA1MDAzMS41OTQ4ODY1NDE2NTA4OTc5NzQgLT4gLTEKK2RpdngzMjUyIGRpdmlkZSAtODUzNDU0MzkxMTE5Nzk5NTkwNjAzMTI0NTcxOTUxOUUrMTI0IDE2NDg3MTE3MDUwMDMxLjU5NDg4NjU0MTY1MDg5Nzk3NCAtPiAtNS4xNzY0OTI1ODIyMzgxMDYyMjg3OTU5NTIzMzcxMzE2RSsxNDEgSW5leGFjdCBSb3VuZGVkCitkdml4MzI1MiBkaXZpZGVpbnQgLTg1MzQ1NDM5MTExOTc5OTU5MDYwMzEyNDU3MTk1MTlFKzEyNCAxNjQ4NzExNzA1MDAzMS41OTQ4ODY1NDE2NTA4OTc5NzQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMjUyIG11bHRpcGx5IC04NTM0NTQzOTExMTk3OTk1OTA2MDMxMjQ1NzE5NTE5RSsxMjQgMTY0ODcxMTcwNTAwMzEuNTk0ODg2NTQxNjUwODk3OTc0IC0+IC0xLjQwNzEwMDI0NDMyNTU1ODEyMTc0NzE2OTg3MzEyNDBFKzE2OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjUyIHBvd2VyIC04NTM0NTQzOTExMTk3OTk1OTA2MDMxMjQ1NzE5NTE5RSsxMjQgMiAtPiA3LjI4Mzg0Mzk3NzIxNjY3ODU0Mjk0ODI5OTUwNDEzMzdFKzMwOSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjUyIHJlbWFpbmRlciAtODUzNDU0MzkxMTE5Nzk5NTkwNjAzMTI0NTcxOTUxOUUrMTI0IDE2NDg3MTE3MDUwMDMxLjU5NDg4NjU0MTY1MDg5Nzk3NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyNTIgc3VidHJhY3QgLTg1MzQ1NDM5MTExOTc5OTU5MDYwMzEyNDU3MTk1MTlFKzEyNCAxNjQ4NzExNzA1MDAzMS41OTQ4ODY1NDE2NTA4OTc5NzQgLT4gLTguNTM0NTQzOTExMTk3OTk1OTA2MDMxMjQ1NzE5NTE5MEUrMTU0IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNTMgYWRkIC02MjY2MzQwNDc3Ny4zNTI1MDg5Nzk1ODI4NDY5MzEwNTAgOS4yNTcwOTM4ODM3MjM5MTM0MDUyNTg5MTg0OTE3MTg2RSs5MTYgLT4gOS4yNTcwOTM4ODM3MjM5MTM0MDUyNTg5MTg0OTE3MTg2RSs5MTYgSW5leGFjdCBSb3VuZGVkCitjb214MzI1MyBjb21wYXJlIC02MjY2MzQwNDc3Ny4zNTI1MDg5Nzk1ODI4NDY5MzEwNTAgOS4yNTcwOTM4ODM3MjM5MTM0MDUyNTg5MTg0OTE3MTg2RSs5MTYgLT4gLTEKK2RpdngzMjUzIGRpdmlkZSAtNjI2NjM0MDQ3NzcuMzUyNTA4OTc5NTgyODQ2OTMxMDUwIDkuMjU3MDkzODgzNzIzOTEzNDA1MjU4OTE4NDkxNzE4NkUrOTE2IC0+IC02Ljc2OTIzMDc3MjAzODQxNDI1OTI1OTcxMjQ5NTY5NTFFLTkwNyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjUzIGRpdmlkZWludCAtNjI2NjM0MDQ3NzcuMzUyNTA4OTc5NTgyODQ2OTMxMDUwIDkuMjU3MDkzODgzNzIzOTEzNDA1MjU4OTE4NDkxNzE4NkUrOTE2IC0+IC0wCittdWx4MzI1MyBtdWx0aXBseSAtNjI2NjM0MDQ3NzcuMzUyNTA4OTc5NTgyODQ2OTMxMDUwIDkuMjU3MDkzODgzNzIzOTEzNDA1MjU4OTE4NDkxNzE4NkUrOTE2IC0+IC01LjgwMDgxMDIxMDk3NzQ1NzY2NTQ3MDkwMTgwMTI4NzZFKzkyNyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjUzIHBvd2VyIC02MjY2MzQwNDc3Ny4zNTI1MDg5Nzk1ODI4NDY5MzEwNTAgOSAtPiAtMS40ODk3OTI4ODE0MTMzMDU5NjE1NjcwNDYyNzUzODI1RSs5NyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjUzIHJlbWFpbmRlciAtNjI2NjM0MDQ3NzcuMzUyNTA4OTc5NTgyODQ2OTMxMDUwIDkuMjU3MDkzODgzNzIzOTEzNDA1MjU4OTE4NDkxNzE4NkUrOTE2IC0+IC02MjY2MzQwNDc3Ny4zNTI1MDg5Nzk1ODI4NDY5MzEwNTAKK3N1YngzMjUzIHN1YnRyYWN0IC02MjY2MzQwNDc3Ny4zNTI1MDg5Nzk1ODI4NDY5MzEwNTAgOS4yNTcwOTM4ODM3MjM5MTM0MDUyNTg5MTg0OTE3MTg2RSs5MTYgLT4gLTkuMjU3MDkzODgzNzIzOTEzNDA1MjU4OTE4NDkxNzE4NkUrOTE2IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNTQgYWRkIDEuNzQ0NjAxMjE0NDc0NTYwOTkyNzU0NTI5MzIwMTcyRS04MjcgLTE3LjM1MzY2OTUwNDI1MzQxOTQ4OTQ5NDAzMDY1MTUwN0UtNjMxIC0+IC0xLjczNTM2Njk1MDQyNTM0MTk0ODk0OTQwMzA2NTE1MDdFLTYzMCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjU0IGNvbXBhcmUgMS43NDQ2MDEyMTQ0NzQ1NjA5OTI3NTQ1MjkzMjAxNzJFLTgyNyAtMTcuMzUzNjY5NTA0MjUzNDE5NDg5NDk0MDMwNjUxNTA3RS02MzEgLT4gMQorZGl2eDMyNTQgZGl2aWRlIDEuNzQ0NjAxMjE0NDc0NTYwOTkyNzU0NTI5MzIwMTcyRS04MjcgLTE3LjM1MzY2OTUwNDI1MzQxOTQ4OTQ5NDAzMDY1MTUwN0UtNjMxIC0+IC0xLjAwNTMyMTIxNjk2MDQ1NjUyMzA0OTcxMTc5NjYwMDRFLTE5NyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjU0IGRpdmlkZWludCAxLjc0NDYwMTIxNDQ3NDU2MDk5Mjc1NDUyOTMyMDE3MkUtODI3IC0xNy4zNTM2Njk1MDQyNTM0MTk0ODk0OTQwMzA2NTE1MDdFLTYzMSAtPiAtMAorbXVseDMyNTQgbXVsdGlwbHkgMS43NDQ2MDEyMTQ0NzQ1NjA5OTI3NTQ1MjkzMjAxNzJFLTgyNyAtMTcuMzUzNjY5NTA0MjUzNDE5NDg5NDk0MDMwNjUxNTA3RS02MzEgLT4gLTMuMDI3NTIzMjg5MjcxMDY2ODQzMjg5NTA0OTU0NjIzM0UtMTQ1NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjU0IHBvd2VyIDEuNzQ0NjAxMjE0NDc0NTYwOTkyNzU0NTI5MzIwMTcyRS04MjcgLTIgLT4gMy4yODU1NDY4MDk5NjE1MjgyMzk0OTkyNTQyNTE1OTgwRSsxNjUzIEluZXhhY3QgUm91bmRlZAorcmVteDMyNTQgcmVtYWluZGVyIDEuNzQ0NjAxMjE0NDc0NTYwOTkyNzU0NTI5MzIwMTcyRS04MjcgLTE3LjM1MzY2OTUwNDI1MzQxOTQ4OTQ5NDAzMDY1MTUwN0UtNjMxIC0+IDEuNzQ0NjAxMjE0NDc0NTYwOTkyNzU0NTI5MzIwMTcyRS04MjcKK3N1YngzMjU0IHN1YnRyYWN0IDEuNzQ0NjAxMjE0NDc0NTYwOTkyNzU0NTI5MzIwMTcyRS04MjcgLTE3LjM1MzY2OTUwNDI1MzQxOTQ4OTQ5NDAzMDY1MTUwN0UtNjMxIC0+IDEuNzM1MzY2OTUwNDI1MzQxOTQ4OTQ5NDAzMDY1MTUwN0UtNjMwIEluZXhhY3QgUm91bmRlZAorYWRkeDMyNTUgYWRkIDAzNjcxOTE1NDkwMzY3MDIyMjQ4Mjc3MzQ4NTM0NzEgNDQxMDMyMDY2MjQxNTI2NjUzMzc2MzE0MzgzNzc0MkUrNzIxIC0+IDQuNDEwMzIwNjYyNDE1MjY2NTMzNzYzMTQzODM3NzQyMEUrNzUxIEluZXhhY3QgUm91bmRlZAorY29teDMyNTUgY29tcGFyZSAwMzY3MTkxNTQ5MDM2NzAyMjI0ODI3NzM0ODUzNDcxIDQ0MTAzMjA2NjI0MTUyNjY1MzM3NjMxNDM4Mzc3NDJFKzcyMSAtPiAtMQorZGl2eDMyNTUgZGl2aWRlIDAzNjcxOTE1NDkwMzY3MDIyMjQ4Mjc3MzQ4NTM0NzEgNDQxMDMyMDY2MjQxNTI2NjUzMzc2MzE0MzgzNzc0MkUrNzIxIC0+IDguMzI1NzMzNTk0OTcyMDYxOTA5Mzk2MzkxNzk0MjUyNUUtNzIzIEluZXhhY3QgUm91bmRlZAorZHZpeDMyNTUgZGl2aWRlaW50IDAzNjcxOTE1NDkwMzY3MDIyMjQ4Mjc3MzQ4NTM0NzEgNDQxMDMyMDY2MjQxNTI2NjUzMzc2MzE0MzgzNzc0MkUrNzIxIC0+IDAKK211bHgzMjU1IG11bHRpcGx5IDAzNjcxOTE1NDkwMzY3MDIyMjQ4Mjc3MzQ4NTM0NzEgNDQxMDMyMDY2MjQxNTI2NjUzMzc2MzE0MzgzNzc0MkUrNzIxIC0+IDEuNjE5NDMyNDc1NzgwODM2MzgwMjk0NzE5MjA1NDk2NkUrNzgxIEluZXhhY3QgUm91bmRlZAorcG93eDMyNTUgcG93ZXIgMDM2NzE5MTU0OTAzNjcwMjIyNDgyNzczNDg1MzQ3MSA0IC0+IDEuODE3OTAzMDExOTM1NDMxODE4MjQ5MzcwMzI2OTI1OEUrMTE4IEluZXhhY3QgUm91bmRlZAorcmVteDMyNTUgcmVtYWluZGVyIDAzNjcxOTE1NDkwMzY3MDIyMjQ4Mjc3MzQ4NTM0NzEgNDQxMDMyMDY2MjQxNTI2NjUzMzc2MzE0MzgzNzc0MkUrNzIxIC0+IDM2NzE5MTU0OTAzNjcwMjIyNDgyNzczNDg1MzQ3MQorc3VieDMyNTUgc3VidHJhY3QgMDM2NzE5MTU0OTAzNjcwMjIyNDgyNzczNDg1MzQ3MSA0NDEwMzIwNjYyNDE1MjY2NTMzNzYzMTQzODM3NzQyRSs3MjEgLT4gLTQuNDEwMzIwNjYyNDE1MjY2NTMzNzYzMTQzODM3NzQyMEUrNzUxIEluZXhhY3QgUm91bmRlZAorYWRkeDMyNTYgYWRkIDA5NzcwNDExNi40NDkyNTY2NzIxOTY1NzEwMzY1MDczIC05NjczNi40MDA5Mzk4MDk0MzM1NTYwNjc1MDQyODkxNDUgLT4gOTc2MDczODAuMDQ4MzE2ODYyNzYzMDE0OTY5MDAzMDExIEluZXhhY3QgUm91bmRlZAorY29teDMyNTYgY29tcGFyZSAwOTc3MDQxMTYuNDQ5MjU2NjcyMTk2NTcxMDM2NTA3MyAtOTY3MzYuNDAwOTM5ODA5NDMzNTU2MDY3NTA0Mjg5MTQ1IC0+IDEKK2RpdngzMjU2IGRpdmlkZSAwOTc3MDQxMTYuNDQ5MjU2NjcyMTk2NTcxMDM2NTA3MyAtOTY3MzYuNDAwOTM5ODA5NDMzNTU2MDY3NTA0Mjg5MTQ1IC0+IC0xMDEwLjAwMzYzMzU4NjE3NTcyNTIzMjQ1OTI1NzE4NzQgSW5leGFjdCBSb3VuZGVkCitkdml4MzI1NiBkaXZpZGVpbnQgMDk3NzA0MTE2LjQ0OTI1NjY3MjE5NjU3MTAzNjUwNzMgLTk2NzM2LjQwMDkzOTgwOTQzMzU1NjA2NzUwNDI4OTE0NSAtPiAtMTAxMAorbXVseDMyNTYgbXVsdGlwbHkgMDk3NzA0MTE2LjQ0OTI1NjY3MjE5NjU3MTAzNjUwNzMgLTk2NzM2LjQwMDkzOTgwOTQzMzU1NjA2NzUwNDI4OTE0NSAtPiAtOTQ1MTU0NDU4MjMwNS4xMjM0ODA1NDgzNDQ5NzcyMjUyIEluZXhhY3QgUm91bmRlZAorcG93eDMyNTYgcG93ZXIgMDk3NzA0MTE2LjQ0OTI1NjY3MjE5NjU3MTAzNjUwNzMgLTk2NzM2IC0+IDBFLTEwMDMwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMjU2IHJlbWFpbmRlciAwOTc3MDQxMTYuNDQ5MjU2NjcyMTk2NTcxMDM2NTA3MyAtOTY3MzYuNDAwOTM5ODA5NDMzNTU2MDY3NTA0Mjg5MTQ1IC0+IDM1MS41MDAwNDkxNDQzMDQ5NDI4NTcxNzUyNjM1NTAKK3N1YngzMjU2IHN1YnRyYWN0IDA5NzcwNDExNi40NDkyNTY2NzIxOTY1NzEwMzY1MDczIC05NjczNi40MDA5Mzk4MDk0MzM1NTYwNjc1MDQyODkxNDUgLT4gOTc4MDA4NTIuODUwMTk2NDgxNjMwMTI3MTA0MDExNTg5IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNTcgYWRkIDE5NTMzMjk4LjE0NzE1MDE1ODkzMTk1ODczMzgwNzg3OCA4MC4xNDE2NjgzMzgzNTA3MDg0NzY2MzczNzc2NDcwMjVFLTY0MSAtPiAxOTUzMzI5OC4xNDcxNTAxNTg5MzE5NTg3MzM4MDc4NzggSW5leGFjdCBSb3VuZGVkCitjb214MzI1NyBjb21wYXJlIDE5NTMzMjk4LjE0NzE1MDE1ODkzMTk1ODczMzgwNzg3OCA4MC4xNDE2NjgzMzgzNTA3MDg0NzY2MzczNzc2NDcwMjVFLTY0MSAtPiAxCitkaXZ4MzI1NyBkaXZpZGUgMTk1MzMyOTguMTQ3MTUwMTU4OTMxOTU4NzMzODA3ODc4IDgwLjE0MTY2ODMzODM1MDcwODQ3NjYzNzM3NzY0NzAyNUUtNjQxIC0+IDIuNDM3MzQ2MDgzNzcyODQ4NTM5NTY3Mjg4MjM5NTE3MUUrNjQ2IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNTcgZGl2aWRlaW50IDE5NTMzMjk4LjE0NzE1MDE1ODkzMTk1ODczMzgwNzg3OCA4MC4xNDE2NjgzMzgzNTA3MDg0NzY2MzczNzc2NDcwMjVFLTY0MSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMyNTcgbXVsdGlwbHkgMTk1MzMyOTguMTQ3MTUwMTU4OTMxOTU4NzMzODA3ODc4IDgwLjE0MTY2ODMzODM1MDcwODQ3NjYzNzM3NzY0NzAyNUUtNjQxIC0+IDEuNTY1NDMxMTAxNjYzMDI4NDUwMjQ1OTE1ODk3MTI3MkUtNjMyIEluZXhhY3QgUm91bmRlZAorcG93eDMyNTcgcG93ZXIgMTk1MzMyOTguMTQ3MTUwMTU4OTMxOTU4NzMzODA3ODc4IDggLT4gMi4xMTkzNTk1MDQ3NjM4MjMwNDI3NTMwMDYzNjU0NjEzRSs1OCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjU3IHJlbWFpbmRlciAxOTUzMzI5OC4xNDcxNTAxNTg5MzE5NTg3MzM4MDc4NzggODAuMTQxNjY4MzM4MzUwNzA4NDc2NjM3Mzc3NjQ3MDI1RS02NDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjU3IHN1YnRyYWN0IDE5NTMzMjk4LjE0NzE1MDE1ODkzMTk1ODczMzgwNzg3OCA4MC4xNDE2NjgzMzgzNTA3MDg0NzY2MzczNzc2NDcwMjVFLTY0MSAtPiAxOTUzMzI5OC4xNDcxNTAxNTg5MzE5NTg3MzM4MDc4NzggSW5leGFjdCBSb3VuZGVkCithZGR4MzI1OCBhZGQgLTIzNzY1MDAzMjIxMjIwMTc3NDMwNzk3MDI4OTk3Mzc4IC0xNTIwMzM2OTU2OS4zNzM0MTE1MDYzNzkwOTY4NzEyMjRFLTk0NSAtPiAtMjM3NjUwMDMyMjEyMjAxNzc0MzA3OTcwMjg5OTczNzggSW5leGFjdCBSb3VuZGVkCitjb214MzI1OCBjb21wYXJlIC0yMzc2NTAwMzIyMTIyMDE3NzQzMDc5NzAyODk5NzM3OCAtMTUyMDMzNjk1NjkuMzczNDExNTA2Mzc5MDk2ODcxMjI0RS05NDUgLT4gLTEKK2RpdngzMjU4IGRpdmlkZSAtMjM3NjUwMDMyMjEyMjAxNzc0MzA3OTcwMjg5OTczNzggLTE1MjAzMzY5NTY5LjM3MzQxMTUwNjM3OTA5Njg3MTIyNEUtOTQ1IC0+IDEuNTYzMTQwNTMzNjAyMDkzMDA2NDgyNDEzNTY2OTU0MUUrOTY2IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNTggZGl2aWRlaW50IC0yMzc2NTAwMzIyMTIyMDE3NzQzMDc5NzAyODk5NzM3OCAtMTUyMDMzNjk1NjkuMzczNDExNTA2Mzc5MDk2ODcxMjI0RS05NDUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMjU4IG11bHRpcGx5IC0yMzc2NTAwMzIyMTIyMDE3NzQzMDc5NzAyODk5NzM3OCAtMTUyMDMzNjk1NjkuMzczNDExNTA2Mzc5MDk2ODcxMjI0RS05NDUgLT4gMy42MTMwODEyNjc4OTU1OTk0NjI1MjEwMDA3MDA1MjE2RS05MDQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI1OCBwb3dlciAtMjM3NjUwMDMyMjEyMjAxNzc0MzA3OTcwMjg5OTczNzggLTIgLT4gMS43NzA2MTU0MzE4NDgzNDgxMTkwMzY0OTc5MjA5NDM2RS02MyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjU4IHJlbWFpbmRlciAtMjM3NjUwMDMyMjEyMjAxNzc0MzA3OTcwMjg5OTczNzggLTE1MjAzMzY5NTY5LjM3MzQxMTUwNjM3OTA5Njg3MTIyNEUtOTQ1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzI1OCBzdWJ0cmFjdCAtMjM3NjUwMDMyMjEyMjAxNzc0MzA3OTcwMjg5OTczNzggLTE1MjAzMzY5NTY5LjM3MzQxMTUwNjM3OTA5Njg3MTIyNEUtOTQ1IC0+IC0yMzc2NTAwMzIyMTIyMDE3NzQzMDc5NzAyODk5NzM3OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjU5IGFkZCAxMjkyNTUuNDE5Mzc5MzI0MzMzNTkxOTMzMzg5MTA1NTJFKzkzMiAtMjgxMjUzOTUzLjM4OTkwMzgyNzk5NTA4ODczNTYwMzIwIC0+IDEuMjkyNTU0MTkzNzkzMjQzMzM1OTE5MzMzODkxMDU1MkUrOTM3IEluZXhhY3QgUm91bmRlZAorY29teDMyNTkgY29tcGFyZSAxMjkyNTUuNDE5Mzc5MzI0MzMzNTkxOTMzMzg5MTA1NTJFKzkzMiAtMjgxMjUzOTUzLjM4OTkwMzgyNzk5NTA4ODczNTYwMzIwIC0+IDEKK2RpdngzMjU5IGRpdmlkZSAxMjkyNTUuNDE5Mzc5MzI0MzMzNTkxOTMzMzg5MTA1NTJFKzkzMiAtMjgxMjUzOTUzLjM4OTkwMzgyNzk5NTA4ODczNTYwMzIwIC0+IC00LjU5NTY4MzY0NTM4MjgyMTMwNTAyMjMyNjA1NTEwNjRFKzkyOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjU5IGRpdmlkZWludCAxMjkyNTUuNDE5Mzc5MzI0MzMzNTkxOTMzMzg5MTA1NTJFKzkzMiAtMjgxMjUzOTUzLjM4OTkwMzgyNzk5NTA4ODczNTYwMzIwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzI1OSBtdWx0aXBseSAxMjkyNTUuNDE5Mzc5MzI0MzMzNTkxOTMzMzg5MTA1NTJFKzkzMiAtMjgxMjUzOTUzLjM4OTkwMzgyNzk5NTA4ODczNTYwMzIwIC0+IC0zLjYzNTM1OTc2OTc1MDQ5NTgwOTY5MzEwODg3ODAzNjdFKzk0NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjU5IHBvd2VyIDEyOTI1NS40MTkzNzkzMjQzMzM1OTE5MzMzODkxMDU1MkUrOTMyIC0yODEyNTM5NTMgLT4gMEUtMTAwMzAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMyNTkgcmVtYWluZGVyIDEyOTI1NS40MTkzNzkzMjQzMzM1OTE5MzMzODkxMDU1MkUrOTMyIC0yODEyNTM5NTMuMzg5OTAzODI3OTk1MDg4NzM1NjAzMjAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjU5IHN1YnRyYWN0IDEyOTI1NS40MTkzNzkzMjQzMzM1OTE5MzMzODkxMDU1MkUrOTMyIC0yODEyNTM5NTMuMzg5OTAzODI3OTk1MDg4NzM1NjAzMjAgLT4gMS4yOTI1NTQxOTM3OTMyNDMzMzU5MTkzMzM4OTEwNTUyRSs5MzcgSW5leGFjdCBSb3VuZGVkCithZGR4MzI2MCBhZGQgLTg2ODYzLjI3NjI0OTQ2NjAwODI4OTIxNDc2Mjk4MDgzOCA1MzEuNTA2MDI2NTI3MzIwODgyMDgzOTc2NTU0ODQ0NzYgLT4gLTg2MzMxLjc3MDIyMjkzODY4NzQwNzEzMDc4NjQyNTk5MyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjYwIGNvbXBhcmUgLTg2ODYzLjI3NjI0OTQ2NjAwODI4OTIxNDc2Mjk4MDgzOCA1MzEuNTA2MDI2NTI3MzIwODgyMDgzOTc2NTU0ODQ0NzYgLT4gLTEKK2RpdngzMjYwIGRpdmlkZSAtODY4NjMuMjc2MjQ5NDY2MDA4Mjg5MjE0NzYyOTgwODM4IDUzMS41MDYwMjY1MjczMjA4ODIwODM5NzY1NTQ4NDQ3NiAtPiAtMTYzLjQyODU4MjAxODE1ODkxNDA4NDc1OTAyMjI5NjQ5IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNjAgZGl2aWRlaW50IC04Njg2My4yNzYyNDk0NjYwMDgyODkyMTQ3NjI5ODA4MzggNTMxLjUwNjAyNjUyNzMyMDg4MjA4Mzk3NjU1NDg0NDc2IC0+IC0xNjMKK211bHgzMjYwIG11bHRpcGx5IC04Njg2My4yNzYyNDk0NjYwMDgyODkyMTQ3NjI5ODA4MzggNTMxLjUwNjAyNjUyNzMyMDg4MjA4Mzk3NjU1NDg0NDc2IC0+IC00NjE2ODM1NC44MTA0OTg2ODIxNDA0NTYxNDM1MzQ1MjQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI2MCBwb3dlciAtODY4NjMuMjc2MjQ5NDY2MDA4Mjg5MjE0NzYyOTgwODM4IDUzMiAtPiAyLjg4OTc1NzkxODQxNzM4Mzk1MTk4NTk3MTAyMTc1MTBFKzI2MjcgSW5leGFjdCBSb3VuZGVkCityZW14MzI2MCByZW1haW5kZXIgLTg2ODYzLjI3NjI0OTQ2NjAwODI4OTIxNDc2Mjk4MDgzOCA1MzEuNTA2MDI2NTI3MzIwODgyMDgzOTc2NTU0ODQ0NzYgLT4gLTIyNy43OTM5MjU1MTI3MDQ1MDk1MjY1ODQ1NDExNDIxMgorc3VieDMyNjAgc3VidHJhY3QgLTg2ODYzLjI3NjI0OTQ2NjAwODI4OTIxNDc2Mjk4MDgzOCA1MzEuNTA2MDI2NTI3MzIwODgyMDgzOTc2NTU0ODQ0NzYgLT4gLTg3Mzk0Ljc4MjI3NTk5MzMyOTE3MTI5ODczOTUzNTY4MyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjYxIGFkZCAtNDA3MDcuMTY5MDA2NzcxMTExODU1NTczNTI0MTU3MDgzIC02ODc5NTUyMTQyMTMyMTg1MzMzMzI3NDQxMTgyNzc0OSAtPiAtNjg3OTU1MjE0MjEzMjE4NTMzMzMyNzQ0MTE4Njg0NTYgSW5leGFjdCBSb3VuZGVkCitjb214MzI2MSBjb21wYXJlIC00MDcwNy4xNjkwMDY3NzExMTE4NTU1NzM1MjQxNTcwODMgLTY4Nzk1NTIxNDIxMzIxODUzMzMzMjc0NDExODI3NzQ5IC0+IDEKK2RpdngzMjYxIGRpdmlkZSAtNDA3MDcuMTY5MDA2NzcxMTExODU1NTczNTI0MTU3MDgzIC02ODc5NTUyMTQyMTMyMTg1MzMzMzI3NDQxMTgyNzc0OSAtPiA1LjkxNzEyNDg2MDEzMDAyMzY2OTQzODYxODU1MTMxMzlFLTI4IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNjEgZGl2aWRlaW50IC00MDcwNy4xNjkwMDY3NzExMTE4NTU1NzM1MjQxNTcwODMgLTY4Nzk1NTIxNDIxMzIxODUzMzMzMjc0NDExODI3NzQ5IC0+IDAKK211bHgzMjYxIG11bHRpcGx5IC00MDcwNy4xNjkwMDY3NzExMTE4NTU1NzM1MjQxNTcwODMgLTY4Nzk1NTIxNDIxMzIxODUzMzMzMjc0NDExODI3NzQ5IC0+IDIuODAwNDcwOTE3NDA2NjkxMDU3NzM3MDg5NTQ5OTU3NUUrMzYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI2MSBwb3dlciAtNDA3MDcuMTY5MDA2NzcxMTExODU1NTczNTI0MTU3MDgzIC03IC0+IC01LjM5ODg4MDI5MTU4OTc1OTU3MjI0NDAzOTI4ODQwNTFFLTMzIEluZXhhY3QgUm91bmRlZAorcmVteDMyNjEgcmVtYWluZGVyIC00MDcwNy4xNjkwMDY3NzExMTE4NTU1NzM1MjQxNTcwODMgLTY4Nzk1NTIxNDIxMzIxODUzMzMzMjc0NDExODI3NzQ5IC0+IC00MDcwNy4xNjkwMDY3NzExMTE4NTU1NzM1MjQxNTcwODMKK3N1YngzMjYxIHN1YnRyYWN0IC00MDcwNy4xNjkwMDY3NzExMTE4NTU1NzM1MjQxNTcwODMgLTY4Nzk1NTIxNDIxMzIxODUzMzMzMjc0NDExODI3NzQ5IC0+IDY4Nzk1NTIxNDIxMzIxODUzMzMzMjc0NDExNzg3MDQyIEluZXhhY3QgUm91bmRlZAorYWRkeDMyNjIgYWRkIC05MDgzODc1MjU2ODY3My43Mjg2MzA0OTQ2NTg3NzgwMDNFKzA5NSAtNzM4LjAxMzcwMzAxMjE3NjA2NTc3NTMzMTA3OTgxNDMxIC0+IC05LjA4Mzg3NTI1Njg2NzM3Mjg2MzA0OTQ2NTg3NzgwMDNFKzEwOCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjYyIGNvbXBhcmUgLTkwODM4NzUyNTY4NjczLjcyODYzMDQ5NDY1ODc3ODAwM0UrMDk1IC03MzguMDEzNzAzMDEyMTc2MDY1Nzc1MzMxMDc5ODE0MzEgLT4gLTEKK2RpdngzMjYyIGRpdmlkZSAtOTA4Mzg3NTI1Njg2NzMuNzI4NjMwNDk0NjU4Nzc4MDAzRSswOTUgLTczOC4wMTM3MDMwMTIxNzYwNjU3NzUzMzEwNzk4MTQzMSAtPiAxLjIzMDg1NDU1MTg1ODg0MzA4NzUyNjg1NTM4NTE0MjRFKzEwNiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjYyIGRpdmlkZWludCAtOTA4Mzg3NTI1Njg2NzMuNzI4NjMwNDk0NjU4Nzc4MDAzRSswOTUgLTczOC4wMTM3MDMwMTIxNzYwNjU3NzUzMzEwNzk4MTQzMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMyNjIgbXVsdGlwbHkgLTkwODM4NzUyNTY4NjczLjcyODYzMDQ5NDY1ODc3ODAwM0UrMDk1IC03MzguMDEzNzAzMDEyMTc2MDY1Nzc1MzMxMDc5ODE0MzEgLT4gNi43MDQwMjQ0MTYwMjEzNzE4ODkxNjMzNjc4MjQ4MTI3RSsxMTEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI2MiBwb3dlciAtOTA4Mzg3NTI1Njg2NzMuNzI4NjMwNDk0NjU4Nzc4MDAzRSswOTUgLTczOCAtPiAwRS0xMDAzMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzI2MiByZW1haW5kZXIgLTkwODM4NzUyNTY4NjczLjcyODYzMDQ5NDY1ODc3ODAwM0UrMDk1IC03MzguMDEzNzAzMDEyMTc2MDY1Nzc1MzMxMDc5ODE0MzEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjYyIHN1YnRyYWN0IC05MDgzODc1MjU2ODY3My43Mjg2MzA0OTQ2NTg3NzgwMDNFKzA5NSAtNzM4LjAxMzcwMzAxMjE3NjA2NTc3NTMzMTA3OTgxNDMxIC0+IC05LjA4Mzg3NTI1Njg2NzM3Mjg2MzA0OTQ2NTg3NzgwMDNFKzEwOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjYzIGFkZCAtNDI0NTM2MDk2NzU5My45MjA2NzcxNTU1ODM5NzE4MTU4RS02ODIgLTMuMTE5NjA2MjM5MDQyNTMwMjA3MTAzMjAzNTA4MDU3IC0+IC0zLjExOTYwNjIzOTA0MjUzMDIwNzEwMzIwMzUwODA1NzAgSW5leGFjdCBSb3VuZGVkCitjb214MzI2MyBjb21wYXJlIC00MjQ1MzYwOTY3NTkzLjkyMDY3NzE1NTU4Mzk3MTgxNThFLTY4MiAtMy4xMTk2MDYyMzkwNDI1MzAyMDcxMDMyMDM1MDgwNTcgLT4gMQorZGl2eDMyNjMgZGl2aWRlIC00MjQ1MzYwOTY3NTkzLjkyMDY3NzE1NTU4Mzk3MTgxNThFLTY4MiAtMy4xMTk2MDYyMzkwNDI1MzAyMDcxMDMyMDM1MDgwNTcgLT4gMS4zNjA4NjQzNjYyOTgwMDY2MzU2NDM3MjM2MDgxOTY5RS02NzAgSW5leGFjdCBSb3VuZGVkCitkdml4MzI2MyBkaXZpZGVpbnQgLTQyNDUzNjA5Njc1OTMuOTIwNjc3MTU1NTgzOTcxODE1OEUtNjgyIC0zLjExOTYwNjIzOTA0MjUzMDIwNzEwMzIwMzUwODA1NyAtPiAwCittdWx4MzI2MyBtdWx0aXBseSAtNDI0NTM2MDk2NzU5My45MjA2NzcxNTU1ODM5NzE4MTU4RS02ODIgLTMuMTE5NjA2MjM5MDQyNTMwMjA3MTAzMjAzNTA4MDU3IC0+IDEuMzI0Mzg1NDU2MTQ5MzYyNzg0NDEwNTI5MDQxNTMzMEUtNjY5IEluZXhhY3QgUm91bmRlZAorcG93eDMyNjMgcG93ZXIgLTQyNDUzNjA5Njc1OTMuOTIwNjc3MTU1NTgzOTcxODE1OEUtNjgyIC0zIC0+IC0xLjMwNjk0MTQ1MDQ5MzMyNTMyODgwNDI4MjA0Mjk4OTRFKzIwMDggSW5leGFjdCBSb3VuZGVkCityZW14MzI2MyByZW1haW5kZXIgLTQyNDUzNjA5Njc1OTMuOTIwNjc3MTU1NTgzOTcxODE1OEUtNjgyIC0zLjExOTYwNjIzOTA0MjUzMDIwNzEwMzIwMzUwODA1NyAtPiAtNC4yNDUzNjA5Njc1OTM5MjA2NzcxNTU1ODM5NzE4MTU4RS02NzAKK3N1YngzMjYzIHN1YnRyYWN0IC00MjQ1MzYwOTY3NTkzLjkyMDY3NzE1NTU4Mzk3MTgxNThFLTY4MiAtMy4xMTk2MDYyMzkwNDI1MzAyMDcxMDMyMDM1MDgwNTcgLT4gMy4xMTk2MDYyMzkwNDI1MzAyMDcxMDMyMDM1MDgwNTcwIEluZXhhY3QgUm91bmRlZAorYWRkeDMyNjQgYWRkIC0zNDIyMTQ1NDA1Nzc0LjA4MDAyMTMwMDA1NDc2MTIyNDBFLTAyMyAtNjA4MTAuOTY0NjU2NDA5NjUwODM5MDExMzIxNzA2MzEwIC0+IC02MDgxMC45NjQ2NTY0MDk2ODUwNjA0NjUzNzk0NDcxMTAgSW5leGFjdCBSb3VuZGVkCitjb214MzI2NCBjb21wYXJlIC0zNDIyMTQ1NDA1Nzc0LjA4MDAyMTMwMDA1NDc2MTIyNDBFLTAyMyAtNjA4MTAuOTY0NjU2NDA5NjUwODM5MDExMzIxNzA2MzEwIC0+IDEKK2RpdngzMjY0IGRpdmlkZSAtMzQyMjE0NTQwNTc3NC4wODAwMjEzMDAwNTQ3NjEyMjQwRS0wMjMgLTYwODEwLjk2NDY1NjQwOTY1MDgzOTAxMTMyMTcwNjMxMCAtPiA1LjYyNzUxMzc2MzUyODc4ODI4NzU5MTQxMjQ3NDI2NTBFLTE2IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNjQgZGl2aWRlaW50IC0zNDIyMTQ1NDA1Nzc0LjA4MDAyMTMwMDA1NDc2MTIyNDBFLTAyMyAtNjA4MTAuOTY0NjU2NDA5NjUwODM5MDExMzIxNzA2MzEwIC0+IDAKK211bHgzMjY0IG11bHRpcGx5IC0zNDIyMTQ1NDA1Nzc0LjA4MDAyMTMwMDA1NDc2MTIyNDBFLTAyMyAtNjA4MTAuOTY0NjU2NDA5NjUwODM5MDExMzIxNzA2MzEwIC0+IDAuMDAwMDAyMDgxMDM5NjMzMTk2MjIyNDMyMzI4ODc0NDkxMDYwNyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjY0IHBvd2VyIC0zNDIyMTQ1NDA1Nzc0LjA4MDAyMTMwMDA1NDc2MTIyNDBFLTAyMyAtNjA4MTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMyNjQgcmVtYWluZGVyIC0zNDIyMTQ1NDA1Nzc0LjA4MDAyMTMwMDA1NDc2MTIyNDBFLTAyMyAtNjA4MTAuOTY0NjU2NDA5NjUwODM5MDExMzIxNzA2MzEwIC0+IC0zLjQyMjE0NTQwNTc3NDA4MDAyMTMwMDA1NDc2MTIyNDBFLTExCitzdWJ4MzI2NCBzdWJ0cmFjdCAtMzQyMjE0NTQwNTc3NC4wODAwMjEzMDAwNTQ3NjEyMjQwRS0wMjMgLTYwODEwLjk2NDY1NjQwOTY1MDgzOTAxMTMyMTcwNjMxMCAtPiA2MDgxMC45NjQ2NTY0MDk2MTY2MTc1NTcyNjM5NjU1MTAgSW5leGFjdCBSb3VuZGVkCithZGR4MzI2NSBhZGQgLTI0NTIxODExLjA3NjQ5NDg1Nzk2NTk4Mzg3NjI3NDc4RS02NjEgLTk0ODYwODQ2MTMzNDA0ODE1NDEwODE2MjM0MDAwNjk0IC0+IC05NDg2MDg0NjEzMzQwNDgxNTQxMDgxNjIzNDAwMDY5NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjY1IGNvbXBhcmUgLTI0NTIxODExLjA3NjQ5NDg1Nzk2NTk4Mzg3NjI3NDc4RS02NjEgLTk0ODYwODQ2MTMzNDA0ODE1NDEwODE2MjM0MDAwNjk0IC0+IDEKK2RpdngzMjY1IGRpdmlkZSAtMjQ1MjE4MTEuMDc2NDk0ODU3OTY1OTgzODc2Mjc0NzhFLTY2MSAtOTQ4NjA4NDYxMzM0MDQ4MTU0MTA4MTYyMzQwMDA2OTQgLT4gMi41ODUwMjk3NjQ3NTc2NjU3ODE5NDgzOTg4ODQ1OTA0RS02ODYgSW5leGFjdCBSb3VuZGVkCitkdml4MzI2NSBkaXZpZGVpbnQgLTI0NTIxODExLjA3NjQ5NDg1Nzk2NTk4Mzg3NjI3NDc4RS02NjEgLTk0ODYwODQ2MTMzNDA0ODE1NDEwODE2MjM0MDAwNjk0IC0+IDAKK211bHgzMjY1IG11bHRpcGx5IC0yNDUyMTgxMS4wNzY0OTQ4NTc5NjU5ODM4NzYyNzQ3OEUtNjYxIC05NDg2MDg0NjEzMzQwNDgxNTQxMDgxNjIzNDAwMDY5NCAtPiAyLjMyNjE1OTc0NzQzOTgwMDYyMTUwMTc3NTE3ODUxMDRFLTYyMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjY1IHBvd2VyIC0yNDUyMTgxMS4wNzY0OTQ4NTc5NjU5ODM4NzYyNzQ3OEUtNjYxIC05IC0+IC0zLjExOTA4NDM1NTk5NDkxODQ2MTg1OTAyNjQyNDY1ODZFKzU4ODIgSW5leGFjdCBSb3VuZGVkCityZW14MzI2NSByZW1haW5kZXIgLTI0NTIxODExLjA3NjQ5NDg1Nzk2NTk4Mzg3NjI3NDc4RS02NjEgLTk0ODYwODQ2MTMzNDA0ODE1NDEwODE2MjM0MDAwNjk0IC0+IC0yLjQ1MjE4MTEwNzY0OTQ4NTc5NjU5ODM4NzYyNzQ3OEUtNjU0CitzdWJ4MzI2NSBzdWJ0cmFjdCAtMjQ1MjE4MTEuMDc2NDk0ODU3OTY1OTgzODc2Mjc0NzhFLTY2MSAtOTQ4NjA4NDYxMzM0MDQ4MTU0MTA4MTYyMzQwMDA2OTQgLT4gOTQ4NjA4NDYxMzM0MDQ4MTU0MTA4MTYyMzQwMDA2OTQgSW5leGFjdCBSb3VuZGVkCithZGR4MzI2NiBhZGQgLTUwNDI1Mjk5Mzc0OTguODk0NDQ5MjI0ODUzODk1MTQzOCAzODkxOTA0Njc0LjQ1NDkxNzA5Njg4MDcxNDU2MTI1NDkgLT4gLTUwMzg2MzgwMzI4MjQuNDM5NTMyMTI3OTczMTgwNTgyNSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjY2IGNvbXBhcmUgLTUwNDI1Mjk5Mzc0OTguODk0NDQ5MjI0ODUzODk1MTQzOCAzODkxOTA0Njc0LjQ1NDkxNzA5Njg4MDcxNDU2MTI1NDkgLT4gLTEKK2RpdngzMjY2IGRpdmlkZSAtNTA0MjUyOTkzNzQ5OC44OTQ0NDkyMjQ4NTM4OTUxNDM4IDM4OTE5MDQ2NzQuNDU0OTE3MDk2ODgwNzE0NTYxMjU0OSAtPiAtMTI5NS42NDU3OTc5NTQ5ODk0MzUxMzc4MTI3NDEzMjgzIEluZXhhY3QgUm91bmRlZAorZHZpeDMyNjYgZGl2aWRlaW50IC01MDQyNTI5OTM3NDk4Ljg5NDQ0OTIyNDg1Mzg5NTE0MzggMzg5MTkwNDY3NC40NTQ5MTcwOTY4ODA3MTQ1NjEyNTQ5IC0+IC0xMjk1CittdWx4MzI2NiBtdWx0aXBseSAtNTA0MjUyOTkzNzQ5OC44OTQ0NDkyMjQ4NTM4OTUxNDM4IDM4OTE5MDQ2NzQuNDU0OTE3MDk2ODgwNzE0NTYxMjU0OSAtPiAtMTk2MjUwNDU4MzQ4MzA4MDgyNTY4NzEuOTUyNjU5MDQ4IEluZXhhY3QgUm91bmRlZAorcG93eDMyNjYgcG93ZXIgLTUwNDI1Mjk5Mzc0OTguODk0NDQ5MjI0ODUzODk1MTQzOCA0IC0+IDYuNDY1Mzc4Mjk5MTgwMDAwOTQ5MjU4MDE4MDk2MDgzOUUrNTAgSW5leGFjdCBSb3VuZGVkCityZW14MzI2NiByZW1haW5kZXIgLTUwNDI1Mjk5Mzc0OTguODk0NDQ5MjI0ODUzODk1MTQzOCAzODkxOTA0Njc0LjQ1NDkxNzA5Njg4MDcxNDU2MTI1NDkgLT4gLTI1MTMzODQwNzkuNzc2ODA4NzY0MzI4NTM4MzE4NzA0NQorc3VieDMyNjYgc3VidHJhY3QgLTUwNDI1Mjk5Mzc0OTguODk0NDQ5MjI0ODUzODk1MTQzOCAzODkxOTA0Njc0LjQ1NDkxNzA5Njg4MDcxNDU2MTI1NDkgLT4gLTUwNDY0MjE4NDIxNzMuMzQ5MzY2MzIxNzM0NjA5NzA1MSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjY3IGFkZCAtNTM1ODI0MTYzLjU0NTMxNzQ3NjQ2MjkzNjkzODY4NjUxRS02NjUgMjczMjk4OC41ODkxMzYzNjM5MzI1MDA4MjA2MDk5NzEyIC0+IDI3MzI5ODguNTg5MTM2MzYzOTMyNTAwODIwNjA5OTcxMiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjY3IGNvbXBhcmUgLTUzNTgyNDE2My41NDUzMTc0NzY0NjI5MzY5Mzg2ODY1MUUtNjY1IDI3MzI5ODguNTg5MTM2MzYzOTMyNTAwODIwNjA5OTcxMiAtPiAtMQorZGl2eDMyNjcgZGl2aWRlIC01MzU4MjQxNjMuNTQ1MzE3NDc2NDYyOTM2OTM4Njg2NTFFLTY2NSAyNzMyOTg4LjU4OTEzNjM2MzkzMjUwMDgyMDYwOTk3MTIgLT4gLTEuOTYwNTc5NTg1NTY4Nzc5MTI0NjYxMTY4MzMyODM0NkUtNjYzIEluZXhhY3QgUm91bmRlZAorZHZpeDMyNjcgZGl2aWRlaW50IC01MzU4MjQxNjMuNTQ1MzE3NDc2NDYyOTM2OTM4Njg2NTFFLTY2NSAyNzMyOTg4LjU4OTEzNjM2MzkzMjUwMDgyMDYwOTk3MTIgLT4gLTAKK211bHgzMjY3IG11bHRpcGx5IC01MzU4MjQxNjMuNTQ1MzE3NDc2NDYyOTM2OTM4Njg2NTFFLTY2NSAyNzMyOTg4LjU4OTEzNjM2MzkzMjUwMDgyMDYwOTk3MTIgLT4gLTEuNDY0NDAxMzI0NzUyODg5NTM3NjI1NDg1MDcwNTU5N0UtNjUwIEluZXhhY3QgUm91bmRlZAorcG93eDMyNjcgcG93ZXIgLTUzNTgyNDE2My41NDUzMTc0NzY0NjI5MzY5Mzg2ODY1MUUtNjY1IDI3MzI5ODkgLT4gLTBFLTEwMDMwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMjY3IHJlbWFpbmRlciAtNTM1ODI0MTYzLjU0NTMxNzQ3NjQ2MjkzNjkzODY4NjUxRS02NjUgMjczMjk4OC41ODkxMzYzNjM5MzI1MDA4MjA2MDk5NzEyIC0+IC01LjM1ODI0MTYzNTQ1MzE3NDc2NDYyOTM2OTM4Njg2NTFFLTY1Nworc3VieDMyNjcgc3VidHJhY3QgLTUzNTgyNDE2My41NDUzMTc0NzY0NjI5MzY5Mzg2ODY1MUUtNjY1IDI3MzI5ODguNTg5MTM2MzYzOTMyNTAwODIwNjA5OTcxMiAtPiAtMjczMjk4OC41ODkxMzYzNjM5MzI1MDA4MjA2MDk5NzEyIEluZXhhY3QgUm91bmRlZAorYWRkeDMyNjggYWRkIDI0MDMyLjcwMjAwODU1MzA4NDI1MjkyNTE0MDg1ODEzNEUtNTA5IDUyODY0ODU0Ljg5OTQyMDYzMjM3NTU4OTIwNjcwNDA2OCAtPiA1Mjg2NDg1NC44OTk0MjA2MzIzNzU1ODkyMDY3MDQwNjggSW5leGFjdCBSb3VuZGVkCitjb214MzI2OCBjb21wYXJlIDI0MDMyLjcwMjAwODU1MzA4NDI1MjkyNTE0MDg1ODEzNEUtNTA5IDUyODY0ODU0Ljg5OTQyMDYzMjM3NTU4OTIwNjcwNDA2OCAtPiAtMQorZGl2eDMyNjggZGl2aWRlIDI0MDMyLjcwMjAwODU1MzA4NDI1MjkyNTE0MDg1ODEzNEUtNTA5IDUyODY0ODU0Ljg5OTQyMDYzMjM3NTU4OTIwNjcwNDA2OCAtPiA0LjU0NjA2NDEyMDM0NTU2OTc5MTc1NzM0MzE5NjE1MTFFLTUxMyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjY4IGRpdmlkZWludCAyNDAzMi43MDIwMDg1NTMwODQyNTI5MjUxNDA4NTgxMzRFLTUwOSA1Mjg2NDg1NC44OTk0MjA2MzIzNzU1ODkyMDY3MDQwNjggLT4gMAorbXVseDMyNjggbXVsdGlwbHkgMjQwMzIuNzAyMDA4NTUzMDg0MjUyOTI1MTQwODU4MTM0RS01MDkgNTI4NjQ4NTQuODk5NDIwNjMyMzc1NTg5MjA2NzA0MDY4IC0+IDEuMjcwNDg1MzA0NTIzMTczNTg4NTA3NDk0NTcxMDU3NkUtNDk3IEluZXhhY3QgUm91bmRlZAorcG93eDMyNjggcG93ZXIgMjQwMzIuNzAyMDA4NTUzMDg0MjUyOTI1MTQwODU4MTM0RS01MDkgNTI4NjQ4NTUgLT4gMEUtMTAwMzAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMyNjggcmVtYWluZGVyIDI0MDMyLjcwMjAwODU1MzA4NDI1MjkyNTE0MDg1ODEzNEUtNTA5IDUyODY0ODU0Ljg5OTQyMDYzMjM3NTU4OTIwNjcwNDA2OCAtPiAyLjQwMzI3MDIwMDg1NTMwODQyNTI5MjUxNDA4NTgxMzRFLTUwNQorc3VieDMyNjggc3VidHJhY3QgMjQwMzIuNzAyMDA4NTUzMDg0MjUyOTI1MTQwODU4MTM0RS01MDkgNTI4NjQ4NTQuODk5NDIwNjMyMzc1NTg5MjA2NzA0MDY4IC0+IC01Mjg2NDg1NC44OTk0MjA2MzIzNzU1ODkyMDY3MDQwNjggSW5leGFjdCBSb3VuZGVkCithZGR4MzI2OSBhZGQgNzE1NTMyMjAyNTkuOTM4OTUwNjk4MDMwNTE5OTA2NzI3RS00OTYgNzU0LjQ0MjIwNDE3NDE1MzI1NDQ0OTQzNTY2MDE2MDYyIC0+IDc1NC40NDIyMDQxNzQxNTMyNTQ0NDk0MzU2NjAxNjA2MiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjY5IGNvbXBhcmUgNzE1NTMyMjAyNTkuOTM4OTUwNjk4MDMwNTE5OTA2NzI3RS00OTYgNzU0LjQ0MjIwNDE3NDE1MzI1NDQ0OTQzNTY2MDE2MDYyIC0+IC0xCitkaXZ4MzI2OSBkaXZpZGUgNzE1NTMyMjAyNTkuOTM4OTUwNjk4MDMwNTE5OTA2NzI3RS00OTYgNzU0LjQ0MjIwNDE3NDE1MzI1NDQ0OTQzNTY2MDE2MDYyIC0+IDkuNDg0MjU0NzA2ODYxNzg3OTc5NDIxODA1MDAwODM1M0UtNDg5IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNjkgZGl2aWRlaW50IDcxNTUzMjIwMjU5LjkzODk1MDY5ODAzMDUxOTkwNjcyN0UtNDk2IDc1NC40NDIyMDQxNzQxNTMyNTQ0NDk0MzU2NjAxNjA2MiAtPiAwCittdWx4MzI2OSBtdWx0aXBseSA3MTU1MzIyMDI1OS45Mzg5NTA2OTgwMzA1MTk5MDY3MjdFLTQ5NiA3NTQuNDQyMjA0MTc0MTUzMjU0NDQ5NDM1NjYwMTYwNjIgLT4gNS4zOTgyNzY5MjA4NjY3MDIxMDQ0Njc1MTQ2Nzg3MjQ4RS00ODMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI2OSBwb3dlciA3MTU1MzIyMDI1OS45Mzg5NTA2OTgwMzA1MTk5MDY3MjdFLTQ5NiA3NTQgLT4gMEUtMTAwMzAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDMyNjkgcmVtYWluZGVyIDcxNTUzMjIwMjU5LjkzODk1MDY5ODAzMDUxOTkwNjcyN0UtNDk2IDc1NC40NDIyMDQxNzQxNTMyNTQ0NDk0MzU2NjAxNjA2MiAtPiA3LjE1NTMyMjAyNTk5Mzg5NTA2OTgwMzA1MTk5MDY3MjdFLTQ4Ngorc3VieDMyNjkgc3VidHJhY3QgNzE1NTMyMjAyNTkuOTM4OTUwNjk4MDMwNTE5OTA2NzI3RS00OTYgNzU0LjQ0MjIwNDE3NDE1MzI1NDQ0OTQzNTY2MDE2MDYyIC0+IC03NTQuNDQyMjA0MTc0MTUzMjU0NDQ5NDM1NjYwMTYwNjIgSW5leGFjdCBSb3VuZGVkCithZGR4MzI3MCBhZGQgMzU1NzIuOTYwMjg0Nzk1OTYyNjk3NzQwOTUzOTMyNTA4IDUyMC4zOTUwNjM2NDY4NzU5NDA4MjcyNTc1NDg3ODkxMEUtNzMxIC0+IDM1NTcyLjk2MDI4NDc5NTk2MjY5Nzc0MDk1MzkzMjUwOCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjcwIGNvbXBhcmUgMzU1NzIuOTYwMjg0Nzk1OTYyNjk3NzQwOTUzOTMyNTA4IDUyMC4zOTUwNjM2NDY4NzU5NDA4MjcyNTc1NDg3ODkxMEUtNzMxIC0+IDEKK2RpdngzMjcwIGRpdmlkZSAzNTU3Mi45NjAyODQ3OTU5NjI2OTc3NDA5NTM5MzI1MDggNTIwLjM5NTA2MzY0Njg3NTk0MDgyNzI1NzU0ODc4OTEwRS03MzEgLT4gNi44MzU3NjA1MTUzODY5NTU2NTA0ODY5MDYxNDY5ODUyRSs3MzIgSW5leGFjdCBSb3VuZGVkCitkdml4MzI3MCBkaXZpZGVpbnQgMzU1NzIuOTYwMjg0Nzk1OTYyNjk3NzQwOTUzOTMyNTA4IDUyMC4zOTUwNjM2NDY4NzU5NDA4MjcyNTc1NDg3ODkxMEUtNzMxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzI3MCBtdWx0aXBseSAzNTU3Mi45NjAyODQ3OTU5NjI2OTc3NDA5NTM5MzI1MDggNTIwLjM5NTA2MzY0Njg3NTk0MDgyNzI1NzU0ODc4OTEwRS03MzEgLT4gMS44NTExOTkyOTMxNTE0MTg1MTAyNDc0NjA5Njg2MDY2RS03MjQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI3MCBwb3dlciAzNTU3Mi45NjAyODQ3OTU5NjI2OTc3NDA5NTM5MzI1MDggNSAtPiA1Njk2Mzk0MjI0Nzk4NTQwNDMzNzQwMS4xNDkzNTMxNjkgSW5leGFjdCBSb3VuZGVkCityZW14MzI3MCByZW1haW5kZXIgMzU1NzIuOTYwMjg0Nzk1OTYyNjk3NzQwOTUzOTMyNTA4IDUyMC4zOTUwNjM2NDY4NzU5NDA4MjcyNTc1NDg3ODkxMEUtNzMxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzI3MCBzdWJ0cmFjdCAzNTU3Mi45NjAyODQ3OTU5NjI2OTc3NDA5NTM5MzI1MDggNTIwLjM5NTA2MzY0Njg3NTk0MDgyNzI1NzU0ODc4OTEwRS03MzEgLT4gMzU1NzIuOTYwMjg0Nzk1OTYyNjk3NzQwOTUzOTMyNTA4IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNzEgYWRkIDUzMDM1NDA1MDE4MTIzNzYwNTk4MzM0ODk1NDEzMDU3RSs4MTggLTk1NTg0NjQyNDcyNDAuNDQ3Njc5MDA0MjkxMTM3OTE1MSAtPiA1LjMwMzU0MDUwMTgxMjM3NjA1OTgzMzQ4OTU0MTMwNTdFKzg0OSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjcxIGNvbXBhcmUgNTMwMzU0MDUwMTgxMjM3NjA1OTgzMzQ4OTU0MTMwNTdFKzgxOCAtOTU1ODQ2NDI0NzI0MC40NDc2NzkwMDQyOTExMzc5MTUxIC0+IDEKK2RpdngzMjcxIGRpdmlkZSA1MzAzNTQwNTAxODEyMzc2MDU5ODMzNDg5NTQxMzA1N0UrODE4IC05NTU4NDY0MjQ3MjQwLjQ0NzY3OTAwNDI5MTEzNzkxNTEgLT4gLTUuNTQ4NTI3ODQzNjI2NjgwMjQ3MDIwMjQ4NzIzMzI4NUUrODM2IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNzEgZGl2aWRlaW50IDUzMDM1NDA1MDE4MTIzNzYwNTk4MzM0ODk1NDEzMDU3RSs4MTggLTk1NTg0NjQyNDcyNDAuNDQ3Njc5MDA0MjkxMTM3OTE1MSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDMyNzEgbXVsdGlwbHkgNTMwMzU0MDUwMTgxMjM3NjA1OTgzMzQ4OTU0MTMwNTdFKzgxOCAtOTU1ODQ2NDI0NzI0MC40NDc2NzkwMDQyOTExMzc5MTUxIC0+IC01LjA2OTM3MDIyNzAzNjUyNTkyNzQyMDMxODE4OTQ2MTNFKzg2MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjcxIHBvd2VyIDUzMDM1NDA1MDE4MTIzNzYwNTk4MzM0ODk1NDEzMDU3RSs4MTggLTEwIC0+IDUuNjc5OTA1MzkzNTQyNzI2Nzk0NDQ1NTg0ODEzNTYxOEUtODQ5OCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjcxIHJlbWFpbmRlciA1MzAzNTQwNTAxODEyMzc2MDU5ODMzNDg5NTQxMzA1N0UrODE4IC05NTU4NDY0MjQ3MjQwLjQ0NzY3OTAwNDI5MTEzNzkxNTEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjcxIHN1YnRyYWN0IDUzMDM1NDA1MDE4MTIzNzYwNTk4MzM0ODk1NDEzMDU3RSs4MTggLTk1NTg0NjQyNDcyNDAuNDQ3Njc5MDA0MjkxMTM3OTE1MSAtPiA1LjMwMzU0MDUwMTgxMjM3NjA1OTgzMzQ4OTU0MTMwNTdFKzg0OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjcyIGFkZCA5NS40OTA3NTExMjcyNDk5NDU4ODY4MjgyNTczMTIxMTggOTg3LjAxNDk4MzE2MzA3MzY1NzE0MTY3NDEwNjkwMTkyRSsxMzMgLT4gOS44NzAxNDk4MzE2MzA3MzY1NzE0MTY3NDEwNjkwMTkyRSsxMzUgSW5leGFjdCBSb3VuZGVkCitjb214MzI3MiBjb21wYXJlIDk1LjQ5MDc1MTEyNzI0OTk0NTg4NjgyODI1NzMxMjExOCA5ODcuMDE0OTgzMTYzMDczNjU3MTQxNjc0MTA2OTAxOTJFKzEzMyAtPiAtMQorZGl2eDMyNzIgZGl2aWRlIDk1LjQ5MDc1MTEyNzI0OTk0NTg4NjgyODI1NzMxMjExOCA5ODcuMDE0OTgzMTYzMDczNjU3MTQxNjc0MTA2OTAxOTJFKzEzMyAtPiA5LjY3NDcwMTI3MTYyOTMzNDE5Mjc1NjY1MTU5MTUwMTZFLTEzNSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjcyIGRpdmlkZWludCA5NS40OTA3NTExMjcyNDk5NDU4ODY4MjgyNTczMTIxMTggOTg3LjAxNDk4MzE2MzA3MzY1NzE0MTY3NDEwNjkwMTkyRSsxMzMgLT4gMAorbXVseDMyNzIgbXVsdGlwbHkgOTUuNDkwNzUxMTI3MjQ5OTQ1ODg2ODI4MjU3MzEyMTE4IDk4Ny4wMTQ5ODMxNjMwNzM2NTcxNDE2NzQxMDY5MDE5MkUrMTMzIC0+IDkuNDI1MDgwMjExNjA5MTg2MjE4NTc2NDgwMDIyNzAwNEUrMTM3IEluZXhhY3QgUm91bmRlZAorcG93eDMyNzIgcG93ZXIgOTUuNDkwNzUxMTI3MjQ5OTQ1ODg2ODI4MjU3MzEyMTE4IDEwIC0+IDYzMDM5NTQ4NjQ2MTg2ODY0MTYyLjg0NzQ5MTUzNDMzNyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjcyIHJlbWFpbmRlciA5NS40OTA3NTExMjcyNDk5NDU4ODY4MjgyNTczMTIxMTggOTg3LjAxNDk4MzE2MzA3MzY1NzE0MTY3NDEwNjkwMTkyRSsxMzMgLT4gOTUuNDkwNzUxMTI3MjQ5OTQ1ODg2ODI4MjU3MzEyMTE4CitzdWJ4MzI3MiBzdWJ0cmFjdCA5NS40OTA3NTExMjcyNDk5NDU4ODY4MjgyNTczMTIxMTggOTg3LjAxNDk4MzE2MzA3MzY1NzE0MTY3NDEwNjkwMTkyRSsxMzMgLT4gLTkuODcwMTQ5ODMxNjMwNzM2NTcxNDE2NzQxMDY5MDE5MkUrMTM1IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNzMgYWRkIDY5NDM0ODUwMjg3LjQ2MDc4ODU1MDkzNjczMDI5NjE1MyAtMzUxMTkxMzY1NDkwMTUwNDQyNDE1Njk4Mjc1NDIyNjQgLT4gLTM1MTE5MTM2NTQ5MDE1MDQ0MjQxNTAwMzkyNjkxOTc3IEluZXhhY3QgUm91bmRlZAorY29teDMyNzMgY29tcGFyZSA2OTQzNDg1MDI4Ny40NjA3ODg1NTA5MzY3MzAyOTYxNTMgLTM1MTE5MTM2NTQ5MDE1MDQ0MjQxNTY5ODI3NTQyMjY0IC0+IDEKK2RpdngzMjczIGRpdmlkZSA2OTQzNDg1MDI4Ny40NjA3ODg1NTA5MzY3MzAyOTYxNTMgLTM1MTE5MTM2NTQ5MDE1MDQ0MjQxNTY5ODI3NTQyMjY0IC0+IC0xLjk3NzEyMjkzMzgzMjcyNzM2NDQxMjkzOTQ3MzQyOTlFLTIxIEluZXhhY3QgUm91bmRlZAorZHZpeDMyNzMgZGl2aWRlaW50IDY5NDM0ODUwMjg3LjQ2MDc4ODU1MDkzNjczMDI5NjE1MyAtMzUxMTkxMzY1NDkwMTUwNDQyNDE1Njk4Mjc1NDIyNjQgLT4gLTAKK211bHgzMjczIG11bHRpcGx5IDY5NDM0ODUwMjg3LjQ2MDc4ODU1MDkzNjczMDI5NjE1MyAtMzUxMTkxMzY1NDkwMTUwNDQyNDE1Njk4Mjc1NDIyNjQgLT4gLTIuNDM4NDkxOTg4NTA1NzUxOTMwMjY0NjUyMjQyNTk4MEUrNDIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI3MyBwb3dlciA2OTQzNDg1MDI4Ny40NjA3ODg1NTA5MzY3MzAyOTYxNTMgLTQgLT4gNC4zMDIxOTM5NjA1ODQyMDM4OTk1MzcwNDQzNzQzODQ0RS00NCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjczIHJlbWFpbmRlciA2OTQzNDg1MDI4Ny40NjA3ODg1NTA5MzY3MzAyOTYxNTMgLTM1MTE5MTM2NTQ5MDE1MDQ0MjQxNTY5ODI3NTQyMjY0IC0+IDY5NDM0ODUwMjg3LjQ2MDc4ODU1MDkzNjczMDI5NjE1Mworc3VieDMyNzMgc3VidHJhY3QgNjk0MzQ4NTAyODcuNDYwNzg4NTUwOTM2NzMwMjk2MTUzIC0zNTExOTEzNjU0OTAxNTA0NDI0MTU2OTgyNzU0MjI2NCAtPiAzNTExOTEzNjU0OTAxNTA0NDI0MTYzOTI2MjM5MjU1MSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjc0IGFkZCAtMzkyLjIyNzM5OTI0NjIxOTY1NjIxNzM5MDk4NzI1NDA3IC02NTU1MTI3NC45ODcxNjA5OTgxOTUyODIxMDk2MTIxMzYgLT4gLTY1NTUxNjY3LjIxNDU2MDI0NDQxNDkzODMyNzAwMzEyMyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjc0IGNvbXBhcmUgLTM5Mi4yMjczOTkyNDYyMTk2NTYyMTczOTA5ODcyNTQwNyAtNjU1NTEyNzQuOTg3MTYwOTk4MTk1MjgyMTA5NjEyMTM2IC0+IDEKK2RpdngzMjc0IGRpdmlkZSAtMzkyLjIyNzM5OTI0NjIxOTY1NjIxNzM5MDk4NzI1NDA3IC02NTU1MTI3NC45ODcxNjA5OTgxOTUyODIxMDk2MTIxMzYgLT4gMC4wMDAwMDU5ODM1MjA1MjM3ODkwODA5NDQ5Njg0MzE3MjQ1MDMzIEluZXhhY3QgUm91bmRlZAorZHZpeDMyNzQgZGl2aWRlaW50IC0zOTIuMjI3Mzk5MjQ2MjE5NjU2MjE3MzkwOTg3MjU0MDcgLTY1NTUxMjc0Ljk4NzE2MDk5ODE5NTI4MjEwOTYxMjEzNiAtPiAwCittdWx4MzI3NCBtdWx0aXBseSAtMzkyLjIyNzM5OTI0NjIxOTY1NjIxNzM5MDk4NzI1NDA3IC02NTU1MTI3NC45ODcxNjA5OTgxOTUyODIxMDk2MTIxMzYgLT4gMjU3MTEwMDYxMDUuNDg3OTI5MTA4MzI5NjM3NzAxODgyIEluZXhhY3QgUm91bmRlZAorcG93eDMyNzQgcG93ZXIgLTM5Mi4yMjczOTkyNDYyMTk2NTYyMTczOTA5ODcyNTQwNyAtNjU1NTEyNzUgLT4gLTBFLTEwMDMwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzMjc0IHJlbWFpbmRlciAtMzkyLjIyNzM5OTI0NjIxOTY1NjIxNzM5MDk4NzI1NDA3IC02NTU1MTI3NC45ODcxNjA5OTgxOTUyODIxMDk2MTIxMzYgLT4gLTM5Mi4yMjczOTkyNDYyMTk2NTYyMTczOTA5ODcyNTQwNworc3VieDMyNzQgc3VidHJhY3QgLTM5Mi4yMjczOTkyNDYyMTk2NTYyMTczOTA5ODcyNTQwNyAtNjU1NTEyNzQuOTg3MTYwOTk4MTk1MjgyMTA5NjEyMTM2IC0+IDY1NTUwODgyLjc1OTc2MTc1MTk3NTYyNTg5MjIyMTE0OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjc1IGFkZCA2NDEzMjY1LjQ0MjM1NjExOTE3OTI5NzIwODU1Mzk0NTcgMjQ1MTQuMjIyNzA0NzE0MTM5MzUwMDI2MTY1NzIxMTQ2IC0+IDY0Mzc3NzkuNjY1MDYwODMzMzE4NjQ3MjM0NzE5NjY2OCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjc1IGNvbXBhcmUgNjQxMzI2NS40NDIzNTYxMTkxNzkyOTcyMDg1NTM5NDU3IDI0NTE0LjIyMjcwNDcxNDEzOTM1MDAyNjE2NTcyMTE0NiAtPiAxCitkaXZ4MzI3NSBkaXZpZGUgNjQxMzI2NS40NDIzNTYxMTkxNzkyOTcyMDg1NTM5NDU3IDI0NTE0LjIyMjcwNDcxNDEzOTM1MDAyNjE2NTcyMTE0NiAtPiAyNjEuNjE0MDY0NjAyNzAyNDE0OTg3NTc4Njg2ODE4ODMgSW5leGFjdCBSb3VuZGVkCitkdml4MzI3NSBkaXZpZGVpbnQgNjQxMzI2NS40NDIzNTYxMTkxNzkyOTcyMDg1NTM5NDU3IDI0NTE0LjIyMjcwNDcxNDEzOTM1MDAyNjE2NTcyMTE0NiAtPiAyNjEKK211bHgzMjc1IG11bHRpcGx5IDY0MTMyNjUuNDQyMzU2MTE5MTc5Mjk3MjA4NTUzOTQ1NyAyNDUxNC4yMjI3MDQ3MTQxMzkzNTAwMjYxNjU3MjExNDYgLT4gMTU3MjE2MjE3MzE4LjM2NDk0NTI1MzAwNjk0NTgzMTM4IEluZXhhY3QgUm91bmRlZAorcG93eDMyNzUgcG93ZXIgNjQxMzI2NS40NDIzNTYxMTkxNzkyOTcyMDg1NTM5NDU3IDI0NTE0IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMyNzUgcmVtYWluZGVyIDY0MTMyNjUuNDQyMzU2MTE5MTc5Mjk3MjA4NTUzOTQ1NyAyNDUxNC4yMjI3MDQ3MTQxMzkzNTAwMjYxNjU3MjExNDYgLT4gMTUwNTMuMzE2NDI1NzI4ODA4OTQwMzc5MzAwNzI2NTk0CitzdWJ4MzI3NSBzdWJ0cmFjdCA2NDEzMjY1LjQ0MjM1NjExOTE3OTI5NzIwODU1Mzk0NTcgMjQ1MTQuMjIyNzA0NzE0MTM5MzUwMDI2MTY1NzIxMTQ2IC0+IDYzODg3NTEuMjE5NjUxNDA1MDM5OTQ3MTgyMzg4MjI0NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjc2IGFkZCAtNi45NjY3NzA2Mzg5MTIyMTA3NzYwMDQ2MTg0MDY0MDU3RSs0ODcgMzIuNDA1ODEwNzAzOTcxNTM4Mjc4NDE5NjI1NTI3MjM0IC0+IC02Ljk2Njc3MDYzODkxMjIxMDc3NjAwNDYxODQwNjQwNTdFKzQ4NyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjc2IGNvbXBhcmUgLTYuOTY2NzcwNjM4OTEyMjEwNzc2MDA0NjE4NDA2NDA1N0UrNDg3IDMyLjQwNTgxMDcwMzk3MTUzODI3ODQxOTYyNTUyNzIzNCAtPiAtMQorZGl2eDMyNzYgZGl2aWRlIC02Ljk2Njc3MDYzODkxMjIxMDc3NjAwNDYxODQwNjQwNTdFKzQ4NyAzMi40MDU4MTA3MDM5NzE1MzgyNzg0MTk2MjU1MjcyMzQgLT4gLTIuMTQ5ODUyMjkxMTY4OTk5NzM0MTM0NzI5MzQxOTc2MUUrNDg2IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNzYgZGl2aWRlaW50IC02Ljk2Njc3MDYzODkxMjIxMDc3NjAwNDYxODQwNjQwNTdFKzQ4NyAzMi40MDU4MTA3MDM5NzE1MzgyNzg0MTk2MjU1MjcyMzQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMjc2IG11bHRpcGx5IC02Ljk2Njc3MDYzODkxMjIxMDc3NjAwNDYxODQwNjQwNTdFKzQ4NyAzMi40MDU4MTA3MDM5NzE1MzgyNzg0MTk2MjU1MjcyMzQgLT4gLTIuMjU3NjM4NTA1NDI1NzU5NTI1OTUxMTU1NjI1ODQ3MEUrNDg5IEluZXhhY3QgUm91bmRlZAorcG93eDMyNzYgcG93ZXIgLTYuOTY2NzcwNjM4OTEyMjEwNzc2MDA0NjE4NDA2NDA1N0UrNDg3IDMyIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMyNzYgcmVtYWluZGVyIC02Ljk2Njc3MDYzODkxMjIxMDc3NjAwNDYxODQwNjQwNTdFKzQ4NyAzMi40MDU4MTA3MDM5NzE1MzgyNzg0MTk2MjU1MjcyMzQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjc2IHN1YnRyYWN0IC02Ljk2Njc3MDYzODkxMjIxMDc3NjAwNDYxODQwNjQwNTdFKzQ4NyAzMi40MDU4MTA3MDM5NzE1MzgyNzg0MTk2MjU1MjcyMzQgLT4gLTYuOTY2NzcwNjM4OTEyMjEwNzc2MDA0NjE4NDA2NDA1N0UrNDg3IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNzcgYWRkIDM3ODIwNDcxNjYzMy40MDAyNDEwMDYwMjg5NjA1NzYxNSAtMDMwMDIxODcxNDM3OC4zMjIyMzEyNjk2MDYyMTY1MTYgLT4gNzc5ODYwMDIyNTUuMDc4MDA5NzM2NDIyNzQ0MDYwMTUKK2NvbXgzMjc3IGNvbXBhcmUgMzc4MjA0NzE2NjMzLjQwMDI0MTAwNjAyODk2MDU3NjE1IC0wMzAwMjE4NzE0Mzc4LjMyMjIzMTI2OTYwNjIxNjUxNiAtPiAxCitkaXZ4MzI3NyBkaXZpZGUgMzc4MjA0NzE2NjMzLjQwMDI0MTAwNjAyODk2MDU3NjE1IC0wMzAwMjE4NzE0Mzc4LjMyMjIzMTI2OTYwNjIxNjUxNiAtPiAtMS4yNTk3NjM5NjA0NzMxNzUzMjg0NTk5NzQ4ODIwODc2IEluZXhhY3QgUm91bmRlZAorZHZpeDMyNzcgZGl2aWRlaW50IDM3ODIwNDcxNjYzMy40MDAyNDEwMDYwMjg5NjA1NzYxNSAtMDMwMDIxODcxNDM3OC4zMjIyMzEyNjk2MDYyMTY1MTYgLT4gLTEKK211bHgzMjc3IG11bHRpcGx5IDM3ODIwNDcxNjYzMy40MDAyNDEwMDYwMjg5NjA1NzYxNSAtMDMwMDIxODcxNDM3OC4zMjIyMzEyNjk2MDYyMTY1MTYgLT4gLTExMzU0NDEzMzc5OTQ5NzA4MjA3NTU1Ny4yMTE4MDQzMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjc3IHBvd2VyIDM3ODIwNDcxNjYzMy40MDAyNDEwMDYwMjg5NjA1NzYxNSAtMyAtPiAxLjg0ODQ5ODgyMTI0MDE4ODY4ODc1NjI3Nzk5OTY3MzdFLTM1IEluZXhhY3QgUm91bmRlZAorcmVteDMyNzcgcmVtYWluZGVyIDM3ODIwNDcxNjYzMy40MDAyNDEwMDYwMjg5NjA1NzYxNSAtMDMwMDIxODcxNDM3OC4zMjIyMzEyNjk2MDYyMTY1MTYgLT4gNzc5ODYwMDIyNTUuMDc4MDA5NzM2NDIyNzQ0MDYwMTUKK3N1YngzMjc3IHN1YnRyYWN0IDM3ODIwNDcxNjYzMy40MDAyNDEwMDYwMjg5NjA1NzYxNSAtMDMwMDIxODcxNDM3OC4zMjIyMzEyNjk2MDYyMTY1MTYgLT4gNjc4NDIzNDMxMDExLjcyMjQ3MjI3NTYzNTE3NzA5MjE1CithZGR4MzI3OCBhZGQgLTQ0MjM0LjUxMjAxMjQ1NzE0ODAyNzY4NTI4Mjk2OTIzNUUrNTAxIDIxMzI1NzIuNDU3MTk4NzkwODM3NTAwMjEwMDg5NDkyNyAtPiAtNC40MjM0NTEyMDEyNDU3MTQ4MDI3Njg1MjgyOTY5MjM1RSs1MDUgSW5leGFjdCBSb3VuZGVkCitjb214MzI3OCBjb21wYXJlIC00NDIzNC41MTIwMTI0NTcxNDgwMjc2ODUyODI5NjkyMzVFKzUwMSAyMTMyNTcyLjQ1NzE5ODc5MDgzNzUwMDIxMDA4OTQ5MjcgLT4gLTEKK2RpdngzMjc4IGRpdmlkZSAtNDQyMzQuNTEyMDEyNDU3MTQ4MDI3Njg1MjgyOTY5MjM1RSs1MDEgMjEzMjU3Mi40NTcxOTg3OTA4Mzc1MDAyMTAwODk0OTI3IC0+IC0yLjA3NDIzMjU0Nzc5MTYzNDcxOTMxODE2MDM5NjMyNTdFKzQ5OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjc4IGRpdmlkZWludCAtNDQyMzQuNTEyMDEyNDU3MTQ4MDI3Njg1MjgyOTY5MjM1RSs1MDEgMjEzMjU3Mi40NTcxOTg3OTA4Mzc1MDAyMTAwODk0OTI3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzI3OCBtdWx0aXBseSAtNDQyMzQuNTEyMDEyNDU3MTQ4MDI3Njg1MjgyOTY5MjM1RSs1MDEgMjEzMjU3Mi40NTcxOTg3OTA4Mzc1MDAyMTAwODk0OTI3IC0+IC05LjQzMzMzMDE5NzUzOTUxNzA0NjU5ODI5NjgwMTk5MTVFKzUxMSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjc4IHBvd2VyIC00NDIzNC41MTIwMTI0NTcxNDgwMjc2ODUyODI5NjkyMzVFKzUwMSAyMTMyNTcyIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMyNzggcmVtYWluZGVyIC00NDIzNC41MTIwMTI0NTcxNDgwMjc2ODUyODI5NjkyMzVFKzUwMSAyMTMyNTcyLjQ1NzE5ODc5MDgzNzUwMDIxMDA4OTQ5MjcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjc4IHN1YnRyYWN0IC00NDIzNC41MTIwMTI0NTcxNDgwMjc2ODUyODI5NjkyMzVFKzUwMSAyMTMyNTcyLjQ1NzE5ODc5MDgzNzUwMDIxMDA4OTQ5MjcgLT4gLTQuNDIzNDUxMjAxMjQ1NzE0ODAyNzY4NTI4Mjk2OTIzNUUrNTA1IEluZXhhY3QgUm91bmRlZAorYWRkeDMyNzkgYWRkIC0zNTU0LjU4OTU5NzQ5Njg3NDE0NjU2NTQwMjI3NzIxMDBFLTA3MyA5NzUyLjA0Mjg3NDY3MjI0OTc2MjE5MzY5OTg1MzM4NDhFKzUxNiAtPiA5Ljc1MjA0Mjg3NDY3MjI0OTc2MjE5MzY5OTg1MzM4NDhFKzUxOSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjc5IGNvbXBhcmUgLTM1NTQuNTg5NTk3NDk2ODc0MTQ2NTY1NDAyMjc3MjEwMEUtMDczIDk3NTIuMDQyODc0NjcyMjQ5NzYyMTkzNjk5ODUzMzg0OEUrNTE2IC0+IC0xCitkaXZ4MzI3OSBkaXZpZGUgLTM1NTQuNTg5NTk3NDk2ODc0MTQ2NTY1NDAyMjc3MjEwMEUtMDczIDk3NTIuMDQyODc0NjcyMjQ5NzYyMTkzNjk5ODUzMzg0OEUrNTE2IC0+IC0zLjY0NDk2OTIwNjEyMjcxMDA1NzI3NjgzMzA5MTIxNjJFLTU5MCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjc5IGRpdmlkZWludCAtMzU1NC41ODk1OTc0OTY4NzQxNDY1NjU0MDIyNzcyMTAwRS0wNzMgOTc1Mi4wNDI4NzQ2NzIyNDk3NjIxOTM2OTk4NTMzODQ4RSs1MTYgLT4gLTAKK211bHgzMjc5IG11bHRpcGx5IC0zNTU0LjU4OTU5NzQ5Njg3NDE0NjU2NTQwMjI3NzIxMDBFLTA3MyA5NzUyLjA0Mjg3NDY3MjI0OTc2MjE5MzY5OTg1MzM4NDhFKzUxNiAtPiAtMy40NjY0NTEwMTU2NjUzNDkxNzY5OTAxNDM1Nzc3MDYwRSs0NTAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI3OSBwb3dlciAtMzU1NC41ODk1OTc0OTY4NzQxNDY1NjU0MDIyNzcyMTAwRS0wNzMgMTAgLT4gMy4yMjAyODc1NzE2MDE5MjY2OTMzMjE1Mzg3NDU2MTk3RS02OTUgSW5leGFjdCBSb3VuZGVkCityZW14MzI3OSByZW1haW5kZXIgLTM1NTQuNTg5NTk3NDk2ODc0MTQ2NTY1NDAyMjc3MjEwMEUtMDczIDk3NTIuMDQyODc0NjcyMjQ5NzYyMTkzNjk5ODUzMzg0OEUrNTE2IC0+IC0zLjU1NDU4OTU5NzQ5Njg3NDE0NjU2NTQwMjI3NzIxMDBFLTcwCitzdWJ4MzI3OSBzdWJ0cmFjdCAtMzU1NC41ODk1OTc0OTY4NzQxNDY1NjU0MDIyNzcyMTAwRS0wNzMgOTc1Mi4wNDI4NzQ2NzIyNDk3NjIxOTM2OTk4NTMzODQ4RSs1MTYgLT4gLTkuNzUyMDQyODc0NjcyMjQ5NzYyMTkzNjk5ODUzMzg0OEUrNTE5IEluZXhhY3QgUm91bmRlZAorYWRkeDMyODAgYWRkIDc1MDE4NzY4NS42MzYzMjYwODkyMzM5NzIzNDM5MTY2OCA0NjMzMTk0MjUyODYzLjY3MzA2MjU5NzI2NjkyNDYwMjUgLT4gNDYzMzk0NDQ0MDU0OS4zMDkzODg2ODY1MDA4OTY5NDY0IEluZXhhY3QgUm91bmRlZAorY29teDMyODAgY29tcGFyZSA3NTAxODc2ODUuNjM2MzI2MDg5MjMzOTcyMzQzOTE2NjggNDYzMzE5NDI1Mjg2My42NzMwNjI1OTcyNjY5MjQ2MDI1IC0+IC0xCitkaXZ4MzI4MCBkaXZpZGUgNzUwMTg3Njg1LjYzNjMyNjA4OTIzMzk3MjM0MzkxNjY4IDQ2MzMxOTQyNTI4NjMuNjczMDYyNTk3MjY2OTI0NjAyNSAtPiAwLjAwMDE2MTkxNTg3MTU3NjY0NTQxNDYzODcxODA3MzgyNzU5IEluZXhhY3QgUm91bmRlZAorZHZpeDMyODAgZGl2aWRlaW50IDc1MDE4NzY4NS42MzYzMjYwODkyMzM5NzIzNDM5MTY2OCA0NjMzMTk0MjUyODYzLjY3MzA2MjU5NzI2NjkyNDYwMjUgLT4gMAorbXVseDMyODAgbXVsdGlwbHkgNzUwMTg3Njg1LjYzNjMyNjA4OTIzMzk3MjM0MzkxNjY4IDQ2MzMxOTQyNTI4NjMuNjczMDYyNTk3MjY2OTI0NjAyNSAtPiAzNDc1NzY1MjczNjU5MzI1ODk1MDEyLjc2MTIxMDc1NTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI4MCBwb3dlciA3NTAxODc2ODUuNjM2MzI2MDg5MjMzOTcyMzQzOTE2NjggNSAtPiAyLjM3NjAxNzYwNjg4Mjk1Mjk3NDUxNTIxODg3OTg1NTdFKzQ0IEluZXhhY3QgUm91bmRlZAorcmVteDMyODAgcmVtYWluZGVyIDc1MDE4NzY4NS42MzYzMjYwODkyMzM5NzIzNDM5MTY2OCA0NjMzMTk0MjUyODYzLjY3MzA2MjU5NzI2NjkyNDYwMjUgLT4gNzUwMTg3Njg1LjYzNjMyNjA4OTIzMzk3MjM0MzkxNjY4CitzdWJ4MzI4MCBzdWJ0cmFjdCA3NTAxODc2ODUuNjM2MzI2MDg5MjMzOTcyMzQzOTE2NjggNDYzMzE5NDI1Mjg2My42NzMwNjI1OTcyNjY5MjQ2MDI1IC0+IC00NjMyNDQ0MDY1MTc4LjAzNjczNjUwODAzMjk1MjI1ODYgSW5leGFjdCBSb3VuZGVkCithZGR4MzI4MSBhZGQgMzAxOTAwMzQyNDI4NTMuMjUxMTY1OTUxNDU3NTg5Mzg2RS0wMjggODAzODg4NTY3Ni4zMjA0MjM4MzIyOTc2MDg3Nzk5NzUxRSswMTggLT4gODAzODg4NTY3NjMyMDQyMzgzMjI5NzYwODc3OS45NzUxIEluZXhhY3QgUm91bmRlZAorY29teDMyODEgY29tcGFyZSAzMDE5MDAzNDI0Mjg1My4yNTExNjU5NTE0NTc1ODkzODZFLTAyOCA4MDM4ODg1Njc2LjMyMDQyMzgzMjI5NzYwODc3OTk3NTFFKzAxOCAtPiAtMQorZGl2eDMyODEgZGl2aWRlIDMwMTkwMDM0MjQyODUzLjI1MTE2NTk1MTQ1NzU4OTM4NkUtMDI4IDgwMzg4ODU2NzYuMzIwNDIzODMyMjk3NjA4Nzc5OTc1MUUrMDE4IC0+IDMuNzU1NDk5ODg2MjMxOTgwNzI5NTkwMzM0ODk2MDI4MEUtNDMgSW5leGFjdCBSb3VuZGVkCitkdml4MzI4MSBkaXZpZGVpbnQgMzAxOTAwMzQyNDI4NTMuMjUxMTY1OTUxNDU3NTg5Mzg2RS0wMjggODAzODg4NTY3Ni4zMjA0MjM4MzIyOTc2MDg3Nzk5NzUxRSswMTggLT4gMAorbXVseDMyODEgbXVsdGlwbHkgMzAxOTAwMzQyNDI4NTMuMjUxMTY1OTUxNDU3NTg5Mzg2RS0wMjggODAzODg4NTY3Ni4zMjA0MjM4MzIyOTc2MDg3Nzk5NzUxRSswMTggLT4gMjQyNjk0MjMzODQyNDkuNjExMjYzNzI4ODU0NzkzNzMxIEluZXhhY3QgUm91bmRlZAorcG93eDMyODEgcG93ZXIgMzAxOTAwMzQyNDI4NTMuMjUxMTY1OTUxNDU3NTg5Mzg2RS0wMjggOCAtPiA2LjkwMDk0OTQzMDU2MTI1ODk1NzgzMzI2OTA2OTIxMTNFLTExNyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjgxIHJlbWFpbmRlciAzMDE5MDAzNDI0Mjg1My4yNTExNjU5NTE0NTc1ODkzODZFLTAyOCA4MDM4ODg1Njc2LjMyMDQyMzgzMjI5NzYwODc3OTk3NTFFKzAxOCAtPiAzLjAxOTAwMzQyNDI4NTMyNTExNjU5NTE0NTc1ODkzODZFLTE1CitzdWJ4MzI4MSBzdWJ0cmFjdCAzMDE5MDAzNDI0Mjg1My4yNTExNjU5NTE0NTc1ODkzODZFLTAyOCA4MDM4ODg1Njc2LjMyMDQyMzgzMjI5NzYwODc3OTk3NTFFKzAxOCAtPiAtODAzODg4NTY3NjMyMDQyMzgzMjI5NzYwODc3OS45NzUxIEluZXhhY3QgUm91bmRlZAorYWRkeDMyODIgYWRkIDY1LjUzNzk0MjY3Njc3NDcxNTk1MzQwMDc2ODgwMzUzOSAxMjU5NDY5MTcyNjAuODc1MzY1MDYxOTcxOTE3ODIxOTggLT4gMTI1OTQ2OTE3MzI2LjQxMzMwNzczODc0NjYzMzc3NTM4IEluZXhhY3QgUm91bmRlZAorY29teDMyODIgY29tcGFyZSA2NS41Mzc5NDI2NzY3NzQ3MTU5NTM0MDA3Njg4MDM1MzkgMTI1OTQ2OTE3MjYwLjg3NTM2NTA2MTk3MTkxNzgyMTk4IC0+IC0xCitkaXZ4MzI4MiBkaXZpZGUgNjUuNTM3OTQyNjc2Nzc0NzE1OTUzNDAwNzY4ODAzNTM5IDEyNTk0NjkxNzI2MC44NzUzNjUwNjE5NzE5MTc4MjE5OCAtPiA1LjIwMzYxNjI2MTY4NDY4OTQ5MjAzODk0MTQ3MzU4NzhFLTEwIEluZXhhY3QgUm91bmRlZAorZHZpeDMyODIgZGl2aWRlaW50IDY1LjUzNzk0MjY3Njc3NDcxNTk1MzQwMDc2ODgwMzUzOSAxMjU5NDY5MTcyNjAuODc1MzY1MDYxOTcxOTE3ODIxOTggLT4gMAorbXVseDMyODIgbXVsdGlwbHkgNjUuNTM3OTQyNjc2Nzc0NzE1OTUzNDAwNzY4ODAzNTM5IDEyNTk0NjkxNzI2MC44NzUzNjUwNjE5NzE5MTc4MjE5OCAtPiA4MjU0MzAxODQzNzU5LjczNzY5OTA5NTczNTU0MTEzNzAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI4MiBwb3dlciA2NS41Mzc5NDI2NzY3NzQ3MTU5NTM0MDA3Njg4MDM1MzkgMSAtPiA2NS41Mzc5NDI2NzY3NzQ3MTU5NTM0MDA3Njg4MDM1MzkKK3JlbXgzMjgyIHJlbWFpbmRlciA2NS41Mzc5NDI2NzY3NzQ3MTU5NTM0MDA3Njg4MDM1MzkgMTI1OTQ2OTE3MjYwLjg3NTM2NTA2MTk3MTkxNzgyMTk4IC0+IDY1LjUzNzk0MjY3Njc3NDcxNTk1MzQwMDc2ODgwMzUzOQorc3VieDMyODIgc3VidHJhY3QgNjUuNTM3OTQyNjc2Nzc0NzE1OTUzNDAwNzY4ODAzNTM5IDEyNTk0NjkxNzI2MC44NzUzNjUwNjE5NzE5MTc4MjE5OCAtPiAtMTI1OTQ2OTE3MTk1LjMzNzQyMjM4NTE5NzIwMTg2ODU4IEluZXhhY3QgUm91bmRlZAorYWRkeDMyODMgYWRkIDgwMTUyNzIzNDg2NzcuNTQ4OTM5NDE4Mzg4MTgxMzcwMCA5NDkuMjMwMjcxMTE0OTk3NzkyNTgyODQ4Nzc5MjAwMjIgLT4gODAxNTI3MjM0OTYyNi43NzkyMTA1MzMzODU5NzM5NTI4IEluZXhhY3QgUm91bmRlZAorY29teDMyODMgY29tcGFyZSA4MDE1MjcyMzQ4Njc3LjU0ODkzOTQxODM4ODE4MTM3MDAgOTQ5LjIzMDI3MTExNDk5Nzc5MjU4Mjg0ODc3OTIwMDIyIC0+IDEKK2RpdngzMjgzIGRpdmlkZSA4MDE1MjcyMzQ4Njc3LjU0ODkzOTQxODM4ODE4MTM3MDAgOTQ5LjIzMDI3MTExNDk5Nzc5MjU4Mjg0ODc3OTIwMDIyIC0+IDg0NDM5NzA0MzguNTU2MDEwNzk3ODc5MDA4NDQzMDExMCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjgzIGRpdmlkZWludCA4MDE1MjcyMzQ4Njc3LjU0ODkzOTQxODM4ODE4MTM3MDAgOTQ5LjIzMDI3MTExNDk5Nzc5MjU4Mjg0ODc3OTIwMDIyIC0+IDg0NDM5NzA0MzgKK211bHgzMjgzIG11bHRpcGx5IDgwMTUyNzIzNDg2NzcuNTQ4OTM5NDE4Mzg4MTgxMzcwMCA5NDkuMjMwMjcxMTE0OTk3NzkyNTgyODQ4Nzc5MjAwMjIgLT4gNzYwODMzOTE0NDU5NTczNC44OTg0MjgxNDMxNDcxNzQxIEluZXhhY3QgUm91bmRlZAorcG93eDMyODMgcG93ZXIgODAxNTI3MjM0ODY3Ny41NDg5Mzk0MTgzODgxODEzNzAwIDk0OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjgzIHJlbWFpbmRlciA4MDE1MjcyMzQ4Njc3LjU0ODkzOTQxODM4ODE4MTM3MDAgOTQ5LjIzMDI3MTExNDk5Nzc5MjU4Mjg0ODc3OTIwMDIyIC0+IDUyNy43ODIyODA0MTM1NTc0MjM5Nzg5NTMwMzY5MDM2NAorc3VieDMyODMgc3VidHJhY3QgODAxNTI3MjM0ODY3Ny41NDg5Mzk0MTgzODgxODEzNzAwIDk0OS4yMzAyNzExMTQ5OTc3OTI1ODI4NDg3NzkyMDAyMiAtPiA4MDE1MjcyMzQ3NzI4LjMxODY2ODMwMzM5MDM4ODc4NzIgSW5leGFjdCBSb3VuZGVkCithZGR4MzI4NCBhZGQgLTMyNTk1MzMzOTgyLjY3MDY4NjIyMTIwNDUxODA0MjI1IDY5MTMwLjA1MjIzMzY0OTgwODc1MDExMzE0MTUwMjQ2NUUtODYyIC0+IC0zMjU5NTMzMzk4Mi42NzA2ODYyMjEyMDQ1MTgwNDIyNTAgSW5leGFjdCBSb3VuZGVkCitjb214MzI4NCBjb21wYXJlIC0zMjU5NTMzMzk4Mi42NzA2ODYyMjEyMDQ1MTgwNDIyNSA2OTEzMC4wNTIyMzM2NDk4MDg3NTAxMTMxNDE1MDI0NjVFLTg2MiAtPiAtMQorZGl2eDMyODQgZGl2aWRlIC0zMjU5NTMzMzk4Mi42NzA2ODYyMjEyMDQ1MTgwNDIyNSA2OTEzMC4wNTIyMzM2NDk4MDg3NTAxMTMxNDE1MDI0NjVFLTg2MiAtPiAtNC43MTUwNzQ0MDM4OTM1NTc0NTc0NjgxNjA5NDU3NzI3RSs4NjcgSW5leGFjdCBSb3VuZGVkCitkdml4MzI4NCBkaXZpZGVpbnQgLTMyNTk1MzMzOTgyLjY3MDY4NjIyMTIwNDUxODA0MjI1IDY5MTMwLjA1MjIzMzY0OTgwODc1MDExMzE0MTUwMjQ2NUUtODYyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzI4NCBtdWx0aXBseSAtMzI1OTUzMzM5ODIuNjcwNjg2MjIxMjA0NTE4MDQyMjUgNjkxMzAuMDUyMjMzNjQ5ODA4NzUwMTEzMTQxNTAyNDY1RS04NjIgLT4gLTIuMjUzMzE3MTQwNzk1Mjg1MTg4NTQ0NjIxMzY5NzcxNUUtODQ3IEluZXhhY3QgUm91bmRlZAorcG93eDMyODQgcG93ZXIgLTMyNTk1MzMzOTgyLjY3MDY4NjIyMTIwNDUxODA0MjI1IDcgLT4gLTMuOTA5MjAxNDE0ODAzMTczOTY2NjUyNTYwNjA5MzMwNkUrNzMgSW5leGFjdCBSb3VuZGVkCityZW14MzI4NCByZW1haW5kZXIgLTMyNTk1MzMzOTgyLjY3MDY4NjIyMTIwNDUxODA0MjI1IDY5MTMwLjA1MjIzMzY0OTgwODc1MDExMzE0MTUwMjQ2NUUtODYyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzI4NCBzdWJ0cmFjdCAtMzI1OTUzMzM5ODIuNjcwNjg2MjIxMjA0NTE4MDQyMjUgNjkxMzAuMDUyMjMzNjQ5ODA4NzUwMTEzMTQxNTAyNDY1RS04NjIgLT4gLTMyNTk1MzMzOTgyLjY3MDY4NjIyMTIwNDUxODA0MjI1MCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjg1IGFkZCAtMTc1NDQxODkwMTcxNDUuNzEwMTE3NjMzMDIxODAwNDI2RS01MzcgMjkyMTc4MDAwLjA2NDUwODA0NjE4Mjk5NTIwMDk0ODQzIC0+IDI5MjE3ODAwMC4wNjQ1MDgwNDYxODI5OTUyMDA5NDg0MyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjg1IGNvbXBhcmUgLTE3NTQ0MTg5MDE3MTQ1LjcxMDExNzYzMzAyMTgwMDQyNkUtNTM3IDI5MjE3ODAwMC4wNjQ1MDgwNDYxODI5OTUyMDA5NDg0MyAtPiAtMQorZGl2eDMyODUgZGl2aWRlIC0xNzU0NDE4OTAxNzE0NS43MTAxMTc2MzMwMjE4MDA0MjZFLTUzNyAyOTIxNzgwMDAuMDY0NTA4MDQ2MTgyOTk1MjAwOTQ4NDMgLT4gLTYuMDA0NjIzNTU1OTM5MjcxNTMzNDY2ODI3NzAyNjg5NkUtNTMzIEluZXhhY3QgUm91bmRlZAorZHZpeDMyODUgZGl2aWRlaW50IC0xNzU0NDE4OTAxNzE0NS43MTAxMTc2MzMwMjE4MDA0MjZFLTUzNyAyOTIxNzgwMDAuMDY0NTA4MDQ2MTgyOTk1MjAwOTQ4NDMgLT4gLTAKK211bHgzMjg1IG11bHRpcGx5IC0xNzU0NDE4OTAxNzE0NS43MTAxMTc2MzMwMjE4MDA0MjZFLTUzNyAyOTIxNzgwMDAuMDY0NTA4MDQ2MTgyOTk1MjAwOTQ4NDMgLT4gLTUuMTI2MDI2MDU5NzgzMzQwNjQ2MTExMDEzNjk1MjQ1NkUtNTE2IEluZXhhY3QgUm91bmRlZAorcG93eDMyODUgcG93ZXIgLTE3NTQ0MTg5MDE3MTQ1LjcxMDExNzYzMzAyMTgwMDQyNkUtNTM3IDI5MjE3ODAwMCAtPiAwRS0xMDAzMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzI4NSByZW1haW5kZXIgLTE3NTQ0MTg5MDE3MTQ1LjcxMDExNzYzMzAyMTgwMDQyNkUtNTM3IDI5MjE3ODAwMC4wNjQ1MDgwNDYxODI5OTUyMDA5NDg0MyAtPiAtMS43NTQ0MTg5MDE3MTQ1NzEwMTE3NjMzMDIxODAwNDI2RS01MjQKK3N1YngzMjg1IHN1YnRyYWN0IC0xNzU0NDE4OTAxNzE0NS43MTAxMTc2MzMwMjE4MDA0MjZFLTUzNyAyOTIxNzgwMDAuMDY0NTA4MDQ2MTgyOTk1MjAwOTQ4NDMgLT4gLTI5MjE3ODAwMC4wNjQ1MDgwNDYxODI5OTUyMDA5NDg0MyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjg2IGFkZCAtNTA2NjUwLjk5Mzk1NjQ5OTA3MTM5MjA0MDUyNDQxNjMwIDExLjAxODQyNzUwMjAzMTY1MDE0ODk2MjA2NzM2NzE1OCAtPiAtNTA2NjM5Ljk3NTUyODk5NzAzOTc0MTg5MTU2MjM0ODkzIEluZXhhY3QgUm91bmRlZAorY29teDMyODYgY29tcGFyZSAtNTA2NjUwLjk5Mzk1NjQ5OTA3MTM5MjA0MDUyNDQxNjMwIDExLjAxODQyNzUwMjAzMTY1MDE0ODk2MjA2NzM2NzE1OCAtPiAtMQorZGl2eDMyODYgZGl2aWRlIC01MDY2NTAuOTkzOTU2NDk5MDcxMzkyMDQwNTI0NDE2MzAgMTEuMDE4NDI3NTAyMDMxNjUwMTQ4OTYyMDY3MzY3MTU4IC0+IC00NTk4Mi4xNTA3MDczNTYzMjkwMjc2OTg3MTcxODkxMDQgSW5leGFjdCBSb3VuZGVkCitkdml4MzI4NiBkaXZpZGVpbnQgLTUwNjY1MC45OTM5NTY0OTkwNzEzOTIwNDA1MjQ0MTYzMCAxMS4wMTg0Mjc1MDIwMzE2NTAxNDg5NjIwNjczNjcxNTggLT4gLTQ1OTgyCittdWx4MzI4NiBtdWx0aXBseSAtNTA2NjUwLjk5Mzk1NjQ5OTA3MTM5MjA0MDUyNDQxNjMwIDExLjAxODQyNzUwMjAzMTY1MDE0ODk2MjA2NzM2NzE1OCAtPiAtNTU4MjQ5Ny4yNDU3NDE5NjA3MzkyOTQwMjM0MjcxMjIyIEluZXhhY3QgUm91bmRlZAorcG93eDMyODYgcG93ZXIgLTUwNjY1MC45OTM5NTY0OTkwNzEzOTIwNDA1MjQ0MTYzMCAxMSAtPiAtNS42NDY3NDEyNjc4ODA5ODg1MzMzMzEzODE4MDc4ODI5RSs2MiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjg2IHJlbWFpbmRlciAtNTA2NjUwLjk5Mzk1NjQ5OTA3MTM5MjA0MDUyNDQxNjMwIDExLjAxODQyNzUwMjAzMTY1MDE0ODk2MjA2NzM2NzE1OCAtPiAtMS42NjA1NTgwNzk3MzQyNDI0NjY3NDI3Mzk2NDA4NDQKK3N1YngzMjg2IHN1YnRyYWN0IC01MDY2NTAuOTkzOTU2NDk5MDcxMzkyMDQwNTI0NDE2MzAgMTEuMDE4NDI3NTAyMDMxNjUwMTQ4OTYyMDY3MzY3MTU4IC0+IC01MDY2NjIuMDEyMzg0MDAxMTAzMDQyMTg5NDg2NDgzNjcgSW5leGFjdCBSb3VuZGVkCithZGR4MzI4NyBhZGQgNDg0NjgzNTE1OS41OTIyMzcyMzA3NjU2MDAwNzY5Mzk1RS0yNDEgLTg0LjAwMTg5MzA0MDg2NTg2NDU5MDEyMjMzMDgwMDc2OCAtPiAtODQuMDAxODkzMDQwODY1ODY0NTkwMTIyMzMwODAwNzY4IEluZXhhY3QgUm91bmRlZAorY29teDMyODcgY29tcGFyZSA0ODQ2ODM1MTU5LjU5MjIzNzIzMDc2NTYwMDA3NjkzOTVFLTI0MSAtODQuMDAxODkzMDQwODY1ODY0NTkwMTIyMzMwODAwNzY4IC0+IDEKK2RpdngzMjg3IGRpdmlkZSA0ODQ2ODM1MTU5LjU5MjIzNzIzMDc2NTYwMDA3NjkzOTVFLTI0MSAtODQuMDAxODkzMDQwODY1ODY0NTkwMTIyMzMwODAwNzY4IC0+IC01Ljc2OTkxMTgyNDc2NjAzNTc4MTQ2NDE4MTMyNjA1MjRFLTIzNCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjg3IGRpdmlkZWludCA0ODQ2ODM1MTU5LjU5MjIzNzIzMDc2NTYwMDA3NjkzOTVFLTI0MSAtODQuMDAxODkzMDQwODY1ODY0NTkwMTIyMzMwODAwNzY4IC0+IC0wCittdWx4MzI4NyBtdWx0aXBseSA0ODQ2ODM1MTU5LjU5MjIzNzIzMDc2NTYwMDA3NjkzOTVFLTI0MSAtODQuMDAxODkzMDQwODY1ODY0NTkwMTIyMzMwODAwNzY4IC0+IC00LjA3MTQzMzI4NjYyNzc1MTQ0ODExOTI4NTY5MjU3NzVFLTIzMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjg3IHBvd2VyIDQ4NDY4MzUxNTkuNTkyMjM3MjMwNzY1NjAwMDc2OTM5NUUtMjQxIC04NCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjg3IHJlbWFpbmRlciA0ODQ2ODM1MTU5LjU5MjIzNzIzMDc2NTYwMDA3NjkzOTVFLTI0MSAtODQuMDAxODkzMDQwODY1ODY0NTkwMTIyMzMwODAwNzY4IC0+IDQuODQ2ODM1MTU5NTkyMjM3MjMwNzY1NjAwMDc2OTM5NUUtMjMyCitzdWJ4MzI4NyBzdWJ0cmFjdCA0ODQ2ODM1MTU5LjU5MjIzNzIzMDc2NTYwMDA3NjkzOTVFLTI0MSAtODQuMDAxODkzMDQwODY1ODY0NTkwMTIyMzMwODAwNzY4IC0+IDg0LjAwMTg5MzA0MDg2NTg2NDU5MDEyMjMzMDgwMDc2OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjg4IGFkZCAtMzUuMDI5MzExMDEzODIyMjU5MzU4MTE2NTU2MTY0OTA4IC0zOTk0MzA4ODc4LjE5OTQ2NDUzMTM0MTQ1MzQyMDkxMjcgLT4gLTM5OTQzMDg5MTMuMjI4Nzc1NTQ1MTYzNzEyNzc5MDI5MyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjg4IGNvbXBhcmUgLTM1LjAyOTMxMTAxMzgyMjI1OTM1ODExNjU1NjE2NDkwOCAtMzk5NDMwODg3OC4xOTk0NjQ1MzEzNDE0NTM0MjA5MTI3IC0+IDEKK2RpdngzMjg4IGRpdmlkZSAtMzUuMDI5MzExMDEzODIyMjU5MzU4MTE2NTU2MTY0OTA4IC0zOTk0MzA4ODc4LjE5OTQ2NDUzMTM0MTQ1MzQyMDkxMjcgLT4gOC43Njk4MDUyNjA5MzIzMDA0NTQzNTM4MTYzMDYxNzc0RS05IEluZXhhY3QgUm91bmRlZAorZHZpeDMyODggZGl2aWRlaW50IC0zNS4wMjkzMTEwMTM4MjIyNTkzNTgxMTY1NTYxNjQ5MDggLTM5OTQzMDg4NzguMTk5NDY0NTMxMzQxNDUzNDIwOTEyNyAtPiAwCittdWx4MzI4OCBtdWx0aXBseSAtMzUuMDI5MzExMDEzODIyMjU5MzU4MTE2NTU2MTY0OTA4IC0zOTk0MzA4ODc4LjE5OTQ2NDUzMTM0MTQ1MzQyMDkxMjcgLT4gMTM5OTE3ODg3OTc5LjcyMDUzNjM3MjcyOTYxMTIwNjM5IEluZXhhY3QgUm91bmRlZAorcG93eDMyODggcG93ZXIgLTM1LjAyOTMxMTAxMzgyMjI1OTM1ODExNjU1NjE2NDkwOCAtNCAtPiA2LjY0MTYxMzgwNDA1MjIxMjQ2OTM0OTUxNzgyMTgwOTZFLTcgSW5leGFjdCBSb3VuZGVkCityZW14MzI4OCByZW1haW5kZXIgLTM1LjAyOTMxMTAxMzgyMjI1OTM1ODExNjU1NjE2NDkwOCAtMzk5NDMwODg3OC4xOTk0NjQ1MzEzNDE0NTM0MjA5MTI3IC0+IC0zNS4wMjkzMTEwMTM4MjIyNTkzNTgxMTY1NTYxNjQ5MDgKK3N1YngzMjg4IHN1YnRyYWN0IC0zNS4wMjkzMTEwMTM4MjIyNTkzNTgxMTY1NTYxNjQ5MDggLTM5OTQzMDg4NzguMTk5NDY0NTMxMzQxNDUzNDIwOTEyNyAtPiAzOTk0MzA4ODQzLjE3MDE1MzUxNzUxOTE5NDA2Mjc5NjEgSW5leGFjdCBSb3VuZGVkCithZGR4MzI4OSBhZGQgNzYwNjY2Mzc1MC42NzM1MjY1MjMzMDQ0NDIwODg3MDE4RSsxNjYgLTU0OTE4MTQ2MzkuNDQ4NDU2NTQxODI4NDY4NjEyNzU1MkUrMzY1IC0+IC01LjQ5MTgxNDYzOTQ0ODQ1NjU0MTgyODQ2ODYxMjc1NTJFKzM3NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjg5IGNvbXBhcmUgNzYwNjY2Mzc1MC42NzM1MjY1MjMzMDQ0NDIwODg3MDE4RSsxNjYgLTU0OTE4MTQ2MzkuNDQ4NDU2NTQxODI4NDY4NjEyNzU1MkUrMzY1IC0+IDEKK2RpdngzMjg5IGRpdmlkZSA3NjA2NjYzNzUwLjY3MzUyNjUyMzMwNDQ0MjA4ODcwMThFKzE2NiAtNTQ5MTgxNDYzOS40NDg0NTY1NDE4Mjg0Njg2MTI3NTUyRSszNjUgLT4gLTEuMzg1MDkxMTMxMDg2OTQ4Nzg5NTk0NzczMzA5MDIwNEUtMTk5IEluZXhhY3QgUm91bmRlZAorZHZpeDMyODkgZGl2aWRlaW50IDc2MDY2NjM3NTAuNjczNTI2NTIzMzA0NDQyMDg4NzAxOEUrMTY2IC01NDkxODE0NjM5LjQ0ODQ1NjU0MTgyODQ2ODYxMjc1NTJFKzM2NSAtPiAtMAorbXVseDMyODkgbXVsdGlwbHkgNzYwNjY2Mzc1MC42NzM1MjY1MjMzMDQ0NDIwODg3MDE4RSsxNjYgLTU0OTE4MTQ2MzkuNDQ4NDU2NTQxODI4NDY4NjEyNzU1MkUrMzY1IC0+IC00LjE3NzQzODczNDMzMTA3NzcxOTA5MTcxMjgwMDY1ODlFKzU1MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjg5IHBvd2VyIDc2MDY2NjM3NTAuNjczNTI2NTIzMzA0NDQyMDg4NzAxOEUrMTY2IC01IC0+IDMuOTI2NzEwNjk3ODg4NzM0NjM3Mzk1NzMxNDgxODE3OEUtODgwIEluZXhhY3QgUm91bmRlZAorcmVteDMyODkgcmVtYWluZGVyIDc2MDY2NjM3NTAuNjczNTI2NTIzMzA0NDQyMDg4NzAxOEUrMTY2IC01NDkxODE0NjM5LjQ0ODQ1NjU0MTgyODQ2ODYxMjc1NTJFKzM2NSAtPiA3LjYwNjY2Mzc1MDY3MzUyNjUyMzMwNDQ0MjA4ODcwMThFKzE3NQorc3VieDMyODkgc3VidHJhY3QgNzYwNjY2Mzc1MC42NzM1MjY1MjMzMDQ0NDIwODg3MDE4RSsxNjYgLTU0OTE4MTQ2MzkuNDQ4NDU2NTQxODI4NDY4NjEyNzU1MkUrMzY1IC0+IDUuNDkxODE0NjM5NDQ4NDU2NTQxODI4NDY4NjEyNzU1MkUrMzc0IEluZXhhY3QgUm91bmRlZAorYWRkeDMyOTAgYWRkIC0yNTY3Ny44Mjk2NjA4MzE3NDEyNzQyMDczMjY2OTcwNTJFLTE2MyAtOTQxMzUzOTUxMjQxOTMwNDg1NjAxNzI3MDUwODIwMjlFLTg2MiAtPiAtMi41Njc3ODI5NjYwODMxNzQxMjc0MjA3MzI2Njk3MDUyRS0xNTkgSW5leGFjdCBSb3VuZGVkCitjb214MzI5MCBjb21wYXJlIC0yNTY3Ny44Mjk2NjA4MzE3NDEyNzQyMDczMjY2OTcwNTJFLTE2MyAtOTQxMzUzOTUxMjQxOTMwNDg1NjAxNzI3MDUwODIwMjlFLTg2MiAtPiAtMQorZGl2eDMyOTAgZGl2aWRlIC0yNTY3Ny44Mjk2NjA4MzE3NDEyNzQyMDczMjY2OTcwNTJFLTE2MyAtOTQxMzUzOTUxMjQxOTMwNDg1NjAxNzI3MDUwODIwMjlFLTg2MiAtPiAyLjcyNzc1NTAxOTk4NTMwMDk3MDg0OTMxNjcyOTk4MzhFKzY3MSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjkwIGRpdmlkZWludCAtMjU2NzcuODI5NjYwODMxNzQxMjc0MjA3MzI2Njk3MDUyRS0xNjMgLTk0MTM1Mzk1MTI0MTkzMDQ4NTYwMTcyNzA1MDgyMDI5RS04NjIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMjkwIG11bHRpcGx5IC0yNTY3Ny44Mjk2NjA4MzE3NDEyNzQyMDczMjY2OTcwNTJFLTE2MyAtOTQxMzUzOTUxMjQxOTMwNDg1NjAxNzI3MDUwODIwMjlFLTg2MiAtPiAyLjQxNzE5MjY0MTA1NDExOTkzOTM3MjgyOTQ3NjI1NTlFLTk4OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjkwIHBvd2VyIC0yNTY3Ny44Mjk2NjA4MzE3NDEyNzQyMDczMjY2OTcwNTJFLTE2MyAtOSAtPiAtMi4wNjA1MTIxNDIwNjgyNzY0ODk3ODY3MjIxOTkyMTc0RSsxNDI3IEluZXhhY3QgUm91bmRlZAorcmVteDMyOTAgcmVtYWluZGVyIC0yNTY3Ny44Mjk2NjA4MzE3NDEyNzQyMDczMjY2OTcwNTJFLTE2MyAtOTQxMzUzOTUxMjQxOTMwNDg1NjAxNzI3MDUwODIwMjlFLTg2MiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyOTAgc3VidHJhY3QgLTI1Njc3LjgyOTY2MDgzMTc0MTI3NDIwNzMyNjY5NzA1MkUtMTYzIC05NDEzNTM5NTEyNDE5MzA0ODU2MDE3MjcwNTA4MjAyOUUtODYyIC0+IC0yLjU2Nzc4Mjk2NjA4MzE3NDEyNzQyMDczMjY2OTcwNTJFLTE1OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjkxIGFkZCA5NzI3MTU3NjA5NC40NTY0MDY3Mjk2NzE3MjkyMjQ4MjcgLTEuNTQxMjU2MzgzNzU0MDgxMDc5MzY5Nzk1NTA2MzI5NUUrNTU0IC0+IC0xLjU0MTI1NjM4Mzc1NDA4MTA3OTM2OTc5NTUwNjMyOTVFKzU1NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjkxIGNvbXBhcmUgOTcyNzE1NzYwOTQuNDU2NDA2NzI5NjcxNzI5MjI0ODI3IC0xLjU0MTI1NjM4Mzc1NDA4MTA3OTM2OTc5NTUwNjMyOTVFKzU1NCAtPiAxCitkaXZ4MzI5MSBkaXZpZGUgOTcyNzE1NzYwOTQuNDU2NDA2NzI5NjcxNzI5MjI0ODI3IC0xLjU0MTI1NjM4Mzc1NDA4MTA3OTM2OTc5NTUwNjMyOTVFKzU1NCAtPiAtNi4zMTExODcyMzEzODkwNjQ2MTQ0NDczNjUyNjQ1MDMwRS01NDQgSW5leGFjdCBSb3VuZGVkCitkdml4MzI5MSBkaXZpZGVpbnQgOTcyNzE1NzYwOTQuNDU2NDA2NzI5NjcxNzI5MjI0ODI3IC0xLjU0MTI1NjM4Mzc1NDA4MTA3OTM2OTc5NTUwNjMyOTVFKzU1NCAtPiAtMAorbXVseDMyOTEgbXVsdGlwbHkgOTcyNzE1NzYwOTQuNDU2NDA2NzI5NjcxNzI5MjI0ODI3IC0xLjU0MTI1NjM4Mzc1NDA4MTA3OTM2OTc5NTUwNjMyOTVFKzU1NCAtPiAtMS40OTkyMDQzNzYxMzQwMTgwMjg4MDY1OTU5MzAwMDkwRSs1NjUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI5MSBwb3dlciA5NzI3MTU3NjA5NC40NTY0MDY3Mjk2NzE3MjkyMjQ4MjcgLTIgLT4gMS4wNTY4ODU4NzY1ODUyMDczMTgxMzUyMzA5NDAxMzQzRS0yMiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjkxIHJlbWFpbmRlciA5NzI3MTU3NjA5NC40NTY0MDY3Mjk2NzE3MjkyMjQ4MjcgLTEuNTQxMjU2MzgzNzU0MDgxMDc5MzY5Nzk1NTA2MzI5NUUrNTU0IC0+IDk3MjcxNTc2MDk0LjQ1NjQwNjcyOTY3MTcyOTIyNDgyNworc3VieDMyOTEgc3VidHJhY3QgOTcyNzE1NzYwOTQuNDU2NDA2NzI5NjcxNzI5MjI0ODI3IC0xLjU0MTI1NjM4Mzc1NDA4MTA3OTM2OTc5NTUwNjMyOTVFKzU1NCAtPiAxLjU0MTI1NjM4Mzc1NDA4MTA3OTM2OTc5NTUwNjMyOTVFKzU1NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjkyIGFkZCA0MTEzOTc4OTg5NC40MDE4MjY5MTU3NTczOTE3Nzc1NjMgLTEuODcyOTkyMDMwNTY3MTA1Nzk1NzE1NjE1OTY5MDgyM0UtMDIwIC0+IDQxMTM5Nzg5ODk0LjQwMTgyNjkxNTc1NzM5MTc3NzU0NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjkyIGNvbXBhcmUgNDExMzk3ODk4OTQuNDAxODI2OTE1NzU3MzkxNzc3NTYzIC0xLjg3Mjk5MjAzMDU2NzEwNTc5NTcxNTYxNTk2OTA4MjNFLTAyMCAtPiAxCitkaXZ4MzI5MiBkaXZpZGUgNDExMzk3ODk4OTQuNDAxODI2OTE1NzU3MzkxNzc3NTYzIC0xLjg3Mjk5MjAzMDU2NzEwNTc5NTcxNTYxNTk2OTA4MjNFLTAyMCAtPiAtMjE5NjQ3NDM2OTUxMTYyNTM4OTI4OTUwNjQ2MTU1MS4wIEluZXhhY3QgUm91bmRlZAorZHZpeDMyOTIgZGl2aWRlaW50IDQxMTM5Nzg5ODk0LjQwMTgyNjkxNTc1NzM5MTc3NzU2MyAtMS44NzI5OTIwMzA1NjcxMDU3OTU3MTU2MTU5NjkwODIzRS0wMjAgLT4gLTIxOTY0NzQzNjk1MTE2MjUzODkyODk1MDY0NjE1NTEKK211bHgzMjkyIG11bHRpcGx5IDQxMTM5Nzg5ODk0LjQwMTgyNjkxNTc1NzM5MTc3NzU2MyAtMS44NzI5OTIwMzA1NjcxMDU3OTU3MTU2MTU5NjkwODIzRS0wMjAgLT4gLTcuNzA1NDQ5ODYxMTQxOTc3NjcxNDI5MTA4MDkyODYwMUUtMTAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI5MiBwb3dlciA0MTEzOTc4OTg5NC40MDE4MjY5MTU3NTczOTE3Nzc1NjMgLTIgLT4gNS45MDg0ODEyNDQyNzQxMDkxNTUwODkxNDUxMDY5OTE5RS0yMiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzMjkyIHJlbWFpbmRlciA0MTEzOTc4OTg5NC40MDE4MjY5MTU3NTczOTE3Nzc1NjMgLTEuODcyOTkyMDMwNTY3MTA1Nzk1NzE1NjE1OTY5MDgyM0UtMDIwIC0+IDYuOTgxNDEwMjI2NDA1NDQwMTg5MzUxMDI5NTM1MjdFLTIyCitzdWJ4MzI5MiBzdWJ0cmFjdCA0MTEzOTc4OTg5NC40MDE4MjY5MTU3NTczOTE3Nzc1NjMgLTEuODcyOTkyMDMwNTY3MTA1Nzk1NzE1NjE1OTY5MDgyM0UtMDIwIC0+IDQxMTM5Nzg5ODk0LjQwMTgyNjkxNTc1NzM5MTc3NzU4MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjkzIGFkZCAtODMzMTA4MzEyODcyNDEuNzc3NTk4Njk2ODUzNDk4MTQ5IC01NDc5OTgyNTAzMy43OTcxMDA0MTgxNjI5ODUxMDM1MTlFLTMzMCAtPiAtODMzMTA4MzEyODcyNDEuNzc3NTk4Njk2ODUzNDk4MTQ5IEluZXhhY3QgUm91bmRlZAorY29teDMyOTMgY29tcGFyZSAtODMzMTA4MzEyODcyNDEuNzc3NTk4Njk2ODUzNDk4MTQ5IC01NDc5OTgyNTAzMy43OTcxMDA0MTgxNjI5ODUxMDM1MTlFLTMzMCAtPiAtMQorZGl2eDMyOTMgZGl2aWRlIC04MzMxMDgzMTI4NzI0MS43Nzc1OTg2OTY4NTM0OTgxNDkgLTU0Nzk5ODI1MDMzLjc5NzEwMDQxODE2Mjk4NTEwMzUxOUUtMzMwIC0+IDEuNTIwMjc1NDk3ODg0NTQzODYzNjYwNTE3MDg1NzQ3OEUrMzMzIEluZXhhY3QgUm91bmRlZAorZHZpeDMyOTMgZGl2aWRlaW50IC04MzMxMDgzMTI4NzI0MS43Nzc1OTg2OTY4NTM0OTgxNDkgLTU0Nzk5ODI1MDMzLjc5NzEwMDQxODE2Mjk4NTEwMzUxOUUtMzMwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzI5MyBtdWx0aXBseSAtODMzMTA4MzEyODcyNDEuNzc3NTk4Njk2ODUzNDk4MTQ5IC01NDc5OTgyNTAzMy43OTcxMDA0MTgxNjI5ODUxMDM1MTlFLTMzMCAtPiA0LjU2NTQxODk3Nzk2MTAzODY3NjAzMzA1Mjc4Mzk1ODhFLTMwNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjkzIHBvd2VyIC04MzMxMDgzMTI4NzI0MS43Nzc1OTg2OTY4NTM0OTgxNDkgLTUgLT4gLTIuNDkxNjgyMjYwNjY4MjYyNDgyNzkwMDU4MTcyODM4N0UtNzAgSW5leGFjdCBSb3VuZGVkCityZW14MzI5MyByZW1haW5kZXIgLTgzMzEwODMxMjg3MjQxLjc3NzU5ODY5Njg1MzQ5ODE0OSAtNTQ3OTk4MjUwMzMuNzk3MTAwNDE4MTYyOTg1MTAzNTE5RS0zMzAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMjkzIHN1YnRyYWN0IC04MzMxMDgzMTI4NzI0MS43Nzc1OTg2OTY4NTM0OTgxNDkgLTU0Nzk5ODI1MDMzLjc5NzEwMDQxODE2Mjk4NTEwMzUxOUUtMzMwIC0+IC04MzMxMDgzMTI4NzI0MS43Nzc1OTg2OTY4NTM0OTgxNDkgSW5leGFjdCBSb3VuZGVkCithZGR4MzI5NCBhZGQgNDUwNjY1MzQ2MS40NDE0OTc0MjMzNjc4MzMxNzcxMTY5IC03NDk1NTQ3MC45Nzc2NTMwMzgwMTAwMzE0NTcxODE5NTdFLTg4NyAtPiA0NTA2NjUzNDYxLjQ0MTQ5NzQyMzM2NzgzMzE3NzExNjkgSW5leGFjdCBSb3VuZGVkCitjb214MzI5NCBjb21wYXJlIDQ1MDY2NTM0NjEuNDQxNDk3NDIzMzY3ODMzMTc3MTE2OSAtNzQ5NTU0NzAuOTc3NjUzMDM4MDEwMDMxNDU3MTgxOTU3RS04ODcgLT4gMQorZGl2eDMyOTQgZGl2aWRlIDQ1MDY2NTM0NjEuNDQxNDk3NDIzMzY3ODMzMTc3MTE2OSAtNzQ5NTU0NzAuOTc3NjUzMDM4MDEwMDMxNDU3MTgxOTU3RS04ODcgLT4gLTYuMDEyNDQwOTkwMTc4MTQ5MDA1NDQzODIyMDA0ODYyOUUrODg4IEluZXhhY3QgUm91bmRlZAorZHZpeDMyOTQgZGl2aWRlaW50IDQ1MDY2NTM0NjEuNDQxNDk3NDIzMzY3ODMzMTc3MTE2OSAtNzQ5NTU0NzAuOTc3NjUzMDM4MDEwMDMxNDU3MTgxOTU3RS04ODcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMjk0IG11bHRpcGx5IDQ1MDY2NTM0NjEuNDQxNDk3NDIzMzY3ODMzMTc3MTE2OSAtNzQ5NTU0NzAuOTc3NjUzMDM4MDEwMDMxNDU3MTgxOTU3RS04ODcgLT4gLTMuMzc3OTgzMzI3MzU0MTc3NjQ3MDkwMjkwMzUxMjk0OUUtODcwIEluZXhhY3QgUm91bmRlZAorcG93eDMyOTQgcG93ZXIgNDUwNjY1MzQ2MS40NDE0OTc0MjMzNjc4MzMxNzcxMTY5IC03IC0+IDIuNjQ4NjI3MjkxMTQ4NjQ2MTEwMjczNTQxMjQ2MzE4OUUtNjggSW5leGFjdCBSb3VuZGVkCityZW14MzI5NCByZW1haW5kZXIgNDUwNjY1MzQ2MS40NDE0OTc0MjMzNjc4MzMxNzcxMTY5IC03NDk1NTQ3MC45Nzc2NTMwMzgwMTAwMzE0NTcxODE5NTdFLTg4NyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDMyOTQgc3VidHJhY3QgNDUwNjY1MzQ2MS40NDE0OTc0MjMzNjc4MzMxNzcxMTY5IC03NDk1NTQ3MC45Nzc2NTMwMzgwMTAwMzE0NTcxODE5NTdFLTg4NyAtPiA0NTA2NjUzNDYxLjQ0MTQ5NzQyMzM2NzgzMzE3NzExNjkgSW5leGFjdCBSb3VuZGVkCithZGR4MzI5NSBhZGQgMjM3NzcuODU3OTUxMTE0OTY3Njg0NzY3NjA5NDAxNjI2IDcyMDc2MC4wMzg5NzE0NDE1NzAxMjMwMTM4NTIyNzUyOCAtPiA3NDQ1MzcuODk2OTIyNTU2NTM3ODA3NzgxNDYxNjc2OTEgSW5leGFjdCBSb3VuZGVkCitjb214MzI5NSBjb21wYXJlIDIzNzc3Ljg1Nzk1MTExNDk2NzY4NDc2NzYwOTQwMTYyNiA3MjA3NjAuMDM4OTcxNDQxNTcwMTIzMDEzODUyMjc1MjggLT4gLTEKK2RpdngzMjk1IGRpdmlkZSAyMzc3Ny44NTc5NTExMTQ5Njc2ODQ3Njc2MDk0MDE2MjYgNzIwNzYwLjAzODk3MTQ0MTU3MDEyMzAxMzg1MjI3NTI4IC0+IDAuMDMyOTg5OTc4MTY5NDk4ODA4Mjc1MzA4MDM5MDM0Nzk1IEluZXhhY3QgUm91bmRlZAorZHZpeDMyOTUgZGl2aWRlaW50IDIzNzc3Ljg1Nzk1MTExNDk2NzY4NDc2NzYwOTQwMTYyNiA3MjA3NjAuMDM4OTcxNDQxNTcwMTIzMDEzODUyMjc1MjggLT4gMAorbXVseDMyOTUgbXVsdGlwbHkgMjM3NzcuODU3OTUxMTE0OTY3Njg0NzY3NjA5NDAxNjI2IDcyMDc2MC4wMzg5NzE0NDE1NzAxMjMwMTM4NTIyNzUyOCAtPiAxNzEzODEyOTgyMy41MDMwMjU5MTMwMzQ5ODc1MzcwOTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzI5NSBwb3dlciAyMzc3Ny44NTc5NTExMTQ5Njc2ODQ3Njc2MDk0MDE2MjYgNzIwNzYwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDMyOTUgcmVtYWluZGVyIDIzNzc3Ljg1Nzk1MTExNDk2NzY4NDc2NzYwOTQwMTYyNiA3MjA3NjAuMDM4OTcxNDQxNTcwMTIzMDEzODUyMjc1MjggLT4gMjM3NzcuODU3OTUxMTE0OTY3Njg0NzY3NjA5NDAxNjI2CitzdWJ4MzI5NSBzdWJ0cmFjdCAyMzc3Ny44NTc5NTExMTQ5Njc2ODQ3Njc2MDk0MDE2MjYgNzIwNzYwLjAzODk3MTQ0MTU3MDEyMzAxMzg1MjI3NTI4IC0+IC02OTY5ODIuMTgxMDIwMzI2NjAyNDM4MjQ2MjQyODczNjUgSW5leGFjdCBSb3VuZGVkCithZGR4MzI5NiBhZGQgLTIxMzM3ODUzMzIzOTgwODU4MDU1MjkyNDY5NjExOTQ4IDYwODAyNzI4NDAuMzA3MTQ5MDQ0NTI1Njc4Njk4MjEwMEUrNTMyIC0+IDYuMDgwMjcyODQwMzA3MTQ5MDQ0NTI1Njc4Njk4MjEwMEUrNTQxIEluZXhhY3QgUm91bmRlZAorY29teDMyOTYgY29tcGFyZSAtMjEzMzc4NTMzMjM5ODA4NTgwNTUyOTI0Njk2MTE5NDggNjA4MDI3Mjg0MC4zMDcxNDkwNDQ1MjU2Nzg2OTgyMTAwRSs1MzIgLT4gLTEKK2RpdngzMjk2IGRpdmlkZSAtMjEzMzc4NTMzMjM5ODA4NTgwNTUyOTI0Njk2MTE5NDggNjA4MDI3Mjg0MC4zMDcxNDkwNDQ1MjU2Nzg2OTgyMTAwRSs1MzIgLT4gLTMuNTA5MzU3ODY2NzI3NDAyMDEyMzc4ODUxNDA2OTg4NUUtNTExIEluZXhhY3QgUm91bmRlZAorZHZpeDMyOTYgZGl2aWRlaW50IC0yMTMzNzg1MzMyMzk4MDg1ODA1NTI5MjQ2OTYxMTk0OCA2MDgwMjcyODQwLjMwNzE0OTA0NDUyNTY3ODY5ODIxMDBFKzUzMiAtPiAtMAorbXVseDMyOTYgbXVsdGlwbHkgLTIxMzM3ODUzMzIzOTgwODU4MDU1MjkyNDY5NjExOTQ4IDYwODAyNzI4NDAuMzA3MTQ5MDQ0NTI1Njc4Njk4MjEwMEUrNTMyIC0+IC0xLjI5NzM5OTcwMDM2MjU4NDMzMTc0MTc5ODE5MDIxOThFKzU3MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjk2IHBvd2VyIC0yMTMzNzg1MzMyMzk4MDg1ODA1NTI5MjQ2OTYxMTk0OCA2IC0+IDkuNDM4NTI5ODMyMTMwNDk3MDMwNjE4MDY1MjA5Nzg3NEUrMTg3IEluZXhhY3QgUm91bmRlZAorcmVteDMyOTYgcmVtYWluZGVyIC0yMTMzNzg1MzMyMzk4MDg1ODA1NTI5MjQ2OTYxMTk0OCA2MDgwMjcyODQwLjMwNzE0OTA0NDUyNTY3ODY5ODIxMDBFKzUzMiAtPiAtMjEzMzc4NTMzMjM5ODA4NTgwNTUyOTI0Njk2MTE5NDgKK3N1YngzMjk2IHN1YnRyYWN0IC0yMTMzNzg1MzMyMzk4MDg1ODA1NTI5MjQ2OTYxMTk0OCA2MDgwMjcyODQwLjMwNzE0OTA0NDUyNTY3ODY5ODIxMDBFKzUzMiAtPiAtNi4wODAyNzI4NDAzMDcxNDkwNDQ1MjU2Nzg2OTgyMTAwRSs1NDEgSW5leGFjdCBSb3VuZGVkCithZGR4MzI5NyBhZGQgLTgxODQwOTIzOC4wNDIzODkzNDM5ODQ5NzQzODU2OTQ3IDc1Ni4zOTE1NjI2NTk3Mjc1MzI1OTI2NzA2OTE1ODc2MCAtPiAtODE4NDA4NDgxLjY1MDgyNjY4NDI1NzQ0MTc5MzAyNDAxIEluZXhhY3QgUm91bmRlZAorY29teDMyOTcgY29tcGFyZSAtODE4NDA5MjM4LjA0MjM4OTM0Mzk4NDk3NDM4NTY5NDcgNzU2LjM5MTU2MjY1OTcyNzUzMjU5MjY3MDY5MTU4NzYwIC0+IC0xCitkaXZ4MzI5NyBkaXZpZGUgLTgxODQwOTIzOC4wNDIzODkzNDM5ODQ5NzQzODU2OTQ3IDc1Ni4zOTE1NjI2NTk3Mjc1MzI1OTI2NzA2OTE1ODc2MCAtPiAtMTA4MTk5MS40OTU0NjkwNzUyNjc2NDk0MTI5NDkzNDAzIEluZXhhY3QgUm91bmRlZAorZHZpeDMyOTcgZGl2aWRlaW50IC04MTg0MDkyMzguMDQyMzg5MzQzOTg0OTc0Mzg1Njk0NyA3NTYuMzkxNTYyNjU5NzI3NTMyNTkyNjcwNjkxNTg3NjAgLT4gLTEwODE5OTEKK211bHgzMjk3IG11bHRpcGx5IC04MTg0MDkyMzguMDQyMzg5MzQzOTg0OTc0Mzg1Njk0NyA3NTYuMzkxNTYyNjU5NzI3NTMyNTkyNjcwNjkxNTg3NjAgLT4gLTYxOTAzNzg0MjQ1OC4wMzk4MDUzNzM3MDMyODI1MjgxNyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzMjk3IHBvd2VyIC04MTg0MDkyMzguMDQyMzg5MzQzOTg0OTc0Mzg1Njk0NyA3NTYgLT4gMS42MDU4ODgzOTQ2MzczMjMyNzUwOTk1NTQzNTczNDYxRSs2NzM4IEluZXhhY3QgUm91bmRlZAorcmVteDMyOTcgcmVtYWluZGVyIC04MTg0MDkyMzguMDQyMzg5MzQzOTg0OTc0Mzg1Njk0NyA3NTYuMzkxNTYyNjU5NzI3NTMyNTkyNjcwNjkxNTg3NjAgLT4gLTM3NC43Njg2MjgwOTEyNjc0OTgwMzE0MzMxNDEwODg0MAorc3VieDMyOTcgc3VidHJhY3QgLTgxODQwOTIzOC4wNDIzODkzNDM5ODQ5NzQzODU2OTQ3IDc1Ni4zOTE1NjI2NTk3Mjc1MzI1OTI2NzA2OTE1ODc2MCAtPiAtODE4NDA5OTk0LjQzMzk1MjAwMzcxMjUwNjk3ODM2NTM5IEluZXhhY3QgUm91bmRlZAorYWRkeDMyOTggYWRkIDQ3NTY3MzgwMzg0OTQzLjg3MDEzNjAwMjg2MTU1MDQ2IDY1LjA4NDcwOTM3NDkwODI3NTgyNjk0MjA3NjQ4MDMyNiAtPiA0NzU2NzM4MDM4NTAwOC45NTQ4NDUzNzc3Njk4MjYyODcgSW5leGFjdCBSb3VuZGVkCitjb214MzI5OCBjb21wYXJlIDQ3NTY3MzgwMzg0OTQzLjg3MDEzNjAwMjg2MTU1MDQ2IDY1LjA4NDcwOTM3NDkwODI3NTgyNjk0MjA3NjQ4MDMyNiAtPiAxCitkaXZ4MzI5OCBkaXZpZGUgNDc1NjczODAzODQ5NDMuODcwMTM2MDAyODYxNTUwNDYgNjUuMDg0NzA5Mzc0OTA4Mjc1ODI2OTQyMDc2NDgwMzI2IC0+IDczMDg1MzM4ODQ4MC44NjI0NzY5MDQ3NDMwMzQ5Mzk3MiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjk4IGRpdmlkZWludCA0NzU2NzM4MDM4NDk0My44NzAxMzYwMDI4NjE1NTA0NiA2NS4wODQ3MDkzNzQ5MDgyNzU4MjY5NDIwNzY0ODAzMjYgLT4gNzMwODUzMzg4NDgwCittdWx4MzI5OCBtdWx0aXBseSA0NzU2NzM4MDM4NDk0My44NzAxMzYwMDI4NjE1NTA0NiA2NS4wODQ3MDkzNzQ5MDgyNzU4MjY5NDIwNzY0ODAzMjYgLT4gMzA5NTkwOTEyODA3OTc4NC4zMzQ4NTkxNDcyOTk5NDY4IEluZXhhY3QgUm91bmRlZAorcG93eDMyOTggcG93ZXIgNDc1NjczODAzODQ5NDMuODcwMTM2MDAyODYxNTUwNDYgNjUgLT4gMS4wNTk0OTgyODc2NzYzMjE0MzAxMDQyNDM3NDgyNjM0RSs4ODkgSW5leGFjdCBSb3VuZGVkCityZW14MzI5OCByZW1haW5kZXIgNDc1NjczODAzODQ5NDMuODcwMTM2MDAyODYxNTUwNDYgNjUuMDg0NzA5Mzc0OTA4Mjc1ODI2OTQyMDc2NDgwMzI2IC0+IDU2LjEzNDA1ODY4Nzc3MDg3ODEyNjQzMDg0NDk1NTUyMAorc3VieDMyOTggc3VidHJhY3QgNDc1NjczODAzODQ5NDMuODcwMTM2MDAyODYxNTUwNDYgNjUuMDg0NzA5Mzc0OTA4Mjc1ODI2OTQyMDc2NDgwMzI2IC0+IDQ3NTY3MzgwMzg0ODc4Ljc4NTQyNjYyNzk1MzI3NDYzMyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzMjk5IGFkZCAtMjk2NjE1NTQ0LjA1ODk3OTg0NTQ1MTI3MTE1MjkwMjUxIC01NDE2MTE1LjQzMTUwNTM1MzYwMTQwMTY0NTA5NzMyNjQgLT4gLTMwMjAzMTY1OS40OTA0ODUxOTkwNTI2NzI3OTc5OTk4NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzMjk5IGNvbXBhcmUgLTI5NjYxNTU0NC4wNTg5Nzk4NDU0NTEyNzExNTI5MDI1MSAtNTQxNjExNS40MzE1MDUzNTM2MDE0MDE2NDUwOTczMjY0IC0+IC0xCitkaXZ4MzI5OSBkaXZpZGUgLTI5NjYxNTU0NC4wNTg5Nzk4NDU0NTEyNzExNTI5MDI1MSAtNTQxNjExNS40MzE1MDUzNTM2MDE0MDE2NDUwOTczMjY0IC0+IDU0Ljc2NTM2NjAyODQ5NjY2NDUzMDY4ODI1OTI3MjU5MSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzMjk5IGRpdmlkZWludCAtMjk2NjE1NTQ0LjA1ODk3OTg0NTQ1MTI3MTE1MjkwMjUxIC01NDE2MTE1LjQzMTUwNTM1MzYwMTQwMTY0NTA5NzMyNjQgLT4gNTQKK211bHgzMjk5IG11bHRpcGx5IC0yOTY2MTU1NDQuMDU4OTc5ODQ1NDUxMjcxMTUyOTAyNTEgLTU0MTYxMTUuNDMxNTA1MzUzNjAxNDAxNjQ1MDk3MzI2NCAtPiAxNjA2NTA0MDI1NDAyMTk2Ljg0ODQ4ODUzODY1MDE0NzggSW5leGFjdCBSb3VuZGVkCitwb3d4MzI5OSBwb3dlciAtMjk2NjE1NTQ0LjA1ODk3OTg0NTQ1MTI3MTE1MjkwMjUxIC01NDE2MTE1IC0+IC0wRS0xMDAzMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzI5OSByZW1haW5kZXIgLTI5NjYxNTU0NC4wNTg5Nzk4NDU0NTEyNzExNTI5MDI1MSAtNTQxNjExNS40MzE1MDUzNTM2MDE0MDE2NDUwOTczMjY0IC0+IC00MTQ1MzEwLjc1NzY5MDc1MDk3NTU4MjMxNzY0Njg4NDQKK3N1YngzMjk5IHN1YnRyYWN0IC0yOTY2MTU1NDQuMDU4OTc5ODQ1NDUxMjcxMTUyOTAyNTEgLTU0MTYxMTUuNDMxNTA1MzUzNjAxNDAxNjQ1MDk3MzI2NCAtPiAtMjkxMTk5NDI4LjYyNzQ3NDQ5MTg0OTg2OTUwNzgwNTE4IEluZXhhY3QgUm91bmRlZAorYWRkeDMzMDAgYWRkIDYxMzkxNzA1OTE0LjA0NjcwNzE4MDY1MjE4NTI0NzU4NEUrNzM5IC02NzU5ODIwODc3MjEuOTE4NTY0NTYxMjUyNDIyOTczNDYgLT4gNi4xMzkxNzA1OTE0MDQ2NzA3MTgwNjUyMTg1MjQ3NTg0RSs3NDkgSW5leGFjdCBSb3VuZGVkCitjb214MzMwMCBjb21wYXJlIDYxMzkxNzA1OTE0LjA0NjcwNzE4MDY1MjE4NTI0NzU4NEUrNzM5IC02NzU5ODIwODc3MjEuOTE4NTY0NTYxMjUyNDIyOTczNDYgLT4gMQorZGl2eDMzMDAgZGl2aWRlIDYxMzkxNzA1OTE0LjA0NjcwNzE4MDY1MjE4NTI0NzU4NEUrNzM5IC02NzU5ODIwODc3MjEuOTE4NTY0NTYxMjUyNDIyOTczNDYgLT4gLTkuMDgxODUzOTQ2ODkwNjI0ODU5MzY5OTcwMDA0MDA2OEUrNzM3IEluZXhhY3QgUm91bmRlZAorZHZpeDMzMDAgZGl2aWRlaW50IDYxMzkxNzA1OTE0LjA0NjcwNzE4MDY1MjE4NTI0NzU4NEUrNzM5IC02NzU5ODIwODc3MjEuOTE4NTY0NTYxMjUyNDIyOTczNDYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzMzAwIG11bHRpcGx5IDYxMzkxNzA1OTE0LjA0NjcwNzE4MDY1MjE4NTI0NzU4NEUrNzM5IC02NzU5ODIwODc3MjEuOTE4NTY0NTYxMjUyNDIyOTczNDYgLT4gLTQuMTQ5OTY5MzUzMjU4NzM0Nzk0NDg5MDMwMDE3NjI5MEUrNzYxIEluZXhhY3QgUm91bmRlZAorcG93eDMzMDAgcG93ZXIgNjEzOTE3MDU5MTQuMDQ2NzA3MTgwNjUyMTg1MjQ3NTg0RSs3MzkgLTcgLT4gMy4wNDI1MTA1MjkxMjEwOTQ3NDczNDIwOTk5ODkwMTI0RS01MjQ5IEluZXhhY3QgUm91bmRlZAorcmVteDMzMDAgcmVtYWluZGVyIDYxMzkxNzA1OTE0LjA0NjcwNzE4MDY1MjE4NTI0NzU4NEUrNzM5IC02NzU5ODIwODc3MjEuOTE4NTY0NTYxMjUyNDIyOTczNDYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzMzAwIHN1YnRyYWN0IDYxMzkxNzA1OTE0LjA0NjcwNzE4MDY1MjE4NTI0NzU4NEUrNzM5IC02NzU5ODIwODc3MjEuOTE4NTY0NTYxMjUyNDIyOTczNDYgLT4gNi4xMzkxNzA1OTE0MDQ2NzA3MTgwNjUyMTg1MjQ3NTg0RSs3NDkgSW5leGFjdCBSb3VuZGVkCisKKy0tIHJhbmRvbWx5IGdlbmVyYXRlZCB0ZXN0Y2FzZXMgWzI2IFNlcCAyMDAxXQorcHJlY2lzaW9uOiAzMworcm91bmRpbmc6IGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTk5CisKK2FkZHgzNDAxIGFkZCAwNDIuNjY4MDU2ODMwNDg1NTcxNDI4ODc3MjEyOTQ0NDE4IC0wMTM2NDExMjM3NDYzOS40OTQxMTI0MDE2NDU1MzIxMDcxIC0+IC0xMzY0MTEyMzc0NTk2LjgyNjA1NTU3MTE1OTk2MDY3ODIyIEluZXhhY3QgUm91bmRlZAorY29teDM0MDEgY29tcGFyZSAwNDIuNjY4MDU2ODMwNDg1NTcxNDI4ODc3MjEyOTQ0NDE4IC0wMTM2NDExMjM3NDYzOS40OTQxMTI0MDE2NDU1MzIxMDcxIC0+IDEKK2RpdngzNDAxIGRpdmlkZSAwNDIuNjY4MDU2ODMwNDg1NTcxNDI4ODc3MjEyOTQ0NDE4IC0wMTM2NDExMjM3NDYzOS40OTQxMTI0MDE2NDU1MzIxMDcxIC0+IC0zLjEyNzg5ODk2MzczMTc2OTYzMTYwODExMTUwNTkzODY3RS0xMSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDAxIGRpdmlkZWludCAwNDIuNjY4MDU2ODMwNDg1NTcxNDI4ODc3MjEyOTQ0NDE4IC0wMTM2NDExMjM3NDYzOS40OTQxMTI0MDE2NDU1MzIxMDcxIC0+IC0wCittdWx4MzQwMSBtdWx0aXBseSAwNDIuNjY4MDU2ODMwNDg1NTcxNDI4ODc3MjEyOTQ0NDE4IC0wMTM2NDExMjM3NDYzOS40OTQxMTI0MDE2NDU1MzIxMDcxIC0+IC01ODIwNDAyNDMyNDI4Ni41NTk1NDUzMDY2MDY1MjM0OTIzIEluZXhhY3QgUm91bmRlZAorcG93eDM0MDEgcG93ZXIgMDQyLjY2ODA1NjgzMDQ4NTU3MTQyODg3NzIxMjk0NDQxOCAtMSAtPiAwLjAyMzQzNjczNjM4NTA4Njk3NDQ1MjM0MTcyMjcxNDg5MDkgSW5leGFjdCBSb3VuZGVkCityZW14MzQwMSByZW1haW5kZXIgMDQyLjY2ODA1NjgzMDQ4NTU3MTQyODg3NzIxMjk0NDQxOCAtMDEzNjQxMTIzNzQ2MzkuNDk0MTEyNDAxNjQ1NTMyMTA3MSAtPiA0Mi42NjgwNTY4MzA0ODU1NzE0Mjg4NzcyMTI5NDQ0MTgKK3N1YngzNDAxIHN1YnRyYWN0IDA0Mi42NjgwNTY4MzA0ODU1NzE0Mjg4NzcyMTI5NDQ0MTggLTAxMzY0MTEyMzc0NjM5LjQ5NDExMjQwMTY0NTUzMjEwNzEgLT4gMTM2NDExMjM3NDY4Mi4xNjIxNjkyMzIxMzExMDM1MzU5OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDAyIGFkZCAtMzI3LjE3OTQyNjM0MTY1MzI1NjM2MzUzMTgwOTIyNzM0NEUrNDUzIDc1OTA2NzQ1Ny4xMDc1MTg2NjM0NDQ4OTkzNTY3NjA3OTMgLT4gLTMuMjcxNzk0MjYzNDE2NTMyNTYzNjM1MzE4MDkyMjczNDRFKzQ1NSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDAyIGNvbXBhcmUgLTMyNy4xNzk0MjYzNDE2NTMyNTYzNjM1MzE4MDkyMjczNDRFKzQ1MyA3NTkwNjc0NTcuMTA3NTE4NjYzNDQ0ODk5MzU2NzYwNzkzIC0+IC0xCitkaXZ4MzQwMiBkaXZpZGUgLTMyNy4xNzk0MjYzNDE2NTMyNTYzNjM1MzE4MDkyMjczNDRFKzQ1MyA3NTkwNjc0NTcuMTA3NTE4NjYzNDQ0ODk5MzU2NzYwNzkzIC0+IC00LjMxMDI4MTI5Njg0ODAzMDgzMjU1NzA0NjgwNjExNTg5RSs0NDYgSW5leGFjdCBSb3VuZGVkCitkdml4MzQwMiBkaXZpZGVpbnQgLTMyNy4xNzk0MjYzNDE2NTMyNTYzNjM1MzE4MDkyMjczNDRFKzQ1MyA3NTkwNjc0NTcuMTA3NTE4NjYzNDQ0ODk5MzU2NzYwNzkzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQwMiBtdWx0aXBseSAtMzI3LjE3OTQyNjM0MTY1MzI1NjM2MzUzMTgwOTIyNzM0NEUrNDUzIDc1OTA2NzQ1Ny4xMDc1MTg2NjM0NDQ4OTkzNTY3NjA3OTMgLT4gLTIuNDgzNTEyNTUxNzEwNTU0NDUxMTA1NTg2MTM2MjczNzlFKzQ2NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDAyIHBvd2VyIC0zMjcuMTc5NDI2MzQxNjUzMjU2MzYzNTMxODA5MjI3MzQ0RSs0NTMgNzU5MDY3NDU3IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDAyIHJlbWFpbmRlciAtMzI3LjE3OTQyNjM0MTY1MzI1NjM2MzUzMTgwOTIyNzM0NEUrNDUzIDc1OTA2NzQ1Ny4xMDc1MTg2NjM0NDQ4OTkzNTY3NjA3OTMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDAyIHN1YnRyYWN0IC0zMjcuMTc5NDI2MzQxNjUzMjU2MzYzNTMxODA5MjI3MzQ0RSs0NTMgNzU5MDY3NDU3LjEwNzUxODY2MzQ0NDg5OTM1Njc2MDc5MyAtPiAtMy4yNzE3OTQyNjM0MTY1MzI1NjM2MzUzMTgwOTIyNzM0NEUrNDU1IEluZXhhY3QgUm91bmRlZAorYWRkeDM0MDMgYWRkIDgxNzIxLjU4MDMwOTYxODU0MjI3ODc3MDI1Mzg0OTM0NzEgOTAwMDk5NDczLjI0NTgwOTYyODA3Njc5MDc1NzIxNzMyOCAtPiA5MDAxODExOTQuODI2MTE5MjQ2NjE5MDY5NTI3NDcxMTc3IEluZXhhY3QgUm91bmRlZAorY29teDM0MDMgY29tcGFyZSA4MTcyMS41ODAzMDk2MTg1NDIyNzg3NzAyNTM4NDkzNDcxIDkwMDA5OTQ3My4yNDU4MDk2MjgwNzY3OTA3NTcyMTczMjggLT4gLTEKK2RpdngzNDAzIGRpdmlkZSA4MTcyMS41ODAzMDk2MTg1NDIyNzg3NzAyNTM4NDkzNDcxIDkwMDA5OTQ3My4yNDU4MDk2MjgwNzY3OTA3NTcyMTczMjggLT4gMC4wMDAwOTA3OTE3MjEwNjkzNjc5MjIwNjEwNTExMzE5ODEyODI2IEluZXhhY3QgUm91bmRlZAorZHZpeDM0MDMgZGl2aWRlaW50IDgxNzIxLjU4MDMwOTYxODU0MjI3ODc3MDI1Mzg0OTM0NzEgOTAwMDk5NDczLjI0NTgwOTYyODA3Njc5MDc1NzIxNzMyOCAtPiAwCittdWx4MzQwMyBtdWx0aXBseSA4MTcyMS41ODAzMDk2MTg1NDIyNzg3NzAyNTM4NDkzNDcxIDkwMDA5OTQ3My4yNDU4MDk2MjgwNzY3OTA3NTcyMTczMjggLT4gNzM1NTc1NTEzODk1MDIuNzc3OTk3OTA0MjQ1MzEwMjkyNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDAzIHBvd2VyIDgxNzIxLjU4MDMwOTYxODU0MjI3ODc3MDI1Mzg0OTM0NzEgOTAwMDk5NDczIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDM0MDMgcmVtYWluZGVyIDgxNzIxLjU4MDMwOTYxODU0MjI3ODc3MDI1Mzg0OTM0NzEgOTAwMDk5NDczLjI0NTgwOTYyODA3Njc5MDc1NzIxNzMyOCAtPiA4MTcyMS41ODAzMDk2MTg1NDIyNzg3NzAyNTM4NDkzNDcxCitzdWJ4MzQwMyBzdWJ0cmFjdCA4MTcyMS41ODAzMDk2MTg1NDIyNzg3NzAyNTM4NDkzNDcxIDkwMDA5OTQ3My4yNDU4MDk2MjgwNzY3OTA3NTcyMTczMjggLT4gLTkwMDAxNzc1MS42NjU1MDAwMDk1MzQ1MTE5ODY5NjM0NzkgSW5leGFjdCBSb3VuZGVkCithZGR4MzQwNCBhZGQgMzk5MS41NjczNDYzNTE4MzQwMzgxNDYzNjM1NDM5MjE2M0UtODA3IDcyLjMyMzk4MjIyNTU4NzEzMDU3MzEzMTQ1NjUwNjkxMzIgLT4gNzIuMzIzOTgyMjI1NTg3MTMwNTczMTMxNDU2NTA2OTEzMiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDA0IGNvbXBhcmUgMzk5MS41NjczNDYzNTE4MzQwMzgxNDYzNjM1NDM5MjE2M0UtODA3IDcyLjMyMzk4MjIyNTU4NzEzMDU3MzEzMTQ1NjUwNjkxMzIgLT4gLTEKK2RpdngzNDA0IGRpdmlkZSAzOTkxLjU2NzM0NjM1MTgzNDAzODE0NjM2MzU0MzkyMTYzRS04MDcgNzIuMzIzOTgyMjI1NTg3MTMwNTczMTMxNDU2NTA2OTEzMiAtPiA1LjUxOTAwOTM1Njk1MzkwNjY0OTg0NTk4MjQ4MTE1MjkwRS04MDYgSW5leGFjdCBSb3VuZGVkCitkdml4MzQwNCBkaXZpZGVpbnQgMzk5MS41NjczNDYzNTE4MzQwMzgxNDYzNjM1NDM5MjE2M0UtODA3IDcyLjMyMzk4MjIyNTU4NzEzMDU3MzEzMTQ1NjUwNjkxMzIgLT4gMAorbXVseDM0MDQgbXVsdGlwbHkgMzk5MS41NjczNDYzNTE4MzQwMzgxNDYzNjM1NDM5MjE2M0UtODA3IDcyLjMyMzk4MjIyNTU4NzEzMDU3MzEzMTQ1NjUwNjkxMzIgLT4gMi44ODY4NjA0NTgwOTc4NDAzNDc5NDgwMzkyODE3Nzg1NEUtODAyIEluZXhhY3QgUm91bmRlZAorcG93eDM0MDQgcG93ZXIgMzk5MS41NjczNDYzNTE4MzQwMzgxNDYzNjM1NDM5MjE2M0UtODA3IDcyIC0+IDBFLTEwMDMxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzNDA0IHJlbWFpbmRlciAzOTkxLjU2NzM0NjM1MTgzNDAzODE0NjM2MzU0MzkyMTYzRS04MDcgNzIuMzIzOTgyMjI1NTg3MTMwNTczMTMxNDU2NTA2OTEzMiAtPiAzLjk5MTU2NzM0NjM1MTgzNDAzODE0NjM2MzU0MzkyMTYzRS04MDQKK3N1YngzNDA0IHN1YnRyYWN0IDM5OTEuNTY3MzQ2MzUxODM0MDM4MTQ2MzYzNTQzOTIxNjNFLTgwNyA3Mi4zMjM5ODIyMjU1ODcxMzA1NzMxMzE0NTY1MDY5MTMyIC0+IC03Mi4zMjM5ODIyMjU1ODcxMzA1NzMxMzE0NTY1MDY5MTMyIEluZXhhY3QgUm91bmRlZAorYWRkeDM0MDUgYWRkIC02Ni4zMzkzMzA4NTk1OTU3NzI2NDU2NDE2OTc5MTYzMzA2IDUuMDg0ODY1NzMwNTA0NTkyMTM4NjQ2ODQ1ODk2NjI1NTkgLT4gLTYxLjI1NDQ2NTEyOTA5MTE4MDUwNjk5NDg1MjAxOTcwNTAgSW5leGFjdCBSb3VuZGVkCitjb214MzQwNSBjb21wYXJlIC02Ni4zMzkzMzA4NTk1OTU3NzI2NDU2NDE2OTc5MTYzMzA2IDUuMDg0ODY1NzMwNTA0NTkyMTM4NjQ2ODQ1ODk2NjI1NTkgLT4gLTEKK2RpdngzNDA1IGRpdmlkZSAtNjYuMzM5MzMwODU5NTk1NzcyNjQ1NjQxNjk3OTE2MzMwNiA1LjA4NDg2NTczMDUwNDU5MjEzODY0Njg0NTg5NjYyNTU5IC0+IC0xMy4wNDY0MjcyNTYwMDc5Mjc2Njk0NzQ5OTI0OTE1ODUwIEluZXhhY3QgUm91bmRlZAorZHZpeDM0MDUgZGl2aWRlaW50IC02Ni4zMzkzMzA4NTk1OTU3NzI2NDU2NDE2OTc5MTYzMzA2IDUuMDg0ODY1NzMwNTA0NTkyMTM4NjQ2ODQ1ODk2NjI1NTkgLT4gLTEzCittdWx4MzQwNSBtdWx0aXBseSAtNjYuMzM5MzMwODU5NTk1NzcyNjQ1NjQxNjk3OTE2MzMwNiA1LjA4NDg2NTczMDUwNDU5MjEzODY0Njg0NTg5NjYyNTU5IC0+IC0zMzcuMzI2NTkwMDcyNTY0MjkwODEzNTM5MDM2MjgwMjA1IEluZXhhY3QgUm91bmRlZAorcG93eDM0MDUgcG93ZXIgLTY2LjMzOTMzMDg1OTU5NTc3MjY0NTY0MTY5NzkxNjMzMDYgNSAtPiAtMTI4NDg1ODg4OC4yNzI4NTgyMjI1OTE4NDg5NjY2Nzk5MCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDA1IHJlbWFpbmRlciAtNjYuMzM5MzMwODU5NTk1NzcyNjQ1NjQxNjk3OTE2MzMwNiA1LjA4NDg2NTczMDUwNDU5MjEzODY0Njg0NTg5NjYyNTU5IC0+IC0wLjIzNjA3NjM2MzAzNjA3NDg0MzIzMjcwMTI2MDE5NzkzCitzdWJ4MzQwNSBzdWJ0cmFjdCAtNjYuMzM5MzMwODU5NTk1NzcyNjQ1NjQxNjk3OTE2MzMwNiA1LjA4NDg2NTczMDUwNDU5MjEzODY0Njg0NTg5NjYyNTU5IC0+IC03MS40MjQxOTY1OTAxMDAzNjQ3ODQyODg1NDM4MTI5NTYyIEluZXhhY3QgUm91bmRlZAorYWRkeDM0MDYgYWRkIC0zOTM2MDYuODczNzAzNTY3NzUzMjU1MDk3MDk1MjA4MTEyRSsxMTEgLTIxMjQzMzk1NTAuODY4OTEwOTMyMDA3NTgwOTU2NjA1NTcgLT4gLTMuOTM2MDY4NzM3MDM1Njc3NTMyNTUwOTcwOTUyMDgxMTJFKzExNiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDA2IGNvbXBhcmUgLTM5MzYwNi44NzM3MDM1Njc3NTMyNTUwOTcwOTUyMDgxMTJFKzExMSAtMjEyNDMzOTU1MC44Njg5MTA5MzIwMDc1ODA5NTY2MDU1NyAtPiAtMQorZGl2eDM0MDYgZGl2aWRlIC0zOTM2MDYuODczNzAzNTY3NzUzMjU1MDk3MDk1MjA4MTEyRSsxMTEgLTIxMjQzMzk1NTAuODY4OTEwOTMyMDA3NTgwOTU2NjA1NTcgLT4gMS44NTI4NDM1MDM5NjEzNzA3NTAxMDQyODczNjU2NDczN0UrMTA3IEluZXhhY3QgUm91bmRlZAorZHZpeDM0MDYgZGl2aWRlaW50IC0zOTM2MDYuODczNzAzNTY3NzUzMjU1MDk3MDk1MjA4MTEyRSsxMTEgLTIxMjQzMzk1NTAuODY4OTEwOTMyMDA3NTgwOTU2NjA1NTcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDA2IG11bHRpcGx5IC0zOTM2MDYuODczNzAzNTY3NzUzMjU1MDk3MDk1MjA4MTEyRSsxMTEgLTIxMjQzMzk1NTAuODY4OTEwOTMyMDA3NTgwOTU2NjA1NTcgLT4gOC4zNjE1NDY0OTMwMjM1MzI2OTgxODgwMTI2MzI3NTk0MUUrMTI1IEluZXhhY3QgUm91bmRlZAorcG93eDM0MDYgcG93ZXIgLTM5MzYwNi44NzM3MDM1Njc3NTMyNTUwOTcwOTUyMDgxMTJFKzExMSAtMiAtPiA2LjQ1NDY3OTA0MTIzMTAzNTYwNTI4OTE5NzQ3Njg4NDQzRS0yMzQgSW5leGFjdCBSb3VuZGVkCityZW14MzQwNiByZW1haW5kZXIgLTM5MzYwNi44NzM3MDM1Njc3NTMyNTUwOTcwOTUyMDgxMTJFKzExMSAtMjEyNDMzOTU1MC44Njg5MTA5MzIwMDc1ODA5NTY2MDU1NyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0MDYgc3VidHJhY3QgLTM5MzYwNi44NzM3MDM1Njc3NTMyNTUwOTcwOTUyMDgxMTJFKzExMSAtMjEyNDMzOTU1MC44Njg5MTA5MzIwMDc1ODA5NTY2MDU1NyAtPiAtMy45MzYwNjg3MzcwMzU2Nzc1MzI1NTA5NzA5NTIwODExMkUrMTE2IEluZXhhY3QgUm91bmRlZAorYWRkeDM0MDcgYWRkIC0wMTkxMzM1OTguNjA5ODEyNTI0NjIyMTUwNDIxNTg0MzQ2IC04NTg0Mzk4NDYuNjI4MzY3NzM0NjQyNjIyOTIyMDMwMDUxIC0+IC04Nzc1NzM0NDUuMjM4MTgwMjU5MjY0NzczMzQzNjE0Mzk3Citjb214MzQwNyBjb21wYXJlIC0wMTkxMzM1OTguNjA5ODEyNTI0NjIyMTUwNDIxNTg0MzQ2IC04NTg0Mzk4NDYuNjI4MzY3NzM0NjQyNjIyOTIyMDMwMDUxIC0+IDEKK2RpdngzNDA3IGRpdmlkZSAtMDE5MTMzNTk4LjYwOTgxMjUyNDYyMjE1MDQyMTU4NDM0NiAtODU4NDM5ODQ2LjYyODM2NzczNDY0MjYyMjkyMjAzMDA1MSAtPiAwLjAyMjI4ODgwNTMwNzYzMTI1NjU3OTc0NjA2NTAzMTEwNzAgSW5leGFjdCBSb3VuZGVkCitkdml4MzQwNyBkaXZpZGVpbnQgLTAxOTEzMzU5OC42MDk4MTI1MjQ2MjIxNTA0MjE1ODQzNDYgLTg1ODQzOTg0Ni42MjgzNjc3MzQ2NDI2MjI5MjIwMzAwNTEgLT4gMAorbXVseDM0MDcgbXVsdGlwbHkgLTAxOTEzMzU5OC42MDk4MTI1MjQ2MjIxNTA0MjE1ODQzNDYgLTg1ODQzOTg0Ni42MjgzNjc3MzQ2NDI2MjI5MjIwMzAwNTEgLT4gMTY0MjUwNDM0NTYwNTYyMTMuNzM5NTE5MTUxNDAyOTI4OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDA3IHBvd2VyIC0wMTkxMzM1OTguNjA5ODEyNTI0NjIyMTUwNDIxNTg0MzQ2IC04NTg0Mzk4NDcgLT4gLTBFLTEwMDMxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzNDA3IHJlbWFpbmRlciAtMDE5MTMzNTk4LjYwOTgxMjUyNDYyMjE1MDQyMTU4NDM0NiAtODU4NDM5ODQ2LjYyODM2NzczNDY0MjYyMjkyMjAzMDA1MSAtPiAtMTkxMzM1OTguNjA5ODEyNTI0NjIyMTUwNDIxNTg0MzQ2CitzdWJ4MzQwNyBzdWJ0cmFjdCAtMDE5MTMzNTk4LjYwOTgxMjUyNDYyMjE1MDQyMTU4NDM0NiAtODU4NDM5ODQ2LjYyODM2NzczNDY0MjYyMjkyMjAzMDA1MSAtPiA4MzkzMDYyNDguMDE4NTU1MjEwMDIwNDcyNTAwNDQ1NzA1CithZGR4MzQwOCBhZGQgNDY1LjM1MTk4MjE1OTA0NjUyNTc2MjcxNTU0OTc2MTgxNCAyNDA0NDQuOTc1OTQ0NjY2OTI0NjU3NjI5MTcyODQ0NzgwIC0+IDI0MDkxMC4zMjc5MjY4MjU5NzExODMzOTE4ODgzOTQ1NDIgSW5leGFjdCBSb3VuZGVkCitjb214MzQwOCBjb21wYXJlIDQ2NS4zNTE5ODIxNTkwNDY1MjU3NjI3MTU1NDk3NjE4MTQgMjQwNDQ0Ljk3NTk0NDY2NjkyNDY1NzYyOTE3Mjg0NDc4MCAtPiAtMQorZGl2eDM0MDggZGl2aWRlIDQ2NS4zNTE5ODIxNTkwNDY1MjU3NjI3MTU1NDk3NjE4MTQgMjQwNDQ0Ljk3NTk0NDY2NjkyNDY1NzYyOTE3Mjg0NDc4MCAtPiAwLjAwMTkzNTM3ODI3MjQzMzI2MTIyNzgyOTc0MTMyODI5MDk1IEluZXhhY3QgUm91bmRlZAorZHZpeDM0MDggZGl2aWRlaW50IDQ2NS4zNTE5ODIxNTkwNDY1MjU3NjI3MTU1NDk3NjE4MTQgMjQwNDQ0Ljk3NTk0NDY2NjkyNDY1NzYyOTE3Mjg0NDc4MCAtPiAwCittdWx4MzQwOCBtdWx0aXBseSA0NjUuMzUxOTgyMTU5MDQ2NTI1NzYyNzE1NTQ5NzYxODE0IDI0MDQ0NC45NzU5NDQ2NjY5MjQ2NTc2MjkxNzI4NDQ3ODAgLT4gMTExODkxNTQ2LjE1NjAzNTAxMzc4MDM3MTM5NTY2ODY3NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDA4IHBvd2VyIDQ2NS4zNTE5ODIxNTkwNDY1MjU3NjI3MTU1NDk3NjE4MTQgMjQwNDQ1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDM0MDggcmVtYWluZGVyIDQ2NS4zNTE5ODIxNTkwNDY1MjU3NjI3MTU1NDk3NjE4MTQgMjQwNDQ0Ljk3NTk0NDY2NjkyNDY1NzYyOTE3Mjg0NDc4MCAtPiA0NjUuMzUxOTgyMTU5MDQ2NTI1NzYyNzE1NTQ5NzYxODE0CitzdWJ4MzQwOCBzdWJ0cmFjdCA0NjUuMzUxOTgyMTU5MDQ2NTI1NzYyNzE1NTQ5NzYxODE0IDI0MDQ0NC45NzU5NDQ2NjY5MjQ2NTc2MjkxNzI4NDQ3ODAgLT4gLTIzOTk3OS42MjM5NjI1MDc4NzgxMzE4NjY0NTcyOTUwMTggSW5leGFjdCBSb3VuZGVkCithZGR4MzQwOSBhZGQgMjgwNjY5NTUwMDQ3ODMuMTA3NjgyNDIyMjg3MzM4NDgyOCA1NzE2OTk5NjkuMjIwNzUzNTM1NzU4NTA0OTA3NTYxMDE2RS03MTggLT4gMjgwNjY5NTUwMDQ3ODMuMTA3NjgyNDIyMjg3MzM4NDgyOCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDA5IGNvbXBhcmUgMjgwNjY5NTUwMDQ3ODMuMTA3NjgyNDIyMjg3MzM4NDgyOCA1NzE2OTk5NjkuMjIwNzUzNTM1NzU4NTA0OTA3NTYxMDE2RS03MTggLT4gMQorZGl2eDM0MDkgZGl2aWRlIDI4MDY2OTU1MDA0NzgzLjEwNzY4MjQyMjI4NzMzODQ4MjggNTcxNjk5OTY5LjIyMDc1MzUzNTc1ODUwNDkwNzU2MTAxNkUtNzE4IC0+IDQuOTA5Mzg1NDMyMTk0MzIzOTAwMTM2NTY5NjgxMjM4MTVFKzcyMiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDA5IGRpdmlkZWludCAyODA2Njk1NTAwNDc4My4xMDc2ODI0MjIyODczMzg0ODI4IDU3MTY5OTk2OS4yMjA3NTM1MzU3NTg1MDQ5MDc1NjEwMTZFLTcxOCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0MDkgbXVsdGlwbHkgMjgwNjY5NTUwMDQ3ODMuMTA3NjgyNDIyMjg3MzM4NDgyOCA1NzE2OTk5NjkuMjIwNzUzNTM1NzU4NTA0OTA3NTYxMDE2RS03MTggLT4gMS42MDQ1ODc3MzEyMzU0Nzc3MDY5MDQ1MjE5NTU2OTIyM0UtNjk2IEluZXhhY3QgUm91bmRlZAorcG93eDM0MDkgcG93ZXIgMjgwNjY5NTUwMDQ3ODMuMTA3NjgyNDIyMjg3MzM4NDgyOCA2IC0+IDQuODg4NDU2ODk5Mzg5NTE1ODMwMjAxNzEzMjU1NjgyMThFKzgwIEluZXhhY3QgUm91bmRlZAorcmVteDM0MDkgcmVtYWluZGVyIDI4MDY2OTU1MDA0NzgzLjEwNzY4MjQyMjI4NzMzODQ4MjggNTcxNjk5OTY5LjIyMDc1MzUzNTc1ODUwNDkwNzU2MTAxNkUtNzE4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQwOSBzdWJ0cmFjdCAyODA2Njk1NTAwNDc4My4xMDc2ODI0MjIyODczMzg0ODI4IDU3MTY5OTk2OS4yMjA3NTM1MzU3NTg1MDQ5MDc1NjEwMTZFLTcxOCAtPiAyODA2Njk1NTAwNDc4My4xMDc2ODI0MjIyODczMzg0ODI4IEluZXhhY3QgUm91bmRlZAorYWRkeDM0MTAgYWRkIDI4Mjc1MjM2OTI3MzkyLjQ5NjA5MDI4MjQxMDUyNDYwNDcgMjgyMTIwMzguNDgyNTI0MzEyNzA5NjYxMzE1ODQxOTI3MEUrNDIyIC0+IDIuODIxMjAzODQ4MjUyNDMxMjcwOTY2MTMxNTg0MTkyNzBFKzQyOSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDEwIGNvbXBhcmUgMjgyNzUyMzY5MjczOTIuNDk2MDkwMjgyNDEwNTI0NjA0NyAyODIxMjAzOC40ODI1MjQzMTI3MDk2NjEzMTU4NDE5MjcwRSs0MjIgLT4gLTEKK2RpdngzNDEwIGRpdmlkZSAyODI3NTIzNjkyNzM5Mi40OTYwOTAyODI0MTA1MjQ2MDQ3IDI4MjEyMDM4LjQ4MjUyNDMxMjcwOTY2MTMxNTg0MTkyNzBFKzQyMiAtPiAxLjAwMjI0MDEyMzMwNDM1OTI3NDY3NTU5MjAzNjg4ODYxRS00MTYgSW5leGFjdCBSb3VuZGVkCitkdml4MzQxMCBkaXZpZGVpbnQgMjgyNzUyMzY5MjczOTIuNDk2MDkwMjgyNDEwNTI0NjA0NyAyODIxMjAzOC40ODI1MjQzMTI3MDk2NjEzMTU4NDE5MjcwRSs0MjIgLT4gMAorbXVseDM0MTAgbXVsdGlwbHkgMjgyNzUyMzY5MjczOTIuNDk2MDkwMjgyNDEwNTI0NjA0NyAyODIxMjAzOC40ODI1MjQzMTI3MDk2NjEzMTU4NDE5MjcwRSs0MjIgLT4gNy45NzcwMjA3MjI5ODA4OTYwNTcwNjc5ODc3MDAxMzU2MUUrNDQyIEluZXhhY3QgUm91bmRlZAorcG93eDM0MTAgcG93ZXIgMjgyNzUyMzY5MjczOTIuNDk2MDkwMjgyNDEwNTI0NjA0NyAzIC0+IDIuMjYwNTc0MTU1NDY2MjIxNjEzNDczMjIwNjEyODE1MTZFKzQwIEluZXhhY3QgUm91bmRlZAorcmVteDM0MTAgcmVtYWluZGVyIDI4Mjc1MjM2OTI3MzkyLjQ5NjA5MDI4MjQxMDUyNDYwNDcgMjgyMTIwMzguNDgyNTI0MzEyNzA5NjYxMzE1ODQxOTI3MEUrNDIyIC0+IDI4Mjc1MjM2OTI3MzkyLjQ5NjA5MDI4MjQxMDUyNDYwNDcKK3N1YngzNDEwIHN1YnRyYWN0IDI4Mjc1MjM2OTI3MzkyLjQ5NjA5MDI4MjQxMDUyNDYwNDcgMjgyMTIwMzguNDgyNTI0MzEyNzA5NjYxMzE1ODQxOTI3MEUrNDIyIC0+IC0yLjgyMTIwMzg0ODI1MjQzMTI3MDk2NjEzMTU4NDE5MjcwRSs0MjkgSW5leGFjdCBSb3VuZGVkCithZGR4MzQxMSBhZGQgMTE3OTEuODY0NDIxMTg3NDYzMDIzNDI3MTgwMTc4OTk5NiAtOC40NTQ1NzI3NTkzMDM2Mzg2MDk4MjI2MTM0MzE1OTc0MSAtPiAxMTc4My40MDk4NDg0MjgxNTkzODQ4MTczNTc1NjU1NjgwIEluZXhhY3QgUm91bmRlZAorY29teDM0MTEgY29tcGFyZSAxMTc5MS44NjQ0MjExODc0NjMwMjM0MjcxODAxNzg5OTk2IC04LjQ1NDU3Mjc1OTMwMzYzODYwOTgyMjYxMzQzMTU5NzQxIC0+IDEKK2RpdngzNDExIGRpdmlkZSAxMTc5MS44NjQ0MjExODc0NjMwMjM0MjcxODAxNzg5OTk2IC04LjQ1NDU3Mjc1OTMwMzYzODYwOTgyMjYxMzQzMTU5NzQxIC0+IC0xMzk0LjczMjE0NzU0ODM2NDE4NzMxMzM1NzYxODU4MTUxIEluZXhhY3QgUm91bmRlZAorZHZpeDM0MTEgZGl2aWRlaW50IDExNzkxLjg2NDQyMTE4NzQ2MzAyMzQyNzE4MDE3ODk5OTYgLTguNDU0NTcyNzU5MzAzNjM4NjA5ODIyNjEzNDMxNTk3NDEgLT4gLTEzOTQKK211bHgzNDExIG11bHRpcGx5IDExNzkxLjg2NDQyMTE4NzQ2MzAyMzQyNzE4MDE3ODk5OTYgLTguNDU0NTcyNzU5MzAzNjM4NjA5ODIyNjEzNDMxNTk3NDEgLT4gLTk5Njk1LjE3NTcxNjc3MzI5MjYzMDI1MzMxMzgxODY3MTYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQxMSBwb3dlciAxMTc5MS44NjQ0MjExODc0NjMwMjM0MjcxODAxNzg5OTk2IC04IC0+IDIuNjc1MTAwOTkzMTg3MjM1MTY1NjUzMzI5MjgyNTM3MTFFLTMzIEluZXhhY3QgUm91bmRlZAorcmVteDM0MTEgcmVtYWluZGVyIDExNzkxLjg2NDQyMTE4NzQ2MzAyMzQyNzE4MDE3ODk5OTYgLTguNDU0NTcyNzU5MzAzNjM4NjA5ODIyNjEzNDMxNTk3NDEgLT4gNi4xODk5OTQ3MTgxOTA4MDEzMzQ0NTcwNTUzNTI4MTA0Ngorc3VieDM0MTEgc3VidHJhY3QgMTE3OTEuODY0NDIxMTg3NDYzMDIzNDI3MTgwMTc4OTk5NiAtOC40NTQ1NzI3NTkzMDM2Mzg2MDk4MjI2MTM0MzE1OTc0MSAtPiAxMTgwMC4zMTg5OTM5NDY3NjY2NjIwMzcwMDI3OTI0MzEyIEluZXhhY3QgUm91bmRlZAorYWRkeDM0MTIgYWRkIDQ0LjcwODUzNDA3Mzk1ODE2Njg5NzU1MDIzNDI3ODc1NzggLTkzMzcuMDU0MDgxMzMwMjM5MjA2NDA0ODU1NTY2NDc5MzcgLT4gLTkyOTIuMzQ1NTQ3MjU2MjgxMDM5NTA3MzA1MzMyMjAwNjEgSW5leGFjdCBSb3VuZGVkCitjb214MzQxMiBjb21wYXJlIDQ0LjcwODUzNDA3Mzk1ODE2Njg5NzU1MDIzNDI3ODc1NzggLTkzMzcuMDU0MDgxMzMwMjM5MjA2NDA0ODU1NTY2NDc5MzcgLT4gMQorZGl2eDM0MTIgZGl2aWRlIDQ0LjcwODUzNDA3Mzk1ODE2Njg5NzU1MDIzNDI3ODc1NzggLTkzMzcuMDU0MDgxMzMwMjM5MjA2NDA0ODU1NTY2NDc5MzcgLT4gLTAuMDA0Nzg4MjkxMjE5NTM1MTIyODE1MjcyNDI2MzE3NzU2MTMgSW5leGFjdCBSb3VuZGVkCitkdml4MzQxMiBkaXZpZGVpbnQgNDQuNzA4NTM0MDczOTU4MTY2ODk3NTUwMjM0Mjc4NzU3OCAtOTMzNy4wNTQwODEzMzAyMzkyMDY0MDQ4NTU1NjY0NzkzNyAtPiAtMAorbXVseDM0MTIgbXVsdGlwbHkgNDQuNzA4NTM0MDczOTU4MTY2ODk3NTUwMjM0Mjc4NzU3OCAtOTMzNy4wNTQwODEzMzAyMzkyMDY0MDQ4NTU1NjY0NzkzNyAtPiAtNDE3NDQ2LjAwMDU0NTU0MzE2ODg2NjE1ODkxMzA3NzQxOSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDEyIHBvd2VyIDQ0LjcwODUzNDA3Mzk1ODE2Njg5NzU1MDIzNDI3ODc1NzggLTkzMzcgLT4gMEUtMTAwMzEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDM0MTIgcmVtYWluZGVyIDQ0LjcwODUzNDA3Mzk1ODE2Njg5NzU1MDIzNDI3ODc1NzggLTkzMzcuMDU0MDgxMzMwMjM5MjA2NDA0ODU1NTY2NDc5MzcgLT4gNDQuNzA4NTM0MDczOTU4MTY2ODk3NTUwMjM0Mjc4NzU3OAorc3VieDM0MTIgc3VidHJhY3QgNDQuNzA4NTM0MDczOTU4MTY2ODk3NTUwMjM0Mjc4NzU3OCAtOTMzNy4wNTQwODEzMzAyMzkyMDY0MDQ4NTU1NjY0NzkzNyAtPiA5MzgxLjc2MjYxNTQwNDE5NzM3MzMwMjQwNTgwMDc1ODEzIEluZXhhY3QgUm91bmRlZAorYWRkeDM0MTMgYWRkIDkzMzU0NTI3NDI4ODA0LjU0NTgwNTMyOTU1ODE5NjU4NjdFKzU3NiAtODU2NTI1OTA5ODUyLjMxODc5MDMyMTMwMDk0MTYxNTMxNCAtPiA5LjMzNTQ1Mjc0Mjg4MDQ1NDU4MDUzMjk1NTgxOTY1ODY3RSs1ODkgSW5leGFjdCBSb3VuZGVkCitjb214MzQxMyBjb21wYXJlIDkzMzU0NTI3NDI4ODA0LjU0NTgwNTMyOTU1ODE5NjU4NjdFKzU3NiAtODU2NTI1OTA5ODUyLjMxODc5MDMyMTMwMDk0MTYxNTMxNCAtPiAxCitkaXZ4MzQxMyBkaXZpZGUgOTMzNTQ1Mjc0Mjg4MDQuNTQ1ODA1MzI5NTU4MTk2NTg2N0UrNTc2IC04NTY1MjU5MDk4NTIuMzE4NzkwMzIxMzAwOTQxNjE1MzE0IC0+IC0xLjA4OTkyMDY0NzUyNDg0NDAwMzUzMjMxMDU2MjcxNjE0RSs1NzggSW5leGFjdCBSb3VuZGVkCitkdml4MzQxMyBkaXZpZGVpbnQgOTMzNTQ1Mjc0Mjg4MDQuNTQ1ODA1MzI5NTU4MTk2NTg2N0UrNTc2IC04NTY1MjU5MDk4NTIuMzE4NzkwMzIxMzAwOTQxNjE1MzE0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQxMyBtdWx0aXBseSA5MzM1NDUyNzQyODgwNC41NDU4MDUzMjk1NTgxOTY1ODY3RSs1NzYgLTg1NjUyNTkwOTg1Mi4zMTg3OTAzMjEzMDA5NDE2MTUzMTQgLT4gLTcuOTk2MDU3MTU0NDc5MDA2NDI2ODM3NzQzNjA3MzEyNTRFKzYwMSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDEzIHBvd2VyIDkzMzU0NTI3NDI4ODA0LjU0NTgwNTMyOTU1ODE5NjU4NjdFKzU3NiAtOSAtPiAxLjg1Njg3MDE1NjkxNzYzNDA2NDQ4MDA1NTIxMjIxNTE4RS01MzEwIEluZXhhY3QgUm91bmRlZAorcmVteDM0MTMgcmVtYWluZGVyIDkzMzU0NTI3NDI4ODA0LjU0NTgwNTMyOTU1ODE5NjU4NjdFKzU3NiAtODU2NTI1OTA5ODUyLjMxODc5MDMyMTMwMDk0MTYxNTMxNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0MTMgc3VidHJhY3QgOTMzNTQ1Mjc0Mjg4MDQuNTQ1ODA1MzI5NTU4MTk2NTg2N0UrNTc2IC04NTY1MjU5MDk4NTIuMzE4NzkwMzIxMzAwOTQxNjE1MzE0IC0+IDkuMzM1NDUyNzQyODgwNDU0NTgwNTMyOTU1ODE5NjU4NjdFKzU4OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDE0IGFkZCAtMzY3Mzk5NDE1Nzk4ODA0NTAzMTc3OTUwMDQwNDQzNDgyIC01NDg0NTY4My45NjkxNzc2Mzk3Mjg1NTA2NzEyODEyNzU0IC0+IC0zNjczOTk0MTU3OTg4MDQ1MDMxNzc5NTAwOTUyODkxNjYgSW5leGFjdCBSb3VuZGVkCitjb214MzQxNCBjb21wYXJlIC0zNjczOTk0MTU3OTg4MDQ1MDMxNzc5NTAwNDA0NDM0ODIgLTU0ODQ1NjgzLjk2OTE3NzYzOTcyODU1MDY3MTI4MTI3NTQgLT4gLTEKK2RpdngzNDE0IGRpdmlkZSAtMzY3Mzk5NDE1Nzk4ODA0NTAzMTc3OTUwMDQwNDQzNDgyIC01NDg0NTY4My45NjkxNzc2Mzk3Mjg1NTA2NzEyODEyNzU0IC0+IDY2OTg3ODQ0NjU5ODA1MjkxNDAwNzIxNzQuMzA0NzQ3NjkgSW5leGFjdCBSb3VuZGVkCitkdml4MzQxNCBkaXZpZGVpbnQgLTM2NzM5OTQxNTc5ODgwNDUwMzE3Nzk1MDA0MDQ0MzQ4MiAtNTQ4NDU2ODMuOTY5MTc3NjM5NzI4NTUwNjcxMjgxMjc1NCAtPiA2Njk4Nzg0NDY1OTgwNTI5MTQwMDcyMTc0CittdWx4MzQxNCBtdWx0aXBseSAtMzY3Mzk5NDE1Nzk4ODA0NTAzMTc3OTUwMDQwNDQzNDgyIC01NDg0NTY4My45NjkxNzc2Mzk3Mjg1NTA2NzEyODEyNzU0IC0+IDIuMDE1MDI3MjI0OTM2MTcyMjIwMTgwNDA3ODkyOTE0MTRFKzQwIEluZXhhY3QgUm91bmRlZAorcG93eDM0MTQgcG93ZXIgLTM2NzM5OTQxNTc5ODgwNDUwMzE3Nzk1MDA0MDQ0MzQ4MiAtNTQ4NDU2ODQgLT4gMEUtMTAwMzEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDM0MTQgcmVtYWluZGVyIC0zNjczOTk0MTU3OTg4MDQ1MDMxNzc5NTAwNDA0NDM0ODIgLTU0ODQ1NjgzLjk2OTE3NzYzOTcyODU1MDY3MTI4MTI3NTQgLT4gLTE2NzE0MDk1LjY1NDk2NTcxODkxNzc4NTc4OTIyOTI4MDQKK3N1YngzNDE0IHN1YnRyYWN0IC0zNjczOTk0MTU3OTg4MDQ1MDMxNzc5NTAwNDA0NDM0ODIgLTU0ODQ1NjgzLjk2OTE3NzYzOTcyODU1MDY3MTI4MTI3NTQgLT4gLTM2NzM5OTQxNTc5ODgwNDUwMzE3Nzk0OTk4NTU5Nzc5OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDE1IGFkZCAtMi44NzE1NTkxOTc4MTAyNDEwODUwMzY3MDE3NTQ0Mzc0MCA4OTUyOTczMDEzMC42NDI3ODgxMzMyNzc2Nzk3MTkzODA3IC0+IDg5NTI5NzMwMTI3Ljc3MTIyODkzNTQ2NzQzODYzNDM0NDAgSW5leGFjdCBSb3VuZGVkCitjb214MzQxNSBjb21wYXJlIC0yLjg3MTU1OTE5NzgxMDI0MTA4NTAzNjcwMTc1NDQzNzQwIDg5NTI5NzMwMTMwLjY0Mjc4ODEzMzI3NzY3OTcxOTM4MDcgLT4gLTEKK2RpdngzNDE1IGRpdmlkZSAtMi44NzE1NTkxOTc4MTAyNDEwODUwMzY3MDE3NTQ0Mzc0MCA4OTUyOTczMDEzMC42NDI3ODgxMzMyNzc2Nzk3MTkzODA3IC0+IC0zLjIwNzM4MDYwMjY0NDU0MDEzMTc0ODM1OTI4NzU0NDMwRS0xMSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDE1IGRpdmlkZWludCAtMi44NzE1NTkxOTc4MTAyNDEwODUwMzY3MDE3NTQ0Mzc0MCA4OTUyOTczMDEzMC42NDI3ODgxMzMyNzc2Nzk3MTkzODA3IC0+IC0wCittdWx4MzQxNSBtdWx0aXBseSAtMi44NzE1NTkxOTc4MTAyNDEwODUwMzY3MDE3NTQ0Mzc0MCA4OTUyOTczMDEzMC42NDI3ODgxMzMyNzc2Nzk3MTkzODA3IC0+IC0yNTcwODk5MjAwMzQuMTE1OTc1NDY5OTMxMDg1NTI3NjQyIEluZXhhY3QgUm91bmRlZAorcG93eDM0MTUgcG93ZXIgLTIuODcxNTU5MTk3ODEwMjQxMDg1MDM2NzAxNzU0NDM3NDAgOSAtPiAtMTMyNzUuNzc3NDY4MzI1MTM1NDUyNzMxMDgyMDg4NTczNyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDE1IHJlbWFpbmRlciAtMi44NzE1NTkxOTc4MTAyNDEwODUwMzY3MDE3NTQ0Mzc0MCA4OTUyOTczMDEzMC42NDI3ODgxMzMyNzc2Nzk3MTkzODA3IC0+IC0yLjg3MTU1OTE5NzgxMDI0MTA4NTAzNjcwMTc1NDQzNzQwCitzdWJ4MzQxNSBzdWJ0cmFjdCAtMi44NzE1NTkxOTc4MTAyNDEwODUwMzY3MDE3NTQ0Mzc0MCA4OTUyOTczMDEzMC42NDI3ODgxMzMyNzc2Nzk3MTkzODA3IC0+IC04OTUyOTczMDEzMy41MTQzNDczMzEwODc5MjA4MDQ0MTc0IEluZXhhY3QgUm91bmRlZAorYWRkeDM0MTYgYWRkIC0wMTAuNjkzOTM0MzM4MTc5NDc5NjUyMTc4MDU3Mjc5MjA0RSsxODggMjY0ODQuODg4NzczMTk3MzE1Mzc0NTY2NjUxNDI2MDY4NCAtPiAtMS4wNjkzOTM0MzM4MTc5NDc5NjUyMTc4MDU3Mjc5MjA0MEUrMTg5IEluZXhhY3QgUm91bmRlZAorY29teDM0MTYgY29tcGFyZSAtMDEwLjY5MzkzNDMzODE3OTQ3OTY1MjE3ODA1NzI3OTIwNEUrMTg4IDI2NDg0Ljg4ODc3MzE5NzMxNTM3NDU2NjY1MTQyNjA2ODQgLT4gLTEKK2RpdngzNDE2IGRpdmlkZSAtMDEwLjY5MzkzNDMzODE3OTQ3OTY1MjE3ODA1NzI3OTIwNEUrMTg4IDI2NDg0Ljg4ODc3MzE5NzMxNTM3NDU2NjY1MTQyNjA2ODQgLT4gLTQuMDM3NzQ5Mzg1OTgyNTk1NDc1NzU3MDc1MDMwODc2MzhFKzE4NCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDE2IGRpdmlkZWludCAtMDEwLjY5MzkzNDMzODE3OTQ3OTY1MjE3ODA1NzI3OTIwNEUrMTg4IDI2NDg0Ljg4ODc3MzE5NzMxNTM3NDU2NjY1MTQyNjA2ODQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDE2IG11bHRpcGx5IC0wMTAuNjkzOTM0MzM4MTc5NDc5NjUyMTc4MDU3Mjc5MjA0RSsxODggMjY0ODQuODg4NzczMTk3MzE1Mzc0NTY2NjUxNDI2MDY4NCAtPiAtMi44MzIyNzY2MTQ5NDU1ODk2MzU1ODQ4MTYzMzg4MDY0N0UrMTkzIEluZXhhY3QgUm91bmRlZAorcG93eDM0MTYgcG93ZXIgLTAxMC42OTM5MzQzMzgxNzk0Nzk2NTIxNzgwNTcyNzkyMDRFKzE4OCAyNjQ4NSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzQxNiByZW1haW5kZXIgLTAxMC42OTM5MzQzMzgxNzk0Nzk2NTIxNzgwNTcyNzkyMDRFKzE4OCAyNjQ4NC44ODg3NzMxOTczMTUzNzQ1NjY2NTE0MjYwNjg0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQxNiBzdWJ0cmFjdCAtMDEwLjY5MzkzNDMzODE3OTQ3OTY1MjE3ODA1NzI3OTIwNEUrMTg4IDI2NDg0Ljg4ODc3MzE5NzMxNTM3NDU2NjY1MTQyNjA2ODQgLT4gLTEuMDY5MzkzNDMzODE3OTQ3OTY1MjE3ODA1NzI3OTIwNDBFKzE4OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDE3IGFkZCA2MTE2NTU1Njk1NjguODMyNjk4OTEyNzYyMDc1ODg5MTg2IDAxMDE4Mjc0MzIxOS40NzU4MzkwMzA1MDU5NjYwMTY5ODIgLT4gNjIxODM4MzEyNzg4LjMwODUzNzk0MzI2ODA0MTkwNjE2OAorY29teDM0MTcgY29tcGFyZSA2MTE2NTU1Njk1NjguODMyNjk4OTEyNzYyMDc1ODg5MTg2IDAxMDE4Mjc0MzIxOS40NzU4MzkwMzA1MDU5NjYwMTY5ODIgLT4gMQorZGl2eDM0MTcgZGl2aWRlIDYxMTY1NTU2OTU2OC44MzI2OTg5MTI3NjIwNzU4ODkxODYgMDEwMTgyNzQzMjE5LjQ3NTgzOTAzMDUwNTk2NjAxNjk4MiAtPiA2MC4wNjc4NTc1ODg2MDc0MzY3MDgxODM2NDM2ODEyOTU5IEluZXhhY3QgUm91bmRlZAorZHZpeDM0MTcgZGl2aWRlaW50IDYxMTY1NTU2OTU2OC44MzI2OTg5MTI3NjIwNzU4ODkxODYgMDEwMTgyNzQzMjE5LjQ3NTgzOTAzMDUwNTk2NjAxNjk4MiAtPiA2MAorbXVseDM0MTcgbXVsdGlwbHkgNjExNjU1NTY5NTY4LjgzMjY5ODkxMjc2MjA3NTg4OTE4NiAwMTAxODI3NDMyMTkuNDc1ODM5MDMwNTA1OTY2MDE2OTgyIC0+IDYyMjgzMzE2MDM2ODE2NjM1MTE4MjYuNjA0NTAyODAzNTAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQxNyBwb3dlciA2MTE2NTU1Njk1NjguODMyNjk4OTEyNzYyMDc1ODg5MTg2IDEgLT4gNjExNjU1NTY5NTY4LjgzMjY5ODkxMjc2MjA3NTg4OTE4NgorcmVteDM0MTcgcmVtYWluZGVyIDYxMTY1NTU2OTU2OC44MzI2OTg5MTI3NjIwNzU4ODkxODYgMDEwMTgyNzQzMjE5LjQ3NTgzOTAzMDUwNTk2NjAxNjk4MiAtPiA2OTA5NzY0MDAuMjgyMzU3MDgyNDA0MTE0ODcwMjY2CitzdWJ4MzQxNyBzdWJ0cmFjdCA2MTE2NTU1Njk1NjguODMyNjk4OTEyNzYyMDc1ODg5MTg2IDAxMDE4Mjc0MzIxOS40NzU4MzkwMzA1MDU5NjYwMTY5ODIgLT4gNjAxNDcyODI2MzQ5LjM1Njg1OTg4MjI1NjEwOTg3MjIwNAorYWRkeDM0MTggYWRkIDM0NTc5NDcuMzkwNjI4NjM2NzQ4ODI2NzI1MTgzMDQ0NDIgLTAxLjk5OTUyMTg4Njg5MDg4NDkwNTY4NjY1NDk4MTE0MjUgLT4gMzQ1Nzk0NS4zOTExMDY3NDk4NTc5NDE4MTk0OTYzODk0NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDE4IGNvbXBhcmUgMzQ1Nzk0Ny4zOTA2Mjg2MzY3NDg4MjY3MjUxODMwNDQ0MiAtMDEuOTk5NTIxODg2ODkwODg0OTA1Njg2NjU0OTgxMTQyNSAtPiAxCitkaXZ4MzQxOCBkaXZpZGUgMzQ1Nzk0Ny4zOTA2Mjg2MzY3NDg4MjY3MjUxODMwNDQ0MiAtMDEuOTk5NTIxODg2ODkwODg0OTA1Njg2NjU0OTgxMTQyNSAtPiAtMTcyOTM4Ny4xMTY2Mzk5MTg1MjQyNjQyODI2MzIzMDQ3NSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDE4IGRpdmlkZWludCAzNDU3OTQ3LjM5MDYyODYzNjc0ODgyNjcyNTE4MzA0NDQyIC0wMS45OTk1MjE4ODY4OTA4ODQ5MDU2ODY2NTQ5ODExNDI1IC0+IC0xNzI5Mzg3CittdWx4MzQxOCBtdWx0aXBseSAzNDU3OTQ3LjM5MDYyODYzNjc0ODgyNjcyNTE4MzA0NDQyIC0wMS45OTk1MjE4ODY4OTA4ODQ5MDU2ODY2NTQ5ODExNDI1IC0+IC02OTE0MjQxLjQ5MTI3OTE4MzYxMjU5MjUyOTU2NTc2NjU0IEluZXhhY3QgUm91bmRlZAorcG93eDM0MTggcG93ZXIgMzQ1Nzk0Ny4zOTA2Mjg2MzY3NDg4MjY3MjUxODMwNDQ0MiAtMiAtPiA4LjM2MzAyMTk1MjI5NzAxOTEzMzc2ODAyMzczNjU5NTI2RS0xNCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDE4IHJlbWFpbmRlciAzNDU3OTQ3LjM5MDYyODYzNjc0ODgyNjcyNTE4MzA0NDQyIC0wMS45OTk1MjE4ODY4OTA4ODQ5MDU2ODY2NTQ5ODExNDI1IC0+IDAuMjMzMjI0MDY5OTc0NDM1OTk3OTg1MTcxMzM1MzUyNQorc3VieDM0MTggc3VidHJhY3QgMzQ1Nzk0Ny4zOTA2Mjg2MzY3NDg4MjY3MjUxODMwNDQ0MiAtMDEuOTk5NTIxODg2ODkwODg0OTA1Njg2NjU0OTgxMTQyNSAtPiAzNDU3OTQ5LjM5MDE1MDUyMzYzOTcxMTYzMDg2OTY5OTQwIEluZXhhY3QgUm91bmRlZAorYWRkeDM0MTkgYWRkIC01MzMwODY2Njk2MDUzNS43MzkzMzkxMjg5MzY0NTkxNTEzIC02NTI3LjAwNTQ3NjI5NDc1NTc4Njk0NTIxNDM2NzY0NTk2RS00NDIgLT4gLTUzMzA4NjY2OTYwNTM1LjczOTMzOTEyODkzNjQ1OTE1MTMgSW5leGFjdCBSb3VuZGVkCitjb214MzQxOSBjb21wYXJlIC01MzMwODY2Njk2MDUzNS43MzkzMzkxMjg5MzY0NTkxNTEzIC02NTI3LjAwNTQ3NjI5NDc1NTc4Njk0NTIxNDM2NzY0NTk2RS00NDIgLT4gLTEKK2RpdngzNDE5IGRpdmlkZSAtNTMzMDg2NjY5NjA1MzUuNzM5MzM5MTI4OTM2NDU5MTUxMyAtNjUyNy4wMDU0NzYyOTQ3NTU3ODY5NDUyMTQzNjc2NDU5NkUtNDQyIC0+IDguMTY3NDAwMzcyODI3MzE4NzA4ODMxMzY3MTQ0NDEyMDRFKzQ1MSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDE5IGRpdmlkZWludCAtNTMzMDg2NjY5NjA1MzUuNzM5MzM5MTI4OTM2NDU5MTUxMyAtNjUyNy4wMDU0NzYyOTQ3NTU3ODY5NDUyMTQzNjc2NDU5NkUtNDQyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQxOSBtdWx0aXBseSAtNTMzMDg2NjY5NjA1MzUuNzM5MzM5MTI4OTM2NDU5MTUxMyAtNjUyNy4wMDU0NzYyOTQ3NTU3ODY5NDUyMTQzNjc2NDU5NkUtNDQyIC0+IDMuNDc5NDU5NjExODUzOTAwODQ2NDExNTYyNTAxMDAwODVFLTQyNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDE5IHBvd2VyIC01MzMwODY2Njk2MDUzNS43MzkzMzkxMjg5MzY0NTkxNTEzIC03IC0+IC04LjE3MzYzNTAyMzgwNDk3MDMzMzQyMzgwNDk4OTg4OTU4RS05NyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDE5IHJlbWFpbmRlciAtNTMzMDg2NjY5NjA1MzUuNzM5MzM5MTI4OTM2NDU5MTUxMyAtNjUyNy4wMDU0NzYyOTQ3NTU3ODY5NDUyMTQzNjc2NDU5NkUtNDQyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQxOSBzdWJ0cmFjdCAtNTMzMDg2NjY5NjA1MzUuNzM5MzM5MTI4OTM2NDU5MTUxMyAtNjUyNy4wMDU0NzYyOTQ3NTU3ODY5NDUyMTQzNjc2NDU5NkUtNDQyIC0+IC01MzMwODY2Njk2MDUzNS43MzkzMzkxMjg5MzY0NTkxNTEzIEluZXhhY3QgUm91bmRlZAorYWRkeDM0MjAgYWRkIC01NTY4MDU3LjE3ODcwMTM5NTQ5NDc4Mjc3OTgwNTQwMDM0IC00MDc5MDY0NDMuMTQxMzQyMTc1NzQwNDcxODQ5NzIzNjM4IC0+IC00MTM0NzQ1MDAuMzIwMDQzNTcxMjM1MjU0NjI5NTI5MDM4IEluZXhhY3QgUm91bmRlZAorY29teDM0MjAgY29tcGFyZSAtNTU2ODA1Ny4xNzg3MDEzOTU0OTQ3ODI3Nzk4MDU0MDAzNCAtNDA3OTA2NDQzLjE0MTM0MjE3NTc0MDQ3MTg0OTcyMzYzOCAtPiAxCitkaXZ4MzQyMCBkaXZpZGUgLTU1NjgwNTcuMTc4NzAxMzk1NDk0NzgyNzc5ODA1NDAwMzQgLTQwNzkwNjQ0My4xNDEzNDIxNzU3NDA0NzE4NDk3MjM2MzggLT4gMC4wMTM2NTAzMjkwNzAxMTk3MDk0OTUzNDI5MDE4MDEzMTQ2IEluZXhhY3QgUm91bmRlZAorZHZpeDM0MjAgZGl2aWRlaW50IC01NTY4MDU3LjE3ODcwMTM5NTQ5NDc4Mjc3OTgwNTQwMDM0IC00MDc5MDY0NDMuMTQxMzQyMTc1NzQwNDcxODQ5NzIzNjM4IC0+IDAKK211bHgzNDIwIG11bHRpcGx5IC01NTY4MDU3LjE3ODcwMTM5NTQ5NDc4Mjc3OTgwNTQwMDM0IC00MDc5MDY0NDMuMTQxMzQyMTc1NzQwNDcxODQ5NzIzNjM4IC0+IDIyNzEyNDYzOTg5NzE3MDIuOTExNjk4MDc3MjgxMzIwODkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQyMCBwb3dlciAtNTU2ODA1Ny4xNzg3MDEzOTU0OTQ3ODI3Nzk4MDU0MDAzNCAtNDA3OTA2NDQzIC0+IC0wRS0xMDAzMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzQyMCByZW1haW5kZXIgLTU1NjgwNTcuMTc4NzAxMzk1NDk0NzgyNzc5ODA1NDAwMzQgLTQwNzkwNjQ0My4xNDEzNDIxNzU3NDA0NzE4NDk3MjM2MzggLT4gLTU1NjgwNTcuMTc4NzAxMzk1NDk0NzgyNzc5ODA1NDAwMzQKK3N1YngzNDIwIHN1YnRyYWN0IC01NTY4MDU3LjE3ODcwMTM5NTQ5NDc4Mjc3OTgwNTQwMDM0IC00MDc5MDY0NDMuMTQxMzQyMTc1NzQwNDcxODQ5NzIzNjM4IC0+IDQwMjMzODM4NS45NjI2NDA3ODAyNDU2ODkwNjk5MTgyMzggSW5leGFjdCBSb3VuZGVkCithZGR4MzQyMSBhZGQgOTgwNDM4NTI3My40OTUzMzUyNDQxNjQxNTE4OTk5MDg1NyA4NC4xNDMzOTI5NzQzNTQ0NjU5NTUzOTY0ODA0NjQ2NTY5IC0+IDk4MDQzODUzNTcuNjM4NzI4MjE4NTE4NjE3ODU1MzA1MDUgSW5leGFjdCBSb3VuZGVkCitjb214MzQyMSBjb21wYXJlIDk4MDQzODUyNzMuNDk1MzM1MjQ0MTY0MTUxODk5OTA4NTcgODQuMTQzMzkyOTc0MzU0NDY1OTU1Mzk2NDgwNDY0NjU2OSAtPiAxCitkaXZ4MzQyMSBkaXZpZGUgOTgwNDM4NTI3My40OTUzMzUyNDQxNjQxNTE4OTk5MDg1NyA4NC4xNDMzOTI5NzQzNTQ0NjU5NTUzOTY0ODA0NjQ2NTY5IC0+IDExNjUxOTk2NS44MjE3MTk5Nzc0MDIzOTgxOTA1NTg0MzkgSW5leGFjdCBSb3VuZGVkCitkdml4MzQyMSBkaXZpZGVpbnQgOTgwNDM4NTI3My40OTUzMzUyNDQxNjQxNTE4OTk5MDg1NyA4NC4xNDMzOTI5NzQzNTQ0NjU5NTUzOTY0ODA0NjQ2NTY5IC0+IDExNjUxOTk2NQorbXVseDM0MjEgbXVsdGlwbHkgOTgwNDM4NTI3My40OTUzMzUyNDQxNjQxNTE4OTk5MDg1NyA4NC4xNDMzOTI5NzQzNTQ0NjU5NTUzOTY0ODA0NjQ2NTY5IC0+IDgyNDk3NDI0MjkzOS42OTE3ODA3OTg2MjExODA5MDE3MTQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQyMSBwb3dlciA5ODA0Mzg1MjczLjQ5NTMzNTI0NDE2NDE1MTg5OTkwODU3IDg0IC0+IDEuOTAyNDQwMTA3Nzk2OTI3MzkwMzcwODA0MTg1MDc5MDlFKzgzOSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDIxIHJlbWFpbmRlciA5ODA0Mzg1MjczLjQ5NTMzNTI0NDE2NDE1MTg5OTkwODU3IDg0LjE0MzM5Mjk3NDM1NDQ2NTk1NTM5NjQ4MDQ2NDY1NjkgLT4gNjkuMTQyMzA2OTczNDQ3NjYyNDM1MDQzNTY0Mjc0OTkxNQorc3VieDM0MjEgc3VidHJhY3QgOTgwNDM4NTI3My40OTUzMzUyNDQxNjQxNTE4OTk5MDg1NyA4NC4xNDMzOTI5NzQzNTQ0NjU5NTUzOTY0ODA0NjQ2NTY5IC0+IDk4MDQzODUxODkuMzUxOTQyMjY5ODA5Njg1OTQ0NTEyMDkgSW5leGFjdCBSb3VuZGVkCithZGR4MzQyMiBhZGQgLTUyMzQ5MTA5ODY1OTIuMTg4MDE3MjcwNDY1ODAwMTQyNzNFLTU0NyAtNTg3NDIyMDcxNTg5Mi45MTQ0MDA2OTIxMDUxMjUxNTE1NCAtPiAtNTg3NDIyMDcxNTg5Mi45MTQ0MDA2OTIxMDUxMjUxNTE1NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDIyIGNvbXBhcmUgLTUyMzQ5MTA5ODY1OTIuMTg4MDE3MjcwNDY1ODAwMTQyNzNFLTU0NyAtNTg3NDIyMDcxNTg5Mi45MTQ0MDA2OTIxMDUxMjUxNTE1NCAtPiAxCitkaXZ4MzQyMiBkaXZpZGUgLTUyMzQ5MTA5ODY1OTIuMTg4MDE3MjcwNDY1ODAwMTQyNzNFLTU0NyAtNTg3NDIyMDcxNTg5Mi45MTQ0MDA2OTIxMDUxMjUxNTE1NCAtPiA4LjkxMTY2ODg2NjAxNDc3MDIxNzU3NDM5ODI2OTAzNzc2RS01NDggSW5leGFjdCBSb3VuZGVkCitkdml4MzQyMiBkaXZpZGVpbnQgLTUyMzQ5MTA5ODY1OTIuMTg4MDE3MjcwNDY1ODAwMTQyNzNFLTU0NyAtNTg3NDIyMDcxNTg5Mi45MTQ0MDA2OTIxMDUxMjUxNTE1NCAtPiAwCittdWx4MzQyMiBtdWx0aXBseSAtNTIzNDkxMDk4NjU5Mi4xODgwMTcyNzA0NjU4MDAxNDI3M0UtNTQ3IC01ODc0MjIwNzE1ODkyLjkxNDQwMDY5MjEwNTEyNTE1MTU0IC0+IDMuMDc1MTAyMjU2MzI5NTI0NTUxNDQ5NDQyODI5MjU1ODNFLTUyMiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDIyIHBvd2VyIC01MjM0OTEwOTg2NTkyLjE4ODAxNzI3MDQ2NTgwMDE0MjczRS01NDcgLTYgLT4gNC44NTg5Njk3MDcwMzExNzE0OTIzNTkzNTAzNzI3MTA4NEUrMzIwNSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDIyIHJlbWFpbmRlciAtNTIzNDkxMDk4NjU5Mi4xODgwMTcyNzA0NjU4MDAxNDI3M0UtNTQ3IC01ODc0MjIwNzE1ODkyLjkxNDQwMDY5MjEwNTEyNTE1MTU0IC0+IC01LjIzNDkxMDk4NjU5MjE4ODAxNzI3MDQ2NTgwMDE0MjczRS01MzUKK3N1YngzNDIyIHN1YnRyYWN0IC01MjM0OTEwOTg2NTkyLjE4ODAxNzI3MDQ2NTgwMDE0MjczRS01NDcgLTU4NzQyMjA3MTU4OTIuOTE0NDAwNjkyMTA1MTI1MTUxNTQgLT4gNTg3NDIyMDcxNTg5Mi45MTQ0MDA2OTIxMDUxMjUxNTE1NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDIzIGFkZCA2OTg0MTY1NjAxNTE5NTUyODU5Mjk3NDc2MzM3ODY4NjdFLTQ5NSA1MTc1NDY4MS42Nzg0ODcyNjI4OTMzMjE4OTg1MjE2OTE2RS0yNjYgLT4gNS4xNzU0NjgxNjc4NDg3MjYyODkzMzIxODk4NTIxNjkxNkUtMjU5IEluZXhhY3QgUm91bmRlZAorY29teDM0MjMgY29tcGFyZSA2OTg0MTY1NjAxNTE5NTUyODU5Mjk3NDc2MzM3ODY4NjdFLTQ5NSA1MTc1NDY4MS42Nzg0ODcyNjI4OTMzMjE4OTg1MjE2OTE2RS0yNjYgLT4gLTEKK2RpdngzNDIzIGRpdmlkZSA2OTg0MTY1NjAxNTE5NTUyODU5Mjk3NDc2MzM3ODY4NjdFLTQ5NSA1MTc1NDY4MS42Nzg0ODcyNjI4OTMzMjE4OTg1MjE2OTE2RS0yNjYgLT4gMS4zNDk0NzUxMzQ0MjQ5MTk3MTQ4ODM2MzI1MDM5ODkwOEUtMjA0IEluZXhhY3QgUm91bmRlZAorZHZpeDM0MjMgZGl2aWRlaW50IDY5ODQxNjU2MDE1MTk1NTI4NTkyOTc0NzYzMzc4Njg2N0UtNDk1IDUxNzU0NjgxLjY3ODQ4NzI2Mjg5MzMyMTg5ODUyMTY5MTZFLTI2NiAtPiAwCittdWx4MzQyMyBtdWx0aXBseSA2OTg0MTY1NjAxNTE5NTUyODU5Mjk3NDc2MzM3ODY4NjdFLTQ5NSA1MTc1NDY4MS42Nzg0ODcyNjI4OTMzMjE4OTg1MjE2OTE2RS0yNjYgLT4gMy42MTQ2MzI2NzQ5NjQ4NDk3NjA2NDI3MTMwNTY3OTc5NkUtNzIxIEluZXhhY3QgUm91bmRlZAorcG93eDM0MjMgcG93ZXIgNjk4NDE2NTYwMTUxOTU1Mjg1OTI5NzQ3NjMzNzg2ODY3RS00OTUgNSAtPiAxLjY2MTc3NjYxMDA3MTg5NDMwNzYxMzk2OTc5Nzg3NDEzRS0yMzExIEluZXhhY3QgUm91bmRlZAorcmVteDM0MjMgcmVtYWluZGVyIDY5ODQxNjU2MDE1MTk1NTI4NTkyOTc0NzYzMzc4Njg2N0UtNDk1IDUxNzU0NjgxLjY3ODQ4NzI2Mjg5MzMyMTg5ODUyMTY5MTZFLTI2NiAtPiA2Ljk4NDE2NTYwMTUxOTU1Mjg1OTI5NzQ3NjMzNzg2ODY3RS00NjMKK3N1YngzNDIzIHN1YnRyYWN0IDY5ODQxNjU2MDE1MTk1NTI4NTkyOTc0NzYzMzc4Njg2N0UtNDk1IDUxNzU0NjgxLjY3ODQ4NzI2Mjg5MzMyMTg5ODUyMTY5MTZFLTI2NiAtPiAtNS4xNzU0NjgxNjc4NDg3MjYyODkzMzIxODk4NTIxNjkxNkUtMjU5IEluZXhhY3QgUm91bmRlZAorYWRkeDM0MjQgYWRkIDEwNzYzNS40OTc3MzUzMTY1MTUwODA3MjAzMzA1MzYwMjcgLTM5NzIwNzUuODM5ODk1MTI2NjgzNjI2MDk2MDkwMDY0MjVFLTYwNSAtPiAxMDc2MzUuNDk3NzM1MzE2NTE1MDgwNzIwMzMwNTM2MDI3IEluZXhhY3QgUm91bmRlZAorY29teDM0MjQgY29tcGFyZSAxMDc2MzUuNDk3NzM1MzE2NTE1MDgwNzIwMzMwNTM2MDI3IC0zOTcyMDc1LjgzOTg5NTEyNjY4MzYyNjA5NjA5MDA2NDI1RS02MDUgLT4gMQorZGl2eDM0MjQgZGl2aWRlIDEwNzYzNS40OTc3MzUzMTY1MTUwODA3MjAzMzA1MzYwMjcgLTM5NzIwNzUuODM5ODk1MTI2NjgzNjI2MDk2MDkwMDY0MjVFLTYwNSAtPiAtMi43MDk4MDQ2OTg0NDU5OTg4ODQ0MzMwOTU3MTIzNTU5N0UrNjAzIEluZXhhY3QgUm91bmRlZAorZHZpeDM0MjQgZGl2aWRlaW50IDEwNzYzNS40OTc3MzUzMTY1MTUwODA3MjAzMzA1MzYwMjcgLTM5NzIwNzUuODM5ODk1MTI2NjgzNjI2MDk2MDkwMDY0MjVFLTYwNSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0MjQgbXVsdGlwbHkgMTA3NjM1LjQ5NzczNTMxNjUxNTA4MDcyMDMzMDUzNjAyNyAtMzk3MjA3NS44Mzk4OTUxMjY2ODM2MjYwOTYwOTAwNjQyNUUtNjA1IC0+IC00LjI3NTM2MzYwMDY5NTM3MzUyNjk4MDY2NDA4MDIxNzczRS01OTQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQyNCBwb3dlciAxMDc2MzUuNDk3NzM1MzE2NTE1MDgwNzIwMzMwNTM2MDI3IC00IC0+IDcuNDUwMzcxMTE1MDI5MTA0ODc4MDM0MzI4MDYzMzQ3MTRFLTIxIEluZXhhY3QgUm91bmRlZAorcmVteDM0MjQgcmVtYWluZGVyIDEwNzYzNS40OTc3MzUzMTY1MTUwODA3MjAzMzA1MzYwMjcgLTM5NzIwNzUuODM5ODk1MTI2NjgzNjI2MDk2MDkwMDY0MjVFLTYwNSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0MjQgc3VidHJhY3QgMTA3NjM1LjQ5NzczNTMxNjUxNTA4MDcyMDMzMDUzNjAyNyAtMzk3MjA3NS44Mzk4OTUxMjY2ODM2MjYwOTYwOTAwNjQyNUUtNjA1IC0+IDEwNzYzNS40OTc3MzUzMTY1MTUwODA3MjAzMzA1MzYwMjcgSW5leGFjdCBSb3VuZGVkCithZGR4MzQyNSBhZGQgLTMyMTc0MjkxMzQ1Njg2LjUzNzE0NDY2MTY2NzA5NjE4MDcgNzk1MTg4NjM3NTkzODUuNTkyNTA1Mjc0Nzg2NzA5OTA5MUUrNDA4IC0+IDcuOTUxODg2Mzc1OTM4NTU5MjUwNTI3NDc4NjcwOTkwOTFFKzQyMSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDI1IGNvbXBhcmUgLTMyMTc0MjkxMzQ1Njg2LjUzNzE0NDY2MTY2NzA5NjE4MDcgNzk1MTg4NjM3NTkzODUuNTkyNTA1Mjc0Nzg2NzA5OTA5MUUrNDA4IC0+IC0xCitkaXZ4MzQyNSBkaXZpZGUgLTMyMTc0MjkxMzQ1Njg2LjUzNzE0NDY2MTY2NzA5NjE4MDcgNzk1MTg4NjM3NTkzODUuNTkyNTA1Mjc0Nzg2NzA5OTA5MUUrNDA4IC0+IC00LjA0NjEyMDYwODk0NjU4MDA3NzE1NjIxODA3ODgxMDc2RS00MDkgSW5leGFjdCBSb3VuZGVkCitkdml4MzQyNSBkaXZpZGVpbnQgLTMyMTc0MjkxMzQ1Njg2LjUzNzE0NDY2MTY2NzA5NjE4MDcgNzk1MTg4NjM3NTkzODUuNTkyNTA1Mjc0Nzg2NzA5OTA5MUUrNDA4IC0+IC0wCittdWx4MzQyNSBtdWx0aXBseSAtMzIxNzQyOTEzNDU2ODYuNTM3MTQ0NjYxNjY3MDk2MTgwNyA3OTUxODg2Mzc1OTM4NS41OTI1MDUyNzQ3ODY3MDk5MDkxRSs0MDggLT4gLTIuNTU4NDYzMDkwMDcyNDI2Njg1MTMyMjY4MTQwNDM1OTNFKzQzNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDI1IHBvd2VyIC0zMjE3NDI5MTM0NTY4Ni41MzcxNDQ2NjE2NjcwOTYxODA3IDggLT4gMS4xNDgzNDM3NzY1NjEwOTE0MzIxMDA1ODY5MDU5MDY2NkUrMTA4IEluZXhhY3QgUm91bmRlZAorcmVteDM0MjUgcmVtYWluZGVyIC0zMjE3NDI5MTM0NTY4Ni41MzcxNDQ2NjE2NjcwOTYxODA3IDc5NTE4ODYzNzU5Mzg1LjU5MjUwNTI3NDc4NjcwOTkwOTFFKzQwOCAtPiAtMzIxNzQyOTEzNDU2ODYuNTM3MTQ0NjYxNjY3MDk2MTgwNworc3VieDM0MjUgc3VidHJhY3QgLTMyMTc0MjkxMzQ1Njg2LjUzNzE0NDY2MTY2NzA5NjE4MDcgNzk1MTg4NjM3NTkzODUuNTkyNTA1Mjc0Nzg2NzA5OTA5MUUrNDA4IC0+IC03Ljk1MTg4NjM3NTkzODU1OTI1MDUyNzQ3ODY3MDk5MDkxRSs0MjEgSW5leGFjdCBSb3VuZGVkCithZGR4MzQyNiBhZGQgLTgxNTE3MzA0OTQuNTMxOTA1MjM2MjA4OTk0MTA1NDQwOTlFKzY4OCAtOTMxNzMuMDYzMTQ3NDUyNzE0MjMwNzY0NDIzOTkxOTQ4MEUrOTAwIC0+IC05LjMxNzMwNjMxNDc0NTI3MTQyMzA3NjQ0MjM5OTE5NDgwRSs5MDQgSW5leGFjdCBSb3VuZGVkCitjb214MzQyNiBjb21wYXJlIC04MTUxNzMwNDk0LjUzMTkwNTIzNjIwODk5NDEwNTQ0MDk5RSs2ODggLTkzMTczLjA2MzE0NzQ1MjcxNDIzMDc2NDQyMzk5MTk0ODBFKzkwMCAtPiAxCitkaXZ4MzQyNiBkaXZpZGUgLTgxNTE3MzA0OTQuNTMxOTA1MjM2MjA4OTk0MTA1NDQwOTlFKzY4OCAtOTMxNzMuMDYzMTQ3NDUyNzE0MjMwNzY0NDIzOTkxOTQ4MEUrOTAwIC0+IDguNzQ5MDIwNjA2NTU3OTY3MTcwNDM2Nzg0NDE4ODQyODNFLTIwOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDI2IGRpdmlkZWludCAtODE1MTczMDQ5NC41MzE5MDUyMzYyMDg5OTQxMDU0NDA5OUUrNjg4IC05MzE3My4wNjMxNDc0NTI3MTQyMzA3NjQ0MjM5OTE5NDgwRSs5MDAgLT4gMAorbXVseDM0MjYgbXVsdGlwbHkgLTgxNTE3MzA0OTQuNTMxOTA1MjM2MjA4OTk0MTA1NDQwOTlFKzY4OCAtOTMxNzMuMDYzMTQ3NDUyNzE0MjMwNzY0NDIzOTkxOTQ4MEUrOTAwIC0+IDcuNTk1MjE3MDAxMjgwMzcxNDkxNzk3NTE0Njc3MzA5NjJFKzE2MDIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQyNiBwb3dlciAtODE1MTczMDQ5NC41MzE5MDUyMzYyMDg5OTQxMDU0NDA5OUUrNjg4IC05IC0+IC02LjI5MTQ2MzUyNzc0ODQyNDQ4Mzc1Mjc1MjgyMTgzNzAwRS02MjgyIEluZXhhY3QgUm91bmRlZAorcmVteDM0MjYgcmVtYWluZGVyIC04MTUxNzMwNDk0LjUzMTkwNTIzNjIwODk5NDEwNTQ0MDk5RSs2ODggLTkzMTczLjA2MzE0NzQ1MjcxNDIzMDc2NDQyMzk5MTk0ODBFKzkwMCAtPiAtOC4xNTE3MzA0OTQ1MzE5MDUyMzYyMDg5OTQxMDU0NDA5OUUrNjk3CitzdWJ4MzQyNiBzdWJ0cmFjdCAtODE1MTczMDQ5NC41MzE5MDUyMzYyMDg5OTQxMDU0NDA5OUUrNjg4IC05MzE3My4wNjMxNDc0NTI3MTQyMzA3NjQ0MjM5OTE5NDgwRSs5MDAgLT4gOS4zMTczMDYzMTQ3NDUyNzE0MjMwNzY0NDIzOTkxOTQ4MEUrOTA0IEluZXhhY3QgUm91bmRlZAorYWRkeDM0MjcgYWRkIDEuMzM2NDk4MDEzNDU5NzYxOTk3MDgzNDE3OTk1MDUyMjAgLTU2NjIzLjA1MzAwMzk1Mjg5Njk4MjU0ODA3NTUxNTk1NjJFKzQ1OSAtPiAtNS42NjIzMDUzMDAzOTUyODk2OTgyNTQ4MDc1NTE1OTU2MkUrNDYzIEluZXhhY3QgUm91bmRlZAorY29teDM0MjcgY29tcGFyZSAxLjMzNjQ5ODAxMzQ1OTc2MTk5NzA4MzQxNzk5NTA1MjIwIC01NjYyMy4wNTMwMDM5NTI4OTY5ODI1NDgwNzU1MTU5NTYyRSs0NTkgLT4gMQorZGl2eDM0MjcgZGl2aWRlIDEuMzM2NDk4MDEzNDU5NzYxOTk3MDgzNDE3OTk1MDUyMjAgLTU2NjIzLjA1MzAwMzk1Mjg5Njk4MjU0ODA3NTUxNTk1NjJFKzQ1OSAtPiAtMi4zNjAzNDI1NTA1MjcwMDkwMDM5NTc4NzEzMTMzNDYwOEUtNDY0IEluZXhhY3QgUm91bmRlZAorZHZpeDM0MjcgZGl2aWRlaW50IDEuMzM2NDk4MDEzNDU5NzYxOTk3MDgzNDE3OTk1MDUyMjAgLTU2NjIzLjA1MzAwMzk1Mjg5Njk4MjU0ODA3NTUxNTk1NjJFKzQ1OSAtPiAtMAorbXVseDM0MjcgbXVsdGlwbHkgMS4zMzY0OTgwMTM0NTk3NjE5OTcwODM0MTc5OTUwNTIyMCAtNTY2MjMuMDUzMDAzOTUyODk2OTgyNTQ4MDc1NTE1OTU2MkUrNDU5IC0+IC03LjU2NzY1OTc4NTU4MDk4NTU4OTI4MjY4MTI5NzAwMDUyRSs0NjMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQyNyBwb3dlciAxLjMzNjQ5ODAxMzQ1OTc2MTk5NzA4MzQxNzk5NTA1MjIwIC02IC0+IDAuMTc1NDY0ODM1OTEyMjg0OTAwMTgwMzA1MDI4OTY1MTg4IEluZXhhY3QgUm91bmRlZAorcmVteDM0MjcgcmVtYWluZGVyIDEuMzM2NDk4MDEzNDU5NzYxOTk3MDgzNDE3OTk1MDUyMjAgLTU2NjIzLjA1MzAwMzk1Mjg5Njk4MjU0ODA3NTUxNTk1NjJFKzQ1OSAtPiAxLjMzNjQ5ODAxMzQ1OTc2MTk5NzA4MzQxNzk5NTA1MjIwCitzdWJ4MzQyNyBzdWJ0cmFjdCAxLjMzNjQ5ODAxMzQ1OTc2MTk5NzA4MzQxNzk5NTA1MjIwIC01NjYyMy4wNTMwMDM5NTI4OTY5ODI1NDgwNzU1MTU5NTYyRSs0NTkgLT4gNS42NjIzMDUzMDAzOTUyODk2OTgyNTQ4MDc1NTE1OTU2MkUrNDYzIEluZXhhY3QgUm91bmRlZAorYWRkeDM0MjggYWRkIDY3NzYyMjM4MTYyNzg4LjY1NTEwNjE0NzYwMTgxODUxOTYgLTYxNDAuNzU4Mzc5NTkyNDgxMDAzNTI3ODg4NTM4MDkzNzZFLTgyMiAtPiA2Nzc2MjIzODE2Mjc4OC42NTUxMDYxNDc2MDE4MTg1MTk2IEluZXhhY3QgUm91bmRlZAorY29teDM0MjggY29tcGFyZSA2Nzc2MjIzODE2Mjc4OC42NTUxMDYxNDc2MDE4MTg1MTk2IC02MTQwLjc1ODM3OTU5MjQ4MTAwMzUyNzg4ODUzODA5Mzc2RS04MjIgLT4gMQorZGl2eDM0MjggZGl2aWRlIDY3NzYyMjM4MTYyNzg4LjY1NTEwNjE0NzYwMTgxODUxOTYgLTYxNDAuNzU4Mzc5NTkyNDgxMDAzNTI3ODg4NTM4MDkzNzZFLTgyMiAtPiAtMS4xMDM0ODMyMTc3NzI5NDE1NzAxNDk0MTk1MTg3MDQwOUUrODMyIEluZXhhY3QgUm91bmRlZAorZHZpeDM0MjggZGl2aWRlaW50IDY3NzYyMjM4MTYyNzg4LjY1NTEwNjE0NzYwMTgxODUxOTYgLTYxNDAuNzU4Mzc5NTkyNDgxMDAzNTI3ODg4NTM4MDkzNzZFLTgyMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0MjggbXVsdGlwbHkgNjc3NjIyMzgxNjI3ODguNjU1MTA2MTQ3NjAxODE4NTE5NiAtNjE0MC43NTgzNzk1OTI0ODEwMDM1Mjc4ODg1MzgwOTM3NkUtODIyIC0+IC00LjE2MTExNTMxODE4MDg1ODM4NzE3MjAxODI4NzczODU3RS04MDUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQyOCBwb3dlciA2Nzc2MjIzODE2Mjc4OC42NTUxMDYxNDc2MDE4MTg1MTk2IC02IC0+IDEuMDMyOTM2MzE3MDgwMDY1MDkwNzQ5NzI3NjQ2NzAyODFFLTgzIEluZXhhY3QgUm91bmRlZAorcmVteDM0MjggcmVtYWluZGVyIDY3NzYyMjM4MTYyNzg4LjY1NTEwNjE0NzYwMTgxODUxOTYgLTYxNDAuNzU4Mzc5NTkyNDgxMDAzNTI3ODg4NTM4MDkzNzZFLTgyMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0Mjggc3VidHJhY3QgNjc3NjIyMzgxNjI3ODguNjU1MTA2MTQ3NjAxODE4NTE5NiAtNjE0MC43NTgzNzk1OTI0ODEwMDM1Mjc4ODg1MzgwOTM3NkUtODIyIC0+IDY3NzYyMjM4MTYyNzg4LjY1NTEwNjE0NzYwMTgxODUxOTYgSW5leGFjdCBSb3VuZGVkCithZGR4MzQyOSBhZGQgNDI4NjU2Mi43NjU2ODg2Njc1MTU3NzMwNjA1NjQ5ODI3MSA2Mjg2Ljc3MjkxNTc4NDk3NTgwMDE1NTU3OTc5MzQ5ODkzRSs4MjAgLT4gNi4yODY3NzI5MTU3ODQ5NzU4MDAxNTU1Nzk3OTM0OTg5M0UrODIzIEluZXhhY3QgUm91bmRlZAorY29teDM0MjkgY29tcGFyZSA0Mjg2NTYyLjc2NTY4ODY2NzUxNTc3MzA2MDU2NDk4MjcxIDYyODYuNzcyOTE1Nzg0OTc1ODAwMTU1NTc5NzkzNDk4OTNFKzgyMCAtPiAtMQorZGl2eDM0MjkgZGl2aWRlIDQyODY1NjIuNzY1Njg4NjY3NTE1NzczMDYwNTY0OTgyNzEgNjI4Ni43NzI5MTU3ODQ5NzU4MDAxNTU1Nzk3OTM0OTg5M0UrODIwIC0+IDYuODE4MzgzMzMxMzM2NjAwMjU3NDA2ODE0NTkzNDkzNzJFLTgxOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDI5IGRpdmlkZWludCA0Mjg2NTYyLjc2NTY4ODY2NzUxNTc3MzA2MDU2NDk4MjcxIDYyODYuNzcyOTE1Nzg0OTc1ODAwMTU1NTc5NzkzNDk4OTNFKzgyMCAtPiAwCittdWx4MzQyOSBtdWx0aXBseSA0Mjg2NTYyLjc2NTY4ODY2NzUxNTc3MzA2MDU2NDk4MjcxIDYyODYuNzcyOTE1Nzg0OTc1ODAwMTU1NTc5NzkzNDk4OTNFKzgyMCAtPiAyLjY5NDg2NDY2OTcxNDM4NTQyOTc1MTU5ODkzMzA2MjE5RSs4MzAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQyOSBwb3dlciA0Mjg2NTYyLjc2NTY4ODY2NzUxNTc3MzA2MDU2NDk4MjcxIDYgLT4gNi4yMDM3NjE5MzA2NDQxMjA4MTA1ODE4MTg4MTgwNTEwOEUrMzkgSW5leGFjdCBSb3VuZGVkCityZW14MzQyOSByZW1haW5kZXIgNDI4NjU2Mi43NjU2ODg2Njc1MTU3NzMwNjA1NjQ5ODI3MSA2Mjg2Ljc3MjkxNTc4NDk3NTgwMDE1NTU3OTc5MzQ5ODkzRSs4MjAgLT4gNDI4NjU2Mi43NjU2ODg2Njc1MTU3NzMwNjA1NjQ5ODI3MQorc3VieDM0Mjkgc3VidHJhY3QgNDI4NjU2Mi43NjU2ODg2Njc1MTU3NzMwNjA1NjQ5ODI3MSA2Mjg2Ljc3MjkxNTc4NDk3NTgwMDE1NTU3OTc5MzQ5ODkzRSs4MjAgLT4gLTYuMjg2NzcyOTE1Nzg0OTc1ODAwMTU1NTc5NzkzNDk4OTNFKzgyMyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDMwIGFkZCAtNzY1NzgyLjgyNzQzMjY0MjY5NzMwNTY0NDA5NjM2NTU2NiA2Ny4xNjM0MzY4NDU5NTc2ODM0NjkyNzU4MTE0NjE4NjUyIC0+IC03NjU3MTUuNjYzOTk1Nzk2NzM5NjIyMTc0ODIwNTU0MTA0IEluZXhhY3QgUm91bmRlZAorY29teDM0MzAgY29tcGFyZSAtNzY1NzgyLjgyNzQzMjY0MjY5NzMwNTY0NDA5NjM2NTU2NiA2Ny4xNjM0MzY4NDU5NTc2ODM0NjkyNzU4MTE0NjE4NjUyIC0+IC0xCitkaXZ4MzQzMCBkaXZpZGUgLTc2NTc4Mi44Mjc0MzI2NDI2OTczMDU2NDQwOTYzNjU1NjYgNjcuMTYzNDM2ODQ1OTU3NjgzNDY5Mjc1ODExNDYxODY1MiAtPiAtMTE0MDEuNzgxNDM2MzYzOTQ3ODc3NDc2MTY5NzY1MDg2NyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDMwIGRpdmlkZWludCAtNzY1NzgyLjgyNzQzMjY0MjY5NzMwNTY0NDA5NjM2NTU2NiA2Ny4xNjM0MzY4NDU5NTc2ODM0NjkyNzU4MTE0NjE4NjUyIC0+IC0xMTQwMQorbXVseDM0MzAgbXVsdGlwbHkgLTc2NTc4Mi44Mjc0MzI2NDI2OTczMDU2NDQwOTYzNjU1NjYgNjcuMTYzNDM2ODQ1OTU3NjgzNDY5Mjc1ODExNDYxODY1MiAtPiAtNTE0MzI2MDYuNTY3OTkxMjA4ODQ2ODI1NjEyMjMxNTk0NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDMwIHBvd2VyIC03NjU3ODIuODI3NDMyNjQyNjk3MzA1NjQ0MDk2MzY1NTY2IDY3IC0+IC0xLjcxODIxMjAwNzcwNzQ5NzczNTk1NDczNTk0MTM2NTgyRSszOTQgSW5leGFjdCBSb3VuZGVkCityZW14MzQzMCByZW1haW5kZXIgLTc2NTc4Mi44Mjc0MzI2NDI2OTczMDU2NDQwOTYzNjU1NjYgNjcuMTYzNDM2ODQ1OTU3NjgzNDY5Mjc1ODExNDYxODY1MiAtPiAtNTIuNDgzOTUxODc5MTQ4MDcyNDMwNTY5ODg4ODQwODU0OAorc3VieDM0MzAgc3VidHJhY3QgLTc2NTc4Mi44Mjc0MzI2NDI2OTczMDU2NDQwOTYzNjU1NjYgNjcuMTYzNDM2ODQ1OTU3NjgzNDY5Mjc1ODExNDYxODY1MiAtPiAtNzY1ODQ5Ljk5MDg2OTQ4ODY1NDk4OTExMzM3MjE3NzAyOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDMxIGFkZCA0Ni4yODM1OTMxOTE2MTA2MjUyNzU2NDY1NzI0MjExMjc2IDU5LjI5ODkyMzc4MzQwOTMxMTgzMzI4MjY2MTc5NTc3OTEgLT4gMTA1LjU4MjUxNjk3NTAxOTkzNzEwODkyOTIzNDIxNjkwNyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDMxIGNvbXBhcmUgNDYuMjgzNTkzMTkxNjEwNjI1Mjc1NjQ2NTcyNDIxMTI3NiA1OS4yOTg5MjM3ODM0MDkzMTE4MzMyODI2NjE3OTU3NzkxIC0+IC0xCitkaXZ4MzQzMSBkaXZpZGUgNDYuMjgzNTkzMTkxNjEwNjI1Mjc1NjQ2NTcyNDIxMTI3NiA1OS4yOTg5MjM3ODM0MDkzMTE4MzMyODI2NjE3OTU3NzkxIC0+IDAuNzgwNTEzMjA3Mjk5NzIyOTc1ODgyNDE2OTk1MTQwNzAxIEluZXhhY3QgUm91bmRlZAorZHZpeDM0MzEgZGl2aWRlaW50IDQ2LjI4MzU5MzE5MTYxMDYyNTI3NTY0NjU3MjQyMTEyNzYgNTkuMjk4OTIzNzgzNDA5MzExODMzMjgyNjYxNzk1Nzc5MSAtPiAwCittdWx4MzQzMSBtdWx0aXBseSA0Ni4yODM1OTMxOTE2MTA2MjUyNzU2NDY1NzI0MjExMjc2IDU5LjI5ODkyMzc4MzQwOTMxMTgzMzI4MjY2MTc5NTc3OTEgLT4gMjc0NC41NjcyNjUwOTE2NDA2MDU2MTM3MDY1MzI4NjYxNCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDMxIHBvd2VyIDQ2LjI4MzU5MzE5MTYxMDYyNTI3NTY0NjU3MjQyMTEyNzYgNTkgLT4gMS44MjA1MjY0NTc4MDYwMTAwMjY3MTAwNzk0MzkyMzk5M0UrOTggSW5leGFjdCBSb3VuZGVkCityZW14MzQzMSByZW1haW5kZXIgNDYuMjgzNTkzMTkxNjEwNjI1Mjc1NjQ2NTcyNDIxMTI3NiA1OS4yOTg5MjM3ODM0MDkzMTE4MzMyODI2NjE3OTU3NzkxIC0+IDQ2LjI4MzU5MzE5MTYxMDYyNTI3NTY0NjU3MjQyMTEyNzYKK3N1YngzNDMxIHN1YnRyYWN0IDQ2LjI4MzU5MzE5MTYxMDYyNTI3NTY0NjU3MjQyMTEyNzYgNTkuMjk4OTIzNzgzNDA5MzExODMzMjgyNjYxNzk1Nzc5MSAtPiAtMTMuMDE1MzMwNTkxNzk4Njg2NTU3NjM2MDg5Mzc0NjUxNQorYWRkeDM0MzIgYWRkIC0zMDI5NTU1LjgyMjk4ODQwMjM0MDI5NDc0NDU5Njk0NjQ0IDg1NzUzNTg0NDY1NTAwNDczNzM3MzA4OTYwMTEyODUzMiAtPiA4NTc1MzU4NDQ2NTUwMDQ3MzczNzMwODk1OTgwOTg5NzYgSW5leGFjdCBSb3VuZGVkCitjb214MzQzMiBjb21wYXJlIC0zMDI5NTU1LjgyMjk4ODQwMjM0MDI5NDc0NDU5Njk0NjQ0IDg1NzUzNTg0NDY1NTAwNDczNzM3MzA4OTYwMTEyODUzMiAtPiAtMQorZGl2eDM0MzIgZGl2aWRlIC0zMDI5NTU1LjgyMjk4ODQwMjM0MDI5NDc0NDU5Njk0NjQ0IDg1NzUzNTg0NDY1NTAwNDczNzM3MzA4OTYwMTEyODUzMiAtPiAtMy41MzI4NjIwMjc3MTc1OTcwNDUwMjEyNjgxMTMyMzkzN0UtMjcgSW5leGFjdCBSb3VuZGVkCitkdml4MzQzMiBkaXZpZGVpbnQgLTMwMjk1NTUuODIyOTg4NDAyMzQwMjk0NzQ0NTk2OTQ2NDQgODU3NTM1ODQ0NjU1MDA0NzM3MzczMDg5NjAxMTI4NTMyIC0+IC0wCittdWx4MzQzMiBtdWx0aXBseSAtMzAyOTU1NS44MjI5ODg0MDIzNDAyOTQ3NDQ1OTY5NDY0NCA4NTc1MzU4NDQ2NTUwMDQ3MzczNzMwODk2MDExMjg1MzIgLT4gLTIuNTk3OTUyNzExNTk1ODQ3NjE5Mjg5ODYxODE5MjU3MjFFKzM5IEluZXhhY3QgUm91bmRlZAorcG93eDM0MzIgcG93ZXIgLTMwMjk1NTUuODIyOTg4NDAyMzQwMjk0NzQ0NTk2OTQ2NDQgOSAtPiAtMi4xNDk4NjIyNDc5MDQzMTMwMjU2MTM0MDEwMDc0NjM2MEUrNTggSW5leGFjdCBSb3VuZGVkCityZW14MzQzMiByZW1haW5kZXIgLTMwMjk1NTUuODIyOTg4NDAyMzQwMjk0NzQ0NTk2OTQ2NDQgODU3NTM1ODQ0NjU1MDA0NzM3MzczMDg5NjAxMTI4NTMyIC0+IC0zMDI5NTU1LjgyMjk4ODQwMjM0MDI5NDc0NDU5Njk0NjQ0CitzdWJ4MzQzMiBzdWJ0cmFjdCAtMzAyOTU1NS44MjI5ODg0MDIzNDAyOTQ3NDQ1OTY5NDY0NCA4NTc1MzU4NDQ2NTUwMDQ3MzczNzMwODk2MDExMjg1MzIgLT4gLTg1NzUzNTg0NDY1NTAwNDczNzM3MzA4OTYwNDE1ODA4OCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDMzIGFkZCAtMDEzODQ2Njc4OTUyMy4xMDY5NDE3NjU0MzcwMDUwMTk0NUUtOTQ4IDQ4MTAyNjk3OTkxODg4MjQ4NzM4MzY1NDM2NzkyNDYxOSAtPiA0ODEwMjY5Nzk5MTg4ODI0ODczODM2NTQzNjc5MjQ2MTkgSW5leGFjdCBSb3VuZGVkCitjb214MzQzMyBjb21wYXJlIC0wMTM4NDY2Nzg5NTIzLjEwNjk0MTc2NTQzNzAwNTAxOTQ1RS05NDggNDgxMDI2OTc5OTE4ODgyNDg3MzgzNjU0MzY3OTI0NjE5IC0+IC0xCitkaXZ4MzQzMyBkaXZpZGUgLTAxMzg0NjY3ODk1MjMuMTA2OTQxNzY1NDM3MDA1MDE5NDVFLTk0OCA0ODEwMjY5Nzk5MTg4ODI0ODczODM2NTQzNjc5MjQ2MTkgLT4gLTIuODc4NTY1OTcwMzgzOTcyMDc3OTc3Nzc4MTExOTk4MDRFLTk3MCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDMzIGRpdmlkZWludCAtMDEzODQ2Njc4OTUyMy4xMDY5NDE3NjU0MzcwMDUwMTk0NUUtOTQ4IDQ4MTAyNjk3OTkxODg4MjQ4NzM4MzY1NDM2NzkyNDYxOSAtPiAtMAorbXVseDM0MzMgbXVsdGlwbHkgLTAxMzg0NjY3ODk1MjMuMTA2OTQxNzY1NDM3MDA1MDE5NDVFLTk0OCA0ODEwMjY5Nzk5MTg4ODI0ODczODM2NTQzNjc5MjQ2MTkgLT4gLTYuNjYwNjI2MTU4MzM2MzY5MDg2ODM3ODUyODM2ODc0MTZFLTkwNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDMzIHBvd2VyIC0wMTM4NDY2Nzg5NTIzLjEwNjk0MTc2NTQzNzAwNTAxOTQ1RS05NDggNSAtPiAtNS4wOTAxMjEwOTA5MjYzNzUyNTg0MzYzNjA1Njc0NjY2N0UtNDY4NSBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDMzIHJlbWFpbmRlciAtMDEzODQ2Njc4OTUyMy4xMDY5NDE3NjU0MzcwMDUwMTk0NUUtOTQ4IDQ4MTAyNjk3OTkxODg4MjQ4NzM4MzY1NDM2NzkyNDYxOSAtPiAtMS4zODQ2Njc4OTUyMzEwNjk0MTc2NTQzNzAwNTAxOTQ1RS05MzcKK3N1YngzNDMzIHN1YnRyYWN0IC0wMTM4NDY2Nzg5NTIzLjEwNjk0MTc2NTQzNzAwNTAxOTQ1RS05NDggNDgxMDI2OTc5OTE4ODgyNDg3MzgzNjU0MzY3OTI0NjE5IC0+IC00ODEwMjY5Nzk5MTg4ODI0ODczODM2NTQzNjc5MjQ2MTkgSW5leGFjdCBSb3VuZGVkCithZGR4MzQzNCBhZGQgLTk1OTM1NjY0NjYuOTY2OTA1NzU3MTQyNDQ0NDIxMDk4NzAgLTg3NjMyMDM0MzQ3LjQ4NDU0Nzc5NjE5NzY3NzY4MzM3NzBFKzc2OSAtPiAtOC43NjMyMDM0MzQ3NDg0NTQ3Nzk2MTk3Njc3NjgzMzc3MEUrNzc5IEluZXhhY3QgUm91bmRlZAorY29teDM0MzQgY29tcGFyZSAtOTU5MzU2NjQ2Ni45NjY5MDU3NTcxNDI0NDQ0MjEwOTg3MCAtODc2MzIwMzQzNDcuNDg0NTQ3Nzk2MTk3Njc3NjgzMzc3MEUrNzY5IC0+IDEKK2RpdngzNDM0IGRpdmlkZSAtOTU5MzU2NjQ2Ni45NjY5MDU3NTcxNDI0NDQ0MjEwOTg3MCAtODc2MzIwMzQzNDcuNDg0NTQ3Nzk2MTk3Njc3NjgzMzc3MEUrNzY5IC0+IDEuMDk0NzU1NjQ5MzkyNTMxMzQwNzA3MzAyOTk4NjM3NjVFLTc3MCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDM0IGRpdmlkZWludCAtOTU5MzU2NjQ2Ni45NjY5MDU3NTcxNDI0NDQ0MjEwOTg3MCAtODc2MzIwMzQzNDcuNDg0NTQ3Nzk2MTk3Njc3NjgzMzc3MEUrNzY5IC0+IDAKK211bHgzNDM0IG11bHRpcGx5IC05NTkzNTY2NDY2Ljk2NjkwNTc1NzE0MjQ0NDQyMTA5ODcwIC04NzYzMjAzNDM0Ny40ODQ1NDc3OTYxOTc2Nzc2ODMzNzcwRSs3NjkgLT4gOC40MDcwMzc0NjE0ODExOTg2NzcxMTQ2MzQ4NTA2NTMzNkUrNzg5IEluZXhhY3QgUm91bmRlZAorcG93eDM0MzQgcG93ZXIgLTk1OTM1NjY0NjYuOTY2OTA1NzU3MTQyNDQ0NDIxMDk4NzAgLTkgLT4gLTEuNDUyNzEwOTE4NDE4ODI5NjAwMTA5NjQ0MjEwNjY3NDVFLTkwIEluZXhhY3QgUm91bmRlZAorcmVteDM0MzQgcmVtYWluZGVyIC05NTkzNTY2NDY2Ljk2NjkwNTc1NzE0MjQ0NDQyMTA5ODcwIC04NzYzMjAzNDM0Ny40ODQ1NDc3OTYxOTc2Nzc2ODMzNzcwRSs3NjkgLT4gLTk1OTM1NjY0NjYuOTY2OTA1NzU3MTQyNDQ0NDIxMDk4NzAKK3N1YngzNDM0IHN1YnRyYWN0IC05NTkzNTY2NDY2Ljk2NjkwNTc1NzE0MjQ0NDQyMTA5ODcwIC04NzYzMjAzNDM0Ny40ODQ1NDc3OTYxOTc2Nzc2ODMzNzcwRSs3NjkgLT4gOC43NjMyMDM0MzQ3NDg0NTQ3Nzk2MTk3Njc3NjgzMzc3MEUrNzc5IEluZXhhY3QgUm91bmRlZAorYWRkeDM0MzUgYWRkIC0zMTg5LjMwNzY1NDc3NjcwNTI2ODIzMTA2MTAwMjQxODYzRS04OTggNTY1Njg4ODg5LjM1NTI0MTk0NjE1NDg5NDMxMTI1MzIwMkUtNDY2IC0+IDUuNjU2ODg4ODkzNTUyNDE5NDYxNTQ4OTQzMTEyNTMyMDJFLTQ1OCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDM1IGNvbXBhcmUgLTMxODkuMzA3NjU0Nzc2NzA1MjY4MjMxMDYxMDAyNDE4NjNFLTg5OCA1NjU2ODg4ODkuMzU1MjQxOTQ2MTU0ODk0MzExMjUzMjAyRS00NjYgLT4gLTEKK2RpdngzNDM1IGRpdmlkZSAtMzE4OS4zMDc2NTQ3NzY3MDUyNjgyMzEwNjEwMDI0MTg2M0UtODk4IDU2NTY4ODg4OS4zNTUyNDE5NDYxNTQ4OTQzMTEyNTMyMDJFLTQ2NiAtPiAtNS42Mzc5MTgxNDY4NjY1NTQ4NjYxMjU2OTk3MDYyOTEyOEUtNDM4IEluZXhhY3QgUm91bmRlZAorZHZpeDM0MzUgZGl2aWRlaW50IC0zMTg5LjMwNzY1NDc3NjcwNTI2ODIzMTA2MTAwMjQxODYzRS04OTggNTY1Njg4ODg5LjM1NTI0MTk0NjE1NDg5NDMxMTI1MzIwMkUtNDY2IC0+IC0wCittdWx4MzQzNSBtdWx0aXBseSAtMzE4OS4zMDc2NTQ3NzY3MDUyNjgyMzEwNjEwMDI0MTg2M0UtODk4IDU2NTY4ODg4OS4zNTUyNDE5NDYxNTQ4OTQzMTEyNTMyMDJFLTQ2NiAtPiAtMS44MDQxNTU5MDUwNDI4MDU4MDQ0MzU2NTQ0ODEyNjU0OEUtMTM1MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDM1IHBvd2VyIC0zMTg5LjMwNzY1NDc3NjcwNTI2ODIzMTA2MTAwMjQxODYzRS04OTggNiAtPiAxLjA1MjM5NDMxMDI3NjgzOTA0NTE0MzExNTI3MjI4NzM2RS01MzY3IEluZXhhY3QgUm91bmRlZAorcmVteDM0MzUgcmVtYWluZGVyIC0zMTg5LjMwNzY1NDc3NjcwNTI2ODIzMTA2MTAwMjQxODYzRS04OTggNTY1Njg4ODg5LjM1NTI0MTk0NjE1NDg5NDMxMTI1MzIwMkUtNDY2IC0+IC0zLjE4OTMwNzY1NDc3NjcwNTI2ODIzMTA2MTAwMjQxODYzRS04OTUKK3N1YngzNDM1IHN1YnRyYWN0IC0zMTg5LjMwNzY1NDc3NjcwNTI2ODIzMTA2MTAwMjQxODYzRS04OTggNTY1Njg4ODg5LjM1NTI0MTk0NjE1NDg5NDMxMTI1MzIwMkUtNDY2IC0+IC01LjY1Njg4ODg5MzU1MjQxOTQ2MTU0ODk0MzExMjUzMjAyRS00NTggSW5leGFjdCBSb3VuZGVkCithZGR4MzQzNiBhZGQgLTE3MDg0NTUyMzk1LjY3MTQ4MzQ2ODAwODgxNTA1NDM5NjUgLTYzMTkyNTgwMjY3Mi42ODUwMzQzNzkxOTczMjgzNzA4MTJFKzUyNyAtPiAtNi4zMTkyNTgwMjY3MjY4NTAzNDM3OTE5NzMyODM3MDgxMkUrNTM4IEluZXhhY3QgUm91bmRlZAorY29teDM0MzYgY29tcGFyZSAtMTcwODQ1NTIzOTUuNjcxNDgzNDY4MDA4ODE1MDU0Mzk2NSAtNjMxOTI1ODAyNjcyLjY4NTAzNDM3OTE5NzMyODM3MDgxMkUrNTI3IC0+IDEKK2RpdngzNDM2IGRpdmlkZSAtMTcwODQ1NTIzOTUuNjcxNDgzNDY4MDA4ODE1MDU0Mzk2NSAtNjMxOTI1ODAyNjcyLjY4NTAzNDM3OTE5NzMyODM3MDgxMkUrNTI3IC0+IDIuNzAzNTY5MzYyNjM5MzQ2MjIwNTAzNDEzMjg1MTk1MzRFLTUyOSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDM2IGRpdmlkZWludCAtMTcwODQ1NTIzOTUuNjcxNDgzNDY4MDA4ODE1MDU0Mzk2NSAtNjMxOTI1ODAyNjcyLjY4NTAzNDM3OTE5NzMyODM3MDgxMkUrNTI3IC0+IDAKK211bHgzNDM2IG11bHRpcGx5IC0xNzA4NDU1MjM5NS42NzE0ODM0NjgwMDg4MTUwNTQzOTY1IC02MzE5MjU4MDI2NzIuNjg1MDM0Mzc5MTk3MzI4MzcwODEyRSs1MjcgLT4gMS4wNzk2MTY5NDg1OTM4MjQ2MjM0Njg2NjgxNzMwNjc2OUUrNTQ5IEluZXhhY3QgUm91bmRlZAorcG93eDM0MzYgcG93ZXIgLTE3MDg0NTUyMzk1LjY3MTQ4MzQ2ODAwODgxNTA1NDM5NjUgLTYgLT4gNC4wMjE0MTAxNDk3NzE3Nzk4NDEyMzAxMTg2ODM4NzYyMkUtNjIgSW5leGFjdCBSb3VuZGVkCityZW14MzQzNiByZW1haW5kZXIgLTE3MDg0NTUyMzk1LjY3MTQ4MzQ2ODAwODgxNTA1NDM5NjUgLTYzMTkyNTgwMjY3Mi42ODUwMzQzNzkxOTczMjgzNzA4MTJFKzUyNyAtPiAtMTcwODQ1NTIzOTUuNjcxNDgzNDY4MDA4ODE1MDU0Mzk2NQorc3VieDM0MzYgc3VidHJhY3QgLTE3MDg0NTUyMzk1LjY3MTQ4MzQ2ODAwODgxNTA1NDM5NjUgLTYzMTkyNTgwMjY3Mi42ODUwMzQzNzkxOTczMjgzNzA4MTJFKzUyNyAtPiA2LjMxOTI1ODAyNjcyNjg1MDM0Mzc5MTk3MzI4MzcwODEyRSs1MzggSW5leGFjdCBSb3VuZGVkCithZGR4MzQzNyBhZGQgMDM0OTU2ODMwLjM0OTgyMzMwNjgxNTkxMTg4NzQ2OTc2MCAtNjE2MDA4MTYuMDY3MjI3NDEyNjk2NjA0Mjk1Njc4MTY2NUUtNjY3IC0+IDM0OTU2ODMwLjM0OTgyMzMwNjgxNTkxMTg4NzQ2OTc2MDAgSW5leGFjdCBSb3VuZGVkCitjb214MzQzNyBjb21wYXJlIDAzNDk1NjgzMC4zNDk4MjMzMDY4MTU5MTE4ODc0Njk3NjAgLTYxNjAwODE2LjA2NzIyNzQxMjY5NjYwNDI5NTY3ODE2NjVFLTY2NyAtPiAxCitkaXZ4MzQzNyBkaXZpZGUgMDM0OTU2ODMwLjM0OTgyMzMwNjgxNTkxMTg4NzQ2OTc2MCAtNjE2MDA4MTYuMDY3MjI3NDEyNjk2NjA0Mjk1Njc4MTY2NUUtNjY3IC0+IC01LjY3NDczNDk0MzcxNzg3NzM3NjA3MTY5OTc5NjAyMzQzRSs2NjYgSW5leGFjdCBSb3VuZGVkCitkdml4MzQzNyBkaXZpZGVpbnQgMDM0OTU2ODMwLjM0OTgyMzMwNjgxNTkxMTg4NzQ2OTc2MCAtNjE2MDA4MTYuMDY3MjI3NDEyNjk2NjA0Mjk1Njc4MTY2NUUtNjY3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQzNyBtdWx0aXBseSAwMzQ5NTY4MzAuMzQ5ODIzMzA2ODE1OTExODg3NDY5NzYwIC02MTYwMDgxNi4wNjcyMjc0MTI2OTY2MDQyOTU2NzgxNjY1RS02NjcgLT4gLTIuMTUzMzY5Mjc2NjcyNzM4NDE2MTcxMjg3ODExNzMyOTNFLTY1MiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDM3IHBvd2VyIDAzNDk1NjgzMC4zNDk4MjMzMDY4MTU5MTE4ODc0Njk3NjAgLTYgLT4gNS40ODAzNDI3MjU2NjA5ODQ5MzQ2MjE2OTQzMTc2MjU5N0UtNDYgSW5leGFjdCBSb3VuZGVkCityZW14MzQzNyByZW1haW5kZXIgMDM0OTU2ODMwLjM0OTgyMzMwNjgxNTkxMTg4NzQ2OTc2MCAtNjE2MDA4MTYuMDY3MjI3NDEyNjk2NjA0Mjk1Njc4MTY2NUUtNjY3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQzNyBzdWJ0cmFjdCAwMzQ5NTY4MzAuMzQ5ODIzMzA2ODE1OTExODg3NDY5NzYwIC02MTYwMDgxNi4wNjcyMjc0MTI2OTY2MDQyOTU2NzgxNjY1RS02NjcgLT4gMzQ5NTY4MzAuMzQ5ODIzMzA2ODE1OTExODg3NDY5NzYwMCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDM4IGFkZCAtNzYzLjQ0MDA2Nzc4MTI1NjYzMjY5NTc5MTk4MTg5MzYwOCAxOS45MjYzODExMzUwNjExMDA3ODMzMjIwNjIwNzQ1NDEzIC0+IC03NDMuNTEzNjg2NjQ2MTk1NTMxOTEyNDY5OTE5ODE5MDY3IEluZXhhY3QgUm91bmRlZAorY29teDM0MzggY29tcGFyZSAtNzYzLjQ0MDA2Nzc4MTI1NjYzMjY5NTc5MTk4MTg5MzYwOCAxOS45MjYzODExMzUwNjExMDA3ODMzMjIwNjIwNzQ1NDEzIC0+IC0xCitkaXZ4MzQzOCBkaXZpZGUgLTc2My40NDAwNjc3ODEyNTY2MzI2OTU3OTE5ODE4OTM2MDggMTkuOTI2MzgxMTM1MDYxMTAwNzgzMzIyMDYyMDc0NTQxMyAtPiAtMzguMzEzMDMxNDgzNTcyMjc2NjgwNzcwMzU4NTQzNTY4OCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDM4IGRpdmlkZWludCAtNzYzLjQ0MDA2Nzc4MTI1NjYzMjY5NTc5MTk4MTg5MzYwOCAxOS45MjYzODExMzUwNjExMDA3ODMzMjIwNjIwNzQ1NDEzIC0+IC0zOAorbXVseDM0MzggbXVsdGlwbHkgLTc2My40NDAwNjc3ODEyNTY2MzI2OTU3OTE5ODE4OTM2MDggMTkuOTI2MzgxMTM1MDYxMTAwNzgzMzIyMDYyMDc0NTQxMyAtPiAtMTUyMTIuNTk3NzY0Mzg2MjAwMjU4NTAzOTM2NDg2ODg4MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDM4IHBvd2VyIC03NjMuNDQwMDY3NzgxMjU2NjMyNjk1NzkxOTgxODkzNjA4IDIwIC0+IDQuNTIzNzU0MDc3MjczMzY3Njk1NTI0ODE2NjEyNTA5MjRFKzU3IEluZXhhY3QgUm91bmRlZAorcmVteDM0MzggcmVtYWluZGVyIC03NjMuNDQwMDY3NzgxMjU2NjMyNjk1NzkxOTgxODkzNjA4IDE5LjkyNjM4MTEzNTA2MTEwMDc4MzMyMjA2MjA3NDU0MTMgLT4gLTYuMjM3NTg0NjQ4OTM0ODAyOTI5NTUzNjIzMDYxMDM4Ngorc3VieDM0Mzggc3VidHJhY3QgLTc2My40NDAwNjc3ODEyNTY2MzI2OTU3OTE5ODE4OTM2MDggMTkuOTI2MzgxMTM1MDYxMTAwNzgzMzIyMDYyMDc0NTQxMyAtPiAtNzgzLjM2NjQ0ODkxNjMxNzczMzQ3OTExNDA0Mzk2ODE0OSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDM5IGFkZCAtNTEwNDcyMDI3ODY4NDQwNjY3Njg0NTc1MTQ3NTU2NjU0RSs3ODkgODM0ODcyMzc4NTUwODAxODg5OTgzOTI3MTQ4NTg3OTA5IC0+IC01LjEwNDcyMDI3ODY4NDQwNjY3Njg0NTc1MTQ3NTU2NjU0RSs4MjEgSW5leGFjdCBSb3VuZGVkCitjb214MzQzOSBjb21wYXJlIC01MTA0NzIwMjc4Njg0NDA2Njc2ODQ1NzUxNDc1NTY2NTRFKzc4OSA4MzQ4NzIzNzg1NTA4MDE4ODk5ODM5MjcxNDg1ODc5MDkgLT4gLTEKK2RpdngzNDM5IGRpdmlkZSAtNTEwNDcyMDI3ODY4NDQwNjY3Njg0NTc1MTQ3NTU2NjU0RSs3ODkgODM0ODcyMzc4NTUwODAxODg5OTgzOTI3MTQ4NTg3OTA5IC0+IC02LjExNDM3MTk4MDQ3NjAzNzU0MTA3NTI2ODc0MDcxNzM3RSs3ODggSW5leGFjdCBSb3VuZGVkCitkdml4MzQzOSBkaXZpZGVpbnQgLTUxMDQ3MjAyNzg2ODQ0MDY2NzY4NDU3NTE0NzU1NjY1NEUrNzg5IDgzNDg3MjM3ODU1MDgwMTg4OTk4MzkyNzE0ODU4NzkwOSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0MzkgbXVsdGlwbHkgLTUxMDQ3MjAyNzg2ODQ0MDY2NzY4NDU3NTE0NzU1NjY1NEUrNzg5IDgzNDg3MjM3ODU1MDgwMTg4OTk4MzkyNzE0ODU4NzkwOSAtPiAtNC4yNjE3ODk5NjA5MDE3NjI4OTExNTU5NDA1NzQxOTg5MkUrODU0IEluZXhhY3QgUm91bmRlZAorcG93eDM0MzkgcG93ZXIgLTUxMDQ3MjAyNzg2ODQ0MDY2NzY4NDU3NTE0NzU1NjY1NEUrNzg5IDggLT4gNC42MTA3OTI2NjYxOTUyMjE0NzI2MjYwMDc1NTI3NDE4MkUrNjU3MyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDM5IHJlbWFpbmRlciAtNTEwNDcyMDI3ODY4NDQwNjY3Njg0NTc1MTQ3NTU2NjU0RSs3ODkgODM0ODcyMzc4NTUwODAxODg5OTgzOTI3MTQ4NTg3OTA5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQzOSBzdWJ0cmFjdCAtNTEwNDcyMDI3ODY4NDQwNjY3Njg0NTc1MTQ3NTU2NjU0RSs3ODkgODM0ODcyMzc4NTUwODAxODg5OTgzOTI3MTQ4NTg3OTA5IC0+IC01LjEwNDcyMDI3ODY4NDQwNjY3Njg0NTc1MTQ3NTU2NjU0RSs4MjEgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ0MCBhZGQgMDcwMzA0NzYxLjU2MDUxNzA4NjY3Njk5MzUwMzAzNDgyOEUtMDk0IC0xNzc3My43NDQ2OTU5NzcxMDc3MTA0MDU3ODQ1MjczOTkyRS03NjEgLT4gNy4wMzA0NzYxNTYwNTE3MDg2Njc2OTkzNTAzMDM0ODI4MEUtODcgSW5leGFjdCBSb3VuZGVkCitjb214MzQ0MCBjb21wYXJlIDA3MDMwNDc2MS41NjA1MTcwODY2NzY5OTM1MDMwMzQ4MjhFLTA5NCAtMTc3NzMuNzQ0Njk1OTc3MTA3NzEwNDA1Nzg0NTI3Mzk5MkUtNzYxIC0+IDEKK2RpdngzNDQwIGRpdmlkZSAwNzAzMDQ3NjEuNTYwNTE3MDg2Njc2OTkzNTAzMDM0ODI4RS0wOTQgLTE3NzczLjc0NDY5NTk3NzEwNzcxMDQwNTc4NDUyNzM5OTJFLTc2MSAtPiAtMy45NTU1NDAxOTQ5OTUwMjUzNzc0Mzg4MzQ4MzQwMjYwOEUrNjcwIEluZXhhY3QgUm91bmRlZAorZHZpeDM0NDAgZGl2aWRlaW50IDA3MDMwNDc2MS41NjA1MTcwODY2NzY5OTM1MDMwMzQ4MjhFLTA5NCAtMTc3NzMuNzQ0Njk1OTc3MTA3NzEwNDA1Nzg0NTI3Mzk5MkUtNzYxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQ0MCBtdWx0aXBseSAwNzAzMDQ3NjEuNTYwNTE3MDg2Njc2OTkzNTAzMDM0ODI4RS0wOTQgLTE3NzczLjc0NDY5NTk3NzEwNzcxMDQwNTc4NDUyNzM5OTJFLTc2MSAtPiAtMS4yNDk1Nzg4ODI4ODgxNzU4MTUzODEwODk5MTQ1MzczMkUtODQzIEluZXhhY3QgUm91bmRlZAorcG93eDM0NDAgcG93ZXIgMDcwMzA0NzYxLjU2MDUxNzA4NjY3Njk5MzUwMzAzNDgyOEUtMDk0IC0yIC0+IDIuMDIzMTYxMzU0Mjc2MzE0ODg0Nzk5MDI5MTk5NTk2MjdFKzE3MiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDQwIHJlbWFpbmRlciAwNzAzMDQ3NjEuNTYwNTE3MDg2Njc2OTkzNTAzMDM0ODI4RS0wOTQgLTE3NzczLjc0NDY5NTk3NzEwNzcxMDQwNTc4NDUyNzM5OTJFLTc2MSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0NDAgc3VidHJhY3QgMDcwMzA0NzYxLjU2MDUxNzA4NjY3Njk5MzUwMzAzNDgyOEUtMDk0IC0xNzc3My43NDQ2OTU5NzcxMDc3MTA0MDU3ODQ1MjczOTkyRS03NjEgLT4gNy4wMzA0NzYxNTYwNTE3MDg2Njc2OTkzNTAzMDM0ODI4MEUtODcgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ0MSBhZGQgLTA5NzA3MjU2OTc2NjIuMjc2MDU0NTQzMzYyMzExOTU0NjMgLTQ1NDEuNDE4OTc1NDY2OTcxODcxNTc5MTM4ODY0MzM0NzQgLT4gLTk3MDcyNTcwMjIwMy42OTUwMzAwMTAzMzQxODM1MzM3NjkgSW5leGFjdCBSb3VuZGVkCitjb214MzQ0MSBjb21wYXJlIC0wOTcwNzI1Njk3NjYyLjI3NjA1NDU0MzM2MjMxMTk1NDYzIC00NTQxLjQxODk3NTQ2Njk3MTg3MTU3OTEzODg2NDMzNDc0IC0+IC0xCitkaXZ4MzQ0MSBkaXZpZGUgLTA5NzA3MjU2OTc2NjIuMjc2MDU0NTQzMzYyMzExOTU0NjMgLTQ1NDEuNDE4OTc1NDY2OTcxODcxNTc5MTM4ODY0MzM0NzQgLT4gMjEzNzQ5NDI1LjY1NDQ0NzgxMTY5ODg4NDAwNzU1MzYxNCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDQxIGRpdmlkZWludCAtMDk3MDcyNTY5NzY2Mi4yNzYwNTQ1NDMzNjIzMTE5NTQ2MyAtNDU0MS40MTg5NzU0NjY5NzE4NzE1NzkxMzg4NjQzMzQ3NCAtPiAyMTM3NDk0MjUKK211bHgzNDQxIG11bHRpcGx5IC0wOTcwNzI1Njk3NjYyLjI3NjA1NDU0MzM2MjMxMTk1NDYzIC00NTQxLjQxODk3NTQ2Njk3MTg3MTU3OTEzODg2NDMzNDc0IC0+IDQ0MDg0NzIxMDMzMzY4NzUuMjExNjE4Njc4OTE3MjQzOTIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ0MSBwb3dlciAtMDk3MDcyNTY5NzY2Mi4yNzYwNTQ1NDMzNjIzMTE5NTQ2MyAtNDU0MSAtPiAtMEUtMTAwMzEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDM0NDEgcmVtYWluZGVyIC0wOTcwNzI1Njk3NjYyLjI3NjA1NDU0MzM2MjMxMTk1NDYzIC00NTQxLjQxODk3NTQ2Njk3MTg3MTU3OTEzODg2NDMzNDc0IC0+IC0yOTcyLjEyMTcxMDUwMjE0NzUzNzcwNzkyNjMxNzQ3NTUwCitzdWJ4MzQ0MSBzdWJ0cmFjdCAtMDk3MDcyNTY5NzY2Mi4yNzYwNTQ1NDMzNjIzMTE5NTQ2MyAtNDU0MS40MTg5NzU0NjY5NzE4NzE1NzkxMzg4NjQzMzQ3NCAtPiAtOTcwNzI1NjkzMTIwLjg1NzA3OTA3NjM5MDQ0MDM3NTQ5MSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDQyIGFkZCAtODA4MTc4MjM4NjMxODQ0MjY4MzE2MTExMjU5NTU4Njc1IC01OTg0MDAuMjY1MTA4NjQ0NTE0MjExMjQ0OTgwNDI2NTIwIC0+IC04MDgxNzgyMzg2MzE4NDQyNjgzMTYxMTEyNjAxNTcwNzUgSW5leGFjdCBSb3VuZGVkCitjb214MzQ0MiBjb21wYXJlIC04MDgxNzgyMzg2MzE4NDQyNjgzMTYxMTEyNTk1NTg2NzUgLTU5ODQwMC4yNjUxMDg2NDQ1MTQyMTEyNDQ5ODA0MjY1MjAgLT4gLTEKK2RpdngzNDQyIGRpdmlkZSAtODA4MTc4MjM4NjMxODQ0MjY4MzE2MTExMjU5NTU4Njc1IC01OTg0MDAuMjY1MTA4NjQ0NTE0MjExMjQ0OTgwNDI2NTIwIC0+IDEzNTA1NjQ2NDAwMTU4NDc2MzUxNzg5NDU4ODQuOTc4MzYgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ0MiBkaXZpZGVpbnQgLTgwODE3ODIzODYzMTg0NDI2ODMxNjExMTI1OTU1ODY3NSAtNTk4NDAwLjI2NTEwODY0NDUxNDIxMTI0NDk4MDQyNjUyMCAtPiAxMzUwNTY0NjQwMDE1ODQ3NjM1MTc4OTQ1ODg0CittdWx4MzQ0MiBtdWx0aXBseSAtODA4MTc4MjM4NjMxODQ0MjY4MzE2MTExMjU5NTU4Njc1IC01OTg0MDAuMjY1MTA4NjQ0NTE0MjExMjQ0OTgwNDI2NTIwIC0+IDQuODM2MTQwNzIyNTIzMzI5Nzk3MzEzNDg0MjMxNDUyMDhFKzM4IEluZXhhY3QgUm91bmRlZAorcG93eDM0NDIgcG93ZXIgLTgwODE3ODIzODYzMTg0NDI2ODMxNjExMTI1OTU1ODY3NSAtNTk4NDAwIC0+IDBFLTEwMDMxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzNDQyIHJlbWFpbmRlciAtODA4MTc4MjM4NjMxODQ0MjY4MzE2MTExMjU5NTU4Njc1IC01OTg0MDAuMjY1MTA4NjQ0NTE0MjExMjQ0OTgwNDI2NTIwIC0+IC01ODU0NTIuMDk3NzY0NTM2NTcwOTU2ODEzNjgxNTU2MzIwCitzdWJ4MzQ0MiBzdWJ0cmFjdCAtODA4MTc4MjM4NjMxODQ0MjY4MzE2MTExMjU5NTU4Njc1IC01OTg0MDAuMjY1MTA4NjQ0NTE0MjExMjQ0OTgwNDI2NTIwIC0+IC04MDgxNzgyMzg2MzE4NDQyNjgzMTYxMTEyNTg5NjAyNzUgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ0MyBhZGQgLTkuOTA4MjY1OTUwNjkwNTM1NjQzMTEzNzE3NjYzMTUyMDAgLTAzMS42MjU5MTY3ODEzMDc4NDc4NjQ4NzIzMjk4MDY2NDYgLT4gLTQxLjUzNDE4MjczMTk5ODM4MzUwNzk4NjA0NzQ2OTc5ODAgUm91bmRlZAorY29teDM0NDMgY29tcGFyZSAtOS45MDgyNjU5NTA2OTA1MzU2NDMxMTM3MTc2NjMxNTIwMCAtMDMxLjYyNTkxNjc4MTMwNzg0Nzg2NDg3MjMyOTgwNjY0NiAtPiAxCitkaXZ4MzQ0MyBkaXZpZGUgLTkuOTA4MjY1OTUwNjkwNTM1NjQzMTEzNzE3NjYzMTUyMDAgLTAzMS42MjU5MTY3ODEzMDc4NDc4NjQ4NzIzMjk4MDY2NDYgLT4gMC4zMTMyOTU3NzAwMjMyMzMyMTg2MzkyMTMxNDA1OTk4NTYgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ0MyBkaXZpZGVpbnQgLTkuOTA4MjY1OTUwNjkwNTM1NjQzMTEzNzE3NjYzMTUyMDAgLTAzMS42MjU5MTY3ODEzMDc4NDc4NjQ4NzIzMjk4MDY2NDYgLT4gMAorbXVseDM0NDMgbXVsdGlwbHkgLTkuOTA4MjY1OTUwNjkwNTM1NjQzMTEzNzE3NjYzMTUyMDAgLTAzMS42MjU5MTY3ODEzMDc4NDc4NjQ4NzIzMjk4MDY2NDYgLT4gMzEzLjM1Nzk5NDQwMzYwNDk2ODI1MDkzNjAzNjk3ODA4NiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDQzIHBvd2VyIC05LjkwODI2NTk1MDY5MDUzNTY0MzExMzcxNzY2MzE1MjAwIC0zMiAtPiAxLjM0Mjk5Njk4MjU5MDM4MDAzMDExNDM5NTY4MDA0NjI1RS0zMiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDQzIHJlbWFpbmRlciAtOS45MDgyNjU5NTA2OTA1MzU2NDMxMTM3MTc2NjMxNTIwMCAtMDMxLjYyNTkxNjc4MTMwNzg0Nzg2NDg3MjMyOTgwNjY0NiAtPiAtOS45MDgyNjU5NTA2OTA1MzU2NDMxMTM3MTc2NjMxNTIwMAorc3VieDM0NDMgc3VidHJhY3QgLTkuOTA4MjY1OTUwNjkwNTM1NjQzMTEzNzE3NjYzMTUyMDAgLTAzMS42MjU5MTY3ODEzMDc4NDc4NjQ4NzIzMjk4MDY2NDYgLT4gMjEuNzE3NjUwODMwNjE3MzEyMjIxNzU4NjEyMTQzNDk0MCBSb3VuZGVkCithZGR4MzQ0NCBhZGQgLTE5NjkyNS40Njk4OTE4OTc3MTkxNjA2OTg0ODM3NTI5MDcgLTQxMjY4Ljk5NzU0NDQ1MzM3OTQwNjc3MjM5NTg3Mzk3NzggLT4gLTIzODE5NC40Njc0MzYzNTEwOTg1Njc0NzA4Nzk2MjY4ODUgSW5leGFjdCBSb3VuZGVkCitjb214MzQ0NCBjb21wYXJlIC0xOTY5MjUuNDY5ODkxODk3NzE5MTYwNjk4NDgzNzUyOTA3IC00MTI2OC45OTc1NDQ0NTMzNzk0MDY3NzIzOTU4NzM5Nzc4IC0+IC0xCitkaXZ4MzQ0NCBkaXZpZGUgLTE5NjkyNS40Njk4OTE4OTc3MTkxNjA2OTg0ODM3NTI5MDcgLTQxMjY4Ljk5NzU0NDQ1MzM3OTQwNjc3MjM5NTg3Mzk3NzggLT4gNC43NzE3NTMxNzA4ODI3NDcxNTIyNjU1MzUxNjgyMDU4OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDQ0IGRpdmlkZWludCAtMTk2OTI1LjQ2OTg5MTg5NzcxOTE2MDY5ODQ4Mzc1MjkwNyAtNDEyNjguOTk3NTQ0NDUzMzc5NDA2NzcyMzk1ODczOTc3OCAtPiA0CittdWx4MzQ0NCBtdWx0aXBseSAtMTk2OTI1LjQ2OTg5MTg5NzcxOTE2MDY5ODQ4Mzc1MjkwNyAtNDEyNjguOTk3NTQ0NDUzMzc5NDA2NzcyMzk1ODczOTc3OCAtPiA4MTI2OTE2NzMzLjQwOTA1NDg3MDI2MDAzMTM1OTg3NDcyIEluZXhhY3QgUm91bmRlZAorcG93eDM0NDQgcG93ZXIgLTE5NjkyNS40Njk4OTE4OTc3MTkxNjA2OTg0ODM3NTI5MDcgLTQxMjY5IC0+IC0wRS0xMDAzMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzQ0NCByZW1haW5kZXIgLTE5NjkyNS40Njk4OTE4OTc3MTkxNjA2OTg0ODM3NTI5MDcgLTQxMjY4Ljk5NzU0NDQ1MzM3OTQwNjc3MjM5NTg3Mzk3NzggLT4gLTMxODQ5LjQ3OTcxNDA4NDIwMTUzMzYwODkwMDI1Njk5NTgKK3N1YngzNDQ0IHN1YnRyYWN0IC0xOTY5MjUuNDY5ODkxODk3NzE5MTYwNjk4NDgzNzUyOTA3IC00MTI2OC45OTc1NDQ0NTMzNzk0MDY3NzIzOTU4NzM5Nzc4IC0+IC0xNTU2NTYuNDcyMzQ3NDQ0MzM5NzUzOTI2MDg3ODc4OTI5IEluZXhhY3QgUm91bmRlZAorYWRkeDM0NDUgYWRkIDQyMTA3MTEzNTIxMjE1MjIyNTE2MjA4NjAwNTgyNDMxMCAxMzM1MzIwMzMwLjA4OTY0MzU0ODQ1Nzk2NTEwMTQ1MjQ2RS02MDQgLT4gNDIxMDcxMTM1MjEyMTUyMjI1MTYyMDg2MDA1ODI0MzEwIEluZXhhY3QgUm91bmRlZAorY29teDM0NDUgY29tcGFyZSA0MjEwNzExMzUyMTIxNTIyMjUxNjIwODYwMDU4MjQzMTAgMTMzNTMyMDMzMC4wODk2NDM1NDg0NTc5NjUxMDE0NTI0NkUtNjA0IC0+IDEKK2RpdngzNDQ1IGRpdmlkZSA0MjEwNzExMzUyMTIxNTIyMjUxNjIwODYwMDU4MjQzMTAgMTMzNTMyMDMzMC4wODk2NDM1NDg0NTc5NjUxMDE0NTI0NkUtNjA0IC0+IDMuMTUzMzM0MjY1MzczNDk3NDQyODE4NjAwMDU0OTczMDRFKzYyNyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDQ1IGRpdmlkZWludCA0MjEwNzExMzUyMTIxNTIyMjUxNjIwODYwMDU4MjQzMTAgMTMzNTMyMDMzMC4wODk2NDM1NDg0NTc5NjUxMDE0NTI0NkUtNjA0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQ0NSBtdWx0aXBseSA0MjEwNzExMzUyMTIxNTIyMjUxNjIwODYwMDU4MjQzMTAgMTMzNTMyMDMzMC4wODk2NDM1NDg0NTc5NjUxMDE0NTI0NkUtNjA0IC0+IDUuNjIyNjQ4NDcyNjI3MTIwNDAwMjczMTE5MzIxMjE0NjBFLTU2MyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDQ1IHBvd2VyIDQyMTA3MTEzNTIxMjE1MjIyNTE2MjA4NjAwNTgyNDMxMCAxIC0+IDQyMTA3MTEzNTIxMjE1MjIyNTE2MjA4NjAwNTgyNDMxMAorcmVteDM0NDUgcmVtYWluZGVyIDQyMTA3MTEzNTIxMjE1MjIyNTE2MjA4NjAwNTgyNDMxMCAxMzM1MzIwMzMwLjA4OTY0MzU0ODQ1Nzk2NTEwMTQ1MjQ2RS02MDQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDQ1IHN1YnRyYWN0IDQyMTA3MTEzNTIxMjE1MjIyNTE2MjA4NjAwNTgyNDMxMCAxMzM1MzIwMzMwLjA4OTY0MzU0ODQ1Nzk2NTEwMTQ1MjQ2RS02MDQgLT4gNDIxMDcxMTM1MjEyMTUyMjI1MTYyMDg2MDA1ODI0MzEwIEluZXhhY3QgUm91bmRlZAorYWRkeDM0NDYgYWRkIDEyNDk0NDEuNDY0MjE1MTQyODIzMDExODI3NzIyNDcyMjcgLTAyODk4NDguNzEyMDg5MTIyODE5NzYzNzQ3MDUxODA4MzZFLTY3NiAtPiAxMjQ5NDQxLjQ2NDIxNTE0MjgyMzAxMTgyNzcyMjQ3MjI3IEluZXhhY3QgUm91bmRlZAorY29teDM0NDYgY29tcGFyZSAxMjQ5NDQxLjQ2NDIxNTE0MjgyMzAxMTgyNzcyMjQ3MjI3IC0wMjg5ODQ4LjcxMjA4OTEyMjgxOTc2Mzc0NzA1MTgwODM2RS02NzYgLT4gMQorZGl2eDM0NDYgZGl2aWRlIDEyNDk0NDEuNDY0MjE1MTQyODIzMDExODI3NzIyNDcyMjcgLTAyODk4NDguNzEyMDg5MTIyODE5NzYzNzQ3MDUxODA4MzZFLTY3NiAtPiAtNC4zMTA2Njc2NDE3ODMyODk5MjQ0MDYzNTM4NzI1NTgxNkUrNjc2IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NDYgZGl2aWRlaW50IDEyNDk0NDEuNDY0MjE1MTQyODIzMDExODI3NzIyNDcyMjcgLTAyODk4NDguNzEyMDg5MTIyODE5NzYzNzQ3MDUxODA4MzZFLTY3NiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0NDYgbXVsdGlwbHkgMTI0OTQ0MS40NjQyMTUxNDI4MjMwMTE4Mjc3MjI0NzIyNyAtMDI4OTg0OC43MTIwODkxMjI4MTk3NjM3NDcwNTE4MDgzNkUtNjc2IC0+IC0zLjYyMTQ4OTk5MjMzNTA2OTg0NTY2NjIwNjExNzAwMzQ5RS02NjUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ0NiBwb3dlciAxMjQ5NDQxLjQ2NDIxNTE0MjgyMzAxMTgyNzcyMjQ3MjI3IC0zIC0+IDUuMTI2ODY5NDI1NzIxOTEyODIzNDg0MTUwMjQ5MzIzMjJFLTE5IEluZXhhY3QgUm91bmRlZAorcmVteDM0NDYgcmVtYWluZGVyIDEyNDk0NDEuNDY0MjE1MTQyODIzMDExODI3NzIyNDcyMjcgLTAyODk4NDguNzEyMDg5MTIyODE5NzYzNzQ3MDUxODA4MzZFLTY3NiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0NDYgc3VidHJhY3QgMTI0OTQ0MS40NjQyMTUxNDI4MjMwMTE4Mjc3MjI0NzIyNyAtMDI4OTg0OC43MTIwODkxMjI4MTk3NjM3NDcwNTE4MDgzNkUtNjc2IC0+IDEyNDk0NDEuNDY0MjE1MTQyODIzMDExODI3NzIyNDcyMjcgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ0NyBhZGQgNzQ4MTUwMDAuNDcxNjg3NTU1ODM1ODkzNzI3OTA1MjkwMyAtNjkwNDI1NDAxNzA4MTY3NjIyMTk0MjQxOTE1MTk1MDAxRSs4OTEgLT4gLTYuOTA0MjU0MDE3MDgxNjc2MjIxOTQyNDE5MTUxOTUwMDFFKzkyMyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDQ3IGNvbXBhcmUgNzQ4MTUwMDAuNDcxNjg3NTU1ODM1ODkzNzI3OTA1MjkwMyAtNjkwNDI1NDAxNzA4MTY3NjIyMTk0MjQxOTE1MTk1MDAxRSs4OTEgLT4gMQorZGl2eDM0NDcgZGl2aWRlIDc0ODE1MDAwLjQ3MTY4NzU1NTgzNTg5MzcyNzkwNTI5MDMgLTY5MDQyNTQwMTcwODE2NzYyMjE5NDI0MTkxNTE5NTAwMUUrODkxIC0+IC0xLjA4MzYwNzI5OTAxNTc4NDU1MTA5OTY4Mzg4MzA5MDc5RS05MTYgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ0NyBkaXZpZGVpbnQgNzQ4MTUwMDAuNDcxNjg3NTU1ODM1ODkzNzI3OTA1MjkwMyAtNjkwNDI1NDAxNzA4MTY3NjIyMTk0MjQxOTE1MTk1MDAxRSs4OTEgLT4gLTAKK211bHgzNDQ3IG11bHRpcGx5IDc0ODE1MDAwLjQ3MTY4NzU1NTgzNTg5MzcyNzkwNTI5MDMgLTY5MDQyNTQwMTcwODE2NzYyMjE5NDI0MTkxNTE5NTAwMUUrODkxIC0+IC01LjE2NTQxNzY3NTQ0NjE2MzA4NzMyMDI4ODEwMDI2Mjc1RSs5MzEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ0NyBwb3dlciA3NDgxNTAwMC40NzE2ODc1NTU4MzU4OTM3Mjc5MDUyOTAzIC03IC0+IDcuNjIyMTgwMzIyNTI2ODM4MTU1Mzc5MDY5NzI0Mzk5ODVFLTU2IEluZXhhY3QgUm91bmRlZAorcmVteDM0NDcgcmVtYWluZGVyIDc0ODE1MDAwLjQ3MTY4NzU1NTgzNTg5MzcyNzkwNTI5MDMgLTY5MDQyNTQwMTcwODE2NzYyMjE5NDI0MTkxNTE5NTAwMUUrODkxIC0+IDc0ODE1MDAwLjQ3MTY4NzU1NTgzNTg5MzcyNzkwNTI5MDMKK3N1YngzNDQ3IHN1YnRyYWN0IDc0ODE1MDAwLjQ3MTY4NzU1NTgzNTg5MzcyNzkwNTI5MDMgLTY5MDQyNTQwMTcwODE2NzYyMjE5NDI0MTkxNTE5NTAwMUUrODkxIC0+IDYuOTA0MjU0MDE3MDgxNjc2MjIxOTQyNDE5MTUxOTUwMDFFKzkyMyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDQ4IGFkZCAtMTY4Mzk5My41MTIxMDI0MTU1NTY2ODc5MDU1Njc1OTAyMSAtNzIzOTQzODQ5MjczNDQuODQwMjU4NTIyODI2NzQ5MzM3NCAtPiAtNzIzOTQzODY2MTEzMzguMzUyMzYwOTM4MzgzNDM3MjQzMCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDQ4IGNvbXBhcmUgLTE2ODM5OTMuNTEyMTAyNDE1NTU2Njg3OTA1NTY3NTkwMjEgLTcyMzk0Mzg0OTI3MzQ0Ljg0MDI1ODUyMjgyNjc0OTMzNzQgLT4gMQorZGl2eDM0NDggZGl2aWRlIC0xNjgzOTkzLjUxMjEwMjQxNTU1NjY4NzkwNTU2NzU5MDIxIC03MjM5NDM4NDkyNzM0NC44NDAyNTg1MjI4MjY3NDkzMzc0IC0+IDIuMzI2MTM4Mjk2MjEyNDQxMTMyODQzMDEwMDQxNTg3OTRFLTggSW5leGFjdCBSb3VuZGVkCitkdml4MzQ0OCBkaXZpZGVpbnQgLTE2ODM5OTMuNTEyMTAyNDE1NTU2Njg3OTA1NTY3NTkwMjEgLTcyMzk0Mzg0OTI3MzQ0Ljg0MDI1ODUyMjgyNjc0OTMzNzQgLT4gMAorbXVseDM0NDggbXVsdGlwbHkgLTE2ODM5OTMuNTEyMTAyNDE1NTU2Njg3OTA1NTY3NTkwMjEgLTcyMzk0Mzg0OTI3MzQ0Ljg0MDI1ODUyMjgyNjc0OTMzNzQgLT4gMTIxOTExNjc0NTMwMjkzNjEzNjE1LjQ0MTM4NDgyMjM4MSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDQ4IHBvd2VyIC0xNjgzOTkzLjUxMjEwMjQxNTU1NjY4NzkwNTU2NzU5MDIxIC03IC0+IC0yLjYwMzg1NjgzNTA5OTU2ODg5MDAwNjc2MTEzODYwMjkyRS00NCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDQ4IHJlbWFpbmRlciAtMTY4Mzk5My41MTIxMDI0MTU1NTY2ODc5MDU1Njc1OTAyMSAtNzIzOTQzODQ5MjczNDQuODQwMjU4NTIyODI2NzQ5MzM3NCAtPiAtMTY4Mzk5My41MTIxMDI0MTU1NTY2ODc5MDU1Njc1OTAyMQorc3VieDM0NDggc3VidHJhY3QgLTE2ODM5OTMuNTEyMTAyNDE1NTU2Njg3OTA1NTY3NTkwMjEgLTcyMzk0Mzg0OTI3MzQ0Ljg0MDI1ODUyMjgyNjc0OTMzNzQgLT4gNzIzOTQzODMyNDMzNTEuMzI4MTU2MTA3MjcwMDYxNDMxOCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDQ5IGFkZCAtNzYzLjE0ODUzMDk3NDc0MTc2NjE3MTc1Njk3MDQ0ODE1OCA1MTczNzAuODA4OTU2OTU3NjAxNDczNjQyMjcyNjY0NjQ3IC0+IDUxNjYwNy42NjA0MjU5ODI4NTk3MDc0NzA1MTU2OTQxOTkgSW5leGFjdCBSb3VuZGVkCitjb214MzQ0OSBjb21wYXJlIC03NjMuMTQ4NTMwOTc0NzQxNzY2MTcxNzU2OTcwNDQ4MTU4IDUxNzM3MC44MDg5NTY5NTc2MDE0NzM2NDIyNzI2NjQ2NDcgLT4gLTEKK2RpdngzNDQ5IGRpdmlkZSAtNzYzLjE0ODUzMDk3NDc0MTc2NjE3MTc1Njk3MDQ0ODE1OCA1MTczNzAuODA4OTU2OTU3NjAxNDczNjQyMjcyNjY0NjQ3IC0+IC0wLjAwMTQ3NTA1MTM5MDE0OTUxOTQ2MzgxMTU1NTI1MTczODY3IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NDkgZGl2aWRlaW50IC03NjMuMTQ4NTMwOTc0NzQxNzY2MTcxNzU2OTcwNDQ4MTU4IDUxNzM3MC44MDg5NTY5NTc2MDE0NzM2NDIyNzI2NjQ2NDcgLT4gLTAKK211bHgzNDQ5IG11bHRpcGx5IC03NjMuMTQ4NTMwOTc0NzQxNzY2MTcxNzU2OTcwNDQ4MTU4IDUxNzM3MC44MDg5NTY5NTc2MDE0NzM2NDIyNzI2NjQ2NDcgLT4gLTM5NDgzMDc3Mi44MjQ3MTU5NjI5MjUzNTE0NDczMjIxODcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ0OSBwb3dlciAtNzYzLjE0ODUzMDk3NDc0MTc2NjE3MTc1Njk3MDQ0ODE1OCA1MTczNzEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDM0NDkgcmVtYWluZGVyIC03NjMuMTQ4NTMwOTc0NzQxNzY2MTcxNzU2OTcwNDQ4MTU4IDUxNzM3MC44MDg5NTY5NTc2MDE0NzM2NDIyNzI2NjQ2NDcgLT4gLTc2My4xNDg1MzA5NzQ3NDE3NjYxNzE3NTY5NzA0NDgxNTgKK3N1YngzNDQ5IHN1YnRyYWN0IC03NjMuMTQ4NTMwOTc0NzQxNzY2MTcxNzU2OTcwNDQ4MTU4IDUxNzM3MC44MDg5NTY5NTc2MDE0NzM2NDIyNzI2NjQ2NDcgLT4gLTUxODEzMy45NTc0ODc5MzIzNDMyMzk4MTQwMjk2MzUwOTUgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ1MCBhZGQgLTc3LjU4NDEzMzg4MTIzMTI1MjM0NjA1OTEyMjYxNzg3NTQgLTkyNzU0MDQyMi42NDEwMjUwNTA5Njg4MzAxNTQ1NzgxNTFFKzUyNCAtPiAtOS4yNzU0MDQyMjY0MTAyNTA1MDk2ODgzMDE1NDU3ODE1MUUrNTMyIEluZXhhY3QgUm91bmRlZAorY29teDM0NTAgY29tcGFyZSAtNzcuNTg0MTMzODgxMjMxMjUyMzQ2MDU5MTIyNjE3ODc1NCAtOTI3NTQwNDIyLjY0MTAyNTA1MDk2ODgzMDE1NDU3ODE1MUUrNTI0IC0+IDEKK2RpdngzNDUwIGRpdmlkZSAtNzcuNTg0MTMzODgxMjMxMjUyMzQ2MDU5MTIyNjE3ODc1NCAtOTI3NTQwNDIyLjY0MTAyNTA1MDk2ODgzMDE1NDU3ODE1MUUrNTI0IC0+IDguMzY0NTAxNjQxOTE0NzE3Njk5Nzg0MTU3NTgzNDIyMzdFLTUzMiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDUwIGRpdmlkZWludCAtNzcuNTg0MTMzODgxMjMxMjUyMzQ2MDU5MTIyNjE3ODc1NCAtOTI3NTQwNDIyLjY0MTAyNTA1MDk2ODgzMDE1NDU3ODE1MUUrNTI0IC0+IDAKK211bHgzNDUwIG11bHRpcGx5IC03Ny41ODQxMzM4ODEyMzEyNTIzNDYwNTkxMjI2MTc4NzU0IC05Mjc1NDA0MjIuNjQxMDI1MDUwOTY4ODMwMTU0NTc4MTUxRSs1MjQgLT4gNy4xOTYyNDIwMzMwNDM1MTA3MDU2MjQwOTc0NjQ3NTk0M0UrNTM0IEluZXhhY3QgUm91bmRlZAorcG93eDM0NTAgcG93ZXIgLTc3LjU4NDEzMzg4MTIzMTI1MjM0NjA1OTEyMjYxNzg3NTQgLTkgLT4gLTkuODE4NDY4NTY4NzM5Mzg1NDk0NjYzNDE2OTM5OTc4MjlFLTE4IEluZXhhY3QgUm91bmRlZAorcmVteDM0NTAgcmVtYWluZGVyIC03Ny41ODQxMzM4ODEyMzEyNTIzNDYwNTkxMjI2MTc4NzU0IC05Mjc1NDA0MjIuNjQxMDI1MDUwOTY4ODMwMTU0NTc4MTUxRSs1MjQgLT4gLTc3LjU4NDEzMzg4MTIzMTI1MjM0NjA1OTEyMjYxNzg3NTQKK3N1YngzNDUwIHN1YnRyYWN0IC03Ny41ODQxMzM4ODEyMzEyNTIzNDYwNTkxMjI2MTc4NzU0IC05Mjc1NDA0MjIuNjQxMDI1MDUwOTY4ODMwMTU0NTc4MTUxRSs1MjQgLT4gOS4yNzU0MDQyMjY0MTAyNTA1MDk2ODgzMDE1NDU3ODE1MUUrNTMyIEluZXhhY3QgUm91bmRlZAorYWRkeDM0NTEgYWRkIDUxNzYyOTUzMDkuODk5NDM3NDYyMzYxMDIyMDk4Mzc4MTMgLTEyOTczMy4xMDM2Mjg3OTc0NzcxNjc5MDg2OTg1NjU0NjUgLT4gNTE3NjE2NTU3Ni43OTU4MDg2NjQ4ODM4NTQxODk2Nzk1NiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDUxIGNvbXBhcmUgNTE3NjI5NTMwOS44OTk0Mzc0NjIzNjEwMjIwOTgzNzgxMyAtMTI5NzMzLjEwMzYyODc5NzQ3NzE2NzkwODY5ODU2NTQ2NSAtPiAxCitkaXZ4MzQ1MSBkaXZpZGUgNTE3NjI5NTMwOS44OTk0Mzc0NjIzNjEwMjIwOTgzNzgxMyAtMTI5NzMzLjEwMzYyODc5NzQ3NzE2NzkwODY5ODU2NTQ2NSAtPiAtMzk4OTkuNTcyMDA2NzczNjg1NTQ0NDA4OTQzMjUyNDA5NCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDUxIGRpdmlkZWludCA1MTc2Mjk1MzA5Ljg5OTQzNzQ2MjM2MTAyMjA5ODM3ODEzIC0xMjk3MzMuMTAzNjI4Nzk3NDc3MTY3OTA4Njk4NTY1NDY1IC0+IC0zOTg5OQorbXVseDM0NTEgbXVsdGlwbHkgNTE3NjI5NTMwOS44OTk0Mzc0NjIzNjEwMjIwOTgzNzgxMyAtMTI5NzMzLjEwMzYyODc5NzQ3NzE2NzkwODY5ODU2NTQ2NSAtPiAtNjcxNTM2ODU1ODUyNDQyLjA3MTg4NzM4NTUxMjAwMTc5NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDUxIHBvd2VyIDUxNzYyOTUzMDkuODk5NDM3NDYyMzYxMDIyMDk4Mzc4MTMgLTEyOTczMyAtPiAwRS0xMDAzMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityZW14MzQ1MSByZW1haW5kZXIgNTE3NjI5NTMwOS44OTk0Mzc0NjIzNjEwMjIwOTgzNzgxMyAtMTI5NzMzLjEwMzYyODc5NzQ3NzE2NzkwODY5ODU2NTQ2NSAtPiA3NDIwOC4yMTQwNDY5MjA4Mzg2MzI5MzQzMTQ2NDE5NjUKK3N1YngzNDUxIHN1YnRyYWN0IDUxNzYyOTUzMDkuODk5NDM3NDYyMzYxMDIyMDk4Mzc4MTMgLTEyOTczMy4xMDM2Mjg3OTc0NzcxNjc5MDg2OTg1NjU0NjUgLT4gNTE3NjQyNTA0My4wMDMwNjYyNTk4MzgxOTAwMDcwNzY3MCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDUyIGFkZCA0NDcxNjM0ODQxMTY2LjkwMTk3MjI5Mjg2NTMwMzA3MzI2RSsxNzIgMzE1MTExMDQzOTcuODY3MTcyNzAwMzIwMTg5MDgyNTg3OUUtOTU1IC0+IDQuNDcxNjM0ODQxMTY2OTAxOTcyMjkyODY1MzAzMDczMjZFKzE4NCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDUyIGNvbXBhcmUgNDQ3MTYzNDg0MTE2Ni45MDE5NzIyOTI4NjUzMDMwNzMyNkUrMTcyIDMxNTExMTA0Mzk3Ljg2NzE3MjcwMDMyMDE4OTA4MjU4NzlFLTk1NSAtPiAxCitkaXZ4MzQ1MiBkaXZpZGUgNDQ3MTYzNDg0MTE2Ni45MDE5NzIyOTI4NjUzMDMwNzMyNkUrMTcyIDMxNTExMTA0Mzk3Ljg2NzE3MjcwMDMyMDE4OTA4MjU4NzlFLTk1NSAtPiAxLjQxOTA2NjM2NjE2MzE0OTg3NzA1NTM2NzM3MDI1OTMyRSsxMTI5IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NTIgZGl2aWRlaW50IDQ0NzE2MzQ4NDExNjYuOTAxOTcyMjkyODY1MzAzMDczMjZFKzE3MiAzMTUxMTEwNDM5Ny44NjcxNzI3MDAzMjAxODkwODI1ODc5RS05NTUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDUyIG11bHRpcGx5IDQ0NzE2MzQ4NDExNjYuOTAxOTcyMjkyODY1MzAzMDczMjZFKzE3MiAzMTUxMTEwNDM5Ny44NjcxNzI3MDAzMjAxODkwODI1ODc5RS05NTUgLT4gMS40MDkwNjE1MjMwOTE1MDQ0MTAxMDA0NjIyMjIxNDgxMEUtNzYwIEluZXhhY3QgUm91bmRlZAorcG93eDM0NTIgcG93ZXIgNDQ3MTYzNDg0MTE2Ni45MDE5NzIyOTI4NjUzMDMwNzMyNkUrMTcyIDMgLT4gOC45NDEyNjU1NjM4OTY3MzQ5ODM4NjM5NzU2OTI0OTUxNkUrNTUzIEluZXhhY3QgUm91bmRlZAorcmVteDM0NTIgcmVtYWluZGVyIDQ0NzE2MzQ4NDExNjYuOTAxOTcyMjkyODY1MzAzMDczMjZFKzE3MiAzMTUxMTEwNDM5Ny44NjcxNzI3MDAzMjAxODkwODI1ODc5RS05NTUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDUyIHN1YnRyYWN0IDQ0NzE2MzQ4NDExNjYuOTAxOTcyMjkyODY1MzAzMDczMjZFKzE3MiAzMTUxMTEwNDM5Ny44NjcxNzI3MDAzMjAxODkwODI1ODc5RS05NTUgLT4gNC40NzE2MzQ4NDExNjY5MDE5NzIyOTI4NjUzMDMwNzMyNkUrMTg0IEluZXhhY3QgUm91bmRlZAorYWRkeDM0NTMgYWRkIC04MTg5MTMwLjE1OTQ1MjMxMDQ5NjcwMjg1NzI2Nzc0MzE3IDIuNTc5MTI0MDI4NzE0MDQzMjU4MzE2NzA5MjM4NjQ5MzZFLTM2NiAtPiAtODE4OTEzMC4xNTk0NTIzMTA0OTY3MDI4NTcyNjc3NDMxNyBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDUzIGNvbXBhcmUgLTgxODkxMzAuMTU5NDUyMzEwNDk2NzAyODU3MjY3NzQzMTcgMi41NzkxMjQwMjg3MTQwNDMyNTgzMTY3MDkyMzg2NDkzNkUtMzY2IC0+IC0xCitkaXZ4MzQ1MyBkaXZpZGUgLTgxODkxMzAuMTU5NDUyMzEwNDk2NzAyODU3MjY3NzQzMTcgMi41NzkxMjQwMjg3MTQwNDMyNTgzMTY3MDkyMzg2NDkzNkUtMzY2IC0+IC0zLjE3NTE1OTQ5OTIyNTU2Nzc4MzQzNTI2MDk5ODMwMDkzRSszNzIgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ1MyBkaXZpZGVpbnQgLTgxODkxMzAuMTU5NDUyMzEwNDk2NzAyODU3MjY3NzQzMTcgMi41NzkxMjQwMjg3MTQwNDMyNTgzMTY3MDkyMzg2NDkzNkUtMzY2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQ1MyBtdWx0aXBseSAtODE4OTEzMC4xNTk0NTIzMTA0OTY3MDI4NTcyNjc3NDMxNyAyLjU3OTEyNDAyODcxNDA0MzI1ODMxNjcwOTIzODY0OTM2RS0zNjYgLT4gLTIuMTEyMDc4MjM2ODUxMDMxODUwMzk5NzkxNDQxNjE4NDhFLTM1OSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDUzIHBvd2VyIC04MTg5MTMwLjE1OTQ1MjMxMDQ5NjcwMjg1NzI2Nzc0MzE3IDMgLT4gLTU0OTE3ODI0MTA1NDg3NTk4MjczMS4wMDA5Mzc4NzU4ODUgSW5leGFjdCBSb3VuZGVkCityZW14MzQ1MyByZW1haW5kZXIgLTgxODkxMzAuMTU5NDUyMzEwNDk2NzAyODU3MjY3NzQzMTcgMi41NzkxMjQwMjg3MTQwNDMyNTgzMTY3MDkyMzg2NDkzNkUtMzY2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ1MyBzdWJ0cmFjdCAtODE4OTEzMC4xNTk0NTIzMTA0OTY3MDI4NTcyNjc3NDMxNyAyLjU3OTEyNDAyODcxNDA0MzI1ODMxNjcwOTIzODY0OTM2RS0zNjYgLT4gLTgxODkxMzAuMTU5NDUyMzEwNDk2NzAyODU3MjY3NzQzMTcgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ1NCBhZGQgLTI1NDM0NjIzMjk4MTM1MzI5MzM5Mjg4ODc4NTY0MzI0NSAtNzY0LjQxNjkwMjQ4NjE1MjA5Mzc1ODI4NzkyOTY3ODQ0NSAtPiAtMjU0MzQ2MjMyOTgxMzUzMjkzMzkyODg4Nzg1NjQ0MDA5IEluZXhhY3QgUm91bmRlZAorY29teDM0NTQgY29tcGFyZSAtMjU0MzQ2MjMyOTgxMzUzMjkzMzkyODg4Nzg1NjQzMjQ1IC03NjQuNDE2OTAyNDg2MTUyMDkzNzU4Mjg3OTI5Njc4NDQ1IC0+IC0xCitkaXZ4MzQ1NCBkaXZpZGUgLTI1NDM0NjIzMjk4MTM1MzI5MzM5Mjg4ODc4NTY0MzI0NSAtNzY0LjQxNjkwMjQ4NjE1MjA5Mzc1ODI4NzkyOTY3ODQ0NSAtPiAzMzI3MzIzNTA4MzM4NTc4ODkyMDQ0MDYzNTY5MDAuNjY1IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NTQgZGl2aWRlaW50IC0yNTQzNDYyMzI5ODEzNTMyOTMzOTI4ODg3ODU2NDMyNDUgLTc2NC40MTY5MDI0ODYxNTIwOTM3NTgyODc5Mjk2Nzg0NDUgLT4gMzMyNzMyMzUwODMzODU3ODg5MjA0NDA2MzU2OTAwCittdWx4MzQ1NCBtdWx0aXBseSAtMjU0MzQ2MjMyOTgxMzUzMjkzMzkyODg4Nzg1NjQzMjQ1IC03NjQuNDE2OTAyNDg2MTUyMDkzNzU4Mjg3OTI5Njc4NDQ1IC0+IDEuOTQ0MjY1NTk1NzQ2MjcyNjIwMDYzMDczMjYzMzYyODlFKzM1IEluZXhhY3QgUm91bmRlZAorcG93eDM0NTQgcG93ZXIgLTI1NDM0NjIzMjk4MTM1MzI5MzM5Mjg4ODc4NTY0MzI0NSAtNzY0IC0+IDBFLTEwMDMxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzNDU0IHJlbWFpbmRlciAtMjU0MzQ2MjMyOTgxMzUzMjkzMzkyODg4Nzg1NjQzMjQ1IC03NjQuNDE2OTAyNDg2MTUyMDkzNzU4Mjg3OTI5Njc4NDQ1IC0+IC01MDguMjk5MzIzOTYyNTM4NjEwNTgwNjY5MDkyOTc5NTAwCitzdWJ4MzQ1NCBzdWJ0cmFjdCAtMjU0MzQ2MjMyOTgxMzUzMjkzMzkyODg4Nzg1NjQzMjQ1IC03NjQuNDE2OTAyNDg2MTUyMDkzNzU4Mjg3OTI5Njc4NDQ1IC0+IC0yNTQzNDYyMzI5ODEzNTMyOTMzOTI4ODg3ODU2NDI0ODEgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ1NSBhZGQgLTI4NzUuMzY3NDU0OTk1NDQxNzc5NjQ4MDQyNzczMjk3MjYgLTEzMTg3Ljg0OTIwNDUwNTQ4MDIyMDU2OTEyNDgyNjc2MzggLT4gLTE2MDYzLjIxNjY1OTUwMDkyMjAwMDIxNzE2NzYwMDA2MTEgSW5leGFjdCBSb3VuZGVkCitjb214MzQ1NSBjb21wYXJlIC0yODc1LjM2NzQ1NDk5NTQ0MTc3OTY0ODA0Mjc3MzI5NzI2IC0xMzE4Ny44NDkyMDQ1MDU0ODAyMjA1NjkxMjQ4MjY3NjM4IC0+IDEKK2RpdngzNDU1IGRpdmlkZSAtMjg3NS4zNjc0NTQ5OTU0NDE3Nzk2NDgwNDI3NzMyOTcyNiAtMTMxODcuODQ5MjA0NTA1NDgwMjIwNTY5MTI0ODI2NzYzOCAtPiAwLjIxODAzMTU2OTA5MTEyMjUyMDM5MTU5OTU0MTU3NTYxNSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDU1IGRpdmlkZWludCAtMjg3NS4zNjc0NTQ5OTU0NDE3Nzk2NDgwNDI3NzMyOTcyNiAtMTMxODcuODQ5MjA0NTA1NDgwMjIwNTY5MTI0ODI2NzYzOCAtPiAwCittdWx4MzQ1NSBtdWx0aXBseSAtMjg3NS4zNjc0NTQ5OTU0NDE3Nzk2NDgwNDI3NzMyOTcyNiAtMTMxODcuODQ5MjA0NTA1NDgwMjIwNTY5MTI0ODI2NzYzOCAtPiAzNzkxOTkxMi40MDQwMjI1ODQwNzI3MjgxNjMzMDI0NjY1IEluZXhhY3QgUm91bmRlZAorcG93eDM0NTUgcG93ZXIgLTI4NzUuMzY3NDU0OTk1NDQxNzc5NjQ4MDQyNzczMjk3MjYgLTEzMTg4IC0+IDBFLTEwMDMxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzNDU1IHJlbWFpbmRlciAtMjg3NS4zNjc0NTQ5OTU0NDE3Nzk2NDgwNDI3NzMyOTcyNiAtMTMxODcuODQ5MjA0NTA1NDgwMjIwNTY5MTI0ODI2NzYzOCAtPiAtMjg3NS4zNjc0NTQ5OTU0NDE3Nzk2NDgwNDI3NzMyOTcyNgorc3VieDM0NTUgc3VidHJhY3QgLTI4NzUuMzY3NDU0OTk1NDQxNzc5NjQ4MDQyNzczMjk3MjYgLTEzMTg3Ljg0OTIwNDUwNTQ4MDIyMDU2OTEyNDgyNjc2MzggLT4gMTAzMTIuNDgxNzQ5NTEwMDM4NDQwOTIxMDgyMDUzNDY2NSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDU2IGFkZCAtNy4yNjkyNzU3MDk4NDIxOTk0NDY5MzYwMjE0MDIyMzEwMyAwMTYwODgzMDIxNTQxLjMyMjc1Mjg2NzY5MTEwMDAzOTcxRS00MzggLT4gLTcuMjY5Mjc1NzA5ODQyMTk5NDQ2OTM2MDIxNDAyMjMxMDMgSW5leGFjdCBSb3VuZGVkCitjb214MzQ1NiBjb21wYXJlIC03LjI2OTI3NTcwOTg0MjE5OTQ0NjkzNjAyMTQwMjIzMTAzIDAxNjA4ODMwMjE1NDEuMzIyNzUyODY3NjkxMTAwMDM5NzFFLTQzOCAtPiAtMQorZGl2eDM0NTYgZGl2aWRlIC03LjI2OTI3NTcwOTg0MjE5OTQ0NjkzNjAyMTQwMjIzMTAzIDAxNjA4ODMwMjE1NDEuMzIyNzUyODY3NjkxMTAwMDM5NzFFLTQzOCAtPiAtNC41MTgzNjEwMDU1MzAzOTkxNzU3NDU1NzIzNTI3NTE3M0UrNDI3IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NTYgZGl2aWRlaW50IC03LjI2OTI3NTcwOTg0MjE5OTQ0NjkzNjAyMTQwMjIzMTAzIDAxNjA4ODMwMjE1NDEuMzIyNzUyODY3NjkxMTAwMDM5NzFFLTQzOCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0NTYgbXVsdGlwbHkgLTcuMjY5Mjc1NzA5ODQyMTk5NDQ2OTM2MDIxNDAyMjMxMDMgMDE2MDg4MzAyMTU0MS4zMjI3NTI4Njc2OTExMDAwMzk3MUUtNDM4IC0+IC0xLjE2OTUwMzA0MDYxNjM1NjgxODkxMzYxNTA0NDQyNDc5RS00MjYgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ1NiBwb3dlciAtNy4yNjkyNzU3MDk4NDIxOTk0NDY5MzYwMjE0MDIyMzEwMyAyIC0+IDUyLjg0MjM2OTM0NTcwMTgxMjY0NTE5OTgwOTYyMTEwMzYgSW5leGFjdCBSb3VuZGVkCityZW14MzQ1NiByZW1haW5kZXIgLTcuMjY5Mjc1NzA5ODQyMTk5NDQ2OTM2MDIxNDAyMjMxMDMgMDE2MDg4MzAyMTU0MS4zMjI3NTI4Njc2OTExMDAwMzk3MUUtNDM4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ1NiBzdWJ0cmFjdCAtNy4yNjkyNzU3MDk4NDIxOTk0NDY5MzYwMjE0MDIyMzEwMyAwMTYwODgzMDIxNTQxLjMyMjc1Mjg2NzY5MTEwMDAzOTcxRS00MzggLT4gLTcuMjY5Mjc1NzA5ODQyMTk5NDQ2OTM2MDIxNDAyMjMxMDMgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ1NyBhZGQgLTI4NTY3MTUxLjY4Njg3NjI3NTIyNDEwNTY1NDAwMjg1MTVFKzQ5OCAtNDQ3MC4xNTQ1NTEzNzU0NjQyNzY0NTI5MDIxMDk4OTY3NSAtPiAtMi44NTY3MTUxNjg2ODc2Mjc1MjI0MTA1NjU0MDAyODUxNUUrNTA1IEluZXhhY3QgUm91bmRlZAorY29teDM0NTcgY29tcGFyZSAtMjg1NjcxNTEuNjg2ODc2Mjc1MjI0MTA1NjU0MDAyODUxNUUrNDk4IC00NDcwLjE1NDU1MTM3NTQ2NDI3NjQ1MjkwMjEwOTg5Njc1IC0+IC0xCitkaXZ4MzQ1NyBkaXZpZGUgLTI4NTY3MTUxLjY4Njg3NjI3NTIyNDEwNTY1NDAwMjg1MTVFKzQ5OCAtNDQ3MC4xNTQ1NTEzNzU0NjQyNzY0NTI5MDIxMDk4OTY3NSAtPiA2LjM5MDY0MDcxNjkwNDU1OTE5NzkyNzA3NTg5MDU0MTA2RSs1MDEgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ1NyBkaXZpZGVpbnQgLTI4NTY3MTUxLjY4Njg3NjI3NTIyNDEwNTY1NDAwMjg1MTVFKzQ5OCAtNDQ3MC4xNTQ1NTEzNzU0NjQyNzY0NTI5MDIxMDk4OTY3NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0NTcgbXVsdGlwbHkgLTI4NTY3MTUxLjY4Njg3NjI3NTIyNDEwNTY1NDAwMjg1MTVFKzQ5OCAtNDQ3MC4xNTQ1NTEzNzU0NjQyNzY0NTI5MDIxMDk4OTY3NSAtPiAxLjI3Njk5NTgzMTMyOTIzMjUzNjA1Mzk3NzM2Nzk3MDAwRSs1MDkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ1NyBwb3dlciAtMjg1NjcxNTEuNjg2ODc2Mjc1MjI0MTA1NjU0MDAyODUxNUUrNDk4IC00NDcwIC0+IDBFLTEwMDMxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzNDU3IHJlbWFpbmRlciAtMjg1NjcxNTEuNjg2ODc2Mjc1MjI0MTA1NjU0MDAyODUxNUUrNDk4IC00NDcwLjE1NDU1MTM3NTQ2NDI3NjQ1MjkwMjEwOTg5Njc1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ1NyBzdWJ0cmFjdCAtMjg1NjcxNTEuNjg2ODc2Mjc1MjI0MTA1NjU0MDAyODUxNUUrNDk4IC00NDcwLjE1NDU1MTM3NTQ2NDI3NjQ1MjkwMjEwOTg5Njc1IC0+IC0yLjg1NjcxNTE2ODY4NzYyNzUyMjQxMDU2NTQwMDI4NTE1RSs1MDUgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ1OCBhZGQgNzE5MTc1My43OTk3NDEzNjQ0NzI1NzQ2ODI4MjA3MzcxOCA4MS4zODc4NDI2MTc2MDM4NDg3OTQ4Mzc1Nzc3Mzg0NDI5IC0+IDcxOTE4MzUuMTg3NTgzOTgyMDc2NDIzNDc3NjU4MzE0OTIgSW5leGFjdCBSb3VuZGVkCitjb214MzQ1OCBjb21wYXJlIDcxOTE3NTMuNzk5NzQxMzY0NDcyNTc0NjgyODIwNzM3MTggODEuMzg3ODQyNjE3NjAzODQ4Nzk0ODM3NTc3NzM4NDQyOSAtPiAxCitkaXZ4MzQ1OCBkaXZpZGUgNzE5MTc1My43OTk3NDEzNjQ0NzI1NzQ2ODI4MjA3MzcxOCA4MS4zODc4NDI2MTc2MDM4NDg3OTQ4Mzc1Nzc3Mzg0NDI5IC0+IDg4MzYzLjk4MTI1ODYxODgxODY3MzM5MzU1Njk4NzQxMDAgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ1OCBkaXZpZGVpbnQgNzE5MTc1My43OTk3NDEzNjQ0NzI1NzQ2ODI4MjA3MzcxOCA4MS4zODc4NDI2MTc2MDM4NDg3OTQ4Mzc1Nzc3Mzg0NDI5IC0+IDg4MzYzCittdWx4MzQ1OCBtdWx0aXBseSA3MTkxNzUzLjc5OTc0MTM2NDQ3MjU3NDY4MjgyMDczNzE4IDgxLjM4Nzg0MjYxNzYwMzg0ODc5NDgzNzU3NzczODQ0MjkgLT4gNTg1MzIxMzI2LjM5NzkwNDYzODg2MzQ4NTg5MTUyNDU1NSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDU4IHBvd2VyIDcxOTE3NTMuNzk5NzQxMzY0NDcyNTc0NjgyODIwNzM3MTggODEgLT4gMi41MzI5MDk4MzEzODU2MTQ4MjYxMjU1NzQwNDE0ODc2MEUrNTU1IEluZXhhY3QgUm91bmRlZAorcmVteDM0NTggcmVtYWluZGVyIDcxOTE3NTMuNzk5NzQxMzY0NDcyNTc0NjgyODIwNzM3MTggODEuMzg3ODQyNjE3NjAzODQ4Nzk0ODM3NTc3NzM4NDQyOSAtPiA3OS44NjI1MjIwMzU1ODE1MTY0NDk5MzkwMzUxNTAwMjczCitzdWJ4MzQ1OCBzdWJ0cmFjdCA3MTkxNzUzLjc5OTc0MTM2NDQ3MjU3NDY4MjgyMDczNzE4IDgxLjM4Nzg0MjYxNzYwMzg0ODc5NDgzNzU3NzczODQ0MjkgLT4gNzE5MTY3Mi40MTE4OTg3NDY4Njg3MjU4ODc5ODMxNTk0NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDU5IGFkZCA1MDI5NzU4MDQuMDY5ODY0NTM2MTA0NjIxNzAwNDA0NzcwIDY4NC43OTAwMjg0MzIwNzQ1Mjc5NjAyNjk1MTUyMjcyNDMgLT4gNTAyOTc2NDg4Ljg1OTg5Mjk2ODE3OTE0OTY2MDY3NDI4NSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDU5IGNvbXBhcmUgNTAyOTc1ODA0LjA2OTg2NDUzNjEwNDYyMTcwMDQwNDc3MCA2ODQuNzkwMDI4NDMyMDc0NTI3OTYwMjY5NTE1MjI3MjQzIC0+IDEKK2RpdngzNDU5IGRpdmlkZSA1MDI5NzU4MDQuMDY5ODY0NTM2MTA0NjIxNzAwNDA0NzcwIDY4NC43OTAwMjg0MzIwNzQ1Mjc5NjAyNjk1MTUyMjcyNDMgLT4gNzM0NDk2LjM5MDQwNjcwNjMyMzg5OTgwMTY0MTI3ODkzMyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDU5IGRpdmlkZWludCA1MDI5NzU4MDQuMDY5ODY0NTM2MTA0NjIxNzAwNDA0NzcwIDY4NC43OTAwMjg0MzIwNzQ1Mjc5NjAyNjk1MTUyMjcyNDMgLT4gNzM0NDk2CittdWx4MzQ1OSBtdWx0aXBseSA1MDI5NzU4MDQuMDY5ODY0NTM2MTA0NjIxNzAwNDA0NzcwIDY4NC43OTAwMjg0MzIwNzQ1Mjc5NjAyNjk1MTUyMjcyNDMgLT4gMzQ0NDMyODE1MTY5LjY0ODA4Mjc1NDIxNDYzMTA4NjI3MCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDU5IHBvd2VyIDUwMjk3NTgwNC4wNjk4NjQ1MzYxMDQ2MjE3MDA0MDQ3NzAgNjg1IC0+IDMuNjI4NzY3MTY1NzM2MjM1NTI3NjE3MzkxNzc1OTI2NzdFKzU5NjAgSW5leGFjdCBSb3VuZGVkCityZW14MzQ1OSByZW1haW5kZXIgNTAyOTc1ODA0LjA2OTg2NDUzNjEwNDYyMTcwMDQwNDc3MCA2ODQuNzkwMDI4NDMyMDc0NTI3OTYwMjY5NTE1MjI3MjQzIC0+IDI2Ny4zNDY2MTk1MjM2MTU5MTU1ODI1NDg0MjA5MjU0NzIKK3N1YngzNDU5IHN1YnRyYWN0IDUwMjk3NTgwNC4wNjk4NjQ1MzYxMDQ2MjE3MDA0MDQ3NzAgNjg0Ljc5MDAyODQzMjA3NDUyNzk2MDI2OTUxNTIyNzI0MyAtPiA1MDI5NzUxMTkuMjc5ODM2MTA0MDMwMDkzNzQwMTM1MjU1IEluZXhhY3QgUm91bmRlZAorYWRkeDM0NjAgYWRkIDE1MDUzNjguNDIwNjM3MzE4NjE1OTA0NjA0NTM2NTk1NzAgLTQ2NTI0Mi42Nzg0Mzk5NTE0NjI3Njc2MzAwMjI4MTkxMDUgLT4gMTA0MDEyNS43NDIxOTczNjcxNTMxMzY5NzQ1MTM3NzY2MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDYwIGNvbXBhcmUgMTUwNTM2OC40MjA2MzczMTg2MTU5MDQ2MDQ1MzY1OTU3MCAtNDY1MjQyLjY3ODQzOTk1MTQ2Mjc2NzYzMDAyMjgxOTEwNSAtPiAxCitkaXZ4MzQ2MCBkaXZpZGUgMTUwNTM2OC40MjA2MzczMTg2MTU5MDQ2MDQ1MzY1OTU3MCAtNDY1MjQyLjY3ODQzOTk1MTQ2Mjc2NzYzMDAyMjgxOTEwNSAtPiAtMy4yMzU2NjI3ODUwMzMxOTk0NzA1OTIxMzAwMTQwNTA2NSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDYwIGRpdmlkZWludCAxNTA1MzY4LjQyMDYzNzMxODYxNTkwNDYwNDUzNjU5NTcwIC00NjUyNDIuNjc4NDM5OTUxNDYyNzY3NjMwMDIyODE5MTA1IC0+IC0zCittdWx4MzQ2MCBtdWx0aXBseSAxNTA1MzY4LjQyMDYzNzMxODYxNTkwNDYwNDUzNjU5NTcwIC00NjUyNDIuNjc4NDM5OTUxNDYyNzY3NjMwMDIyODE5MTA1IC0+IC03MDAzNjE2MzYwNTYuMjI1NjE4MjY2Mjk2ODk5MDQ4NzY1IEluZXhhY3QgUm91bmRlZAorcG93eDM0NjAgcG93ZXIgMTUwNTM2OC40MjA2MzczMTg2MTU5MDQ2MDQ1MzY1OTU3MCAtNDY1MjQzIC0+IDBFLTEwMDMxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JlbXgzNDYwIHJlbWFpbmRlciAxNTA1MzY4LjQyMDYzNzMxODYxNTkwNDYwNDUzNjU5NTcwIC00NjUyNDIuNjc4NDM5OTUxNDYyNzY3NjMwMDIyODE5MTA1IC0+IDEwOTY0MC4zODUzMTc0NjQyMjc2MDE3MTQ0NjgxMzgzODUKK3N1YngzNDYwIHN1YnRyYWN0IDE1MDUzNjguNDIwNjM3MzE4NjE1OTA0NjA0NTM2NTk1NzAgLTQ2NTI0Mi42Nzg0Mzk5NTE0NjI3Njc2MzAwMjI4MTkxMDUgLT4gMTk3MDYxMS4wOTkwNzcyNzAwNzg2NzIyMzQ1NTk0MTQ4MSBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDYxIGFkZCA2OTIyNTAyMy4yODUwMTQyNzg0MDYzNDE2MTM3MTQ0ODI5IDg1ODQwNTAuMDY2NDgxOTE3OTg4MzQ4MTk5OTUzMjU2OTMgLT4gNzc4MDkwNzMuMzUxNDk2MTk2Mzk0Njg5ODEzNjY3NzM5OCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDYxIGNvbXBhcmUgNjkyMjUwMjMuMjg1MDE0Mjc4NDA2MzQxNjEzNzE0NDgyOSA4NTg0MDUwLjA2NjQ4MTkxNzk4ODM0ODE5OTk1MzI1NjkzIC0+IDEKK2RpdngzNDYxIGRpdmlkZSA2OTIyNTAyMy4yODUwMTQyNzg0MDYzNDE2MTM3MTQ0ODI5IDg1ODQwNTAuMDY2NDgxOTE3OTg4MzQ4MTk5OTUzMjU2OTMgLT4gOC4wNjQzNzc4NTc2NDA1MDQzMTI5NTY1MjQxMTE2MzM4MiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDYxIGRpdmlkZWludCA2OTIyNTAyMy4yODUwMTQyNzg0MDYzNDE2MTM3MTQ0ODI5IDg1ODQwNTAuMDY2NDgxOTE3OTg4MzQ4MTk5OTUzMjU2OTMgLT4gOAorbXVseDM0NjEgbXVsdGlwbHkgNjkyMjUwMjMuMjg1MDE0Mjc4NDA2MzQxNjEzNzE0NDgyOSA4NTg0MDUwLjA2NjQ4MTkxNzk4ODM0ODE5OTk1MzI1NjkzIC0+IDU5NDIzMTA2NTczMTkzOS4xMzczMjk3NzA0ODU0OTcyNjEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ2MSBwb3dlciA2OTIyNTAyMy4yODUwMTQyNzg0MDYzNDE2MTM3MTQ0ODI5IDg1ODQwNTAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzQ2MSByZW1haW5kZXIgNjkyMjUwMjMuMjg1MDE0Mjc4NDA2MzQxNjEzNzE0NDgyOSA4NTg0MDUwLjA2NjQ4MTkxNzk4ODM0ODE5OTk1MzI1NjkzIC0+IDU1MjYyMi43NTMxNTg5MzQ0OTk1NTYwMTQwODg0Mjc0Ngorc3VieDM0NjEgc3VidHJhY3QgNjkyMjUwMjMuMjg1MDE0Mjc4NDA2MzQxNjEzNzE0NDgyOSA4NTg0MDUwLjA2NjQ4MTkxNzk4ODM0ODE5OTk1MzI1NjkzIC0+IDYwNjQwOTczLjIxODUzMjM2MDQxNzk5MzQxMzc2MTIyNjAgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ2MiBhZGQgLTU1NjY5NTAxODUzLjc3NTEwMDY4NDE5NDA0NzEzMzkzMTBFKzYxNCAwNjE0MDA1MzguMTg2MDQ0NjkzMjMzODE2NTY2OTc3MTg5IC0+IC01LjU2Njk1MDE4NTM3NzUxMDA2ODQxOTQwNDcxMzM5MzEwRSs2MjQgSW5leGFjdCBSb3VuZGVkCitjb214MzQ2MiBjb21wYXJlIC01NTY2OTUwMTg1My43NzUxMDA2ODQxOTQwNDcxMzM5MzEwRSs2MTQgMDYxNDAwNTM4LjE4NjA0NDY5MzIzMzgxNjU2Njk3NzE4OSAtPiAtMQorZGl2eDM0NjIgZGl2aWRlIC01NTY2OTUwMTg1My43NzUxMDA2ODQxOTQwNDcxMzM5MzEwRSs2MTQgMDYxNDAwNTM4LjE4NjA0NDY5MzIzMzgxNjU2Njk3NzE4OSAtPiAtOS4wNjY2MTQ2NDE4OTM3ODA1OTA2Nzc5MjU1NDMwMDY3NkUrNjE2IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NjIgZGl2aWRlaW50IC01NTY2OTUwMTg1My43NzUxMDA2ODQxOTQwNDcxMzM5MzEwRSs2MTQgMDYxNDAwNTM4LjE4NjA0NDY5MzIzMzgxNjU2Njk3NzE4OSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0NjIgbXVsdGlwbHkgLTU1NjY5NTAxODUzLjc3NTEwMDY4NDE5NDA0NzEzMzkzMTBFKzYxNCAwNjE0MDA1MzguMTg2MDQ0NjkzMjMzODE2NTY2OTc3MTg5IC0+IC0zLjQxODEzNzM3NDM3MDgwMzkwNzg3ODY1Mzg5NzAzNTY1RSs2MzIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ2MiBwb3dlciAtNTU2Njk1MDE4NTMuNzc1MTAwNjg0MTk0MDQ3MTMzOTMxMEUrNjE0IDYxNDAwNTM4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcmVteDM0NjIgcmVtYWluZGVyIC01NTY2OTUwMTg1My43NzUxMDA2ODQxOTQwNDcxMzM5MzEwRSs2MTQgMDYxNDAwNTM4LjE4NjA0NDY5MzIzMzgxNjU2Njk3NzE4OSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0NjIgc3VidHJhY3QgLTU1NjY5NTAxODUzLjc3NTEwMDY4NDE5NDA0NzEzMzkzMTBFKzYxNCAwNjE0MDA1MzguMTg2MDQ0NjkzMjMzODE2NTY2OTc3MTg5IC0+IC01LjU2Njk1MDE4NTM3NzUxMDA2ODQxOTQwNDcxMzM5MzEwRSs2MjQgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ2MyBhZGQgLTUyNzU2Ni41MjEyNzM5OTI0MjQ2NDkzNDY4MzczMzc2MDJFLTQwOCAtODM0NjYyLjU5OTk4Mzk1MzM0NTcxODUyMzgwNzEyMzk3MiAtPiAtODM0NjYyLjU5OTk4Mzk1MzM0NTcxODUyMzgwNzEyMzk3MiBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDYzIGNvbXBhcmUgLTUyNzU2Ni41MjEyNzM5OTI0MjQ2NDkzNDY4MzczMzc2MDJFLTQwOCAtODM0NjYyLjU5OTk4Mzk1MzM0NTcxODUyMzgwNzEyMzk3MiAtPiAxCitkaXZ4MzQ2MyBkaXZpZGUgLTUyNzU2Ni41MjEyNzM5OTI0MjQ2NDkzNDY4MzczMzc2MDJFLTQwOCAtODM0NjYyLjU5OTk4Mzk1MzM0NTcxODUyMzgwNzEyMzk3MiAtPiA2LjMyMDcxNTk1NDk3NTUyMDE1NjU2OTA5ODkyMzM5MjI2RS00MDkgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ2MyBkaXZpZGVpbnQgLTUyNzU2Ni41MjEyNzM5OTI0MjQ2NDkzNDY4MzczMzc2MDJFLTQwOCAtODM0NjYyLjU5OTk4Mzk1MzM0NTcxODUyMzgwNzEyMzk3MiAtPiAwCittdWx4MzQ2MyBtdWx0aXBseSAtNTI3NTY2LjUyMTI3Mzk5MjQyNDY0OTM0NjgzNzMzNzYwMkUtNDA4IC04MzQ2NjIuNTk5OTgzOTUzMzQ1NzE4NTIzODA3MTIzOTcyIC0+IDQuNDAzNDAwNDQzMTEwNDAxNTE5NjA3NjMxMDgwMTk5NTdFLTM5NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDYzIHBvd2VyIC01Mjc1NjYuNTIxMjczOTkyNDI0NjQ5MzQ2ODM3MzM3NjAyRS00MDggLTgzNDY2MyAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzQ2MyByZW1haW5kZXIgLTUyNzU2Ni41MjEyNzM5OTI0MjQ2NDkzNDY4MzczMzc2MDJFLTQwOCAtODM0NjYyLjU5OTk4Mzk1MzM0NTcxODUyMzgwNzEyMzk3MiAtPiAtNS4yNzU2NjUyMTI3Mzk5MjQyNDY0OTM0NjgzNzMzNzYwMkUtNDAzCitzdWJ4MzQ2MyBzdWJ0cmFjdCAtNTI3NTY2LjUyMTI3Mzk5MjQyNDY0OTM0NjgzNzMzNzYwMkUtNDA4IC04MzQ2NjIuNTk5OTgzOTUzMzQ1NzE4NTIzODA3MTIzOTcyIC0+IDgzNDY2Mi41OTk5ODM5NTMzNDU3MTg1MjM4MDcxMjM5NzIgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ2NCBhZGQgNjkwNjU1MTAuMDQ1OTY1MzY5OTQxODA4MzQ1NTMzNTM2NiA2OTQ4NDg2NDM4NDgyMTI1MjAwODY5NjA4ODY4MTgxNTdFLTg1MyAtPiA2OTA2NTUxMC4wNDU5NjUzNjk5NDE4MDgzNDU1MzM1MzY2IEluZXhhY3QgUm91bmRlZAorY29teDM0NjQgY29tcGFyZSA2OTA2NTUxMC4wNDU5NjUzNjk5NDE4MDgzNDU1MzM1MzY2IDY5NDg0ODY0Mzg0ODIxMjUyMDA4Njk2MDg4NjgxODE1N0UtODUzIC0+IDEKK2RpdngzNDY0IGRpdmlkZSA2OTA2NTUxMC4wNDU5NjUzNjk5NDE4MDgzNDU1MzM1MzY2IDY5NDg0ODY0Mzg0ODIxMjUyMDA4Njk2MDg4NjgxODE1N0UtODUzIC0+IDkuOTM5NjQ4MTAyODUzOTY2NDY4ODk4MzA5MTk0OTI2ODNFKzgyNyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDY0IGRpdmlkZWludCA2OTA2NTUxMC4wNDU5NjUzNjk5NDE4MDgzNDU1MzM1MzY2IDY5NDg0ODY0Mzg0ODIxMjUyMDA4Njk2MDg4NjgxODE1N0UtODUzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQ2NCBtdWx0aXBseSA2OTA2NTUxMC4wNDU5NjUzNjk5NDE4MDgzNDU1MzM1MzY2IDY5NDg0ODY0Mzg0ODIxMjUyMDA4Njk2MDg4NjgxODE1N0UtODUzIC0+IDQuNzk5MDA3NTk5MjEyNDEzNTI1NjIzODExODEzMzI3MjBFLTgxMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDY0IHBvd2VyIDY5MDY1NTEwLjA0NTk2NTM2OTk0MTgwODM0NTUzMzUzNjYgNyAtPiA3LjQ5NTk4MjQ5NzYzNDE2NDgzODI0OTE5MTE4OTczNTY3RSs1NCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDY0IHJlbWFpbmRlciA2OTA2NTUxMC4wNDU5NjUzNjk5NDE4MDgzNDU1MzM1MzY2IDY5NDg0ODY0Mzg0ODIxMjUyMDA4Njk2MDg4NjgxODE1N0UtODUzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ2NCBzdWJ0cmFjdCA2OTA2NTUxMC4wNDU5NjUzNjk5NDE4MDgzNDU1MzM1MzY2IDY5NDg0ODY0Mzg0ODIxMjUyMDA4Njk2MDg4NjgxODE1N0UtODUzIC0+IDY5MDY1NTEwLjA0NTk2NTM2OTk0MTgwODM0NTUzMzUzNjYgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ2NSBhZGQgLTI5MjE5ODIuODI0MTEyODU1MDUyMjkxMjI4OTAwNDE4NDEgLTcyOTk0LjY1MjM4NDAyOTgwMTc0NzE5NjI1Njk3Nzg4MDNFLTc2MyAtPiAtMjkyMTk4Mi44MjQxMTI4NTUwNTIyOTEyMjg5MDA0MTg0MSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDY1IGNvbXBhcmUgLTI5MjE5ODIuODI0MTEyODU1MDUyMjkxMjI4OTAwNDE4NDEgLTcyOTk0LjY1MjM4NDAyOTgwMTc0NzE5NjI1Njk3Nzg4MDNFLTc2MyAtPiAtMQorZGl2eDM0NjUgZGl2aWRlIC0yOTIxOTgyLjgyNDExMjg1NTA1MjI5MTIyODkwMDQxODQxIC03Mjk5NC42NTIzODQwMjk4MDE3NDcxOTYyNTY5Nzc4ODAzRS03NjMgLT4gNC4wMDMwMDk0Mzc5MjQ0NDY2MzQ2NzczMjAyOTUwMTcxNkUrNzY0IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NjUgZGl2aWRlaW50IC0yOTIxOTgyLjgyNDExMjg1NTA1MjI5MTIyODkwMDQxODQxIC03Mjk5NC42NTIzODQwMjk4MDE3NDcxOTYyNTY5Nzc4ODAzRS03NjMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDY1IG11bHRpcGx5IC0yOTIxOTgyLjgyNDExMjg1NTA1MjI5MTIyODkwMDQxODQxIC03Mjk5NC42NTIzODQwMjk4MDE3NDcxOTYyNTY5Nzc4ODAzRS03NjMgLT4gMi4xMzI4OTEyMDUxODIyMzU0NzkyMTIxMjQxMjY0MjQxMUUtNzUyIEluZXhhY3QgUm91bmRlZAorcG93eDM0NjUgcG93ZXIgLTI5MjE5ODIuODI0MTEyODU1MDUyMjkxMjI4OTAwNDE4NDEgLTcgLT4gLTUuNDk4NjUzOTQ4NzA2MzEyNDg0Nzk2Njg3ODIxNTQxMzFFLTQ2IEluZXhhY3QgUm91bmRlZAorcmVteDM0NjUgcmVtYWluZGVyIC0yOTIxOTgyLjgyNDExMjg1NTA1MjI5MTIyODkwMDQxODQxIC03Mjk5NC42NTIzODQwMjk4MDE3NDcxOTYyNTY5Nzc4ODAzRS03NjMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDY1IHN1YnRyYWN0IC0yOTIxOTgyLjgyNDExMjg1NTA1MjI5MTIyODkwMDQxODQxIC03Mjk5NC42NTIzODQwMjk4MDE3NDcxOTYyNTY5Nzc4ODAzRS03NjMgLT4gLTI5MjE5ODIuODI0MTEyODU1MDUyMjkxMjI4OTAwNDE4NDEgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ2NiBhZGQgNC41MTExNzQ1OTQ2NjQ5MTQ1MTQwMTgzNTc1NjU5Mzc5MyAzODczMzg1LjE5OTgxODExNjQwMDYzMTQ0MzM4MDg3MjMwIC0+IDM4NzMzODkuNzEwOTkyNzExMDY1NTQ1OTU3Mzk5MjI5ODcgSW5leGFjdCBSb3VuZGVkCitjb214MzQ2NiBjb21wYXJlIDQuNTExMTc0NTk0NjY0OTE0NTE0MDE4MzU3NTY1OTM3OTMgMzg3MzM4NS4xOTk4MTgxMTY0MDA2MzE0NDMzODA4NzIzMCAtPiAtMQorZGl2eDM0NjYgZGl2aWRlIDQuNTExMTc0NTk0NjY0OTE0NTE0MDE4MzU3NTY1OTM3OTMgMzg3MzM4NS4xOTk4MTgxMTY0MDA2MzE0NDMzODA4NzIzMCAtPiAwLjAwMDAwMTE2NDY1OTQyODg4MzIyNzc2NzUzMDYyNTgwMTA2MzUxIEluZXhhY3QgUm91bmRlZAorZHZpeDM0NjYgZGl2aWRlaW50IDQuNTExMTc0NTk0NjY0OTE0NTE0MDE4MzU3NTY1OTM3OTMgMzg3MzM4NS4xOTk4MTgxMTY0MDA2MzE0NDMzODA4NzIzMCAtPiAwCittdWx4MzQ2NiBtdWx0aXBseSA0LjUxMTE3NDU5NDY2NDkxNDUxNDAxODM1NzU2NTkzNzkzIDM4NzMzODUuMTk5ODE4MTE2NDAwNjMxNDQzMzgwODcyMzAgLT4gMTc0NzM1MTYuOTA4NzcwNTcwMTY1MjA2MjU0NjE2NDcwNSBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDY2IHBvd2VyIDQuNTExMTc0NTk0NjY0OTE0NTE0MDE4MzU3NTY1OTM3OTMgMzg3MzM4NSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDY2IHJlbWFpbmRlciA0LjUxMTE3NDU5NDY2NDkxNDUxNDAxODM1NzU2NTkzNzkzIDM4NzMzODUuMTk5ODE4MTE2NDAwNjMxNDQzMzgwODcyMzAgLT4gNC41MTExNzQ1OTQ2NjQ5MTQ1MTQwMTgzNTc1NjU5Mzc5Mworc3VieDM0NjYgc3VidHJhY3QgNC41MTExNzQ1OTQ2NjQ5MTQ1MTQwMTgzNTc1NjU5Mzc5MyAzODczMzg1LjE5OTgxODExNjQwMDYzMTQ0MzM4MDg3MjMwIC0+IC0zODczMzgwLjY4ODY0MzUyMTczNTcxNjkyOTM2MjUxNDczIEluZXhhY3QgUm91bmRlZAorYWRkeDM0NjcgYWRkIDQ5NTUzNzYzNDc0Njk4LjgxMTg2NjE3NTg4MTEwOTExMjAgMzYuMTcxMzg2MTI5Mzg5NjIxNjU5Mzg0MDgxNzk1MDc4MUUrNDEwIC0+IDMuNjE3MTM4NjEyOTM4OTYyMTY1OTM4NDA4MTc5NTA3ODFFKzQxMSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDY3IGNvbXBhcmUgNDk1NTM3NjM0NzQ2OTguODExODY2MTc1ODgxMTA5MTEyMCAzNi4xNzEzODYxMjkzODk2MjE2NTkzODQwODE3OTUwNzgxRSs0MTAgLT4gLTEKK2RpdngzNDY3IGRpdmlkZSA0OTU1Mzc2MzQ3NDY5OC44MTE4NjYxNzU4ODExMDkxMTIwIDM2LjE3MTM4NjEyOTM4OTYyMTY1OTM4NDA4MTc5NTA3ODFFKzQxMCAtPiAxLjM2OTk3MTM3MTc3NTQzNDE2MTkwODExODI3Njg1MjMxRS0zOTggSW5leGFjdCBSb3VuZGVkCitkdml4MzQ2NyBkaXZpZGVpbnQgNDk1NTM3NjM0NzQ2OTguODExODY2MTc1ODgxMTA5MTEyMCAzNi4xNzEzODYxMjkzODk2MjE2NTkzODQwODE3OTUwNzgxRSs0MTAgLT4gMAorbXVseDM0NjcgbXVsdGlwbHkgNDk1NTM3NjM0NzQ2OTguODExODY2MTc1ODgxMTA5MTEyMCAzNi4xNzEzODYxMjkzODk2MjE2NTkzODQwODE3OTUwNzgxRSs0MTAgLT4gMS43OTI0MjgzMTI4MDc3NzQ2NjU1NDI3MTMzMjQyNTczNUUrNDI1IEluZXhhY3QgUm91bmRlZAorcG93eDM0NjcgcG93ZXIgNDk1NTM3NjM0NzQ2OTguODExODY2MTc1ODgxMTA5MTEyMCA0IC0+IDYuMDI5ODUwOTEwOTk3MzAyMzY2MzU5NTQ4MDE0NzQ4MDJFKzU0IEluZXhhY3QgUm91bmRlZAorcmVteDM0NjcgcmVtYWluZGVyIDQ5NTUzNzYzNDc0Njk4LjgxMTg2NjE3NTg4MTEwOTExMjAgMzYuMTcxMzg2MTI5Mzg5NjIxNjU5Mzg0MDgxNzk1MDc4MUUrNDEwIC0+IDQ5NTUzNzYzNDc0Njk4LjgxMTg2NjE3NTg4MTEwOTExMjAKK3N1YngzNDY3IHN1YnRyYWN0IDQ5NTUzNzYzNDc0Njk4LjgxMTg2NjE3NTg4MTEwOTExMjAgMzYuMTcxMzg2MTI5Mzg5NjIxNjU5Mzg0MDgxNzk1MDc4MUUrNDEwIC0+IC0zLjYxNzEzODYxMjkzODk2MjE2NTkzODQwODE3OTUwNzgxRSs0MTEgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ2OCBhZGQgNzU1OTg1NTgzMzQ0LjM3OTk1MTUwNjA3MTQ5OTE3MDc0OUUrOTU2IDc0NjkyMTA5NTU2OTk3MTQ3NzM3MzY0MzQ4NzI4NTc4MCAtPiA3LjU1OTg1NTgzMzQ0Mzc5OTUxNTA2MDcxNDk5MTcwNzQ5RSs5NjcgSW5leGFjdCBSb3VuZGVkCitjb214MzQ2OCBjb21wYXJlIDc1NTk4NTU4MzM0NC4zNzk5NTE1MDYwNzE0OTkxNzA3NDlFKzk1NiA3NDY5MjEwOTU1Njk5NzE0NzczNzM2NDM0ODcyODU3ODAgLT4gMQorZGl2eDM0NjggZGl2aWRlIDc1NTk4NTU4MzM0NC4zNzk5NTE1MDYwNzE0OTkxNzA3NDlFKzk1NiA3NDY5MjEwOTU1Njk5NzE0NzczNzM2NDM0ODcyODU3ODAgLT4gMS4wMTIxMzU4MDM2NzIxMjg3MzAyNTY3MTkxNjc1ODY2OUUrOTM1IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NjggZGl2aWRlaW50IDc1NTk4NTU4MzM0NC4zNzk5NTE1MDYwNzE0OTkxNzA3NDlFKzk1NiA3NDY5MjEwOTU1Njk5NzE0NzczNzM2NDM0ODcyODU3ODAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDY4IG11bHRpcGx5IDc1NTk4NTU4MzM0NC4zNzk5NTE1MDYwNzE0OTkxNzA3NDlFKzk1NiA3NDY5MjEwOTU1Njk5NzE0NzczNzM2NDM0ODcyODU3ODAgLT4gNS42NDY2MTU4MDE0NjY4ODI1NTI4NjkzMzc1MzYxNjU4MEUrMTAwMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDY4IHBvd2VyIDc1NTk4NTU4MzM0NC4zNzk5NTE1MDYwNzE0OTkxNzA3NDlFKzk1NiA3IC0+IDEuNDExMjE5NTg1MTY1NDc3MjU2NzcxNDI5ODEzNzU0NjlFKzY3NzUgSW5leGFjdCBSb3VuZGVkCityZW14MzQ2OCByZW1haW5kZXIgNzU1OTg1NTgzMzQ0LjM3OTk1MTUwNjA3MTQ5OTE3MDc0OUUrOTU2IDc0NjkyMTA5NTU2OTk3MTQ3NzM3MzY0MzQ4NzI4NTc4MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0Njggc3VidHJhY3QgNzU1OTg1NTgzMzQ0LjM3OTk1MTUwNjA3MTQ5OTE3MDc0OUUrOTU2IDc0NjkyMTA5NTU2OTk3MTQ3NzM3MzY0MzQ4NzI4NTc4MCAtPiA3LjU1OTg1NTgzMzQ0Mzc5OTUxNTA2MDcxNDk5MTcwNzQ5RSs5NjcgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ2OSBhZGQgLTIwMTAxNjY4NTQxLjc0NzIyNjA0OTc1OTQyMzAxMDU0NTYgLTM5NTU2MjE0OC4zNDUwMDM5MzExNjE1MzIxMDExMDk5NjQgLT4gLTIwNDk3MjMwNjkwLjA5MjIyOTk4MDkyMDk1NTExMTY1NTYgSW5leGFjdCBSb3VuZGVkCitjb214MzQ2OSBjb21wYXJlIC0yMDEwMTY2ODU0MS43NDcyMjYwNDk3NTk0MjMwMTA1NDU2IC0zOTU1NjIxNDguMzQ1MDAzOTMxMTYxNTMyMTAxMTA5OTY0IC0+IC0xCitkaXZ4MzQ2OSBkaXZpZGUgLTIwMTAxNjY4NTQxLjc0NzIyNjA0OTc1OTQyMzAxMDU0NTYgLTM5NTU2MjE0OC4zNDUwMDM5MzExNjE1MzIxMDExMDk5NjQgLT4gNTAuODE3OTc3OTczNTAxMjA1MzY2MTQ0Nzg3MzY2NjgxNiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDY5IGRpdmlkZWludCAtMjAxMDE2Njg1NDEuNzQ3MjI2MDQ5NzU5NDIzMDEwNTQ1NiAtMzk1NTYyMTQ4LjM0NTAwMzkzMTE2MTUzMjEwMTEwOTk2NCAtPiA1MAorbXVseDM0NjkgbXVsdGlwbHkgLTIwMTAxNjY4NTQxLjc0NzIyNjA0OTc1OTQyMzAxMDU0NTYgLTM5NTU2MjE0OC4zNDUwMDM5MzExNjE1MzIxMDExMDk5NjQgLT4gNzk1MTQ1OTE5MzY5MjcxNTA3OS4wOTMyODc2MDAxNjkxNCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDY5IHBvd2VyIC0yMDEwMTY2ODU0MS43NDcyMjYwNDk3NTk0MjMwMTA1NDU2IC0zOTU1NjIxNDggLT4gMEUtMTAwMzEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDM0NjkgcmVtYWluZGVyIC0yMDEwMTY2ODU0MS43NDcyMjYwNDk3NTk0MjMwMTA1NDU2IC0zOTU1NjIxNDguMzQ1MDAzOTMxMTYxNTMyMTAxMTA5OTY0IC0+IC0zMjM1NjExMjQuNDk3MDI5NDkxNjgyODE3OTU1MDQ3NDAwCitzdWJ4MzQ2OSBzdWJ0cmFjdCAtMjAxMDE2Njg1NDEuNzQ3MjI2MDQ5NzU5NDIzMDEwNTQ1NiAtMzk1NTYyMTQ4LjM0NTAwMzkzMTE2MTUzMjEwMTEwOTk2NCAtPiAtMTk3MDYxMDYzOTMuNDAyMjIyMTE4NTk3ODkwOTA5NDM1NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDcwIGFkZCA1NTgzOTAzLjE4MDcyMTAwNzE2MDcyMDExMjY0NjY4NjMxIDQ2MDg2ODkxNDY5NC4wODgzODcwNjc0NTEzMTI1MDA3MjMgLT4gNDYwODc0NDk4NTk3LjI2OTEwODA3NDYxMjAzMjYxMzM3MCBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDcwIGNvbXBhcmUgNTU4MzkwMy4xODA3MjEwMDcxNjA3MjAxMTI2NDY2ODYzMSA0NjA4Njg5MTQ2OTQuMDg4Mzg3MDY3NDUxMzEyNTAwNzIzIC0+IC0xCitkaXZ4MzQ3MCBkaXZpZGUgNTU4MzkwMy4xODA3MjEwMDcxNjA3MjAxMTI2NDY2ODYzMSA0NjA4Njg5MTQ2OTQuMDg4Mzg3MDY3NDUxMzEyNTAwNzIzIC0+IDAuMDAwMDEyMTE2MDMzNDM3NDYzMzI0MDE2ODA2ODQwNTQ2NzMwNyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDcwIGRpdmlkZWludCA1NTgzOTAzLjE4MDcyMTAwNzE2MDcyMDExMjY0NjY4NjMxIDQ2MDg2ODkxNDY5NC4wODgzODcwNjc0NTEzMTI1MDA3MjMgLT4gMAorbXVseDM0NzAgbXVsdGlwbHkgNTU4MzkwMy4xODA3MjEwMDcxNjA3MjAxMTI2NDY2ODYzMSA0NjA4Njg5MTQ2OTQuMDg4Mzg3MDY3NDUxMzEyNTAwNzIzIC0+IDI1NzM0NDczOTg2NTU3NTg2NTkuMzk0NzU2NzI5MDUyMjUgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ3MCBwb3dlciA1NTgzOTAzLjE4MDcyMTAwNzE2MDcyMDExMjY0NjY4NjMxIDUgLT4gNS40Mjg2MTk0MzU4OTQxODYwMzI5ODY3MDQ1NDcwMjkwMUUrMzMgSW5leGFjdCBSb3VuZGVkCityZW14MzQ3MCByZW1haW5kZXIgNTU4MzkwMy4xODA3MjEwMDcxNjA3MjAxMTI2NDY2ODYzMSA0NjA4Njg5MTQ2OTQuMDg4Mzg3MDY3NDUxMzEyNTAwNzIzIC0+IDU1ODM5MDMuMTgwNzIxMDA3MTYwNzIwMTEyNjQ2Njg2MzEKK3N1YngzNDcwIHN1YnRyYWN0IDU1ODM5MDMuMTgwNzIxMDA3MTYwNzIwMTEyNjQ2Njg2MzEgNDYwODY4OTE0Njk0LjA4ODM4NzA2NzQ1MTMxMjUwMDcyMyAtPiAtNDYwODYzMzMwNzkwLjkwNzY2NjA2MDI5MDU5MjM4ODA3NiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDcxIGFkZCAtOTU1NjM4Mzk3OTc1MjQwNjg1MDE3OTkyNDM2MTE2MjU3RSswMjAgLTUwODU4MC4xNDg5NTg3NjkxMDQ1MTE3NTE5NzU3MjA0NzBFKzY2MiAtPiAtNS4wODU4MDE0ODk1ODc2OTEwNDUxMTc1MTk3NTcyMDQ3MEUrNjY3IEluZXhhY3QgUm91bmRlZAorY29teDM0NzEgY29tcGFyZSAtOTU1NjM4Mzk3OTc1MjQwNjg1MDE3OTkyNDM2MTE2MjU3RSswMjAgLTUwODU4MC4xNDg5NTg3NjkxMDQ1MTE3NTE5NzU3MjA0NzBFKzY2MiAtPiAxCitkaXZ4MzQ3MSBkaXZpZGUgLTk1NTYzODM5Nzk3NTI0MDY4NTAxNzk5MjQzNjExNjI1N0UrMDIwIC01MDg1ODAuMTQ4OTU4NzY5MTA0NTExNzUxOTc1NzIwNDcwRSs2NjIgLT4gMS44NzkwMzIwNDYyNDAzOTQ3NjQwODE5MTI2NDU2NDU2OEUtNjE1IEluZXhhY3QgUm91bmRlZAorZHZpeDM0NzEgZGl2aWRlaW50IC05NTU2MzgzOTc5NzUyNDA2ODUwMTc5OTI0MzYxMTYyNTdFKzAyMCAtNTA4NTgwLjE0ODk1ODc2OTEwNDUxMTc1MTk3NTcyMDQ3MEUrNjYyIC0+IDAKK211bHgzNDcxIG11bHRpcGx5IC05NTU2MzgzOTc5NzUyNDA2ODUwMTc5OTI0MzYxMTYyNTdFKzAyMCAtNTA4NTgwLjE0ODk1ODc2OTEwNDUxMTc1MTk3NTcyMDQ3MEUrNjYyIC0+IDQuODYwMTg3MTg3OTI5NjczNzg5ODU4Mzg3Mzk4MjAxMDhFKzcyMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDcxIHBvd2VyIC05NTU2MzgzOTc5NzUyNDA2ODUwMTc5OTI0MzYxMTYyNTdFKzAyMCAtNSAtPiAtMS4yNTQ2NzczMDQyMDMwNDE4OTE2MTc2ODQwODQ2MjQxNEUtMjY1IEluZXhhY3QgUm91bmRlZAorcmVteDM0NzEgcmVtYWluZGVyIC05NTU2MzgzOTc5NzUyNDA2ODUwMTc5OTI0MzYxMTYyNTdFKzAyMCAtNTA4NTgwLjE0ODk1ODc2OTEwNDUxMTc1MTk3NTcyMDQ3MEUrNjYyIC0+IC05LjU1NjM4Mzk3OTc1MjQwNjg1MDE3OTkyNDM2MTE2MjU3RSs1Mgorc3VieDM0NzEgc3VidHJhY3QgLTk1NTYzODM5Nzk3NTI0MDY4NTAxNzk5MjQzNjExNjI1N0UrMDIwIC01MDg1ODAuMTQ4OTU4NzY5MTA0NTExNzUxOTc1NzIwNDcwRSs2NjIgLT4gNS4wODU4MDE0ODk1ODc2OTEwNDUxMTc1MTk3NTcyMDQ3MEUrNjY3IEluZXhhY3QgUm91bmRlZAorYWRkeDM0NzIgYWRkIC0xMzYyNDM3OTYwOTgwMjA5ODM4MTQxMTU1ODQ0MDI0MDdFKzc5NiA2NTg5MTA4MDgzLjk5NzUwMzExNjUxNTgxMDMyNDQ3MzkwIC0+IC0xLjM2MjQzNzk2MDk4MDIwOTgzODE0MTE1NTg0NDAyNDA3RSs4MjggSW5leGFjdCBSb3VuZGVkCitjb214MzQ3MiBjb21wYXJlIC0xMzYyNDM3OTYwOTgwMjA5ODM4MTQxMTU1ODQ0MDI0MDdFKzc5NiA2NTg5MTA4MDgzLjk5NzUwMzExNjUxNTgxMDMyNDQ3MzkwIC0+IC0xCitkaXZ4MzQ3MiBkaXZpZGUgLTEzNjI0Mzc5NjA5ODAyMDk4MzgxNDExNTU4NDQwMjQwN0UrNzk2IDY1ODkxMDgwODMuOTk3NTAzMTE2NTE1ODEwMzI0NDczOTAgLT4gLTIuMDY3NzEyMjY2MzgyNTU2MDA2MzQ5MzkzNzEzNjU5MjBFKzgxOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDcyIGRpdmlkZWludCAtMTM2MjQzNzk2MDk4MDIwOTgzODE0MTE1NTg0NDAyNDA3RSs3OTYgNjU4OTEwODA4My45OTc1MDMxMTY1MTU4MTAzMjQ0NzM5MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0NzIgbXVsdGlwbHkgLTEzNjI0Mzc5NjA5ODAyMDk4MzgxNDExNTU4NDQwMjQwN0UrNzk2IDY1ODkxMDgwODMuOTk3NTAzMTE2NTE1ODEwMzI0NDczOTAgLT4gLTguOTc3MjUwOTgyNjM5Nzc1MzU5NjY5MjE2OTYxNDMwMTFFKzgzNyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDcyIHBvd2VyIC0xMzYyNDM3OTYwOTgwMjA5ODM4MTQxMTU1ODQ0MDI0MDdFKzc5NiA3IC0+IC04LjcxMzk5MTg1NTUxNzQyMTk5NzUyODMyMjg2OTg0MDA1RSs1Nzk2IEluZXhhY3QgUm91bmRlZAorcmVteDM0NzIgcmVtYWluZGVyIC0xMzYyNDM3OTYwOTgwMjA5ODM4MTQxMTU1ODQ0MDI0MDdFKzc5NiA2NTg5MTA4MDgzLjk5NzUwMzExNjUxNTgxMDMyNDQ3MzkwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ3MiBzdWJ0cmFjdCAtMTM2MjQzNzk2MDk4MDIwOTgzODE0MTE1NTg0NDAyNDA3RSs3OTYgNjU4OTEwODA4My45OTc1MDMxMTY1MTU4MTAzMjQ0NzM5MCAtPiAtMS4zNjI0Mzc5NjA5ODAyMDk4MzgxNDExNTU4NDQwMjQwN0UrODI4IEluZXhhY3QgUm91bmRlZAorYWRkeDM0NzMgYWRkIC04MDg0OTguNDgyNzE4MzA0NTk4MjEzMDkyOTM3NTQzOTM0RSs1MjEgNDgwMDUuMTQ2NTA5NzkxNDM1NTA5NjMwMTQ4Mzc4ODkwNSAtPiAtOC4wODQ5ODQ4MjcxODMwNDU5ODIxMzA5MjkzNzU0MzkzNEUrNTI2IEluZXhhY3QgUm91bmRlZAorY29teDM0NzMgY29tcGFyZSAtODA4NDk4LjQ4MjcxODMwNDU5ODIxMzA5MjkzNzU0MzkzNEUrNTIxIDQ4MDA1LjE0NjUwOTc5MTQzNTUwOTYzMDE0ODM3ODg5MDUgLT4gLTEKK2RpdngzNDczIGRpdmlkZSAtODA4NDk4LjQ4MjcxODMwNDU5ODIxMzA5MjkzNzU0MzkzNEUrNTIxIDQ4MDA1LjE0NjUwOTc5MTQzNTUwOTYzMDE0ODM3ODg5MDUgLT4gLTEuNjg0MTkxMjYxNzcxMDY0Njg1NjUzOTcwMTcxMDc3MzZFKzUyMiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDczIGRpdmlkZWludCAtODA4NDk4LjQ4MjcxODMwNDU5ODIxMzA5MjkzNzU0MzkzNEUrNTIxIDQ4MDA1LjE0NjUwOTc5MTQzNTUwOTYzMDE0ODM3ODg5MDUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDczIG11bHRpcGx5IC04MDg0OTguNDgyNzE4MzA0NTk4MjEzMDkyOTM3NTQzOTM0RSs1MjEgNDgwMDUuMTQ2NTA5NzkxNDM1NTA5NjMwMTQ4Mzc4ODkwNSAtPiAtMy44ODEyMDg4MTE1ODM2MjkxMjIyMDEzMjY5MTgwMzUzOUUrNTMxIEluZXhhY3QgUm91bmRlZAorcG93eDM0NzMgcG93ZXIgLTgwODQ5OC40ODI3MTgzMDQ1OTgyMTMwOTI5Mzc1NDM5MzRFKzUyMSA0ODAwNSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzQ3MyByZW1haW5kZXIgLTgwODQ5OC40ODI3MTgzMDQ1OTgyMTMwOTI5Mzc1NDM5MzRFKzUyMSA0ODAwNS4xNDY1MDk3OTE0MzU1MDk2MzAxNDgzNzg4OTA1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ3MyBzdWJ0cmFjdCAtODA4NDk4LjQ4MjcxODMwNDU5ODIxMzA5MjkzNzU0MzkzNEUrNTIxIDQ4MDA1LjE0NjUwOTc5MTQzNTUwOTYzMDE0ODM3ODg5MDUgLT4gLTguMDg0OTg0ODI3MTgzMDQ1OTgyMTMwOTI5Mzc1NDM5MzRFKzUyNiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDc0IGFkZCAtODEyLjI2NjM0MDU1NDI4MTMwNTk4NTUyNDgxMzA3NDIxMUUrMzk2IC0zMTk1LjYzMTExNTU5MTE0MDAxNTk0MjU3NDQ4OTcwODEyRSs5ODYgLT4gLTMuMTk1NjMxMTE1NTkxMTQwMDE1OTQyNTc0NDg5NzA4MTJFKzk4OSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDc0IGNvbXBhcmUgLTgxMi4yNjYzNDA1NTQyODEzMDU5ODU1MjQ4MTMwNzQyMTFFKzM5NiAtMzE5NS42MzExMTU1OTExNDAwMTU5NDI1NzQ0ODk3MDgxMkUrOTg2IC0+IDEKK2RpdngzNDc0IGRpdmlkZSAtODEyLjI2NjM0MDU1NDI4MTMwNTk4NTUyNDgxMzA3NDIxMUUrMzk2IC0zMTk1LjYzMTExNTU5MTE0MDAxNTk0MjU3NDQ4OTcwODEyRSs5ODYgLT4gMi41NDE4MDI1NzcyNDc3OTcyMTQ0ODQ4NDc4MTA1NjA0MEUtNTkxIEluZXhhY3QgUm91bmRlZAorZHZpeDM0NzQgZGl2aWRlaW50IC04MTIuMjY2MzQwNTU0MjgxMzA1OTg1NTI0ODEzMDc0MjExRSszOTYgLTMxOTUuNjMxMTE1NTkxMTQwMDE1OTQyNTc0NDg5NzA4MTJFKzk4NiAtPiAwCittdWx4MzQ3NCBtdWx0aXBseSAtODEyLjI2NjM0MDU1NDI4MTMwNTk4NTUyNDgxMzA3NDIxMUUrMzk2IC0zMTk1LjYzMTExNTU5MTE0MDAxNTk0MjU3NDQ4OTcwODEyRSs5ODYgLT4gMi41OTU3MDM1OTIwMjI2MTA4MjUzNzUwNTMzMjMyNTQwNEUrMTM4OCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDc0IHBvd2VyIC04MTIuMjY2MzQwNTU0MjgxMzA1OTg1NTI0ODEzMDc0MjExRSszOTYgLTMgLT4gLTEuODY1OTY5ODgwMzA5MTQ2MTYyMTY3NDE4MDgyMTY0NjlFLTExOTcgSW5leGFjdCBSb3VuZGVkCityZW14MzQ3NCByZW1haW5kZXIgLTgxMi4yNjYzNDA1NTQyODEzMDU5ODU1MjQ4MTMwNzQyMTFFKzM5NiAtMzE5NS42MzExMTU1OTExNDAwMTU5NDI1NzQ0ODk3MDgxMkUrOTg2IC0+IC04LjEyMjY2MzQwNTU0MjgxMzA1OTg1NTI0ODEzMDc0MjExRSszOTgKK3N1YngzNDc0IHN1YnRyYWN0IC04MTIuMjY2MzQwNTU0MjgxMzA1OTg1NTI0ODEzMDc0MjExRSszOTYgLTMxOTUuNjMxMTE1NTkxMTQwMDE1OTQyNTc0NDg5NzA4MTJFKzk4NiAtPiAzLjE5NTYzMTExNTU5MTE0MDAxNTk0MjU3NDQ4OTcwODEyRSs5ODkgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ3NSBhZGQgLTkyOTg4OS43MjA5MDUxODMzOTc2Nzg4NjY2NDgyMTc3OTNFKzEzNCAtMjgwMzAwMTkwNzc0LjA1NzU5NTY3MTA3OTI2NDg0MTM0OSAtPiAtOS4yOTg4OTcyMDkwNTE4MzM5NzY3ODg2NjY0ODIxNzc5M0UrMTM5IEluZXhhY3QgUm91bmRlZAorY29teDM0NzUgY29tcGFyZSAtOTI5ODg5LjcyMDkwNTE4MzM5NzY3ODg2NjY0ODIxNzc5M0UrMTM0IC0yODAzMDAxOTA3NzQuMDU3NTk1NjcxMDc5MjY0ODQxMzQ5IC0+IC0xCitkaXZ4MzQ3NSBkaXZpZGUgLTkyOTg4OS43MjA5MDUxODMzOTc2Nzg4NjY2NDgyMTc3OTNFKzEzNCAtMjgwMzAwMTkwNzc0LjA1NzU5NTY3MTA3OTI2NDg0MTM0OSAtPiAzLjMxNzQ3ODAxNjQ2OTY0Mzk5MzMxNTU2OTcxMDU1MTk3RSsxMjggSW5leGFjdCBSb3VuZGVkCitkdml4MzQ3NSBkaXZpZGVpbnQgLTkyOTg4OS43MjA5MDUxODMzOTc2Nzg4NjY2NDgyMTc3OTNFKzEzNCAtMjgwMzAwMTkwNzc0LjA1NzU5NTY3MTA3OTI2NDg0MTM0OSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0NzUgbXVsdGlwbHkgLTkyOTg4OS43MjA5MDUxODMzOTc2Nzg4NjY2NDgyMTc3OTNFKzEzNCAtMjgwMzAwMTkwNzc0LjA1NzU5NTY3MTA3OTI2NDg0MTM0OSAtPiAyLjYwNjQ4MjY2MTY4NTU4MDc5OTU3MzQ5MDc0NjA5OTIwRSsxNTEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ3NSBwb3dlciAtOTI5ODg5LjcyMDkwNTE4MzM5NzY3ODg2NjY0ODIxNzc5M0UrMTM0IC0zIC0+IC0xLjI0MzY3MTQzMzcwMzAwMTg5NTE4Nzc4NTA1ODMwMTgxRS00MjAgSW5leGFjdCBSb3VuZGVkCityZW14MzQ3NSByZW1haW5kZXIgLTkyOTg4OS43MjA5MDUxODMzOTc2Nzg4NjY2NDgyMTc3OTNFKzEzNCAtMjgwMzAwMTkwNzc0LjA1NzU5NTY3MTA3OTI2NDg0MTM0OSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0NzUgc3VidHJhY3QgLTkyOTg4OS43MjA5MDUxODMzOTc2Nzg4NjY2NDgyMTc3OTNFKzEzNCAtMjgwMzAwMTkwNzc0LjA1NzU5NTY3MTA3OTI2NDg0MTM0OSAtPiAtOS4yOTg4OTcyMDkwNTE4MzM5NzY3ODg2NjY0ODIxNzc5M0UrMTM5IEluZXhhY3QgUm91bmRlZAorYWRkeDM0NzYgYWRkIDgzOTQ2LjAxNTc4MDE5NTM2MzYyNTUwNzg5OTYxODU1NDAgNDkyNjcwMzczLjIzNTM5MTY2NTc1ODcwMTUwMDMxNDQ3MyAtPiA0OTI3NTQzMTkuMjUxMTcxODYxMTIyMzI3MDA4MjE0MDkyIEluZXhhY3QgUm91bmRlZAorY29teDM0NzYgY29tcGFyZSA4Mzk0Ni4wMTU3ODAxOTUzNjM2MjU1MDc4OTk2MTg1NTQwIDQ5MjY3MDM3My4yMzUzOTE2NjU3NTg3MDE1MDAzMTQ0NzMgLT4gLTEKK2RpdngzNDc2IGRpdmlkZSA4Mzk0Ni4wMTU3ODAxOTUzNjM2MjU1MDc4OTk2MTg1NTQwIDQ5MjY3MDM3My4yMzUzOTE2NjU3NTg3MDE1MDAzMTQ0NzMgLT4gMC4wMDAxNzAzODk4MTkxMTc2MzM0ODU2OTU4OTAwNDExODU3ODIgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ3NiBkaXZpZGVpbnQgODM5NDYuMDE1NzgwMTk1MzYzNjI1NTA3ODk5NjE4NTU0MCA0OTI2NzAzNzMuMjM1MzkxNjY1NzU4NzAxNTAwMzE0NDczIC0+IDAKK211bHgzNDc2IG11bHRpcGx5IDgzOTQ2LjAxNTc4MDE5NTM2MzYyNTUwNzg5OTYxODU1NDAgNDkyNjcwMzczLjIzNTM5MTY2NTc1ODcwMTUwMDMxNDQ3MyAtPiA0MTM1NzcxNDkyNjA1Mi45MjgyOTg1NTYwMzgwMDY0NjQ5IEluZXhhY3QgUm91bmRlZAorcG93eDM0NzYgcG93ZXIgODM5NDYuMDE1NzgwMTk1MzYzNjI1NTA3ODk5NjE4NTU0MCA0OTI2NzAzNzMgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzQ3NiByZW1haW5kZXIgODM5NDYuMDE1NzgwMTk1MzYzNjI1NTA3ODk5NjE4NTU0MCA0OTI2NzAzNzMuMjM1MzkxNjY1NzU4NzAxNTAwMzE0NDczIC0+IDgzOTQ2LjAxNTc4MDE5NTM2MzYyNTUwNzg5OTYxODU1NDAKK3N1YngzNDc2IHN1YnRyYWN0IDgzOTQ2LjAxNTc4MDE5NTM2MzYyNTUwNzg5OTYxODU1NDAgNDkyNjcwMzczLjIzNTM5MTY2NTc1ODcwMTUwMDMxNDQ3MyAtPiAtNDkyNTg2NDI3LjIxOTYxMTQ3MDM5NTA3NTk5MjQxNDg1NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDc3IGFkZCA3ODEyNzU4MTEzODE3Ljk5MTM1ODUxODI1MjIzMTIyNTA4IDMwMzc0OTIuMzY3MTYzMDE0NDMzMDk1NzE5MTgwMDIxMjNFLTE1NyAtPiA3ODEyNzU4MTEzODE3Ljk5MTM1ODUxODI1MjIzMTIyNTA4IEluZXhhY3QgUm91bmRlZAorY29teDM0NzcgY29tcGFyZSA3ODEyNzU4MTEzODE3Ljk5MTM1ODUxODI1MjIzMTIyNTA4IDMwMzc0OTIuMzY3MTYzMDE0NDMzMDk1NzE5MTgwMDIxMjNFLTE1NyAtPiAxCitkaXZ4MzQ3NyBkaXZpZGUgNzgxMjc1ODExMzgxNy45OTEzNTg1MTgyNTIyMzEyMjUwOCAzMDM3NDkyLjM2NzE2MzAxNDQzMzA5NTcxOTE4MDAyMTIzRS0xNTcgLT4gMi41NzIxMDc5MDAwMTU5MDE3MTgwOTUxMjg3MTg1NzM4MUUrMTYzIEluZXhhY3QgUm91bmRlZAorZHZpeDM0NzcgZGl2aWRlaW50IDc4MTI3NTgxMTM4MTcuOTkxMzU4NTE4MjUyMjMxMjI1MDggMzAzNzQ5Mi4zNjcxNjMwMTQ0MzMwOTU3MTkxODAwMjEyM0UtMTU3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQ3NyBtdWx0aXBseSA3ODEyNzU4MTEzODE3Ljk5MTM1ODUxODI1MjIzMTIyNTA4IDMwMzc0OTIuMzY3MTYzMDE0NDMzMDk1NzE5MTgwMDIxMjNFLTE1NyAtPiAyLjM3MzExOTMxMzcyMTMwNTgzMTM2MDkxNzE3MDkzOTM1RS0xMzggSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ3NyBwb3dlciA3ODEyNzU4MTEzODE3Ljk5MTM1ODUxODI1MjIzMTIyNTA4IDMgLT4gNC43Njg4NDQyMTgxNjI0Njg5NjA5MDQxNDMxNDkzNDI1M0UrMzggSW5leGFjdCBSb3VuZGVkCityZW14MzQ3NyByZW1haW5kZXIgNzgxMjc1ODExMzgxNy45OTEzNTg1MTgyNTIyMzEyMjUwOCAzMDM3NDkyLjM2NzE2MzAxNDQzMzA5NTcxOTE4MDAyMTIzRS0xNTcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDc3IHN1YnRyYWN0IDc4MTI3NTgxMTM4MTcuOTkxMzU4NTE4MjUyMjMxMjI1MDggMzAzNzQ5Mi4zNjcxNjMwMTQ0MzMwOTU3MTkxODAwMjEyM0UtMTU3IC0+IDc4MTI3NTgxMTM4MTcuOTkxMzU4NTE4MjUyMjMxMjI1MDggSW5leGFjdCBSb3VuZGVkCithZGR4MzQ3OCBhZGQgNDg5MTkxNzQ3LjE0ODY3NDMyNjc1Nzc2NzM1NjYyNjAxNiAwMTEzNjk0Mi4xMTgyMjc3NTgwMDkzMDI3NzY4NDkwNTQ1IC0+IDQ5MDMyODY4OS4yNjY5MDIwODQ3NjcwNzAxMzM0NzUwNzEgSW5leGFjdCBSb3VuZGVkCitjb214MzQ3OCBjb21wYXJlIDQ4OTE5MTc0Ny4xNDg2NzQzMjY3NTc3NjczNTY2MjYwMTYgMDExMzY5NDIuMTE4MjI3NzU4MDA5MzAyNzc2ODQ5MDU0NSAtPiAxCitkaXZ4MzQ3OCBkaXZpZGUgNDg5MTkxNzQ3LjE0ODY3NDMyNjc1Nzc2NzM1NjYyNjAxNiAwMTEzNjk0Mi4xMTgyMjc3NTgwMDkzMDI3NzY4NDkwNTQ1IC0+IDQzMC4yNjk3MDI2NTc1MjUyMjMxMjQxNDgyNTg2NDEzNTggSW5leGFjdCBSb3VuZGVkCitkdml4MzQ3OCBkaXZpZGVpbnQgNDg5MTkxNzQ3LjE0ODY3NDMyNjc1Nzc2NzM1NjYyNjAxNiAwMTEzNjk0Mi4xMTgyMjc3NTgwMDkzMDI3NzY4NDkwNTQ1IC0+IDQzMAorbXVseDM0NzggbXVsdGlwbHkgNDg5MTkxNzQ3LjE0ODY3NDMyNjc1Nzc2NzM1NjYyNjAxNiAwMTEzNjk0Mi4xMTgyMjc3NTgwMDkzMDI3NzY4NDkwNTQ1IC0+IDU1NjE4MjcwMTIyMjc1MS41ODg0NTQxMjk1MTg4MzA1NTAgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ3OCBwb3dlciA0ODkxOTE3NDcuMTQ4Njc0MzI2NzU3NzY3MzU2NjI2MDE2IDExMzY5NDIgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzQ3OCByZW1haW5kZXIgNDg5MTkxNzQ3LjE0ODY3NDMyNjc1Nzc2NzM1NjYyNjAxNiAwMTEzNjk0Mi4xMTgyMjc3NTgwMDkzMDI3NzY4NDkwNTQ1IC0+IDMwNjYzNi4zMTA3MzgzODI3NTc1NzMzMTE1MzI1ODEwCitzdWJ4MzQ3OCBzdWJ0cmFjdCA0ODkxOTE3NDcuMTQ4Njc0MzI2NzU3NzY3MzU2NjI2MDE2IDAxMTM2OTQyLjExODIyNzc1ODAwOTMwMjc3Njg0OTA1NDUgLT4gNDg4MDU0ODA1LjAzMDQ0NjU2ODc0ODQ2NDU3OTc3Njk2MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDc5IGFkZCAtNTk5MzY5NTQwLjM3MzE3NDQ4MjMzNTg2NTU2NzkzNzg1M0UrMjg5IC0zODI4ODM4MzIwNS42NzQ5NDM5NTg4NzA3OTU1NTg1MjA5IC0+IC01Ljk5MzY5NTQwMzczMTc0NDgyMzM1ODY1NTY3OTM3ODUzRSsyOTcgSW5leGFjdCBSb3VuZGVkCitjb214MzQ3OSBjb21wYXJlIC01OTkzNjk1NDAuMzczMTc0NDgyMzM1ODY1NTY3OTM3ODUzRSsyODkgLTM4Mjg4MzgzMjA1LjY3NDk0Mzk1ODg3MDc5NTU1ODUyMDkgLT4gLTEKK2RpdngzNDc5IGRpdmlkZSAtNTk5MzY5NTQwLjM3MzE3NDQ4MjMzNTg2NTU2NzkzNzg1M0UrMjg5IC0zODI4ODM4MzIwNS42NzQ5NDM5NTg4NzA3OTU1NTg1MjA5IC0+IDEuNTY1NDA4MzMwNjUwODk2ODQxMzI2ODgxNDM3Mzc1ODZFKzI4NyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDc5IGRpdmlkZWludCAtNTk5MzY5NTQwLjM3MzE3NDQ4MjMzNTg2NTU2NzkzNzg1M0UrMjg5IC0zODI4ODM4MzIwNS42NzQ5NDM5NTg4NzA3OTU1NTg1MjA5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQ3OSBtdWx0aXBseSAtNTk5MzY5NTQwLjM3MzE3NDQ4MjMzNTg2NTU2NzkzNzg1M0UrMjg5IC0zODI4ODM4MzIwNS42NzQ5NDM5NTg4NzA3OTU1NTg1MjA5IC0+IDIuMjk0ODg5MDY0MzYxNzM2NDEzMjQwOTE2Mzg5NjM3MTVFKzMwOCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDc5IHBvd2VyIC01OTkzNjk1NDAuMzczMTc0NDgyMzM1ODY1NTY3OTM3ODUzRSsyODkgLTQgLT4gNy43NDg1NjU4MDY0NjI5MTM2NjI3MDMyOTE2NTU0MDk1OEUtMTE5MiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDc5IHJlbWFpbmRlciAtNTk5MzY5NTQwLjM3MzE3NDQ4MjMzNTg2NTU2NzkzNzg1M0UrMjg5IC0zODI4ODM4MzIwNS42NzQ5NDM5NTg4NzA3OTU1NTg1MjA5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ3OSBzdWJ0cmFjdCAtNTk5MzY5NTQwLjM3MzE3NDQ4MjMzNTg2NTU2NzkzNzg1M0UrMjg5IC0zODI4ODM4MzIwNS42NzQ5NDM5NTg4NzA3OTU1NTg1MjA5IC0+IC01Ljk5MzY5NTQwMzczMTc0NDgyMzM1ODY1NTY3OTM3ODUzRSsyOTcgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ4MCBhZGQgLTMzNzY4ODM4NzAuODU5NjE2OTIxNDgwMjI1MjE5NjAxMzkgLTY1MjQ3NDg5NDQ5LjczMzQ1ODk3MzExNzE5ODA0MDgyODQgLT4gLTY4NjI0MzczMzIwLjU5MzA3NTg5NDU5NzQyMzI2MDQyOTggSW5leGFjdCBSb3VuZGVkCitjb214MzQ4MCBjb21wYXJlIC0zMzc2ODgzODcwLjg1OTYxNjkyMTQ4MDIyNTIxOTYwMTM5IC02NTI0NzQ4OTQ0OS43MzM0NTg5NzMxMTcxOTgwNDA4Mjg0IC0+IDEKK2RpdngzNDgwIGRpdmlkZSAtMzM3Njg4Mzg3MC44NTk2MTY5MjE0ODAyMjUyMTk2MDEzOSAtNjUyNDc0ODk0NDkuNzMzNDU4OTczMTE3MTk4MDQwODI4NCAtPiAwLjA1MTc1NTAwMDgzMzU3NDc4MTM1OTYzMzI0MDQ2NjQ3MzEgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ4MCBkaXZpZGVpbnQgLTMzNzY4ODM4NzAuODU5NjE2OTIxNDgwMjI1MjE5NjAxMzkgLTY1MjQ3NDg5NDQ5LjczMzQ1ODk3MzExNzE5ODA0MDgyODQgLT4gMAorbXVseDM0ODAgbXVsdGlwbHkgLTMzNzY4ODM4NzAuODU5NjE2OTIxNDgwMjI1MjE5NjAxMzkgLTY1MjQ3NDg5NDQ5LjczMzQ1ODk3MzExNzE5ODA0MDgyODQgLT4gMjIwMzMzMTk0NzM2ODg3OTM5NDIwLjcxOTU3OTkwNjI1NyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDgwIHBvd2VyIC0zMzc2ODgzODcwLjg1OTYxNjkyMTQ4MDIyNTIxOTYwMTM5IC03IC0+IC0xLjk5NzA0MTYzNzE4MzYxMTUzMTI1NzM1NzU2MTc5MjgwRS02NyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDgwIHJlbWFpbmRlciAtMzM3Njg4Mzg3MC44NTk2MTY5MjE0ODAyMjUyMTk2MDEzOSAtNjUyNDc0ODk0NDkuNzMzNDU4OTczMTE3MTk4MDQwODI4NCAtPiAtMzM3Njg4Mzg3MC44NTk2MTY5MjE0ODAyMjUyMTk2MDEzOQorc3VieDM0ODAgc3VidHJhY3QgLTMzNzY4ODM4NzAuODU5NjE2OTIxNDgwMjI1MjE5NjAxMzkgLTY1MjQ3NDg5NDQ5LjczMzQ1ODk3MzExNzE5ODA0MDgyODQgLT4gNjE4NzA2MDU1NzguODczODQyMDUxNjM2OTcyODIxMjI3MCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDgxIGFkZCA1OC42Nzc2NzgwMzcwMDA4MzY0NTkwNjIxNzcyNDIxMDI1IDAxLjU5MjU1MTg4NjY1MjkwNDQ0OTQzMDkyMjk5NzUxNjAgLT4gNjAuMjcwMjI5OTIzNjUzNzQwOTA4NDkzMTAwMjM5NjE4NQorY29teDM0ODEgY29tcGFyZSA1OC42Nzc2NzgwMzcwMDA4MzY0NTkwNjIxNzcyNDIxMDI1IDAxLjU5MjU1MTg4NjY1MjkwNDQ0OTQzMDkyMjk5NzUxNjAgLT4gMQorZGl2eDM0ODEgZGl2aWRlIDU4LjY3NzY3ODAzNzAwMDgzNjQ1OTA2MjE3NzI0MjEwMjUgMDEuNTkyNTUxODg2NjUyOTA0NDQ5NDMwOTIyOTk3NTE2MCAtPiAzNi44NDUwNjUxNjE2Mjg2MDQ4NDM3NDk4NTc2NjEzNjIyIEluZXhhY3QgUm91bmRlZAorZHZpeDM0ODEgZGl2aWRlaW50IDU4LjY3NzY3ODAzNzAwMDgzNjQ1OTA2MjE3NzI0MjEwMjUgMDEuNTkyNTUxODg2NjUyOTA0NDQ5NDMwOTIyOTk3NTE2MCAtPiAzNgorbXVseDM0ODEgbXVsdGlwbHkgNTguNjc3Njc4MDM3MDAwODM2NDU5MDYyMTc3MjQyMTAyNSAwMS41OTI1NTE4ODY2NTI5MDQ0NDk0MzA5MjI5OTc1MTYwIC0+IDkzLjQ0NzI0Njg2MjIzNzM3Njk1OTA5MDAyNTgwNjAwMjkgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ4MSBwb3dlciA1OC42Nzc2NzgwMzcwMDA4MzY0NTkwNjIxNzcyNDIxMDI1IDIgLT4gMzQ0My4wNjk4OTk4MTM5MzAzMzYzMjAwODMxMzUwNTIzMCBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDgxIHJlbWFpbmRlciA1OC42Nzc2NzgwMzcwMDA4MzY0NTkwNjIxNzcyNDIxMDI1IDAxLjU5MjU1MTg4NjY1MjkwNDQ0OTQzMDkyMjk5NzUxNjAgLT4gMS4zNDU4MTAxMTc0OTYyNzYyNzk1NDg5NDkzMzE1MjY1CitzdWJ4MzQ4MSBzdWJ0cmFjdCA1OC42Nzc2NzgwMzcwMDA4MzY0NTkwNjIxNzcyNDIxMDI1IDAxLjU5MjU1MTg4NjY1MjkwNDQ0OTQzMDkyMjk5NzUxNjAgLT4gNTcuMDg1MTI2MTUwMzQ3OTMyMDA5NjMxMjU0MjQ0NTg2NQorYWRkeDM0ODIgYWRkIDQwOTk2MTYzMzkuOTYyNDk0OTk1NTI4MDg1NzU3MTc1NzkgMjkwLjc5NTE4NzM2MTA3MjQ4OTgxNjc5MTUyNTEzOTg5NSAtPiA0MDk5NjE2NjMwLjc1NzY4MjM1NjYwMDU3NTU3Mzk2NzMyIEluZXhhY3QgUm91bmRlZAorY29teDM0ODIgY29tcGFyZSA0MDk5NjE2MzM5Ljk2MjQ5NDk5NTUyODA4NTc1NzE3NTc5IDI5MC43OTUxODczNjEwNzI0ODk4MTY3OTE1MjUxMzk4OTUgLT4gMQorZGl2eDM0ODIgZGl2aWRlIDQwOTk2MTYzMzkuOTYyNDk0OTk1NTI4MDg1NzU3MTc1NzkgMjkwLjc5NTE4NzM2MTA3MjQ4OTgxNjc5MTUyNTEzOTg5NSAtPiAxNDA5Nzk1MS4xMjg5OTIwNzg4MTM0MjA5MDAyMzkwODM0IEluZXhhY3QgUm91bmRlZAorZHZpeDM0ODIgZGl2aWRlaW50IDQwOTk2MTYzMzkuOTYyNDk0OTk1NTI4MDg1NzU3MTc1NzkgMjkwLjc5NTE4NzM2MTA3MjQ4OTgxNjc5MTUyNTEzOTg5NSAtPiAxNDA5Nzk1MQorbXVseDM0ODIgbXVsdGlwbHkgNDA5OTYxNjMzOS45NjI0OTQ5OTU1MjgwODU3NTcxNzU3OSAyOTAuNzk1MTg3MzYxMDcyNDg5ODE2NzkxNTI1MTM5ODk1IC0+IDExOTIxNDg3MDE2ODcuOTA3OTg0Mzc1MDEzOTc5MDAxNzQgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ4MiBwb3dlciA0MDk5NjE2MzM5Ljk2MjQ5NDk5NTUyODA4NTc1NzE3NTc5IDI5MSAtPiAyLjAzMzY0NzU3ODc3ODAwNDk3NDA5NzY1OTc5ODc3MjU4RSsyNzk3IEluZXhhY3QgUm91bmRlZAorcmVteDM0ODIgcmVtYWluZGVyIDQwOTk2MTYzMzkuOTYyNDk0OTk1NTI4MDg1NzU3MTc1NzkgMjkwLjc5NTE4NzM2MTA3MjQ4OTgxNjc5MTUyNTEzOTg5NSAtPiAzNy41MTAyNzU3MjY2NDI5NTk4NTg1MzgyODIxNDQ4NTUKK3N1YngzNDgyIHN1YnRyYWN0IDQwOTk2MTYzMzkuOTYyNDk0OTk1NTI4MDg1NzU3MTc1NzkgMjkwLjc5NTE4NzM2MTA3MjQ4OTgxNjc5MTUyNTEzOTg5NSAtPiA0MDk5NjE2MDQ5LjE2NzMwNzYzNDQ1NTU5NTk0MDM4NDI2IEluZXhhY3QgUm91bmRlZAorYWRkeDM0ODMgYWRkIDg1ODcwNzc3LjIyODI4MzMxNDE3MDk5NzA3MTM3MzkxMDggLTIxNDAzOTI4NjExNTMuNjk0MDEzNDYzOTg0NzgxMTM3MTUgLT4gLTIxNDAzMDY5OTAzNzYuNDY1NzMwMTQ5ODEzNzg0MDY1NzggSW5leGFjdCBSb3VuZGVkCitjb214MzQ4MyBjb21wYXJlIDg1ODcwNzc3LjIyODI4MzMxNDE3MDk5NzA3MTM3MzkxMDggLTIxNDAzOTI4NjExNTMuNjk0MDEzNDYzOTg0NzgxMTM3MTUgLT4gMQorZGl2eDM0ODMgZGl2aWRlIDg1ODcwNzc3LjIyODI4MzMxNDE3MDk5NzA3MTM3MzkxMDggLTIxNDAzOTI4NjExNTMuNjk0MDEzNDYzOTg0NzgxMTM3MTUgLT4gLTAuMDAwMDQwMTE5MTY2MzM5Mzk3MTg1MzA5Mjc0ODI2MzIzMzEyOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDgzIGRpdmlkZWludCA4NTg3MDc3Ny4yMjgyODMzMTQxNzA5OTcwNzEzNzM5MTA4IC0yMTQwMzkyODYxMTUzLjY5NDAxMzQ2Mzk4NDc4MTEzNzE1IC0+IC0wCittdWx4MzQ4MyBtdWx0aXBseSA4NTg3MDc3Ny4yMjgyODMzMTQxNzA5OTcwNzEzNzM5MTA4IC0yMTQwMzkyODYxMTUzLjY5NDAxMzQ2Mzk4NDc4MTEzNzE1IC0+IC0xODM3OTcxOTg1NjExMzY3OTczMjguNTA4ODc4MjU0ODQ4IEluZXhhY3QgUm91bmRlZAorcG93eDM0ODMgcG93ZXIgODU4NzA3NzcuMjI4MjgzMzE0MTcwOTk3MDcxMzczOTEwOCAtMiAtPiAxLjM1NjE1NDYzNDQ4NzA3NTczNDI0NTc4Nzg1OTczMjY5RS0xNiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDgzIHJlbWFpbmRlciA4NTg3MDc3Ny4yMjgyODMzMTQxNzA5OTcwNzEzNzM5MTA4IC0yMTQwMzkyODYxMTUzLjY5NDAxMzQ2Mzk4NDc4MTEzNzE1IC0+IDg1ODcwNzc3LjIyODI4MzMxNDE3MDk5NzA3MTM3MzkxMDgKK3N1YngzNDgzIHN1YnRyYWN0IDg1ODcwNzc3LjIyODI4MzMxNDE3MDk5NzA3MTM3MzkxMDggLTIxNDAzOTI4NjExNTMuNjk0MDEzNDYzOTg0NzgxMTM3MTUgLT4gMjE0MDQ3ODczMTkzMC45MjIyOTY3NzgxNTU3NzgyMDg1MiBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDg0IGFkZCAyMDkwMC45NjkzNzYxNTU1MTY1NzQyMDEwMzM5OTI5Nzc5IC0zOC43NTQ2MTQ3NjQ5NTIzNzkzNDYzMjYwOTQwMjg5NTg1IC0+IDIwODYyLjIxNDc2MTM5MDU2NDE5NDg1NDcwNzg5ODk0ODkgSW5leGFjdCBSb3VuZGVkCitjb214MzQ4NCBjb21wYXJlIDIwOTAwLjk2OTM3NjE1NTUxNjU3NDIwMTAzMzk5Mjk3NzkgLTM4Ljc1NDYxNDc2NDk1MjM3OTM0NjMyNjA5NDAyODk1ODUgLT4gMQorZGl2eDM0ODQgZGl2aWRlIDIwOTAwLjk2OTM3NjE1NTUxNjU3NDIwMTAzMzk5Mjk3NzkgLTM4Ljc1NDYxNDc2NDk1MjM3OTM0NjMyNjA5NDAyODk1ODUgLT4gLTUzOS4zMTU2MjczODgzODY0MzAxODg2Mjc0MTI2Mzk3NjcgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ4NCBkaXZpZGVpbnQgMjA5MDAuOTY5Mzc2MTU1NTE2NTc0MjAxMDMzOTkyOTc3OSAtMzguNzU0NjE0NzY0OTUyMzc5MzQ2MzI2MDk0MDI4OTU4NSAtPiAtNTM5CittdWx4MzQ4NCBtdWx0aXBseSAyMDkwMC45NjkzNzYxNTU1MTY1NzQyMDEwMzM5OTI5Nzc5IC0zOC43NTQ2MTQ3NjQ5NTIzNzkzNDYzMjYwOTQwMjg5NTg1IC0+IC04MTAwMDkuMDE2Mzg2OTc0MTAzNzM4NjIyNzkzNjcwNTY2IEluZXhhY3QgUm91bmRlZAorcG93eDM0ODQgcG93ZXIgMjA5MDAuOTY5Mzc2MTU1NTE2NTc0MjAxMDMzOTkyOTc3OSAtMzkgLT4gMy4yNjIxOTAxNDcwMTUyNjMzNTI5NjA0NDQzOTk4OTY2NUUtMTY5IEluZXhhY3QgUm91bmRlZAorcmVteDM0ODQgcmVtYWluZGVyIDIwOTAwLjk2OTM3NjE1NTUxNjU3NDIwMTAzMzk5Mjk3NzkgLTM4Ljc1NDYxNDc2NDk1MjM3OTM0NjMyNjA5NDAyODk1ODUgLT4gMTIuMjMyMDE3ODQ2MTg0MTA2NTMxMjY5MzExMzY5MjY4NQorc3VieDM0ODQgc3VidHJhY3QgMjA5MDAuOTY5Mzc2MTU1NTE2NTc0MjAxMDMzOTkyOTc3OSAtMzguNzU0NjE0NzY0OTUyMzc5MzQ2MzI2MDk0MDI4OTU4NSAtPiAyMDkzOS43MjM5OTA5MjA0Njg5NTM1NDczNjAwODcwMDY5IEluZXhhY3QgUm91bmRlZAorYWRkeDM0ODUgYWRkIDQ0OC44Mjc1OTYxNTU1ODc5MTA5NDc1MTExNzAzMTk0NTYgMzc5MTMwMTUzLjM4Mjc5NDA0MjY1Mjk3NDU5NjI4NjA2MiAtPiAzNzkxMzA2MDIuMjEwMzkwMTk4MjQwODg1NTQzNzk3MjMyIEluZXhhY3QgUm91bmRlZAorY29teDM0ODUgY29tcGFyZSA0NDguODI3NTk2MTU1NTg3OTEwOTQ3NTExMTcwMzE5NDU2IDM3OTEzMDE1My4zODI3OTQwNDI2NTI5NzQ1OTYyODYwNjIgLT4gLTEKK2RpdngzNDg1IGRpdmlkZSA0NDguODI3NTk2MTU1NTg3OTEwOTQ3NTExMTcwMzE5NDU2IDM3OTEzMDE1My4zODI3OTQwNDI2NTI5NzQ1OTYyODYwNjIgLT4gMC4wMDAwMDExODM4MzUxMzQ1ODYxNTA2MTM5NDE0MDg5NTU5Njk3OSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDg1IGRpdmlkZWludCA0NDguODI3NTk2MTU1NTg3OTEwOTQ3NTExMTcwMzE5NDU2IDM3OTEzMDE1My4zODI3OTQwNDI2NTI5NzQ1OTYyODYwNjIgLT4gMAorbXVseDM0ODUgbXVsdGlwbHkgNDQ4LjgyNzU5NjE1NTU4NzkxMDk0NzUxMTE3MDMxOTQ1NiAzNzkxMzAxNTMuMzgyNzk0MDQyNjUyOTc0NTk2Mjg2MDYyIC0+IDE3MDE2NDA3NTM3Mi44OTg3ODY0NjkwOTQ0NjA2OTIwOTcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ4NSBwb3dlciA0NDguODI3NTk2MTU1NTg3OTEwOTQ3NTExMTcwMzE5NDU2IDM3OTEzMDE1MyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDg1IHJlbWFpbmRlciA0NDguODI3NTk2MTU1NTg3OTEwOTQ3NTExMTcwMzE5NDU2IDM3OTEzMDE1My4zODI3OTQwNDI2NTI5NzQ1OTYyODYwNjIgLT4gNDQ4LjgyNzU5NjE1NTU4NzkxMDk0NzUxMTE3MDMxOTQ1Ngorc3VieDM0ODUgc3VidHJhY3QgNDQ4LjgyNzU5NjE1NTU4NzkxMDk0NzUxMTE3MDMxOTQ1NiAzNzkxMzAxNTMuMzgyNzk0MDQyNjUyOTc0NTk2Mjg2MDYyIC0+IC0zNzkxMjk3MDQuNTU1MTk3ODg3MDY1MDYzNjQ4Nzc0ODkyIEluZXhhY3QgUm91bmRlZAorYWRkeDM0ODYgYWRkIDk4LjQxMzQ4MDc5MjEwMDI4MTczNTcwMDAxNDA0ODIwMzkgMzQwNDcyNTU0My43NzAzMjk0NTQ0NDY1NDM1MTU0Njc3OSAtPiAzNDA0NzI1NjQyLjE4MzgxMDI0NjU0NjgyNTI1MTE2NzgwIEluZXhhY3QgUm91bmRlZAorY29teDM0ODYgY29tcGFyZSA5OC40MTM0ODA3OTIxMDAyODE3MzU3MDAwMTQwNDgyMDM5IDM0MDQ3MjU1NDMuNzcwMzI5NDU0NDQ2NTQzNTE1NDY3NzkgLT4gLTEKK2RpdngzNDg2IGRpdmlkZSA5OC40MTM0ODA3OTIxMDAyODE3MzU3MDAwMTQwNDgyMDM5IDM0MDQ3MjU1NDMuNzcwMzI5NDU0NDQ2NTQzNTE1NDY3NzkgLT4gMi44OTA0OTY3MzgzMzk3MDg2MzQyMDIwMTk3OTI5MTUyM0UtOCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDg2IGRpdmlkZWludCA5OC40MTM0ODA3OTIxMDAyODE3MzU3MDAwMTQwNDgyMDM5IDM0MDQ3MjU1NDMuNzcwMzI5NDU0NDQ2NTQzNTE1NDY3NzkgLT4gMAorbXVseDM0ODYgbXVsdGlwbHkgOTguNDEzNDgwNzkyMTAwMjgxNzM1NzAwMDE0MDQ4MjAzOSAzNDA0NzI1NTQzLjc3MDMyOTQ1NDQ0NjU0MzUxNTQ2Nzc5IC0+IDMzNTA3MDg5MTkwNC4yMTQ1MDQ4MTE3OTgyMTIwNDA0MTMgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ4NiBwb3dlciA5OC40MTM0ODA3OTIxMDAyODE3MzU3MDAwMTQwNDgyMDM5IDMgLT4gOTUzMTU1LjU0MzM4NDczOTY2Nzk2NTA1NTgzOTg5NDY4MiBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDg2IHJlbWFpbmRlciA5OC40MTM0ODA3OTIxMDAyODE3MzU3MDAwMTQwNDgyMDM5IDM0MDQ3MjU1NDMuNzcwMzI5NDU0NDQ2NTQzNTE1NDY3NzkgLT4gOTguNDEzNDgwNzkyMTAwMjgxNzM1NzAwMDE0MDQ4MjAzOQorc3VieDM0ODYgc3VidHJhY3QgOTguNDEzNDgwNzkyMTAwMjgxNzM1NzAwMDE0MDQ4MjAzOSAzNDA0NzI1NTQzLjc3MDMyOTQ1NDQ0NjU0MzUxNTQ2Nzc5IC0+IC0zNDA0NzI1NDQ1LjM1Njg0ODY2MjM0NjI2MTc3OTc2Nzc4IEluZXhhY3QgUm91bmRlZAorYWRkeDM0ODcgYWRkIDU0NTc0NjQzMy42NDkzNTk3MzQxMzY0NzY3MTgxNzYzMzBFLTc4NyAtNTE0OTk1NzA5OTcwOS4xMjgzMDA3MjgwMjA0MzU2MDY1MEUtNDM3IC0+IC01LjE0OTk1NzA5OTcwOTEyODMwMDcyODAyMDQzNTYwNjUwRS00MjUgSW5leGFjdCBSb3VuZGVkCitjb214MzQ4NyBjb21wYXJlIDU0NTc0NjQzMy42NDkzNTk3MzQxMzY0NzY3MTgxNzYzMzBFLTc4NyAtNTE0OTk1NzA5OTcwOS4xMjgzMDA3MjgwMjA0MzU2MDY1MEUtNDM3IC0+IDEKK2RpdngzNDg3IGRpdmlkZSA1NDU3NDY0MzMuNjQ5MzU5NzM0MTM2NDc2NzE4MTc2MzMwRS03ODcgLTUxNDk5NTcwOTk3MDkuMTI4MzAwNzI4MDIwNDM1NjA2NTBFLTQzNyAtPiAtMS4wNTk3MTA2NDA0NjM3NTAxMTA4Njg1MDcyMjc1MjYxNEUtMzU0IEluZXhhY3QgUm91bmRlZAorZHZpeDM0ODcgZGl2aWRlaW50IDU0NTc0NjQzMy42NDkzNTk3MzQxMzY0NzY3MTgxNzYzMzBFLTc4NyAtNTE0OTk1NzA5OTcwOS4xMjgzMDA3MjgwMjA0MzU2MDY1MEUtNDM3IC0+IC0wCittdWx4MzQ4NyBtdWx0aXBseSA1NDU3NDY0MzMuNjQ5MzU5NzM0MTM2NDc2NzE4MTc2MzMwRS03ODcgLTUxNDk5NTcwOTk3MDkuMTI4MzAwNzI4MDIwNDM1NjA2NTBFLTQzNyAtPiAtMi44MTA1NzA3MjA2MTM0NTY4ODA3NDMwNDg3MzAzMzMxN0UtMTIwMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDg3IHBvd2VyIDU0NTc0NjQzMy42NDkzNTk3MzQxMzY0NzY3MTgxNzYzMzBFLTc4NyAtNSAtPiAyLjA2NTU5NjQwMDkyNjY3MTY2OTc2MTg2ODAxMzQ4NjYyRSszODkxIEluZXhhY3QgUm91bmRlZAorcmVteDM0ODcgcmVtYWluZGVyIDU0NTc0NjQzMy42NDkzNTk3MzQxMzY0NzY3MTgxNzYzMzBFLTc4NyAtNTE0OTk1NzA5OTcwOS4xMjgzMDA3MjgwMjA0MzU2MDY1MEUtNDM3IC0+IDUuNDU3NDY0MzM2NDkzNTk3MzQxMzY0NzY3MTgxNzYzMzBFLTc3OQorc3VieDM0ODcgc3VidHJhY3QgNTQ1NzQ2NDMzLjY0OTM1OTczNDEzNjQ3NjcxODE3NjMzMEUtNzg3IC01MTQ5OTU3MDk5NzA5LjEyODMwMDcyODAyMDQzNTYwNjUwRS00MzcgLT4gNS4xNDk5NTcwOTk3MDkxMjgzMDA3MjgwMjA0MzU2MDY1MEUtNDI1IEluZXhhY3QgUm91bmRlZAorYWRkeDM0ODggYWRkIDc0MTMwNDUxMzU0Ny4yNzM4MjA1MjU4MDE2MDgyMzE3MzcgMDM5Ni4yMjgyMzEyODI3MjU4NDkyODAxOTMyMzE4NjM1NUUtODMwIC0+IDc0MTMwNDUxMzU0Ny4yNzM4MjA1MjU4MDE2MDgyMzE3MzcgSW5leGFjdCBSb3VuZGVkCitjb214MzQ4OCBjb21wYXJlIDc0MTMwNDUxMzU0Ny4yNzM4MjA1MjU4MDE2MDgyMzE3MzcgMDM5Ni4yMjgyMzEyODI3MjU4NDkyODAxOTMyMzE4NjM1NUUtODMwIC0+IDEKK2RpdngzNDg4IGRpdmlkZSA3NDEzMDQ1MTM1NDcuMjczODIwNTI1ODAxNjA4MjMxNzM3IDAzOTYuMjI4MjMxMjgyNzI1ODQ5MjgwMTkzMjMxODYzNTVFLTgzMCAtPiAxLjg3MDkwMjgxNTY1MTAxNjEyNjIzMzk4MTc0NzI3NjUzRSs4MzkgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ4OCBkaXZpZGVpbnQgNzQxMzA0NTEzNTQ3LjI3MzgyMDUyNTgwMTYwODIzMTczNyAwMzk2LjIyODIzMTI4MjcyNTg0OTI4MDE5MzIzMTg2MzU1RS04MzAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDg4IG11bHRpcGx5IDc0MTMwNDUxMzU0Ny4yNzM4MjA1MjU4MDE2MDgyMzE3MzcgMDM5Ni4yMjgyMzEyODI3MjU4NDkyODAxOTMyMzE4NjM1NUUtODMwIC0+IDIuOTM3MjU3NzYyNDQ3Mzc3ODg5NDc0NDMzNjEwNzYwOTVFLTgxNiBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDg4IHBvd2VyIDc0MTMwNDUxMzU0Ny4yNzM4MjA1MjU4MDE2MDgyMzE3MzcgNCAtPiAzLjAxOTg1ODM4NjUyODkyMDczOTAzMTk0ODQ2NjY4NzEyRSs0NyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDg4IHJlbWFpbmRlciA3NDEzMDQ1MTM1NDcuMjczODIwNTI1ODAxNjA4MjMxNzM3IDAzOTYuMjI4MjMxMjgyNzI1ODQ5MjgwMTkzMjMxODYzNTVFLTgzMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0ODggc3VidHJhY3QgNzQxMzA0NTEzNTQ3LjI3MzgyMDUyNTgwMTYwODIzMTczNyAwMzk2LjIyODIzMTI4MjcyNTg0OTI4MDE5MzIzMTg2MzU1RS04MzAgLT4gNzQxMzA0NTEzNTQ3LjI3MzgyMDUyNTgwMTYwODIzMTczNyBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDg5IGFkZCAtNzA2LjE0NTAwNTA5NDI5MjMxNTYxMzkwNzI1NDI0MDU1MyA0NzM5LjgyNDg2MTk1NzM5NzU4MzA4NzM1OTQ2MzMyMjM0IC0+IDQwMzMuNjc5ODU2ODYzMTA1MjY3NDczNDUyMjA5MDgxNzkgSW5leGFjdCBSb3VuZGVkCitjb214MzQ4OSBjb21wYXJlIC03MDYuMTQ1MDA1MDk0MjkyMzE1NjEzOTA3MjU0MjQwNTUzIDQ3MzkuODI0ODYxOTU3Mzk3NTgzMDg3MzU5NDYzMzIyMzQgLT4gLTEKK2RpdngzNDg5IGRpdmlkZSAtNzA2LjE0NTAwNTA5NDI5MjMxNTYxMzkwNzI1NDI0MDU1MyA0NzM5LjgyNDg2MTk1NzM5NzU4MzA4NzM1OTQ2MzMyMjM0IC0+IC0wLjE0ODk4MTI0NDE3MjUyNzY3MTkwNzUzNDExNzc3MTYyNiBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDg5IGRpdmlkZWludCAtNzA2LjE0NTAwNTA5NDI5MjMxNTYxMzkwNzI1NDI0MDU1MyA0NzM5LjgyNDg2MTk1NzM5NzU4MzA4NzM1OTQ2MzMyMjM0IC0+IC0wCittdWx4MzQ4OSBtdWx0aXBseSAtNzA2LjE0NTAwNTA5NDI5MjMxNTYxMzkwNzI1NDI0MDU1MyA0NzM5LjgyNDg2MTk1NzM5NzU4MzA4NzM1OTQ2MzMyMjM0IC0+IC0zMzQ3MDAzLjY1MTI5Mjk1OTg4NzkzNDU0MjY3OTczNDY0IEluZXhhY3QgUm91bmRlZAorcG93eDM0ODkgcG93ZXIgLTcwNi4xNDUwMDUwOTQyOTIzMTU2MTM5MDcyNTQyNDA1NTMgNDc0MCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDg5IHJlbWFpbmRlciAtNzA2LjE0NTAwNTA5NDI5MjMxNTYxMzkwNzI1NDI0MDU1MyA0NzM5LjgyNDg2MTk1NzM5NzU4MzA4NzM1OTQ2MzMyMjM0IC0+IC03MDYuMTQ1MDA1MDk0MjkyMzE1NjEzOTA3MjU0MjQwNTUzCitzdWJ4MzQ4OSBzdWJ0cmFjdCAtNzA2LjE0NTAwNTA5NDI5MjMxNTYxMzkwNzI1NDI0MDU1MyA0NzM5LjgyNDg2MTk1NzM5NzU4MzA4NzM1OTQ2MzMyMjM0IC0+IC01NDQ1Ljk2OTg2NzA1MTY4OTg5ODcwMTI2NjcxNzU2Mjg5IEluZXhhY3QgUm91bmRlZAorYWRkeDM0OTAgYWRkIC03Njk5MjU3ODYuODIzMDk5MDgzMjI4Nzk1MTg3OTc1ODkzIC0zMTIwMS45OTgwNDY5NzYwMjM5ODcwMDY3ODIwNTk0NzkwIC0+IC03Njk5NTY5ODguODIxMTQ2MDU5MjUyNzgyMTk0NzU3OTUyIEluZXhhY3QgUm91bmRlZAorY29teDM0OTAgY29tcGFyZSAtNzY5OTI1Nzg2LjgyMzA5OTA4MzIyODc5NTE4Nzk3NTg5MyAtMzEyMDEuOTk4MDQ2OTc2MDIzOTg3MDA2NzgyMDU5NDc5MCAtPiAtMQorZGl2eDM0OTAgZGl2aWRlIC03Njk5MjU3ODYuODIzMDk5MDgzMjI4Nzk1MTg3OTc1ODkzIC0zMTIwMS45OTgwNDY5NzYwMjM5ODcwMDY3ODIwNTk0NzkwIC0+IDI0Njc1LjUyODMzMTk5Nzg2OTg5MzIyOTIwMjg2NTA4MDMgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ5MCBkaXZpZGVpbnQgLTc2OTkyNTc4Ni44MjMwOTkwODMyMjg3OTUxODc5NzU4OTMgLTMxMjAxLjk5ODA0Njk3NjAyMzk4NzAwNjc4MjA1OTQ3OTAgLT4gMjQ2NzUKK211bHgzNDkwIG11bHRpcGx5IC03Njk5MjU3ODYuODIzMDk5MDgzMjI4Nzk1MTg3OTc1ODkzIC0zMTIwMS45OTgwNDY5NzYwMjM5ODcwMDY3ODIwNTk0NzkwIC0+IDI0MDIzMjIyODk2NzcwLjgxNjE3ODcyMzY3MzczOTU0NzcgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ5MCBwb3dlciAtNzY5OTI1Nzg2LjgyMzA5OTA4MzIyODc5NTE4Nzk3NTg5MyAtMzEyMDIgLT4gMEUtMTAwMzEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcmVteDM0OTAgcmVtYWluZGVyIC03Njk5MjU3ODYuODIzMDk5MDgzMjI4Nzk1MTg3OTc1ODkzIC0zMTIwMS45OTgwNDY5NzYwMjM5ODcwMDY3ODIwNTk0NzkwIC0+IC0xNjQ4NS4wMTM5NjU2OTEzNDk0MDI4NDA2NTgyNDg2NzUwCitzdWJ4MzQ5MCBzdWJ0cmFjdCAtNzY5OTI1Nzg2LjgyMzA5OTA4MzIyODc5NTE4Nzk3NTg5MyAtMzEyMDEuOTk4MDQ2OTc2MDIzOTg3MDA2NzgyMDU5NDc5MCAtPiAtNzY5ODk0NTg0LjgyNTA1MjEwNzIwNDgwODE4MTE5MzgzNCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDkxIGFkZCA4NDQzODYxMDU0NjA0OS43MjU2NTA3NDE5Mjg5NjkyODU3RSs5MDYgMDUyNjA0MjQwNzY2NzM2NDYxODk4ODQ0MTExNzkwMzExIC0+IDguNDQzODYxMDU0NjA0OTcyNTY1MDc0MTkyODk2OTI4NTdFKzkxOSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDkxIGNvbXBhcmUgODQ0Mzg2MTA1NDYwNDkuNzI1NjUwNzQxOTI4OTY5Mjg1N0UrOTA2IDA1MjYwNDI0MDc2NjczNjQ2MTg5ODg0NDExMTc5MDMxMSAtPiAxCitkaXZ4MzQ5MSBkaXZpZGUgODQ0Mzg2MTA1NDYwNDkuNzI1NjUwNzQxOTI4OTY5Mjg1N0UrOTA2IDA1MjYwNDI0MDc2NjczNjQ2MTg5ODg0NDExMTc5MDMxMSAtPiAxLjYwNTE2NzM2NTEyNzAxOTc4Njk1NTU5MDAzMzQxOTIyRSs4ODggSW5leGFjdCBSb3VuZGVkCitkdml4MzQ5MSBkaXZpZGVpbnQgODQ0Mzg2MTA1NDYwNDkuNzI1NjUwNzQxOTI4OTY5Mjg1N0UrOTA2IDA1MjYwNDI0MDc2NjczNjQ2MTg5ODg0NDExMTc5MDMxMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0OTEgbXVsdGlwbHkgODQ0Mzg2MTA1NDYwNDkuNzI1NjUwNzQxOTI4OTY5Mjg1N0UrOTA2IDA1MjYwNDI0MDc2NjczNjQ2MTg5ODg0NDExMTc5MDMxMSAtPiA0LjQ0MTgyODk5OTE3MzA5MjMxNzc5ODM3NjY4MjEwNjEwRSs5NTEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ5MSBwb3dlciA4NDQzODYxMDU0NjA0OS43MjU2NTA3NDE5Mjg5NjkyODU3RSs5MDYgNSAtPiA0LjI5MjQ1MTQ0NzE5Njg5MjgzMjQ3MzQyODY2OTg4MjEzRSs0NTk5IEluZXhhY3QgUm91bmRlZAorcmVteDM0OTEgcmVtYWluZGVyIDg0NDM4NjEwNTQ2MDQ5LjcyNTY1MDc0MTkyODk2OTI4NTdFKzkwNiAwNTI2MDQyNDA3NjY3MzY0NjE4OTg4NDQxMTE3OTAzMTEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDkxIHN1YnRyYWN0IDg0NDM4NjEwNTQ2MDQ5LjcyNTY1MDc0MTkyODk2OTI4NTdFKzkwNiAwNTI2MDQyNDA3NjY3MzY0NjE4OTg4NDQxMTE3OTAzMTEgLT4gOC40NDM4NjEwNTQ2MDQ5NzI1NjUwNzQxOTI4OTY5Mjg1N0UrOTE5IEluZXhhY3QgUm91bmRlZAorYWRkeDM0OTIgYWRkIDU0OTc2MC45MTEzMDQ3MjU3OTUxNjQ1ODk2MTkyODY1MTQgMTY1LjE2MDA4OTYxNTYwNDkyNDIwNzc1NDg4Mzk1MzQ4NCAtPiA1NDk5MjYuMDcxMzk0MzQxNDAwMDg4Nzk3Mzc0MTcwNDY3IEluZXhhY3QgUm91bmRlZAorY29teDM0OTIgY29tcGFyZSA1NDk3NjAuOTExMzA0NzI1Nzk1MTY0NTg5NjE5Mjg2NTE0IDE2NS4xNjAwODk2MTU2MDQ5MjQyMDc3NTQ4ODM5NTM0ODQgLT4gMQorZGl2eDM0OTIgZGl2aWRlIDU0OTc2MC45MTEzMDQ3MjU3OTUxNjQ1ODk2MTkyODY1MTQgMTY1LjE2MDA4OTYxNTYwNDkyNDIwNzc1NDg4Mzk1MzQ4NCAtPiAzMzI4LjY1NDcxNjY3MDYyMTA3NTk4Mzk1NzE0MzQ4MDg5IEluZXhhY3QgUm91bmRlZAorZHZpeDM0OTIgZGl2aWRlaW50IDU0OTc2MC45MTEzMDQ3MjU3OTUxNjQ1ODk2MTkyODY1MTQgMTY1LjE2MDA4OTYxNTYwNDkyNDIwNzc1NDg4Mzk1MzQ4NCAtPiAzMzI4CittdWx4MzQ5MiBtdWx0aXBseSA1NDk3NjAuOTExMzA0NzI1Nzk1MTY0NTg5NjE5Mjg2NTE0IDE2NS4xNjAwODk2MTU2MDQ5MjQyMDc3NTQ4ODM5NTM0ODQgLT4gOTA3OTg1NjEuMzc4MjQ1MTQyNTg2MTExMzY5NDczMjQ4NCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDkyIHBvd2VyIDU0OTc2MC45MTEzMDQ3MjU3OTUxNjQ1ODk2MTkyODY1MTQgMTY1IC0+IDEuMzQ0ODg5MjU0NDIzODY1NDQwMjg4NzU2MDMzNDc2NTRFKzk0NyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDkyIHJlbWFpbmRlciA1NDk3NjAuOTExMzA0NzI1Nzk1MTY0NTg5NjE5Mjg2NTE0IDE2NS4xNjAwODk2MTU2MDQ5MjQyMDc3NTQ4ODM5NTM0ODQgLT4gMTA4LjEzMzA2Mzk5MjYwNzQwMTE4MTM2NTQ4OTMxOTI0OAorc3VieDM0OTIgc3VidHJhY3QgNTQ5NzYwLjkxMTMwNDcyNTc5NTE2NDU4OTYxOTI4NjUxNCAxNjUuMTYwMDg5NjE1NjA0OTI0MjA3NzU0ODgzOTUzNDg0IC0+IDU0OTU5NS43NTEyMTUxMTAxOTAyNDAzODE4NjQ0MDI1NjEgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ5MyBhZGQgMzY1MDUxNC4xODY0OTczNzk1Njg1NTgyODkzOTY2Mjc5NCAwODA4NjcyMS40MDM2ODg2OTQ4MjQ4Mjc0ODM0NzM1NjI5IC0+IDExNzM3MjM1LjU5MDE4NjA3NDM5MzM4NTc3Mjg3MDE5MDggSW5leGFjdCBSb3VuZGVkCitjb214MzQ5MyBjb21wYXJlIDM2NTA1MTQuMTg2NDk3Mzc5NTY4NTU4Mjg5Mzk2NjI3OTQgMDgwODY3MjEuNDAzNjg4Njk0ODI0ODI3NDgzNDczNTYyOSAtPiAtMQorZGl2eDM0OTMgZGl2aWRlIDM2NTA1MTQuMTg2NDk3Mzc5NTY4NTU4Mjg5Mzk2NjI3OTQgMDgwODY3MjEuNDAzNjg4Njk0ODI0ODI3NDgzNDczNTYyOSAtPiAwLjQ1MTQyMDc5MjcxMjM4NzI1MDg2NTQyMzIwODIzNDI5MSBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDkzIGRpdmlkZWludCAzNjUwNTE0LjE4NjQ5NzM3OTU2ODU1ODI4OTM5NjYyNzk0IDA4MDg2NzIxLjQwMzY4ODY5NDgyNDgyNzQ4MzQ3MzU2MjkgLT4gMAorbXVseDM0OTMgbXVsdGlwbHkgMzY1MDUxNC4xODY0OTczNzk1Njg1NTgyODkzOTY2Mjc5NCAwODA4NjcyMS40MDM2ODg2OTQ4MjQ4Mjc0ODM0NzM1NjI5IC0+IDI5NTIwNjkxMjA2NDE3LjU4MzE4ODY3NTI4MDg3NDU0MjEgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ5MyBwb3dlciAzNjUwNTE0LjE4NjQ5NzM3OTU2ODU1ODI4OTM5NjYyNzk0IDgwODY3MjEgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityZW14MzQ5MyByZW1haW5kZXIgMzY1MDUxNC4xODY0OTczNzk1Njg1NTgyODkzOTY2Mjc5NCAwODA4NjcyMS40MDM2ODg2OTQ4MjQ4Mjc0ODM0NzM1NjI5IC0+IDM2NTA1MTQuMTg2NDk3Mzc5NTY4NTU4Mjg5Mzk2NjI3OTQKK3N1YngzNDkzIHN1YnRyYWN0IDM2NTA1MTQuMTg2NDk3Mzc5NTY4NTU4Mjg5Mzk2NjI3OTQgMDgwODY3MjEuNDAzNjg4Njk0ODI0ODI3NDgzNDczNTYyOSAtPiAtNDQzNjIwNy4yMTcxOTEzMTUyNTYyNjkxOTQwNzY5MzQ5NgorYWRkeDM0OTQgYWRkIDU1MDY3NzIzODgxOTUwLjEzNDY5NTgxNzk2MDQwOTk1OTQgLTguOTA0ODE0ODE2ODcxODI5MzE0MzEwNTQ3ODUxOTIwODMgLT4gNTUwNjc3MjM4ODE5NDEuMjI5ODgxMDAxMDg4NTgwNjQ1MSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNDk0IGNvbXBhcmUgNTUwNjc3MjM4ODE5NTAuMTM0Njk1ODE3OTYwNDA5OTU5NCAtOC45MDQ4MTQ4MTY4NzE4MjkzMTQzMTA1NDc4NTE5MjA4MyAtPiAxCitkaXZ4MzQ5NCBkaXZpZGUgNTUwNjc3MjM4ODE5NTAuMTM0Njk1ODE3OTYwNDA5OTU5NCAtOC45MDQ4MTQ4MTY4NzE4MjkzMTQzMTA1NDc4NTE5MjA4MyAtPiAtNjE4NDAzOTE5ODM5MS4xOTg1MzA4ODQxOTQ4NDExNzA1NCBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDk0IGRpdmlkZWludCA1NTA2NzcyMzg4MTk1MC4xMzQ2OTU4MTc5NjA0MDk5NTk0IC04LjkwNDgxNDgxNjg3MTgyOTMxNDMxMDU0Nzg1MTkyMDgzIC0+IC02MTg0MDM5MTk4MzkxCittdWx4MzQ5NCBtdWx0aXBseSA1NTA2NzcyMzg4MTk1MC4xMzQ2OTU4MTc5NjA0MDk5NTk0IC04LjkwNDgxNDgxNjg3MTgyOTMxNDMxMDU0Nzg1MTkyMDgzIC0+IC00OTAzNjc4ODM1NTUzOTYuMjUwMzY1MTU4NTkzMzczMjc5IEluZXhhY3QgUm91bmRlZAorcG93eDM0OTQgcG93ZXIgNTUwNjc3MjM4ODE5NTAuMTM0Njk1ODE3OTYwNDA5OTU5NCAtOSAtPiAyLjE0NzQ2Mzg2NTM4NTI5MjcwMTczNzg4NDU3ODg3MTIxRS0xMjQgSW5leGFjdCBSb3VuZGVkCityZW14MzQ5NCByZW1haW5kZXIgNTUwNjc3MjM4ODE5NTAuMTM0Njk1ODE3OTYwNDA5OTU5NCAtOC45MDQ4MTQ4MTY4NzE4MjkzMTQzMTA1NDc4NTE5MjA4MyAtPiAxLjc2Nzg4MDc1OTE4NDg4NjkzMDg2MzQ3NzIwNDYxNTQ3CitzdWJ4MzQ5NCBzdWJ0cmFjdCA1NTA2NzcyMzg4MTk1MC4xMzQ2OTU4MTc5NjA0MDk5NTk0IC04LjkwNDgxNDgxNjg3MTgyOTMxNDMxMDU0Nzg1MTkyMDgzIC0+IDU1MDY3NzIzODgxOTU5LjAzOTUxMDYzNDgzMjIzOTI3MzcgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ5NSBhZGQgODY4MjUxMTIzLjQxMzk5MjY1MzM2Mjg2MDYzNzU0MTA2MEUrMDE5IDU1Nzk2NjUwNDUuMzc4NTgzMDg1NDExNTQ4NTg1Njc2NTZFKzEzMSAtPiA1LjU3OTY2NTA0NTM3ODU4MzA4NTQxMTU0ODU4NTY3NjU2RSsxNDAgSW5leGFjdCBSb3VuZGVkCitjb214MzQ5NSBjb21wYXJlIDg2ODI1MTEyMy40MTM5OTI2NTMzNjI4NjA2Mzc1NDEwNjBFKzAxOSA1NTc5NjY1MDQ1LjM3ODU4MzA4NTQxMTU0ODU4NTY3NjU2RSsxMzEgLT4gLTEKK2RpdngzNDk1IGRpdmlkZSA4NjgyNTExMjMuNDEzOTkyNjUzMzYyODYwNjM3NTQxMDYwRSswMTkgNTU3OTY2NTA0NS4zNzg1ODMwODU0MTE1NDg1ODU2NzY1NkUrMTMxIC0+IDEuNTU2MDk5MDA2NTc1OTA3MDYxNTUyNTE5MDI3MjUwMjdFLTExMyBJbmV4YWN0IFJvdW5kZWQKK2R2aXgzNDk1IGRpdmlkZWludCA4NjgyNTExMjMuNDEzOTkyNjUzMzYyODYwNjM3NTQxMDYwRSswMTkgNTU3OTY2NTA0NS4zNzg1ODMwODU0MTE1NDg1ODU2NzY1NkUrMTMxIC0+IDAKK211bHgzNDk1IG11bHRpcGx5IDg2ODI1MTEyMy40MTM5OTI2NTMzNjI4NjA2Mzc1NDEwNjBFKzAxOSA1NTc5NjY1MDQ1LjM3ODU4MzA4NTQxMTU0ODU4NTY3NjU2RSsxMzEgLT4gNC44NDQ1NTA0NDM5MjM3NDEwNjEwNjk2Njc3OTMyMjQ4M0UrMTY4IEluZXhhY3QgUm91bmRlZAorcG93eDM0OTUgcG93ZXIgODY4MjUxMTIzLjQxMzk5MjY1MzM2Mjg2MDYzNzU0MTA2MEUrMDE5IDYgLT4gNC4yODQyMjM1NDMwNDI5MTg4NDgwMjY5MDczMzg1MzIyN0UrMTY3IEluZXhhY3QgUm91bmRlZAorcmVteDM0OTUgcmVtYWluZGVyIDg2ODI1MTEyMy40MTM5OTI2NTMzNjI4NjA2Mzc1NDEwNjBFKzAxOSA1NTc5NjY1MDQ1LjM3ODU4MzA4NTQxMTU0ODU4NTY3NjU2RSsxMzEgLT4gODY4MjUxMTIzNDEzOTkyNjUzMzYyODYwNjM3NS40MTA2MAorc3VieDM0OTUgc3VidHJhY3QgODY4MjUxMTIzLjQxMzk5MjY1MzM2Mjg2MDYzNzU0MTA2MEUrMDE5IDU1Nzk2NjUwNDUuMzc4NTgzMDg1NDExNTQ4NTg1Njc2NTZFKzEzMSAtPiAtNS41Nzk2NjUwNDUzNzg1ODMwODU0MTE1NDg1ODU2NzY1NkUrMTQwIEluZXhhY3QgUm91bmRlZAorYWRkeDM0OTYgYWRkIC02NDYuNDY0NDMxNTc0MDE0NDA3NTM2MDA0OTkwMDU5MDY5IC03OTguNjc5NTYwMDIwNDE0NTIzODQxMzIxNzI0NjQ5NTk0RS0wMzcgLT4gLTY0Ni40NjQ0MzE1NzQwMTQ0MDc1MzYwMDQ5OTAwNTkwNjkgSW5leGFjdCBSb3VuZGVkCitjb214MzQ5NiBjb21wYXJlIC02NDYuNDY0NDMxNTc0MDE0NDA3NTM2MDA0OTkwMDU5MDY5IC03OTguNjc5NTYwMDIwNDE0NTIzODQxMzIxNzI0NjQ5NTk0RS0wMzcgLT4gLTEKK2RpdngzNDk2IGRpdmlkZSAtNjQ2LjQ2NDQzMTU3NDAxNDQwNzUzNjAwNDk5MDA1OTA2OSAtNzk4LjY3OTU2MDAyMDQxNDUyMzg0MTMyMTcyNDY0OTU5NEUtMDM3IC0+IDguMDk0MTY1MjE4ODcwNjM4ODY2MTM1MjcyMjgzNTM1NDNFKzM2IEluZXhhY3QgUm91bmRlZAorZHZpeDM0OTYgZGl2aWRlaW50IC02NDYuNDY0NDMxNTc0MDE0NDA3NTM2MDA0OTkwMDU5MDY5IC03OTguNjc5NTYwMDIwNDE0NTIzODQxMzIxNzI0NjQ5NTk0RS0wMzcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDk2IG11bHRpcGx5IC02NDYuNDY0NDMxNTc0MDE0NDA3NTM2MDA0OTkwMDU5MDY5IC03OTguNjc5NTYwMDIwNDE0NTIzODQxMzIxNzI0NjQ5NTk0RS0wMzcgLT4gNS4xNjMxNzkyNzc3ODM4MTE5Nzk5NTQ1MTM2MzQzOTYyNkUtMzIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ5NiBwb3dlciAtNjQ2LjQ2NDQzMTU3NDAxNDQwNzUzNjAwNDk5MDA1OTA2OSAtOCAtPiAzLjI3ODI1NjQxNTY5ODYwODYxNzc0NzAwNTQ4MDM1NjkxRS0yMyBJbmV4YWN0IFJvdW5kZWQKK3JlbXgzNDk2IHJlbWFpbmRlciAtNjQ2LjQ2NDQzMTU3NDAxNDQwNzUzNjAwNDk5MDA1OTA2OSAtNzk4LjY3OTU2MDAyMDQxNDUyMzg0MTMyMTcyNDY0OTU5NEUtMDM3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ5NiBzdWJ0cmFjdCAtNjQ2LjQ2NDQzMTU3NDAxNDQwNzUzNjAwNDk5MDA1OTA2OSAtNzk4LjY3OTU2MDAyMDQxNDUyMzg0MTMyMTcyNDY0OTU5NEUtMDM3IC0+IC02NDYuNDY0NDMxNTc0MDE0NDA3NTM2MDA0OTkwMDU5MDY5IEluZXhhY3QgUm91bmRlZAorYWRkeDM0OTcgYWRkIDM1NC41NDY2Nzk5NzUyMTk3NTM1OTg1NTgyNzM0MjE1NTYgLTcwMzkuNDYzODY4MTIyMzkwMTUxNDQ1ODE3NjE3NTI5MjdFLTQ0OCAtPiAzNTQuNTQ2Njc5OTc1MjE5NzUzNTk4NTU4MjczNDIxNTU2IEluZXhhY3QgUm91bmRlZAorY29teDM0OTcgY29tcGFyZSAzNTQuNTQ2Njc5OTc1MjE5NzUzNTk4NTU4MjczNDIxNTU2IC03MDM5LjQ2Mzg2ODEyMjM5MDE1MTQ0NTgxNzYxNzUyOTI3RS00NDggLT4gMQorZGl2eDM0OTcgZGl2aWRlIDM1NC41NDY2Nzk5NzUyMTk3NTM1OTg1NTgyNzM0MjE1NTYgLTcwMzkuNDYzODY4MTIyMzkwMTUxNDQ1ODE3NjE3NTI5MjdFLTQ0OCAtPiAtNS4wMzY1NTc5OTEwMjQ3NzE5MjU3OTQxNDUyMzM1MjAyOEUrNDQ2IEluZXhhY3QgUm91bmRlZAorZHZpeDM0OTcgZGl2aWRlaW50IDM1NC41NDY2Nzk5NzUyMTk3NTM1OTg1NTgyNzM0MjE1NTYgLTcwMzkuNDYzODY4MTIyMzkwMTUxNDQ1ODE3NjE3NTI5MjdFLTQ0OCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorbXVseDM0OTcgbXVsdGlwbHkgMzU0LjU0NjY3OTk3NTIxOTc1MzU5ODU1ODI3MzQyMTU1NiAtNzAzOS40NjM4NjgxMjIzOTAxNTE0NDU4MTc2MTc1MjkyN0UtNDQ4IC0+IC0yLjQ5NTgxODU0MzI0ODMxMTYxMjY3MzY5MjkyMDcxNDA4RS00NDIgSW5leGFjdCBSb3VuZGVkCitwb3d4MzQ5NyBwb3dlciAzNTQuNTQ2Njc5OTc1MjE5NzUzNTk4NTU4MjczNDIxNTU2IC03IC0+IDEuNDE5OTkyNDYzNjU4NzU2MTcyOTgyNzA0MTQzMDQyMzNFLTE4IEluZXhhY3QgUm91bmRlZAorcmVteDM0OTcgcmVtYWluZGVyIDM1NC41NDY2Nzk5NzUyMTk3NTM1OTg1NTgyNzM0MjE1NTYgLTcwMzkuNDYzODY4MTIyMzkwMTUxNDQ1ODE3NjE3NTI5MjdFLTQ0OCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorc3VieDM0OTcgc3VidHJhY3QgMzU0LjU0NjY3OTk3NTIxOTc1MzU5ODU1ODI3MzQyMTU1NiAtNzAzOS40NjM4NjgxMjIzOTAxNTE0NDU4MTc2MTc1MjkyN0UtNDQ4IC0+IDM1NC41NDY2Nzk5NzUyMTk3NTM1OTg1NTgyNzM0MjE1NTYgSW5leGFjdCBSb3VuZGVkCithZGR4MzQ5OCBhZGQgOTE5MzYwODc5MTc0MzUuNTk3NDg4OTQ5NTI3ODIxNTg3NCAtNjcwODA4MjMzNDQuODkwMzM5MjU4NDMyNzEzNjA4MjQ4NkUtNzU3IC0+IDkxOTM2MDg3OTE3NDM1LjU5NzQ4ODk0OTUyNzgyMTU4NzQgSW5leGFjdCBSb3VuZGVkCitjb214MzQ5OCBjb21wYXJlIDkxOTM2MDg3OTE3NDM1LjU5NzQ4ODk0OTUyNzgyMTU4NzQgLTY3MDgwODIzMzQ0Ljg5MDMzOTI1ODQzMjcxMzYwODI0ODZFLTc1NyAtPiAxCitkaXZ4MzQ5OCBkaXZpZGUgOTE5MzYwODc5MTc0MzUuNTk3NDg4OTQ5NTI3ODIxNTg3NCAtNjcwODA4MjMzNDQuODkwMzM5MjU4NDMyNzEzNjA4MjQ4NkUtNzU3IC0+IC0xLjM3MDUyNzEyNDM0MzAzMzY2NTY5MzA0Njg4OTkzNzgzRSs3NjAgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ5OCBkaXZpZGVpbnQgOTE5MzYwODc5MTc0MzUuNTk3NDg4OTQ5NTI3ODIxNTg3NCAtNjcwODA4MjMzNDQuODkwMzM5MjU4NDMyNzEzNjA4MjQ4NkUtNzU3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCittdWx4MzQ5OCBtdWx0aXBseSA5MTkzNjA4NzkxNzQzNS41OTc0ODg5NDk1Mjc4MjE1ODc0IC02NzA4MDgyMzM0NC44OTAzMzkyNTg0MzI3MTM2MDgyNDg2RS03NTcgLT4gLTYuMTY3MTQ4NDcyNjA5ODA0NDgwOTkyOTI3NjM5Mzk0MjNFLTczMyBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNDk4IHBvd2VyIDkxOTM2MDg3OTE3NDM1LjU5NzQ4ODk0OTUyNzgyMTU4NzQgLTcgLT4gMS44MDEzNDg5OTkzOTAzNTcwODcxOTY1OTA2NTA4MjYzMEUtOTggSW5leGFjdCBSb3VuZGVkCityZW14MzQ5OCByZW1haW5kZXIgOTE5MzYwODc5MTc0MzUuNTk3NDg4OTQ5NTI3ODIxNTg3NCAtNjcwODA4MjMzNDQuODkwMzM5MjU4NDMyNzEzNjA4MjQ4NkUtNzU3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitzdWJ4MzQ5OCBzdWJ0cmFjdCA5MTkzNjA4NzkxNzQzNS41OTc0ODg5NDk1Mjc4MjE1ODc0IC02NzA4MDgyMzM0NC44OTAzMzkyNTg0MzI3MTM2MDgyNDg2RS03NTcgLT4gOTE5MzYwODc5MTc0MzUuNTk3NDg4OTQ5NTI3ODIxNTg3NCBJbmV4YWN0IFJvdW5kZWQKK2FkZHgzNDk5IGFkZCAtMDczNDUuNjQyMjUxODUyODU1NjEzNjUyMTQxNzI1OTgxMUUtNjAwIDQxMTg4MzI1LjcwNDEzNjI2MDg5MzQ5NTc1ODQ1ODMzODFFLTc2MyAtPiAtNy4zNDU2NDIyNTE4NTI4NTU2MTM2NTIxNDE3MjU5ODExMEUtNTk3IEluZXhhY3QgUm91bmRlZAorY29teDM0OTkgY29tcGFyZSAtMDczNDUuNjQyMjUxODUyODU1NjEzNjUyMTQxNzI1OTgxMUUtNjAwIDQxMTg4MzI1LjcwNDEzNjI2MDg5MzQ5NTc1ODQ1ODMzODFFLTc2MyAtPiAtMQorZGl2eDM0OTkgZGl2aWRlIC0wNzM0NS42NDIyNTE4NTI4NTU2MTM2NTIxNDE3MjU5ODExRS02MDAgNDExODgzMjUuNzA0MTM2MjYwODkzNDk1NzU4NDU4MzM4MUUtNzYzIC0+IC0xLjc4MzQyODIyMjk5MTYzODQyMjQ3MTg0MzAzODc4MDIyRSsxNTkgSW5leGFjdCBSb3VuZGVkCitkdml4MzQ5OSBkaXZpZGVpbnQgLTA3MzQ1LjY0MjI1MTg1Mjg1NTYxMzY1MjE0MTcyNTk4MTFFLTYwMCA0MTE4ODMyNS43MDQxMzYyNjA4OTM0OTU3NTg0NTgzMzgxRS03NjMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK211bHgzNDk5IG11bHRpcGx5IC0wNzM0NS42NDIyNTE4NTI4NTU2MTM2NTIxNDE3MjU5ODExRS02MDAgNDExODgzMjUuNzA0MTM2MjYwODkzNDk1NzU4NDU4MzM4MUUtNzYzIC0+IC0zLjAyNTU0NzA1NTc1MzgwMzM4Mjc0MTI2ODY3NjU1Njc2RS0xMzUyIEluZXhhY3QgUm91bmRlZAorcG93eDM0OTkgcG93ZXIgLTA3MzQ1LjY0MjI1MTg1Mjg1NTYxMzY1MjE0MTcyNTk4MTFFLTYwMCA0IC0+IDIuOTExNTE1NDE1NTIyMTc1ODIwODI5MzcyMzYyNTU5OTZFLTIzODUgSW5leGFjdCBSb3VuZGVkCityZW14MzQ5OSByZW1haW5kZXIgLTA3MzQ1LjY0MjI1MTg1Mjg1NTYxMzY1MjE0MTcyNTk4MTFFLTYwMCA0MTE4ODMyNS43MDQxMzYyNjA4OTM0OTU3NTg0NTgzMzgxRS03NjMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3N1YngzNDk5IHN1YnRyYWN0IC0wNzM0NS42NDIyNTE4NTI4NTU2MTM2NTIxNDE3MjU5ODExRS02MDAgNDExODgzMjUuNzA0MTM2MjYwODkzNDk1NzU4NDU4MzM4MUUtNzYzIC0+IC03LjM0NTY0MjI1MTg1Mjg1NTYxMzY1MjE0MTcyNTk4MTEwRS01OTcgSW5leGFjdCBSb3VuZGVkCithZGR4MzUwMCBhZGQgLTI1MzI4MDcyNC45Mzk0NTgwMjE1ODgxNjc5NjUwMzgxODQgNjE2OTg4LjQyNjQyNTkwODg3MjM5ODE3MDg5NjM3NTYzNEUrMzk2IC0+IDYuMTY5ODg0MjY0MjU5MDg4NzIzOTgxNzA4OTYzNzU2MzRFKzQwMSBJbmV4YWN0IFJvdW5kZWQKK2NvbXgzNTAwIGNvbXBhcmUgLTI1MzI4MDcyNC45Mzk0NTgwMjE1ODgxNjc5NjUwMzgxODQgNjE2OTg4LjQyNjQyNTkwODg3MjM5ODE3MDg5NjM3NTYzNEUrMzk2IC0+IC0xCitkaXZ4MzUwMCBkaXZpZGUgLTI1MzI4MDcyNC45Mzk0NTgwMjE1ODgxNjc5NjUwMzgxODQgNjE2OTg4LjQyNjQyNTkwODg3MjM5ODE3MDg5NjM3NTYzNEUrMzk2IC0+IC00LjEwNTExMzA2MzU3MzM3NzUzMzUxNjU1NTExODY2MTcwRS0zOTQgSW5leGFjdCBSb3VuZGVkCitkdml4MzUwMCBkaXZpZGVpbnQgLTI1MzI4MDcyNC45Mzk0NTgwMjE1ODgxNjc5NjUwMzgxODQgNjE2OTg4LjQyNjQyNTkwODg3MjM5ODE3MDg5NjM3NTYzNEUrMzk2IC0+IC0wCittdWx4MzUwMCBtdWx0aXBseSAtMjUzMjgwNzI0LjkzOTQ1ODAyMTU4ODE2Nzk2NTAzODE4NCA2MTY5ODguNDI2NDI1OTA4ODcyMzk4MTcwODk2Mzc1NjM0RSszOTYgLT4gLTEuNTYyNzEyNzU5MjQ0MDk2NTc5OTE5MTM2MjA1MjIzMTVFKzQxMCBJbmV4YWN0IFJvdW5kZWQKK3Bvd3gzNTAwIHBvd2VyIC0yNTMyODA3MjQuOTM5NDU4MDIxNTg4MTY3OTY1MDM4MTg0IDYgLT4gMi42NDAwNTQyMDIyMTQwNjgwODc4MjI4NDQ1OTc5NDQyNEUrNTAgSW5leGFjdCBSb3VuZGVkCityZW14MzUwMCByZW1haW5kZXIgLTI1MzI4MDcyNC45Mzk0NTgwMjE1ODgxNjc5NjUwMzgxODQgNjE2OTg4LjQyNjQyNTkwODg3MjM5ODE3MDg5NjM3NTYzNEUrMzk2IC0+IC0yNTMyODA3MjQuOTM5NDU4MDIxNTg4MTY3OTY1MDM4MTg0CitzdWJ4MzUwMCBzdWJ0cmFjdCAtMjUzMjgwNzI0LjkzOTQ1ODAyMTU4ODE2Nzk2NTAzODE4NCA2MTY5ODguNDI2NDI1OTA4ODcyMzk4MTcwODk2Mzc1NjM0RSszOTYgLT4gLTYuMTY5ODg0MjY0MjU5MDg4NzIzOTgxNzA4OTYzNzU2MzRFKzQwMSBJbmV4YWN0IFJvdW5kZWQKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcmFuZG9tcy5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yYW5kb21zLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI0NDI4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcmFuZG9tcy5kZWNUZXN0CkBAIC0wLDAgKzEsNDAzMCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSByYW5kb21zLmRlY1Rlc3QgLS0gZGVjaW1hbCByYW5kb20gdGVzdGNhc2VzICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCisKKy0tIFJhbmRvbWx5IGdlbmVyYXRlZCB0ZXN0Y2FzZXMgWzMxIERlYyAyMDAwLCB3aXRoIHJlc3VsdHMgZGVmaW5lZCBmb3IKKy0tIGFsbCBjYXNlcyBbMjcgT2N0IDIwMDFdLCBhbmQgbm8gdHJpbS9maW5pc2ggWzkgSnVuIDIwMDJdCit4YWRkMDAxIGFkZCA5MDUuNjc0MDIgLTIwMjg5NjYxMS5FLTc4MDQ3MjYyMCAtPiA5MDUuNjc0MDIwIEluZXhhY3QgUm91bmRlZAoreGNvbTAwMSBjb21wYXJlIDkwNS42NzQwMiAtMjAyODk2NjExLkUtNzgwNDcyNjIwIC0+IDEKK3hkaXYwMDEgZGl2aWRlIDkwNS42NzQwMiAtMjAyODk2NjExLkUtNzgwNDcyNjIwIC0+IC00LjQ2MzcyMTc3RSs3ODA0NzI2MTQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDAxIGRpdmlkZWludCA5MDUuNjc0MDIgLTIwMjg5NjYxMS5FLTc4MDQ3MjYyMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDAwMSBtdWx0aXBseSA5MDUuNjc0MDIgLTIwMjg5NjYxMS5FLTc4MDQ3MjYyMCAtPiAtMS44Mzc1ODE4OUUtNzgwNDcyNjA5IEluZXhhY3QgUm91bmRlZAoreHBvdzAwMSBwb3dlciA5MDUuNjc0MDIgLTIgLT4gMC4wMDAwMDEyMTkxNDczMCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMDEgcmVtYWluZGVyIDkwNS42NzQwMiAtMjAyODk2NjExLkUtNzgwNDcyNjIwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDAxIHN1YnRyYWN0IDkwNS42NzQwMiAtMjAyODk2NjExLkUtNzgwNDcyNjIwIC0+IDkwNS42NzQwMjAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDAyIGFkZCAzOTE1MTM0LjcgLTU5NzE2NDkwNy4gLT4gLTU5MzI0OTc3MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMDIgY29tcGFyZSAzOTE1MTM0LjcgLTU5NzE2NDkwNy4gLT4gMQoreGRpdjAwMiBkaXZpZGUgMzkxNTEzNC43IC01OTcxNjQ5MDcuIC0+IC0wLjAwNjU1NjIwMzU4IEluZXhhY3QgUm91bmRlZAoreGR2aTAwMiBkaXZpZGVpbnQgMzkxNTEzNC43IC01OTcxNjQ5MDcuIC0+IC0wCit4bXVsMDAyIG11bHRpcGx5IDM5MTUxMzQuNyAtNTk3MTY0OTA3LiAtPiAtMi4zMzc5ODEwNUUrMTUgSW5leGFjdCBSb3VuZGVkCit4cG93MDAyIHBvd2VyIDM5MTUxMzQuNyAtNTk3MTY0OTA3IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTAwMiByZW1haW5kZXIgMzkxNTEzNC43IC01OTcxNjQ5MDcuIC0+IDM5MTUxMzQuNworeHN1YjAwMiBzdWJ0cmFjdCAzOTE1MTM0LjcgLTU5NzE2NDkwNy4gLT4gNjAxMDgwMDQyIEluZXhhY3QgUm91bmRlZAoreGFkZDAwMyBhZGQgMzA5NzU5MjYxIDYyNjYzLjQ4NyAtPiAzMDk4MjE5MjQgSW5leGFjdCBSb3VuZGVkCit4Y29tMDAzIGNvbXBhcmUgMzA5NzU5MjYxIDYyNjYzLjQ4NyAtPiAxCit4ZGl2MDAzIGRpdmlkZSAzMDk3NTkyNjEgNjI2NjMuNDg3IC0+IDQ5NDMuMjE3NzUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDAzIGRpdmlkZWludCAzMDk3NTkyNjEgNjI2NjMuNDg3IC0+IDQ5NDMKK3htdWwwMDMgbXVsdGlwbHkgMzA5NzU5MjYxIDYyNjYzLjQ4NyAtPiAxLjk0MTA1OTU0RSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMDMgcG93ZXIgMzA5NzU5MjYxIDYyNjYzIC0+IDEuMTM2NzkxOTlFKzUzMjA3MyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMDMgcmVtYWluZGVyIDMwOTc1OTI2MSA2MjY2My40ODcgLT4gMTM2NDQuNzU5Cit4c3ViMDAzIHN1YnRyYWN0IDMwOTc1OTI2MSA2MjY2My40ODcgLT4gMzA5Njk2NTk4IEluZXhhY3QgUm91bmRlZAoreGFkZDAwNCBhZGQgMy45MzU5MTg4OEUtMjM2NTk1NjI2IDcyNDIzNzUuMDAgLT4gNzI0MjM3NS4wMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMDQgY29tcGFyZSAzLjkzNTkxODg4RS0yMzY1OTU2MjYgNzI0MjM3NS4wMCAtPiAtMQoreGRpdjAwNCBkaXZpZGUgMy45MzU5MTg4OEUtMjM2NTk1NjI2IDcyNDIzNzUuMDAgLT4gNS40MzQ1NjkzMEUtMjM2NTk1NjMzIEluZXhhY3QgUm91bmRlZAoreGR2aTAwNCBkaXZpZGVpbnQgMy45MzU5MTg4OEUtMjM2NTk1NjI2IDcyNDIzNzUuMDAgLT4gMAoreG11bDAwNCBtdWx0aXBseSAzLjkzNTkxODg4RS0yMzY1OTU2MjYgNzI0MjM3NS4wMCAtPiAyLjg1MDU0MDA1RS0yMzY1OTU2MTkgSW5leGFjdCBSb3VuZGVkCit4cG93MDA0IHBvd2VyIDMuOTM1OTE4ODhFLTIzNjU5NTYyNiA3MjQyMzc1IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTAwNCByZW1haW5kZXIgMy45MzU5MTg4OEUtMjM2NTk1NjI2IDcyNDIzNzUuMDAgLT4gMy45MzU5MTg4OEUtMjM2NTk1NjI2Cit4c3ViMDA0IHN1YnRyYWN0IDMuOTM1OTE4ODhFLTIzNjU5NTYyNiA3MjQyMzc1LjAwIC0+IC03MjQyMzc1LjAwIEluZXhhY3QgUm91bmRlZAoreGFkZDAwNSBhZGQgMzIzOTAyLjcxNCAtNjA4NjY5LjYwN0UtNjU3MDYwNTY4IC0+IDMyMzkwMi43MTQgSW5leGFjdCBSb3VuZGVkCit4Y29tMDA1IGNvbXBhcmUgMzIzOTAyLjcxNCAtNjA4NjY5LjYwN0UtNjU3MDYwNTY4IC0+IDEKK3hkaXYwMDUgZGl2aWRlIDMyMzkwMi43MTQgLTYwODY2OS42MDdFLTY1NzA2MDU2OCAtPiAtNS4zMjE0ODY1N0UrNjU3MDYwNTY3IEluZXhhY3QgUm91bmRlZAoreGR2aTAwNSBkaXZpZGVpbnQgMzIzOTAyLjcxNCAtNjA4NjY5LjYwN0UtNjU3MDYwNTY4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDA1IG11bHRpcGx5IDMyMzkwMi43MTQgLTYwODY2OS42MDdFLTY1NzA2MDU2OCAtPiAtMS45NzE0OTczOEUtNjU3MDYwNTU3IEluZXhhY3QgUm91bmRlZAoreHBvdzAwNSBwb3dlciAzMjM5MDIuNzE0IC02IC0+IDguNjU5ODkyMDRFLTM0IEluZXhhY3QgUm91bmRlZAoreHJlbTAwNSByZW1haW5kZXIgMzIzOTAyLjcxNCAtNjA4NjY5LjYwN0UtNjU3MDYwNTY4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDA1IHN1YnRyYWN0IDMyMzkwMi43MTQgLTYwODY2OS42MDdFLTY1NzA2MDU2OCAtPiAzMjM5MDIuNzE0IEluZXhhY3QgUm91bmRlZAoreGFkZDAwNiBhZGQgNS4xMTk3MDA5MiAtODgwNy4yMjAzNiAtPiAtODgwMi4xMDA2NiBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMDYgY29tcGFyZSA1LjExOTcwMDkyIC04ODA3LjIyMDM2IC0+IDEKK3hkaXYwMDYgZGl2aWRlIDUuMTE5NzAwOTIgLTg4MDcuMjIwMzYgLT4gLTAuMDAwNTgxMzA3MjM2IEluZXhhY3QgUm91bmRlZAoreGR2aTAwNiBkaXZpZGVpbnQgNS4xMTk3MDA5MiAtODgwNy4yMjAzNiAtPiAtMAoreG11bDAwNiBtdWx0aXBseSA1LjExOTcwMDkyIC04ODA3LjIyMDM2IC0+IC00NTA5MC4zMzQyIEluZXhhY3QgUm91bmRlZAoreHBvdzAwNiBwb3dlciA1LjExOTcwMDkyIC04ODA3IC0+IDQuODE4MTkyNjJFLTYyNDcgSW5leGFjdCBSb3VuZGVkCit4cmVtMDA2IHJlbWFpbmRlciA1LjExOTcwMDkyIC04ODA3LjIyMDM2IC0+IDUuMTE5NzAwOTIKK3hzdWIwMDYgc3VidHJhY3QgNS4xMTk3MDA5MiAtODgwNy4yMjAzNiAtPiA4ODEyLjM0MDA2IEluZXhhY3QgUm91bmRlZAoreGFkZDAwNyBhZGQgLTcuOTk4NzQ1MTYgNDU2MS44Mzc1OCAtPiA0NTUzLjgzODgzIEluZXhhY3QgUm91bmRlZAoreGNvbTAwNyBjb21wYXJlIC03Ljk5ODc0NTE2IDQ1NjEuODM3NTggLT4gLTEKK3hkaXYwMDcgZGl2aWRlIC03Ljk5ODc0NTE2IDQ1NjEuODM3NTggLT4gLTAuMDAxNzUzNDA0MjAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDA3IGRpdmlkZWludCAtNy45OTg3NDUxNiA0NTYxLjgzNzU4IC0+IC0wCit4bXVsMDA3IG11bHRpcGx5IC03Ljk5ODc0NTE2IDQ1NjEuODM3NTggLT4gLTM2NDg4Ljk3NjMgSW5leGFjdCBSb3VuZGVkCit4cG93MDA3IHBvd2VyIC03Ljk5ODc0NTE2IDQ1NjIgLT4gMy44NTIzNjE5OUUrNDExOSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMDcgcmVtYWluZGVyIC03Ljk5ODc0NTE2IDQ1NjEuODM3NTggLT4gLTcuOTk4NzQ1MTYKK3hzdWIwMDcgc3VidHJhY3QgLTcuOTk4NzQ1MTYgNDU2MS44Mzc1OCAtPiAtNDU2OS44MzYzMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMDggYWRkIDI5NzgwMjg3OCAtOTI3MjA2LjMyNCAtPiAyOTY4NzU2NzIgSW5leGFjdCBSb3VuZGVkCit4Y29tMDA4IGNvbXBhcmUgMjk3ODAyODc4IC05MjcyMDYuMzI0IC0+IDEKK3hkaXYwMDggZGl2aWRlIDI5NzgwMjg3OCAtOTI3MjA2LjMyNCAtPiAtMzIxLjE4Mjk2NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMDggZGl2aWRlaW50IDI5NzgwMjg3OCAtOTI3MjA2LjMyNCAtPiAtMzIxCit4bXVsMDA4IG11bHRpcGx5IDI5NzgwMjg3OCAtOTI3MjA2LjMyNCAtPiAtMi43NjEyNDcxMkUrMTQgSW5leGFjdCBSb3VuZGVkCit4cG93MDA4IHBvd2VyIDI5NzgwMjg3OCAtOTI3MjA2IC0+IDEuOTQ2MDI4MTBFLTc4NTcwNzggSW5leGFjdCBSb3VuZGVkCit4cmVtMDA4IHJlbWFpbmRlciAyOTc4MDI4NzggLTkyNzIwNi4zMjQgLT4gMTY5NjQ3Ljk5NgoreHN1YjAwOCBzdWJ0cmFjdCAyOTc4MDI4NzggLTkyNzIwNi4zMjQgLT4gMjk4NzMwMDg0IEluZXhhY3QgUm91bmRlZAoreGFkZDAwOSBhZGQgLTc2Ni42NTE4MjQgMzEzMDAuMzYxOSAtPiAzMDUzMy43MTAxIEluZXhhY3QgUm91bmRlZAoreGNvbTAwOSBjb21wYXJlIC03NjYuNjUxODI0IDMxMzAwLjM2MTkgLT4gLTEKK3hkaXYwMDkgZGl2aWRlIC03NjYuNjUxODI0IDMxMzAwLjM2MTkgLT4gLTAuMDI0NDkzMzg1MyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMDkgZGl2aWRlaW50IC03NjYuNjUxODI0IDMxMzAwLjM2MTkgLT4gLTAKK3htdWwwMDkgbXVsdGlwbHkgLTc2Ni42NTE4MjQgMzEzMDAuMzYxOSAtPiAtMjM5OTY0NzkuNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMDkgcG93ZXIgLTc2Ni42NTE4MjQgMzEzMDAgLT4gOC4zNzE4OTAxMUUrOTAyODcgSW5leGFjdCBSb3VuZGVkCit4cmVtMDA5IHJlbWFpbmRlciAtNzY2LjY1MTgyNCAzMTMwMC4zNjE5IC0+IC03NjYuNjUxODI0Cit4c3ViMDA5IHN1YnRyYWN0IC03NjYuNjUxODI0IDMxMzAwLjM2MTkgLT4gLTMyMDY3LjAxMzcgSW5leGFjdCBSb3VuZGVkCit4YWRkMDEwIGFkZCAtNTY3NDYuODY4OUUrOTM0OTgxOTQyIDQ3MTAwMjUyMS4gLT4gLTUuNjc0Njg2ODlFKzkzNDk4MTk0NiBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMTAgY29tcGFyZSAtNTY3NDYuODY4OUUrOTM0OTgxOTQyIDQ3MTAwMjUyMS4gLT4gLTEKK3hkaXYwMTAgZGl2aWRlIC01Njc0Ni44Njg5RSs5MzQ5ODE5NDIgNDcxMDAyNTIxLiAtPiAtMS4yMDQ4MTAzMEUrOTM0OTgxOTM4IEluZXhhY3QgUm91bmRlZAoreGR2aTAxMCBkaXZpZGVpbnQgLTU2NzQ2Ljg2ODlFKzkzNDk4MTk0MiA0NzEwMDI1MjEuIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDEwIG11bHRpcGx5IC01Njc0Ni44Njg5RSs5MzQ5ODE5NDIgNDcxMDAyNTIxLiAtPiAtMi42NzI3OTE4M0UrOTM0OTgxOTU1IEluZXhhY3QgUm91bmRlZAoreHBvdzAxMCBwb3dlciAtNTY3NDYuODY4OUUrOTM0OTgxOTQyIDQ3MTAwMjUyMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMDEwIHJlbWFpbmRlciAtNTY3NDYuODY4OUUrOTM0OTgxOTQyIDQ3MTAwMjUyMS4gLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwMTAgc3VidHJhY3QgLTU2NzQ2Ljg2ODlFKzkzNDk4MTk0MiA0NzEwMDI1MjEuIC0+IC01LjY3NDY4Njg5RSs5MzQ5ODE5NDYgSW5leGFjdCBSb3VuZGVkCit4YWRkMDExIGFkZCA0NTY0MTcxNjAgLTQxMzQ2LjEwMjQgLT4gNDU2Mzc1ODE0IEluZXhhY3QgUm91bmRlZAoreGNvbTAxMSBjb21wYXJlIDQ1NjQxNzE2MCAtNDEzNDYuMTAyNCAtPiAxCit4ZGl2MDExIGRpdmlkZSA0NTY0MTcxNjAgLTQxMzQ2LjEwMjQgLT4gLTExMDM4Ljk0MDQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDExIGRpdmlkZWludCA0NTY0MTcxNjAgLTQxMzQ2LjEwMjQgLT4gLTExMDM4Cit4bXVsMDExIG11bHRpcGx5IDQ1NjQxNzE2MCAtNDEzNDYuMTAyNCAtPiAtMS44ODcxMDcwNkUrMTMgSW5leGFjdCBSb3VuZGVkCit4cG93MDExIHBvd2VyIDQ1NjQxNzE2MCAtNDEzNDYgLT4gMS4wNDc2Njg2M0UtMzU4MDMwIEluZXhhY3QgUm91bmRlZAoreHJlbTAxMSByZW1haW5kZXIgNDU2NDE3MTYwIC00MTM0Ni4xMDI0IC0+IDM4ODgxLjcwODgKK3hzdWIwMTEgc3VidHJhY3QgNDU2NDE3MTYwIC00MTM0Ni4xMDI0IC0+IDQ1NjQ1ODUwNiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMTIgYWRkIDEwMjg5NS43MjIgLTIuNjIyMTQ4MjYgLT4gMTAyODkzLjEwMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMTIgY29tcGFyZSAxMDI4OTUuNzIyIC0yLjYyMjE0ODI2IC0+IDEKK3hkaXYwMTIgZGl2aWRlIDEwMjg5NS43MjIgLTIuNjIyMTQ4MjYgLT4gLTM5MjQxLjAwMDggSW5leGFjdCBSb3VuZGVkCit4ZHZpMDEyIGRpdmlkZWludCAxMDI4OTUuNzIyIC0yLjYyMjE0ODI2IC0+IC0zOTI0MQoreG11bDAxMiBtdWx0aXBseSAxMDI4OTUuNzIyIC0yLjYyMjE0ODI2IC0+IC0yNjk4MDcuODM4IEluZXhhY3QgUm91bmRlZAoreHBvdzAxMiBwb3dlciAxMDI4OTUuNzIyIC0zIC0+IDkuMTc5MjY3ODZFLTE2IEluZXhhY3QgUm91bmRlZAoreHJlbTAxMiByZW1haW5kZXIgMTAyODk1LjcyMiAtMi42MjIxNDgyNiAtPiAwLjAwMjEyOTM0Cit4c3ViMDEyIHN1YnRyYWN0IDEwMjg5NS43MjIgLTIuNjIyMTQ4MjYgLT4gMTAyODk4LjM0NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMTMgYWRkIDYxLjMwMzMzMzFFKzE1NzY0NDE0MSAtNTY3NzQwLjkxOEUtODkzNDM5NDU2IC0+IDYuMTMwMzMzMzFFKzE1NzY0NDE0MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMTMgY29tcGFyZSA2MS4zMDMzMzMxRSsxNTc2NDQxNDEgLTU2Nzc0MC45MThFLTg5MzQzOTQ1NiAtPiAxCit4ZGl2MDEzIGRpdmlkZSA2MS4zMDMzMzMxRSsxNTc2NDQxNDEgLTU2Nzc0MC45MThFLTg5MzQzOTQ1NiAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCit4ZHZpMDEzIGRpdmlkZWludCA2MS4zMDMzMzMxRSsxNTc2NDQxNDEgLTU2Nzc0MC45MThFLTg5MzQzOTQ1NiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDAxMyBtdWx0aXBseSA2MS4zMDMzMzMxRSsxNTc2NDQxNDEgLTU2Nzc0MC45MThFLTg5MzQzOTQ1NiAtPiAtMy40ODA0NDEwNkUtNzM1Nzk1MzA4IEluZXhhY3QgUm91bmRlZAoreHBvdzAxMyBwb3dlciA2MS4zMDMzMzMxRSsxNTc2NDQxNDEgLTYgLT4gMS44ODQwNjMyMkUtOTQ1ODY0ODU3IEluZXhhY3QgUm91bmRlZAoreHJlbTAxMyByZW1haW5kZXIgNjEuMzAzMzMzMUUrMTU3NjQ0MTQxIC01Njc3NDAuOTE4RS04OTM0Mzk0NTYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwMTMgc3VidHJhY3QgNjEuMzAzMzMzMUUrMTU3NjQ0MTQxIC01Njc3NDAuOTE4RS04OTM0Mzk0NTYgLT4gNi4xMzAzMzMzMUUrMTU3NjQ0MTQyIEluZXhhY3QgUm91bmRlZAoreGFkZDAxNCBhZGQgODAyMjMuMzg5NyA3MzkyMS4wMzgzRS00Njc3NzI2NzUgLT4gODAyMjMuMzg5NyBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMTQgY29tcGFyZSA4MDIyMy4zODk3IDczOTIxLjAzODNFLTQ2Nzc3MjY3NSAtPiAxCit4ZGl2MDE0IGRpdmlkZSA4MDIyMy4zODk3IDczOTIxLjAzODNFLTQ2Nzc3MjY3NSAtPiAxLjA4NTI1Nzg5RSs0Njc3NzI2NzUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDE0IGRpdmlkZWludCA4MDIyMy4zODk3IDczOTIxLjAzODNFLTQ2Nzc3MjY3NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDAxNCBtdWx0aXBseSA4MDIyMy4zODk3IDczOTIxLjAzODNFLTQ2Nzc3MjY3NSAtPiA1LjkzMDE5NjI2RS00Njc3NzI2NjYgSW5leGFjdCBSb3VuZGVkCit4cG93MDE0IHBvd2VyIDgwMjIzLjM4OTcgNyAtPiAyLjEzODQ4OTE5RSszNCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMTQgcmVtYWluZGVyIDgwMjIzLjM4OTcgNzM5MjEuMDM4M0UtNDY3NzcyNjc1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDE0IHN1YnRyYWN0IDgwMjIzLjM4OTcgNzM5MjEuMDM4M0UtNDY3NzcyNjc1IC0+IDgwMjIzLjM4OTcgSW5leGFjdCBSb3VuZGVkCit4YWRkMDE1IGFkZCAtNjU0NjQ1Ljk1NCAtOS4xMjUzNTc1MiAtPiAtNjU0NjU1LjA3OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMTUgY29tcGFyZSAtNjU0NjQ1Ljk1NCAtOS4xMjUzNTc1MiAtPiAtMQoreGRpdjAxNSBkaXZpZGUgLTY1NDY0NS45NTQgLTkuMTI1MzU3NTIgLT4gNzE3MzkuMjExNiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMTUgZGl2aWRlaW50IC02NTQ2NDUuOTU0IC05LjEyNTM1NzUyIC0+IDcxNzM5Cit4bXVsMDE1IG11bHRpcGx5IC02NTQ2NDUuOTU0IC05LjEyNTM1NzUyIC0+IDU5NzM4NzguMzggSW5leGFjdCBSb3VuZGVkCit4cG93MDE1IHBvd2VyIC02NTQ2NDUuOTU0IC05IC0+IC00LjUyODM2NjkwRS01MyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMTUgcmVtYWluZGVyIC02NTQ2NDUuOTU0IC05LjEyNTM1NzUyIC0+IC0xLjkzMDg3MjcyCit4c3ViMDE1IHN1YnRyYWN0IC02NTQ2NDUuOTU0IC05LjEyNTM1NzUyIC0+IC02NTQ2MzYuODI5IEluZXhhY3QgUm91bmRlZAoreGFkZDAxNiBhZGQgNjMuMTkxNzc3MkUtNzA2MDE0NjM0IC03LjU2MjUzMjU3RS0xMzg1NzkyMzQgLT4gLTcuNTYyNTMyNTdFLTEzODU3OTIzNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMTYgY29tcGFyZSA2My4xOTE3NzcyRS03MDYwMTQ2MzQgLTcuNTYyNTMyNTdFLTEzODU3OTIzNCAtPiAxCit4ZGl2MDE2IGRpdmlkZSA2My4xOTE3NzcyRS03MDYwMTQ2MzQgLTcuNTYyNTMyNTdFLTEzODU3OTIzNCAtPiAtOC4zNTU5MDE0OUUtNTY3NDM1NDAwIEluZXhhY3QgUm91bmRlZAoreGR2aTAxNiBkaXZpZGVpbnQgNjMuMTkxNzc3MkUtNzA2MDE0NjM0IC03LjU2MjUzMjU3RS0xMzg1NzkyMzQgLT4gLTAKK3htdWwwMTYgbXVsdGlwbHkgNjMuMTkxNzc3MkUtNzA2MDE0NjM0IC03LjU2MjUzMjU3RS0xMzg1NzkyMzQgLT4gLTQuNzc4ODk4NzNFLTg0NDU5Mzg2NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMTYgcG93ZXIgNjMuMTkxNzc3MkUtNzA2MDE0NjM0IC04IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTAxNiByZW1haW5kZXIgNjMuMTkxNzc3MkUtNzA2MDE0NjM0IC03LjU2MjUzMjU3RS0xMzg1NzkyMzQgLT4gNi4zMTkxNzc3MkUtNzA2MDE0NjMzCit4c3ViMDE2IHN1YnRyYWN0IDYzLjE5MTc3NzJFLTcwNjAxNDYzNCAtNy41NjI1MzI1N0UtMTM4NTc5MjM0IC0+IDcuNTYyNTMyNTdFLTEzODU3OTIzNCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMTcgYWRkIC0zOTY3NC43MTkwIDI0OTA2MDcuNzggLT4gMjQ1MDkzMy4wNiBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMTcgY29tcGFyZSAtMzk2NzQuNzE5MCAyNDkwNjA3Ljc4IC0+IC0xCit4ZGl2MDE3IGRpdmlkZSAtMzk2NzQuNzE5MCAyNDkwNjA3Ljc4IC0+IC0wLjAxNTkyOTczMzggSW5leGFjdCBSb3VuZGVkCit4ZHZpMDE3IGRpdmlkZWludCAtMzk2NzQuNzE5MCAyNDkwNjA3Ljc4IC0+IC0wCit4bXVsMDE3IG11bHRpcGx5IC0zOTY3NC43MTkwIDI0OTA2MDcuNzggLT4gLTkuODgxNDE2MzhFKzEwIEluZXhhY3QgUm91bmRlZAoreHBvdzAxNyBwb3dlciAtMzk2NzQuNzE5MCAyNDkwNjA4IC0+IDIuNTUwMzIzMjlFKzExNDUzMDk1IEluZXhhY3QgUm91bmRlZAoreHJlbTAxNyByZW1haW5kZXIgLTM5Njc0LjcxOTAgMjQ5MDYwNy43OCAtPiAtMzk2NzQuNzE5MAoreHN1YjAxNyBzdWJ0cmFjdCAtMzk2NzQuNzE5MCAyNDkwNjA3Ljc4IC0+IC0yNTMwMjgyLjUwIEluZXhhY3QgUm91bmRlZAoreGFkZDAxOCBhZGQgLTMzNjQuNTk3MzdFLTYwMDM2MzY4MSA4OTY0ODcuNDUxIC0+IDg5NjQ4Ny40NTEgSW5leGFjdCBSb3VuZGVkCit4Y29tMDE4IGNvbXBhcmUgLTMzNjQuNTk3MzdFLTYwMDM2MzY4MSA4OTY0ODcuNDUxIC0+IC0xCit4ZGl2MDE4IGRpdmlkZSAtMzM2NC41OTczN0UtNjAwMzYzNjgxIDg5NjQ4Ny40NTEgLT4gLTMuNzUzMDg5MjBFLTYwMDM2MzY4NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMTggZGl2aWRlaW50IC0zMzY0LjU5NzM3RS02MDAzNjM2ODEgODk2NDg3LjQ1MSAtPiAtMAoreG11bDAxOCBtdWx0aXBseSAtMzM2NC41OTczN0UtNjAwMzYzNjgxIDg5NjQ4Ny40NTEgLT4gLTMuMDE2MzE5MzJFLTYwMDM2MzY3MiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMTggcG93ZXIgLTMzNjQuNTk3MzdFLTYwMDM2MzY4MSA4OTY0ODcgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTAxOCByZW1haW5kZXIgLTMzNjQuNTk3MzdFLTYwMDM2MzY4MSA4OTY0ODcuNDUxIC0+IC0zLjM2NDU5NzM3RS02MDAzNjM2NzgKK3hzdWIwMTggc3VidHJhY3QgLTMzNjQuNTk3MzdFLTYwMDM2MzY4MSA4OTY0ODcuNDUxIC0+IC04OTY0ODcuNDUxIEluZXhhY3QgUm91bmRlZAoreGFkZDAxOSBhZGQgLTY0MTM4LjA1NzggMzE3NTkwMTEuM0UrNjk3NDg4MzQyIC0+IDMuMTc1OTAxMTNFKzY5NzQ4ODM0OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMTkgY29tcGFyZSAtNjQxMzguMDU3OCAzMTc1OTAxMS4zRSs2OTc0ODgzNDIgLT4gLTEKK3hkaXYwMTkgZGl2aWRlIC02NDEzOC4wNTc4IDMxNzU5MDExLjNFKzY5NzQ4ODM0MiAtPiAtMi4wMTk1MjMxM0UtNjk3NDg4MzQ1IEluZXhhY3QgUm91bmRlZAoreGR2aTAxOSBkaXZpZGVpbnQgLTY0MTM4LjA1NzggMzE3NTkwMTEuM0UrNjk3NDg4MzQyIC0+IC0wCit4bXVsMDE5IG11bHRpcGx5IC02NDEzOC4wNTc4IDMxNzU5MDExLjNFKzY5NzQ4ODM0MiAtPiAtMi4wMzY5NjEzMEUrNjk3NDg4MzU0IEluZXhhY3QgUm91bmRlZAoreHBvdzAxOSBwb3dlciAtNjQxMzguMDU3OCAzIC0+IC0yLjYzODQ0MTE2RSsxNCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMTkgcmVtYWluZGVyIC02NDEzOC4wNTc4IDMxNzU5MDExLjNFKzY5NzQ4ODM0MiAtPiAtNjQxMzguMDU3OAoreHN1YjAxOSBzdWJ0cmFjdCAtNjQxMzguMDU3OCAzMTc1OTAxMS4zRSs2OTc0ODgzNDIgLT4gLTMuMTc1OTAxMTNFKzY5NzQ4ODM0OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMjAgYWRkIDYxMzk5Ljg1MjcgLTY0MzQ0NDg0LjUgLT4gLTY0MjgzMDg0LjYgSW5leGFjdCBSb3VuZGVkCit4Y29tMDIwIGNvbXBhcmUgNjEzOTkuODUyNyAtNjQzNDQ0ODQuNSAtPiAxCit4ZGl2MDIwIGRpdmlkZSA2MTM5OS44NTI3IC02NDM0NDQ4NC41IC0+IC0wLjAwMDk1NDIzNjQ1NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMjAgZGl2aWRlaW50IDYxMzk5Ljg1MjcgLTY0MzQ0NDg0LjUgLT4gLTAKK3htdWwwMjAgbXVsdGlwbHkgNjEzOTkuODUyNyAtNjQzNDQ0ODQuNSAtPiAtMy45NTA3NDE4N0UrMTIgSW5leGFjdCBSb3VuZGVkCit4cG93MDIwIHBvd2VyIDYxMzk5Ljg1MjcgLTY0MzQ0NDg1IC0+IDEuMjczNzg4NDJFLTMwODA5MjE2MSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMjAgcmVtYWluZGVyIDYxMzk5Ljg1MjcgLTY0MzQ0NDg0LjUgLT4gNjEzOTkuODUyNworeHN1YjAyMCBzdWJ0cmFjdCA2MTM5OS44NTI3IC02NDM0NDQ4NC41IC0+IDY0NDA1ODg0LjQgSW5leGFjdCBSb3VuZGVkCit4YWRkMDIxIGFkZCAtNzIyOTYwLjIwNCAtMjYxNTQ1OTkuOCAtPiAtMjY4Nzc1NjAuMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMjEgY29tcGFyZSAtNzIyOTYwLjIwNCAtMjYxNTQ1OTkuOCAtPiAxCit4ZGl2MDIxIGRpdmlkZSAtNzIyOTYwLjIwNCAtMjYxNTQ1OTkuOCAtPiAwLjAyNzY0MTc5OTUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDIxIGRpdmlkZWludCAtNzIyOTYwLjIwNCAtMjYxNTQ1OTkuOCAtPiAwCit4bXVsMDIxIG11bHRpcGx5IC03MjI5NjAuMjA0IC0yNjE1NDU5OS44IC0+IDEuODkwODczNDhFKzEzIEluZXhhY3QgUm91bmRlZAoreHBvdzAyMSBwb3dlciAtNzIyOTYwLjIwNCAtMjYxNTQ2MDAgLT4gNS4zNDIzNjEzOUUtMTUzMjQyNzk0IEluZXhhY3QgUm91bmRlZAoreHJlbTAyMSByZW1haW5kZXIgLTcyMjk2MC4yMDQgLTI2MTU0NTk5LjggLT4gLTcyMjk2MC4yMDQKK3hzdWIwMjEgc3VidHJhY3QgLTcyMjk2MC4yMDQgLTI2MTU0NTk5LjggLT4gMjU0MzE2MzkuNiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMjIgYWRkIDkuNDcxMDk5NTlFKzIzMDU2NTA5MyA3MzM1NDcyMy4yIC0+IDkuNDcxMDk5NTlFKzIzMDU2NTA5MyBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMjIgY29tcGFyZSA5LjQ3MTA5OTU5RSsyMzA1NjUwOTMgNzMzNTQ3MjMuMiAtPiAxCit4ZGl2MDIyIGRpdmlkZSA5LjQ3MTA5OTU5RSsyMzA1NjUwOTMgNzMzNTQ3MjMuMiAtPiAxLjI5MTEzNjk4RSsyMzA1NjUwODYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDIyIGRpdmlkZWludCA5LjQ3MTA5OTU5RSsyMzA1NjUwOTMgNzMzNTQ3MjMuMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDAyMiBtdWx0aXBseSA5LjQ3MTA5OTU5RSsyMzA1NjUwOTMgNzMzNTQ3MjMuMiAtPiA2Ljk0NzQ5ODg5RSsyMzA1NjUxMDEgSW5leGFjdCBSb3VuZGVkCit4cG93MDIyIHBvd2VyIDkuNDcxMDk5NTlFKzIzMDU2NTA5MyA3MzM1NDcyMyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMjIgcmVtYWluZGVyIDkuNDcxMDk5NTlFKzIzMDU2NTA5MyA3MzM1NDcyMy4yIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDIyIHN1YnRyYWN0IDkuNDcxMDk5NTlFKzIzMDU2NTA5MyA3MzM1NDcyMy4yIC0+IDkuNDcxMDk5NTlFKzIzMDU2NTA5MyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMjMgYWRkIDQzLjc0NTYyNDUgNTQ3NDQxOTU2LiAtPiA1NDc0NDIwMDAgSW5leGFjdCBSb3VuZGVkCit4Y29tMDIzIGNvbXBhcmUgNDMuNzQ1NjI0NSA1NDc0NDE5NTYuIC0+IC0xCit4ZGl2MDIzIGRpdmlkZSA0My43NDU2MjQ1IDU0NzQ0MTk1Ni4gLT4gNy45OTA5MTU1N0UtOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMjMgZGl2aWRlaW50IDQzLjc0NTYyNDUgNTQ3NDQxOTU2LiAtPiAwCit4bXVsMDIzIG11bHRpcGx5IDQzLjc0NTYyNDUgNTQ3NDQxOTU2LiAtPiAyLjM5NDgxOTAyRSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMjMgcG93ZXIgNDMuNzQ1NjI0NSA1NDc0NDE5NTYgLT4gMi45MTc0MjM5MUUrODk4MzE2NDU4IEluZXhhY3QgUm91bmRlZAoreHJlbTAyMyByZW1haW5kZXIgNDMuNzQ1NjI0NSA1NDc0NDE5NTYuIC0+IDQzLjc0NTYyNDUKK3hzdWIwMjMgc3VidHJhY3QgNDMuNzQ1NjI0NSA1NDc0NDE5NTYuIC0+IC01NDc0NDE5MTIgSW5leGFjdCBSb3VuZGVkCit4YWRkMDI0IGFkZCAtNzMxNTA1NDJFLTI0MjAxNzM5MCAtOC4xNTg2OTk1NCAtPiAtOC4xNTg2OTk1NCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMjQgY29tcGFyZSAtNzMxNTA1NDJFLTI0MjAxNzM5MCAtOC4xNTg2OTk1NCAtPiAxCit4ZGl2MDI0IGRpdmlkZSAtNzMxNTA1NDJFLTI0MjAxNzM5MCAtOC4xNTg2OTk1NCAtPiA4Ljk2NTk1NjExRS0yNDIwMTczODQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDI0IGRpdmlkZWludCAtNzMxNTA1NDJFLTI0MjAxNzM5MCAtOC4xNTg2OTk1NCAtPiAwCit4bXVsMDI0IG11bHRpcGx5IC03MzE1MDU0MkUtMjQyMDE3MzkwIC04LjE1ODY5OTU0IC0+IDUuOTY4MTMyOTNFLTI0MjAxNzM4MiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMjQgcG93ZXIgLTczMTUwNTQyRS0yNDIwMTczOTAgLTggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMDI0IHJlbWFpbmRlciAtNzMxNTA1NDJFLTI0MjAxNzM5MCAtOC4xNTg2OTk1NCAtPiAtNy4zMTUwNTQyRS0yNDIwMTczODMKK3hzdWIwMjQgc3VidHJhY3QgLTczMTUwNTQyRS0yNDIwMTczOTAgLTguMTU4Njk5NTQgLT4gOC4xNTg2OTk1NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMjUgYWRkIDIwMTUuNjIxMDlFKzI5OTg5NzU5NiAtMTE3ODg5MTYuMSAtPiAyLjAxNTYyMTA5RSsyOTk4OTc1OTkgSW5leGFjdCBSb3VuZGVkCit4Y29tMDI1IGNvbXBhcmUgMjAxNS42MjEwOUUrMjk5ODk3NTk2IC0xMTc4ODkxNi4xIC0+IDEKK3hkaXYwMjUgZGl2aWRlIDIwMTUuNjIxMDlFKzI5OTg5NzU5NiAtMTE3ODg5MTYuMSAtPiAtMS43MDk3NTk0N0UrMjk5ODk3NTkyIEluZXhhY3QgUm91bmRlZAoreGR2aTAyNSBkaXZpZGVpbnQgMjAxNS42MjEwOUUrMjk5ODk3NTk2IC0xMTc4ODkxNi4xIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDI1IG11bHRpcGx5IDIwMTUuNjIxMDlFKzI5OTg5NzU5NiAtMTE3ODg5MTYuMSAtPiAtMi4zNzYxOTg3OUUrMjk5ODk3NjA2IEluZXhhY3QgUm91bmRlZAoreHBvdzAyNSBwb3dlciAyMDE1LjYyMTA5RSsyOTk4OTc1OTYgLTExNzg4OTE2IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTAyNSByZW1haW5kZXIgMjAxNS42MjEwOUUrMjk5ODk3NTk2IC0xMTc4ODkxNi4xIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDI1IHN1YnRyYWN0IDIwMTUuNjIxMDlFKzI5OTg5NzU5NiAtMTE3ODg5MTYuMSAtPiAyLjAxNTYyMTA5RSsyOTk4OTc1OTkgSW5leGFjdCBSb3VuZGVkCit4YWRkMDI2IGFkZCAyOS40OTgxMTQgLTI2NDg2NDUxIC0+IC0yNjQ4NjQyMS41IEluZXhhY3QgUm91bmRlZAoreGNvbTAyNiBjb21wYXJlIDI5LjQ5ODExNCAtMjY0ODY0NTEgLT4gMQoreGRpdjAyNiBkaXZpZGUgMjkuNDk4MTE0IC0yNjQ4NjQ1MSAtPiAtMC4wMDAwMDExMTM3MDU4MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMjYgZGl2aWRlaW50IDI5LjQ5ODExNCAtMjY0ODY0NTEgLT4gLTAKK3htdWwwMjYgbXVsdGlwbHkgMjkuNDk4MTE0IC0yNjQ4NjQ1MSAtPiAtNzgxMzAwMzUxIEluZXhhY3QgUm91bmRlZAoreHBvdzAyNiBwb3dlciAyOS40OTgxMTQgLTI2NDg2NDUxIC0+IDQuMjIyNTI1MTNFLTM4OTI5NjM0IEluZXhhY3QgUm91bmRlZAoreHJlbTAyNiByZW1haW5kZXIgMjkuNDk4MTE0IC0yNjQ4NjQ1MSAtPiAyOS40OTgxMTQKK3hzdWIwMjYgc3VidHJhY3QgMjkuNDk4MTE0IC0yNjQ4NjQ1MSAtPiAyNjQ4NjQ4MC41IEluZXhhY3QgUm91bmRlZAoreGFkZDAyNyBhZGQgMjQ0Mzc1MDQzLkUrMTMwODQwODc4IC05LjQ0NTIyMDI5IC0+IDIuNDQzNzUwNDNFKzEzMDg0MDg4NiBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMjcgY29tcGFyZSAyNDQzNzUwNDMuRSsxMzA4NDA4NzggLTkuNDQ1MjIwMjkgLT4gMQoreGRpdjAyNyBkaXZpZGUgMjQ0Mzc1MDQzLkUrMTMwODQwODc4IC05LjQ0NTIyMDI5IC0+IC0yLjU4NzI4NzkxRSsxMzA4NDA4ODUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDI3IGRpdmlkZWludCAyNDQzNzUwNDMuRSsxMzA4NDA4NzggLTkuNDQ1MjIwMjkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwMjcgbXVsdGlwbHkgMjQ0Mzc1MDQzLkUrMTMwODQwODc4IC05LjQ0NTIyMDI5IC0+IC0yLjMwODE3NjExRSsxMzA4NDA4ODcgSW5leGFjdCBSb3VuZGVkCit4cG93MDI3IHBvd2VyIDI0NDM3NTA0My5FKzEzMDg0MDg3OCAtOSAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0wMjcgcmVtYWluZGVyIDI0NDM3NTA0My5FKzEzMDg0MDg3OCAtOS40NDUyMjAyOSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjAyNyBzdWJ0cmFjdCAyNDQzNzUwNDMuRSsxMzA4NDA4NzggLTkuNDQ1MjIwMjkgLT4gMi40NDM3NTA0M0UrMTMwODQwODg2IEluZXhhY3QgUm91bmRlZAoreGFkZDAyOCBhZGQgLTM0OTM4OC43NTkgLTE5NjIxNS43NzYgLT4gLTU0NTYwNC41MzUKK3hjb20wMjggY29tcGFyZSAtMzQ5Mzg4Ljc1OSAtMTk2MjE1Ljc3NiAtPiAtMQoreGRpdjAyOCBkaXZpZGUgLTM0OTM4OC43NTkgLTE5NjIxNS43NzYgLT4gMS43ODA2MzU0MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMjggZGl2aWRlaW50IC0zNDkzODguNzU5IC0xOTYyMTUuNzc2IC0+IDEKK3htdWwwMjggbXVsdGlwbHkgLTM0OTM4OC43NTkgLTE5NjIxNS43NzYgLT4gNi44NTU1NTg2NUUrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93MDI4IHBvd2VyIC0zNDkzODguNzU5IC0xOTYyMTYgLT4gMS4yNDU1MTc1MkUtMTA4NzY4NiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMjggcmVtYWluZGVyIC0zNDkzODguNzU5IC0xOTYyMTUuNzc2IC0+IC0xNTMxNzIuOTgzCit4c3ViMDI4IHN1YnRyYWN0IC0zNDkzODguNzU5IC0xOTYyMTUuNzc2IC0+IC0xNTMxNzIuOTgzCit4YWRkMDI5IGFkZCAtNzA5MDUxMTIuNCAtOTEzNTM5NjguOCAtPiAtMTYyMjU5MDgxIEluZXhhY3QgUm91bmRlZAoreGNvbTAyOSBjb21wYXJlIC03MDkwNTExMi40IC05MTM1Mzk2OC44IC0+IDEKK3hkaXYwMjkgZGl2aWRlIC03MDkwNTExMi40IC05MTM1Mzk2OC44IC0+IDAuNzc2MTU3OTg2IEluZXhhY3QgUm91bmRlZAoreGR2aTAyOSBkaXZpZGVpbnQgLTcwOTA1MTEyLjQgLTkxMzUzOTY4LjggLT4gMAoreG11bDAyOSBtdWx0aXBseSAtNzA5MDUxMTIuNCAtOTEzNTM5NjguOCAtPiA2LjQ3NzQ2MzQzRSsxNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMjkgcG93ZXIgLTcwOTA1MTEyLjQgLTkxMzUzOTY5IC0+IC0zLjA1OTQ0NzQxRS03MTcxOTA1NTQgSW5leGFjdCBSb3VuZGVkCit4cmVtMDI5IHJlbWFpbmRlciAtNzA5MDUxMTIuNCAtOTEzNTM5NjguOCAtPiAtNzA5MDUxMTIuNAoreHN1YjAyOSBzdWJ0cmFjdCAtNzA5MDUxMTIuNCAtOTEzNTM5NjguOCAtPiAyMDQ0ODg1Ni40Cit4YWRkMDMwIGFkZCAtMjI1MDk0LjI4IC04OC43NzIzNTQyIC0+IC0yMjUxODMuMDUyIEluZXhhY3QgUm91bmRlZAoreGNvbTAzMCBjb21wYXJlIC0yMjUwOTQuMjggLTg4Ljc3MjM1NDIgLT4gLTEKK3hkaXYwMzAgZGl2aWRlIC0yMjUwOTQuMjggLTg4Ljc3MjM1NDIgLT4gMjUzNS42MzQ5MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMzAgZGl2aWRlaW50IC0yMjUwOTQuMjggLTg4Ljc3MjM1NDIgLT4gMjUzNQoreG11bDAzMCBtdWx0aXBseSAtMjI1MDk0LjI4IC04OC43NzIzNTQyIC0+IDE5OTgyMTQ5LjIgSW5leGFjdCBSb3VuZGVkCit4cG93MDMwIHBvd2VyIC0yMjUwOTQuMjggLTg5IC0+IC00LjM2MDc2OTY1RS00NzcgSW5leGFjdCBSb3VuZGVkCit4cmVtMDMwIHJlbWFpbmRlciAtMjI1MDk0LjI4IC04OC43NzIzNTQyIC0+IC01Ni4zNjIxMDMwCit4c3ViMDMwIHN1YnRyYWN0IC0yMjUwOTQuMjggLTg4Ljc3MjM1NDIgLT4gLTIyNTAwNS41MDggSW5leGFjdCBSb3VuZGVkCit4YWRkMDMxIGFkZCA1MC40NDQyMzQwIDgyLjc5NTIxNjlFKzg4MDEyMDc1OSAtPiA4LjI3OTUyMTY5RSs4ODAxMjA3NjAgSW5leGFjdCBSb3VuZGVkCit4Y29tMDMxIGNvbXBhcmUgNTAuNDQ0MjM0MCA4Mi43OTUyMTY5RSs4ODAxMjA3NTkgLT4gLTEKK3hkaXYwMzEgZGl2aWRlIDUwLjQ0NDIzNDAgODIuNzk1MjE2OUUrODgwMTIwNzU5IC0+IDYuMDkyNjUwNzVFLTg4MDEyMDc2MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMzEgZGl2aWRlaW50IDUwLjQ0NDIzNDAgODIuNzk1MjE2OUUrODgwMTIwNzU5IC0+IDAKK3htdWwwMzEgbXVsdGlwbHkgNTAuNDQ0MjM0MCA4Mi43OTUyMTY5RSs4ODAxMjA3NTkgLT4gNC4xNzY1NDEzMEUrODgwMTIwNzYyIEluZXhhY3QgUm91bmRlZAoreHBvdzAzMSBwb3dlciA1MC40NDQyMzQwIDggLT4gNC4xOTI2ODUxOEUrMTMgSW5leGFjdCBSb3VuZGVkCit4cmVtMDMxIHJlbWFpbmRlciA1MC40NDQyMzQwIDgyLjc5NTIxNjlFKzg4MDEyMDc1OSAtPiA1MC40NDQyMzQwCit4c3ViMDMxIHN1YnRyYWN0IDUwLjQ0NDIzNDAgODIuNzk1MjE2OUUrODgwMTIwNzU5IC0+IC04LjI3OTUyMTY5RSs4ODAxMjA3NjAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDMyIGFkZCAtMzIzMTEuOTAzNyA4LjM2Mzc5NDQ5IC0+IC0zMjMwMy41Mzk5IEluZXhhY3QgUm91bmRlZAoreGNvbTAzMiBjb21wYXJlIC0zMjMxMS45MDM3IDguMzYzNzk0NDkgLT4gLTEKK3hkaXYwMzIgZGl2aWRlIC0zMjMxMS45MDM3IDguMzYzNzk0NDkgLT4gLTM4NjMuMzA2NzUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDMyIGRpdmlkZWludCAtMzIzMTEuOTAzNyA4LjM2Mzc5NDQ5IC0+IC0zODYzCit4bXVsMDMyIG11bHRpcGx5IC0zMjMxMS45MDM3IDguMzYzNzk0NDkgLT4gLTI3MDI1MC4xMjIgSW5leGFjdCBSb3VuZGVkCit4cG93MDMyIHBvd2VyIC0zMjMxMS45MDM3IDggLT4gMS4xODgyMjk2MEUrMzYgSW5leGFjdCBSb3VuZGVkCit4cmVtMDMyIHJlbWFpbmRlciAtMzIzMTEuOTAzNyA4LjM2Mzc5NDQ5IC0+IC0yLjU2NTU4NTEzCit4c3ViMDMyIHN1YnRyYWN0IC0zMjMxMS45MDM3IDguMzYzNzk0NDkgLT4gLTMyMzIwLjI2NzUgSW5leGFjdCBSb3VuZGVkCit4YWRkMDMzIGFkZCA2MTUzOTYxNTYuRSs1NDk4OTUyOTEgLTI5NTMwMjQ3LjQgLT4gNi4xNTM5NjE1NkUrNTQ5ODk1Mjk5IEluZXhhY3QgUm91bmRlZAoreGNvbTAzMyBjb21wYXJlIDYxNTM5NjE1Ni5FKzU0OTg5NTI5MSAtMjk1MzAyNDcuNCAtPiAxCit4ZGl2MDMzIGRpdmlkZSA2MTUzOTYxNTYuRSs1NDk4OTUyOTEgLTI5NTMwMjQ3LjQgLT4gLTIuMDgzOTUxOTFFKzU0OTg5NTI5MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMzMgZGl2aWRlaW50IDYxNTM5NjE1Ni5FKzU0OTg5NTI5MSAtMjk1MzAyNDcuNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDAzMyBtdWx0aXBseSA2MTUzOTYxNTYuRSs1NDk4OTUyOTEgLTI5NTMwMjQ3LjQgLT4gLTEuODE3MjgwMDdFKzU0OTg5NTMwNyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMzMgcG93ZXIgNjE1Mzk2MTU2LkUrNTQ5ODk1MjkxIC0yOTUzMDI0NyAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0wMzMgcmVtYWluZGVyIDYxNTM5NjE1Ni5FKzU0OTg5NTI5MSAtMjk1MzAyNDcuNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjAzMyBzdWJ0cmFjdCA2MTUzOTYxNTYuRSs1NDk4OTUyOTEgLTI5NTMwMjQ3LjQgLT4gNi4xNTM5NjE1NkUrNTQ5ODk1Mjk5IEluZXhhY3QgUm91bmRlZAoreGFkZDAzNCBhZGQgNTkyLjE0MjE3M0UtNDE5OTQxNDE2IC0zLjQ2MDc5MTA5RS04NDQwMTE4NDUgLT4gNS45MjE0MjE3M0UtNDE5OTQxNDE0IEluZXhhY3QgUm91bmRlZAoreGNvbTAzNCBjb21wYXJlIDU5Mi4xNDIxNzNFLTQxOTk0MTQxNiAtMy40NjA3OTEwOUUtODQ0MDExODQ1IC0+IDEKK3hkaXYwMzQgZGl2aWRlIDU5Mi4xNDIxNzNFLTQxOTk0MTQxNiAtMy40NjA3OTEwOUUtODQ0MDExODQ1IC0+IC0xLjcxMTAwMjM2RSs0MjQwNzA0MzEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDM0IGRpdmlkZWludCA1OTIuMTQyMTczRS00MTk5NDE0MTYgLTMuNDYwNzkxMDlFLTg0NDAxMTg0NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDAzNCBtdWx0aXBseSA1OTIuMTQyMTczRS00MTk5NDE0MTYgLTMuNDYwNzkxMDlFLTg0NDAxMTg0NSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cG93MDM0IHBvd2VyIDU5Mi4xNDIxNzNFLTQxOTk0MTQxNiAtMyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMzQgcmVtYWluZGVyIDU5Mi4xNDIxNzNFLTQxOTk0MTQxNiAtMy40NjA3OTEwOUUtODQ0MDExODQ1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDM0IHN1YnRyYWN0IDU5Mi4xNDIxNzNFLTQxOTk0MTQxNiAtMy40NjA3OTEwOUUtODQ0MDExODQ1IC0+IDUuOTIxNDIxNzNFLTQxOTk0MTQxNCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMzUgYWRkIDg0OS41MTU5OTNFLTg3ODQ0NjQ3MyAtMTAzOS4wODc3OCAtPiAtMTAzOS4wODc3OCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMzUgY29tcGFyZSA4NDkuNTE1OTkzRS04Nzg0NDY0NzMgLTEwMzkuMDg3NzggLT4gMQoreGRpdjAzNSBkaXZpZGUgODQ5LjUxNTk5M0UtODc4NDQ2NDczIC0xMDM5LjA4Nzc4IC0+IC04LjE3NTU5NDExRS04Nzg0NDY0NzQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDM1IGRpdmlkZWludCA4NDkuNTE1OTkzRS04Nzg0NDY0NzMgLTEwMzkuMDg3NzggLT4gLTAKK3htdWwwMzUgbXVsdGlwbHkgODQ5LjUxNTk5M0UtODc4NDQ2NDczIC0xMDM5LjA4Nzc4IC0+IC04LjgyNzIxNjg3RS04Nzg0NDY0NjggSW5leGFjdCBSb3VuZGVkCit4cG93MDM1IHBvd2VyIDg0OS41MTU5OTNFLTg3ODQ0NjQ3MyAtMTAzOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wMzUgcmVtYWluZGVyIDg0OS41MTU5OTNFLTg3ODQ0NjQ3MyAtMTAzOS4wODc3OCAtPiA4LjQ5NTE1OTkzRS04Nzg0NDY0NzEKK3hzdWIwMzUgc3VidHJhY3QgODQ5LjUxNTk5M0UtODc4NDQ2NDczIC0xMDM5LjA4Nzc4IC0+IDEwMzkuMDg3NzggSW5leGFjdCBSb3VuZGVkCit4YWRkMDM2IGFkZCAyMTMzNjE3ODkgLTU5OS42NDQ4NTEgLT4gMjEzMzYxMTg5IEluZXhhY3QgUm91bmRlZAoreGNvbTAzNiBjb21wYXJlIDIxMzM2MTc4OSAtNTk5LjY0NDg1MSAtPiAxCit4ZGl2MDM2IGRpdmlkZSAyMTMzNjE3ODkgLTU5OS42NDQ4NTEgLT4gLTM1NTgxMy41OTMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDM2IGRpdmlkZWludCAyMTMzNjE3ODkgLTU5OS42NDQ4NTEgLT4gLTM1NTgxMworeG11bDAzNiBtdWx0aXBseSAyMTMzNjE3ODkgLTU5OS42NDQ4NTEgLT4gLTEuMjc5NDEyOThFKzExIEluZXhhY3QgUm91bmRlZAoreHBvdzAzNiBwb3dlciAyMTMzNjE3ODkgLTYwMCAtPiAzLjM4ODU0Njg0RS00OTk4IEluZXhhY3QgUm91bmRlZAoreHJlbTAzNiByZW1haW5kZXIgMjEzMzYxNzg5IC01OTkuNjQ0ODUxIC0+IDM1NS42MzExMzcKK3hzdWIwMzYgc3VidHJhY3QgMjEzMzYxNzg5IC01OTkuNjQ0ODUxIC0+IDIxMzM2MjM4OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwMzcgYWRkIC03OTU1MjI1NTUuIC0yOTguMDM3NzAyIC0+IC03OTU1MjI4NTMgSW5leGFjdCBSb3VuZGVkCit4Y29tMDM3IGNvbXBhcmUgLTc5NTUyMjU1NS4gLTI5OC4wMzc3MDIgLT4gLTEKK3hkaXYwMzcgZGl2aWRlIC03OTU1MjI1NTUuIC0yOTguMDM3NzAyIC0+IDI2NjkyMDEuMDggSW5leGFjdCBSb3VuZGVkCit4ZHZpMDM3IGRpdmlkZWludCAtNzk1NTIyNTU1LiAtMjk4LjAzNzcwMiAtPiAyNjY5MjAxCit4bXVsMDM3IG11bHRpcGx5IC03OTU1MjI1NTUuIC0yOTguMDM3NzAyIC0+IDIuMzcwOTU3MTRFKzExIEluZXhhY3QgUm91bmRlZAoreHBvdzAzNyBwb3dlciAtNzk1NTIyNTU1LiAtMjk4IC0+IDQuMDMyMzI3MTJFLTI2NTMgSW5leGFjdCBSb3VuZGVkCit4cmVtMDM3IHJlbWFpbmRlciAtNzk1NTIyNTU1LiAtMjk4LjAzNzcwMiAtPiAtMjIuNzgzODk4Cit4c3ViMDM3IHN1YnRyYWN0IC03OTU1MjI1NTUuIC0yOTguMDM3NzAyIC0+IC03OTU1MjIyNTcgSW5leGFjdCBSb3VuZGVkCit4YWRkMDM4IGFkZCAtNTAxMjYwNjUxLiAtODc2MTg5My4wRS02ODkyODE0NzkgLT4gLTUwMTI2MDY1MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20wMzggY29tcGFyZSAtNTAxMjYwNjUxLiAtODc2MTg5My4wRS02ODkyODE0NzkgLT4gLTEKK3hkaXYwMzggZGl2aWRlIC01MDEyNjA2NTEuIC04NzYxODkzLjBFLTY4OTI4MTQ3OSAtPiA1LjcyMDkxNzI4RSs2ODkyODE0ODAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDM4IGRpdmlkZWludCAtNTAxMjYwNjUxLiAtODc2MTg5My4wRS02ODkyODE0NzkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwMzggbXVsdGlwbHkgLTUwMTI2MDY1MS4gLTg3NjE4OTMuMEUtNjg5MjgxNDc5IC0+IDQuMzkxOTkyMTlFLTY4OTI4MTQ2NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMzggcG93ZXIgLTUwMTI2MDY1MS4gLTkgLT4gLTUuMDA1MjY5NjFFLTc5IEluZXhhY3QgUm91bmRlZAoreHJlbTAzOCByZW1haW5kZXIgLTUwMTI2MDY1MS4gLTg3NjE4OTMuMEUtNjg5MjgxNDc5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDM4IHN1YnRyYWN0IC01MDEyNjA2NTEuIC04NzYxODkzLjBFLTY4OTI4MTQ3OSAtPiAtNTAxMjYwNjUxIEluZXhhY3QgUm91bmRlZAoreGFkZDAzOSBhZGQgLTEuNzA3ODExMDVFLTg0ODg4OTAyMyAzNjUwNDc2OS40IC0+IDM2NTA0NzY5LjQgSW5leGFjdCBSb3VuZGVkCit4Y29tMDM5IGNvbXBhcmUgLTEuNzA3ODExMDVFLTg0ODg4OTAyMyAzNjUwNDc2OS40IC0+IC0xCit4ZGl2MDM5IGRpdmlkZSAtMS43MDc4MTEwNUUtODQ4ODg5MDIzIDM2NTA0NzY5LjQgLT4gLTQuNjc4MzIzMDdFLTg0ODg4OTAzMSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwMzkgZGl2aWRlaW50IC0xLjcwNzgxMTA1RS04NDg4ODkwMjMgMzY1MDQ3NjkuNCAtPiAtMAoreG11bDAzOSBtdWx0aXBseSAtMS43MDc4MTEwNUUtODQ4ODg5MDIzIDM2NTA0NzY5LjQgLT4gLTYuMjM0MzI0ODZFLTg0ODg4OTAxNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwMzkgcG93ZXIgLTEuNzA3ODExMDVFLTg0ODg4OTAyMyAzNjUwNDc2OSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDM5IHJlbWFpbmRlciAtMS43MDc4MTEwNUUtODQ4ODg5MDIzIDM2NTA0NzY5LjQgLT4gLTEuNzA3ODExMDVFLTg0ODg4OTAyMworeHN1YjAzOSBzdWJ0cmFjdCAtMS43MDc4MTEwNUUtODQ4ODg5MDIzIDM2NTA0NzY5LjQgLT4gLTM2NTA0NzY5LjQgSW5leGFjdCBSb3VuZGVkCit4YWRkMDQwIGFkZCAtNTI5MC41NDk4NEUtNDkwNjI2Njc2IDg0MjUzNTI1NCAtPiA4NDI1MzUyNTQgSW5leGFjdCBSb3VuZGVkCit4Y29tMDQwIGNvbXBhcmUgLTUyOTAuNTQ5ODRFLTQ5MDYyNjY3NiA4NDI1MzUyNTQgLT4gLTEKK3hkaXYwNDAgZGl2aWRlIC01MjkwLjU0OTg0RS00OTA2MjY2NzYgODQyNTM1MjU0IC0+IC02LjI3OTMyMTYyRS00OTA2MjY2ODIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDQwIGRpdmlkZWludCAtNTI5MC41NDk4NEUtNDkwNjI2Njc2IDg0MjUzNTI1NCAtPiAtMAoreG11bDA0MCBtdWx0aXBseSAtNTI5MC41NDk4NEUtNDkwNjI2Njc2IDg0MjUzNTI1NCAtPiAtNC40NTc0NzQ3NUUtNDkwNjI2NjY0IEluZXhhY3QgUm91bmRlZAoreHBvdzA0MCBwb3dlciAtNTI5MC41NDk4NEUtNDkwNjI2Njc2IDg0MjUzNTI1NCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0wNDAgcmVtYWluZGVyIC01MjkwLjU0OTg0RS00OTA2MjY2NzYgODQyNTM1MjU0IC0+IC01LjI5MDU0OTg0RS00OTA2MjY2NzMKK3hzdWIwNDAgc3VidHJhY3QgLTUyOTAuNTQ5ODRFLTQ5MDYyNjY3NiA4NDI1MzUyNTQgLT4gLTg0MjUzNTI1NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNDEgYWRkIDYwOC4zMTgyNUUrNTM1MjY4MTIwIC01OTYwOS4wOTkzIC0+IDYuMDgzMTgyNTBFKzUzNTI2ODEyMiBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNDEgY29tcGFyZSA2MDguMzE4MjVFKzUzNTI2ODEyMCAtNTk2MDkuMDk5MyAtPiAxCit4ZGl2MDQxIGRpdmlkZSA2MDguMzE4MjVFKzUzNTI2ODEyMCAtNTk2MDkuMDk5MyAtPiAtMS4wMjA1MTI0MEUrNTM1MjY4MTE4IEluZXhhY3QgUm91bmRlZAoreGR2aTA0MSBkaXZpZGVpbnQgNjA4LjMxODI1RSs1MzUyNjgxMjAgLTU5NjA5LjA5OTMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwNDEgbXVsdGlwbHkgNjA4LjMxODI1RSs1MzUyNjgxMjAgLTU5NjA5LjA5OTMgLT4gLTMuNjI2MTMwMzBFKzUzNTI2ODEyNyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNDEgcG93ZXIgNjA4LjMxODI1RSs1MzUyNjgxMjAgLTU5NjA5IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTA0MSByZW1haW5kZXIgNjA4LjMxODI1RSs1MzUyNjgxMjAgLTU5NjA5LjA5OTMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwNDEgc3VidHJhY3QgNjA4LjMxODI1RSs1MzUyNjgxMjAgLTU5NjA5LjA5OTMgLT4gNi4wODMxODI1MEUrNTM1MjY4MTIyIEluZXhhY3QgUm91bmRlZAoreGFkZDA0MiBhZGQgLTQ2MjkwMzUuMzEgLTE2Ny44ODQzOTggLT4gLTQ2MjkyMDMuMTkgSW5leGFjdCBSb3VuZGVkCit4Y29tMDQyIGNvbXBhcmUgLTQ2MjkwMzUuMzEgLTE2Ny44ODQzOTggLT4gLTEKK3hkaXYwNDIgZGl2aWRlIC00NjI5MDM1LjMxIC0xNjcuODg0Mzk4IC0+IDI3NTcyLjc1NDYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDQyIGRpdmlkZWludCAtNDYyOTAzNS4zMSAtMTY3Ljg4NDM5OCAtPiAyNzU3MgoreG11bDA0MiBtdWx0aXBseSAtNDYyOTAzNS4zMSAtMTY3Ljg4NDM5OCAtPiA3NzcxNDI4MDYgSW5leGFjdCBSb3VuZGVkCit4cG93MDQyIHBvd2VyIC00NjI5MDM1LjMxIC0xNjggLT4gMS41NzYxNDgzMUUtMTEyMCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNDIgcmVtYWluZGVyIC00NjI5MDM1LjMxIC0xNjcuODg0Mzk4IC0+IC0xMjYuNjg4MzQ0Cit4c3ViMDQyIHN1YnRyYWN0IC00NjI5MDM1LjMxIC0xNjcuODg0Mzk4IC0+IC00NjI4ODY3LjQzIEluZXhhY3QgUm91bmRlZAoreGFkZDA0MyBhZGQgLTY2NTI3Mzc4LiAtNzA2NDAwMjY4LiAtPiAtNzcyOTI3NjQ2Cit4Y29tMDQzIGNvbXBhcmUgLTY2NTI3Mzc4LiAtNzA2NDAwMjY4LiAtPiAxCit4ZGl2MDQzIGRpdmlkZSAtNjY1MjczNzguIC03MDY0MDAyNjguIC0+IDAuMDk0MTc4MDE5MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNDMgZGl2aWRlaW50IC02NjUyNzM3OC4gLTcwNjQwMDI2OC4gLT4gMAoreG11bDA0MyBtdWx0aXBseSAtNjY1MjczNzguIC03MDY0MDAyNjguIC0+IDQuNjk5NDk1NzZFKzE2IEluZXhhY3QgUm91bmRlZAoreHBvdzA0MyBwb3dlciAtNjY1MjczNzguIC03MDY0MDAyNjggLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDQzIHJlbWFpbmRlciAtNjY1MjczNzguIC03MDY0MDAyNjguIC0+IC02NjUyNzM3OAoreHN1YjA0MyBzdWJ0cmFjdCAtNjY1MjczNzguIC03MDY0MDAyNjguIC0+IDYzOTg3Mjg5MAoreGFkZDA0NCBhZGQgLTI1MTA0OTcuNTMgMzcyODgyNDYyLiAtPiAzNzAzNzE5NjQgSW5leGFjdCBSb3VuZGVkCit4Y29tMDQ0IGNvbXBhcmUgLTI1MTA0OTcuNTMgMzcyODgyNDYyLiAtPiAtMQoreGRpdjA0NCBkaXZpZGUgLTI1MTA0OTcuNTMgMzcyODgyNDYyLiAtPiAtMC4wMDY3MzI2Nzc5NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNDQgZGl2aWRlaW50IC0yNTEwNDk3LjUzIDM3Mjg4MjQ2Mi4gLT4gLTAKK3htdWwwNDQgbXVsdGlwbHkgLTI1MTA0OTcuNTMgMzcyODgyNDYyLiAtPiAtOS4zNjEyMDUwMEUrMTQgSW5leGFjdCBSb3VuZGVkCit4cG93MDQ0IHBvd2VyIC0yNTEwNDk3LjUzIDM3Mjg4MjQ2MiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNDQgcmVtYWluZGVyIC0yNTEwNDk3LjUzIDM3Mjg4MjQ2Mi4gLT4gLTI1MTA0OTcuNTMKK3hzdWIwNDQgc3VidHJhY3QgLTI1MTA0OTcuNTMgMzcyODgyNDYyLiAtPiAtMzc1MzkyOTYwIEluZXhhY3QgUm91bmRlZAoreGFkZDA0NSBhZGQgMTM2LjI1NTM5M0UrNTMzMjk5NjEgLTUzNDk0LjcyMDFFKzcyMDA1ODA2MCAtPiAtNS4zNDk0NzIwMUUrNzIwMDU4MDY0IEluZXhhY3QgUm91bmRlZAoreGNvbTA0NSBjb21wYXJlIDEzNi4yNTUzOTNFKzUzMzI5OTYxIC01MzQ5NC43MjAxRSs3MjAwNTgwNjAgLT4gMQoreGRpdjA0NSBkaXZpZGUgMTM2LjI1NTM5M0UrNTMzMjk5NjEgLTUzNDk0LjcyMDFFKzcyMDA1ODA2MCAtPiAtMi41NDcwODExNUUtNjY2NzI4MTAyIEluZXhhY3QgUm91bmRlZAoreGR2aTA0NSBkaXZpZGVpbnQgMTM2LjI1NTM5M0UrNTMzMjk5NjEgLTUzNDk0LjcyMDFFKzcyMDA1ODA2MCAtPiAtMAoreG11bDA0NSBtdWx0aXBseSAxMzYuMjU1MzkzRSs1MzMyOTk2MSAtNTM0OTQuNzIwMUUrNzIwMDU4MDYwIC0+IC03LjI4ODk0NDExRSs3NzMzODgwMjcgSW5leGFjdCBSb3VuZGVkCit4cG93MDQ1IHBvd2VyIDEzNi4yNTUzOTNFKzUzMzI5OTYxIC01IC0+IDIuMTI5MjczNzNFLTI2NjY0OTgxNiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNDUgcmVtYWluZGVyIDEzNi4yNTUzOTNFKzUzMzI5OTYxIC01MzQ5NC43MjAxRSs3MjAwNTgwNjAgLT4gMS4zNjI1NTM5M0UrNTMzMjk5NjMKK3hzdWIwNDUgc3VidHJhY3QgMTM2LjI1NTM5M0UrNTMzMjk5NjEgLTUzNDk0LjcyMDFFKzcyMDA1ODA2MCAtPiA1LjM0OTQ3MjAxRSs3MjAwNTgwNjQgSW5leGFjdCBSb3VuZGVkCit4YWRkMDQ2IGFkZCAtODc2NjczLjEwMCAtNjE1MC45MjI2NiAtPiAtODgyODI0LjAyMyBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNDYgY29tcGFyZSAtODc2NjczLjEwMCAtNjE1MC45MjI2NiAtPiAtMQoreGRpdjA0NiBkaXZpZGUgLTg3NjY3My4xMDAgLTYxNTAuOTIyNjYgLT4gMTQyLjUyNzA4OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNDYgZGl2aWRlaW50IC04NzY2NzMuMTAwIC02MTUwLjkyMjY2IC0+IDE0MgoreG11bDA0NiBtdWx0aXBseSAtODc2NjczLjEwMCAtNjE1MC45MjI2NiAtPiA1LjM5MjM0ODQ0RSs5IEluZXhhY3QgUm91bmRlZAoreHBvdzA0NiBwb3dlciAtODc2NjczLjEwMCAtNjE1MSAtPiAtNC4wMzExMTc3NEUtMzY1NTUgSW5leGFjdCBSb3VuZGVkCit4cmVtMDQ2IHJlbWFpbmRlciAtODc2NjczLjEwMCAtNjE1MC45MjI2NiAtPiAtMzI0Mi4wODIyOAoreHN1YjA0NiBzdWJ0cmFjdCAtODc2NjczLjEwMCAtNjE1MC45MjI2NiAtPiAtODcwNTIyLjE3NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNDcgYWRkIC0yLjQ1MTUxNzk3RSs5MTEzMDYxMTcgMjcyMzU3NzEgLT4gLTIuNDUxNTE3OTdFKzkxMTMwNjExNyBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNDcgY29tcGFyZSAtMi40NTE1MTc5N0UrOTExMzA2MTE3IDI3MjM1NzcxIC0+IC0xCit4ZGl2MDQ3IGRpdmlkZSAtMi40NTE1MTc5N0UrOTExMzA2MTE3IDI3MjM1NzcxIC0+IC05LjAwMTA5NjI4RSs5MTEzMDYxMDkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDQ3IGRpdmlkZWludCAtMi40NTE1MTc5N0UrOTExMzA2MTE3IDI3MjM1NzcxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDQ3IG11bHRpcGx5IC0yLjQ1MTUxNzk3RSs5MTEzMDYxMTcgMjcyMzU3NzEgLT4gLTYuNjc2ODk4MjBFKzkxMTMwNjEyNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNDcgcG93ZXIgLTIuNDUxNTE3OTdFKzkxMTMwNjExNyAyNzIzNTc3MSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMDQ3IHJlbWFpbmRlciAtMi40NTE1MTc5N0UrOTExMzA2MTE3IDI3MjM1NzcxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDQ3IHN1YnRyYWN0IC0yLjQ1MTUxNzk3RSs5MTEzMDYxMTcgMjcyMzU3NzEgLT4gLTIuNDUxNTE3OTdFKzkxMTMwNjExNyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNDggYWRkIC05LjE1MTE3NTUxIC00Ljk1MTAwNzMzRS0zMTQ1MTEzMjYgLT4gLTkuMTUxMTc1NTEgSW5leGFjdCBSb3VuZGVkCit4Y29tMDQ4IGNvbXBhcmUgLTkuMTUxMTc1NTEgLTQuOTUxMDA3MzNFLTMxNDUxMTMyNiAtPiAtMQoreGRpdjA0OCBkaXZpZGUgLTkuMTUxMTc1NTEgLTQuOTUxMDA3MzNFLTMxNDUxMTMyNiAtPiAxLjg0ODM0NjE4RSszMTQ1MTEzMjYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDQ4IGRpdmlkZWludCAtOS4xNTExNzU1MSAtNC45NTEwMDczM0UtMzE0NTExMzI2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDQ4IG11bHRpcGx5IC05LjE1MTE3NTUxIC00Ljk1MTAwNzMzRS0zMTQ1MTEzMjYgLT4gNC41MzA3NTM3MEUtMzE0NTExMzI1IEluZXhhY3QgUm91bmRlZAoreHBvdzA0OCBwb3dlciAtOS4xNTExNzU1MSAtNSAtPiAtMC4wMDAwMTU1ODE3MjY1IEluZXhhY3QgUm91bmRlZAoreHJlbTA0OCByZW1haW5kZXIgLTkuMTUxMTc1NTEgLTQuOTUxMDA3MzNFLTMxNDUxMTMyNiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjA0OCBzdWJ0cmFjdCAtOS4xNTExNzU1MSAtNC45NTEwMDczM0UtMzE0NTExMzI2IC0+IC05LjE1MTE3NTUxIEluZXhhY3QgUm91bmRlZAoreGFkZDA0OSBhZGQgMy42MTg5MDQ1M0UtOTg1NjA2MTI4IDMwNjY0NDE2LiAtPiAzMDY2NDQxNi4wIEluZXhhY3QgUm91bmRlZAoreGNvbTA0OSBjb21wYXJlIDMuNjE4OTA0NTNFLTk4NTYwNjEyOCAzMDY2NDQxNi4gLT4gLTEKK3hkaXYwNDkgZGl2aWRlIDMuNjE4OTA0NTNFLTk4NTYwNjEyOCAzMDY2NDQxNi4gLT4gMS4xODAxNjQxOEUtOTg1NjA2MTM1IEluZXhhY3QgUm91bmRlZAoreGR2aTA0OSBkaXZpZGVpbnQgMy42MTg5MDQ1M0UtOTg1NjA2MTI4IDMwNjY0NDE2LiAtPiAwCit4bXVsMDQ5IG11bHRpcGx5IDMuNjE4OTA0NTNFLTk4NTYwNjEyOCAzMDY2NDQxNi4gLT4gMS4xMDk3MTU5NEUtOTg1NjA2MTIwIEluZXhhY3QgUm91bmRlZAoreHBvdzA0OSBwb3dlciAzLjYxODkwNDUzRS05ODU2MDYxMjggMzA2NjQ0MTYgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDQ5IHJlbWFpbmRlciAzLjYxODkwNDUzRS05ODU2MDYxMjggMzA2NjQ0MTYuIC0+IDMuNjE4OTA0NTNFLTk4NTYwNjEyOAoreHN1YjA0OSBzdWJ0cmFjdCAzLjYxODkwNDUzRS05ODU2MDYxMjggMzA2NjQ0MTYuIC0+IC0zMDY2NDQxNi4wIEluZXhhY3QgUm91bmRlZAoreGFkZDA1MCBhZGQgLTI1NzY3NDYwMkUrMjE2NzIzMzgyIC03MDgyMDk1OS40IC0+IC0yLjU3Njc0NjAyRSsyMTY3MjMzOTAgSW5leGFjdCBSb3VuZGVkCit4Y29tMDUwIGNvbXBhcmUgLTI1NzY3NDYwMkUrMjE2NzIzMzgyIC03MDgyMDk1OS40IC0+IC0xCit4ZGl2MDUwIGRpdmlkZSAtMjU3Njc0NjAyRSsyMTY3MjMzODIgLTcwODIwOTU5LjQgLT4gMy42MzgzOTQ2OEUrMjE2NzIzMzgyIEluZXhhY3QgUm91bmRlZAoreGR2aTA1MCBkaXZpZGVpbnQgLTI1NzY3NDYwMkUrMjE2NzIzMzgyIC03MDgyMDk1OS40IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDUwIG11bHRpcGx5IC0yNTc2NzQ2MDJFKzIxNjcyMzM4MiAtNzA4MjA5NTkuNCAtPiAxLjgyNDg3NjI1RSsyMTY3MjMzOTggSW5leGFjdCBSb3VuZGVkCit4cG93MDUwIHBvd2VyIC0yNTc2NzQ2MDJFKzIxNjcyMzM4MiAtNzA4MjA5NTkgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTA1MCByZW1haW5kZXIgLTI1NzY3NDYwMkUrMjE2NzIzMzgyIC03MDgyMDk1OS40IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDUwIHN1YnRyYWN0IC0yNTc2NzQ2MDJFKzIxNjcyMzM4MiAtNzA4MjA5NTkuNCAtPiAtMi41NzY3NDYwMkUrMjE2NzIzMzkwIEluZXhhY3QgUm91bmRlZAoreGFkZDA1MSBhZGQgMjE4Njk5LjIwNiA1NTY5NDQyNDEuIC0+IDU1NzE2Mjk0MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNTEgY29tcGFyZSAyMTg2OTkuMjA2IDU1Njk0NDI0MS4gLT4gLTEKK3hkaXYwNTEgZGl2aWRlIDIxODY5OS4yMDYgNTU2OTQ0MjQxLiAtPiAwLjAwMDM5MjY3NzAyMiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNTEgZGl2aWRlaW50IDIxODY5OS4yMDYgNTU2OTQ0MjQxLiAtPiAwCit4bXVsMDUxIG11bHRpcGx5IDIxODY5OS4yMDYgNTU2OTQ0MjQxLiAtPiAxLjIxODAzMjYzRSsxNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNTEgcG93ZXIgMjE4Njk5LjIwNiA1NTY5NDQyNDEgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMDUxIHJlbWFpbmRlciAyMTg2OTkuMjA2IDU1Njk0NDI0MS4gLT4gMjE4Njk5LjIwNgoreHN1YjA1MSBzdWJ0cmFjdCAyMTg2OTkuMjA2IDU1Njk0NDI0MS4gLT4gLTU1NjcyNTU0MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNTIgYWRkIDEwNjIxMTcxNi4gLTM0NTY3OTMuNzQgLT4gMTAyNzU0OTIyIEluZXhhY3QgUm91bmRlZAoreGNvbTA1MiBjb21wYXJlIDEwNjIxMTcxNi4gLTM0NTY3OTMuNzQgLT4gMQoreGRpdjA1MiBkaXZpZGUgMTA2MjExNzE2LiAtMzQ1Njc5My43NCAtPiAtMzAuNzI1NTAwMCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNTIgZGl2aWRlaW50IDEwNjIxMTcxNi4gLTM0NTY3OTMuNzQgLT4gLTMwCit4bXVsMDUyIG11bHRpcGx5IDEwNjIxMTcxNi4gLTM0NTY3OTMuNzQgLT4gLTMuNjcxNTE5OTVFKzE0IEluZXhhY3QgUm91bmRlZAoreHBvdzA1MiBwb3dlciAxMDYyMTE3MTYuIC0zNDU2Nzk0IC0+IDIuMDcyMjU1ODFFLTI3NzQ0ODI1IEluZXhhY3QgUm91bmRlZAoreHJlbTA1MiByZW1haW5kZXIgMTA2MjExNzE2LiAtMzQ1Njc5My43NCAtPiAyNTA3OTAzLjgwCit4c3ViMDUyIHN1YnRyYWN0IDEwNjIxMTcxNi4gLTM0NTY3OTMuNzQgLT4gMTA5NjY4NTEwIEluZXhhY3QgUm91bmRlZAoreGFkZDA1MyBhZGQgMS4yNTAxODA3OCAzOTk4NTYuNzYzRS03MjY4MTY3NDAgLT4gMS4yNTAxODA3OCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNTMgY29tcGFyZSAxLjI1MDE4MDc4IDM5OTg1Ni43NjNFLTcyNjgxNjc0MCAtPiAxCit4ZGl2MDUzIGRpdmlkZSAxLjI1MDE4MDc4IDM5OTg1Ni43NjNFLTcyNjgxNjc0MCAtPiAzLjEyNjU3MTU1RSs3MjY4MTY3MzQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDUzIGRpdmlkZWludCAxLjI1MDE4MDc4IDM5OTg1Ni43NjNFLTcyNjgxNjc0MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDA1MyBtdWx0aXBseSAxLjI1MDE4MDc4IDM5OTg1Ni43NjNFLTcyNjgxNjc0MCAtPiA0Ljk5ODkzMjQwRS03MjY4MTY3MzUgSW5leGFjdCBSb3VuZGVkCit4cG93MDUzIHBvd2VyIDEuMjUwMTgwNzggNCAtPiAyLjQ0MjgxODkwIEluZXhhY3QgUm91bmRlZAoreHJlbTA1MyByZW1haW5kZXIgMS4yNTAxODA3OCAzOTk4NTYuNzYzRS03MjY4MTY3NDAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwNTMgc3VidHJhY3QgMS4yNTAxODA3OCAzOTk4NTYuNzYzRS03MjY4MTY3NDAgLT4gMS4yNTAxODA3OCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNTQgYWRkIDM2NC45OTgxMSAtNDYyMjIuMDUwNSAtPiAtNDU4NTcuMDUyNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNTQgY29tcGFyZSAzNjQuOTk4MTEgLTQ2MjIyLjA1MDUgLT4gMQoreGRpdjA1NCBkaXZpZGUgMzY0Ljk5ODExIC00NjIyMi4wNTA1IC0+IC0wLjAwNzg5NjYyMzA2IEluZXhhY3QgUm91bmRlZAoreGR2aTA1NCBkaXZpZGVpbnQgMzY0Ljk5ODExIC00NjIyMi4wNTA1IC0+IC0wCit4bXVsMDU0IG11bHRpcGx5IDM2NC45OTgxMSAtNDYyMjIuMDUwNSAtPiAtMTY4NzA5NjEuMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNTQgcG93ZXIgMzY0Ljk5ODExIC00NjIyMiAtPiA2LjM1NTcwODU2RS0xMTg0MzUgSW5leGFjdCBSb3VuZGVkCit4cmVtMDU0IHJlbWFpbmRlciAzNjQuOTk4MTEgLTQ2MjIyLjA1MDUgLT4gMzY0Ljk5ODExCit4c3ViMDU0IHN1YnRyYWN0IDM2NC45OTgxMSAtNDYyMjIuMDUwNSAtPiA0NjU4Ny4wNDg2IEluZXhhY3QgUm91bmRlZAoreGFkZDA1NSBhZGQgLTM5MjIxNzU3Ni4gLTk1ODM2NDA5NiAtPiAtMS4zNTA1ODE2N0UrOSBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNTUgY29tcGFyZSAtMzkyMjE3NTc2LiAtOTU4MzY0MDk2IC0+IDEKK3hkaXYwNTUgZGl2aWRlIC0zOTIyMTc1NzYuIC05NTgzNjQwOTYgLT4gMC40MDkyNTczNzcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDU1IGRpdmlkZWludCAtMzkyMjE3NTc2LiAtOTU4MzY0MDk2IC0+IDAKK3htdWwwNTUgbXVsdGlwbHkgLTM5MjIxNzU3Ni4gLTk1ODM2NDA5NiAtPiAzLjc1ODg3MjQzRSsxNyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNTUgcG93ZXIgLTM5MjIxNzU3Ni4gLTk1ODM2NDA5NiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0wNTUgcmVtYWluZGVyIC0zOTIyMTc1NzYuIC05NTgzNjQwOTYgLT4gLTM5MjIxNzU3NgoreHN1YjA1NSBzdWJ0cmFjdCAtMzkyMjE3NTc2LiAtOTU4MzY0MDk2IC0+IDU2NjE0NjUyMAoreGFkZDA1NiBhZGQgMTY5NjAxMjg1IDcxNDUyNi42MzkgLT4gMTcwMzE1ODEyIEluZXhhY3QgUm91bmRlZAoreGNvbTA1NiBjb21wYXJlIDE2OTYwMTI4NSA3MTQ1MjYuNjM5IC0+IDEKK3hkaXYwNTYgZGl2aWRlIDE2OTYwMTI4NSA3MTQ1MjYuNjM5IC0+IDIzNy4zNjE3MzggSW5leGFjdCBSb3VuZGVkCit4ZHZpMDU2IGRpdmlkZWludCAxNjk2MDEyODUgNzE0NTI2LjYzOSAtPiAyMzcKK3htdWwwNTYgbXVsdGlwbHkgMTY5NjAxMjg1IDcxNDUyNi42MzkgLT4gMS4yMTE4NDYzNkUrMTQgSW5leGFjdCBSb3VuZGVkCit4cG93MDU2IHBvd2VyIDE2OTYwMTI4NSA3MTQ1MjcgLT4gMi4wNjA1MjQ0NEUrNTg4MDE0OSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNTYgcmVtYWluZGVyIDE2OTYwMTI4NSA3MTQ1MjYuNjM5IC0+IDI1ODQ3MS41NTcKK3hzdWIwNTYgc3VidHJhY3QgMTY5NjAxMjg1IDcxNDUyNi42MzkgLT4gMTY4ODg2NzU4IEluZXhhY3QgUm91bmRlZAoreGFkZDA1NyBhZGQgLTY3NC4wOTQ1NTJFKzU4Njk0NDMxOSA2MzU0LjI2NjhFKzU4OTY1NzI2NiAtPiA2LjM1NDI2NjgwRSs1ODk2NTcyNjkgSW5leGFjdCBSb3VuZGVkCit4Y29tMDU3IGNvbXBhcmUgLTY3NC4wOTQ1NTJFKzU4Njk0NDMxOSA2MzU0LjI2NjhFKzU4OTY1NzI2NiAtPiAtMQoreGRpdjA1NyBkaXZpZGUgLTY3NC4wOTQ1NTJFKzU4Njk0NDMxOSA2MzU0LjI2NjhFKzU4OTY1NzI2NiAtPiAtMS4wNjA4NTM0MEUtMjcxMjk0OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNTcgZGl2aWRlaW50IC02NzQuMDk0NTUyRSs1ODY5NDQzMTkgNjM1NC4yNjY4RSs1ODk2NTcyNjYgLT4gLTAKK3htdWwwNTcgbXVsdGlwbHkgLTY3NC4wOTQ1NTJFKzU4Njk0NDMxOSA2MzU0LjI2NjhFKzU4OTY1NzI2NiAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCit4cG93MDU3IHBvd2VyIC02NzQuMDk0NTUyRSs1ODY5NDQzMTkgNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNTcgcmVtYWluZGVyIC02NzQuMDk0NTUyRSs1ODY5NDQzMTkgNjM1NC4yNjY4RSs1ODk2NTcyNjYgLT4gLTYuNzQwOTQ1NTJFKzU4Njk0NDMyMQoreHN1YjA1NyBzdWJ0cmFjdCAtNjc0LjA5NDU1MkUrNTg2OTQ0MzE5IDYzNTQuMjY2OEUrNTg5NjU3MjY2IC0+IC02LjM1NDI2NjgwRSs1ODk2NTcyNjkgSW5leGFjdCBSb3VuZGVkCit4YWRkMDU4IGFkZCAxNTE3OTUxNjNFLTM3MTcyNzE4MiAtNDg4LjA5Nzg4RS03Mzg4NTIyNDUgLT4gMS41MTc5NTE2M0UtMzcxNzI3MTc0IEluZXhhY3QgUm91bmRlZAoreGNvbTA1OCBjb21wYXJlIDE1MTc5NTE2M0UtMzcxNzI3MTgyIC00ODguMDk3ODhFLTczODg1MjI0NSAtPiAxCit4ZGl2MDU4IGRpdmlkZSAxNTE3OTUxNjNFLTM3MTcyNzE4MiAtNDg4LjA5Nzg4RS03Mzg4NTIyNDUgLT4gLTMuMTA5OTMyODVFKzM2NzEyNTA2OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNTggZGl2aWRlaW50IDE1MTc5NTE2M0UtMzcxNzI3MTgyIC00ODguMDk3ODhFLTczODg1MjI0NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDA1OCBtdWx0aXBseSAxNTE3OTUxNjNFLTM3MTcyNzE4MiAtNDg4LjA5Nzg4RS03Mzg4NTIyNDUgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHBvdzA1OCBwb3dlciAxNTE3OTUxNjNFLTM3MTcyNzE4MiAtNSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNTggcmVtYWluZGVyIDE1MTc5NTE2M0UtMzcxNzI3MTgyIC00ODguMDk3ODhFLTczODg1MjI0NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjA1OCBzdWJ0cmFjdCAxNTE3OTUxNjNFLTM3MTcyNzE4MiAtNDg4LjA5Nzg4RS03Mzg4NTIyNDUgLT4gMS41MTc5NTE2M0UtMzcxNzI3MTc0IEluZXhhY3QgUm91bmRlZAoreGFkZDA1OSBhZGQgLTc0Ni4yOTMzODYgOTI3NzQ5LjY0NyAtPiA5MjcwMDMuMzU0IEluZXhhY3QgUm91bmRlZAoreGNvbTA1OSBjb21wYXJlIC03NDYuMjkzMzg2IDkyNzc0OS42NDcgLT4gLTEKK3hkaXYwNTkgZGl2aWRlIC03NDYuMjkzMzg2IDkyNzc0OS42NDcgLT4gLTAuMDAwODA0NDEyNDcxIEluZXhhY3QgUm91bmRlZAoreGR2aTA1OSBkaXZpZGVpbnQgLTc0Ni4yOTMzODYgOTI3NzQ5LjY0NyAtPiAtMAoreG11bDA1OSBtdWx0aXBseSAtNzQ2LjI5MzM4NiA5Mjc3NDkuNjQ3IC0+IC02OTIzNzM0MjUgSW5leGFjdCBSb3VuZGVkCit4cG93MDU5IHBvd2VyIC03NDYuMjkzMzg2IDkyNzc1MCAtPiA3LjQ5Mjc4NzQxRSsyNjY1MzQxIEluZXhhY3QgUm91bmRlZAoreHJlbTA1OSByZW1haW5kZXIgLTc0Ni4yOTMzODYgOTI3NzQ5LjY0NyAtPiAtNzQ2LjI5MzM4NgoreHN1YjA1OSBzdWJ0cmFjdCAtNzQ2LjI5MzM4NiA5Mjc3NDkuNjQ3IC0+IC05Mjg0OTUuOTQwIEluZXhhY3QgUm91bmRlZAoreGFkZDA2MCBhZGQgODg4OTQ2NDcxRSsyNDEzMzE1OTIgLTIzNTczOS41OTUgLT4gOC44ODk0NjQ3MUUrMjQxMzMxNjAwIEluZXhhY3QgUm91bmRlZAoreGNvbTA2MCBjb21wYXJlIDg4ODk0NjQ3MUUrMjQxMzMxNTkyIC0yMzU3MzkuNTk1IC0+IDEKK3hkaXYwNjAgZGl2aWRlIDg4ODk0NjQ3MUUrMjQxMzMxNTkyIC0yMzU3MzkuNTk1IC0+IC0zLjc3MDg4MzE3RSsyNDEzMzE1OTUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDYwIGRpdmlkZWludCA4ODg5NDY0NzFFKzI0MTMzMTU5MiAtMjM1NzM5LjU5NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDA2MCBtdWx0aXBseSA4ODg5NDY0NzFFKzI0MTMzMTU5MiAtMjM1NzM5LjU5NSAtPiAtMi4wOTU1OTg4MUUrMjQxMzMxNjA2IEluZXhhY3QgUm91bmRlZAoreHBvdzA2MCBwb3dlciA4ODg5NDY0NzFFKzI0MTMzMTU5MiAtMjM1NzQwIC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTA2MCByZW1haW5kZXIgODg4OTQ2NDcxRSsyNDEzMzE1OTIgLTIzNTczOS41OTUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwNjAgc3VidHJhY3QgODg4OTQ2NDcxRSsyNDEzMzE1OTIgLTIzNTczOS41OTUgLT4gOC44ODk0NjQ3MUUrMjQxMzMxNjAwIEluZXhhY3QgUm91bmRlZAoreGFkZDA2MSBhZGQgNi42NDM3NzI0OSA3OTE2MS4xMDcwRSs2MTk0NTM3NzYgLT4gNy45MTYxMTA3MEUrNjE5NDUzNzgwIEluZXhhY3QgUm91bmRlZAoreGNvbTA2MSBjb21wYXJlIDYuNjQzNzcyNDkgNzkxNjEuMTA3MEUrNjE5NDUzNzc2IC0+IC0xCit4ZGl2MDYxIGRpdmlkZSA2LjY0Mzc3MjQ5IDc5MTYxLjEwNzBFKzYxOTQ1Mzc3NiAtPiA4LjM5MjcyMzA3RS02MTk0NTM3ODEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDYxIGRpdmlkZWludCA2LjY0Mzc3MjQ5IDc5MTYxLjEwNzBFKzYxOTQ1Mzc3NiAtPiAwCit4bXVsMDYxIG11bHRpcGx5IDYuNjQzNzcyNDkgNzkxNjEuMTA3MEUrNjE5NDUzNzc2IC0+IDUuMjU5MjgzODVFKzYxOTQ1Mzc4MSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNjEgcG93ZXIgNi42NDM3NzI0OSA4IC0+IDM3OTU5MjguNDQgSW5leGFjdCBSb3VuZGVkCit4cmVtMDYxIHJlbWFpbmRlciA2LjY0Mzc3MjQ5IDc5MTYxLjEwNzBFKzYxOTQ1Mzc3NiAtPiA2LjY0Mzc3MjQ5Cit4c3ViMDYxIHN1YnRyYWN0IDYuNjQzNzcyNDkgNzkxNjEuMTA3MEUrNjE5NDUzNzc2IC0+IC03LjkxNjExMDcwRSs2MTk0NTM3ODAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDYyIGFkZCAzMTQ2LjY2NTcxRS0zMTMzNzMzNjYgODguNTI4MjAxMCAtPiA4OC41MjgyMDEwIEluZXhhY3QgUm91bmRlZAoreGNvbTA2MiBjb21wYXJlIDMxNDYuNjY1NzFFLTMxMzM3MzM2NiA4OC41MjgyMDEwIC0+IC0xCit4ZGl2MDYyIGRpdmlkZSAzMTQ2LjY2NTcxRS0zMTMzNzMzNjYgODguNTI4MjAxMCAtPiAzLjU1NDQyMTg0RS0zMTMzNzMzNjUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDYyIGRpdmlkZWludCAzMTQ2LjY2NTcxRS0zMTMzNzMzNjYgODguNTI4MjAxMCAtPiAwCit4bXVsMDYyIG11bHRpcGx5IDMxNDYuNjY1NzFFLTMxMzM3MzM2NiA4OC41MjgyMDEwIC0+IDIuNzg1Njg2NTRFLTMxMzM3MzM2MSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNjIgcG93ZXIgMzE0Ni42NjU3MUUtMzEzMzczMzY2IDg5IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTA2MiByZW1haW5kZXIgMzE0Ni42NjU3MUUtMzEzMzczMzY2IDg4LjUyODIwMTAgLT4gMy4xNDY2NjU3MUUtMzEzMzczMzYzCit4c3ViMDYyIHN1YnRyYWN0IDMxNDYuNjY1NzFFLTMxMzM3MzM2NiA4OC41MjgyMDEwIC0+IC04OC41MjgyMDEwIEluZXhhY3QgUm91bmRlZAoreGFkZDA2MyBhZGQgNi40NDY5MzA5NyAtODcxOTUuODcxMSAtPiAtODcxODkuNDI0MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNjMgY29tcGFyZSA2LjQ0NjkzMDk3IC04NzE5NS44NzExIC0+IDEKK3hkaXYwNjMgZGl2aWRlIDYuNDQ2OTMwOTcgLTg3MTk1Ljg3MTEgLT4gLTAuMDAwMDczOTM2MTk1NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNjMgZGl2aWRlaW50IDYuNDQ2OTMwOTcgLTg3MTk1Ljg3MTEgLT4gLTAKK3htdWwwNjMgbXVsdGlwbHkgNi40NDY5MzA5NyAtODcxOTUuODcxMSAtPiAtNTYyMTQ1Ljc2MiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNjMgcG93ZXIgNi40NDY5MzA5NyAtODcxOTYgLT4gNC41MDg4MTczMEUtNzA1NzMgSW5leGFjdCBSb3VuZGVkCit4cmVtMDYzIHJlbWFpbmRlciA2LjQ0NjkzMDk3IC04NzE5NS44NzExIC0+IDYuNDQ2OTMwOTcKK3hzdWIwNjMgc3VidHJhY3QgNi40NDY5MzA5NyAtODcxOTUuODcxMSAtPiA4NzIwMi4zMTgwIEluZXhhY3QgUm91bmRlZAoreGFkZDA2NCBhZGQgLTIxMTMxMzIuNTZFKzU3Nzk1Nzg0MCA5ODExMjU4MjEgLT4gLTIuMTEzMTMyNTZFKzU3Nzk1Nzg0NiBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNjQgY29tcGFyZSAtMjExMzEzMi41NkUrNTc3OTU3ODQwIDk4MTEyNTgyMSAtPiAtMQoreGRpdjA2NCBkaXZpZGUgLTIxMTMxMzIuNTZFKzU3Nzk1Nzg0MCA5ODExMjU4MjEgLT4gLTIuMTUzNzgzNDVFKzU3Nzk1NzgzNyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNjQgZGl2aWRlaW50IC0yMTEzMTMyLjU2RSs1Nzc5NTc4NDAgOTgxMTI1ODIxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDY0IG11bHRpcGx5IC0yMTEzMTMyLjU2RSs1Nzc5NTc4NDAgOTgxMTI1ODIxIC0+IC0yLjA3MzI0ODkyRSs1Nzc5NTc4NTUgSW5leGFjdCBSb3VuZGVkCit4cG93MDY0IHBvd2VyIC0yMTEzMTMyLjU2RSs1Nzc5NTc4NDAgOTgxMTI1ODIxIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNjQgcmVtYWluZGVyIC0yMTEzMTMyLjU2RSs1Nzc5NTc4NDAgOTgxMTI1ODIxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDY0IHN1YnRyYWN0IC0yMTEzMTMyLjU2RSs1Nzc5NTc4NDAgOTgxMTI1ODIxIC0+IC0yLjExMzEzMjU2RSs1Nzc5NTc4NDYgSW5leGFjdCBSb3VuZGVkCit4YWRkMDY1IGFkZCAtNzcwMS40MjgxNCA3MjY2Ny41MTgxIC0+IDY0OTY2LjA5MDAgSW5leGFjdCBSb3VuZGVkCit4Y29tMDY1IGNvbXBhcmUgLTc3MDEuNDI4MTQgNzI2NjcuNTE4MSAtPiAtMQoreGRpdjA2NSBkaXZpZGUgLTc3MDEuNDI4MTQgNzI2NjcuNTE4MSAtPiAtMC4xMDU5ODE3MTQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDY1IGRpdmlkZWludCAtNzcwMS40MjgxNCA3MjY2Ny41MTgxIC0+IC0wCit4bXVsMDY1IG11bHRpcGx5IC03NzAxLjQyODE0IDcyNjY3LjUxODEgLT4gLTU1OTY0MzY2OSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNjUgcG93ZXIgLTc3MDEuNDI4MTQgNzI2NjggLT4gMi4yOTU0MzgzN0UrMjgyNDI5IEluZXhhY3QgUm91bmRlZAoreHJlbTA2NSByZW1haW5kZXIgLTc3MDEuNDI4MTQgNzI2NjcuNTE4MSAtPiAtNzcwMS40MjgxNAoreHN1YjA2NSBzdWJ0cmFjdCAtNzcwMS40MjgxNCA3MjY2Ny41MTgxIC0+IC04MDM2OC45NDYyIEluZXhhY3QgUm91bmRlZAoreGFkZDA2NiBhZGQgLTg1MS43NTQ3ODkgLTU4MjY1OS4xNDkgLT4gLTU4MzUxMC45MDQgSW5leGFjdCBSb3VuZGVkCit4Y29tMDY2IGNvbXBhcmUgLTg1MS43NTQ3ODkgLTU4MjY1OS4xNDkgLT4gMQoreGRpdjA2NiBkaXZpZGUgLTg1MS43NTQ3ODkgLTU4MjY1OS4xNDkgLT4gMC4wMDE0NjE4NDA1OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNjYgZGl2aWRlaW50IC04NTEuNzU0Nzg5IC01ODI2NTkuMTQ5IC0+IDAKK3htdWwwNjYgbXVsdGlwbHkgLTg1MS43NTQ3ODkgLTU4MjY1OS4xNDkgLT4gNDk2MjgyNzIxIEluZXhhY3QgUm91bmRlZAoreHBvdzA2NiBwb3dlciAtODUxLjc1NDc4OSAtNTgyNjU5IC0+IC02LjgzNTMyNTkzRS0xNzA3Mzc1IEluZXhhY3QgUm91bmRlZAoreHJlbTA2NiByZW1haW5kZXIgLTg1MS43NTQ3ODkgLTU4MjY1OS4xNDkgLT4gLTg1MS43NTQ3ODkKK3hzdWIwNjYgc3VidHJhY3QgLTg1MS43NTQ3ODkgLTU4MjY1OS4xNDkgLT4gNTgxODA3LjM5NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNjcgYWRkIC01LjAxOTkyOTQzIDc4NTIuMTY1MzEgLT4gNzg0Ny4xNDUzOCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNjcgY29tcGFyZSAtNS4wMTk5Mjk0MyA3ODUyLjE2NTMxIC0+IC0xCit4ZGl2MDY3IGRpdmlkZSAtNS4wMTk5Mjk0MyA3ODUyLjE2NTMxIC0+IC0wLjAwMDYzOTMwNTExMyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNjcgZGl2aWRlaW50IC01LjAxOTkyOTQzIDc4NTIuMTY1MzEgLT4gLTAKK3htdWwwNjcgbXVsdGlwbHkgLTUuMDE5OTI5NDMgNzg1Mi4xNjUzMSAtPiAtMzk0MTcuMzE1NyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNjcgcG93ZXIgLTUuMDE5OTI5NDMgNzg1MiAtPiA3LjU0NDgxNDQ4RSs1NTAxIEluZXhhY3QgUm91bmRlZAoreHJlbTA2NyByZW1haW5kZXIgLTUuMDE5OTI5NDMgNzg1Mi4xNjUzMSAtPiAtNS4wMTk5Mjk0MworeHN1YjA2NyBzdWJ0cmFjdCAtNS4wMTk5Mjk0MyA3ODUyLjE2NTMxIC0+IC03ODU3LjE4NTI0IEluZXhhY3QgUm91bmRlZAoreGFkZDA2OCBhZGQgLTEyMzkzMjU3LjIgNzY4MDM2ODlFKzk0OTEyNTc3MCAtPiA3LjY4MDM2ODkwRSs5NDkxMjU3NzcgSW5leGFjdCBSb3VuZGVkCit4Y29tMDY4IGNvbXBhcmUgLTEyMzkzMjU3LjIgNzY4MDM2ODlFKzk0OTEyNTc3MCAtPiAtMQoreGRpdjA2OCBkaXZpZGUgLTEyMzkzMjU3LjIgNzY4MDM2ODlFKzk0OTEyNTc3MCAtPiAtMS42MTM2Mjc4NkUtOTQ5MTI1NzcxIEluZXhhY3QgUm91bmRlZAoreGR2aTA2OCBkaXZpZGVpbnQgLTEyMzkzMjU3LjIgNzY4MDM2ODlFKzk0OTEyNTc3MCAtPiAtMAoreG11bDA2OCBtdWx0aXBseSAtMTIzOTMyNTcuMiA3NjgwMzY4OUUrOTQ5MTI1NzcwIC0+IC05LjUxODQ3ODcyRSs5NDkxMjU3ODQgSW5leGFjdCBSb3VuZGVkCit4cG93MDY4IHBvd2VyIC0xMjM5MzI1Ny4yIDggLT4gNS41NjUyMzc0OUUrNTYgSW5leGFjdCBSb3VuZGVkCit4cmVtMDY4IHJlbWFpbmRlciAtMTIzOTMyNTcuMiA3NjgwMzY4OUUrOTQ5MTI1NzcwIC0+IC0xMjM5MzI1Ny4yCit4c3ViMDY4IHN1YnRyYWN0IC0xMjM5MzI1Ny4yIDc2ODAzNjg5RSs5NDkxMjU3NzAgLT4gLTcuNjgwMzY4OTBFKzk0OTEyNTc3NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNjkgYWRkIC03NTQ3NzE2MzQuRSs3MTY1NTUwMjYgLTI5MjMzNi4zMTEgLT4gLTcuNTQ3NzE2MzRFKzcxNjU1NTAzNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNjkgY29tcGFyZSAtNzU0NzcxNjM0LkUrNzE2NTU1MDI2IC0yOTIzMzYuMzExIC0+IC0xCit4ZGl2MDY5IGRpdmlkZSAtNzU0NzcxNjM0LkUrNzE2NTU1MDI2IC0yOTIzMzYuMzExIC0+IDIuNTgxODYwNzBFKzcxNjU1NTAyOSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNjkgZGl2aWRlaW50IC03NTQ3NzE2MzQuRSs3MTY1NTUwMjYgLTI5MjMzNi4zMTEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwNjkgbXVsdGlwbHkgLTc1NDc3MTYzNC5FKzcxNjU1NTAyNiAtMjkyMzM2LjMxMSAtPiAyLjIwNjQ3MTU1RSs3MTY1NTUwNDAgSW5leGFjdCBSb3VuZGVkCit4cG93MDY5IHBvd2VyIC03NTQ3NzE2MzQuRSs3MTY1NTUwMjYgLTI5MjMzNiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0wNjkgcmVtYWluZGVyIC03NTQ3NzE2MzQuRSs3MTY1NTUwMjYgLTI5MjMzNi4zMTEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwNjkgc3VidHJhY3QgLTc1NDc3MTYzNC5FKzcxNjU1NTAyNiAtMjkyMzM2LjMxMSAtPiAtNy41NDc3MTYzNEUrNzE2NTU1MDM0IEluZXhhY3QgUm91bmRlZAoreGFkZDA3MCBhZGQgLTkxNTAwNi4xNzFFKzYxNDU0ODY1MiAtMzE0MDg2OTY1LiAtPiAtOS4xNTAwNjE3MUUrNjE0NTQ4NjU3IEluZXhhY3QgUm91bmRlZAoreGNvbTA3MCBjb21wYXJlIC05MTUwMDYuMTcxRSs2MTQ1NDg2NTIgLTMxNDA4Njk2NS4gLT4gLTEKK3hkaXYwNzAgZGl2aWRlIC05MTUwMDYuMTcxRSs2MTQ1NDg2NTIgLTMxNDA4Njk2NS4gLT4gMi45MTMyMjU1NUUrNjE0NTQ4NjQ5IEluZXhhY3QgUm91bmRlZAoreGR2aTA3MCBkaXZpZGVpbnQgLTkxNTAwNi4xNzFFKzYxNDU0ODY1MiAtMzE0MDg2OTY1LiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDA3MCBtdWx0aXBseSAtOTE1MDA2LjE3MUUrNjE0NTQ4NjUyIC0zMTQwODY5NjUuIC0+IDIuODczOTE1MTFFKzYxNDU0ODY2NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNzAgcG93ZXIgLTkxNTAwNi4xNzFFKzYxNDU0ODY1MiAtMzE0MDg2OTY1IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0wNzAgcmVtYWluZGVyIC05MTUwMDYuMTcxRSs2MTQ1NDg2NTIgLTMxNDA4Njk2NS4gLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwNzAgc3VidHJhY3QgLTkxNTAwNi4xNzFFKzYxNDU0ODY1MiAtMzE0MDg2OTY1LiAtPiAtOS4xNTAwNjE3MUUrNjE0NTQ4NjU3IEluZXhhY3QgUm91bmRlZAoreGFkZDA3MSBhZGQgLTI5NjU5MDAzNSAtNDgxNzM0NTI5IC0+IC03NzgzMjQ1NjQKK3hjb20wNzEgY29tcGFyZSAtMjk2NTkwMDM1IC00ODE3MzQ1MjkgLT4gMQoreGRpdjA3MSBkaXZpZGUgLTI5NjU5MDAzNSAtNDgxNzM0NTI5IC0+IDAuNjE1NjcxMTE2IEluZXhhY3QgUm91bmRlZAoreGR2aTA3MSBkaXZpZGVpbnQgLTI5NjU5MDAzNSAtNDgxNzM0NTI5IC0+IDAKK3htdWwwNzEgbXVsdGlwbHkgLTI5NjU5MDAzNSAtNDgxNzM0NTI5IC0+IDEuNDI4Nzc2NjFFKzE3IEluZXhhY3QgUm91bmRlZAoreHBvdzA3MSBwb3dlciAtMjk2NTkwMDM1IC00ODE3MzQ1MjkgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTA3MSByZW1haW5kZXIgLTI5NjU5MDAzNSAtNDgxNzM0NTI5IC0+IC0yOTY1OTAwMzUKK3hzdWIwNzEgc3VidHJhY3QgLTI5NjU5MDAzNSAtNDgxNzM0NTI5IC0+IDE4NTE0NDQ5NAoreGFkZDA3MiBhZGQgOC4yNzgyMjYwNSA5MjQxNTU3LjE5IC0+IDkyNDE1NjUuNDcgSW5leGFjdCBSb3VuZGVkCit4Y29tMDcyIGNvbXBhcmUgOC4yNzgyMjYwNSA5MjQxNTU3LjE5IC0+IC0xCit4ZGl2MDcyIGRpdmlkZSA4LjI3ODIyNjA1IDkyNDE1NTcuMTkgLT4gOC45NTc2MDk1MEUtNyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNzIgZGl2aWRlaW50IDguMjc4MjI2MDUgOTI0MTU1Ny4xOSAtPiAwCit4bXVsMDcyIG11bHRpcGx5IDguMjc4MjI2MDUgOTI0MTU1Ny4xOSAtPiA3NjUwMzY5OS41IEluZXhhY3QgUm91bmRlZAoreHBvdzA3MiBwb3dlciA4LjI3ODIyNjA1IDkyNDE1NTcgLT4gNS4xMDIxOTk2OUUrODQ4MzE2OSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNzIgcmVtYWluZGVyIDguMjc4MjI2MDUgOTI0MTU1Ny4xOSAtPiA4LjI3ODIyNjA1Cit4c3ViMDcyIHN1YnRyYWN0IDguMjc4MjI2MDUgOTI0MTU1Ny4xOSAtPiAtOTI0MTU0OC45MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNzMgYWRkIC0xLjQzNTgxMDk4IDcyODYzMTMuNTQgLT4gNzI4NjMxMi4xMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNzMgY29tcGFyZSAtMS40MzU4MTA5OCA3Mjg2MzEzLjU0IC0+IC0xCit4ZGl2MDczIGRpdmlkZSAtMS40MzU4MTA5OCA3Mjg2MzEzLjU0IC0+IC0xLjk3MDU1ODg3RS03IEluZXhhY3QgUm91bmRlZAoreGR2aTA3MyBkaXZpZGVpbnQgLTEuNDM1ODEwOTggNzI4NjMxMy41NCAtPiAtMAoreG11bDA3MyBtdWx0aXBseSAtMS40MzU4MTA5OCA3Mjg2MzEzLjU0IC0+IC0xMDQ2MTc2OS4wIEluZXhhY3QgUm91bmRlZAoreHBvdzA3MyBwb3dlciAtMS40MzU4MTA5OCA3Mjg2MzE0IC0+IDEuMDkzODk3NDFFKzExNDQ2NjAgSW5leGFjdCBSb3VuZGVkCit4cmVtMDczIHJlbWFpbmRlciAtMS40MzU4MTA5OCA3Mjg2MzEzLjU0IC0+IC0xLjQzNTgxMDk4Cit4c3ViMDczIHN1YnRyYWN0IC0xLjQzNTgxMDk4IDcyODYzMTMuNTQgLT4gLTcyODYzMTQuOTggSW5leGFjdCBSb3VuZGVkCit4YWRkMDc0IGFkZCAtNjk5MDM2MTkzLiA3NTkyNjMuNTA5RSs1MzM1NDM2MjUgLT4gNy41OTI2MzUwOUUrNTMzNTQzNjMwIEluZXhhY3QgUm91bmRlZAoreGNvbTA3NCBjb21wYXJlIC02OTkwMzYxOTMuIDc1OTI2My41MDlFKzUzMzU0MzYyNSAtPiAtMQoreGRpdjA3NCBkaXZpZGUgLTY5OTAzNjE5My4gNzU5MjYzLjUwOUUrNTMzNTQzNjI1IC0+IC05LjIwNjc2NjYyRS01MzM1NDM2MjMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDc0IGRpdmlkZWludCAtNjk5MDM2MTkzLiA3NTkyNjMuNTA5RSs1MzM1NDM2MjUgLT4gLTAKK3htdWwwNzQgbXVsdGlwbHkgLTY5OTAzNjE5My4gNzU5MjYzLjUwOUUrNTMzNTQzNjI1IC0+IC01LjMwNzUyNjczRSs1MzM1NDM2MzkgSW5leGFjdCBSb3VuZGVkCit4cG93MDc0IHBvd2VyIC02OTkwMzYxOTMuIDggLT4gNS43MDE2MDcyNEUrNzAgSW5leGFjdCBSb3VuZGVkCit4cmVtMDc0IHJlbWFpbmRlciAtNjk5MDM2MTkzLiA3NTkyNjMuNTA5RSs1MzM1NDM2MjUgLT4gLTY5OTAzNjE5MworeHN1YjA3NCBzdWJ0cmFjdCAtNjk5MDM2MTkzLiA3NTkyNjMuNTA5RSs1MzM1NDM2MjUgLT4gLTcuNTkyNjM1MDlFKzUzMzU0MzYzMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNzUgYWRkIC04My43MjczNjE1RS0zMDUyODE5NTcgLTI4Nzc3OTU5My5FKzQ1ODc3Nzc3NCAtPiAtMi44Nzc3OTU5M0UrNDU4Nzc3NzgyIEluZXhhY3QgUm91bmRlZAoreGNvbTA3NSBjb21wYXJlIC04My43MjczNjE1RS0zMDUyODE5NTcgLTI4Nzc3OTU5My5FKzQ1ODc3Nzc3NCAtPiAxCit4ZGl2MDc1IGRpdmlkZSAtODMuNzI3MzYxNUUtMzA1MjgxOTU3IC0yODc3Nzk1OTMuRSs0NTg3Nzc3NzQgLT4gMi45MDk0MjY2NEUtNzY0MDU5NzM4IEluZXhhY3QgUm91bmRlZAoreGR2aTA3NSBkaXZpZGVpbnQgLTgzLjcyNzM2MTVFLTMwNTI4MTk1NyAtMjg3Nzc5NTkzLkUrNDU4Nzc3Nzc0IC0+IDAKK3htdWwwNzUgbXVsdGlwbHkgLTgzLjcyNzM2MTVFLTMwNTI4MTk1NyAtMjg3Nzc5NTkzLkUrNDU4Nzc3Nzc0IC0+IDIuNDA5NTAyNjBFKzE1MzQ5NTgyNyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNzUgcG93ZXIgLTgzLjcyNzM2MTVFLTMwNTI4MTk1NyAtMyAtPiAtMS43MDM3MTgyOEUrOTE1ODQ1ODY1IEluZXhhY3QgUm91bmRlZAoreHJlbTA3NSByZW1haW5kZXIgLTgzLjcyNzM2MTVFLTMwNTI4MTk1NyAtMjg3Nzc5NTkzLkUrNDU4Nzc3Nzc0IC0+IC04LjM3MjczNjE1RS0zMDUyODE5NTYKK3hzdWIwNzUgc3VidHJhY3QgLTgzLjcyNzM2MTVFLTMwNTI4MTk1NyAtMjg3Nzc5NTkzLkUrNDU4Nzc3Nzc0IC0+IDIuODc3Nzk1OTNFKzQ1ODc3Nzc4MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNzYgYWRkIDguNDg1MDMyMjQgNjUyMi4wMzMxNiAtPiA2NTMwLjUxODE5IEluZXhhY3QgUm91bmRlZAoreGNvbTA3NiBjb21wYXJlIDguNDg1MDMyMjQgNjUyMi4wMzMxNiAtPiAtMQoreGRpdjA3NiBkaXZpZGUgOC40ODUwMzIyNCA2NTIyLjAzMzE2IC0+IDAuMDAxMzAwOTc5NjIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDc2IGRpdmlkZWludCA4LjQ4NTAzMjI0IDY1MjIuMDMzMTYgLT4gMAoreG11bDA3NiBtdWx0aXBseSA4LjQ4NTAzMjI0IDY1MjIuMDMzMTYgLT4gNTUzMzkuNjYxNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwNzYgcG93ZXIgOC40ODUwMzIyNCA2NTIyIC0+IDQuNzY1NDc1NDJFKzYwNTYgSW5leGFjdCBSb3VuZGVkCit4cmVtMDc2IHJlbWFpbmRlciA4LjQ4NTAzMjI0IDY1MjIuMDMzMTYgLT4gOC40ODUwMzIyNAoreHN1YjA3NiBzdWJ0cmFjdCA4LjQ4NTAzMjI0IDY1MjIuMDMzMTYgLT4gLTY1MTMuNTQ4MTMgSW5leGFjdCBSb3VuZGVkCit4YWRkMDc3IGFkZCA1Mjc5MTYwOTEgLTgwOS4wNTQwNzAgLT4gNTI3OTE1MjgyIEluZXhhY3QgUm91bmRlZAoreGNvbTA3NyBjb21wYXJlIDUyNzkxNjA5MSAtODA5LjA1NDA3MCAtPiAxCit4ZGl2MDc3IGRpdmlkZSA1Mjc5MTYwOTEgLTgwOS4wNTQwNzAgLT4gLTY1MjUxMC4yNzIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDc3IGRpdmlkZWludCA1Mjc5MTYwOTEgLTgwOS4wNTQwNzAgLT4gLTY1MjUxMAoreG11bDA3NyBtdWx0aXBseSA1Mjc5MTYwOTEgLTgwOS4wNTQwNzAgLT4gLTQuMjcxMTI2NjJFKzExIEluZXhhY3QgUm91bmRlZAoreHBvdzA3NyBwb3dlciA1Mjc5MTYwOTEgLTgwOSAtPiAyLjc4NjA5Njk3RS03MDU3IEluZXhhY3QgUm91bmRlZAoreHJlbTA3NyByZW1haW5kZXIgNTI3OTE2MDkxIC04MDkuMDU0MDcwIC0+IDIxOS43ODQzMDAKK3hzdWIwNzcgc3VidHJhY3QgNTI3OTE2MDkxIC04MDkuMDU0MDcwIC0+IDUyNzkxNjkwMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNzggYWRkIDM4NTcwNTguNjAgNTc5Mjk5Ny41OEUrODgxMDc3NDA5IC0+IDUuNzkyOTk3NThFKzg4MTA3NzQxNSBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNzggY29tcGFyZSAzODU3MDU4LjYwIDU3OTI5OTcuNThFKzg4MTA3NzQwOSAtPiAtMQoreGRpdjA3OCBkaXZpZGUgMzg1NzA1OC42MCA1NzkyOTk3LjU4RSs4ODEwNzc0MDkgLT4gNi42NTgxMzk1MEUtODgxMDc3NDEwIEluZXhhY3QgUm91bmRlZAoreGR2aTA3OCBkaXZpZGVpbnQgMzg1NzA1OC42MCA1NzkyOTk3LjU4RSs4ODEwNzc0MDkgLT4gMAoreG11bDA3OCBtdWx0aXBseSAzODU3MDU4LjYwIDU3OTI5OTcuNThFKzg4MTA3NzQwOSAtPiAyLjIzNDM5MzExRSs4ODEwNzc0MjIgSW5leGFjdCBSb3VuZGVkCit4cG93MDc4IHBvd2VyIDM4NTcwNTguNjAgNiAtPiAzLjI5MjU4ODI0RSszOSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wNzggcmVtYWluZGVyIDM4NTcwNTguNjAgNTc5Mjk5Ny41OEUrODgxMDc3NDA5IC0+IDM4NTcwNTguNjAKK3hzdWIwNzggc3VidHJhY3QgMzg1NzA1OC42MCA1NzkyOTk3LjU4RSs4ODEwNzc0MDkgLT4gLTUuNzkyOTk3NThFKzg4MTA3NzQxNSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwNzkgYWRkIC02NjU4NzM2My5FKzU1NjUzODE3MyAtNTUxOTAyNDAyRSszNTczMDkxNDYgLT4gLTYuNjU4NzM2MzBFKzU1NjUzODE4MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wNzkgY29tcGFyZSAtNjY1ODczNjMuRSs1NTY1MzgxNzMgLTU1MTkwMjQwMkUrMzU3MzA5MTQ2IC0+IC0xCit4ZGl2MDc5IGRpdmlkZSAtNjY1ODczNjMuRSs1NTY1MzgxNzMgLTU1MTkwMjQwMkUrMzU3MzA5MTQ2IC0+IDEuMjA2NTA2MTNFKzE5OTIyOTAyNiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwNzkgZGl2aWRlaW50IC02NjU4NzM2My5FKzU1NjUzODE3MyAtNTUxOTAyNDAyRSszNTczMDkxNDYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwNzkgbXVsdGlwbHkgLTY2NTg3MzYzLkUrNTU2NTM4MTczIC01NTE5MDI0MDJFKzM1NzMwOTE0NiAtPiAzLjY3NDk3MjU2RSs5MTM4NDczMzUgSW5leGFjdCBSb3VuZGVkCit4cG93MDc5IHBvd2VyIC02NjU4NzM2My5FKzU1NjUzODE3MyAtNiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0wNzkgcmVtYWluZGVyIC02NjU4NzM2My5FKzU1NjUzODE3MyAtNTUxOTAyNDAyRSszNTczMDkxNDYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwNzkgc3VidHJhY3QgLTY2NTg3MzYzLkUrNTU2NTM4MTczIC01NTE5MDI0MDJFKzM1NzMwOTE0NiAtPiAtNi42NTg3MzYzMEUrNTU2NTM4MTgwIEluZXhhY3QgUm91bmRlZAoreGFkZDA4MCBhZGQgLTU4MC41MDI5NTUgMzgxMjU1MjEuNyAtPiAzODEyNDk0MS4yIEluZXhhY3QgUm91bmRlZAoreGNvbTA4MCBjb21wYXJlIC01ODAuNTAyOTU1IDM4MTI1NTIxLjcgLT4gLTEKK3hkaXYwODAgZGl2aWRlIC01ODAuNTAyOTU1IDM4MTI1NTIxLjcgLT4gLTAuMDAwMDE1MjI2MDk4NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwODAgZGl2aWRlaW50IC01ODAuNTAyOTU1IDM4MTI1NTIxLjcgLT4gLTAKK3htdWwwODAgbXVsdGlwbHkgLTU4MC41MDI5NTUgMzgxMjU1MjEuNyAtPiAtMi4yMTMxOTc4MEUrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93MDgwIHBvd2VyIC01ODAuNTAyOTU1IDM4MTI1NTIyIC0+IDYuMDcyNjIwNzhFKzEwNTM3MTQ4NiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wODAgcmVtYWluZGVyIC01ODAuNTAyOTU1IDM4MTI1NTIxLjcgLT4gLTU4MC41MDI5NTUKK3hzdWIwODAgc3VidHJhY3QgLTU4MC41MDI5NTUgMzgxMjU1MjEuNyAtPiAtMzgxMjYxMDIuMiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwODEgYWRkIC05NjI3MzYzLjAwIC04MDYxNjg4NUUtNzQ5ODkxMzk0IC0+IC05NjI3MzYzLjAwIEluZXhhY3QgUm91bmRlZAoreGNvbTA4MSBjb21wYXJlIC05NjI3MzYzLjAwIC04MDYxNjg4NUUtNzQ5ODkxMzk0IC0+IC0xCit4ZGl2MDgxIGRpdmlkZSAtOTYyNzM2My4wMCAtODA2MTY4ODVFLTc0OTg5MTM5NCAtPiAxLjE5NDIxMTczRSs3NDk4OTEzOTMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDgxIGRpdmlkZWludCAtOTYyNzM2My4wMCAtODA2MTY4ODVFLTc0OTg5MTM5NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDA4MSBtdWx0aXBseSAtOTYyNzM2My4wMCAtODA2MTY4ODVFLTc0OTg5MTM5NCAtPiA3Ljc2MTI4MDE2RS03NDk4OTEzODAgSW5leGFjdCBSb3VuZGVkCit4cG93MDgxIHBvd2VyIC05NjI3MzYzLjAwIC04IC0+IDEuMzU1MDA2MDFFLTU2IEluZXhhY3QgUm91bmRlZAoreHJlbTA4MSByZW1haW5kZXIgLTk2MjczNjMuMDAgLTgwNjE2ODg1RS03NDk4OTEzOTQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwODEgc3VidHJhY3QgLTk2MjczNjMuMDAgLTgwNjE2ODg1RS03NDk4OTEzOTQgLT4gLTk2MjczNjMuMDAgSW5leGFjdCBSb3VuZGVkCit4YWRkMDgyIGFkZCAtNTI2LjU5NDg1NUUrODAzMTEwMTA3IC02NC41NDUxNjM5IC0+IC01LjI2NTk0ODU1RSs4MDMxMTAxMDkgSW5leGFjdCBSb3VuZGVkCit4Y29tMDgyIGNvbXBhcmUgLTUyNi41OTQ4NTVFKzgwMzExMDEwNyAtNjQuNTQ1MTYzOSAtPiAtMQoreGRpdjA4MiBkaXZpZGUgLTUyNi41OTQ4NTVFKzgwMzExMDEwNyAtNjQuNTQ1MTYzOSAtPiA4LjE1ODU0ODU4RSs4MDMxMTAxMDcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDgyIGRpdmlkZWludCAtNTI2LjU5NDg1NUUrODAzMTEwMTA3IC02NC41NDUxNjM5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDgyIG11bHRpcGx5IC01MjYuNTk0ODU1RSs4MDMxMTAxMDcgLTY0LjU0NTE2MzkgLT4gMy4zOTg5MTUxMkUrODAzMTEwMTExIEluZXhhY3QgUm91bmRlZAoreHBvdzA4MiBwb3dlciAtNTI2LjU5NDg1NUUrODAzMTEwMTA3IC02NSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMDgyIHJlbWFpbmRlciAtNTI2LjU5NDg1NUUrODAzMTEwMTA3IC02NC41NDUxNjM5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDgyIHN1YnRyYWN0IC01MjYuNTk0ODU1RSs4MDMxMTAxMDcgLTY0LjU0NTE2MzkgLT4gLTUuMjY1OTQ4NTVFKzgwMzExMDEwOSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwODMgYWRkIC04Mzc4LjU1NDk5IDc2MC4xMzEyNTcgLT4gLTc2MTguNDIzNzMgSW5leGFjdCBSb3VuZGVkCit4Y29tMDgzIGNvbXBhcmUgLTgzNzguNTU0OTkgNzYwLjEzMTI1NyAtPiAtMQoreGRpdjA4MyBkaXZpZGUgLTgzNzguNTU0OTkgNzYwLjEzMTI1NyAtPiAtMTEuMDIyNTEwOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwODMgZGl2aWRlaW50IC04Mzc4LjU1NDk5IDc2MC4xMzEyNTcgLT4gLTExCit4bXVsMDgzIG11bHRpcGx5IC04Mzc4LjU1NDk5IDc2MC4xMzEyNTcgLT4gLTYzNjg4MDEuNTQgSW5leGFjdCBSb3VuZGVkCit4cG93MDgzIHBvd2VyIC04Mzc4LjU1NDk5IDc2MCAtPiA0LjA2MDA3OTI4RSsyOTgxIEluZXhhY3QgUm91bmRlZAoreHJlbTA4MyByZW1haW5kZXIgLTgzNzguNTU0OTkgNzYwLjEzMTI1NyAtPiAtMTcuMTExMTYzCit4c3ViMDgzIHN1YnRyYWN0IC04Mzc4LjU1NDk5IDc2MC4xMzEyNTcgLT4gLTkxMzguNjg2MjUgSW5leGFjdCBSb3VuZGVkCit4YWRkMDg0IGFkZCAtNzE3LjY5NzcxOCA5ODQzMDQ0MTMgLT4gOTg0MzAzNjk1IEluZXhhY3QgUm91bmRlZAoreGNvbTA4NCBjb21wYXJlIC03MTcuNjk3NzE4IDk4NDMwNDQxMyAtPiAtMQoreGRpdjA4NCBkaXZpZGUgLTcxNy42OTc3MTggOTg0MzA0NDEzIC0+IC03LjI5MTQyMDMwRS03IEluZXhhY3QgUm91bmRlZAoreGR2aTA4NCBkaXZpZGVpbnQgLTcxNy42OTc3MTggOTg0MzA0NDEzIC0+IC0wCit4bXVsMDg0IG11bHRpcGx5IC03MTcuNjk3NzE4IDk4NDMwNDQxMyAtPiAtNy4wNjQzMzAzMUUrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93MDg0IHBvd2VyIC03MTcuNjk3NzE4IDk4NDMwNDQxMyAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMDg0IHJlbWFpbmRlciAtNzE3LjY5NzcxOCA5ODQzMDQ0MTMgLT4gLTcxNy42OTc3MTgKK3hzdWIwODQgc3VidHJhY3QgLTcxNy42OTc3MTggOTg0MzA0NDEzIC0+IC05ODQzMDUxMzEgSW5leGFjdCBSb3VuZGVkCit4YWRkMDg1IGFkZCAtNzY3NjIyNDMuNEUtNzQxMTAwMDk0IC0yNzMuNzA2Njc0IC0+IC0yNzMuNzA2Njc0IEluZXhhY3QgUm91bmRlZAoreGNvbTA4NSBjb21wYXJlIC03Njc2MjI0My40RS03NDExMDAwOTQgLTI3My43MDY2NzQgLT4gMQoreGRpdjA4NSBkaXZpZGUgLTc2NzYyMjQzLjRFLTc0MTEwMDA5NCAtMjczLjcwNjY3NCAtPiAyLjgwNDU0NDA5RS03NDExMDAwODkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDg1IGRpdmlkZWludCAtNzY3NjIyNDMuNEUtNzQxMTAwMDk0IC0yNzMuNzA2Njc0IC0+IDAKK3htdWwwODUgbXVsdGlwbHkgLTc2NzYyMjQzLjRFLTc0MTEwMDA5NCAtMjczLjcwNjY3NCAtPiAyLjEwMTAzMzgzRS03NDExMDAwODQgSW5leGFjdCBSb3VuZGVkCit4cG93MDg1IHBvd2VyIC03Njc2MjI0My40RS03NDExMDAwOTQgLTI3NCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wODUgcmVtYWluZGVyIC03Njc2MjI0My40RS03NDExMDAwOTQgLTI3My43MDY2NzQgLT4gLTcuNjc2MjI0MzRFLTc0MTEwMDA4NworeHN1YjA4NSBzdWJ0cmFjdCAtNzY3NjIyNDMuNEUtNzQxMTAwMDk0IC0yNzMuNzA2Njc0IC0+IDI3My43MDY2NzQgSW5leGFjdCBSb3VuZGVkCit4YWRkMDg2IGFkZCAtNzAxLjUxODM1NEUrNzg2Mjc0OTE4IDg4MjI3NTAuNjhFKzI0MzA1MjEwNyAtPiAtNy4wMTUxODM1NEUrNzg2Mjc0OTIwIEluZXhhY3QgUm91bmRlZAoreGNvbTA4NiBjb21wYXJlIC03MDEuNTE4MzU0RSs3ODYyNzQ5MTggODgyMjc1MC42OEUrMjQzMDUyMTA3IC0+IC0xCit4ZGl2MDg2IGRpdmlkZSAtNzAxLjUxODM1NEUrNzg2Mjc0OTE4IDg4MjI3NTAuNjhFKzI0MzA1MjEwNyAtPiAtNy45NTEyNDMwOUUrNTQzMjIyODA2IEluZXhhY3QgUm91bmRlZAoreGR2aTA4NiBkaXZpZGVpbnQgLTcwMS41MTgzNTRFKzc4NjI3NDkxOCA4ODIyNzUwLjY4RSsyNDMwNTIxMDcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwODYgbXVsdGlwbHkgLTcwMS41MTgzNTRFKzc4NjI3NDkxOCA4ODIyNzUwLjY4RSsyNDMwNTIxMDcgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAoreHBvdzA4NiBwb3dlciAtNzAxLjUxODM1NEUrNzg2Mjc0OTE4IDkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTA4NiByZW1haW5kZXIgLTcwMS41MTgzNTRFKzc4NjI3NDkxOCA4ODIyNzUwLjY4RSsyNDMwNTIxMDcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIwODYgc3VidHJhY3QgLTcwMS41MTgzNTRFKzc4NjI3NDkxOCA4ODIyNzUwLjY4RSsyNDMwNTIxMDcgLT4gLTcuMDE1MTgzNTRFKzc4NjI3NDkyMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwODcgYWRkIC0zNTk4NjY4NDUuIC00LjU3NDM0MTE3IC0+IC0zNTk4NjY4NTAgSW5leGFjdCBSb3VuZGVkCit4Y29tMDg3IGNvbXBhcmUgLTM1OTg2Njg0NS4gLTQuNTc0MzQxMTcgLT4gLTEKK3hkaXYwODcgZGl2aWRlIC0zNTk4NjY4NDUuIC00LjU3NDM0MTE3IC0+IDc4NjcwNzQ4LjggSW5leGFjdCBSb3VuZGVkCit4ZHZpMDg3IGRpdmlkZWludCAtMzU5ODY2ODQ1LiAtNC41NzQzNDExNyAtPiA3ODY3MDc0OAoreG11bDA4NyBtdWx0aXBseSAtMzU5ODY2ODQ1LiAtNC41NzQzNDExNyAtPiAxLjY0NjE1MzcyRSs5IEluZXhhY3QgUm91bmRlZAoreHBvdzA4NyBwb3dlciAtMzU5ODY2ODQ1LiAtNSAtPiAtMS42NTY4NzkwOUUtNDMgSW5leGFjdCBSb3VuZGVkCit4cmVtMDg3IHJlbWFpbmRlciAtMzU5ODY2ODQ1LiAtNC41NzQzNDExNyAtPiAtMy41NDg5MDQ4NAoreHN1YjA4NyBzdWJ0cmFjdCAtMzU5ODY2ODQ1LiAtNC41NzQzNDExNyAtPiAtMzU5ODY2ODQwIEluZXhhY3QgUm91bmRlZAoreGFkZDA4OCBhZGQgNzc5OTM0NTM2LiAtNzY1NjI2NDUuNyAtPiA3MDMzNzE4OTAgSW5leGFjdCBSb3VuZGVkCit4Y29tMDg4IGNvbXBhcmUgNzc5OTM0NTM2LiAtNzY1NjI2NDUuNyAtPiAxCit4ZGl2MDg4IGRpdmlkZSA3Nzk5MzQ1MzYuIC03NjU2MjY0NS43IC0+IC0xMC4xODY4ODA3IEluZXhhY3QgUm91bmRlZAoreGR2aTA4OCBkaXZpZGVpbnQgNzc5OTM0NTM2LiAtNzY1NjI2NDUuNyAtPiAtMTAKK3htdWwwODggbXVsdGlwbHkgNzc5OTM0NTM2LiAtNzY1NjI2NDUuNyAtPiAtNS45NzEzODUxNUUrMTYgSW5leGFjdCBSb3VuZGVkCit4cG93MDg4IHBvd2VyIDc3OTkzNDUzNi4gLTc2NTYyNjQ2IC0+IDMuMzY3MzkwNjNFLTY4MDc5OTUwMSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wODggcmVtYWluZGVyIDc3OTkzNDUzNi4gLTc2NTYyNjQ1LjcgLT4gMTQzMDgwNzkuMAoreHN1YjA4OCBzdWJ0cmFjdCA3Nzk5MzQ1MzYuIC03NjU2MjY0NS43IC0+IDg1NjQ5NzE4MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwODkgYWRkIC00ODIwLjk1NDUxIDM1MTYyMzQuOTlFKzMwMzMwMzE3NiAtPiAzLjUxNjIzNDk5RSszMDMzMDMxODIgSW5leGFjdCBSb3VuZGVkCit4Y29tMDg5IGNvbXBhcmUgLTQ4MjAuOTU0NTEgMzUxNjIzNC45OUUrMzAzMzAzMTc2IC0+IC0xCit4ZGl2MDg5IGRpdmlkZSAtNDgyMC45NTQ1MSAzNTE2MjM0Ljk5RSszMDMzMDMxNzYgLT4gLTEuMzcxMDU1ODRFLTMwMzMwMzE3OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwODkgZGl2aWRlaW50IC00ODIwLjk1NDUxIDM1MTYyMzQuOTlFKzMwMzMwMzE3NiAtPiAtMAoreG11bDA4OSBtdWx0aXBseSAtNDgyMC45NTQ1MSAzNTE2MjM0Ljk5RSszMDMzMDMxNzYgLT4gLTEuNjk1MTYwODlFKzMwMzMwMzE4NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwODkgcG93ZXIgLTQ4MjAuOTU0NTEgNCAtPiA1LjQwMTcyMDgyRSsxNCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wODkgcmVtYWluZGVyIC00ODIwLjk1NDUxIDM1MTYyMzQuOTlFKzMwMzMwMzE3NiAtPiAtNDgyMC45NTQ1MQoreHN1YjA4OSBzdWJ0cmFjdCAtNDgyMC45NTQ1MSAzNTE2MjM0Ljk5RSszMDMzMDMxNzYgLT4gLTMuNTE2MjM0OTlFKzMwMzMwMzE4MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwOTAgYWRkIDY5MzU1OTc2LjkgLTkuNTc4Mzg1NjJFKzc1ODgwNDk4NCAtPiAtOS41NzgzODU2MkUrNzU4ODA0OTg0IEluZXhhY3QgUm91bmRlZAoreGNvbTA5MCBjb21wYXJlIDY5MzU1OTc2LjkgLTkuNTc4Mzg1NjJFKzc1ODgwNDk4NCAtPiAxCit4ZGl2MDkwIGRpdmlkZSA2OTM1NTk3Ni45IC05LjU3ODM4NTYyRSs3NTg4MDQ5ODQgLT4gLTcuMjQwODgzNzZFLTc1ODgwNDk3OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwOTAgZGl2aWRlaW50IDY5MzU1OTc2LjkgLTkuNTc4Mzg1NjJFKzc1ODgwNDk4NCAtPiAtMAoreG11bDA5MCBtdWx0aXBseSA2OTM1NTk3Ni45IC05LjU3ODM4NTYyRSs3NTg4MDQ5ODQgLT4gLTYuNjQzMTgyOTJFKzc1ODgwNDk5MiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwOTAgcG93ZXIgNjkzNTU5NzYuOSAtMTAgLT4gMy44ODI5NDM0NkUtNzkgSW5leGFjdCBSb3VuZGVkCit4cmVtMDkwIHJlbWFpbmRlciA2OTM1NTk3Ni45IC05LjU3ODM4NTYyRSs3NTg4MDQ5ODQgLT4gNjkzNTU5NzYuOQoreHN1YjA5MCBzdWJ0cmFjdCA2OTM1NTk3Ni45IC05LjU3ODM4NTYyRSs3NTg4MDQ5ODQgLT4gOS41NzgzODU2MkUrNzU4ODA0OTg0IEluZXhhY3QgUm91bmRlZAoreGFkZDA5MSBhZGQgLTEyNjcyMDkzLjEgODU2OS43ODI1NUUtMzgyODY2MDI1IC0+IC0xMjY3MjA5My4xIEluZXhhY3QgUm91bmRlZAoreGNvbTA5MSBjb21wYXJlIC0xMjY3MjA5My4xIDg1NjkuNzgyNTVFLTM4Mjg2NjAyNSAtPiAtMQoreGRpdjA5MSBkaXZpZGUgLTEyNjcyMDkzLjEgODU2OS43ODI1NUUtMzgyODY2MDI1IC0+IC0xLjQ3ODY5NDgyRSszODI4NjYwMjggSW5leGFjdCBSb3VuZGVkCit4ZHZpMDkxIGRpdmlkZWludCAtMTI2NzIwOTMuMSA4NTY5Ljc4MjU1RS0zODI4NjYwMjUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwwOTEgbXVsdGlwbHkgLTEyNjcyMDkzLjEgODU2OS43ODI1NUUtMzgyODY2MDI1IC0+IC0xLjA4NTk3MDgyRS0zODI4NjYwMTQgSW5leGFjdCBSb3VuZGVkCit4cG93MDkxIHBvd2VyIC0xMjY3MjA5My4xIDkgLT4gLTguNDI2MjY2NThFKzYzIEluZXhhY3QgUm91bmRlZAoreHJlbTA5MSByZW1haW5kZXIgLTEyNjcyMDkzLjEgODU2OS43ODI1NUUtMzgyODY2MDI1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDkxIHN1YnRyYWN0IC0xMjY3MjA5My4xIDg1NjkuNzgyNTVFLTM4Mjg2NjAyNSAtPiAtMTI2NzIwOTMuMSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwOTIgYWRkIC01OTEwNzUwLjIgNjYxNTAzODNFLTY2MjQ1OTI0MSAtPiAtNTkxMDc1MC4yMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20wOTIgY29tcGFyZSAtNTkxMDc1MC4yIDY2MTUwMzgzRS02NjI0NTkyNDEgLT4gLTEKK3hkaXYwOTIgZGl2aWRlIC01OTEwNzUwLjIgNjYxNTAzODNFLTY2MjQ1OTI0MSAtPiAtOC45MzUzMjI3MkUrNjYyNDU5MjM5IEluZXhhY3QgUm91bmRlZAoreGR2aTA5MiBkaXZpZGVpbnQgLTU5MTA3NTAuMiA2NjE1MDM4M0UtNjYyNDU5MjQxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDkyIG11bHRpcGx5IC01OTEwNzUwLjIgNjYxNTAzODNFLTY2MjQ1OTI0MSAtPiAtMy45MDk5ODM5MEUtNjYyNDU5MjI3IEluZXhhY3QgUm91bmRlZAoreHBvdzA5MiBwb3dlciAtNTkxMDc1MC4yIDcgLT4gLTIuNTIwNTY2OTZFKzQ3IEluZXhhY3QgUm91bmRlZAoreHJlbTA5MiByZW1haW5kZXIgLTU5MTA3NTAuMiA2NjE1MDM4M0UtNjYyNDU5MjQxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDkyIHN1YnRyYWN0IC01OTEwNzUwLjIgNjYxNTAzODNFLTY2MjQ1OTI0MSAtPiAtNTkxMDc1MC4yMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwOTMgYWRkIC01MzI1NzcyNjguRS0xNjM4MDY2MjkgLTI0MDY1MDM5OEUtNjUwMTEwNTU4IC0+IC01LjMyNTc3MjY4RS0xNjM4MDY2MjEgSW5leGFjdCBSb3VuZGVkCit4Y29tMDkzIGNvbXBhcmUgLTUzMjU3NzI2OC5FLTE2MzgwNjYyOSAtMjQwNjUwMzk4RS02NTAxMTA1NTggLT4gLTEKK3hkaXYwOTMgZGl2aWRlIC01MzI1NzcyNjguRS0xNjM4MDY2MjkgLTI0MDY1MDM5OEUtNjUwMTEwNTU4IC0+IDIuMjEzMDc0NTRFKzQ4NjMwMzkyOSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwOTMgZGl2aWRlaW50IC01MzI1NzcyNjguRS0xNjM4MDY2MjkgLTI0MDY1MDM5OEUtNjUwMTEwNTU4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDkzIG11bHRpcGx5IC01MzI1NzcyNjguRS0xNjM4MDY2MjkgLTI0MDY1MDM5OEUtNjUwMTEwNTU4IC0+IDEuMjgxNjQ5MzJFLTgxMzkxNzE3MCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwOTMgcG93ZXIgLTUzMjU3NzI2OC5FLTE2MzgwNjYyOSAtMiAtPiAzLjUyNTYxMzg5RSszMjc2MTMyNDAgSW5leGFjdCBSb3VuZGVkCit4cmVtMDkzIHJlbWFpbmRlciAtNTMyNTc3MjY4LkUtMTYzODA2NjI5IC0yNDA2NTAzOThFLTY1MDExMDU1OCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjA5MyBzdWJ0cmFjdCAtNTMyNTc3MjY4LkUtMTYzODA2NjI5IC0yNDA2NTAzOThFLTY1MDExMDU1OCAtPiAtNS4zMjU3NzI2OEUtMTYzODA2NjIxIEluZXhhY3QgUm91bmRlZAoreGFkZDA5NCBhZGQgLTY3MS41MDcxOThFLTkwODU4Nzg5MCAzMDU3NDI5LjMyRS01NTUyMzA2MjMgLT4gMy4wNTc0MjkzMkUtNTU1MjMwNjE3IEluZXhhY3QgUm91bmRlZAoreGNvbTA5NCBjb21wYXJlIC02NzEuNTA3MTk4RS05MDg1ODc4OTAgMzA1NzQyOS4zMkUtNTU1MjMwNjIzIC0+IC0xCit4ZGl2MDk0IGRpdmlkZSAtNjcxLjUwNzE5OEUtOTA4NTg3ODkwIDMwNTc0MjkuMzJFLTU1NTIzMDYyMyAtPiAtMi4xOTYzMTMwN0UtMzUzMzU3MjcxIEluZXhhY3QgUm91bmRlZAoreGR2aTA5NCBkaXZpZGVpbnQgLTY3MS41MDcxOThFLTkwODU4Nzg5MCAzMDU3NDI5LjMyRS01NTUyMzA2MjMgLT4gLTAKK3htdWwwOTQgbXVsdGlwbHkgLTY3MS41MDcxOThFLTkwODU4Nzg5MCAzMDU3NDI5LjMyRS01NTUyMzA2MjMgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHBvdzA5NCBwb3dlciAtNjcxLjUwNzE5OEUtOTA4NTg3ODkwIDMgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTA5NCByZW1haW5kZXIgLTY3MS41MDcxOThFLTkwODU4Nzg5MCAzMDU3NDI5LjMyRS01NTUyMzA2MjMgLT4gLTYuNzE1MDcxOThFLTkwODU4Nzg4OAoreHN1YjA5NCBzdWJ0cmFjdCAtNjcxLjUwNzE5OEUtOTA4NTg3ODkwIDMwNTc0MjkuMzJFLTU1NTIzMDYyMyAtPiAtMy4wNTc0MjkzMkUtNTU1MjMwNjE3IEluZXhhY3QgUm91bmRlZAoreGFkZDA5NSBhZGQgLTI5NC45OTQzNTJFKzM0NjQ1MjAyNyAtNjA2MTg1My4wIC0+IC0yLjk0OTk0MzUyRSszNDY0NTIwMjkgSW5leGFjdCBSb3VuZGVkCit4Y29tMDk1IGNvbXBhcmUgLTI5NC45OTQzNTJFKzM0NjQ1MjAyNyAtNjA2MTg1My4wIC0+IC0xCit4ZGl2MDk1IGRpdmlkZSAtMjk0Ljk5NDM1MkUrMzQ2NDUyMDI3IC02MDYxODUzLjAgLT4gNC44NjY0MDU1N0UrMzQ2NDUyMDIyIEluZXhhY3QgUm91bmRlZAoreGR2aTA5NSBkaXZpZGVpbnQgLTI5NC45OTQzNTJFKzM0NjQ1MjAyNyAtNjA2MTg1My4wIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMDk1IG11bHRpcGx5IC0yOTQuOTk0MzUyRSszNDY0NTIwMjcgLTYwNjE4NTMuMCAtPiAxLjc4ODIxMjQwRSszNDY0NTIwMzYgSW5leGFjdCBSb3VuZGVkCit4cG93MDk1IHBvd2VyIC0yOTQuOTk0MzUyRSszNDY0NTIwMjcgLTYwNjE4NTMgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTA5NSByZW1haW5kZXIgLTI5NC45OTQzNTJFKzM0NjQ1MjAyNyAtNjA2MTg1My4wIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMDk1IHN1YnRyYWN0IC0yOTQuOTk0MzUyRSszNDY0NTIwMjcgLTYwNjE4NTMuMCAtPiAtMi45NDk5NDM1MkUrMzQ2NDUyMDI5IEluZXhhY3QgUm91bmRlZAoreGFkZDA5NiBhZGQgMzI5NTc5MTE0IDE0Njc4MDU0OC4gLT4gNDc2MzU5NjYyCit4Y29tMDk2IGNvbXBhcmUgMzI5NTc5MTE0IDE0Njc4MDU0OC4gLT4gMQoreGRpdjA5NiBkaXZpZGUgMzI5NTc5MTE0IDE0Njc4MDU0OC4gLT4gMi4yNDUzODY4NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwOTYgZGl2aWRlaW50IDMyOTU3OTExNCAxNDY3ODA1NDguIC0+IDIKK3htdWwwOTYgbXVsdGlwbHkgMzI5NTc5MTE0IDE0Njc4MDU0OC4gLT4gNC44Mzc1ODAzMEUrMTYgSW5leGFjdCBSb3VuZGVkCit4cG93MDk2IHBvd2VyIDMyOTU3OTExNCAxNDY3ODA1NDggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMDk2IHJlbWFpbmRlciAzMjk1NzkxMTQgMTQ2NzgwNTQ4LiAtPiAzNjAxODAxOAoreHN1YjA5NiBzdWJ0cmFjdCAzMjk1NzkxMTQgMTQ2NzgwNTQ4LiAtPiAxODI3OTg1NjYKK3hhZGQwOTcgYWRkIC03ODk5MDQuNjg2RS0yMTcyMjUwMDAgLTE5OTEuMDcxODFFLTg0MDgwMDU5IC0+IC0xLjk5MTA3MTgxRS04NDA4MDA1NiBJbmV4YWN0IFJvdW5kZWQKK3hjb20wOTcgY29tcGFyZSAtNzg5OTA0LjY4NkUtMjE3MjI1MDAwIC0xOTkxLjA3MTgxRS04NDA4MDA1OSAtPiAxCit4ZGl2MDk3IGRpdmlkZSAtNzg5OTA0LjY4NkUtMjE3MjI1MDAwIC0xOTkxLjA3MTgxRS04NDA4MDA1OSAtPiAzLjk2NzIzMzU0RS0xMzMxNDQ5MzkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMDk3IGRpdmlkZWludCAtNzg5OTA0LjY4NkUtMjE3MjI1MDAwIC0xOTkxLjA3MTgxRS04NDA4MDA1OSAtPiAwCit4bXVsMDk3IG11bHRpcGx5IC03ODk5MDQuNjg2RS0yMTcyMjUwMDAgLTE5OTEuMDcxODFFLTg0MDgwMDU5IC0+IDEuNTcyNzU2OTVFLTMwMTMwNTA1MCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwOTcgcG93ZXIgLTc4OTkwNC42ODZFLTIxNzIyNTAwMCAtMiAtPiAxLjYwMjY5NDAzRSs0MzQ0NDk5ODggSW5leGFjdCBSb3VuZGVkCit4cmVtMDk3IHJlbWFpbmRlciAtNzg5OTA0LjY4NkUtMjE3MjI1MDAwIC0xOTkxLjA3MTgxRS04NDA4MDA1OSAtPiAtNy44OTkwNDY4NkUtMjE3MjI0OTk1Cit4c3ViMDk3IHN1YnRyYWN0IC03ODk5MDQuNjg2RS0yMTcyMjUwMDAgLTE5OTEuMDcxODFFLTg0MDgwMDU5IC0+IDEuOTkxMDcxODFFLTg0MDgwMDU2IEluZXhhY3QgUm91bmRlZAoreGFkZDA5OCBhZGQgNTk4OTMuMzU0NCAtNDA4NTk1ODY4IC0+IC00MDg1MzU5NzUgSW5leGFjdCBSb3VuZGVkCit4Y29tMDk4IGNvbXBhcmUgNTk4OTMuMzU0NCAtNDA4NTk1ODY4IC0+IDEKK3hkaXYwOTggZGl2aWRlIDU5ODkzLjM1NDQgLTQwODU5NTg2OCAtPiAtMC4wMDAxNDY1ODMzNTggSW5leGFjdCBSb3VuZGVkCit4ZHZpMDk4IGRpdmlkZWludCA1OTg5My4zNTQ0IC00MDg1OTU4NjggLT4gLTAKK3htdWwwOTggbXVsdGlwbHkgNTk4OTMuMzU0NCAtNDA4NTk1ODY4IC0+IC0yLjQ0NzIxNzcxRSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwOTggcG93ZXIgNTk4OTMuMzU0NCAtNDA4NTk1ODY4IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTA5OCByZW1haW5kZXIgNTk4OTMuMzU0NCAtNDA4NTk1ODY4IC0+IDU5ODkzLjM1NDQKK3hzdWIwOTggc3VidHJhY3QgNTk4OTMuMzU0NCAtNDA4NTk1ODY4IC0+IDQwODY1NTc2MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQwOTkgYWRkIDEyOS44Nzg2MTMgLTU0NjUyLjcyODhFLTk2MzU2NDk0MCAtPiAxMjkuODc4NjEzIEluZXhhY3QgUm91bmRlZAoreGNvbTA5OSBjb21wYXJlIDEyOS44Nzg2MTMgLTU0NjUyLjcyODhFLTk2MzU2NDk0MCAtPiAxCit4ZGl2MDk5IGRpdmlkZSAxMjkuODc4NjEzIC01NDY1Mi43Mjg4RS05NjM1NjQ5NDAgLT4gLTIuMzc2NDM0MThFKzk2MzU2NDkzNyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkwOTkgZGl2aWRlaW50IDEyOS44Nzg2MTMgLTU0NjUyLjcyODhFLTk2MzU2NDk0MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDA5OSBtdWx0aXBseSAxMjkuODc4NjEzIC01NDY1Mi43Mjg4RS05NjM1NjQ5NDAgLT4gLTcuMDk4MjIwNjFFLTk2MzU2NDkzNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cwOTkgcG93ZXIgMTI5Ljg3ODYxMyAtNSAtPiAyLjcwNTkwMDI5RS0xMSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0wOTkgcmVtYWluZGVyIDEyOS44Nzg2MTMgLTU0NjUyLjcyODhFLTk2MzU2NDk0MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjA5OSBzdWJ0cmFjdCAxMjkuODc4NjEzIC01NDY1Mi43Mjg4RS05NjM1NjQ5NDAgLT4gMTI5Ljg3ODYxMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMDAgYWRkIDk4NjYuOTkyMDggNzA4NzU2NTAxLiAtPiA3MDg3NjYzNjggSW5leGFjdCBSb3VuZGVkCit4Y29tMTAwIGNvbXBhcmUgOTg2Ni45OTIwOCA3MDg3NTY1MDEuIC0+IC0xCit4ZGl2MTAwIGRpdmlkZSA5ODY2Ljk5MjA4IDcwODc1NjUwMS4gLT4gMC4wMDAwMTM5MjE1NTQzIEluZXhhY3QgUm91bmRlZAoreGR2aTEwMCBkaXZpZGVpbnQgOTg2Ni45OTIwOCA3MDg3NTY1MDEuIC0+IDAKK3htdWwxMDAgbXVsdGlwbHkgOTg2Ni45OTIwOCA3MDg3NTY1MDEuIC0+IDYuOTkzMjk0NzhFKzEyIEluZXhhY3QgUm91bmRlZAoreHBvdzEwMCBwb3dlciA5ODY2Ljk5MjA4IDcwODc1NjUwMSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMDAgcmVtYWluZGVyIDk4NjYuOTkyMDggNzA4NzU2NTAxLiAtPiA5ODY2Ljk5MjA4Cit4c3ViMTAwIHN1YnRyYWN0IDk4NjYuOTkyMDggNzA4NzU2NTAxLiAtPiAtNzA4NzQ2NjM0IEluZXhhY3QgUm91bmRlZAoreGFkZDEwMSBhZGQgLTc4ODEwLjYyOTcgLTM5OTg4NC42OCAtPiAtNDc4Njk1LjMxMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMDEgY29tcGFyZSAtNzg4MTAuNjI5NyAtMzk5ODg0LjY4IC0+IDEKK3hkaXYxMDEgZGl2aWRlIC03ODgxMC42Mjk3IC0zOTk4ODQuNjggLT4gMC4xOTcwODMzOTMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTAxIGRpdmlkZWludCAtNzg4MTAuNjI5NyAtMzk5ODg0LjY4IC0+IDAKK3htdWwxMDEgbXVsdGlwbHkgLTc4ODEwLjYyOTcgLTM5OTg4NC42OCAtPiAzLjE1MTUxNjM0RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMDEgcG93ZXIgLTc4ODEwLjYyOTcgLTM5OTg4NSAtPiAtMS41NDI1MjQwOEUtMTk1ODA3MSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMDEgcmVtYWluZGVyIC03ODgxMC42Mjk3IC0zOTk4ODQuNjggLT4gLTc4ODEwLjYyOTcKK3hzdWIxMDEgc3VidHJhY3QgLTc4ODEwLjYyOTcgLTM5OTg4NC42OCAtPiAzMjEwNzQuMDUwIEluZXhhY3QgUm91bmRlZAoreGFkZDEwMiBhZGQgNDA5MTg5NzYxIC03NzEuNDcxNDYwIC0+IDQwOTE4ODk5MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMDIgY29tcGFyZSA0MDkxODk3NjEgLTc3MS40NzE0NjAgLT4gMQoreGRpdjEwMiBkaXZpZGUgNDA5MTg5NzYxIC03NzEuNDcxNDYwIC0+IC01MzA0MDEuNjgzIEluZXhhY3QgUm91bmRlZAoreGR2aTEwMiBkaXZpZGVpbnQgNDA5MTg5NzYxIC03NzEuNDcxNDYwIC0+IC01MzA0MDEKK3htdWwxMDIgbXVsdGlwbHkgNDA5MTg5NzYxIC03NzEuNDcxNDYwIC0+IC0zLjE1Njc4MjIyRSsxMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMDIgcG93ZXIgNDA5MTg5NzYxIC03NzEgLT4gMS42MDY5ODQxNEUtNjY0MCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMDIgcmVtYWluZGVyIDQwOTE4OTc2MSAtNzcxLjQ3MTQ2MCAtPiA1MjcuMTQ0NTQwCit4c3ViMTAyIHN1YnRyYWN0IDQwOTE4OTc2MSAtNzcxLjQ3MTQ2MCAtPiA0MDkxOTA1MzIgSW5leGFjdCBSb3VuZGVkCit4YWRkMTAzIGFkZCAtMS42ODc0ODgzOCA0NjAuNDY5MjQgLT4gNDU4Ljc4MTc1MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMDMgY29tcGFyZSAtMS42ODc0ODgzOCA0NjAuNDY5MjQgLT4gLTEKK3hkaXYxMDMgZGl2aWRlIC0xLjY4NzQ4ODM4IDQ2MC40NjkyNCAtPiAtMC4wMDM2NjQ3MTQ2NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMDMgZGl2aWRlaW50IC0xLjY4NzQ4ODM4IDQ2MC40NjkyNCAtPiAtMAoreG11bDEwMyBtdWx0aXBseSAtMS42ODc0ODgzOCA0NjAuNDY5MjQgLT4gLTc3Ny4wMzY0OTIgSW5leGFjdCBSb3VuZGVkCit4cG93MTAzIHBvd2VyIC0xLjY4NzQ4ODM4IDQ2MCAtPiAzLjM5NDQwNjQ4RSsxMDQgSW5leGFjdCBSb3VuZGVkCit4cmVtMTAzIHJlbWFpbmRlciAtMS42ODc0ODgzOCA0NjAuNDY5MjQgLT4gLTEuNjg3NDg4MzgKK3hzdWIxMDMgc3VidHJhY3QgLTEuNjg3NDg4MzggNDYwLjQ2OTI0IC0+IC00NjIuMTU2NzI4IEluZXhhY3QgUm91bmRlZAoreGFkZDEwNCBhZGQgNTUzNTI3Mjk2LiAtNzkyNC40MDE4NSAtPiA1NTM1MTkzNzIgSW5leGFjdCBSb3VuZGVkCit4Y29tMTA0IGNvbXBhcmUgNTUzNTI3Mjk2LiAtNzkyNC40MDE4NSAtPiAxCit4ZGl2MTA0IGRpdmlkZSA1NTM1MjcyOTYuIC03OTI0LjQwMTg1IC0+IC02OTg1MC45ODc3IEluZXhhY3QgUm91bmRlZAoreGR2aTEwNCBkaXZpZGVpbnQgNTUzNTI3Mjk2LiAtNzkyNC40MDE4NSAtPiAtNjk4NTAKK3htdWwxMDQgbXVsdGlwbHkgNTUzNTI3Mjk2LiAtNzkyNC40MDE4NSAtPiAtNC4zODYzNzI3M0UrMTIgSW5leGFjdCBSb3VuZGVkCit4cG93MTA0IHBvd2VyIDU1MzUyNzI5Ni4gLTc5MjQgLT4gMi4zMjM5NzIxNEUtNjkyODEgSW5leGFjdCBSb3VuZGVkCit4cmVtMTA0IHJlbWFpbmRlciA1NTM1MjcyOTYuIC03OTI0LjQwMTg1IC0+IDc4MjYuNzc3NTAKK3hzdWIxMDQgc3VidHJhY3QgNTUzNTI3Mjk2LiAtNzkyNC40MDE4NSAtPiA1NTM1MzUyMjAgSW5leGFjdCBSb3VuZGVkCit4YWRkMTA1IGFkZCAtMzguNzQ2NTIwNyA2NDkzNi4yOTQyIC0+IDY0ODk3LjU0NzcgSW5leGFjdCBSb3VuZGVkCit4Y29tMTA1IGNvbXBhcmUgLTM4Ljc0NjUyMDcgNjQ5MzYuMjk0MiAtPiAtMQoreGRpdjEwNSBkaXZpZGUgLTM4Ljc0NjUyMDcgNjQ5MzYuMjk0MiAtPiAtMC4wMDA1OTY2ODUxMjMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTA1IGRpdmlkZWludCAtMzguNzQ2NTIwNyA2NDkzNi4yOTQyIC0+IC0wCit4bXVsMTA1IG11bHRpcGx5IC0zOC43NDY1MjA3IDY0OTM2LjI5NDIgLT4gLTI1MTYwNTUuNDcgSW5leGFjdCBSb3VuZGVkCit4cG93MTA1IHBvd2VyIC0zOC43NDY1MjA3IDY0OTM2IC0+IDMuMDE1MDA3NjJFKzEwMzEzMyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMDUgcmVtYWluZGVyIC0zOC43NDY1MjA3IDY0OTM2LjI5NDIgLT4gLTM4Ljc0NjUyMDcKK3hzdWIxMDUgc3VidHJhY3QgLTM4Ljc0NjUyMDcgNjQ5MzYuMjk0MiAtPiAtNjQ5NzUuMDQwNyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMDYgYWRkIC0yMDEwNzUuMjQ4IDg0NS42NjM5MjggLT4gLTIwMDIyOS41ODQgSW5leGFjdCBSb3VuZGVkCit4Y29tMTA2IGNvbXBhcmUgLTIwMTA3NS4yNDggODQ1LjY2MzkyOCAtPiAtMQoreGRpdjEwNiBkaXZpZGUgLTIwMTA3NS4yNDggODQ1LjY2MzkyOCAtPiAtMjM3Ljc3MjA1MyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMDYgZGl2aWRlaW50IC0yMDEwNzUuMjQ4IDg0NS42NjM5MjggLT4gLTIzNworeG11bDEwNiBtdWx0aXBseSAtMjAxMDc1LjI0OCA4NDUuNjYzOTI4IC0+IC0xNzAwNDIwODQgSW5leGFjdCBSb3VuZGVkCit4cG93MTA2IHBvd2VyIC0yMDEwNzUuMjQ4IDg0NiAtPiA0LjM3OTExNzY3RSs0NDg2IEluZXhhY3QgUm91bmRlZAoreHJlbTEwNiByZW1haW5kZXIgLTIwMTA3NS4yNDggODQ1LjY2MzkyOCAtPiAtNjUyLjg5NzA2NAoreHN1YjEwNiBzdWJ0cmFjdCAtMjAxMDc1LjI0OCA4NDUuNjYzOTI4IC0+IC0yMDE5MjAuOTEyIEluZXhhY3QgUm91bmRlZAoreGFkZDEwNyBhZGQgOTEwNDguNDU1OSA3NTk1MzYwOS4zIC0+IDc2MDQ0NjU3LjggSW5leGFjdCBSb3VuZGVkCit4Y29tMTA3IGNvbXBhcmUgOTEwNDguNDU1OSA3NTk1MzYwOS4zIC0+IC0xCit4ZGl2MTA3IGRpdmlkZSA5MTA0OC40NTU5IDc1OTUzNjA5LjMgLT4gMC4wMDExOTg3Mzc3MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMDcgZGl2aWRlaW50IDkxMDQ4LjQ1NTkgNzU5NTM2MDkuMyAtPiAwCit4bXVsMTA3IG11bHRpcGx5IDkxMDQ4LjQ1NTkgNzU5NTM2MDkuMyAtPiA2LjkxNTQ1ODg1RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMDcgcG93ZXIgOTEwNDguNDU1OSA3NTk1MzYwOSAtPiA2Ljk0NDY3NzQ2RSszNzY2NzQ2NTAgSW5leGFjdCBSb3VuZGVkCit4cmVtMTA3IHJlbWFpbmRlciA5MTA0OC40NTU5IDc1OTUzNjA5LjMgLT4gOTEwNDguNDU1OQoreHN1YjEwNyBzdWJ0cmFjdCA5MTA0OC40NTU5IDc1OTUzNjA5LjMgLT4gLTc1ODYyNTYwLjggSW5leGFjdCBSb3VuZGVkCit4YWRkMTA4IGFkZCA2ODk4MjczLjg2RS0yNTIwOTc0NjAgMTUuMzQ1NjE5NiAtPiAxNS4zNDU2MTk2IEluZXhhY3QgUm91bmRlZAoreGNvbTEwOCBjb21wYXJlIDY4OTgyNzMuODZFLTI1MjA5NzQ2MCAxNS4zNDU2MTk2IC0+IC0xCit4ZGl2MTA4IGRpdmlkZSA2ODk4MjczLjg2RS0yNTIwOTc0NjAgMTUuMzQ1NjE5NiAtPiA0LjQ5NTI3MjI5RS0yNTIwOTc0NTUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTA4IGRpdmlkZWludCA2ODk4MjczLjg2RS0yNTIwOTc0NjAgMTUuMzQ1NjE5NiAtPiAwCit4bXVsMTA4IG11bHRpcGx5IDY4OTgyNzMuODZFLTI1MjA5NzQ2MCAxNS4zNDU2MTk2IC0+IDEuMDU4NTgyODdFLTI1MjA5NzQ1MiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMDggcG93ZXIgNjg5ODI3My44NkUtMjUyMDk3NDYwIDE1IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTEwOCByZW1haW5kZXIgNjg5ODI3My44NkUtMjUyMDk3NDYwIDE1LjM0NTYxOTYgLT4gNi44OTgyNzM4NkUtMjUyMDk3NDU0Cit4c3ViMTA4IHN1YnRyYWN0IDY4OTgyNzMuODZFLTI1MjA5NzQ2MCAxNS4zNDU2MTk2IC0+IC0xNS4zNDU2MTk2IEluZXhhY3QgUm91bmRlZAoreGFkZDEwOSBhZGQgODguNDM3MDM0MyAtOTgwNzA5MTA1RS04Njk4OTkyODkgLT4gODguNDM3MDM0MyBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMDkgY29tcGFyZSA4OC40MzcwMzQzIC05ODA3MDkxMDVFLTg2OTg5OTI4OSAtPiAxCit4ZGl2MTA5IGRpdmlkZSA4OC40MzcwMzQzIC05ODA3MDkxMDVFLTg2OTg5OTI4OSAtPiAtOS4wMTc2NjIyMEUrODY5ODk5MjgxIEluZXhhY3QgUm91bmRlZAoreGR2aTEwOSBkaXZpZGVpbnQgODguNDM3MDM0MyAtOTgwNzA5MTA1RS04Njk4OTkyODkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwxMDkgbXVsdGlwbHkgODguNDM3MDM0MyAtOTgwNzA5MTA1RS04Njk4OTkyODkgLT4gLTguNjczMTAwNDhFLTg2OTg5OTI3OSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMDkgcG93ZXIgODguNDM3MDM0MyAtMTAgLT4gMy40MTcxMDQ3OUUtMjAgSW5leGFjdCBSb3VuZGVkCit4cmVtMTA5IHJlbWFpbmRlciA4OC40MzcwMzQzIC05ODA3MDkxMDVFLTg2OTg5OTI4OSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjEwOSBzdWJ0cmFjdCA4OC40MzcwMzQzIC05ODA3MDkxMDVFLTg2OTg5OTI4OSAtPiA4OC40MzcwMzQzIEluZXhhY3QgUm91bmRlZAoreGFkZDExMCBhZGQgLTE3NjQzLjM5IDIuMDM1MjU2OEUrMzA0ODcxMzMxIC0+IDIuMDM1MjU2ODBFKzMwNDg3MTMzMSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMTAgY29tcGFyZSAtMTc2NDMuMzkgMi4wMzUyNTY4RSszMDQ4NzEzMzEgLT4gLTEKK3hkaXYxMTAgZGl2aWRlIC0xNzY0My4zOSAyLjAzNTI1NjhFKzMwNDg3MTMzMSAtPiAtOC42Njg4NzY1OEUtMzA0ODcxMzI4IEluZXhhY3QgUm91bmRlZAoreGR2aTExMCBkaXZpZGVpbnQgLTE3NjQzLjM5IDIuMDM1MjU2OEUrMzA0ODcxMzMxIC0+IC0wCit4bXVsMTEwIG11bHRpcGx5IC0xNzY0My4zOSAyLjAzNTI1NjhFKzMwNDg3MTMzMSAtPiAtMy41OTA4ODI5NUUrMzA0ODcxMzM1IEluZXhhY3QgUm91bmRlZAoreHBvdzExMCBwb3dlciAtMTc2NDMuMzkgMiAtPiAzMTEyODkyMTEgSW5leGFjdCBSb3VuZGVkCit4cmVtMTEwIHJlbWFpbmRlciAtMTc2NDMuMzkgMi4wMzUyNTY4RSszMDQ4NzEzMzEgLT4gLTE3NjQzLjM5Cit4c3ViMTEwIHN1YnRyYWN0IC0xNzY0My4zOSAyLjAzNTI1NjhFKzMwNDg3MTMzMSAtPiAtMi4wMzUyNTY4MEUrMzA0ODcxMzMxIEluZXhhY3QgUm91bmRlZAoreGFkZDExMSBhZGQgNDU4OTc4NS4xNiA3NDU5LjA0MjM3IC0+IDQ1OTcyNDQuMjAgSW5leGFjdCBSb3VuZGVkCit4Y29tMTExIGNvbXBhcmUgNDU4OTc4NS4xNiA3NDU5LjA0MjM3IC0+IDEKK3hkaXYxMTEgZGl2aWRlIDQ1ODk3ODUuMTYgNzQ1OS4wNDIzNyAtPiA2MTUuMzMxNjkyIEluZXhhY3QgUm91bmRlZAoreGR2aTExMSBkaXZpZGVpbnQgNDU4OTc4NS4xNiA3NDU5LjA0MjM3IC0+IDYxNQoreG11bDExMSBtdWx0aXBseSA0NTg5Nzg1LjE2IDc0NTkuMDQyMzcgLT4gMy40MjM1NDAyMEUrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93MTExIHBvd2VyIDQ1ODk3ODUuMTYgNzQ1OSAtPiAyLjAzNzk1MjU4RSs0OTY5MCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMTEgcmVtYWluZGVyIDQ1ODk3ODUuMTYgNzQ1OS4wNDIzNyAtPiAyNDc0LjEwMjQ1Cit4c3ViMTExIHN1YnRyYWN0IDQ1ODk3ODUuMTYgNzQ1OS4wNDIzNyAtPiA0NTgyMzI2LjEyIEluZXhhY3QgUm91bmRlZAoreGFkZDExMiBhZGQgLTUxLjE2MzIwOTBFLTc1Mzk2ODA4MiA4Ljk2MjA3NDcxRS01ODU3OTc4ODcgLT4gOC45NjIwNzQ3MUUtNTg1Nzk3ODg3IEluZXhhY3QgUm91bmRlZAoreGNvbTExMiBjb21wYXJlIC01MS4xNjMyMDkwRS03NTM5NjgwODIgOC45NjIwNzQ3MUUtNTg1Nzk3ODg3IC0+IC0xCit4ZGl2MTEyIGRpdmlkZSAtNTEuMTYzMjA5MEUtNzUzOTY4MDgyIDguOTYyMDc0NzFFLTU4NTc5Nzg4NyAtPiAtNS43MDg4NTc2OEUtMTY4MTcwMTk1IEluZXhhY3QgUm91bmRlZAoreGR2aTExMiBkaXZpZGVpbnQgLTUxLjE2MzIwOTBFLTc1Mzk2ODA4MiA4Ljk2MjA3NDcxRS01ODU3OTc4ODcgLT4gLTAKK3htdWwxMTIgbXVsdGlwbHkgLTUxLjE2MzIwOTBFLTc1Mzk2ODA4MiA4Ljk2MjA3NDcxRS01ODU3OTc4ODcgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHBvdzExMiBwb3dlciAtNTEuMTYzMjA5MEUtNzUzOTY4MDgyIDkgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTExMiByZW1haW5kZXIgLTUxLjE2MzIwOTBFLTc1Mzk2ODA4MiA4Ljk2MjA3NDcxRS01ODU3OTc4ODcgLT4gLTUuMTE2MzIwOTBFLTc1Mzk2ODA4MQoreHN1YjExMiBzdWJ0cmFjdCAtNTEuMTYzMjA5MEUtNzUzOTY4MDgyIDguOTYyMDc0NzFFLTU4NTc5Nzg4NyAtPiAtOC45NjIwNzQ3MUUtNTg1Nzk3ODg3IEluZXhhY3QgUm91bmRlZAoreGFkZDExMyBhZGQgOTgyLjIxNzgxNyA3MjI0OTA5LjRFLTQ1MjQzODE2IC0+IDk4Mi4yMTc4MTcgSW5leGFjdCBSb3VuZGVkCit4Y29tMTEzIGNvbXBhcmUgOTgyLjIxNzgxNyA3MjI0OTA5LjRFLTQ1MjQzODE2IC0+IDEKK3hkaXYxMTMgZGl2aWRlIDk4Mi4yMTc4MTcgNzIyNDkwOS40RS00NTI0MzgxNiAtPiAxLjM1OTQ4ODA3RSs0NTI0MzgxMiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMTMgZGl2aWRlaW50IDk4Mi4yMTc4MTcgNzIyNDkwOS40RS00NTI0MzgxNiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDExMyBtdWx0aXBseSA5ODIuMjE3ODE3IDcyMjQ5MDkuNEUtNDUyNDM4MTYgLT4gNy4wOTY0MzQ3NEUtNDUyNDM4MDcgSW5leGFjdCBSb3VuZGVkCit4cG93MTEzIHBvd2VyIDk4Mi4yMTc4MTcgNyAtPiA4LjgxOTcxNzA5RSsyMCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMTMgcmVtYWluZGVyIDk4Mi4yMTc4MTcgNzIyNDkwOS40RS00NTI0MzgxNiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjExMyBzdWJ0cmFjdCA5ODIuMjE3ODE3IDcyMjQ5MDkuNEUtNDUyNDM4MTYgLT4gOTgyLjIxNzgxNyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMTQgYWRkIDUwMzcxMjA1Ni4gLTU3NDkwNzAzLjVFKzkyNDg5MDE4MyAtPiAtNS43NDkwNzAzNUUrOTI0ODkwMTkwIEluZXhhY3QgUm91bmRlZAoreGNvbTExNCBjb21wYXJlIDUwMzcxMjA1Ni4gLTU3NDkwNzAzLjVFKzkyNDg5MDE4MyAtPiAxCit4ZGl2MTE0IGRpdmlkZSA1MDM3MTIwNTYuIC01NzQ5MDcwMy41RSs5MjQ4OTAxODMgLT4gLTguNzYxNjI2MjNFLTkyNDg5MDE4MyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMTQgZGl2aWRlaW50IDUwMzcxMjA1Ni4gLTU3NDkwNzAzLjVFKzkyNDg5MDE4MyAtPiAtMAoreG11bDExNCBtdWx0aXBseSA1MDM3MTIwNTYuIC01NzQ5MDcwMy41RSs5MjQ4OTAxODMgLT4gLTIuODk1ODc2MDVFKzkyNDg5MDE5OSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMTQgcG93ZXIgNTAzNzEyMDU2LiAtNiAtPiA2LjEyMjE3NzY0RS01MyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMTQgcmVtYWluZGVyIDUwMzcxMjA1Ni4gLTU3NDkwNzAzLjVFKzkyNDg5MDE4MyAtPiA1MDM3MTIwNTYKK3hzdWIxMTQgc3VidHJhY3QgNTAzNzEyMDU2LiAtNTc0OTA3MDMuNUUrOTI0ODkwMTgzIC0+IDUuNzQ5MDcwMzVFKzkyNDg5MDE5MCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMTUgYWRkIDg4My44NDkyMjMgMjQ5MjU5MTcxIC0+IDI0OTI2MDA1NSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMTUgY29tcGFyZSA4ODMuODQ5MjIzIDI0OTI1OTE3MSAtPiAtMQoreGRpdjExNSBkaXZpZGUgODgzLjg0OTIyMyAyNDkyNTkxNzEgLT4gMC4wMDAwMDM1NDU5MDQ1MyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMTUgZGl2aWRlaW50IDg4My44NDkyMjMgMjQ5MjU5MTcxIC0+IDAKK3htdWwxMTUgbXVsdGlwbHkgODgzLjg0OTIyMyAyNDkyNTkxNzEgLT4gMi4yMDMwNzUyNUUrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93MTE1IHBvd2VyIDg4My44NDkyMjMgMjQ5MjU5MTcxIC0+IDUuMTU2NDI4NDRFKzczNDQxMTc4MyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMTUgcmVtYWluZGVyIDg4My44NDkyMjMgMjQ5MjU5MTcxIC0+IDg4My44NDkyMjMKK3hzdWIxMTUgc3VidHJhY3QgODgzLjg0OTIyMyAyNDkyNTkxNzEgLT4gLTI0OTI1ODI4NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMTYgYWRkIDI0NS4wOTI4NTNFKzg3MjY0Mjg3NCA4MjgxOTUuMTUyRSs0MTk3NzE1MzIgLT4gMi40NTA5Mjg1M0UrODcyNjQyODc2IEluZXhhY3QgUm91bmRlZAoreGNvbTExNiBjb21wYXJlIDI0NS4wOTI4NTNFKzg3MjY0Mjg3NCA4MjgxOTUuMTUyRSs0MTk3NzE1MzIgLT4gMQoreGRpdjExNiBkaXZpZGUgMjQ1LjA5Mjg1M0UrODcyNjQyODc0IDgyODE5NS4xNTJFKzQxOTc3MTUzMiAtPiAyLjk1OTM2MTEyRSs0NTI4NzEzMzggSW5leGFjdCBSb3VuZGVkCit4ZHZpMTE2IGRpdmlkZWludCAyNDUuMDkyODUzRSs4NzI2NDI4NzQgODI4MTk1LjE1MkUrNDE5NzcxNTMyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTE2IG11bHRpcGx5IDI0NS4wOTI4NTNFKzg3MjY0Mjg3NCA4MjgxOTUuMTUyRSs0MTk3NzE1MzIgLT4gSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCit4cG93MTE2IHBvd2VyIDI0NS4wOTI4NTNFKzg3MjY0Mjg3NCA4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTExNiByZW1haW5kZXIgMjQ1LjA5Mjg1M0UrODcyNjQyODc0IDgyODE5NS4xNTJFKzQxOTc3MTUzMiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjExNiBzdWJ0cmFjdCAyNDUuMDkyODUzRSs4NzI2NDI4NzQgODI4MTk1LjE1MkUrNDE5NzcxNTMyIC0+IDIuNDUwOTI4NTNFKzg3MjY0Mjg3NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMTcgYWRkIC04MzY1ODYzOC42RSs3Mjg1NTE5MjggMjk1MjQ3OC40MiAtPiAtOC4zNjU4NjM4NkUrNzI4NTUxOTM1IEluZXhhY3QgUm91bmRlZAoreGNvbTExNyBjb21wYXJlIC04MzY1ODYzOC42RSs3Mjg1NTE5MjggMjk1MjQ3OC40MiAtPiAtMQoreGRpdjExNyBkaXZpZGUgLTgzNjU4NjM4LjZFKzcyODU1MTkyOCAyOTUyNDc4LjQyIC0+IC0yLjgzMzUwNTUxRSs3Mjg1NTE5MjkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTE3IGRpdmlkZWludCAtODM2NTg2MzguNkUrNzI4NTUxOTI4IDI5NTI0NzguNDIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwxMTcgbXVsdGlwbHkgLTgzNjU4NjM4LjZFKzcyODU1MTkyOCAyOTUyNDc4LjQyIC0+IC0yLjQ3MDAwMzI1RSs3Mjg1NTE5NDIgSW5leGFjdCBSb3VuZGVkCit4cG93MTE3IHBvd2VyIC04MzY1ODYzOC42RSs3Mjg1NTE5MjggMjk1MjQ3OCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMTcgcmVtYWluZGVyIC04MzY1ODYzOC42RSs3Mjg1NTE5MjggMjk1MjQ3OC40MiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjExNyBzdWJ0cmFjdCAtODM2NTg2MzguNkUrNzI4NTUxOTI4IDI5NTI0NzguNDIgLT4gLTguMzY1ODYzODZFKzcyODU1MTkzNSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMTggYWRkIC02MjkxNzgwLjk3IDI2OTk2Ny4zOTRFLTIyMDAwODE3IC0+IC02MjkxNzgwLjk3IEluZXhhY3QgUm91bmRlZAoreGNvbTExOCBjb21wYXJlIC02MjkxNzgwLjk3IDI2OTk2Ny4zOTRFLTIyMDAwODE3IC0+IC0xCit4ZGl2MTE4IGRpdmlkZSAtNjI5MTc4MC45NyAyNjk5NjcuMzk0RS0yMjAwMDgxNyAtPiAtMi4zMzA1NzA2OUUrMjIwMDA4MTggSW5leGFjdCBSb3VuZGVkCit4ZHZpMTE4IGRpdmlkZWludCAtNjI5MTc4MC45NyAyNjk5NjcuMzk0RS0yMjAwMDgxNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDExOCBtdWx0aXBseSAtNjI5MTc4MC45NyAyNjk5NjcuMzk0RS0yMjAwMDgxNyAtPiAtMS42OTg1NzU3MUUtMjIwMDA4MDUgSW5leGFjdCBSb3VuZGVkCit4cG93MTE4IHBvd2VyIC02MjkxNzgwLjk3IDMgLT4gLTIuNDkwNjk2MzZFKzIwIEluZXhhY3QgUm91bmRlZAoreHJlbTExOCByZW1haW5kZXIgLTYyOTE3ODAuOTcgMjY5OTY3LjM5NEUtMjIwMDA4MTcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxMTggc3VidHJhY3QgLTYyOTE3ODAuOTcgMjY5OTY3LjM5NEUtMjIwMDA4MTcgLT4gLTYyOTE3ODAuOTcgSW5leGFjdCBSb3VuZGVkCit4YWRkMTE5IGFkZCA5Nzg1NzEzNDguRSsyMjIzODI1NDcgNjAwNi4xOTM3MCAtPiA5Ljc4NTcxMzQ4RSsyMjIzODI1NTUgSW5leGFjdCBSb3VuZGVkCit4Y29tMTE5IGNvbXBhcmUgOTc4NTcxMzQ4LkUrMjIyMzgyNTQ3IDYwMDYuMTkzNzAgLT4gMQoreGRpdjExOSBkaXZpZGUgOTc4NTcxMzQ4LkUrMjIyMzgyNTQ3IDYwMDYuMTkzNzAgLT4gMS42MjkyNzAzOEUrMjIyMzgyNTUyIEluZXhhY3QgUm91bmRlZAoreGR2aTExOSBkaXZpZGVpbnQgOTc4NTcxMzQ4LkUrMjIyMzgyNTQ3IDYwMDYuMTkzNzAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwxMTkgbXVsdGlwbHkgOTc4NTcxMzQ4LkUrMjIyMzgyNTQ3IDYwMDYuMTkzNzAgLT4gNS44Nzc0ODkwN0UrMjIyMzgyNTU5IEluZXhhY3QgUm91bmRlZAoreHBvdzExOSBwb3dlciA5Nzg1NzEzNDguRSsyMjIzODI1NDcgNjAwNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMTkgcmVtYWluZGVyIDk3ODU3MTM0OC5FKzIyMjM4MjU0NyA2MDA2LjE5MzcwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTE5IHN1YnRyYWN0IDk3ODU3MTM0OC5FKzIyMjM4MjU0NyA2MDA2LjE5MzcwIC0+IDkuNzg1NzEzNDhFKzIyMjM4MjU1NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMjAgYWRkIDE0MjM5MDI5LiAtMzY1MjcuMjIyMSAtPiAxNDIwMjUwMS44IEluZXhhY3QgUm91bmRlZAoreGNvbTEyMCBjb21wYXJlIDE0MjM5MDI5LiAtMzY1MjcuMjIyMSAtPiAxCit4ZGl2MTIwIGRpdmlkZSAxNDIzOTAyOS4gLTM2NTI3LjIyMjEgLT4gLTM4OS44MTk2NTIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTIwIGRpdmlkZWludCAxNDIzOTAyOS4gLTM2NTI3LjIyMjEgLT4gLTM4OQoreG11bDEyMCBtdWx0aXBseSAxNDIzOTAyOS4gLTM2NTI3LjIyMjEgLT4gLTUuMjAxMTIxNzVFKzExIEluZXhhY3QgUm91bmRlZAoreHBvdzEyMCBwb3dlciAxNDIzOTAyOS4gLTM2NTI3IC0+IDYuNjQyOTI3MzFFLTI2MTI5NiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMjAgcmVtYWluZGVyIDE0MjM5MDI5LiAtMzY1MjcuMjIyMSAtPiAyOTkzOS42MDMxCit4c3ViMTIwIHN1YnRyYWN0IDE0MjM5MDI5LiAtMzY1MjcuMjIyMSAtPiAxNDI3NTU1Ni4yIEluZXhhY3QgUm91bmRlZAoreGFkZDEyMSBhZGQgNzIzMzMuMjY1NEUtNTQ0NDI1NTQ4IC02OTAuNjY0ODM2RSs2NjIxNTUxMjAgLT4gLTYuOTA2NjQ4MzZFKzY2MjE1NTEyMiBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMjEgY29tcGFyZSA3MjMzMy4yNjU0RS01NDQ0MjU1NDggLTY5MC42NjQ4MzZFKzY2MjE1NTEyMCAtPiAxCit4ZGl2MTIxIGRpdmlkZSA3MjMzMy4yNjU0RS01NDQ0MjU1NDggLTY5MC42NjQ4MzZFKzY2MjE1NTEyMCAtPiAtMEUtMTAwMDAwMDAwNyBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkCit4ZHZpMTIxIGRpdmlkZWludCA3MjMzMy4yNjU0RS01NDQ0MjU1NDggLTY5MC42NjQ4MzZFKzY2MjE1NTEyMCAtPiAtMAoreG11bDEyMSBtdWx0aXBseSA3MjMzMy4yNjU0RS01NDQ0MjU1NDggLTY5MC42NjQ4MzZFKzY2MjE1NTEyMCAtPiAtNC45OTU4MDQyOUUrMTE3NzI5NTc5IEluZXhhY3QgUm91bmRlZAoreHBvdzEyMSBwb3dlciA3MjMzMy4yNjU0RS01NDQ0MjU1NDggLTcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMTIxIHJlbWFpbmRlciA3MjMzMy4yNjU0RS01NDQ0MjU1NDggLTY5MC42NjQ4MzZFKzY2MjE1NTEyMCAtPiA3LjIzMzMyNjU0RS01NDQ0MjU1NDQKK3hzdWIxMjEgc3VidHJhY3QgNzIzMzMuMjY1NEUtNTQ0NDI1NTQ4IC02OTAuNjY0ODM2RSs2NjIxNTUxMjAgLT4gNi45MDY2NDgzNkUrNjYyMTU1MTIyIEluZXhhY3QgUm91bmRlZAoreGFkZDEyMiBhZGQgLTM3NzIxLjE1NjdFLTExNTc4NzM0MSAtODI4OTQ5ODY0RS03NjI1MTc0NyAtPiAtOC4yODk0OTg2NEUtNzYyNTE3MzkgSW5leGFjdCBSb3VuZGVkCit4Y29tMTIyIGNvbXBhcmUgLTM3NzIxLjE1NjdFLTExNTc4NzM0MSAtODI4OTQ5ODY0RS03NjI1MTc0NyAtPiAxCit4ZGl2MTIyIGRpdmlkZSAtMzc3MjEuMTU2N0UtMTE1Nzg3MzQxIC04Mjg5NDk4NjRFLTc2MjUxNzQ3IC0+IDQuNTUwNDc1MDVFLTM5NTM1NTk5IEluZXhhY3QgUm91bmRlZAoreGR2aTEyMiBkaXZpZGVpbnQgLTM3NzIxLjE1NjdFLTExNTc4NzM0MSAtODI4OTQ5ODY0RS03NjI1MTc0NyAtPiAwCit4bXVsMTIyIG11bHRpcGx5IC0zNzcyMS4xNTY3RS0xMTU3ODczNDEgLTgyODk0OTg2NEUtNzYyNTE3NDcgLT4gMy4xMjY4OTQ3N0UtMTkyMDM5MDc1IEluZXhhY3QgUm91bmRlZAoreHBvdzEyMiBwb3dlciAtMzc3MjEuMTU2N0UtMTE1Nzg3MzQxIC04IC0+IDIuNDM5NjA3NjVFKzkyNjI5ODY5MSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMjIgcmVtYWluZGVyIC0zNzcyMS4xNTY3RS0xMTU3ODczNDEgLTgyODk0OTg2NEUtNzYyNTE3NDcgLT4gLTMuNzcyMTE1NjdFLTExNTc4NzMzNworeHN1YjEyMiBzdWJ0cmFjdCAtMzc3MjEuMTU2N0UtMTE1Nzg3MzQxIC04Mjg5NDk4NjRFLTc2MjUxNzQ3IC0+IDguMjg5NDk4NjRFLTc2MjUxNzM5IEluZXhhY3QgUm91bmRlZAoreGFkZDEyMyBhZGQgLTIwNzg4NTIuODNFLTY0NzA4MDA4OSAtMTE5Nzc5ODU4LkUrNzM0NjY1NDYxIC0+IC0xLjE5Nzc5ODU4RSs3MzQ2NjU0NjkgSW5leGFjdCBSb3VuZGVkCit4Y29tMTIzIGNvbXBhcmUgLTIwNzg4NTIuODNFLTY0NzA4MDA4OSAtMTE5Nzc5ODU4LkUrNzM0NjY1NDYxIC0+IDEKK3hkaXYxMjMgZGl2aWRlIC0yMDc4ODUyLjgzRS02NDcwODAwODkgLTExOTc3OTg1OC5FKzczNDY2NTQ2MSAtPiAwRS0xMDAwMDAwMDA3IEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsIENsYW1wZWQKK3hkdmkxMjMgZGl2aWRlaW50IC0yMDc4ODUyLjgzRS02NDcwODAwODkgLTExOTc3OTg1OC5FKzczNDY2NTQ2MSAtPiAwCit4bXVsMTIzIG11bHRpcGx5IC0yMDc4ODUyLjgzRS02NDcwODAwODkgLTExOTc3OTg1OC5FKzczNDY2NTQ2MSAtPiAyLjQ5MDA0Njk3RSs4NzU4NTM4NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMjMgcG93ZXIgLTIwNzg4NTIuODNFLTY0NzA4MDA4OSAtMSAtPiAtNC44MTAzNDUzM0UrNjQ3MDgwMDgyIEluZXhhY3QgUm91bmRlZAoreHJlbTEyMyByZW1haW5kZXIgLTIwNzg4NTIuODNFLTY0NzA4MDA4OSAtMTE5Nzc5ODU4LkUrNzM0NjY1NDYxIC0+IC0yLjA3ODg1MjgzRS02NDcwODAwODMKK3hzdWIxMjMgc3VidHJhY3QgLTIwNzg4NTIuODNFLTY0NzA4MDA4OSAtMTE5Nzc5ODU4LkUrNzM0NjY1NDYxIC0+IDEuMTk3Nzk4NThFKzczNDY2NTQ2OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMjQgYWRkIC03OTE0NS4zNjI1IC03NzE4LjU3MzA3IC0+IC04Njg2My45MzU2IEluZXhhY3QgUm91bmRlZAoreGNvbTEyNCBjb21wYXJlIC03OTE0NS4zNjI1IC03NzE4LjU3MzA3IC0+IC0xCit4ZGl2MTI0IGRpdmlkZSAtNzkxNDUuMzYyNSAtNzcxOC41NzMwNyAtPiAxMC4yNTM4ODUyIEluZXhhY3QgUm91bmRlZAoreGR2aTEyNCBkaXZpZGVpbnQgLTc5MTQ1LjM2MjUgLTc3MTguNTczMDcgLT4gMTAKK3htdWwxMjQgbXVsdGlwbHkgLTc5MTQ1LjM2MjUgLTc3MTguNTczMDcgLT4gNjEwODg5MjY0IEluZXhhY3QgUm91bmRlZAoreHBvdzEyNCBwb3dlciAtNzkxNDUuMzYyNSAtNzcxOSAtPiAtMS4xMzE4MTk0MUUtMzc4MTEgSW5leGFjdCBSb3VuZGVkCit4cmVtMTI0IHJlbWFpbmRlciAtNzkxNDUuMzYyNSAtNzcxOC41NzMwNyAtPiAtMTk1OS42MzE4MAoreHN1YjEyNCBzdWJ0cmFjdCAtNzkxNDUuMzYyNSAtNzcxOC41NzMwNyAtPiAtNzE0MjYuNzg5NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMjUgYWRkIDIxMDM4OTAuNDlFKzk1OTI0NzIzNyAyMDAyNC4zMDE3IC0+IDIuMTAzODkwNDlFKzk1OTI0NzI0MyBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMjUgY29tcGFyZSAyMTAzODkwLjQ5RSs5NTkyNDcyMzcgMjAwMjQuMzAxNyAtPiAxCit4ZGl2MTI1IGRpdmlkZSAyMTAzODkwLjQ5RSs5NTkyNDcyMzcgMjAwMjQuMzAxNyAtPiAxLjA1MDY2ODU5RSs5NTkyNDcyMzkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTI1IGRpdmlkZWludCAyMTAzODkwLjQ5RSs5NTkyNDcyMzcgMjAwMjQuMzAxNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDEyNSBtdWx0aXBseSAyMTAzODkwLjQ5RSs5NTkyNDcyMzcgMjAwMjQuMzAxNyAtPiA0LjIxMjg5Mzc5RSs5NTkyNDcyNDcgSW5leGFjdCBSb3VuZGVkCit4cG93MTI1IHBvd2VyIDIxMDM4OTAuNDlFKzk1OTI0NzIzNyAyMDAyNCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMjUgcmVtYWluZGVyIDIxMDM4OTAuNDlFKzk1OTI0NzIzNyAyMDAyNC4zMDE3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTI1IHN1YnRyYWN0IDIxMDM4OTAuNDlFKzk1OTI0NzIzNyAyMDAyNC4zMDE3IC0+IDIuMTAzODkwNDlFKzk1OTI0NzI0MyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMjYgYWRkIDkxMTI0OTU1NyA3OTgxMDgwNC45IC0+IDk5MTA2MDM2MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMjYgY29tcGFyZSA5MTEyNDk1NTcgNzk4MTA4MDQuOSAtPiAxCit4ZGl2MTI2IGRpdmlkZSA5MTEyNDk1NTcgNzk4MTA4MDQuOSAtPiAxMS40MTc2MjE0IEluZXhhY3QgUm91bmRlZAoreGR2aTEyNiBkaXZpZGVpbnQgOTExMjQ5NTU3IDc5ODEwODA0LjkgLT4gMTEKK3htdWwxMjYgbXVsdGlwbHkgOTExMjQ5NTU3IDc5ODEwODA0LjkgLT4gNy4yNzI3NTYwNkUrMTYgSW5leGFjdCBSb3VuZGVkCit4cG93MTI2IHBvd2VyIDkxMTI0OTU1NyA3OTgxMDgwNSAtPiA2Ljc3NTk1NzQxRSs3MTUwNzU4NjcgSW5leGFjdCBSb3VuZGVkCit4cmVtMTI2IHJlbWFpbmRlciA5MTEyNDk1NTcgNzk4MTA4MDQuOSAtPiAzMzMzMDcwMy4xCit4c3ViMTI2IHN1YnRyYWN0IDkxMTI0OTU1NyA3OTgxMDgwNC45IC0+IDgzMTQzODc1MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMjcgYWRkIDM0MTEzNC45OTQgMy4zNzQ4NjI5MiAtPiAzNDExMzguMzY5IEluZXhhY3QgUm91bmRlZAoreGNvbTEyNyBjb21wYXJlIDM0MTEzNC45OTQgMy4zNzQ4NjI5MiAtPiAxCit4ZGl2MTI3IGRpdmlkZSAzNDExMzQuOTk0IDMuMzc0ODYyOTIgLT4gMTAxMDgxLjE0MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMjcgZGl2aWRlaW50IDM0MTEzNC45OTQgMy4zNzQ4NjI5MiAtPiAxMDEwODEKK3htdWwxMjcgbXVsdGlwbHkgMzQxMTM0Ljk5NCAzLjM3NDg2MjkyIC0+IDExNTEyODMuODQgSW5leGFjdCBSb3VuZGVkCit4cG93MTI3IHBvd2VyIDM0MTEzNC45OTQgMyAtPiAzLjk2OTg5MzE0RSsxNiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMjcgcmVtYWluZGVyIDM0MTEzNC45OTQgMy4zNzQ4NjI5MiAtPiAwLjQ3NTE4MzQ4Cit4c3ViMTI3IHN1YnRyYWN0IDM0MTEzNC45OTQgMy4zNzQ4NjI5MiAtPiAzNDExMzEuNjE5IEluZXhhY3QgUm91bmRlZAoreGFkZDEyOCBhZGQgMjQ0LjIzNjM0IDUxMjcwNjE5MEUtMzQxNDU5ODM2IC0+IDI0NC4yMzYzNDAgSW5leGFjdCBSb3VuZGVkCit4Y29tMTI4IGNvbXBhcmUgMjQ0LjIzNjM0IDUxMjcwNjE5MEUtMzQxNDU5ODM2IC0+IDEKK3hkaXYxMjggZGl2aWRlIDI0NC4yMzYzNCA1MTI3MDYxOTBFLTM0MTQ1OTgzNiAtPiA0Ljc2MzY3MDU5RSszNDE0NTk4MjkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTI4IGRpdmlkZWludCAyNDQuMjM2MzQgNTEyNzA2MTkwRS0zNDE0NTk4MzYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwxMjggbXVsdGlwbHkgMjQ0LjIzNjM0IDUxMjcwNjE5MEUtMzQxNDU5ODM2IC0+IDEuMjUyMjE0ODNFLTM0MTQ1OTgyNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMjggcG93ZXIgMjQ0LjIzNjM0IDUgLT4gOC42OTA2MzMxMkUrMTEgSW5leGFjdCBSb3VuZGVkCit4cmVtMTI4IHJlbWFpbmRlciAyNDQuMjM2MzQgNTEyNzA2MTkwRS0zNDE0NTk4MzYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxMjggc3VidHJhY3QgMjQ0LjIzNjM0IDUxMjcwNjE5MEUtMzQxNDU5ODM2IC0+IDI0NC4yMzYzNDAgSW5leGFjdCBSb3VuZGVkCit4YWRkMTI5IGFkZCAtOS4yMjc4Mzg0OUUrMTcxNTg1OTU0IC05OS4wOTQ2ODAwIC0+IC05LjIyNzgzODQ5RSsxNzE1ODU5NTQgSW5leGFjdCBSb3VuZGVkCit4Y29tMTI5IGNvbXBhcmUgLTkuMjI3ODM4NDlFKzE3MTU4NTk1NCAtOTkuMDk0NjgwMCAtPiAtMQoreGRpdjEyOSBkaXZpZGUgLTkuMjI3ODM4NDlFKzE3MTU4NTk1NCAtOTkuMDk0NjgwMCAtPiA5LjMxMjE0MzE4RSsxNzE1ODU5NTIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTI5IGRpdmlkZWludCAtOS4yMjc4Mzg0OUUrMTcxNTg1OTU0IC05OS4wOTQ2ODAwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTI5IG11bHRpcGx5IC05LjIyNzgzODQ5RSsxNzE1ODU5NTQgLTk5LjA5NDY4MDAgLT4gOS4xNDQyOTcwMkUrMTcxNTg1OTU2IEluZXhhY3QgUm91bmRlZAoreHBvdzEyOSBwb3dlciAtOS4yMjc4Mzg0OUUrMTcxNTg1OTU0IC05OSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMTI5IHJlbWFpbmRlciAtOS4yMjc4Mzg0OUUrMTcxNTg1OTU0IC05OS4wOTQ2ODAwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTI5IHN1YnRyYWN0IC05LjIyNzgzODQ5RSsxNzE1ODU5NTQgLTk5LjA5NDY4MDAgLT4gLTkuMjI3ODM4NDlFKzE3MTU4NTk1NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMzAgYWRkIDY5OTYzMS44OTMgLTIyNi40MjM5NTggLT4gNjk5NDA1LjQ2OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMzAgY29tcGFyZSA2OTk2MzEuODkzIC0yMjYuNDIzOTU4IC0+IDEKK3hkaXYxMzAgZGl2aWRlIDY5OTYzMS44OTMgLTIyNi40MjM5NTggLT4gLTMwODkuOTE5OTAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTMwIGRpdmlkZWludCA2OTk2MzEuODkzIC0yMjYuNDIzOTU4IC0+IC0zMDg5Cit4bXVsMTMwIG11bHRpcGx5IDY5OTYzMS44OTMgLTIyNi40MjM5NTggLT4gLTE1ODQxMzQyMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMzAgcG93ZXIgNjk5NjMxLjg5MyAtMjI2IC0+IDEuMTQ2NzU1MTFFLTEzMjEgSW5leGFjdCBSb3VuZGVkCit4cmVtMTMwIHJlbWFpbmRlciA2OTk2MzEuODkzIC0yMjYuNDIzOTU4IC0+IDIwOC4yODY3MzgKK3hzdWIxMzAgc3VidHJhY3QgNjk5NjMxLjg5MyAtMjI2LjQyMzk1OCAtPiA2OTk4NTguMzE3IEluZXhhY3QgUm91bmRlZAoreGFkZDEzMSBhZGQgLTI0OTM1MDEzOS5FLTU3MTc5MzY3MyA3NzU3MzI0MjguIC0+IDc3NTczMjQyOCBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMzEgY29tcGFyZSAtMjQ5MzUwMTM5LkUtNTcxNzkzNjczIDc3NTczMjQyOC4gLT4gLTEKK3hkaXYxMzEgZGl2aWRlIC0yNDkzNTAxMzkuRS01NzE3OTM2NzMgNzc1NzMyNDI4LiAtPiAtMy4yMTQzODMzNEUtNTcxNzkzNjc0IEluZXhhY3QgUm91bmRlZAoreGR2aTEzMSBkaXZpZGVpbnQgLTI0OTM1MDEzOS5FLTU3MTc5MzY3MyA3NzU3MzI0MjguIC0+IC0wCit4bXVsMTMxIG11bHRpcGx5IC0yNDkzNTAxMzkuRS01NzE3OTM2NzMgNzc1NzMyNDI4LiAtPiAtMS45MzQyODk4OUUtNTcxNzkzNjU2IEluZXhhY3QgUm91bmRlZAoreHBvdzEzMSBwb3dlciAtMjQ5MzUwMTM5LkUtNTcxNzkzNjczIDc3NTczMjQyOCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xMzEgcmVtYWluZGVyIC0yNDkzNTAxMzkuRS01NzE3OTM2NzMgNzc1NzMyNDI4LiAtPiAtMi40OTM1MDEzOUUtNTcxNzkzNjY1Cit4c3ViMTMxIHN1YnRyYWN0IC0yNDkzNTAxMzkuRS01NzE3OTM2NzMgNzc1NzMyNDI4LiAtPiAtNzc1NzMyNDI4IEluZXhhY3QgUm91bmRlZAoreGFkZDEzMiBhZGQgNS4xMTYyOTAyMCAtNDgwLjUzMTk0IC0+IC00NzUuNDE1NjUwIEluZXhhY3QgUm91bmRlZAoreGNvbTEzMiBjb21wYXJlIDUuMTE2MjkwMjAgLTQ4MC41MzE5NCAtPiAxCit4ZGl2MTMyIGRpdmlkZSA1LjExNjI5MDIwIC00ODAuNTMxOTQgLT4gLTAuMDEwNjQ3MTM4NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMzIgZGl2aWRlaW50IDUuMTE2MjkwMjAgLTQ4MC41MzE5NCAtPiAtMAoreG11bDEzMiBtdWx0aXBseSA1LjExNjI5MDIwIC00ODAuNTMxOTQgLT4gLTI0NTguNTQwODYgSW5leGFjdCBSb3VuZGVkCit4cG93MTMyIHBvd2VyIDUuMTE2MjkwMjAgLTQ4MSAtPiA5LjgzMDIxOTUxRS0zNDIgSW5leGFjdCBSb3VuZGVkCit4cmVtMTMyIHJlbWFpbmRlciA1LjExNjI5MDIwIC00ODAuNTMxOTQgLT4gNS4xMTYyOTAyMAoreHN1YjEzMiBzdWJ0cmFjdCA1LjExNjI5MDIwIC00ODAuNTMxOTQgLT4gNDg1LjY0ODIzMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMzMgYWRkIC04LjIzMzUyNjczRS00NDY3MjMxNDcgLTUzMDcxMC44NjYgLT4gLTUzMDcxMC44NjYgSW5leGFjdCBSb3VuZGVkCit4Y29tMTMzIGNvbXBhcmUgLTguMjMzNTI2NzNFLTQ0NjcyMzE0NyAtNTMwNzEwLjg2NiAtPiAxCit4ZGl2MTMzIGRpdmlkZSAtOC4yMzM1MjY3M0UtNDQ2NzIzMTQ3IC01MzA3MTAuODY2IC0+IDEuNTUxNDE0NzZFLTQ0NjcyMzE1MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMzMgZGl2aWRlaW50IC04LjIzMzUyNjczRS00NDY3MjMxNDcgLTUzMDcxMC44NjYgLT4gMAoreG11bDEzMyBtdWx0aXBseSAtOC4yMzM1MjY3M0UtNDQ2NzIzMTQ3IC01MzA3MTAuODY2IC0+IDQuMzY5NjIyMTBFLTQ0NjcyMzE0MSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMzMgcG93ZXIgLTguMjMzNTI2NzNFLTQ0NjcyMzE0NyAtNTMwNzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMzMgcmVtYWluZGVyIC04LjIzMzUyNjczRS00NDY3MjMxNDcgLTUzMDcxMC44NjYgLT4gLTguMjMzNTI2NzNFLTQ0NjcyMzE0NworeHN1YjEzMyBzdWJ0cmFjdCAtOC4yMzM1MjY3M0UtNDQ2NzIzMTQ3IC01MzA3MTAuODY2IC0+IDUzMDcxMC44NjYgSW5leGFjdCBSb3VuZGVkCit4YWRkMTM0IGFkZCA3LjA1OTg2MDggLTk1OTA4LjM1IC0+IC05NTkwMS4yOTAxIEluZXhhY3QgUm91bmRlZAoreGNvbTEzNCBjb21wYXJlIDcuMDU5ODYwOCAtOTU5MDguMzUgLT4gMQoreGRpdjEzNCBkaXZpZGUgNy4wNTk4NjA4IC05NTkwOC4zNSAtPiAtMC4wMDAwNzM2MTA0OTE3IEluZXhhY3QgUm91bmRlZAoreGR2aTEzNCBkaXZpZGVpbnQgNy4wNTk4NjA4IC05NTkwOC4zNSAtPiAtMAoreG11bDEzNCBtdWx0aXBseSA3LjA1OTg2MDggLTk1OTA4LjM1IC0+IC02NzcwOTkuNjAxIEluZXhhY3QgUm91bmRlZAoreHBvdzEzNCBwb3dlciA3LjA1OTg2MDggLTk1OTA4IC0+IDQuNTcwNzM4NzdFLTgxNDA3IEluZXhhY3QgUm91bmRlZAoreHJlbTEzNCByZW1haW5kZXIgNy4wNTk4NjA4IC05NTkwOC4zNSAtPiA3LjA1OTg2MDgKK3hzdWIxMzQgc3VidHJhY3QgNy4wNTk4NjA4IC05NTkwOC4zNSAtPiA5NTkxNS40MDk5IEluZXhhY3QgUm91bmRlZAoreGFkZDEzNSBhZGQgLTcuOTExODk4NDVFKzIwNzIwMjcwNiAxNTMyLjcxODQ3RSs1MDk5NDQzMzUgLT4gMS41MzI3MTg0N0UrNTA5OTQ0MzM4IEluZXhhY3QgUm91bmRlZAoreGNvbTEzNSBjb21wYXJlIC03LjkxMTg5ODQ1RSsyMDcyMDI3MDYgMTUzMi43MTg0N0UrNTA5OTQ0MzM1IC0+IC0xCit4ZGl2MTM1IGRpdmlkZSAtNy45MTE4OTg0NUUrMjA3MjAyNzA2IDE1MzIuNzE4NDdFKzUwOTk0NDMzNSAtPiAtNS4xNjIwMDM3MkUtMzAyNzQxNjMyIEluZXhhY3QgUm91bmRlZAoreGR2aTEzNSBkaXZpZGVpbnQgLTcuOTExODk4NDVFKzIwNzIwMjcwNiAxNTMyLjcxODQ3RSs1MDk5NDQzMzUgLT4gLTAKK3htdWwxMzUgbXVsdGlwbHkgLTcuOTExODk4NDVFKzIwNzIwMjcwNiAxNTMyLjcxODQ3RSs1MDk5NDQzMzUgLT4gLTEuMjEyNjcxMjlFKzcxNzE0NzA0NSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMzUgcG93ZXIgLTcuOTExODk4NDVFKzIwNzIwMjcwNiAyIC0+IDYuMjU5ODEzNzFFKzQxNDQwNTQxMyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMzUgcmVtYWluZGVyIC03LjkxMTg5ODQ1RSsyMDcyMDI3MDYgMTUzMi43MTg0N0UrNTA5OTQ0MzM1IC0+IC03LjkxMTg5ODQ1RSsyMDcyMDI3MDYKK3hzdWIxMzUgc3VidHJhY3QgLTcuOTExODk4NDVFKzIwNzIwMjcwNiAxNTMyLjcxODQ3RSs1MDk5NDQzMzUgLT4gLTEuNTMyNzE4NDdFKzUwOTk0NDMzOCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMzYgYWRkIDIwODgzOTM3MC5FLTIxNTE0NzQzMiAtNzUuOTQyMDU1OSAtPiAtNzUuOTQyMDU1OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xMzYgY29tcGFyZSAyMDg4MzkzNzAuRS0yMTUxNDc0MzIgLTc1Ljk0MjA1NTkgLT4gMQoreGRpdjEzNiBkaXZpZGUgMjA4ODM5MzcwLkUtMjE1MTQ3NDMyIC03NS45NDIwNTU5IC0+IC0yLjc0OTk4MzEwRS0yMTUxNDc0MjYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTM2IGRpdmlkZWludCAyMDg4MzkzNzAuRS0yMTUxNDc0MzIgLTc1Ljk0MjA1NTkgLT4gLTAKK3htdWwxMzYgbXVsdGlwbHkgMjA4ODM5MzcwLkUtMjE1MTQ3NDMyIC03NS45NDIwNTU5IC0+IC0xLjU4NTk2OTExRS0yMTUxNDc0MjIgSW5leGFjdCBSb3VuZGVkCit4cG93MTM2IHBvd2VyIDIwODgzOTM3MC5FLTIxNTE0NzQzMiAtNzYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMTM2IHJlbWFpbmRlciAyMDg4MzkzNzAuRS0yMTUxNDc0MzIgLTc1Ljk0MjA1NTkgLT4gMi4wODgzOTM3MEUtMjE1MTQ3NDI0Cit4c3ViMTM2IHN1YnRyYWN0IDIwODgzOTM3MC5FLTIxNTE0NzQzMiAtNzUuOTQyMDU1OSAtPiA3NS45NDIwNTU5IEluZXhhY3QgUm91bmRlZAoreGFkZDEzNyBhZGQgNDI3Ljc1NDI0NEUtMzUzMzI4MzY5IDQ3MDUuMDc5NiAtPiA0NzA1LjA3OTYwIEluZXhhY3QgUm91bmRlZAoreGNvbTEzNyBjb21wYXJlIDQyNy43NTQyNDRFLTM1MzMyODM2OSA0NzA1LjA3OTYgLT4gLTEKK3hkaXYxMzcgZGl2aWRlIDQyNy43NTQyNDRFLTM1MzMyODM2OSA0NzA1LjA3OTYgLT4gOS4wOTEzMjg1M0UtMzUzMzI4MzcxIEluZXhhY3QgUm91bmRlZAoreGR2aTEzNyBkaXZpZGVpbnQgNDI3Ljc1NDI0NEUtMzUzMzI4MzY5IDQ3MDUuMDc5NiAtPiAwCit4bXVsMTM3IG11bHRpcGx5IDQyNy43NTQyNDRFLTM1MzMyODM2OSA0NzA1LjA3OTYgLT4gMi4wMTI2MTc3N0UtMzUzMzI4MzYzIEluZXhhY3QgUm91bmRlZAoreHBvdzEzNyBwb3dlciA0MjcuNzU0MjQ0RS0zNTMzMjgzNjkgNDcwNSAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xMzcgcmVtYWluZGVyIDQyNy43NTQyNDRFLTM1MzMyODM2OSA0NzA1LjA3OTYgLT4gNC4yNzc1NDI0NEUtMzUzMzI4MzY3Cit4c3ViMTM3IHN1YnRyYWN0IDQyNy43NTQyNDRFLTM1MzMyODM2OSA0NzA1LjA3OTYgLT4gLTQ3MDUuMDc5NjAgSW5leGFjdCBSb3VuZGVkCit4YWRkMTM4IGFkZCA0NDkxMS4wODkgLTk1LjE3MzM2MDVFLTMxMzA4MTg0OCAtPiA0NDkxMS4wODkwIEluZXhhY3QgUm91bmRlZAoreGNvbTEzOCBjb21wYXJlIDQ0OTExLjA4OSAtOTUuMTczMzYwNUUtMzEzMDgxODQ4IC0+IDEKK3hkaXYxMzggZGl2aWRlIDQ0OTExLjA4OSAtOTUuMTczMzYwNUUtMzEzMDgxODQ4IC0+IC00LjcxODg3MTgzRSszMTMwODE4NTAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTM4IGRpdmlkZWludCA0NDkxMS4wODkgLTk1LjE3MzM2MDVFLTMxMzA4MTg0OCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDEzOCBtdWx0aXBseSA0NDkxMS4wODkgLTk1LjE3MzM2MDVFLTMxMzA4MTg0OCAtPiAtNC4yNzQzMzkyNkUtMzEzMDgxODQyIEluZXhhY3QgUm91bmRlZAoreHBvdzEzOCBwb3dlciA0NDkxMS4wODkgLTEwIC0+IDIuOTk1NDY0MjVFLTQ3IEluZXhhY3QgUm91bmRlZAoreHJlbTEzOCByZW1haW5kZXIgNDQ5MTEuMDg5IC05NS4xNzMzNjA1RS0zMTMwODE4NDggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxMzggc3VidHJhY3QgNDQ5MTEuMDg5IC05NS4xNzMzNjA1RS0zMTMwODE4NDggLT4gNDQ5MTEuMDg5MCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxMzkgYWRkIDQ1MjM3MTgyMS4gLTQxMDk3MDkuMTkgLT4gNDQ4MjYyMTEyIEluZXhhY3QgUm91bmRlZAoreGNvbTEzOSBjb21wYXJlIDQ1MjM3MTgyMS4gLTQxMDk3MDkuMTkgLT4gMQoreGRpdjEzOSBkaXZpZGUgNDUyMzcxODIxLiAtNDEwOTcwOS4xOSAtPiAtMTEwLjA3MzkyNSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxMzkgZGl2aWRlaW50IDQ1MjM3MTgyMS4gLTQxMDk3MDkuMTkgLT4gLTExMAoreG11bDEzOSBtdWx0aXBseSA0NTIzNzE4MjEuIC00MTA5NzA5LjE5IC0+IC0xLjg1OTExNjYzRSsxNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxMzkgcG93ZXIgNDUyMzcxODIxLiAtNDEwOTcwOSAtPiAxLjE1NTI4ODA3RS0zNTU3MTU2OCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xMzkgcmVtYWluZGVyIDQ1MjM3MTgyMS4gLTQxMDk3MDkuMTkgLT4gMzAzODEwLjEwCit4c3ViMTM5IHN1YnRyYWN0IDQ1MjM3MTgyMS4gLTQxMDk3MDkuMTkgLT4gNDU2NDgxNTMwIEluZXhhY3QgUm91bmRlZAoreGFkZDE0MCBhZGQgOTQwMDcuNDM5MiAtOTQ2NzcyNS41RSs2ODE4OTgyMzQgLT4gLTkuNDY3NzI1NTBFKzY4MTg5ODI0MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNDAgY29tcGFyZSA5NDAwNy40MzkyIC05NDY3NzI1LjVFKzY4MTg5ODIzNCAtPiAxCit4ZGl2MTQwIGRpdmlkZSA5NDAwNy40MzkyIC05NDY3NzI1LjVFKzY4MTg5ODIzNCAtPiAtOS45MjkyNTI3MkUtNjgxODk4MjM3IEluZXhhY3QgUm91bmRlZAoreGR2aTE0MCBkaXZpZGVpbnQgOTQwMDcuNDM5MiAtOTQ2NzcyNS41RSs2ODE4OTgyMzQgLT4gLTAKK3htdWwxNDAgbXVsdGlwbHkgOTQwMDcuNDM5MiAtOTQ2NzcyNS41RSs2ODE4OTgyMzQgLT4gLTguOTAwMzY2MjlFKzY4MTg5ODI0NSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNDAgcG93ZXIgOTQwMDcuNDM5MiAtOSAtPiAxLjc0Mzk3Mzk3RS00NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNDAgcmVtYWluZGVyIDk0MDA3LjQzOTIgLTk0Njc3MjUuNUUrNjgxODk4MjM0IC0+IDk0MDA3LjQzOTIKK3hzdWIxNDAgc3VidHJhY3QgOTQwMDcuNDM5MiAtOTQ2NzcyNS41RSs2ODE4OTgyMzQgLT4gOS40Njc3MjU1MEUrNjgxODk4MjQwIEluZXhhY3QgUm91bmRlZAoreGFkZDE0MSBhZGQgOTkxNDc1NTQuMEUtNzUxNDEwNTg2IDM4MzEzLjY0MjMgLT4gMzgzMTMuNjQyMyBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNDEgY29tcGFyZSA5OTE0NzU1NC4wRS03NTE0MTA1ODYgMzgzMTMuNjQyMyAtPiAtMQoreGRpdjE0MSBkaXZpZGUgOTkxNDc1NTQuMEUtNzUxNDEwNTg2IDM4MzEzLjY0MjMgLT4gMi41ODc3ODcyMkUtNzUxNDEwNTgzIEluZXhhY3QgUm91bmRlZAoreGR2aTE0MSBkaXZpZGVpbnQgOTkxNDc1NTQuMEUtNzUxNDEwNTg2IDM4MzEzLjY0MjMgLT4gMAoreG11bDE0MSBtdWx0aXBseSA5OTE0NzU1NC4wRS03NTE0MTA1ODYgMzgzMTMuNjQyMyAtPiAzLjc5ODcwMzkyRS03NTE0MTA1NzQgSW5leGFjdCBSb3VuZGVkCit4cG93MTQxIHBvd2VyIDk5MTQ3NTU0LjBFLTc1MTQxMDU4NiAzODMxNCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xNDEgcmVtYWluZGVyIDk5MTQ3NTU0LjBFLTc1MTQxMDU4NiAzODMxMy42NDIzIC0+IDkuOTE0NzU1NDBFLTc1MTQxMDU3OQoreHN1YjE0MSBzdWJ0cmFjdCA5OTE0NzU1NC4wRS03NTE0MTA1ODYgMzgzMTMuNjQyMyAtPiAtMzgzMTMuNjQyMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNDIgYWRkIC03OTE5LjMwMjU0IC02NjkuNjA3ODU0IC0+IC04NTg4LjkxMDM5IEluZXhhY3QgUm91bmRlZAoreGNvbTE0MiBjb21wYXJlIC03OTE5LjMwMjU0IC02NjkuNjA3ODU0IC0+IC0xCit4ZGl2MTQyIGRpdmlkZSAtNzkxOS4zMDI1NCAtNjY5LjYwNzg1NCAtPiAxMS44MjY3NzY3IEluZXhhY3QgUm91bmRlZAoreGR2aTE0MiBkaXZpZGVpbnQgLTc5MTkuMzAyNTQgLTY2OS42MDc4NTQgLT4gMTEKK3htdWwxNDIgbXVsdGlwbHkgLTc5MTkuMzAyNTQgLTY2OS42MDc4NTQgLT4gNTMwMjgyNy4xOCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNDIgcG93ZXIgLTc5MTkuMzAyNTQgLTY3MCAtPiA3LjU4MTQ3NzI0RS0yNjEzIEluZXhhY3QgUm91bmRlZAoreHJlbTE0MiByZW1haW5kZXIgLTc5MTkuMzAyNTQgLTY2OS42MDc4NTQgLT4gLTU1My42MTYxNDYKK3hzdWIxNDIgc3VidHJhY3QgLTc5MTkuMzAyNTQgLTY2OS42MDc4NTQgLT4gLTcyNDkuNjk0NjkgSW5leGFjdCBSb3VuZGVkCit4YWRkMTQzIGFkZCA0NjEuNTgyODBFKzEzNjExMDgyMSA3MTA2NjYwNTIuRS0zODM3NTQyMzEgLT4gNC42MTU4MjgwMEUrMTM2MTEwODIzIEluZXhhY3QgUm91bmRlZAoreGNvbTE0MyBjb21wYXJlIDQ2MS41ODI4MEUrMTM2MTEwODIxIDcxMDY2NjA1Mi5FLTM4Mzc1NDIzMSAtPiAxCit4ZGl2MTQzIGRpdmlkZSA0NjEuNTgyODBFKzEzNjExMDgyMSA3MTA2NjYwNTIuRS0zODM3NTQyMzEgLT4gNi40OTUwNzMxNkUrNTE5ODY1MDQ1IEluZXhhY3QgUm91bmRlZAoreGR2aTE0MyBkaXZpZGVpbnQgNDYxLjU4MjgwRSsxMzYxMTA4MjEgNzEwNjY2MDUyLkUtMzgzNzU0MjMxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTQzIG11bHRpcGx5IDQ2MS41ODI4MEUrMTM2MTEwODIxIDcxMDY2NjA1Mi5FLTM4Mzc1NDIzMSAtPiAzLjI4MDMxMjI2RS0yNDc2NDMzOTkgSW5leGFjdCBSb3VuZGVkCit4cG93MTQzIHBvd2VyIDQ2MS41ODI4MEUrMTM2MTEwODIxIDcgLT4gNC40NjQyMzc4MUUrOTUyNzc1NzY1IEluZXhhY3QgUm91bmRlZAoreHJlbTE0MyByZW1haW5kZXIgNDYxLjU4MjgwRSsxMzYxMTA4MjEgNzEwNjY2MDUyLkUtMzgzNzU0MjMxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTQzIHN1YnRyYWN0IDQ2MS41ODI4MEUrMTM2MTEwODIxIDcxMDY2NjA1Mi5FLTM4Mzc1NDIzMSAtPiA0LjYxNTgyODAwRSsxMzYxMTA4MjMgSW5leGFjdCBSb3VuZGVkCit4YWRkMTQ0IGFkZCAzNDU1NzU1LjQ3RS0xMTI0NjU1MDYgNzcxLjY3NDMwNiAtPiA3NzEuNjc0MzA2IEluZXhhY3QgUm91bmRlZAoreGNvbTE0NCBjb21wYXJlIDM0NTU3NTUuNDdFLTExMjQ2NTUwNiA3NzEuNjc0MzA2IC0+IC0xCit4ZGl2MTQ0IGRpdmlkZSAzNDU1NzU1LjQ3RS0xMTI0NjU1MDYgNzcxLjY3NDMwNiAtPiA0LjQ3ODI1NjQ5RS0xMTI0NjU1MDMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTQ0IGRpdmlkZWludCAzNDU1NzU1LjQ3RS0xMTI0NjU1MDYgNzcxLjY3NDMwNiAtPiAwCit4bXVsMTQ0IG11bHRpcGx5IDM0NTU3NTUuNDdFLTExMjQ2NTUwNiA3NzEuNjc0MzA2IC0+IDIuNjY2NzE3NzBFLTExMjQ2NTQ5NyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNDQgcG93ZXIgMzQ1NTc1NS40N0UtMTEyNDY1NTA2IDc3MiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xNDQgcmVtYWluZGVyIDM0NTU3NTUuNDdFLTExMjQ2NTUwNiA3NzEuNjc0MzA2IC0+IDMuNDU1NzU1NDdFLTExMjQ2NTUwMAoreHN1YjE0NCBzdWJ0cmFjdCAzNDU1NzU1LjQ3RS0xMTI0NjU1MDYgNzcxLjY3NDMwNiAtPiAtNzcxLjY3NDMwNiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNDUgYWRkIC00NzcwNjc3NTcuRS05NjE2ODQ5NDAgNy43MDEyMjYwOEUtNzQxMDcyMjQ1IC0+IDcuNzAxMjI2MDhFLTc0MTA3MjI0NSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNDUgY29tcGFyZSAtNDc3MDY3NzU3LkUtOTYxNjg0OTQwIDcuNzAxMjI2MDhFLTc0MTA3MjI0NSAtPiAtMQoreGRpdjE0NSBkaXZpZGUgLTQ3NzA2Nzc1Ny5FLTk2MTY4NDk0MCA3LjcwMTIyNjA4RS03NDEwNzIyNDUgLT4gLTYuMTk0Njk4NzdFLTIyMDYxMjY4OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNDUgZGl2aWRlaW50IC00NzcwNjc3NTcuRS05NjE2ODQ5NDAgNy43MDEyMjYwOEUtNzQxMDcyMjQ1IC0+IC0wCit4bXVsMTQ1IG11bHRpcGx5IC00NzcwNjc3NTcuRS05NjE2ODQ5NDAgNy43MDEyMjYwOEUtNzQxMDcyMjQ1IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hwb3cxNDUgcG93ZXIgLTQ3NzA2Nzc1Ny5FLTk2MTY4NDk0MCA4IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTE0NSByZW1haW5kZXIgLTQ3NzA2Nzc1Ny5FLTk2MTY4NDk0MCA3LjcwMTIyNjA4RS03NDEwNzIyNDUgLT4gLTQuNzcwNjc3NTdFLTk2MTY4NDkzMgoreHN1YjE0NSBzdWJ0cmFjdCAtNDc3MDY3NzU3LkUtOTYxNjg0OTQwIDcuNzAxMjI2MDhFLTc0MTA3MjI0NSAtPiAtNy43MDEyMjYwOEUtNzQxMDcyMjQ1IEluZXhhY3QgUm91bmRlZAoreGFkZDE0NiBhZGQgNzY0ODIuMzUyIDgyMzc4MDYuOCAtPiA4MzE0Mjg5LjE1IEluZXhhY3QgUm91bmRlZAoreGNvbTE0NiBjb21wYXJlIDc2NDgyLjM1MiA4MjM3ODA2LjggLT4gLTEKK3hkaXYxNDYgZGl2aWRlIDc2NDgyLjM1MiA4MjM3ODA2LjggLT4gMC4wMDkyODQzMDk5OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNDYgZGl2aWRlaW50IDc2NDgyLjM1MiA4MjM3ODA2LjggLT4gMAoreG11bDE0NiBtdWx0aXBseSA3NjQ4Mi4zNTIgODIzNzgwNi44IC0+IDYuMzAwNDY4MzlFKzExIEluZXhhY3QgUm91bmRlZAoreHBvdzE0NiBwb3dlciA3NjQ4Mi4zNTIgODIzNzgwNyAtPiA4LjQ0MjE2NTU5RSs0MDIyOTgzNCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNDYgcmVtYWluZGVyIDc2NDgyLjM1MiA4MjM3ODA2LjggLT4gNzY0ODIuMzUyCit4c3ViMTQ2IHN1YnRyYWN0IDc2NDgyLjM1MiA4MjM3ODA2LjggLT4gLTgxNjEzMjQuNDUgSW5leGFjdCBSb3VuZGVkCit4YWRkMTQ3IGFkZCAxLjIxNTA1MTY0RS01NjU1NTY1MDQgOS4yNjE0NjU3MyAtPiA5LjI2MTQ2NTczIEluZXhhY3QgUm91bmRlZAoreGNvbTE0NyBjb21wYXJlIDEuMjE1MDUxNjRFLTU2NTU1NjUwNCA5LjI2MTQ2NTczIC0+IC0xCit4ZGl2MTQ3IGRpdmlkZSAxLjIxNTA1MTY0RS01NjU1NTY1MDQgOS4yNjE0NjU3MyAtPiAxLjMxMTk0MzE0RS01NjU1NTY1MDUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTQ3IGRpdmlkZWludCAxLjIxNTA1MTY0RS01NjU1NTY1MDQgOS4yNjE0NjU3MyAtPiAwCit4bXVsMTQ3IG11bHRpcGx5IDEuMjE1MDUxNjRFLTU2NTU1NjUwNCA5LjI2MTQ2NTczIC0+IDEuMTI1MzE1OTFFLTU2NTU1NjUwMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNDcgcG93ZXIgMS4yMTUwNTE2NEUtNTY1NTU2NTA0IDkgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMTQ3IHJlbWFpbmRlciAxLjIxNTA1MTY0RS01NjU1NTY1MDQgOS4yNjE0NjU3MyAtPiAxLjIxNTA1MTY0RS01NjU1NTY1MDQKK3hzdWIxNDcgc3VidHJhY3QgMS4yMTUwNTE2NEUtNTY1NTU2NTA0IDkuMjYxNDY1NzMgLT4gLTkuMjYxNDY1NzMgSW5leGFjdCBSb3VuZGVkCit4YWRkMTQ4IGFkZCAtODMwMzA2MC4yNUUtMTY5ODk0ODgzIDkwMTU2MS45ODUgLT4gOTAxNTYxLjk4NSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNDggY29tcGFyZSAtODMwMzA2MC4yNUUtMTY5ODk0ODgzIDkwMTU2MS45ODUgLT4gLTEKK3hkaXYxNDggZGl2aWRlIC04MzAzMDYwLjI1RS0xNjk4OTQ4ODMgOTAxNTYxLjk4NSAtPiAtOS4yMDk2Mzg4MUUtMTY5ODk0ODgzIEluZXhhY3QgUm91bmRlZAoreGR2aTE0OCBkaXZpZGVpbnQgLTgzMDMwNjAuMjVFLTE2OTg5NDg4MyA5MDE1NjEuOTg1IC0+IC0wCit4bXVsMTQ4IG11bHRpcGx5IC04MzAzMDYwLjI1RS0xNjk4OTQ4ODMgOTAxNTYxLjk4NSAtPiAtNy40ODU3MjM0OEUtMTY5ODk0ODcxIEluZXhhY3QgUm91bmRlZAoreHBvdzE0OCBwb3dlciAtODMwMzA2MC4yNUUtMTY5ODk0ODgzIDkwMTU2MiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xNDggcmVtYWluZGVyIC04MzAzMDYwLjI1RS0xNjk4OTQ4ODMgOTAxNTYxLjk4NSAtPiAtOC4zMDMwNjAyNUUtMTY5ODk0ODc3Cit4c3ViMTQ4IHN1YnRyYWN0IC04MzAzMDYwLjI1RS0xNjk4OTQ4ODMgOTAxNTYxLjk4NSAtPiAtOTAxNTYxLjk4NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNDkgYWRkIC01OTI0NjQuOTIgNzE0NDU1MTAuNyAtPiA3MDg1MzA0NS44IEluZXhhY3QgUm91bmRlZAoreGNvbTE0OSBjb21wYXJlIC01OTI0NjQuOTIgNzE0NDU1MTAuNyAtPiAtMQoreGRpdjE0OSBkaXZpZGUgLTU5MjQ2NC45MiA3MTQ0NTUxMC43IC0+IC0wLjAwODI5MjU0MjMxIEluZXhhY3QgUm91bmRlZAoreGR2aTE0OSBkaXZpZGVpbnQgLTU5MjQ2NC45MiA3MTQ0NTUxMC43IC0+IC0wCit4bXVsMTQ5IG11bHRpcGx5IC01OTI0NjQuOTIgNzE0NDU1MTAuNyAtPiAtNC4yMzI4OTU4OEUrMTMgSW5leGFjdCBSb3VuZGVkCit4cG93MTQ5IHBvd2VyIC01OTI0NjQuOTIgNzE0NDU1MTEgLT4gLTEuNTgyNjkxMDhFKzQxMjQzMDgzMiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNDkgcmVtYWluZGVyIC01OTI0NjQuOTIgNzE0NDU1MTAuNyAtPiAtNTkyNDY0LjkyCit4c3ViMTQ5IHN1YnRyYWN0IC01OTI0NjQuOTIgNzE0NDU1MTAuNyAtPiAtNzIwMzc5NzUuNiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNTAgYWRkIC03Mzc3NC40MTY1IC0zOS44MjQzMDI3IC0+IC03MzgxNC4yNDA4IEluZXhhY3QgUm91bmRlZAoreGNvbTE1MCBjb21wYXJlIC03Mzc3NC40MTY1IC0zOS44MjQzMDI3IC0+IC0xCit4ZGl2MTUwIGRpdmlkZSAtNzM3NzQuNDE2NSAtMzkuODI0MzAyNyAtPiAxODUyLjQ5NzM4IEluZXhhY3QgUm91bmRlZAoreGR2aTE1MCBkaXZpZGVpbnQgLTczNzc0LjQxNjUgLTM5LjgyNDMwMjcgLT4gMTg1MgoreG11bDE1MCBtdWx0aXBseSAtNzM3NzQuNDE2NSAtMzkuODI0MzAyNyAtPiAyOTM4MDE0LjY5IEluZXhhY3QgUm91bmRlZAoreHBvdzE1MCBwb3dlciAtNzM3NzQuNDE2NSAtNDAgLT4gMS45MjIwNjc2NUUtMTk1IEluZXhhY3QgUm91bmRlZAoreHJlbTE1MCByZW1haW5kZXIgLTczNzc0LjQxNjUgLTM5LjgyNDMwMjcgLT4gLTE5LjgwNzg5OTYKK3hzdWIxNTAgc3VidHJhY3QgLTczNzc0LjQxNjUgLTM5LjgyNDMwMjcgLT4gLTczNzM0LjU5MjIgSW5leGFjdCBSb3VuZGVkCit4YWRkMTUxIGFkZCAtNTI0NzI0NzE1LiAtNTU3NjMuNzkzNyAtPiAtNTI0NzgwNDc5IEluZXhhY3QgUm91bmRlZAoreGNvbTE1MSBjb21wYXJlIC01MjQ3MjQ3MTUuIC01NTc2My43OTM3IC0+IC0xCit4ZGl2MTUxIGRpdmlkZSAtNTI0NzI0NzE1LiAtNTU3NjMuNzkzNyAtPiA5NDA5Ljc3NDM0IEluZXhhY3QgUm91bmRlZAoreGR2aTE1MSBkaXZpZGVpbnQgLTUyNDcyNDcxNS4gLTU1NzYzLjc5MzcgLT4gOTQwOQoreG11bDE1MSBtdWx0aXBseSAtNTI0NzI0NzE1LiAtNTU3NjMuNzkzNyAtPiAyLjkyNjA2NDA4RSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNTEgcG93ZXIgLTUyNDcyNDcxNS4gLTU1NzY0IC0+IDUuNDc4OTgzNTFFLTQ4NjI1OSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNTEgcmVtYWluZGVyIC01MjQ3MjQ3MTUuIC01NTc2My43OTM3IC0+IC00MzE4MC4wNzY3Cit4c3ViMTUxIHN1YnRyYWN0IC01MjQ3MjQ3MTUuIC01NTc2My43OTM3IC0+IC01MjQ2Njg5NTEgSW5leGFjdCBSb3VuZGVkCit4YWRkMTUyIGFkZCA3LjUzODAwNDI3IDc4NDg3Mzc2OEUtOTk4MTE0NiAtPiA3LjUzODAwNDI3IEluZXhhY3QgUm91bmRlZAoreGNvbTE1MiBjb21wYXJlIDcuNTM4MDA0MjcgNzg0ODczNzY4RS05OTgxMTQ2IC0+IDEKK3hkaXYxNTIgZGl2aWRlIDcuNTM4MDA0MjcgNzg0ODczNzY4RS05OTgxMTQ2IC0+IDkuNjA0MDk3NjBFKzk5ODExMzcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTUyIGRpdmlkZWludCA3LjUzODAwNDI3IDc4NDg3Mzc2OEUtOTk4MTE0NiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDE1MiBtdWx0aXBseSA3LjUzODAwNDI3IDc4NDg3Mzc2OEUtOTk4MTE0NiAtPiA1LjkxNjM4MTgxRS05OTgxMTM3IEluZXhhY3QgUm91bmRlZAoreHBvdzE1MiBwb3dlciA3LjUzODAwNDI3IDggLT4gMTA0MjQzOTkuMiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNTIgcmVtYWluZGVyIDcuNTM4MDA0MjcgNzg0ODczNzY4RS05OTgxMTQ2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTUyIHN1YnRyYWN0IDcuNTM4MDA0MjcgNzg0ODczNzY4RS05OTgxMTQ2IC0+IDcuNTM4MDA0MjcgSW5leGFjdCBSb3VuZGVkCit4YWRkMTUzIGFkZCAzNy42MDI3NDUyIDcuMjI0NTQyMzMgLT4gNDQuODI3Mjg3NSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNTMgY29tcGFyZSAzNy42MDI3NDUyIDcuMjI0NTQyMzMgLT4gMQoreGRpdjE1MyBkaXZpZGUgMzcuNjAyNzQ1MiA3LjIyNDU0MjMzIC0+IDUuMjA0ODYxOTEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTUzIGRpdmlkZWludCAzNy42MDI3NDUyIDcuMjI0NTQyMzMgLT4gNQoreG11bDE1MyBtdWx0aXBseSAzNy42MDI3NDUyIDcuMjI0NTQyMzMgLT4gMjcxLjY2MjYyNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNTMgcG93ZXIgMzcuNjAyNzQ1MiA3IC0+IDEuMDYzMDA4ODFFKzExIEluZXhhY3QgUm91bmRlZAoreHJlbTE1MyByZW1haW5kZXIgMzcuNjAyNzQ1MiA3LjIyNDU0MjMzIC0+IDEuNDgwMDMzNTUKK3hzdWIxNTMgc3VidHJhY3QgMzcuNjAyNzQ1MiA3LjIyNDU0MjMzIC0+IDMwLjM3ODIwMjkgSW5leGFjdCBSb3VuZGVkCit4YWRkMTU0IGFkZCAyNDQ3NjYwLjM5IC0zNjk4MS40MjUzIC0+IDI0MTA2NzguOTYgSW5leGFjdCBSb3VuZGVkCit4Y29tMTU0IGNvbXBhcmUgMjQ0NzY2MC4zOSAtMzY5ODEuNDI1MyAtPiAxCit4ZGl2MTU0IGRpdmlkZSAyNDQ3NjYwLjM5IC0zNjk4MS40MjUzIC0+IC02Ni4xODYyMTAyIEluZXhhY3QgUm91bmRlZAoreGR2aTE1NCBkaXZpZGVpbnQgMjQ0NzY2MC4zOSAtMzY5ODEuNDI1MyAtPiAtNjYKK3htdWwxNTQgbXVsdGlwbHkgMjQ0NzY2MC4zOSAtMzY5ODEuNDI1MyAtPiAtOS4wNTE3OTY5OUUrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93MTU0IHBvd2VyIDI0NDc2NjAuMzkgLTM2OTgxIC0+IDMuOTIwNjYwNjRFLTIzNjI2MyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNTQgcmVtYWluZGVyIDI0NDc2NjAuMzkgLTM2OTgxLjQyNTMgLT4gNjg4Ni4zMjAyCit4c3ViMTU0IHN1YnRyYWN0IDI0NDc2NjAuMzkgLTM2OTgxLjQyNTMgLT4gMjQ4NDY0MS44MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNTUgYWRkIDIxNjAuMzY0MTkgMTQxOC4zMzU3NEUrNjU2MjY1MzgyIC0+IDEuNDE4MzM1NzRFKzY1NjI2NTM4NSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNTUgY29tcGFyZSAyMTYwLjM2NDE5IDE0MTguMzM1NzRFKzY1NjI2NTM4MiAtPiAtMQoreGRpdjE1NSBkaXZpZGUgMjE2MC4zNjQxOSAxNDE4LjMzNTc0RSs2NTYyNjUzODIgLT4gMS41MjMxNjg0MUUtNjU2MjY1MzgyIEluZXhhY3QgUm91bmRlZAoreGR2aTE1NSBkaXZpZGVpbnQgMjE2MC4zNjQxOSAxNDE4LjMzNTc0RSs2NTYyNjUzODIgLT4gMAoreG11bDE1NSBtdWx0aXBseSAyMTYwLjM2NDE5IDE0MTguMzM1NzRFKzY1NjI2NTM4MiAtPiAzLjA2NDEyMTc0RSs2NTYyNjUzODggSW5leGFjdCBSb3VuZGVkCit4cG93MTU1IHBvd2VyIDIxNjAuMzY0MTkgMSAtPiAyMTYwLjM2NDE5Cit4cmVtMTU1IHJlbWFpbmRlciAyMTYwLjM2NDE5IDE0MTguMzM1NzRFKzY1NjI2NTM4MiAtPiAyMTYwLjM2NDE5Cit4c3ViMTU1IHN1YnRyYWN0IDIxNjAuMzY0MTkgMTQxOC4zMzU3NEUrNjU2MjY1MzgyIC0+IC0xLjQxODMzNTc0RSs2NTYyNjUzODUgSW5leGFjdCBSb3VuZGVkCit4YWRkMTU2IGFkZCA4OTI2LjQ0OTM5IDU0Ljk0MzAwMjcgLT4gODk4MS4zOTIzOSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNTYgY29tcGFyZSA4OTI2LjQ0OTM5IDU0Ljk0MzAwMjcgLT4gMQoreGRpdjE1NiBkaXZpZGUgODkyNi40NDkzOSA1NC45NDMwMDI3IC0+IDE2Mi40Njc0NDcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTU2IGRpdmlkZWludCA4OTI2LjQ0OTM5IDU0Ljk0MzAwMjcgLT4gMTYyCit4bXVsMTU2IG11bHRpcGx5IDg5MjYuNDQ5MzkgNTQuOTQzMDAyNyAtPiA0OTA0NDUuOTMzIEluZXhhY3QgUm91bmRlZAoreHBvdzE1NiBwb3dlciA4OTI2LjQ0OTM5IDU1IC0+IDEuOTM3ODk4NzdFKzIxNyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNTYgcmVtYWluZGVyIDg5MjYuNDQ5MzkgNTQuOTQzMDAyNyAtPiAyNS42ODI5NTI2Cit4c3ViMTU2IHN1YnRyYWN0IDg5MjYuNDQ5MzkgNTQuOTQzMDAyNyAtPiA4ODcxLjUwNjM5IEluZXhhY3QgUm91bmRlZAoreGFkZDE1NyBhZGQgODYxNTg4MDI5IC00MTY1NzM5OEUrNzc5NTU5MjUgLT4gLTQuMTY1NzM5ODBFKzc3OTU1OTMyIEluZXhhY3QgUm91bmRlZAoreGNvbTE1NyBjb21wYXJlIDg2MTU4ODAyOSAtNDE2NTczOThFKzc3OTU1OTI1IC0+IDEKK3hkaXYxNTcgZGl2aWRlIDg2MTU4ODAyOSAtNDE2NTczOThFKzc3OTU1OTI1IC0+IC0yLjA2ODI3MTM1RS03Nzk1NTkyNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNTcgZGl2aWRlaW50IDg2MTU4ODAyOSAtNDE2NTczOThFKzc3OTU1OTI1IC0+IC0wCit4bXVsMTU3IG11bHRpcGx5IDg2MTU4ODAyOSAtNDE2NTczOThFKzc3OTU1OTI1IC0+IC0zLjU4OTE1MTU0RSs3Nzk1NTk0MSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNTcgcG93ZXIgODYxNTg4MDI5IC00IC0+IDEuODE0Njg1NTNFLTM2IEluZXhhY3QgUm91bmRlZAoreHJlbTE1NyByZW1haW5kZXIgODYxNTg4MDI5IC00MTY1NzM5OEUrNzc5NTU5MjUgLT4gODYxNTg4MDI5Cit4c3ViMTU3IHN1YnRyYWN0IDg2MTU4ODAyOSAtNDE2NTczOThFKzc3OTU1OTI1IC0+IDQuMTY1NzM5ODBFKzc3OTU1OTMyIEluZXhhY3QgUm91bmRlZAoreGFkZDE1OCBhZGQgLTM0LjUyNTMwNjIgNTIuNjcyMjAxOSAtPiAxOC4xNDY4OTU3Cit4Y29tMTU4IGNvbXBhcmUgLTM0LjUyNTMwNjIgNTIuNjcyMjAxOSAtPiAtMQoreGRpdjE1OCBkaXZpZGUgLTM0LjUyNTMwNjIgNTIuNjcyMjAxOSAtPiAtMC42NTU0NzQ4OTkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTU4IGRpdmlkZWludCAtMzQuNTI1MzA2MiA1Mi42NzIyMDE5IC0+IC0wCit4bXVsMTU4IG11bHRpcGx5IC0zNC41MjUzMDYyIDUyLjY3MjIwMTkgLT4gLTE4MTguNTIzOTAgSW5leGFjdCBSb3VuZGVkCit4cG93MTU4IHBvd2VyIC0zNC41MjUzMDYyIDUzIC0+IC0zLjMyMTE1ODIxRSs4MSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNTggcmVtYWluZGVyIC0zNC41MjUzMDYyIDUyLjY3MjIwMTkgLT4gLTM0LjUyNTMwNjIKK3hzdWIxNTggc3VidHJhY3QgLTM0LjUyNTMwNjIgNTIuNjcyMjAxOSAtPiAtODcuMTk3NTA4MQoreGFkZDE1OSBhZGQgLTE4ODYxNjQ3LiA5OTc5NDU4Ni43IC0+IDgwOTMyOTM5LjcKK3hjb20xNTkgY29tcGFyZSAtMTg4NjE2NDcuIDk5Nzk0NTg2LjcgLT4gLTEKK3hkaXYxNTkgZGl2aWRlIC0xODg2MTY0Ny4gOTk3OTQ1ODYuNyAtPiAtMC4xODkwMDQ3MTEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTU5IGRpdmlkZWludCAtMTg4NjE2NDcuIDk5Nzk0NTg2LjcgLT4gLTAKK3htdWwxNTkgbXVsdGlwbHkgLTE4ODYxNjQ3LiA5OTc5NDU4Ni43IC0+IC0xLjg4MjI5MDI3RSsxNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNTkgcG93ZXIgLTE4ODYxNjQ3LiA5OTc5NDU4NyAtPiAtNC4yODk1NzQ1OUUrNzI2MDYzNDYyIEluZXhhY3QgUm91bmRlZAoreHJlbTE1OSByZW1haW5kZXIgLTE4ODYxNjQ3LiA5OTc5NDU4Ni43IC0+IC0xODg2MTY0Ny4wCit4c3ViMTU5IHN1YnRyYWN0IC0xODg2MTY0Ny4gOTk3OTQ1ODYuNyAtPiAtMTE4NjU2MjM0IEluZXhhY3QgUm91bmRlZAoreGFkZDE2MCBhZGQgMzIyMTkyLjQwNyA0NjEuNjcwNDQgLT4gMzIyNjU0LjA3NyBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNjAgY29tcGFyZSAzMjIxOTIuNDA3IDQ2MS42NzA0NCAtPiAxCit4ZGl2MTYwIGRpdmlkZSAzMjIxOTIuNDA3IDQ2MS42NzA0NCAtPiA2OTcuODgzOTg2IEluZXhhY3QgUm91bmRlZAoreGR2aTE2MCBkaXZpZGVpbnQgMzIyMTkyLjQwNyA0NjEuNjcwNDQgLT4gNjk3Cit4bXVsMTYwIG11bHRpcGx5IDMyMjE5Mi40MDcgNDYxLjY3MDQ0IC0+IDE0ODc0NjcxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNjAgcG93ZXIgMzIyMTkyLjQwNyA0NjIgLT4gNS42MTM5NTg3M0UrMjU0NCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNjAgcmVtYWluZGVyIDMyMjE5Mi40MDcgNDYxLjY3MDQ0IC0+IDQwOC4xMTAzMgoreHN1YjE2MCBzdWJ0cmFjdCAzMjIxOTIuNDA3IDQ2MS42NzA0NCAtPiAzMjE3MzAuNzM3IEluZXhhY3QgUm91bmRlZAoreGFkZDE2MSBhZGQgLTg5NjI5ODUxOEUrNjE0MTIzMTQgNzg4NzMuODA0OSAtPiAtOC45NjI5ODUxOEUrNjE0MTIzMjIgSW5leGFjdCBSb3VuZGVkCit4Y29tMTYxIGNvbXBhcmUgLTg5NjI5ODUxOEUrNjE0MTIzMTQgNzg4NzMuODA0OSAtPiAtMQoreGRpdjE2MSBkaXZpZGUgLTg5NjI5ODUxOEUrNjE0MTIzMTQgNzg4NzMuODA0OSAtPiAtMS4xMzYzNzAzM0UrNjE0MTIzMTggSW5leGFjdCBSb3VuZGVkCit4ZHZpMTYxIGRpdmlkZWludCAtODk2Mjk4NTE4RSs2MTQxMjMxNCA3ODg3My44MDQ5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTYxIG11bHRpcGx5IC04OTYyOTg1MThFKzYxNDEyMzE0IDc4ODczLjgwNDkgLT4gLTcuMDY5NDQ3NDRFKzYxNDEyMzI3IEluZXhhY3QgUm91bmRlZAoreHBvdzE2MSBwb3dlciAtODk2Mjk4NTE4RSs2MTQxMjMxNCA3ODg3NCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNjEgcmVtYWluZGVyIC04OTYyOTg1MThFKzYxNDEyMzE0IDc4ODczLjgwNDkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxNjEgc3VidHJhY3QgLTg5NjI5ODUxOEUrNjE0MTIzMTQgNzg4NzMuODA0OSAtPiAtOC45NjI5ODUxOEUrNjE0MTIzMjIgSW5leGFjdCBSb3VuZGVkCit4YWRkMTYyIGFkZCAyOTMuNzczNzMyIDQ3OTg5OTA1MkUrNzg5OTUwMTc3IC0+IDQuNzk4OTkwNTJFKzc4OTk1MDE4NSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNjIgY29tcGFyZSAyOTMuNzczNzMyIDQ3OTg5OTA1MkUrNzg5OTUwMTc3IC0+IC0xCit4ZGl2MTYyIGRpdmlkZSAyOTMuNzczNzMyIDQ3OTg5OTA1MkUrNzg5OTUwMTc3IC0+IDYuMTIxNTczNTBFLTc4OTk1MDE4NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNjIgZGl2aWRlaW50IDI5My43NzM3MzIgNDc5ODk5MDUyRSs3ODk5NTAxNzcgLT4gMAoreG11bDE2MiBtdWx0aXBseSAyOTMuNzczNzMyIDQ3OTg5OTA1MkUrNzg5OTUwMTc3IC0+IDEuNDA5ODE3MzVFKzc4OTk1MDE4OCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNjIgcG93ZXIgMjkzLjc3MzczMiA1IC0+IDIuMTg4MDg4MDlFKzEyIEluZXhhY3QgUm91bmRlZAoreHJlbTE2MiByZW1haW5kZXIgMjkzLjc3MzczMiA0Nzk4OTkwNTJFKzc4OTk1MDE3NyAtPiAyOTMuNzczNzMyCit4c3ViMTYyIHN1YnRyYWN0IDI5My43NzM3MzIgNDc5ODk5MDUyRSs3ODk5NTAxNzcgLT4gLTQuNzk4OTkwNTJFKzc4OTk1MDE4NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNjMgYWRkIC0xMDM1MTkzNjIgNTE4OTc5NTUuMyAtPiAtNTE2MjE0MDYuNworeGNvbTE2MyBjb21wYXJlIC0xMDM1MTkzNjIgNTE4OTc5NTUuMyAtPiAtMQoreGRpdjE2MyBkaXZpZGUgLTEwMzUxOTM2MiA1MTg5Nzk1NS4zIC0+IC0xLjk5NDY3MTMwIEluZXhhY3QgUm91bmRlZAoreGR2aTE2MyBkaXZpZGVpbnQgLTEwMzUxOTM2MiA1MTg5Nzk1NS4zIC0+IC0xCit4bXVsMTYzIG11bHRpcGx5IC0xMDM1MTkzNjIgNTE4OTc5NTUuMyAtPiAtNS4zNzI0NDMyMkUrMTUgSW5leGFjdCBSb3VuZGVkCit4cG93MTYzIHBvd2VyIC0xMDM1MTkzNjIgNTE4OTc5NTUgLT4gLTQuMjg4NTgyMjlFKzQxNTk2MzIyOSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNjMgcmVtYWluZGVyIC0xMDM1MTkzNjIgNTE4OTc5NTUuMyAtPiAtNTE2MjE0MDYuNworeHN1YjE2MyBzdWJ0cmFjdCAtMTAzNTE5MzYyIDUxODk3OTU1LjMgLT4gLTE1NTQxNzMxNyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNjQgYWRkIDM3MzgwLjc4MDIgLTI3NzcxOTc4OC4gLT4gLTI3NzY4MjQwNyBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNjQgY29tcGFyZSAzNzM4MC43ODAyIC0yNzc3MTk3ODguIC0+IDEKK3hkaXYxNjQgZGl2aWRlIDM3MzgwLjc4MDIgLTI3NzcxOTc4OC4gLT4gLTAuMDAwMTM0NTk4OTA4IEluZXhhY3QgUm91bmRlZAoreGR2aTE2NCBkaXZpZGVpbnQgMzczODAuNzgwMiAtMjc3NzE5Nzg4LiAtPiAtMAoreG11bDE2NCBtdWx0aXBseSAzNzM4MC43ODAyIC0yNzc3MTk3ODguIC0+IC0xLjAzODEzODI0RSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNjQgcG93ZXIgMzczODAuNzgwMiAtMjc3NzE5Nzg4IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTE2NCByZW1haW5kZXIgMzczODAuNzgwMiAtMjc3NzE5Nzg4LiAtPiAzNzM4MC43ODAyCit4c3ViMTY0IHN1YnRyYWN0IDM3MzgwLjc4MDIgLTI3NzcxOTc4OC4gLT4gMjc3NzU3MTY5IEluZXhhY3QgUm91bmRlZAoreGFkZDE2NSBhZGQgMzIwMTMzODQ0LiAtOTc3NTE3NDc3IC0+IC02NTczODM2MzMKK3hjb20xNjUgY29tcGFyZSAzMjAxMzM4NDQuIC05Nzc1MTc0NzcgLT4gMQoreGRpdjE2NSBkaXZpZGUgMzIwMTMzODQ0LiAtOTc3NTE3NDc3IC0+IC0wLjMyNzQ5Njc5OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNjUgZGl2aWRlaW50IDMyMDEzMzg0NC4gLTk3NzUxNzQ3NyAtPiAtMAoreG11bDE2NSBtdWx0aXBseSAzMjAxMzM4NDQuIC05Nzc1MTc0NzcgLT4gLTMuMTI5MzY0MjdFKzE3IEluZXhhY3QgUm91bmRlZAoreHBvdzE2NSBwb3dlciAzMjAxMzM4NDQuIC05Nzc1MTc0NzcgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMTY1IHJlbWFpbmRlciAzMjAxMzM4NDQuIC05Nzc1MTc0NzcgLT4gMzIwMTMzODQ0Cit4c3ViMTY1IHN1YnRyYWN0IDMyMDEzMzg0NC4gLTk3NzUxNzQ3NyAtPiAxLjI5NzY1MTMyRSs5IEluZXhhY3QgUm91bmRlZAoreGFkZDE2NiBhZGQgNzIxNzc2NzAxRSs5MzM2NDYxNjEgLTU2ODkyNzkuNjRFKzY2OTkwMzY0NSAtPiA3LjIxNzc2NzAxRSs5MzM2NDYxNjkgSW5leGFjdCBSb3VuZGVkCit4Y29tMTY2IGNvbXBhcmUgNzIxNzc2NzAxRSs5MzM2NDYxNjEgLTU2ODkyNzkuNjRFKzY2OTkwMzY0NSAtPiAxCit4ZGl2MTY2IGRpdmlkZSA3MjE3NzY3MDFFKzkzMzY0NjE2MSAtNTY4OTI3OS42NEUrNjY5OTAzNjQ1IC0+IC0xLjI2ODY2MDk3RSsyNjM3NDI1MTggSW5leGFjdCBSb3VuZGVkCit4ZHZpMTY2IGRpdmlkZWludCA3MjE3NzY3MDFFKzkzMzY0NjE2MSAtNTY4OTI3OS42NEUrNjY5OTAzNjQ1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTY2IG11bHRpcGx5IDcyMTc3NjcwMUUrOTMzNjQ2MTYxIC01Njg5Mjc5LjY0RSs2Njk5MDM2NDUgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAoreHBvdzE2NiBwb3dlciA3MjE3NzY3MDFFKzkzMzY0NjE2MSAtNiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xNjYgcmVtYWluZGVyIDcyMTc3NjcwMUUrOTMzNjQ2MTYxIC01Njg5Mjc5LjY0RSs2Njk5MDM2NDUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxNjYgc3VidHJhY3QgNzIxNzc2NzAxRSs5MzM2NDYxNjEgLTU2ODkyNzkuNjRFKzY2OTkwMzY0NSAtPiA3LjIxNzc2NzAxRSs5MzM2NDYxNjkgSW5leGFjdCBSb3VuZGVkCit4YWRkMTY3IGFkZCAtNTQwOS4wMDQ4MiAtMi4xNjE0OTM4NiAtPiAtNTQxMS4xNjYzMSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNjcgY29tcGFyZSAtNTQwOS4wMDQ4MiAtMi4xNjE0OTM4NiAtPiAtMQoreGRpdjE2NyBkaXZpZGUgLTU0MDkuMDA0ODIgLTIuMTYxNDkzODYgLT4gMjUwMi40MzgyMSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNjcgZGl2aWRlaW50IC01NDA5LjAwNDgyIC0yLjE2MTQ5Mzg2IC0+IDI1MDIKK3htdWwxNjcgbXVsdGlwbHkgLTU0MDkuMDA0ODIgLTIuMTYxNDkzODYgLT4gMTE2OTEuNTMwNyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNjcgcG93ZXIgLTU0MDkuMDA0ODIgLTIgLT4gMy40MTc5NDY1MkUtOCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNjcgcmVtYWluZGVyIC01NDA5LjAwNDgyIC0yLjE2MTQ5Mzg2IC0+IC0wLjk0NzE4MjI4Cit4c3ViMTY3IHN1YnRyYWN0IC01NDA5LjAwNDgyIC0yLjE2MTQ5Mzg2IC0+IC01NDA2Ljg0MzMzIEluZXhhY3QgUm91bmRlZAoreGFkZDE2OCBhZGQgLTk1Nzk2MC4zNjcgMzIyLjg1ODE3MCAtPiAtOTU3NjM3LjUwOSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNjggY29tcGFyZSAtOTU3OTYwLjM2NyAzMjIuODU4MTcwIC0+IC0xCit4ZGl2MTY4IGRpdmlkZSAtOTU3OTYwLjM2NyAzMjIuODU4MTcwIC0+IC0yOTY3LjEyNDQ0IEluZXhhY3QgUm91bmRlZAoreGR2aTE2OCBkaXZpZGVpbnQgLTk1Nzk2MC4zNjcgMzIyLjg1ODE3MCAtPiAtMjk2NworeG11bDE2OCBtdWx0aXBseSAtOTU3OTYwLjM2NyAzMjIuODU4MTcwIC0+IC0zMDkyODUzMzEgSW5leGFjdCBSb3VuZGVkCit4cG93MTY4IHBvd2VyIC05NTc5NjAuMzY3IDMyMyAtPiAtOS40NDYxNzQ2MEUrMTkzMSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNjggcmVtYWluZGVyIC05NTc5NjAuMzY3IDMyMi44NTgxNzAgLT4gLTQwLjE3NjYxMAoreHN1YjE2OCBzdWJ0cmFjdCAtOTU3OTYwLjM2NyAzMjIuODU4MTcwIC0+IC05NTgyODMuMjI1IEluZXhhY3QgUm91bmRlZAoreGFkZDE2OSBhZGQgLTExODE3Ljg3NTRFKzYxMzg5MzQ0MiAtMy44NDczNTA4MkUrODg4MzMzMjQ5IC0+IC0zLjg0NzM1MDgyRSs4ODgzMzMyNDkgSW5leGFjdCBSb3VuZGVkCit4Y29tMTY5IGNvbXBhcmUgLTExODE3Ljg3NTRFKzYxMzg5MzQ0MiAtMy44NDczNTA4MkUrODg4MzMzMjQ5IC0+IDEKK3hkaXYxNjkgZGl2aWRlIC0xMTgxNy44NzU0RSs2MTM4OTM0NDIgLTMuODQ3MzUwODJFKzg4ODMzMzI0OSAtPiAzLjA3MTY5MTY1RS0yNzQ0Mzk4MDQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTY5IGRpdmlkZWludCAtMTE4MTcuODc1NEUrNjEzODkzNDQyIC0zLjg0NzM1MDgyRSs4ODgzMzMyNDkgLT4gMAoreG11bDE2OSBtdWx0aXBseSAtMTE4MTcuODc1NEUrNjEzODkzNDQyIC0zLjg0NzM1MDgyRSs4ODgzMzMyNDkgLT4gSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCit4cG93MTY5IHBvd2VyIC0xMTgxNy44NzU0RSs2MTM4OTM0NDIgLTQgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMTY5IHJlbWFpbmRlciAtMTE4MTcuODc1NEUrNjEzODkzNDQyIC0zLjg0NzM1MDgyRSs4ODgzMzMyNDkgLT4gLTEuMTgxNzg3NTRFKzYxMzg5MzQ0NgoreHN1YjE2OSBzdWJ0cmFjdCAtMTE4MTcuODc1NEUrNjEzODkzNDQyIC0zLjg0NzM1MDgyRSs4ODgzMzMyNDkgLT4gMy44NDczNTA4MkUrODg4MzMzMjQ5IEluZXhhY3QgUm91bmRlZAoreGFkZDE3MCBhZGQgODQwMjU4MjAzIDU4MzYzLjk4MEUtOTA2NTg0NzIzIC0+IDg0MDI1ODIwMyBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNzAgY29tcGFyZSA4NDAyNTgyMDMgNTgzNjMuOTgwRS05MDY1ODQ3MjMgLT4gMQoreGRpdjE3MCBkaXZpZGUgODQwMjU4MjAzIDU4MzYzLjk4MEUtOTA2NTg0NzIzIC0+IDEuNDM5Njg2MjZFKzkwNjU4NDcyNyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNzAgZGl2aWRlaW50IDg0MDI1ODIwMyA1ODM2My45ODBFLTkwNjU4NDcyMyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDE3MCBtdWx0aXBseSA4NDAyNTgyMDMgNTgzNjMuOTgwRS05MDY1ODQ3MjMgLT4gNC45MDQwODEzMEUtOTA2NTg0NzEwIEluZXhhY3QgUm91bmRlZAoreHBvdzE3MCBwb3dlciA4NDAyNTgyMDMgNiAtPiAzLjUxOTQ2NDMxRSs1MyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNzAgcmVtYWluZGVyIDg0MDI1ODIwMyA1ODM2My45ODBFLTkwNjU4NDcyMyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjE3MCBzdWJ0cmFjdCA4NDAyNTgyMDMgNTgzNjMuOTgwRS05MDY1ODQ3MjMgLT4gODQwMjU4MjAzIEluZXhhY3QgUm91bmRlZAoreGFkZDE3MSBhZGQgLTIwNTg0MjA5Ni4gLTE5MTM0Mi43MjEgLT4gLTIwNjAzMzQzOSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNzEgY29tcGFyZSAtMjA1ODQyMDk2LiAtMTkxMzQyLjcyMSAtPiAtMQoreGRpdjE3MSBkaXZpZGUgLTIwNTg0MjA5Ni4gLTE5MTM0Mi43MjEgLT4gMTA3NS43NzY5OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNzEgZGl2aWRlaW50IC0yMDU4NDIwOTYuIC0xOTEzNDIuNzIxIC0+IDEwNzUKK3htdWwxNzEgbXVsdGlwbHkgLTIwNTg0MjA5Ni4gLTE5MTM0Mi43MjEgLT4gMy45Mzg2Mzg2N0UrMTMgSW5leGFjdCBSb3VuZGVkCit4cG93MTcxIHBvd2VyIC0yMDU4NDIwOTYuIC0xOTEzNDMgLT4gLTIuNjY5NTU1NTNFLTE1OTA3MzcgSW5leGFjdCBSb3VuZGVkCit4cmVtMTcxIHJlbWFpbmRlciAtMjA1ODQyMDk2LiAtMTkxMzQyLjcyMSAtPiAtMTQ4NjcwLjkyNQoreHN1YjE3MSBzdWJ0cmFjdCAtMjA1ODQyMDk2LiAtMTkxMzQyLjcyMSAtPiAtMjA1NjUwNzUzIEluZXhhY3QgUm91bmRlZAoreGFkZDE3MiBhZGQgNDI1MDExMjQuIDg4NC45Mzg0OThFKzEyMzM0MTQ4MCAtPiA4Ljg0OTM4NDk4RSsxMjMzNDE0ODIgSW5leGFjdCBSb3VuZGVkCit4Y29tMTcyIGNvbXBhcmUgNDI1MDExMjQuIDg4NC45Mzg0OThFKzEyMzM0MTQ4MCAtPiAtMQoreGRpdjE3MiBkaXZpZGUgNDI1MDExMjQuIDg4NC45Mzg0OThFKzEyMzM0MTQ4MCAtPiA0LjgwMjcyMDY1RS0xMjMzNDE0NzYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTcyIGRpdmlkZWludCA0MjUwMTEyNC4gODg0LjkzODQ5OEUrMTIzMzQxNDgwIC0+IDAKK3htdWwxNzIgbXVsdGlwbHkgNDI1MDExMjQuIDg4NC45Mzg0OThFKzEyMzM0MTQ4MCAtPiAzLjc2MTA4ODA4RSsxMjMzNDE0OTAgSW5leGFjdCBSb3VuZGVkCit4cG93MTcyIHBvd2VyIDQyNTAxMTI0LiA5IC0+IDQuNTI0ODQ1MzZFKzY4IEluZXhhY3QgUm91bmRlZAoreHJlbTE3MiByZW1haW5kZXIgNDI1MDExMjQuIDg4NC45Mzg0OThFKzEyMzM0MTQ4MCAtPiA0MjUwMTEyNAoreHN1YjE3MiBzdWJ0cmFjdCA0MjUwMTEyNC4gODg0LjkzODQ5OEUrMTIzMzQxNDgwIC0+IC04Ljg0OTM4NDk4RSsxMjMzNDE0ODIgSW5leGFjdCBSb3VuZGVkCit4YWRkMTczIGFkZCAtNTc4MDk0NTIuIC02MjAzODA3NDYgLT4gLTY3ODE5MDE5OAoreGNvbTE3MyBjb21wYXJlIC01NzgwOTQ1Mi4gLTYyMDM4MDc0NiAtPiAxCit4ZGl2MTczIGRpdmlkZSAtNTc4MDk0NTIuIC02MjAzODA3NDYgLT4gMC4wOTMxODM4MjY4IEluZXhhY3QgUm91bmRlZAoreGR2aTE3MyBkaXZpZGVpbnQgLTU3ODA5NDUyLiAtNjIwMzgwNzQ2IC0+IDAKK3htdWwxNzMgbXVsdGlwbHkgLTU3ODA5NDUyLiAtNjIwMzgwNzQ2IC0+IDMuNTg2Mzg3MTBFKzE2IEluZXhhY3QgUm91bmRlZAoreHBvdzE3MyBwb3dlciAtNTc4MDk0NTIuIC02MjAzODA3NDYgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMTczIHJlbWFpbmRlciAtNTc4MDk0NTIuIC02MjAzODA3NDYgLT4gLTU3ODA5NDUyCit4c3ViMTczIHN1YnRyYWN0IC01NzgwOTQ1Mi4gLTYyMDM4MDc0NiAtPiA1NjI1NzEyOTQKK3hhZGQxNzQgYWRkIC04MDIyMzcwLjMxIDk4NTg1ODEuNiAtPiAxODM2MjExLjI5Cit4Y29tMTc0IGNvbXBhcmUgLTgwMjIzNzAuMzEgOTg1ODU4MS42IC0+IC0xCit4ZGl2MTc0IGRpdmlkZSAtODAyMjM3MC4zMSA5ODU4NTgxLjYgLT4gLTAuODEzNzQ0ODgxIEluZXhhY3QgUm91bmRlZAoreGR2aTE3NCBkaXZpZGVpbnQgLTgwMjIzNzAuMzEgOTg1ODU4MS42IC0+IC0wCit4bXVsMTc0IG11bHRpcGx5IC04MDIyMzcwLjMxIDk4NTg1ODEuNiAtPiAtNy45MDg5MTkyM0UrMTMgSW5leGFjdCBSb3VuZGVkCit4cG93MTc0IHBvd2VyIC04MDIyMzcwLjMxIDk4NTg1ODIgLT4gMi4zNDQ1ODI0OUUrNjgwNjY2MzQgSW5leGFjdCBSb3VuZGVkCit4cmVtMTc0IHJlbWFpbmRlciAtODAyMjM3MC4zMSA5ODU4NTgxLjYgLT4gLTgwMjIzNzAuMzEKK3hzdWIxNzQgc3VidHJhY3QgLTgwMjIzNzAuMzEgOTg1ODU4MS42IC0+IC0xNzg4MDk1MS45IEluZXhhY3QgUm91bmRlZAoreGFkZDE3NSBhZGQgMi40OTA2NTA2MEUrNTkyMTM5MTQxIC01NDMyLjcyMDE0RS00MTk5NjUzNTcgLT4gMi40OTA2NTA2MEUrNTkyMTM5MTQxIEluZXhhY3QgUm91bmRlZAoreGNvbTE3NSBjb21wYXJlIDIuNDkwNjUwNjBFKzU5MjEzOTE0MSAtNTQzMi43MjAxNEUtNDE5OTY1MzU3IC0+IDEKK3hkaXYxNzUgZGl2aWRlIDIuNDkwNjUwNjBFKzU5MjEzOTE0MSAtNTQzMi43MjAxNEUtNDE5OTY1MzU3IC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3hkdmkxNzUgZGl2aWRlaW50IDIuNDkwNjUwNjBFKzU5MjEzOTE0MSAtNTQzMi43MjAxNEUtNDE5OTY1MzU3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTc1IG11bHRpcGx5IDIuNDkwNjUwNjBFKzU5MjEzOTE0MSAtNTQzMi43MjAxNEUtNDE5OTY1MzU3IC0+IC0xLjM1MzEwMDc3RSsxNzIxNzM3ODggSW5leGFjdCBSb3VuZGVkCit4cG93MTc1IHBvd2VyIDIuNDkwNjUwNjBFKzU5MjEzOTE0MSAtNSAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xNzUgcmVtYWluZGVyIDIuNDkwNjUwNjBFKzU5MjEzOTE0MSAtNTQzMi43MjAxNEUtNDE5OTY1MzU3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTc1IHN1YnRyYWN0IDIuNDkwNjUwNjBFKzU5MjEzOTE0MSAtNTQzMi43MjAxNEUtNDE5OTY1MzU3IC0+IDIuNDkwNjUwNjBFKzU5MjEzOTE0MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNzYgYWRkIC02OTcyNzM3MTVFLTI0MjgyNDg3MCAtMy44MTc1NzUwNiAtPiAtMy44MTc1NzUwNiBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNzYgY29tcGFyZSAtNjk3MjczNzE1RS0yNDI4MjQ4NzAgLTMuODE3NTc1MDYgLT4gMQoreGRpdjE3NiBkaXZpZGUgLTY5NzI3MzcxNUUtMjQyODI0ODcwIC0zLjgxNzU3NTA2IC0+IDEuODI2NDgzMzFFLTI0MjgyNDg2MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxNzYgZGl2aWRlaW50IC02OTcyNzM3MTVFLTI0MjgyNDg3MCAtMy44MTc1NzUwNiAtPiAwCit4bXVsMTc2IG11bHRpcGx5IC02OTcyNzM3MTVFLTI0MjgyNDg3MCAtMy44MTc1NzUwNiAtPiAyLjY2MTg5NDc0RS0yNDI4MjQ4NjEgSW5leGFjdCBSb3VuZGVkCit4cG93MTc2IHBvd2VyIC02OTcyNzM3MTVFLTI0MjgyNDg3MCAtNCAtPiA0LjIzMDQ1MjUxRSs5NzEyOTk0NDQgSW5leGFjdCBSb3VuZGVkCit4cmVtMTc2IHJlbWFpbmRlciAtNjk3MjczNzE1RS0yNDI4MjQ4NzAgLTMuODE3NTc1MDYgLT4gLTYuOTcyNzM3MTVFLTI0MjgyNDg2MgoreHN1YjE3NiBzdWJ0cmFjdCAtNjk3MjczNzE1RS0yNDI4MjQ4NzAgLTMuODE3NTc1MDYgLT4gMy44MTc1NzUwNiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNzcgYWRkIC03LjQyMjA0NDAzRS0zMTU3MTYyODAgLTgxNTYxMTEuNjdFKzI4MzI2MTYzNiAtPiAtOC4xNTYxMTE2N0UrMjgzMjYxNjQyIEluZXhhY3QgUm91bmRlZAoreGNvbTE3NyBjb21wYXJlIC03LjQyMjA0NDAzRS0zMTU3MTYyODAgLTgxNTYxMTEuNjdFKzI4MzI2MTYzNiAtPiAxCit4ZGl2MTc3IGRpdmlkZSAtNy40MjIwNDQwM0UtMzE1NzE2MjgwIC04MTU2MTExLjY3RSsyODMyNjE2MzYgLT4gOS4wOTk5Nzg0M0UtNTk4OTc3OTIzIEluZXhhY3QgUm91bmRlZAoreGR2aTE3NyBkaXZpZGVpbnQgLTcuNDIyMDQ0MDNFLTMxNTcxNjI4MCAtODE1NjExMS42N0UrMjgzMjYxNjM2IC0+IDAKK3htdWwxNzcgbXVsdGlwbHkgLTcuNDIyMDQ0MDNFLTMxNTcxNjI4MCAtODE1NjExMS42N0UrMjgzMjYxNjM2IC0+IDYuMDUzNTAxOTlFLTMyNDU0NjM3IEluZXhhY3QgUm91bmRlZAoreHBvdzE3NyBwb3dlciAtNy40MjIwNDQwM0UtMzE1NzE2MjgwIC04IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTE3NyByZW1haW5kZXIgLTcuNDIyMDQ0MDNFLTMxNTcxNjI4MCAtODE1NjExMS42N0UrMjgzMjYxNjM2IC0+IC03LjQyMjA0NDAzRS0zMTU3MTYyODAKK3hzdWIxNzcgc3VidHJhY3QgLTcuNDIyMDQ0MDNFLTMxNTcxNjI4MCAtODE1NjExMS42N0UrMjgzMjYxNjM2IC0+IDguMTU2MTExNjdFKzI4MzI2MTY0MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxNzggYWRkIDczODA2Mzg5MiA4OTkwMDQ2Ny44IC0+IDgyNzk2NDM2MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNzggY29tcGFyZSA3MzgwNjM4OTIgODk5MDA0NjcuOCAtPiAxCit4ZGl2MTc4IGRpdmlkZSA3MzgwNjM4OTIgODk5MDA0NjcuOCAtPiA4LjIwOTc4OTIzIEluZXhhY3QgUm91bmRlZAoreGR2aTE3OCBkaXZpZGVpbnQgNzM4MDYzODkyIDg5OTAwNDY3LjggLT4gOAoreG11bDE3OCBtdWx0aXBseSA3MzgwNjM4OTIgODk5MDA0NjcuOCAtPiA2LjYzNTIyODkyRSsxNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNzggcG93ZXIgNzM4MDYzODkyIDg5OTAwNDY4IC0+IDEuNTMxNjY3MjNFKzc5NzI0NTc5NyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xNzggcmVtYWluZGVyIDczODA2Mzg5MiA4OTkwMDQ2Ny44IC0+IDE4ODYwMTQ5LjYKK3hzdWIxNzggc3VidHJhY3QgNzM4MDYzODkyIDg5OTAwNDY3LjggLT4gNjQ4MTYzNDI0IEluZXhhY3QgUm91bmRlZAoreGFkZDE3OSBhZGQgLTYzMDMwOTM2NiAtODg0NzgzLjMzOEUtMjE1OTU0MTAgLT4gLTYzMDMwOTM2NiBJbmV4YWN0IFJvdW5kZWQKK3hjb20xNzkgY29tcGFyZSAtNjMwMzA5MzY2IC04ODQ3ODMuMzM4RS0yMTU5NTQxMCAtPiAtMQoreGRpdjE3OSBkaXZpZGUgLTYzMDMwOTM2NiAtODg0NzgzLjMzOEUtMjE1OTU0MTAgLT4gNy4xMjM4ODM3N0UrMjE1OTU0MTIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTc5IGRpdmlkZWludCAtNjMwMzA5MzY2IC04ODQ3ODMuMzM4RS0yMTU5NTQxMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDE3OSBtdWx0aXBseSAtNjMwMzA5MzY2IC04ODQ3ODMuMzM4RS0yMTU5NTQxMCAtPiA1LjU3Njg3MjI1RS0yMTU5NTM5NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxNzkgcG93ZXIgLTYzMDMwOTM2NiAtOSAtPiAtNi4zNjgxOTIxMEUtODAgSW5leGFjdCBSb3VuZGVkCit4cmVtMTc5IHJlbWFpbmRlciAtNjMwMzA5MzY2IC04ODQ3ODMuMzM4RS0yMTU5NTQxMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjE3OSBzdWJ0cmFjdCAtNjMwMzA5MzY2IC04ODQ3ODMuMzM4RS0yMTU5NTQxMCAtPiAtNjMwMzA5MzY2IEluZXhhY3QgUm91bmRlZAoreGFkZDE4MCBhZGQgNjEzLjIwNzc3NCAtMzAwNy43ODYwOCAtPiAtMjM5NC41NzgzMSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xODAgY29tcGFyZSA2MTMuMjA3Nzc0IC0zMDA3Ljc4NjA4IC0+IDEKK3hkaXYxODAgZGl2aWRlIDYxMy4yMDc3NzQgLTMwMDcuNzg2MDggLT4gLTAuMjAzODczNDY2IEluZXhhY3QgUm91bmRlZAoreGR2aTE4MCBkaXZpZGVpbnQgNjEzLjIwNzc3NCAtMzAwNy43ODYwOCAtPiAtMAoreG11bDE4MCBtdWx0aXBseSA2MTMuMjA3Nzc0IC0zMDA3Ljc4NjA4IC0+IC0xODQ0Mzk3LjgxIEluZXhhY3QgUm91bmRlZAoreHBvdzE4MCBwb3dlciA2MTMuMjA3Nzc0IC0zMDA4IC0+IDcuNTE5MzkxNjBFLTgzODYgSW5leGFjdCBSb3VuZGVkCit4cmVtMTgwIHJlbWFpbmRlciA2MTMuMjA3Nzc0IC0zMDA3Ljc4NjA4IC0+IDYxMy4yMDc3NzQKK3hzdWIxODAgc3VidHJhY3QgNjEzLjIwNzc3NCAtMzAwNy43ODYwOCAtPiAzNjIwLjk5Mzg1IEluZXhhY3QgUm91bmRlZAoreGFkZDE4MSBhZGQgLTkzMDA2MjIyLjMgLTMuMDg5NjQ2MTkgLT4gLTkzMDA2MjI1LjQgSW5leGFjdCBSb3VuZGVkCit4Y29tMTgxIGNvbXBhcmUgLTkzMDA2MjIyLjMgLTMuMDg5NjQ2MTkgLT4gLTEKK3hkaXYxODEgZGl2aWRlIC05MzAwNjIyMi4zIC0zLjA4OTY0NjE5IC0+IDMwMTAyNTQ3LjkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTgxIGRpdmlkZWludCAtOTMwMDYyMjIuMyAtMy4wODk2NDYxOSAtPiAzMDEwMjU0NworeG11bDE4MSBtdWx0aXBseSAtOTMwMDYyMjIuMyAtMy4wODk2NDYxOSAtPiAyODczNTYzMjAgSW5leGFjdCBSb3VuZGVkCit4cG93MTgxIHBvd2VyIC05MzAwNjIyMi4zIC0zIC0+IC0xLjI0Mjk3OTU2RS0yNCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xODEgcmVtYWluZGVyIC05MzAwNjIyMi4zIC0zLjA4OTY0NjE5IC0+IC0yLjY1MjE1NDA3Cit4c3ViMTgxIHN1YnRyYWN0IC05MzAwNjIyMi4zIC0zLjA4OTY0NjE5IC0+IC05MzAwNjIxOS4yIEluZXhhY3QgUm91bmRlZAoreGFkZDE4MiBhZGQgLTE4MTE2LjA2MjEgMzQwOTYuMzA2RS0yNzAzNDcwOTIgLT4gLTE4MTE2LjA2MjEgSW5leGFjdCBSb3VuZGVkCit4Y29tMTgyIGNvbXBhcmUgLTE4MTE2LjA2MjEgMzQwOTYuMzA2RS0yNzAzNDcwOTIgLT4gLTEKK3hkaXYxODIgZGl2aWRlIC0xODExNi4wNjIxIDM0MDk2LjMwNkUtMjcwMzQ3MDkyIC0+IC01LjMxMzIwMzc1RSsyNzAzNDcwOTEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTgyIGRpdmlkZWludCAtMTgxMTYuMDYyMSAzNDA5Ni4zMDZFLTI3MDM0NzA5MiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDE4MiBtdWx0aXBseSAtMTgxMTYuMDYyMSAzNDA5Ni4zMDZFLTI3MDM0NzA5MiAtPiAtNi4xNzY5MDc5N0UtMjcwMzQ3MDg0IEluZXhhY3QgUm91bmRlZAoreHBvdzE4MiBwb3dlciAtMTgxMTYuMDYyMSAzIC0+IC01Ljk0NTU0MTMzRSsxMiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xODIgcmVtYWluZGVyIC0xODExNi4wNjIxIDM0MDk2LjMwNkUtMjcwMzQ3MDkyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTgyIHN1YnRyYWN0IC0xODExNi4wNjIxIDM0MDk2LjMwNkUtMjcwMzQ3MDkyIC0+IC0xODExNi4wNjIxIEluZXhhY3QgUm91bmRlZAoreGFkZDE4MyBhZGQgMTkyNzIzODYuOSAtNDEwNDQyMzc5LiAtPiAtMzkxMTY5OTkyIEluZXhhY3QgUm91bmRlZAoreGNvbTE4MyBjb21wYXJlIDE5MjcyMzg2LjkgLTQxMDQ0MjM3OS4gLT4gMQoreGRpdjE4MyBkaXZpZGUgMTkyNzIzODYuOSAtNDEwNDQyMzc5LiAtPiAtMC4wNDY5NTUxNTg0IEluZXhhY3QgUm91bmRlZAoreGR2aTE4MyBkaXZpZGVpbnQgMTkyNzIzODYuOSAtNDEwNDQyMzc5LiAtPiAtMAoreG11bDE4MyBtdWx0aXBseSAxOTI3MjM4Ni45IC00MTA0NDIzNzkuIC0+IC03LjkxMDIwNDMzRSsxNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxODMgcG93ZXIgMTkyNzIzODYuOSAtNDEwNDQyMzc5IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTE4MyByZW1haW5kZXIgMTkyNzIzODYuOSAtNDEwNDQyMzc5LiAtPiAxOTI3MjM4Ni45Cit4c3ViMTgzIHN1YnRyYWN0IDE5MjcyMzg2LjkgLTQxMDQ0MjM3OS4gLT4gNDI5NzE0NzY2IEluZXhhY3QgUm91bmRlZAoreGFkZDE4NCBhZGQgNDE4MC4zMDgyMSAtMS42NDM5NTQzRS02MjQ3NTkxMDQgLT4gNDE4MC4zMDgyMSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xODQgY29tcGFyZSA0MTgwLjMwODIxIC0xLjY0Mzk1NDNFLTYyNDc1OTEwNCAtPiAxCit4ZGl2MTg0IGRpdmlkZSA0MTgwLjMwODIxIC0xLjY0Mzk1NDNFLTYyNDc1OTEwNCAtPiAtMi41NDI4MzcyNEUrNjI0NzU5MTA3IEluZXhhY3QgUm91bmRlZAoreGR2aTE4NCBkaXZpZGVpbnQgNDE4MC4zMDgyMSAtMS42NDM5NTQzRS02MjQ3NTkxMDQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwxODQgbXVsdGlwbHkgNDE4MC4zMDgyMSAtMS42NDM5NTQzRS02MjQ3NTkxMDQgLT4gLTYuODcyMjM1NjZFLTYyNDc1OTEwMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxODQgcG93ZXIgNDE4MC4zMDgyMSAtMiAtPiA1LjcyMjQ2ODI4RS04IEluZXhhY3QgUm91bmRlZAoreHJlbTE4NCByZW1haW5kZXIgNDE4MC4zMDgyMSAtMS42NDM5NTQzRS02MjQ3NTkxMDQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxODQgc3VidHJhY3QgNDE4MC4zMDgyMSAtMS42NDM5NTQzRS02MjQ3NTkxMDQgLT4gNDE4MC4zMDgyMSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxODUgYWRkIDU3MS41MzY3MjUgMzg5Ljg5OTIyMCAtPiA5NjEuNDM1OTQ1Cit4Y29tMTg1IGNvbXBhcmUgNTcxLjUzNjcyNSAzODkuODk5MjIwIC0+IDEKK3hkaXYxODUgZGl2aWRlIDU3MS41MzY3MjUgMzg5Ljg5OTIyMCAtPiAxLjQ2NTg1NzU3IEluZXhhY3QgUm91bmRlZAoreGR2aTE4NSBkaXZpZGVpbnQgNTcxLjUzNjcyNSAzODkuODk5MjIwIC0+IDEKK3htdWwxODUgbXVsdGlwbHkgNTcxLjUzNjcyNSAzODkuODk5MjIwIC0+IDIyMjg0MS43MjMgSW5leGFjdCBSb3VuZGVkCit4cG93MTg1IHBvd2VyIDU3MS41MzY3MjUgMzkwIC0+IDEuNzY2OTEzNzNFKzEwNzUgSW5leGFjdCBSb3VuZGVkCit4cmVtMTg1IHJlbWFpbmRlciA1NzEuNTM2NzI1IDM4OS44OTkyMjAgLT4gMTgxLjYzNzUwNQoreHN1YjE4NSBzdWJ0cmFjdCA1NzEuNTM2NzI1IDM4OS44OTkyMjAgLT4gMTgxLjYzNzUwNQoreGFkZDE4NiBhZGQgLTYyMjAwNzMwNi5FKzE1OTkyNDg4NiAtMTI2Ljk3MTc0NSAtPiAtNi4yMjAwNzMwNkUrMTU5OTI0ODk0IEluZXhhY3QgUm91bmRlZAoreGNvbTE4NiBjb21wYXJlIC02MjIwMDczMDYuRSsxNTk5MjQ4ODYgLTEyNi45NzE3NDUgLT4gLTEKK3hkaXYxODYgZGl2aWRlIC02MjIwMDczMDYuRSsxNTk5MjQ4ODYgLTEyNi45NzE3NDUgLT4gNC44OTg3ODUyMUUrMTU5OTI0ODkyIEluZXhhY3QgUm91bmRlZAoreGR2aTE4NiBkaXZpZGVpbnQgLTYyMjAwNzMwNi5FKzE1OTkyNDg4NiAtMTI2Ljk3MTc0NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDE4NiBtdWx0aXBseSAtNjIyMDA3MzA2LkUrMTU5OTI0ODg2IC0xMjYuOTcxNzQ1IC0+IDcuODk3NzM1MzBFKzE1OTkyNDg5NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxODYgcG93ZXIgLTYyMjAwNzMwNi5FKzE1OTkyNDg4NiAtMTI3IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xODYgcmVtYWluZGVyIC02MjIwMDczMDYuRSsxNTk5MjQ4ODYgLTEyNi45NzE3NDUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxODYgc3VidHJhY3QgLTYyMjAwNzMwNi5FKzE1OTkyNDg4NiAtMTI2Ljk3MTc0NSAtPiAtNi4yMjAwNzMwNkUrMTU5OTI0ODk0IEluZXhhY3QgUm91bmRlZAoreGFkZDE4NyBhZGQgLTI5LjM1NjU1MUUtMjgyODE2MTM5IDM3MTQxNzQ4RS05MDMzOTc4MjEgLT4gLTIuOTM1NjU1MTBFLTI4MjgxNjEzOCBJbmV4YWN0IFJvdW5kZWQKK3hjb20xODcgY29tcGFyZSAtMjkuMzU2NTUxRS0yODI4MTYxMzkgMzcxNDE3NDhFLTkwMzM5NzgyMSAtPiAtMQoreGRpdjE4NyBkaXZpZGUgLTI5LjM1NjU1MUUtMjgyODE2MTM5IDM3MTQxNzQ4RS05MDMzOTc4MjEgLT4gLTcuOTAzOTIyODNFKzYyMDU4MTY3NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxODcgZGl2aWRlaW50IC0yOS4zNTY1NTFFLTI4MjgxNjEzOSAzNzE0MTc0OEUtOTAzMzk3ODIxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTg3IG11bHRpcGx5IC0yOS4zNTY1NTFFLTI4MjgxNjEzOSAzNzE0MTc0OEUtOTAzMzk3ODIxIC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hwb3cxODcgcG93ZXIgLTI5LjM1NjU1MUUtMjgyODE2MTM5IDQgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMTg3IHJlbWFpbmRlciAtMjkuMzU2NTUxRS0yODI4MTYxMzkgMzcxNDE3NDhFLTkwMzM5NzgyMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjE4NyBzdWJ0cmFjdCAtMjkuMzU2NTUxRS0yODI4MTYxMzkgMzcxNDE3NDhFLTkwMzM5NzgyMSAtPiAtMi45MzU2NTUxMEUtMjgyODE2MTM4IEluZXhhY3QgUm91bmRlZAoreGFkZDE4OCBhZGQgOTI0Mjc0NDIuNCA2NzQzMzQ4OTguIC0+IDc2Njc2MjM0MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20xODggY29tcGFyZSA5MjQyNzQ0Mi40IDY3NDMzNDg5OC4gLT4gLTEKK3hkaXYxODggZGl2aWRlIDkyNDI3NDQyLjQgNjc0MzM0ODk4LiAtPiAwLjEzNzA2NDU5OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxODggZGl2aWRlaW50IDkyNDI3NDQyLjQgNjc0MzM0ODk4LiAtPiAwCit4bXVsMTg4IG11bHRpcGx5IDkyNDI3NDQyLjQgNjc0MzM0ODk4LiAtPiA2LjIzMjcwNDk5RSsxNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxODggcG93ZXIgOTI0Mjc0NDIuNCA2NzQzMzQ4OTggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMTg4IHJlbWFpbmRlciA5MjQyNzQ0Mi40IDY3NDMzNDg5OC4gLT4gOTI0Mjc0NDIuNAoreHN1YjE4OCBzdWJ0cmFjdCA5MjQyNzQ0Mi40IDY3NDMzNDg5OC4gLT4gLTU4MTkwNzQ1NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxODkgYWRkIDQ0NjUxODk1LjcgLTkxMDUwOC40MzggLT4gNDM3NDEzODcuMyBJbmV4YWN0IFJvdW5kZWQKK3hjb20xODkgY29tcGFyZSA0NDY1MTg5NS43IC05MTA1MDguNDM4IC0+IDEKK3hkaXYxODkgZGl2aWRlIDQ0NjUxODk1LjcgLTkxMDUwOC40MzggLT4gLTQ5LjA0MDYxNzEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTg5IGRpdmlkZWludCA0NDY1MTg5NS43IC05MTA1MDguNDM4IC0+IC00OQoreG11bDE4OSBtdWx0aXBseSA0NDY1MTg5NS43IC05MTA1MDguNDM4IC0+IC00LjA2NTU5Mjc4RSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxODkgcG93ZXIgNDQ2NTE4OTUuNyAtOTEwNTA4IC0+IDMuNzIyNjQyNzdFLTY5NjUyNDEgSW5leGFjdCBSb3VuZGVkCit4cmVtMTg5IHJlbWFpbmRlciA0NDY1MTg5NS43IC05MTA1MDguNDM4IC0+IDM2OTgyLjIzOAoreHN1YjE4OSBzdWJ0cmFjdCA0NDY1MTg5NS43IC05MTA1MDguNDM4IC0+IDQ1NTYyNDA0LjEgSW5leGFjdCBSb3VuZGVkCit4YWRkMTkwIGFkZCA2NDc4OTc4NzIuRSszNzQwMjE3OTAgLTQ2Ny40MjMwMjkgLT4gNi40Nzg5Nzg3MkUrMzc0MDIxNzk4IEluZXhhY3QgUm91bmRlZAoreGNvbTE5MCBjb21wYXJlIDY0Nzg5Nzg3Mi5FKzM3NDAyMTc5MCAtNDY3LjQyMzAyOSAtPiAxCit4ZGl2MTkwIGRpdmlkZSA2NDc4OTc4NzIuRSszNzQwMjE3OTAgLTQ2Ny40MjMwMjkgLT4gLTEuMzg2MTA2MDFFKzM3NDAyMTc5NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxOTAgZGl2aWRlaW50IDY0Nzg5Nzg3Mi5FKzM3NDAyMTc5MCAtNDY3LjQyMzAyOSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDE5MCBtdWx0aXBseSA2NDc4OTc4NzIuRSszNzQwMjE3OTAgLTQ2Ny40MjMwMjkgLT4gLTMuMDI4NDIzODZFKzM3NDAyMTgwMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxOTAgcG93ZXIgNjQ3ODk3ODcyLkUrMzc0MDIxNzkwIC00NjcgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMTkwIHJlbWFpbmRlciA2NDc4OTc4NzIuRSszNzQwMjE3OTAgLTQ2Ny40MjMwMjkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIxOTAgc3VidHJhY3QgNjQ3ODk3ODcyLkUrMzc0MDIxNzkwIC00NjcuNDIzMDI5IC0+IDYuNDc4OTc4NzJFKzM3NDAyMTc5OCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxOTEgYWRkIDI1LjI1OTIxNDkgNTkuMDQzNjk4MSAtPiA4NC4zMDI5MTMwCit4Y29tMTkxIGNvbXBhcmUgMjUuMjU5MjE0OSA1OS4wNDM2OTgxIC0+IC0xCit4ZGl2MTkxIGRpdmlkZSAyNS4yNTkyMTQ5IDU5LjA0MzY5ODEgLT4gMC40Mjc4MDU0MzQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTkxIGRpdmlkZWludCAyNS4yNTkyMTQ5IDU5LjA0MzY5ODEgLT4gMAoreG11bDE5MSBtdWx0aXBseSAyNS4yNTkyMTQ5IDU5LjA0MzY5ODEgLT4gMTQ5MS4zOTc0NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxOTEgcG93ZXIgMjUuMjU5MjE0OSA1OSAtPiA1LjUzMDU4NDM1RSs4MiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xOTEgcmVtYWluZGVyIDI1LjI1OTIxNDkgNTkuMDQzNjk4MSAtPiAyNS4yNTkyMTQ5Cit4c3ViMTkxIHN1YnRyYWN0IDI1LjI1OTIxNDkgNTkuMDQzNjk4MSAtPiAtMzMuNzg0NDgzMgoreGFkZDE5MiBhZGQgLTYuODUwODM1IC0xMjczLjQ4MjQwIC0+IC0xMjgwLjMzMzI0IEluZXhhY3QgUm91bmRlZAoreGNvbTE5MiBjb21wYXJlIC02Ljg1MDgzNSAtMTI3My40ODI0MCAtPiAxCit4ZGl2MTkyIGRpdmlkZSAtNi44NTA4MzUgLTEyNzMuNDgyNDAgLT4gMC4wMDUzNzk2MDcxMyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxOTIgZGl2aWRlaW50IC02Ljg1MDgzNSAtMTI3My40ODI0MCAtPiAwCit4bXVsMTkyIG11bHRpcGx5IC02Ljg1MDgzNSAtMTI3My40ODI0MCAtPiA4NzI0LjQxNzgwIEluZXhhY3QgUm91bmRlZAoreHBvdzE5MiBwb3dlciAtNi44NTA4MzUgLTEyNzMgLT4gLTEuMjU0NjI2NzhFLTEwNjQgSW5leGFjdCBSb3VuZGVkCit4cmVtMTkyIHJlbWFpbmRlciAtNi44NTA4MzUgLTEyNzMuNDgyNDAgLT4gLTYuODUwODM1Cit4c3ViMTkyIHN1YnRyYWN0IC02Ljg1MDgzNSAtMTI3My40ODI0MCAtPiAxMjY2LjYzMTU3IEluZXhhY3QgUm91bmRlZAoreGFkZDE5MyBhZGQgMTc0LjI3MjMyNSA1NjM4LjE2MjI5IC0+IDU4MTIuNDM0NjIgSW5leGFjdCBSb3VuZGVkCit4Y29tMTkzIGNvbXBhcmUgMTc0LjI3MjMyNSA1NjM4LjE2MjI5IC0+IC0xCit4ZGl2MTkzIGRpdmlkZSAxNzQuMjcyMzI1IDU2MzguMTYyMjkgLT4gMC4wMzA5MDk0MTk4IEluZXhhY3QgUm91bmRlZAoreGR2aTE5MyBkaXZpZGVpbnQgMTc0LjI3MjMyNSA1NjM4LjE2MjI5IC0+IDAKK3htdWwxOTMgbXVsdGlwbHkgMTc0LjI3MjMyNSA1NjM4LjE2MjI5IC0+IDk4MjU3NS42NTEgSW5leGFjdCBSb3VuZGVkCit4cG93MTkzIHBvd2VyIDE3NC4yNzIzMjUgNTYzOCAtPiAxLjExMTM3NzI0RSsxMjYzNiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xOTMgcmVtYWluZGVyIDE3NC4yNzIzMjUgNTYzOC4xNjIyOSAtPiAxNzQuMjcyMzI1Cit4c3ViMTkzIHN1YnRyYWN0IDE3NC4yNzIzMjUgNTYzOC4xNjIyOSAtPiAtNTQ2My44ODk5NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQxOTQgYWRkIDM0NTU2MjkuNzYgLTguMjczMzIzMjIgLT4gMzQ1NTYyMS40OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xOTQgY29tcGFyZSAzNDU1NjI5Ljc2IC04LjI3MzMyMzIyIC0+IDEKK3hkaXYxOTQgZGl2aWRlIDM0NTU2MjkuNzYgLTguMjczMzIzMjIgLT4gLTQxNzY4My4zOTkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMTk0IGRpdmlkZWludCAzNDU1NjI5Ljc2IC04LjI3MzMyMzIyIC0+IC00MTc2ODMKK3htdWwxOTQgbXVsdGlwbHkgMzQ1NTYyOS43NiAtOC4yNzMzMjMyMiAtPiAtMjg1ODk1NDEuOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxOTQgcG93ZXIgMzQ1NTYyOS43NiAtOCAtPiA0LjkxNzkzMDE1RS01MyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xOTQgcmVtYWluZGVyIDM0NTU2MjkuNzYgLTguMjczMzIzMjIgLT4gMy4yOTc1MDA3NAoreHN1YjE5NCBzdWJ0cmFjdCAzNDU1NjI5Ljc2IC04LjI3MzMyMzIyIC0+IDM0NTU2MzguMDMgSW5leGFjdCBSb3VuZGVkCit4YWRkMTk1IGFkZCAtOTI0MzM3NzIzRS02NDA3NzEyMzUgODY2MzkzNzcuMSAtPiA4NjYzOTM3Ny4xIEluZXhhY3QgUm91bmRlZAoreGNvbTE5NSBjb21wYXJlIC05MjQzMzc3MjNFLTY0MDc3MTIzNSA4NjYzOTM3Ny4xIC0+IC0xCit4ZGl2MTk1IGRpdmlkZSAtOTI0MzM3NzIzRS02NDA3NzEyMzUgODY2MzkzNzcuMSAtPiAtMS4wNjY4Nzk0N0UtNjQwNzcxMjM0IEluZXhhY3QgUm91bmRlZAoreGR2aTE5NSBkaXZpZGVpbnQgLTkyNDMzNzcyM0UtNjQwNzcxMjM1IDg2NjM5Mzc3LjEgLT4gLTAKK3htdWwxOTUgbXVsdGlwbHkgLTkyNDMzNzcyM0UtNjQwNzcxMjM1IDg2NjM5Mzc3LjEgLT4gLTguMDA4NDA0NDZFLTY0MDc3MTIxOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxOTUgcG93ZXIgLTkyNDMzNzcyM0UtNjQwNzcxMjM1IDg2NjM5Mzc3IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0xOTUgcmVtYWluZGVyIC05MjQzMzc3MjNFLTY0MDc3MTIzNSA4NjYzOTM3Ny4xIC0+IC05LjI0MzM3NzIzRS02NDA3NzEyMjcKK3hzdWIxOTUgc3VidHJhY3QgLTkyNDMzNzcyM0UtNjQwNzcxMjM1IDg2NjM5Mzc3LjEgLT4gLTg2NjM5Mzc3LjEgSW5leGFjdCBSb3VuZGVkCit4YWRkMTk2IGFkZCAtNjIwMjM2OTMyLkUrNjU2ODIzOTY5IDMzNjQ3MjIuNzMgLT4gLTYuMjAyMzY5MzJFKzY1NjgyMzk3NyBJbmV4YWN0IFJvdW5kZWQKK3hjb20xOTYgY29tcGFyZSAtNjIwMjM2OTMyLkUrNjU2ODIzOTY5IDMzNjQ3MjIuNzMgLT4gLTEKK3hkaXYxOTYgZGl2aWRlIC02MjAyMzY5MzIuRSs2NTY4MjM5NjkgMzM2NDcyMi43MyAtPiAtMS44NDMzNTIyOEUrNjU2ODIzOTcxIEluZXhhY3QgUm91bmRlZAoreGR2aTE5NiBkaXZpZGVpbnQgLTYyMDIzNjkzMi5FKzY1NjgyMzk2OSAzMzY0NzIyLjczIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMTk2IG11bHRpcGx5IC02MjAyMzY5MzIuRSs2NTY4MjM5NjkgMzM2NDcyMi43MyAtPiAtMi4wODY5MjUzMEUrNjU2ODIzOTg0IEluZXhhY3QgUm91bmRlZAoreHBvdzE5NiBwb3dlciAtNjIwMjM2OTMyLkUrNjU2ODIzOTY5IDMzNjQ3MjMgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTE5NiByZW1haW5kZXIgLTYyMDIzNjkzMi5FKzY1NjgyMzk2OSAzMzY0NzIyLjczIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMTk2IHN1YnRyYWN0IC02MjAyMzY5MzIuRSs2NTY4MjM5NjkgMzM2NDcyMi43MyAtPiAtNi4yMDIzNjkzMkUrNjU2ODIzOTc3IEluZXhhY3QgUm91bmRlZAoreGFkZDE5NyBhZGQgOS4xMDAyNTA3OSA3MDI3Nzc4ODJFLTgxOTIyMzQgLT4gOS4xMDAyNTA3OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20xOTcgY29tcGFyZSA5LjEwMDI1MDc5IDcwMjc3Nzg4MkUtODE5MjIzNCAtPiAxCit4ZGl2MTk3IGRpdmlkZSA5LjEwMDI1MDc5IDcwMjc3Nzg4MkUtODE5MjIzNCAtPiAxLjI5NDg5NzE1RSs4MTkyMjI2IEluZXhhY3QgUm91bmRlZAoreGR2aTE5NyBkaXZpZGVpbnQgOS4xMDAyNTA3OSA3MDI3Nzc4ODJFLTgxOTIyMzQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwxOTcgbXVsdGlwbHkgOS4xMDAyNTA3OSA3MDI3Nzc4ODJFLTgxOTIyMzQgLT4gNi4zOTU0NTQ5OEUtODE5MjIyNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxOTcgcG93ZXIgOS4xMDAyNTA3OSA3IC0+IDUxNjg2MDcuMTkgSW5leGFjdCBSb3VuZGVkCit4cmVtMTk3IHJlbWFpbmRlciA5LjEwMDI1MDc5IDcwMjc3Nzg4MkUtODE5MjIzNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjE5NyBzdWJ0cmFjdCA5LjEwMDI1MDc5IDcwMjc3Nzg4MkUtODE5MjIzNCAtPiA5LjEwMDI1MDc5IEluZXhhY3QgUm91bmRlZAoreGFkZDE5OCBhZGQgLTE4ODU3NTM5LjkgODEzMDEzMTI5LiAtPiA3OTQxNTU1ODkgSW5leGFjdCBSb3VuZGVkCit4Y29tMTk4IGNvbXBhcmUgLTE4ODU3NTM5LjkgODEzMDEzMTI5LiAtPiAtMQoreGRpdjE5OCBkaXZpZGUgLTE4ODU3NTM5LjkgODEzMDEzMTI5LiAtPiAtMC4wMjMxOTQ2MzE1IEluZXhhY3QgUm91bmRlZAoreGR2aTE5OCBkaXZpZGVpbnQgLTE4ODU3NTM5LjkgODEzMDEzMTI5LiAtPiAtMAoreG11bDE5OCBtdWx0aXBseSAtMTg4NTc1MzkuOSA4MTMwMTMxMjkuIC0+IC0xLjUzMzE0Mjc1RSsxNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxOTggcG93ZXIgLTE4ODU3NTM5LjkgODEzMDEzMTI5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xOTggcmVtYWluZGVyIC0xODg1NzUzOS45IDgxMzAxMzEyOS4gLT4gLTE4ODU3NTM5LjkKK3hzdWIxOTggc3VidHJhY3QgLTE4ODU3NTM5LjkgODEzMDEzMTI5LiAtPiAtODMxODcwNjY5IEluZXhhY3QgUm91bmRlZAoreGFkZDE5OSBhZGQgLTguMjk1MzAzMjcgMzI0MzQxOS41N0UrMzU2ODgzMzIgLT4gMy4yNDM0MTk1N0UrMzU2ODgzMzggSW5leGFjdCBSb3VuZGVkCit4Y29tMTk5IGNvbXBhcmUgLTguMjk1MzAzMjcgMzI0MzQxOS41N0UrMzU2ODgzMzIgLT4gLTEKK3hkaXYxOTkgZGl2aWRlIC04LjI5NTMwMzI3IDMyNDM0MTkuNTdFKzM1Njg4MzMyIC0+IC0yLjU1NzU3OTQ2RS0zNTY4ODMzOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkxOTkgZGl2aWRlaW50IC04LjI5NTMwMzI3IDMyNDM0MTkuNTdFKzM1Njg4MzMyIC0+IC0wCit4bXVsMTk5IG11bHRpcGx5IC04LjI5NTMwMzI3IDMyNDM0MTkuNTdFKzM1Njg4MzMyIC0+IC0yLjY5MDUxNDkwRSszNTY4ODMzOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cxOTkgcG93ZXIgLTguMjk1MzAzMjcgMyAtPiAtNTcwLjgxNjg3NiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0xOTkgcmVtYWluZGVyIC04LjI5NTMwMzI3IDMyNDM0MTkuNTdFKzM1Njg4MzMyIC0+IC04LjI5NTMwMzI3Cit4c3ViMTk5IHN1YnRyYWN0IC04LjI5NTMwMzI3IDMyNDM0MTkuNTdFKzM1Njg4MzMyIC0+IC0zLjI0MzQxOTU3RSszNTY4ODMzOCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMDAgYWRkIC01NzEwMTY4My41IDc2MzU1MTM0MUUrOTkxNDkxNzEyIC0+IDcuNjM1NTEzNDFFKzk5MTQ5MTcyMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMDAgY29tcGFyZSAtNTcxMDE2ODMuNSA3NjM1NTEzNDFFKzk5MTQ5MTcxMiAtPiAtMQoreGRpdjIwMCBkaXZpZGUgLTU3MTAxNjgzLjUgNzYzNTUxMzQxRSs5OTE0OTE3MTIgLT4gLTcuNDc4NDM0MDVFLTk5MTQ5MTcxNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMDAgZGl2aWRlaW50IC01NzEwMTY4My41IDc2MzU1MTM0MUUrOTkxNDkxNzEyIC0+IC0wCit4bXVsMjAwIG11bHRpcGx5IC01NzEwMTY4My41IDc2MzU1MTM0MUUrOTkxNDkxNzEyIC0+IC00LjM2MDAwNjcwRSs5OTE0OTE3MjggSW5leGFjdCBSb3VuZGVkCit4cG93MjAwIHBvd2VyIC01NzEwMTY4My41IDggLT4gMS4xMzAyOTM2OEUrNjIgSW5leGFjdCBSb3VuZGVkCit4cmVtMjAwIHJlbWFpbmRlciAtNTcxMDE2ODMuNSA3NjM1NTEzNDFFKzk5MTQ5MTcxMiAtPiAtNTcxMDE2ODMuNQoreHN1YjIwMCBzdWJ0cmFjdCAtNTcxMDE2ODMuNSA3NjM1NTEzNDFFKzk5MTQ5MTcxMiAtPiAtNy42MzU1MTM0MUUrOTkxNDkxNzIwIEluZXhhY3QgUm91bmRlZAoreGFkZDIwMSBhZGQgLTYwMzMyNi43NDAgMTcxMC45NTE4MyAtPiAtNjAxNjE1Ljc4OCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMDEgY29tcGFyZSAtNjAzMzI2Ljc0MCAxNzEwLjk1MTgzIC0+IC0xCit4ZGl2MjAxIGRpdmlkZSAtNjAzMzI2Ljc0MCAxNzEwLjk1MTgzIC0+IC0zNTIuNjI2Mzc0IEluZXhhY3QgUm91bmRlZAoreGR2aTIwMSBkaXZpZGVpbnQgLTYwMzMyNi43NDAgMTcxMC45NTE4MyAtPiAtMzUyCit4bXVsMjAxIG11bHRpcGx5IC02MDMzMjYuNzQwIDE3MTAuOTUxODMgLT4gLTEuMDMyMjYyOTlFKzkgSW5leGFjdCBSb3VuZGVkCit4cG93MjAxIHBvd2VyIC02MDMzMjYuNzQwIDE3MTEgLT4gLTMuMzUzMTU5NzZFKzk4OTAgSW5leGFjdCBSb3VuZGVkCit4cmVtMjAxIHJlbWFpbmRlciAtNjAzMzI2Ljc0MCAxNzEwLjk1MTgzIC0+IC0xMDcxLjY5NTg0Cit4c3ViMjAxIHN1YnRyYWN0IC02MDMzMjYuNzQwIDE3MTAuOTUxODMgLT4gLTYwNTAzNy42OTIgSW5leGFjdCBSb3VuZGVkCit4YWRkMjAyIGFkZCAtNDgxNDI3NjMuMyAtOTQzNDM0MTE0IC0+IC05OTE1NzY4NzcgSW5leGFjdCBSb3VuZGVkCit4Y29tMjAyIGNvbXBhcmUgLTQ4MTQyNzYzLjMgLTk0MzQzNDExNCAtPiAxCit4ZGl2MjAyIGRpdmlkZSAtNDgxNDI3NjMuMyAtOTQzNDM0MTE0IC0+IDAuMDUxMDI5Mjc5NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMDIgZGl2aWRlaW50IC00ODE0Mjc2My4zIC05NDM0MzQxMTQgLT4gMAoreG11bDIwMiBtdWx0aXBseSAtNDgxNDI3NjMuMyAtOTQzNDM0MTE0IC0+IDQuNTQxOTUyNTJFKzE2IEluZXhhY3QgUm91bmRlZAoreHBvdzIwMiBwb3dlciAtNDgxNDI3NjMuMyAtOTQzNDM0MTE0IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTIwMiByZW1haW5kZXIgLTQ4MTQyNzYzLjMgLTk0MzQzNDExNCAtPiAtNDgxNDI3NjMuMworeHN1YjIwMiBzdWJ0cmFjdCAtNDgxNDI3NjMuMyAtOTQzNDM0MTE0IC0+IDg5NTI5MTM1MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMDMgYWRkIC0yMDQuNTg2NzY3IC0yMzUuNTMxODQ3IC0+IC00NDAuMTE4NjE0Cit4Y29tMjAzIGNvbXBhcmUgLTIwNC41ODY3NjcgLTIzNS41MzE4NDcgLT4gMQoreGRpdjIwMyBkaXZpZGUgLTIwNC41ODY3NjcgLTIzNS41MzE4NDcgLT4gMC44Njg2MTYxNTQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjAzIGRpdmlkZWludCAtMjA0LjU4Njc2NyAtMjM1LjUzMTg0NyAtPiAwCit4bXVsMjAzIG11bHRpcGx5IC0yMDQuNTg2NzY3IC0yMzUuNTMxODQ3IC0+IDQ4MTg2LjY5OTEgSW5leGFjdCBSb3VuZGVkCit4cG93MjAzIHBvd2VyIC0yMDQuNTg2NzY3IC0yMzYgLT4gNC4yOTQzODIyMkUtNTQ2IEluZXhhY3QgUm91bmRlZAoreHJlbTIwMyByZW1haW5kZXIgLTIwNC41ODY3NjcgLTIzNS41MzE4NDcgLT4gLTIwNC41ODY3NjcKK3hzdWIyMDMgc3VidHJhY3QgLTIwNC41ODY3NjcgLTIzNS41MzE4NDcgLT4gMzAuOTQ1MDgwCit4YWRkMjA0IGFkZCAtNzAuMzgwNTU4MSA4MzAxMzcuOTEzIC0+IDgzMDA2Ny41MzIgSW5leGFjdCBSb3VuZGVkCit4Y29tMjA0IGNvbXBhcmUgLTcwLjM4MDU1ODEgODMwMTM3LjkxMyAtPiAtMQoreGRpdjIwNCBkaXZpZGUgLTcwLjM4MDU1ODEgODMwMTM3LjkxMyAtPiAtMC4wMDAwODQ3ODE3NjU4IEluZXhhY3QgUm91bmRlZAoreGR2aTIwNCBkaXZpZGVpbnQgLTcwLjM4MDU1ODEgODMwMTM3LjkxMyAtPiAtMAoreG11bDIwNCBtdWx0aXBseSAtNzAuMzgwNTU4MSA4MzAxMzcuOTEzIC0+IC01ODQyNTU2OS42IEluZXhhY3QgUm91bmRlZAoreHBvdzIwNCBwb3dlciAtNzAuMzgwNTU4MSA4MzAxMzggLT4gNC45NTE2NTg0MUUrMTUzMzY0MCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMDQgcmVtYWluZGVyIC03MC4zODA1NTgxIDgzMDEzNy45MTMgLT4gLTcwLjM4MDU1ODEKK3hzdWIyMDQgc3VidHJhY3QgLTcwLjM4MDU1ODEgODMwMTM3LjkxMyAtPiAtODMwMjA4LjI5NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMDUgYWRkIC04ODE4LjQ3NjA2IC02MDc2Ni40NTcxIC0+IC02OTU4NC45MzMyIEluZXhhY3QgUm91bmRlZAoreGNvbTIwNSBjb21wYXJlIC04ODE4LjQ3NjA2IC02MDc2Ni40NTcxIC0+IDEKK3hkaXYyMDUgZGl2aWRlIC04ODE4LjQ3NjA2IC02MDc2Ni40NTcxIC0+IDAuMTQ1MTIwNzg3IEluZXhhY3QgUm91bmRlZAoreGR2aTIwNSBkaXZpZGVpbnQgLTg4MTguNDc2MDYgLTYwNzY2LjQ1NzEgLT4gMAoreG11bDIwNSBtdWx0aXBseSAtODgxOC40NzYwNiAtNjA3NjYuNDU3MSAtPiA1MzU4Njc1NDcgSW5leGFjdCBSb3VuZGVkCit4cG93MjA1IHBvd2VyIC04ODE4LjQ3NjA2IC02MDc2NiAtPiAxLjY0NDg3NzU1RS0yMzk3NDYgSW5leGFjdCBSb3VuZGVkCit4cmVtMjA1IHJlbWFpbmRlciAtODgxOC40NzYwNiAtNjA3NjYuNDU3MSAtPiAtODgxOC40NzYwNgoreHN1YjIwNSBzdWJ0cmFjdCAtODgxOC40NzYwNiAtNjA3NjYuNDU3MSAtPiA1MTk0Ny45ODEwIEluZXhhY3QgUm91bmRlZAoreGFkZDIwNiBhZGQgMzcwNjA5MjkuM0UtMTY4NDM5NTA5IC03OTU3NjcxNy4xIC0+IC03OTU3NjcxNy4xIEluZXhhY3QgUm91bmRlZAoreGNvbTIwNiBjb21wYXJlIDM3MDYwOTI5LjNFLTE2ODQzOTUwOSAtNzk1NzY3MTcuMSAtPiAxCit4ZGl2MjA2IGRpdmlkZSAzNzA2MDkyOS4zRS0xNjg0Mzk1MDkgLTc5NTc2NzE3LjEgLT4gLTQuNjU3MjU3ODhFLTE2ODQzOTUxMCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMDYgZGl2aWRlaW50IDM3MDYwOTI5LjNFLTE2ODQzOTUwOSAtNzk1NzY3MTcuMSAtPiAtMAoreG11bDIwNiBtdWx0aXBseSAzNzA2MDkyOS4zRS0xNjg0Mzk1MDkgLTc5NTc2NzE3LjEgLT4gLTIuOTQ5MTg3MDlFLTE2ODQzOTQ5NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMDYgcG93ZXIgMzcwNjA5MjkuM0UtMTY4NDM5NTA5IC03OTU3NjcxNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMDYgcmVtYWluZGVyIDM3MDYwOTI5LjNFLTE2ODQzOTUwOSAtNzk1NzY3MTcuMSAtPiAzLjcwNjA5MjkzRS0xNjg0Mzk1MDIKK3hzdWIyMDYgc3VidHJhY3QgMzcwNjA5MjkuM0UtMTY4NDM5NTA5IC03OTU3NjcxNy4xIC0+IDc5NTc2NzE3LjEgSW5leGFjdCBSb3VuZGVkCit4YWRkMjA3IGFkZCAtNjU2Mjg1MzEwLiAtMTA3MjIxNDYyLiAtPiAtNzYzNTA2NzcyCit4Y29tMjA3IGNvbXBhcmUgLTY1NjI4NTMxMC4gLTEwNzIyMTQ2Mi4gLT4gLTEKK3hkaXYyMDcgZGl2aWRlIC02NTYyODUzMTAuIC0xMDcyMjE0NjIuIC0+IDYuMTIwODM5MDQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjA3IGRpdmlkZWludCAtNjU2Mjg1MzEwLiAtMTA3MjIxNDYyLiAtPiA2Cit4bXVsMjA3IG11bHRpcGx5IC02NTYyODUzMTAuIC0xMDcyMjE0NjIuIC0+IDcuMDM2Nzg3MDRFKzE2IEluZXhhY3QgUm91bmRlZAoreHBvdzIwNyBwb3dlciAtNjU2Mjg1MzEwLiAtMTA3MjIxNDYyIC0+IDguMDUzMzgwODBFLTk0NTM4MTU2OSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMDcgcmVtYWluZGVyIC02NTYyODUzMTAuIC0xMDcyMjE0NjIuIC0+IC0xMjk1NjUzOAoreHN1YjIwNyBzdWJ0cmFjdCAtNjU2Mjg1MzEwLiAtMTA3MjIxNDYyLiAtPiAtNTQ5MDYzODQ4Cit4YWRkMjA4IGFkZCA2NTMzOTcuMTI1IDcxOTUuMzA5OTAgLT4gNjYwNTkyLjQzNSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMDggY29tcGFyZSA2NTMzOTcuMTI1IDcxOTUuMzA5OTAgLT4gMQoreGRpdjIwOCBkaXZpZGUgNjUzMzk3LjEyNSA3MTk1LjMwOTkwIC0+IDkwLjgwODc1MzggSW5leGFjdCBSb3VuZGVkCit4ZHZpMjA4IGRpdmlkZWludCA2NTMzOTcuMTI1IDcxOTUuMzA5OTAgLT4gOTAKK3htdWwyMDggbXVsdGlwbHkgNjUzMzk3LjEyNSA3MTk1LjMwOTkwIC0+IDQuNzAxMzk0ODBFKzkgSW5leGFjdCBSb3VuZGVkCit4cG93MjA4IHBvd2VyIDY1MzM5Ny4xMjUgNzE5NSAtPiAxLjU4NTIyOTgzRSs0MTg0MCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMDggcmVtYWluZGVyIDY1MzM5Ny4xMjUgNzE5NS4zMDk5MCAtPiA1ODE5LjIzNDAwCit4c3ViMjA4IHN1YnRyYWN0IDY1MzM5Ny4xMjUgNzE5NS4zMDk5MCAtPiA2NDYyMDEuODE1IEluZXhhY3QgUm91bmRlZAoreGFkZDIwOSBhZGQgNTYyMjE5MTAuMEUrODU3OTA5Mzc0IC01OC43MjQ3OTI5IC0+IDUuNjIyMTkxMDBFKzg1NzkwOTM4MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMDkgY29tcGFyZSA1NjIyMTkxMC4wRSs4NTc5MDkzNzQgLTU4LjcyNDc5MjkgLT4gMQoreGRpdjIwOSBkaXZpZGUgNTYyMjE5MTAuMEUrODU3OTA5Mzc0IC01OC43MjQ3OTI5IC0+IC05LjU3Mzc5NDUxRSs4NTc5MDkzNzkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjA5IGRpdmlkZWludCA1NjIyMTkxMC4wRSs4NTc5MDkzNzQgLTU4LjcyNDc5MjkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyMDkgbXVsdGlwbHkgNTYyMjE5MTAuMEUrODU3OTA5Mzc0IC01OC43MjQ3OTI5IC0+IC0zLjMwMTYyMDAyRSs4NTc5MDkzODMgSW5leGFjdCBSb3VuZGVkCit4cG93MjA5IHBvd2VyIDU2MjIxOTEwLjBFKzg1NzkwOTM3NCAtNTkgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMjA5IHJlbWFpbmRlciA1NjIyMTkxMC4wRSs4NTc5MDkzNzQgLTU4LjcyNDc5MjkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyMDkgc3VidHJhY3QgNTYyMjE5MTAuMEUrODU3OTA5Mzc0IC01OC43MjQ3OTI5IC0+IDUuNjIyMTkxMDBFKzg1NzkwOTM4MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMTAgYWRkIDgwOTg2Mjg1OUUrNjQzNzY5OTc0IC01LjA2Nzg0MDE2IC0+IDguMDk4NjI4NTlFKzY0Mzc2OTk4MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMTAgY29tcGFyZSA4MDk4NjI4NTlFKzY0Mzc2OTk3NCAtNS4wNjc4NDAxNiAtPiAxCit4ZGl2MjEwIGRpdmlkZSA4MDk4NjI4NTlFKzY0Mzc2OTk3NCAtNS4wNjc4NDAxNiAtPiAtMS41OTgwNDM0MUUrNjQzNzY5OTgyIEluZXhhY3QgUm91bmRlZAoreGR2aTIxMCBkaXZpZGVpbnQgODA5ODYyODU5RSs2NDM3Njk5NzQgLTUuMDY3ODQwMTYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyMTAgbXVsdGlwbHkgODA5ODYyODU5RSs2NDM3Njk5NzQgLTUuMDY3ODQwMTYgLT4gLTQuMTA0MjU1NTJFKzY0Mzc2OTk4MyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMTAgcG93ZXIgODA5ODYyODU5RSs2NDM3Njk5NzQgLTUgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMjEwIHJlbWFpbmRlciA4MDk4NjI4NTlFKzY0Mzc2OTk3NCAtNS4wNjc4NDAxNiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjIxMCBzdWJ0cmFjdCA4MDk4NjI4NTlFKzY0Mzc2OTk3NCAtNS4wNjc4NDAxNiAtPiA4LjA5ODYyODU5RSs2NDM3Njk5ODIgSW5leGFjdCBSb3VuZGVkCit4YWRkMjExIGFkZCAtNjIwMTEuNDU2M0UtMTE3NTYzMjQwIC01Ny4xNzMxNTg2RSsxMTU2NTcyMDQgLT4gLTUuNzE3MzE1ODZFKzExNTY1NzIwNSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMTEgY29tcGFyZSAtNjIwMTEuNDU2M0UtMTE3NTYzMjQwIC01Ny4xNzMxNTg2RSsxMTU2NTcyMDQgLT4gMQoreGRpdjIxMSBkaXZpZGUgLTYyMDExLjQ1NjNFLTExNzU2MzI0MCAtNTcuMTczMTU4NkUrMTE1NjU3MjA0IC0+IDEuMDg0NjI1MzRFLTIzMzIyMDQ0MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMTEgZGl2aWRlaW50IC02MjAxMS40NTYzRS0xMTc1NjMyNDAgLTU3LjE3MzE1ODZFKzExNTY1NzIwNCAtPiAwCit4bXVsMjExIG11bHRpcGx5IC02MjAxMS40NTYzRS0xMTc1NjMyNDAgLTU3LjE3MzE1ODZFKzExNTY1NzIwNCAtPiAzLjU0NTM5MDgzRS0xOTA2MDMwIEluZXhhY3QgUm91bmRlZAoreHBvdzIxMSBwb3dlciAtNjIwMTEuNDU2M0UtMTE3NTYzMjQwIC02IC0+IDEuNzU4NjA1NDZFKzcwNTM3OTQxMSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMTEgcmVtYWluZGVyIC02MjAxMS40NTYzRS0xMTc1NjMyNDAgLTU3LjE3MzE1ODZFKzExNTY1NzIwNCAtPiAtNi4yMDExNDU2M0UtMTE3NTYzMjM2Cit4c3ViMjExIHN1YnRyYWN0IC02MjAxMS40NTYzRS0xMTc1NjMyNDAgLTU3LjE3MzE1ODZFKzExNTY1NzIwNCAtPiA1LjcxNzMxNTg2RSsxMTU2NTcyMDUgSW5leGFjdCBSb3VuZGVkCit4YWRkMjEyIGFkZCAzMTUuMzMzNTEgOTE1ODguODM3RS01MzYwMjAxNDkgLT4gMzE1LjMzMzUxMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMTIgY29tcGFyZSAzMTUuMzMzNTEgOTE1ODguODM3RS01MzYwMjAxNDkgLT4gMQoreGRpdjIxMiBkaXZpZGUgMzE1LjMzMzUxIDkxNTg4LjgzN0UtNTM2MDIwMTQ5IC0+IDMuNDQyOTI1MTVFKzUzNjAyMDE0NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMTIgZGl2aWRlaW50IDMxNS4zMzM1MSA5MTU4OC44MzdFLTUzNjAyMDE0OSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDIxMiBtdWx0aXBseSAzMTUuMzMzNTEgOTE1ODguODM3RS01MzYwMjAxNDkgLT4gMi44ODgxMDI5NEUtNTM2MDIwMTQyIEluZXhhY3QgUm91bmRlZAoreHBvdzIxMiBwb3dlciAzMTUuMzMzNTEgOSAtPiAzLjA4MjY5OTAyRSsyMiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMTIgcmVtYWluZGVyIDMxNS4zMzM1MSA5MTU4OC44MzdFLTUzNjAyMDE0OSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjIxMiBzdWJ0cmFjdCAzMTUuMzMzNTEgOTE1ODguODM3RS01MzYwMjAxNDkgLT4gMzE1LjMzMzUxMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMTMgYWRkIDczOS45NDQ3MTAgMjAyOTQ5LjE3NSAtPiAyMDM2ODkuMTIwIEluZXhhY3QgUm91bmRlZAoreGNvbTIxMyBjb21wYXJlIDczOS45NDQ3MTAgMjAyOTQ5LjE3NSAtPiAtMQoreGRpdjIxMyBkaXZpZGUgNzM5Ljk0NDcxMCAyMDI5NDkuMTc1IC0+IDAuMDAzNjQ1OTYwNjcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjEzIGRpdmlkZWludCA3MzkuOTQ0NzEwIDIwMjk0OS4xNzUgLT4gMAoreG11bDIxMyBtdWx0aXBseSA3MzkuOTQ0NzEwIDIwMjk0OS4xNzUgLT4gMTUwMTcxMTY4IEluZXhhY3QgUm91bmRlZAoreHBvdzIxMyBwb3dlciA3MzkuOTQ0NzEwIDIwMjk0OSAtPiAxLjMyNjExNzI5RSs1ODIzMDEgSW5leGFjdCBSb3VuZGVkCit4cmVtMjEzIHJlbWFpbmRlciA3MzkuOTQ0NzEwIDIwMjk0OS4xNzUgLT4gNzM5Ljk0NDcxMAoreHN1YjIxMyBzdWJ0cmFjdCA3MzkuOTQ0NzEwIDIwMjk0OS4xNzUgLT4gLTIwMjIwOS4yMzAgSW5leGFjdCBSb3VuZGVkCit4YWRkMjE0IGFkZCA4NzY4Ni44MDE2IDQyMDQ4OTAuNDAgLT4gNDI5MjU3Ny4yMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMTQgY29tcGFyZSA4NzY4Ni44MDE2IDQyMDQ4OTAuNDAgLT4gLTEKK3hkaXYyMTQgZGl2aWRlIDg3Njg2LjgwMTYgNDIwNDg5MC40MCAtPiAwLjAyMDg1MzUyODUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjE0IGRpdmlkZWludCA4NzY4Ni44MDE2IDQyMDQ4OTAuNDAgLT4gMAoreG11bDIxNCBtdWx0aXBseSA4NzY4Ni44MDE2IDQyMDQ4OTAuNDAgLT4gMy42ODcxMzM5MEUrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93MjE0IHBvd2VyIDg3Njg2LjgwMTYgNDIwNDg5MCAtPiA1LjE0ODQ2OTgxRSsyMDc4NDQ5NCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMTQgcmVtYWluZGVyIDg3Njg2LjgwMTYgNDIwNDg5MC40MCAtPiA4NzY4Ni44MDE2Cit4c3ViMjE0IHN1YnRyYWN0IDg3Njg2LjgwMTYgNDIwNDg5MC40MCAtPiAtNDExNzIwMy42MCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMTUgYWRkIDk4NzEyNjcyMS5FLTcyNTc5NDgzNCA0ODc0MTY2LjIzIC0+IDQ4NzQxNjYuMjMgSW5leGFjdCBSb3VuZGVkCit4Y29tMjE1IGNvbXBhcmUgOTg3MTI2NzIxLkUtNzI1Nzk0ODM0IDQ4NzQxNjYuMjMgLT4gLTEKK3hkaXYyMTUgZGl2aWRlIDk4NzEyNjcyMS5FLTcyNTc5NDgzNCA0ODc0MTY2LjIzIC0+IDIuMDI1MjIxNzBFLTcyNTc5NDgzMiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMTUgZGl2aWRlaW50IDk4NzEyNjcyMS5FLTcyNTc5NDgzNCA0ODc0MTY2LjIzIC0+IDAKK3htdWwyMTUgbXVsdGlwbHkgOTg3MTI2NzIxLkUtNzI1Nzk0ODM0IDQ4NzQxNjYuMjMgLT4gNC44MTE0MTk3M0UtNzI1Nzk0ODE5IEluZXhhY3QgUm91bmRlZAoreHBvdzIxNSBwb3dlciA5ODcxMjY3MjEuRS03MjU3OTQ4MzQgNDg3NDE2NiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yMTUgcmVtYWluZGVyIDk4NzEyNjcyMS5FLTcyNTc5NDgzNCA0ODc0MTY2LjIzIC0+IDkuODcxMjY3MjFFLTcyNTc5NDgyNgoreHN1YjIxNSBzdWJ0cmFjdCA5ODcxMjY3MjEuRS03MjU3OTQ4MzQgNDg3NDE2Ni4yMyAtPiAtNDg3NDE2Ni4yMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMTYgYWRkIDcyODE0ODcyNi5FLTY2MTY5NTkzOCAzMjc5OC41MjAyIC0+IDMyNzk4LjUyMDIgSW5leGFjdCBSb3VuZGVkCit4Y29tMjE2IGNvbXBhcmUgNzI4MTQ4NzI2LkUtNjYxNjk1OTM4IDMyNzk4LjUyMDIgLT4gLTEKK3hkaXYyMTYgZGl2aWRlIDcyODE0ODcyNi5FLTY2MTY5NTkzOCAzMjc5OC41MjAyIC0+IDIuMjIwMDY1NzlFLTY2MTY5NTkzNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMTYgZGl2aWRlaW50IDcyODE0ODcyNi5FLTY2MTY5NTkzOCAzMjc5OC41MjAyIC0+IDAKK3htdWwyMTYgbXVsdGlwbHkgNzI4MTQ4NzI2LkUtNjYxNjk1OTM4IDMyNzk4LjUyMDIgLT4gMi4zODgyMjAwN0UtNjYxNjk1OTI1IEluZXhhY3QgUm91bmRlZAoreHBvdzIxNiBwb3dlciA3MjgxNDg3MjYuRS02NjE2OTU5MzggMzI3OTkgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMjE2IHJlbWFpbmRlciA3MjgxNDg3MjYuRS02NjE2OTU5MzggMzI3OTguNTIwMiAtPiA3LjI4MTQ4NzI2RS02NjE2OTU5MzAKK3hzdWIyMTYgc3VidHJhY3QgNzI4MTQ4NzI2LkUtNjYxNjk1OTM4IDMyNzk4LjUyMDIgLT4gLTMyNzk4LjUyMDIgSW5leGFjdCBSb3VuZGVkCit4YWRkMjE3IGFkZCA3NDI4MjE5Ljk3IDY2Ny4zMjY3NjAgLT4gNzQyODg4Ny4zMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMTcgY29tcGFyZSA3NDI4MjE5Ljk3IDY2Ny4zMjY3NjAgLT4gMQoreGRpdjIxNyBkaXZpZGUgNzQyODIxOS45NyA2NjcuMzI2NzYwIC0+IDExMTMxLjMwODQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjE3IGRpdmlkZWludCA3NDI4MjE5Ljk3IDY2Ny4zMjY3NjAgLT4gMTExMzEKK3htdWwyMTcgbXVsdGlwbHkgNzQyODIxOS45NyA2NjcuMzI2NzYwIC0+IDQuOTU3MDQ5OTdFKzkgSW5leGFjdCBSb3VuZGVkCit4cG93MjE3IHBvd2VyIDc0MjgyMTkuOTcgNjY3IC0+IDcuNTg4MDg1MDlFKzQ1ODIgSW5leGFjdCBSb3VuZGVkCit4cmVtMjE3IHJlbWFpbmRlciA3NDI4MjE5Ljk3IDY2Ny4zMjY3NjAgLT4gMjA1LjgwNDQ0MAoreHN1YjIxNyBzdWJ0cmFjdCA3NDI4MjE5Ljk3IDY2Ny4zMjY3NjAgLT4gNzQyNzU1Mi42NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMTggYWRkIC03MjkxLjE5MjEyIDIwOS42NDk2NkUtNTg4NTI2NDc2IC0+IC03MjkxLjE5MjEyIEluZXhhY3QgUm91bmRlZAoreGNvbTIxOCBjb21wYXJlIC03MjkxLjE5MjEyIDIwOS42NDk2NkUtNTg4NTI2NDc2IC0+IC0xCit4ZGl2MjE4IGRpdmlkZSAtNzI5MS4xOTIxMiAyMDkuNjQ5NjZFLTU4ODUyNjQ3NiAtPiAtMy40Nzc3OTgyMUUrNTg4NTI2NDc3IEluZXhhY3QgUm91bmRlZAoreGR2aTIxOCBkaXZpZGVpbnQgLTcyOTEuMTkyMTIgMjA5LjY0OTY2RS01ODg1MjY0NzYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyMTggbXVsdGlwbHkgLTcyOTEuMTkyMTIgMjA5LjY0OTY2RS01ODg1MjY0NzYgLT4gLTEuNTI4NTk1OTVFLTU4ODUyNjQ3MCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMTggcG93ZXIgLTcyOTEuMTkyMTIgMiAtPiA1MzE2MTQ4Mi41IEluZXhhY3QgUm91bmRlZAoreHJlbTIxOCByZW1haW5kZXIgLTcyOTEuMTkyMTIgMjA5LjY0OTY2RS01ODg1MjY0NzYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyMTggc3VidHJhY3QgLTcyOTEuMTkyMTIgMjA5LjY0OTY2RS01ODg1MjY0NzYgLT4gLTcyOTEuMTkyMTIgSW5leGFjdCBSb3VuZGVkCit4YWRkMjE5IGFkZCAtMzU4LjI0NTUwIC00NDQ3Ljc4Njc1RSs2MDE0MDI1MDkgLT4gLTQuNDQ3Nzg2NzVFKzYwMTQwMjUxMiBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMTkgY29tcGFyZSAtMzU4LjI0NTUwIC00NDQ3Ljc4Njc1RSs2MDE0MDI1MDkgLT4gMQoreGRpdjIxOSBkaXZpZGUgLTM1OC4yNDU1MCAtNDQ0Ny43ODY3NUUrNjAxNDAyNTA5IC0+IDguMDU0NDY2NjRFLTYwMTQwMjUxMSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMTkgZGl2aWRlaW50IC0zNTguMjQ1NTAgLTQ0NDcuNzg2NzVFKzYwMTQwMjUwOSAtPiAwCit4bXVsMjE5IG11bHRpcGx5IC0zNTguMjQ1NTAgLTQ0NDcuNzg2NzVFKzYwMTQwMjUwOSAtPiAxLjU5MzM5OTU5RSs2MDE0MDI1MTUgSW5leGFjdCBSb3VuZGVkCit4cG93MjE5IHBvd2VyIC0zNTguMjQ1NTAgLTQgLT4gNi4wNzEyMzQ3NEUtMTEgSW5leGFjdCBSb3VuZGVkCit4cmVtMjE5IHJlbWFpbmRlciAtMzU4LjI0NTUwIC00NDQ3Ljc4Njc1RSs2MDE0MDI1MDkgLT4gLTM1OC4yNDU1MAoreHN1YjIxOSBzdWJ0cmFjdCAtMzU4LjI0NTUwIC00NDQ3Ljc4Njc1RSs2MDE0MDI1MDkgLT4gNC40NDc3ODY3NUUrNjAxNDAyNTEyIEluZXhhY3QgUm91bmRlZAoreGFkZDIyMCBhZGQgMTE4LjYyMTgyNiAtMi43MjAxMDAzOCAtPiAxMTUuOTAxNzI2IEluZXhhY3QgUm91bmRlZAoreGNvbTIyMCBjb21wYXJlIDExOC42MjE4MjYgLTIuNzIwMTAwMzggLT4gMQoreGRpdjIyMCBkaXZpZGUgMTE4LjYyMTgyNiAtMi43MjAxMDAzOCAtPiAtNDMuNjA5MzU2MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMjAgZGl2aWRlaW50IDExOC42MjE4MjYgLTIuNzIwMTAwMzggLT4gLTQzCit4bXVsMjIwIG11bHRpcGx5IDExOC42MjE4MjYgLTIuNzIwMTAwMzggLT4gLTMyMi42NjMyNzQgSW5leGFjdCBSb3VuZGVkCit4cG93MjIwIHBvd2VyIDExOC42MjE4MjYgLTMgLT4gNS45OTEwOTQ3MUUtNyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMjAgcmVtYWluZGVyIDExOC42MjE4MjYgLTIuNzIwMTAwMzggLT4gMS42NTc1MDk2NgoreHN1YjIyMCBzdWJ0cmFjdCAxMTguNjIxODI2IC0yLjcyMDEwMDM4IC0+IDEyMS4zNDE5MjYgSW5leGFjdCBSb3VuZGVkCit4YWRkMjIxIGFkZCA4MDcxOTYxLjk0IC0xMzU1MzM3NDAuRS0xMDI0NTE1NDMgLT4gODA3MTk2MS45NCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMjEgY29tcGFyZSA4MDcxOTYxLjk0IC0xMzU1MzM3NDAuRS0xMDI0NTE1NDMgLT4gMQoreGRpdjIyMSBkaXZpZGUgODA3MTk2MS45NCAtMTM1NTMzNzQwLkUtMTAyNDUxNTQzIC0+IC01Ljk1NTY4NDUwRSsxMDI0NTE1NDEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjIxIGRpdmlkZWludCA4MDcxOTYxLjk0IC0xMzU1MzM3NDAuRS0xMDI0NTE1NDMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyMjEgbXVsdGlwbHkgODA3MTk2MS45NCAtMTM1NTMzNzQwLkUtMTAyNDUxNTQzIC0+IC0xLjA5NDAyMzE5RS0xMDI0NTE1MjggSW5leGFjdCBSb3VuZGVkCit4cG93MjIxIHBvd2VyIDgwNzE5NjEuOTQgLTEgLT4gMS4yMzg4NTYxOUUtNyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMjEgcmVtYWluZGVyIDgwNzE5NjEuOTQgLTEzNTUzMzc0MC5FLTEwMjQ1MTU0MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjIyMSBzdWJ0cmFjdCA4MDcxOTYxLjk0IC0xMzU1MzM3NDAuRS0xMDI0NTE1NDMgLT4gODA3MTk2MS45NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMjIgYWRkIDY0MjYyNTI4LjVFKzgxMjExODY4MiAtODY5Mi45NDQ0N0UtNzMyMTg2OTQ3IC0+IDYuNDI2MjUyODVFKzgxMjExODY4OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMjIgY29tcGFyZSA2NDI2MjUyOC41RSs4MTIxMTg2ODIgLTg2OTIuOTQ0NDdFLTczMjE4Njk0NyAtPiAxCit4ZGl2MjIyIGRpdmlkZSA2NDI2MjUyOC41RSs4MTIxMTg2ODIgLTg2OTIuOTQ0NDdFLTczMjE4Njk0NyAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCit4ZHZpMjIyIGRpdmlkZWludCA2NDI2MjUyOC41RSs4MTIxMTg2ODIgLTg2OTIuOTQ0NDdFLTczMjE4Njk0NyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDIyMiBtdWx0aXBseSA2NDI2MjUyOC41RSs4MTIxMTg2ODIgLTg2OTIuOTQ0NDdFLTczMjE4Njk0NyAtPiAtNS41ODYzMDU5MkUrNzk5MzE3NDYgSW5leGFjdCBSb3VuZGVkCit4cG93MjIyIHBvd2VyIDY0MjYyNTI4LjVFKzgxMjExODY4MiAtOSAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yMjIgcmVtYWluZGVyIDY0MjYyNTI4LjVFKzgxMjExODY4MiAtODY5Mi45NDQ0N0UtNzMyMTg2OTQ3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjIyIHN1YnRyYWN0IDY0MjYyNTI4LjVFKzgxMjExODY4MiAtODY5Mi45NDQ0N0UtNzMyMTg2OTQ3IC0+IDYuNDI2MjUyODVFKzgxMjExODY4OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMjMgYWRkIC0zNTU0NC40MDI5IC01Njc4MzAuMTMwIC0+IC02MDMzNzQuNTMzIEluZXhhY3QgUm91bmRlZAoreGNvbTIyMyBjb21wYXJlIC0zNTU0NC40MDI5IC01Njc4MzAuMTMwIC0+IDEKK3hkaXYyMjMgZGl2aWRlIC0zNTU0NC40MDI5IC01Njc4MzAuMTMwIC0+IDAuMDYyNTk2ODk0OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMjMgZGl2aWRlaW50IC0zNTU0NC40MDI5IC01Njc4MzAuMTMwIC0+IDAKK3htdWwyMjMgbXVsdGlwbHkgLTM1NTQ0LjQwMjkgLTU2NzgzMC4xMzAgLT4gMi4wMTgzMTgyOUUrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93MjIzIHBvd2VyIC0zNTU0NC40MDI5IC01Njc4MzAgLT4gMy43NzA2OTM2OEUtMjU4NDA2NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMjMgcmVtYWluZGVyIC0zNTU0NC40MDI5IC01Njc4MzAuMTMwIC0+IC0zNTU0NC40MDI5Cit4c3ViMjIzIHN1YnRyYWN0IC0zNTU0NC40MDI5IC01Njc4MzAuMTMwIC0+IDUzMjI4NS43MjcgSW5leGFjdCBSb3VuZGVkCit4YWRkMjI0IGFkZCAtNy4xNjUxMzA0N0UrNTkyOTcxMDMgODc3NjcuODIxMSAtPiAtNy4xNjUxMzA0N0UrNTkyOTcxMDMgSW5leGFjdCBSb3VuZGVkCit4Y29tMjI0IGNvbXBhcmUgLTcuMTY1MTMwNDdFKzU5Mjk3MTAzIDg3NzY3LjgyMTEgLT4gLTEKK3hkaXYyMjQgZGl2aWRlIC03LjE2NTEzMDQ3RSs1OTI5NzEwMyA4Nzc2Ny44MjExIC0+IC04LjE2MzczMjg4RSs1OTI5NzA5OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMjQgZGl2aWRlaW50IC03LjE2NTEzMDQ3RSs1OTI5NzEwMyA4Nzc2Ny44MjExIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjI0IG11bHRpcGx5IC03LjE2NTEzMDQ3RSs1OTI5NzEwMyA4Nzc2Ny44MjExIC0+IC02LjI4ODY3ODg5RSs1OTI5NzEwOCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMjQgcG93ZXIgLTcuMTY1MTMwNDdFKzU5Mjk3MTAzIDg3NzY4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTIyNCByZW1haW5kZXIgLTcuMTY1MTMwNDdFKzU5Mjk3MTAzIDg3NzY3LjgyMTEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyMjQgc3VidHJhY3QgLTcuMTY1MTMwNDdFKzU5Mjk3MTAzIDg3NzY3LjgyMTEgLT4gLTcuMTY1MTMwNDdFKzU5Mjk3MTAzIEluZXhhY3QgUm91bmRlZAoreGFkZDIyNSBhZGQgLTUwOS40ODMzOTUgLTE0NzI0MjkxNS4gLT4gLTE0NzI0MzQyNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMjUgY29tcGFyZSAtNTA5LjQ4MzM5NSAtMTQ3MjQyOTE1LiAtPiAxCit4ZGl2MjI1IGRpdmlkZSAtNTA5LjQ4MzM5NSAtMTQ3MjQyOTE1LiAtPiAwLjAwMDAwMzQ2MDE1NTU5IEluZXhhY3QgUm91bmRlZAoreGR2aTIyNSBkaXZpZGVpbnQgLTUwOS40ODMzOTUgLTE0NzI0MjkxNS4gLT4gMAoreG11bDIyNSBtdWx0aXBseSAtNTA5LjQ4MzM5NSAtMTQ3MjQyOTE1LiAtPiA3LjUwMTc4MjAyRSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMjUgcG93ZXIgLTUwOS40ODMzOTUgLTE0NzI0MjkxNSAtPiAtMy4xMDc2MDUxOUUtMzk4NjA1NzE4IEluZXhhY3QgUm91bmRlZAoreHJlbTIyNSByZW1haW5kZXIgLTUwOS40ODMzOTUgLTE0NzI0MjkxNS4gLT4gLTUwOS40ODMzOTUKK3hzdWIyMjUgc3VidHJhY3QgLTUwOS40ODMzOTUgLTE0NzI0MjkxNS4gLT4gMTQ3MjQyNDA2IEluZXhhY3QgUm91bmRlZAoreGFkZDIyNiBhZGQgLTc5MTkwNDcuMjhFKzk1NjA0MTYyOSAtMzY3NjY3MzI5IC0+IC03LjkxOTA0NzI4RSs5NTYwNDE2MzUgSW5leGFjdCBSb3VuZGVkCit4Y29tMjI2IGNvbXBhcmUgLTc5MTkwNDcuMjhFKzk1NjA0MTYyOSAtMzY3NjY3MzI5IC0+IC0xCit4ZGl2MjI2IGRpdmlkZSAtNzkxOTA0Ny4yOEUrOTU2MDQxNjI5IC0zNjc2NjczMjkgLT4gMi4xNTM4NjIxMUUrOTU2MDQxNjI3IEluZXhhY3QgUm91bmRlZAoreGR2aTIyNiBkaXZpZGVpbnQgLTc5MTkwNDcuMjhFKzk1NjA0MTYyOSAtMzY3NjY3MzI5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjI2IG11bHRpcGx5IC03OTE5MDQ3LjI4RSs5NTYwNDE2MjkgLTM2NzY2NzMyOSAtPiAyLjkxMTU3NDk2RSs5NTYwNDE2NDQgSW5leGFjdCBSb3VuZGVkCit4cG93MjI2IHBvd2VyIC03OTE5MDQ3LjI4RSs5NTYwNDE2MjkgLTM2NzY2NzMyOSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMjI2IHJlbWFpbmRlciAtNzkxOTA0Ny4yOEUrOTU2MDQxNjI5IC0zNjc2NjczMjkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyMjYgc3VidHJhY3QgLTc5MTkwNDcuMjhFKzk1NjA0MTYyOSAtMzY3NjY3MzI5IC0+IC03LjkxOTA0NzI4RSs5NTYwNDE2MzUgSW5leGFjdCBSb3VuZGVkCit4YWRkMjI3IGFkZCA4OTU2MTI2MzAuIC0zNi40MTA0MDQwIC0+IDg5NTYxMjU5NCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMjcgY29tcGFyZSA4OTU2MTI2MzAuIC0zNi40MTA0MDQwIC0+IDEKK3hkaXYyMjcgZGl2aWRlIDg5NTYxMjYzMC4gLTM2LjQxMDQwNDAgLT4gLTI0NTk3NzEyLjAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjI3IGRpdmlkZWludCA4OTU2MTI2MzAuIC0zNi40MTA0MDQwIC0+IC0yNDU5NzcxMQoreG11bDIyNyBtdWx0aXBseSA4OTU2MTI2MzAuIC0zNi40MTA0MDQwIC0+IC0zLjI2MDk2MTc3RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMjcgcG93ZXIgODk1NjEyNjMwLiAtMzYgLT4gNS4yOTI2NDEzMEUtMzIzIEluZXhhY3QgUm91bmRlZAoreHJlbTIyNyByZW1haW5kZXIgODk1NjEyNjMwLiAtMzYuNDEwNDA0MCAtPiAzNS4wMTQ3NTYwCit4c3ViMjI3IHN1YnRyYWN0IDg5NTYxMjYzMC4gLTM2LjQxMDQwNDAgLT4gODk1NjEyNjY2IEluZXhhY3QgUm91bmRlZAoreGFkZDIyOCBhZGQgMjU0NTUuNDk3MyAyOTU1LjAwMDA2RSs1MjgxOTYyMTggLT4gMi45NTUwMDAwNkUrNTI4MTk2MjIxIEluZXhhY3QgUm91bmRlZAoreGNvbTIyOCBjb21wYXJlIDI1NDU1LjQ5NzMgMjk1NS4wMDAwNkUrNTI4MTk2MjE4IC0+IC0xCit4ZGl2MjI4IGRpdmlkZSAyNTQ1NS40OTczIDI5NTUuMDAwMDZFKzUyODE5NjIxOCAtPiA4LjYxNDM4MTMxRS01MjgxOTYyMTggSW5leGFjdCBSb3VuZGVkCit4ZHZpMjI4IGRpdmlkZWludCAyNTQ1NS40OTczIDI5NTUuMDAwMDZFKzUyODE5NjIxOCAtPiAwCit4bXVsMjI4IG11bHRpcGx5IDI1NDU1LjQ5NzMgMjk1NS4wMDAwNkUrNTI4MTk2MjE4IC0+IDcuNTIyMDk5NjBFKzUyODE5NjIyNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMjggcG93ZXIgMjU0NTUuNDk3MyAzIC0+IDEuNjQ5NDcxMjhFKzEzIEluZXhhY3QgUm91bmRlZAoreHJlbTIyOCByZW1haW5kZXIgMjU0NTUuNDk3MyAyOTU1LjAwMDA2RSs1MjgxOTYyMTggLT4gMjU0NTUuNDk3MworeHN1YjIyOCBzdWJ0cmFjdCAyNTQ1NS40OTczIDI5NTUuMDAwMDZFKzUyODE5NjIxOCAtPiAtMi45NTUwMDAwNkUrNTI4MTk2MjIxIEluZXhhY3QgUm91bmRlZAoreGFkZDIyOSBhZGQgLTExMi4yOTQxNDRFKzI3MzQxNDE3MiAtNzE0NDgwMDcuNyAtPiAtMS4xMjI5NDE0NEUrMjczNDE0MTc0IEluZXhhY3QgUm91bmRlZAoreGNvbTIyOSBjb21wYXJlIC0xMTIuMjk0MTQ0RSsyNzM0MTQxNzIgLTcxNDQ4MDA3LjcgLT4gLTEKK3hkaXYyMjkgZGl2aWRlIC0xMTIuMjk0MTQ0RSsyNzM0MTQxNzIgLTcxNDQ4MDA3LjcgLT4gMS41NzE2OTAzNUUrMjczNDE0MTY2IEluZXhhY3QgUm91bmRlZAoreGR2aTIyOSBkaXZpZGVpbnQgLTExMi4yOTQxNDRFKzI3MzQxNDE3MiAtNzE0NDgwMDcuNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDIyOSBtdWx0aXBseSAtMTEyLjI5NDE0NEUrMjczNDE0MTcyIC03MTQ0ODAwNy43IC0+IDguMDIzMTkyODdFKzI3MzQxNDE4MSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMjkgcG93ZXIgLTExMi4yOTQxNDRFKzI3MzQxNDE3MiAtNzE0NDgwMDggLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMjI5IHJlbWFpbmRlciAtMTEyLjI5NDE0NEUrMjczNDE0MTcyIC03MTQ0ODAwNy43IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjI5IHN1YnRyYWN0IC0xMTIuMjk0MTQ0RSsyNzM0MTQxNzIgLTcxNDQ4MDA3LjcgLT4gLTEuMTIyOTQxNDRFKzI3MzQxNDE3NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMzAgYWRkIDYyODcxLjIyMDIgMjQ4NC4wMzgyRSsyMTE2NjI1NTcgLT4gMi40ODQwMzgyMEUrMjExNjYyNTYwIEluZXhhY3QgUm91bmRlZAoreGNvbTIzMCBjb21wYXJlIDYyODcxLjIyMDIgMjQ4NC4wMzgyRSsyMTE2NjI1NTcgLT4gLTEKK3hkaXYyMzAgZGl2aWRlIDYyODcxLjIyMDIgMjQ4NC4wMzgyRSsyMTE2NjI1NTcgLT4gMi41MzEwMDg1OUUtMjExNjYyNTU2IEluZXhhY3QgUm91bmRlZAoreGR2aTIzMCBkaXZpZGVpbnQgNjI4NzEuMjIwMiAyNDg0LjAzODJFKzIxMTY2MjU1NyAtPiAwCit4bXVsMjMwIG11bHRpcGx5IDYyODcxLjIyMDIgMjQ4NC4wMzgyRSsyMTE2NjI1NTcgLT4gMS41NjE3NDUxM0UrMjExNjYyNTY1IEluZXhhY3QgUm91bmRlZAoreHBvdzIzMCBwb3dlciA2Mjg3MS4yMjAyIDIgLT4gMy45NTI3OTAzM0UrOSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMzAgcmVtYWluZGVyIDYyODcxLjIyMDIgMjQ4NC4wMzgyRSsyMTE2NjI1NTcgLT4gNjI4NzEuMjIwMgoreHN1YjIzMCBzdWJ0cmFjdCA2Mjg3MS4yMjAyIDI0ODQuMDM4MkUrMjExNjYyNTU3IC0+IC0yLjQ4NDAzODIwRSsyMTE2NjI1NjAgSW5leGFjdCBSb3VuZGVkCit4YWRkMjMxIGFkZCA3MS45MjgxNTc1IC05ODEwMDEyLjUgLT4gLTk4MDk5NDAuNTcgSW5leGFjdCBSb3VuZGVkCit4Y29tMjMxIGNvbXBhcmUgNzEuOTI4MTU3NSAtOTgxMDAxMi41IC0+IDEKK3hkaXYyMzEgZGl2aWRlIDcxLjkyODE1NzUgLTk4MTAwMTIuNSAtPiAtMC4wMDAwMDczMzIxMTY4MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMzEgZGl2aWRlaW50IDcxLjkyODE1NzUgLTk4MTAwMTIuNSAtPiAtMAoreG11bDIzMSBtdWx0aXBseSA3MS45MjgxNTc1IC05ODEwMDEyLjUgLT4gLTcwNTYxNjEyNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMzEgcG93ZXIgNzEuOTI4MTU3NSAtOTgxMDAxMyAtPiAyLjAwMzYzNzk4RS0xODIxNjIwMyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMzEgcmVtYWluZGVyIDcxLjkyODE1NzUgLTk4MTAwMTIuNSAtPiA3MS45MjgxNTc1Cit4c3ViMjMxIHN1YnRyYWN0IDcxLjkyODE1NzUgLTk4MTAwMTIuNSAtPiA5ODEwMDg0LjQzIEluZXhhY3QgUm91bmRlZAoreGFkZDIzMiBhZGQgLTYzODgwMjIuIC04OC4wNDI5NjcgLT4gLTYzODgxMTAuMDQgSW5leGFjdCBSb3VuZGVkCit4Y29tMjMyIGNvbXBhcmUgLTYzODgwMjIuIC04OC4wNDI5NjcgLT4gLTEKK3hkaXYyMzIgZGl2aWRlIC02Mzg4MDIyLiAtODguMDQyOTY3IC0+IDcyNTU1LjczMjkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjMyIGRpdmlkZWludCAtNjM4ODAyMi4gLTg4LjA0Mjk2NyAtPiA3MjU1NQoreG11bDIzMiBtdWx0aXBseSAtNjM4ODAyMi4gLTg4LjA0Mjk2NyAtPiA1NjI0MjA0MTAgSW5leGFjdCBSb3VuZGVkCit4cG93MjMyIHBvd2VyIC02Mzg4MDIyLiAtODggLT4gMS4zNDIwMTIzOEUtNTk5IEluZXhhY3QgUm91bmRlZAoreHJlbTIzMiByZW1haW5kZXIgLTYzODgwMjIuIC04OC4wNDI5NjcgLT4gLTY0LjUyOTMxNQoreHN1YjIzMiBzdWJ0cmFjdCAtNjM4ODAyMi4gLTg4LjA0Mjk2NyAtPiAtNjM4NzkzMy45NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMzMgYWRkIDM3MjU2NzQ0NS4gOTYuMDk5MjE0MSAtPiAzNzI1Njc1NDEgSW5leGFjdCBSb3VuZGVkCit4Y29tMjMzIGNvbXBhcmUgMzcyNTY3NDQ1LiA5Ni4wOTkyMTQxIC0+IDEKK3hkaXYyMzMgZGl2aWRlIDM3MjU2NzQ0NS4gOTYuMDk5MjE0MSAtPiAzODc2OTA0LjE4IEluZXhhY3QgUm91bmRlZAoreGR2aTIzMyBkaXZpZGVpbnQgMzcyNTY3NDQ1LiA5Ni4wOTkyMTQxIC0+IDM4NzY5MDQKK3htdWwyMzMgbXVsdGlwbHkgMzcyNTY3NDQ1LiA5Ni4wOTkyMTQxIC0+IDMuNTgwMzQzODdFKzEwIEluZXhhY3QgUm91bmRlZAoreHBvdzIzMyBwb3dlciAzNzI1Njc0NDUuIDk2IC0+IDYuODQ5Njg3MTVFKzgyMiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMzMgcmVtYWluZGVyIDM3MjU2NzQ0NS4gOTYuMDk5MjE0MSAtPiAxNy40NTg4NTM2Cit4c3ViMjMzIHN1YnRyYWN0IDM3MjU2NzQ0NS4gOTYuMDk5MjE0MSAtPiAzNzI1NjczNDkgSW5leGFjdCBSb3VuZGVkCit4YWRkMjM0IGFkZCA4MDIuMTU2NTE3IC0xNzQ0MDkzMTAuRS0yNTUzMzgwMjAgLT4gODAyLjE1NjUxNyBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMzQgY29tcGFyZSA4MDIuMTU2NTE3IC0xNzQ0MDkzMTAuRS0yNTUzMzgwMjAgLT4gMQoreGRpdjIzNCBkaXZpZGUgODAyLjE1NjUxNyAtMTc0NDA5MzEwLkUtMjU1MzM4MDIwIC0+IC00LjU5OTI3NTc5RSsyNTUzMzgwMTQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjM0IGRpdmlkZWludCA4MDIuMTU2NTE3IC0xNzQ0MDkzMTAuRS0yNTUzMzgwMjAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyMzQgbXVsdGlwbHkgODAyLjE1NjUxNyAtMTc0NDA5MzEwLkUtMjU1MzM4MDIwIC0+IC0xLjM5OTAzNTY1RS0yNTUzMzgwMDkgSW5leGFjdCBSb3VuZGVkCit4cG93MjM0IHBvd2VyIDgwMi4xNTY1MTcgLTIgLT4gMC4wMDAwMDE1NTQxMTAwNSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMzQgcmVtYWluZGVyIDgwMi4xNTY1MTcgLTE3NDQwOTMxMC5FLTI1NTMzODAyMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjIzNCBzdWJ0cmFjdCA4MDIuMTU2NTE3IC0xNzQ0MDkzMTAuRS0yNTUzMzgwMjAgLT4gODAyLjE1NjUxNyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMzUgYWRkIC0zLjY1MjA3NTQxIDc0NTAxOTgyLjAgLT4gNzQ1MDE5NzguMyBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMzUgY29tcGFyZSAtMy42NTIwNzU0MSA3NDUwMTk4Mi4wIC0+IC0xCit4ZGl2MjM1IGRpdmlkZSAtMy42NTIwNzU0MSA3NDUwMTk4Mi4wIC0+IC00LjkwMTk4NDIzRS04IEluZXhhY3QgUm91bmRlZAoreGR2aTIzNSBkaXZpZGVpbnQgLTMuNjUyMDc1NDEgNzQ1MDE5ODIuMCAtPiAtMAoreG11bDIzNSBtdWx0aXBseSAtMy42NTIwNzU0MSA3NDUwMTk4Mi4wIC0+IC0yNzIwODY4NTYgSW5leGFjdCBSb3VuZGVkCit4cG93MjM1IHBvd2VyIC0zLjY1MjA3NTQxIDc0NTAxOTgyIC0+IDIuMTAzMzk0NTJFKzQxOTEwMzI1IEluZXhhY3QgUm91bmRlZAoreHJlbTIzNSByZW1haW5kZXIgLTMuNjUyMDc1NDEgNzQ1MDE5ODIuMCAtPiAtMy42NTIwNzU0MQoreHN1YjIzNSBzdWJ0cmFjdCAtMy42NTIwNzU0MSA3NDUwMTk4Mi4wIC0+IC03NDUwMTk4NS43IEluZXhhY3QgUm91bmRlZAoreGFkZDIzNiBhZGQgLTUyOTcuNzY5ODEgLTg1OS43MTk0MDQgLT4gLTYxNTcuNDg5MjEgSW5leGFjdCBSb3VuZGVkCit4Y29tMjM2IGNvbXBhcmUgLTUyOTcuNzY5ODEgLTg1OS43MTk0MDQgLT4gLTEKK3hkaXYyMzYgZGl2aWRlIC01Mjk3Ljc2OTgxIC04NTkuNzE5NDA0IC0+IDYuMTYyMjA4MDIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjM2IGRpdmlkZWludCAtNTI5Ny43Njk4MSAtODU5LjcxOTQwNCAtPiA2Cit4bXVsMjM2IG11bHRpcGx5IC01Mjk3Ljc2OTgxIC04NTkuNzE5NDA0IC0+IDQ1NTQ1OTUuNTAgSW5leGFjdCBSb3VuZGVkCit4cG93MjM2IHBvd2VyIC01Mjk3Ljc2OTgxIC04NjAgLT4gMS45MDUyMzEwOEUtMzIwMyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMzYgcmVtYWluZGVyIC01Mjk3Ljc2OTgxIC04NTkuNzE5NDA0IC0+IC0xMzkuNDUzMzg2Cit4c3ViMjM2IHN1YnRyYWN0IC01Mjk3Ljc2OTgxIC04NTkuNzE5NDA0IC0+IC00NDM4LjA1MDQxIEluZXhhY3QgUm91bmRlZAoreGFkZDIzNyBhZGQgLTY4NDE3Mi41OTIgNzY2LjQ0ODU5N0UrMjg4MzYxOTU5IC0+IDcuNjY0NDg1OTdFKzI4ODM2MTk2MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMzcgY29tcGFyZSAtNjg0MTcyLjU5MiA3NjYuNDQ4NTk3RSsyODgzNjE5NTkgLT4gLTEKK3hkaXYyMzcgZGl2aWRlIC02ODQxNzIuNTkyIDc2Ni40NDg1OTdFKzI4ODM2MTk1OSAtPiAtOC45MjY1MjkzOEUtMjg4MzYxOTU3IEluZXhhY3QgUm91bmRlZAoreGR2aTIzNyBkaXZpZGVpbnQgLTY4NDE3Mi41OTIgNzY2LjQ0ODU5N0UrMjg4MzYxOTU5IC0+IC0wCit4bXVsMjM3IG11bHRpcGx5IC02ODQxNzIuNTkyIDc2Ni40NDg1OTdFKzI4ODM2MTk1OSAtPiAtNS4yNDM4MzEyM0UrMjg4MzYxOTY3IEluZXhhY3QgUm91bmRlZAoreHBvdzIzNyBwb3dlciAtNjg0MTcyLjU5MiA4IC0+IDQuODAwOTMwMDVFKzQ2IEluZXhhY3QgUm91bmRlZAoreHJlbTIzNyByZW1haW5kZXIgLTY4NDE3Mi41OTIgNzY2LjQ0ODU5N0UrMjg4MzYxOTU5IC0+IC02ODQxNzIuNTkyCit4c3ViMjM3IHN1YnRyYWN0IC02ODQxNzIuNTkyIDc2Ni40NDg1OTdFKzI4ODM2MTk1OSAtPiAtNy42NjQ0ODU5N0UrMjg4MzYxOTYxIEluZXhhY3QgUm91bmRlZAoreGFkZDIzOCBhZGQgNjI2OTE5LjIxOSA1NzQ2OS44NzI3RSsxMzE4ODYxMCAtPiA1Ljc0Njk4NzI3RSsxMzE4ODYxNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yMzggY29tcGFyZSA2MjY5MTkuMjE5IDU3NDY5Ljg3MjdFKzEzMTg4NjEwIC0+IC0xCit4ZGl2MjM4IGRpdmlkZSA2MjY5MTkuMjE5IDU3NDY5Ljg3MjdFKzEzMTg4NjEwIC0+IDEuMDkwODY1ODZFLTEzMTg4NjA5IEluZXhhY3QgUm91bmRlZAoreGR2aTIzOCBkaXZpZGVpbnQgNjI2OTE5LjIxOSA1NzQ2OS44NzI3RSsxMzE4ODYxMCAtPiAwCit4bXVsMjM4IG11bHRpcGx5IDYyNjkxOS4yMTkgNTc0NjkuODcyN0UrMTMxODg2MTAgLT4gMy42MDI4OTY3N0UrMTMxODg2MjAgSW5leGFjdCBSb3VuZGVkCit4cG93MjM4IHBvd2VyIDYyNjkxOS4yMTkgNiAtPiA2LjA3MTEyOTU5RSszNCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yMzggcmVtYWluZGVyIDYyNjkxOS4yMTkgNTc0NjkuODcyN0UrMTMxODg2MTAgLT4gNjI2OTE5LjIxOQoreHN1YjIzOCBzdWJ0cmFjdCA2MjY5MTkuMjE5IDU3NDY5Ljg3MjdFKzEzMTg4NjEwIC0+IC01Ljc0Njk4NzI3RSsxMzE4ODYxNCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyMzkgYWRkIC03NzQ4MC41ODQwIDg5MzI2NS41OTRFKzI4Nzk4MjU1MiAtPiA4LjkzMjY1NTk0RSsyODc5ODI1NTcgSW5leGFjdCBSb3VuZGVkCit4Y29tMjM5IGNvbXBhcmUgLTc3NDgwLjU4NDAgODkzMjY1LjU5NEUrMjg3OTgyNTUyIC0+IC0xCit4ZGl2MjM5IGRpdmlkZSAtNzc0ODAuNTg0MCA4OTMyNjUuNTk0RSsyODc5ODI1NTIgLT4gLTguNjczODU3NDJFLTI4Nzk4MjU1NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyMzkgZGl2aWRlaW50IC03NzQ4MC41ODQwIDg5MzI2NS41OTRFKzI4Nzk4MjU1MiAtPiAtMAoreG11bDIzOSBtdWx0aXBseSAtNzc0ODAuNTg0MCA4OTMyNjUuNTk0RSsyODc5ODI1NTIgLT4gLTYuOTIxMDczOTlFKzI4Nzk4MjU2MiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyMzkgcG93ZXIgLTc3NDgwLjU4NDAgOSAtPiAtMS4wMDYzMTk2OUUrNDQgSW5leGFjdCBSb3VuZGVkCit4cmVtMjM5IHJlbWFpbmRlciAtNzc0ODAuNTg0MCA4OTMyNjUuNTk0RSsyODc5ODI1NTIgLT4gLTc3NDgwLjU4NDAKK3hzdWIyMzkgc3VidHJhY3QgLTc3NDgwLjU4NDAgODkzMjY1LjU5NEUrMjg3OTgyNTUyIC0+IC04LjkzMjY1NTk0RSsyODc5ODI1NTcgSW5leGFjdCBSb3VuZGVkCit4YWRkMjQwIGFkZCAtNzE3NzYyMC4yOSA3Nzg2MzQzLjgzIC0+IDYwODcyMy41NAoreGNvbTI0MCBjb21wYXJlIC03MTc3NjIwLjI5IDc3ODYzNDMuODMgLT4gLTEKK3hkaXYyNDAgZGl2aWRlIC03MTc3NjIwLjI5IDc3ODYzNDMuODMgLT4gLTAuOTIxODIxNjQ3IEluZXhhY3QgUm91bmRlZAoreGR2aTI0MCBkaXZpZGVpbnQgLTcxNzc2MjAuMjkgNzc4NjM0My44MyAtPiAtMAoreG11bDI0MCBtdWx0aXBseSAtNzE3NzYyMC4yOSA3Nzg2MzQzLjgzIC0+IC01LjU4ODc0MTk1RSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNDAgcG93ZXIgLTcxNzc2MjAuMjkgNzc4NjM0NCAtPiAyLjk2MDM3MDc0RSs1MzM4MzAyMiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNDAgcmVtYWluZGVyIC03MTc3NjIwLjI5IDc3ODYzNDMuODMgLT4gLTcxNzc2MjAuMjkKK3hzdWIyNDAgc3VidHJhY3QgLTcxNzc2MjAuMjkgNzc4NjM0My44MyAtPiAtMTQ5NjM5NjQuMSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNDEgYWRkIDkuNjIyNDEzMCA0LjUwMzU1MTEyIC0+IDE0LjEyNTk2NDEgSW5leGFjdCBSb3VuZGVkCit4Y29tMjQxIGNvbXBhcmUgOS42MjI0MTMwIDQuNTAzNTUxMTIgLT4gMQoreGRpdjI0MSBkaXZpZGUgOS42MjI0MTMwIDQuNTAzNTUxMTIgLT4gMi4xMzY2Mjc5MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNDEgZGl2aWRlaW50IDkuNjIyNDEzMCA0LjUwMzU1MTEyIC0+IDIKK3htdWwyNDEgbXVsdGlwbHkgOS42MjI0MTMwIDQuNTAzNTUxMTIgLT4gNDMuMzM1MDI4OCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNDEgcG93ZXIgOS42MjI0MTMwIDUgLT4gODI0OTMuNTQ0OCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNDEgcmVtYWluZGVyIDkuNjIyNDEzMCA0LjUwMzU1MTEyIC0+IDAuNjE1MzEwNzYKK3hzdWIyNDEgc3VidHJhY3QgOS42MjI0MTMwIDQuNTAzNTUxMTIgLT4gNS4xMTg4NjE4OAoreGFkZDI0MiBhZGQgLTY2LjYzMzczNDdFLTU5NzQxMDA4NiAtODE4ODEyODg1IC0+IC04MTg4MTI4ODUgSW5leGFjdCBSb3VuZGVkCit4Y29tMjQyIGNvbXBhcmUgLTY2LjYzMzczNDdFLTU5NzQxMDA4NiAtODE4ODEyODg1IC0+IDEKK3hkaXYyNDIgZGl2aWRlIC02Ni42MzM3MzQ3RS01OTc0MTAwODYgLTgxODgxMjg4NSAtPiA4LjEzNzg0NjM4RS01OTc0MTAwOTQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjQyIGRpdmlkZWludCAtNjYuNjMzNzM0N0UtNTk3NDEwMDg2IC04MTg4MTI4ODUgLT4gMAoreG11bDI0MiBtdWx0aXBseSAtNjYuNjMzNzM0N0UtNTk3NDEwMDg2IC04MTg4MTI4ODUgLT4gNS40NTYwNTYwNUUtNTk3NDEwMDc2IEluZXhhY3QgUm91bmRlZAoreHBvdzI0MiBwb3dlciAtNjYuNjMzNzM0N0UtNTk3NDEwMDg2IC04MTg4MTI4ODUgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTI0MiByZW1haW5kZXIgLTY2LjYzMzczNDdFLTU5NzQxMDA4NiAtODE4ODEyODg1IC0+IC02LjY2MzM3MzQ3RS01OTc0MTAwODUKK3hzdWIyNDIgc3VidHJhY3QgLTY2LjYzMzczNDdFLTU5NzQxMDA4NiAtODE4ODEyODg1IC0+IDgxODgxMjg4NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNDMgYWRkIDY1NTg3NTUzLjcgNjAwNTc0LjczNiAtPiA2NjE4ODEyOC40IEluZXhhY3QgUm91bmRlZAoreGNvbTI0MyBjb21wYXJlIDY1NTg3NTUzLjcgNjAwNTc0LjczNiAtPiAxCit4ZGl2MjQzIGRpdmlkZSA2NTU4NzU1My43IDYwMDU3NC43MzYgLT4gMTA5LjIwNzk4MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNDMgZGl2aWRlaW50IDY1NTg3NTUzLjcgNjAwNTc0LjczNiAtPiAxMDkKK3htdWwyNDMgbXVsdGlwbHkgNjU1ODc1NTMuNyA2MDA1NzQuNzM2IC0+IDMuOTM5MDIyNzdFKzEzIEluZXhhY3QgUm91bmRlZAoreHBvdzI0MyBwb3dlciA2NTU4NzU1My43IDYwMDU3NSAtPiAzLjQwNDA0ODE3RSs0Njk0NTg3IEluZXhhY3QgUm91bmRlZAoreHJlbTI0MyByZW1haW5kZXIgNjU1ODc1NTMuNyA2MDA1NzQuNzM2IC0+IDEyNDkwNy40NzYKK3hzdWIyNDMgc3VidHJhY3QgNjU1ODc1NTMuNyA2MDA1NzQuNzM2IC0+IDY0OTg2OTc5LjAgSW5leGFjdCBSb3VuZGVkCit4YWRkMjQ0IGFkZCAtMzI0MDEuOTM5IC01ODUyMDAyMTcuIC0+IC01ODUyMzI2MTkgSW5leGFjdCBSb3VuZGVkCit4Y29tMjQ0IGNvbXBhcmUgLTMyNDAxLjkzOSAtNTg1MjAwMjE3LiAtPiAxCit4ZGl2MjQ0IGRpdmlkZSAtMzI0MDEuOTM5IC01ODUyMDAyMTcuIC0+IDAuMDAwMDU1MzY4OTc5OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNDQgZGl2aWRlaW50IC0zMjQwMS45MzkgLTU4NTIwMDIxNy4gLT4gMAoreG11bDI0NCBtdWx0aXBseSAtMzI0MDEuOTM5IC01ODUyMDAyMTcuIC0+IDEuODk2MTYyMTdFKzEzIEluZXhhY3QgUm91bmRlZAoreHBvdzI0NCBwb3dlciAtMzI0MDEuOTM5IC01ODUyMDAyMTcgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTI0NCByZW1haW5kZXIgLTMyNDAxLjkzOSAtNTg1MjAwMjE3LiAtPiAtMzI0MDEuOTM5Cit4c3ViMjQ0IHN1YnRyYWN0IC0zMjQwMS45MzkgLTU4NTIwMDIxNy4gLT4gNTg1MTY3ODE1IEluZXhhY3QgUm91bmRlZAoreGFkZDI0NSBhZGQgNjk1NzMuOTg4IC05Ljc3MDAzNDY1RSs3NDA5MzM2NjggLT4gLTkuNzcwMDM0NjVFKzc0MDkzMzY2OCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNDUgY29tcGFyZSA2OTU3My45ODggLTkuNzcwMDM0NjVFKzc0MDkzMzY2OCAtPiAxCit4ZGl2MjQ1IGRpdmlkZSA2OTU3My45ODggLTkuNzcwMDM0NjVFKzc0MDkzMzY2OCAtPiAtNy4xMjExNjA4MkUtNzQwOTMzNjY1IEluZXhhY3QgUm91bmRlZAoreGR2aTI0NSBkaXZpZGVpbnQgNjk1NzMuOTg4IC05Ljc3MDAzNDY1RSs3NDA5MzM2NjggLT4gLTAKK3htdWwyNDUgbXVsdGlwbHkgNjk1NzMuOTg4IC05Ljc3MDAzNDY1RSs3NDA5MzM2NjggLT4gLTYuNzk3NDAyNzNFKzc0MDkzMzY3MyBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNDUgcG93ZXIgNjk1NzMuOTg4IC0xMCAtPiAzLjc2Mjk3MjI5RS00OSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNDUgcmVtYWluZGVyIDY5NTczLjk4OCAtOS43NzAwMzQ2NUUrNzQwOTMzNjY4IC0+IDY5NTczLjk4OAoreHN1YjI0NSBzdWJ0cmFjdCA2OTU3My45ODggLTkuNzcwMDM0NjVFKzc0MDkzMzY2OCAtPiA5Ljc3MDAzNDY1RSs3NDA5MzM2NjggSW5leGFjdCBSb3VuZGVkCit4YWRkMjQ2IGFkZCAyMzYyLjA2MjUxIC00MzMxNDk1NDYuRS0xNTI2NDM2MjkgLT4gMjM2Mi4wNjI1MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNDYgY29tcGFyZSAyMzYyLjA2MjUxIC00MzMxNDk1NDYuRS0xNTI2NDM2MjkgLT4gMQoreGRpdjI0NiBkaXZpZGUgMjM2Mi4wNjI1MSAtNDMzMTQ5NTQ2LkUtMTUyNjQzNjI5IC0+IC01LjQ1MzIyNjMzRSsxNTI2NDM2MjMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjQ2IGRpdmlkZWludCAyMzYyLjA2MjUxIC00MzMxNDk1NDYuRS0xNTI2NDM2MjkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyNDYgbXVsdGlwbHkgMjM2Mi4wNjI1MSAtNDMzMTQ5NTQ2LkUtMTUyNjQzNjI5IC0+IC0xLjAyMzEyNjMwRS0xNTI2NDM2MTcgSW5leGFjdCBSb3VuZGVkCit4cG93MjQ2IHBvd2VyIDIzNjIuMDYyNTEgLTQgLT4gMy4yMTI0MzU3N0UtMTQgSW5leGFjdCBSb3VuZGVkCit4cmVtMjQ2IHJlbWFpbmRlciAyMzYyLjA2MjUxIC00MzMxNDk1NDYuRS0xNTI2NDM2MjkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyNDYgc3VidHJhY3QgMjM2Mi4wNjI1MSAtNDMzMTQ5NTQ2LkUtMTUyNjQzNjI5IC0+IDIzNjIuMDYyNTEgSW5leGFjdCBSb3VuZGVkCit4YWRkMjQ3IGFkZCAtNjE1LjIzNDg4RSsyNDk5NTM0NTIgLTIxNDM3NDgzLjcgLT4gLTYuMTUyMzQ4ODBFKzI0OTk1MzQ1NCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNDcgY29tcGFyZSAtNjE1LjIzNDg4RSsyNDk5NTM0NTIgLTIxNDM3NDgzLjcgLT4gLTEKK3hkaXYyNDcgZGl2aWRlIC02MTUuMjM0ODhFKzI0OTk1MzQ1MiAtMjE0Mzc0ODMuNyAtPiAyLjg2OTkwMjUwRSsyNDk5NTM0NDcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjQ3IGRpdmlkZWludCAtNjE1LjIzNDg4RSsyNDk5NTM0NTIgLTIxNDM3NDgzLjcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyNDcgbXVsdGlwbHkgLTYxNS4yMzQ4OEUrMjQ5OTUzNDUyIC0yMTQzNzQ4My43IC0+IDEuMzE4OTA4NzdFKzI0OTk1MzQ2MiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNDcgcG93ZXIgLTYxNS4yMzQ4OEUrMjQ5OTUzNDUyIC0yMTQzNzQ4NCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yNDcgcmVtYWluZGVyIC02MTUuMjM0ODhFKzI0OTk1MzQ1MiAtMjE0Mzc0ODMuNyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjI0NyBzdWJ0cmFjdCAtNjE1LjIzNDg4RSsyNDk5NTM0NTIgLTIxNDM3NDgzLjcgLT4gLTYuMTUyMzQ4ODBFKzI0OTk1MzQ1NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNDggYWRkIDIxNjc0MTA4Mi4gMjUwMjkwMjQ0IC0+IDQ2NzAzMTMyNgoreGNvbTI0OCBjb21wYXJlIDIxNjc0MTA4Mi4gMjUwMjkwMjQ0IC0+IC0xCit4ZGl2MjQ4IGRpdmlkZSAyMTY3NDEwODIuIDI1MDI5MDI0NCAtPiAwLjg2NTk1ODk3MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNDggZGl2aWRlaW50IDIxNjc0MTA4Mi4gMjUwMjkwMjQ0IC0+IDAKK3htdWwyNDggbXVsdGlwbHkgMjE2NzQxMDgyLiAyNTAyOTAyNDQgLT4gNS40MjQ4MTc4M0UrMTYgSW5leGFjdCBSb3VuZGVkCit4cG93MjQ4IHBvd2VyIDIxNjc0MTA4Mi4gMjUwMjkwMjQ0IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTI0OCByZW1haW5kZXIgMjE2NzQxMDgyLiAyNTAyOTAyNDQgLT4gMjE2NzQxMDgyCit4c3ViMjQ4IHN1YnRyYWN0IDIxNjc0MTA4Mi4gMjUwMjkwMjQ0IC0+IC0zMzU0OTE2MgoreGFkZDI0OSBhZGQgLTYzNjQ3MjAuNDkgNTUzOTI0NS42NCAtPiAtODI1NDc0Ljg1Cit4Y29tMjQ5IGNvbXBhcmUgLTYzNjQ3MjAuNDkgNTUzOTI0NS42NCAtPiAtMQoreGRpdjI0OSBkaXZpZGUgLTYzNjQ3MjAuNDkgNTUzOTI0NS42NCAtPiAtMS4xNDkwMjI5NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNDkgZGl2aWRlaW50IC02MzY0NzIwLjQ5IDU1MzkyNDUuNjQgLT4gLTEKK3htdWwyNDkgbXVsdGlwbHkgLTYzNjQ3MjAuNDkgNTUzOTI0NS42NCAtPiAtMy41MjU1NzUwMkUrMTMgSW5leGFjdCBSb3VuZGVkCit4cG93MjQ5IHBvd2VyIC02MzY0NzIwLjQ5IDU1MzkyNDYgLT4gMi45Njg5NDY0MUUrMzc2ODc4MDcgSW5leGFjdCBSb3VuZGVkCit4cmVtMjQ5IHJlbWFpbmRlciAtNjM2NDcyMC40OSA1NTM5MjQ1LjY0IC0+IC04MjU0NzQuODUKK3hzdWIyNDkgc3VidHJhY3QgLTYzNjQ3MjAuNDkgNTUzOTI0NS42NCAtPiAtMTE5MDM5NjYuMSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNTAgYWRkIC04MTQ1OTkuNDc1IC0xNC41NDMxMTkxIC0+IC04MTQ2MTQuMDE4IEluZXhhY3QgUm91bmRlZAoreGNvbTI1MCBjb21wYXJlIC04MTQ1OTkuNDc1IC0xNC41NDMxMTkxIC0+IC0xCit4ZGl2MjUwIGRpdmlkZSAtODE0NTk5LjQ3NSAtMTQuNTQzMTE5MSAtPiA1NjAxMi43MDc0IEluZXhhY3QgUm91bmRlZAoreGR2aTI1MCBkaXZpZGVpbnQgLTgxNDU5OS40NzUgLTE0LjU0MzExOTEgLT4gNTYwMTIKK3htdWwyNTAgbXVsdGlwbHkgLTgxNDU5OS40NzUgLTE0LjU0MzExOTEgLT4gMTE4NDY4MTcuMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNTAgcG93ZXIgLTgxNDU5OS40NzUgLTE1IC0+IC0yLjE2Njg5NjIyRS04OSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNTAgcmVtYWluZGVyIC04MTQ1OTkuNDc1IC0xNC41NDMxMTkxIC0+IC0xMC4yODc5NzA4Cit4c3ViMjUwIHN1YnRyYWN0IC04MTQ1OTkuNDc1IC0xNC41NDMxMTkxIC0+IC04MTQ1ODQuOTMyIEluZXhhY3QgUm91bmRlZAoreGFkZDI1MSBhZGQgLTg3NzQ5OC43NTUgNTA3NDA4NzI0RS0xNjg2MjgxMDYgLT4gLTg3NzQ5OC43NTUgSW5leGFjdCBSb3VuZGVkCit4Y29tMjUxIGNvbXBhcmUgLTg3NzQ5OC43NTUgNTA3NDA4NzI0RS0xNjg2MjgxMDYgLT4gLTEKK3hkaXYyNTEgZGl2aWRlIC04Nzc0OTguNzU1IDUwNzQwODcyNEUtMTY4NjI4MTA2IC0+IC0xLjcyOTM3MjYyRSsxNjg2MjgxMDMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjUxIGRpdmlkZWludCAtODc3NDk4Ljc1NSA1MDc0MDg3MjRFLTE2ODYyODEwNiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDI1MSBtdWx0aXBseSAtODc3NDk4Ljc1NSA1MDc0MDg3MjRFLTE2ODYyODEwNiAtPiAtNC40NTI1MDUyNEUtMTY4NjI4MDkyIEluZXhhY3QgUm91bmRlZAoreHBvdzI1MSBwb3dlciAtODc3NDk4Ljc1NSA1IC0+IC01LjIwMjc0NTA1RSsyOSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNTEgcmVtYWluZGVyIC04Nzc0OTguNzU1IDUwNzQwODcyNEUtMTY4NjI4MTA2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjUxIHN1YnRyYWN0IC04Nzc0OTguNzU1IDUwNzQwODcyNEUtMTY4NjI4MTA2IC0+IC04Nzc0OTguNzU1IEluZXhhY3QgUm91bmRlZAoreGFkZDI1MiBhZGQgMTA2MzQ0NDYuNUUrNDc1NzgzODYxIDUwLjcyMTMwNTZFKzE3ODA3ODA5IC0+IDEuMDYzNDQ0NjVFKzQ3NTc4Mzg2OCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNTIgY29tcGFyZSAxMDYzNDQ0Ni41RSs0NzU3ODM4NjEgNTAuNzIxMzA1NkUrMTc4MDc4MDkgLT4gMQoreGRpdjI1MiBkaXZpZGUgMTA2MzQ0NDYuNUUrNDc1NzgzODYxIDUwLjcyMTMwNTZFKzE3ODA3ODA5IC0+IDIuMDk2NjQyODlFKzQ1Nzk3NjA1NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNTIgZGl2aWRlaW50IDEwNjM0NDQ2LjVFKzQ3NTc4Mzg2MSA1MC43MjEzMDU2RSsxNzgwNzgwOSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDI1MiBtdWx0aXBseSAxMDYzNDQ0Ni41RSs0NzU3ODM4NjEgNTAuNzIxMzA1NkUrMTc4MDc4MDkgLT4gNS4zOTM5MzAxMUUrNDkzNTkxNjc4IEluZXhhY3QgUm91bmRlZAoreHBvdzI1MiBwb3dlciAxMDYzNDQ0Ni41RSs0NzU3ODM4NjEgNSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNTIgcmVtYWluZGVyIDEwNjM0NDQ2LjVFKzQ3NTc4Mzg2MSA1MC43MjEzMDU2RSsxNzgwNzgwOSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjI1MiBzdWJ0cmFjdCAxMDYzNDQ0Ni41RSs0NzU3ODM4NjEgNTAuNzIxMzA1NkUrMTc4MDc4MDkgLT4gMS4wNjM0NDQ2NUUrNDc1NzgzODY4IEluZXhhY3QgUm91bmRlZAoreGFkZDI1MyBhZGQgLTE2MjcyNi4yNTdFLTU5NzI4NTkxOCAtNDM5MS41NDc5OSAtPiAtNDM5MS41NDc5OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNTMgY29tcGFyZSAtMTYyNzI2LjI1N0UtNTk3Mjg1OTE4IC00MzkxLjU0Nzk5IC0+IDEKK3hkaXYyNTMgZGl2aWRlIC0xNjI3MjYuMjU3RS01OTcyODU5MTggLTQzOTEuNTQ3OTkgLT4gMy43MDU0NDE4NUUtNTk3Mjg1OTE3IEluZXhhY3QgUm91bmRlZAoreGR2aTI1MyBkaXZpZGVpbnQgLTE2MjcyNi4yNTdFLTU5NzI4NTkxOCAtNDM5MS41NDc5OSAtPiAwCit4bXVsMjUzIG11bHRpcGx5IC0xNjI3MjYuMjU3RS01OTcyODU5MTggLTQzOTEuNTQ3OTkgLT4gNy4xNDYyMDE2N0UtNTk3Mjg1OTEwIEluZXhhY3QgUm91bmRlZAoreHBvdzI1MyBwb3dlciAtMTYyNzI2LjI1N0UtNTk3Mjg1OTE4IC00MzkyIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTI1MyByZW1haW5kZXIgLTE2MjcyNi4yNTdFLTU5NzI4NTkxOCAtNDM5MS41NDc5OSAtPiAtMS42MjcyNjI1N0UtNTk3Mjg1OTEzCit4c3ViMjUzIHN1YnRyYWN0IC0xNjI3MjYuMjU3RS01OTcyODU5MTggLTQzOTEuNTQ3OTkgLT4gNDM5MS41NDc5OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNTQgYWRkIDcwMDM1NDU4Ni5FLTk5ODU2NzA3IDcxOTguMDQ5M0UrNDM2MjUwMjk5IC0+IDcuMTk4MDQ5MzBFKzQzNjI1MDMwMiBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNTQgY29tcGFyZSA3MDAzNTQ1ODYuRS05OTg1NjcwNyA3MTk4LjA0OTNFKzQzNjI1MDI5OSAtPiAtMQoreGRpdjI1NCBkaXZpZGUgNzAwMzU0NTg2LkUtOTk4NTY3MDcgNzE5OC4wNDkzRSs0MzYyNTAyOTkgLT4gOS43Mjk3ODMxMkUtNTM2MTA3MDAyIEluZXhhY3QgUm91bmRlZAoreGR2aTI1NCBkaXZpZGVpbnQgNzAwMzU0NTg2LkUtOTk4NTY3MDcgNzE5OC4wNDkzRSs0MzYyNTAyOTkgLT4gMAoreG11bDI1NCBtdWx0aXBseSA3MDAzNTQ1ODYuRS05OTg1NjcwNyA3MTk4LjA0OTNFKzQzNjI1MDI5OSAtPiA1LjA0MTE4Njg0RSszMzYzOTM2MDQgSW5leGFjdCBSb3VuZGVkCit4cG93MjU0IHBvd2VyIDcwMDM1NDU4Ni5FLTk5ODU2NzA3IDcgLT4gOC4yNjQ2NzYxMEUtNjk4OTk2ODg4IEluZXhhY3QgUm91bmRlZAoreHJlbTI1NCByZW1haW5kZXIgNzAwMzU0NTg2LkUtOTk4NTY3MDcgNzE5OC4wNDkzRSs0MzYyNTAyOTkgLT4gNy4wMDM1NDU4NkUtOTk4NTY2OTkKK3hzdWIyNTQgc3VidHJhY3QgNzAwMzU0NTg2LkUtOTk4NTY3MDcgNzE5OC4wNDkzRSs0MzYyNTAyOTkgLT4gLTcuMTk4MDQ5MzBFKzQzNjI1MDMwMiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNTUgYWRkIDM5NjE3NjYzRS00NjM3MDQ2NjQgLTg5NS4yOTAzNDYgLT4gLTg5NS4yOTAzNDYgSW5leGFjdCBSb3VuZGVkCit4Y29tMjU1IGNvbXBhcmUgMzk2MTc2NjNFLTQ2MzcwNDY2NCAtODk1LjI5MDM0NiAtPiAxCit4ZGl2MjU1IGRpdmlkZSAzOTYxNzY2M0UtNDYzNzA0NjY0IC04OTUuMjkwMzQ2IC0+IC00LjQyNTExODk4RS00NjM3MDQ2NjAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjU1IGRpdmlkZWludCAzOTYxNzY2M0UtNDYzNzA0NjY0IC04OTUuMjkwMzQ2IC0+IC0wCit4bXVsMjU1IG11bHRpcGx5IDM5NjE3NjYzRS00NjM3MDQ2NjQgLTg5NS4yOTAzNDYgLT4gLTMuNTQ2OTMxMTJFLTQ2MzcwNDY1NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNTUgcG93ZXIgMzk2MTc2NjNFLTQ2MzcwNDY2NCAtODk1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTI1NSByZW1haW5kZXIgMzk2MTc2NjNFLTQ2MzcwNDY2NCAtODk1LjI5MDM0NiAtPiAzLjk2MTc2NjNFLTQ2MzcwNDY1NworeHN1YjI1NSBzdWJ0cmFjdCAzOTYxNzY2M0UtNDYzNzA0NjY0IC04OTUuMjkwMzQ2IC0+IDg5NS4yOTAzNDYgSW5leGFjdCBSb3VuZGVkCit4YWRkMjU2IGFkZCA1MzUwODgyLjU5IC0zNjMyOTgyOSAtPiAtMzA5Nzg5NDYuNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNTYgY29tcGFyZSA1MzUwODgyLjU5IC0zNjMyOTgyOSAtPiAxCit4ZGl2MjU2IGRpdmlkZSA1MzUwODgyLjU5IC0zNjMyOTgyOSAtPiAtMC4xNDcyODYyMDQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjU2IGRpdmlkZWludCA1MzUwODgyLjU5IC0zNjMyOTgyOSAtPiAtMAoreG11bDI1NiBtdWx0aXBseSA1MzUwODgyLjU5IC0zNjMyOTgyOSAtPiAtMS45NDM5NjY0OUUrMTQgSW5leGFjdCBSb3VuZGVkCit4cG93MjU2IHBvd2VyIDUzNTA4ODIuNTkgLTM2MzI5ODI5IC0+IDkuNzcwMDYxMDdFLTI0NDQ0MjU0NiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNTYgcmVtYWluZGVyIDUzNTA4ODIuNTkgLTM2MzI5ODI5IC0+IDUzNTA4ODIuNTkKK3hzdWIyNTYgc3VidHJhY3QgNTM1MDg4Mi41OSAtMzYzMjk4MjkgLT4gNDE2ODA3MTEuNiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNTcgYWRkIDkxOTY2LjQwODRFKzIxMDM4Mjk1MiAxNjY3NDAuNDZFLTQyMDAxMzkwIC0+IDkuMTk2NjQwODRFKzIxMDM4Mjk1NiBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNTcgY29tcGFyZSA5MTk2Ni40MDg0RSsyMTAzODI5NTIgMTY2NzQwLjQ2RS00MjAwMTM5MCAtPiAxCit4ZGl2MjU3IGRpdmlkZSA5MTk2Ni40MDg0RSsyMTAzODI5NTIgMTY2NzQwLjQ2RS00MjAwMTM5MCAtPiA1LjUxNTU0MjQ0RSsyNTIzODQzNDEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjU3IGRpdmlkZWludCA5MTk2Ni40MDg0RSsyMTAzODI5NTIgMTY2NzQwLjQ2RS00MjAwMTM5MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDI1NyBtdWx0aXBseSA5MTk2Ni40MDg0RSsyMTAzODI5NTIgMTY2NzQwLjQ2RS00MjAwMTM5MCAtPiAxLjUzMzQ1MjEyRSsxNjgzODE1NzIgSW5leGFjdCBSb3VuZGVkCit4cG93MjU3IHBvd2VyIDkxOTY2LjQwODRFKzIxMDM4Mjk1MiAyIC0+IDguNDU3ODIwMjdFKzQyMDc2NTkxMyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNTcgcmVtYWluZGVyIDkxOTY2LjQwODRFKzIxMDM4Mjk1MiAxNjY3NDAuNDZFLTQyMDAxMzkwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjU3IHN1YnRyYWN0IDkxOTY2LjQwODRFKzIxMDM4Mjk1MiAxNjY3NDAuNDZFLTQyMDAxMzkwIC0+IDkuMTk2NjQwODRFKzIxMDM4Mjk1NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNTggYWRkIDIzMTg5OTAzMS5FLTQ4MTc1OTA3NiA3MjYuMzM3MTAwIC0+IDcyNi4zMzcxMDAgSW5leGFjdCBSb3VuZGVkCit4Y29tMjU4IGNvbXBhcmUgMjMxODk5MDMxLkUtNDgxNzU5MDc2IDcyNi4zMzcxMDAgLT4gLTEKK3hkaXYyNTggZGl2aWRlIDIzMTg5OTAzMS5FLTQ4MTc1OTA3NiA3MjYuMzM3MTAwIC0+IDMuMTkyNzE5MDdFLTQ4MTc1OTA3MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNTggZGl2aWRlaW50IDIzMTg5OTAzMS5FLTQ4MTc1OTA3NiA3MjYuMzM3MTAwIC0+IDAKK3htdWwyNTggbXVsdGlwbHkgMjMxODk5MDMxLkUtNDgxNzU5MDc2IDcyNi4zMzcxMDAgLT4gMS42ODQzNjg3MEUtNDgxNzU5MDY1IEluZXhhY3QgUm91bmRlZAoreHBvdzI1OCBwb3dlciAyMzE4OTkwMzEuRS00ODE3NTkwNzYgNzI2IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTI1OCByZW1haW5kZXIgMjMxODk5MDMxLkUtNDgxNzU5MDc2IDcyNi4zMzcxMDAgLT4gMi4zMTg5OTAzMUUtNDgxNzU5MDY4Cit4c3ViMjU4IHN1YnRyYWN0IDIzMTg5OTAzMS5FLTQ4MTc1OTA3NiA3MjYuMzM3MTAwIC0+IC03MjYuMzM3MTAwIEluZXhhY3QgUm91bmRlZAoreGFkZDI1OSBhZGQgLTk2MTEzMTIuMzMgMjIxMDk3MzUuOSAtPiAxMjQ5ODQyMy42IEluZXhhY3QgUm91bmRlZAoreGNvbTI1OSBjb21wYXJlIC05NjExMzEyLjMzIDIyMTA5NzM1LjkgLT4gLTEKK3hkaXYyNTkgZGl2aWRlIC05NjExMzEyLjMzIDIyMTA5NzM1LjkgLT4gLTAuNDM0NzA5NTA0IEluZXhhY3QgUm91bmRlZAoreGR2aTI1OSBkaXZpZGVpbnQgLTk2MTEzMTIuMzMgMjIxMDk3MzUuOSAtPiAtMAoreG11bDI1OSBtdWx0aXBseSAtOTYxMTMxMi4zMyAyMjEwOTczNS45IC0+IC0yLjEyNTAzNTc3RSsxNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNTkgcG93ZXIgLTk2MTEzMTIuMzMgMjIxMDk3MzYgLT4gNi43NDUzMDgyOEUrMTU0Mzg3NDgxIEluZXhhY3QgUm91bmRlZAoreHJlbTI1OSByZW1haW5kZXIgLTk2MTEzMTIuMzMgMjIxMDk3MzUuOSAtPiAtOTYxMTMxMi4zMworeHN1YjI1OSBzdWJ0cmFjdCAtOTYxMTMxMi4zMyAyMjEwOTczNS45IC0+IC0zMTcyMTA0OC4yIEluZXhhY3QgUm91bmRlZAoreGFkZDI2MCBhZGQgLTU2MDQ5MzguMTVFLTM2ODEyNTQyIDczNTkzNzU3Ny4gLT4gNzM1OTM3NTc3IEluZXhhY3QgUm91bmRlZAoreGNvbTI2MCBjb21wYXJlIC01NjA0OTM4LjE1RS0zNjgxMjU0MiA3MzU5Mzc1NzcuIC0+IC0xCit4ZGl2MjYwIGRpdmlkZSAtNTYwNDkzOC4xNUUtMzY4MTI1NDIgNzM1OTM3NTc3LiAtPiAtNy42MTYwNTEwNEUtMzY4MTI1NDUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjYwIGRpdmlkZWludCAtNTYwNDkzOC4xNUUtMzY4MTI1NDIgNzM1OTM3NTc3LiAtPiAtMAoreG11bDI2MCBtdWx0aXBseSAtNTYwNDkzOC4xNUUtMzY4MTI1NDIgNzM1OTM3NTc3LiAtPiAtNC4xMjQ4ODQ2MEUtMzY4MTI1MjcgSW5leGFjdCBSb3VuZGVkCit4cG93MjYwIHBvd2VyIC01NjA0OTM4LjE1RS0zNjgxMjU0MiA3MzU5Mzc1NzcgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTI2MCByZW1haW5kZXIgLTU2MDQ5MzguMTVFLTM2ODEyNTQyIDczNTkzNzU3Ny4gLT4gLTUuNjA0OTM4MTVFLTM2ODEyNTM2Cit4c3ViMjYwIHN1YnRyYWN0IC01NjA0OTM4LjE1RS0zNjgxMjU0MiA3MzU5Mzc1NzcuIC0+IC03MzU5Mzc1NzcgSW5leGFjdCBSb3VuZGVkCit4YWRkMjYxIGFkZCA2OTM4ODE0MTMuIDI2MDU0NzIyNEUtNDgwMjgxNDE4IC0+IDY5Mzg4MTQxMyBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNjEgY29tcGFyZSA2OTM4ODE0MTMuIDI2MDU0NzIyNEUtNDgwMjgxNDE4IC0+IDEKK3hkaXYyNjEgZGl2aWRlIDY5Mzg4MTQxMy4gMjYwNTQ3MjI0RS00ODAyODE0MTggLT4gMi42NjMxNjk0N0UrNDgwMjgxNDE4IEluZXhhY3QgUm91bmRlZAoreGR2aTI2MSBkaXZpZGVpbnQgNjkzODgxNDEzLiAyNjA1NDcyMjRFLTQ4MDI4MTQxOCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDI2MSBtdWx0aXBseSA2OTM4ODE0MTMuIDI2MDU0NzIyNEUtNDgwMjgxNDE4IC0+IDEuODA3ODg4NzZFLTQ4MDI4MTQwMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNjEgcG93ZXIgNjkzODgxNDEzLiAzIC0+IDMuMzQwODQwNjZFKzI2IEluZXhhY3QgUm91bmRlZAoreHJlbTI2MSByZW1haW5kZXIgNjkzODgxNDEzLiAyNjA1NDcyMjRFLTQ4MDI4MTQxOCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjI2MSBzdWJ0cmFjdCA2OTM4ODE0MTMuIDI2MDU0NzIyNEUtNDgwMjgxNDE4IC0+IDY5Mzg4MTQxMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNjIgYWRkIC0zNDg2NS43Mzc4RS0zNjg3NjgwMjQgMjI5NzExNy44OCAtPiAyMjk3MTE3Ljg4IEluZXhhY3QgUm91bmRlZAoreGNvbTI2MiBjb21wYXJlIC0zNDg2NS43Mzc4RS0zNjg3NjgwMjQgMjI5NzExNy44OCAtPiAtMQoreGRpdjI2MiBkaXZpZGUgLTM0ODY1LjczNzhFLTM2ODc2ODAyNCAyMjk3MTE3Ljg4IC0+IC0xLjUxNzgwMzYwRS0zNjg3NjgwMjYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjYyIGRpdmlkZWludCAtMzQ4NjUuNzM3OEUtMzY4NzY4MDI0IDIyOTcxMTcuODggLT4gLTAKK3htdWwyNjIgbXVsdGlwbHkgLTM0ODY1LjczNzhFLTM2ODc2ODAyNCAyMjk3MTE3Ljg4IC0+IC04LjAwOTA3MDk3RS0zNjg3NjgwMTQgSW5leGFjdCBSb3VuZGVkCit4cG93MjYyIHBvd2VyIC0zNDg2NS43Mzc4RS0zNjg3NjgwMjQgMjI5NzExOCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yNjIgcmVtYWluZGVyIC0zNDg2NS43Mzc4RS0zNjg3NjgwMjQgMjI5NzExNy44OCAtPiAtMy40ODY1NzM3OEUtMzY4NzY4MDIwCit4c3ViMjYyIHN1YnRyYWN0IC0zNDg2NS43Mzc4RS0zNjg3NjgwMjQgMjI5NzExNy44OCAtPiAtMjI5NzExNy44OCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNjMgYWRkIDExMjMuMzI0NTYgNy44Njc0NzkxOEUrOTMwODg4Nzk2IC0+IDcuODY3NDc5MThFKzkzMDg4ODc5NiBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNjMgY29tcGFyZSAxMTIzLjMyNDU2IDcuODY3NDc5MThFKzkzMDg4ODc5NiAtPiAtMQoreGRpdjI2MyBkaXZpZGUgMTEyMy4zMjQ1NiA3Ljg2NzQ3OTE4RSs5MzA4ODg3OTYgLT4gMS40Mjc4MDc0OEUtOTMwODg4Nzk0IEluZXhhY3QgUm91bmRlZAoreGR2aTI2MyBkaXZpZGVpbnQgMTEyMy4zMjQ1NiA3Ljg2NzQ3OTE4RSs5MzA4ODg3OTYgLT4gMAoreG11bDI2MyBtdWx0aXBseSAxMTIzLjMyNDU2IDcuODY3NDc5MThFKzkzMDg4ODc5NiAtPiA4LjgzNzczMjU5RSs5MzA4ODg3OTkgSW5leGFjdCBSb3VuZGVkCit4cG93MjYzIHBvd2VyIDExMjMuMzI0NTYgOCAtPiAyLjUzNTM3NDAxRSsyNCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNjMgcmVtYWluZGVyIDExMjMuMzI0NTYgNy44Njc0NzkxOEUrOTMwODg4Nzk2IC0+IDExMjMuMzI0NTYKK3hzdWIyNjMgc3VidHJhY3QgMTEyMy4zMjQ1NiA3Ljg2NzQ3OTE4RSs5MzA4ODg3OTYgLT4gLTcuODY3NDc5MThFKzkzMDg4ODc5NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNjQgYWRkIDU2LjY2MDc0NjVFKzQ2NzgxMjU2NSA5MDk1NTI1MTJFKzc2NDUxNjIwMCAtPiA5LjA5NTUyNTEyRSs3NjQ1MTYyMDggSW5leGFjdCBSb3VuZGVkCit4Y29tMjY0IGNvbXBhcmUgNTYuNjYwNzQ2NUUrNDY3ODEyNTY1IDkwOTU1MjUxMkUrNzY0NTE2MjAwIC0+IC0xCit4ZGl2MjY0IGRpdmlkZSA1Ni42NjA3NDY1RSs0Njc4MTI1NjUgOTA5NTUyNTEyRSs3NjQ1MTYyMDAgLT4gNi4yMjk1MTg5OUUtMjk2NzAzNjQzIEluZXhhY3QgUm91bmRlZAoreGR2aTI2NCBkaXZpZGVpbnQgNTYuNjYwNzQ2NUUrNDY3ODEyNTY1IDkwOTU1MjUxMkUrNzY0NTE2MjAwIC0+IDAKK3htdWwyNjQgbXVsdGlwbHkgNTYuNjYwNzQ2NUUrNDY3ODEyNTY1IDkwOTU1MjUxMkUrNzY0NTE2MjAwIC0+IEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAoreHBvdzI2NCBwb3dlciA1Ni42NjA3NDY1RSs0Njc4MTI1NjUgOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNjQgcmVtYWluZGVyIDU2LjY2MDc0NjVFKzQ2NzgxMjU2NSA5MDk1NTI1MTJFKzc2NDUxNjIwMCAtPiA1LjY2NjA3NDY1RSs0Njc4MTI1NjYKK3hzdWIyNjQgc3VidHJhY3QgNTYuNjYwNzQ2NUUrNDY3ODEyNTY1IDkwOTU1MjUxMkUrNzY0NTE2MjAwIC0+IC05LjA5NTUyNTEyRSs3NjQ1MTYyMDggSW5leGFjdCBSb3VuZGVkCit4YWRkMjY1IGFkZCAtMS44NTc3MTg0MEUrMzY1NTUyNTQwIC03MzAyODMzOS43IC0+IC0xLjg1NzcxODQwRSszNjU1NTI1NDAgSW5leGFjdCBSb3VuZGVkCit4Y29tMjY1IGNvbXBhcmUgLTEuODU3NzE4NDBFKzM2NTU1MjU0MCAtNzMwMjgzMzkuNyAtPiAtMQoreGRpdjI2NSBkaXZpZGUgLTEuODU3NzE4NDBFKzM2NTU1MjU0MCAtNzMwMjgzMzkuNyAtPiAyLjU0MzgzMjE3RSszNjU1NTI1MzIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjY1IGRpdmlkZWludCAtMS44NTc3MTg0MEUrMzY1NTUyNTQwIC03MzAyODMzOS43IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjY1IG11bHRpcGx5IC0xLjg1NzcxODQwRSszNjU1NTI1NDAgLTczMDI4MzM5LjcgLT4gMS4zNTY2NjA5MEUrMzY1NTUyNTQ4IEluZXhhY3QgUm91bmRlZAoreHBvdzI2NSBwb3dlciAtMS44NTc3MTg0MEUrMzY1NTUyNTQwIC03MzAyODM0MCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yNjUgcmVtYWluZGVyIC0xLjg1NzcxODQwRSszNjU1NTI1NDAgLTczMDI4MzM5LjcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyNjUgc3VidHJhY3QgLTEuODU3NzE4NDBFKzM2NTU1MjU0MCAtNzMwMjgzMzkuNyAtPiAtMS44NTc3MTg0MEUrMzY1NTUyNTQwIEluZXhhY3QgUm91bmRlZAoreGFkZDI2NiBhZGQgMzQuMTkzNTUyNSAtNDA3NjcuNjQ1MCAtPiAtNDA3MzMuNDUxNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNjYgY29tcGFyZSAzNC4xOTM1NTI1IC00MDc2Ny42NDUwIC0+IDEKK3hkaXYyNjYgZGl2aWRlIDM0LjE5MzU1MjUgLTQwNzY3LjY0NTAgLT4gLTAuMDAwODM4NzQyNDAyIEluZXhhY3QgUm91bmRlZAoreGR2aTI2NiBkaXZpZGVpbnQgMzQuMTkzNTUyNSAtNDA3NjcuNjQ1MCAtPiAtMAoreG11bDI2NiBtdWx0aXBseSAzNC4xOTM1NTI1IC00MDc2Ny42NDUwIC0+IC0xMzkzOTkwLjYxIEluZXhhY3QgUm91bmRlZAoreHBvdzI2NiBwb3dlciAzNC4xOTM1NTI1IC00MDc2OCAtPiAxLjQ1MTc0MjEwRS02MjUzNiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNjYgcmVtYWluZGVyIDM0LjE5MzU1MjUgLTQwNzY3LjY0NTAgLT4gMzQuMTkzNTUyNQoreHN1YjI2NiBzdWJ0cmFjdCAzNC4xOTM1NTI1IC00MDc2Ny42NDUwIC0+IDQwODAxLjgzODYgSW5leGFjdCBSb3VuZGVkCit4YWRkMjY3IGFkZCAyNi4wMDA5MTY4RSs3NTE2MTgyOTQgLTMwNDAxOS45MjkgLT4gMi42MDAwOTE2OEUrNzUxNjE4Mjk1IEluZXhhY3QgUm91bmRlZAoreGNvbTI2NyBjb21wYXJlIDI2LjAwMDkxNjhFKzc1MTYxODI5NCAtMzA0MDE5LjkyOSAtPiAxCit4ZGl2MjY3IGRpdmlkZSAyNi4wMDA5MTY4RSs3NTE2MTgyOTQgLTMwNDAxOS45MjkgLT4gLTguNTUyMzcyNTBFKzc1MTYxODI4OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNjcgZGl2aWRlaW50IDI2LjAwMDkxNjhFKzc1MTYxODI5NCAtMzA0MDE5LjkyOSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDI2NyBtdWx0aXBseSAyNi4wMDA5MTY4RSs3NTE2MTgyOTQgLTMwNDAxOS45MjkgLT4gLTcuOTA0Nzk2ODhFKzc1MTYxODMwMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNjcgcG93ZXIgMjYuMDAwOTE2OEUrNzUxNjE4Mjk0IC0zMDQwMjAgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMjY3IHJlbWFpbmRlciAyNi4wMDA5MTY4RSs3NTE2MTgyOTQgLTMwNDAxOS45MjkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyNjcgc3VidHJhY3QgMjYuMDAwOTE2OEUrNzUxNjE4Mjk0IC0zMDQwMTkuOTI5IC0+IDIuNjAwMDkxNjhFKzc1MTYxODI5NSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNjggYWRkIC01OC40ODUzMDcyRSs1ODg1NDAwNTUgLTQ2NDcuMzIwNSAtPiAtNS44NDg1MzA3MkUrNTg4NTQwMDU2IEluZXhhY3QgUm91bmRlZAoreGNvbTI2OCBjb21wYXJlIC01OC40ODUzMDcyRSs1ODg1NDAwNTUgLTQ2NDcuMzIwNSAtPiAtMQoreGRpdjI2OCBkaXZpZGUgLTU4LjQ4NTMwNzJFKzU4ODU0MDA1NSAtNDY0Ny4zMjA1IC0+IDEuMjU4NDczNzJFKzU4ODU0MDA1MyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNjggZGl2aWRlaW50IC01OC40ODUzMDcyRSs1ODg1NDAwNTUgLTQ2NDcuMzIwNSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDI2OCBtdWx0aXBseSAtNTguNDg1MzA3MkUrNTg4NTQwMDU1IC00NjQ3LjMyMDUgLT4gMi43MTc5OTk2N0UrNTg4NTQwMDYwIEluZXhhY3QgUm91bmRlZAoreHBvdzI2OCBwb3dlciAtNTguNDg1MzA3MkUrNTg4NTQwMDU1IC00NjQ3IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yNjggcmVtYWluZGVyIC01OC40ODUzMDcyRSs1ODg1NDAwNTUgLTQ2NDcuMzIwNSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjI2OCBzdWJ0cmFjdCAtNTguNDg1MzA3MkUrNTg4NTQwMDU1IC00NjQ3LjMyMDUgLT4gLTUuODQ4NTMwNzJFKzU4ODU0MDA1NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNjkgYWRkIDUxLjAyNTEwMSAtNDQ2NzY5MS41NyAtPiAtNDQ2NzY0MC41NCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNjkgY29tcGFyZSA1MS4wMjUxMDEgLTQ0Njc2OTEuNTcgLT4gMQoreGRpdjI2OSBkaXZpZGUgNTEuMDI1MTAxIC00NDY3NjkxLjU3IC0+IC0wLjAwMDAxMTQyMDkwOTUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjY5IGRpdmlkZWludCA1MS4wMjUxMDEgLTQ0Njc2OTEuNTcgLT4gLTAKK3htdWwyNjkgbXVsdGlwbHkgNTEuMDI1MTAxIC00NDY3NjkxLjU3IC0+IC0yMjc5NjQ0MTQgSW5leGFjdCBSb3VuZGVkCit4cG93MjY5IHBvd2VyIDUxLjAyNTEwMSAtNDQ2NzY5MiAtPiA0LjQ5NDYyNTg5RS03NjI5ODUzIEluZXhhY3QgUm91bmRlZAoreHJlbTI2OSByZW1haW5kZXIgNTEuMDI1MTAxIC00NDY3NjkxLjU3IC0+IDUxLjAyNTEwMQoreHN1YjI2OSBzdWJ0cmFjdCA1MS4wMjUxMDEgLTQ0Njc2OTEuNTcgLT4gNDQ2Nzc0Mi42MCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNzAgYWRkIC0yMjE0Ljc2NTgyIDM3OTc4NTM3MkUrMjIzMTE3NTcyIC0+IDMuNzk3ODUzNzJFKzIyMzExNzU4MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNzAgY29tcGFyZSAtMjIxNC43NjU4MiAzNzk3ODUzNzJFKzIyMzExNzU3MiAtPiAtMQoreGRpdjI3MCBkaXZpZGUgLTIyMTQuNzY1ODIgMzc5Nzg1MzcyRSsyMjMxMTc1NzIgLT4gLTUuODMxNjI0ODdFLTIyMzExNzU3OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNzAgZGl2aWRlaW50IC0yMjE0Ljc2NTgyIDM3OTc4NTM3MkUrMjIzMTE3NTcyIC0+IC0wCit4bXVsMjcwIG11bHRpcGx5IC0yMjE0Ljc2NTgyIDM3OTc4NTM3MkUrMjIzMTE3NTcyIC0+IC04LjQxMTM1NjYxRSsyMjMxMTc1ODMgSW5leGFjdCBSb3VuZGVkCit4cG93MjcwIHBvd2VyIC0yMjE0Ljc2NTgyIDQgLT4gMi40MDYwODY1OEUrMTMgSW5leGFjdCBSb3VuZGVkCit4cmVtMjcwIHJlbWFpbmRlciAtMjIxNC43NjU4MiAzNzk3ODUzNzJFKzIyMzExNzU3MiAtPiAtMjIxNC43NjU4MgoreHN1YjI3MCBzdWJ0cmFjdCAtMjIxNC43NjU4MiAzNzk3ODUzNzJFKzIyMzExNzU3MiAtPiAtMy43OTc4NTM3MkUrMjIzMTE3NTgwIEluZXhhY3QgUm91bmRlZAoreGFkZDI3MSBhZGQgLTI1NjQuNzUyMDdFLTg0MTQ0MzkyOSAtNjUzNDk4MTg3IC0+IC02NTM0OTgxODcgSW5leGFjdCBSb3VuZGVkCit4Y29tMjcxIGNvbXBhcmUgLTI1NjQuNzUyMDdFLTg0MTQ0MzkyOSAtNjUzNDk4MTg3IC0+IDEKK3hkaXYyNzEgZGl2aWRlIC0yNTY0Ljc1MjA3RS04NDE0NDM5MjkgLTY1MzQ5ODE4NyAtPiAzLjkyNDY1MDYzRS04NDE0NDM5MzUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjcxIGRpdmlkZWludCAtMjU2NC43NTIwN0UtODQxNDQzOTI5IC02NTM0OTgxODcgLT4gMAoreG11bDI3MSBtdWx0aXBseSAtMjU2NC43NTIwN0UtODQxNDQzOTI5IC02NTM0OTgxODcgLT4gMS42NzYwNjA4M0UtODQxNDQzOTE3IEluZXhhY3QgUm91bmRlZAoreHBvdzI3MSBwb3dlciAtMjU2NC43NTIwN0UtODQxNDQzOTI5IC02NTM0OTgxODcgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTI3MSByZW1haW5kZXIgLTI1NjQuNzUyMDdFLTg0MTQ0MzkyOSAtNjUzNDk4MTg3IC0+IC0yLjU2NDc1MjA3RS04NDE0NDM5MjYKK3hzdWIyNzEgc3VidHJhY3QgLTI1NjQuNzUyMDdFLTg0MTQ0MzkyOSAtNjUzNDk4MTg3IC0+IDY1MzQ5ODE4NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNzIgYWRkIDUxMzExNTUyOS4gMjc3NzUwNzUuNkUrMjE3MTMzMzUyIC0+IDIuNzc3NTA3NTZFKzIxNzEzMzM1OSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNzIgY29tcGFyZSA1MTMxMTU1MjkuIDI3Nzc1MDc1LjZFKzIxNzEzMzM1MiAtPiAtMQoreGRpdjI3MiBkaXZpZGUgNTEzMTE1NTI5LiAyNzc3NTA3NS42RSsyMTcxMzMzNTIgLT4gMS44NDczOTU2MkUtMjE3MTMzMzUxIEluZXhhY3QgUm91bmRlZAoreGR2aTI3MiBkaXZpZGVpbnQgNTEzMTE1NTI5LiAyNzc3NTA3NS42RSsyMTcxMzMzNTIgLT4gMAoreG11bDI3MiBtdWx0aXBseSA1MTMxMTU1MjkuIDI3Nzc1MDc1LjZFKzIxNzEzMzM1MiAtPiAxLjQyNTE4MjI2RSsyMTcxMzMzNjggSW5leGFjdCBSb3VuZGVkCit4cG93MjcyIHBvd2VyIDUxMzExNTUyOS4gMyAtPiAxLjM1MDk2OTI4RSsyNiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNzIgcmVtYWluZGVyIDUxMzExNTUyOS4gMjc3NzUwNzUuNkUrMjE3MTMzMzUyIC0+IDUxMzExNTUyOQoreHN1YjI3MiBzdWJ0cmFjdCA1MTMxMTU1MjkuIDI3Nzc1MDc1LjZFKzIxNzEzMzM1MiAtPiAtMi43Nzc1MDc1NkUrMjE3MTMzMzU5IEluZXhhY3QgUm91bmRlZAoreGFkZDI3MyBhZGQgLTI0NzE1Ny4yMDggLTUzMjk5MC40NTMgLT4gLTc4MDE0Ny42NjEKK3hjb20yNzMgY29tcGFyZSAtMjQ3MTU3LjIwOCAtNTMyOTkwLjQ1MyAtPiAxCit4ZGl2MjczIGRpdmlkZSAtMjQ3MTU3LjIwOCAtNTMyOTkwLjQ1MyAtPiAwLjQ2MzcxNzg5MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNzMgZGl2aWRlaW50IC0yNDcxNTcuMjA4IC01MzI5OTAuNDUzIC0+IDAKK3htdWwyNzMgbXVsdGlwbHkgLTI0NzE1Ny4yMDggLTUzMjk5MC40NTMgLT4gMS4zMTczMjQzMkUrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93MjczIHBvd2VyIC0yNDcxNTcuMjA4IC01MzI5OTAgLT4gMS40ODMxNDAzM0UtMjg3NDQwMSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNzMgcmVtYWluZGVyIC0yNDcxNTcuMjA4IC01MzI5OTAuNDUzIC0+IC0yNDcxNTcuMjA4Cit4c3ViMjczIHN1YnRyYWN0IC0yNDcxNTcuMjA4IC01MzI5OTAuNDUzIC0+IDI4NTgzMy4yNDUKK3hhZGQyNzQgYWRkIDQwLjI0OTA3NjRFLTMzOTQ4MjI1MyA3NjI2Ljg1NDQyRSs1OTQyNjQ1NDAgLT4gNy42MjY4NTQ0MkUrNTk0MjY0NTQzIEluZXhhY3QgUm91bmRlZAoreGNvbTI3NCBjb21wYXJlIDQwLjI0OTA3NjRFLTMzOTQ4MjI1MyA3NjI2Ljg1NDQyRSs1OTQyNjQ1NDAgLT4gLTEKK3hkaXYyNzQgZGl2aWRlIDQwLjI0OTA3NjRFLTMzOTQ4MjI1MyA3NjI2Ljg1NDQyRSs1OTQyNjQ1NDAgLT4gNS4yNzcyODM5NUUtOTMzNzQ2Nzk2IEluZXhhY3QgUm91bmRlZAoreGR2aTI3NCBkaXZpZGVpbnQgNDAuMjQ5MDc2NEUtMzM5NDgyMjUzIDc2MjYuODU0NDJFKzU5NDI2NDU0MCAtPiAwCit4bXVsMjc0IG11bHRpcGx5IDQwLjI0OTA3NjRFLTMzOTQ4MjI1MyA3NjI2Ljg1NDQyRSs1OTQyNjQ1NDAgLT4gMy4wNjk3Mzg0NkUrMjU0NzgyMjkyIEluZXhhY3QgUm91bmRlZAoreHBvdzI3NCBwb3dlciA0MC4yNDkwNzY0RS0zMzk0ODIyNTMgOCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yNzQgcmVtYWluZGVyIDQwLjI0OTA3NjRFLTMzOTQ4MjI1MyA3NjI2Ljg1NDQyRSs1OTQyNjQ1NDAgLT4gNC4wMjQ5MDc2NEUtMzM5NDgyMjUyCit4c3ViMjc0IHN1YnRyYWN0IDQwLjI0OTA3NjRFLTMzOTQ4MjI1MyA3NjI2Ljg1NDQyRSs1OTQyNjQ1NDAgLT4gLTcuNjI2ODU0NDJFKzU5NDI2NDU0MyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyNzUgYWRkIC0xMTU2MDA4LjggLTg4NzAzODIuMzYgLT4gLTEwMDI2MzkxLjIgSW5leGFjdCBSb3VuZGVkCit4Y29tMjc1IGNvbXBhcmUgLTExNTYwMDguOCAtODg3MDM4Mi4zNiAtPiAxCit4ZGl2Mjc1IGRpdmlkZSAtMTE1NjAwOC44IC04ODcwMzgyLjM2IC0+IDAuMTMwMzIyMzE5IEluZXhhY3QgUm91bmRlZAoreGR2aTI3NSBkaXZpZGVpbnQgLTExNTYwMDguOCAtODg3MDM4Mi4zNiAtPiAwCit4bXVsMjc1IG11bHRpcGx5IC0xMTU2MDA4LjggLTg4NzAzODIuMzYgLT4gMS4wMjU0MjQwMUUrMTMgSW5leGFjdCBSb3VuZGVkCit4cG93Mjc1IHBvd2VyIC0xMTU2MDA4LjggLTg4NzAzODIgLT4gNC4zMjQ5NDk5NkUtNTM3ODA3ODIgSW5leGFjdCBSb3VuZGVkCit4cmVtMjc1IHJlbWFpbmRlciAtMTE1NjAwOC44IC04ODcwMzgyLjM2IC0+IC0xMTU2MDA4LjgwCit4c3ViMjc1IHN1YnRyYWN0IC0xMTU2MDA4LjggLTg4NzAzODIuMzYgLT4gNzcxNDM3My41NgoreGFkZDI3NiBhZGQgODgwMDk3OTI4LiAtNTI0NTUwMTEuMUUrMjA0NTM4MjE4IC0+IC01LjI0NTUwMTExRSsyMDQ1MzgyMjUgSW5leGFjdCBSb3VuZGVkCit4Y29tMjc2IGNvbXBhcmUgODgwMDk3OTI4LiAtNTI0NTUwMTEuMUUrMjA0NTM4MjE4IC0+IDEKK3hkaXYyNzYgZGl2aWRlIDg4MDA5NzkyOC4gLTUyNDU1MDExLjFFKzIwNDUzODIxOCAtPiAtMS42Nzc4MTQ3OEUtMjA0NTM4MjE3IEluZXhhY3QgUm91bmRlZAoreGR2aTI3NiBkaXZpZGVpbnQgODgwMDk3OTI4LiAtNTI0NTUwMTEuMUUrMjA0NTM4MjE4IC0+IC0wCit4bXVsMjc2IG11bHRpcGx5IDg4MDA5NzkyOC4gLTUyNDU1MDExLjFFKzIwNDUzODIxOCAtPiAtNC42MTY1NTQ2NkUrMjA0NTM4MjM0IEluZXhhY3QgUm91bmRlZAoreHBvdzI3NiBwb3dlciA4ODAwOTc5MjguIC01IC0+IDEuODkzODQ3NTFFLTQ1IEluZXhhY3QgUm91bmRlZAoreHJlbTI3NiByZW1haW5kZXIgODgwMDk3OTI4LiAtNTI0NTUwMTEuMUUrMjA0NTM4MjE4IC0+IDg4MDA5NzkyOAoreHN1YjI3NiBzdWJ0cmFjdCA4ODAwOTc5MjguIC01MjQ1NTAxMS4xRSsyMDQ1MzgyMTggLT4gNS4yNDU1MDExMUUrMjA0NTM4MjI1IEluZXhhY3QgUm91bmRlZAoreGFkZDI3NyBhZGQgNTc5Ni4yNTI0IDM0NDU4MzI5LjdFKzgzMjEyOTQyNiAtPiAzLjQ0NTgzMjk3RSs4MzIxMjk0MzMgSW5leGFjdCBSb3VuZGVkCit4Y29tMjc3IGNvbXBhcmUgNTc5Ni4yNTI0IDM0NDU4MzI5LjdFKzgzMjEyOTQyNiAtPiAtMQoreGRpdjI3NyBkaXZpZGUgNTc5Ni4yNTI0IDM0NDU4MzI5LjdFKzgzMjEyOTQyNiAtPiAxLjY4MjEwNDg2RS04MzIxMjk0MzAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjc3IGRpdmlkZWludCA1Nzk2LjI1MjQgMzQ0NTgzMjkuN0UrODMyMTI5NDI2IC0+IDAKK3htdWwyNzcgbXVsdGlwbHkgNTc5Ni4yNTI0IDM0NDU4MzI5LjdFKzgzMjEyOTQyNiAtPiAxLjk5NzI5MTc2RSs4MzIxMjk0MzcgSW5leGFjdCBSb3VuZGVkCit4cG93Mjc3IHBvd2VyIDU3OTYuMjUyNCAzIC0+IDEuOTQ3MzQwMzdFKzExIEluZXhhY3QgUm91bmRlZAoreHJlbTI3NyByZW1haW5kZXIgNTc5Ni4yNTI0IDM0NDU4MzI5LjdFKzgzMjEyOTQyNiAtPiA1Nzk2LjI1MjQKK3hzdWIyNzcgc3VidHJhY3QgNTc5Ni4yNTI0IDM0NDU4MzI5LjdFKzgzMjEyOTQyNiAtPiAtMy40NDU4MzI5N0UrODMyMTI5NDMzIEluZXhhY3QgUm91bmRlZAoreGFkZDI3OCBhZGQgMjcuMTAwMDkyM0UtMjE4MDMyMjIzIC00NS4wMTk4MzQxIC0+IC00NS4wMTk4MzQxIEluZXhhY3QgUm91bmRlZAoreGNvbTI3OCBjb21wYXJlIDI3LjEwMDA5MjNFLTIxODAzMjIyMyAtNDUuMDE5ODM0MSAtPiAxCit4ZGl2Mjc4IGRpdmlkZSAyNy4xMDAwOTIzRS0yMTgwMzIyMjMgLTQ1LjAxOTgzNDEgLT4gLTYuMDE5NTg5NTVFLTIxODAzMjIyNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNzggZGl2aWRlaW50IDI3LjEwMDA5MjNFLTIxODAzMjIyMyAtNDUuMDE5ODM0MSAtPiAtMAoreG11bDI3OCBtdWx0aXBseSAyNy4xMDAwOTIzRS0yMTgwMzIyMjMgLTQ1LjAxOTgzNDEgLT4gLTEuMjIwMDQxNjZFLTIxODAzMjIyMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyNzggcG93ZXIgMjcuMTAwMDkyM0UtMjE4MDMyMjIzIC00NSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yNzggcmVtYWluZGVyIDI3LjEwMDA5MjNFLTIxODAzMjIyMyAtNDUuMDE5ODM0MSAtPiAyLjcxMDAwOTIzRS0yMTgwMzIyMjIKK3hzdWIyNzggc3VidHJhY3QgMjcuMTAwMDkyM0UtMjE4MDMyMjIzIC00NS4wMTk4MzQxIC0+IDQ1LjAxOTgzNDEgSW5leGFjdCBSb3VuZGVkCit4YWRkMjc5IGFkZCA0MjY0MzQ3Ny44IDI2MTE4NDY1RS03MzAzOTA1NDkgLT4gNDI2NDM0NzcuOCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yNzkgY29tcGFyZSA0MjY0MzQ3Ny44IDI2MTE4NDY1RS03MzAzOTA1NDkgLT4gMQoreGRpdjI3OSBkaXZpZGUgNDI2NDM0NzcuOCAyNjExODQ2NUUtNzMwMzkwNTQ5IC0+IDEuNjMyNjk0NjRFKzczMDM5MDU0OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyNzkgZGl2aWRlaW50IDQyNjQzNDc3LjggMjYxMTg0NjVFLTczMDM5MDU0OSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDI3OSBtdWx0aXBseSA0MjY0MzQ3Ny44IDI2MTE4NDY1RS03MzAzOTA1NDkgLT4gMS4xMTM3ODIxOEUtNzMwMzkwNTM0IEluZXhhY3QgUm91bmRlZAoreHBvdzI3OSBwb3dlciA0MjY0MzQ3Ny44IDMgLT4gNy43NTQ1NzIzMEUrMjIgSW5leGFjdCBSb3VuZGVkCit4cmVtMjc5IHJlbWFpbmRlciA0MjY0MzQ3Ny44IDI2MTE4NDY1RS03MzAzOTA1NDkgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyNzkgc3VidHJhY3QgNDI2NDM0NzcuOCAyNjExODQ2NUUtNzMwMzkwNTQ5IC0+IDQyNjQzNDc3LjggSW5leGFjdCBSb3VuZGVkCit4YWRkMjgwIGFkZCAtMzE5MTguOTE3NkUtMTYzMDMxNjU3IC0yMS41NDIyODI0RS04MDczMTcyNTggLT4gLTMuMTkxODkxNzZFLTE2MzAzMTY1MyBJbmV4YWN0IFJvdW5kZWQKK3hjb20yODAgY29tcGFyZSAtMzE5MTguOTE3NkUtMTYzMDMxNjU3IC0yMS41NDIyODI0RS04MDczMTcyNTggLT4gLTEKK3hkaXYyODAgZGl2aWRlIC0zMTkxOC45MTc2RS0xNjMwMzE2NTcgLTIxLjU0MjI4MjRFLTgwNzMxNzI1OCAtPiAxLjQ4MTY4NjkwRSs2NDQyODU2MDQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjgwIGRpdmlkZWludCAtMzE5MTguOTE3NkUtMTYzMDMxNjU3IC0yMS41NDIyODI0RS04MDczMTcyNTggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyODAgbXVsdGlwbHkgLTMxOTE4LjkxNzZFLTE2MzAzMTY1NyAtMjEuNTQyMjgyNEUtODA3MzE3MjU4IC0+IDYuODc2MDYzMzdFLTk3MDM0ODkxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyODAgcG93ZXIgLTMxOTE4LjkxNzZFLTE2MzAzMTY1NyAtMiAtPiA5LjgxNTMwMjUwRSszMjYwNjMzMDQgSW5leGFjdCBSb3VuZGVkCit4cmVtMjgwIHJlbWFpbmRlciAtMzE5MTguOTE3NkUtMTYzMDMxNjU3IC0yMS41NDIyODI0RS04MDczMTcyNTggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyODAgc3VidHJhY3QgLTMxOTE4LjkxNzZFLTE2MzAzMTY1NyAtMjEuNTQyMjgyNEUtODA3MzE3MjU4IC0+IC0zLjE5MTg5MTc2RS0xNjMwMzE2NTMgSW5leGFjdCBSb3VuZGVkCit4YWRkMjgxIGFkZCA4NDIyNDg0MS4wIDIuNjI1NDgyNTVFKzY0NzA4NzYwOCAtPiAyLjYyNTQ4MjU1RSs2NDcwODc2MDggSW5leGFjdCBSb3VuZGVkCit4Y29tMjgxIGNvbXBhcmUgODQyMjQ4NDEuMCAyLjYyNTQ4MjU1RSs2NDcwODc2MDggLT4gLTEKK3hkaXYyODEgZGl2aWRlIDg0MjI0ODQxLjAgMi42MjU0ODI1NUUrNjQ3MDg3NjA4IC0+IDMuMjA3OTc1NjVFLTY0NzA4NzYwMSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyODEgZGl2aWRlaW50IDg0MjI0ODQxLjAgMi42MjU0ODI1NUUrNjQ3MDg3NjA4IC0+IDAKK3htdWwyODEgbXVsdGlwbHkgODQyMjQ4NDEuMCAyLjYyNTQ4MjU1RSs2NDcwODc2MDggLT4gMi4yMTEzMDg1MEUrNjQ3MDg3NjE2IEluZXhhY3QgUm91bmRlZAoreHBvdzI4MSBwb3dlciA4NDIyNDg0MS4wIDMgLT4gNS45NzQ3NjE4NUUrMjMgSW5leGFjdCBSb3VuZGVkCit4cmVtMjgxIHJlbWFpbmRlciA4NDIyNDg0MS4wIDIuNjI1NDgyNTVFKzY0NzA4NzYwOCAtPiA4NDIyNDg0MS4wCit4c3ViMjgxIHN1YnRyYWN0IDg0MjI0ODQxLjAgMi42MjU0ODI1NUUrNjQ3MDg3NjA4IC0+IC0yLjYyNTQ4MjU1RSs2NDcwODc2MDggSW5leGFjdCBSb3VuZGVkCit4YWRkMjgyIGFkZCAtNjQ0MTM2OTguOSAtNjY3NC4xMDU1RS03MDEwNDc4NTIgLT4gLTY0NDEzNjk4LjkgSW5leGFjdCBSb3VuZGVkCit4Y29tMjgyIGNvbXBhcmUgLTY0NDEzNjk4LjkgLTY2NzQuMTA1NUUtNzAxMDQ3ODUyIC0+IC0xCit4ZGl2MjgyIGRpdmlkZSAtNjQ0MTM2OTguOSAtNjY3NC4xMDU1RS03MDEwNDc4NTIgLT4gOS42NTEyODU2OUUrNzAxMDQ3ODU1IEluZXhhY3QgUm91bmRlZAoreGR2aTI4MiBkaXZpZGVpbnQgLTY0NDEzNjk4LjkgLTY2NzQuMTA1NUUtNzAxMDQ3ODUyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjgyIG11bHRpcGx5IC02NDQxMzY5OC45IC02Njc0LjEwNTVFLTcwMTA0Nzg1MiAtPiA0LjI5OTAzODIyRS03MDEwNDc4NDEgSW5leGFjdCBSb3VuZGVkCit4cG93MjgyIHBvd2VyIC02NDQxMzY5OC45IC03IC0+IC0yLjE3MzQ2MzM4RS01NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yODIgcmVtYWluZGVyIC02NDQxMzY5OC45IC02Njc0LjEwNTVFLTcwMTA0Nzg1MiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjI4MiBzdWJ0cmFjdCAtNjQ0MTM2OTguOSAtNjY3NC4xMDU1RS03MDEwNDc4NTIgLT4gLTY0NDEzNjk4LjkgSW5leGFjdCBSb3VuZGVkCit4YWRkMjgzIGFkZCAtNjIuNTA1OTIwOCA5LjU3OTU3NzlFLTg5ODM1MDAxMiAtPiAtNjIuNTA1OTIwOCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yODMgY29tcGFyZSAtNjIuNTA1OTIwOCA5LjU3OTU3NzlFLTg5ODM1MDAxMiAtPiAtMQoreGRpdjI4MyBkaXZpZGUgLTYyLjUwNTkyMDggOS41Nzk1Nzc5RS04OTgzNTAwMTIgLT4gLTYuNTI0OTEzODhFKzg5ODM1MDAxMiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyODMgZGl2aWRlaW50IC02Mi41MDU5MjA4IDkuNTc5NTc3OUUtODk4MzUwMDEyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjgzIG11bHRpcGx5IC02Mi41MDU5MjA4IDkuNTc5NTc3OUUtODk4MzUwMDEyIC0+IC01Ljk4NzgwMzM4RS04OTgzNTAwMTAgSW5leGFjdCBSb3VuZGVkCit4cG93MjgzIHBvd2VyIC02Mi41MDU5MjA4IDEwIC0+IDkuMTAzNTY2NTlFKzE3IEluZXhhY3QgUm91bmRlZAoreHJlbTI4MyByZW1haW5kZXIgLTYyLjUwNTkyMDggOS41Nzk1Nzc5RS04OTgzNTAwMTIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyODMgc3VidHJhY3QgLTYyLjUwNTkyMDggOS41Nzk1Nzc5RS04OTgzNTAwMTIgLT4gLTYyLjUwNTkyMDggSW5leGFjdCBSb3VuZGVkCit4YWRkMjg0IGFkZCA5MDkwOTUwLjgwIDQzNi40MDA5MzIgLT4gOTA5MTM4Ny4yMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yODQgY29tcGFyZSA5MDkwOTUwLjgwIDQzNi40MDA5MzIgLT4gMQoreGRpdjI4NCBkaXZpZGUgOTA5MDk1MC44MCA0MzYuNDAwOTMyIC0+IDIwODMxLjY0ODUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjg0IGRpdmlkZWludCA5MDkwOTUwLjgwIDQzNi40MDA5MzIgLT4gMjA4MzEKK3htdWwyODQgbXVsdGlwbHkgOTA5MDk1MC44MCA0MzYuNDAwOTMyIC0+IDMuOTY3Mjk5NDBFKzkgSW5leGFjdCBSb3VuZGVkCit4cG93Mjg0IHBvd2VyIDkwOTA5NTAuODAgNDM2IC0+IDguOTg3ODk1NTdFKzMwMzMgSW5leGFjdCBSb3VuZGVkCit4cmVtMjg0IHJlbWFpbmRlciA5MDkwOTUwLjgwIDQzNi40MDA5MzIgLT4gMjgyLjk4NTUwOAoreHN1YjI4NCBzdWJ0cmFjdCA5MDkwOTUwLjgwIDQzNi40MDA5MzIgLT4gOTA5MDUxNC40MCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyODUgYWRkIC04OTgzMzgyNS43RSszMjkyMDUzOTMgLTc3OTQzMC4xOTQgLT4gLTguOTgzMzgyNTdFKzMyOTIwNTQwMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yODUgY29tcGFyZSAtODk4MzM4MjUuN0UrMzI5MjA1MzkzIC03Nzk0MzAuMTk0IC0+IC0xCit4ZGl2Mjg1IGRpdmlkZSAtODk4MzM4MjUuN0UrMzI5MjA1MzkzIC03Nzk0MzAuMTk0IC0+IDEuMTUyNTU3NjhFKzMyOTIwNTM5NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyODUgZGl2aWRlaW50IC04OTgzMzgyNS43RSszMjkyMDUzOTMgLTc3OTQzMC4xOTQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyODUgbXVsdGlwbHkgLTg5ODMzODI1LjdFKzMyOTIwNTM5MyAtNzc5NDMwLjE5NCAtPiA3LjAwMTkxOTYyRSszMjkyMDU0MDYgSW5leGFjdCBSb3VuZGVkCit4cG93Mjg1IHBvd2VyIC04OTgzMzgyNS43RSszMjkyMDUzOTMgLTc3OTQzMCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0yODUgcmVtYWluZGVyIC04OTgzMzgyNS43RSszMjkyMDUzOTMgLTc3OTQzMC4xOTQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyODUgc3VidHJhY3QgLTg5ODMzODI1LjdFKzMyOTIwNTM5MyAtNzc5NDMwLjE5NCAtPiAtOC45ODMzODI1N0UrMzI5MjA1NDAwIEluZXhhY3QgUm91bmRlZAoreGFkZDI4NiBhZGQgLTcxNDU2Mi4wMTlFKzc1MDIwNTY4OCA3MDQwNzk3NjQgLT4gLTcuMTQ1NjIwMTlFKzc1MDIwNTY5MyBJbmV4YWN0IFJvdW5kZWQKK3hjb20yODYgY29tcGFyZSAtNzE0NTYyLjAxOUUrNzUwMjA1Njg4IDcwNDA3OTc2NCAtPiAtMQoreGRpdjI4NiBkaXZpZGUgLTcxNDU2Mi4wMTlFKzc1MDIwNTY4OCA3MDQwNzk3NjQgLT4gLTEuMDE0ODg3ODhFKzc1MDIwNTY4NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyODYgZGl2aWRlaW50IC03MTQ1NjIuMDE5RSs3NTAyMDU2ODggNzA0MDc5NzY0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMjg2IG11bHRpcGx5IC03MTQ1NjIuMDE5RSs3NTAyMDU2ODggNzA0MDc5NzY0IC0+IC01LjAzMTA4NjU4RSs3NTAyMDU3MDIgSW5leGFjdCBSb3VuZGVkCit4cG93Mjg2IHBvd2VyIC03MTQ1NjIuMDE5RSs3NTAyMDU2ODggNzA0MDc5NzY0IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTI4NiByZW1haW5kZXIgLTcxNDU2Mi4wMTlFKzc1MDIwNTY4OCA3MDQwNzk3NjQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIyODYgc3VidHJhY3QgLTcxNDU2Mi4wMTlFKzc1MDIwNTY4OCA3MDQwNzk3NjQgLT4gLTcuMTQ1NjIwMTlFKzc1MDIwNTY5MyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyODcgYWRkIC01ODQ1Mzc2NzAuIDMxMTM5Ljc3MzdFLTE0NjY4NzU2MCAtPiAtNTg0NTM3NjcwIEluZXhhY3QgUm91bmRlZAoreGNvbTI4NyBjb21wYXJlIC01ODQ1Mzc2NzAuIDMxMTM5Ljc3MzdFLTE0NjY4NzU2MCAtPiAtMQoreGRpdjI4NyBkaXZpZGUgLTU4NDUzNzY3MC4gMzExMzkuNzczN0UtMTQ2Njg3NTYwIC0+IC0xLjg3NzE0MTY4RSsxNDY2ODc1NjQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjg3IGRpdmlkZWludCAtNTg0NTM3NjcwLiAzMTEzOS43NzM3RS0xNDY2ODc1NjAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyODcgbXVsdGlwbHkgLTU4NDUzNzY3MC4gMzExMzkuNzczN0UtMTQ2Njg3NTYwIC0+IC0xLjgyMDIzNzA4RS0xNDY2ODc1NDcgSW5leGFjdCBSb3VuZGVkCit4cG93Mjg3IHBvd2VyIC01ODQ1Mzc2NzAuIDMgLT4gLTEuOTk3MjczMzdFKzI2IEluZXhhY3QgUm91bmRlZAoreHJlbTI4NyByZW1haW5kZXIgLTU4NDUzNzY3MC4gMzExMzkuNzczN0UtMTQ2Njg3NTYwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjg3IHN1YnRyYWN0IC01ODQ1Mzc2NzAuIDMxMTM5Ljc3MzdFLTE0NjY4NzU2MCAtPiAtNTg0NTM3NjcwIEluZXhhY3QgUm91bmRlZAoreGFkZDI4OCBhZGQgLTQuMTgwNzQ2NTBFLTg1ODc0Njg3OSA1NzEwMzUuMjc3RS0yNzk0MDkxNjUgLT4gNS43MTAzNTI3N0UtMjc5NDA5MTYwIEluZXhhY3QgUm91bmRlZAoreGNvbTI4OCBjb21wYXJlIC00LjE4MDc0NjUwRS04NTg3NDY4NzkgNTcxMDM1LjI3N0UtMjc5NDA5MTY1IC0+IC0xCit4ZGl2Mjg4IGRpdmlkZSAtNC4xODA3NDY1MEUtODU4NzQ2ODc5IDU3MTAzNS4yNzdFLTI3OTQwOTE2NSAtPiAtNy4zMjEzNDU0MEUtNTc5MzM3NzIwIEluZXhhY3QgUm91bmRlZAoreGR2aTI4OCBkaXZpZGVpbnQgLTQuMTgwNzQ2NTBFLTg1ODc0Njg3OSA1NzEwMzUuMjc3RS0yNzk0MDkxNjUgLT4gLTAKK3htdWwyODggbXVsdGlwbHkgLTQuMTgwNzQ2NTBFLTg1ODc0Njg3OSA1NzEwMzUuMjc3RS0yNzk0MDkxNjUgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHBvdzI4OCBwb3dlciAtNC4xODA3NDY1MEUtODU4NzQ2ODc5IDYgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMjg4IHJlbWFpbmRlciAtNC4xODA3NDY1MEUtODU4NzQ2ODc5IDU3MTAzNS4yNzdFLTI3OTQwOTE2NSAtPiAtNC4xODA3NDY1MEUtODU4NzQ2ODc5Cit4c3ViMjg4IHN1YnRyYWN0IC00LjE4MDc0NjUwRS04NTg3NDY4NzkgNTcxMDM1LjI3N0UtMjc5NDA5MTY1IC0+IC01LjcxMDM1Mjc3RS0yNzk0MDkxNjAgSW5leGFjdCBSb3VuZGVkCit4YWRkMjg5IGFkZCA1LjE1MzA5NjM1IC02OTU2NDkuMjE5RSs0NTE5NDgxODMgLT4gLTYuOTU2NDkyMTlFKzQ1MTk0ODE4OCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yODkgY29tcGFyZSA1LjE1MzA5NjM1IC02OTU2NDkuMjE5RSs0NTE5NDgxODMgLT4gMQoreGRpdjI4OSBkaXZpZGUgNS4xNTMwOTYzNSAtNjk1NjQ5LjIxOUUrNDUxOTQ4MTgzIC0+IC03LjQwNzYwNzQ3RS00NTE5NDgxODkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjg5IGRpdmlkZWludCA1LjE1MzA5NjM1IC02OTU2NDkuMjE5RSs0NTE5NDgxODMgLT4gLTAKK3htdWwyODkgbXVsdGlwbHkgNS4xNTMwOTYzNSAtNjk1NjQ5LjIxOUUrNDUxOTQ4MTgzIC0+IC0zLjU4NDc0NzQ1RSs0NTE5NDgxODkgSW5leGFjdCBSb3VuZGVkCit4cG93Mjg5IHBvd2VyIDUuMTUzMDk2MzUgLTcgLT4gMC4wMDAwMTAzNjM4NzQ5IEluZXhhY3QgUm91bmRlZAoreHJlbTI4OSByZW1haW5kZXIgNS4xNTMwOTYzNSAtNjk1NjQ5LjIxOUUrNDUxOTQ4MTgzIC0+IDUuMTUzMDk2MzUKK3hzdWIyODkgc3VidHJhY3QgNS4xNTMwOTYzNSAtNjk1NjQ5LjIxOUUrNDUxOTQ4MTgzIC0+IDYuOTU2NDkyMTlFKzQ1MTk0ODE4OCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyOTAgYWRkIC05NDAwMzAxNTMuRSs4Mzc5NzY1NyAtNC4xMTUxMDE5MyAtPiAtOS40MDAzMDE1M0UrODM3OTc2NjUgSW5leGFjdCBSb3VuZGVkCit4Y29tMjkwIGNvbXBhcmUgLTk0MDAzMDE1My5FKzgzNzk3NjU3IC00LjExNTEwMTkzIC0+IC0xCit4ZGl2MjkwIGRpdmlkZSAtOTQwMDMwMTUzLkUrODM3OTc2NTcgLTQuMTE1MTAxOTMgLT4gMi4yODQzNDIzM0UrODM3OTc2NjUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjkwIGRpdmlkZWludCAtOTQwMDMwMTUzLkUrODM3OTc2NTcgLTQuMTE1MTAxOTMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyOTAgbXVsdGlwbHkgLTk0MDAzMDE1My5FKzgzNzk3NjU3IC00LjExNTEwMTkzIC0+IDMuODY4MzE5OTBFKzgzNzk3NjY2IEluZXhhY3QgUm91bmRlZAoreHBvdzI5MCBwb3dlciAtOTQwMDMwMTUzLkUrODM3OTc2NTcgLTQgLT4gMS4yODA2NTcxMEUtMzM1MTkwNjY0IEluZXhhY3QgUm91bmRlZAoreHJlbTI5MCByZW1haW5kZXIgLTk0MDAzMDE1My5FKzgzNzk3NjU3IC00LjExNTEwMTkzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjkwIHN1YnRyYWN0IC05NDAwMzAxNTMuRSs4Mzc5NzY1NyAtNC4xMTUxMDE5MyAtPiAtOS40MDAzMDE1M0UrODM3OTc2NjUgSW5leGFjdCBSb3VuZGVkCit4YWRkMjkxIGFkZCA4OTA4OC45NjgzRSs1ODc3MzkyOTAgMS4zMTkzMjExMCAtPiA4LjkwODg5NjgzRSs1ODc3MzkyOTQgSW5leGFjdCBSb3VuZGVkCit4Y29tMjkxIGNvbXBhcmUgODkwODguOTY4M0UrNTg3NzM5MjkwIDEuMzE5MzIxMTAgLT4gMQoreGRpdjI5MSBkaXZpZGUgODkwODguOTY4M0UrNTg3NzM5MjkwIDEuMzE5MzIxMTAgLT4gNi43NTI2MzcyN0UrNTg3NzM5Mjk0IEluZXhhY3QgUm91bmRlZAoreGR2aTI5MSBkaXZpZGVpbnQgODkwODguOTY4M0UrNTg3NzM5MjkwIDEuMzE5MzIxMTAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyOTEgbXVsdGlwbHkgODkwODguOTY4M0UrNTg3NzM5MjkwIDEuMzE5MzIxMTAgLT4gMS4xNzUzNjk1NkUrNTg3NzM5Mjk1IEluZXhhY3QgUm91bmRlZAoreHBvdzI5MSBwb3dlciA4OTA4OC45NjgzRSs1ODc3MzkyOTAgMSAtPiA4LjkwODg5NjgzRSs1ODc3MzkyOTQKK3hyZW0yOTEgcmVtYWluZGVyIDg5MDg4Ljk2ODNFKzU4NzczOTI5MCAxLjMxOTMyMTEwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMjkxIHN1YnRyYWN0IDg5MDg4Ljk2ODNFKzU4NzczOTI5MCAxLjMxOTMyMTEwIC0+IDguOTA4ODk2ODNFKzU4NzczOTI5NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyOTIgYWRkIDMzMzY3NTAgNi40Nzk2MTEyNiAtPiAzMzM2NzU2LjQ4IEluZXhhY3QgUm91bmRlZAoreGNvbTI5MiBjb21wYXJlIDMzMzY3NTAgNi40Nzk2MTEyNiAtPiAxCit4ZGl2MjkyIGRpdmlkZSAzMzM2NzUwIDYuNDc5NjExMjYgLT4gNTE0OTYxLjQ0OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyOTIgZGl2aWRlaW50IDMzMzY3NTAgNi40Nzk2MTEyNiAtPiA1MTQ5NjEKK3htdWwyOTIgbXVsdGlwbHkgMzMzNjc1MCA2LjQ3OTYxMTI2IC0+IDIxNjIwODQyLjkgSW5leGFjdCBSb3VuZGVkCit4cG93MjkyIHBvd2VyIDMzMzY3NTAgNiAtPiAxLjM4MDE5OTk3RSszOSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yOTIgcmVtYWluZGVyIDMzMzY3NTAgNi40Nzk2MTEyNiAtPiAyLjkwNTkzOTE0Cit4c3ViMjkyIHN1YnRyYWN0IDMzMzY3NTAgNi40Nzk2MTEyNiAtPiAzMzM2NzQzLjUyIEluZXhhY3QgUm91bmRlZAoreGFkZDI5MyBhZGQgOTA0NjU0NjIyLiA2OTIwNjUyNzAuRSszMjkwODE5MTUgLT4gNi45MjA2NTI3MEUrMzI5MDgxOTIzIEluZXhhY3QgUm91bmRlZAoreGNvbTI5MyBjb21wYXJlIDkwNDY1NDYyMi4gNjkyMDY1MjcwLkUrMzI5MDgxOTE1IC0+IC0xCit4ZGl2MjkzIGRpdmlkZSA5MDQ2NTQ2MjIuIDY5MjA2NTI3MC5FKzMyOTA4MTkxNSAtPiAxLjMwNzE4MTA3RS0zMjkwODE5MTUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjkzIGRpdmlkZWludCA5MDQ2NTQ2MjIuIDY5MjA2NTI3MC5FKzMyOTA4MTkxNSAtPiAwCit4bXVsMjkzIG11bHRpcGx5IDkwNDY1NDYyMi4gNjkyMDY1MjcwLkUrMzI5MDgxOTE1IC0+IDYuMjYwODAwNDVFKzMyOTA4MTkzMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3cyOTMgcG93ZXIgOTA0NjU0NjIyLiA3IC0+IDQuOTU4ODM0ODVFKzYyIEluZXhhY3QgUm91bmRlZAoreHJlbTI5MyByZW1haW5kZXIgOTA0NjU0NjIyLiA2OTIwNjUyNzAuRSszMjkwODE5MTUgLT4gOTA0NjU0NjIyCit4c3ViMjkzIHN1YnRyYWN0IDkwNDY1NDYyMi4gNjkyMDY1MjcwLkUrMzI5MDgxOTE1IC0+IC02LjkyMDY1MjcwRSszMjkwODE5MjMgSW5leGFjdCBSb3VuZGVkCit4YWRkMjk0IGFkZCAzMDQ4MDQzODAgLTQ2ODEuMjM2OTggLT4gMzA0Nzk5Njk5IEluZXhhY3QgUm91bmRlZAoreGNvbTI5NCBjb21wYXJlIDMwNDgwNDM4MCAtNDY4MS4yMzY5OCAtPiAxCit4ZGl2Mjk0IGRpdmlkZSAzMDQ4MDQzODAgLTQ2ODEuMjM2OTggLT4gLTY1MTExLjkzMTIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjk0IGRpdmlkZWludCAzMDQ4MDQzODAgLTQ2ODEuMjM2OTggLT4gLTY1MTExCit4bXVsMjk0IG11bHRpcGx5IDMwNDgwNDM4MCAtNDY4MS4yMzY5OCAtPiAtMS40MjY4NjE1NEUrMTIgSW5leGFjdCBSb3VuZGVkCit4cG93Mjk0IHBvd2VyIDMwNDgwNDM4MCAtNDY4MSAtPiAxLjk4MDM3MTAyRS0zOTcxNCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yOTQgcmVtYWluZGVyIDMwNDgwNDM4MCAtNDY4MS4yMzY5OCAtPiA0MzU4Ljk5NTIyCit4c3ViMjk0IHN1YnRyYWN0IDMwNDgwNDM4MCAtNDY4MS4yMzY5OCAtPiAzMDQ4MDkwNjEgSW5leGFjdCBSb3VuZGVkCit4YWRkMjk1IGFkZCA2NzQuNTU1NjkgLTgyOTgxLjI2ODRFKzg1Mjg5MDc1MiAtPiAtOC4yOTgxMjY4NEUrODUyODkwNzU2IEluZXhhY3QgUm91bmRlZAoreGNvbTI5NSBjb21wYXJlIDY3NC41NTU2OSAtODI5ODEuMjY4NEUrODUyODkwNzUyIC0+IDEKK3hkaXYyOTUgZGl2aWRlIDY3NC41NTU2OSAtODI5ODEuMjY4NEUrODUyODkwNzUyIC0+IC04LjEyOTAxMTU2RS04NTI4OTA3NTUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjk1IGRpdmlkZWludCA2NzQuNTU1NjkgLTgyOTgxLjI2ODRFKzg1Mjg5MDc1MiAtPiAtMAoreG11bDI5NSBtdWx0aXBseSA2NzQuNTU1NjkgLTgyOTgxLjI2ODRFKzg1Mjg5MDc1MiAtPiAtNS41OTc1NDg2OEUrODUyODkwNzU5IEluZXhhY3QgUm91bmRlZAoreHBvdzI5NSBwb3dlciA2NzQuNTU1NjkgLTggLT4gMi4zMzI2OTI2NUUtMjMgSW5leGFjdCBSb3VuZGVkCit4cmVtMjk1IHJlbWFpbmRlciA2NzQuNTU1NjkgLTgyOTgxLjI2ODRFKzg1Mjg5MDc1MiAtPiA2NzQuNTU1NjkKK3hzdWIyOTUgc3VidHJhY3QgNjc0LjU1NTY5IC04Mjk4MS4yNjg0RSs4NTI4OTA3NTIgLT4gOC4yOTgxMjY4NEUrODUyODkwNzU2IEluZXhhY3QgUm91bmRlZAoreGFkZDI5NiBhZGQgLTUxMTEuNTEwMjVFLTEwODAwNjA5NiA1NDQ4ODcwLjRFKzI3OTIxMjI1NSAtPiA1LjQ0ODg3MDQwRSsyNzkyMTIyNjEgSW5leGFjdCBSb3VuZGVkCit4Y29tMjk2IGNvbXBhcmUgLTUxMTEuNTEwMjVFLTEwODAwNjA5NiA1NDQ4ODcwLjRFKzI3OTIxMjI1NSAtPiAtMQoreGRpdjI5NiBkaXZpZGUgLTUxMTEuNTEwMjVFLTEwODAwNjA5NiA1NDQ4ODcwLjRFKzI3OTIxMjI1NSAtPiAtOS4zODA4NjIyMkUtMzg3MjE4MzU1IEluZXhhY3QgUm91bmRlZAoreGR2aTI5NiBkaXZpZGVpbnQgLTUxMTEuNTEwMjVFLTEwODAwNjA5NiA1NDQ4ODcwLjRFKzI3OTIxMjI1NSAtPiAtMAoreG11bDI5NiBtdWx0aXBseSAtNTExMS41MTAyNUUtMTA4MDA2MDk2IDU0NDg4NzAuNEUrMjc5MjEyMjU1IC0+IC0yLjc4NTE5NTY5RSsxNzEyMDYxNjkgSW5leGFjdCBSb3VuZGVkCit4cG93Mjk2IHBvd2VyIC01MTExLjUxMDI1RS0xMDgwMDYwOTYgNSAtPiAtMy40ODkzNjMyM0UtNTQwMDMwNDYyIEluZXhhY3QgUm91bmRlZAoreHJlbTI5NiByZW1haW5kZXIgLTUxMTEuNTEwMjVFLTEwODAwNjA5NiA1NDQ4ODcwLjRFKzI3OTIxMjI1NSAtPiAtNS4xMTE1MTAyNUUtMTA4MDA2MDkzCit4c3ViMjk2IHN1YnRyYWN0IC01MTExLjUxMDI1RS0xMDgwMDYwOTYgNTQ0ODg3MC40RSsyNzkyMTIyNTUgLT4gLTUuNDQ4ODcwNDBFKzI3OTIxMjI2MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQyOTcgYWRkIC0yNjIzLjQ1MDY4IC00NjY0NjM5MzguIC0+IC00NjY0NjY1NjEgSW5leGFjdCBSb3VuZGVkCit4Y29tMjk3IGNvbXBhcmUgLTI2MjMuNDUwNjggLTQ2NjQ2MzkzOC4gLT4gMQoreGRpdjI5NyBkaXZpZGUgLTI2MjMuNDUwNjggLTQ2NjQ2MzkzOC4gLT4gMC4wMDAwMDU2MjQxMjMyNSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyOTcgZGl2aWRlaW50IC0yNjIzLjQ1MDY4IC00NjY0NjM5MzguIC0+IDAKK3htdWwyOTcgbXVsdGlwbHkgLTI2MjMuNDUwNjggLTQ2NjQ2MzkzOC4gLT4gMS4yMjM3NDUxNEUrMTIgSW5leGFjdCBSb3VuZGVkCit4cG93Mjk3IHBvd2VyIC0yNjIzLjQ1MDY4IC00NjY0NjM5MzggLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMjk3IHJlbWFpbmRlciAtMjYyMy40NTA2OCAtNDY2NDYzOTM4LiAtPiAtMjYyMy40NTA2OAoreHN1YjI5NyBzdWJ0cmFjdCAtMjYyMy40NTA2OCAtNDY2NDYzOTM4LiAtPiA0NjY0NjEzMTUgSW5leGFjdCBSb3VuZGVkCit4YWRkMjk4IGFkZCAyOTkzNTAuNDM1IDMzNzMuMzM1NTEgLT4gMzAyNzIzLjc3MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20yOTggY29tcGFyZSAyOTkzNTAuNDM1IDMzNzMuMzM1NTEgLT4gMQoreGRpdjI5OCBkaXZpZGUgMjk5MzUwLjQzNSAzMzczLjMzNTUxIC0+IDg4Ljc0MDE5MDMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMjk4IGRpdmlkZWludCAyOTkzNTAuNDM1IDMzNzMuMzM1NTEgLT4gODgKK3htdWwyOTggbXVsdGlwbHkgMjk5MzUwLjQzNSAzMzczLjMzNTUxIC0+IDEuMDA5ODA5NDVFKzkgSW5leGFjdCBSb3VuZGVkCit4cG93Mjk4IHBvd2VyIDI5OTM1MC40MzUgMzM3MyAtPiAxLjQyODE3MzcwRSsxODQ3MSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0yOTggcmVtYWluZGVyIDI5OTM1MC40MzUgMzM3My4zMzU1MSAtPiAyNDk2LjkxMDEyCit4c3ViMjk4IHN1YnRyYWN0IDI5OTM1MC40MzUgMzM3My4zMzU1MSAtPiAyOTU5NzcuMDk5IEluZXhhY3QgUm91bmRlZAoreGFkZDI5OSBhZGQgLTY1ODk5NDcuODAgLTI0NDguNzU5MzNFLTU5MTU0OTczNCAtPiAtNjU4OTk0Ny44MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20yOTkgY29tcGFyZSAtNjU4OTk0Ny44MCAtMjQ0OC43NTkzM0UtNTkxNTQ5NzM0IC0+IC0xCit4ZGl2Mjk5IGRpdmlkZSAtNjU4OTk0Ny44MCAtMjQ0OC43NTkzM0UtNTkxNTQ5NzM0IC0+IDIuNjkxMTM3MzlFKzU5MTU0OTczNyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkyOTkgZGl2aWRlaW50IC02NTg5OTQ3LjgwIC0yNDQ4Ljc1OTMzRS01OTE1NDk3MzQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwyOTkgbXVsdGlwbHkgLTY1ODk5NDcuODAgLTI0NDguNzU5MzNFLTU5MTU0OTczNCAtPiAxLjYxMzcxOTYyRS01OTE1NDk3MjQgSW5leGFjdCBSb3VuZGVkCit4cG93Mjk5IHBvd2VyIC02NTg5OTQ3LjgwIC0yIC0+IDIuMzAyNjkzMDVFLTE0IEluZXhhY3QgUm91bmRlZAoreHJlbTI5OSByZW1haW5kZXIgLTY1ODk5NDcuODAgLTI0NDguNzU5MzNFLTU5MTU0OTczNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjI5OSBzdWJ0cmFjdCAtNjU4OTk0Ny44MCAtMjQ0OC43NTkzM0UtNTkxNTQ5NzM0IC0+IC02NTg5OTQ3LjgwIEluZXhhY3QgUm91bmRlZAoreGFkZDMwMCBhZGQgMzc3NC41MzU4RS00OTEwOTA1MjAgMTczLjA2MDA5MCAtPiAxNzMuMDYwMDkwIEluZXhhY3QgUm91bmRlZAoreGNvbTMwMCBjb21wYXJlIDM3NzQuNTM1OEUtNDkxMDkwNTIwIDE3My4wNjAwOTAgLT4gLTEKK3hkaXYzMDAgZGl2aWRlIDM3NzQuNTM1OEUtNDkxMDkwNTIwIDE3My4wNjAwOTAgLT4gMi4xODEwNTUwM0UtNDkxMDkwNTE5IEluZXhhY3QgUm91bmRlZAoreGR2aTMwMCBkaXZpZGVpbnQgMzc3NC41MzU4RS00OTEwOTA1MjAgMTczLjA2MDA5MCAtPiAwCit4bXVsMzAwIG11bHRpcGx5IDM3NzQuNTM1OEUtNDkxMDkwNTIwIDE3My4wNjAwOTAgLT4gNi41MzIyMTUwNUUtNDkxMDkwNTE1IEluZXhhY3QgUm91bmRlZAoreHBvdzMwMCBwb3dlciAzNzc0LjUzNThFLTQ5MTA5MDUyMCAxNzMgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzAwIHJlbWFpbmRlciAzNzc0LjUzNThFLTQ5MTA5MDUyMCAxNzMuMDYwMDkwIC0+IDMuNzc0NTM1OEUtNDkxMDkwNTE3Cit4c3ViMzAwIHN1YnRyYWN0IDM3NzQuNTM1OEUtNDkxMDkwNTIwIDE3My4wNjAwOTAgLT4gLTE3My4wNjAwOTAgSW5leGFjdCBSb3VuZGVkCit4YWRkMzAxIGFkZCAtMTMuNjc4MzY5MCAtNDUzLjYxMDExNyAtPiAtNDY3LjI4ODQ4NiBSb3VuZGVkCit4Y29tMzAxIGNvbXBhcmUgLTEzLjY3ODM2OTAgLTQ1My42MTAxMTcgLT4gMQoreGRpdjMwMSBkaXZpZGUgLTEzLjY3ODM2OTAgLTQ1My42MTAxMTcgLT4gMC4wMzAxNTQ0NjE5IEluZXhhY3QgUm91bmRlZAoreGR2aTMwMSBkaXZpZGVpbnQgLTEzLjY3ODM2OTAgLTQ1My42MTAxMTcgLT4gMAoreG11bDMwMSBtdWx0aXBseSAtMTMuNjc4MzY5MCAtNDUzLjYxMDExNyAtPiA2MjA0LjY0NjU2IEluZXhhY3QgUm91bmRlZAoreHBvdzMwMSBwb3dlciAtMTMuNjc4MzY5MCAtNDU0IC0+IDEuNzM5NDg1MzVFLTUxNiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMDEgcmVtYWluZGVyIC0xMy42NzgzNjkwIC00NTMuNjEwMTE3IC0+IC0xMy42NzgzNjkwCit4c3ViMzAxIHN1YnRyYWN0IC0xMy42NzgzNjkwIC00NTMuNjEwMTE3IC0+IDQzOS45MzE3NDggUm91bmRlZAoreGFkZDMwMiBhZGQgLTk5MDEwMDkyNy5FLTYxNTI0NDYzNCAyMjM4MDEuNDIxRSsyNDc2MzI2MTggLT4gMi4yMzgwMTQyMUUrMjQ3NjMyNjIzIEluZXhhY3QgUm91bmRlZAoreGNvbTMwMiBjb21wYXJlIC05OTAxMDA5MjcuRS02MTUyNDQ2MzQgMjIzODAxLjQyMUUrMjQ3NjMyNjE4IC0+IC0xCit4ZGl2MzAyIGRpdmlkZSAtOTkwMTAwOTI3LkUtNjE1MjQ0NjM0IDIyMzgwMS40MjFFKzI0NzYzMjYxOCAtPiAtNC40MjQwMTUzN0UtODYyODc3MjQ5IEluZXhhY3QgUm91bmRlZAoreGR2aTMwMiBkaXZpZGVpbnQgLTk5MDEwMDkyNy5FLTYxNTI0NDYzNCAyMjM4MDEuNDIxRSsyNDc2MzI2MTggLT4gLTAKK3htdWwzMDIgbXVsdGlwbHkgLTk5MDEwMDkyNy5FLTYxNTI0NDYzNCAyMjM4MDEuNDIxRSsyNDc2MzI2MTggLT4gLTIuMjE1ODU5OTRFLTM2NzYxMjAwMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMDIgcG93ZXIgLTk5MDEwMDkyNy5FLTYxNTI0NDYzNCAyIC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTMwMiByZW1haW5kZXIgLTk5MDEwMDkyNy5FLTYxNTI0NDYzNCAyMjM4MDEuNDIxRSsyNDc2MzI2MTggLT4gLTkuOTAxMDA5MjdFLTYxNTI0NDYyNgoreHN1YjMwMiBzdWJ0cmFjdCAtOTkwMTAwOTI3LkUtNjE1MjQ0NjM0IDIyMzgwMS40MjFFKzI0NzYzMjYxOCAtPiAtMi4yMzgwMTQyMUUrMjQ3NjMyNjIzIEluZXhhY3QgUm91bmRlZAoreGFkZDMwMyBhZGQgMTI3NS4xMDI5MiAtNjY3OTY1MzUzIC0+IC02Njc5NjQwNzggSW5leGFjdCBSb3VuZGVkCit4Y29tMzAzIGNvbXBhcmUgMTI3NS4xMDI5MiAtNjY3OTY1MzUzIC0+IDEKK3hkaXYzMDMgZGl2aWRlIDEyNzUuMTAyOTIgLTY2Nzk2NTM1MyAtPiAtMC4wMDAwMDE5MDg5MzU3MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMDMgZGl2aWRlaW50IDEyNzUuMTAyOTIgLTY2Nzk2NTM1MyAtPiAtMAoreG11bDMwMyBtdWx0aXBseSAxMjc1LjEwMjkyIC02Njc5NjUzNTMgLT4gLTguNTE3MjQ1NzJFKzExIEluZXhhY3QgUm91bmRlZAoreHBvdzMwMyBwb3dlciAxMjc1LjEwMjkyIC02Njc5NjUzNTMgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzAzIHJlbWFpbmRlciAxMjc1LjEwMjkyIC02Njc5NjUzNTMgLT4gMTI3NS4xMDI5MgoreHN1YjMwMyBzdWJ0cmFjdCAxMjc1LjEwMjkyIC02Njc5NjUzNTMgLT4gNjY3OTY2NjI4IEluZXhhY3QgUm91bmRlZAoreGFkZDMwNCBhZGQgLTguNzYzNzU0ODBFLTU5Njc5MjE5NyA5OTIuMDc3MzYxIC0+IDk5Mi4wNzczNjEgSW5leGFjdCBSb3VuZGVkCit4Y29tMzA0IGNvbXBhcmUgLTguNzYzNzU0ODBFLTU5Njc5MjE5NyA5OTIuMDc3MzYxIC0+IC0xCit4ZGl2MzA0IGRpdmlkZSAtOC43NjM3NTQ4MEUtNTk2NzkyMTk3IDk5Mi4wNzczNjEgLT4gLTguODMzNzQxMzRFLTU5Njc5MjIwMCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMDQgZGl2aWRlaW50IC04Ljc2Mzc1NDgwRS01OTY3OTIxOTcgOTkyLjA3NzM2MSAtPiAtMAoreG11bDMwNCBtdWx0aXBseSAtOC43NjM3NTQ4MEUtNTk2NzkyMTk3IDk5Mi4wNzczNjEgLT4gLTguNjk0MzIyNzNFLTU5Njc5MjE5NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMDQgcG93ZXIgLTguNzYzNzU0ODBFLTU5Njc5MjE5NyA5OTIgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzA0IHJlbWFpbmRlciAtOC43NjM3NTQ4MEUtNTk2NzkyMTk3IDk5Mi4wNzczNjEgLT4gLTguNzYzNzU0ODBFLTU5Njc5MjE5NworeHN1YjMwNCBzdWJ0cmFjdCAtOC43NjM3NTQ4MEUtNTk2NzkyMTk3IDk5Mi4wNzczNjEgLT4gLTk5Mi4wNzczNjEgSW5leGFjdCBSb3VuZGVkCit4YWRkMzA1IGFkZCA5NTMuOTc2OTM1RSszODU0NDQ3MjAgOTY1MDMuMzM3OCAtPiA5LjUzOTc2OTM1RSszODU0NDQ3MjIgSW5leGFjdCBSb3VuZGVkCit4Y29tMzA1IGNvbXBhcmUgOTUzLjk3NjkzNUUrMzg1NDQ0NzIwIDk2NTAzLjMzNzggLT4gMQoreGRpdjMwNSBkaXZpZGUgOTUzLjk3NjkzNUUrMzg1NDQ0NzIwIDk2NTAzLjMzNzggLT4gOS44ODU0Mjk0MkUrMzg1NDQ0NzE3IEluZXhhY3QgUm91bmRlZAoreGR2aTMwNSBkaXZpZGVpbnQgOTUzLjk3NjkzNUUrMzg1NDQ0NzIwIDk2NTAzLjMzNzggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzMDUgbXVsdGlwbHkgOTUzLjk3NjkzNUUrMzg1NDQ0NzIwIDk2NTAzLjMzNzggLT4gOS4yMDYxOTU4NEUrMzg1NDQ0NzI3IEluZXhhY3QgUm91bmRlZAoreHBvdzMwNSBwb3dlciA5NTMuOTc2OTM1RSszODU0NDQ3MjAgOTY1MDMgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMzA1IHJlbWFpbmRlciA5NTMuOTc2OTM1RSszODU0NDQ3MjAgOTY1MDMuMzM3OCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjMwNSBzdWJ0cmFjdCA5NTMuOTc2OTM1RSszODU0NDQ3MjAgOTY1MDMuMzM3OCAtPiA5LjUzOTc2OTM1RSszODU0NDQ3MjIgSW5leGFjdCBSb3VuZGVkCit4YWRkMzA2IGFkZCAyMTM1NzcxNTIgLTk4NjcxMDA3M0UrMzE5MDAwNDYgLT4gLTkuODY3MTAwNzNFKzMxOTAwMDU0IEluZXhhY3QgUm91bmRlZAoreGNvbTMwNiBjb21wYXJlIDIxMzU3NzE1MiAtOTg2NzEwMDczRSszMTkwMDA0NiAtPiAxCit4ZGl2MzA2IGRpdmlkZSAyMTM1NzcxNTIgLTk4NjcxMDA3M0UrMzE5MDAwNDYgLT4gLTIuMTY0NTM4MDdFLTMxOTAwMDQ3IEluZXhhY3QgUm91bmRlZAoreGR2aTMwNiBkaXZpZGVpbnQgMjEzNTc3MTUyIC05ODY3MTAwNzNFKzMxOTAwMDQ2IC0+IC0wCit4bXVsMzA2IG11bHRpcGx5IDIxMzU3NzE1MiAtOTg2NzEwMDczRSszMTkwMDA0NiAtPiAtMi4xMDczODcyN0UrMzE5MDAwNjMgSW5leGFjdCBSb3VuZGVkCit4cG93MzA2IHBvd2VyIDIxMzU3NzE1MiAtMTAgLT4gNS4wNjM1MTQ4N0UtODQgSW5leGFjdCBSb3VuZGVkCit4cmVtMzA2IHJlbWFpbmRlciAyMTM1NzcxNTIgLTk4NjcxMDA3M0UrMzE5MDAwNDYgLT4gMjEzNTc3MTUyCit4c3ViMzA2IHN1YnRyYWN0IDIxMzU3NzE1MiAtOTg2NzEwMDczRSszMTkwMDA0NiAtPiA5Ljg2NzEwMDczRSszMTkwMDA1NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMDcgYWRkIDkxMzkzLjkzOThFLTMyMzQzOTIyOCAtMTM1LjcwMTAwMCAtPiAtMTM1LjcwMTAwMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMDcgY29tcGFyZSA5MTM5My45Mzk4RS0zMjM0MzkyMjggLTEzNS43MDEwMDAgLT4gMQoreGRpdjMwNyBkaXZpZGUgOTEzOTMuOTM5OEUtMzIzNDM5MjI4IC0xMzUuNzAxMDAwIC0+IC02LjczNDk0OTYyRS0zMjM0MzkyMjYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzA3IGRpdmlkZWludCA5MTM5My45Mzk4RS0zMjM0MzkyMjggLTEzNS43MDEwMDAgLT4gLTAKK3htdWwzMDcgbXVsdGlwbHkgOTEzOTMuOTM5OEUtMzIzNDM5MjI4IC0xMzUuNzAxMDAwIC0+IC0xLjI0MDIyNDkwRS0zMjM0MzkyMjEgSW5leGFjdCBSb3VuZGVkCit4cG93MzA3IHBvd2VyIDkxMzkzLjkzOThFLTMyMzQzOTIyOCAtMTM2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTMwNyByZW1haW5kZXIgOTEzOTMuOTM5OEUtMzIzNDM5MjI4IC0xMzUuNzAxMDAwIC0+IDkuMTM5MzkzOThFLTMyMzQzOTIyNAoreHN1YjMwNyBzdWJ0cmFjdCA5MTM5My45Mzk4RS0zMjM0MzkyMjggLTEzNS43MDEwMDAgLT4gMTM1LjcwMTAwMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMDggYWRkIC0zOTYuNTAzNTU3IDQ1NzU3MjY0LkUtMjU0MzYzNzg4IC0+IC0zOTYuNTAzNTU3IEluZXhhY3QgUm91bmRlZAoreGNvbTMwOCBjb21wYXJlIC0zOTYuNTAzNTU3IDQ1NzU3MjY0LkUtMjU0MzYzNzg4IC0+IC0xCit4ZGl2MzA4IGRpdmlkZSAtMzk2LjUwMzU1NyA0NTc1NzI2NC5FLTI1NDM2Mzc4OCAtPiAtOC42NjUzNjg1NkUrMjU0MzYzNzgyIEluZXhhY3QgUm91bmRlZAoreGR2aTMwOCBkaXZpZGVpbnQgLTM5Ni41MDM1NTcgNDU3NTcyNjQuRS0yNTQzNjM3ODggLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzMDggbXVsdGlwbHkgLTM5Ni41MDM1NTcgNDU3NTcyNjQuRS0yNTQzNjM3ODggLT4gLTEuODE0MjkxNzlFLTI1NDM2Mzc3OCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMDggcG93ZXIgLTM5Ni41MDM1NTcgNSAtPiAtOS44MDAyMTEyOEUrMTIgSW5leGFjdCBSb3VuZGVkCit4cmVtMzA4IHJlbWFpbmRlciAtMzk2LjUwMzU1NyA0NTc1NzI2NC5FLTI1NDM2Mzc4OCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjMwOCBzdWJ0cmFjdCAtMzk2LjUwMzU1NyA0NTc1NzI2NC5FLTI1NDM2Mzc4OCAtPiAtMzk2LjUwMzU1NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMDkgYWRkIDU5ODA3ODQ2LjEgMS41MzM0NTI1NCAtPiA1OTgwNzg0Ny42IEluZXhhY3QgUm91bmRlZAoreGNvbTMwOSBjb21wYXJlIDU5ODA3ODQ2LjEgMS41MzM0NTI1NCAtPiAxCit4ZGl2MzA5IGRpdmlkZSA1OTgwNzg0Ni4xIDEuNTMzNDUyNTQgLT4gMzkwMDIwODQuOSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMDkgZGl2aWRlaW50IDU5ODA3ODQ2LjEgMS41MzM0NTI1NCAtPiAzOTAwMjA4NAoreG11bDMwOSBtdWx0aXBseSA1OTgwNzg0Ni4xIDEuNTMzNDUyNTQgLT4gOTE3MTI0OTMuNSBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMDkgcG93ZXIgNTk4MDc4NDYuMSAyIC0+IDMuNTc2OTc4NDZFKzE1IEluZXhhY3QgUm91bmRlZAoreHJlbTMwOSByZW1haW5kZXIgNTk4MDc4NDYuMSAxLjUzMzQ1MjU0IC0+IDEuMzI0OTA2NjQKK3hzdWIzMDkgc3VidHJhY3QgNTk4MDc4NDYuMSAxLjUzMzQ1MjU0IC0+IDU5ODA3ODQ0LjYgSW5leGFjdCBSb3VuZGVkCit4YWRkMzEwIGFkZCAtODA0NjE1OC40NSA4LjM2MzUzOTcgLT4gLTgwNDYxNTAuMDkgSW5leGFjdCBSb3VuZGVkCit4Y29tMzEwIGNvbXBhcmUgLTgwNDYxNTguNDUgOC4zNjM1Mzk3IC0+IC0xCit4ZGl2MzEwIGRpdmlkZSAtODA0NjE1OC40NSA4LjM2MzUzOTcgLT4gLTk2MjA1MS44MDMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzEwIGRpdmlkZWludCAtODA0NjE1OC40NSA4LjM2MzUzOTcgLT4gLTk2MjA1MQoreG11bDMxMCBtdWx0aXBseSAtODA0NjE1OC40NSA4LjM2MzUzOTcgLT4gLTY3Mjk0MzY1LjYgSW5leGFjdCBSb3VuZGVkCit4cG93MzEwIHBvd2VyIC04MDQ2MTU4LjQ1IDggLT4gMS43NTY3NDQ2N0UrNTUgSW5leGFjdCBSb3VuZGVkCit4cmVtMzEwIHJlbWFpbmRlciAtODA0NjE1OC40NSA4LjM2MzUzOTcgLT4gLTYuNzE4MDc1MworeHN1YjMxMCBzdWJ0cmFjdCAtODA0NjE1OC40NSA4LjM2MzUzOTcgLT4gLTgwNDYxNjYuODEgSW5leGFjdCBSb3VuZGVkCit4YWRkMzExIGFkZCA1NS4xMTIzMzgxRSs1MDYyNzI1MCAtOTQuMDM1NTA0N0UtMTYyNTQwMzE2IC0+IDUuNTExMjMzODFFKzUwNjI3MjUxIEluZXhhY3QgUm91bmRlZAoreGNvbTMxMSBjb21wYXJlIDU1LjExMjMzODFFKzUwNjI3MjUwIC05NC4wMzU1MDQ3RS0xNjI1NDAzMTYgLT4gMQoreGRpdjMxMSBkaXZpZGUgNTUuMTEyMzM4MUUrNTA2MjcyNTAgLTk0LjAzNTUwNDdFLTE2MjU0MDMxNiAtPiAtNS44NjA4MDEwMUUrMjEzMTY3NTY1IEluZXhhY3QgUm91bmRlZAoreGR2aTMxMSBkaXZpZGVpbnQgNTUuMTEyMzM4MUUrNTA2MjcyNTAgLTk0LjAzNTUwNDdFLTE2MjU0MDMxNiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDMxMSBtdWx0aXBseSA1NS4xMTIzMzgxRSs1MDYyNzI1MCAtOTQuMDM1NTA0N0UtMTYyNTQwMzE2IC0+IC01LjE4MjUxNjUzRS0xMTE5MTMwNjMgSW5leGFjdCBSb3VuZGVkCit4cG93MzExIHBvd2VyIDU1LjExMjMzODFFKzUwNjI3MjUwIC05IC0+IDIuMTMxODY4ODFFLTQ1NTY0NTI2NiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMTEgcmVtYWluZGVyIDU1LjExMjMzODFFKzUwNjI3MjUwIC05NC4wMzU1MDQ3RS0xNjI1NDAzMTYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzMTEgc3VidHJhY3QgNTUuMTEyMzM4MUUrNTA2MjcyNTAgLTk0LjAzNTUwNDdFLTE2MjU0MDMxNiAtPiA1LjUxMTIzMzgxRSs1MDYyNzI1MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMTIgYWRkIC05NDguMDM4MDU0IDM1ODAuODQ1MTAgLT4gMjYzMi44MDcwNSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMTIgY29tcGFyZSAtOTQ4LjAzODA1NCAzNTgwLjg0NTEwIC0+IC0xCit4ZGl2MzEyIGRpdmlkZSAtOTQ4LjAzODA1NCAzNTgwLjg0NTEwIC0+IC0wLjI2NDc1MjYwMSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMTIgZGl2aWRlaW50IC05NDguMDM4MDU0IDM1ODAuODQ1MTAgLT4gLTAKK3htdWwzMTIgbXVsdGlwbHkgLTk0OC4wMzgwNTQgMzU4MC44NDUxMCAtPiAtMzM5NDc3Ny40MiBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMTIgcG93ZXIgLTk0OC4wMzgwNTQgMzU4MSAtPiAtMS4wMzA1ODI4OEUrMTA2NjAgSW5leGFjdCBSb3VuZGVkCit4cmVtMzEyIHJlbWFpbmRlciAtOTQ4LjAzODA1NCAzNTgwLjg0NTEwIC0+IC05NDguMDM4MDU0Cit4c3ViMzEyIHN1YnRyYWN0IC05NDguMDM4MDU0IDM1ODAuODQ1MTAgLT4gLTQ1MjguODgzMTUgSW5leGFjdCBSb3VuZGVkCit4YWRkMzEzIGFkZCAtNjAyNi40Mjc1MiAtMTQuMjI4NjQwNkUtMzM0OTIxMzY0IC0+IC02MDI2LjQyNzUyIEluZXhhY3QgUm91bmRlZAoreGNvbTMxMyBjb21wYXJlIC02MDI2LjQyNzUyIC0xNC4yMjg2NDA2RS0zMzQ5MjEzNjQgLT4gLTEKK3hkaXYzMTMgZGl2aWRlIC02MDI2LjQyNzUyIC0xNC4yMjg2NDA2RS0zMzQ5MjEzNjQgLT4gNC4yMzU0MjA0NEUrMzM0OTIxMzY2IEluZXhhY3QgUm91bmRlZAoreGR2aTMxMyBkaXZpZGVpbnQgLTYwMjYuNDI3NTIgLTE0LjIyODY0MDZFLTMzNDkyMTM2NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDMxMyBtdWx0aXBseSAtNjAyNi40Mjc1MiAtMTQuMjI4NjQwNkUtMzM0OTIxMzY0IC0+IDguNTc0Nzg3MTNFLTMzNDkyMTM2MCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMTMgcG93ZXIgLTYwMjYuNDI3NTIgLTEgLT4gLTAuMDAwMTY1OTM1Nzg4IEluZXhhY3QgUm91bmRlZAoreHJlbTMxMyByZW1haW5kZXIgLTYwMjYuNDI3NTIgLTE0LjIyODY0MDZFLTMzNDkyMTM2NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjMxMyBzdWJ0cmFjdCAtNjAyNi40Mjc1MiAtMTQuMjI4NjQwNkUtMzM0OTIxMzY0IC0+IC02MDI2LjQyNzUyIEluZXhhY3QgUm91bmRlZAoreGFkZDMxNCBhZGQgNzk1NTEuNTAxNCAtNTM4LjE4NjIyOSAtPiA3OTAxMy4zMTUyIEluZXhhY3QgUm91bmRlZAoreGNvbTMxNCBjb21wYXJlIDc5NTUxLjUwMTQgLTUzOC4xODYyMjkgLT4gMQoreGRpdjMxNCBkaXZpZGUgNzk1NTEuNTAxNCAtNTM4LjE4NjIyOSAtPiAtMTQ3LjgxNDA3OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMTQgZGl2aWRlaW50IDc5NTUxLjUwMTQgLTUzOC4xODYyMjkgLT4gLTE0NworeG11bDMxNCBtdWx0aXBseSA3OTU1MS41MDE0IC01MzguMTg2MjI5IC0+IC00MjgxMzUyMi41IEluZXhhY3QgUm91bmRlZAoreHBvdzMxNCBwb3dlciA3OTU1MS41MDE0IC01MzggLT4gMi44MjU5OTM4OUUtMjYzNyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMTQgcmVtYWluZGVyIDc5NTUxLjUwMTQgLTUzOC4xODYyMjkgLT4gNDM4LjEyNTczNworeHN1YjMxNCBzdWJ0cmFjdCA3OTU1MS41MDE0IC01MzguMTg2MjI5IC0+IDgwMDg5LjY4NzYgSW5leGFjdCBSb3VuZGVkCit4YWRkMzE1IGFkZCA0MjcwNjA1Ni5FKzYyMzU3ODI5MiAtNjkwLjMyNzc0NSAtPiA0LjI3MDYwNTYwRSs2MjM1NzgyOTkgSW5leGFjdCBSb3VuZGVkCit4Y29tMzE1IGNvbXBhcmUgNDI3MDYwNTYuRSs2MjM1NzgyOTIgLTY5MC4zMjc3NDUgLT4gMQoreGRpdjMxNSBkaXZpZGUgNDI3MDYwNTYuRSs2MjM1NzgyOTIgLTY5MC4zMjc3NDUgLT4gLTYuMTg2MzQ1MDFFKzYyMzU3ODI5NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMTUgZGl2aWRlaW50IDQyNzA2MDU2LkUrNjIzNTc4MjkyIC02OTAuMzI3NzQ1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzE1IG11bHRpcGx5IDQyNzA2MDU2LkUrNjIzNTc4MjkyIC02OTAuMzI3NzQ1IC0+IC0yLjk0ODExNzUzRSs2MjM1NzgzMDIgSW5leGFjdCBSb3VuZGVkCit4cG93MzE1IHBvd2VyIDQyNzA2MDU2LkUrNjIzNTc4MjkyIC02OTAgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzE1IHJlbWFpbmRlciA0MjcwNjA1Ni5FKzYyMzU3ODI5MiAtNjkwLjMyNzc0NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjMxNSBzdWJ0cmFjdCA0MjcwNjA1Ni5FKzYyMzU3ODI5MiAtNjkwLjMyNzc0NSAtPiA0LjI3MDYwNTYwRSs2MjM1NzgyOTkgSW5leGFjdCBSb3VuZGVkCit4YWRkMzE2IGFkZCAyNDU0MTM2LjA4RSs1MDIzNzQwNzcgODU2MjY4Ljc5NUUtMzU2NjY0OTM0IC0+IDIuNDU0MTM2MDhFKzUwMjM3NDA4MyBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMTYgY29tcGFyZSAyNDU0MTM2LjA4RSs1MDIzNzQwNzcgODU2MjY4Ljc5NUUtMzU2NjY0OTM0IC0+IDEKK3hkaXYzMTYgZGl2aWRlIDI0NTQxMzYuMDhFKzUwMjM3NDA3NyA4NTYyNjguNzk1RS0zNTY2NjQ5MzQgLT4gMi44NjYwODE0MkUrODU5MDM5MDExIEluZXhhY3QgUm91bmRlZAoreGR2aTMxNiBkaXZpZGVpbnQgMjQ1NDEzNi4wOEUrNTAyMzc0MDc3IDg1NjI2OC43OTVFLTM1NjY2NDkzNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDMxNiBtdWx0aXBseSAyNDU0MTM2LjA4RSs1MDIzNzQwNzcgODU2MjY4Ljc5NUUtMzU2NjY0OTM0IC0+IDIuMTAxNDAwMTRFKzE0NTcwOTE1NSBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMTYgcG93ZXIgMjQ1NDEzNi4wOEUrNTAyMzc0MDc3IDkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMzE2IHJlbWFpbmRlciAyNDU0MTM2LjA4RSs1MDIzNzQwNzcgODU2MjY4Ljc5NUUtMzU2NjY0OTM0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzE2IHN1YnRyYWN0IDI0NTQxMzYuMDhFKzUwMjM3NDA3NyA4NTYyNjguNzk1RS0zNTY2NjQ5MzQgLT4gMi40NTQxMzYwOEUrNTAyMzc0MDgzIEluZXhhY3QgUm91bmRlZAoreGFkZDMxNyBhZGQgLTMyNjQyMDQuNTQgLTQyNzA0LjUwMSAtPiAtMzMwNjkwOS4wNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMTcgY29tcGFyZSAtMzI2NDIwNC41NCAtNDI3MDQuNTAxIC0+IC0xCit4ZGl2MzE3IGRpdmlkZSAtMzI2NDIwNC41NCAtNDI3MDQuNTAxIC0+IDc2LjQzNzAxNDAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzE3IGRpdmlkZWludCAtMzI2NDIwNC41NCAtNDI3MDQuNTAxIC0+IDc2Cit4bXVsMzE3IG11bHRpcGx5IC0zMjY0MjA0LjU0IC00MjcwNC41MDEgLT4gMS4zOTM5NjIyNkUrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93MzE3IHBvd2VyIC0zMjY0MjA0LjU0IC00MjcwNSAtPiAtMS4zNzI5MzQxMEUtMjc4MTcxIEluZXhhY3QgUm91bmRlZAoreHJlbTMxNyByZW1haW5kZXIgLTMyNjQyMDQuNTQgLTQyNzA0LjUwMSAtPiAtMTg2NjIuNDY0Cit4c3ViMzE3IHN1YnRyYWN0IC0zMjY0MjA0LjU0IC00MjcwNC41MDEgLT4gLTMyMjE1MDAuMDQgSW5leGFjdCBSb3VuZGVkCit4YWRkMzE4IGFkZCAxLjIxMjY1NDkyIDQ0MTAyLjYwNzMgLT4gNDQxMDMuODIwMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMTggY29tcGFyZSAxLjIxMjY1NDkyIDQ0MTAyLjYwNzMgLT4gLTEKK3hkaXYzMTggZGl2aWRlIDEuMjEyNjU0OTIgNDQxMDIuNjA3MyAtPiAwLjAwMDAyNzQ5NjIxODMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzE4IGRpdmlkZWludCAxLjIxMjY1NDkyIDQ0MTAyLjYwNzMgLT4gMAoreG11bDMxOCBtdWx0aXBseSAxLjIxMjY1NDkyIDQ0MTAyLjYwNzMgLT4gNTM0ODEuMjQzNyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMTggcG93ZXIgMS4yMTI2NTQ5MiA0NDEwMyAtPiAxLjE1NjYyNTczRSszNjkzIEluZXhhY3QgUm91bmRlZAoreHJlbTMxOCByZW1haW5kZXIgMS4yMTI2NTQ5MiA0NDEwMi42MDczIC0+IDEuMjEyNjU0OTIKK3hzdWIzMTggc3VidHJhY3QgMS4yMTI2NTQ5MiA0NDEwMi42MDczIC0+IC00NDEwMS4zOTQ2IEluZXhhY3QgUm91bmRlZAoreGFkZDMxOSBhZGQgLTE5LjA1NDcxMUUrOTc1NTE0NjUyIC0yMjE0NC4wODIyIC0+IC0xLjkwNTQ3MTEwRSs5NzU1MTQ2NTMgSW5leGFjdCBSb3VuZGVkCit4Y29tMzE5IGNvbXBhcmUgLTE5LjA1NDcxMUUrOTc1NTE0NjUyIC0yMjE0NC4wODIyIC0+IC0xCit4ZGl2MzE5IGRpdmlkZSAtMTkuMDU0NzExRSs5NzU1MTQ2NTIgLTIyMTQ0LjA4MjIgLT4gOC42MDQ4NzcyOUUrOTc1NTE0NjQ4IEluZXhhY3QgUm91bmRlZAoreGR2aTMxOSBkaXZpZGVpbnQgLTE5LjA1NDcxMUUrOTc1NTE0NjUyIC0yMjE0NC4wODIyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzE5IG11bHRpcGx5IC0xOS4wNTQ3MTFFKzk3NTUxNDY1MiAtMjIxNDQuMDgyMiAtPiA0LjIxOTQ5MDg3RSs5NzU1MTQ2NTcgSW5leGFjdCBSb3VuZGVkCit4cG93MzE5IHBvd2VyIC0xOS4wNTQ3MTFFKzk3NTUxNDY1MiAtMjIxNDQgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzE5IHJlbWFpbmRlciAtMTkuMDU0NzExRSs5NzU1MTQ2NTIgLTIyMTQ0LjA4MjIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzMTkgc3VidHJhY3QgLTE5LjA1NDcxMUUrOTc1NTE0NjUyIC0yMjE0NC4wODIyIC0+IC0xLjkwNTQ3MTEwRSs5NzU1MTQ2NTMgSW5leGFjdCBSb3VuZGVkCit4YWRkMzIwIGFkZCA3NDUuNzg0NTIgLTE5MjIuMDA2NzBFKzM3NTkyMzMwMiAtPiAtMS45MjIwMDY3MEUrMzc1OTIzMzA1IEluZXhhY3QgUm91bmRlZAoreGNvbTMyMCBjb21wYXJlIDc0NS43ODQ1MiAtMTkyMi4wMDY3MEUrMzc1OTIzMzAyIC0+IDEKK3hkaXYzMjAgZGl2aWRlIDc0NS43ODQ1MiAtMTkyMi4wMDY3MEUrMzc1OTIzMzAyIC0+IC0zLjg4MDIzODkyRS0zNzU5MjMzMDMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzIwIGRpdmlkZWludCA3NDUuNzg0NTIgLTE5MjIuMDA2NzBFKzM3NTkyMzMwMiAtPiAtMAoreG11bDMyMCBtdWx0aXBseSA3NDUuNzg0NTIgLTE5MjIuMDA2NzBFKzM3NTkyMzMwMiAtPiAtMS40MzM0MDI4NEUrMzc1OTIzMzA4IEluZXhhY3QgUm91bmRlZAoreHBvdzMyMCBwb3dlciA3NDUuNzg0NTIgLTIgLT4gMC4wMDAwMDE3OTc5MzIwNCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMjAgcmVtYWluZGVyIDc0NS43ODQ1MiAtMTkyMi4wMDY3MEUrMzc1OTIzMzAyIC0+IDc0NS43ODQ1MgoreHN1YjMyMCBzdWJ0cmFjdCA3NDUuNzg0NTIgLTE5MjIuMDA2NzBFKzM3NTkyMzMwMiAtPiAxLjkyMjAwNjcwRSszNzU5MjMzMDUgSW5leGFjdCBSb3VuZGVkCit4YWRkMzIxIGFkZCAtOTYzNzE3ODM2IC04MjM5ODkzMDggLT4gLTEuNzg3NzA3MTRFKzkgSW5leGFjdCBSb3VuZGVkCit4Y29tMzIxIGNvbXBhcmUgLTk2MzcxNzgzNiAtODIzOTg5MzA4IC0+IC0xCit4ZGl2MzIxIGRpdmlkZSAtOTYzNzE3ODM2IC04MjM5ODkzMDggLT4gMS4xNjk1NzU2NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMjEgZGl2aWRlaW50IC05NjM3MTc4MzYgLTgyMzk4OTMwOCAtPiAxCit4bXVsMzIxIG11bHRpcGx5IC05NjM3MTc4MzYgLTgyMzk4OTMwOCAtPiA3Ljk0MDkzMTkzRSsxNyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMjEgcG93ZXIgLTk2MzcxNzgzNiAtODIzOTg5MzA4IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTMyMSByZW1haW5kZXIgLTk2MzcxNzgzNiAtODIzOTg5MzA4IC0+IC0xMzk3Mjg1MjgKK3hzdWIzMjEgc3VidHJhY3QgLTk2MzcxNzgzNiAtODIzOTg5MzA4IC0+IC0xMzk3Mjg1MjgKK3hhZGQzMjIgYWRkIDgyLjQxODUyOTFFLTMyMTkxOTMwMyAtMjE1NzQ3NzM3LkUtOTk1MTQ3NDAwIC0+IDguMjQxODUyOTFFLTMyMTkxOTMwMiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMjIgY29tcGFyZSA4Mi40MTg1MjkxRS0zMjE5MTkzMDMgLTIxNTc0NzczNy5FLTk5NTE0NzQwMCAtPiAxCit4ZGl2MzIyIGRpdmlkZSA4Mi40MTg1MjkxRS0zMjE5MTkzMDMgLTIxNTc0NzczNy5FLTk5NTE0NzQwMCAtPiAtMy44MjAxMzQxMkUrNjczMjI4MDkwIEluZXhhY3QgUm91bmRlZAoreGR2aTMyMiBkaXZpZGVpbnQgODIuNDE4NTI5MUUtMzIxOTE5MzAzIC0yMTU3NDc3MzcuRS05OTUxNDc0MDAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzMjIgbXVsdGlwbHkgODIuNDE4NTI5MUUtMzIxOTE5MzAzIC0yMTU3NDc3MzcuRS05OTUxNDc0MDAgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHBvdzMyMiBwb3dlciA4Mi40MTg1MjkxRS0zMjE5MTkzMDMgLTIgLT4gMS40NzIxNDM5NkUrNjQzODM4NjAyIEluZXhhY3QgUm91bmRlZAoreHJlbTMyMiByZW1haW5kZXIgODIuNDE4NTI5MUUtMzIxOTE5MzAzIC0yMTU3NDc3MzcuRS05OTUxNDc0MDAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzMjIgc3VidHJhY3QgODIuNDE4NTI5MUUtMzIxOTE5MzAzIC0yMTU3NDc3MzcuRS05OTUxNDc0MDAgLT4gOC4yNDE4NTI5MUUtMzIxOTE5MzAyIEluZXhhY3QgUm91bmRlZAoreGFkZDMyMyBhZGQgLTgwODMyOC42MDdFLTc5MDgxMDM0MiA1MzA3NS43MDgyIC0+IDUzMDc1LjcwODIgSW5leGFjdCBSb3VuZGVkCit4Y29tMzIzIGNvbXBhcmUgLTgwODMyOC42MDdFLTc5MDgxMDM0MiA1MzA3NS43MDgyIC0+IC0xCit4ZGl2MzIzIGRpdmlkZSAtODA4MzI4LjYwN0UtNzkwODEwMzQyIDUzMDc1LjcwODIgLT4gLTEuNTIyOTcyODFFLTc5MDgxMDM0MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMjMgZGl2aWRlaW50IC04MDgzMjguNjA3RS03OTA4MTAzNDIgNTMwNzUuNzA4MiAtPiAtMAoreG11bDMyMyBtdWx0aXBseSAtODA4MzI4LjYwN0UtNzkwODEwMzQyIDUzMDc1LjcwODIgLT4gLTQuMjkwMjYxMzNFLTc5MDgxMDMzMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMjMgcG93ZXIgLTgwODMyOC42MDdFLTc5MDgxMDM0MiA1MzA3NiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0zMjMgcmVtYWluZGVyIC04MDgzMjguNjA3RS03OTA4MTAzNDIgNTMwNzUuNzA4MiAtPiAtOC4wODMyODYwN0UtNzkwODEwMzM3Cit4c3ViMzIzIHN1YnRyYWN0IC04MDgzMjguNjA3RS03OTA4MTAzNDIgNTMwNzUuNzA4MiAtPiAtNTMwNzUuNzA4MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMjQgYWRkIDcwMDU5Mi43MjAgLTY5ODQ4NS4wODUgLT4gMjEwNy42MzUKK3hjb20zMjQgY29tcGFyZSA3MDA1OTIuNzIwIC02OTg0ODUuMDg1IC0+IDEKK3hkaXYzMjQgZGl2aWRlIDcwMDU5Mi43MjAgLTY5ODQ4NS4wODUgLT4gLTEuMDAzMDE3NDQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzI0IGRpdmlkZWludCA3MDA1OTIuNzIwIC02OTg0ODUuMDg1IC0+IC0xCit4bXVsMzI0IG11bHRpcGx5IDcwMDU5Mi43MjAgLTY5ODQ4NS4wODUgLT4gLTQuODkzNTM1NjZFKzExIEluZXhhY3QgUm91bmRlZAoreHBvdzMyNCBwb3dlciA3MDA1OTIuNzIwIC02OTg0ODUgLT4gOC44MzY5MDAwMEUtNDA4Mjk3MSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMjQgcmVtYWluZGVyIDcwMDU5Mi43MjAgLTY5ODQ4NS4wODUgLT4gMjEwNy42MzUKK3hzdWIzMjQgc3VidHJhY3QgNzAwNTkyLjcyMCAtNjk4NDg1LjA4NSAtPiAxMzk5MDc3LjgxIEluZXhhY3QgUm91bmRlZAoreGFkZDMyNSBhZGQgLTgwMjczOTI4LjAgNjYxMzQ2LjIzOSAtPiAtNzk2MTI1ODEuOCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMjUgY29tcGFyZSAtODAyNzM5MjguMCA2NjEzNDYuMjM5IC0+IC0xCit4ZGl2MzI1IGRpdmlkZSAtODAyNzM5MjguMCA2NjEzNDYuMjM5IC0+IC0xMjEuMzc5NTc5IEluZXhhY3QgUm91bmRlZAoreGR2aTMyNSBkaXZpZGVpbnQgLTgwMjczOTI4LjAgNjYxMzQ2LjIzOSAtPiAtMTIxCit4bXVsMzI1IG11bHRpcGx5IC04MDI3MzkyOC4wIDY2MTM0Ni4yMzkgLT4gLTUuMzA4ODg2MDRFKzEzIEluZXhhY3QgUm91bmRlZAoreHBvdzMyNSBwb3dlciAtODAyNzM5MjguMCA2NjEzNDYgLT4gNS40NTY2NDg1NkUrNTIyNzY1OCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zMjUgcmVtYWluZGVyIC04MDI3MzkyOC4wIDY2MTM0Ni4yMzkgLT4gLTI1MTAzMy4wODEKK3hzdWIzMjUgc3VidHJhY3QgLTgwMjczOTI4LjAgNjYxMzQ2LjIzOSAtPiAtODA5MzUyNzQuMiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMjYgYWRkIC0yNDAxODI1MS4wRSs4MTk3ODY3NjQgNTkxNDEuOTYwMEUtMTY3MTY1MDY1IC0+IC0yLjQwMTgyNTEwRSs4MTk3ODY3NzEgSW5leGFjdCBSb3VuZGVkCit4Y29tMzI2IGNvbXBhcmUgLTI0MDE4MjUxLjBFKzgxOTc4Njc2NCA1OTE0MS45NjAwRS0xNjcxNjUwNjUgLT4gLTEKK3hkaXYzMjYgZGl2aWRlIC0yNDAxODI1MS4wRSs4MTk3ODY3NjQgNTkxNDEuOTYwMEUtMTY3MTY1MDY1IC0+IC00LjA2MTExODU0RSs5ODY5NTE4MzEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzI2IGRpdmlkZWludCAtMjQwMTgyNTEuMEUrODE5Nzg2NzY0IDU5MTQxLjk2MDBFLTE2NzE2NTA2NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDMyNiBtdWx0aXBseSAtMjQwMTgyNTEuMEUrODE5Nzg2NzY0IDU5MTQxLjk2MDBFLTE2NzE2NTA2NSAtPiAtMS40MjA0ODY0NEUrNjUyNjIxNzExIEluZXhhY3QgUm91bmRlZAoreHBvdzMyNiBwb3dlciAtMjQwMTgyNTEuMEUrODE5Nzg2NzY0IDYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMzI2IHJlbWFpbmRlciAtMjQwMTgyNTEuMEUrODE5Nzg2NzY0IDU5MTQxLjk2MDBFLTE2NzE2NTA2NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjMyNiBzdWJ0cmFjdCAtMjQwMTgyNTEuMEUrODE5Nzg2NzY0IDU5MTQxLjk2MDBFLTE2NzE2NTA2NSAtPiAtMi40MDE4MjUxMEUrODE5Nzg2NzcxIEluZXhhY3QgUm91bmRlZAoreGFkZDMyNyBhZGQgMjUxMjk1My4zIC0zNzY5MTcwLjM1RS05OTM2MjE2NDUgLT4gMjUxMjk1My4zMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMjcgY29tcGFyZSAyNTEyOTUzLjMgLTM3NjkxNzAuMzVFLTk5MzYyMTY0NSAtPiAxCit4ZGl2MzI3IGRpdmlkZSAyNTEyOTUzLjMgLTM3NjkxNzAuMzVFLTk5MzYyMTY0NSAtPiAtNi42NjcxMjU4M0UrOTkzNjIxNjQ0IEluZXhhY3QgUm91bmRlZAoreGR2aTMyNyBkaXZpZGVpbnQgMjUxMjk1My4zIC0zNzY5MTcwLjM1RS05OTM2MjE2NDUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzMjcgbXVsdGlwbHkgMjUxMjk1My4zIC0zNzY5MTcwLjM1RS05OTM2MjE2NDUgLT4gLTkuNDcxNzQ5MDdFLTk5MzYyMTYzMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMjcgcG93ZXIgMjUxMjk1My4zIC00IC0+IDIuNTA3NjIzNDhFLTI2IEluZXhhY3QgUm91bmRlZAoreHJlbTMyNyByZW1haW5kZXIgMjUxMjk1My4zIC0zNzY5MTcwLjM1RS05OTM2MjE2NDUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzMjcgc3VidHJhY3QgMjUxMjk1My4zIC0zNzY5MTcwLjM1RS05OTM2MjE2NDUgLT4gMjUxMjk1My4zMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMjggYWRkIC02ODIuNzk2MzcwIDcxMTMxLjAyMjQgLT4gNzA0NDguMjI2MCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMjggY29tcGFyZSAtNjgyLjc5NjM3MCA3MTEzMS4wMjI0IC0+IC0xCit4ZGl2MzI4IGRpdmlkZSAtNjgyLjc5NjM3MCA3MTEzMS4wMjI0IC0+IC0wLjAwOTU5OTEzNjE3IEluZXhhY3QgUm91bmRlZAoreGR2aTMyOCBkaXZpZGVpbnQgLTY4Mi43OTYzNzAgNzExMzEuMDIyNCAtPiAtMAoreG11bDMyOCBtdWx0aXBseSAtNjgyLjc5NjM3MCA3MTEzMS4wMjI0IC0+IC00ODU2ODAwMy45IEluZXhhY3QgUm91bmRlZAoreHBvdzMyOCBwb3dlciAtNjgyLjc5NjM3MCA3MTEzMSAtPiAtOS4yODExNDc0MUUrMjAxNjA1IEluZXhhY3QgUm91bmRlZAoreHJlbTMyOCByZW1haW5kZXIgLTY4Mi43OTYzNzAgNzExMzEuMDIyNCAtPiAtNjgyLjc5NjM3MAoreHN1YjMyOCBzdWJ0cmFjdCAtNjgyLjc5NjM3MCA3MTEzMS4wMjI0IC0+IC03MTgxMy44MTg4IEluZXhhY3QgUm91bmRlZAoreGFkZDMyOSBhZGQgODkuOTk5NzQ5MCAtNDk5My42OTgzMSAtPiAtNDkwMy42OTg1NiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMjkgY29tcGFyZSA4OS45OTk3NDkwIC00OTkzLjY5ODMxIC0+IDEKK3hkaXYzMjkgZGl2aWRlIDg5Ljk5OTc0OTAgLTQ5OTMuNjk4MzEgLT4gLTAuMDE4MDIyNjY0NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMjkgZGl2aWRlaW50IDg5Ljk5OTc0OTAgLTQ5OTMuNjk4MzEgLT4gLTAKK3htdWwzMjkgbXVsdGlwbHkgODkuOTk5NzQ5MCAtNDk5My42OTgzMSAtPiAtNDQ5NDMxLjU5NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMjkgcG93ZXIgODkuOTk5NzQ5MCAtNDk5NCAtPiAzLjMwMzM2NTI1RS05NzYwIEluZXhhY3QgUm91bmRlZAoreHJlbTMyOSByZW1haW5kZXIgODkuOTk5NzQ5MCAtNDk5My42OTgzMSAtPiA4OS45OTk3NDkwCit4c3ViMzI5IHN1YnRyYWN0IDg5Ljk5OTc0OTAgLTQ5OTMuNjk4MzEgLT4gNTA4My42OTgwNiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMzAgYWRkIDc2NTYzMzU0LjZFLTExMjMzODgzNiAyNzgyNzEuNTg1RS01MTE0ODEwOTUgLT4gNy42NTYzMzU0NkUtMTEyMzM4ODI5IEluZXhhY3QgUm91bmRlZAoreGNvbTMzMCBjb21wYXJlIDc2NTYzMzU0LjZFLTExMjMzODgzNiAyNzgyNzEuNTg1RS01MTE0ODEwOTUgLT4gMQoreGRpdjMzMCBkaXZpZGUgNzY1NjMzNTQuNkUtMTEyMzM4ODM2IDI3ODI3MS41ODVFLTUxMTQ4MTA5NSAtPiAyLjc1MTM4OTYwRSszOTkxNDIyNjEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzMwIGRpdmlkZWludCA3NjU2MzM1NC42RS0xMTIzMzg4MzYgMjc4MjcxLjU4NUUtNTExNDgxMDk1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzMwIG11bHRpcGx5IDc2NTYzMzU0LjZFLTExMjMzODgzNiAyNzgyNzEuNTg1RS01MTE0ODEwOTUgLT4gMi4xMzA1NDA2MEUtNjIzODE5OTE4IEluZXhhY3QgUm91bmRlZAoreHBvdzMzMCBwb3dlciA3NjU2MzM1NC42RS0xMTIzMzg4MzYgMyAtPiA0LjQ4ODEwMzQ3RS0zMzcwMTY0ODUgSW5leGFjdCBSb3VuZGVkCit4cmVtMzMwIHJlbWFpbmRlciA3NjU2MzM1NC42RS0xMTIzMzg4MzYgMjc4MjcxLjU4NUUtNTExNDgxMDk1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzMwIHN1YnRyYWN0IDc2NTYzMzU0LjZFLTExMjMzODgzNiAyNzgyNzEuNTg1RS01MTE0ODEwOTUgLT4gNy42NTYzMzU0NkUtMTEyMzM4ODI5IEluZXhhY3QgUm91bmRlZAoreGFkZDMzMSBhZGQgLTkzMjQ5OS4wMTAgODczLjM3NzcwMUUtNTAyMTkwNDUyIC0+IC05MzI0OTkuMDEwIEluZXhhY3QgUm91bmRlZAoreGNvbTMzMSBjb21wYXJlIC05MzI0OTkuMDEwIDg3My4zNzc3MDFFLTUwMjE5MDQ1MiAtPiAtMQoreGRpdjMzMSBkaXZpZGUgLTkzMjQ5OS4wMTAgODczLjM3NzcwMUUtNTAyMTkwNDUyIC0+IC0xLjA2NzY5MjcyRSs1MDIxOTA0NTUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzMxIGRpdmlkZWludCAtOTMyNDk5LjAxMCA4NzMuMzc3NzAxRS01MDIxOTA0NTIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzMzEgbXVsdGlwbHkgLTkzMjQ5OS4wMTAgODczLjM3NzcwMUUtNTAyMTkwNDUyIC0+IC04LjE0NDIzODQyRS01MDIxOTA0NDQgSW5leGFjdCBSb3VuZGVkCit4cG93MzMxIHBvd2VyIC05MzI0OTkuMDEwIDkgLT4gLTUuMzMxMzI4MTVFKzUzIEluZXhhY3QgUm91bmRlZAoreHJlbTMzMSByZW1haW5kZXIgLTkzMjQ5OS4wMTAgODczLjM3NzcwMUUtNTAyMTkwNDUyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzMxIHN1YnRyYWN0IC05MzI0OTkuMDEwIDg3My4zNzc3MDFFLTUwMjE5MDQ1MiAtPiAtOTMyNDk5LjAxMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMzIgYWRkIC03NzM1OTE4LjIxRSs3OTk1MTQ3OTcgLTc3NDguNzgwMjMgLT4gLTcuNzM1OTE4MjFFKzc5OTUxNDgwMyBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMzIgY29tcGFyZSAtNzczNTkxOC4yMUUrNzk5NTE0Nzk3IC03NzQ4Ljc4MDIzIC0+IC0xCit4ZGl2MzMyIGRpdmlkZSAtNzczNTkxOC4yMUUrNzk5NTE0Nzk3IC03NzQ4Ljc4MDIzIC0+IDkuOTgzNDAxMjNFKzc5OTUxNDc5OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMzIgZGl2aWRlaW50IC03NzM1OTE4LjIxRSs3OTk1MTQ3OTcgLTc3NDguNzgwMjMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzMzIgbXVsdGlwbHkgLTc3MzU5MTguMjFFKzc5OTUxNDc5NyAtNzc0OC43ODAyMyAtPiA1Ljk5NDM5MzAxRSs3OTk1MTQ4MDcgSW5leGFjdCBSb3VuZGVkCit4cG93MzMyIHBvd2VyIC03NzM1OTE4LjIxRSs3OTk1MTQ3OTcgLTc3NDkgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTMzMiByZW1haW5kZXIgLTc3MzU5MTguMjFFKzc5OTUxNDc5NyAtNzc0OC43ODAyMyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjMzMiBzdWJ0cmFjdCAtNzczNTkxOC4yMUUrNzk5NTE0Nzk3IC03NzQ4Ljc4MDIzIC0+IC03LjczNTkxODIxRSs3OTk1MTQ4MDMgSW5leGFjdCBSb3VuZGVkCit4YWRkMzMzIGFkZCAtMzcwODc4MC43NUUrNDQ1MjMyNzg3IDk4MC4wMDY1NjdFLTc4MDcyODYyMyAtPiAtMy43MDg3ODA3NUUrNDQ1MjMyNzkzIEluZXhhY3QgUm91bmRlZAoreGNvbTMzMyBjb21wYXJlIC0zNzA4NzgwLjc1RSs0NDUyMzI3ODcgOTgwLjAwNjU2N0UtNzgwNzI4NjIzIC0+IC0xCit4ZGl2MzMzIGRpdmlkZSAtMzcwODc4MC43NUUrNDQ1MjMyNzg3IDk4MC4wMDY1NjdFLTc4MDcyODYyMyAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCit4ZHZpMzMzIGRpdmlkZWludCAtMzcwODc4MC43NUUrNDQ1MjMyNzg3IDk4MC4wMDY1NjdFLTc4MDcyODYyMyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDMzMyBtdWx0aXBseSAtMzcwODc4MC43NUUrNDQ1MjMyNzg3IDk4MC4wMDY1NjdFLTc4MDcyODYyMyAtPiAtMy42MzQ2Mjk0OUUtMzM1NDk1ODI3IEluZXhhY3QgUm91bmRlZAoreHBvdzMzMyBwb3dlciAtMzcwODc4MC43NUUrNDQ1MjMyNzg3IDEwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTMzMyByZW1haW5kZXIgLTM3MDg3ODAuNzVFKzQ0NTIzMjc4NyA5ODAuMDA2NTY3RS03ODA3Mjg2MjMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzMzMgc3VidHJhY3QgLTM3MDg3ODAuNzVFKzQ0NTIzMjc4NyA5ODAuMDA2NTY3RS03ODA3Mjg2MjMgLT4gLTMuNzA4NzgwNzVFKzQ0NTIzMjc5MyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMzQgYWRkIC01MjA1MTI0LjQ0RS0xNDA1ODg2NjEgLTQ5NTM5NDAyOS5FLTYyMDg1NjMxMyAtPiAtNS4yMDUxMjQ0NEUtMTQwNTg4NjU1IEluZXhhY3QgUm91bmRlZAoreGNvbTMzNCBjb21wYXJlIC01MjA1MTI0LjQ0RS0xNDA1ODg2NjEgLTQ5NTM5NDAyOS5FLTYyMDg1NjMxMyAtPiAtMQoreGRpdjMzNCBkaXZpZGUgLTUyMDUxMjQuNDRFLTE0MDU4ODY2MSAtNDk1Mzk0MDI5LkUtNjIwODU2MzEzIC0+IDEuMDUwNzAzOTFFKzQ4MDI2NzY1MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMzQgZGl2aWRlaW50IC01MjA1MTI0LjQ0RS0xNDA1ODg2NjEgLTQ5NTM5NDAyOS5FLTYyMDg1NjMxMyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDMzNCBtdWx0aXBseSAtNTIwNTEyNC40NEUtMTQwNTg4NjYxIC00OTUzOTQwMjkuRS02MjA4NTYzMTMgLT4gMi41Nzg1ODc1N0UtNzYxNDQ0OTU5IEluZXhhY3QgUm91bmRlZAoreHBvdzMzNCBwb3dlciAtNTIwNTEyNC40NEUtMTQwNTg4NjYxIC01IC0+IC0yLjYxNzI0NTIzRSs3MDI5NDMyNzEgSW5leGFjdCBSb3VuZGVkCit4cmVtMzM0IHJlbWFpbmRlciAtNTIwNTEyNC40NEUtMTQwNTg4NjYxIC00OTUzOTQwMjkuRS02MjA4NTYzMTMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzMzQgc3VidHJhY3QgLTUyMDUxMjQuNDRFLTE0MDU4ODY2MSAtNDk1Mzk0MDI5LkUtNjIwODU2MzEzIC0+IC01LjIwNTEyNDQ0RS0xNDA1ODg2NTUgSW5leGFjdCBSb3VuZGVkCit4YWRkMzM1IGFkZCAtODg2OC43MjA3NCA1NTkyMzk5LjkzIC0+IDU1ODM1MzEuMjEgSW5leGFjdCBSb3VuZGVkCit4Y29tMzM1IGNvbXBhcmUgLTg4NjguNzIwNzQgNTU5MjM5OS45MyAtPiAtMQoreGRpdjMzNSBkaXZpZGUgLTg4NjguNzIwNzQgNTU5MjM5OS45MyAtPiAtMC4wMDE1ODU4NTIzOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMzUgZGl2aWRlaW50IC04ODY4LjcyMDc0IDU1OTIzOTkuOTMgLT4gLTAKK3htdWwzMzUgbXVsdGlwbHkgLTg4NjguNzIwNzQgNTU5MjM5OS45MyAtPiAtNC45NTk3NDMzMkUrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93MzM1IHBvd2VyIC04ODY4LjcyMDc0IDU1OTI0MDAgLT4gNS41NTA3NDE0MkUrMjIwNzgwMTcgSW5leGFjdCBSb3VuZGVkCit4cmVtMzM1IHJlbWFpbmRlciAtODg2OC43MjA3NCA1NTkyMzk5LjkzIC0+IC04ODY4LjcyMDc0Cit4c3ViMzM1IHN1YnRyYWN0IC04ODY4LjcyMDc0IDU1OTIzOTkuOTMgLT4gLTU2MDEyNjguNjUgSW5leGFjdCBSb3VuZGVkCit4YWRkMzM2IGFkZCAtNzQuNzg1MjAzN0UtMTc1MjA1ODA5IDQuMTQzMTY1NDIgLT4gNC4xNDMxNjU0MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zMzYgY29tcGFyZSAtNzQuNzg1MjAzN0UtMTc1MjA1ODA5IDQuMTQzMTY1NDIgLT4gLTEKK3hkaXYzMzYgZGl2aWRlIC03NC43ODUyMDM3RS0xNzUyMDU4MDkgNC4xNDMxNjU0MiAtPiAtMS44MDUwMjU3N0UtMTc1MjA1ODA4IEluZXhhY3QgUm91bmRlZAoreGR2aTMzNiBkaXZpZGVpbnQgLTc0Ljc4NTIwMzdFLTE3NTIwNTgwOSA0LjE0MzE2NTQyIC0+IC0wCit4bXVsMzM2IG11bHRpcGx5IC03NC43ODUyMDM3RS0xNzUyMDU4MDkgNC4xNDMxNjU0MiAtPiAtMy4wOTg0NzQ3MEUtMTc1MjA1ODA3IEluZXhhY3QgUm91bmRlZAoreHBvdzMzNiBwb3dlciAtNzQuNzg1MjAzN0UtMTc1MjA1ODA5IDQgLT4gMy4xMjc5NzEwNEUtNzAwODIzMjI5IEluZXhhY3QgUm91bmRlZAoreHJlbTMzNiByZW1haW5kZXIgLTc0Ljc4NTIwMzdFLTE3NTIwNTgwOSA0LjE0MzE2NTQyIC0+IC03LjQ3ODUyMDM3RS0xNzUyMDU4MDgKK3hzdWIzMzYgc3VidHJhY3QgLTc0Ljc4NTIwMzdFLTE3NTIwNTgwOSA0LjE0MzE2NTQyIC0+IC00LjE0MzE2NTQyIEluZXhhY3QgUm91bmRlZAoreGFkZDMzNyBhZGQgODQxOTYuMTA5MUUrMjQyNjI4NzQ4IDguMDc1MjMwMzZFLTI4ODIzMTQ2NyAtPiA4LjQxOTYxMDkxRSsyNDI2Mjg3NTIgSW5leGFjdCBSb3VuZGVkCit4Y29tMzM3IGNvbXBhcmUgODQxOTYuMTA5MUUrMjQyNjI4NzQ4IDguMDc1MjMwMzZFLTI4ODIzMTQ2NyAtPiAxCit4ZGl2MzM3IGRpdmlkZSA4NDE5Ni4xMDkxRSsyNDI2Mjg3NDggOC4wNzUyMzAzNkUtMjg4MjMxNDY3IC0+IDEuMDQyNjQ2NTNFKzUzMDg2MDIxOSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzMzcgZGl2aWRlaW50IDg0MTk2LjEwOTFFKzI0MjYyODc0OCA4LjA3NTIzMDM2RS0yODgyMzE0NjcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzMzcgbXVsdGlwbHkgODQxOTYuMTA5MUUrMjQyNjI4NzQ4IDguMDc1MjMwMzZFLTI4ODIzMTQ2NyAtPiA2Ljc5OTAyOTc2RS00NTYwMjcxNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMzcgcG93ZXIgODQxOTYuMTA5MUUrMjQyNjI4NzQ4IDggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMzM3IHJlbWFpbmRlciA4NDE5Ni4xMDkxRSsyNDI2Mjg3NDggOC4wNzUyMzAzNkUtMjg4MjMxNDY3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzM3IHN1YnRyYWN0IDg0MTk2LjEwOTFFKzI0MjYyODc0OCA4LjA3NTIzMDM2RS0yODgyMzE0NjcgLT4gOC40MTk2MTA5MUUrMjQyNjI4NzUyIEluZXhhY3QgUm91bmRlZAoreGFkZDMzOCBhZGQgMzg2NjAxMDMuMSAtNjY3MS43MzA4NUUrOTAwOTk4NDc3IC0+IC02LjY3MTczMDg1RSs5MDA5OTg0ODAgSW5leGFjdCBSb3VuZGVkCit4Y29tMzM4IGNvbXBhcmUgMzg2NjAxMDMuMSAtNjY3MS43MzA4NUUrOTAwOTk4NDc3IC0+IDEKK3hkaXYzMzggZGl2aWRlIDM4NjYwMTAzLjEgLTY2NzEuNzMwODVFKzkwMDk5ODQ3NyAtPiAtNS43OTQ2MTM3MkUtOTAwOTk4NDc0IEluZXhhY3QgUm91bmRlZAoreGR2aTMzOCBkaXZpZGVpbnQgMzg2NjAxMDMuMSAtNjY3MS43MzA4NUUrOTAwOTk4NDc3IC0+IC0wCit4bXVsMzM4IG11bHRpcGx5IDM4NjYwMTAzLjEgLTY2NzEuNzMwODVFKzkwMDk5ODQ3NyAtPiAtMi41NzkyOTgwM0UrOTAwOTk4NDg4IEluZXhhY3QgUm91bmRlZAoreHBvdzMzOCBwb3dlciAzODY2MDEwMy4xIC03IC0+IDcuNzQ3NDUyOTBFLTU0IEluZXhhY3QgUm91bmRlZAoreHJlbTMzOCByZW1haW5kZXIgMzg2NjAxMDMuMSAtNjY3MS43MzA4NUUrOTAwOTk4NDc3IC0+IDM4NjYwMTAzLjEKK3hzdWIzMzggc3VidHJhY3QgMzg2NjAxMDMuMSAtNjY3MS43MzA4NUUrOTAwOTk4NDc3IC0+IDYuNjcxNzMwODVFKzkwMDk5ODQ4MCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzMzkgYWRkIC01Mi4yNjU5NDYwIC0yOTY0MDQxOTlFKzM3MjA1MDQ3NiAtPiAtMi45NjQwNDE5OUUrMzcyMDUwNDg0IEluZXhhY3QgUm91bmRlZAoreGNvbTMzOSBjb21wYXJlIC01Mi4yNjU5NDYwIC0yOTY0MDQxOTlFKzM3MjA1MDQ3NiAtPiAxCit4ZGl2MzM5IGRpdmlkZSAtNTIuMjY1OTQ2MCAtMjk2NDA0MTk5RSszNzIwNTA0NzYgLT4gMS43NjMzMzM1MkUtMzcyMDUwNDgzIEluZXhhY3QgUm91bmRlZAoreGR2aTMzOSBkaXZpZGVpbnQgLTUyLjI2NTk0NjAgLTI5NjQwNDE5OUUrMzcyMDUwNDc2IC0+IDAKK3htdWwzMzkgbXVsdGlwbHkgLTUyLjI2NTk0NjAgLTI5NjQwNDE5OUUrMzcyMDUwNDc2IC0+IDEuNTQ5MTg0NTlFKzM3MjA1MDQ4NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3czMzkgcG93ZXIgLTUyLjI2NTk0NjAgLTMgLT4gLTAuMDAwMDA3MDAzOTU4MzMgSW5leGFjdCBSb3VuZGVkCit4cmVtMzM5IHJlbWFpbmRlciAtNTIuMjY1OTQ2MCAtMjk2NDA0MTk5RSszNzIwNTA0NzYgLT4gLTUyLjI2NTk0NjAKK3hzdWIzMzkgc3VidHJhY3QgLTUyLjI2NTk0NjAgLTI5NjQwNDE5OUUrMzcyMDUwNDc2IC0+IDIuOTY0MDQxOTlFKzM3MjA1MDQ4NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNDAgYWRkIDYuMDY2MjUwMTMgLTI3Ni4zNTkxODYgLT4gLTI3MC4yOTI5MzYgSW5leGFjdCBSb3VuZGVkCit4Y29tMzQwIGNvbXBhcmUgNi4wNjYyNTAxMyAtMjc2LjM1OTE4NiAtPiAxCit4ZGl2MzQwIGRpdmlkZSA2LjA2NjI1MDEzIC0yNzYuMzU5MTg2IC0+IC0wLjAyMTk1MDYwMDcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzQwIGRpdmlkZWludCA2LjA2NjI1MDEzIC0yNzYuMzU5MTg2IC0+IC0wCit4bXVsMzQwIG11bHRpcGx5IDYuMDY2MjUwMTMgLTI3Ni4zNTkxODYgLT4gLTE2NzYuNDYzOTUgSW5leGFjdCBSb3VuZGVkCit4cG93MzQwIHBvd2VyIDYuMDY2MjUwMTMgLTI3NiAtPiA4LjIwMzM5MTQ5RS0yMTcgSW5leGFjdCBSb3VuZGVkCit4cmVtMzQwIHJlbWFpbmRlciA2LjA2NjI1MDEzIC0yNzYuMzU5MTg2IC0+IDYuMDY2MjUwMTMKK3hzdWIzNDAgc3VidHJhY3QgNi4wNjYyNTAxMyAtMjc2LjM1OTE4NiAtPiAyODIuNDI1NDM2IEluZXhhY3QgUm91bmRlZAoreGFkZDM0MSBhZGQgLTYyOTcxNjE3LjVFLTI0MTQ0NDc0NCA0NjI2Njc5OS4zIC0+IDQ2MjY2Nzk5LjMgSW5leGFjdCBSb3VuZGVkCit4Y29tMzQxIGNvbXBhcmUgLTYyOTcxNjE3LjVFLTI0MTQ0NDc0NCA0NjI2Njc5OS4zIC0+IC0xCit4ZGl2MzQxIGRpdmlkZSAtNjI5NzE2MTcuNUUtMjQxNDQ0NzQ0IDQ2MjY2Nzk5LjMgLT4gLTEuMzYxMDU0MTFFLTI0MTQ0NDc0NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNDEgZGl2aWRlaW50IC02Mjk3MTYxNy41RS0yNDE0NDQ3NDQgNDYyNjY3OTkuMyAtPiAtMAoreG11bDM0MSBtdWx0aXBseSAtNjI5NzE2MTcuNUUtMjQxNDQ0NzQ0IDQ2MjY2Nzk5LjMgLT4gLTIuOTEzNDk1MTlFLTI0MTQ0NDcyOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNDEgcG93ZXIgLTYyOTcxNjE3LjVFLTI0MTQ0NDc0NCA0NjI2Njc5OSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzQxIHJlbWFpbmRlciAtNjI5NzE2MTcuNUUtMjQxNDQ0NzQ0IDQ2MjY2Nzk5LjMgLT4gLTYuMjk3MTYxNzVFLTI0MTQ0NDczNworeHN1YjM0MSBzdWJ0cmFjdCAtNjI5NzE2MTcuNUUtMjQxNDQ0NzQ0IDQ2MjY2Nzk5LjMgLT4gLTQ2MjY2Nzk5LjMgSW5leGFjdCBSb3VuZGVkCit4YWRkMzQyIGFkZCAtNS4zNjkxNzgwMCAtMzExMTI0NTkzLkUtOTc2MDY2NDkxIC0+IC01LjM2OTE3ODAwIEluZXhhY3QgUm91bmRlZAoreGNvbTM0MiBjb21wYXJlIC01LjM2OTE3ODAwIC0zMTExMjQ1OTMuRS05NzYwNjY0OTEgLT4gLTEKK3hkaXYzNDIgZGl2aWRlIC01LjM2OTE3ODAwIC0zMTExMjQ1OTMuRS05NzYwNjY0OTEgLT4gMS43MjU3MzI0M0UrOTc2MDY2NDgzIEluZXhhY3QgUm91bmRlZAoreGR2aTM0MiBkaXZpZGVpbnQgLTUuMzY5MTc4MDAgLTMxMTEyNDU5My5FLTk3NjA2NjQ5MSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDM0MiBtdWx0aXBseSAtNS4zNjkxNzgwMCAtMzExMTI0NTkzLkUtOTc2MDY2NDkxIC0+IDEuNjcwNDgzMzJFLTk3NjA2NjQ4MiBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNDIgcG93ZXIgLTUuMzY5MTc4MDAgLTMgLT4gLTAuMDA2NDYwNjU1NjUgSW5leGFjdCBSb3VuZGVkCit4cmVtMzQyIHJlbWFpbmRlciAtNS4zNjkxNzgwMCAtMzExMTI0NTkzLkUtOTc2MDY2NDkxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzQyIHN1YnRyYWN0IC01LjM2OTE3ODAwIC0zMTExMjQ1OTMuRS05NzYwNjY0OTEgLT4gLTUuMzY5MTc4MDAgSW5leGFjdCBSb3VuZGVkCit4YWRkMzQzIGFkZCAyNDY3OTE1LjAxIC05Mi41NTU4MzIyIC0+IDI0Njc4MjIuNDUgSW5leGFjdCBSb3VuZGVkCit4Y29tMzQzIGNvbXBhcmUgMjQ2NzkxNS4wMSAtOTIuNTU1ODMyMiAtPiAxCit4ZGl2MzQzIGRpdmlkZSAyNDY3OTE1LjAxIC05Mi41NTU4MzIyIC0+IC0yNjY2NC4wNjgxIEluZXhhY3QgUm91bmRlZAoreGR2aTM0MyBkaXZpZGVpbnQgMjQ2NzkxNS4wMSAtOTIuNTU1ODMyMiAtPiAtMjY2NjQKK3htdWwzNDMgbXVsdGlwbHkgMjQ2NzkxNS4wMSAtOTIuNTU1ODMyMiAtPiAtMjI4NDE5OTI4IEluZXhhY3QgUm91bmRlZAoreHBvdzM0MyBwb3dlciAyNDY3OTE1LjAxIC05MyAtPiAzLjI2MDU1NDQ0RS01OTUgSW5leGFjdCBSb3VuZGVkCit4cmVtMzQzIHJlbWFpbmRlciAyNDY3OTE1LjAxIC05Mi41NTU4MzIyIC0+IDYuMzAwMjE5MgoreHN1YjM0MyBzdWJ0cmFjdCAyNDY3OTE1LjAxIC05Mi41NTU4MzIyIC0+IDI0NjgwMDcuNTcgSW5leGFjdCBSb3VuZGVkCit4YWRkMzQ0IGFkZCAxODcuMjMyNjcxIC04NDAuNDY5MzQ3IC0+IC02NTMuMjM2Njc2Cit4Y29tMzQ0IGNvbXBhcmUgMTg3LjIzMjY3MSAtODQwLjQ2OTM0NyAtPiAxCit4ZGl2MzQ0IGRpdmlkZSAxODcuMjMyNjcxIC04NDAuNDY5MzQ3IC0+IC0wLjIyMjc3MTU2NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNDQgZGl2aWRlaW50IDE4Ny4yMzI2NzEgLTg0MC40NjkzNDcgLT4gLTAKK3htdWwzNDQgbXVsdGlwbHkgMTg3LjIzMjY3MSAtODQwLjQ2OTM0NyAtPiAtMTU3MzYzLjMyMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNDQgcG93ZXIgMTg3LjIzMjY3MSAtODQwIC0+IDEuNTgyODA4NjJFLTE5MDkgSW5leGFjdCBSb3VuZGVkCit4cmVtMzQ0IHJlbWFpbmRlciAxODcuMjMyNjcxIC04NDAuNDY5MzQ3IC0+IDE4Ny4yMzI2NzEKK3hzdWIzNDQgc3VidHJhY3QgMTg3LjIzMjY3MSAtODQwLjQ2OTM0NyAtPiAxMDI3LjcwMjAyIEluZXhhY3QgUm91bmRlZAoreGFkZDM0NSBhZGQgODEyMzMuNjgyMyAtNTE5Mi4yMTY2NkUrMzA5MzE1MDkzIC0+IC01LjE5MjIxNjY2RSszMDkzMTUwOTYgSW5leGFjdCBSb3VuZGVkCit4Y29tMzQ1IGNvbXBhcmUgODEyMzMuNjgyMyAtNTE5Mi4yMTY2NkUrMzA5MzE1MDkzIC0+IDEKK3hkaXYzNDUgZGl2aWRlIDgxMjMzLjY4MjMgLTUxOTIuMjE2NjZFKzMwOTMxNTA5MyAtPiAtMS41NjQ1Mjc5OEUtMzA5MzE1MDkyIEluZXhhY3QgUm91bmRlZAoreGR2aTM0NSBkaXZpZGVpbnQgODEyMzMuNjgyMyAtNTE5Mi4yMTY2NkUrMzA5MzE1MDkzIC0+IC0wCit4bXVsMzQ1IG11bHRpcGx5IDgxMjMzLjY4MjMgLTUxOTIuMjE2NjZFKzMwOTMxNTA5MyAtPiAtNC4yMTc4Mjg3OUUrMzA5MzE1MTAxIEluZXhhY3QgUm91bmRlZAoreHBvdzM0NSBwb3dlciA4MTIzMy42ODIzIC01IC0+IDIuODI2OTU3NjNFLTI1IEluZXhhY3QgUm91bmRlZAoreHJlbTM0NSByZW1haW5kZXIgODEyMzMuNjgyMyAtNTE5Mi4yMTY2NkUrMzA5MzE1MDkzIC0+IDgxMjMzLjY4MjMKK3hzdWIzNDUgc3VidHJhY3QgODEyMzMuNjgyMyAtNTE5Mi4yMTY2NkUrMzA5MzE1MDkzIC0+IDUuMTkyMjE2NjZFKzMwOTMxNTA5NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNDYgYWRkIC04NTQuNTg2MTEzIC03OS44NzE1NzYyRS04NTMwNjUxMDMgLT4gLTg1NC41ODYxMTMgSW5leGFjdCBSb3VuZGVkCit4Y29tMzQ2IGNvbXBhcmUgLTg1NC41ODYxMTMgLTc5Ljg3MTU3NjJFLTg1MzA2NTEwMyAtPiAtMQoreGRpdjM0NiBkaXZpZGUgLTg1NC41ODYxMTMgLTc5Ljg3MTU3NjJFLTg1MzA2NTEwMyAtPiAxLjA2OTk1MDIzRSs4NTMwNjUxMDQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzQ2IGRpdmlkZWludCAtODU0LjU4NjExMyAtNzkuODcxNTc2MkUtODUzMDY1MTAzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzQ2IG11bHRpcGx5IC04NTQuNTg2MTEzIC03OS44NzE1NzYyRS04NTMwNjUxMDMgLT4gNi44MjU3MTM5OEUtODUzMDY1MDk5IEluZXhhY3QgUm91bmRlZAoreHBvdzM0NiBwb3dlciAtODU0LjU4NjExMyAtOCAtPiAzLjUxNTIyNjc5RS0yNCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNDYgcmVtYWluZGVyIC04NTQuNTg2MTEzIC03OS44NzE1NzYyRS04NTMwNjUxMDMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzNDYgc3VidHJhY3QgLTg1NC41ODYxMTMgLTc5Ljg3MTU3NjJFLTg1MzA2NTEwMyAtPiAtODU0LjU4NjExMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNDcgYWRkIDc4ODcyNjY1LjMgMTcyLjEwMjExOSAtPiA3ODg3MjgzNy40IEluZXhhY3QgUm91bmRlZAoreGNvbTM0NyBjb21wYXJlIDc4ODcyNjY1LjMgMTcyLjEwMjExOSAtPiAxCit4ZGl2MzQ3IGRpdmlkZSA3ODg3MjY2NS4zIDE3Mi4xMDIxMTkgLT4gNDU4Mjg5LjkxNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNDcgZGl2aWRlaW50IDc4ODcyNjY1LjMgMTcyLjEwMjExOSAtPiA0NTgyODkKK3htdWwzNDcgbXVsdGlwbHkgNzg4NzI2NjUuMyAxNzIuMTAyMTE5IC0+IDEuMzU3NDE1MjhFKzEwIEluZXhhY3QgUm91bmRlZAoreHBvdzM0NyBwb3dlciA3ODg3MjY2NS4zIDE3MiAtPiAxLjg2NzkzMTM3RSsxMzU4IEluZXhhY3QgUm91bmRlZAoreHJlbTM0NyByZW1haW5kZXIgNzg4NzI2NjUuMyAxNzIuMTAyMTE5IC0+IDE1Ny4yODU2MDkKK3hzdWIzNDcgc3VidHJhY3QgNzg4NzI2NjUuMyAxNzIuMTAyMTE5IC0+IDc4ODcyNDkzLjIgSW5leGFjdCBSb3VuZGVkCit4YWRkMzQ4IGFkZCAzMjgyNjguMUUtNDM2MzE1NjE3IC0yMDQuNTIyMjQ1IC0+IC0yMDQuNTIyMjQ1IEluZXhhY3QgUm91bmRlZAoreGNvbTM0OCBjb21wYXJlIDMyODI2OC4xRS00MzYzMTU2MTcgLTIwNC41MjIyNDUgLT4gMQoreGRpdjM0OCBkaXZpZGUgMzI4MjY4LjFFLTQzNjMxNTYxNyAtMjA0LjUyMjI0NSAtPiAtMS42MDUwNDgzOUUtNDM2MzE1NjE0IEluZXhhY3QgUm91bmRlZAoreGR2aTM0OCBkaXZpZGVpbnQgMzI4MjY4LjFFLTQzNjMxNTYxNyAtMjA0LjUyMjI0NSAtPiAtMAoreG11bDM0OCBtdWx0aXBseSAzMjgyNjguMUUtNDM2MzE1NjE3IC0yMDQuNTIyMjQ1IC0+IC02LjcxMzgxMjg4RS00MzYzMTU2MTAgSW5leGFjdCBSb3VuZGVkCit4cG93MzQ4IHBvd2VyIDMyODI2OC4xRS00MzYzMTU2MTcgLTIwNSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNDggcmVtYWluZGVyIDMyODI2OC4xRS00MzYzMTU2MTcgLTIwNC41MjIyNDUgLT4gMy4yODI2ODFFLTQzNjMxNTYxMgoreHN1YjM0OCBzdWJ0cmFjdCAzMjgyNjguMUUtNDM2MzE1NjE3IC0yMDQuNTIyMjQ1IC0+IDIwNC41MjIyNDUgSW5leGFjdCBSb3VuZGVkCit4YWRkMzQ5IGFkZCAtNDAzNzkxMS4wMkUrNjQxMzY3NjQ1IDI5LjU3MTMwMTAgLT4gLTQuMDM3OTExMDJFKzY0MTM2NzY1MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNDkgY29tcGFyZSAtNDAzNzkxMS4wMkUrNjQxMzY3NjQ1IDI5LjU3MTMwMTAgLT4gLTEKK3hkaXYzNDkgZGl2aWRlIC00MDM3OTExLjAyRSs2NDEzNjc2NDUgMjkuNTcxMzAxMCAtPiAtMS4zNjU0ODMwNUUrNjQxMzY3NjUwIEluZXhhY3QgUm91bmRlZAoreGR2aTM0OSBkaXZpZGVpbnQgLTQwMzc5MTEuMDJFKzY0MTM2NzY0NSAyOS41NzEzMDEwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzQ5IG11bHRpcGx5IC00MDM3OTExLjAyRSs2NDEzNjc2NDUgMjkuNTcxMzAxMCAtPiAtMS4xOTQwNjI4MkUrNjQxMzY3NjUzIEluZXhhY3QgUm91bmRlZAoreHBvdzM0OSBwb3dlciAtNDAzNzkxMS4wMkUrNjQxMzY3NjQ1IDMwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTM0OSByZW1haW5kZXIgLTQwMzc5MTEuMDJFKzY0MTM2NzY0NSAyOS41NzEzMDEwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzQ5IHN1YnRyYWN0IC00MDM3OTExLjAyRSs2NDEzNjc2NDUgMjkuNTcxMzAxMCAtPiAtNC4wMzc5MTEwMkUrNjQxMzY3NjUxIEluZXhhY3QgUm91bmRlZAoreGFkZDM1MCBhZGQgLTY4ODc1NTU2MS5FLTk1MzAxNjk5IDk3OC4yNzUzMTJFKzkxMzgxMjYwOSAtPiA5Ljc4Mjc1MzEyRSs5MTM4MTI2MTEgSW5leGFjdCBSb3VuZGVkCit4Y29tMzUwIGNvbXBhcmUgLTY4ODc1NTU2MS5FLTk1MzAxNjk5IDk3OC4yNzUzMTJFKzkxMzgxMjYwOSAtPiAtMQoreGRpdjM1MCBkaXZpZGUgLTY4ODc1NTU2MS5FLTk1MzAxNjk5IDk3OC4yNzUzMTJFKzkxMzgxMjYwOSAtPiAtMEUtMTAwMDAwMDAwNyBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkCit4ZHZpMzUwIGRpdmlkZWludCAtNjg4NzU1NTYxLkUtOTUzMDE2OTkgOTc4LjI3NTMxMkUrOTEzODEyNjA5IC0+IC0wCit4bXVsMzUwIG11bHRpcGx5IC02ODg3NTU1NjEuRS05NTMwMTY5OSA5NzguMjc1MzEyRSs5MTM4MTI2MDkgLT4gLTYuNzM3OTI1NjFFKzgxODUxMDkyMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNTAgcG93ZXIgLTY4ODc1NTU2MS5FLTk1MzAxNjk5IDEwIC0+IDIuNDAyNDMyNDRFLTk1MzAxNjkwMiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNTAgcmVtYWluZGVyIC02ODg3NTU1NjEuRS05NTMwMTY5OSA5NzguMjc1MzEyRSs5MTM4MTI2MDkgLT4gLTYuODg3NTU1NjFFLTk1MzAxNjkxCit4c3ViMzUwIHN1YnRyYWN0IC02ODg3NTU1NjEuRS05NTMwMTY5OSA5NzguMjc1MzEyRSs5MTM4MTI2MDkgLT4gLTkuNzgyNzUzMTJFKzkxMzgxMjYxMSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNTEgYWRkIC01LjQ3MzQ1NTAyIDU5ODE4Ljc1ODAgLT4gNTk4MTMuMjg0NSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNTEgY29tcGFyZSAtNS40NzM0NTUwMiA1OTgxOC43NTgwIC0+IC0xCit4ZGl2MzUxIGRpdmlkZSAtNS40NzM0NTUwMiA1OTgxOC43NTgwIC0+IC0wLjAwMDA5MTUwMDY0NjMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzUxIGRpdmlkZWludCAtNS40NzM0NTUwMiA1OTgxOC43NTgwIC0+IC0wCit4bXVsMzUxIG11bHRpcGx5IC01LjQ3MzQ1NTAyIDU5ODE4Ljc1ODAgLT4gLTMyNzQxNS4yODEgSW5leGFjdCBSb3VuZGVkCit4cG93MzUxIHBvd2VyIC01LjQ3MzQ1NTAyIDU5ODE5IC0+IC0xLjE2OTE0MTQ2RSs0NDE2MiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNTEgcmVtYWluZGVyIC01LjQ3MzQ1NTAyIDU5ODE4Ljc1ODAgLT4gLTUuNDczNDU1MDIKK3hzdWIzNTEgc3VidHJhY3QgLTUuNDczNDU1MDIgNTk4MTguNzU4MCAtPiAtNTk4MjQuMjMxNSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNTIgYWRkIDU2Mzg5MTYyMEUtMzYxMzU0NTY3IC04NDU5MDAzNjIuIC0+IC04NDU5MDAzNjIgSW5leGFjdCBSb3VuZGVkCit4Y29tMzUyIGNvbXBhcmUgNTYzODkxNjIwRS0zNjEzNTQ1NjcgLTg0NTkwMDM2Mi4gLT4gMQoreGRpdjM1MiBkaXZpZGUgNTYzODkxNjIwRS0zNjEzNTQ1NjcgLTg0NTkwMDM2Mi4gLT4gLTYuNjY2MTcwNjlFLTM2MTM1NDU2OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNTIgZGl2aWRlaW50IDU2Mzg5MTYyMEUtMzYxMzU0NTY3IC04NDU5MDAzNjIuIC0+IC0wCit4bXVsMzUyIG11bHRpcGx5IDU2Mzg5MTYyMEUtMzYxMzU0NTY3IC04NDU5MDAzNjIuIC0+IC00Ljc2OTk2MTI1RS0zNjEzNTQ1NTAgSW5leGFjdCBSb3VuZGVkCit4cG93MzUyIHBvd2VyIDU2Mzg5MTYyMEUtMzYxMzU0NTY3IC04NDU5MDAzNjIgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMzUyIHJlbWFpbmRlciA1NjM4OTE2MjBFLTM2MTM1NDU2NyAtODQ1OTAwMzYyLiAtPiA1LjYzODkxNjIwRS0zNjEzNTQ1NTkKK3hzdWIzNTIgc3VidHJhY3QgNTYzODkxNjIwRS0zNjEzNTQ1NjcgLTg0NTkwMDM2Mi4gLT4gODQ1OTAwMzYyIEluZXhhY3QgUm91bmRlZAoreGFkZDM1MyBhZGQgLTY5LjcyMzEyODYgODU3NzMuNzUwNCAtPiA4NTcwNC4wMjczIEluZXhhY3QgUm91bmRlZAoreGNvbTM1MyBjb21wYXJlIC02OS43MjMxMjg2IDg1NzczLjc1MDQgLT4gLTEKK3hkaXYzNTMgZGl2aWRlIC02OS43MjMxMjg2IDg1NzczLjc1MDQgLT4gLTAuMDAwODEyODcyNTY2IEluZXhhY3QgUm91bmRlZAoreGR2aTM1MyBkaXZpZGVpbnQgLTY5LjcyMzEyODYgODU3NzMuNzUwNCAtPiAtMAoreG11bDM1MyBtdWx0aXBseSAtNjkuNzIzMTI4NiA4NTc3My43NTA0IC0+IC01OTgwNDE0LjIzIEluZXhhY3QgUm91bmRlZAoreHBvdzM1MyBwb3dlciAtNjkuNzIzMTI4NiA4NTc3NCAtPiA2LjQxNzE0MjYxRSsxNTgxMTMgSW5leGFjdCBSb3VuZGVkCit4cmVtMzUzIHJlbWFpbmRlciAtNjkuNzIzMTI4NiA4NTc3My43NTA0IC0+IC02OS43MjMxMjg2Cit4c3ViMzUzIHN1YnRyYWN0IC02OS43MjMxMjg2IDg1NzczLjc1MDQgLT4gLTg1ODQzLjQ3MzUgSW5leGFjdCBSb3VuZGVkCit4YWRkMzU0IGFkZCA1MTI1LjUxMTg4IDczODE0NjM4LjRFLTUwMDkzNDc0MSAtPiA1MTI1LjUxMTg4IEluZXhhY3QgUm91bmRlZAoreGNvbTM1NCBjb21wYXJlIDUxMjUuNTExODggNzM4MTQ2MzguNEUtNTAwOTM0NzQxIC0+IDEKK3hkaXYzNTQgZGl2aWRlIDUxMjUuNTExODggNzM4MTQ2MzguNEUtNTAwOTM0NzQxIC0+IDYuOTQzNzYwNzRFKzUwMDkzNDczNiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNTQgZGl2aWRlaW50IDUxMjUuNTExODggNzM4MTQ2MzguNEUtNTAwOTM0NzQxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzU0IG11bHRpcGx5IDUxMjUuNTExODggNzM4MTQ2MzguNEUtNTAwOTM0NzQxIC0+IDMuNzgzMzc4MDZFLTUwMDkzNDczMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNTQgcG93ZXIgNTEyNS41MTE4OCA3IC0+IDkuMjkzMTAyMTZFKzI1IEluZXhhY3QgUm91bmRlZAoreHJlbTM1NCByZW1haW5kZXIgNTEyNS41MTE4OCA3MzgxNDYzOC40RS01MDA5MzQ3NDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzNTQgc3VidHJhY3QgNTEyNS41MTE4OCA3MzgxNDYzOC40RS01MDA5MzQ3NDEgLT4gNTEyNS41MTE4OCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNTUgYWRkIC01NC42MjU0MDk2IC0zMzI5MjE4OTkuIC0+IC0zMzI5MjE5NTQgSW5leGFjdCBSb3VuZGVkCit4Y29tMzU1IGNvbXBhcmUgLTU0LjYyNTQwOTYgLTMzMjkyMTg5OS4gLT4gMQoreGRpdjM1NSBkaXZpZGUgLTU0LjYyNTQwOTYgLTMzMjkyMTg5OS4gLT4gMS42NDA3ODc1MkUtNyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNTUgZGl2aWRlaW50IC01NC42MjU0MDk2IC0zMzI5MjE4OTkuIC0+IDAKK3htdWwzNTUgbXVsdGlwbHkgLTU0LjYyNTQwOTYgLTMzMjkyMTg5OS4gLT4gMS44MTg1OTk1MUUrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93MzU1IHBvd2VyIC01NC42MjU0MDk2IC0zMzI5MjE4OTkgLT4gLTEuMDE0ODI1NjlFLTU3ODQxNjc0NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNTUgcmVtYWluZGVyIC01NC42MjU0MDk2IC0zMzI5MjE4OTkuIC0+IC01NC42MjU0MDk2Cit4c3ViMzU1IHN1YnRyYWN0IC01NC42MjU0MDk2IC0zMzI5MjE4OTkuIC0+IDMzMjkyMTg0NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNTYgYWRkIC05LjA0Nzc4MDk1RS01OTE4NzQwNzkgODcxOS40MDI4NiAtPiA4NzE5LjQwMjg2IEluZXhhY3QgUm91bmRlZAoreGNvbTM1NiBjb21wYXJlIC05LjA0Nzc4MDk1RS01OTE4NzQwNzkgODcxOS40MDI4NiAtPiAtMQoreGRpdjM1NiBkaXZpZGUgLTkuMDQ3NzgwOTVFLTU5MTg3NDA3OSA4NzE5LjQwMjg2IC0+IC0xLjAzNzY2MDYyRS01OTE4NzQwODIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzU2IGRpdmlkZWludCAtOS4wNDc3ODA5NUUtNTkxODc0MDc5IDg3MTkuNDAyODYgLT4gLTAKK3htdWwzNTYgbXVsdGlwbHkgLTkuMDQ3NzgwOTVFLTU5MTg3NDA3OSA4NzE5LjQwMjg2IC0+IC03Ljg4OTEyNDcxRS01OTE4NzQwNzUgSW5leGFjdCBSb3VuZGVkCit4cG93MzU2IHBvd2VyIC05LjA0Nzc4MDk1RS01OTE4NzQwNzkgODcxOSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzU2IHJlbWFpbmRlciAtOS4wNDc3ODA5NUUtNTkxODc0MDc5IDg3MTkuNDAyODYgLT4gLTkuMDQ3NzgwOTVFLTU5MTg3NDA3OQoreHN1YjM1NiBzdWJ0cmFjdCAtOS4wNDc3ODA5NUUtNTkxODc0MDc5IDg3MTkuNDAyODYgLT4gLTg3MTkuNDAyODYgSW5leGFjdCBSb3VuZGVkCit4YWRkMzU3IGFkZCAtMjEwMDYuMTczM0UrODg0Njg0NDMxIC00ODg3Mi45MTc1IC0+IC0yLjEwMDYxNzMzRSs4ODQ2ODQ0MzUgSW5leGFjdCBSb3VuZGVkCit4Y29tMzU3IGNvbXBhcmUgLTIxMDA2LjE3MzNFKzg4NDY4NDQzMSAtNDg4NzIuOTE3NSAtPiAtMQoreGRpdjM1NyBkaXZpZGUgLTIxMDA2LjE3MzNFKzg4NDY4NDQzMSAtNDg4NzIuOTE3NSAtPiA0LjI5ODEyMTQxRSs4ODQ2ODQ0MzAgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzU3IGRpdmlkZWludCAtMjEwMDYuMTczM0UrODg0Njg0NDMxIC00ODg3Mi45MTc1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzU3IG11bHRpcGx5IC0yMTAwNi4xNzMzRSs4ODQ2ODQ0MzEgLTQ4ODcyLjkxNzUgLT4gMS4wMjY2MzI5N0UrODg0Njg0NDQwIEluZXhhY3QgUm91bmRlZAoreHBvdzM1NyBwb3dlciAtMjEwMDYuMTczM0UrODg0Njg0NDMxIC00ODg3MyAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzU3IHJlbWFpbmRlciAtMjEwMDYuMTczM0UrODg0Njg0NDMxIC00ODg3Mi45MTc1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzU3IHN1YnRyYWN0IC0yMTAwNi4xNzMzRSs4ODQ2ODQ0MzEgLTQ4ODcyLjkxNzUgLT4gLTIuMTAwNjE3MzNFKzg4NDY4NDQzNSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNTggYWRkIC0xNTQ2NzgzIC01MTkzNTM3MC40IC0+IC01MzQ4MjE1My40Cit4Y29tMzU4IGNvbXBhcmUgLTE1NDY3ODMgLTUxOTM1MzcwLjQgLT4gMQoreGRpdjM1OCBkaXZpZGUgLTE1NDY3ODMgLTUxOTM1MzcwLjQgLT4gMC4wMjk3ODI4NDMzIEluZXhhY3QgUm91bmRlZAoreGR2aTM1OCBkaXZpZGVpbnQgLTE1NDY3ODMgLTUxOTM1MzcwLjQgLT4gMAoreG11bDM1OCBtdWx0aXBseSAtMTU0Njc4MyAtNTE5MzUzNzAuNCAtPiA4LjAzMzI3NDgwRSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNTggcG93ZXIgLTE1NDY3ODMgLTUxOTM1MzcwIC0+IDMuMzYwMjI0NjFFLTMyMTQ1MDMwNiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNTggcmVtYWluZGVyIC0xNTQ2NzgzIC01MTkzNTM3MC40IC0+IC0xNTQ2NzgzLjAKK3hzdWIzNTggc3VidHJhY3QgLTE1NDY3ODMgLTUxOTM1MzcwLjQgLT4gNTAzODg1ODcuNAoreGFkZDM1OSBhZGQgNjEzMDI0ODYuOCAyMDUuNDkwNDE3IC0+IDYxMzAyNjkyLjMgSW5leGFjdCBSb3VuZGVkCit4Y29tMzU5IGNvbXBhcmUgNjEzMDI0ODYuOCAyMDUuNDkwNDE3IC0+IDEKK3hkaXYzNTkgZGl2aWRlIDYxMzAyNDg2LjggMjA1LjQ5MDQxNyAtPiAyOTgzMjIuODUwIEluZXhhY3QgUm91bmRlZAoreGR2aTM1OSBkaXZpZGVpbnQgNjEzMDI0ODYuOCAyMDUuNDkwNDE3IC0+IDI5ODMyMgoreG11bDM1OSBtdWx0aXBseSA2MTMwMjQ4Ni44IDIwNS40OTA0MTcgLT4gMS4yNTk3MDczNkUrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93MzU5IHBvd2VyIDYxMzAyNDg2LjggMjA1IC0+IDIuNzEwMjQ3NTVFKzE1OTYgSW5leGFjdCBSb3VuZGVkCit4cmVtMzU5IHJlbWFpbmRlciA2MTMwMjQ4Ni44IDIwNS40OTA0MTcgLT4gMTc0LjYxOTcyNgoreHN1YjM1OSBzdWJ0cmFjdCA2MTMwMjQ4Ni44IDIwNS40OTA0MTcgLT4gNjEzMDIyODEuMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNjAgYWRkIC0zMTgxODAxMDkuIC01NDAwODc0NC42RS0xNzA5MzEwMDIgLT4gLTMxODE4MDEwOSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNjAgY29tcGFyZSAtMzE4MTgwMTA5LiAtNTQwMDg3NDQuNkUtMTcwOTMxMDAyIC0+IC0xCit4ZGl2MzYwIGRpdmlkZSAtMzE4MTgwMTA5LiAtNTQwMDg3NDQuNkUtMTcwOTMxMDAyIC0+IDUuODkxMjcwMjNFKzE3MDkzMTAwMiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNjAgZGl2aWRlaW50IC0zMTgxODAxMDkuIC01NDAwODc0NC42RS0xNzA5MzEwMDIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzNjAgbXVsdGlwbHkgLTMxODE4MDEwOS4gLTU0MDA4NzQ0LjZFLTE3MDkzMTAwMiAtPiAxLjcxODQ1MDgyRS0xNzA5MzA5ODYgSW5leGFjdCBSb3VuZGVkCit4cG93MzYwIHBvd2VyIC0zMTgxODAxMDkuIC01IC0+IC0zLjA2NjQ0MjgwRS00MyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNjAgcmVtYWluZGVyIC0zMTgxODAxMDkuIC01NDAwODc0NC42RS0xNzA5MzEwMDIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzNjAgc3VidHJhY3QgLTMxODE4MDEwOS4gLTU0MDA4NzQ0LjZFLTE3MDkzMTAwMiAtPiAtMzE4MTgwMTA5IEluZXhhY3QgUm91bmRlZAoreGFkZDM2MSBhZGQgLTI4NDg2MTM3LjFFKzkwMTQ0MTcxNCAtNDI0NTQuOTQwIC0+IC0yLjg0ODYxMzcxRSs5MDE0NDE3MjEgSW5leGFjdCBSb3VuZGVkCit4Y29tMzYxIGNvbXBhcmUgLTI4NDg2MTM3LjFFKzkwMTQ0MTcxNCAtNDI0NTQuOTQwIC0+IC0xCit4ZGl2MzYxIGRpdmlkZSAtMjg0ODYxMzcuMUUrOTAxNDQxNzE0IC00MjQ1NC45NDAgLT4gNi43MDk3MzQzOUUrOTAxNDQxNzE2IEluZXhhY3QgUm91bmRlZAoreGR2aTM2MSBkaXZpZGVpbnQgLTI4NDg2MTM3LjFFKzkwMTQ0MTcxNCAtNDI0NTQuOTQwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzYxIG11bHRpcGx5IC0yODQ4NjEzNy4xRSs5MDE0NDE3MTQgLTQyNDU0Ljk0MCAtPiAxLjIwOTM3NzI0RSs5MDE0NDE3MjYgSW5leGFjdCBSb3VuZGVkCit4cG93MzYxIHBvd2VyIC0yODQ4NjEzNy4xRSs5MDE0NDE3MTQgLTQyNDU1IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW0zNjEgcmVtYWluZGVyIC0yODQ4NjEzNy4xRSs5MDE0NDE3MTQgLTQyNDU0Ljk0MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjM2MSBzdWJ0cmFjdCAtMjg0ODYxMzcuMUUrOTAxNDQxNzE0IC00MjQ1NC45NDAgLT4gLTIuODQ4NjEzNzFFKzkwMTQ0MTcyMSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNjIgYWRkIC01NDYzOTgzMjguIC0yNy45MTQ5NzEyIC0+IC01NDYzOTgzNTYgSW5leGFjdCBSb3VuZGVkCit4Y29tMzYyIGNvbXBhcmUgLTU0NjM5ODMyOC4gLTI3LjkxNDk3MTIgLT4gLTEKK3hkaXYzNjIgZGl2aWRlIC01NDYzOTgzMjguIC0yNy45MTQ5NzEyIC0+IDE5NTczNjY2LjIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzYyIGRpdmlkZWludCAtNTQ2Mzk4MzI4LiAtMjcuOTE0OTcxMiAtPiAxOTU3MzY2NgoreG11bDM2MiBtdWx0aXBseSAtNTQ2Mzk4MzI4LiAtMjcuOTE0OTcxMiAtPiAxLjUyNTI2OTM2RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNjIgcG93ZXIgLTU0NjM5ODMyOC4gLTI4IC0+IDIuMjM3MzcwMzJFLTI0NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNjIgcmVtYWluZGVyIC01NDYzOTgzMjguIC0yNy45MTQ5NzEyIC0+IC01LjMzMTU4MDgKK3hzdWIzNjIgc3VidHJhY3QgLTU0NjM5ODMyOC4gLTI3LjkxNDk3MTIgLT4gLTU0NjM5ODMwMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNjMgYWRkIDU0MDIwNjYuMUUtMjg0OTc4MjE2IDYyMi43NTExMjggLT4gNjIyLjc1MTEyOCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNjMgY29tcGFyZSA1NDAyMDY2LjFFLTI4NDk3ODIxNiA2MjIuNzUxMTI4IC0+IC0xCit4ZGl2MzYzIGRpdmlkZSA1NDAyMDY2LjFFLTI4NDk3ODIxNiA2MjIuNzUxMTI4IC0+IDguNjc0NTE4MzdFLTI4NDk3ODIxMyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNjMgZGl2aWRlaW50IDU0MDIwNjYuMUUtMjg0OTc4MjE2IDYyMi43NTExMjggLT4gMAoreG11bDM2MyBtdWx0aXBseSA1NDAyMDY2LjFFLTI4NDk3ODIxNiA2MjIuNzUxMTI4IC0+IDMuMzY0MTQyNzZFLTI4NDk3ODIwNyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNjMgcG93ZXIgNTQwMjA2Ni4xRS0yODQ5NzgyMTYgNjIzIC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTM2MyByZW1haW5kZXIgNTQwMjA2Ni4xRS0yODQ5NzgyMTYgNjIyLjc1MTEyOCAtPiA1LjQwMjA2NjFFLTI4NDk3ODIxMAoreHN1YjM2MyBzdWJ0cmFjdCA1NDAyMDY2LjFFLTI4NDk3ODIxNiA2MjIuNzUxMTI4IC0+IC02MjIuNzUxMTI4IEluZXhhY3QgUm91bmRlZAoreGFkZDM2NCBhZGQgMTg4NDU2MjAgMzEyOS40Mzc1MyAtPiAxODg0ODc0OS40IEluZXhhY3QgUm91bmRlZAoreGNvbTM2NCBjb21wYXJlIDE4ODQ1NjIwIDMxMjkuNDM3NTMgLT4gMQoreGRpdjM2NCBkaXZpZGUgMTg4NDU2MjAgMzEyOS40Mzc1MyAtPiA2MDIyLjA0NzA0IEluZXhhY3QgUm91bmRlZAoreGR2aTM2NCBkaXZpZGVpbnQgMTg4NDU2MjAgMzEyOS40Mzc1MyAtPiA2MDIyCit4bXVsMzY0IG11bHRpcGx5IDE4ODQ1NjIwIDMxMjkuNDM3NTMgLT4gNS44OTc2MTkwNUUrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93MzY0IHBvd2VyIDE4ODQ1NjIwIDMxMjkgLT4gMS4zNTk2NzQ0M0UrMjI3NjQgSW5leGFjdCBSb3VuZGVkCit4cmVtMzY0IHJlbWFpbmRlciAxODg0NTYyMCAzMTI5LjQzNzUzIC0+IDE0Ny4xOTQzNAoreHN1YjM2NCBzdWJ0cmFjdCAxODg0NTYyMCAzMTI5LjQzNzUzIC0+IDE4ODQyNDkwLjYgSW5leGFjdCBSb3VuZGVkCit4YWRkMzY1IGFkZCA1MDcwNy4xNDEyRSs5MTI0NzU2NzAgLTE5ODA5OC4xODZFKzcwMTQwNzUyNCAtPiA1LjA3MDcxNDEyRSs5MTI0NzU2NzQgSW5leGFjdCBSb3VuZGVkCit4Y29tMzY1IGNvbXBhcmUgNTA3MDcuMTQxMkUrOTEyNDc1NjcwIC0xOTgwOTguMTg2RSs3MDE0MDc1MjQgLT4gMQoreGRpdjM2NSBkaXZpZGUgNTA3MDcuMTQxMkUrOTEyNDc1NjcwIC0xOTgwOTguMTg2RSs3MDE0MDc1MjQgLT4gLTIuNTU5Njk3NDBFKzIxMTA2ODE0NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNjUgZGl2aWRlaW50IDUwNzA3LjE0MTJFKzkxMjQ3NTY3MCAtMTk4MDk4LjE4NkUrNzAxNDA3NTI0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzY1IG11bHRpcGx5IDUwNzA3LjE0MTJFKzkxMjQ3NTY3MCAtMTk4MDk4LjE4NkUrNzAxNDA3NTI0IC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3hwb3czNjUgcG93ZXIgNTA3MDcuMTQxMkUrOTEyNDc1NjcwIC0yIC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTM2NSByZW1haW5kZXIgNTA3MDcuMTQxMkUrOTEyNDc1NjcwIC0xOTgwOTguMTg2RSs3MDE0MDc1MjQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzNjUgc3VidHJhY3QgNTA3MDcuMTQxMkUrOTEyNDc1NjcwIC0xOTgwOTguMTg2RSs3MDE0MDc1MjQgLT4gNS4wNzA3MTQxMkUrOTEyNDc1Njc0IEluZXhhY3QgUm91bmRlZAoreGFkZDM2NiBhZGQgNTUuODI0NTAwNkUrOTI4ODg1OTkxIDk5MTcwODQzLjlFLTQ3NDAyMTY3IC0+IDUuNTgyNDUwMDZFKzkyODg4NTk5MiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNjYgY29tcGFyZSA1NS44MjQ1MDA2RSs5Mjg4ODU5OTEgOTkxNzA4NDMuOUUtNDc0MDIxNjcgLT4gMQoreGRpdjM2NiBkaXZpZGUgNTUuODI0NTAwNkUrOTI4ODg1OTkxIDk5MTcwODQzLjlFLTQ3NDAyMTY3IC0+IDUuNjI5MTI0MjlFKzk3NjI4ODE1MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNjYgZGl2aWRlaW50IDU1LjgyNDUwMDZFKzkyODg4NTk5MSA5OTE3MDg0My45RS00NzQwMjE2NyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDM2NiBtdWx0aXBseSA1NS44MjQ1MDA2RSs5Mjg4ODU5OTEgOTkxNzA4NDMuOUUtNDc0MDIxNjcgLT4gNS41MzYxNjI4M0UrODgxNDgzODMzIEluZXhhY3QgUm91bmRlZAoreHBvdzM2NiBwb3dlciA1NS44MjQ1MDA2RSs5Mjg4ODU5OTEgMTAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMzY2IHJlbWFpbmRlciA1NS44MjQ1MDA2RSs5Mjg4ODU5OTEgOTkxNzA4NDMuOUUtNDc0MDIxNjcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzNjYgc3VidHJhY3QgNTUuODI0NTAwNkUrOTI4ODg1OTkxIDk5MTcwODQzLjlFLTQ3NDAyMTY3IC0+IDUuNTgyNDUwMDZFKzkyODg4NTk5MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNjcgYWRkIDEzLjgwMDM4ODNFLTM4NjIyNDkyMSAtODQxMjY0ODEuOUUtMjk2Mzc4MzQxIC0+IC04LjQxMjY0ODE5RS0yOTYzNzgzMzQgSW5leGFjdCBSb3VuZGVkCit4Y29tMzY3IGNvbXBhcmUgMTMuODAwMzg4M0UtMzg2MjI0OTIxIC04NDEyNjQ4MS45RS0yOTYzNzgzNDEgLT4gMQoreGRpdjM2NyBkaXZpZGUgMTMuODAwMzg4M0UtMzg2MjI0OTIxIC04NDEyNjQ4MS45RS0yOTYzNzgzNDEgLT4gLTEuNjQwNDMzMzFFLTg5ODQ2NTg3IEluZXhhY3QgUm91bmRlZAoreGR2aTM2NyBkaXZpZGVpbnQgMTMuODAwMzg4M0UtMzg2MjI0OTIxIC04NDEyNjQ4MS45RS0yOTYzNzgzNDEgLT4gLTAKK3htdWwzNjcgbXVsdGlwbHkgMTMuODAwMzg4M0UtMzg2MjI0OTIxIC04NDEyNjQ4MS45RS0yOTYzNzgzNDEgLT4gLTEuMTYwOTc4MTJFLTY4MjYwMzI1MyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNjcgcG93ZXIgMTMuODAwMzg4M0UtMzg2MjI0OTIxIC04IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTM2NyByZW1haW5kZXIgMTMuODAwMzg4M0UtMzg2MjI0OTIxIC04NDEyNjQ4MS45RS0yOTYzNzgzNDEgLT4gMS4zODAwMzg4M0UtMzg2MjI0OTIwCit4c3ViMzY3IHN1YnRyYWN0IDEzLjgwMDM4ODNFLTM4NjIyNDkyMSAtODQxMjY0ODEuOUUtMjk2Mzc4MzQxIC0+IDguNDEyNjQ4MTlFLTI5NjM3ODMzNCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNjggYWRkIDk4MjAuOTA0NTcgNDY2NzEuNTkxNSAtPiA1NjQ5Mi40OTYxIEluZXhhY3QgUm91bmRlZAoreGNvbTM2OCBjb21wYXJlIDk4MjAuOTA0NTcgNDY2NzEuNTkxNSAtPiAtMQoreGRpdjM2OCBkaXZpZGUgOTgyMC45MDQ1NyA0NjY3MS41OTE1IC0+IDAuMjEwNDI1NzQ4IEluZXhhY3QgUm91bmRlZAoreGR2aTM2OCBkaXZpZGVpbnQgOTgyMC45MDQ1NyA0NjY3MS41OTE1IC0+IDAKK3htdWwzNjggbXVsdGlwbHkgOTgyMC45MDQ1NyA0NjY3MS41OTE1IC0+IDQ1ODM1NzI0NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNjggcG93ZXIgOTgyMC45MDQ1NyA0NjY3MiAtPiA0Ljk0NzUzMDcwRSsxODYzMjEgSW5leGFjdCBSb3VuZGVkCit4cmVtMzY4IHJlbWFpbmRlciA5ODIwLjkwNDU3IDQ2NjcxLjU5MTUgLT4gOTgyMC45MDQ1NworeHN1YjM2OCBzdWJ0cmFjdCA5ODIwLjkwNDU3IDQ2NjcxLjU5MTUgLT4gLTM2ODUwLjY4NjkgSW5leGFjdCBSb3VuZGVkCit4YWRkMzY5IGFkZCA3LjIyNDM2MDA2RSs4MzE5NDkxNTMgLTExMTY4ODMwRSszMjIzMzEwNDUgLT4gNy4yMjQzNjAwNkUrODMxOTQ5MTUzIEluZXhhY3QgUm91bmRlZAoreGNvbTM2OSBjb21wYXJlIDcuMjI0MzYwMDZFKzgzMTk0OTE1MyAtMTExNjg4MzBFKzMyMjMzMTA0NSAtPiAxCit4ZGl2MzY5IGRpdmlkZSA3LjIyNDM2MDA2RSs4MzE5NDkxNTMgLTExMTY4ODMwRSszMjIzMzEwNDUgLT4gLTYuNDY4MzIzMDZFKzUwOTYxODEwMSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNjkgZGl2aWRlaW50IDcuMjI0MzYwMDZFKzgzMTk0OTE1MyAtMTExNjg4MzBFKzMyMjMzMTA0NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDM2OSBtdWx0aXBseSA3LjIyNDM2MDA2RSs4MzE5NDkxNTMgLTExMTY4ODMwRSszMjIzMzEwNDUgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAoreHBvdzM2OSBwb3dlciA3LjIyNDM2MDA2RSs4MzE5NDkxNTMgLTEgLT4gMS4zODQyMDU2NUUtODMxOTQ5MTU0IEluZXhhY3QgUm91bmRlZAoreHJlbTM2OSByZW1haW5kZXIgNy4yMjQzNjAwNkUrODMxOTQ5MTUzIC0xMTE2ODgzMEUrMzIyMzMxMDQ1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzY5IHN1YnRyYWN0IDcuMjI0MzYwMDZFKzgzMTk0OTE1MyAtMTExNjg4MzBFKzMyMjMzMTA0NSAtPiA3LjIyNDM2MDA2RSs4MzE5NDkxNTMgSW5leGFjdCBSb3VuZGVkCit4YWRkMzcwIGFkZCA0NzI2NDg5MDAgLTIwNy43ODQxNTMgLT4gNDcyNjQ4NjkyIEluZXhhY3QgUm91bmRlZAoreGNvbTM3MCBjb21wYXJlIDQ3MjY0ODkwMCAtMjA3Ljc4NDE1MyAtPiAxCit4ZGl2MzcwIGRpdmlkZSA0NzI2NDg5MDAgLTIwNy43ODQxNTMgLT4gLTIyNzQ3MTEuMDEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzcwIGRpdmlkZWludCA0NzI2NDg5MDAgLTIwNy43ODQxNTMgLT4gLTIyNzQ3MTEKK3htdWwzNzAgbXVsdGlwbHkgNDcyNjQ4OTAwIC0yMDcuNzg0MTUzIC0+IC05LjgyMDg5NTE0RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNzAgcG93ZXIgNDcyNjQ4OTAwIC0yMDggLT4gNC45NjU0NzE0NUUtMTgwNSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNzAgcmVtYWluZGVyIDQ3MjY0ODkwMCAtMjA3Ljc4NDE1MyAtPiAxLjU0NTIxNworeHN1YjM3MCBzdWJ0cmFjdCA0NzI2NDg5MDAgLTIwNy43ODQxNTMgLT4gNDcyNjQ5MTA4IEluZXhhY3QgUm91bmRlZAoreGFkZDM3MSBhZGQgLTg3NTQuNDkzMDYgLTgxOC4xNjUxNTNFKzYzMTQ3NTQ1NyAtPiAtOC4xODE2NTE1M0UrNjMxNDc1NDU5IEluZXhhY3QgUm91bmRlZAoreGNvbTM3MSBjb21wYXJlIC04NzU0LjQ5MzA2IC04MTguMTY1MTUzRSs2MzE0NzU0NTcgLT4gMQoreGRpdjM3MSBkaXZpZGUgLTg3NTQuNDkzMDYgLTgxOC4xNjUxNTNFKzYzMTQ3NTQ1NyAtPiAxLjA3MDAxNTM5RS02MzE0NzU0NTYgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzcxIGRpdmlkZWludCAtODc1NC40OTMwNiAtODE4LjE2NTE1M0UrNjMxNDc1NDU3IC0+IDAKK3htdWwzNzEgbXVsdGlwbHkgLTg3NTQuNDkzMDYgLTgxOC4xNjUxNTNFKzYzMTQ3NTQ1NyAtPiA3LjE2MjYyMTE1RSs2MzE0NzU0NjMgSW5leGFjdCBSb3VuZGVkCit4cG93MzcxIHBvd2VyIC04NzU0LjQ5MzA2IC04IC0+IDIuODk4MzU3NjdFLTMyIEluZXhhY3QgUm91bmRlZAoreHJlbTM3MSByZW1haW5kZXIgLTg3NTQuNDkzMDYgLTgxOC4xNjUxNTNFKzYzMTQ3NTQ1NyAtPiAtODc1NC40OTMwNgoreHN1YjM3MSBzdWJ0cmFjdCAtODc1NC40OTMwNiAtODE4LjE2NTE1M0UrNjMxNDc1NDU3IC0+IDguMTgxNjUxNTNFKzYzMTQ3NTQ1OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNzIgYWRkIDk4NzUwODY0IDE5MTM4MC41NTEgLT4gOTg5NDIyNDQuNiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zNzIgY29tcGFyZSA5ODc1MDg2NCAxOTEzODAuNTUxIC0+IDEKK3hkaXYzNzIgZGl2aWRlIDk4NzUwODY0IDE5MTM4MC41NTEgLT4gNTE1Ljk5MjE2MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNzIgZGl2aWRlaW50IDk4NzUwODY0IDE5MTM4MC41NTEgLT4gNTE1Cit4bXVsMzcyIG11bHRpcGx5IDk4NzUwODY0IDE5MTM4MC41NTEgLT4gMS44ODk4OTk0OEUrMTMgSW5leGFjdCBSb3VuZGVkCit4cG93MzcyIHBvd2VyIDk4NzUwODY0IDE5MTM4MSAtPiAxLjcwOTA4ODA5RSsxNTMwMDAzIEluZXhhY3QgUm91bmRlZAoreHJlbTM3MiByZW1haW5kZXIgOTg3NTA4NjQgMTkxMzgwLjU1MSAtPiAxODk4ODAuMjM1Cit4c3ViMzcyIHN1YnRyYWN0IDk4NzUwODY0IDE5MTM4MC41NTEgLT4gOTg1NTk0ODMuNCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNzMgYWRkIDcyNTI5MjU2MS4gLTc2ODk2MzYwNi5FKzM0MDc2Mjk4NiAtPiAtNy42ODk2MzYwNkUrMzQwNzYyOTk0IEluZXhhY3QgUm91bmRlZAoreGNvbTM3MyBjb21wYXJlIDcyNTI5MjU2MS4gLTc2ODk2MzYwNi5FKzM0MDc2Mjk4NiAtPiAxCit4ZGl2MzczIGRpdmlkZSA3MjUyOTI1NjEuIC03Njg5NjM2MDYuRSszNDA3NjI5ODYgLT4gLTkuNDMyMDc5MTdFLTM0MDc2Mjk4NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNzMgZGl2aWRlaW50IDcyNTI5MjU2MS4gLTc2ODk2MzYwNi5FKzM0MDc2Mjk4NiAtPiAtMAoreG11bDM3MyBtdWx0aXBseSA3MjUyOTI1NjEuIC03Njg5NjM2MDYuRSszNDA3NjI5ODYgLT4gLTUuNTc3MjM1ODNFKzM0MDc2MzAwMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNzMgcG93ZXIgNzI1MjkyNTYxLiAtOCAtPiAxLjMwNTg1Mjc3RS03MSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNzMgcmVtYWluZGVyIDcyNTI5MjU2MS4gLTc2ODk2MzYwNi5FKzM0MDc2Mjk4NiAtPiA3MjUyOTI1NjEKK3hzdWIzNzMgc3VidHJhY3QgNzI1MjkyNTYxLiAtNzY4OTYzNjA2LkUrMzQwNzYyOTg2IC0+IDcuNjg5NjM2MDZFKzM0MDc2Mjk5NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNzQgYWRkIDE4NjIuODA0NDUgNjQ4MjU0NDgzLiAtPiA2NDgyNTYzNDYgSW5leGFjdCBSb3VuZGVkCit4Y29tMzc0IGNvbXBhcmUgMTg2Mi44MDQ0NSA2NDgyNTQ0ODMuIC0+IC0xCit4ZGl2Mzc0IGRpdmlkZSAxODYyLjgwNDQ1IDY0ODI1NDQ4My4gLT4gMC4wMDAwMDI4NzM1Njk3MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzNzQgZGl2aWRlaW50IDE4NjIuODA0NDUgNjQ4MjU0NDgzLiAtPiAwCit4bXVsMzc0IG11bHRpcGx5IDE4NjIuODA0NDUgNjQ4MjU0NDgzLiAtPiAxLjIwNzU3MTM0RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3czNzQgcG93ZXIgMTg2Mi44MDQ0NSA2NDgyNTQ0ODMgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMzc0IHJlbWFpbmRlciAxODYyLjgwNDQ1IDY0ODI1NDQ4My4gLT4gMTg2Mi44MDQ0NQoreHN1YjM3NCBzdWJ0cmFjdCAxODYyLjgwNDQ1IDY0ODI1NDQ4My4gLT4gLTY0ODI1MjYyMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzNzUgYWRkIC01NTQ5MzIwLjEgLTkzNTgwNjg0LjEgLT4gLTk5MTMwMDA0LjIKK3hjb20zNzUgY29tcGFyZSAtNTU0OTMyMC4xIC05MzU4MDY4NC4xIC0+IDEKK3hkaXYzNzUgZGl2aWRlIC01NTQ5MzIwLjEgLTkzNTgwNjg0LjEgLT4gMC4wNTkyOTk4NDU0IEluZXhhY3QgUm91bmRlZAoreGR2aTM3NSBkaXZpZGVpbnQgLTU1NDkzMjAuMSAtOTM1ODA2ODQuMSAtPiAwCit4bXVsMzc1IG11bHRpcGx5IC01NTQ5MzIwLjEgLTkzNTgwNjg0LjEgLT4gNS4xOTMwOTE3MUUrMTQgSW5leGFjdCBSb3VuZGVkCit4cG93Mzc1IHBvd2VyIC01NTQ5MzIwLjEgLTkzNTgwNjg0IC0+IDQuMjA2NjIwNzlFLTYzMTEzMDU3MiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNzUgcmVtYWluZGVyIC01NTQ5MzIwLjEgLTkzNTgwNjg0LjEgLT4gLTU1NDkzMjAuMQoreHN1YjM3NSBzdWJ0cmFjdCAtNTU0OTMyMC4xIC05MzU4MDY4NC4xIC0+IDg4MDMxMzY0LjAKK3hhZGQzNzYgYWRkIC0xNDY3NzA1My4xIC0yNTc4NC43MzU4IC0+IC0xNDcwMjgzNy44IEluZXhhY3QgUm91bmRlZAoreGNvbTM3NiBjb21wYXJlIC0xNDY3NzA1My4xIC0yNTc4NC43MzU4IC0+IC0xCit4ZGl2Mzc2IGRpdmlkZSAtMTQ2NzcwNTMuMSAtMjU3ODQuNzM1OCAtPiA1NjkuMjE0Nzk1IEluZXhhY3QgUm91bmRlZAoreGR2aTM3NiBkaXZpZGVpbnQgLTE0Njc3MDUzLjEgLTI1Nzg0LjczNTggLT4gNTY5Cit4bXVsMzc2IG11bHRpcGx5IC0xNDY3NzA1My4xIC0yNTc4NC43MzU4IC0+IDMuNzg0NDM5MzdFKzExIEluZXhhY3QgUm91bmRlZAoreHBvdzM3NiBwb3dlciAtMTQ2NzcwNTMuMSAtMjU3ODUgLT4gLTEuNjQ3NjA4MzFFLTE4NDc5MiBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zNzYgcmVtYWluZGVyIC0xNDY3NzA1My4xIC0yNTc4NC43MzU4IC0+IC01NTM4LjQyOTgKK3hzdWIzNzYgc3VidHJhY3QgLTE0Njc3MDUzLjEgLTI1Nzg0LjczNTggLT4gLTE0NjUxMjY4LjQgSW5leGFjdCBSb3VuZGVkCit4YWRkMzc3IGFkZCA1NDc0MDIuMzA4RSs1NzE2ODc2MTcgLTc4MzU3OTcuMDFFKzUwMDA2NzM2NCAtPiA1LjQ3NDAyMzA4RSs1NzE2ODc2MjIgSW5leGFjdCBSb3VuZGVkCit4Y29tMzc3IGNvbXBhcmUgNTQ3NDAyLjMwOEUrNTcxNjg3NjE3IC03ODM1Nzk3LjAxRSs1MDAwNjczNjQgLT4gMQoreGRpdjM3NyBkaXZpZGUgNTQ3NDAyLjMwOEUrNTcxNjg3NjE3IC03ODM1Nzk3LjAxRSs1MDAwNjczNjQgLT4gLTYuOTg1OTE3NDJFKzcxNjIwMjUxIEluZXhhY3QgUm91bmRlZAoreGR2aTM3NyBkaXZpZGVpbnQgNTQ3NDAyLjMwOEUrNTcxNjg3NjE3IC03ODM1Nzk3LjAxRSs1MDAwNjczNjQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzNzcgbXVsdGlwbHkgNTQ3NDAyLjMwOEUrNTcxNjg3NjE3IC03ODM1Nzk3LjAxRSs1MDAwNjczNjQgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAoreHBvdzM3NyBwb3dlciA1NDc0MDIuMzA4RSs1NzE2ODc2MTcgLTggLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzc3IHJlbWFpbmRlciA1NDc0MDIuMzA4RSs1NzE2ODc2MTcgLTc4MzU3OTcuMDFFKzUwMDA2NzM2NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjM3NyBzdWJ0cmFjdCA1NDc0MDIuMzA4RSs1NzE2ODc2MTcgLTc4MzU3OTcuMDFFKzUwMDA2NzM2NCAtPiA1LjQ3NDAyMzA4RSs1NzE2ODc2MjIgSW5leGFjdCBSb3VuZGVkCit4YWRkMzc4IGFkZCAtNDEzMTczOC4wOSA3NTc5LjA3NTY2IC0+IC00MTI0MTU5LjAxIEluZXhhY3QgUm91bmRlZAoreGNvbTM3OCBjb21wYXJlIC00MTMxNzM4LjA5IDc1NzkuMDc1NjYgLT4gLTEKK3hkaXYzNzggZGl2aWRlIC00MTMxNzM4LjA5IDc1NzkuMDc1NjYgLT4gLTU0NS4xNTA2NTkgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzc4IGRpdmlkZWludCAtNDEzMTczOC4wOSA3NTc5LjA3NTY2IC0+IC01NDUKK3htdWwzNzggbXVsdGlwbHkgLTQxMzE3MzguMDkgNzU3OS4wNzU2NiAtPiAtMy4xMzE0NzU1NkUrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93Mzc4IHBvd2VyIC00MTMxNzM4LjA5IDc1NzkgLT4gLTQuNjgxMzI3OTRFKzUwMTQzIEluZXhhY3QgUm91bmRlZAoreHJlbTM3OCByZW1haW5kZXIgLTQxMzE3MzguMDkgNzU3OS4wNzU2NiAtPiAtMTE0MS44NTUzMAoreHN1YjM3OCBzdWJ0cmFjdCAtNDEzMTczOC4wOSA3NTc5LjA3NTY2IC0+IC00MTM5MzE3LjE3IEluZXhhY3QgUm91bmRlZAoreGFkZDM3OSBhZGQgNTA0NTQ0LjY0OCAtNzY3OC45NjEzM0UtNjYyMTQzMjY4IC0+IDUwNDU0NC42NDggSW5leGFjdCBSb3VuZGVkCit4Y29tMzc5IGNvbXBhcmUgNTA0NTQ0LjY0OCAtNzY3OC45NjEzM0UtNjYyMTQzMjY4IC0+IDEKK3hkaXYzNzkgZGl2aWRlIDUwNDU0NC42NDggLTc2NzguOTYxMzNFLTY2MjE0MzI2OCAtPiAtNi41NzA0ODAzOUUrNjYyMTQzMjY5IEluZXhhY3QgUm91bmRlZAoreGR2aTM3OSBkaXZpZGVpbnQgNTA0NTQ0LjY0OCAtNzY3OC45NjEzM0UtNjYyMTQzMjY4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsMzc5IG11bHRpcGx5IDUwNDU0NC42NDggLTc2NzguOTYxMzNFLTY2MjE0MzI2OCAtPiAtMy44NzQzNzg4NEUtNjYyMTQzMjU5IEluZXhhY3QgUm91bmRlZAoreHBvdzM3OSBwb3dlciA1MDQ1NDQuNjQ4IC04IC0+IDIuMzgxMjQwMDFFLTQ2IEluZXhhY3QgUm91bmRlZAoreHJlbTM3OSByZW1haW5kZXIgNTA0NTQ0LjY0OCAtNzY3OC45NjEzM0UtNjYyMTQzMjY4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzc5IHN1YnRyYWN0IDUwNDU0NC42NDggLTc2NzguOTYxMzNFLTY2MjE0MzI2OCAtPiA1MDQ1NDQuNjQ4IEluZXhhY3QgUm91bmRlZAoreGFkZDM4MCBhZGQgODI5ODk4MjQxIDg5MTIuOTkxMTRFKzkyOTIyODE0OSAtPiA4LjkxMjk5MTE0RSs5MjkyMjgxNTIgSW5leGFjdCBSb3VuZGVkCit4Y29tMzgwIGNvbXBhcmUgODI5ODk4MjQxIDg5MTIuOTkxMTRFKzkyOTIyODE0OSAtPiAtMQoreGRpdjM4MCBkaXZpZGUgODI5ODk4MjQxIDg5MTIuOTkxMTRFKzkyOTIyODE0OSAtPiA5LjMxMTEwODExRS05MjkyMjgxNDUgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzgwIGRpdmlkZWludCA4Mjk4OTgyNDEgODkxMi45OTExNEUrOTI5MjI4MTQ5IC0+IDAKK3htdWwzODAgbXVsdGlwbHkgODI5ODk4MjQxIDg5MTIuOTkxMTRFKzkyOTIyODE0OSAtPiA3LjM5Njg3NTY3RSs5MjkyMjgxNjEgSW5leGFjdCBSb3VuZGVkCit4cG93MzgwIHBvd2VyIDgyOTg5ODI0MSA5IC0+IDEuODY3MzQwODRFKzgwIEluZXhhY3QgUm91bmRlZAoreHJlbTM4MCByZW1haW5kZXIgODI5ODk4MjQxIDg5MTIuOTkxMTRFKzkyOTIyODE0OSAtPiA4Mjk4OTgyNDEKK3hzdWIzODAgc3VidHJhY3QgODI5ODk4MjQxIDg5MTIuOTkxMTRFKzkyOTIyODE0OSAtPiAtOC45MTI5OTExNEUrOTI5MjI4MTUyIEluZXhhY3QgUm91bmRlZAoreGFkZDM4MSBhZGQgNTMuNjg5MTY5MSAtMTEuMjM3MTE0MCAtPiA0Mi40NTIwNTUxCit4Y29tMzgxIGNvbXBhcmUgNTMuNjg5MTY5MSAtMTEuMjM3MTE0MCAtPiAxCit4ZGl2MzgxIGRpdmlkZSA1My42ODkxNjkxIC0xMS4yMzcxMTQwIC0+IC00Ljc3Nzg0MzIzIEluZXhhY3QgUm91bmRlZAoreGR2aTM4MSBkaXZpZGVpbnQgNTMuNjg5MTY5MSAtMTEuMjM3MTE0MCAtPiAtNAoreG11bDM4MSBtdWx0aXBseSA1My42ODkxNjkxIC0xMS4yMzcxMTQwIC0+IC02MDMuMzExMzE0IEluZXhhY3QgUm91bmRlZAoreHBvdzM4MSBwb3dlciA1My42ODkxNjkxIC0xMSAtPiA5LjM1OTM2NzI1RS0yMCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zODEgcmVtYWluZGVyIDUzLjY4OTE2OTEgLTExLjIzNzExNDAgLT4gOC43NDA3MTMxCit4c3ViMzgxIHN1YnRyYWN0IDUzLjY4OTE2OTEgLTExLjIzNzExNDAgLT4gNjQuOTI2MjgzMQoreGFkZDM4MiBhZGQgLTkzOTUxODIzLjQgLTI1MzE3Ljg2NDUgLT4gLTkzOTc3MTQxLjMgSW5leGFjdCBSb3VuZGVkCit4Y29tMzgyIGNvbXBhcmUgLTkzOTUxODIzLjQgLTI1MzE3Ljg2NDUgLT4gLTEKK3hkaXYzODIgZGl2aWRlIC05Mzk1MTgyMy40IC0yNTMxNy44NjQ1IC0+IDM3MTAuODkwNTIgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzgyIGRpdmlkZWludCAtOTM5NTE4MjMuNCAtMjUzMTcuODY0NSAtPiAzNzEwCit4bXVsMzgyIG11bHRpcGx5IC05Mzk1MTgyMy40IC0yNTMxNy44NjQ1IC0+IDIuMzc4NjU5NTNFKzEyIEluZXhhY3QgUm91bmRlZAoreHBvdzM4MiBwb3dlciAtOTM5NTE4MjMuNCAtMjUzMTggLT4gOS42Nzg1NzcxNEUtMjAxODU5IEluZXhhY3QgUm91bmRlZAoreHJlbTM4MiByZW1haW5kZXIgLTkzOTUxODIzLjQgLTI1MzE3Ljg2NDUgLT4gLTIyNTQ2LjEwNTAKK3hzdWIzODIgc3VidHJhY3QgLTkzOTUxODIzLjQgLTI1MzE3Ljg2NDUgLT4gLTkzOTI2NTA1LjUgSW5leGFjdCBSb3VuZGVkCit4YWRkMzgzIGFkZCA0NDY5MTkuMTIzIDk1MTMzODQ5MC4gLT4gOTUxNzg1NDA5IEluZXhhY3QgUm91bmRlZAoreGNvbTM4MyBjb21wYXJlIDQ0NjkxOS4xMjMgOTUxMzM4NDkwLiAtPiAtMQoreGRpdjM4MyBkaXZpZGUgNDQ2OTE5LjEyMyA5NTEzMzg0OTAuIC0+IDAuMDAwNDY5Nzc5MjkzIEluZXhhY3QgUm91bmRlZAoreGR2aTM4MyBkaXZpZGVpbnQgNDQ2OTE5LjEyMyA5NTEzMzg0OTAuIC0+IDAKK3htdWwzODMgbXVsdGlwbHkgNDQ2OTE5LjEyMyA5NTEzMzg0OTAuIC0+IDQuMjUxNzEzNjRFKzE0IEluZXhhY3QgUm91bmRlZAoreHBvdzM4MyBwb3dlciA0NDY5MTkuMTIzIDk1MTMzODQ5MCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zODMgcmVtYWluZGVyIDQ0NjkxOS4xMjMgOTUxMzM4NDkwLiAtPiA0NDY5MTkuMTIzCit4c3ViMzgzIHN1YnRyYWN0IDQ0NjkxOS4xMjMgOTUxMzM4NDkwLiAtPiAtOTUwODkxNTcxIEluZXhhY3QgUm91bmRlZAoreGFkZDM4NCBhZGQgLTguMDE3ODc3NDggLTg4LjMwNzY4NTIgLT4gLTk2LjMyNTU2MjcgSW5leGFjdCBSb3VuZGVkCit4Y29tMzg0IGNvbXBhcmUgLTguMDE3ODc3NDggLTg4LjMwNzY4NTIgLT4gMQoreGRpdjM4NCBkaXZpZGUgLTguMDE3ODc3NDggLTg4LjMwNzY4NTIgLT4gMC4wOTA3OTQ3ODcxIEluZXhhY3QgUm91bmRlZAoreGR2aTM4NCBkaXZpZGVpbnQgLTguMDE3ODc3NDggLTg4LjMwNzY4NTIgLT4gMAoreG11bDM4NCBtdWx0aXBseSAtOC4wMTc4Nzc0OCAtODguMzA3Njg1MiAtPiA3MDguMDQwMjAwIEluZXhhY3QgUm91bmRlZAoreHBvdzM4NCBwb3dlciAtOC4wMTc4Nzc0OCAtODggLT4gMi43NzE4NjA4OEUtODAgSW5leGFjdCBSb3VuZGVkCit4cmVtMzg0IHJlbWFpbmRlciAtOC4wMTc4Nzc0OCAtODguMzA3Njg1MiAtPiAtOC4wMTc4Nzc0OAoreHN1YjM4NCBzdWJ0cmFjdCAtOC4wMTc4Nzc0OCAtODguMzA3Njg1MiAtPiA4MC4yODk4MDc3IEluZXhhY3QgUm91bmRlZAoreGFkZDM4NSBhZGQgNTE3NDU4MTM5IC05OTk3MzEuNTQ4IC0+IDUxNjQ1ODQwNyBJbmV4YWN0IFJvdW5kZWQKK3hjb20zODUgY29tcGFyZSA1MTc0NTgxMzkgLTk5OTczMS41NDggLT4gMQoreGRpdjM4NSBkaXZpZGUgNTE3NDU4MTM5IC05OTk3MzEuNTQ4IC0+IC01MTcuNTk3MDg5IEluZXhhY3QgUm91bmRlZAoreGR2aTM4NSBkaXZpZGVpbnQgNTE3NDU4MTM5IC05OTk3MzEuNTQ4IC0+IC01MTcKK3htdWwzODUgbXVsdGlwbHkgNTE3NDU4MTM5IC05OTk3MzEuNTQ4IC0+IC01LjE3MzE5MjI2RSsxNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czODUgcG93ZXIgNTE3NDU4MTM5IC05OTk3MzIgLT4gMS4yNDgyMTM0NkUtODcxMTU0MCBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zODUgcmVtYWluZGVyIDUxNzQ1ODEzOSAtOTk5NzMxLjU0OCAtPiA1OTY5MjguNjg0Cit4c3ViMzg1IHN1YnRyYWN0IDUxNzQ1ODEzOSAtOTk5NzMxLjU0OCAtPiA1MTg0NTc4NzEgSW5leGFjdCBSb3VuZGVkCit4YWRkMzg2IGFkZCAtNDA1NTQzNDQwIC00MDEzLjE4Mjk1IC0+IC00MDU1NDc0NTMgSW5leGFjdCBSb3VuZGVkCit4Y29tMzg2IGNvbXBhcmUgLTQwNTU0MzQ0MCAtNDAxMy4xODI5NSAtPiAtMQoreGRpdjM4NiBkaXZpZGUgLTQwNTU0MzQ0MCAtNDAxMy4xODI5NSAtPiAxMDEwNTIuODE2IEluZXhhY3QgUm91bmRlZAoreGR2aTM4NiBkaXZpZGVpbnQgLTQwNTU0MzQ0MCAtNDAxMy4xODI5NSAtPiAxMDEwNTIKK3htdWwzODYgbXVsdGlwbHkgLTQwNTU0MzQ0MCAtNDAxMy4xODI5NSAtPiAxLjYyNzUyMDAyRSsxMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3czODYgcG93ZXIgLTQwNTU0MzQ0MCAtNDAxMyAtPiAtOC44MzA2MTkzMkUtMzQ1NDUgSW5leGFjdCBSb3VuZGVkCit4cmVtMzg2IHJlbWFpbmRlciAtNDA1NTQzNDQwIC00MDEzLjE4Mjk1IC0+IC0zMjc2LjUzNjYwCit4c3ViMzg2IHN1YnRyYWN0IC00MDU1NDM0NDAgLTQwMTMuMTgyOTUgLT4gLTQwNTUzOTQyNyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzODcgYWRkIC00OTI0NTI1MC4xRSs2ODI3NjA4MjUgLTg0ODc3Ni42MzcgLT4gLTQuOTI0NTI1MDFFKzY4Mjc2MDgzMiBJbmV4YWN0IFJvdW5kZWQKK3hjb20zODcgY29tcGFyZSAtNDkyNDUyNTAuMUUrNjgyNzYwODI1IC04NDg3NzYuNjM3IC0+IC0xCit4ZGl2Mzg3IGRpdmlkZSAtNDkyNDUyNTAuMUUrNjgyNzYwODI1IC04NDg3NzYuNjM3IC0+IDUuODAxOTA5MjRFKzY4Mjc2MDgyNiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzODcgZGl2aWRlaW50IC00OTI0NTI1MC4xRSs2ODI3NjA4MjUgLTg0ODc3Ni42MzcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzODcgbXVsdGlwbHkgLTQ5MjQ1MjUwLjFFKzY4Mjc2MDgyNSAtODQ4Nzc2LjYzNyAtPiA0LjE3OTgyMTc4RSs2ODI3NjA4MzggSW5leGFjdCBSb3VuZGVkCit4cG93Mzg3IHBvd2VyIC00OTI0NTI1MC4xRSs2ODI3NjA4MjUgLTg0ODc3NyAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzg3IHJlbWFpbmRlciAtNDkyNDUyNTAuMUUrNjgyNzYwODI1IC04NDg3NzYuNjM3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViMzg3IHN1YnRyYWN0IC00OTI0NTI1MC4xRSs2ODI3NjA4MjUgLTg0ODc3Ni42MzcgLT4gLTQuOTI0NTI1MDFFKzY4Mjc2MDgzMiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzODggYWRkIC0xNTExNDQ0NTUgLTE3MDM3MS4yOSAtPiAtMTUxMzE0ODI2IEluZXhhY3QgUm91bmRlZAoreGNvbTM4OCBjb21wYXJlIC0xNTExNDQ0NTUgLTE3MDM3MS4yOSAtPiAtMQoreGRpdjM4OCBkaXZpZGUgLTE1MTE0NDQ1NSAtMTcwMzcxLjI5IC0+IDg4Ny4xNDc0NDcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzg4IGRpdmlkZWludCAtMTUxMTQ0NDU1IC0xNzAzNzEuMjkgLT4gODg3Cit4bXVsMzg4IG11bHRpcGx5IC0xNTExNDQ0NTUgLTE3MDM3MS4yOSAtPiAyLjU3NTA2NzU4RSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3czODggcG93ZXIgLTE1MTE0NDQ1NSAtMTcwMzcxIC0+IC01Ljg2NDk2MzY5RS0xMzkzNTMyIEluZXhhY3QgUm91bmRlZAoreHJlbTM4OCByZW1haW5kZXIgLTE1MTE0NDQ1NSAtMTcwMzcxLjI5IC0+IC0yNTEyMC43NworeHN1YjM4OCBzdWJ0cmFjdCAtMTUxMTQ0NDU1IC0xNzAzNzEuMjkgLT4gLTE1MDk3NDA4NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzODkgYWRkIC03MjkyMzY3NDYuRSs2NjI3MzcwNjcgOS4xMDgyMzYwMiAtPiAtNy4yOTIzNjc0NkUrNjYyNzM3MDc1IEluZXhhY3QgUm91bmRlZAoreGNvbTM4OSBjb21wYXJlIC03MjkyMzY3NDYuRSs2NjI3MzcwNjcgOS4xMDgyMzYwMiAtPiAtMQoreGRpdjM4OSBkaXZpZGUgLTcyOTIzNjc0Ni5FKzY2MjczNzA2NyA5LjEwODIzNjAyIC0+IC04LjAwNjM0NDQyRSs2NjI3MzcwNzQgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzg5IGRpdmlkZWludCAtNzI5MjM2NzQ2LkUrNjYyNzM3MDY3IDkuMTA4MjM2MDIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWwzODkgbXVsdGlwbHkgLTcyOTIzNjc0Ni5FKzY2MjczNzA2NyA5LjEwODIzNjAyIC0+IC02LjY0MjA2MDQwRSs2NjI3MzcwNzYgSW5leGFjdCBSb3VuZGVkCit4cG93Mzg5IHBvd2VyIC03MjkyMzY3NDYuRSs2NjI3MzcwNjcgOSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMzg5IHJlbWFpbmRlciAtNzI5MjM2NzQ2LkUrNjYyNzM3MDY3IDkuMTA4MjM2MDIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzODkgc3VidHJhY3QgLTcyOTIzNjc0Ni5FKzY2MjczNzA2NyA5LjEwODIzNjAyIC0+IC03LjI5MjM2NzQ2RSs2NjI3MzcwNzUgSW5leGFjdCBSb3VuZGVkCit4YWRkMzkwIGFkZCA1MzQuMzk0NzI5IC0yMzY5ODM5LjM3IC0+IC0yMzY5MzA0Ljk4IEluZXhhY3QgUm91bmRlZAoreGNvbTM5MCBjb21wYXJlIDUzNC4zOTQ3MjkgLTIzNjk4MzkuMzcgLT4gMQoreGRpdjM5MCBkaXZpZGUgNTM0LjM5NDcyOSAtMjM2OTgzOS4zNyAtPiAtMC4wMDAyMjU0OTgyOTEgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzkwIGRpdmlkZWludCA1MzQuMzk0NzI5IC0yMzY5ODM5LjM3IC0+IC0wCit4bXVsMzkwIG11bHRpcGx5IDUzNC4zOTQ3MjkgLTIzNjk4MzkuMzcgLT4gLTEuMjY2NDI5NjdFKzkgSW5leGFjdCBSb3VuZGVkCit4cG93MzkwIHBvd2VyIDUzNC4zOTQ3MjkgLTIzNjk4MzkgLT4gNy4xMjUyMjg5NkUtNjQ2NDU5NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zOTAgcmVtYWluZGVyIDUzNC4zOTQ3MjkgLTIzNjk4MzkuMzcgLT4gNTM0LjM5NDcyOQoreHN1YjM5MCBzdWJ0cmFjdCA1MzQuMzk0NzI5IC0yMzY5ODM5LjM3IC0+IDIzNzAzNzMuNzYgSW5leGFjdCBSb3VuZGVkCit4YWRkMzkxIGFkZCA4OTEwMC4xNzk3IDIyNC4zNzAzMDkgLT4gODkzMjQuNTUwMCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zOTEgY29tcGFyZSA4OTEwMC4xNzk3IDIyNC4zNzAzMDkgLT4gMQoreGRpdjM5MSBkaXZpZGUgODkxMDAuMTc5NyAyMjQuMzcwMzA5IC0+IDM5Ny4xMTIxNjcgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzkxIGRpdmlkZWludCA4OTEwMC4xNzk3IDIyNC4zNzAzMDkgLT4gMzk3Cit4bXVsMzkxIG11bHRpcGx5IDg5MTAwLjE3OTcgMjI0LjM3MDMwOSAtPiAxOTk5MTQzNC45IEluZXhhY3QgUm91bmRlZAoreHBvdzM5MSBwb3dlciA4OTEwMC4xNzk3IDIyNCAtPiA1LjkyNjU0OTM2RSsxMTA4IEluZXhhY3QgUm91bmRlZAoreHJlbTM5MSByZW1haW5kZXIgODkxMDAuMTc5NyAyMjQuMzcwMzA5IC0+IDI1LjE2NzAyNworeHN1YjM5MSBzdWJ0cmFjdCA4OTEwMC4xNzk3IDIyNC4zNzAzMDkgLT4gODg4NzUuODA5NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzOTIgYWRkIC04MjEzNzcuNzc3IDM4LjU1MjgyMSAtPiAtODIxMzM5LjIyNCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zOTIgY29tcGFyZSAtODIxMzc3Ljc3NyAzOC41NTI4MjEgLT4gLTEKK3hkaXYzOTIgZGl2aWRlIC04MjEzNzcuNzc3IDM4LjU1MjgyMSAtPiAtMjEzMDUuMjU3NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzOTIgZGl2aWRlaW50IC04MjEzNzcuNzc3IDM4LjU1MjgyMSAtPiAtMjEzMDUKK3htdWwzOTIgbXVsdGlwbHkgLTgyMTM3Ny43NzcgMzguNTUyODIxIC0+IC0zMTY2NjQzMC40IEluZXhhY3QgUm91bmRlZAoreHBvdzM5MiBwb3dlciAtODIxMzc3Ljc3NyAzOSAtPiAtNC42NDcwMjQ4MkUrMjMwIEluZXhhY3QgUm91bmRlZAoreHJlbTM5MiByZW1haW5kZXIgLTgyMTM3Ny43NzcgMzguNTUyODIxIC0+IC05LjkyNTU5NQoreHN1YjM5MiBzdWJ0cmFjdCAtODIxMzc3Ljc3NyAzOC41NTI4MjEgLT4gLTgyMTQxNi4zMzAgSW5leGFjdCBSb3VuZGVkCit4YWRkMzkzIGFkZCAtMzkyNjQwLjc4MiAtMjU3MTYxOS41RSsxMTMyMzc4NjUgLT4gLTIuNTcxNjE5NTBFKzExMzIzNzg3MSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zOTMgY29tcGFyZSAtMzkyNjQwLjc4MiAtMjU3MTYxOS41RSsxMTMyMzc4NjUgLT4gMQoreGRpdjM5MyBkaXZpZGUgLTM5MjY0MC43ODIgLTI1NzE2MTkuNUUrMTEzMjM3ODY1IC0+IDEuNTI2ODIzMDFFLTExMzIzNzg2NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzOTMgZGl2aWRlaW50IC0zOTI2NDAuNzgyIC0yNTcxNjE5LjVFKzExMzIzNzg2NSAtPiAwCit4bXVsMzkzIG11bHRpcGx5IC0zOTI2NDAuNzgyIC0yNTcxNjE5LjVFKzExMzIzNzg2NSAtPiAxLjAwOTcyMjY5RSsxMTMyMzc4NzcgSW5leGFjdCBSb3VuZGVkCit4cG93MzkzIHBvd2VyIC0zOTI2NDAuNzgyIC0zIC0+IC0xLjY1MjAxNDIyRS0xNyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zOTMgcmVtYWluZGVyIC0zOTI2NDAuNzgyIC0yNTcxNjE5LjVFKzExMzIzNzg2NSAtPiAtMzkyNjQwLjc4MgoreHN1YjM5MyBzdWJ0cmFjdCAtMzkyNjQwLjc4MiAtMjU3MTYxOS41RSsxMTMyMzc4NjUgLT4gMi41NzE2MTk1MEUrMTEzMjM3ODcxIEluZXhhY3QgUm91bmRlZAoreGFkZDM5NCBhZGQgLTY1MTM5Ny43MTIgLTcyMy41OTY3MyAtPiAtNjUyMTIxLjMwOSBJbmV4YWN0IFJvdW5kZWQKK3hjb20zOTQgY29tcGFyZSAtNjUxMzk3LjcxMiAtNzIzLjU5NjczIC0+IC0xCit4ZGl2Mzk0IGRpdmlkZSAtNjUxMzk3LjcxMiAtNzIzLjU5NjczIC0+IDkwMC4yMjIwMjMgSW5leGFjdCBSb3VuZGVkCit4ZHZpMzk0IGRpdmlkZWludCAtNjUxMzk3LjcxMiAtNzIzLjU5NjczIC0+IDkwMAoreG11bDM5NCBtdWx0aXBseSAtNjUxMzk3LjcxMiAtNzIzLjU5NjczIC0+IDQ3MTM0OTI1NCBJbmV4YWN0IFJvdW5kZWQKK3hwb3czOTQgcG93ZXIgLTY1MTM5Ny43MTIgLTcyNCAtPiA1Ljk2MTE1NDE1RS00MjEwIEluZXhhY3QgUm91bmRlZAoreHJlbTM5NCByZW1haW5kZXIgLTY1MTM5Ny43MTIgLTcyMy41OTY3MyAtPiAtMTYwLjY1NTAwCit4c3ViMzk0IHN1YnRyYWN0IC02NTEzOTcuNzEyIC03MjMuNTk2NzMgLT4gLTY1MDY3NC4xMTUgSW5leGFjdCBSb3VuZGVkCit4YWRkMzk1IGFkZCA4Ni42ODkwODkyIDk0MDM4MDg2NCAtPiA5NDAzODA5NTEgSW5leGFjdCBSb3VuZGVkCit4Y29tMzk1IGNvbXBhcmUgODYuNjg5MDg5MiA5NDAzODA4NjQgLT4gLTEKK3hkaXYzOTUgZGl2aWRlIDg2LjY4OTA4OTIgOTQwMzgwODY0IC0+IDkuMjE4NTA4NDNFLTggSW5leGFjdCBSb3VuZGVkCit4ZHZpMzk1IGRpdmlkZWludCA4Ni42ODkwODkyIDk0MDM4MDg2NCAtPiAwCit4bXVsMzk1IG11bHRpcGx5IDg2LjY4OTA4OTIgOTQwMzgwODY0IC0+IDguMTUyMDc2MDZFKzEwIEluZXhhY3QgUm91bmRlZAoreHBvdzM5NSBwb3dlciA4Ni42ODkwODkyIDk0MDM4MDg2NCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zOTUgcmVtYWluZGVyIDg2LjY4OTA4OTIgOTQwMzgwODY0IC0+IDg2LjY4OTA4OTIKK3hzdWIzOTUgc3VidHJhY3QgODYuNjg5MDg5MiA5NDAzODA4NjQgLT4gLTk0MDM4MDc3NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQzOTYgYWRkIDQ4ODAuMDY0NDJFLTM4MjIyMjYyMSAtMTE1NjI3MjM5RS05MTI4MzQwMzEgLT4gNC44ODAwNjQ0MkUtMzgyMjIyNjE4IEluZXhhY3QgUm91bmRlZAoreGNvbTM5NiBjb21wYXJlIDQ4ODAuMDY0NDJFLTM4MjIyMjYyMSAtMTE1NjI3MjM5RS05MTI4MzQwMzEgLT4gMQoreGRpdjM5NiBkaXZpZGUgNDg4MC4wNjQ0MkUtMzgyMjIyNjIxIC0xMTU2MjcyMzlFLTkxMjgzNDAzMSAtPiAtNC4yMjA1MTQ1M0UrNTMwNjExNDA1IEluZXhhY3QgUm91bmRlZAoreGR2aTM5NiBkaXZpZGVpbnQgNDg4MC4wNjQ0MkUtMzgyMjIyNjIxIC0xMTU2MjcyMzlFLTkxMjgzNDAzMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDM5NiBtdWx0aXBseSA0ODgwLjA2NDQyRS0zODIyMjI2MjEgLTExNTYyNzIzOUUtOTEyODM0MDMxIC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hwb3czOTYgcG93ZXIgNDg4MC4wNjQ0MkUtMzgyMjIyNjIxIC0xIC0+IDIuMDQ5MTUzMjhFKzM4MjIyMjYxNyBJbmV4YWN0IFJvdW5kZWQKK3hyZW0zOTYgcmVtYWluZGVyIDQ4ODAuMDY0NDJFLTM4MjIyMjYyMSAtMTE1NjI3MjM5RS05MTI4MzQwMzEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWIzOTYgc3VidHJhY3QgNDg4MC4wNjQ0MkUtMzgyMjIyNjIxIC0xMTU2MjcyMzlFLTkxMjgzNDAzMSAtPiA0Ljg4MDA2NDQyRS0zODIyMjI2MTggSW5leGFjdCBSb3VuZGVkCit4YWRkMzk3IGFkZCAxNzMzOTgyNjVFLTUzMjM4MzE1OCAzNDYyLjUxNDUwRSs4MDk4NjkxNSAtPiAzLjQ2MjUxNDUwRSs4MDk4NjkxOCBJbmV4YWN0IFJvdW5kZWQKK3hjb20zOTcgY29tcGFyZSAxNzMzOTgyNjVFLTUzMjM4MzE1OCAzNDYyLjUxNDUwRSs4MDk4NjkxNSAtPiAtMQoreGRpdjM5NyBkaXZpZGUgMTczMzk4MjY1RS01MzIzODMxNTggMzQ2Mi41MTQ1MEUrODA5ODY5MTUgLT4gNS4wMDc4NzExNkUtNjEzMzcwMDY5IEluZXhhY3QgUm91bmRlZAoreGR2aTM5NyBkaXZpZGVpbnQgMTczMzk4MjY1RS01MzIzODMxNTggMzQ2Mi41MTQ1MEUrODA5ODY5MTUgLT4gMAoreG11bDM5NyBtdWx0aXBseSAxNzMzOTgyNjVFLTUzMjM4MzE1OCAzNDYyLjUxNDUwRSs4MDk4NjkxNSAtPiA2LjAwMzk0MDA3RS00NTEzOTYyMzIgSW5leGFjdCBSb3VuZGVkCit4cG93Mzk3IHBvd2VyIDE3MzM5ODI2NUUtNTMyMzgzMTU4IDMgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtMzk3IHJlbWFpbmRlciAxNzMzOTgyNjVFLTUzMjM4MzE1OCAzNDYyLjUxNDUwRSs4MDk4NjkxNSAtPiAxLjczMzk4MjY1RS01MzIzODMxNTAKK3hzdWIzOTcgc3VidHJhY3QgMTczMzk4MjY1RS01MzIzODMxNTggMzQ2Mi41MTQ1MEUrODA5ODY5MTUgLT4gLTMuNDYyNTE0NTBFKzgwOTg2OTE4IEluZXhhY3QgUm91bmRlZAoreGFkZDM5OCBhZGQgLTE1MjIxNzYuNzggLTY2MzEwNjEuNzcgLT4gLTgxNTMyMzguNTUKK3hjb20zOTggY29tcGFyZSAtMTUyMjE3Ni43OCAtNjYzMTA2MS43NyAtPiAxCit4ZGl2Mzk4IGRpdmlkZSAtMTUyMjE3Ni43OCAtNjYzMTA2MS43NyAtPiAwLjIyOTU1MjQ5NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmkzOTggZGl2aWRlaW50IC0xNTIyMTc2Ljc4IC02NjMxMDYxLjc3IC0+IDAKK3htdWwzOTggbXVsdGlwbHkgLTE1MjIxNzYuNzggLTY2MzEwNjEuNzcgLT4gMS4wMDkzNjQ4M0UrMTMgSW5leGFjdCBSb3VuZGVkCit4cG93Mzk4IHBvd2VyIC0xNTIyMTc2Ljc4IC02NjMxMDYyIC0+IDQuNTQyNjg4NTRFLTQwOTk2MzEwIEluZXhhY3QgUm91bmRlZAoreHJlbTM5OCByZW1haW5kZXIgLTE1MjIxNzYuNzggLTY2MzEwNjEuNzcgLT4gLTE1MjIxNzYuNzgKK3hzdWIzOTggc3VidHJhY3QgLTE1MjIxNzYuNzggLTY2MzEwNjEuNzcgLT4gNTEwODg4NC45OQoreGFkZDM5OSBhZGQgNTM4LjEwNDUzIDUyMjkzNDMxMCAtPiA1MjI5MzQ4NDggSW5leGFjdCBSb3VuZGVkCit4Y29tMzk5IGNvbXBhcmUgNTM4LjEwNDUzIDUyMjkzNDMxMCAtPiAtMQoreGRpdjM5OSBkaXZpZGUgNTM4LjEwNDUzIDUyMjkzNDMxMCAtPiAwLjAwMDAwMTAyOTAwOTgwIEluZXhhY3QgUm91bmRlZAoreGR2aTM5OSBkaXZpZGVpbnQgNTM4LjEwNDUzIDUyMjkzNDMxMCAtPiAwCit4bXVsMzk5IG11bHRpcGx5IDUzOC4xMDQ1MyA1MjI5MzQzMTAgLT4gMi44MTM5MzMyMUUrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93Mzk5IHBvd2VyIDUzOC4xMDQ1MyA1MjI5MzQzMTAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtMzk5IHJlbWFpbmRlciA1MzguMTA0NTMgNTIyOTM0MzEwIC0+IDUzOC4xMDQ1MworeHN1YjM5OSBzdWJ0cmFjdCA1MzguMTA0NTMgNTIyOTM0MzEwIC0+IC01MjI5MzM3NzIgSW5leGFjdCBSb3VuZGVkCit4YWRkNDAwIGFkZCA4ODAyNDMuNDQ0RS03NTA5NDA5NzcgLTM1NC42MDE1NzhFLTIwNDk0Mzc0MCAtPiAtMy41NDYwMTU3OEUtMjA0OTQzNzM4IEluZXhhY3QgUm91bmRlZAoreGNvbTQwMCBjb21wYXJlIDg4MDI0My40NDRFLTc1MDk0MDk3NyAtMzU0LjYwMTU3OEUtMjA0OTQzNzQwIC0+IDEKK3hkaXY0MDAgZGl2aWRlIDg4MDI0My40NDRFLTc1MDk0MDk3NyAtMzU0LjYwMTU3OEUtMjA0OTQzNzQwIC0+IC0yLjQ4MjM0NDk3RS01NDU5OTcyMzQgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDAwIGRpdmlkZWludCA4ODAyNDMuNDQ0RS03NTA5NDA5NzcgLTM1NC42MDE1NzhFLTIwNDk0Mzc0MCAtPiAtMAoreG11bDQwMCBtdWx0aXBseSA4ODAyNDMuNDQ0RS03NTA5NDA5NzcgLTM1NC42MDE1NzhFLTIwNDk0Mzc0MCAtPiAtMy4xMjEzNTcxNEUtOTU1ODg0NzA5IEluZXhhY3QgUm91bmRlZAoreHBvdzQwMCBwb3dlciA4ODAyNDMuNDQ0RS03NTA5NDA5NzcgLTQgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtNDAwIHJlbWFpbmRlciA4ODAyNDMuNDQ0RS03NTA5NDA5NzcgLTM1NC42MDE1NzhFLTIwNDk0Mzc0MCAtPiA4LjgwMjQzNDQ0RS03NTA5NDA5NzIKK3hzdWI0MDAgc3VidHJhY3QgODgwMjQzLjQ0NEUtNzUwOTQwOTc3IC0zNTQuNjAxNTc4RS0yMDQ5NDM3NDAgLT4gMy41NDYwMTU3OEUtMjA0OTQzNzM4IEluZXhhY3QgUm91bmRlZAoreGFkZDQwMSBhZGQgOTY4MzcwLjc4MCA2Njc3MjY4LjczIC0+IDc2NDU2MzkuNTEgUm91bmRlZAoreGNvbTQwMSBjb21wYXJlIDk2ODM3MC43ODAgNjY3NzI2OC43MyAtPiAtMQoreGRpdjQwMSBkaXZpZGUgOTY4MzcwLjc4MCA2Njc3MjY4LjczIC0+IDAuMTQ1MDI0OTgyIEluZXhhY3QgUm91bmRlZAoreGR2aTQwMSBkaXZpZGVpbnQgOTY4MzcwLjc4MCA2Njc3MjY4LjczIC0+IDAKK3htdWw0MDEgbXVsdGlwbHkgOTY4MzcwLjc4MCA2Njc3MjY4LjczIC0+IDYuNDY2MDcxOTNFKzEyIEluZXhhY3QgUm91bmRlZAoreHBvdzQwMSBwb3dlciA5NjgzNzAuNzgwIDY2NzcyNjkgLT4gMy4yOTk5MDkzMUUrMzk5NzA0MTAgSW5leGFjdCBSb3VuZGVkCit4cmVtNDAxIHJlbWFpbmRlciA5NjgzNzAuNzgwIDY2NzcyNjguNzMgLT4gOTY4MzcwLjc4MAoreHN1YjQwMSBzdWJ0cmFjdCA5NjgzNzAuNzgwIDY2NzcyNjguNzMgLT4gLTU3MDg4OTcuOTUgUm91bmRlZAoreGFkZDQwMiBhZGQgLTk3Ljc0NzQ5NDUgMzEyNDgyNDEuNSAtPiAzMTI0ODE0My44IEluZXhhY3QgUm91bmRlZAoreGNvbTQwMiBjb21wYXJlIC05Ny43NDc0OTQ1IDMxMjQ4MjQxLjUgLT4gLTEKK3hkaXY0MDIgZGl2aWRlIC05Ny43NDc0OTQ1IDMxMjQ4MjQxLjUgLT4gLTAuMDAwMDAzMTI4MDk1ODUgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDAyIGRpdmlkZWludCAtOTcuNzQ3NDk0NSAzMTI0ODI0MS41IC0+IC0wCit4bXVsNDAyIG11bHRpcGx5IC05Ny43NDc0OTQ1IDMxMjQ4MjQxLjUgLT4gLTMuMDU0NDM3MzFFKzkgSW5leGFjdCBSb3VuZGVkCit4cG93NDAyIHBvd2VyIC05Ny43NDc0OTQ1IDMxMjQ4MjQyIC0+IDIuOTA3MTQyNTdFKzYyMTg3MzAyIEluZXhhY3QgUm91bmRlZAoreHJlbTQwMiByZW1haW5kZXIgLTk3Ljc0NzQ5NDUgMzEyNDgyNDEuNSAtPiAtOTcuNzQ3NDk0NQoreHN1YjQwMiBzdWJ0cmFjdCAtOTcuNzQ3NDk0NSAzMTI0ODI0MS41IC0+IC0zMTI0ODMzOS4yIEluZXhhY3QgUm91bmRlZAoreGFkZDQwMyBhZGQgLTE4NzU4Mjc4Ni5FKzM2OTkxNjk1MiA5NTc4NDA0MzVFKzc0NDM2NTU2NyAtPiA5LjU3ODQwNDM1RSs3NDQzNjU1NzUgSW5leGFjdCBSb3VuZGVkCit4Y29tNDAzIGNvbXBhcmUgLTE4NzU4Mjc4Ni5FKzM2OTkxNjk1MiA5NTc4NDA0MzVFKzc0NDM2NTU2NyAtPiAtMQoreGRpdjQwMyBkaXZpZGUgLTE4NzU4Mjc4Ni5FKzM2OTkxNjk1MiA5NTc4NDA0MzVFKzc0NDM2NTU2NyAtPiAtMS45NTgzOTI4NUUtMzc0NDQ4NjE2IEluZXhhY3QgUm91bmRlZAoreGR2aTQwMyBkaXZpZGVpbnQgLTE4NzU4Mjc4Ni5FKzM2OTkxNjk1MiA5NTc4NDA0MzVFKzc0NDM2NTU2NyAtPiAtMAoreG11bDQwMyBtdWx0aXBseSAtMTg3NTgyNzg2LkUrMzY5OTE2OTUyIDk1Nzg0MDQzNUUrNzQ0MzY1NTY3IC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3hwb3c0MDMgcG93ZXIgLTE4NzU4Mjc4Ni5FKzM2OTkxNjk1MiAxMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MDMgcmVtYWluZGVyIC0xODc1ODI3ODYuRSszNjk5MTY5NTIgOTU3ODQwNDM1RSs3NDQzNjU1NjcgLT4gLTEuODc1ODI3ODZFKzM2OTkxNjk2MAoreHN1YjQwMyBzdWJ0cmFjdCAtMTg3NTgyNzg2LkUrMzY5OTE2OTUyIDk1Nzg0MDQzNUUrNzQ0MzY1NTY3IC0+IC05LjU3ODQwNDM1RSs3NDQzNjU1NzUgSW5leGFjdCBSb3VuZGVkCit4YWRkNDA0IGFkZCAtMzI4MDI2MTQ0LiAtMTI1NDk5NzM1LiAtPiAtNDUzNTI1ODc5Cit4Y29tNDA0IGNvbXBhcmUgLTMyODAyNjE0NC4gLTEyNTQ5OTczNS4gLT4gLTEKK3hkaXY0MDQgZGl2aWRlIC0zMjgwMjYxNDQuIC0xMjU0OTk3MzUuIC0+IDIuNjEzNzU5NjUgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDA0IGRpdmlkZWludCAtMzI4MDI2MTQ0LiAtMTI1NDk5NzM1LiAtPiAyCit4bXVsNDA0IG11bHRpcGx5IC0zMjgwMjYxNDQuIC0xMjU0OTk3MzUuIC0+IDQuMTE2NzE5NDFFKzE2IEluZXhhY3QgUm91bmRlZAoreHBvdzQwNCBwb3dlciAtMzI4MDI2MTQ0LiAtMTI1NDk5NzM1IC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW00MDQgcmVtYWluZGVyIC0zMjgwMjYxNDQuIC0xMjU0OTk3MzUuIC0+IC03NzAyNjY3NAoreHN1YjQwNCBzdWJ0cmFjdCAtMzI4MDI2MTQ0LiAtMTI1NDk5NzM1LiAtPiAtMjAyNTI2NDA5Cit4YWRkNDA1IGFkZCAtOTk0MjQxNTAuMkUtNTIzNjYyMTAyIDM3MTIuMzUwMzAgLT4gMzcxMi4zNTAzMCBJbmV4YWN0IFJvdW5kZWQKK3hjb200MDUgY29tcGFyZSAtOTk0MjQxNTAuMkUtNTIzNjYyMTAyIDM3MTIuMzUwMzAgLT4gLTEKK3hkaXY0MDUgZGl2aWRlIC05OTQyNDE1MC4yRS01MjM2NjIxMDIgMzcxMi4zNTAzMCAtPiAtMi42NzgxOTk1OEUtNTIzNjYyMDk4IEluZXhhY3QgUm91bmRlZAoreGR2aTQwNSBkaXZpZGVpbnQgLTk5NDI0MTUwLjJFLTUyMzY2MjEwMiAzNzEyLjM1MDMwIC0+IC0wCit4bXVsNDA1IG11bHRpcGx5IC05OTQyNDE1MC4yRS01MjM2NjIxMDIgMzcxMi4zNTAzMCAtPiAtMy42OTA5NzI3NEUtNTIzNjYyMDkxIEluZXhhY3QgUm91bmRlZAoreHBvdzQwNSBwb3dlciAtOTk0MjQxNTAuMkUtNTIzNjYyMTAyIDM3MTIgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDA1IHJlbWFpbmRlciAtOTk0MjQxNTAuMkUtNTIzNjYyMTAyIDM3MTIuMzUwMzAgLT4gLTkuOTQyNDE1MDJFLTUyMzY2MjA5NQoreHN1YjQwNSBzdWJ0cmFjdCAtOTk0MjQxNTAuMkUtNTIzNjYyMTAyIDM3MTIuMzUwMzAgLT4gLTM3MTIuMzUwMzAgSW5leGFjdCBSb3VuZGVkCit4YWRkNDA2IGFkZCAxNDgzOC4wNzE4IDk0ODk4OTMuMjhFKzgzMDYzMTI2NiAtPiA5LjQ4OTg5MzI4RSs4MzA2MzEyNzIgSW5leGFjdCBSb3VuZGVkCit4Y29tNDA2IGNvbXBhcmUgMTQ4MzguMDcxOCA5NDg5ODkzLjI4RSs4MzA2MzEyNjYgLT4gLTEKK3hkaXY0MDYgZGl2aWRlIDE0ODM4LjA3MTggOTQ4OTg5My4yOEUrODMwNjMxMjY2IC0+IDEuNTYzNTY1NzJFLTgzMDYzMTI2OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MDYgZGl2aWRlaW50IDE0ODM4LjA3MTggOTQ4OTg5My4yOEUrODMwNjMxMjY2IC0+IDAKK3htdWw0MDYgbXVsdGlwbHkgMTQ4MzguMDcxOCA5NDg5ODkzLjI4RSs4MzA2MzEyNjYgLT4gMS40MDgxMTcxOEUrODMwNjMxMjc3IEluZXhhY3QgUm91bmRlZAoreHBvdzQwNiBwb3dlciAxNDgzOC4wNzE4IDkgLT4gMy40ODY1NjA1N0UrMzcgSW5leGFjdCBSb3VuZGVkCit4cmVtNDA2IHJlbWFpbmRlciAxNDgzOC4wNzE4IDk0ODk4OTMuMjhFKzgzMDYzMTI2NiAtPiAxNDgzOC4wNzE4Cit4c3ViNDA2IHN1YnRyYWN0IDE0ODM4LjA3MTggOTQ4OTg5My4yOEUrODMwNjMxMjY2IC0+IC05LjQ4OTg5MzI4RSs4MzA2MzEyNzIgSW5leGFjdCBSb3VuZGVkCit4YWRkNDA3IGFkZCA3MTIwNzQ3Mi44IC0zMTgzNS4wODA5IC0+IDcxMTc1NjM3LjcgSW5leGFjdCBSb3VuZGVkCit4Y29tNDA3IGNvbXBhcmUgNzEyMDc0NzIuOCAtMzE4MzUuMDgwOSAtPiAxCit4ZGl2NDA3IGRpdmlkZSA3MTIwNzQ3Mi44IC0zMTgzNS4wODA5IC0+IC0yMjM2Ljc2MTE3IEluZXhhY3QgUm91bmRlZAoreGR2aTQwNyBkaXZpZGVpbnQgNzEyMDc0NzIuOCAtMzE4MzUuMDgwOSAtPiAtMjIzNgoreG11bDQwNyBtdWx0aXBseSA3MTIwNzQ3Mi44IC0zMTgzNS4wODA5IC0+IC0yLjI2Njg5NTY2RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MDcgcG93ZXIgNzEyMDc0NzIuOCAtMzE4MzUgLT4gNy4wNTMzMzk1M0UtMjQ5OTg2IEluZXhhY3QgUm91bmRlZAoreHJlbTQwNyByZW1haW5kZXIgNzEyMDc0NzIuOCAtMzE4MzUuMDgwOSAtPiAyNDIzMS45MDc2Cit4c3ViNDA3IHN1YnRyYWN0IDcxMjA3NDcyLjggLTMxODM1LjA4MDkgLT4gNzEyMzkzMDcuOSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MDggYWRkIC0yMDQ0MC40Mzk0IC00NC40MDY0MzI4RSs1MTEwODU4MDYgLT4gLTQuNDQwNjQzMjhFKzUxMTA4NTgwNyBJbmV4YWN0IFJvdW5kZWQKK3hjb200MDggY29tcGFyZSAtMjA0NDAuNDM5NCAtNDQuNDA2NDMyOEUrNTExMDg1ODA2IC0+IDEKK3hkaXY0MDggZGl2aWRlIC0yMDQ0MC40Mzk0IC00NC40MDY0MzI4RSs1MTEwODU4MDYgLT4gNC42MDMwMzU2N0UtNTExMDg1ODA0IEluZXhhY3QgUm91bmRlZAoreGR2aTQwOCBkaXZpZGVpbnQgLTIwNDQwLjQzOTQgLTQ0LjQwNjQzMjhFKzUxMTA4NTgwNiAtPiAwCit4bXVsNDA4IG11bHRpcGx5IC0yMDQ0MC40Mzk0IC00NC40MDY0MzI4RSs1MTEwODU4MDYgLT4gOS4wNzY4Njk5OUUrNTExMDg1ODExIEluZXhhY3QgUm91bmRlZAoreHBvdzQwOCBwb3dlciAtMjA0NDAuNDM5NCAtNCAtPiA1LjcyODQ3NTkwRS0xOCBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MDggcmVtYWluZGVyIC0yMDQ0MC40Mzk0IC00NC40MDY0MzI4RSs1MTEwODU4MDYgLT4gLTIwNDQwLjQzOTQKK3hzdWI0MDggc3VidHJhY3QgLTIwNDQwLjQzOTQgLTQ0LjQwNjQzMjhFKzUxMTA4NTgwNiAtPiA0LjQ0MDY0MzI4RSs1MTEwODU4MDcgSW5leGFjdCBSb3VuZGVkCit4YWRkNDA5IGFkZCAtNTQuMzY4NDE3MUUtODA3MjEwMTkyIDEuMDQ1OTI5NzNFLTk4NDA0MTgwNyAtPiAtNS40MzY4NDE3MUUtODA3MjEwMTkxIEluZXhhY3QgUm91bmRlZAoreGNvbTQwOSBjb21wYXJlIC01NC4zNjg0MTcxRS04MDcyMTAxOTIgMS4wNDU5Mjk3M0UtOTg0MDQxODA3IC0+IC0xCit4ZGl2NDA5IGRpdmlkZSAtNTQuMzY4NDE3MUUtODA3MjEwMTkyIDEuMDQ1OTI5NzNFLTk4NDA0MTgwNyAtPiAtNS4xOTgwOTQ2M0UrMTc2ODMxNjE2IEluZXhhY3QgUm91bmRlZAoreGR2aTQwOSBkaXZpZGVpbnQgLTU0LjM2ODQxNzFFLTgwNzIxMDE5MiAxLjA0NTkyOTczRS05ODQwNDE4MDcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0MDkgbXVsdGlwbHkgLTU0LjM2ODQxNzFFLTgwNzIxMDE5MiAxLjA0NTkyOTczRS05ODQwNDE4MDcgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHBvdzQwOSBwb3dlciAtNTQuMzY4NDE3MUUtODA3MjEwMTkyIDEgLT4gLTUuNDM2ODQxNzFFLTgwNzIxMDE5MQoreHJlbTQwOSByZW1haW5kZXIgLTU0LjM2ODQxNzFFLTgwNzIxMDE5MiAxLjA0NTkyOTczRS05ODQwNDE4MDcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0MDkgc3VidHJhY3QgLTU0LjM2ODQxNzFFLTgwNzIxMDE5MiAxLjA0NTkyOTczRS05ODQwNDE4MDcgLT4gLTUuNDM2ODQxNzFFLTgwNzIxMDE5MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MTAgYWRkIDU0MzEwMDYwLjVFKzk0ODE1OTczOSAyNzQzMjA3MDEuRSsyMDU4ODA0ODQgLT4gNS40MzEwMDYwNUUrOTQ4MTU5NzQ2IEluZXhhY3QgUm91bmRlZAoreGNvbTQxMCBjb21wYXJlIDU0MzEwMDYwLjVFKzk0ODE1OTczOSAyNzQzMjA3MDEuRSsyMDU4ODA0ODQgLT4gMQoreGRpdjQxMCBkaXZpZGUgNTQzMTAwNjAuNUUrOTQ4MTU5NzM5IDI3NDMyMDcwMS5FKzIwNTg4MDQ4NCAtPiAxLjk3OTgwMTc1RSs3NDIyNzkyNTQgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDEwIGRpdmlkZWludCA1NDMxMDA2MC41RSs5NDgxNTk3MzkgMjc0MzIwNzAxLkUrMjA1ODgwNDg0IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDEwIG11bHRpcGx5IDU0MzEwMDYwLjVFKzk0ODE1OTczOSAyNzQzMjA3MDEuRSsyMDU4ODA0ODQgLT4gSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCit4cG93NDEwIHBvd2VyIDU0MzEwMDYwLjVFKzk0ODE1OTczOSAzIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTQxMCByZW1haW5kZXIgNTQzMTAwNjAuNUUrOTQ4MTU5NzM5IDI3NDMyMDcwMS5FKzIwNTg4MDQ4NCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQxMCBzdWJ0cmFjdCA1NDMxMDA2MC41RSs5NDgxNTk3MzkgMjc0MzIwNzAxLkUrMjA1ODgwNDg0IC0+IDUuNDMxMDA2MDVFKzk0ODE1OTc0NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MTEgYWRkIC02NTcuMTg2NzAyIDQyNjg0NC4zOSAtPiA0MjYxODcuMjAzIEluZXhhY3QgUm91bmRlZAoreGNvbTQxMSBjb21wYXJlIC02NTcuMTg2NzAyIDQyNjg0NC4zOSAtPiAtMQoreGRpdjQxMSBkaXZpZGUgLTY1Ny4xODY3MDIgNDI2ODQ0LjM5IC0+IC0wLjAwMTUzOTY0MDAxIEluZXhhY3QgUm91bmRlZAoreGR2aTQxMSBkaXZpZGVpbnQgLTY1Ny4xODY3MDIgNDI2ODQ0LjM5IC0+IC0wCit4bXVsNDExIG11bHRpcGx5IC02NTcuMTg2NzAyIDQyNjg0NC4zOSAtPiAtMjgwNTE2NDU3IEluZXhhY3QgUm91bmRlZAoreHBvdzQxMSBwb3dlciAtNjU3LjE4NjcwMiA0MjY4NDQgLT4gMy41MDAwMDU3NUUrMTIwMjcxMyBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MTEgcmVtYWluZGVyIC02NTcuMTg2NzAyIDQyNjg0NC4zOSAtPiAtNjU3LjE4NjcwMgoreHN1YjQxMSBzdWJ0cmFjdCAtNjU3LjE4NjcwMiA0MjY4NDQuMzkgLT4gLTQyNzUwMS41NzcgSW5leGFjdCBSb3VuZGVkCit4YWRkNDEyIGFkZCAtNDE1OTMwNzcuMCAtNjg4NjA3LjU2NCAtPiAtNDIyODE2ODQuNiBJbmV4YWN0IFJvdW5kZWQKK3hjb200MTIgY29tcGFyZSAtNDE1OTMwNzcuMCAtNjg4NjA3LjU2NCAtPiAtMQoreGRpdjQxMiBkaXZpZGUgLTQxNTkzMDc3LjAgLTY4ODYwNy41NjQgLT4gNjAuNDAxNzEzOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MTIgZGl2aWRlaW50IC00MTU5MzA3Ny4wIC02ODg2MDcuNTY0IC0+IDYwCit4bXVsNDEyIG11bHRpcGx5IC00MTU5MzA3Ny4wIC02ODg2MDcuNTY0IC0+IDIuODY0MTMwNzRFKzEzIEluZXhhY3QgUm91bmRlZAoreHBvdzQxMiBwb3dlciAtNDE1OTMwNzcuMCAtNjg4NjA4IC0+IDEuNDIxNTA3NTBFLTUyNDY1MTkgSW5leGFjdCBSb3VuZGVkCit4cmVtNDEyIHJlbWFpbmRlciAtNDE1OTMwNzcuMCAtNjg4NjA3LjU2NCAtPiAtMjc2NjIzLjE2MAoreHN1YjQxMiBzdWJ0cmFjdCAtNDE1OTMwNzcuMCAtNjg4NjA3LjU2NCAtPiAtNDA5MDQ0NjkuNCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MTMgYWRkIC01Nzg2LjM4MTMyIDE5MDU1NjY1Mi5FKzE3NzA0NTg3NyAtPiAxLjkwNTU2NjUyRSsxNzcwNDU4ODUgSW5leGFjdCBSb3VuZGVkCit4Y29tNDEzIGNvbXBhcmUgLTU3ODYuMzgxMzIgMTkwNTU2NjUyLkUrMTc3MDQ1ODc3IC0+IC0xCit4ZGl2NDEzIGRpdmlkZSAtNTc4Ni4zODEzMiAxOTA1NTY2NTIuRSsxNzcwNDU4NzcgLT4gLTMuMDM2NTY3NDhFLTE3NzA0NTg4MiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MTMgZGl2aWRlaW50IC01Nzg2LjM4MTMyIDE5MDU1NjY1Mi5FKzE3NzA0NTg3NyAtPiAtMAoreG11bDQxMyBtdWx0aXBseSAtNTc4Ni4zODEzMiAxOTA1NTY2NTIuRSsxNzcwNDU4NzcgLT4gLTEuMTAyNjMzNDVFKzE3NzA0NTg4OSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MTMgcG93ZXIgLTU3ODYuMzgxMzIgMiAtPiAzMzQ4MjIwOC44IEluZXhhY3QgUm91bmRlZAoreHJlbTQxMyByZW1haW5kZXIgLTU3ODYuMzgxMzIgMTkwNTU2NjUyLkUrMTc3MDQ1ODc3IC0+IC01Nzg2LjM4MTMyCit4c3ViNDEzIHN1YnRyYWN0IC01Nzg2LjM4MTMyIDE5MDU1NjY1Mi5FKzE3NzA0NTg3NyAtPiAtMS45MDU1NjY1MkUrMTc3MDQ1ODg1IEluZXhhY3QgUm91bmRlZAoreGFkZDQxNCBhZGQgNzM3NjIyLjk3NCAtMjQxNTYwNjkzRSsyNDk1MDY1NjUgLT4gLTIuNDE1NjA2OTNFKzI0OTUwNjU3MyBJbmV4YWN0IFJvdW5kZWQKK3hjb200MTQgY29tcGFyZSA3Mzc2MjIuOTc0IC0yNDE1NjA2OTNFKzI0OTUwNjU2NSAtPiAxCit4ZGl2NDE0IGRpdmlkZSA3Mzc2MjIuOTc0IC0yNDE1NjA2OTNFKzI0OTUwNjU2NSAtPiAtMy4wNTM1NzIwMkUtMjQ5NTA2NTY4IEluZXhhY3QgUm91bmRlZAoreGR2aTQxNCBkaXZpZGVpbnQgNzM3NjIyLjk3NCAtMjQxNTYwNjkzRSsyNDk1MDY1NjUgLT4gLTAKK3htdWw0MTQgbXVsdGlwbHkgNzM3NjIyLjk3NCAtMjQxNTYwNjkzRSsyNDk1MDY1NjUgLT4gLTEuNzgxODA3MTdFKzI0OTUwNjU3OSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MTQgcG93ZXIgNzM3NjIyLjk3NCAtMiAtPiAxLjgzNzkzOTE2RS0xMiBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MTQgcmVtYWluZGVyIDczNzYyMi45NzQgLTI0MTU2MDY5M0UrMjQ5NTA2NTY1IC0+IDczNzYyMi45NzQKK3hzdWI0MTQgc3VidHJhY3QgNzM3NjIyLjk3NCAtMjQxNTYwNjkzRSsyNDk1MDY1NjUgLT4gMi40MTU2MDY5M0UrMjQ5NTA2NTczIEluZXhhY3QgUm91bmRlZAoreGFkZDQxNSBhZGQgNTYxNTM3My41MiAtNy4yNzU4MzgwOEUtOTQ5NzgxMDQ4IC0+IDU2MTUzNzMuNTIgSW5leGFjdCBSb3VuZGVkCit4Y29tNDE1IGNvbXBhcmUgNTYxNTM3My41MiAtNy4yNzU4MzgwOEUtOTQ5NzgxMDQ4IC0+IDEKK3hkaXY0MTUgZGl2aWRlIDU2MTUzNzMuNTIgLTcuMjc1ODM4MDhFLTk0OTc4MTA0OCAtPiAtNy43MTc4MzczOUUrOTQ5NzgxMDUzIEluZXhhY3QgUm91bmRlZAoreGR2aTQxNSBkaXZpZGVpbnQgNTYxNTM3My41MiAtNy4yNzU4MzgwOEUtOTQ5NzgxMDQ4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDE1IG11bHRpcGx5IDU2MTUzNzMuNTIgLTcuMjc1ODM4MDhFLTk0OTc4MTA0OCAtPiAtNC4wODU2NTQ4NUUtOTQ5NzgxMDQxIEluZXhhY3QgUm91bmRlZAoreHBvdzQxNSBwb3dlciA1NjE1MzczLjUyIC03IC0+IDUuNjgwMDE0NjBFLTQ4IEluZXhhY3QgUm91bmRlZAoreHJlbTQxNSByZW1haW5kZXIgNTYxNTM3My41MiAtNy4yNzU4MzgwOEUtOTQ5NzgxMDQ4IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDE1IHN1YnRyYWN0IDU2MTUzNzMuNTIgLTcuMjc1ODM4MDhFLTk0OTc4MTA0OCAtPiA1NjE1MzczLjUyIEluZXhhY3QgUm91bmRlZAoreGFkZDQxNiBhZGQgNjQ0MTM2LjE3OSAtODM1NzA4LjEwMyAtPiAtMTkxNTcxLjkyNAoreGNvbTQxNiBjb21wYXJlIDY0NDEzNi4xNzkgLTgzNTcwOC4xMDMgLT4gMQoreGRpdjQxNiBkaXZpZGUgNjQ0MTM2LjE3OSAtODM1NzA4LjEwMyAtPiAtMC43NzA3NjY5NDIgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDE2IGRpdmlkZWludCA2NDQxMzYuMTc5IC04MzU3MDguMTAzIC0+IC0wCit4bXVsNDE2IG11bHRpcGx5IDY0NDEzNi4xNzkgLTgzNTcwOC4xMDMgLT4gLTUuMzgzMDk4MjRFKzExIEluZXhhY3QgUm91bmRlZAoreHBvdzQxNiBwb3dlciA2NDQxMzYuMTc5IC04MzU3MDggLT4gNy40MTkzNjg1OEUtNDg1NDYxMCBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MTYgcmVtYWluZGVyIDY0NDEzNi4xNzkgLTgzNTcwOC4xMDMgLT4gNjQ0MTM2LjE3OQoreHN1YjQxNiBzdWJ0cmFjdCA2NDQxMzYuMTc5IC04MzU3MDguMTAzIC0+IDE0Nzk4NDQuMjggSW5leGFjdCBSb3VuZGVkCit4YWRkNDE3IGFkZCAtMzA3LjQxOTUyMUUrNDY2ODYxODQzIC03Mzg2ODk5NzYuRS0xOTkwMzI3MTEgLT4gLTMuMDc0MTk1MjFFKzQ2Njg2MTg0NSBJbmV4YWN0IFJvdW5kZWQKK3hjb200MTcgY29tcGFyZSAtMzA3LjQxOTUyMUUrNDY2ODYxODQzIC03Mzg2ODk5NzYuRS0xOTkwMzI3MTEgLT4gLTEKK3hkaXY0MTcgZGl2aWRlIC0zMDcuNDE5NTIxRSs0NjY4NjE4NDMgLTczODY4OTk3Ni5FLTE5OTAzMjcxMSAtPiA0LjE2MTY4NTI5RSs2NjU4OTQ1NDcgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDE3IGRpdmlkZWludCAtMzA3LjQxOTUyMUUrNDY2ODYxODQzIC03Mzg2ODk5NzYuRS0xOTkwMzI3MTEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0MTcgbXVsdGlwbHkgLTMwNy40MTk1MjFFKzQ2Njg2MTg0MyAtNzM4Njg5OTc2LkUtMTk5MDMyNzExIC0+IDIuMjcwODc3MTlFKzI2NzgyOTE0MyBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MTcgcG93ZXIgLTMwNy40MTk1MjFFKzQ2Njg2MTg0MyAtNyAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDE3IHJlbWFpbmRlciAtMzA3LjQxOTUyMUUrNDY2ODYxODQzIC03Mzg2ODk5NzYuRS0xOTkwMzI3MTEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0MTcgc3VidHJhY3QgLTMwNy40MTk1MjFFKzQ2Njg2MTg0MyAtNzM4Njg5OTc2LkUtMTk5MDMyNzExIC0+IC0zLjA3NDE5NTIxRSs0NjY4NjE4NDUgSW5leGFjdCBSb3VuZGVkCit4YWRkNDE4IGFkZCAtNjE5NjQyLjEzMCAtMjI2NzQwNTM3LkUtOTAyNTkwMTUzIC0+IC02MTk2NDIuMTMwIEluZXhhY3QgUm91bmRlZAoreGNvbTQxOCBjb21wYXJlIC02MTk2NDIuMTMwIC0yMjY3NDA1MzcuRS05MDI1OTAxNTMgLT4gLTEKK3hkaXY0MTggZGl2aWRlIC02MTk2NDIuMTMwIC0yMjY3NDA1MzcuRS05MDI1OTAxNTMgLT4gMi43MzI4MjQ2NkUrOTAyNTkwMTUwIEluZXhhY3QgUm91bmRlZAoreGR2aTQxOCBkaXZpZGVpbnQgLTYxOTY0Mi4xMzAgLTIyNjc0MDUzNy5FLTkwMjU5MDE1MyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQxOCBtdWx0aXBseSAtNjE5NjQyLjEzMCAtMjI2NzQwNTM3LkUtOTAyNTkwMTUzIC0+IDEuNDA0OTc5ODlFLTkwMjU5MDEzOSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MTggcG93ZXIgLTYxOTY0Mi4xMzAgLTIgLT4gMi42MDQ0NjI1OUUtMTIgSW5leGFjdCBSb3VuZGVkCit4cmVtNDE4IHJlbWFpbmRlciAtNjE5NjQyLjEzMCAtMjI2NzQwNTM3LkUtOTAyNTkwMTUzIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDE4IHN1YnRyYWN0IC02MTk2NDIuMTMwIC0yMjY3NDA1MzcuRS05MDI1OTAxNTMgLT4gLTYxOTY0Mi4xMzAgSW5leGFjdCBSb3VuZGVkCit4YWRkNDE5IGFkZCAtMzEwNjguNzU0OSAtMy40MTQ5NTA0MkUrODYwMDEzNzkgLT4gLTMuNDE0OTUwNDJFKzg2MDAxMzc5IEluZXhhY3QgUm91bmRlZAoreGNvbTQxOSBjb21wYXJlIC0zMTA2OC43NTQ5IC0zLjQxNDk1MDQyRSs4NjAwMTM3OSAtPiAxCit4ZGl2NDE5IGRpdmlkZSAtMzEwNjguNzU0OSAtMy40MTQ5NTA0MkUrODYwMDEzNzkgLT4gOS4wOTc4NjQxMkUtODYwMDEzNzYgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDE5IGRpdmlkZWludCAtMzEwNjguNzU0OSAtMy40MTQ5NTA0MkUrODYwMDEzNzkgLT4gMAoreG11bDQxOSBtdWx0aXBseSAtMzEwNjguNzU0OSAtMy40MTQ5NTA0MkUrODYwMDEzNzkgLT4gMS4wNjA5ODI1OEUrODYwMDEzODQgSW5leGFjdCBSb3VuZGVkCit4cG93NDE5IHBvd2VyIC0zMTA2OC43NTQ5IC0zIC0+IC0zLjMzNDQ4MjU4RS0xNCBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MTkgcmVtYWluZGVyIC0zMTA2OC43NTQ5IC0zLjQxNDk1MDQyRSs4NjAwMTM3OSAtPiAtMzEwNjguNzU0OQoreHN1YjQxOSBzdWJ0cmFjdCAtMzEwNjguNzU0OSAtMy40MTQ5NTA0MkUrODYwMDEzNzkgLT4gMy40MTQ5NTA0MkUrODYwMDEzNzkgSW5leGFjdCBSb3VuZGVkCit4YWRkNDIwIGFkZCAtNjg5NTExNzMuIC0yMTE4MDQ5NzcuRS05NzMxODEyNiAtPiAtNjg5NTExNzMuMCBJbmV4YWN0IFJvdW5kZWQKK3hjb200MjAgY29tcGFyZSAtNjg5NTExNzMuIC0yMTE4MDQ5NzcuRS05NzMxODEyNiAtPiAtMQoreGRpdjQyMCBkaXZpZGUgLTY4OTUxMTczLiAtMjExODA0OTc3LkUtOTczMTgxMjYgLT4gMy4yNTU0MDg1NEUrOTczMTgxMjUgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDIwIGRpdmlkZWludCAtNjg5NTExNzMuIC0yMTE4MDQ5NzcuRS05NzMxODEyNiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQyMCBtdWx0aXBseSAtNjg5NTExNzMuIC0yMTE4MDQ5NzcuRS05NzMxODEyNiAtPiAxLjQ2MDQyMDE2RS05NzMxODExMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MjAgcG93ZXIgLTY4OTUxMTczLiAtMiAtPiAyLjEwMzM3NDg4RS0xNiBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MjAgcmVtYWluZGVyIC02ODk1MTE3My4gLTIxMTgwNDk3Ny5FLTk3MzE4MTI2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDIwIHN1YnRyYWN0IC02ODk1MTE3My4gLTIxMTgwNDk3Ny5FLTk3MzE4MTI2IC0+IC02ODk1MTE3My4wIEluZXhhY3QgUm91bmRlZAoreGFkZDQyMSBhZGQgLTQuMDk0OTI1NzFFLTMwMTc0OTQ5MCA0MzQuMjAxOTlFLTc0OTM5MDk1MiAtPiAtNC4wOTQ5MjU3MUUtMzAxNzQ5NDkwIEluZXhhY3QgUm91bmRlZAoreGNvbTQyMSBjb21wYXJlIC00LjA5NDkyNTcxRS0zMDE3NDk0OTAgNDM0LjIwMTk5RS03NDkzOTA5NTIgLT4gLTEKK3hkaXY0MjEgZGl2aWRlIC00LjA5NDkyNTcxRS0zMDE3NDk0OTAgNDM0LjIwMTk5RS03NDkzOTA5NTIgLT4gLTkuNDMwOTIzNDFFKzQ0NzY0MTQ1OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MjEgZGl2aWRlaW50IC00LjA5NDkyNTcxRS0zMDE3NDk0OTAgNDM0LjIwMTk5RS03NDkzOTA5NTIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0MjEgbXVsdGlwbHkgLTQuMDk0OTI1NzFFLTMwMTc0OTQ5MCA0MzQuMjAxOTlFLTc0OTM5MDk1MiAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cG93NDIxIHBvd2VyIC00LjA5NDkyNTcxRS0zMDE3NDk0OTAgNCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW00MjEgcmVtYWluZGVyIC00LjA5NDkyNTcxRS0zMDE3NDk0OTAgNDM0LjIwMTk5RS03NDkzOTA5NTIgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0MjEgc3VidHJhY3QgLTQuMDk0OTI1NzFFLTMwMTc0OTQ5MCA0MzQuMjAxOTlFLTc0OTM5MDk1MiAtPiAtNC4wOTQ5MjU3MUUtMzAxNzQ5NDkwIEluZXhhY3QgUm91bmRlZAoreGFkZDQyMiBhZGQgMzg5OC4wMzE4OCAtODI1NzIuNjE1IC0+IC03ODY3NC41ODMxIEluZXhhY3QgUm91bmRlZAoreGNvbTQyMiBjb21wYXJlIDM4OTguMDMxODggLTgyNTcyLjYxNSAtPiAxCit4ZGl2NDIyIGRpdmlkZSAzODk4LjAzMTg4IC04MjU3Mi42MTUgLT4gLTAuMDQ3MjA3MzIwMiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MjIgZGl2aWRlaW50IDM4OTguMDMxODggLTgyNTcyLjYxNSAtPiAtMAoreG11bDQyMiBtdWx0aXBseSAzODk4LjAzMTg4IC04MjU3Mi42MTUgLT4gLTMyMTg3MDY4NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MjIgcG93ZXIgMzg5OC4wMzE4OCAtODI1NzMgLT4gMS4zMzAxMDczN0UtMjk2NTA3IEluZXhhY3QgUm91bmRlZAoreHJlbTQyMiByZW1haW5kZXIgMzg5OC4wMzE4OCAtODI1NzIuNjE1IC0+IDM4OTguMDMxODgKK3hzdWI0MjIgc3VidHJhY3QgMzg5OC4wMzE4OCAtODI1NzIuNjE1IC0+IDg2NDcwLjY0NjkgSW5leGFjdCBSb3VuZGVkCit4YWRkNDIzIGFkZCAtMS43NjE5MzU2IC0yNTQ2LjY0MDQzIC0+IC0yNTQ4LjQwMjM3IEluZXhhY3QgUm91bmRlZAoreGNvbTQyMyBjb21wYXJlIC0xLjc2MTkzNTYgLTI1NDYuNjQwNDMgLT4gMQoreGRpdjQyMyBkaXZpZGUgLTEuNzYxOTM1NiAtMjU0Ni42NDA0MyAtPiAwLjAwMDY5MTg2NjY1NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MjMgZGl2aWRlaW50IC0xLjc2MTkzNTYgLTI1NDYuNjQwNDMgLT4gMAoreG11bDQyMyBtdWx0aXBseSAtMS43NjE5MzU2IC0yNTQ2LjY0MDQzIC0+IDQ0ODcuMDE2NDMgSW5leGFjdCBSb3VuZGVkCit4cG93NDIzIHBvd2VyIC0xLjc2MTkzNTYgLTI1NDcgLT4gLTIuOTA2NjQ1NTdFLTYyNyBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MjMgcmVtYWluZGVyIC0xLjc2MTkzNTYgLTI1NDYuNjQwNDMgLT4gLTEuNzYxOTM1NgoreHN1YjQyMyBzdWJ0cmFjdCAtMS43NjE5MzU2IC0yNTQ2LjY0MDQzIC0+IDI1NDQuODc4NDkgSW5leGFjdCBSb3VuZGVkCit4YWRkNDI0IGFkZCA1OTcxNC4xOTY4IDI5NzM0Mzg4LjZFLTU2NDUyNTUyNSAtPiA1OTcxNC4xOTY4IEluZXhhY3QgUm91bmRlZAoreGNvbTQyNCBjb21wYXJlIDU5NzE0LjE5NjggMjk3MzQzODguNkUtNTY0NTI1NTI1IC0+IDEKK3hkaXY0MjQgZGl2aWRlIDU5NzE0LjE5NjggMjk3MzQzODguNkUtNTY0NTI1NTI1IC0+IDIuMDA4MjUzNzNFKzU2NDUyNTUyMiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MjQgZGl2aWRlaW50IDU5NzE0LjE5NjggMjk3MzQzODguNkUtNTY0NTI1NTI1IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDI0IG11bHRpcGx5IDU5NzE0LjE5NjggMjk3MzQzODguNkUtNTY0NTI1NTI1IC0+IDEuNzc1NTY1MTNFLTU2NDUyNTUxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MjQgcG93ZXIgNTk3MTQuMTk2OCAzIC0+IDIuMTI5MjgwMDVFKzE0IEluZXhhY3QgUm91bmRlZAoreHJlbTQyNCByZW1haW5kZXIgNTk3MTQuMTk2OCAyOTczNDM4OC42RS01NjQ1MjU1MjUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0MjQgc3VidHJhY3QgNTk3MTQuMTk2OCAyOTczNDM4OC42RS01NjQ1MjU1MjUgLT4gNTk3MTQuMTk2OCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MjUgYWRkIDYuODg4OTExMzZFLTkzNTQ2NzM5NSAtNzg1MDQ5LjU2MkUtNzQxNjcxNDQyIC0+IC03Ljg1MDQ5NTYyRS03NDE2NzE0MzcgSW5leGFjdCBSb3VuZGVkCit4Y29tNDI1IGNvbXBhcmUgNi44ODg5MTEzNkUtOTM1NDY3Mzk1IC03ODUwNDkuNTYyRS03NDE2NzE0NDIgLT4gMQoreGRpdjQyNSBkaXZpZGUgNi44ODg5MTEzNkUtOTM1NDY3Mzk1IC03ODUwNDkuNTYyRS03NDE2NzE0NDIgLT4gLTguNzc1MTI5MjNFLTE5Mzc5NTk1OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MjUgZGl2aWRlaW50IDYuODg4OTExMzZFLTkzNTQ2NzM5NSAtNzg1MDQ5LjU2MkUtNzQxNjcxNDQyIC0+IC0wCit4bXVsNDI1IG11bHRpcGx5IDYuODg4OTExMzZFLTkzNTQ2NzM5NSAtNzg1MDQ5LjU2MkUtNzQxNjcxNDQyIC0+IC0wRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hwb3c0MjUgcG93ZXIgNi44ODg5MTEzNkUtOTM1NDY3Mzk1IC04IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTQyNSByZW1haW5kZXIgNi44ODg5MTEzNkUtOTM1NDY3Mzk1IC03ODUwNDkuNTYyRS03NDE2NzE0NDIgLT4gNi44ODg5MTEzNkUtOTM1NDY3Mzk1Cit4c3ViNDI1IHN1YnRyYWN0IDYuODg4OTExMzZFLTkzNTQ2NzM5NSAtNzg1MDQ5LjU2MkUtNzQxNjcxNDQyIC0+IDcuODUwNDk1NjJFLTc0MTY3MTQzNyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MjYgYWRkIDk3NTU2NjI1MSAtNTE5Ljg1ODUzMCAtPiA5NzU1NjU3MzEgSW5leGFjdCBSb3VuZGVkCit4Y29tNDI2IGNvbXBhcmUgOTc1NTY2MjUxIC01MTkuODU4NTMwIC0+IDEKK3hkaXY0MjYgZGl2aWRlIDk3NTU2NjI1MSAtNTE5Ljg1ODUzMCAtPiAtMTg3NjU5OS40OSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MjYgZGl2aWRlaW50IDk3NTU2NjI1MSAtNTE5Ljg1ODUzMCAtPiAtMTg3NjU5OQoreG11bDQyNiBtdWx0aXBseSA5NzU1NjYyNTEgLTUxOS44NTg1MzAgLT4gLTUuMDcxNTY0MzdFKzExIEluZXhhY3QgUm91bmRlZAoreHBvdzQyNiBwb3dlciA5NzU1NjYyNTEgLTUyMCAtPiAzLjg1OTA1MzAwRS00Njc1IEluZXhhY3QgUm91bmRlZAoreHJlbTQyNiByZW1haW5kZXIgOTc1NTY2MjUxIC01MTkuODU4NTMwIC0+IDI1My40NjA1MzAKK3hzdWI0MjYgc3VidHJhY3QgOTc1NTY2MjUxIC01MTkuODU4NTMwIC0+IDk3NTU2Njc3MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MjcgYWRkIDMwNzQwMTk1NCAtMjMxNDgxNTgyLiAtPiA3NTkyMDM3MgoreGNvbTQyNyBjb21wYXJlIDMwNzQwMTk1NCAtMjMxNDgxNTgyLiAtPiAxCit4ZGl2NDI3IGRpdmlkZSAzMDc0MDE5NTQgLTIzMTQ4MTU4Mi4gLT4gLTEuMzI3OTc1ODYgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDI3IGRpdmlkZWludCAzMDc0MDE5NTQgLTIzMTQ4MTU4Mi4gLT4gLTEKK3htdWw0MjcgbXVsdGlwbHkgMzA3NDAxOTU0IC0yMzE0ODE1ODIuIC0+IC03LjExNTc4OTA2RSsxNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MjcgcG93ZXIgMzA3NDAxOTU0IC0yMzE0ODE1ODIgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDI3IHJlbWFpbmRlciAzMDc0MDE5NTQgLTIzMTQ4MTU4Mi4gLT4gNzU5MjAzNzIKK3hzdWI0Mjcgc3VidHJhY3QgMzA3NDAxOTU0IC0yMzE0ODE1ODIuIC0+IDUzODg4MzUzNgoreGFkZDQyOCBhZGQgMjIzNzY0NS40OEUrOTkyOTQ3Mzg4IC02MDYxODA1NS4zRS04NTczMTY3MDYgLT4gMi4yMzc2NDU0OEUrOTkyOTQ3Mzk0IEluZXhhY3QgUm91bmRlZAoreGNvbTQyOCBjb21wYXJlIDIyMzc2NDUuNDhFKzk5Mjk0NzM4OCAtNjA2MTgwNTUuM0UtODU3MzE2NzA2IC0+IDEKK3hkaXY0MjggZGl2aWRlIDIyMzc2NDUuNDhFKzk5Mjk0NzM4OCAtNjA2MTgwNTUuM0UtODU3MzE2NzA2IC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3hkdmk0MjggZGl2aWRlaW50IDIyMzc2NDUuNDhFKzk5Mjk0NzM4OCAtNjA2MTgwNTUuM0UtODU3MzE2NzA2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDI4IG11bHRpcGx5IDIyMzc2NDUuNDhFKzk5Mjk0NzM4OCAtNjA2MTgwNTUuM0UtODU3MzE2NzA2IC0+IC0xLjM1NjQxNzE3RSsxMzU2MzA2OTYgSW5leGFjdCBSb3VuZGVkCit4cG93NDI4IHBvd2VyIDIyMzc2NDUuNDhFKzk5Mjk0NzM4OCAtNiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW00MjggcmVtYWluZGVyIDIyMzc2NDUuNDhFKzk5Mjk0NzM4OCAtNjA2MTgwNTUuM0UtODU3MzE2NzA2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDI4IHN1YnRyYWN0IDIyMzc2NDUuNDhFKzk5Mjk0NzM4OCAtNjA2MTgwNTUuM0UtODU3MzE2NzA2IC0+IDIuMjM3NjQ1NDhFKzk5Mjk0NzM5NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MjkgYWRkIC00MDM5MDMuODUxIDM1LjUwNDk2ODdFLTcyMDk1MTU1IC0+IC00MDM5MDMuODUxIEluZXhhY3QgUm91bmRlZAoreGNvbTQyOSBjb21wYXJlIC00MDM5MDMuODUxIDM1LjUwNDk2ODdFLTcyMDk1MTU1IC0+IC0xCit4ZGl2NDI5IGRpdmlkZSAtNDAzOTAzLjg1MSAzNS41MDQ5Njg3RS03MjA5NTE1NSAtPiAtMS4xMzc1OTgxMEUrNzIwOTUxNTkgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDI5IGRpdmlkZWludCAtNDAzOTAzLjg1MSAzNS41MDQ5Njg3RS03MjA5NTE1NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQyOSBtdWx0aXBseSAtNDAzOTAzLjg1MSAzNS41MDQ5Njg3RS03MjA5NTE1NSAtPiAtMS40MzQwNTkzNkUtNzIwOTUxNDggSW5leGFjdCBSb3VuZGVkCit4cG93NDI5IHBvd2VyIC00MDM5MDMuODUxIDQgLT4gMi42NjE0MTExN0UrMjIgSW5leGFjdCBSb3VuZGVkCit4cmVtNDI5IHJlbWFpbmRlciAtNDAzOTAzLjg1MSAzNS41MDQ5Njg3RS03MjA5NTE1NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQyOSBzdWJ0cmFjdCAtNDAzOTAzLjg1MSAzNS41MDQ5Njg3RS03MjA5NTE1NSAtPiAtNDAzOTAzLjg1MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MzAgYWRkIDYuNDg2NzQ5NzkgLTYyMTczMi41MzJFKzQyMjU3NTgwMCAtPiAtNi4yMTczMjUzMkUrNDIyNTc1ODA1IEluZXhhY3QgUm91bmRlZAoreGNvbTQzMCBjb21wYXJlIDYuNDg2NzQ5NzkgLTYyMTczMi41MzJFKzQyMjU3NTgwMCAtPiAxCit4ZGl2NDMwIGRpdmlkZSA2LjQ4Njc0OTc5IC02MjE3MzIuNTMyRSs0MjI1NzU4MDAgLT4gLTEuMDQzMzM0NDdFLTQyMjU3NTgwNSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MzAgZGl2aWRlaW50IDYuNDg2NzQ5NzkgLTYyMTczMi41MzJFKzQyMjU3NTgwMCAtPiAtMAoreG11bDQzMCBtdWx0aXBseSA2LjQ4Njc0OTc5IC02MjE3MzIuNTMyRSs0MjI1NzU4MDAgLT4gLTQuMDMzMDIzMzdFKzQyMjU3NTgwNiBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MzAgcG93ZXIgNi40ODY3NDk3OSAtNiAtPiAwLjAwMDAxMzQyMjYxNDYgSW5leGFjdCBSb3VuZGVkCit4cmVtNDMwIHJlbWFpbmRlciA2LjQ4Njc0OTc5IC02MjE3MzIuNTMyRSs0MjI1NzU4MDAgLT4gNi40ODY3NDk3OQoreHN1YjQzMCBzdWJ0cmFjdCA2LjQ4Njc0OTc5IC02MjE3MzIuNTMyRSs0MjI1NzU4MDAgLT4gNi4yMTczMjUzMkUrNDIyNTc1ODA1IEluZXhhY3QgUm91bmRlZAoreGFkZDQzMSBhZGQgLTMxNDAxLjk0MTggMzYuMzk2MDY3OSAtPiAtMzEzNjUuNTQ1NyBJbmV4YWN0IFJvdW5kZWQKK3hjb200MzEgY29tcGFyZSAtMzE0MDEuOTQxOCAzNi4zOTYwNjc5IC0+IC0xCit4ZGl2NDMxIGRpdmlkZSAtMzE0MDEuOTQxOCAzNi4zOTYwNjc5IC0+IC04NjIuNzgzOTExIEluZXhhY3QgUm91bmRlZAoreGR2aTQzMSBkaXZpZGVpbnQgLTMxNDAxLjk0MTggMzYuMzk2MDY3OSAtPiAtODYyCit4bXVsNDMxIG11bHRpcGx5IC0zMTQwMS45NDE4IDM2LjM5NjA2NzkgLT4gLTExNDI5MDcuMjEgSW5leGFjdCBSb3VuZGVkCit4cG93NDMxIHBvd2VyIC0zMTQwMS45NDE4IDM2IC0+IDcuNzcwMjM1MDVFKzE2MSBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MzEgcmVtYWluZGVyIC0zMTQwMS45NDE4IDM2LjM5NjA2NzkgLT4gLTI4LjUzMTI3MDIKK3hzdWI0MzEgc3VidHJhY3QgLTMxNDAxLjk0MTggMzYuMzk2MDY3OSAtPiAtMzE0MzguMzM3OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MzIgYWRkIDMxMzQ1MzIxLjEgNTEuNTQ4MjE5MSAtPiAzMTM0NTM3Mi42IEluZXhhY3QgUm91bmRlZAoreGNvbTQzMiBjb21wYXJlIDMxMzQ1MzIxLjEgNTEuNTQ4MjE5MSAtPiAxCit4ZGl2NDMyIGRpdmlkZSAzMTM0NTMyMS4xIDUxLjU0ODIxOTEgLT4gNjA4MDc3LjY3MyBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MzIgZGl2aWRlaW50IDMxMzQ1MzIxLjEgNTEuNTQ4MjE5MSAtPiA2MDgwNzcKK3htdWw0MzIgbXVsdGlwbHkgMzEzNDUzMjEuMSA1MS41NDgyMTkxIC0+IDEuNjE1Nzk1NDhFKzkgSW5leGFjdCBSb3VuZGVkCit4cG93NDMyIHBvd2VyIDMxMzQ1MzIxLjEgNTIgLT4gNi4zMjM4NTA1OUUrMzg5IEluZXhhY3QgUm91bmRlZAoreHJlbTQzMiByZW1haW5kZXIgMzEzNDUzMjEuMSA1MS41NDgyMTkxIC0+IDM0LjY3NDMyOTMKK3hzdWI0MzIgc3VidHJhY3QgMzEzNDUzMjEuMSA1MS41NDgyMTkxIC0+IDMxMzQ1MjY5LjYgSW5leGFjdCBSb3VuZGVkCit4YWRkNDMzIGFkZCAtNjQuMTcyODQ0IC0yODUwNjIyNy4yRS03Njc5NjU4MDAgLT4gLTY0LjE3Mjg0NDAgSW5leGFjdCBSb3VuZGVkCit4Y29tNDMzIGNvbXBhcmUgLTY0LjE3Mjg0NCAtMjg1MDYyMjcuMkUtNzY3OTY1ODAwIC0+IC0xCit4ZGl2NDMzIGRpdmlkZSAtNjQuMTcyODQ0IC0yODUwNjIyNy4yRS03Njc5NjU4MDAgLT4gMi4yNTExODY4NkUrNzY3OTY1Nzk0IEluZXhhY3QgUm91bmRlZAoreGR2aTQzMyBkaXZpZGVpbnQgLTY0LjE3Mjg0NCAtMjg1MDYyMjcuMkUtNzY3OTY1ODAwIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDMzIG11bHRpcGx5IC02NC4xNzI4NDQgLTI4NTA2MjI3LjJFLTc2Nzk2NTgwMCAtPiAxLjgyOTMyNTY3RS03Njc5NjU3OTEgSW5leGFjdCBSb3VuZGVkCit4cG93NDMzIHBvd2VyIC02NC4xNzI4NDQgLTMgLT4gLTAuMDAwMDAzNzgzOTU2NTQgSW5leGFjdCBSb3VuZGVkCit4cmVtNDMzIHJlbWFpbmRlciAtNjQuMTcyODQ0IC0yODUwNjIyNy4yRS03Njc5NjU4MDAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0MzMgc3VidHJhY3QgLTY0LjE3Mjg0NCAtMjg1MDYyMjcuMkUtNzY3OTY1ODAwIC0+IC02NC4xNzI4NDQwIEluZXhhY3QgUm91bmRlZAoreGFkZDQzNCBhZGQgNzA0MzcuMTU1MSAtNjI5MTYuMTIzMyAtPiA3NTIxLjAzMTgKK3hjb200MzQgY29tcGFyZSA3MDQzNy4xNTUxIC02MjkxNi4xMjMzIC0+IDEKK3hkaXY0MzQgZGl2aWRlIDcwNDM3LjE1NTEgLTYyOTE2LjEyMzMgLT4gLTEuMTE5NTQwNjEgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDM0IGRpdmlkZWludCA3MDQzNy4xNTUxIC02MjkxNi4xMjMzIC0+IC0xCit4bXVsNDM0IG11bHRpcGx5IDcwNDM3LjE1NTEgLTYyOTE2LjEyMzMgLT4gLTQuNDMxNjMyNzRFKzkgSW5leGFjdCBSb3VuZGVkCit4cG93NDM0IHBvd2VyIDcwNDM3LjE1NTEgLTYyOTE2IC0+IDUuMDI5NDUwNjBFLTMwNTAwNSBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MzQgcmVtYWluZGVyIDcwNDM3LjE1NTEgLTYyOTE2LjEyMzMgLT4gNzUyMS4wMzE4Cit4c3ViNDM0IHN1YnRyYWN0IDcwNDM3LjE1NTEgLTYyOTE2LjEyMzMgLT4gMTMzMzUzLjI3OCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MzUgYWRkIDkxNjI2MDE2NCAtNTguNDAxNzMyNSAtPiA5MTYyNjAxMDYgSW5leGFjdCBSb3VuZGVkCit4Y29tNDM1IGNvbXBhcmUgOTE2MjYwMTY0IC01OC40MDE3MzI1IC0+IDEKK3hkaXY0MzUgZGl2aWRlIDkxNjI2MDE2NCAtNTguNDAxNzMyNSAtPiAtMTU2ODg5MjAuOSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MzUgZGl2aWRlaW50IDkxNjI2MDE2NCAtNTguNDAxNzMyNSAtPiAtMTU2ODg5MjAKK3htdWw0MzUgbXVsdGlwbHkgOTE2MjYwMTY0IC01OC40MDE3MzI1IC0+IC01LjM1MTExODEwRSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MzUgcG93ZXIgOTE2MjYwMTY0IC01OCAtPiAxLjU5NTU0NTg3RS01MjAgSW5leGFjdCBSb3VuZGVkCit4cmVtNDM1IHJlbWFpbmRlciA5MTYyNjAxNjQgLTU4LjQwMTczMjUgLT4gNTQuOTQ2MTAwMAoreHN1YjQzNSBzdWJ0cmFjdCA5MTYyNjAxNjQgLTU4LjQwMTczMjUgLT4gOTE2MjYwMjIyIEluZXhhY3QgUm91bmRlZAoreGFkZDQzNiBhZGQgMTk4ODkwODUuM0UtNDY4MTY0ODAgMTU4MTY4My45NCAtPiAxNTgxNjgzLjk0IEluZXhhY3QgUm91bmRlZAoreGNvbTQzNiBjb21wYXJlIDE5ODg5MDg1LjNFLTQ2ODE2NDgwIDE1ODE2ODMuOTQgLT4gLTEKK3hkaXY0MzYgZGl2aWRlIDE5ODg5MDg1LjNFLTQ2ODE2NDgwIDE1ODE2ODMuOTQgLT4gMS4yNTc0NjI2OEUtNDY4MTY0NzkgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDM2IGRpdmlkZWludCAxOTg4OTA4NS4zRS00NjgxNjQ4MCAxNTgxNjgzLjk0IC0+IDAKK3htdWw0MzYgbXVsdGlwbHkgMTk4ODkwODUuM0UtNDY4MTY0ODAgMTU4MTY4My45NCAtPiAzLjE0NTgyNDY4RS00NjgxNjQ2NyBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0MzYgcG93ZXIgMTk4ODkwODUuM0UtNDY4MTY0ODAgMTU4MTY4NCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW00MzYgcmVtYWluZGVyIDE5ODg5MDg1LjNFLTQ2ODE2NDgwIDE1ODE2ODMuOTQgLT4gMS45ODg5MDg1M0UtNDY4MTY0NzMKK3hzdWI0MzYgc3VidHJhY3QgMTk4ODkwODUuM0UtNDY4MTY0ODAgMTU4MTY4My45NCAtPiAtMTU4MTY4My45NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MzcgYWRkIC01NjMxMi4zMzgzIDc4OS40NjYwNjQgLT4gLTU1NTIyLjg3MjIgSW5leGFjdCBSb3VuZGVkCit4Y29tNDM3IGNvbXBhcmUgLTU2MzEyLjMzODMgNzg5LjQ2NjA2NCAtPiAtMQoreGRpdjQzNyBkaXZpZGUgLTU2MzEyLjMzODMgNzg5LjQ2NjA2NCAtPiAtNzEuMzI5NjUwMyBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MzcgZGl2aWRlaW50IC01NjMxMi4zMzgzIDc4OS40NjYwNjQgLT4gLTcxCit4bXVsNDM3IG11bHRpcGx5IC01NjMxMi4zMzgzIDc4OS40NjYwNjQgLT4gLTQ0NDU2NjgwLjEgSW5leGFjdCBSb3VuZGVkCit4cG93NDM3IHBvd2VyIC01NjMxMi4zMzgzIDc4OSAtPiAtMS42ODM0ODcyNEUrMzc0OCBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MzcgcmVtYWluZGVyIC01NjMxMi4zMzgzIDc4OS40NjYwNjQgLT4gLTI2MC4yNDc3NTYKK3hzdWI0Mzcgc3VidHJhY3QgLTU2MzEyLjMzODMgNzg5LjQ2NjA2NCAtPiAtNTcxMDEuODA0NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0MzggYWRkIDE4MzQ0Mi44NDkgLTkyNTg3NjEwNiAtPiAtOTI1NjkyNjYzIEluZXhhY3QgUm91bmRlZAoreGNvbTQzOCBjb21wYXJlIDE4MzQ0Mi44NDkgLTkyNTg3NjEwNiAtPiAxCit4ZGl2NDM4IGRpdmlkZSAxODM0NDIuODQ5IC05MjU4NzYxMDYgLT4gLTAuMDAwMTk4MTI4OTM3IEluZXhhY3QgUm91bmRlZAoreGR2aTQzOCBkaXZpZGVpbnQgMTgzNDQyLjg0OSAtOTI1ODc2MTA2IC0+IC0wCit4bXVsNDM4IG11bHRpcGx5IDE4MzQ0Mi44NDkgLTkyNTg3NjEwNiAtPiAtMS42OTg0NTM1MUUrMTQgSW5leGFjdCBSb3VuZGVkCit4cG93NDM4IHBvd2VyIDE4MzQ0Mi44NDkgLTkyNTg3NjEwNiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW00MzggcmVtYWluZGVyIDE4MzQ0Mi44NDkgLTkyNTg3NjEwNiAtPiAxODM0NDIuODQ5Cit4c3ViNDM4IHN1YnRyYWN0IDE4MzQ0Mi44NDkgLTkyNTg3NjEwNiAtPiA5MjYwNTk1NDkgSW5leGFjdCBSb3VuZGVkCit4YWRkNDM5IGFkZCA5NzExMTMuNjU1RS02OTU1NDAyNDkgLTQxOTM1MTEyMEUtOTc3NzQzODIzIC0+IDkuNzExMTM2NTVFLTY5NTU0MDI0NCBJbmV4YWN0IFJvdW5kZWQKK3hjb200MzkgY29tcGFyZSA5NzExMTMuNjU1RS02OTU1NDAyNDkgLTQxOTM1MTEyMEUtOTc3NzQzODIzIC0+IDEKK3hkaXY0MzkgZGl2aWRlIDk3MTExMy42NTVFLTY5NTU0MDI0OSAtNDE5MzUxMTIwRS05Nzc3NDM4MjMgLT4gLTIuMzE1NzUzMTBFKzI4MjIwMzU3MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0MzkgZGl2aWRlaW50IDk3MTExMy42NTVFLTY5NTU0MDI0OSAtNDE5MzUxMTIwRS05Nzc3NDM4MjMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0MzkgbXVsdGlwbHkgOTcxMTEzLjY1NUUtNjk1NTQwMjQ5IC00MTkzNTExMjBFLTk3Nzc0MzgyMyAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cG93NDM5IHBvd2VyIDk3MTExMy42NTVFLTY5NTU0MDI0OSAtNCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW00MzkgcmVtYWluZGVyIDk3MTExMy42NTVFLTY5NTU0MDI0OSAtNDE5MzUxMTIwRS05Nzc3NDM4MjMgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0Mzkgc3VidHJhY3QgOTcxMTEzLjY1NUUtNjk1NTQwMjQ5IC00MTkzNTExMjBFLTk3Nzc0MzgyMyAtPiA5LjcxMTEzNjU1RS02OTU1NDAyNDQgSW5leGFjdCBSb3VuZGVkCit4YWRkNDQwIGFkZCA4NTk2NTg1NTEuIDcyMzM4LjIwNTQgLT4gODU5NzMwODg5IEluZXhhY3QgUm91bmRlZAoreGNvbTQ0MCBjb21wYXJlIDg1OTY1ODU1MS4gNzIzMzguMjA1NCAtPiAxCit4ZGl2NDQwIGRpdmlkZSA4NTk2NTg1NTEuIDcyMzM4LjIwNTQgLT4gMTE4ODMuODgwMCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NDAgZGl2aWRlaW50IDg1OTY1ODU1MS4gNzIzMzguMjA1NCAtPiAxMTg4MworeG11bDQ0MCBtdWx0aXBseSA4NTk2NTg1NTEuIDcyMzM4LjIwNTQgLT4gNi4yMTg2MTU2OEUrMTMgSW5leGFjdCBSb3VuZGVkCit4cG93NDQwIHBvd2VyIDg1OTY1ODU1MS4gNzIzMzggLT4gMS44NzYyMDQ1MEUrNjQ2MjkxIEluZXhhY3QgUm91bmRlZAoreHJlbTQ0MCByZW1haW5kZXIgODU5NjU4NTUxLiA3MjMzOC4yMDU0IC0+IDYzNjU2LjIzMTgKK3hzdWI0NDAgc3VidHJhY3QgODU5NjU4NTUxLiA3MjMzOC4yMDU0IC0+IDg1OTU4NjIxMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NDEgYWRkIC0zLjg2NDQ2NjMwRSs0MjY4MTYwNjggLTY2NC41MzQ3MzcgLT4gLTMuODY0NDY2MzBFKzQyNjgxNjA2OCBJbmV4YWN0IFJvdW5kZWQKK3hjb200NDEgY29tcGFyZSAtMy44NjQ0NjYzMEUrNDI2ODE2MDY4IC02NjQuNTM0NzM3IC0+IC0xCit4ZGl2NDQxIGRpdmlkZSAtMy44NjQ0NjYzMEUrNDI2ODE2MDY4IC02NjQuNTM0NzM3IC0+IDUuODE1Mjk2MTVFKzQyNjgxNjA2NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NDEgZGl2aWRlaW50IC0zLjg2NDQ2NjMwRSs0MjY4MTYwNjggLTY2NC41MzQ3MzcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0NDEgbXVsdGlwbHkgLTMuODY0NDY2MzBFKzQyNjgxNjA2OCAtNjY0LjUzNDczNyAtPiAyLjU2ODA3MjEwRSs0MjY4MTYwNzEgSW5leGFjdCBSb3VuZGVkCit4cG93NDQxIHBvd2VyIC0zLjg2NDQ2NjMwRSs0MjY4MTYwNjggLTY2NSAtPiAtMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDQxIHJlbWFpbmRlciAtMy44NjQ0NjYzMEUrNDI2ODE2MDY4IC02NjQuNTM0NzM3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDQxIHN1YnRyYWN0IC0zLjg2NDQ2NjMwRSs0MjY4MTYwNjggLTY2NC41MzQ3MzcgLT4gLTMuODY0NDY2MzBFKzQyNjgxNjA2OCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NDIgYWRkIC05NjkuODgxODE4IDMxMTcwLjg1NTUgLT4gMzAyMDAuOTczNyBJbmV4YWN0IFJvdW5kZWQKK3hjb200NDIgY29tcGFyZSAtOTY5Ljg4MTgxOCAzMTE3MC44NTU1IC0+IC0xCit4ZGl2NDQyIGRpdmlkZSAtOTY5Ljg4MTgxOCAzMTE3MC44NTU1IC0+IC0wLjAzMTExNTAyMDggSW5leGFjdCBSb3VuZGVkCit4ZHZpNDQyIGRpdmlkZWludCAtOTY5Ljg4MTgxOCAzMTE3MC44NTU1IC0+IC0wCit4bXVsNDQyIG11bHRpcGx5IC05NjkuODgxODE4IDMxMTcwLjg1NTUgLT4gLTMwMjMyMDQ2LjAgSW5leGFjdCBSb3VuZGVkCit4cG93NDQyIHBvd2VyIC05NjkuODgxODE4IDMxMTcxIC0+IC0xLjAyODY1ODk0RSs5MzA5OSBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NDIgcmVtYWluZGVyIC05NjkuODgxODE4IDMxMTcwLjg1NTUgLT4gLTk2OS44ODE4MTgKK3hzdWI0NDIgc3VidHJhY3QgLTk2OS44ODE4MTggMzExNzAuODU1NSAtPiAtMzIxNDAuNzM3MyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NDMgYWRkIDc5ODA1MzcuMjcgODUuNDA0MDUxMiAtPiA3OTgwNjIyLjY3IEluZXhhY3QgUm91bmRlZAoreGNvbTQ0MyBjb21wYXJlIDc5ODA1MzcuMjcgODUuNDA0MDUxMiAtPiAxCit4ZGl2NDQzIGRpdmlkZSA3OTgwNTM3LjI3IDg1LjQwNDA1MTIgLT4gOTM0NDQuNDgxNCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NDMgZGl2aWRlaW50IDc5ODA1MzcuMjcgODUuNDA0MDUxMiAtPiA5MzQ0NAoreG11bDQ0MyBtdWx0aXBseSA3OTgwNTM3LjI3IDg1LjQwNDA1MTIgLT4gNjgxNTcwMjE0IEluZXhhY3QgUm91bmRlZAoreHBvdzQ0MyBwb3dlciA3OTgwNTM3LjI3IDg1IC0+IDQuNzA2ODU3NjNFKzU4NiBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NDMgcmVtYWluZGVyIDc5ODA1MzcuMjcgODUuNDA0MDUxMiAtPiA0MS4xMDk2NjcyCit4c3ViNDQzIHN1YnRyYWN0IDc5ODA1MzcuMjcgODUuNDA0MDUxMiAtPiA3OTgwNDUxLjg3IEluZXhhY3QgUm91bmRlZAoreGFkZDQ0NCBhZGQgLTExNDYwOTkxNi4gNzUyNS4xNDk4MSAtPiAtMTE0NjAyMzkxIEluZXhhY3QgUm91bmRlZAoreGNvbTQ0NCBjb21wYXJlIC0xMTQ2MDk5MTYuIDc1MjUuMTQ5ODEgLT4gLTEKK3hkaXY0NDQgZGl2aWRlIC0xMTQ2MDk5MTYuIDc1MjUuMTQ5ODEgLT4gLTE1MjMwLjI1MDQgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDQ0IGRpdmlkZWludCAtMTE0NjA5OTE2LiA3NTI1LjE0OTgxIC0+IC0xNTIzMAoreG11bDQ0NCBtdWx0aXBseSAtMTE0NjA5OTE2LiA3NTI1LjE0OTgxIC0+IC04LjYyNDU2Nzg4RSsxMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NDQgcG93ZXIgLTExNDYwOTkxNi4gNzUyNSAtPiAtNC40MzYyMDQ0NUUrNjA2NDUgSW5leGFjdCBSb3VuZGVkCit4cmVtNDQ0IHJlbWFpbmRlciAtMTE0NjA5OTE2LiA3NTI1LjE0OTgxIC0+IC0xODg0LjM5MzcwCit4c3ViNDQ0IHN1YnRyYWN0IC0xMTQ2MDk5MTYuIDc1MjUuMTQ5ODEgLT4gLTExNDYxNzQ0MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NDUgYWRkIDguNDM0MDQ2ODJFLTUwMDU3MjU2OCA0NzQ1MjY3MTkgLT4gNDc0NTI2NzE5IEluZXhhY3QgUm91bmRlZAoreGNvbTQ0NSBjb21wYXJlIDguNDM0MDQ2ODJFLTUwMDU3MjU2OCA0NzQ1MjY3MTkgLT4gLTEKK3hkaXY0NDUgZGl2aWRlIDguNDM0MDQ2ODJFLTUwMDU3MjU2OCA0NzQ1MjY3MTkgLT4gMS43NzczNTk3M0UtNTAwNTcyNTc2IEluZXhhY3QgUm91bmRlZAoreGR2aTQ0NSBkaXZpZGVpbnQgOC40MzQwNDY4MkUtNTAwNTcyNTY4IDQ3NDUyNjcxOSAtPiAwCit4bXVsNDQ1IG11bHRpcGx5IDguNDM0MDQ2ODJFLTUwMDU3MjU2OCA0NzQ1MjY3MTkgLT4gNC4wMDIxODA1N0UtNTAwNTcyNTU5IEluZXhhY3QgUm91bmRlZAoreHBvdzQ0NSBwb3dlciA4LjQzNDA0NjgyRS01MDA1NzI1NjggNDc0NTI2NzE5IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQ0NSByZW1haW5kZXIgOC40MzQwNDY4MkUtNTAwNTcyNTY4IDQ3NDUyNjcxOSAtPiA4LjQzNDA0NjgyRS01MDA1NzI1NjgKK3hzdWI0NDUgc3VidHJhY3QgOC40MzQwNDY4MkUtNTAwNTcyNTY4IDQ3NDUyNjcxOSAtPiAtNDc0NTI2NzE5IEluZXhhY3QgUm91bmRlZAoreGFkZDQ0NiBhZGQgMTg4MDA2NDMzIDIyNjAuMTcwMzdFLTk3ODE5MjUyNSAtPiAxODgwMDY0MzMgSW5leGFjdCBSb3VuZGVkCit4Y29tNDQ2IGNvbXBhcmUgMTg4MDA2NDMzIDIyNjAuMTcwMzdFLTk3ODE5MjUyNSAtPiAxCit4ZGl2NDQ2IGRpdmlkZSAxODgwMDY0MzMgMjI2MC4xNzAzN0UtOTc4MTkyNTI1IC0+IDguMzE4MjQxNjVFKzk3ODE5MjUyOSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NDYgZGl2aWRlaW50IDE4ODAwNjQzMyAyMjYwLjE3MDM3RS05NzgxOTI1MjUgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0NDYgbXVsdGlwbHkgMTg4MDA2NDMzIDIyNjAuMTcwMzdFLTk3ODE5MjUyNSAtPiA0LjI0OTI2NTY5RS05NzgxOTI1MTQgSW5leGFjdCBSb3VuZGVkCit4cG93NDQ2IHBvd2VyIDE4ODAwNjQzMyAyIC0+IDMuNTM0NjQxODhFKzE2IEluZXhhY3QgUm91bmRlZAoreHJlbTQ0NiByZW1haW5kZXIgMTg4MDA2NDMzIDIyNjAuMTcwMzdFLTk3ODE5MjUyNSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQ0NiBzdWJ0cmFjdCAxODgwMDY0MzMgMjI2MC4xNzAzN0UtOTc4MTkyNTI1IC0+IDE4ODAwNjQzMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NDcgYWRkIC05Ljk1ODM2MzEyIC04NjY0NjY3MDMgLT4gLTg2NjQ2NjcxMyBJbmV4YWN0IFJvdW5kZWQKK3hjb200NDcgY29tcGFyZSAtOS45NTgzNjMxMiAtODY2NDY2NzAzIC0+IDEKK3hkaXY0NDcgZGl2aWRlIC05Ljk1ODM2MzEyIC04NjY0NjY3MDMgLT4gMS4xNDkzMDcwN0UtOCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NDcgZGl2aWRlaW50IC05Ljk1ODM2MzEyIC04NjY0NjY3MDMgLT4gMAoreG11bDQ0NyBtdWx0aXBseSAtOS45NTgzNjMxMiAtODY2NDY2NzAzIC0+IDguNjI4NTkwMDZFKzkgSW5leGFjdCBSb3VuZGVkCit4cG93NDQ3IHBvd2VyIC05Ljk1ODM2MzEyIC04NjY0NjY3MDMgLT4gLTYuNzE3NDQzNjlFLTg2NDg5NjYzMCBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NDcgcmVtYWluZGVyIC05Ljk1ODM2MzEyIC04NjY0NjY3MDMgLT4gLTkuOTU4MzYzMTIKK3hzdWI0NDcgc3VidHJhY3QgLTkuOTU4MzYzMTIgLTg2NjQ2NjcwMyAtPiA4NjY0NjY2OTMgSW5leGFjdCBSb3VuZGVkCit4YWRkNDQ4IGFkZCA4MDkxOTMzOS4yRS05NjcyMzE1ODYgMjE5LjgyNDI2NiAtPiAyMTkuODI0MjY2IEluZXhhY3QgUm91bmRlZAoreGNvbTQ0OCBjb21wYXJlIDgwOTE5MzM5LjJFLTk2NzIzMTU4NiAyMTkuODI0MjY2IC0+IC0xCit4ZGl2NDQ4IGRpdmlkZSA4MDkxOTMzOS4yRS05NjcyMzE1ODYgMjE5LjgyNDI2NiAtPiAzLjY4MTA5MjIwRS05NjcyMzE1ODEgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDQ4IGRpdmlkZWludCA4MDkxOTMzOS4yRS05NjcyMzE1ODYgMjE5LjgyNDI2NiAtPiAwCit4bXVsNDQ4IG11bHRpcGx5IDgwOTE5MzM5LjJFLTk2NzIzMTU4NiAyMTkuODI0MjY2IC0+IDEuNzc4ODAzNDNFLTk2NzIzMTU3NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NDggcG93ZXIgODA5MTkzMzkuMkUtOTY3MjMxNTg2IDIyMCAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW00NDggcmVtYWluZGVyIDgwOTE5MzM5LjJFLTk2NzIzMTU4NiAyMTkuODI0MjY2IC0+IDguMDkxOTMzOTJFLTk2NzIzMTU3OQoreHN1YjQ0OCBzdWJ0cmFjdCA4MDkxOTMzOS4yRS05NjcyMzE1ODYgMjE5LjgyNDI2NiAtPiAtMjE5LjgyNDI2NiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NDkgYWRkIDE1OTU3OS40NDQgLTg5ODI3LjUyMjkgLT4gNjk3NTEuOTIxMQoreGNvbTQ0OSBjb21wYXJlIDE1OTU3OS40NDQgLTg5ODI3LjUyMjkgLT4gMQoreGRpdjQ0OSBkaXZpZGUgMTU5NTc5LjQ0NCAtODk4MjcuNTIyOSAtPiAtMS43NzY1MDk0NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NDkgZGl2aWRlaW50IDE1OTU3OS40NDQgLTg5ODI3LjUyMjkgLT4gLTEKK3htdWw0NDkgbXVsdGlwbHkgMTU5NTc5LjQ0NCAtODk4MjcuNTIyOSAtPiAtMS40MzM0NjI2MkUrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93NDQ5IHBvd2VyIDE1OTU3OS40NDQgLTg5ODI4IC0+IDkuNjk5NTU4NTBFLTQ2NzM3NCBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NDkgcmVtYWluZGVyIDE1OTU3OS40NDQgLTg5ODI3LjUyMjkgLT4gNjk3NTEuOTIxMQoreHN1YjQ0OSBzdWJ0cmFjdCAxNTk1NzkuNDQ0IC04OTgyNy41MjI5IC0+IDI0OTQwNi45NjcgSW5leGFjdCBSb3VuZGVkCit4YWRkNDUwIGFkZCAtNC41NDAwMDE1MyA2OTY2MzMzLjc0IC0+IDY5NjYzMjkuMjAgSW5leGFjdCBSb3VuZGVkCit4Y29tNDUwIGNvbXBhcmUgLTQuNTQwMDAxNTMgNjk2NjMzMy43NCAtPiAtMQoreGRpdjQ1MCBkaXZpZGUgLTQuNTQwMDAxNTMgNjk2NjMzMy43NCAtPiAtNi41MTcwNjAwNUUtNyBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NTAgZGl2aWRlaW50IC00LjU0MDAwMTUzIDY5NjYzMzMuNzQgLT4gLTAKK3htdWw0NTAgbXVsdGlwbHkgLTQuNTQwMDAxNTMgNjk2NjMzMy43NCAtPiAtMzE2MjcxNjUuOCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NTAgcG93ZXIgLTQuNTQwMDAxNTMgNjk2NjMzNCAtPiAzLjUyNTY4OTEzRSs0NTc3MjcxIEluZXhhY3QgUm91bmRlZAoreHJlbTQ1MCByZW1haW5kZXIgLTQuNTQwMDAxNTMgNjk2NjMzMy43NCAtPiAtNC41NDAwMDE1MworeHN1YjQ1MCBzdWJ0cmFjdCAtNC41NDAwMDE1MyA2OTY2MzMzLjc0IC0+IC02OTY2MzM4LjI4IEluZXhhY3QgUm91bmRlZAoreGFkZDQ1MSBhZGQgMjg3MDE1MzguN0UtMzkxMDE1NjQ5IC05MjA5OTkxOTIuIC0+IC05MjA5OTkxOTIgSW5leGFjdCBSb3VuZGVkCit4Y29tNDUxIGNvbXBhcmUgMjg3MDE1MzguN0UtMzkxMDE1NjQ5IC05MjA5OTkxOTIuIC0+IDEKK3hkaXY0NTEgZGl2aWRlIDI4NzAxNTM4LjdFLTM5MTAxNTY0OSAtOTIwOTk5MTkyLiAtPiAtMy4xMTYzNDc4N0UtMzkxMDE1NjUxIEluZXhhY3QgUm91bmRlZAoreGR2aTQ1MSBkaXZpZGVpbnQgMjg3MDE1MzguN0UtMzkxMDE1NjQ5IC05MjA5OTkxOTIuIC0+IC0wCit4bXVsNDUxIG11bHRpcGx5IDI4NzAxNTM4LjdFLTM5MTAxNTY0OSAtOTIwOTk5MTkyLiAtPiAtMi42NDM0MDk0MEUtMzkxMDE1NjMzIEluZXhhY3QgUm91bmRlZAoreHBvdzQ1MSBwb3dlciAyODcwMTUzOC43RS0zOTEwMTU2NDkgLTkyMDk5OTE5MiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NTEgcmVtYWluZGVyIDI4NzAxNTM4LjdFLTM5MTAxNTY0OSAtOTIwOTk5MTkyLiAtPiAyLjg3MDE1Mzg3RS0zOTEwMTU2NDIKK3hzdWI0NTEgc3VidHJhY3QgMjg3MDE1MzguN0UtMzkxMDE1NjQ5IC05MjA5OTkxOTIuIC0+IDkyMDk5OTE5MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NTIgYWRkIC0zNjEzODI1NzUuIC03OTc2LjE1Mjg2RSs4OTg0OTExNjkgLT4gLTcuOTc2MTUyODZFKzg5ODQ5MTE3MiBJbmV4YWN0IFJvdW5kZWQKK3hjb200NTIgY29tcGFyZSAtMzYxMzgyNTc1LiAtNzk3Ni4xNTI4NkUrODk4NDkxMTY5IC0+IDEKK3hkaXY0NTIgZGl2aWRlIC0zNjEzODI1NzUuIC03OTc2LjE1Mjg2RSs4OTg0OTExNjkgLT4gNC41MzA3ODc5OEUtODk4NDkxMTY1IEluZXhhY3QgUm91bmRlZAoreGR2aTQ1MiBkaXZpZGVpbnQgLTM2MTM4MjU3NS4gLTc5NzYuMTUyODZFKzg5ODQ5MTE2OSAtPiAwCit4bXVsNDUyIG11bHRpcGx5IC0zNjEzODI1NzUuIC03OTc2LjE1Mjg2RSs4OTg0OTExNjkgLT4gMi44ODI0NDI2NkUrODk4NDkxMTgxIEluZXhhY3QgUm91bmRlZAoreHBvdzQ1MiBwb3dlciAtMzYxMzgyNTc1LiAtOCAtPiAzLjQzNzY1NTM3RS02OSBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NTIgcmVtYWluZGVyIC0zNjEzODI1NzUuIC03OTc2LjE1Mjg2RSs4OTg0OTExNjkgLT4gLTM2MTM4MjU3NQoreHN1YjQ1MiBzdWJ0cmFjdCAtMzYxMzgyNTc1LiAtNzk3Ni4xNTI4NkUrODk4NDkxMTY5IC0+IDcuOTc2MTUyODZFKzg5ODQ5MTE3MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NTMgYWRkIDcwMjE4MDUuNjEgMTIyMjk1Mi44MyAtPiA4MjQ0NzU4LjQ0Cit4Y29tNDUzIGNvbXBhcmUgNzAyMTgwNS42MSAxMjIyOTUyLjgzIC0+IDEKK3hkaXY0NTMgZGl2aWRlIDcwMjE4MDUuNjEgMTIyMjk1Mi44MyAtPiA1Ljc0MTY4MTQ4IEluZXhhY3QgUm91bmRlZAoreGR2aTQ1MyBkaXZpZGVpbnQgNzAyMTgwNS42MSAxMjIyOTUyLjgzIC0+IDUKK3htdWw0NTMgbXVsdGlwbHkgNzAyMTgwNS42MSAxMjIyOTUyLjgzIC0+IDguNTg3MzM3MDRFKzEyIEluZXhhY3QgUm91bmRlZAoreHBvdzQ1MyBwb3dlciA3MDIxODA1LjYxIDEyMjI5NTMgLT4gMS4yNjU0MDU1M0UrODM3Mjg4NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NTMgcmVtYWluZGVyIDcwMjE4MDUuNjEgMTIyMjk1Mi44MyAtPiA5MDcwNDEuNDYKK3hzdWI0NTMgc3VidHJhY3QgNzAyMTgwNS42MSAxMjIyOTUyLjgzIC0+IDU3OTg4NTIuNzgKK3hhZGQ0NTQgYWRkIC00MC40ODExNjY3IC03OTY1NS41NjM1IC0+IC03OTY5Ni4wNDQ3IEluZXhhY3QgUm91bmRlZAoreGNvbTQ1NCBjb21wYXJlIC00MC40ODExNjY3IC03OTY1NS41NjM1IC0+IDEKK3hkaXY0NTQgZGl2aWRlIC00MC40ODExNjY3IC03OTY1NS41NjM1IC0+IDAuMDAwNTA4MjAyNjI4IEluZXhhY3QgUm91bmRlZAoreGR2aTQ1NCBkaXZpZGVpbnQgLTQwLjQ4MTE2NjcgLTc5NjU1LjU2MzUgLT4gMAoreG11bDQ1NCBtdWx0aXBseSAtNDAuNDgxMTY2NyAtNzk2NTUuNTYzNSAtPiAzMjI0NTUwLjE0IEluZXhhY3QgUm91bmRlZAoreHBvdzQ1NCBwb3dlciAtNDAuNDgxMTY2NyAtNzk2NTYgLT4gNC41MDE3NDI3NUUtMTI4MDI4IEluZXhhY3QgUm91bmRlZAoreHJlbTQ1NCByZW1haW5kZXIgLTQwLjQ4MTE2NjcgLTc5NjU1LjU2MzUgLT4gLTQwLjQ4MTE2NjcKK3hzdWI0NTQgc3VidHJhY3QgLTQwLjQ4MTE2NjcgLTc5NjU1LjU2MzUgLT4gNzk2MTUuMDgyMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NTUgYWRkIC04NzU1Njc0LjM4RSsxMTcxNjgxNzcgMTQ4LjkwMzQwNCAtPiAtOC43NTU2NzQzOEUrMTE3MTY4MTgzIEluZXhhY3QgUm91bmRlZAoreGNvbTQ1NSBjb21wYXJlIC04NzU1Njc0LjM4RSsxMTcxNjgxNzcgMTQ4LjkwMzQwNCAtPiAtMQoreGRpdjQ1NSBkaXZpZGUgLTg3NTU2NzQuMzhFKzExNzE2ODE3NyAxNDguOTAzNDA0IC0+IC01Ljg4MDEwMzU3RSsxMTcxNjgxODEgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDU1IGRpdmlkZWludCAtODc1NTY3NC4zOEUrMTE3MTY4MTc3IDE0OC45MDM0MDQgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0NTUgbXVsdGlwbHkgLTg3NTU2NzQuMzhFKzExNzE2ODE3NyAxNDguOTAzNDA0IC0+IC0xLjMwMzc0OTcyRSsxMTcxNjgxODYgSW5leGFjdCBSb3VuZGVkCit4cG93NDU1IHBvd2VyIC04NzU1Njc0LjM4RSsxMTcxNjgxNzcgMTQ5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NTUgcmVtYWluZGVyIC04NzU1Njc0LjM4RSsxMTcxNjgxNzcgMTQ4LjkwMzQwNCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQ1NSBzdWJ0cmFjdCAtODc1NTY3NC4zOEUrMTE3MTY4MTc3IDE0OC45MDM0MDQgLT4gLTguNzU1Njc0MzhFKzExNzE2ODE4MyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NTYgYWRkIDM0LjUzMjk3ODFFKzM4MjgyOTM5MiAtNDUuMjE3NzMwOSAtPiAzLjQ1MzI5NzgxRSszODI4MjkzOTMgSW5leGFjdCBSb3VuZGVkCit4Y29tNDU2IGNvbXBhcmUgMzQuNTMyOTc4MUUrMzgyODI5MzkyIC00NS4yMTc3MzA5IC0+IDEKK3hkaXY0NTYgZGl2aWRlIDM0LjUzMjk3ODFFKzM4MjgyOTM5MiAtNDUuMjE3NzMwOSAtPiAtNy42MzcwNDM1N0UrMzgyODI5MzkxIEluZXhhY3QgUm91bmRlZAoreGR2aTQ1NiBkaXZpZGVpbnQgMzQuNTMyOTc4MUUrMzgyODI5MzkyIC00NS4yMTc3MzA5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDU2IG11bHRpcGx5IDM0LjUzMjk3ODFFKzM4MjgyOTM5MiAtNDUuMjE3NzMwOSAtPiAtMS41NjE1MDI5MUUrMzgyODI5Mzk1IEluZXhhY3QgUm91bmRlZAoreHBvdzQ1NiBwb3dlciAzNC41MzI5NzgxRSszODI4MjkzOTIgLTQ1IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQ1NiByZW1haW5kZXIgMzQuNTMyOTc4MUUrMzgyODI5MzkyIC00NS4yMTc3MzA5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDU2IHN1YnRyYWN0IDM0LjUzMjk3ODFFKzM4MjgyOTM5MiAtNDUuMjE3NzMwOSAtPiAzLjQ1MzI5NzgxRSszODI4MjkzOTMgSW5leGFjdCBSb3VuZGVkCit4YWRkNDU3IGFkZCAtMzc5NTg0NzYuMCA1ODQzNjcuOTM1IC0+IC0zNzM3NDEwOC4xIEluZXhhY3QgUm91bmRlZAoreGNvbTQ1NyBjb21wYXJlIC0zNzk1ODQ3Ni4wIDU4NDM2Ny45MzUgLT4gLTEKK3hkaXY0NTcgZGl2aWRlIC0zNzk1ODQ3Ni4wIDU4NDM2Ny45MzUgLT4gLTY0Ljk1NjQ2NjIgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDU3IGRpdmlkZWludCAtMzc5NTg0NzYuMCA1ODQzNjcuOTM1IC0+IC02NAoreG11bDQ1NyBtdWx0aXBseSAtMzc5NTg0NzYuMCA1ODQzNjcuOTM1IC0+IC0yLjIxODE3MTYyRSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NTcgcG93ZXIgLTM3OTU4NDc2LjAgNTg0MzY4IC0+IDMuMjA1MzgyNjhFKzQ0MjkxMDUgSW5leGFjdCBSb3VuZGVkCit4cmVtNDU3IHJlbWFpbmRlciAtMzc5NTg0NzYuMCA1ODQzNjcuOTM1IC0+IC01NTg5MjguMTYwCit4c3ViNDU3IHN1YnRyYWN0IC0zNzk1ODQ3Ni4wIDU4NDM2Ny45MzUgLT4gLTM4NTQyODQzLjkgSW5leGFjdCBSb3VuZGVkCit4YWRkNDU4IGFkZCA0OTUyMzMuNTUzRS00MTQxNTIyMTUgNjIzNTI3NTkuMiAtPiA2MjM1Mjc1OS4yIEluZXhhY3QgUm91bmRlZAoreGNvbTQ1OCBjb21wYXJlIDQ5NTIzMy41NTNFLTQxNDE1MjIxNSA2MjM1Mjc1OS4yIC0+IC0xCit4ZGl2NDU4IGRpdmlkZSA0OTUyMzMuNTUzRS00MTQxNTIyMTUgNjIzNTI3NTkuMiAtPiA3Ljk0MjQ0ODA5RS00MTQxNTIyMTggSW5leGFjdCBSb3VuZGVkCit4ZHZpNDU4IGRpdmlkZWludCA0OTUyMzMuNTUzRS00MTQxNTIyMTUgNjIzNTI3NTkuMiAtPiAwCit4bXVsNDU4IG11bHRpcGx5IDQ5NTIzMy41NTNFLTQxNDE1MjIxNSA2MjM1Mjc1OS4yIC0+IDMuMDg3OTE3ODVFLTQxNDE1MjIwMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NTggcG93ZXIgNDk1MjMzLjU1M0UtNDE0MTUyMjE1IDYyMzUyNzU5IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQ1OCByZW1haW5kZXIgNDk1MjMzLjU1M0UtNDE0MTUyMjE1IDYyMzUyNzU5LjIgLT4gNC45NTIzMzU1M0UtNDE0MTUyMjEwCit4c3ViNDU4IHN1YnRyYWN0IDQ5NTIzMy41NTNFLTQxNDE1MjIxNSA2MjM1Mjc1OS4yIC0+IC02MjM1Mjc1OS4yIEluZXhhY3QgUm91bmRlZAoreGFkZDQ1OSBhZGQgLTUwMjM0MzA2MCAtOTY4MjguOTk0IC0+IC01MDI0Mzk4ODkgSW5leGFjdCBSb3VuZGVkCit4Y29tNDU5IGNvbXBhcmUgLTUwMjM0MzA2MCAtOTY4MjguOTk0IC0+IC0xCit4ZGl2NDU5IGRpdmlkZSAtNTAyMzQzMDYwIC05NjgyOC45OTQgLT4gNTE4Ny45NDA1MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NTkgZGl2aWRlaW50IC01MDIzNDMwNjAgLTk2ODI4Ljk5NCAtPiA1MTg3Cit4bXVsNDU5IG11bHRpcGx5IC01MDIzNDMwNjAgLTk2ODI4Ljk5NCAtPiA0Ljg2NDEzNzMxRSsxMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NTkgcG93ZXIgLTUwMjM0MzA2MCAtOTY4MjkgLT4gLTYuNzg2MDIxMTlFLTg0MjUxMCBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NTkgcmVtYWluZGVyIC01MDIzNDMwNjAgLTk2ODI4Ljk5NCAtPiAtOTEwNjguMTIyCit4c3ViNDU5IHN1YnRyYWN0IC01MDIzNDMwNjAgLTk2ODI4Ljk5NCAtPiAtNTAyMjQ2MjMxIEluZXhhY3QgUm91bmRlZAoreGFkZDQ2MCBhZGQgLTIyLjQzOTYzOUUrOTE2MzYyODc4IC0zOS40MDM3NjgxIC0+IC0yLjI0Mzk2MzkwRSs5MTYzNjI4NzkgSW5leGFjdCBSb3VuZGVkCit4Y29tNDYwIGNvbXBhcmUgLTIyLjQzOTYzOUUrOTE2MzYyODc4IC0zOS40MDM3NjgxIC0+IC0xCit4ZGl2NDYwIGRpdmlkZSAtMjIuNDM5NjM5RSs5MTYzNjI4NzggLTM5LjQwMzc2ODEgLT4gNS42OTQ3OTUyMUUrOTE2MzYyODc3IEluZXhhY3QgUm91bmRlZAoreGR2aTQ2MCBkaXZpZGVpbnQgLTIyLjQzOTYzOUUrOTE2MzYyODc4IC0zOS40MDM3NjgxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDYwIG11bHRpcGx5IC0yMi40Mzk2MzlFKzkxNjM2Mjg3OCAtMzkuNDAzNzY4MSAtPiA4Ljg0MjA2MzMxRSs5MTYzNjI4ODAgSW5leGFjdCBSb3VuZGVkCit4cG93NDYwIHBvd2VyIC0yMi40Mzk2MzlFKzkxNjM2Mjg3OCAtMzkgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQ2MCByZW1haW5kZXIgLTIyLjQzOTYzOUUrOTE2MzYyODc4IC0zOS40MDM3NjgxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDYwIHN1YnRyYWN0IC0yMi40Mzk2MzlFKzkxNjM2Mjg3OCAtMzkuNDAzNzY4MSAtPiAtMi4yNDM5NjM5MEUrOTE2MzYyODc5IEluZXhhY3QgUm91bmRlZAoreGFkZDQ2MSBhZGQgNzE4MTgwLjU4N0UtOTU3NDczNzIyIDEuNjYyMjM0NDMgLT4gMS42NjIyMzQ0MyBJbmV4YWN0IFJvdW5kZWQKK3hjb200NjEgY29tcGFyZSA3MTgxODAuNTg3RS05NTc0NzM3MjIgMS42NjIyMzQ0MyAtPiAtMQoreGRpdjQ2MSBkaXZpZGUgNzE4MTgwLjU4N0UtOTU3NDczNzIyIDEuNjYyMjM0NDMgLT4gNC4zMjA1NzM0MEUtOTU3NDczNzE3IEluZXhhY3QgUm91bmRlZAoreGR2aTQ2MSBkaXZpZGVpbnQgNzE4MTgwLjU4N0UtOTU3NDczNzIyIDEuNjYyMjM0NDMgLT4gMAoreG11bDQ2MSBtdWx0aXBseSA3MTgxODAuNTg3RS05NTc0NzM3MjIgMS42NjIyMzQ0MyAtPiAxLjE5Mzc4NDUwRS05NTc0NzM3MTYgSW5leGFjdCBSb3VuZGVkCit4cG93NDYxIHBvd2VyIDcxODE4MC41ODdFLTk1NzQ3MzcyMiAyIC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQ2MSByZW1haW5kZXIgNzE4MTgwLjU4N0UtOTU3NDczNzIyIDEuNjYyMjM0NDMgLT4gNy4xODE4MDU4N0UtOTU3NDczNzE3Cit4c3ViNDYxIHN1YnRyYWN0IDcxODE4MC41ODdFLTk1NzQ3MzcyMiAxLjY2MjIzNDQzIC0+IC0xLjY2MjIzNDQzIEluZXhhY3QgUm91bmRlZAoreGFkZDQ2MiBhZGQgLTUxNTkyLjI2OTggLTcxMzg4NS43NDEgLT4gLTc2NTQ3OC4wMTEgSW5leGFjdCBSb3VuZGVkCit4Y29tNDYyIGNvbXBhcmUgLTUxNTkyLjI2OTggLTcxMzg4NS43NDEgLT4gMQoreGRpdjQ2MiBkaXZpZGUgLTUxNTkyLjI2OTggLTcxMzg4NS43NDEgLT4gMC4wNzIyNjk2NDYwIEluZXhhY3QgUm91bmRlZAoreGR2aTQ2MiBkaXZpZGVpbnQgLTUxNTkyLjI2OTggLTcxMzg4NS43NDEgLT4gMAoreG11bDQ2MiBtdWx0aXBseSAtNTE1OTIuMjY5OCAtNzEzODg1Ljc0MSAtPiAzLjY4MzA5ODU4RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NjIgcG93ZXIgLTUxNTkyLjI2OTggLTcxMzg4NiAtPiA2LjM4NTc2OTIwRS0zMzY0MjQ5IEluZXhhY3QgUm91bmRlZAoreHJlbTQ2MiByZW1haW5kZXIgLTUxNTkyLjI2OTggLTcxMzg4NS43NDEgLT4gLTUxNTkyLjI2OTgKK3hzdWI0NjIgc3VidHJhY3QgLTUxNTkyLjI2OTggLTcxMzg4NS43NDEgLT4gNjYyMjkzLjQ3MSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NjMgYWRkIDUxLjIyNzk4NDhFKzgwNDM5NzQ1IDIwNy41NTkyNUUrODY1MTY1MDcwIC0+IDIuMDc1NTkyNTBFKzg2NTE2NTA3MiBJbmV4YWN0IFJvdW5kZWQKK3hjb200NjMgY29tcGFyZSA1MS4yMjc5ODQ4RSs4MDQzOTc0NSAyMDcuNTU5MjVFKzg2NTE2NTA3MCAtPiAtMQoreGRpdjQ2MyBkaXZpZGUgNTEuMjI3OTg0OEUrODA0Mzk3NDUgMjA3LjU1OTI1RSs4NjUxNjUwNzAgLT4gMi40NjgxMTM3OUUtNzg0NzI1MzI2IEluZXhhY3QgUm91bmRlZAoreGR2aTQ2MyBkaXZpZGVpbnQgNTEuMjI3OTg0OEUrODA0Mzk3NDUgMjA3LjU1OTI1RSs4NjUxNjUwNzAgLT4gMAoreG11bDQ2MyBtdWx0aXBseSA1MS4yMjc5ODQ4RSs4MDQzOTc0NSAyMDcuNTU5MjVFKzg2NTE2NTA3MCAtPiAxLjA2MzI4NDIxRSs5NDU2MDQ4MTkgSW5leGFjdCBSb3VuZGVkCit4cG93NDYzIHBvd2VyIDUxLjIyNzk4NDhFKzgwNDM5NzQ1IDIgLT4gMi42MjQzMDY0M0UrMTYwODc5NDkzIEluZXhhY3QgUm91bmRlZAoreHJlbTQ2MyByZW1haW5kZXIgNTEuMjI3OTg0OEUrODA0Mzk3NDUgMjA3LjU1OTI1RSs4NjUxNjUwNzAgLT4gNS4xMjI3OTg0OEUrODA0Mzk3NDYKK3hzdWI0NjMgc3VidHJhY3QgNTEuMjI3OTg0OEUrODA0Mzk3NDUgMjA3LjU1OTI1RSs4NjUxNjUwNzAgLT4gLTIuMDc1NTkyNTBFKzg2NTE2NTA3MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NjQgYWRkIC01OTgzLjIzNDY4IC0zOS45NTQ0NTEzIC0+IC02MDIzLjE4OTEzIEluZXhhY3QgUm91bmRlZAoreGNvbTQ2NCBjb21wYXJlIC01OTgzLjIzNDY4IC0zOS45NTQ0NTEzIC0+IC0xCit4ZGl2NDY0IGRpdmlkZSAtNTk4My4yMzQ2OCAtMzkuOTU0NDUxMyAtPiAxNDkuNzUxMzkyIEluZXhhY3QgUm91bmRlZAoreGR2aTQ2NCBkaXZpZGVpbnQgLTU5ODMuMjM0NjggLTM5Ljk1NDQ1MTMgLT4gMTQ5Cit4bXVsNDY0IG11bHRpcGx5IC01OTgzLjIzNDY4IC0zOS45NTQ0NTEzIC0+IDIzOTA1Ni44NTkgSW5leGFjdCBSb3VuZGVkCit4cG93NDY0IHBvd2VyIC01OTgzLjIzNDY4IC00MCAtPiA4LjM2Njc4MjkxRS0xNTIgSW5leGFjdCBSb3VuZGVkCit4cmVtNDY0IHJlbWFpbmRlciAtNTk4My4yMzQ2OCAtMzkuOTU0NDUxMyAtPiAtMzAuMDIxNDM2MworeHN1YjQ2NCBzdWJ0cmFjdCAtNTk4My4yMzQ2OCAtMzkuOTU0NDUxMyAtPiAtNTk0My4yODAyMyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NjUgYWRkIDkyMTYzOTMzMi5FLTkxNzU0Mjk2MyAyODczMjUuODkxIC0+IDI4NzMyNS44OTEgSW5leGFjdCBSb3VuZGVkCit4Y29tNDY1IGNvbXBhcmUgOTIxNjM5MzMyLkUtOTE3NTQyOTYzIDI4NzMyNS44OTEgLT4gLTEKK3hkaXY0NjUgZGl2aWRlIDkyMTYzOTMzMi5FLTkxNzU0Mjk2MyAyODczMjUuODkxIC0+IDMuMjA3NjQ0NTZFLTkxNzU0Mjk2MCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NjUgZGl2aWRlaW50IDkyMTYzOTMzMi5FLTkxNzU0Mjk2MyAyODczMjUuODkxIC0+IDAKK3htdWw0NjUgbXVsdGlwbHkgOTIxNjM5MzMyLkUtOTE3NTQyOTYzIDI4NzMyNS44OTEgLT4gMi42NDgxMDg0MkUtOTE3NTQyOTQ5IEluZXhhY3QgUm91bmRlZAoreHBvdzQ2NSBwb3dlciA5MjE2MzkzMzIuRS05MTc1NDI5NjMgMjg3MzI2IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQ2NSByZW1haW5kZXIgOTIxNjM5MzMyLkUtOTE3NTQyOTYzIDI4NzMyNS44OTEgLT4gOS4yMTYzOTMzMkUtOTE3NTQyOTU1Cit4c3ViNDY1IHN1YnRyYWN0IDkyMTYzOTMzMi5FLTkxNzU0Mjk2MyAyODczMjUuODkxIC0+IC0yODczMjUuODkxIEluZXhhY3QgUm91bmRlZAoreGFkZDQ2NiBhZGQgOTEwOTU5MTYuOEUtNzg3MzEyOTY5IC01ODY0My40MThFKzU4MTg5ODgwIC0+IC01Ljg2NDM0MTgwRSs1ODE4OTg4NCBJbmV4YWN0IFJvdW5kZWQKK3hjb200NjYgY29tcGFyZSA5MTA5NTkxNi44RS03ODczMTI5NjkgLTU4NjQzLjQxOEUrNTgxODk4ODAgLT4gMQoreGRpdjQ2NiBkaXZpZGUgOTEwOTU5MTYuOEUtNzg3MzEyOTY5IC01ODY0My40MThFKzU4MTg5ODgwIC0+IC0xLjU1MzM4Njg5RS04NDU1MDI4NDYgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDY2IGRpdmlkZWludCA5MTA5NTkxNi44RS03ODczMTI5NjkgLTU4NjQzLjQxOEUrNTgxODk4ODAgLT4gLTAKK3htdWw0NjYgbXVsdGlwbHkgOTEwOTU5MTYuOEUtNzg3MzEyOTY5IC01ODY0My40MThFKzU4MTg5ODgwIC0+IC01LjM0MjE3NTkzRS03MjkxMjMwNzcgSW5leGFjdCBSb3VuZGVkCit4cG93NDY2IHBvd2VyIDkxMDk1OTE2LjhFLTc4NzMxMjk2OSAtNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NjYgcmVtYWluZGVyIDkxMDk1OTE2LjhFLTc4NzMxMjk2OSAtNTg2NDMuNDE4RSs1ODE4OTg4MCAtPiA5LjEwOTU5MTY4RS03ODczMTI5NjIKK3hzdWI0NjYgc3VidHJhY3QgOTEwOTU5MTYuOEUtNzg3MzEyOTY5IC01ODY0My40MThFKzU4MTg5ODgwIC0+IDUuODY0MzQxODBFKzU4MTg5ODg0IEluZXhhY3QgUm91bmRlZAoreGFkZDQ2NyBhZGQgLTY0MTAuNTU1NSAtMjM0OTY0MjU5IC0+IC0yMzQ5NzA2NzAgSW5leGFjdCBSb3VuZGVkCit4Y29tNDY3IGNvbXBhcmUgLTY0MTAuNTU1NSAtMjM0OTY0MjU5IC0+IDEKK3hkaXY0NjcgZGl2aWRlIC02NDEwLjU1NTUgLTIzNDk2NDI1OSAtPiAwLjAwMDAyNzI4MzEwOTAgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDY3IGRpdmlkZWludCAtNjQxMC41NTU1IC0yMzQ5NjQyNTkgLT4gMAoreG11bDQ2NyBtdWx0aXBseSAtNjQxMC41NTU1IC0yMzQ5NjQyNTkgLT4gMS41MDYyNTE0MkUrMTIgSW5leGFjdCBSb3VuZGVkCit4cG93NDY3IHBvd2VyIC02NDEwLjU1NTUgLTIzNDk2NDI1OSAtPiAtMS4yNzA2NDQ2N0UtODk0NDg0NDE5IEluZXhhY3QgUm91bmRlZAoreHJlbTQ2NyByZW1haW5kZXIgLTY0MTAuNTU1NSAtMjM0OTY0MjU5IC0+IC02NDEwLjU1NTUKK3hzdWI0Njcgc3VidHJhY3QgLTY0MTAuNTU1NSAtMjM0OTY0MjU5IC0+IDIzNDk1Nzg0OCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NjggYWRkIC01LjMyNzExNjA2IC04NDQ3Mjg2LjIxIC0+IC04NDQ3MjkxLjU0IEluZXhhY3QgUm91bmRlZAoreGNvbTQ2OCBjb21wYXJlIC01LjMyNzExNjA2IC04NDQ3Mjg2LjIxIC0+IDEKK3hkaXY0NjggZGl2aWRlIC01LjMyNzExNjA2IC04NDQ3Mjg2LjIxIC0+IDYuMzA2MzA0NjhFLTcgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDY4IGRpdmlkZWludCAtNS4zMjcxMTYwNiAtODQ0NzI4Ni4yMSAtPiAwCit4bXVsNDY4IG11bHRpcGx5IC01LjMyNzExNjA2IC04NDQ3Mjg2LjIxIC0+IDQ0OTk5Njc0LjAgSW5leGFjdCBSb3VuZGVkCit4cG93NDY4IHBvd2VyIC01LjMyNzExNjA2IC04NDQ3Mjg2IC0+IDkuMDkxMzg3MjhFLTYxMzY4ODggSW5leGFjdCBSb3VuZGVkCit4cmVtNDY4IHJlbWFpbmRlciAtNS4zMjcxMTYwNiAtODQ0NzI4Ni4yMSAtPiAtNS4zMjcxMTYwNgoreHN1YjQ2OCBzdWJ0cmFjdCAtNS4zMjcxMTYwNiAtODQ0NzI4Ni4yMSAtPiA4NDQ3MjgwLjg4IEluZXhhY3QgUm91bmRlZAoreGFkZDQ2OSBhZGQgLTgyMjcyMTcxLjggLTc3Ni4yMzg1ODdFLTM3MjY5MDQxNiAtPiAtODIyNzIxNzEuOCBJbmV4YWN0IFJvdW5kZWQKK3hjb200NjkgY29tcGFyZSAtODIyNzIxNzEuOCAtNzc2LjIzODU4N0UtMzcyNjkwNDE2IC0+IC0xCit4ZGl2NDY5IGRpdmlkZSAtODIyNzIxNzEuOCAtNzc2LjIzODU4N0UtMzcyNjkwNDE2IC0+IDEuMDU5ODgyNTNFKzM3MjY5MDQyMSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NjkgZGl2aWRlaW50IC04MjI3MjE3MS44IC03NzYuMjM4NTg3RS0zNzI2OTA0MTYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0NjkgbXVsdGlwbHkgLTgyMjcyMTcxLjggLTc3Ni4yMzg1ODdFLTM3MjY5MDQxNiAtPiA2LjM4NjI4MzQ0RS0zNzI2OTA0MDYgSW5leGFjdCBSb3VuZGVkCit4cG93NDY5IHBvd2VyIC04MjI3MjE3MS44IC04IC0+IDQuNzY0MDQ5OTRFLTY0IEluZXhhY3QgUm91bmRlZAoreHJlbTQ2OSByZW1haW5kZXIgLTgyMjcyMTcxLjggLTc3Ni4yMzg1ODdFLTM3MjY5MDQxNiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQ2OSBzdWJ0cmFjdCAtODIyNzIxNzEuOCAtNzc2LjIzODU4N0UtMzcyNjkwNDE2IC0+IC04MjI3MjE3MS44IEluZXhhY3QgUm91bmRlZAoreGFkZDQ3MCBhZGQgNDEyNDExMjQ0LkUtNzc0MzM5MjY0IDg2NjQ1Mi40NjUgLT4gODY2NDUyLjQ2NSBJbmV4YWN0IFJvdW5kZWQKK3hjb200NzAgY29tcGFyZSA0MTI0MTEyNDQuRS03NzQzMzkyNjQgODY2NDUyLjQ2NSAtPiAtMQoreGRpdjQ3MCBkaXZpZGUgNDEyNDExMjQ0LkUtNzc0MzM5MjY0IDg2NjQ1Mi40NjUgLT4gNC43NTk3Njc2OEUtNzc0MzM5MjYyIEluZXhhY3QgUm91bmRlZAoreGR2aTQ3MCBkaXZpZGVpbnQgNDEyNDExMjQ0LkUtNzc0MzM5MjY0IDg2NjQ1Mi40NjUgLT4gMAoreG11bDQ3MCBtdWx0aXBseSA0MTI0MTEyNDQuRS03NzQzMzkyNjQgODY2NDUyLjQ2NSAtPiAzLjU3MzM0NzM5RS03NzQzMzkyNTAgSW5leGFjdCBSb3VuZGVkCit4cG93NDcwIHBvd2VyIDQxMjQxMTI0NC5FLTc3NDMzOTI2NCA4NjY0NTIgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDcwIHJlbWFpbmRlciA0MTI0MTEyNDQuRS03NzQzMzkyNjQgODY2NDUyLjQ2NSAtPiA0LjEyNDExMjQ0RS03NzQzMzkyNTYKK3hzdWI0NzAgc3VidHJhY3QgNDEyNDExMjQ0LkUtNzc0MzM5MjY0IDg2NjQ1Mi40NjUgLT4gLTg2NjQ1Mi40NjUgSW5leGFjdCBSb3VuZGVkCit4YWRkNDcxIGFkZCAtMTAzLjQ3NDU5OCAtMy4wMTY2MDY2MUUtNDQ2NjYxMjU3IC0+IC0xMDMuNDc0NTk4IEluZXhhY3QgUm91bmRlZAoreGNvbTQ3MSBjb21wYXJlIC0xMDMuNDc0NTk4IC0zLjAxNjYwNjYxRS00NDY2NjEyNTcgLT4gLTEKK3hkaXY0NzEgZGl2aWRlIC0xMDMuNDc0NTk4IC0zLjAxNjYwNjYxRS00NDY2NjEyNTcgLT4gMy40MzAxNjU0NkUrNDQ2NjYxMjU4IEluZXhhY3QgUm91bmRlZAoreGR2aTQ3MSBkaXZpZGVpbnQgLTEwMy40NzQ1OTggLTMuMDE2NjA2NjFFLTQ0NjY2MTI1NyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQ3MSBtdWx0aXBseSAtMTAzLjQ3NDU5OCAtMy4wMTY2MDY2MUUtNDQ2NjYxMjU3IC0+IDMuMTIxNDIxNTZFLTQ0NjY2MTI1NSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NzEgcG93ZXIgLTEwMy40NzQ1OTggLTMgLT4gLTkuMDI2MDcxMjNFLTcgSW5leGFjdCBSb3VuZGVkCit4cmVtNDcxIHJlbWFpbmRlciAtMTAzLjQ3NDU5OCAtMy4wMTY2MDY2MUUtNDQ2NjYxMjU3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDcxIHN1YnRyYWN0IC0xMDMuNDc0NTk4IC0zLjAxNjYwNjYxRS00NDY2NjEyNTcgLT4gLTEwMy40NzQ1OTggSW5leGFjdCBSb3VuZGVkCit4YWRkNDcyIGFkZCAtMzEwMjcuODMyMyAtNDc1Mzc4MTg2LiAtPiAtNDc1NDA5MjE0IEluZXhhY3QgUm91bmRlZAoreGNvbTQ3MiBjb21wYXJlIC0zMTAyNy44MzIzIC00NzUzNzgxODYuIC0+IDEKK3hkaXY0NzIgZGl2aWRlIC0zMTAyNy44MzIzIC00NzUzNzgxODYuIC0+IDAuMDAwMDY1MjY5Nzg1NiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NzIgZGl2aWRlaW50IC0zMTAyNy44MzIzIC00NzUzNzgxODYuIC0+IDAKK3htdWw0NzIgbXVsdGlwbHkgLTMxMDI3LjgzMjMgLTQ3NTM3ODE4Ni4gLT4gMS40NzQ5OTU0NkUrMTMgSW5leGFjdCBSb3VuZGVkCit4cG93NDcyIHBvd2VyIC0zMTAyNy44MzIzIC00NzUzNzgxODYgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDcyIHJlbWFpbmRlciAtMzEwMjcuODMyMyAtNDc1Mzc4MTg2LiAtPiAtMzEwMjcuODMyMworeHN1YjQ3MiBzdWJ0cmFjdCAtMzEwMjcuODMyMyAtNDc1Mzc4MTg2LiAtPiA0NzUzNDcxNTggSW5leGFjdCBSb3VuZGVkCit4YWRkNDczIGFkZCAtMTE5OTMzOS43MiAtNS43MzA2ODM5MkUrNTM3NzQ2MzIgLT4gLTUuNzMwNjgzOTJFKzUzNzc0NjMyIEluZXhhY3QgUm91bmRlZAoreGNvbTQ3MyBjb21wYXJlIC0xMTk5MzM5LjcyIC01LjczMDY4MzkyRSs1Mzc3NDYzMiAtPiAxCit4ZGl2NDczIGRpdmlkZSAtMTE5OTMzOS43MiAtNS43MzA2ODM5MkUrNTM3NzQ2MzIgLT4gMi4wOTI4Mzg3MkUtNTM3NzQ2MjcgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDczIGRpdmlkZWludCAtMTE5OTMzOS43MiAtNS43MzA2ODM5MkUrNTM3NzQ2MzIgLT4gMAoreG11bDQ3MyBtdWx0aXBseSAtMTE5OTMzOS43MiAtNS43MzA2ODM5MkUrNTM3NzQ2MzIgLT4gNi44NzMwMzY4NUUrNTM3NzQ2MzggSW5leGFjdCBSb3VuZGVkCit4cG93NDczIHBvd2VyIC0xMTk5MzM5LjcyIC02IC0+IDMuMzYwMDU3NDFFLTM3IEluZXhhY3QgUm91bmRlZAoreHJlbTQ3MyByZW1haW5kZXIgLTExOTkzMzkuNzIgLTUuNzMwNjgzOTJFKzUzNzc0NjMyIC0+IC0xMTk5MzM5LjcyCit4c3ViNDczIHN1YnRyYWN0IC0xMTk5MzM5LjcyIC01LjczMDY4MzkyRSs1Mzc3NDYzMiAtPiA1LjczMDY4MzkyRSs1Mzc3NDYzMiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NzQgYWRkIC03MzI5MDguOTMwRSszNjQzNDU0MzMgLTM0ODYxNDYuMjYgLT4gLTcuMzI5MDg5MzBFKzM2NDM0NTQzOCBJbmV4YWN0IFJvdW5kZWQKK3hjb200NzQgY29tcGFyZSAtNzMyOTA4LjkzMEUrMzY0MzQ1NDMzIC0zNDg2MTQ2LjI2IC0+IC0xCit4ZGl2NDc0IGRpdmlkZSAtNzMyOTA4LjkzMEUrMzY0MzQ1NDMzIC0zNDg2MTQ2LjI2IC0+IDIuMTAyMzQ3MDVFKzM2NDM0NTQzMiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NzQgZGl2aWRlaW50IC03MzI5MDguOTMwRSszNjQzNDU0MzMgLTM0ODYxNDYuMjYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0NzQgbXVsdGlwbHkgLTczMjkwOC45MzBFKzM2NDM0NTQzMyAtMzQ4NjE0Ni4yNiAtPiAyLjU1NTAyNzczRSszNjQzNDU0NDUgSW5leGFjdCBSb3VuZGVkCit4cG93NDc0IHBvd2VyIC03MzI5MDguOTMwRSszNjQzNDU0MzMgLTM0ODYxNDYgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDc0IHJlbWFpbmRlciAtNzMyOTA4LjkzMEUrMzY0MzQ1NDMzIC0zNDg2MTQ2LjI2IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDc0IHN1YnRyYWN0IC03MzI5MDguOTMwRSszNjQzNDU0MzMgLTM0ODYxNDYuMjYgLT4gLTcuMzI5MDg5MzBFKzM2NDM0NTQzOCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NzUgYWRkIC0yMzc2MTUwLjgzIC00Njc3NzU4My4zIC0+IC00OTE1MzczNC4xIEluZXhhY3QgUm91bmRlZAoreGNvbTQ3NSBjb21wYXJlIC0yMzc2MTUwLjgzIC00Njc3NzU4My4zIC0+IDEKK3hkaXY0NzUgZGl2aWRlIC0yMzc2MTUwLjgzIC00Njc3NzU4My4zIC0+IDAuMDUwNzk2Nzg0NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NzUgZGl2aWRlaW50IC0yMzc2MTUwLjgzIC00Njc3NzU4My4zIC0+IDAKK3htdWw0NzUgbXVsdGlwbHkgLTIzNzYxNTAuODMgLTQ2Nzc3NTgzLjMgLT4gMS4xMTE1MDU5M0UrMTQgSW5leGFjdCBSb3VuZGVkCit4cG93NDc1IHBvd2VyIC0yMzc2MTUwLjgzIC00Njc3NzU4MyAtPiAtMy41MTg4NjE5M0UtMjk4MjQ3OTc2IEluZXhhY3QgUm91bmRlZAoreHJlbTQ3NSByZW1haW5kZXIgLTIzNzYxNTAuODMgLTQ2Nzc3NTgzLjMgLT4gLTIzNzYxNTAuODMKK3hzdWI0NzUgc3VidHJhY3QgLTIzNzYxNTAuODMgLTQ2Nzc3NTgzLjMgLT4gNDQ0MDE0MzIuNSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NzYgYWRkIDYuMzY2NDIxMSAtMTQwODU0OTA4LiAtPiAtMTQwODU0OTAyIEluZXhhY3QgUm91bmRlZAoreGNvbTQ3NiBjb21wYXJlIDYuMzY2NDIxMSAtMTQwODU0OTA4LiAtPiAxCit4ZGl2NDc2IGRpdmlkZSA2LjM2NjQyMTEgLTE0MDg1NDkwOC4gLT4gLTQuNTE5ODQzMjhFLTggSW5leGFjdCBSb3VuZGVkCit4ZHZpNDc2IGRpdmlkZWludCA2LjM2NjQyMTEgLTE0MDg1NDkwOC4gLT4gLTAKK3htdWw0NzYgbXVsdGlwbHkgNi4zNjY0MjExIC0xNDA4NTQ5MDguIC0+IC04OTY3NDE2NTggSW5leGFjdCBSb3VuZGVkCit4cG93NDc2IHBvd2VyIDYuMzY2NDIxMSAtMTQwODU0OTA4IC0+IDcuMjU0MzI4MDNFLTExMzIzMjYwOCBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NzYgcmVtYWluZGVyIDYuMzY2NDIxMSAtMTQwODU0OTA4LiAtPiA2LjM2NjQyMTEKK3hzdWI0NzYgc3VidHJhY3QgNi4zNjY0MjExIC0xNDA4NTQ5MDguIC0+IDE0MDg1NDkxNCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NzcgYWRkIC0xNS43OTE1MjIgMTkwMi4zMDIxMEUrOTA3NDE4NDQgLT4gMS45MDIzMDIxMEUrOTA3NDE4NDcgSW5leGFjdCBSb3VuZGVkCit4Y29tNDc3IGNvbXBhcmUgLTE1Ljc5MTUyMiAxOTAyLjMwMjEwRSs5MDc0MTg0NCAtPiAtMQoreGRpdjQ3NyBkaXZpZGUgLTE1Ljc5MTUyMiAxOTAyLjMwMjEwRSs5MDc0MTg0NCAtPiAtOC4zMDEyNjkyOUUtOTA3NDE4NDcgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDc3IGRpdmlkZWludCAtMTUuNzkxNTIyIDE5MDIuMzAyMTBFKzkwNzQxODQ0IC0+IC0wCit4bXVsNDc3IG11bHRpcGx5IC0xNS43OTE1MjIgMTkwMi4zMDIxMEUrOTA3NDE4NDQgLT4gLTMuMDA0MDI0NTVFKzkwNzQxODQ4IEluZXhhY3QgUm91bmRlZAoreHBvdzQ3NyBwb3dlciAtMTUuNzkxNTIyIDIgLT4gMjQ5LjM3MjE2NyBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NzcgcmVtYWluZGVyIC0xNS43OTE1MjIgMTkwMi4zMDIxMEUrOTA3NDE4NDQgLT4gLTE1Ljc5MTUyMgoreHN1YjQ3NyBzdWJ0cmFjdCAtMTUuNzkxNTIyIDE5MDIuMzAyMTBFKzkwNzQxODQ0IC0+IC0xLjkwMjMwMjEwRSs5MDc0MTg0NyBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0NzggYWRkIDE1MzU2LjE1MDVFKzM3Mzk1MDQyOSAyLjg4MDIwNDAwIC0+IDEuNTM1NjE1MDVFKzM3Mzk1MDQzMyBJbmV4YWN0IFJvdW5kZWQKK3hjb200NzggY29tcGFyZSAxNTM1Ni4xNTA1RSszNzM5NTA0MjkgMi44ODAyMDQwMCAtPiAxCit4ZGl2NDc4IGRpdmlkZSAxNTM1Ni4xNTA1RSszNzM5NTA0MjkgMi44ODAyMDQwMCAtPiA1LjMzMTYxOTA1RSszNzM5NTA0MzIgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDc4IGRpdmlkZWludCAxNTM1Ni4xNTA1RSszNzM5NTA0MjkgMi44ODAyMDQwMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQ3OCBtdWx0aXBseSAxNTM1Ni4xNTA1RSszNzM5NTA0MjkgMi44ODAyMDQwMCAtPiA0LjQyMjg4NDYxRSszNzM5NTA0MzMgSW5leGFjdCBSb3VuZGVkCit4cG93NDc4IHBvd2VyIDE1MzU2LjE1MDVFKzM3Mzk1MDQyOSAzIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAoreHJlbTQ3OCByZW1haW5kZXIgMTUzNTYuMTUwNUUrMzczOTUwNDI5IDIuODgwMjA0MDAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0Nzggc3VidHJhY3QgMTUzNTYuMTUwNUUrMzczOTUwNDI5IDIuODgwMjA0MDAgLT4gMS41MzU2MTUwNUUrMzczOTUwNDMzIEluZXhhY3QgUm91bmRlZAoreGFkZDQ3OSBhZGQgLTMuMTIwMDEzMjZFKzMxODg4NDc2MiA5NTY3LjIxNTk1IC0+IC0zLjEyMDAxMzI2RSszMTg4ODQ3NjIgSW5leGFjdCBSb3VuZGVkCit4Y29tNDc5IGNvbXBhcmUgLTMuMTIwMDEzMjZFKzMxODg4NDc2MiA5NTY3LjIxNTk1IC0+IC0xCit4ZGl2NDc5IGRpdmlkZSAtMy4xMjAwMTMyNkUrMzE4ODg0NzYyIDk1NjcuMjE1OTUgLT4gLTMuMjYxMTUwNjZFKzMxODg4NDc1OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0NzkgZGl2aWRlaW50IC0zLjEyMDAxMzI2RSszMTg4ODQ3NjIgOTU2Ny4yMTU5NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQ3OSBtdWx0aXBseSAtMy4xMjAwMTMyNkUrMzE4ODg0NzYyIDk1NjcuMjE1OTUgLT4gLTIuOTg0OTg0MDZFKzMxODg4NDc2NiBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0NzkgcG93ZXIgLTMuMTIwMDEzMjZFKzMxODg4NDc2MiA5NTY3IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW00NzkgcmVtYWluZGVyIC0zLjEyMDAxMzI2RSszMTg4ODQ3NjIgOTU2Ny4yMTU5NSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQ3OSBzdWJ0cmFjdCAtMy4xMjAwMTMyNkUrMzE4ODg0NzYyIDk1NjcuMjE1OTUgLT4gLTMuMTIwMDEzMjZFKzMxODg4NDc2MiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0ODAgYWRkIDQ5NDM2LjY1MjggNzUxLjkxOTUxNyAtPiA1MDE4OC41NzIzIEluZXhhY3QgUm91bmRlZAoreGNvbTQ4MCBjb21wYXJlIDQ5NDM2LjY1MjggNzUxLjkxOTUxNyAtPiAxCit4ZGl2NDgwIGRpdmlkZSA0OTQzNi42NTI4IDc1MS45MTk1MTcgLT4gNjUuNzQ3MjY2NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0ODAgZGl2aWRlaW50IDQ5NDM2LjY1MjggNzUxLjkxOTUxNyAtPiA2NQoreG11bDQ4MCBtdWx0aXBseSA0OTQzNi42NTI4IDc1MS45MTk1MTcgLT4gMzcxNzIzODQuMSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0ODAgcG93ZXIgNDk0MzYuNjUyOCA3NTIgLT4gOC40MTE4NTcxOEUrMzUyOSBJbmV4YWN0IFJvdW5kZWQKK3hyZW00ODAgcmVtYWluZGVyIDQ5NDM2LjY1MjggNzUxLjkxOTUxNyAtPiA1NjEuODg0MTk1Cit4c3ViNDgwIHN1YnRyYWN0IDQ5NDM2LjY1MjggNzUxLjkxOTUxNyAtPiA0ODY4NC43MzMzIEluZXhhY3QgUm91bmRlZAoreGFkZDQ4MSBhZGQgNTUyLjY2OTQ1MyA4LjM3MjU3NjBFKzE2MjIzNTI2IC0+IDguMzcyNTc2MDBFKzE2MjIzNTI2IEluZXhhY3QgUm91bmRlZAoreGNvbTQ4MSBjb21wYXJlIDU1Mi42Njk0NTMgOC4zNzI1NzYwRSsxNjIyMzUyNiAtPiAtMQoreGRpdjQ4MSBkaXZpZGUgNTUyLjY2OTQ1MyA4LjM3MjU3NjBFKzE2MjIzNTI2IC0+IDYuNjAwOTQ4NzhFLTE2MjIzNTI1IEluZXhhY3QgUm91bmRlZAoreGR2aTQ4MSBkaXZpZGVpbnQgNTUyLjY2OTQ1MyA4LjM3MjU3NjBFKzE2MjIzNTI2IC0+IDAKK3htdWw0ODEgbXVsdGlwbHkgNTUyLjY2OTQ1MyA4LjM3MjU3NjBFKzE2MjIzNTI2IC0+IDQuNjI3MjY3MDBFKzE2MjIzNTI5IEluZXhhY3QgUm91bmRlZAoreHBvdzQ4MSBwb3dlciA1NTIuNjY5NDUzIDggLT4gOC43MDQwOTYzMkUrMjEgSW5leGFjdCBSb3VuZGVkCit4cmVtNDgxIHJlbWFpbmRlciA1NTIuNjY5NDUzIDguMzcyNTc2MEUrMTYyMjM1MjYgLT4gNTUyLjY2OTQ1MworeHN1YjQ4MSBzdWJ0cmFjdCA1NTIuNjY5NDUzIDguMzcyNTc2MEUrMTYyMjM1MjYgLT4gLTguMzcyNTc2MDBFKzE2MjIzNTI2IEluZXhhY3QgUm91bmRlZAoreGFkZDQ4MiBhZGQgLTMyNjYzMDMgNDUzNzQxLjUyMCAtPiAtMjgxMjU2MS40OCBSb3VuZGVkCit4Y29tNDgyIGNvbXBhcmUgLTMyNjYzMDMgNDUzNzQxLjUyMCAtPiAtMQoreGRpdjQ4MiBkaXZpZGUgLTMyNjYzMDMgNDUzNzQxLjUyMCAtPiAtNy4xOTg1OTg0NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0ODIgZGl2aWRlaW50IC0zMjY2MzAzIDQ1Mzc0MS41MjAgLT4gLTcKK3htdWw0ODIgbXVsdGlwbHkgLTMyNjYzMDMgNDUzNzQxLjUyMCAtPiAtMS40ODIwNTcyOUUrMTIgSW5leGFjdCBSb3VuZGVkCit4cG93NDgyIHBvd2VyIC0zMjY2MzAzIDQ1Mzc0MiAtPiAxLjAyNDk3MzE1RSsyOTU1NzAxIEluZXhhY3QgUm91bmRlZAoreHJlbTQ4MiByZW1haW5kZXIgLTMyNjYzMDMgNDUzNzQxLjUyMCAtPiAtOTAxMTIuMzYwCit4c3ViNDgyIHN1YnRyYWN0IC0zMjY2MzAzIDQ1Mzc0MS41MjAgLT4gLTM3MjAwNDQuNTIgUm91bmRlZAoreGFkZDQ4MyBhZGQgMTIzMDI3NTcuNCA1NDI5MjIuNDg3RSs0MTQ0NDMzNTMgLT4gNS40MjkyMjQ4N0UrNDE0NDQzMzU4IEluZXhhY3QgUm91bmRlZAoreGNvbTQ4MyBjb21wYXJlIDEyMzAyNzU3LjQgNTQyOTIyLjQ4N0UrNDE0NDQzMzUzIC0+IC0xCit4ZGl2NDgzIGRpdmlkZSAxMjMwMjc1Ny40IDU0MjkyMi40ODdFKzQxNDQ0MzM1MyAtPiAyLjI2NjAyNDY1RS00MTQ0NDMzNTIgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDgzIGRpdmlkZWludCAxMjMwMjc1Ny40IDU0MjkyMi40ODdFKzQxNDQ0MzM1MyAtPiAwCit4bXVsNDgzIG11bHRpcGx5IDEyMzAyNzU3LjQgNTQyOTIyLjQ4N0UrNDE0NDQzMzUzIC0+IDYuNjc5NDQzNjRFKzQxNDQ0MzM2NSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0ODMgcG93ZXIgMTIzMDI3NTcuNCA1IC0+IDIuODE4NDYyNzZFKzM1IEluZXhhY3QgUm91bmRlZAoreHJlbTQ4MyByZW1haW5kZXIgMTIzMDI3NTcuNCA1NDI5MjIuNDg3RSs0MTQ0NDMzNTMgLT4gMTIzMDI3NTcuNAoreHN1YjQ4MyBzdWJ0cmFjdCAxMjMwMjc1Ny40IDU0MjkyMi40ODdFKzQxNDQ0MzM1MyAtPiAtNS40MjkyMjQ4N0UrNDE0NDQzMzU4IEluZXhhY3QgUm91bmRlZAoreGFkZDQ4NCBhZGQgLTU2NzA3NTcuNzlFLTc4NDc1NDk4NCAxMjgxNDQuNTAzIC0+IDEyODE0NC41MDMgSW5leGFjdCBSb3VuZGVkCit4Y29tNDg0IGNvbXBhcmUgLTU2NzA3NTcuNzlFLTc4NDc1NDk4NCAxMjgxNDQuNTAzIC0+IC0xCit4ZGl2NDg0IGRpdmlkZSAtNTY3MDc1Ny43OUUtNzg0NzU0OTg0IDEyODE0NC41MDMgLT4gLTQuNDI1MjgzNjlFLTc4NDc1NDk4MyBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0ODQgZGl2aWRlaW50IC01NjcwNzU3Ljc5RS03ODQ3NTQ5ODQgMTI4MTQ0LjUwMyAtPiAtMAoreG11bDQ4NCBtdWx0aXBseSAtNTY3MDc1Ny43OUUtNzg0NzU0OTg0IDEyODE0NC41MDMgLT4gLTcuMjY2NzY0MzlFLTc4NDc1NDk3MyBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0ODQgcG93ZXIgLTU2NzA3NTcuNzlFLTc4NDc1NDk4NCAxMjgxNDUgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQ4NCByZW1haW5kZXIgLTU2NzA3NTcuNzlFLTc4NDc1NDk4NCAxMjgxNDQuNTAzIC0+IC01LjY3MDc1Nzc5RS03ODQ3NTQ5NzgKK3hzdWI0ODQgc3VidHJhY3QgLTU2NzA3NTcuNzlFLTc4NDc1NDk4NCAxMjgxNDQuNTAzIC0+IC0xMjgxNDQuNTAzIEluZXhhY3QgUm91bmRlZAoreGFkZDQ4NSBhZGQgMjIuNzcyMTk2OEUrODQyNTMwNjk4IDUyMjMuNzA0NjIgLT4gMi4yNzcyMTk2OEUrODQyNTMwNjk5IEluZXhhY3QgUm91bmRlZAoreGNvbTQ4NSBjb21wYXJlIDIyLjc3MjE5NjhFKzg0MjUzMDY5OCA1MjIzLjcwNDYyIC0+IDEKK3hkaXY0ODUgZGl2aWRlIDIyLjc3MjE5NjhFKzg0MjUzMDY5OCA1MjIzLjcwNDYyIC0+IDQuMzU5Mzk1OTZFKzg0MjUzMDY5NSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0ODUgZGl2aWRlaW50IDIyLjc3MjE5NjhFKzg0MjUzMDY5OCA1MjIzLjcwNDYyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDg1IG11bHRpcGx5IDIyLjc3MjE5NjhFKzg0MjUzMDY5OCA1MjIzLjcwNDYyIC0+IDEuMTg5NTUyMzBFKzg0MjUzMDcwMyBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0ODUgcG93ZXIgMjIuNzcyMTk2OEUrODQyNTMwNjk4IDUyMjQgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtNDg1IHJlbWFpbmRlciAyMi43NzIxOTY4RSs4NDI1MzA2OTggNTIyMy43MDQ2MiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQ4NSBzdWJ0cmFjdCAyMi43NzIxOTY4RSs4NDI1MzA2OTggNTIyMy43MDQ2MiAtPiAyLjI3NzIxOTY4RSs4NDI1MzA2OTkgSW5leGFjdCBSb3VuZGVkCit4YWRkNDg2IGFkZCA4OC41MTU4MTk5RS05ODAxNjQzNTcgMzI1ODQ2MTE2IC0+IDMyNTg0NjExNiBJbmV4YWN0IFJvdW5kZWQKK3hjb200ODYgY29tcGFyZSA4OC41MTU4MTk5RS05ODAxNjQzNTcgMzI1ODQ2MTE2IC0+IC0xCit4ZGl2NDg2IGRpdmlkZSA4OC41MTU4MTk5RS05ODAxNjQzNTcgMzI1ODQ2MTE2IC0+IDIuNzE2NDkxNDhFLTk4MDE2NDM2NCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0ODYgZGl2aWRlaW50IDg4LjUxNTgxOTlFLTk4MDE2NDM1NyAzMjU4NDYxMTYgLT4gMAoreG11bDQ4NiBtdWx0aXBseSA4OC41MTU4MTk5RS05ODAxNjQzNTcgMzI1ODQ2MTE2IC0+IDIuODg0MjUzNjFFLTk4MDE2NDM0NyBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0ODYgcG93ZXIgODguNTE1ODE5OUUtOTgwMTY0MzU3IDMyNTg0NjExNiAtPiAwRS0xMDAwMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3hyZW00ODYgcmVtYWluZGVyIDg4LjUxNTgxOTlFLTk4MDE2NDM1NyAzMjU4NDYxMTYgLT4gOC44NTE1ODE5OUUtOTgwMTY0MzU2Cit4c3ViNDg2IHN1YnRyYWN0IDg4LjUxNTgxOTlFLTk4MDE2NDM1NyAzMjU4NDYxMTYgLT4gLTMyNTg0NjExNiBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0ODcgYWRkIC0yMjg4MS4wNDA4IDUuNjM2NjE1NjIgLT4gLTIyODc1LjQwNDIgSW5leGFjdCBSb3VuZGVkCit4Y29tNDg3IGNvbXBhcmUgLTIyODgxLjA0MDggNS42MzY2MTU2MiAtPiAtMQoreGRpdjQ4NyBkaXZpZGUgLTIyODgxLjA0MDggNS42MzY2MTU2MiAtPiAtNDA1OS4zNTgwMiBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0ODcgZGl2aWRlaW50IC0yMjg4MS4wNDA4IDUuNjM2NjE1NjIgLT4gLTQwNTkKK3htdWw0ODcgbXVsdGlwbHkgLTIyODgxLjA0MDggNS42MzY2MTU2MiAtPiAtMTI4OTcxLjYzMiBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0ODcgcG93ZXIgLTIyODgxLjA0MDggNiAtPiAxLjQzNTAwOTA5RSsyNiBJbmV4YWN0IFJvdW5kZWQKK3hyZW00ODcgcmVtYWluZGVyIC0yMjg4MS4wNDA4IDUuNjM2NjE1NjIgLT4gLTIuMDE3OTk4NDIKK3hzdWI0ODcgc3VidHJhY3QgLTIyODgxLjA0MDggNS42MzY2MTU2MiAtPiAtMjI4ODYuNjc3NCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0ODggYWRkIC03MTU3LjU3NDQ5IC03Ni40NDU1NTE5RS04NTY0NzA0NyAtPiAtNzE1Ny41NzQ0OSBJbmV4YWN0IFJvdW5kZWQKK3hjb200ODggY29tcGFyZSAtNzE1Ny41NzQ0OSAtNzYuNDQ1NTUxOUUtODU2NDcwNDcgLT4gLTEKK3hkaXY0ODggZGl2aWRlIC03MTU3LjU3NDQ5IC03Ni40NDU1NTE5RS04NTY0NzA0NyAtPiA5LjM2Mjk3MDUyRSs4NTY0NzA0OCBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0ODggZGl2aWRlaW50IC03MTU3LjU3NDQ5IC03Ni40NDU1NTE5RS04NTY0NzA0NyAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQ4OCBtdWx0aXBseSAtNzE1Ny41NzQ0OSAtNzYuNDQ1NTUxOUUtODU2NDcwNDcgLT4gNS40NzE2NDczMkUtODU2NDcwNDIgSW5leGFjdCBSb3VuZGVkCit4cG93NDg4IHBvd2VyIC03MTU3LjU3NDQ5IC04IC0+IDEuNDUxNjg3MDBFLTMxIEluZXhhY3QgUm91bmRlZAoreHJlbTQ4OCByZW1haW5kZXIgLTcxNTcuNTc0NDkgLTc2LjQ0NTU1MTlFLTg1NjQ3MDQ3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDg4IHN1YnRyYWN0IC03MTU3LjU3NDQ5IC03Ni40NDU1NTE5RS04NTY0NzA0NyAtPiAtNzE1Ny41NzQ0OSBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0ODkgYWRkIC01MDMxMTMuODAxIC05NzE1MTQ5LjgyRS02MTIxODQ0MjIgLT4gLTUwMzExMy44MDEgSW5leGFjdCBSb3VuZGVkCit4Y29tNDg5IGNvbXBhcmUgLTUwMzExMy44MDEgLTk3MTUxNDkuODJFLTYxMjE4NDQyMiAtPiAtMQoreGRpdjQ4OSBkaXZpZGUgLTUwMzExMy44MDEgLTk3MTUxNDkuODJFLTYxMjE4NDQyMiAtPiA1LjE3ODY1MjAxRSs2MTIxODQ0MjAgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDg5IGRpdmlkZWludCAtNTAzMTEzLjgwMSAtOTcxNTE0OS44MkUtNjEyMTg0NDIyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDg5IG11bHRpcGx5IC01MDMxMTMuODAxIC05NzE1MTQ5LjgyRS02MTIxODQ0MjIgLT4gNC44ODc4MjU5NUUtNjEyMTg0NDEwIEluZXhhY3QgUm91bmRlZAoreHBvdzQ4OSBwb3dlciAtNTAzMTEzLjgwMSAtMTAgLT4gOS42MjM2MDI4N0UtNTggSW5leGFjdCBSb3VuZGVkCit4cmVtNDg5IHJlbWFpbmRlciAtNTAzMTEzLjgwMSAtOTcxNTE0OS44MkUtNjEyMTg0NDIyIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDg5IHN1YnRyYWN0IC01MDMxMTMuODAxIC05NzE1MTQ5LjgyRS02MTIxODQ0MjIgLT4gLTUwMzExMy44MDEgSW5leGFjdCBSb3VuZGVkCit4YWRkNDkwIGFkZCAtMzA2Njk2Mi40MSAtNTUuMzA5Njg3OSAtPiAtMzA2NzAxNy43MiBJbmV4YWN0IFJvdW5kZWQKK3hjb200OTAgY29tcGFyZSAtMzA2Njk2Mi40MSAtNTUuMzA5Njg3OSAtPiAtMQoreGRpdjQ5MCBkaXZpZGUgLTMwNjY5NjIuNDEgLTU1LjMwOTY4NzkgLT4gNTU0NTAuNzI3MSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0OTAgZGl2aWRlaW50IC0zMDY2OTYyLjQxIC01NS4zMDk2ODc5IC0+IDU1NDUwCit4bXVsNDkwIG11bHRpcGx5IC0zMDY2OTYyLjQxIC01NS4zMDk2ODc5IC0+IDE2OTYzMjczNCBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0OTAgcG93ZXIgLTMwNjY5NjIuNDEgLTU1IC0+IC0xLjcwMjI5NjAwRS0zNTcgSW5leGFjdCBSb3VuZGVkCit4cmVtNDkwIHJlbWFpbmRlciAtMzA2Njk2Mi40MSAtNTUuMzA5Njg3OSAtPiAtNDAuMjE1OTQ1MAoreHN1YjQ5MCBzdWJ0cmFjdCAtMzA2Njk2Mi40MSAtNTUuMzA5Njg3OSAtPiAtMzA2NjkwNy4xMCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0OTEgYWRkIC01MzMxMS41NzM4RSsxNTY2MDg5MzYgLTcuNDU4OTA2NjYgLT4gLTUuMzMxMTU3MzhFKzE1NjYwODk0MCBJbmV4YWN0IFJvdW5kZWQKK3hjb200OTEgY29tcGFyZSAtNTMzMTEuNTczOEUrMTU2NjA4OTM2IC03LjQ1ODkwNjY2IC0+IC0xCit4ZGl2NDkxIGRpdmlkZSAtNTMzMTEuNTczOEUrMTU2NjA4OTM2IC03LjQ1ODkwNjY2IC0+IDcuMTQ3MzcxMDlFKzE1NjYwODkzOSBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0OTEgZGl2aWRlaW50IC01MzMxMS41NzM4RSsxNTY2MDg5MzYgLTcuNDU4OTA2NjYgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0OTEgbXVsdGlwbHkgLTUzMzExLjU3MzhFKzE1NjYwODkzNiAtNy40NTg5MDY2NiAtPiAzLjk3NjQ2MDUzRSsxNTY2MDg5NDEgSW5leGFjdCBSb3VuZGVkCit4cG93NDkxIHBvd2VyIC01MzMxMS41NzM4RSsxNTY2MDg5MzYgLTcgLT4gLTBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQ5MSByZW1haW5kZXIgLTUzMzExLjU3MzhFKzE1NjYwODkzNiAtNy40NTg5MDY2NiAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQ5MSBzdWJ0cmFjdCAtNTMzMTEuNTczOEUrMTU2NjA4OTM2IC03LjQ1ODkwNjY2IC0+IC01LjMzMTE1NzM4RSsxNTY2MDg5NDAgSW5leGFjdCBSb3VuZGVkCit4YWRkNDkyIGFkZCA5OTg4OTAwNjguIC05Mi4wNTc4NzkgLT4gOTk4ODg5OTc2IEluZXhhY3QgUm91bmRlZAoreGNvbTQ5MiBjb21wYXJlIDk5ODg5MDA2OC4gLTkyLjA1Nzg3OSAtPiAxCit4ZGl2NDkyIGRpdmlkZSA5OTg4OTAwNjguIC05Mi4wNTc4NzkgLT4gLTEwODUwNjc0LjQgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDkyIGRpdmlkZWludCA5OTg4OTAwNjguIC05Mi4wNTc4NzkgLT4gLTEwODUwNjc0Cit4bXVsNDkyIG11bHRpcGx5IDk5ODg5MDA2OC4gLTkyLjA1Nzg3OSAtPiAtOS4xOTU1NzAxMEUrMTAgSW5leGFjdCBSb3VuZGVkCit4cG93NDkyIHBvd2VyIDk5ODg5MDA2OC4gLTkyIC0+IDEuMTA3NTcyMjVFLTgyOCBJbmV4YWN0IFJvdW5kZWQKK3hyZW00OTIgcmVtYWluZGVyIDk5ODg5MDA2OC4gLTkyLjA1Nzg3OSAtPiAzMy44Mzk1NTQKK3hzdWI0OTIgc3VidHJhY3QgOTk4ODkwMDY4LiAtOTIuMDU3ODc5IC0+IDk5ODg5MDE2MCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0OTMgYWRkIDEyMi40OTU1OTEgLTQwNzgzNjAyOC4gLT4gLTQwNzgzNTkwNiBJbmV4YWN0IFJvdW5kZWQKK3hjb200OTMgY29tcGFyZSAxMjIuNDk1NTkxIC00MDc4MzYwMjguIC0+IDEKK3hkaXY0OTMgZGl2aWRlIDEyMi40OTU1OTEgLTQwNzgzNjAyOC4gLT4gLTMuMDAzNTUwMDJFLTcgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDkzIGRpdmlkZWludCAxMjIuNDk1NTkxIC00MDc4MzYwMjguIC0+IC0wCit4bXVsNDkzIG11bHRpcGx5IDEyMi40OTU1OTEgLTQwNzgzNjAyOC4gLT4gLTQuOTk1ODExNTNFKzEwIEluZXhhY3QgUm91bmRlZAoreHBvdzQ5MyBwb3dlciAxMjIuNDk1NTkxIC00MDc4MzYwMjggLT4gNC44MjQ2Mzc3M0UtODUxNjEwNzU0IEluZXhhY3QgUm91bmRlZAoreHJlbTQ5MyByZW1haW5kZXIgMTIyLjQ5NTU5MSAtNDA3ODM2MDI4LiAtPiAxMjIuNDk1NTkxCit4c3ViNDkzIHN1YnRyYWN0IDEyMi40OTU1OTEgLTQwNzgzNjAyOC4gLT4gNDA3ODM2MTUwIEluZXhhY3QgUm91bmRlZAoreGFkZDQ5NCBhZGQgMTg3MDk4LjQ4OCA2MjIwLjA1NTg0RS0yMzY1NDEyNDkgLT4gMTg3MDk4LjQ4OCBJbmV4YWN0IFJvdW5kZWQKK3hjb200OTQgY29tcGFyZSAxODcwOTguNDg4IDYyMjAuMDU1ODRFLTIzNjU0MTI0OSAtPiAxCit4ZGl2NDk0IGRpdmlkZSAxODcwOTguNDg4IDYyMjAuMDU1ODRFLTIzNjU0MTI0OSAtPiAzLjAwNzk4NzI3RSsyMzY1NDEyNTAgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDk0IGRpdmlkZWludCAxODcwOTguNDg4IDYyMjAuMDU1ODRFLTIzNjU0MTI0OSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQ5NCBtdWx0aXBseSAxODcwOTguNDg4IDYyMjAuMDU1ODRFLTIzNjU0MTI0OSAtPiAxLjE2Mzc2MzA0RS0yMzY1NDEyNDAgSW5leGFjdCBSb3VuZGVkCit4cG93NDk0IHBvd2VyIDE4NzA5OC40ODggNiAtPiA0LjI4OTY0ODExRSszMSBJbmV4YWN0IFJvdW5kZWQKK3hyZW00OTQgcmVtYWluZGVyIDE4NzA5OC40ODggNjIyMC4wNTU4NEUtMjM2NTQxMjQ5IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4c3ViNDk0IHN1YnRyYWN0IDE4NzA5OC40ODggNjIyMC4wNTU4NEUtMjM2NTQxMjQ5IC0+IDE4NzA5OC40ODggSW5leGFjdCBSb3VuZGVkCit4YWRkNDk1IGFkZCA0ODE5ODk5LjIxRSs0MzI5ODI1NTAgLTcyNzQ0MTkxNyAtPiA0LjgxOTg5OTIxRSs0MzI5ODI1NTYgSW5leGFjdCBSb3VuZGVkCit4Y29tNDk1IGNvbXBhcmUgNDgxOTg5OS4yMUUrNDMyOTgyNTUwIC03Mjc0NDE5MTcgLT4gMQoreGRpdjQ5NSBkaXZpZGUgNDgxOTg5OS4yMUUrNDMyOTgyNTUwIC03Mjc0NDE5MTcgLT4gLTYuNjI1ODIwMDFFKzQzMjk4MjU0NyBJbmV4YWN0IFJvdW5kZWQKK3hkdmk0OTUgZGl2aWRlaW50IDQ4MTk4OTkuMjFFKzQzMjk4MjU1MCAtNzI3NDQxOTE3IC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCit4bXVsNDk1IG11bHRpcGx5IDQ4MTk4OTkuMjFFKzQzMjk4MjU1MCAtNzI3NDQxOTE3IC0+IC0zLjUwNjE5NjcyRSs0MzI5ODI1NjUgSW5leGFjdCBSb3VuZGVkCit4cG93NDk1IHBvd2VyIDQ4MTk4OTkuMjFFKzQzMjk4MjU1MCAtNzI3NDQxOTE3IC0+IDBFLTEwMDAwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAoreHJlbTQ5NSByZW1haW5kZXIgNDgxOTg5OS4yMUUrNDMyOTgyNTUwIC03Mjc0NDE5MTcgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3hzdWI0OTUgc3VidHJhY3QgNDgxOTg5OS4yMUUrNDMyOTgyNTUwIC03Mjc0NDE5MTcgLT4gNC44MTk4OTkyMUUrNDMyOTgyNTU2IEluZXhhY3QgUm91bmRlZAoreGFkZDQ5NiBhZGQgNTc3MC4wMTAyMEUrNTA3NDU5NzUyIC00MjA4MzM5LjMzRS0xMjk3NjY2ODAgLT4gNS43NzAwMTAyMEUrNTA3NDU5NzU1IEluZXhhY3QgUm91bmRlZAoreGNvbTQ5NiBjb21wYXJlIDU3NzAuMDEwMjBFKzUwNzQ1OTc1MiAtNDIwODMzOS4zM0UtMTI5NzY2NjgwIC0+IDEKK3hkaXY0OTYgZGl2aWRlIDU3NzAuMDEwMjBFKzUwNzQ1OTc1MiAtNDIwODMzOS4zM0UtMTI5NzY2NjgwIC0+IC0xLjM3MTA4OTU4RSs2MzcyMjY0MjkgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDk2IGRpdmlkZWludCA1NzcwLjAxMDIwRSs1MDc0NTk3NTIgLTQyMDgzMzkuMzNFLTEyOTc2NjY4MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreG11bDQ5NiBtdWx0aXBseSA1NzcwLjAxMDIwRSs1MDc0NTk3NTIgLTQyMDgzMzkuMzNFLTEyOTc2NjY4MCAtPiAtMi40MjgyMTYwOUUrMzc3NjkzMDgyIEluZXhhY3QgUm91bmRlZAoreHBvdzQ5NiBwb3dlciA1NzcwLjAxMDIwRSs1MDc0NTk3NTIgLTQgLT4gMEUtMTAwMDAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCit4cmVtNDk2IHJlbWFpbmRlciA1NzcwLjAxMDIwRSs1MDc0NTk3NTIgLTQyMDgzMzkuMzNFLTEyOTc2NjY4MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQ5NiBzdWJ0cmFjdCA1NzcwLjAxMDIwRSs1MDc0NTk3NTIgLTQyMDgzMzkuMzNFLTEyOTc2NjY4MCAtPiA1Ljc3MDAxMDIwRSs1MDc0NTk3NTUgSW5leGFjdCBSb3VuZGVkCit4YWRkNDk3IGFkZCAtMjg2LjM3MTMyMCA3MTAzMTkxNTIgLT4gNzEwMzE4ODY2IEluZXhhY3QgUm91bmRlZAoreGNvbTQ5NyBjb21wYXJlIC0yODYuMzcxMzIwIDcxMDMxOTE1MiAtPiAtMQoreGRpdjQ5NyBkaXZpZGUgLTI4Ni4zNzEzMjAgNzEwMzE5MTUyIC0+IC00LjAzMTU4NjY0RS03IEluZXhhY3QgUm91bmRlZAoreGR2aTQ5NyBkaXZpZGVpbnQgLTI4Ni4zNzEzMjAgNzEwMzE5MTUyIC0+IC0wCit4bXVsNDk3IG11bHRpcGx5IC0yODYuMzcxMzIwIDcxMDMxOTE1MiAtPiAtMi4wMzQxNTAzM0UrMTEgSW5leGFjdCBSb3VuZGVkCit4cG93NDk3IHBvd2VyIC0yODYuMzcxMzIwIDcxMDMxOTE1MiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3hyZW00OTcgcmVtYWluZGVyIC0yODYuMzcxMzIwIDcxMDMxOTE1MiAtPiAtMjg2LjM3MTMyMAoreHN1YjQ5NyBzdWJ0cmFjdCAtMjg2LjM3MTMyMCA3MTAzMTkxNTIgLT4gLTcxMDMxOTQzOCBJbmV4YWN0IFJvdW5kZWQKK3hhZGQ0OTggYWRkIC03LjI3NDAzNTM2IC00ODE0Njk2NTZFLTgzNTE4MzcwMCAtPiAtNy4yNzQwMzUzNiBJbmV4YWN0IFJvdW5kZWQKK3hjb200OTggY29tcGFyZSAtNy4yNzQwMzUzNiAtNDgxNDY5NjU2RS04MzUxODM3MDAgLT4gLTEKK3hkaXY0OTggZGl2aWRlIC03LjI3NDAzNTM2IC00ODE0Njk2NTZFLTgzNTE4MzcwMCAtPiAxLjUxMDc5ODMwRSs4MzUxODM2OTIgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDk4IGRpdmlkZWludCAtNy4yNzQwMzUzNiAtNDgxNDY5NjU2RS04MzUxODM3MDAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw0OTggbXVsdGlwbHkgLTcuMjc0MDM1MzYgLTQ4MTQ2OTY1NkUtODM1MTgzNzAwIC0+IDMuNTAyMjI3MzBFLTgzNTE4MzY5MSBJbmV4YWN0IFJvdW5kZWQKK3hwb3c0OTggcG93ZXIgLTcuMjc0MDM1MzYgLTUgLT4gLTAuMDAwMDQ5MTA0Njg4NSBJbmV4YWN0IFJvdW5kZWQKK3hyZW00OTggcmVtYWluZGVyIC03LjI3NDAzNTM2IC00ODE0Njk2NTZFLTgzNTE4MzcwMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjQ5OCBzdWJ0cmFjdCAtNy4yNzQwMzUzNiAtNDgxNDY5NjU2RS04MzUxODM3MDAgLT4gLTcuMjc0MDM1MzYgSW5leGFjdCBSb3VuZGVkCit4YWRkNDk5IGFkZCAtNjE1Ny43NDI5MiAtOTQwNzUyODYuMkUrOTI1NTU4NzcgLT4gLTkuNDA3NTI4NjJFKzkyNTU1ODg0IEluZXhhY3QgUm91bmRlZAoreGNvbTQ5OSBjb21wYXJlIC02MTU3Ljc0MjkyIC05NDA3NTI4Ni4yRSs5MjU1NTg3NyAtPiAxCit4ZGl2NDk5IGRpdmlkZSAtNjE1Ny43NDI5MiAtOTQwNzUyODYuMkUrOTI1NTU4NzcgLT4gNi41NDU1NDc5MEUtOTI1NTU4ODIgSW5leGFjdCBSb3VuZGVkCit4ZHZpNDk5IGRpdmlkZWludCAtNjE1Ny43NDI5MiAtOTQwNzUyODYuMkUrOTI1NTU4NzcgLT4gMAoreG11bDQ5OSBtdWx0aXBseSAtNjE1Ny43NDI5MiAtOTQwNzUyODYuMkUrOTI1NTU4NzcgLT4gNS43OTI5MTQyOEUrOTI1NTU4ODggSW5leGFjdCBSb3VuZGVkCit4cG93NDk5IHBvd2VyIC02MTU3Ljc0MjkyIC05IC0+IC03Ljg1NjA4MjE4RS0zNSBJbmV4YWN0IFJvdW5kZWQKK3hyZW00OTkgcmVtYWluZGVyIC02MTU3Ljc0MjkyIC05NDA3NTI4Ni4yRSs5MjU1NTg3NyAtPiAtNjE1Ny43NDI5MgoreHN1YjQ5OSBzdWJ0cmFjdCAtNjE1Ny43NDI5MiAtOTQwNzUyODYuMkUrOTI1NTU4NzcgLT4gOS40MDc1Mjg2MkUrOTI1NTU4ODQgSW5leGFjdCBSb3VuZGVkCit4YWRkNTAwIGFkZCAtNTI1NDQ1MDg3LkUrMjMxNTI5MTY3IDE4ODIyNzQ2MCAtPiAtNS4yNTQ0NTA4N0UrMjMxNTI5MTc1IEluZXhhY3QgUm91bmRlZAoreGNvbTUwMCBjb21wYXJlIC01MjU0NDUwODcuRSsyMzE1MjkxNjcgMTg4MjI3NDYwIC0+IC0xCit4ZGl2NTAwIGRpdmlkZSAtNTI1NDQ1MDg3LkUrMjMxNTI5MTY3IDE4ODIyNzQ2MCAtPiAtMi43OTE1NDMyMUUrMjMxNTI5MTY3IEluZXhhY3QgUm91bmRlZAoreGR2aTUwMCBkaXZpZGVpbnQgLTUyNTQ0NTA4Ny5FKzIzMTUyOTE2NyAxODgyMjc0NjAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3htdWw1MDAgbXVsdGlwbHkgLTUyNTQ0NTA4Ny5FKzIzMTUyOTE2NyAxODgyMjc0NjAgLT4gLTkuODkwMzE5NDFFKzIzMTUyOTE4MyBJbmV4YWN0IFJvdW5kZWQKK3hwb3c1MDAgcG93ZXIgLTUyNTQ0NTA4Ny5FKzIzMTUyOTE2NyAxODgyMjc0NjAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCit4cmVtNTAwIHJlbWFpbmRlciAtNTI1NDQ1MDg3LkUrMjMxNTI5MTY3IDE4ODIyNzQ2MCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQoreHN1YjUwMCBzdWJ0cmFjdCAtNTI1NDQ1MDg3LkUrMjMxNTI5MTY3IDE4ODIyNzQ2MCAtPiAtNS4yNTQ0NTA4N0UrMjMxNTI5MTc1IEluZXhhY3QgUm91bmRlZAorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JlZHVjZS5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yZWR1Y2UuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWM4NWZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yZWR1Y2UuZGVjVGVzdApAQCAtMCwwICsxLDIzNCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSByZWR1Y2UuZGVjVGVzdCAtLSByZW1vdmUgdHJhaWxpbmcgemVyb3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAzLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBbVGhpcyB1c2VkIHRvIGJlIGNhbGxlZCBub3JtYWxpemUuXQorCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CisKK3JlZHgwMDEgcmVkdWNlICcxJyAgICAgIC0+ICcxJworcmVkeDAwMiByZWR1Y2UgJy0xJyAgICAgLT4gJy0xJworcmVkeDAwMyByZWR1Y2UgJzEuMDAnICAgLT4gJzEnCityZWR4MDA0IHJlZHVjZSAnLTEuMDAnICAtPiAnLTEnCityZWR4MDA1IHJlZHVjZSAnMCcgICAgICAtPiAnMCcKK3JlZHgwMDYgcmVkdWNlICcwLjAwJyAgIC0+ICcwJworcmVkeDAwNyByZWR1Y2UgJzAwLjAnICAgLT4gJzAnCityZWR4MDA4IHJlZHVjZSAnMDAuMDAnICAtPiAnMCcKK3JlZHgwMDkgcmVkdWNlICcwMCcgICAgIC0+ICcwJworcmVkeDAxMCByZWR1Y2UgJzBFKzEnICAgLT4gJzAnCityZWR4MDExIHJlZHVjZSAnMEUrNScgICAtPiAnMCcKKworcmVkeDAxMiByZWR1Y2UgJy0yJyAgICAgLT4gJy0yJworcmVkeDAxMyByZWR1Y2UgJzInICAgICAgLT4gJzInCityZWR4MDE0IHJlZHVjZSAnLTIuMDAnICAtPiAnLTInCityZWR4MDE1IHJlZHVjZSAnMi4wMCcgICAtPiAnMicKK3JlZHgwMTYgcmVkdWNlICctMCcgICAgIC0+ICctMCcKK3JlZHgwMTcgcmVkdWNlICctMC4wMCcgIC0+ICctMCcKK3JlZHgwMTggcmVkdWNlICctMDAuMCcgIC0+ICctMCcKK3JlZHgwMTkgcmVkdWNlICctMDAuMDAnIC0+ICctMCcKK3JlZHgwMjAgcmVkdWNlICctMDAnICAgIC0+ICctMCcKK3JlZHgwMjEgcmVkdWNlICctMEUrNScgICAtPiAnLTAnCityZWR4MDIyIHJlZHVjZSAnLTBFKzEnICAtPiAnLTAnCisKK3JlZHgwMzAgcmVkdWNlICcrMC4xJyAgICAgICAgICAgIC0+ICcwLjEnCityZWR4MDMxIHJlZHVjZSAnLTAuMScgICAgICAgICAgICAtPiAnLTAuMScKK3JlZHgwMzIgcmVkdWNlICcrMC4wMScgICAgICAgICAgIC0+ICcwLjAxJworcmVkeDAzMyByZWR1Y2UgJy0wLjAxJyAgICAgICAgICAgLT4gJy0wLjAxJworcmVkeDAzNCByZWR1Y2UgJyswLjAwMScgICAgICAgICAgLT4gJzAuMDAxJworcmVkeDAzNSByZWR1Y2UgJy0wLjAwMScgICAgICAgICAgLT4gJy0wLjAwMScKK3JlZHgwMzYgcmVkdWNlICcrMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScKK3JlZHgwMzcgcmVkdWNlICctMC4wMDAwMDEnICAgICAgIC0+ICctMC4wMDAwMDEnCityZWR4MDM4IHJlZHVjZSAnKzAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInCityZWR4MDM5IHJlZHVjZSAnLTAuMDAwMDAwMDAwMDAxJyAtPiAnLTFFLTEyJworCityZWR4MDQxIHJlZHVjZSAxLjEgICAgICAgIC0+IDEuMQorcmVkeDA0MiByZWR1Y2UgMS4xMCAgICAgICAtPiAxLjEKK3JlZHgwNDMgcmVkdWNlIDEuMTAwICAgICAgLT4gMS4xCityZWR4MDQ0IHJlZHVjZSAxLjExMCAgICAgIC0+IDEuMTEKK3JlZHgwNDUgcmVkdWNlIC0xLjEgICAgICAgLT4gLTEuMQorcmVkeDA0NiByZWR1Y2UgLTEuMTAgICAgICAtPiAtMS4xCityZWR4MDQ3IHJlZHVjZSAtMS4xMDAgICAgIC0+IC0xLjEKK3JlZHgwNDggcmVkdWNlIC0xLjExMCAgICAgLT4gLTEuMTEKK3JlZHgwNDkgcmVkdWNlIDkuOSAgICAgICAgLT4gOS45CityZWR4MDUwIHJlZHVjZSA5LjkwICAgICAgIC0+IDkuOQorcmVkeDA1MSByZWR1Y2UgOS45MDAgICAgICAtPiA5LjkKK3JlZHgwNTIgcmVkdWNlIDkuOTkwICAgICAgLT4gOS45OQorcmVkeDA1MyByZWR1Y2UgLTkuOSAgICAgICAtPiAtOS45CityZWR4MDU0IHJlZHVjZSAtOS45MCAgICAgIC0+IC05LjkKK3JlZHgwNTUgcmVkdWNlIC05LjkwMCAgICAgLT4gLTkuOQorcmVkeDA1NiByZWR1Y2UgLTkuOTkwICAgICAtPiAtOS45OQorCistLSBzb21lIHRyYWlsaW5nIGZyYWN0aW9uYWwgemVyb3Mgd2l0aCB6ZXJvcyBpbiB1bml0cworcmVkeDA2MCByZWR1Y2UgIDEwLjAgICAgICAgIC0+IDFFKzEKK3JlZHgwNjEgcmVkdWNlICAxMC4wMCAgICAgICAtPiAxRSsxCityZWR4MDYyIHJlZHVjZSAgMTAwLjAgICAgICAgLT4gMUUrMgorcmVkeDA2MyByZWR1Y2UgIDEwMC4wMCAgICAgIC0+IDFFKzIKK3JlZHgwNjQgcmVkdWNlICAxLjEwMDBFKzMgICAtPiAxLjFFKzMKK3JlZHgwNjUgcmVkdWNlICAxLjEwMDAwRSszICAtPiAxLjFFKzMKK3JlZHgwNjYgcmVkdWNlIC0xMC4wICAgICAgICAtPiAtMUUrMQorcmVkeDA2NyByZWR1Y2UgLTEwLjAwICAgICAgIC0+IC0xRSsxCityZWR4MDY4IHJlZHVjZSAtMTAwLjAgICAgICAgLT4gLTFFKzIKK3JlZHgwNjkgcmVkdWNlIC0xMDAuMDAgICAgICAtPiAtMUUrMgorcmVkeDA3MCByZWR1Y2UgLTEuMTAwMEUrMyAgIC0+IC0xLjFFKzMKK3JlZHgwNzEgcmVkdWNlIC0xLjEwMDAwRSszICAtPiAtMS4xRSszCisKKy0tIHNvbWUgaW5zaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcyB3aXRoIHBvc2l0aXZlIGV4cG9uZW50CityZWR4MDgwIHJlZHVjZSAgMTBFKzEgICAgICAgLT4gMUUrMgorcmVkeDA4MSByZWR1Y2UgIDEwMEUrMSAgICAgIC0+IDFFKzMKK3JlZHgwODIgcmVkdWNlICAxLjBFKzIgICAgICAtPiAxRSsyCityZWR4MDgzIHJlZHVjZSAgMS4wRSszICAgICAgLT4gMUUrMworcmVkeDA4NCByZWR1Y2UgIDEuMUUrMyAgICAgIC0+IDEuMUUrMworcmVkeDA4NSByZWR1Y2UgIDEuMDBFKzMgICAgIC0+IDFFKzMKK3JlZHgwODYgcmVkdWNlICAxLjEwRSszICAgICAtPiAxLjFFKzMKK3JlZHgwODcgcmVkdWNlIC0xMEUrMSAgICAgICAtPiAtMUUrMgorcmVkeDA4OCByZWR1Y2UgLTEwMEUrMSAgICAgIC0+IC0xRSszCityZWR4MDg5IHJlZHVjZSAtMS4wRSsyICAgICAgLT4gLTFFKzIKK3JlZHgwOTAgcmVkdWNlIC0xLjBFKzMgICAgICAtPiAtMUUrMworcmVkeDA5MSByZWR1Y2UgLTEuMUUrMyAgICAgIC0+IC0xLjFFKzMKK3JlZHgwOTIgcmVkdWNlIC0xLjAwRSszICAgICAtPiAtMUUrMworcmVkeDA5MyByZWR1Y2UgLTEuMTBFKzMgICAgIC0+IC0xLjFFKzMKKworLS0gc29tZSBzaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcywgd2VyZSB3ZSB0byBiZSB0cmltbWluZworcmVkeDEwMCByZWR1Y2UgIDExICAgICAgICAgIC0+IDExCityZWR4MTAxIHJlZHVjZSAgMTAgICAgICAgICAgLT4gMUUrMQorcmVkeDEwMiByZWR1Y2UgIDEwLiAgICAgICAgIC0+IDFFKzEKK3JlZHgxMDMgcmVkdWNlICAxLjFFKzEgICAgICAtPiAxMQorcmVkeDEwNCByZWR1Y2UgIDEuMEUrMSAgICAgIC0+IDFFKzEKK3JlZHgxMDUgcmVkdWNlICAxLjEwRSsyICAgICAtPiAxLjFFKzIKK3JlZHgxMDYgcmVkdWNlICAxLjAwRSsyICAgICAtPiAxRSsyCityZWR4MTA3IHJlZHVjZSAgMS4xMDBFKzMgICAgLT4gMS4xRSszCityZWR4MTA4IHJlZHVjZSAgMS4wMDBFKzMgICAgLT4gMUUrMworcmVkeDEwOSByZWR1Y2UgIDEuMDAwMDAwRSs2IC0+IDFFKzYKK3JlZHgxMTAgcmVkdWNlIC0xMSAgICAgICAgICAtPiAtMTEKK3JlZHgxMTEgcmVkdWNlIC0xMCAgICAgICAgICAtPiAtMUUrMQorcmVkeDExMiByZWR1Y2UgLTEwLiAgICAgICAgIC0+IC0xRSsxCityZWR4MTEzIHJlZHVjZSAtMS4xRSsxICAgICAgLT4gLTExCityZWR4MTE0IHJlZHVjZSAtMS4wRSsxICAgICAgLT4gLTFFKzEKK3JlZHgxMTUgcmVkdWNlIC0xLjEwRSsyICAgICAtPiAtMS4xRSsyCityZWR4MTE2IHJlZHVjZSAtMS4wMEUrMiAgICAgLT4gLTFFKzIKK3JlZHgxMTcgcmVkdWNlIC0xLjEwMEUrMyAgICAtPiAtMS4xRSszCityZWR4MTE4IHJlZHVjZSAtMS4wMDBFKzMgICAgLT4gLTFFKzMKK3JlZHgxMTkgcmVkdWNlIC0xLjAwMDAwRSs1ICAtPiAtMUUrNQorcmVkeDEyMCByZWR1Y2UgLTEuMDAwMDAwRSs2IC0+IC0xRSs2CityZWR4MTIxIHJlZHVjZSAtMTAuMDAwMDBFKzYgLT4gLTFFKzcKK3JlZHgxMjIgcmVkdWNlIC0xMDAuMDAwMEUrNiAtPiAtMUUrOAorcmVkeDEyMyByZWR1Y2UgLTEwMDAuMDAwRSs2IC0+IC0xRSs5CityZWR4MTI0IHJlZHVjZSAtMTAwMDAuMDBFKzYgLT4gLTFFKzEwCityZWR4MTI1IHJlZHVjZSAtMTAwMDAwLjBFKzYgLT4gLTFFKzExCityZWR4MTI2IHJlZHVjZSAtMTAwMDAwMC5FKzYgLT4gLTFFKzEyCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKK3JlZHgxNDAgcmVkdWNlICcyLjEnICAgICAtPiAgJzIuMScKK3JlZHgxNDEgcmVkdWNlICctMi4wJyAgICAtPiAgJy0yJworcmVkeDE0MiByZWR1Y2UgJzEuMjAwJyAgIC0+ICAnMS4yJworcmVkeDE0MyByZWR1Y2UgJy0xMjAnICAgIC0+ICAnLTEuMkUrMicKK3JlZHgxNDQgcmVkdWNlICcxMjAuMDAnICAtPiAgJzEuMkUrMicKK3JlZHgxNDUgcmVkdWNlICcwLjAwJyAgICAtPiAgJzAnCisKKy0tIG92ZXJmbG93IHRlc3RzCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiAzCityZWR4MTYwIHJlZHVjZSA5Ljk5OUUrOTk5OTk5OTk5ICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCityZWR4MTYxIHJlZHVjZSAtOS45OTlFKzk5OTk5OTk5OSAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdworcHJlY2lzaW9uOiAzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcmVkeDIxMCByZWR1Y2UgIDEuMDBFLTk5OSAgICAgICAgLT4gICAxRS05OTkKK3JlZHgyMTEgcmVkdWNlICAwLjFFLTk5OSAgICAgICAgIC0+ICAgMUUtMTAwMCAgIFN1Ym5vcm1hbAorcmVkeDIxMiByZWR1Y2UgIDAuMTBFLTk5OSAgICAgICAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsCityZWR4MjEzIHJlZHVjZSAgMC4xMDBFLTk5OSAgICAgICAtPiAgIDFFLTEwMDAgICBTdWJub3JtYWwgUm91bmRlZAorcmVkeDIxNCByZWR1Y2UgIDAuMDFFLTk5OSAgICAgICAgLT4gICAxRS0xMDAxICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorcmVkeDIxNSByZWR1Y2UgIDAuOTk5RS05OTkgICAgICAgLT4gICAxRS05OTkgICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3JlZHgyMTYgcmVkdWNlICAwLjA5OUUtOTk5ICAgICAgIC0+ICAgMUUtMTAwMCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CityZWR4MjE3IHJlZHVjZSAgMC4wMDlFLTk5OSAgICAgICAtPiAgIDFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworcmVkeDIxOCByZWR1Y2UgIDAuMDAxRS05OTkgICAgICAgLT4gICAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorcmVkeDIxOSByZWR1Y2UgIDAuMDAwOUUtOTk5ICAgICAgLT4gICAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorcmVkeDIyMCByZWR1Y2UgIDAuMDAwMUUtOTk5ICAgICAgLT4gICAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorCityZWR4MjMwIHJlZHVjZSAtMS4wMEUtOTk5ICAgICAgICAtPiAgLTFFLTk5OQorcmVkeDIzMSByZWR1Y2UgLTAuMUUtOTk5ICAgICAgICAgLT4gIC0xRS0xMDAwICAgU3Vibm9ybWFsCityZWR4MjMyIHJlZHVjZSAtMC4xMEUtOTk5ICAgICAgICAtPiAgLTFFLTEwMDAgICBTdWJub3JtYWwKK3JlZHgyMzMgcmVkdWNlIC0wLjEwMEUtOTk5ICAgICAgIC0+ICAtMUUtMTAwMCAgIFN1Ym5vcm1hbCBSb3VuZGVkCityZWR4MjM0IHJlZHVjZSAtMC4wMUUtOTk5ICAgICAgICAtPiAgLTFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCityZWR4MjM1IHJlZHVjZSAtMC45OTlFLTk5OSAgICAgICAtPiAgLTFFLTk5OSAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworcmVkeDIzNiByZWR1Y2UgLTAuMDk5RS05OTkgICAgICAgLT4gIC0xRS0xMDAwICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3JlZHgyMzcgcmVkdWNlIC0wLjAwOUUtOTk5ICAgICAgIC0+ICAtMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CityZWR4MjM4IHJlZHVjZSAtMC4wMDFFLTk5OSAgICAgICAtPiAgLTAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCityZWR4MjM5IHJlZHVjZSAtMC4wMDA5RS05OTkgICAgICAtPiAgLTAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCityZWR4MjQwIHJlZHVjZSAtMC4wMDAxRS05OTkgICAgICAtPiAgLTAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKKy0tIG1vcmUgcmVzaGFwaW5nCitwcmVjaXNpb246IDkKK3JlZHgyNjAgcmVkdWNlICc1NjI2MEUtMTAnICAgLT4gJzAuMDAwMDA1NjI2JworcmVkeDI2MSByZWR1Y2UgJzU2MjYwRS01JyAgICAtPiAnMC41NjI2JworcmVkeDI2MiByZWR1Y2UgJzU2MjYwRS0yJyAgICAtPiAnNTYyLjYnCityZWR4MjYzIHJlZHVjZSAnNTYyNjBFLTEnICAgIC0+ICc1NjI2JworcmVkeDI2NSByZWR1Y2UgJzU2MjYwRS0wJyAgICAtPiAnNS42MjZFKzQnCityZWR4MjY2IHJlZHVjZSAnNTYyNjBFKzAnICAgIC0+ICc1LjYyNkUrNCcKK3JlZHgyNjcgcmVkdWNlICc1NjI2MEUrMScgICAgLT4gJzUuNjI2RSs1JworcmVkeDI2OCByZWR1Y2UgJzU2MjYwRSsyJyAgICAtPiAnNS42MjZFKzYnCityZWR4MjY5IHJlZHVjZSAnNTYyNjBFKzMnICAgIC0+ICc1LjYyNkUrNycKK3JlZHgyNzAgcmVkdWNlICc1NjI2MEUrNCcgICAgLT4gJzUuNjI2RSs4JworcmVkeDI3MSByZWR1Y2UgJzU2MjYwRSs1JyAgICAtPiAnNS42MjZFKzknCityZWR4MjcyIHJlZHVjZSAnNTYyNjBFKzYnICAgIC0+ICc1LjYyNkUrMTAnCityZWR4MjgwIHJlZHVjZSAnLTU2MjYwRS0xMCcgIC0+ICctMC4wMDAwMDU2MjYnCityZWR4MjgxIHJlZHVjZSAnLTU2MjYwRS01JyAgIC0+ICctMC41NjI2JworcmVkeDI4MiByZWR1Y2UgJy01NjI2MEUtMicgICAtPiAnLTU2Mi42JworcmVkeDI4MyByZWR1Y2UgJy01NjI2MEUtMScgICAtPiAnLTU2MjYnCityZWR4Mjg1IHJlZHVjZSAnLTU2MjYwRS0wJyAgIC0+ICctNS42MjZFKzQnCityZWR4Mjg2IHJlZHVjZSAnLTU2MjYwRSswJyAgIC0+ICctNS42MjZFKzQnCityZWR4Mjg3IHJlZHVjZSAnLTU2MjYwRSsxJyAgIC0+ICctNS42MjZFKzUnCityZWR4Mjg4IHJlZHVjZSAnLTU2MjYwRSsyJyAgIC0+ICctNS42MjZFKzYnCityZWR4Mjg5IHJlZHVjZSAnLTU2MjYwRSszJyAgIC0+ICctNS42MjZFKzcnCityZWR4MjkwIHJlZHVjZSAnLTU2MjYwRSs0JyAgIC0+ICctNS42MjZFKzgnCityZWR4MjkxIHJlZHVjZSAnLTU2MjYwRSs1JyAgIC0+ICctNS42MjZFKzknCityZWR4MjkyIHJlZHVjZSAnLTU2MjYwRSs2JyAgIC0+ICctNS42MjZFKzEwJworCistLSBGTCB0ZXN0CitwcmVjaXNpb246IDQwCityZWR4Mjk1IHJlZHVjZSA5ODkyMzQ1NjczLjAxMjM0NTY3ODAwMDAwMDAwMDAgLT4gOTg5MjM0NTY3My4wMTIzNDU2NzgKKworLS0gc3BlY2lhbHMKK3JlZHg4MjAgcmVkdWNlICdJbmYnICAgIC0+ICdJbmZpbml0eScKK3JlZHg4MjEgcmVkdWNlICctSW5mJyAgIC0+ICctSW5maW5pdHknCityZWR4ODIyIHJlZHVjZSAgIE5hTiAgICAtPiAgTmFOCityZWR4ODIzIHJlZHVjZSAgc05hTiAgICAtPiAgTmFOICAgIEludmFsaWRfb3BlcmF0aW9uCityZWR4ODI0IHJlZHVjZSAgIE5hTjEwMSAtPiAgTmFOMTAxCityZWR4ODI1IHJlZHVjZSAgc05hTjAxMCAtPiAgTmFOMTAgIEludmFsaWRfb3BlcmF0aW9uCityZWR4ODI3IHJlZHVjZSAgLU5hTiAgICAtPiAtTmFOCityZWR4ODI4IHJlZHVjZSAtc05hTiAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uCityZWR4ODI5IHJlZHVjZSAgLU5hTjEwMSAtPiAtTmFOMTAxCityZWR4ODMwIHJlZHVjZSAtc05hTjAxMCAtPiAtTmFOMTAgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHBheWxvYWQgZGVjYXBpdGF0ZQorcHJlY2lzaW9uOiA1CityZWR4NjIxMDAgcmVkdWNlICBzTmFOMTIzNDU2Nzg5MCAtPiBOYU42Nzg5MCAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gTnVsbCB0ZXN0CityZWR4OTAwIHJlZHVjZSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcmVtYWluZGVyLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JlbWFpbmRlci5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMTA2MWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JlbWFpbmRlci5kZWNUZXN0CkBAIC0wLDAgKzEsNjQwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHJlbWFpbmRlci5kZWNUZXN0IC0tIGRlY2ltYWwgcmVtYWluZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworLS0gc2FuaXR5IGNoZWNrcyAoYXMgYmFzZSwgYWJvdmUpCityZW14MDAxIHJlbWFpbmRlciAgMSAgICAgMSAgICAtPiAgMAorcmVteDAwMiByZW1haW5kZXIgIDIgICAgIDEgICAgLT4gIDAKK3JlbXgwMDMgcmVtYWluZGVyICAxICAgICAyICAgIC0+ICAxCityZW14MDA0IHJlbWFpbmRlciAgMiAgICAgMiAgICAtPiAgMAorcmVteDAwNSByZW1haW5kZXIgIDAgICAgIDEgICAgLT4gIDAKK3JlbXgwMDYgcmVtYWluZGVyICAwICAgICAyICAgIC0+ICAwCityZW14MDA3IHJlbWFpbmRlciAgMSAgICAgMyAgICAtPiAgMQorcmVteDAwOCByZW1haW5kZXIgIDIgICAgIDMgICAgLT4gIDIKK3JlbXgwMDkgcmVtYWluZGVyICAzICAgICAzICAgIC0+ICAwCisKK3JlbXgwMTAgcmVtYWluZGVyICAyLjQgICAxICAgIC0+ICAwLjQKK3JlbXgwMTEgcmVtYWluZGVyICAyLjQgICAtMSAgIC0+ICAwLjQKK3JlbXgwMTIgcmVtYWluZGVyICAtMi40ICAxICAgIC0+ICAtMC40CityZW14MDEzIHJlbWFpbmRlciAgLTIuNCAgLTEgICAtPiAgLTAuNAorcmVteDAxNCByZW1haW5kZXIgIDIuNDAgIDEgICAgLT4gIDAuNDAKK3JlbXgwMTUgcmVtYWluZGVyICAyLjQwMCAxICAgIC0+ICAwLjQwMAorcmVteDAxNiByZW1haW5kZXIgIDIuNCAgIDIgICAgLT4gIDAuNAorcmVteDAxNyByZW1haW5kZXIgIDIuNDAwIDIgICAgLT4gIDAuNDAwCityZW14MDE4IHJlbWFpbmRlciAgMi4gICAgMiAgICAtPiAgMAorcmVteDAxOSByZW1haW5kZXIgIDIwICAgIDIwICAgLT4gIDAKKworcmVteDAyMCByZW1haW5kZXIgIDE4NyAgIDE4NyAgICAtPiAgMAorcmVteDAyMSByZW1haW5kZXIgIDUgICAgIDIgICAgICAtPiAgMQorcmVteDAyMiByZW1haW5kZXIgIDUgICAgIDIuMCAgICAtPiAgMS4wCityZW14MDIzIHJlbWFpbmRlciAgNSAgICAgMi4wMDAgIC0+ICAxLjAwMAorcmVteDAyNCByZW1haW5kZXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDAKK3JlbXgwMjUgcmVtYWluZGVyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCisKK3JlbXgwMzAgcmVtYWluZGVyICAxICAgICAyICAgICAgLT4gIDEKK3JlbXgwMzEgcmVtYWluZGVyICAxICAgICA0ICAgICAgLT4gIDEKK3JlbXgwMzIgcmVtYWluZGVyICAxICAgICA4ICAgICAgLT4gIDEKKworcmVteDAzMyByZW1haW5kZXIgIDEgICAgIDE2ICAgICAtPiAgMQorcmVteDAzNCByZW1haW5kZXIgIDEgICAgIDMyICAgICAtPiAgMQorcmVteDAzNSByZW1haW5kZXIgIDEgICAgIDY0ICAgICAtPiAgMQorcmVteDA0MCByZW1haW5kZXIgIDEgICAgLTIgICAgICAtPiAgMQorcmVteDA0MSByZW1haW5kZXIgIDEgICAgLTQgICAgICAtPiAgMQorcmVteDA0MiByZW1haW5kZXIgIDEgICAgLTggICAgICAtPiAgMQorcmVteDA0MyByZW1haW5kZXIgIDEgICAgLTE2ICAgICAtPiAgMQorcmVteDA0NCByZW1haW5kZXIgIDEgICAgLTMyICAgICAtPiAgMQorcmVteDA0NSByZW1haW5kZXIgIDEgICAgLTY0ICAgICAtPiAgMQorcmVteDA1MCByZW1haW5kZXIgLTEgICAgIDIgICAgICAtPiAgLTEKK3JlbXgwNTEgcmVtYWluZGVyIC0xICAgICA0ICAgICAgLT4gIC0xCityZW14MDUyIHJlbWFpbmRlciAtMSAgICAgOCAgICAgIC0+ICAtMQorcmVteDA1MyByZW1haW5kZXIgLTEgICAgIDE2ICAgICAtPiAgLTEKK3JlbXgwNTQgcmVtYWluZGVyIC0xICAgICAzMiAgICAgLT4gIC0xCityZW14MDU1IHJlbWFpbmRlciAtMSAgICAgNjQgICAgIC0+ICAtMQorcmVteDA2MCByZW1haW5kZXIgLTEgICAgLTIgICAgICAtPiAgLTEKK3JlbXgwNjEgcmVtYWluZGVyIC0xICAgIC00ICAgICAgLT4gIC0xCityZW14MDYyIHJlbWFpbmRlciAtMSAgICAtOCAgICAgIC0+ICAtMQorcmVteDA2MyByZW1haW5kZXIgLTEgICAgLTE2ICAgICAtPiAgLTEKK3JlbXgwNjQgcmVtYWluZGVyIC0xICAgIC0zMiAgICAgLT4gIC0xCityZW14MDY1IHJlbWFpbmRlciAtMSAgICAtNjQgICAgIC0+ICAtMQorCityZW14MDY2IHJlbWFpbmRlciAgOTk5OTk5OTk5ICAgICAxICAtPiAwCityZW14MDY3IHJlbWFpbmRlciAgOTk5OTk5OTk5LjQgICAxICAtPiAwLjQKK3JlbXgwNjggcmVtYWluZGVyICA5OTk5OTk5OTkuNSAgIDEgIC0+IDAuNQorcmVteDA2OSByZW1haW5kZXIgIDk5OTk5OTk5OS45ICAgMSAgLT4gMC45CityZW14MDcwIHJlbWFpbmRlciAgOTk5OTk5OTk5Ljk5OSAxICAtPiAwLjk5OQorcHJlY2lzaW9uOiA2CityZW14MDcxIHJlbWFpbmRlciAgOTk5OTk5OTk5ICAgICAxICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcmVteDA3MiByZW1haW5kZXIgIDk5OTk5OTk5ICAgICAgMSAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JlbXgwNzMgcmVtYWluZGVyICA5OTk5OTk5ICAgICAgIDEgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14MDc0IHJlbWFpbmRlciAgOTk5OTk5ICAgICAgICAxICAtPiAwCityZW14MDc1IHJlbWFpbmRlciAgOTk5OTkgICAgICAgICAxICAtPiAwCityZW14MDc2IHJlbWFpbmRlciAgOTk5OSAgICAgICAgICAxICAtPiAwCityZW14MDc3IHJlbWFpbmRlciAgOTk5ICAgICAgICAgICAxICAtPiAwCityZW14MDc4IHJlbWFpbmRlciAgOTkgICAgICAgICAgICAxICAtPiAwCityZW14MDc5IHJlbWFpbmRlciAgOSAgICAgICAgICAgICAxICAtPiAwCisKK3ByZWNpc2lvbjogOQorcmVteDA4MCByZW1haW5kZXIgIDAuICAgICAgICAgICAgMSAgLT4gMAorcmVteDA4MSByZW1haW5kZXIgIC4wICAgICAgICAgICAgMSAgLT4gMC4wCityZW14MDgyIHJlbWFpbmRlciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwCityZW14MDgzIHJlbWFpbmRlciAgMC4wMEUrOSAgICAgICAxICAtPiAwCityZW14MDg0IHJlbWFpbmRlciAgMC4wMEUrMyAgICAgICAxICAtPiAwCityZW14MDg1IHJlbWFpbmRlciAgMC4wMEUrMiAgICAgICAxICAtPiAwCityZW14MDg2IHJlbWFpbmRlciAgMC4wMEUrMSAgICAgICAxICAtPiAwLjAKK3JlbXgwODcgcmVtYWluZGVyICAwLjAwRSswICAgICAgIDEgIC0+IDAuMDAKK3JlbXgwODggcmVtYWluZGVyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDAKK3JlbXgwODkgcmVtYWluZGVyICAwLjAwRS0xICAgICAgIDEgIC0+IDAuMDAwCityZW14MDkwIHJlbWFpbmRlciAgMC4wMEUtMiAgICAgICAxICAtPiAwLjAwMDAKK3JlbXgwOTEgcmVtYWluZGVyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDAKK3JlbXgwOTIgcmVtYWluZGVyICAwLjAwRS00ICAgICAgIDEgIC0+IDAuMDAwMDAwCityZW14MDkzIHJlbWFpbmRlciAgMC4wMEUtNSAgICAgICAxICAtPiAwRS03CityZW14MDk0IHJlbWFpbmRlciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04CityZW14MDk1IHJlbWFpbmRlciAgMC4wMDAwRS01MCAgICAxICAtPiAwRS01NAorCistLSBWYXJpb3VzIGZsYXZvdXJzIG9mIHJlbWFpbmRlciBieSAwCitwcmVjaXNpb246IDkKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CityZW14MTAxIHJlbWFpbmRlciAgMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorcmVteDEwMiByZW1haW5kZXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK3JlbXgxMDMgcmVtYWluZGVyIC0wICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCityZW14MTA0IHJlbWFpbmRlciAtMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorcmVteDEwNSByZW1haW5kZXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK3JlbXgxMDYgcmVtYWluZGVyICAwLjAwMCAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCistLSBbU29tZSB0aGluayB0aGlzIG5leHQgZ3JvdXAgc2hvdWxkIGJlIERpdmlzaW9uX2J5X3plcm8gZXhjZXB0aW9uLCBidXQKKy0tIElFRUUgODU0IGlzIGV4cGxpY2l0IHRoYXQgaXQgaXMgSW52YWxpZCBvcGVyYXRpb24gLi4gZm9yCistLSByZW1haW5kZXItbmVhciwgYW55d2F5XQorcmVteDEwNyByZW1haW5kZXIgIDAuMDAwMSAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDEwOCByZW1haW5kZXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDEwOSByZW1haW5kZXIgIDAuMSAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDExMCByZW1haW5kZXIgIDEgICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDExMSByZW1haW5kZXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDExMiByZW1haW5kZXIgMTAgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDExMyByZW1haW5kZXIgMUUrMTAwICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDExNCByZW1haW5kZXIgMUUrMTAwMCAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDExNSByZW1haW5kZXIgIDAuMDAwMSAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDExNiByZW1haW5kZXIgIDAuMDEgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDExOSByZW1haW5kZXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDEyMCByZW1haW5kZXIgIDEgICAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDEyMSByZW1haW5kZXIgIDEgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDEyMiByZW1haW5kZXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDEyMyByZW1haW5kZXIgMUUrMTAwICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDEyNCByZW1haW5kZXIgMUUrMTAwMCAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYW5kIHplcm9zIG9uIGxlZnQKK3JlbXgxMzAgcmVtYWluZGVyICAwICAgICAgMSAgIC0+ICAwCityZW14MTMxIHJlbWFpbmRlciAgMCAgICAgLTEgICAtPiAgMAorcmVteDEzMiByZW1haW5kZXIgIDAuMCAgICAxICAgLT4gIDAuMAorcmVteDEzMyByZW1haW5kZXIgIDAuMCAgIC0xICAgLT4gIDAuMAorcmVteDEzNCByZW1haW5kZXIgLTAgICAgICAxICAgLT4gLTAKK3JlbXgxMzUgcmVtYWluZGVyIC0wICAgICAtMSAgIC0+IC0wCityZW14MTM2IHJlbWFpbmRlciAtMC4wICAgIDEgICAtPiAtMC4wCityZW14MTM3IHJlbWFpbmRlciAtMC4wICAgLTEgICAtPiAtMC4wCisKKy0tIDAuNWVycworcmVteDE0MyByZW1haW5kZXIgICAwLjUgIDIgICAgIC0+ICAwLjUKK3JlbXgxNDQgcmVtYWluZGVyICAgMC41ICAyLjEgICAtPiAgMC41CityZW14MTQ1IHJlbWFpbmRlciAgIDAuNSAgMi4wMSAgLT4gIDAuNTAKK3JlbXgxNDYgcmVtYWluZGVyICAgMC41ICAyLjAwMSAtPiAgMC41MDAKK3JlbXgxNDcgcmVtYWluZGVyICAgMC41MCAyICAgICAtPiAgMC41MAorcmVteDE0OCByZW1haW5kZXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwCityZW14MTQ5IHJlbWFpbmRlciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwCisKKy0tIHN0ZWFkaWVzCityZW14MTUwIHJlbWFpbmRlciAgMSAgMSAgIC0+IDAKK3JlbXgxNTEgcmVtYWluZGVyICAxICAyICAgLT4gMQorcmVteDE1MiByZW1haW5kZXIgIDEgIDMgICAtPiAxCityZW14MTUzIHJlbWFpbmRlciAgMSAgNCAgIC0+IDEKK3JlbXgxNTQgcmVtYWluZGVyICAxICA1ICAgLT4gMQorcmVteDE1NSByZW1haW5kZXIgIDEgIDYgICAtPiAxCityZW14MTU2IHJlbWFpbmRlciAgMSAgNyAgIC0+IDEKK3JlbXgxNTcgcmVtYWluZGVyICAxICA4ICAgLT4gMQorcmVteDE1OCByZW1haW5kZXIgIDEgIDkgICAtPiAxCityZW14MTU5IHJlbWFpbmRlciAgMSAgMTAgIC0+IDEKK3JlbXgxNjAgcmVtYWluZGVyICAxICAxICAgLT4gMAorcmVteDE2MSByZW1haW5kZXIgIDIgIDEgICAtPiAwCityZW14MTYyIHJlbWFpbmRlciAgMyAgMSAgIC0+IDAKK3JlbXgxNjMgcmVtYWluZGVyICA0ICAxICAgLT4gMAorcmVteDE2NCByZW1haW5kZXIgIDUgIDEgICAtPiAwCityZW14MTY1IHJlbWFpbmRlciAgNiAgMSAgIC0+IDAKK3JlbXgxNjYgcmVtYWluZGVyICA3ICAxICAgLT4gMAorcmVteDE2NyByZW1haW5kZXIgIDggIDEgICAtPiAwCityZW14MTY4IHJlbWFpbmRlciAgOSAgMSAgIC0+IDAKK3JlbXgxNjkgcmVtYWluZGVyICAxMCAxICAgLT4gMAorCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyTmVhcgorcmVteDE3MSByZW1haW5kZXIgICAwLjQgIDEuMDIwIC0+ICAwLjQwMAorcmVteDE3MiByZW1haW5kZXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMAorcmVteDE3MyByZW1haW5kZXIgICAwLjUxIDEuMDIwIC0+ICAwLjUxMAorcmVteDE3NCByZW1haW5kZXIgICAwLjUyIDEuMDIwIC0+ICAwLjUyMAorcmVteDE3NSByZW1haW5kZXIgICAwLjYgIDEuMDIwIC0+ICAwLjYwMAorCisKKy0tIE1vcmUgZmxhdm91cnMgb2YgcmVtYWluZGVyIGJ5IDAKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CityZW14MjAxIHJlbWFpbmRlciAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCityZW14MjAyIHJlbWFpbmRlciAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCityZW14MjAzIHJlbWFpbmRlciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCityZW14MjA0IHJlbWFpbmRlciAgMC4wMDAxIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXgyMDUgcmVtYWluZGVyICAwLjAxICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDIwNiByZW1haW5kZXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MjA3IHJlbWFpbmRlciAgMSAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXgyMDggcmVtYWluZGVyICAxICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDIwOSByZW1haW5kZXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MjEwIHJlbWFpbmRlciAxRSsxMDAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXgyMTEgcmVtYWluZGVyIDFFKzEwMDAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyTmVhcgorcmVteDIzMSByZW1haW5kZXIgIC0wLjQgIDEuMDIwIC0+IC0wLjQwMAorcmVteDIzMiByZW1haW5kZXIgIC0wLjUwIDEuMDIwIC0+IC0wLjUwMAorcmVteDIzMyByZW1haW5kZXIgIC0wLjUxIDEuMDIwIC0+IC0wLjUxMAorcmVteDIzNCByZW1haW5kZXIgIC0wLjUyIDEuMDIwIC0+IC0wLjUyMAorcmVteDIzNSByZW1haW5kZXIgIC0wLjYgIDEuMDIwIC0+IC0wLjYwMAorCistLSBoaWdoIFhzCityZW14MjQwIHJlbWFpbmRlciAgMUUrMiAgMS4wMCAgLT4gIDAuMDAKKworCistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CityZW14MjcwIHJlbWFpbmRlciAxIDFlOTk5OTk5OTk5ICAgIC0+IDEKK3JlbXgyNzEgcmVtYWluZGVyIDEgMC45ZTk5OTk5OTk5OSAgLT4gMQorcmVteDI3MiByZW1haW5kZXIgMSAwLjk5ZTk5OTk5OTk5OSAtPiAxCityZW14MjczIHJlbWFpbmRlciAxIDAuOTk5OTk5OTk5ZTk5OTk5OTk5OSAtPiAxCityZW14Mjc0IHJlbWFpbmRlciA5ZTk5OTk5OTk5OSAgICAgICAgICAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14Mjc1IHJlbWFpbmRlciA5LjllOTk5OTk5OTk5ICAgICAgICAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14Mjc2IHJlbWFpbmRlciA5Ljk5ZTk5OTk5OTk5OSAgICAgICAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14Mjc3IHJlbWFpbmRlciA5Ljk5OTk5OTk5ZTk5OTk5OTk5OSAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKK3JlbXgyODAgcmVtYWluZGVyIDAuMSA5ZS05OTk5OTk5OTkgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JlbXgyODEgcmVtYWluZGVyIDAuMSA5OWUtOTk5OTk5OTk5ICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JlbXgyODIgcmVtYWluZGVyIDAuMSA5OTllLTk5OTk5OTk5OSAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworcmVteDI4MyByZW1haW5kZXIgMC4xIDllLTk5OTk5OTk5OCAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcmVteDI4NCByZW1haW5kZXIgMC4xIDk5ZS05OTk5OTk5OTggICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcmVteDI4NSByZW1haW5kZXIgMC4xIDk5OWUtOTk5OTk5OTk4ICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcmVteDI4NiByZW1haW5kZXIgMC4xIDk5OWUtOTk5OTk5OTk3ICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcmVteDI4NyByZW1haW5kZXIgMC4xIDk5OTllLTk5OTk5OTk5NyAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcmVteDI4OCByZW1haW5kZXIgMC4xIDk5OTk5ZS05OTk5OTk5OTcgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCistLSByZW14M3h4IGFyZSBmcm9tIERpYWdCaWdEZWNpbWFsCityZW14MzAxIHJlbWFpbmRlciAgIDEgICAgMyAgICAgLT4gIDEKK3JlbXgzMDIgcmVtYWluZGVyICAgNSAgICA1ICAgICAtPiAgMAorcmVteDMwMyByZW1haW5kZXIgICAxMyAgIDEwICAgIC0+ICAzCityZW14MzA0IHJlbWFpbmRlciAgIDEzICAgNTAgICAgLT4gIDEzCityZW14MzA1IHJlbWFpbmRlciAgIDEzICAgMTAwICAgLT4gIDEzCityZW14MzA2IHJlbWFpbmRlciAgIDEzICAgMTAwMCAgLT4gIDEzCityZW14MzA3IHJlbWFpbmRlciAgIC4xMyAgICAxICAgLT4gIDAuMTMKK3JlbXgzMDggcmVtYWluZGVyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMKK3JlbXgzMDkgcmVtYWluZGVyICAgMC4xMDMzIDEgICAtPiAgMC4xMDMzCityZW14MzEwIHJlbWFpbmRlciAgIDEuMDMzICAxICAgLT4gIDAuMDMzCityZW14MzExIHJlbWFpbmRlciAgIDEwLjMzICAxICAgLT4gIDAuMzMKK3JlbXgzMTIgcmVtYWluZGVyICAgMTAuMzMgMTAgICAtPiAgMC4zMworcmVteDMxMyByZW1haW5kZXIgICAxMDMuMyAgMSAgIC0+ICAwLjMKK3JlbXgzMTQgcmVtYWluZGVyICAgMTMzICAgMTAgICAtPiAgMworcmVteDMxNSByZW1haW5kZXIgICAxMDMzICAxMCAgIC0+ICAzCityZW14MzE2IHJlbWFpbmRlciAgIDEwMzMgIDUwICAgLT4gIDMzCityZW14MzE3IHJlbWFpbmRlciAgIDEwMS4wICAzICAgLT4gIDIuMAorcmVteDMxOCByZW1haW5kZXIgICAxMDIuMCAgMyAgIC0+ICAwLjAKK3JlbXgzMTkgcmVtYWluZGVyICAgMTAzLjAgIDMgICAtPiAgMS4wCityZW14MzIwIHJlbWFpbmRlciAgIDIuNDAgICAxICAgLT4gIDAuNDAKK3JlbXgzMjEgcmVtYWluZGVyICAgMi40MDAgIDEgICAtPiAgMC40MDAKK3JlbXgzMjIgcmVtYWluZGVyICAgMi40ICAgIDEgICAtPiAgMC40CityZW14MzIzIHJlbWFpbmRlciAgIDIuNCAgICAyICAgLT4gIDAuNAorcmVteDMyNCByZW1haW5kZXIgICAyLjQwMCAgMiAgIC0+ICAwLjQwMAorcmVteDMyNSByZW1haW5kZXIgICAxICAgMC4zICAgIC0+ICAwLjEKK3JlbXgzMjYgcmVtYWluZGVyICAgMSAgIDAuMzAgICAtPiAgMC4xMAorcmVteDMyNyByZW1haW5kZXIgICAxICAgMC4zMDAgIC0+ICAwLjEwMAorcmVteDMyOCByZW1haW5kZXIgICAxICAgMC4zMDAwIC0+ICAwLjEwMDAKK3JlbXgzMjkgcmVtYWluZGVyICAgMS4wICAgIDAuMyAtPiAgMC4xCityZW14MzMwIHJlbWFpbmRlciAgIDEuMDAgICAwLjMgLT4gIDAuMTAKK3JlbXgzMzEgcmVtYWluZGVyICAgMS4wMDAgIDAuMyAtPiAgMC4xMDAKK3JlbXgzMzIgcmVtYWluZGVyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwCityZW14MzMzIHJlbWFpbmRlciAgIDAuNSAgMiAgICAgLT4gIDAuNQorcmVteDMzNCByZW1haW5kZXIgICAwLjUgIDIuMSAgIC0+ICAwLjUKK3JlbXgzMzUgcmVtYWluZGVyICAgMC41ICAyLjAxICAtPiAgMC41MAorcmVteDMzNiByZW1haW5kZXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAorcmVteDMzNyByZW1haW5kZXIgICAwLjUwIDIgICAgIC0+ICAwLjUwCityZW14MzM4IHJlbWFpbmRlciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK3JlbXgzMzkgcmVtYWluZGVyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKKworcmVteDM0MCByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDEgICAgLT4gIDAuNTAwMDAwMAorcmVteDM0MSByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwCityZW14MzQyIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMAorcmVteDM0MyByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwICBSb3VuZGVkCityZW14MzQ0IHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwICBSb3VuZGVkCityZW14MzQ1IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OSAgICAtPiAgMUUtNworcmVteDM0NiByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5ICAgIC0+ICAxRS04CityZW14MzQ3IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5ICAgIC0+ICAxRS05CityZW14MzQ4IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5OSAgICAtPiAgMUUtMTAKK3JlbXgzNDkgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5OSAgICAtPiAgMUUtMTEKK3JlbXgzNTAgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5OTkgICAgLT4gIDFFLTEyCisKK3JlbXgzNTEgcmVtYWluZGVyICAgMC4wMyAgNyAgLT4gIDAuMDMKK3JlbXgzNTIgcmVtYWluZGVyICAgNSAgIDIgICAgLT4gIDEKK3JlbXgzNTMgcmVtYWluZGVyICAgNC4xICAgMiAgICAtPiAgMC4xCityZW14MzU0IHJlbWFpbmRlciAgIDQuMDEgICAyICAgIC0+ICAwLjAxCityZW14MzU1IHJlbWFpbmRlciAgIDQuMDAxICAgMiAgICAtPiAgMC4wMDEKK3JlbXgzNTYgcmVtYWluZGVyICAgNC4wMDAxICAgMiAgICAtPiAgMC4wMDAxCityZW14MzU3IHJlbWFpbmRlciAgIDQuMDAwMDEgICAyICAgIC0+ICAwLjAwMDAxCityZW14MzU4IHJlbWFpbmRlciAgIDQuMDAwMDAxICAgMiAgICAtPiAgMC4wMDAwMDEKK3JlbXgzNTkgcmVtYWluZGVyICAgNC4wMDAwMDAxICAgMiAgICAtPiAgMUUtNworCityZW14MzYwIHJlbWFpbmRlciAgIDEuMiAgIDAuNzM0NSAtPiAgMC40NjU1CityZW14MzYxIHJlbWFpbmRlciAgIDAuOCAgIDEyICAgICAtPiAgMC44CityZW14MzYyIHJlbWFpbmRlciAgIDAuOCAgIDAuMiAgICAtPiAgMC4wCityZW14MzYzIHJlbWFpbmRlciAgIDAuOCAgIDAuMyAgICAtPiAgMC4yCityZW14MzY0IHJlbWFpbmRlciAgIDAuODAwICAgMTIgICAtPiAgMC44MDAKK3JlbXgzNjUgcmVtYWluZGVyICAgMC44MDAgICAxLjcgIC0+ICAwLjgwMAorcmVteDM2NiByZW1haW5kZXIgICAyLjQwMCAgIDIgICAgLT4gIDAuNDAwCisKK3ByZWNpc2lvbjogNgorcmVteDM3MSByZW1haW5kZXIgICAyLjQwMCAgMiAgICAgICAgLT4gIDAuNDAwCitwcmVjaXNpb246IDMKKy0tIGxvbmcgb3BlcmFuZCwgcm91bmRlZCwgY2FzZQorcmVteDM3MiByZW1haW5kZXIgICAxMjM0NTY3ODkwMDAwMCAxMmUrMTIgLT4gMy40NkUrMTEgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgIDEyMDAwMDAwMDAwMDAwCisKK3ByZWNpc2lvbjogNQorcmVteDM4MSByZW1haW5kZXIgMTIzNDUgIDEgICAgICAgICAtPiAgMAorcmVteDM4MiByZW1haW5kZXIgMTIzNDUgIDEuMDAwMSAgICAtPiAgMC43NjU3CityZW14MzgzIHJlbWFpbmRlciAxMjM0NSAgMS4wMDEgICAgIC0+ICAwLjY2OAorcmVteDM4NCByZW1haW5kZXIgMTIzNDUgIDEuMDEgICAgICAtPiAgMC43OAorcmVteDM4NSByZW1haW5kZXIgMTIzNDUgIDEuMSAgICAgICAtPiAgMC44CityZW14Mzg2IHJlbWFpbmRlciAxMjM1NSAgNCAgICAgICAgIC0+ICAzCityZW14Mzg3IHJlbWFpbmRlciAxMjM0NSAgNCAgICAgICAgIC0+ICAxCityZW14Mzg4IHJlbWFpbmRlciAxMjM1NSAgNC4wMDAxICAgIC0+ICAyLjY5MTIKK3JlbXgzODkgcmVtYWluZGVyIDEyMzQ1ICA0LjAwMDEgICAgLT4gIDAuNjkxNAorcmVteDM5MCByZW1haW5kZXIgMTIzNDUgIDQuOSAgICAgICAtPiAgMS45CityZW14MzkxIHJlbWFpbmRlciAxMjM0NSAgNC45OSAgICAgIC0+ICA0LjczCityZW14MzkyIHJlbWFpbmRlciAxMjM0NSAgNC45OTkgICAgIC0+ICAyLjQ2OQorcmVteDM5MyByZW1haW5kZXIgMTIzNDUgIDQuOTk5OSAgICAtPiAgMC4yNDY5CityZW14Mzk0IHJlbWFpbmRlciAxMjM0NSAgNSAgICAgICAgIC0+ICAwCityZW14Mzk1IHJlbWFpbmRlciAxMjM0NSAgNS4wMDAxICAgIC0+ICA0Ljc1MzIKK3JlbXgzOTYgcmVtYWluZGVyIDEyMzQ1ICA1LjAwMSAgICAgLT4gIDIuNTMyCityZW14Mzk3IHJlbWFpbmRlciAxMjM0NSAgNS4wMSAgICAgIC0+ICAwLjM2CityZW14Mzk4IHJlbWFpbmRlciAxMjM0NSAgNS4xICAgICAgIC0+ICAzLjAKKworcHJlY2lzaW9uOiA5CistLSB0aGUgbmFzdHkgZGl2aXNpb24tYnktMSBjYXNlcworcmVteDQwMSByZW1haW5kZXIgICAwLjUgICAgICAgICAxICAgLT4gIDAuNQorcmVteDQwMiByZW1haW5kZXIgICAwLjU1ICAgICAgICAxICAgLT4gIDAuNTUKK3JlbXg0MDMgcmVtYWluZGVyICAgMC41NTUgICAgICAgMSAgIC0+ICAwLjU1NQorcmVteDQwNCByZW1haW5kZXIgICAwLjU1NTUgICAgICAxICAgLT4gIDAuNTU1NQorcmVteDQwNSByZW1haW5kZXIgICAwLjU1NTU1ICAgICAxICAgLT4gIDAuNTU1NTUKK3JlbXg0MDYgcmVtYWluZGVyICAgMC41NTU1NTUgICAgMSAgIC0+ICAwLjU1NTU1NQorcmVteDQwNyByZW1haW5kZXIgICAwLjU1NTU1NTUgICAxICAgLT4gIDAuNTU1NTU1NQorcmVteDQwOCByZW1haW5kZXIgICAwLjU1NTU1NTU1ICAxICAgLT4gIDAuNTU1NTU1NTUKK3JlbXg0MDkgcmVtYWluZGVyICAgMC41NTU1NTU1NTUgMSAgIC0+ICAwLjU1NTU1NTU1NQorCistLSB6ZXJvIHNpZ25zCityZW14NjUwIHJlbWFpbmRlciAgMSAgMSAtPiAgMAorcmVteDY1MSByZW1haW5kZXIgLTEgIDEgLT4gLTAKK3JlbXg2NTIgcmVtYWluZGVyICAxIC0xIC0+ICAwCityZW14NjUzIHJlbWFpbmRlciAtMSAtMSAtPiAtMAorcmVteDY1NCByZW1haW5kZXIgIDAgIDEgLT4gIDAKK3JlbXg2NTUgcmVtYWluZGVyIC0wICAxIC0+IC0wCityZW14NjU2IHJlbWFpbmRlciAgMCAtMSAtPiAgMAorcmVteDY1NyByZW1haW5kZXIgLTAgLTEgLT4gLTAKK3JlbXg2NTggcmVtYWluZGVyICAwLjAwICAxICAtPiAgMC4wMAorcmVteDY1OSByZW1haW5kZXIgLTAuMDAgIDEgIC0+IC0wLjAwCisKKy0tIFNwZWNpYWxzCityZW14NjgwIHJlbWFpbmRlciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDY4MSByZW1haW5kZXIgIEluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXg2ODIgcmVtYWluZGVyICBJbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14NjgzIHJlbWFpbmRlciAgSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDY4NCByZW1haW5kZXIgIEluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXg2ODUgcmVtYWluZGVyICBJbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14Njg2IHJlbWFpbmRlciAgSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDY4NyByZW1haW5kZXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXg2ODggcmVtYWluZGVyIC0xMDAwICBJbmYgICAtPiAtMTAwMAorcmVteDY4OSByZW1haW5kZXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXg2OTEgcmVtYWluZGVyIC0xICAgICBJbmYgICAtPiAtMQorcmVteDY5MiByZW1haW5kZXIgIDAgICAgIEluZiAgIC0+ICAwCityZW14NjkzIHJlbWFpbmRlciAtMCAgICAgSW5mICAgLT4gLTAKK3JlbXg2OTQgcmVtYWluZGVyICAxICAgICBJbmYgICAtPiAgMQorcmVteDY5NSByZW1haW5kZXIgIDEwMDAgIEluZiAgIC0+ICAxMDAwCityZW14Njk2IHJlbWFpbmRlciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCityZW14NzAwIHJlbWFpbmRlciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDcwMSByZW1haW5kZXIgLUluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3MDIgcmVtYWluZGVyIC1JbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14NzAzIHJlbWFpbmRlciAtSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDcwNCByZW1haW5kZXIgLUluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3MDUgcmVtYWluZGVyIC1JbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14NzA2IHJlbWFpbmRlciAtSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVteDcwNyByZW1haW5kZXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3MDggcmVtYWluZGVyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14NzA5IHJlbWFpbmRlciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK3JlbXg3MTAgcmVtYWluZGVyIC0xICAgIC1JbmYgICAtPiAtMQorcmVteDcxMSByZW1haW5kZXIgLTAgICAgLUluZiAgIC0+IC0wCityZW14NzEyIHJlbWFpbmRlciAgMCAgICAtSW5mICAgLT4gIDAKK3JlbXg3MTMgcmVtYWluZGVyICAxICAgIC1JbmYgICAtPiAgMQorcmVteDcxNCByZW1haW5kZXIgIDEwMDAgLUluZiAgIC0+ICAxMDAwCityZW14NzE1IHJlbWFpbmRlciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCityZW14NzIxIHJlbWFpbmRlciAgTmFOIC1JbmYgICAgLT4gIE5hTgorcmVteDcyMiByZW1haW5kZXIgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK3JlbXg3MjMgcmVtYWluZGVyICBOYU4gLTEgICAgICAtPiAgTmFOCityZW14NzI0IHJlbWFpbmRlciAgTmFOIC0wICAgICAgLT4gIE5hTgorcmVteDcyNSByZW1haW5kZXIgLU5hTiAgMCAgICAgIC0+IC1OYU4KK3JlbXg3MjYgcmVtYWluZGVyICBOYU4gIDEgICAgICAtPiAgTmFOCityZW14NzI3IHJlbWFpbmRlciAgTmFOICAxMDAwICAgLT4gIE5hTgorcmVteDcyOCByZW1haW5kZXIgIE5hTiAgSW5mICAgIC0+ICBOYU4KK3JlbXg3MjkgcmVtYWluZGVyICBOYU4gLU5hTiAgICAtPiAgTmFOCityZW14NzMwIHJlbWFpbmRlciAtSW5mICBOYU4gICAgLT4gIE5hTgorcmVteDczMSByZW1haW5kZXIgLTEwMDAgTmFOICAgIC0+ICBOYU4KK3JlbXg3MzIgcmVtYWluZGVyIC0xICAgIE5hTiAgICAtPiAgTmFOCityZW14NzMzIHJlbWFpbmRlciAtMCAgIC1OYU4gICAgLT4gLU5hTgorcmVteDczNCByZW1haW5kZXIgIDAgICAgTmFOICAgIC0+ICBOYU4KK3JlbXg3MzUgcmVtYWluZGVyICAxICAgLU5hTiAgICAtPiAtTmFOCityZW14NzM2IHJlbWFpbmRlciAgMTAwMCBOYU4gICAgLT4gIE5hTgorcmVteDczNyByZW1haW5kZXIgIEluZiAgTmFOICAgIC0+ICBOYU4KKworcmVteDc0MSByZW1haW5kZXIgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZW14NzQyIHJlbWFpbmRlciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3NDMgcmVtYWluZGVyIC1zTmFOIC0xICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVteDc0NCByZW1haW5kZXIgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZW14NzQ1IHJlbWFpbmRlciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3NDYgcmVtYWluZGVyICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVteDc0NyByZW1haW5kZXIgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZW14NzQ5IHJlbWFpbmRlciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3NTAgcmVtYWluZGVyICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVteDc1MSByZW1haW5kZXIgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZW14NzUyIHJlbWFpbmRlciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3NTMgcmVtYWluZGVyIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVteDc1NCByZW1haW5kZXIgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZW14NzU1IHJlbWFpbmRlciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3NTYgcmVtYWluZGVyICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVteDc1NyByZW1haW5kZXIgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZW14NzU4IHJlbWFpbmRlciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3NTkgcmVtYWluZGVyICBJbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdpbmcgTmFOcworcmVteDc2MCByZW1haW5kZXIgIE5hTjEgICBOYU43ICAgLT4gIE5hTjEKK3JlbXg3NjEgcmVtYWluZGVyIHNOYU4yICAgTmFOOCAgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCityZW14NzYyIHJlbWFpbmRlciAgTmFOMyAgc05hTjkgICAtPiAgTmFOOSBJbnZhbGlkX29wZXJhdGlvbgorcmVteDc2MyByZW1haW5kZXIgc05hTjQgIHNOYU4xMCAgLT4gIE5hTjQgSW52YWxpZF9vcGVyYXRpb24KK3JlbXg3NjQgcmVtYWluZGVyICAgIDE1ICAgTmFOMTEgIC0+ICBOYU4xMQorcmVteDc2NSByZW1haW5kZXIgIE5hTjYgICBOYU4xMiAgLT4gIE5hTjYKK3JlbXg3NjYgcmVtYWluZGVyICBJbmYgICAgTmFOMTMgIC0+ICBOYU4xMworcmVteDc2NyByZW1haW5kZXIgIE5hTjE0ICAtSW5mICAgLT4gIE5hTjE0CityZW14NzY4IHJlbWFpbmRlciAgICAwICAgIE5hTjE1ICAtPiAgTmFOMTUKK3JlbXg3NjkgcmVtYWluZGVyICBOYU4xNiAgIC0wICAgIC0+ICBOYU4xNgorCistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CityZW14NzcwIHJlbWFpbmRlciAxIDFlOTk5OTk5OTk5ICAgIC0+IDEKK3JlbXg3NzEgcmVtYWluZGVyIDEgMC45ZTk5OTk5OTk5OSAgLT4gMQorcmVteDc3MiByZW1haW5kZXIgMSAwLjk5ZTk5OTk5OTk5OSAtPiAxCityZW14NzczIHJlbWFpbmRlciAxIDAuOTk5OTk5OTk5ZTk5OTk5OTk5OSAtPiAxCityZW14Nzc0IHJlbWFpbmRlciA5ZTk5OTk5OTk5OSAgICAgICAgICAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14Nzc1IHJlbWFpbmRlciA5LjllOTk5OTk5OTk5ICAgICAgICAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14Nzc2IHJlbWFpbmRlciA5Ljk5ZTk5OTk5OTk5OSAgICAgICAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14Nzc3IHJlbWFpbmRlciA5Ljk5OTk5OTk5ZTk5OTk5OTk5OSAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK3JlbXg4MDEgcmVtYWluZGVyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCityZW14ODAyIHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAwICAgLT4gMQorcmVteDgwMyByZW1haW5kZXIgMTIzNDU2NzgwMCAgMTAgIC0+IDAKK3JlbXg4MDQgcmVtYWluZGVyIDEgMTIzNDU2NzgwMCAgICAtPiAxCityZW14ODA1IHJlbWFpbmRlciAxMjM0NTY3ODkwICAxMCAgLT4gMAorcmVteDgwNiByZW1haW5kZXIgMSAxMjM0NTY3ODkwICAgIC0+IDEKK3JlbXg4MDcgcmVtYWluZGVyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCityZW14ODA4IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTEgICAgLT4gMQorcmVteDgwOSByZW1haW5kZXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDEKK3JlbXg4MTAgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCityZW14ODExIHJlbWFpbmRlciAxMjM0NTY3ODk2ICAxMCAgLT4gNgorcmVteDgxMiByZW1haW5kZXIgMSAxMjM0NTY3ODk2ICAgIC0+IDEKKworcHJlY2lzaW9uOiAxNQorcmVteDgyMSByZW1haW5kZXIgMTIzNDU2NzgwMDAgMTAwIC0+IDAKK3JlbXg4MjIgcmVtYWluZGVyIDEgMTIzNDU2NzgwMDAgICAtPiAxCityZW14ODIzIHJlbWFpbmRlciAxMjM0NTY3ODAwICAxMCAgLT4gMAorcmVteDgyNCByZW1haW5kZXIgMSAxMjM0NTY3ODAwICAgIC0+IDEKK3JlbXg4MjUgcmVtYWluZGVyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCityZW14ODI2IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAgICAgLT4gMQorcmVteDgyNyByZW1haW5kZXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDEKK3JlbXg4MjggcmVtYWluZGVyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCityZW14ODI5IHJlbWFpbmRlciAxMjM0NTY3ODkwMSAxMDAgLT4gMQorcmVteDgzMCByZW1haW5kZXIgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK3JlbXg4MzEgcmVtYWluZGVyIDEyMzQ1Njc4OTYgIDEwICAtPiA2CityZW14ODMyIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSB3b3JyaWVzIGZyb20gZGl2aWRlaW50CitwcmVjaXNpb246IDgKK3JlbXg4NDAgcmVtYWluZGVyICAxMDAwMDAwMDAuMCAgIDEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcmVteDg0MSByZW1haW5kZXIgIDEwMDAwMDAwMC40ICAgMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14ODQyIHJlbWFpbmRlciAgMTAwMDAwMDAwLjUgICAxICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JlbXg4NDMgcmVtYWluZGVyICAxMDAwMDAwMDAuOSAgIDEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcmVteDg0NCByZW1haW5kZXIgIDEwMDAwMDAwMC45OTkgMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitwcmVjaXNpb246IDYKK3JlbXg4NTAgcmVtYWluZGVyICAxMDAwMDAwMDMgICAgIDUgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcmVteDg1MSByZW1haW5kZXIgIDEwMDAwMDAzICAgICAgNSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14ODUyIHJlbWFpbmRlciAgMTAwMDAwMyAgICAgICA1ICAtPiAgMworcmVteDg1MyByZW1haW5kZXIgIDEwMDAwMyAgICAgICAgNSAgLT4gIDMKK3JlbXg4NTQgcmVtYWluZGVyICAxMDAwMyAgICAgICAgIDUgIC0+ICAzCityZW14ODU1IHJlbWFpbmRlciAgMTAwMyAgICAgICAgICA1ICAtPiAgMworcmVteDg1NiByZW1haW5kZXIgIDEwMyAgICAgICAgICAgNSAgLT4gIDMKK3JlbXg4NTcgcmVtYWluZGVyICAxMyAgICAgICAgICAgIDUgIC0+ICAzCityZW14ODU4IHJlbWFpbmRlciAgMSAgICAgICAgICAgICA1ICAtPiAgMQorCistLSBWbGFkaW1pcidzIGNhc2VzCityZW14ODYwIHJlbWFpbmRlciAxMjMuMGUxIDEwMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg4NjEgcmVtYWluZGVyIDEyMzAgICAgMTAwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDg2MiByZW1haW5kZXIgMTIuM2UyICAxMDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14ODYzIHJlbWFpbmRlciAxLjIzZTMgIDEwMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg4NjQgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDg3MCByZW1haW5kZXIgMTIzZTEgICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14ODcxIHJlbWFpbmRlciAxMjNlMSAgICAgMTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg4NzIgcmVtYWluZGVyIDEyM2UxICAgICAgMTAwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDg3MyByZW1haW5kZXIgMTIzZTEgICAgICAgMTAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14ODc0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgMTAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg4NzUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgMTAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDg3NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgMTAwMDAwMDAwMCAtPiAxMjMwCityZW14ODc3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzAKK3JlbXg4NzggcmVtYWluZGVyIDEyMzAgICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAorcmVteDg3OSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAxMDAwMDAwMCAtPiAxMjMwCityZW14ODgwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAxMDAwMDAwIC0+IDEyMzAKK3JlbXg4ODEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAxMDAwMDAgLT4gMTIzMAorcmVteDg4MiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAxMDAwMCAtPiAxMjMwCityZW14ODgzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAxMDAwIC0+ICAyMzAKK3JlbXg4ODQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAxMDAgLT4gICAzMAorcmVteDg4NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAxMCAtPiAgICAwCityZW14ODg2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICAxIC0+ICAgIDAKKworcmVteDg4OSByZW1haW5kZXIgMTIzZTEgICAyMDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14ODkwIHJlbWFpbmRlciAxMjNlMSAgICAyMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg4OTEgcmVtYWluZGVyIDEyM2UxICAgICAyMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDg5MiByZW1haW5kZXIgMTIzZTEgICAgICAyMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14ODkzIHJlbWFpbmRlciAxMjNlMSAgICAgICAyMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg4OTQgcmVtYWluZGVyIDEyM2UxICAgICAgICAyMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDg5NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAyMDAwMDAwMDAwMCAtPiAxMjMwCityZW14ODk2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAyMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg4OTcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAyMDAwMDAwMDAgLT4gMTIzMAorcmVteDg5OSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAyMDAwMDAwMCAtPiAxMjMwCityZW14OTAwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAyMDAwMDAwIC0+IDEyMzAKK3JlbXg5MDEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAyMDAwMDAgLT4gMTIzMAorcmVteDkwMiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAyMDAwMCAtPiAxMjMwCityZW14OTAzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAyMDAwIC0+IDEyMzAKK3JlbXg5MDQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAyMDAgLT4gICAzMAorcmVteDkwNSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAyMCAtPiAgIDEwCityZW14OTA2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICAyIC0+ICAgIDAKKworcmVteDkwOSByZW1haW5kZXIgMTIzZTEgICA1MDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTEwIHJlbWFpbmRlciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5MTEgcmVtYWluZGVyIDEyM2UxICAgICA1MDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDkxMiByZW1haW5kZXIgMTIzZTEgICAgICA1MDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTEzIHJlbWFpbmRlciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5MTQgcmVtYWluZGVyIDEyM2UxICAgICAgICA1MDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDkxNSByZW1haW5kZXIgMTIzZTEgICAgICAgICA1MDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTE2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5MTcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICA1MDAwMDAwMDAgLT4gMTIzMAorcmVteDkxOSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICA1MDAwMDAwMCAtPiAxMjMwCityZW14OTIwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzAKK3JlbXg5MjEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICA1MDAwMDAgLT4gMTIzMAorcmVteDkyMiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICA1MDAwMCAtPiAxMjMwCityZW14OTIzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzAKK3JlbXg5MjQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICA1MDAgLT4gIDIzMAorcmVteDkyNSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICA1MCAtPiAgIDMwCityZW14OTI2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDAKKworcmVteDkyOSByZW1haW5kZXIgMTIzZTEgICA5MDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTMwIHJlbWFpbmRlciAxMjNlMSAgICA5MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5MzEgcmVtYWluZGVyIDEyM2UxICAgICA5MDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDkzMiByZW1haW5kZXIgMTIzZTEgICAgICA5MDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTMzIHJlbWFpbmRlciAxMjNlMSAgICAgICA5MDAwMDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5MzQgcmVtYWluZGVyIDEyM2UxICAgICAgICA5MDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDkzNSByZW1haW5kZXIgMTIzZTEgICAgICAgICA5MDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTM2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICA5MDAwMDAwMDAwIC0+IDEyMzAKK3JlbXg5MzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICA5MDAwMDAwMDAgLT4gMTIzMAorcmVteDkzOSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICA5MDAwMDAwMCAtPiAxMjMwCityZW14OTQwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICA5MDAwMDAwIC0+IDEyMzAKK3JlbXg5NDEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICA5MDAwMDAgLT4gMTIzMAorcmVteDk0MiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICA5MDAwMCAtPiAxMjMwCityZW14OTQzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICA5MDAwIC0+IDEyMzAKK3JlbXg5NDQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICA5MDAgLT4gIDMzMAorcmVteDk0NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICA5MCAtPiAgIDYwCityZW14OTQ2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICA5IC0+ICAgIDYKKworcmVteDk1MCByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTUxIHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTUyIHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDk1MyByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTU0IHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTU1IHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDk1NiByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTU3IHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCityZW14OTU4IHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAorcmVteDk1OSByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCisKK3JlbXg5NjAgcmVtYWluZGVyIDEyM2UxICAgMTk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorcmVteDk2MSByZW1haW5kZXIgMTIzZTEgICAxOTk5OTk5OTk5OTk5OTk5OTAgLT4gMTIzMAorcmVteDk2MiByZW1haW5kZXIgMTIzZTEgICAxOTk5OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK3JlbXg5NjMgcmVtYWluZGVyIDEyM2UxICAgMTk5OTk5OTk5OTk5OTk5OTk5OTAgLT4gMTIzMAorcmVteDk2NCByZW1haW5kZXIgMTIzZTEgICAxOTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorcmVteDk2NSByZW1haW5kZXIgMTIzZTEgICAxOTk5OTk5OTk5OTk5OTk5OTk5OTkwIC0+IDEyMzAKK3JlbXg5NjYgcmVtYWluZGVyIDEyM2UxICAgMTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAorcmVteDk2NyByZW1haW5kZXIgMTIzZTEgICAxOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAgLT4gMTIzMAorcmVteDk2OCByZW1haW5kZXIgMTIzZTEgICAxOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKK3JlbXg5NjkgcmVtYWluZGVyIDEyM2UxICAgMTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAgLT4gMTIzMAorCityZW14OTcwIHJlbWFpbmRlciAxZTEgICAxMDAwMDAwMDAwMDAwMDAwMCAtPiAxMAorcmVteDk3MSByZW1haW5kZXIgMWUxICAgMTAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwCityZW14OTcyIHJlbWFpbmRlciAxZTEgICAxMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwCityZW14OTczIHJlbWFpbmRlciAxZTEgICAxMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMAorcmVteDk3NCByZW1haW5kZXIgMWUxICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwCityZW14OTc1IHJlbWFpbmRlciAxZTEgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwCityZW14OTc2IHJlbWFpbmRlciAxZTEgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMAorcmVteDk3NyByZW1haW5kZXIgMWUxICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwCityZW14OTc4IHJlbWFpbmRlciAxZTEgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwCityZW14OTc5IHJlbWFpbmRlciAxZTEgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMAorCityZW14OTgwIHJlbWFpbmRlciAxMjNlMSAxMDAwRTk5OTk5OSAtPiAxLjIzRSszICAtLSAxMjNFKzEgaW50ZXJuYWxseQorCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0KK3ByZWNpc2lvbjogOQorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3JlbXg5OTAgcmVtYWluZGVyICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAtPiAxLjIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcmVteDk5MSByZW1haW5kZXIgOUUrOTk5OTk5OTk5ICswLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCityZW14OTkyIHJlbWFpbmRlciArMC4xMDAgOUUrOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gMC4xMDAKK3JlbXg5OTMgcmVtYWluZGVyIDlFLTk5OTk5OTk5OSArOS4xMDAgICAgICAgICAgICAgICAtPiA5RS05OTk5OTk5OTkKK3JlbXg5OTUgcmVtYWluZGVyIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAtPiAtMS4yMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3JlbXg5OTYgcmVtYWluZGVyIDlFKzk5OTk5OTk5OSAtMC44MzQ1Njc4OTAxMjM0NUUtMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcmVteDk5NyByZW1haW5kZXIgLTAuMTAwIDlFKzk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+IC0wLjEwMAorcmVteDk5OCByZW1haW5kZXIgOUUtOTk5OTk5OTk5IC05LjEwMCAgICAgICAgICAgICAgIC0+IDlFLTk5OTk5OTk5OQorCistLSBOdWxsIHRlc3RzCityZW14MTAwMCByZW1haW5kZXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZW14MTAwMSByZW1haW5kZXIgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcmVtYWluZGVyTmVhci5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yZW1haW5kZXJOZWFyLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc2OGI5ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcmVtYWluZGVyTmVhci5kZWNUZXN0CkBAIC0wLDAgKzEsNTcyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHJlbWFpbmRlck5lYXIuZGVjVGVzdCAtLSBkZWNpbWFsIHJlbWFpbmRlci1uZWFyIChJRUVFIHJlbWFpbmRlcikgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDM4NAorbWluZXhwb25lbnQ6IC0zODMKKworcm1ueDAwMSByZW1haW5kZXJuZWFyICAxICAgICAxICAgIC0+ICAwCitybW54MDAyIHJlbWFpbmRlcm5lYXIgIDIgICAgIDEgICAgLT4gIDAKK3JtbngwMDMgcmVtYWluZGVybmVhciAgMSAgICAgMiAgICAtPiAgMQorcm1ueDAwNCByZW1haW5kZXJuZWFyICAyICAgICAyICAgIC0+ICAwCitybW54MDA1IHJlbWFpbmRlcm5lYXIgIDAgICAgIDEgICAgLT4gIDAKK3JtbngwMDYgcmVtYWluZGVybmVhciAgMCAgICAgMiAgICAtPiAgMAorcm1ueDAwNyByZW1haW5kZXJuZWFyICAxICAgICAzICAgIC0+ICAxCitybW54MDA4IHJlbWFpbmRlcm5lYXIgIDIgICAgIDMgICAgLT4gLTEKK3JtbngwMDkgcmVtYWluZGVybmVhciAgMyAgICAgMyAgICAtPiAgMAorCitybW54MDEwIHJlbWFpbmRlcm5lYXIgIDIuNCAgIDEgICAgLT4gIDAuNAorcm1ueDAxMSByZW1haW5kZXJuZWFyICAyLjQgICAtMSAgIC0+ICAwLjQKK3JtbngwMTIgcmVtYWluZGVybmVhciAgLTIuNCAgMSAgICAtPiAgLTAuNAorcm1ueDAxMyByZW1haW5kZXJuZWFyICAtMi40ICAtMSAgIC0+ICAtMC40CitybW54MDE0IHJlbWFpbmRlcm5lYXIgIDIuNDAgIDEgICAgLT4gIDAuNDAKK3JtbngwMTUgcmVtYWluZGVybmVhciAgMi40MDAgMSAgICAtPiAgMC40MDAKK3JtbngwMTYgcmVtYWluZGVybmVhciAgMi40ICAgMiAgICAtPiAgMC40CitybW54MDE3IHJlbWFpbmRlcm5lYXIgIDIuNDAwIDIgICAgLT4gIDAuNDAwCitybW54MDE4IHJlbWFpbmRlcm5lYXIgIDIuICAgIDIgICAgLT4gIDAKK3JtbngwMTkgcmVtYWluZGVybmVhciAgMjAgICAgMjAgICAtPiAgMAorCitybW54MDIwIHJlbWFpbmRlcm5lYXIgIDE4NyAgIDE4NyAgICAtPiAgMAorcm1ueDAyMSByZW1haW5kZXJuZWFyICA1ICAgICAyICAgICAgLT4gIDEKK3JtbngwMjIgcmVtYWluZGVybmVhciAgNSAgICAgMi4wICAgIC0+ICAxLjAKK3JtbngwMjMgcmVtYWluZGVybmVhciAgNSAgICAgMi4wMDAgIC0+ICAxLjAwMAorcm1ueDAyNCByZW1haW5kZXJuZWFyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCitybW54MDI1IHJlbWFpbmRlcm5lYXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDAKKworcm1ueDAzMCByZW1haW5kZXJuZWFyICAxICAgICAyICAgICAgLT4gIDEKK3JtbngwMzEgcmVtYWluZGVybmVhciAgMSAgICAgNCAgICAgIC0+ICAxCitybW54MDMyIHJlbWFpbmRlcm5lYXIgIDEgICAgIDggICAgICAtPiAgMQorcm1ueDAzMyByZW1haW5kZXJuZWFyICAxICAgICAxNiAgICAgLT4gIDEKK3JtbngwMzQgcmVtYWluZGVybmVhciAgMSAgICAgMzIgICAgIC0+ICAxCitybW54MDM1IHJlbWFpbmRlcm5lYXIgIDEgICAgIDY0ICAgICAtPiAgMQorcm1ueDA0MCByZW1haW5kZXJuZWFyICAxICAgIC0yICAgICAgLT4gIDEKK3JtbngwNDEgcmVtYWluZGVybmVhciAgMSAgICAtNCAgICAgIC0+ICAxCitybW54MDQyIHJlbWFpbmRlcm5lYXIgIDEgICAgLTggICAgICAtPiAgMQorcm1ueDA0MyByZW1haW5kZXJuZWFyICAxICAgIC0xNiAgICAgLT4gIDEKK3JtbngwNDQgcmVtYWluZGVybmVhciAgMSAgICAtMzIgICAgIC0+ICAxCitybW54MDQ1IHJlbWFpbmRlcm5lYXIgIDEgICAgLTY0ICAgICAtPiAgMQorcm1ueDA1MCByZW1haW5kZXJuZWFyIC0xICAgICAyICAgICAgLT4gIC0xCitybW54MDUxIHJlbWFpbmRlcm5lYXIgLTEgICAgIDQgICAgICAtPiAgLTEKK3JtbngwNTIgcmVtYWluZGVybmVhciAtMSAgICAgOCAgICAgIC0+ICAtMQorcm1ueDA1MyByZW1haW5kZXJuZWFyIC0xICAgICAxNiAgICAgLT4gIC0xCitybW54MDU0IHJlbWFpbmRlcm5lYXIgLTEgICAgIDMyICAgICAtPiAgLTEKK3JtbngwNTUgcmVtYWluZGVybmVhciAtMSAgICAgNjQgICAgIC0+ICAtMQorcm1ueDA2MCByZW1haW5kZXJuZWFyIC0xICAgIC0yICAgICAgLT4gIC0xCitybW54MDYxIHJlbWFpbmRlcm5lYXIgLTEgICAgLTQgICAgICAtPiAgLTEKK3JtbngwNjIgcmVtYWluZGVybmVhciAtMSAgICAtOCAgICAgIC0+ICAtMQorcm1ueDA2MyByZW1haW5kZXJuZWFyIC0xICAgIC0xNiAgICAgLT4gIC0xCitybW54MDY0IHJlbWFpbmRlcm5lYXIgLTEgICAgLTMyICAgICAtPiAgLTEKK3JtbngwNjUgcmVtYWluZGVybmVhciAtMSAgICAtNjQgICAgIC0+ICAtMQorCitybW54MDY2IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5NyAgICAgMSAgLT4gMAorcm1ueDA2NyByZW1haW5kZXJuZWFyICA5OTk5OTk5OTcuNCAgIDEgIC0+IDAuNAorcm1ueDA2OCByZW1haW5kZXJuZWFyICA5OTk5OTk5OTcuNSAgIDEgIC0+IC0wLjUKK3JtbngwNjkgcmVtYWluZGVybmVhciAgOTk5OTk5OTk3LjkgICAxICAtPiAtMC4xCitybW54MDcwIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5Ny45OTkgMSAgLT4gLTAuMDAxCisKK3JtbngwNzEgcmVtYWluZGVybmVhciAgOTk5OTk5OTk4ICAgICAxICAtPiAwCitybW54MDcyIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OC40ICAgMSAgLT4gMC40CitybW54MDczIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OC41ICAgMSAgLT4gMC41CitybW54MDc0IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OC45ICAgMSAgLT4gLTAuMQorcm1ueDA3NSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTguOTk5IDEgIC0+IC0wLjAwMQorCitybW54MDc2IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OSAgICAgMSAgLT4gMAorcm1ueDA3NyByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuNCAgIDEgIC0+IDAuNAorcm1ueDA3OCByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuNSAgIDEgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitybW54MDc5IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS45ICAgMSAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JtbngwODAgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5Ljk5OSAxICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCitwcmVjaXNpb246IDYKK3JtbngwODEgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5ICAgICAxICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcm1ueDA4MiByZW1haW5kZXJuZWFyICA5OTk5OTk5OSAgICAgIDEgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitybW54MDgzIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTkgICAgICAgMSAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JtbngwODQgcmVtYWluZGVybmVhciAgOTk5OTk5ICAgICAgICAxICAtPiAwCitybW54MDg1IHJlbWFpbmRlcm5lYXIgIDk5OTk5ICAgICAgICAgMSAgLT4gMAorcm1ueDA4NiByZW1haW5kZXJuZWFyICA5OTk5ICAgICAgICAgIDEgIC0+IDAKK3JtbngwODcgcmVtYWluZGVybmVhciAgOTk5ICAgICAgICAgICAxICAtPiAwCitybW54MDg4IHJlbWFpbmRlcm5lYXIgIDk5ICAgICAgICAgICAgMSAgLT4gMAorcm1ueDA4OSByZW1haW5kZXJuZWFyICA5ICAgICAgICAgICAgIDEgIC0+IDAKKworcHJlY2lzaW9uOiA5CitybW54MDkwIHJlbWFpbmRlcm5lYXIgIDAuICAgICAgICAgICAgMSAgLT4gMAorcm1ueDA5MSByZW1haW5kZXJuZWFyICAuMCAgICAgICAgICAgIDEgIC0+IDAuMAorcm1ueDA5MiByZW1haW5kZXJuZWFyICAwLjAwICAgICAgICAgIDEgIC0+IDAuMDAKK3JtbngwOTMgcmVtYWluZGVybmVhciAgMC4wMEUrOSAgICAgICAxICAtPiAwCitybW54MDk0IHJlbWFpbmRlcm5lYXIgIDAuMDAwMEUtNTAgICAgMSAgLT4gMEUtNTQKKworCistLSBWYXJpb3VzIGZsYXZvdXJzIG9mIHJlbWFpbmRlcm5lYXIgYnkgMAorcHJlY2lzaW9uOiA5CittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcm1ueDEwMSByZW1haW5kZXJuZWFyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitybW54MTAyIHJlbWFpbmRlcm5lYXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK3JtbngxMDMgcmVtYWluZGVybmVhciAtMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorcm1ueDEwNCByZW1haW5kZXJuZWFyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitybW54MTA1IHJlbWFpbmRlcm5lYXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK3JtbngxMDYgcmVtYWluZGVybmVhciAgMC4wMDAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorLS0gW1NvbWUgdGhpbmsgdGhpcyBuZXh0IGdyb3VwIHNob3VsZCBiZSBEaXZpc2lvbl9ieV96ZXJvIGV4Y2VwdGlvbiwKKy0tIGJ1dCBJRUVFIDg1NCBpcyBleHBsaWNpdCB0aGF0IGl0IGlzIEludmFsaWQgb3BlcmF0aW9uIC4uIGZvcgorLS0gcmVtYWluZGVybmVhci1uZWFyLCBhbnl3YXldCitybW54MTA3IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDEwOCByZW1haW5kZXJuZWFyICAwLjAxICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JtbngxMDkgcmVtYWluZGVybmVhciAgMC4xICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MTEwIHJlbWFpbmRlcm5lYXIgIDEgICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDExMSByZW1haW5kZXJuZWFyICAxICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JtbngxMTIgcmVtYWluZGVybmVhciAxMCAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MTEzIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDExNCByZW1haW5kZXJuZWFyIDFFKzEwMDAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JtbngxMTUgcmVtYWluZGVybmVhciAgMC4wMDAxIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MTE2IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDExOSByZW1haW5kZXJuZWFyICAwLjEgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JtbngxMjAgcmVtYWluZGVybmVhciAgMSAgICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MTIxIHJlbWFpbmRlcm5lYXIgIDEgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDEyMiByZW1haW5kZXJuZWFyIDEwICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JtbngxMjMgcmVtYWluZGVybmVhciAxRSsxMDAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54MTI0IHJlbWFpbmRlcm5lYXIgMUUrMTAwMCAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYW5kIHplcm9zIG9uIGxlZnQKK3JtbngxMzAgcmVtYWluZGVybmVhciAgMCAgICAgIDEgICAtPiAgMAorcm1ueDEzMSByZW1haW5kZXJuZWFyICAwICAgICAtMSAgIC0+ICAwCitybW54MTMyIHJlbWFpbmRlcm5lYXIgIDAuMCAgICAxICAgLT4gIDAuMAorcm1ueDEzMyByZW1haW5kZXJuZWFyICAwLjAgICAtMSAgIC0+ICAwLjAKK3JtbngxMzQgcmVtYWluZGVybmVhciAtMCAgICAgIDEgICAtPiAtMAorcm1ueDEzNSByZW1haW5kZXJuZWFyIC0wICAgICAtMSAgIC0+IC0wCitybW54MTM2IHJlbWFpbmRlcm5lYXIgLTAuMCAgICAxICAgLT4gLTAuMAorcm1ueDEzNyByZW1haW5kZXJuZWFyIC0wLjAgICAtMSAgIC0+IC0wLjAKKworLS0gMC41ZXJzCitybW14MTQzIHJlbWFpbmRlcm5lYXIgICAwLjUgIDIgICAgIC0+ICAwLjUKK3JtbXgxNDQgcmVtYWluZGVybmVhciAgIDAuNSAgMi4xICAgLT4gIDAuNQorcm1teDE0NSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MAorcm1teDE0NiByZW1haW5kZXJuZWFyICAgMC41ICAyLjAwMSAtPiAgMC41MDAKK3JtbXgxNDcgcmVtYWluZGVybmVhciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKK3JtbXgxNDggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK3JtbXgxNDkgcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwCisKKy0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXIKK3JtbngxNTAgcmVtYWluZGVybmVhciAgIDAuNCAgMS4wMjAgLT4gIDAuNDAwCitybW54MTUxIHJlbWFpbmRlcm5lYXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMAorcm1ueDE1MiByZW1haW5kZXJuZWFyICAgMC41MSAxLjAyMCAtPiAgMC41MTAKK3JtbngxNTMgcmVtYWluZGVybmVhciAgIDAuNTIgMS4wMjAgLT4gLTAuNTAwCitybW54MTU0IHJlbWFpbmRlcm5lYXIgICAwLjYgIDEuMDIwIC0+IC0wLjQyMAorcm1ueDE1NSByZW1haW5kZXJuZWFyICAgMC40OSAxICAgICAtPiAgMC40OQorcm1ueDE1NiByZW1haW5kZXJuZWFyICAgMC41MCAxICAgICAtPiAgMC41MAorcm1ueDE1NyByZW1haW5kZXJuZWFyICAgMS41MCAxICAgICAtPiAtMC41MAorcm1ueDE1OCByZW1haW5kZXJuZWFyICAgMi41MCAxICAgICAtPiAgMC41MAorcm1ueDE1OSByZW1haW5kZXJuZWFyICAgOS41MCAxICAgICAtPiAtMC41MAorcm1ueDE2MCByZW1haW5kZXJuZWFyICAgMC41MSAxICAgICAtPiAtMC40OQorCistLSB0aGUgbmFzdHkgZGl2aXNpb24tYnktMSBjYXNlcworcm1ueDE2MSByZW1haW5kZXJuZWFyICAgMC40ICAgICAgICAgMSAgIC0+ICAwLjQKK3JtbngxNjIgcmVtYWluZGVybmVhciAgIDAuNDUgICAgICAgIDEgICAtPiAgMC40NQorcm1ueDE2MyByZW1haW5kZXJuZWFyICAgMC40NTUgICAgICAgMSAgIC0+ICAwLjQ1NQorcm1ueDE2NCByZW1haW5kZXJuZWFyICAgMC40NTU1ICAgICAgMSAgIC0+ICAwLjQ1NTUKK3JtbngxNjUgcmVtYWluZGVybmVhciAgIDAuNDU1NTUgICAgIDEgICAtPiAgMC40NTU1NQorcm1ueDE2NiByZW1haW5kZXJuZWFyICAgMC40NTU1NTUgICAgMSAgIC0+ICAwLjQ1NTU1NQorcm1ueDE2NyByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1ICAgMSAgIC0+ICAwLjQ1NTU1NTUKK3JtbngxNjggcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTUgIDEgICAtPiAgMC40NTU1NTU1NQorcm1ueDE2OSByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1NTUgMSAgIC0+ICAwLjQ1NTU1NTU1NQorLS0gd2l0aCBzcGlsbC4uLgorcm1ueDE3MSByZW1haW5kZXJuZWFyICAgMC41ICAgICAgICAgMSAgIC0+ICAwLjUKK3JtbngxNzIgcmVtYWluZGVybmVhciAgIDAuNTUgICAgICAgIDEgICAtPiAtMC40NQorcm1ueDE3MyByZW1haW5kZXJuZWFyICAgMC41NTUgICAgICAgMSAgIC0+IC0wLjQ0NQorcm1ueDE3NCByZW1haW5kZXJuZWFyICAgMC41NTU1ICAgICAgMSAgIC0+IC0wLjQ0NDUKK3JtbngxNzUgcmVtYWluZGVybmVhciAgIDAuNTU1NTUgICAgIDEgICAtPiAtMC40NDQ0NQorcm1ueDE3NiByZW1haW5kZXJuZWFyICAgMC41NTU1NTUgICAgMSAgIC0+IC0wLjQ0NDQ0NQorcm1ueDE3NyByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1ICAgMSAgIC0+IC0wLjQ0NDQ0NDUKK3JtbngxNzggcmVtYWluZGVybmVhciAgIDAuNTU1NTU1NTUgIDEgICAtPiAtMC40NDQ0NDQ0NQorcm1ueDE3OSByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1NTUgMSAgIC0+IC0wLjQ0NDQ0NDQ0NQorCistLSBwcm9ncmVzc2lvbgorcm1ueDE4MCByZW1haW5kZXJuZWFyICAxICAxICAgLT4gMAorcm1ueDE4MSByZW1haW5kZXJuZWFyICAxICAyICAgLT4gMQorcm1ueDE4MiByZW1haW5kZXJuZWFyICAxICAzICAgLT4gMQorcm1ueDE4MyByZW1haW5kZXJuZWFyICAxICA0ICAgLT4gMQorcm1ueDE4NCByZW1haW5kZXJuZWFyICAxICA1ICAgLT4gMQorcm1ueDE4NSByZW1haW5kZXJuZWFyICAxICA2ICAgLT4gMQorcm1ueDE4NiByZW1haW5kZXJuZWFyICAxICA3ICAgLT4gMQorcm1ueDE4NyByZW1haW5kZXJuZWFyICAxICA4ICAgLT4gMQorcm1ueDE4OCByZW1haW5kZXJuZWFyICAxICA5ICAgLT4gMQorcm1ueDE4OSByZW1haW5kZXJuZWFyICAxICAxMCAgLT4gMQorcm1ueDE5MCByZW1haW5kZXJuZWFyICAxICAxICAgLT4gMAorcm1ueDE5MSByZW1haW5kZXJuZWFyICAyICAxICAgLT4gMAorcm1ueDE5MiByZW1haW5kZXJuZWFyICAzICAxICAgLT4gMAorcm1ueDE5MyByZW1haW5kZXJuZWFyICA0ICAxICAgLT4gMAorcm1ueDE5NCByZW1haW5kZXJuZWFyICA1ICAxICAgLT4gMAorcm1ueDE5NSByZW1haW5kZXJuZWFyICA2ICAxICAgLT4gMAorcm1ueDE5NiByZW1haW5kZXJuZWFyICA3ICAxICAgLT4gMAorcm1ueDE5NyByZW1haW5kZXJuZWFyICA4ICAxICAgLT4gMAorcm1ueDE5OCByZW1haW5kZXJuZWFyICA5ICAxICAgLT4gMAorcm1ueDE5OSByZW1haW5kZXJuZWFyICAxMCAxICAgLT4gMAorCisKKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcm1ueDIwMSByZW1haW5kZXJuZWFyICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKK3JtbngyMDIgcmVtYWluZGVybmVhciAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCitybW54MjAzIHJlbWFpbmRlcm5lYXIgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAorcm1ueDIwNCByZW1haW5kZXJuZWFyICAwLjAwMDEgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDIwNSByZW1haW5kZXJuZWFyICAwLjAxICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDIwNiByZW1haW5kZXJuZWFyICAwLjEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDIwNyByZW1haW5kZXJuZWFyICAxICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDIwOCByZW1haW5kZXJuZWFyICAxICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDIwOSByZW1haW5kZXJuZWFyIDEwICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDIxMCByZW1haW5kZXJuZWFyIDFFKzEwMCAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDIxMSByZW1haW5kZXJuZWFyIDFFKzEwMDAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSB0ZXN0cyBmcm9tIHRoZSBleHRlbmRlZCBzcGVjaWZpY2F0aW9uCitybW54MjIxIHJlbWFpbmRlcm5lYXIgMi4xICAgICAzICAgLT4gLTAuOQorcm1ueDIyMiByZW1haW5kZXJuZWFyICAxMCAgICAgNiAgIC0+IC0yCitybW54MjIzIHJlbWFpbmRlcm5lYXIgIDEwICAgICAzICAgLT4gIDEKK3JtbngyMjQgcmVtYWluZGVybmVhciAtMTAgICAgIDMgICAtPiAtMQorcm1ueDIyNSByZW1haW5kZXJuZWFyICAxMC4yICAgMSAgIC0+IDAuMgorcm1ueDIyNiByZW1haW5kZXJuZWFyICAxMCAgICAgMC4zIC0+IDAuMQorcm1ueDIyNyByZW1haW5kZXJuZWFyICAgMy42ICAgMS4zIC0+IC0wLjMKKworLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlcgorcm1ueDIzMSByZW1haW5kZXJuZWFyICAgMC40ICAxLjAyMCAtPiAgMC40MDAKK3JtbngyMzIgcmVtYWluZGVybmVhciAgIDAuNTAgMS4wMjAgLT4gIDAuNTAwCitybW54MjMzIHJlbWFpbmRlcm5lYXIgICAwLjUxIDEuMDIwIC0+ICAwLjUxMAorcm1ueDIzNCByZW1haW5kZXJuZWFyICAgMC41MiAxLjAyMCAtPiAtMC41MDAKK3JtbngyMzUgcmVtYWluZGVybmVhciAgIDAuNiAgMS4wMjAgLT4gLTAuNDIwCisKKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdworbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3JtbngyNzAgcmVtYWluZGVybmVhciAxIDFlOTk5OTk5OTk5ICAgIC0+IDEKK3JtbngyNzEgcmVtYWluZGVybmVhciAxIDAuOWU5OTk5OTk5OTkgIC0+IDEKK3JtbngyNzIgcmVtYWluZGVybmVhciAxIDAuOTllOTk5OTk5OTk5IC0+IDEKK3JtbngyNzMgcmVtYWluZGVybmVhciAxIDAuOTk5OTk5OTk5ZTk5OTk5OTk5OSAtPiAxCitybW54Mjc0IHJlbWFpbmRlcm5lYXIgOWU5OTk5OTk5OTkgICAgICAgICAgMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcm1ueDI3NSByZW1haW5kZXJuZWFyIDkuOWU5OTk5OTk5OTkgICAgICAgIDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JtbngyNzYgcmVtYWluZGVybmVhciA5Ljk5ZTk5OTk5OTk5OSAgICAgICAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitybW54Mjc3IHJlbWFpbmRlcm5lYXIgOS45OTk5OTk5OWU5OTk5OTk5OTkgMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorCitybW54MjgwIHJlbWFpbmRlcm5lYXIgMC4xIDllLTk5OTk5OTk5OSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcm1ueDI4MSByZW1haW5kZXJuZWFyIDAuMSA5OWUtOTk5OTk5OTk5ICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JtbngyODIgcmVtYWluZGVybmVhciAwLjEgOTk5ZS05OTk5OTk5OTkgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCisKK3JtbngyODMgcmVtYWluZGVybmVhciAwLjEgOWUtOTk5OTk5OTk4ICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitybW54Mjg0IHJlbWFpbmRlcm5lYXIgMC4xIDk5ZS05OTk5OTk5OTggICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcm1ueDI4NSByZW1haW5kZXJuZWFyIDAuMSA5OTllLTk5OTk5OTk5OCAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3JtbngyODYgcmVtYWluZGVybmVhciAwLjEgOTk5ZS05OTk5OTk5OTcgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitybW54Mjg3IHJlbWFpbmRlcm5lYXIgMC4xIDk5OTllLTk5OTk5OTk5NyAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcm1ueDI4OCByZW1haW5kZXJuZWFyIDAuMSA5OTk5OWUtOTk5OTk5OTk3ICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworLS0gcm1ueDN4eCBhcmUgZnJvbSBEaWFnQmlnRGVjaW1hbAorcm1ueDMwMSByZW1haW5kZXJuZWFyICAgMSAgICAzICAgICAtPiAgMQorcm1ueDMwMiByZW1haW5kZXJuZWFyICAgNSAgICA1ICAgICAtPiAgMAorcm1ueDMwMyByZW1haW5kZXJuZWFyICAgMTMgICAxMCAgICAtPiAgMworcm1ueDMwNCByZW1haW5kZXJuZWFyICAgMTMgICA1MCAgICAtPiAgMTMKK3JtbngzMDUgcmVtYWluZGVybmVhciAgIDEzICAgMTAwICAgLT4gIDEzCitybW54MzA2IHJlbWFpbmRlcm5lYXIgICAxMyAgIDEwMDAgIC0+ICAxMworcm1ueDMwNyByZW1haW5kZXJuZWFyICAgLjEzICAgIDEgICAtPiAgMC4xMworcm1ueDMwOCByZW1haW5kZXJuZWFyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMKK3JtbngzMDkgcmVtYWluZGVybmVhciAgIDAuMTAzMyAxICAgLT4gIDAuMTAzMworcm1ueDMxMCByZW1haW5kZXJuZWFyICAgMS4wMzMgIDEgICAtPiAgMC4wMzMKK3JtbngzMTEgcmVtYWluZGVybmVhciAgIDEwLjMzICAxICAgLT4gIDAuMzMKK3JtbngzMTIgcmVtYWluZGVybmVhciAgIDEwLjMzIDEwICAgLT4gIDAuMzMKK3JtbngzMTMgcmVtYWluZGVybmVhciAgIDEwMy4zICAxICAgLT4gIDAuMworcm1ueDMxNCByZW1haW5kZXJuZWFyICAgMTMzICAgMTAgICAtPiAgMworcm1ueDMxNSByZW1haW5kZXJuZWFyICAgMTAzMyAgMTAgICAtPiAgMworcm1ueDMxNiByZW1haW5kZXJuZWFyICAgMTAzMyAgNTAgICAtPiAtMTcKK3JtbngzMTcgcmVtYWluZGVybmVhciAgIDEwMS4wICAzICAgLT4gLTEuMAorcm1ueDMxOCByZW1haW5kZXJuZWFyICAgMTAyLjAgIDMgICAtPiAgMC4wCitybW54MzE5IHJlbWFpbmRlcm5lYXIgICAxMDMuMCAgMyAgIC0+ICAxLjAKK3JtbngzMjAgcmVtYWluZGVybmVhciAgIDIuNDAgICAxICAgLT4gIDAuNDAKK3JtbngzMjEgcmVtYWluZGVybmVhciAgIDIuNDAwICAxICAgLT4gIDAuNDAwCitybW54MzIyIHJlbWFpbmRlcm5lYXIgICAyLjQgICAgMSAgIC0+ICAwLjQKK3JtbngzMjMgcmVtYWluZGVybmVhciAgIDIuNCAgICAyICAgLT4gIDAuNAorcm1ueDMyNCByZW1haW5kZXJuZWFyICAgMi40MDAgIDIgICAtPiAgMC40MDAKK3JtbngzMjUgcmVtYWluZGVybmVhciAgIDEgICAwLjMgICAgLT4gIDAuMQorcm1ueDMyNiByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAgICAtPiAgMC4xMAorcm1ueDMyNyByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAwICAtPiAgMC4xMDAKK3JtbngzMjggcmVtYWluZGVybmVhciAgIDEgICAwLjMwMDAgLT4gIDAuMTAwMAorcm1ueDMyOSByZW1haW5kZXJuZWFyICAgMS4wICAgIDAuMyAtPiAgMC4xCitybW54MzMwIHJlbWFpbmRlcm5lYXIgICAxLjAwICAgMC4zIC0+ICAwLjEwCitybW54MzMxIHJlbWFpbmRlcm5lYXIgICAxLjAwMCAgMC4zIC0+ICAwLjEwMAorcm1ueDMzMiByZW1haW5kZXJuZWFyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwCitybW54MzMzIHJlbWFpbmRlcm5lYXIgICAwLjUgIDIgICAgIC0+ICAwLjUKK3JtbngzMzQgcmVtYWluZGVybmVhciAgIDAuNSAgMi4xICAgLT4gIDAuNQorcm1ueDMzNSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MAorcm1ueDMzNiByZW1haW5kZXJuZWFyICAgMC41ICAyLjAwMSAtPiAgMC41MDAKK3JtbngzMzcgcmVtYWluZGVybmVhciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKK3JtbngzMzggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKK3JtbngzMzkgcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwCisKK3JtbngzNDAgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMSAgICAtPiAgLTFFLTcKK3JtbngzNDEgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDEgICAgLT4gIC0xRS04CitybW54MzQyIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMSAgICAtPiAgLTFFLTkKK3JtbngzNDMgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDAwMSAgICAtPiAgLTFFLTEwCitybW54MzQ0IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMDAxICAgIC0+ICAtMUUtMTEKK3JtbngzNDUgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OSAgICAtPiAgMUUtNworcm1ueDM0NiByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OSAgICAtPiAgMUUtOAorcm1ueDM0NyByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTkgICAgLT4gIDFFLTkKK3JtbngzNDggcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OSAgICAtPiAgMUUtMTAKK3JtbngzNDkgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OTkgICAgLT4gIDFFLTExCisKK3JtbngzNTAgcmVtYWluZGVybmVhciAgIDAuMDMgIDcgIC0+ICAwLjAzCitybW54MzUxIHJlbWFpbmRlcm5lYXIgICA1ICAgMiAgICAtPiAgMQorcm1ueDM1MiByZW1haW5kZXJuZWFyICAgNC4xICAgMiAgICAtPiAgMC4xCitybW54MzUzIHJlbWFpbmRlcm5lYXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQorcm1ueDM1NCByZW1haW5kZXJuZWFyICAgNC4wMDEgICAyICAgIC0+ICAwLjAwMQorcm1ueDM1NSByZW1haW5kZXJuZWFyICAgNC4wMDAxICAgMiAgICAtPiAgMC4wMDAxCitybW54MzU2IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQorcm1ueDM1NyByZW1haW5kZXJuZWFyICAgNC4wMDAwMDEgICAyICAgIC0+ICAwLjAwMDAwMQorcm1ueDM1OCByZW1haW5kZXJuZWFyICAgNC4wMDAwMDAxICAgMiAgICAtPiAgMUUtNworCitybW54MzYwIHJlbWFpbmRlcm5lYXIgICAxLjIgICAwLjczNDUgLT4gLTAuMjY5MAorcm1ueDM2MSByZW1haW5kZXJuZWFyICAgMC44ICAgMTIgICAgIC0+ICAwLjgKK3JtbngzNjIgcmVtYWluZGVybmVhciAgIDAuOCAgIDAuMiAgICAtPiAgMC4wCitybW54MzYzIHJlbWFpbmRlcm5lYXIgICAwLjggICAwLjMgICAgLT4gLTAuMQorcm1ueDM2NCByZW1haW5kZXJuZWFyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMAorcm1ueDM2NSByZW1haW5kZXJuZWFyICAgMC44MDAgICAxLjcgIC0+ICAwLjgwMAorcm1ueDM2NiByZW1haW5kZXJuZWFyICAgMi40MDAgICAyICAgIC0+ICAwLjQwMAorCitwcmVjaXNpb246IDYKK3JtbngzNzEgcmVtYWluZGVybmVhciAgIDIuNDAwICAyICAgICAgICAtPiAgMC40MDAKK3ByZWNpc2lvbjogMworcm1ueDM3MiByZW1haW5kZXJuZWFyICAgMTIzNDU2Nzg5MDAwMDAgMTJlKzEyIC0+IDMuNDZFKzExIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDUKK3JtbngzODEgcmVtYWluZGVybmVhciAxMjM0NSAgMSAgICAgICAgIC0+ICAwCitybW54MzgyIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDAwMSAgICAtPiAtMC4yMzQ0CitybW54MzgzIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDAxICAgICAtPiAtMC4zMzMKK3JtbngzODQgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMSAgICAgIC0+IC0wLjIzCitybW54Mzg1IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMSAgICAgICAtPiAtMC4zCitybW54Mzg2IHJlbWFpbmRlcm5lYXIgMTIzNTUgIDQgICAgICAgICAtPiAtMQorcm1ueDM4NyByZW1haW5kZXJuZWFyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDEKK3JtbngzODggcmVtYWluZGVybmVhciAxMjM1NSAgNC4wMDAxICAgIC0+IC0xLjMwODkKK3JtbngzODkgcmVtYWluZGVybmVhciAxMjM0NSAgNC4wMDAxICAgIC0+ICAwLjY5MTQKK3JtbngzOTAgcmVtYWluZGVybmVhciAxMjM0NSAgNC45ICAgICAgIC0+ICAxLjkKK3JtbngzOTEgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OSAgICAgIC0+IC0wLjI2CitybW54MzkyIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTk5ICAgICAtPiAgMi40NjkKK3JtbngzOTMgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OTk5ICAgIC0+ICAwLjI0NjkKK3JtbngzOTQgcmVtYWluZGVybmVhciAxMjM0NSAgNSAgICAgICAgIC0+ICAwCitybW54Mzk1IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDAwMSAgICAtPiAtMC4yNDY5CitybW54Mzk2IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDAxICAgICAtPiAtMi40NjkKK3JtbngzOTcgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMSAgICAgIC0+ICAwLjM2CitybW54Mzk4IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMSAgICAgICAtPiAtMi4xCisKK3ByZWNpc2lvbjogOQorLS0gc29tZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzIFtzb21lIHNpbWlsYXIgYWJvdmVdCitybW54NDAxIHJlbWFpbmRlcm5lYXIgICAwLjQgICAgICAgICAxICAgLT4gIDAuNAorcm1ueDQwMiByZW1haW5kZXJuZWFyICAgMC40NSAgICAgICAgMSAgIC0+ICAwLjQ1CitybW54NDAzIHJlbWFpbmRlcm5lYXIgICAwLjQ1NSAgICAgICAxICAgLT4gIDAuNDU1CitybW54NDA0IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTUgICAgICAxICAgLT4gIDAuNDU1NQorcm1ueDQwNSByZW1haW5kZXJuZWFyICAgMC40NTU1NSAgICAgMSAgIC0+ICAwLjQ1NTU1CitybW54NDA2IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NSAgICAxICAgLT4gIDAuNDU1NTU1CitybW54NDA3IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTUgICAxICAgLT4gIDAuNDU1NTU1NQorcm1ueDQwOCByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1NSAgMSAgIC0+ICAwLjQ1NTU1NTU1CitybW54NDA5IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1NSAxICAgLT4gIDAuNDU1NTU1NTU1CisKKy0tIHNvbWUgdHJpY2t5IExIU3MKK3Jtbng0MjAgcmVtYWluZGVybmVhciAgIDk5OTk5OTk5Ljk5OTk5OTk5OSAgIDFFKzggICAtPiAtMUUtOQorcm1ueDQyMSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuOTk5OTk5OTk5ICAgMUUrOSAgIC0+IC0xRS05CitwcmVjaXNpb246IDkKK3Jtbng0MzAgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTU1IDEgICAtPiAgMC40NTU1NTU1NTUKK3ByZWNpc2lvbjogOAorcm1ueDQzMSByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1NTUgMSAgIC0+ICAwLjQ1NTU1NTU2IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA3CitybW54NDMyIHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1NSAxICAgLT4gIDAuNDU1NTU1NiAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDYKK3Jtbng0MzMgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTU1IDEgICAtPiAgMC40NTU1NTYgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNQorcm1ueDQzNCByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1NTUgMSAgIC0+ICAwLjQ1NTU2ICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA0CitybW54NDM1IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1NSAxICAgLT4gIDAuNDU1NiAgICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDMKK3Jtbng0MzYgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTU1IDEgICAtPiAgMC40NTYgICAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMgorcm1ueDQzNyByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1NTUgMSAgIC0+ICAwLjQ2ICAgICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxCitybW54NDM4IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1NSAxICAgLT4gIDAuNSAgICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGVhcmx5IHRlc3RzOyBmcm9tIHRleHQgZGVzY3JpcHRpb25zCitwcmVjaXNpb246IDkKK3Jtbng2MDEgcmVtYWluZGVybmVhciAgMTAgICA2ICAtPiAtMgorcm1ueDYwMiByZW1haW5kZXJuZWFyIC0xMCAgIDYgIC0+IDIKK3Jtbng2MDMgcmVtYWluZGVybmVhciAgMTEgICAzICAtPiAtMQorcm1ueDYwNCByZW1haW5kZXJuZWFyICAxMSAgIDUgIC0+IDEKK3Jtbng2MDUgcmVtYWluZGVybmVhciAgIDcuNyA4ICAtPiAtMC4zCitybW54NjA2IHJlbWFpbmRlcm5lYXIgIDMxLjUgMyAgLT4gMS41ICAgIC0tIGk9MTAKK3Jtbng2MDcgcmVtYWluZGVybmVhciAgMzQuNSAzICAtPiAtMS41ICAgLS0gaT0xMQorCistLSB6ZXJvIHNpZ25zCitybW54NjUwIHJlbWFpbmRlcm5lYXIgIDEgIDEgLT4gIDAKK3Jtbng2NTEgcmVtYWluZGVybmVhciAtMSAgMSAtPiAtMAorcm1ueDY1MiByZW1haW5kZXJuZWFyICAxIC0xIC0+ICAwCitybW54NjUzIHJlbWFpbmRlcm5lYXIgLTEgLTEgLT4gLTAKK3Jtbng2NTQgcmVtYWluZGVybmVhciAgMCAgMSAtPiAgMAorcm1ueDY1NSByZW1haW5kZXJuZWFyIC0wICAxIC0+IC0wCitybW54NjU2IHJlbWFpbmRlcm5lYXIgIDAgLTEgLT4gIDAKK3Jtbng2NTcgcmVtYWluZGVybmVhciAtMCAtMSAtPiAtMAorcm1ueDY1OCByZW1haW5kZXJuZWFyICAwLjAwICAxICAtPiAgMC4wMAorcm1ueDY1OSByZW1haW5kZXJuZWFyIC0wLjAwICAxICAtPiAtMC4wMAorCistLSBTcGVjaWFscworcm1ueDY4MCByZW1haW5kZXJuZWFyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54NjgxIHJlbWFpbmRlcm5lYXIgIEluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jtbng2ODIgcmVtYWluZGVybmVhciAgSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDY4MyByZW1haW5kZXJuZWFyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54Njg0IHJlbWFpbmRlcm5lYXIgIEluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jtbng2ODUgcmVtYWluZGVybmVhciAgSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDY4NiByZW1haW5kZXJuZWFyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54Njg3IHJlbWFpbmRlcm5lYXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jtbng2ODggcmVtYWluZGVybmVhciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK3Jtbng2ODkgcmVtYWluZGVybmVhciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDY5MSByZW1haW5kZXJuZWFyIC0xICAgICBJbmYgICAtPiAtMQorcm1ueDY5MiByZW1haW5kZXJuZWFyICAwICAgICBJbmYgICAtPiAgMAorcm1ueDY5MyByZW1haW5kZXJuZWFyIC0wICAgICBJbmYgICAtPiAtMAorcm1ueDY5NCByZW1haW5kZXJuZWFyICAxICAgICBJbmYgICAtPiAgMQorcm1ueDY5NSByZW1haW5kZXJuZWFyICAxMDAwICBJbmYgICAtPiAgMTAwMAorcm1ueDY5NiByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3Jtbng3MDAgcmVtYWluZGVybmVhciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDcwMSByZW1haW5kZXJuZWFyIC1JbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54NzAyIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3MDMgcmVtYWluZGVybmVhciAtSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDcwNCByZW1haW5kZXJuZWFyIC1JbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54NzA1IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3MDYgcmVtYWluZGVybmVhciAtSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDcwNyByZW1haW5kZXJuZWFyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54NzA4IHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3MDkgcmVtYWluZGVybmVhciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKK3Jtbng3MTAgcmVtYWluZGVybmVhciAtMSAgICAtSW5mICAgLT4gLTEKK3Jtbng3MTEgcmVtYWluZGVybmVhciAtMCAgICAtSW5mICAgLT4gLTAKK3Jtbng3MTIgcmVtYWluZGVybmVhciAgMCAgICAtSW5mICAgLT4gIDAKK3Jtbng3MTMgcmVtYWluZGVybmVhciAgMSAgICAtSW5mICAgLT4gIDEKK3Jtbng3MTQgcmVtYWluZGVybmVhciAgMTAwMCAtSW5mICAgLT4gIDEwMDAKK3Jtbng3MTUgcmVtYWluZGVybmVhciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitybW54NzIxIHJlbWFpbmRlcm5lYXIgIE5hTiAtSW5mICAgIC0+ICBOYU4KK3Jtbng3MjIgcmVtYWluZGVybmVhciAgTmFOIC0xMDAwICAgLT4gIE5hTgorcm1ueDcyMyByZW1haW5kZXJuZWFyICBOYU4gLTEgICAgICAtPiAgTmFOCitybW54NzI0IHJlbWFpbmRlcm5lYXIgIE5hTiAtMCAgICAgIC0+ICBOYU4KK3Jtbng3MjUgcmVtYWluZGVybmVhciAgTmFOICAwICAgICAgLT4gIE5hTgorcm1ueDcyNiByZW1haW5kZXJuZWFyICBOYU4gIDEgICAgICAtPiAgTmFOCitybW54NzI3IHJlbWFpbmRlcm5lYXIgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK3Jtbng3MjggcmVtYWluZGVybmVhciAgTmFOICBJbmYgICAgLT4gIE5hTgorcm1ueDcyOSByZW1haW5kZXJuZWFyICBOYU4gIE5hTiAgICAtPiAgTmFOCitybW54NzMwIHJlbWFpbmRlcm5lYXIgLUluZiAgTmFOICAgIC0+ICBOYU4KK3Jtbng3MzEgcmVtYWluZGVybmVhciAtMTAwMCBOYU4gICAgLT4gIE5hTgorcm1ueDczMiByZW1haW5kZXJuZWFyIC0xICAgLU5hTiAgICAtPiAtTmFOCitybW54NzMzIHJlbWFpbmRlcm5lYXIgLTAgICAgTmFOICAgIC0+ICBOYU4KK3Jtbng3MzQgcmVtYWluZGVybmVhciAgMCAgICBOYU4gICAgLT4gIE5hTgorcm1ueDczNSByZW1haW5kZXJuZWFyICAxICAgIE5hTiAgICAtPiAgTmFOCitybW54NzM2IHJlbWFpbmRlcm5lYXIgIDEwMDAgTmFOICAgIC0+ICBOYU4KK3Jtbng3MzcgcmVtYWluZGVybmVhciAgSW5mICBOYU4gICAgLT4gIE5hTgorCitybW54NzQxIHJlbWFpbmRlcm5lYXIgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzQyIHJlbWFpbmRlcm5lYXIgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzQzIHJlbWFpbmRlcm5lYXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzQ0IHJlbWFpbmRlcm5lYXIgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzQ1IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzQ2IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzQ3IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzQ5IHJlbWFpbmRlcm5lYXIgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzUwIHJlbWFpbmRlcm5lYXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzUxIHJlbWFpbmRlcm5lYXIgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzUyIHJlbWFpbmRlcm5lYXIgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzUzIHJlbWFpbmRlcm5lYXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzU0IHJlbWFpbmRlcm5lYXIgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzU1IHJlbWFpbmRlcm5lYXIgLTAgICAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzU2IHJlbWFpbmRlcm5lYXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzU3IHJlbWFpbmRlcm5lYXIgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzU4IHJlbWFpbmRlcm5lYXIgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzU5IHJlbWFpbmRlcm5lYXIgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitybW54NzYwIHJlbWFpbmRlcm5lYXIgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2luZyBOYU5zCitybW54NzYxIHJlbWFpbmRlcm5lYXIgIE5hTjEgICBOYU43ICAgLT4gIE5hTjEKK3Jtbng3NjIgcmVtYWluZGVybmVhciBzTmFOMiAgIE5hTjggICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgorcm1ueDc2MyByZW1haW5kZXJuZWFyICBOYU4zIC1zTmFOOSAgIC0+IC1OYU45IEludmFsaWRfb3BlcmF0aW9uCitybW54NzY0IHJlbWFpbmRlcm5lYXIgc05hTjQgIHNOYU4xMCAgLT4gIE5hTjQgSW52YWxpZF9vcGVyYXRpb24KK3Jtbng3NjUgcmVtYWluZGVybmVhciAgICAxNSAgIE5hTjExICAtPiAgTmFOMTEKK3Jtbng3NjYgcmVtYWluZGVybmVhciAgTmFONiAgIE5hTjEyICAtPiAgTmFONgorcm1ueDc2NyByZW1haW5kZXJuZWFyICBJbmYgICAtTmFOMTMgIC0+IC1OYU4xMworcm1ueDc2OCByZW1haW5kZXJuZWFyICBOYU4xNCAgLUluZiAgIC0+ICBOYU4xNAorcm1ueDc2OSByZW1haW5kZXJuZWFyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQorcm1ueDc3MCByZW1haW5kZXJuZWFyIC1OYU4xNiAgIC0wICAgIC0+IC1OYU4xNgorCistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cKK21heGV4cG9uZW50OiA5OTk5OTk5OTkKK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5CitybW54NzgwIHJlbWFpbmRlcm5lYXIgMSAxZTk5OTk5OTk5OSAgICAtPiAxCitybW54NzgxIHJlbWFpbmRlcm5lYXIgMSAwLjllOTk5OTk5OTk5ICAtPiAxCitybW54NzgyIHJlbWFpbmRlcm5lYXIgMSAwLjk5ZTk5OTk5OTk5OSAtPiAxCitybW54NzgzIHJlbWFpbmRlcm5lYXIgMSAwLjk5OTk5OTk5OWU5OTk5OTk5OTkgLT4gMQorcm1ueDc4NCByZW1haW5kZXJuZWFyIDllOTk5OTk5OTk5ICAgICAgICAgIDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3Jtbng3ODUgcmVtYWluZGVybmVhciA5LjllOTk5OTk5OTk5ICAgICAgICAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCitybW54Nzg2IHJlbWFpbmRlcm5lYXIgOS45OWU5OTk5OTk5OTkgICAgICAgMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcm1ueDc4NyByZW1haW5kZXJuZWFyIDkuOTk5OTk5OTllOTk5OTk5OTk5IDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKKworCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0KK3ByZWNpc2lvbjogOQorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3Jtbng3OTAgcmVtYWluZGVybmVhciArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gMS4yMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKK3Jtbng3OTEgcmVtYWluZGVybmVhciA5RSs5OTk5OTk5OTkgKzAuMjM0NTY3ODkwMTIzNDVFLTAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKK3Jtbng3OTIgcmVtYWluZGVybmVhciArMC4xMDAgOUUrOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gMC4xMDAKK3Jtbng3OTMgcmVtYWluZGVybmVhciA5RS05OTk5OTk5OTkgKzkuMTAwICAgICAgICAgICAgICAgLT4gOUUtOTk5OTk5OTk5CitybW54Nzk1IHJlbWFpbmRlcm5lYXIgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+IC0xLjIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAorcm1ueDc5NiByZW1haW5kZXJuZWFyIDlFKzk5OTk5OTk5OSAtMC44MzQ1Njc4OTAxMjM0NUUtMCAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQorcm1ueDc5NyByZW1haW5kZXJuZWFyIC0wLjEwMCA5RSs5OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAtMC4xMDAKK3Jtbng3OTggcmVtYWluZGVybmVhciA5RS05OTk5OTk5OTkgLTkuMTAwICAgICAgICAgICAgICAgLT4gOUUtOTk5OTk5OTk5CisKKy0tIGxvbmcgb3BlcmFuZHMgY2hlY2tzCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA5CitybW54ODAxIHJlbWFpbmRlcm5lYXIgMTIzNDU2NzgwMDAgMTAwIC0+IDAKK3Jtbng4MDIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAwICAgLT4gMQorcm1ueDgwMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitybW54ODA0IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODAwICAgIC0+IDEKK3Jtbng4MDUgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwICAxMCAgLT4gMAorcm1ueDgwNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitybW54ODA3IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDEKK3Jtbng4MDggcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTEgICAgLT4gMQorcm1ueDgwOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitybW54ODEwIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK3Jtbng4MTEgcmVtYWluZGVybmVhciAxMjM0NTY3ODk2ICAxMCAgLT4gLTQKK3Jtbng4MTIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCitwcmVjaXNpb246IDE1CitybW54ODQxIHJlbWFpbmRlcm5lYXIgMTIzNDU2NzgwMDAgMTAwIC0+IDAKK3Jtbng4NDIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAwICAgLT4gMQorcm1ueDg0MyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCitybW54ODQ0IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODAwICAgIC0+IDEKK3Jtbng4NDUgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwICAxMCAgLT4gMAorcm1ueDg0NiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCitybW54ODQ3IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDEKK3Jtbng4NDggcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTEgICAgLT4gMQorcm1ueDg0OSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCitybW54ODUwIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkwMSAgIC0+IDEKK3Jtbng4NTEgcmVtYWluZGVybmVhciAxMjM0NTY3ODk2ICAxMCAgLT4gLTQKK3Jtbng4NTIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQorCistLSBOdWxsIHRlc3RzCitybW54OTAwIHJlbWFpbmRlcm5lYXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitybW54OTAxIHJlbWFpbmRlcm5lYXIgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3Jlc2NhbGUuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcmVzY2FsZS5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZDkzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3Jlc2NhbGUuZGVjVGVzdApAQCAtMCwwICsxLDc2NCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSByZXNjYWxlLmRlY1Rlc3QgLS0gZGVjaW1hbCByZXNjYWxlIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKKy0tIFtvYnNvbGV0ZV0gICBRdWFudGl6ZS5kZWNUZXN0IGhhcyB0aGUgaW1wcm92ZWQgdmVyc2lvbgorCistLSAyMDA0LjAzLjE1IFVuZGVyZmxvdyBmb3IgcXVhbnRpemUgaXMgc3VwcHJlc3NlZAorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorCistLSBzYW5pdHkgY2hlY2tzCisKK3Jlc3gwMDEgcmVzY2FsZSAwICAgICAgIDAgICAtPiAwCityZXN4MDAyIHJlc2NhbGUgMSAgICAgICAwICAgLT4gMQorcmVzeDAwMyByZXNjYWxlIDAuMSAgICArMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4MDA1IHJlc2NhbGUgMC4xICAgICsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gwMDYgcmVzY2FsZSAwLjEgICAgIDAgICAtPiAwIEluZXhhY3QgUm91bmRlZAorcmVzeDAwNyByZXNjYWxlIDAuMSAgICAtMSAgIC0+IDAuMQorcmVzeDAwOCByZXNjYWxlIDAuMSAgICAtMiAgIC0+IDAuMTAKK3Jlc3gwMDkgcmVzY2FsZSAwLjEgICAgLTMgICAtPiAwLjEwMAorcmVzeDAxMCByZXNjYWxlIDAuOSAgICArMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4MDExIHJlc2NhbGUgMC45ICAgICsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gwMTIgcmVzY2FsZSAwLjkgICAgKzAgICAtPiAxIEluZXhhY3QgUm91bmRlZAorcmVzeDAxMyByZXNjYWxlIDAuOSAgICAtMSAgIC0+IDAuOQorcmVzeDAxNCByZXNjYWxlIDAuOSAgICAtMiAgIC0+IDAuOTAKK3Jlc3gwMTUgcmVzY2FsZSAwLjkgICAgLTMgICAtPiAwLjkwMAorLS0gbmVnYXRpdmVzCityZXN4MDIxIHJlc2NhbGUgLTAgICAgICAwICAgLT4gLTAKK3Jlc3gwMjIgcmVzY2FsZSAtMSAgICAgIDAgICAtPiAtMQorcmVzeDAyMyByZXNjYWxlIC0wLjEgICArMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorcmVzeDAyNSByZXNjYWxlIC0wLjEgICArMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDAyNiByZXNjYWxlIC0wLjEgICAgMCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAorcmVzeDAyNyByZXNjYWxlIC0wLjEgICAtMSAgIC0+IC0wLjEKK3Jlc3gwMjggcmVzY2FsZSAtMC4xICAgLTIgICAtPiAtMC4xMAorcmVzeDAyOSByZXNjYWxlIC0wLjEgICAtMyAgIC0+IC0wLjEwMAorcmVzeDAzMCByZXNjYWxlIC0wLjkgICArMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorcmVzeDAzMSByZXNjYWxlIC0wLjkgICArMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDAzMiByZXNjYWxlIC0wLjkgICArMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAorcmVzeDAzMyByZXNjYWxlIC0wLjkgICAtMSAgIC0+IC0wLjkKK3Jlc3gwMzQgcmVzY2FsZSAtMC45ICAgLTIgICAtPiAtMC45MAorcmVzeDAzNSByZXNjYWxlIC0wLjkgICAtMyAgIC0+IC0wLjkwMAorcmVzeDAzNiByZXNjYWxlIC0wLjUgICArMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorcmVzeDAzNyByZXNjYWxlIC0wLjUgICArMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDAzOCByZXNjYWxlIC0wLjUgICArMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAorcmVzeDAzOSByZXNjYWxlIC0wLjUgICAtMSAgIC0+IC0wLjUKK3Jlc3gwNDAgcmVzY2FsZSAtMC41ICAgLTIgICAtPiAtMC41MAorcmVzeDA0MSByZXNjYWxlIC0wLjUgICAtMyAgIC0+IC0wLjUwMAorcmVzeDA0MiByZXNjYWxlIC0wLjkgICArMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorcmVzeDA0MyByZXNjYWxlIC0wLjkgICArMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDA0NCByZXNjYWxlIC0wLjkgICArMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAorcmVzeDA0NSByZXNjYWxlIC0wLjkgICAtMSAgIC0+IC0wLjkKK3Jlc3gwNDYgcmVzY2FsZSAtMC45ICAgLTIgICAtPiAtMC45MAorcmVzeDA0NyByZXNjYWxlIC0wLjkgICAtMyAgIC0+IC0wLjkwMAorCistLSBleGFtcGxlcyBmcm9tIFNwZWNpZmljYXRpb24KK3Jlc3gwNjAgcmVzY2FsZSAyLjE3ICAgLTMgICAtPiAyLjE3MAorcmVzeDA2MSByZXNjYWxlIDIuMTcgICAtMiAgIC0+IDIuMTcKK3Jlc3gwNjIgcmVzY2FsZSAyLjE3ICAgLTEgICAtPiAyLjIgSW5leGFjdCBSb3VuZGVkCityZXN4MDYzIHJlc2NhbGUgMi4xNyAgICAwICAgLT4gMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gwNjQgcmVzY2FsZSAyLjE3ICAgKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDA2NSByZXNjYWxlIDIgICAgICBJbmYgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDA2NiByZXNjYWxlIC0wLjEgICAgMCAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAorcmVzeDA2NyByZXNjYWxlIC0wICAgICAgNSAgIC0+IC0wRSs1CityZXN4MDY4IHJlc2NhbGUgKzM1MjM2NDUwLjYgLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4MDY5IHJlc2NhbGUgLTM1MjM2NDUwLjYgLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4MDcwIHJlc2NhbGUgMjE3ICAgIC0xICAgLT4gMjE3LjAKK3Jlc3gwNzEgcmVzY2FsZSAyMTcgICAgIDAgICAtPiAyMTcKK3Jlc3gwNzIgcmVzY2FsZSAyMTcgICAgKzEgICAtPiAyLjJFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4MDczIHJlc2NhbGUgMjE3ICAgICsyICAgLT4gMkUrMiBJbmV4YWN0IFJvdW5kZWQKKworLS0gZ2VuZXJhbCB0ZXN0cyAuLgorcmVzeDA4OSByZXNjYWxlIDEyICAgICArNCAgIC0+IDBFKzQgSW5leGFjdCBSb3VuZGVkCityZXN4MDkwIHJlc2NhbGUgMTIgICAgICszICAgLT4gMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gwOTEgcmVzY2FsZSAxMiAgICAgKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAorcmVzeDA5MiByZXNjYWxlIDEyICAgICArMSAgIC0+IDFFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4MDkzIHJlc2NhbGUgMS4yMzQ1IC0yICAgLT4gMS4yMyBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gwOTQgcmVzY2FsZSAxLjIzNTUgLTIgICAtPiAxLjI0IEluZXhhY3QgUm91bmRlZAorcmVzeDA5NSByZXNjYWxlIDEuMjM0NSAtNiAgIC0+IDEuMjM0NTAwCityZXN4MDk2IHJlc2NhbGUgOS45OTk5IC0yICAgLT4gMTAuMDAgSW5leGFjdCBSb3VuZGVkCityZXN4MDk3IHJlc2NhbGUgMC4wMDAxIC0yICAgLT4gMC4wMCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gwOTggcmVzY2FsZSAwLjAwMSAgLTIgICAtPiAwLjAwIEluZXhhY3QgUm91bmRlZAorcmVzeDA5OSByZXNjYWxlIDAuMDA5ICAtMiAgIC0+IDAuMDEgSW5leGFjdCBSb3VuZGVkCityZXN4MTAwIHJlc2NhbGUgOTIgICAgICsyICAgLT4gMUUrMiBJbmV4YWN0IFJvdW5kZWQKKworcmVzeDEwMSByZXNjYWxlIC0xICAgICAgMCAgIC0+ICAtMQorcmVzeDEwMiByZXNjYWxlIC0xICAgICAtMSAgIC0+ICAtMS4wCityZXN4MTAzIHJlc2NhbGUgLTEgICAgIC0yICAgLT4gIC0xLjAwCityZXN4MTA0IHJlc2NhbGUgIDAgICAgICAwICAgLT4gIDAKK3Jlc3gxMDUgcmVzY2FsZSAgMCAgICAgLTEgICAtPiAgMC4wCityZXN4MTA2IHJlc2NhbGUgIDAgICAgIC0yICAgLT4gIDAuMDAKK3Jlc3gxMDcgcmVzY2FsZSAgMC4wMCAgIDAgICAtPiAgMAorcmVzeDEwOCByZXNjYWxlICAwICAgICArMSAgIC0+ICAwRSsxCityZXN4MTA5IHJlc2NhbGUgIDAgICAgICsyICAgLT4gIDBFKzIKK3Jlc3gxMTAgcmVzY2FsZSArMSAgICAgIDAgICAtPiAgMQorcmVzeDExMSByZXNjYWxlICsxICAgICAtMSAgIC0+ICAxLjAKK3Jlc3gxMTIgcmVzY2FsZSArMSAgICAgLTIgICAtPiAgMS4wMAorCityZXN4MTIwIHJlc2NhbGUgICAxLjA0ICAtMyAtPiAgMS4wNDAKK3Jlc3gxMjEgcmVzY2FsZSAgIDEuMDQgIC0yIC0+ICAxLjA0CityZXN4MTIyIHJlc2NhbGUgICAxLjA0ICAtMSAtPiAgMS4wIEluZXhhY3QgUm91bmRlZAorcmVzeDEyMyByZXNjYWxlICAgMS4wNCAgIDAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCityZXN4MTI0IHJlc2NhbGUgICAxLjA1ICAtMyAtPiAgMS4wNTAKK3Jlc3gxMjUgcmVzY2FsZSAgIDEuMDUgIC0yIC0+ICAxLjA1CityZXN4MTI2IHJlc2NhbGUgICAxLjA1ICAtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZAorcmVzeDEyNyByZXNjYWxlICAgMS4wNSAgIDAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCityZXN4MTI4IHJlc2NhbGUgICAxLjA1ICAtMyAtPiAgMS4wNTAKK3Jlc3gxMjkgcmVzY2FsZSAgIDEuMDUgIC0yIC0+ICAxLjA1CityZXN4MTMwIHJlc2NhbGUgICAxLjA1ICAtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZAorcmVzeDEzMSByZXNjYWxlICAgMS4wNSAgIDAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCityZXN4MTMyIHJlc2NhbGUgICAxLjA2ICAtMyAtPiAgMS4wNjAKK3Jlc3gxMzMgcmVzY2FsZSAgIDEuMDYgIC0yIC0+ICAxLjA2CityZXN4MTM0IHJlc2NhbGUgICAxLjA2ICAtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZAorcmVzeDEzNSByZXNjYWxlICAgMS4wNiAgIDAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCisKK3Jlc3gxNDAgcmVzY2FsZSAgIC0xMCAgICAtMiAgLT4gIC0xMC4wMAorcmVzeDE0MSByZXNjYWxlICAgKzEgICAgIC0yICAtPiAgMS4wMAorcmVzeDE0MiByZXNjYWxlICAgKzEwICAgIC0yICAtPiAgMTAuMDAKK3Jlc3gxNDMgcmVzY2FsZSAgIDFFKzEwICAtMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDE0NCByZXNjYWxlICAgMUUtMTAgIC0yICAtPiAgMC4wMCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gxNDUgcmVzY2FsZSAgIDFFLTMgICAtMiAgLT4gIDAuMDAgSW5leGFjdCBSb3VuZGVkCityZXN4MTQ2IHJlc2NhbGUgICAxRS0yICAgLTIgIC0+ICAwLjAxCityZXN4MTQ3IHJlc2NhbGUgICAxRS0xICAgLTIgIC0+ICAwLjEwCityZXN4MTQ4IHJlc2NhbGUgICAwRS0xMCAgLTIgIC0+ICAwLjAwCisKK3Jlc3gxNTAgcmVzY2FsZSAgIDEuMDYwMCAtNSAtPiAgMS4wNjAwMAorcmVzeDE1MSByZXNjYWxlICAgMS4wNjAwIC00IC0+ICAxLjA2MDAKK3Jlc3gxNTIgcmVzY2FsZSAgIDEuMDYwMCAtMyAtPiAgMS4wNjAgUm91bmRlZAorcmVzeDE1MyByZXNjYWxlICAgMS4wNjAwIC0yIC0+ICAxLjA2IFJvdW5kZWQKK3Jlc3gxNTQgcmVzY2FsZSAgIDEuMDYwMCAtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZAorcmVzeDE1NSByZXNjYWxlICAgMS4wNjAwICAwIC0+ICAxIEluZXhhY3QgUm91bmRlZAorCistLSArdmUgZXhwb25lbnRzIC4uCityZXN4MjAxIHJlc2NhbGUgICAtMSAgICswIC0+ICAtMQorcmVzeDIwMiByZXNjYWxlICAgLTEgICArMSAtPiAgLTBFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4MjAzIHJlc2NhbGUgICAtMSAgICsyIC0+ICAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyMDQgcmVzY2FsZSAgICAwICAgKzAgLT4gIDAKK3Jlc3gyMDUgcmVzY2FsZSAgICAwICAgKzEgLT4gIDBFKzEKK3Jlc3gyMDYgcmVzY2FsZSAgICAwICAgKzIgLT4gIDBFKzIKK3Jlc3gyMDcgcmVzY2FsZSAgICsxICAgKzAgLT4gIDEKK3Jlc3gyMDggcmVzY2FsZSAgICsxICAgKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4MjA5IHJlc2NhbGUgICArMSAgICsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCityZXN4MjIwIHJlc2NhbGUgICAxLjA0ICszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorcmVzeDIyMSByZXNjYWxlICAgMS4wNCArMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyMjIgcmVzY2FsZSAgIDEuMDQgKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4MjIzIHJlc2NhbGUgICAxLjA0ICswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorcmVzeDIyNCByZXNjYWxlICAgMS4wNSArMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyMjUgcmVzY2FsZSAgIDEuMDUgKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4MjI2IHJlc2NhbGUgICAxLjA1ICsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDIyNyByZXNjYWxlICAgMS4wNSArMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyMjggcmVzY2FsZSAgIDEuMDUgKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCityZXN4MjI5IHJlc2NhbGUgICAxLjA1ICsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorcmVzeDIzMCByZXNjYWxlICAgMS4wNSArMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyMzEgcmVzY2FsZSAgIDEuMDUgKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCityZXN4MjMyIHJlc2NhbGUgICAxLjA2ICszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAorcmVzeDIzMyByZXNjYWxlICAgMS4wNiArMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyMzQgcmVzY2FsZSAgIDEuMDYgKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4MjM1IHJlc2NhbGUgICAxLjA2ICswIC0+ICAxIEluZXhhY3QgUm91bmRlZAorCityZXN4MjQwIHJlc2NhbGUgICAtMTAgICArMSAgLT4gIC0xRSsxIFJvdW5kZWQKK3Jlc3gyNDEgcmVzY2FsZSAgICsxICAgICsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyNDIgcmVzY2FsZSAgICsxMCAgICsxICAtPiAgMUUrMSBSb3VuZGVkCityZXN4MjQzIHJlc2NhbGUgICAxRSsxICArMSAgLT4gIDFFKzEgICAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorcmVzeDI0NCByZXNjYWxlICAgMUUrMiAgKzEgIC0+ICAxLjBFKzIgICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK3Jlc3gyNDUgcmVzY2FsZSAgIDFFKzMgICsxICAtPiAgMS4wMEUrMyAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCityZXN4MjQ2IHJlc2NhbGUgICAxRSs0ICArMSAgLT4gIDEuMDAwRSs0ICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorcmVzeDI0NyByZXNjYWxlICAgMUUrNSAgKzEgIC0+ICAxLjAwMDBFKzUgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK3Jlc3gyNDggcmVzY2FsZSAgIDFFKzYgICsxICAtPiAgMS4wMDAwMEUrNiAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCityZXN4MjQ5IHJlc2NhbGUgICAxRSs3ICArMSAgLT4gIDEuMDAwMDAwRSs3ICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQorcmVzeDI1MCByZXNjYWxlICAgMUUrOCAgKzEgIC0+ICAxLjAwMDAwMDBFKzggIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKK3Jlc3gyNTEgcmVzY2FsZSAgIDFFKzkgICsxICAtPiAgMS4wMDAwMDAwMEUrOSAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCistLSBuZXh0IG9uZSB0cmllcyB0byBhZGQgOSB6ZXJvcworcmVzeDI1MiByZXNjYWxlICAgMUUrMTAgKzEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3gyNTMgcmVzY2FsZSAgIDFFLTEwICsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyNTQgcmVzY2FsZSAgIDFFLTIgICsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyNTUgcmVzY2FsZSAgIDBFLTEwICsxICAtPiAgMEUrMQorcmVzeDI1NiByZXNjYWxlICAtMEUtMTAgKzEgIC0+IC0wRSsxCityZXN4MjU3IHJlc2NhbGUgIC0wRS0xICArMSAgLT4gLTBFKzEKK3Jlc3gyNTggcmVzY2FsZSAgLTAgICAgICsxICAtPiAtMEUrMQorcmVzeDI1OSByZXNjYWxlICAtMEUrMSAgKzEgIC0+IC0wRSsxCisKK3Jlc3gyNjAgcmVzY2FsZSAgIC0xMCAgICsyICAtPiAgLTBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4MjYxIHJlc2NhbGUgICArMSAgICArMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4MjYyIHJlc2NhbGUgICArMTAgICArMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4MjYzIHJlc2NhbGUgICAxRSsxICArMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4MjY0IHJlc2NhbGUgICAxRSsyICArMiAgLT4gIDFFKzIKK3Jlc3gyNjUgcmVzY2FsZSAgIDFFKzMgICsyICAtPiAgMS4wRSszCityZXN4MjY2IHJlc2NhbGUgICAxRSs0ICArMiAgLT4gIDEuMDBFKzQKK3Jlc3gyNjcgcmVzY2FsZSAgIDFFKzUgICsyICAtPiAgMS4wMDBFKzUKK3Jlc3gyNjggcmVzY2FsZSAgIDFFKzYgICsyICAtPiAgMS4wMDAwRSs2CityZXN4MjY5IHJlc2NhbGUgICAxRSs3ICArMiAgLT4gIDEuMDAwMDBFKzcKK3Jlc3gyNzAgcmVzY2FsZSAgIDFFKzggICsyICAtPiAgMS4wMDAwMDBFKzgKK3Jlc3gyNzEgcmVzY2FsZSAgIDFFKzkgICsyICAtPiAgMS4wMDAwMDAwRSs5CityZXN4MjcyIHJlc2NhbGUgICAxRSsxMCArMiAgLT4gIDEuMDAwMDAwMDBFKzEwCityZXN4MjczIHJlc2NhbGUgICAxRS0xMCArMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4Mjc0IHJlc2NhbGUgICAxRS0yICArMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCityZXN4Mjc1IHJlc2NhbGUgICAwRS0xMCArMiAgLT4gIDBFKzIKKworcmVzeDI4MCByZXNjYWxlICAgLTEwICAgKzMgIC0+ICAtMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyODEgcmVzY2FsZSAgICsxICAgICszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyODIgcmVzY2FsZSAgICsxMCAgICszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyODMgcmVzY2FsZSAgIDFFKzEgICszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyODQgcmVzY2FsZSAgIDFFKzIgICszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gyODUgcmVzY2FsZSAgIDFFKzMgICszICAtPiAgMUUrMworcmVzeDI4NiByZXNjYWxlICAgMUUrNCAgKzMgIC0+ICAxLjBFKzQKK3Jlc3gyODcgcmVzY2FsZSAgIDFFKzUgICszICAtPiAgMS4wMEUrNQorcmVzeDI4OCByZXNjYWxlICAgMUUrNiAgKzMgIC0+ICAxLjAwMEUrNgorcmVzeDI4OSByZXNjYWxlICAgMUUrNyAgKzMgIC0+ICAxLjAwMDBFKzcKK3Jlc3gyOTAgcmVzY2FsZSAgIDFFKzggICszICAtPiAgMS4wMDAwMEUrOAorcmVzeDI5MSByZXNjYWxlICAgMUUrOSAgKzMgIC0+ICAxLjAwMDAwMEUrOQorcmVzeDI5MiByZXNjYWxlICAgMUUrMTAgKzMgIC0+ICAxLjAwMDAwMDBFKzEwCityZXN4MjkzIHJlc2NhbGUgICAxRS0xMCArMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCityZXN4Mjk0IHJlc2NhbGUgICAxRS0yICArMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCityZXN4Mjk1IHJlc2NhbGUgICAwRS0xMCArMyAgLT4gIDBFKzMKKworLS0gcm91bmQgdXAgZnJvbSBiZWxvdyBbc2lnbiB3cm9uZyBpbiBKSVQgY29tcGlsZXIgb25jZV0KK3Jlc3gzMDAgcmVzY2FsZSAgIDAuMDA3OCAtNSAtPiAgMC4wMDc4MAorcmVzeDMwMSByZXNjYWxlICAgMC4wMDc4IC00IC0+ICAwLjAwNzgKK3Jlc3gzMDIgcmVzY2FsZSAgIDAuMDA3OCAtMyAtPiAgMC4wMDggSW5leGFjdCBSb3VuZGVkCityZXN4MzAzIHJlc2NhbGUgICAwLjAwNzggLTIgLT4gIDAuMDEgSW5leGFjdCBSb3VuZGVkCityZXN4MzA0IHJlc2NhbGUgICAwLjAwNzggLTEgLT4gIDAuMCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzMDUgcmVzY2FsZSAgIDAuMDA3OCAgMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzMDYgcmVzY2FsZSAgIDAuMDA3OCArMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzMDcgcmVzY2FsZSAgIDAuMDA3OCArMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworcmVzeDMxMCByZXNjYWxlICAtMC4wMDc4IC01IC0+IC0wLjAwNzgwCityZXN4MzExIHJlc2NhbGUgIC0wLjAwNzggLTQgLT4gLTAuMDA3OAorcmVzeDMxMiByZXNjYWxlICAtMC4wMDc4IC0zIC0+IC0wLjAwOCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzMTMgcmVzY2FsZSAgLTAuMDA3OCAtMiAtPiAtMC4wMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzMTQgcmVzY2FsZSAgLTAuMDA3OCAtMSAtPiAtMC4wIEluZXhhY3QgUm91bmRlZAorcmVzeDMxNSByZXNjYWxlICAtMC4wMDc4ICAwIC0+IC0wIEluZXhhY3QgUm91bmRlZAorcmVzeDMxNiByZXNjYWxlICAtMC4wMDc4ICsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDMxNyByZXNjYWxlICAtMC4wMDc4ICsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorCityZXN4MzIwIHJlc2NhbGUgICAwLjA3OCAtNSAtPiAgMC4wNzgwMAorcmVzeDMyMSByZXNjYWxlICAgMC4wNzggLTQgLT4gIDAuMDc4MAorcmVzeDMyMiByZXNjYWxlICAgMC4wNzggLTMgLT4gIDAuMDc4CityZXN4MzIzIHJlc2NhbGUgICAwLjA3OCAtMiAtPiAgMC4wOCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzMjQgcmVzY2FsZSAgIDAuMDc4IC0xIC0+ICAwLjEgSW5leGFjdCBSb3VuZGVkCityZXN4MzI1IHJlc2NhbGUgICAwLjA3OCAgMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzMjYgcmVzY2FsZSAgIDAuMDc4ICsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDMyNyByZXNjYWxlICAgMC4wNzggKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCisKK3Jlc3gzMzAgcmVzY2FsZSAgLTAuMDc4IC01IC0+IC0wLjA3ODAwCityZXN4MzMxIHJlc2NhbGUgIC0wLjA3OCAtNCAtPiAtMC4wNzgwCityZXN4MzMyIHJlc2NhbGUgIC0wLjA3OCAtMyAtPiAtMC4wNzgKK3Jlc3gzMzMgcmVzY2FsZSAgLTAuMDc4IC0yIC0+IC0wLjA4IEluZXhhY3QgUm91bmRlZAorcmVzeDMzNCByZXNjYWxlICAtMC4wNzggLTEgLT4gLTAuMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzMzUgcmVzY2FsZSAgLTAuMDc4ICAwIC0+IC0wIEluZXhhY3QgUm91bmRlZAorcmVzeDMzNiByZXNjYWxlICAtMC4wNzggKzEgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4MzM3IHJlc2NhbGUgIC0wLjA3OCArMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKKworcmVzeDM0MCByZXNjYWxlICAgMC43OCAtNSAtPiAgMC43ODAwMAorcmVzeDM0MSByZXNjYWxlICAgMC43OCAtNCAtPiAgMC43ODAwCityZXN4MzQyIHJlc2NhbGUgICAwLjc4IC0zIC0+ICAwLjc4MAorcmVzeDM0MyByZXNjYWxlICAgMC43OCAtMiAtPiAgMC43OAorcmVzeDM0NCByZXNjYWxlICAgMC43OCAtMSAtPiAgMC44IEluZXhhY3QgUm91bmRlZAorcmVzeDM0NSByZXNjYWxlICAgMC43OCAgMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzNDYgcmVzY2FsZSAgIDAuNzggKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCityZXN4MzQ3IHJlc2NhbGUgICAwLjc4ICsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAorCityZXN4MzUwIHJlc2NhbGUgIC0wLjc4IC01IC0+IC0wLjc4MDAwCityZXN4MzUxIHJlc2NhbGUgIC0wLjc4IC00IC0+IC0wLjc4MDAKK3Jlc3gzNTIgcmVzY2FsZSAgLTAuNzggLTMgLT4gLTAuNzgwCityZXN4MzUzIHJlc2NhbGUgIC0wLjc4IC0yIC0+IC0wLjc4CityZXN4MzU0IHJlc2NhbGUgIC0wLjc4IC0xIC0+IC0wLjggSW5leGFjdCBSb3VuZGVkCityZXN4MzU1IHJlc2NhbGUgIC0wLjc4ICAwIC0+IC0xIEluZXhhY3QgUm91bmRlZAorcmVzeDM1NiByZXNjYWxlICAtMC43OCArMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzNTcgcmVzY2FsZSAgLTAuNzggKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCisKK3Jlc3gzNjAgcmVzY2FsZSAgIDcuOCAtNSAtPiAgNy44MDAwMAorcmVzeDM2MSByZXNjYWxlICAgNy44IC00IC0+ICA3LjgwMDAKK3Jlc3gzNjIgcmVzY2FsZSAgIDcuOCAtMyAtPiAgNy44MDAKK3Jlc3gzNjMgcmVzY2FsZSAgIDcuOCAtMiAtPiAgNy44MAorcmVzeDM2NCByZXNjYWxlICAgNy44IC0xIC0+ICA3LjgKK3Jlc3gzNjUgcmVzY2FsZSAgIDcuOCAgMCAtPiAgOCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzNjYgcmVzY2FsZSAgIDcuOCArMSAtPiAgMUUrMSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzNjcgcmVzY2FsZSAgIDcuOCArMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzNjggcmVzY2FsZSAgIDcuOCArMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKKworcmVzeDM3MCByZXNjYWxlICAtNy44IC01IC0+IC03LjgwMDAwCityZXN4MzcxIHJlc2NhbGUgIC03LjggLTQgLT4gLTcuODAwMAorcmVzeDM3MiByZXNjYWxlICAtNy44IC0zIC0+IC03LjgwMAorcmVzeDM3MyByZXNjYWxlICAtNy44IC0yIC0+IC03LjgwCityZXN4Mzc0IHJlc2NhbGUgIC03LjggLTEgLT4gLTcuOAorcmVzeDM3NSByZXNjYWxlICAtNy44ICAwIC0+IC04IEluZXhhY3QgUm91bmRlZAorcmVzeDM3NiByZXNjYWxlICAtNy44ICsxIC0+IC0xRSsxIEluZXhhY3QgUm91bmRlZAorcmVzeDM3NyByZXNjYWxlICAtNy44ICsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAorcmVzeDM3OCByZXNjYWxlICAtNy44ICszIC0+IC0wRSszIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIGluZGl2aWR1YWxzCitwcmVjaXNpb246IDkKK3Jlc3gzODAgcmVzY2FsZSAgIDM1MjM2NC41MDYgLTIgLT4gMzUyMzY0LjUxIEluZXhhY3QgUm91bmRlZAorcmVzeDM4MSByZXNjYWxlICAgMzUyMzY0NS4wNiAtMiAtPiAzNTIzNjQ1LjA2CityZXN4MzgyIHJlc2NhbGUgICAzNTIzNjQ1MC42IC0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDM4MyByZXNjYWxlICAgMzUyMzY0NTA2ICAtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3gzODQgcmVzY2FsZSAgLTM1MjM2NC41MDYgLTIgLT4gLTM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3gzODUgcmVzY2FsZSAgLTM1MjM2NDUuMDYgLTIgLT4gLTM1MjM2NDUuMDYKK3Jlc3gzODYgcmVzY2FsZSAgLTM1MjM2NDUwLjYgLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4Mzg3IHJlc2NhbGUgIC0zNTIzNjQ1MDYgIC0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCityb3VuZGluZzogZG93bgorcmVzeDM4OSByZXNjYWxlICAgMzUyMzY0NTAuNiAtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tID8gc2hvdWxkIHRoYXQgb25lIGluc3RlYWQgaGF2ZSBiZWVuOgorLS0gcmVzeDM4OSByZXNjYWxlICAgMzUyMzY0NTAuNiAtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdW5kaW5nOiBoYWxmX3VwCisKKy0tIGFuZCBhIGZldyBtb3JlIGZyb20gZS1tYWlsIGRpc2N1c3Npb25zCitwcmVjaXNpb246IDcKK3Jlc3gzOTEgcmVzY2FsZSAgMTIuMzQ1NjcgIC0zIC0+IDEyLjM0NiAgIEluZXhhY3QgUm91bmRlZAorcmVzeDM5MiByZXNjYWxlICAxMjMuNDU2NyAgLTMgLT4gMTIzLjQ1NyAgSW5leGFjdCBSb3VuZGVkCityZXN4MzkzIHJlc2NhbGUgIDEyMzQuNTY3ICAtMyAtPiAxMjM0LjU2NworcmVzeDM5NCByZXNjYWxlICAxMjM0NS42NyAgLTMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4Mzk1IHJlc2NhbGUgIDEyMzQ1Ni43ICAtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3gzOTYgcmVzY2FsZSAgMTIzNDU2Ny4gIC0zIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBzb21lIDk5OTkgcm91bmQtdXAgY2FzZXMKK3ByZWNpc2lvbjogOQorcmVzeDQwMCByZXNjYWxlICAgOS45OTkgICAgICAgIC01ICAtPiAgOS45OTkwMAorcmVzeDQwMSByZXNjYWxlICAgOS45OTkgICAgICAgIC00ICAtPiAgOS45OTkwCityZXN4NDAyIHJlc2NhbGUgICA5Ljk5OSAgICAgICAgLTMgIC0+ICA5Ljk5OQorcmVzeDQwMyByZXNjYWxlICAgOS45OTkgICAgICAgIC0yICAtPiAxMC4wMCAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDA0IHJlc2NhbGUgICA5Ljk5OSAgICAgICAgLTEgIC0+IDEwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0MDUgcmVzY2FsZSAgIDkuOTk5ICAgICAgICAgMCAgLT4gMTAgICAgICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDQwNiByZXNjYWxlICAgOS45OTkgICAgICAgICAxICAtPiAxRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDA3IHJlc2NhbGUgICA5Ljk5OSAgICAgICAgIDIgIC0+IDBFKzIgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcmVzeDQxMCByZXNjYWxlICAgMC45OTkgICAgICAgIC01ICAtPiAgMC45OTkwMAorcmVzeDQxMSByZXNjYWxlICAgMC45OTkgICAgICAgIC00ICAtPiAgMC45OTkwCityZXN4NDEyIHJlc2NhbGUgICAwLjk5OSAgICAgICAgLTMgIC0+ICAwLjk5OQorcmVzeDQxMyByZXNjYWxlICAgMC45OTkgICAgICAgIC0yICAtPiAgMS4wMCAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDE0IHJlc2NhbGUgICAwLjk5OSAgICAgICAgLTEgIC0+ICAxLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0MTUgcmVzY2FsZSAgIDAuOTk5ICAgICAgICAgMCAgLT4gIDEgICAgICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDQxNiByZXNjYWxlICAgMC45OTkgICAgICAgICAxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKK3Jlc3g0MjAgcmVzY2FsZSAgIDAuMDk5OSAgICAgICAtNSAgLT4gIDAuMDk5OTAKK3Jlc3g0MjEgcmVzY2FsZSAgIDAuMDk5OSAgICAgICAtNCAgLT4gIDAuMDk5OQorcmVzeDQyMiByZXNjYWxlICAgMC4wOTk5ICAgICAgIC0zICAtPiAgMC4xMDAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDIzIHJlc2NhbGUgICAwLjA5OTkgICAgICAgLTIgIC0+ICAwLjEwICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0MjQgcmVzY2FsZSAgIDAuMDk5OSAgICAgICAtMSAgLT4gIDAuMSAgICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDQyNSByZXNjYWxlICAgMC4wOTk5ICAgICAgICAwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDI2IHJlc2NhbGUgICAwLjA5OTkgICAgICAgIDEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcmVzeDQzMCByZXNjYWxlICAgMC4wMDk5OSAgICAgIC01ICAtPiAgMC4wMDk5OQorcmVzeDQzMSByZXNjYWxlICAgMC4wMDk5OSAgICAgIC00ICAtPiAgMC4wMTAwICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDMyIHJlc2NhbGUgICAwLjAwOTk5ICAgICAgLTMgIC0+ICAwLjAxMCAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0MzMgcmVzY2FsZSAgIDAuMDA5OTkgICAgICAtMiAgLT4gIDAuMDEgICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDQzNCByZXNjYWxlICAgMC4wMDk5OSAgICAgIC0xICAtPiAgMC4wICAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDM1IHJlc2NhbGUgICAwLjAwOTk5ICAgICAgIDAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0MzYgcmVzY2FsZSAgIDAuMDA5OTkgICAgICAgMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAorCityZXN4NDQwIHJlc2NhbGUgICAwLjAwMDk5OSAgICAgLTUgIC0+ICAwLjAwMTAwICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NDEgcmVzY2FsZSAgIDAuMDAwOTk5ICAgICAtNCAgLT4gIDAuMDAxMCAgIEluZXhhY3QgUm91bmRlZAorcmVzeDQ0MiByZXNjYWxlICAgMC4wMDA5OTkgICAgIC0zICAtPiAgMC4wMDEgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDQzIHJlc2NhbGUgICAwLjAwMDk5OSAgICAgLTIgIC0+ICAwLjAwICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0NDQgcmVzY2FsZSAgIDAuMDAwOTk5ICAgICAtMSAgLT4gIDAuMCAgICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDQ0NSByZXNjYWxlICAgMC4wMDA5OTkgICAgICAwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDQ2IHJlc2NhbGUgICAwLjAwMDk5OSAgICAgIDEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKKworcHJlY2lzaW9uOiA4CityZXN4NDQ5IHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgLTIzIC0+ICBOYU4gICAgICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDQ1MCByZXNjYWxlICAgOS45OTlFLTE1ICAgIC0yMiAtPiAgOS45OTkwMDAwRS0xNQorcmVzeDQ1MSByZXNjYWxlICAgOS45OTlFLTE1ICAgIC0yMSAtPiAgOS45OTkwMDBFLTE1CityZXN4NDUyIHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgLTIwIC0+ICA5Ljk5OTAwRS0xNQorcmVzeDQ1MyByZXNjYWxlICAgOS45OTlFLTE1ICAgIC0xOSAtPiAgOS45OTkwRS0xNQorcmVzeDQ1NCByZXNjYWxlICAgOS45OTlFLTE1ICAgIC0xOCAtPiAgOS45OTlFLTE1CityZXN4NDU1IHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgLTE3IC0+ICAxLjAwMEUtMTQgSW5leGFjdCBSb3VuZGVkCityZXN4NDU2IHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgLTE2IC0+ICAxLjAwRS0xNCAgSW5leGFjdCBSb3VuZGVkCityZXN4NDU3IHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgLTE1IC0+ICAxLjBFLTE0ICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDU4IHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgLTE0IC0+ICAxRS0xNCAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDU5IHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgLTEzIC0+ICAwRS0xMyAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDYwIHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgLTEyIC0+ICAwRS0xMiAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDYxIHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgLTExIC0+ICAwRS0xMSAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDYyIHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgLTEwIC0+ICAwRS0xMCAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDYzIHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgIC05IC0+ICAwRS05ICAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDY0IHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgIC04IC0+ICAwRS04ICAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDY1IHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgIC03IC0+ICAwRS03ICAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDY2IHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgIC02IC0+ICAwLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCityZXN4NDY3IHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgIC01IC0+ICAwLjAwMDAwICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDY4IHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgIC00IC0+ICAwLjAwMDAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDY5IHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgIC0zIC0+ICAwLjAwMCAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDcwIHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgIC0yIC0+ICAwLjAwICAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDcxIHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgIC0xIC0+ICAwLjAgICAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDcyIHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgICAwIC0+ICAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NDczIHJlc2NhbGUgICA5Ljk5OUUtMTUgICAgICAxIC0+ICAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCisKKy0tIFthZGRpdGlvbmFsIHRlc3RzIGZvciAiZG9uJ3QgZml0IiBlZGdlIGNhc2VzIGFyZSBpbgorLS0gcXVhbnRpemUuZGVjVGVzdC4gIEhlcmUncyBhIGNyaXRpY2FsIG9uZS5dCitwcmVjaXNpb246IDMKK3Jlc3g0ODAgcmVzY2FsZSAgIDAuOTk5OSAgICAgICAgLTMgLT4gIE5hTiAgICAgICBJbnZhbGlkX29wZXJhdGlvbgorCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MgW3JocyBjaGVja3MgcmVtb3ZlZF0KK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK3Jlc3g0ODEgcmVzY2FsZSAxMjM0NTY3ODAwMCArMyAtPiAxLjIzNDU2NzhFKzEwIFJvdW5kZWQKK3Jlc3g0ODIgcmVzY2FsZSAxMjM0NTY3ODAwICArMSAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKK3Jlc3g0ODMgcmVzY2FsZSAxMjM0NTY3ODkwICArMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKK3Jlc3g0ODQgcmVzY2FsZSAxMjM0NTY3ODkxICArMSAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAorcmVzeDQ4NSByZXNjYWxlIDEyMzQ1Njc4OTAxICsyIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAorcmVzeDQ4NiByZXNjYWxlIDEyMzQ1Njc4OTYgICsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCistLSBhIHBvdGVudGlhbCBkb3VibGUtcm91bmQKK3Jlc3g0ODcgcmVzY2FsZSAxMjM0Ljk4NzY0MyAtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCityZXN4NDg4IHJlc2NhbGUgMTIzNC45ODc2NDcgLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDE1CityZXN4NDkxIHJlc2NhbGUgMTIzNDU2NzgwMDAgKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkCityZXN4NDkyIHJlc2NhbGUgMTIzNDU2NzgwMCAgKzEgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCityZXN4NDkzIHJlc2NhbGUgMTIzNDU2Nzg5MCAgKzEgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCityZXN4NDk0IHJlc2NhbGUgMTIzNDU2Nzg5MSAgKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0OTUgcmVzY2FsZSAxMjM0NTY3ODkwMSArMiAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0OTYgcmVzY2FsZSAxMjM0NTY3ODk2ICArMSAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorcmVzeDQ5NyByZXNjYWxlIDEyMzQuOTg3NjQzIC00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g0OTggcmVzY2FsZSAxMjM0Ljk4NzY0NyAtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCisKKy0tIFplcm9zCityZXN4NTAwIHJlc2NhbGUgICAwICAgICAxIC0+ICAwRSsxCityZXN4NTAxIHJlc2NhbGUgICAwICAgICAwIC0+ICAwCityZXN4NTAyIHJlc2NhbGUgICAwICAgIC0xIC0+ICAwLjAKK3Jlc3g1MDMgcmVzY2FsZSAgIDAuMCAgLTEgLT4gIDAuMAorcmVzeDUwNCByZXNjYWxlICAgMC4wICAgMCAtPiAgMAorcmVzeDUwNSByZXNjYWxlICAgMC4wICArMSAtPiAgMEUrMQorcmVzeDUwNiByZXNjYWxlICAgMEUrMSAtMSAtPiAgMC4wCityZXN4NTA3IHJlc2NhbGUgICAwRSsxICAwIC0+ICAwCityZXN4NTA4IHJlc2NhbGUgICAwRSsxICsxIC0+ICAwRSsxCityZXN4NTA5IHJlc2NhbGUgIC0wICAgICAxIC0+IC0wRSsxCityZXN4NTEwIHJlc2NhbGUgIC0wICAgICAwIC0+IC0wCityZXN4NTExIHJlc2NhbGUgIC0wICAgIC0xIC0+IC0wLjAKK3Jlc3g1MTIgcmVzY2FsZSAgLTAuMCAgLTEgLT4gLTAuMAorcmVzeDUxMyByZXNjYWxlICAtMC4wICAgMCAtPiAtMAorcmVzeDUxNCByZXNjYWxlICAtMC4wICArMSAtPiAtMEUrMQorcmVzeDUxNSByZXNjYWxlICAtMEUrMSAtMSAtPiAtMC4wCityZXN4NTE2IHJlc2NhbGUgIC0wRSsxICAwIC0+IC0wCityZXN4NTE3IHJlc2NhbGUgIC0wRSsxICsxIC0+IC0wRSsxCisKKy0tIFN1c3BpY2lvdXMgUkhTIHZhbHVlcworbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKK3ByZWNpc2lvbjogMTUKK3Jlc3g1MjAgcmVzY2FsZSAgIDEuMjM0ICAgIDk5OTk5OUUrMyAtPiAwRSs5OTk5OTkwMDAgSW5leGFjdCBSb3VuZGVkCityZXN4NTIxIHJlc2NhbGUgMTIzLjQ1NiAgICA5OTk5OTlFKzMgLT4gMEUrOTk5OTk5MDAwIEluZXhhY3QgUm91bmRlZAorcmVzeDUyMiByZXNjYWxlICAgMS4yMzQgICAgOTk5OTk5OTk5IC0+IDBFKzk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g1MjMgcmVzY2FsZSAxMjMuNDU2ICAgIDk5OTk5OTk5OSAtPiAwRSs5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCityZXN4NTI0IHJlc2NhbGUgMTIzLjQ1NiAgIDEwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTI1IHJlc2NhbGUgMTIzLjQ1NiAgMTIzNDU2Nzg5MDMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBuZXh0IGZvdXIgYXJlICJ3b24ndCBmaXQiIG92ZXJmbG93cworcmVzeDUyNiByZXNjYWxlICAgMS4yMzQgICAtOTk5OTk5RSszIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDUyNyByZXNjYWxlIDEyMy40NTYgICAtOTk5OTk5RSszIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDUyOCByZXNjYWxlICAgMS4yMzQgICAtOTk5OTk5OTk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDUyOSByZXNjYWxlIDEyMy40NTYgICAtOTk5OTk5OTk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDUzMCByZXNjYWxlIDEyMy40NTYgIC0xMDAwMDAwMDE0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDUzMSByZXNjYWxlIDEyMy40NTYgLTEyMzQ1Njc4OTAzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiAxNQorcmVzeDUzMiByZXNjYWxlICAgMS4yMzRFKzk5OSAgICA5OTkgLT4gMUUrOTk5ICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDUzMyByZXNjYWxlICAgMS4yMzRFKzk5OCAgICA5OTkgLT4gMEUrOTk5ICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDUzNCByZXNjYWxlICAgMS4yMzQgICAgICAgICA5OTkgLT4gMEUrOTk5ICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDUzNSByZXNjYWxlICAgMS4yMzQgICAgICAgIDEwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTM2IHJlc2NhbGUgICAxLjIzNCAgICAgICAgNTAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1MzcgcmVzY2FsZSAgIDAgICAgICAgICAgICAtOTk5IC0+IDBFLTk5OQorLS0gbmV4dCB0d28gYXJlICJ3b24ndCBmaXQiIG92ZXJmbG93cworcmVzeDUzOCByZXNjYWxlICAgMS4yMzQgICAgICAgIC05OTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTM5IHJlc2NhbGUgICAxLjIzNCAgICAgICAtMTAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1NDAgcmVzY2FsZSAgIDEuMjM0ICAgICAgIC01MDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gW21vcmUgYmVsb3ddCisKKy0tIGNoZWNrIGJvdW5kcyAobGhzIG1heWJlIG91dCBvZiByYW5nZSBmb3IgZGVzdGluYXRpb24sIGV0Yy4pCitwcmVjaXNpb246ICAgICA3CityZXN4NTQxIHJlc2NhbGUgICAxRSs5OTkgICArOTk5IC0+IDFFKzk5OQorcmVzeDU0MiByZXNjYWxlICAgMUUrMTAwMCAgKzk5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1NDMgcmVzY2FsZSAgIDFFKzk5OSAgKzEwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTQ0IHJlc2NhbGUgICAxRS05OTkgICAtOTk5IC0+IDFFLTk5OQorcmVzeDU0NSByZXNjYWxlICAgMUUtMTAwMCAgLTk5OSAtPiAwRS05OTkgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NTQ2IHJlc2NhbGUgICAxRS05OTkgIC0xMDAwIC0+IDEuMEUtOTk5CityZXN4NTQ3IHJlc2NhbGUgICAxRS0xMDA1ICAtOTk5IC0+IDBFLTk5OSAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g1NDggcmVzY2FsZSAgIDFFLTEwMDYgIC05OTkgLT4gMEUtOTk5ICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDU0OSByZXNjYWxlICAgMUUtMTAwNyAgLTk5OSAtPiAwRS05OTkgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NTUwIHJlc2NhbGUgICAxRS05OTggIC0xMDA1IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbiAgLS0gd29uJ3QgZml0CityZXN4NTUxIHJlc2NhbGUgICAxRS05OTkgIC0xMDA1IC0+IDEuMDAwMDAwRS05OTkKK3Jlc3g1NTIgcmVzY2FsZSAgIDFFLTEwMDAgLTEwMDUgLT4gMS4wMDAwMEUtMTAwMCBTdWJub3JtYWwKK3Jlc3g1NTMgcmVzY2FsZSAgIDFFLTk5OSAgLTEwMDYgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTU0IHJlc2NhbGUgICAxRS05OTkgIC0xMDA3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gcmVsYXRlZCBzdWJub3JtYWwgcm91bmRpbmcKK3Jlc3g1NTUgcmVzY2FsZSAgIDEuNjY2NjY2RS05OTkgIC0xMDA1IC0+IDEuNjY2NjY2RS05OTkKK3Jlc3g1NTYgcmVzY2FsZSAgIDEuNjY2NjY2RS0xMDAwIC0xMDA1IC0+IDEuNjY2NjdFLTEwMDAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g1NTcgcmVzY2FsZSAgIDEuNjY2NjY2RS0xMDAxIC0xMDA1IC0+IDEuNjY2N0UtMTAwMSAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcmVzeDU1OCByZXNjYWxlICAgMS42NjY2NjZFLTEwMDIgLTEwMDUgLT4gMS42NjdFLTEwMDIgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g1NTkgcmVzY2FsZSAgIDEuNjY2NjY2RS0xMDAzIC0xMDA1IC0+IDEuNjdFLTEwMDMgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g1NjAgcmVzY2FsZSAgIDEuNjY2NjY2RS0xMDA0IC0xMDA1IC0+IDEuN0UtMTAwNCAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcmVzeDU2MSByZXNjYWxlICAgMS42NjY2NjZFLTEwMDUgLTEwMDUgLT4gMkUtMTAwNSAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcmVzeDU2MiByZXNjYWxlICAgMS42NjY2NjZFLTEwMDYgLTEwMDUgLT4gMEUtMTAwNSAgIEluZXhhY3QgUm91bmRlZAorcmVzeDU2MyByZXNjYWxlICAgMS42NjY2NjZFLTEwMDcgLTEwMDUgLT4gMEUtMTAwNSAgIEluZXhhY3QgUm91bmRlZAorCistLSBmcmFjdGlvbmFsIFJIUywgc29tZSBnb29kIGFuZCBzb21lIGJhZAorcHJlY2lzaW9uOiA5CityZXN4NTY0IHJlc2NhbGUgICAyMjIgKzIuMCAgICAgICAgICAgLT4gMkUrMiBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g1NjUgcmVzY2FsZSAgIDIyMiArMi4wMDAwMDAwMCAgICAtPiAyRSsyIEluZXhhY3QgUm91bmRlZAorcmVzeDU2NiByZXNjYWxlICAgMjIyICsyLjAwMTAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU2NyByZXNjYWxlICAgMjIyICsyLjAwMDAwMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU2OCByZXNjYWxlICAgMjIyICsyLjAwMDAwMDAwMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU2OSByZXNjYWxlICAgMjIyICsyLjAwMDAwMDAwMDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU3MCByZXNjYWxlICAgMjIyICsyLjAwMDAwMDAwMDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU3MSByZXNjYWxlICAgMjIyICsyLjk5OTk5OTk5OTk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU3MiByZXNjYWxlICAgMjIyIC0yLjAwMDAwMDAwICAgIC0+IDIyMi4wMAorcmVzeDU3MyByZXNjYWxlICAgMjIyIC0yLjAwMTAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU3NCByZXNjYWxlICAgMjIyIC0yLjAwMDAwMDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU3NSByZXNjYWxlICAgMjIyIC0yLjAwMDAwMDAwMDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDU3NiByZXNjYWxlICAgMjIyIC0yLjk5OTk5OTk5OTk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBTcGVjaWFscworcmVzeDU4MCByZXNjYWxlICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK3Jlc3g1ODEgcmVzY2FsZSAgSW5mICAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1ODIgcmVzY2FsZSAgSW5mICAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1ODMgcmVzY2FsZSAgSW5mICAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1ODQgcmVzY2FsZSAgSW5mICAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1ODUgcmVzY2FsZSAgSW5mICAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1ODYgcmVzY2FsZSAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CityZXN4NTg3IHJlc2NhbGUgLTEwMDAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTg4IHJlc2NhbGUgLUluZiAgIEluZiAgIC0+ICAtSW5maW5pdHkKK3Jlc3g1ODkgcmVzY2FsZSAtMSAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1OTAgcmVzY2FsZSAgMCAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1OTEgcmVzY2FsZSAgMSAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1OTIgcmVzY2FsZSAgMTAwMCAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g1OTMgcmVzY2FsZSAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5CityZXN4NTk0IHJlc2NhbGUgIEluZiAgLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZXN4NTk1IHJlc2NhbGUgLTAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK3Jlc3g2MDAgcmVzY2FsZSAtSW5mICAtSW5mICAgLT4gIC1JbmZpbml0eQorcmVzeDYwMSByZXNjYWxlIC1JbmYgIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDYwMiByZXNjYWxlIC1JbmYgIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDYwMyByZXNjYWxlIC1JbmYgICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDYwNCByZXNjYWxlIC1JbmYgICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDYwNSByZXNjYWxlIC1JbmYgICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDYwNiByZXNjYWxlIC1JbmYgICBJbmYgICAtPiAgLUluZmluaXR5CityZXN4NjA3IHJlc2NhbGUgLTEwMDAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZXN4NjA4IHJlc2NhbGUgLUluZiAgLUluZiAgIC0+ICAtSW5maW5pdHkKK3Jlc3g2MDkgcmVzY2FsZSAtMSAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2MTAgcmVzY2FsZSAgMCAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2MTEgcmVzY2FsZSAgMSAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2MTIgcmVzY2FsZSAgMTAwMCAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2MTMgcmVzY2FsZSAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5CityZXN4NjE0IHJlc2NhbGUgLUluZiAgLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityZXN4NjE1IHJlc2NhbGUgLTAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKK3Jlc3g2MjEgcmVzY2FsZSAgTmFOIC1JbmYgICAgLT4gIE5hTgorcmVzeDYyMiByZXNjYWxlICBOYU4gLTEwMDAgICAtPiAgTmFOCityZXN4NjIzIHJlc2NhbGUgIE5hTiAtMSAgICAgIC0+ICBOYU4KK3Jlc3g2MjQgcmVzY2FsZSAgTmFOICAwICAgICAgLT4gIE5hTgorcmVzeDYyNSByZXNjYWxlICBOYU4gIDEgICAgICAtPiAgTmFOCityZXN4NjI2IHJlc2NhbGUgIE5hTiAgMTAwMCAgIC0+ICBOYU4KK3Jlc3g2MjcgcmVzY2FsZSAgTmFOICBJbmYgICAgLT4gIE5hTgorcmVzeDYyOCByZXNjYWxlICBOYU4gIE5hTiAgICAtPiAgTmFOCityZXN4NjI5IHJlc2NhbGUgLUluZiAgTmFOICAgIC0+ICBOYU4KK3Jlc3g2MzAgcmVzY2FsZSAtMTAwMCBOYU4gICAgLT4gIE5hTgorcmVzeDYzMSByZXNjYWxlIC0xICAgIE5hTiAgICAtPiAgTmFOCityZXN4NjMyIHJlc2NhbGUgIDAgICAgTmFOICAgIC0+ICBOYU4KK3Jlc3g2MzMgcmVzY2FsZSAgMSAgIC1OYU4gICAgLT4gLU5hTgorcmVzeDYzNCByZXNjYWxlICAxMDAwIE5hTiAgICAtPiAgTmFOCityZXN4NjM1IHJlc2NhbGUgIEluZiAgTmFOICAgIC0+ICBOYU4KK3Jlc3g2MzYgcmVzY2FsZSAgTmFOIC0wICAgICAgLT4gIE5hTgorcmVzeDYzNyByZXNjYWxlIC0wICAgIE5hTiAgICAtPiAgTmFOCisKK3Jlc3g2NDEgcmVzY2FsZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NDIgcmVzY2FsZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NDMgcmVzY2FsZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NDQgcmVzY2FsZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NDUgcmVzY2FsZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NDYgcmVzY2FsZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NDcgcmVzY2FsZSAtc05hTiAgTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NDggcmVzY2FsZSAgc05hTiAtc05hTiAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NDkgcmVzY2FsZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NTAgcmVzY2FsZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NTEgcmVzY2FsZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NTIgcmVzY2FsZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NTMgcmVzY2FsZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NTQgcmVzY2FsZSAgMSAgIC1zTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NTUgcmVzY2FsZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NTYgcmVzY2FsZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NTcgcmVzY2FsZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NTggcmVzY2FsZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NTkgcmVzY2FsZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcHJvcGFnYXRpbmcgTmFOcworcmVzeDY2MSByZXNjYWxlICBOYU45IC1JbmYgICAtPiAgTmFOOQorcmVzeDY2MiByZXNjYWxlICBOYU44MSA5MTkgICAtPiAgTmFOODEKK3Jlc3g2NjMgcmVzY2FsZSAgTmFONzIgSW5mICAgLT4gIE5hTjcyCityZXN4NjY0IHJlc2NhbGUgLU5hTjY2IE5hTjUgIC0+IC1OYU42NgorcmVzeDY2NSByZXNjYWxlIC1JbmYgICBOYU40ICAtPiAgTmFONAorcmVzeDY2NiByZXNjYWxlIC05MTkgICBOYU4zMiAtPiAgTmFOMzIKK3Jlc3g2NjcgcmVzY2FsZSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKKworcmVzeDY3MSByZXNjYWxlICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NzIgcmVzY2FsZSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCityZXN4NjczIHJlc2NhbGUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY3NCByZXNjYWxlICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NzUgcmVzY2FsZSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCityZXN4Njc2IHJlc2NhbGUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDY3NyByZXNjYWxlICAwODggICAtc05hTjkxICAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g2NzggcmVzY2FsZSAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCityZXN4Njc5IHJlc2NhbGUgIE5hTiAgICBzTmFOODcgIC0+ICBOYU44NyBJbnZhbGlkX29wZXJhdGlvbgorCistLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKK3ByZWNpc2lvbjogNAorbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3Jlc3g3MTAgcmVzY2FsZSAgMS4wMEUtOTk5ICAgIC05OTkgIC0+ICAgMUUtOTk5ICAgIFJvdW5kZWQKK3Jlc3g3MTEgcmVzY2FsZSAgMC4xRS05OTkgICAgLTEwMDAgIC0+ICAgMUUtMTAwMCAgIFN1Ym5vcm1hbAorcmVzeDcxMiByZXNjYWxlICAwLjEwRS05OTkgICAtMTAwMCAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsIFJvdW5kZWQKK3Jlc3g3MTMgcmVzY2FsZSAgMC4xMDBFLTk5OSAgLTEwMDAgIC0+ICAgMUUtMTAwMCAgIFN1Ym5vcm1hbCBSb3VuZGVkCityZXN4NzE0IHJlc2NhbGUgIDAuMDFFLTk5OSAgIC0xMDAxICAtPiAgIDFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCityZXN4NzE1IHJlc2NhbGUgIDAuOTk5RS05OTkgICAtOTk5ICAtPiAgIDFFLTk5OSAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g3MTYgcmVzY2FsZSAgMC4wOTlFLTk5OSAgLTEwMDAgIC0+ICAgMUUtMTAwMCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKKworcmVzeDcxNyByZXNjYWxlICAwLjAwOUUtOTk5ICAtMTAwMSAgLT4gICAxRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAorcmVzeDcxOCByZXNjYWxlICAwLjAwMUUtOTk5ICAtMTAwMSAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkCityZXN4NzE5IHJlc2NhbGUgIDAuMDAwOUUtOTk5IC0xMDAxICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g3MjAgcmVzY2FsZSAgMC4wMDAxRS05OTkgLTEwMDEgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZAorCityZXN4NzMwIHJlc2NhbGUgLTEuMDBFLTk5OSAgIC05OTkgIC0+ICAtMUUtOTk5ICAgICBSb3VuZGVkCityZXN4NzMxIHJlc2NhbGUgLTAuMUUtOTk5ICAgIC05OTkgIC0+ICAtMEUtOTk5ICAgICBSb3VuZGVkIEluZXhhY3QKK3Jlc3g3MzIgcmVzY2FsZSAtMC4xMEUtOTk5ICAgLTk5OSAgLT4gIC0wRS05OTkgICAgIFJvdW5kZWQgSW5leGFjdAorcmVzeDczMyByZXNjYWxlIC0wLjEwMEUtOTk5ICAtOTk5ICAtPiAgLTBFLTk5OSAgICAgUm91bmRlZCBJbmV4YWN0CityZXN4NzM0IHJlc2NhbGUgLTAuMDFFLTk5OSAgIC05OTkgIC0+ICAtMEUtOTk5ICAgICBJbmV4YWN0IFJvdW5kZWQKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCityZXN4NzM1IHJlc2NhbGUgLTAuOTk5RS05OTkgIC05OTkgIC0+ICAtMUUtOTk5ICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g3MzYgcmVzY2FsZSAtMC4wOTlFLTk5OSAgLTk5OSAgLT4gIC0wRS05OTkgICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDczNyByZXNjYWxlIC0wLjAwOUUtOTk5ICAtOTk5ICAtPiAgLTBFLTk5OSAgICAgSW5leGFjdCBSb3VuZGVkCityZXN4NzM4IHJlc2NhbGUgLTAuMDAxRS05OTkgIC05OTkgIC0+ICAtMEUtOTk5ICAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g3MzkgcmVzY2FsZSAtMC4wMDAxRS05OTkgLTk5OSAgLT4gIC0wRS05OTkgICAgIEluZXhhY3QgUm91bmRlZAorCityZXN4NzQwIHJlc2NhbGUgLTEuMDBFLTk5OSAgIC0xMDAwIC0+ICAtMS4wRS05OTkgICBSb3VuZGVkCityZXN4NzQxIHJlc2NhbGUgLTAuMUUtOTk5ICAgIC0xMDAwIC0+ICAtMUUtMTAwMCAgICBTdWJub3JtYWwKK3Jlc3g3NDIgcmVzY2FsZSAtMC4xMEUtOTk5ICAgLTEwMDAgLT4gIC0xRS0xMDAwICAgIFN1Ym5vcm1hbCBSb3VuZGVkCityZXN4NzQzIHJlc2NhbGUgLTAuMTAwRS05OTkgIC0xMDAwIC0+ICAtMUUtMTAwMCAgICBTdWJub3JtYWwgUm91bmRlZAorcmVzeDc0NCByZXNjYWxlIC0wLjAxRS05OTkgICAtMTAwMCAtPiAgLTBFLTEwMDAgICAgSW5leGFjdCBSb3VuZGVkCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorcmVzeDc0NSByZXNjYWxlIC0wLjk5OUUtOTk5ICAtMTAwMCAtPiAgLTEuMEUtOTk5ICAgSW5leGFjdCBSb3VuZGVkCityZXN4NzQ2IHJlc2NhbGUgLTAuMDk5RS05OTkgIC0xMDAwIC0+ICAtMUUtMTAwMCAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCityZXN4NzQ3IHJlc2NhbGUgLTAuMDA5RS05OTkgIC0xMDAwIC0+ICAtMEUtMTAwMCAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g3NDggcmVzY2FsZSAtMC4wMDFFLTk5OSAgLTEwMDAgLT4gIC0wRS0xMDAwICAgIEluZXhhY3QgUm91bmRlZAorcmVzeDc0OSByZXNjYWxlIC0wLjAwMDFFLTk5OSAtMTAwMCAtPiAgLTBFLTEwMDAgICAgSW5leGFjdCBSb3VuZGVkCisKK3Jlc3g3NTAgcmVzY2FsZSAtMS4wMEUtOTk5ICAgLTEwMDEgLT4gIC0xLjAwRS05OTkKK3Jlc3g3NTEgcmVzY2FsZSAtMC4xRS05OTkgICAgLTEwMDEgLT4gIC0xLjBFLTEwMDAgIFN1Ym5vcm1hbAorcmVzeDc1MiByZXNjYWxlIC0wLjEwRS05OTkgICAtMTAwMSAtPiAgLTEuMEUtMTAwMCAgU3Vibm9ybWFsCityZXN4NzUzIHJlc2NhbGUgLTAuMTAwRS05OTkgIC0xMDAxIC0+ICAtMS4wRS0xMDAwICBTdWJub3JtYWwgUm91bmRlZAorcmVzeDc1NCByZXNjYWxlIC0wLjAxRS05OTkgICAtMTAwMSAtPiAgLTFFLTEwMDEgICAgU3Vibm9ybWFsCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgorcmVzeDc1NSByZXNjYWxlIC0wLjk5OUUtOTk5ICAtMTAwMSAtPiAgLTEuMDBFLTk5OSAgSW5leGFjdCBSb3VuZGVkCityZXN4NzU2IHJlc2NhbGUgLTAuMDk5RS05OTkgIC0xMDAxIC0+ICAtMS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCityZXN4NzU3IHJlc2NhbGUgLTAuMDA5RS05OTkgIC0xMDAxIC0+ICAtMUUtMTAwMSAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCityZXN4NzU4IHJlc2NhbGUgLTAuMDAxRS05OTkgIC0xMDAxIC0+ICAtMEUtMTAwMSAgICBJbmV4YWN0IFJvdW5kZWQKK3Jlc3g3NTkgcmVzY2FsZSAtMC4wMDAxRS05OTkgLTEwMDEgLT4gIC0wRS0xMDAxICAgIEluZXhhY3QgUm91bmRlZAorCityZXN4NzYwIHJlc2NhbGUgLTEuMDBFLTk5OSAgIC0xMDAyIC0+ICAtMS4wMDBFLTk5OQorcmVzeDc2MSByZXNjYWxlIC0wLjFFLTk5OSAgICAtMTAwMiAtPiAgLTEuMDBFLTEwMDAgIFN1Ym5vcm1hbAorcmVzeDc2MiByZXNjYWxlIC0wLjEwRS05OTkgICAtMTAwMiAtPiAgLTEuMDBFLTEwMDAgIFN1Ym5vcm1hbAorcmVzeDc2MyByZXNjYWxlIC0wLjEwMEUtOTk5ICAtMTAwMiAtPiAgLTEuMDBFLTEwMDAgIFN1Ym5vcm1hbAorcmVzeDc2NCByZXNjYWxlIC0wLjAxRS05OTkgICAtMTAwMiAtPiAgLTEuMEUtMTAwMSAgIFN1Ym5vcm1hbAorcmVzeDc2NSByZXNjYWxlIC0wLjk5OUUtOTk5ICAtMTAwMiAtPiAgLTkuOTlFLTEwMDAgIFN1Ym5vcm1hbAorcmVzeDc2NiByZXNjYWxlIC0wLjA5OUUtOTk5ICAtMTAwMiAtPiAgLTkuOUUtMTAwMSAgIFN1Ym5vcm1hbAorcmVzeDc2NyByZXNjYWxlIC0wLjAwOUUtOTk5ICAtMTAwMiAtPiAgLTlFLTEwMDIgICAgIFN1Ym5vcm1hbAorcmVzeDc2OCByZXNjYWxlIC0wLjAwMUUtOTk5ICAtMTAwMiAtPiAgLTFFLTEwMDIgICAgIFN1Ym5vcm1hbAorcmVzeDc2OSByZXNjYWxlIC0wLjAwMDFFLTk5OSAtMTAwMiAtPiAgLTBFLTEwMDIgICAgIEluZXhhY3QgUm91bmRlZAorCistLSByaHMgbXVzdCBiZSBubyBsZXNzIHRoYW4gRXRpbnkKK3Jlc3g3NzAgcmVzY2FsZSAtMS4wMEUtOTk5ICAgLTEwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDc3MSByZXNjYWxlIC0wLjFFLTk5OSAgICAtMTAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4NzcyIHJlc2NhbGUgLTAuMTBFLTk5OSAgIC0xMDAzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g3NzMgcmVzY2FsZSAtMC4xMDBFLTk5OSAgLTEwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDc3NCByZXNjYWxlIC0wLjAxRS05OTkgICAtMTAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4Nzc1IHJlc2NhbGUgLTAuOTk5RS05OTkgIC0xMDAzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g3NzYgcmVzY2FsZSAtMC4wOTlFLTk5OSAgLTEwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDc3NyByZXNjYWxlIC0wLjAwOUUtOTk5ICAtMTAwMyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4Nzc4IHJlc2NhbGUgLTAuMDAxRS05OTkgIC0xMDAzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g3NzkgcmVzY2FsZSAtMC4wMDAxRS05OTkgLTEwMDMgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitwcmVjaXNpb246ICAgOQorbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKKworLS0gZ2V0SW50IHdvcnJpZXMKK3Jlc3g4MDEgcmVzY2FsZSAgIDAgICAxMDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDgwMiByZXNjYWxlICAgMCAgLTEwMDAwMDAwMDAgLT4gMEUtMTAwMDAwMDAwMAorcmVzeDgwMyByZXNjYWxlICAgMCAgIDIwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODA0IHJlc2NhbGUgICAwICAtMjAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4MDUgcmVzY2FsZSAgIDAgICAzMDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDgwNiByZXNjYWxlICAgMCAgLTMwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODA3IHJlc2NhbGUgICAwICAgNDAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4MDggcmVzY2FsZSAgIDAgIC00MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDgwOSByZXNjYWxlICAgMCAgIDUwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODEwIHJlc2NhbGUgICAwICAtNTAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4MTEgcmVzY2FsZSAgIDAgICA2MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDgxMiByZXNjYWxlICAgMCAgLTYwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODEzIHJlc2NhbGUgICAwICAgNzAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4MTQgcmVzY2FsZSAgIDAgIC03MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDgxNSByZXNjYWxlICAgMCAgIDgwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODE2IHJlc2NhbGUgICAwICAtODAwMDAwMDAwMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4MTcgcmVzY2FsZSAgIDAgICA5MDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDgxOCByZXNjYWxlICAgMCAgLTkwMDAwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODE5IHJlc2NhbGUgICAwICAgOTk5OTk5OTk5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4MjAgcmVzY2FsZSAgIDAgIC05OTk5OTk5OTk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDgyMSByZXNjYWxlICAgMCAgIDEwMDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDgyMiByZXNjYWxlICAgMCAgLTEwMDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCityZXN4ODMxIHJlc2NhbGUgICAxICAgMEUtMSAgICAgICAtPiAxCityZXN4ODMyIHJlc2NhbGUgICAxICAgMEUtMiAgICAgICAtPiAxCityZXN4ODMzIHJlc2NhbGUgICAxICAgMEUtMyAgICAgICAtPiAxCityZXN4ODM0IHJlc2NhbGUgICAxICAgMEUtNCAgICAgICAtPiAxCityZXN4ODM1IHJlc2NhbGUgICAxICAgMEUtMTAwICAgICAtPiAxCityZXN4ODM2IHJlc2NhbGUgICAxICAgMEUtMTAwMDAwICAtPiAxCityZXN4ODM3IHJlc2NhbGUgICAxICAgMEUrMTAwICAgICAtPiAxCityZXN4ODM4IHJlc2NhbGUgICAxICAgMEUrMTAwMDAwICAtPiAxCisKK3Jlc3g4NDEgcmVzY2FsZSAgIDAgICA1RS0xMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDg0MiByZXNjYWxlICAgMCAgIDVFLTEwMDAwMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODQzIHJlc2NhbGUgICAwICAgIDk5OTk5OTk5OSAtPiAwRSs5OTk5OTk5OTkKK3Jlc3g4NDQgcmVzY2FsZSAgIDAgICAxMDAwMDAwMDAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDg0NSByZXNjYWxlICAgMCAgIC05OTk5OTk5OTkgLT4gMEUtOTk5OTk5OTk5CityZXN4ODQ2IHJlc2NhbGUgICAwICAtMTAwMDAwMDAwMCAtPiAwRS0xMDAwMDAwMDAwCityZXN4ODQ3IHJlc2NhbGUgICAwICAtMTAwMDAwMDAwMSAtPiAwRS0xMDAwMDAwMDAxCityZXN4ODQ4IHJlc2NhbGUgICAwICAtMTAwMDAwMDAwMiAtPiAwRS0xMDAwMDAwMDAyCityZXN4ODQ5IHJlc2NhbGUgICAwICAtMTAwMDAwMDAwMyAtPiAwRS0xMDAwMDAwMDAzCityZXN4ODUwIHJlc2NhbGUgICAwICAtMTAwMDAwMDAwNCAtPiAwRS0xMDAwMDAwMDA0CityZXN4ODUxIHJlc2NhbGUgICAwICAtMTAwMDAwMDAwNSAtPiAwRS0xMDAwMDAwMDA1CityZXN4ODUyIHJlc2NhbGUgICAwICAtMTAwMDAwMDAwNiAtPiAwRS0xMDAwMDAwMDA2CityZXN4ODUzIHJlc2NhbGUgICAwICAtMTAwMDAwMDAwNyAtPiAwRS0xMDAwMDAwMDA3CityZXN4ODU0IHJlc2NhbGUgICAwICAtMTAwMDAwMDAwOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworcmVzeDg2MSByZXNjYWxlICAgMSAgKzIxNDc0ODM2NDkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODYyIHJlc2NhbGUgICAxICArMjE0NzQ4MzY0OCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4NjMgcmVzY2FsZSAgIDEgICsyMTQ3NDgzNjQ3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcmVzeDg2NCByZXNjYWxlICAgMSAgLTIxNDc0ODM2NDcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCityZXN4ODY1IHJlc2NhbGUgICAxICAtMjE0NzQ4MzY0OCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3Jlc3g4NjYgcmVzY2FsZSAgIDEgIC0yMTQ3NDgzNjQ5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOdWxsIHRlc3RzCityZXM5MDAgcmVzY2FsZSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JlczkwMSByZXNjYWxlICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yb3RhdGUuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcm90YXRlLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhZGU3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcm90YXRlLmRlY1Rlc3QKQEAgLTAsMCArMSwyNDcgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gcm90YXRlLmRlY1Rlc3QgLS0gcm90YXRlIGNvZWZmaWNpZW50IGxlZnQgb3IgcmlnaHQgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCistLSBTYW5pdHkgY2hlY2sKK3JvdHgwMDEgcm90YXRlICAgICAgICAgIDAgICAgMCAgLT4gIDAKK3JvdHgwMDIgcm90YXRlICAgICAgICAgIDAgICAgMiAgLT4gIDAKK3JvdHgwMDMgcm90YXRlICAgICAgICAgIDEgICAgMiAgLT4gIDEwMAorcm90eDAwNCByb3RhdGUgICAgICAgICAzNCAgICA4ICAtPiAgNDAwMDAwMDAzCityb3R4MDA1IHJvdGF0ZSAgICAgICAgICAxICAgIDkgIC0+ICAxCityb3R4MDA2IHJvdGF0ZSAgICAgICAgICAxICAgLTEgIC0+ICAxMDAwMDAwMDAKK3JvdHgwMDcgcm90YXRlICAxMjM0NTY3ODkgICAtMSAgLT4gIDkxMjM0NTY3OAorcm90eDAwOCByb3RhdGUgIDEyMzQ1Njc4OSAgIC04ICAtPiAgMjM0NTY3ODkxCityb3R4MDA5IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgLTkgIC0+ICAxMjM0NTY3ODkKK3JvdHgwMTAgcm90YXRlICAgICAgICAgIDAgICAtMiAgLT4gIDAKKworLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcgorcm90eDAxMSByb3RhdGUgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAxMiByb3RhdGUgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAxMyByb3RhdGUgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAxNCByb3RhdGUgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAxNSByb3RhdGUgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAxNiByb3RhdGUgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAxNyByb3RhdGUgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAxOCByb3RhdGUgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbgorcm90eDAyMCByb3RhdGUgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAyMSByb3RhdGUgICAgICAgIDEgICAgLTEwICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAyMiByb3RhdGUgICAgICAgIDEgICAgIDEwICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDAyMyByb3RhdGUgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBmdWxsIHBhdHRlcm4KK3JvdHgwMzAgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTkgICAtPiAxMjM0NTY3ODkKK3JvdHgwMzEgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTggICAtPiAyMzQ1Njc4OTEKK3JvdHgwMzIgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTcgICAtPiAzNDU2Nzg5MTIKK3JvdHgwMzMgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTYgICAtPiA0NTY3ODkxMjMKK3JvdHgwMzQgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTUgICAtPiA1Njc4OTEyMzQKK3JvdHgwMzUgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTQgICAtPiA2Nzg5MTIzNDUKK3JvdHgwMzYgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTMgICAtPiA3ODkxMjM0NTYKK3JvdHgwMzcgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTIgICAtPiA4OTEyMzQ1NjcKK3JvdHgwMzggcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTEgICAtPiA5MTIzNDU2NzgKK3JvdHgwMzkgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkKK3JvdHgwNDAgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkKK3JvdHgwNDEgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTEKK3JvdHgwNDIgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MTIKK3JvdHgwNDMgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzMgICAtPiA0NTY3ODkxMjMKK3JvdHgwNDQgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzQgICAtPiA1Njc4OTEyMzQKK3JvdHgwNDUgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzUgICAtPiA2Nzg5MTIzNDUKK3JvdHgwNDYgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzYgICAtPiA3ODkxMjM0NTYKK3JvdHgwNDcgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzcgICAtPiA4OTEyMzQ1NjcKK3JvdHgwNDggcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzggICAtPiA5MTIzNDU2NzgKK3JvdHgwNDkgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzkgICAtPiAxMjM0NTY3ODkKKworLS0gemVyb3MKK3JvdHgwNjAgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFLTEwCityb3R4MDYxIHJvdGF0ZSAgMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRS0xMAorcm90eDA2MiByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAgMC4wMDAKK3JvdHgwNjMgcm90YXRlICAwLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgIDAuMDAwCityb3R4MDY0IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRSsxMAorcm90eDA2NSByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUrMTAKK3JvdHgwNjYgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFLTEwCityb3R4MDY3IHJvdGF0ZSAtMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRS0xMAorcm90eDA2OCByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAtMC4wMDAKK3JvdHgwNjkgcm90YXRlIC0wLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgLTAuMDAwCityb3R4MDcwIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRSsxMAorcm90eDA3MSByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUrMTAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK3JvdHgxNDEgcm90YXRlICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xICAtPiA5Ljk5OTk5OTk5RSs5OTkKK3JvdHgxNDIgcm90YXRlICA5Ljk5OTk5OTk5RSs5OTkgICAgIC04ICAtPiA5Ljk5OTk5OTk5RSs5OTkKK3JvdHgxNDMgcm90YXRlICA5Ljk5OTk5OTk5RSs5OTkgICAgICAxICAtPiA5Ljk5OTk5OTk5RSs5OTkKK3JvdHgxNDQgcm90YXRlICA5Ljk5OTk5OTk5RSs5OTkgICAgICA4ICAtPiA5Ljk5OTk5OTk5RSs5OTkKK3JvdHgxNDUgcm90YXRlICAxRS05OTkgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwRS05OTEKK3JvdHgxNDYgcm90YXRlICAxRS05OTkgICAgICAgICAgICAgIC04ICAtPiAxLjBFLTk5OAorcm90eDE0NyByb3RhdGUgIDFFLTk5OSAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtOTk4Cityb3R4MTQ4IHJvdGF0ZSAgMUUtOTk5ICAgICAgICAgICAgICAgOCAgLT4gMS4wMDAwMDAwMEUtOTkxCityb3R4MTUxIHJvdGF0ZSAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gMS4wMDAwMDAwRS0xMDAwCityb3R4MTUyIHJvdGF0ZSAgMS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gMUUtMTAwNworcm90eDE1MyByb3RhdGUgIDEuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IDFFLTEwMDcKK3JvdHgxNTQgcm90YXRlICAxLjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAxLjAwMDAwMDBFLTEwMDAKK3JvdHgxNTUgcm90YXRlICA5LjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiA5LjAwMDAwMDBFLTEwMDAKK3JvdHgxNTYgcm90YXRlICA5LjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiA5RS0xMDA3Cityb3R4MTU3IHJvdGF0ZSAgOS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gOUUtMTAwNworcm90eDE1OCByb3RhdGUgIDkuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IDkuMDAwMDAwMEUtMTAwMAorcm90eDE2MCByb3RhdGUgIDFFLTEwMDcgICAgICAgICAgICAgLTEgIC0+IDEuMDAwMDAwMDBFLTk5OQorcm90eDE2MSByb3RhdGUgIDFFLTEwMDcgICAgICAgICAgICAgLTggIC0+IDEuMEUtMTAwNgorcm90eDE2MiByb3RhdGUgIDFFLTEwMDcgICAgICAgICAgICAgIDEgIC0+IDEuMEUtMTAwNgorcm90eDE2MyByb3RhdGUgIDFFLTEwMDcgICAgICAgICAgICAgIDggIC0+IDEuMDAwMDAwMDBFLTk5OQorLS0gIG5lZ2F0aXZlcworcm90eDE3MSByb3RhdGUgLTkuOTk5OTk5OTlFKzk5OSAgICAgLTEgIC0+IC05Ljk5OTk5OTk5RSs5OTkKK3JvdHgxNzIgcm90YXRlIC05Ljk5OTk5OTk5RSs5OTkgICAgIC04ICAtPiAtOS45OTk5OTk5OUUrOTk5Cityb3R4MTczIHJvdGF0ZSAtOS45OTk5OTk5OUUrOTk5ICAgICAgMSAgLT4gLTkuOTk5OTk5OTlFKzk5OQorcm90eDE3NCByb3RhdGUgLTkuOTk5OTk5OTlFKzk5OSAgICAgIDggIC0+IC05Ljk5OTk5OTk5RSs5OTkKK3JvdHgxNzUgcm90YXRlIC0xRS05OTkgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMEUtOTkxCityb3R4MTc2IHJvdGF0ZSAtMUUtOTk5ICAgICAgICAgICAgICAtOCAgLT4gLTEuMEUtOTk4Cityb3R4MTc3IHJvdGF0ZSAtMUUtOTk5ICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtOTk4Cityb3R4MTc4IHJvdGF0ZSAtMUUtOTk5ICAgICAgICAgICAgICAgOCAgLT4gLTEuMDAwMDAwMDBFLTk5MQorcm90eDE4MSByb3RhdGUgLTEuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IC0xLjAwMDAwMDBFLTEwMDAKK3JvdHgxODIgcm90YXRlIC0xLjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAtMUUtMTAwNworcm90eDE4MyByb3RhdGUgLTEuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IC0xRS0xMDA3Cityb3R4MTg0IHJvdGF0ZSAtMS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gLTEuMDAwMDAwMEUtMTAwMAorcm90eDE4NSByb3RhdGUgLTkuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IC05LjAwMDAwMDBFLTEwMDAKK3JvdHgxODYgcm90YXRlIC05LjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAtOUUtMTAwNworcm90eDE4NyByb3RhdGUgLTkuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IC05RS0xMDA3Cityb3R4MTg4IHJvdGF0ZSAtOS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gLTkuMDAwMDAwMEUtMTAwMAorcm90eDE5MCByb3RhdGUgLTFFLTEwMDcgICAgICAgICAgICAgLTEgIC0+IC0xLjAwMDAwMDAwRS05OTkKK3JvdHgxOTEgcm90YXRlIC0xRS0xMDA3ICAgICAgICAgICAgIC04ICAtPiAtMS4wRS0xMDA2Cityb3R4MTkyIHJvdGF0ZSAtMUUtMTAwNyAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMTAwNgorcm90eDE5MyByb3RhdGUgLTFFLTEwMDcgICAgICAgICAgICAgIDggIC0+IC0xLjAwMDAwMDAwRS05OTkKKworLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQorcm90eDIwMSByb3RhdGUgICAgICAgICAtMCAgICAwICAtPiAgLTAKK3JvdHgyMDIgcm90YXRlICAgICAgICAgLTAgICAgMiAgLT4gIC0wCityb3R4MjAzIHJvdGF0ZSAgICAgICAgIC0xICAgIDIgIC0+ICAtMTAwCityb3R4MjA0IHJvdGF0ZSAgICAgICAgIC0xICAgIDggIC0+ICAtMTAwMDAwMDAwCityb3R4MjA1IHJvdGF0ZSAgICAgICAgIC0xICAgIDkgIC0+ICAtMQorcm90eDIwNiByb3RhdGUgICAgICAgICAtMSAgIC0xICAtPiAgLTEwMDAwMDAwMAorcm90eDIwNyByb3RhdGUgLTEyMzQ1Njc4OSAgIC0xICAtPiAgLTkxMjM0NTY3OAorcm90eDIwOCByb3RhdGUgLTEyMzQ1Njc4OSAgIC04ICAtPiAgLTIzNDU2Nzg5MQorcm90eDIwOSByb3RhdGUgLTEyMzQ1Njc4OSAgIC05ICAtPiAgLTEyMzQ1Njc4OQorcm90eDIxMCByb3RhdGUgICAgICAgICAtMCAgIC0yICAtPiAgLTAKKworLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwKK3JvdHg3ODEgcm90YXRlIC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkKK3JvdHg3ODIgcm90YXRlIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKK3JvdHg3ODMgcm90YXRlIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK3JvdHg3ODQgcm90YXRlIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK3JvdHg3ODUgcm90YXRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKK3JvdHg3ODYgcm90YXRlIC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkKK3JvdHg3ODcgcm90YXRlIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdHg3ODggcm90YXRlIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdHg3ODkgcm90YXRlIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdHg3OTAgcm90YXRlIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdHg3OTEgcm90YXRlICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdHg3OTIgcm90YXRlICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdHg3OTMgcm90YXRlICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3JvdHg3OTQgcm90YXRlICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworcm90eDgwMCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgwMSByb3RhdGUgIEluZiAgLTggICAgIC0+IEluZmluaXR5Cityb3R4ODAyIHJvdGF0ZSAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkKK3JvdHg4MDMgcm90YXRlICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQorcm90eDgwNCByb3RhdGUgIEluZiAgIDAgICAgIC0+IEluZmluaXR5Cityb3R4ODA1IHJvdGF0ZSAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkKK3JvdHg4MDYgcm90YXRlICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQorcm90eDgwNyByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgwOCByb3RhdGUgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgwOSByb3RhdGUgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgxMCByb3RhdGUgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgxMSByb3RhdGUgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgxMiByb3RhdGUgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgxMyByb3RhdGUgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgxNCByb3RhdGUgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorcm90eDgxNSByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCityb3R4ODIxIHJvdGF0ZSAgTmFOIC1JbmYgICAgLT4gIE5hTgorcm90eDgyMiByb3RhdGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KK3JvdHg4MjMgcm90YXRlICBOYU4gLTEgICAgICAtPiAgTmFOCityb3R4ODI0IHJvdGF0ZSAgTmFOIC0wICAgICAgLT4gIE5hTgorcm90eDgyNSByb3RhdGUgIE5hTiAgMCAgICAgIC0+ICBOYU4KK3JvdHg4MjYgcm90YXRlICBOYU4gIDEgICAgICAtPiAgTmFOCityb3R4ODI3IHJvdGF0ZSAgTmFOICAxMDAwICAgLT4gIE5hTgorcm90eDgyOCByb3RhdGUgIE5hTiAgSW5mICAgIC0+ICBOYU4KK3JvdHg4Mjkgcm90YXRlICBOYU4gIE5hTiAgICAtPiAgTmFOCityb3R4ODMwIHJvdGF0ZSAtSW5mICBOYU4gICAgLT4gIE5hTgorcm90eDgzMSByb3RhdGUgLTEwMDAgTmFOICAgIC0+ICBOYU4KK3JvdHg4MzIgcm90YXRlIC0xICAgIE5hTiAgICAtPiAgTmFOCityb3R4ODMzIHJvdGF0ZSAtMCAgICBOYU4gICAgLT4gIE5hTgorcm90eDgzNCByb3RhdGUgIDAgICAgTmFOICAgIC0+ICBOYU4KK3JvdHg4MzUgcm90YXRlICAxICAgIE5hTiAgICAtPiAgTmFOCityb3R4ODM2IHJvdGF0ZSAgMTAwMCBOYU4gICAgLT4gIE5hTgorcm90eDgzNyByb3RhdGUgIEluZiAgTmFOICAgIC0+ICBOYU4KKworCisKK3JvdHg4NDEgcm90YXRlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg0MiByb3RhdGUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODQzIHJvdGF0ZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NDQgcm90YXRlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg0NSByb3RhdGUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODQ2IHJvdGF0ZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NDcgcm90YXRlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg0OCByb3RhdGUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODQ5IHJvdGF0ZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NTAgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg1MSByb3RhdGUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODUyIHJvdGF0ZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NTMgcm90YXRlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg1NCByb3RhdGUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODU1IHJvdGF0ZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NTYgcm90YXRlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg1NyByb3RhdGUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODU4IHJvdGF0ZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NTkgcm90YXRlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCityb3R4ODYxIHJvdGF0ZSAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKK3JvdHg4NjIgcm90YXRlICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgorcm90eDg2MyByb3RhdGUgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCityb3R4ODY0IHJvdGF0ZSAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKK3JvdHg4NjUgcm90YXRlICBOYU41ICAgK05hTjYgICAtPiAgTmFONQorcm90eDg2NiByb3RhdGUgLUluZiAgICAgTmFONyAgIC0+ICBOYU43Cityb3R4ODY3IHJvdGF0ZSAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKK3JvdHg4Njggcm90YXRlICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQorcm90eDg2OSByb3RhdGUgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorcm90eDg3MSByb3RhdGUgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NzIgcm90YXRlICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODczIHJvdGF0ZSAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg3NCByb3RhdGUgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4NzUgcm90YXRlICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODc2IHJvdGF0ZSAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg3NyByb3RhdGUgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4Nzggcm90YXRlIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODc5IHJvdGF0ZSAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg4MCByb3RhdGUgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KK3JvdHg4ODEgcm90YXRlICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCityb3R4ODgyIHJvdGF0ZSAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2Cityb3R4ODgzIHJvdGF0ZSAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgorcm90eDg4NCByb3RhdGUgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAorcm90eDg4NSByb3RhdGUgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gcGF5bG9hZCBkZWNhcGl0YXRlCitwcmVjaXNpb246IDUKK3JvdHg4ODYgcm90YXRlICAxMSAtc05hTjEyMzQ1Njc4OTAgLT4gLU5hTjY3ODkwICBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yb3VuZGluZy5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yb3VuZGluZy5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZjEzMjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JvdW5kaW5nLmRlY1Rlc3QKQEAgLTAsMCArMSwxMzAzIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHJvdW5kaW5nLmRlY1Rlc3QgLS0gZGVjaW1hbCByb3VuZGluZyBtb2RlcyB0ZXN0Y2FzZXMgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhlc2UgdGVzdHMgcmVxdWlyZSB0aGF0IGltcGxlbWVudGF0aW9ucyB0YWtlIGFjY291bnQgb2YgcmVzaWR1ZXMgaW4KKy0tIG9yZGVyIHRvIGdldCBjb3JyZWN0IHJlc3VsdHMgZm9yIHNvbWUgcm91bmRpbmcgbW9kZXMuICBSYXRoZXIgdGhhbgorLS0gc2luZ2xlIHJvdW5kaW5nIHRlc3RzIHdlIHRoZXJlZm9yZSBuZWVkIHRlc3RzIGZvciBtb3N0IG9wZXJhdG9ycy4KKy0tIFtXZSBkbyBhc3N1bWUgYWRkL21pbnVzL3BsdXMvc3VidHJhY3QgYXJlIGNvbW1vbiBwYXRocywgaG93ZXZlciwgYXMKKy0tIGlzIHJvdW5kaW5nIG9mIG5lZ2F0aXZlcyAoaWYgdGhlIGxhdHRlciB3b3JrcyBmb3IgYWRkaXRpb24sIGFzc3VtZSBpdAorLS0gd29ya3MgZm9yIHRoZSBvdGhlcnMsIHRvbykuXQorLS0KKy0tIFJvdW5kLWZvci1yZXJvdW5kICgwNVVQKSBpcyB0ZXN0ZWQgYXMgYSBzZXBhcmF0ZSBibG9jaywgbW9zdGx5IGZvcgorLS0gJ2hpc3RvcmljYWwnIHJlYXNvbnMuCistLQorLS0gVW5kZXJmbG93IFN1Ym5vcm1hbCBhbmQgb3ZlcmZsb3cgYmVoYXZpb3VycyBhcmUgdGVzdGVkIHVuZGVyIHRoZQorLS0gaW5kaXZpZHVhbCBvcGVyYXRvcnMuCisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgNSAgICAgICAgICAgLS0gZm9yIGVhc2llciB2aXN1YWwgaW5zcGVjdGlvbgorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKKworLS0gQWRkaXRpb24gb3BlcmF0b3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JvdW5kaW5nOiBkb3duCisKK3JhZHgxMDAgIGFkZCAxMjM0NSAtMC4xICAgICAgIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcmFkeDEwMSAgYWRkIDEyMzQ1IC0wLjAxICAgICAgLT4gMTIzNDQgSW5leGFjdCBSb3VuZGVkCityYWR4MTAyICBhZGQgMTIzNDUgLTAuMDAxICAgICAtPiAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMDMgIGFkZCAxMjM0NSAtMC4wMDAwMSAgIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcmFkeDEwNCAgYWRkIDEyMzQ1IC0wLjAwMDAwMSAgLT4gMTIzNDQgSW5leGFjdCBSb3VuZGVkCityYWR4MTA1ICBhZGQgMTIzNDUgLTAuMDAwMDAwMSAtPiAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMDYgIGFkZCAxMjM0NSAgMCAgICAgICAgIC0+IDEyMzQ1CityYWR4MTA3ICBhZGQgMTIzNDUgIDAuMDAwMDAwMSAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMDggIGFkZCAxMjM0NSAgMC4wMDAwMDEgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDEwOSAgYWRkIDEyMzQ1ICAwLjAwMDAxICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTEwICBhZGQgMTIzNDUgIDAuMDAwMSAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMTEgIGFkZCAxMjM0NSAgMC4wMDEgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDExMiAgYWRkIDEyMzQ1ICAwLjAxICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTEzICBhZGQgMTIzNDUgIDAuMSAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKKworcmFkeDExNSAgYWRkIDEyMzQ2ICAwLjQ5OTk5ICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MTE2ICBhZGQgMTIzNDYgIDAuNSAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMTcgIGFkZCAxMjM0NiAgMC41MDAwMSAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorCityYWR4MTIwICBhZGQgMTIzNDUgIDAuNCAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMjEgIGFkZCAxMjM0NSAgMC40OSAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDEyMiAgYWRkIDEyMzQ1ICAwLjQ5OSAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTIzICBhZGQgMTIzNDUgIDAuNDk5OTkgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMjQgIGFkZCAxMjM0NSAgMC41ICAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDEyNSAgYWRkIDEyMzQ1ICAwLjUwMDAxICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTI2ICBhZGQgMTIzNDUgIDAuNTAwMSAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxMjcgIGFkZCAxMjM0NSAgMC41MDEgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDEyOCAgYWRkIDEyMzQ1ICAwLjUxICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTI5ICBhZGQgMTIzNDUgIDAuNiAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZG93bgorCityYWR4MTQwICBhZGQgMTIzNDUgLTAuMSAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNDEgIGFkZCAxMjM0NSAtMC4wMSAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE0MiAgYWRkIDEyMzQ1IC0wLjAwMSAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTQzICBhZGQgMTIzNDUgLTAuMDAwMDEgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNDQgIGFkZCAxMjM0NSAtMC4wMDAwMDEgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE0NSAgYWRkIDEyMzQ1IC0wLjAwMDAwMDEgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTQ2ICBhZGQgMTIzNDUgIDAgICAgICAgICAtPiAxMjM0NQorcmFkeDE0NyAgYWRkIDEyMzQ1ICAwLjAwMDAwMDEgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTQ4ICBhZGQgMTIzNDUgIDAuMDAwMDAxICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNDkgIGFkZCAxMjM0NSAgMC4wMDAwMSAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE1MCAgYWRkIDEyMzQ1ICAwLjAwMDEgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTUxICBhZGQgMTIzNDUgIDAuMDAxICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNTIgIGFkZCAxMjM0NSAgMC4wMSAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE1MyAgYWRkIDEyMzQ1ICAwLjEgICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCisKK3JhZHgxNTUgIGFkZCAxMjM0NiAgMC40OTk5OSAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDE1NiAgYWRkIDEyMzQ2ICAwLjUgICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MTU3ICBhZGQgMTIzNDYgIDAuNTAwMDEgICAtPiAxMjM0NyBJbmV4YWN0IFJvdW5kZWQKKworcmFkeDE2MCAgYWRkIDEyMzQ1ICAwLjQgICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTYxICBhZGQgMTIzNDUgIDAuNDkgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNjIgIGFkZCAxMjM0NSAgMC40OTkgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE2MyAgYWRkIDEyMzQ1ICAwLjQ5OTk5ICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTY0ICBhZGQgMTIzNDUgIDAuNSAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNjUgIGFkZCAxMjM0NSAgMC41MDAwMSAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDE2NiAgYWRkIDEyMzQ1ICAwLjUwMDEgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MTY3ICBhZGQgMTIzNDUgIDAuNTAxICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNjggIGFkZCAxMjM0NSAgMC41MSAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDE2OSAgYWRkIDEyMzQ1ICAwLjYgICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworcmFkeDE3MCAgYWRkIDEyMzQ1IC0wLjEgICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTcxICBhZGQgMTIzNDUgLTAuMDEgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNzIgIGFkZCAxMjM0NSAtMC4wMDEgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE3MyAgYWRkIDEyMzQ1IC0wLjAwMDAxICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTc0ICBhZGQgMTIzNDUgLTAuMDAwMDAxICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxNzUgIGFkZCAxMjM0NSAtMC4wMDAwMDAxIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE3NiAgYWRkIDEyMzQ1ICAwICAgICAgICAgLT4gMTIzNDUKK3JhZHgxNzcgIGFkZCAxMjM0NSAgMC4wMDAwMDAxIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE3OCAgYWRkIDEyMzQ1ICAwLjAwMDAwMSAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTc5ICBhZGQgMTIzNDUgIDAuMDAwMDEgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxODAgIGFkZCAxMjM0NSAgMC4wMDAxICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE4MSAgYWRkIDEyMzQ1ICAwLjAwMSAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTgyICBhZGQgMTIzNDUgIDAuMDEgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxODMgIGFkZCAxMjM0NSAgMC4xICAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorCityYWR4MTg1ICBhZGQgMTIzNDYgIDAuNDk5OTkgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxODYgIGFkZCAxMjM0NiAgMC41ICAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDE4NyAgYWRkIDEyMzQ2ICAwLjUwMDAxICAgLT4gMTIzNDcgSW5leGFjdCBSb3VuZGVkCisKK3JhZHgxOTAgIGFkZCAxMjM0NSAgMC40ICAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE5MSAgYWRkIDEyMzQ1ICAwLjQ5ICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MTkyICBhZGQgMTIzNDUgIDAuNDk5ICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxOTMgIGFkZCAxMjM0NSAgMC40OTk5OSAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDE5NCAgYWRkIDEyMzQ1ICAwLjUgICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MTk1ICBhZGQgMTIzNDUgIDAuNTAwMDEgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxOTYgIGFkZCAxMjM0NSAgMC41MDAxICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDE5NyAgYWRkIDEyMzQ1ICAwLjUwMSAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MTk4ICBhZGQgMTIzNDUgIDAuNTEgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgxOTkgIGFkZCAxMjM0NSAgMC42ICAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorCityYWR4MjAwICBhZGQgMTIzNDUgLTAuMSAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMDEgIGFkZCAxMjM0NSAtMC4wMSAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDIwMiAgYWRkIDEyMzQ1IC0wLjAwMSAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MjAzICBhZGQgMTIzNDUgLTAuMDAwMDEgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMDQgIGFkZCAxMjM0NSAtMC4wMDAwMDEgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDIwNSAgYWRkIDEyMzQ1IC0wLjAwMDAwMDEgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MjA2ICBhZGQgMTIzNDUgIDAgICAgICAgICAtPiAxMjM0NQorcmFkeDIwNyAgYWRkIDEyMzQ1ICAwLjAwMDAwMDEgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MjA4ICBhZGQgMTIzNDUgIDAuMDAwMDAxICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMDkgIGFkZCAxMjM0NSAgMC4wMDAwMSAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDIxMCAgYWRkIDEyMzQ1ICAwLjAwMDEgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MjExICBhZGQgMTIzNDUgIDAuMDAxICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMTIgIGFkZCAxMjM0NSAgMC4wMSAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDIxMyAgYWRkIDEyMzQ1ICAwLjEgICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCisKK3JhZHgyMTUgIGFkZCAxMjM0NiAgMC40OTk5OSAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDIxNiAgYWRkIDEyMzQ2ICAwLjUgICAgICAgLT4gMTIzNDcgSW5leGFjdCBSb3VuZGVkCityYWR4MjE3ICBhZGQgMTIzNDYgIDAuNTAwMDEgICAtPiAxMjM0NyBJbmV4YWN0IFJvdW5kZWQKKworcmFkeDIyMCAgYWRkIDEyMzQ1ICAwLjQgICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MjIxICBhZGQgMTIzNDUgIDAuNDkgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMjIgIGFkZCAxMjM0NSAgMC40OTkgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDIyMyAgYWRkIDEyMzQ1ICAwLjQ5OTk5ICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MjI0ICBhZGQgMTIzNDUgIDAuNSAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMjUgIGFkZCAxMjM0NSAgMC41MDAwMSAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDIyNiAgYWRkIDEyMzQ1ICAwLjUwMDEgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MjI3ICBhZGQgMTIzNDUgIDAuNTAxICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMjggIGFkZCAxMjM0NSAgMC41MSAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDIyOSAgYWRkIDEyMzQ1ICAwLjYgICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiB1cAorCityYWR4MjMwICBhZGQgMTIzNDUgLTAuMSAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMzEgIGFkZCAxMjM0NSAtMC4wMSAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDIzMiAgYWRkIDEyMzQ1IC0wLjAwMSAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MjMzICBhZGQgMTIzNDUgLTAuMDAwMDEgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMzQgIGFkZCAxMjM0NSAtMC4wMDAwMDEgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDIzNSAgYWRkIDEyMzQ1IC0wLjAwMDAwMDEgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MjM2ICBhZGQgMTIzNDUgIDAgICAgICAgICAtPiAxMjM0NQorcmFkeDIzNyAgYWRkIDEyMzQ1ICAwLjAwMDAwMDEgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MjM4ICBhZGQgMTIzNDUgIDAuMDAwMDAxICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyMzkgIGFkZCAxMjM0NSAgMC4wMDAwMSAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDI0MCAgYWRkIDEyMzQ1ICAwLjAwMDEgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MjQxICBhZGQgMTIzNDUgIDAuMDAxICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyNDIgIGFkZCAxMjM0NSAgMC4wMSAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDI0MyAgYWRkIDEyMzQ1ICAwLjEgICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCisKK3JhZHgyNDUgIGFkZCAxMjM0NiAgMC40OTk5OSAgIC0+IDEyMzQ3IEluZXhhY3QgUm91bmRlZAorcmFkeDI0NiAgYWRkIDEyMzQ2ICAwLjUgICAgICAgLT4gMTIzNDcgSW5leGFjdCBSb3VuZGVkCityYWR4MjQ3ICBhZGQgMTIzNDYgIDAuNTAwMDEgICAtPiAxMjM0NyBJbmV4YWN0IFJvdW5kZWQKKworcmFkeDI1MCAgYWRkIDEyMzQ1ICAwLjQgICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MjUxICBhZGQgMTIzNDUgIDAuNDkgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyNTIgIGFkZCAxMjM0NSAgMC40OTkgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDI1MyAgYWRkIDEyMzQ1ICAwLjQ5OTk5ICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MjU0ICBhZGQgMTIzNDUgIDAuNSAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyNTUgIGFkZCAxMjM0NSAgMC41MDAwMSAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDI1NiAgYWRkIDEyMzQ1ICAwLjUwMDEgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MjU3ICBhZGQgMTIzNDUgIDAuNTAxICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgyNTggIGFkZCAxMjM0NSAgMC41MSAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDI1OSAgYWRkIDEyMzQ1ICAwLjYgICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBmbG9vcgorCityYWR4MzAwICBhZGQgMTIzNDUgLTAuMSAgICAgICAtPiAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMDEgIGFkZCAxMjM0NSAtMC4wMSAgICAgIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcmFkeDMwMiAgYWRkIDEyMzQ1IC0wLjAwMSAgICAgLT4gMTIzNDQgSW5leGFjdCBSb3VuZGVkCityYWR4MzAzICBhZGQgMTIzNDUgLTAuMDAwMDEgICAtPiAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMDQgIGFkZCAxMjM0NSAtMC4wMDAwMDEgIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcmFkeDMwNSAgYWRkIDEyMzQ1IC0wLjAwMDAwMDEgLT4gMTIzNDQgSW5leGFjdCBSb3VuZGVkCityYWR4MzA2ICBhZGQgMTIzNDUgIDAgICAgICAgICAtPiAxMjM0NQorcmFkeDMwNyAgYWRkIDEyMzQ1ICAwLjAwMDAwMDEgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MzA4ICBhZGQgMTIzNDUgIDAuMDAwMDAxICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMDkgIGFkZCAxMjM0NSAgMC4wMDAwMSAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDMxMCAgYWRkIDEyMzQ1ICAwLjAwMDEgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MzExICBhZGQgMTIzNDUgIDAuMDAxICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMTIgIGFkZCAxMjM0NSAgMC4wMSAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDMxMyAgYWRkIDEyMzQ1ICAwLjEgICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCisKK3JhZHgzMTUgIGFkZCAxMjM0NiAgMC40OTk5OSAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDMxNiAgYWRkIDEyMzQ2ICAwLjUgICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MzE3ICBhZGQgMTIzNDYgIDAuNTAwMDEgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKKworcmFkeDMyMCAgYWRkIDEyMzQ1ICAwLjQgICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MzIxICBhZGQgMTIzNDUgIDAuNDkgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMjIgIGFkZCAxMjM0NSAgMC40OTkgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDMyMyAgYWRkIDEyMzQ1ICAwLjQ5OTk5ICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MzI0ICBhZGQgMTIzNDUgIDAuNSAgICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMjUgIGFkZCAxMjM0NSAgMC41MDAwMSAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDMyNiAgYWRkIDEyMzQ1ICAwLjUwMDEgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MzI3ICBhZGQgMTIzNDUgIDAuNTAxICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMjggIGFkZCAxMjM0NSAgMC41MSAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDMyOSAgYWRkIDEyMzQ1ICAwLjYgICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBjZWlsaW5nCisKK3JhZHgzMzAgIGFkZCAxMjM0NSAtMC4xICAgICAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDMzMSAgYWRkIDEyMzQ1IC0wLjAxICAgICAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MzMyICBhZGQgMTIzNDUgLTAuMDAxICAgICAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMzMgIGFkZCAxMjM0NSAtMC4wMDAwMSAgIC0+IDEyMzQ1IEluZXhhY3QgUm91bmRlZAorcmFkeDMzNCAgYWRkIDEyMzQ1IC0wLjAwMDAwMSAgLT4gMTIzNDUgSW5leGFjdCBSb3VuZGVkCityYWR4MzM1ICBhZGQgMTIzNDUgLTAuMDAwMDAwMSAtPiAxMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMzYgIGFkZCAxMjM0NSAgMCAgICAgICAgIC0+IDEyMzQ1CityYWR4MzM3ICBhZGQgMTIzNDUgIDAuMDAwMDAwMSAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzMzggIGFkZCAxMjM0NSAgMC4wMDAwMDEgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDMzOSAgYWRkIDEyMzQ1ICAwLjAwMDAxICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MzQwICBhZGQgMTIzNDUgIDAuMDAwMSAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzNDEgIGFkZCAxMjM0NSAgMC4wMDEgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDM0MiAgYWRkIDEyMzQ1ICAwLjAxICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MzQzICBhZGQgMTIzNDUgIDAuMSAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKKworcmFkeDM0NSAgYWRkIDEyMzQ2ICAwLjQ5OTk5ICAgLT4gMTIzNDcgSW5leGFjdCBSb3VuZGVkCityYWR4MzQ2ICBhZGQgMTIzNDYgIDAuNSAgICAgICAtPiAxMjM0NyBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzNDcgIGFkZCAxMjM0NiAgMC41MDAwMSAgIC0+IDEyMzQ3IEluZXhhY3QgUm91bmRlZAorCityYWR4MzUwICBhZGQgMTIzNDUgIDAuNCAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzNTEgIGFkZCAxMjM0NSAgMC40OSAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDM1MiAgYWRkIDEyMzQ1ICAwLjQ5OSAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MzUzICBhZGQgMTIzNDUgIDAuNDk5OTkgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzNTQgIGFkZCAxMjM0NSAgMC41ICAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDM1NSAgYWRkIDEyMzQ1ICAwLjUwMDAxICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MzU2ICBhZGQgMTIzNDUgIDAuNTAwMSAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JhZHgzNTcgIGFkZCAxMjM0NSAgMC41MDEgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcmFkeDM1OCAgYWRkIDEyMzQ1ICAwLjUxICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityYWR4MzU5ICBhZGQgMTIzNDUgIDAuNiAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmVzLi4uCisKK3JvdW5kaW5nOiBkb3duCisKK3JzdXgxMDAgIGFkZCAtMTIzNDUgLTAuMSAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTAxICBhZGQgLTEyMzQ1IC0wLjAxICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDEwMiAgYWRkIC0xMjM0NSAtMC4wMDEgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxMDMgIGFkZCAtMTIzNDUgLTAuMDAwMDEgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTA0ICBhZGQgLTEyMzQ1IC0wLjAwMDAwMSAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDEwNSAgYWRkIC0xMjM0NSAtMC4wMDAwMDAxIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxMDYgIGFkZCAtMTIzNDUgIDAgICAgICAgICAtPiAtMTIzNDUKK3JzdXgxMDcgIGFkZCAtMTIzNDUgIDAuMDAwMDAwMSAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTA4ICBhZGQgLTEyMzQ1ICAwLjAwMDAwMSAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDEwOSAgYWRkIC0xMjM0NSAgMC4wMDAwMSAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxMTAgIGFkZCAtMTIzNDUgIDAuMDAwMSAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTExICBhZGQgLTEyMzQ1ICAwLjAwMSAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDExMiAgYWRkIC0xMjM0NSAgMC4wMSAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxMTMgIGFkZCAtMTIzNDUgIDAuMSAgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCisKK3JzdXgxMTUgIGFkZCAtMTIzNDYgIDAuNDk5OTkgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTE2ICBhZGQgLTEyMzQ2ICAwLjUgICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDExNyAgYWRkIC0xMjM0NiAgMC41MDAwMSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKKworcnN1eDEyMCAgYWRkIC0xMjM0NSAgMC40ICAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxMjEgIGFkZCAtMTIzNDUgIDAuNDkgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTIyICBhZGQgLTEyMzQ1ICAwLjQ5OSAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDEyMyAgYWRkIC0xMjM0NSAgMC40OTk5OSAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxMjQgIGFkZCAtMTIzNDUgIDAuNSAgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTI1ICBhZGQgLTEyMzQ1ICAwLjUwMDAxICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDEyNiAgYWRkIC0xMjM0NSAgMC41MDAxICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxMjcgIGFkZCAtMTIzNDUgIDAuNTAxICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTI4ICBhZGQgLTEyMzQ1ICAwLjUxICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDEyOSAgYWRkIC0xMjM0NSAgMC42ICAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZG93bgorCityc3V4MTQwICBhZGQgLTEyMzQ1IC0wLjEgICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE0MSAgYWRkIC0xMjM0NSAtMC4wMSAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNDIgIGFkZCAtMTIzNDUgLTAuMDAxICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTQzICBhZGQgLTEyMzQ1IC0wLjAwMDAxICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE0NCAgYWRkIC0xMjM0NSAtMC4wMDAwMDEgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNDUgIGFkZCAtMTIzNDUgLTAuMDAwMDAwMSAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTQ2ICBhZGQgLTEyMzQ1ICAwICAgICAgICAgLT4gLTEyMzQ1Cityc3V4MTQ3ICBhZGQgLTEyMzQ1ICAwLjAwMDAwMDEgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE0OCAgYWRkIC0xMjM0NSAgMC4wMDAwMDEgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNDkgIGFkZCAtMTIzNDUgIDAuMDAwMDEgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTUwICBhZGQgLTEyMzQ1ICAwLjAwMDEgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE1MSAgYWRkIC0xMjM0NSAgMC4wMDEgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNTIgIGFkZCAtMTIzNDUgIDAuMDEgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTUzICBhZGQgLTEyMzQ1ICAwLjEgICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorCityc3V4MTU1ICBhZGQgLTEyMzQ2ICAwLjQ5OTk5ICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDE1NiAgYWRkIC0xMjM0NiAgMC41ICAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNTcgIGFkZCAtMTIzNDYgIDAuNTAwMDEgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCisKK3JzdXgxNjAgIGFkZCAtMTIzNDUgIDAuNCAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTYxICBhZGQgLTEyMzQ1ICAwLjQ5ICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE2MiAgYWRkIC0xMjM0NSAgMC40OTkgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNjMgIGFkZCAtMTIzNDUgIDAuNDk5OTkgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTY0ICBhZGQgLTEyMzQ1ICAwLjUgICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDE2NSAgYWRkIC0xMjM0NSAgMC41MDAwMSAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNjYgIGFkZCAtMTIzNDUgIDAuNTAwMSAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTY3ICBhZGQgLTEyMzQ1ICAwLjUwMSAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDE2OCAgYWRkIC0xMjM0NSAgMC41MSAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNjkgIGFkZCAtMTIzNDUgIDAuNiAgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KKworcnN1eDE3MCAgYWRkIC0xMjM0NSAtMC4xICAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNzEgIGFkZCAtMTIzNDUgLTAuMDEgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTcyICBhZGQgLTEyMzQ1IC0wLjAwMSAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE3MyAgYWRkIC0xMjM0NSAtMC4wMDAwMSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNzQgIGFkZCAtMTIzNDUgLTAuMDAwMDAxICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTc1ICBhZGQgLTEyMzQ1IC0wLjAwMDAwMDEgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE3NiAgYWRkIC0xMjM0NSAgMCAgICAgICAgIC0+IC0xMjM0NQorcnN1eDE3NyAgYWRkIC0xMjM0NSAgMC4wMDAwMDAxIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxNzggIGFkZCAtMTIzNDUgIDAuMDAwMDAxICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTc5ICBhZGQgLTEyMzQ1ICAwLjAwMDAxICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE4MCAgYWRkIC0xMjM0NSAgMC4wMDAxICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxODEgIGFkZCAtMTIzNDUgIDAuMDAxICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTgyICBhZGQgLTEyMzQ1ICAwLjAxICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE4MyAgYWRkIC0xMjM0NSAgMC4xICAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKKworcnN1eDE4NSAgYWRkIC0xMjM0NiAgMC40OTk5OSAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxODYgIGFkZCAtMTIzNDYgIDAuNSAgICAgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityc3V4MTg3ICBhZGQgLTEyMzQ2ICAwLjUwMDAxICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorCityc3V4MTkwICBhZGQgLTEyMzQ1ICAwLjQgICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE5MSAgYWRkIC0xMjM0NSAgMC40OSAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxOTIgIGFkZCAtMTIzNDUgIDAuNDk5ICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MTkzICBhZGQgLTEyMzQ1ICAwLjQ5OTk5ICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDE5NCAgYWRkIC0xMjM0NSAgMC41ICAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxOTUgIGFkZCAtMTIzNDUgIDAuNTAwMDEgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTk2ICBhZGQgLTEyMzQ1ICAwLjUwMDEgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDE5NyAgYWRkIC0xMjM0NSAgMC41MDEgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgxOTggIGFkZCAtMTIzNDUgIDAuNTEgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MTk5ICBhZGQgLTEyMzQ1ICAwLjYgICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorCityc3V4MjAwICBhZGQgLTEyMzQ1IC0wLjEgICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDIwMSAgYWRkIC0xMjM0NSAtMC4wMSAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMDIgIGFkZCAtMTIzNDUgLTAuMDAxICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjAzICBhZGQgLTEyMzQ1IC0wLjAwMDAxICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDIwNCAgYWRkIC0xMjM0NSAtMC4wMDAwMDEgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMDUgIGFkZCAtMTIzNDUgLTAuMDAwMDAwMSAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjA2ICBhZGQgLTEyMzQ1ICAwICAgICAgICAgLT4gLTEyMzQ1Cityc3V4MjA3ICBhZGQgLTEyMzQ1ICAwLjAwMDAwMDEgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDIwOCAgYWRkIC0xMjM0NSAgMC4wMDAwMDEgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMDkgIGFkZCAtMTIzNDUgIDAuMDAwMDEgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjEwICBhZGQgLTEyMzQ1ICAwLjAwMDEgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDIxMSAgYWRkIC0xMjM0NSAgMC4wMDEgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMTIgIGFkZCAtMTIzNDUgIDAuMDEgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjEzICBhZGQgLTEyMzQ1ICAwLjEgICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorCityc3V4MjE1ICBhZGQgLTEyMzQ2ICAwLjQ5OTk5ICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDIxNiAgYWRkIC0xMjM0NiAgMC41ICAgICAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMTcgIGFkZCAtMTIzNDYgIDAuNTAwMDEgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCisKK3JzdXgyMjAgIGFkZCAtMTIzNDUgIDAuNCAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjIxICBhZGQgLTEyMzQ1ICAwLjQ5ICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDIyMiAgYWRkIC0xMjM0NSAgMC40OTkgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMjMgIGFkZCAtMTIzNDUgIDAuNDk5OTkgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjI0ICBhZGQgLTEyMzQ1ICAwLjUgICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDIyNSAgYWRkIC0xMjM0NSAgMC41MDAwMSAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMjYgIGFkZCAtMTIzNDUgIDAuNTAwMSAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MjI3ICBhZGQgLTEyMzQ1ICAwLjUwMSAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDIyOCAgYWRkIC0xMjM0NSAgMC41MSAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMjkgIGFkZCAtMTIzNDUgIDAuNiAgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiB1cAorCityc3V4MjMwICBhZGQgLTEyMzQ1IC0wLjEgICAgICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDIzMSAgYWRkIC0xMjM0NSAtMC4wMSAgICAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMzIgIGFkZCAtMTIzNDUgLTAuMDAxICAgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityc3V4MjMzICBhZGQgLTEyMzQ1IC0wLjAwMDAxICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDIzNCAgYWRkIC0xMjM0NSAtMC4wMDAwMDEgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMzUgIGFkZCAtMTIzNDUgLTAuMDAwMDAwMSAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityc3V4MjM2ICBhZGQgLTEyMzQ1ICAwICAgICAgICAgLT4gLTEyMzQ1Cityc3V4MjM3ICBhZGQgLTEyMzQ1ICAwLjAwMDAwMDEgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDIzOCAgYWRkIC0xMjM0NSAgMC4wMDAwMDEgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyMzkgIGFkZCAtMTIzNDUgIDAuMDAwMDEgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjQwICBhZGQgLTEyMzQ1ICAwLjAwMDEgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDI0MSAgYWRkIC0xMjM0NSAgMC4wMDEgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyNDIgIGFkZCAtMTIzNDUgIDAuMDEgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjQzICBhZGQgLTEyMzQ1ICAwLjEgICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorCityc3V4MjQ1ICBhZGQgLTEyMzQ2ICAwLjQ5OTk5ICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDI0NiAgYWRkIC0xMjM0NiAgMC41ICAgICAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyNDcgIGFkZCAtMTIzNDYgIDAuNTAwMDEgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCisKK3JzdXgyNTAgIGFkZCAtMTIzNDUgIDAuNCAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjUxICBhZGQgLTEyMzQ1ICAwLjQ5ICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDI1MiAgYWRkIC0xMjM0NSAgMC40OTkgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyNTMgIGFkZCAtMTIzNDUgIDAuNDk5OTkgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjU0ICBhZGQgLTEyMzQ1ICAwLjUgICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDI1NSAgYWRkIC0xMjM0NSAgMC41MDAwMSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyNTYgIGFkZCAtMTIzNDUgIDAuNTAwMSAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MjU3ICBhZGQgLTEyMzQ1ICAwLjUwMSAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDI1OCAgYWRkIC0xMjM0NSAgMC41MSAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgyNTkgIGFkZCAtMTIzNDUgIDAuNiAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBmbG9vcgorCityc3V4MzAwICBhZGQgLTEyMzQ1IC0wLjEgICAgICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDMwMSAgYWRkIC0xMjM0NSAtMC4wMSAgICAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMDIgIGFkZCAtMTIzNDUgLTAuMDAxICAgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityc3V4MzAzICBhZGQgLTEyMzQ1IC0wLjAwMDAxICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDMwNCAgYWRkIC0xMjM0NSAtMC4wMDAwMDEgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMDUgIGFkZCAtMTIzNDUgLTAuMDAwMDAwMSAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityc3V4MzA2ICBhZGQgLTEyMzQ1ICAwICAgICAgICAgLT4gLTEyMzQ1Cityc3V4MzA3ICBhZGQgLTEyMzQ1ICAwLjAwMDAwMDEgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDMwOCAgYWRkIC0xMjM0NSAgMC4wMDAwMDEgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMDkgIGFkZCAtMTIzNDUgIDAuMDAwMDEgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzEwICBhZGQgLTEyMzQ1ICAwLjAwMDEgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDMxMSAgYWRkIC0xMjM0NSAgMC4wMDEgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMTIgIGFkZCAtMTIzNDUgIDAuMDEgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzEzICBhZGQgLTEyMzQ1ICAwLjEgICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorCityc3V4MzE1ICBhZGQgLTEyMzQ2ICAwLjQ5OTk5ICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcnN1eDMxNiAgYWRkIC0xMjM0NiAgMC41ICAgICAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMTcgIGFkZCAtMTIzNDYgIDAuNTAwMDEgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCisKK3JzdXgzMjAgIGFkZCAtMTIzNDUgIDAuNCAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzIxICBhZGQgLTEyMzQ1ICAwLjQ5ICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDMyMiAgYWRkIC0xMjM0NSAgMC40OTkgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMjMgIGFkZCAtMTIzNDUgIDAuNDk5OTkgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzI0ICBhZGQgLTEyMzQ1ICAwLjUgICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDMyNSAgYWRkIC0xMjM0NSAgMC41MDAwMSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMjYgIGFkZCAtMTIzNDUgIDAuNTAwMSAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzI3ICBhZGQgLTEyMzQ1ICAwLjUwMSAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDMyOCAgYWRkIC0xMjM0NSAgMC41MSAgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMjkgIGFkZCAtMTIzNDUgIDAuNiAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBjZWlsaW5nCisKK3JzdXgzMzAgIGFkZCAtMTIzNDUgLTAuMSAgICAgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzMxICBhZGQgLTEyMzQ1IC0wLjAxICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDMzMiAgYWRkIC0xMjM0NSAtMC4wMDEgICAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMzMgIGFkZCAtMTIzNDUgLTAuMDAwMDEgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzM0ICBhZGQgLTEyMzQ1IC0wLjAwMDAwMSAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDMzNSAgYWRkIC0xMjM0NSAtMC4wMDAwMDAxIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzMzYgIGFkZCAtMTIzNDUgIDAgICAgICAgICAtPiAtMTIzNDUKK3JzdXgzMzcgIGFkZCAtMTIzNDUgIDAuMDAwMDAwMSAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MzM4ICBhZGQgLTEyMzQ1ICAwLjAwMDAwMSAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDMzOSAgYWRkIC0xMjM0NSAgMC4wMDAwMSAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzNDAgIGFkZCAtMTIzNDUgIDAuMDAwMSAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MzQxICBhZGQgLTEyMzQ1ICAwLjAwMSAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDM0MiAgYWRkIC0xMjM0NSAgMC4wMSAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzNDMgIGFkZCAtMTIzNDUgIDAuMSAgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCisKK3JzdXgzNDUgIGFkZCAtMTIzNDYgIDAuNDk5OTkgICAtPiAtMTIzNDUgSW5leGFjdCBSb3VuZGVkCityc3V4MzQ2ICBhZGQgLTEyMzQ2ICAwLjUgICAgICAgLT4gLTEyMzQ1IEluZXhhY3QgUm91bmRlZAorcnN1eDM0NyAgYWRkIC0xMjM0NiAgMC41MDAwMSAgIC0+IC0xMjM0NSBJbmV4YWN0IFJvdW5kZWQKKworcnN1eDM1MCAgYWRkIC0xMjM0NSAgMC40ICAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzNTEgIGFkZCAtMTIzNDUgIDAuNDkgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MzUyICBhZGQgLTEyMzQ1ICAwLjQ5OSAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDM1MyAgYWRkIC0xMjM0NSAgMC40OTk5OSAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzNTQgIGFkZCAtMTIzNDUgIDAuNSAgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MzU1ICBhZGQgLTEyMzQ1ICAwLjUwMDAxICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDM1NiAgYWRkIC0xMjM0NSAgMC41MDAxICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3JzdXgzNTcgIGFkZCAtMTIzNDUgIDAuNTAxICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityc3V4MzU4ICBhZGQgLTEyMzQ1ICAwLjUxICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcnN1eDM1OSAgYWRkIC0xMjM0NSAgMC42ICAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKKworLS0gQ2hlY2sgY2FuY2VsbGF0aW9uIHN1YnRyYWN0aW9ucworLS0gKFRoZSBJRUVFIDg1NCAnY3VyaW91cyBydWxlJyBpbiAkNi4zKQorCityb3VuZGluZzogZG93bgorcnpleDAwMSAgYWRkICAwICAgIDAgICAgLT4gIDAKK3J6ZXgwMDIgIGFkZCAgMCAgIC0wICAgIC0+ICAwCityemV4MDAzICBhZGQgLTAgICAgMCAgICAtPiAgMAorcnpleDAwNCAgYWRkIC0wICAgLTAgICAgLT4gLTAKK3J6ZXgwMDUgIGFkZCAgMSAgIC0xICAgIC0+ICAwCityemV4MDA2ICBhZGQgLTEgICAgMSAgICAtPiAgMAorcnpleDAwNyAgYWRkICAxLjUgLTEuNSAgLT4gIDAuMAorcnpleDAwOCAgYWRkIC0xLjUgIDEuNSAgLT4gIDAuMAorcnpleDAwOSAgYWRkICAyICAgLTIgICAgLT4gIDAKK3J6ZXgwMTAgIGFkZCAtMiAgICAyICAgIC0+ICAwCisKK3JvdW5kaW5nOiB1cAorcnpleDAxMSAgYWRkICAwICAgIDAgICAgLT4gIDAKK3J6ZXgwMTIgIGFkZCAgMCAgIC0wICAgIC0+ICAwCityemV4MDEzICBhZGQgLTAgICAgMCAgICAtPiAgMAorcnpleDAxNCAgYWRkIC0wICAgLTAgICAgLT4gLTAKK3J6ZXgwMTUgIGFkZCAgMSAgIC0xICAgIC0+ICAwCityemV4MDE2ICBhZGQgLTEgICAgMSAgICAtPiAgMAorcnpleDAxNyAgYWRkICAxLjUgLTEuNSAgLT4gIDAuMAorcnpleDAxOCAgYWRkIC0xLjUgIDEuNSAgLT4gIDAuMAorcnpleDAxOSAgYWRkICAyICAgLTIgICAgLT4gIDAKK3J6ZXgwMjAgIGFkZCAtMiAgICAyICAgIC0+ICAwCisKK3JvdW5kaW5nOiBoYWxmX3VwCityemV4MDIxICBhZGQgIDAgICAgMCAgICAtPiAgMAorcnpleDAyMiAgYWRkICAwICAgLTAgICAgLT4gIDAKK3J6ZXgwMjMgIGFkZCAtMCAgICAwICAgIC0+ICAwCityemV4MDI0ICBhZGQgLTAgICAtMCAgICAtPiAtMAorcnpleDAyNSAgYWRkICAxICAgLTEgICAgLT4gIDAKK3J6ZXgwMjYgIGFkZCAtMSAgICAxICAgIC0+ICAwCityemV4MDI3ICBhZGQgIDEuNSAtMS41ICAtPiAgMC4wCityemV4MDI4ICBhZGQgLTEuNSAgMS41ICAtPiAgMC4wCityemV4MDI5ICBhZGQgIDIgICAtMiAgICAtPiAgMAorcnpleDAzMCAgYWRkIC0yICAgIDIgICAgLT4gIDAKKworcm91bmRpbmc6IGhhbGZfZG93bgorcnpleDAzMSAgYWRkICAwICAgIDAgICAgLT4gIDAKK3J6ZXgwMzIgIGFkZCAgMCAgIC0wICAgIC0+ICAwCityemV4MDMzICBhZGQgLTAgICAgMCAgICAtPiAgMAorcnpleDAzNCAgYWRkIC0wICAgLTAgICAgLT4gLTAKK3J6ZXgwMzUgIGFkZCAgMSAgIC0xICAgIC0+ICAwCityemV4MDM2ICBhZGQgLTEgICAgMSAgICAtPiAgMAorcnpleDAzNyAgYWRkICAxLjUgLTEuNSAgLT4gIDAuMAorcnpleDAzOCAgYWRkIC0xLjUgIDEuNSAgLT4gIDAuMAorcnpleDAzOSAgYWRkICAyICAgLTIgICAgLT4gIDAKK3J6ZXgwNDAgIGFkZCAtMiAgICAyICAgIC0+ICAwCisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK3J6ZXgwNDEgIGFkZCAgMCAgICAwICAgIC0+ICAwCityemV4MDQyICBhZGQgIDAgICAtMCAgICAtPiAgMAorcnpleDA0MyAgYWRkIC0wICAgIDAgICAgLT4gIDAKK3J6ZXgwNDQgIGFkZCAtMCAgIC0wICAgIC0+IC0wCityemV4MDQ1ICBhZGQgIDEgICAtMSAgICAtPiAgMAorcnpleDA0NiAgYWRkIC0xICAgIDEgICAgLT4gIDAKK3J6ZXgwNDcgIGFkZCAgMS41IC0xLjUgIC0+ICAwLjAKK3J6ZXgwNDggIGFkZCAtMS41ICAxLjUgIC0+ICAwLjAKK3J6ZXgwNDkgIGFkZCAgMiAgIC0yICAgIC0+ICAwCityemV4MDUwICBhZGQgLTIgICAgMiAgICAtPiAgMAorCityb3VuZGluZzogZmxvb3IKK3J6ZXgwNTEgIGFkZCAgMCAgICAwICAgIC0+ICAwCityemV4MDUyICBhZGQgIDAgICAtMCAgICAtPiAtMCAgICAtLSBoZXJlIGFyZSB0d28gJ2N1cmlvdXMnCityemV4MDUzICBhZGQgLTAgICAgMCAgICAtPiAtMCAgICAtLQorcnpleDA1NCAgYWRkIC0wICAgLTAgICAgLT4gLTAKK3J6ZXgwNTUgIGFkZCAgMSAgIC0xICAgIC0+IC0wICAgIC0tIGhlcmUgYXJlIHRoZSByZXN0CityemV4MDU2ICBhZGQgLTEgICAgMSAgICAtPiAtMCAgICAtLSAuLgorcnpleDA1NyAgYWRkICAxLjUgLTEuNSAgLT4gLTAuMCAgLS0gLi4KK3J6ZXgwNTggIGFkZCAtMS41ICAxLjUgIC0+IC0wLjAgIC0tIC4uCityemV4MDU5ICBhZGQgIDIgICAtMiAgICAtPiAtMCAgICAtLSAuLgorcnpleDA2MCAgYWRkIC0yICAgIDIgICAgLT4gLTAgICAgLS0gLi4KKworcm91bmRpbmc6IGNlaWxpbmcKK3J6ZXgwNjEgIGFkZCAgMCAgICAwICAgIC0+ICAwCityemV4MDYyICBhZGQgIDAgICAtMCAgICAtPiAgMAorcnpleDA2MyAgYWRkIC0wICAgIDAgICAgLT4gIDAKK3J6ZXgwNjQgIGFkZCAtMCAgIC0wICAgIC0+IC0wCityemV4MDY1ICBhZGQgIDEgICAtMSAgICAtPiAgMAorcnpleDA2NiAgYWRkIC0xICAgIDEgICAgLT4gIDAKK3J6ZXgwNjcgIGFkZCAgMS41IC0xLjUgIC0+ICAwLjAKK3J6ZXgwNjggIGFkZCAtMS41ICAxLjUgIC0+ICAwLjAKK3J6ZXgwNjkgIGFkZCAgMiAgIC0yICAgIC0+ICAwCityemV4MDcwICBhZGQgLTIgICAgMiAgICAtPiAgMAorCisKKy0tIERpdmlzaW9uIG9wZXJhdG9ycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3JvdW5kaW5nOiBkb3duCityZHZ4MTAxICBkaXZpZGUgMTIzNDUgIDEgICAgICAgICAtPiAgMTIzNDUKK3JkdngxMDIgIGRpdmlkZSAxMjM0NSAgMS4wMDAxICAgIC0+ICAxMjM0MyBJbmV4YWN0IFJvdW5kZWQKK3JkdngxMDMgIGRpdmlkZSAxMjM0NSAgMS4wMDEgICAgIC0+ICAxMjMzMiBJbmV4YWN0IFJvdW5kZWQKK3JkdngxMDQgIGRpdmlkZSAxMjM0NSAgMS4wMSAgICAgIC0+ICAxMjIyMiBJbmV4YWN0IFJvdW5kZWQKK3JkdngxMDUgIGRpdmlkZSAxMjM0NSAgMS4xICAgICAgIC0+ICAxMTIyMiBJbmV4YWN0IFJvdW5kZWQKK3JkdngxMDYgIGRpdmlkZSAxMjM1NSAgNCAgICAgICAgIC0+ICAgMzA4OC43IEluZXhhY3QgUm91bmRlZAorcmR2eDEwNyAgZGl2aWRlIDEyMzQ1ICA0ICAgICAgICAgLT4gICAzMDg2LjIgSW5leGFjdCBSb3VuZGVkCityZHZ4MTA4ICBkaXZpZGUgMTIzNTUgIDQuMDAwMSAgICAtPiAgIDMwODguNiBJbmV4YWN0IFJvdW5kZWQKK3JkdngxMDkgIGRpdmlkZSAxMjM0NSAgNC4wMDAxICAgIC0+ICAgMzA4Ni4xIEluZXhhY3QgUm91bmRlZAorcmR2eDExMCAgZGl2aWRlIDEyMzQ1ICA0LjkgICAgICAgLT4gICAyNTE5LjMgSW5leGFjdCBSb3VuZGVkCityZHZ4MTExICBkaXZpZGUgMTIzNDUgIDQuOTkgICAgICAtPiAgIDI0NzMuOSBJbmV4YWN0IFJvdW5kZWQKK3JkdngxMTIgIGRpdmlkZSAxMjM0NSAgNC45OTkgICAgIC0+ICAgMjQ2OS40IEluZXhhY3QgUm91bmRlZAorcmR2eDExMyAgZGl2aWRlIDEyMzQ1ICA0Ljk5OTkgICAgLT4gICAyNDY5LjAgSW5leGFjdCBSb3VuZGVkCityZHZ4MTE0ICBkaXZpZGUgMTIzNDUgIDUgICAgICAgICAtPiAgIDI0NjkKK3JkdngxMTUgIGRpdmlkZSAxMjM0NSAgNS4wMDAxICAgIC0+ICAyNDY4LjkgSW5leGFjdCBSb3VuZGVkCityZHZ4MTE2ICBkaXZpZGUgMTIzNDUgIDUuMDAxICAgICAtPiAgMjQ2OC41IEluZXhhY3QgUm91bmRlZAorcmR2eDExNyAgZGl2aWRlIDEyMzQ1ICA1LjAxICAgICAgLT4gIDI0NjQuMCBJbmV4YWN0IFJvdW5kZWQKK3JkdngxMTggIGRpdmlkZSAxMjM0NSAgNS4xICAgICAgIC0+ICAyNDIwLjUgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK3JkdngyMDEgIGRpdmlkZSAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcmR2eDIwMiAgZGl2aWRlIDEyMzQ1ICAxLjAwMDEgICAgLT4gIDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcmR2eDIwMyAgZGl2aWRlIDEyMzQ1ICAxLjAwMSAgICAgLT4gIDEyMzMzIEluZXhhY3QgUm91bmRlZAorcmR2eDIwNCAgZGl2aWRlIDEyMzQ1ICAxLjAxICAgICAgLT4gIDEyMjIzIEluZXhhY3QgUm91bmRlZAorcmR2eDIwNSAgZGl2aWRlIDEyMzQ1ICAxLjEgICAgICAgLT4gIDExMjIzIEluZXhhY3QgUm91bmRlZAorcmR2eDIwNiAgZGl2aWRlIDEyMzU1ICA0ICAgICAgICAgLT4gICAzMDg4LjcgSW5leGFjdCBSb3VuZGVkCityZHZ4MjA3ICBkaXZpZGUgMTIzNDUgIDQgICAgICAgICAtPiAgIDMwODYuMiBJbmV4YWN0IFJvdW5kZWQKK3JkdngyMDggIGRpdmlkZSAxMjM1NSAgNC4wMDAxICAgIC0+ICAgMzA4OC43IEluZXhhY3QgUm91bmRlZAorcmR2eDIwOSAgZGl2aWRlIDEyMzQ1ICA0LjAwMDEgICAgLT4gICAzMDg2LjIgSW5leGFjdCBSb3VuZGVkCityZHZ4MjEwICBkaXZpZGUgMTIzNDUgIDQuOSAgICAgICAtPiAgIDI1MTkuNCBJbmV4YWN0IFJvdW5kZWQKK3JkdngyMTEgIGRpdmlkZSAxMjM0NSAgNC45OSAgICAgIC0+ICAgMjQ3My45IEluZXhhY3QgUm91bmRlZAorcmR2eDIxMiAgZGl2aWRlIDEyMzQ1ICA0Ljk5OSAgICAgLT4gICAyNDY5LjUgSW5leGFjdCBSb3VuZGVkCityZHZ4MjEzICBkaXZpZGUgMTIzNDUgIDQuOTk5OSAgICAtPiAgIDI0NjkuMCBJbmV4YWN0IFJvdW5kZWQKK3JkdngyMTQgIGRpdmlkZSAxMjM0NSAgNSAgICAgICAgIC0+ICAgMjQ2OQorcmR2eDIxNSAgZGl2aWRlIDEyMzQ1ICA1LjAwMDEgICAgLT4gIDI0NjkuMCBJbmV4YWN0IFJvdW5kZWQKK3JkdngyMTYgIGRpdmlkZSAxMjM0NSAgNS4wMDEgICAgIC0+ICAyNDY4LjUgSW5leGFjdCBSb3VuZGVkCityZHZ4MjE3ICBkaXZpZGUgMTIzNDUgIDUuMDEgICAgICAtPiAgMjQ2NC4xIEluZXhhY3QgUm91bmRlZAorcmR2eDIxOCAgZGl2aWRlIDEyMzQ1ICA1LjEgICAgICAgLT4gIDI0MjAuNiBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorcmR2eDMwMSAgZGl2aWRlIDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CityZHZ4MzAyICBkaXZpZGUgMTIzNDUgIDEuMDAwMSAgICAtPiAgMTIzNDQgSW5leGFjdCBSb3VuZGVkCityZHZ4MzAzICBkaXZpZGUgMTIzNDUgIDEuMDAxICAgICAtPiAgMTIzMzMgSW5leGFjdCBSb3VuZGVkCityZHZ4MzA0ICBkaXZpZGUgMTIzNDUgIDEuMDEgICAgICAtPiAgMTIyMjMgSW5leGFjdCBSb3VuZGVkCityZHZ4MzA1ICBkaXZpZGUgMTIzNDUgIDEuMSAgICAgICAtPiAgMTEyMjMgSW5leGFjdCBSb3VuZGVkCityZHZ4MzA2ICBkaXZpZGUgMTIzNTUgIDQgICAgICAgICAtPiAgIDMwODguOCBJbmV4YWN0IFJvdW5kZWQKK3JkdngzMDcgIGRpdmlkZSAxMjM0NSAgNCAgICAgICAgIC0+ICAgMzA4Ni4yIEluZXhhY3QgUm91bmRlZAorcmR2eDMwOCAgZGl2aWRlIDEyMzU1ICA0LjAwMDEgICAgLT4gICAzMDg4LjcgSW5leGFjdCBSb3VuZGVkCityZHZ4MzA5ICBkaXZpZGUgMTIzNDUgIDQuMDAwMSAgICAtPiAgIDMwODYuMiBJbmV4YWN0IFJvdW5kZWQKK3JkdngzMTAgIGRpdmlkZSAxMjM0NSAgNC45ICAgICAgIC0+ICAgMjUxOS40IEluZXhhY3QgUm91bmRlZAorcmR2eDMxMSAgZGl2aWRlIDEyMzQ1ICA0Ljk5ICAgICAgLT4gICAyNDczLjkgSW5leGFjdCBSb3VuZGVkCityZHZ4MzEyICBkaXZpZGUgMTIzNDUgIDQuOTk5ICAgICAtPiAgIDI0NjkuNSBJbmV4YWN0IFJvdW5kZWQKK3JkdngzMTMgIGRpdmlkZSAxMjM0NSAgNC45OTk5ICAgIC0+ICAgMjQ2OS4wIEluZXhhY3QgUm91bmRlZAorcmR2eDMxNCAgZGl2aWRlIDEyMzQ1ICA1ICAgICAgICAgLT4gICAyNDY5CityZHZ4MzE1ICBkaXZpZGUgMTIzNDUgIDUuMDAwMSAgICAtPiAgMjQ2OS4wIEluZXhhY3QgUm91bmRlZAorcmR2eDMxNiAgZGl2aWRlIDEyMzQ1ICA1LjAwMSAgICAgLT4gIDI0NjguNSBJbmV4YWN0IFJvdW5kZWQKK3JkdngzMTcgIGRpdmlkZSAxMjM0NSAgNS4wMSAgICAgIC0+ICAyNDY0LjEgSW5leGFjdCBSb3VuZGVkCityZHZ4MzE4ICBkaXZpZGUgMTIzNDUgIDUuMSAgICAgICAtPiAgMjQyMC42IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl91cAorcmR2eDQwMSAgZGl2aWRlIDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CityZHZ4NDAyICBkaXZpZGUgMTIzNDUgIDEuMDAwMSAgICAtPiAgMTIzNDQgSW5leGFjdCBSb3VuZGVkCityZHZ4NDAzICBkaXZpZGUgMTIzNDUgIDEuMDAxICAgICAtPiAgMTIzMzMgSW5leGFjdCBSb3VuZGVkCityZHZ4NDA0ICBkaXZpZGUgMTIzNDUgIDEuMDEgICAgICAtPiAgMTIyMjMgSW5leGFjdCBSb3VuZGVkCityZHZ4NDA1ICBkaXZpZGUgMTIzNDUgIDEuMSAgICAgICAtPiAgMTEyMjMgSW5leGFjdCBSb3VuZGVkCityZHZ4NDA2ICBkaXZpZGUgMTIzNTUgIDQgICAgICAgICAtPiAgIDMwODguOCBJbmV4YWN0IFJvdW5kZWQKK3Jkdng0MDcgIGRpdmlkZSAxMjM0NSAgNCAgICAgICAgIC0+ICAgMzA4Ni4zIEluZXhhY3QgUm91bmRlZAorcmR2eDQwOCAgZGl2aWRlIDEyMzU1ICA0LjAwMDEgICAgLT4gICAzMDg4LjcgSW5leGFjdCBSb3VuZGVkCityZHZ4NDA5ICBkaXZpZGUgMTIzNDUgIDQuMDAwMSAgICAtPiAgIDMwODYuMiBJbmV4YWN0IFJvdW5kZWQKK3Jkdng0MTAgIGRpdmlkZSAxMjM0NSAgNC45ICAgICAgIC0+ICAgMjUxOS40IEluZXhhY3QgUm91bmRlZAorcmR2eDQxMSAgZGl2aWRlIDEyMzQ1ICA0Ljk5ICAgICAgLT4gICAyNDczLjkgSW5leGFjdCBSb3VuZGVkCityZHZ4NDEyICBkaXZpZGUgMTIzNDUgIDQuOTk5ICAgICAtPiAgIDI0NjkuNSBJbmV4YWN0IFJvdW5kZWQKK3Jkdng0MTMgIGRpdmlkZSAxMjM0NSAgNC45OTk5ICAgIC0+ICAgMjQ2OS4wIEluZXhhY3QgUm91bmRlZAorcmR2eDQxNCAgZGl2aWRlIDEyMzQ1ICA1ICAgICAgICAgLT4gICAyNDY5CityZHZ4NDE1ICBkaXZpZGUgMTIzNDUgIDUuMDAwMSAgICAtPiAgMjQ2OS4wIEluZXhhY3QgUm91bmRlZAorcmR2eDQxNiAgZGl2aWRlIDEyMzQ1ICA1LjAwMSAgICAgLT4gIDI0NjguNSBJbmV4YWN0IFJvdW5kZWQKK3Jkdng0MTcgIGRpdmlkZSAxMjM0NSAgNS4wMSAgICAgIC0+ICAyNDY0LjEgSW5leGFjdCBSb3VuZGVkCityZHZ4NDE4ICBkaXZpZGUgMTIzNDUgIDUuMSAgICAgICAtPiAgMjQyMC42IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogdXAKK3Jkdng1MDEgIGRpdmlkZSAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcmR2eDUwMiAgZGl2aWRlIDEyMzQ1ICAxLjAwMDEgICAgLT4gIDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcmR2eDUwMyAgZGl2aWRlIDEyMzQ1ICAxLjAwMSAgICAgLT4gIDEyMzMzIEluZXhhY3QgUm91bmRlZAorcmR2eDUwNCAgZGl2aWRlIDEyMzQ1ICAxLjAxICAgICAgLT4gIDEyMjIzIEluZXhhY3QgUm91bmRlZAorcmR2eDUwNSAgZGl2aWRlIDEyMzQ1ICAxLjEgICAgICAgLT4gIDExMjIzIEluZXhhY3QgUm91bmRlZAorcmR2eDUwNiAgZGl2aWRlIDEyMzU1ICA0ICAgICAgICAgLT4gICAzMDg4LjggSW5leGFjdCBSb3VuZGVkCityZHZ4NTA3ICBkaXZpZGUgMTIzNDUgIDQgICAgICAgICAtPiAgIDMwODYuMyBJbmV4YWN0IFJvdW5kZWQKK3Jkdng1MDggIGRpdmlkZSAxMjM1NSAgNC4wMDAxICAgIC0+ICAgMzA4OC43IEluZXhhY3QgUm91bmRlZAorcmR2eDUwOSAgZGl2aWRlIDEyMzQ1ICA0LjAwMDEgICAgLT4gICAzMDg2LjIgSW5leGFjdCBSb3VuZGVkCityZHZ4NTEwICBkaXZpZGUgMTIzNDUgIDQuOSAgICAgICAtPiAgIDI1MTkuNCBJbmV4YWN0IFJvdW5kZWQKK3Jkdng1MTEgIGRpdmlkZSAxMjM0NSAgNC45OSAgICAgIC0+ICAgMjQ3NC4wIEluZXhhY3QgUm91bmRlZAorcmR2eDUxMiAgZGl2aWRlIDEyMzQ1ICA0Ljk5OSAgICAgLT4gICAyNDY5LjUgSW5leGFjdCBSb3VuZGVkCityZHZ4NTEzICBkaXZpZGUgMTIzNDUgIDQuOTk5OSAgICAtPiAgIDI0NjkuMSBJbmV4YWN0IFJvdW5kZWQKK3Jkdng1MTQgIGRpdmlkZSAxMjM0NSAgNSAgICAgICAgIC0+ICAgMjQ2OQorcmR2eDUxNSAgZGl2aWRlIDEyMzQ1ICA1LjAwMDEgICAgLT4gIDI0NjkuMCBJbmV4YWN0IFJvdW5kZWQKK3Jkdng1MTYgIGRpdmlkZSAxMjM0NSAgNS4wMDEgICAgIC0+ICAyNDY4LjYgSW5leGFjdCBSb3VuZGVkCityZHZ4NTE3ICBkaXZpZGUgMTIzNDUgIDUuMDEgICAgICAtPiAgMjQ2NC4xIEluZXhhY3QgUm91bmRlZAorcmR2eDUxOCAgZGl2aWRlIDEyMzQ1ICA1LjEgICAgICAgLT4gIDI0MjAuNiBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGZsb29yCityZHZ4NjAxICBkaXZpZGUgMTIzNDUgIDEgICAgICAgICAtPiAgMTIzNDUKK3Jkdng2MDIgIGRpdmlkZSAxMjM0NSAgMS4wMDAxICAgIC0+ICAxMjM0MyBJbmV4YWN0IFJvdW5kZWQKK3Jkdng2MDMgIGRpdmlkZSAxMjM0NSAgMS4wMDEgICAgIC0+ICAxMjMzMiBJbmV4YWN0IFJvdW5kZWQKK3Jkdng2MDQgIGRpdmlkZSAxMjM0NSAgMS4wMSAgICAgIC0+ICAxMjIyMiBJbmV4YWN0IFJvdW5kZWQKK3Jkdng2MDUgIGRpdmlkZSAxMjM0NSAgMS4xICAgICAgIC0+ICAxMTIyMiBJbmV4YWN0IFJvdW5kZWQKK3Jkdng2MDYgIGRpdmlkZSAxMjM1NSAgNCAgICAgICAgIC0+ICAgMzA4OC43IEluZXhhY3QgUm91bmRlZAorcmR2eDYwNyAgZGl2aWRlIDEyMzQ1ICA0ICAgICAgICAgLT4gICAzMDg2LjIgSW5leGFjdCBSb3VuZGVkCityZHZ4NjA4ICBkaXZpZGUgMTIzNTUgIDQuMDAwMSAgICAtPiAgIDMwODguNiBJbmV4YWN0IFJvdW5kZWQKK3Jkdng2MDkgIGRpdmlkZSAxMjM0NSAgNC4wMDAxICAgIC0+ICAgMzA4Ni4xIEluZXhhY3QgUm91bmRlZAorcmR2eDYxMCAgZGl2aWRlIDEyMzQ1ICA0LjkgICAgICAgLT4gICAyNTE5LjMgSW5leGFjdCBSb3VuZGVkCityZHZ4NjExICBkaXZpZGUgMTIzNDUgIDQuOTkgICAgICAtPiAgIDI0NzMuOSBJbmV4YWN0IFJvdW5kZWQKK3Jkdng2MTIgIGRpdmlkZSAxMjM0NSAgNC45OTkgICAgIC0+ICAgMjQ2OS40IEluZXhhY3QgUm91bmRlZAorcmR2eDYxMyAgZGl2aWRlIDEyMzQ1ICA0Ljk5OTkgICAgLT4gICAyNDY5LjAgSW5leGFjdCBSb3VuZGVkCityZHZ4NjE0ICBkaXZpZGUgMTIzNDUgIDUgICAgICAgICAtPiAgIDI0NjkKK3Jkdng2MTUgIGRpdmlkZSAxMjM0NSAgNS4wMDAxICAgIC0+ICAyNDY4LjkgSW5leGFjdCBSb3VuZGVkCityZHZ4NjE2ICBkaXZpZGUgMTIzNDUgIDUuMDAxICAgICAtPiAgMjQ2OC41IEluZXhhY3QgUm91bmRlZAorcmR2eDYxNyAgZGl2aWRlIDEyMzQ1ICA1LjAxICAgICAgLT4gIDI0NjQuMCBJbmV4YWN0IFJvdW5kZWQKK3Jkdng2MTggIGRpdmlkZSAxMjM0NSAgNS4xICAgICAgIC0+ICAyNDIwLjUgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBjZWlsaW5nCityZHZ4NzAxICBkaXZpZGUgMTIzNDUgIDEgICAgICAgICAtPiAgMTIzNDUKK3Jkdng3MDIgIGRpdmlkZSAxMjM0NSAgMS4wMDAxICAgIC0+ICAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3Jkdng3MDMgIGRpdmlkZSAxMjM0NSAgMS4wMDEgICAgIC0+ICAxMjMzMyBJbmV4YWN0IFJvdW5kZWQKK3Jkdng3MDQgIGRpdmlkZSAxMjM0NSAgMS4wMSAgICAgIC0+ICAxMjIyMyBJbmV4YWN0IFJvdW5kZWQKK3Jkdng3MDUgIGRpdmlkZSAxMjM0NSAgMS4xICAgICAgIC0+ICAxMTIyMyBJbmV4YWN0IFJvdW5kZWQKK3Jkdng3MDYgIGRpdmlkZSAxMjM1NSAgNCAgICAgICAgIC0+ICAgMzA4OC44IEluZXhhY3QgUm91bmRlZAorcmR2eDcwNyAgZGl2aWRlIDEyMzQ1ICA0ICAgICAgICAgLT4gICAzMDg2LjMgSW5leGFjdCBSb3VuZGVkCityZHZ4NzA4ICBkaXZpZGUgMTIzNTUgIDQuMDAwMSAgICAtPiAgIDMwODguNyBJbmV4YWN0IFJvdW5kZWQKK3Jkdng3MDkgIGRpdmlkZSAxMjM0NSAgNC4wMDAxICAgIC0+ICAgMzA4Ni4yIEluZXhhY3QgUm91bmRlZAorcmR2eDcxMCAgZGl2aWRlIDEyMzQ1ICA0LjkgICAgICAgLT4gICAyNTE5LjQgSW5leGFjdCBSb3VuZGVkCityZHZ4NzExICBkaXZpZGUgMTIzNDUgIDQuOTkgICAgICAtPiAgIDI0NzQuMCBJbmV4YWN0IFJvdW5kZWQKK3Jkdng3MTIgIGRpdmlkZSAxMjM0NSAgNC45OTkgICAgIC0+ICAgMjQ2OS41IEluZXhhY3QgUm91bmRlZAorcmR2eDcxMyAgZGl2aWRlIDEyMzQ1ICA0Ljk5OTkgICAgLT4gICAyNDY5LjEgSW5leGFjdCBSb3VuZGVkCityZHZ4NzE0ICBkaXZpZGUgMTIzNDUgIDUgICAgICAgICAtPiAgIDI0NjkKK3Jkdng3MTUgIGRpdmlkZSAxMjM0NSAgNS4wMDAxICAgIC0+ICAyNDY5LjAgSW5leGFjdCBSb3VuZGVkCityZHZ4NzE2ICBkaXZpZGUgMTIzNDUgIDUuMDAxICAgICAtPiAgMjQ2OC42IEluZXhhY3QgUm91bmRlZAorcmR2eDcxNyAgZGl2aWRlIDEyMzQ1ICA1LjAxICAgICAgLT4gIDI0NjQuMSBJbmV4YWN0IFJvdW5kZWQKK3Jkdng3MTggIGRpdmlkZSAxMjM0NSAgNS4xICAgICAgIC0+ICAyNDIwLjYgSW5leGFjdCBSb3VuZGVkCisKKy0tIFtkaXZpZGVJbnRlZ2VyIGFuZCByZW1haW5kZXIgdW5hZmZlY3RlZF0KKworLS0gTXVsdGlwbGljYXRpb24gb3BlcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcm91bmRpbmc6IGRvd24KK3JtdXgxMDEgIG11bHRpcGx5IDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CitybXV4MTAyICBtdWx0aXBseSAxMjM0NSAgMS4wMDAxICAgIC0+ICAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3JtdXgxMDMgIG11bHRpcGx5IDEyMzQ1ICAxLjAwMSAgICAgLT4gIDEyMzU3IEluZXhhY3QgUm91bmRlZAorcm11eDEwNCAgbXVsdGlwbHkgMTIzNDUgIDEuMDEgICAgICAtPiAgMTI0NjggSW5leGFjdCBSb3VuZGVkCitybXV4MTA1ICBtdWx0aXBseSAxMjM0NSAgMS4xICAgICAgIC0+ICAxMzU3OSBJbmV4YWN0IFJvdW5kZWQKK3JtdXgxMDYgIG11bHRpcGx5IDEyMzQ1ICA0ICAgICAgICAgLT4gIDQ5MzgwCitybXV4MTA3ICBtdWx0aXBseSAxMjM0NSAgNC4wMDAxICAgIC0+ICA0OTM4MSBJbmV4YWN0IFJvdW5kZWQKK3JtdXgxMDggIG11bHRpcGx5IDEyMzQ1ICA0LjkgICAgICAgLT4gIDYwNDkwIEluZXhhY3QgUm91bmRlZAorcm11eDEwOSAgbXVsdGlwbHkgMTIzNDUgIDQuOTkgICAgICAtPiAgNjE2MDEgSW5leGFjdCBSb3VuZGVkCitybXV4MTEwICBtdWx0aXBseSAxMjM0NSAgNC45OTkgICAgIC0+ICA2MTcxMiBJbmV4YWN0IFJvdW5kZWQKK3JtdXgxMTEgIG11bHRpcGx5IDEyMzQ1ICA0Ljk5OTkgICAgLT4gIDYxNzIzIEluZXhhY3QgUm91bmRlZAorcm11eDExMiAgbXVsdGlwbHkgMTIzNDUgIDUgICAgICAgICAtPiAgNjE3MjUKK3JtdXgxMTMgIG11bHRpcGx5IDEyMzQ1ICA1LjAwMDEgICAgLT4gIDYxNzI2IEluZXhhY3QgUm91bmRlZAorcm11eDExNCAgbXVsdGlwbHkgMTIzNDUgIDUuMDAxICAgICAtPiAgNjE3MzcgSW5leGFjdCBSb3VuZGVkCitybXV4MTE1ICBtdWx0aXBseSAxMjM0NSAgNS4wMSAgICAgIC0+ICA2MTg0OCBJbmV4YWN0IFJvdW5kZWQKK3JtdXgxMTYgIG11bHRpcGx5IDEyMzQ1ICAxMiAgICAgICAgLT4gIDEuNDgxNEUrNSBSb3VuZGVkCitybXV4MTE3ICBtdWx0aXBseSAxMjM0NSAgMTMgICAgICAgIC0+ICAxLjYwNDhFKzUgSW5leGFjdCBSb3VuZGVkCitybXV4MTE4ICBtdWx0aXBseSAxMjM1NSAgMTIgICAgICAgIC0+ICAxLjQ4MjZFKzUgUm91bmRlZAorcm11eDExOSAgbXVsdGlwbHkgMTIzNTUgIDEzICAgICAgICAtPiAgMS42MDYxRSs1IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9kb3duCitybXV4MjAxICBtdWx0aXBseSAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcm11eDIwMiAgbXVsdGlwbHkgMTIzNDUgIDEuMDAwMSAgICAtPiAgMTIzNDYgSW5leGFjdCBSb3VuZGVkCitybXV4MjAzICBtdWx0aXBseSAxMjM0NSAgMS4wMDEgICAgIC0+ICAxMjM1NyBJbmV4YWN0IFJvdW5kZWQKK3JtdXgyMDQgIG11bHRpcGx5IDEyMzQ1ICAxLjAxICAgICAgLT4gIDEyNDY4IEluZXhhY3QgUm91bmRlZAorcm11eDIwNSAgbXVsdGlwbHkgMTIzNDUgIDEuMSAgICAgICAtPiAgMTM1NzkgSW5leGFjdCBSb3VuZGVkCitybXV4MjA2ICBtdWx0aXBseSAxMjM0NSAgNCAgICAgICAgIC0+ICA0OTM4MAorcm11eDIwNyAgbXVsdGlwbHkgMTIzNDUgIDQuMDAwMSAgICAtPiAgNDkzODEgSW5leGFjdCBSb3VuZGVkCitybXV4MjA4ICBtdWx0aXBseSAxMjM0NSAgNC45ICAgICAgIC0+ICA2MDQ5MCBJbmV4YWN0IFJvdW5kZWQKK3JtdXgyMDkgIG11bHRpcGx5IDEyMzQ1ICA0Ljk5ICAgICAgLT4gIDYxNjAyIEluZXhhY3QgUm91bmRlZAorcm11eDIxMCAgbXVsdGlwbHkgMTIzNDUgIDQuOTk5ICAgICAtPiAgNjE3MTMgSW5leGFjdCBSb3VuZGVkCitybXV4MjExICBtdWx0aXBseSAxMjM0NSAgNC45OTk5ICAgIC0+ICA2MTcyNCBJbmV4YWN0IFJvdW5kZWQKK3JtdXgyMTIgIG11bHRpcGx5IDEyMzQ1ICA1ICAgICAgICAgLT4gIDYxNzI1CitybXV4MjEzICBtdWx0aXBseSAxMjM0NSAgNS4wMDAxICAgIC0+ICA2MTcyNiBJbmV4YWN0IFJvdW5kZWQKK3JtdXgyMTQgIG11bHRpcGx5IDEyMzQ1ICA1LjAwMSAgICAgLT4gIDYxNzM3IEluZXhhY3QgUm91bmRlZAorcm11eDIxNSAgbXVsdGlwbHkgMTIzNDUgIDUuMDEgICAgICAtPiAgNjE4NDggSW5leGFjdCBSb3VuZGVkCitybXV4MjE2ICBtdWx0aXBseSAxMjM0NSAgMTIgICAgICAgIC0+ICAxLjQ4MTRFKzUgUm91bmRlZAorcm11eDIxNyAgbXVsdGlwbHkgMTIzNDUgIDEzICAgICAgICAtPiAgMS42MDQ4RSs1IEluZXhhY3QgUm91bmRlZAorcm11eDIxOCAgbXVsdGlwbHkgMTIzNTUgIDEyICAgICAgICAtPiAgMS40ODI2RSs1IFJvdW5kZWQKK3JtdXgyMTkgIG11bHRpcGx5IDEyMzU1ICAxMyAgICAgICAgLT4gIDEuNjA2MUUrNSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorcm11eDMwMSAgbXVsdGlwbHkgMTIzNDUgIDEgICAgICAgICAtPiAgMTIzNDUKK3JtdXgzMDIgIG11bHRpcGx5IDEyMzQ1ICAxLjAwMDEgICAgLT4gIDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcm11eDMwMyAgbXVsdGlwbHkgMTIzNDUgIDEuMDAxICAgICAtPiAgMTIzNTcgSW5leGFjdCBSb3VuZGVkCitybXV4MzA0ICBtdWx0aXBseSAxMjM0NSAgMS4wMSAgICAgIC0+ICAxMjQ2OCBJbmV4YWN0IFJvdW5kZWQKK3JtdXgzMDUgIG11bHRpcGx5IDEyMzQ1ICAxLjEgICAgICAgLT4gIDEzNTgwIEluZXhhY3QgUm91bmRlZAorcm11eDMwNiAgbXVsdGlwbHkgMTIzNDUgIDQgICAgICAgICAtPiAgNDkzODAKK3JtdXgzMDcgIG11bHRpcGx5IDEyMzQ1ICA0LjAwMDEgICAgLT4gIDQ5MzgxIEluZXhhY3QgUm91bmRlZAorcm11eDMwOCAgbXVsdGlwbHkgMTIzNDUgIDQuOSAgICAgICAtPiAgNjA0OTAgSW5leGFjdCBSb3VuZGVkCitybXV4MzA5ICBtdWx0aXBseSAxMjM0NSAgNC45OSAgICAgIC0+ICA2MTYwMiBJbmV4YWN0IFJvdW5kZWQKK3JtdXgzMTAgIG11bHRpcGx5IDEyMzQ1ICA0Ljk5OSAgICAgLT4gIDYxNzEzIEluZXhhY3QgUm91bmRlZAorcm11eDMxMSAgbXVsdGlwbHkgMTIzNDUgIDQuOTk5OSAgICAtPiAgNjE3MjQgSW5leGFjdCBSb3VuZGVkCitybXV4MzEyICBtdWx0aXBseSAxMjM0NSAgNSAgICAgICAgIC0+ICA2MTcyNQorcm11eDMxMyAgbXVsdGlwbHkgMTIzNDUgIDUuMDAwMSAgICAtPiAgNjE3MjYgSW5leGFjdCBSb3VuZGVkCitybXV4MzE0ICBtdWx0aXBseSAxMjM0NSAgNS4wMDEgICAgIC0+ICA2MTczNyBJbmV4YWN0IFJvdW5kZWQKK3JtdXgzMTUgIG11bHRpcGx5IDEyMzQ1ICA1LjAxICAgICAgLT4gIDYxODQ4IEluZXhhY3QgUm91bmRlZAorcm11eDMxNiAgbXVsdGlwbHkgMTIzNDUgIDEyICAgICAgICAtPiAgMS40ODE0RSs1IFJvdW5kZWQKK3JtdXgzMTcgIG11bHRpcGx5IDEyMzQ1ICAxMyAgICAgICAgLT4gIDEuNjA0OEUrNSBJbmV4YWN0IFJvdW5kZWQKK3JtdXgzMTggIG11bHRpcGx5IDEyMzU1ICAxMiAgICAgICAgLT4gIDEuNDgyNkUrNSBSb3VuZGVkCitybXV4MzE5ICBtdWx0aXBseSAxMjM1NSAgMTMgICAgICAgIC0+ICAxLjYwNjJFKzUgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitybXV4NDAxICBtdWx0aXBseSAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcm11eDQwMiAgbXVsdGlwbHkgMTIzNDUgIDEuMDAwMSAgICAtPiAgMTIzNDYgSW5leGFjdCBSb3VuZGVkCitybXV4NDAzICBtdWx0aXBseSAxMjM0NSAgMS4wMDEgICAgIC0+ICAxMjM1NyBJbmV4YWN0IFJvdW5kZWQKK3JtdXg0MDQgIG11bHRpcGx5IDEyMzQ1ICAxLjAxICAgICAgLT4gIDEyNDY4IEluZXhhY3QgUm91bmRlZAorcm11eDQwNSAgbXVsdGlwbHkgMTIzNDUgIDEuMSAgICAgICAtPiAgMTM1ODAgSW5leGFjdCBSb3VuZGVkCitybXV4NDA2ICBtdWx0aXBseSAxMjM0NSAgNCAgICAgICAgIC0+ICA0OTM4MAorcm11eDQwNyAgbXVsdGlwbHkgMTIzNDUgIDQuMDAwMSAgICAtPiAgNDkzODEgSW5leGFjdCBSb3VuZGVkCitybXV4NDA4ICBtdWx0aXBseSAxMjM0NSAgNC45ICAgICAgIC0+ICA2MDQ5MSBJbmV4YWN0IFJvdW5kZWQKK3JtdXg0MDkgIG11bHRpcGx5IDEyMzQ1ICA0Ljk5ICAgICAgLT4gIDYxNjAyIEluZXhhY3QgUm91bmRlZAorcm11eDQxMCAgbXVsdGlwbHkgMTIzNDUgIDQuOTk5ICAgICAtPiAgNjE3MTMgSW5leGFjdCBSb3VuZGVkCitybXV4NDExICBtdWx0aXBseSAxMjM0NSAgNC45OTk5ICAgIC0+ICA2MTcyNCBJbmV4YWN0IFJvdW5kZWQKK3JtdXg0MTIgIG11bHRpcGx5IDEyMzQ1ICA1ICAgICAgICAgLT4gIDYxNzI1CitybXV4NDEzICBtdWx0aXBseSAxMjM0NSAgNS4wMDAxICAgIC0+ICA2MTcyNiBJbmV4YWN0IFJvdW5kZWQKK3JtdXg0MTQgIG11bHRpcGx5IDEyMzQ1ICA1LjAwMSAgICAgLT4gIDYxNzM3IEluZXhhY3QgUm91bmRlZAorcm11eDQxNSAgbXVsdGlwbHkgMTIzNDUgIDUuMDEgICAgICAtPiAgNjE4NDggSW5leGFjdCBSb3VuZGVkCitybXV4NDE2ICBtdWx0aXBseSAxMjM0NSAgMTIgICAgICAgIC0+ICAxLjQ4MTRFKzUgUm91bmRlZAorcm11eDQxNyAgbXVsdGlwbHkgMTIzNDUgIDEzICAgICAgICAtPiAgMS42MDQ5RSs1IEluZXhhY3QgUm91bmRlZAorcm11eDQxOCAgbXVsdGlwbHkgMTIzNTUgIDEyICAgICAgICAtPiAgMS40ODI2RSs1IFJvdW5kZWQKK3JtdXg0MTkgIG11bHRpcGx5IDEyMzU1ICAxMyAgICAgICAgLT4gIDEuNjA2MkUrNSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IHVwCitybXV4NTAxICBtdWx0aXBseSAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcm11eDUwMiAgbXVsdGlwbHkgMTIzNDUgIDEuMDAwMSAgICAtPiAgMTIzNDcgSW5leGFjdCBSb3VuZGVkCitybXV4NTAzICBtdWx0aXBseSAxMjM0NSAgMS4wMDEgICAgIC0+ICAxMjM1OCBJbmV4YWN0IFJvdW5kZWQKK3JtdXg1MDQgIG11bHRpcGx5IDEyMzQ1ICAxLjAxICAgICAgLT4gIDEyNDY5IEluZXhhY3QgUm91bmRlZAorcm11eDUwNSAgbXVsdGlwbHkgMTIzNDUgIDEuMSAgICAgICAtPiAgMTM1ODAgSW5leGFjdCBSb3VuZGVkCitybXV4NTA2ICBtdWx0aXBseSAxMjM0NSAgNCAgICAgICAgIC0+ICA0OTM4MAorcm11eDUwNyAgbXVsdGlwbHkgMTIzNDUgIDQuMDAwMSAgICAtPiAgNDkzODIgSW5leGFjdCBSb3VuZGVkCitybXV4NTA4ICBtdWx0aXBseSAxMjM0NSAgNC45ICAgICAgIC0+ICA2MDQ5MSBJbmV4YWN0IFJvdW5kZWQKK3JtdXg1MDkgIG11bHRpcGx5IDEyMzQ1ICA0Ljk5ICAgICAgLT4gIDYxNjAyIEluZXhhY3QgUm91bmRlZAorcm11eDUxMCAgbXVsdGlwbHkgMTIzNDUgIDQuOTk5ICAgICAtPiAgNjE3MTMgSW5leGFjdCBSb3VuZGVkCitybXV4NTExICBtdWx0aXBseSAxMjM0NSAgNC45OTk5ICAgIC0+ICA2MTcyNCBJbmV4YWN0IFJvdW5kZWQKK3JtdXg1MTIgIG11bHRpcGx5IDEyMzQ1ICA1ICAgICAgICAgLT4gIDYxNzI1CitybXV4NTEzICBtdWx0aXBseSAxMjM0NSAgNS4wMDAxICAgIC0+ICA2MTcyNyBJbmV4YWN0IFJvdW5kZWQKK3JtdXg1MTQgIG11bHRpcGx5IDEyMzQ1ICA1LjAwMSAgICAgLT4gIDYxNzM4IEluZXhhY3QgUm91bmRlZAorcm11eDUxNSAgbXVsdGlwbHkgMTIzNDUgIDUuMDEgICAgICAtPiAgNjE4NDkgSW5leGFjdCBSb3VuZGVkCitybXV4NTE2ICBtdWx0aXBseSAxMjM0NSAgMTIgICAgICAgIC0+ICAxLjQ4MTRFKzUgUm91bmRlZAorcm11eDUxNyAgbXVsdGlwbHkgMTIzNDUgIDEzICAgICAgICAtPiAgMS42MDQ5RSs1IEluZXhhY3QgUm91bmRlZAorcm11eDUxOCAgbXVsdGlwbHkgMTIzNTUgIDEyICAgICAgICAtPiAgMS40ODI2RSs1IFJvdW5kZWQKK3JtdXg1MTkgIG11bHRpcGx5IDEyMzU1ICAxMyAgICAgICAgLT4gIDEuNjA2MkUrNSBJbmV4YWN0IFJvdW5kZWQKKy0tIFtybXV4NTE2ICYgcm11eDUxOF0gY2FuIHN1cnByaXNlCisKK3JvdW5kaW5nOiBmbG9vcgorcm11eDYwMSAgbXVsdGlwbHkgMTIzNDUgIDEgICAgICAgICAtPiAgMTIzNDUKK3JtdXg2MDIgIG11bHRpcGx5IDEyMzQ1ICAxLjAwMDEgICAgLT4gIDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcm11eDYwMyAgbXVsdGlwbHkgMTIzNDUgIDEuMDAxICAgICAtPiAgMTIzNTcgSW5leGFjdCBSb3VuZGVkCitybXV4NjA0ICBtdWx0aXBseSAxMjM0NSAgMS4wMSAgICAgIC0+ICAxMjQ2OCBJbmV4YWN0IFJvdW5kZWQKK3JtdXg2MDUgIG11bHRpcGx5IDEyMzQ1ICAxLjEgICAgICAgLT4gIDEzNTc5IEluZXhhY3QgUm91bmRlZAorcm11eDYwNiAgbXVsdGlwbHkgMTIzNDUgIDQgICAgICAgICAtPiAgNDkzODAKK3JtdXg2MDcgIG11bHRpcGx5IDEyMzQ1ICA0LjAwMDEgICAgLT4gIDQ5MzgxIEluZXhhY3QgUm91bmRlZAorcm11eDYwOCAgbXVsdGlwbHkgMTIzNDUgIDQuOSAgICAgICAtPiAgNjA0OTAgSW5leGFjdCBSb3VuZGVkCitybXV4NjA5ICBtdWx0aXBseSAxMjM0NSAgNC45OSAgICAgIC0+ICA2MTYwMSBJbmV4YWN0IFJvdW5kZWQKK3JtdXg2MTAgIG11bHRpcGx5IDEyMzQ1ICA0Ljk5OSAgICAgLT4gIDYxNzEyIEluZXhhY3QgUm91bmRlZAorcm11eDYxMSAgbXVsdGlwbHkgMTIzNDUgIDQuOTk5OSAgICAtPiAgNjE3MjMgSW5leGFjdCBSb3VuZGVkCitybXV4NjEyICBtdWx0aXBseSAxMjM0NSAgNSAgICAgICAgIC0+ICA2MTcyNQorcm11eDYxMyAgbXVsdGlwbHkgMTIzNDUgIDUuMDAwMSAgICAtPiAgNjE3MjYgSW5leGFjdCBSb3VuZGVkCitybXV4NjE0ICBtdWx0aXBseSAxMjM0NSAgNS4wMDEgICAgIC0+ICA2MTczNyBJbmV4YWN0IFJvdW5kZWQKK3JtdXg2MTUgIG11bHRpcGx5IDEyMzQ1ICA1LjAxICAgICAgLT4gIDYxODQ4IEluZXhhY3QgUm91bmRlZAorcm11eDYxNiAgbXVsdGlwbHkgMTIzNDUgIDEyICAgICAgICAtPiAgMS40ODE0RSs1IFJvdW5kZWQKK3JtdXg2MTcgIG11bHRpcGx5IDEyMzQ1ICAxMyAgICAgICAgLT4gIDEuNjA0OEUrNSBJbmV4YWN0IFJvdW5kZWQKK3JtdXg2MTggIG11bHRpcGx5IDEyMzU1ICAxMiAgICAgICAgLT4gIDEuNDgyNkUrNSBSb3VuZGVkCitybXV4NjE5ICBtdWx0aXBseSAxMjM1NSAgMTMgICAgICAgIC0+ICAxLjYwNjFFKzUgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBjZWlsaW5nCitybXV4NzAxICBtdWx0aXBseSAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcm11eDcwMiAgbXVsdGlwbHkgMTIzNDUgIDEuMDAwMSAgICAtPiAgMTIzNDcgSW5leGFjdCBSb3VuZGVkCitybXV4NzAzICBtdWx0aXBseSAxMjM0NSAgMS4wMDEgICAgIC0+ICAxMjM1OCBJbmV4YWN0IFJvdW5kZWQKK3JtdXg3MDQgIG11bHRpcGx5IDEyMzQ1ICAxLjAxICAgICAgLT4gIDEyNDY5IEluZXhhY3QgUm91bmRlZAorcm11eDcwNSAgbXVsdGlwbHkgMTIzNDUgIDEuMSAgICAgICAtPiAgMTM1ODAgSW5leGFjdCBSb3VuZGVkCitybXV4NzA2ICBtdWx0aXBseSAxMjM0NSAgNCAgICAgICAgIC0+ICA0OTM4MAorcm11eDcwNyAgbXVsdGlwbHkgMTIzNDUgIDQuMDAwMSAgICAtPiAgNDkzODIgSW5leGFjdCBSb3VuZGVkCitybXV4NzA4ICBtdWx0aXBseSAxMjM0NSAgNC45ICAgICAgIC0+ICA2MDQ5MSBJbmV4YWN0IFJvdW5kZWQKK3JtdXg3MDkgIG11bHRpcGx5IDEyMzQ1ICA0Ljk5ICAgICAgLT4gIDYxNjAyIEluZXhhY3QgUm91bmRlZAorcm11eDcxMCAgbXVsdGlwbHkgMTIzNDUgIDQuOTk5ICAgICAtPiAgNjE3MTMgSW5leGFjdCBSb3VuZGVkCitybXV4NzExICBtdWx0aXBseSAxMjM0NSAgNC45OTk5ICAgIC0+ICA2MTcyNCBJbmV4YWN0IFJvdW5kZWQKK3JtdXg3MTIgIG11bHRpcGx5IDEyMzQ1ICA1ICAgICAgICAgLT4gIDYxNzI1CitybXV4NzEzICBtdWx0aXBseSAxMjM0NSAgNS4wMDAxICAgIC0+ICA2MTcyNyBJbmV4YWN0IFJvdW5kZWQKK3JtdXg3MTQgIG11bHRpcGx5IDEyMzQ1ICA1LjAwMSAgICAgLT4gIDYxNzM4IEluZXhhY3QgUm91bmRlZAorcm11eDcxNSAgbXVsdGlwbHkgMTIzNDUgIDUuMDEgICAgICAtPiAgNjE4NDkgSW5leGFjdCBSb3VuZGVkCitybXV4NzE2ICBtdWx0aXBseSAxMjM0NSAgMTIgICAgICAgIC0+ICAxLjQ4MTRFKzUgUm91bmRlZAorcm11eDcxNyAgbXVsdGlwbHkgMTIzNDUgIDEzICAgICAgICAtPiAgMS42MDQ5RSs1IEluZXhhY3QgUm91bmRlZAorcm11eDcxOCAgbXVsdGlwbHkgMTIzNTUgIDEyICAgICAgICAtPiAgMS40ODI2RSs1IFJvdW5kZWQKK3JtdXg3MTkgIG11bHRpcGx5IDEyMzU1ICAxMyAgICAgICAgLT4gIDEuNjA2MkUrNSBJbmV4YWN0IFJvdW5kZWQKKworLS0gUG93ZXIgb3BlcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcm91bmRpbmc6IGRvd24KK3Jwb3gxMDEgIHBvd2VyIDEyMzQ1ICAtNSAgICAgICAgLT4gIDMuNDg3N0UtMjEgSW5leGFjdCBSb3VuZGVkCitycG94MTAyICBwb3dlciAxMjM0NSAgLTQgICAgICAgIC0+ICA0LjMwNTZFLTE3IEluZXhhY3QgUm91bmRlZAorcnBveDEwMyAgcG93ZXIgMTIzNDUgIC0zICAgICAgICAtPiAgNS4zMTUyRS0xMyBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gxMDQgIHBvd2VyIDEyMzQ1ICAtMiAgICAgICAgLT4gIDYuNTYxN0UtOSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gxMDUgIHBvd2VyIDEyMzQ1ICAtMSAgICAgICAgLT4gIDAuMDAwMDgxMDA0IEluZXhhY3QgUm91bmRlZAorcnBveDEwNiAgcG93ZXIgMTIzNDUgIDAgICAgICAgICAtPiAgMQorcnBveDEwNyAgcG93ZXIgMTIzNDUgIDEgICAgICAgICAtPiAgMTIzNDUKK3Jwb3gxMDggIHBvd2VyIDEyMzQ1ICAyICAgICAgICAgLT4gIDEuNTIzOUUrOCBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gxMDkgIHBvd2VyIDEyMzQ1ICAzICAgICAgICAgLT4gIDEuODgxM0UrMTIgSW5leGFjdCBSb3VuZGVkCitycG94MTEwICBwb3dlciAxMjM0NSAgNCAgICAgICAgIC0+ICAyLjMyMjVFKzE2IEluZXhhY3QgUm91bmRlZAorcnBveDExMSAgcG93ZXIgMTIzNDUgIDUgICAgICAgICAtPiAgMi44NjcxRSsyMCBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gxMTIgIHBvd2VyICAgNDE1ICAyICAgICAgICAgLT4gIDEuNzIyMkUrNSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gxMTMgIHBvd2VyICAgIDc1ICAzICAgICAgICAgLT4gIDQuMjE4N0UrNSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZG93bgorcnBveDIwMSAgcG93ZXIgMTIzNDUgIC01ICAgICAgICAtPiAgMy40ODc3RS0yMSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gyMDIgIHBvd2VyIDEyMzQ1ICAtNCAgICAgICAgLT4gIDQuMzA1NkUtMTcgSW5leGFjdCBSb3VuZGVkCitycG94MjAzICBwb3dlciAxMjM0NSAgLTMgICAgICAgIC0+ICA1LjMxNTNFLTEzIEluZXhhY3QgUm91bmRlZAorcnBveDIwNCAgcG93ZXIgMTIzNDUgIC0yICAgICAgICAtPiAgNi41NjE3RS05IEluZXhhY3QgUm91bmRlZAorcnBveDIwNSAgcG93ZXIgMTIzNDUgIC0xICAgICAgICAtPiAgMC4wMDAwODEwMDQgSW5leGFjdCBSb3VuZGVkCitycG94MjA2ICBwb3dlciAxMjM0NSAgMCAgICAgICAgIC0+ICAxCitycG94MjA3ICBwb3dlciAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcnBveDIwOCAgcG93ZXIgMTIzNDUgIDIgICAgICAgICAtPiAgMS41MjQwRSs4IEluZXhhY3QgUm91bmRlZAorcnBveDIwOSAgcG93ZXIgMTIzNDUgIDMgICAgICAgICAtPiAgMS44ODE0RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gyMTAgIHBvd2VyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDIuMzIyNUUrMTYgSW5leGFjdCBSb3VuZGVkCitycG94MjExICBwb3dlciAxMjM0NSAgNSAgICAgICAgIC0+ICAyLjg2NzJFKzIwIEluZXhhY3QgUm91bmRlZAorcnBveDIxMiAgcG93ZXIgICA0MTUgIDIgICAgICAgICAtPiAgMS43MjIyRSs1IEluZXhhY3QgUm91bmRlZAorcnBveDIxMyAgcG93ZXIgICAgNzUgIDMgICAgICAgICAtPiAgNC4yMTg3RSs1IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogaGFsZl9ldmVuCitycG94MzAxICBwb3dlciAxMjM0NSAgLTUgICAgICAgIC0+ICAzLjQ4NzdFLTIxIEluZXhhY3QgUm91bmRlZAorcnBveDMwMiAgcG93ZXIgMTIzNDUgIC00ICAgICAgICAtPiAgNC4zMDU2RS0xNyBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gzMDMgIHBvd2VyIDEyMzQ1ICAtMyAgICAgICAgLT4gIDUuMzE1M0UtMTMgSW5leGFjdCBSb3VuZGVkCitycG94MzA0ICBwb3dlciAxMjM0NSAgLTIgICAgICAgIC0+ICA2LjU2MTdFLTkgSW5leGFjdCBSb3VuZGVkCitycG94MzA1ICBwb3dlciAxMjM0NSAgLTEgICAgICAgIC0+ICAwLjAwMDA4MTAwNCBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gzMDYgIHBvd2VyIDEyMzQ1ICAwICAgICAgICAgLT4gIDEKK3Jwb3gzMDcgIHBvd2VyIDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CitycG94MzA4ICBwb3dlciAxMjM0NSAgMiAgICAgICAgIC0+ICAxLjUyNDBFKzggSW5leGFjdCBSb3VuZGVkCitycG94MzA5ICBwb3dlciAxMjM0NSAgMyAgICAgICAgIC0+ICAxLjg4MTRFKzEyIEluZXhhY3QgUm91bmRlZAorcnBveDMxMCAgcG93ZXIgMTIzNDUgIDQgICAgICAgICAtPiAgMi4zMjI1RSsxNiBJbmV4YWN0IFJvdW5kZWQKK3Jwb3gzMTEgIHBvd2VyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDIuODY3MkUrMjAgSW5leGFjdCBSb3VuZGVkCitycG94MzEyICBwb3dlciAgIDQxNSAgMiAgICAgICAgIC0+ICAxLjcyMjJFKzUgSW5leGFjdCBSb3VuZGVkCitycG94MzEzICBwb3dlciAgICA3NSAgMyAgICAgICAgIC0+ICA0LjIxODhFKzUgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBoYWxmX3VwCitycG94NDAxICBwb3dlciAxMjM0NSAgLTUgICAgICAgIC0+ICAzLjQ4NzdFLTIxIEluZXhhY3QgUm91bmRlZAorcnBveDQwMiAgcG93ZXIgMTIzNDUgIC00ICAgICAgICAtPiAgNC4zMDU2RS0xNyBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g0MDMgIHBvd2VyIDEyMzQ1ICAtMyAgICAgICAgLT4gIDUuMzE1M0UtMTMgSW5leGFjdCBSb3VuZGVkCitycG94NDA0ICBwb3dlciAxMjM0NSAgLTIgICAgICAgIC0+ICA2LjU2MTdFLTkgSW5leGFjdCBSb3VuZGVkCitycG94NDA1ICBwb3dlciAxMjM0NSAgLTEgICAgICAgIC0+ICAwLjAwMDA4MTAwNCBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g0MDYgIHBvd2VyIDEyMzQ1ICAwICAgICAgICAgLT4gIDEKK3Jwb3g0MDcgIHBvd2VyIDEyMzQ1ICAxICAgICAgICAgLT4gIDEyMzQ1CitycG94NDA4ICBwb3dlciAxMjM0NSAgMiAgICAgICAgIC0+ICAxLjUyNDBFKzggSW5leGFjdCBSb3VuZGVkCitycG94NDA5ICBwb3dlciAxMjM0NSAgMyAgICAgICAgIC0+ICAxLjg4MTRFKzEyIEluZXhhY3QgUm91bmRlZAorcnBveDQxMCAgcG93ZXIgMTIzNDUgIDQgICAgICAgICAtPiAgMi4zMjI1RSsxNiBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g0MTEgIHBvd2VyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDIuODY3MkUrMjAgSW5leGFjdCBSb3VuZGVkCitycG94NDEyICBwb3dlciAgIDQxNSAgMiAgICAgICAgIC0+ICAxLjcyMjNFKzUgSW5leGFjdCBSb3VuZGVkCitycG94NDEzICBwb3dlciAgICA3NSAgMyAgICAgICAgIC0+ICA0LjIxODhFKzUgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiB1cAorcnBveDUwMSAgcG93ZXIgMTIzNDUgIC01ICAgICAgICAtPiAgMy40ODc4RS0yMSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g1MDIgIHBvd2VyIDEyMzQ1ICAtNCAgICAgICAgLT4gIDQuMzA1N0UtMTcgSW5leGFjdCBSb3VuZGVkCitycG94NTAzICBwb3dlciAxMjM0NSAgLTMgICAgICAgIC0+ICA1LjMxNTNFLTEzIEluZXhhY3QgUm91bmRlZAorcnBveDUwNCAgcG93ZXIgMTIzNDUgIC0yICAgICAgICAtPiAgNi41NjE4RS05IEluZXhhY3QgUm91bmRlZAorcnBveDUwNSAgcG93ZXIgMTIzNDUgIC0xICAgICAgICAtPiAgMC4wMDAwODEwMDUgSW5leGFjdCBSb3VuZGVkCitycG94NTA2ICBwb3dlciAxMjM0NSAgMCAgICAgICAgIC0+ICAxCitycG94NTA3ICBwb3dlciAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcnBveDUwOCAgcG93ZXIgMTIzNDUgIDIgICAgICAgICAtPiAgMS41MjQwRSs4IEluZXhhY3QgUm91bmRlZAorcnBveDUwOSAgcG93ZXIgMTIzNDUgIDMgICAgICAgICAtPiAgMS44ODE0RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g1MTAgIHBvd2VyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDIuMzIyNkUrMTYgSW5leGFjdCBSb3VuZGVkCitycG94NTExICBwb3dlciAxMjM0NSAgNSAgICAgICAgIC0+ICAyLjg2NzJFKzIwIEluZXhhY3QgUm91bmRlZAorcnBveDUxMiAgcG93ZXIgICA0MTUgIDIgICAgICAgICAtPiAgMS43MjIzRSs1IEluZXhhY3QgUm91bmRlZAorcnBveDUxMyAgcG93ZXIgICAgNzUgIDMgICAgICAgICAtPiAgNC4yMTg4RSs1IEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogZmxvb3IKK3Jwb3g2MDEgIHBvd2VyIDEyMzQ1ICAtNSAgICAgICAgLT4gIDMuNDg3N0UtMjEgSW5leGFjdCBSb3VuZGVkCitycG94NjAyICBwb3dlciAxMjM0NSAgLTQgICAgICAgIC0+ICA0LjMwNTZFLTE3IEluZXhhY3QgUm91bmRlZAorcnBveDYwMyAgcG93ZXIgMTIzNDUgIC0zICAgICAgICAtPiAgNS4zMTUyRS0xMyBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g2MDQgIHBvd2VyIDEyMzQ1ICAtMiAgICAgICAgLT4gIDYuNTYxN0UtOSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g2MDUgIHBvd2VyIDEyMzQ1ICAtMSAgICAgICAgLT4gIDAuMDAwMDgxMDA0IEluZXhhY3QgUm91bmRlZAorcnBveDYwNiAgcG93ZXIgMTIzNDUgIDAgICAgICAgICAtPiAgMQorcnBveDYwNyAgcG93ZXIgMTIzNDUgIDEgICAgICAgICAtPiAgMTIzNDUKK3Jwb3g2MDggIHBvd2VyIDEyMzQ1ICAyICAgICAgICAgLT4gIDEuNTIzOUUrOCBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g2MDkgIHBvd2VyIDEyMzQ1ICAzICAgICAgICAgLT4gIDEuODgxM0UrMTIgSW5leGFjdCBSb3VuZGVkCitycG94NjEwICBwb3dlciAxMjM0NSAgNCAgICAgICAgIC0+ICAyLjMyMjVFKzE2IEluZXhhY3QgUm91bmRlZAorcnBveDYxMSAgcG93ZXIgMTIzNDUgIDUgICAgICAgICAtPiAgMi44NjcxRSsyMCBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g2MTIgIHBvd2VyICAgNDE1ICAyICAgICAgICAgLT4gIDEuNzIyMkUrNSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g2MTMgIHBvd2VyICAgIDc1ICAzICAgICAgICAgLT4gIDQuMjE4N0UrNSBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGNlaWxpbmcKK3Jwb3g3MDEgIHBvd2VyIDEyMzQ1ICAtNSAgICAgICAgLT4gIDMuNDg3OEUtMjEgSW5leGFjdCBSb3VuZGVkCitycG94NzAyICBwb3dlciAxMjM0NSAgLTQgICAgICAgIC0+ICA0LjMwNTdFLTE3IEluZXhhY3QgUm91bmRlZAorcnBveDcwMyAgcG93ZXIgMTIzNDUgIC0zICAgICAgICAtPiAgNS4zMTUzRS0xMyBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g3MDQgIHBvd2VyIDEyMzQ1ICAtMiAgICAgICAgLT4gIDYuNTYxOEUtOSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g3MDUgIHBvd2VyIDEyMzQ1ICAtMSAgICAgICAgLT4gIDAuMDAwMDgxMDA1IEluZXhhY3QgUm91bmRlZAorcnBveDcwNiAgcG93ZXIgMTIzNDUgIDAgICAgICAgICAtPiAgMQorcnBveDcwNyAgcG93ZXIgMTIzNDUgIDEgICAgICAgICAtPiAgMTIzNDUKK3Jwb3g3MDggIHBvd2VyIDEyMzQ1ICAyICAgICAgICAgLT4gIDEuNTI0MEUrOCBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g3MDkgIHBvd2VyIDEyMzQ1ICAzICAgICAgICAgLT4gIDEuODgxNEUrMTIgSW5leGFjdCBSb3VuZGVkCitycG94NzEwICBwb3dlciAxMjM0NSAgNCAgICAgICAgIC0+ICAyLjMyMjZFKzE2IEluZXhhY3QgUm91bmRlZAorcnBveDcxMSAgcG93ZXIgMTIzNDUgIDUgICAgICAgICAtPiAgMi44NjcyRSsyMCBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g3MTIgIHBvd2VyICAgNDE1ICAyICAgICAgICAgLT4gIDEuNzIyM0UrNSBJbmV4YWN0IFJvdW5kZWQKK3Jwb3g3MTMgIHBvd2VyICAgIDc1ICAzICAgICAgICAgLT4gIDQuMjE4OEUrNSBJbmV4YWN0IFJvdW5kZWQKKworLS0gVW5kZXJmbG93IFN1Ym5vcm1hbCBhbmQgb3ZlcmZsb3cgdmFsdWVzIHZhcnkgd2l0aCByb3VuZGluZyBtb2RlIGFuZCBzaWduCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcm91bmRpbmc6IGRvd24KK3JvdngxMDAgIG11bHRpcGx5ICAgMTAgICAgOUUrOTk5OTk5OTk5IC0+ICA5Ljk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdngxMDEgIG11bHRpcGx5ICAtMTAgICAgOUUrOTk5OTk5OTk5IC0+IC05Ljk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdngxMDIgIGRpdmlkZSAgICAgMUUtOSAgOUUrOTk5OTk5OTk5IC0+ICAwRS0xMDAwMDAwMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JvdngxMDQgIGRpdmlkZSAgICAtMUUtOSAgOUUrOTk5OTk5OTk5IC0+IC0wRS0xMDAwMDAwMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworcm91bmRpbmc6IHVwCityb3Z4MTEwICBtdWx0aXBseSAgIDEwICAgIDlFKzk5OTk5OTk5OSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MTExICBtdWx0aXBseSAgLTEwICAgIDlFKzk5OTk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MTEyICBkaXZpZGUgICAgIDFFLTkgIDlFKzk5OTk5OTk5OSAtPiAgMUUtMTAwMDAwMDAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorcm92eDExNCAgZGl2aWRlICAgIC0xRS05ICA5RSs5OTk5OTk5OTkgLT4gLTFFLTEwMDAwMDAwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGNlaWxpbmcKK3JvdngxMjAgIG11bHRpcGx5ICAgMTAgICAgOUUrOTk5OTk5OTk5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdngxMjEgIG11bHRpcGx5ICAtMTAgICAgOUUrOTk5OTk5OTk5IC0+IC05Ljk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdngxMjIgIGRpdmlkZSAgICAgMUUtOSAgOUUrOTk5OTk5OTk5IC0+ICAxRS0xMDAwMDAwMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCityb3Z4MTI0ICBkaXZpZGUgICAgLTFFLTkgIDlFKzk5OTk5OTk5OSAtPiAtMEUtMTAwMDAwMDAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKK3JvdW5kaW5nOiBmbG9vcgorcm92eDEzMCAgbXVsdGlwbHkgICAxMCAgICA5RSs5OTk5OTk5OTkgLT4gIDkuOTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDEzMSAgbXVsdGlwbHkgIC0xMCAgICA5RSs5OTk5OTk5OTkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDEzMiAgZGl2aWRlICAgICAxRS05ICA5RSs5OTk5OTk5OTkgLT4gIDBFLTEwMDAwMDAwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcm92eDEzNCAgZGl2aWRlICAgIC0xRS05ICA5RSs5OTk5OTk5OTkgLT4gLTFFLTEwMDAwMDAwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfdXAKK3JvdngxNDAgIG11bHRpcGx5ICAgMTAgICAgOUUrOTk5OTk5OTk5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdngxNDEgIG11bHRpcGx5ICAtMTAgICAgOUUrOTk5OTk5OTk5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdngxNDIgIGRpdmlkZSAgICAgMUUtOSAgOUUrOTk5OTk5OTk5IC0+ICAwRS0xMDAwMDAwMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3JvdngxNDQgIGRpdmlkZSAgICAtMUUtOSAgOUUrOTk5OTk5OTk5IC0+IC0wRS0xMDAwMDAwMDAzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorcm92eDE1MCAgbXVsdGlwbHkgICAxMCAgICA5RSs5OTk5OTk5OTkgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDE1MSAgbXVsdGlwbHkgIC0xMCAgICA5RSs5OTk5OTk5OTkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDE1MiAgZGl2aWRlICAgICAxRS05ICA5RSs5OTk5OTk5OTkgLT4gIDBFLTEwMDAwMDAwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorcm92eDE1NCAgZGl2aWRlICAgIC0xRS05ICA5RSs5OTk5OTk5OTkgLT4gLTBFLTEwMDAwMDAwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorCityb3VuZGluZzogaGFsZl9kb3duCityb3Z4MTYwICBtdWx0aXBseSAgIDEwICAgIDlFKzk5OTk5OTk5OSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MTYxICBtdWx0aXBseSAgLTEwICAgIDlFKzk5OTk5OTk5OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MTYyICBkaXZpZGUgICAgIDFFLTkgIDlFKzk5OTk5OTk5OSAtPiAgMEUtMTAwMDAwMDAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCityb3Z4MTY0ICBkaXZpZGUgICAgLTFFLTkgIDlFKzk5OTk5OTk5OSAtPiAtMEUtMTAwMDAwMDAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCisKKy0tIGNoZWNrIG1heGltdW0gZmluaXRlIHZhbHVlIG92ZXIgYSByYW5nZSBvZiBwcmVjaXNpb25zCityb3VuZGluZzogZG93bgorcHJlY2lzaW9uOiAxCityb3Z4MjAwICBtdWx0aXBseSAgIDEwICAgIDlFKzk5OTk5OTk5OSAtPiAgOUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDIwMSAgbXVsdGlwbHkgIC0xMCAgICA5RSs5OTk5OTk5OTkgLT4gLTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMgorcm92eDIxMCAgbXVsdGlwbHkgICAxMCAgICA5RSs5OTk5OTk5OTkgLT4gIDkuOUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDIxMSAgbXVsdGlwbHkgIC0xMCAgICA5RSs5OTk5OTk5OTkgLT4gLTkuOUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAzCityb3Z4MjIwICBtdWx0aXBseSAgIDEwICAgIDlFKzk5OTk5OTk5OSAtPiAgOS45OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDIyMSAgbXVsdGlwbHkgIC0xMCAgICA5RSs5OTk5OTk5OTkgLT4gLTkuOTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNAorcm92eDIzMCAgbXVsdGlwbHkgICAxMCAgICA5RSs5OTk5OTk5OTkgLT4gIDkuOTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MjMxICBtdWx0aXBseSAgLTEwICAgIDlFKzk5OTk5OTk5OSAtPiAtOS45OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNQorcm92eDI0MCAgbXVsdGlwbHkgICAxMCAgICA5RSs5OTk5OTk5OTkgLT4gIDkuOTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDI0MSAgbXVsdGlwbHkgIC0xMCAgICA5RSs5OTk5OTk5OTkgLT4gLTkuOTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA2Cityb3Z4MjUwICBtdWx0aXBseSAgIDEwICAgIDlFKzk5OTk5OTk5OSAtPiAgOS45OTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDI1MSAgbXVsdGlwbHkgIC0xMCAgICA5RSs5OTk5OTk5OTkgLT4gLTkuOTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNworcm92eDI2MCAgbXVsdGlwbHkgICAxMCAgICA5RSs5OTk5OTk5OTkgLT4gIDkuOTk5OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3Z4MjYxICBtdWx0aXBseSAgLTEwICAgIDlFKzk5OTk5OTk5OSAtPiAtOS45OTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogOAorcm92eDI3MCAgbXVsdGlwbHkgICAxMCAgICA5RSs5OTk5OTk5OTkgLT4gIDkuOTk5OTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDI3MSAgbXVsdGlwbHkgIC0xMCAgICA5RSs5OTk5OTk5OTkgLT4gLTkuOTk5OTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA5Cityb3Z4MjgwICBtdWx0aXBseSAgIDEwICAgIDlFKzk5OTk5OTk5OSAtPiAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDI4MSAgbXVsdGlwbHkgIC0xMCAgICA5RSs5OTk5OTk5OTkgLT4gLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTAKK3JvdngyOTAgIG11bHRpcGx5ICAgMTAgICAgOUUrOTk5OTk5OTk5IC0+ICA5Ljk5OTk5OTk5OUUrOTk5OTk5OTk5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm92eDI5MSAgbXVsdGlwbHkgIC0xMCAgICA5RSs5OTk5OTk5OTkgLT4gLTkuOTk5OTk5OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tIHJlcHJpc2Ugcm91bmRpbmcgbW9kZSBlZmZlY3QgKHVzaW5nIG11bHRpcGxpZXMgc28gcHJlY2lzaW9uIGRpcmVjdGl2ZSB1c2VkKQorcHJlY2lzaW9uOiA5CittYXhleHBvbmVudDogOTk5OTk5OTk5Cityb3VuZGluZzogaGFsZl91cAorcm1leDQwMCBtdWx0aXBseSAtOS45OTlFKzk5OTk5OTk5OSAxMCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitybWV4NDAxIG11bHRpcGx5ICA5Ljk5OUUrOTk5OTk5OTk5IDEwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBoYWxmX2Rvd24KK3JtZXg0MDIgbXVsdGlwbHkgLTkuOTk5RSs5OTk5OTk5OTkgMTAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm1leDQwMyBtdWx0aXBseSAgOS45OTlFKzk5OTk5OTk5OSAxMCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl9ldmVuCitybWV4NDA0IG11bHRpcGx5IC05Ljk5OUUrOTk5OTk5OTk5IDEwIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JtZXg0MDUgbXVsdGlwbHkgIDkuOTk5RSs5OTk5OTk5OTkgMTAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorcm91bmRpbmc6IGZsb29yCitybWV4NDA2IG11bHRpcGx5IC05Ljk5OUUrOTk5OTk5OTk5IDEwIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JtZXg0MDcgbXVsdGlwbHkgIDkuOTk5RSs5OTk5OTk5OTkgMTAgLT4gIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBjZWlsaW5nCitybWV4NDA4IG11bHRpcGx5IC05Ljk5OUUrOTk5OTk5OTk5IDEwIC0+IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitybWV4NDA5IG11bHRpcGx5ICA5Ljk5OUUrOTk5OTk5OTk5IDEwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiB1cAorcm1leDQxMCBtdWx0aXBseSAtOS45OTlFKzk5OTk5OTk5OSAxMCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitybWV4NDExIG11bHRpcGx5ICA5Ljk5OUUrOTk5OTk5OTk5IDEwIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3JvdW5kaW5nOiBkb3duCitybWV4NDEyIG11bHRpcGx5IC05Ljk5OUUrOTk5OTk5OTk5IDEwIC0+IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitybWV4NDEzIG11bHRpcGx5ICA5Ljk5OUUrOTk5OTk5OTk5IDEwIC0+ICA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKKy0tLS0tIFJvdW5kLWZvci1yZXJvdW5kIC0tLS0tCityb3VuZGluZzogICAgMDV1cAorcHJlY2lzaW9uOiAgIDUgICAgICAgICAgIC0tIGZvciBlYXNpZXIgdmlzdWFsIGluc3BlY3Rpb24KK21heEV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CisKKy0tIGJhc2ljIHJvdW5kaW5nOyByZWFsbHkgaXMganVzdCAwIGFuZCA1IHVwCityMDV1cDAwMSBhZGQgMTIzNDAgIDAuMDAxICAgICAtPiAxMjM0MSBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDAyIGFkZCAxMjM0MSAgMC4wMDEgICAgIC0+IDEyMzQxIEluZXhhY3QgUm91bmRlZAorcjA1dXAwMDMgYWRkIDEyMzQyICAwLjAwMSAgICAgLT4gMTIzNDIgSW5leGFjdCBSb3VuZGVkCityMDV1cDAwNCBhZGQgMTIzNDMgIDAuMDAxICAgICAtPiAxMjM0MyBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDA1IGFkZCAxMjM0NCAgMC4wMDEgICAgIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjA1dXAwMDYgYWRkIDEyMzQ1ICAwLjAwMSAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMDV1cDAwNyBhZGQgMTIzNDYgIDAuMDAxICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDA4IGFkZCAxMjM0NyAgMC4wMDEgICAgIC0+IDEyMzQ3IEluZXhhY3QgUm91bmRlZAorcjA1dXAwMDkgYWRkIDEyMzQ4ICAwLjAwMSAgICAgLT4gMTIzNDggSW5leGFjdCBSb3VuZGVkCityMDV1cDAxMCBhZGQgMTIzNDkgIDAuMDAxICAgICAtPiAxMjM0OSBJbmV4YWN0IFJvdW5kZWQKKworcjA1dXAwMTEgYWRkIDEyMzQwICAwLjAwMCAgICAgLT4gMTIzNDAgUm91bmRlZAorcjA1dXAwMTIgYWRkIDEyMzQxICAwLjAwMCAgICAgLT4gMTIzNDEgUm91bmRlZAorcjA1dXAwMTMgYWRkIDEyMzQyICAwLjAwMCAgICAgLT4gMTIzNDIgUm91bmRlZAorcjA1dXAwMTQgYWRkIDEyMzQzICAwLjAwMCAgICAgLT4gMTIzNDMgUm91bmRlZAorcjA1dXAwMTUgYWRkIDEyMzQ0ICAwLjAwMCAgICAgLT4gMTIzNDQgUm91bmRlZAorcjA1dXAwMTYgYWRkIDEyMzQ1ICAwLjAwMCAgICAgLT4gMTIzNDUgUm91bmRlZAorcjA1dXAwMTcgYWRkIDEyMzQ2ICAwLjAwMCAgICAgLT4gMTIzNDYgUm91bmRlZAorcjA1dXAwMTggYWRkIDEyMzQ3ICAwLjAwMCAgICAgLT4gMTIzNDcgUm91bmRlZAorcjA1dXAwMTkgYWRkIDEyMzQ4ICAwLjAwMCAgICAgLT4gMTIzNDggUm91bmRlZAorcjA1dXAwMjAgYWRkIDEyMzQ5ICAwLjAwMCAgICAgLT4gMTIzNDkgUm91bmRlZAorCityMDV1cDAyMSBhZGQgMTIzNDAgIDAuOTAxICAgICAtPiAxMjM0MSBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDIyIGFkZCAxMjM0MSAgMC45MDEgICAgIC0+IDEyMzQxIEluZXhhY3QgUm91bmRlZAorcjA1dXAwMjMgYWRkIDEyMzQyICAwLjkwMSAgICAgLT4gMTIzNDIgSW5leGFjdCBSb3VuZGVkCityMDV1cDAyNCBhZGQgMTIzNDMgIDAuOTAxICAgICAtPiAxMjM0MyBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDI1IGFkZCAxMjM0NCAgMC45MDEgICAgIC0+IDEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjA1dXAwMjYgYWRkIDEyMzQ1ICAwLjkwMSAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMDV1cDAyNyBhZGQgMTIzNDYgIDAuOTAxICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDI4IGFkZCAxMjM0NyAgMC45MDEgICAgIC0+IDEyMzQ3IEluZXhhY3QgUm91bmRlZAorcjA1dXAwMjkgYWRkIDEyMzQ4ICAwLjkwMSAgICAgLT4gMTIzNDggSW5leGFjdCBSb3VuZGVkCityMDV1cDAzMCBhZGQgMTIzNDkgIDAuOTAxICAgICAtPiAxMjM0OSBJbmV4YWN0IFJvdW5kZWQKKworcjA1dXAwMzEgYWRkIC0xMjM0MCAgLTAuMDAxICAgICAtPiAtMTIzNDEgSW5leGFjdCBSb3VuZGVkCityMDV1cDAzMiBhZGQgLTEyMzQxICAtMC4wMDEgICAgIC0+IC0xMjM0MSBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDMzIGFkZCAtMTIzNDIgIC0wLjAwMSAgICAgLT4gLTEyMzQyIEluZXhhY3QgUm91bmRlZAorcjA1dXAwMzQgYWRkIC0xMjM0MyAgLTAuMDAxICAgICAtPiAtMTIzNDMgSW5leGFjdCBSb3VuZGVkCityMDV1cDAzNSBhZGQgLTEyMzQ0ICAtMC4wMDEgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDM2IGFkZCAtMTIzNDUgIC0wLjAwMSAgICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjA1dXAwMzcgYWRkIC0xMjM0NiAgLTAuMDAxICAgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMDV1cDAzOCBhZGQgLTEyMzQ3ICAtMC4wMDEgICAgIC0+IC0xMjM0NyBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDM5IGFkZCAtMTIzNDggIC0wLjAwMSAgICAgLT4gLTEyMzQ4IEluZXhhY3QgUm91bmRlZAorcjA1dXAwNDAgYWRkIC0xMjM0OSAgLTAuMDAxICAgICAtPiAtMTIzNDkgSW5leGFjdCBSb3VuZGVkCisKK3IwNXVwMDQxIGFkZCAtMTIzNDAgICAwLjAwMSAgICAgLT4gLTEyMzM5IEluZXhhY3QgUm91bmRlZAorcjA1dXAwNDIgYWRkIC0xMjM0MSAgIDAuMDAxICAgICAtPiAtMTIzNDEgSW5leGFjdCBSb3VuZGVkCityMDV1cDA0MyBhZGQgLTEyMzQyICAgMC4wMDEgICAgIC0+IC0xMjM0MSBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDQ0IGFkZCAtMTIzNDMgICAwLjAwMSAgICAgLT4gLTEyMzQyIEluZXhhY3QgUm91bmRlZAorcjA1dXAwNDUgYWRkIC0xMjM0NCAgIDAuMDAxICAgICAtPiAtMTIzNDMgSW5leGFjdCBSb3VuZGVkCityMDV1cDA0NiBhZGQgLTEyMzQ1ICAgMC4wMDEgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDQ3IGFkZCAtMTIzNDYgICAwLjAwMSAgICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjA1dXAwNDggYWRkIC0xMjM0NyAgIDAuMDAxICAgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMDV1cDA0OSBhZGQgLTEyMzQ4ICAgMC4wMDEgICAgIC0+IC0xMjM0NyBJbmV4YWN0IFJvdW5kZWQKK3IwNXVwMDUwIGFkZCAtMTIzNDkgICAwLjAwMSAgICAgLT4gLTEyMzQ4IEluZXhhY3QgUm91bmRlZAorCistLSBBZGRpdGlvbiBvcGVyYXRvcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gW1RoZSBmaXJzdCBmZXcgb2YgdGhlc2UgY2hlY2sgbmVnYXRpdmUgcmVzaWR1ZSBwb3NzaWJpbGl0aWVzOyB0aGVzZQorLS0gY2FzZXMgbWF5IGJlIGltcGxlbWVudGVkIGFzIGEgbmVnYXRpdmUgcmVzaWR1ZSBpbiBmYXN0cGF0aHNdCisKK3IwYWR4MTAwICBhZGQgMTIzNDUgLTAuMSAgICAgICAtPiAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTAxICBhZGQgMTIzNDUgLTAuMDEgICAgICAtPiAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTAyICBhZGQgMTIzNDUgLTAuMDAxICAgICAtPiAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTAzICBhZGQgMTIzNDUgLTAuMDAwMDEgICAtPiAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTA0ICBhZGQgMTIzNDUgLTAuMDAwMDAxICAtPiAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTA1ICBhZGQgMTIzNDUgLTAuMDAwMDAwMSAtPiAxMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTA2ICBhZGQgMTIzNDUgIDAgICAgICAgICAtPiAxMjM0NQorcjBhZHgxMDcgIGFkZCAxMjM0NSAgMC4wMDAwMDAxIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMDggIGFkZCAxMjM0NSAgMC4wMDAwMDEgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMDkgIGFkZCAxMjM0NSAgMC4wMDAwMSAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMTAgIGFkZCAxMjM0NSAgMC4wMDAxICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMTEgIGFkZCAxMjM0NSAgMC4wMDEgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMTIgIGFkZCAxMjM0NSAgMC4wMSAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBhZHgxMTMgIGFkZCAxMjM0NSAgMC4xICAgICAgIC0+IDEyMzQ2IEluZXhhY3QgUm91bmRlZAorCityMGFkeDExNSAgYWRkIDEyMzQ2ICAwLjQ5OTk5ICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMGFkeDExNiAgYWRkIDEyMzQ2ICAwLjUgICAgICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMGFkeDExNyAgYWRkIDEyMzQ2ICAwLjUwMDAxICAgLT4gMTIzNDYgSW5leGFjdCBSb3VuZGVkCisKK3IwYWR4MTIwICBhZGQgMTIzNDUgIDAuNCAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTIxICBhZGQgMTIzNDUgIDAuNDkgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTIyICBhZGQgMTIzNDUgIDAuNDk5ICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTIzICBhZGQgMTIzNDUgIDAuNDk5OTkgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTI0ICBhZGQgMTIzNDUgIDAuNSAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTI1ICBhZGQgMTIzNDUgIDAuNTAwMDEgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTI2ICBhZGQgMTIzNDUgIDAuNTAwMSAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTI3ICBhZGQgMTIzNDUgIDAuNTAxICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTI4ICBhZGQgMTIzNDUgIDAuNTEgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3IwYWR4MTI5ICBhZGQgMTIzNDUgIDAuNiAgICAgICAtPiAxMjM0NiBJbmV4YWN0IFJvdW5kZWQKKworLS0gbmVnYXRpdmVzLi4uCisKK3Iwc3V4MTAwICBhZGQgLTEyMzQ1IC0wLjEgICAgICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBzdXgxMDEgIGFkZCAtMTIzNDUgLTAuMDEgICAgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMHN1eDEwMiAgYWRkIC0xMjM0NSAtMC4wMDEgICAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTAzICBhZGQgLTEyMzQ1IC0wLjAwMDAxICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBzdXgxMDQgIGFkZCAtMTIzNDUgLTAuMDAwMDAxICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMHN1eDEwNSAgYWRkIC0xMjM0NSAtMC4wMDAwMDAxIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTA2ICBhZGQgLTEyMzQ1ICAwICAgICAgICAgLT4gLTEyMzQ1CityMHN1eDEwNyAgYWRkIC0xMjM0NSAgMC4wMDAwMDAxIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTA4ICBhZGQgLTEyMzQ1ICAwLjAwMDAwMSAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBzdXgxMDkgIGFkZCAtMTIzNDUgIDAuMDAwMDEgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityMHN1eDExMCAgYWRkIC0xMjM0NSAgMC4wMDAxICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTExICBhZGQgLTEyMzQ1ICAwLjAwMSAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBzdXgxMTIgIGFkZCAtMTIzNDUgIDAuMDEgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityMHN1eDExMyAgYWRkIC0xMjM0NSAgMC4xICAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKKworcjBzdXgxMTUgIGFkZCAtMTIzNDYgIDAuNDk5OTkgICAtPiAtMTIzNDYgSW5leGFjdCBSb3VuZGVkCityMHN1eDExNiAgYWRkIC0xMjM0NiAgMC41ICAgICAgIC0+IC0xMjM0NiBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTE3ICBhZGQgLTEyMzQ2ICAwLjUwMDAxICAgLT4gLTEyMzQ2IEluZXhhY3QgUm91bmRlZAorCityMHN1eDEyMCAgYWRkIC0xMjM0NSAgMC40ICAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTIxICBhZGQgLTEyMzQ1ICAwLjQ5ICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBzdXgxMjIgIGFkZCAtMTIzNDUgIDAuNDk5ICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityMHN1eDEyMyAgYWRkIC0xMjM0NSAgMC40OTk5OSAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTI0ICBhZGQgLTEyMzQ1ICAwLjUgICAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBzdXgxMjUgIGFkZCAtMTIzNDUgIDAuNTAwMDEgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityMHN1eDEyNiAgYWRkIC0xMjM0NSAgMC41MDAxICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKK3Iwc3V4MTI3ICBhZGQgLTEyMzQ1ICAwLjUwMSAgICAgLT4gLTEyMzQ0IEluZXhhY3QgUm91bmRlZAorcjBzdXgxMjggIGFkZCAtMTIzNDUgIDAuNTEgICAgICAtPiAtMTIzNDQgSW5leGFjdCBSb3VuZGVkCityMHN1eDEyOSAgYWRkIC0xMjM0NSAgMC42ICAgICAgIC0+IC0xMjM0NCBJbmV4YWN0IFJvdW5kZWQKKworLS0gQ2hlY2sgY2FuY2VsbGF0aW9uIHN1YnRyYWN0aW9ucworLS0gKFRoZSBJRUVFIDg1NCAnY3VyaW91cyBydWxlJyBpbiAkNi4zKQorCityMHpleDAwMSAgYWRkICAwICAgIDAgICAgLT4gIDAKK3IwemV4MDAyICBhZGQgIDAgICAtMCAgICAtPiAgMAorcjB6ZXgwMDMgIGFkZCAtMCAgICAwICAgIC0+ICAwCityMHpleDAwNCAgYWRkIC0wICAgLTAgICAgLT4gLTAKK3IwemV4MDA1ICBhZGQgIDEgICAtMSAgICAtPiAgMAorcjB6ZXgwMDYgIGFkZCAtMSAgICAxICAgIC0+ICAwCityMHpleDAwNyAgYWRkICAxLjUgLTEuNSAgLT4gIDAuMAorcjB6ZXgwMDggIGFkZCAtMS41ICAxLjUgIC0+ICAwLjAKK3IwemV4MDA5ICBhZGQgIDIgICAtMiAgICAtPiAgMAorcjB6ZXgwMTAgIGFkZCAtMiAgICAyICAgIC0+ICAwCisKKworLS0gRGl2aXNpb24gb3BlcmF0b3JzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcjBkdngxMDEgIGRpdmlkZSAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcjBkdngxMDIgIGRpdmlkZSAxMjM0NSAgMS4wMDAxICAgIC0+ICAxMjM0MyBJbmV4YWN0IFJvdW5kZWQKK3IwZHZ4MTAzICBkaXZpZGUgMTIzNDUgIDEuMDAxICAgICAtPiAgMTIzMzIgSW5leGFjdCBSb3VuZGVkCityMGR2eDEwNCAgZGl2aWRlIDEyMzQ1ICAxLjAxICAgICAgLT4gIDEyMjIyIEluZXhhY3QgUm91bmRlZAorcjBkdngxMDUgIGRpdmlkZSAxMjM0NSAgMS4xICAgICAgIC0+ICAxMTIyMiBJbmV4YWN0IFJvdW5kZWQKK3IwZHZ4MTA2ICBkaXZpZGUgMTIzNTUgIDQgICAgICAgICAtPiAgIDMwODguNyBJbmV4YWN0IFJvdW5kZWQKK3IwZHZ4MTA3ICBkaXZpZGUgMTIzNDUgIDQgICAgICAgICAtPiAgIDMwODYuMiBJbmV4YWN0IFJvdW5kZWQKK3IwZHZ4MTA4ICBkaXZpZGUgMTIzNTUgIDQuMDAwMSAgICAtPiAgIDMwODguNiBJbmV4YWN0IFJvdW5kZWQKK3IwZHZ4MTA5ICBkaXZpZGUgMTIzNDUgIDQuMDAwMSAgICAtPiAgIDMwODYuMSBJbmV4YWN0IFJvdW5kZWQKK3IwZHZ4MTEwICBkaXZpZGUgMTIzNDUgIDQuOSAgICAgICAtPiAgIDI1MTkuMyBJbmV4YWN0IFJvdW5kZWQKK3IwZHZ4MTExICBkaXZpZGUgMTIzNDUgIDQuOTkgICAgICAtPiAgIDI0NzMuOSBJbmV4YWN0IFJvdW5kZWQKK3IwZHZ4MTEyICBkaXZpZGUgMTIzNDUgIDQuOTk5ICAgICAtPiAgIDI0NjkuNCBJbmV4YWN0IFJvdW5kZWQKK3IwZHZ4MTEzICBkaXZpZGUgMTIzNDUgIDQuOTk5OSAgICAtPiAgIDI0NjkuMSBJbmV4YWN0IFJvdW5kZWQKK3IwZHZ4MTE0ICBkaXZpZGUgMTIzNDUgIDUgICAgICAgICAtPiAgIDI0NjkKK3IwZHZ4MTE1ICBkaXZpZGUgMTIzNDUgIDUuMDAwMSAgICAtPiAgMjQ2OC45IEluZXhhY3QgUm91bmRlZAorcjBkdngxMTYgIGRpdmlkZSAxMjM0NSAgNS4wMDEgICAgIC0+ICAyNDY4LjYgSW5leGFjdCBSb3VuZGVkCityMGR2eDExNyAgZGl2aWRlIDEyMzQ1ICA1LjAxICAgICAgLT4gIDI0NjQuMSBJbmV4YWN0IFJvdW5kZWQKK3IwZHZ4MTE4ICBkaXZpZGUgMTIzNDUgIDUuMSAgICAgICAtPiAgMjQyMC42IEluZXhhY3QgUm91bmRlZAorCistLSBbZGl2aWRlSW50ZWdlciBhbmQgcmVtYWluZGVyIHVuYWZmZWN0ZWRdCisKKy0tIE11bHRpcGxpY2F0aW9uIG9wZXJhdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3IwbXV4MTAxICBtdWx0aXBseSAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcjBtdXgxMDIgIG11bHRpcGx5IDEyMzQ1ICAxLjAwMDEgICAgLT4gIDEyMzQ2IEluZXhhY3QgUm91bmRlZAorcjBtdXgxMDMgIG11bHRpcGx5IDEyMzQ1ICAxLjAwMSAgICAgLT4gIDEyMzU3IEluZXhhY3QgUm91bmRlZAorcjBtdXgxMDQgIG11bHRpcGx5IDEyMzQ1ICAxLjAxICAgICAgLT4gIDEyNDY4IEluZXhhY3QgUm91bmRlZAorcjBtdXgxMDUgIG11bHRpcGx5IDEyMzQ1ICAxLjEgICAgICAgLT4gIDEzNTc5IEluZXhhY3QgUm91bmRlZAorcjBtdXgxMDYgIG11bHRpcGx5IDEyMzQ1ICA0ICAgICAgICAgLT4gIDQ5MzgwCityMG11eDEwNyAgbXVsdGlwbHkgMTIzNDUgIDQuMDAwMSAgICAtPiAgNDkzODEgSW5leGFjdCBSb3VuZGVkCityMG11eDEwOCAgbXVsdGlwbHkgMTIzNDUgIDQuOSAgICAgICAtPiAgNjA0OTEgSW5leGFjdCBSb3VuZGVkCityMG11eDEwOSAgbXVsdGlwbHkgMTIzNDUgIDQuOTkgICAgICAtPiAgNjE2MDEgSW5leGFjdCBSb3VuZGVkCityMG11eDExMCAgbXVsdGlwbHkgMTIzNDUgIDQuOTk5ICAgICAtPiAgNjE3MTIgSW5leGFjdCBSb3VuZGVkCityMG11eDExMSAgbXVsdGlwbHkgMTIzNDUgIDQuOTk5OSAgICAtPiAgNjE3MjMgSW5leGFjdCBSb3VuZGVkCityMG11eDExMiAgbXVsdGlwbHkgMTIzNDUgIDUgICAgICAgICAtPiAgNjE3MjUKK3IwbXV4MTEzICBtdWx0aXBseSAxMjM0NSAgNS4wMDAxICAgIC0+ICA2MTcyNiBJbmV4YWN0IFJvdW5kZWQKK3IwbXV4MTE0ICBtdWx0aXBseSAxMjM0NSAgNS4wMDEgICAgIC0+ICA2MTczNyBJbmV4YWN0IFJvdW5kZWQKK3IwbXV4MTE1ICBtdWx0aXBseSAxMjM0NSAgNS4wMSAgICAgIC0+ICA2MTg0OCBJbmV4YWN0IFJvdW5kZWQKK3IwbXV4MTE2ICBtdWx0aXBseSAxMjM0NSAgMTIgICAgICAgIC0+ICAxLjQ4MTRFKzUgUm91bmRlZAorcjBtdXgxMTcgIG11bHRpcGx5IDEyMzQ1ICAxMyAgICAgICAgLT4gIDEuNjA0OEUrNSBJbmV4YWN0IFJvdW5kZWQKK3IwbXV4MTE4ICBtdWx0aXBseSAxMjM1NSAgMTIgICAgICAgIC0+ICAxLjQ4MjZFKzUgUm91bmRlZAorcjBtdXgxMTkgIG11bHRpcGx5IDEyMzU1ICAxMyAgICAgICAgLT4gIDEuNjA2MUUrNSBJbmV4YWN0IFJvdW5kZWQKKworCistLSBQb3dlciBvcGVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCityMHBveDEwMSAgcG93ZXIgMTIzNDUgIC01ICAgICAgICAtPiAgMy40ODc3RS0yMSBJbmV4YWN0IFJvdW5kZWQKK3IwcG94MTAyICBwb3dlciAxMjM0NSAgLTQgICAgICAgIC0+ICA0LjMwNTZFLTE3IEluZXhhY3QgUm91bmRlZAorcjBwb3gxMDMgIHBvd2VyIDEyMzQ1ICAtMyAgICAgICAgLT4gIDUuMzE1MkUtMTMgSW5leGFjdCBSb3VuZGVkCityMHBveDEwNCAgcG93ZXIgMTIzNDUgIC0yICAgICAgICAtPiAgNi41NjE3RS05IEluZXhhY3QgUm91bmRlZAorcjBwb3gxMDUgIHBvd2VyIDEyMzQ1ICAtMSAgICAgICAgLT4gIDAuMDAwMDgxMDA0IEluZXhhY3QgUm91bmRlZAorcjBwb3gxMDYgIHBvd2VyIDEyMzQ1ICAwICAgICAgICAgLT4gIDEKK3IwcG94MTA3ICBwb3dlciAxMjM0NSAgMSAgICAgICAgIC0+ICAxMjM0NQorcjBwb3gxMDggIHBvd2VyIDEyMzQ1ICAyICAgICAgICAgLT4gIDEuNTIzOUUrOCBJbmV4YWN0IFJvdW5kZWQKK3IwcG94MTA5ICBwb3dlciAxMjM0NSAgMyAgICAgICAgIC0+ICAxLjg4MTNFKzEyIEluZXhhY3QgUm91bmRlZAorcjBwb3gxMTAgIHBvd2VyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDIuMzIyNkUrMTYgSW5leGFjdCBSb3VuZGVkCityMHBveDExMSAgcG93ZXIgMTIzNDUgIDUgICAgICAgICAtPiAgMi44NjcxRSsyMCBJbmV4YWN0IFJvdW5kZWQKK3IwcG94MTEyICBwb3dlciAgIDQxNSAgMiAgICAgICAgIC0+ICAxLjcyMjJFKzUgSW5leGFjdCBSb3VuZGVkCityMHBveDExMyAgcG93ZXIgICAgNzUgIDMgICAgICAgICAtPiAgNC4yMTg3RSs1IEluZXhhY3QgUm91bmRlZAorCisKKy0tIFVuZGVyZmxvdyBTdWJub3JtYWwgYW5kIG92ZXJmbG93IHZhbHVlcyB2YXJ5IHdpdGggcm91bmRpbmcgbW9kZSBhbmQgc2lnbgorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKKy0tIFtyb3VuZCBkb3duIGdpdmVzIE5tYXggb24gZmlyc3QgdHdvIGFuZCAuMEUuLi4gb24gdGhlIG5leHQgdHdvXQorcjBvdngxMDAgIG11bHRpcGx5ICAgMTAgICAgOUUrOTk5OTk5OTk5IC0+ICA5Ljk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3Iwb3Z4MTAxICBtdWx0aXBseSAgLTEwICAgIDlFKzk5OTk5OTk5OSAtPiAtOS45OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityMG92eDEwMiAgZGl2aWRlICAgICAxRS05ICA5RSs5OTk5OTk5OTkgLT4gIDFFLTEwMDAwMDAwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3Iwb3Z4MTA0ICBkaXZpZGUgICAgLTFFLTkgIDlFKzk5OTk5OTk5OSAtPiAtMUUtMTAwMDAwMDAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLSByZXByaXNlIHJvdW5kaW5nIG1vZGUgZWZmZWN0ICh1c2luZyBtdWx0aXBsaWVzIHNvIHByZWNpc2lvbiBkaXJlY3RpdmUgdXNlZCkKK3ByZWNpc2lvbjogOQorbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQorcjBtZXg0MTIgbXVsdGlwbHkgLTkuOTk5RSs5OTk5OTk5OTkgMTAgLT4gLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3IwbWV4NDEzIG11bHRpcGx5ICA5Ljk5OUUrOTk5OTk5OTk5IDEwIC0+ICA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvc2FtZXF1YW50dW0uZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvc2FtZXF1YW50dW0uZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWIxM2ViCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zYW1lcXVhbnR1bS5kZWNUZXN0CkBAIC0wLDAgKzEsMzg5IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHNhbWVxdWFudHVtLmRlY1Rlc3QgLS0gY2hlY2sgcXVhbnR1bXMgbWF0Y2ggICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworc2FtcTAwMSBzYW1lcXVhbnR1bSAgMCAgICAgIDAgICAgICAtPiAgMQorc2FtcTAwMiBzYW1lcXVhbnR1bSAgMCAgICAgIDEgICAgICAtPiAgMQorc2FtcTAwMyBzYW1lcXVhbnR1bSAgMSAgICAgIDAgICAgICAtPiAgMQorc2FtcTAwNCBzYW1lcXVhbnR1bSAgMSAgICAgIDEgICAgICAtPiAgMQorCitzYW1xMDExIHNhbWVxdWFudHVtICAxMCAgICAgMUUrMSAgIC0+IDAKK3NhbXEwMTIgc2FtZXF1YW50dW0gIDEwRSsxICAxMEUrMSAgLT4gMQorc2FtcTAxMyBzYW1lcXVhbnR1bSAgMTAwICAgIDEwRSsxICAtPiAwCitzYW1xMDE0IHNhbWVxdWFudHVtICAxMDAgICAgMUUrMiAgIC0+IDAKK3NhbXEwMTUgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0yICAgLT4gMAorc2FtcTAxNiBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTEgICAtPiAxCitzYW1xMDE3IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMCAgIC0+IDAKK3NhbXEwMTggc2FtZXF1YW50dW0gIDk5OSAgICA5OTkgICAgLT4gMQorc2FtcTAxOSBzYW1lcXVhbnR1bSAgOTk5RS0xIDk5LjkgICAtPiAxCitzYW1xMDIwIHNhbWVxdWFudHVtICAxMTFFLTEgMjIuMiAgIC0+IDEKK3NhbXEwMjEgc2FtZXF1YW50dW0gIDExMUUtMSAxMjM0LjIgLT4gMQorCistLSB6ZXJvcworc2FtcTAzMCBzYW1lcXVhbnR1bSAgMC4wICAgIDEuMSAgICAtPiAxCitzYW1xMDMxIHNhbWVxdWFudHVtICAwLjAgICAgMS4xMSAgIC0+IDAKK3NhbXEwMzIgc2FtZXF1YW50dW0gIDAuMCAgICAwICAgICAgLT4gMAorc2FtcTAzMyBzYW1lcXVhbnR1bSAgMC4wICAgIDAuMCAgICAtPiAxCitzYW1xMDM0IHNhbWVxdWFudHVtICAwLjAgICAgMC4wMCAgIC0+IDAKK3NhbXEwMzUgc2FtZXF1YW50dW0gIDBFKzEgICAwRSswICAgLT4gMAorc2FtcTAzNiBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzEgICAtPiAxCitzYW1xMDM3IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMiAgIC0+IDAKK3NhbXEwMzggc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xNiAgLT4gMAorc2FtcTAzOSBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE3ICAtPiAxCitzYW1xMDQwIHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTggIC0+IDAKK3NhbXEwNDEgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE1IC0+IDAKK3NhbXEwNDIgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE2IC0+IDEKK3NhbXEwNDMgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE3IC0+IDAKK3NhbXEwNDQgc2FtZXF1YW50dW0gLTBFLTE3ICAwLjBFLTE2IC0+IDEKK3NhbXEwNDUgc2FtZXF1YW50dW0gIDBFLTE3IC0wLjBFLTE3IC0+IDAKK3NhbXEwNDYgc2FtZXF1YW50dW0gIDBFLTE3IC0wLjBFLTE2IC0+IDEKK3NhbXEwNDcgc2FtZXF1YW50dW0gLTBFLTE3ICAwLjBFLTE3IC0+IDAKK3NhbXEwNDggc2FtZXF1YW50dW0gLTBFLTE3IC0wLjBFLTE2IC0+IDEKK3NhbXEwNDkgc2FtZXF1YW50dW0gLTBFLTE3IC0wLjBFLTE3IC0+IDAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK3NhbXEwNTEgc2FtZXF1YW50dW0gIDkuOTk5OTk5OTlFKzk5OSAgICA5Ljk5OTk5OTk5RSs5OTkgIC0+IDEKK3NhbXEwNTIgc2FtZXF1YW50dW0gIDFFLTk5OSAgICAgICAgICAgICAxRS05OTkgICAgICAgICAgIC0+IDEKK3NhbXEwNTMgc2FtZXF1YW50dW0gIDEuMDAwMDAwMDBFLTk5OSAgICAxLjAwMDAwMDAwRS05OTkgIC0+IDEKK3NhbXEwNTQgc2FtZXF1YW50dW0gIDFFLTEwMDcgICAgICAgICAgICAxRS0xMDA3ICAgICAgICAgIC0+IDEKK3NhbXEwNTUgc2FtZXF1YW50dW0gIDkuOTk5OTk5OTlFKzk5OSAgICA5Ljk5OTk5OTk5RSs5OTkgIC0+IDEKK3NhbXEwNTYgc2FtZXF1YW50dW0gIDFFLTk5OSAgICAgICAgICAgICAxRS05OTkgICAgICAgICAgIC0+IDEKK3NhbXEwNTcgc2FtZXF1YW50dW0gIDEuMDAwMDAwMDBFLTk5OSAgICAxLjAwMDAwMDAwRS05OTkgIC0+IDEKK3NhbXEwNTggc2FtZXF1YW50dW0gIDFFLTEwMDcgICAgICAgICAgICAxRS0xMDA3ICAgICAgICAgIC0+IDEKKworc2FtcTA2MSBzYW1lcXVhbnR1bSAgLTFFLTEwMDcgICAgICAgICAgIC0xRS0xMDA3ICAgICAgICAgLT4gMQorc2FtcTA2MiBzYW1lcXVhbnR1bSAgLTEuMDAwMDAwMDBFLTk5OSAgIC0xLjAwMDAwMDAwRS05OTkgLT4gMQorc2FtcTA2MyBzYW1lcXVhbnR1bSAgLTFFLTk5OSAgICAgICAgICAgIC0xRS05OTkgICAgICAgICAgLT4gMQorc2FtcTA2NCBzYW1lcXVhbnR1bSAgLTkuOTk5OTk5OTlFKzk5OSAgIC05Ljk5OTk5OTk5RSs5OTkgLT4gMQorc2FtcTA2NSBzYW1lcXVhbnR1bSAgLTFFLTEwMDcgICAgICAgICAgIC0xRS0xMDA3ICAgICAgICAgLT4gMQorc2FtcTA2NiBzYW1lcXVhbnR1bSAgLTEuMDAwMDAwMDBFLTk5OSAgIC0xLjAwMDAwMDAwRS05OTkgLT4gMQorc2FtcTA2NyBzYW1lcXVhbnR1bSAgLTFFLTk5OSAgICAgICAgICAgIC0xRS05OTkgICAgICAgICAgLT4gMQorc2FtcTA2OCBzYW1lcXVhbnR1bSAgLTkuOTk5OTk5OTlFKzk5OSAgIC05Ljk5OTk5OTk5RSs5OTkgLT4gMQorCitzYW1xMDcxIHNhbWVxdWFudHVtICAtNEUtMTAwNyAgICAgICAgICAgLTFFLTEwMDcgICAgICAgICAtPiAxCitzYW1xMDcyIHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMEUtOTk5ICAgLTEuMDAwMDQwMDBFLTk5OSAtPiAxCitzYW1xMDczIHNhbWVxdWFudHVtICAtNEUtOTk5ICAgICAgICAgICAgLTFFLTk5OSAgICAgICAgICAtPiAxCitzYW1xMDc0IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OUUrOTk5ICAgLTkuOTk5NDk5OTlFKzk5OSAtPiAxCitzYW1xMDc1IHNhbWVxdWFudHVtICAtNEUtMTAwNyAgICAgICAgICAgLTFFLTEwMDcgICAgICAgICAtPiAxCitzYW1xMDc2IHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMEUtOTk5ICAgLTEuMDA0MDAwMDBFLTk5OSAtPiAxCitzYW1xMDc3IHNhbWVxdWFudHVtICAtNEUtOTk5ICAgICAgICAgICAgLTFFLTk5OSAgICAgICAgICAtPiAxCitzYW1xMDc4IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OUUrOTk5ICAgLTkuOTQ5OTk5OTlFKzk5OSAtPiAxCisKK3NhbXEwODEgc2FtZXF1YW50dW0gIC00RS0xMDA2ICAgICAgICAgICAtMUUtMTAwNyAgICAgICAgIC0+IDAKK3NhbXEwODIgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwRS05OTkgICAtMS4wMDAwNDAwMEUtOTk2IC0+IDAKK3NhbXEwODMgc2FtZXF1YW50dW0gIC00RS05OTYgICAgICAgICAgICAtMUUtOTk5ICAgICAgICAgIC0+IDAKK3NhbXEwODQgc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5RSs5OTkgICAtOS45OTk0OTk5OUUrOTk2IC0+IDAKK3NhbXEwODUgc2FtZXF1YW50dW0gIC00RS0xMDA2ICAgICAgICAgICAtMUUtMTAwNyAgICAgICAgIC0+IDAKK3NhbXEwODYgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwRS05OTkgICAtMS4wMDQwMDAwMEUtOTk2IC0+IDAKK3NhbXEwODcgc2FtZXF1YW50dW0gIC00RS05OTYgICAgICAgICAgICAtMUUtOTk5ICAgICAgICAgIC0+IDAKK3NhbXEwODggc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5RSs5OTkgICAtOS45NDk5OTk5OUUrOTk2IC0+IDAKKworLS0gc3BlY2lhbHMgJiBjb21iaW5hdGlvbnMKK3NhbXEwMTEwIHNhbWVxdWFudHVtICAtSW5mICAgIC1JbmYgICAtPiAxCitzYW1xMDExMSBzYW1lcXVhbnR1bSAgLUluZiAgICAgSW5mICAgLT4gMQorc2FtcTAxMTIgc2FtZXF1YW50dW0gIC1JbmYgICAgIE5hTiAgIC0+IDAKK3NhbXEwMTEzIHNhbWVxdWFudHVtICAtSW5mICAgIC03RSszICAtPiAwCitzYW1xMDExNCBzYW1lcXVhbnR1bSAgLUluZiAgICAtNyAgICAgLT4gMAorc2FtcTAxMTUgc2FtZXF1YW50dW0gIC1JbmYgICAgLTdFLTMgIC0+IDAKK3NhbXEwMTE2IHNhbWVxdWFudHVtICAtSW5mICAgIC0wRS0zICAtPiAwCitzYW1xMDExNyBzYW1lcXVhbnR1bSAgLUluZiAgICAtMCAgICAgLT4gMAorc2FtcTAxMTggc2FtZXF1YW50dW0gIC1JbmYgICAgLTBFKzMgIC0+IDAKK3NhbXEwMTE5IHNhbWVxdWFudHVtICAtSW5mICAgICAwRS0zICAtPiAwCitzYW1xMDEyMCBzYW1lcXVhbnR1bSAgLUluZiAgICAgMCAgICAgLT4gMAorc2FtcTAxMjEgc2FtZXF1YW50dW0gIC1JbmYgICAgIDBFKzMgIC0+IDAKK3NhbXEwMTIyIHNhbWVxdWFudHVtICAtSW5mICAgICA3RS0zICAtPiAwCitzYW1xMDEyMyBzYW1lcXVhbnR1bSAgLUluZiAgICAgNyAgICAgLT4gMAorc2FtcTAxMjQgc2FtZXF1YW50dW0gIC1JbmYgICAgIDdFKzMgIC0+IDAKK3NhbXEwMTI1IHNhbWVxdWFudHVtICAtSW5mICAgICBzTmFOICAtPiAwCisKK3NhbXEwMjEwIHNhbWVxdWFudHVtICAgSW5mICAgIC1JbmYgICAtPiAxCitzYW1xMDIxMSBzYW1lcXVhbnR1bSAgIEluZiAgICAgSW5mICAgLT4gMQorc2FtcTAyMTIgc2FtZXF1YW50dW0gICBJbmYgICAgIE5hTiAgIC0+IDAKK3NhbXEwMjEzIHNhbWVxdWFudHVtICAgSW5mICAgIC03RSszICAtPiAwCitzYW1xMDIxNCBzYW1lcXVhbnR1bSAgIEluZiAgICAtNyAgICAgLT4gMAorc2FtcTAyMTUgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFLTMgIC0+IDAKK3NhbXEwMjE2IHNhbWVxdWFudHVtICAgSW5mICAgIC0wRS0zICAtPiAwCitzYW1xMDIxNyBzYW1lcXVhbnR1bSAgIEluZiAgICAtMCAgICAgLT4gMAorc2FtcTAyMTggc2FtZXF1YW50dW0gICBJbmYgICAgLTBFKzMgIC0+IDAKK3NhbXEwMjE5IHNhbWVxdWFudHVtICAgSW5mICAgICAwRS0zICAtPiAwCitzYW1xMDIyMCBzYW1lcXVhbnR1bSAgIEluZiAgICAgMCAgICAgLT4gMAorc2FtcTAyMjEgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFKzMgIC0+IDAKK3NhbXEwMjIyIHNhbWVxdWFudHVtICAgSW5mICAgICA3RS0zICAtPiAwCitzYW1xMDIyMyBzYW1lcXVhbnR1bSAgIEluZiAgICAgNyAgICAgLT4gMAorc2FtcTAyMjQgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFKzMgIC0+IDAKK3NhbXEwMjI1IHNhbWVxdWFudHVtICAgSW5mICAgICBzTmFOICAtPiAwCisKK3NhbXEwMzEwIHNhbWVxdWFudHVtICAgTmFOICAgIC1JbmYgICAtPiAwCitzYW1xMDMxMSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgSW5mICAgLT4gMAorc2FtcTAzMTIgc2FtZXF1YW50dW0gICBOYU4gICAgIE5hTiAgIC0+IDEKK3NhbXEwMzEzIHNhbWVxdWFudHVtICAgTmFOICAgIC03RSszICAtPiAwCitzYW1xMDMxNCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtNyAgICAgLT4gMAorc2FtcTAzMTUgc2FtZXF1YW50dW0gICBOYU4gICAgLTdFLTMgIC0+IDAKK3NhbXEwMzE2IHNhbWVxdWFudHVtICAgTmFOICAgIC0wRS0zICAtPiAwCitzYW1xMDMxNyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMCAgICAgLT4gMAorc2FtcTAzMTggc2FtZXF1YW50dW0gICBOYU4gICAgLTBFKzMgIC0+IDAKK3NhbXEwMzE5IHNhbWVxdWFudHVtICAgTmFOICAgICAwRS0zICAtPiAwCitzYW1xMDMyMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMCAgICAgLT4gMAorc2FtcTAzMjEgc2FtZXF1YW50dW0gICBOYU4gICAgIDBFKzMgIC0+IDAKK3NhbXEwMzIyIHNhbWVxdWFudHVtICAgTmFOICAgICA3RS0zICAtPiAwCitzYW1xMDMyMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAgNyAgICAgLT4gMAorc2FtcTAzMjQgc2FtZXF1YW50dW0gICBOYU4gICAgIDdFKzMgIC0+IDAKK3NhbXEwMzI1IHNhbWVxdWFudHVtICAgTmFOICAgICBzTmFOICAtPiAxCisKK3NhbXEwNDEwIHNhbWVxdWFudHVtICAtN0UrMyAgICAtSW5mICAgLT4gMAorc2FtcTA0MTEgc2FtZXF1YW50dW0gIC03RSszICAgICBJbmYgICAtPiAwCitzYW1xMDQxMiBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIE5hTiAgIC0+IDAKK3NhbXEwNDEzIHNhbWVxdWFudHVtICAtN0UrMyAgICAtN0UrMyAgLT4gMQorc2FtcTA0MTQgc2FtZXF1YW50dW0gIC03RSszICAgIC03ICAgICAtPiAwCitzYW1xMDQxNSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTdFLTMgIC0+IDAKK3NhbXEwNDE2IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMEUtMyAgLT4gMAorc2FtcTA0MTcgc2FtZXF1YW50dW0gIC03RSszICAgIC0wICAgICAtPiAwCitzYW1xMDQxOCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTBFKzMgIC0+IDEKK3NhbXEwNDE5IHNhbWVxdWFudHVtICAtN0UrMyAgICAgMEUtMyAgLT4gMAorc2FtcTA0MjAgc2FtZXF1YW50dW0gIC03RSszICAgICAwICAgICAtPiAwCitzYW1xMDQyMSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDBFKzMgIC0+IDEKK3NhbXEwNDIyIHNhbWVxdWFudHVtICAtN0UrMyAgICAgN0UtMyAgLT4gMAorc2FtcTA0MjMgc2FtZXF1YW50dW0gIC03RSszICAgICA3ICAgICAtPiAwCitzYW1xMDQyNCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDdFKzMgIC0+IDEKK3NhbXEwNDI1IHNhbWVxdWFudHVtICAtN0UrMyAgICAgc05hTiAgLT4gMAorCitzYW1xMDUxMCBzYW1lcXVhbnR1bSAgLTcgICAgICAtSW5mICAgLT4gMAorc2FtcTA1MTEgc2FtZXF1YW50dW0gIC03ICAgICAgIEluZiAgIC0+IDAKK3NhbXEwNTEyIHNhbWVxdWFudHVtICAtNyAgICAgICBOYU4gICAtPiAwCitzYW1xMDUxMyBzYW1lcXVhbnR1bSAgLTcgICAgICAtN0UrMyAgLT4gMAorc2FtcTA1MTQgc2FtZXF1YW50dW0gIC03ICAgICAgLTcgICAgIC0+IDEKK3NhbXEwNTE1IHNhbWVxdWFudHVtICAtNyAgICAgIC03RS0zICAtPiAwCitzYW1xMDUxNiBzYW1lcXVhbnR1bSAgLTcgICAgICAtMEUtMyAgLT4gMAorc2FtcTA1MTcgc2FtZXF1YW50dW0gIC03ICAgICAgLTAgICAgIC0+IDEKK3NhbXEwNTE4IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRSszICAtPiAwCitzYW1xMDUxOSBzYW1lcXVhbnR1bSAgLTcgICAgICAgMEUtMyAgLT4gMAorc2FtcTA1MjAgc2FtZXF1YW50dW0gIC03ICAgICAgIDAgICAgIC0+IDEKK3NhbXEwNTIxIHNhbWVxdWFudHVtICAtNyAgICAgICAwRSszICAtPiAwCitzYW1xMDUyMiBzYW1lcXVhbnR1bSAgLTcgICAgICAgN0UtMyAgLT4gMAorc2FtcTA1MjMgc2FtZXF1YW50dW0gIC03ICAgICAgIDcgICAgIC0+IDEKK3NhbXEwNTI0IHNhbWVxdWFudHVtICAtNyAgICAgICA3RSszICAtPiAwCitzYW1xMDUyNSBzYW1lcXVhbnR1bSAgLTcgICAgICAgc05hTiAgLT4gMAorCitzYW1xMDYxMCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLUluZiAgIC0+IDAKK3NhbXEwNjExIHNhbWVxdWFudHVtICAtN0UtMyAgICAgSW5mICAgLT4gMAorc2FtcTA2MTIgc2FtZXF1YW50dW0gIC03RS0zICAgICBOYU4gICAtPiAwCitzYW1xMDYxMyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTdFKzMgIC0+IDAKK3NhbXEwNjE0IHNhbWVxdWFudHVtICAtN0UtMyAgICAtNyAgICAgLT4gMAorc2FtcTA2MTUgc2FtZXF1YW50dW0gIC03RS0zICAgIC03RS0zICAtPiAxCitzYW1xMDYxNiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTBFLTMgIC0+IDEKK3NhbXEwNjE3IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMCAgICAgLT4gMAorc2FtcTA2MTggc2FtZXF1YW50dW0gIC03RS0zICAgIC0wRSszICAtPiAwCitzYW1xMDYxOSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDBFLTMgIC0+IDEKK3NhbXEwNjIwIHNhbWVxdWFudHVtICAtN0UtMyAgICAgMCAgICAgLT4gMAorc2FtcTA2MjEgc2FtZXF1YW50dW0gIC03RS0zICAgICAwRSszICAtPiAwCitzYW1xMDYyMiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDdFLTMgIC0+IDEKK3NhbXEwNjIzIHNhbWVxdWFudHVtICAtN0UtMyAgICAgNyAgICAgLT4gMAorc2FtcTA2MjQgc2FtZXF1YW50dW0gIC03RS0zICAgICA3RSszICAtPiAwCitzYW1xMDYyNSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIHNOYU4gIC0+IDAKKworc2FtcTA3MTAgc2FtZXF1YW50dW0gIC0wRS0zICAgIC1JbmYgICAtPiAwCitzYW1xMDcxMSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIEluZiAgIC0+IDAKK3NhbXEwNzEyIHNhbWVxdWFudHVtICAtMEUtMyAgICAgTmFOICAgLT4gMAorc2FtcTA3MTMgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03RSszICAtPiAwCitzYW1xMDcxNCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTcgICAgIC0+IDAKK3NhbXEwNzE1IHNhbWVxdWFudHVtICAtMEUtMyAgICAtN0UtMyAgLT4gMQorc2FtcTA3MTYgc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wRS0zICAtPiAxCitzYW1xMDcxNyBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTAgICAgIC0+IDAKK3NhbXEwNzE4IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMEUrMyAgLT4gMAorc2FtcTA3MTkgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwRS0zICAtPiAxCitzYW1xMDcyMCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDAgICAgIC0+IDAKK3NhbXEwNzIxIHNhbWVxdWFudHVtICAtMEUtMyAgICAgMEUrMyAgLT4gMAorc2FtcTA3MjIgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3RS0zICAtPiAxCitzYW1xMDcyMyBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDcgICAgIC0+IDAKK3NhbXEwNzI0IHNhbWVxdWFudHVtICAtMEUtMyAgICAgN0UrMyAgLT4gMAorc2FtcTA3MjUgc2FtZXF1YW50dW0gIC0wRS0zICAgICBzTmFOICAtPiAwCisKK3NhbXEwODEwIHNhbWVxdWFudHVtICAtMCAgICAgIC1JbmYgICAtPiAwCitzYW1xMDgxMSBzYW1lcXVhbnR1bSAgLTAgICAgICAgSW5mICAgLT4gMAorc2FtcTA4MTIgc2FtZXF1YW50dW0gIC0wICAgICAgIE5hTiAgIC0+IDAKK3NhbXEwODEzIHNhbWVxdWFudHVtICAtMCAgICAgIC03RSszICAtPiAwCitzYW1xMDgxNCBzYW1lcXVhbnR1bSAgLTAgICAgICAtNyAgICAgLT4gMQorc2FtcTA4MTUgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFLTMgIC0+IDAKK3NhbXEwODE2IHNhbWVxdWFudHVtICAtMCAgICAgIC0wRS0zICAtPiAwCitzYW1xMDgxNyBzYW1lcXVhbnR1bSAgLTAgICAgICAtMCAgICAgLT4gMQorc2FtcTA4MTggc2FtZXF1YW50dW0gIC0wICAgICAgLTBFKzMgIC0+IDAKK3NhbXEwODE5IHNhbWVxdWFudHVtICAtMCAgICAgICAwRS0zICAtPiAwCitzYW1xMDgyMCBzYW1lcXVhbnR1bSAgLTAgICAgICAgMCAgICAgLT4gMQorc2FtcTA4MjEgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFKzMgIC0+IDAKK3NhbXEwODIyIHNhbWVxdWFudHVtICAtMCAgICAgICA3RS0zICAtPiAwCitzYW1xMDgyMyBzYW1lcXVhbnR1bSAgLTAgICAgICAgNyAgICAgLT4gMQorc2FtcTA4MjQgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFKzMgIC0+IDAKK3NhbXEwODI1IHNhbWVxdWFudHVtICAtMCAgICAgICBzTmFOICAtPiAwCisKK3NhbXEwOTEwIHNhbWVxdWFudHVtICAtMEUrMyAgICAtSW5mICAgLT4gMAorc2FtcTA5MTEgc2FtZXF1YW50dW0gIC0wRSszICAgICBJbmYgICAtPiAwCitzYW1xMDkxMiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIE5hTiAgIC0+IDAKK3NhbXEwOTEzIHNhbWVxdWFudHVtICAtMEUrMyAgICAtN0UrMyAgLT4gMQorc2FtcTA5MTQgc2FtZXF1YW50dW0gIC0wRSszICAgIC03ICAgICAtPiAwCitzYW1xMDkxNSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTdFLTMgIC0+IDAKK3NhbXEwOTE2IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMEUtMyAgLT4gMAorc2FtcTA5MTcgc2FtZXF1YW50dW0gIC0wRSszICAgIC0wICAgICAtPiAwCitzYW1xMDkxOCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTBFKzMgIC0+IDEKK3NhbXEwOTE5IHNhbWVxdWFudHVtICAtMEUrMyAgICAgMEUtMyAgLT4gMAorc2FtcTA5MjAgc2FtZXF1YW50dW0gIC0wRSszICAgICAwICAgICAtPiAwCitzYW1xMDkyMSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDBFKzMgIC0+IDEKK3NhbXEwOTIyIHNhbWVxdWFudHVtICAtMEUrMyAgICAgN0UtMyAgLT4gMAorc2FtcTA5MjMgc2FtZXF1YW50dW0gIC0wRSszICAgICA3ICAgICAtPiAwCitzYW1xMDkyNCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDdFKzMgIC0+IDEKK3NhbXEwOTI1IHNhbWVxdWFudHVtICAtMEUrMyAgICAgc05hTiAgLT4gMAorCitzYW1xMTExMCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtSW5mICAgLT4gMAorc2FtcTExMTEgc2FtZXF1YW50dW0gIDBFLTMgICAgIEluZiAgIC0+IDAKK3NhbXExMTEyIHNhbWVxdWFudHVtICAwRS0zICAgICBOYU4gICAtPiAwCitzYW1xMTExMyBzYW1lcXVhbnR1bSAgMEUtMyAgICAtN0UrMyAgLT4gMAorc2FtcTExMTQgc2FtZXF1YW50dW0gIDBFLTMgICAgLTcgICAgIC0+IDAKK3NhbXExMTE1IHNhbWVxdWFudHVtICAwRS0zICAgIC03RS0zICAtPiAxCitzYW1xMTExNiBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMEUtMyAgLT4gMQorc2FtcTExMTcgc2FtZXF1YW50dW0gIDBFLTMgICAgLTAgICAgIC0+IDAKK3NhbXExMTE4IHNhbWVxdWFudHVtICAwRS0zICAgIC0wRSszICAtPiAwCitzYW1xMTExOSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMEUtMyAgLT4gMQorc2FtcTExMjAgc2FtZXF1YW50dW0gIDBFLTMgICAgIDAgICAgIC0+IDAKK3NhbXExMTIxIHNhbWVxdWFudHVtICAwRS0zICAgICAwRSszICAtPiAwCitzYW1xMTEyMiBzYW1lcXVhbnR1bSAgMEUtMyAgICAgN0UtMyAgLT4gMQorc2FtcTExMjMgc2FtZXF1YW50dW0gIDBFLTMgICAgIDcgICAgIC0+IDAKK3NhbXExMTI0IHNhbWVxdWFudHVtICAwRS0zICAgICA3RSszICAtPiAwCitzYW1xMTEyNSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgc05hTiAgLT4gMAorCitzYW1xMTIxMCBzYW1lcXVhbnR1bSAgMCAgICAgICAtSW5mICAgLT4gMAorc2FtcTEyMTEgc2FtZXF1YW50dW0gIDAgICAgICAgIEluZiAgIC0+IDAKK3NhbXExMjEyIHNhbWVxdWFudHVtICAwICAgICAgICBOYU4gICAtPiAwCitzYW1xMTIxMyBzYW1lcXVhbnR1bSAgMCAgICAgICAtN0UrMyAgLT4gMAorc2FtcTEyMTQgc2FtZXF1YW50dW0gIDAgICAgICAgLTcgICAgIC0+IDEKK3NhbXExMjE1IHNhbWVxdWFudHVtICAwICAgICAgIC03RS0zICAtPiAwCitzYW1xMTIxNiBzYW1lcXVhbnR1bSAgMCAgICAgICAtMEUtMyAgLT4gMAorc2FtcTEyMTcgc2FtZXF1YW50dW0gIDAgICAgICAgLTAgICAgIC0+IDEKK3NhbXExMjE4IHNhbWVxdWFudHVtICAwICAgICAgIC0wRSszICAtPiAwCitzYW1xMTIxOSBzYW1lcXVhbnR1bSAgMCAgICAgICAgMEUtMyAgLT4gMAorc2FtcTEyMjAgc2FtZXF1YW50dW0gIDAgICAgICAgIDAgICAgIC0+IDEKK3NhbXExMjIxIHNhbWVxdWFudHVtICAwICAgICAgICAwRSszICAtPiAwCitzYW1xMTIyMiBzYW1lcXVhbnR1bSAgMCAgICAgICAgN0UtMyAgLT4gMAorc2FtcTEyMjMgc2FtZXF1YW50dW0gIDAgICAgICAgIDcgICAgIC0+IDEKK3NhbXExMjI0IHNhbWVxdWFudHVtICAwICAgICAgICA3RSszICAtPiAwCitzYW1xMTIyNSBzYW1lcXVhbnR1bSAgMCAgICAgICAgc05hTiAgLT4gMAorCitzYW1xMTMxMCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtSW5mICAgLT4gMAorc2FtcTEzMTEgc2FtZXF1YW50dW0gIDBFKzMgICAgIEluZiAgIC0+IDAKK3NhbXExMzEyIHNhbWVxdWFudHVtICAwRSszICAgICBOYU4gICAtPiAwCitzYW1xMTMxMyBzYW1lcXVhbnR1bSAgMEUrMyAgICAtN0UrMyAgLT4gMQorc2FtcTEzMTQgc2FtZXF1YW50dW0gIDBFKzMgICAgLTcgICAgIC0+IDAKK3NhbXExMzE1IHNhbWVxdWFudHVtICAwRSszICAgIC03RS0zICAtPiAwCitzYW1xMTMxNiBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMEUtMyAgLT4gMAorc2FtcTEzMTcgc2FtZXF1YW50dW0gIDBFKzMgICAgLTAgICAgIC0+IDAKK3NhbXExMzE4IHNhbWVxdWFudHVtICAwRSszICAgIC0wRSszICAtPiAxCitzYW1xMTMxOSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMEUtMyAgLT4gMAorc2FtcTEzMjAgc2FtZXF1YW50dW0gIDBFKzMgICAgIDAgICAgIC0+IDAKK3NhbXExMzIxIHNhbWVxdWFudHVtICAwRSszICAgICAwRSszICAtPiAxCitzYW1xMTMyMiBzYW1lcXVhbnR1bSAgMEUrMyAgICAgN0UtMyAgLT4gMAorc2FtcTEzMjMgc2FtZXF1YW50dW0gIDBFKzMgICAgIDcgICAgIC0+IDAKK3NhbXExMzI0IHNhbWVxdWFudHVtICAwRSszICAgICA3RSszICAtPiAxCitzYW1xMTMyNSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgc05hTiAgLT4gMAorCitzYW1xMTQxMCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtSW5mICAgLT4gMAorc2FtcTE0MTEgc2FtZXF1YW50dW0gIDdFLTMgICAgIEluZiAgIC0+IDAKK3NhbXExNDEyIHNhbWVxdWFudHVtICA3RS0zICAgICBOYU4gICAtPiAwCitzYW1xMTQxMyBzYW1lcXVhbnR1bSAgN0UtMyAgICAtN0UrMyAgLT4gMAorc2FtcTE0MTQgc2FtZXF1YW50dW0gIDdFLTMgICAgLTcgICAgIC0+IDAKK3NhbXExNDE1IHNhbWVxdWFudHVtICA3RS0zICAgIC03RS0zICAtPiAxCitzYW1xMTQxNiBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMEUtMyAgLT4gMQorc2FtcTE0MTcgc2FtZXF1YW50dW0gIDdFLTMgICAgLTAgICAgIC0+IDAKK3NhbXExNDE4IHNhbWVxdWFudHVtICA3RS0zICAgIC0wRSszICAtPiAwCitzYW1xMTQxOSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMEUtMyAgLT4gMQorc2FtcTE0MjAgc2FtZXF1YW50dW0gIDdFLTMgICAgIDAgICAgIC0+IDAKK3NhbXExNDIxIHNhbWVxdWFudHVtICA3RS0zICAgICAwRSszICAtPiAwCitzYW1xMTQyMiBzYW1lcXVhbnR1bSAgN0UtMyAgICAgN0UtMyAgLT4gMQorc2FtcTE0MjMgc2FtZXF1YW50dW0gIDdFLTMgICAgIDcgICAgIC0+IDAKK3NhbXExNDI0IHNhbWVxdWFudHVtICA3RS0zICAgICA3RSszICAtPiAwCitzYW1xMTQyNSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgc05hTiAgLT4gMAorCitzYW1xMTUxMCBzYW1lcXVhbnR1bSAgNyAgICAgIC1JbmYgICAtPiAwCitzYW1xMTUxMSBzYW1lcXVhbnR1bSAgNyAgICAgICBJbmYgICAtPiAwCitzYW1xMTUxMiBzYW1lcXVhbnR1bSAgNyAgICAgICBOYU4gICAtPiAwCitzYW1xMTUxMyBzYW1lcXVhbnR1bSAgNyAgICAgIC03RSszICAtPiAwCitzYW1xMTUxNCBzYW1lcXVhbnR1bSAgNyAgICAgIC03ICAgICAtPiAxCitzYW1xMTUxNSBzYW1lcXVhbnR1bSAgNyAgICAgIC03RS0zICAtPiAwCitzYW1xMTUxNiBzYW1lcXVhbnR1bSAgNyAgICAgIC0wRS0zICAtPiAwCitzYW1xMTUxNyBzYW1lcXVhbnR1bSAgNyAgICAgIC0wICAgICAtPiAxCitzYW1xMTUxOCBzYW1lcXVhbnR1bSAgNyAgICAgIC0wRSszICAtPiAwCitzYW1xMTUxOSBzYW1lcXVhbnR1bSAgNyAgICAgICAwRS0zICAtPiAwCitzYW1xMTUyMCBzYW1lcXVhbnR1bSAgNyAgICAgICAwICAgICAtPiAxCitzYW1xMTUyMSBzYW1lcXVhbnR1bSAgNyAgICAgICAwRSszICAtPiAwCitzYW1xMTUyMiBzYW1lcXVhbnR1bSAgNyAgICAgICA3RS0zICAtPiAwCitzYW1xMTUyMyBzYW1lcXVhbnR1bSAgNyAgICAgICA3ICAgICAtPiAxCitzYW1xMTUyNCBzYW1lcXVhbnR1bSAgNyAgICAgICA3RSszICAtPiAwCitzYW1xMTUyNSBzYW1lcXVhbnR1bSAgNyAgICAgICBzTmFOICAtPiAwCisKK3NhbXExNjEwIHNhbWVxdWFudHVtICA3RSszICAgIC1JbmYgICAtPiAwCitzYW1xMTYxMSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgSW5mICAgLT4gMAorc2FtcTE2MTIgc2FtZXF1YW50dW0gIDdFKzMgICAgIE5hTiAgIC0+IDAKK3NhbXExNjEzIHNhbWVxdWFudHVtICA3RSszICAgIC03RSszICAtPiAxCitzYW1xMTYxNCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtNyAgICAgLT4gMAorc2FtcTE2MTUgc2FtZXF1YW50dW0gIDdFKzMgICAgLTdFLTMgIC0+IDAKK3NhbXExNjE2IHNhbWVxdWFudHVtICA3RSszICAgIC0wRS0zICAtPiAwCitzYW1xMTYxNyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMCAgICAgLT4gMAorc2FtcTE2MTggc2FtZXF1YW50dW0gIDdFKzMgICAgLTBFKzMgIC0+IDEKK3NhbXExNjE5IHNhbWVxdWFudHVtICA3RSszICAgICAwRS0zICAtPiAwCitzYW1xMTYyMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMCAgICAgLT4gMAorc2FtcTE2MjEgc2FtZXF1YW50dW0gIDdFKzMgICAgIDBFKzMgIC0+IDEKK3NhbXExNjIyIHNhbWVxdWFudHVtICA3RSszICAgICA3RS0zICAtPiAwCitzYW1xMTYyMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAgNyAgICAgLT4gMAorc2FtcTE2MjQgc2FtZXF1YW50dW0gIDdFKzMgICAgIDdFKzMgIC0+IDEKK3NhbXExNjI1IHNhbWVxdWFudHVtICA3RSszICAgICBzTmFOICAtPiAwCisKK3NhbXExNzEwIHNhbWVxdWFudHVtICBzTmFOICAgIC1JbmYgICAtPiAwCitzYW1xMTcxMSBzYW1lcXVhbnR1bSAgc05hTiAgICAgSW5mICAgLT4gMAorc2FtcTE3MTIgc2FtZXF1YW50dW0gIHNOYU4gICAgIE5hTiAgIC0+IDEKK3NhbXExNzEzIHNhbWVxdWFudHVtICBzTmFOICAgIC03RSszICAtPiAwCitzYW1xMTcxNCBzYW1lcXVhbnR1bSAgc05hTiAgICAtNyAgICAgLT4gMAorc2FtcTE3MTUgc2FtZXF1YW50dW0gIHNOYU4gICAgLTdFLTMgIC0+IDAKK3NhbXExNzE2IHNhbWVxdWFudHVtICBzTmFOICAgIC0wRS0zICAtPiAwCitzYW1xMTcxNyBzYW1lcXVhbnR1bSAgc05hTiAgICAtMCAgICAgLT4gMAorc2FtcTE3MTggc2FtZXF1YW50dW0gIHNOYU4gICAgLTBFKzMgIC0+IDAKK3NhbXExNzE5IHNhbWVxdWFudHVtICBzTmFOICAgICAwRS0zICAtPiAwCitzYW1xMTcyMCBzYW1lcXVhbnR1bSAgc05hTiAgICAgMCAgICAgLT4gMAorc2FtcTE3MjEgc2FtZXF1YW50dW0gIHNOYU4gICAgIDBFKzMgIC0+IDAKK3NhbXExNzIyIHNhbWVxdWFudHVtICBzTmFOICAgICA3RS0zICAtPiAwCitzYW1xMTcyMyBzYW1lcXVhbnR1bSAgc05hTiAgICAgNyAgICAgLT4gMAorc2FtcTE3MjQgc2FtZXF1YW50dW0gIHNOYU4gICAgIDdFKzMgIC0+IDAKK3NhbXExNzI1IHNhbWVxdWFudHVtICBzTmFOICAgICBzTmFOICAtPiAxCistLSBub2lzeSBOYU5zCitzYW1xMTczMCBzYW1lcXVhbnR1bSAgc05hTjMgICAgc05hTjMgLT4gMQorc2FtcTE3MzEgc2FtZXF1YW50dW0gIHNOYU4zICAgIHNOYU40IC0+IDEKK3NhbXExNzMyIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFOMyAtPiAxCitzYW1xMTczMyBzYW1lcXVhbnR1bSAgIE5hTjMgICAgIE5hTjQgLT4gMQorc2FtcTE3MzQgc2FtZXF1YW50dW0gIHNOYU4zICAgICAzICAgIC0+IDAKK3NhbXExNzM1IHNhbWVxdWFudHVtICAgTmFOMyAgICAgMyAgICAtPiAwCitzYW1xMTczNiBzYW1lcXVhbnR1bSAgICAgIDQgICAgc05hTjQgLT4gMAorc2FtcTE3Mzcgc2FtZXF1YW50dW0gICAgICAzICAgICBOYU4zIC0+IDAKK3NhbXExNzM4IHNhbWVxdWFudHVtICAgIEluZiAgICBzTmFONCAtPiAwCitzYW1xMTczOSBzYW1lcXVhbnR1bSAgIC1JbmYgICAgIE5hTjMgLT4gMAorCisKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zY2FsZWIuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvc2NhbGViLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhNjVkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvc2NhbGViLmRlY1Rlc3QKQEAgLTAsMCArMSwyMDkgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gc2NhbGViLmRlY1Rlc3QgLS0gc2NhbGUgYSBudW1iZXIgYnkgcG93ZXJzIG9mIDEwICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCistLSBNYXggfHJoc3wgaXMgMiooOTk5KzkpID0gMjAxNgorCistLSBTYW5pdHkgY2hlY2tzCitzY2J4MDAxIHNjYWxlYiAgICAgICA3LjUwICAgMTAgLT4gNy41MEUrMTAKK3NjYngwMDIgc2NhbGViICAgICAgIDcuNTAgICAgMyAtPiA3LjUwRSszCitzY2J4MDAzIHNjYWxlYiAgICAgICA3LjUwICAgIDIgLT4gNzUwCitzY2J4MDA0IHNjYWxlYiAgICAgICA3LjUwICAgIDEgLT4gNzUuMAorc2NieDAwNSBzY2FsZWIgICAgICAgNy41MCAgICAwIC0+IDcuNTAKK3NjYngwMDYgc2NhbGViICAgICAgIDcuNTAgICAtMSAtPiAwLjc1MAorc2NieDAwNyBzY2FsZWIgICAgICAgNy41MCAgIC0yIC0+IDAuMDc1MAorc2NieDAwOCBzY2FsZWIgICAgICAgNy41MCAgLTEwIC0+IDcuNTBFLTEwCitzY2J4MDA5IHNjYWxlYiAgICAgIC03LjUwICAgIDMgLT4gLTcuNTBFKzMKK3NjYngwMTAgc2NhbGViICAgICAgLTcuNTAgICAgMiAtPiAtNzUwCitzY2J4MDExIHNjYWxlYiAgICAgIC03LjUwICAgIDEgLT4gLTc1LjAKK3NjYngwMTIgc2NhbGViICAgICAgLTcuNTAgICAgMCAtPiAtNy41MAorc2NieDAxMyBzY2FsZWIgICAgICAtNy41MCAgIC0xIC0+IC0wLjc1MAorCistLSBJbmZpbml0aWVzCitzY2J4MDE0IHNjYWxlYiAgSW5maW5pdHkgICAxIC0+IEluZmluaXR5CitzY2J4MDE1IHNjYWxlYiAgLUluZmluaXR5ICAyIC0+IC1JbmZpbml0eQorc2NieDAxNiBzY2FsZWIgIEluZmluaXR5ICAtMSAtPiBJbmZpbml0eQorc2NieDAxNyBzY2FsZWIgIC1JbmZpbml0eSAtMiAtPiAtSW5maW5pdHkKKworLS0gTmV4dCB0d28gYXJlIHNvbWV3aGF0IHVuZGVmaW5lZCBpbiA3NTRyOyB0cmVhdCBhcyBub24taW50ZWdlcgorc2NieDAxOCBzY2FsZWIgIDEwICBJbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwMTkgc2NhbGViICAxMCAtSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIE5hTnMgYXJlIHVuZGVmaW5lZCBpbiA3NTRyOyBhc3N1bWUgdXN1YWwgcHJvY2Vzc2luZworLS0gTmFOcywgMCBwYXlsb2FkCitzY2J4MDIxIHNjYWxlYiAgICAgICAgIE5hTiAgMSAtPiBOYU4KK3NjYngwMjIgc2NhbGViICAgICAgICAtTmFOIC0xIC0+IC1OYU4KK3NjYngwMjMgc2NhbGViICAgICAgICBzTmFOICAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAyNCBzY2FsZWIgICAgICAgLXNOYU4gIDEgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAyNSBzY2FsZWIgICAgNCAgICBOYU4gICAgLT4gTmFOCitzY2J4MDI2IHNjYWxlYiAtSW5mICAgLU5hTiAgICAtPiAtTmFOCitzY2J4MDI3IHNjYWxlYiAgICA0ICAgc05hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwMjggc2NhbGViICBJbmYgIC1zTmFOICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gbm9uLWludGVnZXIgUkhTCitzY2J4MDMwIHNjYWxlYiAgMS4yMyAgICAxICAgIC0+ICAxMi4zCitzY2J4MDMxIHNjYWxlYiAgMS4yMyAgICAxLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwMzIgc2NhbGViICAxLjIzICAgIDEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAzMyBzY2FsZWIgIDEuMjMgICAgMS4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDM0IHNjYWxlYiAgMS4yMyAgICAwLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwMzUgc2NhbGViICAxLjIzICAgIDAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAzNiBzY2FsZWIgIDEuMjMgICAgMC45OTk5OTk5OTkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAzNyBzY2FsZWIgIDEuMjMgICAtMSAgICAtPiAgMC4xMjMKK3NjYngwMzggc2NhbGViICAxLjIzICAgLTEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDAzOSBzY2FsZWIgIDEuMjMgICAtMS4xICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDQwIHNjYWxlYiAgMS4yMyAgIC0xLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NjYngwNDEgc2NhbGViICAxLjIzICAgLTAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDA0MiBzY2FsZWIgIDEuMjMgICAtMC4xMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDQzIHNjYWxlYiAgMS4yMyAgIC0wLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDQ0IHNjYWxlYiAgMS4yMyAgICAwLjEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDQ1IHNjYWxlYiAgMS4yMyAgICAxRSsxICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDQ2IHNjYWxlYiAgMS4yMyAgICAxLjEyMzRFKzYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCitzY2J4MDQ3IHNjYWxlYiAgMS4yMyAgICAxLjEyM0UrNCAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKworc2NieDEyMCBzY2FsZWIgIDEuMjMgICAgMjAxNSAgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorc2NieDEyMSBzY2FsZWIgIDEuMjMgICAgMjAxNiAgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorc2NieDEyMiBzY2FsZWIgIDEuMjMgICAgMjAxNyAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDEyMyBzY2FsZWIgIDEuMjMgICAgMjAxOCAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDEyNCBzY2FsZWIgIDEuMjMgICAtMjAxNSAgICAgICAgLT4gIDBFLTEwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorc2NieDEyNSBzY2FsZWIgIDEuMjMgICAtMjAxNiAgICAgICAgLT4gIDBFLTEwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorc2NieDEyNiBzY2FsZWIgIDEuMjMgICAtMjAxNyAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2NieDEyNyBzY2FsZWIgIDEuMjMgICAtMjAxOCAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBOYU5zLCBub24tMCBwYXlsb2FkCistLSBwcm9wYWdhdGluZyBOYU5zCitzY2J4ODYxIHNjYWxlYiAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQorc2NieDg2MiBzY2FsZWIgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjIKK3NjYng4NjMgc2NhbGViICBOYU4wMyAgICAxMDAwICAgIC0+ICBOYU4zCitzY2J4ODY0IHNjYWxlYiAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONAorc2NieDg2NSBzY2FsZWIgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUKK3NjYng4NjYgc2NhbGViIC1JbmYgICAgIC1OYU43MSAgIC0+IC1OYU43MQorc2NieDg2NyBzY2FsZWIgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxCitzY2J4ODY4IHNjYWxlYiAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTEKK3NjYng4Njkgc2NhbGViICBJbmYgICAgICBOYU4xMDEgIC0+ICBOYU4xMDEKK3NjYng4NzEgc2NhbGViICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4NzIgc2NhbGViICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4NzMgc2NhbGViIC1zTmFOMDEzICAgMTAwMCAgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4NzQgc2NhbGViICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4NzUgc2NhbGViICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4NzYgc2NhbGViICBOYU4wMTYgICBzTmFOMTkxIC0+ICBOYU4xOTEgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4Nzcgc2NhbGViIC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4Nzggc2NhbGViIC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4Nzkgc2NhbGViICAxMDAwICAgIC1zTmFOMjIxIC0+IC1OYU4yMjEgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4ODAgc2NhbGViICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24KK3NjYng4ODEgc2NhbGViICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZmluaXRlcworc2NieDA1MSBzY2FsZWIgICAgICAgICAgNyAgIC0yICAtPiAwLjA3CitzY2J4MDUyIHNjYWxlYiAgICAgICAgIC03ICAgLTIgIC0+IC0wLjA3CitzY2J4MDUzIHNjYWxlYiAgICAgICAgIDc1ICAgLTIgIC0+IDAuNzUKK3NjYngwNTQgc2NhbGViICAgICAgICAtNzUgICAtMiAgLT4gLTAuNzUKK3NjYngwNTUgc2NhbGViICAgICAgIDcuNTAgICAtMiAgLT4gMC4wNzUwCitzY2J4MDU2IHNjYWxlYiAgICAgIC03LjUwICAgLTIgIC0+IC0wLjA3NTAKK3NjYngwNTcgc2NhbGViICAgICAgIDcuNTAwICAtMiAgLT4gMC4wNzUwMAorc2NieDA1OCBzY2FsZWIgICAgICAtNy41MDAgIC0yICAtPiAtMC4wNzUwMAorc2NieDA2MSBzY2FsZWIgICAgICAgICAgNyAgIC0xICAtPiAwLjcKK3NjYngwNjIgc2NhbGViICAgICAgICAgLTcgICAtMSAgLT4gLTAuNworc2NieDA2MyBzY2FsZWIgICAgICAgICA3NSAgIC0xICAtPiA3LjUKK3NjYngwNjQgc2NhbGViICAgICAgICAtNzUgICAtMSAgLT4gLTcuNQorc2NieDA2NSBzY2FsZWIgICAgICAgNy41MCAgIC0xICAtPiAwLjc1MAorc2NieDA2NiBzY2FsZWIgICAgICAtNy41MCAgIC0xICAtPiAtMC43NTAKK3NjYngwNjcgc2NhbGViICAgICAgIDcuNTAwICAtMSAgLT4gMC43NTAwCitzY2J4MDY4IHNjYWxlYiAgICAgIC03LjUwMCAgLTEgIC0+IC0wLjc1MDAKK3NjYngwNzEgc2NhbGViICAgICAgICAgIDcgICAgMCAgLT4gNworc2NieDA3MiBzY2FsZWIgICAgICAgICAtNyAgICAwICAtPiAtNworc2NieDA3MyBzY2FsZWIgICAgICAgICA3NSAgICAwICAtPiA3NQorc2NieDA3NCBzY2FsZWIgICAgICAgIC03NSAgICAwICAtPiAtNzUKK3NjYngwNzUgc2NhbGViICAgICAgIDcuNTAgICAgMCAgLT4gNy41MAorc2NieDA3NiBzY2FsZWIgICAgICAtNy41MCAgICAwICAtPiAtNy41MAorc2NieDA3NyBzY2FsZWIgICAgICAgNy41MDAgICAwICAtPiA3LjUwMAorc2NieDA3OCBzY2FsZWIgICAgICAtNy41MDAgICAwICAtPiAtNy41MDAKK3NjYngwODEgc2NhbGViICAgICAgICAgIDcgICAgMSAgLT4gN0UrMQorc2NieDA4MiBzY2FsZWIgICAgICAgICAtNyAgICAxICAtPiAtN0UrMQorc2NieDA4MyBzY2FsZWIgICAgICAgICA3NSAgICAxICAtPiA3LjVFKzIKK3NjYngwODQgc2NhbGViICAgICAgICAtNzUgICAgMSAgLT4gLTcuNUUrMgorc2NieDA4NSBzY2FsZWIgICAgICAgNy41MCAgICAxICAtPiA3NS4wCitzY2J4MDg2IHNjYWxlYiAgICAgIC03LjUwICAgIDEgIC0+IC03NS4wCitzY2J4MDg3IHNjYWxlYiAgICAgICA3LjUwMCAgIDEgIC0+IDc1LjAwCitzY2J4MDg4IHNjYWxlYiAgICAgIC03LjUwMCAgIDEgIC0+IC03NS4wMAorc2NieDA5MSBzY2FsZWIgICAgICAgICAgNyAgICAyICAtPiA3RSsyCitzY2J4MDkyIHNjYWxlYiAgICAgICAgIC03ICAgIDIgIC0+IC03RSsyCitzY2J4MDkzIHNjYWxlYiAgICAgICAgIDc1ICAgIDIgIC0+IDcuNUUrMworc2NieDA5NCBzY2FsZWIgICAgICAgIC03NSAgICAyICAtPiAtNy41RSszCitzY2J4MDk1IHNjYWxlYiAgICAgICA3LjUwICAgIDIgIC0+IDc1MAorc2NieDA5NiBzY2FsZWIgICAgICAtNy41MCAgICAyICAtPiAtNzUwCitzY2J4MDk3IHNjYWxlYiAgICAgICA3LjUwMCAgIDIgIC0+IDc1MC4wCitzY2J4MDk4IHNjYWxlYiAgICAgIC03LjUwMCAgIDIgIC0+IC03NTAuMAorCistLSB6ZXJvcworc2NieDExMSBzY2FsZWIgICAgICAgICAgMCAgMSAtPiAwRSsxCitzY2J4MTEyIHNjYWxlYiAgICAgICAgIC0wICAyIC0+IC0wRSsyCitzY2J4MTEzIHNjYWxlYiAgICAgICAwRSs0ICAzIC0+IDBFKzcKK3NjYngxMTQgc2NhbGViICAgICAgLTBFKzQgIDQgLT4gLTBFKzgKK3NjYngxMTUgc2NhbGViICAgICAwLjAwMDAgIDUgLT4gMEUrMQorc2NieDExNiBzY2FsZWIgICAgLTAuMDAwMCAgNiAtPiAtMEUrMgorc2NieDExNyBzY2FsZWIgICAgICAwRS0xNDEgNyAtPiAwRS0xMzQKK3NjYngxMTggc2NhbGViICAgICAtMEUtMTQxIDggLT4gLTBFLTEzMworCistLSBObWF4LCBObWluLCBOdGlueQorc2NieDEzMiBzY2FsZWIgIDkuOTk5OTk5OTlFKzk5OSArOTk5IC0+IEluZmluaXR5ICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorc2NieDEzMyBzY2FsZWIgIDkuOTk5OTk5OTlFKzk5OSAgKzEwIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3NjYngxMzQgc2NhbGViICA5Ljk5OTk5OTk5RSs5OTkgICsxICAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitzY2J4MTM1IHNjYWxlYiAgOS45OTk5OTk5OUUrOTk5ICAgMCAgLT4gOS45OTk5OTk5OUUrOTk5CitzY2J4MTM2IHNjYWxlYiAgOS45OTk5OTk5OUUrOTk5ICAtMSAgLT4gOS45OTk5OTk5OUUrOTk4CitzY2J4MTM3IHNjYWxlYiAgMUUtOTk5ICAgICAgICAgICArMSAgLT4gMUUtOTk4CitzY2J4MTM4IHNjYWxlYiAgMUUtOTk5ICAgICAgICAgICAtMCAgLT4gMUUtOTk5CitzY2J4MTM5IHNjYWxlYiAgMUUtOTk5ICAgICAgICAgICAtMSAgLT4gMUUtMTAwMCAgICAgICAgIFN1Ym5vcm1hbAorc2NieDE0MCBzY2FsZWIgIDEuMDAwMDAwMDBFLTk5OSAgKzEgIC0+IDEuMDAwMDAwMDBFLTk5OAorc2NieDE0MSBzY2FsZWIgIDEuMDAwMDAwMDBFLTk5OSAgIDAgIC0+IDEuMDAwMDAwMDBFLTk5OQorc2NieDE0MiBzY2FsZWIgIDEuMDAwMDAwMDBFLTk5OSAgLTEgIC0+IDEuMDAwMDAwMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorc2NieDE0MyBzY2FsZWIgIDFFLTEwMDcgICAgICAgICAgKzEgIC0+IDFFLTEwMDYgICAgICAgICBTdWJub3JtYWwKK3NjYngxNDQgc2NhbGViICAxRS0xMDA3ICAgICAgICAgIC0wICAtPiAxRS0xMDA3ICAgICAgICAgU3Vibm9ybWFsCitzY2J4MTQ1IHNjYWxlYiAgMUUtMTAwNyAgICAgICAgICAtMSAgLT4gMEUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKKworc2NieDE1MCBzY2FsZWIgIC0xRS0xMDA3ICAgICAgICAgKzEgIC0+IC0xRS0xMDA2ICAgICAgICBTdWJub3JtYWwKK3NjYngxNTEgc2NhbGViICAtMUUtMTAwNyAgICAgICAgIC0wICAtPiAtMUUtMTAwNyAgICAgICAgU3Vibm9ybWFsCitzY2J4MTUyIHNjYWxlYiAgLTFFLTEwMDcgICAgICAgICAtMSAgLT4gLTBFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3NjYngxNTMgc2NhbGViICAtMS4wMDAwMDAwMEUtOTk5ICsxICAtPiAtMS4wMDAwMDAwMEUtOTk4CitzY2J4MTU0IHNjYWxlYiAgLTEuMDAwMDAwMDBFLTk5OSArMCAgLT4gLTEuMDAwMDAwMDBFLTk5OQorc2NieDE1NSBzY2FsZWIgIC0xLjAwMDAwMDAwRS05OTkgLTEgIC0+IC0xLjAwMDAwMDBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQKK3NjYngxNTYgc2NhbGViICAtMUUtOTk5ICAgICAgICAgICsxICAtPiAtMUUtOTk4CitzY2J4MTU3IHNjYWxlYiAgLTFFLTk5OSAgICAgICAgICAtMCAgLT4gLTFFLTk5OQorc2NieDE1OCBzY2FsZWIgIC0xRS05OTkgICAgICAgICAgLTEgIC0+IC0xRS0xMDAwICAgICAgICAgU3Vibm9ybWFsCitzY2J4MTU5IHNjYWxlYiAgLTkuOTk5OTk5OTlFKzk5OSArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3NjYngxNjAgc2NhbGViICAtOS45OTk5OTk5OUUrOTk5ICswICAtPiAtOS45OTk5OTk5OUUrOTk5CitzY2J4MTYxIHNjYWxlYiAgLTkuOTk5OTk5OTlFKzk5OSAtMSAgLT4gLTkuOTk5OTk5OTlFKzk5OAorc2NieDE2MiBzY2FsZWIgIC05RSs5OTkgICAgICAgICAgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitzY2J4MTYzIHNjYWxlYiAgLTFFKzk5OSAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKKworLS0gS3JhaCBleGFtcGxlcworcHJlY2lzaW9uOiAgIDM0CittYXhFeHBvbmVudDogOTk5OTk5OTk5CittaW5FeHBvbmVudDogLTk5OTk5OTk5OQorLS0gaW50ZWdlciBvdmVyZmxvdyBpbiAzLjYxIG9yIGVhcmxpZXIKK3NjYngxNjQgc2NhbGViICAxRS05OTk5OTk5OTkgIC0xMjAwMDAwMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIG91dCBvZiByYW5nZQorc2NieDE2NSBzY2FsZWIgIC0xRS05OTk5OTk5OTkgICsxMjAwMDAwMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvc2hpZnQuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvc2hpZnQuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODgzOGNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zaGlmdC5kZWNUZXN0CkBAIC0wLDAgKzEsMjUwIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHNoaWZ0LmRlY1Rlc3QgLS0gc2hpZnQgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworLS0gU2FuaXR5IGNoZWNrCitzaGl4MDAxIHNoaWZ0ICAgICAgICAgIDAgICAgMCAgLT4gIDAKK3NoaXgwMDIgc2hpZnQgICAgICAgICAgMCAgICAyICAtPiAgMAorc2hpeDAwMyBzaGlmdCAgICAgICAgICAxICAgIDIgIC0+ICAxMDAKK3NoaXgwMDQgc2hpZnQgICAgICAgICAgMSAgICA4ICAtPiAgMTAwMDAwMDAwCitzaGl4MDA1IHNoaWZ0ICAgICAgICAgIDEgICAgOSAgLT4gIDAKK3NoaXgwMDYgc2hpZnQgICAgICAgICAgMSAgIC0xICAtPiAgMAorc2hpeDAwNyBzaGlmdCAgMTIzNDU2Nzg5ICAgLTEgIC0+ICAxMjM0NTY3OAorc2hpeDAwOCBzaGlmdCAgMTIzNDU2Nzg5ICAgLTggIC0+ICAxCitzaGl4MDA5IHNoaWZ0ICAxMjM0NTY3ODkgICAtOSAgLT4gIDAKK3NoaXgwMTAgc2hpZnQgICAgICAgICAgMCAgIC0yICAtPiAgMAorCistLSByaHMgbXVzdCBiZSBhbiBpbnRlZ2VyCitzaGl4MDExIHNoaWZ0ICAgICAgICAxICAgIDEuNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXgwMTIgc2hpZnQgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDAxMyBzaGlmdCAgICAgICAgMSAgICAwLjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4MDE0IHNoaWZ0ICAgICAgICAxICAgIDAuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXgwMTUgc2hpZnQgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDAxNiBzaGlmdCAgICAgICAgMSAgICAxRSs5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4MDE3IHNoaWZ0ICAgICAgICAxICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXgwMTggc2hpZnQgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbgorc2hpeDAyMCBzaGlmdCAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4MDIxIHNoaWZ0ICAgICAgICAxICAgIC0xMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXgwMjIgc2hpZnQgICAgICAgIDEgICAgIDEwICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDAyMyBzaGlmdCAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGZ1bGwgc2hpZnRpbmcgcGF0dGVybgorc2hpeDAzMCBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC05ICAgLT4gMAorc2hpeDAzMSBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC04ICAgLT4gMQorc2hpeDAzMiBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC03ICAgLT4gMTIKK3NoaXgwMzMgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtNiAgIC0+IDEyMworc2hpeDAzNCBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC01ICAgLT4gMTIzNAorc2hpeDAzNSBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC00ICAgLT4gMTIzNDUKK3NoaXgwMzYgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtMyAgIC0+IDEyMzQ1Ngorc2hpeDAzNyBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC0yICAgLT4gMTIzNDU2Nworc2hpeDAzOCBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC0xICAgLT4gMTIzNDU2NzgKK3NoaXgwMzkgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtMCAgIC0+IDEyMzQ1Njc4OQorc2hpeDA0MCBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICswICAgLT4gMTIzNDU2Nzg5CitzaGl4MDQxIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTAKK3NoaXgwNDIgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArMiAgIC0+IDM0NTY3ODkwMAorc2hpeDA0MyBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICszICAgLT4gNDU2Nzg5MDAwCitzaGl4MDQ0IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzQgICAtPiA1Njc4OTAwMDAKK3NoaXgwNDUgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArNSAgIC0+IDY3ODkwMDAwMAorc2hpeDA0NiBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs2ICAgLT4gNzg5MDAwMDAwCitzaGl4MDQ3IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzcgICAtPiA4OTAwMDAwMDAKK3NoaXgwNDggc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArOCAgIC0+IDkwMDAwMDAwMAorc2hpeDA0OSBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs5ICAgLT4gMAorCistLSBmcm9tIGV4YW1wbGVzCitzaGl4MDUxIHNoaWZ0IDM0ICAgICAgICA4ICAgLT4gICc0MDAwMDAwMDAnCitzaGl4MDUyIHNoaWZ0IDEyICAgICAgICA5ICAgLT4gICcwJworc2hpeDA1MyBzaGlmdCAxMjM0NTY3ODkgLTIgIC0+ICAnMTIzNDU2NycKK3NoaXgwNTQgc2hpZnQgMTIzNDU2Nzg5IDAgICAtPiAgJzEyMzQ1Njc4OScKK3NoaXgwNTUgc2hpZnQgMTIzNDU2Nzg5ICsyICAtPiAgJzM0NTY3ODkwMCcKKworLS0gemVyb3MKK3NoaXgwNjAgc2hpZnQgIDBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUtMTAKK3NoaXgwNjEgc2hpZnQgIDBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUtMTAKK3NoaXgwNjIgc2hpZnQgIDAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAgMC4wMDAKK3NoaXgwNjMgc2hpZnQgIDAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAgMC4wMDAKK3NoaXgwNjQgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUrMTAKK3NoaXgwNjUgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUrMTAKK3NoaXgwNjYgc2hpZnQgLTBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUtMTAKK3NoaXgwNjcgc2hpZnQgLTBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUtMTAKK3NoaXgwNjggc2hpZnQgLTAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAtMC4wMDAKK3NoaXgwNjkgc2hpZnQgLTAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAtMC4wMDAKK3NoaXgwNzAgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUrMTAKK3NoaXgwNzEgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUrMTAKKworLS0gTm1heCwgTm1pbiwgTnRpbnkKK3NoaXgxNDEgc2hpZnQgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTEgIC0+IDkuOTk5OTk5OUUrOTk4CitzaGl4MTQyIHNoaWZ0ICA5Ljk5OTk5OTk5RSs5OTkgICAgIC04ICAtPiA5RSs5OTEKK3NoaXgxNDMgc2hpZnQgIDkuOTk5OTk5OTlFKzk5OSAgICAgIDEgIC0+IDkuOTk5OTk5OTBFKzk5OQorc2hpeDE0NCBzaGlmdCAgOS45OTk5OTk5OUUrOTk5ICAgICAgOCAgLT4gOS4wMDAwMDAwMEUrOTk5CitzaGl4MTQ1IHNoaWZ0ICAxRS05OTkgICAgICAgICAgICAgIC0xICAtPiAwRS05OTkKK3NoaXgxNDYgc2hpZnQgIDFFLTk5OSAgICAgICAgICAgICAgLTggIC0+IDBFLTk5OQorc2hpeDE0NyBzaGlmdCAgMUUtOTk5ICAgICAgICAgICAgICAgMSAgLT4gMS4wRS05OTgKK3NoaXgxNDggc2hpZnQgIDFFLTk5OSAgICAgICAgICAgICAgIDggIC0+IDEuMDAwMDAwMDBFLTk5MQorc2hpeDE1MSBzaGlmdCAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gMS4wMDAwMDAwRS0xMDAwCitzaGl4MTUyIHNoaWZ0ICAxLjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAxRS0xMDA3CitzaGl4MTUzIHNoaWZ0ICAxLjAwMDAwMDAwRS05OTkgICAgICAxICAtPiAwRS0xMDA3CitzaGl4MTU0IHNoaWZ0ICAxLjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAwRS0xMDA3CitzaGl4MTU1IHNoaWZ0ICA5LjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiA5LjAwMDAwMDBFLTEwMDAKK3NoaXgxNTYgc2hpZnQgIDkuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IDlFLTEwMDcKK3NoaXgxNTcgc2hpZnQgIDkuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IDBFLTEwMDcKK3NoaXgxNTggc2hpZnQgIDkuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IDBFLTEwMDcKK3NoaXgxNjAgc2hpZnQgIDFFLTEwMDcgICAgICAgICAgICAgLTEgIC0+IDBFLTEwMDcKK3NoaXgxNjEgc2hpZnQgIDFFLTEwMDcgICAgICAgICAgICAgLTggIC0+IDBFLTEwMDcKK3NoaXgxNjIgc2hpZnQgIDFFLTEwMDcgICAgICAgICAgICAgIDEgIC0+IDEuMEUtMTAwNgorc2hpeDE2MyBzaGlmdCAgMUUtMTAwNyAgICAgICAgICAgICAgOCAgLT4gMS4wMDAwMDAwMEUtOTk5CistLSAgbmVnYXRpdmVzCitzaGl4MTcxIHNoaWZ0IC05Ljk5OTk5OTk5RSs5OTkgICAgIC0xICAtPiAtOS45OTk5OTk5RSs5OTgKK3NoaXgxNzIgc2hpZnQgLTkuOTk5OTk5OTlFKzk5OSAgICAgLTggIC0+IC05RSs5OTEKK3NoaXgxNzMgc2hpZnQgLTkuOTk5OTk5OTlFKzk5OSAgICAgIDEgIC0+IC05Ljk5OTk5OTkwRSs5OTkKK3NoaXgxNzQgc2hpZnQgLTkuOTk5OTk5OTlFKzk5OSAgICAgIDggIC0+IC05LjAwMDAwMDAwRSs5OTkKK3NoaXgxNzUgc2hpZnQgLTFFLTk5OSAgICAgICAgICAgICAgLTEgIC0+IC0wRS05OTkKK3NoaXgxNzYgc2hpZnQgLTFFLTk5OSAgICAgICAgICAgICAgLTggIC0+IC0wRS05OTkKK3NoaXgxNzcgc2hpZnQgLTFFLTk5OSAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTk5OAorc2hpeDE3OCBzaGlmdCAtMUUtOTk5ICAgICAgICAgICAgICAgOCAgLT4gLTEuMDAwMDAwMDBFLTk5MQorc2hpeDE4MSBzaGlmdCAtMS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gLTEuMDAwMDAwMEUtMTAwMAorc2hpeDE4MiBzaGlmdCAtMS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gLTFFLTEwMDcKK3NoaXgxODMgc2hpZnQgLTEuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IC0wRS0xMDA3CitzaGl4MTg0IHNoaWZ0IC0xLjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAtMEUtMTAwNworc2hpeDE4NSBzaGlmdCAtOS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gLTkuMDAwMDAwMEUtMTAwMAorc2hpeDE4NiBzaGlmdCAtOS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gLTlFLTEwMDcKK3NoaXgxODcgc2hpZnQgLTkuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IC0wRS0xMDA3CitzaGl4MTg4IHNoaWZ0IC05LjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAtMEUtMTAwNworc2hpeDE5MCBzaGlmdCAtMUUtMTAwNyAgICAgICAgICAgICAtMSAgLT4gLTBFLTEwMDcKK3NoaXgxOTEgc2hpZnQgLTFFLTEwMDcgICAgICAgICAgICAgLTggIC0+IC0wRS0xMDA3CitzaGl4MTkyIHNoaWZ0IC0xRS0xMDA3ICAgICAgICAgICAgICAxICAtPiAtMS4wRS0xMDA2CitzaGl4MTkzIHNoaWZ0IC0xRS0xMDA3ICAgICAgICAgICAgICA4ICAtPiAtMS4wMDAwMDAwMEUtOTk5CisKKy0tIG1vcmUgbmVnYXRpdmVzIChvZiBzYW5pdGllcykKK3NoaXgyMDEgc2hpZnQgICAgICAgICAtMCAgICAwICAtPiAgLTAKK3NoaXgyMDIgc2hpZnQgICAgICAgICAtMCAgICAyICAtPiAgLTAKK3NoaXgyMDMgc2hpZnQgICAgICAgICAtMSAgICAyICAtPiAgLTEwMAorc2hpeDIwNCBzaGlmdCAgICAgICAgIC0xICAgIDggIC0+ICAtMTAwMDAwMDAwCitzaGl4MjA1IHNoaWZ0ICAgICAgICAgLTEgICAgOSAgLT4gIC0wCitzaGl4MjA2IHNoaWZ0ICAgICAgICAgLTEgICAtMSAgLT4gIC0wCitzaGl4MjA3IHNoaWZ0IC0xMjM0NTY3ODkgICAtMSAgLT4gIC0xMjM0NTY3OAorc2hpeDIwOCBzaGlmdCAtMTIzNDU2Nzg5ICAgLTggIC0+ICAtMQorc2hpeDIwOSBzaGlmdCAtMTIzNDU2Nzg5ICAgLTkgIC0+ICAtMAorc2hpeDIxMCBzaGlmdCAgICAgICAgIC0wICAgLTIgIC0+ICAtMAorc2hpeDIxMSBzaGlmdCAgICAgICAgIC0wICAgLTAgIC0+ICAtMAorCisKKy0tIFNwZWNpYWxzOyBOYU5zIGFyZSBoYW5kbGVkIGFzIHVzdWFsCitzaGl4NzgxIHNoaWZ0IC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkKK3NoaXg3ODIgc2hpZnQgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorc2hpeDc4MyBzaGlmdCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5CitzaGl4Nzg0IHNoaWZ0IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKK3NoaXg3ODUgc2hpZnQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQorc2hpeDc4NiBzaGlmdCAtSW5mICAgOCAgICAgLT4gLUluZmluaXR5CitzaGl4Nzg3IHNoaWZ0IC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg3ODggc2hpZnQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDc4OSBzaGlmdCAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4NzkwIHNoaWZ0IC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg3OTEgc2hpZnQgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDc5MiBzaGlmdCAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4NzkzIHNoaWZ0ICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg3OTQgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitzaGl4ODAwIHNoaWZ0ICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4MDEgc2hpZnQgIEluZiAgLTggICAgIC0+IEluZmluaXR5CitzaGl4ODAyIHNoaWZ0ICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQorc2hpeDgwMyBzaGlmdCAgSW5mICAtMCAgICAgLT4gSW5maW5pdHkKK3NoaXg4MDQgc2hpZnQgIEluZiAgIDAgICAgIC0+IEluZmluaXR5CitzaGl4ODA1IHNoaWZ0ICBJbmYgICAxICAgICAtPiBJbmZpbml0eQorc2hpeDgwNiBzaGlmdCAgSW5mICAgOCAgICAgLT4gSW5maW5pdHkKK3NoaXg4MDcgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDgwOCBzaGlmdCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODA5IHNoaWZ0IC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4MTAgc2hpZnQgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDgxMSBzaGlmdCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODEyIHNoaWZ0ICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4MTMgc2hpZnQgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDgxNCBzaGlmdCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODE1IHNoaWZ0ICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworc2hpeDgyMSBzaGlmdCAgTmFOIC1JbmYgICAgLT4gIE5hTgorc2hpeDgyMiBzaGlmdCAgTmFOIC0xMDAwICAgLT4gIE5hTgorc2hpeDgyMyBzaGlmdCAgTmFOIC0xICAgICAgLT4gIE5hTgorc2hpeDgyNCBzaGlmdCAgTmFOIC0wICAgICAgLT4gIE5hTgorc2hpeDgyNSBzaGlmdCAgTmFOICAwICAgICAgLT4gIE5hTgorc2hpeDgyNiBzaGlmdCAgTmFOICAxICAgICAgLT4gIE5hTgorc2hpeDgyNyBzaGlmdCAgTmFOICAxMDAwICAgLT4gIE5hTgorc2hpeDgyOCBzaGlmdCAgTmFOICBJbmYgICAgLT4gIE5hTgorc2hpeDgyOSBzaGlmdCAgTmFOICBOYU4gICAgLT4gIE5hTgorc2hpeDgzMCBzaGlmdCAtSW5mICBOYU4gICAgLT4gIE5hTgorc2hpeDgzMSBzaGlmdCAtMTAwMCBOYU4gICAgLT4gIE5hTgorc2hpeDgzMiBzaGlmdCAtMSAgICBOYU4gICAgLT4gIE5hTgorc2hpeDgzMyBzaGlmdCAtMCAgICBOYU4gICAgLT4gIE5hTgorc2hpeDgzNCBzaGlmdCAgMCAgICBOYU4gICAgLT4gIE5hTgorc2hpeDgzNSBzaGlmdCAgMSAgICBOYU4gICAgLT4gIE5hTgorc2hpeDgzNiBzaGlmdCAgMTAwMCBOYU4gICAgLT4gIE5hTgorc2hpeDgzNyBzaGlmdCAgSW5mICBOYU4gICAgLT4gIE5hTgorCitzaGl4ODQxIHNoaWZ0ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg0MiBzaGlmdCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NDMgc2hpZnQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODQ0IHNoaWZ0ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg0NSBzaGlmdCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NDYgc2hpZnQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODQ3IHNoaWZ0ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg0OCBzaGlmdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NDkgc2hpZnQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODUwIHNoaWZ0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg1MSBzaGlmdCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NTIgc2hpZnQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODUzIHNoaWZ0IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg1NCBzaGlmdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NTUgc2hpZnQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODU2IHNoaWZ0ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg1NyBzaGlmdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3NoaXg4NTggc2hpZnQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODU5IHNoaWZ0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitzaGl4ODYxIHNoaWZ0ICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQorc2hpeDg2MiBzaGlmdCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKK3NoaXg4NjMgc2hpZnQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCitzaGl4ODY0IHNoaWZ0ICBOYU40ICAgIEluZiAgICAtPiAgTmFONAorc2hpeDg2NSBzaGlmdCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKK3NoaXg4NjYgc2hpZnQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43CitzaGl4ODY3IHNoaWZ0IC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAorc2hpeDg2OCBzaGlmdCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKK3NoaXg4Njkgc2hpZnQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAorc2hpeDg3MSBzaGlmdCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg3MiBzaGlmdCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg3MyBzaGlmdCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg3NCBzaGlmdCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg3NSBzaGlmdCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg3NiBzaGlmdCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg3NyBzaGlmdCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg3OCBzaGlmdCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg3OSBzaGlmdCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg4MCBzaGlmdCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg4MSBzaGlmdCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgorc2hpeDg4MiBzaGlmdCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2CitzaGl4ODgzIHNoaWZ0IC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCitzaGl4ODg0IHNoaWZ0ICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKK3NoaXg4ODUgc2hpZnQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvc3F1YXJlcm9vdC5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zcXVhcmVyb290LmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwZTUxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvc3F1YXJlcm9vdC5kZWNUZXN0CkBAIC0wLDAgKzEsMzgzNCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBzcXVhcmVyb290LmRlY1Rlc3QgLS0gZGVjaW1hbCBzcXVhcmUgcm9vdCAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAzLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2ZXJzaW9uOiAyLjU5CisKK2V4dGVuZGVkOiAgICAxCitwcmVjaXNpb246ICAgOQorcm91bmRpbmc6ICAgIGhhbGZfdXAKK21heEV4cG9uZW50OiAzODQKK21pbmV4cG9uZW50OiAtMzgzCisKKy0tIGJhc2ljcworc3F0eDAwMSBzcXVhcmVyb290IDEgICAgICAgLT4gMQorc3F0eDAwMiBzcXVhcmVyb290IC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzcXR4MDAzIHNxdWFyZXJvb3QgMS4wMCAgICAtPiAxLjAKK3NxdHgwMDQgc3F1YXJlcm9vdCAtMS4wMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDAwNSBzcXVhcmVyb290IDAgICAgICAgLT4gMAorc3F0eDAwNiBzcXVhcmVyb290IDAwLjAgICAgLT4gMC4wCitzcXR4MDA3IHNxdWFyZXJvb3QgMC4wMCAgICAtPiAwLjAKK3NxdHgwMDggc3F1YXJlcm9vdCAwMC4wMCAgIC0+IDAuMAorc3F0eDAwOSBzcXVhcmVyb290IDAwLjAwMCAgLT4gMC4wMAorc3F0eDAxMCBzcXVhcmVyb290IDAwLjAwMDAgLT4gMC4wMAorc3F0eDAxMSBzcXVhcmVyb290IDAwICAgICAgLT4gMAorCitzcXR4MDEyIHNxdWFyZXJvb3QgLTIgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NxdHgwMTMgc3F1YXJlcm9vdCAyICAgICAgIC0+IDEuNDE0MjEzNTYgSW5leGFjdCBSb3VuZGVkCitzcXR4MDE0IHNxdWFyZXJvb3QgLTIuMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NxdHgwMTUgc3F1YXJlcm9vdCAyLjAwICAgIC0+IDEuNDE0MjEzNTYgSW5leGFjdCBSb3VuZGVkCitzcXR4MDE2IHNxdWFyZXJvb3QgLTAgICAgICAtPiAtMAorc3F0eDAxNyBzcXVhcmVyb290IC0wLjAgICAgLT4gLTAuMAorc3F0eDAxOCBzcXVhcmVyb290IC0wMC4wMCAgLT4gLTAuMAorc3F0eDAxOSBzcXVhcmVyb290IC0wMC4wMDAgLT4gLTAuMDAKK3NxdHgwMjAgc3F1YXJlcm9vdCAtMC4wMDAwIC0+IC0wLjAwCitzcXR4MDIxIHNxdWFyZXJvb3QgLTBFKzkgICAtPiAtMEUrNAorc3F0eDAyMiBzcXVhcmVyb290IC0wRSsxMCAgLT4gLTBFKzUKK3NxdHgwMjMgc3F1YXJlcm9vdCAtMEUrMTEgIC0+IC0wRSs1CitzcXR4MDI0IHNxdWFyZXJvb3QgLTBFKzEyICAtPiAtMEUrNgorc3F0eDAyNSBzcXVhcmVyb290IC0wMCAgICAgLT4gLTAKK3NxdHgwMjYgc3F1YXJlcm9vdCAwRSs1ICAgIC0+IDBFKzIKK3NxdHgwMjcgc3F1YXJlcm9vdCA0LjAgICAgIC0+IDIuMAorc3F0eDAyOCBzcXVhcmVyb290IDQuMDAgICAgLT4gMi4wCisKK3NxdHgwMzAgc3F1YXJlcm9vdCArMC4xICAgICAgICAgICAgLT4gMC4zMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkCitzcXR4MDMxIHNxdWFyZXJvb3QgLTAuMSAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDAzMiBzcXVhcmVyb290ICswLjAxICAgICAgICAgICAtPiAwLjEKK3NxdHgwMzMgc3F1YXJlcm9vdCAtMC4wMSAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzcXR4MDM0IHNxdWFyZXJvb3QgKzAuMDAxICAgICAgICAgIC0+IDAuMDMxNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQKK3NxdHgwMzUgc3F1YXJlcm9vdCAtMC4wMDEgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzcXR4MDM2IHNxdWFyZXJvb3QgKzAuMDAwMDAxICAgICAgIC0+IDAuMDAxCitzcXR4MDM3IHNxdWFyZXJvb3QgLTAuMDAwMDAxICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDAzOCBzcXVhcmVyb290ICswLjAwMDAwMDAwMDAwMSAtPiAwLjAwMDAwMQorc3F0eDAzOSBzcXVhcmVyb290IC0wLjAwMDAwMDAwMDAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworc3F0eDA0MSBzcXVhcmVyb290IDEuMSAgICAgICAgLT4gMS4wNDg4MDg4NSBJbmV4YWN0IFJvdW5kZWQKK3NxdHgwNDIgc3F1YXJlcm9vdCAxLjEwICAgICAgIC0+IDEuMDQ4ODA4ODUgSW5leGFjdCBSb3VuZGVkCitzcXR4MDQzIHNxdWFyZXJvb3QgMS4xMDAgICAgICAtPiAxLjA0ODgwODg1IEluZXhhY3QgUm91bmRlZAorc3F0eDA0NCBzcXVhcmVyb290IDEuMTEwICAgICAgLT4gMS4wNTM1NjUzOCBJbmV4YWN0IFJvdW5kZWQKK3NxdHgwNDUgc3F1YXJlcm9vdCAtMS4xICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDA0NiBzcXVhcmVyb290IC0xLjEwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzcXR4MDQ3IHNxdWFyZXJvb3QgLTEuMTAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NxdHgwNDggc3F1YXJlcm9vdCAtMS4xMTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDA0OSBzcXVhcmVyb290IDkuOSAgICAgICAgLT4gMy4xNDY0MjY1NCBJbmV4YWN0IFJvdW5kZWQKK3NxdHgwNTAgc3F1YXJlcm9vdCA5LjkwICAgICAgIC0+IDMuMTQ2NDI2NTQgSW5leGFjdCBSb3VuZGVkCitzcXR4MDUxIHNxdWFyZXJvb3QgOS45MDAgICAgICAtPiAzLjE0NjQyNjU0IEluZXhhY3QgUm91bmRlZAorc3F0eDA1MiBzcXVhcmVyb290IDkuOTkwICAgICAgLT4gMy4xNjA2OTYxMyBJbmV4YWN0IFJvdW5kZWQKK3NxdHgwNTMgc3F1YXJlcm9vdCAtOS45ICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDA1NCBzcXVhcmVyb290IC05LjkwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzcXR4MDU1IHNxdWFyZXJvb3QgLTkuOTAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NxdHgwNTYgc3F1YXJlcm9vdCAtOS45OTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCitzcXR4MDYwIHNxdWFyZXJvb3QgIDEgICAgICAgICAgIC0+IDEKK3NxdHgwNjEgc3F1YXJlcm9vdCAgMS4wICAgICAgICAgLT4gMS4wCitzcXR4MDYyIHNxdWFyZXJvb3QgIDEuMDAgICAgICAgIC0+IDEuMAorc3F0eDA2MyBzcXVhcmVyb290ICAxMC4wICAgICAgICAtPiAzLjE2MjI3NzY2IEluZXhhY3QgUm91bmRlZAorc3F0eDA2NCBzcXVhcmVyb290ICAxMC4wICAgICAgICAtPiAzLjE2MjI3NzY2IEluZXhhY3QgUm91bmRlZAorc3F0eDA2NSBzcXVhcmVyb290ICAxMC4wICAgICAgICAtPiAzLjE2MjI3NzY2IEluZXhhY3QgUm91bmRlZAorc3F0eDA2NiBzcXVhcmVyb290ICAxMC4wMCAgICAgICAtPiAzLjE2MjI3NzY2IEluZXhhY3QgUm91bmRlZAorc3F0eDA2NyBzcXVhcmVyb290ICAxMDAgICAgICAgICAtPiAxMAorc3F0eDA2OCBzcXVhcmVyb290ICAxMDAuMCAgICAgICAtPiAxMC4wCitzcXR4MDY5IHNxdWFyZXJvb3QgIDEwMC4wMCAgICAgIC0+IDEwLjAKK3NxdHgwNzAgc3F1YXJlcm9vdCAgMS4xMDAwRSszICAgLT4gMzMuMTY2MjQ3OSBJbmV4YWN0IFJvdW5kZWQKK3NxdHgwNzEgc3F1YXJlcm9vdCAgMS4xMDAwMEUrMyAgLT4gMzMuMTY2MjQ3OSBJbmV4YWN0IFJvdW5kZWQKK3NxdHgwNzIgc3F1YXJlcm9vdCAtMTAuMCAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzcXR4MDczIHNxdWFyZXJvb3QgLTEwLjAwICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDA3NCBzcXVhcmVyb290IC0xMDAuMCAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NxdHgwNzUgc3F1YXJlcm9vdCAtMTAwLjAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCitzcXR4MDc2IHNxdWFyZXJvb3QgLTEuMTAwMEUrMyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDA3NyBzcXVhcmVyb290IC0xLjEwMDAwRSszICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NxdHgwNzggc3F1YXJlcm9vdCAgMS4wMDAgICAgICAgLT4gMS4wMAorc3F0eDA3OSBzcXVhcmVyb290ICAxLjAwMDAgICAgICAtPiAxLjAwCisKKy0tIGZhbW91cyBzcXVhcmVzCitzcXR4MDgwIHNxdWFyZXJvb3QgICAgIDEgIC0+IDEKK3NxdHgwODEgc3F1YXJlcm9vdCAgICAgNCAgLT4gMgorc3F0eDA4MiBzcXVhcmVyb290ICAgICA5ICAtPiAzCitzcXR4MDgzIHNxdWFyZXJvb3QgICAgMTYgIC0+IDQKK3NxdHgwODQgc3F1YXJlcm9vdCAgICAyNSAgLT4gNQorc3F0eDA4NSBzcXVhcmVyb290ICAgIDM2ICAtPiA2CitzcXR4MDg2IHNxdWFyZXJvb3QgICAgNDkgIC0+IDcKK3NxdHgwODcgc3F1YXJlcm9vdCAgICA2NCAgLT4gOAorc3F0eDA4OCBzcXVhcmVyb290ICAgIDgxICAtPiA5CitzcXR4MDg5IHNxdWFyZXJvb3QgICAxMDAgIC0+IDEwCitzcXR4MDkwIHNxdWFyZXJvb3QgICAxMjEgIC0+IDExCitzcXR4MDkxIHNxdWFyZXJvb3QgICAxNDQgIC0+IDEyCitzcXR4MDkyIHNxdWFyZXJvb3QgICAxNjkgIC0+IDEzCitzcXR4MDkzIHNxdWFyZXJvb3QgICAyNTYgIC0+IDE2CitzcXR4MDk0IHNxdWFyZXJvb3QgIDEwMjQgIC0+IDMyCitzcXR4MDk1IHNxdWFyZXJvb3QgIDQwOTYgIC0+IDY0CitzcXR4MTAwIHNxdWFyZXJvb3QgICAwLjAxIC0+IDAuMQorc3F0eDEwMSBzcXVhcmVyb290ICAgMC4wNCAtPiAwLjIKK3NxdHgxMDIgc3F1YXJlcm9vdCAgIDAuMDkgLT4gMC4zCitzcXR4MTAzIHNxdWFyZXJvb3QgICAwLjE2IC0+IDAuNAorc3F0eDEwNCBzcXVhcmVyb290ICAgMC4yNSAtPiAwLjUKK3NxdHgxMDUgc3F1YXJlcm9vdCAgIDAuMzYgLT4gMC42CitzcXR4MTA2IHNxdWFyZXJvb3QgICAwLjQ5IC0+IDAuNworc3F0eDEwNyBzcXVhcmVyb290ICAgMC42NCAtPiAwLjgKK3NxdHgxMDggc3F1YXJlcm9vdCAgIDAuODEgLT4gMC45CitzcXR4MTA5IHNxdWFyZXJvb3QgICAxLjAwIC0+IDEuMAorc3F0eDExMCBzcXVhcmVyb290ICAgMS4yMSAtPiAxLjEKK3NxdHgxMTEgc3F1YXJlcm9vdCAgIDEuNDQgLT4gMS4yCitzcXR4MTEyIHNxdWFyZXJvb3QgICAxLjY5IC0+IDEuMworc3F0eDExMyBzcXVhcmVyb290ICAgMi41NiAtPiAxLjYKK3NxdHgxMTQgc3F1YXJlcm9vdCAgMTAuMjQgLT4gMy4yCitzcXR4MTE1IHNxdWFyZXJvb3QgIDQwLjk2IC0+IDYuNAorCistLSBQcmVjaXNpb24gMSBzcXVhcmVyb290IHRlc3RzIFtleGhhdXN0aXZlLCBwbHVzIGV4cG9uZW50IGFkanVzdHNdCityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiAgIDEKK3NxdHgxMjAxIHNxdWFyZXJvb3QgMC4xIC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTIwMiBzcXVhcmVyb290IDAuMDEgLT4gMC4xCitzcXR4MTIwMyBzcXVhcmVyb290IDEuMEUtMSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMDQgc3F1YXJlcm9vdCAxLjAwRS0yIC0+IDAuMSAgUm91bmRlZAorc3F0eDEyMDUgc3F1YXJlcm9vdCAxRS0zIC0+IDAuMDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMDYgc3F1YXJlcm9vdCAxRSsxIC0+IDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMDcgc3F1YXJlcm9vdCAxRSsyIC0+IDFFKzEKK3NxdHgxMjA4IHNxdWFyZXJvb3QgMUUrMyAtPiAzRSsxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjA5IHNxdWFyZXJvb3QgMC4yIC0+IDAuNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTIxMCBzcXVhcmVyb290IDAuMDIgLT4gMC4xICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjExIHNxdWFyZXJvb3QgMi4wRS0xIC0+IDAuNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTIxMiBzcXVhcmVyb290IDIuMDBFLTIgLT4gMC4xICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjEzIHNxdWFyZXJvb3QgMkUtMyAtPiAwLjA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjE0IHNxdWFyZXJvb3QgMkUrMSAtPiA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjE1IHNxdWFyZXJvb3QgMkUrMiAtPiAxRSsxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjE2IHNxdWFyZXJvb3QgMkUrMyAtPiA0RSsxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjE3IHNxdWFyZXJvb3QgMC4zIC0+IDAuNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTIxOCBzcXVhcmVyb290IDAuMDMgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjE5IHNxdWFyZXJvb3QgMy4wRS0xIC0+IDAuNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTIyMCBzcXVhcmVyb290IDMuMDBFLTIgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjIxIHNxdWFyZXJvb3QgM0UtMyAtPiAwLjA1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjIyIHNxdWFyZXJvb3QgM0UrMSAtPiA1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjIzIHNxdWFyZXJvb3QgM0UrMiAtPiAyRSsxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjI0IHNxdWFyZXJvb3QgM0UrMyAtPiA1RSsxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjI1IHNxdWFyZXJvb3QgMC40IC0+IDAuNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTIyNiBzcXVhcmVyb290IDAuMDQgLT4gMC4yCitzcXR4MTIyNyBzcXVhcmVyb290IDQuMEUtMSAtPiAwLjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMjggc3F1YXJlcm9vdCA0LjAwRS0yIC0+IDAuMiAgUm91bmRlZAorc3F0eDEyMjkgc3F1YXJlcm9vdCA0RS0zIC0+IDAuMDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMzAgc3F1YXJlcm9vdCA0RSsxIC0+IDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyMzEgc3F1YXJlcm9vdCA0RSsyIC0+IDJFKzEKK3NxdHgxMjMyIHNxdWFyZXJvb3QgNEUrMyAtPiA2RSsxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjMzIHNxdWFyZXJvb3QgMC41IC0+IDAuNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTIzNCBzcXVhcmVyb290IDAuMDUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjM1IHNxdWFyZXJvb3QgNS4wRS0xIC0+IDAuNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTIzNiBzcXVhcmVyb290IDUuMDBFLTIgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjM3IHNxdWFyZXJvb3QgNUUtMyAtPiAwLjA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjM4IHNxdWFyZXJvb3QgNUUrMSAtPiA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjM5IHNxdWFyZXJvb3QgNUUrMiAtPiAyRSsxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjQwIHNxdWFyZXJvb3QgNUUrMyAtPiA3RSsxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjQxIHNxdWFyZXJvb3QgMC42IC0+IDAuOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTI0MiBzcXVhcmVyb290IDAuMDYgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjQzIHNxdWFyZXJvb3QgNi4wRS0xIC0+IDAuOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTI0NCBzcXVhcmVyb290IDYuMDBFLTIgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjQ1IHNxdWFyZXJvb3QgNkUtMyAtPiAwLjA4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjQ2IHNxdWFyZXJvb3QgNkUrMSAtPiA4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjQ3IHNxdWFyZXJvb3QgNkUrMiAtPiAyRSsxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjQ4IHNxdWFyZXJvb3QgNkUrMyAtPiA4RSsxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjQ5IHNxdWFyZXJvb3QgMC43IC0+IDAuOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTI1MCBzcXVhcmVyb290IDAuMDcgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjUxIHNxdWFyZXJvb3QgNy4wRS0xIC0+IDAuOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTI1MiBzcXVhcmVyb290IDcuMDBFLTIgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjUzIHNxdWFyZXJvb3QgN0UtMyAtPiAwLjA4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjU0IHNxdWFyZXJvb3QgN0UrMSAtPiA4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjU1IHNxdWFyZXJvb3QgN0UrMiAtPiAzRSsxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjU2IHNxdWFyZXJvb3QgN0UrMyAtPiA4RSsxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjU3IHNxdWFyZXJvb3QgMC44IC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTI1OCBzcXVhcmVyb290IDAuMDggLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjU5IHNxdWFyZXJvb3QgOC4wRS0xIC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTI2MCBzcXVhcmVyb290IDguMDBFLTIgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjYxIHNxdWFyZXJvb3QgOEUtMyAtPiAwLjA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjYyIHNxdWFyZXJvb3QgOEUrMSAtPiA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjYzIHNxdWFyZXJvb3QgOEUrMiAtPiAzRSsxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjY0IHNxdWFyZXJvb3QgOEUrMyAtPiA5RSsxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgxMjY1IHNxdWFyZXJvb3QgMC45IC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MTI2NiBzcXVhcmVyb290IDAuMDkgLT4gMC4zCitzcXR4MTI2NyBzcXVhcmVyb290IDkuMEUtMSAtPiAwLjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNjggc3F1YXJlcm9vdCA5LjAwRS0yIC0+IDAuMyAgUm91bmRlZAorc3F0eDEyNjkgc3F1YXJlcm9vdCA5RS0zIC0+IDAuMDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNzAgc3F1YXJlcm9vdCA5RSsxIC0+IDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDEyNzEgc3F1YXJlcm9vdCA5RSsyIC0+IDNFKzEKK3NxdHgxMjcyIHNxdWFyZXJvb3QgOUUrMyAtPiA5RSsxICBJbmV4YWN0IFJvdW5kZWQKKworLS0gUHJlY2lzaW9uIDIgc3F1YXJlcm9vdCB0ZXN0cyBbZXhoYXVzdGl2ZSwgcGx1cyBleHBvbmVudCBhZGp1c3RzXQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogICAyCitzcXR4MjIwMSBzcXVhcmVyb290IDAuMSAtPiAwLjMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjAyIHNxdWFyZXJvb3QgMC4wMSAtPiAwLjEKK3NxdHgyMjAzIHNxdWFyZXJvb3QgMS4wRS0xIC0+IDAuMzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMDQgc3F1YXJlcm9vdCAxLjAwRS0yIC0+IDAuMTAKK3NxdHgyMjA1IHNxdWFyZXJvb3QgMUUtMyAtPiAwLjAzMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIwNiBzcXVhcmVyb290IDFFKzEgLT4gMy4yICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjA3IHNxdWFyZXJvb3QgMUUrMiAtPiAxRSsxCitzcXR4MjIwOCBzcXVhcmVyb290IDFFKzMgLT4gMzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMDkgc3F1YXJlcm9vdCAwLjIgLT4gMC40NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIxMCBzcXVhcmVyb290IDAuMDIgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIxMSBzcXVhcmVyb290IDIuMEUtMSAtPiAwLjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjEyIHNxdWFyZXJvb3QgMi4wMEUtMiAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjEzIHNxdWFyZXJvb3QgMkUtMyAtPiAwLjA0NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIxNCBzcXVhcmVyb290IDJFKzEgLT4gNC41ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjE1IHNxdWFyZXJvb3QgMkUrMiAtPiAxNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIxNiBzcXVhcmVyb290IDJFKzMgLT4gNDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMTcgc3F1YXJlcm9vdCAwLjMgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIxOCBzcXVhcmVyb290IDAuMDMgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIxOSBzcXVhcmVyb290IDMuMEUtMSAtPiAwLjU1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjIwIHNxdWFyZXJvb3QgMy4wMEUtMiAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjIxIHNxdWFyZXJvb3QgM0UtMyAtPiAwLjA1NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIyMiBzcXVhcmVyb290IDNFKzEgLT4gNS41ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjIzIHNxdWFyZXJvb3QgM0UrMiAtPiAxNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIyNCBzcXVhcmVyb290IDNFKzMgLT4gNTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMjUgc3F1YXJlcm9vdCAwLjQgLT4gMC42MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIyNiBzcXVhcmVyb290IDAuMDQgLT4gMC4yCitzcXR4MjIyNyBzcXVhcmVyb290IDQuMEUtMSAtPiAwLjYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjI4IHNxdWFyZXJvb3QgNC4wMEUtMiAtPiAwLjIwCitzcXR4MjIyOSBzcXVhcmVyb290IDRFLTMgLT4gMC4wNjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMzAgc3F1YXJlcm9vdCA0RSsxIC0+IDYuMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIzMSBzcXVhcmVyb290IDRFKzIgLT4gMkUrMQorc3F0eDIyMzIgc3F1YXJlcm9vdCA0RSszIC0+IDYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjMzIHNxdWFyZXJvb3QgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMzQgc3F1YXJlcm9vdCAwLjA1IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMzUgc3F1YXJlcm9vdCA1LjBFLTEgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIzNiBzcXVhcmVyb290IDUuMDBFLTIgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIzNyBzcXVhcmVyb290IDVFLTMgLT4gMC4wNzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyMzggc3F1YXJlcm9vdCA1RSsxIC0+IDcuMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjIzOSBzcXVhcmVyb290IDVFKzIgLT4gMjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNDAgc3F1YXJlcm9vdCA1RSszIC0+IDcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjQxIHNxdWFyZXJvb3QgMC42IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNDIgc3F1YXJlcm9vdCAwLjA2IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNDMgc3F1YXJlcm9vdCA2LjBFLTEgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI0NCBzcXVhcmVyb290IDYuMDBFLTIgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI0NSBzcXVhcmVyb290IDZFLTMgLT4gMC4wNzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNDYgc3F1YXJlcm9vdCA2RSsxIC0+IDcuNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI0NyBzcXVhcmVyb290IDZFKzIgLT4gMjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNDggc3F1YXJlcm9vdCA2RSszIC0+IDc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjQ5IHNxdWFyZXJvb3QgMC43IC0+IDAuODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNTAgc3F1YXJlcm9vdCAwLjA3IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNTEgc3F1YXJlcm9vdCA3LjBFLTEgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI1MiBzcXVhcmVyb290IDcuMDBFLTIgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI1MyBzcXVhcmVyb290IDdFLTMgLT4gMC4wODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNTQgc3F1YXJlcm9vdCA3RSsxIC0+IDguNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI1NSBzcXVhcmVyb290IDdFKzIgLT4gMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNTYgc3F1YXJlcm9vdCA3RSszIC0+IDg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjU3IHNxdWFyZXJvb3QgMC44IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNTggc3F1YXJlcm9vdCAwLjA4IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNTkgc3F1YXJlcm9vdCA4LjBFLTEgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI2MCBzcXVhcmVyb290IDguMDBFLTIgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI2MSBzcXVhcmVyb290IDhFLTMgLT4gMC4wODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNjIgc3F1YXJlcm9vdCA4RSsxIC0+IDguOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI2MyBzcXVhcmVyb290IDhFKzIgLT4gMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNjQgc3F1YXJlcm9vdCA4RSszIC0+IDg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjY1IHNxdWFyZXJvb3QgMC45IC0+IDAuOTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNjYgc3F1YXJlcm9vdCAwLjA5IC0+IDAuMworc3F0eDIyNjcgc3F1YXJlcm9vdCA5LjBFLTEgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI2OCBzcXVhcmVyb290IDkuMDBFLTIgLT4gMC4zMAorc3F0eDIyNjkgc3F1YXJlcm9vdCA5RS0zIC0+IDAuMDk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjcwIHNxdWFyZXJvb3QgOUUrMSAtPiA5LjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyNzEgc3F1YXJlcm9vdCA5RSsyIC0+IDNFKzEKK3NxdHgyMjcyIHNxdWFyZXJvb3QgOUUrMyAtPiA5NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI3MyBzcXVhcmVyb290IDAuMTAgLT4gMC4zMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI3NCBzcXVhcmVyb290IDAuMDEwIC0+IDAuMTAKK3NxdHgyMjc1IHNxdWFyZXJvb3QgMTAuMEUtMSAtPiAxLjAKK3NxdHgyMjc2IHNxdWFyZXJvb3QgMTAuMDBFLTIgLT4gMC4zMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI3NyBzcXVhcmVyb290IDEwRS0zIC0+IDAuMTAKK3NxdHgyMjc4IHNxdWFyZXJvb3QgMTBFKzEgLT4gMTAKK3NxdHgyMjc5IHNxdWFyZXJvb3QgMTBFKzIgLT4gMzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyODAgc3F1YXJlcm9vdCAxMEUrMyAtPiAxLjBFKzIKK3NxdHgyMjgxIHNxdWFyZXJvb3QgMC4xMSAtPiAwLjMzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjgyIHNxdWFyZXJvb3QgMC4wMTEgLT4gMC4xMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI4MyBzcXVhcmVyb290IDExLjBFLTEgLT4gMS4wICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjg0IHNxdWFyZXJvb3QgMTEuMDBFLTIgLT4gMC4zMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI4NSBzcXVhcmVyb290IDExRS0zIC0+IDAuMTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyODYgc3F1YXJlcm9vdCAxMUUrMSAtPiAxMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI4NyBzcXVhcmVyb290IDExRSsyIC0+IDMzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjg4IHNxdWFyZXJvb3QgMTFFKzMgLT4gMS4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjg5IHNxdWFyZXJvb3QgMC4xMiAtPiAwLjM1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjkwIHNxdWFyZXJvb3QgMC4wMTIgLT4gMC4xMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI5MSBzcXVhcmVyb290IDEyLjBFLTEgLT4gMS4xICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjkyIHNxdWFyZXJvb3QgMTIuMDBFLTIgLT4gMC4zNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI5MyBzcXVhcmVyb290IDEyRS0zIC0+IDAuMTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDIyOTQgc3F1YXJlcm9vdCAxMkUrMSAtPiAxMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI5NSBzcXVhcmVyb290IDEyRSsyIC0+IDM1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjk2IHNxdWFyZXJvb3QgMTJFKzMgLT4gMS4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjk3IHNxdWFyZXJvb3QgMC4xMyAtPiAwLjM2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMjk4IHNxdWFyZXJvb3QgMC4wMTMgLT4gMC4xMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjI5OSBzcXVhcmVyb290IDEzLjBFLTEgLT4gMS4xICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzAwIHNxdWFyZXJvb3QgMTMuMDBFLTIgLT4gMC4zNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMwMSBzcXVhcmVyb290IDEzRS0zIC0+IDAuMTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMDIgc3F1YXJlcm9vdCAxM0UrMSAtPiAxMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMwMyBzcXVhcmVyb290IDEzRSsyIC0+IDM2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzA0IHNxdWFyZXJvb3QgMTNFKzMgLT4gMS4xRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzA1IHNxdWFyZXJvb3QgMC4xNCAtPiAwLjM3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzA2IHNxdWFyZXJvb3QgMC4wMTQgLT4gMC4xMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMwNyBzcXVhcmVyb290IDE0LjBFLTEgLT4gMS4yICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzA4IHNxdWFyZXJvb3QgMTQuMDBFLTIgLT4gMC4zNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMwOSBzcXVhcmVyb290IDE0RS0zIC0+IDAuMTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMTAgc3F1YXJlcm9vdCAxNEUrMSAtPiAxMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMxMSBzcXVhcmVyb290IDE0RSsyIC0+IDM3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzEyIHNxdWFyZXJvb3QgMTRFKzMgLT4gMS4yRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzEzIHNxdWFyZXJvb3QgMC4xNSAtPiAwLjM5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzE0IHNxdWFyZXJvb3QgMC4wMTUgLT4gMC4xMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMxNSBzcXVhcmVyb290IDE1LjBFLTEgLT4gMS4yICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzE2IHNxdWFyZXJvb3QgMTUuMDBFLTIgLT4gMC4zOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMxNyBzcXVhcmVyb290IDE1RS0zIC0+IDAuMTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMTggc3F1YXJlcm9vdCAxNUUrMSAtPiAxMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMxOSBzcXVhcmVyb290IDE1RSsyIC0+IDM5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzIwIHNxdWFyZXJvb3QgMTVFKzMgLT4gMS4yRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzIxIHNxdWFyZXJvb3QgMC4xNiAtPiAwLjQKK3NxdHgyMzIyIHNxdWFyZXJvb3QgMC4wMTYgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMyMyBzcXVhcmVyb290IDE2LjBFLTEgLT4gMS4zICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzI0IHNxdWFyZXJvb3QgMTYuMDBFLTIgLT4gMC40MAorc3F0eDIzMjUgc3F1YXJlcm9vdCAxNkUtMyAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzI2IHNxdWFyZXJvb3QgMTZFKzEgLT4gMTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMjcgc3F1YXJlcm9vdCAxNkUrMiAtPiA0RSsxCitzcXR4MjMyOCBzcXVhcmVyb290IDE2RSszIC0+IDEuM0UrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMyOSBzcXVhcmVyb290IDAuMTcgLT4gMC40MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMzMCBzcXVhcmVyb290IDAuMDE3IC0+IDAuMTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMzEgc3F1YXJlcm9vdCAxNy4wRS0xIC0+IDEuMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMzMiBzcXVhcmVyb290IDE3LjAwRS0yIC0+IDAuNDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMzMgc3F1YXJlcm9vdCAxN0UtMyAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzM0IHNxdWFyZXJvb3QgMTdFKzEgLT4gMTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMzUgc3F1YXJlcm9vdCAxN0UrMiAtPiA0MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMzNiBzcXVhcmVyb290IDE3RSszIC0+IDEuM0UrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMzNyBzcXVhcmVyb290IDAuMTggLT4gMC40MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjMzOCBzcXVhcmVyb290IDAuMDE4IC0+IDAuMTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzMzkgc3F1YXJlcm9vdCAxOC4wRS0xIC0+IDEuMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM0MCBzcXVhcmVyb290IDE4LjAwRS0yIC0+IDAuNDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNDEgc3F1YXJlcm9vdCAxOEUtMyAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzQyIHNxdWFyZXJvb3QgMThFKzEgLT4gMTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNDMgc3F1YXJlcm9vdCAxOEUrMiAtPiA0MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM0NCBzcXVhcmVyb290IDE4RSszIC0+IDEuM0UrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM0NSBzcXVhcmVyb290IDAuMTkgLT4gMC40NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM0NiBzcXVhcmVyb290IDAuMDE5IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNDcgc3F1YXJlcm9vdCAxOS4wRS0xIC0+IDEuNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM0OCBzcXVhcmVyb290IDE5LjAwRS0yIC0+IDAuNDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNDkgc3F1YXJlcm9vdCAxOUUtMyAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzUwIHNxdWFyZXJvb3QgMTlFKzEgLT4gMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNTEgc3F1YXJlcm9vdCAxOUUrMiAtPiA0NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM1MiBzcXVhcmVyb290IDE5RSszIC0+IDEuNEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM1MyBzcXVhcmVyb290IDAuMjAgLT4gMC40NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM1NCBzcXVhcmVyb290IDAuMDIwIC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNTUgc3F1YXJlcm9vdCAyMC4wRS0xIC0+IDEuNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM1NiBzcXVhcmVyb290IDIwLjAwRS0yIC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNTcgc3F1YXJlcm9vdCAyMEUtMyAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzU4IHNxdWFyZXJvb3QgMjBFKzEgLT4gMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNTkgc3F1YXJlcm9vdCAyMEUrMiAtPiA0NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM2MCBzcXVhcmVyb290IDIwRSszIC0+IDEuNEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM2MSBzcXVhcmVyb290IDAuMjEgLT4gMC40NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM2MiBzcXVhcmVyb290IDAuMDIxIC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNjMgc3F1YXJlcm9vdCAyMS4wRS0xIC0+IDEuNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM2NCBzcXVhcmVyb290IDIxLjAwRS0yIC0+IDAuNDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNjUgc3F1YXJlcm9vdCAyMUUtMyAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzY2IHNxdWFyZXJvb3QgMjFFKzEgLT4gMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNjcgc3F1YXJlcm9vdCAyMUUrMiAtPiA0NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM2OCBzcXVhcmVyb290IDIxRSszIC0+IDEuNEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM2OSBzcXVhcmVyb290IDAuMjIgLT4gMC40NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM3MCBzcXVhcmVyb290IDAuMDIyIC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNzEgc3F1YXJlcm9vdCAyMi4wRS0xIC0+IDEuNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM3MiBzcXVhcmVyb290IDIyLjAwRS0yIC0+IDAuNDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNzMgc3F1YXJlcm9vdCAyMkUtMyAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzc0IHNxdWFyZXJvb3QgMjJFKzEgLT4gMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNzUgc3F1YXJlcm9vdCAyMkUrMiAtPiA0NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM3NiBzcXVhcmVyb290IDIyRSszIC0+IDEuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM3NyBzcXVhcmVyb290IDAuMjMgLT4gMC40OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM3OCBzcXVhcmVyb290IDAuMDIzIC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzNzkgc3F1YXJlcm9vdCAyMy4wRS0xIC0+IDEuNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM4MCBzcXVhcmVyb290IDIzLjAwRS0yIC0+IDAuNDggIEluZXhhY3QgUm91bmRlZAorc3F0eDIzODEgc3F1YXJlcm9vdCAyM0UtMyAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzgyIHNxdWFyZXJvb3QgMjNFKzEgLT4gMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzODMgc3F1YXJlcm9vdCAyM0UrMiAtPiA0OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM4NCBzcXVhcmVyb290IDIzRSszIC0+IDEuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM4NSBzcXVhcmVyb290IDAuMjQgLT4gMC40OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM4NiBzcXVhcmVyb290IDAuMDI0IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzODcgc3F1YXJlcm9vdCAyNC4wRS0xIC0+IDEuNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM4OCBzcXVhcmVyb290IDI0LjAwRS0yIC0+IDAuNDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzODkgc3F1YXJlcm9vdCAyNEUtMyAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzkwIHNxdWFyZXJvb3QgMjRFKzEgLT4gMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzOTEgc3F1YXJlcm9vdCAyNEUrMiAtPiA0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM5MiBzcXVhcmVyb290IDI0RSszIC0+IDEuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM5MyBzcXVhcmVyb290IDAuMjUgLT4gMC41CitzcXR4MjM5NCBzcXVhcmVyb290IDAuMDI1IC0+IDAuMTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDIzOTUgc3F1YXJlcm9vdCAyNS4wRS0xIC0+IDEuNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM5NiBzcXVhcmVyb290IDI1LjAwRS0yIC0+IDAuNTAKK3NxdHgyMzk3IHNxdWFyZXJvb3QgMjVFLTMgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjM5OCBzcXVhcmVyb290IDI1RSsxIC0+IDE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyMzk5IHNxdWFyZXJvb3QgMjVFKzIgLT4gNUUrMQorc3F0eDI0MDAgc3F1YXJlcm9vdCAyNUUrMyAtPiAxLjZFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MDEgc3F1YXJlcm9vdCAwLjI2IC0+IDAuNTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MDIgc3F1YXJlcm9vdCAwLjAyNiAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDAzIHNxdWFyZXJvb3QgMjYuMEUtMSAtPiAxLjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MDQgc3F1YXJlcm9vdCAyNi4wMEUtMiAtPiAwLjUxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDA1IHNxdWFyZXJvb3QgMjZFLTMgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQwNiBzcXVhcmVyb290IDI2RSsxIC0+IDE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDA3IHNxdWFyZXJvb3QgMjZFKzIgLT4gNTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MDggc3F1YXJlcm9vdCAyNkUrMyAtPiAxLjZFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MDkgc3F1YXJlcm9vdCAwLjI3IC0+IDAuNTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MTAgc3F1YXJlcm9vdCAwLjAyNyAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDExIHNxdWFyZXJvb3QgMjcuMEUtMSAtPiAxLjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MTIgc3F1YXJlcm9vdCAyNy4wMEUtMiAtPiAwLjUyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDEzIHNxdWFyZXJvb3QgMjdFLTMgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQxNCBzcXVhcmVyb290IDI3RSsxIC0+IDE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDE1IHNxdWFyZXJvb3QgMjdFKzIgLT4gNTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MTYgc3F1YXJlcm9vdCAyN0UrMyAtPiAxLjZFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MTcgc3F1YXJlcm9vdCAwLjI4IC0+IDAuNTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MTggc3F1YXJlcm9vdCAwLjAyOCAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDE5IHNxdWFyZXJvb3QgMjguMEUtMSAtPiAxLjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MjAgc3F1YXJlcm9vdCAyOC4wMEUtMiAtPiAwLjUzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDIxIHNxdWFyZXJvb3QgMjhFLTMgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQyMiBzcXVhcmVyb290IDI4RSsxIC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDIzIHNxdWFyZXJvb3QgMjhFKzIgLT4gNTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MjQgc3F1YXJlcm9vdCAyOEUrMyAtPiAxLjdFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MjUgc3F1YXJlcm9vdCAwLjI5IC0+IDAuNTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MjYgc3F1YXJlcm9vdCAwLjAyOSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDI3IHNxdWFyZXJvb3QgMjkuMEUtMSAtPiAxLjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0Mjggc3F1YXJlcm9vdCAyOS4wMEUtMiAtPiAwLjU0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDI5IHNxdWFyZXJvb3QgMjlFLTMgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQzMCBzcXVhcmVyb290IDI5RSsxIC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDMxIHNxdWFyZXJvb3QgMjlFKzIgLT4gNTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MzIgc3F1YXJlcm9vdCAyOUUrMyAtPiAxLjdFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MzMgc3F1YXJlcm9vdCAwLjMwIC0+IDAuNTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MzQgc3F1YXJlcm9vdCAwLjAzMCAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDM1IHNxdWFyZXJvb3QgMzAuMEUtMSAtPiAxLjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0MzYgc3F1YXJlcm9vdCAzMC4wMEUtMiAtPiAwLjU1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDM3IHNxdWFyZXJvb3QgMzBFLTMgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQzOCBzcXVhcmVyb290IDMwRSsxIC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDM5IHNxdWFyZXJvb3QgMzBFKzIgLT4gNTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NDAgc3F1YXJlcm9vdCAzMEUrMyAtPiAxLjdFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NDEgc3F1YXJlcm9vdCAwLjMxIC0+IDAuNTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NDIgc3F1YXJlcm9vdCAwLjAzMSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDQzIHNxdWFyZXJvb3QgMzEuMEUtMSAtPiAxLjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NDQgc3F1YXJlcm9vdCAzMS4wMEUtMiAtPiAwLjU2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDQ1IHNxdWFyZXJvb3QgMzFFLTMgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ0NiBzcXVhcmVyb290IDMxRSsxIC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDQ3IHNxdWFyZXJvb3QgMzFFKzIgLT4gNTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NDggc3F1YXJlcm9vdCAzMUUrMyAtPiAxLjhFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NDkgc3F1YXJlcm9vdCAwLjMyIC0+IDAuNTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NTAgc3F1YXJlcm9vdCAwLjAzMiAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDUxIHNxdWFyZXJvb3QgMzIuMEUtMSAtPiAxLjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NTIgc3F1YXJlcm9vdCAzMi4wMEUtMiAtPiAwLjU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDUzIHNxdWFyZXJvb3QgMzJFLTMgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ1NCBzcXVhcmVyb290IDMyRSsxIC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDU1IHNxdWFyZXJvb3QgMzJFKzIgLT4gNTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NTYgc3F1YXJlcm9vdCAzMkUrMyAtPiAxLjhFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NTcgc3F1YXJlcm9vdCAwLjMzIC0+IDAuNTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NTggc3F1YXJlcm9vdCAwLjAzMyAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDU5IHNxdWFyZXJvb3QgMzMuMEUtMSAtPiAxLjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NjAgc3F1YXJlcm9vdCAzMy4wMEUtMiAtPiAwLjU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDYxIHNxdWFyZXJvb3QgMzNFLTMgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ2MiBzcXVhcmVyb290IDMzRSsxIC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDYzIHNxdWFyZXJvb3QgMzNFKzIgLT4gNTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NjQgc3F1YXJlcm9vdCAzM0UrMyAtPiAxLjhFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NjUgc3F1YXJlcm9vdCAwLjM0IC0+IDAuNTggIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NjYgc3F1YXJlcm9vdCAwLjAzNCAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDY3IHNxdWFyZXJvb3QgMzQuMEUtMSAtPiAxLjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI0Njggc3F1YXJlcm9vdCAzNC4wMEUtMiAtPiAwLjU4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDY5IHNxdWFyZXJvb3QgMzRFLTMgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ3MCBzcXVhcmVyb290IDM0RSsxIC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDcxIHNxdWFyZXJvb3QgMzRFKzIgLT4gNTggIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NzIgc3F1YXJlcm9vdCAzNEUrMyAtPiAxLjhFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NzMgc3F1YXJlcm9vdCAwLjM1IC0+IDAuNTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NzQgc3F1YXJlcm9vdCAwLjAzNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDc1IHNxdWFyZXJvb3QgMzUuMEUtMSAtPiAxLjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0NzYgc3F1YXJlcm9vdCAzNS4wMEUtMiAtPiAwLjU5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDc3IHNxdWFyZXJvb3QgMzVFLTMgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ3OCBzcXVhcmVyb290IDM1RSsxIC0+IDE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDc5IHNxdWFyZXJvb3QgMzVFKzIgLT4gNTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0ODAgc3F1YXJlcm9vdCAzNUUrMyAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0ODEgc3F1YXJlcm9vdCAwLjM2IC0+IDAuNgorc3F0eDI0ODIgc3F1YXJlcm9vdCAwLjAzNiAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDgzIHNxdWFyZXJvb3QgMzYuMEUtMSAtPiAxLjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0ODQgc3F1YXJlcm9vdCAzNi4wMEUtMiAtPiAwLjYwCitzcXR4MjQ4NSBzcXVhcmVyb290IDM2RS0zIC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0ODYgc3F1YXJlcm9vdCAzNkUrMSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ4NyBzcXVhcmVyb290IDM2RSsyIC0+IDZFKzEKK3NxdHgyNDg4IHNxdWFyZXJvb3QgMzZFKzMgLT4gMS45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDg5IHNxdWFyZXJvb3QgMC4zNyAtPiAwLjYxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDkwIHNxdWFyZXJvb3QgMC4wMzcgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ5MSBzcXVhcmVyb290IDM3LjBFLTEgLT4gMS45ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDkyIHNxdWFyZXJvb3QgMzcuMDBFLTIgLT4gMC42MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ5MyBzcXVhcmVyb290IDM3RS0zIC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI0OTQgc3F1YXJlcm9vdCAzN0UrMSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ5NSBzcXVhcmVyb290IDM3RSsyIC0+IDYxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDk2IHNxdWFyZXJvb3QgMzdFKzMgLT4gMS45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDk3IHNxdWFyZXJvb3QgMC4zOCAtPiAwLjYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNDk4IHNxdWFyZXJvb3QgMC4wMzggLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjQ5OSBzcXVhcmVyb290IDM4LjBFLTEgLT4gMS45ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTAwIHNxdWFyZXJvb3QgMzguMDBFLTIgLT4gMC42MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUwMSBzcXVhcmVyb290IDM4RS0zIC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MDIgc3F1YXJlcm9vdCAzOEUrMSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUwMyBzcXVhcmVyb290IDM4RSsyIC0+IDYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTA0IHNxdWFyZXJvb3QgMzhFKzMgLT4gMS45RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTA1IHNxdWFyZXJvb3QgMC4zOSAtPiAwLjYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTA2IHNxdWFyZXJvb3QgMC4wMzkgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUwNyBzcXVhcmVyb290IDM5LjBFLTEgLT4gMi4wICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTA4IHNxdWFyZXJvb3QgMzkuMDBFLTIgLT4gMC42MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUwOSBzcXVhcmVyb290IDM5RS0zIC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MTAgc3F1YXJlcm9vdCAzOUUrMSAtPiAyMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUxMSBzcXVhcmVyb290IDM5RSsyIC0+IDYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTEyIHNxdWFyZXJvb3QgMzlFKzMgLT4gMi4wRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTEzIHNxdWFyZXJvb3QgMC40MCAtPiAwLjYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTE0IHNxdWFyZXJvb3QgMC4wNDAgLT4gMC4yMAorc3F0eDI1MTUgc3F1YXJlcm9vdCA0MC4wRS0xIC0+IDIuMAorc3F0eDI1MTYgc3F1YXJlcm9vdCA0MC4wMEUtMiAtPiAwLjYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTE3IHNxdWFyZXJvb3QgNDBFLTMgLT4gMC4yMAorc3F0eDI1MTggc3F1YXJlcm9vdCA0MEUrMSAtPiAyMAorc3F0eDI1MTkgc3F1YXJlcm9vdCA0MEUrMiAtPiA2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUyMCBzcXVhcmVyb290IDQwRSszIC0+IDIuMEUrMgorc3F0eDI1MjEgc3F1YXJlcm9vdCAwLjQxIC0+IDAuNjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MjIgc3F1YXJlcm9vdCAwLjA0MSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTIzIHNxdWFyZXJvb3QgNDEuMEUtMSAtPiAyLjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MjQgc3F1YXJlcm9vdCA0MS4wMEUtMiAtPiAwLjY0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTI1IHNxdWFyZXJvb3QgNDFFLTMgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUyNiBzcXVhcmVyb290IDQxRSsxIC0+IDIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTI3IHNxdWFyZXJvb3QgNDFFKzIgLT4gNjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1Mjggc3F1YXJlcm9vdCA0MUUrMyAtPiAyLjBFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1Mjkgc3F1YXJlcm9vdCAwLjQyIC0+IDAuNjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MzAgc3F1YXJlcm9vdCAwLjA0MiAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTMxIHNxdWFyZXJvb3QgNDIuMEUtMSAtPiAyLjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MzIgc3F1YXJlcm9vdCA0Mi4wMEUtMiAtPiAwLjY1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTMzIHNxdWFyZXJvb3QgNDJFLTMgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjUzNCBzcXVhcmVyb290IDQyRSsxIC0+IDIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTM1IHNxdWFyZXJvb3QgNDJFKzIgLT4gNjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1MzYgc3F1YXJlcm9vdCA0MkUrMyAtPiAyLjBFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1Mzcgc3F1YXJlcm9vdCAwLjQzIC0+IDAuNjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1Mzggc3F1YXJlcm9vdCAwLjA0MyAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTM5IHNxdWFyZXJvb3QgNDMuMEUtMSAtPiAyLjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NDAgc3F1YXJlcm9vdCA0My4wMEUtMiAtPiAwLjY2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTQxIHNxdWFyZXJvb3QgNDNFLTMgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU0MiBzcXVhcmVyb290IDQzRSsxIC0+IDIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTQzIHNxdWFyZXJvb3QgNDNFKzIgLT4gNjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NDQgc3F1YXJlcm9vdCA0M0UrMyAtPiAyLjFFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NDUgc3F1YXJlcm9vdCAwLjQ0IC0+IDAuNjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NDYgc3F1YXJlcm9vdCAwLjA0NCAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTQ3IHNxdWFyZXJvb3QgNDQuMEUtMSAtPiAyLjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NDggc3F1YXJlcm9vdCA0NC4wMEUtMiAtPiAwLjY2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTQ5IHNxdWFyZXJvb3QgNDRFLTMgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU1MCBzcXVhcmVyb290IDQ0RSsxIC0+IDIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTUxIHNxdWFyZXJvb3QgNDRFKzIgLT4gNjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NTIgc3F1YXJlcm9vdCA0NEUrMyAtPiAyLjFFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NTMgc3F1YXJlcm9vdCAwLjQ1IC0+IDAuNjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NTQgc3F1YXJlcm9vdCAwLjA0NSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTU1IHNxdWFyZXJvb3QgNDUuMEUtMSAtPiAyLjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NTYgc3F1YXJlcm9vdCA0NS4wMEUtMiAtPiAwLjY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTU3IHNxdWFyZXJvb3QgNDVFLTMgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU1OCBzcXVhcmVyb290IDQ1RSsxIC0+IDIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTU5IHNxdWFyZXJvb3QgNDVFKzIgLT4gNjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NjAgc3F1YXJlcm9vdCA0NUUrMyAtPiAyLjFFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NjEgc3F1YXJlcm9vdCAwLjQ2IC0+IDAuNjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NjIgc3F1YXJlcm9vdCAwLjA0NiAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTYzIHNxdWFyZXJvb3QgNDYuMEUtMSAtPiAyLjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NjQgc3F1YXJlcm9vdCA0Ni4wMEUtMiAtPiAwLjY4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTY1IHNxdWFyZXJvb3QgNDZFLTMgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU2NiBzcXVhcmVyb290IDQ2RSsxIC0+IDIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTY3IHNxdWFyZXJvb3QgNDZFKzIgLT4gNjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI1Njggc3F1YXJlcm9vdCA0NkUrMyAtPiAyLjFFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1Njkgc3F1YXJlcm9vdCAwLjQ3IC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NzAgc3F1YXJlcm9vdCAwLjA0NyAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTcxIHNxdWFyZXJvb3QgNDcuMEUtMSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NzIgc3F1YXJlcm9vdCA0Ny4wMEUtMiAtPiAwLjY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTczIHNxdWFyZXJvb3QgNDdFLTMgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU3NCBzcXVhcmVyb290IDQ3RSsxIC0+IDIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTc1IHNxdWFyZXJvb3QgNDdFKzIgLT4gNjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1NzYgc3F1YXJlcm9vdCA0N0UrMyAtPiAyLjJFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1Nzcgc3F1YXJlcm9vdCAwLjQ4IC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1Nzggc3F1YXJlcm9vdCAwLjA0OCAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTc5IHNxdWFyZXJvb3QgNDguMEUtMSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1ODAgc3F1YXJlcm9vdCA0OC4wMEUtMiAtPiAwLjY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTgxIHNxdWFyZXJvb3QgNDhFLTMgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU4MiBzcXVhcmVyb290IDQ4RSsxIC0+IDIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTgzIHNxdWFyZXJvb3QgNDhFKzIgLT4gNjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1ODQgc3F1YXJlcm9vdCA0OEUrMyAtPiAyLjJFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1ODUgc3F1YXJlcm9vdCAwLjQ5IC0+IDAuNworc3F0eDI1ODYgc3F1YXJlcm9vdCAwLjA0OSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTg3IHNxdWFyZXJvb3QgNDkuMEUtMSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1ODggc3F1YXJlcm9vdCA0OS4wMEUtMiAtPiAwLjcwCitzcXR4MjU4OSBzcXVhcmVyb290IDQ5RS0zIC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1OTAgc3F1YXJlcm9vdCA0OUUrMSAtPiAyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU5MSBzcXVhcmVyb290IDQ5RSsyIC0+IDdFKzEKK3NxdHgyNTkyIHNxdWFyZXJvb3QgNDlFKzMgLT4gMi4yRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTkzIHNxdWFyZXJvb3QgMC41MCAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTk0IHNxdWFyZXJvb3QgMC4wNTAgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU5NSBzcXVhcmVyb290IDUwLjBFLTEgLT4gMi4yICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNTk2IHNxdWFyZXJvb3QgNTAuMDBFLTIgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU5NyBzcXVhcmVyb290IDUwRS0zIC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI1OTggc3F1YXJlcm9vdCA1MEUrMSAtPiAyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjU5OSBzcXVhcmVyb290IDUwRSsyIC0+IDcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjAwIHNxdWFyZXJvb3QgNTBFKzMgLT4gMi4yRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjAxIHNxdWFyZXJvb3QgMC41MSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjAyIHNxdWFyZXJvb3QgMC4wNTEgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYwMyBzcXVhcmVyb290IDUxLjBFLTEgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjA0IHNxdWFyZXJvb3QgNTEuMDBFLTIgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYwNSBzcXVhcmVyb290IDUxRS0zIC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MDYgc3F1YXJlcm9vdCA1MUUrMSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYwNyBzcXVhcmVyb290IDUxRSsyIC0+IDcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjA4IHNxdWFyZXJvb3QgNTFFKzMgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjA5IHNxdWFyZXJvb3QgMC41MiAtPiAwLjcyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjEwIHNxdWFyZXJvb3QgMC4wNTIgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYxMSBzcXVhcmVyb290IDUyLjBFLTEgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjEyIHNxdWFyZXJvb3QgNTIuMDBFLTIgLT4gMC43MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYxMyBzcXVhcmVyb290IDUyRS0zIC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MTQgc3F1YXJlcm9vdCA1MkUrMSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYxNSBzcXVhcmVyb290IDUyRSsyIC0+IDcyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjE2IHNxdWFyZXJvb3QgNTJFKzMgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjE3IHNxdWFyZXJvb3QgMC41MyAtPiAwLjczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjE4IHNxdWFyZXJvb3QgMC4wNTMgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYxOSBzcXVhcmVyb290IDUzLjBFLTEgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjIwIHNxdWFyZXJvb3QgNTMuMDBFLTIgLT4gMC43MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYyMSBzcXVhcmVyb290IDUzRS0zIC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MjIgc3F1YXJlcm9vdCA1M0UrMSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYyMyBzcXVhcmVyb290IDUzRSsyIC0+IDczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjI0IHNxdWFyZXJvb3QgNTNFKzMgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjI1IHNxdWFyZXJvb3QgMC41NCAtPiAwLjczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjI2IHNxdWFyZXJvb3QgMC4wNTQgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYyNyBzcXVhcmVyb290IDU0LjBFLTEgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjI4IHNxdWFyZXJvb3QgNTQuMDBFLTIgLT4gMC43MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYyOSBzcXVhcmVyb290IDU0RS0zIC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2MzAgc3F1YXJlcm9vdCA1NEUrMSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYzMSBzcXVhcmVyb290IDU0RSsyIC0+IDczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjMyIHNxdWFyZXJvb3QgNTRFKzMgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjMzIHNxdWFyZXJvb3QgMC41NSAtPiAwLjc0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjM0IHNxdWFyZXJvb3QgMC4wNTUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYzNSBzcXVhcmVyb290IDU1LjBFLTEgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjM2IHNxdWFyZXJvb3QgNTUuMDBFLTIgLT4gMC43NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYzNyBzcXVhcmVyb290IDU1RS0zIC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2Mzggc3F1YXJlcm9vdCA1NUUrMSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjYzOSBzcXVhcmVyb290IDU1RSsyIC0+IDc0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjQwIHNxdWFyZXJvb3QgNTVFKzMgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjQxIHNxdWFyZXJvb3QgMC41NiAtPiAwLjc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjQyIHNxdWFyZXJvb3QgMC4wNTYgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY0MyBzcXVhcmVyb290IDU2LjBFLTEgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjQ0IHNxdWFyZXJvb3QgNTYuMDBFLTIgLT4gMC43NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY0NSBzcXVhcmVyb290IDU2RS0zIC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NDYgc3F1YXJlcm9vdCA1NkUrMSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY0NyBzcXVhcmVyb290IDU2RSsyIC0+IDc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjQ4IHNxdWFyZXJvb3QgNTZFKzMgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjQ5IHNxdWFyZXJvb3QgMC41NyAtPiAwLjc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjUwIHNxdWFyZXJvb3QgMC4wNTcgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY1MSBzcXVhcmVyb290IDU3LjBFLTEgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjUyIHNxdWFyZXJvb3QgNTcuMDBFLTIgLT4gMC43NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY1MyBzcXVhcmVyb290IDU3RS0zIC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NTQgc3F1YXJlcm9vdCA1N0UrMSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY1NSBzcXVhcmVyb290IDU3RSsyIC0+IDc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjU2IHNxdWFyZXJvb3QgNTdFKzMgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjU3IHNxdWFyZXJvb3QgMC41OCAtPiAwLjc2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjU4IHNxdWFyZXJvb3QgMC4wNTggLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY1OSBzcXVhcmVyb290IDU4LjBFLTEgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjYwIHNxdWFyZXJvb3QgNTguMDBFLTIgLT4gMC43NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY2MSBzcXVhcmVyb290IDU4RS0zIC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NjIgc3F1YXJlcm9vdCA1OEUrMSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY2MyBzcXVhcmVyb290IDU4RSsyIC0+IDc2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjY0IHNxdWFyZXJvb3QgNThFKzMgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjY1IHNxdWFyZXJvb3QgMC41OSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjY2IHNxdWFyZXJvb3QgMC4wNTkgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY2NyBzcXVhcmVyb290IDU5LjBFLTEgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjY4IHNxdWFyZXJvb3QgNTkuMDBFLTIgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY2OSBzcXVhcmVyb290IDU5RS0zIC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2NzAgc3F1YXJlcm9vdCA1OUUrMSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY3MSBzcXVhcmVyb290IDU5RSsyIC0+IDc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjcyIHNxdWFyZXJvb3QgNTlFKzMgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjczIHNxdWFyZXJvb3QgMC42MCAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjc0IHNxdWFyZXJvb3QgMC4wNjAgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY3NSBzcXVhcmVyb290IDYwLjBFLTEgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjc2IHNxdWFyZXJvb3QgNjAuMDBFLTIgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY3NyBzcXVhcmVyb290IDYwRS0zIC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2Nzggc3F1YXJlcm9vdCA2MEUrMSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY3OSBzcXVhcmVyb290IDYwRSsyIC0+IDc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjgwIHNxdWFyZXJvb3QgNjBFKzMgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjgxIHNxdWFyZXJvb3QgMC42MSAtPiAwLjc4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjgyIHNxdWFyZXJvb3QgMC4wNjEgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY4MyBzcXVhcmVyb290IDYxLjBFLTEgLT4gMi41ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjg0IHNxdWFyZXJvb3QgNjEuMDBFLTIgLT4gMC43OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY4NSBzcXVhcmVyb290IDYxRS0zIC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2ODYgc3F1YXJlcm9vdCA2MUUrMSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY4NyBzcXVhcmVyb290IDYxRSsyIC0+IDc4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjg4IHNxdWFyZXJvb3QgNjFFKzMgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjg5IHNxdWFyZXJvb3QgMC42MiAtPiAwLjc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjkwIHNxdWFyZXJvb3QgMC4wNjIgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY5MSBzcXVhcmVyb290IDYyLjBFLTEgLT4gMi41ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjkyIHNxdWFyZXJvb3QgNjIuMDBFLTIgLT4gMC43OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY5MyBzcXVhcmVyb290IDYyRS0zIC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI2OTQgc3F1YXJlcm9vdCA2MkUrMSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY5NSBzcXVhcmVyb290IDYyRSsyIC0+IDc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjk2IHNxdWFyZXJvb3QgNjJFKzMgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjk3IHNxdWFyZXJvb3QgMC42MyAtPiAwLjc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNjk4IHNxdWFyZXJvb3QgMC4wNjMgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjY5OSBzcXVhcmVyb290IDYzLjBFLTEgLT4gMi41ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzAwIHNxdWFyZXJvb3QgNjMuMDBFLTIgLT4gMC43OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcwMSBzcXVhcmVyb290IDYzRS0zIC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MDIgc3F1YXJlcm9vdCA2M0UrMSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcwMyBzcXVhcmVyb290IDYzRSsyIC0+IDc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzA0IHNxdWFyZXJvb3QgNjNFKzMgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzA1IHNxdWFyZXJvb3QgMC42NCAtPiAwLjgKK3NxdHgyNzA2IHNxdWFyZXJvb3QgMC4wNjQgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcwNyBzcXVhcmVyb290IDY0LjBFLTEgLT4gMi41ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzA4IHNxdWFyZXJvb3QgNjQuMDBFLTIgLT4gMC44MAorc3F0eDI3MDkgc3F1YXJlcm9vdCA2NEUtMyAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzEwIHNxdWFyZXJvb3QgNjRFKzEgLT4gMjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MTEgc3F1YXJlcm9vdCA2NEUrMiAtPiA4RSsxCitzcXR4MjcxMiBzcXVhcmVyb290IDY0RSszIC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcxMyBzcXVhcmVyb290IDAuNjUgLT4gMC44MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcxNCBzcXVhcmVyb290IDAuMDY1IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MTUgc3F1YXJlcm9vdCA2NS4wRS0xIC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcxNiBzcXVhcmVyb290IDY1LjAwRS0yIC0+IDAuODEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MTcgc3F1YXJlcm9vdCA2NUUtMyAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzE4IHNxdWFyZXJvb3QgNjVFKzEgLT4gMjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MTkgc3F1YXJlcm9vdCA2NUUrMiAtPiA4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcyMCBzcXVhcmVyb290IDY1RSszIC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcyMSBzcXVhcmVyb290IDAuNjYgLT4gMC44MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcyMiBzcXVhcmVyb290IDAuMDY2IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MjMgc3F1YXJlcm9vdCA2Ni4wRS0xIC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcyNCBzcXVhcmVyb290IDY2LjAwRS0yIC0+IDAuODEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MjUgc3F1YXJlcm9vdCA2NkUtMyAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzI2IHNxdWFyZXJvb3QgNjZFKzEgLT4gMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3Mjcgc3F1YXJlcm9vdCA2NkUrMiAtPiA4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcyOCBzcXVhcmVyb290IDY2RSszIC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjcyOSBzcXVhcmVyb290IDAuNjcgLT4gMC44MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjczMCBzcXVhcmVyb290IDAuMDY3IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MzEgc3F1YXJlcm9vdCA2Ny4wRS0xIC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjczMiBzcXVhcmVyb290IDY3LjAwRS0yIC0+IDAuODIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MzMgc3F1YXJlcm9vdCA2N0UtMyAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzM0IHNxdWFyZXJvb3QgNjdFKzEgLT4gMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3MzUgc3F1YXJlcm9vdCA2N0UrMiAtPiA4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjczNiBzcXVhcmVyb290IDY3RSszIC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjczNyBzcXVhcmVyb290IDAuNjggLT4gMC44MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjczOCBzcXVhcmVyb290IDAuMDY4IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3Mzkgc3F1YXJlcm9vdCA2OC4wRS0xIC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc0MCBzcXVhcmVyb290IDY4LjAwRS0yIC0+IDAuODIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NDEgc3F1YXJlcm9vdCA2OEUtMyAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzQyIHNxdWFyZXJvb3QgNjhFKzEgLT4gMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NDMgc3F1YXJlcm9vdCA2OEUrMiAtPiA4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc0NCBzcXVhcmVyb290IDY4RSszIC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc0NSBzcXVhcmVyb290IDAuNjkgLT4gMC44MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc0NiBzcXVhcmVyb290IDAuMDY5IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NDcgc3F1YXJlcm9vdCA2OS4wRS0xIC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc0OCBzcXVhcmVyb290IDY5LjAwRS0yIC0+IDAuODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NDkgc3F1YXJlcm9vdCA2OUUtMyAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzUwIHNxdWFyZXJvb3QgNjlFKzEgLT4gMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NTEgc3F1YXJlcm9vdCA2OUUrMiAtPiA4MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc1MiBzcXVhcmVyb290IDY5RSszIC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc1MyBzcXVhcmVyb290IDAuNzAgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc1NCBzcXVhcmVyb290IDAuMDcwIC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NTUgc3F1YXJlcm9vdCA3MC4wRS0xIC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc1NiBzcXVhcmVyb290IDcwLjAwRS0yIC0+IDAuODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NTcgc3F1YXJlcm9vdCA3MEUtMyAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzU4IHNxdWFyZXJvb3QgNzBFKzEgLT4gMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NTkgc3F1YXJlcm9vdCA3MEUrMiAtPiA4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc2MCBzcXVhcmVyb290IDcwRSszIC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc2MSBzcXVhcmVyb290IDAuNzEgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc2MiBzcXVhcmVyb290IDAuMDcxIC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NjMgc3F1YXJlcm9vdCA3MS4wRS0xIC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc2NCBzcXVhcmVyb290IDcxLjAwRS0yIC0+IDAuODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NjUgc3F1YXJlcm9vdCA3MUUtMyAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzY2IHNxdWFyZXJvb3QgNzFFKzEgLT4gMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3Njcgc3F1YXJlcm9vdCA3MUUrMiAtPiA4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc2OCBzcXVhcmVyb290IDcxRSszIC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc2OSBzcXVhcmVyb290IDAuNzIgLT4gMC44NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc3MCBzcXVhcmVyb290IDAuMDcyIC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NzEgc3F1YXJlcm9vdCA3Mi4wRS0xIC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc3MiBzcXVhcmVyb290IDcyLjAwRS0yIC0+IDAuODUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NzMgc3F1YXJlcm9vdCA3MkUtMyAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzc0IHNxdWFyZXJvb3QgNzJFKzEgLT4gMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3NzUgc3F1YXJlcm9vdCA3MkUrMiAtPiA4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc3NiBzcXVhcmVyb290IDcyRSszIC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc3NyBzcXVhcmVyb290IDAuNzMgLT4gMC44NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc3OCBzcXVhcmVyb290IDAuMDczIC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3Nzkgc3F1YXJlcm9vdCA3My4wRS0xIC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc4MCBzcXVhcmVyb290IDczLjAwRS0yIC0+IDAuODUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3ODEgc3F1YXJlcm9vdCA3M0UtMyAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzgyIHNxdWFyZXJvb3QgNzNFKzEgLT4gMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3ODMgc3F1YXJlcm9vdCA3M0UrMiAtPiA4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc4NCBzcXVhcmVyb290IDczRSszIC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc4NSBzcXVhcmVyb290IDAuNzQgLT4gMC44NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc4NiBzcXVhcmVyb290IDAuMDc0IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3ODcgc3F1YXJlcm9vdCA3NC4wRS0xIC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc4OCBzcXVhcmVyb290IDc0LjAwRS0yIC0+IDAuODYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3ODkgc3F1YXJlcm9vdCA3NEUtMyAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzkwIHNxdWFyZXJvb3QgNzRFKzEgLT4gMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3OTEgc3F1YXJlcm9vdCA3NEUrMiAtPiA4NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc5MiBzcXVhcmVyb290IDc0RSszIC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc5MyBzcXVhcmVyb290IDAuNzUgLT4gMC44NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc5NCBzcXVhcmVyb290IDAuMDc1IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3OTUgc3F1YXJlcm9vdCA3NS4wRS0xIC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjc5NiBzcXVhcmVyb290IDc1LjAwRS0yIC0+IDAuODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3OTcgc3F1YXJlcm9vdCA3NUUtMyAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyNzk4IHNxdWFyZXJvb3QgNzVFKzEgLT4gMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI3OTkgc3F1YXJlcm9vdCA3NUUrMiAtPiA4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgwMCBzcXVhcmVyb290IDc1RSszIC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgwMSBzcXVhcmVyb290IDAuNzYgLT4gMC44NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgwMiBzcXVhcmVyb290IDAuMDc2IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4MDMgc3F1YXJlcm9vdCA3Ni4wRS0xIC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgwNCBzcXVhcmVyb290IDc2LjAwRS0yIC0+IDAuODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4MDUgc3F1YXJlcm9vdCA3NkUtMyAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODA2IHNxdWFyZXJvb3QgNzZFKzEgLT4gMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4MDcgc3F1YXJlcm9vdCA3NkUrMiAtPiA4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgwOCBzcXVhcmVyb290IDc2RSszIC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgwOSBzcXVhcmVyb290IDAuNzcgLT4gMC44OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgxMCBzcXVhcmVyb290IDAuMDc3IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4MTEgc3F1YXJlcm9vdCA3Ny4wRS0xIC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgxMiBzcXVhcmVyb290IDc3LjAwRS0yIC0+IDAuODggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4MTMgc3F1YXJlcm9vdCA3N0UtMyAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODE0IHNxdWFyZXJvb3QgNzdFKzEgLT4gMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4MTUgc3F1YXJlcm9vdCA3N0UrMiAtPiA4OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgxNiBzcXVhcmVyb290IDc3RSszIC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgxNyBzcXVhcmVyb290IDAuNzggLT4gMC44OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgxOCBzcXVhcmVyb290IDAuMDc4IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4MTkgc3F1YXJlcm9vdCA3OC4wRS0xIC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgyMCBzcXVhcmVyb290IDc4LjAwRS0yIC0+IDAuODggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4MjEgc3F1YXJlcm9vdCA3OEUtMyAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODIyIHNxdWFyZXJvb3QgNzhFKzEgLT4gMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4MjMgc3F1YXJlcm9vdCA3OEUrMiAtPiA4OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgyNCBzcXVhcmVyb290IDc4RSszIC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgyNSBzcXVhcmVyb290IDAuNzkgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgyNiBzcXVhcmVyb290IDAuMDc5IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4Mjcgc3F1YXJlcm9vdCA3OS4wRS0xIC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgyOCBzcXVhcmVyb290IDc5LjAwRS0yIC0+IDAuODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4Mjkgc3F1YXJlcm9vdCA3OUUtMyAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODMwIHNxdWFyZXJvb3QgNzlFKzEgLT4gMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4MzEgc3F1YXJlcm9vdCA3OUUrMiAtPiA4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgzMiBzcXVhcmVyb290IDc5RSszIC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgzMyBzcXVhcmVyb290IDAuODAgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgzNCBzcXVhcmVyb290IDAuMDgwIC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4MzUgc3F1YXJlcm9vdCA4MC4wRS0xIC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjgzNiBzcXVhcmVyb290IDgwLjAwRS0yIC0+IDAuODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4Mzcgc3F1YXJlcm9vdCA4MEUtMyAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODM4IHNxdWFyZXJvb3QgODBFKzEgLT4gMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4Mzkgc3F1YXJlcm9vdCA4MEUrMiAtPiA4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg0MCBzcXVhcmVyb290IDgwRSszIC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg0MSBzcXVhcmVyb290IDAuODEgLT4gMC45CitzcXR4Mjg0MiBzcXVhcmVyb290IDAuMDgxIC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NDMgc3F1YXJlcm9vdCA4MS4wRS0xIC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg0NCBzcXVhcmVyb290IDgxLjAwRS0yIC0+IDAuOTAKK3NxdHgyODQ1IHNxdWFyZXJvb3QgODFFLTMgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg0NiBzcXVhcmVyb290IDgxRSsxIC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODQ3IHNxdWFyZXJvb3QgODFFKzIgLT4gOUUrMQorc3F0eDI4NDggc3F1YXJlcm9vdCA4MUUrMyAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NDkgc3F1YXJlcm9vdCAwLjgyIC0+IDAuOTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NTAgc3F1YXJlcm9vdCAwLjA4MiAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODUxIHNxdWFyZXJvb3QgODIuMEUtMSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NTIgc3F1YXJlcm9vdCA4Mi4wMEUtMiAtPiAwLjkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODUzIHNxdWFyZXJvb3QgODJFLTMgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg1NCBzcXVhcmVyb290IDgyRSsxIC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODU1IHNxdWFyZXJvb3QgODJFKzIgLT4gOTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NTYgc3F1YXJlcm9vdCA4MkUrMyAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NTcgc3F1YXJlcm9vdCAwLjgzIC0+IDAuOTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NTggc3F1YXJlcm9vdCAwLjA4MyAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODU5IHNxdWFyZXJvb3QgODMuMEUtMSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NjAgc3F1YXJlcm9vdCA4My4wMEUtMiAtPiAwLjkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODYxIHNxdWFyZXJvb3QgODNFLTMgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg2MiBzcXVhcmVyb290IDgzRSsxIC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODYzIHNxdWFyZXJvb3QgODNFKzIgLT4gOTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NjQgc3F1YXJlcm9vdCA4M0UrMyAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NjUgc3F1YXJlcm9vdCAwLjg0IC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NjYgc3F1YXJlcm9vdCAwLjA4NCAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODY3IHNxdWFyZXJvb3QgODQuMEUtMSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4Njggc3F1YXJlcm9vdCA4NC4wMEUtMiAtPiAwLjkyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODY5IHNxdWFyZXJvb3QgODRFLTMgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg3MCBzcXVhcmVyb290IDg0RSsxIC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODcxIHNxdWFyZXJvb3QgODRFKzIgLT4gOTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NzIgc3F1YXJlcm9vdCA4NEUrMyAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NzMgc3F1YXJlcm9vdCAwLjg1IC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NzQgc3F1YXJlcm9vdCAwLjA4NSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODc1IHNxdWFyZXJvb3QgODUuMEUtMSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4NzYgc3F1YXJlcm9vdCA4NS4wMEUtMiAtPiAwLjkyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODc3IHNxdWFyZXJvb3QgODVFLTMgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg3OCBzcXVhcmVyb290IDg1RSsxIC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODc5IHNxdWFyZXJvb3QgODVFKzIgLT4gOTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4ODAgc3F1YXJlcm9vdCA4NUUrMyAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4ODEgc3F1YXJlcm9vdCAwLjg2IC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4ODIgc3F1YXJlcm9vdCAwLjA4NiAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODgzIHNxdWFyZXJvb3QgODYuMEUtMSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4ODQgc3F1YXJlcm9vdCA4Ni4wMEUtMiAtPiAwLjkzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODg1IHNxdWFyZXJvb3QgODZFLTMgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg4NiBzcXVhcmVyb290IDg2RSsxIC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODg3IHNxdWFyZXJvb3QgODZFKzIgLT4gOTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4ODggc3F1YXJlcm9vdCA4NkUrMyAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4ODkgc3F1YXJlcm9vdCAwLjg3IC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4OTAgc3F1YXJlcm9vdCAwLjA4NyAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODkxIHNxdWFyZXJvb3QgODcuMEUtMSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4OTIgc3F1YXJlcm9vdCA4Ny4wMEUtMiAtPiAwLjkzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODkzIHNxdWFyZXJvb3QgODdFLTMgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjg5NCBzcXVhcmVyb290IDg3RSsxIC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODk1IHNxdWFyZXJvb3QgODdFKzIgLT4gOTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4OTYgc3F1YXJlcm9vdCA4N0UrMyAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4OTcgc3F1YXJlcm9vdCAwLjg4IC0+IDAuOTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI4OTggc3F1YXJlcm9vdCAwLjA4OCAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyODk5IHNxdWFyZXJvb3QgODguMEUtMSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MDAgc3F1YXJlcm9vdCA4OC4wMEUtMiAtPiAwLjk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTAxIHNxdWFyZXJvb3QgODhFLTMgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkwMiBzcXVhcmVyb290IDg4RSsxIC0+IDMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTAzIHNxdWFyZXJvb3QgODhFKzIgLT4gOTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MDQgc3F1YXJlcm9vdCA4OEUrMyAtPiAzLjBFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MDUgc3F1YXJlcm9vdCAwLjg5IC0+IDAuOTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MDYgc3F1YXJlcm9vdCAwLjA4OSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTA3IHNxdWFyZXJvb3QgODkuMEUtMSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MDggc3F1YXJlcm9vdCA4OS4wMEUtMiAtPiAwLjk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTA5IHNxdWFyZXJvb3QgODlFLTMgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkxMCBzcXVhcmVyb290IDg5RSsxIC0+IDMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTExIHNxdWFyZXJvb3QgODlFKzIgLT4gOTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MTIgc3F1YXJlcm9vdCA4OUUrMyAtPiAzLjBFKzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MTMgc3F1YXJlcm9vdCAwLjkwIC0+IDAuOTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MTQgc3F1YXJlcm9vdCAwLjA5MCAtPiAwLjMwCitzcXR4MjkxNSBzcXVhcmVyb290IDkwLjBFLTEgLT4gMy4wCitzcXR4MjkxNiBzcXVhcmVyb290IDkwLjAwRS0yIC0+IDAuOTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MTcgc3F1YXJlcm9vdCA5MEUtMyAtPiAwLjMwCitzcXR4MjkxOCBzcXVhcmVyb290IDkwRSsxIC0+IDMwCitzcXR4MjkxOSBzcXVhcmVyb290IDkwRSsyIC0+IDk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTIwIHNxdWFyZXJvb3QgOTBFKzMgLT4gMy4wRSsyCitzcXR4MjkyMSBzcXVhcmVyb290IDAuOTEgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkyMiBzcXVhcmVyb290IDAuMDkxIC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MjMgc3F1YXJlcm9vdCA5MS4wRS0xIC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkyNCBzcXVhcmVyb290IDkxLjAwRS0yIC0+IDAuOTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MjUgc3F1YXJlcm9vdCA5MUUtMyAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTI2IHNxdWFyZXJvb3QgOTFFKzEgLT4gMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5Mjcgc3F1YXJlcm9vdCA5MUUrMiAtPiA5NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkyOCBzcXVhcmVyb290IDkxRSszIC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkyOSBzcXVhcmVyb290IDAuOTIgLT4gMC45NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkzMCBzcXVhcmVyb290IDAuMDkyIC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MzEgc3F1YXJlcm9vdCA5Mi4wRS0xIC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkzMiBzcXVhcmVyb290IDkyLjAwRS0yIC0+IDAuOTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MzMgc3F1YXJlcm9vdCA5MkUtMyAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTM0IHNxdWFyZXJvb3QgOTJFKzEgLT4gMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5MzUgc3F1YXJlcm9vdCA5MkUrMiAtPiA5NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkzNiBzcXVhcmVyb290IDkyRSszIC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkzNyBzcXVhcmVyb290IDAuOTMgLT4gMC45NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MjkzOCBzcXVhcmVyb290IDAuMDkzIC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5Mzkgc3F1YXJlcm9vdCA5My4wRS0xIC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk0MCBzcXVhcmVyb290IDkzLjAwRS0yIC0+IDAuOTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NDEgc3F1YXJlcm9vdCA5M0UtMyAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTQyIHNxdWFyZXJvb3QgOTNFKzEgLT4gMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NDMgc3F1YXJlcm9vdCA5M0UrMiAtPiA5NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk0NCBzcXVhcmVyb290IDkzRSszIC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk0NSBzcXVhcmVyb290IDAuOTQgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk0NiBzcXVhcmVyb290IDAuMDk0IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NDcgc3F1YXJlcm9vdCA5NC4wRS0xIC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk0OCBzcXVhcmVyb290IDk0LjAwRS0yIC0+IDAuOTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NDkgc3F1YXJlcm9vdCA5NEUtMyAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTUwIHNxdWFyZXJvb3QgOTRFKzEgLT4gMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NTEgc3F1YXJlcm9vdCA5NEUrMiAtPiA5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk1MiBzcXVhcmVyb290IDk0RSszIC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk1MyBzcXVhcmVyb290IDAuOTUgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk1NCBzcXVhcmVyb290IDAuMDk1IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NTUgc3F1YXJlcm9vdCA5NS4wRS0xIC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk1NiBzcXVhcmVyb290IDk1LjAwRS0yIC0+IDAuOTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NTcgc3F1YXJlcm9vdCA5NUUtMyAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTU4IHNxdWFyZXJvb3QgOTVFKzEgLT4gMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NTkgc3F1YXJlcm9vdCA5NUUrMiAtPiA5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk2MCBzcXVhcmVyb290IDk1RSszIC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk2MSBzcXVhcmVyb290IDAuOTYgLT4gMC45OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk2MiBzcXVhcmVyb290IDAuMDk2IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NjMgc3F1YXJlcm9vdCA5Ni4wRS0xIC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk2NCBzcXVhcmVyb290IDk2LjAwRS0yIC0+IDAuOTggIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NjUgc3F1YXJlcm9vdCA5NkUtMyAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTY2IHNxdWFyZXJvb3QgOTZFKzEgLT4gMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5Njcgc3F1YXJlcm9vdCA5NkUrMiAtPiA5OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk2OCBzcXVhcmVyb290IDk2RSszIC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk2OSBzcXVhcmVyb290IDAuOTcgLT4gMC45OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk3MCBzcXVhcmVyb290IDAuMDk3IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NzEgc3F1YXJlcm9vdCA5Ny4wRS0xIC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk3MiBzcXVhcmVyb290IDk3LjAwRS0yIC0+IDAuOTggIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NzMgc3F1YXJlcm9vdCA5N0UtMyAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTc0IHNxdWFyZXJvb3QgOTdFKzEgLT4gMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5NzUgc3F1YXJlcm9vdCA5N0UrMiAtPiA5OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk3NiBzcXVhcmVyb290IDk3RSszIC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk3NyBzcXVhcmVyb290IDAuOTggLT4gMC45OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk3OCBzcXVhcmVyb290IDAuMDk4IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5Nzkgc3F1YXJlcm9vdCA5OC4wRS0xIC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk4MCBzcXVhcmVyb290IDk4LjAwRS0yIC0+IDAuOTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5ODEgc3F1YXJlcm9vdCA5OEUtMyAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTgyIHNxdWFyZXJvb3QgOThFKzEgLT4gMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5ODMgc3F1YXJlcm9vdCA5OEUrMiAtPiA5OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk4NCBzcXVhcmVyb290IDk4RSszIC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk4NSBzcXVhcmVyb290IDAuOTkgLT4gMC45OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk4NiBzcXVhcmVyb290IDAuMDk5IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5ODcgc3F1YXJlcm9vdCA5OS4wRS0xIC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk4OCBzcXVhcmVyb290IDk5LjAwRS0yIC0+IDAuOTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5ODkgc3F1YXJlcm9vdCA5OUUtMyAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgyOTkwIHNxdWFyZXJvb3QgOTlFKzEgLT4gMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDI5OTEgc3F1YXJlcm9vdCA5OUUrMiAtPiA5OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mjk5MiBzcXVhcmVyb290IDk5RSszIC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCisKKy0tIFByZWNpc2lvbiAzIHNxdWFyZXJvb3QgdGVzdHMgW2V4aGF1c3RpdmUsIGYgYW5kIGYvMTBdCityb3VuZGluZzogICAgaGFsZl9ldmVuCittYXhFeHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiAgIDMKK3NxdHgzMDAxIHNxdWFyZXJvb3QgMC4xIC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDAyIHNxdWFyZXJvb3QgMC4wMSAtPiAwLjEKK3NxdHgzMDAzIHNxdWFyZXJvb3QgMC4yIC0+IDAuNDQ3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDA0IHNxdWFyZXJvb3QgMC4wMiAtPiAwLjE0MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAwNSBzcXVhcmVyb290IDAuMyAtPiAwLjU0OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAwNiBzcXVhcmVyb290IDAuMDMgLT4gMC4xNzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMDcgc3F1YXJlcm9vdCAwLjQgLT4gMC42MzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMDggc3F1YXJlcm9vdCAwLjA0IC0+IDAuMgorc3F0eDMwMDkgc3F1YXJlcm9vdCAwLjUgLT4gMC43MDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMTAgc3F1YXJlcm9vdCAwLjA1IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDExIHNxdWFyZXJvb3QgMC42IC0+IDAuNzc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDEyIHNxdWFyZXJvb3QgMC4wNiAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAxMyBzcXVhcmVyb290IDAuNyAtPiAwLjgzNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAxNCBzcXVhcmVyb290IDAuMDcgLT4gMC4yNjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMTUgc3F1YXJlcm9vdCAwLjggLT4gMC44OTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMTYgc3F1YXJlcm9vdCAwLjA4IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDE3IHNxdWFyZXJvb3QgMC45IC0+IDAuOTQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDE4IHNxdWFyZXJvb3QgMC4wOSAtPiAwLjMKK3NxdHgzMDE5IHNxdWFyZXJvb3QgMC4xMSAtPiAwLjMzMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAyMCBzcXVhcmVyb290IDAuMDExIC0+IDAuMTA1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDIxIHNxdWFyZXJvb3QgMC4xMiAtPiAwLjM0NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAyMiBzcXVhcmVyb290IDAuMDEyIC0+IDAuMTEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDIzIHNxdWFyZXJvb3QgMC4xMyAtPiAwLjM2MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAyNCBzcXVhcmVyb290IDAuMDEzIC0+IDAuMTE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDI1IHNxdWFyZXJvb3QgMC4xNCAtPiAwLjM3NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAyNiBzcXVhcmVyb290IDAuMDE0IC0+IDAuMTE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDI3IHNxdWFyZXJvb3QgMC4xNSAtPiAwLjM4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzAyOCBzcXVhcmVyb290IDAuMDE1IC0+IDAuMTIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDI5IHNxdWFyZXJvb3QgMC4xNiAtPiAwLjQKK3NxdHgzMDMwIHNxdWFyZXJvb3QgMC4wMTYgLT4gMC4xMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMzEgc3F1YXJlcm9vdCAwLjE3IC0+IDAuNDEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDMyIHNxdWFyZXJvb3QgMC4wMTcgLT4gMC4xMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMzMgc3F1YXJlcm9vdCAwLjE4IC0+IDAuNDI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDM0IHNxdWFyZXJvb3QgMC4wMTggLT4gMC4xMzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMzUgc3F1YXJlcm9vdCAwLjE5IC0+IDAuNDM2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDM2IHNxdWFyZXJvb3QgMC4wMTkgLT4gMC4xMzggIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMzcgc3F1YXJlcm9vdCAwLjIxIC0+IDAuNDU4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDM4IHNxdWFyZXJvb3QgMC4wMjEgLT4gMC4xNDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwMzkgc3F1YXJlcm9vdCAwLjIyIC0+IDAuNDY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDQwIHNxdWFyZXJvb3QgMC4wMjIgLT4gMC4xNDggIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNDEgc3F1YXJlcm9vdCAwLjIzIC0+IDAuNDgwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDQyIHNxdWFyZXJvb3QgMC4wMjMgLT4gMC4xNTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNDMgc3F1YXJlcm9vdCAwLjI0IC0+IDAuNDkwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDQ0IHNxdWFyZXJvb3QgMC4wMjQgLT4gMC4xNTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNDUgc3F1YXJlcm9vdCAwLjI1IC0+IDAuNQorc3F0eDMwNDYgc3F1YXJlcm9vdCAwLjAyNSAtPiAwLjE1OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA0NyBzcXVhcmVyb290IDAuMjYgLT4gMC41MTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNDggc3F1YXJlcm9vdCAwLjAyNiAtPiAwLjE2MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA0OSBzcXVhcmVyb290IDAuMjcgLT4gMC41MjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNTAgc3F1YXJlcm9vdCAwLjAyNyAtPiAwLjE2NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA1MSBzcXVhcmVyb290IDAuMjggLT4gMC41MjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNTIgc3F1YXJlcm9vdCAwLjAyOCAtPiAwLjE2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA1MyBzcXVhcmVyb290IDAuMjkgLT4gMC41MzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNTQgc3F1YXJlcm9vdCAwLjAyOSAtPiAwLjE3MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA1NSBzcXVhcmVyb290IDAuMzEgLT4gMC41NTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNTYgc3F1YXJlcm9vdCAwLjAzMSAtPiAwLjE3NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA1NyBzcXVhcmVyb290IDAuMzIgLT4gMC41NjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNTggc3F1YXJlcm9vdCAwLjAzMiAtPiAwLjE3OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA1OSBzcXVhcmVyb290IDAuMzMgLT4gMC41NzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNjAgc3F1YXJlcm9vdCAwLjAzMyAtPiAwLjE4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA2MSBzcXVhcmVyb290IDAuMzQgLT4gMC41ODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNjIgc3F1YXJlcm9vdCAwLjAzNCAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA2MyBzcXVhcmVyb290IDAuMzUgLT4gMC41OTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwNjQgc3F1YXJlcm9vdCAwLjAzNSAtPiAwLjE4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA2NSBzcXVhcmVyb290IDAuMzYgLT4gMC42CitzcXR4MzA2NiBzcXVhcmVyb290IDAuMDM2IC0+IDAuMTkwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDY3IHNxdWFyZXJvb3QgMC4zNyAtPiAwLjYwOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA2OCBzcXVhcmVyb290IDAuMDM3IC0+IDAuMTkyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDY5IHNxdWFyZXJvb3QgMC4zOCAtPiAwLjYxNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA3MCBzcXVhcmVyb290IDAuMDM4IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDcxIHNxdWFyZXJvb3QgMC4zOSAtPiAwLjYyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA3MiBzcXVhcmVyb290IDAuMDM5IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDczIHNxdWFyZXJvb3QgMC40MSAtPiAwLjY0MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA3NCBzcXVhcmVyb290IDAuMDQxIC0+IDAuMjAyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDc1IHNxdWFyZXJvb3QgMC40MiAtPiAwLjY0OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA3NiBzcXVhcmVyb290IDAuMDQyIC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDc3IHNxdWFyZXJvb3QgMC40MyAtPiAwLjY1NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA3OCBzcXVhcmVyb290IDAuMDQzIC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDc5IHNxdWFyZXJvb3QgMC40NCAtPiAwLjY2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA4MCBzcXVhcmVyb290IDAuMDQ0IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDgxIHNxdWFyZXJvb3QgMC40NSAtPiAwLjY3MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA4MiBzcXVhcmVyb290IDAuMDQ1IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDgzIHNxdWFyZXJvb3QgMC40NiAtPiAwLjY3OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA4NCBzcXVhcmVyb290IDAuMDQ2IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDg1IHNxdWFyZXJvb3QgMC40NyAtPiAwLjY4NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA4NiBzcXVhcmVyb290IDAuMDQ3IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDg3IHNxdWFyZXJvb3QgMC40OCAtPiAwLjY5MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzA4OCBzcXVhcmVyb290IDAuMDQ4IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDg5IHNxdWFyZXJvb3QgMC40OSAtPiAwLjcKK3NxdHgzMDkwIHNxdWFyZXJvb3QgMC4wNDkgLT4gMC4yMjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwOTEgc3F1YXJlcm9vdCAwLjUxIC0+IDAuNzE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDkyIHNxdWFyZXJvb3QgMC4wNTEgLT4gMC4yMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwOTMgc3F1YXJlcm9vdCAwLjUyIC0+IDAuNzIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDk0IHNxdWFyZXJvb3QgMC4wNTIgLT4gMC4yMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDMwOTUgc3F1YXJlcm9vdCAwLjUzIC0+IDAuNzI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDk2IHNxdWFyZXJvb3QgMC4wNTMgLT4gMC4yMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwOTcgc3F1YXJlcm9vdCAwLjU0IC0+IDAuNzM1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMDk4IHNxdWFyZXJvb3QgMC4wNTQgLT4gMC4yMzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMwOTkgc3F1YXJlcm9vdCAwLjU1IC0+IDAuNzQyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTAwIHNxdWFyZXJvb3QgMC4wNTUgLT4gMC4yMzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMDEgc3F1YXJlcm9vdCAwLjU2IC0+IDAuNzQ4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTAyIHNxdWFyZXJvb3QgMC4wNTYgLT4gMC4yMzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMDMgc3F1YXJlcm9vdCAwLjU3IC0+IDAuNzU1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTA0IHNxdWFyZXJvb3QgMC4wNTcgLT4gMC4yMzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMDUgc3F1YXJlcm9vdCAwLjU4IC0+IDAuNzYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTA2IHNxdWFyZXJvb3QgMC4wNTggLT4gMC4yNDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMDcgc3F1YXJlcm9vdCAwLjU5IC0+IDAuNzY4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTA4IHNxdWFyZXJvb3QgMC4wNTkgLT4gMC4yNDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMDkgc3F1YXJlcm9vdCAwLjYxIC0+IDAuNzgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTEwIHNxdWFyZXJvb3QgMC4wNjEgLT4gMC4yNDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMTEgc3F1YXJlcm9vdCAwLjYyIC0+IDAuNzg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTEyIHNxdWFyZXJvb3QgMC4wNjIgLT4gMC4yNDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMTMgc3F1YXJlcm9vdCAwLjYzIC0+IDAuNzk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTE0IHNxdWFyZXJvb3QgMC4wNjMgLT4gMC4yNTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMTUgc3F1YXJlcm9vdCAwLjY0IC0+IDAuOAorc3F0eDMxMTYgc3F1YXJlcm9vdCAwLjA2NCAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzExNyBzcXVhcmVyb290IDAuNjUgLT4gMC44MDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMTggc3F1YXJlcm9vdCAwLjA2NSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzExOSBzcXVhcmVyb290IDAuNjYgLT4gMC44MTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMjAgc3F1YXJlcm9vdCAwLjA2NiAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEyMSBzcXVhcmVyb290IDAuNjcgLT4gMC44MTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMjIgc3F1YXJlcm9vdCAwLjA2NyAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEyMyBzcXVhcmVyb290IDAuNjggLT4gMC44MjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMjQgc3F1YXJlcm9vdCAwLjA2OCAtPiAwLjI2MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEyNSBzcXVhcmVyb290IDAuNjkgLT4gMC44MzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMjYgc3F1YXJlcm9vdCAwLjA2OSAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEyNyBzcXVhcmVyb290IDAuNzEgLT4gMC44NDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMjggc3F1YXJlcm9vdCAwLjA3MSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEyOSBzcXVhcmVyb290IDAuNzIgLT4gMC44NDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMzAgc3F1YXJlcm9vdCAwLjA3MiAtPiAwLjI2OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEzMSBzcXVhcmVyb290IDAuNzMgLT4gMC44NTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMzIgc3F1YXJlcm9vdCAwLjA3MyAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEzMyBzcXVhcmVyb290IDAuNzQgLT4gMC44NjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMzQgc3F1YXJlcm9vdCAwLjA3NCAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEzNSBzcXVhcmVyb290IDAuNzUgLT4gMC44NjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMzYgc3F1YXJlcm9vdCAwLjA3NSAtPiAwLjI3NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEzNyBzcXVhcmVyb290IDAuNzYgLT4gMC44NzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxMzggc3F1YXJlcm9vdCAwLjA3NiAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzEzOSBzcXVhcmVyb290IDAuNzcgLT4gMC44NzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNDAgc3F1YXJlcm9vdCAwLjA3NyAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE0MSBzcXVhcmVyb290IDAuNzggLT4gMC44ODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNDIgc3F1YXJlcm9vdCAwLjA3OCAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE0MyBzcXVhcmVyb290IDAuNzkgLT4gMC44ODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxNDQgc3F1YXJlcm9vdCAwLjA3OSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE0NSBzcXVhcmVyb290IDAuODEgLT4gMC45CitzcXR4MzE0NiBzcXVhcmVyb290IDAuMDgxIC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTQ3IHNxdWFyZXJvb3QgMC44MiAtPiAwLjkwNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE0OCBzcXVhcmVyb290IDAuMDgyIC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTQ5IHNxdWFyZXJvb3QgMC44MyAtPiAwLjkxMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE1MCBzcXVhcmVyb290IDAuMDgzIC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTUxIHNxdWFyZXJvb3QgMC44NCAtPiAwLjkxNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE1MiBzcXVhcmVyb290IDAuMDg0IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTUzIHNxdWFyZXJvb3QgMC44NSAtPiAwLjkyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE1NCBzcXVhcmVyb290IDAuMDg1IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTU1IHNxdWFyZXJvb3QgMC44NiAtPiAwLjkyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE1NiBzcXVhcmVyb290IDAuMDg2IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTU3IHNxdWFyZXJvb3QgMC44NyAtPiAwLjkzMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE1OCBzcXVhcmVyb290IDAuMDg3IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTU5IHNxdWFyZXJvb3QgMC44OCAtPiAwLjkzOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE2MCBzcXVhcmVyb290IDAuMDg4IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTYxIHNxdWFyZXJvb3QgMC44OSAtPiAwLjk0MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE2MiBzcXVhcmVyb290IDAuMDg5IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTYzIHNxdWFyZXJvb3QgMC45MSAtPiAwLjk1NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE2NCBzcXVhcmVyb290IDAuMDkxIC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTY1IHNxdWFyZXJvb3QgMC45MiAtPiAwLjk1OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE2NiBzcXVhcmVyb290IDAuMDkyIC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTY3IHNxdWFyZXJvb3QgMC45MyAtPiAwLjk2NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE2OCBzcXVhcmVyb290IDAuMDkzIC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTY5IHNxdWFyZXJvb3QgMC45NCAtPiAwLjk3MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE3MCBzcXVhcmVyb290IDAuMDk0IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTcxIHNxdWFyZXJvb3QgMC45NSAtPiAwLjk3NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE3MiBzcXVhcmVyb290IDAuMDk1IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTczIHNxdWFyZXJvb3QgMC45NiAtPiAwLjk4MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE3NCBzcXVhcmVyb290IDAuMDk2IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTc1IHNxdWFyZXJvb3QgMC45NyAtPiAwLjk4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE3NiBzcXVhcmVyb290IDAuMDk3IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTc3IHNxdWFyZXJvb3QgMC45OCAtPiAwLjk5MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE3OCBzcXVhcmVyb290IDAuMDk4IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTc5IHNxdWFyZXJvb3QgMC45OSAtPiAwLjk5NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE4MCBzcXVhcmVyb290IDAuMDk5IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTgxIHNxdWFyZXJvb3QgMC4xMDEgLT4gMC4zMTggIEluZXhhY3QgUm91bmRlZAorc3F0eDMxODIgc3F1YXJlcm9vdCAwLjAxMDEgLT4gMC4xMDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxODMgc3F1YXJlcm9vdCAwLjEwMiAtPiAwLjMxOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE4NCBzcXVhcmVyb290IDAuMDEwMiAtPiAwLjEwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE4NSBzcXVhcmVyb290IDAuMTAzIC0+IDAuMzIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTg2IHNxdWFyZXJvb3QgMC4wMTAzIC0+IDAuMTAxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTg3IHNxdWFyZXJvb3QgMC4xMDQgLT4gMC4zMjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxODggc3F1YXJlcm9vdCAwLjAxMDQgLT4gMC4xMDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxODkgc3F1YXJlcm9vdCAwLjEwNSAtPiAwLjMyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE5MCBzcXVhcmVyb290IDAuMDEwNSAtPiAwLjEwMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE5MSBzcXVhcmVyb290IDAuMTA2IC0+IDAuMzI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTkyIHNxdWFyZXJvb3QgMC4wMTA2IC0+IDAuMTAzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTkzIHNxdWFyZXJvb3QgMC4xMDcgLT4gMC4zMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxOTQgc3F1YXJlcm9vdCAwLjAxMDcgLT4gMC4xMDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMxOTUgc3F1YXJlcm9vdCAwLjEwOCAtPiAwLjMyOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE5NiBzcXVhcmVyb290IDAuMDEwOCAtPiAwLjEwNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzE5NyBzcXVhcmVyb290IDAuMTA5IC0+IDAuMzMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTk4IHNxdWFyZXJvb3QgMC4wMTA5IC0+IDAuMTA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMTk5IHNxdWFyZXJvb3QgMC4xMTEgLT4gMC4zMzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMDAgc3F1YXJlcm9vdCAwLjAxMTEgLT4gMC4xMDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMDEgc3F1YXJlcm9vdCAwLjExMiAtPiAwLjMzNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIwMiBzcXVhcmVyb290IDAuMDExMiAtPiAwLjEwNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIwMyBzcXVhcmVyb290IDAuMTEzIC0+IDAuMzM2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjA0IHNxdWFyZXJvb3QgMC4wMTEzIC0+IDAuMTA2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjA1IHNxdWFyZXJvb3QgMC4xMTQgLT4gMC4zMzggIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMDYgc3F1YXJlcm9vdCAwLjAxMTQgLT4gMC4xMDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMDcgc3F1YXJlcm9vdCAwLjExNSAtPiAwLjMzOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIwOCBzcXVhcmVyb290IDAuMDExNSAtPiAwLjEwNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIwOSBzcXVhcmVyb290IDAuMTE2IC0+IDAuMzQxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjEwIHNxdWFyZXJvb3QgMC4wMTE2IC0+IDAuMTA4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjExIHNxdWFyZXJvb3QgMC4xMTcgLT4gMC4zNDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMTIgc3F1YXJlcm9vdCAwLjAxMTcgLT4gMC4xMDggIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMTMgc3F1YXJlcm9vdCAwLjExOCAtPiAwLjM0NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIxNCBzcXVhcmVyb290IDAuMDExOCAtPiAwLjEwOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIxNSBzcXVhcmVyb290IDAuMTE5IC0+IDAuMzQ1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjE2IHNxdWFyZXJvb3QgMC4wMTE5IC0+IDAuMTA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjE3IHNxdWFyZXJvb3QgMC4xMjEgLT4gMC4zNDggIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMTggc3F1YXJlcm9vdCAwLjAxMjEgLT4gMC4xMQorc3F0eDMyMTkgc3F1YXJlcm9vdCAwLjEyMiAtPiAwLjM0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIyMCBzcXVhcmVyb290IDAuMDEyMiAtPiAwLjExMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIyMSBzcXVhcmVyb290IDAuMTIzIC0+IDAuMzUxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjIyIHNxdWFyZXJvb3QgMC4wMTIzIC0+IDAuMTExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjIzIHNxdWFyZXJvb3QgMC4xMjQgLT4gMC4zNTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMjQgc3F1YXJlcm9vdCAwLjAxMjQgLT4gMC4xMTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMjUgc3F1YXJlcm9vdCAwLjEyNSAtPiAwLjM1NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIyNiBzcXVhcmVyb290IDAuMDEyNSAtPiAwLjExMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIyNyBzcXVhcmVyb290IDAuMTI2IC0+IDAuMzU1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjI4IHNxdWFyZXJvb3QgMC4wMTI2IC0+IDAuMTEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjI5IHNxdWFyZXJvb3QgMC4xMjcgLT4gMC4zNTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMzAgc3F1YXJlcm9vdCAwLjAxMjcgLT4gMC4xMTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMzEgc3F1YXJlcm9vdCAwLjEyOCAtPiAwLjM1OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIzMiBzcXVhcmVyb290IDAuMDEyOCAtPiAwLjExMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIzMyBzcXVhcmVyb290IDAuMTI5IC0+IDAuMzU5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjM0IHNxdWFyZXJvb3QgMC4wMTI5IC0+IDAuMTE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjM1IHNxdWFyZXJvb3QgMC4xMzEgLT4gMC4zNjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMzYgc3F1YXJlcm9vdCAwLjAxMzEgLT4gMC4xMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyMzcgc3F1YXJlcm9vdCAwLjEzMiAtPiAwLjM2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIzOCBzcXVhcmVyb290IDAuMDEzMiAtPiAwLjExNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzIzOSBzcXVhcmVyb290IDAuMTMzIC0+IDAuMzY1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjQwIHNxdWFyZXJvb3QgMC4wMTMzIC0+IDAuMTE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjQxIHNxdWFyZXJvb3QgMC4xMzQgLT4gMC4zNjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNDIgc3F1YXJlcm9vdCAwLjAxMzQgLT4gMC4xMTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNDMgc3F1YXJlcm9vdCAwLjEzNSAtPiAwLjM2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI0NCBzcXVhcmVyb290IDAuMDEzNSAtPiAwLjExNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI0NSBzcXVhcmVyb290IDAuMTM2IC0+IDAuMzY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjQ2IHNxdWFyZXJvb3QgMC4wMTM2IC0+IDAuMTE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjQ3IHNxdWFyZXJvb3QgMC4xMzcgLT4gMC4zNzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNDggc3F1YXJlcm9vdCAwLjAxMzcgLT4gMC4xMTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNDkgc3F1YXJlcm9vdCAwLjEzOCAtPiAwLjM3MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI1MCBzcXVhcmVyb290IDAuMDEzOCAtPiAwLjExNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI1MSBzcXVhcmVyb290IDAuMTM5IC0+IDAuMzczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjUyIHNxdWFyZXJvb3QgMC4wMTM5IC0+IDAuMTE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjUzIHNxdWFyZXJvb3QgMC4xNDEgLT4gMC4zNzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNTQgc3F1YXJlcm9vdCAwLjAxNDEgLT4gMC4xMTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNTUgc3F1YXJlcm9vdCAwLjE0MiAtPiAwLjM3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI1NiBzcXVhcmVyb290IDAuMDE0MiAtPiAwLjExOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI1NyBzcXVhcmVyb290IDAuMTQzIC0+IDAuMzc4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjU4IHNxdWFyZXJvb3QgMC4wMTQzIC0+IDAuMTIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjU5IHNxdWFyZXJvb3QgMC4xNDQgLT4gMC4zNzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNjAgc3F1YXJlcm9vdCAwLjAxNDQgLT4gMC4xMgorc3F0eDMyNjEgc3F1YXJlcm9vdCAwLjE0NSAtPiAwLjM4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI2MiBzcXVhcmVyb290IDAuMDE0NSAtPiAwLjEyMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI2MyBzcXVhcmVyb290IDAuMTQ2IC0+IDAuMzgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjY0IHNxdWFyZXJvb3QgMC4wMTQ2IC0+IDAuMTIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjY1IHNxdWFyZXJvb3QgMC4xNDcgLT4gMC4zODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNjYgc3F1YXJlcm9vdCAwLjAxNDcgLT4gMC4xMjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNjcgc3F1YXJlcm9vdCAwLjE0OCAtPiAwLjM4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI2OCBzcXVhcmVyb290IDAuMDE0OCAtPiAwLjEyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI2OSBzcXVhcmVyb290IDAuMTQ5IC0+IDAuMzg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjcwIHNxdWFyZXJvb3QgMC4wMTQ5IC0+IDAuMTIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjcxIHNxdWFyZXJvb3QgMC4xNTEgLT4gMC4zODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNzIgc3F1YXJlcm9vdCAwLjAxNTEgLT4gMC4xMjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNzMgc3F1YXJlcm9vdCAwLjE1MiAtPiAwLjM5MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI3NCBzcXVhcmVyb290IDAuMDE1MiAtPiAwLjEyMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI3NSBzcXVhcmVyb290IDAuMTUzIC0+IDAuMzkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjc2IHNxdWFyZXJvb3QgMC4wMTUzIC0+IDAuMTI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjc3IHNxdWFyZXJvb3QgMC4xNTQgLT4gMC4zOTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNzggc3F1YXJlcm9vdCAwLjAxNTQgLT4gMC4xMjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyNzkgc3F1YXJlcm9vdCAwLjE1NSAtPiAwLjM5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI4MCBzcXVhcmVyb290IDAuMDE1NSAtPiAwLjEyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI4MSBzcXVhcmVyb290IDAuMTU2IC0+IDAuMzk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjgyIHNxdWFyZXJvb3QgMC4wMTU2IC0+IDAuMTI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjgzIHNxdWFyZXJvb3QgMC4xNTcgLT4gMC4zOTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyODQgc3F1YXJlcm9vdCAwLjAxNTcgLT4gMC4xMjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyODUgc3F1YXJlcm9vdCAwLjE1OCAtPiAwLjM5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI4NiBzcXVhcmVyb290IDAuMDE1OCAtPiAwLjEyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI4NyBzcXVhcmVyb290IDAuMTU5IC0+IDAuMzk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjg4IHNxdWFyZXJvb3QgMC4wMTU5IC0+IDAuMTI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjg5IHNxdWFyZXJvb3QgMC4xNjEgLT4gMC40MDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyOTAgc3F1YXJlcm9vdCAwLjAxNjEgLT4gMC4xMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyOTEgc3F1YXJlcm9vdCAwLjE2MiAtPiAwLjQwMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI5MiBzcXVhcmVyb290IDAuMDE2MiAtPiAwLjEyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI5MyBzcXVhcmVyb290IDAuMTYzIC0+IDAuNDA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjk0IHNxdWFyZXJvb3QgMC4wMTYzIC0+IDAuMTI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMjk1IHNxdWFyZXJvb3QgMC4xNjQgLT4gMC40MDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMyOTYgc3F1YXJlcm9vdCAwLjAxNjQgLT4gMC4xMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDMyOTcgc3F1YXJlcm9vdCAwLjE2NSAtPiAwLjQwNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI5OCBzcXVhcmVyb290IDAuMDE2NSAtPiAwLjEyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzI5OSBzcXVhcmVyb290IDAuMTY2IC0+IDAuNDA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzAwIHNxdWFyZXJvb3QgMC4wMTY2IC0+IDAuMTI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzAxIHNxdWFyZXJvb3QgMC4xNjcgLT4gMC40MDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMDIgc3F1YXJlcm9vdCAwLjAxNjcgLT4gMC4xMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMDMgc3F1YXJlcm9vdCAwLjE2OCAtPiAwLjQxMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMwNCBzcXVhcmVyb290IDAuMDE2OCAtPiAwLjEzMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMwNSBzcXVhcmVyb290IDAuMTY5IC0+IDAuNDExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzA2IHNxdWFyZXJvb3QgMC4wMTY5IC0+IDAuMTMKK3NxdHgzMzA3IHNxdWFyZXJvb3QgMC4xNzEgLT4gMC40MTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMDggc3F1YXJlcm9vdCAwLjAxNzEgLT4gMC4xMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMDkgc3F1YXJlcm9vdCAwLjE3MiAtPiAwLjQxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMxMCBzcXVhcmVyb290IDAuMDE3MiAtPiAwLjEzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMxMSBzcXVhcmVyb290IDAuMTczIC0+IDAuNDE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzEyIHNxdWFyZXJvb3QgMC4wMTczIC0+IDAuMTMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzEzIHNxdWFyZXJvb3QgMC4xNzQgLT4gMC40MTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMTQgc3F1YXJlcm9vdCAwLjAxNzQgLT4gMC4xMzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMTUgc3F1YXJlcm9vdCAwLjE3NSAtPiAwLjQxOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMxNiBzcXVhcmVyb290IDAuMDE3NSAtPiAwLjEzMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMxNyBzcXVhcmVyb290IDAuMTc2IC0+IDAuNDIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzE4IHNxdWFyZXJvb3QgMC4wMTc2IC0+IDAuMTMzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzE5IHNxdWFyZXJvb3QgMC4xNzcgLT4gMC40MjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMjAgc3F1YXJlcm9vdCAwLjAxNzcgLT4gMC4xMzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMjEgc3F1YXJlcm9vdCAwLjE3OCAtPiAwLjQyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMyMiBzcXVhcmVyb290IDAuMDE3OCAtPiAwLjEzMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMyMyBzcXVhcmVyb290IDAuMTc5IC0+IDAuNDIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzI0IHNxdWFyZXJvb3QgMC4wMTc5IC0+IDAuMTM0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzI1IHNxdWFyZXJvb3QgMC4xODEgLT4gMC40MjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMjYgc3F1YXJlcm9vdCAwLjAxODEgLT4gMC4xMzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMjcgc3F1YXJlcm9vdCAwLjE4MiAtPiAwLjQyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMyOCBzcXVhcmVyb290IDAuMDE4MiAtPiAwLjEzNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMyOSBzcXVhcmVyb290IDAuMTgzIC0+IDAuNDI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzMwIHNxdWFyZXJvb3QgMC4wMTgzIC0+IDAuMTM1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzMxIHNxdWFyZXJvb3QgMC4xODQgLT4gMC40MjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMzIgc3F1YXJlcm9vdCAwLjAxODQgLT4gMC4xMzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMzMgc3F1YXJlcm9vdCAwLjE4NSAtPiAwLjQzMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMzNCBzcXVhcmVyb290IDAuMDE4NSAtPiAwLjEzNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzMzNSBzcXVhcmVyb290IDAuMTg2IC0+IDAuNDMxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzM2IHNxdWFyZXJvb3QgMC4wMTg2IC0+IDAuMTM2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzM3IHNxdWFyZXJvb3QgMC4xODcgLT4gMC40MzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMzggc3F1YXJlcm9vdCAwLjAxODcgLT4gMC4xMzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzMzkgc3F1YXJlcm9vdCAwLjE4OCAtPiAwLjQzNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM0MCBzcXVhcmVyb290IDAuMDE4OCAtPiAwLjEzNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM0MSBzcXVhcmVyb290IDAuMTg5IC0+IDAuNDM1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzQyIHNxdWFyZXJvb3QgMC4wMTg5IC0+IDAuMTM3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzQzIHNxdWFyZXJvb3QgMC4xOTEgLT4gMC40MzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNDQgc3F1YXJlcm9vdCAwLjAxOTEgLT4gMC4xMzggIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNDUgc3F1YXJlcm9vdCAwLjE5MiAtPiAwLjQzOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM0NiBzcXVhcmVyb290IDAuMDE5MiAtPiAwLjEzOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM0NyBzcXVhcmVyb290IDAuMTkzIC0+IDAuNDM5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzQ4IHNxdWFyZXJvb3QgMC4wMTkzIC0+IDAuMTM5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzQ5IHNxdWFyZXJvb3QgMC4xOTQgLT4gMC40NDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNTAgc3F1YXJlcm9vdCAwLjAxOTQgLT4gMC4xMzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNTEgc3F1YXJlcm9vdCAwLjE5NSAtPiAwLjQ0MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM1MiBzcXVhcmVyb290IDAuMDE5NSAtPiAwLjE0MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM1MyBzcXVhcmVyb290IDAuMTk2IC0+IDAuNDQzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzU0IHNxdWFyZXJvb3QgMC4wMTk2IC0+IDAuMTQKK3NxdHgzMzU1IHNxdWFyZXJvb3QgMC4xOTcgLT4gMC40NDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNTYgc3F1YXJlcm9vdCAwLjAxOTcgLT4gMC4xNDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNTcgc3F1YXJlcm9vdCAwLjE5OCAtPiAwLjQ0NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM1OCBzcXVhcmVyb290IDAuMDE5OCAtPiAwLjE0MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM1OSBzcXVhcmVyb290IDAuMTk5IC0+IDAuNDQ2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzYwIHNxdWFyZXJvb3QgMC4wMTk5IC0+IDAuMTQxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzYxIHNxdWFyZXJvb3QgMC4yMDEgLT4gMC40NDggIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNjIgc3F1YXJlcm9vdCAwLjAyMDEgLT4gMC4xNDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNjMgc3F1YXJlcm9vdCAwLjIwMiAtPiAwLjQ0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM2NCBzcXVhcmVyb290IDAuMDIwMiAtPiAwLjE0MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM2NSBzcXVhcmVyb290IDAuMjAzIC0+IDAuNDUxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzY2IHNxdWFyZXJvb3QgMC4wMjAzIC0+IDAuMTQyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzY3IHNxdWFyZXJvb3QgMC4yMDQgLT4gMC40NTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNjggc3F1YXJlcm9vdCAwLjAyMDQgLT4gMC4xNDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNjkgc3F1YXJlcm9vdCAwLjIwNSAtPiAwLjQ1MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM3MCBzcXVhcmVyb290IDAuMDIwNSAtPiAwLjE0MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM3MSBzcXVhcmVyb290IDAuMjA2IC0+IDAuNDU0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzcyIHNxdWFyZXJvb3QgMC4wMjA2IC0+IDAuMTQ0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzczIHNxdWFyZXJvb3QgMC4yMDcgLT4gMC40NTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNzQgc3F1YXJlcm9vdCAwLjAyMDcgLT4gMC4xNDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzNzUgc3F1YXJlcm9vdCAwLjIwOCAtPiAwLjQ1NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM3NiBzcXVhcmVyb290IDAuMDIwOCAtPiAwLjE0NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM3NyBzcXVhcmVyb290IDAuMjA5IC0+IDAuNDU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzc4IHNxdWFyZXJvb3QgMC4wMjA5IC0+IDAuMTQ1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzc5IHNxdWFyZXJvb3QgMC4yMTEgLT4gMC40NTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzODAgc3F1YXJlcm9vdCAwLjAyMTEgLT4gMC4xNDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzODEgc3F1YXJlcm9vdCAwLjIxMiAtPiAwLjQ2MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM4MiBzcXVhcmVyb290IDAuMDIxMiAtPiAwLjE0NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM4MyBzcXVhcmVyb290IDAuMjEzIC0+IDAuNDYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzg0IHNxdWFyZXJvb3QgMC4wMjEzIC0+IDAuMTQ2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzg1IHNxdWFyZXJvb3QgMC4yMTQgLT4gMC40NjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzODYgc3F1YXJlcm9vdCAwLjAyMTQgLT4gMC4xNDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzODcgc3F1YXJlcm9vdCAwLjIxNSAtPiAwLjQ2NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM4OCBzcXVhcmVyb290IDAuMDIxNSAtPiAwLjE0NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM4OSBzcXVhcmVyb290IDAuMjE2IC0+IDAuNDY1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzkwIHNxdWFyZXJvb3QgMC4wMjE2IC0+IDAuMTQ3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzkxIHNxdWFyZXJvb3QgMC4yMTcgLT4gMC40NjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzOTIgc3F1YXJlcm9vdCAwLjAyMTcgLT4gMC4xNDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzOTMgc3F1YXJlcm9vdCAwLjIxOCAtPiAwLjQ2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM5NCBzcXVhcmVyb290IDAuMDIxOCAtPiAwLjE0OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzM5NSBzcXVhcmVyb290IDAuMjE5IC0+IDAuNDY4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzk2IHNxdWFyZXJvb3QgMC4wMjE5IC0+IDAuMTQ4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzMzk3IHNxdWFyZXJvb3QgMC4yMjEgLT4gMC40NzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzOTggc3F1YXJlcm9vdCAwLjAyMjEgLT4gMC4xNDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDMzOTkgc3F1YXJlcm9vdCAwLjIyMiAtPiAwLjQ3MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQwMCBzcXVhcmVyb290IDAuMDIyMiAtPiAwLjE0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQwMSBzcXVhcmVyb290IDAuMjIzIC0+IDAuNDcyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDAyIHNxdWFyZXJvb3QgMC4wMjIzIC0+IDAuMTQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDAzIHNxdWFyZXJvb3QgMC4yMjQgLT4gMC40NzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MDQgc3F1YXJlcm9vdCAwLjAyMjQgLT4gMC4xNTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MDUgc3F1YXJlcm9vdCAwLjIyNSAtPiAwLjQ3NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQwNiBzcXVhcmVyb290IDAuMDIyNSAtPiAwLjE1CitzcXR4MzQwNyBzcXVhcmVyb290IDAuMjI2IC0+IDAuNDc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDA4IHNxdWFyZXJvb3QgMC4wMjI2IC0+IDAuMTUwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDA5IHNxdWFyZXJvb3QgMC4yMjcgLT4gMC40NzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MTAgc3F1YXJlcm9vdCAwLjAyMjcgLT4gMC4xNTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MTEgc3F1YXJlcm9vdCAwLjIyOCAtPiAwLjQ3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQxMiBzcXVhcmVyb290IDAuMDIyOCAtPiAwLjE1MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQxMyBzcXVhcmVyb290IDAuMjI5IC0+IDAuNDc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDE0IHNxdWFyZXJvb3QgMC4wMjI5IC0+IDAuMTUxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDE1IHNxdWFyZXJvb3QgMC4yMzEgLT4gMC40ODEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MTYgc3F1YXJlcm9vdCAwLjAyMzEgLT4gMC4xNTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MTcgc3F1YXJlcm9vdCAwLjIzMiAtPiAwLjQ4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQxOCBzcXVhcmVyb290IDAuMDIzMiAtPiAwLjE1MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQxOSBzcXVhcmVyb290IDAuMjMzIC0+IDAuNDgzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDIwIHNxdWFyZXJvb3QgMC4wMjMzIC0+IDAuMTUzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDIxIHNxdWFyZXJvb3QgMC4yMzQgLT4gMC40ODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MjIgc3F1YXJlcm9vdCAwLjAyMzQgLT4gMC4xNTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MjMgc3F1YXJlcm9vdCAwLjIzNSAtPiAwLjQ4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQyNCBzcXVhcmVyb290IDAuMDIzNSAtPiAwLjE1MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQyNSBzcXVhcmVyb290IDAuMjM2IC0+IDAuNDg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDI2IHNxdWFyZXJvb3QgMC4wMjM2IC0+IDAuMTU0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDI3IHNxdWFyZXJvb3QgMC4yMzcgLT4gMC40ODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0Mjggc3F1YXJlcm9vdCAwLjAyMzcgLT4gMC4xNTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0Mjkgc3F1YXJlcm9vdCAwLjIzOCAtPiAwLjQ4OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQzMCBzcXVhcmVyb290IDAuMDIzOCAtPiAwLjE1NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQzMSBzcXVhcmVyb290IDAuMjM5IC0+IDAuNDg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDMyIHNxdWFyZXJvb3QgMC4wMjM5IC0+IDAuMTU1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDMzIHNxdWFyZXJvb3QgMC4yNDEgLT4gMC40OTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MzQgc3F1YXJlcm9vdCAwLjAyNDEgLT4gMC4xNTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0MzUgc3F1YXJlcm9vdCAwLjI0MiAtPiAwLjQ5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQzNiBzcXVhcmVyb290IDAuMDI0MiAtPiAwLjE1NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQzNyBzcXVhcmVyb290IDAuMjQzIC0+IDAuNDkzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDM4IHNxdWFyZXJvb3QgMC4wMjQzIC0+IDAuMTU2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDM5IHNxdWFyZXJvb3QgMC4yNDQgLT4gMC40OTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NDAgc3F1YXJlcm9vdCAwLjAyNDQgLT4gMC4xNTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NDEgc3F1YXJlcm9vdCAwLjI0NSAtPiAwLjQ5NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ0MiBzcXVhcmVyb290IDAuMDI0NSAtPiAwLjE1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ0MyBzcXVhcmVyb290IDAuMjQ2IC0+IDAuNDk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDQ0IHNxdWFyZXJvb3QgMC4wMjQ2IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDQ1IHNxdWFyZXJvb3QgMC4yNDcgLT4gMC40OTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NDYgc3F1YXJlcm9vdCAwLjAyNDcgLT4gMC4xNTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NDcgc3F1YXJlcm9vdCAwLjI0OCAtPiAwLjQ5OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ0OCBzcXVhcmVyb290IDAuMDI0OCAtPiAwLjE1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ0OSBzcXVhcmVyb290IDAuMjQ5IC0+IDAuNDk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDUwIHNxdWFyZXJvb3QgMC4wMjQ5IC0+IDAuMTU4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDUxIHNxdWFyZXJvb3QgMC4yNTEgLT4gMC41MDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NTIgc3F1YXJlcm9vdCAwLjAyNTEgLT4gMC4xNTggIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NTMgc3F1YXJlcm9vdCAwLjI1MiAtPiAwLjUwMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ1NCBzcXVhcmVyb290IDAuMDI1MiAtPiAwLjE1OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ1NSBzcXVhcmVyb290IDAuMjUzIC0+IDAuNTAzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDU2IHNxdWFyZXJvb3QgMC4wMjUzIC0+IDAuMTU5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDU3IHNxdWFyZXJvb3QgMC4yNTQgLT4gMC41MDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NTggc3F1YXJlcm9vdCAwLjAyNTQgLT4gMC4xNTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NTkgc3F1YXJlcm9vdCAwLjI1NSAtPiAwLjUwNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ2MCBzcXVhcmVyb290IDAuMDI1NSAtPiAwLjE2MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ2MSBzcXVhcmVyb290IDAuMjU2IC0+IDAuNTA2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDYyIHNxdWFyZXJvb3QgMC4wMjU2IC0+IDAuMTYKK3NxdHgzNDYzIHNxdWFyZXJvb3QgMC4yNTcgLT4gMC41MDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NjQgc3F1YXJlcm9vdCAwLjAyNTcgLT4gMC4xNjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NjUgc3F1YXJlcm9vdCAwLjI1OCAtPiAwLjUwOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ2NiBzcXVhcmVyb290IDAuMDI1OCAtPiAwLjE2MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ2NyBzcXVhcmVyb290IDAuMjU5IC0+IDAuNTA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDY4IHNxdWFyZXJvb3QgMC4wMjU5IC0+IDAuMTYxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDY5IHNxdWFyZXJvb3QgMC4yNjEgLT4gMC41MTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NzAgc3F1YXJlcm9vdCAwLjAyNjEgLT4gMC4xNjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NzEgc3F1YXJlcm9vdCAwLjI2MiAtPiAwLjUxMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ3MiBzcXVhcmVyb290IDAuMDI2MiAtPiAwLjE2MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ3MyBzcXVhcmVyb290IDAuMjYzIC0+IDAuNTEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDc0IHNxdWFyZXJvb3QgMC4wMjYzIC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDc1IHNxdWFyZXJvb3QgMC4yNjQgLT4gMC41MTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0NzYgc3F1YXJlcm9vdCAwLjAyNjQgLT4gMC4xNjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0Nzcgc3F1YXJlcm9vdCAwLjI2NSAtPiAwLjUxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ3OCBzcXVhcmVyb290IDAuMDI2NSAtPiAwLjE2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ3OSBzcXVhcmVyb290IDAuMjY2IC0+IDAuNTE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDgwIHNxdWFyZXJvb3QgMC4wMjY2IC0+IDAuMTYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDgxIHNxdWFyZXJvb3QgMC4yNjcgLT4gMC41MTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0ODIgc3F1YXJlcm9vdCAwLjAyNjcgLT4gMC4xNjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0ODMgc3F1YXJlcm9vdCAwLjI2OCAtPiAwLjUxOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ4NCBzcXVhcmVyb290IDAuMDI2OCAtPiAwLjE2NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ4NSBzcXVhcmVyb290IDAuMjY5IC0+IDAuNTE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDg2IHNxdWFyZXJvb3QgMC4wMjY5IC0+IDAuMTY0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDg3IHNxdWFyZXJvb3QgMC4yNzEgLT4gMC41MjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0ODggc3F1YXJlcm9vdCAwLjAyNzEgLT4gMC4xNjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0ODkgc3F1YXJlcm9vdCAwLjI3MiAtPiAwLjUyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ5MCBzcXVhcmVyb290IDAuMDI3MiAtPiAwLjE2NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ5MSBzcXVhcmVyb290IDAuMjczIC0+IDAuNTIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDkyIHNxdWFyZXJvb3QgMC4wMjczIC0+IDAuMTY1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDkzIHNxdWFyZXJvb3QgMC4yNzQgLT4gMC41MjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0OTQgc3F1YXJlcm9vdCAwLjAyNzQgLT4gMC4xNjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM0OTUgc3F1YXJlcm9vdCAwLjI3NSAtPiAwLjUyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ5NiBzcXVhcmVyb290IDAuMDI3NSAtPiAwLjE2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzQ5NyBzcXVhcmVyb290IDAuMjc2IC0+IDAuNTI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDk4IHNxdWFyZXJvb3QgMC4wMjc2IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNDk5IHNxdWFyZXJvb3QgMC4yNzcgLT4gMC41MjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MDAgc3F1YXJlcm9vdCAwLjAyNzcgLT4gMC4xNjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MDEgc3F1YXJlcm9vdCAwLjI3OCAtPiAwLjUyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUwMiBzcXVhcmVyb290IDAuMDI3OCAtPiAwLjE2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUwMyBzcXVhcmVyb290IDAuMjc5IC0+IDAuNTI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTA0IHNxdWFyZXJvb3QgMC4wMjc5IC0+IDAuMTY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTA1IHNxdWFyZXJvb3QgMC4yODEgLT4gMC41MzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MDYgc3F1YXJlcm9vdCAwLjAyODEgLT4gMC4xNjggIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MDcgc3F1YXJlcm9vdCAwLjI4MiAtPiAwLjUzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUwOCBzcXVhcmVyb290IDAuMDI4MiAtPiAwLjE2OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUwOSBzcXVhcmVyb290IDAuMjgzIC0+IDAuNTMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTEwIHNxdWFyZXJvb3QgMC4wMjgzIC0+IDAuMTY4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTExIHNxdWFyZXJvb3QgMC4yODQgLT4gMC41MzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MTIgc3F1YXJlcm9vdCAwLjAyODQgLT4gMC4xNjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MTMgc3F1YXJlcm9vdCAwLjI4NSAtPiAwLjUzNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUxNCBzcXVhcmVyb290IDAuMDI4NSAtPiAwLjE2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUxNSBzcXVhcmVyb290IDAuMjg2IC0+IDAuNTM1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTE2IHNxdWFyZXJvb3QgMC4wMjg2IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTE3IHNxdWFyZXJvb3QgMC4yODcgLT4gMC41MzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MTggc3F1YXJlcm9vdCAwLjAyODcgLT4gMC4xNjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MTkgc3F1YXJlcm9vdCAwLjI4OCAtPiAwLjUzNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUyMCBzcXVhcmVyb290IDAuMDI4OCAtPiAwLjE3MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUyMSBzcXVhcmVyb290IDAuMjg5IC0+IDAuNTM4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTIyIHNxdWFyZXJvb3QgMC4wMjg5IC0+IDAuMTcKK3NxdHgzNTIzIHNxdWFyZXJvb3QgMC4yOTEgLT4gMC41MzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MjQgc3F1YXJlcm9vdCAwLjAyOTEgLT4gMC4xNzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MjUgc3F1YXJlcm9vdCAwLjI5MiAtPiAwLjU0MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUyNiBzcXVhcmVyb290IDAuMDI5MiAtPiAwLjE3MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUyNyBzcXVhcmVyb290IDAuMjkzIC0+IDAuNTQxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTI4IHNxdWFyZXJvb3QgMC4wMjkzIC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTI5IHNxdWFyZXJvb3QgMC4yOTQgLT4gMC41NDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MzAgc3F1YXJlcm9vdCAwLjAyOTQgLT4gMC4xNzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MzEgc3F1YXJlcm9vdCAwLjI5NSAtPiAwLjU0MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUzMiBzcXVhcmVyb290IDAuMDI5NSAtPiAwLjE3MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUzMyBzcXVhcmVyb290IDAuMjk2IC0+IDAuNTQ0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTM0IHNxdWFyZXJvb3QgMC4wMjk2IC0+IDAuMTcyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTM1IHNxdWFyZXJvb3QgMC4yOTcgLT4gMC41NDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1MzYgc3F1YXJlcm9vdCAwLjAyOTcgLT4gMC4xNzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1Mzcgc3F1YXJlcm9vdCAwLjI5OCAtPiAwLjU0NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUzOCBzcXVhcmVyb290IDAuMDI5OCAtPiAwLjE3MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzUzOSBzcXVhcmVyb290IDAuMjk5IC0+IDAuNTQ3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTQwIHNxdWFyZXJvb3QgMC4wMjk5IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTQxIHNxdWFyZXJvb3QgMC4zMDEgLT4gMC41NDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NDIgc3F1YXJlcm9vdCAwLjAzMDEgLT4gMC4xNzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NDMgc3F1YXJlcm9vdCAwLjMwMiAtPiAwLjU1MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU0NCBzcXVhcmVyb290IDAuMDMwMiAtPiAwLjE3NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU0NSBzcXVhcmVyb290IDAuMzAzIC0+IDAuNTUwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTQ2IHNxdWFyZXJvb3QgMC4wMzAzIC0+IDAuMTc0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTQ3IHNxdWFyZXJvb3QgMC4zMDQgLT4gMC41NTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NDggc3F1YXJlcm9vdCAwLjAzMDQgLT4gMC4xNzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NDkgc3F1YXJlcm9vdCAwLjMwNSAtPiAwLjU1MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU1MCBzcXVhcmVyb290IDAuMDMwNSAtPiAwLjE3NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU1MSBzcXVhcmVyb290IDAuMzA2IC0+IDAuNTUzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTUyIHNxdWFyZXJvb3QgMC4wMzA2IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTUzIHNxdWFyZXJvb3QgMC4zMDcgLT4gMC41NTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NTQgc3F1YXJlcm9vdCAwLjAzMDcgLT4gMC4xNzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NTUgc3F1YXJlcm9vdCAwLjMwOCAtPiAwLjU1NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU1NiBzcXVhcmVyb290IDAuMDMwOCAtPiAwLjE3NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU1NyBzcXVhcmVyb290IDAuMzA5IC0+IDAuNTU2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTU4IHNxdWFyZXJvb3QgMC4wMzA5IC0+IDAuMTc2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTU5IHNxdWFyZXJvb3QgMC4zMTEgLT4gMC41NTggIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NjAgc3F1YXJlcm9vdCAwLjAzMTEgLT4gMC4xNzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NjEgc3F1YXJlcm9vdCAwLjMxMiAtPiAwLjU1OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU2MiBzcXVhcmVyb290IDAuMDMxMiAtPiAwLjE3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU2MyBzcXVhcmVyb290IDAuMzEzIC0+IDAuNTU5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTY0IHNxdWFyZXJvb3QgMC4wMzEzIC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTY1IHNxdWFyZXJvb3QgMC4zMTQgLT4gMC41NjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NjYgc3F1YXJlcm9vdCAwLjAzMTQgLT4gMC4xNzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1Njcgc3F1YXJlcm9vdCAwLjMxNSAtPiAwLjU2MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU2OCBzcXVhcmVyb290IDAuMDMxNSAtPiAwLjE3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU2OSBzcXVhcmVyb290IDAuMzE2IC0+IDAuNTYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTcwIHNxdWFyZXJvb3QgMC4wMzE2IC0+IDAuMTc4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTcxIHNxdWFyZXJvb3QgMC4zMTcgLT4gMC41NjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NzIgc3F1YXJlcm9vdCAwLjAzMTcgLT4gMC4xNzggIEluZXhhY3QgUm91bmRlZAorc3F0eDM1NzMgc3F1YXJlcm9vdCAwLjMxOCAtPiAwLjU2NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU3NCBzcXVhcmVyb290IDAuMDMxOCAtPiAwLjE3OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU3NSBzcXVhcmVyb290IDAuMzE5IC0+IDAuNTY1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTc2IHNxdWFyZXJvb3QgMC4wMzE5IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTc3IHNxdWFyZXJvb3QgMC4zMjEgLT4gMC41NjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1Nzggc3F1YXJlcm9vdCAwLjAzMjEgLT4gMC4xNzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1Nzkgc3F1YXJlcm9vdCAwLjMyMiAtPiAwLjU2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU4MCBzcXVhcmVyb290IDAuMDMyMiAtPiAwLjE3OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU4MSBzcXVhcmVyb290IDAuMzIzIC0+IDAuNTY4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTgyIHNxdWFyZXJvb3QgMC4wMzIzIC0+IDAuMTgwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTgzIHNxdWFyZXJvb3QgMC4zMjQgLT4gMC41NjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1ODQgc3F1YXJlcm9vdCAwLjAzMjQgLT4gMC4xOAorc3F0eDM1ODUgc3F1YXJlcm9vdCAwLjMyNSAtPiAwLjU3MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU4NiBzcXVhcmVyb290IDAuMDMyNSAtPiAwLjE4MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU4NyBzcXVhcmVyb290IDAuMzI2IC0+IDAuNTcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTg4IHNxdWFyZXJvb3QgMC4wMzI2IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTg5IHNxdWFyZXJvb3QgMC4zMjcgLT4gMC41NzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1OTAgc3F1YXJlcm9vdCAwLjAzMjcgLT4gMC4xODEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1OTEgc3F1YXJlcm9vdCAwLjMyOCAtPiAwLjU3MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU5MiBzcXVhcmVyb290IDAuMDMyOCAtPiAwLjE4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU5MyBzcXVhcmVyb290IDAuMzI5IC0+IDAuNTc0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTk0IHNxdWFyZXJvb3QgMC4wMzI5IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNTk1IHNxdWFyZXJvb3QgMC4zMzEgLT4gMC41NzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1OTYgc3F1YXJlcm9vdCAwLjAzMzEgLT4gMC4xODIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM1OTcgc3F1YXJlcm9vdCAwLjMzMiAtPiAwLjU3NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU5OCBzcXVhcmVyb290IDAuMDMzMiAtPiAwLjE4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzU5OSBzcXVhcmVyb290IDAuMzMzIC0+IDAuNTc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjAwIHNxdWFyZXJvb3QgMC4wMzMzIC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjAxIHNxdWFyZXJvb3QgMC4zMzQgLT4gMC41NzggIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MDIgc3F1YXJlcm9vdCAwLjAzMzQgLT4gMC4xODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MDMgc3F1YXJlcm9vdCAwLjMzNSAtPiAwLjU3OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYwNCBzcXVhcmVyb290IDAuMDMzNSAtPiAwLjE4MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYwNSBzcXVhcmVyb290IDAuMzM2IC0+IDAuNTgwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjA2IHNxdWFyZXJvb3QgMC4wMzM2IC0+IDAuMTgzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjA3IHNxdWFyZXJvb3QgMC4zMzcgLT4gMC41ODEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MDggc3F1YXJlcm9vdCAwLjAzMzcgLT4gMC4xODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MDkgc3F1YXJlcm9vdCAwLjMzOCAtPiAwLjU4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYxMCBzcXVhcmVyb290IDAuMDMzOCAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYxMSBzcXVhcmVyb290IDAuMzM5IC0+IDAuNTgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjEyIHNxdWFyZXJvb3QgMC4wMzM5IC0+IDAuMTg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjEzIHNxdWFyZXJvb3QgMC4zNDEgLT4gMC41ODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MTQgc3F1YXJlcm9vdCAwLjAzNDEgLT4gMC4xODUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MTUgc3F1YXJlcm9vdCAwLjM0MiAtPiAwLjU4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYxNiBzcXVhcmVyb290IDAuMDM0MiAtPiAwLjE4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYxNyBzcXVhcmVyb290IDAuMzQzIC0+IDAuNTg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjE4IHNxdWFyZXJvb3QgMC4wMzQzIC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjE5IHNxdWFyZXJvb3QgMC4zNDQgLT4gMC41ODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MjAgc3F1YXJlcm9vdCAwLjAzNDQgLT4gMC4xODUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MjEgc3F1YXJlcm9vdCAwLjM0NSAtPiAwLjU4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYyMiBzcXVhcmVyb290IDAuMDM0NSAtPiAwLjE4NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYyMyBzcXVhcmVyb290IDAuMzQ2IC0+IDAuNTg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjI0IHNxdWFyZXJvb3QgMC4wMzQ2IC0+IDAuMTg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjI1IHNxdWFyZXJvb3QgMC4zNDcgLT4gMC41ODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MjYgc3F1YXJlcm9vdCAwLjAzNDcgLT4gMC4xODYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2Mjcgc3F1YXJlcm9vdCAwLjM0OCAtPiAwLjU5MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYyOCBzcXVhcmVyb290IDAuMDM0OCAtPiAwLjE4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYyOSBzcXVhcmVyb290IDAuMzQ5IC0+IDAuNTkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjMwIHNxdWFyZXJvb3QgMC4wMzQ5IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjMxIHNxdWFyZXJvb3QgMC4zNTEgLT4gMC41OTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MzIgc3F1YXJlcm9vdCAwLjAzNTEgLT4gMC4xODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2MzMgc3F1YXJlcm9vdCAwLjM1MiAtPiAwLjU5MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYzNCBzcXVhcmVyb290IDAuMDM1MiAtPiAwLjE4OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzYzNSBzcXVhcmVyb290IDAuMzUzIC0+IDAuNTk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjM2IHNxdWFyZXJvb3QgMC4wMzUzIC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjM3IHNxdWFyZXJvb3QgMC4zNTQgLT4gMC41OTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2Mzggc3F1YXJlcm9vdCAwLjAzNTQgLT4gMC4xODggIEluZXhhY3QgUm91bmRlZAorc3F0eDM2Mzkgc3F1YXJlcm9vdCAwLjM1NSAtPiAwLjU5NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY0MCBzcXVhcmVyb290IDAuMDM1NSAtPiAwLjE4OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY0MSBzcXVhcmVyb290IDAuMzU2IC0+IDAuNTk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjQyIHNxdWFyZXJvb3QgMC4wMzU2IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjQzIHNxdWFyZXJvb3QgMC4zNTcgLT4gMC41OTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NDQgc3F1YXJlcm9vdCAwLjAzNTcgLT4gMC4xODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NDUgc3F1YXJlcm9vdCAwLjM1OCAtPiAwLjU5OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY0NiBzcXVhcmVyb290IDAuMDM1OCAtPiAwLjE4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY0NyBzcXVhcmVyb290IDAuMzU5IC0+IDAuNTk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjQ4IHNxdWFyZXJvb3QgMC4wMzU5IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjQ5IHNxdWFyZXJvb3QgMC4zNjEgLT4gMC42MDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NTAgc3F1YXJlcm9vdCAwLjAzNjEgLT4gMC4xOQorc3F0eDM2NTEgc3F1YXJlcm9vdCAwLjM2MiAtPiAwLjYwMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY1MiBzcXVhcmVyb290IDAuMDM2MiAtPiAwLjE5MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY1MyBzcXVhcmVyb290IDAuMzYzIC0+IDAuNjAyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjU0IHNxdWFyZXJvb3QgMC4wMzYzIC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjU1IHNxdWFyZXJvb3QgMC4zNjQgLT4gMC42MDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NTYgc3F1YXJlcm9vdCAwLjAzNjQgLT4gMC4xOTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NTcgc3F1YXJlcm9vdCAwLjM2NSAtPiAwLjYwNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY1OCBzcXVhcmVyb290IDAuMDM2NSAtPiAwLjE5MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY1OSBzcXVhcmVyb290IDAuMzY2IC0+IDAuNjA1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjYwIHNxdWFyZXJvb3QgMC4wMzY2IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjYxIHNxdWFyZXJvb3QgMC4zNjcgLT4gMC42MDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NjIgc3F1YXJlcm9vdCAwLjAzNjcgLT4gMC4xOTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NjMgc3F1YXJlcm9vdCAwLjM2OCAtPiAwLjYwNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY2NCBzcXVhcmVyb290IDAuMDM2OCAtPiAwLjE5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY2NSBzcXVhcmVyb290IDAuMzY5IC0+IDAuNjA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjY2IHNxdWFyZXJvb3QgMC4wMzY5IC0+IDAuMTkyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjY3IHNxdWFyZXJvb3QgMC4zNzEgLT4gMC42MDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2Njggc3F1YXJlcm9vdCAwLjAzNzEgLT4gMC4xOTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2Njkgc3F1YXJlcm9vdCAwLjM3MiAtPiAwLjYxMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY3MCBzcXVhcmVyb290IDAuMDM3MiAtPiAwLjE5MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY3MSBzcXVhcmVyb290IDAuMzczIC0+IDAuNjExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjcyIHNxdWFyZXJvb3QgMC4wMzczIC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjczIHNxdWFyZXJvb3QgMC4zNzQgLT4gMC42MTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NzQgc3F1YXJlcm9vdCAwLjAzNzQgLT4gMC4xOTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2NzUgc3F1YXJlcm9vdCAwLjM3NSAtPiAwLjYxMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY3NiBzcXVhcmVyb290IDAuMDM3NSAtPiAwLjE5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY3NyBzcXVhcmVyb290IDAuMzc2IC0+IDAuNjEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjc4IHNxdWFyZXJvb3QgMC4wMzc2IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjc5IHNxdWFyZXJvb3QgMC4zNzcgLT4gMC42MTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2ODAgc3F1YXJlcm9vdCAwLjAzNzcgLT4gMC4xOTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2ODEgc3F1YXJlcm9vdCAwLjM3OCAtPiAwLjYxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY4MiBzcXVhcmVyb290IDAuMDM3OCAtPiAwLjE5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY4MyBzcXVhcmVyb290IDAuMzc5IC0+IDAuNjE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjg0IHNxdWFyZXJvb3QgMC4wMzc5IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjg1IHNxdWFyZXJvb3QgMC4zODEgLT4gMC42MTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2ODYgc3F1YXJlcm9vdCAwLjAzODEgLT4gMC4xOTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2ODcgc3F1YXJlcm9vdCAwLjM4MiAtPiAwLjYxOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY4OCBzcXVhcmVyb290IDAuMDM4MiAtPiAwLjE5NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY4OSBzcXVhcmVyb290IDAuMzgzIC0+IDAuNjE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjkwIHNxdWFyZXJvb3QgMC4wMzgzIC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjkxIHNxdWFyZXJvb3QgMC4zODQgLT4gMC42MjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2OTIgc3F1YXJlcm9vdCAwLjAzODQgLT4gMC4xOTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2OTMgc3F1YXJlcm9vdCAwLjM4NSAtPiAwLjYyMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY5NCBzcXVhcmVyb290IDAuMDM4NSAtPiAwLjE5NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzY5NSBzcXVhcmVyb290IDAuMzg2IC0+IDAuNjIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjk2IHNxdWFyZXJvb3QgMC4wMzg2IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNjk3IHNxdWFyZXJvb3QgMC4zODcgLT4gMC42MjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2OTggc3F1YXJlcm9vdCAwLjAzODcgLT4gMC4xOTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM2OTkgc3F1YXJlcm9vdCAwLjM4OCAtPiAwLjYyMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcwMCBzcXVhcmVyb290IDAuMDM4OCAtPiAwLjE5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcwMSBzcXVhcmVyb290IDAuMzg5IC0+IDAuNjI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzAyIHNxdWFyZXJvb3QgMC4wMzg5IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzAzIHNxdWFyZXJvb3QgMC4zOTEgLT4gMC42MjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MDQgc3F1YXJlcm9vdCAwLjAzOTEgLT4gMC4xOTggIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MDUgc3F1YXJlcm9vdCAwLjM5MiAtPiAwLjYyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcwNiBzcXVhcmVyb290IDAuMDM5MiAtPiAwLjE5OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcwNyBzcXVhcmVyb290IDAuMzkzIC0+IDAuNjI3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzA4IHNxdWFyZXJvb3QgMC4wMzkzIC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzA5IHNxdWFyZXJvb3QgMC4zOTQgLT4gMC42MjggIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MTAgc3F1YXJlcm9vdCAwLjAzOTQgLT4gMC4xOTggIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MTEgc3F1YXJlcm9vdCAwLjM5NSAtPiAwLjYyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcxMiBzcXVhcmVyb290IDAuMDM5NSAtPiAwLjE5OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcxMyBzcXVhcmVyb290IDAuMzk2IC0+IDAuNjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzE0IHNxdWFyZXJvb3QgMC4wMzk2IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzE1IHNxdWFyZXJvb3QgMC4zOTcgLT4gMC42MzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MTYgc3F1YXJlcm9vdCAwLjAzOTcgLT4gMC4xOTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MTcgc3F1YXJlcm9vdCAwLjM5OCAtPiAwLjYzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcxOCBzcXVhcmVyb290IDAuMDM5OCAtPiAwLjE5OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcxOSBzcXVhcmVyb290IDAuMzk5IC0+IDAuNjMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzIwIHNxdWFyZXJvb3QgMC4wMzk5IC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzIxIHNxdWFyZXJvb3QgMC40MDEgLT4gMC42MzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MjIgc3F1YXJlcm9vdCAwLjA0MDEgLT4gMC4yMDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MjMgc3F1YXJlcm9vdCAwLjQwMiAtPiAwLjYzNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcyNCBzcXVhcmVyb290IDAuMDQwMiAtPiAwLjIwMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzcyNSBzcXVhcmVyb290IDAuNDAzIC0+IDAuNjM1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzI2IHNxdWFyZXJvb3QgMC4wNDAzIC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzI3IHNxdWFyZXJvb3QgMC40MDQgLT4gMC42MzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3Mjggc3F1YXJlcm9vdCAwLjA0MDQgLT4gMC4yMDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3Mjkgc3F1YXJlcm9vdCAwLjQwNSAtPiAwLjYzNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzczMCBzcXVhcmVyb290IDAuMDQwNSAtPiAwLjIwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzczMSBzcXVhcmVyb290IDAuNDA2IC0+IDAuNjM3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzMyIHNxdWFyZXJvb3QgMC4wNDA2IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzMzIHNxdWFyZXJvb3QgMC40MDcgLT4gMC42MzggIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MzQgc3F1YXJlcm9vdCAwLjA0MDcgLT4gMC4yMDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3MzUgc3F1YXJlcm9vdCAwLjQwOCAtPiAwLjYzOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzczNiBzcXVhcmVyb290IDAuMDQwOCAtPiAwLjIwMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzczNyBzcXVhcmVyb290IDAuNDA5IC0+IDAuNjQwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzM4IHNxdWFyZXJvb3QgMC4wNDA5IC0+IDAuMjAyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzM5IHNxdWFyZXJvb3QgMC40MTEgLT4gMC42NDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NDAgc3F1YXJlcm9vdCAwLjA0MTEgLT4gMC4yMDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NDEgc3F1YXJlcm9vdCAwLjQxMiAtPiAwLjY0MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc0MiBzcXVhcmVyb290IDAuMDQxMiAtPiAwLjIwMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc0MyBzcXVhcmVyb290IDAuNDEzIC0+IDAuNjQzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzQ0IHNxdWFyZXJvb3QgMC4wNDEzIC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzQ1IHNxdWFyZXJvb3QgMC40MTQgLT4gMC42NDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NDYgc3F1YXJlcm9vdCAwLjA0MTQgLT4gMC4yMDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NDcgc3F1YXJlcm9vdCAwLjQxNSAtPiAwLjY0NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc0OCBzcXVhcmVyb290IDAuMDQxNSAtPiAwLjIwNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc0OSBzcXVhcmVyb290IDAuNDE2IC0+IDAuNjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzUwIHNxdWFyZXJvb3QgMC4wNDE2IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzUxIHNxdWFyZXJvb3QgMC40MTcgLT4gMC42NDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NTIgc3F1YXJlcm9vdCAwLjA0MTcgLT4gMC4yMDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NTMgc3F1YXJlcm9vdCAwLjQxOCAtPiAwLjY0NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc1NCBzcXVhcmVyb290IDAuMDQxOCAtPiAwLjIwNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc1NSBzcXVhcmVyb290IDAuNDE5IC0+IDAuNjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzU2IHNxdWFyZXJvb3QgMC4wNDE5IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzU3IHNxdWFyZXJvb3QgMC40MjEgLT4gMC42NDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NTggc3F1YXJlcm9vdCAwLjA0MjEgLT4gMC4yMDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NTkgc3F1YXJlcm9vdCAwLjQyMiAtPiAwLjY1MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc2MCBzcXVhcmVyb290IDAuMDQyMiAtPiAwLjIwNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc2MSBzcXVhcmVyb290IDAuNDIzIC0+IDAuNjUwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzYyIHNxdWFyZXJvb3QgMC4wNDIzIC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzYzIHNxdWFyZXJvb3QgMC40MjQgLT4gMC42NTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NjQgc3F1YXJlcm9vdCAwLjA0MjQgLT4gMC4yMDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NjUgc3F1YXJlcm9vdCAwLjQyNSAtPiAwLjY1MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc2NiBzcXVhcmVyb290IDAuMDQyNSAtPiAwLjIwNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc2NyBzcXVhcmVyb290IDAuNDI2IC0+IDAuNjUzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzY4IHNxdWFyZXJvb3QgMC4wNDI2IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzY5IHNxdWFyZXJvb3QgMC40MjcgLT4gMC42NTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NzAgc3F1YXJlcm9vdCAwLjA0MjcgLT4gMC4yMDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NzEgc3F1YXJlcm9vdCAwLjQyOCAtPiAwLjY1NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc3MiBzcXVhcmVyb290IDAuMDQyOCAtPiAwLjIwNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc3MyBzcXVhcmVyb290IDAuNDI5IC0+IDAuNjU1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzc0IHNxdWFyZXJvb3QgMC4wNDI5IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzc1IHNxdWFyZXJvb3QgMC40MzEgLT4gMC42NTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3NzYgc3F1YXJlcm9vdCAwLjA0MzEgLT4gMC4yMDggIEluZXhhY3QgUm91bmRlZAorc3F0eDM3Nzcgc3F1YXJlcm9vdCAwLjQzMiAtPiAwLjY1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc3OCBzcXVhcmVyb290IDAuMDQzMiAtPiAwLjIwOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc3OSBzcXVhcmVyb290IDAuNDMzIC0+IDAuNjU4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzgwIHNxdWFyZXJvb3QgMC4wNDMzIC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzgxIHNxdWFyZXJvb3QgMC40MzQgLT4gMC42NTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3ODIgc3F1YXJlcm9vdCAwLjA0MzQgLT4gMC4yMDggIEluZXhhY3QgUm91bmRlZAorc3F0eDM3ODMgc3F1YXJlcm9vdCAwLjQzNSAtPiAwLjY2MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc4NCBzcXVhcmVyb290IDAuMDQzNSAtPiAwLjIwOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc4NSBzcXVhcmVyb290IDAuNDM2IC0+IDAuNjYwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzg2IHNxdWFyZXJvb3QgMC4wNDM2IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzg3IHNxdWFyZXJvb3QgMC40MzcgLT4gMC42NjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3ODggc3F1YXJlcm9vdCAwLjA0MzcgLT4gMC4yMDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3ODkgc3F1YXJlcm9vdCAwLjQzOCAtPiAwLjY2MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc5MCBzcXVhcmVyb290IDAuMDQzOCAtPiAwLjIwOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc5MSBzcXVhcmVyb290IDAuNDM5IC0+IDAuNjYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzkyIHNxdWFyZXJvb3QgMC4wNDM5IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzkzIHNxdWFyZXJvb3QgMC40NDEgLT4gMC42NjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM3OTQgc3F1YXJlcm9vdCAwLjA0NDEgLT4gMC4yMQorc3F0eDM3OTUgc3F1YXJlcm9vdCAwLjQ0MiAtPiAwLjY2NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc5NiBzcXVhcmVyb290IDAuMDQ0MiAtPiAwLjIxMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzc5NyBzcXVhcmVyb290IDAuNDQzIC0+IDAuNjY2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzk4IHNxdWFyZXJvb3QgMC4wNDQzIC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzNzk5IHNxdWFyZXJvb3QgMC40NDQgLT4gMC42NjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MDAgc3F1YXJlcm9vdCAwLjA0NDQgLT4gMC4yMTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MDEgc3F1YXJlcm9vdCAwLjQ0NSAtPiAwLjY2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgwMiBzcXVhcmVyb290IDAuMDQ0NSAtPiAwLjIxMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgwMyBzcXVhcmVyb290IDAuNDQ2IC0+IDAuNjY4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODA0IHNxdWFyZXJvb3QgMC4wNDQ2IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODA1IHNxdWFyZXJvb3QgMC40NDcgLT4gMC42NjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MDYgc3F1YXJlcm9vdCAwLjA0NDcgLT4gMC4yMTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MDcgc3F1YXJlcm9vdCAwLjQ0OCAtPiAwLjY2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgwOCBzcXVhcmVyb290IDAuMDQ0OCAtPiAwLjIxMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgwOSBzcXVhcmVyb290IDAuNDQ5IC0+IDAuNjcwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODEwIHNxdWFyZXJvb3QgMC4wNDQ5IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODExIHNxdWFyZXJvb3QgMC40NTEgLT4gMC42NzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MTIgc3F1YXJlcm9vdCAwLjA0NTEgLT4gMC4yMTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MTMgc3F1YXJlcm9vdCAwLjQ1MiAtPiAwLjY3MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgxNCBzcXVhcmVyb290IDAuMDQ1MiAtPiAwLjIxMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgxNSBzcXVhcmVyb290IDAuNDUzIC0+IDAuNjczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODE2IHNxdWFyZXJvb3QgMC4wNDUzIC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODE3IHNxdWFyZXJvb3QgMC40NTQgLT4gMC42NzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MTggc3F1YXJlcm9vdCAwLjA0NTQgLT4gMC4yMTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MTkgc3F1YXJlcm9vdCAwLjQ1NSAtPiAwLjY3NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgyMCBzcXVhcmVyb290IDAuMDQ1NSAtPiAwLjIxMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgyMSBzcXVhcmVyb290IDAuNDU2IC0+IDAuNjc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODIyIHNxdWFyZXJvb3QgMC4wNDU2IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODIzIHNxdWFyZXJvb3QgMC40NTcgLT4gMC42NzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MjQgc3F1YXJlcm9vdCAwLjA0NTcgLT4gMC4yMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MjUgc3F1YXJlcm9vdCAwLjQ1OCAtPiAwLjY3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgyNiBzcXVhcmVyb290IDAuMDQ1OCAtPiAwLjIxNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgyNyBzcXVhcmVyb290IDAuNDU5IC0+IDAuNjc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODI4IHNxdWFyZXJvb3QgMC4wNDU5IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODI5IHNxdWFyZXJvb3QgMC40NjEgLT4gMC42NzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MzAgc3F1YXJlcm9vdCAwLjA0NjEgLT4gMC4yMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MzEgc3F1YXJlcm9vdCAwLjQ2MiAtPiAwLjY4MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgzMiBzcXVhcmVyb290IDAuMDQ2MiAtPiAwLjIxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgzMyBzcXVhcmVyb290IDAuNDYzIC0+IDAuNjgwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODM0IHNxdWFyZXJvb3QgMC4wNDYzIC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODM1IHNxdWFyZXJvb3QgMC40NjQgLT4gMC42ODEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4MzYgc3F1YXJlcm9vdCAwLjA0NjQgLT4gMC4yMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4Mzcgc3F1YXJlcm9vdCAwLjQ2NSAtPiAwLjY4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgzOCBzcXVhcmVyb290IDAuMDQ2NSAtPiAwLjIxNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzgzOSBzcXVhcmVyb290IDAuNDY2IC0+IDAuNjgzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODQwIHNxdWFyZXJvb3QgMC4wNDY2IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODQxIHNxdWFyZXJvb3QgMC40NjcgLT4gMC42ODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NDIgc3F1YXJlcm9vdCAwLjA0NjcgLT4gMC4yMTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NDMgc3F1YXJlcm9vdCAwLjQ2OCAtPiAwLjY4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg0NCBzcXVhcmVyb290IDAuMDQ2OCAtPiAwLjIxNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg0NSBzcXVhcmVyb290IDAuNDY5IC0+IDAuNjg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODQ2IHNxdWFyZXJvb3QgMC4wNDY5IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODQ3IHNxdWFyZXJvb3QgMC40NzEgLT4gMC42ODYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NDggc3F1YXJlcm9vdCAwLjA0NzEgLT4gMC4yMTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NDkgc3F1YXJlcm9vdCAwLjQ3MiAtPiAwLjY4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg1MCBzcXVhcmVyb290IDAuMDQ3MiAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg1MSBzcXVhcmVyb290IDAuNDczIC0+IDAuNjg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODUyIHNxdWFyZXJvb3QgMC4wNDczIC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODUzIHNxdWFyZXJvb3QgMC40NzQgLT4gMC42ODggIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NTQgc3F1YXJlcm9vdCAwLjA0NzQgLT4gMC4yMTggIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NTUgc3F1YXJlcm9vdCAwLjQ3NSAtPiAwLjY4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg1NiBzcXVhcmVyb290IDAuMDQ3NSAtPiAwLjIxOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg1NyBzcXVhcmVyb290IDAuNDc2IC0+IDAuNjkwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODU4IHNxdWFyZXJvb3QgMC4wNDc2IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODU5IHNxdWFyZXJvb3QgMC40NzcgLT4gMC42OTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NjAgc3F1YXJlcm9vdCAwLjA0NzcgLT4gMC4yMTggIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NjEgc3F1YXJlcm9vdCAwLjQ3OCAtPiAwLjY5MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg2MiBzcXVhcmVyb290IDAuMDQ3OCAtPiAwLjIxOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg2MyBzcXVhcmVyb290IDAuNDc5IC0+IDAuNjkyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODY0IHNxdWFyZXJvb3QgMC4wNDc5IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODY1IHNxdWFyZXJvb3QgMC40ODEgLT4gMC42OTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NjYgc3F1YXJlcm9vdCAwLjA0ODEgLT4gMC4yMTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4Njcgc3F1YXJlcm9vdCAwLjQ4MiAtPiAwLjY5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg2OCBzcXVhcmVyb290IDAuMDQ4MiAtPiAwLjIyMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg2OSBzcXVhcmVyb290IDAuNDgzIC0+IDAuNjk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODcwIHNxdWFyZXJvb3QgMC4wNDgzIC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODcxIHNxdWFyZXJvb3QgMC40ODQgLT4gMC42OTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4NzIgc3F1YXJlcm9vdCAwLjA0ODQgLT4gMC4yMgorc3F0eDM4NzMgc3F1YXJlcm9vdCAwLjQ4NSAtPiAwLjY5NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg3NCBzcXVhcmVyb290IDAuMDQ4NSAtPiAwLjIyMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg3NSBzcXVhcmVyb290IDAuNDg2IC0+IDAuNjk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODc2IHNxdWFyZXJvb3QgMC4wNDg2IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODc3IHNxdWFyZXJvb3QgMC40ODcgLT4gMC42OTggIEluZXhhY3QgUm91bmRlZAorc3F0eDM4Nzggc3F1YXJlcm9vdCAwLjA0ODcgLT4gMC4yMjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4Nzkgc3F1YXJlcm9vdCAwLjQ4OCAtPiAwLjY5OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg4MCBzcXVhcmVyb290IDAuMDQ4OCAtPiAwLjIyMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg4MSBzcXVhcmVyb290IDAuNDg5IC0+IDAuNjk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODgyIHNxdWFyZXJvb3QgMC4wNDg5IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODgzIHNxdWFyZXJvb3QgMC40OTEgLT4gMC43MDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4ODQgc3F1YXJlcm9vdCAwLjA0OTEgLT4gMC4yMjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4ODUgc3F1YXJlcm9vdCAwLjQ5MiAtPiAwLjcwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg4NiBzcXVhcmVyb290IDAuMDQ5MiAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg4NyBzcXVhcmVyb290IDAuNDkzIC0+IDAuNzAyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODg4IHNxdWFyZXJvb3QgMC4wNDkzIC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODg5IHNxdWFyZXJvb3QgMC40OTQgLT4gMC43MDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4OTAgc3F1YXJlcm9vdCAwLjA0OTQgLT4gMC4yMjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4OTEgc3F1YXJlcm9vdCAwLjQ5NSAtPiAwLjcwNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg5MiBzcXVhcmVyb290IDAuMDQ5NSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg5MyBzcXVhcmVyb290IDAuNDk2IC0+IDAuNzA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODk0IHNxdWFyZXJvb3QgMC4wNDk2IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzODk1IHNxdWFyZXJvb3QgMC40OTcgLT4gMC43MDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4OTYgc3F1YXJlcm9vdCAwLjA0OTcgLT4gMC4yMjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM4OTcgc3F1YXJlcm9vdCAwLjQ5OCAtPiAwLjcwNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg5OCBzcXVhcmVyb290IDAuMDQ5OCAtPiAwLjIyMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzg5OSBzcXVhcmVyb290IDAuNDk5IC0+IDAuNzA2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTAwIHNxdWFyZXJvb3QgMC4wNDk5IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTAxIHNxdWFyZXJvb3QgMC41MDEgLT4gMC43MDggIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MDIgc3F1YXJlcm9vdCAwLjA1MDEgLT4gMC4yMjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MDMgc3F1YXJlcm9vdCAwLjUwMiAtPiAwLjcwOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkwNCBzcXVhcmVyb290IDAuMDUwMiAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkwNSBzcXVhcmVyb290IDAuNTAzIC0+IDAuNzA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTA2IHNxdWFyZXJvb3QgMC4wNTAzIC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTA3IHNxdWFyZXJvb3QgMC41MDQgLT4gMC43MTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MDggc3F1YXJlcm9vdCAwLjA1MDQgLT4gMC4yMjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MDkgc3F1YXJlcm9vdCAwLjUwNSAtPiAwLjcxMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkxMCBzcXVhcmVyb290IDAuMDUwNSAtPiAwLjIyNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkxMSBzcXVhcmVyb290IDAuNTA2IC0+IDAuNzExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTEyIHNxdWFyZXJvb3QgMC4wNTA2IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTEzIHNxdWFyZXJvb3QgMC41MDcgLT4gMC43MTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MTQgc3F1YXJlcm9vdCAwLjA1MDcgLT4gMC4yMjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MTUgc3F1YXJlcm9vdCAwLjUwOCAtPiAwLjcxMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkxNiBzcXVhcmVyb290IDAuMDUwOCAtPiAwLjIyNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkxNyBzcXVhcmVyb290IDAuNTA5IC0+IDAuNzEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTE4IHNxdWFyZXJvb3QgMC4wNTA5IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTE5IHNxdWFyZXJvb3QgMC41MTEgLT4gMC43MTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MjAgc3F1YXJlcm9vdCAwLjA1MTEgLT4gMC4yMjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MjEgc3F1YXJlcm9vdCAwLjUxMiAtPiAwLjcxNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkyMiBzcXVhcmVyb290IDAuMDUxMiAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkyMyBzcXVhcmVyb290IDAuNTEzIC0+IDAuNzE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTI0IHNxdWFyZXJvb3QgMC4wNTEzIC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTI1IHNxdWFyZXJvb3QgMC41MTQgLT4gMC43MTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MjYgc3F1YXJlcm9vdCAwLjA1MTQgLT4gMC4yMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5Mjcgc3F1YXJlcm9vdCAwLjUxNSAtPiAwLjcxOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkyOCBzcXVhcmVyb290IDAuMDUxNSAtPiAwLjIyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkyOSBzcXVhcmVyb290IDAuNTE2IC0+IDAuNzE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTMwIHNxdWFyZXJvb3QgMC4wNTE2IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTMxIHNxdWFyZXJvb3QgMC41MTcgLT4gMC43MTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MzIgc3F1YXJlcm9vdCAwLjA1MTcgLT4gMC4yMjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5MzMgc3F1YXJlcm9vdCAwLjUxOCAtPiAwLjcyMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkzNCBzcXVhcmVyb290IDAuMDUxOCAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4MzkzNSBzcXVhcmVyb290IDAuNTE5IC0+IDAuNzIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTM2IHNxdWFyZXJvb3QgMC4wNTE5IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTM3IHNxdWFyZXJvb3QgMC41MjEgLT4gMC43MjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5Mzggc3F1YXJlcm9vdCAwLjA1MjEgLT4gMC4yMjggIEluZXhhY3QgUm91bmRlZAorc3F0eDM5Mzkgc3F1YXJlcm9vdCAwLjUyMiAtPiAwLjcyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk0MCBzcXVhcmVyb290IDAuMDUyMiAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk0MSBzcXVhcmVyb290IDAuNTIzIC0+IDAuNzIzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTQyIHNxdWFyZXJvb3QgMC4wNTIzIC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTQzIHNxdWFyZXJvb3QgMC41MjQgLT4gMC43MjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NDQgc3F1YXJlcm9vdCAwLjA1MjQgLT4gMC4yMjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NDUgc3F1YXJlcm9vdCAwLjUyNSAtPiAwLjcyNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk0NiBzcXVhcmVyb290IDAuMDUyNSAtPiAwLjIyOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk0NyBzcXVhcmVyb290IDAuNTI2IC0+IDAuNzI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTQ4IHNxdWFyZXJvb3QgMC4wNTI2IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTQ5IHNxdWFyZXJvb3QgMC41MjcgLT4gMC43MjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NTAgc3F1YXJlcm9vdCAwLjA1MjcgLT4gMC4yMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NTEgc3F1YXJlcm9vdCAwLjUyOCAtPiAwLjcyNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk1MiBzcXVhcmVyb290IDAuMDUyOCAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk1MyBzcXVhcmVyb290IDAuNTI5IC0+IDAuNzI3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTU0IHNxdWFyZXJvb3QgMC4wNTI5IC0+IDAuMjMKK3NxdHgzOTU1IHNxdWFyZXJvb3QgMC41MzEgLT4gMC43MjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NTYgc3F1YXJlcm9vdCAwLjA1MzEgLT4gMC4yMzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NTcgc3F1YXJlcm9vdCAwLjUzMiAtPiAwLjcyOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk1OCBzcXVhcmVyb290IDAuMDUzMiAtPiAwLjIzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk1OSBzcXVhcmVyb290IDAuNTMzIC0+IDAuNzMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTYwIHNxdWFyZXJvb3QgMC4wNTMzIC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTYxIHNxdWFyZXJvb3QgMC41MzQgLT4gMC43MzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NjIgc3F1YXJlcm9vdCAwLjA1MzQgLT4gMC4yMzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NjMgc3F1YXJlcm9vdCAwLjUzNSAtPiAwLjczMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk2NCBzcXVhcmVyb290IDAuMDUzNSAtPiAwLjIzMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk2NSBzcXVhcmVyb290IDAuNTM2IC0+IDAuNzMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTY2IHNxdWFyZXJvb3QgMC4wNTM2IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTY3IHNxdWFyZXJvb3QgMC41MzcgLT4gMC43MzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5Njggc3F1YXJlcm9vdCAwLjA1MzcgLT4gMC4yMzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5Njkgc3F1YXJlcm9vdCAwLjUzOCAtPiAwLjczMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk3MCBzcXVhcmVyb290IDAuMDUzOCAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk3MSBzcXVhcmVyb290IDAuNTM5IC0+IDAuNzM0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTcyIHNxdWFyZXJvb3QgMC4wNTM5IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTczIHNxdWFyZXJvb3QgMC41NDEgLT4gMC43MzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NzQgc3F1YXJlcm9vdCAwLjA1NDEgLT4gMC4yMzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5NzUgc3F1YXJlcm9vdCAwLjU0MiAtPiAwLjczNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk3NiBzcXVhcmVyb290IDAuMDU0MiAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk3NyBzcXVhcmVyb290IDAuNTQzIC0+IDAuNzM3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTc4IHNxdWFyZXJvb3QgMC4wNTQzIC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTc5IHNxdWFyZXJvb3QgMC41NDQgLT4gMC43MzggIEluZXhhY3QgUm91bmRlZAorc3F0eDM5ODAgc3F1YXJlcm9vdCAwLjA1NDQgLT4gMC4yMzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5ODEgc3F1YXJlcm9vdCAwLjU0NSAtPiAwLjczOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk4MiBzcXVhcmVyb290IDAuMDU0NSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk4MyBzcXVhcmVyb290IDAuNTQ2IC0+IDAuNzM5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTg0IHNxdWFyZXJvb3QgMC4wNTQ2IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTg1IHNxdWFyZXJvb3QgMC41NDcgLT4gMC43NDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5ODYgc3F1YXJlcm9vdCAwLjA1NDcgLT4gMC4yMzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5ODcgc3F1YXJlcm9vdCAwLjU0OCAtPiAwLjc0MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk4OCBzcXVhcmVyb290IDAuMDU0OCAtPiAwLjIzNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk4OSBzcXVhcmVyb290IDAuNTQ5IC0+IDAuNzQxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTkwIHNxdWFyZXJvb3QgMC4wNTQ5IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTkxIHNxdWFyZXJvb3QgMC41NTEgLT4gMC43NDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5OTIgc3F1YXJlcm9vdCAwLjA1NTEgLT4gMC4yMzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5OTMgc3F1YXJlcm9vdCAwLjU1MiAtPiAwLjc0MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk5NCBzcXVhcmVyb290IDAuMDU1MiAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Mzk5NSBzcXVhcmVyb290IDAuNTUzIC0+IDAuNzQ0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTk2IHNxdWFyZXJvb3QgMC4wNTUzIC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHgzOTk3IHNxdWFyZXJvb3QgMC41NTQgLT4gMC43NDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5OTggc3F1YXJlcm9vdCAwLjA1NTQgLT4gMC4yMzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDM5OTkgc3F1YXJlcm9vdCAwLjU1NSAtPiAwLjc0NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAwMCBzcXVhcmVyb290IDAuMDU1NSAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAwMSBzcXVhcmVyb290IDAuNTU2IC0+IDAuNzQ2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDAyIHNxdWFyZXJvb3QgMC4wNTU2IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDAzIHNxdWFyZXJvb3QgMC41NTcgLT4gMC43NDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMDQgc3F1YXJlcm9vdCAwLjA1NTcgLT4gMC4yMzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMDUgc3F1YXJlcm9vdCAwLjU1OCAtPiAwLjc0NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAwNiBzcXVhcmVyb290IDAuMDU1OCAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAwNyBzcXVhcmVyb290IDAuNTU5IC0+IDAuNzQ4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDA4IHNxdWFyZXJvb3QgMC4wNTU5IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDA5IHNxdWFyZXJvb3QgMC41NjEgLT4gMC43NDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMTAgc3F1YXJlcm9vdCAwLjA1NjEgLT4gMC4yMzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMTEgc3F1YXJlcm9vdCAwLjU2MiAtPiAwLjc1MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAxMiBzcXVhcmVyb290IDAuMDU2MiAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAxMyBzcXVhcmVyb290IDAuNTYzIC0+IDAuNzUwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDE0IHNxdWFyZXJvb3QgMC4wNTYzIC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDE1IHNxdWFyZXJvb3QgMC41NjQgLT4gMC43NTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMTYgc3F1YXJlcm9vdCAwLjA1NjQgLT4gMC4yMzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMTcgc3F1YXJlcm9vdCAwLjU2NSAtPiAwLjc1MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAxOCBzcXVhcmVyb290IDAuMDU2NSAtPiAwLjIzOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAxOSBzcXVhcmVyb290IDAuNTY2IC0+IDAuNzUyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDIwIHNxdWFyZXJvb3QgMC4wNTY2IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDIxIHNxdWFyZXJvb3QgMC41NjcgLT4gMC43NTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMjIgc3F1YXJlcm9vdCAwLjA1NjcgLT4gMC4yMzggIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMjMgc3F1YXJlcm9vdCAwLjU2OCAtPiAwLjc1NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAyNCBzcXVhcmVyb290IDAuMDU2OCAtPiAwLjIzOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAyNSBzcXVhcmVyb290IDAuNTY5IC0+IDAuNzU0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDI2IHNxdWFyZXJvb3QgMC4wNTY5IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDI3IHNxdWFyZXJvb3QgMC41NzEgLT4gMC43NTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMjggc3F1YXJlcm9vdCAwLjA1NzEgLT4gMC4yMzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMjkgc3F1YXJlcm9vdCAwLjU3MiAtPiAwLjc1NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAzMCBzcXVhcmVyb290IDAuMDU3MiAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAzMSBzcXVhcmVyb290IDAuNTczIC0+IDAuNzU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDMyIHNxdWFyZXJvb3QgMC4wNTczIC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDMzIHNxdWFyZXJvb3QgMC41NzQgLT4gMC43NTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMzQgc3F1YXJlcm9vdCAwLjA1NzQgLT4gMC4yNDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwMzUgc3F1YXJlcm9vdCAwLjU3NSAtPiAwLjc1OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAzNiBzcXVhcmVyb290IDAuMDU3NSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDAzNyBzcXVhcmVyb290IDAuNTc2IC0+IDAuNzU5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDM4IHNxdWFyZXJvb3QgMC4wNTc2IC0+IDAuMjQKK3NxdHg0MDM5IHNxdWFyZXJvb3QgMC41NzcgLT4gMC43NjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNDAgc3F1YXJlcm9vdCAwLjA1NzcgLT4gMC4yNDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNDEgc3F1YXJlcm9vdCAwLjU3OCAtPiAwLjc2MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA0MiBzcXVhcmVyb290IDAuMDU3OCAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA0MyBzcXVhcmVyb290IDAuNTc5IC0+IDAuNzYxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDQ0IHNxdWFyZXJvb3QgMC4wNTc5IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDQ1IHNxdWFyZXJvb3QgMC41ODEgLT4gMC43NjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNDYgc3F1YXJlcm9vdCAwLjA1ODEgLT4gMC4yNDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNDcgc3F1YXJlcm9vdCAwLjU4MiAtPiAwLjc2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA0OCBzcXVhcmVyb290IDAuMDU4MiAtPiAwLjI0MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA0OSBzcXVhcmVyb290IDAuNTgzIC0+IDAuNzY0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDUwIHNxdWFyZXJvb3QgMC4wNTgzIC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDUxIHNxdWFyZXJvb3QgMC41ODQgLT4gMC43NjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNTIgc3F1YXJlcm9vdCAwLjA1ODQgLT4gMC4yNDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNTMgc3F1YXJlcm9vdCAwLjU4NSAtPiAwLjc2NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA1NCBzcXVhcmVyb290IDAuMDU4NSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA1NSBzcXVhcmVyb290IDAuNTg2IC0+IDAuNzY2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDU2IHNxdWFyZXJvb3QgMC4wNTg2IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDU3IHNxdWFyZXJvb3QgMC41ODcgLT4gMC43NjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNTggc3F1YXJlcm9vdCAwLjA1ODcgLT4gMC4yNDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNTkgc3F1YXJlcm9vdCAwLjU4OCAtPiAwLjc2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA2MCBzcXVhcmVyb290IDAuMDU4OCAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA2MSBzcXVhcmVyb290IDAuNTg5IC0+IDAuNzY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDYyIHNxdWFyZXJvb3QgMC4wNTg5IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDYzIHNxdWFyZXJvb3QgMC41OTEgLT4gMC43NjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNjQgc3F1YXJlcm9vdCAwLjA1OTEgLT4gMC4yNDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNjUgc3F1YXJlcm9vdCAwLjU5MiAtPiAwLjc2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA2NiBzcXVhcmVyb290IDAuMDU5MiAtPiAwLjI0MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA2NyBzcXVhcmVyb290IDAuNTkzIC0+IDAuNzcwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDY4IHNxdWFyZXJvb3QgMC4wNTkzIC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDY5IHNxdWFyZXJvb3QgMC41OTQgLT4gMC43NzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNzAgc3F1YXJlcm9vdCAwLjA1OTQgLT4gMC4yNDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNzEgc3F1YXJlcm9vdCAwLjU5NSAtPiAwLjc3MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA3MiBzcXVhcmVyb290IDAuMDU5NSAtPiAwLjI0NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA3MyBzcXVhcmVyb290IDAuNTk2IC0+IDAuNzcyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDc0IHNxdWFyZXJvb3QgMC4wNTk2IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDc1IHNxdWFyZXJvb3QgMC41OTcgLT4gMC43NzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNzYgc3F1YXJlcm9vdCAwLjA1OTcgLT4gMC4yNDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwNzcgc3F1YXJlcm9vdCAwLjU5OCAtPiAwLjc3MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA3OCBzcXVhcmVyb290IDAuMDU5OCAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA3OSBzcXVhcmVyb290IDAuNTk5IC0+IDAuNzc0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDgwIHNxdWFyZXJvb3QgMC4wNTk5IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDgxIHNxdWFyZXJvb3QgMC42MDEgLT4gMC43NzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwODIgc3F1YXJlcm9vdCAwLjA2MDEgLT4gMC4yNDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwODMgc3F1YXJlcm9vdCAwLjYwMiAtPiAwLjc3NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA4NCBzcXVhcmVyb290IDAuMDYwMiAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA4NSBzcXVhcmVyb290IDAuNjAzIC0+IDAuNzc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDg2IHNxdWFyZXJvb3QgMC4wNjAzIC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDg3IHNxdWFyZXJvb3QgMC42MDQgLT4gMC43NzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwODggc3F1YXJlcm9vdCAwLjA2MDQgLT4gMC4yNDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwODkgc3F1YXJlcm9vdCAwLjYwNSAtPiAwLjc3OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA5MCBzcXVhcmVyb290IDAuMDYwNSAtPiAwLjI0NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA5MSBzcXVhcmVyb290IDAuNjA2IC0+IDAuNzc4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDkyIHNxdWFyZXJvb3QgMC4wNjA2IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDkzIHNxdWFyZXJvb3QgMC42MDcgLT4gMC43NzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwOTQgc3F1YXJlcm9vdCAwLjA2MDcgLT4gMC4yNDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQwOTUgc3F1YXJlcm9vdCAwLjYwOCAtPiAwLjc4MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA5NiBzcXVhcmVyb290IDAuMDYwOCAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDA5NyBzcXVhcmVyb290IDAuNjA5IC0+IDAuNzgwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDk4IHNxdWFyZXJvb3QgMC4wNjA5IC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MDk5IHNxdWFyZXJvb3QgMC42MTEgLT4gMC43ODIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMDAgc3F1YXJlcm9vdCAwLjA2MTEgLT4gMC4yNDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMDEgc3F1YXJlcm9vdCAwLjYxMiAtPiAwLjc4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEwMiBzcXVhcmVyb290IDAuMDYxMiAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEwMyBzcXVhcmVyb290IDAuNjEzIC0+IDAuNzgzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTA0IHNxdWFyZXJvb3QgMC4wNjEzIC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTA1IHNxdWFyZXJvb3QgMC42MTQgLT4gMC43ODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMDYgc3F1YXJlcm9vdCAwLjA2MTQgLT4gMC4yNDggIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMDcgc3F1YXJlcm9vdCAwLjYxNSAtPiAwLjc4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEwOCBzcXVhcmVyb290IDAuMDYxNSAtPiAwLjI0OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEwOSBzcXVhcmVyb290IDAuNjE2IC0+IDAuNzg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTEwIHNxdWFyZXJvb3QgMC4wNjE2IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTExIHNxdWFyZXJvb3QgMC42MTcgLT4gMC43ODUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMTIgc3F1YXJlcm9vdCAwLjA2MTcgLT4gMC4yNDggIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMTMgc3F1YXJlcm9vdCAwLjYxOCAtPiAwLjc4NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDExNCBzcXVhcmVyb290IDAuMDYxOCAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDExNSBzcXVhcmVyb290IDAuNjE5IC0+IDAuNzg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTE2IHNxdWFyZXJvb3QgMC4wNjE5IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTE3IHNxdWFyZXJvb3QgMC42MjEgLT4gMC43ODggIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMTggc3F1YXJlcm9vdCAwLjA2MjEgLT4gMC4yNDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMTkgc3F1YXJlcm9vdCAwLjYyMiAtPiAwLjc4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEyMCBzcXVhcmVyb290IDAuMDYyMiAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEyMSBzcXVhcmVyb290IDAuNjIzIC0+IDAuNzg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTIyIHNxdWFyZXJvb3QgMC4wNjIzIC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTIzIHNxdWFyZXJvb3QgMC42MjQgLT4gMC43OTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMjQgc3F1YXJlcm9vdCAwLjA2MjQgLT4gMC4yNTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMjUgc3F1YXJlcm9vdCAwLjYyNSAtPiAwLjc5MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEyNiBzcXVhcmVyb290IDAuMDYyNSAtPiAwLjI1CitzcXR4NDEyNyBzcXVhcmVyb290IDAuNjI2IC0+IDAuNzkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTI4IHNxdWFyZXJvb3QgMC4wNjI2IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTI5IHNxdWFyZXJvb3QgMC42MjcgLT4gMC43OTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMzAgc3F1YXJlcm9vdCAwLjA2MjcgLT4gMC4yNTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMzEgc3F1YXJlcm9vdCAwLjYyOCAtPiAwLjc5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEzMiBzcXVhcmVyb290IDAuMDYyOCAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEzMyBzcXVhcmVyb290IDAuNjI5IC0+IDAuNzkzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTM0IHNxdWFyZXJvb3QgMC4wNjI5IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTM1IHNxdWFyZXJvb3QgMC42MzEgLT4gMC43OTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMzYgc3F1YXJlcm9vdCAwLjA2MzEgLT4gMC4yNTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxMzcgc3F1YXJlcm9vdCAwLjYzMiAtPiAwLjc5NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEzOCBzcXVhcmVyb290IDAuMDYzMiAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDEzOSBzcXVhcmVyb290IDAuNjMzIC0+IDAuNzk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTQwIHNxdWFyZXJvb3QgMC4wNjMzIC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTQxIHNxdWFyZXJvb3QgMC42MzQgLT4gMC43OTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNDIgc3F1YXJlcm9vdCAwLjA2MzQgLT4gMC4yNTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNDMgc3F1YXJlcm9vdCAwLjYzNSAtPiAwLjc5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE0NCBzcXVhcmVyb290IDAuMDYzNSAtPiAwLjI1MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE0NSBzcXVhcmVyb290IDAuNjM2IC0+IDAuNzk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTQ2IHNxdWFyZXJvb3QgMC4wNjM2IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTQ3IHNxdWFyZXJvb3QgMC42MzcgLT4gMC43OTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNDggc3F1YXJlcm9vdCAwLjA2MzcgLT4gMC4yNTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNDkgc3F1YXJlcm9vdCAwLjYzOCAtPiAwLjc5OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE1MCBzcXVhcmVyb290IDAuMDYzOCAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE1MSBzcXVhcmVyb290IDAuNjM5IC0+IDAuNzk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTUyIHNxdWFyZXJvb3QgMC4wNjM5IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTUzIHNxdWFyZXJvb3QgMC42NDEgLT4gMC44MDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNTQgc3F1YXJlcm9vdCAwLjA2NDEgLT4gMC4yNTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNTUgc3F1YXJlcm9vdCAwLjY0MiAtPiAwLjgwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE1NiBzcXVhcmVyb290IDAuMDY0MiAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE1NyBzcXVhcmVyb290IDAuNjQzIC0+IDAuODAyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTU4IHNxdWFyZXJvb3QgMC4wNjQzIC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTU5IHNxdWFyZXJvb3QgMC42NDQgLT4gMC44MDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNjAgc3F1YXJlcm9vdCAwLjA2NDQgLT4gMC4yNTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNjEgc3F1YXJlcm9vdCAwLjY0NSAtPiAwLjgwMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE2MiBzcXVhcmVyb290IDAuMDY0NSAtPiAwLjI1NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE2MyBzcXVhcmVyb290IDAuNjQ2IC0+IDAuODA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTY0IHNxdWFyZXJvb3QgMC4wNjQ2IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTY1IHNxdWFyZXJvb3QgMC42NDcgLT4gMC44MDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNjYgc3F1YXJlcm9vdCAwLjA2NDcgLT4gMC4yNTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNjcgc3F1YXJlcm9vdCAwLjY0OCAtPiAwLjgwNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE2OCBzcXVhcmVyb290IDAuMDY0OCAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE2OSBzcXVhcmVyb290IDAuNjQ5IC0+IDAuODA2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTcwIHNxdWFyZXJvb3QgMC4wNjQ5IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTcxIHNxdWFyZXJvb3QgMC42NTEgLT4gMC44MDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNzIgc3F1YXJlcm9vdCAwLjA2NTEgLT4gMC4yNTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNzMgc3F1YXJlcm9vdCAwLjY1MiAtPiAwLjgwNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE3NCBzcXVhcmVyb290IDAuMDY1MiAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE3NSBzcXVhcmVyb290IDAuNjUzIC0+IDAuODA4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTc2IHNxdWFyZXJvb3QgMC4wNjUzIC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTc3IHNxdWFyZXJvb3QgMC42NTQgLT4gMC44MDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNzggc3F1YXJlcm9vdCAwLjA2NTQgLT4gMC4yNTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxNzkgc3F1YXJlcm9vdCAwLjY1NSAtPiAwLjgwOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE4MCBzcXVhcmVyb290IDAuMDY1NSAtPiAwLjI1NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE4MSBzcXVhcmVyb290IDAuNjU2IC0+IDAuODEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTgyIHNxdWFyZXJvb3QgMC4wNjU2IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTgzIHNxdWFyZXJvb3QgMC42NTcgLT4gMC44MTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxODQgc3F1YXJlcm9vdCAwLjA2NTcgLT4gMC4yNTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxODUgc3F1YXJlcm9vdCAwLjY1OCAtPiAwLjgxMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE4NiBzcXVhcmVyb290IDAuMDY1OCAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE4NyBzcXVhcmVyb290IDAuNjU5IC0+IDAuODEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTg4IHNxdWFyZXJvb3QgMC4wNjU5IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTg5IHNxdWFyZXJvb3QgMC42NjEgLT4gMC44MTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxOTAgc3F1YXJlcm9vdCAwLjA2NjEgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxOTEgc3F1YXJlcm9vdCAwLjY2MiAtPiAwLjgxNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE5MiBzcXVhcmVyb290IDAuMDY2MiAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE5MyBzcXVhcmVyb290IDAuNjYzIC0+IDAuODE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTk0IHNxdWFyZXJvb3QgMC4wNjYzIC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MTk1IHNxdWFyZXJvb3QgMC42NjQgLT4gMC44MTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQxOTYgc3F1YXJlcm9vdCAwLjA2NjQgLT4gMC4yNTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQxOTcgc3F1YXJlcm9vdCAwLjY2NSAtPiAwLjgxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE5OCBzcXVhcmVyb290IDAuMDY2NSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDE5OSBzcXVhcmVyb290IDAuNjY2IC0+IDAuODE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjAwIHNxdWFyZXJvb3QgMC4wNjY2IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjAxIHNxdWFyZXJvb3QgMC42NjcgLT4gMC44MTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMDIgc3F1YXJlcm9vdCAwLjA2NjcgLT4gMC4yNTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMDMgc3F1YXJlcm9vdCAwLjY2OCAtPiAwLjgxNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIwNCBzcXVhcmVyb290IDAuMDY2OCAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIwNSBzcXVhcmVyb290IDAuNjY5IC0+IDAuODE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjA2IHNxdWFyZXJvb3QgMC4wNjY5IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjA3IHNxdWFyZXJvb3QgMC42NzEgLT4gMC44MTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMDggc3F1YXJlcm9vdCAwLjA2NzEgLT4gMC4yNTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMDkgc3F1YXJlcm9vdCAwLjY3MiAtPiAwLjgyMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIxMCBzcXVhcmVyb290IDAuMDY3MiAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIxMSBzcXVhcmVyb290IDAuNjczIC0+IDAuODIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjEyIHNxdWFyZXJvb3QgMC4wNjczIC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjEzIHNxdWFyZXJvb3QgMC42NzQgLT4gMC44MjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMTQgc3F1YXJlcm9vdCAwLjA2NzQgLT4gMC4yNjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMTUgc3F1YXJlcm9vdCAwLjY3NSAtPiAwLjgyMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIxNiBzcXVhcmVyb290IDAuMDY3NSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIxNyBzcXVhcmVyb290IDAuNjc2IC0+IDAuODIyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjE4IHNxdWFyZXJvb3QgMC4wNjc2IC0+IDAuMjYKK3NxdHg0MjE5IHNxdWFyZXJvb3QgMC42NzcgLT4gMC44MjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMjAgc3F1YXJlcm9vdCAwLjA2NzcgLT4gMC4yNjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMjEgc3F1YXJlcm9vdCAwLjY3OCAtPiAwLjgyMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIyMiBzcXVhcmVyb290IDAuMDY3OCAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIyMyBzcXVhcmVyb290IDAuNjc5IC0+IDAuODI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjI0IHNxdWFyZXJvb3QgMC4wNjc5IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjI1IHNxdWFyZXJvb3QgMC42ODEgLT4gMC44MjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMjYgc3F1YXJlcm9vdCAwLjA2ODEgLT4gMC4yNjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMjcgc3F1YXJlcm9vdCAwLjY4MiAtPiAwLjgyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIyOCBzcXVhcmVyb290IDAuMDY4MiAtPiAwLjI2MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIyOSBzcXVhcmVyb290IDAuNjgzIC0+IDAuODI2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjMwIHNxdWFyZXJvb3QgMC4wNjgzIC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjMxIHNxdWFyZXJvb3QgMC42ODQgLT4gMC44MjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMzIgc3F1YXJlcm9vdCAwLjA2ODQgLT4gMC4yNjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMzMgc3F1YXJlcm9vdCAwLjY4NSAtPiAwLjgyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIzNCBzcXVhcmVyb290IDAuMDY4NSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDIzNSBzcXVhcmVyb290IDAuNjg2IC0+IDAuODI4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjM2IHNxdWFyZXJvb3QgMC4wNjg2IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjM3IHNxdWFyZXJvb3QgMC42ODcgLT4gMC44MjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMzggc3F1YXJlcm9vdCAwLjA2ODcgLT4gMC4yNjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyMzkgc3F1YXJlcm9vdCAwLjY4OCAtPiAwLjgyOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI0MCBzcXVhcmVyb290IDAuMDY4OCAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI0MSBzcXVhcmVyb290IDAuNjg5IC0+IDAuODMwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjQyIHNxdWFyZXJvb3QgMC4wNjg5IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjQzIHNxdWFyZXJvb3QgMC42OTEgLT4gMC44MzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNDQgc3F1YXJlcm9vdCAwLjA2OTEgLT4gMC4yNjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNDUgc3F1YXJlcm9vdCAwLjY5MiAtPiAwLjgzMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI0NiBzcXVhcmVyb290IDAuMDY5MiAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI0NyBzcXVhcmVyb290IDAuNjkzIC0+IDAuODMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjQ4IHNxdWFyZXJvb3QgMC4wNjkzIC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjQ5IHNxdWFyZXJvb3QgMC42OTQgLT4gMC44MzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNTAgc3F1YXJlcm9vdCAwLjA2OTQgLT4gMC4yNjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNTEgc3F1YXJlcm9vdCAwLjY5NSAtPiAwLjgzNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI1MiBzcXVhcmVyb290IDAuMDY5NSAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI1MyBzcXVhcmVyb290IDAuNjk2IC0+IDAuODM0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjU0IHNxdWFyZXJvb3QgMC4wNjk2IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjU1IHNxdWFyZXJvb3QgMC42OTcgLT4gMC44MzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNTYgc3F1YXJlcm9vdCAwLjA2OTcgLT4gMC4yNjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNTcgc3F1YXJlcm9vdCAwLjY5OCAtPiAwLjgzNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI1OCBzcXVhcmVyb290IDAuMDY5OCAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI1OSBzcXVhcmVyb290IDAuNjk5IC0+IDAuODM2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjYwIHNxdWFyZXJvb3QgMC4wNjk5IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjYxIHNxdWFyZXJvb3QgMC43MDEgLT4gMC44MzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNjIgc3F1YXJlcm9vdCAwLjA3MDEgLT4gMC4yNjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNjMgc3F1YXJlcm9vdCAwLjcwMiAtPiAwLjgzOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI2NCBzcXVhcmVyb290IDAuMDcwMiAtPiAwLjI2NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI2NSBzcXVhcmVyb290IDAuNzAzIC0+IDAuODM4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjY2IHNxdWFyZXJvb3QgMC4wNzAzIC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjY3IHNxdWFyZXJvb3QgMC43MDQgLT4gMC44MzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNjggc3F1YXJlcm9vdCAwLjA3MDQgLT4gMC4yNjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNjkgc3F1YXJlcm9vdCAwLjcwNSAtPiAwLjg0MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI3MCBzcXVhcmVyb290IDAuMDcwNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI3MSBzcXVhcmVyb290IDAuNzA2IC0+IDAuODQwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjcyIHNxdWFyZXJvb3QgMC4wNzA2IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjczIHNxdWFyZXJvb3QgMC43MDcgLT4gMC44NDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNzQgc3F1YXJlcm9vdCAwLjA3MDcgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyNzUgc3F1YXJlcm9vdCAwLjcwOCAtPiAwLjg0MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI3NiBzcXVhcmVyb290IDAuMDcwOCAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI3NyBzcXVhcmVyb290IDAuNzA5IC0+IDAuODQyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mjc4IHNxdWFyZXJvb3QgMC4wNzA5IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mjc5IHNxdWFyZXJvb3QgMC43MTEgLT4gMC44NDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyODAgc3F1YXJlcm9vdCAwLjA3MTEgLT4gMC4yNjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyODEgc3F1YXJlcm9vdCAwLjcxMiAtPiAwLjg0NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI4MiBzcXVhcmVyb290IDAuMDcxMiAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI4MyBzcXVhcmVyb290IDAuNzEzIC0+IDAuODQ0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mjg0IHNxdWFyZXJvb3QgMC4wNzEzIC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mjg1IHNxdWFyZXJvb3QgMC43MTQgLT4gMC44NDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyODYgc3F1YXJlcm9vdCAwLjA3MTQgLT4gMC4yNjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyODcgc3F1YXJlcm9vdCAwLjcxNSAtPiAwLjg0NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI4OCBzcXVhcmVyb290IDAuMDcxNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI4OSBzcXVhcmVyb290IDAuNzE2IC0+IDAuODQ2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjkwIHNxdWFyZXJvb3QgMC4wNzE2IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MjkxIHNxdWFyZXJvb3QgMC43MTcgLT4gMC44NDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyOTIgc3F1YXJlcm9vdCAwLjA3MTcgLT4gMC4yNjggIEluZXhhY3QgUm91bmRlZAorc3F0eDQyOTMgc3F1YXJlcm9vdCAwLjcxOCAtPiAwLjg0NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI5NCBzcXVhcmVyb290IDAuMDcxOCAtPiAwLjI2OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDI5NSBzcXVhcmVyb290IDAuNzE5IC0+IDAuODQ4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mjk2IHNxdWFyZXJvb3QgMC4wNzE5IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mjk3IHNxdWFyZXJvb3QgMC43MjEgLT4gMC44NDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyOTggc3F1YXJlcm9vdCAwLjA3MjEgLT4gMC4yNjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQyOTkgc3F1YXJlcm9vdCAwLjcyMiAtPiAwLjg1MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMwMCBzcXVhcmVyb290IDAuMDcyMiAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMwMSBzcXVhcmVyb290IDAuNzIzIC0+IDAuODUwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzAyIHNxdWFyZXJvb3QgMC4wNzIzIC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzAzIHNxdWFyZXJvb3QgMC43MjQgLT4gMC44NTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMDQgc3F1YXJlcm9vdCAwLjA3MjQgLT4gMC4yNjkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMDUgc3F1YXJlcm9vdCAwLjcyNSAtPiAwLjg1MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMwNiBzcXVhcmVyb290IDAuMDcyNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMwNyBzcXVhcmVyb290IDAuNzI2IC0+IDAuODUyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzA4IHNxdWFyZXJvb3QgMC4wNzI2IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzA5IHNxdWFyZXJvb3QgMC43MjcgLT4gMC44NTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMTAgc3F1YXJlcm9vdCAwLjA3MjcgLT4gMC4yNzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMTEgc3F1YXJlcm9vdCAwLjcyOCAtPiAwLjg1MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMxMiBzcXVhcmVyb290IDAuMDcyOCAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMxMyBzcXVhcmVyb290IDAuNzI5IC0+IDAuODU0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzE0IHNxdWFyZXJvb3QgMC4wNzI5IC0+IDAuMjcKK3NxdHg0MzE1IHNxdWFyZXJvb3QgMC43MzEgLT4gMC44NTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMTYgc3F1YXJlcm9vdCAwLjA3MzEgLT4gMC4yNzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMTcgc3F1YXJlcm9vdCAwLjczMiAtPiAwLjg1NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMxOCBzcXVhcmVyb290IDAuMDczMiAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMxOSBzcXVhcmVyb290IDAuNzMzIC0+IDAuODU2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzIwIHNxdWFyZXJvb3QgMC4wNzMzIC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzIxIHNxdWFyZXJvb3QgMC43MzQgLT4gMC44NTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMjIgc3F1YXJlcm9vdCAwLjA3MzQgLT4gMC4yNzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMjMgc3F1YXJlcm9vdCAwLjczNSAtPiAwLjg1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMyNCBzcXVhcmVyb290IDAuMDczNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMyNSBzcXVhcmVyb290IDAuNzM2IC0+IDAuODU4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzI2IHNxdWFyZXJvb3QgMC4wNzM2IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzI3IHNxdWFyZXJvb3QgMC43MzcgLT4gMC44NTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMjggc3F1YXJlcm9vdCAwLjA3MzcgLT4gMC4yNzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMjkgc3F1YXJlcm9vdCAwLjczOCAtPiAwLjg1OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMzMCBzcXVhcmVyb290IDAuMDczOCAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMzMSBzcXVhcmVyb290IDAuNzM5IC0+IDAuODYwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzMyIHNxdWFyZXJvb3QgMC4wNzM5IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzMzIHNxdWFyZXJvb3QgMC43NDEgLT4gMC44NjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMzQgc3F1YXJlcm9vdCAwLjA3NDEgLT4gMC4yNzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzMzUgc3F1YXJlcm9vdCAwLjc0MiAtPiAwLjg2MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMzNiBzcXVhcmVyb290IDAuMDc0MiAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDMzNyBzcXVhcmVyb290IDAuNzQzIC0+IDAuODYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzM4IHNxdWFyZXJvb3QgMC4wNzQzIC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzM5IHNxdWFyZXJvb3QgMC43NDQgLT4gMC44NjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNDAgc3F1YXJlcm9vdCAwLjA3NDQgLT4gMC4yNzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNDEgc3F1YXJlcm9vdCAwLjc0NSAtPiAwLjg2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM0MiBzcXVhcmVyb290IDAuMDc0NSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM0MyBzcXVhcmVyb290IDAuNzQ2IC0+IDAuODY0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzQ0IHNxdWFyZXJvb3QgMC4wNzQ2IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzQ1IHNxdWFyZXJvb3QgMC43NDcgLT4gMC44NjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNDYgc3F1YXJlcm9vdCAwLjA3NDcgLT4gMC4yNzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNDcgc3F1YXJlcm9vdCAwLjc0OCAtPiAwLjg2NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM0OCBzcXVhcmVyb290IDAuMDc0OCAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM0OSBzcXVhcmVyb290IDAuNzQ5IC0+IDAuODY1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzUwIHNxdWFyZXJvb3QgMC4wNzQ5IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzUxIHNxdWFyZXJvb3QgMC43NTEgLT4gMC44NjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNTIgc3F1YXJlcm9vdCAwLjA3NTEgLT4gMC4yNzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNTMgc3F1YXJlcm9vdCAwLjc1MiAtPiAwLjg2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM1NCBzcXVhcmVyb290IDAuMDc1MiAtPiAwLjI3NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM1NSBzcXVhcmVyb290IDAuNzUzIC0+IDAuODY4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzU2IHNxdWFyZXJvb3QgMC4wNzUzIC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzU3IHNxdWFyZXJvb3QgMC43NTQgLT4gMC44NjggIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNTggc3F1YXJlcm9vdCAwLjA3NTQgLT4gMC4yNzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNTkgc3F1YXJlcm9vdCAwLjc1NSAtPiAwLjg2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM2MCBzcXVhcmVyb290IDAuMDc1NSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM2MSBzcXVhcmVyb290IDAuNzU2IC0+IDAuODY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzYyIHNxdWFyZXJvb3QgMC4wNzU2IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzYzIHNxdWFyZXJvb3QgMC43NTcgLT4gMC44NzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNjQgc3F1YXJlcm9vdCAwLjA3NTcgLT4gMC4yNzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNjUgc3F1YXJlcm9vdCAwLjc1OCAtPiAwLjg3MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM2NiBzcXVhcmVyb290IDAuMDc1OCAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM2NyBzcXVhcmVyb290IDAuNzU5IC0+IDAuODcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzY4IHNxdWFyZXJvb3QgMC4wNzU5IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzY5IHNxdWFyZXJvb3QgMC43NjEgLT4gMC44NzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNzAgc3F1YXJlcm9vdCAwLjA3NjEgLT4gMC4yNzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNzEgc3F1YXJlcm9vdCAwLjc2MiAtPiAwLjg3MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM3MiBzcXVhcmVyb290IDAuMDc2MiAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM3MyBzcXVhcmVyb290IDAuNzYzIC0+IDAuODczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mzc0IHNxdWFyZXJvb3QgMC4wNzYzIC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mzc1IHNxdWFyZXJvb3QgMC43NjQgLT4gMC44NzQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNzYgc3F1YXJlcm9vdCAwLjA3NjQgLT4gMC4yNzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzNzcgc3F1YXJlcm9vdCAwLjc2NSAtPiAwLjg3NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM3OCBzcXVhcmVyb290IDAuMDc2NSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM3OSBzcXVhcmVyb290IDAuNzY2IC0+IDAuODc1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzgwIHNxdWFyZXJvb3QgMC4wNzY2IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzgxIHNxdWFyZXJvb3QgMC43NjcgLT4gMC44NzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzODIgc3F1YXJlcm9vdCAwLjA3NjcgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzODMgc3F1YXJlcm9vdCAwLjc2OCAtPiAwLjg3NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM4NCBzcXVhcmVyb290IDAuMDc2OCAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM4NSBzcXVhcmVyb290IDAuNzY5IC0+IDAuODc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mzg2IHNxdWFyZXJvb3QgMC4wNzY5IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mzg3IHNxdWFyZXJvb3QgMC43NzEgLT4gMC44NzggIEluZXhhY3QgUm91bmRlZAorc3F0eDQzODggc3F1YXJlcm9vdCAwLjA3NzEgLT4gMC4yNzggIEluZXhhY3QgUm91bmRlZAorc3F0eDQzODkgc3F1YXJlcm9vdCAwLjc3MiAtPiAwLjg3OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM5MCBzcXVhcmVyb290IDAuMDc3MiAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM5MSBzcXVhcmVyb290IDAuNzczIC0+IDAuODc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzkyIHNxdWFyZXJvb3QgMC4wNzczIC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0MzkzIHNxdWFyZXJvb3QgMC43NzQgLT4gMC44ODAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQzOTQgc3F1YXJlcm9vdCAwLjA3NzQgLT4gMC4yNzggIEluZXhhY3QgUm91bmRlZAorc3F0eDQzOTUgc3F1YXJlcm9vdCAwLjc3NSAtPiAwLjg4MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM5NiBzcXVhcmVyb290IDAuMDc3NSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDM5NyBzcXVhcmVyb290IDAuNzc2IC0+IDAuODgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mzk4IHNxdWFyZXJvb3QgMC4wNzc2IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Mzk5IHNxdWFyZXJvb3QgMC43NzcgLT4gMC44ODEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MDAgc3F1YXJlcm9vdCAwLjA3NzcgLT4gMC4yNzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MDEgc3F1YXJlcm9vdCAwLjc3OCAtPiAwLjg4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQwMiBzcXVhcmVyb290IDAuMDc3OCAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQwMyBzcXVhcmVyb290IDAuNzc5IC0+IDAuODgzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDA0IHNxdWFyZXJvb3QgMC4wNzc5IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDA1IHNxdWFyZXJvb3QgMC43ODEgLT4gMC44ODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MDYgc3F1YXJlcm9vdCAwLjA3ODEgLT4gMC4yNzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MDcgc3F1YXJlcm9vdCAwLjc4MiAtPiAwLjg4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQwOCBzcXVhcmVyb290IDAuMDc4MiAtPiAwLjI4MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQwOSBzcXVhcmVyb290IDAuNzgzIC0+IDAuODg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDEwIHNxdWFyZXJvb3QgMC4wNzgzIC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDExIHNxdWFyZXJvb3QgMC43ODQgLT4gMC44ODUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MTIgc3F1YXJlcm9vdCAwLjA3ODQgLT4gMC4yOAorc3F0eDQ0MTMgc3F1YXJlcm9vdCAwLjc4NSAtPiAwLjg4NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQxNCBzcXVhcmVyb290IDAuMDc4NSAtPiAwLjI4MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQxNSBzcXVhcmVyb290IDAuNzg2IC0+IDAuODg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDE2IHNxdWFyZXJvb3QgMC4wNzg2IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDE3IHNxdWFyZXJvb3QgMC43ODcgLT4gMC44ODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MTggc3F1YXJlcm9vdCAwLjA3ODcgLT4gMC4yODEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MTkgc3F1YXJlcm9vdCAwLjc4OCAtPiAwLjg4OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQyMCBzcXVhcmVyb290IDAuMDc4OCAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQyMSBzcXVhcmVyb290IDAuNzg5IC0+IDAuODg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDIyIHNxdWFyZXJvb3QgMC4wNzg5IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDIzIHNxdWFyZXJvb3QgMC43OTEgLT4gMC44ODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MjQgc3F1YXJlcm9vdCAwLjA3OTEgLT4gMC4yODEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MjUgc3F1YXJlcm9vdCAwLjc5MiAtPiAwLjg5MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQyNiBzcXVhcmVyb290IDAuMDc5MiAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQyNyBzcXVhcmVyb290IDAuNzkzIC0+IDAuODkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDI4IHNxdWFyZXJvb3QgMC4wNzkzIC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDI5IHNxdWFyZXJvb3QgMC43OTQgLT4gMC44OTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MzAgc3F1YXJlcm9vdCAwLjA3OTQgLT4gMC4yODIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MzEgc3F1YXJlcm9vdCAwLjc5NSAtPiAwLjg5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQzMiBzcXVhcmVyb290IDAuMDc5NSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQzMyBzcXVhcmVyb290IDAuNzk2IC0+IDAuODkyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDM0IHNxdWFyZXJvb3QgMC4wNzk2IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDM1IHNxdWFyZXJvb3QgMC43OTcgLT4gMC44OTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0MzYgc3F1YXJlcm9vdCAwLjA3OTcgLT4gMC4yODIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0Mzcgc3F1YXJlcm9vdCAwLjc5OCAtPiAwLjg5MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQzOCBzcXVhcmVyb290IDAuMDc5OCAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQzOSBzcXVhcmVyb290IDAuNzk5IC0+IDAuODk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDQwIHNxdWFyZXJvb3QgMC4wNzk5IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDQxIHNxdWFyZXJvb3QgMC44MDEgLT4gMC44OTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NDIgc3F1YXJlcm9vdCAwLjA4MDEgLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NDMgc3F1YXJlcm9vdCAwLjgwMiAtPiAwLjg5NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ0NCBzcXVhcmVyb290IDAuMDgwMiAtPiAwLjI4MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ0NSBzcXVhcmVyb290IDAuODAzIC0+IDAuODk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDQ2IHNxdWFyZXJvb3QgMC4wODAzIC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDQ3IHNxdWFyZXJvb3QgMC44MDQgLT4gMC44OTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NDggc3F1YXJlcm9vdCAwLjA4MDQgLT4gMC4yODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NDkgc3F1YXJlcm9vdCAwLjgwNSAtPiAwLjg5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ1MCBzcXVhcmVyb290IDAuMDgwNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ1MSBzcXVhcmVyb290IDAuODA2IC0+IDAuODk4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDUyIHNxdWFyZXJvb3QgMC4wODA2IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDUzIHNxdWFyZXJvb3QgMC44MDcgLT4gMC44OTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NTQgc3F1YXJlcm9vdCAwLjA4MDcgLT4gMC4yODQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NTUgc3F1YXJlcm9vdCAwLjgwOCAtPiAwLjg5OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ1NiBzcXVhcmVyb290IDAuMDgwOCAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ1NyBzcXVhcmVyb290IDAuODA5IC0+IDAuODk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDU4IHNxdWFyZXJvb3QgMC4wODA5IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDU5IHNxdWFyZXJvb3QgMC44MTEgLT4gMC45MDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NjAgc3F1YXJlcm9vdCAwLjA4MTEgLT4gMC4yODUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NjEgc3F1YXJlcm9vdCAwLjgxMiAtPiAwLjkwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ2MiBzcXVhcmVyb290IDAuMDgxMiAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ2MyBzcXVhcmVyb290IDAuODEzIC0+IDAuOTAyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDY0IHNxdWFyZXJvb3QgMC4wODEzIC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDY1IHNxdWFyZXJvb3QgMC44MTQgLT4gMC45MDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NjYgc3F1YXJlcm9vdCAwLjA4MTQgLT4gMC4yODUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0Njcgc3F1YXJlcm9vdCAwLjgxNSAtPiAwLjkwMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ2OCBzcXVhcmVyb290IDAuMDgxNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ2OSBzcXVhcmVyb290IDAuODE2IC0+IDAuOTAzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDcwIHNxdWFyZXJvb3QgMC4wODE2IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDcxIHNxdWFyZXJvb3QgMC44MTcgLT4gMC45MDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NzIgc3F1YXJlcm9vdCAwLjA4MTcgLT4gMC4yODYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0NzMgc3F1YXJlcm9vdCAwLjgxOCAtPiAwLjkwNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ3NCBzcXVhcmVyb290IDAuMDgxOCAtPiAwLjI4NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ3NSBzcXVhcmVyb290IDAuODE5IC0+IDAuOTA1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDc2IHNxdWFyZXJvb3QgMC4wODE5IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDc3IHNxdWFyZXJvb3QgMC44MjEgLT4gMC45MDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0Nzggc3F1YXJlcm9vdCAwLjA4MjEgLT4gMC4yODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0Nzkgc3F1YXJlcm9vdCAwLjgyMiAtPiAwLjkwNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ4MCBzcXVhcmVyb290IDAuMDgyMiAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ4MSBzcXVhcmVyb290IDAuODIzIC0+IDAuOTA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDgyIHNxdWFyZXJvb3QgMC4wODIzIC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDgzIHNxdWFyZXJvb3QgMC44MjQgLT4gMC45MDggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0ODQgc3F1YXJlcm9vdCAwLjA4MjQgLT4gMC4yODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0ODUgc3F1YXJlcm9vdCAwLjgyNSAtPiAwLjkwOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ4NiBzcXVhcmVyb290IDAuMDgyNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ4NyBzcXVhcmVyb290IDAuODI2IC0+IDAuOTA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDg4IHNxdWFyZXJvb3QgMC4wODI2IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDg5IHNxdWFyZXJvb3QgMC44MjcgLT4gMC45MDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0OTAgc3F1YXJlcm9vdCAwLjA4MjcgLT4gMC4yODggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0OTEgc3F1YXJlcm9vdCAwLjgyOCAtPiAwLjkxMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ5MiBzcXVhcmVyb290IDAuMDgyOCAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ5MyBzcXVhcmVyb290IDAuODI5IC0+IDAuOTEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDk0IHNxdWFyZXJvb3QgMC4wODI5IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NDk1IHNxdWFyZXJvb3QgMC44MzEgLT4gMC45MTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0OTYgc3F1YXJlcm9vdCAwLjA4MzEgLT4gMC4yODggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ0OTcgc3F1YXJlcm9vdCAwLjgzMiAtPiAwLjkxMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ5OCBzcXVhcmVyb290IDAuMDgzMiAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDQ5OSBzcXVhcmVyb290IDAuODMzIC0+IDAuOTEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTAwIHNxdWFyZXJvb3QgMC4wODMzIC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTAxIHNxdWFyZXJvb3QgMC44MzQgLT4gMC45MTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MDIgc3F1YXJlcm9vdCAwLjA4MzQgLT4gMC4yODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MDMgc3F1YXJlcm9vdCAwLjgzNSAtPiAwLjkxNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUwNCBzcXVhcmVyb290IDAuMDgzNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUwNSBzcXVhcmVyb290IDAuODM2IC0+IDAuOTE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTA2IHNxdWFyZXJvb3QgMC4wODM2IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTA3IHNxdWFyZXJvb3QgMC44MzcgLT4gMC45MTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MDggc3F1YXJlcm9vdCAwLjA4MzcgLT4gMC4yODkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MDkgc3F1YXJlcm9vdCAwLjgzOCAtPiAwLjkxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUxMCBzcXVhcmVyb290IDAuMDgzOCAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUxMSBzcXVhcmVyb290IDAuODM5IC0+IDAuOTE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTEyIHNxdWFyZXJvb3QgMC4wODM5IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTEzIHNxdWFyZXJvb3QgMC44NDEgLT4gMC45MTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MTQgc3F1YXJlcm9vdCAwLjA4NDEgLT4gMC4yOQorc3F0eDQ1MTUgc3F1YXJlcm9vdCAwLjg0MiAtPiAwLjkxOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUxNiBzcXVhcmVyb290IDAuMDg0MiAtPiAwLjI5MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUxNyBzcXVhcmVyb290IDAuODQzIC0+IDAuOTE4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTE4IHNxdWFyZXJvb3QgMC4wODQzIC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTE5IHNxdWFyZXJvb3QgMC44NDQgLT4gMC45MTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MjAgc3F1YXJlcm9vdCAwLjA4NDQgLT4gMC4yOTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MjEgc3F1YXJlcm9vdCAwLjg0NSAtPiAwLjkxOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUyMiBzcXVhcmVyb290IDAuMDg0NSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUyMyBzcXVhcmVyb290IDAuODQ2IC0+IDAuOTIwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTI0IHNxdWFyZXJvb3QgMC4wODQ2IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTI1IHNxdWFyZXJvb3QgMC44NDcgLT4gMC45MjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MjYgc3F1YXJlcm9vdCAwLjA4NDcgLT4gMC4yOTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1Mjcgc3F1YXJlcm9vdCAwLjg0OCAtPiAwLjkyMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUyOCBzcXVhcmVyb290IDAuMDg0OCAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUyOSBzcXVhcmVyb290IDAuODQ5IC0+IDAuOTIxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTMwIHNxdWFyZXJvb3QgMC4wODQ5IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTMxIHNxdWFyZXJvb3QgMC44NTEgLT4gMC45MjIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MzIgc3F1YXJlcm9vdCAwLjA4NTEgLT4gMC4yOTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1MzMgc3F1YXJlcm9vdCAwLjg1MiAtPiAwLjkyMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUzNCBzcXVhcmVyb290IDAuMDg1MiAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDUzNSBzcXVhcmVyb290IDAuODUzIC0+IDAuOTI0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTM2IHNxdWFyZXJvb3QgMC4wODUzIC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTM3IHNxdWFyZXJvb3QgMC44NTQgLT4gMC45MjQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1Mzggc3F1YXJlcm9vdCAwLjA4NTQgLT4gMC4yOTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1Mzkgc3F1YXJlcm9vdCAwLjg1NSAtPiAwLjkyNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU0MCBzcXVhcmVyb290IDAuMDg1NSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU0MSBzcXVhcmVyb290IDAuODU2IC0+IDAuOTI1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTQyIHNxdWFyZXJvb3QgMC4wODU2IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTQzIHNxdWFyZXJvb3QgMC44NTcgLT4gMC45MjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NDQgc3F1YXJlcm9vdCAwLjA4NTcgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NDUgc3F1YXJlcm9vdCAwLjg1OCAtPiAwLjkyNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU0NiBzcXVhcmVyb290IDAuMDg1OCAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU0NyBzcXVhcmVyb290IDAuODU5IC0+IDAuOTI3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTQ4IHNxdWFyZXJvb3QgMC4wODU5IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTQ5IHNxdWFyZXJvb3QgMC44NjEgLT4gMC45MjggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NTAgc3F1YXJlcm9vdCAwLjA4NjEgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NTEgc3F1YXJlcm9vdCAwLjg2MiAtPiAwLjkyOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU1MiBzcXVhcmVyb290IDAuMDg2MiAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU1MyBzcXVhcmVyb290IDAuODYzIC0+IDAuOTI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTU0IHNxdWFyZXJvb3QgMC4wODYzIC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTU1IHNxdWFyZXJvb3QgMC44NjQgLT4gMC45MzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NTYgc3F1YXJlcm9vdCAwLjA4NjQgLT4gMC4yOTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NTcgc3F1YXJlcm9vdCAwLjg2NSAtPiAwLjkzMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU1OCBzcXVhcmVyb290IDAuMDg2NSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU1OSBzcXVhcmVyb290IDAuODY2IC0+IDAuOTMxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTYwIHNxdWFyZXJvb3QgMC4wODY2IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTYxIHNxdWFyZXJvb3QgMC44NjcgLT4gMC45MzEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NjIgc3F1YXJlcm9vdCAwLjA4NjcgLT4gMC4yOTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NjMgc3F1YXJlcm9vdCAwLjg2OCAtPiAwLjkzMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU2NCBzcXVhcmVyb290IDAuMDg2OCAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU2NSBzcXVhcmVyb290IDAuODY5IC0+IDAuOTMyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTY2IHNxdWFyZXJvb3QgMC4wODY5IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTY3IHNxdWFyZXJvb3QgMC44NzEgLT4gMC45MzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1Njggc3F1YXJlcm9vdCAwLjA4NzEgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1Njkgc3F1YXJlcm9vdCAwLjg3MiAtPiAwLjkzNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU3MCBzcXVhcmVyb290IDAuMDg3MiAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU3MSBzcXVhcmVyb290IDAuODczIC0+IDAuOTM0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTcyIHNxdWFyZXJvb3QgMC4wODczIC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTczIHNxdWFyZXJvb3QgMC44NzQgLT4gMC45MzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NzQgc3F1YXJlcm9vdCAwLjA4NzQgLT4gMC4yOTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1NzUgc3F1YXJlcm9vdCAwLjg3NSAtPiAwLjkzNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU3NiBzcXVhcmVyb290IDAuMDg3NSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU3NyBzcXVhcmVyb290IDAuODc2IC0+IDAuOTM2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTc4IHNxdWFyZXJvb3QgMC4wODc2IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTc5IHNxdWFyZXJvb3QgMC44NzcgLT4gMC45MzYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1ODAgc3F1YXJlcm9vdCAwLjA4NzcgLT4gMC4yOTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1ODEgc3F1YXJlcm9vdCAwLjg3OCAtPiAwLjkzNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU4MiBzcXVhcmVyb290IDAuMDg3OCAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU4MyBzcXVhcmVyb290IDAuODc5IC0+IDAuOTM4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTg0IHNxdWFyZXJvb3QgMC4wODc5IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTg1IHNxdWFyZXJvb3QgMC44ODEgLT4gMC45MzkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1ODYgc3F1YXJlcm9vdCAwLjA4ODEgLT4gMC4yOTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1ODcgc3F1YXJlcm9vdCAwLjg4MiAtPiAwLjkzOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU4OCBzcXVhcmVyb290IDAuMDg4MiAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU4OSBzcXVhcmVyb290IDAuODgzIC0+IDAuOTQwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTkwIHNxdWFyZXJvb3QgMC4wODgzIC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTkxIHNxdWFyZXJvb3QgMC44ODQgLT4gMC45NDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1OTIgc3F1YXJlcm9vdCAwLjA4ODQgLT4gMC4yOTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1OTMgc3F1YXJlcm9vdCAwLjg4NSAtPiAwLjk0MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU5NCBzcXVhcmVyb290IDAuMDg4NSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDU5NSBzcXVhcmVyb290IDAuODg2IC0+IDAuOTQxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTk2IHNxdWFyZXJvb3QgMC4wODg2IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NTk3IHNxdWFyZXJvb3QgMC44ODcgLT4gMC45NDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1OTggc3F1YXJlcm9vdCAwLjA4ODcgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ1OTkgc3F1YXJlcm9vdCAwLjg4OCAtPiAwLjk0MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYwMCBzcXVhcmVyb290IDAuMDg4OCAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYwMSBzcXVhcmVyb290IDAuODg5IC0+IDAuOTQzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjAyIHNxdWFyZXJvb3QgMC4wODg5IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjAzIHNxdWFyZXJvb3QgMC44OTEgLT4gMC45NDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MDQgc3F1YXJlcm9vdCAwLjA4OTEgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MDUgc3F1YXJlcm9vdCAwLjg5MiAtPiAwLjk0NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYwNiBzcXVhcmVyb290IDAuMDg5MiAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYwNyBzcXVhcmVyb290IDAuODkzIC0+IDAuOTQ1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjA4IHNxdWFyZXJvb3QgMC4wODkzIC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjA5IHNxdWFyZXJvb3QgMC44OTQgLT4gMC45NDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MTAgc3F1YXJlcm9vdCAwLjA4OTQgLT4gMC4yOTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MTEgc3F1YXJlcm9vdCAwLjg5NSAtPiAwLjk0NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYxMiBzcXVhcmVyb290IDAuMDg5NSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYxMyBzcXVhcmVyb290IDAuODk2IC0+IDAuOTQ3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjE0IHNxdWFyZXJvb3QgMC4wODk2IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjE1IHNxdWFyZXJvb3QgMC44OTcgLT4gMC45NDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MTYgc3F1YXJlcm9vdCAwLjA4OTcgLT4gMC4yOTkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MTcgc3F1YXJlcm9vdCAwLjg5OCAtPiAwLjk0OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYxOCBzcXVhcmVyb290IDAuMDg5OCAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYxOSBzcXVhcmVyb290IDAuODk5IC0+IDAuOTQ4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjIwIHNxdWFyZXJvb3QgMC4wODk5IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjIxIHNxdWFyZXJvb3QgMC45MDEgLT4gMC45NDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MjIgc3F1YXJlcm9vdCAwLjA5MDEgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MjMgc3F1YXJlcm9vdCAwLjkwMiAtPiAwLjk1MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYyNCBzcXVhcmVyb290IDAuMDkwMiAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYyNSBzcXVhcmVyb290IDAuOTAzIC0+IDAuOTUwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjI2IHNxdWFyZXJvb3QgMC4wOTAzIC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjI3IHNxdWFyZXJvb3QgMC45MDQgLT4gMC45NTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2Mjggc3F1YXJlcm9vdCAwLjA5MDQgLT4gMC4zMDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2Mjkgc3F1YXJlcm9vdCAwLjkwNSAtPiAwLjk1MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYzMCBzcXVhcmVyb290IDAuMDkwNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYzMSBzcXVhcmVyb290IDAuOTA2IC0+IDAuOTUyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjMyIHNxdWFyZXJvb3QgMC4wOTA2IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjMzIHNxdWFyZXJvb3QgMC45MDcgLT4gMC45NTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MzQgc3F1YXJlcm9vdCAwLjA5MDcgLT4gMC4zMDEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2MzUgc3F1YXJlcm9vdCAwLjkwOCAtPiAwLjk1MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYzNiBzcXVhcmVyb290IDAuMDkwOCAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDYzNyBzcXVhcmVyb290IDAuOTA5IC0+IDAuOTUzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjM4IHNxdWFyZXJvb3QgMC4wOTA5IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjM5IHNxdWFyZXJvb3QgMC45MTEgLT4gMC45NTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NDAgc3F1YXJlcm9vdCAwLjA5MTEgLT4gMC4zMDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NDEgc3F1YXJlcm9vdCAwLjkxMiAtPiAwLjk1NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY0MiBzcXVhcmVyb290IDAuMDkxMiAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY0MyBzcXVhcmVyb290IDAuOTEzIC0+IDAuOTU2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjQ0IHNxdWFyZXJvb3QgMC4wOTEzIC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjQ1IHNxdWFyZXJvb3QgMC45MTQgLT4gMC45NTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NDYgc3F1YXJlcm9vdCAwLjA5MTQgLT4gMC4zMDIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NDcgc3F1YXJlcm9vdCAwLjkxNSAtPiAwLjk1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY0OCBzcXVhcmVyb290IDAuMDkxNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY0OSBzcXVhcmVyb290IDAuOTE2IC0+IDAuOTU3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjUwIHNxdWFyZXJvb3QgMC4wOTE2IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjUxIHNxdWFyZXJvb3QgMC45MTcgLT4gMC45NTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NTIgc3F1YXJlcm9vdCAwLjA5MTcgLT4gMC4zMDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NTMgc3F1YXJlcm9vdCAwLjkxOCAtPiAwLjk1OCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY1NCBzcXVhcmVyb290IDAuMDkxOCAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY1NSBzcXVhcmVyb290IDAuOTE5IC0+IDAuOTU5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjU2IHNxdWFyZXJvb3QgMC4wOTE5IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjU3IHNxdWFyZXJvb3QgMC45MjEgLT4gMC45NjAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NTggc3F1YXJlcm9vdCAwLjA5MjEgLT4gMC4zMDMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NTkgc3F1YXJlcm9vdCAwLjkyMiAtPiAwLjk2MCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY2MCBzcXVhcmVyb290IDAuMDkyMiAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY2MSBzcXVhcmVyb290IDAuOTIzIC0+IDAuOTYxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjYyIHNxdWFyZXJvb3QgMC4wOTIzIC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjYzIHNxdWFyZXJvb3QgMC45MjQgLT4gMC45NjEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NjQgc3F1YXJlcm9vdCAwLjA5MjQgLT4gMC4zMDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NjUgc3F1YXJlcm9vdCAwLjkyNSAtPiAwLjk2MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY2NiBzcXVhcmVyb290IDAuMDkyNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY2NyBzcXVhcmVyb290IDAuOTI2IC0+IDAuOTYyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjY4IHNxdWFyZXJvb3QgMC4wOTI2IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjY5IHNxdWFyZXJvb3QgMC45MjcgLT4gMC45NjMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NzAgc3F1YXJlcm9vdCAwLjA5MjcgLT4gMC4zMDQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NzEgc3F1YXJlcm9vdCAwLjkyOCAtPiAwLjk2MyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY3MiBzcXVhcmVyb290IDAuMDkyOCAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY3MyBzcXVhcmVyb290IDAuOTI5IC0+IDAuOTY0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Njc0IHNxdWFyZXJvb3QgMC4wOTI5IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Njc1IHNxdWFyZXJvb3QgMC45MzEgLT4gMC45NjUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2NzYgc3F1YXJlcm9vdCAwLjA5MzEgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2Nzcgc3F1YXJlcm9vdCAwLjkzMiAtPiAwLjk2NSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY3OCBzcXVhcmVyb290IDAuMDkzMiAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY3OSBzcXVhcmVyb290IDAuOTMzIC0+IDAuOTY2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjgwIHNxdWFyZXJvb3QgMC4wOTMzIC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjgxIHNxdWFyZXJvb3QgMC45MzQgLT4gMC45NjYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2ODIgc3F1YXJlcm9vdCAwLjA5MzQgLT4gMC4zMDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2ODMgc3F1YXJlcm9vdCAwLjkzNSAtPiAwLjk2NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY4NCBzcXVhcmVyb290IDAuMDkzNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY4NSBzcXVhcmVyb290IDAuOTM2IC0+IDAuOTY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Njg2IHNxdWFyZXJvb3QgMC4wOTM2IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Njg3IHNxdWFyZXJvb3QgMC45MzcgLT4gMC45NjggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2ODggc3F1YXJlcm9vdCAwLjA5MzcgLT4gMC4zMDYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2ODkgc3F1YXJlcm9vdCAwLjkzOCAtPiAwLjk2OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY5MCBzcXVhcmVyb290IDAuMDkzOCAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY5MSBzcXVhcmVyb290IDAuOTM5IC0+IDAuOTY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjkyIHNxdWFyZXJvb3QgMC4wOTM5IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NjkzIHNxdWFyZXJvb3QgMC45NDEgLT4gMC45NzAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2OTQgc3F1YXJlcm9vdCAwLjA5NDEgLT4gMC4zMDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ2OTUgc3F1YXJlcm9vdCAwLjk0MiAtPiAwLjk3MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY5NiBzcXVhcmVyb290IDAuMDk0MiAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDY5NyBzcXVhcmVyb290IDAuOTQzIC0+IDAuOTcxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Njk4IHNxdWFyZXJvb3QgMC4wOTQzIC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Njk5IHNxdWFyZXJvb3QgMC45NDQgLT4gMC45NzIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MDAgc3F1YXJlcm9vdCAwLjA5NDQgLT4gMC4zMDcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MDEgc3F1YXJlcm9vdCAwLjk0NSAtPiAwLjk3MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcwMiBzcXVhcmVyb290IDAuMDk0NSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcwMyBzcXVhcmVyb290IDAuOTQ2IC0+IDAuOTczICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzA0IHNxdWFyZXJvb3QgMC4wOTQ2IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzA1IHNxdWFyZXJvb3QgMC45NDcgLT4gMC45NzMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MDYgc3F1YXJlcm9vdCAwLjA5NDcgLT4gMC4zMDggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MDcgc3F1YXJlcm9vdCAwLjk0OCAtPiAwLjk3NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcwOCBzcXVhcmVyb290IDAuMDk0OCAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcwOSBzcXVhcmVyb290IDAuOTQ5IC0+IDAuOTc0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzEwIHNxdWFyZXJvb3QgMC4wOTQ5IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzExIHNxdWFyZXJvb3QgMC45NTEgLT4gMC45NzUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MTIgc3F1YXJlcm9vdCAwLjA5NTEgLT4gMC4zMDggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MTMgc3F1YXJlcm9vdCAwLjk1MiAtPiAwLjk3NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcxNCBzcXVhcmVyb290IDAuMDk1MiAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcxNSBzcXVhcmVyb290IDAuOTUzIC0+IDAuOTc2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzE2IHNxdWFyZXJvb3QgMC4wOTUzIC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzE3IHNxdWFyZXJvb3QgMC45NTQgLT4gMC45NzcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MTggc3F1YXJlcm9vdCAwLjA5NTQgLT4gMC4zMDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MTkgc3F1YXJlcm9vdCAwLjk1NSAtPiAwLjk3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcyMCBzcXVhcmVyb290IDAuMDk1NSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcyMSBzcXVhcmVyb290IDAuOTU2IC0+IDAuOTc4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzIyIHNxdWFyZXJvb3QgMC4wOTU2IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzIzIHNxdWFyZXJvb3QgMC45NTcgLT4gMC45NzggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MjQgc3F1YXJlcm9vdCAwLjA5NTcgLT4gMC4zMDkgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MjUgc3F1YXJlcm9vdCAwLjk1OCAtPiAwLjk3OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcyNiBzcXVhcmVyb290IDAuMDk1OCAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDcyNyBzcXVhcmVyb290IDAuOTU5IC0+IDAuOTc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzI4IHNxdWFyZXJvb3QgMC4wOTU5IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzI5IHNxdWFyZXJvb3QgMC45NjEgLT4gMC45ODAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MzAgc3F1YXJlcm9vdCAwLjA5NjEgLT4gMC4zMQorc3F0eDQ3MzEgc3F1YXJlcm9vdCAwLjk2MiAtPiAwLjk4MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDczMiBzcXVhcmVyb290IDAuMDk2MiAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDczMyBzcXVhcmVyb290IDAuOTYzIC0+IDAuOTgxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzM0IHNxdWFyZXJvb3QgMC4wOTYzIC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzM1IHNxdWFyZXJvb3QgMC45NjQgLT4gMC45ODIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3MzYgc3F1YXJlcm9vdCAwLjA5NjQgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3Mzcgc3F1YXJlcm9vdCAwLjk2NSAtPiAwLjk4MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDczOCBzcXVhcmVyb290IDAuMDk2NSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDczOSBzcXVhcmVyb290IDAuOTY2IC0+IDAuOTgzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzQwIHNxdWFyZXJvb3QgMC4wOTY2IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzQxIHNxdWFyZXJvb3QgMC45NjcgLT4gMC45ODMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NDIgc3F1YXJlcm9vdCAwLjA5NjcgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NDMgc3F1YXJlcm9vdCAwLjk2OCAtPiAwLjk4NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc0NCBzcXVhcmVyb290IDAuMDk2OCAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc0NSBzcXVhcmVyb290IDAuOTY5IC0+IDAuOTg0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzQ2IHNxdWFyZXJvb3QgMC4wOTY5IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzQ3IHNxdWFyZXJvb3QgMC45NzEgLT4gMC45ODUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NDggc3F1YXJlcm9vdCAwLjA5NzEgLT4gMC4zMTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NDkgc3F1YXJlcm9vdCAwLjk3MiAtPiAwLjk4NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc1MCBzcXVhcmVyb290IDAuMDk3MiAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc1MSBzcXVhcmVyb290IDAuOTczIC0+IDAuOTg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzUyIHNxdWFyZXJvb3QgMC4wOTczIC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzUzIHNxdWFyZXJvb3QgMC45NzQgLT4gMC45ODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NTQgc3F1YXJlcm9vdCAwLjA5NzQgLT4gMC4zMTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NTUgc3F1YXJlcm9vdCAwLjk3NSAtPiAwLjk4NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc1NiBzcXVhcmVyb290IDAuMDk3NSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc1NyBzcXVhcmVyb290IDAuOTc2IC0+IDAuOTg4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzU4IHNxdWFyZXJvb3QgMC4wOTc2IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzU5IHNxdWFyZXJvb3QgMC45NzcgLT4gMC45ODggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NjAgc3F1YXJlcm9vdCAwLjA5NzcgLT4gMC4zMTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NjEgc3F1YXJlcm9vdCAwLjk3OCAtPiAwLjk4OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc2MiBzcXVhcmVyb290IDAuMDk3OCAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc2MyBzcXVhcmVyb290IDAuOTc5IC0+IDAuOTg5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzY0IHNxdWFyZXJvb3QgMC4wOTc5IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzY1IHNxdWFyZXJvb3QgMC45ODEgLT4gMC45OTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NjYgc3F1YXJlcm9vdCAwLjA5ODEgLT4gMC4zMTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3Njcgc3F1YXJlcm9vdCAwLjk4MiAtPiAwLjk5MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc2OCBzcXVhcmVyb290IDAuMDk4MiAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc2OSBzcXVhcmVyb290IDAuOTgzIC0+IDAuOTkxICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzcwIHNxdWFyZXJvb3QgMC4wOTgzIC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzcxIHNxdWFyZXJvb3QgMC45ODQgLT4gMC45OTIgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NzIgc3F1YXJlcm9vdCAwLjA5ODQgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3NzMgc3F1YXJlcm9vdCAwLjk4NSAtPiAwLjk5MiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc3NCBzcXVhcmVyb290IDAuMDk4NSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc3NSBzcXVhcmVyb290IDAuOTg2IC0+IDAuOTkzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Nzc2IHNxdWFyZXJvb3QgMC4wOTg2IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Nzc3IHNxdWFyZXJvb3QgMC45ODcgLT4gMC45OTMgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3Nzggc3F1YXJlcm9vdCAwLjA5ODcgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3Nzkgc3F1YXJlcm9vdCAwLjk4OCAtPiAwLjk5NCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc4MCBzcXVhcmVyb290IDAuMDk4OCAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc4MSBzcXVhcmVyb290IDAuOTg5IC0+IDAuOTk0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzgyIHNxdWFyZXJvb3QgMC4wOTg5IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0NzgzIHNxdWFyZXJvb3QgMC45OTEgLT4gMC45OTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3ODQgc3F1YXJlcm9vdCAwLjA5OTEgLT4gMC4zMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3ODUgc3F1YXJlcm9vdCAwLjk5MiAtPiAwLjk5NiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc4NiBzcXVhcmVyb290IDAuMDk5MiAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc4NyBzcXVhcmVyb290IDAuOTkzIC0+IDAuOTk2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Nzg4IHNxdWFyZXJvb3QgMC4wOTkzIC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Nzg5IHNxdWFyZXJvb3QgMC45OTQgLT4gMC45OTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3OTAgc3F1YXJlcm9vdCAwLjA5OTQgLT4gMC4zMTUgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3OTEgc3F1YXJlcm9vdCAwLjk5NSAtPiAwLjk5NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc5MiBzcXVhcmVyb290IDAuMDk5NSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc5MyBzcXVhcmVyb290IDAuOTk2IC0+IDAuOTk4ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Nzk0IHNxdWFyZXJvb3QgMC4wOTk2IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0Nzk1IHNxdWFyZXJvb3QgMC45OTcgLT4gMC45OTggIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3OTYgc3F1YXJlcm9vdCAwLjA5OTcgLT4gMC4zMTYgIEluZXhhY3QgUm91bmRlZAorc3F0eDQ3OTcgc3F1YXJlcm9vdCAwLjk5OCAtPiAwLjk5OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc5OCBzcXVhcmVyb290IDAuMDk5OCAtPiAwLjMxNiAgSW5leGFjdCBSb3VuZGVkCitzcXR4NDc5OSBzcXVhcmVyb290IDAuOTk5IC0+IDAuOTk5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg0ODAwIHNxdWFyZXJvb3QgMC4wOTk5IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQKKworLS0gQSBncm91cCBvZiBwcmVjaXNpb24gNCB0ZXN0cyB3aGVyZSBIdWxsICYgQWJyaGFtIGFkanVzdG1lbnRzIGFyZQorLS0gbmVlZGVkIGluIHNvbWUgY2FzZXMgKGJvdGggdXAgYW5kIGRvd24pIFtzZWUgSHVsbDE5ODViXQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorbWF4RXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3ByZWNpc2lvbjogICA0CitzcXR4NTAwMSBzcXVhcmVyb290IDAuMDExOCAgLT4gMC4xMDg2ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg1MDAyIHNxdWFyZXJvb3QgMC4xMTkgICAtPiAwLjM0NTAgIEluZXhhY3QgUm91bmRlZAorc3F0eDUwMDMgc3F1YXJlcm9vdCAwLjAxMTkgIC0+IDAuMTA5MSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NTAwNCBzcXVhcmVyb290IDAuMTIxICAgLT4gMC4zNDc5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg1MDA1IHNxdWFyZXJvb3QgMC4wMTIxICAtPiAwLjExCitzcXR4NTAwNiBzcXVhcmVyb290IDAuMTIyICAgLT4gMC4zNDkzICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg1MDA3IHNxdWFyZXJvb3QgMC4wMTIyICAtPiAwLjExMDUgIEluZXhhY3QgUm91bmRlZAorc3F0eDUwMDggc3F1YXJlcm9vdCAwLjEyMyAgIC0+IDAuMzUwNyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NTAwOSBzcXVhcmVyb290IDAuNDk0ICAgLT4gMC43MDI5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg1MDEwIHNxdWFyZXJvb3QgMC4wNjY5ICAtPiAwLjI1ODcgIEluZXhhY3QgUm91bmRlZAorc3F0eDUwMTEgc3F1YXJlcm9vdCAwLjk1NTggIC0+IDAuOTc3NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NTAxMiBzcXVhcmVyb290IDAuOTM0OCAgLT4gMC45NjY5ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg1MDEzIHNxdWFyZXJvb3QgMC45MzQ1ICAtPiAwLjk2NjcgIEluZXhhY3QgUm91bmRlZAorc3F0eDUwMTQgc3F1YXJlcm9vdCAwLjA5MzQ1IC0+IDAuMzA1NyAgSW5leGFjdCBSb3VuZGVkCitzcXR4NTAxNSBzcXVhcmVyb290IDAuOTM0NiAgLT4gMC45NjY3ICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg1MDE2IHNxdWFyZXJvb3QgMC4wOTM0NiAtPiAwLjMwNTcgIEluZXhhY3QgUm91bmRlZAorc3F0eDUwMTcgc3F1YXJlcm9vdCAwLjkzNDcgIC0+IDAuOTY2OCAgSW5leGFjdCBSb3VuZGVkCisKKy0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKK3ByZWNpc2lvbjogOQorc3F0eDcwMCBzcXVhcmVyb290ICAwICAgICAgIC0+ICcwJworc3F0eDcwMSBzcXVhcmVyb290ICAtMCAgICAgIC0+ICctMCcKK3NxdHg3MDIgc3F1YXJlcm9vdCAgMC4zOSAgICAtPiAwLjYyNDQ5OTgwMCAgICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3MDMgc3F1YXJlcm9vdCAgMTAwICAgICAtPiAnMTAnCitzcXR4NzA0IHNxdWFyZXJvb3QgIDEuMDAgICAgLT4gJzEuMCcKK3NxdHg3MDUgc3F1YXJlcm9vdCAgNyAgICAgICAtPiAnMi42NDU3NTEzMScgICBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3MDYgc3F1YXJlcm9vdCAgMTAgICAgICAtPiAzLjE2MjI3NzY2ICAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gc29tZSBvbmUtb2ZmcworcHJlY2lzaW9uOiA5CitzcXR4NzExIHNxdWFyZXJvb3QgIDAuMSAgICAgLT4gMC4zMTYyMjc3NjYgICAgSW5leGFjdCBSb3VuZGVkCitzcXR4NzEyIHNxdWFyZXJvb3QgIDAuMiAgICAgLT4gMC40NDcyMTM1OTUgICAgSW5leGFjdCBSb3VuZGVkCitzcXR4NzEzIHNxdWFyZXJvb3QgIDAuMyAgICAgLT4gMC41NDc3MjI1NTggICAgSW5leGFjdCBSb3VuZGVkCitzcXR4NzE0IHNxdWFyZXJvb3QgIDAuNCAgICAgLT4gMC42MzI0NTU1MzIgICAgSW5leGFjdCBSb3VuZGVkCitzcXR4NzE1IHNxdWFyZXJvb3QgIDAuNSAgICAgLT4gMC43MDcxMDY3ODEgICAgSW5leGFjdCBSb3VuZGVkCitzcXR4NzE2IHNxdWFyZXJvb3QgIDAuNiAgICAgLT4gMC43NzQ1OTY2NjkgICAgSW5leGFjdCBSb3VuZGVkCitzcXR4NzE3IHNxdWFyZXJvb3QgIDAuNyAgICAgLT4gMC44MzY2NjAwMjcgICAgSW5leGFjdCBSb3VuZGVkCitzcXR4NzE4IHNxdWFyZXJvb3QgIDAuOCAgICAgLT4gMC44OTQ0MjcxOTEgICAgSW5leGFjdCBSb3VuZGVkCitzcXR4NzE5IHNxdWFyZXJvb3QgIDAuOSAgICAgLT4gMC45NDg2ODMyOTggICAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDEwICAgICAgICAgICAgICAgLS0gbm90ZSBubyBub3JtYWxpemF0b2luIGhlcmUKK3NxdHg3MjAgc3F1YXJlcm9vdCArMC4xICAgICAtPiAwLjMxNjIyNzc2NjAgICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTEKK3NxdHg3MjEgc3F1YXJlcm9vdCArMC4xICAgICAtPiAwLjMxNjIyNzc2NjAyICBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMTIKK3NxdHg3MjIgc3F1YXJlcm9vdCArMC4xICAgICAtPiAwLjMxNjIyNzc2NjAxNyBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogOQorc3F0eDcyMyBzcXVhcmVyb290ICAwLjM5ICAgIC0+IDAuNjI0NDk5ODAwICAgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxNQorc3F0eDcyNCBzcXVhcmVyb290ICAwLjM5ICAgIC0+IDAuNjI0NDk5Nzk5ODM5ODQwIEluZXhhY3QgUm91bmRlZAorCistLSBkaXNjdXNzaW9uIGNhc2VzCitwcmVjaXNpb246IDcKK3NxdHg3MzEgc3F1YXJlcm9vdCAgICAgOSAgIC0+ICAgMworc3F0eDczMiBzcXVhcmVyb290ICAgMTAwICAgLT4gIDEwCitzcXR4NzMzIHNxdWFyZXJvb3QgICAxMjMgICAtPiAgMTEuMDkwNTQgIEluZXhhY3QgUm91bmRlZAorc3F0eDczNCBzcXVhcmVyb290ICAgMTQ0ICAgLT4gIDEyCitzcXR4NzM1IHNxdWFyZXJvb3QgICAxNTYgICAtPiAgMTIuNDkwMDAgIEluZXhhY3QgUm91bmRlZAorc3F0eDczNiBzcXVhcmVyb290IDEwMDAwICAgLT4gMTAwCisKKy0tIHZhbHVlcyBjbG9zZSB0byBvdmVyZmxvdyAoaWYgdGhlcmUgd2VyZSBpbnB1dCByb3VuZGluZykKK21heGV4cG9uZW50OiA5OQorbWluZXhwb25lbnQ6IC05OQorcHJlY2lzaW9uOiA1CitzcXR4NzYwIHNxdWFyZXJvb3QgIDkuOTk5N0UrOTkgICAtPiA5Ljk5OThFKzQ5IEluZXhhY3QgUm91bmRlZAorc3F0eDc2MSBzcXVhcmVyb290ICA5Ljk5OThFKzk5ICAgLT4gOS45OTk5RSs0OSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3NjIgc3F1YXJlcm9vdCAgOS45OTk5RSs5OSAgIC0+IDkuOTk5OUUrNDkgSW5leGFjdCBSb3VuZGVkCitzcXR4NzYzIHNxdWFyZXJvb3QgIDkuOTk5OTFFKzk5ICAtPiAxLjAwMDBFKzUwIEluZXhhY3QgUm91bmRlZAorc3F0eDc2NCBzcXVhcmVyb290ICA5Ljk5OTk0RSs5OSAgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg3NjUgc3F1YXJlcm9vdCAgOS45OTk5NUUrOTkgIC0+IDEuMDAwMEUrNTAgSW5leGFjdCBSb3VuZGVkCitzcXR4NzY2IHNxdWFyZXJvb3QgIDkuOTk5OTlFKzk5ICAtPiAxLjAwMDBFKzUwIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiA5CitzcXR4NzcwIHNxdWFyZXJvb3QgIDkuOTk5N0UrOTkgICAtPiA5Ljk5OTg1MDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NzcxIHNxdWFyZXJvb3QgIDkuOTk5OEUrOTkgICAtPiA5Ljk5OTkwMDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NzcyIHNxdWFyZXJvb3QgIDkuOTk5OUUrOTkgICAtPiA5Ljk5OTk1MDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4NzczIHNxdWFyZXJvb3QgIDkuOTk5OTFFKzk5ICAtPiA5Ljk5OTk1NTAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Nzc0IHNxdWFyZXJvb3QgIDkuOTk5OTRFKzk5ICAtPiA5Ljk5OTk3MDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Nzc1IHNxdWFyZXJvb3QgIDkuOTk5OTVFKzk5ICAtPiA5Ljk5OTk3NTAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitzcXR4Nzc2IHNxdWFyZXJvb3QgIDkuOTk5OTlFKzk5ICAtPiA5Ljk5OTk5NTAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDIwCitzcXR4NzgwIHNxdWFyZXJvb3QgIDkuOTk5N0UrOTkgICAtPiAnOS45OTk4NDk5OTg4NzQ5ODMxMjQ3RSs0OScgSW5leGFjdCBSb3VuZGVkCitzcXR4NzgxIHNxdWFyZXJvb3QgIDkuOTk5OEUrOTkgICAtPiAnOS45OTk4OTk5OTk0OTk5OTQ5OTk5RSs0OScgSW5leGFjdCBSb3VuZGVkCitzcXR4NzgyIHNxdWFyZXJvb3QgIDkuOTk5OUUrOTkgICAtPiAnOS45OTk5NDk5OTk4NzQ5OTkzNzUwRSs0OScgSW5leGFjdCBSb3VuZGVkCitzcXR4NzgzIHNxdWFyZXJvb3QgIDkuOTk5OTFFKzk5ICAtPiAnOS45OTk5NTQ5OTk4OTg3NDk1NDQ0RSs0OScgSW5leGFjdCBSb3VuZGVkCitzcXR4Nzg0IHNxdWFyZXJvb3QgIDkuOTk5OTRFKzk5ICAtPiAnOS45OTk5Njk5OTk5NTQ5OTk4NjUwRSs0OScgSW5leGFjdCBSb3VuZGVkCitzcXR4Nzg1IHNxdWFyZXJvb3QgIDkuOTk5OTVFKzk5ICAtPiAnOS45OTk5NzQ5OTk5Njg3NDk5MjE5RSs0OScgSW5leGFjdCBSb3VuZGVkCitzcXR4Nzg2IHNxdWFyZXJvb3QgIDkuOTk5OTlFKzk5ICAtPiAnOS45OTk5OTQ5OTk5OTg3NDk5OTk0RSs0OScgSW5leGFjdCBSb3VuZGVkCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvd3MgW3RoZXNlIGNhbiBvbmx5IHJlc3VsdCB3aGVuIGVNYXggaXMgPCBkaWdpdHMrMV0KKy0tIEV0aW55ID0gLShFbWF4ICsgKHByZWNpc2lvbi0xKSkKKy0tIHN0YXJ0IHdpdGggc3Vibm9ybWFsIG9wZXJhbmRzIGFuZCBub3JtYWwgcmVzdWx0cworbWF4ZXhwb25lbnQ6IDkKK21pbmV4cG9uZW50OiAtOQorcHJlY2lzaW9uOiA5ICAgICAgICAgICAgICAgIC0tIEV0aW55PS0xNworc3F0eDgwMCBzcXVhcmVyb290ICAxRS0xNyAgIC0+IDMuMTYyMjc3NjZFLTkgSW5leGFjdCBSb3VuZGVkCitzcXR4ODAxIHNxdWFyZXJvb3QgMTBFLTE3ICAgLT4gMS4wRS04CitwcmVjaXNpb246IDEwICAgICAgICAgICAgICAgLS0gRXRpbnk9LTE4CitzcXR4ODAyIHNxdWFyZXJvb3QgMTBFLTE4ICAgLT4gMy4xNjIyNzc2NjBFLTkgSW5leGFjdCBSb3VuZGVkCitzcXR4ODAzIHNxdWFyZXJvb3QgIDFFLTE4ICAgLT4gMUUtOQorCitwcmVjaXNpb246IDExICAgICAgICAgICAgICAgLS0gRXRpbnk9LTE5CitzcXR4ODA0IHNxdWFyZXJvb3QgIDFFLTE5ICAgLT4gMy4xNjIyNzc2NjBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODA1IHNxdWFyZXJvb3QgMTBFLTE5ICAgLT4gMS4wRS05ICAgICAgICAgICAgLS0gZXhhY3QKK3ByZWNpc2lvbjogMTIgICAgICAgICAgICAgICAtLSBFdGlueT0tMjAKK3NxdHg4MDYgc3F1YXJlcm9vdCAxMEUtMjAgICAtPiAzLjE2MjI3NzY2MDJFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODA3IHNxdWFyZXJvb3QgIDFFLTIwICAgLT4gMUUtMTAgU3Vibm9ybWFsICAgLS0gZXhhY3QgU3Vibm9ybWFsIGNhc2UKKworcHJlY2lzaW9uOiAxMyAgICAgICAgICAgICAgIC0tIEV0aW55PS0yMQorc3F0eDgwOCBzcXVhcmVyb290ICAxRS0yMSAgIC0+IDMuMTYyMjc3NjYwMkUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MDkgc3F1YXJlcm9vdCAxMEUtMjEgICAtPiAxLjBFLTEwIFN1Ym5vcm1hbCAtLSBleGFjdCBTdWJub3JtYWwgY2FzZQorcHJlY2lzaW9uOiAxNCAgICAgICAgICAgICAgIC0tIEV0aW55PS0yMgorc3F0eDgxMCBzcXVhcmVyb290ICAxRS0yMSAgIC0+IDMuMTYyMjc3NjYwMTdFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODExIHNxdWFyZXJvb3QgMTBFLTIyICAgLT4gMy4xNjIyNzc2NjAxN0UtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MTIgc3F1YXJlcm9vdCAgMUUtMjIgICAtPiAxRS0xMSBTdWJub3JtYWwgICAtLSBleGFjdCBTdWJub3JtYWwgY2FzZQorCistLSBOb3QgZW5vdWdoIGRpZ2l0cz8KK3ByZWNpc2lvbjogICAxNgorbWF4RXhwb25lbnQ6IDM4NAorbWluRXhwb25lbnQ6IC0zODMKK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4KK3NxdHg4MTUgc3F1YXJlcm9vdCAxLjAwMDAwMDAwMDEwMDAwMDBFLTc4ICAtPiAxLjAwMDAwMDAwMDA1MDAwMEUtMzkgSW5leGFjdCBSb3VuZGVkCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYKKworLS0gc3BlY2lhbCB2YWx1ZXMKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitzcXR4ODIwIHNxdWFyZXJvb3QgICBJbmYgICAgLT4gSW5maW5pdHkKK3NxdHg4MjEgc3F1YXJlcm9vdCAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3NxdHg4MjIgc3F1YXJlcm9vdCAgIE5hTiAgICAtPiBOYU4KK3NxdHg4MjMgc3F1YXJlcm9vdCAgc05hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHByb3BhZ2F0aW5nIE5hTnMKK3NxdHg4MjQgc3F1YXJlcm9vdCAgc05hTjEyMyAtPiAgTmFOMTIzIEludmFsaWRfb3BlcmF0aW9uCitzcXR4ODI1IHNxdWFyZXJvb3QgLXNOYU4zMjEgLT4gLU5hTjMyMSBJbnZhbGlkX29wZXJhdGlvbgorc3F0eDgyNiBzcXVhcmVyb290ICAgTmFONDU2IC0+ICBOYU40NTYKK3NxdHg4Mjcgc3F1YXJlcm9vdCAgLU5hTjY1NCAtPiAtTmFONjU0CitzcXR4ODI4IHNxdWFyZXJvb3QgICBOYU4xICAgLT4gIE5hTjEKKworLS0gcGF5bG9hZCBkZWNhcGl0YXRlCitwcmVjaXNpb246IDUKK3NxdHg4NDAgc3F1YXJlcm9vdCAtc05hTjEyMzQ1Njc4OTAgLT4gLU5hTjY3ODkwICBJbnZhbGlkX29wZXJhdGlvbgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tCistLSBTcGVjaWFsIHRoYW5rcyB0byBNYXJrIERpY2tpbnNvbiBmb3IgdGVzdHMgaW4gdGhlIHJhbmdlIDgwMDAtODk5OS4KKy0tCistLSBFeHRyYSB0ZXN0cyBmb3IgdGhlIHNxdWFyZSByb290IGZ1bmN0aW9uLCBkZWFsaW5nIHdpdGggYSB2YXJpZXR5IG9mCistLSBjb3JuZXIgY2FzZXMuICBJbiBwYXJ0aWN1bGFyLCB0aGVzZSB0ZXN0cyBjb25jZW50cmF0ZSBvbgorLS0gICAoMSkgY2FzZXMgd2hlcmUgdGhlIGlucHV0IHByZWNpc2lvbiBleGNlZWRzIHRoZSBjb250ZXh0IHByZWNpc2lvbiwgYW5kCistLSAgICgyKSBjYXNlcyB3aGVyZSB0aGUgaW5wdXQgZXhwb25lbnQgaXMgb3V0c2lkZSB0aGUgY3VycmVudCBjb250ZXh0LAorLS0gICAgICAgYW5kIGluIHBhcnRpY3VsYXIgd2hlbiB0aGUgcmVzdWx0IGlzIHN1Ym5vcm1hbAorLS0KKy0tIG1heGV4cG9uZW50IGFuZCBtaW5leHBvbmVudCBhcmUgc2V0IHRvIDkgYW5kIC05IGZvciBtb3N0IG9mIHRoZXNlCistLSBjYXNlczsgb25seSB0aGUgcHJlY2lzaW9uIGNoYW5nZXMuICBUaGUgcm91bmRpbmcgYWxzbyBkb2VzIG5vdAorLS0gY2hhbmdlLCBiZWNhdXNlIGl0IGlzIGlnbm9yZWQgZm9yIHRoaXMgb3BlcmF0aW9uLgorbWF4ZXhwb25lbnQ6IDkKK21pbmV4cG9uZW50OiAtOQorCistLSBleGFjdCByZXN1bHRzLCBpbnB1dCBwcmVjaXNpb24gPiBjb250ZXh0IHByZWNpc2lvbgorcHJlY2lzaW9uOiAxCitzcXR4ODAwMCBzcXVhcmVyb290IDAgLT4gMAorc3F0eDgwMDEgc3F1YXJlcm9vdCAxIC0+IDEKK3NxdHg4MDAyIHNxdWFyZXJvb3QgNCAtPiAyCitzcXR4ODAwMyBzcXVhcmVyb290IDkgLT4gMworc3F0eDgwMDQgc3F1YXJlcm9vdCAxNiAtPiA0CitzcXR4ODAwNSBzcXVhcmVyb290IDI1IC0+IDUKK3NxdHg4MDA2IHNxdWFyZXJvb3QgMzYgLT4gNgorc3F0eDgwMDcgc3F1YXJlcm9vdCA0OSAtPiA3CitzcXR4ODAwOCBzcXVhcmVyb290IDY0IC0+IDgKK3NxdHg4MDA5IHNxdWFyZXJvb3QgODEgLT4gOQorc3F0eDgwMTAgc3F1YXJlcm9vdCAxMDAgLT4gMUUrMSBSb3VuZGVkCitzcXR4ODAxMSBzcXVhcmVyb290IDEyMSAtPiAxRSsxIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDIKK3NxdHg4MDEyIHNxdWFyZXJvb3QgMCAtPiAwCitzcXR4ODAxMyBzcXVhcmVyb290IDEgLT4gMQorc3F0eDgwMTQgc3F1YXJlcm9vdCA0IC0+IDIKK3NxdHg4MDE1IHNxdWFyZXJvb3QgOSAtPiAzCitzcXR4ODAxNiBzcXVhcmVyb290IDE2IC0+IDQKK3NxdHg4MDE3IHNxdWFyZXJvb3QgMjUgLT4gNQorc3F0eDgwMTggc3F1YXJlcm9vdCAzNiAtPiA2CitzcXR4ODAxOSBzcXVhcmVyb290IDQ5IC0+IDcKK3NxdHg4MDIwIHNxdWFyZXJvb3QgNjQgLT4gOAorc3F0eDgwMjEgc3F1YXJlcm9vdCA4MSAtPiA5CitzcXR4ODAyMiBzcXVhcmVyb290IDEwMCAtPiAxMAorc3F0eDgwMjMgc3F1YXJlcm9vdCAxMjEgLT4gMTEKK3NxdHg4MDI0IHNxdWFyZXJvb3QgMTQ0IC0+IDEyCitzcXR4ODAyNSBzcXVhcmVyb290IDE2OSAtPiAxMworc3F0eDgwMjYgc3F1YXJlcm9vdCAxOTYgLT4gMTQKK3NxdHg4MDI3IHNxdWFyZXJvb3QgMjI1IC0+IDE1CitzcXR4ODAyOCBzcXVhcmVyb290IDI1NiAtPiAxNgorc3F0eDgwMjkgc3F1YXJlcm9vdCAyODkgLT4gMTcKK3NxdHg4MDMwIHNxdWFyZXJvb3QgMzI0IC0+IDE4CitzcXR4ODAzMSBzcXVhcmVyb290IDM2MSAtPiAxOQorc3F0eDgwMzIgc3F1YXJlcm9vdCA0MDAgLT4gMjAKK3NxdHg4MDMzIHNxdWFyZXJvb3QgNDQxIC0+IDIxCitzcXR4ODAzNCBzcXVhcmVyb290IDQ4NCAtPiAyMgorc3F0eDgwMzUgc3F1YXJlcm9vdCA1MjkgLT4gMjMKK3NxdHg4MDM2IHNxdWFyZXJvb3QgNTc2IC0+IDI0CitzcXR4ODAzNyBzcXVhcmVyb290IDYyNSAtPiAyNQorc3F0eDgwMzggc3F1YXJlcm9vdCA2NzYgLT4gMjYKK3NxdHg4MDM5IHNxdWFyZXJvb3QgNzI5IC0+IDI3CitzcXR4ODA0MCBzcXVhcmVyb290IDc4NCAtPiAyOAorc3F0eDgwNDEgc3F1YXJlcm9vdCA4NDEgLT4gMjkKK3NxdHg4MDQyIHNxdWFyZXJvb3QgOTAwIC0+IDMwCitzcXR4ODA0MyBzcXVhcmVyb290IDk2MSAtPiAzMQorc3F0eDgwNDQgc3F1YXJlcm9vdCAxMDI0IC0+IDMyCitzcXR4ODA0NSBzcXVhcmVyb290IDEwODkgLT4gMzMKK3NxdHg4MDQ2IHNxdWFyZXJvb3QgMTE1NiAtPiAzNAorc3F0eDgwNDcgc3F1YXJlcm9vdCAxMjI1IC0+IDM1CitzcXR4ODA0OCBzcXVhcmVyb290IDEyOTYgLT4gMzYKK3NxdHg4MDQ5IHNxdWFyZXJvb3QgMTM2OSAtPiAzNworc3F0eDgwNTAgc3F1YXJlcm9vdCAxNDQ0IC0+IDM4CitzcXR4ODA1MSBzcXVhcmVyb290IDE1MjEgLT4gMzkKK3NxdHg4MDUyIHNxdWFyZXJvb3QgMTYwMCAtPiA0MAorc3F0eDgwNTMgc3F1YXJlcm9vdCAxNjgxIC0+IDQxCitzcXR4ODA1NCBzcXVhcmVyb290IDE3NjQgLT4gNDIKK3NxdHg4MDU1IHNxdWFyZXJvb3QgMTg0OSAtPiA0Mworc3F0eDgwNTYgc3F1YXJlcm9vdCAxOTM2IC0+IDQ0CitzcXR4ODA1NyBzcXVhcmVyb290IDIwMjUgLT4gNDUKK3NxdHg4MDU4IHNxdWFyZXJvb3QgMjExNiAtPiA0Ngorc3F0eDgwNTkgc3F1YXJlcm9vdCAyMjA5IC0+IDQ3CitzcXR4ODA2MCBzcXVhcmVyb290IDIzMDQgLT4gNDgKK3NxdHg4MDYxIHNxdWFyZXJvb3QgMjQwMSAtPiA0OQorc3F0eDgwNjIgc3F1YXJlcm9vdCAyNTAwIC0+IDUwCitzcXR4ODA2MyBzcXVhcmVyb290IDI2MDEgLT4gNTEKK3NxdHg4MDY0IHNxdWFyZXJvb3QgMjcwNCAtPiA1Mgorc3F0eDgwNjUgc3F1YXJlcm9vdCAyODA5IC0+IDUzCitzcXR4ODA2NiBzcXVhcmVyb290IDI5MTYgLT4gNTQKK3NxdHg4MDY3IHNxdWFyZXJvb3QgMzAyNSAtPiA1NQorc3F0eDgwNjggc3F1YXJlcm9vdCAzMTM2IC0+IDU2CitzcXR4ODA2OSBzcXVhcmVyb290IDMyNDkgLT4gNTcKK3NxdHg4MDcwIHNxdWFyZXJvb3QgMzM2NCAtPiA1OAorc3F0eDgwNzEgc3F1YXJlcm9vdCAzNDgxIC0+IDU5CitzcXR4ODA3MiBzcXVhcmVyb290IDM2MDAgLT4gNjAKK3NxdHg4MDczIHNxdWFyZXJvb3QgMzcyMSAtPiA2MQorc3F0eDgwNzQgc3F1YXJlcm9vdCAzODQ0IC0+IDYyCitzcXR4ODA3NSBzcXVhcmVyb290IDM5NjkgLT4gNjMKK3NxdHg4MDc2IHNxdWFyZXJvb3QgNDA5NiAtPiA2NAorc3F0eDgwNzcgc3F1YXJlcm9vdCA0MjI1IC0+IDY1CitzcXR4ODA3OCBzcXVhcmVyb290IDQzNTYgLT4gNjYKK3NxdHg4MDc5IHNxdWFyZXJvb3QgNDQ4OSAtPiA2Nworc3F0eDgwODAgc3F1YXJlcm9vdCA0NjI0IC0+IDY4CitzcXR4ODA4MSBzcXVhcmVyb290IDQ3NjEgLT4gNjkKK3NxdHg4MDgyIHNxdWFyZXJvb3QgNDkwMCAtPiA3MAorc3F0eDgwODMgc3F1YXJlcm9vdCA1MDQxIC0+IDcxCitzcXR4ODA4NCBzcXVhcmVyb290IDUxODQgLT4gNzIKK3NxdHg4MDg1IHNxdWFyZXJvb3QgNTMyOSAtPiA3Mworc3F0eDgwODYgc3F1YXJlcm9vdCA1NDc2IC0+IDc0CitzcXR4ODA4NyBzcXVhcmVyb290IDU2MjUgLT4gNzUKK3NxdHg4MDg4IHNxdWFyZXJvb3QgNTc3NiAtPiA3Ngorc3F0eDgwODkgc3F1YXJlcm9vdCA1OTI5IC0+IDc3CitzcXR4ODA5MCBzcXVhcmVyb290IDYwODQgLT4gNzgKK3NxdHg4MDkxIHNxdWFyZXJvb3QgNjI0MSAtPiA3OQorc3F0eDgwOTIgc3F1YXJlcm9vdCA2NDAwIC0+IDgwCitzcXR4ODA5MyBzcXVhcmVyb290IDY1NjEgLT4gODEKK3NxdHg4MDk0IHNxdWFyZXJvb3QgNjcyNCAtPiA4Mgorc3F0eDgwOTUgc3F1YXJlcm9vdCA2ODg5IC0+IDgzCitzcXR4ODA5NiBzcXVhcmVyb290IDcwNTYgLT4gODQKK3NxdHg4MDk3IHNxdWFyZXJvb3QgNzIyNSAtPiA4NQorc3F0eDgwOTggc3F1YXJlcm9vdCA3Mzk2IC0+IDg2CitzcXR4ODA5OSBzcXVhcmVyb290IDc1NjkgLT4gODcKK3NxdHg4MTAwIHNxdWFyZXJvb3QgNzc0NCAtPiA4OAorc3F0eDgxMDEgc3F1YXJlcm9vdCA3OTIxIC0+IDg5CitzcXR4ODEwMiBzcXVhcmVyb290IDgxMDAgLT4gOTAKK3NxdHg4MTAzIHNxdWFyZXJvb3QgODI4MSAtPiA5MQorc3F0eDgxMDQgc3F1YXJlcm9vdCA4NDY0IC0+IDkyCitzcXR4ODEwNSBzcXVhcmVyb290IDg2NDkgLT4gOTMKK3NxdHg4MTA2IHNxdWFyZXJvb3QgODgzNiAtPiA5NAorc3F0eDgxMDcgc3F1YXJlcm9vdCA5MDI1IC0+IDk1CitzcXR4ODEwOCBzcXVhcmVyb290IDkyMTYgLT4gOTYKK3NxdHg4MTA5IHNxdWFyZXJvb3QgOTQwOSAtPiA5Nworc3F0eDgxMTAgc3F1YXJlcm9vdCA5NjA0IC0+IDk4CitzcXR4ODExMSBzcXVhcmVyb290IDk4MDEgLT4gOTkKK3NxdHg4MTEyIHNxdWFyZXJvb3QgMTAwMDAgLT4gMS4wRSsyIFJvdW5kZWQKK3NxdHg4MTEzIHNxdWFyZXJvb3QgMTAyMDEgLT4gMS4wRSsyIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDMKK3NxdHg4MTE0IHNxdWFyZXJvb3QgODQxIC0+IDI5CitzcXR4ODExNSBzcXVhcmVyb290IDE2MDAgLT4gNDAKK3NxdHg4MTE2IHNxdWFyZXJvb3QgMjIwOSAtPiA0Nworc3F0eDgxMTcgc3F1YXJlcm9vdCA5NjA0IC0+IDk4CitzcXR4ODExOCBzcXVhcmVyb290IDIxMzE2IC0+IDE0Ngorc3F0eDgxMTkgc3F1YXJlcm9vdCA1MjQ0MSAtPiAyMjkKK3NxdHg4MTIwIHNxdWFyZXJvb3QgNjg2NDQgLT4gMjYyCitzcXR4ODEyMSBzcXVhcmVyb290IDY5Njk2IC0+IDI2NAorc3F0eDgxMjIgc3F1YXJlcm9vdCA3MDIyNSAtPiAyNjUKK3NxdHg4MTIzIHNxdWFyZXJvb3QgNzY3MjkgLT4gMjc3CitzcXR4ODEyNCBzcXVhcmVyb290IDEzMDMyMSAtPiAzNjEKK3NxdHg4MTI1IHNxdWFyZXJvb3QgMTcxMzk2IC0+IDQxNAorc3F0eDgxMjYgc3F1YXJlcm9vdCAyNzA0MDAgLT4gNTIwCitzcXR4ODEyNyBzcXVhcmVyb290IDI3OTg0MSAtPiA1MjkKK3NxdHg4MTI4IHNxdWFyZXJvb3QgNDA3MDQ0IC0+IDYzOAorc3F0eDgxMjkgc3F1YXJlcm9vdCA0MDgzMjEgLT4gNjM5CitzcXR4ODEzMCBzcXVhcmVyb290IDQ4MDI0OSAtPiA2OTMKK3NxdHg4MTMxIHNxdWFyZXJvb3QgNTE2OTYxIC0+IDcxOQorc3F0eDgxMzIgc3F1YXJlcm9vdCA2OTIyMjQgLT4gODMyCitzcXR4ODEzMyBzcXVhcmVyb290IDgyOTkyMSAtPiA5MTEKKworLS0gc2VsZWN0aW9uIG9mIHJhbmRvbSBleGFjdCByZXN1bHRzCitwcmVjaXNpb246IDYKK3NxdHg4MTM0IHNxdWFyZXJvb3QgMi4yNUUtMTIgLT4gMC4wMDAwMDE1CitzcXR4ODEzNSBzcXVhcmVyb290IDguNDFFLTE0IC0+IDIuOUUtNworc3F0eDgxMzYgc3F1YXJlcm9vdCA2LjI0MUUtMTUgLT4gNy45RS04CitzcXR4ODEzNyBzcXVhcmVyb290IDUuMDQxRSsxMyAtPiA3LjFFKzYKK3NxdHg4MTM4IHNxdWFyZXJvb3QgNDc2MSAtPiA2OQorc3F0eDgxMzkgc3F1YXJlcm9vdCAxLjM2OUUrMTcgLT4gMy43RSs4CitzcXR4ODE0MCBzcXVhcmVyb290IDAuMDAwMDIxMTYgLT4gMC4wMDQ2CitzcXR4ODE0MSBzcXVhcmVyb290IDcuMjlFKzQgLT4gMi43RSsyCitzcXR4ODE0MiBzcXVhcmVyb290IDQuNjI0RS0xMyAtPiA2LjhFLTcKK3NxdHg4MTQzIHNxdWFyZXJvb3QgMy45NjlFKzUgLT4gNi4zRSsyCitzcXR4ODE0NCBzcXVhcmVyb290IDMuNzMzMjFFLTExIC0+IDAuMDAwMDA2MTEKK3NxdHg4MTQ1IHNxdWFyZXJvb3QgNS42MTAwMUUrMTcgLT4gNy40OUUrOAorc3F0eDgxNDYgc3F1YXJlcm9vdCAyLjMwNDAwRS0xMSAtPiAwLjAwMDAwNDgwCitzcXR4ODE0NyBzcXVhcmVyb290IDQuMzAzMzZFKzE3IC0+IDYuNTZFKzgKK3NxdHg4MTQ4IHNxdWFyZXJvb3QgMC4wNTcxMjEgLT4gMC4yMzkKK3NxdHg4MTQ5IHNxdWFyZXJvb3QgNy4yMjVFKzE3IC0+IDguNUUrOAorc3F0eDgxNTAgc3F1YXJlcm9vdCAzLjE0NzIxRSsxMyAtPiA1LjYxRSs2CitzcXR4ODE1MSBzcXVhcmVyb290IDQuNjEwNDFFKzE3IC0+IDYuNzlFKzgKK3NxdHg4MTUyIHNxdWFyZXJvb3QgMS4zOTg3NkUtMTUgLT4gMy43NEUtOAorc3F0eDgxNTMgc3F1YXJlcm9vdCA2LjE5MzY5RS05IC0+IDAuMDAwMDc4Nworc3F0eDgxNTQgc3F1YXJlcm9vdCAxLjYyMDUyOUUtMTAgLT4gMC4wMDAwMTI3Mworc3F0eDgxNTUgc3F1YXJlcm9vdCAxMTc3LjE3NjEgLT4gMzQuMzEKK3NxdHg4MTU2IHNxdWFyZXJvb3QgNjcwNDMzNDQgLT4gODE4OAorc3F0eDgxNTcgc3F1YXJlcm9vdCA0Ljg0RSs2IC0+IDIuMkUrMworc3F0eDgxNTggc3F1YXJlcm9vdCAxLjIzOTA0RSsxMSAtPiAzLjUyRSs1CitzcXR4ODE1OSBzcXVhcmVyb290IDMyNjA0MTAwIC0+IDU3MTAKK3NxdHg4MTYwIHNxdWFyZXJvb3QgMi45NzU3MDI1RS0xMSAtPiAwLjAwMDAwNTQ1NQorc3F0eDgxNjEgc3F1YXJlcm9vdCA2LjM3NjAyMjVFLTkgLT4gMC4wMDAwNzk4NQorc3F0eDgxNjIgc3F1YXJlcm9vdCA0LjUxOTg3MjlFLTExIC0+IDAuMDAwMDA2NzIzCitzcXR4ODE2MyBzcXVhcmVyb290IDEuNDc0NTYwMEUtMTEgLT4gMC4wMDAwMDM4NDAKK3NxdHg4MTY0IHNxdWFyZXJvb3QgMTg5NjQyODMuMDQgLT4gNDM1NC44CitzcXR4ODE2NSBzcXVhcmVyb290IDMuMzA4ODk1NTI5RSsxMyAtPiA1Ljc1MjNFKzYKK3NxdHg4MTY2IHNxdWFyZXJvb3QgMC4wMDI4NTkwNDA5IC0+IDAuMDUzNDcKK3NxdHg4MTY3IHNxdWFyZXJvb3QgMzU3Mi4yMTM4MjQgLT4gNTkuNzY4CitzcXR4ODE2OCBzcXVhcmVyb290IDQuMjc0MDIxMzc2RSsxNSAtPiA2LjUzNzZFKzcKK3NxdHg4MTY5IHNxdWFyZXJvb3QgNDQ1NTQ3Ni42NCAtPiAyMTEwLjgKK3NxdHg4MTcwIHNxdWFyZXJvb3QgMzguNDQgLT4gNi4yCitzcXR4ODE3MSBzcXVhcmVyb290IDY4LjU1ODQwMCAtPiA4LjI4MAorc3F0eDgxNzIgc3F1YXJlcm9vdCA3MTU0MDIwMDkgLT4gMjY3NDcKK3NxdHg4MTczIHNxdWFyZXJvb3QgOTMuMzczNTY5IC0+IDkuNjYzCitzcXR4ODE3NCBzcXVhcmVyb290IDIuNjIxNDQwMDAwMDBFKzE1IC0+IDUuMTIwMDBFKzcKK3NxdHg4MTc1IHNxdWFyZXJvb3QgNy40ODIyNTAwMDAwMEUrMTUgLT4gOC42NTAwMEUrNworc3F0eDgxNzYgc3F1YXJlcm9vdCAzLjM4NzI0MDAwMDAwRS05IC0+IDAuMDAwMDU4MjAwMAorc3F0eDgxNzcgc3F1YXJlcm9vdCA1LjY0MDAxMDAwMDAwRS0xMyAtPiA3LjUxMDAwRS03CitzcXR4ODE3OCBzcXVhcmVyb290IDUuMDY5NDQwMDAwMDBFLTE1IC0+IDcuMTIwMDBFLTgKK3NxdHg4MTc5IHNxdWFyZXJvb3QgNC45NTYxNjAwMDAwMEUrMTcgLT4gNy4wNDAwMEUrOAorc3F0eDgxODAgc3F1YXJlcm9vdCAwLjAwMDAyNDIwNjQwMDAwMDAgLT4gMC4wMDQ5MjAwMAorc3F0eDgxODEgc3F1YXJlcm9vdCAxLjQ4OTk2MDAwMDAwRS0xNSAtPiAzLjg2MDAwRS04CitzcXR4ODE4MiBzcXVhcmVyb290IDkuMzcwMjQwMDAwMDBFKzE3IC0+IDkuNjgwMDBFKzgKK3NxdHg4MTgzIHNxdWFyZXJvb3QgNzEyODkwMC4wMDAwIC0+IDI2NzAuMDAKK3NxdHg4MTg0IHNxdWFyZXJvb3QgOC4yMzExNjEwMDAwRS0xMCAtPiAwLjAwMDAyODY5MDAKK3NxdHg4MTg1IHNxdWFyZXJvb3QgNDgyNzQ3MDQwMDAwIC0+IDY5NDgwMAorc3F0eDgxODYgc3F1YXJlcm9vdCA0LjE0NDc4NDQwMDAwRSsxNyAtPiA2LjQzODAwRSs4CitzcXR4ODE4NyBzcXVhcmVyb290IDUuMTA1MTAyNTAwMDBFLTcgLT4gMC4wMDA3MTQ1MDAKK3NxdHg4MTg4IHNxdWFyZXJvb3QgMzU1MDk2LjgxMDAwMCAtPiA1OTUuOTAwCitzcXR4ODE4OSBzcXVhcmVyb290IDE0Mjg4NDAwLjAwMDAgLT4gMzc4MC4wMAorc3F0eDgxOTAgc3F1YXJlcm9vdCAzLjM2MTY4MDQwMDAwRS0xNSAtPiA1Ljc5ODAwRS04CitzcXR4ODE5MSBzcXVhcmVyb290IDEuNzA4OTk1NjAwMDBFLTEzIC0+IDQuMTM0MDBFLTcKK3NxdHg4MTkyIHNxdWFyZXJvb3QgMC4wMDAwMzc4MzQ4MDEwMDAwIC0+IDAuMDA2MTUxMDAKK3NxdHg4MTkzIHNxdWFyZXJvb3QgMi4wMDk3Mjg5MDAwMEUtMTMgLT4gNC40ODMwMEUtNworc3F0eDgxOTQgc3F1YXJlcm9vdCA0LjA3MjIyNjU5NjAwRS0xMyAtPiA2LjM4MTQwRS03CitzcXR4ODE5NSBzcXVhcmVyb290IDEzMTQ4NjAxMjEwMCAtPiAzNjI2MTAKK3NxdHg4MTk2IHNxdWFyZXJvb3QgODE4MTkyNjExNjAwIC0+IDkwNDU0MAorc3F0eDgxOTcgc3F1YXJlcm9vdCA5Ljg1NTgzMjM2MDBFKzE2IC0+IDMuMTM5NDBFKzgKK3NxdHg4MTk4IHNxdWFyZXJvb3QgNTY0MS4wNjE0NDkwMCAtPiA3NS4xMDcwCitzcXR4ODE5OSBzcXVhcmVyb290IDQuNTg3ODk0NzU2MDBFKzE3IC0+IDYuNzczNDBFKzgKK3NxdHg4MjAwIHNxdWFyZXJvb3QgMy4yMTM4Njk0ODEwMEUtOSAtPiAwLjAwMDA1NjY5MTAKK3NxdHg4MjAxIHNxdWFyZXJvb3QgMy45NDQxOTYwMDAwRS04IC0+IDAuMDAwMTk4NjAwCitzcXR4ODIwMiBzcXVhcmVyb290IDI0MjcyMy43Mjg5MDAgLT4gNDkyLjY3MAorc3F0eDgyMDMgc3F1YXJlcm9vdCAxODc0Ljg5MDAwMDAwIC0+IDQzLjMwMDAKK3NxdHg4MjA0IHNxdWFyZXJvb3QgMi41NjcyMjU5NTY4NEUrMTUgLT4gNS4wNjY3OEUrNworc3F0eDgyMDUgc3F1YXJlcm9vdCAzLjk2NDM3NzE0Njg5RS0xNyAtPiA2LjI5NjMzRS05CitzcXR4ODIwNiBzcXVhcmVyb290IDMuODAxMDY3NzQ3ODRFLTE3IC0+IDYuMTY1MjhFLTkKK3NxdHg4MjA3IHNxdWFyZXJvb3QgMS40MjQwMzU4ODQ5NkUtMTMgLT4gMy43NzM2NEUtNworc3F0eDgyMDggc3F1YXJlcm9vdCA0NjA0Ljg0Mzg4MTAwIC0+IDY3Ljg1OTAKK3NxdHg4MjA5IHNxdWFyZXJvb3QgMjE1NzEwMDg2OS4xNiAtPiA0NjQ0NC42CitzcXR4ODIxMCBzcXVhcmVyb290IDM1NTI4ODU3MC44MSAtPiAxODg0OS4xCitzcXR4ODIxMSBzcXVhcmVyb290IDQuNjk3NzU5MDE2MDRFLTExIC0+IDAuMDAwMDA2ODU0MDIKK3NxdHg4MjEyIHNxdWFyZXJvb3QgOC4yMjExNTc3MDQzNkUrMTcgLT4gOS4wNjcwNkUrOAorc3F0eDgyMTMgc3F1YXJlcm9vdCA3LjE2NDQzNzQ0OTAwRSsxNSAtPiA4LjQ2NDMwRSs3CitzcXR4ODIxNCBzcXVhcmVyb290IDkuNDg5OTU0OTg4OTZFKzE1IC0+IDkuNzQxNjRFKzcKK3NxdHg4MjE1IHNxdWFyZXJvb3QgMC4wMDAwNDE5MDkxODAxMTI5IC0+IDAuMDA2NDczNzMKK3NxdHg4MjE2IHNxdWFyZXJvb3QgNTg2MjYyNzk5Ni44NCAtPiA3NjU2Ny44CitzcXR4ODIxNyBzcXVhcmVyb290IDkzNjk1MzcuMzQwOSAtPiAzMDYwLjk3CitzcXR4ODIxOCBzcXVhcmVyb290IDcuNzQ3OTI1Mjk3MjlFKzE3IC0+IDguODAyMjNFKzgKK3NxdHg4MjE5IHNxdWFyZXJvb3QgMS4wODYyNjkzMTM5NkUrMTcgLT4gMy4yOTU4NkUrOAorc3F0eDgyMjAgc3F1YXJlcm9vdCA4Ljg5NTg0NzM5Njg0RS03IC0+IDAuMDAwOTQzMTc4CitzcXR4ODIyMSBzcXVhcmVyb290IDQuMDI2NjA0MDg5NkUtMTggLT4gMi4wMDY2NEUtOQorc3F0eDgyMjIgc3F1YXJlcm9vdCA5LjI3NjY5NDgwMzM2RS03IC0+IDAuMDAwOTYzMTU2CitzcXR4ODIyMyBzcXVhcmVyb290IDAuMDAyMjU0OTc3MTc5NTYgLT4gMC4wNDc0ODY2CisKKy0tIHRlc3QgdXNlIG9mIHJvdW5kLWhhbGYtZXZlbiBmb3IgdGllcworcHJlY2lzaW9uOiAxCitzcXR4ODIyNCBzcXVhcmVyb290IDIyNSAtPiAyRSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDgyMjUgc3F1YXJlcm9vdCA2MjUgLT4gMkUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjI2IHNxdWFyZXJvb3QgMTIyNSAtPiA0RSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDgyMjcgc3F1YXJlcm9vdCAyMDI1IC0+IDRFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODIyOCBzcXVhcmVyb290IDMwMjUgLT4gNkUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjI5IHNxdWFyZXJvb3QgNDIyNSAtPiA2RSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDgyMzAgc3F1YXJlcm9vdCA1NjI1IC0+IDhFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODIzMSBzcXVhcmVyb290IDcyMjUgLT4gOEUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjMyIHNxdWFyZXJvb3QgOTAyNSAtPiAxRSsyIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDIKK3NxdHg4MjMzIHNxdWFyZXJvb3QgMTEwMjUgLT4gMS4wRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyMzQgc3F1YXJlcm9vdCAxMzIyNSAtPiAxLjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODIzNSBzcXVhcmVyb290IDE1NjI1IC0+IDEuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjM2IHNxdWFyZXJvb3QgMTgyMjUgLT4gMS40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyMzcgc3F1YXJlcm9vdCAyMTAyNSAtPiAxLjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODIzOCBzcXVhcmVyb290IDI0MDI1IC0+IDEuNkUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjM5IHNxdWFyZXJvb3QgMjcyMjUgLT4gMS42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNDAgc3F1YXJlcm9vdCAzMDYyNSAtPiAxLjhFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI0MSBzcXVhcmVyb290IDM0MjI1IC0+IDEuOEUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjQyIHNxdWFyZXJvb3QgMzgwMjUgLT4gMi4wRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNDMgc3F1YXJlcm9vdCA0MjAyNSAtPiAyLjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI0NCBzcXVhcmVyb290IDQ2MjI1IC0+IDIuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjQ1IHNxdWFyZXJvb3QgNTA2MjUgLT4gMi4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNDYgc3F1YXJlcm9vdCA1NTIyNSAtPiAyLjRFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI0NyBzcXVhcmVyb290IDYwMDI1IC0+IDIuNEUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjQ4IHNxdWFyZXJvb3QgNjUwMjUgLT4gMi42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNDkgc3F1YXJlcm9vdCA3MDIyNSAtPiAyLjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI1MCBzcXVhcmVyb290IDc1NjI1IC0+IDIuOEUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjUxIHNxdWFyZXJvb3QgODEyMjUgLT4gMi44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNTIgc3F1YXJlcm9vdCA4NzAyNSAtPiAzLjBFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODI1MyBzcXVhcmVyb290IDkzMDI1IC0+IDMuMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MjU0IHNxdWFyZXJvb3QgOTkyMjUgLT4gMy4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNTUgc3F1YXJlcm9vdCAxMDU2MjUgLT4gMy4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNTYgc3F1YXJlcm9vdCAxMTIyMjUgLT4gMy40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNTcgc3F1YXJlcm9vdCAxMTkwMjUgLT4gMy40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNTggc3F1YXJlcm9vdCAxMjYwMjUgLT4gMy42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNTkgc3F1YXJlcm9vdCAxMzMyMjUgLT4gMy42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNjAgc3F1YXJlcm9vdCAxNDA2MjUgLT4gMy44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNjEgc3F1YXJlcm9vdCAxNDgyMjUgLT4gMy44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNjIgc3F1YXJlcm9vdCAxNTYwMjUgLT4gNC4wRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNjMgc3F1YXJlcm9vdCAxNjQwMjUgLT4gNC4wRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNjQgc3F1YXJlcm9vdCAxNzIyMjUgLT4gNC4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNjUgc3F1YXJlcm9vdCAxODA2MjUgLT4gNC4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNjYgc3F1YXJlcm9vdCAxODkyMjUgLT4gNC40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNjcgc3F1YXJlcm9vdCAxOTgwMjUgLT4gNC40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNjggc3F1YXJlcm9vdCAyMDcwMjUgLT4gNC42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNjkgc3F1YXJlcm9vdCAyMTYyMjUgLT4gNC42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNzAgc3F1YXJlcm9vdCAyMjU2MjUgLT4gNC44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNzEgc3F1YXJlcm9vdCAyMzUyMjUgLT4gNC44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNzIgc3F1YXJlcm9vdCAyNDUwMjUgLT4gNS4wRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNzMgc3F1YXJlcm9vdCAyNTUwMjUgLT4gNS4wRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNzQgc3F1YXJlcm9vdCAyNjUyMjUgLT4gNS4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNzUgc3F1YXJlcm9vdCAyNzU2MjUgLT4gNS4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNzYgc3F1YXJlcm9vdCAyODYyMjUgLT4gNS40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNzcgc3F1YXJlcm9vdCAyOTcwMjUgLT4gNS40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNzggc3F1YXJlcm9vdCAzMDgwMjUgLT4gNS42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyNzkgc3F1YXJlcm9vdCAzMTkyMjUgLT4gNS42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyODAgc3F1YXJlcm9vdCAzMzA2MjUgLT4gNS44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyODEgc3F1YXJlcm9vdCAzNDIyMjUgLT4gNS44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyODIgc3F1YXJlcm9vdCAzNTQwMjUgLT4gNi4wRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyODMgc3F1YXJlcm9vdCAzNjYwMjUgLT4gNi4wRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyODQgc3F1YXJlcm9vdCAzNzgyMjUgLT4gNi4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyODUgc3F1YXJlcm9vdCAzOTA2MjUgLT4gNi4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyODYgc3F1YXJlcm9vdCA0MDMyMjUgLT4gNi40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyODcgc3F1YXJlcm9vdCA0MTYwMjUgLT4gNi40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyODggc3F1YXJlcm9vdCA0MjkwMjUgLT4gNi42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyODkgc3F1YXJlcm9vdCA0NDIyMjUgLT4gNi42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyOTAgc3F1YXJlcm9vdCA0NTU2MjUgLT4gNi44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyOTEgc3F1YXJlcm9vdCA0NjkyMjUgLT4gNi44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyOTIgc3F1YXJlcm9vdCA0ODMwMjUgLT4gNy4wRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyOTMgc3F1YXJlcm9vdCA0OTcwMjUgLT4gNy4wRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyOTQgc3F1YXJlcm9vdCA1MTEyMjUgLT4gNy4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyOTUgc3F1YXJlcm9vdCA1MjU2MjUgLT4gNy4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyOTYgc3F1YXJlcm9vdCA1NDAyMjUgLT4gNy40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyOTcgc3F1YXJlcm9vdCA1NTUwMjUgLT4gNy40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyOTggc3F1YXJlcm9vdCA1NzAwMjUgLT4gNy42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgyOTkgc3F1YXJlcm9vdCA1ODUyMjUgLT4gNy42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMDAgc3F1YXJlcm9vdCA2MDA2MjUgLT4gNy44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMDEgc3F1YXJlcm9vdCA2MTYyMjUgLT4gNy44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMDIgc3F1YXJlcm9vdCA2MzIwMjUgLT4gOC4wRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMDMgc3F1YXJlcm9vdCA2NDgwMjUgLT4gOC4wRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMDQgc3F1YXJlcm9vdCA2NjQyMjUgLT4gOC4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMDUgc3F1YXJlcm9vdCA2ODA2MjUgLT4gOC4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMDYgc3F1YXJlcm9vdCA2OTcyMjUgLT4gOC40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMDcgc3F1YXJlcm9vdCA3MTQwMjUgLT4gOC40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMDggc3F1YXJlcm9vdCA3MzEwMjUgLT4gOC42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMDkgc3F1YXJlcm9vdCA3NDgyMjUgLT4gOC42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMTAgc3F1YXJlcm9vdCA3NjU2MjUgLT4gOC44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMTEgc3F1YXJlcm9vdCA3ODMyMjUgLT4gOC44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMTIgc3F1YXJlcm9vdCA4MDEwMjUgLT4gOS4wRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMTMgc3F1YXJlcm9vdCA4MTkwMjUgLT4gOS4wRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMTQgc3F1YXJlcm9vdCA4MzcyMjUgLT4gOS4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMTUgc3F1YXJlcm9vdCA4NTU2MjUgLT4gOS4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMTYgc3F1YXJlcm9vdCA4NzQyMjUgLT4gOS40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMTcgc3F1YXJlcm9vdCA4OTMwMjUgLT4gOS40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMTggc3F1YXJlcm9vdCA5MTIwMjUgLT4gOS42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMTkgc3F1YXJlcm9vdCA5MzEyMjUgLT4gOS42RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMjAgc3F1YXJlcm9vdCA5NTA2MjUgLT4gOS44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMjEgc3F1YXJlcm9vdCA5NzAyMjUgLT4gOS44RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMjIgc3F1YXJlcm9vdCA5OTAwMjUgLT4gMS4wRSszIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDYKK3NxdHg4MzIzIHNxdWFyZXJvb3QgODg5NzU3MzQ5NjMwMjUgLT4gOS40MzI3MEUrNiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzI0IHNxdWFyZXJvb3QgNzEwODU1NTUwMDA2MjUgLT4gOC40MzEyMkUrNiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzI1IHNxdWFyZXJvb3QgMzk5OTQzMDQuMDUxMDI1IC0+IDYzMjQuMTAgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMyNiBzcXVhcmVyb290IDAuMDAwMDA3MzI3MTcyMjY1NjI1IC0+IDAuMDAyNzA2ODggSW5leGFjdCBSb3VuZGVkCitzcXR4ODMyNyBzcXVhcmVyb290IDEuMDI1ODYwMDQzOTAyNUUtMTMgLT4gMy4yMDI5MEUtNyBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzI4IHNxdWFyZXJvb3QgMC4wMDM0NTgwNTc0Mjc1NjI1IC0+IDAuMDU4ODA1MiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzI5IHNxdWFyZXJvb3QgNy42ODQyMzE3NzAwNjI1RS03IC0+IDAuMDAwODc2NTk4IEluZXhhY3QgUm91bmRlZAorc3F0eDgzMzAgc3F1YXJlcm9vdCAxMjYzODM0NDk1LjIwMjUgLT4gMzU1NTAuNCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzMxIHNxdWFyZXJvb3QgNDMzOTcwNjY2NDYwLjI1IC0+IDY1ODc2NCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzMyIHNxdWFyZXJvb3QgNC41ODc5Mjg2MjMwNjI1RS03IC0+IDAuMDAwNjc3MzQyIEluZXhhY3QgUm91bmRlZAorc3F0eDgzMzMgc3F1YXJlcm9vdCAwLjAwMjkzMDU2MDMzMDYyMjUgLT4gMC4wNTQxMzQ2IEluZXhhY3QgUm91bmRlZAorc3F0eDgzMzQgc3F1YXJlcm9vdCA3MDIxODI4Mi43MzMyMjUgLT4gODM3OS42NCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzM1IHNxdWFyZXJvb3QgMTE5NDI1MTkuMDgyMDI1IC0+IDM0NTUuODAgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMzNiBzcXVhcmVyb290IDAuMDAyMTIzMDY2ODkwNTYyNSAtPiAwLjA0NjA3NjggSW5leGFjdCBSb3VuZGVkCitzcXR4ODMzNyBzcXVhcmVyb290IDAuOTAwODE4MzM0MTEwMjUgLT4gMC45NDkxMTQgSW5leGFjdCBSb3VuZGVkCitzcXR4ODMzOCBzcXVhcmVyb290IDUuNTEwNDEyMDkzNjIyNUUtMTcgLT4gNy40MjMyMkUtOSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzM5IHNxdWFyZXJvb3QgMC4xMDUzMDQ0Njg1NDIyNSAtPiAwLjMyNDUwNiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzQwIHNxdWFyZXJvb3QgOC43MDYwNjk4NjYwMjVFLTE0IC0+IDIuOTUwNjBFLTcgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM0MSBzcXVhcmVyb290IDIzODM4LjU4ODAwNjI1IC0+IDE1NC4zOTggSW5leGFjdCBSb3VuZGVkCitzcXR4ODM0MiBzcXVhcmVyb290IDAuMDAxMzQyNjkxMTI3NTYyNSAtPiAwLjAzNjY0MjggSW5leGFjdCBSb3VuZGVkCisKKy0tIHRlc3QgdXNlIG9mIHJvdW5kLWhhbGYtZXZlbiBpbiB1bmRlcmZsb3cgc2l0dWF0aW9ucworCistLSBwcmVjaXNpb25zIDI7IGFsbCBjYXNlcyB3aGVyZSByZXN1bHQgaXMgYm90aCBzdWJub3JtYWwgYW5kIGEgdGllCitwcmVjaXNpb246IDIKK3NxdHg4MzQzIHNxdWFyZXJvb3QgMi41RS0yMSAtPiAwRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitzcXR4ODM0NCBzcXVhcmVyb290IDIuMjVFLTIwIC0+IDJFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM0NSBzcXVhcmVyb290IDYuMjVFLTIwIC0+IDJFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM0NiBzcXVhcmVyb290IDEuMjI1RS0xOSAtPiA0RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNDcgc3F1YXJlcm9vdCAyLjAyNUUtMTkgLT4gNEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzQ4IHNxdWFyZXJvb3QgMy4wMjVFLTE5IC0+IDZFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM0OSBzcXVhcmVyb290IDQuMjI1RS0xOSAtPiA2RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNTAgc3F1YXJlcm9vdCA1LjYyNUUtMTkgLT4gOEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzUxIHNxdWFyZXJvb3QgNy4yMjVFLTE5IC0+IDhFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM1MiBzcXVhcmVyb290IDkuMDI1RS0xOSAtPiAxLjBFLTkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gcHJlY2lzaW9uIDMsIGlucHV0IHByZWNpc2lvbiA8PSA1CitwcmVjaXNpb246IDMKK3NxdHg4MzUzIHNxdWFyZXJvb3QgMi41RS0yMyAtPiAwRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitzcXR4ODM1NCBzcXVhcmVyb290IDIuMjVFLTIyIC0+IDJFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM1NSBzcXVhcmVyb290IDYuMjVFLTIyIC0+IDJFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM1NiBzcXVhcmVyb290IDEuMjI1RS0yMSAtPiA0RS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNTcgc3F1YXJlcm9vdCAyLjAyNUUtMjEgLT4gNEUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzU4IHNxdWFyZXJvb3QgMy4wMjVFLTIxIC0+IDZFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM1OSBzcXVhcmVyb290IDQuMjI1RS0yMSAtPiA2RS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNjAgc3F1YXJlcm9vdCA1LjYyNUUtMjEgLT4gOEUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzYxIHNxdWFyZXJvb3QgNy4yMjVFLTIxIC0+IDhFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM2MiBzcXVhcmVyb290IDkuMDI1RS0yMSAtPiAxLjBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM2MyBzcXVhcmVyb290IDEuMTAyNUUtMjAgLT4gMS4wRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNjQgc3F1YXJlcm9vdCAxLjMyMjVFLTIwIC0+IDEuMkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzY1IHNxdWFyZXJvb3QgMS41NjI1RS0yMCAtPiAxLjJFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM2NiBzcXVhcmVyb290IDEuODIyNUUtMjAgLT4gMS40RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNjcgc3F1YXJlcm9vdCAyLjEwMjVFLTIwIC0+IDEuNEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzY4IHNxdWFyZXJvb3QgMi40MDI1RS0yMCAtPiAxLjZFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM2OSBzcXVhcmVyb290IDIuNzIyNUUtMjAgLT4gMS42RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNzAgc3F1YXJlcm9vdCAzLjA2MjVFLTIwIC0+IDEuOEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzcxIHNxdWFyZXJvb3QgMy40MjI1RS0yMCAtPiAxLjhFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM3MiBzcXVhcmVyb290IDMuODAyNUUtMjAgLT4gMi4wRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNzMgc3F1YXJlcm9vdCA0LjIwMjVFLTIwIC0+IDIuMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4Mzc0IHNxdWFyZXJvb3QgNC42MjI1RS0yMCAtPiAyLjJFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM3NSBzcXVhcmVyb290IDUuMDYyNUUtMjAgLT4gMi4yRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNzYgc3F1YXJlcm9vdCA1LjUyMjVFLTIwIC0+IDIuNEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4Mzc3IHNxdWFyZXJvb3QgNi4wMDI1RS0yMCAtPiAyLjRFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM3OCBzcXVhcmVyb290IDYuNTAyNUUtMjAgLT4gMi42RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzNzkgc3F1YXJlcm9vdCA3LjAyMjVFLTIwIC0+IDIuNkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzgwIHNxdWFyZXJvb3QgNy41NjI1RS0yMCAtPiAyLjhFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM4MSBzcXVhcmVyb290IDguMTIyNUUtMjAgLT4gMi44RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzODIgc3F1YXJlcm9vdCA4LjcwMjVFLTIwIC0+IDMuMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzgzIHNxdWFyZXJvb3QgOS4zMDI1RS0yMCAtPiAzLjBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM4NCBzcXVhcmVyb290IDkuOTIyNUUtMjAgLT4gMy4yRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLXByZWNpc2lvbiA0LCBpbnB1dCBwcmVjaXNpb24gPD0gNAorcHJlY2lzaW9uOiA0CitzcXR4ODM4NSBzcXVhcmVyb290IDIuNUUtMjUgLT4gMEUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorc3F0eDgzODYgc3F1YXJlcm9vdCAyLjI1RS0yNCAtPiAyRS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzODcgc3F1YXJlcm9vdCA2LjI1RS0yNCAtPiAyRS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzODggc3F1YXJlcm9vdCAxLjIyNUUtMjMgLT4gNEUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4Mzg5IHNxdWFyZXJvb3QgMi4wMjVFLTIzIC0+IDRFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM5MCBzcXVhcmVyb290IDMuMDI1RS0yMyAtPiA2RS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzOTEgc3F1YXJlcm9vdCA0LjIyNUUtMjMgLT4gNkUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4MzkyIHNxdWFyZXJvb3QgNS42MjVFLTIzIC0+IDhFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM5MyBzcXVhcmVyb290IDcuMjI1RS0yMyAtPiA4RS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDgzOTQgc3F1YXJlcm9vdCA5LjAyNUUtMjMgLT4gMS4wRS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCistLXByZWNpc2lvbiA1LCBpbnB1dCBwcmVjaXNpb24gPD0gNQorcHJlY2lzaW9uOiA1CitzcXR4ODM5NSBzcXVhcmVyb290IDIuNUUtMjcgLT4gMEUtMTMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgIENsYW1wZWQKK3NxdHg4Mzk2IHNxdWFyZXJvb3QgMi4yNUUtMjYgLT4gMkUtMTMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4Mzk3IHNxdWFyZXJvb3QgNi4yNUUtMjYgLT4gMkUtMTMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4Mzk4IHNxdWFyZXJvb3QgMS4yMjVFLTI1IC0+IDRFLTEzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODM5OSBzcXVhcmVyb290IDIuMDI1RS0yNSAtPiA0RS0xMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MDAgc3F1YXJlcm9vdCAzLjAyNUUtMjUgLT4gNkUtMTMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDAxIHNxdWFyZXJvb3QgNC4yMjVFLTI1IC0+IDZFLTEzIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQwMiBzcXVhcmVyb290IDUuNjI1RS0yNSAtPiA4RS0xMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MDMgc3F1YXJlcm9vdCA3LjIyNUUtMjUgLT4gOEUtMTMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDA0IHNxdWFyZXJvb3QgOS4wMjVFLTI1IC0+IDEuMEUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDA1IHNxdWFyZXJvb3QgMS4xMDI1RS0yNCAtPiAxLjBFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQwNiBzcXVhcmVyb290IDEuMzIyNUUtMjQgLT4gMS4yRS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MDcgc3F1YXJlcm9vdCAxLjU2MjVFLTI0IC0+IDEuMkUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDA4IHNxdWFyZXJvb3QgMS44MjI1RS0yNCAtPiAxLjRFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQwOSBzcXVhcmVyb290IDIuMTAyNUUtMjQgLT4gMS40RS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MTAgc3F1YXJlcm9vdCAyLjQwMjVFLTI0IC0+IDEuNkUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDExIHNxdWFyZXJvb3QgMi43MjI1RS0yNCAtPiAxLjZFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQxMiBzcXVhcmVyb290IDMuMDYyNUUtMjQgLT4gMS44RS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MTMgc3F1YXJlcm9vdCAzLjQyMjVFLTI0IC0+IDEuOEUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDE0IHNxdWFyZXJvb3QgMy44MDI1RS0yNCAtPiAyLjBFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQxNSBzcXVhcmVyb290IDQuMjAyNUUtMjQgLT4gMi4wRS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MTYgc3F1YXJlcm9vdCA0LjYyMjVFLTI0IC0+IDIuMkUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDE3IHNxdWFyZXJvb3QgNS4wNjI1RS0yNCAtPiAyLjJFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQxOCBzcXVhcmVyb290IDUuNTIyNUUtMjQgLT4gMi40RS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MTkgc3F1YXJlcm9vdCA2LjAwMjVFLTI0IC0+IDIuNEUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDIwIHNxdWFyZXJvb3QgNi41MDI1RS0yNCAtPiAyLjZFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQyMSBzcXVhcmVyb290IDcuMDIyNUUtMjQgLT4gMi42RS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MjIgc3F1YXJlcm9vdCA3LjU2MjVFLTI0IC0+IDIuOEUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDIzIHNxdWFyZXJvb3QgOC4xMjI1RS0yNCAtPiAyLjhFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQyNCBzcXVhcmVyb290IDguNzAyNUUtMjQgLT4gMy4wRS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MjUgc3F1YXJlcm9vdCA5LjMwMjVFLTI0IC0+IDMuMEUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDI2IHNxdWFyZXJvb3QgOS45MjI1RS0yNCAtPiAzLjJFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCisKKy0tIGEgcmFuZG9tIHNlbGVjdGlvbiBvZiB2YWx1ZXMgdGhhdCBQeXRob24yLjUuMSByb3VuZHMgaW5jb3JyZWN0bHkKK3ByZWNpc2lvbjogMQorc3F0eDg0Mjcgc3F1YXJlcm9vdCAyMjcgLT4gMkUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDI4IHNxdWFyZXJvb3QgNjI1IC0+IDJFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQyOSBzcXVhcmVyb290IDEyMTUgLT4gM0UrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDMwIHNxdWFyZXJvb3QgMjAwOCAtPiA0RSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MzEgc3F1YXJlcm9vdCAyMDIwIC0+IDRFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQzMiBzcXVhcmVyb290IDIwMjYgLT4gNUUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDMzIHNxdWFyZXJvb3QgMjAyNyAtPiA1RSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDg0MzQgc3F1YXJlcm9vdCAyMDY1IC0+IDVFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQzNSBzcXVhcmVyb290IDIwNzUgLT4gNUUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDM2IHNxdWFyZXJvb3QgMjA4OCAtPiA1RSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDg0Mzcgc3F1YXJlcm9vdCAzMDQ5IC0+IDZFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQzOCBzcXVhcmVyb290IDMwNTcgLT4gNkUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDM5IHNxdWFyZXJvb3QgMzA2MSAtPiA2RSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NDAgc3F1YXJlcm9vdCAzMDkyIC0+IDZFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ0MSBzcXVhcmVyb290IDQyMjIgLT4gNkUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDQyIHNxdWFyZXJvb3QgNTY3NiAtPiA4RSsxIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NDMgc3F1YXJlcm9vdCA1Njg2IC0+IDhFKzEgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ0NCBzcXVhcmVyb290IDcyMTUgLT4gOEUrMSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDQ1IHNxdWFyZXJvb3QgOTA4NiAtPiAxRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NDYgc3F1YXJlcm9vdCA5MDk1IC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMgorc3F0eDg0NDcgc3F1YXJlcm9vdCAxMjY2IC0+IDM2IEluZXhhY3QgUm91bmRlZAorc3F0eDg0NDggc3F1YXJlcm9vdCAyNTUyIC0+IDUxIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NDkgc3F1YXJlcm9vdCA1NTU0IC0+IDc1IEluZXhhY3QgUm91bmRlZAorc3F0eDg0NTAgc3F1YXJlcm9vdCA3ODMyIC0+IDg4IEluZXhhY3QgUm91bmRlZAorc3F0eDg0NTEgc3F1YXJlcm9vdCAxMzIwMSAtPiAxLjFFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ1MiBzcXVhcmVyb290IDE1Njk1IC0+IDEuM0UrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDUzIHNxdWFyZXJvb3QgMTgyNzIgLT4gMS40RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NTQgc3F1YXJlcm9vdCAyMTAyNiAtPiAxLjVFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ1NSBzcXVhcmVyb290IDI0MDY5IC0+IDEuNkUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDU2IHNxdWFyZXJvb3QgMzQyNzcgLT4gMS45RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NTcgc3F1YXJlcm9vdCA0NjIzMyAtPiAyLjJFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ1OCBzcXVhcmVyb290IDQ2MjUxIC0+IDIuMkUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDU5IHNxdWFyZXJvb3QgNDYyNzYgLT4gMi4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NjAgc3F1YXJlcm9vdCA3MDIxNCAtPiAyLjZFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ2MSBzcXVhcmVyb290IDgxMjQ5IC0+IDIuOUUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDYyIHNxdWFyZXJvb3QgODEyNjYgLT4gMi45RSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NjMgc3F1YXJlcm9vdCA5MzA2NSAtPiAzLjFFKzIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ2NCBzcXVhcmVyb290IDkzMDgzIC0+IDMuMUUrMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDY1IHNxdWFyZXJvb3QgOTkyMzAgLT4gMy4yRSsyIEluZXhhY3QgUm91bmRlZAorc3F0eDg0NjYgc3F1YXJlcm9vdCA5OTI3MSAtPiAzLjJFKzIgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMworc3F0eDg0Njcgc3F1YXJlcm9vdCAxMTM0OSAtPiAxMDcgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ2OCBzcXVhcmVyb290IDI2NzM4IC0+IDE2NCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDY5IHNxdWFyZXJvb3QgMzE1MDggLT4gMTc4IEluZXhhY3QgUm91bmRlZAorc3F0eDg0NzAgc3F1YXJlcm9vdCA0NDczNCAtPiAyMTIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ3MSBzcXVhcmVyb290IDQ0NzM4IC0+IDIxMiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDcyIHNxdWFyZXJvb3QgNTEzMDcgLT4gMjI3IEluZXhhY3QgUm91bmRlZAorc3F0eDg0NzMgc3F1YXJlcm9vdCA2MjI1OSAtPiAyNTAgSW5leGFjdCBSb3VuZGVkCitzcXR4ODQ3NCBzcXVhcmVyb290IDc1OTAxIC0+IDI3NiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDc1IHNxdWFyZXJvb3QgNzY0NTcgLT4gMjc3IEluZXhhY3QgUm91bmRlZAorc3F0eDg0NzYgc3F1YXJlcm9vdCAxODAyODcgLT4gNDI1IEluZXhhY3QgUm91bmRlZAorc3F0eDg0Nzcgc3F1YXJlcm9vdCAyMDIwNTMgLT4gNDUwIEluZXhhY3QgUm91bmRlZAorc3F0eDg0Nzggc3F1YXJlcm9vdCAyMzU3NDcgLT4gNDg2IEluZXhhY3QgUm91bmRlZAorc3F0eDg0Nzkgc3F1YXJlcm9vdCAyNTY1MzcgLT4gNTA2IEluZXhhY3QgUm91bmRlZAorc3F0eDg0ODAgc3F1YXJlcm9vdCAyOTk3NzIgLT4gNTQ4IEluZXhhY3QgUm91bmRlZAorc3F0eDg0ODEgc3F1YXJlcm9vdCA0MTUzMzcgLT4gNjQ0IEluZXhhY3QgUm91bmRlZAorc3F0eDg0ODIgc3F1YXJlcm9vdCA2MTcwNjcgLT4gNzg2IEluZXhhY3QgUm91bmRlZAorc3F0eDg0ODMgc3F1YXJlcm9vdCA2MjgwMjIgLT4gNzkyIEluZXhhY3QgUm91bmRlZAorc3F0eDg0ODQgc3F1YXJlcm9vdCA2NDU2MjkgLT4gODA0IEluZXhhY3QgUm91bmRlZAorc3F0eDg0ODUgc3F1YXJlcm9vdCA3ODU4MzYgLT4gODg2IEluZXhhY3QgUm91bmRlZAorc3F0eDg0ODYgc3F1YXJlcm9vdCA5OTMwNjYgLT4gOTk3IEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDYKK3NxdHg4NDg3IHNxdWFyZXJvb3QgMTQ5MTc3ODEgLT4gMzg2Mi4zNSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDg4IHNxdWFyZXJvb3QgMTcyMzcyMzggLT4gNDE1MS43OCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDg5IHNxdWFyZXJvb3QgMTgwNTQ0NjMgLT4gNDI0OS4wNSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDkwIHNxdWFyZXJvb3QgMTk5OTA2OTQgLT4gNDQ3MS4xMCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDkxIHNxdWFyZXJvb3QgMjkwNjE4NTUgLT4gNTM5MC45MCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDkyIHNxdWFyZXJvb3QgNDkxNjYyNTcgLT4gNzAxMS44NyBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDkzIHNxdWFyZXJvb3QgNTMwODIwODYgLT4gNzI4NS43NSBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDk0IHNxdWFyZXJvb3QgNTY3ODc5MDkgLT4gNzUzNS43OCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDk1IHNxdWFyZXJvb3QgODExNDAwMTkgLT4gOTAwNy43OCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDk2IHNxdWFyZXJvb3QgODc5Nzc1NTQgLT4gOTM3OS42NCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDk3IHNxdWFyZXJvb3QgOTM2MjQ2ODMgLT4gOTY3NS45OCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDk4IHNxdWFyZXJvb3QgOTg3MzI3NDcgLT4gOTkzNi40NCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NDk5IHNxdWFyZXJvb3QgOTkyMjI4MTMgLT4gOTk2MS4wNiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTAwIHNxdWFyZXJvb3QgMTQzODgzNjI2IC0+IDExOTk1LjIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODUwMSBzcXVhcmVyb290IDE4MDQzMzMwMSAtPiAxMzQzMi41IEluZXhhY3QgUm91bmRlZAorc3F0eDg1MDIgc3F1YXJlcm9vdCAyMjcwMzQwMjAgLT4gMTUwNjcuNiBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTAzIHNxdWFyZXJvb3QgMjgzMjUzOTkyIC0+IDE2ODMwLjIgSW5leGFjdCBSb3VuZGVkCitzcXR4ODUwNCBzcXVhcmVyb290IDYxNzA0Nzk1NCAtPiAyNDg0MC40IEluZXhhY3QgUm91bmRlZAorc3F0eDg1MDUgc3F1YXJlcm9vdCA3MzY4NzAwOTQgLT4gMjcxNDUuNCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTA2IHNxdWFyZXJvb3QgODk3MzIyOTE1IC0+IDI5OTU1LjMgSW5leGFjdCBSb3VuZGVkCisKKy0tIHJlc3VsdHMgY2xvc2UgdG8gbWluaW11bSBub3JtYWwKK3ByZWNpc2lvbjogMQorc3F0eDg1MDcgc3F1YXJlcm9vdCAxRS0yMCAtPiAwRS05IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3NxdHg4NTA4IHNxdWFyZXJvb3QgMUUtMTkgLT4gMEUtOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitzcXR4ODUwOSBzcXVhcmVyb290IDFFLTE4IC0+IDFFLTkKKworcHJlY2lzaW9uOiAyCitzcXR4ODUxMCBzcXVhcmVyb290IDguMUUtMTkgLT4gOUUtMTAgU3Vibm9ybWFsCitzcXR4ODUxMSBzcXVhcmVyb290IDguMTBFLTE5IC0+IDlFLTEwIFN1Ym5vcm1hbCBSb3VuZGVkCitzcXR4ODUxMiBzcXVhcmVyb290IDkuMEUtMTkgLT4gOUUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTEzIHNxdWFyZXJvb3QgOS4wMkUtMTkgLT4gOUUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTE0IHNxdWFyZXJvb3QgOS4wM0UtMTkgLT4gMS4wRS05IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODUxNSBzcXVhcmVyb290IDkuMUUtMTkgLT4gMS4wRS05IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODUxNiBzcXVhcmVyb290IDkuOUUtMTkgLT4gMS4wRS05IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODUxNyBzcXVhcmVyb290IDkuOTFFLTE5IC0+IDEuMEUtOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1MTggc3F1YXJlcm9vdCA5LjkyRS0xOSAtPiAxLjBFLTkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTE5IHNxdWFyZXJvb3QgOS45NUUtMTkgLT4gMS4wRS05IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODUyMCBzcXVhcmVyb290IDkuOThFLTE5IC0+IDEuMEUtOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1MjEgc3F1YXJlcm9vdCA5Ljk5RS0xOSAtPiAxLjBFLTkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTIyIHNxdWFyZXJvb3QgMUUtMTggLT4gMUUtOQorc3F0eDg1MjMgc3F1YXJlcm9vdCAxLjBFLTE4IC0+IDEuMEUtOQorc3F0eDg1MjQgc3F1YXJlcm9vdCAxLjAwRS0xOCAtPiAxLjBFLTkKK3NxdHg4NTI1IHNxdWFyZXJvb3QgMS4wMDBFLTE4IC0+IDEuMEUtOSBSb3VuZGVkCitzcXR4ODUyNiBzcXVhcmVyb290IDEuMDAwMEUtMTggLT4gMS4wRS05IFJvdW5kZWQKK3NxdHg4NTI3IHNxdWFyZXJvb3QgMS4wMUUtMTggLT4gMS4wRS05IEluZXhhY3QgUm91bmRlZAorc3F0eDg1Mjggc3F1YXJlcm9vdCAxLjAyRS0xOCAtPiAxLjBFLTkgSW5leGFjdCBSb3VuZGVkCitzcXR4ODUyOSBzcXVhcmVyb290IDEuMUUtMTggLT4gMS4wRS05IEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDMKK3NxdHg4NTMwIHNxdWFyZXJvb3QgOC4xRS0xOSAtPiA5RS0xMCBTdWJub3JtYWwKK3NxdHg4NTMxIHNxdWFyZXJvb3QgOC4xMEUtMTkgLT4gOS4wRS0xMCBTdWJub3JtYWwKK3NxdHg4NTMyIHNxdWFyZXJvb3QgOC4xMDBFLTE5IC0+IDkuMEUtMTAgU3Vibm9ybWFsCitzcXR4ODUzMyBzcXVhcmVyb290IDguMTAwMEUtMTkgLT4gOS4wRS0xMCBTdWJub3JtYWwgUm91bmRlZAorc3F0eDg1MzQgc3F1YXJlcm9vdCA5LjlFLTE5IC0+IDkuOUUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTM1IHNxdWFyZXJvb3QgOS45MUUtMTkgLT4gMS4wMEUtOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1MzYgc3F1YXJlcm9vdCA5Ljk5RS0xOSAtPiAxLjAwRS05IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODUzNyBzcXVhcmVyb290IDkuOTk4RS0xOSAtPiAxLjAwRS05IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODUzOCBzcXVhcmVyb290IDFFLTE4IC0+IDFFLTkKK3NxdHg4NTM5IHNxdWFyZXJvb3QgMS4wRS0xOCAtPiAxLjBFLTkKK3NxdHg4NTQwIHNxdWFyZXJvb3QgMS4wMEUtMTggLT4gMS4wRS05CitzcXR4ODU0MSBzcXVhcmVyb290IDEuMDAwRS0xOCAtPiAxLjAwRS05CitzcXR4ODU0MiBzcXVhcmVyb290IDEuMDAwMEUtMTggLT4gMS4wMEUtOQorc3F0eDg1NDMgc3F1YXJlcm9vdCAxLjAwMDAwRS0xOCAtPiAxLjAwRS05IFJvdW5kZWQKK3NxdHg4NTQ0IHNxdWFyZXJvb3QgMS4wMDAwMDBFLTE4IC0+IDEuMDBFLTkgUm91bmRlZAorc3F0eDg1NDUgc3F1YXJlcm9vdCAxLjAxRS0xOCAtPiAxLjAwRS05IEluZXhhY3QgUm91bmRlZAorc3F0eDg1NDYgc3F1YXJlcm9vdCAxLjAyRS0xOCAtPiAxLjAxRS05IEluZXhhY3QgUm91bmRlZAorCistLSByZXN1bHQgZXhhY3RseSByZXByZXNlbnRhYmxlIHdpdGggcHJlY2lzaW9uIHAsIGJ1dCBub3QgbmVjZXNzYXJpbHkKKy0tIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhcyBhIHN1Ym5vcm1hbDsgIGNoZWNrIHRoZSBjb3JyZWN0IGZsYWdzIGFyZSByYWlzZWQKK3ByZWNpc2lvbjogMgorc3F0eDg1NDcgc3F1YXJlcm9vdCAxLjIxRS0yMCAtPiAxRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NDggc3F1YXJlcm9vdCAxLjQ0RS0yMCAtPiAxRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NDkgc3F1YXJlcm9vdCA5LjYxRS0yMCAtPiAzRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NTAgc3F1YXJlcm9vdCA4LjgzNkUtMTkgLT4gOUUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTUxIHNxdWFyZXJvb3QgOS4yMTZFLTE5IC0+IDEuMEUtOSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDMKK3NxdHg4NTUyIHNxdWFyZXJvb3QgMS4yMUUtMjIgLT4gMUUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTUzIHNxdWFyZXJvb3QgMS4yMUUtMjAgLT4gMS4xRS0xMCBTdWJub3JtYWwKK3NxdHg4NTU0IHNxdWFyZXJvb3QgMS45NkUtMjIgLT4gMUUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTU1IHNxdWFyZXJvb3QgMS45NkUtMjAgLT4gMS40RS0xMCBTdWJub3JtYWwKK3NxdHg4NTU2IHNxdWFyZXJvb3QgMi41NkUtMjIgLT4gMkUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTU3IHNxdWFyZXJvb3QgNC4wMEUtMjIgLT4gMkUtMTEgU3Vibm9ybWFsIFJvdW5kZWQKK3NxdHg4NTU4IHNxdWFyZXJvb3QgNy44NEUtMjIgLT4gM0UtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTU5IHNxdWFyZXJvb3QgOS44MDFFLTIxIC0+IDEuMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTYwIHNxdWFyZXJvb3QgOS44MDFFLTE5IC0+IDkuOUUtMTAgU3Vibm9ybWFsCitzcXR4ODU2MSBzcXVhcmVyb290IDEuMDIwMUUtMjAgLT4gMS4wRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NjIgc3F1YXJlcm9vdCAxLjEwMjVFLTIwIC0+IDEuMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTYzIHNxdWFyZXJvb3QgMS4xMjM2RS0yMCAtPiAxLjFFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU2NCBzcXVhcmVyb290IDEuMjk5NkUtMjAgLT4gMS4xRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NjUgc3F1YXJlcm9vdCAxLjMyMjVFLTIwIC0+IDEuMkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gQSBzZWxlY3Rpb24gb2Ygc3Vibm9ybWFsIHJlc3VsdHMgcHJvbmUgdG8gZG91YmxlIHJvdW5kaW5nIGVycm9ycworcHJlY2lzaW9uOiAyCitzcXR4ODU2NiBzcXVhcmVyb290IDIuM0UtMjEgLT4gMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorc3F0eDg1Njcgc3F1YXJlcm9vdCAyLjRFLTIxIC0+IDBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKK3NxdHg4NTY4IHNxdWFyZXJvb3QgMi41RS0yMSAtPiAwRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCitzcXR4ODU2OSBzcXVhcmVyb290IDIuNkUtMjEgLT4gMUUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTcwIHNxdWFyZXJvb3QgMi43RS0yMSAtPiAxRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NzEgc3F1YXJlcm9vdCAyLjhFLTIxIC0+IDFFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU3MiBzcXVhcmVyb290IDIuMkUtMjAgLT4gMUUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTczIHNxdWFyZXJvb3QgMi4zRS0yMCAtPiAyRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1NzQgc3F1YXJlcm9vdCAyLjRFLTIwIC0+IDJFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU3NSBzcXVhcmVyb290IDYuMkUtMjAgLT4gMkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTc2IHNxdWFyZXJvb3QgNi4zRS0yMCAtPiAzRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1Nzcgc3F1YXJlcm9vdCA2LjRFLTIwIC0+IDNFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU3OCBzcXVhcmVyb290IDYuNUUtMjAgLT4gM0UtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTc5IHNxdWFyZXJvb3QgMS4yRS0xOSAtPiAzRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1ODAgc3F1YXJlcm9vdCAyLjBFLTE5IC0+IDRFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU4MSBzcXVhcmVyb290IDQuMkUtMTkgLT4gNkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTgyIHNxdWFyZXJvb3QgNS42RS0xOSAtPiA3RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1ODMgc3F1YXJlcm9vdCA1LjdFLTE5IC0+IDhFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU4NCBzcXVhcmVyb290IDkuMEUtMTkgLT4gOUUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTg1IHNxdWFyZXJvb3QgOS4xRS0xOSAtPiAxLjBFLTkgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMworc3F0eDg1ODYgc3F1YXJlcm9vdCAyLjZFLTIzIC0+IDFFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU4NyBzcXVhcmVyb290IDIuMjJFLTIyIC0+IDFFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU4OCBzcXVhcmVyb290IDYuMDdFLTIyIC0+IDJFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU4OSBzcXVhcmVyb290IDYuMjVFLTIyIC0+IDJFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU5MCBzcXVhcmVyb290IDYuNDVFLTIyIC0+IDNFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU5MSBzcXVhcmVyb290IDYuNTBFLTIyIC0+IDNFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU5MiBzcXVhcmVyb290IDEuMjJFLTIxIC0+IDNFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU5MyBzcXVhcmVyb290IDEuMjRFLTIxIC0+IDRFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU5NCBzcXVhcmVyb290IDQuMThFLTIxIC0+IDZFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU5NSBzcXVhcmVyb290IDcuMTlFLTIxIC0+IDhFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU5NiBzcXVhcmVyb290IDguOTRFLTIxIC0+IDlFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODU5NyBzcXVhcmVyb290IDEuODFFLTIwIC0+IDEuM0UtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NTk4IHNxdWFyZXJvb3QgNC42NEUtMjAgLT4gMi4yRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg1OTkgc3F1YXJlcm9vdCA1LjA2RS0yMCAtPiAyLjJFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODYwMCBzcXVhcmVyb290IDUuMDhFLTIwIC0+IDIuM0UtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjAxIHNxdWFyZXJvb3QgNy4wMEUtMjAgLT4gMi42RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MDIgc3F1YXJlcm9vdCAxLjgxRS0xOSAtPiA0LjNFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODYwMyBzcXVhcmVyb290IDYuNjRFLTE5IC0+IDguMUUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjA0IHNxdWFyZXJvb3QgNy40OEUtMTkgLT4gOC42RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MDUgc3F1YXJlcm9vdCA5LjkxRS0xOSAtPiAxLjAwRS05IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDQKK3NxdHg4NjA2IHNxdWFyZXJvb3QgNi4yNEUtMjQgLT4gMkUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjA3IHNxdWFyZXJvb3QgNy4xNjJFLTIzIC0+IDhFLTEyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODYwOCBzcXVhcmVyb290IDcuMjQzRS0yMyAtPiA5RS0xMiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MDkgc3F1YXJlcm9vdCA4Ljk2MUUtMjMgLT4gOUUtMTIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjEwIHNxdWFyZXJvb3QgOS4wMjlFLTIzIC0+IDEuMEUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjExIHNxdWFyZXJvb3QgNC42MjRFLTIyIC0+IDIuMkUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjEyIHNxdWFyZXJvb3QgNS45ODBFLTIyIC0+IDIuNEUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjEzIHNxdWFyZXJvb3QgNi41MDdFLTIyIC0+IDIuNkUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjE0IHNxdWFyZXJvb3QgMS40ODNFLTIxIC0+IDMuOUUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjE1IHNxdWFyZXJvb3QgMy45MDNFLTIxIC0+IDYuMkUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjE2IHNxdWFyZXJvb3QgOC43MzNFLTIxIC0+IDkuM0UtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjE3IHNxdWFyZXJvb3QgMS43ODFFLTIwIC0+IDEuMzNFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODYxOCBzcXVhcmVyb290IDYuNDI2RS0yMCAtPiAyLjUzRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MTkgc3F1YXJlcm9vdCA3LjEwMkUtMjAgLT4gMi42NkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjIwIHNxdWFyZXJvb3QgNy41MzVFLTIwIC0+IDIuNzRFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODYyMSBzcXVhcmVyb290IDkuODkyRS0yMCAtPiAzLjE1RS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MjIgc3F1YXJlcm9vdCAxLjYxMkUtMTkgLT4gNC4wMUUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NjIzIHNxdWFyZXJvb3QgMS43MjZFLTE5IC0+IDQuMTVFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODYyNCBzcXVhcmVyb290IDEuODUzRS0xOSAtPiA0LjMwRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg2MjUgc3F1YXJlcm9vdCA0LjI0NUUtMTkgLT4gNi41MkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKKworLS0gY2xhbXBpbmcgYW5kIG92ZXJmbG93IGZvciBsYXJnZSBleHBvbmVudHMKK3ByZWNpc2lvbjogMQorc3F0eDg2MjYgc3F1YXJlcm9vdCAxRSsxOCAtPiAxRSs5CitzcXR4ODYyNyBzcXVhcmVyb290IDFFKzE5IC0+IDNFKzkgSW5leGFjdCBSb3VuZGVkCistLSBpbiB0aGlzIG5leHQgb25lLCBpbnRlcm1lZGlhdGUgcmVzdWx0IGlzIDk0ODY4MzI5ODAuNTA1MTM3OTk2Li4uCistLSBzbyByb3VuZHMgZG93biB0byA5IChub3QgdXAgdG8gMTAgd2hpY2ggd291bGQgY2F1c2UgSW5maW5pdHkgb3ZlcmZsb3cpCitzcXR4ODYyOCBzcXVhcmVyb290IDlFKzE5IC0+IDlFKzkgSW5leGFjdCBSb3VuZGVkCitzcXR4ODYyOSBzcXVhcmVyb290IDkuMUUrMTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitzcXR4ODYzMCBzcXVhcmVyb290IDFFKzIwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorCitwcmVjaXNpb246IDIKK3NxdHg4NjMxIHNxdWFyZXJvb3QgMUUrMTggLT4gMUUrOQorc3F0eDg2MzIgc3F1YXJlcm9vdCAxLjBFKzE4IC0+IDEuMEUrOQorc3F0eDg2MzMgc3F1YXJlcm9vdCAxLjAwRSsxOCAtPiAxLjBFKzkKK3NxdHg4NjM0IHNxdWFyZXJvb3QgMS4wMDBFKzE4IC0+IDEuMEUrOSBSb3VuZGVkCitzcXR4ODYzNSBzcXVhcmVyb290IDFFKzIwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorY2xhbXA6IDEKK3NxdHg4NjM2IHNxdWFyZXJvb3QgMUUrMTggLT4gMS4wRSs5IENsYW1wZWQKK3NxdHg4NjM3IHNxdWFyZXJvb3QgMS4wRSsxOCAtPiAxLjBFKzkKK3NxdHg4NjM4IHNxdWFyZXJvb3QgMUUrMjAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitjbGFtcDogMAorCitwcmVjaXNpb246IDYKK3NxdHg4NjM5IHNxdWFyZXJvb3QgMUUrMTggLT4gMUUrOQorc3F0eDg2NDAgc3F1YXJlcm9vdCAxLjAwMDAwMDAwMDBFKzE4IC0+IDEuMDAwMDBFKzkKK3NxdHg4NjQxIHNxdWFyZXJvb3QgMS4wMDAwMDAwMDAwMEUrMTggLT4gMS4wMDAwMEUrOSBSb3VuZGVkCitzcXR4ODY0MiBzcXVhcmVyb290IDFFKzIwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorY2xhbXA6IDEKK3NxdHg4NjQzIHNxdWFyZXJvb3QgMUUrOCAtPiAxRSs0CitzcXR4ODY0NCBzcXVhcmVyb290IDFFKzEwIC0+IDEuMEUrNSBDbGFtcGVkCitzcXR4ODY0NSBzcXVhcmVyb290IDEuMEUrMTAgLT4gMS4wRSs1CitzcXR4ODY0NiBzcXVhcmVyb290IDFFKzEyIC0+IDEuMDBFKzYgQ2xhbXBlZAorc3F0eDg2NDcgc3F1YXJlcm9vdCAxLjBFKzEyIC0+IDEuMDBFKzYgQ2xhbXBlZAorc3F0eDg2NDggc3F1YXJlcm9vdCAxLjAwRSsxMiAtPiAxLjAwRSs2IENsYW1wZWQKK3NxdHg4NjQ5IHNxdWFyZXJvb3QgMS4wMDBFKzEyIC0+IDEuMDBFKzYKK3NxdHg4NjUwIHNxdWFyZXJvb3QgMUUrMTggLT4gMS4wMDAwMEUrOSBDbGFtcGVkCitzcXR4ODY1MSBzcXVhcmVyb290IDEuMDAwMDAwMDBFKzE4IC0+IDEuMDAwMDBFKzkgQ2xhbXBlZAorc3F0eDg2NTIgc3F1YXJlcm9vdCAxLjAwMDAwMDAwMEUrMTggLT4gMS4wMDAwMEUrOQorc3F0eDg2NTMgc3F1YXJlcm9vdCAxRSsyMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK2NsYW1wOiAwCisKKy0tIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjYXVzZXMgYSBUeXBlRXJyb3IgaW4gUHl0aG9uIDIuNS4xCitwcmVjaXNpb246IDMKK21heGV4cG9uZW50OiA5CittaW5leHBvbmVudDogLTkKK3NxdHg4NjU0IHNxdWFyZXJvb3QgMTAwMDAwMDAwMDAgLT4gMS4wMEUrNSBSb3VuZGVkCisKKy0tIEFkZGl0aW9uYWwgdHJpY2t5IGNhc2VzIG9mIHVuZGVyZmxvd24gc3Vibm9ybWFscworcm91bmRpbmc6IGhhbGZfZXZlbgorcHJlY2lzaW9uOiA1CittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorc3F0eDg3MDAgc3F1YXJlcm9vdCAyLjgwNzNFLTIwMDAgLT4gMS42NzVFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzAxIHNxdWFyZXJvb3QgMi44ODgzRS0yMDAwIC0+IDEuNjk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcwMiBzcXVhcmVyb290IDMuMTUyNEUtMjAwMCAtPiAxLjc3NUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MDMgc3F1YXJlcm9vdCAzLjIzODJFLTIwMDAgLT4gMS43OTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzA0IHNxdWFyZXJvb3QgMy41MTc1RS0yMDAwIC0+IDEuODc1RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcwNSBzcXVhcmVyb290IDMuNjA4MUUtMjAwMCAtPiAxLjg5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MDYgc3F1YXJlcm9vdCAzLjkwMjZFLTIwMDAgLT4gMS45NzVFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzA3IHNxdWFyZXJvb3QgMy45OTgwRS0yMDAwIC0+IDEuOTk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcwOCBzcXVhcmVyb290IDQuMzA3N0UtMjAwMCAtPiAyLjA3NUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MDkgc3F1YXJlcm9vdCA0LjQwNzlFLTIwMDAgLT4gMi4wOTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzEwIHNxdWFyZXJvb3QgNC43MzI4RS0yMDAwIC0+IDIuMTc1RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcxMSBzcXVhcmVyb290IDQuODM3OEUtMjAwMCAtPiAyLjE5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MTIgc3F1YXJlcm9vdCA1LjE3NzlFLTIwMDAgLT4gMi4yNzVFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzEzIHNxdWFyZXJvb3QgNS4yODc3RS0yMDAwIC0+IDIuMjk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcxNCBzcXVhcmVyb290IDUuNjQzMEUtMjAwMCAtPiAyLjM3NUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MTUgc3F1YXJlcm9vdCA1Ljc1NzZFLTIwMDAgLT4gMi4zOTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzE2IHNxdWFyZXJvb3QgNi4xMjgxRS0yMDAwIC0+IDIuNDc1RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcxNyBzcXVhcmVyb290IDYuMjQ3NUUtMjAwMCAtPiAyLjQ5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MTggc3F1YXJlcm9vdCA2LjYzMzJFLTIwMDAgLT4gMi41NzVFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzE5IHNxdWFyZXJvb3QgNi43NTc0RS0yMDAwIC0+IDIuNTk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcyMCBzcXVhcmVyb290IDcuMTU4M0UtMjAwMCAtPiAyLjY3NUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MjEgc3F1YXJlcm9vdCA3LjI4NzNFLTIwMDAgLT4gMi42OTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzIyIHNxdWFyZXJvb3QgNy43MDM0RS0yMDAwIC0+IDIuNzc1RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcyMyBzcXVhcmVyb290IDcuODM3MkUtMjAwMCAtPiAyLjc5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3MjQgc3F1YXJlcm9vdCA4LjI2ODVFLTIwMDAgLT4gMi44NzVFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzI1IHNxdWFyZXJvb3QgOC40MDcxRS0yMDAwIC0+IDIuODk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcyNiBzcXVhcmVyb290IDguODUzNkUtMjAwMCAtPiAyLjk3NUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorc3F0eDg3Mjcgc3F1YXJlcm9vdCA4Ljk5NzBFLTIwMDAgLT4gMi45OTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKK3NxdHg4NzI4IHNxdWFyZXJvb3QgOS40NTg3RS0yMDAwIC0+IDMuMDc1RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCitzcXR4ODcyOSBzcXVhcmVyb290IDkuNjA2OUUtMjAwMCAtPiAzLjA5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAorLS0gKEVuZCBvZiBNYXJrIERpY2tpbnNvbidzIHRlc3RjYXNlcy4pCisKKworLS0gU29tZSBhZGRpdGlvbmFsIGVkZ2UgY2FzZXMKK21heGV4cG9uZW50OiA5CittaW5leHBvbmVudDogLTkKK3ByZWNpc2lvbjogMgorc3F0eDkwMDAgc3F1YXJlcm9vdCA5OTgwLjAxIC0+IDEuMEUrMiBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogMworc3F0eDkwMDEgc3F1YXJlcm9vdCA5OTgwLjAxIC0+IDk5LjkKK3ByZWNpc2lvbjogNAorc3F0eDkwMDIgc3F1YXJlcm9vdCA5OTgwLjAxIC0+IDk5LjkKKworLS0gRXhhY3QgZnJvbSBvdmVyLXByZWNpc2UKK3ByZWNpc2lvbjogNAorc3F0eDkwMDMgc3F1YXJlcm9vdCAxMTAyNSAgIC0+IDEwNQorcHJlY2lzaW9uOiAzCitzcXR4OTAwNCBzcXVhcmVyb290IDExMDI1ICAgLT4gMTA1CitwcmVjaXNpb246IDIKK3NxdHg5MDA1IHNxdWFyZXJvb3QgMTEwMjUgICAtPiAxLjBFKzIgIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxCitzcXR4OTAwNiBzcXVhcmVyb290IDExMDI1ICAgLT4gMUUrMiAgICBJbmV4YWN0IFJvdW5kZWQKKworLS0gYW4gaW50ZXJlc3RpbmcgY2FzZQorcHJlY2lzaW9uOiAgIDcKK3NxdHg5MDA3IHNxdWFyZXJvb3QgMTYwMDAwMGUxIC0+IDQwMDAKKworLS0gT3V0LW9mLWJvdW5kcyB6ZXJvcworcHJlY2lzaW9uOiA0CitzcXR4OTAxMCBzcXVhcmVyb290IDBFLTkgIC0+IDAuMDAwMDAKK3NxdHg5MDExIHNxdWFyZXJvb3QgMEUtMTAgLT4gMC4wMDAwMAorc3F0eDkwMTIgc3F1YXJlcm9vdCAwRS0xMSAtPiAwLjAwMDAwMAorc3F0eDkwMTMgc3F1YXJlcm9vdCAwRS0xMiAtPiAwLjAwMDAwMAorc3F0eDkwMTQgc3F1YXJlcm9vdCAwRS0xMyAtPiAwRS03CitzcXR4OTAxNSBzcXVhcmVyb290IDBFLTE0IC0+IDBFLTcKK3NxdHg5MDIwIHNxdWFyZXJvb3QgMEUtMTcgLT4gMEUtOQorc3F0eDkwMjEgc3F1YXJlcm9vdCAwRS0yMCAtPiAwRS0xMAorc3F0eDkwMjIgc3F1YXJlcm9vdCAwRS0yMiAtPiAwRS0xMQorc3F0eDkwMjMgc3F1YXJlcm9vdCAwRS0yNCAtPiAwRS0xMgorc3F0eDkwMjQgc3F1YXJlcm9vdCAwRS0yNSAtPiAwRS0xMiBDbGFtcGVkCitzcXR4OTAyNSBzcXVhcmVyb290IDBFLTI2IC0+IDBFLTEyIENsYW1wZWQKK3NxdHg5MDI2IHNxdWFyZXJvb3QgMEUtMjcgLT4gMEUtMTIgQ2xhbXBlZAorc3F0eDkwMjcgc3F1YXJlcm9vdCAwRS0yOCAtPiAwRS0xMiBDbGFtcGVkCisKK3NxdHg5MDMwIHNxdWFyZXJvb3QgMEUrOCAgLT4gMEUrNAorc3F0eDkwMzEgc3F1YXJlcm9vdCAwRSsxMCAtPiAwRSs1CitzcXR4OTAzMiBzcXVhcmVyb290IDBFKzEyIC0+IDBFKzYKK3NxdHg5MDMzIHNxdWFyZXJvb3QgMEUrMTQgLT4gMEUrNworc3F0eDkwMzQgc3F1YXJlcm9vdCAwRSsxNSAtPiAwRSs3CitzcXR4OTAzNSBzcXVhcmVyb290IDBFKzE2IC0+IDBFKzgKK3NxdHg5MDM2IHNxdWFyZXJvb3QgMEUrMTggLT4gMEUrOQorc3F0eDkwMzcgc3F1YXJlcm9vdCAwRSsxOSAtPiAwRSs5CitzcXR4OTAzOCBzcXVhcmVyb290IDBFKzIwIC0+IDBFKzkgQ2xhbXBlZAorc3F0eDkwMzkgc3F1YXJlcm9vdCAwRSsyMSAtPiAwRSs5IENsYW1wZWQKK3NxdHg5MDQwIHNxdWFyZXJvb3QgMEUrMjIgLT4gMEUrOSBDbGFtcGVkCisKKy0tIGlmIGRpZ2l0cyA+IGVtYXggbWF4aW11bSByZWFsIGV4cG9uZW50IGlzIG5lZ2F0aXZlCittYXhleHBvbmVudDogOQorbWluZXhwb25lbnQ6IC05CitwcmVjaXNpb246IDE1CitjbGFtcDogMQorc3F0eDkwNDUgc3F1YXJlcm9vdCAgMSAtPiAxLjAwMDAwICBDbGFtcGVkCisKKy0tIG90aGVyCittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiAxNgorc3F0eDkwNDYgc3F1YXJlcm9vdCAgMTAgICAgLT4gMy4xNjIyNzc2NjAxNjgzNzkgICAgICAgICAgaW5leGFjdCByb3VuZGVkCitzcXR4OTA0NyBzcXVhcmVyb290ICAxMEUtMSAtPiAxLjAKK3NxdHg5MDQ4IHNxdWFyZXJvb3QgIDEwRS0yIC0+IDAuMzE2MjI3NzY2MDE2ODM3OSAgICAgICAgIGluZXhhY3Qgcm91bmRlZAorc3F0eDkwNDkgc3F1YXJlcm9vdCAgMTBFLTMgLT4gMC4xMAorCisKKy0tIEhpZ2gtcHJlY2lzaW9uIGV4YWN0IGFuZCBpbmV4YWN0CittYXhleHBvbmVudDogOTk5CittaW5leHBvbmVudDogLTk5OQorcHJlY2lzaW9uOiA0MDAKK3NxdHg5MDUwIHNxdWFyZXJvb3QgMiAtPiAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwMTY4ODcyNDIwOTY5ODA3ODU2OTY3MTg3NTM3Njk0ODA3MzE3NjY3OTczNzk5MDczMjQ3ODQ2MjEwNzAzODg1MDM4NzUzNDMyNzY0MTU3MjczNTAxMzg0NjIzMDkxMjI5NzAyNDkyNDgzNjA1NTg1MDczNzIxMjY0NDEyMTQ5NzA5OTkzNTgzMTQxMzIyMjY2NTkyNzUwNTU5Mjc1NTc5OTk1MDUwMTE1Mjc4MjA2MDU3MTQ3MDEwOTU1OTk3MTYwNTk3MDI3NDUzNDU5Njg2MjAxNDcyODUxNzQxODY0MDg4OTE5ODYwOTU1MjMyOTIzMDQ4NDMwODcxNDMyMTQ1MDgzOTc2MjYwMzYyNzk5NTI1MTQwNzk4OTY4NzI1MzM5NjU0NjMzMTgwODgyOTY0MDYyMDYxNTI1ODM1MjM5NTA1NDc0NTc1MDI4Nzc1OTk2MTcyOTgzNTU3NTIyMDMzNzUzMTg1NzAxMTM1NDM3NDYwMzQwODQ5ODg0NyBJbmV4YWN0IFJvdW5kZWQKK3NxdHg5MDUxIHNxdWFyZXJvb3QgMTA4OSAtPiAzMworc3F0eDkwNTIgc3F1YXJlcm9vdCAxMC44OSAtPiAzLjMKKworLS0gTnVsbCB0ZXN0CitzcXR4OTkwMCBzcXVhcmVyb290ICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zdWJ0cmFjdC5kZWNUZXN0IGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zdWJ0cmFjdC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OTUyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3N1YnRyYWN0LmRlY1Rlc3QKQEAgLTAsMCArMSw4NzMgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gc3VidHJhY3QuZGVjVGVzdCAtLSBkZWNpbWFsIHN1YnRyYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogMzg0CittaW5leHBvbmVudDogLTM4MworCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KK3N1YngwMDEgc3VidHJhY3QgIDAgICAwICAtPiAnMCcKK3N1YngwMDIgc3VidHJhY3QgIDEgICAxICAtPiAnMCcKK3N1YngwMDMgc3VidHJhY3QgIDEgICAyICAtPiAnLTEnCitzdWJ4MDA0IHN1YnRyYWN0ICAyICAgMSAgLT4gJzEnCitzdWJ4MDA1IHN1YnRyYWN0ICAyICAgMiAgLT4gJzAnCitzdWJ4MDA2IHN1YnRyYWN0ICAzICAgMiAgLT4gJzEnCitzdWJ4MDA3IHN1YnRyYWN0ICAyICAgMyAgLT4gJy0xJworCitzdWJ4MDExIHN1YnRyYWN0IC0wICAgMCAgLT4gJy0wJworc3VieDAxMiBzdWJ0cmFjdCAtMSAgIDEgIC0+ICctMicKK3N1YngwMTMgc3VidHJhY3QgLTEgICAyICAtPiAnLTMnCitzdWJ4MDE0IHN1YnRyYWN0IC0yICAgMSAgLT4gJy0zJworc3VieDAxNSBzdWJ0cmFjdCAtMiAgIDIgIC0+ICctNCcKK3N1YngwMTYgc3VidHJhY3QgLTMgICAyICAtPiAnLTUnCitzdWJ4MDE3IHN1YnRyYWN0IC0yICAgMyAgLT4gJy01JworCitzdWJ4MDIxIHN1YnRyYWN0ICAwICAtMCAgLT4gJzAnCitzdWJ4MDIyIHN1YnRyYWN0ICAxICAtMSAgLT4gJzInCitzdWJ4MDIzIHN1YnRyYWN0ICAxICAtMiAgLT4gJzMnCitzdWJ4MDI0IHN1YnRyYWN0ICAyICAtMSAgLT4gJzMnCitzdWJ4MDI1IHN1YnRyYWN0ICAyICAtMiAgLT4gJzQnCitzdWJ4MDI2IHN1YnRyYWN0ICAzICAtMiAgLT4gJzUnCitzdWJ4MDI3IHN1YnRyYWN0ICAyICAtMyAgLT4gJzUnCisKK3N1YngwMzAgc3VidHJhY3QgIDExICAxICAtPiAxMAorc3VieDAzMSBzdWJ0cmFjdCAgMTAgIDEgIC0+ICA5CitzdWJ4MDMyIHN1YnRyYWN0ICA5ICAgMSAgLT4gIDgKK3N1YngwMzMgc3VidHJhY3QgIDEgICAxICAtPiAgMAorc3VieDAzNCBzdWJ0cmFjdCAgMCAgIDEgIC0+IC0xCitzdWJ4MDM1IHN1YnRyYWN0IC0xICAgMSAgLT4gLTIKK3N1YngwMzYgc3VidHJhY3QgLTkgICAxICAtPiAtMTAKK3N1YngwMzcgc3VidHJhY3QgLTEwICAxICAtPiAtMTEKK3N1YngwMzggc3VidHJhY3QgLTExICAxICAtPiAtMTIKKworc3VieDA0MCBzdWJ0cmFjdCAnNS43NScgJzMuMycgIC0+ICcyLjQ1Jworc3VieDA0MSBzdWJ0cmFjdCAnNScgICAgJy0zJyAgIC0+ICc4Jworc3VieDA0MiBzdWJ0cmFjdCAnLTUnICAgJy0zJyAgIC0+ICctMicKK3N1YngwNDMgc3VidHJhY3QgJy03JyAgICcyLjUnICAtPiAnLTkuNScKK3N1YngwNDQgc3VidHJhY3QgJzAuNycgICcwLjMnICAtPiAnMC40Jworc3VieDA0NSBzdWJ0cmFjdCAnMS4zJyAgJzAuMycgIC0+ICcxLjAnCitzdWJ4MDQ2IHN1YnRyYWN0ICcxLjI1JyAnMS4yNScgLT4gJzAuMDAnCisKK3N1YngwNTAgc3VidHJhY3QgJzEuMjM0NTY3ODknICAgICcxLjAwMDAwMDAwJyAtPiAnMC4yMzQ1Njc4OScKK3N1YngwNTEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAgICcxLjAwMDAwMDg5JyAtPiAnMC4yMzQ1NjcwMCcKK3N1YngwNTIgc3VidHJhY3QgJzAuNTU1NTU1NTU1OScgICAgJzAuMDAwMDAwMDAwMScgLT4gJzAuNTU1NTU1NTU2JyBJbmV4YWN0IFJvdW5kZWQKK3N1YngwNTMgc3VidHJhY3QgJzAuNTU1NTU1NTU1OScgICAgJzAuMDAwMDAwMDAwNScgLT4gJzAuNTU1NTU1NTU1JyBJbmV4YWN0IFJvdW5kZWQKK3N1YngwNTQgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NCcgICAgJzAuMTExMTExMTExMScgLT4gJzAuMzMzMzMzMzMzJyBJbmV4YWN0IFJvdW5kZWQKK3N1YngwNTUgc3VidHJhY3QgJzEuMDAwMDAwMDAwMCcgICAgJzAuMDAwMDAwMDEnIC0+ICcwLjk5OTk5OTk5MCcgUm91bmRlZAorc3VieDA1NiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0OTk5JyAgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK3N1YngwNTcgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NTAwMCcgICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCisKK3N1YngwNjAgc3VidHJhY3QgJzcwJyAgICAnMTAwMDBlKzknIC0+ICctMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorc3VieDA2MSBzdWJ0cmFjdCAnNzAwJyAgICAnMTAwMDBlKzknIC0+ICctMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorc3VieDA2MiBzdWJ0cmFjdCAnNzAwMCcgICAgJzEwMDAwZSs5JyAtPiAnLTkuOTk5OTk5OTlFKzEyJyBJbmV4YWN0IFJvdW5kZWQKK3N1YngwNjMgc3VidHJhY3QgJzcwMDAwJyAgICAnMTAwMDBlKzknIC0+ICctOS45OTk5OTk5M0UrMTInIFJvdW5kZWQKK3N1YngwNjQgc3VidHJhY3QgJzcwMDAwMCcgICAgJzEwMDAwZSs5JyAtPiAnLTkuOTk5OTk5MzBFKzEyJyBSb3VuZGVkCisgIC0tIHN5bW1ldHJ5Ogorc3VieDA2NSBzdWJ0cmFjdCAnMTAwMDBlKzknICAgICc3MCcgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK3N1YngwNjYgc3VidHJhY3QgJzEwMDAwZSs5JyAgICAnNzAwJyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorc3VieDA2NyBzdWJ0cmFjdCAnMTAwMDBlKzknICAgICc3MDAwJyAtPiAnOS45OTk5OTk5OUUrMTInIEluZXhhY3QgUm91bmRlZAorc3VieDA2OCBzdWJ0cmFjdCAnMTAwMDBlKzknICAgICc3MDAwMCcgLT4gJzkuOTk5OTk5OTNFKzEyJyBSb3VuZGVkCitzdWJ4MDY5IHN1YnRyYWN0ICcxMDAwMGUrOScgICAgJzcwMDAwMCcgLT4gJzkuOTk5OTk5MzBFKzEyJyBSb3VuZGVkCisKKyAgLS0gY2hhbmdlIHByZWNpc2lvbgorc3VieDA4MCBzdWJ0cmFjdCAnMTAwMDBlKzknICAgICc3MDAwMCcgLT4gJzkuOTk5OTk5OTNFKzEyJyBSb3VuZGVkCitwcmVjaXNpb246IDYKK3N1YngwODEgc3VidHJhY3QgJzEwMDAwZSs5JyAgICAnNzAwMDAnIC0+ICcxLjAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDkKKworICAtLSBzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHMKK3N1YngwOTAgc3VidHJhY3QgJzAwLjAnICAgICcwLjAnICAtPiAnMC4wJworc3VieDA5MSBzdWJ0cmFjdCAnMDAuMCcgICAgJzAuMDAnIC0+ICcwLjAwJworc3VieDA5MiBzdWJ0cmFjdCAnMC4wMCcgICAgJzAwLjAnIC0+ICcwLjAwJworc3VieDA5MyBzdWJ0cmFjdCAnMDAuMCcgICAgJzAuMDAnIC0+ICcwLjAwJworc3VieDA5NCBzdWJ0cmFjdCAnMC4wMCcgICAgJzAwLjAnIC0+ICcwLjAwJworc3VieDA5NSBzdWJ0cmFjdCAnMycgICAgJy4zJyAgIC0+ICcyLjcnCitzdWJ4MDk2IHN1YnRyYWN0ICczLicgICAnLjMnICAgLT4gJzIuNycKK3N1YngwOTcgc3VidHJhY3QgJzMuMCcgICcuMycgICAtPiAnMi43Jworc3VieDA5OCBzdWJ0cmFjdCAnMy4wMCcgJy4zJyAgIC0+ICcyLjcwJworc3VieDA5OSBzdWJ0cmFjdCAnMycgICAgJzMnICAgIC0+ICcwJworc3VieDEwMCBzdWJ0cmFjdCAnMycgICAgJyszJyAgIC0+ICcwJworc3VieDEwMSBzdWJ0cmFjdCAnMycgICAgJy0zJyAgIC0+ICc2Jworc3VieDEwMiBzdWJ0cmFjdCAnMycgICAgJzAuMycgIC0+ICcyLjcnCitzdWJ4MTAzIHN1YnRyYWN0ICczLicgICAnMC4zJyAgLT4gJzIuNycKK3N1YngxMDQgc3VidHJhY3QgJzMuMCcgICcwLjMnICAtPiAnMi43Jworc3VieDEwNSBzdWJ0cmFjdCAnMy4wMCcgJzAuMycgIC0+ICcyLjcwJworc3VieDEwNiBzdWJ0cmFjdCAnMycgICAgJzMuMCcgIC0+ICcwLjAnCitzdWJ4MTA3IHN1YnRyYWN0ICczJyAgICAnKzMuMCcgLT4gJzAuMCcKK3N1YngxMDggc3VidHJhY3QgJzMnICAgICctMy4wJyAtPiAnNi4wJworCistLSB0aGUgYWJvdmUgYWxsIGZyb20gYWRkOyBtYXNzYWdlZCBhbmQgZXh0ZW5kZWQuICBOb3cgc29tZSBuZXcgb25lcy4uLgorLS0gW3BhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIGNvbXBhcmlzb25zXQorLS0gTkI6IC14RS04IGJlbG93IHdlcmUgbm9uLWV4cG9uZW50cyBwcmUtQU5TSSBYMy0yNzQsIGFuZCAtMUUtNyBvciAwRS03CistLSB3aXRoIGlucHV0IHJvdW5kaW5nLgorc3VieDEyMCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg0JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTVFLTgnCitzdWJ4MTIxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNEUtOCcKK3N1YngxMjIgc3VidHJhY3QgICcxMC4yMzQ1Njc4NicgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0zRS04Jworc3VieDEyMyBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg3JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTJFLTgnCitzdWJ4MTI0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMUUtOCcKK3N1YngxMjUgc3VidHJhY3QgICcxMC4yMzQ1Njc4OScgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzBFLTgnCitzdWJ4MTI2IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTAnICAgICcxMC4yMzQ1Njc4OScgIC0+ICcxRS04Jworc3VieDEyNyBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMkUtOCcKK3N1YngxMjggc3VidHJhY3QgICcxMC4yMzQ1Njc5MicgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzNFLTgnCitzdWJ4MTI5IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTMnICAgICcxMC4yMzQ1Njc4OScgIC0+ICc0RS04Jworc3VieDEzMCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzk0JyAgICAnMTAuMjM0NTY3ODknICAtPiAnNUUtOCcKK3N1YngxMzEgc3VidHJhY3QgICcxMC4yMzQ1Njc4MScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy01RS04Jworc3VieDEzMiBzdWJ0cmFjdCAgJzEwLjIzNDU2NzgyJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTRFLTgnCitzdWJ4MTMzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODMnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctM0UtOCcKK3N1YngxMzQgc3VidHJhY3QgICcxMC4yMzQ1Njc4NCcgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0yRS04Jworc3VieDEzNSBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg1JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTFFLTgnCitzdWJ4MTM2IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcwRS04Jworc3VieDEzNyBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg3JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnMUUtOCcKK3N1YngxMzggc3VidHJhY3QgICcxMC4yMzQ1Njc4OCcgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzJFLTgnCitzdWJ4MTM5IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4NicgIC0+ICczRS04Jworc3VieDE0MCBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkwJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnNEUtOCcKK3N1YngxNDEgc3VidHJhY3QgICcxMC4yMzQ1Njc5MScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzVFLTgnCitzdWJ4MTQyIHN1YnRyYWN0ICAnMScgICAgICAgICAgICAgICcwLjk5OTk5OTk5OScgIC0+ICcxRS05Jworc3VieDE0MyBzdWJ0cmFjdCAgJzAuOTk5OTk5OTk5JyAgICAnMScgICAgICAgICAgICAtPiAnLTFFLTknCitzdWJ4MTQ0IHN1YnRyYWN0ICAnLTEwLjIzNDU2NzgwJyAgICctMTAuMjM0NTY3ODYnIC0+ICc2RS04Jworc3VieDE0NSBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTRFLTgnCitzdWJ4MTQ2IHN1YnRyYWN0ICAnLTEwLjIzNDU2NzkxJyAgICctMTAuMjM0NTY3ODYnIC0+ICctNUUtOCcKKworcHJlY2lzaW9uOiAzCitzdWJ4MTUwIHN1YnRyYWN0ICcxMjM0NTY3ODkwMDAwMCcgJzk5OTk5OTk5OTk5OTknICAtPiAyLjM1RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3N1YngxNTEgc3VidHJhY3QgJzk5OTk5OTk5OTk5OTknICAnMTIzNDU2Nzg5MDAwMDAnIC0+IC0yLjM1RSsxMiBJbmV4YWN0IFJvdW5kZWQKK3ByZWNpc2lvbjogNgorc3VieDE1MiBzdWJ0cmFjdCAnMTIzNDU2Nzg5MDAwMDAnICc5OTk5OTk5OTk5OTk5JyAgLT4gMi4zNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkCitzdWJ4MTUzIHN1YnRyYWN0ICc5OTk5OTk5OTk5OTk5JyAgJzEyMzQ1Njc4OTAwMDAwJyAtPiAtMi4zNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDkKK3N1YngxNTQgc3VidHJhY3QgJzEyMzQ1Njc4OTAwMDAwJyAnOTk5OTk5OTk5OTk5OScgIC0+IDIuMzQ1Njc4OTBFKzEyIEluZXhhY3QgUm91bmRlZAorc3VieDE1NSBzdWJ0cmFjdCAnOTk5OTk5OTk5OTk5OScgICcxMjM0NTY3ODkwMDAwMCcgLT4gLTIuMzQ1Njc4OTBFKzEyIEluZXhhY3QgUm91bmRlZAorcHJlY2lzaW9uOiAxMgorc3VieDE1NiBzdWJ0cmFjdCAnMTIzNDU2Nzg5MDAwMDAnICc5OTk5OTk5OTk5OTk5JyAgLT4gMi4zNDU2Nzg5MDAwMEUrMTIgSW5leGFjdCBSb3VuZGVkCitzdWJ4MTU3IHN1YnRyYWN0ICc5OTk5OTk5OTk5OTk5JyAgJzEyMzQ1Njc4OTAwMDAwJyAtPiAtMi4zNDU2Nzg5MDAwMEUrMTIgSW5leGFjdCBSb3VuZGVkCitwcmVjaXNpb246IDE1CitzdWJ4MTU4IHN1YnRyYWN0ICcxMjM0NTY3ODkwMDAwMCcgJzk5OTk5OTk5OTk5OTknICAtPiAyMzQ1Njc4OTAwMDAxCitzdWJ4MTU5IHN1YnRyYWN0ICc5OTk5OTk5OTk5OTk5JyAgJzEyMzQ1Njc4OTAwMDAwJyAtPiAtMjM0NTY3ODkwMDAwMQorcHJlY2lzaW9uOiA5CisKKy0tIGFkZGl0aW9uYWwgc2NhbGVkIGFyaXRobWV0aWMgdGVzdHMgWzAuOTcgcHJvYmxlbV0KK3N1YngxNjAgc3VidHJhY3QgJzAnICAgICAnLjEnICAgICAgLT4gJy0wLjEnCitzdWJ4MTYxIHN1YnRyYWN0ICcwMCcgICAgJy45Nzk4MycgIC0+ICctMC45Nzk4MycKK3N1YngxNjIgc3VidHJhY3QgJzAnICAgICAnLjknICAgICAgLT4gJy0wLjknCitzdWJ4MTYzIHN1YnRyYWN0ICcwJyAgICAgJzAuMTAyJyAgIC0+ICctMC4xMDInCitzdWJ4MTY0IHN1YnRyYWN0ICcwJyAgICAgJy40JyAgICAgIC0+ICctMC40Jworc3VieDE2NSBzdWJ0cmFjdCAnMCcgICAgICcuMzA3JyAgICAtPiAnLTAuMzA3Jworc3VieDE2NiBzdWJ0cmFjdCAnMCcgICAgICcuNDM4MjInICAtPiAnLTAuNDM4MjInCitzdWJ4MTY3IHN1YnRyYWN0ICcwJyAgICAgJy45MTEnICAgIC0+ICctMC45MTEnCitzdWJ4MTY4IHN1YnRyYWN0ICcuMCcgICAgJy4wMicgICAgIC0+ICctMC4wMicKK3N1YngxNjkgc3VidHJhY3QgJzAwJyAgICAnLjM5MicgICAgLT4gJy0wLjM5MicKK3N1YngxNzAgc3VidHJhY3QgJzAnICAgICAnLjI2JyAgICAgLT4gJy0wLjI2Jworc3VieDE3MSBzdWJ0cmFjdCAnMCcgICAgICcwLjUxJyAgICAtPiAnLTAuNTEnCitzdWJ4MTcyIHN1YnRyYWN0ICcwJyAgICAgJy4yMjM0JyAgIC0+ICctMC4yMjM0Jworc3VieDE3MyBzdWJ0cmFjdCAnMCcgICAgICcuMicgICAgICAtPiAnLTAuMicKK3N1YngxNzQgc3VidHJhY3QgJy4wJyAgICAnLjAwMDgnICAgLT4gJy0wLjAwMDgnCistLSAwLiBvbiBsZWZ0CitzdWJ4MTgwIHN1YnRyYWN0ICcwLjAnICAgICAnLS4xJyAgICAgIC0+ICcwLjEnCitzdWJ4MTgxIHN1YnRyYWN0ICcwLjAwJyAgICAnLS45Nzk4MycgIC0+ICcwLjk3OTgzJworc3VieDE4MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uOScgICAgICAtPiAnMC45Jworc3VieDE4MyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0wLjEwMicgICAtPiAnMC4xMDInCitzdWJ4MTg0IHN1YnRyYWN0ICcwLjAnICAgICAnLS40JyAgICAgIC0+ICcwLjQnCitzdWJ4MTg1IHN1YnRyYWN0ICcwLjAnICAgICAnLS4zMDcnICAgIC0+ICcwLjMwNycKK3N1YngxODYgc3VidHJhY3QgJzAuMCcgICAgICctLjQzODIyJyAgLT4gJzAuNDM4MjInCitzdWJ4MTg3IHN1YnRyYWN0ICcwLjAnICAgICAnLS45MTEnICAgIC0+ICcwLjkxMScKK3N1YngxODggc3VidHJhY3QgJzAuMCcgICAgICctLjAyJyAgICAgLT4gJzAuMDInCitzdWJ4MTg5IHN1YnRyYWN0ICcwLjAwJyAgICAnLS4zOTInICAgIC0+ICcwLjM5MicKK3N1YngxOTAgc3VidHJhY3QgJzAuMCcgICAgICctLjI2JyAgICAgLT4gJzAuMjYnCitzdWJ4MTkxIHN1YnRyYWN0ICcwLjAnICAgICAnLTAuNTEnICAgIC0+ICcwLjUxJworc3VieDE5MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjIzNCcgICAtPiAnMC4yMjM0Jworc3VieDE5MyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMicgICAgICAtPiAnMC4yJworc3VieDE5NCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMDAwOCcgICAtPiAnMC4wMDA4JworLS0gbmVnYXRpdmVzIG9mIHNhbWUKK3N1YngyMDAgc3VidHJhY3QgJzAnICAgICAnLS4xJyAgICAgIC0+ICcwLjEnCitzdWJ4MjAxIHN1YnRyYWN0ICcwMCcgICAgJy0uOTc5ODMnICAtPiAnMC45Nzk4MycKK3N1YngyMDIgc3VidHJhY3QgJzAnICAgICAnLS45JyAgICAgIC0+ICcwLjknCitzdWJ4MjAzIHN1YnRyYWN0ICcwJyAgICAgJy0wLjEwMicgICAtPiAnMC4xMDInCitzdWJ4MjA0IHN1YnRyYWN0ICcwJyAgICAgJy0uNCcgICAgICAtPiAnMC40Jworc3VieDIwNSBzdWJ0cmFjdCAnMCcgICAgICctLjMwNycgICAgLT4gJzAuMzA3Jworc3VieDIwNiBzdWJ0cmFjdCAnMCcgICAgICctLjQzODIyJyAgLT4gJzAuNDM4MjInCitzdWJ4MjA3IHN1YnRyYWN0ICcwJyAgICAgJy0uOTExJyAgICAtPiAnMC45MTEnCitzdWJ4MjA4IHN1YnRyYWN0ICcuMCcgICAgJy0uMDInICAgICAtPiAnMC4wMicKK3N1YngyMDkgc3VidHJhY3QgJzAwJyAgICAnLS4zOTInICAgIC0+ICcwLjM5MicKK3N1YngyMTAgc3VidHJhY3QgJzAnICAgICAnLS4yNicgICAgIC0+ICcwLjI2Jworc3VieDIxMSBzdWJ0cmFjdCAnMCcgICAgICctMC41MScgICAgLT4gJzAuNTEnCitzdWJ4MjEyIHN1YnRyYWN0ICcwJyAgICAgJy0uMjIzNCcgICAtPiAnMC4yMjM0Jworc3VieDIxMyBzdWJ0cmFjdCAnMCcgICAgICctLjInICAgICAgLT4gJzAuMicKK3N1YngyMTQgc3VidHJhY3QgJy4wJyAgICAnLS4wMDA4JyAgIC0+ICcwLjAwMDgnCisKKy0tIG1vcmUgZml4ZWQsIExIUyBzd2FwcyBbcmVhbGx5IHRoZSBzYW1lIGFzIHRlc3RjYXNlcyB1bmRlciBhZGRdCitzdWJ4MjIwIHN1YnRyYWN0ICctNTYyNjdFLTEyJyAwICAtPiAnLTUuNjI2N0UtOCcKK3N1YngyMjEgc3VidHJhY3QgJy01NjI2N0UtMTEnIDAgIC0+ICctNS42MjY3RS03Jworc3VieDIyMiBzdWJ0cmFjdCAnLTU2MjY3RS0xMCcgMCAgLT4gJy0wLjAwMDAwNTYyNjcnCitzdWJ4MjIzIHN1YnRyYWN0ICctNTYyNjdFLTknICAwICAtPiAnLTAuMDAwMDU2MjY3Jworc3VieDIyNCBzdWJ0cmFjdCAnLTU2MjY3RS04JyAgMCAgLT4gJy0wLjAwMDU2MjY3Jworc3VieDIyNSBzdWJ0cmFjdCAnLTU2MjY3RS03JyAgMCAgLT4gJy0wLjAwNTYyNjcnCitzdWJ4MjI2IHN1YnRyYWN0ICctNTYyNjdFLTYnICAwICAtPiAnLTAuMDU2MjY3Jworc3VieDIyNyBzdWJ0cmFjdCAnLTU2MjY3RS01JyAgMCAgLT4gJy0wLjU2MjY3Jworc3VieDIyOCBzdWJ0cmFjdCAnLTU2MjY3RS0yJyAgMCAgLT4gJy01NjIuNjcnCitzdWJ4MjI5IHN1YnRyYWN0ICctNTYyNjdFLTEnICAwICAtPiAnLTU2MjYuNycKK3N1YngyMzAgc3VidHJhY3QgJy01NjI2N0UtMCcgIDAgIC0+ICctNTYyNjcnCistLSBzeW1tZXRyeSAuLi4KK3N1YngyNDAgc3VidHJhY3QgMCAnLTU2MjY3RS0xMicgIC0+ICc1LjYyNjdFLTgnCitzdWJ4MjQxIHN1YnRyYWN0IDAgJy01NjI2N0UtMTEnICAtPiAnNS42MjY3RS03Jworc3VieDI0MiBzdWJ0cmFjdCAwICctNTYyNjdFLTEwJyAgLT4gJzAuMDAwMDA1NjI2NycKK3N1YngyNDMgc3VidHJhY3QgMCAnLTU2MjY3RS05JyAgIC0+ICcwLjAwMDA1NjI2NycKK3N1YngyNDQgc3VidHJhY3QgMCAnLTU2MjY3RS04JyAgIC0+ICcwLjAwMDU2MjY3Jworc3VieDI0NSBzdWJ0cmFjdCAwICctNTYyNjdFLTcnICAgLT4gJzAuMDA1NjI2NycKK3N1YngyNDYgc3VidHJhY3QgMCAnLTU2MjY3RS02JyAgIC0+ICcwLjA1NjI2NycKK3N1YngyNDcgc3VidHJhY3QgMCAnLTU2MjY3RS01JyAgIC0+ICcwLjU2MjY3Jworc3VieDI0OCBzdWJ0cmFjdCAwICctNTYyNjdFLTInICAgLT4gJzU2Mi42NycKK3N1YngyNDkgc3VidHJhY3QgMCAnLTU2MjY3RS0xJyAgIC0+ICc1NjI2LjcnCitzdWJ4MjUwIHN1YnRyYWN0IDAgJy01NjI2N0UtMCcgICAtPiAnNTYyNjcnCisKKy0tIG5vdyBzb21lIG1vcmUgZnJvbSB0aGUgJ25ldycgYWRkCitwcmVjaXNpb246IDkKK3N1YngzMDEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzAuMjM0NTY3ODknCitzdWJ4MzAyIHN1YnRyYWN0ICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcwLjIzNDU2Nzc4JworCitzdWJ4MzExIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1JyAtPiAnLTAuMTExMTExMTExJyBJbmV4YWN0IFJvdW5kZWQKK3N1YngzMTIgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0MCcgICcwLjU1NTU1NTU1NTUnIC0+ICctMC4xMTExMTExMTInIEluZXhhY3QgUm91bmRlZAorc3VieDMxMyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1MCcgLT4gJy0wLjExMTExMTExMScgSW5leGFjdCBSb3VuZGVkCitzdWJ4MzE0IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ5JyAgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKK3N1YngzMTUgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDk5JyAgICcwJyAtPiAnMC40NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAorc3VieDMxNiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0OTk5JyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4MzE3IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDUwMDAnICAnMCcgLT4gJzAuNDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKK3N1YngzMTggc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NTAwMScgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAorc3VieDMxOSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ1MDEnICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCitzdWJ4MzIwIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDUxJyAgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKKworLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCitzdWJ4MzIxIHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4Jworc3VieDMyMiBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5NycKK3N1YngzMjMgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcwLjk5OTYnCitzdWJ4MzI0IHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMC45OTk1Jworc3VieDMyNSBzdWJ0cmFjdCAnMC45OTk4JyAgJy0wLjAwMDAnIC0+ICcwLjk5OTgnCitzdWJ4MzI2IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMScgLT4gJzAuOTk5OScKK3N1YngzMjcgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAyJyAtPiAnMS4wMDAwJworc3VieDMyOCBzdWJ0cmFjdCAnMC45OTk4JyAgJy0wLjAwMDMnIC0+ICcxLjAwMDEnCisKK3N1YngzMzAgc3VidHJhY3QgJzcwJyAgJzEwMDAwZSs5JyAtPiAnLTEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK3N1YngzMzEgc3VidHJhY3QgJzcwMCcgICcxMDAwMGUrOScgLT4gJy0xLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitzdWJ4MzMyIHN1YnRyYWN0ICc3MDAwJyAgJzEwMDAwZSs5JyAtPiAnLTkuOTk5OTk5OTlFKzEyJyBJbmV4YWN0IFJvdW5kZWQKK3N1YngzMzMgc3VidHJhY3QgJzcwMDAwJyAgJzEwMDAwZSs5JyAtPiAnLTkuOTk5OTk5OTNFKzEyJyBSb3VuZGVkCitzdWJ4MzM0IHN1YnRyYWN0ICc3MDAwMDAnICAnMTAwMDBlKzknIC0+ICctOS45OTk5OTkzMEUrMTInIFJvdW5kZWQKK3N1YngzMzUgc3VidHJhY3QgJzcwMDAwMDAnICAnMTAwMDBlKzknIC0+ICctOS45OTk5OTMwMEUrMTInIFJvdW5kZWQKKy0tIHN5bW1ldHJ5Ogorc3VieDM0MCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAnIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitzdWJ4MzQxIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAnIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCitzdWJ4MzQyIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwJyAtPiAnOS45OTk5OTk5OUUrMTInIEluZXhhY3QgUm91bmRlZAorc3VieDM0MyBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICc5Ljk5OTk5OTkzRSsxMicgUm91bmRlZAorc3VieDM0NCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnOS45OTk5OTkzMEUrMTInIFJvdW5kZWQKK3N1YngzNDUgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAwMDAnIC0+ICc5Ljk5OTk5MzAwRSsxMicgUm91bmRlZAorCistLSBzYW1lLCBoaWdoZXIgcHJlY2lzaW9uCitwcmVjaXNpb246IDE1CitzdWJ4MzQ2IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3JyAgIC0+ICc5OTk5OTk5OTk5OTkzJworc3VieDM0NyBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAnICAgLT4gJzk5OTk5OTk5OTk5MzAnCitzdWJ4MzQ4IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAnICAgLT4gJzk5OTk5OTk5OTkzMDAnCitzdWJ4MzQ5IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwJyAgIC0+ICc5OTk5OTk5OTkzMDAwJworc3VieDM1MCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAnICAgLT4gJzk5OTk5OTk5MzAwMDAnCitzdWJ4MzUxIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwMDAnICAgLT4gJzk5OTk5OTkzMDAwMDAnCitzdWJ4MzUyIHN1YnRyYWN0ICc3JyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTk5OTkzJworc3VieDM1MyBzdWJ0cmFjdCAnNzAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5MzAnCitzdWJ4MzU0IHN1YnRyYWN0ICc3MDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTkzMDAnCitzdWJ4MzU1IHN1YnRyYWN0ICc3MDAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTkzMDAwJworc3VieDM1NiBzdWJ0cmFjdCAnNzAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5MzAwMDAnCitzdWJ4MzU3IHN1YnRyYWN0ICc3MDAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTkzMDAwMDAnCisKKy0tIHplcm8gcHJlc2VydmF0aW9uCitwcmVjaXNpb246IDYKK3N1YngzNjAgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMS4wMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAorc3VieDM2MSBzdWJ0cmFjdCAxICcwLjAwMDEnIC0+ICcwLjk5OTknCitzdWJ4MzYyIHN1YnRyYWN0IDEgJzAuMDAwMDEnIC0+ICcwLjk5OTk5Jworc3VieDM2MyBzdWJ0cmFjdCAxICcwLjAwMDAwMScgLT4gJzAuOTk5OTk5Jworc3VieDM2NCBzdWJ0cmFjdCAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK3N1YngzNjUgc3VidHJhY3QgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAnIEluZXhhY3QgUm91bmRlZAorCistLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCitzdWJ4MzcwIHN1YnRyYWN0IDEgIDAgIC0+IDEKK3N1YngzNzEgc3VidHJhY3QgMSAwLiAgLT4gMQorc3VieDM3MiBzdWJ0cmFjdCAxICAuMCAtPiAxLjAKK3N1YngzNzMgc3VidHJhY3QgMSAwLjAgLT4gMS4wCitzdWJ4Mzc0IHN1YnRyYWN0ICAwICAxIC0+IC0xCitzdWJ4Mzc1IHN1YnRyYWN0IDAuICAxIC0+IC0xCitzdWJ4Mzc2IHN1YnRyYWN0ICAuMCAxIC0+IC0xLjAKK3N1YngzNzcgc3VidHJhY3QgMC4wIDEgLT4gLTEuMAorCitwcmVjaXNpb246IDkKKworLS0gbGVhZGluZyAwIGRpZ2l0IGJlZm9yZSByb3VuZAorc3VieDkxMCBzdWJ0cmFjdCAtMTAzNTE5MzYyIC01MTg5Nzk1NS4zIC0+IC01MTYyMTQwNi43CitzdWJ4OTExIHN1YnRyYWN0IDE1OTU3OS40NDQgODk4MjcuNTIyOSAtPiA2OTc1MS45MjExCisKK3N1Yng5MjAgc3VidHJhY3QgMzMzLjEyMzQ1NiAzMy4xMjM0NTY2IC0+IDI5OS45OTk5OTkgSW5leGFjdCBSb3VuZGVkCitzdWJ4OTIxIHN1YnRyYWN0IDMzMy4xMjM0NTYgMzMuMTIzNDU2NSAtPiAzMDAuMDAwMDAwIEluZXhhY3QgUm91bmRlZAorc3VieDkyMiBzdWJ0cmFjdCAxMzMuMTIzNDU2IDMzLjEyMzQ1NjUgLT4gIDk5Ljk5OTk5OTUKK3N1Yng5MjMgc3VidHJhY3QgMTMzLjEyMzQ1NiAzMy4xMjM0NTY0IC0+ICA5OS45OTk5OTk2CitzdWJ4OTI0IHN1YnRyYWN0IDEzMy4xMjM0NTYgMzMuMTIzNDU0MCAtPiAxMDAuMDAwMDAyIFJvdW5kZWQKK3N1Yng5MjUgc3VidHJhY3QgMTMzLjEyMzQ1NiA0My4xMjM0NTYwIC0+ICA5MC4wMDAwMDAwCitzdWJ4OTI2IHN1YnRyYWN0IDEzMy4xMjM0NTYgNDMuMTIzNDU2MSAtPiAgODkuOTk5OTk5OQorc3VieDkyNyBzdWJ0cmFjdCAxMzMuMTIzNDU2IDQzLjEyMzQ1NjYgLT4gIDg5Ljk5OTk5OTQKK3N1Yng5Mjggc3VidHJhY3QgMTAxLjEyMzQ1NiA5MS4xMjM0NTY2IC0+ICAgOS45OTk5OTk0CitzdWJ4OTI5IHN1YnRyYWN0IDEwMS4xMjM0NTYgOTkuMTIzNDU2NiAtPiAgIDEuOTk5OTk5NAorCistLSBtb3JlIG9mIHRoZSBzYW1lOyBwcm9iZSBmb3IgY2x1c3RlciBib3VuZGFyeSBwcm9ibGVtcworcHJlY2lzaW9uOiAxCitzdWJ4OTMwIHN1YnRyYWN0ICAxMSAyICAgICAgICAgICAtPiA5CitwcmVjaXNpb246IDIKK3N1Yng5MzIgc3VidHJhY3QgMTAxIDIgICAgICAgICAgIC0+IDk5CitwcmVjaXNpb246IDMKK3N1Yng5MzQgc3VidHJhY3QgMTAxIDIuMSAgICAgICAgIC0+IDk4LjkKK3N1Yng5MzUgc3VidHJhY3QgMTAxIDkyLjAxICAgICAgIC0+ICA4Ljk5CitwcmVjaXNpb246IDQKK3N1Yng5MzYgc3VidHJhY3QgMTAxIDIuMDEgICAgICAgIC0+IDk4Ljk5CitzdWJ4OTM3IHN1YnRyYWN0IDEwMSA5Mi4wMSAgICAgICAtPiAgOC45OQorc3VieDkzOCBzdWJ0cmFjdCAxMDEgOTIuMDA2ICAgICAgLT4gIDguOTk0CitwcmVjaXNpb246IDUKK3N1Yng5Mzkgc3VidHJhY3QgMTAxIDIuMDAxICAgICAgIC0+IDk4Ljk5OQorc3VieDk0MCBzdWJ0cmFjdCAxMDEgOTIuMDAxICAgICAgLT4gIDguOTk5CitzdWJ4OTQxIHN1YnRyYWN0IDEwMSA5Mi4wMDA2ICAgICAtPiAgOC45OTk0CitwcmVjaXNpb246IDYKK3N1Yng5NDIgc3VidHJhY3QgMTAxIDIuMDAwMSAgICAgIC0+IDk4Ljk5OTkKK3N1Yng5NDMgc3VidHJhY3QgMTAxIDkyLjAwMDEgICAgIC0+ICA4Ljk5OTkKK3N1Yng5NDQgc3VidHJhY3QgMTAxIDkyLjAwMDA2ICAgIC0+ICA4Ljk5OTk0CitwcmVjaXNpb246IDcKK3N1Yng5NDUgc3VidHJhY3QgMTAxIDIuMDAwMDEgICAgIC0+IDk4Ljk5OTk5CitzdWJ4OTQ2IHN1YnRyYWN0IDEwMSA5Mi4wMDAwMSAgICAtPiAgOC45OTk5OQorc3VieDk0NyBzdWJ0cmFjdCAxMDEgOTIuMDAwMDA2ICAgLT4gIDguOTk5OTk0CitwcmVjaXNpb246IDgKK3N1Yng5NDggc3VidHJhY3QgMTAxIDIuMDAwMDAxICAgIC0+IDk4Ljk5OTk5OQorc3VieDk0OSBzdWJ0cmFjdCAxMDEgOTIuMDAwMDAxICAgLT4gIDguOTk5OTk5CitzdWJ4OTUwIHN1YnRyYWN0IDEwMSA5Mi4wMDAwMDA2ICAtPiAgOC45OTk5OTk0CitwcmVjaXNpb246IDkKK3N1Yng5NTEgc3VidHJhY3QgMTAxIDIuMDAwMDAwMSAgIC0+IDk4Ljk5OTk5OTkKK3N1Yng5NTIgc3VidHJhY3QgMTAxIDkyLjAwMDAwMDEgIC0+ICA4Ljk5OTk5OTkKK3N1Yng5NTMgc3VidHJhY3QgMTAxIDkyLjAwMDAwMDA2IC0+ICA4Ljk5OTk5OTk0CisKK3ByZWNpc2lvbjogOQorCistLSBtb3JlIExIUyBzd2FwcyBbd2VyZSBmaXhlZF0KK3N1YngzOTAgc3VidHJhY3QgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnCitzdWJ4MzkxIHN1YnRyYWN0ICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCitzdWJ4MzkyIHN1YnRyYWN0ICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKK3N1YngzOTMgc3VidHJhY3QgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnCitzdWJ4Mzk0IHN1YnRyYWN0ICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3Jworc3VieDM5NSBzdWJ0cmFjdCAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKK3N1YngzOTYgc3VidHJhY3QgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnCitzdWJ4Mzk3IHN1YnRyYWN0ICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCitzdWJ4Mzk4IHN1YnRyYWN0ICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCitzdWJ4Mzk5IHN1YnRyYWN0ICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycKK3N1Yng0MDAgc3VidHJhY3QgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKK3N1Yng0MDEgc3VidHJhY3QgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1Jworc3VieDQwMiBzdWJ0cmFjdCAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScKK3N1Yng0MDMgc3VidHJhY3QgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCitzdWJ4NDA0IHN1YnRyYWN0ICctNUUwJyAgICAgICAgIDAgLT4gICctNScKK3N1Yng0MDUgc3VidHJhY3QgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcKK3N1Yng0MDYgc3VidHJhY3QgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCitzdWJ4NDA3IHN1YnRyYWN0ICctNUU4JyAgICAgICAgIDAgLT4gICctNTAwMDAwMDAwJworc3VieDQwOCBzdWJ0cmFjdCAnLTVFOScgICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzknICAgUm91bmRlZAorc3VieDQwOSBzdWJ0cmFjdCAnLTVFMTAnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzEwJyAgUm91bmRlZAorc3VieDQxMCBzdWJ0cmFjdCAnLTVFMTEnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzExJyAgUm91bmRlZAorc3VieDQxMSBzdWJ0cmFjdCAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzEwMCcgUm91bmRlZAorCistLSBtb3JlIFJIUyBzd2FwcyBbd2VyZSBmaXhlZF0KK3N1Yng0MjAgc3VidHJhY3QgMCAgJy01NjI2N0UtMTAnIC0+ICAnMC4wMDAwMDU2MjY3Jworc3VieDQyMSBzdWJ0cmFjdCAwICAnLTU2MjY3RS02JyAgLT4gICcwLjA1NjI2NycKK3N1Yng0MjIgc3VidHJhY3QgMCAgJy01NjI2N0UtNScgIC0+ICAnMC41NjI2NycKK3N1Yng0MjMgc3VidHJhY3QgMCAgJy01NjI2N0UtNCcgIC0+ICAnNS42MjY3Jworc3VieDQyNCBzdWJ0cmFjdCAwICAnLTU2MjY3RS0zJyAgLT4gICc1Ni4yNjcnCitzdWJ4NDI1IHN1YnRyYWN0IDAgICctNTYyNjdFLTInICAtPiAgJzU2Mi42NycKK3N1Yng0MjYgc3VidHJhY3QgMCAgJy01NjI2N0UtMScgIC0+ICAnNTYyNi43Jworc3VieDQyNyBzdWJ0cmFjdCAwICAnLTU2MjY3RS0wJyAgLT4gICc1NjI2NycKK3N1Yng0Mjggc3VidHJhY3QgMCAgJy01RS0xMCcgICAgIC0+ICAnNUUtMTAnCitzdWJ4NDI5IHN1YnRyYWN0IDAgICctNUUtNycgICAgICAtPiAgJzVFLTcnCitzdWJ4NDMwIHN1YnRyYWN0IDAgICctNUUtNicgICAgICAtPiAgJzAuMDAwMDA1Jworc3VieDQzMSBzdWJ0cmFjdCAwICAnLTVFLTUnICAgICAgLT4gICcwLjAwMDA1Jworc3VieDQzMiBzdWJ0cmFjdCAwICAnLTVFLTQnICAgICAgLT4gICcwLjAwMDUnCitzdWJ4NDMzIHN1YnRyYWN0IDAgICctNUUtMScgICAgICAtPiAgJzAuNScKK3N1Yng0MzQgc3VidHJhY3QgMCAgJy01RTAnICAgICAgIC0+ICAnNScKK3N1Yng0MzUgc3VidHJhY3QgMCAgJy01RTEnICAgICAgIC0+ICAnNTAnCitzdWJ4NDM2IHN1YnRyYWN0IDAgICctNUU1JyAgICAgICAtPiAgJzUwMDAwMCcKK3N1Yng0Mzcgc3VidHJhY3QgMCAgJy01RTgnICAgICAgIC0+ICAnNTAwMDAwMDAwJworc3VieDQzOCBzdWJ0cmFjdCAwICAnLTVFOScgICAgICAgLT4gICc1LjAwMDAwMDAwRSs5JyAgICBSb3VuZGVkCitzdWJ4NDM5IHN1YnRyYWN0IDAgICctNUUxMCcgICAgICAtPiAgJzUuMDAwMDAwMDBFKzEwJyAgIFJvdW5kZWQKK3N1Yng0NDAgc3VidHJhY3QgMCAgJy01RTExJyAgICAgIC0+ICAnNS4wMDAwMDAwMEUrMTEnICAgUm91bmRlZAorc3VieDQ0MSBzdWJ0cmFjdCAwICAnLTVFMTAwJyAgICAgLT4gICc1LjAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCisKKworLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KK3ByZWNpc2lvbjogMTUKK3N1Yng0NjEgc3VidHJhY3QgJzFFKzEyJyAnMScgICAgICAgLT4gJzk5OTk5OTk5OTk5OScKK3N1Yng0NjIgc3VidHJhY3QgJzFFKzEyJyAnLTEuMTEnICAgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCitzdWJ4NDYzIHN1YnRyYWN0ICcxLjExJyAgJy0xRSsxMicgIC0+ICcxMDAwMDAwMDAwMDAxLjExJworc3VieDQ2NCBzdWJ0cmFjdCAnLTEnICAgICctMUUrMTInICAtPiAnOTk5OTk5OTk5OTk5Jworc3VieDQ2NSBzdWJ0cmFjdCAnN0UrMTInICcxJyAgICAgICAtPiAnNjk5OTk5OTk5OTk5OScKK3N1Yng0NjYgc3VidHJhY3QgJzdFKzEyJyAnLTEuMTEnICAgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCitzdWJ4NDY3IHN1YnRyYWN0ICcxLjExJyAgJy03RSsxMicgIC0+ICc3MDAwMDAwMDAwMDAxLjExJworc3VieDQ2OCBzdWJ0cmFjdCAnLTEnICAgICctN0UrMTInICAtPiAnNjk5OTk5OTk5OTk5OScKKworLS0gICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NSAgICAgICAxMjM0NTY3ODkwMTIzNDUgICAgICAxIDIzNDU2Nzg5MDEyMzQ1CitzdWJ4NDcwIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NjMnIC0+ICcxLjAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng0NzEgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU2MicgLT4gJzEuMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAorc3VieDQ3MiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTYxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NDczIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NjAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng0NzQgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1OScgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAorc3VieDQ3NSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU4JyAtPiAnMS4wMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NDc2IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTcnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng0Nzcgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NicgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKK3N1Yng0Nzggc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5Jworc3VieDQ3OSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU0JyAtPiAnMC45OTk5OTk5OTk5OTk5OTgnCitzdWJ4NDgwIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTMnIC0+ICcwLjk5OTk5OTk5OTk5OTk5NycKK3N1Yng0ODEgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1MicgLT4gJzAuOTk5OTk5OTk5OTk5OTk2Jworc3VieDQ4MiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTUxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTUnCitzdWJ4NDgzIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5NCcKKworLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncworcHJlY2lzaW9uOiA5Cityb3VuZGluZzogaGFsZl91cAorc3VieDUwMCBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTY3ODknCitzdWJ4NTAxIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTAyIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTAzIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTA0IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTA1IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTA2IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTA3IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTA4IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTA5IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTEwIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTExIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTEyIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTEzIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTE0IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTE1IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTE2IHN1YnRyYWN0ICcxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1Njc4OCcKK3N1Yng1MTcgc3VidHJhY3QgJzEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MTggc3VidHJhY3QgJzEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1MTkgc3VidHJhY3QgJzEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorc3VieDUyMCBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTY3ODknCitzdWJ4NTIxIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTIyIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTIzIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTI0IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTI1IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTI2IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTI3IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTI4IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTI5IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTMwIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTMxIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTMyIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTMzIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTM0IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTM1IHN1YnRyYWN0ICcxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTM2IHN1YnRyYWN0ICcxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1Njc4OCcKK3N1Yng1Mzcgc3VidHJhY3QgJzEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1Mzggc3VidHJhY3QgJzEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1Mzkgc3VidHJhY3QgJzEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCitzdWJ4NTQwIHN1YnRyYWN0ICcxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTQxIHN1YnRyYWN0ICcxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NTQyIHN1YnRyYWN0ICcxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiBkb3duCitzdWJ4NTUwIHN1YnRyYWN0ICcxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScKK3N1Yng1NTEgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NTIgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NTMgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NTQgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NTUgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NTYgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NTcgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NTggc3VidHJhY3QgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NTkgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NjAgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NjEgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NjIgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NjMgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NjQgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NjUgc3VidHJhY3QgJzEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng1NjYgc3VidHJhY3QgJzEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg4Jworc3VieDU2NyBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorc3VieDU2OCBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorc3VieDU2OSBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorCistLSBzeW1tZXRyeS4uLgorcm91bmRpbmc6IGhhbGZfdXAKK3N1Yng2MDAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OScKK3N1Yng2MDEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjAyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorc3VieDYwMyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MDQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjA1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorc3VieDYwNiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MDcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjA4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorc3VieDYwOSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MTAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjExIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDYxMiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MTMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjE0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDYxNSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MTYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcKK3N1Yng2MTcgc3VidHJhY3QgMS4wMDAwMDAwMDEgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjE4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDYxOSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGhhbGZfZXZlbgorc3VieDYyMCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg5Jworc3VieDYyMSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MjIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjIzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorc3VieDYyNCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MjUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjI2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAorc3VieDYyNyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2Mjggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjI5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDYzMCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MzEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjMyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDYzMyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2MzQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjM1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDYzNiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4Jworc3VieDYzNyBzdWJ0cmFjdCAxLjAwMDAwMDAxICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2Mzggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjM5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KK3N1Yng2NDAgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzNDU2Nzg4JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjQxIHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzQ1Njc4OCcgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDY0MiBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjM0NTY3ODgnIC0+ICctMTIzNDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6IGRvd24KK3N1Yng2NTAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OScKK3N1Yng2NTEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjUyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDY1MyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2NTQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjU1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDY1NiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2NTcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjU4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDY1OSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2NjAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjYxIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDY2MiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2NjMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjY0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAorc3VieDY2NSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng2NjYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4OCcKK3N1Yng2Njcgc3VidHJhY3QgMS4wMDAwMDAwMSAgICAnMTIzNDU2Nzg5JyAtPiAnLTEyMzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCitzdWJ4NjY4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzQ1Njc4OScgLT4gJy0xMjM0NTY3ODcnIEluZXhhY3QgUm91bmRlZAorc3VieDY2OSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjM0NTY3ODknIC0+ICctMTIzNDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKKworCistLSBsb3RzIG9mIGxlYWRpbmcgemVyb3MgaW4gaW50ZXJtZWRpYXRlIHJlc3VsdCwgYW5kIHNob3dpbmcgZWZmZWN0cyBvZgorLS0gaW5wdXQgcm91bmRpbmcgd291bGQgaGF2ZSBhZmZlY3RlZCB0aGUgZm9sbG93aW5nCitwcmVjaXNpb246IDkKK3JvdW5kaW5nOiBoYWxmX3VwCitzdWJ4NjcwIHN1YnRyYWN0ICcxMjM0NTY3ODknICcxMjM0NTY3ODguMScgLT4gMC45CitzdWJ4NjcxIHN1YnRyYWN0ICcxMjM0NTY3ODknICcxMjM0NTY3ODguOScgLT4gMC4xCitzdWJ4NjcyIHN1YnRyYWN0ICcxMjM0NTY3ODknICcxMjM0NTY3ODkuMScgLT4gLTAuMQorc3VieDY3MyBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAnMTIzNDU2Nzg5LjUnIC0+IC0wLjUKK3N1Yng2NzQgc3VidHJhY3QgJzEyMzQ1Njc4OScgJzEyMzQ1Njc4OS45JyAtPiAtMC45CisKK3JvdW5kaW5nOiBoYWxmX2V2ZW4KK3N1Yng2ODAgc3VidHJhY3QgJzEyMzQ1Njc4OScgJzEyMzQ1Njc4OC4xJyAtPiAwLjkKK3N1Yng2ODEgc3VidHJhY3QgJzEyMzQ1Njc4OScgJzEyMzQ1Njc4OC45JyAtPiAwLjEKK3N1Yng2ODIgc3VidHJhY3QgJzEyMzQ1Njc4OScgJzEyMzQ1Njc4OS4xJyAtPiAtMC4xCitzdWJ4NjgzIHN1YnRyYWN0ICcxMjM0NTY3ODknICcxMjM0NTY3ODkuNScgLT4gLTAuNQorc3VieDY4NCBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAnMTIzNDU2Nzg5LjknIC0+IC0wLjkKKworc3VieDY4NSBzdWJ0cmFjdCAnMTIzNDU2Nzg4JyAnMTIzNDU2Nzg3LjEnIC0+IDAuOQorc3VieDY4NiBzdWJ0cmFjdCAnMTIzNDU2Nzg4JyAnMTIzNDU2Nzg3LjknIC0+IDAuMQorc3VieDY4NyBzdWJ0cmFjdCAnMTIzNDU2Nzg4JyAnMTIzNDU2Nzg4LjEnIC0+IC0wLjEKK3N1Yng2ODggc3VidHJhY3QgJzEyMzQ1Njc4OCcgJzEyMzQ1Njc4OC41JyAtPiAtMC41CitzdWJ4Njg5IHN1YnRyYWN0ICcxMjM0NTY3ODgnICcxMjM0NTY3ODguOScgLT4gLTAuOQorCityb3VuZGluZzogZG93bgorc3VieDY5MCBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAnMTIzNDU2Nzg4LjEnIC0+IDAuOQorc3VieDY5MSBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAnMTIzNDU2Nzg4LjknIC0+IDAuMQorc3VieDY5MiBzdWJ0cmFjdCAnMTIzNDU2Nzg5JyAnMTIzNDU2Nzg5LjEnIC0+IC0wLjEKK3N1Yng2OTMgc3VidHJhY3QgJzEyMzQ1Njc4OScgJzEyMzQ1Njc4OS41JyAtPiAtMC41CitzdWJ4Njk0IHN1YnRyYWN0ICcxMjM0NTY3ODknICcxMjM0NTY3ODkuOScgLT4gLTAuOQorCistLSBpbnB1dCBwcmVwYXJhdGlvbiB0ZXN0cworcm91bmRpbmc6IGhhbGZfdXAKK3ByZWNpc2lvbjogMworCitzdWJ4NzAwIHN1YnRyYWN0ICcxMjM0NTY3ODkwMDAwMCcgIC05OTk5OTk5OTk5OTk5IC0+ICAnMi4yM0UrMTMnIEluZXhhY3QgUm91bmRlZAorc3VieDcwMSBzdWJ0cmFjdCAgJzk5OTk5OTk5OTk5OTknIC0xMjM0NTY3ODkwMDAwMCAtPiAgJzIuMjNFKzEzJyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng3MDIgc3VidHJhY3QgJzEyRSszJyAgJy0zNDU2JyAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAorc3VieDcwMyBzdWJ0cmFjdCAnMTJFKzMnICAnLTM0NDYnIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NzA0IHN1YnRyYWN0ICcxMkUrMycgICctMzQ1NCcgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng3MDUgc3VidHJhY3QgJzEyRSszJyAgJy0zNDQ0JyAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorCitzdWJ4NzA2IHN1YnRyYWN0ICczNDU2JyAgJy0xMkUrMycgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng3MDcgc3VidHJhY3QgJzM0NDYnICAnLTEyRSszJyAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAorc3VieDcwOCBzdWJ0cmFjdCAnMzQ1NCcgICctMTJFKzMnIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCitzdWJ4NzA5IHN1YnRyYWN0ICczNDQ0JyAgJy0xMkUrMycgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKKworLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbc3Vibm9ybWFscyBub3cgcG9zc2libGVdCittYXhleHBvbmVudDogOTk5OTk5OTk5CittaW5leHBvbmVudDogLTk5OTk5OTk5OQorcHJlY2lzaW9uOiA5Cityb3VuZGluZzogZG93bgorc3VieDcxMCBzdWJ0cmFjdCAxRSs5OTk5OTk5OTkgICAgLTlFKzk5OTk5OTk5OSAgIC0+IDkuOTk5OTk5OTlFKzk5OTk5OTk5OSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng3MTEgc3VidHJhY3QgOUUrOTk5OTk5OTk5ICAgIC0xRSs5OTk5OTk5OTkgICAtPiA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCityb3VuZGluZzogaGFsZl91cAorc3VieDcxMiBzdWJ0cmFjdCAxRSs5OTk5OTk5OTkgICAgLTlFKzk5OTk5OTk5OSAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorc3VieDcxMyBzdWJ0cmFjdCA5RSs5OTk5OTk5OTkgICAgLTFFKzk5OTk5OTk5OSAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAorc3VieDcxNCBzdWJ0cmFjdCAtMS4xRS05OTk5OTk5OTkgLTFFLTk5OTk5OTk5OSAgIC0+IC0xRS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorc3VieDcxNSBzdWJ0cmFjdCAxRS05OTk5OTk5OTkgICAgKzEuMWUtOTk5OTk5OTk5IC0+IC0xRS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorc3VieDcxNiBzdWJ0cmFjdCAtMUUrOTk5OTk5OTk5ICAgKzlFKzk5OTk5OTk5OSAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKK3N1Yng3MTcgc3VidHJhY3QgLTlFKzk5OTk5OTk5OSAgICsxRSs5OTk5OTk5OTkgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCitzdWJ4NzE4IHN1YnRyYWN0ICsxLjFFLTk5OTk5OTk5OSArMUUtOTk5OTk5OTk5ICAgLT4gMUUtMTAwMDAwMDAwMCBTdWJub3JtYWwKK3N1Yng3MTkgc3VidHJhY3QgLTFFLTk5OTk5OTk5OSAgIC0xLjFlLTk5OTk5OTk5OSAtPiAxRS0xMDAwMDAwMDAwIFN1Ym5vcm1hbAorCitwcmVjaXNpb246IDMKK3N1Yng3MjAgc3VidHJhY3QgMSAgOS45OTlFKzk5OTk5OTk5OSAgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3N1Yng3MjEgc3VidHJhY3QgMSAtOS45OTlFKzk5OTk5OTk5OSAgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3N1Yng3MjIgc3VidHJhY3QgICAgOS45OTlFKzk5OTk5OTk5OSAxIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3N1Yng3MjMgc3VidHJhY3QgICAtOS45OTlFKzk5OTk5OTk5OSAxIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3N1Yng3MjQgc3VidHJhY3QgMSAgOS45OTlFKzk5OTk5OTk5OSAgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3N1Yng3MjUgc3VidHJhY3QgMSAtOS45OTlFKzk5OTk5OTk5OSAgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3N1Yng3MjYgc3VidHJhY3QgICAgOS45OTlFKzk5OTk5OTk5OSAxIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKK3N1Yng3Mjcgc3VidHJhY3QgICAtOS45OTlFKzk5OTk5OTk5OSAxIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKKworLS0gW21vcmUgYmVsb3ddCisKKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MKK21heGV4cG9uZW50OiA5OTkKK21pbmV4cG9uZW50OiAtOTk5CitwcmVjaXNpb246IDkKK3N1YjczMSBzdWJ0cmFjdCAxMjM0NTY3ODAwMCAwIC0+ICAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkCitzdWI3MzIgc3VidHJhY3QgMCAxMjM0NTY3ODAwMCAtPiAtMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAorc3ViNzMzIHN1YnRyYWN0IDEyMzQ1Njc4MDAgIDAgLT4gIDEuMjM0NTY3ODBFKzkgUm91bmRlZAorc3ViNzM0IHN1YnRyYWN0IDAgMTIzNDU2NzgwMCAgLT4gLTEuMjM0NTY3ODBFKzkgUm91bmRlZAorc3ViNzM1IHN1YnRyYWN0IDEyMzQ1Njc4OTAgIDAgLT4gIDEuMjM0NTY3ODlFKzkgUm91bmRlZAorc3ViNzM2IHN1YnRyYWN0IDAgMTIzNDU2Nzg5MCAgLT4gLTEuMjM0NTY3ODlFKzkgUm91bmRlZAorc3ViNzM3IHN1YnRyYWN0IDEyMzQ1Njc4OTEgIDAgLT4gIDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCitzdWI3Mzggc3VidHJhY3QgMCAxMjM0NTY3ODkxICAtPiAtMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKK3N1YjczOSBzdWJ0cmFjdCAxMjM0NTY3ODkwMSAwIC0+ICAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3N1Yjc0MCBzdWJ0cmFjdCAwIDEyMzQ1Njc4OTAxIC0+IC0xLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKK3N1Yjc0MSBzdWJ0cmFjdCAxMjM0NTY3ODk2ICAwIC0+ICAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAorc3ViNzQyIHN1YnRyYWN0IDAgMTIzNDU2Nzg5NiAgLT4gLTEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCisKK3ByZWNpc2lvbjogMTUKK3N1Yjc1MSBzdWJ0cmFjdCAxMjM0NTY3ODAwMCAwIC0+ICAxMjM0NTY3ODAwMAorc3ViNzUyIHN1YnRyYWN0IDAgMTIzNDU2NzgwMDAgLT4gLTEyMzQ1Njc4MDAwCitzdWI3NTMgc3VidHJhY3QgMTIzNDU2NzgwMCAgMCAtPiAgMTIzNDU2NzgwMAorc3ViNzU0IHN1YnRyYWN0IDAgMTIzNDU2NzgwMCAgLT4gLTEyMzQ1Njc4MDAKK3N1Yjc1NSBzdWJ0cmFjdCAxMjM0NTY3ODkwICAwIC0+ICAxMjM0NTY3ODkwCitzdWI3NTYgc3VidHJhY3QgMCAxMjM0NTY3ODkwICAtPiAtMTIzNDU2Nzg5MAorc3ViNzU3IHN1YnRyYWN0IDEyMzQ1Njc4OTEgIDAgLT4gIDEyMzQ1Njc4OTEKK3N1Yjc1OCBzdWJ0cmFjdCAwIDEyMzQ1Njc4OTEgIC0+IC0xMjM0NTY3ODkxCitzdWI3NTkgc3VidHJhY3QgMTIzNDU2Nzg5MDEgMCAtPiAgMTIzNDU2Nzg5MDEKK3N1Yjc2MCBzdWJ0cmFjdCAwIDEyMzQ1Njc4OTAxIC0+IC0xMjM0NTY3ODkwMQorc3ViNzYxIHN1YnRyYWN0IDEyMzQ1Njc4OTYgIDAgLT4gIDEyMzQ1Njc4OTYKK3N1Yjc2MiBzdWJ0cmFjdCAwIDEyMzQ1Njc4OTYgIC0+IC0xMjM0NTY3ODk2CisKKy0tIFNwZWNpYWxzCitzdWJ4NzgwIHN1YnRyYWN0IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKK3N1Yng3ODEgc3VidHJhY3QgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQorc3VieDc4MiBzdWJ0cmFjdCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5CitzdWJ4NzgzIHN1YnRyYWN0IC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKK3N1Yng3ODQgc3VidHJhY3QgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQorc3VieDc4NSBzdWJ0cmFjdCAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5CitzdWJ4Nzg3IHN1YnRyYWN0IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkKK3N1Yng3ODggc3VidHJhY3QgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQorc3VieDc4OSBzdWJ0cmFjdCAtMSAgICAgSW5mICAgLT4gLUluZmluaXR5CitzdWJ4NzkwIHN1YnRyYWN0ICAwICAgICBJbmYgICAtPiAtSW5maW5pdHkKK3N1Yng3OTEgc3VidHJhY3QgIDEgICAgIEluZiAgIC0+IC1JbmZpbml0eQorc3VieDc5MiBzdWJ0cmFjdCAgMTAwMCAgSW5mICAgLT4gLUluZmluaXR5CisKK3N1Yng4MDAgc3VidHJhY3QgIEluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODAxIHN1YnRyYWN0ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKK3N1Yng4MDIgc3VidHJhY3QgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQorc3VieDgwMyBzdWJ0cmFjdCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5CitzdWJ4ODA0IHN1YnRyYWN0ICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKK3N1Yng4MDUgc3VidHJhY3QgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQorc3VieDgwNiBzdWJ0cmFjdCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5CitzdWJ4ODA3IHN1YnRyYWN0ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKK3N1Yng4MDggc3VidHJhY3QgLTEwMDAgLUluZiAgIC0+ICBJbmZpbml0eQorc3VieDgwOSBzdWJ0cmFjdCAtSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4MTAgc3VidHJhY3QgLTEgICAgLUluZiAgIC0+ICBJbmZpbml0eQorc3VieDgxMSBzdWJ0cmFjdCAtMCAgICAtSW5mICAgLT4gIEluZmluaXR5CitzdWJ4ODEyIHN1YnRyYWN0ICAwICAgIC1JbmYgICAtPiAgSW5maW5pdHkKK3N1Yng4MTMgc3VidHJhY3QgIDEgICAgLUluZiAgIC0+ICBJbmZpbml0eQorc3VieDgxNCBzdWJ0cmFjdCAgMTAwMCAtSW5mICAgLT4gIEluZmluaXR5CitzdWJ4ODE1IHN1YnRyYWN0ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKKworc3VieDgyMSBzdWJ0cmFjdCAgTmFOICAgSW5mICAgLT4gIE5hTgorc3VieDgyMiBzdWJ0cmFjdCAtTmFOICAgMTAwMCAgLT4gLU5hTgorc3VieDgyMyBzdWJ0cmFjdCAgTmFOICAgMSAgICAgLT4gIE5hTgorc3VieDgyNCBzdWJ0cmFjdCAgTmFOICAgMCAgICAgLT4gIE5hTgorc3VieDgyNSBzdWJ0cmFjdCAgTmFOICAtMCAgICAgLT4gIE5hTgorc3VieDgyNiBzdWJ0cmFjdCAgTmFOICAtMSAgICAgLT4gIE5hTgorc3VieDgyNyBzdWJ0cmFjdCAgTmFOICAtMTAwMCAgLT4gIE5hTgorc3VieDgyOCBzdWJ0cmFjdCAgTmFOICAtSW5mICAgLT4gIE5hTgorc3VieDgyOSBzdWJ0cmFjdCAtTmFOICAgTmFOICAgLT4gLU5hTgorc3VieDgzMCBzdWJ0cmFjdCAtSW5mICAgTmFOICAgLT4gIE5hTgorc3VieDgzMSBzdWJ0cmFjdCAtMTAwMCAgTmFOICAgLT4gIE5hTgorc3VieDgzMiBzdWJ0cmFjdCAtMSAgICAgTmFOICAgLT4gIE5hTgorc3VieDgzMyBzdWJ0cmFjdCAtMCAgICAgTmFOICAgLT4gIE5hTgorc3VieDgzNCBzdWJ0cmFjdCAgMCAgICAgTmFOICAgLT4gIE5hTgorc3VieDgzNSBzdWJ0cmFjdCAgMSAgICAgTmFOICAgLT4gIE5hTgorc3VieDgzNiBzdWJ0cmFjdCAgMTAwMCAtTmFOICAgLT4gLU5hTgorc3VieDgzNyBzdWJ0cmFjdCAgSW5mICAgTmFOICAgLT4gIE5hTgorCitzdWJ4ODQxIHN1YnRyYWN0ICBzTmFOICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg0MiBzdWJ0cmFjdCAtc05hTiAgMTAwMCAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4NDMgc3VidHJhY3QgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODQ0IHN1YnRyYWN0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg0NSBzdWJ0cmFjdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4NDYgc3VidHJhY3QgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODQ3IHN1YnRyYWN0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg0OCBzdWJ0cmFjdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4NDkgc3VidHJhY3QgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODUwIHN1YnRyYWN0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg1MSBzdWJ0cmFjdCAtSW5mIC1zTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4NTIgc3VidHJhY3QgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODUzIHN1YnRyYWN0IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg1NCBzdWJ0cmFjdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4NTUgc3VidHJhY3QgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODU2IHN1YnRyYWN0ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg1NyBzdWJ0cmFjdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4NTggc3VidHJhY3QgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODU5IHN1YnRyYWN0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgorCistLSBwcm9wYWdhdGluZyBOYU5zCitzdWJ4ODYxIHN1YnRyYWN0ICBOYU4wMSAgIC1JbmYgICAgIC0+ICBOYU4xCitzdWJ4ODYyIHN1YnRyYWN0IC1OYU4wMiAgIC0xMDAwICAgIC0+IC1OYU4yCitzdWJ4ODYzIHN1YnRyYWN0ICBOYU4wMyAgICAxMDAwICAgIC0+ICBOYU4zCitzdWJ4ODY0IHN1YnRyYWN0ICBOYU4wNCAgICBJbmYgICAgIC0+ICBOYU40CitzdWJ4ODY1IHN1YnRyYWN0ICBOYU4wNSAgICBOYU42MSAgIC0+ICBOYU41CitzdWJ4ODY2IHN1YnRyYWN0IC1JbmYgICAgIC1OYU43MSAgIC0+IC1OYU43MQorc3VieDg2NyBzdWJ0cmFjdCAtMTAwMCAgICAgTmFOODEgICAtPiAgTmFOODEKK3N1Yng4Njggc3VidHJhY3QgIDEwMDAgICAgIE5hTjkxICAgLT4gIE5hTjkxCitzdWJ4ODY5IHN1YnRyYWN0ICBJbmYgICAgICBOYU4xMDEgIC0+ICBOYU4xMDEKK3N1Yng4NzEgc3VidHJhY3QgIHNOYU4wMTEgIC1JbmYgICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg3MiBzdWJ0cmFjdCAgc05hTjAxMiAgLTEwMDAgICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODczIHN1YnRyYWN0IC1zTmFOMDEzICAgMTAwMCAgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4NzQgc3VidHJhY3QgIHNOYU4wMTQgICBOYU4xNzEgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg3NSBzdWJ0cmFjdCAgc05hTjAxNSAgc05hTjE4MSAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODc2IHN1YnRyYWN0ICBOYU4wMTYgICBzTmFOMTkxIC0+ICBOYU4xOTEgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4Nzcgc3VidHJhY3QgLUluZiAgICAgIHNOYU4yMDEgLT4gIE5hTjIwMSBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg3OCBzdWJ0cmFjdCAtMTAwMCAgICAgc05hTjIxMSAtPiAgTmFOMjExIEludmFsaWRfb3BlcmF0aW9uCitzdWJ4ODc5IHN1YnRyYWN0ICAxMDAwICAgIC1zTmFOMjIxIC0+IC1OYU4yMjEgSW52YWxpZF9vcGVyYXRpb24KK3N1Yng4ODAgc3VidHJhY3QgIEluZiAgICAgIHNOYU4yMzEgLT4gIE5hTjIzMSBJbnZhbGlkX29wZXJhdGlvbgorc3VieDg4MSBzdWJ0cmFjdCAgTmFOMDI1ICAgc05hTjI0MSAtPiAgTmFOMjQxIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGVkZ2UgY2FzZSBzcGlsbHMKK3N1Yng5MDEgc3VidHJhY3QgIDIuRS0zICAxLjAwMiAgLT4gLTEuMDAwCitzdWJ4OTAyIHN1YnRyYWN0ICAyLjBFLTMgIDEuMDAyICAtPiAtMS4wMDAwCitzdWJ4OTAzIHN1YnRyYWN0ICAyLjAwRS0zICAxLjAwMjAgIC0+IC0xLjAwMDAwCitzdWJ4OTA0IHN1YnRyYWN0ICAyLjAwMEUtMyAgMS4wMDIwMCAgLT4gLTEuMDAwMDAwCitzdWJ4OTA1IHN1YnRyYWN0ICAyLjAwMDBFLTMgIDEuMDAyMDAwICAtPiAtMS4wMDAwMDAwCitzdWJ4OTA2IHN1YnRyYWN0ICAyLjAwMDAwRS0zICAxLjAwMjAwMDAgIC0+IC0xLjAwMDAwMDAwCitzdWJ4OTA3IHN1YnRyYWN0ICAyLjAwMDAwMEUtMyAgMS4wMDIwMDAwMCAgLT4gLTEuMDAwMDAwMDAwCitzdWJ4OTA4IHN1YnRyYWN0ICAyLjAwMDAwMDBFLTMgIDEuMDAyMDAwMDAwICAtPiAtMS4wMDAwMDAwMDAwCisKKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvd3MKK3ByZWNpc2lvbjogMworbWF4ZXhwb25lbnQ6IDk5OQorbWluZXhwb25lbnQ6IC05OTkKK3N1YngxMDEwIHN1YnRyYWN0ICAwICAxLjAwRS05OTkgICAgICAgLT4gIC0xLjAwRS05OTkKK3N1YngxMDExIHN1YnRyYWN0ICAwICAwLjFFLTk5OSAgICAgICAgLT4gIC0xRS0xMDAwICAgU3Vibm9ybWFsCitzdWJ4MTAxMiBzdWJ0cmFjdCAgMCAgMC4xMEUtOTk5ICAgICAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbAorc3VieDEwMTMgc3VidHJhY3QgIDAgIDAuMTAwRS05OTkgICAgICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorc3VieDEwMTQgc3VidHJhY3QgIDAgIDAuMDFFLTk5OSAgICAgICAtPiAgLTFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitzdWJ4MTAxNSBzdWJ0cmFjdCAgMCAgMC45OTlFLTk5OSAgICAgIC0+ICAtMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitzdWJ4MTAxNiBzdWJ0cmFjdCAgMCAgMC4wOTlFLTk5OSAgICAgIC0+ICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitzdWJ4MTAxNyBzdWJ0cmFjdCAgMCAgMC4wMDlFLTk5OSAgICAgIC0+ICAtMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitzdWJ4MTAxOCBzdWJ0cmFjdCAgMCAgMC4wMDFFLTk5OSAgICAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK3N1YngxMDE5IHN1YnRyYWN0ICAwICAwLjAwMDlFLTk5OSAgICAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorc3VieDEwMjAgc3VidHJhY3QgIDAgIDAuMDAwMUUtOTk5ICAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKK3N1YngxMDMwIHN1YnRyYWN0ICAwIC0xLjAwRS05OTkgICAgICAgLT4gICAxLjAwRS05OTkKK3N1YngxMDMxIHN1YnRyYWN0ICAwIC0wLjFFLTk5OSAgICAgICAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsCitzdWJ4MTAzMiBzdWJ0cmFjdCAgMCAtMC4xMEUtOTk5ICAgICAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbAorc3VieDEwMzMgc3VidHJhY3QgIDAgLTAuMTAwRS05OTkgICAgICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAorc3VieDEwMzQgc3VidHJhY3QgIDAgLTAuMDFFLTk5OSAgICAgICAtPiAgIDFFLTEwMDEgICBTdWJub3JtYWwKKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCitzdWJ4MTAzNSBzdWJ0cmFjdCAgMCAtMC45OTlFLTk5OSAgICAgIC0+ICAgMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitzdWJ4MTAzNiBzdWJ0cmFjdCAgMCAtMC4wOTlFLTk5OSAgICAgIC0+ICAgMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitzdWJ4MTAzNyBzdWJ0cmFjdCAgMCAtMC4wMDlFLTk5OSAgICAgIC0+ICAgMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitzdWJ4MTAzOCBzdWJ0cmFjdCAgMCAtMC4wMDFFLTk5OSAgICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK3N1YngxMDM5IHN1YnRyYWN0ICAwIC0wLjAwMDlFLTk5OSAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorc3VieDEwNDAgc3VidHJhY3QgIDAgLTAuMDAwMUUtOTk5ICAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCisKKy0tIHNvbWUgbm9uLXplcm8gc3Vibm9ybWFsIHN1YnRyYWN0cworLS0gc3VieDEwNTYgaXMgYSB0cmlja3kgY2FzZQorcm91bmRpbmc6IGhhbGZfdXAKK3N1YngxMDUwIHN1YnRyYWN0ICAxLjAwRS05OTkgICAwLjFFLTk5OSAgLT4gICA5LjBFLTEwMDAgIFN1Ym5vcm1hbAorc3VieDEwNTEgc3VidHJhY3QgIDAuMUUtOTk5ICAgIDAuMUUtOTk5ICAtPiAgIDBFLTEwMDAKK3N1YngxMDUyIHN1YnRyYWN0ICAwLjEwRS05OTkgICAwLjFFLTk5OSAgLT4gICAwRS0xMDAxCitzdWJ4MTA1MyBzdWJ0cmFjdCAgMC4xMDBFLTk5OSAgMC4xRS05OTkgIC0+ICAgMEUtMTAwMSAgICBDbGFtcGVkCitzdWJ4MTA1NCBzdWJ0cmFjdCAgMC4wMUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgLTlFLTEwMDEgICBTdWJub3JtYWwKK3N1YngxMDU1IHN1YnRyYWN0ICAwLjk5OUUtOTk5ICAwLjFFLTk5OSAgLT4gICA5LjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitzdWJ4MTA1NiBzdWJ0cmFjdCAgMC4wOTlFLTk5OSAgMC4xRS05OTkgIC0+ICAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitzdWJ4MTA1NyBzdWJ0cmFjdCAgMC4wMDlFLTk5OSAgMC4xRS05OTkgIC0+ICAgLTlFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworc3VieDEwNTggc3VidHJhY3QgIDAuMDAxRS05OTkgIDAuMUUtOTk5ICAtPiAgIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKK3N1YngxMDU5IHN1YnRyYWN0ICAwLjAwMDlFLTk5OSAwLjFFLTk5OSAgLT4gICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitzdWJ4MTA2MCBzdWJ0cmFjdCAgMC4wMDAxRS05OTkgMC4xRS05OTkgIC0+ICAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdworCisKKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzCitwcmVjaXNpb246ICAgNQorbWF4ZXhwb25lbnQ6IDc5CittaW5leHBvbmVudDogLTc5CitzdWJ4MTEwMSBzdWJ0cmFjdCAgMCAxLjUyNDQ0RS04MCAtPiAtMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitzdWJ4MTEwMiBzdWJ0cmFjdCAgMCAxLjUyNDQ1RS04MCAtPiAtMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitzdWJ4MTEwMyBzdWJ0cmFjdCAgMCAxLjUyNDQ2RS04MCAtPiAtMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitzdWJ4MTEwNCBzdWJ0cmFjdCAgMS41MjQ0NEUtODAgMCAtPiAgMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitzdWJ4MTEwNSBzdWJ0cmFjdCAgMS41MjQ0NUUtODAgMCAtPiAgMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CitzdWJ4MTEwNiBzdWJ0cmFjdCAgMS41MjQ0NkUtODAgMCAtPiAgMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93CisKK3N1YngxMTExIHN1YnRyYWN0ICAxLjIzNDU2NzhFLTgwICAxLjIzNDU2NzFFLTgwIC0+ICAwRS04MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitzdWJ4MTExMiBzdWJ0cmFjdCAgMS4yMzQ1Njc4RS04MCAgMS4yMzQ1NjE4RS04MCAtPiAgMEUtODMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAorc3VieDExMTMgc3VidHJhY3QgIDEuMjM0NTY3OEUtODAgIDEuMjM0NTE3OEUtODAgLT4gIDBFLTgzIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKK3N1YngxMTE0IHN1YnRyYWN0ICAxLjIzNDU2NzhFLTgwICAxLjIzNDE2NzhFLTgwIC0+ICAwRS04MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCitzdWJ4MTExNSBzdWJ0cmFjdCAgMS4yMzQ1Njc4RS04MCAgMS4yMzE1Njc4RS04MCAtPiAgM0UtODMgICAgICAgICBSb3VuZGVkIFN1Ym5vcm1hbAorc3VieDExMTYgc3VidHJhY3QgIDEuMjM0NTY3OEUtODAgIDEuMjE0NTY3OEUtODAgLT4gIDIuMEUtODIgICAgICAgUm91bmRlZCBTdWJub3JtYWwKK3N1YngxMTE3IHN1YnRyYWN0ICAxLjIzNDU2NzhFLTgwICAxLjEzNDU2NzhFLTgwIC0+ICAxLjAwRS04MSAgICAgIFJvdW5kZWQgU3Vibm9ybWFsCitzdWJ4MTExOCBzdWJ0cmFjdCAgMS4yMzQ1Njc4RS04MCAgMC4yMzQ1Njc4RS04MCAtPiAgMS4wMDBFLTgwICAgICBSb3VuZGVkIFN1Ym5vcm1hbAorCitwcmVjaXNpb246ICAgMzQKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogNjE0NAorbWluRXhwb25lbnQ6IC02MTQzCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKK3N1YngxMTI1ICBzdWJ0cmFjdCAxMzBFLTIgIDEyMEUtMiAtPiAwLjEwCitzdWJ4MTEyNiAgc3VidHJhY3QgMTMwRS0yICAxMkUtMSAgLT4gMC4xMAorc3VieDExMjcgIHN1YnRyYWN0IDEzMEUtMiAgMUUwICAgIC0+IDAuMzAKK3N1YngxMTI4ICBzdWJ0cmFjdCAxRTIgICAgIDFFNCAgICAtPiAtOS45RSszCisKKy0tIE51bGwgdGVzdHMKK3N1Yng5OTkwIHN1YnRyYWN0IDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorc3VieDk5OTEgc3VidHJhY3QgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3Rlc3RhbGwuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvdGVzdGFsbC5kZWNUZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjY2U3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3Rlc3RhbGwuZGVjVGVzdApAQCAtMCwwICsxLDg3IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHRlc3RhbGwuZGVjVGVzdCAtLSBydW4gYWxsIGdlbmVyYWwgZGVjaW1hbCBhcml0aG1ldGljIHRlc3RjYXNlcyAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gY29yZSB0ZXN0cyAodXNpbmcgRXh0ZW5kZWQ6IDEpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWN0ZXN0OiBiYXNlCisKK2RlY3Rlc3Q6IGFicworZGVjdGVzdDogYWRkCitkZWN0ZXN0OiBhbmQKK2RlY3Rlc3Q6IGNsYW1wCitkZWN0ZXN0OiBjbGFzcworZGVjdGVzdDogY29tcGFyZQorZGVjdGVzdDogY29tcGFyZXNpZworZGVjdGVzdDogY29tcGFyZXRvdGFsCitkZWN0ZXN0OiBjb21wYXJldG90bWFnCitkZWN0ZXN0OiBjb3B5CitkZWN0ZXN0OiBjb3B5YWJzCitkZWN0ZXN0OiBjb3B5bmVnYXRlCitkZWN0ZXN0OiBjb3B5c2lnbgorZGVjdGVzdDogZGl2aWRlCitkZWN0ZXN0OiBkaXZpZGVpbnQKK2RlY3Rlc3Q6IGV4cAorZGVjdGVzdDogZm1hCitkZWN0ZXN0OiBpbmV4YWN0CitkZWN0ZXN0OiBpbnZlcnQKK2RlY3Rlc3Q6IGxuCitkZWN0ZXN0OiBsb2diCitkZWN0ZXN0OiBsb2cxMAorZGVjdGVzdDogbWF4CitkZWN0ZXN0OiBtYXhtYWcKK2RlY3Rlc3Q6IG1pbgorZGVjdGVzdDogbWlubWFnCitkZWN0ZXN0OiBtaW51cworZGVjdGVzdDogbXVsdGlwbHkKK2RlY3Rlc3Q6IG5leHRtaW51cworZGVjdGVzdDogbmV4dHBsdXMKK2RlY3Rlc3Q6IG5leHR0b3dhcmQKK2RlY3Rlc3Q6IG9yCitkZWN0ZXN0OiBwbHVzCitkZWN0ZXN0OiBwb3dlcgorZGVjdGVzdDogcG93ZXJzcXJ0CitkZWN0ZXN0OiBxdWFudGl6ZQorZGVjdGVzdDogcmFuZG9tcworZGVjdGVzdDogcmVkdWNlICAgICAgICAgICAgICAgLS0gW3dhcyBjYWxsZWQgbm9ybWFsaXplXQorZGVjdGVzdDogcmVtYWluZGVyCitkZWN0ZXN0OiByZW1haW5kZXJuZWFyCitkZWN0ZXN0OiByZXNjYWxlICAgICAgICAgICAgICAtLSBbb2Jzb2xldGVdCitkZWN0ZXN0OiByb3RhdGUKK2RlY3Rlc3Q6IHJvdW5kaW5nCitkZWN0ZXN0OiBzYW1lcXVhbnR1bQorZGVjdGVzdDogc2NhbGViCitkZWN0ZXN0OiBzaGlmdAorZGVjdGVzdDogc3F1YXJlcm9vdAorZGVjdGVzdDogc3VidHJhY3QKK2RlY3Rlc3Q6IHRvaW50ZWdyYWwKK2RlY3Rlc3Q6IHRvaW50ZWdyYWx4CitkZWN0ZXN0OiB0cmltCitkZWN0ZXN0OiB4b3IKKworLS0gVGhlIG5leHQgYXJlIGZvciB0aGUgU3RyYXdtYW4gNGQgY29uY3JldGUgcmVwcmVzZW50YXRpb25zIGFuZAorLS0gdGVzdHMgYXQgdGhvc2Ugc2l6ZXMgW2luY2x1ZGluZyBkc0VuY29kZSwgZGRFbmNvZGUsIGFuZCBkcUVuY29kZSwKKy0tIHdoaWNoIHJlcGxhY2UgZGVjaW1hbDMyLCBkZWNpbWFsNjQsIGFuZCBkZWNpbWFsMTI4XQorZGVjdGVzdDogZGVjU2luZ2xlCitkZWN0ZXN0OiBkZWNEb3VibGUKK2RlY3Rlc3Q6IGRlY1F1YWQKKworLS0gR2VuZXJhbCAzMS0+MzMtZGlnaXQgYm91bmRhcnkgdGVzdHMKK2RlY3Rlc3Q6IHJhbmRvbWJvdW5kMzIKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS90b2ludGVncmFsLmRlY1Rlc3QgYi9saWIvcHl0aG9uMi43L3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3RvaW50ZWdyYWwuZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjNmYjk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS90b2ludGVncmFsLmRlY1Rlc3QKQEAgLTAsMCArMSwyNDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gdG9pbnRlZ3JhbC5kZWNUZXN0IC0tIHJvdW5kIGRlY2ltYWwgdG8gaW50ZWdyYWwgdmFsdWUgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCistLSBUaGlzIHNldCBvZiB0ZXN0cyB0ZXN0cyB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbiAncm91bmQtdG8taW50ZWdyYWwKKy0tIHZhbHVlJyBvcGVyYXRpb24gKGZyb20gSUVFRSA4NTQsIGxhdGVyIG1vZGlmaWVkIGluIDc1NHIpLgorLS0gQWxsIG5vbi16ZXJvIHJlc3VsdHMgYXJlIGRlZmluZWQgYXMgYmVpbmcgdGhvc2UgZnJvbSBlaXRoZXIgY29weSBvcgorLS0gcXVhbnRpemUsIHNvIHRob3NlIGFyZSBhc3N1bWVkIHRvIGhhdmUgYmVlbiB0ZXN0ZWQuCistLSBOb3RlIHRoYXQgNzU0ciByZXF1aXJlcyB0aGF0IEluZXhhY3Qgbm90IGJlIHNldCwgYW5kIHdlIHNpbWlsYXJseQorLS0gYXNzdW1lIFJvdW5kZWQgaXMgbm90IHNldC4KKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworaW50eDAwMSB0b2ludGVncmFsICAgICAgMCAgICAgLT4gIDAKK2ludHgwMDIgdG9pbnRlZ3JhbCAgICAgIDAuMCAgIC0+ICAwCitpbnR4MDAzIHRvaW50ZWdyYWwgICAgICAwLjEgICAtPiAgMAoraW50eDAwNCB0b2ludGVncmFsICAgICAgMC4yICAgLT4gIDAKK2ludHgwMDUgdG9pbnRlZ3JhbCAgICAgIDAuMyAgIC0+ICAwCitpbnR4MDA2IHRvaW50ZWdyYWwgICAgICAwLjQgICAtPiAgMAoraW50eDAwNyB0b2ludGVncmFsICAgICAgMC41ICAgLT4gIDEKK2ludHgwMDggdG9pbnRlZ3JhbCAgICAgIDAuNiAgIC0+ICAxCitpbnR4MDA5IHRvaW50ZWdyYWwgICAgICAwLjcgICAtPiAgMQoraW50eDAxMCB0b2ludGVncmFsICAgICAgMC44ICAgLT4gIDEKK2ludHgwMTEgdG9pbnRlZ3JhbCAgICAgIDAuOSAgIC0+ICAxCitpbnR4MDEyIHRvaW50ZWdyYWwgICAgICAxICAgICAtPiAgMQoraW50eDAxMyB0b2ludGVncmFsICAgICAgMS4wICAgLT4gIDEKK2ludHgwMTQgdG9pbnRlZ3JhbCAgICAgIDEuMSAgIC0+ICAxCitpbnR4MDE1IHRvaW50ZWdyYWwgICAgICAxLjIgICAtPiAgMQoraW50eDAxNiB0b2ludGVncmFsICAgICAgMS4zICAgLT4gIDEKK2ludHgwMTcgdG9pbnRlZ3JhbCAgICAgIDEuNCAgIC0+ICAxCitpbnR4MDE4IHRvaW50ZWdyYWwgICAgICAxLjUgICAtPiAgMgoraW50eDAxOSB0b2ludGVncmFsICAgICAgMS42ICAgLT4gIDIKK2ludHgwMjAgdG9pbnRlZ3JhbCAgICAgIDEuNyAgIC0+ICAyCitpbnR4MDIxIHRvaW50ZWdyYWwgICAgICAxLjggICAtPiAgMgoraW50eDAyMiB0b2ludGVncmFsICAgICAgMS45ICAgLT4gIDIKKy0tIG5lZ2F0aXZlcworaW50eDAzMSB0b2ludGVncmFsICAgICAtMCAgICAgLT4gLTAKK2ludHgwMzIgdG9pbnRlZ3JhbCAgICAgLTAuMCAgIC0+IC0wCitpbnR4MDMzIHRvaW50ZWdyYWwgICAgIC0wLjEgICAtPiAtMAoraW50eDAzNCB0b2ludGVncmFsICAgICAtMC4yICAgLT4gLTAKK2ludHgwMzUgdG9pbnRlZ3JhbCAgICAgLTAuMyAgIC0+IC0wCitpbnR4MDM2IHRvaW50ZWdyYWwgICAgIC0wLjQgICAtPiAtMAoraW50eDAzNyB0b2ludGVncmFsICAgICAtMC41ICAgLT4gLTEKK2ludHgwMzggdG9pbnRlZ3JhbCAgICAgLTAuNiAgIC0+IC0xCitpbnR4MDM5IHRvaW50ZWdyYWwgICAgIC0wLjcgICAtPiAtMQoraW50eDA0MCB0b2ludGVncmFsICAgICAtMC44ICAgLT4gLTEKK2ludHgwNDEgdG9pbnRlZ3JhbCAgICAgLTAuOSAgIC0+IC0xCitpbnR4MDQyIHRvaW50ZWdyYWwgICAgIC0xICAgICAtPiAtMQoraW50eDA0MyB0b2ludGVncmFsICAgICAtMS4wICAgLT4gLTEKK2ludHgwNDQgdG9pbnRlZ3JhbCAgICAgLTEuMSAgIC0+IC0xCitpbnR4MDQ1IHRvaW50ZWdyYWwgICAgIC0xLjIgICAtPiAtMQoraW50eDA0NiB0b2ludGVncmFsICAgICAtMS4zICAgLT4gLTEKK2ludHgwNDcgdG9pbnRlZ3JhbCAgICAgLTEuNCAgIC0+IC0xCitpbnR4MDQ4IHRvaW50ZWdyYWwgICAgIC0xLjUgICAtPiAtMgoraW50eDA0OSB0b2ludGVncmFsICAgICAtMS42ICAgLT4gLTIKK2ludHgwNTAgdG9pbnRlZ3JhbCAgICAgLTEuNyAgIC0+IC0yCitpbnR4MDUxIHRvaW50ZWdyYWwgICAgIC0xLjggICAtPiAtMgoraW50eDA1MiB0b2ludGVncmFsICAgICAtMS45ICAgLT4gLTIKKy0tIG5leHQgdHdvIHdvdWxkIGJlIE5hTiB1c2luZyBxdWFudGl6ZSh4LCAwKQoraW50eDA1MyB0b2ludGVncmFsICAgIDEwRSszMCAgLT4gMS4wRSszMQoraW50eDA1NCB0b2ludGVncmFsICAgLTEwRSszMCAgLT4gLTEuMEUrMzEKKworLS0gbnVtYmVycyBhcm91bmQgcHJlY2lzaW9uCitwcmVjaXNpb246IDkKK2ludHgwNjAgdG9pbnRlZ3JhbCAnNTYyNjdFLTEwJyAgIC0+ICcwJworaW50eDA2MSB0b2ludGVncmFsICc1NjI2N0UtNScgICAgLT4gJzEnCitpbnR4MDYyIHRvaW50ZWdyYWwgJzU2MjY3RS0yJyAgICAtPiAnNTYzJworaW50eDA2MyB0b2ludGVncmFsICc1NjI2N0UtMScgICAgLT4gJzU2MjcnCitpbnR4MDY1IHRvaW50ZWdyYWwgJzU2MjY3RS0wJyAgICAtPiAnNTYyNjcnCitpbnR4MDY2IHRvaW50ZWdyYWwgJzU2MjY3RSswJyAgICAtPiAnNTYyNjcnCitpbnR4MDY3IHRvaW50ZWdyYWwgJzU2MjY3RSsxJyAgICAtPiAnNS42MjY3RSs1JworaW50eDA2OCB0b2ludGVncmFsICc1NjI2N0UrMicgICAgLT4gJzUuNjI2N0UrNicKK2ludHgwNjkgdG9pbnRlZ3JhbCAnNTYyNjdFKzMnICAgIC0+ICc1LjYyNjdFKzcnCitpbnR4MDcwIHRvaW50ZWdyYWwgJzU2MjY3RSs0JyAgICAtPiAnNS42MjY3RSs4JworaW50eDA3MSB0b2ludGVncmFsICc1NjI2N0UrNScgICAgLT4gJzUuNjI2N0UrOScKK2ludHgwNzIgdG9pbnRlZ3JhbCAnNTYyNjdFKzYnICAgIC0+ICc1LjYyNjdFKzEwJworaW50eDA3MyB0b2ludGVncmFsICcxLjIzRSs5NicgICAgLT4gJzEuMjNFKzk2JworaW50eDA3NCB0b2ludGVncmFsICcxLjIzRSszODQnICAgLT4gJzEuMjNFKzM4NCcKK2ludHgwNzUgdG9pbnRlZ3JhbCAnMS4yM0UrOTk5JyAgIC0+ICcxLjIzRSs5OTknCisKK2ludHgwODAgdG9pbnRlZ3JhbCAnLTU2MjY3RS0xMCcgIC0+ICctMCcKK2ludHgwODEgdG9pbnRlZ3JhbCAnLTU2MjY3RS01JyAgIC0+ICctMScKK2ludHgwODIgdG9pbnRlZ3JhbCAnLTU2MjY3RS0yJyAgIC0+ICctNTYzJworaW50eDA4MyB0b2ludGVncmFsICctNTYyNjdFLTEnICAgLT4gJy01NjI3JworaW50eDA4NSB0b2ludGVncmFsICctNTYyNjdFLTAnICAgLT4gJy01NjI2NycKK2ludHgwODYgdG9pbnRlZ3JhbCAnLTU2MjY3RSswJyAgIC0+ICctNTYyNjcnCitpbnR4MDg3IHRvaW50ZWdyYWwgJy01NjI2N0UrMScgICAtPiAnLTUuNjI2N0UrNScKK2ludHgwODggdG9pbnRlZ3JhbCAnLTU2MjY3RSsyJyAgIC0+ICctNS42MjY3RSs2JworaW50eDA4OSB0b2ludGVncmFsICctNTYyNjdFKzMnICAgLT4gJy01LjYyNjdFKzcnCitpbnR4MDkwIHRvaW50ZWdyYWwgJy01NjI2N0UrNCcgICAtPiAnLTUuNjI2N0UrOCcKK2ludHgwOTEgdG9pbnRlZ3JhbCAnLTU2MjY3RSs1JyAgIC0+ICctNS42MjY3RSs5JworaW50eDA5MiB0b2ludGVncmFsICctNTYyNjdFKzYnICAgLT4gJy01LjYyNjdFKzEwJworaW50eDA5MyB0b2ludGVncmFsICctMS4yM0UrOTYnICAgLT4gJy0xLjIzRSs5NicKK2ludHgwOTQgdG9pbnRlZ3JhbCAnLTEuMjNFKzM4NCcgIC0+ICctMS4yM0UrMzg0JworaW50eDA5NSB0b2ludGVncmFsICctMS4yM0UrOTk5JyAgLT4gJy0xLjIzRSs5OTknCisKKy0tIHN1Ym5vcm1hbCBpbnB1dHMKK2ludHgxMDAgdG9pbnRlZ3JhbCAgICAgICAgMUUtOTk5IC0+IDAKK2ludHgxMDEgdG9pbnRlZ3JhbCAgICAgIDAuMUUtOTk5IC0+IDAKK2ludHgxMDIgdG9pbnRlZ3JhbCAgICAgMC4wMUUtOTk5IC0+IDAKK2ludHgxMDMgdG9pbnRlZ3JhbCAgICAgICAgMEUtOTk5IC0+IDAKKworLS0gc3BlY2lhbHMgYW5kIHplcm9zCitpbnR4MTIwIHRvaW50ZWdyYWwgJ0luZicgICAgICAgLT4gIEluZmluaXR5CitpbnR4MTIxIHRvaW50ZWdyYWwgJy1JbmYnICAgICAgLT4gLUluZmluaXR5CitpbnR4MTIyIHRvaW50ZWdyYWwgICBOYU4gICAgICAgLT4gIE5hTgoraW50eDEyMyB0b2ludGVncmFsICBzTmFOICAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCitpbnR4MTI0IHRvaW50ZWdyYWwgICAgIDAgICAgICAgLT4gIDAKK2ludHgxMjUgdG9pbnRlZ3JhbCAgICAtMCAgICAgICAtPiAtMAoraW50eDEyNiB0b2ludGVncmFsICAgICAwLjAwMCAgIC0+ICAwCitpbnR4MTI3IHRvaW50ZWdyYWwgICAgIDAuMDAgICAgLT4gIDAKK2ludHgxMjggdG9pbnRlZ3JhbCAgICAgMC4wICAgICAtPiAgMAoraW50eDEyOSB0b2ludGVncmFsICAgICAwICAgICAgIC0+ICAwCitpbnR4MTMwIHRvaW50ZWdyYWwgICAgIDBFLTMgICAgLT4gIDAKK2ludHgxMzEgdG9pbnRlZ3JhbCAgICAgMEUtMiAgICAtPiAgMAoraW50eDEzMiB0b2ludGVncmFsICAgICAwRS0xICAgIC0+ICAwCitpbnR4MTMzIHRvaW50ZWdyYWwgICAgIDBFLTAgICAgLT4gIDAKK2ludHgxMzQgdG9pbnRlZ3JhbCAgICAgMEUrMSAgICAtPiAgMEUrMQoraW50eDEzNSB0b2ludGVncmFsICAgICAwRSsyICAgIC0+ICAwRSsyCitpbnR4MTM2IHRvaW50ZWdyYWwgICAgIDBFKzMgICAgLT4gIDBFKzMKK2ludHgxMzcgdG9pbnRlZ3JhbCAgICAgMEUrNCAgICAtPiAgMEUrNAoraW50eDEzOCB0b2ludGVncmFsICAgICAwRSs1ICAgIC0+ICAwRSs1CitpbnR4MTM5IHRvaW50ZWdyYWwgICAgLTAuMDAwICAgLT4gLTAKK2ludHgxNDAgdG9pbnRlZ3JhbCAgICAtMC4wMCAgICAtPiAtMAoraW50eDE0MSB0b2ludGVncmFsICAgIC0wLjAgICAgIC0+IC0wCitpbnR4MTQyIHRvaW50ZWdyYWwgICAgLTAgICAgICAgLT4gLTAKK2ludHgxNDMgdG9pbnRlZ3JhbCAgICAtMEUtMyAgICAtPiAtMAoraW50eDE0NCB0b2ludGVncmFsICAgIC0wRS0yICAgIC0+IC0wCitpbnR4MTQ1IHRvaW50ZWdyYWwgICAgLTBFLTEgICAgLT4gLTAKK2ludHgxNDYgdG9pbnRlZ3JhbCAgICAtMEUtMCAgICAtPiAtMAoraW50eDE0NyB0b2ludGVncmFsICAgIC0wRSsxICAgIC0+IC0wRSsxCitpbnR4MTQ4IHRvaW50ZWdyYWwgICAgLTBFKzIgICAgLT4gLTBFKzIKK2ludHgxNDkgdG9pbnRlZ3JhbCAgICAtMEUrMyAgICAtPiAtMEUrMworaW50eDE1MCB0b2ludGVncmFsICAgIC0wRSs0ICAgIC0+IC0wRSs0CitpbnR4MTUxIHRvaW50ZWdyYWwgICAgLTBFKzUgICAgLT4gLTBFKzUKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK2ludHgxNTIgdG9pbnRlZ3JhbCAgIE5hTjgwOCAgICAtPiAgTmFOODA4CitpbnR4MTUzIHRvaW50ZWdyYWwgIHNOYU4wODAgICAgLT4gIE5hTjgwICBJbnZhbGlkX29wZXJhdGlvbgoraW50eDE1NCB0b2ludGVncmFsICAtTmFOODA4ICAgIC0+IC1OYU44MDgKK2ludHgxNTUgdG9pbnRlZ3JhbCAtc05hTjA4MCAgICAtPiAtTmFOODAgIEludmFsaWRfb3BlcmF0aW9uCitpbnR4MTU2IHRvaW50ZWdyYWwgIC1OYU4gICAgICAgLT4gLU5hTgoraW50eDE1NyB0b2ludGVncmFsIC1zTmFOICAgICAgIC0+IC1OYU4gICAgSW52YWxpZF9vcGVyYXRpb24KKworLS0gZXhhbXBsZXMKK3JvdW5kaW5nOiAgICBoYWxmX3VwCitwcmVjaXNpb246ICAgOQoraW50eDIwMCB0b2ludGVncmFsICAgICAyLjEgICAgLT4gMgoraW50eDIwMSB0b2ludGVncmFsICAgMTAwICAgICAgLT4gMTAwCitpbnR4MjAyIHRvaW50ZWdyYWwgICAxMDAuMCAgICAtPiAxMDAKK2ludHgyMDMgdG9pbnRlZ3JhbCAgIDEwMS41ICAgIC0+IDEwMgoraW50eDIwNCB0b2ludGVncmFsICAtMTAxLjUgICAgLT4gLTEwMgoraW50eDIwNSB0b2ludGVncmFsICAgMTBFKzUgICAgLT4gMS4wRSs2CitpbnR4MjA2IHRvaW50ZWdyYWwgIDcuODlFKzc3ICAtPiA3Ljg5RSs3NworaW50eDIwNyB0b2ludGVncmFsICAgLUluZiAgICAgLT4gLUluZmluaXR5CisKKworLS0gYWxsIHJvdW5kaW5nIG1vZGVzCityb3VuZGluZzogICAgaGFsZl9ldmVuCisKK2ludHgyMTAgdG9pbnRlZ3JhbCAgICAgNTUuNSAgIC0+ICA1NgoraW50eDIxMSB0b2ludGVncmFsICAgICA1Ni41ICAgLT4gIDU2CitpbnR4MjEyIHRvaW50ZWdyYWwgICAgIDU3LjUgICAtPiAgNTgKK2ludHgyMTMgdG9pbnRlZ3JhbCAgICAtNTUuNSAgIC0+IC01NgoraW50eDIxNCB0b2ludGVncmFsICAgIC01Ni41ICAgLT4gLTU2CitpbnR4MjE1IHRvaW50ZWdyYWwgICAgLTU3LjUgICAtPiAtNTgKKworcm91bmRpbmc6ICAgIGhhbGZfdXAKKworaW50eDIyMCB0b2ludGVncmFsICAgICA1NS41ICAgLT4gIDU2CitpbnR4MjIxIHRvaW50ZWdyYWwgICAgIDU2LjUgICAtPiAgNTcKK2ludHgyMjIgdG9pbnRlZ3JhbCAgICAgNTcuNSAgIC0+ICA1OAoraW50eDIyMyB0b2ludGVncmFsICAgIC01NS41ICAgLT4gLTU2CitpbnR4MjI0IHRvaW50ZWdyYWwgICAgLTU2LjUgICAtPiAtNTcKK2ludHgyMjUgdG9pbnRlZ3JhbCAgICAtNTcuNSAgIC0+IC01OAorCityb3VuZGluZzogICAgaGFsZl9kb3duCisKK2ludHgyMzAgdG9pbnRlZ3JhbCAgICAgNTUuNSAgIC0+ICA1NQoraW50eDIzMSB0b2ludGVncmFsICAgICA1Ni41ICAgLT4gIDU2CitpbnR4MjMyIHRvaW50ZWdyYWwgICAgIDU3LjUgICAtPiAgNTcKK2ludHgyMzMgdG9pbnRlZ3JhbCAgICAtNTUuNSAgIC0+IC01NQoraW50eDIzNCB0b2ludGVncmFsICAgIC01Ni41ICAgLT4gLTU2CitpbnR4MjM1IHRvaW50ZWdyYWwgICAgLTU3LjUgICAtPiAtNTcKKworcm91bmRpbmc6ICAgIHVwCisKK2ludHgyNDAgdG9pbnRlZ3JhbCAgICAgNTUuMyAgIC0+ICA1NgoraW50eDI0MSB0b2ludGVncmFsICAgICA1Ni4zICAgLT4gIDU3CitpbnR4MjQyIHRvaW50ZWdyYWwgICAgIDU3LjMgICAtPiAgNTgKK2ludHgyNDMgdG9pbnRlZ3JhbCAgICAtNTUuMyAgIC0+IC01NgoraW50eDI0NCB0b2ludGVncmFsICAgIC01Ni4zICAgLT4gLTU3CitpbnR4MjQ1IHRvaW50ZWdyYWwgICAgLTU3LjMgICAtPiAtNTgKKworcm91bmRpbmc6ICAgIGRvd24KKworaW50eDI1MCB0b2ludGVncmFsICAgICA1NS43ICAgLT4gIDU1CitpbnR4MjUxIHRvaW50ZWdyYWwgICAgIDU2LjcgICAtPiAgNTYKK2ludHgyNTIgdG9pbnRlZ3JhbCAgICAgNTcuNyAgIC0+ICA1NworaW50eDI1MyB0b2ludGVncmFsICAgIC01NS43ICAgLT4gLTU1CitpbnR4MjU0IHRvaW50ZWdyYWwgICAgLTU2LjcgICAtPiAtNTYKK2ludHgyNTUgdG9pbnRlZ3JhbCAgICAtNTcuNyAgIC0+IC01NworCityb3VuZGluZzogICAgY2VpbGluZworCitpbnR4MjYwIHRvaW50ZWdyYWwgICAgIDU1LjMgICAtPiAgNTYKK2ludHgyNjEgdG9pbnRlZ3JhbCAgICAgNTYuMyAgIC0+ICA1NworaW50eDI2MiB0b2ludGVncmFsICAgICA1Ny4zICAgLT4gIDU4CitpbnR4MjYzIHRvaW50ZWdyYWwgICAgLTU1LjMgICAtPiAtNTUKK2ludHgyNjQgdG9pbnRlZ3JhbCAgICAtNTYuMyAgIC0+IC01NgoraW50eDI2NSB0b2ludGVncmFsICAgIC01Ny4zICAgLT4gLTU3CisKK3JvdW5kaW5nOiAgICBmbG9vcgorCitpbnR4MjcwIHRvaW50ZWdyYWwgICAgIDU1LjcgICAtPiAgNTUKK2ludHgyNzEgdG9pbnRlZ3JhbCAgICAgNTYuNyAgIC0+ICA1NgoraW50eDI3MiB0b2ludGVncmFsICAgICA1Ny43ICAgLT4gIDU3CitpbnR4MjczIHRvaW50ZWdyYWwgICAgLTU1LjcgICAtPiAtNTYKK2ludHgyNzQgdG9pbnRlZ3JhbCAgICAtNTYuNyAgIC0+IC01NworaW50eDI3NSB0b2ludGVncmFsICAgIC01Ny43ICAgLT4gLTU4CisKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvdG9pbnRlZ3JhbHguZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEvdG9pbnRlZ3JhbHguZGVjVGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjUwZTNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS90b2ludGVncmFseC5kZWNUZXN0CkBAIC0wLDAgKzEsMjU1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIHRvaW50ZWdyYWx4LmRlY1Rlc3QgLS0gcm91bmQgZGVjaW1hbCB0byBpbnRlZ3JhbCB2YWx1ZSwgZXhhY3QgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZlcnNpb246IDIuNTkKKworLS0gVGhpcyBzZXQgb2YgdGVzdHMgdGVzdHMgdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24gJ3JvdW5kLXRvLWludGVncmFsCistLSB2YWx1ZScgb3BlcmF0aW9uIChmcm9tIElFRUUgODU0LCBsYXRlciBtb2RpZmllZCBpbiA3NTRyKS4KKy0tIEFsbCBub24temVybyByZXN1bHRzIGFyZSBkZWZpbmVkIGFzIGJlaW5nIHRob3NlIGZyb20gZWl0aGVyIGNvcHkgb3IKKy0tIHF1YW50aXplLCBzbyB0aG9zZSBhcmUgYXNzdW1lZCB0byBoYXZlIGJlZW4gdGVzdGVkLgorCistLSBUaGlzIHRlc3RzIHRvSW50ZWdyYUV4YWN0LCB3aGljaCBtYXkgc2V0IEluZXhhY3QKKworZXh0ZW5kZWQ6ICAgIDEKK3ByZWNpc2lvbjogICA5Cityb3VuZGluZzogICAgaGFsZl91cAorbWF4RXhwb25lbnQ6IDk5OQorbWluRXhwb25lbnQ6IC05OTkKKworaW50eHgwMDEgdG9pbnRlZ3JhbHggICAgICAwICAgICAtPiAgMAoraW50eHgwMDIgdG9pbnRlZ3JhbHggICAgICAwLjAgICAtPiAgMAoraW50eHgwMDMgdG9pbnRlZ3JhbHggICAgICAwLjEgICAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDA0IHRvaW50ZWdyYWx4ICAgICAgMC4yICAgLT4gIDAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAwNSB0b2ludGVncmFseCAgICAgIDAuMyAgIC0+ICAwIEluZXhhY3QgUm91bmRlZAoraW50eHgwMDYgdG9pbnRlZ3JhbHggICAgICAwLjQgICAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDA3IHRvaW50ZWdyYWx4ICAgICAgMC41ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAwOCB0b2ludGVncmFseCAgICAgIDAuNiAgIC0+ICAxIEluZXhhY3QgUm91bmRlZAoraW50eHgwMDkgdG9pbnRlZ3JhbHggICAgICAwLjcgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDEwIHRvaW50ZWdyYWx4ICAgICAgMC44ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAxMSB0b2ludGVncmFseCAgICAgIDAuOSAgIC0+ICAxIEluZXhhY3QgUm91bmRlZAoraW50eHgwMTIgdG9pbnRlZ3JhbHggICAgICAxICAgICAtPiAgMQoraW50eHgwMTMgdG9pbnRlZ3JhbHggICAgICAxLjAgICAtPiAgMSBSb3VuZGVkCitpbnR4eDAxNCB0b2ludGVncmFseCAgICAgIDEuMSAgIC0+ICAxIEluZXhhY3QgUm91bmRlZAoraW50eHgwMTUgdG9pbnRlZ3JhbHggICAgICAxLjIgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDE2IHRvaW50ZWdyYWx4ICAgICAgMS4zICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAxNyB0b2ludGVncmFseCAgICAgIDEuNCAgIC0+ICAxIEluZXhhY3QgUm91bmRlZAoraW50eHgwMTggdG9pbnRlZ3JhbHggICAgICAxLjUgICAtPiAgMiBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDE5IHRvaW50ZWdyYWx4ICAgICAgMS42ICAgLT4gIDIgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAyMCB0b2ludGVncmFseCAgICAgIDEuNyAgIC0+ICAyIEluZXhhY3QgUm91bmRlZAoraW50eHgwMjEgdG9pbnRlZ3JhbHggICAgICAxLjggICAtPiAgMiBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDIyIHRvaW50ZWdyYWx4ICAgICAgMS45ICAgLT4gIDIgSW5leGFjdCBSb3VuZGVkCistLSBuZWdhdGl2ZXMKK2ludHh4MDMxIHRvaW50ZWdyYWx4ICAgICAtMCAgICAgLT4gLTAKK2ludHh4MDMyIHRvaW50ZWdyYWx4ICAgICAtMC4wICAgLT4gLTAKK2ludHh4MDMzIHRvaW50ZWdyYWx4ICAgICAtMC4xICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAzNCB0b2ludGVncmFseCAgICAgLTAuMiAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAoraW50eHgwMzUgdG9pbnRlZ3JhbHggICAgIC0wLjMgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDM2IHRvaW50ZWdyYWx4ICAgICAtMC40ICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDAzNyB0b2ludGVncmFseCAgICAgLTAuNSAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAoraW50eHgwMzggdG9pbnRlZ3JhbHggICAgIC0wLjYgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDM5IHRvaW50ZWdyYWx4ICAgICAtMC43ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA0MCB0b2ludGVncmFseCAgICAgLTAuOCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAoraW50eHgwNDEgdG9pbnRlZ3JhbHggICAgIC0wLjkgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDQyIHRvaW50ZWdyYWx4ICAgICAtMSAgICAgLT4gLTEKK2ludHh4MDQzIHRvaW50ZWdyYWx4ICAgICAtMS4wICAgLT4gLTEgUm91bmRlZAoraW50eHgwNDQgdG9pbnRlZ3JhbHggICAgIC0xLjEgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDQ1IHRvaW50ZWdyYWx4ICAgICAtMS4yICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA0NiB0b2ludGVncmFseCAgICAgLTEuMyAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAoraW50eHgwNDcgdG9pbnRlZ3JhbHggICAgIC0xLjQgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDQ4IHRvaW50ZWdyYWx4ICAgICAtMS41ICAgLT4gLTIgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA0OSB0b2ludGVncmFseCAgICAgLTEuNiAgIC0+IC0yIEluZXhhY3QgUm91bmRlZAoraW50eHgwNTAgdG9pbnRlZ3JhbHggICAgIC0xLjcgICAtPiAtMiBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDUxIHRvaW50ZWdyYWx4ICAgICAtMS44ICAgLT4gLTIgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA1MiB0b2ludGVncmFseCAgICAgLTEuOSAgIC0+IC0yIEluZXhhY3QgUm91bmRlZAorLS0gbmV4dCB0d28gd291bGQgYmUgTmFOIHVzaW5nIHF1YW50aXplKHgsIDApCitpbnR4eDA1MyB0b2ludGVncmFseCAgICAxMEUrMzAgIC0+IDEuMEUrMzEKK2ludHh4MDU0IHRvaW50ZWdyYWx4ICAgLTEwRSszMCAgLT4gLTEuMEUrMzEKKworLS0gbnVtYmVycyBhcm91bmQgcHJlY2lzaW9uCitwcmVjaXNpb246IDkKK2ludHh4MDYwIHRvaW50ZWdyYWx4ICc1NjI2N0UtMTAnICAgLT4gJzAnICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA2MSB0b2ludGVncmFseCAnNTYyNjdFLTUnICAgIC0+ICcxJyAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgwNjIgdG9pbnRlZ3JhbHggJzU2MjY3RS0yJyAgICAtPiAnNTYzJyAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDYzIHRvaW50ZWdyYWx4ICc1NjI2N0UtMScgICAgLT4gJzU2MjcnICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA2NSB0b2ludGVncmFseCAnNTYyNjdFLTAnICAgIC0+ICc1NjI2NycKK2ludHh4MDY2IHRvaW50ZWdyYWx4ICc1NjI2N0UrMCcgICAgLT4gJzU2MjY3JworaW50eHgwNjcgdG9pbnRlZ3JhbHggJzU2MjY3RSsxJyAgICAtPiAnNS42MjY3RSs1JworaW50eHgwNjggdG9pbnRlZ3JhbHggJzU2MjY3RSsyJyAgICAtPiAnNS42MjY3RSs2JworaW50eHgwNjkgdG9pbnRlZ3JhbHggJzU2MjY3RSszJyAgICAtPiAnNS42MjY3RSs3JworaW50eHgwNzAgdG9pbnRlZ3JhbHggJzU2MjY3RSs0JyAgICAtPiAnNS42MjY3RSs4JworaW50eHgwNzEgdG9pbnRlZ3JhbHggJzU2MjY3RSs1JyAgICAtPiAnNS42MjY3RSs5JworaW50eHgwNzIgdG9pbnRlZ3JhbHggJzU2MjY3RSs2JyAgICAtPiAnNS42MjY3RSsxMCcKK2ludHh4MDczIHRvaW50ZWdyYWx4ICcxLjIzRSs5NicgICAgLT4gJzEuMjNFKzk2JworaW50eHgwNzQgdG9pbnRlZ3JhbHggJzEuMjNFKzM4NCcgICAtPiAnMS4yM0UrMzg0JworaW50eHgwNzUgdG9pbnRlZ3JhbHggJzEuMjNFKzk5OScgICAtPiAnMS4yM0UrOTk5JworCitpbnR4eDA4MCB0b2ludGVncmFseCAnLTU2MjY3RS0xMCcgIC0+ICctMCcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgwODEgdG9pbnRlZ3JhbHggJy01NjI2N0UtNScgICAtPiAnLTEnICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MDgyIHRvaW50ZWdyYWx4ICctNTYyNjdFLTInICAgLT4gJy01NjMnICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDA4MyB0b2ludGVncmFseCAnLTU2MjY3RS0xJyAgIC0+ICctNTYyNycgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgwODUgdG9pbnRlZ3JhbHggJy01NjI2N0UtMCcgICAtPiAnLTU2MjY3JworaW50eHgwODYgdG9pbnRlZ3JhbHggJy01NjI2N0UrMCcgICAtPiAnLTU2MjY3JworaW50eHgwODcgdG9pbnRlZ3JhbHggJy01NjI2N0UrMScgICAtPiAnLTUuNjI2N0UrNScKK2ludHh4MDg4IHRvaW50ZWdyYWx4ICctNTYyNjdFKzInICAgLT4gJy01LjYyNjdFKzYnCitpbnR4eDA4OSB0b2ludGVncmFseCAnLTU2MjY3RSszJyAgIC0+ICctNS42MjY3RSs3JworaW50eHgwOTAgdG9pbnRlZ3JhbHggJy01NjI2N0UrNCcgICAtPiAnLTUuNjI2N0UrOCcKK2ludHh4MDkxIHRvaW50ZWdyYWx4ICctNTYyNjdFKzUnICAgLT4gJy01LjYyNjdFKzknCitpbnR4eDA5MiB0b2ludGVncmFseCAnLTU2MjY3RSs2JyAgIC0+ICctNS42MjY3RSsxMCcKK2ludHh4MDkzIHRvaW50ZWdyYWx4ICctMS4yM0UrOTYnICAgLT4gJy0xLjIzRSs5NicKK2ludHh4MDk0IHRvaW50ZWdyYWx4ICctMS4yM0UrMzg0JyAgLT4gJy0xLjIzRSszODQnCitpbnR4eDA5NSB0b2ludGVncmFseCAnLTEuMjNFKzk5OScgIC0+ICctMS4yM0UrOTk5JworCistLSBzdWJub3JtYWwgaW5wdXRzCitpbnR4eDEwMCB0b2ludGVncmFseCAgICAgICAgMUUtOTk5IC0+IDAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgxMDEgdG9pbnRlZ3JhbHggICAgICAwLjFFLTk5OSAtPiAwICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MTAyIHRvaW50ZWdyYWx4ICAgICAwLjAxRS05OTkgLT4gMCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDEwMyB0b2ludGVncmFseCAgICAgICAgMEUtOTk5IC0+IDAKKworLS0gc3BlY2lhbHMgYW5kIHplcm9zCitpbnR4eDEyMCB0b2ludGVncmFseCAnSW5mJyAgICAgICAtPiAgSW5maW5pdHkKK2ludHh4MTIxIHRvaW50ZWdyYWx4ICctSW5mJyAgICAgIC0+IC1JbmZpbml0eQoraW50eHgxMjIgdG9pbnRlZ3JhbHggICBOYU4gICAgICAgLT4gIE5hTgoraW50eHgxMjMgdG9pbnRlZ3JhbHggIHNOYU4gICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK2ludHh4MTI0IHRvaW50ZWdyYWx4ICAgICAwICAgICAgIC0+ICAwCitpbnR4eDEyNSB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMAoraW50eHgxMjYgdG9pbnRlZ3JhbHggICAgIDAuMDAwICAgLT4gIDAKK2ludHh4MTI3IHRvaW50ZWdyYWx4ICAgICAwLjAwICAgIC0+ICAwCitpbnR4eDEyOCB0b2ludGVncmFseCAgICAgMC4wICAgICAtPiAgMAoraW50eHgxMjkgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDAKK2ludHh4MTMwIHRvaW50ZWdyYWx4ICAgICAwRS0zICAgIC0+ICAwCitpbnR4eDEzMSB0b2ludGVncmFseCAgICAgMEUtMiAgICAtPiAgMAoraW50eHgxMzIgdG9pbnRlZ3JhbHggICAgIDBFLTEgICAgLT4gIDAKK2ludHh4MTMzIHRvaW50ZWdyYWx4ICAgICAwRS0wICAgIC0+ICAwCitpbnR4eDEzNCB0b2ludGVncmFseCAgICAgMEUrMSAgICAtPiAgMEUrMQoraW50eHgxMzUgdG9pbnRlZ3JhbHggICAgIDBFKzIgICAgLT4gIDBFKzIKK2ludHh4MTM2IHRvaW50ZWdyYWx4ICAgICAwRSszICAgIC0+ICAwRSszCitpbnR4eDEzNyB0b2ludGVncmFseCAgICAgMEUrNCAgICAtPiAgMEUrNAoraW50eHgxMzggdG9pbnRlZ3JhbHggICAgIDBFKzUgICAgLT4gIDBFKzUKK2ludHh4MTM5IHRvaW50ZWdyYWx4ICAgIC0wLjAwMCAgIC0+IC0wCitpbnR4eDE0MCB0b2ludGVncmFseCAgICAtMC4wMCAgICAtPiAtMAoraW50eHgxNDEgdG9pbnRlZ3JhbHggICAgLTAuMCAgICAgLT4gLTAKK2ludHh4MTQyIHRvaW50ZWdyYWx4ICAgIC0wICAgICAgIC0+IC0wCitpbnR4eDE0MyB0b2ludGVncmFseCAgICAtMEUtMyAgICAtPiAtMAoraW50eHgxNDQgdG9pbnRlZ3JhbHggICAgLTBFLTIgICAgLT4gLTAKK2ludHh4MTQ1IHRvaW50ZWdyYWx4ICAgIC0wRS0xICAgIC0+IC0wCitpbnR4eDE0NiB0b2ludGVncmFseCAgICAtMEUtMCAgICAtPiAtMAoraW50eHgxNDcgdG9pbnRlZ3JhbHggICAgLTBFKzEgICAgLT4gLTBFKzEKK2ludHh4MTQ4IHRvaW50ZWdyYWx4ICAgIC0wRSsyICAgIC0+IC0wRSsyCitpbnR4eDE0OSB0b2ludGVncmFseCAgICAtMEUrMyAgICAtPiAtMEUrMworaW50eHgxNTAgdG9pbnRlZ3JhbHggICAgLTBFKzQgICAgLT4gLTBFKzQKK2ludHh4MTUxIHRvaW50ZWdyYWx4ICAgIC0wRSs1ICAgIC0+IC0wRSs1CistLSBwcm9wYWdhdGluZyBOYU5zCitpbnR4eDE1MiB0b2ludGVncmFseCAgIE5hTjgwOCAgICAtPiAgTmFOODA4CitpbnR4eDE1MyB0b2ludGVncmFseCAgc05hTjA4MCAgICAtPiAgTmFOODAgIEludmFsaWRfb3BlcmF0aW9uCitpbnR4eDE1NCB0b2ludGVncmFseCAgLU5hTjgwOCAgICAtPiAtTmFOODA4CitpbnR4eDE1NSB0b2ludGVncmFseCAtc05hTjA4MCAgICAtPiAtTmFOODAgIEludmFsaWRfb3BlcmF0aW9uCitpbnR4eDE1NiB0b2ludGVncmFseCAgLU5hTiAgICAgICAtPiAtTmFOCitpbnR4eDE1NyB0b2ludGVncmFseCAtc05hTiAgICAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIGV4YW1wbGVzCityb3VuZGluZzogICAgaGFsZl91cAorcHJlY2lzaW9uOiAgIDkKK2ludHh4MjAwIHRvaW50ZWdyYWx4ICAgICAyLjEgICAgLT4gMiAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIwMSB0b2ludGVncmFseCAgIDEwMCAgICAgIC0+IDEwMAoraW50eHgyMDIgdG9pbnRlZ3JhbHggICAxMDAuMCAgICAtPiAxMDAgICAgICAgICAgICAgICAgICBSb3VuZGVkCitpbnR4eDIwMyB0b2ludGVncmFseCAgIDEwMS41ICAgIC0+IDEwMiAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMDQgdG9pbnRlZ3JhbHggIC0xMDEuNSAgICAtPiAtMTAyICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjA1IHRvaW50ZWdyYWx4ICAgMTBFKzUgICAgLT4gMS4wRSs2CitpbnR4eDIwNiB0b2ludGVncmFseCAgNy44OUUrNzcgIC0+IDcuODlFKzc3CitpbnR4eDIwNyB0b2ludGVncmFseCAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQorCisKKy0tIGFsbCByb3VuZGluZyBtb2Rlcworcm91bmRpbmc6ICAgIGhhbGZfZXZlbgorCitpbnR4eDIxMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMTEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjEyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU4ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIxMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMTQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjE1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU4ICAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBoYWxmX3VwCisKK2ludHh4MjIwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIyMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMjIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjIzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIyNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMjUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGhhbGZfZG93bgorCitpbnR4eDIzMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NSAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMzEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjMyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDIzMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NSAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyMzQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjM1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICB1cAorCitpbnR4eDI0MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNDEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjQyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI0MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNDQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjQ1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU4ICAgSW5leGFjdCBSb3VuZGVkCisKK3JvdW5kaW5nOiAgICBkb3duCisKK2ludHh4MjUwIHRvaW50ZWdyYWx4ICAgICA1NS43ICAgLT4gIDU1ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI1MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNTIgdG9pbnRlZ3JhbHggICAgIDU3LjcgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjUzIHRvaW50ZWdyYWx4ICAgIC01NS43ICAgLT4gLTU1ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI1NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNTUgdG9pbnRlZ3JhbHggICAgLTU3LjcgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQKKworcm91bmRpbmc6ICAgIGNlaWxpbmcKKworaW50eHgyNjAgdG9pbnRlZ3JhbHggICAgIDU1LjMgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjYxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI2MiB0b2ludGVncmFseCAgICAgNTcuMyAgIC0+ICA1OCAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNjMgdG9pbnRlZ3JhbHggICAgLTU1LjMgICAtPiAtNTUgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjY0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI2NSB0b2ludGVncmFseCAgICAtNTcuMyAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZAorCityb3VuZGluZzogICAgZmxvb3IKKworaW50eHgyNzAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4MjcxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI3MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZAoraW50eHgyNzMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQKK2ludHh4Mjc0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkCitpbnR4eDI3NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01OCAgIEluZXhhY3QgUm91bmRlZAorCistLSBJbnQgYW5kIHVJbnQzMiBlZGdlIHZhbHVlcyBmb3IgdGVzdGluZyBjb252ZXJzaW9ucworcHJlY2lzaW9uOiAxNgoraW50eHgzMDAgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDYgIC0+IC0yMTQ3NDgzNjQ2CitpbnR4eDMwMSB0b2ludGVncmFseCAtMjE0NzQ4MzY0NyAgLT4gLTIxNDc0ODM2NDcKK2ludHh4MzAyIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ4ICAtPiAtMjE0NzQ4MzY0OAoraW50eHgzMDMgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDkgIC0+IC0yMTQ3NDgzNjQ5CitpbnR4eDMwNCB0b2ludGVncmFseCAgMjE0NzQ4MzY0NiAgLT4gIDIxNDc0ODM2NDYKK2ludHh4MzA1IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ3ICAtPiAgMjE0NzQ4MzY0NworaW50eHgzMDYgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDggIC0+ICAyMTQ3NDgzNjQ4CitpbnR4eDMwNyB0b2ludGVncmFseCAgMjE0NzQ4MzY0OSAgLT4gIDIxNDc0ODM2NDkKK2ludHh4MzA4IHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk0ICAtPiAgNDI5NDk2NzI5NAoraW50eHgzMDkgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTUgIC0+ICA0Mjk0OTY3Mjk1CitpbnR4eDMxMCB0b2ludGVncmFseCAgNDI5NDk2NzI5NiAgLT4gIDQyOTQ5NjcyOTYKK2ludHh4MzExIHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk3ICAtPiAgNDI5NDk2NzI5NwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS94b3IuZGVjVGVzdCBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEveG9yLmRlY1Rlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIyOTc2ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9kZWNpbWFsdGVzdGRhdGEveG9yLmRlY1Rlc3QKQEAgLTAsMCArMSwzMzUgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0geG9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgWE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordmVyc2lvbjogMi41OQorCitleHRlbmRlZDogICAgMQorcHJlY2lzaW9uOiAgIDkKK3JvdW5kaW5nOiAgICBoYWxmX3VwCittYXhFeHBvbmVudDogOTk5CittaW5FeHBvbmVudDogLTk5OQorCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQoreG9yeDAwMSB4b3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKK3hvcngwMDIgeG9yICAgICAgICAgICAgIDAgICAgMSAtPiAgICAxCit4b3J4MDAzIHhvciAgICAgICAgICAgICAxICAgIDAgLT4gICAgMQoreG9yeDAwNCB4b3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDAKK3hvcngwMDUgeG9yICAgICAgICAgIDExMDAgMTAxMCAtPiAgMTEwCit4b3J4MDA2IHhvciAgICAgICAgICAxMTExICAgMTAgLT4gMTEwMQorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKK3hvcngwMTAgeG9yIDAwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK3hvcngwMTEgeG9yIDAwMDAwMDAwMCAxMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAKK3hvcngwMTIgeG9yIDEwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAKK3hvcngwMTMgeG9yIDEwMDAwMDAwMCAxMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK3hvcngwMTQgeG9yIDAwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKK3hvcngwMTUgeG9yIDAwMDAwMDAwMCAwMTAwMDAwMDAgLT4gICAgMTAwMDAwMDAKK3hvcngwMTYgeG9yIDAxMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAKK3hvcngwMTcgeG9yIDAxMDAwMDAwMCAwMTAwMDAwMDAgLT4gICAgICAgICAgIDAKKworLS0gVmFyaW91cyBsZW5ndGhzCistLSAgICAgICAgMTIzNDU2Nzg5ICAgICAxMjM0NTY3ODkgICAgICAxMjM0NTY3ODkKK3hvcngwMjEgeG9yIDExMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMAoreG9yeDAyMiB4b3IgMTExMTExMTExMTExICAxMTExMTExMTEgIC0+ICAwCit4b3J4MDIzIHhvciAgMTExMTExMTEgICAgICAxMTExMTExMSAgLT4gIDAKK3hvcngwMjUgeG9yICAgMTExMTExMSAgICAgICAxMTExMTExICAtPiAgMAoreG9yeDAyNiB4b3IgICAgMTExMTExICAgICAgICAxMTExMTEgIC0+ICAwCit4b3J4MDI3IHhvciAgICAgMTExMTEgICAgICAgICAxMTExMSAgLT4gIDAKK3hvcngwMjggeG9yICAgICAgMTExMSAgICAgICAgICAxMTExICAtPiAgMAoreG9yeDAyOSB4b3IgICAgICAgMTExICAgICAgICAgICAxMTEgIC0+ICAwCit4b3J4MDMxIHhvciAgICAgICAgMTEgICAgICAgICAgICAxMSAgLT4gIDAKK3hvcngwMzIgeG9yICAgICAgICAgMSAgICAgICAgICAgICAxICAtPiAgMAoreG9yeDAzMyB4b3IgMTExMTExMTExMTExIDExMTExMTExMTEgIC0+ICAwCit4b3J4MDM0IHhvciAxMTExMTExMTExMSAxMTExMTExMTExMSAgLT4gIDAKK3hvcngwMzUgeG9yIDExMTExMTExMTEgMTExMTExMTExMTExICAtPiAgMAoreG9yeDAzNiB4b3IgMTExMTExMTExIDExMTExMTExMTExMTEgIC0+ICAwCisKK3hvcngwNDAgeG9yIDExMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMAoreG9yeDA0MSB4b3IgIDExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMDAwMDAwMDAKK3hvcngwNDIgeG9yICAxMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTAwMDAwMDAwCit4b3J4MDQzIHhvciAgIDExMTExMTEgICAgIDEwMDAwMDAxMCAgLT4gIDEwMTExMTEwMQoreG9yeDA0NCB4b3IgICAgMTExMTExICAgICAxMDAwMDAxMDAgIC0+ICAxMDAxMTEwMTEKK3hvcngwNDUgeG9yICAgICAxMTExMSAgICAgMTAwMDAxMDAwICAtPiAgMTAwMDEwMTExCit4b3J4MDQ2IHhvciAgICAgIDExMTEgICAgIDEwMDAxMDAwMCAgLT4gIDEwMDAxMTExMQoreG9yeDA0NyB4b3IgICAgICAgMTExICAgICAxMDAxMDAwMDAgIC0+ICAxMDAxMDAxMTEKK3hvcngwNDggeG9yICAgICAgICAxMSAgICAgMTAxMDAwMDAwICAtPiAgMTAxMDAwMDExCit4b3J4MDQ5IHhvciAgICAgICAgIDEgICAgIDExMDAwMDAwMCAgLT4gIDExMDAwMDAwMQorCit4b3J4MDUwIHhvciAxMTExMTExMTExICAxICAtPiAgMTExMTExMTEwCit4b3J4MDUxIHhvciAgMTExMTExMTExICAxICAtPiAgMTExMTExMTEwCit4b3J4MDUyIHhvciAgIDExMTExMTExICAxICAtPiAgMTExMTExMTAKK3hvcngwNTMgeG9yICAgIDExMTExMTEgIDEgIC0+ICAxMTExMTEwCit4b3J4MDU0IHhvciAgICAgMTExMTExICAxICAtPiAgMTExMTEwCit4b3J4MDU1IHhvciAgICAgIDExMTExICAxICAtPiAgMTExMTAKK3hvcngwNTYgeG9yICAgICAgIDExMTEgIDEgIC0+ICAxMTEwCit4b3J4MDU3IHhvciAgICAgICAgMTExICAxICAtPiAgMTEwCit4b3J4MDU4IHhvciAgICAgICAgIDExICAxICAtPiAgMTAKK3hvcngwNTkgeG9yICAgICAgICAgIDEgIDEgIC0+ICAwCisKK3hvcngwNjAgeG9yIDExMTExMTExMTEgIDAgIC0+ICAxMTExMTExMTEKK3hvcngwNjEgeG9yICAxMTExMTExMTEgIDAgIC0+ICAxMTExMTExMTEKK3hvcngwNjIgeG9yICAgMTExMTExMTEgIDAgIC0+ICAxMTExMTExMQoreG9yeDA2MyB4b3IgICAgMTExMTExMSAgMCAgLT4gIDExMTExMTEKK3hvcngwNjQgeG9yICAgICAxMTExMTEgIDAgIC0+ICAxMTExMTEKK3hvcngwNjUgeG9yICAgICAgMTExMTEgIDAgIC0+ICAxMTExMQoreG9yeDA2NiB4b3IgICAgICAgMTExMSAgMCAgLT4gIDExMTEKK3hvcngwNjcgeG9yICAgICAgICAxMTEgIDAgIC0+ICAxMTEKK3hvcngwNjggeG9yICAgICAgICAgMTEgIDAgIC0+ICAxMQoreG9yeDA2OSB4b3IgICAgICAgICAgMSAgMCAgLT4gIDEKKworeG9yeDA3MCB4b3IgMSAgMTExMTExMTExMSAgLT4gIDExMTExMTExMAoreG9yeDA3MSB4b3IgMSAgIDExMTExMTExMSAgLT4gIDExMTExMTExMAoreG9yeDA3MiB4b3IgMSAgICAxMTExMTExMSAgLT4gIDExMTExMTEwCit4b3J4MDczIHhvciAxICAgICAxMTExMTExICAtPiAgMTExMTExMAoreG9yeDA3NCB4b3IgMSAgICAgIDExMTExMSAgLT4gIDExMTExMAoreG9yeDA3NSB4b3IgMSAgICAgICAxMTExMSAgLT4gIDExMTEwCit4b3J4MDc2IHhvciAxICAgICAgICAxMTExICAtPiAgMTExMAoreG9yeDA3NyB4b3IgMSAgICAgICAgIDExMSAgLT4gIDExMAoreG9yeDA3OCB4b3IgMSAgICAgICAgICAxMSAgLT4gIDEwCit4b3J4MDc5IHhvciAxICAgICAgICAgICAxICAtPiAgMAorCit4b3J4MDgwIHhvciAwICAxMTExMTExMTExICAtPiAgMTExMTExMTExCit4b3J4MDgxIHhvciAwICAgMTExMTExMTExICAtPiAgMTExMTExMTExCit4b3J4MDgyIHhvciAwICAgIDExMTExMTExICAtPiAgMTExMTExMTEKK3hvcngwODMgeG9yIDAgICAgIDExMTExMTEgIC0+ICAxMTExMTExCit4b3J4MDg0IHhvciAwICAgICAgMTExMTExICAtPiAgMTExMTExCit4b3J4MDg1IHhvciAwICAgICAgIDExMTExICAtPiAgMTExMTEKK3hvcngwODYgeG9yIDAgICAgICAgIDExMTEgIC0+ICAxMTExCit4b3J4MDg3IHhvciAwICAgICAgICAgMTExICAtPiAgMTExCit4b3J4MDg4IHhvciAwICAgICAgICAgIDExICAtPiAgMTEKK3hvcngwODkgeG9yIDAgICAgICAgICAgIDEgIC0+ICAxCisKK3hvcngwOTAgeG9yIDAxMTExMTExMSAgMTExMTAxMTExICAtPiAgMTAwMDEwMDAwCit4b3J4MDkxIHhvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gICAxMDAxMDAwMAoreG9yeDA5MiB4b3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAgIDEwMTAwMDAKK3hvcngwOTMgeG9yIDExMTAxMTExMSAgMTExMTAxMTExICAtPiAgICAgMTEwMDAwCit4b3J4MDk0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMAoreG9yeDA5NSB4b3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAgICAgMTEwMDAKK3hvcngwOTYgeG9yIDExMTExMTAxMSAgMTExMTAxMTExICAtPiAgICAgIDEwMTAwCit4b3J4MDk3IHhvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gICAgICAxMDAxMAoreG9yeDA5OCB4b3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAgICAgMTAwMDEKKworeG9yeDEwMCB4b3IgMTExMTAxMTExICAwMTExMTExMTEgIC0+ICAxMDAwMTAwMDAKK3hvcngxMDEgeG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgIDEwMDEwMDAwCit4b3J4MTAyIHhvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gICAgMTAxMDAwMAoreG9yeDEwMyB4b3IgMTExMTAxMTExICAxMTEwMTExMTEgIC0+ICAgICAxMTAwMDAKK3hvcngxMDQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwCit4b3J4MTA1IHhvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gICAgICAxMTAwMAoreG9yeDEwNiB4b3IgMTExMTAxMTExICAxMTExMTEwMTEgIC0+ICAgICAgMTAxMDAKK3hvcngxMDcgeG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgICAgIDEwMDEwCit4b3J4MTA4IHhvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gICAgICAxMDAwMQorCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMKK3hvcngyMjAgeG9yIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjIxIHhvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIyMiB4b3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMjMgeG9yIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjI0IHhvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIyNSB4b3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMjYgeG9yIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjI3IHhvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIyOCB4b3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMjkgeG9yIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjMwIHhvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDIzMSB4b3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyMzIgeG9yIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSBhIGZldyByYW5kb21zCit4b3J4MjQwIHhvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI0MSB4b3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyNDIgeG9yIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjQzIHhvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI0NCB4b3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHRlc3QgTVNECit4b3J4MjUwIHhvciAgMjAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjUxIHhvciAgNzAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjUyIHhvciAgODAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjUzIHhvciAgOTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjU0IHhvciAgMjAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjU1IHhvciAgNzAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjU2IHhvciAgODAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjU3IHhvciAgOTAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjU4IHhvciAgMTAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjU5IHhvciAgMTAwMDAwMDAwIDcwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjYwIHhvciAgMTAwMDAwMDAwIDgwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjYxIHhvciAgMTAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjYyIHhvciAgMDAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjYzIHhvciAgMDAwMDAwMDAwIDcwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjY0IHhvciAgMDAwMDAwMDAwIDgwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjY1IHhvciAgMDAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IE1TRC0xCit4b3J4MjcwIHhvciAgMDIwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjcxIHhvciAgMDcwMTAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjcyIHhvciAgMDgwMDEwMDAwIDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4MjczIHhvciAgMDkwMDAxMDAwIDEwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjc0IHhvciAgMTAwMDAwMTAwIDAyMDAxMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjc1IHhvciAgMTAwMDAwMDAwIDA3MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjc2IHhvciAgMTAwMDAwMDEwIDA4MDAxMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjc3IHhvciAgMTAwMDAwMDAwIDA5MDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCistLSB0ZXN0IExTRAoreG9yeDI4MCB4b3IgIDAwMTAwMDAwMiAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI4MSB4b3IgIDAwMDAwMDAwNyAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI4MiB4b3IgIDAwMDAwMDAwOCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI4MyB4b3IgIDAwMDAwMDAwOSAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI4NCB4b3IgIDEwMDAwMDAwMCAwMDAxMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI4NSB4b3IgIDEwMDEwMDAwMCAwMDEwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI4NiB4b3IgIDEwMDAxMDAwMCAwMTAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI4NyB4b3IgIDEwMDAwMTAwMCAxMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0gdGVzdCBNaWRkaWUKK3hvcngyODggeG9yICAwMDEwMjAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyODkgeG9yICAwMDAwNzAwMDEgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyOTAgeG9yICAwMDAwODAwMDAgMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyOTEgeG9yICAwMDAwOTAwMDAgMTAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyOTIgeG9yICAxMDAwMDAwMTAgMDAwMDIwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyOTMgeG9yICAxMDAxMDAwMDAgMDAwMDcwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyOTQgeG9yICAxMDAwMTAxMDAgMDAwMDgwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyOTUgeG9yICAxMDAwMDEwMDAgMDAwMDkwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tIHNpZ25zCit4b3J4Mjk2IHhvciAtMTAwMDAxMDAwIC0wMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDI5NyB4b3IgLTEwMDAwMTAwMCAgMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngyOTggeG9yICAxMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4Mjk5IHhvciAgMTAwMDAxMDAwICAwMDAwMTEwMDAgLT4gIDEwMDAxMDAwMAorCistLSBObWF4LCBObWluLCBOdGlueQoreG9yeDMzMSB4b3IgIDIgICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDMzMiB4b3IgIDMgICAxRS05OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDMzMyB4b3IgIDQgICAxLjAwMDAwMDAwRS05OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDMzNCB4b3IgIDUgICAxRS0xMDA3ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDMzNSB4b3IgIDYgICAtMUUtMTAwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDMzNiB4b3IgIDcgICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDMzNyB4b3IgIDggICAtMUUtOTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDMzOCB4b3IgIDkgICAtOS45OTk5OTk5OUUrOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM0MSB4b3IgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM0MiB4b3IgIDFFLTk5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM0MyB4b3IgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM0NCB4b3IgIDFFLTEwMDcgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM0NSB4b3IgIC0xRS0xMDA3ICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM0NiB4b3IgIC0xLjAwMDAwMDAwRS05OTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM0NyB4b3IgIC0xRS05OTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDM0OCB4b3IgIC05Ljk5OTk5OTk5RSs5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKK3hvcngzNjEgeG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNjIgeG9yICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNjMgeG9yICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNjQgeG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNjUgeG9yICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNjYgeG9yICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNzEgeG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNzIgeG9yICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNzMgeG9yICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNzQgeG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNzUgeG9yICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcngzNzYgeG9yICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgoreG9yeDc4MCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDc4MSB4b3IgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDc4MiB4b3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDc4MyB4b3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDc4NCB4b3IgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDc4NSB4b3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDc4NiB4b3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDc4NyB4b3IgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDc4OCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDc4OSB4b3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDc5MCB4b3IgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDc5MSB4b3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDc5MiB4b3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDc5MyB4b3IgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDc5NCB4b3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorCit4b3J4ODAwIHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODAxIHhvciAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODAyIHhvciAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODAzIHhvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODA0IHhvciAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODA1IHhvciAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODA2IHhvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODA3IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODA4IHhvciAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODA5IHhvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODEwIHhvciAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODExIHhvciAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODEyIHhvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODEzIHhvciAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODE0IHhvciAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODE1IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCisKK3hvcng4MjEgeG9yICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MjIgeG9yICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MjMgeG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MjQgeG9yICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MjUgeG9yICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MjYgeG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MjcgeG9yICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MjggeG9yICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MjkgeG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MzAgeG9yIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MzEgeG9yIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MzIgeG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MzMgeG9yIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MzQgeG9yICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MzUgeG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MzYgeG9yICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4MzcgeG9yICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKworeG9yeDg0MSB4b3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODQyIHhvciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NDMgeG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg0NCB4b3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODQ1IHhvciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NDYgeG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg0NyB4b3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODQ4IHhvciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NDkgeG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg1MCB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODUxIHhvciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NTIgeG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg1MyB4b3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODU0IHhvciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NTUgeG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg1NiB4b3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCit4b3J4ODU3IHhvciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NTggeG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoreG9yeDg1OSB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCisKKy0tIHByb3BhZ2F0aW5nIE5hTnMKK3hvcng4NjEgeG9yICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NjIgeG9yICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NjMgeG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NjQgeG9yICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NjUgeG9yICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NjYgeG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NjcgeG9yIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NjggeG9yICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NjkgeG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NzEgeG9yICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NzIgeG9yICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NzMgeG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NzQgeG9yICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NzUgeG9yICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NzYgeG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NzcgeG9yIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NzggeG9yIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4NzkgeG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4ODAgeG9yICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4ODEgeG9yICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4ODIgeG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4ODMgeG9yIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4ODQgeG9yICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KK3hvcng4ODUgeG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kb2N0ZXN0X2FsaWFzZXMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvZG9jdGVzdF9hbGlhc2VzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMzNmODMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZG9jdGVzdF9hbGlhc2VzLnB5CkBAIC0wLDAgKzEsMTMgQEAKKyMgVXNlZCBieSB0ZXN0X2RvY3Rlc3QucHkuCisKK2NsYXNzIFR3b05hbWVzOgorICAgICcnJ2YoKSBhbmQgZygpIGFyZSB0d28gbmFtZXMgZm9yIHRoZSBzYW1lIG1ldGhvZCcnJworCisgICAgZGVmIGYoc2VsZik6CisgICAgICAgICcnJworICAgICAgICA+Pj4gcHJpbnQgVHdvTmFtZXMoKS5mKCkKKyAgICAgICAgZgorICAgICAgICAnJycKKyAgICAgICAgcmV0dXJuICdmJworCisgICAgZyA9IGYgIyBkZWZpbmUgYW4gYWxpYXMgZm9yIGYKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9kb3VibGVfY29uc3QucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvZG91YmxlX2NvbnN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YzMzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZG91YmxlX2NvbnN0LnB5CkBAIC0wLDAgKzEsMzAgQEAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRlc3RGYWlsZWQKKworIyBBIHRlc3QgZm9yIFNGIGJ1ZyA0MjIxNzc6ICBtYW5pZmVzdCBmbG9hdCBjb25zdGFudHMgdmFyaWVkIHdheSB0b28gbXVjaCBpbgorIyBwcmVjaXNpb24gZGVwZW5kaW5nIG9uIHdoZXRoZXIgUHl0aG9uIHdhcyBsb2FkaW5nIGEgbW9kdWxlIGZvciB0aGUgZmlyc3QKKyMgdGltZSwgb3IgcmVsb2FkaW5nIGl0IGZyb20gYSBwcmVjb21waWxlZCAucHljLiAgVGhlICJleHBlY3RlZCIgZmFpbHVyZQorIyBtb2RlIGlzIHRoYXQgd2hlbiB0ZXN0X2ltcG9ydCBpbXBvcnRzIHRoaXMgYWZ0ZXIgYWxsIC5weWMgZmlsZXMgaGF2ZSBiZWVuCisjIGVyYXNlZCwgaXQgcGFzc2VzLCBidXQgd2hlbiB0ZXN0X2ltcG9ydCBpbXBvcnRzIHRoaXMgZnJvbQorIyBkb3VibGVfY29uc3QucHljLCBpdCBmYWlscy4gIFRoaXMgaW5kaWNhdGVzIGEgd29lZnVsIGxvc3Mgb2YgcHJlY2lzaW9uIGluCisjIHRoZSBtYXJzaGFsIGZvcm1hdCBmb3IgZG91Ymxlcy4gIEl0J3MgYWxzbyBwb3NzaWJsZSB0aGF0IHJlcHIoKSBkb2Vzbid0CisjIHByb2R1Y2UgZW5vdWdoIGRpZ2l0cyB0byBnZXQgcmVhc29uYWJsZSBwcmVjaXNpb24gZm9yIHRoaXMgYm94LgorCitQSSAgICA9IDMuMTQxNTkyNjUzNTg5NzkzMjQKK1RXT1BJID0gNi4yODMxODUzMDcxNzk1ODY0OAorCitQSV9zdHIgICAgPSAiMy4xNDE1OTI2NTM1ODk3OTMyNCIKK1RXT1BJX3N0ciA9ICI2LjI4MzE4NTMwNzE3OTU4NjQ4IgorCisjIFZlcmlmeSB0aGF0IHRoZSBkb3VibGUgeCBpcyB3aXRoaW4gYSBmZXcgYml0cyBvZiBldmFsKHhfc3RyKS4KK2RlZiBjaGVja19vayh4LCB4X3N0cik6CisgICAgYXNzZXJ0IHggPiAwLjAKKyAgICB4MiA9IGV2YWwoeF9zdHIpCisgICAgYXNzZXJ0IHgyID4gMC4wCisgICAgZGlmZiA9IGFicyh4IC0geDIpCisgICAgIyBJZiBkaWZmIGlzIG5vIGxhcmdlciB0aGFuIDMgVUxQICh3cnQgeDIpLCB0aGVuIGRpZmYvOCBpcyBubyBsYXJnZXIKKyAgICAjIHRoYW4gMC4zNzUgVUxQLCBzbyBhZGRpbmcgZGlmZi84IHRvIHgyIHNob3VsZCBoYXZlIG5vIGVmZmVjdC4KKyAgICBpZiB4MiArIChkaWZmIC8gOC4pICE9IHgyOgorICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCJNYW5pZmVzdCBjb25zdCAlcyBsb3N0IHRvbyBtdWNoIHByZWNpc2lvbiAiICUgeF9zdHIpCisKK2NoZWNrX29rKFBJLCBQSV9zdHIpCitjaGVja19vayhUV09QSSwgVFdPUElfc3RyKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2VtcHR5LnZicyBiL2xpYi9weXRob24yLjcvdGVzdC9lbXB0eS52YnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM1ZjA3NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9lbXB0eS52YnMKQEAgLTAsMCArMSBAQAorJ0VtcHR5IFZCUyBmaWxlLCBkb2VzIG5vdGhpbmcuICBIZWxwZXIgZm9yIExpYlx0ZXN0XHRlc3Rfc3RhcnRmaWxlLnB5LgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9leGNlcHRpb25faGllcmFyY2h5LnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC9leGNlcHRpb25faGllcmFyY2h5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmI2ZGRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2V4Y2VwdGlvbl9oaWVyYXJjaHkudHh0CkBAIC0wLDAgKzEsNTAgQEAKK0Jhc2VFeGNlcHRpb24KKyArLS0gU3lzdGVtRXhpdAorICstLSBLZXlib2FyZEludGVycnVwdAorICstLSBHZW5lcmF0b3JFeGl0CisgKy0tIEV4Y2VwdGlvbgorICAgICAgKy0tIFN0b3BJdGVyYXRpb24KKyAgICAgICstLSBTdGFuZGFyZEVycm9yCisgICAgICB8ICAgICstLSBCdWZmZXJFcnJvcgorICAgICAgfCAgICArLS0gQXJpdGhtZXRpY0Vycm9yCisgICAgICB8ICAgIHwgICAgKy0tIEZsb2F0aW5nUG9pbnRFcnJvcgorICAgICAgfCAgICB8ICAgICstLSBPdmVyZmxvd0Vycm9yCisgICAgICB8ICAgIHwgICAgKy0tIFplcm9EaXZpc2lvbkVycm9yCisgICAgICB8ICAgICstLSBBc3NlcnRpb25FcnJvcgorICAgICAgfCAgICArLS0gQXR0cmlidXRlRXJyb3IKKyAgICAgIHwgICAgKy0tIEVudmlyb25tZW50RXJyb3IKKyAgICAgIHwgICAgfCAgICArLS0gSU9FcnJvcgorICAgICAgfCAgICB8ICAgICstLSBPU0Vycm9yCisgICAgICB8ICAgIHwgICAgICAgICArLS0gV2luZG93c0Vycm9yIChXaW5kb3dzKQorICAgICAgfCAgICB8ICAgICAgICAgKy0tIFZNU0Vycm9yIChWTVMpCisgICAgICB8ICAgICstLSBFT0ZFcnJvcgorICAgICAgfCAgICArLS0gSW1wb3J0RXJyb3IKKyAgICAgIHwgICAgKy0tIExvb2t1cEVycm9yCisgICAgICB8ICAgIHwgICAgKy0tIEluZGV4RXJyb3IKKyAgICAgIHwgICAgfCAgICArLS0gS2V5RXJyb3IKKyAgICAgIHwgICAgKy0tIE1lbW9yeUVycm9yCisgICAgICB8ICAgICstLSBOYW1lRXJyb3IKKyAgICAgIHwgICAgfCAgICArLS0gVW5ib3VuZExvY2FsRXJyb3IKKyAgICAgIHwgICAgKy0tIFJlZmVyZW5jZUVycm9yCisgICAgICB8ICAgICstLSBSdW50aW1lRXJyb3IKKyAgICAgIHwgICAgfCAgICArLS0gTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgfCAgICArLS0gU3ludGF4RXJyb3IKKyAgICAgIHwgICAgfCAgICArLS0gSW5kZW50YXRpb25FcnJvcgorICAgICAgfCAgICB8ICAgICAgICAgKy0tIFRhYkVycm9yCisgICAgICB8ICAgICstLSBTeXN0ZW1FcnJvcgorICAgICAgfCAgICArLS0gVHlwZUVycm9yCisgICAgICB8ICAgICstLSBWYWx1ZUVycm9yCisgICAgICB8ICAgICAgICAgKy0tIFVuaWNvZGVFcnJvcgorICAgICAgfCAgICAgICAgICAgICAgKy0tIFVuaWNvZGVEZWNvZGVFcnJvcgorICAgICAgfCAgICAgICAgICAgICAgKy0tIFVuaWNvZGVFbmNvZGVFcnJvcgorICAgICAgfCAgICAgICAgICAgICAgKy0tIFVuaWNvZGVUcmFuc2xhdGVFcnJvcgorICAgICAgKy0tIFdhcm5pbmcKKyAgICAgICAgICAgKy0tIERlcHJlY2F0aW9uV2FybmluZworICAgICAgICAgICArLS0gUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZworICAgICAgICAgICArLS0gUnVudGltZVdhcm5pbmcKKyAgICAgICAgICAgKy0tIFN5bnRheFdhcm5pbmcKKyAgICAgICAgICAgKy0tIFVzZXJXYXJuaW5nCisgICAgICAgICAgICstLSBGdXR1cmVXYXJuaW5nCisJICAgKy0tIEltcG9ydFdhcm5pbmcKKwkgICArLS0gVW5pY29kZVdhcm5pbmcKKwkgICArLS0gQnl0ZXNXYXJuaW5nCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvZmxvYXRpbmdfcG9pbnRzLnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC9mbG9hdGluZ19wb2ludHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOTA3M2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvZmxvYXRpbmdfcG9pbnRzLnR4dApAQCAtMCwwICsxLDEwMjggQEAKKyMgVGhlc2UgbnVtYmVycyBhcmUgdXNlZCB0byB0ZXN0IGZsb2F0aW5nIHBvaW50IGJpbmFyeS10by1kZWNpbWFsIGNvbnZlcnNpb24uCisjIFRoZXkgYXJlIGJhc2VkIG9uIHRoZSBUQ0wgdGVzdCBzdWl0ZSAodGVzdHMvZXhwci50ZXN0KSwgd2hpY2ggaXMgYmFzZWQgb24KKyMgdGVzdCBkYXRhIGZyb206CisjIEJyaWdpdHRlIFZlcmRvbmssIEFubmllIEN1eXQsIERlbm5pcyBWZXJzY2hhZXJlbiwgQSBwcmVjaXNpb24gYW5kIHJhbmdlCisjIGluZGVwZW5kZW50IHRvb2wgZm9yIHRlc3RpbmcgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyBJSTogQ29udmVyc2lvbnMsCisjIEFDTSBUcmFuc2FjdGlvbnMgb24gTWF0aGVtYXRpY2FsIFNvZnR3YXJlIDI3OjIgKE1hcmNoIDIwMDEpLCBwcC4gMTE5LTE0MC4KKworMEUwCistMEUwCisxRTAKKzE1RS0xCisxMjVFLTIKKzExMjVFLTMKKzEwNjI1RS00CisxMDMxMjVFLTUKKzEwMTU2MjVFLTYKKzEwMDc4MTI1RS03CisxMDAzOTA2MjVFLTgKKzEwMDE5NTMxMjVFLTkKKzEwMDA5NzY1NjI1RS0xMAorMTAwMDQ4ODI4MTI1RS0xMQorMTAwMDI0NDE0MDYyNUUtMTIKKzEwMDAxMjIwNzAzMTI1RS0xMworMTAwMDA2MTAzNTE1NjI1RS0xNAorMTAwMDAzMDUxNzU3ODEyNUUtMTUKKzEwMDAwMTUyNTg3ODkwNjI1RS0xNgorKzhFMTUzCistMUUxNTMKKys5RTMwNgorLTJFMTUzCisrN0UtMzA0CistM0UtNDkKKys3RS0zMDMKKy02RS00OQorKzlFNDMKKy05RTQ0CisrOEUzMDMKKy0xRTMwMworKzdFLTI4NworLTJFLTIwNAorKzJFLTIwNQorLTlFLTQ3CisrMzRFMTk1CistNjhFMTk1CisrODVFMTk0CistNjdFOTcKKys5M0UtMjM0CistMTlFLTg3CisrMzhFLTg3CistMzhFLTg4CistNjlFMjIwCisrMThFNDMKKy0zNkU0MworKzYxRS05OQorLTQzRS05MgorKzg2RS05MgorLTUxRS03NAorKzI4M0U4NQorLTU2NkU4NQorKzU4OUUxODcKKy04MzlFMTQzCistNzQ0RS0yMzQKKys5MzBFLTIzNQorLTE4NkUtMjM0CisrNjA0RTE3NQorLTMwMkUxNzUKKys3NTVFMTc0CistMTUxRTE3NQorKzY2MkUtMjEzCistNDA4RS03NAorKzUxMEUtNzUKKys2NzgyRTU1CistMjMwOUU5MgorKzc5NjNFMzQKKy0zMzkxRTU1CisrNzkwM0UtOTYKKy03NjExRS0yMjYKKys0OTA3RS0xOTYKKy01NTQ3RS0zMTEKKys1MzExRTI0MQorLTUzMTFFMjQzCisrNTMxMUUyNDIKKys5MjY5RS00NQorLTg1NTlFLTI4OQorKzg2OTlFLTI3NgorLTgwODVFLTY0CisrNzQ4MTlFMjAxCistODIwODFFNDEKKys1MTg4MUUzNworLTU1MDYxRTE1NworKzc3NDAyRS0yMTUKKy0zMzg5MUUtOTIKKyszODcwMUUtMjE1CistODIxMzlFLTc2CisrNzU4NTlFMjUKKys4OTUwOUUxNDAKKy01NzUzM0UyODcKKys0NjA3M0UtMzIKKy05MjE0NkUtMzIKKys4Mzc3MUUtNzQKKy0zNDc5NkUtMjc2CisrNTg0MTY5RTIyOQorKzE2NDE2MkU0MQorLTMyODMyNEU0MQorKzIwOTkwMUUtMTEKKy00MTk4MDJFLTExCisrOTQwMTg5RS0xMTIKKy04OTI3NzFFLTIxMworKzc1NzgwM0UxMjAKKy0yNTI2MDFFMTIwCisrMjUyNjAxRTEyMQorLTUwNTIwMkUxMjAKKys5NzA4MTFFLTI2NAorLTY1NDgzOUUtNjAKKysyODk3NjdFLTE3OAorLTU3OTUzNEUtMTc4CistODgyMzY5MUUxMzAKKys5MzQ2NzA0RTIyOQorLTExNjgzMzhFMjI5CistNjA2MzM2OUUtMTM2CisrMzg2NTQyMUUtMjI1CistNTc4Mzg5M0UtMTI3CisrMjU3MjIzMUUyMjMKKy01MTQ0NDYyRTIyMworKzE4MTc2MjNFMTA5CisrNjQzMTU0M0UtOTcKKy01NDQ0MDk3RS0yMQorKzgwNzY5OTlFLTEyMQorLTk5OTc2NDlFLTI3MAorKzUwNjA5MjYzRTE1NworKzcwNTg5NTI4RTEzMAorLTg4MjM2OTEwRTEyOQorKzg3NTc1NDM3RS0zMTAKKy0yMzEzNTU3MkUtMTI3CisrODU5MDA4ODFFMTc3CistODQ4NjMxNzFFMTEzCisrNjg3NjE1ODZFMjMyCistNTA0NjQwNjlFMjg2CisrMjc4NjkxNDdFLTI0OAorLTU1NzM4Mjk0RS0yNDgKKys3MDE3NjM1M0UtNTMKKy04MDU1NTA4NkUtMzIKKy00OTEwODA2NTRFMTIxCisrNTI2MjUwOTE4RTI4NworLTI0NTU0MDMyN0UxMjEKKy0xNzUxNTA4NzRFLTMxMAorKzM1MDMwMTc0OEUtMzEwCistNDM3ODc3MTg1RS0zMTEKKys0NTgxMTcxNjZFNTIKKy05MTYyMzQzMzJFNTIKKysyMjkwNTg1ODNFNTIKKy01MjU3ODk5MzVFOTgKKysyODI5MjY4OTdFLTIyNworLTU2NTg1Mzc5NEUtMjI3CisrNjY3Mjg0MTEzRS0yNDAKKy05NzEyMTI2MTFFLTEyNgorKzk5ODEzOTYzMTdFLTE4MgorLTUwMzUyMzE5NjVFLTE1NgorKzgzMzY5NjA0ODNFLTE1MworLTgwNTYzNzExNDRFLTE1NQorKzY0MTg0ODg4MjdFNzkKKy0zOTgxMDA2OTgzRTI1MgorKzc5NjIwMTM5NjZFMjUyCistNDcxMzg5ODU1MUUyNjEKKys4NzE1MzgwNjMzRS01OAorLTkwNzg1NTU4MzlFLTEwOQorKzk3MTIxMjYxMTBFLTEyNworKzQyMzMzODQyNDUxRTIwMQorLTg0NjY3Njg0OTAyRTIwMQorKzIzNzkyMTIwNzA5RS0zMTUKKy03ODU2NDAyMTUxOUUtMjI3CisrNzE4MTIwNTQ4ODNFLTE4OAorLTMwMzExMTYzNjMxRS0xMTYKKys3MTgwMzkxNDY1N0UyOTIKKyszNjMxNDIyMzM1NkUtMTA5CisrMTgxNTcxMTE2NzhFLTEwOQorLTQ1MzkyNzc5MTk1RS0xMTAKKys3NzgzODAzNjIyOTNFMjE4CistNjg1NzYzMDE1NjY5RTI4MAorKzk1MjkxODY2ODE1MUU3MAorLTU0ODM1NzQ0MzUwNUUzMgorKzM4NDg2NTAwNDkwN0UtMjg1CistNzY5NzMwMDA5ODE0RS0yODUKKys2OTcwMTU0MTg0MTdFLTkzCistOTE1NjU0MDQ5MzAxRS0yOAorKzE3ODU0ODY1NjMzOUUxNjkKKy03NDI1MjI4OTE1MTdFMjU5CisrNzQyNTIyODkxNTE3RTI1OAorLTM1NzA5NzMxMjY3OEUxNjkKKy0zMTEzNTIxNDQ5MTcyRTIxOAorKzM4OTE5MDE4MTE0NjVFMjE3CistMTU1Njc2MDcyNDU4NkUyMTgKKys5OTk3ODc4NTA3NTYzRS0xOTUKKy03MjQ3NTYzMDI5MTU0RS0zMTkKKyszNjIzNzgxNTE0NTc3RS0zMTkKKy0zMDkyNDQ2Mjk4MzIzRS0yMDAKKys2MzYzODU3OTIwNTkxRTE0NQorLTgyMzM1NTkzNjA4NDlFOTQKKysyNjg5ODQ1OTU0NTQ3RTQ5CistNTM3OTY5MTkwOTA5NEU0OQorKzU1NjAzMjI1MDE5MjZFLTMwMQorLTc4MTI4Nzg0ODkyNjFFLTE3OQorKzg0MzkzOTg1MzMwNTNFLTI1NgorLTI3ODAxNjEyNTA5NjNFLTMwMQorLTg3NjA1Njk5MTYxNjY1RTE1NQorLTE3NTIxMTM5ODMyMzMzRTE1NgorLTg4MjE4MTAxMzYzNTEzRS0xNzAKKyszODYzOTI0NDMxMTYyN0UtMTE1CisrMzU1OTM5NTk4MDczMDZFMjYxCistNTMzOTA5Mzk3MTA5NTlFMjYwCisrNzExODc5MTk2MTQ2MTJFMjYxCistODg5ODQ4OTk1MTgyNjVFMjYwCisrNzcwMDM2NjU2MTg4OTVFLTczCistMTU0MDA3MzMxMjM3NzlFLTcyCisrNjE2MDI5MzI0OTUxMTZFLTcyCistMzA4MDE0NjYyNDc1NThFLTcyCisrODM0NzM1NDk0OTE3MDYzRS0zMDAKKy01ODk3OTUxNDkyMDY0MzRFLTE1MQorKzQ3NTYwMzIxMzIyNjg1OUUtNDIKKy0yOTQ4OTc1NzQ2MDMyMTdFLTE1MQorKzg1MDgxMzAwODAwMTkxM0U5MworLTIwMzQ0OTE3MjA0MzMzOUUxODUKKys0MDY4OTgzNDQwODY2NzhFMTg1CistODEzNzk2Njg4MTczMzU2RTE4NQorKzYwNDUzMzg1MTQ2MDkzOTNFMjQ0CistNTE0NTk2Mzc3ODk1NDkwNkUxNDIKKysyNTcyOTgxODg5NDc3NDUzRTE0MgorLTY5NjU5NDk0Njk0ODcxNDZFNzQKKys2MTgyNDEwNDk0MjQxNjI3RS0xMTkKKy04NTEwMzA5NDk4MTg2OTg1RS0yNzcKKys2NjQ3NzA0NjM3MjczMzMxRS0yMTIKKy0yMjE1OTAxNTQ1NzU3Nzc3RS0yMTIKKyszNzcxNDc2MTg1Mzc2MzgzRTI3NgorLTM3Mjk5MDE4NDgwNDM4NDZFMjEyCisrMzc3MTQ3NjE4NTM3NjM4M0UyNzcKKy05OTc3ODMwNDY1NjQ5MTY2RTExOQorKzg0Mzk5Mjg0OTYzNDkzMTlFLTE0MgorLTgyMDQyMzAwODIwNzA4ODJFLTU5CisrODg1MzY4NjQzNDg0Mzk5N0UtMjQ0CistNTU1MzI3NDI3MjI4ODU1OUUtMTA0CisrMzYxNDkwMjM2MTEwOTYxNjJFMTQ0CistMzYxNDkwMjM2MTEwOTYxNjJFMTQ3CisrMTgwNzQ1MTE4MDU1NDgwODFFMTQ2CistMTgwNzQ1MTE4MDU1NDgwODFFMTQ3CisrOTczMzg3NzQxMzg5NTQ0MjFFLTI5MAorLTg4MTMzODA5ODA0OTUwOTYxRS0zMDgKKys5NDA4MDA1NTkwMjY4MjM5N0UtMjQzCistMjQ2OTEwMDI3MzI2NTQ4ODFFLTExNQorKzUyMzA2NDkwNTI3NTE0NjE0RTQ5CistMjYxNTMyNDUyNjM3NTczMDdFNDkKKys1NTE4ODY5MjI1NDE5MzYwNEUxNjUKKy02ODk4NTg2NTMxNzc0MjAwNUUxNjQKKysyNzE3NjI1ODAwNTMxOTE2N0UtMjYxCistNzMxNjkyMzAxMDcyNTYxMTZFLTI0OAorKzkxNDYxNTM3NjM0MDcwMTQ1RS0yNDkKKy01NDM1MjUxNjAxMDYzODMzNEUtMjYxCisrNTg2MTQ0Mjg5NjM4NTM1ODc4RTI4MAorLTYwMTExNzAwNjc4NTI5NTQzMUUyNDUKKysyOTMwNzIxNDQ4MTkyNjc5MzlFMjgwCistOTUzMTg0NzEzMjM4NTE2NjUyRTI3MgorKzkwMjA0MjM1ODI5MDM2NjUzOUUtMjgxCistNTU3MDM1NzMwMTg5ODU0NjYzRS0yOTQKKys5MDIwNDIzNTgyOTAzNjY1MzlFLTI4MAorLTM1NDk0NDEwMDUwNzU1NDM5M0UtMjM4CisrMjcyMTA0MDQxNTEyMjQyNDc5RTE5OQorLTgxNjMxMjEyNDUzNjcyNzQzN0UxOTkKKys1NDQyMDgwODMwMjQ0ODQ5NThFMTk5CistNzkyNjQ0OTI3ODUyMzc4MTU5RTc4CistNjc5NDA2NDUwMTMyOTc5MTc1RS0yNjMKKys1NDM1MjUxNjAxMDYzODMzNDBFLTI2MgorKzc0MDAyNTM2OTU2ODI5MjAxOTZFMjE1CistMTg1MDA2MzQyMzkyMDczMDA0OUUyMTUKKyszNzAwMTI2ODQ3ODQxNDYwMDk4RTIxNQorLTkyNTAzMTcxMTk2MDM2NTAyNDVFMjE0CisrODM5NjA5NDMwMDU2OTc3OTY4MUUtMjUyCistMzUwNzY2NTA4NTAwMzI5NjI4MUUtNzUKKys3MDE1MzMwMTcwMDA2NTkyNTYyRS03NQorLTcwMTUzMzAxNzAwMDY1OTI1NjJFLTc0CisrNzE4NTYyMDQzNDk1MTkxOTM1MUUyMDUKKy0xMzYwNTIwMjA3NTYxMjEyMzk1RTE5OAorKzIxNzg5OTkxODUzNDUxNTE3MzFFLTE4NAorLTg2OTEwODk0ODYyMDE1NjcxMDJFLTIxOAorKzQzNDU1NDQ3NDMxMDA3ODM1NTFFLTIxOAorLTQzNTc5OTgzNzA2OTAzMDM0NjJFLTE4NAorKzU5ODI1MjY3MzQ5MTA2ODkyNDYxRTE3NworLTYyMjU5MTEwNjg0NDIzOTU3NzkxRTQ3CisrNTgzODAxNjg0NzcwMzg1NjU1OTlFMjY1CistNjIyNTkxMTA2ODQ0MjM5NTc3OTFFNDgKKy0zMzU4NDM3NzIwMjI3OTExODcyNEUtMjUyCistNTc0ODQ5NjM0Nzk2MTUzNTQ4MDhFMjA1CisrNzE4NTYyMDQzNDk1MTkxOTM1MTBFMjA0CistMTQzNzEyNDA4Njk5MDM4Mzg3MDJFMjA1CisrMzY5OTIwODQ3NjAxNzc2MjQxNzdFLTMxOAorLTczOTg0MTY5NTIwMzU1MjQ4MzU0RS0zMTgKKys5OTI1Nzc2MzIyNzcxMzg5MDI0NEUtMTE1CistODczMzYzNjI0MjUxODI1NDc2OTdFLTI4MAorKzdFMjg5CistM0UxNTMKKys2RTE1MworLTVFMjQzCisrN0UtMTYxCistN0UtMTcyCisrOEUtNjMKKy03RS0xMTMKKys4RTEyNgorLTRFMTI2CisrNUUxMjUKKy0xRTEyNgorKzhFLTE2MworLTFFLTE2MworKzJFLTE2MworLTRFLTE2MworKzUxRTE5NQorLTM3RTQ2CisrNzRFNDYKKy01NkUyODkKKys2OUUtMTQ1CistNzBFLTE2MgorKzU2RS0xNjEKKy0yMUUtMzAzCisrMzRFLTI3NgorLTY4RS0yNzYKKys4NUUtMjc3CistODdFLTI3NAorKzgyOUUxMDIKKy02MjNFMTAwCisrNzIzRS0xNjIKKy00NTdFLTEwMgorKzkxNEUtMTAyCistMzIzRS0xMzUKKysxNTFFMTc2CistMzAyRTE3NgorKzkyMUU5MAorLTYwNEUxNzYKKys4MjNFLTIwNgorLTQ2M0UtMTE0CisrMzQ4RS0yNzQKKys5OTY4RTEwMAorLTYyMzBFOTkKKysxMjQ2RTEwMAorKzY2NzZFLTI5NgorLTgzNDVFLTI5NworKzE2NjlFLTI5NgorLTMzMzhFLTI5NgorKzMyNTdFNTgKKy02NTE0RTU4CisrMjQxNkUxNzYKKys4MDg1RS02MworLTMyMzRFLTYyCisrMTYxN0UtNjIKKy02NDY4RS02MgorKzUzNDE4RTExMQorLTYwNTEzRTE2MAorKzI2NzA5RTExMQorLTk5NDQ3RTE2NgorKzEyNTQ5RTQ4CistMjUwOThFNDgKKys1MDE5NkU0OAorLTYyNzQ1RTQ3CisrODM3NzFFLTczCistOTc0NTFFLTE2NworKzg2NjM3RS0yMDMKKy03NTU2OUUtMjU0CisrNDczODA2RTgzCistOTQ3NjEyRTgzCisrMjkyMzY5RTc2CistNTg0NzM4RTc2CisrOTMzNTg3RS0xNDAKKy03MjA5MTlFLTE0CisrNTM1MDAxRS0xNDkKKy04OTA1MjFFLTIzNQorKzU0ODA1N0U4MQorLTcwNjE4MUU4OAorKzgyMDk5N0UxMDYKKy0zMjA2ODFFNjMKKys5Mjg2MDlFLTI2MQorLTMwMjI3NkUtMjU0CisrMTUxMTM4RS0yNTQKKys0NjkxNzczRTQ1CistOTM4MzU0NkU0NQorKzMwNTk5NDlFLTI0MworLTYxMTk4OThFLTI0MworKzUzNTY2MjZFLTIxMworLTQ4NzczNzhFLTE5OQorKzc3MTY2OTNFMjIzCistNTQ1Mjg2OUUxMDkKKys0NTkwODMxRTE1NgorLTkxODE2NjJFMTU2CistMzcxNDQzNkUtMjYxCisrNDY0MzA0NUUtMjYyCistNzQyODg3MkUtMjYxCisrNTI5NDIxNDZFMTMwCistMjc5NjYwNjFFMTQ1CisrMjY0NzEwNzNFMTMwCistNTU5MzIxMjJFMTQ1CisrOTU0MTI1NDhFLTk5CistNDc3MDYyNzRFLTk5CisrMjM4NTMxMzdFLTk5CistNzg0OTM2NTRFLTMwMQorKzY1MzQ2NDE3RTI5CistNTEwODMwOTlFMTY3CisrODkzOTYzMzNFMjY0CistODQ4NjMxNzFFMTE0CisrNTk1NDA4MzZFLTI1MQorLTc0NDI2MDQ1RS0yNTIKKysxNDg4NTIwOUUtMjUxCistMjk3NzA0MThFLTI1MQorKzk4MjE2MTMwOEUxMjIKKy0yNDU1NDAzMjdFMTIyCisrNDkxMDgwNjU0RTEyMgorKzUyNTQ1MjYyMkUtMzEwCistNzcxODM3MTEzRS0xMzQKKys4MjA4NTgwODFFLTE1MAorLTI2MjcyNjMxMUUtMzEwCisrOTIzMDkxNDg3RTIwOQorLTY1Mzc3Nzc2N0UyNzMKKys4NDIxMTYyMzZFLTUzCistNzQxMTExMTY5RS0yMDIKKys4Mzk1MDcyNDdFLTI4NAorLTk1MTQ4NzI2OUUtMjY0CistOTgyMTYxMzA4MEUxMjEKKys2Njc3ODU2MDExRS0zMQorLTM1NzM3OTY4MjZFLTI2NgorKzcxNDc1OTM2NTJFLTI2NgorLTk5ODEzOTYzMTdFLTE4MQorKzMyNjg4ODg4MzVFMjcyCistMjYxNTExMTA2OEUyNzMKKysxMzA3NTU1NTM0RTI3MworKzI5OTA2NzExNTRFLTE5MAorLTE0OTUzMzU1NzdFLTE5MAorKzU5ODEzNDIzMDhFLTE5MAorLTc0NzY2Nzc4ODVFLTE5MQorKzgyMjU5Njg0MTk0RS0yMDIKKy05MzIyNzI2NzcyN0UtNDkKKys0MTEyOTg0MjA5N0UtMjAyCistNDc1ODQyNDE0MThFLTMxNAorLTc5MzYwMjkzNDA2RTkyCisrNTczMzIyNTkzNDlFMjI1CistNTcyMDIzMjYxNjJFMTExCisrODY4NjA1OTcwNTNFLTIwNgorLTUzODI3MDEwNjQzRS0yMDAKKys1MzU4NzEwNzQyM0UtNjEKKys2MzUwMDc2MzY3NjVFMjAwCisrNTA4MDA2MTA5NDEyRTIwMQorLTI1NDAwMzA1NDcwNkUyMDEKKys1NjEwMjk3MTg3MTVFLTcyCistODk3NjQ3NTQ5OTQ0RS03MQorKzExMjIwNTk0Mzc0M0UtNzEKKy04NzM5NDcwODYwODFFLTIzNgorKzgwOTE4NDcwOTE3N0UxMTYKKy01NzMxMTI5MTc0MjJFODEKKysyODY1NTY0NTg3MTFFODEKKys5NTI4MDU4MjE0OTFFLTI1OQorLTEzMjE4OTk5Mjg3M0UtNDQKKy0xNzM2OTYwMzg0OTNFLTE0NAorKzE4MzExMzI3NTc1OTlFLTEwNworLTkxNTU2NjM3ODc5OTVFLTEwOAorKzczMjQ1MzEwMzAzOTZFLTEwNworLTkyNzczMzg4OTQ5NjlFLTIwMAorKzgxODgyOTI0MjM5NzNFMjg3CistNTY3MjU1NzQzNzkzOEU1OQorKzI4MzYyNzg3MTg5NjlFNTkKKy05OTk1MTUzMTUzNDk0RTU0CisrOTIyNDc4NjQyMjA2OUUtMjkxCistMzE0MjIxMzE2NDk4N0UtMjk0CisrNjI4NDQyNjMyOTk3NEUtMjk0CistODM0MDQ4Mzc1Mjg4OUUtMzAxCisrNjcwMzkzNzE0ODY0NjZFODkKKy02MjE1MDc4NjYxNTIzOUUxOTcKKyszMzUxOTY4NTc0MzIzM0U4OQorLTUyNTYzNDE5NDk2OTk5RTE1NgorKzMyNTk5NDYwNDY2OTkxRS02NQorLTQxMDEwOTg4Nzk4MDA3RS0xMzMKKys2NTE5ODkyMDkzMzk4MkUtNjUKKy04MjAyMTk3NzU5NjAxNEUtMTMzCisrODA1Mjc5NzY2NDM4MDlFNjEKKy03NDcxMjYxMTUwNTIwOUUxNTgKKys1MzM5MDkzOTcxMDk1OUUyNjEKKy02OTI3NzMwMjY1OTE1NUUyMjUKKys0NjIwMjE5OTM3MTMzN0UtNzIKKy0yMzQzODYzNTQ2Nzc4M0UtMTc5CisrNDE5MjE1NjA2MTUzNDlFLTY3CistOTI0MDQzOTg3NDI2NzRFLTcyCisrNzM4NTQ1NjA2NjQ3MTk3RTEyNAorLTk3MjcwODE4MTE4Mjk0OUUxMTcKKy04Mzc5OTIxNDM1ODA4MjVFODcKKys2MDk2MTA5MjcxNDkwNTFFLTI1NQorLTQ3NTYwMzIxMzIyNjg1OUUtNDEKKys1NjMwMDI4MDA2NzEwMjNFLTE3NworLTk1MTIwNjQyNjQ1MzcxOEUtNDEKKys4MDU0MTY0MzI2NTY1MTlFMjAyCistNTMwNjU4Njc0Njk0MzM3RTE1OQorKzk0NjU3NDE3Mzg2MzkxOEUyMDgKKy0zMTgzMjk5NTMzMTg1NTNFMTEzCistNDYyMDIxOTkzNzEzMzcwRS03MworKzM2OTYxNzU5NDk3MDY5NkUtNzIKKyszNjY2MTU2MjEyMDE0OTk0RTIzMworLTE4MzMwNzgxMDYwMDc0OTdFMjMzCisrODMwMTc5MDUwODYyNDIzMkUxNzQKKy0xMDM3NzIzODEzNTc4MDI5RTE3NAorKzcyOTc2NjI4ODA1ODExMzlFLTI4NgorLTUxMDYxODU2OTg5MTIxOTFFLTI3NgorKzc0ODcyNTI3MjA5ODY4MjZFLTE2NQorLTM3NDM2MjYzNjA0OTM0MTNFLTE2NQorKzM3NzMwNTc0MzAxMDAyNTdFMjMwCistNzU0NjExNDg2MDIwMDUxNEUyMzAKKys0MzIxMjIyODkyNDYzODIyRTU4CistNzc5MzU2MDIxNzEzOTY1M0U1MQorKzI2NTI1OTkzOTQxMDEwNjgxRTExMgorLTUzMDUxOTg3ODgyMDIxMzYyRTExMgorKzcyODQ0ODcxNDE0MjQ3OTA3RTc3CistODg4MzkzNTk1OTY3NjMyNjFFMTA1CisrMTg3MTgxMzE4MDI0NjcwNjVFLTE2NgorLTE0OTc0NTA1NDQxOTczNjUyRS0xNjUKKys3MzQyOTM5NjAwNDY0MDIzOUUxMDYKKy01ODQ4MzkyMTA3ODM5ODI4M0U1NworKzQxMzkxNTE5MTkwNjQ1MjAzRTE2NQorLTgyNzgzMDM4MzgxMjkwNDA2RTE2NQorKzU4NzY3MDQzNzc2NzAyNjc3RS0xNjMKKy05MDUwNjIzMTgzMTIzMTk5OUUtMTI5CisrNjQ0MDkyNDA3Njk4NjE2ODlFLTE1OQorLTc3MzA1NDI3NDMyMjc3NzcxRS0xOTAKKys0NzY1OTIzNTY2MTkyNTgzMjZFMjczCistOTUzMTg0NzEzMjM4NTE2NjUyRTI3MworKzg5OTgxMDg5MjE3MjY0NjE2M0UyODMKKy05MjkxNjcwNzY4OTIwMTgzMzNFMTg3CisrNjQ3NzYxMjc4OTY3NTM0MjM5RS0zMTIKKy02NDQyOTA0Nzk4MjA1NDI5NDJFLTE4MAorKzkyNjE0NTM0NDYxMDcwMDAxOUUtMjI1CistOTU4NTA3OTMxODk2NTExOTY0RS0yNDYKKysyNzIxMDQwNDE1MTIyNDI0NzlFMjAwCistNzkyNjQ0OTI3ODUyMzc4MTU5RTc5CisrNTQ0MjA4MDgzMDI0NDg0OTU4RTIwMAorLTkyOTk2MzIxODYxNjEyNjM2NUUyOTAKKyszMDU1NzQzMzkxNjY4MTAxMDJFLTIxOQorLTE1Mjc4NzE2OTU4MzQwNTA1MUUtMjE5CisrNjExMTQ4Njc4MzMzNjIwMjA0RS0yMTkKKy03NjM5MzU4NDc5MTcwMjUyNTVFLTIyMAorKzc0Mzk1NTAyMjA5MjA3OTg2MTJFMTU4CistMzcxOTc3NTExMDQ2MDM5OTMwNkUxNTgKKys5Mjk5NDM3Nzc2MTUwOTk4MjY1RTE1NworLTcxMjAxOTA1MTc2MTI5NTk3MDNFMTIwCisrMzUwNzY2NTA4NTAwMzI5NjI4MUUtNzMKKy03MDE1MzMwMTcwMDA2NTkyNTYyRS03MworLTY2ODQ0Mjg3NjIyNzgyNTU5NTZFLTI5NAorLTEwODg0MTYxNjYwNDg5Njk5MTZFMjAwCistODcwNzMyOTMyODM5MTc1OTMyOEUyMDAKKys0NDM5MDIxNzgxNjA4NTU4MDAyRS02NQorLTg4NzgwNDM1NjMyMTcxMTYwMDRFLTY1CisrMjIxOTUxMDg5MDgwNDI3OTAwMUUtNjUKKyszMzA1MTIyMzk1MTkwNDk1NTgwMkU1NQorLTU2OTYxNTI0MTQwOTAzNjc3NjI0RTEyMAorKzcxMjAxOTA1MTc2MTI5NTk3MDMwRTExOQorKzE0MDMwNjYwMzQwMDEzMTg1MTI0RS03MworLTE3NTM4MzI1NDI1MDE2NDgxNDA1RS03NAorKzY3NTM2MjI4NjA5MTQxNTY5MTA5RS0xMzMKKy0zNTYyMDQ5Nzg0OTQ1MDIxODgwN0UtMzA2CisrNjY1NTAzNzY3OTc1ODI1MjE3NTFFLTEyNgorLTcxMjQwOTk1Njk4OTAwNDM3NjE0RS0zMDYKKyszRTI0CistNkUyNAorKzZFMjYKKy03RTI1CisrMUUtMTQKKy0yRS0xNAorKzRFLTE0CistOEUtMTQKKys1RTI2CistOEUyNworKzFFMjcKKy00RTI3CisrOUUtMTMKKy03RS0yMAorKzU2RTI1CistNzBFMjQKKys1MUUyNgorKzcxRS0xNworLTMxRS01CisrNjJFLTUKKy05NEUtOAorKzY3RTI3CistODFFMjQKKys1NEUyMworLTU0RTI1CisrNjNFLTIyCistNjNFLTIzCisrNDNFLTQKKy04NkUtNAorKzk0MkUyNgorLTQ3MUUyNQorKzgwM0UyNAorLTQ3MUUyNgorLTQwOUUtMjEKKys4MThFLTIxCistODY3RS04CisrNTM4RTI3CistODU3RTI0CisrMjY5RTI3CistNDAzRTI2CisrOTU5RS03CistOTU5RS02CisrMzczRS0yNworLTc0NkUtMjcKKys0MDY5RTI0CistNDA2OUUyMworLTgxMzhFMjQKKys4Mjk0RS0xNQorLTQxNDdFLTE0CisrNDE0N0UtMTUKKy04Mjk0RS0xNAorKzUzOEUyNworLTI2OTBFMjYKKysyNjlFMjcKKy0yMTUyRTI3CisrMTcyMUUtMTcKKy03OTc5RS0yNworKzY4ODRFLTE3CistODYwNUUtMTgKKys4Mjg1NEUyNworLTU1Njg0RTI0CisrMjc4NDJFMjQKKy00ODk1OUUyNQorKzgxOTIxRS0xNworLTc2MjA3RS04CisrNDE0N0UtMTUKKy00MTQ3MEUtMTYKKys4OTMwOUUyNAorKzc1ODU5RTI2CistNzU4NTlFMjUKKysxNDI1N0UtMjMKKy0yODUxNEUtMjMKKys1NzAyOEUtMjMKKy03MTI4NUUtMjQKKyszNDQ4NjNFMjcKKy05NTE3MzVFMjcKKysyMDA2NzdFMjMKKy00MDEzNTRFMjQKKys4Mzk2MDRFLTExCistMjA5OTAxRS0xMQorKzQxOTgwMkUtMTEKKy01Mzc3MzRFLTI0CisrOTEwMzA4RTI2CistMjI3NTc3RTI2CisrNDU1MTU0RTI2CistNTMxMDEzRTI1CisrOTYzMDE5RS0yMQorLTUxOTgyN0UtMTMKKys2MjM0MDJFLTI3CistMzExNzAxRS0yNworKzk2MTM2NTFFMjYKKy05MTkxMzE2RTIzCisrNDU5NTY1OEUyMworLTIyOTc4MjlFMjMKKy0xNjc5MjA4RS0xMQorKzMzNzkyMjNFMjcKKy02NzU4NDQ2RTI3CisrNTQ0NDA5N0UtMjEKKy04Mzk5OTY5RS0yNworKzgzNjY0ODdFLTE2CistODM2NjQ4N0UtMTUKKys2NTA2MDY3MUUyNQorKzY1MjEyMzg5RTIzCisrNTU1NDQ5NTdFLTEzCistNTEwNDA5MDVFLTIwCisrOTk1ODU3NjdFLTIyCistOTk1ODU3NjdFLTIzCisrNDA5NzgzOTNFMjYKKy02NzQ4ODE1OUUyNAorKzY5MDA1MzM5RTIzCistODE5NTY3ODZFMjYKKy04NzEwNTU1MkUtMjEKKysxMDg4ODE5NEUtMjEKKy0yMTc3NjM4OEUtMjEKKys2MzU4MDY2NjdFMjcKKy02NzAwMjY2MTRFMjUKKyszMzUwMTMzMDdFMjYKKy0zMzUwMTMzMDdFMjUKKyszNzE3OTA2MTdFLTI0CistMzcxNzkwNjE3RS0yNQorKzc0MzU4MTIzNEUtMjQKKy03NDM1ODEyMzRFLTI1CisrMjAyNDY0NDc3RTI0CistNDA0OTI4OTU0RTI0CisrOTk3ODUzNzU4RTI3CistOTk3ODUzNzU4RTI2CisrNDA1NDk4NDE4RS0xNworLTU4MjU3OTA4NEUtMTQKKys2MDgyNDc2MjdFLTE4CistMjkxMjg5NTQyRS0xNAorLTk1MzcxMDAwMDVFMjYKKys2MzU4MDY2NjcwRTI3CistMTI3MTYxMzMzNEUyNworKzUyMjk2NDY5OTlFLTE2CisrNTIyOTY0Njk5OUUtMTcKKys0NDI5OTQzNjE0RTI0CistODg1OTg4NzIyOEUyNAorKzIyMTQ5NzE4MDdFMjQKKy00MTc2ODg3MDkzRTI2CisrNDAwMzQ5NTI1N0UtMjAKKy00MzYxOTAxNjM3RS0yMworKzg3MjM4MDMyNzRFLTIzCistODAwNjk5MDUxNEUtMjAKKys3MjgzNTExMDA5OEUyNworLTM2NDE3NTU1MDQ5RTI3CisrODQyNzk2MzAxMDRFMjUKKy04NDI3OTYzMDEwNEUyNAorKzIxMjA2MTc2NDM3RS0yNworLTY2NDYxNTY2OTE3RS0yMgorKzY0ODA4MzU1NTM5RS0xNgorLTg0OTMyNjc5NjczRS0xOQorKzY1MjA1NDMwMDk0RTI2CistNjgzODQ0NjM0MjlFMjUKKyszMjYwMjcxNTA0N0UyNgorLTYyNjYyMjAzNDI2RTI3CisrNTg3ODQ0NDQ2NzhFLTE4CistNTA5ODAyMDMzNzNFLTIxCisrMjkzOTIyMjIzMzlFLTE4CistNzU1Mjk5NDAzMjNFLTI3CistOTM3NDk1OTA2Mjk5RTI2CisrODQyNjQyNDg1Nzk5RS0yMAorLTM4NzgyNDE1MDY5OUUtMjMKKys5MjQ5NDg4MTQ3MjZFLTI3CistNzc1NjQ4MzAxMzk4RS0yMworKzU0NzA3NTcwNzQzMkUyNQorKzY4Mzg0NDYzNDI5MEUyNAorLTEzNjc2ODkyNjg1OEUyNQorKzUwOTgwMjAzMzczMEUtMjIKKysxMDE5NjA0MDY3NDZFLTIxCistODE1NjgzMjUzOTY4RS0yMQorKzczNDQxMjQxMjM1MjRFMjQKKy05MTgwMTU1MTU0NDA1RTIzCisrNjQ3OTQ2MzMyNzMyM0UyNworLTE4MzYwMzEwMzA4ODFFMjQKKys0MzM3MjY5MjkzMDM5RS0xOQorLTQ1OTkxNjM1NTQzNzNFLTIzCisrOTE5ODMyNzEwODc0NkUtMjMKKys0ODEyODAzOTM4MzQ3RTI3CistODQxMjAzMDg5MDAxMUUyMworKzk2MjU2MDc4NzY2OTRFMjcKKy00NzM5OTY4ODI4MjQ5RTI0CisrOTY5NzE4Mzg5MTY3M0UtMjMKKy03MzY4MTA4NTE3NTQzRS0yMAorKzUxNDYxMzU4MTYxNDIyRTI1CistNzcxOTIwMzcyNDIxMzNFMjYKKys3NzE5MjAzNzI0MjEzM0UyNQorLTUxNDYxMzU4MTYxNDIyRTI3CisrNDM5OTk2NjE1NjE1NDFFLTIxCistODc5OTkzMjMxMjMwODJFLTIxCisrNDgzNzQ4ODY4MjYxMzdFLTI2CistNTc2ODQyNDY1NjcxMTFFLTIzCisrODcxOTI4MDU5NTc2ODZFMjMKKy03NTEwODcxMzAwNTkxM0UyNAorKzY0MjMzMTEwNTg3NDg3RTI3CistNzc1Nzc0NzExMzMzODRFLTIzCisrNDg0ODU5MTk0NTgzNjVFLTI0CistNTY5MDg1OTgyNjU3MTNFLTI2CisrNTg5NzIyMjk0NjIwMTMzRTIzCisrNjUyODM1ODA0NDQ5Mjg5RS0yMgorLTY1NjQxNTM2MzkzNjIwMkUtMjMKKys1NzkzMzY3NDk1ODU3NDVFLTI1CistMzgxMjkyNzY0OTgwODM5RS0yNgorKzk2NTI2NTg1OTY0OTY5OEUyMworLTg0ODkyNTIzNTQzNDg4MkUyNworKzUzNjE3NzYxMjIyMjQ5MUUyMworLTQyNDQ2MjYxNzcxNzQ0MUUyNworKzI3NjAwOTI3OTg4ODk4OUUtMjcKKy02MDg5MjcxNTgwNDM2OTFFLTI2CisrNTUyMDE4NTU5Nzc3OTc4RS0yNworLTQyNTY3ODM3NzY2Nzc1OEUtMjIKKys4MDEzNzAyNzI2OTI3MTE5RTI2CisrODg2MjYyNzk2MjM2MjAwMUUyNworLTUwNjgwMDc5MDc3NTcxNjJFMjYKKy03Mzc5NzE0Nzk5ODI4NDA2RS0yMworKzQxMTQ1MzgwNjQwMTYxMDdFLTI3CistMzY4OTg1NzM5OTkxNDIwM0UtMjMKKys1NTc1OTU0ODUxODE1NDc4RTIzCisrMzM5NTcwMDk0MTczOTUyOEUyNworKzQxMTU1MzU3Nzc1ODE5NjFFLTIzCistODIzMTA3MTU1NTE2MzkyMkUtMjMKKys2NTUwMjQ2Njk2MTkwODcxRS0yNgorLTY4MDgzMDQ2NDAzOTg2NzAxRTI3CisrNDM1NjYzODg1OTU3ODM2NDNFMjcKKy04NzEzMjc3NzE5MTU2NzI4NkUyNworKzU5NjQ0ODgxMDU5MzQyMTQxRTI1CistODM4NTI3NzA3MTg1NzY2NjdFMjMKKys5OTQ4Mjk2NzQxODIwNjk2MUUtMjUKKy05OTQ4Mjk2NzQxODIwNjk2MUUtMjYKKys4NzQ0NjY2OTk2OTk5NDYxNEUtMjcKKy00MzcyMzMzNDk4NDk5NzMwN0UtMjcKKys1RTI0CistOEUyNQorKzFFMjUKKy00RTI1CisrMkUtNQorLTVFLTYKKys0RS01CistM0UtMjAKKyszRTI3CistOUUyNgorKzdFMjUKKy02RTI3CisrMkUtMjEKKy01RS0yMgorLTRFLTIxCisrODdFMjUKKy05N0UyNAorKzgyRS0yNAorLTQxRS0yNAorKzc2RS0yMworKzgzRTI1CistNTBFMjcKKysyNUUyNworLTk5RTI3CisrOTdFLTEwCistNTdFLTIwCisrOTk3RTIzCisrNzc2RTI0CistMzg4RTI0CisrNTIxRS0xMAorLTUwNkUtMjYKKys3MzlFLTEwCistODY3RS03CistNDE1RTI0CisrMzMyRTI1CistNjY0RTI1CisrMjkxRS0xMworLTk4MkUtOAorKzU4MkUtMTMKKy00OTFFLTgKKys0NTc0RTI2CistODYwOUUyNgorKzIyODdFMjYKKy00ODE4RTI0CisrNjUyOUUtOAorLTgxNTFFLTIxCisrMTU1N0UtMTIKKy0yNTczRS0xOAorKzQ5MjlFLTE2CistMzA1M0UtMjIKKys5ODU4RS0xNgorLTc3NjdFLTExCisrNTQzMzlFMjYKKy02MjQwOUUyNQorKzMyODE5RTI3CistODk4NDlFMjcKKys2Mzg3NkUtMjAKKy0xNTk2OUUtMjAKKyszMTkzOEUtMjAKKy03OTg0NUUtMjEKKys4OTMwNkUyNworLTI1NDg3RTI0CisrNzk4ODlFMjQKKy05NzM3OUUyNgorKzgxMDAyRS04CistNDMxNDlFLTI1CisrNDA1MDFFLTgKKy02MDMxOEUtMTAKKy02NDgyOTlFMjcKKys3ODA2NDlFMjQKKys3MjA5MTlFLTE0CistNjI5NzAzRS0xMQorKzU1NzkxM0UyNAorLTg0Nzg5OUUyMworKzU2NTQ0NUUyNworLTczNjUzMUUyNAorKzY4MDAxM0UtMTkKKy01Mjk5ODFFLTEwCisrMzgyOTIzRS0yMworLTYzMzYxNEUtMTgKKysyMTY1NDc5RTI3CistODY2MTkxNkUyNworKzQzMzA5NThFMjcKKy05MzkxOTkzRTIyCistNTc2NzM1MkUtMTQKKys3MjA5MTkwRS0xNQorLTE0NDE4MzhFLTE0CisrODQ3ODk5MEUyMgorKzE0NzMwNjJFMjQKKys4MzY2NDg3RS0xNAorLTgzOTk5NjlFLTI1CisrOTM2NjczN0UtMTIKKy05NDA2MTQxRS0xMworKzY1OTcwOTc5RTI0CistNjUwNjA2NzFFMjYKKys1NDkyMzAwMkUyNworLTYzODQ2OTI3RTI1CisrOTk1ODU3NjdFLTIxCisrNjc0ODgxNTlFMjUKKy02OTAwNTMzOUUyNAorKzgxOTU2Nzg2RTI3CistNDA5NzgzOTNFMjcKKys3NzUwNTc1NEUtMTIKKy0zODc1Mjg3N0UtMTIKKys4Mjc3Mjk4MUUtMTUKKy05NTU5MzUxN0UtMjUKKysyMDAwMzY5ODlFMjUKKy03NzI2ODY0NTVFMjcKKys4NTkxMzk5MDdFMjMKKy00MDAwNzM5NzhFMjUKKys1NjkwMTQzMjdFLTE0CistNzk0MjYzODYyRS0xNQorKzM5NzEzMTkzMUUtMTUKKy0zODAzOTg5NTdFLTE2CisrNTY3MzY2NzczRTI3CistMzM3NDQwNzk1RTI0CisrMTM0OTc2MzE4RTI1CistMjY5OTUyNjM2RTI1CisrOTMyMDgwNTk3RS0yMAorLTMzMTA5MTkyNEUtMTUKKy00MTM4NjQ5MDVFLTE2CisrODUzOTI0NjI0N0UyNgorLTU4NTkxMzk3OTFFMjYKKys2MTA1MDEwMTQ5RTI0CistMzA5MDc0NTgyMEUyNworKzM0NzA4Nzc3NzNFLTIwCistNjEzNjMwOTA4OUUtMjcKKys4OTE3NzU4NzEzRS0xOQorLTY5NDE3NTU1NDZFLTIwCisrOTE5NDkwMDUzNUUyNQorLTE4Mzg5ODAxMDdFMjYKKys3MzU1OTIwNDI4RTI2CistMzY3Nzk2MDIxNEUyNgorKzg0NzM2MzQzNDNFLTE3CistODg3MDc2NjI3NEUtMTYKKys0NDM1MzgzMTM3RS0xNgorLTk1OTg5OTAxMjlFLTE1CisrNzE1NjM0OTY3NjRFMjYKKy04OTQ1NDM3MDk1NUUyNQorKzE3ODkwODc0MTkxRTI2CistMzU3ODE3NDgzODJFMjYKKys1Nzk3MzQ0Nzg0MkUtMTkKKy0yODk4NjcyMzkyMUUtMTkKKys3NjgyMjcxMTMxM0UtMTkKKy05NzY5OTQ2Njg3NEUtMjAKKys2Nzc0ODY1Njc2MkUyNworLTE5Mzk0ODQwOTkxRTI0CisrMzg3ODk2ODE5ODJFMjQKKy0zMzg3NDMyODM4MUUyNworKzU0MzIzNzYzODg2RS0yNworLTU4OTg3MTkzODg3RS0yMAorKzI3MTYxODgxOTQzRS0yNworLTkzMDQyNjQ4MDMzRS0xOQorKzUyMDgzMTA1OTA1NUUyNworLTc2ODEyNDI2NDM5NEUyNQorKzM4NDA2MjEzMjE5N0UyNQorKzc2NTMzNzc0OTg4OUUtMjUKKys3OTQzNjg5MTI3NzFFMjUKKy05OTQxNjIwOTAxNDZFMjMKKys3ODE2NTI3Nzk0MzFFMjYKKys5MTAwNzcxOTAwNDZFLTI2CistNDU1MDM4NTk1MDIzRS0yNgorKzQ3MTg5NzU1MTA5NkUtMjAKKy05MDY2OTg0MDk5MTFFLTIxCisrODg1NDEyODAwMzkzNUUyNQorLTgxNDYxMjI3MTYyOTlFMjcKKys3MDgzMzAyNDAzMTQ4RTI2CistMzU0MTY1MTIwMTU3NEUyNgorKzgzOTQ5MjA2NDkyOTFFLTI1CistNzY1Nzk3NTc1Njc1M0UtMjIKKys1NDczODM0MDAyMjI4RS0yMAorLTY4NDIyOTI1MDI3ODVFLTIxCistMjEwOTU2ODg4NDU5N0UyNQorKzg0MzgyNzU1MzgzODhFMjUKKy00MjE5MTM3NzY5MTk0RTI1CisrMzIwMDE0MTc4OTg0MUUtMjUKKy04NjU1Njg5MzIyNjA3RS0yMgorKzY0MDAyODM1Nzk2ODJFLTI1CistODgzNzcxOTYzNDQ5M0UtMjEKKysxOTQyODIxNzA3NTI5N0UyNAorLTM4ODU2NDM0MTUwNTk0RTI0CisrNzc3MTI4NjgzMDExODhFMjQKKy03NzE5MjAzNzI0MjEzM0UyNworKzc2NTc5NzU3NTY3NTMwRS0yMworKzE1MzE1OTUxNTEzNTA2RS0yMgorLTM4Mjg5ODc4NzgzNzY1RS0yMworKzQ5Mzc4MDMzOTI1MjAyRTI1CistNTA5NDA1MjcxMDIzNjdFMjQKKys5ODc1NjA2Nzg1MDQwNEUyNQorLTk5NTg5Mzk3NTQ0ODkyRTI2CistNTY5MDg1OTgyNjU3MTNFLTI1CisrOTc0NzA2OTU2OTk2NTdFLTIyCistMzU4NTE5MDEyNDczNDNFLTI1CisrMTU0Mzg0MDc0NDg0MjY2RTI3CistMzA4NzY4MTQ4OTY4NTMyRTI3CisrOTEwOTkwMzg5MDA1OTg1RTIzCisrMjcxNzQyNDI0MTY5MjAxRS0yNworLTU0MzQ4NDg0ODMzODQwMkUtMjcKKysxNjIxOTIwODMzNTc1NjNFLTI2CistODY5MjU0NTUyNzcwMDgxRS0yMworKzY2NDgzMTAwNzYyNjA0NkUyNAorLTMzMjQxNTUwMzgxMzAyM0UyNAorKzk0MzcwMTgyOTA0MTQyN0UyNAorLTEwMTg4MTA1NDIwNDczNEUyNAorKzgyODAyNzgzOTY2Njk2N0UtMjcKKy0yODAyNzYxMzU2MDg3NzdFLTI3CisrMjEyODM5MTg4ODMzODc5RS0yMQorLTExMzgxNzE5NjUzMTQyNkUtMjUKKys5NzExNTUzMTk3Nzk2ODgzRTI3CistMjczOTg0OTM4NjUyNDI2OUUyNgorKzU0Nzk2OTg3NzMwNDg1MzhFMjYKKys2MTI0NTY4MzE4NTIzMTEzRS0yNQorLTExMzk3Nzc5ODgxNzEwNzFFLTI0CisrNjMyMjYxMjMwMzEyODAxOUUtMjcKKy0yOTU1ODY0NTY0ODQ0NjE3RS0yNQorLTk5OTQwMjkxNDQ5OTg5NjFFMjUKKy0yOTcxMjM4MzI0MDIyMDg3RTI3CistMTY1NjA1NTY3OTMzMzkzNEUtMjcKKy0xNDQ1NDg4NzA5MTUwMjM0RS0yNgorKzU1ODI0NzE3NDk5ODg1MTcyRTI3CistNjk3ODA4OTY4NzQ4NTY0NjVFMjYKKys4NDE2MTUzODg2NzU0NTE5OUUyNQorLTI3OTEyMzU4NzQ5OTQyNTg2RTI3CisrMjQ3MTExMTI0NjI5MjYzMzFFLTI1CistMTI2NDUyMjQ2MDYyNTYwMzhFLTI3CistMTIyNDkxMzY2MzcwNDYyMjZFLTI1CisrNzQ4NzQ0NDgyODc0NjU3NTdFMjcKKy0zNTY0MjgzNjgzMjc1MzMwM0UyNAorLTcxMjg1NjczNjY1NTA2NjA2RTI0CisrNDM3MjMzMzQ5ODQ5OTczMDdFLTI2CisrMTAxODI0MTk4NDk1Mzc5NjNFLTI0CistOTM1MDE3MDM1NzI2NjE5ODJFLTI2CisKKyMgQSB2YWx1ZSB0aGF0IGNhdXNlZCBhIGNyYXNoIGluIGRlYnVnIGJ1aWxkcyBmb3IgUHl0aG9uID49IDIuNywgMy4xCisjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNzYzMgorMjE4MzE2NzAxMjMxMjExMjMxMjMxMi4yMzUzODAyMDM3NDQyMDQ0NjE5MmUtMzcwCisKKyMgQW5vdGhlciB2YWx1ZSBkZXNpZ25lZCB0byB0ZXN0IGEgY29ybmVyIGNhc2Ugb2YgUHl0aG9uJ3Mgc3RydG9kIGNvZGUuCiswLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZSsyMwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2Zvcmtfd2FpdC5weSBiL2xpYi9weXRob24yLjcvdGVzdC9mb3JrX3dhaXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY0NmNiZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9mb3JrX3dhaXQucHkKQEAgLTAsMCArMSw3OSBAQAorIiIiVGhpcyB0ZXN0IGNhc2UgcHJvdmlkZXMgc3VwcG9ydCBmb3IgY2hlY2tpbmcgZm9ya2luZyBhbmQgd2FpdCBiZWhhdmlvci4KKworVG8gdGVzdCBkaWZmZXJlbnQgd2FpdCBiZWhhdmlvciwgb3ZlcnJpZGUgdGhlIHdhaXRfaW1wbCBtZXRob2QuCisKK1dlIHdhbnQgZm9yazEoKSBzZW1hbnRpY3MgLS0gb25seSB0aGUgZm9ya2luZyB0aHJlYWQgc3Vydml2ZXMgaW4gdGhlCitjaGlsZCBhZnRlciBhIGZvcmsoKS4KKworT24gc29tZSBzeXN0ZW1zIChlLmcuIFNvbGFyaXMgd2l0aG91dCBwb3NpeCB0aHJlYWRzKSB3ZSBmaW5kIHRoYXQgYWxsCithY3RpdmUgdGhyZWFkcyBzdXJ2aXZlIGluIHRoZSBjaGlsZCBhZnRlciBhIGZvcmsoKTsgdGhpcyBpcyBhbiBlcnJvci4KKworV2hpbGUgQmVPUyBkb2Vzbid0IG9mZmljaWFsbHkgc3VwcG9ydCBmb3JrIGFuZCBuYXRpdmUgdGhyZWFkaW5nIGluCit0aGUgc2FtZSBhcHBsaWNhdGlvbiwgdGhlIHByZXNlbnQgZXhhbXBsZSBzaG91bGQgd29yayBqdXN0IGZpbmUuICBEQworIiIiCisKK2ltcG9ydCBvcywgc3lzLCB0aW1lLCB1bml0dGVzdAoraW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0IGFzIHRlc3Rfc3VwcG9ydAordGhyZWFkID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZCcpCisKK0xPTkdTTEVFUCA9IDIKK1NIT1JUU0xFRVAgPSAwLjUKK05VTV9USFJFQURTID0gNAorCitjbGFzcyBGb3JrV2FpdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuYWxpdmUgPSB7fQorICAgICAgICBzZWxmLnN0b3AgPSAwCisKKyAgICBkZWYgZihzZWxmLCBpZCk6CisgICAgICAgIHdoaWxlIG5vdCBzZWxmLnN0b3A6CisgICAgICAgICAgICBzZWxmLmFsaXZlW2lkXSA9IG9zLmdldHBpZCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcChTSE9SVFNMRUVQKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHdhaXRfaW1wbChzZWxmLCBjcGlkKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgIyB3YWl0cGlkKCkgc2hvdWxkbid0IGhhbmcsIGJ1dCBzb21lIG9mIHRoZSBidWlsZGJvdHMgc2VlbSB0byBoYW5nCisgICAgICAgICAgICAjIGluIHRoZSBmb3JraW5nIHRlc3RzLiAgVGhpcyBpcyBhbiBhdHRlbXB0IHRvIGZpeCB0aGUgcHJvYmxlbS4KKyAgICAgICAgICAgIHNwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoY3BpZCwgb3MuV05PSEFORykKKyAgICAgICAgICAgIGlmIHNwaWQgPT0gY3BpZDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdGltZS5zbGVlcCgyICogU0hPUlRTTEVFUCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwaWQsIGNwaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAiY2F1c2UgPSAlZCwgZXhpdCA9ICVkIiAlIChzdGF0dXMmMHhmZiwgc3RhdHVzPj44KSkKKworICAgIGRlZiB0ZXN0X3dhaXQoc2VsZik6CisgICAgICAgIGZvciBpIGluIHJhbmdlKE5VTV9USFJFQURTKToKKyAgICAgICAgICAgIHRocmVhZC5zdGFydF9uZXcoc2VsZi5mLCAoaSwpKQorCisgICAgICAgIHRpbWUuc2xlZXAoTE9OR1NMRUVQKQorCisgICAgICAgIGEgPSBzZWxmLmFsaXZlLmtleXMoKQorICAgICAgICBhLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHJhbmdlKE5VTV9USFJFQURTKSkKKworICAgICAgICBwcmVmb3JrX2xpdmVzID0gc2VsZi5hbGl2ZS5jb3B5KCkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gWyd1bml4d2FyZTcnXToKKyAgICAgICAgICAgIGNwaWQgPSBvcy5mb3JrMSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjcGlkID0gb3MuZm9yaygpCisKKyAgICAgICAgaWYgY3BpZCA9PSAwOgorICAgICAgICAgICAgIyBDaGlsZAorICAgICAgICAgICAgdGltZS5zbGVlcChMT05HU0xFRVApCisgICAgICAgICAgICBuID0gMAorICAgICAgICAgICAgZm9yIGtleSBpbiBzZWxmLmFsaXZlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuYWxpdmVba2V5XSAhPSBwcmVmb3JrX2xpdmVzW2tleV06CisgICAgICAgICAgICAgICAgICAgIG4gKz0gMQorICAgICAgICAgICAgb3MuX2V4aXQobikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUGFyZW50CisgICAgICAgICAgICBzZWxmLndhaXRfaW1wbChjcGlkKQorICAgICAgICAgICAgIyBUZWxsIHRocmVhZHMgdG8gZGllCisgICAgICAgICAgICBzZWxmLnN0b3AgPSAxCisgICAgICAgICAgICB0aW1lLnNsZWVwKDIqU0hPUlRTTEVFUCkgIyBXYWl0IGZvciB0aHJlYWRzIHRvIGRpZQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2Zvcm1hdGZsb2F0X3Rlc3RjYXNlcy50eHQgYi9saWIvcHl0aG9uMi43L3Rlc3QvZm9ybWF0ZmxvYXRfdGVzdGNhc2VzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2VmMDQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2Zvcm1hdGZsb2F0X3Rlc3RjYXNlcy50eHQKQEAgLTAsMCArMSwzODAgQEAKKy0tICdmJyBjb2RlIGZvcm1hdHRpbmcsIHdpdGggZXhwbGljaXQgcHJlY2lzaW9uICg+PSAwKS4gIE91dHB1dCBhbHdheXMKKy0tIGhhcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHBsYWNlcyBhZnRlciB0aGUgcG9pbnQ7ICB6ZXJvcyBhcmUgYWRkZWQgaWYKKy0tIG5lY2Vzc2FyeSB0byBtYWtlIHRoaXMgdHJ1ZS4KKworLS0gemVyb3MKKyUuMGYgMCAtPiAwCislLjFmIDAgLT4gMC4wCislLjJmIDAgLT4gMC4wMAorJS4zZiAwIC0+IDAuMDAwCislLjUwZiAwIC0+IDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworLS0gcHJlY2lzaW9uIDA7ICByZXN1bHQgc2hvdWxkIG5ldmVyIGluY2x1ZGUgYSAuCislLjBmIDEuNSAtPiAyCislLjBmIDIuNSAtPiAyCislLjBmIDMuNSAtPiA0CislLjBmIDAuMCAtPiAwCislLjBmIDAuMSAtPiAwCislLjBmIDAuMDAxIC0+IDAKKyUuMGYgMTAuMCAtPiAxMAorJS4wZiAxMC4xIC0+IDEwCislLjBmIDEwLjAxIC0+IDEwCislLjBmIDEyMy40NTYgLT4gMTIzCislLjBmIDEyMzQuNTYgLT4gMTIzNQorJS4wZiAxZTQ5IC0+IDk5OTk5OTk5OTk5OTk5OTk0NjQ5MDI3Njk0NzU0ODE3OTMxOTY4NzI0MTQ3ODk2MzIKKyUuMGYgOS45OTk5OTk5OTk5OTk5OTg3ZSs0OSAtPiA5OTk5OTk5OTk5OTk5OTk4Njg2MDU4MjQwNjk1MjU3NjQ4OTE3Mjk3OTY1NDA2NjE3NgorJS4wZiAxZTUwIC0+IDEwMDAwMDAwMDAwMDAwMDAwNzYyOTc2OTg0MTA5MTg4NzAwMzI5NDk2NDk3MDk0NjU2MAorCistLSBwcmVjaXNpb24gMQorJS4xZiAwLjAwMDEgLT4gMC4wCislLjFmIDAuMDAxIC0+IDAuMAorJS4xZiAwLjAxIC0+IDAuMAorJS4xZiAwLjA0IC0+IDAuMAorJS4xZiAwLjA2IC0+IDAuMQorJS4xZiAwLjI1IC0+IDAuMgorJS4xZiAwLjc1IC0+IDAuOAorJS4xZiAxLjQgLT4gMS40CislLjFmIDEuNSAtPiAxLjUKKyUuMWYgMTAuMCAtPiAxMC4wCislLjFmIDEwMDAuMDMgLT4gMTAwMC4wCislLjFmIDEyMzQuNTY3OCAtPiAxMjM0LjYKKyUuMWYgMTIzNC43NDk5IC0+IDEyMzQuNworJS4xZiAxMjM0Ljc1IC0+IDEyMzQuOAorCistLSBwcmVjaXNpb24gMgorJS4yZiAwLjAwMDEgLT4gMC4wMAorJS4yZiAwLjAwMSAtPiAwLjAwCislLjJmIDAuMDA0OTk5IC0+IDAuMDAKKyUuMmYgMC4wMDUwMDEgLT4gMC4wMQorJS4yZiAwLjAxIC0+IDAuMDEKKyUuMmYgMC4xMjUgLT4gMC4xMgorJS4yZiAwLjM3NSAtPiAwLjM4CislLjJmIDEyMzQ1MDAgLT4gMTIzNDUwMC4wMAorJS4yZiAxMjM0NTYwIC0+IDEyMzQ1NjAuMDAKKyUuMmYgMTIzNDU2NyAtPiAxMjM0NTY3LjAwCislLjJmIDEyMzQ1NjcuOCAtPiAxMjM0NTY3LjgwCislLjJmIDEyMzQ1NjcuODkgLT4gMTIzNDU2Ny44OQorJS4yZiAxMjM0NTY3Ljg5MSAtPiAxMjM0NTY3Ljg5CislLjJmIDEyMzQ1NjcuODkxMiAtPiAxMjM0NTY3Ljg5CisKKy0tIGFsdGVybmF0ZSBmb3JtIGFsd2F5cyBpbmNsdWRlcyBhIGRlY2ltYWwgcG9pbnQuICBUaGlzIG9ubHkKKy0tIG1ha2VzIGEgZGlmZmVyZW5jZSB3aGVuIHRoZSBwcmVjaXNpb24gaXMgMC4KKyUjLjBmIDAgLT4gMC4KKyUjLjFmIDAgLT4gMC4wCislIy4wZiAxLjUgLT4gMi4KKyUjLjBmIDIuNSAtPiAyLgorJSMuMGYgMTAuMSAtPiAxMC4KKyUjLjBmIDEyMzQuNTYgLT4gMTIzNS4KKyUjLjFmIDEuNCAtPiAxLjQKKyUjLjJmIDAuMzc1IC0+IDAuMzgKKworLS0gaWYgcHJlY2lzaW9uIGlzIG9taXR0ZWQgaXQgZGVmYXVsdHMgdG8gNgorJWYgMCAtPiAwLjAwMDAwMAorJWYgMTIzMDAwMCAtPiAxMjMwMDAwLjAwMDAwMAorJWYgMTIzNDU2NyAtPiAxMjM0NTY3LjAwMDAwMAorJWYgMTIzLjQ1NjcgLT4gMTIzLjQ1NjcwMAorJWYgMS4yMzQ1Njc4OSAtPiAxLjIzNDU2OAorJWYgMC4wMDAxMiAtPiAwLjAwMDEyMAorJWYgMC4wMDAxMjMgLT4gMC4wMDAxMjMKKyVmIDAuMDAwMTIzNDUgLT4gMC4wMDAxMjMKKyVmIDAuMDAwMDAxIC0+IDAuMDAwMDAxCislZiAwLjAwMDAwMDUwMDEgLT4gMC4wMDAwMDEKKyVmIDAuMDAwMDAwNDk5OSAtPiAwLjAwMDAwMAorCistLSBuYW5zIGFuZCBpbmZpbml0aWVzCislZiBuYW4gLT4gbmFuCislZiBpbmYgLT4gaW5mCislZiAtaW5maW5pdHkgLT4gLWluZgorJUYgbmFuIC0+IE5BTgorJUYgaW5maW5pdHkgLT4gSU5GCislRiAtaW5mIC0+IC1JTkYKKworLS0gJ2UnIGNvZGUgZm9ybWF0dGluZyB3aXRoIGV4cGxpY2l0IHByZWNpc2lvbiAoPj0gMCkuIE91dHB1dCBzaG91bGQKKy0tIGFsd2F5cyBoYXZlIGV4YWN0bHkgdGhlIG51bWJlciBvZiBwbGFjZXMgYWZ0ZXIgdGhlIHBvaW50IHRoYXQgd2VyZQorLS0gcmVxdWVzdGVkLgorCistLSB6ZXJvcworJS4wZSAwIC0+IDBlKzAwCislLjFlIDAgLT4gMC4wZSswMAorJS4yZSAwIC0+IDAuMDBlKzAwCislLjEwZSAwIC0+IDAuMDAwMDAwMDAwMGUrMDAKKyUuNTBlIDAgLT4gMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAKKworLS0gcHJlY2lzaW9uIDAuICBubyBkZWNpbWFsIHBvaW50IGluIHRoZSBvdXRwdXQKKyUuMGUgMC4wMSAtPiAxZS0wMgorJS4wZSAwLjEgLT4gMWUtMDEKKyUuMGUgMSAtPiAxZSswMAorJS4wZSAxMCAtPiAxZSswMQorJS4wZSAxMDAgLT4gMWUrMDIKKyUuMGUgMC4wMTIgLT4gMWUtMDIKKyUuMGUgMC4xMiAtPiAxZS0wMQorJS4wZSAxLjIgLT4gMWUrMDAKKyUuMGUgMTIgLT4gMWUrMDEKKyUuMGUgMTIwIC0+IDFlKzAyCislLjBlIDEyMy40NTYgLT4gMWUrMDIKKyUuMGUgMC4wMDAxMjM0NTYgLT4gMWUtMDQKKyUuMGUgMTIzNDU2MDAwIC0+IDFlKzA4CislLjBlIDAuNSAtPiA1ZS0wMQorJS4wZSAxLjQgLT4gMWUrMDAKKyUuMGUgMS41IC0+IDJlKzAwCislLjBlIDEuNiAtPiAyZSswMAorJS4wZSAyLjQ5OTk5OTkgLT4gMmUrMDAKKyUuMGUgMi41IC0+IDJlKzAwCislLjBlIDIuNTAwMDAwMSAtPiAzZSswMAorJS4wZSAzLjQ5OTk5OTk5OTk5OSAtPiAzZSswMAorJS4wZSAzLjUgLT4gNGUrMDAKKyUuMGUgNC41IC0+IDRlKzAwCislLjBlIDUuNSAtPiA2ZSswMAorJS4wZSA2LjUgLT4gNmUrMDAKKyUuMGUgNy41IC0+IDhlKzAwCislLjBlIDguNSAtPiA4ZSswMAorJS4wZSA5LjQ5OTkgLT4gOWUrMDAKKyUuMGUgOS41IC0+IDFlKzAxCislLjBlIDEwLjUgLT4gMWUrMDEKKyUuMGUgMTQuOTk5IC0+IDFlKzAxCislLjBlIDE1IC0+IDJlKzAxCisKKy0tIHByZWNpc2lvbiAxCislLjFlIDAuMDAwMSAtPiAxLjBlLTA0CislLjFlIDAuMDAxIC0+IDEuMGUtMDMKKyUuMWUgMC4wMSAtPiAxLjBlLTAyCislLjFlIDAuMSAtPiAxLjBlLTAxCislLjFlIDEgLT4gMS4wZSswMAorJS4xZSAxMCAtPiAxLjBlKzAxCislLjFlIDEwMCAtPiAxLjBlKzAyCislLjFlIDEyMCAtPiAxLjJlKzAyCislLjFlIDEyMyAtPiAxLjJlKzAyCislLjFlIDEyMy40IC0+IDEuMmUrMDIKKworLS0gcHJlY2lzaW9uIDIKKyUuMmUgMC4wMDAxMyAtPiAxLjMwZS0wNAorJS4yZSAwLjAwMDEzNSAtPiAxLjM1ZS0wNAorJS4yZSAwLjAwMDEzNTcgLT4gMS4zNmUtMDQKKyUuMmUgMC4wMDAxIC0+IDEuMDBlLTA0CislLjJlIDAuMDAxIC0+IDEuMDBlLTAzCislLjJlIDAuMDEgLT4gMS4wMGUtMDIKKyUuMmUgMC4xIC0+IDEuMDBlLTAxCislLjJlIDEgLT4gMS4wMGUrMDAKKyUuMmUgMTAgLT4gMS4wMGUrMDEKKyUuMmUgMTAwIC0+IDEuMDBlKzAyCislLjJlIDEwMDAgLT4gMS4wMGUrMDMKKyUuMmUgMTUwMCAtPiAxLjUwZSswMworJS4yZSAxNTkwIC0+IDEuNTllKzAzCislLjJlIDE1OTggLT4gMS42MGUrMDMKKyUuMmUgMTU5OC43IC0+IDEuNjBlKzAzCislLjJlIDE1OTguNzYgLT4gMS42MGUrMDMKKyUuMmUgOTk5OSAtPiAxLjAwZSswNAorCistLSBvbWl0dGVkIHByZWNpc2lvbiBkZWZhdWx0cyB0byA2CislZSAwIC0+IDAuMDAwMDAwZSswMAorJWUgMTY1IC0+IDEuNjUwMDAwZSswMgorJWUgMTIzNDU2NyAtPiAxLjIzNDU2N2UrMDYKKyVlIDEyMzQ1Njc4IC0+IDEuMjM0NTY4ZSswNworJWUgMS4xIC0+IDEuMTAwMDAwZSswMAorCistLSBhbHRlcm5hdGUgZm9ybSBhbHdheXMgY29udGFpbnMgYSBkZWNpbWFsIHBvaW50LiAgVGhpcyBvbmx5IG1ha2VzCistLSBhIGRpZmZlcmVuY2Ugd2hlbiBwcmVjaXNpb24gaXMgMC4KKworJSMuMGUgMC4wMSAtPiAxLmUtMDIKKyUjLjBlIDAuMSAtPiAxLmUtMDEKKyUjLjBlIDEgLT4gMS5lKzAwCislIy4wZSAxMCAtPiAxLmUrMDEKKyUjLjBlIDEwMCAtPiAxLmUrMDIKKyUjLjBlIDAuMDEyIC0+IDEuZS0wMgorJSMuMGUgMC4xMiAtPiAxLmUtMDEKKyUjLjBlIDEuMiAtPiAxLmUrMDAKKyUjLjBlIDEyIC0+IDEuZSswMQorJSMuMGUgMTIwIC0+IDEuZSswMgorJSMuMGUgMTIzLjQ1NiAtPiAxLmUrMDIKKyUjLjBlIDAuMDAwMTIzNDU2IC0+IDEuZS0wNAorJSMuMGUgMTIzNDU2MDAwIC0+IDEuZSswOAorJSMuMGUgMC41IC0+IDUuZS0wMQorJSMuMGUgMS40IC0+IDEuZSswMAorJSMuMGUgMS41IC0+IDIuZSswMAorJSMuMGUgMS42IC0+IDIuZSswMAorJSMuMGUgMi40OTk5OTk5IC0+IDIuZSswMAorJSMuMGUgMi41IC0+IDIuZSswMAorJSMuMGUgMi41MDAwMDAxIC0+IDMuZSswMAorJSMuMGUgMy40OTk5OTk5OTk5OTkgLT4gMy5lKzAwCislIy4wZSAzLjUgLT4gNC5lKzAwCislIy4wZSA0LjUgLT4gNC5lKzAwCislIy4wZSA1LjUgLT4gNi5lKzAwCislIy4wZSA2LjUgLT4gNi5lKzAwCislIy4wZSA3LjUgLT4gOC5lKzAwCislIy4wZSA4LjUgLT4gOC5lKzAwCislIy4wZSA5LjQ5OTkgLT4gOS5lKzAwCislIy4wZSA5LjUgLT4gMS5lKzAxCislIy4wZSAxMC41IC0+IDEuZSswMQorJSMuMGUgMTQuOTk5IC0+IDEuZSswMQorJSMuMGUgMTUgLT4gMi5lKzAxCislIy4xZSAxMjMuNCAtPiAxLjJlKzAyCislIy4yZSAwLjAwMDEzNTcgLT4gMS4zNmUtMDQKKworLS0gbmFucyBhbmQgaW5maW5pdGllcworJWUgbmFuIC0+IG5hbgorJWUgaW5mIC0+IGluZgorJWUgLWluZmluaXR5IC0+IC1pbmYKKyVFIG5hbiAtPiBOQU4KKyVFIGluZmluaXR5IC0+IElORgorJUUgLWluZiAtPiAtSU5GCisKKy0tICdnJyBjb2RlIGZvcm1hdHRpbmcuCisKKy0tIHplcm9zCislLjBnIDAgLT4gMAorJS4xZyAwIC0+IDAKKyUuMmcgMCAtPiAwCislLjNnIDAgLT4gMAorJS40ZyAwIC0+IDAKKyUuMTBnIDAgLT4gMAorJS41MGcgMCAtPiAwCislLjEwMGcgMCAtPiAwCisKKy0tIHByZWNpc2lvbiAwIGRvZXNuJ3QgbWFrZSBhIGxvdCBvZiBzZW5zZSBmb3IgdGhlICdnJyBjb2RlICh3aGF0IGRvZXMKKy0tIGl0IG1lYW4gdG8gaGF2ZSBubyBzaWduaWZpY2FudCBkaWdpdHM/KTsgaW4gcHJhY3RpY2UsIGl0J3MgaW50ZXJwcmV0ZWQKKy0tIGFzIGlkZW50aWNhbCB0byBwcmVjaXNpb24gMQorJS4wZyAxMDAwIC0+IDFlKzAzCislLjBnIDEwMCAtPiAxZSswMgorJS4wZyAxMCAtPiAxZSswMQorJS4wZyAxIC0+IDEKKyUuMGcgMC4xIC0+IDAuMQorJS4wZyAwLjAxIC0+IDAuMDEKKyUuMGcgMWUtMyAtPiAwLjAwMQorJS4wZyAxZS00IC0+IDAuMDAwMQorJS4wZyAxZS01IC0+IDFlLTA1CislLjBnIDFlLTYgLT4gMWUtMDYKKyUuMGcgMTIgLT4gMWUrMDEKKyUuMGcgMTIwIC0+IDFlKzAyCislLjBnIDEuMiAtPiAxCislLjBnIDAuMTIgLT4gMC4xCislLjBnIDAuMDEyIC0+IDAuMDEKKyUuMGcgMC4wMDEyIC0+IDAuMDAxCislLjBnIDAuMDAwMTIgLT4gMC4wMDAxCislLjBnIDAuMDAwMDEyIC0+IDFlLTA1CislLjBnIDAuMDAwMDAxMiAtPiAxZS0wNgorCistLSBwcmVjaXNpb24gMSBpZGVudGljYWwgdG8gcHJlY2lzaW9uIDAKKyUuMWcgMTAwMCAtPiAxZSswMworJS4xZyAxMDAgLT4gMWUrMDIKKyUuMWcgMTAgLT4gMWUrMDEKKyUuMWcgMSAtPiAxCislLjFnIDAuMSAtPiAwLjEKKyUuMWcgMC4wMSAtPiAwLjAxCislLjFnIDFlLTMgLT4gMC4wMDEKKyUuMWcgMWUtNCAtPiAwLjAwMDEKKyUuMWcgMWUtNSAtPiAxZS0wNQorJS4xZyAxZS02IC0+IDFlLTA2CislLjFnIDEyIC0+IDFlKzAxCislLjFnIDEyMCAtPiAxZSswMgorJS4xZyAxLjIgLT4gMQorJS4xZyAwLjEyIC0+IDAuMQorJS4xZyAwLjAxMiAtPiAwLjAxCislLjFnIDAuMDAxMiAtPiAwLjAwMQorJS4xZyAwLjAwMDEyIC0+IDAuMDAwMQorJS4xZyAwLjAwMDAxMiAtPiAxZS0wNQorJS4xZyAwLjAwMDAwMTIgLT4gMWUtMDYKKworLS0gcHJlY2lzaW9uIDIKKyUuMmcgMTAwMCAtPiAxZSswMworJS4yZyAxMDAgLT4gMWUrMDIKKyUuMmcgMTAgLT4gMTAKKyUuMmcgMSAtPiAxCislLjJnIDAuMSAtPiAwLjEKKyUuMmcgMC4wMSAtPiAwLjAxCislLjJnIDAuMDAxIC0+IDAuMDAxCislLjJnIDFlLTQgLT4gMC4wMDAxCislLjJnIDFlLTUgLT4gMWUtMDUKKyUuMmcgMWUtNiAtPiAxZS0wNgorJS4yZyAxMjM0IC0+IDEuMmUrMDMKKyUuMmcgMTIzIC0+IDEuMmUrMDIKKyUuMmcgMTIuMyAtPiAxMgorJS4yZyAxLjIzIC0+IDEuMgorJS4yZyAwLjEyMyAtPiAwLjEyCislLjJnIDAuMDEyMyAtPiAwLjAxMgorJS4yZyAwLjAwMTIzIC0+IDAuMDAxMgorJS4yZyAwLjAwMDEyMyAtPiAwLjAwMDEyCislLjJnIDAuMDAwMDEyMyAtPiAxLjJlLTA1CisKKy0tIGFsdGVybmF0ZSBnIGZvcm1hdHRpbmc6ICBhbHdheXMgaW5jbHVkZSBkZWNpbWFsIHBvaW50IGFuZAorLS0gZXhhY3RseSA8cHJlY2lzaW9uPiBzaWduaWZpY2FudCBkaWdpdHMuCislIy4wZyAwIC0+IDAuCislIy4xZyAwIC0+IDAuCislIy4yZyAwIC0+IDAuMAorJSMuM2cgMCAtPiAwLjAwCislIy40ZyAwIC0+IDAuMDAwCisKKyUjLjBnIDAuMiAtPiAwLjIKKyUjLjFnIDAuMiAtPiAwLjIKKyUjLjJnIDAuMiAtPiAwLjIwCislIy4zZyAwLjIgLT4gMC4yMDAKKyUjLjRnIDAuMiAtPiAwLjIwMDAKKyUjLjEwZyAwLjIgLT4gMC4yMDAwMDAwMDAwCisKKyUjLjBnIDIgLT4gMi4KKyUjLjFnIDIgLT4gMi4KKyUjLjJnIDIgLT4gMi4wCislIy4zZyAyIC0+IDIuMDAKKyUjLjRnIDIgLT4gMi4wMDAKKworJSMuMGcgMjAgLT4gMi5lKzAxCislIy4xZyAyMCAtPiAyLmUrMDEKKyUjLjJnIDIwIC0+IDIwLgorJSMuM2cgMjAgLT4gMjAuMAorJSMuNGcgMjAgLT4gMjAuMDAKKworJSMuMGcgMjM0LjU2IC0+IDIuZSswMgorJSMuMWcgMjM0LjU2IC0+IDIuZSswMgorJSMuMmcgMjM0LjU2IC0+IDIuM2UrMDIKKyUjLjNnIDIzNC41NiAtPiAyMzUuCislIy40ZyAyMzQuNTYgLT4gMjM0LjYKKyUjLjVnIDIzNC41NiAtPiAyMzQuNTYKKyUjLjZnIDIzNC41NiAtPiAyMzQuNTYwCisKKy0tIG5hbnMgYW5kIGluZmluaXRpZXMKKyVnIG5hbiAtPiBuYW4KKyVnIGluZiAtPiBpbmYKKyVnIC1pbmZpbml0eSAtPiAtaW5mCislRyBuYW4gLT4gTkFOCislRyBpbmZpbml0eSAtPiBJTkYKKyVHIC1pbmYgLT4gLUlORgorCistLSBmb3IgcmVwciBmb3JtYXR0aW5nIHNlZSB0aGUgc2VwYXJhdGUgdGVzdF9zaG9ydF9yZXByIHRlc3QgaW4KKy0tIHRlc3RfZmxvYXQucHkuICBOb3QgYWxsIHBsYXRmb3JtcyB1c2Ugc2hvcnQgcmVwciBmb3IgZmxvYXRzLgorCistLSBzdHIgZm9ybWF0dGluZy4gIFJlc3VsdCBhbHdheXMgaW5jbHVkZXMgZGVjaW1hbCBwb2ludCBhbmQgYXQKKy0tIGxlYXN0IG9uZSBkaWdpdCBhZnRlciB0aGUgcG9pbnQsIG9yIGFuIGV4cG9uZW50LgorJXMgMCAtPiAwLjAKKyVzIDEgLT4gMS4wCisKKyVzIDAuMDEgLT4gMC4wMQorJXMgMC4wMiAtPiAwLjAyCislcyAwLjAzIC0+IDAuMDMKKyVzIDAuMDQgLT4gMC4wNAorJXMgMC4wNSAtPiAwLjA1CisKKy0tIHN0ciB0cnVuY2F0ZXMgdG8gMTIgc2lnbmlmaWNhbnQgZGlnaXRzCislcyAxLjIzNDEyMzQxMjM0MSAtPiAxLjIzNDEyMzQxMjM0CislcyAxLjIzNDEyMzQxMjM0IC0+IDEuMjM0MTIzNDEyMzQKKyVzIDEuMjM0MTIzNDEyMyAtPiAxLjIzNDEyMzQxMjMKKworLS0gdmFsdWVzID49IDFlMTEgZ2V0IGFuIGV4cG9uZW50CislcyAxMCAtPiAxMC4wCislcyAxMDAgLT4gMTAwLjAKKyVzIDFlMTAgLT4gMTAwMDAwMDAwMDAuMAorJXMgOS45OTllMTAgLT4gOTk5OTAwMDAwMDAuMAorJXMgOTk5OTk5OTk5OTkgLT4gOTk5OTk5OTk5OTkuMAorJXMgOTk5OTk5OTk5OTkuOSAtPiA5OTk5OTk5OTk5OS45CislcyA5OTk5OTk5OTk5OS45OSAtPiAxZSsxMQorJXMgMWUxMSAtPiAxZSsxMQorJXMgMWUxMiAtPiAxZSsxMgorCistLSBhcyBkbyB2YWx1ZXMgPCAxZS00CislcyAxZS0zIC0+IDAuMDAxCislcyAxLjAwMWUtNCAtPiAwLjAwMDEwMDEKKyVzIDEuMDAwMDAwMDAwMDAxZS00IC0+IDAuMDAwMQorJXMgMS4wMDAwMDAwMDAwMWUtNCAtPiAwLjAwMDEwMDAwMDAwMDAwMQorJXMgMS4wMDAwMDAwMDAxZS00IC0+IDAuMDAwMTAwMDAwMDAwMDEKKyVzIDFlLTQgLT4gMC4wMDAxCislcyAwLjk5OTk5OTk5OTk5OWUtNCAtPiA5Ljk5OTk5OTk5OTk5ZS0wNQorJXMgMC45OTllLTQgLT4gOS45OWUtMDUKKyVzIDFlLTUgLT4gMWUtMDUKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9nZGJfc2FtcGxlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L2dkYl9zYW1wbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTczMmIyNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9nZGJfc2FtcGxlLnB5CkBAIC0wLDAgKzEsMTIgQEAKKyMgU2FtcGxlIHNjcmlwdCBmb3IgdXNlIGJ5IHRlc3RfZ2RiLnB5CisKK2RlZiBmb28oYSwgYiwgYyk6CisgICAgYmFyKGEsIGIsIGMpCisKK2RlZiBiYXIoYSwgYiwgYyk6CisgICAgYmF6KGEsIGIsIGMpCisKK2RlZiBiYXooKmFyZ3MpOgorICAgIHByaW50KDQyKQorCitmb28oMSwgMiwgMykKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9ncmV5cmdiLnV1ZSBiL2xpYi9weXRob24yLjcvdGVzdC9ncmV5cmdiLnV1ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTFiZWJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2dyZXlyZ2IudXVlCkBAIC0wLDAgKzEsMTU0NyBAQAorYmVnaW4gNjQ0IGdyZXl0ZXN0LnJnYgorTSA9SCEgMCAiIDAgISAgICEgICAgIjAgICApKCAgICAgO0ZcQDtGJU05MCAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAhICAiICAgICAgI18gICAgICAgICAgICAgICAgJCAlLQorTVwgICAgICAgIDBdPCQgJSVaISAhMj5QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTSAgICAgICAgICAgICAgICAgICAgICAgICAgSCAgICArIUAgICMgTCAgIFQxICAgLiVAICAjUUggICEgPgorTSAgIDEoUCAgJEJEICAhLE8gICA0LSAgICUzSCAgIThfICAgNzEwICAmJEggICFFMCAgIDo1MCAgJlVEIAorTSAhUT8gICA9OTAgICdGSCAgIV1QICAgQD1AICAoN0QgICIpXiAgIENBICAgKShEICAiNi8gICBGRSAgIAorTSlZSCAgIkI+ICAgSUkgICAqSkggICJOUCAgIExNMCAgKztEICAiWl8gICBPUSAgICwsQCAgIycsICAgUgorTVQgICAsXTQgICMzOSAgIFVXUCAgLU40ICAjP0ogICBYXCAgIC4/MCAgI0tYICAgW18gICAvMCggICNYJworTSAgIF8iQCAgMCEgICAkJDUgICEiJlAgIDBSJCAgJDBHICAhJSswICAxQyggICQ8WCAgISgvQCAgMjQoIAorTSAkSSggICErM0AgIDMlKCAgJFU4ICAhLjdAICAzVjAgICUhSiAgITE8ICAgNEc0ICAlLVogICE0QCAgIAorTTU4OCAgJTosICAhN0QwICA2KTggICVGOyAgITpIICAgNlowICAlUkggICE9SzAgIDdLKCAgJV5YICAhQAorTU9AICA4PDAgICYrKiAgIUNTMCAgOS0oICAmNzcgICFGVyAgIDleKCAgJkNIICAhSVtAICA6TzAgICZPWgorTSAgIUxfUCAgO0AsICAmXCkgICFQI0AgIDwxKCAgJyg4ICAhUydAICA9IiwgICc0SSAgIVYrUCAgPVMsIAorTSAnQFkgICFZL1AgID5EMCAgJ00qICAhXDQgICA/NTggICdZOiAgIV84ICAgQCYwICAoJUkgICIiO1AgIAorTUBXNCAgKDFbICAiJT9QICBBSDQgICg+KiAgIihEICAgQjk4ICAoSjwgICIrSEAgIEMqQCAgKFZOICAiLgorTUxAICBDWzggICkiWiAgIjFPUCAgREwwICApLyogICI0VCAgIEU9OCAgKTs8ICAiN1hAICBGLkAgIClHTQorTSAgIjpcQCAgRl9AICApU1wgICI+IEAgIEdQQCAgKiAuICAiQSRQICBIQTwgICosPCAgIkQoMCAgSTI4IAorTSAqOEsgICJHLCAgIEojOCAgKkRbICAiSjAwICBKVDwgICpRLSAgIk00UCAgS0VEICAqXT4gICJQOSAgIAorTUw2SCAgKylQICAiUz0gICBNJ0ggICs2ICAgIlZBQCAgTVhMICArQi8gICJZRFAgIE5JPCAgK049ICAiXAorTUhQICBPOkQgICtaTiAgIl9NICAgUCtIICAsJyAgICMiUUAgIFBcUCAgLDMxICAjJVVQICBRTVQgICw/QworTSAgIyhaICAgUj5UICAsS1MgICMrXVAgIFMvUCAgLFgiICAjLyIgICBUIFQgIC0kMiAgIzImICAgVFFYIAorTSAtMEQgICM1KkAgIFVCXCAgLTxVICAjOC5AICBWM1ggIC1JIyAgIzsyICAgVyRUICAtVTMgICM+NjAgIAorTVdVXCAgLiFFICAjQTpQICBYRyAgIC4tVCAgI0Q+MCAgWTdUICAuOiMgICNHQjAgIFooXCAgLkY0ICAjSgorTUYwICBaWVwgIC5SRCAgI01KICAgW0pYICAuXlQgICNQTjAgIFw7XCAgLyslICAjU1JAICBdLSAgIC83NgorTSAgI1ZWUCAgXV4gICAvQ0YgICNZWlAgIF5PICAgL09VICAjXF5QICBfQCQgIC9cJyAgJCAjICAhIDEoIAorTSAwKDYgICQjJlAgISEiJCAgMDRHICAkJisgICEhUyggIDBAWCAgJCkvICAhIkQoICAwTScgICQsMyAgIQorTSM1JCAgMFk2ICAgISFAICAgMDQgICAkJiAgICEhMCAgIDAwICAgJCQgICAhITAgICAwOCAgICQmICAgIQorTSEwICAgMDggICAkJSAgICEhQCAgIDA0ICAgJCYgICAhITAgICAwMCAgICQmICAgISFAICAgMDQgICAkJgorTSAgICEhQCAgIDAsICAgJCUgICAhIUAgICAwNCAgICQmICAgISEwICAgMDggICAkJCAgICEhQCAgIDA4IAorTSAgJCYgICAhITAgICAwMCAgICQmICAgISEwICAgMDAgICAkJCAgICEhICAgIDA0ICAgJCQgICAhIUAgIAorTSAwOCAgICQlICAgISFAICAgMDAgICAkJCAgICEhICAgIDA4ICAgJCUgICAhIFAgICAwOCAgICQlICAgIQorTSFAICAgMDggICAkJiAgICEhQCAgIDA0ICAgJCYgICAhIUAgICAwMCAgICQmICAgISFAICAgMDAgICAkJgorTSAgICEhQCAgIDA4ICAgJCYgICAhIUAgICAwNCAgICQlICAgISFAICAgMDggICAkJiAgICEhMCAgIDA0IAorTSAgJCUgICAhITAgICAwMCAgICQkICAgISEwICAgMDQgICAkJiAgICEhQCAgIDA4ICAgJCYgICAhIFAgIAorTSAwNCAgICQlICAgISEwICAgMDggICAkJiAgICEhQCAgIDA4ICAgJCYgICAhITAgICAwMCAgICQmICAgIQorTSEwICAgMDAgICAkJiAgICEhQCAgIDA0ICAgJCYgICAhIUAgICAwMCAgICQmICAgISFAICAgMDQgICAkJgorTSAgICEhQCAgIDA4ICAgJCQgICAhIUAgICAwMCAgICQlICAgISFAICAgMDggICAkJiAgICEhICAgIDA4IAorTSAgJCUgICAhIUAgICAwOCAgICQmICAgISFAICAgMDggICAkJiAgICEhICAgIDAwICAgJCQgICAhITAgIAorTSAwNCAgICQmICAgISFAICAgMDggICAkJiAgICEhQCAgIDA4ICAgJCUgICAhITAgICAwOCAgICQkICAgIQorTSFAICAgMDggICAkJiAgICEhMCAgIDAwICAgJCUgICAhITAgICAwNCAgICQlICAgISEwICAgMDggICAkJQorTSAgICEhQCAgIDA4ICAgJCYgICAhIUAgICAwOCAgICQlICAgISFAICAgMDggICAkJiAgICEhICAgIDA4IAorTSAgJCYgICAhIUAgICAwNCAgICQkICAgISEgICAgMDAgICAkJiAgICEhQCAgIDA4ICAgJCUgICAhIUAgIAorTSAwOCAgICQmICAgISFAICAgMDggICAkJSAgICEhQCAgIDA4ICAgJCYgICAhITAgICAwNCAgICQmICAgIQorTSEgICAgMDQgICAkJiAgICEhQCAgIDA0ICAgJCUgICAhIUAgICAwOCAgICQmICAgISFAICAgMDQgICAkJgorTSAgICEhMCAgIDAwICAgJCUgICAhITAgICAwNCAgICQmICAgISFAICAgMDggICAkJiAgICEhQCAgIDA0IAorTSAgJCQgICAhITAgICAwMCAgICQmICAgISFAICAgMDggICAkJSAgICEhMCAgIDA4ICAgJCUgICAhISAgIAorTSAwOCAgICQmICAgISEwICAgMDggICAkJiAgICEhMCAgIDA4ICAgJCYgICAhITAgICAwNCAgICQmICAgIQorTSEwICAgMDQgICAkJSAgICEhQCAgIDA4ICAgJCYgICAhITAgICAwOCAgICQkICAgISEwICAgMDggICAkJgorTSAgICEhMCAgIDA4ICAgJCYgICAhISAgICAwOCAgICQlICAgISEwICAgMDQgICAkJSAgICEhT1oqQEVBNgorTSozMTU2JDU6NlRVRjxERTgvUjRNLEMgXjE2OiI9N1VQMlNdSTxGTTs2Ji1CMTNFTzokXSQrNTk8PEc9JQorTTElSVI/N0lROkYlQzZFSUgyNDU/OVVBLzxHVF42NUlCOkcpTj1ISU02Q10pNiZdQjojIC4tR1YmPEYpQQorTTkoKUAsQjRNJTNFWjhGQUI4RiEiMjRVQzhWTTgrMiA9JlNFVUBXSU1CRFNeJEBENSs2RUo2VUhNKTMoXgorTTE2KVI8RkU6OEY9SjxGTS82JVFCOEYtOzZFOSk2RTlCOkctSzZWLUk4VUEpL0YlSjlGKUI7RzVVPzdJSAorTS9TUT84Vy1TOjRFQD8nLUo4RiBFJiRSKDg0NF46Nl1COiUwSSRFQEkjQShNMjU5PzonLVo7VEFIOCQxJAorTS9GKU82JUElNlYkXzNYIio4IjxWOlZJVD8nVUArM1xZQERRNiA0NCE6QCIoPkhJSSwjOSQ2JUQjLj9ZJAorTT1XNUg4JURfKjFAQCszITA8RjlLOEVAXzhXPUI6Vi1CNUJURTE2JUg3RDRNLCZdVzIkUTo2VylcOzVNUgorTTpVSTo4IyElOlc9RzE2LVoqNUE2NjZRWjtGWiE4Ri04JzMhQjhFSDsjQTUtO0VJLzhVUUY9U1hNLyMoVgorTTZDKUhARk1LPEZROzhWKUs6VEU1LlE0QDhISio9ODVSLyFALihGQU44RiBbJEJPVTYlNSQ6R1VaOFRVQworTTpWTUM3RilKO1ZNQDNWIUo2NUUtMSRBSjhTXTg3JkEtL0NZOzgmIUg4RilaPjcpVTpFQSU6NU1LQDRcWQorTThILVY+VkU4LUNRO0BXIFYrNFFPMyM9NjQhVSkxIyA1JiNNJDgnIUM8RyE4MyNZJDolQS07RUE4KzM5KworTTYlSVpDJ0krL0ZFSjtHViI+JERWLlRFQCAzRCExICNePDgpUC1FQUE4Rkk/KzFMRTwoKUY4Vi0/MjJETQorTS5SVS06RilCMyM4TTNXIUI7Vyk4LjNERyZTRUA2JUBJJzYpWzpGLUAzNklSNlRdUjpFSUkvQj04PEdJSworTTYkXUcvVTkkNkcpUjs3KVI0JylILEJVODxFOE0qU0U1OiYhJzZGRUI+VUBWPCYhOi9RTSk8RylaQFcpOgorTTlFTUI8RTlBMSEoNTEnSio9NzVdX0cwUiNBQSk6RklXOiIgOzI2QUI8NzVOOEQ1JDhHKUo4RV0wPkcpQAorTTE3PVs4RklIMjNZQDlUNSU4RkUtLjNRLTdWKUs1Qj1CQCcpWjpGRTs7JFVGQFRMVjpILU4/Ny04MjVJVworTT5XISkyNF1LMjI0VjVEMTY6NiRAJiMoXDE2RS02U0RNN1ZJOj1XSVo6Rk1ALUFMRSszOUY/J0k4MzZNOgorTTlHViJARkklL1gpJTpQJFYgNUAgXCcpTT5GLTs2VilWPVJULik2Lig4Ri1QPEYkVi1GIF42Rkk/MzZYWworTSZSVTs2SCIiOjNYVi8iIFIyMzk2MSM5OzxXQUk3JV1HOFVFJTwkVSU6I1hJMTYpUj1WQSkxVTksK1VBRworTTpFTTw6Vi1SOUVAWTE4IUo1REVIOkchQzgkRTE7V0lCMjVBKSlWWUAtQyk4PVZNSjM3NCM4T1kpMjJUNQorTSRCVUI8RklKPTZVQCxCIFYzNilcPVI0LiZTOUI+NylLOURVJTMmTUo4RkElOUdJLCs2XVc6RylLNkNdOQorTTokVTU6RylIOCQwWTI1TTwyMjRFOCZNUjlFTTs8Jy1aPVRFOT5IKU4/JzlAN0VFSjxGWTA+SCogOkQ1OworTTIzRSk6JlxQKVJFODYlSUA4UTQyLCZBJTwnSVU+R0lKNyJUQCUyNS06RVItMzM5QTpGSVo/KClaNlVBQAorTTxQJTggNkQgUicpMTpGKTg4VUlNP0VQOyk1OVMxJFVXPzcgVi42QS0zJFE2MjcpSC1DKFYxJ0oiPEVdNQorTTUzWTQ1MiBfOCVBKTYmLTk2Rl1SNkREXzokRFk4VkU+NkYpTT5GXSksJFBNKEAtKVo1QSk2JylSOUZFLQorTTVHKiM2RFVCOkZJJDZFOE0zJ1VaMjRVTjdFSS0tQlU7P1YpSzZHKVI6VikpNiNcUiszOUA2RkFDOUY5SgorTTcjOFYvVilVPVJUQCYhNTY8RlVKOkVdOC41SUE4Rl0oMic0ViZTRSw6R01NOiRFJTglOFYzNy1KOjYhKQorTTYmSUgvQiA1KzAtJFFUVS07V0lfOCJUWzdIKV07Rk1CNlVZOjpGUTs/OEYqPEVJQzgzOFA6NURCKjFNKQorTTgkNTY6UihJMSNEVjhWWVJBWC1dPVVcVixDWUo+RFBZKCM5TDxGVV09Nz1AMzZdWyA3SCE8ICJCQDZZQgorTTQ0QUA2Ni1SPVNcVC41XE0uNl1dQCYpOjwmXToxNERePjcpQC5SVT8+QC1SX0chRjMmIU4oIjUpOEVJJQorTS9TOSU6SCFCMyNZKTYkRTs+R0lMPEdJWjxFNFY4JEUkMjREXy9DOFk4JU1COkUhQjhIKVo3RUVKPTNYWQorTTYxTEk9R0klMTVZWz5HJF8mUzlaOFZNQj03NVI4RF0vOFZFNjMmKTs4Vl1GPEY5OTE0RTg2RklXN1U0WworTSxGLVI8RjlROkYtLzYiXSU7VilCOlUwQCgjOTs+RylRODowTTI0REcxNk08OFZBQjhXTVI5Uyg4LlVBJAorTS1FQSQ4NzFML0I0SSwnNiI4Ji1IMTY4JDpZTU5AKDldOUYtQS9SNT83IjRLKCJUWTU0VUoyNlFJKzJVOgorTTZFWCM+SFVdOlVJKTI2KiM4Myg4KEVRWiBWOiU6RiEtOlcoIT5AJVcgL1lbQUc9QDYjRS02RilTOiVBNQorTTE2RU88R0FZQEdOIkJHISktISlCOUYpMCs1SVM3RSFNPlZdLDY3LTUoIlUpOCVASyUzOUA+Ry1SOCNdOAorTTM2TiI7RDEvPEgpWjpVQS0yNUkpKzJUVjYjIFYvVFVKOEZNSDpIKUo2RU1DOCRFNSwjUVI6VFU5L1VJWgorTUBGVEAyJy1GPUZJQjhGVVM4RFVDPFgtVTpXIVI2NDZLPkdJQjQ0VUc6JUVKQEcpQjZGSUo6VlogPlZZSworTTojTFY3RUVKPVYtJCRCNUo+RzVOPVREQCZSVT86QC06TjQ1KD5XTUsrMUEpPEZJODpWLSk4NEw7JiJEXworTT4mVTo5RkRWMzctUzsmRTs9N0FdPUcpSzZVQS03IzkkL1MwOy9WIUIxNklIKzQ1OzZALUNFRk1LPTZNOgorTTI1OUI3Q1xNLUYhTC9UUUs4VUlCOkZIIThAJSQgL1lHQEdVUzYjISQ4JiE6NiNFJCs2IUs6VklSPkc9RAorTT83PU0zUjU4MjNEUis1RUI6JFVCPkchKTM3SU8vUyhSLlRMRSYiVUE6RylXMzNZTTM2SiI6UzhWNDZZVQorTT5GXSwxJVE2LEI0UjdEMFItQyE2MSUhQDM2SVI6VkVCOFVNQTI1OUo2NFVCL1M5Sz5GTEUpNUlLOlYoWQorTS9GKVI8RU06NCdWKjs2QUo2REdePEdNSjpWKVo8RFEkPTchRjolITs4RjlWPzdVVTxGPF4yMzFDPEYpJAorTSUyRUI9NykwPkggWyZTUTgzJUlIOCM4RzpHSUAmUFhNOEZJSz5XPUk4I1w4JTE0TTw1SSw4VyEpL0ZFWgorTTxGXUY0VVIiPidJTDtHKTo2REUsNjVYRSs1NS09VklGPkZJOzomISUvU1xWL1YgXikzWSw4Vk1COEVAUgorTSszRUs7VkFIQEcpWiA3PCE2MCNeOlc1Vj8kVF8yNFVBL1M4Vi5RTFYzNTk6NyZJUjY2OUIzNkFGNiREWworTSgiNFYvViE4OEc9TzZEVVI8RkEkMTNQXCpQWDsyNl1COkREVjolSUM/RUhQMjZVOzRXVVo2RDE2OSRUXAorTSs1QToyNiBeL1Y5SDolRTs4Rk1DMTRVSjpGLUI6JDE4NlVBOjpHKUEwMzElMzYpNisyNE82Rk1SOEQxQgorTUE2KSUzJUk/X0VRTTpGVUs7Rz1HNjclWTxGTFk1RVE8OEY5Wj03UVo2NChNNlcpOjgjOE0zJilIKjUiIworTToiVFkxMzhXOEZIXyo2QVo2QjQ4KTRVOjpHNVo6Vj05KlFALiglTVA6JUFLODNdLTw3SVo5RiEtPTc1UworTTZXSiM4VU1BNiYhSS8iRFY1NyE8MicpSzwmTUM2I10kL0RFQzZERF4rNi1SOlZFLSoyVEUxNyFDNlgpQgorTT1AJiIgNkQgQkYpQjlHTFYtRUFKOiVIIzI/WF8yNTk4NiU5OjxHKU86NDFAPFYtODUyREstIzkpNiVFQworTTpGPVI6VklLOCU0Xi1DIC4jQlVIOkYpJTNXKUo8R1xeJiI1Pzg0UVI8RVkpLUNZNjYzUF4zJiFSOiI9QAorTT5HKVo2NFFCOkVYXzVGXUo6Vj0+MjRFQjxHNVo9R0lSOEYhODY1MEkmUjRZPEZdRztYKUgvQzk4PVYpJworTTdVITo8RjlQOkY5Uj5GS1M1JFFCOlYpPDlFTiJARyE6MjZdTzMmQT4yNTkpNkNZLD5HSUk3VUUlLUNFQworTTIzWUI+RjxbLlQxOTY1STYzNilKOiRERSYgRDsyVUEsNkVEXi9SVSU6VU1SPkc5VTpEUU5CRz1DNlRRSAorTTpVNFsrNUFOPFVJOjhXKU47Rz1DMzRVSDpWTUo1QjRZOlYtSzZUMSkuUlU/NkRRJzpQJV0gNkwgX0VdJQorTTgoIFYrM0VKOzRRQTI0RT44Ji1KOiYhNjwoIVo9VF04OldJSjgjOFssQlUpOVVdLDMmKVs8NilHOjVATQorTS5TREAmIShfO1ZVKTM3KVdASCk0KCFARTI1TUY6Rik5LUNMUDYkNFkxNU1WPEIoUDpHKU8tQkUvPkdJSgorTTYkMUI6JU1DOCU5PD03VV0+VylTOkYtSTM2QTUuUUA7NkZJVUBIKUovQlU+Pz9ZUjY1OF4rNkk6NyZZOworTTNXJVc6JDFDPTZZTDYzXVI8Rl1COScpRy41SUI7Jl1IMyQxQ0BGWVM+VkE2NFRNQzlVST85RihQMjYlLQorTThVSTo4JklSPkZUXCpRQEk1RFUtMjVNJS9ERTgzJTlKPkdJRi9BVTpESClQODRFOjhETF42NkVGPzZYWQorTTgnKUs0J01SNiM5OjpYIV04UzhQOFZNRjg0USg6JiE/M1Q2IjZFUCE6QCVQIC9ZSC9UVVstIjQ9NFNYUAorTTojOFY2RklKOEVNKStVTic6RylSMzRWIjpGKUA3I1BAKzZBVzhERTo9V0k7OCYhOC1EMF8uUyhJKzYhSgorTTYlMTo6SCldPVU0VCpTOTg6VklDPCREUDI2JSkpU10tPEdIXyk1SU83UigyL1dJXzxFOEArNDE6OEVJQgorTTZHNV0/N0lKNyVJUT1EVSwuM0xHJiNNOTxILVw4QlRFOEZWTjlGSUIyIzk6NjVFSjY0RTo8RVBZMycpUAorTTxGSF42RilANkYpSjIxTUEzJSVLOkZAWS1WVUs5R0lXO1YhPzZQLUtTViElJlNNPy9UNUI4RklSPzhFWgorTThVIEArNkE4KzJVQDI0RSUyNiE4NkZNSzEiVEU1SSoqQEZBODIzXE0tRyFQNkdJWiwjITA6RDU6NyY4RQorTSszRVpCRyk5LjUhQjY1TS0tRkVSPCREUDhGXCE6ICVPIC9ZKTI1RUk2JTBbLlFMOzYjKCkzJklKOlYkVgorTSZUVV86RlVbOEYpSzMzXUo6VDA4JTRBWjwlRTo8R01KO1YtKS1EUUQvQlRSLURBOjM1XTgzVklKOEYhJQorTS5SVFk2Nk1CPEYoTS9WOUAtQzk6PkdNQiwkRTovQUAyKjZCIjpUNEUiMlUtNjQxLThXNiY/NllCLjJFOworTTtFSTgvQkQ4I0FAQDEnSVo1QihbPEcrXjo3KUo2M10+N1YpQjMlUUM6VFxeMjcpWjxGQFYuNU07NyZJSgorTTZBNT82Q11HOEYtQC42IUg2NllVO0ZBQzM0VTw8RkBeJlJVKC9DWS84VllSPEhFTThFREUmVTlNKCJVTQorTTEzOF8tQ1kpNkVBRioyITU4R0olREdJKS1CIDgpNylXOlZJTjgkTTg6Ri1POkZAWyoyNTk9N0lSNiU5QgorTThFTSUrNFFPOzY4WUBGQVEgNzwhMjAjUzYkNUAxJklXOCYlJSszXSktJV1LOlZBJTEjIUg6Vi1aPkZJSworTTpVXSk6JkxbJiFAXjxGTF8tRFFSPlcpTzZDOFI7ViUlLlNZNjZFOSQ2RilKO1YhOjZFOSkyMzhfPEc1VworTS4zOUA2M1xfOic1Uj5GJTA2MzhLLCM5KDonPE0uUUBJOCZBOy9UMSw7N0lKMzI0Mi1GPS0zNURNKjAsKQorTV9BTF42NERFMygpUjhHKUg4JU1COCVJOzhHKVo8RDBFMjchUj1HKT4zVUk7OVdNTDpUMS05VFFKOFVJSgorTThXIUgzNkoiOkYpVzo0RS89Vl06MlU0WyhDXTgzNkVSPTgxVTxFTSQtJEVJKCJVSDZERFsqUFktOEU5KQorTSRCIS04VilOQEhJRyowWC4lNSIiPzZJOTomIS06RjlVPkZNQDI1NUA2NUVaOkZBQzwoSUAtQzkpN1YpSgorTThGWVQgN0ghPCAjXjYjWSkxNj1PMyVFUDgzXSktRilaPVZAUDEkRSktQyFRQEZJSzpWLUtAJz0pKCI1NgorTThFSF8rMj1DQkZJSjZEMF8zNikvMSM5LTomXSU4JkVKPEZBOzonKVI4U1xNOEc5WjYjRT8uMlUlOEcpRAorTT5IKiI4Q0xSMjVBQDpGSUgsQERANiZJSjo0UFkzNylSOVU0QCs2IUA5VUk4NTJELiNCIFIsI1BNMyc1SgorTV9EPFkyJDVAPCZJOjM1WVU9NyktKzNdSzxHNUo6Vl1WOVVRUjtVTTgxNiFCPEZNOTY0UUA2RUlOQkcpOQorTTxHSS04J0laOCVBUTIhKEU1QyEpOkZFVUFIKUo2NE0kOCNMXDo2SUI4IyguJlVFQjEzOF84NThWLUVBTgorTThEUF8uUVRfPTgpVzZGLTYtVilVO0ZZRjtVXS04VlEvNTZJTzZGLUItRDE1KzI9QD5IKVpAQCVVIDcgIAorTV9FOFk2NTU2OiREUDhHPUk5Uzk2PEcpQzI1QUM2MjRAMyc1UjomKUo7R0lNPCQwRS4zWFkvVDRNLjcpPgorTThURF4yNDUtMSNEVi9VRUI5RUE7PCc9QjM1WiJCR0lLL0RFOjpGTSQ4Izg7LURVQjlWVVhBNk0kMENdKQorTTgmPTo7UUwpIjQ1NTM2XU82JDVLPEcpVzJTOUY3J0lMOCRFNDAyIEssQUxJKjNdTzpeSSkrMjRWMzZNSgorTTglSVA/NyFGOFUxNjhHKVI4RUlKPVclOzwnKUoxNEVDOUcpUjlURSQxNFU6OUgpVzZGLUIxJilaPEVFOAorTTxGIEUrM0xfMjRVMDpXVV03JUU/NkZBRDI2ITs4Rl00KjM5Tz5GKTgvQzhfNCJUXzxGPFsrM000MjZJVQorTTxGLUAxNEU6PTc1WiBXKjMxJUFQOjIoWThURTk6VUklMSFMMiwmKVBCQCVNIDc4IF9GIF44JVhHLjUwRQorTSwkUUY+RTk6OlZNOjM2RUw5QlQ7LUchUjclSUY+RzlLOlZZKzEiNEAtRUEpMzY9Njo0VTY6JiEvNkYhKQorTTYkVSQ6JEUvOFZJQCszRUs9SDYiODRFLTpGXSctVERJJlM5KTFXLVI/Nyk5OCREXjEkRTg5UzA1I0JVKQorTTM2TVc7VUlHNjY6IjhTIUAuNjlaOkQ0UDg0ME0vIyhWLlM5OTxLRUAvUiBWM1YpQjIkQVJCJzVGOEYpQAorTTZGKUo2VUE/O1ZJPDxGTUo2REVLPVcpQjgkRF8vREU6OEZNTzhGQS0xJUlSOjQ1NjpXKUg2NEQkNiwtOworTTpWWUI2NklPOzdJQzg1RS06R10/M1ZaKj5GXTgoQU0pNiRFVTxEREUtRiEnOEZNLzlURFA6Nk1GPEdJXQorTT82OUE2VylbKTQlKSczRU06VVhfLCFAOCs1RVogNlghPTAjXjhFXUs6IjRFNyU0Rys0MUI7VVFXPFZNMAorTTo2TUs2IiBNOFZQWTMzXTw8Ji07OCVJOC4xNE0xMyFDNiJNQDhGKVJAJSFCO1YtTDgzWSU4JkU6MTYgXgorTSszOFk7SClCMyVFSz1WID0yVUBFKjNcWTZHLVU9NUlCNkQxKS9VOUA1NDBALURVOThHKVI5RykpLCZJQAorTSc0QFY1R0laOCJVJTg0MSk2RUk4MzVFRl9FRFwsQ10lNiZNQDhHKVY7RylOOlcpSzIzOUA4ViE4OCYlOworTTZFXUM8R11ROjVAVi1DWTs6Vi1DO0dJSjI0NTg6Rk07OkcpUjokMSQ6Jk1LOFVAXzY2JUA4RyFDOUZZUgorTTg1QTk4Vk06NlY5SzhVTUgrMUBCMjM5Rj5HKS86JkksMSVJJDZFQE02JklKOSZVVUJFUUM5RyoiMTRBOAorTSoyKTg6Rik6OCRESSo4KF46UCVGIDZIIF9FSUg8JiBNKCNdTjIzXF4xJklSPkZNUjZEXTk6RjBJKTVJOgorTSs1QSUxJUU/L1MhKDI0RFIuUzg7LjNYOy9GKS08R10pMzZdUj1WJE0pNUFfO1NFOjs2JFYpNF1XOiQxOAorTTpXKUApNDE5LEJEXjI0XUs5Rjk2OEY9KTM1QSk2RUE5L1VFQDYkUS86RjlTOCMhLDgiNSkvVDUwO0cpOAorTTE2JU0vRilLOFVcWTM/WVA2IzhfLlQ1QDlHKVU9Ni1LOFVZRjwlMDI2JyFBMTVFQTY1QUA6JyldPzhFQQorTS5SRE0xNk1KOFcpWjpUNTg2RSFQOCVJUDxGQF8uNkomQTcpKS9VWUkzVEFSPEdJXz5HKVA4JyFDMjNZQAorTThEVS89VURLKjM4WzZXLiQ9V0laOiQxODcjWUc4RV1COkYpMz5IOTovVilaPTU4UC9CRDgyNzVCNyY5QAorTS9UTiIvRDQhPEAlQiAsUFY2JUA7L0NcXzglSTgyM1k4OkdJUjw2KF8uNU1JL0M5OTYiVTg5RUEtNiRESQorTSczOSk2JERWKzQwWykyVF8xJl1WMlM5Oj5IST4mIUBQPEglKy41TVI4VUFDPkdcRzg3KUY6IzhbIFNeKworTSwjXTs2VThPMSYhUTolOCMyP1ktMzYhUDhWQTk2Rl1NOzZNLDVGKF8yNiBSJzRdVzdTWS08RDE+O0clOworTSszRVM8NExWLUNZQTpXUU48RkFMPCZFSz1VWDguN11QL1RFQTomIUo7NklbPThJVzUhTEsrM0U4PDdKIworTThENS8xM106OiRFLThWRTkuNiIjQkZMXys1RUs4JFVCNyZVXD83SiM+Jkk5LjNZQThUVS06RiEpKjI0XworTTMlWiM+R0pDQEcpJzVERFA4RlVCNjVZSzcmOVU8VTklOldVSjE1MEUjQzlSOEIoXjElSU5AViQhLSAkQAorTSAvWFI2Jjk7MTVBODI1OTo2JERZNiZJWj01WFYsJEU2NjY9SzgzTSk1RFUtNlYhNCsyVSk2RUE2NyREVgorTS1FNF42Jz1LNjNYUDpISSkjQEQ1MTdJUDEjRTo6Vz1aPTdcUDVHPVE6RThNKTU1SDI0RUgzMzhWMyQxQgorTT5GRSkzVDElLjVCJD5HKTs6SCoiOUcpSjY1TUM2VlxbJlNZQjVERSk2Q0VRPFZRQTEkT149WClOLyFMVgorTTgmWiI9RllMOUdKID1IIUMmIU04OjM4UDZIIU82RkE6O1Y5XUBXIFwrMlQ7KTYuIkIlSSc2ViUlOCZNKQorTSwkNUk4M107PkdZVzdCVSk4RkFBNlRRPzxGSUpCSElPNkRVRj5HPS02Ry1IM1NENSs1TF84Ri07OlcpQgorTTgkRFY2RklKNkVBTj01STk6JikpNlgpUjpGQS8lMSk6MzJEVi4zXTlAR0lSIDggITUwI14yVF1LPCVBRworTTYzWF82Jik/MjNdLTxHLUsvQzhfMjQxOztGSTg6JkEpL0VJSztUTTg6JFBZOCVcUCoyKFYuNyogNlRdNQorTSozXVU4Ijw4KCJVLD1WRF8vVU1aPlcpWjgjRUpCRzU5KCBEQCwjOTY4REQ9L0ZdUj02QS06VylOM1M5LQorTT5HWUgrVFFaQEZJOj1XKSw5RlVJN0NdQDM0VU4yMzhZPkdJRjZUXUlfRy1dPlYkOCUzPVI+Ry1DMzRdXQorTUFHOV08I1BJLjVdMCkyXVpAJi1DOEZBQDxHOVY6JVhWJiFAXz5IKTovVSFUNlc9WzgiVFA4NUxWMTZNTgorTT5HQF8vVEVJNkRVKS42KTgzNzomO1YtJDQnKVU4Vk1SOlQxTDI0MVU2M1kkL0NFQz1XSVI2JkFKOFY5UworTT5HSUIzNUEtLjYuJzlFUTk4IzhALjRVJDJUNSkzKClDOUAmJiA3KCBfRkUlOldJOzpGLF4uNi1CN1VdOAorTTM2SVU8NiEpMjYhQDZGTUs6Jy1PNTRFQThGLSk4JylAKzYhRy1DKEckQU06QEZBJS9TXTk7Vk04NCUhKQorTTZFUT8vQzk0OkZZTj5XKS0xJ1VWM1IgOCNBQFQ4Jl0pLCNFLDxGQFkyNUlSOFM4VjYkQTo4MlUkPkdVTgorTTQ2SVI3JilNNlRdOjwlRFk5RVxNJlZNSzhWRSU2Xj1SOjdJSipRVE06RllLMjI8UD1YSV0/N01JN0M5JQorTTYiVEc6Rk1APCUhJDY3QUM1Q0U5O0MwQC9WTVIuMzhZOiZCIkJGVEktRjk6L1I1LzZXKVgyMzhWODREWQorTS5RVFYtQyFDQCZVTDEkVUY6Ri1bPlYtQTwmWVc/NyheKzJETTYnKVo8RklPPEYtQiBXKjY6ViEpLUJEWQorTT5GKUI2RUEkLlRFQi4zXTk8JDBeMyAqIyAvWVIuNFVaO1ZJRy4yTTs4JV1CPEZJSj03NU81RTlPOkVNOworTTZEUUY7VFE6OFYtQDdVSU44Q0U/OVQ1NSsxNDsxN0VPLUJVKzgnPUsyNUFANlYtOzY0RF8yNi1EOlglSgorTThENVJAR0FHLlFAQDEnPVI4JkVNM1Y5OiZRTFA8Rig9KzVdJS1EXSkxNl4iPTZBMTpHKVI2VExWL1VdRgorTTVEUTgtQ0UtOCRROCszI0c2Vi1XPUJUVDE1TUo6VDA4KjZOIj03VVs5RkBWL0ZFKTI2RS0xJzVJL0Q9SworTTtDMDsvR11GL1RVSjojXFYrM1koPkg9Ui9UTUk4RDRAKzQ1Q0EnITUtRDRfMlU0Ui1DITo8R1YjOUYtQQorTTdUMTE+R1VGNyYtUkBHSVAyUzhcLERFSzpTRE06WEFPMzAtO0VEXTk4NTRWKzRVWjdERSkxI1EkNUNYTQorTS9HUT8pMjQhPEAmIyAvWUsyNFVaOkchLC9DWUA4NSE6P1Y5SjpXKU8zNilXOlZFSDlVSF82NiU6NjYpSgorTTpWXVA4VUFCNjVBLTdVWSQzJylXMjM4Vi42TUgyNEU6OCVdPDhGXUIxJFUtN0dJQjpFUUY9OClaNlFMMgorTSs2XSQxJkooPkY5PyowWDs2NiA7KzZBJTdWQF4mVDIiQicpQjImVio2RVEpMEQxQjpFSSkuU1kvOCVJLAorTSsyN14xNi1KOkM8XzlGLUM6VExAKzZNWj1HIVc7JUBJK1ZdUDZGRFYoRilaO0ZdOzYiNEs6KDVXODYhUAorTTpGPTUqUzhfOkcpPDE0VU86RUxSJlFAWT8oMVcvUyBfNiYgXysyRF42NjlaLENFQjw0RSU9R1VVOCZBWgorTT8oKVAxI1E5MjYlUjslRF45V1VaOyVJLTIzXF86NjhcJlIpQjtDTTU4JiVJNkREXDI2TUBAQjQuIDRQIQorTT0wIyozI0U6PkRVVzgjWSg2RyFCMzclTT1WSUo4Q0UlPEdNUTxXPUsvQ102NiRVOzpVJUk2VU0+OlRdNgorTTMmLU87VkFGPEYpNTEjOTs6NUVIOERUXzE1SVo9VERWKVRVVzxGSTAzNigjPE9ZPy5TXTwpMlVDPzdVTgorTTdVNSEtRjlCLUM5SCwlIVIvQShFOigpRjMjWTpCRkheMSZBMDhWXTstQzhfOCZNUzo0RSk2NVlOPlVJQAorTTpWTVE4IzhFKzRdSz5WLSg6RUQ4JTRSIjxVREUmVTlWPEgpXzUxKEU6VzVTNlRVTDxGTUI4M1lPO1VZLworTTY1NTs+JiRSJiE0WzhHQio6M10vOjYtKS0jUTg2Ni1LLUJGUy9GOToxJklaO0YpSzxHSVo4U1xZOCVJSQorTT4mIS87RylVPUdVUjglQSQtRy1YMjJESzI0VFA6NklKPkcoWTY2LVM6MlQuIDM4ITwgI14pMVVAPkZFUgorTTlFSS02Jl1XMjYpUkJIJVo8JDRWNkcpQjpHLUszNE04MSNZJDlTRF8xM10tOyRVNjEkRTs9V01INyYpQAorTTYzWTo6NUlfO1QwTS1EMUo+RkUkKCNFSkBHTUY2Ri0sNkclVzpGLUkpMzlCPkcpSjMmKUo0JylbOCYhVgorTS41SUg2IzBLMjcpQjI0MUJAR0kvMjZBNjgnKTgpMjUkPEhBWjhFQUlfRkUxM1YpOjpGRUM9VyBeKTM5OAorTTM3KVEzJiklJzFAVjxGSSkqMzk6NlUlUkJGODgmI0VCOjYpQzpWSUMzNkRWNyZJLThWOFktRVlJLEE0RQorTTYlIVo/NylDOydJSjxCVF46Nl1COiYlJC42XUQzNF1POEQxQDhFUUY2M1BNNUNdOj1WJUI8RzlOPEc1UgorTT5HPSkmVl1XOCNZQDgzOEU1Ri07PkgpKS9WKVs9WCk+KCAkOyAzXCBVUUA1LUVKIDxGLSQrVjFPNkI9OgorTTxHUiJARy1NMzVBQjM0QUo9VDUpNiRVQDgmKSkxI1xWMTZBSTolQFArNUVSPUYhOjZFQFYxNj05QVdJOAorTSszXUA4RjlXODM5KTgnNV08RU1DMjNdOTxGMUI9UzhWOEdJUjZALUNfRilKPTdJUToyVSkyNFVBMjVNRgorTTM0NTY6WDYiOUVdOStTOUE1MkxFLEZaJT1TXF8zNllRMjJdJTpFSTs+V0lPM1YlQTE2LVc3RkBWKCIgXworTTw2TTYtJEVJLUMhOT5HPSUoIUxWM1VJUjxFWTozVl04NUZBODdHLTk3RUlPL1FAVjolSU80JVFXO0c9SworTT0zWFYzNl0sLVVJLS42TUozJDFIPCJVLTMzRS08Kjk4KzNcUiwmKUY8RzVWOFZFQzZFUVo1ISk5PzVNJQorTTZXJTkyNk1IMicpUzIyIFlASFVaN0AkUiAyICBfQkRLLENZXUImXSQnMz1ALyIgXjhHNiJAJi06NycpSworTTVDTFk8Ji04NkVBSzw1QFc2NiBbLUYpUj5HPSkrM0U5PEZNJDEzOEUvViElPkdVSDI2KVo9Vk1LPVYpJQorTTI2TVI8RilCOFREVjhGTTk5Rl0tOlc1PDEmITE4V01QM1dKIjszXFYtQ0U6Nkc9SzEiVSk4VkVaPTcpQgorTSwiIFYuM1k1L1cpXTxERTg2X1k8PTc9OC42IFAvRylNOzZJWjpTRTo9Vi0tL1JESS9GLTo1IlRZOUQwSQorTTE2SUo9IzBAKTJUVjpXTTsxJk1SPERRQjwmJUs8NyFCPEY8TS9XPVI4UzhUOlctTDxHKUA2JU1JMjI1LworTS9URUM4RDRFMTYgVjVERF4uNy1RMSJUVi9GJUs/JllSOiZRUDo2TVc3QUBZP1cgXzI3JUkzJklNMTZJOgorTS1BKEc4SCoiQkc8ITIwJFIgL1k5N0Q1LzooKV07VTkpL1JESTglSUo/KClKNiVJUjpGKSQsJUlDOCZFSworTTpXKUAvVUFIL0IgVjtXSVo7VUE4MzZdUDYjODglMjRfLCchUjhENTw/Nyk6NkdKIDZENUM4RkVSOkcpSAorTTElOUo5RilIOEVJTjo0USkrVFVbPEYpXURHSF8uUlReMzYpUjojWDsrNERSNlgpUjxFQEApUiBNN0RFUworTT82OTA8R08xOEVRSztUVTgpMlUlMTUhTUAmXFkzNylMNlVEXyszOSQvU1xNL0ZNOC9URVA4Rk0+LEIgSworTS1GSiI6NEVLPkc1OTgnLUw4Vk1JMzUhSDNVRVNAJk0kKzRVUjpWSVI7VylaPlYpJTZURFkyNkFPISM6SworTTVEVUIyVz4iO0NQOy1GIU5ARzlOOyY5WkAnOiA4UUA7NiZEViwlSiA7VUlIMzVJOTtDMDspVjoiPzAlSAorTSA1RCBfSCFCNjVZODhWWVs+RikpKCFBSjw2OU4+RilLPCVRSjpGRTUuNFUpNkZJSjxGXTkyNUkkKjFNLAorTTxHNVI4JUEpPCdJVzEhQDgmUiA7OyVdKS9VSiI8IzBfPEgpUjZGKUM2REE8PEdJQDVGKUs2VFVINiQ1LQorTS9DUEItRl0wN0dWLEBFOF4rNDE7O1cpTzEyVFIuUjRWPkZVSzoiRDUmIiBbNiZBUjEkJVVCT1ogNlNdOgorTThHISUtQ1BUMjYpRjxFQUw7Rk1BOCYlKzg0RSk1IiA9MTYpKSwnKV86VkU1KlJVKThXSVo+J01bPCRFLQorTTxWTUk0NFU5LCMhODtXOVs8RkE1LVRdQTEmKUQ+SDYjPEVJQzgzOFA6NURCKjM5KTM0MUg6Ny1dPlYkOAorTSUzPVI+Ry1DMzRdXUFHOV08I1BJLjVdMCkyXVpAJi1DNlYpQT84IT4tRDYiPVc0ITsgJUsgL1oiMzNFQAorTTE1QSw8J01LNSIgMjhXSUs6Vz1COkZFLDYnKVo6I1hNKTI0XjhHKVc6RiUvL0QwWzI1SUo8RkheLCYqIgorTT5GQF8uMjRAKCZBRzEjXTo+RyheLjYtTjxGIUI6ViBWL1VFSzokVTk+Rj0lOEVIXisxTEAlMzktKzI9SgorTUBHUS0tQlRbLjZNSzxHKTYyNERJKTdJUjlGTTUlMTRALERFQDZDOUFAWCNeREc8UCwjXUs2MzklL1VJTworTTMlRUI+RlkwOkclOzhHSUI4VjBUJzM5TzMzOU9AJllDOjRFJC9VIUM8RzYiPEVBKTM2TVs6VUBfNTMgRQorTTYmWVY8RklLNkVBQTEyPTg0JlogQUdVRjhWJF8pNV08KTFMTT1WQS02VU1SOjdJSipRVE06RllLMjI8UAorTT1YSV0/N01JN0M5JTYiVEc6Rk1APCY9MDpXSV1AJkUvQEVJQiA3KCE+QCNeQFRERzYzOSkuNkVQOEU0QAorTSk1SVo+RilKOkYpOCszOUI5J1k7LSJEOCgkNUM8Rl07MlJVKTo2QUA6N0laMSI9OkBIKVo6JERFKzQ1SAorTTY1MFYyNkFLMzVFQjxHKUg6NjlKNiRFJDE0VFk3VylaLjVFOzgjKC4jQUBUMjJUOzM3SiI2MlRbLlFMWQorTTM2KiA6RUVAKzFNUjxGTU86Mzg1JiJVKTYkREI4SEFOX0cyIzhTTEU4I1xWNTYhSTxGOF8xJz1LMSVRSQorTSszIVc/JU04LUJNKz1VQFk8V0k+NkVJSDw0RSU6NylOPzctJTYzRSg/Ny1QODNYQCZURVpAVyk7N1Q1OworTT4mIFk2Jik7PTdBXT1HKUs2VUEtNyM4Oyk1SVI5RUhQNlYtVz1CVFQxNU1KOlQwOCo2TiI9N1VbOUZAVgorTS9GRSkyNkUtMSc2KDo3PUs8RylJLygoOylQJUYgOCwgUEdNKSk0RFwrMU0tOCNEVigiNTg8SClPOkYpNgorTS4zOFYvQz1SOFUxJCwiIE0xJi1INUJUOC1GXVA4Ni1UQEVASTEnKilAR01SKzMhRjwlSS01NEUpODRdQAorTTZALVJfRkU7OkcpQjdTWFYrNF1OQEYpUjpGLT4sQUBSODZBNSo0NUs/JkxQLjM8SSkyPS0+Rk1NO1NcQAorTTE3IVI6Vyk8KjIgVDU2JFYkQ0VKPkdWJjxFQFI4I1xcN1YtUzxWRSk4J1FTOkYpQCkxQSxCJiUlKCFMWQorTUFWIFA6RylBNkQ1O0A0XFk6VylTQVgtQjdTPSk8JjlQODJELiNCVUI+R0lDOCQ1Q0BGTS84W01SOUUtPAorTUBHQVo7JllSNkVJKTU0RTg4Rl1JKTQ1QzpGSFcvVjlDOFZNKygiVUs+RzlQPVZROCoyXU88JUlJLUIpQgorTUJHSUs4JkVLOCM4LiNAJFAgNiggX0M5WkAmITkrMjxWODQwSSgiRTg8R0laPERcXy41QUY3RF1VOEVdOAorTTEjKFIsJTlCOENcQCs2QU82NTlKPkZIWSs0VVo/N0laL1JVOj5GTTo4RUBfMjQxLS9WKUs8RkFIOFcpRAorTTZWMF8vJEVGPyQ9Sz02OVIyMUxSOkgpTy9DOUI5KCFGOCQwXzUyKSU8RVFGQEYsWys0RUY8Rk1ILUI1PgorTT82LTkqU1lDQk9aLUJHTUwzNik4MTZFOzpYJS8uNiojPUdNSTYjOFw2WC1QLUFAOC1IKUsvViVINkRRPworTThWTTgvVk1KOUhKLzxGRF84JiUoPDYkSSUxQE0zNklLOlZAWTM3TVA2JFVKOUYhLT03NVM2V0ojOFVNQQorTTZWTVM2Ri1JMjVFPjtHTTo4Jk1LPDYgVikyVS86V01DMiZJOSYhNSxARy05KTFNNj03OUcsQjRAKTNaIgorTT1VNCIlMCNeMjZJW0AmWVI6JDVAMSNMUis1OUI8RyogNlVdSDg2UVc6Nj0lOkc9ODYkRSQzVilKOiVYXworTTgmRTk2RklaPTZBJC9WKVU6RjlBMTVFVj1GTUM4ViUtMSM4TTNWKU4xNU1SQCYpQjNVOSk2Jk1KMSRVLQorTTcmSFYlMjUsOSYoVik2LiJAR1VdOzZJNSUzOVI5VSFaPEVIXzVGIUo7VTgyJTVKJzonITkyNiojX0g2JgorTT84JUE2VkU7OyRVRkBUTFY6SC1OPzctODI1SVc+VyEpKlJFKTpWTTs4NFVAMTYpSjpERFQ4VkEvPkhVVgorTTojRSwxIyFJOFQwQCgjXUk8VFUoPFY5JThXPSksJFE7PEdJVj02SSw7SElXOFVNQjpXKUA2RilJOjUlLworTThFSUo6Ni1XPCNYRS1FQS08RyUsOEQ0PSYjOVI6RERJLUVJPDZWXSkuMjw4KzgpTzswJC4gMkQgX0RFOQorTTknPTA5SCFCNiQwUixEMSkzNl1LOkQxMDtWKTk7VylAKzZBUjhVOF8xJUU6NjU5OC9UNF8xNiFLPEc9QgorTTE0XU88VyE6NjRFLTxHPUI3RklPOiRUVik0RU84M0RQOidNUjclXUg2Jk1bPkcpUDM2KUo1MjRNNiVdJAorTSZRTTk+R1YlPyZJSy9RQEk8J0lGPFc9QjNWQT83JjxZJiBERzxGSU46NiEtOUglWiBXV1w8RiU7NlchUworTT5HPSk2N0oiO0dRVjglWTk6RylONCVAXDI2KTo2RUBZNiYlQjlHISsnNFVILjY6MUBGIE0rNTUpODZNRgorTS1CIFY4VzxWKTVJTzZVTVA2IyBeNUZJWj5GOF4nNUoyQEchQTVHIUkyNDUlMzZZUTIyXSU6RUk7PldJTworTTNWJUExNi1XN0ZAVigiIF88Nk02LSRFSTNTOUssJDE6KTM5V0BQJE0gMjwgTDRFLTZGRSQyJ0lSOlRETQorTSs0RT4xJi1XMzRFLTZGKTk2VylQKzVFVzpVXFYrNEU/L1NZKTYlQFIoRV1DOldJOy1ERCM8TE1IMjNYVgorTTpXKUc2RilSPEYgTSYjPUgyNEA7L0ZJQi9WKUo2NyolPzc6ITpWKUI6NEU4OVchKSYhQFY6NjldQEZJLworTSZQWDs4KClVPVcpTzZFSS84RUBNLlJEOzE2LUI2VUBfNDcsIz87IVo6RF0sO1dJXzgiVFs3SCldO0ZNQgorTTZVWTo6RlE7OCVJLzYkRS04I1heNlcpTDlFNDUrNVBZNkguKjwiNDsyVyAjPVxFQy8jPUM+RURUL0RVOworTTo2XUEyMzk2NkZNSzEiVEU1SSoqQEZBKTcmLSkvREU7Nyc1VzYjRUAsI1lSOzZVSj5GTFk2Rz1DMzNcSQorTSozWUM2RTBNLjY5QTEmXSUtQ0w7JlRSIiA2QCEvQCNeOiRVQzwkRSU6VzYnOVI0STUlQSU2RzEkMiZBOworTTdGISU3R1UpMzddUjpFRSQ1RFUpLlNZKTgjXEU4NlFaPkYoVi9VUVs8Rkk4KzFNQzxHKUs8R0lVPCQwTQorTS9VUFs1IzhNMjNETTM2KTs5KEokNSc1UjhGTUs2Rj1XO1RERSgiVTg2NjlVPkVESSNAWF5AR1VaPEUhLAorTS4zIUg4IyhfNUNYVjZFRE0tRUFARURVPj03ViM9NU0kODcxTC9CNEksJzYiOCYtSTE2OCQ6WUVRPEZMWQorTS9VQU4vQlRfNkZNKDUzMFQvUzklOUchVykxTSsgVysqOjYlNi42LiNANyE/L0RVVT5GSTsqNEU6NiY4SQorTSglRUo/ODYyPkZFRzlGKSU2R01CNyZNTzM1QEUrNDUlNCZWIDtTRS08RlE7NjNcTS1EMF8vUlReOlc9OAorTTkmPTguUiA7KzZAIT1QJTwgK0U6LCNFSC9DRUc+SC1XMjRFQDdUNS06JUU5OiZBQzgkRS88RkksOlZNQworTThWQUc3VFReL0U5QC9TIUk8JylKNiREXjE3KVU8RUBFJiVAIzpPPVo+RzojPEVdPzI0RTo7NVxeKzJVJQorTTZEPUI/OEU6NCZJUjxGSSw2NylLNiM4SS1ERTk6NjlKOjNQOCYiNUI8RylLNkVATSk1QT8xI11GN0M5JAorTSswWEAxNUBNLCVNSz84KVs4VEVBMlFMOCozXVg7NUlGOzJVKTxXLUw6Nk1OOyM4VjI3ITgvUzklNkQ1OAorTTlGRSQtRDVCOFRURSZTXVM3QC07UiYgVi1GOiQ+Vz1BNlc1WzhVSE0zNik2MjEoODM3KUY9OSoqPEZNTgorTT5WJSVCSCE7L1VJQjwkNFYvIzEpOEY5UjYmUU46ViVAODRNQTI0RTQoIVUlPiYpQjdVQSktQkRJLjAlSAorTSA1SCBXJThWKzRETSs0RVJAV0kwODYlQjglRUA4Ji1SOEZBQCsyVTs/VylIOCRdODhWSUg2REUpNiZdLQorTSs0NUI8RkEtMjRFLThWSUg1IlQuMjU5QjpXKVo+WCoiOlYhKTI1SUo+RThWL1RFJTM1SVI+RiBeNUZJVAorTTxEVTg6Rk06IFRHXjckXTs2RVFINiM4Ui9DWUI6RiEpMjQwXjYlOF4tRTk2NiU0VCNBTE02JCRFKzMhSworTUJJKVs4NiBfJiE0NSs3JTozJjlXMjNZST5HKU88RVFDLlJUVjhWRU44Ni06L1NFOjpFRF86N0lXLUI0SQorTS9VJFkpUzlDPCREQCwnKUI5Rl1DO0dJWz1TWUI7VThJJTIhJDxFRTo+R1VSOkZaJT1TXiBERzxQLURFQAorTUg1QFYxM106O1RROThHSU40JklRNlYpWjhGLUQtIVRWPVZdOjM0RSUxI1xWKzAkXyA1QCBfQj0nNCQxNgorTTM0VTo6R1VaOkNFODhGSTouNklVO0VASSgiVUdCRzlMOjNYRS9GXUI1RkFLPEZJQDYlTU08Rk07NUVBQQorTT1WTUAvUzhfOCYhVz5HNVI8RkVAMzYhOjYlSUo8RklPOCRdLTZWTVI8RUEtNTNdQDxGWVM2VERfOCcpTworTTYyVEkuNUlVPEZFOzhWUUs2I1xWL1RVOzwlREspNkVBNjZBKy0iTSs6P1lJLyFALi9YKi1ARylHNjJMOAorTSNCITs8JkE4OlYkXzM3JVo+SClbNlQwUi1FQUo7VyFSPCYlJDhXKTgzVyomQCNcVjI3JUEtQUA7OCZRJAorTSgjKUk4I106MzQxMTtILFk4RylDLEIgWTM3SUY4NkVOOVQ9UkJHKTU7RzIjOFNcWTYkRFw1NiFJOlYkXworTTM2TUszJVFJKzMhSDwmITgtQk0pOlZEXi1DKE0vRkoiO1M4Ii9QI142JUEpLUQxLTM2RVI9N0lLLUNZOAorTTQ1QF46R0lGMzMwXC1UNVo+RllDLEFMQDhVTSU4RklKO0ZRQztWVU47JUUpO1cpSjtFSSkvU1kpNkcqIgorTUBHNUs8Vk1ANkYhQjgmQU04VylSNlQ1Qz5XSVI2M0U+NTYhUzxHKTspMjVAPUcpQzEiIEUyNk1aPVUhQworTT83NUkxIkQ7LUZBUDozXEUxNiE4OlYgVis0NVJfSCE1I0BYXz03VVU8NkFGL1JMOCo0RUY7VURZMTVAXgorTTZGOVI9SElQN0NcVjI2KUo8Ry1aPVVBSjpVSUg4VzYjM1VFPz5XMSQqMlU7OiNcQCxFSVc2VU0+LUMhKAorTTlFQTo6RlEvLUQxKTxXLUI2RlBeJlQxXTpFQVo/ODlSNiNdODJTUT84NkVJNjNdODo2LUI4RiBFKzRVSworTTg0TEAtRFVLOiNcRSoyRE0zKClDMzAlLyA2JCBfRi1DMSM4Vi9UTUg8RjlIQCU0TS9DOSQ6JjlVOEI8RQorTTg2RTg2RzVaOiM4QClTTTg7RyFKM1VJQjpXSU46RkReLUcpUjY0PF82I0xFKjM5Oj5HVVU6RllLOEVJQAorTThWSUs6RikxPkcwOzI3KVI6RzUlMTVJUDxXOVc4IzBANkZZOzNVQEUmU11BNlVMRzEnSVY8RkRfJiJFQQorTTolWUcxI1xfKzgtTDIyNFA6X1lbLyBYLjVHNVs7RlFIPDY5JCoyTTg4Vi1QKTFVJDI0RUI6JSFOOyYlKQorTS9VRTo4R0FOPkg9UDsmUS86JlFXP0VNQS41TVc6NE1BPCc9OSozOSU8RylDOjVZNTI2IVA7VUktMzVJSgorTTZGSUoxMzkvL1NNKThWPTs8RylLMyRdNjomWVI7VUE1LUIgOy9VQTo4RkE2L0NZKTI1TUo8Jk07NlYgUgorTSkzTSk4VkIiOURcITVAJUkgKz1DOEVIXisyKFs8JVlDNlc5QywjOEAmVUFaOlNENSk2RU06RF0vQCZZOAorTS5TKE0sJl4iPkYpLTI0QVo+ViE7KTIhOTpVQSkvQ1xWIFIiKCs1UVI7RklKO0ZIIzhPWUY+RlVLOFcpVworTSs0TTozVSVWPCYlQDNWSUY8Ri0+L1YlSzE0XUkxI11CPEcpRi1DTTA8Ry4gOyMoRTglSTg6JkVJNiNeIworTTpURDsvR0FaMjFAODEmSVo6VUElOEdBOi5TXTg4ViVLN0U1KzgmISg7VUBfMzYkXCo2RUY3RUlGQFdVTgorTThXPUo4RUVLQEYtRixDOTY6NkYhPEcpSTI1QSs4SCFMOFYpSThXJls6VllTMjI9Nj5GSTY2VDBFLUYhSQorTTo1XUI4RylSO1VFLTZXKUY5Rl0sOCNQOCNCRSk2JilPNlYhKS9TWS08RzlSOERdSzZCIFYzNlFSOkZAIQorTTpQJVIgL1lLMyYpTSRBKFY1REFBNlY5Vy9CVEkmIlVOOjI0Lik2QU43Jk1LPkcpQjIyVE0xJUVdQEcpPworTTYlOUo+Vk02LlQxOTolSS02JUUpLUNQXCxDWUI7VUU8PkZJSzpWIS06RFE5Plc9WjM2IUEzNDU6O1cpVworTTg2RTo2RilCOyZNSDYlRVA4NF1CPkc2IDxGRSU4RVlOOkY4XzZGLUk6VllTPCYiIjpUMDgyOC9eQkclOAorTTE0RT8+VlEkJlMhUzwlRSssJU1XOlZFUTgkVUYyNFVIL1M5JCkyVTk2NUBfNlcpSzomJUo+RyBQLjctVworTTwkTE0uNUE7OVcpQzNVTUkvVilaPEVIXjMlWVIzNSIiOVI1NT1XISU2NUBcMjVBSTxGKTA4RklSO1VBLQorTTpHKVI6RyE2OkZUXycyISk2VllaPEZdSTI0MTg9VylSOlVJQzokTTUxJU1DQEQ1MCA3SCE9MCJUOVQxSgorTUBRTDIxJFUkOEZNPDpWLTg1IzBNOCVcTSgjOUw8RilPPUdJTThEREsoRThfOEYpQzY1XVU9RzVKNUNZKQorTS9GRUczMDFAX0ZBST01XS84MzhSPVYpLzMlQSU2IzheO0cpUjlGSVc6RFRWLCYqIkBHLTkxNUE+PEcpOgorTTI0VVI7JUVDPEYtUjs3NVI9Vi0vNkY5SzwlTT46Vk1KN0Y5XzZUMEkpViooQFgqIDNUQVI8IygyJzVFSgorTThVWSQvRilCPVZdNjI1STguNEVAODMoQCs1RTgvU104OCM5JTlVSVI8I1BFMVgtUjwkTFY2JyFDODxBQQorTTI1IUYvVUlCNUNESSo0XTszNU1aPVM4RzgmLFAyVV05NkM5LzxGPSUvVD1CO1ZBOjpXKVo8Rk1KO1cpQAorTS9SVSQ2JyVaO1VZSzM0RUI2VllLOkVJQjQmKVc4RiUpJlFUITogJUYgLCFCMyZaMSkxQTU2VUlIPEYtMQorTThGKTo2JE0kL1M4WTNXKVU8RylKOzZJKSsyTDgyNiE4LjM4UDZHKV1AVkElLCJUTThXPUk2NU1AOkcqIQorTT5WTS82IyhNIFcrMzg0VS02I1hfOiYtQjs2TVU+RihSJTJdV0InSS8uNUksO1ZNQTEzWUk4VUFIPkZNOgorTTImSVpAVyUlNjZNTTxEXS82Rl1DM1UlSjYjOSQqMj0tPEhKKjslJUo6UlRHKTM4UDI1SSQpMjRNO0cpQworTTg2LCM2PjVIPVMoQC0mIUg4JEU4L1FARTJVRVA6VUBFLUctUz5XIF81RylcOjRVOjM0NF86NiBeKTE0SQorTTI1QF4xJklaPEQxKS4zOTg6JUk4L1RFSjhURSQuNDFHOkYtRzpGTVI8Rk1LPEYpNi9FQUA6RylHMzVJQAorTTM2JSk2RylHM1ZFKTQ3OV08RiRJJlAlOSA2SCBCJUhQNkhJOCwlQUMhJk9eODVBMDM1QUgqMUxJMSYhSgorTTtIKVU8Ri1QMSFMUikzWU02IzBJKjNZOTlHST8vRDBJKCNZQz5FITk2VUlOQEc1QjM1QF8yN0laQFchLQorTTg1TSUvViE4LjYpRj5YQUMpMEQyNkgtVzgjRF4uVik6ODRVLzNUNF42R01MOFYtSD5ISUwsJEFaPTcpJQorTS9URUM4Ri1DOjYkTTEjOEktRFVVQkdJLzQnLTg3RVk1XSJETTUjTDgmUlU5PEZNWkA2JF8uNikwLlJEVgorTTI2SVI4ViEkKzNRNTonPVI3QjRXOlcpXTxGJUM2VjlbOEVMXyszIU87NERJJiI1JDIyVDsvRloiP1UwPQorTS8kRUI3JiRcLUNdOjZGIUg8NjlOQEchKTE3PiA8RF0lMzVBQjpXPVc6RUhQK1YhOzZDOFk2RUhZPDRdLQorTThHSVU8RiRWIDYkITxAI146I107O0cpQTM2KVI6RSFDPEcpOzI0XT8uMSgyKTRFQzxISiI+Rk1IN0NMVgorTTg2IUgyMzBULyVBOThWTSkrMzk7KCEoVjolSTg2RU1OPlcpOzM1QFY2JllVQiYoVDhXITgyNFxeKTMgXworTUApJVAqMFg4MjcpRjpWJF4vVkE5OFZRQTJUMFYtVj1BOCZNWj04LUMtRDVbQEc9QC9TRSk4NylaNkZEVgorTS9TWE1fQzktOEc6IjZUVUw8JU1BOjVRKTgzXFIrMzkpNkYtWkBHITgyNlUtKzNNJDE1SUs8Vyk5L1VBOAorTThXIVM4Uzk1N0dKIjpVTVE2VDFSQidJQS9TOUk6NERSKjJUXzgyTEApNiolPzZATS1FTUo8RExXLyRNOQorTTEkMUs8Vik+Plc9QTYnKiM9NiReL0VBOjtHPVI6RiBJJENdLzYjWF8yNDBHOFZFODYlIUY+SClXMzAlOgorTSA3LCBfRk07OFZJWjpVOUI+Rk06OFcpVj4mIS0zJTQ4I0BYSTI3SjJBJzVSOkVBKTI4QiM8RFRSKzNZSQorTTtWKUg1IkQyNiJELiRCVSk1RV1IPFdJUjomKUItQ0UlOUgtQCwmKVI6VlFIMjMoKSZWSik+RERUKzVBSworTTdHKVMvREVQOEYtSzgzXTk3Q1k5MTVBQj1VUVo8NDU4PEdNWjxUME0xJUVSPzc1RjhWQSUxOV1AOlYpPgorTTExVSw6RylQMSFMRThHSUI0NUE4L0FVODg0NF8sJi0wLjJVKSBWIks2VilSPEZZSzsmRTUvIlUtPTdVUworTThWUVM4VU1COjZRVj02VUM2Q1hWNiZBQDM1XUo2RUxZMjdSIjswLVJMJ00kKzU1QDdDXF44V0lQNlcpUgorTThWLUs+VylCL1VBQTM2SVA8RSE4LEFARTI2LUg5VTkkLlVNRjpGLSQ0JylVOFAlSyA3KCBfRi0wNkVZXAorTT1UPUI+Rk04OEcpVT5GXS04JUA7IjBYOC1GTipCRlU+MzM4VjEoSiVARl00KzJVLDtUUFc1RSA9MjQwUAorTSUxQFsxJiFQOFcpUjtWTUs2IlQ7L1dBUC42KVU5JylSMyMoKSYlRiI9VU0+NiQ1KSwmIU8uNUFBOjZFQgorTTYjITo6I11BMjRVOTckVVI+JU05OFZRWjpEMEktQzlDPzclOzNWIFYvWiFaO0ZBQzYyNE0yNVooO0NMUgorTTZXNVI6Vi1PLUJVKTYkNTQvRUBWKCFNJTZQLThQRFEtNlYtQzo2LTkyNiFROldJUjdHKUs2VEUvODY9UgorTT02OUE4I10pPVgtSjlHIVI2IzhFL1dOIjtHNVI6RiE+KTQpQDYkRF8zJzVONkYtQDEmTUM8RklPOCAtQworTUYnSVM+RkFAMjMwSTYlSVI7ViEtOiZFQzpGUSQzNjlKOFApWyAvWUYzM00tPUdVJDM1SSwtJiFKOzctVQorTTQmSVAsQTQuJzNRT0BIVVoxMlRJKzRFWj4oKVU8RVkpM1ZNKSkzOTYxJTlJODIgOCxDUSU6NFU7PEYpQgorTTdGIEAmIjUtOFVBTjpEXUZARUxWJiIhQD5HPSQuNyFJLUEoVjgjOS8xNUFJMzQwOy9VWEcvVDEsOVQxKQorTTsnKUMyMjxfPEZMUCs0MFYvVz1SNkVNRis0R149VTFXPkY4TSgiNTo+V01IMjVJUjo3PiA9ViElM1VJKQorTThGQUYrMFg4L1RVJS9EVSktQ104OCVJOjYkRUA+RilLPEcpTjhERSUyNDEpOFYpLThWLTg4SCoxPEZSIQorTT8mJEkoIlVKPkc9WjZTWFA4IkRLL1NYXy1DRUo8VFE4OiRdQDg2RUk4RilILjRWIj5GSUI4RTheMSREWQorTTo2XSQxNilLNkVRRjhWJT9ARDExIDdIIT8wI149Nyk4MTZJWjokRSkrMUBeNTRVW0AlISw8RDRQJTIgUgorTTMnSVY+RiRSKCFMVjpXOVY6RjlSPkgqIDpENTsyM0UpOiZcUClSRTg2JUlAOFZVSjYlTTsxJllGKTI1QgorTUJHKF86SDVaPCM4TTY3SVs4IjRQPCZUOy1GQUA4MzkvPEYpPiozWVE1MkRNMjchOzY0XUI6RkRcLERRQgorTTIzOSQyUzkpOFYtQjwkRF5dJkUoPEgpWDdDIEU4VlVLOiNFLTo0QTk/OClSO0VFLzNWQUs4UzAuKCRFLQorTTI0RTg2NUlCNiM4RS9FSUA2ViBeLCY6IztHJUkyNDUkLUVNRi40XUk4NUlCQEcpNDtGWUIrMUxCMzZJSgorTT8mXUY2VFxSKlQxKzUzOSk4VyklL0Y5Vzg1QTs8Rk1CL1FARTtXKUg2JFE4L0QxKShGIUsgVUIpNyYpKAorTSxDRUI8NEUlIDc4IT8wI147R0laOiVNRjtTIFYxM0RWMSNFUkJHSTo6RTk1KzNRQThXKUo7RiBWKjJEXAorTTNXIU47JilEPzhGKjxFSUM4MzhQOjVEQioxTSk4JDU2OlZVQjdVWFYuN01CJlE0Vz02XSc6JkFVPzRETQorTTM1UVZAMlQyKzVASSZVOUM5Qj05PiZJUC9TIVM7MjRWNjQwUDhHJUY7R0lKNlRFJzomJTgyVEUvMjQ1JAorTTxGXS9fRiFIOlZZUzZTTF44VylLOFNQWTg2JTo6V0ojPiZBMTwnPVI5VTQ1KTRVOi40RTs2VilWPVJUQAorTS1FQUA2RUBeJlQxSzM3KiA6NiVAMTVBUDY0VUI4VUxfOUgtSzhWKVA3QyhSPSRRJDhHTVpAJi01LUQ1QQorTTg1QUE6NyE1LUVJSzhVQSU4Vy1PLUFARTg2XUo4JUk5MzVdKSk2RVM8Nik4OUclLy1CRF45SCk6MSAlSgorTSA3SCBfRjFGO0ZVUjZVQEUlMlRcL1NYWTwoOig6VUk6OUNZJDtHSUo6NylBL1JUXzg0NUk3JklLNCZaIAorTUFHVUY4ViRfKTVdPCkyTEArM0U1MzZJUjpVWSkmUlVDLUBELic2SVo4VyEkNjhBKy8lTTo8KClBLjIgRQorTS8hQEU2Jjg1L0ctJzdVRSk8RyhNL1ZEWyUyTVA7RzYqO0YtUDpWUU86JFUnNjREViwmTVc2T1ktOkZRQworTTY1WFAtRD1GPEchKSwlSUM6Ni1LQEgxTjM2KUs8Rk1GMSRFUDpDKFY2Ji06OzdZPCozKSk2JFUpOUJURQorTS9TWUM8Vy1MOERVSDhVQTg6RjlAKzZKJjxWLSU6RikpLlZJLDYmRiI+SC0+OEZUXi1ENTk2VkVLOCRdQworTTpGKUkvVEVDPFZFJTEmLVA6Jl1SOiVJRzZFNUI8R0lKMSY6IjhWJSQuNl4iOSRUITNQJU8gL1laOEVROworTTpWRTYvQTRAKTU0Vi8mQV0/NkklMlVBQDE1Rig2VUVXOjNcTTYnIS04VFFCQCYpOz03QV09RylLNlVBLQorTTcjOSQvUzA7L1YhQjxGXUAyUUxfOiQwRycxTUJCR1VbODVCIi9TOUE8J0oqPkYgTSs0NEAlMlRWIjI1QAorTS9DIFk4JllaNlchSzUzMF82VF1GQFZNLz5IQVs7Ryk5MjVFNCkxNS08Ri9eODZNQzpWLUs2NExWMTYpWgorTTZSNF86Vk1JOFcuKj82TTozJU1QOFRRNjxGTTgxJFFANjYtUj1TXF8xNThfL0ZdTSxCNF82Ni1GPFVRQworTTojRSQ2JilOOiJVLDxHPUorNEU2NURFOjdWQUs8R0ooMDRVWjtCVE0tRDVJOjRVODo2TVM8REU0NlVZUworTTpVOSg8JFVQPVcpSzpGOUMuM11OPlVRQj01UTozM0VLQEZJLCA0MCE6UCNeQFcpJzZHJUM4RiRSJTFAVgorTS9DWUY/NzVLKzJUVjwmQS09VU1JPVYkXy1EUUI2RUBQLEc9UjlFLTxAR0FaOyZZUjZFSSkzJUU+KTJVNQorTTM2IVc2VFBeOCgiIDpSNCktR0ldPUcpQkBVRFAuNklaPzhJSy9FRUEtIkRLJTBYOzglQFYrNiFXPVVJUgorTTomIUA4Nk07NkZZSSwmLipBR0lKOCNZJS9BQC4rNV0wX0UhSjlHQVI8Nz1TOCU1OTpVXE0vVi08O1chRgorTT84KVU8RUkpOEZMXzEmUUs2JUEtLjRVOjhHLUgzVEUpNkZCI0FWRE0vVDU6OUdJQjhGPE0oQzhfPVcpKworTTE2KU48RUBWMSQxKTE2LU86REU+PlVFTT5GVTsxIzhfOiVATSszRTxASC0sMTYlJThWRTg1RUUpOCZJUgorTT03KU84QUwyLjdJVztHKUIzU10pOFgpQjEwJEUgNDQgX0dJWzE1OUMxNUlSO1NcWSkyVSQ4VzVIPEJENQorTSZVQUs7VykoOVZRJS9GLUk2Q0UpLUQ1SjpGOUAzNzVVPFVNWkBWLTs4NUFAOjNQSS1FNSQ4RUxeODZRTgorTT8nPFwoIlU6PkdJRjhHPVEzNTFMPlcqIj5WLUY6NVkpNCQkQCxFQUAxIzktOUcpQjM1RTk2JFVaPEVJOgorTTgyPTo/OD1aOUYtODIzXDUiMUBfMlpEVi1VSVo3Ji1bO0ZdQDglSS02NiVDNlYtTDpXVVI+RzlQNlYpSgorTTdFXVo6VF04MzNFJDgmITo2ICxfVSYtUkJHVVI6NUxfMzYtWj5FUTg1Myg7KVZNUjdDRSQ4Rk1DMlNZNAorTS9SPFY0JlE1MzYoWTxISUY2VURWOjghNSZRQEktRjooOiRdOjE1RUAxNFBZNUU5OzlHSVo8RiA7JTFNOworTTtGOU06RU0pOlchSi9AJDsgMjwgX0giKjpGLTk2RkVSOUVBQCsyVSU6V01SPENcSSYjKSg+RzVCPEYsWQorTTU2OiE9UzhWOCc9UDMlTVI+RzlVOkRRTkJHPUM2VFFIOlU0Wys1QUEzNERCL1ZdUjlHPS8tRE0tOzgtUgorTTlGVVczM0VJPEZNQzlHPU84Ri05NlY4RTU1TSkyNiFPPCc9SC1DXFYrMj1LPEZRVDwkMUs/OElbOFVNSQorTTg0REkiMFhNMT9YQCZVOUovVUohPEZBQjglTSk2RiVDPDVNQTlHKVI9RzVSPEZdRDI2XiI8RkEtMjNdKQorTTM2JF8tQzhbKzZJRkBHSUM6Ri01NlVZTkI2QTg2VjhJJlQ1Qjw0RSkyJkE7OCNERSszUDstRkVJOkVAQgorTTZILUwzMzhFOEgtTy8iIFI1MzlLQiZdQTI1XUg2RFUlMjU5KDZHNVo9VEUkLEFNKTwmLVI5Q10tPkgqIgorTTpVWCExICU0IC9ZXUJHVUw0Jj1SPEVZOS4zOSQtQ0VQO0ZNSDo0TE0sJk4hOFY5QClURSkyJyhNJzVJWgorTTYjRTY6R0laOUNYPTZJKiI8JiUpNkYpKy9FRUk2RylSMSI1Qj5XKVIzMzhfKzJdSjxFUUA8RlFAOiVJQworTTYjRTo6NUBfL0VJSSo0RTQoIilIPkcpWzxGLUg1MUA4MjYpLDhVUTo8WColPzZNSDpHIUI3QyA4KCJHXgorTSgiISk4UlRQPVYpOjM0RTkxNUlRPEVZQzglSUs4REFdPlZJXz1TOUs/NzVaOUM4VjYmSUg2REUpNiM5SgorTTs3NVs7VFxWNiYlUDsnKTovVEVJOjRMXjZGTUA4JU1BL1ZBNCoyVUAsQjVNNjY5UTI2LiM6VURWLyVNWgorTTxWOFwyNUBWL1dJTjZWJUg8Jl1INiU5QDYkVUo/NyE0ODZERytWQTs3Ry07M1cqJ0BHISwgNkAhOkAjXgorTTpYKVw6RiU6OkdJUjoiPFY9JDA7LUYtOjxWWUgvUjU6PlZNSzlSNFY1I102JlFAUDdUKE02JUlLOlQwTQorTSk1OjJCSClINiREXyszOVA8I0VIQkZANS9GSTw7VUBeNTIgQDElQFk2JylaPlcpQjsmKUA3Vi06LUJVKQorTTgzXSktQFg1LCQ1LDQmMVU9NzxJI0IoXjUjXEcpVUlaPTc1RjpWTU4+Rk0+LlIgRV9DUFY2VyRcKTVBLQorTTokRSQvIjUrQFddLy40VUI8JiBHPEctQzxHLSU7JzVSO1ZAViszRUo7NFE+MjRFRjhVUTA6RjxeKTNZLworTTsmUUMyMzhWMzc5VzM0VUo2RyFAOFU1QjVDOE0zNDBSOiRNJT5XJUxAVyk6MjREXjZHNVo8RyVAMSNdRgorTTlEXUE4Vy1TOyZFNjhWIFk0JklIN0VBODUzOUAzNDVSPEYpRj04KiI4UCktIC9ZJTpXSVU6VU04OSgpTworTSkyVVE6M0xFMjQ1SzpGTUAsRTlSOEVNSzI0RUEzVEReMSNYWS1BVSk2RUFGKjIhOTpHViVER0kpLUIgOAorTSk3KVc2JU4qPVJEXzg0UUs7NUFBLyNRODYjOFA3J0oqPkdJVzpXKVc7VikrLyJVJTI1QTUuMyhWKjIoXgorTTElSU5AViRUKCI1ODIxTDgxNz1OOkVZLzomOVU7VkU0LlM7XjIzWUE+RkBbLURFVzgjTEAlMlVPPlVEQAorTSs2IVM6I11IOlYpSjpWJUo3VSFHNUMwRSc1LF4vREReLUYhSDVDMS0yMyBcMSVJUzxGKTY1M1klOlgtSworTTVGISU6Vk0vPTZJNS5SNSUsI11aMlNdUj5HKV08Vi1BLlFMRTpIKV1ARi1GO1ZNOjdGJUM8VzVLOFQxQgorTTwkUSU2VUU+L1JUXy1SVFk6VyE1LlRdRkBHUiMgNUwhLjAjXis1QU4+RlVLOERdTTwjXE04SCFQL0NZKQorTTdVSTk2MzktPFZdPDhEUUM9JFEkOEZNOSszUE0zNik2MjEoODM3KUY9OSoqOVJELiNBNTBARylCPTghQQorTThVTE8zVklLOFNFODsmIFwmUyFTQFZZVj5GUVI+R0lSOjQ0RSs0MUA8NyFBL1JUSS1DRF82N0lSQCU0UgorTTYmOTsxJUVaPEZJOS1FQU85JjlPN0VdK19FQFkzN0VSMjI1JD5WQFIlMUBNODZcXCNBTF46VylXPlcpSgorTThFWUE6RERQOlVBODUjTFspMlUkLlM5LTpVXSU2M1xHLCRFLzsnLUAtVEUpMlYuI0BGSUM4NllbNlcpSworTTZEMEAyMyhWPTYpOzo2IUo+R1VROjQ0Syk0VVI+RylDOyctQzZWKUk7JzlVOzYsRzEnKT82RiU2MzM4RQorTS1TOEsrNF1aPTVIWThIKTA+QCVIIDM4IE0xTF88JllGPTdJQjQmIE0lMyFKQCVdKTUkNSU1Q1heMTYpUgorTTxFQFAzNyksNiZFWjlTTFYvRilPNUJENSgkMVI2NUlaPzc8VCBQWlktRylRPEdJSzhHLUMvQ0U6QCZATQorTTMnPUIxIUA1MTctUjY0XTs8RzVVQEdBNCkzKF84Ni1POCVBJDEkTSUyNFFDOUg5UjJUXUs8JklCIFcqUgorTTgzOFA6RkEvOlctSzg1QFYxJk1JMTFMTTg1QTUvIzEpO1Y8SSNBNFIzNilaQjcpSjhFRT44RExQOCQxSgorTT1WIUExIzgjL101ODhWPSkyVTBWLSM5JTYlISkmUjRNL1RRUUBGVTw7JlldPEghOjg2MFY4M1hfNCZNRworTT1VUSw+RllLOjYlJDgmRUo7Ri0+PEZNOzI0XUE5VylVOUYlKTgmKS0zNk1ANlRMVjdFWSQrM0VKQFZIRQorTTZERUIgNiwhKzAjXigjIT46JFVOQEZJQjYiIC4qNEVOOSRVSDEzOF4pVEU4MSVRUjhDOSk4RUlIOlcpRgorTTg0RFk4RylDLEIgWTM3SUY4NkVOPFY4UCNAWE06VlVVQEcpOTpGSTgtRiVdOlQxJEAmXSknMTRFMydJTAorTTY1RTs6VjlWPVREOygiPUA2RlFANiREVjElRVAxI1ksQFgtSTE2TVo8Rk1LOUc9STUzOUM4VE1DPldJUgorTV9GUUA2Jk1QOUMwSSkyPTg6NEVDPkZEQCIxQEkvVDFGPzdJOzM0VUAzVUE6MjQ1RztUUTk8JVhfMjNdOgorTTo2ITY2NERfN0RFODglXSQrMyhJLUM5JDtGSTo8VylGPTghLzg2KTYvRUE2MSRFQDw2QTYyNEUkOCVJSgorTTM1OUI2Q1xNNiZBSjokVSU7V0lKPVZFODolXSkyNik6NkVFKTonITgsQjU4Pkc8UjYoKTs6UCUvIDM4IAorTV9DXSs4Jlk7M1dVUjQ2IFwlMlU2OUZJOztGIFsoITRXN1NdKTsnIF8xJDVDO1ZJOzQmLUA2JUlKOyRcVgorTTEkRVM8Vik6OydJSjlCTDIrNilaOzdFWjpWSU8vUilAPkVRPiwnKUo1QykhLyI9SjxGXUg2RU0xOVYoTQorTSgiIEkvRFFRPVZFKS1CVF4/JVxFKTcqIzxDRS0+RzVSOkZWIjwlWFA2JUErOlcpTT8/Wik8RUVCPldNRgorTTYhQDgrNF1BPCdZUC1CRE0tRUFAOCUhTzpVQSU2Q0UvOygtUjZENUI6Jk1INjRFLDZFTSkzNUhWKzVJSworTTwmKUI2IyEkNiVZNTYmKTk4KCIgNlZJUjE2XUo2NEU5NUYhLTEmKVo6NEUvMSRVJDxIIUo2NUBWKCNZOAorTThGXTYuNkVSOFcpWjhFRToyM0UpL1M9ODlGQVI2IjQ4LyctXTgzWiIzKCAhNlAkViAvWFkuNUVOPlZJWgorTTxGKUM2QzhXL0Q1Uj83OUs2IkxNNiYpNjI2SVAyMzxHLUUhTDYkNTg4RyFPNkRVLTZGSTo6RkklLURdWgorTT5GSTUpMyhZOkddQjhHSUY7VDBJL1ZJQjVDXUs+RiRNMSU4VjgnLVo7NiktOicpOCoyXTg7Q0xQOCgpWgorTTgkRFwuNylDKTBZLD02TSkzN0laPEY5TUBHLUsvUjRNOCctSzZXS15ERz0vOFdKIj02WSEmIyhNMldJUgorTTM0RS02JiFAOEZNQC1HSUozNiRNLUYtWjhUVTg4RilNPkctWjwmITgvRFVGLUFAVjpXSVI4VVxeLjYhWAorTTwnMUAtQlVVQEctSzwmKVI9Vik6MjNFNjwkRFQ6RylSOkVATSlWSilARik2NTQkVi9DRUM8JFUoOlVNRgorTT5GSTY6JkBbKzRERTE2JVI+RkBFI0FVQjtHTElAQyFSIDYsIS9QI14qMUxeO1dSIkBHSUY6VU1BNjRFJQorTThHNiY9NFxHL0ZNUzpXIVI8Ri0rLyFMVjo0VFYyVyFLO0ctKSlVOVo6RTk7MSI0VjxHVTo1IlRWNiZKIAorTThFTU4zVU1CN0RFSzxFRS88R0lLN0I8UC1EXVpARllAMTZJWjoiREUxOSE2JlJVUkBEUFk4NkFbOjI0LgorTS1HISwuNUlaPlcpQzcmWUw8RiRAJTNFQzpUXUpfSEoiNiU5SkBYLVU8JE0/N0RFSDpVQTg4Jk1LOiZFRgorTTpFQVI9Nk1KLlIpJTlVOTs4Rk1KOlZNTj84KVc6M1xfOEVYOy1GIUs9Nz1MODNdLzpEVSUpMyhJMzc1WworTTtWKVJAR0lOPEVYTSwmQUgtRDU5Ozg9NiZRNF5ASElaOEYlPzgjOEIvRUlDLSVJQDonKUo2NklGMjMpSQorTS8iVSk8R1VQLSFAOy9FSU4vWChfOlAlSyA1OCBfQjRLNjZNXT5XVU06JiEkNkVBQzhGRVJBR1UtKCJVOworTT02WVpASClTOkYgUik2VFklMlVBMzUiIjlSNTU9VyElNjVAXDI3IVs7VVhSKTNFQkBHIUo5RikwN0ZNKQorTTZHNUM4R0lOOFc8Vi8jKFlAJ0lDLUM5OjlHPTUpM14iO0IgOzI4KVAyM11CQkglPighTF8pMVVAPkc9UgorTTpWXVU9RzVGLSJMTTNWRSUxL1laQkZEUDE3UVs9RylJMyYpUjI2JS82VUlOPEcpSTZWSVI8V01OOFU0OworTSs1RS88R0lDOFVROzpXTiM/NyE4NiZJRisyVTgzNilYOjYpLTZGTUApMUxWNiVJPDpGLTY6R0lSPEdJSgorTThFXUI6VDBJKTQ+IjVCIC4mVUVaOzZJSDQ3PUEvRDEpOiVBNjMlIUI4VkVKM1VBODpWJEUsJi1VPEZFNQorTS8kVVA+VUYiODcoITpAJSQgLlhAL1ZBO0BHNV05RVE7MyNYVjNWRTk5R1VaNkIoNS42KT87SC4mQEZNLQorTTEjKUgxIUxNL0Q1OT5HPFYpViFDLCRNPzY1SVM9Nkk6MTJURStWOV08RlVLM1YpQjglSUs8Jz1TNyZNVQorTTElWSQsRyoiOiI0OyszKUo6NUUpOyctRikyRUs7NERALjgqLT5FWEkmUTQ1LUAtOl9GKUs+RzVaPERNJAorTTI0TUE2NUFRQEcgVi9GLUY9NilAKVQ1UC9URSQzM11COlcpSDomLVI+V1VTOFNcOCYiVFA4RyklMzRVLworTThXKVo+Vz1KOkc9PixDUSsuNDVQOlVNQDo3KVA2M10vPictUjpGKS03Vl1KOkZNMDknXVo8RUBWLURRTgorTThEKEkoIlVAM1VFTTEmLVA2VUBfNjc9STIzOSk2JiFALCI9QTo4XUktIkUvOFYtSzolRSQ4VzlLPCdIIQorTTxAJSkgKjBJL1ZNLztHSiI8Ri0pL1RQXiwmLUI6RllOM1UgQC5TWFYzV0oiQUZNJSwjXVo7U1wjLUxUVworTTpHSVIxJERZLUVBSDZGLVI8Rz1ONjNcTSs2LU47RilDNlZBOjhXIUo6RzVLM1VJSC9GRVg2Rl1aNUFALgorTSYjUUM6VlFANlZJVzYjOUA6QzgyKVYqJkM4KFwoIVRJLENZJC9TXFQ6UC1aX0VAUDg1RSkyNkVSOzdJQworTTo2RSg5Ry05LUVFSTg0VSQtQlUvOEZZJTZWXVo9RzVVPEM4OCNBQFY4Vy02L1QxOjpWXUIzNklXPEchJAorTS9VXUktQzk8OkYpSDpWKUs9VkExOFc2JD5GKF81RklCNjVdLDFXJiI+R0lPOjVNRjpWQT4vIlUkLjQxNQorTShDXVA4RUBWM1dRWjwlQTk4RUlAL1MpODpXLTUqMlRZOzhFTDMzODsrNjlQPVcwITxAJUAgL1hNKVYpQworTTZGTVU/KC1LL0VBNiczRSw8WClONlYlKTVEREktRj1VQkcpKSxDOVU+Rl0pKzFMMi9GWiI/VTA9LyRVQgorTTdHKUs5R0laPEZRKy1GKU48RFEkLUZFQDEmQU5AR0kwNjRETSlWRig7RzYiOjMwOCZUTUs7RyktMTRRUgorTTolOU89VlhUJlI9RkE4NUk1NV0+MTRdPjE0MSQ2VllaQCYoRTMlSSUyNyNePEUlSjhGSVgxNDVSOlYpSworTT1WXUgzMzhFMjZdQS4zIUg8Rk1KOEYpNSghNDsyNk1aOlVEXzE2TiE2MkRZNycpSC9TXTk9VURWLUVZJQorTTM0RE0xJlFSODJNOj84KUsqM11KOiU5KTI0NSQ6R0lcQEdJSzpGSVI9JExWLURFQDUhTEU2JUReNjYtXAorTT02TUI2Nl1ANkYlQDo3KVs6NDBAJlYhUC9RNC4iMlU7QEQ1JyA3KCE4QCNeKzQxTzxFRSw2VlYqPEQ1KQorTTgjOFYuNkYiPkc9UzwmSUA2JTU7OUdVWzgzWF40J0lcPCUwSSYiNUJBN1VIKzM5LDY2LUw9VlFPPDc1WgorTThFQUg5Ri1AL1IhJTojRSU2SCoiMSNYXCYgRSQ+R0ldQFdJQSkxQF44VylQL0MhJDxHPTozVildQCVYVgorTTE3PVU7Jk4gOEVFPjdDTSk6Jl1GOldJUjJWISUrM1lXX0glTjhFJTo9Vi04NkdJWjxHXVI8RiBNJiM9SAorTTI0QDsvRklJOiRVJTo2LEApNkFaPzZMXy1DKTpARl0kLURdTzgkRSkpVV1MLyJUWzI1NE0mIVRZOlcgRQorTS1GOV88QlRHMzZdQTI0RSQoREFROzgpWTtGSUo9V01QNSJUXztWVF8tRFVALUNdQz03NUIxNEFDMiRVSQorTTZHKUI4VUk+LSIhLTtVNDIjQUBNMzgoXilQJSwgNDAgX0JEXjY2TU84RylSPkcpSDVEVT43IyEkQDdVTgorTTxHNVIzNU1XPCYpUj02SToxI106OSYxWDgzKEUzNlUzOVZFKTglUUs3Jk1TPEcpTjtFSTA6RUkpODVYRQorTS1GQUAxNUFbQEZAViZSIEssJilLPkgpWjhTKEApMyFAOlY4Vi1GQVI5Q0UkPkdWIDo0XTo4RylaQERUWQorTTgkREUmVDVSPEY5TjlGTVAxMUxFMS9ZW0FHPUA2Rk1IMjQyIEBXSiY+RzVQMSJUXzcjTTQtQlUtOiZNQQorTTJVSUMuMlVCQEdVSyxBTEU2KClaOiVBOz1XLUI1MiBWOCREUis2JVU1M1BNLVVNUTdDOTg6Ri0pLENEXgorTTIzWF4yMzhZN1VFSjtGXUg4RyldQCY8Wy1GIUcvUzk/O1UwUDpHNVI2QyBeNiQxLDdTRUgzNiUlOEZFKworTTw3TUAqMkRSMjVCIjYmICE6MCU+IC9ZPC9TOFAuM11SQEcpSzZURFk4Vl0pKzVFWjlFWUY6IzhZPTgpQworTTM2XUg2VkVBNiQ0X0AnKFYtRyFDKVRBTzI2TVI4VVFDN0ZZUjpVSSk2Ni1JMlYpTzBCRF41QzkkPkgxUgorTTEhTTg2MjxZMzY6Ij83KUM3RCRAL0VNQCsyKSQyM1xFLUZNTjxGTFwmUj1GQFgtKSlVRSkqMFhFOVcpUgorTTwmIUs+JjhbLlVHSDlYKV08Vi06OCI0OzgnXUs8R0laQFcpPzgkRF82RlU/MzYtTzhWJVA2MVQ7MjcpVgorTTozUDUlM11XPkZJODE2KVA2RkVGLUVNNi8iIFk7VU0lMjVBQTw2QF4tQyE6OiYhNCszOSUuU0U4NiYhQgorTTlGSUA3RUVNPkgpQjg0RTY1QlRNNic5Ry9HJiI+RigjL0hFKThWIFY1Ri0/OlQ8IzhIRUE2JF1AMzVJQgorTTdWTCE+ICYgIC9ZVzZURFIkQU1APkZRQzgjOEU2VylQMjQ2IDokVTA4IiA7NkgpSzNVOSwzNyFfPCRVLworTT9XPF4tRkFCMjVBQDE2LUs4RUk7NlZZWjxGSSkvRFFJOCZFWzojTEcvQlRNPChKIjIyKS02MjRNMjYlUgorTT03LVI6ViRfMjYlRi1CVF8vUkQ1KzYpWj5WXE0jQFhQOEdNKSk0RTwsQTRANiZFUj1WLUM6VkUpM1ZHVgorTTpXNVY/JyE/NTIgLis2KUg4Vy1aPkgpUjhURF8zVklaN1ZNSDM2JUs4MkRANicpUjpVRFImUzlKPkZVQQorTTYmJTsxNUVTNjVNSDUzTFwzNDBQKzNZQzwmTT8vUzk+OEghTyxCRFYvVEU2NjVJQjxHJUg2RUVCOSdFQgorTTMkMSkxIyhNMTY9LDYnKiJARk02KzI0VjhGSTo2Rik6PEYtOjZALUJBVkFGNyRdSTpWKCE5QCVVIC9ZWworTTxGRSQiMTRWNkYpPDZDUE0yNk1SPEYqIjwkUTo4IkwyKzYtVzomIFYuNU4jPlNEVjpIIUszNiEoOCYxLAorTTgnKTw6Rk1DN0Y5WjxWSSQoI0VBLjYpWjxGLSktQiA4MyheKjwlRSs4NERfMzYtSDcnKVo8Rj07NjYpSworTTYkTTk2IzhJKjQ1Uj83PF8oIiBNMSZNPiszIT4xIkRPMTVNOz5HKUM4REUlNkZPTThGKUY+V0FLN0IgNQorTSglRU84RylSOjYhLTglTTg2RklSOkcpOi9ERTE4JDEpOlZZSzw0XSQqMzlLPkclQjhWWUEvVUFGOjVZSworTTZETTg4JERWKCIgXzVGLVI2ViFIMzZJSjIzKFYyNFU2MjRFLTlXJVE8RkFCNkVJUjlTRFYyM1BWL1REVgorTTM2SVo/NylKL1IgVjVALTpEJilCOkZJLTZGKSwzJ11XOiQ1ODhWSCE4QCVGIC9ZUjxGTT4oIUBSL0Q1OgorTTZDWE02Ji1COlcqIz5GJTo6JURJJiNFTzclQFsvVFVLPEJUOy1GKVI6RiBeNUYgWTZIKUo8VlFGOlQxQworTTsmJF4mU104KTRRRDs3KUkyMiAuKzdFVT1HJFkxNy1QOEYpRzM2KU48RllQOyYtQzZGJTs6JyE+LCM5QgorTTtHKUgyVUE5OiZRSDIyVFIuU1EpNlVNLDlHNU82JDReNiciXDdUNUBAKClWOVVAVCxFRVI6VzVLOyZBQAorTTZFQS0zVkFNOFYtOi1CVE0tQyk2QCYpPj1UME0oIjVAPEZZSTZGJUE2JU1DOFcpWjgjOFk6NiRfIFIiNworTSwlSUAxJj1LOCJUOCYjTTs7RylMODVBKTI0NUI8JEQjL1o9JTY2QTs2JUFBODVRWjwkXSQ6VzU7MyYtOAorTTYiVEkvRUlDN1QxJDgkUFYpVUk+PCZFNjQmVCE8QCVCICpdUThFSUIuUUBbNiMhJDIyVEU3RkUvMydOIgorTT5GSTo6VykpKCJVTzZDOF42JiEwMyNMUikyXS02RFVBOFZFOjMgMVJfRVFLMzYtSzglNFItRVhNOCVNQgorTTpGUSkmIFhCNkRVOzUxVF8+R1FGNkZVQDglUUI8J0FbOFVdKTg2JUI+Vyk8L1RFLThWPUg8Ri1SPEZJQgorTTUyIDUrNkFJOiVAXzxGSSs2M1xQO1ZAXzM3TV0/N0lSN0Q1KzI0MUI6VVk6OlY4VikyRSk8RilLOiUwWworTSoxNEAxN0lGOUhBQCpRQEA2R0lbPCVNJTI0NTo8PFUoOkdJTysxTF42JExNKjJMRzY0MFA2RylBLVFAOAorTSs2JV09RllQOjVZKS1ENVI8JExWL0REVi1DWF82R0FYOFZNSzdCVFk7R01QOFVFKS8jMSQ4Nj04KzNFQgorTTI0MFYrMVUtP1YpLTlAJiIgNjggSUglSDQmJSQtREU4LjNMUiYiISk2Q0RHPChJXDhFQVI+RkRWLjZBOgorTSszOUM9VjheLCREWyBSNzQrNiVKPCdNSTM2KU4+VylMNkZJWjpWIF8vVUUpOCYtSzpWSSkmIERSN0JUTQorTSggRF88RlU2LjYpQzhFUFk6Nz1aOlVFNTo3IVA6RVFaOiQwWzJVSUM+Rjk+PkZJTjwjRC4pNilPOiVEXworTTpWIFAyMlQyIFRHXjY2RUs9RylbPVYpQS9RTFYzNiE/Njc8XCghQEI4RilSPkZBPiowWEAyNlFDOkdJTworTS1CIFY6N04iPkZBOjIzXFk2Vi1BPVctNS0jRTg2MzhWNTM5KyxBKSU6Vi0lLCFURTE2TVI4RUFAOEYpUgorTTw2VVc4UzhWNTJUNSgiNFA6R1VaPTZZVy9BTSxCSElbPCVJODY1SU48RiBeL0YhLTg3ISsoIjVCOiM4WQorTSA3TCE9QCMpQEcpQi9VQTs6Jk1JNjJUOC0jRTs1QilAQjhJTzZHKig9RiE6NlVEUis2RiM+RiBfLUREVAorTScwWDsyNFE6Pkg1Oi9VWiM+RylCOldJVTpUUSU1NDE4MzYhUj5GQT4sQ11IKTAsKV9CKUI/ViBZN1YpSAorTTokRTg5Ryk/LCRFSTgmLU80Jl1PL1MxKzZGXiM6JU1SOlcpSy5RQEAxJi1JM1VZQzYjIFYoIUBFJlIoXgorTThWUUgzVzYpPlVFJCghNE07RkU7OEVQRyNAWTYzNj1KNCZNNSYiITg4JUktPEYsTSk1NVI8RzVaPlchQQorTTg0RSU6RyFbQiZdQDYmIT8tQlU8NkVAOCNCNUA4RkVBMSMwRzEoXUozNFVAOUZJUjtWQU48VUU+NjNEIworTSYqKEkxJilCNyZNUzUhNEc5JlVWPlcpSztWTU49RklCNkQ1JDM4IUs1IykkN1IoTSA2KCE7MCMpOlYtUgorTTdTXS0+R1FTOEVBJDYjISQ7IihQOzgpWjgmLV05RDVLPkVATSgkRiI8RylQNjNYUiNAREAwQj0pO0g2KgorTTpXKV0+RjlCOydJRj5HSUAsIj07NFFVLT5GIVI7SCFIKCAsNV9CIFY6WCFDOCQ1JTtHISU4JyU4LERFQworTTYkUVdCJ0lLMSIgTS9WLVs4I0U6OldJTy8iRF42JDU4OSYtUDZGITg1IyhUKjJEMiwmLSwvRFYiP1ZFNQorTSggWEU8KDVQNlYhPi5RQE02Ni0tLCVBPiZRQFw2NilAPVRMRSgjTUM4VilSPlZNPjxGRFA4RilSQEdJUgorTTlFSU0sQzlGODVFJDEjUSQ2RylLOjU0RSs5TS0sI1lCOFZVUjlGKTg6Vk1QOyRERyUwWFQ4JFRZLjVJQgorTTUzMCMrOTklPVc5Tjo2TT48RllfPEQxNC5WTVc2ViVSOlQwViA0RCE2UCNeMzNZJzhTWFk8RylDPCYpQAorTTokVTU6I10kNlYpOjZXTiI4U0VAPkVIVi1ERVI7RllKOjUwSyIxNEcrMTUpNlY6ID04NV08NjlGPlcpOQorTTo4KVcvQiE2MiI1KTpEQUM2V0lQLEMgXC5STEUzN01CNjNcXjlGXF42JyFIMSVFQDhWQUZAWCk6L0NERQorTS5VQUY2IlRNMTcpUzUyIFk7VDRfOkZZWjM2LVAzU1hfX0NcWypSVSkuUyhcO0ZVUDYyPDgrNjojPVVJOworTTYmISElM1k5MjVFQTolNFwxJFVKOEYgWTYjUFQuNDU6PEctQjM3SiA2JF06NkVROztVXF82IlRHNkZNSAorTTglQT43RFFTOFctNCZRQE0yMzktOkZZTjhGOTU4VkFSPFZEVighKFQ7JUxeNkYtOThWLTUqUUA7NUcpTAorTTQmKUw6VlVdPERRQzYkVUo2RVFaPUgpSTEwJFAgNUwgX0VYTSZVQUI2VyEtLCYhSjhFSSw7JyktMydJLQorTSlTOUs9Ni0kOicpQjYlRTw8R0lKOEVJRi8hQEcsIiAuKjM4XjM1Tig+Rik8OlcpUjtWWVI6ViE4M1VNSAorTThGSUI8JklKNyZUXy9VQFIoJFYgOkRVOjM2TUkuU11APTVAViwkVVAyJylbLUIoVikyVSk4JERUKzU1TAorTUA2XSQyNyk5KzRFTEJENSU7NUhWMT9ZLTMlWSQvVEUkLjZdKDomISQxI1lKQFgpTDhGKVI7I1ErNiQxLQorTTZVSU86RkU6OiZAViZURT4rMiBWNicpUDZTRUZAVk1ANyZBJS9VQUg2NUEiLENdQz1UQFkzVyBNOEYtTworTTUxQDIqNUhNLUYpWTtVWUszVFU5OjctWzYjMEctJiU7LjZKITsnLVI5Q1BAJTM5UjxVSTw8RzVbPzYoWworTTY0NFs2VU1DOUc2Ij03LCE4ICU5IC9ZOC5RKSQ+RjlCL0NdJDgmISwxNi1SMyJFWjgzKFcyNi0vMlchSworTThGSUs6Rl1aOzZJLzokRDgmIiA4JTIgVjEhTE0+V0k5NkchLzlHUVU2M11CPlVBLTxVSTo6RyokPkVJSgorTTUzWTovIUxQPEZJSjlUUTo4U1hFLjc9UC9CVSQ4Vi4gQFU0SSszKEIuNlxeKCFMWTpYIUI4R0FaOVJURQorTTI4NT8uNikpKjRHXjZUPUI5RTU5NjRdUDYkUF4xJkE4MzZZWj1WTUo8Vz1IMzVNKTU2ISU4V0laOUY5SQorTS1CRSk2JDBSLlVBVzhWJUg8R01OPEZJSjYkVTo4RlFDOCNYXzY2STgtREU5MjRdQzZENFQoIlU6LUI1JQorTUBHSUI4RTUkLjRdTkBXISsyM0U4MjM5QkM4LiNARy1BM1I0VjpXKUc4RllbOlgtRzE2RF8vVilLOUVZPAorTUBFJVIgNyghMzAjXi9RTC4rNylSNkQxQDY2OUAyUzkkPEZdKT5GSSUyNEU5LUMhPDpGLVI6VUlKPkdJSworTThWVTkvIykkMSMwVDI1UDIoJklXMiYpXTZGKVo8RkBeMDY4XjEnXUgvVFU5OzgqIjtVUSk1NDBLKjYhOgorTTlGXUA6NkE0LCMpOjhFNTg4NiE+QEhFUi9CNFwqMjVDMTBYLiU0RS0rNDFaPkY8TSUyPUo6VUlPODI0VgorTV9GIUA2NUktMjRVKzpHPUAyM0VDPVREUi9WTVI5RVlOPVRBLTYzWUEyNiVOQEchOjYzXUE/NEUrN0NdSAorTT1WKUA5RyojPkc6IDxWIUA3VFFGPEchPzY2JUo4NUErNiVFOTZURFYtIjRfOCM4Oys2SV08RiklNiNMUAorTTZHSVo6VFxQMjNMRTE4UixBR1VTOFVIVCxFQTw5Rik8OiU5VTlTXUIuM0U2PVZJTDo4KSU2QCVKIDVMIAorTVpFQEkmIjVCNyYpLTY2LVE7JyEtLUVKIkBXVUsyM1xWMjNESS42KUM8Vy1LOkdKIzhWKVA4VUVAOkZdSQorTTdWSTYjQjU/PERNJzxGLUM6RlVTPVVNOCZSVVc+Rik6N1YpTEMnSTo2JUEpMSRFQzwmXUs4RyFQOCU1OQorTTlEMUA6Ryk7MydKMkJGXFwxJDBQNkMwIyNPWDUlMFhWPkdJQjEjMSQ6JUU4OFclKS9EXUk1RUlPNiQ1KQorTTFWWVI2I106PkZcSSUyVTk2I0RfPUU4XjYiVFYzVlFKPkdJTS9SRUI/VFRfOjNZJDxGKS02VlojPEYtWgorTUAmPS0xIkUsPFdJSzgmJTs6Ni1ANlVBQDYkRFwrMlUpNkM4RSo0UUpAVk0lL0M4QCwmTVY7RkRfMSJEQAorTSs4Ki1BOC1TOFVJODY0XjM2RklGMzVJRjpGSUM5Q1g9KTZNSzxXPS0zIClLICpFQjdDKFI2Iz05MTNFOAorTTZWIVI8U1xHOEhJXTtFTS8xI10kLlM9QTtGUVI7NjlaPkYpJTZERSU8QC4iR1ZNUjsxTF8zJilJLjVAWQorTTNWIUI9OC1TN0BEODE2WVc4Vi1IM1dJUzE0UCM2L1lANjcpUjdVRVI8Rik7OjZAVjdXSiI6NFVaREkpWgorTTY0NTkyNyBWLCNEQCNARC4tSCoiOkRFKzw4LTk2Ji1KO1ZdKDgzRFk+JyElMTZBOTpWRUg6RlVaNSI8QAorTSs1STMvRiktMTU0TSUyVSw2RylTO1M4SThGRE0sJyU4KzREXi0lXUY8RU0pNDZVVzhTXEUuNlFaPkZNQAorTTglXU88JiE4OFVEVi1DKFY4JipSL0QxJC1DKUo4VUBSLEJMSTM2OU48RyEpJEEoSTs4NVU/N1lAMzZNUQorTTIkVT44VUk4Okc1RkBHNTwrMUxQNDdJUzMzRCE6UCVSICgxVTxGQSQgVUteNTQ1JCZSVTo8RiRCLjdJXAorTTtHPVA4VTRNKTIgXjtVSUA5RjojOUZBOCsxNEU2N0laPzcpRDxCNE0vVUFCMjNMRSkzTSQ2WClON1NESQorTS1HPU48RUUpNjUwRSU0VUs4RiVLOFZNQzpVRVI2REReODVEUjM3NiU8RVlOQkg5VTglQTgyNz06NkdBNQorTSghNC4qNyFaOFQ1KTxIOUgsIylAOUdJSzlSREUzJVxHXjIhVzEjRUdCOEldPlchRi1DOTs6VDVIOEVJQAorTS1CTFQrM1k2OEYgXDI2IUApMjVCOUJURzEkXUY+SCFSOCRVQjxHITkvJE1COzdNUjpFTUE4RilDNiZNQQorTSxBQEAtRkFLOCVNSDJTKF42VjxSLSNQVi9VQSkxNk1OMDFUOzNWTTE+WElDMTY6Ij5GTUM4UyBQPEdJRAorTTxGOUk4NTBWN1ZdOjI1QCE4UCVWICspWj5XPUg5Rkk5ODVATSRCIFYyNi0kLCYpTTxHSU48JiBUJTMpKQorTTYkVSk2NylVMzVBOCUwWDUsJUE+OUVIXzdWOF4tQC06X0RESSUyNE0yN0lSNiRMXzYnKVo6RiBeMTNYOAorTSNCVT80JSFKOUdBUjw3PU86JVhWLUNQSS1FTVU7Ri1EPzgpUjpWTUkxNk1NPEcpUTY0JFArNiFGNlRFOworTT1XVVcyMzk7OEc1SzslQTYzNUBNKCVQViZTRVpBN1FdPkc9ODg2UUovVilPNCYtJTI1TFYyNERXL1M4VgorTTNWRTUtRUEtKzI1KTo2WVZCOClQMyxNLThWQSkvRFVJOkc9UjhUXVc6NF1DOjdJTDExQDUrNiFCOicpUAorTTwlOF4zJkkvNTY4XCszXFcrM0VMPVU0WzNUVTk+SElQMzVRVkE3VVo7I1BFOygpVT03LU84REUpOkchKQorTS9EVCE3ICVSIC9ZOT1WSUY+Rkk7OiYgTSgiREAtRiBeKTNZLDxXVU48RiBSJTNZQC9ERTgyNk1KMjQ1NAorTSUwWEArNDU5OEYpNjE3NVMyNUFJOFVFKS1DOSQ2Jz1XNlRFKTZGWVU6Ri04MjNcNSIxQF8yUzhXNkdJPAorTThXTUY6Vz0+LUQwXCk0UUoxVUlKOzYpPjxHKUgzNk1VPVYtUDwlQT43ViEtNlNZLz5HVVI8JUE7OydLXgorTTxGOVI8RkU6NTMpNTUxTEU2RzVUO0Y5WjsmTVI6RDBXPVcpQzhWTTg2JiE4LUJUVisyVS06NUVBLUJVNQorTTg2SUI0J0olPlU4XjY1QSk1NiVCNjZJXzhUVVA6VilCOlgqIzIxQC4rNU1DNlYlS0E3WV1AVjktMjRQVgorTSkzPFYqMjUvPldBOi4yXUJAV1lVNkVJSjwoOV07NkUpOVc1TTs3VVo2MylJPkZIVkBDOT8gNighOVAjXgorTTE3ITwyJylLPCZNQzVDWSktREVDNkREXis2LVs7NyEtKjIhKTkjWF83RUlMM1RFKTgjXFI0JVE7ODYpSgorTT1UVVJCRiknPCZZQzolOSk2JFFPPVYpODI0XVI9Rk07OjYlKSowRC4rNDRAJlU5Si9VSiE6NilSNiMhOworTTojOSQ2RDEkNjVMXi0mTUo4Ji1bPDYpOjsnISw2Ri1AOCVMWzYnNVs4JylDMTVKIV9HKTEzJlVbOlVAOworTS1FNFstREVIOkZNQzxWTUQ9NlxeJzVdUjhWSVM2RUlSOlRERSozKDstRUBfM1MoVjZYJV86VUlGQFghLQorTS1ERTgvVFVAODM4UjpFTSQ8Jl1CNlYtWj5FQEUnM1FAOCVJOTZXTiZBWElXOFYhOzJTOT43RDBNLjZaIworTTpCNDssR0lSOlYtSDZVUV0/NVFCNic9RjpWWV0+RFBLOFdFRys4KEc2MCVKIDVcIF9EVU48VUk6OFcpTgorTTtHPUkzNTlIOlZNSjVCNFk6Vi1LNlQwVjVGXTwyNiVJPEZJQDZHSVAzJEVPNyYtOjg3KF40OClSMiZJTAorTThWTUY4RyE6NjdJTzZFQTs9R0lLOiZJUDhFWFAmIiBJKCIhKThSVFA9VUE2OFVATTI2SVA4VkFIOCVFOAorTS9DITs4VF1DPzYhJTM2KUs4REUpL1VJSjMlSU0+Ni1COCNFOT5fWUsuMkUlPEddRixDOF4xNERWLjVNOQorTThXPUI4RylKOCM4VjEkUTo4Ri1LPTcpTzUzKEkoI1FGMTM4RS1DXUhAKClCNkdKIjVBVFA3JiEpLjVFNQorTS9VQTUrNylSNkRVMTs2MU84M1BeN1RdLS9DRS09OFYqPEVNOTZFRSk6JyE4LEI1OD5HPFImIkVCMyNFKworTTZGITs8SC1aNlQ1OC1WKVM7RzVKMzYpRDgzOiIrNFQhNkAlJCAvWFY5R1VOLjYhUjpVIVs8RUBWNkZOIAorTT82LFYsJi1LOUYlLC9URUI7Vk1CPEZNTTxFSVI/NihQM1RVODgmTUstQj1GPEYhQjhVWVI+RilXNiMhQgorTTolRTo2RllVOUZNSztHSUs3Q0xAKTNQVjZXJFwpNUEpNiYlQzI0RUtCR0lLPkddTjpUREUyJi06OEc1SQorTS9TRSw6Rkk2L1JFJDxFTTg4RylPOFVAWTZII146U0xFKzVFWzxFTUI3RiFALlI8Wy1DRUo6VUlIL1YpUAorTTEiVSkyNDU7PVc1Qz1XUUAvQyhHNlYhJCkzKE0rNVFaOFRVLzxFODsoJTlLOiMgVjYkTUA4NTlaPFQ1LworTTZGQSQ2Ny1YODVNODolQFQrNUlaQUdJSS9TPTg5RkFSNiI0OC8nLV04NEU1NDQwRSszXSkzVSFaQEVJNQorTS1CNF43JD1GPkdBUjVFQSRAQlVGIDVAIScwI14rNUlaPkMgUDQmSSU2RVFGKTJUWT5ISVI2M0UwOEVFOworTTM0TF8xJilQNyY9MTNXKUIzVllSMjNcXi9VRVI7VU0pMzVRSjgkRSg6RylOQCYkVjI1TS01RUlOOkVZLworTTomOVU7VkU0LlM5KS9GJVo6I0xWNlYtOjgmITg6SEFTMyYqIkBHSUkuUyE4OVcpVTo0RFYsJiFIOiU0TQorTStWITsxNU1LOjYpOzhXKVpfRylALyNRLzlXKUo7RkVJPEY5JC1CNEUzNlFDMjRFUDlTWFY5RUEkM1ZNUworTThGWVczJiVLLCNFQTYjXSEoIjReOCZdSTM1RSkoITRePVc9JCszIFY2Ji1IPEZEXzI2JTgyNUlNPzcpUgorTTg3IUM1Mz0vOldVUjo0REUxNiVSPkZARSNBVUI7R01aPlYtKS8jOSkuNkVJOydIWSszKFIyNUkpMTY6IgorTUBHPUgtSCg9NiAlQSAyNCBGRUFLOkZZQDJVQUo4Vl1KOiNMSSk1RVU+Ryk4NUYpQjZUNS0gViNeOEYpSworTTNVQUo8RilKO0RVNjIyNFA6J0lPPEZNOTpGSS0vVDEkNydNWjo2TUIyM0UpPEZJOS1FQU85JjlPN0VdKworTTYjRS0+NykpKTRVQjdUXSkzNyooPCMgWTxXSiJAVkRWLjY6Ij03PSkrMyk4MzRVQDYjWFkzNDVKOkU5JAorTTZGSV87NzVKODRVODZFTUI8Ji1GPVc9SzEiIDgqNF0/MSVBXzxEME04JERQWFRMWThHKVI4UkRePVRERworTTM1QF81MyhUMSNZOjwmKUg1QkwuKzciIDozOEUtI0VCPCYpPy9TXTgyNF1DO0ZVUTxGRUM4VF0rNjYtTgorTThFUUkvIlUpPEdVUC0hQDsvRUlOPzhJWDgjXSsvUik7PFZJSykwWE0rNDUwN1NFQkBINV08Q1xAL1AlSgorTSA2JCBcWCldOkVFSDgkVUo5RzVaOlYhKTU2ITk2N0lKOiYtUDgjOE04RylVOUYpUjokRTk7RylLOkYpQQorTS1BNDUxJylOPTdJOjhHPiA8JERcL1cpVT03KUQyM1xfPEcpQS1DIUo6JF1LPFZNQTYjOSQ6VkUlJlYpSAorTTglQF8uNVFaPEYhKzgmKVpAVkxfKTNdVTxHRUgvQlU4L1JUXzZURCMrPT1CQCJURzdWIS0zWCFSNlRVSworTT1WJFk6Jl1KPEdJVzZUMEAnMlU2NkZNXz1GRTg6NDRWNTMoVj1XXTkpUU1AOzQxODZUNUYxJEVIMzUhTAorTTtWWUIxIkxUMychUDEiNFQvJSFXO0ZJJC9URF8xNUlLOkcpWz5GLCM2WllJOEZNODM2TUEpMyFDPTcpSQorTTUzUS08J04lQzdBQzE0NT4vJU1KMiJULiNDWFwvU0RNLCYqIkE3JVI4VTRfIDNEITpQI149OClXNkYtNgorTS1WKVU7RllGO1VdLThWUS81NklPNkYtQi1BTSQ6RlVLNjY5UTVFXVA6VkEvOkcgWyNAWEUyNDVHPVRRKQorTTlIOig6JThZOidJUj5HKFYvVVlGPVZFNS1GLUMyVi1bPkcpTDglQUs8JjhUMSRVLTI2IUAzJk05PEdRRworTTM2TUs5JkU6L1RRRj03NUo2JU04MlVFSDg0MEUkQ0VKL1IgWTEhTEdfRl1SLjMhP0BXIF8vVU1CPTdJWgorTTpGJFQmIiBWMzZOIDxGTUM6VERWLyJERTpISU8uUUBQOCZFXTozRUo7VkVQNiRdOjZIKUsxMzxWMSZBVworTTgyRE0xNEVTPkdJSThURSQsIl02NUVRVkJHKUM6Vk1SO0ZJODM2RUktIkUvOFYtSzolRSQ4VzotREghTworTTMzRS02Ji0wLjNEPSNDWUA9MzgpJTNFW0E2WUIzOCkpLlAkPSAzXCBCVklVPEYtQDE0RTo9NzVaIFcrXgorTTElQVA6MihZOFRFOTpVSFs2JUVKP1YpSjxFOSc2VklQMTQ1SzlSRD0uU0xFL1VcRy1GSVo+RkReJlQ1SworTTZXKU0vQzhfOzgpUDdDITg2JE1LPEZVXUI3KTk4R01bOUREWSsyNSk7VUlQOEZWKD5GLUs2Q11SPkZEVgorTS9UVVJAVl1BOCVNQThWXUAvIiBNLEYpJC4zUEsrNU1XKzFAUDxHNT4sJEU6PEdJWlxHKVI1MiBAJlJVNgorTTpWWU08VyE5L1NQOyZUPiU+RUhUKTJVKTtHIFYxJlVPOCNFKTVCXVI6VURUJlJVJDhGXTUpMlRHOEcpVQorTT83SUA2MzhAKzMoVjpYViM4RjlOPEZZWjhWJUs8VTRJKzNFTTskVFYmUlVGQUkqLUBWSF8tRUlTODRFQQorTTAwWDsuNkk8KCFMXzxILVU5UzhFLlAlNCA0RCBXRilLM1Y9KSwmRUs5RylaPzdVRjg1TVI+UjUhMjFUWQorTTs2TUgzVDEvPkdJWT5GSUY1RklbOjMhOzxERE0uNERSKCREUiZWJU82Q1hSKCQxQDE1SUIzNDBNOzgpUworTTpTXEUrNiFTOlVNWkRHPS84V0oiPTVIXiggWEU3VTktOCYoJDxPWUEuNU1SOkREUihEQVo6VilLOERBOgorTTxHPTszU1xZOCYgXzNVWFY3WCFOMSM5QzxHIE0xNUVVPEYpOjtGWSQvIyhLMTYhMThXKU8uMlU+LENRQgorTT84KVAvQ0RAKTRVVzIzIT84Q1g7LjZEXzZWIF8tIjxJLUM5JTlDMDgpNEU/OkdJXTZWLTguUlRFLEYpVQorTUBVUTk+VzVOPFQ1OzxHTUkxIiA7OCcgXyUwWj4iMlVMPychXUBGLFYxN0FSMzRBRigiNEksRzE+JlMhOQorTTs3NVcyMUxWIDYgITFQI14xJUkkNkVATTM2SUo5JkFVQkVRQzlHKiIxNEE4KjIpODpGQTguNFVaPyc1XQorTUBHKTs2WCooN1VFQzhGITY4VlhFL0NQOy42STkvIyhWOUYpKS9ERUIyM108O0ZRUjgyIDUuNi1LM1ZKKgorTUBFQTY6SC4jODJURyUyVU0vQyEpLjI8XjtXSVAyNUE6OkYkXyozOUY4Rk1LOjRVOzxHSUo6RkFDOFVIQgorTSwkMFBfRFVaPkYgWTY2TVAtI11CPTZNQTYkXUM4JTlBLSM5LTI0VUg2IlQ4OjVdSTpWSVJAVDBSJlFAXgorTTpFQTY6JihbJlM5UDYlQT4tQlRcMSU0Xi42JSQpNDEkOCZJUjtFSVA2UzhJJlM5QDcmWSwyJllOOlcgTQorTS42KUM2RVhUKCRVTzUxKCkjQiEsNlRdND5HKFkrNk1dNlRVUjEjOE0tRkFSNjJNODZGOVo8SCkvOiAlSgorTSA0UCBfRDE4NyJdVzhFXUI6VikzPkg5Oi9WKVo9NThQL0JEODI3NTovQ0UlPkdNKDQnTVI4RUlVQEcpQworTTNWJUI2JklSLURBJC5TWTk6RjBJLUc9UjZURF42I0RfOlcpUzxGOFQqUlUvOjQ1JD5ISUksJDVcPlVAOworTSoxQEU5I1heNiNQOCZWIVo+RyFINkYpSTJWOUA3RUlBOEZFSjxHTVo8RylRQCZNKSYhQDsmX1hZPEYoWQorTSwjRT88JUEpOjddUjpWTUk4RDUtPEVYSS41QTg6JERFKCcpWjxGQSw0KEFXMSJEOzI2QT86SC1KMjNRQAorTTxGSVE4M1xcLlRdSTIzXS0xIUxNNTZBUjxFSFk6VFxNJiE0TTM0MToxNUVMOFYtUDIzXS04NDVCOjRNUQorTT5WIEAlMiE1OjVJOC42KVI1IzlDPzZRJTpWJFkqNUE2PEcpKTYlRTs8WDIiPVdIIT5AJUggLyknNUREOworTTxHNUI2NVlLNyY5VTxVOSU6V1VKMTUwRSNDOVI9U0RFLCZNXzIzIUI4Ri1SPTdJUjpEVS0xNEVDOFM5OgorTTomRUkzVilXNiMhSjpVQSUyM1hWL1YpUj03NVAyVDEpMlYlOTYnJiI8IzheOFY5KSoyIDgqNThWOjZJKQorTSgiVUc9N0lOOFZFQTgjOUA6RiEsMjNFKTY2VCM+T1lNPEg2IjhTKD0jQUBfOlYpJC9DRFk3Vik7OUdJSworTTY3Jig9VUk7OkchPjJURSk4NERAI0ZGJEBHKSktVk4qOiNMTTI2IUA5R0lKMyVNUD5GWiE8VERbL1Q1SQorTTJTISsvUkxNNiZFV0AkVSs4NExUKCJNJDJTRFYuNiFOOkYtUjo0XT44NEU6PCY5Wj82QFwtJUIjPlYtQworTTdFJVI5U0UxPEc9OzQ0VFkpU1orLjRRSDYmKUgzJVojPkdIIUBAJVIgL1lCOCRERTZGSUo2RUFLPEYpOQorTTomKSk2WClSOkZBJCZRTTo+RVxSJlNFQi9CVTg4JklNPkc1Rj03KSkxNkVQNlM5JDxGVVc1Qz1LOFYtUgorTTpERF4vUzk5NUQ1RjxHSVo2IyFBNjRFKTo3KU0+Ri1JOjRAXzlGTFYtRUBWOCYhKSs0NVI+SClHMjYtSgorTThTWSQ7VFRNMjVYTSs0NU49Nlk5O0dCKjxVQEsoIiNeNUc9QjomKTs2NUEtNlY9SzhEUUZASClVPEcpRgorTTlGKT82Ji01JiBZLUBISVU3QlUpQEZcWSxDOSk3Vz1SOCRRSjxWWUY6NylBLUNQTTYlQEUsQlRWN0Y4VgorTTZHSVA8Rkk5L0NdPjo2RT4tQ11DOEQwWT03PSk2JUkpNiVJRkBHVU42UzkvQkdNMTsmTTE2Vik+MjVNUgorTTpVQF8zJE05N0U4Xy42TiI2U11CQEYtOyA2TCE8QCNePEcpSDZGQUo4VjlSPEc1RjYlQS0uNi4nOUVRMAorTTojKEAuNikxNyI0Ui9CNDUxJklCNDdJWjhGUUozJEVQPCZJJCxGKU49VVxeMzNdQjxHSUI2JUElOjYtKQorTTZWWVpAJihFMyVJJTI3IVI0NklCOkdBJSo2KiA6I1hfMjRVKS9FMUg8RlVSNUNRQjxHKUIzNUkkJlJVOAorTTEjOFA2RyVCMyYhTkI3TUkyMzhNX0NdSDhWLUgzNTk6LURBSzxGJTk3RlldPTZaJT5WOUI2VU05LyFALgorTS1HSV06RkU4M1gpUjEzOEUuNTlKOlVdNjpGTUM7VUE5OiRFJC1FQUAuUkRSLlRFPyszOUg7VU1OOlYhOQorTThWTVI6NUUpOCRcOyZWKVIyJERXKzNFJTZGVVA6VSBfMTdVWzImLVI6ViE8OiZFSDxHIS04IzhZOzcpSAorTShCNUNCRzU5L0gpJC9AJFAgNiwgVlcpWjpGKUs8Ri1CO0cpUjpWISkrMTRZPkYpSDhGKSkuU10tM1ZFKQorTS9DUEkoIzlPOiQ1UkBIKVU6JEUpOlZJSjozOSQ8SDlSOlZAUDI1WUo6Vi04MlVNQjomXUY6V0lSMlYhJQorTSszWVdANllCNDVJVzhTMUE+SCFKMzRUIzI4TTg+R0lSOFM4STYmSVI4UC04UzQwTSszOFYxJi1DOkVJOgorTThXNVI6JiE4MjVZOjgmKUsyMyBeLlJVJDpGRTg2NilaOlVRXT5GLUA2JERfKzIgNShGTVo7Vk0pKjcqIAorTTpFXF8vRFU6NkVBQDhWLUk8RTksPCZFODg2UUAgU18iMjRVOC8kRTk2JUVIPEZZVzpGKUo6VyFBMzJUPQorTSZUVVIxM0xLKlM9ODhGLUM2U1xfMzZZXDYkNU82REVDOiYpRztHJTk3IUw7MjYlKCNBKSVAR1VSL0JURQorTSAyNCE1QCNeOlZNKS1GTig7VFU4NlVBKzY2RT4tQjU2PkVYVi9TUFsuUzhWO0c9QzdGWTUtRFVAOkcpPAorTTMlQVM2IlRXNjVNSjghTE06RllCOkUhKS9UXUs6ViBfL1YhJTxHKUY7RjlLPCQ0Oyk0MVtBRz1ANkZNSAorTTlGTVA3U1xJKzQ1QjpFXSkuNEU6PFcpSDglQSkyNFVDPlZNOjM2SUs0JkU6OFYpOjY1QTo4Vi04X0YpMAorTTgoKUsxJSE4OFNMQC1DKFk4RyFLNjVJRjg1NSsyM1xWL1QwSyYhTT88M10pMiVBMD5GTUM5Ri04OiYtQQorTTglQF8rNUlSOlchSjo1RF84JU06NkVNQz5GRUEzNFE7OUZJUjtGUSU0Nl1IMjNNJDhWLVM6NTRNMDRFKQorTTEmRUw6M1xWMzYtUDIyPS0vUyE6OlZJSzhUVTo6NiRWMTZNOCs2IV0+R0lQMlgoVi8gJEsgM1wgX0cpTAorTTYzWUc/N0lMNkRFJS1DXUs6Mzg4KEYpTi5VRUA4NiU1KTNZSDE0MUM7Vj0rMzZJWjhUVTo+RkRFKzU5QQorTTo1QEApNk4jQkc9OCoyVTk9VylAMjRFSCk2PVI8RyFAOldBRi5TTTk5WCldPFYtOjgjRSQ6VkRNI0FAVgorTTlHKUMzMlUlNjRFQjs3SUkyM10pOFc1WjhGKUo6RFFJOEVJLzZGJSkzNUlDOy9ZQjIzXUo8RjlPPicpOQorTSxCVFwtQyFSPzZNSjlGLUI2U1xbL1RdQzEgWC4tRi0pL1RNODM2OUs6VylLOFYtUjo2LTgsQUBNM1YtUgorTTpWLS8yNk1OOFVZQzlGWU46VUBWKzRRQjpGIUkvU1lIOjVAVi9YIiI+V01JLUNFSTIyPSU6VkUpL1ReIworTT1WJTk6NURfMzYtRzpUNEczNlFbOFY5SjZVRUw+R1YiPCQyIi8lRCEyMCVBIC9ZWDgkXU48RzVWPzcpQAorTTYkMFY8V0EpKjJNKTMzIUk6RjlbPSNRJC9SVF85VllTOlVJUkBWTFkuNjldL1QxPjpWTUEsIkU/QEhWIAorTTUxQEA2NylDOjVFOzoyITg6NylXOFYtSzo0RS86Nk1VPUdRUDdVNSsvRUlIL1NFJDI1SUM5RihJKzM4OworTS9GTV08VUxfL1YpXT5FSSw8RllDPEdJSTE0NVA4M0UpMzdLS0AmLFk2Rjk+OzdVWjpEPF81Mig7Nkc5UgorTTxHLVs+RUxeMlVNQDpFREcjQiEpMjNdOzo2JTo5RllVPEZNQjlHKVM7RERLJiI1KzsmLTkyVUVcPkYtLworTTZWKUo7R0lPL1I0XjYmKS8xNDRfODZFJS1EMVpBVl1aPUVEXj1XIFQvVkU7MTVEWT03KTg2Rk1DOjUgIworTTgpKFsmIlUoPzghUz1HSUc4VUlSPkYsXy42ICE2QCVJIC9ZVzg2KVI9RllSPTcpWj1URDs7Vz1AL0YhQQorTS1CNTY4VU1aP1clQy9RTEUyNk1SOUVNUkFHIFYtRU1SOlVNSjxHKUgxJDFLQFhaIzgyTSU3VilCOjYtSworTTpTPSU2VU1aPEYtQjI0NTo6VilCOUdNWDpVWUk2JiFTOlctSzgkXUw8Vik5MSIgLi1HLVY8RihZL0ZBXgorTUBERFA4V0lTOFYpVC5SNUg9VFUvMjZHXkEnLF8xNi0+NlZVWjZVTSkzIz0kOFZZTj03NV1CRl0lMjYtSworTThVSU4vIUxSKzNROTZWQUA6Ny1GPkgpSzcmPVI+VkRZJiEoXDsmQTg2ViVbQEYsVjUmJS04R01bOCMpKQorTTY1RSQvJDRfMjU4SSUyXVo/JU1GPCYtOD5HTUE2Nk0vMTZNOTNUUFkvRiE6N1U1LTE0RUMqUUBFM1dVTQorTTs4KU44JiE5OUVEXEBCVTYgM1whNkAjXjhGOVI9NzlDOjYtOjcnSTQkRUVdNlQ1Ozw1RSk6VkEoPEdVXQorTUI1REslMkUlOlZJQj04LU8xJUk6NCchQDZHIVI6I1xZOkg6JjxENFc6NkUvMicpTzxHSSk2VU0sOUc1TworTTYkNF42JyE/MzYpWkBHOUc4Vi1LOkY5UjxGLSk0Ji0kPlcgQiNCVUs8RllKL0JVLD5IKS0rNDFaPVVZOgorTTlTOEAxNi0nNjVBS19HKVY6NDUsOUZNOjgzKSw2JExfNkZRSjtHNVY9OClaOFVFOzhWLTg+RlxNKjFARQorTS9TRS0zNyFSNkZNVT02TUY6WCFSKzBYLis1SToxNk1LPTdJOi9FRUEyVFVdPzVJSTxHIUkvIzk5OjZBJAorTSYgWDIzNy0lMjVFJTgnOU48Vk1INlVFUkBXIFktQyE4NlVERSszUF44VVkhKlJFQjpGKUg9Njk/LjRVUAorTTYoKE0vUCRSIDMgIF9GJUs/JllSOiZRUDo2TVc3QUBZP1cgXzI3JUkzJklNMTZJWzwpKVo1IUxLKzNFOAorTTw3SiM4RDUvMTNdOjokRS04VkU5LjYiI0JGLFYpVUVLOCRVQjcmVVw6JkVINiNdUjpETTkvUyFPOVRFOAorTT5HSV0+RFEoOlZdQjcmSVM4UzhQKVdNVS8hQE07J0lVOURUWy42PVoxIzkpOEZNQzpWXTw1NDU4MzVNRworTT5PWU46VyE6MjRRVzsmJSs2Ji0+KjNFPjpWLU49NyldQEZdQS9FSTs4JyojNjNMRSoyRE0vREVKOlYtQworTTlHKUs8VylaPFJELiUxQFYuUlU7NCUhSzM0NUM6NiU5Pzc1JTpGWVI6IzhSNidKKTUxQDUmVFVTMjMgVgorTSk1OVs8Ri1DPCZNSzs3ViQ2MzhfNjVIXygiNFQxNU0wO1Y4VC42QUs3RllRNlJUWTxXJiIxIlQhLUAkXgorTSAsUUA7SClWO0ZRRj5IIVZAJiw4JlVBSS1DITpAJl06OiRVOj1VJiZCR0BcKzJUOyk2LiJCJUknNlYlJQorTTgmTSksJDVJODNdOz5HWVc3QlUpOEZBQTZUUT88RilPOiVEXzpWIFAyMlQyIFRHQjY2RUs9RylDNlVZSworTTokVTA8RyBZLVM5UjtGRE0pNUFaQFctQTNTRTo+RFBeNTRROjsnKUY2NiRZODVJKDpXSU48Rk0tL1NFQQorTThXIUo7VkksLEI0WTtWTU48RlldQkcpQC1ENS8zNylVN0VFKTEyTEsvVE1ANkcpUTNVSVJAV01RPCNQIworTSgsSE8tUlU4LCIpJDI0VTo4VyVSPzc5OzpWSUo4IlRFLjc2KjwjUFQsRFVXOjMwOCYjWVI7RiFCO1ZJUgorTTpGViY9JE04OjYkVi0jMEsrNERZMyctNS1EUUI8Ny1MODQxKz1YKU4vICQ7IDM4IF9DPVI+Ry1DMzRdXQorTUFHOV08I1BJLjVdMCkyXVpAJi1DNlYpSDYnSVo9RkE+LUFAOC9XSiI2Q10wPSVNVz5WIE0sJiU7LUQ1SworTTtHSVgvU10pOjVJLTIzRUIxJi1JM1VZQzYjIFYrMjRJKTI0XjhWUUgzVzVaOlUlQjolQUk4Q1lBO1ZZRgorTTpEREUvVk4qQEYtQjMlWVo6RUEpMjVZSjtHKT4xMik+OCRRSjxPWUY7Nz07MjQwVi42UUA6VkktNTIgOworTTMmKUI8VllcQVcpNi9TXSkxNilVNlZFQzYzUFw2NVkpLjcpVzYzXUtASDlVNyU5OC9STFI1NTktKjEoSQorTS1FRTkxNUlOPzdNSzxHKUM2QiAuJlRBWj1WRUE4NFVSOyU0QCgjXUI6VkFDOEY5VzxXKVVAJU06Plc8XgorTS9FRSUtQ1hfMjZZWDg0RTA+R0lGNlRdSTxXViI+ViQhJiAkNSAsTE06RllLMjI8UD1YSV0/N01JN0M5JQorTTYiVEc6Rk1APCY9MDElRVg4VThZNjZYVCgjXUs8Q0RWLjZBSEBISU0qMzlGNkNcRTNVTVI+JERWLUYlKQorTS4zTD0tRUElNiYxQzwlSUAzNDAkLU9YRS42LSwvRlVVPkRVJTZUXUEzM0VAPEdJSjpGJF8uNEVVQEY5OQorTThXTiM8RFRPLlYlVD5ILVs2IlRfNiRVUjtFSTk8RkkoMjJUUjg2KUIzVFVQKTBYQiszMUo+RzVdPkVJOworTTg1QFY4Nk1AOlYtJTIzOSU4M1w7MyZJSC1EUVI+JzU7NCZNRi8iVS89NFxNJiFAVzlFNSUxJSFVPUZNUgorTTxGKUAsQiBLM1ZeUTpXKVI7NU08OlRVJC8kRTo2NilINlVRSzlWXUs8RFUlPEglODYmUVA2REVBOjZJXQorTTwzWS08RylGOjQ1OzxGRVo6QCRLIDFUIFZENTs6Rk0kJiJFS0BHNV0+VjlILUNZSTI0RUkzNDFVQiZEXgorTTFWTU4tIUxeP1Y4XzM2SUgvUzhNL0RBWkFXKF8yVkVCMTIgTTE2LiQ8JTRWMTNdNTdCVFYsJTlOPERVQworTTtUMTY2VF0lMyZNQjMnKVszNTlLM1VAUiswLVJfRiUtMzVAXi9WQUM4RlVLPEc9QjYnTio7RERFJlMhQgorTT84Oio6ViU4MTQxTj5GPF82R0k5LjJUXzUlTUI2I0VaMTJMNSUxTSQ7NVE7PkYpPj1WIFY4RiFDOlYpKQorTTUjXFs2NURAKERFSTIzOTs8Ryk6MzZNUDIzOSVAJEQ9KCJFKzs0XTUyNFFCPEdJTjxFWTE4JVlAOkchQgorTTlHKVo4ViVDLjU1QDJVQF4xKi02NkVFQzMmKVI6U0RNOEctLzhHTiM6JDVGQEcpTjxDWSw4VV0kOCJUUAorTTZWLVc9QCRNIDMwIF9GOUM4Vk0rKCJVSz5HOVA9VlE4KjJdTzwlSUktQilCQkdJTjtVTTgpMk1IQTc9QQorTTgnIUo5VTRLLUNdSjxFUSUzNl1KNlMoOyYjRVxBJzxfLCM9LzgzOEkrNDE6OUNFQzlWKUo6VixWLUVRQgorTTI2TVI6VUlCMzVAXzI3SVpAVyEtODVNJS9WITguNilGPkdJSDI3Kio9NUkkKTFMWTknNiY+RUlBODQ1QgorTUFPWVozNDFKOjU0VjJVMS04JkRbPEdBRi5SIFkyNU0kKVYpQjQ3LU8tRilQOjYpOjo2RS8yVi1MLUIhOAorTTpGRSkzVilUMzQ1PjtEXF82SCk2JTE0TTglOFAyNiU7OCVRRjsnTS0uNSFGOUZRUjpFUTo6Rk1JOCM5LQorTT02LS0vU0UlL0RFQC9UVU46JERbLlRAUDQnViM8VDU6PTcpVj5WJF82ViBfMyJURTE2LiI6RkghLVAkXworTSAvWUs6VyVALUI0TTNWTVs4VEFKNjFANTMoKVM2MjQ7NUc1VjxIKV81MShFOlc1UzZUVUw8Rk1CODNZTworTTtVWS82NTU7PiYkUiYhNFs4R0IqOjNdLzsmRSUtI1E2OCYtSTZGKUc6RylLM1VBPDhFTUs2RUE4NlRVOAorTS1FQU49OEFCLSYtUDYkRS8vQjRQMSdKIDpURTpARzU1MjNZODYlJUY7Vj0lMzc9NipXV14/JylPNkQ1QQorTTg0VTozJy1SMjRRSzxWLSQ2Ri0tNiVdOjhGUUo6Qj06O0dJKS42TVM4VVlTPSQ0OzMoKVIzJDU6OkRFKworTTwmWUA2NUldOCEoLiYjXFsoIjUsOiYtQDglWVo6VFxbMTYtUj5HNUM3VUlDNlRMXy43NVs6VUkrNkVFKworTTM0XSw6Ni1JOUJUQCgkNUo9R01TOFVJKD5HVVczNi1SPFZFKTI1RT5ARllbIDVIITggI146Ni1XPCNYRQorTS1FQS08RyUsOEQ0PSYjOVI6RERJLUVJPDZVJVVDNlg4JiNFQjo2KUM6VklDMzZEVjcmSS04VjhZLUVZSQorTSxBNEU2JSFaPzcpQzsnSUo8QlReOjZdQj5GLS04Vk1LOFVZQjpHKUk4U0RfNlZBQjhDOFkxNjojOCMhQgorTTxGTUw6JERSIjFNSkI3KSkuNzVKL1MhQThFRUA+VylDM1RdSjIxTTxfRzVUPlYpQTomLF82NEFOPVVARworTTM2OUA2Ji07LCMhQzpHKVo9VThSMTYpVzIyVS06VllDOyZMXCNDOVU6Q0UlNiVcUC43KUM2NlFKPFYsVAorTSUyNSkyNTRUMjYpQTElQUw7NllaOERFLTpIOiI7JU07OFRUUCsyKUJARylGNiVJQzo1TUE2NiFBOyYoTQorTSgiISkzNU1GPlcxODMnOiJAJi1SQidJQjYmRUk0OCkvOEAlOiA2SCBfRUk7PldJTzNWJUExNi1XN0ZAVgorTSgiIF88Nk02LSRFSTNTOEc2N1VYMTIgOy1EXTo8Ryk+NkRdTzYlOUg2JVlTNjVZOjtTXDgtRkE6O1UhPAorTT1WWVc6VzReLURVTzMmWUIxNDFCPEZJQjdVIVo+RiBeL1c9TzpWTTgrMUxfPicgWThHNUQ8RyksLEBEOAorTTY4KVc2U0VDOENYVjZHITozN0lSMzQ1Sz5HISkxLkk8PTdBLDM1IVA3VUk7Olc1Oi1ENUA2JUlKOFM4VgorTTNWTVU/Nz0pLUNdOzxFRSkyNUlKOUZJLSZTISk8VkBZNiYtQzUzXUMxMyE6PEgtUzwzUFY2I00rODYpQgorTTYiNEIzJk1aQEcpSS40QV0/Nl0vNiZNOixCVFY4V1VaOiQwWThHJUw4VjlMOkcpQisyVFQhI14yO0dJOworTThYKVY9Ri1OQTc8Xy9UVU48NERPIDQ0ITpAI14sI1lSOzZVSj5GTFk2Rz1DMzNcSSozWUM2RTBNLjY5QQorTTEiRFk6RjlULSIgRSszOUs+VU0kOlcpUjMmKVA4Nk1RPCYpUjlSVF89VylDLUMxSzxWUVI8RiE4NlZFKQorTTpWOS0xNFFLOkYpSDE2OVozIlRNO1YpQjdGIEAmIjUtOFVBTjpEXUZARUxWJiIhQD5HPSQvVUkvLCRVSQorTTsmQTo6JFBHJzVKIjxWTSlfRUVSO0VAVi1GLUo4VkFSQEcgXzdFSSQzNk1PL0JVLz1XKU4+VUBNLUVNUgorTTQlRUM4VilDODQwOCs1TVo9VUU6NlYtUThWLF8oIj0wPzgtXDhVOTouM11TOlVJOSwgWDs3J0ldQCYsXworTS40QUI+RUk5OCYlKSszRTE6RylMKVFNJD5IJUo6VlFKPTZAXzElOTgsIlRFMTYpOzlXTVM5RVlSPzcpKQorTTYlTTw9OClXNiAkWSA2ICBfQjRNMTQ1MDs4IU8uNFVSOyVNOS9SVFYxI1xfKzNZSz1VQF8yNyFCOlVYUgorTSgiTFY6SClJMjZNWj01RUA8VlFDOlZFLTQmQS82Ny4gOlQwTTM3KUs6RylPPEdJWzhGSUo3VUBZNkYlQgorTTtUQSg9MzguJlNFSjYlTTsxJllGKTI1QkJHKF86SDVaPCM4TTY3SVs4JDU7OCM4VjEmKVc8RVhNJTFAWQorTTpVSUM2XlFSO0ZNQjUzXS06VklCPEdJWjI2LUMxJF1CMzI0RTI3LVI6V01QLlIhKTo0MTg4VjFLOEYlSQorTS8iRS08V01QOlYlQjpXLVM2M1BJKzZOIj5WQTE4RExZOFYlJTNTPC4jQzlQQkg5SjZVWFA1N0lLOiYtUAorTTgzTFAyNDEwNkFMLic2KiM+Rkk8Okc1PDI2JUk6NDAjL1kkWS43IVI+RU0oPFdVRjQnKVs4RVFLO1AlLQorTSA1QCBfRDRWLyMxKThGOVI2JlFOOlYlQDg0TUEyNEU0KCFVJT4mKSksJylfOlZFNSpSVSk4V0laPidNWworTTwkRS08Vk1JNDRVOSwjITg7VzlbPEZBNS1UXUExJilEPkg2IzxGOVE6Ri0vNiJdJTtWKUI6VTBQKCIhQgorTTdVWFYuN01CJlE0Vz02XSc6JkFVPzRETTM1UVZAM0U7OlYtNSszPVJAVixfMSQxOTZWIUM6T1lVOkYpOworTThGTTE5Rkk6N0cpXTxHLUMzNlFBJzFAOC1HJTw0J0lWNCRFTz1VQS04Nkk8NjcpUzhSVSQ5RllKPlghUgorTThWOVs8RUEkMTVBTj5VTS86Jik6OFVJODNTMEApUlxZPUhFUDwmRF8zJk07OlZNW0A2RF8yNEUrL0FALgorTSZTXU48RykvOFc5QDI2IUs4RiVBOFZEUic0NUY9VFUtPEcpJDA3NipAJU4iL1VIIThAJVAgL1k5LUQ0XworTTZGXSw2NilaO0UhSjw1TUI+RilDOSMwPS1HPU8zMzlPQCZZQzo0RSQvVSFDPEc2IjxFQSkzNk1bOlVAXworTTUzIEU2JllWPEZJSzZFQUExMj04NCZaIEFHVU5AJ01OOlZAWy1FWTk6Rz1DODQwMjpVWSkmUlVDLUBELgorTSc2SVo4VyEkNjhBKy8lTTo8KCk5MyZaIj1VQFIzJ0VSPCZFKS9DRUE8JjtePCQ9Qjw1TTw4Vl07MSNdPgorTT04OVo6U11GNiBYNSpTXUo2RDFLOlVRKD5IKVI4Jl1QLjMpSzxGSSQsJUFCNkc6Iz5WLTo+R0lLODVBOAorTTdGKFkxJi1KOkYlNjpWRF4qNDE4LURRSzhWTU86NklBODZRMTxIKVo6JFVCOjVAVC0jKSk6JUk6NlUlTgorTTwmJTo2JDEtNlZOITlDKEk4VyhZMTdJSC1GJiNAKSlXQEMgUCAzXCE6UCNeL1M5NTgmRVI5Q10kPVZNJAorTTcmRE0sJz1cNlVAVipUTiM9VUBZPFdJPjZFSUg8NEUlOjcpTj83LSU2M0UoPzctUDgzWEAmVEVaQFcpOworTTdUNTs+JiBZNiYpOz03QV05RzldPzc1UjlTWSktJi1SOEYlJCU2XUAyUUxfOiQwRycxTUJCR1VbODVCIgorTS9TOUE8J0ojMjI8Uj5ISU44NDU8PEc1VzZDTEUxJyk6X0YsTzMoIVM4VilLNkQwUiwmOVw7RklCOFVESworTSo0RVA6VkU5OCRFSzZXOVU+Rk1aPlREWThVTSktQlUpNiRVUz83VVI6RklCNyZFPj8mUTkuNDUtNjcpNgorTS42KTAyMlU5OlY5LTMkNUM4VVhWOiZNNjE1OSkrVDVLOkZNOzY1NSkzVk1QLjNcXzImTUw2VURfKzIoUAorTTxHTUEtQ0UpKjMhUjIyKUJCJllUQFgpQy5QJEUgNiAgX0NcXDdWLVM8VkUpOCdRUzpGKUApMUEsQiYlJQorTSghTFk+SD1ALCZJUjg1SSU2WCUvLjZNUjxYPiM4RVxXMjchRjwmJEkjQFhNOEdJWjhWISU4WClLM1YtUgorTTlFLTxARVFCOUdJVT8nSTkwQlU7PEVJSDgjOVc2VFBeOCgiIDpSNCktR0ldPUcpQkBVRFAuNklaOlM4OworTSk1WVo6RihWMjdNWjxEVSsxNiFKMT9ZOC4zRVo/NylCMzNFKTUyVS09NklDNlVFLSsyVSU2Vi1POFRETQorTThWTVY+R0lKO0dNOjY3KUMtQkRQLEQwXzhXKV1ARzlTOlVBQDQ3KVI2IzkkNTQ1UjokNS0vQ0RNMzcpUworTThUNSQ2VFRQLUVRUDslSF8uMzklPEZdTjZVTTkyNUEwPTNYRS1DOUM6VUk4OUJELiRDRVI9RyUpLyIgTQorTTozODIuNklaPzg6IjxFQCEsQCVAIC9ZODE2RTs6WCUvLjYqIz1HTUk2IzhcNlgtUC1BQDgtR04tOyNdQQorTTolSSw3Vi1LNiNdSzpGOipDVylJL1YhQTInJUEqMTQ4KzRVSjpWTUguNFVbPCVBLTpGOUAzNzVLOEVRRgorTTZYKiI8JUkpO1ZdLDM2QT44RUxeODZRTj8nPFwoIlU6PkdJRjhHPVEzNTFMPFZATSYiISk2Ni0pJlJVSQorTT1GTS02Ji1SOkRXXjszRD00JlVSPCREQCs1QE0tRklOPFVNQDgjRT44NUktNyZBPis1QVI7RlYiOSY5WgorTTgjRUY8Q1hNLEJUTS5TRTE+WDlSPEdJQjhWRUI4VERJNjclLzlXKUw6VERfL1NFQjxGTS01RiBZKCNZJAorTThVWUIxMjRfMTY5VT5GKTs2MzkpNlZNQS1UTUE8Vz1LNyZEWyYhNEU2WC4xOyU4OCs2JTkqU1lDQkhWKgorTUBHTUwgNFQhOEAjXjo1TUwzNjojMlM5SkBWWV08VUEpNkc9WzwkREsqM11aPzZNOzg0VUAxNilKOkREVAorTThWQS8+SFVWOiNFLDEjIUk4VDBAKCNdSTxUVSg8VjklOFc9KSwkUTs8R0lWPTZZSzZEVVI8Rl1COScpRworTS41QTo4RFUpKENdTzxGOVczUzkrMzZWIzxGOU09VFRZOjcpSC8iRDgsQ10tL1FMRTY2LTs4NFVLPEZJLQorTV9GOTgtJTkxOVctSTU0TS0rMjVCO0dJTDhFSFk6Vi0/MjQxQDgyNFk4RylVQEVZMDtGLE0xNikpMlM4VAorTSgiRDspVildPEYpVTxWTVI6VDRWKTZCIjQkVUJAVylBODYtPDZHKVI2Ri1SN0NdPzYmTUM2U1xAKzNdOworTUFIOVIzJi0pMTZdUjhTXS86VilLO0ZNSzgzUDgmVDVaREgpQSkyVUg8JUUpOEguJUFIKV1AMCVBIDVMIAorTV9FTTs8Jy1aPVRFOT5IKU4/JzlAN0VFSjxGWTA2I1ElOFZNLTZFSFk2JiVCOUchKyc0VUguNjoxQEYgTQorTSs1NSk4Nk1GLUIgVjhXPFYpNUlPNlVNUDYjIF41RklaPkcpRjpGKS04RilANkYpSjIxTSk4NFFSPEQwRQorTThHTVI8RFRWL1JUTzpHKTw4JylMOCZBOjhWOUYxIlUpODVcXCs0RSkxNUEoOlY5PjhfVUI2RUVLOCYtRgorTTxXKVQ6IzhAM1ZRWz02TS0uNklEM1M4TS42JF8tIyE5PzgpTjpXIUMyVEU7MzYlKzEiVEkoIiEtOCZNSAorTTpGUVM+RkxNJTI1Qz5GSSkxNy1SOFYtSjpFRUg5Rk1LPEZJQDhFSUs8VlEpLlJUPS44OiJARU07LjJVRworTTslRF8zVUxZLjRVQjpWTT4mIShNNyZZWjsjXSk6RllJOCRVRj5ALV0gNyghODAiTzNUUU8+R11AKzNNPgorTUBHVU46Vik7N0VJSjslTUA2RF04NkRFLDgjWF42VylMOUU0NSs1UFk2SC4qPCI0OzJXICM9X1lDLyM9QworTT5FRFQvRFU7OjZdQTIzOTY2Rk1LMSJUWTZIKipARkE4MjNcTS1HIVAuNkIqOiE0XjpFUU82I1k1KCIhJAorTTYjRTg8R0lbPEYpTDo2SUktQ0UtM1NcWy4zIFYvRDFMOlVRVz1GSTs0JEFIOEYtTD82WSsoIlVAPkdJSgorTTM0XVI8RkBcKCJFODZVRFIuNyoiPkcpUDlGIS03VUlLOjRETSxDRF86NisrOEcpSTZHKVU6IlRFMTYtRgorTT5WJSkzNi0tNichTTZVSSQ6R01QM1RVQjpVTUI8RiE1NjMwTT82OUo8RyBbJlNZSjpVQUI2UyhSLUNFQgorTTo0NEAmIjUpNicpSjE0VUM4RU04L1UlUyBXVCE+QCVKICkhOzEmJVQ7I1hFKjMhVUBGIUM6NDVGISZOOgorTTw3KUs3I0RfNiZYXiszXTo6VEE1LSMwXy1ENUY8JzxFJlRMIzxPWUk4NThZOFguITwlXF4zNzVaOkVMSQorTTI1STg5QkRANjZJXUE5KVoyMzhAJiI1Uj1VQTtCRzxJL1YlLDpWVTg4M1BcNiVAViwlUVpCR0laPEYtSworTTpGLUM2VURWL0REWy1CVF44Rk05QCg6Iz0lQF42JUk6PEgpTjhUMDsyOCIiOyQ1OztGWUgxMkRJMjVZUgorTTJTXVA9RylOOyZNOjIkUSQ4Rk1AL1M5KTZGTiQ4VSFCOyAtQlImLTQvRkFCN0dJVzYjXFsrNFVXOUctSworTTNWPVZAJiEvOUcpSzZHKVIzNiFBN1gpOCxFSUIyMiBNOlgpUDlGPF4rMzg9MjU0RS40MF82NF1QOEM4UAorTTZFRE0tRUFAMzVZVT8wJiMgNzQgTCdNQzI2JSsmUUBJL1dBTTZGOU0rNEVTPFZRSTpWWUw2QzhWMjchOAorTS9TOSU2RDU4OUZFJC1ENUI4VThAJlNdUzdALTtfRiBWLUY6JD5XPUE2VzVbOFVITTM2KTYyMSg4MzcpRgorTT05Kio5UkQuI0E1MEBHKUI9OCFBOFVMTzNWSUs4U0U4OyYgXCZTIVNAVllWPkZJSzpWLUo6Vi04L1VBOAorTTUzXTU6JFRPPEg2Jj5GJTkxM0UkOydJVThERDIrNjoiOkNdQjxGWUAuUyhUL1RBPDMzIUM5Rkk6NCZdJQorTS1ERSs4NF06NiNdOzgmIUE1TFU5OkVNKTM1QUI4VkE6ODVJTT1UREAlM0VPLjYpUjlGRUY8Ri1JOyZNSworTTpHKVMzM10lPChJSy1TOEkoITRAMzcqIjxGSUYzVTBbMSRMVy9UTUE4VUVCODNcRzEiVC4oJDU4KzMhOworTTpQJV0gOCggU1kpWzg2IF8mITQ1KzclOjMmOVcyM1lJPkcpTzxFUUMzM0xNLUYtSTtGJUM2Q1xZNkZJOQorTS9WViBBUkQ4KTNdMS4yPFY4VyEpKCMhUjhGOU84VllaPlc8XjhGXTYqMTRAMScpOTZHSV09UzAjI09YVgorTTxHJVI+Rk1CPFYsXi41SiA6IlUsPVYpJCYhNSU8Vyk5NlVFSzpVJSQ6VSEpL0NZNThVSTA7RUxNOkhBXAorTTdFTUo2IUxCN1YhSjhFQEsoJDFZO0VNPj5GTUkyMyhbLlQxOjZFQT42Rkk6LCVAViozOSU7VV0kMlRFLQorTTM0RSwzNF1RMlJUVjg0VUs4Vi1QL1UlUCswWC4rNiBWLjRRQjo2RS0xNk1IMTZWTjs2SVo6U0U6PVYtLQorTS9SREkvRi06NSJUWTxGUVI9OC1YM1RFODIzRTs6NUFBODRFKTdCTC4mUlU4MDI0TSwgJUsgOEggX0hWIgorTTxGPTkqUUAuKCVNUDolQUs4M10tPDdJWkBHTTs2RDBSLUVBSjtXIVI8JiUkOFcpODNXKipEIzhUMjclQQorTS1BQDs4JlEkKCMpSTgjXTozNDExO0gsWThHKUMsQiBZMzdJRjg2RU48VjhQI0BYTTpWVVVARyk5OkZJOAorTS1GJV06VDEkQCZdKScxNEUzJ0lLNkRVQjpUVFk7VFBQKVMpKTpWQSg6RkxWMz9aIz00VSk2VkxWLUVdQgorTTZUQUM7MzhWOjY5SztHSUI3JlkrL0M5JThWOVM7VSIgPkYtTjlCRFYxNyk4MjVNUTokRF4yM1hHN1QwTQorTSs0RSU4RlFDNkVBUDw0MEAnMzE+OCVNOzhFSUktQlU2OCM5JTQmViA7U0UtPEZROzYzXE0tRDBfL1JUXgorTThFWU49OSIiO0chSTYjRS82JEU7OCNFKT1VQEsqVE1JOjNSIiYgWCEvUCYiIC9ZXT03JUg5Q1xLJiJFKQorTTlGXTkuNDU4L0VJRjxHOio8JiE+L1M5KThGSVI8V0lXNiZJSzZGQUM9OC0vNjVdWz0kMEkrNU1IL1IgUgorTTZHPTs2VVhWLCRBRjYlSUo7JFxWMSRFUzxWKTo7J0lKOUJMMis2KVo7N0VaOlZJTy9SKUA+RVE+LCcpSgorTTVDKSEvIj1COlYhLTgmXToxNkk6KzIgVjNXPVs6JiE6KVMjXjxHISQyNUFDNkVJUjxGTFc2V0xWKVU0WQorTTQlIUo6VU1LOERUVjE1STw8SCE6OUdVRztGQF8tRDVaNkM4VztIIVAyNUUkLEVBJC1VRSkxJUVaPVQ1JQorTThHKToxI0xfNiVNOjhXLTozI10kNiY4TS0kRUI5Rkk7OFZZSzg2IUEyViUpMjUwQCc1QS86RyImQSZNVgorTUEmUSk2NUBfMTRUXzI3SUgtQlUlPEghNUBAWC4gM1whPTAjXj5WWUw6JyVGMSJESzYmLUM8IjQ9MSRFKQorTThGQTA7RlFKODREXzY1SUI+JllaQVchTDskXUg7Jz1eNlYkWTZXPUkyViVQPVVESS1ENVI8Ri1JN0U1KQorTTgnIU82RFUtNkZJOjpGSSUtRF1aPkZJNSkzKFk6R11COEdJRjtUMEkvVklCNUNdSz5GJE0xJTheNkZFQworTTM1QVo4JFVDMzJUSS9UQVFARz1GODM5NV9HKU4vVDFANlVBMDhGOVI6Ji4jN0JVKTJVTF8uNyVSOlVJOQorTTYkVS0uNFYiO0VJRjtFWUM2JDBHO0YgVixFQVc6VilCNlYhSDMjWUk4M1hUOEZJOjNUUUozNDUpL1RVJQorTTM2IVM8RFE2L0RFOzVDXTo7VUU6OEcpSzQmSVE2VilaOEYtRC0hVFkpVEU+PkgtLTRYSiI4Ri1AMjNMXworTTI2RiM7JERFLCZNWy8oKC4jQCU2IDc0IF9HSUs2JDVCPiVIWy9VQUM4Nk0+NTRNQDgkQU82I10tPCYkXAorTSo2RUY3RUlGQFdVTjhXPUo4RUVLQEYtRixDOTY6NkYhPEcpSTI1QSs4SCFMOFYpSThXJUs7Ry0pKVU5WgorTTpFOTsxIjRWPEdVOjUiVFY2JkogOEVNTjNVTUI3REVLPEVFLzxHSUs3QjxQLURdSDhURSk+RylSOkM4OworTSZTOFY4SElaN0ZFQThfWV89VF1ANkYlODM1ST46RylEQTc1OjZWRU8xIikkPDctOjE1RS04MzkkPkgpQgorTTQkVUA2VFVON0VJLS1CVTs/Vik7NjQ1JTZFRFAyVlE+LUNFJDg2QS0zNUErNiRFOC1DISk6R0lSOkRMXworTTYlQUA6NylBMzVJUjpUMTw6MlRQPVdROzYjOEs1MiBANUdJWjE0VV0+RylSOzZETTU0NUtAVk0pJlNZWAorTT5ERiImIUAhMSAlSiAvWVs7JDA7LCctUDY0TFA2Vz1LOjclQDM2OSkzNkBfLUYlJCkyVTk2NUBfNlcpSworTTomJUo+RyBQLjctVzwkTE0uNUE7OVcpQzNVTUkvVilaPEVIXjMlWVIzNSIiOVI1NT1XISU2NUBcMjchWworTTtVWFIpM0VCQEchSjlGKTA3Rk0pNkc1QzhHSU44VzxWLyM5KTxGTS01RylaPzdJPipSIE0uVUlWQEY5SworTTtFW144REBQOFRVQzglTS82RilKPEZZWjtGKVM8VlEpMTY5WzZERSQxNkkvOjZJWjtGLFkyNkElN0dNWgorTTwzXDstR0lDOCVAWykzIUgyMyFSPkZFKyszWTg2I1kkNTM4UDxDWFItRiVCOyghODEjXSk4Vy1TOjRNQAorTT4nLUo4RURNKTRSKDg0NEAqNDBJJiNFUjxGOVI+Rk0tN0ctUCZSVFA4WClLMSFBKUBYSVFARUElIDREIQorTTdQI148RyBSJEFVOTpGLUExI0VCOEc9TzVERTo2I0UpOCYlPixBQE04JUBeL1VBQC1ENUc2RylQLyI1JworTUBXKVAyUzk4PCYtQTg0RTA5Q106OEU4WSoyRS82VFU7Pkc8VilWIUMsJE0/NjVJUz02SToxMlRFK1Y5XQorTTxGVUszVilCOCVJSzwnPVM3Jk1VMSVZJDE2TVIxJDFGPTc2JjhTXF8uVUVLPEdVUjtHVUlfRDBWLURdNQorTTE0VTo4VilCOiYhSzxGSSg8RllKOCRVOjtGSVA1Q0UpNlcpUj5HKUEuNEVPNjNdOj5IKU0oJEFTOUQ1QgorTTwkNFk2JUBbPlhJWjpVWTUxJExNKTJUMiZWKUAtQU0kMjNdVzhVRSkvVU1LQDVAXjhILVY+VkU4LUNRQQorTT1WRFwoIkU0LEI0TTNWSUZAOC1QLjNZUj5CTDgmVU1fNlQwSSlWKihAWCoiQCAlLyA0QCBERklLKzI8RQorTS1DISU4JEQ7JlFVVT02LUE4UC05X0ZBVzoiREAtJi1POCQxOC8hQEUyVUVQOlVARS1HLVM+VyBfNUcpXAorTTo0VTozNDRfOjYgXikxNEkyNUBeMSZJWjxEMSkuMzk4OiVJQzxHKVc7RURfKzJVQztGWUI4VU1INkYtUAorTTpGSVU6VF06OiNZST4lSU8+Q1hNOEZJMT00UFY2IzhfOCZZWj82WVg8RDUrOjZZQSwkNS8yNV1NPkZNSgorTTxGSUE6VylKOE5NQDYiXSQ9OD04KzRdVUBHVVo2Q1ktPEYoXy1GTVo6UjRFNkZdOzZWTTguNEUlNjdWLQorTT5GKVc8JilJMSJEMigjUTk7VTA7LUZFOzpWUUM2I0UtOUgtKy1GSiM7R1VTNjRFODwnLUsyMyhUODU0VworTS8kVTk2R0okPFM4QDQnNSQmIFhZOkVAVjEiREc0JyoyREAlTCA1JCBCRSFTNiVZPjUyRE02I0wjI09ZSgorTTxGWVpANiRfLjYpMDgjTEkrNDFKPVYtQDEiVFw1NkFXPEVYRS1WTVI/NylBOFVNRj5WKTsvUlRQPCc1NQorTSYgWDsxJERNJlNZTkBHXTQnM1EtOEVZUjpWOVo+RylMMlM5QjtHKSwxIzlJOCQxSDtIKVo0JUUpKzI9SQorTUImWVVAREQyNkcpPjMiPEUyM0xSMTRVRj5WVU48Q0RNOEc9OCoyVFYmU1lLPzdLUzE3LUs4RVFOPEZBQworTTVCRE0xV0lSKzRRTT83SVIzNDU7PkYtKy9WLVU4NCRUL0RVOzo2XUEyM0RHM1c2Kj1FUVY8Ri1TOjU0SworTSxFOUI7ViUkNidJUjo1TS0rMU1TPkc9KTY3KV07R1FWOCVZOTpGWUs2RUBcPEc9PjE2LUI2NllbPCRESQorTS42QSkpUFhWOjYkTTEjUDUmVDFdREAlWyA0XCBfRFVMPCVNQTo1USk4M1xAJzE1QzhGLVpARyE4MjZVLQorTS9SVFwxIlUoOlctUjYzXTg2JVlTPlYsVjU1WVpARk07PDVNJDxIQVo4M1xNPEglOCRAWDUvRiRLKCI1QgorTUE3VUgrMzksNjYtTD1WUU88NzVaOEVBSDlGLUAvUiElOiNFJTZIKiIxI1hcJiBFJD5HSV1AUzhFNldJUgorTTYiNEAxJUE2L0NNOj01UTk/X1krKjQ1UCs1RSQoIFhWPFc5Ui9WQVA4RUlLO0YtOTZFWT4zNklCKzY9VworTT5HNUIxJFVIOkRVJDg2XVI2RTlQN1NZLT03SUo2UzhSL1ZJXT82TU08RilbPEY4XC1ERTk6M1xWNkYpUgorTT5HISkqUiFaP1YgUC9VWVU9NllLOEVNPjZGSUw2ViE6LjZBTjI2KVo6VjlaPkZBKS9VRSkqMFhFNkZEVgorTS1DWDUmIjYiNjdUIUBAJTsgL1lDPkc9QTNWLU84VkUlKzMoOC9TWTA8SCFTOlZFUjpUMEUvVjhfLjYhUgorTT1HITk2RFUtOFcpSTg3JF83J0ogNDcpTi9UQVpBJyEtMTc2IjgxVC4mIlUpMlM4VjM2VTM5VkUpOCVRSworTTcmTVM8RylOO0VJMDpFSSk4NVhFLUZBQDE1QVtARkBWJlIgSywmKUs+SChWLUZOIj5GLFslMzk5PCVJKQorTTg3KUMxJys+OFM4XjojKVs8IiguKzZNUjtGIUg6VU1DOlZVSTIjWUM+RylAL0I1Qj03VVIzMyklPCZMXgorTS1GKVo+ViEpPlc9QTZXNVs4VUhZOURFLDtIKVU6RikoOlZZOzY1RTs4JUBWKzNEUDMmTVI4VVk1PSZQXgorTSkyVSk6RylKOFZBJTlAMUtHRyVSJlQ1SCwjRVo9NVFOPzcpQjI0XSkpMFg4MjYkTShBTDsuNDU4O0AmIworTSA3LCBfRylaQEdBSDhXLVM/JkE4MSJEQC9EVS07N0lSPkdJUjYjPSk8ViRWNicpVj5HIUAyNTUlMyRVLQorTTxFQFk3KCFXPEc9KSk1IVw8I0RfPTgtWDEjMSQtQ11AL1NZSDhSPSg7VEVLPEYtPDhVWU48Rk06MjVFQworTTo0TUI7VChJL0U4VjEnSiQ8RDA7NiVERy40VUZARTRQOFgpXTpERDImU1lbO1YlQzxGXS02X1k7L0RFSAorTTlHTVUvIUBNOydJVTpGUUs4VkFSOUYpKSlUUV0+VyBWKzYpVkBHTTYuVDFCO1QwVjMnKVI6JUFCOUZdQworTTtHSVs9Uik4NiJVOT03MiE6VUlLOEMpOjhWSUs2JEU8NiRNODgkUTk8J0FBMlFMOCozXUM6JilGOzJVKQorTTxXLUw6Nk1ALUMpRisxVTk6RUlCPUctSTYlRTQqMUBLODcpQTEiIDsvVkYiPEZMIT1AJVcgL1lSPUdJWworTTxGOVI9SC1SPEcwWyYjOSkzNU1LPEdKIzxGISs2Ji05LUNNQjxHVVs4NUU5LUJUTSwmKTsvU0VCPVVFSQorTTUiISQ8Ry0sL1ZKIj5GJTk+Jjk5OiRFJTomKSk2JiElOFZNQjZFTTs7R0lSOkREXjMmRUA6N01ILlI8XgorTSsyVVBCSCkpKERVOSkyVSk4NylCL0YtXT5GWUgqMTRUOEY5SztHNVU6JU9eOCU5ODo3LVI7RkRNKTVBWgorTT81US06VjogPzZJOjIzOS06VylSMjUxQjpXViI7VkFLOFZNLTI0MUs4RUkpOCNdOjM0MTE7SCxbMjYkVgorTTJWXUo8Rik4OyYoUDE2KUY8Ri0tODRVOjo1REcpVUVbOCNcOCUxNFY4NiEtOUc9KS9GRVo8RylPNkM4WworTTwlRF82JyFIOjchSzpVTUk4M1BSL1ZBVzpWLTsmUlVDQEcpUyA2UCE4UCNeNjcpSjxXKTs6Vz1bOUZWKAorTTYyIFstRFUsMzZNTj1GWUw4NU07M1NcVzE2Sio+RF0tOEU0Uis1NVEzUzxJLjZdQDg0TDspVk1bPCRFTworTUBGUTYtJi1ROlcpSDYlSSg4JjEsOCcpPDpGTUM3RjlaPFZJJCgjRUEuNilaPEYtKS1CIDgzKF4qPCVFKworTTg0RF8zNi1INkNdLTxGSVI8JERHLlY5JzY2XVo9RzVMX0YtQTlGRUs7RjlKMjI1KTpXOTotRDEwPTgpUgorTTZUVTk4Ji1HPEVNSThGIUI/JkVNQidJUjZGLVM6NiUpLUc9OzZVWFYsJEFGOjZBSTsmSVI7Jk0tMyYpUAorTTY0NFkxJylXOEYtJS41QF4mIFg9MSY9OSpRQC4oJUFPOiVBSzgzXS06RzlWPEYsTSo2TUMzVSVVPUdNXAorTT1XKUs9ViElNiYhOThGQTw7MlQ7MjgpSj5AJU8gNEAgRjRNQjM0UVI4REFHPEchWz5GTTUvIUxAKCNdQQorTTIjRSU8RiwjNi9YXyxBVFk6WCE4LCNdTjgzPUM+RF0kL1RFQz5XVTkoIU06Pkc9LTxIRVM4IzhZOFZNQgorTTtWKToxNTlALjVKIjpHLUw5Rk0kOFZRQS9BTF82IjUsOSZVUjo0REAjQlVZPTc5US40NVM8JilCOVQ1RworTTNVRUI7Nyk5MjYhUjdDUSk2I0UnPkcpSzxGUUM8RklGODQxJTZGTUMvQyBeOEclVThFRTszVTktOEZTRAorTThGLTo8J01LNlZZUD0zRSxARiU4LjVBUjxGLUk3RTUtNlVJJTtHSVY7RylCL1JVKUAnKTguUUxZPzcpTAorTTZERTkrMiBHJTFNSDlDXEsmIkUpOEZNQDI0NTgvRUlGPEcpUCpRTTY2IjQ7LjVdUj8oIUs7RyxfLCYtUgorTTZUTF4sJUBeKzJUXjpAJVcgNUAgUjZdSjI0NUs8JFUvOlZNTjo2IUI5Q1BQJlNdVzMyVFA4JExWMTZNSQorTS9SNEUxNl1JMlMhRj4mRUw9RkU4MTVNRz5GXSUuVDFJPEZNLTxISVs4RUBfL1VATzM1SS04Ni1JNkRQJAorTTxPWTw6VFVDOlYhNSxDOT4rNiE7OEZJTDIxQC4oRUktNlU0PS9XSVw5RUlANiYgWSs1SVo8RU1BPVdJQworTTZVWSQoQkUnOFVJSjhUVTg1RTlDOCRVOjhGTTsuNDFIPEcpSjwmKTkxI1k5OlYtOjMmWVU8Rk0lNkc1TgorTTgnNSUtRDU7OEghTDhWKUE4VkUrL1VJXT5GLUk2Q0xFMjc9VTtWWFYrNl1LOyVNMDs0MlMpVDBQJlZBUQorTTlEMEkqVEVBOFYhKS9ENSkyNilDOEYtJC5VQUMmIEQ4KzRVTj9XSU44VEUrOVZJPjwlQFwxJE01LyI1JQorTSA3KCE4QCMhPFZNLDg3PUw4NiVYPDQ1JTM0XUMyVU01MzdJQS1ERTkrMiBWQFglTTUzMFY2JUU5NicpWAorTT1WWUs8JUhfNlVNTTlSVE01RyFSMzI9WD5HPTozJkFBMzM4Iys/WUE6RyFbOjRVQjtHTVI7JUlKPkZNQAorTS9TXTkyNiFDOlZNSjIxQCksRVhNKzIgKS9XKU02RFU6NiVATSZUNVI5RFVDPEgpPDImQF4oIlRZMjQ1LworTTMiVSU4RllGNiM4TS1GKUMyMzhfMyYtWj03PUMrMUxWOiYoRTM3PTo4JzxZMSYiI0I2WFYrNiVDOEdJUgorTTZDWSw2VkktL1YuJEBGTS8xMzhWNkY5Sz1XKlwuMzlQPEZdSTY3SVUyVVk+LlQ1Qj4lSFsvVUFAOFYtPgorTTYkTUA4JEFJNlRVOTE1RVAuUVQ9KCMpLDxIQVwzVEVXPkcpUj5GRTUvU1lJOiNZOCA1QCE0ICNDPCQ0UAorTThYIUI2R04qQFVEXjI1QUExNUFBMyZNSTYlQSQlMFg7QDhKIj1WJF8tQkRWODhCIj03KUY6VFxeODNdLQorTTwkRE0vVklPLUFNUEBXQS0uNkVSNiM4QCZSRSkzJUlaQTVIXzdILVo8RilLPkc1SzMkNTUxJUEtOCcpWgorTTolWFIvVkBFIFBHXihGKV84JDU4MzVAUio0MUoyJUE6OEgpTzZFSF4tQ10pMjRVLzIyRFIzVk1POCQwUgorTS0kVS0xM1A7JlNdWj03SVIxIUBANlYgQDE3KUA2RkBZMTYhVj5WKEUrNkE5NkYpNi4yREkzVUxZNiciIworTUE4KTsyNiE4OCYhPjxWQF4uNk1LNlVJUDxHSVw8RyE/JlMhUzwlRSsuNU1LOlZFUTgkVUYyNFVIL1ZNKQorTUZENUs3QkRLKVJUUDZYLVo1RUVTO0cpTkBXTUAvUj1KPFRFJSA0NCE4MCNDPDQwOy43KUkzNyotQkZdNgorTTckRTo6NUUsNiYhTDw1TTUpUFhAPkg6KkBXPTkqMFg1LjgqLEEnVUs4JE05NjM5KTsmQTk4NyVPMlI1TworTT5HLTk2Ji1GOCM4QCYiISIpVEVOQThJSzxHVVo5RilMPkY5Wj5GIFApVU0zJzRVWjgnKU5AJkBAIFE3XgorTSgjOUtAJi1AMjVFKS1ERT8xJE0sNjgtUDsmTSk1NiVDOFREXzo1UFwxJi1aPEYhKS9TOFIpMkQuI0IpMAorTT5IKVo4JCRbNCYgVjgnPUM2RiBWKVVJVTxFRDsqNTkpOjYgXikxNEkyNUBNMzc9OzkoQSwvRy1aOiYlMQorTTpGRTg2RloiOCNFOjtGTVM5RVxZJEFVOTpGLUExI10vOCcpTzVERTo2I0UpOCcpTEZGJUo8MyhJKjM4XAorTTZXSVIzJkVSPCZBQj1ISVo2IzlDPVYgXyAyVCE3QCNePDVAOygmKVAuNF4mQ0cpLDE0TTo9VkUrMTRdSQorTTpVOS0vIUA4NkcpVT84JUYoIEQpKEZOLEE4LVI4JUVBOEYhOzhUVS07KCoiOFQ1SDhGKUk8Vk1DNiMwOAorTSUyPE0lNEU7OUghVUE3VVE5RjlbPEVFSUBHPF4oJTkoKTRFSjImLTs+RyBSLCNQWypSNS0+Vik4NiRFQAorTTI0MS0xNUUlMThCKjtGLSgyNU1SWCcpQC41IUkzNDVIPEcpQjhFRF4oIUA1JTFUUjElSVpCJURWOCZNLQorTTYmTiI+Rkk5OCM5LDtGTUkvVVlIMzchVTUxQC4mVDEpL0VFSiwjPU8vQilDQkdRVTgmLUsxM00kPkcoVgorTTI3LUs6VUhfKzJMRS1DISU4JDBFKTM5Sj02LUE4UC05RzZBSjxHIVM/NkUhKTJUWThXTVI4JiU5NDQ1JQorTTZHViM6RUFCPEchKyAyVCEzUCNePFZUOyYkNUg4NUVSQkdJOC8kRSQ6WClDLCRdUThUVSkvUzBSLjVBPgorTTlHLUAmIEQpKTciKj8nVVoyNDVDOUZJSjozOE03SComOlQ1KS9UTUY+Rk06NiNQOClTIEAjQkRWL0RVOworTUInSUI3Jk1SPEZdTjxGTUA2JF07OiYpSjhHIUo6RVFNL1NdOCxCIS1AJkktL1MhODVDOE0vViBZKVcqKgorTT5HKTguM11MXSZVUjtERTs2NDU6OkZNWzxGRSktI0RQKCMxNTBENVJBVDBCNidJJTZGQU48R0lNOkZBQworTThEQU8xNUFUOCcqITYhKC4lM1lBL1YpRjUzRT4xITRZPkgiIjw2LTgrMTQ7MzZcXjg4KiI8ViBbKlQxOQorTTUyRE02I0xAKCJVOjxGWVpANiRfLjYpOzhWKVI/NzU+LEIgPTInKiI+Ry1GIFM6KTEnKVs6Vi1COFZRJQorTSAzUCEzUCNeOlZJPjAzXTk3Vi4gPzZZSTg1TTg0JklJLURVSTZEVSQyVUU5MjVFOjhHKU4tQzBAKTYqIworTUBHKVc2I1kvMzQ1OjwiVDs2N1VdO1RUUikzOUpAVz0pLEREOCYiIDglMiBWMSFMTT5XSTk2RyEvOUdRVQorTTYzXUI+VUEtPFVJOjpHKiQ+RUlKNTNZOi8hTFA8RklKLlI1JDYiVDstRkFBL0VJUjcnSUgvQzktX0RdSgorTTxGTUk2Q1xZMzVRW0E3SUI1RUUkJlI1KS40TVpCI0Q7MjZNLTZEUS0zJkk7PEc6JDpDXUIvUlUsPEc2IgorTTgxVC4mIlUpLUZVVzpVSSk2IzhfOFZVXT84LUsqMTQ4LUQxNThHUV0+Vl0kKzVFQTolUSk4M1xJKCJFKQorTTZWLVpARyE4MjZVUDMzRU5BVlVCL1NQQCs0MU5BSC1XOCYkXi1FRUIxNUlPOFgpQC1AJSkgNkQgX0RVQgorTT1XJSkxM1lCPkc1SzxHPUM6VilPOiVFQDZTWE0vJUUtNkMgVjgmJUY8I10rMSI1JDxHKUY9JkVJNiNcRworTS9FWDsmI0VKPEchPjU0MFY4WEIgODNdOS8jKSQxIzBUMjVQMigmSVcyJildNkYpWjxGQF4wNjheMSddSAorTS9UVTk7OCoiO1VRKTYkNEAqNiE6OUNYSTI1QEAkQkUoOychPjxEQVE8RDUpNi0wXzMlRUo9VihfLUNFLQorTTlHNVU5VyFPOiMwOy1CVSk9SDlBKjNZOzVGLTs4NU1CMyc9XUFHTTs2RUBbLjZJVUBXQSQtJDBWL1FNLAorTT5HNU8xJTklNichSDQlUipCRjklLEI0RTYmPU05Rz1WNiM5OzZWLCM6KkUpLSMoSS9DWTA8SCFTOlZFUgorTTtWIF83R106NkYhODY1NF4zNlokPFY9VzgkTUE2VF0+PEZJLSZQJF4gNUggX0NFJTxHXTsvQikpOEUhOgorTTxHSVc8RjlTOFVJSDgiVDsrNUVAODNYTS42RUs7JE04N0M5KTpWJFk3J0lVOEVEVi9FQFwtQ10tNkVZOQorTTgmIFAyJllSOEc9QzY2IUo7VkU/OkU4Lik1XVIyVD1SOFYtSjs3LVc2VUA7Kzc9WjhFSUI5RkosPkVJOAorTTdERTUyNi1QO1M4XDdGJFQmIjRCMiZJLTpVIUc8RV1COE9ZQTYjWTk8VkReLURFRzNUQUI3Rl1COjRESworTSkyIFY6RzVSODRFQDgmLTs2VUEsLjcqIkBHKTs4Vi1GNiZFOzo1XTY4NTRcKlJETTMnSVo2RUBNMScpUgorTSwjIVI/JylLOCI0QDYmSU80JyojPFVBUzo2RUw8Ry1INiQwSSgjWS0zNlVaPEdJWjhGLUM7Jl0lLjU5NgorTThWRTs2JFFbPFYuIEA1TTk4VUlLPkcqIjYyICErMCReIC9ZJC1UUVI4NDBAKVREWS41SVI6RlVWPlcpPgorTTpWQTUsQlRfNkZJQSxCNS08Vk1BODZFQDonQUAoIyIpPkYpKTYmIUA6NyVJMjRNOzJWLUgsJEVSNjMpUgorTTxFWUo6Ni1bOCM5KChCKSw8Ryk6MjVNUC40NTs2Rk06MzYtSThHKUs8RkklLjQ1QjlXNTs4SDoiOlNcTQorTS1GITsyMzhbLyRdOjZGTSQyNilDOkYrXjpHKS8xNilDL1I0VjhUXFYtRDU/NkYtLTEiRDUsRilKNyZBJAorTTZHKUo4RDE4MjMhSj03SVs0JSFDOiZNSzpGST87Vy0+L1VZTS5RVUA/NzxfJlM5QjlDOFY8JjlCNicgVgorTSgjRT85UzktPEdZWj5XKUY6Vy1bPEcpVC5RQFYyNFU7OlcpWkBWKUs7Jy1JNTM4TTYnIVc8ViUtPEctNgorTTxINUs2ViEsOlZRR0BGRTUgMzghLlAjXjtWKSw4Vl1AN0NYVjJVQTk2VFVLPTdRWzpWRUo8JkU+MjYpPAorTThTOEktRiE6OEZBUTlGWiI8M0xNQDgtUjNUNSw4JklaPVRVLTtVTUo6NF06PkY4TTMmTUM4RylSPTZNQQorTTdDMFQtRF1POkVJLD1UUE0zNilCNkUlQjxUVSUyJklSOCNdOzZUVUIxI0VNQkghLS1SVS82JEReMjVNUAorTThWOiA6I1xZOFgpOF9FSUY6Vk1KOEUkRS1GKUkyMlRWNiYlSDYlQFQkQlU4NkU5LC1DIU08VlxWLUVBQAorTTpGKVI/Njk6OiRROzhGOU46JU1SOiMhJTxGODgrNkooL1E0STI1RTk4WCVTOiRBOS9CRFIyNUBQMTYpRgorTTtHLVI3Jk1XPlY5TUIlREAuUzktMyRVSztHOVA6VylSOFYkWyhDRUI9OC1SNiVBWzo2XVI6Rz1KOlchOworTTgoKUI4QCU5IDVIIF9HNVo6JVFSN0ZBPiwlTiE+ViRQNkZZWj82KS8zNk4iPVVNSjxETFcvJTU+LjQxSworTTxWKT4+Vz1BMTcqIz02JF4vRUE6O0c9LTM2KTs5VU0pMjY5UTdENSg4RUlCPEZNQjglJT82JERZNycpUgorTTZGSTgpMyFCOiYtSThWUTkxMyEtNygpTjxEXFY2JFUkOlc2IjojPFs2NU0pL0NFKTwmPSc+Ry0pJzVOKgorTThPWSQxVjlaOzZNQyszXUI8Nyk4LUU1KDZGTUs1QiBSOUZNSDYiVEk2V01XMjJVJTpWQSQ4R0lOOyYpQAorTTM1SS04Vl0kNCZcVi1GXU0mUSkkPTREUjU2IUg1Ri1SPkgpUjYkRE0vVFU4LUQ1OzMlITk8Ri0vOVcpUAorTT5XSUs1M1A7KCIgXzg0QFk4VU1XPkYpQTUyRE0tRiolQFZFQj5HNVY6VUlDOUctUDZWUiI6JDAhODAlQworTSAvWUI5RllSPEVJODIxTFlAWDlLNiYlSjtGWUIyM1k6PVdJUjxHTSQrNTVAN0NcXjhXSVA2VylSOFYtSworTT5XKUIvVUFBMzZJUDM2ITs4JkU7OCYlPjpWLUExNiEpLjRdUjhVOF42JiElKzQ1Sj03KUc2U1xSMSZNRgorTThGOU44RTheLUQ1XT83OUgxNF1DOldBUj83QSktRkFQMzRFKTEmRU8uNklaLVFNKUBFT142RF0tOkRROQorTT5TIF86V1FaOlMhPi9CPTo7NyhNLUZFTTtWQSkvJFVaQCZEXC8mJUMyNEFLOFVZJDo2JSkqVi1HL0Q1TworTTI0RUs5QUw4L1c1OzM2RVA7VEElLjQ9WkE3SU8vVEU2L1MoWTZFTUkzNk1MMzRdSzpWWUk4JilGLyMgOworTS9XPS0rM1xWOFcpLTE1RSUqMUBQO0gpTDpXSU4+Ryk7NiRRSDo2JUtARyBWIDNYITMwIk82Ri0hOFdRLQorTS1CRDgsJyogOUZNSz03KUI5ViUpNjVFPDxGSUA3QjUiOCVBKS9UUVU7RUlDOCQxSzhXKUo7ViAjOF9ZWgorTTxWIUM4VkFDOFcpWztGRS04RkVBMjJURTxGTS0pU11VNiJUTTMmWVo4RUktM1NdOTZENSQ7Jik5L1M4VgorTTZGWUY4RU0sOEZZTkBHViI6VFVCPEYpOjglRUI6I10vPlVcRzgnKSc6RiklNiM4XjtDTFA3KCoiOyMhSAorTTEhQEUzOCEpLCZJUjhFUUAzM11CPEchOC9UMUg4VSFCOlZAVjI2RT4uNUU7MjRHLjolSUc8Rk0kLUVJSworTTo2UUM6RylCOUJUQjZGUV0+RiFCNiJUSS1FSUY+Ri1ROlYlQT4nJSUxNFUvOFRNOzU0VVo4MzhNKTRFOworTS9TPF8yUzguJiQ1QjE1TVI5R0lSOiYpOzY2JUE4VylIIDNYIS0gI14sI1g4Klc9Qy8iIDgmVSFbOFYpQgorTT03SUs7Vk0tL1NdODZTWFA4IkRLL1NYXy1DRUo8VFE4OiRdQDg2RUk4RilILjRWIj5FRSg4Vl1SPEdJVgorTTs3QTo0NUUvNjQwXEBHSUApMj1HOCJUOy1HSiIvU0UpNiVBOjolOFkzNFFBNiQxKTElQS8xVERSM1RRQgorTT5GMU48RUVDNyZNQzMmTiM3Ij0pPEcpOzwmQSlfRik8MzVAXi9WQFspNDFWPzYtNj1VRDImJDFaPEVFQgorTTtWLSU2NTheLjRRQTgjID0xJi1KOEcpVy1DRUM+JkEpLURNQDZFSVI+RlFSODRVODMmPTkzNylSPFYwVgorTTYkVTA9NzVaO1NQUis0NU48VkFXOEYpW0JILTkvREU4ODQ1ODg0UUs6NUBWKCJVOTIzXSUxM0w4JiRNOgorTSszISgxNSFLOlVZOzImIU46WClSPFAlVyAzXCBfQ1xAJTJVSz1VQSQnMFhHOlcpSTZGPVc9NzVaNkNZKQorTTpGXUY2VFxSKlQxKzUzOSk4VyklL0Y5Vzg1QTs8Rk1CL1FARTtXKF8pNFVLOldSJDxWIVo8RUkpMTRFKQorTTEmWVo7U0RNMTM4OCUyRTw/NERNMjVFPzhWOUM4VURQOjdJOjM0VUI6NU1AL1NcVjMnLTA3JVEtMTMhLQorTS4yPUJCRig7LURRLTpWWS01T1ktMVYlOzEzXUAvQyk7PTZUXjtXSUoqMShFNCdKIDhGLUkvU0UtOCVFOQorTThGTSQuU106OlYpQjxDXFYyJ01SMjFNJDwlRSU8R0lGPEZJLzYkRTU2I0UwPkdJUjo2KTo2NjlaPkZJOAorTTEiXFY4VylAOiYtMTxIVio7VTk8MjVJSTY0UTg4JlFRMjIgQC9WITo4JjhfJlFNOTo0RFsyNEReNlYtOgorTTZUNSc5VVIiPDY8IT5AJVwgL1lJLyJMVjg2TTk1Qyg4KTRdSzpWJTo4RlleQCVJKTJWWVs+SCFDNTM5JQorTTg2JTg4NkVQNTM5OjpWLTgxNi1TO1M4OCk2JU8vITRJL1NFRkBILV08Ry1GNiVBLTNVQUo+R0lLODVAOworTSNCPTw6VzVIL0VZQjtXKUs3Rjk2JlQxVT02OS80JU0lLjRFLSwkMUo6NFxZMjJUNSoxQDUuNzVXLUNcXgorTSlUPTAxJTteMzRVQzwlQSkzU0U4OEcpOyc2TV07RUBJKCJVR0JHOUw6MzhFLUZBOjonKVo7Vj04NlZVVworTTxGLF82NiVXPEVYRS1GLUM4J0oiOlY5SDo2IS04JkUvMicpWjpXSVIyNU1TPlc1UjYkRSktRU1JNiVNQworTTM1RiZDRyksMTRNOj1WRSsxNF1JOlZMWygiNSU2JildNjJMRTo3ISs2I1xWLjZFSDE0USUxJFE4QEZFOworTSA2LCFAQCJdPkZAUis0VTo2VF01LSMwXjo2XUI2RFU5PEdNOSxCVUJAR0ojN0YpTS9DOSU2NU1JOlYhLworTThWSUI6M10pOFctSTE0MUM8JVhSJlI0RS41SUY+UC1DIFVPXjY2IUs/N1VaPFYoSSYiRTo6Rkk6MSQ1LAorTTtILVo6RU0tMSRdUj82WVI4M0RQLUNZNi9FOTo6RkE4NjU0OycxVEArNFFIMjRdQTYlQSktRDEtMzYpUgorTTpWUUgtQ1k4NDVETTpHSUYzM10kL1Q1UjxGTUgpMUBFNiRVQjpGOVI8Ri1POzcpUjYzXVc8RklOOFU0XAorTS9ERUI+SFoqPTZNUzwlTSk6JzEsOiZVQ083KVs2UkVDQFdJUjYzRT41NiFINlVNQDY1QVJCR0k4LyRFJAorTTpYKUMsJF1ROFdJSTEiRDstRkVXOjNcRTE2ISU6NURcLUZBSzVENTYyMl0lOlVIITEgJUogL1lKO1Q1JAorTTglSUI2JiRcKlI0VjomRTs4NF1DOkREOyRDRVI+SEEhMzdJTisyVFYxNkVJMzVBSTpXLVIyNTE7N0ctSworTTVEQVA8NiEhLSNdKTNWKVE7JVlDODVNOzglRVJBKDFVPEYoVis1MVA+Ry1CNkVIXjQoNio6RDU7OkY5TgorTT1GWiM8Ri0pKzJVKzg2UUs8RyE7MiZETSgjTSk4VkFGM1U5SThWLSQtQzteL1RNSDxGOUhAJTRNL0M5JAorTTomOVU2RilLOlYtOzglQF84IjQ4JzNNUTxGQS82RilLPkZZSjpTWE08Ryk5MVNdOC5RTEUrNioqQUdVSgorTTxHSUIrNDFSOlZNSjhFJVo9IU0pPEcpSj00NSU2Rl1LOlZFQC9SITo7RU0vNiI0Oy9WJTs2Uj0kPkc5UgorTTozXDgqNiVIN0Y9JC9TXE04NU0kLUVRUDslSF8uMzklQEcqICAzRCEvUCNeOjZNOTZWQUw8NkVPNjJURQorTSgkNT84Ji05NkZcViNAREUyNVlbNjZVWjs1TSQtQ11INiJUTS41UiJAVFElODQ1Qzo1QTY2Nz1SNkUxOQorTTY1TVI+R0lQOFYtOzNVQS8+SFIkPTZZQzIzOUA9N01aNiYtTDo0NUo/NihZMyZJTDlGTVQ6NiIqPkRMTQorTS1EMU4+RzlSOCRVSDUyRFYzNlFSOkZBSzxGLUI2Q1hNX0IoWzwlWUM2VzlDLCM4QCZVQVo6VkFJPEchSworTTZWRUEyNlk5LyMoTTtYKVo4RFUpMidJWzglTEUoJUVLNiREUi9DKC4mIUBNNlc1VTpGSVM7VV1BOEY5WgorTTs2TUM8RzxNMlVJLzQ3OVA4NiEvOkZJSzhVWF84Nk0lM1ZFJC9WKVI8RjhWLlUhUjxYIUwsQjVANkVBSAorTTo2RTgvU0VAO0NZJDhVWUIxMjRfMTgpRkBAJTkgNEQgX0YhOTZGLS88SEVSPVcpQC0iNSsxNiVMN1RdUAorTTZSRFAvJTUtOENFUkJGOTs2MzlJQCU0OyYiRFY5SEFIM1VJJTY2ISUzI0U6O1ZNOzZGJUM6VVlbPFcpUworTTolTTgyNkldQSdJRjg0TFYzJylaOzRdOjlIIUI4Rk1AL0NZPDtGTUI8VjlHQTghSS9DODsyNz1VPTZNOQorTTZVQSs1NDE7OFQ1MD5HNUszJilNJE9YMi1FOSg4NU1GPVNYTSoxQE07RkVWPldRVzxGTVc4JDVSOERETQorTSs1RV1ARyk/NiU5Sj5WTTYuVDE5OiVJLTlGJSsqMzBcLENZQjtVRTw+RklLOlYhLTpEUTk+Vz1aMzYhQQorTTM0NTo7VylXODZFOjZGKUI7Jk1INiVFUDg0XUI+RzYgPEZFJThFWU46RjhfNkYtSTpWWVM8JiA7L1ghPworTTYmTUM2U1xAKzNeIjZYKCE4QCU7IC9YXCczRUg2Ji4nPkZZWj02TTg4VDUtOiRVQDpGKFY1NE1JOkVAQgorTTZILUwzMzhFOEgtTy8iIFI1MzlLQiZdQTI1XUg2RFUlL1RVSjtURUM6ViBUOFcpU0AmXTs2JUFCPEc1WgorTTpVRF8xIyEkOEQ9STY0PVs8Ri06N1UwXiwlTUIyJklVPzg6ID5GISkqMyE7O0ZNSjhFTTs4Ji1CODREOworTSc2QUY5VDFKQFFOTiREMS0xJilLNyZNQzYlMFQrNiE/N1cpXEAmTU48U1xQOzYpKSpSKF84Rik7NjVdVQorTT1HNUo1Q1kpL0ZFRy4wLUNTVkVKPDc1PzNWJFYsRz1CM1RRODE1QFYvRllSPEY5Sj1WSS0tQyFCQEgpUworTTY0NTg3RylSNkRFLTxGUTk4VylDPEZVVTxHPUMzVUlGOlchOzdGTUs6RVlGKjNFSzhFSUs8VlEpLlJUPQorTS43ICE4UCU2IC5UXCgjOTk2NU1XPlcpUj1XSUs6Ri1QOjNdJTZFQFAvVDE5OUclKThYLUs2MzhcNldJUworTTlDUSk2IzhfPkZZOzg2QVA7VkE4LjNdPDxGQUo7ViBHLCQ1Qz5GTUA2RUE6NkVRXUBWRFk1M1w9KzFNQgorTThDRT44VUE6NiRRNi1DWS0rVFVOPzhKJj8nPTgtIjRfNCcpQyBVTyg3RzldPEYkSSZVRUo4RFFORDI0OAorTTU1TTo6JylDNDYpQjZFQSsxI1xNMzZZXz5GWUMyNE1KMjJUSyYlUTguMzhQNkcpXUBWQSUsIlRNOFc9SQorTTY1TTo6R0ohPlZNLzYjKE0gVysjODRVLTYjWF86Ji1COzZNVT5GKFIlMl1XQidJLy41SSw7Vk1BMTNZSQorTThVQUg+Rk06MiZJWkBXJSU2Nk1NPERdLzZGXUMzVSVJOFZJQjpVTUI8RiE1NjMwTTggJUogNiAgX0RMUAorTTdHIUIzJVFSOiVNQj5HKTozJy1aOFRNKTYlRTgyNE0lPlclTEBXKToyNEReNkc1WjxHJUAxI11GOURdQQorTThXLVM7JkU4MlYlWDlVWUM8JTRUKzRVUDNVTUA2RUklLEZOKj1TOFYrMUBLKlQ1TzgkMF4yNUk7NiREWQorTS9URE0uNiFKPzg6IzxFTTUqMjRNNkVJLTZVTS84R0lVPEYkVjg3KTosJUoqNigsUDYmLCQ6X0VBNiUhLQorTTYmQEkmUiBSMycqKD8kXSk9VyEkJlMoRTs1QFYqMkReNjY5WjdTWSQqMiBeOFdJMDY1TTo7SClVOERVOAorTS9URVo+SC1QMzYlOzEzXUA2I0VCOUdOKDhSNCkkRUojPVYgWS9DTUI2RiUtM1RdJS9FSVs7Ji1DOidKKgorTTsjISg+RzVSMTNdKThWKUM4V0ojPFY5UjpVSVI8RFVAODVdSSA1SCE0MCMiL1JFLT5HPSwzJyFAL1NFTworTTxERFY2R0lONiQ1JTgmXSsyU11SPkcpXTxWLUEuUUxFOkgpXUBGLUY7Vk06N0YlQzxXNUs4ViRZLCZdVworTTZEQUo6JERWMjZFOyEmIkUyMlRfPThJUTIzODguViUlOyctOS1DRTY0JiE5MjRFOC5TRUE2Vi4iQEctOgorTTgkTFIuUC0pX0VNQzYlQTA5R0lXMzVJUzojXTs7RylBMzYpUjpFIUM8Ryk7MjRdPy4xKEcrMyE7QFdJNgorTTY3LUg3Q0xWODZBKS0jMFw2JUVDOlRETS1FTEAkQzlINkVBOjZWWVs8RU0tNiM5ODtHNig4QzFDPCVBKQorTTNTWEUsI14gRDcgSSNBQSk8RjlLODNYXzolRUM7JiUrMSM4VzlWJUA6V0lVQFYsVjE3TiI9ViBfLjkpKQorTTg3KVo/N1VOOyZNSzpHKVMzM10lPCc8ITswJS0gL1kkJlI1Qj5GKTE4VkRNJzVBQTEzXFA4VSBNLUNdQQorTT1WOUI2VkVAOkdJXTw2RSUqUjUtPTdVUzhWUVM4VU1COjZRVj02VUM3UlQ7NkgpSDE1XSwuM10lOjYhQworTTo2IVI7ViBZNkgqJDpUQEkvVyEkMzcpUC4zKE8uNUFANkYlSTIzWUI4Vk1bPTY5QjZWJUg5VTkpMTVNQgorTTpGLSQ0JylVOFZNUjpVTUM6R0teOlU5Qj5GTTo4VylWPiYhLTM0MEAqMzhcNldJUjMmRVI6RUEpNUcpTworTTMzKE0vRkVPOEZBNCoxKTgqMFgyKzRFNjdWQVM+RylIOEYoVi40NUZAViBQOEcpSzsmQSksQEQ7OkhFWgorTTIzME02Jk0+PEcsXjI3IUI4Vk1BL1VFPi9FRSU2JilXNydJUTE1QVI+V0lTMSJVJDY3KV09NjlDOiQ1JworTT1XKTo3RDQ9QERRSiA3KCE8ICNeO0NMUjZXNVI6Vi1PLUJVKTYkNTQvRUBWKzQxODhWWVI8Rj1XNyRRWgorTTtGTUk4NDFAPDZNWjxFWVI6VU0pM1YlRzxHNUY4NiBfMjc+IzpGOVAyMlRbMTYlOzZWTU87Rk1POjUhUgorTUBWVTgvU0U6LUNZSzxERFYrMzksOCRFLz5VWSUxNFVTPUcpQjgkRS08Rl1AMzYpQzhWSUwxJFVGOkYtWworTT5WLTA2RVlcX0c9JzhHSUs2JilSPTdJTzZGITQqMkRNLjYtWzxGIUE2NFRWL0RVVz5GTTQrMlUsO1RQVworTTVFID0yNDBQJTFAWzEmIVA4VylSO1ZNSzYiVDsvV0FQLjYpVTknKVIzIygpJiVGIj1VTT42JDUpLCYhTworTS41QUE6NkVCNiMhOjojXUEyNFU5NyRVUj4lTTk4VlFaOkQwSS1DOUM/NyU7M1YgVi9XSU46Ji05KTgoTQorTTIwJT4gOEAgX0dNSDI1SVI6Nz4gPVYhJTNVSSk4RkFGKzIgVjE1SUI5RllLPCNYUDhFSUI4RURWNldJQgorTTpXKVI7RikpMTRFJDI2LUIzNi1DNiYqIkQ3KUxANkBfMSQ1QTlDRSU9VEEoOldJQzhHWU0zJERQLUI0XgorTTcnKUM2IzhNLjU4Ry43SU4xMzhJNDVJPjpGIFYrNkVPMSRFQDhWKTw5Ri1BN1QxMT5HVUYzM00tPU9ZXQorTTEkVTozIzFAOkZVUz01IUI4U0xSKCFVKDxIKVo8VjhNKjJVKTxHSVU8RVkpM1ZNKSkzOTYxJTlJODIgOAorTSxDUSU6NFU7PEYpQjdGIEAmIjUtOFVBTjpEXUZARUxWJiIhQD5HPSQuNyFJLUEoVjgjOS8xNUFJMzQwOworTS9VWEcvVDEsOVQxKTsnKUMyMjxfPEZMUCs0MFYvVz1SNkVNRis0RVc1Jz1aOUJWIigiNCE2QCVbIC5NSworTTojRS06NEE5PzgpUjtFRS8zVkFLOFMwLiNCNF4zNFU8OkcpOTU1TTg2NUlBMjRRQy9DIUZAVllROjRFJQorTTEjOTs5Q0UvOjYlOjhIKVI1JllCOlZFOTNVUEUoJk0pMTVJUjY1TVs8VVFANTM4XDE0UUI4Vi0pLUM4RQorTSNCPUI6REVCN0M4PS1FTT4rMU1AOlAtOl9GKUIzMyhZOEclKTE3OV09Nyk4MTZJWjokRSkrMUBeNTRVWworTUAlISw8RDRfLyIgTTEmWiZAVzxSKCFMVjpXOUo5RylaQEghSjE1TSkuNEVIO1MgRyo1QTg2RiFDOzZJOAorTTZVTSQ7RjhFKTYqKjxDXUpBN0lQLUJVOT5HTUApMyFQOzFMVjomITkvVUFSOEVYSS9HJTUqMlUpPCVNOQorTTNWKUo6M1BSMyYpKS1JKSQyUzkpOFYtQjwkRF46NEFSQEdBPiwiNCE4UCVNIC9ZSzhTUFk4NiU6OldKIworTT4mQTE8Jz1SOVU1MCghQFYyNF05OEYpLThWQTkyMyE5OiU5QC1BTSQ6VFVSQCZFQTgkNTg8JUUtOEYtOworTS9WOiM6Vi07OlctUDgzWEUrNi1IO1ZNTjZFSVpCRylLOyVBQDo2KUI2NklKMyY5JSgiKTk4MzlXPlYkWQorTS9GITgvVEVJPFclQjZGKUszUzhJL0Y5OjEmSVo7R0laOiVPXjlGXFAtRDRZLUQwWTxISVo2Rkk2OCVBOQorTTUzWS07SDFTLUJESS8kXU47JilEPzhGKjxFSUM4MzhQOjVEQioxTSk4JDU2OlZVQjdVWFYuN01CJlE0VworTT02XSc6JkFVPzRETTM1UVZAMlQyKzVASSZVOUI4M1k5OlZJUC9TIVM7MjRWNjQwUDhHJUY7R0lKNlRFJworTTomJTgyVEUvMjQ1JDxGXS84JkFLO0ctO0BDTF4gNiwhPEAjXjxHISksJUlDOjYtS0BIMU4zNilLPEZNRgorTTxEMEktRFUvMychTzYlQUY6VVhcOCYgVDE2OE0pM1xeOFctUzsmKS06Ji04NiZJRjgiVUpBRy1DNkcpWgorTTsmJSsvI1EvPCcqID5GLTo7SEVaN0YtOjonKUY4VF08OkMhQDhVQFYuNUBeN0dJUjZERTovQ0U6OEcpWgorTTpEMUZARi1BMSNFTzkkVS87VjFGO0ZVUl9FTTgpMTRNLyNcXi43IiZCJk06NkY4XjEmWVo6RkVSODNcTQorTS9WJSU3JklLNCZaIEFHVUY4ViRfKTVdPCkyTEArM0U1MzZJUjpVWSkmUlVDLUBELic2SVo4VyEkNjhBKworTS8lTTo8KClBLjIgRS8hQEU2J0laMjMxKTw2JFYmIU1AOyQwWyUyTVA7RzYqO0YtUDpWUU86JFUnNjREVgorTSwmTVc2RFVKOyYtOTdIKFAtQCUnIDY4IF9GKVo2UjRfOlZNSThXLio/Nk06MyVNUDhWSTY1I0RfNjRVOgorTT1XIFk2RylBOjdVUC1DOU87MyhFL1VFQzlHLTw4VkBZMSVBQjtGQE0zJylXOkUhUj5GLS82JiU1MjcpSgorTT03NU42VVomQFYpMDhGOUo5RylLOFchKTI1ITsvUU0lODRFQzxVSFAyUlRfOiNEXztHTTw4RzU8NkRUWQorTTpWSSwxJk1aOEVROzpfWUk1Q1g1KCI1NS1DUUg/N1VKMTRNODgkNTlCJU05PVZEXys1QVAzNFFCQCYpOworTT03QV09RylLNlVBLTcjOSQvUzA7L1YhQjxGXUAyUUxfOiQwRycxTUJCR1VbODVCIi9TOUE8J0oqPkYgTQorTSs0NEAlMlVVQFRdOTdXTVQxIkRNNlZAXzUzMF82VF1GQFZNLz5IQVs7Ryk5MjVFNCkxNS08Ri1BOlYtSworTThWTiI2NEwhLUAlJSAvWTk6VVxNL1YtPDtXIUY/OClVPEVJKThGTUA2NkFAMTVFOTZGTVApVFFOL1YqIgorTUBGKUNAWD1JKzNdJTZGOVo4RilHKzIoVi9XPVIyVDVCO0cpQzpHKUs2JEUlNiYlUjxWVUo7Nkk7PUdVTQorTTZVSU48RilSPEZFTD1WUUE2I0wyKzNZKzg2OTgsIyg1LCYkOyRDRVo9VllSOERcXzI2LUIxMjUlQFcpJworTTZHJ144VilBLEE0OC1DWF45R1VVOlJUTS1HIUgzNylCL1M5Sz5DOSw4RUhQLEc9UjlFLTxAR0FaOyZZUgorTTZFSSkzJUU+KTJVNTM2IVc2VFBeOCgiIDpSNCktR0ldPUcpQkBVRFAuNklaPzhJSy9FRUEtIkRLPVdZOworTTgzRTs9VkUrODchVzY2IUA4Nk07NkZZSSwmLipBR0lKOCNZJS9BQC4rNV0wNCZJRj4nKVFARz1TIDYgIQorTTUwI144JUktNjYlQzZWLUw6V1VSPkc5UDZWKUo2RiVMOjQ1NS9UXUI6U10vNyQxOjxHSVU7OEldPEZFOworTS9UVUM+R0k8NiU0UiZSPUs8RVhZMSYpSzhEUUI6VlRbKCJVLzM2OVs9Nk1LOUZZVTtGTS88R1VaO0ZZSworTTlGSUk+JkErLVJEOzI2XUAvUyBbKlM5JCZRNDs2VllGOzZJOzI2TVA6Q1g7KVdJWzE1OUNfRDU6PEZcXworTS4yNE0xJi1VOicoSSUxTTg6VU1aOFRMXzhXNUM6NUhZLUQ1SjpGOUAzNzVVPFVNWkBWLTs4NUFAOjNQSQorTS1FNSQ4RUxeODZRTj8nPFwoIlU6PkdJRjhHPVEzNTFMPlcqIj5WLUY6NVkpNCZOIjhWOFItRTlJOjglUgorTTxGRTk2JFVaPEVJOjgyPTo/OD1aOUYtODIzXDUiMUBfMlM4VzZHSTw4WClbO0AlTyA2ICBVNiE7MjVJQQorTThXJTs4NjlSPEc5VTxHKU85JkU7OkZdLTI0MSU3VklCOCVFPjhGSiI8RjoiPkYtSjhVNTs3RlopOiVBOworTTlCRDsxNilRMjRFKDolMEcuNU1JLyJMSykxVFY7VzVSOFZNUDpGTUMyNilVPzY8IzpIJU4gVyteOlZAXAorTSRFRVs4RUBNKVNFSDgkMFImVEVQOFcpRi9UVVpARk0+MSUyIEJGSUM2NUlJPEY5ODgiVE0xNk1bPEcoXworTSoxQFIyJkFKMzQxQTtXKUpANzxWOCc9UDMlTVI+RzlVOkRRTkJHPUM2VFFIOlU0Wys1QUEzNERCL1ZdUgorTTlHPS8tRE0tOzgtUjlGVVczM0VJPEZNQzlHPU84Ri05NlNFUz1XISsrM0U4SSVNRzxGLS8tQlRHOlcpTAorTT0nISQ6V1YqPlYtOzo2JSkqMEQuKzQ0QCZVOUovVUohPEAlSCA2KCBfREU5MTVJUTxFWUM4JUlLOEUhWgorTT5WSV89VyFMPEZJOS1CVE0vVyE5MzNFQDgkNUs6RlVVPlZdLy1FQUE8JlFSNkNdKTo2RSsvRUlLOCYhOworTTg1ME0rNFU4MlVFMCsyREItVSVCMyUhQzxHKUMzNUlLO0YpOTQ1SUY7RylaPkZAVyU0VVI2RSFDODRVMQorTThGTUkpUl1INlVZUzZUXVJBVyEsOiZJXUJHVUw0L1lHPEcpPjYzRFYxIzhZPCZZSzomRSsrMyFQOlRVJQorTTgnKVIzNUlAL1VJWjYjRTY6R0laOUNYPTZJKiI8JiUpNkYpKy9FRUk2RylSMSI1Qj5XKVIzMzhfKzJdSgorTTxFUUA8RlFAOiVJQzYjRTo6NUBfL0VIRTFYLVI8JExWNichQzg2JSk1MUA4MjYpLDhVUTo8WColPzZNSAorTTpHIUI3QyA4KCJEQCgkRUMrMyIiPVYoITZAJS0gL1kkLyI1K0BXXS8uNFVCOlYgUDpXKUI8R0FSPEhWKgorTTtVOTwyNUlJNjRQTTYmITg2Vi08NCZJRy9CNF4zVlFMOFREVi1EVVY9VFUtOkVJUDgmLUY2I104LjQxQAorTTg1RSkyNVxQMjRQTy42LVI8RilCOiZJOjEjRSU2RylCPEZAXy1GTVo2VUhfOUdRUzhEVTo4RTRWOCRVJQorTTxHKUI5RzYiOFRVLTpYKVw6RideNkZJWjxGQEctRzEkJlM5QzZHLU46I1xFNkcpSjhWIF4vREUtMjM4XgorTTY0KE02JUlLOlQwTSk1OjJCSClINiREXyszOVA8I0VIQkZANS9GSTw7VUBeNTIgQDElQFk2JylaPlcpQgorTTsmKUA3Vi06LUJVKSkzOVM8V01QL1U5Uj8mRS02RzxJI0IoXjUjXEcpVUlaPTc1RjpWTU4+Rk0+LlIgRQorTS8jOTs8M1BFQEVBLSA2QCEyMCNeLlIgNSs2XVs2MiBNOCctSDJWQUs3JjlLOlVSJkNHKSwxNE06PVZFKworTS9UTUM4VkFJNUMxLTIzIFwxJUlTPEYpNjUzWSU6WC1LNUYhJTpWTS84VkU7ODM4Ry9UXS8xVi1SMjM5KQorTSlSVSk2VylSOkZNSjlVQF8uNEVQNldJQzJUMUM7RUE6NlcpVT5HKUAzVUEpKzU5JC42QU46Vk1GPygtOworTS40NUs+RzVLX0VNODkoKU8pMlVROjNMRTI0NUs6Rk1ALEU5TjlGKUoyNEVBNUREXy9DRFYnNEU6NiY4SQorTSglRUo/ODYyPkREVighQEU8Rz04NlhJVyozXUEzJk1NNiYkXC8lQTgtQyE8PkhJWj5HPUs8Rz1POERMXAorTSsyNFc6VyldPEYlQzZWOVs4RU4jODMwQCk1QSkmUUElPVZZSjdEXUg5RzVPOjUwWy1ERF44N0lILlgoVgorTTIwJVcgNiAgTzMoNSYiVUE7U1AuJlNZSzxHPVs8RklCOEVNOzxISVo2I1EpMSZOIjhTOF82Vk1DOlVdJQorTTYzXEcsJEUvOyctQC1URSkyVi4jQEZJQzg2WVs2VSAjOj9ZQTEjPSUvVFFGPzcgWTEjOE0vUl1CPlUhLworTTpGTVE5REUlOyZBSjM0UUA6JkEpMzcqIj83SU04RFU4LjJVNS9ENUA5VUlKOEUhWjojOE02JllaOzZNQgorTTNWVVAvUlVCQCcgXi9ERT82RUU5LURVUztVUUIzJi1UMyQxQjYyVFwrNFVCNUREMiYkVVI5RzYyQkY8SQorTSNAWDU0KClSOEc2IDg2LTsrVF1KOlYvIC41QUw4I1A7LCcuIztHOVo7JylaPkcpSTEyNFY1NVlaQEZNOworTTw1TSQ8SEFaPkcqIDUzKTg5RU0kNjdJUjpFRFY2Jl1EOUZdPjdUTTguNFVZPERERTEgJVsgNkAgX0U0XAorTS0kRU85UkQuJTMpLThHSik8RklCNjVIVjZGWTszVUBFJlNdQTZTKFYxNlVJOUY9KTJVMFYtIzklNiUhKQorTSZSNE0vVFFRQEZVPDsmWV08Rk1COFZRTzw2LUkxJFEtPlgpOjEjOE0vIjRZOVQwUDEmLUs7VFRZOFchSworTTYkUTo4JUBFMTcpQD04KUY0NUE4L0I9JCwjWUA6JDUkNkRFQjhSVDsvVyFOOUpdVT5GKTA4IlQ1LCZKIAorTTdURTQxNDU2L0NZJThHKVI2IyEtPERRODo2PFstQ1lCO1U4SSUyISQ8RUU6PkdVVy0gLC5OMzlSPDcpWgorTTpWKVM4U1hZNkghSCs0UVc4RDA4JTQ1UzxFRS82VylVPTgpWDUiNUE8M108PkghMTxGWF8yJ0okOFY6JgorTTxETS86VyFKOEAtUkRGJFYsJklIM1ZNUzpWJTgtRDFLOjQ0OyswJUEgNUAgX0VBSTI2LVo6MiApI0IgXworTS42KV0+RU0tMzYhJDg2TSUzVkUkL1YpUjxDXFIrNUVLOyYpNjY0RF83REU4OCVdJCszKEktQzkkO0ZJOgorTTxXKUY9N1VAMSYtTzlGWVc2I1xQOlgpWjojXE01NVkkNlU0Vi1EVTs6RDBWNkdJXT02SSkpMiBFNTYoTworTTY3SUI1RUE8NUJUVi1ENTo8JUUpNiVNSzNTOEAsJVlIMz9ZTkBGSUI2IiAuKjRFTjkkVUgxMzheKVRFOAorTTElUVI4QzkpOEVJSDpWOUEyM0VCPEYsUigjRS0+RjlBOjZZUzlDIC4jQlVLOzc2IjxFRUo6RUBWODdVSworTTEkMiA7VEQ9JTI1LD5GUTk2NU1LOUc5VzIxTS08RUBZNyghVzxHPSkpNSFcL0RSI0BWRSU6V0lSOlZNRgorTT1WRTUtRi1DMlYtWz5HKUw4JUFLPCY6Ii0iRCEpMCRHIC9YTTNWJVA/RyBSJTBYRTY2IUA0Jl1LNiQ1OgorTTsmTUg2JUVQODRdQj5HNUg2NEUkN1VNKTM1SFYrNUlLPCYpQjYjISQ2JVk1NiYpOTgoIiA2VkldOkNZLAorTTZFWUs7JiU6MTRVUj5HIUExNilPNkRVQzYzXS04Rk0lLUQ1Oj5HVUsxIiA4KCVBOjJXIVIxVEU4MTYgTQorTSpSVFYzJU1CMlNZLEAlTFYvVE1AO0VPXjNXVVI0NiBcJTJVNjlGSTs7RiBbKCE0VzdTXSk7JyBfMSQ1QworTTtWSTA4ViE4NkZJTDNTOSQyNy1TOEVJTD5GSUYqUShNOEdJTT43SUs6RlxfKEYhWjclWFA8Rkk2LEQkXAorTSlWSVI7VkE6NlUlRzhCVEAsJik7L1NFQj1VRUk1IiEkPEI0RTxILVIuNFVaPTcpSjs4KVA3QyE4NiRNSworTTxGVV1CNyk5OEdNW0BGOTggQUAgWiMoTTJXIiI+RERSKCM5ST5XPFAzJ0lKMzYlUjxFSSkzNylMNlYtUgorTThXSVM+RyFANiNZLTlDODgtRk1aPEYtPy9DRUA+JyFUOCM4TT04KVM6VklCNkVFOjhWTTo2RyEpL1YtRgorTThGLUM8R01ALUYtSjZGRVY+RkRfLjNFLTxGRFYmIiBSL1MhKEAnLTggVEdeODM4Qi1CPSkzNiU4KjMhUgorTThTXFkuNUVOPlZJWjxGKUM2QzhXL0Q1Uj83OUs2IkxNNiYpNjI2SVAyMzxWL0VBRzE1QUI8Jl06MzRVOgorTTpFSUo6RDRWM1dJWjpFNEUsQ0VKP1YpQj5GOU8xIkRfOkYpNi9WTVo4MlUkNUM5QDxXSU04RFVIPEVASQorTStVNVEzUzxJLjZdSDg0RDsrNixJI0RRVTpURS0+R0lSRTY5TUBHLUsvUjRNOCctSzZXSjI9VF1DPkgpVQorTTtAJSEgMUAgX0VdPjI0JTxAI0RWLENZUkBXKTk2RylVOlZJTzpWJSUvRkVDNiYtUzpWTU4/OClXOjNcXworTThFWDspNkVLPTc9TDgzXS86RFUlKTMoSTM3NVs7VFUlNkYtOzonSUI2RllDNTRFJThWOTo6RylCL1RVSQorTThXKipBSClLOjREXzZWIF8sRDE+OCNYTThYJVI6NUktOCZFPDgkMSU2JUk4L1NdSzpVOEkmU1lPPy9aIgorTUBHSUY6VU1BNjRFJThHNiY9NFxHL0ZNUzpXIVI8Ri0rL1M4XzIzXSs8Jk1OPFRERzVHSUo1RU0kKTM5UgorTT81STQrMzk4OkghQjZWWS82Vik+MjZNUjY0XVI+Rk0+KVMgVjNXSiI7RiElOkdJSCoyNUM+RF0kL1RFQworTT1XITUvU0UvKjFAVjwkUFk2R0lbPEYtPDtGUVI4MiA1LjYtSzNWSipARUE2OkguIkBXNCE8ICUrIC9ZLAorTThHKE0tVyBHMyZZUj5HKT46VylTPlZZQzhFSUEzNF0vMTQ1OjwmUTs6V04jPzchODYmSUYoIU1JLjVJWAorTTo2KS02Rk1AKTFMVjYlSTw6RkEpKzNZQDZWTVo8RklSPEYtKTE3JVMxVFVCOFVFLTNVOTs/N1FVPUgpTworTTVENTg5RDU7OlZJQC9TRVA7NylCNUNdUDpHSUs1RiFMODVFQTxGSSQpMk05OldXXj5XVU06JiEkNkVBQworTThGRVJBR1UtKCJVOz02WVpASClTOkVAWy9VNE0rNiUtNCgpRyk1NVc8JDU5NiNRKTwnTU83QyhFLjYqIgorTTwmSUY4RSE+OlRFOj02LUI+RllDPVM4XCxDRiA+RixWLUVJRj1VNEUvWClOKCFNKUBHITgyNUlSPCVAQAorTSZTXEUnNiFaPVcpSztXNVY9NjhUKlJVLzo0NSQ+SElJLCQ1XEBHTVYgNyghOjAjXilUNVA1Iz1LL1RdPAorTTxISVs4RklaQFgtWjpWQTk2ViU5MlQwWy9GKUEzVi1SPkdNVzpGSVc3QyhLNjI1JTwmTTs4JkVSPCVEXworTTNXQVM9VklINTM4TTEmRUw7RklCOkcpQi4zWUw+RDBHL1YtLTYmJUA2NjlSPSZZWjlFQF4tRDVBNkY5TgorTTlURF43VUVLO1VNJTglIVU6RFElOUY5SzwnSVIyMiBfOiVOIlonNV05RVE7MyNYVjNWRTk5R1VaNkIoNQorTS42KT87SC4mQEZNLS9TUTgmUlReMTVFWj1TOEc4JixQMlVdOTZHLVU6RUklKzI0TzlHVVI7Nk0vOEYpQAorTTZGTVA9Vy08Olc1JDdEMFI8SClIKTFMTSxGSUk2NEVMPFY4RSo2TU0yMiEkPTgtWjdCRDslMTRWIFVKNQorTThGTVo9N0lSMlQxKTJWJTk2JyYiPCM4XjhWOVUgNighOCAjXi1FRUkyMlVKOEYhOT04NiI4RSFGPUdVXAorTUBYIFYmUUBALlYtTDVENSQ2Rk1POERVSj1XKVAxI10/OjM4VjcmSUI6Jk1COlc9SDQ2LVVBJ0lLNlVAVAorTSs2KVo+Rl0lNkY5MC42JVM8VEQ7KzQwUDM2TVI6RSVCOzc1VTdGITguU11ANkRVQjhEMS06Nk1GOEVJQAorTThUXUs3RUE6OEYtUD1XMVI4IkRfOlRdTkdHSiI8Ri0pL1RQXiwmLUI6RllOM1UgQC5TWFYzV0oiQUZNJQorTSwjXVovUCxWUzM9Sj5HKSQyM0RWNiZBOjhXKVI9Vlk5L1JUTThWWU44Ri07OiVJQzwmSUo9Nk0vNkZAXgorTTo3QTo7V0k2JiBYOC8mLUs7JiE7Okc9OC1GIUotQShHOEg6LUBDUEAnMkRSL0QwXy9TMUsgV0ovNiMhQQorTTY0RSk6NylNPkYtSTo0QUYgNywhNjAjXjhGTVcvQiFQNjRUWTpXVVo8RiBeOFZNOzo4ITsqMUBAMjZNWgorTTpVRF8xNk4hNjJEWTcnKUgvU105PVVEVi1FWSUzNERNMSZRUjgyTTpBKClOOEVIXylUQVU/Nz05PEVEXgorTSpWUiM/NkBeNTUwRTMnKVs9RiE7NlZJVThFIUk2JUVCOERdLDM0RTg6VylGOlRVNjhFSUw4JUE6MyYtOworTTE0PVI4QlRHOEYtOl9GTVU/KC1LL0VBNiczRSw8WClONlYlKTVEREktRj1VQkcpKSxDOVU7VERNJlEoXgorTTtIKV81IVRcMzYpPjxGTUY+R0lSOyRMVjhGWVIzJDBWOjYhJDomWiI+RSE5MjJURzo4QU49OClJLSFAOworTTJWTU48RFUlMycpSDVGXVc7QzA7KVY6JUE2RTU3VVklM1VZJTEkMTs7R0ogOEI1LDZENSk8JykxOkYpSgorTT4oKSUxMCVSIDZMIF9HSVI/VEQyMTchKSs0UVI+RyVQLUZFTy9DITg8JixAKTZBWj82TF8tQyk6QEZdJAorTS1EXU84JEUpKVVdTC8iVFsyNTRNJiFUWTpXIEUrNkoiPUZNQzgjOSU8SCldOkhJQysyVUA+SClPMyYlKQorTSZXIVpAWC1SOlYhOThGQSg2Vi1LPFYpKTYkRSk2RlVaPEcpOjo1SSwzJFVGM1Q1OjdTWEczJDBNMSZdUgorTTY/WSw2VlYqPEQ1KTgjOFYuNkYiPkc9UzwmSUA2JTU7OUdVWzgzWF40J1FQNSJEOCk2KiU/NkBNLURROQorTThWUVc7Jl1RPTdJQjYmQUY4ViBfKCQ1SC40NTpASCkkL0NQOCI0MVo+R1YjPkYkRSYjWUM8RyBeLCQxUgorTT1VSS84R1YgN0M5JT1XNUw6WCFCNjVZPi5URUg7VjlLPkcpKzgkNE0vRz4hO0YpMTZHPiI4VUAhNkAlWgorTSAvWiM+SDlQLCNFTzojXSU4V0lGOENdSD1WJFwtRUlDLjJVQkBHVUssQUxFNigpWjolQTs9Vy1CNTIgVgorTTgkRFIrNiVVNTNQTS1VTVE3Qzk4OlZNRjhXIUk4RlVcQFctUjgiREAvVylaOkM4ViswWTo8RkVVPkcpSgorTTY2KVI2VFU7OUc1Ri4zOFYsJTlSPTdRUjQ3IUIyM1hJNiVBJDhVSTo4JkU+KjNZOTpWX144RylSPkcpSAorTTVEVT43IyEkQDdVTjxHNVIzNU1XPCYpUj02SToxI11EOSdBQSxCNS07NS1HOjRFQDcmTTw6Vy1SPEZZTgorTTZFIUo2REVBN0I0VjomISU2J04iOiM4OygiTFA4Rk1aQEdJQyxCIEUsJiFLOUM4VjonKUYuNDFaPzghSQorTTNVSUI8R0oiMzNFQDIyNDsxNylSOUZZRjpXISUmUjUkPlg5VzglSUtARkEpIDQwIUAgI14/Vk1OQFYhOworTTxGSS02JklaOERRODpXPUM6NkVQNjFUOzI3KVY6M1A1JTNdVz5GSTgxNilQNkZFRi1FTTYvIiBZO1VNJQorTTI1QUE8NkBeLUMhOjolRS87Vz1GPkdJUjZDXDgjQkU6OkZJNSZRNDUyNikvOEZJTTs0PSw8R0kwODcpUAorTTtDRE0qMUxZPEcpWjpUPUI4VilANiRdQzZGLUo3Vk1YQCVQXy1DIFlfQ11SQEcpSzZURFk4Vl0pKzVFWgorTTlFWUY6IzhZPTgpQzM2XUg2VkVBMTNeIDxDOFY8JixHMiZdKTpXKUM3Ji0+O0cpSzZERTk4VkUrOEZdIgorTSozWTYtRDFaQScpJCZVQTkpU0UtOUgpXTxGLT4wMiBeNlYgTShEMSkvUjRWOlZZUjpTUDspVjojQFRERworTTY0REkjQjVHPEcpUDgmTVg5Q0xbNjY+Ij83LUM2SClAKTAkOyA2ICBbNilJN0dJSThIKVI1RklaPkZNJAorTThXLUszJi1XOlYkSSglQVI8Rk05LEFMVjpHSU04NUFBNlQ1OTxVRTs6JTRbLyRVJCwiVF44VyFLN1NcVgorTTdGQT4tRD1LNydJXDxGLFsjQFg7NiZJSjszUEAwNi1JMyYpQjxHPTgxJik6MSVOID03KTgtQ1BNL1ctXQorTT5HKUM2RUQjOE9ZSDlFUS86Nk1COUc1VzZURFIkQU1APkZRQzgjOEU2VylQMjQ2IDokVTA4IiA7NkgpSworTTNVOSwzNyFXNiVJSz1TWFY6JikpNiYhJThWTUI2RU07O0dJUjpERF4zJkVAOjdNSC5SPF4rMlVQQkgpKQorTShEVTkpMlUpODcpVTxXKUs4M10pODY4ViszXF8qMTRNOEdJWztSVC4jQyFCPlRERTI1UFIlMiE4OjcqMAorTT1WLUM6VkUpM1ZFSz03OVw8JV01KCAkLiAyVCBfRUVPN0cpQjhXVVMzNVFSPFcpKTZHKT8pVDFDNDYhJAorTTI2TU46VyUvMSJEVjpXSVE4Ri1OODNdODlGRT46VUkrNiYhKS1CIEAvVTlDPEVNQDpGKSUrNEVJOEcpVgorTT1XPUkuUkRWOCYtOjpURFYyN01SMzRVOT5XNTw6NixWK1YtVkBHNUMvVTUpNkc1XDlGTUozNU1DMjRRXworTT1WQSU2Ji1KOEY5WzxGRSQiP1g1LUVJQjclSFwrNEVLPEcpQkBHISw2RiBLJEJVQz1WQUAtQ1k7OCVBLQorTThGXUszNiEoOCYxLDgnKTw6Rk1DN0Y5WjxWSSQoI0VBLjYpWjxGLSktQiA4MyheKjwlRSs4NERfMzYtSAorTTcnKVo8Rj07NjYpSzYkTTk2IzhJKjQ1Uj83PF8oIiBNMSZNPiszIT4xIkRPMTVNOz5HKUM4REUlNkZNQgorTThGOVs+Jk4iN0IgISUwJEAgKy05PEZNUzslTUg9ViBWKjQ1SzokUUM3UUw7LEJUVixFOiA4RVlXMSJUQAorTSk2IVI7RkU6ODYlODZWLUM8R0lALUNFSTgzXCMoL1hQNkYgXztXSUsxIzEpOjZJUj03KVJAJyk5OCc9RgorTTElQSkvVEVPPkREXjM3KUo2Rk1KMSNMWThILU04RF0pMzZJTD01UT8xJDFAMyM4RzZFWVA6NTkwOzcpQgorTTxHKUs3QiA4LENZJTZFSF4rNUFDOEZNUkBXSUE2RkE5KjFAWTtVUTgvU104NkREXjE2KVI6RiBeNUYgWQorTTZIKUo8VlFGOlQxQzsmJF4mU18qNiI1LDkmVVI6NERAI0JVWT03OVEuNDVTPCYpQjlUVUI7RylOPCZRQworTThVSUE2VkFQN0MgVjhGWVI6JE04NjZBTDokRE0sQ0xcMjVNOzMmOVU7VUElL0VBUDdUNUBAKClWOVVAIQorTS0gJFIgL1krMjQxSjwlSTk8RyBJJiI1LTxFTUw8JERJKTJENSgkNVo6RkogOCJMOCglSVo+VyE7MTRFJQorTTZHJSg6R0lPKzFMXjYkTE0qMkxHNjQwQjhISVI2JDE4OCVFSjpWTUJAV1VDPEgtUjIkRSUvVDVaPlRFJAorTTomOUM6RVFDMTREQjYnSUY2NUUlMyZJRjpWTTgrM0VCMjQwVisxVS0/ViktOUgpRjw2KTo4Q05JJiNNOAorTSwkMSkrMjU+OjRdLD5YKVo6RUlLPEREQCs2XTotQ1k4OCVAXy1CNE8zNUktODYtSTZEUCQ8TS08OlRVQworTTpWITUsQzk+KzYhOzhGSUwyMUAuKEVJLTZVND0vV0lcOUVJTTgmITw4RyFYPlYtPzI2JUE4R01SNyNdKQorTTM2LUc6JylDPEcpSjhFNEAlMlVIOjZBOC9XKUoyVURfLCZdSC9UVVs/N1VaPEAlPiA0NCBfRiRfJlM5OAorTThFQTk9U0wuI0IpQjhHPiA6NVk1KjBYQDI2RUM6RzlJLUIgVjo3TiI+RkE6MjNcWTZWLUE9Vy01LSNFOAorTTYzOFY1MzkrLEEpJD9XKTs6Jy1LNkVJOzhTWVM+Ri1GPkc1QzZFOSkrN0YqOlVJQjcmTUs2RU0pLlFNOAorTT03KS0xM104O0ZFRjxWIF4vRiEtODchKygiNUI6IzhZPlc6ITolIUExKiBWMjVAWS5TKDgoJEU6LjI9UAorTUJHUUI2JylaOjM4WTolSE0tRi1QODNZKS5QLEVVIlVBOkchWzo0VUI7R01SOyVJSj5GTUAvU105MjYhQworTTpWTUoyMUApLEVYTSsyICkvVylNNUNFQjhWKTwuNkVXPkZNOTU2RVA8Jkk8PkZBJC5UTTo4V0lGN0dJSgorTTtHIFkjQjVCO1ZBOS9WTUAsJERNJEAtKUFFRUk6VzlSPlAlVyA2KCBfRUUkKCE0TTtGRTs4RVBHI0BZNgorTTM2PUo0Jk1XNTFAQDYmITo2RylDKzI1NTxHKVU+R01QODYlKTE2SVA+WEFPOCVBQDdTOE03JUk4JiBYRQorTTgkRTg6V0lbOlVJODYkRUM5Vk1OOURdRzZGLSklNUVcQEcpPDhWKUo4RiEpL0MxKTtHOS0pVEVCOlY9RgorTT5GSUI2RDUkMzghSzUjKSQ3UihNOEZWIjxGKF82LC07OiZNSTYyVDgtI0U7NUIpQEI4SU82RyooPUYhOgorTTZVRFIrNiVaPEREXjIzMD0jQU0pMyVJWkE1SF83SC1aPEYpSz5HNUszJDU1MSVBLTgnKVo6JVhSL1ZARQorTSBQRlooRilfOCNFPzhGQUgyNUFGPEVcUDI2RUA4Vl0wO1ZcXy0kTTo7WC1INlcpSzxGTFsmIiEkOFZFLworTTdGLTgsIzhAJiI0OyhDWUM7JkEvPTAmKSA3TCBfRkU1KCBYRTwoNVA2ViE+LlFATTY2LS0sJUFQN0FMOAorTS8lRUI4Jz0rKTIgWzhWLUI8R01LN0cpSSwmKUI8SClaPEY5OjszKFY5RiU5MSQwXDEhTFA4RlogPEVJNgorTTI0VTs2RilVOkZNJDEmKFAiMyksOSclPDhFUVI8Rk04KVM5QzpWWTYpMzkkOCUhOUAmWV88RDE0LlZNVworTTZWJVI6VDBWMjVNSzhXKT8vXC0tPkdRUzhFQSQ2IyEkOyIoUDs4KVo4Ji1dOUQ1Sz5FQE0oJEVaPEZNOQorTS9DKC4iMiEiKVRFTkE4SUs8R1VaOUYpTD5GOVo+RiBQKVVNMyc0VVo4JylOQCZAQCBRNlooIzlLQCYtQAorTTE0NU48JDVAPDVAUjI2LTgzJz4oPkZNJCgiVF84V01ALjVJSz5GXFwqM1k4MTVBRDhXITo4JUE0LEMwSQorTSoxKFA4VFBeMzAmIiA3XCBfRyE5KVFATTlILVc2RU04OCQkNS9FRSk2NiVBOiU0XDEkVUo4RiBZNiNQVAorTS40NTo8Ry1CMzdKIDYkXTo2RVE7O1VcXzYiVEc2Rk1IOCVBPjdDUF84VylaPEVBODNUXTg2VkE5MVc9SgorTTZGJTUtJE1LPEZZQi40NVJCR1U5KzIpQjpGTU83REUpNiRRQjxGVV08RFFDNiRVSjZFUVo9RkUlLCVNLQorTS9EPUMvT1hZPEcpQzwmKUA6JFU1OiNdJDZWKTo2V04iOFNFQD5FSFYtREVSO0ZJSTUiTCklMjxNJTRFOworTTlIIVVBN1VROUY5WzxFRUlARzxeKCU5KCk0RUoyJi07PkcgUiwjUFsqUjUtPlYpOS9TWUY7U1k4PCZBJAorTTY2IUM6JjojQEVIXi4yNFs2Jik4LUJVJTxHLTUoI0VPMTNdSjtHSS04VyEvL0NcXy5STE0yM04iLENQIQorTTtAJU0gL1lIOCQxJC9GSiNARlFCOEcpTC8kTTgxJFU7ODVJTzpGRTo6JkBWJlRFPisyIFY2JylQNlNFRgorTUBWTUA3JkElL1VBSDY1QSIsQ11DPVRAWTNXIT4xNi1LO0chKTYlQSk2JUFAMzMhPjxGUVI8JDE7PFgqIworTTohVDs2SFYqOkM4OClUVSg6Nik7NjQxLTtWOVs/NihbNjQ0WzZVTUM5RzVVPFYhOTdCVDs2JiteNlchLQorTSwmIUo4RUksOycpLTMnSS0pUzlLPTYtJDonKUI2JUU8PEdJQjZGOFwmIjxQKCBYSS1DWS02WEFaOEVRSworTTxHKU87RylLOCVBLzZWQUI6RilQOkZJPDszXF82IyhAMzghSjM1SS06VkRbL1YhVTYjOFAzNyEoPEdMVgorTShDOEUrNEU6MjM4TTU2UiE7VDEpPEVETTI2UioxNDVNNkM5JTM0UT4xI10pQEQwWSA2XCEyICNeMyNZJAorTTolQS07R0lXOlZJUz1WQS02VEU1OCRVJThXSVo5RjlJLUJFKTYkMFIuVUFXOFYlSDxHTU48RklKNiRVOgorTThGUUM4I1hfNjZJOCszIVA4M107PEZNSzNVSTgzVUEtNiYgXjIlSSg8R0k2NiY5XUElXDIjQzldREhJOQorTSkyRF8xNFUkNjVIUC9UNFc6WC1HMTZEXy9WKUs5RVk8NDcpUjM1QFskRDFaX0Y5Qi9DXSQ4JiEsMTYtUgorTTMiRVo4MyhXMjYtLzJXIUs4RklLOkZdWjpEXUgyMUA4KCFANSgjOSQmUlVbPkVFOjwkXUY/JzU5L1YpWworTTYkVVM2RUlKPEgxWjZGSTUvRUhcJlMhUjpGSUczJUlDL0I0WT1XIF4rNDFDOFgiIzUyRE0sQihZNiNcRQorTSZTRUtAJilCPidJRysyNSlBNVxZOERESTI1TSc4Rjk1NjgpOTNQJVAgNUAgX0YhKS42LVcyMyhfOlcpRgorTTdGWVcyJFU5L0YlKTI2JU5ARyE6NjNdQT80RSs3Q11IPVYpQDlHKiM+RzogPFYhQDdUUUY8RyE/NjYlSgorTTlEMF84ViElODdBUTpWRTs4NEU5NUVFQzo1RF8pVUFCNUNFO0BIKVgwMUBSOlg6Kj1VQF82NilAKzNdQQorTTIzTEIoRTlVOVNdQi4zRTY9VklMOjQ1OjpFTF8mUFhNPE9ZUjZEMUA2NjlAMlM5JDxGXSk+RkklMjRFOQorTS1DITw6Ri1SOlVJSj5GTUM7NURcLEQxJC0jMSk3IShAOkc9KDhHVTo4R0lSOiNZITlDWSQ/VkBfMzVFTQorTUBIKU83JEU4MTIgSTglSUY7ViFJOiUwUCxFSUI1NUFBOCVaIkI3KF4pM1BJLUVBJCUwWDUyNFRNMSdJWgorTTlSVDUpVklLNkZdQSkzOUA4JUU6MzRGIjM0TCE6QCVXIC9ZUjYjXTo+RlxJJTJVOTYjRF89RTheNiJUVgorTS1EXUw6R0laOzNcSThHXS0vVkReMScpQjM1TU5AVylDPkghRzM0MEkzJy1aOlYhQTZWRUM6Ji0+L1VBTworTTpGLUM2NUBeMjQ1ODM3IVA2VUVINjVARS42VV1BJyBWMlYtTkBHSVIzVFFCNiI9ODxIIU8yM11GOkZJQworTTlDWD0pNk1LPFc9LTMmTUs2IkQ4KTYrXjcmKS02Ni1ROychLS1FSiJAV1VLMjNcVjIzREkuNilDPFctSworTTpHSUY4RyFDNjYhSjtWRT86RTguKTVdUjJUPVI4Vi1KOzctVzZVQDsrNz1aOEVJPzhGUiw+RUk4N0RFNQorTTI2LVA7Vk1CPCchQDU1RUYxJiFKPEVNLD5JKio7U1BfMSNdKS5RQC4jQTQ1I0M5Wj5GKSQtJDFINjVBQworTTw0RF4zVkU2NkZdOEBENSkgNDwhO0AjXjpWRUg6RlVaNSI8QCs1STMvRiktMTU0TSUxKE0zJUlSPFZcVgorTSo2KUkrMyFRNiJVKS9DMT85Ryk7MjUlTT1WLF8pM0VMPkdJSzgmIT87VyE/ODQ1OjtGSUA2JERfMzVEXworTTIkRUA+Vj1QO1Y5RzEzRUg7N0lSMTQ1LThHKVU+Ryk6OyVASTE2WipARzVLOkc1RkBHNTwrMUxQNDdJUworTTMzRUs8Rik+LEMpOEhTPTkxM0U4NlYhUjxTXEc4SEldO0VNLzEjXSQuUz1BO0ZRUjs2WVI4RFU4MjQ1UgorTSBYKzo6VylNJlNdLDhGRFk2I0UvOCYpVUBXLT4iMUElO0c9QzhWQS8+Ry0lMyVBKTVGITk8Ryk/NjcpUgorTThFTUk6Izk/PkgpSTM3SjJER0k7MTVBODgjXFQuMiAuIjBYVkBIKUoyNE1RQFVFODhWSU87VEFBLjNFWAorTTwkNSUgNkAhNjAjXS42PilCR1VbPCY4Vi1FTUsxNkFCNkYgVipSTFQrM1k2OEYgXDI2IUApMjVCOUJURworTTEkXUY+SCFSOCRVQjxHITkvJE1COzdNUjpFTUE4RilJNjRVOjpXPUw4JVkpOFZFQS9DOSU2JUlKOERROAorTTo0VUk4RUVCOUYhKTYkVTs+WCk6OkZBKTVHKik+JzVOPEdJRDxGOUk4NTBWN1ZdOjI1QUM9RzVSOiQwIworTTZPWTUxNDA7KzVJUjgyKFk+R1FOPVchQzUyVEUoI1lPNkYhRjpXKUgyMlQ1KCVGIj5HVVI5JyhFKzNdOAorTThERFspMjRbMSVOIjtFXFkqMlUkNUYhQjpWKVc8RDEpL1RNQzolTUA8RUU6PEVJKS9GJTksRFVVQTcpPgorTTtISiY9NiE7NiVBUDZFSVg1MiA1I0JFUD5GLSUyNyomOiMgUjgmOVo6VjxJKTRRPylSICE9UCUkIC9YOworTS43SiU/J1VaPVVBQTsmSF84Rl0wOFQ1KTYlTFYyNERXL1M4VjNWRTUtRUEtKzI1KTo2WVZCOClQMyRVQworTTokRF4zNkVKPVcpQzNXPUsxNi1ALjMhOj5HIVM8NiVJPEcpOy9VQSwuNFUlLUM5QDgmSUsyM0U8OCVFQAorTS9DRVM8U11COEMgWTxINVw8RilMQEc1VTxWXUIyNEVKPCREXjM1UVI+R01XOiY6TDpFRUE2IlQyKCM5KQorTThUMFA4RlVSPkZZUDgjMDUsREU4MzRFOTtHKTo2ITQpIjI9OjY2OTovVV1GL0M4IzZNJFk2RylKNiI9OQorTTg2QUs4Vk0tMjQxSzhFSSk4I1xfLURFSzojWF88JklCO1ZBPi1DOFwqMzk7PTZZQzknViI8Rk1LOjQ1SworTTs3KVI8NUUhLCJVQDlFTSk2Vz1dPVREVjZWKVU6VlE4NURVOCsyICE3ICRWIC9YOyk1SVU9JllGPkZRSworTTxGSSQtVz1SOFYtSztVQTg4JUBWKzM4TSs0VUk2NiRWKzU1QTpGKTA+SDVbNUNZOTYkRTU4Nik5OkddQworTTM4JVczNiVDLUFARzVEVVI8RSVXPzc5OzY2TVAzM0UpMjNEUDElSUs2Q0VCOiVJQzdTXUA2QzlQNiI0RQorTTM3NVU7NkFHPTZVTT83STksRkVaOkM4VjdWKUc2Nz1KOUdLXjpFTUg4IlRAKjIgVjgjWEUvRFFTPzZZUgorTTgjKDUvRiBeMjVBKTpWSSU1ITQuJTIgXjY2PUI1RDVVPFRFODomKS0zNzVTNlMgWTM2Sig+Ryk6OFctSQorTTg0RFY9VU04LUNFSzdRVEU4RllKOUZNVzdDOSQvIjUsOkQ9OjpGVUI3RylSOiRVSz03PUM8JyE4N0VdQAorTTM1TF4zV0ldPEchODZWUVo8RjlSPEZFOkBFNFIgRTQgX0NMVjI2QUo6Vi1TOlYxVTtTWD03VylDOkctWworTTZFSVI6VERFKjMoOy1FQF8zUyhWNlglXzpVSUZAWCEtLURFOC9UVUA4MzhSOkVMUkA3SSw3Vl01KjFMTQorTS41UUIzNyolPTVJOzpWWUgrNEVIOjNcXys0NTkxNilSOlYtSjglXF4nNkFALUM4XjY2KSc4Vz1GOlZZVQorTTxFIEs4V0VHKzI9OTpFXSU6Vik6PE9ZSzpWQUI2I1kpLURFQzZERF4rNi1bOzchLSoyISk5I1hfN0VJQworTTclOUAvUykwN0YhQzhGSVczNk1aOEVFSzpGLUM7RzVSOCU5LDhGSU49M0UsQEYlOC41QVI8RyE5KzYpQAorTSozOUo6RiVJOEcpOCwlTUgtRDE6MSQxOTZTWFQ6VklAOFdNUThFSUw8JFE6OFYhQDZTTTg9N01APEYtJQorTTZIJVI0NFFNPlZOIjYhTCEtQCU1IC9ZJTIzOFk2VUVDPVYpQjxGSUAtQzkkMyVJQjxGLUs9NylPNTMoSQorTSgjUUYxMzhFLUNdSEAoKUI2R0oiNUFUUDcmISkuNUU1L1VBNSs3SVoxJFVXPCVYQCs2MUI1REVGQEc1OgorTTZHLVI2QlRfOlcpVTlCNFI2JV1KO0cpSzlHKUgvQU1DOFQ1LTM0MFkpMyE4LVYpTjpGWUg2RilEODM4TQorTTM1SSQzNi1MNlVPXjhGSUo4Vk1AMjRFODpGTUo1QjRZOlYtSzZUMFY1Rl08MjYlQzpGKTo6VyEsMjZdPAorTThVSUE8REU7PVZdOjhGTUI2Rk1LOkZVUjhGKS03JylOOCc1JS1ENTs4SCFOPFVBODIzUSk2RFRQNiU5QworTTYiVSk6RyFDOiZBQDY1QF4sJU1DM1YtXTgkNS04Rk1CMjREXzZGSSw2RlVZOFYpQC41RVs6U0RJMTcpXworTUBGOFIgMzghL0AjXjo3KUYxIzhFKTRVTDhURSk8JjxeL1YlODEkVS86Vy1CO0c9LDg2TFAuNiU4L1QkQAorTSkzWUA7VkUtNjRESSgmIUo6VklCNDdJVDhWQVI6M10pPkghOS1EMSkvUjRNOEdWJTpTRSw6Mzg7N0dJUgorTTpUVE0xI1k6OEVJUUBIKVI0I1hNPEgqKj5GOUk3UzBALEMpKTZEXS05SCoiPVZAVic1OUAsQlU6PEcoUAorTV9ENTo4VUlCOEYgXi1ENVpCRyk5LjUhQjY1TS0yU10kOEchPDhVTTw4RF1OPEREXy9DXTk8Rl07NiVNQgorTTpGISkrMkU4NiQxJD84KUMxNDVAPUdNQikyVUg2NUlCMTY5WjtWISszNiE5LUVNQzZGIUA2JkooPFRRQgorTUBIKVo6M0xQNiY9Uj02RSktQyFAOiZBNSsyXUA2VDU7OlZFQjZWLVI+RylALyNRLzlYKVI6QCVOIDZEIAorTV9GOVc9Vk0kKCFASTNVXSQ2J11QNTNZODIzISkyU0VCPEcpQyozXU8yMj0tNiNdNSxDMSQvRUlQOEZBNgorTSxCITg5R0lNOlYtUj1WKVA4RVxWKzZKIjpERSk2MlQuJEU5Tj83SSwvU1xFJlVCIj00VSkpMzhNMjRUXgorTTY2WiI+VEQ7JlVJTUJHVVI8Rz1JL1JUTTE1IT8uNioiQTdVUi9SRF84ViU7OlZJTjgpNSs2JklDO1ZJQgorTS9TKEU2NzVaPEVBNjhGKTsxNFQjOCslQjhGTS82JylCOkZZLTVEREUsJkFaO1cpSzY2SUozMiBANyYlLQorTTZXNiU4IzhHNkc1UjYxTEk1REVJOCRFQjtGTUggVi5UOlRFLThFXS8yNFVSQicgUC43LVpASC1JLUNFRgorTUBHNVcyMlRSNiRVLTglQF4uNFUlOkZJNjElSUo/VlVVOkYlLTYlSTs4QCVQIDYsIF9GSVI+Rz07MSIgPQorTSs1OTo6V11WOjVNQTEzKSU3QyhWPVddOSoyNTg5REU4NlQ1RjEkRUgzNSFMO1ZZQDEiVTgzNkksNjdNVworTT5FIVc7RkkkLUYuIDlGQTg2M1BQKTYtXUE4RUoyUzhAKCM5UjpDIS01M0xbOCVNOTJUNTE+RUA1JTNFSworTT5GOTozJilbOlNYXC9TRE0sJioiQTclUjhVNF8vRj4iPzZJOTouVUAzNklGPTdJSzgkRTU4JUU5PkZJSAorTThXIUAtQlVCPEc1RjhHKUgyNllSOlZJQjgzODUlNDFSO0c1WjZGKVdAIjRAOFZRRjY3Nio2NiBWMyZZSworTTozXT46JFVQPTchWzZWKUgxJilKOlZFQjomITgvU0U8PkcpQDJWIUI+SC1LL1I0Xz03KVk6I1hNNiNcTQorTS9VTSkgUlYwOEggTSlVXUAzNF4gPEVNLTpXPUEuMCVIIDZcIF9GKVU+R0lKODMwOCgjOS06WCFSOjYtTAorTTIyNE0vUyhQOkhJTy5SIFA2RkVdOjNFSjtWRVA2JF06NkgpSzIzUTYxNUBWL0ZZUjpVSUs+R0lJOFcpWworTTomIF4uNkFNMlgiKkEnUVI4VTk0NTRNSjhTXF42RF0kOCYpUjpVRE82NThSLCI9Sj01USQrMyFQOENZQAorTT0zOCklM0VbQTZZQjM0RFsnM11VQEc9OjhfWTYtVilVO0ZZRjtVXS04VlEvNTZJTzZGLUItQU0kOkZVSworTTY2OVE1RyFLOiRdSjwjTC4jQjUpMTY9VzMkRUZBQlRcOFZNTzEmSiY7NklIOFYpKDtUNTg9JiFSQDZdVQorTTolSUcrM0U6OlchJDM0VSk4JiEsOlVFUj8mPS06Vk1EOjVIXzMmOVU9Nkk4NlVBKzY2QUExIjQyLjZIXworTSgjRSQmUj1PPENEUDdYLiI8I1whL1AlOyAvWTo8R0laPEcpNSgiIDsrNTlLNUNdKzhVSSkvQyE7PEZJUAorTTM1SFQpMlUpO0cgVjEmVU84I0UpNUQxUjpVRFQzNFU4L0NdSDhFSFk3Vk1VPzdJXD1WQUAvUzk6OlYlRgorTT82WUY6RUlLOkcpWj82XSw3RTlAMjRRLz84LVc3RTk4LVVBKThHSVc2Q101OFMgOy42STwoIUxfPEgtVQorTTlTOEUuVTEpOkc1UjhWIiYxNEU6PTc1WiBXK1cxJUFQOjIoWThURTk6VUhbNiVFSj9WKUo8RTk7OkchJQorTTE2TUcqMVRbLlI0XzdSPFY6R0hWNSZNQzYzPSw2VU1SPUgxSi9WKF8rNFFSPTgpTzpWSUs8RTBNL0ZBWAorTTIzRE0pNEVINkchQjs4QVo4Vk06L1cpWjozOF8zNyojO1YlQDZWJUM7ViBcKCJUUjhEMFkvIkxNNlc8TQorTSYjIVI9NVghLCAlKSAvWTk9NylCNkZZTjEjUFIqVDU4MzRVQDpWTUo1QlRfOlYtSzhWQF4uMiBFMzc9KQorTSwlXUIvQlReOCRFOjgjXFQzNiU7MTNdQDYjRFIyNUlGPzgqJUAmKSw6JyFJOEZAWTI0MSQzJDFPOkVRTgorTT03KSg6JylPOiVBJDo3QVU4RUlBMiQ1W0BIOVo2VF07PCNMRSozKVQ3QUxQNjZVVT1URDstRiEnOEZNLworTTlURzgsJkVLOUcpWj83VUY4NU1SPlI1ITIxVFk7Nk1IM1QxLz5HSVk+Rkk2OkdNSSwlTVIyMlRZMjMoQAorTTIzKDs4Nl06NUZJSjM0RSUpVFFXPzg5WzZVSTguU0VKPTgtWjlFSUs+RjxWKzVdWDZDWEAlMlU/NURVQAorTThAMVJJJiRZNlcpSjIzKEIyJ0lLOEZNQjIlSVI9VU0vL1NFQDgjXS83Qzk/QCZZJC1GLVI8ICRNIDQ0IAorTV9GKVU6ViU4M1YtQDVGJFQtRFUpL0RdS0AnVUMtQyFDOlYtQzxEVFImUUBeOkVBNjomKFsmU11IOCVBPgorTS1CVFQ4VyE4MjRcXik0MSQ6Ji1VPTc9WzpVSUs+RklCOENEQis0RSUtRkE/NlVJOjpUVTs6RF1KOlRRSgorTT83NUw4Ri06LjVZVD83NUw4VU1DNiM4TS1GQVI2Mk04NkY5WjxEXUg6RFEkNkQxOjYvWE0zNklKOSZBVQorTUJFUUM5RyoiMTRBOCoyKTg6RkE4LjRVWj8nNV1ARU07QEhBPzY2LUI4JTlDO0I0Xi8hTFk6RyFCNlZJOworTTZWIFYuNyoiQEcpOzhWLUY2JkU7OjVFNi9WLVo9VURfOCc9QSsyPDUsRjhfLCREWSlTWU8+RyEpNiVJSgorTTgzXEktRjlCOlZNSTM1TVI+RklKOiYtQzZCKFAxIyEtPkdJQC41RiI6VyAhLSAkXyAvWUk/VylLOlZFQgorTTE0VVI3QkRZODJUTS43Sio8RURZNCYpOjhXSVcxIkQ7MjZBPzpILUoyM1FAPEZJUTgzXFwuNUlLOlZRSAorTTIzKFI1NkVSPVVJOzxHIUs7N0lLNjVJKSZRTTw5VUFJNkZBSDElIUo4RiklMzVIWTcoSVI7RylTOENdJQorTTFUXVI8RkU+NCRUWSo1QTY8RykpNiVFOzxYMVc+R0lIMSVBPCtXP144RV1COlYpMz5IOTovVilaPTU4UAorTS9CRDgyNzU6L0NFJT5HTSg0J01CNkc2IjxGLS84Nik4OkcoVjIkMFsvRUYhPEUhQjomIUk2IyFKPTdJWworTTQlIUM6Jk1LOkZJJDI0RTg5WCE4MjQxQjYhTEkmIjVEL0NZOC8hQDs4J0laPCZBOjhGRSs5RiE+NkYlQAorTTomQVI+V0lSPEcmIDpURDgmIUw7LjcpQi4zIFlARV1QIDVAITIwIyM5R0lLNjcmKD1VSTs6RyE+MlZAWworTSoyNTk9N0lSNiU5QjhFTUtCRkBbKzRFQDgmOVo6RFE7PCdJTkA3LSkvU10pOCVAUDIzXE0tRUFJPVghLQorTTElRUI6NSFSO1AtKV9CVEUrNFVLO1VJLThWIS06RyFDNjVFKShEPiI7NllVOUZJJC9FOTo4RzVdPEZBLQorTS4yPF4uNFFINiYpSDMlWiM+R0oiPEQ9NjIxTVI9Nik5N0ZNPDlHNVM1RDVLPzZJJTUiNC4tRylXLjI0UAorTTpXXSksJilDPEc1WjxGSS0zNDUpOFYsVjZGQUk6NF4jPzRROjpWLUI8JiFKOEcpXTlFSUgzJU1COUZZJAorTS1KOTg4JDFIM1VFOTZEREkoIUBJNUM5STpEREArNj1VPkZZQzo2JUAtRiFKOCRRKS9ERTk6QC1aRDZVUgorTUE4KUMsQVQuJiNdSzhEMF4uM0U/IDYoITZQI145Vk1CMyY6IkBHNVI8RjlGOEZNQDI1NUA2NUVaOkZBQworTTpWITg+RlxZLEM5KTdXPVI4JFFKPFZZRjo3KUEtQ1BZMzU4TSxCVFY2NjhWNCgpUDMzIFA4JDUoOiRVLQorTTYjTEkpMzlJPEVJOjhWITg2RklCNkZFSSoyPUM+R1VWOEVZOCo1OUs2VjldPzZZQjMkTTk3RThfLjZOIgorTTZTXUI4VU1LPEYpQDIyNTpfRklKNkVBTj01STk6JikpNlgpUjpGQS8lMSk6PkVcUiZTRUIvQlU4OkZVWgorTT02OVU8REUlOjchOy1EMVI7Nz02QEdQWTI1ST8xVy1LOiQxQj5GWUw4RiEtNkRVQy9SNFk4NF07OiZNSAorTTEzXUY6UzhWNiM5QDhURE0xNylaQEY9KThWSUMvRDFPMzJVKTcjOFAxNllVO0VFTj4oSVM3IkQ4KCU5VworTThGQUI2WCk5NiAlLSA1TCBfRk1SODVFPjtHVVU7SDVbOUVZRjtVXS04VkUvNUZJTzgmLUA2WClSMTM4RQorTS41OUo6VV0tOkZNQztVQTk6JEUkLUVBOC1CIDsmVTk/KTJVSzxHITUrNDU5MzZNSDYmISUpMTRFODchOgorTTYmTTk2NF1KOFVBSjxUREIuNk4lQFZdOTYjOF40JkU7O0gtQjYzOFk7NylIKEI1Q0JHNTkvRDBeLCZJWgorTT5HKTg6L1lKOFY5Uz5XSTszNUEtLjYuJzlFUS87MlQ1LjYpMTciNFIvQjQ1MSYpMT5HSUI7JkksMjchUAorTTpEMFI4RllXN1dWJS4yNEIvQ0VCODYtKTImTUM3RDFJODRESzhWITUyNiU7NlYtPjozOEk4SCFIL0NdKQorTTU0NF41JkFSOzcpNi8mKVI+RkBZOENcOys1QSQtQyE6PDYpLDgmWilAJlUwLUJEXzomLUM6JFYiNUVIIQorTS1AJSggKFUkOkZFODY2KVo6VVFdPkYpSiBXK14xJU1LOFM4WThUVTo4QkVSQCZJPy5TISk2RUktOichSworTTtWTTgzJyFJNiYlTDgjTEAlMiBWNTNRJDY0VTs9VjkpNjVNQzpVQUYyMUAuJTRFOTg3JVg2Q0VSPEVJQworTT5HVUEmUU0sPTc1SjYzRFsqMj0sNkQ9UjhDRDsmVEVBMiBYMjE4KV08Q1hNKTI1LT04SVU6Rl1SOFYpVQorTT84PVM4JERNJTNFWjhGQUJcJilAMERFLTNWRSkvQ1BJKCM5SDE3KiJARzVIMjRFSzpGSUktRDFSQUcpTQorTUJEUDIiMTRNOjZJOzZCVEUsQ1klOEcpUjo1SU86VUlKOlcpSzZWKFYtJiVaQCZJQzgkQE0rNUFaPkcpQworTS1CRTg7SDYjNkYhLS8iVE0tQzkkOFYtSjZFSUM+R1FXOiVRKTdFSUA4Rk0pLCNYIS5QJE0gL1g7L0Y9TworTTZFTUY7VilNO0YpQj83VUY4NiFLO1M4XzIyRFk2QyE7PEcpVztDOFAyUzhWOEZJQjxHIF4sJV1VNDZNTgorTThEMDgpM1BNLUZZQDEiNFk6VkEtODVNJDE0NUovUjRLKjQwUC42TiAxUj4hOkRRQjs4KUkqUjUtPEZJQgorTTMzOEkxJDBNL0RVSTZUREkoIzxWL0FMODE3OU09Q1g7KTNRJDM3VVo2NktePlc5TjxGKU1AVylIMjM4XworTTZDKUhARk1LPEZROzhXPVA6JDBWNSNZSjI1RVxCRzVAMTRFQThWOUksQilCPzc1VUE3KFwmIFhCOiZZQgorTTgjTDIqVUE1MSZJXT5GLUo8RUlLOydNWjhUVTUyNkVXPlcpUjwjWDsmJEVaP1ZZPykxQEUxWCoiOkZBJQorTTIyVE0tQ11BPVY5QjZWRUA6R0ldPEVAWTZGJF84Vyk5QEJURSA1NCEsQCNeKCFMWTxHPTs4R0lSPEZVSQorTTo3NiI4Ri1GPEdJKTIlQE0rNDRFL0RRRj5ILUArNDErLyUhUDMmKUgqMTRPOjVJQjpWTSQoJDFOLlFNUAorTTtUME0vRkVDMyVdODIzOF44RUE1LUM5RisxNF44QVQuO1YxOzY1JU4zMzkpPEc1WjpFQFwoJiVLNiM5QAorTT1WRUA3RE0kLUREVy5VSU04RihNI0I0TSsxVUI+NDE7X0dVRjdHSUY2NilGOlZFODYkNDsyNylSPkgtUgorTTZEVU4+RzU8LjVJOTQkRE85WCE6LjVBSTg3IUs2IlRNNkcpSj03NV09IyguJiRFSjpHPUgoIU0pOiYpUQorTT02WUI6RkklOCZKIkBGKF42JUVLPEZNSz5IKTgmITRSN0c9QjEzIC4lMlVRPTdJUDM2IF8rM104Ojc1XQorTTxGPVc3JFFaO0cpPy1DISknM0VPMzgoTS1AJS0gNDAgVFJUOCZUVUo2RkVaOkYpSjsmKUgyMzhWMjZFQworTThHKU8yM0UlLUNMSTgoKiM8IzxWMjU1NjpWQUI6IiBALlVFOTZGKUgsQUBSOFU0RTpGXSkvRFVLOiRdOAorTTgkRTgyNDBZN1MoOzZERDssQ1xNKjVJMCBXK146U0RCL1dNXD02SSwtIiFJPkZIXzI3SVo7VilBMjRNSQorTS40RUo+RllAKjFUVC8jKEk3VihNN1ZROjhHSVo5Rlk+OFYhODE2WUAtQyk4PVZNSjM0VUs7NzVLMzYhSgorTTdVQE0yNyk/KzRVUDhWOVgyMyhfOFYtSzpGSVI7NVxSKCM5LThHUVcpMFg7LUYpWTxGTUY6JlxWLUVFVQorTUBGKSkyNUFAOFRVOTpXKUJKRDRULURRQjo0UFQmI1FAPEcpWjxGKUAtQUxWMjVJQjlHSUs8I1hQOEVJPAorTTpWIF8uUjReOERETSwgJTsgNjggX0U0TS1FWTgxNilaOiRVQjxGSVczMjRALUYhMDZHKig7VUEpL1NcRQorTTI3SiI6Q1xWLjQxQzwnSVI6JF0pN0VJOTonKUkvIiBAMjQxKT1XIS0vVFVKOlVFKTYkMS02VFBWMjNYTQorTS42QFsuNEU5OCVBJDxHUiE+RTRSKzZNVT03KS0oQTUtO0ZAXitWTiI8RFEpKVRFVywjOSU+SDlLMjMpJQorTTo1WSk4I0RFO14lSjY1SVpAVSEtOCVNLTtFWTozMzhNNlddQjpUUTg6VilDOkY5SzpWSUM1MzksNiNZJQorTTxGSTw+VUBfMTZFOjM2KUo5RjlKNUM4Vi9WKVI7UzhAJiE1NjxGVUo6R0omNkNdQj5HNTYsI1hSKjRFSgorTTdURSU2JiVBNjRFLTomWFsmVEVCIFcqPDlFUUcuUiA1KTNFJTElUUo8RUU1NlVBLDcmTUk2IlU8OiVBNAorTS1AJSUgNlwgX0VdKTZWWUk4NkFSNkQ1Sj5HKV8+I1A1LSYlPi1DKUpARikpKzRFSTYmWiM+RyFBL0NNQAorTTQ2LUMzNilLPVZJNjZHIVc6JDBNKzIgXkBHSVA4Vi1TOlVNKTJTXF44RklXOEVAWS1FQTgrNDVKOEVFKworTTtILV0/NFBWNTZJUT5HSUIsI0U2NCVEViUzWVpARkhNKCJVQTEjODUsR0lLLjREUCwkMUg6Izg7Lj9ZOgorTTYkMTo+RixZMjZBJTdHTVo8M1w7LUdJQztFSS0zJFVAOlVRUjxGKUIuMiBSKTFATTlEUFQ4RklALVVJPAorTS1FSUM5RylGNjQ1KTYlSUo7VUEkLlMpQzxHKUY8NjlVPFU5JTpXVUoxNTBNKCM5Uj1URF4yNilANjNcVgorTTZGTT4vU10kNkYtQjdUVUg5RDBAKCM5KTNVRUI4RFVDOiVFLDZGSVI2IyE7MzNGIjIzWCErMCU2IC9ZOQorTTYkNS04R0lbPVNYPTI3SUY+SCEkJTFNJDwjTDIuN11XLUEoRzhGKUxAV0lSPCVBQT82JTYvUkUvOldOKAorTTs0RTs8Rk1CODQwSSs3KVpARylGPzgpSC9TXFYvViE6PEZJSDolTTs1QVRFNkVJJTgmSVE9N1VCLCU5TAorTT5HOVY8REVCOiRUVzIzOFk5SDYjOCU1JTY2SUgsQkUtN1MhJDlDWE02RllALEJHNi9VQSk2RylBLjRFTworTTYzXTo+SClNKCRBUzlHOUsyMzhCLjchRj5ILUo7M1hSLEE0LiREMUYxNFFSO1Q1KTtDXE0vRylaPEYtPworTTIzOSs4Rik2KTVJSjpFSTg7RzU6NjZBQjI1TiI8RklIM1IgRTVHNU86NTgjMjo8XzY2TUgxI1kpOiYgXworTSoxTFY6Vk04L1JEVjVFQSc8Jl04NiY5SztWQT46VkBWMzREWS5TXCE1MCUvIC9ZQDpVRFQxJl1aPkREWworTS1EUUs7Jk05LEMpQz5FNEApNilXL1IhJDIkVUM+R0lCOEVAXzpHKUE1MkxFMTY6Ij5XPT83Jk1DPCZEXworTSs2KVpAR0lGPUhJVzIzME0vVilCOlYpSjpGKVE6Iig1LEJUXjpGKSQ4Vy1DL1QxLTxGWVo8Vi1VPTZIXgorTTIyVF46WDopPEYpNTYmKVM4I1BeOCVJSD5GQTY2Ry1LNkJXSC1GIUIxJU06L0RVUjhDXFY6V0lLKTI1OgorTTtXKVI7VVhNKzRFJzs3QU4/ViBQMSQkOCNCVUg1REVNPEZBKThHITQvVjk8OzghSzgjXSk+R0lSNiZBSgorTThWOVM9RzVGMzVBLS42Lic5RVEwN1M4RS9GMUY6Vik8MlU4WTM3RVIyMlUkPlYkViZRQE04JkAjMjk0WQorTS9VRS02Rz1QLjVJUj5XPUg3RyFANUVJNSlTXCE9MCU7IC9ZLzpGUT4yNiU8PEUhSTIyRTs8I1xfL0RdWgorTT5FRFssRF1SOzQ1SDgkNS88R0ksMVYgWTZGKT86RiBAKTNFVz83SUoxVUVCOUZNKSo0VU0/N0lSPkdVWworTTozMFQxNilHO1ZJQjtGXVU+RVxbLyI1JTxFRSQ6NiUvNiYhOzpWOTw4VllVQEdJOCsxKEk6J1YlQEYpKQorTTE2UUs2VTBZMzNdQj02KTA6J0lLOjI3Kyk1QUsuM10tMTVNWjhUTF84VzVBMDMwXjM1UTk7VVElL1U5OQorTT1WWUI7NyBQMjY4SSYiVSw6JUU6OlYtLTY2SVAzJikwNydJVTZDRTY9OElVOkZdUjhWKU48R0lLOCRETQorTSUzRVogVipSNkREWy9WQS86Vy1LOFVAVjEmTUkxMUxNODVBNS8jMSk7ViBbNUZBQDE1RTk2Rk1QKVRRTgorTT84KUo3Rk1LOEYhKykyPCFAMCVJIC9ZNjEmTUw4Vk1JOiVNQzgjWTk8IlQ7KzQ1VzxFSTYvUzk5OlVNSAorTTolRTg6R0lGMTRQXjIzXSQ8KCU8KTI9QjxFUUI4I0UwPCZEXyk0RUg8RzlOPEdJWjxFQFYyNilKOlZZRgorTTlHKipDKClDOiNdOkBGTTY4VExfM1c9TjpGIFYyNkldQTg1UCowWEAzJklVRCc9JCk2SUIxJkU4OCJcWQorTTIjIEczNz08ODNHXiZTOTYuNDUkMzZBSjM0MUE7Vyk6NUchPy9GKSw4Rik4MTRBS0BXIUI5RyksMzZdKworTS1EQVM5RDVCPCQ0WTdVRUg2RklPOzZVWjojISk6VkxZKzZOKDtUVTg2VUErNjZFPi1CNTY8RVklMjQwWworTS5WLSs4V0lWPEZNQDYmTVA5QzBJKTI9ODo0RUM+RkRAODZRSTE1NF8zVilLL1RdPDxISVs4RklXOyYtJAorTUBBTDsgNkwhOkAjXjkjRS08NUlCQTc9TzpHKTo4RzxbJiI1KTtWSTo2NVkkMTRVQDIlQSkxJilNO1YgXworTS8jKEApNiFVPVU5IjVFSSUzNkBZLjYpOi8hQFIyVkVPOlZJTj03QUItQzk4OCYtTjxFUUo/ODYiPEVJSAorTTRXNVY8I1hCKCJdSjxGSSQrNTVSPCdKIz9VWEAuVkU6L1dKLzMhTEUyMzksOEcpSjklREUlMjUtNiQxOAorTV9FMFkrMjU2LEQ1UDpTWFY4R0lbOCRFWz1WJVI7VikwNlREXzpHUVU6VilSO0YpSzslWEU2Rl07NlZNOAorTS41OUA6Vk1SPEclQjpHKTkrNylMNjNZRz83SUw2REUlLUNdSzozODgoRilGL1U1QDgmJTgyVk1SOzdOIworTTxFRUI+V01GNiFAOCs0XUE8J1lQLEVNSjtUVSkxJDU/OkYpQDY3NiVARikwOkYpQjg4KFIpMCU4IDZAIAorTV9GTSkuNk1HOCglTjhGSVI6VSFLNiMoTThWSUMzNFVPO1VNQTpVSS0vU0U6OFYpQC9TOFIkQyk2M1cpUgorTTpGTTkvViVLNjNFKS1DTFItRDVDOFZJRjlHNVc6IzhWM1RFOztYKS0vVylSOUcoXzcmOUI8SCheJiFATQorTTZWSTgrMik4P1ZZSjs3SVctQzlAOiJdLUBHPFwqNEUpLCNdTEI4LVg2NFxfMSVNODQvWUs2UzkkNiNNJAorTThGXSQtRFFSPEZBODhGOU86SClWOCYhJS9GTVo9JlU7OkcpWj5HTVctI1ktNlZFTzg0RSkzNk1XO0ZVUgorTTZGTVI/U11YOCRdTjxHNVY/NylANiQwVjxXQSkqMk0pMzMhQzpGSVAtRiFTOlVNWkRHPS84V0oiPTZZIQorTSYjKE0yVyIiPkRFTDxGSTktQlRNL1chOTMzRUs/N0lSOCRFJDlXPiI6JTQhKzAlLSArSUE2IyE2PEdKIgorTTxGSUs7RylDN1RRNTE2KUA2RiEtPDZVLTM3TVo6NChWOCVZPzdVST4sQUBJMjNZOjpXKVo7VERZMyZFQAorTTYzXFIpNE06IFYrXjpGWVI+RiheL1VAVi1EVVs6RFVKO1UhUzhGKVI6RkojPCRFNTEjWTgxMlRFMTcpXQorTTpFRTo6VFUpLjVFJClVRVo2QyEtOkYgUDEnSiI+RklLPCYkWTZHKUo2Ij05ODZBSzhWTS0yNDFLOEVJKQorTTgjXTo2WClSPThBSzE1SVI8RlE4LUMpQkBHVVo8JVxeMzc1WjpFTFssJkYoPEY5TzEkXUI8RkFXODYpUgorTVBXOU48RzVSPkc9KSZWXVc4I1lAODM4RTVGKUI6UlReOFZNLzpISiI2JTlKQFgtVTwkTT83REUhOEZdLAorTTo3SVA4U1xJLEI1JTwkRE0zJylaPDcgXCk0UVo+R0AhKCAkRSAvWTYuMlReOkc1VjxHPU82RlFQNkRVOAorTTE2RUYxNEU7O1ZIXi9XOVU7VTRWNkZJMDIjRTgsQyhLKzM5ODQmKVU+RyEkL0YpQzo0XFImU11AOkcpSworTThGTU4/VylBNkVMXy1DOUo+RilOOkNdSkBGSVo8RklVPEUhSzYjIFsvQzhJMjZaIkE2LTo6RUk6MjRRQAorTTU2JVI2QihWNjYpPy1FQVo9NjFGPEchJDM3N14+VUxHLjRVTUInSVI2Ri1TOjYlKS1HPTs2U0VLM1Y6JQorTTxEXUA+RllaOCIgMilVTVI4R01XODVNVT5WLTomUU07QEdVUjxFRTo7VjlKOEY5Uj03OUM6Ni06NydJNAorTSRFRV02VDU7PDVFKTpWLTo4QzhUM1ZFJTEnSio6MyElPydNVjxGRSw4RyhfMSVIXjZFJUM7ViBWMSQwWQorTTtWQF8xNi1aOUYpNSsyVUNASClaIDM4ISxAI146MzhNMjYtSzdFLU04QyEtOFRUXjI0NUk4VDUlN0ZRSAorTTYkViM7RUk4JlNFSzhURFYvQkRNKzFATTgjWSU6V0lSOiVJPzg1JSUyMkRWNiZJTj02ST43Rk1SPlZdQgorTTokRFAzJik8OEYxOzpXNUo8RllKPEZFLTpWLSkrMlRJJEI1LT0oOVU6VikoMjU5JDMkRSg6RlxWMjVBOQorTThEMSQ8Rlk+M1VRTjpWLVVfR1VaOCRcWTZWWVA9M0UsQEYlOC41QVI8RixQMzQxSjxEVFAxNz1NPzZMXAorTSpSRFk3U0VCOUZdQztHSVs9UEQyLCZJWj03SUY4RklCOEYlSz8mWVI6JlFQOjZNVzdBQFk/VyBfMjclSQorTTMmSU0zNikkMjRNQTY1QVFARyBWL0YtRj02KUApVDVQNSNcXC8lRFAqViFILUNdSTZXKUozNUFKPkYpLAorTTYjXE0zOClaPkAoXiAtLUY1IjUpOiYhLDM1UUArMyEsLEI0WzI2LTgvVUFCOlVdODZHSV04RUBJKzYhUAorTTY1SUYuMyhAJTJFQi1DWT86JyVPOEZNSTIzIFsqMyEtNkVNSz9WXTozJilSOkYpQjUzXFYuVFUkOEcpUgorTTlGSVo7UC1LX0YpQjdFXFIuUiApIjJVRjxHNiI+QzklO1VJJCsyPS84RDVLPEYpSzhEMUs5RiEtLCQxQgorTTZHPVo7JzYgNjZNJTZHNU44JzUlLUQ1OzhIIUwyM10kOlZNJCgiKUA7J0lVPEZBQDYkRFY2I106MzQxMQorTTtILFAoIlU2PEc1VTs3SiA6RUFAO0gpVjtGUUY+SCFWQCYsOCZVQUktQyE6QCZdOjokVTosJiU5MjpJKQorTTo3KU0+Ri1JOjRBRjxVRFY2NkUpKzJEXDozWEU2JUhNKzRVQkBHKTY6R0laOlQwWTI0XUI8RyghLEAkTQorTSAvWF4vQVUlO1ZNQzomLUk3RDVGKzJEUi1EVE0rNl1fOiRVLDhHSiU+VkE4NUVJSjY1RVI4JDBUKlRNQAorTS1DWS84NyFQOEcpXzojOEUsIyFJNlNFOj5HNUo1RUlCOUcpLDYkRE0pUzhZOCZJOjhFSVI8RVExOkZZSworTTdFXFYtQ0wuIjFMRy1UQTNAJDRQNjZdQS9CVF4uM01TPkY5QzpFSVA6RkksKTM4ViwmK142U0VEQzddVworTS40MUBAWEVOLUJVQThWKVo8RUkpKVNZMDs0TFY3VUUvPEgpSjtVSF8tRkFANlVYViwkQUY6JiFANkZJQgorTTMmMiFCR0ktLVcpWjxWLS0zV1YmPUdVUC8iRFk3VSBFK1dKIDhWLTs4QjUsNkQ1KTwnKTE6RilKPiQ1JQorTTxGTUI6VzxeKCFMVjhFOF8zNUBSKzMhQz83LS05J1YjPEREWzM3KU9ARik7IDJEISZQI14vUyg4LUc9VQorTThWQTs8RkBfOiJUTTUzTE0kQU06QkZdKS41SUs/OClROUcxSzxGST48Rk1JMjM5TTNTOSU2Vk1KO1VJMQorTUAnPTgrM0RJOFY4VjY3SVo8Rl1CMzZOIjMlQFkrM1xfL0VFQjYlTS03JkkpLCQxTTtGKUIyNEReKCMgWworTSghTDssJylJMlQxQjZFTTgxMyhFOCdJVjpWKSw4WCoiOkU5KSoyITlfRERHMSdWKjojRSU4JzlbOEI0TQorTTolRTo4RTktMjFMNS9IJVI6Vyk1KEVFVzQlRUEtQzlIPEYtSTdFNS82RUlLPEchQy4yNSw+SDlbMTJVSgorTTtGTSkpUyFXQkdVXT5WRT4tRDU4KzI9SjpWIVA5VSErOCQ0TS9HPiE7RikxNkc9QzYlSVo+RylfMjEoLgorTSZVSUk7RyE/LlFMQjg2WUouVDVVPzcpKS41QVJASClKM1AlNSA0MCBfRjxWJiFNOTxEVSkzNyVSN1YoWworTSlVQTQpMEQ1LCdJWjokRF4xNylaPEY5UjsmVU47RkkvOFYgXzwlMEUrNEVKPEZJNjE2OUIzUzkkLVYlPworTS41RVI5RllSOCNFQz5GRUcqMjUpOUVNOzpEVTo6VklLNUM4RzhHKVI6RUlDOCRFSj1WIF8xJV1VPlchQworTThUQS08RFBJLCQ1OTtHXUIrMzlXQEZVXzYiIDU4KUVGMzVNVUE2IFYpVUlVPEVEOyo1OSk6NiBeNjMwLgorTSNCKUIgVktEMjEoTTdUMSw6JDA7OEghTDhWKTs4JUxQMTZOIDoiNDgyNylaPkYpJTZWSUsxIUBJOlgpVQorTT83TUY6IzheOjRFKTo0VSQ9OEFJOlchJSZSNSQ+WDlXOCVJSzokRSRAKC1aQUcgUCNBNSQ2V0owO1JUOworTSxERVc7UzhQOCVZQjgkRF44KCFKL1AlOyA3PCBfSCEpKjI1KThERF8uNF1aQCY5QTE0RT81MiA4KCU5VAorTT5GTSQpNFFMOEVRMDhWLUY+RkEkM1VFLTolQEklMUxfPkcpRjEkVFkxMzhWLlRFOCwlQUIvVUlKN1M5OgorTTxFRUwpMFhFMSVFQjpDWS1AR1VXOEQoSTYmKVI8RFEsMiMhPj83SUY6RylGOlZJTT1UMFk6RUhAKjQxJQorTTMnNUMvUkVBQVZVWjgiNEA4X1lMOUVFVUJFRUAtRFFOOlZEXzdGQS08JzU1MlFMKSNCISkzNFBfN1QxOQorTTdDOFA2RlRNOEdJUjZDWSw2RUhFJTM5SjlRTDg4J0k6NkcpRjhWLUsyUiBNOldJVjwnPUw2IkRPO1chOgorTTozOEI4SElaOldBRi5TTTk5WCldPFYtOjgiNDs4J11LO0gtQCgiIFYsRlYyPkNcSTUkMTo9U1hNNiM4UAorTTY1QFYsJyoiPCNYIStQJUogL1lfPEcxRDomKTgtQjRJOlkhUjhWISk2RkE2LlFAOy9WVU03U1BZOERQXgorTSs0RTgyJylJL1M5OTgmQTgvIkRALUZBUjsmQUgyNV0kKTJETTEiVFYyMzhZOCYhQjtWTSk4JDBAKlRNLQorTThFODsrN0oqPkZJLCszTFY4SCFDMlMgVi1EXiY+Ri1VOjU5JTZXSTszNklQNCBYTTYmSUo3JUkpNkdJVQorTTpVQE0vJi9eOlZdJDpIOU06RkFDOERBTzE1QVQ4JyohNiY4TSYhQSQ8Jl0/OCZNSz5HSTouVDVINUVJQgorTTVDREkqNF07LjFMTTZGQEkoRk4gLUI9WjpWTVE4IzhFKzRdSz5WLSg6RUQ4JTRSIjxVREUmVTlVPUYtSworTTo0RS86Nk1VPUdNUDdVNEAjQlVCOjVZWjozUFwtQzlLQEcpOi5TOF8uNkUtLUVBJCZTWT8yMUxfQEYlPgorTSAxNCEuMCNeNkVJVz5HXVI6Izg7LSVBVTpVSVc3VE1INlRESSRCVTo4RV1GMjVdOC1CVTg4NilSO1M4OworTS9WQVAvUzk+N0QwWTZGTVI9ViFBNiNQSShDOEcqU1BNLUVBMTpXSVI8JkVALEJFJDgkUFAjQU1LQyZVSgorTThFQTUtRiIiOlRVLTdCND0+RlVRPkZVNi1EVVo2VDFGOlZAQCYkRVo8RFxQNkYpTTxHIUEtRTFLX0YtOQorTS1UUTs2VylWQSZIXzhDXE0zJylVQEYmKDtTWEUvVkVINkZBSzpHNVo8RV0sOiYlSDgjWEUlMkUpNiYgTQorTS9GSUIuUjVSQFM4LjpWRUM9VyBeKTM5ODM3KVEzJiklJzFAVjxGSSkqMzk6NyVNQzhERSU2Rk1COEY5UworTTwmQT4oITRANjZdPjxGKSw4IyE+PCdNVzhGPTk4JkFLN1NFJDRTOSk6JkBSKzgoVjgwKE0gL1hNLUZFTgorTUBHVU8wMjUkNiRRLS1HKTovRkFPNjY5JC9VTU86Ri1COFYgXCs1QUM+WC1RNSJMVjgnJF8uNilfOiQ1OQorTTQ2OVU+Nk07OCRNPjYjXFQqUUxWNiRRQz5HNVc4RURfLyM9SDEiVFAoJUIqOzYpLThWPS04RylCL1VJOgorTS5SRVI9JlVaPCVBJTInXUIvVklKO1M4Oy1HSVo2IlU4NlYpMDZWJTo1RkteOkRVKTEyPSw9V1YmPlVNOgorTTYjTFk6RzYjPic1XDhVRTQvRDU4NjZJQDpWPVI4RilKO1chVTUxQC4mVDEpOENcWTdTIEAmVUlaMjFNQAorTTZFTVs+Rl0vODYlJThXPT46IzhAKCNdUTpVOS0yNEFaPlYhOykyITk6VUEpL0Q0WyNBQDgtIyk5PEZNUworTTslTUgtRiFPPkdJSzokVUE9NylSPSVATSwlOVJARiRfQEJNKyA0RCErMCNeLEJFKTpHNiI+RTRNN0ZBJAorTTMzWUIzUzk6PCRdQjtUVS08SCFLOUZdSjVDOFkzN0olPEZBOTUmQVAyNEVDPyctOC9TRSg5R0lSOEYtOgorTTomTTo5I1A7KzRFKTMnKVc7NikkK1QwWTpDWEUsQUxePCctQjE2JUw8J0lVMzMhOzZETEAzJ0lVPzdVUAorTTMkRUs7Vi1INlZAXCk0RVU9NkEtN1YpSDEzRSg8Jik7SFZJOzZWIFYuNyoiQEcpOzhWLUY2JkU7OjVdJworTTxGTUY9VFRCNiRRQi41RS01RDU6IFcrOkA1QDIjQTReOCZdPzI0REUlMU04O1VIVjpDIF48RlVNOkdJSworTS41SVc4VFRfKjJEXjhVSTQ3VUE2OkdNSzVDTSQ2NkE6MzY5QTJSRFQvJVklMlRFJDpHITo2NTU2OFdVWgorTTpFSTkvU11XPThKJTIyRFY2R0lPN0NNNiA1QCEuUCNeMSFMVDI2LVI8RUBNNjYpOjdWLUgtQjUpOCRRLworTThFQFk4SClaOkchUDclTFYsJyoiPDRVQjZGKVI2M1kkPVglSjYjTE04JyFDOiVJOjImLTw8JTBNKzNZKQorTTI2OUo6RUk/L0VFJDYlOEAlMU0pL1YtQCs0NUI8R0FdOlRVPzhWIFssRUVSO0dSJzgkVTk2Vk1QMyRQSQorTSk2KiM6VjlCOEZJSjMzITlANykwVkYpSDgmRTgsJklVPkdNMDQmLUg6Vk1KOkVcUDhHPUI8JDBWMjVJNgorTSszXSkrMjUpOlYtUj5GJD0jQUBNMjcpUjpWJF8tJUFLOlVARTEiNE0xNDUwOzghTy40VVI7JU05L1JUVgorTTEjXF82NV1VPUc1SjVDWSkvRkVHLjAtQ0hWRUo8Nz1CODNcOy1FQUI2JERWLjcpWjhENF8pMU07Pyg6KgorTTokMSQxNkVDOCRFNiA1XCE2MCM4OjYhODpUVUs8JEQ9MTZBOTY2LVc2QiBfOCQ1ODdUXSs2R1VaOVRVSworTThWOSQvVVFVOkNFJS41SUs4M1xcMzchUDolXF8zNU0pODY5JTdWISw2RFRfLUVBRjNWRUI7JSE7NkZKIAorTT5GPTgsQlU4MjRVPy1DXSQ5UC1SX0YtRDxGSToyM0VBOFZaIjxFNSQxNi1TNkM8SSk0RV06Ri1COEcpWgorTTIxVTpAV1UsNkZNQzhHIUA6RilSPzY5OjokUTs4RjlOOiNZLDkmSVI3VUU/NkYhJTEjTDgjQ1lKOCZJSworTTlEJFQxIzhfPkg2IjxFRSk7V0lKNTIgOzEzOFwtJEVCOUcpODsmWUs4NiFBMlYlKTI1MFA2RyldQFZBJQorTSwiVE04Vz1JNjo1OzZGSVpAOEVbNjQwQCUyVU46NEReLCYpSjo1WFkoIyEkOkc2IjtFRS0yNU1COFU5PworTSA0VCE6UCJPQCZdOThDXUA6NUhWMTZBOThTXUI6JEUpOjYhODZVQUk3RylVNlNFLDhWKSwyNDVKPEYhJAorTS9VOTs1REVJOjYsIzhPWUg7ViEtNlYgSTI2XUAyM1kkJlNFSTQmLUI9NF1DMTUmKkMoKVcyMzkpNlYtQgorTTI1WTkxNkoiPkYpOTxHSS8yMlRfOERFO0BHKUo6JFw1KERVTys0RUYzNEUkLjZeKTgiVSxAR1BZMjVJPworTTFXLUs6JDFCPkZZTDhGIS02RFVDO1QxLTZVTS00JyFCNkYtLTVDOEAoJDVIOiU4VCxDKDsqVTEsOkdBXQorTT5FRy4zJyoiPEYsXyxFRFYxM106O1RROThHSU40JklRNlYpWjhGLUQqM1k5OUdJPy9EMEkoI1lDPkUhOQorTTZVSU5ASClfOjU0QCNCNUE8JEUkMjVBJDgmUUkuUlU2OiY5XT5WKSkuM0U4OiRVOCA1RCE9QCNeQkc9LworTThSNFY1RV0lOCZJLDpVQFY2JERZOCYhOC9UXVI+R1YiOiNcXzhWSUAyM107OkYhNjomITgvU11LPkcpSworTTNUVVJAR0lKOlZMXzZGTUs6JERcKjNdOzgnKVI6RSFCMjRFVT83Vio7RF0pMzVJQjMmJSkmVSIqQkY5KAorTTZHSVcuMlRWMzNFQ0FWOTwzVlRNJTNZPzYlQUIuMiA4JTNFUD5GXUY/ODRZX0I0Qi9DRUI4Ni0pMiZNQworTTdEMUk4NERLOFY9QjpGTUMrMlVCOERdQzhVQFcyNFU6O1cpSDdFNTYxIzkpKzNZSjtHKTo0JllaPTdJSworTTYzXFY1NiFJPEY4XzEnPUsxJVFJKzMhVz8lTTgvJUE5OFZNKSszOTsoIShWOiVJODZFTU4+VllNPCVERworQSYjOUI8JE0pNjYgXywlSVs8IlRWNkYpUkBHSVA1IyEpNkgpQDYgJTkgNzQgCisgCitlbmQKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9odHRwc19zdm5fcHl0aG9uX29yZ19yb290LnBlbSBiL2xpYi9weXRob24yLjcvdGVzdC9odHRwc19zdm5fcHl0aG9uX29yZ19yb290LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2RmYzgyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2h0dHBzX3N2bl9weXRob25fb3JnX3Jvb3QucGVtCkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJSFBUQ0NCU1dnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFRRkFEQjVNUkF3RGdZRFZRUUtFd2RTYjI5MAorSUVOQk1SNHdIQVlEVlFRTEV4Vm9kSFJ3T2k4dmQzZDNMbU5oWTJWeWRDNXZjbWN4SWpBZ0JnTlZCQU1UR1VOQgorSUVObGNuUWdVMmxuYm1sdVp5QkJkWFJvYjNKcGRIa3hJVEFmQmdrcWhraUc5dzBCQ1FFV0VuTjFjSEJ2Y25SQQorWTJGalpYSjBMbTl5WnpBZUZ3MHdNekF6TXpBeE1qSTVORGxhRncwek16QXpNamt4TWpJNU5EbGFNSGt4RURBTworQmdOVkJBb1RCMUp2YjNRZ1EwRXhIakFjQmdOVkJBc1RGV2gwZEhBNkx5OTNkM2N1WTJGalpYSjBMbTl5WnpFaQorTUNBR0ExVUVBeE1aUTBFZ1EyVnlkQ0JUYVdkdWFXNW5JRUYxZEdodmNtbDBlVEVoTUI4R0NTcUdTSWIzRFFFSgorQVJZU2MzVndjRzl5ZEVCallXTmxjblF1YjNKbk1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQworQ2dLQ0FnRUF6aUxBNGtaOTdEWW9CMUNXOHFBelFJeEw4VHRtUHpIbGF3STIyOVo4OXZHSWowNTNOZ1ZCbGZrSgorOEJMUFJvWnpZTGR1ZnVqQVdHU3V6YkN0UlJjTVkvcG5DdWpXMHI4KzU1akU4RXo2NEFPN05WMXNJZDZlSU5tNgoreldZeU4zTDY5d2oxeDgxWXlZN25EbDdxUHY0Y29SUUtGV3lHaEZ0a1ppcDZxVXRUZWZXSW9udnVMd3BoSzQyeQorZmsxV3BSUHM2dHFTbnF4RVFSNVlZR1VGWnZqQVJMM0xsUGRDZmd2M1pXaVlVUVh3OHdXUkJCMGJGNExzeUZlNwordzJ0NmlQR3djc3dsV3lDUjdCWUNFbzh5NlJjWVNOREhCUzRDTUVLNEpad0ZheitxT3FmclUwajM2TksyQjVqYworRzhZMGYzL0pISUo2QlZnckNGdnpPS0tyRjExbXlaalhuaENMb3RMZGRKcjNjUXh5WU4vTmI1Z3puWlkwZGo0aworZXBLd0RwVWViK2FnUlRoSHF0ZEI3VXEzRXZiWEc0T0tEeTdZQ2JaWjE2b0UvOUtUZldndTNZdExxMWk2TDQzcQorbGFlZ3cxU0pwZnZiaTFFaW5iTER2aEcrTEpHR2k1WjRyU0RUaWk4YVA4YlFVV1dISWJFWkFXVi9SUnlIOVh6UQorUVV4UEtaZ2gvVE1mZFF3RVVmb1pkOXZVRkJ6dWdjTWQ5WmkzYVFhUkl0MEFVTXlCTWF3U0IzczQybWhiNWl2VQorZnNsZnJlanJja3p6QWVWTElMK2FwbGZLa1FBQmk2RjFJVGUxWXcxblBrWlBjQ0JuenNYV1dkc0M0UERTeTgyNgorWXJlUVFlamRJT1FwdkdRcFFzZ2kzSGlhLzBQc21Cc0pVVXRhV3NKeDhjVExjNm5sb1FzQ0F3RUFBYU9DQWM0dworZ2dIS01CMEdBMVVkRGdRV0JCUVd0VEliMU1mejRPYU84NzNTc0RydXNqa1kwVENCb3dZRFZSMGpCSUdiTUlHWQorZ0JRV3RUSWIxTWZ6NE9hTzg3M1NzRHJ1c2prWTBhRjlwSHN3ZVRFUU1BNEdBMVVFQ2hNSFVtOXZkQ0JEUVRFZQorTUJ3R0ExVUVDeE1WYUhSMGNEb3ZMM2QzZHk1allXTmxjblF1YjNKbk1TSXdJQVlEVlFRREV4bERRU0JEWlhKMAorSUZOcFoyNXBibWNnUVhWMGFHOXlhWFI1TVNFd0h3WUpLb1pJaHZjTkFRa0JGaEp6ZFhCd2IzSjBRR05oWTJWeQorZEM1dmNtZUNBUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekF5QmdOVkhSOEVLekFwTUNlZ0phQWpoaUZvZEhSdworY3pvdkwzZDNkeTVqWVdObGNuUXViM0puTDNKbGRtOXJaUzVqY213d01BWUpZSVpJQVliNFFnRUVCQ01XSVdoMAorZEhCek9pOHZkM2QzTG1OaFkyVnlkQzV2Y21jdmNtVjJiMnRsTG1OeWJEQTBCZ2xnaGtnQmh2aENBUWdFSnhZbAorYUhSMGNEb3ZMM2QzZHk1allXTmxjblF1YjNKbkwybHVaR1Y0TG5Cb2NEOXBaRDB4TURCV0JnbGdoa2dCaHZoQworQVEwRVNSWkhWRzhnWjJWMElIbHZkWElnYjNkdUlHTmxjblJwWm1sallYUmxJR1p2Y2lCR1VrVkZJR2hsWVdRZworYjNabGNpQjBieUJvZEhSd09pOHZkM2QzTG1OaFkyVnlkQzV2Y21jd0RRWUpLb1pJaHZjTkFRRUVCUUFEZ2dJQgorQUNqSDdweUNBcnBjZ0JMS05Rb2RnVytKYXBuTThtZ1BmNmZoalZpVlByM3lCc09RV3F5MVlQYVpRd0dqaUhDYworbldLZHBJZXZaMWdOTURZNzVxMUkwOHQwQW9aeFB1SXJBMmp4TkdKQVJqdFQ2aWowclB0bWxWT0tUVjM5TzlsZworMThwNWFUdXhaWktteG9HQ1hKek42MDBCaXFYZkVWV3FGY29mTjhDQ21IQmgyMnA4bHFPT0xsUStUeUdwa08vYworZ3IvYzZFV3RUWkJ6Q0R5VVpiQUVtWFovNHJ6Q2FoV3Fsd1EzSk5nZWxFNXREbEcrMXNTUHlwWnQ5MFBmNkRCbAorSnp0N3UwTkRZOFJEOTdMc2FNemhHWTRpKzVqaGUxbytBVGM3aXdpd292T1ZUaHJMbTgyYXNkdXljUEF0U3R2WQorc09OdlJVZ3pFdi8rUERJcVZQZkU5NHJ3aUNQQ1IvNWtlbkhBMFI2bVk3QUhmcVF2MHdHUDNKOHJ0c1lJcVErVAorU0NYOEV2MmZRdHp6eEQ3MlY3RFgzV25SQm5jMENrdlN5cUQvSE1hTXlSYSt4TXd5TjJoelh3ajdVZmRKVXpZRgorQ3BVQ1RQSjVHaEQyMkRwMW5QTWQ4YUlOY0dlR0c3TVc5Uy9scE90NWh2azlDOEp6QzZXWnJHLzhaN2psTHd1bQorR0NTTmU5RklOU2tZUUt5VFlPR1dobEMwZWxuWWp5RUxuOCtDa2NZN3YydmNCNUc1bDFZanFyWnNsTVpJQmp6aworems2cTVQWXZDZHhUYnk3OGRPczZZNW5DcHF5SnZLZXlSS0FOaWhEamJQSWt5L3FibjNCSEx0NFVpOVN5SUFtVworb21UeEpCemNvVFdjRmJMVXZGVXVmUWIxbkE1VjlGcldrOXAyclNWelRNVkQKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9pZWVlNzU0LnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC9pZWVlNzU0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWJiMGM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2llZWU3NTQudHh0CkBAIC0wLDAgKzEsMTg1IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUHl0aG9uIElFRUUgNzU0IGZsb2F0aW5nIHBvaW50IHN1cHBvcnQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKz4+PiBmcm9tIHN5cyBpbXBvcnQgZmxvYXRfaW5mbyBhcyBGSQorPj4+IGZyb20gbWF0aCBpbXBvcnQgKgorPj4+IFBJID0gcGkKKz4+PiBFID0gZQorCitZb3UgbXVzdCBuZXZlciBjb21wYXJlIHR3byBmbG9hdHMgd2l0aCA9PSBiZWNhdXNlIHlvdSBhcmUgbm90IGdvaW5nIHRvIGdldAord2hhdCB5b3UgZXhwZWN0LiBXZSB0cmVhdCB0d28gZmxvYXRzIGFzIGVxdWFsIGlmIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbQoraXMgc21hbGwgdGhhbiBlcHNpbG9uLgorPj4+IEVQUyA9IDFFLTE1Cis+Pj4gZGVmIGVxdWFsKHgsIHkpOgorLi4uICAgICAiIiJBbG1vc3QgZXF1YWwgaGVscGVyIGZvciBmbG9hdHMiIiIKKy4uLiAgICAgcmV0dXJuIGFicyh4IC0geSkgPCBFUFMKKworCitOYU5zIGFuZCBJTkZzCis9PT09PT09PT09PT09CisKK0luIFB5dGhvbiAyLjYgYW5kIG5ld2VyIE5hTnMgKG5vdCBhIG51bWJlcikgYW5kIGluZmluaXR5IGNhbiBiZSBjb25zdHJ1Y3RlZAorZnJvbSB0aGUgc3RyaW5ncyAnaW5mJyBhbmQgJ25hbicuCisKKz4+PiBJTkYgPSBmbG9hdCgnaW5mJykKKz4+PiBOSU5GID0gZmxvYXQoJy1pbmYnKQorPj4+IE5BTiA9IGZsb2F0KCduYW4nKQorCis+Pj4gSU5GCitpbmYKKz4+PiBOSU5GCistaW5mCis+Pj4gTkFOCituYW4KKworVGhlIG1hdGggbW9kdWxlJ3MgYGBpc25hbmBgIGFuZCBgYGlzaW5mYGAgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIHRvIGRldGVjdCBJTkYKK2FuZCBOQU46Cis+Pj4gaXNpbmYoSU5GKSwgaXNpbmYoTklORiksIGlzbmFuKE5BTikKKyhUcnVlLCBUcnVlLCBUcnVlKQorPj4+IElORiA9PSAtTklORgorVHJ1ZQorCitJbmZpbml0eQorLS0tLS0tLS0KKworQW1iaWd1b3VzIG9wZXJhdGlvbnMgbGlrZSBgYDAgKiBpbmZgYCBvciBgYGluZiAtIGluZmBgIHJlc3VsdCBpbiBOYU4uCis+Pj4gSU5GICogMAorbmFuCis+Pj4gSU5GIC0gSU5GCituYW4KKz4+PiBJTkYgLyBJTkYKK25hbgorCitIb3dldmVyIHVuYW1iaWdvdXMgb3BlcmF0aW9ucyB3aXRoIGluZiByZXR1cm4gaW5mOgorPj4+IElORiAqIElORgoraW5mCis+Pj4gMS41ICogSU5GCitpbmYKKz4+PiAwLjUgKiBJTkYKK2luZgorPj4+IElORiAvIDEwMDAKK2luZgorCitOb3QgYSBOdW1iZXIKKy0tLS0tLS0tLS0tLQorCitOYU5zIGFyZSBuZXZlciBlcXVhbCB0byBhbm90aGVyIG51bWJlciwgZXZlbiBpdHNlbGYKKz4+PiBOQU4gPT0gTkFOCitGYWxzZQorPj4+IE5BTiA8IDAKK0ZhbHNlCis+Pj4gTkFOID49IDAKK0ZhbHNlCisKK0FsbCBvcGVyYXRpb25zIGludm9sdmluZyBhIE5hTiByZXR1cm4gYSBOYU4gZXhjZXB0IGZvciBuYW4qKjAgYW5kIDEqKm5hbi4KKz4+PiAxICsgTkFOCituYW4KKz4+PiAxICogTkFOCituYW4KKz4+PiAwICogTkFOCituYW4KKz4+PiAxICoqIE5BTgorMS4wCis+Pj4gTkFOICoqIDAKKzEuMAorPj4+IDAgKiogTkFOCituYW4KKz4+PiAoMS4wICsgRkkuZXBzaWxvbikgKiBOQU4KK25hbgorCitNaXNjIEZ1bmN0aW9ucworPT09PT09PT09PT09PT0KKworVGhlIHBvd2VyIG9mIDEgcmFpc2VkIHRvIHggaXMgYWx3YXlzIDEuMCwgZXZlbiBmb3Igc3BlY2lhbCB2YWx1ZXMgbGlrZSAwLAoraW5maW5pdHkgYW5kIE5hTi4KKworPj4+IHBvdygxLCAwKQorMS4wCis+Pj4gcG93KDEsIElORikKKzEuMAorPj4+IHBvdygxLCAtSU5GKQorMS4wCis+Pj4gcG93KDEsIE5BTikKKzEuMAorCitUaGUgcG93ZXIgb2YgMCByYWlzZWQgdG8geCBpcyBkZWZpbmVkIGFzIDAsIGlmIHggaXMgcG9zaXRpdmUuIE5lZ2F0aXZlCit2YWx1ZXMgYXJlIGEgZG9tYWluIGVycm9yIG9yIHplcm8gZGl2aXNpb24gZXJyb3IgYW5kIE5hTiByZXN1bHQgaW4gYQorc2lsZW50IE5hTi4KKworPj4+IHBvdygwLCAwKQorMS4wCis+Pj4gcG93KDAsIElORikKKzAuMAorPj4+IHBvdygwLCAtSU5GKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorLi4uCitWYWx1ZUVycm9yOiBtYXRoIGRvbWFpbiBlcnJvcgorPj4+IDAgKiogLTEKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKy4uLgorWmVyb0RpdmlzaW9uRXJyb3I6IDAuMCBjYW5ub3QgYmUgcmFpc2VkIHRvIGEgbmVnYXRpdmUgcG93ZXIKKz4+PiBwb3coMCwgTkFOKQorbmFuCisKKworVHJpZ29ub21ldHJpYyBGdW5jdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09CisKKz4+PiBzaW4oSU5GKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorLi4uCitWYWx1ZUVycm9yOiBtYXRoIGRvbWFpbiBlcnJvcgorPj4+IHNpbihOSU5GKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorLi4uCitWYWx1ZUVycm9yOiBtYXRoIGRvbWFpbiBlcnJvcgorPj4+IHNpbihOQU4pCituYW4KKz4+PiBjb3MoSU5GKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorLi4uCitWYWx1ZUVycm9yOiBtYXRoIGRvbWFpbiBlcnJvcgorPj4+IGNvcyhOSU5GKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorLi4uCitWYWx1ZUVycm9yOiBtYXRoIGRvbWFpbiBlcnJvcgorPj4+IGNvcyhOQU4pCituYW4KKz4+PiB0YW4oSU5GKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorLi4uCitWYWx1ZUVycm9yOiBtYXRoIGRvbWFpbiBlcnJvcgorPj4+IHRhbihOSU5GKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorLi4uCitWYWx1ZUVycm9yOiBtYXRoIGRvbWFpbiBlcnJvcgorPj4+IHRhbihOQU4pCituYW4KKworTmVpdGhlciBwaSBub3IgdGFuIGFyZSBleGFjdCwgYnV0IHlvdSBjYW4gYXNzdW1lIHRoYXQgdGFuKHBpLzIpIGlzIGEgbGFyZ2UgdmFsdWUKK2FuZCB0YW4ocGkpIGlzIGEgdmVyeSBzbWFsbCB2YWx1ZToKKz4+PiB0YW4oUEkvMikgPiAxRTEwCitUcnVlCis+Pj4gLXRhbigtUEkvMikgPiAxRTEwCitUcnVlCis+Pj4gdGFuKFBJKSA8IDFFLTE1CitUcnVlCisKKz4+PiBhc2luKE5BTiksIGFjb3MoTkFOKSwgYXRhbihOQU4pCisobmFuLCBuYW4sIG5hbikKKz4+PiBhc2luKElORiksIGFzaW4oTklORikKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKy4uLgorVmFsdWVFcnJvcjogbWF0aCBkb21haW4gZXJyb3IKKz4+PiBhY29zKElORiksIGFjb3MoTklORikKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKy4uLgorVmFsdWVFcnJvcjogbWF0aCBkb21haW4gZXJyb3IKKz4+PiBlcXVhbChhdGFuKElORiksIFBJLzIpLCBlcXVhbChhdGFuKE5JTkYpLCAtUEkvMikKKyhUcnVlLCBUcnVlKQorCisKK0h5YmVyYm9saWMgRnVuY3Rpb25zCis9PT09PT09PT09PT09PT09PT09PQorCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvaW5maW5pdGVfcmVsb2FkLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L2luZmluaXRlX3JlbG9hZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDFjY2FkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2luZmluaXRlX3JlbG9hZC5weQpAQCAtMCwwICsxLDggQEAKKyMgRm9yIHRlc3RpbmcgaHR0cDovL3B5dGhvbi5vcmcvc2YvNzQyMzQyLCB3aGljaCByZXBvcnRzIHRoYXQgUHl0aG9uCisjICBzZWdmYXVsdHMgKGluZmluaXRlIHJlY3Vyc2lvbiBpbiBDKSBpbiB0aGUgcHJlc2VuY2Ugb2YgaW5maW5pdGUKKyMgIHJlbG9hZCgpaW5nLiBUaGlzIG1vZHVsZSBpcyBpbXBvcnRlZCBieSB0ZXN0X2ltcG9ydC5weTp0ZXN0X2luZmluaXRlX3JlbG9hZAorIyAgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBoYXBwZW4gYW55IG1vcmUuCisKK2ltcG9ydCBpbXAKK2ltcG9ydCBpbmZpbml0ZV9yZWxvYWQKK2ltcC5yZWxvYWQoaW5maW5pdGVfcmVsb2FkKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2luc3BlY3RfZm9kZGVyLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L2luc3BlY3RfZm9kZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZGUyZTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvaW5zcGVjdF9mb2RkZXIucHkKQEAgLTAsMCArMSw1NiBAQAorIyBsaW5lIDEKKydBIG1vZHVsZSBkb2NzdHJpbmcuJworCitpbXBvcnQgc3lzLCBpbnNwZWN0CisjIGxpbmUgNQorCisjIGxpbmUgNworZGVmIHNwYW0oYSwgYiwgYywgZD0zLCAoZSwgKGYsKSk9KDQsICg1LCkpLCAqZywgKipoKToKKyAgICBlZ2dzKGIgKyBkLCBjICsgZikKKworIyBsaW5lIDExCitkZWYgZWdncyh4LCB5KToKKyAgICAiQSBkb2NzdHJpbmcuIgorICAgIGdsb2JhbCBmciwgc3QKKyAgICBmciA9IGluc3BlY3QuY3VycmVudGZyYW1lKCkKKyAgICBzdCA9IGluc3BlY3Quc3RhY2soKQorICAgIHAgPSB4CisgICAgcSA9IHkgLy8gMAorCisjIGxpbmUgMjAKK2NsYXNzIFN0dXBpZEdpdDoKKyAgICAiIiJBIGxvbmdlciwKKworICAgIGluZGVudGVkCisKKyAgICBkb2NzdHJpbmcuIiIiCisjIGxpbmUgMjcKKworICAgIGRlZiBhYnVzZShzZWxmLCBhLCBiLCBjKToKKyAgICAgICAgIiIiQW5vdGhlcgorCitcdGRvY3N0cmluZworCisgICAgICAgIGNvbnRhaW5pbmcKKworXHR0YWJzCitcdAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hcmd1ZShhLCBiLCBjKQorIyBsaW5lIDQwCisgICAgZGVmIGFyZ3VlKHNlbGYsIGEsIGIsIGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcGFtKGEsIGIsIGMpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZXggPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgc2VsZi50ciA9IGluc3BlY3QudHJhY2UoKQorCisjIGxpbmUgNDgKK2NsYXNzIE1hbG9kb3JvdXNQZXJ2ZXJ0KFN0dXBpZEdpdCk6CisgICAgcGFzcworCitjbGFzcyBQYXJyb3REcm9wcGluZ3M6CisgICAgcGFzcworCitjbGFzcyBGZXN0ZXJpbmdHb2IoTWFsb2Rvcm91c1BlcnZlcnQsIFBhcnJvdERyb3BwaW5ncyk6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2luc3BlY3RfZm9kZGVyMi5weSBiL2xpYi9weXRob24yLjcvdGVzdC9pbnNwZWN0X2ZvZGRlcjIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q5NzhjZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9pbnNwZWN0X2ZvZGRlcjIucHkKQEAgLTAsMCArMSw5OSBAQAorIyBsaW5lIDEKK2RlZiB3cmFwKGZvbz1Ob25lKToKKyAgICBkZWYgd3JhcHBlcihmdW5jKToKKyAgICAgICAgcmV0dXJuIGZ1bmMKKyAgICByZXR1cm4gd3JhcHBlcgorCisjIGxpbmUgNworZGVmIHJlcGxhY2UoZnVuYyk6CisgICAgZGVmIGluc3RlYWRmdW5jKCk6CisgICAgICAgIHByaW50ICdoZWxsbycKKyAgICByZXR1cm4gaW5zdGVhZGZ1bmMKKworIyBsaW5lIDEzCitAd3JhcCgpCitAd3JhcCh3cmFwKQorZGVmIHdyYXBwZWQoKToKKyAgICBwYXNzCisKKyMgbGluZSAxOQorQHJlcGxhY2UKK2RlZiBnb25lKCk6CisgICAgcGFzcworCisjIGxpbmUgMjQKK29sbCA9IGxhbWJkYSBtOiBtCisKKyMgbGluZSAyNwordGxsID0gbGFtYmRhIGc6IGcgYW5kIFwKK2cgYW5kIFwKK2cKKworIyBsaW5lIDMyCit0bGxpID0gbGFtYmRhIGQ6IGQgYW5kIFwKKyAgICBkCisKKyMgbGluZSAzNgorZGVmIG9uZWxpbmVmdW5jKCk6IHBhc3MKKworIyBsaW5lIDM5CitkZWYgbWFueWFyZ3MoYXJnMSwgYXJnMiwKK2FyZzMsIGFyZzQpOiBwYXNzCisKKyMgbGluZSA0MworZGVmIHR3b2xpbmVmdW5jKG0pOiByZXR1cm4gbSBhbmQgXAorbQorCisjIGxpbmUgNDcKK2EgPSBbTm9uZSwKKyAgICAgbGFtYmRhIHg6IHgsCisgICAgIE5vbmVdCisKKyMgbGluZSA1MgorZGVmIHNldGZ1bmMoZnVuYyk6CisgICAgZ2xvYmFscygpWyJhbm9ueW1vdXMiXSA9IGZ1bmMKK3NldGZ1bmMobGFtYmRhIHgsIHk6IHgqeSkKKworIyBsaW5lIDU3CitkZWYgd2l0aF9jb21tZW50KCk6ICAjIGhlbGxvCisgICAgd29ybGQKKworIyBsaW5lIDYxCittdWx0aWxpbmVfc2lnID0gWworICAgIGxhbWJkYSAoeCwKKyAgICAgICAgICAgIHkpOiB4K3ksCisgICAgTm9uZSwKKyAgICBdCisKKyMgbGluZSA2OAorZGVmIGZ1bmM2OSgpOgorICAgIGNsYXNzIGNsczcwOgorICAgICAgICBkZWYgZnVuYzcxKCk6CisgICAgICAgICAgICBwYXNzCisgICAgcmV0dXJuIGNsczcwCitleHRyYTc0ID0gNzQKKworIyBsaW5lIDc2CitkZWYgZnVuYzc3KCk6IHBhc3MKKyhleHRyYTc4LCBzdHVmZjc4KSA9ICd4eScKK2V4dHJhNzkgPSAnc3RvcCcKKworIyBsaW5lIDgxCitjbGFzcyBjbHM4MjoKKyAgICBkZWYgZnVuYzgzKCk6IHBhc3MKKyhleHRyYTg0LCBzdHVmZjg0KSA9ICd4eScKK2V4dHJhODUgPSAnc3RvcCcKKworIyBsaW5lIDg3CitkZWYgZnVuYzg4KCk6CisgICAgIyBjb21tZW50CisgICAgcmV0dXJuIDkwCisKKyMgbGluZSA5MgorZGVmIGYoKToKKyAgICBjbGFzcyBYOgorICAgICAgICBkZWYgZygpOgorICAgICAgICAgICAgImRvYyIKKyAgICAgICAgICAgIHJldHVybiA0MgorICAgIHJldHVybiBYCittZXRob2RfaW5fZHluYW1pY19jbGFzcyA9IGYoKS5nLmltX2Z1bmMKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9rZXljZXJ0LnBlbSBiL2xpYi9weXRob24yLjcvdGVzdC9rZXljZXJ0LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDMxOGFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2tleWNlcnQucGVtCkBAIC0wLDAgKzEsMzEgQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJQ2R3SUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUV3Z2dKZEFnRUFBb0dCQU50YjArWXJLdXhldkdwbQorTHJqYVVoWlNnejZ6RkFtdUdGbUttVWJkam1mdjl6U21tZHNRSWtzSysrakswQmU5TGVaeTIwajZhaE9mdVZhMAordWZFbVBvUDdGeTRoWGVnS1pSOWNDV2NJZS9BNkgyeFdGMUlJSkxSVExhVThvbC9JN1QrdW01SEQ1QXdBd05QUAorVVNOVTBFZWdtdnAreHhXdTNOWDJtMVZlb3Q4NUFnTUJBQUVDZ1lBM1pkWjY3M1gwb2V4RmxxN0FBbXJ1dGtIdAorQ0w3THZ3cnBPaWFCamh5VHhUZVNOV3p2dFFCa0lVOERPSTBiSWF6QTRVcmVBRmZmd3R2RXVQbW9uRGIzRitJcQorU01BdTQyWGNHeVZaRWwrZ0hsVFBVOVhSWDduVE9YVnQrTWxSUlJ4TDZ0OUdrR2ZVQVhJM1h4SkRYVzNjMHZCSworVUw5eHFEOGNPUlhPZkUwNnJRSkJBUDhtRVgxRVJrUjY0UHRzb2U0MjgxdmpUbE5mSWJzN05NUGtVbnJuOU4vWQorQkxoak5JZlEzSEZaRzhCVE1MZlg3a0NTOUQ1OTNEVzV0VjRaOUJQL2M2Y0NRUURjRnpDY1ZBck5oMkpTeXdPUQorWmZUZlJiSmcvWjVMdDlGa25ndjFtZWVHTlBnSU1MTjhTZzY3OXBBT09XbXpkTU8zVjcwNnJOUHpTVk1NRTdFNQorb1BJZkFrRUE4cERkZGFyUDV0Q3ZUVGdVcG1URmJha20wS29UWm0yK0Z6SGNuQTRqUmgrWE5UalRPdjk4WTZJaworZU81ZDFabktYc2VXdmtabmNRZ3hmZG5NcXFwajV3SkFjTnEvUlZuZTFEYllsd1djaFQyU2k2NU1ZbW1KOHQrRgorMG1jc1VMcWpPbkVNd2Y1ZStwdHE1THp3YnlySFpZcTVGTms3b2N1ZlB2L1pRcmNTU0MrY0Z3SkJBS3ZPSkJ5UworeDU2cXlHZVpMT1FsV1MySlMzS0pvNTlYdUxGR3FjYmdOOU9tOXhGYTQxWWI0TjlOdnBsRml2c3ZaZHczbTFRLworU1BJWFF1VDhSTVBEVk5RPQorLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDVkRDQ0FiMmdBd0lCQWdJSkFOZkhPQmtacjhKT01BMEdDU3FHU0liM0RRRUJCUVVBTUY4eEN6QUpCZ05WCitCQVlUQWxoWk1SY3dGUVlEVlFRSEV3NURZWE4wYkdVZ1FXNTBhSEpoZURFak1DRUdBMVVFQ2hNYVVIbDBhRzl1CitJRk52Wm5SM1lYSmxJRVp2ZFc1a1lYUnBiMjR4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERBZUZ3MHhNREV3CitNRGd5TXpBeE5UWmFGdzB5TURFd01EVXlNekF4TlRaYU1GOHhDekFKQmdOVkJBWVRBbGhaTVJjd0ZRWURWUVFICitFdzVEWVhOMGJHVWdRVzUwYUhKaGVERWpNQ0VHQTFVRUNoTWFVSGwwYUc5dUlGTnZablIzWVhKbElFWnZkVzVrCitZWFJwYjI0eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQ0JuekFOQmdrcWhraUc5dzBCQVFFRkFBT0JqUUF3CitnWWtDZ1lFQTIxdlQ1aXNxN0Y2OGFtWXV1TnBTRmxLRFByTVVDYTRZV1lxWlJ0Mk9aKy8zTkthWjJ4QWlTd3I3Cis2TXJRRjcwdDVuTGJTUHBxRTUrNVZyUzU4U1krZy9zWExpRmQ2QXBsSDF3Slp3aDc4RG9mYkZZWFVnZ2t0Rk10CitwVHlpWDhqdFA2NmJrY1BrREFEQTA4OVJJMVRRUjZDYStuN0hGYTdjMWZhYlZWNmkzemtDQXdFQUFhTVlNQll3CitGQVlEVlIwUkJBMHdDNElKYkc5allXeG9iM04wTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCQUhQY3RRQkVRNHdkCitCSjYrSmNwSXJhb3BMbjhCR2hiak5XajQwbW1ScVdCL05BV0Y2TTVuZTdLcEdBdTd0TGVHNGhiMXpMYWxkSzhHCitseHkyR1BTUkY2TEZTNDhkcEVqMkhiTXYybnZ2Nnh4YWxETUo5K0RpY1dnQUtUUTZiY1gyajNHVWtDUjBnL1QxCitDUmxOQkFBbHZoS3pPN0NscGY5bDBZS0JFZnJhSkJ5WAorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2xpc3RfdGVzdHMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvbGlzdF90ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGQ2ZDZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2xpc3RfdGVzdHMucHkKQEAgLTAsMCArMSw1MzQgQEAKKyIiIgorVGVzdHMgY29tbW9uIHRvIGxpc3QgYW5kIFVzZXJMaXN0LlVzZXJMaXN0CisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCBzZXFfdGVzdHMKKworY2xhc3MgQ29tbW9uVGVzdChzZXFfdGVzdHMuQ29tbW9uVGVzdCk6CisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICAjIEl0ZXJhYmxlIGFyZyBpcyBvcHRpb25hbAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KFtdKSwgc2VsZi50eXBlMnRlc3QoKSkKKworICAgICAgICAjIEluaXQgY2xlYXJzIHByZXZpb3VzIHZhbHVlcworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzEsIDIsIDNdKQorICAgICAgICBhLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbXSkpCisKKyAgICAgICAgIyBJbml0IG92ZXJ3cml0ZXMgcHJldmlvdXMgdmFsdWVzCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMSwgMiwgM10pCisgICAgICAgIGEuX19pbml0X18oWzQsIDUsIDZdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFs0LCA1LCA2XSkpCisKKyAgICAgICAgIyBNdXRhYmxlcyBhbHdheXMgcmV0dXJuIGEgbmV3IG9iamVjdAorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChhKSwgaWQoYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGwwID0gW10KKyAgICAgICAgbDIgPSBbMCwgMSwgMl0KKyAgICAgICAgYTAgPSBzZWxmLnR5cGUydGVzdChsMCkKKyAgICAgICAgYTIgPSBzZWxmLnR5cGUydGVzdChsMikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhMCksIHN0cihsMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihhMCksIHJlcHIobDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYTIpLCByZXByKGwyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYTIpLCAiWzAsIDEsIDJdIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGEyKSwgIlswLCAxLCAyXSIpCisKKyAgICAgICAgYTIuYXBwZW5kKGEyKQorICAgICAgICBhMi5hcHBlbmQoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYTIpLCAiWzAsIDEsIDIsIFsuLi5dLCAzXSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihhMiksICJbMCwgMSwgMiwgWy4uLl0sIDNdIikKKworICAgICAgICBsMCA9IFtdCisgICAgICAgIGZvciBpIGluIHhyYW5nZShzeXMuZ2V0cmVjdXJzaW9ubGltaXQoKSArIDEwMCk6CisgICAgICAgICAgICBsMCA9IFtsMF0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCByZXByLCBsMCkKKworICAgIGRlZiB0ZXN0X3ByaW50KHNlbGYpOgorICAgICAgICBkID0gc2VsZi50eXBlMnRlc3QoeHJhbmdlKDIwMCkpCisgICAgICAgIGQuYXBwZW5kKGQpCisgICAgICAgIGQuZXh0ZW5kKHhyYW5nZSgyMDAsNDAwKSkKKyAgICAgICAgZC5hcHBlbmQoZCkKKyAgICAgICAgZC5hcHBlbmQoNDAwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikgYXMgZm86CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gZm8sIGQsCisgICAgICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZm86CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby5yZWFkKCksIHJlcHIoZCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X3NldF9zdWJzY3JpcHQoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChyYW5nZSgyMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuX19zZXRpdGVtX18sIHNsaWNlKDAsIDEwLCAwKSwgWzEsMiwzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fc2V0aXRlbV9fLCBzbGljZSgwLCAxMCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuX19zZXRpdGVtX18sIHNsaWNlKDAsIDEwLCAyKSwgWzEsMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX2dldGl0ZW1fXywgJ3gnLCAxKQorICAgICAgICBhW3NsaWNlKDIsMTAsMyldID0gWzEsMiwzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAxLCAzLCA0LCAyLCA2LCA3LCAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiwgMTcsIDE4LCAxOV0pKQorCisgICAgZGVmIHRlc3RfcmV2ZXJzZWQoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChyYW5nZSgyMCkpCisgICAgICAgIHIgPSByZXZlcnNlZChhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QociksIHNlbGYudHlwZTJ0ZXN0KHJhbmdlKDE5LCAtMSwgLTEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgci5uZXh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQoc2VsZi50eXBlMnRlc3QoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudHlwZTJ0ZXN0KCkpCisgICAgICAgICMgQnVnIDM2ODk6IG1ha2Ugc3VyZSBsaXN0LXJldmVyc2VkLWl0ZXJhdG9yIGRvZXNuJ3QgaGF2ZSBfX2xlbl9fCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGVuLCByZXZlcnNlZChbMSwyLDNdKSkKKworICAgIGRlZiB0ZXN0X3NldGl0ZW0oc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCisgICAgICAgIGFbMF0gPSAwCisgICAgICAgIGFbMV0gPSAxMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMCwgMTAwXSkpCisgICAgICAgIGFbLTFdID0gMjAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzAsIDIwMF0pKQorICAgICAgICBhWy0yXSA9IDEwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFsxMDAsIDIwMF0pKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhLl9fc2V0aXRlbV9fLCAtMywgMjAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhLl9fc2V0aXRlbV9fLCAyLCAyMDApCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhLl9fc2V0aXRlbV9fLCAwLCAyMDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGEuX19zZXRpdGVtX18sIC0xLCAyMDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX3NldGl0ZW1fXykKKworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzAsMSwyLDMsNF0pCisgICAgICAgIGFbMExdID0gMQorICAgICAgICBhWzFMXSA9IDIKKyAgICAgICAgYVsyTF0gPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzEsMiwzLDMsNF0pKQorICAgICAgICBhWzBdID0gNQorICAgICAgICBhWzFdID0gNgorICAgICAgICBhWzJdID0gNworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFs1LDYsNywzLDRdKSkKKyAgICAgICAgYVstMkxdID0gODgKKyAgICAgICAgYVstMUxdID0gOTkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbNSw2LDcsODgsOTldKSkKKyAgICAgICAgYVstMl0gPSA4CisgICAgICAgIGFbLTFdID0gOQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFs1LDYsNyw4LDldKSkKKworICAgIGRlZiB0ZXN0X2RlbGl0ZW0oc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCisgICAgICAgIGRlbCBhWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgWzBdKQorICAgICAgICBkZWwgYVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIFtdKQorCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCisgICAgICAgIGRlbCBhWy0yXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIFsxXSkKKyAgICAgICAgZGVsIGFbLTFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgW10pCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYS5fX2RlbGl0ZW1fXywgLTMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGEuX19kZWxpdGVtX18sIDIpCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhLl9fZGVsaXRlbV9fLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX2RlbGl0ZW1fXykKKworICAgIGRlZiB0ZXN0X3NldHNsaWNlKHNlbGYpOgorICAgICAgICBsID0gWzAsIDFdCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChsKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKC0zLCA0KToKKyAgICAgICAgICAgIGFbOmldID0gbFs6aV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgbCkKKyAgICAgICAgICAgIGEyID0gYVs6XQorICAgICAgICAgICAgYTJbOmldID0gYVs6aV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYTIsIGEpCisgICAgICAgICAgICBhW2k6XSA9IGxbaTpdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGwpCisgICAgICAgICAgICBhMiA9IGFbOl0KKyAgICAgICAgICAgIGEyW2k6XSA9IGFbaTpdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEyLCBhKQorICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoLTMsIDQpOgorICAgICAgICAgICAgICAgIGFbaTpqXSA9IGxbaTpqXQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgbCkKKyAgICAgICAgICAgICAgICBhMiA9IGFbOl0KKyAgICAgICAgICAgICAgICBhMltpOmpdID0gYVtpOmpdCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhMiwgYSkKKworICAgICAgICBhYTIgPSBhMls6XQorICAgICAgICBhYTJbOjBdID0gWy0yLCAtMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYTIsIFstMiwgLTEsIDAsIDFdKQorICAgICAgICBhYTJbMDpdID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYTIsIFtdKQorCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMSwgMiwgMywgNCwgNV0pCisgICAgICAgIGFbOi0xXSA9IGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMSwgMiwgMywgNCwgNSwgNV0pKQorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzEsIDIsIDMsIDQsIDVdKQorICAgICAgICBhWzE6XSA9IGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMSwgMSwgMiwgMywgNCwgNV0pKQorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzEsIDIsIDMsIDQsIDVdKQorICAgICAgICBhWzE6LTFdID0gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFsxLCAxLCAyLCAzLCA0LCA1LCA1XSkpCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFtdKQorICAgICAgICBhWzpdID0gdHVwbGUocmFuZ2UoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KHJhbmdlKDEwKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fc2V0c2xpY2VfXywgMCwgMSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fc2V0aXRlbV9fLCBzbGljZSgwLCAxLCA1KSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19zZXRzbGljZV9fKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19zZXRpdGVtX18pCisKKyAgICBkZWYgdGVzdF9kZWxzbGljZShzZWxmKToKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgZGVsIGFbMToyXQorICAgICAgICBkZWwgYVswOjFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoW10pKQorCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCisgICAgICAgIGRlbCBhWzFMOjJMXQorICAgICAgICBkZWwgYVswTDoxTF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbXSkpCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgZGVsIGFbLTI6LTFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzFdKSkKKworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzAsIDFdKQorICAgICAgICBkZWwgYVstMkw6LTFMXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFsxXSkpCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgZGVsIGFbMTpdCisgICAgICAgIGRlbCBhWzoxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFtdKSkKKworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzAsIDFdKQorICAgICAgICBkZWwgYVsxTDpdCisgICAgICAgIGRlbCBhWzoxTF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbXSkpCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgZGVsIGFbLTE6XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFswXSkpCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgZGVsIGFbLTFMOl0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMF0pKQorCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCisgICAgICAgIGRlbCBhWzpdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoW10pKQorCisgICAgZGVmIHRlc3RfYXBwZW5kKHNlbGYpOgorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoW10pCisgICAgICAgIGEuYXBwZW5kKDApCisgICAgICAgIGEuYXBwZW5kKDEpCisgICAgICAgIGEuYXBwZW5kKDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzAsIDEsIDJdKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuYXBwZW5kKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kKHNlbGYpOgorICAgICAgICBhMSA9IHNlbGYudHlwZTJ0ZXN0KFswXSkKKyAgICAgICAgYTIgPSBzZWxmLnR5cGUydGVzdCgoMCwgMSkpCisgICAgICAgIGEgPSBhMVs6XQorICAgICAgICBhLmV4dGVuZChhMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhMSArIGEyKQorCisgICAgICAgIGEuZXh0ZW5kKHNlbGYudHlwZTJ0ZXN0KFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhMSArIGEyKQorCisgICAgICAgIGEuZXh0ZW5kKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzAsIDAsIDEsIDAsIDAsIDFdKSkKKworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoInNwYW0iKQorICAgICAgICBhLmV4dGVuZCgiZWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgbGlzdCgic3BhbWVnZ3MiKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuZXh0ZW5kLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5leHRlbmQpCisKKyAgICBkZWYgdGVzdF9pbnNlcnQoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMSwgMl0pCisgICAgICAgIGEuaW5zZXJ0KDAsIC0yKQorICAgICAgICBhLmluc2VydCgxLCAtMSkKKyAgICAgICAgYS5pbnNlcnQoMiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBbLTIsIC0xLCAwLCAwLCAxLCAyXSkKKworICAgICAgICBiID0gYVs6XQorICAgICAgICBiLmluc2VydCgtMiwgImZvbyIpCisgICAgICAgIGIuaW5zZXJ0KC0yMDAsICJsZWZ0IikKKyAgICAgICAgYi5pbnNlcnQoMjAwLCAicmlnaHQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIHNlbGYudHlwZTJ0ZXN0KFsibGVmdCIsLTIsLTEsMCwwLCJmb28iLDEsMiwicmlnaHQiXSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLmluc2VydCkKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFstMSwgMCwgMV0pCisgICAgICAgIGEucG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBbLTEsIDBdKQorICAgICAgICBhLnBvcCgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIFswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYS5wb3AsIDUpCisgICAgICAgIGEucG9wKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGEucG9wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEucG9wLCA0MiwgNDIpCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMTAsIDIwLCAzMCwgNDBdKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWzAsIDAsIDFdKQorICAgICAgICBhLnJlbW92ZSgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIFswLCAwXSkKKyAgICAgICAgYS5yZW1vdmUoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBbMF0pCisgICAgICAgIGEucmVtb3ZlKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgW10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYS5yZW1vdmUsIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLnJlbW92ZSkKKworICAgICAgICBjbGFzcyBCYWRFeGMoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBCYWRDbXA6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBvdGhlciA9PSAyOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBCYWRFeGMoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJhZEV4YywgYS5yZW1vdmUsIEJhZENtcCgpKQorCisgICAgICAgIGNsYXNzIEJhZENtcDI6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByYWlzZSBCYWRFeGMoKQorCisgICAgICAgIGQgPSBzZWxmLnR5cGUydGVzdCgnYWJjZGVmZ2hjaWonKQorICAgICAgICBkLnJlbW92ZSgnYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgc2VsZi50eXBlMnRlc3QoJ2FiZGVmZ2hjaWonKSkKKyAgICAgICAgZC5yZW1vdmUoJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHNlbGYudHlwZTJ0ZXN0KCdhYmRlZmdoaWonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZC5yZW1vdmUsICdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzZWxmLnR5cGUydGVzdCgnYWJkZWZnaGlqJykpCisKKyAgICAgICAgIyBIYW5kbGUgY29tcGFyaXNvbiBlcnJvcnMKKyAgICAgICAgZCA9IHNlbGYudHlwZTJ0ZXN0KFsnYScsICdiJywgQmFkQ21wMigpLCAnYyddKQorICAgICAgICBlID0gc2VsZi50eXBlMnRlc3QoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQmFkRXhjLCBkLnJlbW92ZSwgJ2MnKQorICAgICAgICBmb3IgeCwgeSBpbiB6aXAoZCwgZSk6CisgICAgICAgICAgICAjIHZlcmlmeSB0aGF0IG9yaWdpbmFsIG9yZGVyIGFuZCB2YWx1ZXMgYXJlIHJldGFpbmVkLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh4LCB5KQorCisgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMSwgMl0pKjMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmNvdW50KDApLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuY291bnQoMSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5jb3VudCgzKSwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuY291bnQpCisKKyAgICAgICAgY2xhc3MgQmFkRXhjKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQmFkQ21wOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgb3RoZXIgPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQmFkRXhjKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYWRFeGMsIGEuY291bnQsIEJhZENtcCgpKQorCisgICAgZGVmIHRlc3RfaW5kZXgoc2VsZik6CisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5pbmRleCgwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmluZGV4KDEpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1LmluZGV4LCAyKQorCisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChbLTIsIC0xLCAwLCAwLCAxLCAyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmNvdW50KDApLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuaW5kZXgoMCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5pbmRleCgwLCAyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmluZGV4KC0yLCAtMTApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuaW5kZXgoMCwgMyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5pbmRleCgwLCAzLCA0KSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdS5pbmRleCwgMiwgMCwgLTEwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdS5pbmRleCkKKworICAgICAgICBjbGFzcyBCYWRFeGMoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBCYWRDbXA6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBvdGhlciA9PSAyOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBCYWRFeGMoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMCwgMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJhZEV4YywgYS5pbmRleCwgQmFkQ21wKCkpCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFstMiwgLTEsIDAsIDAsIDEsIDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuaW5kZXgoMCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5pbmRleCgwLCAyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmluZGV4KDAsIC00KSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmluZGV4KC0yLCAtMTApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuaW5kZXgoMCwgMyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5pbmRleCgwLCAtMyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5pbmRleCgwLCAzLCA0KSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmluZGV4KDAsIC0zLCAtMiksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5pbmRleCgwLCAtNCpzeXMubWF4aW50LCA0KnN5cy5tYXhpbnQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLmluZGV4LCAwLCA0KnN5cy5tYXhpbnQsLTQqc3lzLm1heGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYS5pbmRleCwgMiwgMCwgLTEwKQorICAgICAgICBhLnJlbW92ZSgwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLmluZGV4LCAyLCAwLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHNlbGYudHlwZTJ0ZXN0KFstMiwgLTEsIDAsIDEsIDJdKSkKKworICAgICAgICAjIFRlc3QgbW9kaWZ5aW5nIHRoZSBsaXN0IGR1cmluZyBpbmRleCdzIGl0ZXJhdGlvbgorICAgICAgICBjbGFzcyBFdmlsQ21wOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZpY3RpbSk6CisgICAgICAgICAgICAgICAgc2VsZi52aWN0aW0gPSB2aWN0aW0KKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLnZpY3RpbVs6XQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoKQorICAgICAgICBhWzpdID0gW0V2aWxDbXAoYSkgZm9yIF8gaW4geHJhbmdlKDEwMCldCisgICAgICAgICMgVGhpcyB1c2VkIHRvIHNlZyBmYXVsdCBiZWZvcmUgcGF0Y2ggIzEwMDU3NzgKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYS5pbmRleCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3JldmVyc2Uoc2VsZik6CisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChbLTIsIC0xLCAwLCAxLCAyXSkKKyAgICAgICAgdTIgPSB1WzpdCisgICAgICAgIHUucmV2ZXJzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgWzIsIDEsIDAsIC0xLCAtMl0pCisgICAgICAgIHUucmV2ZXJzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgdTIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1LnJldmVyc2UsIDQyKQorCisgICAgZGVmIHRlc3Rfc29ydChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygKKyAgICAgICAgICAgICAgICAoInRoZSBjbXAgYXJndW1lbnQgaXMgbm90IHN1cHBvcnRlZCIsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9zb3J0KCkKKworICAgIGRlZiBfdGVzdF9zb3J0KHNlbGYpOgorICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoWzEsIDBdKQorICAgICAgICB1LnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIFswLCAxXSkKKworICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoWzIsMSwwLC0xLC0yXSkKKyAgICAgICAgdS5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBzZWxmLnR5cGUydGVzdChbLTIsLTEsMCwxLDJdKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUuc29ydCwgNDIsIDQyKQorCisgICAgICAgIGRlZiByZXZjbXAoYSwgYik6CisgICAgICAgICAgICByZXR1cm4gY21wKGIsIGEpCisgICAgICAgIHUuc29ydChyZXZjbXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgc2VsZi50eXBlMnRlc3QoWzIsMSwwLC0xLC0yXSkpCisKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGR1bXBzIGNvcmUgaW4gdW5wYXRjaGVkIFB5dGhvbiAxLjU6CisgICAgICAgIGRlZiBteUNvbXBhcmlzb24oeCx5KToKKyAgICAgICAgICAgIHJldHVybiBjbXAoeCUzLCB5JTcpCisgICAgICAgIHogPSBzZWxmLnR5cGUydGVzdChyYW5nZSgxMikpCisgICAgICAgIHouc29ydChteUNvbXBhcmlzb24pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB6LnNvcnQsIDIpCisKKyAgICAgICAgZGVmIHNlbGZtb2RpZnlpbmdDb21wYXJpc29uKHgseSk6CisgICAgICAgICAgICB6LmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuIGNtcCh4LCB5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB6LnNvcnQsIHNlbGZtb2RpZnlpbmdDb21wYXJpc29uKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgei5zb3J0LCBsYW1iZGEgeCwgeTogJ3MnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgei5zb3J0LCA0MiwgNDIsIDQyLCA0MikKKworICAgIGRlZiB0ZXN0X3NsaWNlKHNlbGYpOgorICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoInNwYW0iKQorICAgICAgICB1WzoyXSA9ICJoIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIGxpc3QoImhhbSIpKQorCisgICAgZGVmIHRlc3RfaWFkZChzZWxmKToKKyAgICAgICAgc3VwZXIoQ29tbW9uVGVzdCwgc2VsZikudGVzdF9pYWRkKCkKKyAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgdTIgPSB1CisgICAgICAgIHUgKz0gWzIsIDNdCisgICAgICAgIHNlbGYuYXNzZXJ0SXModSwgdTIpCisKKyAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KCJzcGFtIikKKyAgICAgICAgdSArPSAiZWdncyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBzZWxmLnR5cGUydGVzdCgic3BhbWVnZ3MiKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUuX19pYWRkX18sIE5vbmUpCisKKyAgICBkZWYgdGVzdF9pbXVsKHNlbGYpOgorICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoWzAsIDFdKQorICAgICAgICB1ICo9IDMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBzZWxmLnR5cGUydGVzdChbMCwgMSwgMCwgMSwgMCwgMV0pKQorICAgICAgICB1ICo9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBzZWxmLnR5cGUydGVzdChbXSkpCisgICAgICAgIHMgPSBzZWxmLnR5cGUydGVzdChbXSkKKyAgICAgICAgb2xkaWQgPSBpZChzKQorICAgICAgICBzICo9IDEwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQocyksIG9sZGlkKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kZWRzbGljaW5nKHNlbGYpOgorICAgICAgICAjICBzdWJzY3JpcHQKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLDEsMiwzLDRdKQorCisgICAgICAgICMgIGRlbGV0aW9uCisgICAgICAgIGRlbCBhWzo6Ml0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMSwzXSkpCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChyYW5nZSg1KSkKKyAgICAgICAgZGVsIGFbMTo6Ml0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMCwyLDRdKSkKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KHJhbmdlKDUpKQorICAgICAgICBkZWwgYVsxOjotMl0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMCwyLDMsNF0pKQorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QocmFuZ2UoMTApKQorICAgICAgICBkZWwgYVs6OjEwMDBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldKSkKKyAgICAgICAgIyAgYXNzaWdubWVudAorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QocmFuZ2UoMTApKQorICAgICAgICBhWzo6Ml0gPSBbLTFdKjUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbLTEsIDEsIC0xLCAzLCAtMSwgNSwgLTEsIDcsIC0xLCA5XSkpCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChyYW5nZSgxMCkpCisgICAgICAgIGFbOjotNF0gPSBbMTBdKjMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBzZWxmLnR5cGUydGVzdChbMCwgMTAsIDIsIDMsIDQsIDEwLCA2LCA3LCA4ICwxMF0pKQorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QocmFuZ2UoNCkpCisgICAgICAgIGFbOjotMV0gPSBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzMsIDIsIDEsIDBdKSkKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KHJhbmdlKDEwKSkKKyAgICAgICAgYiA9IGFbOl0KKyAgICAgICAgYyA9IGFbOl0KKyAgICAgICAgYVsyOjNdID0gc2VsZi50eXBlMnRlc3QoWyJ0d28iLCAiZWxlbWVudHMiXSkKKyAgICAgICAgYltzbGljZSgyLDMpXSA9IHNlbGYudHlwZTJ0ZXN0KFsidHdvIiwgImVsZW1lbnRzIl0pCisgICAgICAgIGNbMjozOl0gPSBzZWxmLnR5cGUydGVzdChbInR3byIsICJlbGVtZW50cyJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYykKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KHJhbmdlKDEwKSkKKyAgICAgICAgYVs6OjJdID0gdHVwbGUocmFuZ2UoNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgc2VsZi50eXBlMnRlc3QoWzAsIDEsIDEsIDMsIDIsIDUsIDMsIDcsIDQsIDldKSkKKyAgICAgICAgIyB0ZXN0IGlzc3VlNzc4OAorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QocmFuZ2UoMTApKQorICAgICAgICBkZWwgYVs5OjoxPDwzMzNdCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9leGNlcHRpb25faGFuZGxpbmcoc2VsZik6CisgICAgICAgICMgQnVnICMxMjQyNjU3CisgICAgICAgIGNsYXNzIEYob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgbGlzdCwgRigpKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L2xvY2tfdGVzdHMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvbG9ja190ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjZmOWJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L2xvY2tfdGVzdHMucHkKQEAgLTAsMCArMSw1NDYgQEAKKyIiIgorVmFyaW91cyB0ZXN0cyBmb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuCisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2Zyb20gdGhyZWFkIGltcG9ydCBzdGFydF9uZXdfdGhyZWFkLCBnZXRfaWRlbnQKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CisKKworZGVmIF93YWl0KCk6CisgICAgIyBBIGNydWRlIHdhaXQveWllbGQgZnVuY3Rpb24gbm90IHJlbHlpbmcgb24gc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuCisgICAgdGltZS5zbGVlcCgwLjAxKQorCitjbGFzcyBCdW5jaChvYmplY3QpOgorICAgICIiIgorICAgIEEgYnVuY2ggb2YgdGhyZWFkcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZiwgbiwgd2FpdF9iZWZvcmVfZXhpdD1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBDb25zdHJ1Y3QgYSBidW5jaCBvZiBgbmAgdGhyZWFkcyBydW5uaW5nIHRoZSBzYW1lIGZ1bmN0aW9uIGBmYC4KKyAgICAgICAgSWYgYHdhaXRfYmVmb3JlX2V4aXRgIGlzIFRydWUsIHRoZSB0aHJlYWRzIHdvbid0IHRlcm1pbmF0ZSB1bnRpbAorICAgICAgICBkb19maW5pc2goKSBpcyBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmYgPSBmCisgICAgICAgIHNlbGYubiA9IG4KKyAgICAgICAgc2VsZi5zdGFydGVkID0gW10KKyAgICAgICAgc2VsZi5maW5pc2hlZCA9IFtdCisgICAgICAgIHNlbGYuX2Nhbl9leGl0ID0gbm90IHdhaXRfYmVmb3JlX2V4aXQKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHRpZCA9IGdldF9pZGVudCgpCisgICAgICAgICAgICBzZWxmLnN0YXJ0ZWQuYXBwZW5kKHRpZCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5maW5pc2hlZC5hcHBlbmQodGlkKQorICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9jYW5fZXhpdDoKKyAgICAgICAgICAgICAgICAgICAgX3dhaXQoKQorICAgICAgICBmb3IgaSBpbiByYW5nZShuKToKKyAgICAgICAgICAgIHN0YXJ0X25ld190aHJlYWQodGFzaywgKCkpCisKKyAgICBkZWYgd2FpdF9mb3Jfc3RhcnRlZChzZWxmKToKKyAgICAgICAgd2hpbGUgbGVuKHNlbGYuc3RhcnRlZCkgPCBzZWxmLm46CisgICAgICAgICAgICBfd2FpdCgpCisKKyAgICBkZWYgd2FpdF9mb3JfZmluaXNoZWQoc2VsZik6CisgICAgICAgIHdoaWxlIGxlbihzZWxmLmZpbmlzaGVkKSA8IHNlbGYubjoKKyAgICAgICAgICAgIF93YWl0KCkKKworICAgIGRlZiBkb19maW5pc2goc2VsZik6CisgICAgICAgIHNlbGYuX2Nhbl9leGl0ID0gVHJ1ZQorCisKK2NsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl90aHJlYWRzID0gc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQorICAgICAgICBzdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorCisKK2NsYXNzIEJhc2VMb2NrVGVzdHMoQmFzZVRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0cyBmb3IgYm90aCByZWN1cnNpdmUgYW5kIG5vbi1yZWN1cnNpdmUgbG9ja3MuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQorICAgICAgICBkZWwgbG9jaworCisgICAgZGVmIHRlc3RfYWNxdWlyZV9kZXN0cm95KHNlbGYpOgorICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCisgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgIGRlbCBsb2NrCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlX3JlbGVhc2Uoc2VsZik6CisgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgZGVsIGxvY2sKKworICAgIGRlZiB0ZXN0X3RyeV9hY3F1aXJlKHNlbGYpOgorICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmFjcXVpcmUoRmFsc2UpKQorICAgICAgICBsb2NrLnJlbGVhc2UoKQorCisgICAgZGVmIHRlc3RfdHJ5X2FjcXVpcmVfY29udGVuZGVkKHNlbGYpOgorICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCisgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGxvY2suYWNxdWlyZShGYWxzZSkpCisgICAgICAgIEJ1bmNoKGYsIDEpLndhaXRfZm9yX2ZpbmlzaGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHRbMF0pCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlX2NvbnRlbmRlZChzZWxmKToKKyAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQorICAgICAgICBsb2NrLmFjcXVpcmUoKQorICAgICAgICBOID0gNQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisKKyAgICAgICAgYiA9IEJ1bmNoKGYsIE4pCisgICAgICAgIGIud2FpdF9mb3Jfc3RhcnRlZCgpCisgICAgICAgIF93YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYi5maW5pc2hlZCksIDApCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIGIud2FpdF9mb3JfZmluaXNoZWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiLmZpbmlzaGVkKSwgTikKKworICAgIGRlZiB0ZXN0X3dpdGgoc2VsZik6CisgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICBkZWYgX3dpdGgoZXJyPU5vbmUpOgorICAgICAgICAgICAgd2l0aCBsb2NrOgorICAgICAgICAgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyCisgICAgICAgIF93aXRoKCkKKyAgICAgICAgIyBDaGVjayB0aGUgbG9jayBpcyB1bmFjcXVpcmVkCisgICAgICAgIEJ1bmNoKGYsIDEpLndhaXRfZm9yX2ZpbmlzaGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfd2l0aCwgVHlwZUVycm9yKQorICAgICAgICAjIENoZWNrIHRoZSBsb2NrIGlzIHVuYWNxdWlyZWQKKyAgICAgICAgQnVuY2goZiwgMSkud2FpdF9mb3JfZmluaXNoZWQoKQorCisgICAgZGVmIHRlc3RfdGhyZWFkX2xlYWsoc2VsZik6CisgICAgICAgICMgVGhlIGxvY2sgc2hvdWxkbid0IGxlYWsgYSBUaHJlYWQgaW5zdGFuY2Ugd2hlbiB1c2VkIGZyb20gYSBmb3JlaWduCisgICAgICAgICMgKG5vbi10aHJlYWRpbmcpIHRocmVhZC4KKyAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIG4gPSBsZW4odGhyZWFkaW5nLmVudW1lcmF0ZSgpKQorICAgICAgICAjIFdlIHJ1biBtYW55IHRocmVhZHMgaW4gdGhlIGhvcGUgdGhhdCBleGlzdGluZyB0aHJlYWRzIGlkcyB3b24ndAorICAgICAgICAjIGJlIHJlY3ljbGVkLgorICAgICAgICBCdW5jaChmLCAxNSkud2FpdF9mb3JfZmluaXNoZWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIGxlbih0aHJlYWRpbmcuZW51bWVyYXRlKCkpKQorCisKK2NsYXNzIExvY2tUZXN0cyhCYXNlTG9ja1Rlc3RzKToKKyAgICAiIiIKKyAgICBUZXN0cyBmb3Igbm9uLXJlY3Vyc2l2ZSwgd2VhayBsb2NrcworICAgICh3aGljaCBjYW4gYmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGZyb20gZGlmZmVyZW50IHRocmVhZHMpLgorICAgICIiIgorICAgIGRlZiB0ZXN0X3JlYWNxdWlyZShzZWxmKToKKyAgICAgICAgIyBMb2NrIG5lZWRzIHRvIGJlIHJlbGVhc2VkIGJlZm9yZSByZS1hY3F1aXJpbmcuCisgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKKyAgICAgICAgcGhhc2UgPSBbXQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgICAgIHBoYXNlLmFwcGVuZChOb25lKQorICAgICAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgICAgIHBoYXNlLmFwcGVuZChOb25lKQorICAgICAgICBzdGFydF9uZXdfdGhyZWFkKGYsICgpKQorICAgICAgICB3aGlsZSBsZW4ocGhhc2UpID09IDA6CisgICAgICAgICAgICBfd2FpdCgpCisgICAgICAgIF93YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGhhc2UpLCAxKQorICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICB3aGlsZSBsZW4ocGhhc2UpID09IDE6CisgICAgICAgICAgICBfd2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBoYXNlKSwgMikKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVudF90aHJlYWQoc2VsZik6CisgICAgICAgICMgTG9jayBjYW4gYmUgcmVsZWFzZWQgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQuCisgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIGIgPSBCdW5jaChmLCAxKQorICAgICAgICBiLndhaXRfZm9yX2ZpbmlzaGVkKCkKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKworCitjbGFzcyBSTG9ja1Rlc3RzKEJhc2VMb2NrVGVzdHMpOgorICAgICIiIgorICAgIFRlc3RzIGZvciByZWN1cnNpdmUgbG9ja3MuCisgICAgIiIiCisgICAgZGVmIHRlc3RfcmVhY3F1aXJlKHNlbGYpOgorICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCisgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlX3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgICMgQ2Fubm90IHJlbGVhc2UgYW4gdW5hY3F1aXJlZCBsb2NrCisgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBsb2NrLnJlbGVhc2UpCisgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbG9jay5yZWxlYXNlKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW50X3RocmVhZChzZWxmKToKKyAgICAgICAgIyBDYW5ub3QgcmVsZWFzZSBmcm9tIGEgZGlmZmVyZW50IHRocmVhZAorICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBsb2NrLmFjcXVpcmUoKQorICAgICAgICBiID0gQnVuY2goZiwgMSwgVHJ1ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBsb2NrLnJlbGVhc2UpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBiLmRvX2ZpbmlzaCgpCisKKyAgICBkZWYgdGVzdF9faXNfb3duZWQoc2VsZik6CisgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLl9pc19vd25lZCgpKQorICAgICAgICBsb2NrLmFjcXVpcmUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5faXNfb3duZWQoKSkKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2suX2lzX293bmVkKCkpCisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGxvY2suX2lzX293bmVkKCkpCisgICAgICAgIEJ1bmNoKGYsIDEpLndhaXRfZm9yX2ZpbmlzaGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHRbMF0pCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLl9pc19vd25lZCgpKQorICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2suX2lzX293bmVkKCkpCisKKworY2xhc3MgRXZlbnRUZXN0cyhCYXNlVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIGZvciBFdmVudCBvYmplY3RzLgorICAgICIiIgorCisgICAgZGVmIHRlc3RfaXNfc2V0KHNlbGYpOgorICAgICAgICBldnQgPSBzZWxmLmV2ZW50dHlwZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXZ0LmlzX3NldCgpKQorICAgICAgICBldnQuc2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV2dC5pc19zZXQoKSkKKyAgICAgICAgZXZ0LnNldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldnQuaXNfc2V0KCkpCisgICAgICAgIGV2dC5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXZ0LmlzX3NldCgpKQorICAgICAgICBldnQuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2dC5pc19zZXQoKSkKKworICAgIGRlZiBfY2hlY2tfbm90aWZ5KHNlbGYsIGV2dCk6CisgICAgICAgICMgQWxsIHRocmVhZHMgZ2V0IG5vdGlmaWVkCisgICAgICAgIE4gPSA1CisgICAgICAgIHJlc3VsdHMxID0gW10KKyAgICAgICAgcmVzdWx0czIgPSBbXQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcmVzdWx0czEuYXBwZW5kKGV2dC53YWl0KCkpCisgICAgICAgICAgICByZXN1bHRzMi5hcHBlbmQoZXZ0LndhaXQoKSkKKyAgICAgICAgYiA9IEJ1bmNoKGYsIE4pCisgICAgICAgIGIud2FpdF9mb3Jfc3RhcnRlZCgpCisgICAgICAgIF93YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0czEpLCAwKQorICAgICAgICBldnQuc2V0KCkKKyAgICAgICAgYi53YWl0X2Zvcl9maW5pc2hlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czEsIFtUcnVlXSAqIE4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czIsIFtUcnVlXSAqIE4pCisKKyAgICBkZWYgdGVzdF9ub3RpZnkoc2VsZik6CisgICAgICAgIGV2dCA9IHNlbGYuZXZlbnR0eXBlKCkKKyAgICAgICAgc2VsZi5fY2hlY2tfbm90aWZ5KGV2dCkKKyAgICAgICAgIyBBbm90aGVyIHRpbWUsIGFmdGVyIGFuIGV4cGxpY2l0IGNsZWFyKCkKKyAgICAgICAgZXZ0LnNldCgpCisgICAgICAgIGV2dC5jbGVhcigpCisgICAgICAgIHNlbGYuX2NoZWNrX25vdGlmeShldnQpCisKKyAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgorICAgICAgICBldnQgPSBzZWxmLmV2ZW50dHlwZSgpCisgICAgICAgIHJlc3VsdHMxID0gW10KKyAgICAgICAgcmVzdWx0czIgPSBbXQorICAgICAgICBOID0gNQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcmVzdWx0czEuYXBwZW5kKGV2dC53YWl0KDAuMCkpCisgICAgICAgICAgICB0MSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICByID0gZXZ0LndhaXQoMC4yKQorICAgICAgICAgICAgdDIgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgcmVzdWx0czIuYXBwZW5kKChyLCB0MiAtIHQxKSkKKyAgICAgICAgQnVuY2goZiwgTikud2FpdF9mb3JfZmluaXNoZWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMxLCBbRmFsc2VdICogTikKKyAgICAgICAgZm9yIHIsIGR0IGluIHJlc3VsdHMyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR0ID49IDAuMiwgZHQpCisgICAgICAgICMgVGhlIGV2ZW50IGlzIHNldAorICAgICAgICByZXN1bHRzMSA9IFtdCisgICAgICAgIHJlc3VsdHMyID0gW10KKyAgICAgICAgZXZ0LnNldCgpCisgICAgICAgIEJ1bmNoKGYsIE4pLndhaXRfZm9yX2ZpbmlzaGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMSwgW1RydWVdICogTikKKyAgICAgICAgZm9yIHIsIGR0IGluIHJlc3VsdHMyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIpCisKKworY2xhc3MgQ29uZGl0aW9uVGVzdHMoQmFzZVRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0cyBmb3IgY29uZGl0aW9uIHZhcmlhYmxlcy4KKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X2FjcXVpcmUoc2VsZik6CisgICAgICAgIGNvbmQgPSBzZWxmLmNvbmR0eXBlKCkKKyAgICAgICAgIyBCZSBkZWZhdWx0IHdlIGhhdmUgYW4gUkxvY2s6IHRoZSBjb25kaXRpb24gY2FuIGJlIGFjcXVpcmVkIG11bHRpcGxlCisgICAgICAgICMgdGltZXMuCisgICAgICAgIGNvbmQuYWNxdWlyZSgpCisgICAgICAgIGNvbmQuYWNxdWlyZSgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIGxvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIGNvbmQgPSBzZWxmLmNvbmR0eXBlKGxvY2spCisgICAgICAgIGNvbmQuYWNxdWlyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5hY3F1aXJlKEZhbHNlKSkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2suYWNxdWlyZShGYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZC5hY3F1aXJlKEZhbHNlKSkKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgd2l0aCBjb25kOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmFjcXVpcmUoRmFsc2UpKQorCisgICAgZGVmIHRlc3RfdW5hY3F1aXJlZF93YWl0KHNlbGYpOgorICAgICAgICBjb25kID0gc2VsZi5jb25kdHlwZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY29uZC53YWl0KQorCisgICAgZGVmIHRlc3RfdW5hY3F1aXJlZF9ub3RpZnkoc2VsZik6CisgICAgICAgIGNvbmQgPSBzZWxmLmNvbmR0eXBlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjb25kLm5vdGlmeSkKKworICAgIGRlZiBfY2hlY2tfbm90aWZ5KHNlbGYsIGNvbmQpOgorICAgICAgICBOID0gNQorICAgICAgICByZXN1bHRzMSA9IFtdCisgICAgICAgIHJlc3VsdHMyID0gW10KKyAgICAgICAgcGhhc2VfbnVtID0gMAorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGNvbmQud2FpdCgpCisgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmVzdWx0czEuYXBwZW5kKHBoYXNlX251bSkKKyAgICAgICAgICAgIGNvbmQuYWNxdWlyZSgpCisgICAgICAgICAgICBjb25kLndhaXQoKQorICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJlc3VsdHMyLmFwcGVuZChwaGFzZV9udW0pCisgICAgICAgIGIgPSBCdW5jaChmLCBOKQorICAgICAgICBiLndhaXRfZm9yX3N0YXJ0ZWQoKQorICAgICAgICBfd2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czEsIFtdKQorICAgICAgICAjIE5vdGlmeSAzIHRocmVhZHMgYXQgZmlyc3QKKyAgICAgICAgY29uZC5hY3F1aXJlKCkKKyAgICAgICAgY29uZC5ub3RpZnkoMykKKyAgICAgICAgX3dhaXQoKQorICAgICAgICBwaGFzZV9udW0gPSAxCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHdoaWxlIGxlbihyZXN1bHRzMSkgPCAzOgorICAgICAgICAgICAgX3dhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMxLCBbMV0gKiAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMyLCBbXSkKKyAgICAgICAgIyBOb3RpZnkgNSB0aHJlYWRzOiB0aGV5IG1pZ2h0IGJlIGluIHRoZWlyIGZpcnN0IG9yIHNlY29uZCB3YWl0CisgICAgICAgIGNvbmQuYWNxdWlyZSgpCisgICAgICAgIGNvbmQubm90aWZ5KDUpCisgICAgICAgIF93YWl0KCkKKyAgICAgICAgcGhhc2VfbnVtID0gMgorICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB3aGlsZSBsZW4ocmVzdWx0czEpICsgbGVuKHJlc3VsdHMyKSA8IDg6CisgICAgICAgICAgICBfd2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czEsIFsxXSAqIDMgKyBbMl0gKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMyLCBbMl0gKiAzKQorICAgICAgICAjIE5vdGlmeSBhbGwgdGhyZWFkczogdGhleSBhcmUgYWxsIGluIHRoZWlyIHNlY29uZCB3YWl0CisgICAgICAgIGNvbmQuYWNxdWlyZSgpCisgICAgICAgIGNvbmQubm90aWZ5X2FsbCgpCisgICAgICAgIF93YWl0KCkKKyAgICAgICAgcGhhc2VfbnVtID0gMworICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB3aGlsZSBsZW4ocmVzdWx0czIpIDwgNToKKyAgICAgICAgICAgIF93YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMSwgWzFdICogMyArIFsyXSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czIsIFsyXSAqIDMgKyBbM10gKiAyKQorICAgICAgICBiLndhaXRfZm9yX2ZpbmlzaGVkKCkKKworICAgIGRlZiB0ZXN0X25vdGlmeShzZWxmKToKKyAgICAgICAgY29uZCA9IHNlbGYuY29uZHR5cGUoKQorICAgICAgICBzZWxmLl9jaGVja19ub3RpZnkoY29uZCkKKyAgICAgICAgIyBBIHNlY29uZCB0aW1lLCB0byBjaGVjayBpbnRlcm5hbCBzdGF0ZSBpcyBzdGlsbCBvay4KKyAgICAgICAgc2VsZi5fY2hlY2tfbm90aWZ5KGNvbmQpCisKKyAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgorICAgICAgICBjb25kID0gc2VsZi5jb25kdHlwZSgpCisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBOID0gNQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIHQxID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGNvbmQud2FpdCgwLjIpCisgICAgICAgICAgICB0MiA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQodDIgLSB0MSkKKyAgICAgICAgQnVuY2goZiwgTikud2FpdF9mb3JfZmluaXNoZWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHRzKSwgNSkKKyAgICAgICAgZm9yIGR0IGluIHJlc3VsdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZHQgPj0gMC4yLCBkdCkKKworCitjbGFzcyBCYXNlU2VtYXBob3JlVGVzdHMoQmFzZVRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBDb21tb24gdGVzdHMgZm9yIHtib3VuZGVkLCB1bmJvdW5kZWR9IHNlbWFwaG9yZSBvYmplY3RzLgorICAgICIiIgorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuc2VtdHlwZSwgdmFsdWUgPSAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5zZW10eXBlLCB2YWx1ZSA9IC1zeXMubWF4aW50KQorCisgICAgZGVmIHRlc3RfYWNxdWlyZShzZWxmKToKKyAgICAgICAgc2VtID0gc2VsZi5zZW10eXBlKDEpCisgICAgICAgIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZW0gPSBzZWxmLnNlbXR5cGUoMikKKyAgICAgICAgc2VtLmFjcXVpcmUoKQorICAgICAgICBzZW0uYWNxdWlyZSgpCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorCisgICAgZGVmIHRlc3RfYWNxdWlyZV9kZXN0cm95KHNlbGYpOgorICAgICAgICBzZW0gPSBzZWxmLnNlbXR5cGUoKQorICAgICAgICBzZW0uYWNxdWlyZSgpCisgICAgICAgIGRlbCBzZW0KKworICAgIGRlZiB0ZXN0X2FjcXVpcmVfY29udGVuZGVkKHNlbGYpOgorICAgICAgICBzZW0gPSBzZWxmLnNlbXR5cGUoNykKKyAgICAgICAgc2VtLmFjcXVpcmUoKQorICAgICAgICBOID0gMTAKKyAgICAgICAgcmVzdWx0czEgPSBbXQorICAgICAgICByZXN1bHRzMiA9IFtdCisgICAgICAgIHBoYXNlX251bSA9IDAKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgICAgIHJlc3VsdHMxLmFwcGVuZChwaGFzZV9udW0pCisgICAgICAgICAgICBzZW0uYWNxdWlyZSgpCisgICAgICAgICAgICByZXN1bHRzMi5hcHBlbmQocGhhc2VfbnVtKQorICAgICAgICBiID0gQnVuY2goZiwgMTApCisgICAgICAgIGIud2FpdF9mb3Jfc3RhcnRlZCgpCisgICAgICAgIHdoaWxlIGxlbihyZXN1bHRzMSkgKyBsZW4ocmVzdWx0czIpIDwgNjoKKyAgICAgICAgICAgIF93YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMSArIHJlc3VsdHMyLCBbMF0gKiA2KQorICAgICAgICBwaGFzZV9udW0gPSAxCisgICAgICAgIGZvciBpIGluIHJhbmdlKDcpOgorICAgICAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICB3aGlsZSBsZW4ocmVzdWx0czEpICsgbGVuKHJlc3VsdHMyKSA8IDEzOgorICAgICAgICAgICAgX3dhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChyZXN1bHRzMSArIHJlc3VsdHMyKSwgWzBdICogNiArIFsxXSAqIDcpCisgICAgICAgIHBoYXNlX251bSA9IDIKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNik6CisgICAgICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHdoaWxlIGxlbihyZXN1bHRzMSkgKyBsZW4ocmVzdWx0czIpIDwgMTk6CisgICAgICAgICAgICBfd2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHJlc3VsdHMxICsgcmVzdWx0czIpLCBbMF0gKiA2ICsgWzFdICogNyArIFsyXSAqIDYpCisgICAgICAgICMgVGhlIHNlbWFwaG9yZSBpcyBzdGlsbCBsb2NrZWQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0uYWNxdWlyZShGYWxzZSkpCisgICAgICAgICMgRmluYWwgcmVsZWFzZSwgdG8gbGV0IHRoZSBsYXN0IHRocmVhZCBmaW5pc2gKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBiLndhaXRfZm9yX2ZpbmlzaGVkKCkKKworICAgIGRlZiB0ZXN0X3RyeV9hY3F1aXJlKHNlbGYpOgorICAgICAgICBzZW0gPSBzZWxmLnNlbXR5cGUoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5hY3F1aXJlKEZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5hY3F1aXJlKEZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0uYWNxdWlyZShGYWxzZSkpCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5hY3F1aXJlKEZhbHNlKSkKKworICAgIGRlZiB0ZXN0X3RyeV9hY3F1aXJlX2NvbnRlbmRlZChzZWxmKToKKyAgICAgICAgc2VtID0gc2VsZi5zZW10eXBlKDQpCisgICAgICAgIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChzZW0uYWNxdWlyZShGYWxzZSkpCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChzZW0uYWNxdWlyZShGYWxzZSkpCisgICAgICAgIEJ1bmNoKGYsIDUpLndhaXRfZm9yX2ZpbmlzaGVkKCkKKyAgICAgICAgIyBUaGVyZSBjYW4gYmUgYSB0aHJlYWQgc3dpdGNoIGJldHdlZW4gYWNxdWlyaW5nIHRoZSBzZW1hcGhvcmUgYW5kCisgICAgICAgICMgYXBwZW5kaW5nIHRoZSByZXN1bHQsIHRoZXJlZm9yZSByZXN1bHRzIHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlCisgICAgICAgICMgb3JkZXJlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocmVzdWx0cyksIFtGYWxzZV0gKiA3ICsgW1RydWVdICogIDMgKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF92YWx1ZShzZWxmKToKKyAgICAgICAgIyBUaGUgZGVmYXVsdCBpbml0aWFsIHZhbHVlIGlzIDEuCisgICAgICAgIHNlbSA9IHNlbGYuc2VtdHlwZSgpCisgICAgICAgIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgYiA9IEJ1bmNoKGYsIDEpCisgICAgICAgIGIud2FpdF9mb3Jfc3RhcnRlZCgpCisgICAgICAgIF93YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiLmZpbmlzaGVkKQorICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIGIud2FpdF9mb3JfZmluaXNoZWQoKQorCisgICAgZGVmIHRlc3Rfd2l0aChzZWxmKToKKyAgICAgICAgc2VtID0gc2VsZi5zZW10eXBlKDIpCisgICAgICAgIGRlZiBfd2l0aChlcnI9Tm9uZSk6CisgICAgICAgICAgICB3aXRoIHNlbToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmFjcXVpcmUoRmFsc2UpKQorICAgICAgICAgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0uYWNxdWlyZShGYWxzZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycgorICAgICAgICBfd2l0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0uYWNxdWlyZShGYWxzZSkpCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfd2l0aCwgVHlwZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmFjcXVpcmUoRmFsc2UpKQorICAgICAgICBzZW0ucmVsZWFzZSgpCisKK2NsYXNzIFNlbWFwaG9yZVRlc3RzKEJhc2VTZW1hcGhvcmVUZXN0cyk6CisgICAgIiIiCisgICAgVGVzdHMgZm9yIHVuYm91bmRlZCBzZW1hcGhvcmVzLgorICAgICIiIgorCisgICAgZGVmIHRlc3RfcmVsZWFzZV91bmFjcXVpcmVkKHNlbGYpOgorICAgICAgICAjIFVuYm91bmRlZCByZWxlYXNlcyBhcmUgYWxsb3dlZCBhbmQgaW5jcmVtZW50IHRoZSBzZW1hcGhvcmUncyB2YWx1ZQorICAgICAgICBzZW0gPSBzZWxmLnNlbXR5cGUoMSkKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZW0uYWNxdWlyZSgpCisgICAgICAgIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorCisKK2NsYXNzIEJvdW5kZWRTZW1hcGhvcmVUZXN0cyhCYXNlU2VtYXBob3JlVGVzdHMpOgorICAgICIiIgorICAgIFRlc3RzIGZvciBib3VuZGVkIHNlbWFwaG9yZXMuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlX3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgICMgQ2Fubm90IGdvIHBhc3QgdGhlIGluaXRpYWwgdmFsdWUKKyAgICAgICAgc2VtID0gc2VsZi5zZW10eXBlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VtLnJlbGVhc2UpCisgICAgICAgIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZW0ucmVsZWFzZSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9tYXBwaW5nX3Rlc3RzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L21hcHBpbmdfdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQzNzUwYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9tYXBwaW5nX3Rlc3RzLnB5CkBAIC0wLDAgKzEsNjg2IEBACisjIHRlc3RzIGNvbW1vbiB0byBkaWN0IGFuZCBVc2VyRGljdAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgVXNlckRpY3QKK2ltcG9ydCB0ZXN0X3N1cHBvcnQKKworCitjbGFzcyBCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhpcyBiYXNlIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHRoYXQgYW4gb2JqZWN0IGNvbmZvcm1zIHRvIHRoZQorICAgICMgbWFwcGluZyBwcm90b2NvbAorCisgICAgIyBGdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZnVsIHRvIG92ZXJyaWRlIHRvIGFkYXB0IHRvIGRpY3Rpb25hcnkKKyAgICAjIHNlbWFudGljcworICAgIHR5cGUydGVzdCA9IE5vbmUgIyB3aGljaCBjbGFzcyBpcyBiZWluZyB0ZXN0ZWQgKG92ZXJ3cml0ZSBpbiBzdWJjbGFzc2VzKQorCisgICAgZGVmIF9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIGRpY3Rpb25hcnkgb2YgdmFsdWVzIHdoaWNoIGFyZSBpbnZhcmlhbnQgYnkgc3RvcmFnZQorICAgICAgICBpbiB0aGUgb2JqZWN0IHVuZGVyIHRlc3QuIiIiCisgICAgICAgIHJldHVybiB7MToyLCAia2V5MSI6InZhbHVlMSIsICJrZXkyIjooMSwyLDMpfQorICAgIGRlZiBfZW1wdHlfbWFwcGluZyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGFuIGVtcHR5IG1hcHBpbmcgb2JqZWN0IiIiCisgICAgICAgIHJldHVybiBzZWxmLnR5cGUydGVzdCgpCisgICAgZGVmIF9mdWxsX21hcHBpbmcoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIlJldHVybiBhIG1hcHBpbmcgb2JqZWN0IHdpdGggdGhlIHZhbHVlIGNvbnRhaW5lZCBpbiBkYXRhCisgICAgICAgIGRpY3Rpb25hcnkiIiIKKyAgICAgICAgeCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkYXRhLml0ZW1zKCk6CisgICAgICAgICAgICB4W2tleV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4geAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpCisgICAgICAgIHNlbGYucmVmZXJlbmNlID0gc2VsZi5fcmVmZXJlbmNlKCkuY29weSgpCisKKyAgICAgICAgIyBBIChrZXksIHZhbHVlKSBwYWlyIG5vdCBpbiB0aGUgbWFwcGluZworICAgICAgICBrZXksIHZhbHVlID0gc2VsZi5yZWZlcmVuY2UucG9waXRlbSgpCisgICAgICAgIHNlbGYub3RoZXIgPSB7a2V5OnZhbHVlfQorCisgICAgICAgICMgQSAoa2V5LCB2YWx1ZSkgcGFpciBpbiB0aGUgbWFwcGluZworICAgICAgICBrZXksIHZhbHVlID0gc2VsZi5yZWZlcmVuY2UucG9waXRlbSgpCisgICAgICAgIHNlbGYuaW5tYXBwaW5nID0ge2tleTp2YWx1ZX0KKyAgICAgICAgc2VsZi5yZWZlcmVuY2Vba2V5XSA9IHZhbHVlCisKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIHJlYWQgb25seSBvcGVyYXRpb25zIG9uIG1hcHBpbmcKKyAgICAgICAgcCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBwMSA9IGRpY3QocCkgI3dvcmthcm91bmQgZm9yIHNpbmdsZXRvbiBvYmplY3RzCisgICAgICAgIGQgPSBzZWxmLl9mdWxsX21hcHBpbmcoc2VsZi5yZWZlcmVuY2UpCisgICAgICAgIGlmIGQgaXMgcDoKKyAgICAgICAgICAgIHAgPSBwMQorICAgICAgICAjSW5kZXhpbmcKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5yZWZlcmVuY2UuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtrZXldLCB2YWx1ZSkKKyAgICAgICAga25vd25rZXkgPSBzZWxmLm90aGVyLmtleXMoKVswXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOmRba25vd25rZXldKQorICAgICAgICAjbGVuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgbGVuKHNlbGYucmVmZXJlbmNlKSkKKyAgICAgICAgI2luCisgICAgICAgIGZvciBrIGluIHNlbGYucmVmZXJlbmNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBkKQorICAgICAgICBmb3IgayBpbiBzZWxmLm90aGVyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrLCBkKQorICAgICAgICAjaGFzX2tleQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKHF1aWV0PVRydWUpOgorICAgICAgICAgICAgZm9yIGsgaW4gc2VsZi5yZWZlcmVuY2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuaGFzX2tleShrKSkKKyAgICAgICAgICAgIGZvciBrIGluIHNlbGYub3RoZXI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkLmhhc19rZXkoaykpCisgICAgICAgICNjbXAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAocCxwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoZCxkKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAocCxkKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKGQscCksIDEpCisgICAgICAgICNfX25vbl9femVyb19fCisgICAgICAgIGlmIHA6IHNlbGYuZmFpbCgiRW1wdHkgbWFwcGluZyBtdXN0IGNvbXBhcmUgdG8gRmFsc2UiKQorICAgICAgICBpZiBub3QgZDogc2VsZi5mYWlsKCJGdWxsIG1hcHBpbmcgbXVzdCBjb21wYXJlIHRvIFRydWUiKQorICAgICAgICAjIGtleXMoKSwgaXRlbXMoKSwgaXRlcmtleXMoKSAuLi4KKyAgICAgICAgZGVmIGNoZWNrX2l0ZXJhbmRsaXN0KGl0ZXIsIGxzdCwgcmVmKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGl0ZXIsICduZXh0JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihpdGVyLCAnX19pdGVyX18nKSkKKyAgICAgICAgICAgIHggPSBsaXN0KGl0ZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2V0KHgpPT1zZXQobHN0KT09c2V0KHJlZikpCisgICAgICAgIGNoZWNrX2l0ZXJhbmRsaXN0KGQuaXRlcmtleXMoKSwgZC5rZXlzKCksIHNlbGYucmVmZXJlbmNlLmtleXMoKSkKKyAgICAgICAgY2hlY2tfaXRlcmFuZGxpc3QoaXRlcihkKSwgZC5rZXlzKCksIHNlbGYucmVmZXJlbmNlLmtleXMoKSkKKyAgICAgICAgY2hlY2tfaXRlcmFuZGxpc3QoZC5pdGVydmFsdWVzKCksIGQudmFsdWVzKCksIHNlbGYucmVmZXJlbmNlLnZhbHVlcygpKQorICAgICAgICBjaGVja19pdGVyYW5kbGlzdChkLml0ZXJpdGVtcygpLCBkLml0ZW1zKCksIHNlbGYucmVmZXJlbmNlLml0ZW1zKCkpCisgICAgICAgICNnZXQKKyAgICAgICAga2V5LCB2YWx1ZSA9IGQuaXRlcml0ZW1zKCkubmV4dCgpCisgICAgICAgIGtub3dua2V5LCBrbm93bnZhbHVlID0gc2VsZi5vdGhlci5pdGVyaXRlbXMoKS5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChrZXksIGtub3dudmFsdWUpLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChrbm93bmtleSwga25vd252YWx1ZSksIGtub3dudmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oa25vd25rZXksIGQpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciB3cml0ZSBvcGVyYXRpb25zIG9uIG1hcHBpbmcKKyAgICAgICAgcCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICAjSW5kZXhpbmcKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5yZWZlcmVuY2UuaXRlbXMoKToKKyAgICAgICAgICAgIHBba2V5XSA9IHZhbHVlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBba2V5XSwgdmFsdWUpCisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5yZWZlcmVuY2Uua2V5cygpOgorICAgICAgICAgICAgZGVsIHBba2V5XQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTpwW2tleV0pCisgICAgICAgIHAgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgI3VwZGF0ZQorICAgICAgICBwLnVwZGF0ZShzZWxmLnJlZmVyZW5jZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHApLCBzZWxmLnJlZmVyZW5jZSkKKyAgICAgICAgaXRlbXMgPSBwLml0ZW1zKCkKKyAgICAgICAgcCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBwLnVwZGF0ZShpdGVtcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHApLCBzZWxmLnJlZmVyZW5jZSkKKyAgICAgICAgZCA9IHNlbGYuX2Z1bGxfbWFwcGluZyhzZWxmLnJlZmVyZW5jZSkKKyAgICAgICAgI3NldGRlZmF1bHQKKyAgICAgICAga2V5LCB2YWx1ZSA9IGQuaXRlcml0ZW1zKCkubmV4dCgpCisgICAgICAgIGtub3dua2V5LCBrbm93bnZhbHVlID0gc2VsZi5vdGhlci5pdGVyaXRlbXMoKS5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnNldGRlZmF1bHQoa2V5LCBrbm93bnZhbHVlKSwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtrZXldLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnNldGRlZmF1bHQoa25vd25rZXksIGtub3dudmFsdWUpLCBrbm93bnZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRba25vd25rZXldLCBrbm93bnZhbHVlKQorICAgICAgICAjcG9wCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5wb3Aoa25vd25rZXkpLCBrbm93bnZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGtub3dua2V5LCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5wb3AsIGtub3dua2V5KQorICAgICAgICBkZWZhdWx0ID0gOTA5CisgICAgICAgIGRba25vd25rZXldID0ga25vd252YWx1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucG9wKGtub3dua2V5LCBkZWZhdWx0KSwga25vd252YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrbm93bmtleSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBvcChrbm93bmtleSwgZGVmYXVsdCksIGRlZmF1bHQpCisgICAgICAgICNwb3BpdGVtCisgICAgICAgIGtleSwgdmFsdWUgPSBkLnBvcGl0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGtleSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgc2VsZi5yZWZlcmVuY2Vba2V5XSkKKyAgICAgICAgcD1zZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHAucG9waXRlbSkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2VtcHR5X21hcHBpbmcoKSwgc2VsZi5fZW1wdHlfbWFwcGluZygpKQorCisgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLl9lbXB0eV9tYXBwaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnJlZmVyZW5jZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJvb2woc2VsZi5fZW1wdHlfbWFwcGluZygpKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJvb2woc2VsZi5yZWZlcmVuY2UpIGlzIFRydWUpCisKKyAgICBkZWYgdGVzdF9rZXlzKHNlbGYpOgorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5rZXlzKCksIFtdKQorICAgICAgICBkID0gc2VsZi5yZWZlcmVuY2UKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLmlubWFwcGluZy5rZXlzKClbMF0sIGQua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYub3RoZXIua2V5cygpWzBdLCBkLmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLmtleXMsIE5vbmUpCisKKyAgICBkZWYgdGVzdF92YWx1ZXMoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnZhbHVlcygpLCBbXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQudmFsdWVzLCBOb25lKQorCisgICAgZGVmIHRlc3RfaXRlbXMoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLml0ZW1zKCksIFtdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5pdGVtcywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMCkKKworICAgIGRlZiB0ZXN0X2dldGl0ZW0oc2VsZik6CisgICAgICAgIGQgPSBzZWxmLnJlZmVyZW5jZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbc2VsZi5pbm1hcHBpbmcua2V5cygpWzBdXSwgc2VsZi5pbm1hcHBpbmcudmFsdWVzKClbMF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLl9fZ2V0aXRlbV9fKQorCisgICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgorICAgICAgICAjIG1hcHBpbmcgYXJndW1lbnQKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBkLnVwZGF0ZShzZWxmLm90aGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXRlbXMoKSwgc2VsZi5vdGhlci5pdGVtcygpKQorCisgICAgICAgICMgTm8gYXJndW1lbnQKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBkLnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgc2VsZi5fZW1wdHlfbWFwcGluZygpKQorCisgICAgICAgICMgaXRlbSBzZXF1ZW5jZQorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIGQudXBkYXRlKHNlbGYub3RoZXIuaXRlbXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLml0ZW1zKCksIHNlbGYub3RoZXIuaXRlbXMoKSkKKworICAgICAgICAjIEl0ZXJhdG9yCisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgZC51cGRhdGUoc2VsZi5vdGhlci5pdGVyaXRlbXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLml0ZW1zKCksIHNlbGYub3RoZXIuaXRlbXMoKSkKKworICAgICAgICAjIEZJWE1FOiBEb2Vzbid0IHdvcmsgd2l0aCBVc2VyRGljdAorICAgICAgICAjIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSwgZC51cGRhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSwgZC51cGRhdGUsIDQyKQorCisgICAgICAgIG91dGVyc2VsZiA9IHNlbGYKKyAgICAgICAgY2xhc3MgU2ltcGxlVXNlckRpY3Q6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5kID0gb3V0ZXJzZWxmLnJlZmVyZW5jZQorICAgICAgICAgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZC5rZXlzKCkKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kW2ldCisgICAgICAgIGQuY2xlYXIoKQorICAgICAgICBkLnVwZGF0ZShTaW1wbGVVc2VyRGljdCgpKQorICAgICAgICBpMSA9IGQuaXRlbXMoKQorICAgICAgICBpMiA9IHNlbGYucmVmZXJlbmNlLml0ZW1zKCkKKworICAgICAgICBkZWYgc2FmZV9zb3J0X2tleShrdik6CisgICAgICAgICAgICBrLCB2ID0ga3YKKyAgICAgICAgICAgIHJldHVybiBpZCh0eXBlKGspKSwgaWQodHlwZSh2KSksIGssIHYKKyAgICAgICAgaTEuc29ydChrZXk9c2FmZV9zb3J0X2tleSkKKyAgICAgICAgaTIuc29ydChrZXk9c2FmZV9zb3J0X2tleSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpMSwgaTIpCisKKyAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6IHBhc3MKKworICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIGNsYXNzIEZhaWxpbmdVc2VyRGljdDoKKyAgICAgICAgICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4YworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGQudXBkYXRlLCBGYWlsaW5nVXNlckRpY3QoKSkKKworICAgICAgICBkLmNsZWFyKCkKKworICAgICAgICBjbGFzcyBGYWlsaW5nVXNlckRpY3Q6CisgICAgICAgICAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgICAgICAgICBjbGFzcyBCb2dvbkl0ZXI6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaSA9IDEKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgICAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnYScKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4YworICAgICAgICAgICAgICAgIHJldHVybiBCb2dvbkl0ZXIoKQorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGtleQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGQudXBkYXRlLCBGYWlsaW5nVXNlckRpY3QoKSkKKworICAgICAgICBjbGFzcyBGYWlsaW5nVXNlckRpY3Q6CisgICAgICAgICAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgICAgICAgICBjbGFzcyBCb2dvbkl0ZXI6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaSA9IG9yZCgnYScpCisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5pIDw9IG9yZCgneicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0biA9IGNocihzZWxmLmkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnRuCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICAgICAgcmV0dXJuIEJvZ29uSXRlcigpCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBkLnVwZGF0ZSwgRmFpbGluZ1VzZXJEaWN0KCkpCisKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBjbGFzcyBiYWRzZXEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGQudXBkYXRlLCBiYWRzZXEoKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkLnVwZGF0ZSwgWygxLCAyLCAzKV0pCisKKyAgICAjIG5vIHRlc3RfZnJvbWtleXMgb3IgdGVzdF9jb3B5IGFzIGJvdGggb3MuZW52aXJvbiBhbmQgc2VsdmVzIGRvbid0IHN1cHBvcnQgaXQKKworICAgIGRlZiB0ZXN0X2dldChzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5nZXQoc2VsZi5vdGhlci5rZXlzKClbMF0pIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoc2VsZi5vdGhlci5rZXlzKClbMF0sIDMpLCAzKQorICAgICAgICBkID0gc2VsZi5yZWZlcmVuY2UKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuZ2V0KHNlbGYub3RoZXIua2V5cygpWzBdKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KHNlbGYub3RoZXIua2V5cygpWzBdLCAzKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChzZWxmLmlubWFwcGluZy5rZXlzKClbMF0pLCBzZWxmLmlubWFwcGluZy52YWx1ZXMoKVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChzZWxmLmlubWFwcGluZy5rZXlzKClbMF0sIDMpLCBzZWxmLmlubWFwcGluZy52YWx1ZXMoKVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLmdldCwgTm9uZSwgTm9uZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NldGRlZmF1bHQoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLnNldGRlZmF1bHQpCisKKyAgICBkZWYgdGVzdF9wb3BpdGVtKHNlbGYpOgorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkLnBvcGl0ZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5wb3BpdGVtLCA0MikKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBrLCB2ID0gc2VsZi5pbm1hcHBpbmcuaXRlbXMoKVswXQorICAgICAgICBkW2tdID0gdgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5wb3AsIHNlbGYub3RoZXIua2V5cygpWzBdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5wb3AoayksIHYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkLnBvcCwgaykKKworCitjbGFzcyBUZXN0TWFwcGluZ1Byb3RvY29sKEJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6CisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIEJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbC50ZXN0X2NvbnN0cnVjdG9yKHNlbGYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLl9lbXB0eV9tYXBwaW5nKCkgaXMgbm90IHNlbGYuX2VtcHR5X21hcHBpbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdCh4PTEsIHk9MiksIHsieCI6IDEsICJ5IjogMn0pCisKKyAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgorICAgICAgICBCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9ib29sKHNlbGYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgc2VsZi5fZW1wdHlfbWFwcGluZygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5fZnVsbF9tYXBwaW5nKHsieCI6ICJ5In0pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm9vbChzZWxmLl9lbXB0eV9tYXBwaW5nKCkpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm9vbChzZWxmLl9mdWxsX21hcHBpbmcoeyJ4IjogInkifSkpIGlzIFRydWUpCisKKyAgICBkZWYgdGVzdF9rZXlzKHNlbGYpOgorICAgICAgICBCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9rZXlzKHNlbGYpCisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmtleXMoKSwgW10pCisgICAgICAgIGQgPSBzZWxmLl9mdWxsX21hcHBpbmcoeydhJzogMSwgJ2InOiAyfSkKKyAgICAgICAgayA9IGQua2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCBrKQorICAgICAgICBzZWxmLmFzc2VydEluKCdiJywgaykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYycsIGspCisKKyAgICBkZWYgdGVzdF92YWx1ZXMoc2VsZik6CisgICAgICAgIEJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbC50ZXN0X3ZhbHVlcyhzZWxmKQorICAgICAgICBkID0gc2VsZi5fZnVsbF9tYXBwaW5nKHsxOjJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQudmFsdWVzKCksIFsyXSkKKworICAgIGRlZiB0ZXN0X2l0ZW1zKHNlbGYpOgorICAgICAgICBCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9pdGVtcyhzZWxmKQorCisgICAgICAgIGQgPSBzZWxmLl9mdWxsX21hcHBpbmcoezE6Mn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pdGVtcygpLCBbKDEsIDIpXSkKKworICAgIGRlZiB0ZXN0X2hhc19rZXkoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBkLmhhc19rZXkoJ2EnKSkKKyAgICAgICAgZCA9IHNlbGYuX2Z1bGxfbWFwcGluZyh7J2EnOiAxLCAnYic6IDJ9KQorICAgICAgICBrID0gZC5rZXlzKCkKKyAgICAgICAgay5zb3J0KGtleT1sYW1iZGEgazogKGlkKHR5cGUoaykpLCBrKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBbJ2EnLCAnYiddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5oYXNfa2V5KQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYScsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKCdhJyBpbiBkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhJyBub3QgaW4gZCkKKyAgICAgICAgZCA9IHNlbGYuX2Z1bGxfbWFwcGluZyh7J2EnOiAxLCAnYic6IDJ9KQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYicsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2MnLCBkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5fX2NvbnRhaW5zX18pCisKKyAgICBkZWYgdGVzdF9sZW4oc2VsZik6CisgICAgICAgIEJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbC50ZXN0X2xlbihzZWxmKQorICAgICAgICBkID0gc2VsZi5fZnVsbF9tYXBwaW5nKHsnYSc6IDEsICdiJzogMn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAyKQorCisgICAgZGVmIHRlc3RfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3RfZ2V0aXRlbShzZWxmKQorICAgICAgICBkID0gc2VsZi5fZnVsbF9tYXBwaW5nKHsnYSc6IDEsICdiJzogMn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2InXSwgMikKKyAgICAgICAgZFsnYyddID0gMworICAgICAgICBkWydhJ10gPSA0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYyddLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgNCkKKyAgICAgICAgZGVsIGRbJ2InXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsnYSc6IDQsICdjJzogM30pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLl9fZ2V0aXRlbV9fKQorCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9mdWxsX21hcHBpbmcoezE6MSwgMjoyLCAzOjN9KQorICAgICAgICBkLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7fSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuY2xlYXIsIE5vbmUpCisKKyAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgICAgIEJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbC50ZXN0X3VwZGF0ZShzZWxmKQorICAgICAgICAjIG1hcHBpbmcgYXJndW1lbnQKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBkLnVwZGF0ZSh7MToxMDB9KQorICAgICAgICBkLnVwZGF0ZSh7MjoyMH0pCisgICAgICAgIGQudXBkYXRlKHsxOjEsIDI6MiwgMzozfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7MToxLCAyOjIsIDM6M30pCisKKyAgICAgICAgIyBubyBhcmd1bWVudAorICAgICAgICBkLnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgezE6MSwgMjoyLCAzOjN9KQorCisgICAgICAgICMga2V5d29yZCBhcmd1bWVudHMKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBkLnVwZGF0ZSh4PTEwMCkKKyAgICAgICAgZC51cGRhdGUoeT0yMCkKKyAgICAgICAgZC51cGRhdGUoeD0xLCB5PTIsIHo9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7IngiOjEsICJ5IjoyLCAieiI6M30pCisKKyAgICAgICAgIyBpdGVtIHNlcXVlbmNlCisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgZC51cGRhdGUoWygieCIsIDEwMCksICgieSIsIDIwKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeyJ4IjoxMDAsICJ5IjoyMH0pCisKKyAgICAgICAgIyBCb3RoIGl0ZW0gc2VxdWVuY2UgYW5kIGtleXdvcmQgYXJndW1lbnRzCisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgZC51cGRhdGUoWygieCIsIDEwMCksICgieSIsIDIwKV0sIHg9MSwgeT0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsieCI6MSwgInkiOjJ9KQorCisgICAgICAgICMgaXRlcmF0b3IKKyAgICAgICAgZCA9IHNlbGYuX2Z1bGxfbWFwcGluZyh7MTozLCAyOjR9KQorICAgICAgICBkLnVwZGF0ZShzZWxmLl9mdWxsX21hcHBpbmcoezE6MiwgMzo0LCA1OjZ9KS5pdGVyaXRlbXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7MToyLCAyOjQsIDM6NCwgNTo2fSkKKworICAgICAgICBjbGFzcyBTaW1wbGVVc2VyRGljdDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmQgPSB7MToxLCAyOjIsIDM6M30KKyAgICAgICAgICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmQua2V5cygpCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZFtpXQorICAgICAgICBkLmNsZWFyKCkKKyAgICAgICAgZC51cGRhdGUoU2ltcGxlVXNlckRpY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7MToxLCAyOjIsIDM6M30pCisKKyAgICBkZWYgdGVzdF9mcm9ta2V5cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdC5mcm9ta2V5cygnYWJjJyksIHsnYSc6Tm9uZSwgJ2InOk5vbmUsICdjJzpOb25lfSkKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90KGQuZnJvbWtleXMoJ2FiYycpIGlzIGQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZnJvbWtleXMoJ2FiYycpLCB7J2EnOk5vbmUsICdiJzpOb25lLCAnYyc6Tm9uZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mcm9ta2V5cygoNCw1KSwwKSwgezQ6MCwgNTowfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZyb21rZXlzKFtdKSwge30pCisgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICB5aWVsZCAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mcm9ta2V5cyhnKCkpLCB7MTpOb25lfSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB7fS5mcm9ta2V5cywgMykKKyAgICAgICAgY2xhc3MgZGljdGxpa2Uoc2VsZi50eXBlMnRlc3QpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdGxpa2UuZnJvbWtleXMoJ2EnKSwgeydhJzpOb25lfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0bGlrZSgpLmZyb21rZXlzKCdhJyksIHsnYSc6Tm9uZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaWN0bGlrZS5mcm9ta2V5cygnYScpLl9fY2xhc3NfXyBpcyBkaWN0bGlrZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpY3RsaWtlKCkuZnJvbWtleXMoJ2EnKS5fX2NsYXNzX18gaXMgZGljdGxpa2UpCisgICAgICAgICMgRklYTUU6IHRoZSBmb2xsb3dpbmcgd29uJ3Qgd29yayB3aXRoIFVzZXJEaWN0LCBiZWNhdXNlIGl0J3MgYW4gb2xkIHN0eWxlIGNsYXNzCisgICAgICAgICMgc2VsZi5hc3NlcnRUcnVlKHR5cGUoZGljdGxpa2UuZnJvbWtleXMoJ2EnKSkgaXMgZGljdGxpa2UpCisgICAgICAgIGNsYXNzIG15ZGljdChzZWxmLnR5cGUydGVzdCk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBVc2VyRGljdC5Vc2VyRGljdCgpCisgICAgICAgIHVkID0gbXlkaWN0LmZyb21rZXlzKCdhYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodWQsIHsnYSc6Tm9uZSwgJ2InOk5vbmV9KQorICAgICAgICAjIEZJWE1FOiB0aGUgZm9sbG93aW5nIHdvbid0IHdvcmsgd2l0aCBVc2VyRGljdCwgYmVjYXVzZSBpdCdzIGFuIG9sZCBzdHlsZSBjbGFzcworICAgICAgICAjIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh1ZCwgVXNlckRpY3QuVXNlckRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGljdC5mcm9ta2V5cykKKworICAgICAgICBjbGFzcyBFeGMoRXhjZXB0aW9uKTogcGFzcworCisgICAgICAgIGNsYXNzIGJhZGRpY3QxKHNlbGYudHlwZTJ0ZXN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgYmFkZGljdDEuZnJvbWtleXMsIFsxXSkKKworICAgICAgICBjbGFzcyBCYWRTZXEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIHNlbGYudHlwZTJ0ZXN0LmZyb21rZXlzLCBCYWRTZXEoKSkKKworICAgICAgICBjbGFzcyBiYWRkaWN0MihzZWxmLnR5cGUydGVzdCk6CisgICAgICAgICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGJhZGRpY3QyLmZyb21rZXlzLCBbMV0pCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBkID0gc2VsZi5fZnVsbF9tYXBwaW5nKHsxOjEsIDI6MiwgMzozfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmNvcHkoKSwgezE6MSwgMjoyLCAzOjN9KQorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jb3B5KCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkLmNvcHkoKSwgZC5fX2NsYXNzX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5jb3B5LCBOb25lKQorCisgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgorICAgICAgICBCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9nZXQoc2VsZikKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5nZXQoJ2MnKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdjJywgMyksIDMpCisgICAgICAgIGQgPSBzZWxmLl9mdWxsX21hcHBpbmcoeydhJyA6IDEsICdiJyA6IDJ9KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5nZXQoJ2MnKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdjJywgMyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ2EnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnYScsIDMpLCAxKQorCisgICAgZGVmIHRlc3Rfc2V0ZGVmYXVsdChzZWxmKToKKyAgICAgICAgQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3Rfc2V0ZGVmYXVsdChzZWxmKQorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLnNldGRlZmF1bHQoJ2tleTAnKSBpcyBOb25lKQorICAgICAgICBkLnNldGRlZmF1bHQoJ2tleTAnLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuc2V0ZGVmYXVsdCgna2V5MCcpIGlzIE5vbmUpCisgICAgICAgIGQuc2V0ZGVmYXVsdCgna2V5JywgW10pLmFwcGVuZCgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2tleSddWzBdLCAzKQorICAgICAgICBkLnNldGRlZmF1bHQoJ2tleScsIFtdKS5hcHBlbmQoNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZFsna2V5J10pLCAyKQorCisgICAgZGVmIHRlc3RfcG9waXRlbShzZWxmKToKKyAgICAgICAgQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3RfcG9waXRlbShzZWxmKQorICAgICAgICBmb3IgY29weW1vZGUgaW4gLTEsICsxOgorICAgICAgICAgICAgIyAtMTogYiBoYXMgc2FtZSBzdHJ1Y3R1cmUgYXMgYQorICAgICAgICAgICAgIyArMTogYiBpcyBhLmNvcHkoKQorICAgICAgICAgICAgZm9yIGxvZzJzaXplIGluIHJhbmdlKDEyKToKKyAgICAgICAgICAgICAgICBzaXplID0gMioqbG9nMnNpemUKKyAgICAgICAgICAgICAgICBhID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgICAgICAgICAgYiA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNpemUpOgorICAgICAgICAgICAgICAgICAgICBhW3JlcHIoaSldID0gaQorICAgICAgICAgICAgICAgICAgICBpZiBjb3B5bW9kZSA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBiW3JlcHIoaSldID0gaQorICAgICAgICAgICAgICAgIGlmIGNvcHltb2RlID4gMDoKKyAgICAgICAgICAgICAgICAgICAgYiA9IGEuY29weSgpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2l6ZSk6CisgICAgICAgICAgICAgICAgICAgIGthLCB2YSA9IHRhID0gYS5wb3BpdGVtKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YSwgaW50KGthKSkKKyAgICAgICAgICAgICAgICAgICAga2IsIHZiID0gdGIgPSBiLnBvcGl0ZW0oKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZiLCBpbnQoa2IpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90KGNvcHltb2RlIDwgMCBhbmQgdGEgIT0gdGIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGIpCisKKyAgICBkZWYgdGVzdF9wb3Aoc2VsZik6CisgICAgICAgIEJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbC50ZXN0X3BvcChzZWxmKQorCisgICAgICAgICMgVGVzdHMgZm9yIHBvcCB3aXRoIHNwZWNpZmllZCBrZXkKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBrLCB2ID0gJ2FiYycsICdkZWYnCisKKyAgICAgICAgIyB2ZXJpZnkgbG9uZ3MvaW50cyBnZXQgc2FtZSB2YWx1ZSB3aGVuIGtleSA+IDMyIGJpdHMgKGZvciA2NC1iaXQgYXJjaHMpCisgICAgICAgICMgc2VlIFNGIGJ1ZyAjNjg5NjU5CisgICAgICAgIHggPSA0NTAzNTk5NjI3MzcwNDk2TAorICAgICAgICB5ID0gNDUwMzU5OTYyNzM3MDQ5NgorICAgICAgICBoID0gc2VsZi5fZnVsbF9tYXBwaW5nKHt4OiAnYW55dGhpbmcnLCB5OiAnc29tZXRoaW5nIGVsc2UnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoW3hdLCBoW3ldKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5wb3AoaywgdiksIHYpCisgICAgICAgIGRba10gPSB2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5wb3AoaywgMSksIHYpCisKKworY2xhc3MgVGVzdEhhc2hNYXBwaW5nUHJvdG9jb2woVGVzdE1hcHBpbmdQcm90b2NvbCk6CisKKyAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgorICAgICAgICBUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3RfZ2V0aXRlbShzZWxmKQorICAgICAgICBjbGFzcyBFeGMoRXhjZXB0aW9uKTogcGFzcworCisgICAgICAgIGNsYXNzIEJhZEVxKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAyNAorCisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgZFtCYWRFcSgpXSA9IDQyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkLl9fZ2V0aXRlbV9fLCAyMykKKworICAgICAgICBjbGFzcyBCYWRIYXNoKG9iamVjdCk6CisgICAgICAgICAgICBmYWlsID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZhaWw6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4YygpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICB4ID0gQmFkSGFzaCgpCisgICAgICAgIGRbeF0gPSA0MgorICAgICAgICB4LmZhaWwgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgZC5fX2dldGl0ZW1fXywgeCkKKworICAgIGRlZiB0ZXN0X2Zyb21rZXlzKHNlbGYpOgorICAgICAgICBUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3RfZnJvbWtleXMoc2VsZikKKyAgICAgICAgY2xhc3MgbXlkaWN0KHNlbGYudHlwZTJ0ZXN0KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFVzZXJEaWN0LlVzZXJEaWN0KCkKKyAgICAgICAgdWQgPSBteWRpY3QuZnJvbWtleXMoJ2FiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ZCwgeydhJzpOb25lLCAnYic6Tm9uZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh1ZCwgVXNlckRpY3QuVXNlckRpY3QpCisKKyAgICBkZWYgdGVzdF9wb3Aoc2VsZik6CisgICAgICAgIFRlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9wb3Aoc2VsZikKKworICAgICAgICBjbGFzcyBFeGMoRXhjZXB0aW9uKTogcGFzcworCisgICAgICAgIGNsYXNzIEJhZEhhc2gob2JqZWN0KToKKyAgICAgICAgICAgIGZhaWwgPSBGYWxzZQorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuZmFpbDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIHggPSBCYWRIYXNoKCkKKyAgICAgICAgZFt4XSA9IDQyCisgICAgICAgIHguZmFpbCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBkLnBvcCwgeCkKKworICAgIGRlZiB0ZXN0X211dGF0aW5naXRlcmF0aW9uKHNlbGYpOgorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIGRbMV0gPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIGQ6CisgICAgICAgICAgICAgICAgZFtpKzFdID0gMQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJjaGFuZ2luZyBkaWN0IHNpemUgZHVyaW5nIGl0ZXJhdGlvbiBkb2Vzbid0IHJhaXNlIEVycm9yIikKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGQpLCAne30nKQorICAgICAgICBkWzFdID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZCksICd7MTogMn0nKQorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIGRbMV0gPSBkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihkKSwgJ3sxOiB7Li4ufX0nKQorCisgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOiBwYXNzCisKKyAgICAgICAgY2xhc3MgQmFkUmVwcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4YygpCisKKyAgICAgICAgZCA9IHNlbGYuX2Z1bGxfbWFwcGluZyh7MTogQmFkUmVwcigpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCByZXByLCBkKQorCisgICAgZGVmIHRlc3RfbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKHNlbGYuX2VtcHR5X21hcHBpbmcoKSA8IHNlbGYuX2VtcHR5X21hcHBpbmcoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKHNlbGYuX2Z1bGxfbWFwcGluZyh7MTogMn0pIDwgc2VsZi5fZnVsbF9tYXBwaW5nKHsxTDogMkx9KSkpCisKKyAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6IHBhc3MKKworICAgICAgICBjbGFzcyBCYWRDbXAob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4YygpCisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgZDEgPSBzZWxmLl9mdWxsX21hcHBpbmcoe0JhZENtcCgpOiAxfSkKKyAgICAgICAgZDIgPSBzZWxmLl9mdWxsX21hcHBpbmcoezE6IDF9KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkMSA8IGQyCisgICAgICAgIGV4Y2VwdCBFeGM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIjwgZGlkbid0IHJhaXNlIEV4YyIpCisKKyAgICBkZWYgdGVzdF9zZXRkZWZhdWx0KHNlbGYpOgorICAgICAgICBUZXN0TWFwcGluZ1Byb3RvY29sLnRlc3Rfc2V0ZGVmYXVsdChzZWxmKQorCisgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOiBwYXNzCisKKyAgICAgICAgY2xhc3MgQmFkSGFzaChvYmplY3QpOgorICAgICAgICAgICAgZmFpbCA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5mYWlsOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgeCA9IEJhZEhhc2goKQorICAgICAgICBkW3hdID0gNDIKKyAgICAgICAgeC5mYWlsID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGQuc2V0ZGVmYXVsdCwgeCwgW10pCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvbWF0aF90ZXN0Y2FzZXMudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L21hdGhfdGVzdGNhc2VzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTFhNDlmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L21hdGhfdGVzdGNhc2VzLnR4dApAQCAtMCwwICsxLDQ0NyBAQAorLS0gVGVzdGNhc2VzIGZvciBmdW5jdGlvbnMgaW4gbWF0aC4KKy0tCistLSBFYWNoIGxpbmUgdGFrZXMgdGhlIGZvcm06CistLQorLS0gPHRlc3RpZD4gPGZ1bmN0aW9uPiA8aW5wdXRfdmFsdWU+IC0+IDxvdXRwdXRfdmFsdWU+IDxmbGFncz4KKy0tCistLSB3aGVyZToKKy0tCistLSAgIDx0ZXN0aWQ+IGlzIGEgc2hvcnQgbmFtZSBpZGVudGlmeWluZyB0aGUgdGVzdCwKKy0tCistLSAgIDxmdW5jdGlvbj4gaXMgdGhlIGZ1bmN0aW9uIHRvIGJlIHRlc3RlZCAoZXhwLCBjb3MsIGFzaW5oLCAuLi4pLAorLS0KKy0tICAgPGlucHV0X3ZhbHVlPiBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgYSBmbG9hdGluZy1wb2ludCB2YWx1ZQorLS0KKy0tICAgPG91dHB1dF92YWx1ZT4gaXMgdGhlIGV4cGVjdGVkIChpZGVhbCkgb3V0cHV0IHZhbHVlLCBhZ2FpbgorLS0gICAgIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nLgorLS0KKy0tICAgPGZsYWdzPiBpcyBhIGxpc3Qgb2YgdGhlIGZsb2F0aW5nLXBvaW50IGZsYWdzIHJlcXVpcmVkIGJ5IEM5OQorLS0KKy0tIFRoZSBwb3NzaWJsZSBmbGFncyBhcmU6CistLQorLS0gICBkaXZpZGUtYnktemVybyA6IHJhaXNlZCB3aGVuIGEgZmluaXRlIGlucHV0IGdpdmVzIGEKKy0tICAgICBtYXRoZW1hdGljYWxseSBpbmZpbml0ZSByZXN1bHQuCistLQorLS0gICBvdmVyZmxvdyA6IHJhaXNlZCB3aGVuIGEgZmluaXRlIGlucHV0IGdpdmVzIGEgZmluaXRlIHJlc3VsdCB0aGF0CistLSAgICAgaXMgdG9vIGxhcmdlIHRvIGZpdCBpbiB0aGUgdXN1YWwgcmFuZ2Ugb2YgYW4gSUVFRSA3NTQgZG91YmxlLgorLS0KKy0tICAgaW52YWxpZCA6IHJhaXNlZCBmb3IgaW52YWxpZCBpbnB1dHMgKGUuZy4sIHNxcnQoLTEpKQorLS0KKy0tICAgaWdub3JlLXNpZ24gOiBpbmRpY2F0ZXMgdGhhdCB0aGUgc2lnbiBvZiB0aGUgcmVzdWx0IGlzCistLSAgICAgdW5zcGVjaWZpZWQ7IGUuZy4sIGlmIHRoZSByZXN1bHQgaXMgZ2l2ZW4gYXMgaW5mLAorLS0gICAgIHRoZW4gYm90aCAtaW5mIGFuZCBpbmYgc2hvdWxkIGJlIGFjY2VwdGVkIGFzIGNvcnJlY3QuCistLQorLS0gRmxhZ3MgbWF5IGFwcGVhciBpbiBhbnkgb3JkZXIuCistLQorLS0gTGluZXMgYmVnaW5uaW5nIHdpdGggJy0tJyAobGlrZSB0aGlzIG9uZSkgc3RhcnQgYSBjb21tZW50LCBhbmQgYXJlCistLSBpZ25vcmVkLiAgQmxhbmsgbGluZXMsIG9yIGxpbmVzIGNvbnRhaW5pbmcgb25seSB3aGl0ZXNwYWNlLCBhcmUgYWxzbworLS0gaWdub3JlZC4KKworLS0gTWFueSBvZiB0aGUgdmFsdWVzIGJlbG93IHdlcmUgY29tcHV0ZWQgd2l0aCB0aGUgaGVscCBvZgorLS0gdmVyc2lvbiAyLjQgb2YgdGhlIE1QRlIgbGlicmFyeSBmb3IgbXVsdGlwbGUtcHJlY2lzaW9uCistLSBmbG9hdGluZy1wb2ludCBjb21wdXRhdGlvbnMgd2l0aCBjb3JyZWN0IHJvdW5kaW5nLiAgQWxsIG91dHB1dAorLS0gdmFsdWVzIGluIHRoaXMgZmlsZSBhcmUgKG1vZHVsbyB5ZXQtdG8tYmUtZGlzY292ZXJlZCBidWdzKQorLS0gY29ycmVjdGx5IHJvdW5kZWQsIHByb3ZpZGVkIHRoYXQgZWFjaCBpbnB1dCBhbmQgb3V0cHV0IGRlY2ltYWwKKy0tIGZsb2F0aW5nLXBvaW50IHZhbHVlIGJlbG93IGlzIGludGVycHJldGVkIGFzIGEgcmVwcmVzZW50YXRpb24gb2YKKy0tIHRoZSBjb3JyZXNwb25kaW5nIG5lYXJlc3QgSUVFRSA3NTQgZG91YmxlLXByZWNpc2lvbiB2YWx1ZS4gIFNlZSB0aGUKKy0tIE1QRlIgaG9tZXBhZ2UgYXQgaHR0cDovL3d3dy5tcGZyLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKy0tIE1QRlIgcHJvamVjdC4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBlcmY6IGVycm9yIGZ1bmN0aW9uIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VyZjAwMDAgZXJmIDAuMCAtPiAwLjAKK2VyZjAwMDEgZXJmIC0wLjAgLT4gLTAuMAorZXJmMDAwMiBlcmYgaW5mIC0+IDEuMAorZXJmMDAwMyBlcmYgLWluZiAtPiAtMS4wCitlcmYwMDA0IGVyZiBuYW4gLT4gbmFuCisKKy0tIHRpbnkgdmFsdWVzCitlcmYwMDEwIGVyZiAxZS0zMDggLT4gMS4xMjgzNzkxNjcwOTU1MTI1ZS0zMDgKK2VyZjAwMTEgZXJmIDVlLTMyNCAtPiA0Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNAorZXJmMDAxMiBlcmYgMWUtMTAgLT4gMS4xMjgzNzkxNjcwOTU1MTI2ZS0xMAorCistLSBzbWFsbCBpbnRlZ2VycworZXJmMDAyMCBlcmYgMSAtPiAwLjg0MjcwMDc5Mjk0OTcxNDg5CitlcmYwMDIxIGVyZiAyIC0+IDAuOTk1MzIyMjY1MDE4OTUyNzEKK2VyZjAwMjIgZXJmIDMgLT4gMC45OTk5Nzc5MDk1MDMwMDEzNgorZXJmMDAyMyBlcmYgNCAtPiAwLjk5OTk5OTk4NDU4Mjc0MjA5CitlcmYwMDI0IGVyZiA1IC0+IDAuOTk5OTk5OTk5OTk4NDYyNTYKK2VyZjAwMjUgZXJmIDYgLT4gMS4wCisKK2VyZjAwMzAgZXJmIC0xIC0+IC0wLjg0MjcwMDc5Mjk0OTcxNDg5CitlcmYwMDMxIGVyZiAtMiAtPiAtMC45OTUzMjIyNjUwMTg5NTI3MQorZXJmMDAzMiBlcmYgLTMgLT4gLTAuOTk5OTc3OTA5NTAzMDAxMzYKK2VyZjAwMzMgZXJmIC00IC0+IC0wLjk5OTk5OTk4NDU4Mjc0MjA5CitlcmYwMDM0IGVyZiAtNSAtPiAtMC45OTk5OTk5OTk5OTg0NjI1NgorZXJmMDAzNSBlcmYgLTYgLT4gLTEuMAorCistLSBodWdlIHZhbHVlcyBzaG91bGQgYWxsIGdvIHRvICsvLTEsIGRlcGVuZGluZyBvbiBzaWduCitlcmYwMDQwIGVyZiAtNDAgLT4gLTEuMAorZXJmMDA0MSBlcmYgMWUxNiAtPiAxLjAKK2VyZjAwNDIgZXJmIC0xZTE1MCAtPiAtMS4wCitlcmYwMDQzIGVyZiAxLjdlMzA4IC0+IDEuMAorCistLSBJc3N1ZSA4OTg2OiBpbnB1dHMgeCB3aXRoIGV4cCgteCp4KSBuZWFyIHRoZSB1bmRlcmZsb3cgdGhyZXNob2xkCistLSBpbmNvcnJlY3RseSBzaWduYWxsZWQgb3ZlcmZsb3cgb24gc29tZSBwbGF0Zm9ybXMuCitlcmYwMTAwIGVyZiAyNi4yIC0+IDEuMAorZXJmMDEwMSBlcmYgMjYuNCAtPiAxLjAKK2VyZjAxMDIgZXJmIDI2LjYgLT4gMS4wCitlcmYwMTAzIGVyZiAyNi44IC0+IDEuMAorZXJmMDEwNCBlcmYgMjcuMCAtPiAxLjAKK2VyZjAxMDUgZXJmIDI3LjIgLT4gMS4wCitlcmYwMTA2IGVyZiAyNy40IC0+IDEuMAorZXJmMDEwNyBlcmYgMjcuNiAtPiAxLjAKKworZXJmMDExMCBlcmYgLTI2LjIgLT4gLTEuMAorZXJmMDExMSBlcmYgLTI2LjQgLT4gLTEuMAorZXJmMDExMiBlcmYgLTI2LjYgLT4gLTEuMAorZXJmMDExMyBlcmYgLTI2LjggLT4gLTEuMAorZXJmMDExNCBlcmYgLTI3LjAgLT4gLTEuMAorZXJmMDExNSBlcmYgLTI3LjIgLT4gLTEuMAorZXJmMDExNiBlcmYgLTI3LjQgLT4gLTEuMAorZXJmMDExNyBlcmYgLTI3LjYgLT4gLTEuMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBlcmZjOiBjb21wbGVtZW50YXJ5IGVycm9yIGZ1bmN0aW9uIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VyZmMwMDAwIGVyZmMgMC4wIC0+IDEuMAorZXJmYzAwMDEgZXJmYyAtMC4wIC0+IDEuMAorZXJmYzAwMDIgZXJmYyBpbmYgLT4gMC4wCitlcmZjMDAwMyBlcmZjIC1pbmYgLT4gMi4wCitlcmZjMDAwNCBlcmZjIG5hbiAtPiBuYW4KKworLS0gdGlueSB2YWx1ZXMKK2VyZmMwMDEwIGVyZmMgMWUtMzA4IC0+IDEuMAorZXJmYzAwMTEgZXJmYyA1ZS0zMjQgLT4gMS4wCitlcmZjMDAxMiBlcmZjIDFlLTEwIC0+IDAuOTk5OTk5OTk5ODg3MTYyMDQKKworLS0gc21hbGwgaW50ZWdlcnMKK2VyZmMwMDIwIGVyZmMgMSAtPiAwLjE1NzI5OTIwNzA1MDI4NTEzCitlcmZjMDAyMSBlcmZjIDIgLT4gMC4wMDQ2Nzc3MzQ5ODEwNDcyNjYyCitlcmZjMDAyMiBlcmZjIDMgLT4gMi4yMDkwNDk2OTk4NTg1NDQxZS0wNQorZXJmYzAwMjMgZXJmYyA0IC0+IDEuNTQxNzI1NzkwMDI4MDAyZS0wOAorZXJmYzAwMjQgZXJmYyA1IC0+IDEuNTM3NDU5Nzk0NDI4MDM0OWUtMTIKK2VyZmMwMDI1IGVyZmMgNiAtPiAyLjE1MTk3MzY3MTI0OTg5MTNlLTE3CisKK2VyZmMwMDMwIGVyZmMgLTEgLT4gMS44NDI3MDA3OTI5NDk3MTQ4CitlcmZjMDAzMSBlcmZjIC0yIC0+IDEuOTk1MzIyMjY1MDE4OTUyOAorZXJmYzAwMzIgZXJmYyAtMyAtPiAxLjk5OTk3NzkwOTUwMzAwMTUKK2VyZmMwMDMzIGVyZmMgLTQgLT4gMS45OTk5OTk5ODQ1ODI3NDIxCitlcmZjMDAzNCBlcmZjIC01IC0+IDEuOTk5OTk5OTk5OTk4NDYyNgorZXJmYzAwMzUgZXJmYyAtNiAtPiAyLjAKKworLS0gYXMgeCAtPiBpbmZpbml0eSwgZXJmYyh4KSBiZWhhdmVzIGxpa2UgZXhwKC14KngpL3gvc3FydChwaSkKK2VyZmMwMDQwIGVyZmMgMjAgLT4gNS4zOTU4NjU2MTE2MDc5MDEyZS0xNzYKK2VyZmMwMDQxIGVyZmMgMjUgLT4gOC4zMDAxNzI1NzExOTY1MjI4ZS0yNzQKK2VyZmMwMDQyIGVyZmMgMjcgLT4gNS4yMzcwNDY0MzkzNTI2MjkyZS0zMTkKK2VyZmMwMDQzIGVyZmMgMjggLT4gMC4wCisKKy0tIGh1Z2UgdmFsdWVzCitlcmZjMDA1MCBlcmZjIC00MCAtPiAyLjAKK2VyZmMwMDUxIGVyZmMgMWUxNiAtPiAwLjAKK2VyZmMwMDUyIGVyZmMgLTFlMTUwIC0+IDIuMAorZXJmYzAwNTMgZXJmYyAxLjdlMzA4IC0+IDAuMAorCistLSBJc3N1ZSA4OTg2OiBpbnB1dHMgeCB3aXRoIGV4cCgteCp4KSBuZWFyIHRoZSB1bmRlcmZsb3cgdGhyZXNob2xkCistLSBpbmNvcnJlY3RseSBzaWduYWxsZWQgb3ZlcmZsb3cgb24gc29tZSBwbGF0Zm9ybXMuCitlcmZjMDEwMCBlcmZjIDI2LjIgLT4gMS42NDMyNTA3OTI0Mzg5NDYxZS0zMDAKK2VyZmMwMTAxIGVyZmMgMjYuNCAtPiA0LjQwMTc3Njg1ODgwMzU0MjZlLTMwNQorZXJmYzAxMDIgZXJmYyAyNi42IC0+IDEuMDg4NTEyNTg4NTQ0MjI2OWUtMzA5CitlcmZjMDEwMyBlcmZjIDI2LjggLT4gMi40ODQ5NjIxNTcxOTY2NjI5ZS0zMTQKK2VyZmMwMTA0IGVyZmMgMjcuMCAtPiA1LjIzNzA0NjQzOTM1MjYyOTJlLTMxOQorZXJmYzAxMDUgZXJmYyAyNy4yIC0+IDkuODgxMzEyOTE2ODI0OTMwOWUtMzI0CitlcmZjMDEwNiBlcmZjIDI3LjQgLT4gMC4wCitlcmZjMDEwNyBlcmZjIDI3LjYgLT4gMC4wCisKK2VyZmMwMTEwIGVyZmMgLTI2LjIgLT4gMi4wCitlcmZjMDExMSBlcmZjIC0yNi40IC0+IDIuMAorZXJmYzAxMTIgZXJmYyAtMjYuNiAtPiAyLjAKK2VyZmMwMTEzIGVyZmMgLTI2LjggLT4gMi4wCitlcmZjMDExNCBlcmZjIC0yNy4wIC0+IDIuMAorZXJmYzAxMTUgZXJmYyAtMjcuMiAtPiAyLjAKK2VyZmMwMTE2IGVyZmMgLTI3LjQgLT4gMi4wCitlcmZjMDExNyBlcmZjIC0yNy42IC0+IDIuMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGxnYW1tYTogbG9nIG9mIGFic29sdXRlIHZhbHVlIG9mIHRoZSBnYW1tYSBmdW5jdGlvbiAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIHNwZWNpYWwgdmFsdWVzCitsZ2FtMDAwMCBsZ2FtbWEgMC4wIC0+IGluZiAgICAgIGRpdmlkZS1ieS16ZXJvCitsZ2FtMDAwMSBsZ2FtbWEgLTAuMCAtPiBpbmYgICAgIGRpdmlkZS1ieS16ZXJvCitsZ2FtMDAwMiBsZ2FtbWEgaW5mIC0+IGluZgorbGdhbTAwMDMgbGdhbW1hIC1pbmYgLT4gaW5mCitsZ2FtMDAwNCBsZ2FtbWEgbmFuIC0+IG5hbgorCistLSBuZWdhdGl2ZSBpbnRlZ2VycworbGdhbTAwMTAgbGdhbW1hIC0xIC0+IGluZiAgICAgICBkaXZpZGUtYnktemVybworbGdhbTAwMTEgbGdhbW1hIC0yIC0+IGluZiAgICAgICBkaXZpZGUtYnktemVybworbGdhbTAwMTIgbGdhbW1hIC0xZTE2IC0+IGluZiAgICBkaXZpZGUtYnktemVybworbGdhbTAwMTMgbGdhbW1hIC0xZTMwMCAtPiBpbmYgICBkaXZpZGUtYnktemVybworbGdhbTAwMTQgbGdhbW1hIC0xLjc5ZTMwOCAtPiBpbmYgZGl2aWRlLWJ5LXplcm8KKworLS0gc21hbGwgcG9zaXRpdmUgaW50ZWdlcnMgZ2l2ZSBmYWN0b3JpYWxzCitsZ2FtMDAyMCBsZ2FtbWEgMSAtPiAwLjAKK2xnYW0wMDIxIGxnYW1tYSAyIC0+IDAuMAorbGdhbTAwMjIgbGdhbW1hIDMgLT4gMC42OTMxNDcxODA1NTk5NDUyOQorbGdhbTAwMjMgbGdhbW1hIDQgLT4gMS43OTE3NTk0NjkyMjgwNTUKK2xnYW0wMDI0IGxnYW1tYSA1IC0+IDMuMTc4MDUzODMwMzQ3OTQ1OAorbGdhbTAwMjUgbGdhbW1hIDYgLT4gNC43ODc0OTE3NDI3ODIwNDU4CisKKy0tIGhhbGYgaW50ZWdlcnMKK2xnYW0wMDMwIGxnYW1tYSAwLjUgLT4gMC41NzIzNjQ5NDI5MjQ3MDAwOAorbGdhbTAwMzEgbGdhbW1hIDEuNSAtPiAtMC4xMjA3ODIyMzc2MzUyNDUyMgorbGdhbTAwMzIgbGdhbW1hIDIuNSAtPiAwLjI4NDY4Mjg3MDQ3MjkxOTE4CitsZ2FtMDAzMyBsZ2FtbWEgMy41IC0+IDEuMjAwOTczNjAyMzQ3MDc0MworbGdhbTAwMzQgbGdhbW1hIC0wLjUgLT4gMS4yNjU1MTIxMjM0ODQ2NDU0CitsZ2FtMDAzNSBsZ2FtbWEgLTEuNSAtPiAwLjg2MDA0NzAxNTM3NjQ4MDk4CitsZ2FtMDAzNiBsZ2FtbWEgLTIuNSAtPiAtMC4wNTYyNDM3MTY0OTc2NzQwNTQKK2xnYW0wMDM3IGxnYW1tYSAtMy41IC0+IC0xLjMwOTAwNjY4NDk5MzA0MgorCistLSB2YWx1ZXMgbmVhciAwCitsZ2FtMDA0MCBsZ2FtbWEgMC4xIC0+IDIuMjUyNzEyNjUxNzM0MjA2CitsZ2FtMDA0MSBsZ2FtbWEgMC4wMSAtPiA0LjU5OTQ3OTg3ODA0MjAyMTkKK2xnYW0wMDQyIGxnYW1tYSAxZS04IC0+IDE4LjQyMDY4MDczODE4MDIwOQorbGdhbTAwNDMgbGdhbW1hIDFlLTE2IC0+IDM2Ljg0MTM2MTQ4NzkwNDczNAorbGdhbTAwNDQgbGdhbW1hIDFlLTMwIC0+IDY5LjA3NzU1Mjc4OTgyMTM2OAorbGdhbTAwNDUgbGdhbW1hIDFlLTE2MCAtPiAzNjguNDEzNjE0ODc5MDQ3MzIKK2xnYW0wMDQ2IGxnYW1tYSAxZS0zMDggLT4gNzA5LjE5NjIwODY0MjE2NjA4CitsZ2FtMDA0NyBsZ2FtbWEgNS42ZS0zMDkgLT4gNzA5Ljc3NjAyNzEzNzQxODk2CitsZ2FtMDA0OCBsZ2FtbWEgNS41ZS0zMDkgLT4gNzA5Ljc5NDA0NTY0MjkyMTY3CitsZ2FtMDA0OSBsZ2FtbWEgMWUtMzA5IC0+IDcxMS40OTg3OTM3MzUxNjAxMgorbGdhbTAwNTAgbGdhbW1hIDFlLTMyMyAtPiA3NDMuNzQ2OTI0NzQwODIxMzMKK2xnYW0wMDUxIGxnYW1tYSA1ZS0zMjQgLT4gNzQ0LjQ0MDA3MTkyMTM4MTIyCitsZ2FtMDA2MCBsZ2FtbWEgLTAuMSAtPiAyLjM2ODk2MTMzMjcyODc4ODYKK2xnYW0wMDYxIGxnYW1tYSAtMC4wMSAtPiA0LjYxMTAyNDk5Mjc1MjgwMTMKK2xnYW0wMDYyIGxnYW1tYSAtMWUtOCAtPiAxOC40MjA2ODA3NDk3MjQ1MjIKK2xnYW0wMDYzIGxnYW1tYSAtMWUtMTYgLT4gMzYuODQxMzYxNDg3OTA0NzM0CitsZ2FtMDA2NCBsZ2FtbWEgLTFlLTMwIC0+IDY5LjA3NzU1Mjc4OTgyMTM2OAorbGdhbTAwNjUgbGdhbW1hIC0xZS0xNjAgLT4gMzY4LjQxMzYxNDg3OTA0NzMyCitsZ2FtMDA2NiBsZ2FtbWEgLTFlLTMwOCAtPiA3MDkuMTk2MjA4NjQyMTY2MDgKK2xnYW0wMDY3IGxnYW1tYSAtNS42ZS0zMDkgLT4gNzA5Ljc3NjAyNzEzNzQxODk2CitsZ2FtMDA2OCBsZ2FtbWEgLTUuNWUtMzA5IC0+IDcwOS43OTQwNDU2NDI5MjE2NworbGdhbTAwNjkgbGdhbW1hIC0xZS0zMDkgLT4gNzExLjQ5ODc5MzczNTE2MDEyCitsZ2FtMDA3MCBsZ2FtbWEgLTFlLTMyMyAtPiA3NDMuNzQ2OTI0NzQwODIxMzMKK2xnYW0wMDcxIGxnYW1tYSAtNWUtMzI0IC0+IDc0NC40NDAwNzE5MjEzODEyMgorCistLSB2YWx1ZXMgbmVhciBuZWdhdGl2ZSBpbnRlZ2VycworbGdhbTAwODAgbGdhbW1hIC0wLjk5OTk5OTk5OTk5OTk5OTg5IC0+IDM2LjczNjgwMDU2OTY3NzEwMQorbGdhbTAwODEgbGdhbW1hIC0xLjAwMDAwMDAwMDAwMDAwMDIgLT4gMzYuMDQzNjUzMzg5MTE3MTU0CitsZ2FtMDA4MiBsZ2FtbWEgLTEuOTk5OTk5OTk5OTk5OTk5OCAtPiAzNS4zNTA1MDYyMDg1NTcyMTMKK2xnYW0wMDgzIGxnYW1tYSAtMi4wMDAwMDAwMDAwMDAwMDA0IC0+IDM0LjY1NzM1OTAyNzk5NzI2NgorbGdhbTAwODQgbGdhbW1hIC0xMDAuMDAwMDAwMDAwMDAwMDEgLT4gLTMzMS44NTQ2MDUyNDk4MDYwNworbGdhbTAwODUgbGdhbW1hIC05OS45OTk5OTk5OTk5OTk5ODYgLT4gLTMzMS44NTQ2MDUyNDk4MDU5NgorCistLSBsYXJnZSBpbnB1dHMKK2xnYW0wMTAwIGxnYW1tYSAxNzAgLT4gNzAxLjQzNzI2MzgwODczNzA0CitsZ2FtMDEwMSBsZ2FtbWEgMTcxIC0+IDcwNi41NzMwNjIyNDU3ODczNgorbGdhbTAxMDIgbGdhbW1hIDE3MS42MjQgLT4gNzA5Ljc4MDc3NDQzNjY5ODk1CitsZ2FtMDEwMyBsZ2FtbWEgMTcxLjYyNSAtPiA3MDkuNzg1OTE2ODI5NDgzNjUKK2xnYW0wMTA0IGxnYW1tYSAxNzIgLT4gNzExLjcxNDcyNTgwMjI4OTk5CitsZ2FtMDEwNSBsZ2FtbWEgMjAwMCAtPiAxMzE5OC45MjM0NDgwNTQyNjUKK2xnYW0wMTA2IGxnYW1tYSAyLjU1OTk4MzMyNzg1MTYzZTMwNSAtPiAxLjc5NzY5MzEzNDg2MjMwOTllKzMwOAorbGdhbTAxMDcgbGdhbW1hIDIuNTU5OTgzMzI3ODUxNjRlMzA1IC0+IGluZiBvdmVyZmxvdworbGdhbTAxMDggbGdhbW1hIDEuN2UzMDggLT4gaW5mIG92ZXJmbG93CisKKy0tIGlucHV0cyBmb3Igd2hpY2ggZ2FtbWEoeCkgaXMgdGlueQorbGdhbTAxMjAgbGdhbW1hIC0xMDAuNSAtPiAtMzY0LjkwMDk2ODMwOTQyNzM2CitsZ2FtMDEyMSBsZ2FtbWEgLTE2MC41IC0+IC02NTYuODgwMDUyNjExMjY0MzIKK2xnYW0wMTIyIGxnYW1tYSAtMTcwLjUgLT4gLTcwNy45OTg0MzMxNDUwNzg4MgorbGdhbTAxMjMgbGdhbW1hIC0xNzEuNSAtPiAtNzEzLjE0MzAxNjQxMTY4NDgxCitsZ2FtMDEyNCBsZ2FtbWEgLTE3Ni41IC0+IC03MzguOTUyNDc1OTA4NDY0ODYKK2xnYW0wMTI1IGxnYW1tYSAtMTc3LjUgLT4gLTc0NC4xMzE0NDY1MTczODAzNworbGdhbTAxMjYgbGdhbW1hIC0xNzguNSAtPiAtNzQ5LjMxNjAzNTExODYwMDEKKworbGdhbTAxMzAgbGdhbW1hIC0xMDAwLjUgLT4gLTU5MTQuNDM3NzAxMTE2ODUxNworbGdhbTAxMzEgbGdhbW1hIC0zMDAwMC41IC0+IC0yNzkyNzguNjYyOTk1OTE0NAorbGdhbTAxMzIgbGdhbW1hIC00NTAzNTk5NjI3MzcwNDk1LjUgLT4gLTEuNTc4MjI1ODQzNDQ5Mjg4M2UrMTcKKworLS0gcmVzdWx0cyBjbG9zZSB0byAwOiAgcG9zaXRpdmUgYXJndW1lbnQgLi4uCitsZ2FtMDE1MCBsZ2FtbWEgMC45OTk5OTk5OTk5OTk5OTk4OSAtPiA2LjQwODM4MTIxMzQ4MDAwNzVlLTE3CitsZ2FtMDE1MSBsZ2FtbWEgMS4wMDAwMDAwMDAwMDAwMDAyIC0+IC0xLjI4MTY3NjI0MjY5NjAwMDhlLTE2CitsZ2FtMDE1MiBsZ2FtbWEgMS45OTk5OTk5OTk5OTk5OTk4IC0+IC05LjM4NzY5ODA2NTU0MzExNzBlLTE3CitsZ2FtMDE1MyBsZ2FtbWEgMi4wMDAwMDAwMDAwMDAwMDA0IC0+IDEuODc3NTM5NjEzMTA4NjI0NGUtMTYKKworLS0gLi4uIGFuZCBuZWdhdGl2ZSBhcmd1bWVudAorbGdhbTAxNjAgbGdhbW1hIC0yLjc0NzY4MjY0NjcgLT4gLTUuMjQ3NzQwODE0NzY4OTEzNmUtMTEKK2xnYW0wMTYxIGxnYW1tYSAtMi40NTcwMjQ3MzggLT4gMy4zNDY0NjM3NTQxOTEyOTMyZS0xMAorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gZ2FtbWE6IEdhbW1hIGZ1bmN0aW9uIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gc3BlY2lhbCB2YWx1ZXMKK2dhbTAwMDAgZ2FtbWEgMC4wIC0+IGluZiAgICAgICAgZGl2aWRlLWJ5LXplcm8KK2dhbTAwMDEgZ2FtbWEgLTAuMCAtPiAtaW5mICAgICAgZGl2aWRlLWJ5LXplcm8KK2dhbTAwMDIgZ2FtbWEgaW5mIC0+IGluZgorZ2FtMDAwMyBnYW1tYSAtaW5mIC0+IG5hbiAgICAgICBpbnZhbGlkCitnYW0wMDA0IGdhbW1hIG5hbiAtPiBuYW4KKworLS0gbmVnYXRpdmUgaW50ZWdlcnMgaW5wdXRzIGFyZSBpbnZhbGlkCitnYW0wMDEwIGdhbW1hIC0xIC0+IG5hbiAgICAgICAgIGludmFsaWQKK2dhbTAwMTEgZ2FtbWEgLTIgLT4gbmFuICAgICAgICAgaW52YWxpZAorZ2FtMDAxMiBnYW1tYSAtMWUxNiAtPiBuYW4gICAgICBpbnZhbGlkCitnYW0wMDEzIGdhbW1hIC0xZTMwMCAtPiBuYW4gICAgIGludmFsaWQKKworLS0gc21hbGwgcG9zaXRpdmUgaW50ZWdlcnMgZ2l2ZSBmYWN0b3JpYWxzCitnYW0wMDIwIGdhbW1hIDEgLT4gMQorZ2FtMDAyMSBnYW1tYSAyIC0+IDEKK2dhbTAwMjIgZ2FtbWEgMyAtPiAyCitnYW0wMDIzIGdhbW1hIDQgLT4gNgorZ2FtMDAyNCBnYW1tYSA1IC0+IDI0CitnYW0wMDI1IGdhbW1hIDYgLT4gMTIwCisKKy0tIGhhbGYgaW50ZWdlcnMKK2dhbTAwMzAgZ2FtbWEgMC41IC0+IDEuNzcyNDUzODUwOTA1NTE2MQorZ2FtMDAzMSBnYW1tYSAxLjUgLT4gMC44ODYyMjY5MjU0NTI3NTgwNQorZ2FtMDAzMiBnYW1tYSAyLjUgLT4gMS4zMjkzNDAzODgxNzkxMzcwCitnYW0wMDMzIGdhbW1hIDMuNSAtPiAzLjMyMzM1MDk3MDQ0Nzg0MjYKK2dhbTAwMzQgZ2FtbWEgLTAuNSAtPiAtMy41NDQ5MDc3MDE4MTEwMzIyCitnYW0wMDM1IGdhbW1hIC0xLjUgLT4gMi4zNjMyNzE4MDEyMDczNTQ4CitnYW0wMDM2IGdhbW1hIC0yLjUgLT4gLTAuOTQ1MzA4NzIwNDgyOTQxOTAKK2dhbTAwMzcgZ2FtbWEgLTMuNSAtPiAwLjI3MDA4ODIwNTg1MjI2OTExCisKKy0tIHZhbHVlcyBuZWFyIDAKK2dhbTAwNDAgZ2FtbWEgMC4xIC0+IDkuNTEzNTA3Njk4NjY4NzMwNgorZ2FtMDA0MSBnYW1tYSAwLjAxIC0+IDk5LjQzMjU4NTExOTE1MDYwMgorZ2FtMDA0MiBnYW1tYSAxZS04IC0+IDk5OTk5OTk5LjQyMjc4NDM0MworZ2FtMDA0MyBnYW1tYSAxZS0xNiAtPiAxMDAwMDAwMDAwMDAwMDAwMAorZ2FtMDA0NCBnYW1tYSAxZS0zMCAtPiA5Ljk5OTk5OTk5OTk5OTk5ODhlKzI5CitnYW0wMDQ1IGdhbW1hIDFlLTE2MCAtPiAxLjAwMDAwMDAwMDAwMDAwMDBlKzE2MAorZ2FtMDA0NiBnYW1tYSAxZS0zMDggLT4gMS4wMDAwMDAwMDAwMDAwMDAwZSszMDgKK2dhbTAwNDcgZ2FtbWEgNS42ZS0zMDkgLT4gMS43ODU3MTQyODU3MTQyODQ4ZSszMDgKK2dhbTAwNDggZ2FtbWEgNS41ZS0zMDkgLT4gaW5mICAgb3ZlcmZsb3cKK2dhbTAwNDkgZ2FtbWEgMWUtMzA5IC0+IGluZiAgICAgb3ZlcmZsb3cKK2dhbTAwNTAgZ2FtbWEgMWUtMzIzIC0+IGluZiAgICAgb3ZlcmZsb3cKK2dhbTAwNTEgZ2FtbWEgNWUtMzI0IC0+IGluZiAgICAgb3ZlcmZsb3cKK2dhbTAwNjAgZ2FtbWEgLTAuMSAtPiAtMTAuNjg2Mjg3MDIxMTkzMTkzCitnYW0wMDYxIGdhbW1hIC0wLjAxIC0+IC0xMDAuNTg3MTk3OTY0NDEwNzgKK2dhbTAwNjIgZ2FtbWEgLTFlLTggLT4gLTEwMDAwMDAwMC41NzcyMTU2NworZ2FtMDA2MyBnYW1tYSAtMWUtMTYgLT4gLTEwMDAwMDAwMDAwMDAwMDAwCitnYW0wMDY0IGdhbW1hIC0xZS0zMCAtPiAtOS45OTk5OTk5OTk5OTk5OTg4ZSsyOQorZ2FtMDA2NSBnYW1tYSAtMWUtMTYwIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDBlKzE2MAorZ2FtMDA2NiBnYW1tYSAtMWUtMzA4IC0+IC0xLjAwMDAwMDAwMDAwMDAwMDBlKzMwOAorZ2FtMDA2NyBnYW1tYSAtNS42ZS0zMDkgLT4gLTEuNzg1NzE0Mjg1NzE0Mjg0OGUrMzA4CitnYW0wMDY4IGdhbW1hIC01LjVlLTMwOSAtPiAtaW5mIG92ZXJmbG93CitnYW0wMDY5IGdhbW1hIC0xZS0zMDkgLT4gLWluZiAgIG92ZXJmbG93CitnYW0wMDcwIGdhbW1hIC0xZS0zMjMgLT4gLWluZiAgIG92ZXJmbG93CitnYW0wMDcxIGdhbW1hIC01ZS0zMjQgLT4gLWluZiAgIG92ZXJmbG93CisKKy0tIHZhbHVlcyBuZWFyIG5lZ2F0aXZlIGludGVnZXJzCitnYW0wMDgwIGdhbW1hIC0wLjk5OTk5OTk5OTk5OTk5OTg5IC0+IC05MDA3MTk5MjU0NzQwOTkyLjAKK2dhbTAwODEgZ2FtbWEgLTEuMDAwMDAwMDAwMDAwMDAwMiAtPiA0NTAzNTk5NjI3MzcwNDk1LjUKK2dhbTAwODIgZ2FtbWEgLTEuOTk5OTk5OTk5OTk5OTk5OCAtPiAyMjUxNzk5ODEzNjg1MjQ4LjUKK2dhbTAwODMgZ2FtbWEgLTIuMDAwMDAwMDAwMDAwMDAwNCAtPiAtMTEyNTg5OTkwNjg0MjYyMy41CitnYW0wMDg0IGdhbW1hIC0xMDAuMDAwMDAwMDAwMDAwMDEgLT4gLTcuNTQwMDgzMzM0ODgzMTA5MGUtMTQ1CitnYW0wMDg1IGdhbW1hIC05OS45OTk5OTk5OTk5OTk5ODYgLT4gNy41NDAwODMzMzQ4ODQwOTYyZS0xNDUKKworLS0gbGFyZ2UgaW5wdXRzCitnYW0wMTAwIGdhbW1hIDE3MCAtPiA0LjI2OTA2ODAwOTAwNDcwNTFlKzMwNAorZ2FtMDEwMSBnYW1tYSAxNzEgLT4gNy4yNTc0MTU2MTUzMDc5OTkwZSszMDYKK2dhbTAxMDIgZ2FtbWEgMTcxLjYyNCAtPiAxLjc5NDIxMTc1OTkyNDgxMDRlKzMwOAorZ2FtMDEwMyBnYW1tYSAxNzEuNjI1IC0+IGluZiAgICBvdmVyZmxvdworZ2FtMDEwNCBnYW1tYSAxNzIgLT4gaW5mICAgICAgICBvdmVyZmxvdworZ2FtMDEwNSBnYW1tYSAyMDAwIC0+IGluZiAgICAgICBvdmVyZmxvdworZ2FtMDEwNiBnYW1tYSAxLjdlMzA4IC0+IGluZiAgICBvdmVyZmxvdworCistLSBpbnB1dHMgZm9yIHdoaWNoIGdhbW1hKHgpIGlzIHRpbnkKK2dhbTAxMjAgZ2FtbWEgLTEwMC41IC0+IC0zLjM1MzY5MDgxOTgwNzY3ODdlLTE1OQorZ2FtMDEyMSBnYW1tYSAtMTYwLjUgLT4gLTUuMjU1NTQ2NDQ3MDA3ODI5M2UtMjg2CitnYW0wMTIyIGdhbW1hIC0xNzAuNSAtPiAtMy4zMTI3Mzk1MjE1Mzg2MDc0ZS0zMDgKK2dhbTAxMjMgZ2FtbWEgLTE3MS41IC0+IDEuOTMxNjI2NTQzMTcxMTkwMmUtMzEwCitnYW0wMTI0IGdhbW1hIC0xNzYuNSAtPiAtMS4xOTU2Mzg4NjI5MzU4MTY2ZS0zMjEKK2dhbTAxMjUgZ2FtbWEgLTE3Ny41IC0+IDQuOTQwNjU2NDU4NDEyNDY1NGUtMzI0CitnYW0wMTI2IGdhbW1hIC0xNzguNSAtPiAtMC4wCitnYW0wMTI3IGdhbW1hIC0xNzkuNSAtPiAwLjAKK2dhbTAxMjggZ2FtbWEgLTIwMS4wMDAxIC0+IDAuMAorZ2FtMDEyOSBnYW1tYSAtMjAyLjk5OTkgLT4gLTAuMAorZ2FtMDEzMCBnYW1tYSAtMTAwMC41IC0+IC0wLjAKK2dhbTAxMzEgZ2FtbWEgLTEwMDAwMDAwMDAuMyAtPiAtMC4wCitnYW0wMTMyIGdhbW1hIC00NTAzNTk5NjI3MzcwNDk1LjUgLT4gMC4wCisKKy0tIGlucHV0cyB0aGF0IGNhdXNlIHByb2JsZW1zIGZvciB0aGUgc3RhbmRhcmQgcmVmbGVjdGlvbiBmb3JtdWxhLAorLS0gdGhhbmtzIHRvIGxvc3Mgb2YgYWNjdXJhY3kgaW4gMS14CitnYW0wMTQwIGdhbW1hIC02My4zNDkwNzg3MjkwMjI5ODUgLT4gNC4xNzc3OTcxNjc3NzYxODgwZS04OAorZ2FtMDE0MSBnYW1tYSAtMTI3LjQ1MTE3NjMyOTQzMjk1IC0+IDEuMTgzMTExMDg5NjIzNjgxMGUtMjE0CisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGV4cG0xOiBleHAoeCkgLSAxLCB3aXRob3V0IHByZWNpc2lvbiBsb3NzIGZvciBzbWFsbCB4IC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSBzcGVjaWFsIHZhbHVlcworZXhwbTEwMDAwIGV4cG0xIDAuMCAtPiAwLjAKK2V4cG0xMDAwMSBleHBtMSAtMC4wIC0+IC0wLjAKK2V4cG0xMDAwMiBleHBtMSBpbmYgLT4gaW5mCitleHBtMTAwMDMgZXhwbTEgLWluZiAtPiAtMS4wCitleHBtMTAwMDQgZXhwbTEgbmFuIC0+IG5hbgorCistLSBleHBtMSh4KSB+IHggZm9yIHRpbnkgeAorZXhwbTEwMDEwIGV4cG0xIDVlLTMyNCAtPiA1ZS0zMjQKK2V4cG0xMDAxMSBleHBtMSAxZS0zMjAgLT4gMWUtMzIwCitleHBtMTAwMTIgZXhwbTEgMWUtMzAwIC0+IDFlLTMwMAorZXhwbTEwMDEzIGV4cG0xIDFlLTE1MCAtPiAxZS0xNTAKK2V4cG0xMDAxNCBleHBtMSAxZS0yMCAtPiAxZS0yMAorCitleHBtMTAwMjAgZXhwbTEgLTVlLTMyNCAtPiAtNWUtMzI0CitleHBtMTAwMjEgZXhwbTEgLTFlLTMyMCAtPiAtMWUtMzIwCitleHBtMTAwMjIgZXhwbTEgLTFlLTMwMCAtPiAtMWUtMzAwCitleHBtMTAwMjMgZXhwbTEgLTFlLTE1MCAtPiAtMWUtMTUwCitleHBtMTAwMjQgZXhwbTEgLTFlLTIwIC0+IC0xZS0yMAorCistLSBtb2RlcmF0ZSBzaXplZCB2YWx1ZXMsIHdoZXJlIGRpcmVjdCBldmFsdWF0aW9uIHJ1bnMgaW50byB0cm91YmxlCitleHBtMTAxMDAgZXhwbTEgMWUtMTAgLT4gMS4wMDAwMDAwMDAwNTAwMDAwZS0xMAorZXhwbTEwMTAxIGV4cG0xIC05Ljk5OTk5OTk5OTk5OTk5OTVlLTA4IC0+IC05Ljk5OTk5OTUwMDAwMDAxNjNlLTgKK2V4cG0xMDEwMiBleHBtMSAzLjAwMDAwMDAwMDAwMDAwMDFlLTA1IC0+IDMuMDAwMDQ1MDAwNDUwMDAzNGUtNQorZXhwbTEwMTAzIGV4cG0xIC0wLjAwNzAwMDAwMDAwMDAwMDAwMDEgLT4gLTAuMDA2OTc1NTU3MDY2NzY0ODk1MQorZXhwbTEwMTA0IGV4cG0xIC0wLjA3MTQ5OTIwODc0MDA5NDYzMyAtPiAtMC4wNjkwMDI5ODU3NDQ4MjAyNTAKK2V4cG0xMDEwNSBleHBtMSAtMC4wNjMyOTYwMDQxODAxMTY3OTkgLT4gLTAuMDYxMzM0NDE2MzczNjMzMDA5CitleHBtMTAxMDYgZXhwbTEgMC4wMjM5MDk1NDAzNTU5Nzc1NiAtPiAwLjAyNDE5NzY2NTE0MzgxOTk0MgorZXhwbTEwMTA3IGV4cG0xIDAuMDg1NjM3MzUyNjQ5MDQ0OTAxIC0+IDAuMDg5NDExMTg0NTgwMzU3NzY3CitleHBtMTAxMDggZXhwbTEgMC41OTY2MTc0OTQ3NDExMDA2IC0+IDAuODE1OTY1ODg1OTY1MDE0ODUKK2V4cG0xMDEwOSBleHBtMSAwLjMwMjQ3MjA2MjEyMDc1MTM5IC0+IDAuMzUzMTk5ODcwMzU4NDg2NzcKK2V4cG0xMDExMCBleHBtMSAwLjc0NTc0NzI3Mzc1ODg5NTE2IC0+IDEuMTA4MDE2MTExNjczNzQ1OQorZXhwbTEwMTExIGV4cG0xIDAuOTc3Njc1MTI5MjY1NTU3MTEgLT4gMS42NTgyNjg5MjA3MzcyMTg1CitleHBtMTAxMTIgZXhwbTEgMC44NDUwMTU0NTY2Nzg3NzEyIC0+IDEuMzI4MDEzNzk3NjUzNTg5NworZXhwbTEwMTEzIGV4cG0xIC0wLjEzOTc5MjYwMzIzMTI1MjY0IC0+IC0wLjEzMDQ2MTQ0MzgxMzk2MDYwCitleHBtMTAxMTQgZXhwbTEgLTAuNTI4OTkzMjIwMzk2NDMyNzEgLT4gLTAuNDEwODAyMTM2NDM2OTU5MjMKK2V4cG0xMDExNSBleHBtMSAtMC43NDA4MzI2MTQ3ODkwMDYzMSAtPiAtMC41MjMyODMxNzEyNDc5NzA5NworZXhwbTEwMTE2IGV4cG0xIC0wLjkzODQ3NzY2OTg0NTQ2MDU1IC0+IC0wLjYwODc3NzA0NzI0MDg1OTQ2CitleHBtMTAxMTcgZXhwbTEgMTAuMCAtPiAyMjAyNS40NjU3OTQ4MDY3MTgKK2V4cG0xMDExOCBleHBtMSAyNy4wIC0+IDUzMjA0ODI0MDYwMC43OTg2NQorZXhwbTEwMTE5IGV4cG0xIDEyMyAtPiAyLjYxOTUxNzMxODc0OTA2MjZlKzUzCitleHBtMTAxMjAgZXhwbTEgLTEyLjAgLT4gLTAuOTk5OTkzODU1Nzg3NjQ2NjYKK2V4cG0xMDEyMSBleHBtMSAtMzUuMTAwMDAwMDAwMDAwMDAxIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTQ0CisKKy0tIGV4dHJlbWUgbmVnYXRpdmUgdmFsdWVzCitleHBtMTAyMDEgZXhwbTEgLTM3LjAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5ODkKK2V4cG0xMDIwMCBleHBtMSAtMzguMCAtPiAtMS4wCitleHBtMTAyMTAgZXhwbTEgLTcxMC4wIC0+IC0xLjAKKy0tIHRoZSBmb3JtdWxhIGV4cG0xKHgpID0gMiAqIHNpbmgoeC8yKSAqIGV4cCh4LzIpIGRvZXNuJ3Qgd29yayBzbworLS0gd2VsbCB3aGVuIGV4cCh4LzIpIGlzIHN1Ym5vcm1hbCBvciB1bmRlcmZsb3dzIHRvIHplcm87IGNoZWNrIHdlJ3JlCistLSBub3QgdXNpbmcgaXQhCitleHBtMTAyMTEgZXhwbTEgLTE0MjAuMCAtPiAtMS4wCitleHBtMTAyMTIgZXhwbTEgLTE0NTAuMCAtPiAtMS4wCitleHBtMTAyMTMgZXhwbTEgLTE1MDAuMCAtPiAtMS4wCitleHBtMTAyMTQgZXhwbTEgLTFlNTAgLT4gLTEuMAorZXhwbTEwMjE1IGV4cG0xIC0xLjc5ZTMwOCAtPiAtMS4wCisKKy0tIGV4dHJlbWUgcG9zaXRpdmUgdmFsdWVzCitleHBtMTAzMDAgZXhwbTEgMzAwIC0+IDEuOTQyNDI2Mzk1MjQxMjU1OGUrMTMwCitleHBtMTAzMDEgZXhwbTEgNzAwIC0+IDEuMDE0MjMyMDU0NzM1MDA0NWUrMzA0CistLSB0aGUgbmV4dCB0ZXN0IChleHBtMTAzMDIpIGlzIGRpc2FibGVkIGJlY2F1c2UgaXQgY2F1c2VzIGZhaWx1cmUgb24KKy0tIE9TIFggMTAuNC9JbnRlbDogYXBwYXJlbnRseSBhbGwgdmFsdWVzIG92ZXIgNzA5Ljc4IHByb2R1Y2UgYW4KKy0tIG92ZXJmbG93IG9uIHRoYXQgcGxhdGZvcm0uICBTZWUgaXNzdWUgIzc1NzUuCistLSBleHBtMTAzMDIgZXhwbTEgNzA5Ljc4MjcxMjg5MzI4MzkzIC0+IDEuNzk3NjkzMTM0NjgyNDI0MGUrMzA4CitleHBtMTAzMDMgZXhwbTEgNzA5Ljc4MjcxMjg5MzQ4NDAyIC0+IGluZiBvdmVyZmxvdworZXhwbTEwMzA0IGV4cG0xIDEwMDAgLT4gaW5mIG92ZXJmbG93CitleHBtMTAzMDUgZXhwbTEgMWU1MCAtPiBpbmYgb3ZlcmZsb3cKK2V4cG0xMDMwNiBleHBtMSAxLjc5ZTMwOCAtPiBpbmYgb3ZlcmZsb3cKKworLS0gd2Vha2VyIHZlcnNpb24gb2YgZXhwbTEwMzAyCitleHBtMTAzMDcgZXhwbTEgNzA5LjUgLT4gMS4zNTQ5ODYzMTkzMTQ2MzI4ZSszMDgKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9tcF9mb3JrX2JvbWIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvbXBfZm9ya19ib21iLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyY2VhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvbXBfZm9ya19ib21iLnB5CkBAIC0wLDAgKzEsMTYgQEAKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKworZGVmIGZvbyhjb25uKToKKyAgICBjb25uLnNlbmQoIjEyMyIpCisKKyMgQmVjYXVzZSAiaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJyIgaXMgbWlzc2luZyB0aGlzIHdpbGwgbm90IHdvcmsKKyMgY29ycmVjdGx5IG9uIFdpbmRvd3MuICBIb3dldmVyLCB3ZSBzaG91bGQgZ2V0IGEgUnVudGltZUVycm9yIHJhdGhlcgorIyB0aGFuIHRoZSBXaW5kb3dzIGVxdWl2YWxlbnQgb2YgYSBmb3JrIGJvbWIuCisKK3IsIHcgPSBtdWx0aXByb2Nlc3NpbmcuUGlwZShGYWxzZSkKK3AgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9Zm9vLCBhcmdzPSh3LCkpCitwLnN0YXJ0KCkKK3cuY2xvc2UoKQorcHJpbnQoci5yZWN2KCkpCityLmNsb3NlKCkKK3Auam9pbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3Qvbm9raWEucGVtIGIvbGliL3B5dGhvbjIuNy90ZXN0L25va2lhLnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDA0NGRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L25va2lhLnBlbQpAQCAtMCwwICsxLDMxIEBACisjIENlcnRpZmljYXRlIGZvciBwcm9qZWN0cy5kZXZlbG9wZXIubm9raWEuY29tOjQ0MyAoc2VlIGlzc3VlIDEzMDM0KQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlGTERDQ0JCU2dBd0lCQWdJUUx1YnFka0NnZGM3bEFGOU5mSGxVbWpBTkJna3Foa2lHOXcwQkFRVUZBRENCCit2REVMTUFrR0ExVUVCaE1DVlZNeEZ6QVZCZ05WQkFvVERsWmxjbWxUYVdkdUxDQkpibU11TVI4d0hRWURWUVFMCitFeFpXWlhKcFUybG5iaUJVY25WemRDQk9aWFIzYjNKck1Uc3dPUVlEVlFRTEV6SlVaWEp0Y3lCdlppQjFjMlVnCitZWFFnYUhSMGNITTZMeTkzZDNjdWRtVnlhWE5wWjI0dVkyOXRMM0p3WVNBb1l5a3hNREUyTURRR0ExVUVBeE10CitWbVZ5YVZOcFoyNGdRMnhoYzNNZ015QkpiblJsY201aGRHbHZibUZzSUZObGNuWmxjaUJEUVNBdElFY3pNQjRYCitEVEV4TURreU1UQXdNREF3TUZvWERURXlNRGt5TURJek5UazFPVm93Y1RFTE1Ba0dBMVVFQmhNQ1Jra3hEakFNCitCZ05WQkFnVEJVVnpjRzl2TVE0d0RBWURWUVFIRkFWRmMzQnZiekVPTUF3R0ExVUVDaFFGVG05cmFXRXhDekFKCitCZ05WQkFzVUFrSkpNU1V3SXdZRFZRUURGQnh3Y205cVpXTjBjeTVrWlhabGJHOXdaWEl1Ym05cmFXRXVZMjl0CitNSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0JnUUNyOTJ3MWJwSFlTWXhVRXg4Ti84SWRkZGEyCitsWWkrYVhOdFFmVi9sMkZ3OVlrdjNJcHc0bkxlR1RqMThGRmxBWmdNZFBSbGdyekYvTk5YR3cvOWwzL3FLZG93CitDeXBrUWY4bExheGI5WmUxRS9LS21rUkphNDhRVE9xdm82R3FLdVRJNkhDZUdsRzFSeERiOFlTS2NRV0xpeXRuCit5ajNXcDRNZ1JRTzI2NnhtTVFJREFRQUJvNElCOWpDQ0FmSXdRUVlEVlIwUkJEb3dPSUljY0hKdmFtVmpkSE11CitaR1YyWld4dmNHVnlMbTV2YTJsaExtTnZiWUlZY0hKdmFtVmpkSE11Wm05eWRXMHVibTlyYVdFdVkyOXRNQWtHCitBMVVkRXdRQ01BQXdDd1lEVlIwUEJBUURBZ1dnTUVFR0ExVWRId1E2TURnd05xQTBvREtHTUdoMGRIQTZMeTlUCitWbEpKYm5Sc0xVY3pMV055YkM1MlpYSnBjMmxuYmk1amIyMHZVMVpTU1c1MGJFY3pMbU55YkRCRUJnTlZIU0FFCitQVEE3TURrR0MyQ0dTQUdHK0VVQkJ4Y0RNQ293S0FZSUt3WUJCUVVIQWdFV0hHaDBkSEJ6T2k4dmQzZDNMblpsCitjbWx6YVdkdUxtTnZiUzl5Y0dFd0tBWURWUjBsQkNFd0h3WUpZSVpJQVliNFFnUUJCZ2dyQmdFRkJRY0RBUVlJCitLd1lCQlFVSEF3SXdjZ1lJS3dZQkJRVUhBUUVFWmpCa01DUUdDQ3NHQVFVRkJ6QUJoaGhvZEhSd09pOHZiMk56CitjQzUyWlhKcGMybG5iaTVqYjIwd1BBWUlLd1lCQlFVSE1BS0dNR2gwZEhBNkx5OVRWbEpKYm5Sc0xVY3pMV0ZwCitZUzUyWlhKcGMybG5iaTVqYjIwdlUxWlNTVzUwYkVjekxtTmxjakJ1QmdnckJnRUZCUWNCREFSaU1HQ2hYcUJjCitNRm93V0RCV0ZnbHBiV0ZuWlM5bmFXWXdJVEFmTUFjR0JTc09Bd0lhQkJSTGE3a29sZ1lNdTlCU09Kc3ByRXNICitpeUVGR0RBbUZpUm9kSFJ3T2k4dmJHOW5ieTUyWlhKcGMybG5iaTVqYjIwdmRuTnNiMmR2TVM1bmFXWXdEUVlKCitLb1pJaHZjTkFRRUZCUUFEZ2dFQkFDUXVQeUlKcVh3VXlGUld3OXg1eURYZ01XNHpZRm9wUVlPdy9JdFJZNTIyCitPNUJzeVNUaDU2QldTNm1RQjA3WFZmeG1ZVUdBdlJRREE1UUhwbVk4aklsTndTbU4zczhSS28rZkF0aU5SbGNMCit4L21XU2Z1TXMzRC9TNmV2M0Q2K2RwRU1adGpyaE9kY3RzYXJNS3A4bi9oUGJ3aEFiZzVoVmpwa1c1bjh2ejJ5CiswS3h2dmtBMUF4cEx3cFZ2N09sSzE3dHR6SUh3OGJwOUhUbEhCVTVzOGJLejRhNTY1Vi9hNUhJMENTRXYvKzB5CitrbzQvZ2hUblpjMUNrbVVuZ0tLZUZNU2FoL21UL3hBaDhYbkUybDFBYXpGYThVS3VZa2kxZStBckhhR1pjNGl4CitVWU90aVJwaHdmdVlRaFJaN3FYOXEyTU1rQ01JNjVYTksvU2FGckFiYkcwPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL215Zml4ZXMvX19pbml0X18ucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvbnVsbGNlcnQucGVtCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gbGliL3B5dGhvbjIuNy9saWIydG8zL3Rlc3RzL2RhdGEvZml4ZXJzL215Zml4ZXMvX19pbml0X18ucHkKY29weSB0byBsaWIvcHl0aG9uMi43L3Rlc3QvbnVsbGNlcnQucGVtCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3Qvb3V0c3RhbmRpbmdfYnVncy5weSBiL2xpYi9weXRob24yLjcvdGVzdC9vdXRzdGFuZGluZ19idWdzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YWZjYmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3Qvb3V0c3RhbmRpbmdfYnVncy5weQpAQCAtMCwwICsxLDIyIEBACisjCisjIFRoaXMgZmlsZSBpcyBmb3IgZXZlcnlib2R5IHRvIGFkZCB0ZXN0cyBmb3IgYnVncyB0aGF0IGFyZW4ndAorIyBmaXhlZCB5ZXQuIFBsZWFzZSBhZGQgYSB0ZXN0IGNhc2UgYW5kIGFwcHJvcHJpYXRlIGJ1ZyBkZXNjcmlwdGlvbi4KKyMKKyMgV2hlbiB5b3UgZml4IG9uZSBvZiB0aGUgYnVncywgcGxlYXNlIG1vdmUgdGhlIHRlc3QgdG8gdGhlIGNvcnJlY3QKKyMgdGVzdF8gbW9kdWxlLgorIworCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKyMKKyMgTm8gdGVzdCBjYXNlcyBmb3Igb3V0c3RhbmRpbmcgYnVncyBhdCB0aGUgbW9tZW50LgorIworCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICAjdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgpCisgICAgcGFzcworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvcGlja2xldGVzdGVyLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3BpY2tsZXRlc3Rlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGNhZmNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3BpY2tsZXRlc3Rlci5weQpAQCAtMCwwICsxLDEzMTkgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHBpY2tsZQoraW1wb3J0IGNQaWNrbGUKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IGNTdHJpbmdJTworaW1wb3J0IHBpY2tsZXRvb2xzCitpbXBvcnQgY29weV9yZWcKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdEZhaWxlZCwgdmVyYm9zZSwgaGF2ZV91bmljb2RlLCBURVNURk4KK3RyeToKKyAgICBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBfMkcsIF8xTSwgcHJlY2lzaW9uYmlnbWVtdGVzdAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgdGhpcyBpbXBvcnQgbWlnaHQgZmFpbCB3aGVuIHJ1biBvbiBvbGRlciBQeXRob24gdmVyc2lvbnMgYnkgdGVzdF94cGlja2xlCisgICAgXzJHID0gXzFNID0gMAorICAgIGRlZiBwcmVjaXNpb25iaWdtZW10ZXN0KCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBsYW1iZGEgc2VsZjogTm9uZQorCisjIFRlc3RzIHRoYXQgdHJ5IGEgbnVtYmVyIG9mIHBpY2tsZSBwcm90b2NvbHMgc2hvdWxkIGhhdmUgYQorIyAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyMga2luZCBvZiBvdXRlciBsb29wLgorYXNzZXJ0IHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MID09IGNQaWNrbGUuSElHSEVTVF9QUk9UT0NPTCA9PSAyCitwcm90b2NvbHMgPSByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpCisKKyMgQ29weSBvZiB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fd2l0aF9sb2NhbGUuIFRoaXMgaXMgbmVlZGVkIHRvIHN1cHBvcnQgUHl0aG9uCisjIDIuNCwgd2hpY2ggZGlkbid0IGluY2x1ZGUgaXQuIFRoaXMgaXMgYWxsIHRvIHN1cHBvcnQgdGVzdF94cGlja2xlLCB3aGljaAorIyBib3VuY2VzIHBpY2tsZWQgb2JqZWN0cyB0aHJvdWdoIG9sZGVyIFB5dGhvbiB2ZXJzaW9ucyB0byB0ZXN0IGJhY2t3YXJkcworIyBjb21wYXRpYmlsaXR5LgorZGVmIHJ1bl93aXRoX2xvY2FsZShjYXRzdHIsICpsb2NhbGVzKToKKyAgICBkZWYgZGVjb3JhdG9yKGZ1bmMpOgorICAgICAgICBkZWYgaW5uZXIoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IGxvY2FsZQorICAgICAgICAgICAgICAgIGNhdGVnb3J5ID0gZ2V0YXR0cihsb2NhbGUsIGNhdHN0cikKKyAgICAgICAgICAgICAgICBvcmlnX2xvY2FsZSA9IGxvY2FsZS5zZXRsb2NhbGUoY2F0ZWdvcnkpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBpZiB0aGUgdGVzdCBhdXRob3IgZ2l2ZXMgdXMgYW4gaW52YWxpZCBjYXRlZ29yeSBzdHJpbmcKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICMgY2Fubm90IHJldHJpZXZlIG9yaWdpbmFsIGxvY2FsZSwgc28gZG8gbm90aGluZworICAgICAgICAgICAgICAgIGxvY2FsZSA9IG9yaWdfbG9jYWxlID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmb3IgbG9jIGluIGxvY2FsZXM6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUoY2F0ZWdvcnksIGxvYykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgIyBub3cgcnVuIHRoZSBmdW5jdGlvbiwgcmVzZXR0aW5nIHRoZSBsb2NhbGUgb24gZXhjZXB0aW9ucworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3ZHMpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIGxvY2FsZSBhbmQgb3JpZ19sb2NhbGU6CisgICAgICAgICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUoY2F0ZWdvcnksIG9yaWdfbG9jYWxlKQorICAgICAgICBpbm5lci5mdW5jX25hbWUgPSBmdW5jLmZ1bmNfbmFtZQorICAgICAgICBpbm5lci5fX2RvY19fID0gZnVuYy5fX2RvY19fCisgICAgICAgIHJldHVybiBpbm5lcgorICAgIHJldHVybiBkZWNvcmF0b3IKKworCisjIFJldHVybiBUcnVlIGlmIG9wY29kZSBjb2RlIGFwcGVhcnMgaW4gdGhlIHBpY2tsZSwgZWxzZSBGYWxzZS4KK2RlZiBvcGNvZGVfaW5fcGlja2xlKGNvZGUsIHBpY2tsZSk6CisgICAgZm9yIG9wLCBkdW1teSwgZHVtbXkgaW4gcGlja2xldG9vbHMuZ2Vub3BzKHBpY2tsZSk6CisgICAgICAgIGlmIG9wLmNvZGUgPT0gY29kZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKKyMgUmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZXMgb3Bjb2RlIGNvZGUgYXBwZWFycyBpbiBwaWNrbGUuCitkZWYgY291bnRfb3Bjb2RlKGNvZGUsIHBpY2tsZSk6CisgICAgbiA9IDAKKyAgICBmb3Igb3AsIGR1bW15LCBkdW1teSBpbiBwaWNrbGV0b29scy5nZW5vcHMocGlja2xlKToKKyAgICAgICAgaWYgb3AuY29kZSA9PSBjb2RlOgorICAgICAgICAgICAgbiArPSAxCisgICAgcmV0dXJuIG4KKworIyBXZSBjYW4ndCB2ZXJ5IHdlbGwgdGVzdCB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5IHdpdGhvdXQgcHV0dGluZyBrbm93biBzdHVmZgorIyBpbiBpdCwgYnV0IHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCB0byByZXN0b3JlIGl0cyBvcmlnaW5hbCBzdGF0ZS4gIENvZGUKKyMgc2hvdWxkIGRvIHRoaXM6CisjCisjICAgICBlID0gRXh0ZW5zaW9uU2F2ZXIoZXh0ZW5zaW9uX2NvZGUpCisjICAgICB0cnk6CisjICAgICAgICAgZmlkZGxlIHcvIHRoZSBleHRlbnNpb24gcmVnaXN0cnkncyBzdHVmZiBmb3IgZXh0ZW5zaW9uX2NvZGUKKyMgICAgIGZpbmFsbHk6CisjICAgICAgICAgZS5yZXN0b3JlKCkKKworY2xhc3MgRXh0ZW5zaW9uU2F2ZXI6CisgICAgIyBSZW1lbWJlciBjdXJyZW50IHJlZ2lzdHJhdGlvbiBmb3IgY29kZSAoaWYgYW55KSwgYW5kIHJlbW92ZSBpdCAoaWYKKyAgICAjIHRoZXJlIGlzIG9uZSkuCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvZGUpOgorICAgICAgICBzZWxmLmNvZGUgPSBjb2RlCisgICAgICAgIGlmIGNvZGUgaW4gY29weV9yZWcuX2ludmVydGVkX3JlZ2lzdHJ5OgorICAgICAgICAgICAgc2VsZi5wYWlyID0gY29weV9yZWcuX2ludmVydGVkX3JlZ2lzdHJ5W2NvZGVdCisgICAgICAgICAgICBjb3B5X3JlZy5yZW1vdmVfZXh0ZW5zaW9uKHNlbGYucGFpclswXSwgc2VsZi5wYWlyWzFdLCBjb2RlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wYWlyID0gTm9uZQorCisgICAgIyBSZXN0b3JlIHByZXZpb3VzIHJlZ2lzdHJhdGlvbiBmb3IgY29kZS4KKyAgICBkZWYgcmVzdG9yZShzZWxmKToKKyAgICAgICAgY29kZSA9IHNlbGYuY29kZQorICAgICAgICBjdXJwYWlyID0gY29weV9yZWcuX2ludmVydGVkX3JlZ2lzdHJ5LmdldChjb2RlKQorICAgICAgICBpZiBjdXJwYWlyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY29weV9yZWcucmVtb3ZlX2V4dGVuc2lvbihjdXJwYWlyWzBdLCBjdXJwYWlyWzFdLCBjb2RlKQorICAgICAgICBwYWlyID0gc2VsZi5wYWlyCisgICAgICAgIGlmIHBhaXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjb3B5X3JlZy5hZGRfZXh0ZW5zaW9uKHBhaXJbMF0sIHBhaXJbMV0sIGNvZGUpCisKK2NsYXNzIEM6CisgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gY21wKHNlbGYuX19kaWN0X18sIG90aGVyLl9fZGljdF9fKQorCitpbXBvcnQgX19tYWluX18KK19fbWFpbl9fLkMgPSBDCitDLl9fbW9kdWxlX18gPSAiX19tYWluX18iCisKK2NsYXNzIG15aW50KGludCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICBzZWxmLnN0ciA9IHN0cih4KQorCitjbGFzcyBpbml0YXJnKEMpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIpOgorICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgIHNlbGYuYiA9IGIKKworICAgIGRlZiBfX2dldGluaXRhcmdzX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmEsIHNlbGYuYgorCitjbGFzcyBtZXRhY2xhc3ModHlwZSk6CisgICAgcGFzcworCitjbGFzcyB1c2VfbWV0YWNsYXNzKG9iamVjdCk6CisgICAgX19tZXRhY2xhc3NfXyA9IG1ldGFjbGFzcworCitjbGFzcyBwaWNrbGluZ19tZXRhY2xhc3ModHlwZSk6CisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAodHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKSBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLnJlZHVjZV9hcmdzID09IG90aGVyLnJlZHVjZV9hcmdzKQorCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIHJldHVybiAoY3JlYXRlX2R5bmFtaWNfY2xhc3MsIHNlbGYucmVkdWNlX2FyZ3MpCisKKyAgICBfX2hhc2hfXyA9IE5vbmUKKworZGVmIGNyZWF0ZV9keW5hbWljX2NsYXNzKG5hbWUsIGJhc2VzKToKKyAgICByZXN1bHQgPSBwaWNrbGluZ19tZXRhY2xhc3MobmFtZSwgYmFzZXMsIGRpY3QoKSkKKyAgICByZXN1bHQucmVkdWNlX2FyZ3MgPSAobmFtZSwgYmFzZXMpCisgICAgcmV0dXJuIHJlc3VsdAorCisjIERBVEEwIC4uIERBVEEyIGFyZSB0aGUgcGlja2xlcyB3ZSBleHBlY3QgdW5kZXIgdGhlIHZhcmlvdXMgcHJvdG9jb2xzLCBmb3IKKyMgdGhlIG9iamVjdCByZXR1cm5lZCBieSBjcmVhdGVfZGF0YSgpLgorCisjIGJyZWFrIGludG8gbXVsdGlwbGUgc3RyaW5ncyB0byBhdm9pZCBjb25mdXNpbmcgZm9udC1sb2NrLW1vZGUKK0RBVEEwID0gIiIiKGxwMQorSTAKK2FMMUwKK2FGMgorYWNfX2J1aWx0aW5fXworY29tcGxleAorcDIKKyIiIiArIFwKKyIiIihGMworRjAKK3RScDMKK2FJMQorYUktMQorYUkyNTUKK2FJLTI1NQorYUktMjU2CithSTY1NTM1CithSS02NTUzNQorYUktNjU1MzYKK2FJMjE0NzQ4MzY0NworYUktMjE0NzQ4MzY0NworYUktMjE0NzQ4MzY0OAorYSIiIiArIFwKKyIiIihTJ2FiYycKK3A0CitnNAorIiIiICsgXAorIiIiKGlfX21haW5fXworQworcDUKKyIiIiArIFwKKyIiIihkcDYKK1MnZm9vJworcDcKK0kxCitzUydiYXInCitwOAorSTIKK3NiZzUKK3RwOQorYWc5CithSTUKK2EuCisiIiIKKworIyBEaXNhc3NlbWJseSBvZiBEQVRBMC4KK0RBVEEwX0RJUyA9ICIiIlwKKyAgICAwOiAoICAgIE1BUksKKyAgICAxOiBsICAgICAgICBMSVNUICAgICAgIChNQVJLIGF0IDApCisgICAgMjogcCAgICBQVVQgICAgICAgIDEKKyAgICA1OiBJICAgIElOVCAgICAgICAgMAorICAgIDg6IGEgICAgQVBQRU5ECisgICAgOTogTCAgICBMT05HICAgICAgIDFMCisgICAxMzogYSAgICBBUFBFTkQKKyAgIDE0OiBGICAgIEZMT0FUICAgICAgMi4wCisgICAxNzogYSAgICBBUFBFTkQKKyAgIDE4OiBjICAgIEdMT0JBTCAgICAgJ19fYnVpbHRpbl9fIGNvbXBsZXgnCisgICAzOTogcCAgICBQVVQgICAgICAgIDIKKyAgIDQyOiAoICAgIE1BUksKKyAgIDQzOiBGICAgICAgICBGTE9BVCAgICAgIDMuMAorICAgNDY6IEYgICAgICAgIEZMT0FUICAgICAgMC4wCisgICA0OTogdCAgICAgICAgVFVQTEUgICAgICAoTUFSSyBhdCA0MikKKyAgIDUwOiBSICAgIFJFRFVDRQorICAgNTE6IHAgICAgUFVUICAgICAgICAzCisgICA1NDogYSAgICBBUFBFTkQKKyAgIDU1OiBJICAgIElOVCAgICAgICAgMQorICAgNTg6IGEgICAgQVBQRU5ECisgICA1OTogSSAgICBJTlQgICAgICAgIC0xCisgICA2MzogYSAgICBBUFBFTkQKKyAgIDY0OiBJICAgIElOVCAgICAgICAgMjU1CisgICA2OTogYSAgICBBUFBFTkQKKyAgIDcwOiBJICAgIElOVCAgICAgICAgLTI1NQorICAgNzY6IGEgICAgQVBQRU5ECisgICA3NzogSSAgICBJTlQgICAgICAgIC0yNTYKKyAgIDgzOiBhICAgIEFQUEVORAorICAgODQ6IEkgICAgSU5UICAgICAgICA2NTUzNQorICAgOTE6IGEgICAgQVBQRU5ECisgICA5MjogSSAgICBJTlQgICAgICAgIC02NTUzNQorICAxMDA6IGEgICAgQVBQRU5ECisgIDEwMTogSSAgICBJTlQgICAgICAgIC02NTUzNgorICAxMDk6IGEgICAgQVBQRU5ECisgIDExMDogSSAgICBJTlQgICAgICAgIDIxNDc0ODM2NDcKKyAgMTIyOiBhICAgIEFQUEVORAorICAxMjM6IEkgICAgSU5UICAgICAgICAtMjE0NzQ4MzY0NworICAxMzY6IGEgICAgQVBQRU5ECisgIDEzNzogSSAgICBJTlQgICAgICAgIC0yMTQ3NDgzNjQ4CisgIDE1MDogYSAgICBBUFBFTkQKKyAgMTUxOiAoICAgIE1BUksKKyAgMTUyOiBTICAgICAgICBTVFJJTkcgICAgICdhYmMnCisgIDE1OTogcCAgICAgICAgUFVUICAgICAgICA0CisgIDE2MjogZyAgICAgICAgR0VUICAgICAgICA0CisgIDE2NTogKCAgICAgICAgTUFSSworICAxNjY6IGkgICAgICAgICAgICBJTlNUICAgICAgICdfX21haW5fXyBDJyAoTUFSSyBhdCAxNjUpCisgIDE3ODogcCAgICAgICAgUFVUICAgICAgICA1CisgIDE4MTogKCAgICAgICAgTUFSSworICAxODI6IGQgICAgICAgICAgICBESUNUICAgICAgIChNQVJLIGF0IDE4MSkKKyAgMTgzOiBwICAgICAgICBQVVQgICAgICAgIDYKKyAgMTg2OiBTICAgICAgICBTVFJJTkcgICAgICdmb28nCisgIDE5MzogcCAgICAgICAgUFVUICAgICAgICA3CisgIDE5NjogSSAgICAgICAgSU5UICAgICAgICAxCisgIDE5OTogcyAgICAgICAgU0VUSVRFTQorICAyMDA6IFMgICAgICAgIFNUUklORyAgICAgJ2JhcicKKyAgMjA3OiBwICAgICAgICBQVVQgICAgICAgIDgKKyAgMjEwOiBJICAgICAgICBJTlQgICAgICAgIDIKKyAgMjEzOiBzICAgICAgICBTRVRJVEVNCisgIDIxNDogYiAgICAgICAgQlVJTEQKKyAgMjE1OiBnICAgICAgICBHRVQgICAgICAgIDUKKyAgMjE4OiB0ICAgICAgICBUVVBMRSAgICAgIChNQVJLIGF0IDE1MSkKKyAgMjE5OiBwICAgIFBVVCAgICAgICAgOQorICAyMjI6IGEgICAgQVBQRU5ECisgIDIyMzogZyAgICBHRVQgICAgICAgIDkKKyAgMjI2OiBhICAgIEFQUEVORAorICAyMjc6IEkgICAgSU5UICAgICAgICA1CisgIDIzMDogYSAgICBBUFBFTkQKKyAgMjMxOiAuICAgIFNUT1AKK2hpZ2hlc3QgcHJvdG9jb2wgYW1vbmcgb3Bjb2RlcyA9IDAKKyIiIgorCitEQVRBMSA9ICgnXXFceDAxKEtceDAwTDFMXG5HQFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCisgICAgICAgICAnY19fYnVpbHRpbl9fXG5jb21wbGV4XG5xXHgwMihHQFx4MDhceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgICdceDAwR1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwdFJxXHgwM0tceDAxSlx4ZmZceGZmJworICAgICAgICAgJ1x4ZmZceGZmS1x4ZmZKXHgwMVx4ZmZceGZmXHhmZkpceDAwXHhmZlx4ZmZceGZmTVx4ZmZceGZmJworICAgICAgICAgJ0pceDAxXHgwMFx4ZmZceGZmSlx4MDBceDAwXHhmZlx4ZmZKXHhmZlx4ZmZceGZmXHg3ZkpceDAxXHgwMCcKKyAgICAgICAgICdceDAwXHg4MEpceDAwXHgwMFx4MDBceDgwKFVceDAzYWJjcVx4MDRoXHgwNChjX19tYWluX19cbicKKyAgICAgICAgICdDXG5xXHgwNW9xXHgwNn1xXHgwNyhVXHgwM2Zvb3FceDA4S1x4MDFVXHgwM2JhcnFcdEtceDAydWJoJworICAgICAgICAgJ1x4MDZ0cVxuaFxuS1x4MDVlLicKKyAgICAgICAgKQorCisjIERpc2Fzc2VtYmx5IG9mIERBVEExLgorREFUQTFfRElTID0gIiIiXAorICAgIDA6IF0gICAgRU1QVFlfTElTVAorICAgIDE6IHEgICAgQklOUFVUICAgICAxCisgICAgMzogKCAgICBNQVJLCisgICAgNDogSyAgICAgICAgQklOSU5UMSAgICAwCisgICAgNjogTCAgICAgICAgTE9ORyAgICAgICAxTAorICAgMTA6IEcgICAgICAgIEJJTkZMT0FUICAgMi4wCisgICAxOTogYyAgICAgICAgR0xPQkFMICAgICAnX19idWlsdGluX18gY29tcGxleCcKKyAgIDQwOiBxICAgICAgICBCSU5QVVQgICAgIDIKKyAgIDQyOiAoICAgICAgICBNQVJLCisgICA0MzogRyAgICAgICAgICAgIEJJTkZMT0FUICAgMy4wCisgICA1MjogRyAgICAgICAgICAgIEJJTkZMT0FUICAgMC4wCisgICA2MTogdCAgICAgICAgICAgIFRVUExFICAgICAgKE1BUksgYXQgNDIpCisgICA2MjogUiAgICAgICAgUkVEVUNFCisgICA2MzogcSAgICAgICAgQklOUFVUICAgICAzCisgICA2NTogSyAgICAgICAgQklOSU5UMSAgICAxCisgICA2NzogSiAgICAgICAgQklOSU5UICAgICAtMQorICAgNzI6IEsgICAgICAgIEJJTklOVDEgICAgMjU1CisgICA3NDogSiAgICAgICAgQklOSU5UICAgICAtMjU1CisgICA3OTogSiAgICAgICAgQklOSU5UICAgICAtMjU2CisgICA4NDogTSAgICAgICAgQklOSU5UMiAgICA2NTUzNQorICAgODc6IEogICAgICAgIEJJTklOVCAgICAgLTY1NTM1CisgICA5MjogSiAgICAgICAgQklOSU5UICAgICAtNjU1MzYKKyAgIDk3OiBKICAgICAgICBCSU5JTlQgICAgIDIxNDc0ODM2NDcKKyAgMTAyOiBKICAgICAgICBCSU5JTlQgICAgIC0yMTQ3NDgzNjQ3CisgIDEwNzogSiAgICAgICAgQklOSU5UICAgICAtMjE0NzQ4MzY0OAorICAxMTI6ICggICAgICAgIE1BUksKKyAgMTEzOiBVICAgICAgICAgICAgU0hPUlRfQklOU1RSSU5HICdhYmMnCisgIDExODogcSAgICAgICAgICAgIEJJTlBVVCAgICAgNAorICAxMjA6IGggICAgICAgICAgICBCSU5HRVQgICAgIDQKKyAgMTIyOiAoICAgICAgICAgICAgTUFSSworICAxMjM6IGMgICAgICAgICAgICAgICAgR0xPQkFMICAgICAnX19tYWluX18gQycKKyAgMTM1OiBxICAgICAgICAgICAgICAgIEJJTlBVVCAgICAgNQorICAxMzc6IG8gICAgICAgICAgICAgICAgT0JKICAgICAgICAoTUFSSyBhdCAxMjIpCisgIDEzODogcSAgICAgICAgICAgIEJJTlBVVCAgICAgNgorICAxNDA6IH0gICAgICAgICAgICBFTVBUWV9ESUNUCisgIDE0MTogcSAgICAgICAgICAgIEJJTlBVVCAgICAgNworICAxNDM6ICggICAgICAgICAgICBNQVJLCisgIDE0NDogVSAgICAgICAgICAgICAgICBTSE9SVF9CSU5TVFJJTkcgJ2ZvbycKKyAgMTQ5OiBxICAgICAgICAgICAgICAgIEJJTlBVVCAgICAgOAorICAxNTE6IEsgICAgICAgICAgICAgICAgQklOSU5UMSAgICAxCisgIDE1MzogVSAgICAgICAgICAgICAgICBTSE9SVF9CSU5TVFJJTkcgJ2JhcicKKyAgMTU4OiBxICAgICAgICAgICAgICAgIEJJTlBVVCAgICAgOQorICAxNjA6IEsgICAgICAgICAgICAgICAgQklOSU5UMSAgICAyCisgIDE2MjogdSAgICAgICAgICAgICAgICBTRVRJVEVNUyAgIChNQVJLIGF0IDE0MykKKyAgMTYzOiBiICAgICAgICAgICAgQlVJTEQKKyAgMTY0OiBoICAgICAgICAgICAgQklOR0VUICAgICA2CisgIDE2NjogdCAgICAgICAgICAgIFRVUExFICAgICAgKE1BUksgYXQgMTEyKQorICAxNjc6IHEgICAgICAgIEJJTlBVVCAgICAgMTAKKyAgMTY5OiBoICAgICAgICBCSU5HRVQgICAgIDEwCisgIDE3MTogSyAgICAgICAgQklOSU5UMSAgICA1CisgIDE3MzogZSAgICAgICAgQVBQRU5EUyAgICAoTUFSSyBhdCAzKQorICAxNzQ6IC4gICAgU1RPUAoraGlnaGVzdCBwcm90b2NvbCBhbW9uZyBvcGNvZGVzID0gMQorIiIiCisKK0RBVEEyID0gKCdceDgwXHgwMl1xXHgwMShLXHgwMFx4OGFceDAxXHgwMUdAXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgICdjX19idWlsdGluX19cbmNvbXBsZXhcbnFceDAyR0BceDA4XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwR1x4MDAnCisgICAgICAgICAnXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ODZScVx4MDNLXHgwMUpceGZmXHhmZlx4ZmZceGZmSycKKyAgICAgICAgICdceGZmSlx4MDFceGZmXHhmZlx4ZmZKXHgwMFx4ZmZceGZmXHhmZk1ceGZmXHhmZkpceDAxXHgwMFx4ZmZceGZmJworICAgICAgICAgJ0pceDAwXHgwMFx4ZmZceGZmSlx4ZmZceGZmXHhmZlx4N2ZKXHgwMVx4MDBceDAwXHg4MEpceDAwXHgwMFx4MDAnCisgICAgICAgICAnXHg4MChVXHgwM2FiY3FceDA0aFx4MDQoY19fbWFpbl9fXG5DXG5xXHgwNW9xXHgwNn1xXHgwNyhVXHgwM2ZvbycKKyAgICAgICAgICdxXHgwOEtceDAxVVx4MDNiYXJxXHRLXHgwMnViaFx4MDZ0cVxuaFxuS1x4MDVlLicpCisKKyMgRGlzYXNzZW1ibHkgb2YgREFUQTIuCitEQVRBMl9ESVMgPSAiIiJcCisgICAgMDogXHg4MCBQUk9UTyAgICAgIDIKKyAgICAyOiBdICAgIEVNUFRZX0xJU1QKKyAgICAzOiBxICAgIEJJTlBVVCAgICAgMQorICAgIDU6ICggICAgTUFSSworICAgIDY6IEsgICAgICAgIEJJTklOVDEgICAgMAorICAgIDg6IFx4OGEgICAgIExPTkcxICAgICAgMUwKKyAgIDExOiBHICAgICAgICBCSU5GTE9BVCAgIDIuMAorICAgMjA6IGMgICAgICAgIEdMT0JBTCAgICAgJ19fYnVpbHRpbl9fIGNvbXBsZXgnCisgICA0MTogcSAgICAgICAgQklOUFVUICAgICAyCisgICA0MzogRyAgICAgICAgQklORkxPQVQgICAzLjAKKyAgIDUyOiBHICAgICAgICBCSU5GTE9BVCAgIDAuMAorICAgNjE6IFx4ODYgICAgIFRVUExFMgorICAgNjI6IFIgICAgICAgIFJFRFVDRQorICAgNjM6IHEgICAgICAgIEJJTlBVVCAgICAgMworICAgNjU6IEsgICAgICAgIEJJTklOVDEgICAgMQorICAgNjc6IEogICAgICAgIEJJTklOVCAgICAgLTEKKyAgIDcyOiBLICAgICAgICBCSU5JTlQxICAgIDI1NQorICAgNzQ6IEogICAgICAgIEJJTklOVCAgICAgLTI1NQorICAgNzk6IEogICAgICAgIEJJTklOVCAgICAgLTI1NgorICAgODQ6IE0gICAgICAgIEJJTklOVDIgICAgNjU1MzUKKyAgIDg3OiBKICAgICAgICBCSU5JTlQgICAgIC02NTUzNQorICAgOTI6IEogICAgICAgIEJJTklOVCAgICAgLTY1NTM2CisgICA5NzogSiAgICAgICAgQklOSU5UICAgICAyMTQ3NDgzNjQ3CisgIDEwMjogSiAgICAgICAgQklOSU5UICAgICAtMjE0NzQ4MzY0NworICAxMDc6IEogICAgICAgIEJJTklOVCAgICAgLTIxNDc0ODM2NDgKKyAgMTEyOiAoICAgICAgICBNQVJLCisgIDExMzogVSAgICAgICAgICAgIFNIT1JUX0JJTlNUUklORyAnYWJjJworICAxMTg6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDQKKyAgMTIwOiBoICAgICAgICAgICAgQklOR0VUICAgICA0CisgIDEyMjogKCAgICAgICAgICAgIE1BUksKKyAgMTIzOiBjICAgICAgICAgICAgICAgIEdMT0JBTCAgICAgJ19fbWFpbl9fIEMnCisgIDEzNTogcSAgICAgICAgICAgICAgICBCSU5QVVQgICAgIDUKKyAgMTM3OiBvICAgICAgICAgICAgICAgIE9CSiAgICAgICAgKE1BUksgYXQgMTIyKQorICAxMzg6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDYKKyAgMTQwOiB9ICAgICAgICAgICAgRU1QVFlfRElDVAorICAxNDE6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDcKKyAgMTQzOiAoICAgICAgICAgICAgTUFSSworICAxNDQ6IFUgICAgICAgICAgICAgICAgU0hPUlRfQklOU1RSSU5HICdmb28nCisgIDE0OTogcSAgICAgICAgICAgICAgICBCSU5QVVQgICAgIDgKKyAgMTUxOiBLICAgICAgICAgICAgICAgIEJJTklOVDEgICAgMQorICAxNTM6IFUgICAgICAgICAgICAgICAgU0hPUlRfQklOU1RSSU5HICdiYXInCisgIDE1ODogcSAgICAgICAgICAgICAgICBCSU5QVVQgICAgIDkKKyAgMTYwOiBLICAgICAgICAgICAgICAgIEJJTklOVDEgICAgMgorICAxNjI6IHUgICAgICAgICAgICAgICAgU0VUSVRFTVMgICAoTUFSSyBhdCAxNDMpCisgIDE2MzogYiAgICAgICAgICAgIEJVSUxECisgIDE2NDogaCAgICAgICAgICAgIEJJTkdFVCAgICAgNgorICAxNjY6IHQgICAgICAgICAgICBUVVBMRSAgICAgIChNQVJLIGF0IDExMikKKyAgMTY3OiBxICAgICAgICBCSU5QVVQgICAgIDEwCisgIDE2OTogaCAgICAgICAgQklOR0VUICAgICAxMAorICAxNzE6IEsgICAgICAgIEJJTklOVDEgICAgNQorICAxNzM6IGUgICAgICAgIEFQUEVORFMgICAgKE1BUksgYXQgNSkKKyAgMTc0OiAuICAgIFNUT1AKK2hpZ2hlc3QgcHJvdG9jb2wgYW1vbmcgb3Bjb2RlcyA9IDIKKyIiIgorCitkZWYgY3JlYXRlX2RhdGEoKToKKyAgICBjID0gQygpCisgICAgYy5mb28gPSAxCisgICAgYy5iYXIgPSAyCisgICAgeCA9IFswLCAxTCwgMi4wLCAzLjArMGpdCisgICAgIyBBcHBlbmQgc29tZSBpbnRlZ2VyIHRlc3QgY2FzZXMgYXQgY1BpY2tsZS5jJ3MgaW50ZXJuYWwgc2l6ZQorICAgICMgY3V0b2Zmcy4KKyAgICB1aW50MW1heCA9IDB4ZmYKKyAgICB1aW50Mm1heCA9IDB4ZmZmZgorICAgIGludDRtYXggPSAweDdmZmZmZmZmCisgICAgeC5leHRlbmQoWzEsIC0xLAorICAgICAgICAgICAgICB1aW50MW1heCwgLXVpbnQxbWF4LCAtdWludDFtYXgtMSwKKyAgICAgICAgICAgICAgdWludDJtYXgsIC11aW50Mm1heCwgLXVpbnQybWF4LTEsCisgICAgICAgICAgICAgICBpbnQ0bWF4LCAgLWludDRtYXgsICAtaW50NG1heC0xXSkKKyAgICB5ID0gKCdhYmMnLCAnYWJjJywgYywgYykKKyAgICB4LmFwcGVuZCh5KQorICAgIHguYXBwZW5kKHkpCisgICAgeC5hcHBlbmQoNSkKKyAgICByZXR1cm4geAorCitjbGFzcyBBYnN0cmFjdFBpY2tsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFN1YmNsYXNzIG11c3QgZGVmaW5lIHNlbGYuZHVtcHMsIHNlbGYubG9hZHMsIHNlbGYuZXJyb3IuCisKKyAgICBfdGVzdGRhdGEgPSBjcmVhdGVfZGF0YSgpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X21pc2Moc2VsZik6CisgICAgICAgICMgdGVzdCB2YXJpb3VzIGRhdGF0eXBlcyBub3QgdGVzdGVkIGJ5IHRlc3RkYXRhCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICB4ID0gbXlpbnQoNCkKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKworICAgICAgICAgICAgeCA9ICgxLCAoKSkKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKworICAgICAgICAgICAgeCA9IGluaXRhcmcoMSwgeCkKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKworICAgICAgICAjIFhYWCB0ZXN0IF9fcmVkdWNlX18gcHJvdG9jb2w/CisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXBfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fdGVzdGRhdGEKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGV4cGVjdGVkLCBwcm90bykKKyAgICAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKworICAgIGRlZiB0ZXN0X2xvYWRfZnJvbV9jYW5uZWRfc3RyaW5nKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IHNlbGYuX3Rlc3RkYXRhCisgICAgICAgIGZvciBjYW5uZWQgaW4gREFUQTAsIERBVEExLCBEQVRBMjoKKyAgICAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMoY2FubmVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorCisgICAgIyBUaGVyZSBhcmUgZ3JhdHVpdG91cyBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBpY2tsZXMgcHJvZHVjZWQgYnkKKyAgICAjIHBpY2tsZSBhbmQgY1BpY2tsZSwgbGFyZ2VseSBiZWNhdXNlIGNQaWNrbGUgc3RhcnRzIFBVVCBpbmRpY2VzIGF0CisgICAgIyAxIGFuZCBwaWNrbGUgc3RhcnRzIHRoZW0gYXQgMC4gIFNlZSBYWFggY29tbWVudCBpbiBjUGlja2xlJ3MgcHV0MigpIC0tCisgICAgIyB0aGVyZSdzIGEgY29tbWVudCB3aXRoIGFuIGV4Y2xhbWF0aW9uIHBvaW50IHRoZXJlIHdob3NlIG1lYW5pbmcKKyAgICAjIGlzIGEgbXlzdGVyeS4gIGNQaWNrbGUgYWxzbyBzdXBwcmVzc2VzIFBVVCBmb3Igb2JqZWN0cyB3aXRoIGEgcmVmY291bnQKKyAgICAjIG9mIDEuCisgICAgZGVmIGRvbnRfdGVzdF9kaXNhc3NlbWJseShzZWxmKToKKyAgICAgICAgZnJvbSBwaWNrbGV0b29scyBpbXBvcnQgZGlzCisKKyAgICAgICAgZm9yIHByb3RvLCBleHBlY3RlZCBpbiAoMCwgREFUQTBfRElTKSwgKDEsIERBVEExX0RJUyk6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhzZWxmLl90ZXN0ZGF0YSwgcHJvdG8pCisgICAgICAgICAgICBmaWxlbGlrZSA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICBkaXMocywgb3V0PWZpbGVsaWtlKQorICAgICAgICAgICAgZ290ID0gZmlsZWxpa2UuZ2V0dmFsdWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2xpc3Qoc2VsZik6CisgICAgICAgIGwgPSBbXQorICAgICAgICBsLmFwcGVuZChsKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMobCwgcHJvdG8pCisgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyB4WzBdKQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX3R1cGxlKHNlbGYpOgorICAgICAgICB0ID0gKFtdLCkKKyAgICAgICAgdFswXS5hcHBlbmQodCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQorICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeFswXSksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyB4WzBdWzBdKQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2RpY3Qoc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBkWzFdID0gZAorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoZCwgcHJvdG8pCisgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmtleXMoKSwgWzFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbMV0gaXMgeCkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9pbnN0KHNlbGYpOgorICAgICAgICBpID0gQygpCisgICAgICAgIGkuYXR0ciA9IGkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGksIHByb3RvKQorICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKHgpLCBkaXIoaSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHguYXR0ciwgeCkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9tdWx0aShzZWxmKToKKyAgICAgICAgbCA9IFtdCisgICAgICAgIGQgPSB7MTpsfQorICAgICAgICBpID0gQygpCisgICAgICAgIGkuYXR0ciA9IGQKKyAgICAgICAgbC5hcHBlbmQoaSkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGwsIHByb3RvKQorICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoeFswXSksIGRpcihpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFswXS5hdHRyLmtleXMoKSwgWzFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbMF0uYXR0clsxXSBpcyB4KQorCisgICAgZGVmIHRlc3RfZ2FyeXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZXJyb3IsIHNlbGYubG9hZHMsICdnYXJ5cCcpCisKKyAgICBkZWYgdGVzdF9pbnNlY3VyZV9zdHJpbmdzKHNlbGYpOgorICAgICAgICBpbnNlY3VyZSA9IFsiYWJjIiwgIjIgKyAyIiwgIyBub3QgcXVvdGVkCisgICAgICAgICAgICAgICAgICAgICMiJ2FiYycgKyAnZGVmJyIsICMgbm90IGEgc2luZ2xlIHF1b3RlZCBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgIidhYmMiLCAjIHF1b3RlIGlzIG5vdCBjbG9zZWQKKyAgICAgICAgICAgICAgICAgICAgIidhYmNcIiIsICMgb3BlbiBxdW90ZSBhbmQgY2xvc2UgcXVvdGUgZG9uJ3QgbWF0Y2gKKyAgICAgICAgICAgICAgICAgICAgIidhYmMnICAgPyIsICMganVuayBhZnRlciBjbG9zZSBxdW90ZQorICAgICAgICAgICAgICAgICAgICAiJ1xcJyIsICMgdHJhaWxpbmcgYmFja3NsYXNoCisgICAgICAgICAgICAgICAgICAgICInIiwgICAgIyBpc3N1ZSAjMTc3MTAKKyAgICAgICAgICAgICAgICAgICAgIicgIiwgICAjIGlzc3VlICMxNzcxMAorICAgICAgICAgICAgICAgICAgICAjIHNvbWUgdGVzdHMgb2YgdGhlIHF1b3RpbmcgcnVsZXMKKyAgICAgICAgICAgICAgICAgICAgIyInYWJjXCJcJyciLAorICAgICAgICAgICAgICAgICAgICAjIidcXFxcYVwnXCdcJ1xcXCdcXFxcXCcnIiwKKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICBmb3IgcyBpbiBpbnNlY3VyZToKKyAgICAgICAgICAgIGJ1ZiA9ICJTIiArIHMgKyAiXDAxMnAwXDAxMi4iCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvYWRzLCBidWYpCisKKyAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisgICAgICAgICAgICBlbmRjYXNlcyA9IFt1JycsIHUnPFxcdT4nLCB1JzxcXFx1MTIzND4nLCB1Jzxcbj4nLAorICAgICAgICAgICAgICAgICAgICAgICAgdSc8XFw+JywgdSc8XFxcVTAwMDEyMzQ1PiddCisgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgICAgIGZvciB1IGluIGVuZGNhc2VzOgorICAgICAgICAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyh1LCBwcm90bykKKyAgICAgICAgICAgICAgICAgICAgdTIgPSBzZWxmLmxvYWRzKHApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIsIHUpCisKKyAgICAgICAgZGVmIHRlc3RfdW5pY29kZV9oaWdoX3BsYW5lKHNlbGYpOgorICAgICAgICAgICAgdCA9IHUnXFUwMDAxMjM0NScKKyAgICAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHModCwgcHJvdG8pCisgICAgICAgICAgICAgICAgdDIgPSBzZWxmLmxvYWRzKHApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MiwgdCkKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIG4gPSBzeXMubWF4aW50CisgICAgICAgICAgICB3aGlsZSBuOgorICAgICAgICAgICAgICAgIGZvciBleHBlY3RlZCBpbiAoLW4sIG4pOgorICAgICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhleHBlY3RlZCwgcHJvdG8pCisgICAgICAgICAgICAgICAgICAgIG4yID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBuMikKKyAgICAgICAgICAgICAgICBuID0gbiA+PiAxCisKKyAgICBkZWYgdGVzdF9tYXhpbnQ2NChzZWxmKToKKyAgICAgICAgbWF4aW50NjQgPSAoMUwgPDwgNjMpIC0gMQorICAgICAgICBkYXRhID0gJ0knICsgc3RyKG1heGludDY0KSArICdcbi4nCisgICAgICAgIGdvdCA9IHNlbGYubG9hZHMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIG1heGludDY0KQorCisgICAgICAgICMgVHJ5IHRvbyB3aXRoIGEgYm9ndXMgbGl0ZXJhbC4KKyAgICAgICAgZGF0YSA9ICdJJyArIHN0cihtYXhpbnQ2NCkgKyAnSlVOS1xuLicKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb2FkcywgZGF0YSkKKworICAgIGRlZiB0ZXN0X2xvbmcoc2VsZik6CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICAjIDI1NiBieXRlcyBpcyB3aGVyZSBMT05HNCBiZWdpbnMuCisgICAgICAgICAgICBmb3IgbmJpdHMgaW4gMSwgOCwgOCoyNTQsIDgqMjU1LCA4KjI1NiwgOCoyNTc6CisgICAgICAgICAgICAgICAgbmJhc2UgPSAxTCA8PCBuYml0cworICAgICAgICAgICAgICAgIGZvciBucG9zIGluIG5iYXNlLTEsIG5iYXNlLCBuYmFzZSsxOgorICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiBucG9zLCAtbnBvczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZSA9IHNlbGYuZHVtcHMobiwgcHJvdG8pCisgICAgICAgICAgICAgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHBpY2tsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgZ290KQorICAgICAgICAjIFRyeSBhIG1vbnN0ZXIuICBUaGlzIGlzIHF1YWRyYXRpYy10aW1lIGluIHByb3RvcyAwICYgMSwgc28gZG9uJ3QKKyAgICAgICAgIyBib3RoZXIgd2l0aCB0aG9zZS4KKyAgICAgICAgbmJhc2UgPSBsb25nKCJkZWFkYmVlZmZlZWRmYWNlIiwgMTYpCisgICAgICAgIG5iYXNlICs9IG5iYXNlIDw8IDEwMDAwMDAKKyAgICAgICAgZm9yIG4gaW4gbmJhc2UsIC1uYmFzZToKKyAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKG4sIDIpCisgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIGdvdCkKKworICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgorICAgICAgICB0ZXN0X3ZhbHVlcyA9IFswLjAsIDQuOTRlLTMyNCwgMWUtMzEwLCA3ZS0zMDgsIDYuNjI2ZS0zNCwgMC4xLCAwLjUsCisgICAgICAgICAgICAgICAgICAgICAgIDMuMTQsIDI2My40NDU4MjA2MjM3NDA1MywgNi4wMjJlMjMsIDFlMzBdCisgICAgICAgIHRlc3RfdmFsdWVzID0gdGVzdF92YWx1ZXMgKyBbLXggZm9yIHggaW4gdGVzdF92YWx1ZXNdCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gdGVzdF92YWx1ZXM6CisgICAgICAgICAgICAgICAgcGlja2xlID0gc2VsZi5kdW1wcyh2YWx1ZSwgcHJvdG8pCisgICAgICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhwaWNrbGUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgZ290KQorCisgICAgQHJ1bl93aXRoX2xvY2FsZSgnTENfQUxMJywgJ2RlX0RFJywgJ2ZyX0ZSJykKKyAgICBkZWYgdGVzdF9mbG9hdF9mb3JtYXQoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgZmxvYXRzIGFyZSBmb3JtYXR0ZWQgbG9jYWxlIGluZGVwZW5kZW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcygxLjIpWzA6M10sICdGMS4nKQorCisgICAgZGVmIHRlc3RfcmVkdWNlKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9nZXRpbml0YXJncyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfbWV0YWNsYXNzKHNlbGYpOgorICAgICAgICBhID0gdXNlX21ldGFjbGFzcygpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhhLCBwcm90bykKKyAgICAgICAgICAgIGIgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19jbGFzc19fLCBiLl9fY2xhc3NfXykKKworICAgIGRlZiB0ZXN0X2R5bmFtaWNfY2xhc3Moc2VsZik6CisgICAgICAgIGEgPSBjcmVhdGVfZHluYW1pY19jbGFzcygibXlfZHluYW1pY19jbGFzcyIsIChvYmplY3QsKSkKKyAgICAgICAgY29weV9yZWcucGlja2xlKHBpY2tsaW5nX21ldGFjbGFzcywgcGlja2xpbmdfbWV0YWNsYXNzLl9fcmVkdWNlX18pCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhhLCBwcm90bykKKyAgICAgICAgICAgIGIgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisKKyAgICBkZWYgdGVzdF9zdHJ1Y3RzZXEoc2VsZik6CisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIGltcG9ydCBvcworCisgICAgICAgIHQgPSB0aW1lLmxvY2FsdGltZSgpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh0LCBwcm90bykKKyAgICAgICAgICAgIHUgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHUpCisgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3RhdCIpOgorICAgICAgICAgICAgICAgIHQgPSBvcy5zdGF0KG9zLmN1cmRpcikKKyAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh0LCBwcm90bykKKyAgICAgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdSkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICJzdGF0dmZzIik6CisgICAgICAgICAgICAgICAgdCA9IG9zLnN0YXR2ZnMob3MuY3VyZGlyKQorICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQorICAgICAgICAgICAgICAgIHUgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCB1KQorCisgICAgIyBUZXN0cyBmb3IgcHJvdG9jb2wgMgorCisgICAgZGVmIHRlc3RfcHJvdG8oc2VsZik6CisgICAgICAgIGJ1aWxkX25vbmUgPSBwaWNrbGUuTk9ORSArIHBpY2tsZS5TVE9QCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBleHBlY3RlZCA9IGJ1aWxkX25vbmUKKyAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBwaWNrbGUuUFJPVE8gKyBjaHIocHJvdG8pICsgZXhwZWN0ZWQKKyAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKE5vbmUsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBleHBlY3RlZCkKKworICAgICAgICBvb2IgPSBwcm90b2NvbHNbLTFdICsgMSAgICAgIyBhIGZ1dHVyZSBwcm90b2NvbAorICAgICAgICBiYWRwaWNrbGUgPSBwaWNrbGUuUFJPVE8gKyBjaHIob29iKSArIGJ1aWxkX25vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5sb2FkcyhiYWRwaWNrbGUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBkZXRhaWw6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKGRldGFpbCkuc3RhcnRzd2l0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIHBpY2tsZSBwcm90b2NvbCIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBiYWQgcHJvdG9jb2wgbnVtYmVyIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQorCisgICAgZGVmIHRlc3RfbG9uZzEoc2VsZik6CisgICAgICAgIHggPSAxMjM0NTY3ODkxMDExMTIxMzE0MTUxNjE3ODkyMEwKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTE9ORzEsIHMpLCBwcm90byA+PSAyKQorCisgICAgZGVmIHRlc3RfbG9uZzQoc2VsZik6CisgICAgICAgIHggPSAxMjM0NTY3ODkxMDExMTIxMzE0MTUxNjE3ODkyMEwgPDwgKDI1Nio4KQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5MT05HNCwgcyksIHByb3RvID49IDIpCisKKyAgICBkZWYgdGVzdF9zaG9ydF90dXBsZXMoc2VsZik6CisgICAgICAgICMgTWFwIChwcm90bywgbGVuKHR1cGxlKSkgdG8gZXhwZWN0ZWQgb3Bjb2RlLgorICAgICAgICBleHBlY3RlZF9vcGNvZGUgPSB7KDAsIDApOiBwaWNrbGUuVFVQTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgMSk6IHBpY2tsZS5UVVBMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCAyKTogcGlja2xlLlRVUExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIDMpOiBwaWNrbGUuVFVQTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgNCk6IHBpY2tsZS5UVVBMRSwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIDApOiBwaWNrbGUuRU1QVFlfVFVQTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgMSk6IHBpY2tsZS5UVVBMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAyKTogcGlja2xlLlRVUExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIDMpOiBwaWNrbGUuVFVQTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgNCk6IHBpY2tsZS5UVVBMRSwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsIDApOiBwaWNrbGUuRU1QVFlfVFVQTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgMSk6IHBpY2tsZS5UVVBMRTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgMik6IHBpY2tsZS5UVVBMRTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgMyk6IHBpY2tsZS5UVVBMRTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgNCk6IHBpY2tsZS5UVVBMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICBhID0gKCkKKyAgICAgICAgYiA9ICgxLCkKKyAgICAgICAgYyA9ICgxLCAyKQorICAgICAgICBkID0gKDEsIDIsIDMpCisgICAgICAgIGUgPSAoMSwgMiwgMywgNCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGZvciB4IGluIGEsIGIsIGMsIGQsIGU6CisgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHksIChwcm90bywgeCwgcywgeSkpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZF9vcGNvZGVbcHJvdG8sIGxlbih4KV0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUoZXhwZWN0ZWQsIHMpLCBUcnVlKQorCisgICAgZGVmIHRlc3Rfc2luZ2xldG9ucyhzZWxmKToKKyAgICAgICAgIyBNYXAgKHByb3RvLCBzaW5nbGV0b24pIHRvIGV4cGVjdGVkIG9wY29kZS4KKyAgICAgICAgZXhwZWN0ZWRfb3Bjb2RlID0geygwLCBOb25lKTogcGlja2xlLk5PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgTm9uZSk6IHBpY2tsZS5OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsIE5vbmUpOiBwaWNrbGUuTk9ORSwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIFRydWUpOiBwaWNrbGUuSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIFRydWUpOiBwaWNrbGUuSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsIFRydWUpOiBwaWNrbGUuTkVXVFJVRSwKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIEZhbHNlKTogcGlja2xlLklOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCBGYWxzZSk6IHBpY2tsZS5JTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgRmFsc2UpOiBwaWNrbGUuTkVXRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGZvciB4IGluIE5vbmUsIEZhbHNlLCBUcnVlOgorICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgeSwgKHByb3RvLCB4LCBzLCB5KSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkX29wY29kZVtwcm90bywgeF0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUoZXhwZWN0ZWQsIHMpLCBUcnVlKQorCisgICAgZGVmIHRlc3RfbmV3b2JqX3R1cGxlKHNlbGYpOgorICAgICAgICB4ID0gTXlUdXBsZShbMSwgMiwgM10pCisgICAgICAgIHguZm9vID0gNDIKKyAgICAgICAgeC5iYXIgPSAiaGVsbG8iCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKHgpLCB0dXBsZSh5KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKKworICAgIGRlZiB0ZXN0X25ld29ial9saXN0KHNlbGYpOgorICAgICAgICB4ID0gTXlMaXN0KFsxLCAyLCAzXSkKKyAgICAgICAgeC5mb28gPSA0MgorICAgICAgICB4LmJhciA9ICJoZWxsbyIKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4KSwgbGlzdCh5KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKKworICAgIGRlZiB0ZXN0X25ld29ial9nZW5lcmljKHNlbGYpOgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgZm9yIEMgaW4gbXljbGFzc2VzOgorICAgICAgICAgICAgICAgIEIgPSBDLl9fYmFzZV9fCisgICAgICAgICAgICAgICAgeCA9IEMoQy5zYW1wbGUpCisgICAgICAgICAgICAgICAgeC5mb28gPSA0MgorICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICAgICAgZGV0YWlsID0gKHByb3RvLCBDLCBCLCB4LCB5LCB0eXBlKHkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQih4KSwgQih5KSwgZGV0YWlsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXywgZGV0YWlsKQorCisgICAgIyBSZWdpc3RlciBhIHR5cGUgd2l0aCBjb3B5X3JlZywgd2l0aCBleHRlbnNpb24gY29kZSBleHRjb2RlLiAgUGlja2xlCisgICAgIyBhbiBvYmplY3Qgb2YgdGhhdCB0eXBlLiAgQ2hlY2sgdGhhdCB0aGUgcmVzdWx0aW5nIHBpY2tsZSB1c2VzIG9wY29kZQorICAgICMgKEVYVFsxMjRdKSB1bmRlciBwcm90byAyLCBhbmQgbm90IGluIHByb3RvIDEuCisKKyAgICBkZWYgcHJvZHVjZV9nbG9iYWxfZXh0KHNlbGYsIGV4dGNvZGUsIG9wY29kZSk6CisgICAgICAgIGUgPSBFeHRlbnNpb25TYXZlcihleHRjb2RlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb3B5X3JlZy5hZGRfZXh0ZW5zaW9uKF9fbmFtZV9fLCAiTXlMaXN0IiwgZXh0Y29kZSkKKyAgICAgICAgICAgIHggPSBNeUxpc3QoWzEsIDIsIDNdKQorICAgICAgICAgICAgeC5mb28gPSA0MgorICAgICAgICAgICAgeC5iYXIgPSAiaGVsbG8iCisKKyAgICAgICAgICAgICMgRHVtcCB1c2luZyBwcm90b2NvbCAxIGZvciBjb21wYXJpc29uLgorICAgICAgICAgICAgczEgPSBzZWxmLmR1bXBzKHgsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKF9fbmFtZV9fLCBzMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIk15TGlzdCIsIHMxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKG9wY29kZSwgczEpLCBGYWxzZSkKKworICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMoczEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisKKyAgICAgICAgICAgICMgRHVtcCB1c2luZyBwcm90b2NvbCAyIGZvciB0ZXN0LgorICAgICAgICAgICAgczIgPSBzZWxmLmR1bXBzKHgsIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKF9fbmFtZV9fLCBzMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIk15TGlzdCIsIHMyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKG9wY29kZSwgczIpLCBUcnVlKQorCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4KSwgbGlzdCh5KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZS5yZXN0b3JlKCkKKworICAgIGRlZiB0ZXN0X2dsb2JhbF9leHQxKHNlbGYpOgorICAgICAgICBzZWxmLnByb2R1Y2VfZ2xvYmFsX2V4dCgweDAwMDAwMDAxLCBwaWNrbGUuRVhUMSkgICMgc21hbGxlc3QgRVhUMSBjb2RlCisgICAgICAgIHNlbGYucHJvZHVjZV9nbG9iYWxfZXh0KDB4MDAwMDAwZmYsIHBpY2tsZS5FWFQxKSAgIyBsYXJnZXN0IEVYVDEgY29kZQorCisgICAgZGVmIHRlc3RfZ2xvYmFsX2V4dDIoc2VsZik6CisgICAgICAgIHNlbGYucHJvZHVjZV9nbG9iYWxfZXh0KDB4MDAwMDAxMDAsIHBpY2tsZS5FWFQyKSAgIyBzbWFsbGVzdCBFWFQyIGNvZGUKKyAgICAgICAgc2VsZi5wcm9kdWNlX2dsb2JhbF9leHQoMHgwMDAwZmZmZiwgcGlja2xlLkVYVDIpICAjIGxhcmdlc3QgRVhUMiBjb2RlCisgICAgICAgIHNlbGYucHJvZHVjZV9nbG9iYWxfZXh0KDB4MDAwMGFiY2QsIHBpY2tsZS5FWFQyKSAgIyBjaGVjayBlbmRpYW5uZXNzCisKKyAgICBkZWYgdGVzdF9nbG9iYWxfZXh0NChzZWxmKToKKyAgICAgICAgc2VsZi5wcm9kdWNlX2dsb2JhbF9leHQoMHgwMDAxMDAwMCwgcGlja2xlLkVYVDQpICAjIHNtYWxsZXN0IEVYVDQgY29kZQorICAgICAgICBzZWxmLnByb2R1Y2VfZ2xvYmFsX2V4dCgweDdmZmZmZmZmLCBwaWNrbGUuRVhUNCkgICMgbGFyZ2VzdCBFWFQ0IGNvZGUKKyAgICAgICAgc2VsZi5wcm9kdWNlX2dsb2JhbF9leHQoMHgxMmFiY2RlZiwgcGlja2xlLkVYVDQpICAjIGNoZWNrIGVuZGlhbm5lc3MKKworICAgIGRlZiB0ZXN0X2xpc3RfY2h1bmtpbmcoc2VsZik6CisgICAgICAgIG4gPSAxMCAgIyB0b28gc21hbGwgdG8gY2h1bmsKKyAgICAgICAgeCA9IHJhbmdlKG4pCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBudW1fYXBwZW5kcyA9IGNvdW50X29wY29kZShwaWNrbGUuQVBQRU5EUywgcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2FwcGVuZHMsIHByb3RvID4gMCkKKworICAgICAgICBuID0gMjUwMCAgIyBleHBlY3QgYXQgbGVhc3QgdHdvIGNodW5rcyB3aGVuIHByb3RvID4gMAorICAgICAgICB4ID0gcmFuZ2UobikKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIG51bV9hcHBlbmRzID0gY291bnRfb3Bjb2RlKHBpY2tsZS5BUFBFTkRTLCBzKQorICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hcHBlbmRzLCAwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnVtX2FwcGVuZHMgPj0gMikKKworICAgIGRlZiB0ZXN0X2RpY3RfY2h1bmtpbmcoc2VsZik6CisgICAgICAgIG4gPSAxMCAgIyB0b28gc21hbGwgdG8gY2h1bmsKKyAgICAgICAgeCA9IGRpY3QuZnJvbWtleXMocmFuZ2UobikpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBudW1fc2V0aXRlbXMgPSBjb3VudF9vcGNvZGUocGlja2xlLlNFVElURU1TLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fc2V0aXRlbXMsIHByb3RvID4gMCkKKworICAgICAgICBuID0gMjUwMCAgIyBleHBlY3QgYXQgbGVhc3QgdHdvIGNodW5rcyB3aGVuIHByb3RvID4gMAorICAgICAgICB4ID0gZGljdC5mcm9ta2V5cyhyYW5nZShuKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIG51bV9zZXRpdGVtcyA9IGNvdW50X29wY29kZShwaWNrbGUuU0VUSVRFTVMsIHMpCisgICAgICAgICAgICBpZiBwcm90byA9PSAwOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX3NldGl0ZW1zLCAwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnVtX3NldGl0ZW1zID49IDIpCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfbmV3b2JqKHNlbGYpOgorICAgICAgICB4ID0gb2JqZWN0Ll9fbmV3X18oU2ltcGxlTmV3T2JqKSAgIyBhdm9pZCBfX2luaXRfXworICAgICAgICB4LmFiYyA9IDY2NgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUocGlja2xlLk5FV09CSiwgcyksIHByb3RvID49IDIpCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKSAgICMgd2lsbCByYWlzZSBUeXBlRXJyb3IgaWYgX19pbml0X18gY2FsbGVkCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYWJjLCA2NjYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisKKyAgICBkZWYgdGVzdF9uZXdvYmpfbGlzdF9zbG90cyhzZWxmKToKKyAgICAgICAgeCA9IFNsb3RMaXN0KFsxLCAyLCAzXSkKKyAgICAgICAgeC5mb28gPSA0MgorICAgICAgICB4LmJhciA9ICJoZWxsbyIKKyAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgMikKKyAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHgpLCBsaXN0KHkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5mb28sIHkuZm9vKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYmFyLCB5LmJhcikKKworICAgIGRlZiB0ZXN0X3JlZHVjZV9vdmVycmlkZXNfZGVmYXVsdF9yZWR1Y2VfZXgoc2VsZik6CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICB4ID0gUkVYX29uZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX3JlZHVjZV9jYWxsZWQsIDApCisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fcmVkdWNlX2NhbGxlZCwgMSkKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX3JlZHVjZV9jYWxsZWQsIDApCisKKyAgICBkZWYgdGVzdF9yZWR1Y2VfZXhfY2FsbGVkKHNlbGYpOgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgeCA9IFJFWF90d28oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9wcm90bywgTm9uZSkKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9wcm90bywgcHJvdG8pCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9wcm90bywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3JlZHVjZV9leF9vdmVycmlkZXNfcmVkdWNlKHNlbGYpOgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgeCA9IFJFWF90aHJlZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX3Byb3RvLCBOb25lKQorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX3Byb3RvLCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX3Byb3RvLCBOb25lKQorCisgICAgZGVmIHRlc3RfcmVkdWNlX2V4X2NhbGxzX2Jhc2Uoc2VsZik6CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICB4ID0gUkVYX2ZvdXIoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9wcm90bywgTm9uZSkKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9wcm90bywgcHJvdG8pCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9wcm90bywgcHJvdG8pCisKKyAgICBkZWYgdGVzdF9yZWR1Y2VfY2FsbHNfYmFzZShzZWxmKToKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHggPSBSRVhfZml2ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX3JlZHVjZV9jYWxsZWQsIDApCisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fcmVkdWNlX2NhbGxlZCwgMSkKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX3JlZHVjZV9jYWxsZWQsIDEpCisKKyAgICBkZWYgdGVzdF9yZWR1Y2VfYmFkX2l0ZXJhdG9yKHNlbGYpOgorICAgICAgICAjIElzc3VlNDE3NjogY3Jhc2ggd2hlbiA0dGggYW5kIDV0aCBpdGVtcyBvZiBfX3JlZHVjZV9fKCkKKyAgICAgICAgIyBhcmUgbm90IGl0ZXJhdG9ycworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIDR0aCBpdGVtIGlzIG5vdCBhbiBpdGVyYXRvcgorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0LCAoKSwgTm9uZSwgW10sIE5vbmUKKyAgICAgICAgY2xhc3MgRChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyA1dGggaXRlbSBpcyBub3QgYW4gaXRlcmF0b3IKKyAgICAgICAgICAgICAgICByZXR1cm4gZGljdCwgKCksIE5vbmUsIE5vbmUsIFtdCisKKyAgICAgICAgIyBQcm90b2NvbCAwIGlzIGxlc3Mgc3RyaWN0IGFuZCBhbHNvIGFjY2VwdCBpdGVyYWJsZXMuCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhDKCksIHByb3RvKQorICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgcGlja2xlLlBpY2tsZUVycm9yLCBjUGlja2xlLlBpY2tsZUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhEKCksIHByb3RvKQorICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgcGlja2xlLlBpY2tsZUVycm9yLCBjUGlja2xlLlBpY2tsZUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9tYW55X3B1dHNfYW5kX2dldHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBjb3JyZWN0bHkgZGVhbCB3aXRoIGxvdHMgb2YKKyAgICAgICAgIyBwdXRzL2dldHMuCisgICAgICAgIGtleXMgPSAoImFhYSIgKyBzdHIoaSkgZm9yIGkgaW4geHJhbmdlKDEwMCkpCisgICAgICAgIGxhcmdlX2RpY3QgPSBkaWN0KChrLCBbNCwgNSwgNl0pIGZvciBrIGluIGtleXMpCisgICAgICAgIG9iaiA9IFtkaWN0KGxhcmdlX2RpY3QpLCBkaWN0KGxhcmdlX2RpY3QpLCBkaWN0KGxhcmdlX2RpY3QpXQorCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBkdW1wZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLCBvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgcHJvdG9jb2wgJWQ6ICVyICE9ICVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwcm90bywgb2JqLCBsb2FkZWQpKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX25hbWVfaW50ZXJuaW5nKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhdHRyaWJ1dGUgbmFtZXMgb2YgcGlja2xlZCBvYmplY3RzIGFyZSBpbnRlcm5lZCB3aGVuCisgICAgICAgICMgdW5waWNrbGluZy4KKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHggPSBDKCkKKyAgICAgICAgICAgIHguZm9vID0gNDIKKyAgICAgICAgICAgIHguYmFyID0gImhlbGxvIgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgeF9rZXlzID0gc29ydGVkKHguX19kaWN0X18pCisgICAgICAgICAgICB5X2tleXMgPSBzb3J0ZWQoeS5fX2RpY3RfXykKKyAgICAgICAgICAgIGZvciB4X2tleSwgeV9rZXkgaW4gemlwKHhfa2V5cywgeV9rZXlzKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHhfa2V5LCB5X2tleSkKKworCisjIFRlc3QgY2xhc3NlcyBmb3IgcmVkdWNlX2V4CisKK2NsYXNzIFJFWF9vbmUob2JqZWN0KToKKyAgICBfcmVkdWNlX2NhbGxlZCA9IDAKKyAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fcmVkdWNlX2NhbGxlZCA9IDEKKyAgICAgICAgcmV0dXJuIFJFWF9vbmUsICgpCisgICAgIyBObyBfX3JlZHVjZV9leF9fIGhlcmUsIGJ1dCBpbmhlcml0aW5nIGl0IGZyb20gb2JqZWN0CisKK2NsYXNzIFJFWF90d28ob2JqZWN0KToKKyAgICBfcHJvdG8gPSBOb25lCisgICAgZGVmIF9fcmVkdWNlX2V4X18oc2VsZiwgcHJvdG8pOgorICAgICAgICBzZWxmLl9wcm90byA9IHByb3RvCisgICAgICAgIHJldHVybiBSRVhfdHdvLCAoKQorICAgICMgTm8gX19yZWR1Y2VfXyBoZXJlLCBidXQgaW5oZXJpdGluZyBpdCBmcm9tIG9iamVjdAorCitjbGFzcyBSRVhfdGhyZWUob2JqZWN0KToKKyAgICBfcHJvdG8gPSBOb25lCisgICAgZGVmIF9fcmVkdWNlX2V4X18oc2VsZiwgcHJvdG8pOgorICAgICAgICBzZWxmLl9wcm90byA9IHByb3RvCisgICAgICAgIHJldHVybiBSRVhfdHdvLCAoKQorICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICByYWlzZSBUZXN0RmFpbGVkLCAiVGhpcyBfX3JlZHVjZV9fIHNob3VsZG4ndCBiZSBjYWxsZWQiCisKK2NsYXNzIFJFWF9mb3VyKG9iamVjdCk6CisgICAgX3Byb3RvID0gTm9uZQorICAgIGRlZiBfX3JlZHVjZV9leF9fKHNlbGYsIHByb3RvKToKKyAgICAgICAgc2VsZi5fcHJvdG8gPSBwcm90bworICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcmVkdWNlX2V4X18oc2VsZiwgcHJvdG8pCisgICAgIyBDYWxsaW5nIGJhc2UgY2xhc3MgbWV0aG9kIHNob3VsZCBzdWNjZWVkCisKK2NsYXNzIFJFWF9maXZlKG9iamVjdCk6CisgICAgX3JlZHVjZV9jYWxsZWQgPSAwCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIHNlbGYuX3JlZHVjZV9jYWxsZWQgPSAxCisgICAgICAgIHJldHVybiBvYmplY3QuX19yZWR1Y2VfXyhzZWxmKQorICAgICMgVGhpcyBvbmUgdXNlZCB0byBmYWlsIHdpdGggaW5maW5pdGUgcmVjdXJzaW9uCisKKyMgVGVzdCBjbGFzc2VzIGZvciBuZXdvYmoKKworY2xhc3MgTXlJbnQoaW50KToKKyAgICBzYW1wbGUgPSAxCisKK2NsYXNzIE15TG9uZyhsb25nKToKKyAgICBzYW1wbGUgPSAxTAorCitjbGFzcyBNeUZsb2F0KGZsb2F0KToKKyAgICBzYW1wbGUgPSAxLjAKKworY2xhc3MgTXlDb21wbGV4KGNvbXBsZXgpOgorICAgIHNhbXBsZSA9IDEuMCArIDAuMGoKKworY2xhc3MgTXlTdHIoc3RyKToKKyAgICBzYW1wbGUgPSAiaGVsbG8iCisKK2NsYXNzIE15VW5pY29kZSh1bmljb2RlKToKKyAgICBzYW1wbGUgPSB1ImhlbGxvIFx1MTIzNCIKKworY2xhc3MgTXlUdXBsZSh0dXBsZSk6CisgICAgc2FtcGxlID0gKDEsIDIsIDMpCisKK2NsYXNzIE15TGlzdChsaXN0KToKKyAgICBzYW1wbGUgPSBbMSwgMiwgM10KKworY2xhc3MgTXlEaWN0KGRpY3QpOgorICAgIHNhbXBsZSA9IHsiYSI6IDEsICJiIjogMn0KKworbXljbGFzc2VzID0gW015SW50LCBNeUxvbmcsIE15RmxvYXQsCisgICAgICAgICAgICAgTXlDb21wbGV4LAorICAgICAgICAgICAgIE15U3RyLCBNeVVuaWNvZGUsCisgICAgICAgICAgICAgTXlUdXBsZSwgTXlMaXN0LCBNeURpY3RdCisKKworY2xhc3MgU2xvdExpc3QoTXlMaXN0KToKKyAgICBfX3Nsb3RzX18gPSBbImZvbyJdCisKK2NsYXNzIFNpbXBsZU5ld09iaihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiLCBjKToKKyAgICAgICAgIyByYWlzZSBhbiBlcnJvciwgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QgY2FsbGVkCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiU2ltcGxlTmV3T2JqLl9faW5pdF9fKCkgZGlkbid0IGV4cGVjdCB0byBnZXQgY2FsbGVkIikKKworY2xhc3MgQWJzdHJhY3RQaWNrbGVNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kdW1wX2Nsb3NlZF9maWxlKHNlbGYpOgorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5tb2R1bGUuZHVtcCwgMTIzLCBmKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKKworICAgIGRlZiB0ZXN0X2xvYWRfY2xvc2VkX2ZpbGUoc2VsZik6CisgICAgICAgIGltcG9ydCBvcworICAgICAgICBmID0gb3BlbihURVNURk4sICJ3IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLm1vZHVsZS5kdW1wLCAxMjMsIGYpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQorCisgICAgZGVmIHRlc3RfbG9hZF9mcm9tX2FuZF9kdW1wX3RvX2ZpbGUoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGRhdGEgPSBbMTIzLCB7fSwgMTI0XQorICAgICAgICBzZWxmLm1vZHVsZS5kdW1wKGRhdGEsIHN0cmVhbSkKKyAgICAgICAgc3RyZWFtLnNlZWsoMCkKKyAgICAgICAgdW5waWNrbGVkID0gc2VsZi5tb2R1bGUubG9hZChzdHJlYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVkLCBkYXRhKQorCisgICAgZGVmIHRlc3RfaGlnaGVzdF9wcm90b2NvbChzZWxmKToKKyAgICAgICAgIyBPZiBjb3Vyc2UgdGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHdoZW4gSElHSEVTVF9QUk9UT0NPTCBjaGFuZ2VzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubW9kdWxlLkhJR0hFU1RfUFJPVE9DT0wsIDIpCisKKyAgICBkZWYgdGVzdF9jYWxsYXBpKHNlbGYpOgorICAgICAgICBmID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgIyBXaXRoIGFuZCB3aXRob3V0IGtleXdvcmQgYXJndW1lbnRzCisgICAgICAgIHNlbGYubW9kdWxlLmR1bXAoMTIzLCBmLCAtMSkKKyAgICAgICAgc2VsZi5tb2R1bGUuZHVtcCgxMjMsIGZpbGU9ZiwgcHJvdG9jb2w9LTEpCisgICAgICAgIHNlbGYubW9kdWxlLmR1bXBzKDEyMywgLTEpCisgICAgICAgIHNlbGYubW9kdWxlLmR1bXBzKDEyMywgcHJvdG9jb2w9LTEpCisgICAgICAgIHNlbGYubW9kdWxlLlBpY2tsZXIoZiwgLTEpCisgICAgICAgIHNlbGYubW9kdWxlLlBpY2tsZXIoZiwgcHJvdG9jb2w9LTEpCisKKyAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX2lucHV0KHNlbGYpOgorICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oIlgnJy4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgc2VsZi5tb2R1bGUubG9hZCwgcykKKworICAgIGRlZiB0ZXN0X3Jlc3RyaWN0ZWQoc2VsZik6CisgICAgICAgICMgaXNzdWU3MTI4OiBjUGlja2xlIGZhaWxlZCBpbiByZXN0cmljdGVkIG1vZGUKKyAgICAgICAgYnVpbHRpbnMgPSB7c2VsZi5tb2R1bGUuX19uYW1lX186IHNlbGYubW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAnX19pbXBvcnRfXyc6IF9faW1wb3J0X199CisgICAgICAgIGQgPSB7fQorICAgICAgICB0ZXN0c3RyID0gImRlZiBmKCk6IHswfS5kdW1wcygwKSIuZm9ybWF0KHNlbGYubW9kdWxlLl9fbmFtZV9fKQorICAgICAgICBleGVjIHRlc3RzdHIgaW4geydfX2J1aWx0aW5zX18nOiBidWlsdGluc30sIGQKKyAgICAgICAgZFsnZiddKCkKKworICAgIGRlZiB0ZXN0X2JhZF9pbnB1dChzZWxmKToKKyAgICAgICAgIyBUZXN0IGlzc3VlNDI5OAorICAgICAgICBzID0gJ1x4NThcMFwwXDBceDU0JworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgc2VsZi5tb2R1bGUubG9hZHMsIHMpCisgICAgICAgICMgVGVzdCBpc3N1ZTc0NTUKKyAgICAgICAgcyA9ICcwJworICAgICAgICAjIFhYWCBXaHkgZG9lc24ndCBwaWNrbGUgcmFpc2UgVW5waWNrbGluZ0Vycm9yPworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoSW5kZXhFcnJvciwgY1BpY2tsZS5VbnBpY2tsaW5nRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5sb2FkcywgcykKKworY2xhc3MgQWJzdHJhY3RQZXJzaXN0ZW50UGlja2xlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgVGhpcyBjbGFzcyBkZWZpbmVzIHBlcnNpc3RlbnRfaWQoKSBhbmQgcGVyc2lzdGVudF9sb2FkKCkKKyAgICAjIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBwaWNrbGVyLiAgQWxsIGV2ZW4gaW50ZWdlcnMKKyAgICAjIGFyZSBwaWNrbGVkIHVzaW5nIHBlcnNpc3RlbnQgaWRzLgorCisgICAgZGVmIHBlcnNpc3RlbnRfaWQoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmplY3QsIGludCkgYW5kIG9iamVjdCAlIDIgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuaWRfY291bnQgKz0gMQorICAgICAgICAgICAgcmV0dXJuIHN0cihvYmplY3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHBlcnNpc3RlbnRfbG9hZChzZWxmLCBvaWQpOgorICAgICAgICBzZWxmLmxvYWRfY291bnQgKz0gMQorICAgICAgICBvYmplY3QgPSBpbnQob2lkKQorICAgICAgICBhc3NlcnQgb2JqZWN0ICUgMiA9PSAwCisgICAgICAgIHJldHVybiBvYmplY3QKKworICAgIGRlZiB0ZXN0X3BlcnNpc3RlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmlkX2NvdW50ID0gMAorICAgICAgICBzZWxmLmxvYWRfY291bnQgPSAwCisgICAgICAgIEwgPSByYW5nZSgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMoTCkpLCBMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaWRfY291bnQsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkX2NvdW50LCA1KQorCisgICAgZGVmIHRlc3RfYmluX3BlcnNpc3RlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmlkX2NvdW50ID0gMAorICAgICAgICBzZWxmLmxvYWRfY291bnQgPSAwCisgICAgICAgIEwgPSByYW5nZSgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMoTCwgMSkpLCBMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaWRfY291bnQsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkX2NvdW50LCA1KQorCitjbGFzcyBBYnN0cmFjdFBpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBwaWNrbGVyX2NsYXNzID0gTm9uZQorICAgIHVucGlja2xlcl9jbGFzcyA9IE5vbmUKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYucGlja2xlcl9jbGFzcworICAgICAgICBhc3NlcnQgc2VsZi51bnBpY2tsZXJfY2xhc3MKKworICAgIGRlZiB0ZXN0X2NsZWFyX3BpY2tsZXJfbWVtbyhzZWxmKToKKyAgICAgICAgIyBUbyB0ZXN0IHdoZXRoZXIgY2xlYXJfbWVtbygpIGhhcyBhbnkgZWZmZWN0LCB3ZSBwaWNrbGUgYW4gb2JqZWN0LAorICAgICAgICAjIHRoZW4gcGlja2xlIGl0IGFnYWluIHdpdGhvdXQgY2xlYXJpbmcgdGhlIG1lbW87IHRoZSB0d28gc2VyaWFsaXplZAorICAgICAgICAjIGZvcm1zIHNob3VsZCBiZSBkaWZmZXJlbnQuIElmIHdlIGNsZWFyX21lbW8oKSBhbmQgdGhlbiBwaWNrbGUgdGhlCisgICAgICAgICMgb2JqZWN0IGFnYWluLCB0aGUgdGhpcmQgc2VyaWFsaXplZCBmb3JtIHNob3VsZCBiZSBpZGVudGljYWwgdG8gdGhlCisgICAgICAgICMgZmlyc3Qgb25lIHdlIG9idGFpbmVkLgorICAgICAgICBkYXRhID0gWyJhYmNkZWZnIiwgImFiY2RlZmciLCA0NF0KKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHBpY2tsZXIgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZikKKworICAgICAgICBwaWNrbGVyLmR1bXAoZGF0YSkKKyAgICAgICAgZmlyc3RfcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQorCisgICAgICAgICMgUmVzZXQgU3RyaW5nSU8gb2JqZWN0LgorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgZi50cnVuY2F0ZSgpCisKKyAgICAgICAgcGlja2xlci5kdW1wKGRhdGEpCisgICAgICAgIHNlY29uZF9waWNrbGVkID0gZi5nZXR2YWx1ZSgpCisKKyAgICAgICAgIyBSZXNldCB0aGUgUGlja2xlciBhbmQgU3RyaW5nSU8gb2JqZWN0cy4KKyAgICAgICAgcGlja2xlci5jbGVhcl9tZW1vKCkKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIGYudHJ1bmNhdGUoKQorCisgICAgICAgIHBpY2tsZXIuZHVtcChkYXRhKQorICAgICAgICB0aGlyZF9waWNrbGVkID0gZi5nZXR2YWx1ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmaXJzdF9waWNrbGVkLCBzZWNvbmRfcGlja2xlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXJzdF9waWNrbGVkLCB0aGlyZF9waWNrbGVkKQorCisgICAgZGVmIHRlc3RfcHJpbWluZ19waWNrbGVyX21lbW8oc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgd2UgY2FuIHNldCB0aGUgUGlja2xlcidzIG1lbW8gYXR0cmlidXRlLgorICAgICAgICBkYXRhID0gWyJhYmNkZWZnIiwgImFiY2RlZmciLCA0NF0KKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHBpY2tsZXIgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZikKKworICAgICAgICBwaWNrbGVyLmR1bXAoZGF0YSkKKyAgICAgICAgZmlyc3RfcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQorCisgICAgICAgIGYgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBwcmltZWQgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZikKKyAgICAgICAgcHJpbWVkLm1lbW8gPSBwaWNrbGVyLm1lbW8KKworICAgICAgICBwcmltZWQuZHVtcChkYXRhKQorICAgICAgICBwcmltZWRfcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZmlyc3RfcGlja2xlZCwgcHJpbWVkX3BpY2tsZWQpCisKKyAgICBkZWYgdGVzdF9wcmltaW5nX3VucGlja2xlcl9tZW1vKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IHdlIGNhbiBzZXQgdGhlIFVucGlja2xlcidzIG1lbW8gYXR0cmlidXRlLgorICAgICAgICBkYXRhID0gWyJhYmNkZWZnIiwgImFiY2RlZmciLCA0NF0KKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHBpY2tsZXIgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZikKKworICAgICAgICBwaWNrbGVyLmR1bXAoZGF0YSkKKyAgICAgICAgZmlyc3RfcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQorCisgICAgICAgIGYgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBwcmltZWQgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZikKKyAgICAgICAgcHJpbWVkLm1lbW8gPSBwaWNrbGVyLm1lbW8KKworICAgICAgICBwcmltZWQuZHVtcChkYXRhKQorICAgICAgICBwcmltZWRfcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQorCisgICAgICAgIHVucGlja2xlciA9IHNlbGYudW5waWNrbGVyX2NsYXNzKGNTdHJpbmdJTy5TdHJpbmdJTyhmaXJzdF9waWNrbGVkKSkKKyAgICAgICAgdW5waWNrbGVkX2RhdGExID0gdW5waWNrbGVyLmxvYWQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVkX2RhdGExLCBkYXRhKQorCisgICAgICAgIHByaW1lZCA9IHNlbGYudW5waWNrbGVyX2NsYXNzKGNTdHJpbmdJTy5TdHJpbmdJTyhwcmltZWRfcGlja2xlZCkpCisgICAgICAgIHByaW1lZC5tZW1vID0gdW5waWNrbGVyLm1lbW8KKyAgICAgICAgdW5waWNrbGVkX2RhdGEyID0gcHJpbWVkLmxvYWQoKQorCisgICAgICAgIHByaW1lZC5tZW1vLmNsZWFyKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlZF9kYXRhMiwgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVucGlja2xlZF9kYXRhMiBpcyB1bnBpY2tsZWRfZGF0YTEpCisKKyAgICBkZWYgdGVzdF9yZXVzaW5nX3VucGlja2xlcl9vYmplY3RzKHNlbGYpOgorICAgICAgICBkYXRhMSA9IFsiYWJjZGVmZyIsICJhYmNkZWZnIiwgNDRdCisgICAgICAgIGYgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBwaWNrbGVyID0gc2VsZi5waWNrbGVyX2NsYXNzKGYpCisgICAgICAgIHBpY2tsZXIuZHVtcChkYXRhMSkKKyAgICAgICAgcGlja2xlZDEgPSBmLmdldHZhbHVlKCkKKworICAgICAgICBkYXRhMiA9IFsiYWJjZGVmZyIsIDQ0LCA0NF0KKyAgICAgICAgZiA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHBpY2tsZXIgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZikKKyAgICAgICAgcGlja2xlci5kdW1wKGRhdGEyKQorICAgICAgICBwaWNrbGVkMiA9IGYuZ2V0dmFsdWUoKQorCisgICAgICAgIGYgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBmLndyaXRlKHBpY2tsZWQxKQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgdW5waWNrbGVyID0gc2VsZi51bnBpY2tsZXJfY2xhc3MoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZXIubG9hZCgpLCBkYXRhMSkKKworICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgZi50cnVuY2F0ZSgpCisgICAgICAgIGYud3JpdGUocGlja2xlZDIpCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlci5sb2FkKCksIGRhdGEyKQorCitjbGFzcyBCaWdtZW1QaWNrbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIE1lbW9yeSByZXF1aXJlbWVudHM6IDEgYnl0ZSBwZXIgY2hhcmFjdGVyIGZvciBpbnB1dCBzdHJpbmdzLCAxIGJ5dGUKKyAgICAjIGZvciBwaWNrbGVkIGRhdGEsIDEgYnl0ZSBmb3IgdW5waWNrbGVkIHN0cmluZ3MsIDEgYnl0ZSBmb3IgaW50ZXJuYWwKKyAgICAjIGJ1ZmZlciBhbmQgMSBieXRlIG9mIGZyZWUgc3BhY2UgZm9yIHJlc2l6aW5nIG9mIGludGVybmFsIGJ1ZmZlci4KKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzJHICsgMTAwKl8xTSwgbWVtdXNlPTUpCisgICAgZGVmIHRlc3RfaHVnZV9zdHJsaXN0KHNlbGYsIHNpemUpOgorICAgICAgICBjaHVua3NpemUgPSAyKioyMAorICAgICAgICBkYXRhID0gW10KKyAgICAgICAgd2hpbGUgc2l6ZSA+IGNodW5rc2l6ZToKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKCd4JyAqIGNodW5rc2l6ZSkKKyAgICAgICAgICAgIHNpemUgLT0gY2h1bmtzaXplCisgICAgICAgICAgICBjaHVua3NpemUgKz0gMQorICAgICAgICBkYXRhLmFwcGVuZCgneScgKiBzaXplKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90bykKKyAgICAgICAgICAgICAgICAgICAgcmVzID0gc2VsZi5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgZGF0YSkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICByZXMgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkYXRhID0gTm9uZQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Byb2ZpbGVlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Byb2ZpbGVlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZDJjODMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvcHJvZmlsZWUucHkKQEAgLTAsMCArMSwxMTUgQEAKKyIiIgorSW5wdXQgZm9yIHRlc3RfcHJvZmlsZS5weSBhbmQgdGVzdF9jcHJvZmlsZS5weS4KKworSU1QT1JUQU5UOiBUaGlzIHN0dWZmIGlzIHRvdWNoeS4gSWYgeW91IG1vZGlmeSBhbnl0aGluZyBhYm92ZSB0aGUKK3Rlc3QgY2xhc3MgeW91J2xsIGhhdmUgdG8gcmVnZW5lcmF0ZSB0aGUgc3RhdHMgYnkgcnVubmluZyB0aGUgdHdvCit0ZXN0IGZpbGVzLgorCisqQUxMKiBOVU1CRVJTIGluIHRoZSBleHBlY3RlZCBvdXRwdXQgYXJlIHJlbGV2YW50LiAgSWYgeW91IGNoYW5nZQordGhlIGZvcm1hdHRpbmcgb2YgcHN0YXRzLCBwbGVhc2UgZG9uJ3QganVzdCByZWdlbmVyYXRlIHRoZSBleHBlY3RlZAorb3V0cHV0IHdpdGhvdXQgY2hlY2tpbmcgdmVyeSBjYXJlZnVsbHkgdGhhdCBub3QgYSBzaW5nbGUgbnVtYmVyIGhhcworY2hhbmdlZC4KKyIiIgorCitpbXBvcnQgc3lzCisKKyMgSW4gb3JkZXIgdG8gaGF2ZSByZXByb2R1Y2libGUgdGltZSwgd2Ugc2ltdWxhdGUgYSB0aW1lciBpbiB0aGUgZ2xvYmFsCisjIHZhcmlhYmxlICdUSUNLUycsIHdoaWNoIHJlcHJlc2VudHMgc2ltdWxhdGVkIHRpbWUgaW4gbWlsbGlzZWNvbmRzLgorIyAoV2UgY2FuJ3QgdXNlIGEgaGVscGVyIGZ1bmN0aW9uIGluY3JlbWVudCB0aGUgdGltZXIgc2luY2UgaXQgd291bGQgYmUKKyMgaW5jbHVkZWQgaW4gdGhlIHByb2ZpbGUgYW5kIHdvdWxkIGFwcGVhciB0byBjb25zdW1lIGFsbCB0aGUgdGltZS4pCitUSUNLUyA9IDQyMDAwCisKK2RlZiB0aW1lcigpOgorICAgIHJldHVybiBUSUNLUworCitkZWYgdGVzdGZ1bmMoKToKKyAgICAjIDEgY2FsbAorICAgICMgMTAwMCB0aWNrcyB0b3RhbDogMjcwIHRpY2tzIGxvY2FsLCA3MzAgdGlja3MgaW4gc3ViZnVuY3Rpb25zCisgICAgZ2xvYmFsIFRJQ0tTCisgICAgVElDS1MgKz0gOTkKKyAgICBoZWxwZXIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDMwMAorICAgIGhlbHBlcigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMzAwCisgICAgVElDS1MgKz0gMTcxCisgICAgZmFjdG9yaWFsKDE0KSAgICAgICAgICAgICAgICAgICAgICAgIyAxMzAKKworZGVmIGZhY3RvcmlhbChuKToKKyAgICAjIDIzIGNhbGxzIHRvdGFsCisgICAgIyAxNzAgdGlja3MgdG90YWwsIDE1MCB0aWNrcyBsb2NhbAorICAgICMgMyBwcmltaXRpdmUgY2FsbHMsIDEzMCwgMjAgYW5kIDIwIHRpY2tzIHRvdGFsCisgICAgIyBpbmNsdWRpbmcgMTE2LCAxNywgMTcgdGlja3MgbG9jYWwKKyAgICBnbG9iYWwgVElDS1MKKyAgICBpZiBuID4gMDoKKyAgICAgICAgVElDS1MgKz0gbgorICAgICAgICByZXR1cm4gbXVsKG4sIGZhY3RvcmlhbChuLTEpKQorICAgIGVsc2U6CisgICAgICAgIFRJQ0tTICs9IDExCisgICAgICAgIHJldHVybiAxCisKK2RlZiBtdWwoYSwgYik6CisgICAgIyAyMCBjYWxscworICAgICMgMSB0aWNrLCBsb2NhbAorICAgIGdsb2JhbCBUSUNLUworICAgIFRJQ0tTICs9IDEKKyAgICByZXR1cm4gYSAqIGIKKworZGVmIGhlbHBlcigpOgorICAgICMgMiBjYWxscworICAgICMgMzAwIHRpY2tzIHRvdGFsOiAyMCB0aWNrcyBsb2NhbCwgMjYwIHRpY2tzIGluIHN1YmZ1bmN0aW9ucworICAgIGdsb2JhbCBUSUNLUworICAgIFRJQ0tTICs9IDEKKyAgICBoZWxwZXIxKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDMwCisgICAgVElDS1MgKz0gMgorICAgIGhlbHBlcjEoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMzAKKyAgICBUSUNLUyArPSA2CisgICAgaGVscGVyMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyA1MAorICAgIFRJQ0tTICs9IDMKKyAgICBoZWxwZXIyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDUwCisgICAgVElDS1MgKz0gMgorICAgIGhlbHBlcjIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgNTAKKyAgICBUSUNLUyArPSA1CisgICAgaGVscGVyMl9pbmRpcmVjdCgpICAgICAgICAgICAgICAgICAgIyA3MAorICAgIFRJQ0tTICs9IDEKKworZGVmIGhlbHBlcjEoKToKKyAgICAjIDQgY2FsbHMKKyAgICAjIDMwIHRpY2tzIHRvdGFsOiAyOSB0aWNrcyBsb2NhbCwgMSB0aWNrIGluIHN1YmZ1bmN0aW9ucworICAgIGdsb2JhbCBUSUNLUworICAgIFRJQ0tTICs9IDEwCisgICAgaGFzYXR0cihDKCksICJmb28iKSAgICAgICAgICAgICAgICAgIyAxCisgICAgVElDS1MgKz0gMTkKKyAgICBsc3QgPSBbXQorICAgIGxzdC5hcHBlbmQoNDIpICAgICAgICAgICAgICAgICAgICAgICMgMAorICAgIHN5cy5leGNfaW5mbygpICAgICAgICAgICAgICAgICAgICAgICMgMAorCitkZWYgaGVscGVyMl9pbmRpcmVjdCgpOgorICAgIGhlbHBlcjIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgNTAKKyAgICBmYWN0b3JpYWwoMykgICAgICAgICAgICAgICAgICAgICAgICAjIDIwCisKK2RlZiBoZWxwZXIyKCk6CisgICAgIyA4IGNhbGxzCisgICAgIyA1MCB0aWNrcyBsb2NhbDogMzkgdGlja3MgbG9jYWwsIDExIHRpY2tzIGluIHN1YmZ1bmN0aW9ucworICAgIGdsb2JhbCBUSUNLUworICAgIFRJQ0tTICs9IDExCisgICAgaGFzYXR0cihDKCksICJiYXIiKSAgICAgICAgICAgICAgICAgIyAxCisgICAgVElDS1MgKz0gMTMKKyAgICBzdWJoZWxwZXIoKSAgICAgICAgICAgICAgICAgICAgICAgICAjIDEwCisgICAgVElDS1MgKz0gMTUKKworZGVmIHN1YmhlbHBlcigpOgorICAgICMgOCBjYWxscworICAgICMgMTAgdGlja3MgdG90YWw6IDggdGlja3MgbG9jYWwsIDIgdGlja3MgaW4gc3ViZnVuY3Rpb25zCisgICAgZ2xvYmFsIFRJQ0tTCisgICAgVElDS1MgKz0gMgorICAgIGZvciBpIGluIHJhbmdlKDIpOiAgICAgICAgICAgICAgICAgICMgMAorICAgICAgICB0cnk6CisgICAgICAgICAgICBDKCkuZm9vICAgICAgICAgICAgICAgICAgICAgIyAxIHggMgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBUSUNLUyArPSAzICAgICAgICAgICAgICAgICAgIyAzIHggMgorCitjbGFzcyBDOgorICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgIyAyOCBjYWxscworICAgICAgICAjIDEgdGljaywgbG9jYWwKKyAgICAgICAgZ2xvYmFsIFRJQ0tTCisgICAgICAgIFRJQ0tTICs9IDEKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9weWNsYnJfaW5wdXQucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvcHljbGJyX2lucHV0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Y2NkNjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvcHljbGJyX2lucHV0LnB5CkBAIC0wLDAgKzEsMzMgQEAKKyIiIlRlc3QgY2FzZXMgZm9yIHRlc3RfcHljbGJyLnB5IiIiCisKK2RlZiBmKCk6IHBhc3MKKworY2xhc3MgT3RoZXIob2JqZWN0KToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZm9vKGMpOiBwYXNzCisKKyAgICBkZWYgb20oc2VsZik6IHBhc3MKKworY2xhc3MgQiAob2JqZWN0KToKKyAgICBkZWYgYm0oc2VsZik6IHBhc3MKKworY2xhc3MgQyAoQik6CisgICAgZm9vID0gT3RoZXIoKS5mb28KKyAgICBvbSA9IE90aGVyLm9tCisKKyAgICBkID0gMTAKKworICAgICMgWFhYOiBUaGlzIGNhdXNlcyB0ZXN0X3B5Y2xici5weSB0byBmYWlsLCBidXQgb25seSBiZWNhdXNlIHRoZQorICAgICMgICAgICBpbnRyb3NwZWN0aW9uLWJhc2VkIGlzX21ldGhvZCgpIGNvZGUgaW4gdGhlIHRlc3QgY2FuJ3QKKyAgICAjICAgICAgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGlzIGFuZCBhIGdlbnVpbmUgbWV0aG9kIGZ1bmN0aW9uIGxpa2UgbSgpLgorICAgICMgICAgICBUaGUgcHljbGJyLnB5IG1vZHVsZSBnZXRzIHRoaXMgcmlnaHQgYXMgaXQgcGFyc2VzIHRoZSB0ZXh0LgorICAgICMKKyAgICAjZiA9IGYKKworICAgIGRlZiBtKHNlbGYpOiBwYXNzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNtKHNlbGYpOiBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY20oc2VsZik6IHBhc3MKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9weWRvY19tb2QucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvcHlkb2NfbW9kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNTMzMjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvcHlkb2NfbW9kLnB5CkBAIC0wLDAgKzEsMjcgQEAKKyIiIlRoaXMgaXMgYSB0ZXN0IG1vZHVsZSBmb3IgdGVzdF9weWRvYyIiIgorCitfX2F1dGhvcl9fID0gIkJlbmphbWluIFBldGVyc29uIgorX19jcmVkaXRzX18gPSAiTm9ib2R5IgorX192ZXJzaW9uX18gPSAiMS4yLjMuNCIKKworCitjbGFzcyBBOgorICAgICIiIkhlbGxvIGFuZCBnb29kYnllIiIiCisgICAgZGVmIF9faW5pdF9fKCk6CisgICAgICAgICIiIldvdywgSSBoYXZlIG5vIGZ1bmN0aW9uISIiIgorICAgICAgICBwYXNzCisKK2NsYXNzIEIob2JqZWN0KToKKyAgICBOT19NRUFOSU5HID0gImVnZ3MiCisgICAgcGFzcworCitkZWYgZG9jX2Z1bmMoKToKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIHNvbHZlcyBhbGwgb2YgdGhlIHdvcmxkJ3MgcHJvYmxlbXM6CisgICAgaHVuZ2VyCisgICAgbGFjayBvZiBQeXRob24KKyAgICB3YXIKKyAgICAiIiIKKworZGVmIG5vZG9jX2Z1bmMoKToKKyAgICBwYXNzCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvcHlkb2Nmb2RkZXIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvcHlkb2Nmb2RkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNmMWNiZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9weWRvY2ZvZGRlci5weQpAQCAtMCwwICsxLDIxNiBAQAorIiIiU29tZXRoaW5nIGp1c3QgdG8gbG9vayBhdCB2aWEgcHlkb2MuIiIiCisKK2ltcG9ydCB0eXBlcworCitjbGFzcyBBX2NsYXNzaWM6CisgICAgIkEgY2xhc3NpYyBjbGFzcy4iCisgICAgZGVmIEFfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQS4iCisgICAgZGVmIEFCX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEgYW5kIEIuIgorICAgIGRlZiBBQ19tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBIGFuZCBDLiIKKyAgICBkZWYgQURfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSBhbmQgRC4iCisgICAgZGVmIEFCQ19tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBLCBCIGFuZCBDLiIKKyAgICBkZWYgQUJEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEIgYW5kIEQuIgorICAgIGRlZiBBQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQyBhbmQgRC4iCisgICAgZGVmIEFCQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQiwgQyBhbmQgRC4iCisKKworY2xhc3MgQl9jbGFzc2ljKEFfY2xhc3NpYyk6CisgICAgIkEgY2xhc3NpYyBjbGFzcywgZGVyaXZlZCBmcm9tIEFfY2xhc3NpYy4iCisgICAgZGVmIEFCX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEgYW5kIEIuIgorICAgIGRlZiBBQkNfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQiBhbmQgQy4iCisgICAgZGVmIEFCRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBLCBCIGFuZCBELiIKKyAgICBkZWYgQUJDRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBLCBCLCBDIGFuZCBELiIKKyAgICBkZWYgQl9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBCLiIKKyAgICBkZWYgQkNfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQiBhbmQgQy4iCisgICAgZGVmIEJEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEIgYW5kIEQuIgorICAgIGRlZiBCQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQiwgQyBhbmQgRC4iCisKK2NsYXNzIENfY2xhc3NpYyhBX2NsYXNzaWMpOgorICAgICJBIGNsYXNzaWMgY2xhc3MsIGRlcml2ZWQgZnJvbSBBX2NsYXNzaWMuIgorICAgIGRlZiBBQ19tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBIGFuZCBDLiIKKyAgICBkZWYgQUJDX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEIgYW5kIEMuIgorICAgIGRlZiBBQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQyBhbmQgRC4iCisgICAgZGVmIEFCQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQiwgQyBhbmQgRC4iCisgICAgZGVmIEJDX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEIgYW5kIEMuIgorICAgIGRlZiBCQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQiwgQyBhbmQgRC4iCisgICAgZGVmIENfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQy4iCisgICAgZGVmIENEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEMgYW5kIEQuIgorCitjbGFzcyBEX2NsYXNzaWMoQl9jbGFzc2ljLCBDX2NsYXNzaWMpOgorICAgICJBIGNsYXNzaWMgY2xhc3MsIGRlcml2ZWQgZnJvbSBCX2NsYXNzaWMgYW5kIENfY2xhc3NpYy4iCisgICAgZGVmIEFEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEgYW5kIEQuIgorICAgIGRlZiBBQkRfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQiBhbmQgRC4iCisgICAgZGVmIEFDRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBLCBDIGFuZCBELiIKKyAgICBkZWYgQUJDRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBLCBCLCBDIGFuZCBELiIKKyAgICBkZWYgQkRfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQiBhbmQgRC4iCisgICAgZGVmIEJDRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBCLCBDIGFuZCBELiIKKyAgICBkZWYgQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQyBhbmQgRC4iCisgICAgZGVmIERfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gRC4iCisKKworY2xhc3MgQV9uZXcob2JqZWN0KToKKyAgICAiQSBuZXctc3R5bGUgY2xhc3MuIgorCisgICAgZGVmIEFfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQS4iCisgICAgZGVmIEFCX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEgYW5kIEIuIgorICAgIGRlZiBBQ19tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBIGFuZCBDLiIKKyAgICBkZWYgQURfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSBhbmQgRC4iCisgICAgZGVmIEFCQ19tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBLCBCIGFuZCBDLiIKKyAgICBkZWYgQUJEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEIgYW5kIEQuIgorICAgIGRlZiBBQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQyBhbmQgRC4iCisgICAgZGVmIEFCQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQiwgQyBhbmQgRC4iCisKKyAgICBkZWYgQV9jbGFzc21ldGhvZChjbHMsIHgpOgorICAgICAgICAiQSBjbGFzcyBtZXRob2QgZGVmaW5lZCBpbiBBLiIKKyAgICBBX2NsYXNzbWV0aG9kID0gY2xhc3NtZXRob2QoQV9jbGFzc21ldGhvZCkKKworICAgIGRlZiBBX3N0YXRpY21ldGhvZCgpOgorICAgICAgICAiQSBzdGF0aWMgbWV0aG9kIGRlZmluZWQgaW4gQS4iCisgICAgQV9zdGF0aWNtZXRob2QgPSBzdGF0aWNtZXRob2QoQV9zdGF0aWNtZXRob2QpCisKKyAgICBkZWYgX2dldHgoc2VsZik6CisgICAgICAgICJBIHByb3BlcnR5IGdldHRlciBmdW5jdGlvbi4iCisgICAgZGVmIF9zZXR4KHNlbGYsIHZhbHVlKToKKyAgICAgICAgIkEgcHJvcGVydHkgc2V0dGVyIGZ1bmN0aW9uLiIKKyAgICBkZWYgX2RlbHgoc2VsZik6CisgICAgICAgICJBIHByb3BlcnR5IGRlbGV0ZXIgZnVuY3Rpb24uIgorICAgIEFfcHJvcGVydHkgPSBwcm9wZXJ0eShmZGVsPV9kZWx4LCBmZ2V0PV9nZXR4LCBmc2V0PV9zZXR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBkb2M9IkEgc2FtcGxlIHByb3BlcnR5IGRlZmluZWQgaW4gQS4iKQorCisgICAgQV9pbnRfYWxpYXMgPSBpbnQKKworY2xhc3MgQl9uZXcoQV9uZXcpOgorICAgICJBIG5ldy1zdHlsZSBjbGFzcywgZGVyaXZlZCBmcm9tIEFfbmV3LiIKKworICAgIGRlZiBBQl9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBIGFuZCBCLiIKKyAgICBkZWYgQUJDX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEIgYW5kIEMuIgorICAgIGRlZiBBQkRfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQiBhbmQgRC4iCisgICAgZGVmIEFCQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQiwgQyBhbmQgRC4iCisgICAgZGVmIEJfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQi4iCisgICAgZGVmIEJDX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEIgYW5kIEMuIgorICAgIGRlZiBCRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBCIGFuZCBELiIKKyAgICBkZWYgQkNEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEIsIEMgYW5kIEQuIgorCitjbGFzcyBDX25ldyhBX25ldyk6CisgICAgIkEgbmV3LXN0eWxlIGNsYXNzLCBkZXJpdmVkIGZyb20gQV9uZXcuIgorCisgICAgZGVmIEFDX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEgYW5kIEMuIgorICAgIGRlZiBBQkNfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSwgQiBhbmQgQy4iCisgICAgZGVmIEFDRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBLCBDIGFuZCBELiIKKyAgICBkZWYgQUJDRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBLCBCLCBDIGFuZCBELiIKKyAgICBkZWYgQkNfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQiBhbmQgQy4iCisgICAgZGVmIEJDRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBCLCBDIGFuZCBELiIKKyAgICBkZWYgQ19tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBDLiIKKyAgICBkZWYgQ0RfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQyBhbmQgRC4iCisKK2NsYXNzIERfbmV3KEJfbmV3LCBDX25ldyk6CisgICAgIiIiQSBuZXctc3R5bGUgY2xhc3MsIGRlcml2ZWQgZnJvbSBCX25ldyBhbmQgQ19uZXcuCisgICAgIiIiCisKKyAgICBkZWYgQURfbWV0aG9kKHNlbGYpOgorICAgICAgICAiTWV0aG9kIGRlZmluZWQgaW4gQSBhbmQgRC4iCisgICAgZGVmIEFCRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBBLCBCIGFuZCBELiIKKyAgICBkZWYgQUNEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEMgYW5kIEQuIgorICAgIGRlZiBBQkNEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEEsIEIsIEMgYW5kIEQuIgorICAgIGRlZiBCRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBCIGFuZCBELiIKKyAgICBkZWYgQkNEX21ldGhvZChzZWxmKToKKyAgICAgICAgIk1ldGhvZCBkZWZpbmVkIGluIEIsIEMgYW5kIEQuIgorICAgIGRlZiBDRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBDIGFuZCBELiIKKyAgICBkZWYgRF9tZXRob2Qoc2VsZik6CisgICAgICAgICJNZXRob2QgZGVmaW5lZCBpbiBELiIKKworY2xhc3MgRnVua3lQcm9wZXJ0aWVzKG9iamVjdCk6CisgICAgIiIiRnJvbSBTRiBidWcgNDcyMzQ3LCBieSBSb2VsYW5kIFJlbmdlbGluay4KKworICAgIFByb3BlcnR5IGdldHRlcnMgZXRjIG1heSBub3QgYmUgdmFuaWxsYSBmdW5jdGlvbnMgb3IgbWV0aG9kcywKKyAgICBhbmQgdGhpcyB1c2VkIHRvIG1ha2UgR1VJIHB5ZG9jIGJsb3cgdXAuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZGVzYyA9IHsneCc6MH0KKworICAgIGNsYXNzIGdldF9kZXNjOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYXR0cik6CisgICAgICAgICAgICBzZWxmLmF0dHIgPSBhdHRyCisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBpbnN0KToKKyAgICAgICAgICAgIHByaW50ICdHZXQgY2FsbGVkJywgc2VsZiwgaW5zdAorICAgICAgICAgICAgcmV0dXJuIGluc3QuZGVzY1tzZWxmLmF0dHJdCisgICAgY2xhc3Mgc2V0X2Rlc2M6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhdHRyKToKKyAgICAgICAgICAgIHNlbGYuYXR0ciA9IGF0dHIKKyAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGluc3QsIHZhbCk6CisgICAgICAgICAgICBwcmludCAnU2V0IGNhbGxlZCcsIHNlbGYsIGluc3QsIHZhbAorICAgICAgICAgICAgaW5zdC5kZXNjW3NlbGYuYXR0cl0gPSB2YWwKKyAgICBjbGFzcyBkZWxfZGVzYzoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGF0dHIpOgorICAgICAgICAgICAgc2VsZi5hdHRyID0gYXR0cgorICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgaW5zdCk6CisgICAgICAgICAgICBwcmludCAnRGVsIGNhbGxlZCcsIHNlbGYsIGluc3QKKyAgICAgICAgICAgIGRlbCBpbnN0LmRlc2Nbc2VsZi5hdHRyXQorCisgICAgeCA9IHByb3BlcnR5KGdldF9kZXNjKCd4JyksIHNldF9kZXNjKCd4JyksIGRlbF9kZXNjKCd4JyksICdwcm9wIHgnKQorCisKK3N1Ym1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoX19uYW1lX18gKyAnLnN1Ym1vZHVsZScsCisgICAgIiIiQSBzdWJtb2R1bGUsIHdoaWNoIHNob3VsZCBhcHBlYXIgaW4gaXRzIHBhcmVudCdzIHN1bW1hcnkiIiIpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvcHlzdG9uZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC9weXN0b25lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM5ODkyZmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvcHlzdG9uZS5weQpAQCAtMCwwICsxLDI3MCBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCisiIiIKKyJQWVNUT05FIiBCZW5jaG1hcmsgUHJvZ3JhbQorCitWZXJzaW9uOiAgICAgICAgUHl0aG9uLzEuMSAoY29ycmVzcG9uZHMgdG8gQy8xLjEgcGx1cyAyIFB5c3RvbmUgZml4ZXMpCisKK0F1dGhvcjogICAgICAgICBSZWluaG9sZCBQLiBXZWlja2VyLCAgQ0FDTSBWb2wgMjcsIE5vIDEwLCAxMC84NCBwZy4gMTAxMy4KKworICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWQgZnJvbSBBREEgdG8gQyBieSBSaWNrIFJpY2hhcmRzb24uCisgICAgICAgICAgICAgICAgRXZlcnkgbWV0aG9kIHRvIHByZXNlcnZlIEFEQS1saWtlbmVzcyBoYXMgYmVlbiB1c2VkLAorICAgICAgICAgICAgICAgIGF0IHRoZSBleHBlbnNlIG9mIEMtbmVzcy4KKworICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWQgZnJvbSBDIHRvIFB5dGhvbiBieSBHdWlkbyB2YW4gUm9zc3VtLgorCitWZXJzaW9uIEhpc3Rvcnk6CisKKyAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMSBjb3JyZWN0cyB0d28gYnVncyBpbiB2ZXJzaW9uIDEuMDoKKworICAgICAgICAgICAgICAgIEZpcnN0LCBpdCBsZWFrZWQgbWVtb3J5OiBpbiBQcm9jMSgpLCBOZXh0UmVjb3JkIGVuZHMKKyAgICAgICAgICAgICAgICB1cCBoYXZpbmcgYSBwb2ludGVyIHRvIGl0c2VsZi4gIEkgaGF2ZSBjb3JyZWN0ZWQgdGhpcworICAgICAgICAgICAgICAgIGJ5IHphcHBpbmcgTmV4dFJlY29yZC5QdHJDb21wIGF0IHRoZSBlbmQgb2YgUHJvYzEoKS4KKworICAgICAgICAgICAgICAgIFNlY29uZCwgUHJvYzMoKSB1c2VkIHRoZSBvcGVyYXRvciAhPSB0byBjb21wYXJlIGEKKyAgICAgICAgICAgICAgICByZWNvcmQgdG8gTm9uZS4gIFRoaXMgaXMgcmF0aGVyIGluZWZmaWNpZW50IGFuZCBub3QKKyAgICAgICAgICAgICAgICB0cnVlIHRvIHRoZSBpbnRlbnRpb24gb2YgdGhlIG9yaWdpbmFsIGJlbmNobWFyayAod2hlcmUKKyAgICAgICAgICAgICAgICBhIHBvaW50ZXIgY29tcGFyaXNvbiB0byBOb25lIGlzIGludGVuZGVkOyB0aGUgIT0KKyAgICAgICAgICAgICAgICBvcGVyYXRvciBhdHRlbXB0cyB0byBmaW5kIGEgbWV0aG9kIF9fY21wX18gdG8gZG8gdmFsdWUKKyAgICAgICAgICAgICAgICBjb21wYXJpc29uIG9mIHRoZSByZWNvcmQpLiAgVmVyc2lvbiAxLjEgcnVucyA1LTEwCisgICAgICAgICAgICAgICAgcGVyY2VudCBmYXN0ZXIgdGhhbiB2ZXJzaW9uIDEuMCwgc28gYmVuY2htYXJrIGZpZ3VyZXMKKyAgICAgICAgICAgICAgICBvZiBkaWZmZXJlbnQgdmVyc2lvbnMgY2FuJ3QgYmUgY29tcGFyZWQgZGlyZWN0bHkuCisKKyIiIgorCitMT09QUyA9IDUwMDAwCisKK2Zyb20gdGltZSBpbXBvcnQgY2xvY2sKKworX192ZXJzaW9uX18gPSAiMS4xIgorCitbSWRlbnQxLCBJZGVudDIsIElkZW50MywgSWRlbnQ0LCBJZGVudDVdID0gcmFuZ2UoMSwgNikKKworY2xhc3MgUmVjb3JkOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIFB0ckNvbXAgPSBOb25lLCBEaXNjciA9IDAsIEVudW1Db21wID0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgSW50Q29tcCA9IDAsIFN0cmluZ0NvbXAgPSAwKToKKyAgICAgICAgc2VsZi5QdHJDb21wID0gUHRyQ29tcAorICAgICAgICBzZWxmLkRpc2NyID0gRGlzY3IKKyAgICAgICAgc2VsZi5FbnVtQ29tcCA9IEVudW1Db21wCisgICAgICAgIHNlbGYuSW50Q29tcCA9IEludENvbXAKKyAgICAgICAgc2VsZi5TdHJpbmdDb21wID0gU3RyaW5nQ29tcAorCisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgIHJldHVybiBSZWNvcmQoc2VsZi5QdHJDb21wLCBzZWxmLkRpc2NyLCBzZWxmLkVudW1Db21wLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYuSW50Q29tcCwgc2VsZi5TdHJpbmdDb21wKQorCitUUlVFID0gMQorRkFMU0UgPSAwCisKK2RlZiBtYWluKGxvb3BzPUxPT1BTKToKKyAgICBiZW5jaHRpbWUsIHN0b25lcyA9IHB5c3RvbmVzKGxvb3BzKQorICAgIHByaW50ICJQeXN0b25lKCVzKSB0aW1lIGZvciAlZCBwYXNzZXMgPSAlZyIgJSBcCisgICAgICAgICAgKF9fdmVyc2lvbl9fLCBsb29wcywgYmVuY2h0aW1lKQorICAgIHByaW50ICJUaGlzIG1hY2hpbmUgYmVuY2htYXJrcyBhdCAlZyBweXN0b25lcy9zZWNvbmQiICUgc3RvbmVzCisKKworZGVmIHB5c3RvbmVzKGxvb3BzPUxPT1BTKToKKyAgICByZXR1cm4gUHJvYzAobG9vcHMpCisKK0ludEdsb2IgPSAwCitCb29sR2xvYiA9IEZBTFNFCitDaGFyMUdsb2IgPSAnXDAnCitDaGFyMkdsb2IgPSAnXDAnCitBcnJheTFHbG9iID0gWzBdKjUxCitBcnJheTJHbG9iID0gbWFwKGxhbWJkYSB4OiB4WzpdLCBbQXJyYXkxR2xvYl0qNTEpCitQdHJHbGIgPSBOb25lCitQdHJHbGJOZXh0ID0gTm9uZQorCitkZWYgUHJvYzAobG9vcHM9TE9PUFMpOgorICAgIGdsb2JhbCBJbnRHbG9iCisgICAgZ2xvYmFsIEJvb2xHbG9iCisgICAgZ2xvYmFsIENoYXIxR2xvYgorICAgIGdsb2JhbCBDaGFyMkdsb2IKKyAgICBnbG9iYWwgQXJyYXkxR2xvYgorICAgIGdsb2JhbCBBcnJheTJHbG9iCisgICAgZ2xvYmFsIFB0ckdsYgorICAgIGdsb2JhbCBQdHJHbGJOZXh0CisKKyAgICBzdGFydHRpbWUgPSBjbG9jaygpCisgICAgZm9yIGkgaW4gcmFuZ2UobG9vcHMpOgorICAgICAgICBwYXNzCisgICAgbnVsbHRpbWUgPSBjbG9jaygpIC0gc3RhcnR0aW1lCisKKyAgICBQdHJHbGJOZXh0ID0gUmVjb3JkKCkKKyAgICBQdHJHbGIgPSBSZWNvcmQoKQorICAgIFB0ckdsYi5QdHJDb21wID0gUHRyR2xiTmV4dAorICAgIFB0ckdsYi5EaXNjciA9IElkZW50MQorICAgIFB0ckdsYi5FbnVtQ29tcCA9IElkZW50MworICAgIFB0ckdsYi5JbnRDb21wID0gNDAKKyAgICBQdHJHbGIuU3RyaW5nQ29tcCA9ICJESFJZU1RPTkUgUFJPR1JBTSwgU09NRSBTVFJJTkciCisgICAgU3RyaW5nMUxvYyA9ICJESFJZU1RPTkUgUFJPR1JBTSwgMSdTVCBTVFJJTkciCisgICAgQXJyYXkyR2xvYls4XVs3XSA9IDEwCisKKyAgICBzdGFydHRpbWUgPSBjbG9jaygpCisKKyAgICBmb3IgaSBpbiByYW5nZShsb29wcyk6CisgICAgICAgIFByb2M1KCkKKyAgICAgICAgUHJvYzQoKQorICAgICAgICBJbnRMb2MxID0gMgorICAgICAgICBJbnRMb2MyID0gMworICAgICAgICBTdHJpbmcyTG9jID0gIkRIUllTVE9ORSBQUk9HUkFNLCAyJ05EIFNUUklORyIKKyAgICAgICAgRW51bUxvYyA9IElkZW50MgorICAgICAgICBCb29sR2xvYiA9IG5vdCBGdW5jMihTdHJpbmcxTG9jLCBTdHJpbmcyTG9jKQorICAgICAgICB3aGlsZSBJbnRMb2MxIDwgSW50TG9jMjoKKyAgICAgICAgICAgIEludExvYzMgPSA1ICogSW50TG9jMSAtIEludExvYzIKKyAgICAgICAgICAgIEludExvYzMgPSBQcm9jNyhJbnRMb2MxLCBJbnRMb2MyKQorICAgICAgICAgICAgSW50TG9jMSA9IEludExvYzEgKyAxCisgICAgICAgIFByb2M4KEFycmF5MUdsb2IsIEFycmF5Mkdsb2IsIEludExvYzEsIEludExvYzMpCisgICAgICAgIFB0ckdsYiA9IFByb2MxKFB0ckdsYikKKyAgICAgICAgQ2hhckluZGV4ID0gJ0EnCisgICAgICAgIHdoaWxlIENoYXJJbmRleCA8PSBDaGFyMkdsb2I6CisgICAgICAgICAgICBpZiBFbnVtTG9jID09IEZ1bmMxKENoYXJJbmRleCwgJ0MnKToKKyAgICAgICAgICAgICAgICBFbnVtTG9jID0gUHJvYzYoSWRlbnQxKQorICAgICAgICAgICAgQ2hhckluZGV4ID0gY2hyKG9yZChDaGFySW5kZXgpKzEpCisgICAgICAgIEludExvYzMgPSBJbnRMb2MyICogSW50TG9jMQorICAgICAgICBJbnRMb2MyID0gSW50TG9jMyAvIEludExvYzEKKyAgICAgICAgSW50TG9jMiA9IDcgKiAoSW50TG9jMyAtIEludExvYzIpIC0gSW50TG9jMQorICAgICAgICBJbnRMb2MxID0gUHJvYzIoSW50TG9jMSkKKworICAgIGJlbmNodGltZSA9IGNsb2NrKCkgLSBzdGFydHRpbWUgLSBudWxsdGltZQorICAgIGlmIGJlbmNodGltZSA9PSAwLjA6CisgICAgICAgIGxvb3BzUGVyQmVuY2h0aW1lID0gMC4wCisgICAgZWxzZToKKyAgICAgICAgbG9vcHNQZXJCZW5jaHRpbWUgPSAobG9vcHMgLyBiZW5jaHRpbWUpCisgICAgcmV0dXJuIGJlbmNodGltZSwgbG9vcHNQZXJCZW5jaHRpbWUKKworZGVmIFByb2MxKFB0clBhckluKToKKyAgICBQdHJQYXJJbi5QdHJDb21wID0gTmV4dFJlY29yZCA9IFB0ckdsYi5jb3B5KCkKKyAgICBQdHJQYXJJbi5JbnRDb21wID0gNQorICAgIE5leHRSZWNvcmQuSW50Q29tcCA9IFB0clBhckluLkludENvbXAKKyAgICBOZXh0UmVjb3JkLlB0ckNvbXAgPSBQdHJQYXJJbi5QdHJDb21wCisgICAgTmV4dFJlY29yZC5QdHJDb21wID0gUHJvYzMoTmV4dFJlY29yZC5QdHJDb21wKQorICAgIGlmIE5leHRSZWNvcmQuRGlzY3IgPT0gSWRlbnQxOgorICAgICAgICBOZXh0UmVjb3JkLkludENvbXAgPSA2CisgICAgICAgIE5leHRSZWNvcmQuRW51bUNvbXAgPSBQcm9jNihQdHJQYXJJbi5FbnVtQ29tcCkKKyAgICAgICAgTmV4dFJlY29yZC5QdHJDb21wID0gUHRyR2xiLlB0ckNvbXAKKyAgICAgICAgTmV4dFJlY29yZC5JbnRDb21wID0gUHJvYzcoTmV4dFJlY29yZC5JbnRDb21wLCAxMCkKKyAgICBlbHNlOgorICAgICAgICBQdHJQYXJJbiA9IE5leHRSZWNvcmQuY29weSgpCisgICAgTmV4dFJlY29yZC5QdHJDb21wID0gTm9uZQorICAgIHJldHVybiBQdHJQYXJJbgorCitkZWYgUHJvYzIoSW50UGFySU8pOgorICAgIEludExvYyA9IEludFBhcklPICsgMTAKKyAgICB3aGlsZSAxOgorICAgICAgICBpZiBDaGFyMUdsb2IgPT0gJ0EnOgorICAgICAgICAgICAgSW50TG9jID0gSW50TG9jIC0gMQorICAgICAgICAgICAgSW50UGFySU8gPSBJbnRMb2MgLSBJbnRHbG9iCisgICAgICAgICAgICBFbnVtTG9jID0gSWRlbnQxCisgICAgICAgIGlmIEVudW1Mb2MgPT0gSWRlbnQxOgorICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gSW50UGFySU8KKworZGVmIFByb2MzKFB0clBhck91dCk6CisgICAgZ2xvYmFsIEludEdsb2IKKworICAgIGlmIFB0ckdsYiBpcyBub3QgTm9uZToKKyAgICAgICAgUHRyUGFyT3V0ID0gUHRyR2xiLlB0ckNvbXAKKyAgICBlbHNlOgorICAgICAgICBJbnRHbG9iID0gMTAwCisgICAgUHRyR2xiLkludENvbXAgPSBQcm9jNygxMCwgSW50R2xvYikKKyAgICByZXR1cm4gUHRyUGFyT3V0CisKK2RlZiBQcm9jNCgpOgorICAgIGdsb2JhbCBDaGFyMkdsb2IKKworICAgIEJvb2xMb2MgPSBDaGFyMUdsb2IgPT0gJ0EnCisgICAgQm9vbExvYyA9IEJvb2xMb2Mgb3IgQm9vbEdsb2IKKyAgICBDaGFyMkdsb2IgPSAnQicKKworZGVmIFByb2M1KCk6CisgICAgZ2xvYmFsIENoYXIxR2xvYgorICAgIGdsb2JhbCBCb29sR2xvYgorCisgICAgQ2hhcjFHbG9iID0gJ0EnCisgICAgQm9vbEdsb2IgPSBGQUxTRQorCitkZWYgUHJvYzYoRW51bVBhckluKToKKyAgICBFbnVtUGFyT3V0ID0gRW51bVBhckluCisgICAgaWYgbm90IEZ1bmMzKEVudW1QYXJJbik6CisgICAgICAgIEVudW1QYXJPdXQgPSBJZGVudDQKKyAgICBpZiBFbnVtUGFySW4gPT0gSWRlbnQxOgorICAgICAgICBFbnVtUGFyT3V0ID0gSWRlbnQxCisgICAgZWxpZiBFbnVtUGFySW4gPT0gSWRlbnQyOgorICAgICAgICBpZiBJbnRHbG9iID4gMTAwOgorICAgICAgICAgICAgRW51bVBhck91dCA9IElkZW50MQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgRW51bVBhck91dCA9IElkZW50NAorICAgIGVsaWYgRW51bVBhckluID09IElkZW50MzoKKyAgICAgICAgRW51bVBhck91dCA9IElkZW50MgorICAgIGVsaWYgRW51bVBhckluID09IElkZW50NDoKKyAgICAgICAgcGFzcworICAgIGVsaWYgRW51bVBhckluID09IElkZW50NToKKyAgICAgICAgRW51bVBhck91dCA9IElkZW50MworICAgIHJldHVybiBFbnVtUGFyT3V0CisKK2RlZiBQcm9jNyhJbnRQYXJJMSwgSW50UGFySTIpOgorICAgIEludExvYyA9IEludFBhckkxICsgMgorICAgIEludFBhck91dCA9IEludFBhckkyICsgSW50TG9jCisgICAgcmV0dXJuIEludFBhck91dAorCitkZWYgUHJvYzgoQXJyYXkxUGFyLCBBcnJheTJQYXIsIEludFBhckkxLCBJbnRQYXJJMik6CisgICAgZ2xvYmFsIEludEdsb2IKKworICAgIEludExvYyA9IEludFBhckkxICsgNQorICAgIEFycmF5MVBhcltJbnRMb2NdID0gSW50UGFySTIKKyAgICBBcnJheTFQYXJbSW50TG9jKzFdID0gQXJyYXkxUGFyW0ludExvY10KKyAgICBBcnJheTFQYXJbSW50TG9jKzMwXSA9IEludExvYworICAgIGZvciBJbnRJbmRleCBpbiByYW5nZShJbnRMb2MsIEludExvYysyKToKKyAgICAgICAgQXJyYXkyUGFyW0ludExvY11bSW50SW5kZXhdID0gSW50TG9jCisgICAgQXJyYXkyUGFyW0ludExvY11bSW50TG9jLTFdID0gQXJyYXkyUGFyW0ludExvY11bSW50TG9jLTFdICsgMQorICAgIEFycmF5MlBhcltJbnRMb2MrMjBdW0ludExvY10gPSBBcnJheTFQYXJbSW50TG9jXQorICAgIEludEdsb2IgPSA1CisKK2RlZiBGdW5jMShDaGFyUGFyMSwgQ2hhclBhcjIpOgorICAgIENoYXJMb2MxID0gQ2hhclBhcjEKKyAgICBDaGFyTG9jMiA9IENoYXJMb2MxCisgICAgaWYgQ2hhckxvYzIgIT0gQ2hhclBhcjI6CisgICAgICAgIHJldHVybiBJZGVudDEKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gSWRlbnQyCisKK2RlZiBGdW5jMihTdHJQYXJJMSwgU3RyUGFySTIpOgorICAgIEludExvYyA9IDEKKyAgICB3aGlsZSBJbnRMb2MgPD0gMToKKyAgICAgICAgaWYgRnVuYzEoU3RyUGFySTFbSW50TG9jXSwgU3RyUGFySTJbSW50TG9jKzFdKSA9PSBJZGVudDE6CisgICAgICAgICAgICBDaGFyTG9jID0gJ0EnCisgICAgICAgICAgICBJbnRMb2MgPSBJbnRMb2MgKyAxCisgICAgaWYgQ2hhckxvYyA+PSAnVycgYW5kIENoYXJMb2MgPD0gJ1onOgorICAgICAgICBJbnRMb2MgPSA3CisgICAgaWYgQ2hhckxvYyA9PSAnWCc6CisgICAgICAgIHJldHVybiBUUlVFCisgICAgZWxzZToKKyAgICAgICAgaWYgU3RyUGFySTEgPiBTdHJQYXJJMjoKKyAgICAgICAgICAgIEludExvYyA9IEludExvYyArIDcKKyAgICAgICAgICAgIHJldHVybiBUUlVFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRkFMU0UKKworZGVmIEZ1bmMzKEVudW1QYXJJbik6CisgICAgRW51bUxvYyA9IEVudW1QYXJJbgorICAgIGlmIEVudW1Mb2MgPT0gSWRlbnQzOiByZXR1cm4gVFJVRQorICAgIHJldHVybiBGQUxTRQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCBzeXMKKyAgICBkZWYgZXJyb3IobXNnKToKKyAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCBtc2csCisgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgInVzYWdlOiAlcyBbbnVtYmVyX29mX2xvb3BzXSIgJSBzeXMuYXJndlswXQorICAgICAgICBzeXMuZXhpdCgxMDApCisgICAgbmFyZ3MgPSBsZW4oc3lzLmFyZ3YpIC0gMQorICAgIGlmIG5hcmdzID4gMToKKyAgICAgICAgZXJyb3IoIiVkIGFyZ3VtZW50cyBhcmUgdG9vIG1hbnk7IiAlIG5hcmdzKQorICAgIGVsaWYgbmFyZ3MgPT0gMToKKyAgICAgICAgdHJ5OiBsb29wcyA9IGludChzeXMuYXJndlsxXSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBlcnJvcigiSW52YWxpZCBhcmd1bWVudCAlcjsiICUgc3lzLmFyZ3ZbMV0pCisgICAgZWxzZToKKyAgICAgICAgbG9vcHMgPSBMT09QUworICAgIG1haW4obG9vcHMpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvcmFuZHYyXzMyLnBjayBiL2xpYi9weXRob24yLjcvdGVzdC9yYW5kdjJfMzIucGNrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4N2FiMjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvcmFuZHYyXzMyLnBjawpAQCAtMCwwICsxLDYzMyBAQAorY3JhbmRvbQorUmFuZG9tCitwMAorKHRScDEKKyhJMgorKEktMjE0NzQ4MzY0OAorSS04NDU5NzQ5ODUKK0ktMTI5NDA5MDA4NgorSTExOTM2NTkyMzkKK0ktMTg0OTQ4MTczNgorSS05NDY1Nzk3MzIKK0ktMzQ0MDY3NzAKK0kxNzQ5MDQ5NDcxCitJMTk5Nzc3NDY4MgorSTE0MzIwMjY0NTcKK0kxMjg4MTI3MDczCitJLTk0MzE3NTY1NQorSS0xNzE4MDczOTY0CitJMzM5OTkzNTQ4CitJLTEwNDUyNjA1NzUKK0k1ODI1MDUwMzcKK0ktMTU1NTEwODI1MAorSS0xMTE0NzY1NjIwCitJMTU3ODY0ODc1MAorSS0zNTAzODQ0MTIKK0ktMjA4NDU4NDgKK0ktMjg4MjU1MzE0CitJNzM4NzkwOTUzCitJMTkwMTI0OTY0MQorSTE5OTkzMjQ2NzIKK0ktMjc3MzYxMDY4CitJLTE1MTU4ODU4MzkKK0kyMDYxNzYxNTk2CitJLTgwOTA2ODA4OQorSTEyODc5ODExMzYKK0kyNTgxMjk0OTIKK0ktNjMwMzc0NQorSS03NjUxNDgzMzcKK0kxMDkwMzQ0OTExCitJMTY1MzQzNDcwMworSS0xMjQyOTIzNjI4CitJMTYzOTE3MTMxMworSS0xODcwMDQyNjYwCitJLTE2NTUwMTQwNTAKK0kzNDU2MDkwNDgKK0kyMDkzNDEwMTM4CitJMTk2MzI2MzM3NAorSS0yMTIyMDk4MzQyCitJMTMzNjg1OTk2MQorSS04MTA5NDI3MjkKK0k5NDU4NTc3NTMKK0kyMTAzMDQ5OTQyCitJNjIzOTIyNjg0CitJMTQxODM0OTU0OQorSTY5MDg3NzM0MgorSTc1NDk3MzEwNworSS0xNjA1MTExODQ3CitJMTYwNzEzNzgxMworSS0xNzA0OTE3MTMxCitJMTMxNzUzNjQyOAorSTE3MTQ4ODI4NzIKK0ktMTY2NTM4NTEyMAorSTE4MjM2OTQzOTcKK0ktMTc5MDgzNjg2NgorSS0xNjk2NzI0ODEyCitJLTYwMzk3OTg0NworSS00OTg1OTkzOTQKK0ktMzQxMjY1MjkxCitJOTI3Mzg4ODA0CitJMTc3ODU2MjEzNQorSTE3MTY4OTU3ODEKK0kxMDIzMTk4MTIyCitJMTcyNjE0NTk2NworSTk0MTk1NTUyNQorSTEyNDAxNDg5NTAKK0ktMTkyOTYzNDU0NQorSS0xMjg4MTQ3MDgzCitJLTUxOTMxODMzNQorSTc1NDU1OTc3NworSS03MDc1NzE5NTgKK0kzNzQ2MDQwMjIKK0k0MjA0MjQwNjEKK0ktMTA5NTQ0MzQ4NgorSTE2MjE5MzQ5NDQKK0ktMTIyMDUwMjUyMgorSS0xNDAwNDk2MDgKK0ktOTE4OTE3MTIyCitJMzA0MzQxMDI0CitJLTE2Mzc0NDYwNTcKK0ktMzUzOTM0NDg1CitJMTk3MzQzNjIzNQorSTQzMzM4MDI0MQorSS02ODY3NTk0NjUKK0ktMjExMTU2MzE1NAorSS01NzM0MjIwMzIKK0k4MDQzMDQ1NDEKK0kxNTEzMDYzNDgzCitJMTQxNzM4MTY4OQorSS04MDQ3Nzg3MjkKK0kyMTE3NTY0MDgKK0k1NDQ1MzczMjIKK0k4OTA4ODE2NDEKK0kxNTAzNzgzNzQKK0kxNzY1NzM5MzkyCitJMTAxMTYwNDExNgorSTU4NDg4OTA5NQorSTE0MDA1MjA1NTQKK0k0MTM3NDc4MDgKK0ktMTc0MTk5MjU4NworSS0xODgyNDIxNTc0CitJLTEzNzMwMDE5MDMKK0ktMTg4NTM0ODUzOAorSTkwMzgxOTQ4MAorSTEwODMyMjAwMzgKK0ktMTMxODEwNTQyNAorSTE3NDA0MjE0MDQKK0kxNjkzMDg5NjI1CitJNzc1OTY1NTU3CitJMTMxOTYwODAzNworSS0yMTI3NDc1Nzg1CitJLTM2NzU2Mjg5NQorSS0xNDE2MjczNDUxCitJMTY5MzAwMDMyNworSS0xMjE3NDM4NDIxCitJODM0NDA1NTIyCitJLTEyODI4NzI3NQorSTg2NDA1NzU0OAorSS05NzM5MTczNTYKK0k3MzA0MTExCitJMTcxMjI1MzE4MgorSTEzNTM4OTc3NDEKK0k2NzI5ODIyODgKK0kxNzc4NTc1NTU5CitJLTQwMzA1ODM3NworSS0zODU0MDM3OAorSS0xMzkzNzEzNDk2CitJMTMxOTMxNzEKK0kxMTI3MTk2MjAwCitJMjA1MTc2NDcyCitJLTIxMDQ3OTA1MDYKK0kyOTk5ODU0MTYKK0kxNDAzNTQxNjg1CitJLTEwMTgyNzA2NjcKK0ktMTk4MDY3NzQ5MAorSS0xMTgyNjI1Nzk3CitJMTYzNzAxNTE4MQorSS0xNzk1MzU3NDE0CitJMTUxNDQxMzQwNQorSS05MjQ1MTYyMzcKK0ktMTg0MTg3MzY1MAorSS0xMDE0NTkxMjY5CitJMTU3NjYxNjA2NQorSS0xMzE5MTAzMTM1CitJLTEyMDg0Nzg0MAorSTIwNjIyNTk3NzgKK0ktOTI4NTA3MAorSTExNjA4OTAzMDAKK0ktNTc1MTM3MzEzCitJLTE1MDkxMDgyNzUKK0k0NjcwMTkyNgorSS0yODc1NjA5MTQKK0ktMjU2ODI0OTYwCitJNTc3NTU4MjUwCitJOTAwNTk4MzEwCitJOTQ0NjA3ODY3CitJMjEyMTE1NDkyMAorSS0xMTcwNTA1MTkyCitJLTEzNDcxNzA1NzUKK0k3NzI0Nzc3OAorSS0xODk5MDE1NzY1CitJMTIzNDEwMzMyNworSTEwMjcwNTM2NTgKK0kxOTM0NjMyMzIyCitJLTc5MjAzMTIzNAorSTExNDczMjI1MzYKK0kxMjkwNjU1MTE3CitJMTAwMjA1OTcxNQorSTEzMjU4OTg1MzgKK0k4OTYwMjk3OTMKK0ktNzkwOTQwNjk0CitJLTk4MDQ3MDcyMQorSS0xOTIyNjQ4MjU1CitJLTk1MTY3MjgxNAorSTI5MTU0Mzk0MworSTExNTg3NDAyMTgKK0ktMTk1OTAyMzczNgorSS0xOTc3MTg1MjM2CitJMTUyNzkwMDA3NgorSTUxNDEwNDE5NQorSS04MTQxNTQxMTMKK0ktNTkzMTU3ODgzCitJLTEwMjM3MDQ2NjAKK0kxMjg1Njg4Mzc3CitJLTIxMTc1MjUzODYKK0k3Njg5NTQzNjAKK0ktMzg2NzY4NDYKK0ktNzk5ODQ4NjU5CitJLTEzMDU1MTcyNTkKK0ktMTkzODIxMzY0MQorSS00NjIxNDY3NTgKK0ktMTY2MzMwMjg5MgorSTE4OTk1OTEwNjkKK0ktMjI5MzUzODgKK0ktMjc1ODU2OTc2CitJLTQ0MzczNjg5MworSS03Mzk0NDExNTYKK0k5Mzg2MjA2OAorSS04MzgxMDU2NjkKK0kxNzM1NjI5ODQ1CitJLTgxNzQ4NDIwNgorSTI4MDgxNDU1NQorSTE3NTM1NDcxNzkKK0kxODExMTIzNDc5CitJMTk3NDU0MzYzMgorSS00ODQ0NzQ2NQorSS02NDI2OTQzNDUKK0ktNTMxMTQ5NjEzCitJNTE4Njk4OTUzCitJLTIyMTY0MjYyNworSS02ODY1MTkxODcKK0k3NzY2NDQzMDMKK0kyNTc3NzQ0MDAKK0ktMTQ5OTEzNDg1NworSS0xMDU1MjczNDU1CitJLTIzNzAyMzk0MworSTE5ODE3NTIzMzAKK0ktOTE3NjcxNjYyCitJLTM3MjkwNTk4MworSTE1ODgwNTg0MjAKK0kxMTcxOTM2NjYwCitJLTE3MzA5NzcxMjEKK0kxMzYwMDI4OTg5CitJMTc2OTQ2OTI4NworSTE5MTA3MDk1NDIKK0ktODUyNjkyOTU5CitJMTM5Njk0NDY2NworSS0xNzIzOTk5MTU1CitJLTMxMDk3NTQzNQorSS0xOTY1NDUzOTU0CitJLTE2MzY4NTg1NzAKK0kyMDA1NjUwNzk0CitJNjgwMjkzNzE1CitJMTM1NTYyOTM4NgorSTg0NDUxNDY4NAorSS0xOTA5MTUyODA3CitJLTgwODY0NjA3NAorSTE5MzY1MTAwMTgKK0kxMTM0NDEzODEwCitJLTE0MzQxMTA0NworSS0xNDc4NDM2MzA0CitJMTM5NDk2OTI0NAorSS0xMTcwMTEwNjYwCitJMTk2MzExMjA4NgorSS0xNTE4MzUxMDQ5CitJLTE1MDYyODc0NDMKK0ktNDU1MDIzMDkwCitJLTg1NTM2NjAyOAorSS0xNzQ2Nzg1NTY4CitJOTMzOTkwODgyCitJLTcwMzYyNTE0MQorSS0yODUwMzY4NzIKK0kxODgyNzc5MDUKK0kxNDcxNTc4NjIwCitJLTk4MTM4MjgzNQorSS01ODY5NzQyMjAKK0k5NDU2MTk3NTgKK0kxNjA4Nzc4NDQ0CitJLTE3MDg1NDgwNjYKK0ktMTg5NzYyOTMyMAorSS00MjYxNzgxMAorSS04MzY4NDA3OTAKK0k1MzkxNTQ0ODcKK0ktMjM1NzA2OTYyCitJMzMyMDc0NDE4CitJLTU3NTcwMDU4OQorSTE1MzQ2MDgwMDMKK0k2MzIxMTY1NjAKK0ktMTgxOTc2MDY1MworSTY0MjA1Mjk1OAorSS03MjIzOTE3NzEKK0ktMTEwNDcxOTQ3NQorSS0xMTk2ODQ3MDg0CitJNTgyNDEzOTczCitJMTU2MzM5NDg3NgorSTY0MjAwNzk0NAorSTEwODk4OTQ1NgorSTM2MTYyNTAxNAorSTY3NzMwODYyNQorSS0xODA2NTI5NDk2CitJLTk1OTA1MDcwOAorSS0xODU4MjUxMDcwCitJLTIxNjA2OTgzMgorSTcwMTYyNDU3OQorSTUwMTIzODAzMworSTEyMjg3MDMwCitJMTg5NTEwNzEwNworSTIwODkwOTg2MzgKK0ktODc0ODA2MjMwCitJMTIzNjI3OTIwMworSTU2MzcxODg5MAorSS01NDQzNTI0ODkKK0ktMTg3OTcwNzQ5OAorSTE3Njc1ODMzOTMKK0ktMTc3NjYwNDY1NgorSS02OTMyOTQzMDEKK0ktODg4ODI4MzEKK0kxNjkzMDMzNTcKK0kxMjk5MTk2MTUyCitJLTExMjI3OTEwODkKK0ktMzc5MTU3MTcyCitJMTkzNDY3MTg1MQorSTE1NzU3MzY5NjEKK0ktMTk1NzMxNzQKK0ktMTQwMTUxMTAwOQorSTkzMDUxNjcKK0ktMTExNTE3NDQ2NworSTE2NzA3MzU1MzcKK0kxMjI2NDM2NTAxCitJLTIwMDQ1MjQ1MzUKK0kxNzY3NDYzODc4CitJLTE3MjI4NTUwNzkKK0ktNTU5NDEzOTI2CitJMTUyOTgxMDg1MQorSTEyMDEyNzIwODcKK0ktMTI5NzEzMDk3MQorSS0xMTg4MTQ5OTgyCitJMTM5NjU1NzE4OAorSS0zNzAzNTgzNDIKK0ktMTAwNjYxOTcwMgorSTE2MDA5NDI0NjMKK0k5MDYwODcxMzAKK0ktNzY5OTE5MDkKK0kyMDY5NTgwMTc5CitJLTE2NzQxOTUxODEKK0ktMjA5ODQwNDcyOQorSS05NDA5NzI0NTkKK0ktNTczMzk5MTg3CitJLTE5MzAzODYyNzcKK0ktNzIxMzExMTk5CitJLTY0NzgzNDc0NAorSTE0NTIxODE2NzEKK0k2ODg2ODE5MTYKK0kxODEyNzkzNzMxCitJMTcwNDM4MDYyMAorSS0xMzg5NjE1MTc5CitJODY2Mjg3ODM3CitJLTE0MzUyNjUwMDcKK0kzODg0MDA3ODIKK0ktMTQ3OTg2NjAwCitJLTE2MTM1OTg4NTEKK0ktMTA0MDM0NzQwOAorSTc4MjA2MzMyMworSS0yMzkyODIwMzEKK0ktNTc1OTY2NzIyCitJLTE4NjUyMDgxNzQKK0ktNDgxMzY1MTQ2CitJNTc5NTcyODAzCitJLTEyMzk0ODE0OTQKK0kzMzUzNjEyODAKK0ktNDI5NzIyOTQ3CitJMTg4MTc3Mjc4OQorSTE5MDgxMDM4MDgKK0kxNjUzNjkwMDEzCitJLTE2Njg1ODgzNDQKK0kxOTMzNzg3OTUzCitJLTIwMzM0ODA2MDkKK0kyMjE2Mjc5NworSS0xNTE2NTI3MDQwCitJLTQ2MTIzMjQ4MgorSS0xNjIwMTM3MgorSS0yMDQzMDkyMDMwCitJMTE0OTkwMzM3CitJLTE1MjQwOTAwODQKK0kxNDU2Mzc0MDIwCitJNDU4NjA2NDQwCitJLTE5MjgwODMyMTgKK0kyMjc3NzMxMjUKK0ktMTEyOTAyODE1OQorSTE2Nzg2ODkKK0kxNTc1ODk2OTA3CitJLTE3OTI5MzUyMjAKK0ktMTUxMzg3NTc1CitJNjQwODQwODgKK0ktOTU3MzcyMTUKK0kxMzM3MzM1Njg4CitJLTE5NjM0NjYzNDUKK0kxMjQzMzE1MTMwCitJLTE3OTg1MTg0MTEKK0ktNTQ2MDEzMjEyCitJLTYwNzA2NTM5NgorSTEyMTk4MjQxNjAKK0kxNzE1MjE4NDY5CitJLTEzNjgxNjM3ODMKK0kxNzAxNTUyOTEzCitJLTM4MTExNDg4OAorSTEwNjg4MjE3MTcKK0kyNjYwNjI5NzEKK0ktMjA2NjUxMzE3MgorSTE3Njc0MDcyMjkKK0ktNzgwOTM2NDE0CitJLTcwNTQxMzQ0MworSS0xMjU2MjY4ODQ3CitJMTY0Njg3NDE0OQorSTExMDc2OTAzNTMKK0k4MzkxMzMwNzIKK0k2NzAwMTc0OQorSTg2MDc2MzUwMworSTg4NDg4MDYxMworSTkxOTc3MDg0CitJNzU1MzcxOTMzCitJNDIwNzQ1MTUzCitJLTU3ODQ4MDY5MAorSS0xNTIwMTkzNTUxCitJMTAxMTM2OTMzMQorSS05OTc1NDU3NQorSS03MzMxNDEwNjQKK0ktNTAwNTk4NTg4CitJMTA4MTEyNDI3MQorSS0xMzQxMjY2NTc1CitJOTIxMDAyNjEyCitJLTg0ODg1MjQ4NworSS0xOTA0NDY3MzQxCitJLTEyOTQyNTY5NzMKK0ktOTQwNzQ3MTQKK0ktMTc3ODc1ODQ5OAorSS0xNDAxMTg4NTQ3CitJMjEwMTgzMDU3OAorSTIwNTg4NjQ4NzcKK0ktMjcyODc1OTkxCitJLTEzNzU4NTQ3NzkKK0ktMTMzMjkzNzg3MAorSTYxOTQyNTUyNQorSS0xMDM0NTI5NjM5CitJLTM2NDU0MzkzCitJLTIwMzA0OTk5ODUKK0ktMTYzNzEyNzUwMAorSS0xNDA4MTEwMjg3CitJLTIxMDg2MjU3NDkKK0ktOTYxMDA3NDM2CitJMTQ3NTY1NDk1MQorSS03OTE5NDYyNTEKK0kxNjY3NzkyMTE1CitJMTgxODk3ODgzMAorSTE4OTc5ODA1MTQKK0kxOTU5NTQ2NDc3CitJLTc0NDc4OTExCitJLTUwODY0MzM0NworSTQ2MTU5NDM5OQorSTUzODgwMjcxNQorSS0yMDk0OTcwMDcxCitJLTIwNzY2NjAyNTMKK0kxMDkxMzU4OTQ0CitJMTk0NDAyOTI0NgorSS0zNDM5NTc0MzYKK0ktMTkxNTg0NTAyMgorSTEyMzc2MjAxODgKK0kxMTQ0MTI1MTc0CitJMTUyMjE5MDUyMAorSS02NzAyNTI5NTIKK0ktMTk0NjkyMjYKK0k2NzU2MjY1MTAKK0k3NTg3NTAwOTYKK0k5MDk3MjQzNTQKK0ktMTg0NjI1OTY1MgorSTU0NDY2OTM0MworSTQ0NTE4MjQ5NQorSS04MjE1MTk5MzAKK0ktMTEyNDI3OTY4NQorSS0xNjY4OTk1MTIyCitJMTY1MzI4NDc5MworSS02Nzg1NTUxNTEKK0ktNjg3NTEzMjA3CitJMTU1ODI1OTQ0NQorSS0xOTc4ODY2ODM5CitJMTU1ODgzNTYwMQorSTE3MzIxMzg0NzIKK0ktMTkwNDc5MzM2MworSTYyMDAyMDI5NgorSTE1NjI1OTc4NzQKK0kxOTQyNjE3MjI3CitJLTU0OTYzMjU1MgorSTcyMTYwMzc5NQorSTQxNzk3ODQ1NgorSS0xMzU1MjgxNTIyCitJLTUzODA2NTIwOAorSS0xMDc5NTIzMTk2CitJMTg3Mzc1Njk5CitJNDQ5MDY0OTcyCitJMTAxODA4Mzk0NworSTE2MzIzODg4ODIKK0ktNDkzMjY5ODY2CitJOTI3NjkwNDEKK0kxNDc3MTQ2NzUwCitJMTc4MjcwODQwNAorSTQ0NDg3MzM3NgorSTEwODU4NTExMDQKK0ktNjgyMzI3MgorSS0xMzAyMjUxODUzCitJMTYwMjA1MDY4OAorSS0xMDQyMTg3ODI0CitJMjg3MTYxNzQ1CitJLTE5NzIwOTQ0NzkKK0kxMDMyNzE0OTEKK0kyMTMxNjE5NzczCitJLTIwNjQxMTU4NzAKK0k3NjY4MTU0OTgKK0k5OTA4NjE0NTgKK0ktMTY2NDQwNzM3OAorSTEwODM3NDY3NTYKK0ktMTAxODMzMTkwNAorSS02NzczMTU2ODcKK0ktOTUxNjcwNjQ3CitJLTk1MjM1Njg3NAorSTQ1MTQ2MDYwOQorSS04MTg2MTU1NjQKK0k4NTE0Mzk1MDgKK0k2NTYzNjI2MzQKK0ktMTM1MTI0MDQ4NQorSTgyMzM3ODA3OAorSTE5ODU1OTczODUKK0k1OTc3NTc3NDAKK0ktMTUxMjMwMzA1NworSTE1OTA4NzI3OTgKK0kxMTA4NDI0MjEzCitJODE4ODUwODk4CitJLTEzNjg1OTQzMDYKK0ktMjAxMTA3NzYxCitJMTc5MzM3MDM3OAorSTEyNDc1OTc2MTEKK0ktMTU5NDMyNjI2NAorSS02MDE2NTM4OTAKK0k0Mjc2NDI3NTkKK0kyNDgzMjIxMTMKK0ktMjkyNTQ1MzM4CitJMTcwODk4NTg3MAorSTE5MTcwNDI3NzEKK0k0MjkzNTQ1MDMKK0ktNDc4NDcwMzI5CitJNzkzOTYwMDE0CitJMzY5OTM5MTMzCitJMTcyODE4OTE1NworSS01MTg5NjM2MjYKK0ktMjc4NTIzOTc0CitJLTE4NzcyODk2OTYKK0ktMjA4ODYxNzY1OAorSS0xMzY3OTQwMDQ5CitJLTYyMjk1OTI1CitJMTk3OTc1MTE5CitJLTI1MjkwMDc3NworSTgwMzQzMDUzOQorSTQ4NTc1OTQ0MQorSS01MjgyODM0ODAKK0ktMTI4NzQ0Mzk2MworSS00Nzg2MTc0NDQKK0ktODYxOTA2OTQ2CitJLTY0OTA5NTU1NQorSS04OTMxODQzMzcKK0kyMDUwNTcxMzIyCitJODAzNDMzMTMzCitJMTYyOTU3NDU3MQorSTE2NDk3MjA0MTcKK0ktMjA1MDIyNTIwOQorSTEyMDg1OTg5NzcKK0k3MjAzMTQzNDQKK0ktNjE1MTY2MjUxCitJLTgzNTA3NzEyNworSS0xNDA1MzcyNDI5CitJOTk1Njk4MDY0CitJMTQ4MTIzMjQwCitJLTk0MzAxNjY3NgorSS01OTQ2MDk2MjIKK0ktMTM4MTU5NjcxMQorSTEwMTcxOTUzMDEKK0ktMTI2ODg5MzAxMworSS0xODE1OTg1MTc5CitJLTEzOTM1NzAzNTEKK0ktODcwMDI3MzY0CitJLTQ3NjA2NDQ3MgorSTE4NTU4MjY0NQorSTU2OTg2MzMyNgorSTEwOTg1ODQyNjcKK0ktMTU5OTE0NzAwNgorSS00ODUwNTQzOTEKK0ktODUyMDk4MzY1CitJMTQ3NzMyMDEzNQorSTIyMjMxNjc2MgorSS0xNTE1NTgzMDY0CitJLTkzNTA1MTM2NworSTM5MzM4MzA2MworSTgxOTYxNzIyNgorSTcyMjkyMTgzNworSS0xMjQxODA2NDk5CitJLTEzNTg1NjYzODUKK0kxNjY2ODEzNTkxCitJMTMzMzg3NTExNAorSS0xNjYzNjg4MzE3CitJLTQ3MjU0NjIzCitJLTg4NTgwMDcyNgorSTMwNzM4ODk5MQorSS0xMjE5NDU5NDk2CitJMTM3NDg3MDMwMAorSTIxMzIwNDc4NzcKK0ktMTM4NTYyNDE5OAorSS0yNDUxMzkyMDYKK0kxMDE1MTM5MjE0CitJLTkyNjE5ODU1OQorSTE5Njk3OTg4NjgKK0ktMTk1MDQ4MDYxOQorSS01NTkxOTM0MzIKK0ktMTI1NjQ0NjUxOAorSS0xOTgzNDc2OTgxCitJNzkwMTc5NjU1CitJMTAwNDI4OTY1OQorSTE1NDE4Mjc2MTcKK0kxNTU1ODA1NTc1CitJNTAxMTI3MzMzCitJLTExMjM0NDY3OTcKK0ktNDUzMjMwOTE1CitJMjAzNTEwNDg4MworSTEyOTYxMjIzOTgKK0ktMTg0MzY5ODYwNAorSS03MTU0NjQ1ODgKK0kzMzcxNDM5NzEKK0ktMTk3MjExOTE5MgorSTYwNjc3NzkwOQorSTcyNjk3NzMwMgorSS0xMTQ5NTAxODcyCitJLTE5NjM3MzM1MjIKK0ktMTc5NzUwNDY0NAorSTYyNAordHAyCitOdHAzCitiLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9yYW5kdjJfNjQucGNrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3JhbmR2Ml82NC5wY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkwZGQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9yYW5kdjJfNjQucGNrCkBAIC0wLDAgKzEsNjMzIEBACitjcmFuZG9tCitSYW5kb20KK3AwCisodFJwMQorKEkyCisoSTIxNDc0ODM2NDgKK0kxODEyMTE1NjgyCitJMjc0MTc1NTQ5NworSTEwMjgwNTU3MzAKK0k4MDkxNjYwMzYKK0kyNzczNjI4NjUwCitJNjIzMjE5NTAKK0k1MzUyOTAwNDMKK0kzNDk4Nzc4MDAKK0k5NzYxNjcwMzkKK0kyNDkwNjk2OTQwCitJMzYzMTMyNjk1NQorSTIxMDc5OTExMTQKK0kyOTQxMjA1NzkzCitJMzE5OTYxMTYwNQorSTE4NzE5NzE1NTYKK0kxNDU2MTA4NTQwCitJMjk4NDU5MTA0NAorSTE0MDgzNjgwMQorSTQyMDMyMjczMTAKK0kzNjUyNzIyOTgwCitJNDAzMTk3MTIzNAorSTU1NTc2OTc2MAorSTY5NzMwMTI5NgorSTIzNDc2Mzg4ODAKK0kzMzAyMzM1ODU4CitJMzIwMjU1MTYyCitJMjU1MzU4NjYwOAorSTE1NzAyMjQzNjEKK0kyODM4NzgwOTEyCitJMjMxNTgzNDkxOAorSTIzNTEzNDgxNTgKK0kzNTQ1NDMzMDE1CitJMjI5MjAxODU3OQorSTExNzc1NjkzMzEKK0k3NTg0OTc1NTkKK0kyOTEzMzExMTc1CitJMTAxNDk0ODg4MAorSTE3OTM2MTkyNDMKK0kzOTgyNDUxMDUzCitJMzg1MDk4ODM0MgorSTIzOTM5ODQzMjQKK0kxNTgzMTAwMDkzCitJMzE0NDc0MjU0MworSTM2NTUwNDc0OTMKK0kzNTA3NTMyMzg1CitJMzA5NDUxNTQ0MgorSTM1MDA0MjQzNAorSTI0NTUyOTQ4NDQKK0kxMDM4NzM5MzEyCitJMzEzODA5MTUyCitJMTg5NDMzMDcyCitJMTY1MzE2NTQ1MgorSTQxODY2NTA1OTMKK0kxOTI4MTQ1NQorSTI1ODk2ODA2MTkKK0k0MTQ1OTMxNTkwCitJNDI4MzI2NjExOAorSTYzNjI4MzE3MgorSTk0MzYxODMzNworSTMxNzAxODQ2MzMKK0kyMzA4NzY2MjMxCitJNjM0NjE1MTU5CitJNTM4MTUyNjQ3CitJMjA3OTU3Njg5MQorSTEwMjk0NDI2MTYKK0kzNDEwNjg5NDEyCitJMTM3MDI5Mjc2MQorSTEwNzE3MTg5NzgKK0kyMTM5NDk2MzIyCitJMTg3NjY5OTU0MworSTM0ODU4NjYxODcKK0kzMTU3NDkwMTMwCitJMTYzMzEwNTM4NgorSTE0NTMyNTMxNjAKK0kzODQxMzIyMDgwCitJMzc4OTYwODkyNAorSTQxMTA3NzA3OTIKK0k5NTA4MzY3MworSTkzMTM1NDYyNworSTIwNjUzODk1OTEKK0kzNDQ4MzM5ODI3CitJMzM0ODIwNDU3NworSTMyNjM1Mjg1NjAKK0kyNDExMzI0NTkwCitJNDAwMzA1NTAyNgorSTE4Njk2NzAwOTMKK0kyNzM3MjMxODQzCitJNDE1MDcwMTE1NQorSTI2ODk2Njc2MjEKK0kyOTkzMjYzMjI0CitJMzIzOTg5MDE0MAorSTExOTE0MzA0ODMKK0kxMjE0Mzk5Nzc5CitJMzYyMzQyODUzMworSTE4MTcwNTg4NjYKK0kzMDUyMjc0NDUxCitJMzI2MDMwMDgyCitJMTUwNTEyOTMxMgorSTIzMDY4MTIyNjIKK0kxMzQ5MTUwMzYzCitJMTA5OTEyNzg5NQorSTI1NDM0NjU1NzQKK0kyMzk2MzgwMTkzCitJNTAzOTI2NDY2CitJMTYwNzEwOTczMAorSTM0NTE3MTY4MTcKK0k1ODAzNzExNAorSTQyOTAwODExMTkKK0k5NDc1MTc1OTcKK0kzMDgzNDQwMTg2CitJNTIwNTIyNjMwCitJMjk0ODk2MjQ5NgorSTQxODQzMTk1NzQKK0kyOTU3NjM2MzM1CitJNjY4Mzc0MjAxCitJMjMyNTQ0NjQ3MworSTQ3Mjc4NTMxNAorSTM3OTE5MzIzNjYKK0k1NzMwMTcxODkKK0kyMTg1NzI1Mzc5CitJMTI2MjI1MTQ5MgorSTM1MjUwODkzNzkKK0kyOTUxMjYyNjUzCitJMTMwNTM0NzMwNQorSTk0MDk1ODEyMgorSTMzNDM3NTQ1NjYKK0kzNTkzNzE3NDQKK0kzODc0MDQ0OTczCitJMzk2ODk3MjMyCitJMTQ3MTg4MjQ4CitJNzE2NjgzNzAzCitJNDAxMzg4MDMxNQorSTExMzMzNTk1ODYKK0kxNzk0NjEyMjQ5CitJMzQ4MDgxNTE5MgorSTM5ODg3ODc4MDQKK0kxNzI5MzU1ODA5CitJNTczNDA4NTQyCitJMTQxOTMxMDkzNAorSTE3NzAwMzA0NDcKK0kzNTUyODQ1NTY3CitJMTY5Mzk3NjUwMgorSTEyNzExODk4OTMKK0kyMjk4MjM2NzM4CitJMjA0OTIxOTAyNworSTM0NjQxOTgwNzAKK0kxMjMzNTc0MDgyCitJMTAwNzQ1MTc4MQorSTE4MzgyNTM3NTAKK0k2ODcwOTY1OTMKK0kxMTMxMzc1NjAzCitJMTIyMzAxMzg5NQorSTE0OTA0Nzg0MzUKK0kzMzkyNjU0MzkKK0k0MjMyNzkyNjU5CitJNDkxNTM4NTM2CitJMjgxNjI1Njc2OQorSTEwNDQwOTc1MjIKK0kyNTY2MjI3MDQ5CitJNzQ4NzYyNzkzCitJMTUxMTgzMDQ5NAorSTM1OTMyNTk4MjIKK0k0MTIxMjc5MjEzCitJMzczNTU0MTMwOQorSTM2MDk3OTQ3OTcKK0kxOTM5OTQyMzMxCitJMzc3NTcwNDM0CitJMTQzNzk1NzU1NAorSTE4MzEyODU2OTYKK0k1NTA2MjgxMQorSTIwNDY3ODMxMTAKK0kxMzAzOTAyMjgzCitJMTgzODM0OTg3NworSTQyMDk5MzU1NgorSTEyNTYzOTI1NjAKK0kyNzk1MjE2NTA2CitJMjc4MzY4NzkyNAorSTMzMjIzMDMxNjkKK0k1MTI3OTQ3NDkKK0kzMDg0MDU4MjYKK0k1MTcxNjQ0MjkKK0kzMzIwNDM2MDIyCitJMTMyODQwMzYzMgorSTIyNjkxODQ3NDYKK0kzNzI5NTIyODEwCitJMzMwNDMxNDQ1MAorSTIyMzg3NTYxMjQKK0kxNjkwNTgxMzYxCitJMzgxMzI3NzUzMgorSTQxMTk3MDY4NzkKK0kyNjU5NDQ3ODc1CitJMzg4ODE4OTc4CitJMjA2NDU4MDgxNAorSTE1ODYyMjc2NzYKK0kyNjI3NTIyNjg1CitJMjAxNzc5MjI2OQorSTU0NzkyODEwOQorSTg1OTEwNzQ1MAorSTEwNjIyMzg5MjkKK0k4NTg4ODYyMzcKK0kzNzk1NzgzMTQ2CitJNDE3MzkxNDc1NgorSTM4MzU5MTU5NjUKK0kzMzI5NTA0ODIxCitJMzQ5NDU3OTkwNAorSTgzODg2MzIwNQorSTMzOTk3MzQ3MjQKK0k0MjQ3Mzg3NDgxCitJMzYxODQxNDgzNAorSTI5ODQ0MzM3OTgKK0kyMTY1MjA1NTYxCitJNDI2MDY4NTY4NAorSTMwNDU5MDQyNDQKK0kzNDUwMDkzODM2CitJMzU5NzMwNzU5NQorSTMyMTU4NTExNjYKK0kzMTYyODAxMzI4CitJMjU1ODI4Mzc5OQorSTk1MDA2ODEwNQorSTE4Mjk2NjQxMTcKK0kzMTA4NTQyOTg3CitJMjM3ODg2MDUyNworSTc5MDAyMzQ2MAorSTI4MDA4Nzc1MAorSTExNzE0NzgwMTgKK0kyMzMzNjUzNzI4CitJMzk3NjkzMjE0MAorSTg5Njc0NjE1MgorSTE4MDI0OTQxOTUKK0kxMjMyODczNzk0CitJMjc0OTQ0MDgzNgorSTIwMzIwMzcyOTYKK0kyMDEyMDkxNjgyCitJMTI5NjEzMTAzNAorSTM4OTIxMzMzODUKK0k5MDgxNjEzMzQKK0kyMjk2NzkxNzk1CitJNTQ4MTY5Nzk0CitJNjk2MjY1CitJODkzMTU2ODI4CitJNDI2OTA0NzA5CitJMzU2NTM3NDUzNQorSTI2NTU5MDY4MjUKK0kyNzkyMTc4NTE1CitJMjQwNjgxNDYzMgorSTQwMzg4NDc1NzkKK0kzMTIzOTM0NjQyCitJMjE5NzUwMzAwNAorSTM1MzUwMzI1OTcKK0kyMjY2MjE2Njg5CitJMjExNzYxMzQ2MgorSTE3ODc0NDg1MTgKK0kxODc1MDg5NDE2CitJMjAzNzE2NTM4NAorSTExNDA2NzYzMjEKK0kzNjA2Mjk2NDY0CitJMzIyOTEzODIzMQorSTI0NTgyNjcxMzIKK0kxODc0NjUxMTcxCitJMzMzMTkwMDg2NworSTEwMDA1NTc2NTQKK0kxNDMyODYxNzAxCitJNDczNjM2MzIzCitJMjY5MTc4MzkyNworSTE4NzE0Mzc0NDcKK0kxMzI4MDE2NDAxCitJNDExODY5MDA2MgorSTQ0OTQ2NzYwMgorSTY4MTc4OTAzNQorSTg2NDg4OTQ0MgorSTEyMDA4ODg5MjgKK0k3NTc2OTQ0NQorSTQwMDg2OTAwMzcKK0kyNDY0NTc3NjY3CitJNDE2Nzc5NTgyMworSTMwNzAwOTc2NDgKK0kyNTc5MTc0ODgyCitJMTIxNjg4NjU2OAorSTM4MTAxMTYzNDMKK0kyMjQ5NTA3NDg1CitJMzI2NjkwMzQ4MAorSTM2NzEyMzM0ODAKK0kxMDAxOTE2NTgKK0kzMDg3MTIxMzM0CitJMzY1MDYzMDg3CitJMzgyMTI3NTE3NgorSTIxNjUwNTI4NDgKK0kxMjgyNDY1MjQ1CitJMzYwMTU3MDYzNworSTMxMzI0MTMyMzYKK0kyNzgwNTcwNDU5CitJMzIyMjE0MjkxNworSTMxMjk3OTQ2OTIKK0kyNjExNTkwODExCitJOTQ3MDMxNjc3CitJMjk5MTkwODkzOAorSTc1MDk5Nzk0OQorSTM2MzI1NzUxMzEKK0kxNjMyMDE0NDYxCitJMjg0NjQ4NDc1NQorSTIzNDcyNjE3NzkKK0kyOTAzOTU5NDQ4CitJMTM5NzMxNjY4NgorSTE5MDQ1NzgzOTIKK0k3NzQ2NDk1NzgKK0kzMTY0NTk4NTU4CitJMjQyOTU4NzYwOQorSTczODI0NDUxNgorSTE1NjMzMDQ5NzUKK0kxMzk5MzE3NDE0CitJMTAyMTMxNjI5NworSTMxODc5MzMyMzQKK0kyMTI2NzgwNzU3CitJNDAxMTkwNzg0NworSTQwOTUxNjkyMTkKK0kzMzU4MDEwMDU0CitJMjcyOTk3ODI0NworSTM3MzY4MTE2NDYKK0kzMDA5NjU2NDEwCitJMjg5MzA0MzYzNworSTQwMjc0NDczODUKK0kxMjM5NjEwMTEwCitJMTQ4ODgwNjkwMAorSTI2NzQ4NjY4NDQKK0k0NDI4NzYzNzQKK0kyODUzNjg3MjYwCitJMjc4NTkyMTAwNQorSTMxNTEzNzg1MjgKK0kxMTgwNTY3CitJMjgwMzE0Njk2NAorSTk4MjIyMTc1OQorSTIxOTI5MTk0MTcKK0kzMDg3MDI2MTgxCitJMjQ4MDgzODAwMgorSTczODQ1MjkyMQorSTY4Nzk4NjE4NQorSTMwNDkzNzE2NzYKK0kzNjM2NDkyOTU0CitJMzQ2ODMxMTI5OQorSTIzNzk2MjExMDIKK0k3ODg5ODg2MzMKK0kxNjQzMjEwNjAxCitJMjk4Mzk5ODE2OAorSTI0OTI3MzA4MDEKK0kyNTg2MDQ4NzA1CitJNjA0MDczMDI5CitJNDEyMTA4MjgxNQorSTE0OTY0NzY5MjgKK0kyOTcyMzU3MTEwCitJMjY2MzExNjk2OAorSTI2NDI2Mjg1OTIKK0kyMTE2MDUyMDM5CitJNDg3MTg2Mjc5CitJMjU3NzY4MDMyOAorSTM5NzQ3NjY2MTQKK0k3MzA3NzY2MzYKK0kzODQyNTI4ODU1CitJMTkyOTA5MzY5NQorSTQ0NjI2NjIyCitJMzk4OTkwODgzMworSTE2OTU0MjYyMjIKK0kzNjc1NDc5MzgyCitJMzA1MTc4NDk2NAorSTE1MTQ4NzY2MTMKK0kxMjU0MDM2NTk1CitJMjQyMDQ1MDY0OQorSTMwMzQzNzczNjEKK0kyMzMyOTkwNTkwCitJMTUzNTE3NTEyNgorSTE4NTgzNDM4NAorSTExMDczNzI5MDAKK0kxNzA3Mjc4MTg1CitJMTI4NjI4NTI5NQorSTMzMzI1NzQyMjUKK0kyNzg1NjcyNDM3CitJODgzMTcwNjQ1CitJMjAwNTY2NjQ3MworSTM0MDMxMzEzMjcKK0k0MTIyMDIxMzUyCitJMTQ2NDAzMjg1OAorSTM3MDI1NzYxMTIKK0kyNjA1NTQ1OTgKK0kxODM3NzMxNjUwCitJMjU5NDQzNTM0NQorSTc1NzcxMDQ5CitJMjAxMjQ4NDI4OQorSTMwNTg2NDk3NzUKK0kyOTk3OTcwMworSTM4NjEzMzUzMzUKK0kyNTA2NDk1MTUyCitJMzc4NjQ0ODcwNAorSTQ0Mjk0Nzc5MAorSTI1ODI3MjQ3NzQKK0k0MjkxMzM2MjQzCitJMjU2ODE4OTg0MworSTE5MjMwNzI2OTAKK0kxMTIxNTg5NjExCitJODM3Njk2MzAyCitJMzI4NDYzMTcyMAorSTM4NjUwMjEzMjQKK0kzNTc2NDUzMTY1CitJMjU1OTUzMTYyOQorSTE0NTkyMzE3NjIKK0kzNTA2NTUwMDM2CitJMzc1NDQyMDE1OQorSTI2MjIwMDA3NTcKK0kxMjQyMjg1OTYKK0kxMDg0MzI4NjA1CitJMTY5MjgzMDc1MworSTU0NzI3MzU1OAorSTY3NDI4MjYyMQorSTY1NTI1OTEwMworSTMxODg2Mjk2MTAKK0k0OTA1MDIxNzQKK0kyMDgxMDAxMjkzCitJMzE5MTMzMDcwNAorSTQxMDk5NDM1OTMKK0kxODU5OTQ4NTA0CitJMzE2MzgwNjQ2MAorSTUwODgzMzE2OAorSTEyNTYzNzEwMzMKK0kyNzA5MjUzNzkwCitJMjA2ODk1NjU3MgorSTMwOTI4NDI4MTQKK0kzOTEzOTI2NTI5CitJMjAzOTYzODc1OQorSTk4MTk4MjUyOQorSTUzNjA5NDE5MAorSTM2ODg1NTI5NQorSTUxOTkzOTc1CitJMTU5NzQ4MDczMgorSTQwNTgxNzU1MjIKK0kyMTU1ODk2NzAyCitJMzE5NjI1MTk5MQorSTEwODE5MTM4OTMKK0kzOTUyMzUzNzg4CitJMzU0NTU0ODEwOAorSTIzNzA2Njk2NDcKK0kyMjA2NTcyMzA4CitJMjU3NjM5Mjk5MQorSTE3MzIzMDMzNzQKK0kxMTUzMTM2MjkwCitJNTM3NjQxOTU1CitJMTczODY5MTc0NworSTMyMzI4NTQxODYKK0kyNTM5NjMyMjA2CitJMjgyOTc2MDI3OAorSTMwNTgxODc4NTMKK0kxMjAyNDI1NzkyCitJMzc2MjM2MTk3MAorSTI4NjM5NDkzNDIKK0kyNjQwNjM1ODY3CitJMzc2NjM4NzQ0CitJMTg1NzY3OTc1NworSTMzMDc5ODA4NworSTE0NTc0MDA1MDUKK0kxMTM1NjEwMDQ2CitJNjA2NDAwNzE1CitJMTg1OTUzNjAyNgorSTUwOTgxMTMzNQorSTUyOTc3MjMwOAorSTI1NzkyNzMyNDQKK0kxODkwMzgyMDA0CitJMzk1OTkwODg3NgorSTI2MTIzMzU5NzEKK0kyODM0MDUyMjI3CitJMTQzNDQ3NTk4NgorSTM2ODQyMDI3MTcKK0k0MDE1MDExMzQ1CitJNTgyNTY3ODUyCitJMzY4OTk2OTU3MQorSTM5MzQ3NTM0NjAKK0kzMDM0OTYwNjkxCitJMjA4NTczMjkyCitJNDAwNDExMzc0MgorSTM5OTI5MDQ4NDIKK0kyNTg3MTUzNzE5CitJMzUyOTE3OTA3OQorSTE1NjU0MjQ5ODcKK0k3NzkxMzA2NzgKK0kxMDQ4NTgyOTM1CitJMzIxMzU5MTYyMgorSTM2MDc3OTM0MzQKK0kzOTUxMjU0OTM3CitJMjA0NzgxMTkwMQorSTc1MDg4NTAKK0kyNDg1NDQ2MDUKK0k0MjEwMDkwMzI0CitJMjMzMTQ5MDg4NAorSTcwMDU3MjEzCitJNzc2NDc0OTQ1CitJMTM0NTUyODg4OQorSTMyOTA0MDM2MTIKK0kxNjY0OTU1MjY5CitJMTUzMzE0MzExNgorSTU0NTAwMzQyNAorSTQxNDE1NjQ0NzgKK0kxMjU3MzI2MTM5CitJODY4ODQzNjAxCitJMjMzNzYwMzAyOQorSTE5MTgxMzE0NDkKK0kxODQzNDM5NTIzCitJMTEyNTUxOTAzNQorSTY3MzM0MDExOAorSTQyMTQwODg1MgorSTE1MjA0NTQ5MDYKK0kxODA0NzIyNjMwCitJMzYyMTI1NDE5NgorSTIzMjk5NjgwMDAKK0kzOTQ2NDY3MgorSTQzMDU4MzEzNAorSTI5NDAyNjUxMgorSTUzOTc4NTI1CitJMjg5MjI3NjEwNQorSTE0MTg4NjM3NjQKK0kzNDE5MDU0NDUxCitJMTM5MTU5NTc5NworSTM1NDQ5ODE3OTgKK0k0MTkxNzgwODU4CitJODI1NjcyMzU3CitJMjk3MjAwMDg0NAorSTE1NzEzMDUwNjkKK0k0MjMxOTgyODQ1CitJMzYxMTkxNjQxOQorSTMwNDUxNjMxNjgKK0kyOTgyMzQ5NzMzCitJMjc4NTcyMTQxCitJNDIxNTMzODA3OAorSTgzOTg2MDUwNAorSTE4MTkxNTE3NzkKK0kxNDEyMzQ3NDc5CitJMTM4Njc3MDM1MworSTM5MTQ1ODk0OTEKK0kzNzgzMTA0OTc3CitJNDEyNDI5NjczMworSTgzMDU0NjI1OAorSTg5ODI1NjI0CitJNDExMDYwMTMyOAorSTI1NDU0ODM0MjkKK0kzMDA2MDA1MjcKK0k1MTY2NDExNTgKK0kzNjkzMDIxMDM0CitJMjg1MjkxMjg1NAorSTMyNDAwMzk4NjgKK0k0MTY3NDA3OTU5CitJMTQ3OTU1Nzk0NgorSTM2MjExODg4MDQKK0kxMzkxNTkwOTQ0CitJMzU3ODQ0MTEyOAorSTEyMjcwNTU1NTYKK0k0MDY4OTgzOTYKK0kzMDY0MDU0OTgzCitJMjU4MzUzMzgKK0k0MDI2NjQxNjUKK0k0MDk3NjgyNzc5CitJMjEwNjcyODAxMgorSTIwMzYxMzYyMgorSTMwNDU0Njc2ODYKK0kxMzgxNzI2NDM4CitJMzc5ODY3MDExMAorSTEzNDIzMTQ5NjEKK0kzNTUyNDk3MzYxCitJNTM1OTEzNjE5CitJMjYyNTc4NzU4MworSTE2MDY1NzQzMDcKK0kxMTAxMjY5NjMwCitJMTk1MDUxMzc1MgorSTExMjEzNTU4NjIKK0kzNTg2ODE2OTAzCitJNDM4NTI5OTg0CitJMjQ3MzE4MjEyMQorSTEyMjk5OTcyMDMKK0k0MDU0NDU5NDAKK0kxNjk1NTM1MzE1CitJNDI3MDE0MzM2CitJMzkxNjc2ODQzMAorSTM5MjI5ODM1OQorSTE4ODQ2NDI4NjgKK0kxMjQ0NzMwODIxCitJNzQxMDU4MDgwCitJNTY3NDc5OTU3CitJMzUyNzYyMTE2OAorSTMxOTE5NzEwMTEKK0kzMjY3MDY5MTA0CitJNDEwODY2ODE0NgorSTE1MjA3OTU1ODcKK0kxNjY1ODEwMDYKK0k0NzM3OTQ0NzcKK0kxNTYyMTI2NTUwCitJOTI5ODQzMDEwCitJODg5NTMzMjk0CitJMTI2NjU1NjYwOAorSTg3NDUxODY1MAorSTM1MjAxNjIwOTIKK0kzMDEzNzY1MDQ5CitJNDIyMDIzMTQxNAorSTU0NzI0NjQ0OQorSTM5OTgwOTM3NjkKK0kzNzM3MTkzNzQ2CitJMzg3Mjk0NDIwNworSTc5MzY1MTg3NgorSTI2MDYzODQzMTgKK0k4NzU5OTEwMTIKK0kxMzk0ODM2MzM0CitJNDEwMjAxMTY0NAorSTg1NDM4MDQyNgorSTI2MTg2NjY3NjcKK0kyNTY4MzAyMDAwCitJMTk5NTUxMjEzMgorSTIyOTQ5MTA5MworSTI2NzM1MDAyODYKK0kzMzY0NTUwNzM5CitJMzgzNjkyMzQxNgorSTI0MzY1Njk4NworSTM5NDQzODg5ODMKK0k0MDY0OTQ5Njc3CitJMTQxNjk1NjM3OAorSTE3MDMyNDQ0ODcKK0kzOTkwNzk4ODI5CitJMjAyMzQyNTc4MQorSTM5MjY3MDIyMTQKK0kxMjI5MDE1NTAxCitJMzE3NDI0NzgyNAorSTYyNAordHAyCitOdHAzCitiLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9yYW5kdjMucGNrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3JhbmR2My5wY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmYzM4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9yYW5kdjMucGNrCkBAIC0wLDAgKzEsNjMzIEBACitjcmFuZG9tCitSYW5kb20KK3AwCisodFJwMQorKEkzCisoTDIxNDc0ODM2NDhMCitMOTk0MDgxODMxTAorTDI4MDYyODcyNjVMCitMMjIyODk5OTgzMEwKK0wzMzk2NDk4MDY5TAorTDI5NTY4MDU0NTdMCitMMzI3MzkyNzc2MUwKK0w5MjA3MjY1MDdMCitMMTg2MjYyNDQ5MkwKK0wyOTIxMjkyNDg1TAorTDE3Nzk1MjY4NDNMCitMMjQ2OTEwNTUwM0wKK0wyNTE2OTYyOTNMCitMMTI1NDM5MDcxN0wKK0w3NzkxOTcwODBMCitMMzE2NTM1NjgzMEwKK0wyMDA3MzY1MjE4TAorTDE4NzAwMjg4MTJMCitMMjg5NjUxOTM2M0wKK0wxODU1NTc4NDM4TAorTDk3OTUxODQxNkwKK0wzNDgxNzEwMjQ2TAorTDMxOTE4NjE1MDdMCitMMzk5MzAwNjU5M0wKK0wyOTY3OTcxNDc5TAorTDMzNTMzNDI3NTNMCitMMzU3Njc4MjU3MkwKK0wzMzk2ODU1NThMCitMMjM2NzY3NTczMkwKK0wxMTYyMDg1NTVMCitMMTIyMDA1NDQzN0wKK0w0ODY1OTcwNTZMCitMMTkxMjExNTE0MUwKK0wxMDM3MDQ0NzkyTAorTDQwOTY5MDQ3MjNMCitMMzQwOTE0NjE3NUwKK0wzNzAxNjUxMjI3TAorTDMxNTgyNDYxMEwKK0w0MTM4NjA0NTgzTAorTDEzODU3NjQ4OTJMCitMMTkxODc4OTAwTAorTDIzMjA1ODIyMTlMCitMMzQyMDY3NzQ5NEwKK0wyNzc2NTAzMTY5TAorTDExNDgyNDc0MDNMCitMODI5NTU1MDY5TAorTDkwMjA2NDAxMkwKK0wyOTM0NjQyNzQxTAorTDI0NzcxMDg1NzdMCitMMjU4MzkyODIxN0wKK0wxNjU4NjEyNTc5TAorTDI4NjU0NDc5MTNMCitMMTI5MTQ3MzQ2TAorTDM2OTExNzE4ODdMCitMMTU2OTMyODExMEwKK0wxMzcyODYwMTQzTAorTDEwNTQxMzkxODNMCitMMTYxNzcwNzA4MEwKK0w2OTAyMDU5MkwKK0wzODEwMjcxNjAzTAorTDE4NTM5NTM0MTZMCitMMzQ5OTgwMzA3M0wKK0wxMDI3NTQ1MDI3TAorTDMyMjkwNDM2MDVMCitMMjUwODQ4NzIwTAorTDMzMjQ5MzI2MjZMCitMMzUzNzAwMjk2MkwKK0wyNDk0MzIzMzQ1TAorTDMyMzgxMDM5NjJMCitMNDE0NzU0MTU3OUwKK0wzNjM2MzQ4MTg2TAorTDMwMjU0NTUwODNMCitMMjY3ODc3MTk3N0wKK0w1ODQ3MDAyNTZMCitMMzQ2MTgyNjkwOUwKK0w4NTQ1MTE0MjBMCitMOTQzNDYzNTUyTAorTDM2MDkyMzkwMjVMCitMMzk3NzU3Nzk4OUwKK0wyNTMwNzAwOTBMCitMNzc3Mzk0NTQ0TAorTDIxNDQwODY1NjdMCitMMTA5Mjk0Nzk5MkwKK0w4NTQzMjcyODRMCitMMjIyMjc1MDA4MkwKK0wzNjAxODM1MTBMCitMMTMxMjQ2NjQ4M0wKK0wzMjI3NTMxMDkxTAorTDIyMzUwMjI1MDBMCitMMzAxMzA2MDUzMEwKK0wyNTQxMDkxMjk4TAorTDM0ODAxMjYzNDJMCitMMTgzOTc2Mjc3NUwKK0wyNjMyNjA4MTkwTAorTDExMDg4ODk0MDNMCitMMzA0NTA1MDkyM0wKK0w3MzE1MTMxMjZMCitMMzUwNTQzNjc4OEwKK0wzMDYyNzYyMDE3TAorTDE2NjczOTI2ODBMCitMMTM1NDEyNjUwMEwKK0wxMTQzNTczOTMwTAorTDI4MTY2NDU3MDJMCitMMjEwMDM1Njg3M0wKK0wyODE3Njc5MTA2TAorTDEyMTA3NDYwMTBMCitMMjQwOTkxNTI0OEwKK0wyOTEwMTE5OTY0TAorTDIzMDkwMDE0MjBMCitMMjIwMzUxODI0TAorTDM2NjczNTI4NzFMCitMMzk5MzE0ODU5MEwKK0wyODg2MTYwMjMyTAorTDQyMzkzOTM3MDFMCitMMTE4OTI3MDU4MUwKK0wzMDY3OTg1NTQxTAorTDE0NzM3NDU3M0wKK0wyMzU1MTY0ODY5TAorTDM2OTYwMTM1NTBMCitMNDIyNzAzNzg0NkwKK0wxOTA1MTEyNzQzTAorTDMzMTI4NDM2ODlMCitMMjkzMDY3ODI2NkwKK0wxODI4Nzk1MzU1TAorTDc2OTMzNTk0TAorTDM5ODcxMDA3OTZMCitMMTI4ODM2MTQzNUwKK0wzNDY0NTI5MTUxTAorTDk2NTQ5ODA3OUwKK0wxNDQ0NjIzMDkzTAorTDEzNzI4OTM0MTVMCitMMTUzNjIzNTU5N0wKK0wxMzQxOTk0ODUwTAorTDk2MzU5NDc1OEwKK0wyMTE1Mjk1NzU0TAorTDk4MjA5ODY4NUwKK0wxMDUzNDMzOTA0TAorTDIwNzg0Njk4NDRMCitMMzA1OTc2NTc5MkwKK0wxNzUzNjA2MTgxTAorTDIxMzAxNzEyNTRMCitMNTY3NTg4MTk0TAorTDUyOTYyOTQyNkwKK0wzNjIxNTIzNTM0TAorTDMwMjc1NzY1NjRMCitMMTE3NjQzODA4M0wKK0w0MDk2Mjg3ODU4TAorTDExNjg1NzQ2ODNMCitMMTQyNTA1ODk2MkwKK0wxNDI5NjMxNjU1TAorTDI5MDIxMDY3NTlMCitMNzYxOTAwNjQxTAorTDEzMjkxODM5NTZMCitMMTk0NzA1MDkzMkwKK0w0NDc0OTAyODlMCitMMzI4MjUxNjI3NkwKK0wyMDAwMzczODlMCitMOTIxODY4MTk3TAorTDMzMzE0MDM5OTlMCitMNDA4ODc2MDI0OUwKK0wyMTg4MzI2MzE4TAorTDI4ODQwMTk2MUwKK0wxMzYwODAyNjc1TAorTDMxNDMwMjgwOEwKK0wzMzE0NjM5MjEwTAorTDM3NDk4MjEyMDNMCitMMjI4NjA4MTU3MEwKK0wyNzY4OTM5MDYyTAorTDMyMDA1NDEwMTZMCitMMjEzMzQ5NTQ4MkwKK0wzODUwMjk4ODBMCitMNDIxNzIzMjIwMkwKK0wzMTcxNjE3MjMxTAorTDE2NjA4NDY2NTNMCitMMjQ1OTk4NzYyMUwKK0wyNjkxNzc2MTI0TAorTDQyMjUwMzA0MDhMCitMMzU5NTM5Njc3M0wKK0wxMTAzNjgwNjYxTAorTDUzOTA2NDA1N0wKK0wxNDkyODQxMTAxTAorTDE2NjE5NTM5NEwKK0w3NTc5NzM2NThMCitMNTMzODkzMDU0TAorTDI3ODQ4Nzk1OTRMCitMMTAyMTgyMTg4M0wKK0wyMzUwNTQ4MTYyTAorTDE3Njg1MjExNkwKK0wzNTAzMTY2MDI1TAorTDE0ODA3OTkxNEwKK0wxNjMzNDY2MjM2TAorTDI3NzMwOTAxNjVMCitMMTE2Mjg0NjcwMUwKK0wzNTc1NzM3Nzk1TAorTDE2MjQxNzgyMzlMCitMMjQ1NDg5NDcxMEwKK0wzMDE0NjkxOTM4TAorTDUyNjM1NTY3OUwKK0wxODcwODI0MDgxTAorTDMzNjI0MjU4NTdMCitMMzkwNzU2NjY2NUwKK0wzNDYyNTYzMTg0TAorTDIyMjkxMTIwMDRMCitMNDIwMzczNTc0OEwKK0wxNTU3NDQyNDgxTAorTDkyNDEzMzk5OUwKK0wxOTA2NjM0MjE0TAorTDg4MDQ1OTcyN0wKK0w0MDY1ODk1ODcwTAorTDE0MTQyNjI1NEwKK0wxMjU4NDUwMTU5TAorTDMyNDMxMTUwMjdMCitMMTU3NDk1ODg0MEwKK0wzMTM5MzkyOTRMCitMMzA1NTY2NDI2MEwKK0wzNDU5NzE0MjU1TAorTDUzMTc3ODc5MEwKK0w1MDk1MDU1MDZMCitMMTYyMDIyNzQ5MUwKK0wyNjc1NTU0OTQyTAorTDI1MTY1MDk1NjBMCitMMzc5NzI5OTg4N0wKK0wyMzcxMzU4OTBMCitMMzIwMzE0MjIxM0wKK0wxMDg3NzQ1MzEwTAorTDE4OTcxNTE4NTRMCitMMzkzNjU5MDA0MUwKK0wxMzI3NjUxNjdMCitMMjM4NTkwODA2M0wKK0wxMzYwNjAwMjg5TAorTDM1NzQ1Njc3NjlMCitMMjc1Mjc4ODExNEwKK0wyNjQ0MjI4OTY2TAorTDIzNzc3MDUxODNMCitMNjAxMjc3OTA5TAorTDQwNDY0ODA0OThMCitMMzI0NDAxNDA4TAorTDMyNzk5MzE3NjBMCitMMjIyNzA1OTM3N0wKK0wxNTM4ODI3NDkzTAorTDQyMjA1MzIwNjRMCitMNDc4MDQ0NTY0TAorTDI5MTcxMTc3NjFMCitMNjM1NDkyODMyTAorTDIzMTk3NjMyNjFMCitMNzk1OTQ0MjA2TAorTDE4MjA0NzMyMzRMCitMMTY3MzE1MTQwOUwKK0wxNDA0MDk1NDAyTAorTDE2NjEwNjc1MDVMCitMMzIxNzEwNjkzOEwKK0wyNDA2MzEwNjgzTAorTDE5MzEzMDkyNDhMCitMMjQ1ODYyMjg2OEwKK0wzMzIzNjcwNTI0TAorTDMyNjY4NTI3NTVMCitMMjQwMDgzOTQzTAorTDMxNjgzODczOTdMCitMNjA3NzIyMTk4TAorTDEyNTY4Mzc2OTBMCitMMzYwODEyNDkxM0wKK0w0MjQ0OTY5MzU3TAorTDEyODk5NTkyOTNMCitMNTE5NzUwMzI4TAorTDMyMjk0ODI0NjNMCitMMTEwNTE5Njk4OEwKK0wxODMyNjg0NDc5TAorTDM3NjEwMzcyMjRMCitMMjM2MzYzMTgyMkwKK0wzMjk3OTU3NzExTAorTDU3Mjc2NjM1NUwKK0wxMTk1ODIyMTM3TAorTDIyMzkyMDc5ODFMCitMMjAzNDI0MTIwM0wKK0wxNjM1NDA1MTRMCitMMjg4MTYwMjU1TAorTDcxNjQwMzY4MEwKK0w0MDE5NDM5MTQzTAorTDE1MzYyODE5MzVMCitMMjM0NTEwMDQ1OEwKK0wyNzg2MDU5MTc4TAorTDI4MjIyMzIxMDlMCitMOTg3MDI1Mzk1TAorTDMwNjExNjY1NTlMCitMNDkwNDIyNTEzTAorTDI1NTEwMzAxMTVMCitMMjYzODcwNzYyMEwKK0wxMzQ0NzI4NTAyTAorTDcxNDEwODkxMUwKK0wyODMxNzE5NzAwTAorTDIxODg2MTUzNjlMCitMMzczNTA5MDYxTAorTDEzNTEwNzc1MDRMCitMMzEzNjIxNzA1NkwKK0w3ODM1MjEwOTVMCitMMjU1NDk0OTQ2OEwKK0wyNjYyNDk5NTUwTAorTDEyMDM4MjY5NTFMCitMMTM3OTYzMjM4OEwKK0wxOTE4ODU4OTg1TAorTDYwNzQ2NTk3NkwKK0wxOTgwNDUwMjM3TAorTDM1NDAwNzkyMTFMCitMMzM5NzgxMzQxMEwKK0wyOTEzMzA5MjY2TAorTDIyODk1NzI2MjFMCitMNDEzMzkzNTMyN0wKK0w0MTY2MjI3NjYzTAorTDMzNzE4MDE3MDRMCitMMzA2NTQ3NDkwOUwKK0wzNTgwNTYyMzQzTAorTDM4MzIxNzIzNzhMCitMMjU1NjEzMDcxOUwKK0wzMTA0NzM3MDVMCitMMzczNDAxNDM0NkwKK0wyNDkwNDEzODEwTAorTDM0NzIzMzA1NkwKK0w1MjY2NjgwMzdMCitMMTE1ODM5MzY1NkwKK0w1NDQzMjk3MDNMCitMMjE1MDA4NTQxOUwKK0wzOTE0MDM4MTQ2TAorTDEwNjAyMzc1ODZMCitMNDE1OTM5NDgzN0wKK0wxMTMyMDUxMjFMCitMMzA5OTY2Nzc1TAorTDQwOTg3ODQ0NjVMCitMMzYzNTIyMjk2MEwKK0wyNDE3NTE2NTY5TAorTDIwODk1NzkyMzNMCitMMTcyNTgwNzU0MUwKK0wyNzI4MTIyNTI2TAorTDIzNjU4MzY1MjNMCitMMjUwNDA3ODUyMkwKK0wxNDQzOTQ2ODY5TAorTDIzODQxNzE0MTFMCitMOTk3MDQ2NTM0TAorTDMyNDkxMzE2NTdMCitMMTY5OTg3NTk4NkwKK0wzNjE4MDk3MTQ2TAorTDE3MTYwMzgyMjRMCitMMjYyOTgxODYwN0wKK0wyOTI5MjE3ODc2TAorTDEzNjcyNTAzMTRMCitMMTcyNjQzNDk1MUwKK0wxMzg4NDk2MzI1TAorTDIxMDc2MDIxODFMCitMMjgyMjM2Njg0MkwKK0wzMDUyOTc5MTkwTAorTDM3OTY3OTg2MzNMCitMMTU0MzgxMzM4MUwKK0w5NTkwMDAxMjFMCitMMTM2Mzg0NTk5OUwKK0wyOTUyNTI4MTUwTAorTDg3NDE4NDkzMkwKK0wxODg4Mzg3MTk0TAorTDIzMjg2OTUyOTVMCitMMzQ0Mjk1OTg1NUwKK0w4NDE4MDU5NDdMCitMMTA4NzczOTI3NUwKK0wzMjMwMDA1NDM0TAorTDMwNDUzOTkyNjVMCitMMTE2MTgxNzMxOEwKK0wyODk4NjczMTM5TAorTDg2MDAxMTA5NEwKK0w5NDA1Mzk3ODJMCitMMTI5NzgxODA4MEwKK0w0MjQzOTQxNjIzTAorTDE1Nzc2MTMwMzNMCitMNDIwNDEzMTg4N0wKK0wzODE5MDU3MjI1TAorTDE5Njk0Mzk1NThMCitMMzI5Nzk2MzkzMkwKK0wyNDE4NzQwNjlMCitMMzUxNzAzMzQ1M0wKK0wyMjk1MzQ1NjY0TAorTDEwOTg5MTE0MjJMCitMODg2OTU1MDA4TAorTDE0NzczOTc2MjFMCitMNDI3OTM0NzMzMkwKK0wzNjE2NTU4NzkxTAorTDIzODQ0MTE5NTdMCitMNzQyNTM3NzMxTAorTDc2NDIyMTU0MEwKK0wyODcxNjk4OTAwTAorTDM1MzA2MzYzOTNMCitMNjkxMjU2NjQ0TAorTDc1ODczMDk2NkwKK0wxNzE3NzczMDkwTAorTDI3NTE4NTYzNzdMCitMMzE4ODQ4NDAwMEwKK0wzNzY3NDY5NjcwTAorTDE2MjM4NjMwNTNMCitMMzUzMzIzNjc5M0wKK0w0MDk5Mjg0MTc2TAorTDcyMzkyMTEwN0wKK0wzMTA1OTQwMzZMCitMMjIzOTc4NzQ1TAorTDIyNjY1NjU3NzZMCitMMjAxODQzMzAzTAorTDI5Njk5Njg1NDZMCitMMzM1MTE3MDg4OEwKK0wzNDY1MTEzNjI0TAorTDI3MTIyNDY3MTJMCitMMTUyMTM4MzA1N0wKK0wyMzg0NDYxNzk4TAorTDIxNjM1NzU1MUwKK0wyMTY3MzAxOTc1TAorTDMxNDQ2NTMxOTRMCitMMjc4MTIyMDE1NUwKK0wzNjIwNzQ3NjY2TAorTDk1OTcxMjY1TAorTDQyNTU0MDAyNDNMCitMNTk5OTk3NTdMCitMNDE3NDI3MzQ3MkwKK0wzOTc0NTExNTI0TAorTDEwMDcxMjM5NTBMCitMMzExMjQ3NzYyOEwKK0w4MDY0NjE1MTJMCitMMzE0ODA3NDAwOEwKK0w1MjgzNTI4ODJMCitMMjU0NTk3OTU4OEwKK0wyNTYyMjgxOTY5TAorTDMwMTAyNDk0NzdMCitMMTg4NjMzMTYxMUwKK0wzMjEwNjU2NDMzTAorTDEwMzQwOTk5NzZMCitMMjkwNjg5MzU3OUwKK0wxMTk3MDQ4Nzc5TAorTDE4NzAwMDQ0MDFMCitMMzg5ODMwMDQ5MEwKK0wyNjg2ODU2NDAyTAorTDM5NzU3MjM0NzhMCitMNjEzMDQzNTMyTAorTDI1NjU2NzQzNTNMCitMMzc2MDA0NTMxMEwKK0wzNDY4OTg0Mzc2TAorTDQxMjYyNThMCitMMzAzODU1NDI0TAorTDM5ODg5NjM1NTJMCitMMjc2MjU2Nzk2TAorTDU0NDA3MTgwN0wKK0wxMDIzODcyMDYyTAorTDE3NDc0NjE1MTlMCitMMTk3NTU3MTI2MEwKK0w0MDMzNzY2OTU4TAorTDI5NDY1NTU1NTdMCitMMTQ5Mjk1Nzc5NkwKK0w5NTgyNzE2ODVMCitMNDY0ODA1MTVMCitMOTA3NzYwNjM1TAorTDEzMDY2MjYzNTdMCitMODE5NjUyMzc4TAorTDExNzIzMDAyNzlMCitMMTExNjg1MTMxOUwKK0w0OTU2MDEwNzVMCitMMTE1NzcxNTMzMEwKK0w1MzQyMjAxMDhMCitMMzc3MzIwMDI4TAorTDE2NzIyODYxMDZMCitMMjA2NjIxOTI4NEwKK0wxODQyMzg2MzU1TAorTDI1NDYwNTk0NjRMCitMMTgzOTQ1NzMzNkwKK0wzNDc2MTk0NDQ2TAorTDMwNTA1NTAwMjhMCitMNTk0NzA1NTgyTAorTDE5MDU4MTM1MzVMCitMMTgxMzAzMzQxMkwKK0wyNzAwODU4MTU3TAorTDE2OTA2Nzk3MkwKK0w0MjUyODg5MDQ1TAorTDE5MjE5NDQ1NTVMCitMNDk3NjcxNDc0TAorTDIxMDE0MzkzNUwKK0wyNjg4Mzk4NDg5TAorTDMyNTE1ODM3NUwKK0wzNDUwODQ2NDQ3TAorTDg5MTc2MDU5N0wKK0w3MTI4MDI1MzZMCitMMTEzMjU1NzQzNkwKK0wxNDE3MDQ0MDc1TAorTDE2Mzk4ODk2NjBMCitMMTc0NjM3OTk3MEwKK0wxNDc4NzQxNjQ3TAorTDI4MTc1NjM0ODZMCitMMjU3MzYxMjUzMkwKK0w0MjY2NDQ0NDU3TAorTDI5MTE2MDE2MTVMCitMODA0NzQ1NDExTAorTDIyMDcyNTQ2NTJMCitMMTE4OTE0MDY0NkwKK0wzODI5NzI1MTExTAorTDM2MzczNjczNDhMCitMMTk0NDczMTc0N0wKK0wyMTkzNDQwMzQzTAorTDE0MzAxOTU0MTNMCitMMTE3MzUxNTIyOUwKK0wxNTgyNjE4MjE3TAorTDIwNzA3NjcwMzdMCitMMjQ3OTA4OTM2TAorTDE0NjA2NzU0MzlMCitMNTU2MDAxNTk2TAorTDMyNzYyOTMzNUwKK0wxMDM2MTMzODc2TAorTDQyMjgxMjk2MDVMCitMOTk5MTc0MDQ4TAorTDM2MzU4MDQwMzlMCitMMTQxNjU1MDQ4MUwKK0wxMjcwNTQwMjY5TAorTDQyODA3NDM4MTVMCitMMzk2MDc2NTlMCitMMTU1MjU0MDYyM0wKK0wyNzYyMjk0MDYyTAorTDUwNDEzNzI4OUwKK0w0MTE3MDQ0MjM5TAorTDE0MTcxMzAyMjVMCitMMTM0Mjk3MDA1NkwKK0wxNzU1NzE2NDQ5TAorTDExNjk0NDczMjJMCitMMjczMTQwMTM1NkwKK0wyMzE5OTc2NzQ1TAorTDI4NjkyMjE0NzlMCitMMjM5NzI2NTVMCitMMjI1MTQ5NTM4OUwKK0wxNDI5ODYwODc4TAorTDM3MjgxMzU5OTJMCitMNDI0MTQzMjk3M0wKK0wzNjk4Mjc1MDc2TAorTDIxNjQxNjQzMkwKK0w0MDQwMDQ2OTYwTAorTDI0NjA3NzE3NkwKK0w4OTQ2NzU2ODVMCitMMzkzMjI4MjI1OUwKK0wzMDk3MjA1MTAwTAorTDIxMjg4MTg2NTBMCitMMTMxOTAxMDY1NkwKK0wxNjAxOTc0MDA5TAorTDI1NTI5NjA5NTdMCitMMzU1NDAxNjA1NUwKK0w0MjA5Mzk1NjQxTAorTDIwMTMzNDAxMDJMCitMMzM3MDQ0NzgwMUwKK0wyMzA3MjcyMDAyTAorTDE3OTUwOTEzNTRMCitMMjAyMTA5NDAxTAorTDk4ODM0NTA3MEwKK0wyNTE0ODcwNzU4TAorTDExMzI3MjY4NTBMCitMNTgyNzQ2MjI0TAorTDMxMTIzMDU0MjFMCitMMTg0MzAyMDY4M0wKK0wzNjAwMTg5MjIzTAorTDExMDEzNDkxNjVMCitMNDIxMTkwNTg1NUwKK0wyODY2Njc3NTgxTAorTDI4ODE2MjExMzBMCitMNDE2NTMyNDEwOUwKK0w0MjM4NzczMTkxTAorTDM2MzU2NDk1NTBMCitMMjY3MDQ4MTA0NEwKK0wyOTk2MjQ4MjE5TAorTDE2NzY5OTI0ODBMCitMMzQ3MzA2NzA1MEwKK0w0MjA1NzkzNjk5TAorTDQwMTk0OTA4OTdMCitMMTU3OTk5MDQ4MUwKK0wxODk5NjE3OTkwTAorTDExMzYzNDc3MTNMCitMMTgwMjg0MjI2OEwKK0wzNTkxNzUyOTYwTAorTDExOTczMDg3MzlMCitMNDMzNjI5Nzg2TAorTDQwMzIxNDI3OTBMCitMMzE0ODA0MTk3OUwKK0wzMzEyMTM4ODQ1TAorTDM4OTY4NjA0NDlMCitMMzI5ODE4MjU2N0wKK0w5MDc2MDUxNzBMCitMMTY1ODY2NDA2N0wKK0wyNjgyOTgwMzEzTAorTDI1MjM1MjMxNzNMCitMMTIwODcyMjEwM0wKK0wzODA4NTMwMzYzTAorTDEwNzkwMDM5NDZMCitMNDI4MjQwMjg2NEwKK0wyMDQxMDEwMDczTAorTDI2Njc1NTUwNzFMCitMNjg4MDE4MTgwTAorTDE0MDUxMjEwMTJMCitMNDE2Nzk5NDA3NkwKK0wzNTA0Njk1MzM2TAorTDE5MjM5NDQ3NDlMCitMMTE0MzU5ODc5MEwKK0wzOTM2MjY4ODk4TAorTDM2MDYyNDM4NDZMCitMMTAxNzQyMDA4MEwKK0w0MDI2MjExMTY5TAorTDU5NjUyOTc2M0wKK0wxODQ0MjU5NjI0TAorTDI4NDAyMTYyODJMCitMMjY3MzgwNzc1OUwKK0wzNDA3MjAyNTc1TAorTDI3Mzc5NzEwODNMCitMNDA3NTQyMzA2OEwKK0wzNjg0MDU3NDMyTAorTDMxNDY2MjcyNDFMCitMNTk5NjUwNTEzTAorTDY5NzczMTE0TAorTDEyNTcwMzU5MTlMCitMODA3NDg1MjkxTAorTDIzNzYyMzA2ODdMCitMMzAzNjU5MzE0N0wKK0wyNjQyNDExNjU4TAorTDEwNjA4MDA0NEwKK0wyMTk5NjIyNzI5TAorTDI5MTgzNDUxMUwKK0wyNjk3NjExMzYxTAorTDExNjg5NzMzTAorTDYyNTEyMzk1MkwKK0wzMjI2MDIzMDYyTAorTDMyMjk2NjMyNjVMCitMNzUzMDU5NDQ0TAorTDI4NDM2MTAxODlMCitMNjI0TAordHAyCitOdHAzCitiLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9yZV90ZXN0cy5weSBiL2xpYi9weXRob24yLjcvdGVzdC9yZV90ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNWIxMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3JlX3Rlc3RzLnB5CkBAIC0wLDAgKzEsNjc0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgLSotIG1vZGU6IHB5dGhvbiAtKi0KKworIyBSZSB0ZXN0IHN1aXRlIGFuZCBiZW5jaG1hcmsgc3VpdGUgdjEuNQorCisjIFRoZSAzIHBvc3NpYmxlIG91dGNvbWVzIGZvciBlYWNoIHBhdHRlcm4KK1tTVUNDRUVELCBGQUlMLCBTWU5UQVhfRVJST1JdID0gcmFuZ2UoMykKKworIyBCZW5jaG1hcmsgc3VpdGUgKG5lZWRzIGV4cGFuc2lvbikKKyMKKyMgVGhlIGJlbmNobWFyayBzdWl0ZSBkb2VzIG5vdCB0ZXN0IGNvcnJlY3RuZXNzLCBqdXN0IHNwZWVkLiAgVGhlCisjIGZpcnN0IGVsZW1lbnQgb2YgZWFjaCB0dXBsZSBpcyB0aGUgcmVnZXggcGF0dGVybjsgdGhlIHNlY29uZCBpcyBhCisjIHN0cmluZyB0byBtYXRjaCBpdCBhZ2FpbnN0LiAgVGhlIGJlbmNobWFya2luZyBjb2RlIHdpbGwgZW1iZWQgdGhlCisjIHNlY29uZCBzdHJpbmcgaW5zaWRlIHNldmVyYWwgc2l6ZXMgb2YgcGFkZGluZywgdG8gdGVzdCBob3cgcmVnZXgKKyMgbWF0Y2hpbmcgcGVyZm9ybXMgb24gbGFyZ2Ugc3RyaW5ncy4KKworYmVuY2htYXJrcyA9IFsKKworICAgICMgdGVzdCBjb21tb24gcHJlZml4CisgICAgKCdQeXRob258UGVybCcsICdQZXJsJyksICAgICMgQWx0ZXJuYXRpb24KKyAgICAoJyhQeXRob258UGVybCknLCAnUGVybCcpLCAgIyBHcm91cGVkIGFsdGVybmF0aW9uCisKKyAgICAoJ1B5dGhvbnxQZXJsfFRjbCcsICdQZXJsJyksICAgICAgICAjIEFsdGVybmF0aW9uCisgICAgKCcoUHl0aG9ufFBlcmx8VGNsKScsICdQZXJsJyksICAgICAgIyBHcm91cGVkIGFsdGVybmF0aW9uCisKKyAgICAoJyhQeXRob24pXFwxJywgJ1B5dGhvblB5dGhvbicpLCAgICAjIEJhY2tyZWZlcmVuY2UKKyAgICAoJyhbMGEtel1bYS16MC05XSosKSsnLCAnYTUsYjcsYzksJyksICMgRGlzYWJsZSB0aGUgZmFzdG1hcCBvcHRpbWl6YXRpb24KKyAgICAoJyhbYS16XVthLXowLTldKiwpKycsICdhNSxiNyxjOSwnKSwgIyBBIGZldyBzZXRzCisKKyAgICAoJ1B5dGhvbicsICdQeXRob24nKSwgICAgICAgICAgICAgICAjIFNpbXBsZSB0ZXh0IGxpdGVyYWwKKyAgICAoJy4qUHl0aG9uJywgJ1B5dGhvbicpLCAgICAgICAgICAgICAjIEJhZCB0ZXh0IGxpdGVyYWwKKyAgICAoJy4qUHl0aG9uLionLCAnUHl0aG9uJyksICAgICAgICAgICAjIFdvcnNlIHRleHQgbGl0ZXJhbAorICAgICgnLiooUHl0aG9uKScsICdQeXRob24nKSwgICAgICAgICAgICMgQmFkIHRleHQgbGl0ZXJhbCB3aXRoIGdyb3VwaW5nCisKK10KKworIyBUZXN0IHN1aXRlIChmb3IgdmVyaWZ5aW5nIGNvcnJlY3RuZXNzKQorIworIyBUaGUgdGVzdCBzdWl0ZSBpcyBhIGxpc3Qgb2YgNS0gb3IgMy10dXBsZXMuICBUaGUgNSBwYXJ0cyBvZiBhCisjIGNvbXBsZXRlIHR1cGxlIGFyZToKKyMgZWxlbWVudCAwOiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwYXR0ZXJuCisjICAgICAgICAgMTogdGhlIHN0cmluZyB0byBtYXRjaCBhZ2FpbnN0IHRoZSBwYXR0ZXJuCisjICAgICAgICAgMjogdGhlIGV4cGVjdGVkIHJlc3VsdCAoU1VDQ0VFRCwgRkFJTCwgU1lOVEFYX0VSUk9SKQorIyAgICAgICAgIDM6IGEgc3RyaW5nIHRoYXQgd2lsbCBiZSBldmFsKCknZWQgdG8gcHJvZHVjZSBhIHRlc3Qgc3RyaW5nLgorIyAgICAgICAgICAgIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IFB5dGhvbiBleHByZXNzaW9uOyB0aGUgYXZhaWxhYmxlCisjICAgICAgICAgICAgdmFyaWFibGVzIGFyZSAiZm91bmQiICh0aGUgd2hvbGUgbWF0Y2gpLCBhbmQgImcxIiwgImcyIiwgLi4uCisjICAgICAgICAgICAgdXAgdG8gImc5OSIgY29udGFpbiB0aGUgY29udGVudHMgb2YgZWFjaCBncm91cCwgb3IgdGhlCisjICAgICAgICAgICAgc3RyaW5nICdOb25lJyBpZiB0aGUgZ3JvdXAgd2Fzbid0IGdpdmVuIGEgdmFsdWUsIG9yIHRoZQorIyAgICAgICAgICAgIHN0cmluZyAnRXJyb3InIGlmIHRoZSBncm91cCBpbmRleCB3YXMgb3V0IG9mIHJhbmdlOworIyAgICAgICAgICAgIGFsc28gImdyb3VwcyIsIHRoZSByZXR1cm4gdmFsdWUgb2YgbS5ncm91cCgpIChhIHR1cGxlKS4KKyMgICAgICAgICA0OiBUaGUgZXhwZWN0ZWQgcmVzdWx0IG9mIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24uCisjICAgICAgICAgICAgSWYgdGhlIHR3byBkb24ndCBtYXRjaCwgYW4gZXJyb3IgaXMgcmVwb3J0ZWQuCisjCisjIElmIHRoZSByZWdleCBpc24ndCBleHBlY3RlZCB0byB3b3JrLCB0aGUgbGF0dGVyIHR3byBlbGVtZW50cyBjYW4gYmUgb21pdHRlZC4KKwordGVzdHMgPSBbCisgICAgIyBUZXN0ID9QPCBhbmQgP1A9IGV4dGVuc2lvbnMKKyAgICAoJyg/UDxmb29fMTIzJywgJycsIFNZTlRBWF9FUlJPUiksICAgICAgIyBVbnRlcm1pbmF0ZWQgZ3JvdXAgaWRlbnRpZmllcgorICAgICgnKD9QPDE+YSknLCAnJywgU1lOVEFYX0VSUk9SKSwgICAgICAgICAjIEJlZ2lucyB3aXRoIGEgZGlnaXQKKyAgICAoJyg/UDwhPmEpJywgJycsIFNZTlRBWF9FUlJPUiksICAgICAgICAgIyBCZWdpbnMgd2l0aCBhbiBpbGxlZ2FsIGNoYXIKKyAgICAoJyg/UDxmb28hPmEpJywgJycsIFNZTlRBWF9FUlJPUiksICAgICAgIyBCZWdpbnMgd2l0aCBhbiBpbGxlZ2FsIGNoYXIKKworICAgICMgU2FtZSB0ZXN0cywgZm9yIHRoZSA/UD0gZm9ybQorICAgICgnKD9QPGZvb18xMjM+YSkoP1A9Zm9vXzEyMycsICdhYScsIFNZTlRBWF9FUlJPUiksCisgICAgKCcoP1A8Zm9vXzEyMz5hKSg/UD0xKScsICdhYScsIFNZTlRBWF9FUlJPUiksCisgICAgKCcoP1A8Zm9vXzEyMz5hKSg/UD0hKScsICdhYScsIFNZTlRBWF9FUlJPUiksCisgICAgKCcoP1A8Zm9vXzEyMz5hKSg/UD1mb29fMTI0JywgJ2FhJywgU1lOVEFYX0VSUk9SKSwgICMgQmFja3JlZiB0byB1bmRlZmluZWQgZ3JvdXAKKworICAgICgnKD9QPGZvb18xMjM+YSknLCAnYScsIFNVQ0NFRUQsICdnMScsICdhJyksCisgICAgKCcoP1A8Zm9vXzEyMz5hKSg/UD1mb29fMTIzKScsICdhYScsIFNVQ0NFRUQsICdnMScsICdhJyksCisKKyAgICAjIFRlc3Qgb2N0YWwgZXNjYXBlcworICAgICgnXFwxJywgJ2EnLCBTWU5UQVhfRVJST1IpLCAgICAjIEJhY2tyZWZlcmVuY2UKKyAgICAoJ1tcXDFdJywgJ1wxJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ1wxJyksICAjIENoYXJhY3RlcgorICAgICgnXFwwOScsIGNocigwKSArICc5JywgU1VDQ0VFRCwgJ2ZvdW5kJywgY2hyKDApICsgJzknKSwKKyAgICAoJ1xcMTQxJywgJ2EnLCBTVUNDRUVELCAnZm91bmQnLCAnYScpLAorICAgICgnKGEpKGIpKGMpKGQpKGUpKGYpKGcpKGgpKGkpKGopKGspKGwpXFwxMTknLCAnYWJjZGVmZ2hpamtsazknLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxMScsICdhYmNkZWZnaGlqa2xrOS1rJyksCisKKyAgICAjIFRlc3QgXDAgaXMgaGFuZGxlZCBldmVyeXdoZXJlCisgICAgKHInXDAnLCAnXDAnLCBTVUNDRUVELCAnZm91bmQnLCAnXDAnKSwKKyAgICAocidbXDBhXScsICdcMCcsIFNVQ0NFRUQsICdmb3VuZCcsICdcMCcpLAorICAgIChyJ1thXDBdJywgJ1wwJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ1wwJyksCisgICAgKHInW15hXDBdJywgJ1wwJywgRkFJTCksCisKKyAgICAjIFRlc3QgdmFyaW91cyBsZXR0ZXIgZXNjYXBlcworICAgIChyJ1xhW1xiXVxmXG5cclx0XHYnLCAnXGFcYlxmXG5cclx0XHYnLCBTVUNDRUVELCAnZm91bmQnLCAnXGFcYlxmXG5cclx0XHYnKSwKKyAgICAocidbXGFdW1xiXVtcZl1bXG5dW1xyXVtcdF1bXHZdJywgJ1xhXGJcZlxuXHJcdFx2JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ1xhXGJcZlxuXHJcdFx2JyksCisgICAgIyBOT1RFOiBub3QgYW4gZXJyb3IgdW5kZXIgUENSRS9QUkU6CisgICAgIyAocidcdScsICcnLCBTWU5UQVhfRVJST1IpLCAgICAjIEEgUGVybCBlc2NhcGUKKyAgICAocidcY1xlXGdcaFxpXGpca1xtXG9ccFxxXHlceicsICdjZWdoaWprbW9wcXl6JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2NlZ2hpamttb3BxeXonKSwKKyAgICAocidceGZmJywgJ1wzNzcnLCBTVUNDRUVELCAnZm91bmQnLCBjaHIoMjU1KSksCisgICAgIyBuZXcgXHggc2VtYW50aWNzCisgICAgKHInXHgwMGZmZmZmZmZmZmZmZmZmJywgJ1wzNzcnLCBGQUlMLCAnZm91bmQnLCBjaHIoMjU1KSksCisgICAgKHInXHgwMGYnLCAnXDAxNycsIEZBSUwsICdmb3VuZCcsIGNocigxNSkpLAorICAgIChyJ1x4MDBmZScsICdcMzc2JywgRkFJTCwgJ2ZvdW5kJywgY2hyKDI1NCkpLAorICAgICMgKHInXHgwMGZmZmZmZmZmZmZmZmZmJywgJ1wzNzcnLCBTVUNDRUVELCAnZm91bmQnLCBjaHIoMjU1KSksCisgICAgIyAocidceDAwZicsICdcMDE3JywgU1VDQ0VFRCwgJ2ZvdW5kJywgY2hyKDE1KSksCisgICAgIyAocidceDAwZmUnLCAnXDM3NicsIFNVQ0NFRUQsICdmb3VuZCcsIGNocigyNTQpKSwKKworICAgIChyIl5cdys9KFxcW1wwMDAtXDI3N118W15cblxcXSkqIiwgIlNSQz1ldmFsLmMgZy5jIGJsYWggYmxhaCBibGFoIFxcXFxcblx0YXBlcy5jIiwKKyAgICAgU1VDQ0VFRCwgJ2ZvdW5kJywgIlNSQz1ldmFsLmMgZy5jIGJsYWggYmxhaCBibGFoIFxcXFwiKSwKKworICAgICMgVGVzdCB0aGF0IC4gb25seSBtYXRjaGVzIFxuIGluIERPVEFMTCBtb2RlCisgICAgKCdhLmInLCAnYWNiJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FjYicpLAorICAgICgnYS5iJywgJ2FcbmInLCBGQUlMKSwKKyAgICAoJ2EuKmInLCAnYWNjXG5jY2InLCBGQUlMKSwKKyAgICAoJ2EuezQsNX1iJywgJ2FjY1xuY2NiJywgRkFJTCksCisgICAgKCdhLmInLCAnYVxyYicsIFNVQ0NFRUQsICdmb3VuZCcsICdhXHJiJyksCisgICAgKCdhLmIoP3MpJywgJ2FcbmInLCBTVUNDRUVELCAnZm91bmQnLCAnYVxuYicpLAorICAgICgnYS4qKD9zKWInLCAnYWNjXG5jY2InLCBTVUNDRUVELCAnZm91bmQnLCAnYWNjXG5jY2InKSwKKyAgICAoJyg/cylhLns0LDV9YicsICdhY2NcbmNjYicsIFNVQ0NFRUQsICdmb3VuZCcsICdhY2NcbmNjYicpLAorICAgICgnKD9zKWEuYicsICdhXG5iJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FcbmInKSwKKworICAgICgnKScsICcnLCBTWU5UQVhfRVJST1IpLCAgICAgICAgICAgIyBVbm1hdGNoZWQgcmlnaHQgYnJhY2tldAorICAgICgnJywgJycsIFNVQ0NFRUQsICdmb3VuZCcsICcnKSwgICAgIyBFbXB0eSBwYXR0ZXJuCisgICAgKCdhYmMnLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnYWJjJywgJ3hiYycsIEZBSUwpLAorICAgICgnYWJjJywgJ2F4YycsIEZBSUwpLAorICAgICgnYWJjJywgJ2FieCcsIEZBSUwpLAorICAgICgnYWJjJywgJ3hhYmN5JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnYWJjJywgJ2FiYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnYWIqYycsICdhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCdhYipiYycsICdhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCdhYipiYycsICdhYmJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYmMnKSwKKyAgICAoJ2FiKmJjJywgJ2FiYmJiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmJiYmMnKSwKKyAgICAoJ2FiK2JjJywgJ2FiYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJiYycpLAorICAgICgnYWIrYmMnLCAnYWJjJywgRkFJTCksCisgICAgKCdhYitiYycsICdhYnEnLCBGQUlMKSwKKyAgICAoJ2FiK2JjJywgJ2FiYmJiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmJiYmMnKSwKKyAgICAoJ2FiP2JjJywgJ2FiYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJiYycpLAorICAgICgnYWI/YmMnLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnYWI/YmMnLCAnYWJiYmJjJywgRkFJTCksCisgICAgKCdhYj9jJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ15hYmMkJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ15hYmMkJywgJ2FiY2MnLCBGQUlMKSwKKyAgICAoJ15hYmMnLCAnYWJjYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ15hYmMkJywgJ2FhYmMnLCBGQUlMKSwKKyAgICAoJ2FiYyQnLCAnYWFiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ14nLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIicsICctJyksCisgICAgKCckJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCsiLSInLCAnLScpLAorICAgICgnYS5jJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ2EuYycsICdheGMnLCBTVUNDRUVELCAnZm91bmQnLCAnYXhjJyksCisgICAgKCdhLipjJywgJ2F4eXpjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2F4eXpjJyksCisgICAgKCdhLipjJywgJ2F4eXpkJywgRkFJTCksCisgICAgKCdhW2JjXWQnLCAnYWJjJywgRkFJTCksCisgICAgKCdhW2JjXWQnLCAnYWJkJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiZCcpLAorICAgICgnYVtiLWRdZScsICdhYmQnLCBGQUlMKSwKKyAgICAoJ2FbYi1kXWUnLCAnYWNlJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FjZScpLAorICAgICgnYVtiLWRdJywgJ2FhYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYycpLAorICAgICgnYVstYl0nLCAnYS0nLCBTVUNDRUVELCAnZm91bmQnLCAnYS0nKSwKKyAgICAoJ2FbXFwtYl0nLCAnYS0nLCBTVUNDRUVELCAnZm91bmQnLCAnYS0nKSwKKyAgICAjIE5PVEU6IG5vdCBhbiBlcnJvciB1bmRlciBQQ1JFL1BSRToKKyAgICAjICgnYVtiLV0nLCAnYS0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnYVtdYicsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJ2FbJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnYVxcJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnYWJjKScsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJyhhYmMnLCAnLScsIFNZTlRBWF9FUlJPUiksCisgICAgKCdhXScsICdhXScsIFNVQ0NFRUQsICdmb3VuZCcsICdhXScpLAorICAgICgnYVtdXWInLCAnYV1iJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FdYicpLAorICAgICgnYVtcXV1iJywgJ2FdYicsIFNVQ0NFRUQsICdmb3VuZCcsICdhXWInKSwKKyAgICAoJ2FbXmJjXWQnLCAnYWVkJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FlZCcpLAorICAgICgnYVteYmNdZCcsICdhYmQnLCBGQUlMKSwKKyAgICAoJ2FbXi1iXWMnLCAnYWRjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FkYycpLAorICAgICgnYVteLWJdYycsICdhLWMnLCBGQUlMKSwKKyAgICAoJ2FbXl1iXWMnLCAnYV1jJywgRkFJTCksCisgICAgKCdhW15dYl1jJywgJ2FkYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhZGMnKSwKKyAgICAoJ1xcYmFcXGInLCAnYS0nLCBTVUNDRUVELCAnIi0iJywgJy0nKSwKKyAgICAoJ1xcYmFcXGInLCAnLWEnLCBTVUNDRUVELCAnIi0iJywgJy0nKSwKKyAgICAoJ1xcYmFcXGInLCAnLWEtJywgU1VDQ0VFRCwgJyItIicsICctJyksCisgICAgKCdcXGJ5XFxiJywgJ3h5JywgRkFJTCksCisgICAgKCdcXGJ5XFxiJywgJ3l6JywgRkFJTCksCisgICAgKCdcXGJ5XFxiJywgJ3h5eicsIEZBSUwpLAorICAgICgneFxcYicsICd4eXonLCBGQUlMKSwKKyAgICAoJ3hcXEInLCAneHl6JywgU1VDQ0VFRCwgJyItIicsICctJyksCisgICAgKCdcXEJ6JywgJ3h5eicsIFNVQ0NFRUQsICciLSInLCAnLScpLAorICAgICgnelxcQicsICd4eXonLCBGQUlMKSwKKyAgICAoJ1xcQngnLCAneHl6JywgRkFJTCksCisgICAgKCdcXEJhXFxCJywgJ2EtJywgRkFJTCwgJyItIicsICctJyksCisgICAgKCdcXEJhXFxCJywgJy1hJywgRkFJTCwgJyItIicsICctJyksCisgICAgKCdcXEJhXFxCJywgJy1hLScsIEZBSUwsICciLSInLCAnLScpLAorICAgICgnXFxCeVxcQicsICd4eScsIEZBSUwpLAorICAgICgnXFxCeVxcQicsICd5eicsIEZBSUwpLAorICAgICgnXFxCeVxcYicsICd4eScsIFNVQ0NFRUQsICciLSInLCAnLScpLAorICAgICgnXFxieVxcQicsICd5eicsIFNVQ0NFRUQsICciLSInLCAnLScpLAorICAgICgnXFxCeVxcQicsICd4eXonLCBTVUNDRUVELCAnIi0iJywgJy0nKSwKKyAgICAoJ2FifGNkJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYicpLAorICAgICgnYWJ8Y2QnLCAnYWJjZCcsIFNVQ0NFRUQsICdmb3VuZCcsICdhYicpLAorICAgICgnKCllZicsICdkZWYnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2VmLScpLAorICAgICgnJGInLCAnYicsIEZBSUwpLAorICAgICgnYVxcKGInLCAnYShiJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhKGItRXJyb3InKSwKKyAgICAoJ2FcXCgqYicsICdhYicsIFNVQ0NFRUQsICdmb3VuZCcsICdhYicpLAorICAgICgnYVxcKCpiJywgJ2EoKGInLCBTVUNDRUVELCAnZm91bmQnLCAnYSgoYicpLAorICAgICgnYVxcXFxiJywgJ2FcXGInLCBTVUNDRUVELCAnZm91bmQnLCAnYVxcYicpLAorICAgICgnKChhKSknLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnYS1hLWEnKSwKKyAgICAoJyhhKWIoYyknLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnYWJjLWEtYycpLAorICAgICgnYStiK2MnLCAnYWFiYmFiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJyhhK3xiKSonLCAnYWInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiLWInKSwKKyAgICAoJyhhK3xiKSsnLCAnYWInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiLWInKSwKKyAgICAoJyhhK3xiKT8nLCAnYWInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2EtYScpLAorICAgICgnKSgnLCAnLScsIFNZTlRBWF9FUlJPUiksCisgICAgKCdbXmFiXSonLCAnY2RlJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2NkZScpLAorICAgICgnYWJjJywgJycsIEZBSUwpLAorICAgICgnYSonLCAnJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJycpLAorICAgICgnYXxifGN8ZHxlJywgJ2UnLCBTVUNDRUVELCAnZm91bmQnLCAnZScpLAorICAgICgnKGF8YnxjfGR8ZSlmJywgJ2VmJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdlZi1lJyksCisgICAgKCdhYmNkKmVmZycsICdhYmNkZWZnJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiY2RlZmcnKSwKKyAgICAoJ2FiKicsICd4YWJ5YWJiYnonLCBTVUNDRUVELCAnZm91bmQnLCAnYWInKSwKKyAgICAoJ2FiKicsICd4YXlhYmJieicsIFNVQ0NFRUQsICdmb3VuZCcsICdhJyksCisgICAgKCcoYWJ8Y2QpZScsICdhYmNkZScsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnY2RlLWNkJyksCisgICAgKCdbYWJoZ2VmZGNdaWonLCAnaGlqJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2hpaicpLAorICAgICgnXihhYnxjZCllJywgJ2FiY2RlJywgRkFJTCwgJ3hnMXknLCAneHknKSwKKyAgICAoJyhhYmN8KWVmJywgJ2FiY2RlZicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnZWYtJyksCisgICAgKCcoYXxiKWMqZCcsICdhYmNkJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdiY2QtYicpLAorICAgICgnKGFifGFiKiliYycsICdhYmMnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiYy1hJyksCisgICAgKCdhKFtiY10qKWMqJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWJjLWJjJyksCisgICAgKCdhKFtiY10qKShjKmQpJywgJ2FiY2QnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdhYmNkLWJjLWQnKSwKKyAgICAoJ2EoW2JjXSspKGMqZCknLCAnYWJjZCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ2FiY2QtYmMtZCcpLAorICAgICgnYShbYmNdKikoYytkKScsICdhYmNkJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnYWJjZC1iLWNkJyksCisgICAgKCdhW2JjZF0qZGNkY2RlJywgJ2FkY2RjZGUnLCBTVUNDRUVELCAnZm91bmQnLCAnYWRjZGNkZScpLAorICAgICgnYVtiY2RdK2RjZGNkZScsICdhZGNkY2RlJywgRkFJTCksCisgICAgKCcoYWJ8YSliKmMnLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYmMtYWInKSwKKyAgICAoJygoYSkoYiljKShkKScsICdhYmNkJywgU1VDQ0VFRCwgJ2cxKyItIitnMisiLSIrZzMrIi0iK2c0JywgJ2FiYy1hLWItZCcpLAorICAgICgnW2EtekEtWl9dW2EtekEtWjAtOV9dKicsICdhbHBoYScsIFNVQ0NFRUQsICdmb3VuZCcsICdhbHBoYScpLAorICAgICgnXmEoYmMrfGJbZWhdKWd8LmgkJywgJ2FiaCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYmgtTm9uZScpLAorICAgICgnKGJjK2QkfGVmKmcufGg/aShqfGspKScsICdlZmZneicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ2VmZmd6LWVmZmd6LU5vbmUnKSwKKyAgICAoJyhiYytkJHxlZipnLnxoP2koanxrKSknLCAnaWonLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdpai1pai1qJyksCisgICAgKCcoYmMrZCR8ZWYqZy58aD9pKGp8aykpJywgJ2VmZmcnLCBGQUlMKSwKKyAgICAoJyhiYytkJHxlZipnLnxoP2koanxrKSknLCAnYmNkZCcsIEZBSUwpLAorICAgICgnKGJjK2QkfGVmKmcufGg/aShqfGspKScsICdyZWZmZ3onLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdlZmZnei1lZmZnei1Ob25lJyksCisgICAgKCcoKCgoKCgoKChhKSkpKSkpKSkpJywgJ2EnLCBTVUNDRUVELCAnZm91bmQnLCAnYScpLAorICAgICgnbXVsdGlwbGUgd29yZHMgb2YgdGV4dCcsICd1aC11aCcsIEZBSUwpLAorICAgICgnbXVsdGlwbGUgd29yZHMnLCAnbXVsdGlwbGUgd29yZHMsIHllYWgnLCBTVUNDRUVELCAnZm91bmQnLCAnbXVsdGlwbGUgd29yZHMnKSwKKyAgICAoJyguKiljKC4qKScsICdhYmNkZScsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ2FiY2RlLWFiLWRlJyksCisgICAgKCdcXCgoLiopLCAoLiopXFwpJywgJyhhLCBiKScsIFNVQ0NFRUQsICdnMisiLSIrZzEnLCAnYi1hJyksCisgICAgKCdba10nLCAnYWInLCBGQUlMKSwKKyAgICAoJ2FbLV0/YycsICdhYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYycpLAorICAgICgnKGFiYylcXDEnLCAnYWJjYWJjJywgU1VDQ0VFRCwgJ2cxJywgJ2FiYycpLAorICAgICgnKFthLWNdKilcXDEnLCAnYWJjYWJjJywgU1VDQ0VFRCwgJ2cxJywgJ2FiYycpLAorICAgICgnXiguKyk/QicsICdBQicsIFNVQ0NFRUQsICdnMScsICdBJyksCisgICAgKCcoYSspLlxcMSQnLCAnYWFhYWEnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FhYWFhLWFhJyksCisgICAgKCdeKGErKS5cXDEkJywgJ2FhYWEnLCBGQUlMKSwKKyAgICAoJyhhYmMpXFwxJywgJ2FiY2FiYycsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWJjYWJjLWFiYycpLAorICAgICgnKFthLWNdKylcXDEnLCAnYWJjYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYmNhYmMtYWJjJyksCisgICAgKCcoYSlcXDEnLCAnYWEnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FhLWEnKSwKKyAgICAoJyhhKylcXDEnLCAnYWEnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FhLWEnKSwKKyAgICAoJyhhKykrXFwxJywgJ2FhJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYS1hJyksCisgICAgKCcoYSkuK1xcMScsICdhYmEnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiYS1hJyksCisgICAgKCcoYSliYSpcXDEnLCAnYWJhJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYmEtYScpLAorICAgICgnKGFhfGEpYVxcMSQnLCAnYWFhJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYWEtYScpLAorICAgICgnKGF8YWEpYVxcMSQnLCAnYWFhJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYWEtYScpLAorICAgICgnKGErKWFcXDEkJywgJ2FhYScsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWFhLWEnKSwKKyAgICAoJyhbYWJjXSopXFwxJywgJ2FiY2FiYycsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWJjYWJjLWFiYycpLAorICAgICgnKGEpKGIpY3xhYicsICdhYicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ2FiLU5vbmUtTm9uZScpLAorICAgICgnKGEpK3gnLCAnYWFheCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWFheC1hJyksCisgICAgKCcoW2FjXSkreCcsICdhYWN4JywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYWN4LWMnKSwKKyAgICAoJyhbXi9dKi8pKnN1YjEvJywgJ2Q6bXNncy90ZGlyL3N1YjEvdHJpYWwvYXdheS5jcHAnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2Q6bXNncy90ZGlyL3N1YjEvLXRkaXIvJyksCisgICAgKCcoW14uXSopXFwuKFteOl0qKTpbVCBdKyguKiknLCAndHJhY2sxLnRpdGxlOlRCbGFoIGJsYWggYmxhaCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyKyItIitnMycsICd0cmFjazEudGl0bGU6VEJsYWggYmxhaCBibGFoLXRyYWNrMS10aXRsZS1CbGFoIGJsYWggYmxhaCcpLAorICAgICgnKFteTl0qTikrJywgJ2FiTk54eXpOJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYk5OeHl6Ti14eXpOJyksCisgICAgKCcoW15OXSpOKSsnLCAnYWJOTnh5eicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWJOTi1OJyksCisgICAgKCcoW2FiY10qKXgnLCAnYWJjeCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWJjeC1hYmMnKSwKKyAgICAoJyhbYWJjXSopeCcsICdhYmMnLCBGQUlMKSwKKyAgICAoJyhbeHl6XSopeCcsICdhYmN4JywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICd4LScpLAorICAgICgnKGEpK2J8YWFjJywgJ2FhYycsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWFjLU5vbmUnKSwKKworICAgICMgVGVzdCBzeW1ib2xpYyBncm91cHMKKworICAgICgnKD9QPGkgZD5hYWEpYScsICdhYWFhJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJyg/UDxpZD5hYWEpYScsICdhYWFhJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitpZCcsICdhYWFhLWFhYScpLAorICAgICgnKD9QPGlkPmFhKSg/UD1pZCknLCAnYWFhYScsIFNVQ0NFRUQsICdmb3VuZCsiLSIraWQnLCAnYWFhYS1hYScpLAorICAgICgnKD9QPGlkPmFhKSg/UD14ZCknLCAnYWFhYScsIFNZTlRBWF9FUlJPUiksCisKKyAgICAjIFRlc3Qgb2N0YWwgZXNjYXBlcy9tZW1vcnkgcmVmZXJlbmNlcworCisgICAgKCdcXDEnLCAnYScsIFNZTlRBWF9FUlJPUiksCisgICAgKCdcXDA5JywgY2hyKDApICsgJzknLCBTVUNDRUVELCAnZm91bmQnLCBjaHIoMCkgKyAnOScpLAorICAgICgnXFwxNDEnLCAnYScsIFNVQ0NFRUQsICdmb3VuZCcsICdhJyksCisgICAgKCcoYSkoYikoYykoZCkoZSkoZikoZykoaCkoaSkoaikoaykobClcXDExOScsICdhYmNkZWZnaGlqa2xrOScsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzExJywgJ2FiY2RlZmdoaWprbGs5LWsnKSwKKworICAgICMgQWxsIHRlc3RzIGZyb20gUGVybAorCisgICAgKCdhYmMnLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnYWJjJywgJ3hiYycsIEZBSUwpLAorICAgICgnYWJjJywgJ2F4YycsIEZBSUwpLAorICAgICgnYWJjJywgJ2FieCcsIEZBSUwpLAorICAgICgnYWJjJywgJ3hhYmN5JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnYWJjJywgJ2FiYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnYWIqYycsICdhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCdhYipiYycsICdhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCdhYipiYycsICdhYmJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYmMnKSwKKyAgICAoJ2FiKmJjJywgJ2FiYmJiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmJiYmMnKSwKKyAgICAoJ2FiezAsfWJjJywgJ2FiYmJiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmJiYmMnKSwKKyAgICAoJ2FiK2JjJywgJ2FiYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJiYycpLAorICAgICgnYWIrYmMnLCAnYWJjJywgRkFJTCksCisgICAgKCdhYitiYycsICdhYnEnLCBGQUlMKSwKKyAgICAoJ2FiezEsfWJjJywgJ2FicScsIEZBSUwpLAorICAgICgnYWIrYmMnLCAnYWJiYmJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYmJiYycpLAorICAgICgnYWJ7MSx9YmMnLCAnYWJiYmJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYmJiYycpLAorICAgICgnYWJ7MSwzfWJjJywgJ2FiYmJiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmJiYmMnKSwKKyAgICAoJ2FiezMsNH1iYycsICdhYmJiYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJiYmJjJyksCisgICAgKCdhYns0LDV9YmMnLCAnYWJiYmJjJywgRkFJTCksCisgICAgKCdhYj9iYycsICdhYmJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYmMnKSwKKyAgICAoJ2FiP2JjJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ2FiezAsMX1iYycsICdhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCdhYj9iYycsICdhYmJiYmMnLCBGQUlMKSwKKyAgICAoJ2FiP2MnLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnYWJ7MCwxfWMnLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnXmFiYyQnLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnXmFiYyQnLCAnYWJjYycsIEZBSUwpLAorICAgICgnXmFiYycsICdhYmNjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnXmFiYyQnLCAnYWFiYycsIEZBSUwpLAorICAgICgnYWJjJCcsICdhYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnXicsICdhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnJyksCisgICAgKCckJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCcsICcnKSwKKyAgICAoJ2EuYycsICdhYmMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCdhLmMnLCAnYXhjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2F4YycpLAorICAgICgnYS4qYycsICdheHl6YycsIFNVQ0NFRUQsICdmb3VuZCcsICdheHl6YycpLAorICAgICgnYS4qYycsICdheHl6ZCcsIEZBSUwpLAorICAgICgnYVtiY11kJywgJ2FiYycsIEZBSUwpLAorICAgICgnYVtiY11kJywgJ2FiZCcsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmQnKSwKKyAgICAoJ2FbYi1kXWUnLCAnYWJkJywgRkFJTCksCisgICAgKCdhW2ItZF1lJywgJ2FjZScsIFNVQ0NFRUQsICdmb3VuZCcsICdhY2UnKSwKKyAgICAoJ2FbYi1kXScsICdhYWMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWMnKSwKKyAgICAoJ2FbLWJdJywgJ2EtJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2EtJyksCisgICAgKCdhW2ItXScsICdhLScsIFNVQ0NFRUQsICdmb3VuZCcsICdhLScpLAorICAgICgnYVtiLWFdJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnYVtdYicsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJ2FbJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnYV0nLCAnYV0nLCBTVUNDRUVELCAnZm91bmQnLCAnYV0nKSwKKyAgICAoJ2FbXV1iJywgJ2FdYicsIFNVQ0NFRUQsICdmb3VuZCcsICdhXWInKSwKKyAgICAoJ2FbXmJjXWQnLCAnYWVkJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FlZCcpLAorICAgICgnYVteYmNdZCcsICdhYmQnLCBGQUlMKSwKKyAgICAoJ2FbXi1iXWMnLCAnYWRjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FkYycpLAorICAgICgnYVteLWJdYycsICdhLWMnLCBGQUlMKSwKKyAgICAoJ2FbXl1iXWMnLCAnYV1jJywgRkFJTCksCisgICAgKCdhW15dYl1jJywgJ2FkYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhZGMnKSwKKyAgICAoJ2FifGNkJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYicpLAorICAgICgnYWJ8Y2QnLCAnYWJjZCcsIFNVQ0NFRUQsICdmb3VuZCcsICdhYicpLAorICAgICgnKCllZicsICdkZWYnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2VmLScpLAorICAgICgnKmEnLCAnLScsIFNZTlRBWF9FUlJPUiksCisgICAgKCcoKiliJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnJGInLCAnYicsIEZBSUwpLAorICAgICgnYVxcJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnYVxcKGInLCAnYShiJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhKGItRXJyb3InKSwKKyAgICAoJ2FcXCgqYicsICdhYicsIFNVQ0NFRUQsICdmb3VuZCcsICdhYicpLAorICAgICgnYVxcKCpiJywgJ2EoKGInLCBTVUNDRUVELCAnZm91bmQnLCAnYSgoYicpLAorICAgICgnYVxcXFxiJywgJ2FcXGInLCBTVUNDRUVELCAnZm91bmQnLCAnYVxcYicpLAorICAgICgnYWJjKScsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJyhhYmMnLCAnLScsIFNZTlRBWF9FUlJPUiksCisgICAgKCcoKGEpKScsICdhYmMnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdhLWEtYScpLAorICAgICgnKGEpYihjKScsICdhYmMnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdhYmMtYS1jJyksCisgICAgKCdhK2IrYycsICdhYWJiYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorICAgICgnYXsxLH1iezEsfWMnLCAnYWFiYmFiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJ2EqKicsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJ2EuKz9jJywgJ2FiY2FiYycsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKyAgICAoJyhhK3xiKSonLCAnYWInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiLWInKSwKKyAgICAoJyhhK3xiKXswLH0nLCAnYWInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiLWInKSwKKyAgICAoJyhhK3xiKSsnLCAnYWInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiLWInKSwKKyAgICAoJyhhK3xiKXsxLH0nLCAnYWInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiLWInKSwKKyAgICAoJyhhK3xiKT8nLCAnYWInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2EtYScpLAorICAgICgnKGErfGIpezAsMX0nLCAnYWInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2EtYScpLAorICAgICgnKSgnLCAnLScsIFNZTlRBWF9FUlJPUiksCisgICAgKCdbXmFiXSonLCAnY2RlJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2NkZScpLAorICAgICgnYWJjJywgJycsIEZBSUwpLAorICAgICgnYSonLCAnJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJycpLAorICAgICgnKFthYmNdKSpkJywgJ2FiYmJjZCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWJiYmNkLWMnKSwKKyAgICAoJyhbYWJjXSkqYmNkJywgJ2FiY2QnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiY2QtYScpLAorICAgICgnYXxifGN8ZHxlJywgJ2UnLCBTVUNDRUVELCAnZm91bmQnLCAnZScpLAorICAgICgnKGF8YnxjfGR8ZSlmJywgJ2VmJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdlZi1lJyksCisgICAgKCdhYmNkKmVmZycsICdhYmNkZWZnJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiY2RlZmcnKSwKKyAgICAoJ2FiKicsICd4YWJ5YWJiYnonLCBTVUNDRUVELCAnZm91bmQnLCAnYWInKSwKKyAgICAoJ2FiKicsICd4YXlhYmJieicsIFNVQ0NFRUQsICdmb3VuZCcsICdhJyksCisgICAgKCcoYWJ8Y2QpZScsICdhYmNkZScsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnY2RlLWNkJyksCisgICAgKCdbYWJoZ2VmZGNdaWonLCAnaGlqJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2hpaicpLAorICAgICgnXihhYnxjZCllJywgJ2FiY2RlJywgRkFJTCksCisgICAgKCcoYWJjfCllZicsICdhYmNkZWYnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2VmLScpLAorICAgICgnKGF8YiljKmQnLCAnYWJjZCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYmNkLWInKSwKKyAgICAoJyhhYnxhYiopYmMnLCAnYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdhYmMtYScpLAorICAgICgnYShbYmNdKiljKicsICdhYmMnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2FiYy1iYycpLAorICAgICgnYShbYmNdKikoYypkKScsICdhYmNkJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnYWJjZC1iYy1kJyksCisgICAgKCdhKFtiY10rKShjKmQpJywgJ2FiY2QnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdhYmNkLWJjLWQnKSwKKyAgICAoJ2EoW2JjXSopKGMrZCknLCAnYWJjZCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ2FiY2QtYi1jZCcpLAorICAgICgnYVtiY2RdKmRjZGNkZScsICdhZGNkY2RlJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FkY2RjZGUnKSwKKyAgICAoJ2FbYmNkXStkY2RjZGUnLCAnYWRjZGNkZScsIEZBSUwpLAorICAgICgnKGFifGEpYipjJywgJ2FiYycsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnYWJjLWFiJyksCisgICAgKCcoKGEpKGIpYykoZCknLCAnYWJjZCcsIFNVQ0NFRUQsICdnMSsiLSIrZzIrIi0iK2czKyItIitnNCcsICdhYmMtYS1iLWQnKSwKKyAgICAoJ1thLXpBLVpfXVthLXpBLVowLTlfXSonLCAnYWxwaGEnLCBTVUNDRUVELCAnZm91bmQnLCAnYWxwaGEnKSwKKyAgICAoJ15hKGJjK3xiW2VoXSlnfC5oJCcsICdhYmgnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ2JoLU5vbmUnKSwKKyAgICAoJyhiYytkJHxlZipnLnxoP2koanxrKSknLCAnZWZmZ3onLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdlZmZnei1lZmZnei1Ob25lJyksCisgICAgKCcoYmMrZCR8ZWYqZy58aD9pKGp8aykpJywgJ2lqJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnaWotaWotaicpLAorICAgICgnKGJjK2QkfGVmKmcufGg/aShqfGspKScsICdlZmZnJywgRkFJTCksCisgICAgKCcoYmMrZCR8ZWYqZy58aD9pKGp8aykpJywgJ2JjZGQnLCBGQUlMKSwKKyAgICAoJyhiYytkJHxlZipnLnxoP2koanxrKSknLCAncmVmZmd6JywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnZWZmZ3otZWZmZ3otTm9uZScpLAorICAgICgnKCgoKCgoKCgoKGEpKSkpKSkpKSkpJywgJ2EnLCBTVUNDRUVELCAnZzEwJywgJ2EnKSwKKyAgICAoJygoKCgoKCgoKChhKSkpKSkpKSkpKVxcMTAnLCAnYWEnLCBTVUNDRUVELCAnZm91bmQnLCAnYWEnKSwKKyMgUHl0aG9uIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgcnVsZXMgZm9yIFxcNDEgc28gdGhpcyBpcyBhIHN5bnRheCBlcnJvcgorIyAgICAoJygoKCgoKCgoKChhKSkpKSkpKSkpKVxcNDEnLCAnYWEnLCBGQUlMKSwKKyMgICAgKCcoKCgoKCgoKCgoYSkpKSkpKSkpKSlcXDQxJywgJ2EhJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2EhJyksCisgICAgKCcoKCgoKCgoKCgoYSkpKSkpKSkpKSlcXDQxJywgJycsIFNZTlRBWF9FUlJPUiksCisgICAgKCcoP2kpKCgoKCgoKCgoKGEpKSkpKSkpKSkpXFw0MScsICcnLCBTWU5UQVhfRVJST1IpLAorICAgICgnKCgoKCgoKCgoYSkpKSkpKSkpKScsICdhJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2EnKSwKKyAgICAoJ211bHRpcGxlIHdvcmRzIG9mIHRleHQnLCAndWgtdWgnLCBGQUlMKSwKKyAgICAoJ211bHRpcGxlIHdvcmRzJywgJ211bHRpcGxlIHdvcmRzLCB5ZWFoJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ211bHRpcGxlIHdvcmRzJyksCisgICAgKCcoLiopYyguKiknLCAnYWJjZGUnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdhYmNkZS1hYi1kZScpLAorICAgICgnXFwoKC4qKSwgKC4qKVxcKScsICcoYSwgYiknLCBTVUNDRUVELCAnZzIrIi0iK2cxJywgJ2ItYScpLAorICAgICgnW2tdJywgJ2FiJywgRkFJTCksCisgICAgKCdhWy1dP2MnLCAnYWMnLCBTVUNDRUVELCAnZm91bmQnLCAnYWMnKSwKKyAgICAoJyhhYmMpXFwxJywgJ2FiY2FiYycsIFNVQ0NFRUQsICdnMScsICdhYmMnKSwKKyAgICAoJyhbYS1jXSopXFwxJywgJ2FiY2FiYycsIFNVQ0NFRUQsICdnMScsICdhYmMnKSwKKyAgICAoJyg/aSlhYmMnLCAnQUJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQycpLAorICAgICgnKD9pKWFiYycsICdYQkMnLCBGQUlMKSwKKyAgICAoJyg/aSlhYmMnLCAnQVhDJywgRkFJTCksCisgICAgKCcoP2kpYWJjJywgJ0FCWCcsIEZBSUwpLAorICAgICgnKD9pKWFiYycsICdYQUJDWScsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkMnKSwKKyAgICAoJyg/aSlhYmMnLCAnQUJBQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJDJyksCisgICAgKCcoP2kpYWIqYycsICdBQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJDJyksCisgICAgKCcoP2kpYWIqYmMnLCAnQUJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQycpLAorICAgICgnKD9pKWFiKmJjJywgJ0FCQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJCQycpLAorICAgICgnKD9pKWFiKj9iYycsICdBQkJCQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJCQkJDJyksCisgICAgKCcoP2kpYWJ7MCx9P2JjJywgJ0FCQkJCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkJCQkMnKSwKKyAgICAoJyg/aSlhYis/YmMnLCAnQUJCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkJDJyksCisgICAgKCcoP2kpYWIrYmMnLCAnQUJDJywgRkFJTCksCisgICAgKCcoP2kpYWIrYmMnLCAnQUJRJywgRkFJTCksCisgICAgKCcoP2kpYWJ7MSx9YmMnLCAnQUJRJywgRkFJTCksCisgICAgKCcoP2kpYWIrYmMnLCAnQUJCQkJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQkJCQycpLAorICAgICgnKD9pKWFiezEsfT9iYycsICdBQkJCQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJCQkJDJyksCisgICAgKCcoP2kpYWJ7MSwzfT9iYycsICdBQkJCQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJCQkJDJyksCisgICAgKCcoP2kpYWJ7Myw0fT9iYycsICdBQkJCQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJCQkJDJyksCisgICAgKCcoP2kpYWJ7NCw1fT9iYycsICdBQkJCQkMnLCBGQUlMKSwKKyAgICAoJyg/aSlhYj8/YmMnLCAnQUJCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkJDJyksCisgICAgKCcoP2kpYWI/P2JjJywgJ0FCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkMnKSwKKyAgICAoJyg/aSlhYnswLDF9P2JjJywgJ0FCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkMnKSwKKyAgICAoJyg/aSlhYj8/YmMnLCAnQUJCQkJDJywgRkFJTCksCisgICAgKCcoP2kpYWI/P2MnLCAnQUJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQycpLAorICAgICgnKD9pKWFiezAsMX0/YycsICdBQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJDJyksCisgICAgKCcoP2kpXmFiYyQnLCAnQUJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQycpLAorICAgICgnKD9pKV5hYmMkJywgJ0FCQ0MnLCBGQUlMKSwKKyAgICAoJyg/aSleYWJjJywgJ0FCQ0MnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJDJyksCisgICAgKCcoP2kpXmFiYyQnLCAnQUFCQycsIEZBSUwpLAorICAgICgnKD9pKWFiYyQnLCAnQUFCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkMnKSwKKyAgICAoJyg/aSleJywgJ0FCQycsIFNVQ0NFRUQsICdmb3VuZCcsICcnKSwKKyAgICAoJyg/aSkkJywgJ0FCQycsIFNVQ0NFRUQsICdmb3VuZCcsICcnKSwKKyAgICAoJyg/aSlhLmMnLCAnQUJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQycpLAorICAgICgnKD9pKWEuYycsICdBWEMnLCBTVUNDRUVELCAnZm91bmQnLCAnQVhDJyksCisgICAgKCcoP2kpYS4qP2MnLCAnQVhZWkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQVhZWkMnKSwKKyAgICAoJyg/aSlhLipjJywgJ0FYWVpEJywgRkFJTCksCisgICAgKCcoP2kpYVtiY11kJywgJ0FCQycsIEZBSUwpLAorICAgICgnKD9pKWFbYmNdZCcsICdBQkQnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJEJyksCisgICAgKCcoP2kpYVtiLWRdZScsICdBQkQnLCBGQUlMKSwKKyAgICAoJyg/aSlhW2ItZF1lJywgJ0FDRScsIFNVQ0NFRUQsICdmb3VuZCcsICdBQ0UnKSwKKyAgICAoJyg/aSlhW2ItZF0nLCAnQUFDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FDJyksCisgICAgKCcoP2kpYVstYl0nLCAnQS0nLCBTVUNDRUVELCAnZm91bmQnLCAnQS0nKSwKKyAgICAoJyg/aSlhW2ItXScsICdBLScsIFNVQ0NFRUQsICdmb3VuZCcsICdBLScpLAorICAgICgnKD9pKWFbYi1hXScsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJyg/aSlhW11iJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnKD9pKWFbJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnKD9pKWFdJywgJ0FdJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FdJyksCisgICAgKCcoP2kpYVtdXWInLCAnQV1CJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FdQicpLAorICAgICgnKD9pKWFbXmJjXWQnLCAnQUVEJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FFRCcpLAorICAgICgnKD9pKWFbXmJjXWQnLCAnQUJEJywgRkFJTCksCisgICAgKCcoP2kpYVteLWJdYycsICdBREMnLCBTVUNDRUVELCAnZm91bmQnLCAnQURDJyksCisgICAgKCcoP2kpYVteLWJdYycsICdBLUMnLCBGQUlMKSwKKyAgICAoJyg/aSlhW15dYl1jJywgJ0FdQycsIEZBSUwpLAorICAgICgnKD9pKWFbXl1iXWMnLCAnQURDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FEQycpLAorICAgICgnKD9pKWFifGNkJywgJ0FCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQicpLAorICAgICgnKD9pKWFifGNkJywgJ0FCQ0QnLCBTVUNDRUVELCAnZm91bmQnLCAnQUInKSwKKyAgICAoJyg/aSkoKWVmJywgJ0RFRicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnRUYtJyksCisgICAgKCcoP2kpKmEnLCAnLScsIFNZTlRBWF9FUlJPUiksCisgICAgKCcoP2kpKCopYicsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJyg/aSkkYicsICdCJywgRkFJTCksCisgICAgKCcoP2kpYVxcJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnKD9pKWFcXChiJywgJ0EoQicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnQShCLUVycm9yJyksCisgICAgKCcoP2kpYVxcKCpiJywgJ0FCJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCJyksCisgICAgKCcoP2kpYVxcKCpiJywgJ0EoKEInLCBTVUNDRUVELCAnZm91bmQnLCAnQSgoQicpLAorICAgICgnKD9pKWFcXFxcYicsICdBXFxCJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FcXEInKSwKKyAgICAoJyg/aSlhYmMpJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnKD9pKShhYmMnLCAnLScsIFNZTlRBWF9FUlJPUiksCisgICAgKCcoP2kpKChhKSknLCAnQUJDJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnQS1BLUEnKSwKKyAgICAoJyg/aSkoYSliKGMpJywgJ0FCQycsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ0FCQy1BLUMnKSwKKyAgICAoJyg/aSlhK2IrYycsICdBQUJCQUJDJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0FCQycpLAorICAgICgnKD9pKWF7MSx9YnsxLH1jJywgJ0FBQkJBQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJDJyksCisgICAgKCcoP2kpYSoqJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgICgnKD9pKWEuKz9jJywgJ0FCQ0FCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkMnKSwKKyAgICAoJyg/aSlhLio/YycsICdBQkNBQkMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUJDJyksCisgICAgKCcoP2kpYS57MCw1fT9jJywgJ0FCQ0FCQycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkMnKSwKKyAgICAoJyg/aSkoYSt8YikqJywgJ0FCJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdBQi1CJyksCisgICAgKCcoP2kpKGErfGIpezAsfScsICdBQicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnQUItQicpLAorICAgICgnKD9pKShhK3xiKSsnLCAnQUInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ0FCLUInKSwKKyAgICAoJyg/aSkoYSt8Yil7MSx9JywgJ0FCJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdBQi1CJyksCisgICAgKCcoP2kpKGErfGIpPycsICdBQicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnQS1BJyksCisgICAgKCcoP2kpKGErfGIpezAsMX0nLCAnQUInLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ0EtQScpLAorICAgICgnKD9pKShhK3xiKXswLDF9PycsICdBQicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnLU5vbmUnKSwKKyAgICAoJyg/aSkpKCcsICctJywgU1lOVEFYX0VSUk9SKSwKKyAgICAoJyg/aSlbXmFiXSonLCAnQ0RFJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ0NERScpLAorICAgICgnKD9pKWFiYycsICcnLCBGQUlMKSwKKyAgICAoJyg/aSlhKicsICcnLCBTVUNDRUVELCAnZm91bmQnLCAnJyksCisgICAgKCcoP2kpKFthYmNdKSpkJywgJ0FCQkJDRCcsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzEnLCAnQUJCQkNELUMnKSwKKyAgICAoJyg/aSkoW2FiY10pKmJjZCcsICdBQkNEJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdBQkNELUEnKSwKKyAgICAoJyg/aSlhfGJ8Y3xkfGUnLCAnRScsIFNVQ0NFRUQsICdmb3VuZCcsICdFJyksCisgICAgKCcoP2kpKGF8YnxjfGR8ZSlmJywgJ0VGJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdFRi1FJyksCisgICAgKCcoP2kpYWJjZCplZmcnLCAnQUJDREVGRycsIFNVQ0NFRUQsICdmb3VuZCcsICdBQkNERUZHJyksCisgICAgKCcoP2kpYWIqJywgJ1hBQllBQkJCWicsIFNVQ0NFRUQsICdmb3VuZCcsICdBQicpLAorICAgICgnKD9pKWFiKicsICdYQVlBQkJCWicsIFNVQ0NFRUQsICdmb3VuZCcsICdBJyksCisgICAgKCcoP2kpKGFifGNkKWUnLCAnQUJDREUnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ0NERS1DRCcpLAorICAgICgnKD9pKVthYmhnZWZkY11paicsICdISUonLCBTVUNDRUVELCAnZm91bmQnLCAnSElKJyksCisgICAgKCcoP2kpXihhYnxjZCllJywgJ0FCQ0RFJywgRkFJTCksCisgICAgKCcoP2kpKGFiY3wpZWYnLCAnQUJDREVGJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdFRi0nKSwKKyAgICAoJyg/aSkoYXxiKWMqZCcsICdBQkNEJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdCQ0QtQicpLAorICAgICgnKD9pKShhYnxhYiopYmMnLCAnQUJDJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdBQkMtQScpLAorICAgICgnKD9pKWEoW2JjXSopYyonLCAnQUJDJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdBQkMtQkMnKSwKKyAgICAoJyg/aSlhKFtiY10qKShjKmQpJywgJ0FCQ0QnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdBQkNELUJDLUQnKSwKKyAgICAoJyg/aSlhKFtiY10rKShjKmQpJywgJ0FCQ0QnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdBQkNELUJDLUQnKSwKKyAgICAoJyg/aSlhKFtiY10qKShjK2QpJywgJ0FCQ0QnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxKyItIitnMicsICdBQkNELUItQ0QnKSwKKyAgICAoJyg/aSlhW2JjZF0qZGNkY2RlJywgJ0FEQ0RDREUnLCBTVUNDRUVELCAnZm91bmQnLCAnQURDRENERScpLAorICAgICgnKD9pKWFbYmNkXStkY2RjZGUnLCAnQURDRENERScsIEZBSUwpLAorICAgICgnKD9pKShhYnxhKWIqYycsICdBQkMnLCBTVUNDRUVELCAnZm91bmQrIi0iK2cxJywgJ0FCQy1BQicpLAorICAgICgnKD9pKSgoYSkoYiljKShkKScsICdBQkNEJywgU1VDQ0VFRCwgJ2cxKyItIitnMisiLSIrZzMrIi0iK2c0JywgJ0FCQy1BLUItRCcpLAorICAgICgnKD9pKVthLXpBLVpfXVthLXpBLVowLTlfXSonLCAnQUxQSEEnLCBTVUNDRUVELCAnZm91bmQnLCAnQUxQSEEnKSwKKyAgICAoJyg/aSleYShiYyt8YltlaF0pZ3wuaCQnLCAnQUJIJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMScsICdCSC1Ob25lJyksCisgICAgKCcoP2kpKGJjK2QkfGVmKmcufGg/aShqfGspKScsICdFRkZHWicsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ0VGRkdaLUVGRkdaLU5vbmUnKSwKKyAgICAoJyg/aSkoYmMrZCR8ZWYqZy58aD9pKGp8aykpJywgJ0lKJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnSUotSUotSicpLAorICAgICgnKD9pKShiYytkJHxlZipnLnxoP2koanxrKSknLCAnRUZGRycsIEZBSUwpLAorICAgICgnKD9pKShiYytkJHxlZipnLnxoP2koanxrKSknLCAnQkNERCcsIEZBSUwpLAorICAgICgnKD9pKShiYytkJHxlZipnLnxoP2koanxrKSknLCAnUkVGRkdaJywgU1VDQ0VFRCwgJ2ZvdW5kKyItIitnMSsiLSIrZzInLCAnRUZGR1otRUZGR1otTm9uZScpLAorICAgICgnKD9pKSgoKCgoKCgoKChhKSkpKSkpKSkpKScsICdBJywgU1VDQ0VFRCwgJ2cxMCcsICdBJyksCisgICAgKCcoP2kpKCgoKCgoKCgoKGEpKSkpKSkpKSkpXFwxMCcsICdBQScsIFNVQ0NFRUQsICdmb3VuZCcsICdBQScpLAorICAgICMoJyg/aSkoKCgoKCgoKCgoYSkpKSkpKSkpKSlcXDQxJywgJ0FBJywgRkFJTCksCisgICAgIygnKD9pKSgoKCgoKCgoKChhKSkpKSkpKSkpKVxcNDEnLCAnQSEnLCBTVUNDRUVELCAnZm91bmQnLCAnQSEnKSwKKyAgICAoJyg/aSkoKCgoKCgoKChhKSkpKSkpKSkpJywgJ0EnLCBTVUNDRUVELCAnZm91bmQnLCAnQScpLAorICAgICgnKD9pKSg/Oig/Oig/Oig/Oig/Oig/Oig/Oig/Oig/OihhKSkpKSkpKSkpKScsICdBJywgU1VDQ0VFRCwgJ2cxJywgJ0EnKSwKKyAgICAoJyg/aSkoPzooPzooPzooPzooPzooPzooPzooPzooPzooYXxifGMpKSkpKSkpKSkpJywgJ0MnLCBTVUNDRUVELCAnZzEnLCAnQycpLAorICAgICgnKD9pKW11bHRpcGxlIHdvcmRzIG9mIHRleHQnLCAnVUgtVUgnLCBGQUlMKSwKKyAgICAoJyg/aSltdWx0aXBsZSB3b3JkcycsICdNVUxUSVBMRSBXT1JEUywgWUVBSCcsIFNVQ0NFRUQsICdmb3VuZCcsICdNVUxUSVBMRSBXT1JEUycpLAorICAgICgnKD9pKSguKiljKC4qKScsICdBQkNERScsIFNVQ0NFRUQsICdmb3VuZCsiLSIrZzErIi0iK2cyJywgJ0FCQ0RFLUFCLURFJyksCisgICAgKCcoP2kpXFwoKC4qKSwgKC4qKVxcKScsICcoQSwgQiknLCBTVUNDRUVELCAnZzIrIi0iK2cxJywgJ0ItQScpLAorICAgICgnKD9pKVtrXScsICdBQicsIEZBSUwpLAorIyAgICAoJyg/aSlhYmNkJywgJ0FCQ0QnLCBTVUNDRUVELCAnZm91bmQrIi0iK1xcZm91bmQrIi0iK1xcXFxmb3VuZCcsICdBQkNELSQmLVxcQUJDRCcpLAorIyAgICAoJyg/aSlhKGJjKWQnLCAnQUJDRCcsIFNVQ0NFRUQsICdnMSsiLSIrXFxnMSsiLSIrXFxcXGcxJywgJ0JDLSQxLVxcQkMnKSwKKyAgICAoJyg/aSlhWy1dP2MnLCAnQUMnLCBTVUNDRUVELCAnZm91bmQnLCAnQUMnKSwKKyAgICAoJyg/aSkoYWJjKVxcMScsICdBQkNBQkMnLCBTVUNDRUVELCAnZzEnLCAnQUJDJyksCisgICAgKCcoP2kpKFthLWNdKilcXDEnLCAnQUJDQUJDJywgU1VDQ0VFRCwgJ2cxJywgJ0FCQycpLAorICAgICgnYSg/IWIpLicsICdhYmFkJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FkJyksCisgICAgKCdhKD89ZCkuJywgJ2FiYWQnLCBTVUNDRUVELCAnZm91bmQnLCAnYWQnKSwKKyAgICAoJ2EoPz1jfGQpLicsICdhYmFkJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FkJyksCisgICAgKCdhKD86YnxjfGQpKC4pJywgJ2FjZScsIFNVQ0NFRUQsICdnMScsICdlJyksCisgICAgKCdhKD86YnxjfGQpKiguKScsICdhY2UnLCBTVUNDRUVELCAnZzEnLCAnZScpLAorICAgICgnYSg/OmJ8Y3xkKSs/KC4pJywgJ2FjZScsIFNVQ0NFRUQsICdnMScsICdlJyksCisgICAgKCdhKD86YnwoY3xlKXsxLDJ9P3xkKSs/KC4pJywgJ2FjZScsIFNVQ0NFRUQsICdnMSArIGcyJywgJ2NlJyksCisgICAgKCdeKC4rKT9CJywgJ0FCJywgU1VDQ0VFRCwgJ2cxJywgJ0EnKSwKKworICAgICMgbG9va2JlaGluZDogc3BsaXQgYnkgOiBidXQgbm90IGlmIGl0IGlzIGVzY2FwZWQgYnkgLS4KKyAgICAoJyg/PCEtKTooLio/KSg/PCEtKTonLCAnYTpiYy06ZGU6ZicsIFNVQ0NFRUQsICdnMScsICdiYy06ZGUnICksCisgICAgIyBlc2NhcGluZyB3aXRoIFwgYXMgd2Uga25vdyBpdAorICAgICgnKD88IVxcXCk6KC4qPykoPzwhXFxcKTonLCAnYTpiY1xcOmRlOmYnLCBTVUNDRUVELCAnZzEnLCAnYmNcXDpkZScgKSwKKyAgICAjIHRlcm1pbmF0aW5nIHdpdGggJyBhbmQgZXNjYXBpbmcgd2l0aCA/IGFzIGluIGVkaWZhY3QKKyAgICAoIig/PCFcXD8pJyguKj8pKD88IVxcPyknIiwgImEnYmM/J2RlJ2YiLCBTVUNDRUVELCAnZzEnLCAiYmM/J2RlIiApLAorCisgICAgIyBDb21tZW50cyB1c2luZyB0aGUgKD8jLi4uKSBzeW50YXgKKworICAgICgndyg/IyBjb21tZW50JywgJ3cnLCBTWU5UQVhfRVJST1IpLAorICAgICgndyg/IyBjb21tZW50IDEpeHkoPyMgY29tbWVudCAyKXonLCAnd3h5eicsIFNVQ0NFRUQsICdmb3VuZCcsICd3eHl6JyksCisKKyAgICAjIENoZWNrIG9kZCBwbGFjZW1lbnQgb2YgZW1iZWRkZWQgcGF0dGVybiBtb2RpZmllcnMKKworICAgICMgbm90IGFuIGVycm9yIHVuZGVyIFBDUkUvUFJFOgorICAgICgndyg/aSknLCAnVycsIFNVQ0NFRUQsICdmb3VuZCcsICdXJyksCisgICAgIyAoJ3coP2kpJywgJ1cnLCBTWU5UQVhfRVJST1IpLAorCisgICAgIyBDb21tZW50cyB1c2luZyB0aGUgeCBlbWJlZGRlZCBwYXR0ZXJuIG1vZGlmaWVyCisKKyAgICAoIiIiKD94KXcjIGNvbW1lbnQgMQorICAgICAgICB4IHkKKyAgICAgICAgIyBjb21tZW50IDIKKyAgICAgICAgeiIiIiwgJ3d4eXonLCBTVUNDRUVELCAnZm91bmQnLCAnd3h5eicpLAorCisgICAgIyB1c2luZyB0aGUgbSBlbWJlZGRlZCBwYXR0ZXJuIG1vZGlmaWVyCisKKyAgICAoJ15hYmMnLCAiIiJqa2wKK2FiYworeHl6IiIiLCBGQUlMKSwKKyAgICAoJyg/bSleYWJjJywgIiIiamtsCithYmMKK3h5eiIiIiwgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FiYycpLAorCisgICAgKCcoP20pYWJjJCcsICIiImprbAoreHl6YWJjCisxMjMiIiIsIFNVQ0NFRUQsICdmb3VuZCcsICdhYmMnKSwKKworICAgICMgdXNpbmcgdGhlIHMgZW1iZWRkZWQgcGF0dGVybiBtb2RpZmllcgorCisgICAgKCdhLmInLCAnYVxuYicsIEZBSUwpLAorICAgICgnKD9zKWEuYicsICdhXG5iJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2FcbmInKSwKKworICAgICMgdGVzdCBcdywgZXRjLiBib3RoIGluc2lkZSBhbmQgb3V0c2lkZSBjaGFyYWN0ZXIgY2xhc3NlcworCisgICAgKCdcXHcrJywgJy0tYWJfY2QwMTIzLS0nLCBTVUNDRUVELCAnZm91bmQnLCAnYWJfY2QwMTIzJyksCisgICAgKCdbXFx3XSsnLCAnLS1hYl9jZDAxMjMtLScsIFNVQ0NFRUQsICdmb3VuZCcsICdhYl9jZDAxMjMnKSwKKyAgICAoJ1xcRCsnLCAnMTIzNGFiYzU2NzgnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCdbXFxEXSsnLCAnMTIzNGFiYzU2NzgnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJjJyksCisgICAgKCdbXFxkYS1mQS1GXSsnLCAnMTIzYWJjJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJzEyM2FiYycpLAorICAgICMgbm90IGFuIGVycm9yIHVuZGVyIFBDUkUvUFJFOgorICAgICMgKCdbXFxkLXhdJywgJy0nLCBTWU5UQVhfRVJST1IpLAorICAgIChyJyhbXHNdKikoW1xTXSopKFtcc10qKScsICcgdGVzdGluZyExOTcyJywgU1VDQ0VFRCwgJ2czK2cyK2cxJywgJ3Rlc3RpbmchMTk3MiAnKSwKKyAgICAocicoXHMqKShcUyopKFxzKiknLCAnIHRlc3RpbmchMTk3MicsIFNVQ0NFRUQsICdnMytnMitnMScsICd0ZXN0aW5nITE5NzIgJyksCisKKyAgICAocidceGZmJywgJ1wzNzcnLCBTVUNDRUVELCAnZm91bmQnLCBjaHIoMjU1KSksCisgICAgIyBuZXcgXHggc2VtYW50aWNzCisgICAgKHInXHgwMGZmJywgJ1wzNzcnLCBGQUlMKSwKKyAgICAjIChyJ1x4MDBmZicsICdcMzc3JywgU1VDQ0VFRCwgJ2ZvdW5kJywgY2hyKDI1NSkpLAorICAgIChyJ1x0XG5cdlxyXGZcYVxnJywgJ1x0XG5cdlxyXGZcYWcnLCBTVUNDRUVELCAnZm91bmQnLCAnXHRcblx2XHJcZlxhZycpLAorICAgICgnXHRcblx2XHJcZlxhXGcnLCAnXHRcblx2XHJcZlxhZycsIFNVQ0NFRUQsICdmb3VuZCcsICdcdFxuXHZcclxmXGFnJyksCisgICAgKHInXHRcblx2XHJcZlxhJywgJ1x0XG5cdlxyXGZcYScsIFNVQ0NFRUQsICdmb3VuZCcsIGNocig5KStjaHIoMTApK2NocigxMSkrY2hyKDEzKStjaHIoMTIpK2Nocig3KSksCisgICAgKHInW1x0XVtcbl1bXHZdW1xyXVtcZl1bXGJdJywgJ1x0XG5cdlxyXGZcYicsIFNVQ0NFRUQsICdmb3VuZCcsICdcdFxuXHZcclxmXGInKSwKKworICAgICMKKyAgICAjIHBvc3QtMS41LjIgYWRkaXRpb25zCisKKyAgICAjIHhtbGxpYiBwcm9ibGVtCisgICAgKHInKChbYS16XSspOik/KFthLXpdKykkJywgJ3NtaWwnLCBTVUNDRUVELCAnZzErIi0iK2cyKyItIitnMycsICdOb25lLU5vbmUtc21pbCcpLAorICAgICMgYnVnIDExMDg2NjogcmVmZXJlbmNlIHRvIHVuZGVmaW5lZCBncm91cAorICAgIChyJygoLilcMSspJywgJycsIFNZTlRBWF9FUlJPUiksCisgICAgIyBidWcgMTExODY5OiBzZWFyY2ggKFBSRS9QQ1JFIGZhaWxzIG9uIHRoaXMgb25lLCBTUkUgZG9lc24ndCkKKyAgICAocicuKmQnLCAnYWJjXG5hYmQnLCBTVUNDRUVELCAnZm91bmQnLCAnYWJkJyksCisgICAgIyBidWcgMTEyNDY4OiB2YXJpb3VzIGV4cGVjdGVkIHN5bnRheCBlcnJvcnMKKyAgICAocicoJywgJycsIFNZTlRBWF9FUlJPUiksCisgICAgKHInW1w0MV0nLCAnIScsIFNVQ0NFRUQsICdmb3VuZCcsICchJyksCisgICAgIyBidWcgMTE0MDMzOiBub3RoaW5nIHRvIHJlcGVhdAorICAgIChyJyh4Pyk/JywgJ3gnLCBTVUNDRUVELCAnZm91bmQnLCAneCcpLAorICAgICMgYnVnIDExNTA0MDogcmVzY2FuIGlmIGZsYWdzIGFyZSBtb2RpZmllZCBpbnNpZGUgcGF0dGVybgorICAgIChyJyAoP3gpZm9vICcsICdmb28nLCBTVUNDRUVELCAnZm91bmQnLCAnZm9vJyksCisgICAgIyBidWcgMTE1NjE4OiBuZWdhdGl2ZSBsb29rYWhlYWQKKyAgICAocicoPzwhYWJjKShkLmYpJywgJ2FiY2RlZmRvZicsIFNVQ0NFRUQsICdmb3VuZCcsICdkb2YnKSwKKyAgICAjIGJ1ZyAxMTYyNTE6IGNoYXJhY3RlciBjbGFzcyBidWcKKyAgICAocidbXHctXSsnLCAnbGFzZXJfYmVhbScsIFNVQ0NFRUQsICdmb3VuZCcsICdsYXNlcl9iZWFtJyksCisgICAgIyBidWcgMTIzNzY5KzEyNzI1OTogbm9uLWdyZWVkeSBiYWNrdHJhY2tpbmcgYnVnCisgICAgKHInLio/XFMgKjonLCAneHg6JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ3h4OicpLAorICAgIChyJ2FbIF0qP1wgKFxkKykuKicsICdhICAgMTAnLCBTVUNDRUVELCAnZm91bmQnLCAnYSAgIDEwJyksCisgICAgKHInYVsgXSo/XCAoXGQrKS4qJywgJ2EgICAgMTAnLCBTVUNDRUVELCAnZm91bmQnLCAnYSAgICAxMCcpLAorICAgICMgYnVnIDEyNzI1OTogXFogc2hvdWxkbid0IGRlcGVuZCBvbiBtdWx0aWxpbmUgbW9kZQorICAgIChyJyg/bXMpLio/eFxzKlxaKC4qKScsJ3h4XG54XG4nLCBTVUNDRUVELCAnZzEnLCAnJyksCisgICAgIyBidWcgMTI4ODk5OiB1cHBlcmNhc2UgbGl0ZXJhbHMgdW5kZXIgdGhlIGlnbm9yZWNhc2UgZmxhZworICAgIChyJyg/aSlNKycsICdNTU0nLCBTVUNDRUVELCAnZm91bmQnLCAnTU1NJyksCisgICAgKHInKD9pKW0rJywgJ01NTScsIFNVQ0NFRUQsICdmb3VuZCcsICdNTU0nKSwKKyAgICAocicoP2kpW01dKycsICdNTU0nLCBTVUNDRUVELCAnZm91bmQnLCAnTU1NJyksCisgICAgKHInKD9pKVttXSsnLCAnTU1NJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ01NTScpLAorICAgICMgYnVnIDEzMDc0ODogXiogc2hvdWxkIGJlIGFuIGVycm9yIChub3RoaW5nIHRvIHJlcGVhdCkKKyAgICAocideKicsICcnLCBTWU5UQVhfRVJST1IpLAorICAgICMgYnVnIDEzMzI4MzogbWluaW1pemluZyByZXBlYXQgcHJvYmxlbQorICAgIChyJyIoPzpcXCJ8W14iXSkqPyInLCByJyJcIiInLCBTVUNDRUVELCAnZm91bmQnLCByJyJcIiInKSwKKyAgICAjIGJ1ZyA0Nzc3Mjg6IG1pbmltaXppbmcgcmVwZWF0IHByb2JsZW0KKyAgICAocideLio/JCcsICdvbmVcbnR3b1xudGhyZWVcbicsIEZBSUwpLAorICAgICMgYnVnIDQ4Mzc4OTogbWluaW1pemluZyByZXBlYXQgcHJvYmxlbQorICAgIChyJ2FbXj5dKj9iJywgJ2E+YicsIEZBSUwpLAorICAgICMgYnVnIDQ5MDU3MzogbWluaW1pemluZyByZXBlYXQgcHJvYmxlbQorICAgIChyJ15hKj8kJywgJ2ZvbycsIEZBSUwpLAorICAgICMgYnVnIDQ3MDU4MjogbmVzdGVkIGdyb3VwcyBwcm9ibGVtCisgICAgKHInXigoYSljKT8oYWIpJCcsICdhYicsIFNVQ0NFRUQsICdnMSsiLSIrZzIrIi0iK2czJywgJ05vbmUtTm9uZS1hYicpLAorICAgICMgYW5vdGhlciBtaW5pbWl6aW5nIHJlcGVhdCBwcm9ibGVtIChjYXB0dXJpbmcgZ3JvdXBzIGluIGFzc2VydGlvbnMpCisgICAgKCdeKFthYl0qPykoPz0oYik/KWMnLCAnYWJjJywgU1VDQ0VFRCwgJ2cxKyItIitnMicsICdhYi1Ob25lJyksCisgICAgKCdeKFthYl0qPykoPyEoYikpYycsICdhYmMnLCBTVUNDRUVELCAnZzErIi0iK2cyJywgJ2FiLU5vbmUnKSwKKyAgICAoJ14oW2FiXSo/KSg/PCEoYSkpYycsICdhYmMnLCBTVUNDRUVELCAnZzErIi0iK2cyJywgJ2FiLU5vbmUnKSwKK10KKwordHJ5OgorICAgIHUgPSBldmFsKCJ1J1xOe0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVN9JyIpCitleGNlcHQgU3ludGF4RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICB0ZXN0cy5leHRlbmQoWworICAgICMgYnVnIDQxMDI3MTogXGIgYnJva2VuIHVuZGVyIGxvY2FsZXMKKyAgICAocidcYi5cYicsICdhJywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2EnKSwKKyAgICAocicoP3UpXGIuXGInLCB1LCBTVUNDRUVELCAnZm91bmQnLCB1KSwKKyAgICAocicoP3UpXHcnLCB1LCBTVUNDRUVELCAnZm91bmQnLCB1KSwKKyAgICBdKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3JlZ3J0ZXN0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3JlZ3J0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNmM2NkNjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvcmVncnRlc3QucHkKQEAgLTAsMCArMSwxNTYxIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyIiIgorVXNhZ2U6CisKK3B5dGhvbiAtbSB0ZXN0LnJlZ3J0ZXN0IFtvcHRpb25zXSBbdGVzdF9uYW1lMSBbdGVzdF9uYW1lMiAuLi5dXQorcHl0aG9uIHBhdGgvdG8vTGliL3Rlc3QvcmVncnRlc3QucHkgW29wdGlvbnNdIFt0ZXN0X25hbWUxIFt0ZXN0X25hbWUyIC4uLl1dCisKKworSWYgbm8gYXJndW1lbnRzIG9yIG9wdGlvbnMgYXJlIHByb3ZpZGVkLCBmaW5kcyBhbGwgZmlsZXMgbWF0Y2hpbmcKK3RoZSBwYXR0ZXJuICJ0ZXN0XyoiIGluIHRoZSBMaWIvdGVzdCBzdWJkaXJlY3RvcnkgYW5kIHJ1bnMKK3RoZW0gaW4gYWxwaGFiZXRpY2FsIG9yZGVyIChidXQgc2VlIC1NIGFuZCAtdSwgYmVsb3csIGZvciBleGNlcHRpb25zKS4KKworRm9yIG1vcmUgcmlnb3JvdXMgdGVzdGluZywgaXQgaXMgdXNlZnVsIHRvIHVzZSB0aGUgZm9sbG93aW5nCitjb21tYW5kIGxpbmU6CisKK3B5dGhvbiAtRSAtdHQgLVdkIC0zIC1tIHRlc3QucmVncnRlc3QgW29wdGlvbnNdIFt0ZXN0X25hbWUxIC4uLl0KKworCitPcHRpb25zOgorCistaC8tLWhlbHAgICAgICAgLS0gcHJpbnQgdGhpcyB0ZXh0IGFuZCBleGl0CisKK1ZlcmJvc2l0eQorCistdi8tLXZlcmJvc2UgICAgLS0gcnVuIHRlc3RzIGluIHZlcmJvc2UgbW9kZSB3aXRoIG91dHB1dCB0byBzdGRvdXQKKy13Ly0tdmVyYm9zZTIgICAtLSByZS1ydW4gZmFpbGVkIHRlc3RzIGluIHZlcmJvc2UgbW9kZQorLVcvLS12ZXJib3NlMyAgIC0tIHJlLXJ1biBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlIGltbWVkaWF0ZWx5CistcS8tLXF1aWV0ICAgICAgLS0gbm8gb3V0cHV0IHVubGVzcyBvbmUgb3IgbW9yZSB0ZXN0cyBmYWlsCistUy8tLXNsb3cgICAgICAgLS0gcHJpbnQgdGhlIHNsb3dlc3QgMTAgdGVzdHMKKyAgIC0taGVhZGVyICAgICAtLSBwcmludCBoZWFkZXIgd2l0aCBpbnRlcnByZXRlciBpbmZvCisKK1NlbGVjdGluZyB0ZXN0cworCistci8tLXJhbmRvbWl6ZSAgLS0gcmFuZG9taXplIHRlc3QgZXhlY3V0aW9uIG9yZGVyIChzZWUgYmVsb3cpCisgICAtLXJhbmRzZWVkICAgLS0gcGFzcyBhIHJhbmRvbSBzZWVkIHRvIHJlcHJvZHVjZSBhIHByZXZpb3VzIHJhbmRvbSBydW4KKy1mLy0tZnJvbWZpbGUgICAtLSByZWFkIG5hbWVzIG9mIHRlc3RzIHRvIHJ1biBmcm9tIGEgZmlsZSAoc2VlIGJlbG93KQorLXgvLS1leGNsdWRlICAgIC0tIGFyZ3VtZW50cyBhcmUgdGVzdHMgdG8gKmV4Y2x1ZGUqCistcy8tLXNpbmdsZSAgICAgLS0gc2luZ2xlIHN0ZXAgdGhyb3VnaCBhIHNldCBvZiB0ZXN0cyAoc2VlIGJlbG93KQorLXUvLS11c2UgUkVTMSxSRVMyLC4uLgorICAgICAgICAgICAgICAgIC0tIHNwZWNpZnkgd2hpY2ggc3BlY2lhbCByZXNvdXJjZSBpbnRlbnNpdmUgdGVzdHMgdG8gcnVuCistTS8tLW1lbWxpbWl0IExJTUlUCisgICAgICAgICAgICAgICAgLS0gcnVuIHZlcnkgbGFyZ2UgbWVtb3J5LWNvbnN1bWluZyB0ZXN0cworCitTcGVjaWFsIHJ1bnMKKworLWwvLS1maW5kbGVha3MgIC0tIGlmIEdDIGlzIGF2YWlsYWJsZSBkZXRlY3QgdGVzdHMgdGhhdCBsZWFrIG1lbW9yeQorLUwvLS1ydW5sZWFrcyAgIC0tIHJ1biB0aGUgbGVha3MoMSkgY29tbWFuZCBqdXN0IGJlZm9yZSBleGl0CistUi8tLWh1bnRybGVha3MgUlVOQ09VTlRTCisgICAgICAgICAgICAgICAgLS0gc2VhcmNoIGZvciByZWZlcmVuY2UgbGVha3MgKG5lZWRzIGRlYnVnIGJ1aWxkLCB2LiBzbG93KQorLWovLS1tdWx0aXByb2Nlc3MgUFJPQ0VTU0VTCisgICAgICAgICAgICAgICAgLS0gcnVuIFBST0NFU1NFUyBwcm9jZXNzZXMgYXQgb25jZQorLVQvLS1jb3ZlcmFnZSAgIC0tIHR1cm4gb24gY29kZSBjb3ZlcmFnZSB0cmFjaW5nIHVzaW5nIHRoZSB0cmFjZSBtb2R1bGUKKy1ELy0tY292ZXJkaXIgRElSRUNUT1JZCisgICAgICAgICAgICAgICAgLS0gRGlyZWN0b3J5IHdoZXJlIGNvdmVyYWdlIGZpbGVzIGFyZSBwdXQKKy1OLy0tbm9jb3ZlcmRpciAtLSBQdXQgY292ZXJhZ2UgZmlsZXMgYWxvbmdzaWRlIG1vZHVsZXMKKy10Ly0tdGhyZXNob2xkIFRIUkVTSE9MRAorICAgICAgICAgICAgICAgIC0tIGNhbGwgZ2Muc2V0X3RocmVzaG9sZChUSFJFU0hPTEQpCistRi8tLWZvcmV2ZXIgICAgLS0gcnVuIHRoZSBzcGVjaWZpZWQgdGVzdHMgaW4gYSBsb29wLCB1bnRpbCBhbiBlcnJvciBoYXBwZW5zCisKKworQWRkaXRpb25hbCBPcHRpb24gRGV0YWlsczoKKworLXIgcmFuZG9taXplcyB0ZXN0IGV4ZWN1dGlvbiBvcmRlci4gWW91IGNhbiB1c2UgLS1yYW5kc2VlZD1pbnQgdG8gcHJvdmlkZSBhCitpbnQgc2VlZCB2YWx1ZSBmb3IgdGhlIHJhbmRvbWl6ZXI7IHRoaXMgaXMgdXNlZnVsIGZvciByZXByb2R1Y2luZyB0cm91Ymxlc29tZQordGVzdCBvcmRlcnMuCisKKy1zIE9uIHRoZSBmaXJzdCBpbnZvY2F0aW9uIG9mIHJlZ3J0ZXN0IHVzaW5nIC1zLCB0aGUgZmlyc3QgdGVzdCBmaWxlIGZvdW5kCitvciB0aGUgZmlyc3QgdGVzdCBmaWxlIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgcnVuLCBhbmQgdGhlIG5hbWUgb2YKK3RoZSBuZXh0IHRlc3QgaXMgcmVjb3JkZWQgaW4gYSBmaWxlIG5hbWVkIHB5bmV4dHRlc3QuICBJZiBydW4gZnJvbSB0aGUKK1B5dGhvbiBidWlsZCBkaXJlY3RvcnksIHB5bmV4dHRlc3QgaXMgbG9jYXRlZCBpbiB0aGUgJ2J1aWxkJyBzdWJkaXJlY3RvcnksCitvdGhlcndpc2UgaXQgaXMgbG9jYXRlZCBpbiB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkuICBPbiBzdWJzZXF1ZW50IHJ1bnMsCit0aGUgdGVzdCBpbiBweW5leHR0ZXN0IGlzIHJ1biwgYW5kIHRoZSBuZXh0IHRlc3QgaXMgd3JpdHRlbiB0byBweW5leHR0ZXN0LgorV2hlbiB0aGUgbGFzdCB0ZXN0IGhhcyBiZWVuIHJ1biwgcHluZXh0dGVzdCBpcyBkZWxldGVkLiAgSW4gdGhpcyB3YXkgaXQKK2lzIHBvc3NpYmxlIHRvIHNpbmdsZSBzdGVwIHRocm91Z2ggdGhlIHRlc3QgZmlsZXMuICBUaGlzIGlzIHVzZWZ1bCB3aGVuCitkb2luZyBtZW1vcnkgYW5hbHlzaXMgb24gdGhlIFB5dGhvbiBpbnRlcnByZXRlciwgd2hpY2ggcHJvY2VzcyB0ZW5kcyB0bworY29uc3VtZSB0b28gbWFueSByZXNvdXJjZXMgdG8gcnVuIHRoZSBmdWxsIHJlZ3Jlc3Npb24gdGVzdCBub24tc3RvcC4KKworLWYgcmVhZHMgdGhlIG5hbWVzIG9mIHRlc3RzIGZyb20gdGhlIGZpbGUgZ2l2ZW4gYXMgZidzIGFyZ3VtZW50LCBvbmUKK29yIG1vcmUgdGVzdCBuYW1lcyBwZXIgbGluZS4gIFdoaXRlc3BhY2UgaXMgaWdub3JlZC4gIEJsYW5rIGxpbmVzIGFuZAorbGluZXMgYmVnaW5uaW5nIHdpdGggJyMnIGFyZSBpZ25vcmVkLiAgVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IKK3doaXR0bGluZyBkb3duIGZhaWx1cmVzIGludm9sdmluZyBpbnRlcmFjdGlvbnMgYW1vbmcgdGVzdHMuCisKKy1MIGNhdXNlcyB0aGUgbGVha3MoMSkgY29tbWFuZCB0byBiZSBydW4ganVzdCBiZWZvcmUgZXhpdCBpZiBpdCBleGlzdHMuCitsZWFrcygxKSBpcyBhdmFpbGFibGUgb24gTWFjIE9TIFggYW5kIHByZXN1bWFibHkgb24gc29tZSBvdGhlcgorRnJlZUJTRC1kZXJpdmVkIHN5c3RlbXMuCisKKy1SIHJ1bnMgZWFjaCB0ZXN0IHNldmVyYWwgdGltZXMgYW5kIGV4YW1pbmVzIHN5cy5nZXR0b3RhbHJlZmNvdW50KCkgdG8KK3NlZSBpZiB0aGUgdGVzdCBhcHBlYXJzIHRvIGJlIGxlYWtpbmcgcmVmZXJlbmNlcy4gIFRoZSBhcmd1bWVudCBzaG91bGQKK2JlIG9mIHRoZSBmb3JtIHN0YWI6cnVuOmZuYW1lIHdoZXJlICdzdGFiJyBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZQordGVzdCBpcyBydW4gdG8gbGV0IGdldHRvdGFscmVmY291bnQgc2V0dGxlIGRvd24sICdydW4nIGlzIHRoZSBudW1iZXIKK29mIHRpbWVzIGZ1cnRoZXIgaXQgaXMgcnVuIGFuZCAnZm5hbWUnIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoZQorcmVwb3J0cyBhcmUgd3JpdHRlbiB0by4gIFRoZXNlIHBhcmFtZXRlcnMgYWxsIGhhdmUgZGVmYXVsdHMgKDUsIDQgYW5kCisicmVmbG9nLnR4dCIgcmVzcGVjdGl2ZWx5KSwgYW5kIHRoZSBtaW5pbWFsIGludm9jYXRpb24gaXMgJy1SIDonLgorCistTSBydW5zIHRlc3RzIHRoYXQgcmVxdWlyZSBhbiBleG9yYml0YW50IGFtb3VudCBvZiBtZW1vcnkuIFRoZXNlIHRlc3RzCit0eXBpY2FsbHkgdHJ5IHRvIGFzY2VydGFpbiBjb250YWluZXJzIGtlZXAgd29ya2luZyB3aGVuIGNvbnRhaW5pbmcgbW9yZSB0aGFuCisyIGJpbGxpb24gb2JqZWN0cywgd2hpY2ggb25seSB3b3JrcyBvbiA2NC1iaXQgc3lzdGVtcy4gVGhlcmUgYXJlIGFsc28gc29tZQordGVzdHMgdGhhdCB0cnkgdG8gZXhoYXVzdCB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgcHJvY2Vzcywgd2hpY2ggb25seSBtYWtlcworc2Vuc2Ugb24gMzItYml0IHN5c3RlbXMgd2l0aCBhdCBsZWFzdCAyR2Igb2YgbWVtb3J5LiBUaGUgcGFzc2VkLWluIG1lbWxpbWl0LAord2hpY2ggaXMgYSBzdHJpbmcgaW4gdGhlIGZvcm0gb2YgJzIuNUdiJywgZGV0ZXJtaW5lcyBob3dtdWNoIG1lbW9yeSB0aGUKK3Rlc3RzIHdpbGwgbGltaXQgdGhlbXNlbHZlcyB0byAoYnV0IHRoZXkgbWF5IGdvIHNsaWdodGx5IG92ZXIuKSBUaGUgbnVtYmVyCitzaG91bGRuJ3QgYmUgbW9yZSBtZW1vcnkgdGhhbiB0aGUgbWFjaGluZSBoYXMgKGluY2x1ZGluZyBzd2FwIG1lbW9yeSkuIFlvdQorc2hvdWxkIGFsc28ga2VlcCBpbiBtaW5kIHRoYXQgc3dhcCBtZW1vcnkgaXMgZ2VuZXJhbGx5IG11Y2gsIG11Y2ggc2xvd2VyCit0aGFuIFJBTSwgYW5kIHNldHRpbmcgbWVtbGltaXQgdG8gYWxsIGF2YWlsYWJsZSBSQU0gb3IgaGlnaGVyIHdpbGwgaGVhdmlseQordGF4IHRoZSBtYWNoaW5lLiBPbiB0aGUgb3RoZXIgaGFuZCwgaXQgaXMgbm8gdXNlIHJ1bm5pbmcgdGhlc2UgdGVzdHMgd2l0aCBhCitsaW1pdCBvZiBsZXNzIHRoYW4gMi41R2IsIGFuZCBtYW55IHJlcXVpcmUgbW9yZSB0aGFuIDIwR2IuIFRlc3RzIHRoYXQgZXhwZWN0Cit0byB1c2UgbW9yZSB0aGFuIG1lbWxpbWl0IG1lbW9yeSB3aWxsIGJlIHNraXBwZWQuIFRoZSBiaWctbWVtb3J5IHRlc3RzCitnZW5lcmFsbHkgcnVuIHZlcnksIHZlcnkgbG9uZy4KKworLXUgaXMgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIHNwZWNpYWwgcmVzb3VyY2UgaW50ZW5zaXZlIHRlc3RzIHRvIHJ1biwKK3N1Y2ggYXMgdGhvc2UgcmVxdWlyaW5nIGxhcmdlIGZpbGUgc3VwcG9ydCBvciBuZXR3b3JrIGNvbm5lY3Rpdml0eS4KK1RoZSBhcmd1bWVudCBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHdvcmRzIGluZGljYXRpbmcgdGhlCityZXNvdXJjZXMgdG8gdGVzdC4gIEN1cnJlbnRseSBvbmx5IHRoZSBmb2xsb3dpbmcgYXJlIGRlZmluZWQ6CisKKyAgICBhbGwgLSAgICAgICBFbmFibGUgYWxsIHNwZWNpYWwgcmVzb3VyY2VzLgorCisgICAgYXVkaW8gLSAgICAgVGVzdHMgdGhhdCB1c2UgdGhlIGF1ZGlvIGRldmljZS4gIChUaGVyZSBhcmUga25vd24KKyAgICAgICAgICAgICAgICBjYXNlcyBvZiBicm9rZW4gYXVkaW8gZHJpdmVycyB0aGF0IGNhbiBjcmFzaCBQeXRob24gb3IKKyAgICAgICAgICAgICAgICBldmVuIHRoZSBMaW51eCBrZXJuZWwuKQorCisgICAgY3Vyc2VzIC0gICAgVGVzdHMgdGhhdCB1c2UgY3Vyc2VzIGFuZCB3aWxsIG1vZGlmeSB0aGUgdGVybWluYWwncworICAgICAgICAgICAgICAgIHN0YXRlIGFuZCBvdXRwdXQgbW9kZXMuCisKKyAgICBsYXJnZWZpbGUgLSBJdCBpcyBva2F5IHRvIHJ1biBzb21lIHRlc3QgdGhhdCBtYXkgY3JlYXRlIGh1Z2UKKyAgICAgICAgICAgICAgICBmaWxlcy4gIFRoZXNlIHRlc3RzIGNhbiB0YWtlIGEgbG9uZyB0aW1lIGFuZCBtYXkKKyAgICAgICAgICAgICAgICBjb25zdW1lID4yR0Igb2YgZGlzayBzcGFjZSB0ZW1wb3JhcmlseS4KKworICAgIG5ldHdvcmsgLSAgIEl0IGlzIG9rYXkgdG8gcnVuIHRlc3RzIHRoYXQgdXNlIGV4dGVybmFsIG5ldHdvcmsKKyAgICAgICAgICAgICAgICByZXNvdXJjZSwgZS5nLiB0ZXN0aW5nIFNTTCBzdXBwb3J0IGZvciBzb2NrZXRzLgorCisgICAgYnNkZGIgLSAgICAgSXQgaXMgb2theSB0byBydW4gdGhlIGJzZGRiIHRlc3RzdWl0ZSwgd2hpY2ggdGFrZXMKKyAgICAgICAgICAgICAgICBhIGxvbmcgdGltZSB0byBjb21wbGV0ZS4KKworICAgIGRlY2ltYWwgLSAgIFRlc3QgdGhlIGRlY2ltYWwgbW9kdWxlIGFnYWluc3QgYSBsYXJnZSBzdWl0ZSB0aGF0CisgICAgICAgICAgICAgICAgdmVyaWZpZXMgY29tcGxpYW5jZSB3aXRoIHN0YW5kYXJkcy4KKworICAgIGNwdSAtICAgICAgIFVzZWQgZm9yIGNlcnRhaW4gQ1BVLWhlYXZ5IHRlc3RzLgorCisgICAgc3VicHJvY2VzcyAgUnVuIGFsbCB0ZXN0cyBmb3IgdGhlIHN1YnByb2Nlc3MgbW9kdWxlLgorCisgICAgdXJsZmV0Y2ggLSAgSXQgaXMgb2theSB0byBkb3dubG9hZCBmaWxlcyByZXF1aXJlZCBvbiB0ZXN0aW5nLgorCisgICAgZ3VpIC0gICAgICAgUnVuIHRlc3RzIHRoYXQgcmVxdWlyZSBhIHJ1bm5pbmcgR1VJLgorCisgICAgeHBpY2tsZSAtICAgVGVzdCBwaWNrbGUgYW5kIGNQaWNrbGUgYWdhaW5zdCBQeXRob24gMi40LCAyLjUgYW5kIDIuNiB0bworICAgICAgICAgICAgICAgIHRlc3QgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFRoZXNlIHRlc3RzIHRha2UgYSBsb25nIHRpbWUKKyAgICAgICAgICAgICAgICB0byBydW4uCisKK1RvIGVuYWJsZSBhbGwgcmVzb3VyY2VzIGV4Y2VwdCBvbmUsIHVzZSAnLXVhbGwsLTxyZXNvdXJjZT4nLiAgRm9yCitleGFtcGxlLCB0byBydW4gYWxsIHRoZSB0ZXN0cyBleGNlcHQgZm9yIHRoZSBic2RkYiB0ZXN0cywgZ2l2ZSB0aGUKK29wdGlvbiAnLXVhbGwsLWJzZGRiJy4KKyIiIgorCitpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBnZXRvcHQKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCByYW5kb20KK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBpbXAKK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IHN5c2NvbmZpZworCisKKyMgU29tZSB0aW1lcyBfX3BhdGhfXyBhbmQgX19maWxlX18gYXJlIG5vdCBhYnNvbHV0ZSAoZS5nLiB3aGlsZSBydW5uaW5nIGZyb20KKyMgTGliLykgYW5kLCBpZiB3ZSBjaGFuZ2UgdGhlIENXRCB0byBydW4gdGhlIHRlc3RzIGluIGEgdGVtcG9yYXJ5IGRpciwgc29tZQorIyBpbXBvcnRzIG1pZ2h0IGZhaWwuICBUaGlzIGFmZmVjdHMgb25seSB0aGUgbW9kdWxlcyBpbXBvcnRlZCBiZWZvcmUgb3MuY2hkaXIoKS4KKyMgVGhlc2UgbW9kdWxlcyBhcmUgc2VhcmNoZWQgZmlyc3QgaW4gc3lzLnBhdGhbMF0gKHNvICcnIC0tIHRoZSBDV0QpIGFuZCBpZgorIyB0aGV5IGFyZSBmb3VuZCBpbiB0aGUgQ1dEIHRoZWlyIF9fZmlsZV9fIGFuZCBfX3BhdGhfXyB3aWxsIGJlIHJlbGF0aXZlICh0aGlzCisjIGhhcHBlbnMgYmVmb3JlIHRoZSBjaGRpcikuICBBbGwgdGhlIG1vZHVsZXMgaW1wb3J0ZWQgYWZ0ZXIgdGhlIGNoZGlyLCBhcmUKKyMgbm90IGZvdW5kIGluIHRoZSBDV0QsIGFuZCBzaW5jZSB0aGUgb3RoZXIgcGF0aHMgaW4gc3lzLnBhdGhbMTpdIGFyZSBhYnNvbHV0ZQorIyAoc2l0ZS5weSBhYnNvbHV0aXplIHRoZW0pLCB0aGUgX19maWxlX18gYW5kIF9fcGF0aF9fIHdpbGwgYmUgYWJzb2x1dGUgdG9vLgorIyBUaGVyZWZvcmUgaXQgaXMgbmVjZXNzYXJ5IHRvIGFic29sdXRpemUgbWFudWFsbHkgdGhlIF9fZmlsZV9fIGFuZCBfX3BhdGhfXyBvZgorIyB0aGUgcGFja2FnZXMgdG8gcHJldmVudCBsYXRlciBpbXBvcnRzIHRvIGZhaWwgd2hlbiB0aGUgQ1dEIGlzIGRpZmZlcmVudC4KK2ZvciBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuaXRlcnZhbHVlcygpOgorICAgIGlmIGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKKyAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gW29zLnBhdGguYWJzcGF0aChwYXRoKSBmb3IgcGF0aCBpbiBtb2R1bGUuX19wYXRoX19dCisgICAgaWYgaGFzYXR0cihtb2R1bGUsICdfX2ZpbGVfXycpOgorICAgICAgICBtb2R1bGUuX19maWxlX18gPSBvcy5wYXRoLmFic3BhdGgobW9kdWxlLl9fZmlsZV9fKQorCisKKyMgTWFjT1NYIChhLmsuYS4gRGFyd2luKSBoYXMgYSBkZWZhdWx0IHN0YWNrIHNpemUgdGhhdCBpcyB0b28gc21hbGwKKyMgZm9yIGRlZXBseSByZWN1cnNpdmUgcmVndWxhciBleHByZXNzaW9ucy4gIFdlIHNlZSB0aGlzIGFzIGNyYXNoZXMgaW4KKyMgdGhlIFB5dGhvbiB0ZXN0IHN1aXRlIHdoZW4gcnVubmluZyB0ZXN0X3JlLnB5IGFuZCB0ZXN0X3NyZS5weS4gIFRoZQorIyBmaXggaXMgdG8gc2V0IHRoZSBzdGFjayBsaW1pdCB0byAyMDQ4LgorIyBUaGlzIGFwcHJvYWNoIG1heSBhbHNvIGJlIHVzZWZ1bCBmb3Igb3RoZXIgVW5peHkgcGxhdGZvcm1zIHRoYXQKKyMgc3VmZmVyIGZyb20gc21hbGwgZGVmYXVsdCBzdGFjayBsaW1pdHMuCitpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgcmVzb3VyY2UKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBzb2Z0LCBoYXJkID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9TVEFDSykKKyAgICAgICAgbmV3c29mdCA9IG1pbihoYXJkLCBtYXgoc29mdCwgMTAyNCoyMDQ4KSkKKyAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9TVEFDSywgKG5ld3NvZnQsIGhhcmQpKQorCisjIFRlc3QgcmVzdWx0IGNvbnN0YW50cy4KK1BBU1NFRCA9IDEKK0ZBSUxFRCA9IDAKK0VOVl9DSEFOR0VEID0gLTEKK1NLSVBQRUQgPSAtMgorUkVTT1VSQ0VfREVOSUVEID0gLTMKK0lOVEVSUlVQVEVEID0gLTQKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworUkVTT1VSQ0VfTkFNRVMgPSAoJ2F1ZGlvJywgJ2N1cnNlcycsICdsYXJnZWZpbGUnLCAnbmV0d29yaycsICdic2RkYicsCisgICAgICAgICAgICAgICAgICAnZGVjaW1hbCcsICdjcHUnLCAnc3VicHJvY2VzcycsICd1cmxmZXRjaCcsICdndWknLAorICAgICAgICAgICAgICAgICAgJ3hwaWNrbGUnKQorCitURU1QRElSID0gb3MucGF0aC5hYnNwYXRoKHRlbXBmaWxlLmdldHRlbXBkaXIoKSkKKworCitkZWYgdXNhZ2UoY29kZSwgbXNnPScnKToKKyAgICBwcmludCBfX2RvY19fCisgICAgaWYgbXNnOiBwcmludCBtc2cKKyAgICBzeXMuZXhpdChjb2RlKQorCisKK2RlZiBtYWluKHRlc3RzPU5vbmUsIHRlc3RkaXI9Tm9uZSwgdmVyYm9zZT0wLCBxdWlldD1GYWxzZSwKKyAgICAgICAgIGV4Y2x1ZGU9RmFsc2UsIHNpbmdsZT1GYWxzZSwgcmFuZG9taXplPUZhbHNlLCBmcm9tZmlsZT1Ob25lLAorICAgICAgICAgZmluZGxlYWtzPUZhbHNlLCB1c2VfcmVzb3VyY2VzPU5vbmUsIHRyYWNlPUZhbHNlLCBjb3ZlcmRpcj0nY292ZXJhZ2UnLAorICAgICAgICAgcnVubGVha3M9RmFsc2UsIGh1bnRybGVha3M9RmFsc2UsIHZlcmJvc2UyPUZhbHNlLCBwcmludF9zbG93PUZhbHNlLAorICAgICAgICAgcmFuZG9tX3NlZWQ9Tm9uZSwgdXNlX21wPU5vbmUsIHZlcmJvc2UzPUZhbHNlLCBmb3JldmVyPUZhbHNlLAorICAgICAgICAgaGVhZGVyPUZhbHNlKToKKyAgICAiIiJFeGVjdXRlIGEgdGVzdCBzdWl0ZS4KKworICAgIFRoaXMgYWxzbyBwYXJzZXMgY29tbWFuZC1saW5lIG9wdGlvbnMgYW5kIG1vZGlmaWVzIGl0cyBiZWhhdmlvcgorICAgIGFjY29yZGluZ2x5LgorCisgICAgdGVzdHMgLS0gYSBsaXN0IG9mIHN0cmluZ3MgY29udGFpbmluZyB0ZXN0IG5hbWVzIChvcHRpb25hbCkKKyAgICB0ZXN0ZGlyIC0tIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gbG9vayBmb3IgdGVzdHMgKG9wdGlvbmFsKQorCisgICAgVXNlcnMgb3RoZXIgdGhhbiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGUgd2lsbCBjZXJ0YWlubHkgd2FudCB0bworICAgIHNwZWNpZnkgdGVzdGRpcjsgaWYgaXQncyBvbWl0dGVkLCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlCisgICAgUHl0aG9uIHRlc3Qgc3VpdGUgaXMgc2VhcmNoZWQgZm9yLgorCisgICAgSWYgdGhlIHRlc3RzIGFyZ3VtZW50IGlzIG9taXR0ZWQsIHRoZSB0ZXN0cyBsaXN0ZWQgb24gdGhlCisgICAgY29tbWFuZC1saW5lIHdpbGwgYmUgdXNlZC4gIElmIHRoYXQncyBlbXB0eSwgdG9vLCB0aGVuIGFsbCAqLnB5CisgICAgZmlsZXMgYmVnaW5uaW5nIHdpdGggdGVzdF8gd2lsbCBiZSB1c2VkLgorCisgICAgVGhlIG90aGVyIGRlZmF1bHQgYXJndW1lbnRzICh2ZXJib3NlLCBxdWlldCwgZXhjbHVkZSwKKyAgICBzaW5nbGUsIHJhbmRvbWl6ZSwgZmluZGxlYWtzLCB1c2VfcmVzb3VyY2VzLCB0cmFjZSwgY292ZXJkaXIsCisgICAgcHJpbnRfc2xvdywgYW5kIHJhbmRvbV9zZWVkKSBhbGxvdyBwcm9ncmFtbWVycyBjYWxsaW5nIG1haW4oKQorICAgIGRpcmVjdGx5IHRvIHNldCB0aGUgdmFsdWVzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgc2V0IGJ5IGZsYWdzCisgICAgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAiIiIKKworICAgIHRlc3Rfc3VwcG9ydC5yZWNvcmRfb3JpZ2luYWxfc3Rkb3V0KHN5cy5zdGRvdXQpCisgICAgdHJ5OgorICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdodnF4c1NyZjpsdTp0OlREOk5MUjpGd1dNOmo6JywKKyAgICAgICAgICAgIFsnaGVscCcsICd2ZXJib3NlJywgJ3ZlcmJvc2UyJywgJ3ZlcmJvc2UzJywgJ3F1aWV0JywKKyAgICAgICAgICAgICAnZXhjbHVkZScsICdzaW5nbGUnLCAnc2xvdycsICdyYW5kb21pemUnLCAnZnJvbWZpbGU9JywgJ2ZpbmRsZWFrcycsCisgICAgICAgICAgICAgJ3VzZT0nLCAndGhyZXNob2xkPScsICd0cmFjZScsICdjb3ZlcmRpcj0nLCAnbm9jb3ZlcmRpcicsCisgICAgICAgICAgICAgJ3J1bmxlYWtzJywgJ2h1bnRybGVha3M9JywgJ21lbWxpbWl0PScsICdyYW5kc2VlZD0nLAorICAgICAgICAgICAgICdtdWx0aXByb2Nlc3M9JywgJ3NsYXZlYXJncz0nLCAnZm9yZXZlcicsICdoZWFkZXInXSkKKyAgICBleGNlcHQgZ2V0b3B0LmVycm9yLCBtc2c6CisgICAgICAgIHVzYWdlKDIsIG1zZykKKworICAgICMgRGVmYXVsdHMKKyAgICBpZiByYW5kb21fc2VlZCBpcyBOb25lOgorICAgICAgICByYW5kb21fc2VlZCA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMDAwMDApCisgICAgaWYgdXNlX3Jlc291cmNlcyBpcyBOb25lOgorICAgICAgICB1c2VfcmVzb3VyY2VzID0gW10KKyAgICBmb3IgbywgYSBpbiBvcHRzOgorICAgICAgICBpZiBvIGluICgnLWgnLCAnLS1oZWxwJyk6CisgICAgICAgICAgICB1c2FnZSgwKQorICAgICAgICBlbGlmIG8gaW4gKCctdicsICctLXZlcmJvc2UnKToKKyAgICAgICAgICAgIHZlcmJvc2UgKz0gMQorICAgICAgICBlbGlmIG8gaW4gKCctdycsICctLXZlcmJvc2UyJyk6CisgICAgICAgICAgICB2ZXJib3NlMiA9IFRydWUKKyAgICAgICAgZWxpZiBvIGluICgnLVcnLCAnLS12ZXJib3NlMycpOgorICAgICAgICAgICAgdmVyYm9zZTMgPSBUcnVlCisgICAgICAgIGVsaWYgbyBpbiAoJy1xJywgJy0tcXVpZXQnKToKKyAgICAgICAgICAgIHF1aWV0ID0gVHJ1ZTsKKyAgICAgICAgICAgIHZlcmJvc2UgPSAwCisgICAgICAgIGVsaWYgbyBpbiAoJy14JywgJy0tZXhjbHVkZScpOgorICAgICAgICAgICAgZXhjbHVkZSA9IFRydWUKKyAgICAgICAgZWxpZiBvIGluICgnLXMnLCAnLS1zaW5nbGUnKToKKyAgICAgICAgICAgIHNpbmdsZSA9IFRydWUKKyAgICAgICAgZWxpZiBvIGluICgnLVMnLCAnLS1zbG93Jyk6CisgICAgICAgICAgICBwcmludF9zbG93ID0gVHJ1ZQorICAgICAgICBlbGlmIG8gaW4gKCctcicsICctLXJhbmRvbWl6ZScpOgorICAgICAgICAgICAgcmFuZG9taXplID0gVHJ1ZQorICAgICAgICBlbGlmIG8gPT0gJy0tcmFuZHNlZWQnOgorICAgICAgICAgICAgcmFuZG9tX3NlZWQgPSBpbnQoYSkKKyAgICAgICAgZWxpZiBvIGluICgnLWYnLCAnLS1mcm9tZmlsZScpOgorICAgICAgICAgICAgZnJvbWZpbGUgPSBhCisgICAgICAgIGVsaWYgbyBpbiAoJy1sJywgJy0tZmluZGxlYWtzJyk6CisgICAgICAgICAgICBmaW5kbGVha3MgPSBUcnVlCisgICAgICAgIGVsaWYgbyBpbiAoJy1MJywgJy0tcnVubGVha3MnKToKKyAgICAgICAgICAgIHJ1bmxlYWtzID0gVHJ1ZQorICAgICAgICBlbGlmIG8gaW4gKCctdCcsICctLXRocmVzaG9sZCcpOgorICAgICAgICAgICAgaW1wb3J0IGdjCisgICAgICAgICAgICBnYy5zZXRfdGhyZXNob2xkKGludChhKSkKKyAgICAgICAgZWxpZiBvIGluICgnLVQnLCAnLS1jb3ZlcmFnZScpOgorICAgICAgICAgICAgdHJhY2UgPSBUcnVlCisgICAgICAgIGVsaWYgbyBpbiAoJy1EJywgJy0tY292ZXJkaXInKToKKyAgICAgICAgICAgIGNvdmVyZGlyID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBhKQorICAgICAgICBlbGlmIG8gaW4gKCctTicsICctLW5vY292ZXJkaXInKToKKyAgICAgICAgICAgIGNvdmVyZGlyID0gTm9uZQorICAgICAgICBlbGlmIG8gaW4gKCctUicsICctLWh1bnRybGVha3MnKToKKyAgICAgICAgICAgIGh1bnRybGVha3MgPSBhLnNwbGl0KCc6JykKKyAgICAgICAgICAgIGlmIGxlbihodW50cmxlYWtzKSBub3QgaW4gKDIsIDMpOgorICAgICAgICAgICAgICAgIHByaW50IGEsIGh1bnRybGVha3MKKyAgICAgICAgICAgICAgICB1c2FnZSgyLCAnLVIgdGFrZXMgMiBvciAzIGNvbG9uLXNlcGFyYXRlZCBhcmd1bWVudHMnKQorICAgICAgICAgICAgaWYgbm90IGh1bnRybGVha3NbMF06CisgICAgICAgICAgICAgICAgaHVudHJsZWFrc1swXSA9IDUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaHVudHJsZWFrc1swXSA9IGludChodW50cmxlYWtzWzBdKQorICAgICAgICAgICAgaWYgbm90IGh1bnRybGVha3NbMV06CisgICAgICAgICAgICAgICAgaHVudHJsZWFrc1sxXSA9IDQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaHVudHJsZWFrc1sxXSA9IGludChodW50cmxlYWtzWzFdKQorICAgICAgICAgICAgaWYgbGVuKGh1bnRybGVha3MpID09IDIgb3Igbm90IGh1bnRybGVha3NbMl06CisgICAgICAgICAgICAgICAgaHVudHJsZWFrc1syOl0gPSBbInJlZmxvZy50eHQiXQorICAgICAgICBlbGlmIG8gaW4gKCctTScsICctLW1lbWxpbWl0Jyk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuc2V0X21lbWxpbWl0KGEpCisgICAgICAgIGVsaWYgbyBpbiAoJy11JywgJy0tdXNlJyk6CisgICAgICAgICAgICB1ID0gW3gubG93ZXIoKSBmb3IgeCBpbiBhLnNwbGl0KCcsJyldCisgICAgICAgICAgICBmb3IgciBpbiB1OgorICAgICAgICAgICAgICAgIGlmIHIgPT0gJ2FsbCc6CisgICAgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXNbOl0gPSBSRVNPVVJDRV9OQU1FUworICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHJlbW92ZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgclswXSA9PSAnLSc6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgciA9IHJbMTpdCisgICAgICAgICAgICAgICAgaWYgciBub3QgaW4gUkVTT1VSQ0VfTkFNRVM6CisgICAgICAgICAgICAgICAgICAgIHVzYWdlKDEsICdJbnZhbGlkIC11Ly0tdXNlIG9wdGlvbjogJyArIGEpCisgICAgICAgICAgICAgICAgaWYgcmVtb3ZlOgorICAgICAgICAgICAgICAgICAgICBpZiByIGluIHVzZV9yZXNvdXJjZXM6CisgICAgICAgICAgICAgICAgICAgICAgICB1c2VfcmVzb3VyY2VzLnJlbW92ZShyKQorICAgICAgICAgICAgICAgIGVsaWYgciBub3QgaW4gdXNlX3Jlc291cmNlczoKKyAgICAgICAgICAgICAgICAgICAgdXNlX3Jlc291cmNlcy5hcHBlbmQocikKKyAgICAgICAgZWxpZiBvIGluICgnLUYnLCAnLS1mb3JldmVyJyk6CisgICAgICAgICAgICBmb3JldmVyID0gVHJ1ZQorICAgICAgICBlbGlmIG8gaW4gKCctaicsICctLW11bHRpcHJvY2VzcycpOgorICAgICAgICAgICAgdXNlX21wID0gaW50KGEpCisgICAgICAgIGVsaWYgbyA9PSAnLS1oZWFkZXInOgorICAgICAgICAgICAgaGVhZGVyID0gVHJ1ZQorICAgICAgICBlbGlmIG8gPT0gJy0tc2xhdmVhcmdzJzoKKyAgICAgICAgICAgIGFyZ3MsIGt3YXJncyA9IGpzb24ubG9hZHMoYSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0KCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IElOVEVSUlVQVEVELCBlLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICAgICAgcHJpbnQgICAjIEZvcmNlIGEgbmV3bGluZSAoanVzdCBpbiBjYXNlKQorICAgICAgICAgICAgcHJpbnQganNvbi5kdW1wcyhyZXN1bHQpCisgICAgICAgICAgICBzeXMuZXhpdCgwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAoIk5vIGhhbmRsZXIgZm9yIG9wdGlvbiB7fS4gIFBsZWFzZSAiCisgICAgICAgICAgICAgICAgInJlcG9ydCB0aGlzIGFzIGEgYnVnIGF0IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcuIikuZm9ybWF0KG8pCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgIGlmIHNpbmdsZSBhbmQgZnJvbWZpbGU6CisgICAgICAgIHVzYWdlKDIsICItcyBhbmQgLWYgZG9uJ3QgZ28gdG9nZXRoZXIhIikKKyAgICBpZiB1c2VfbXAgYW5kIHRyYWNlOgorICAgICAgICB1c2FnZSgyLCAiLVQgYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCisgICAgaWYgdXNlX21wIGFuZCBmaW5kbGVha3M6CisgICAgICAgIHVzYWdlKDIsICItbCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKKworICAgIGdvb2QgPSBbXQorICAgIGJhZCA9IFtdCisgICAgc2tpcHBlZCA9IFtdCisgICAgcmVzb3VyY2VfZGVuaWVkcyA9IFtdCisgICAgZW52aXJvbm1lbnRfY2hhbmdlZCA9IFtdCisgICAgaW50ZXJydXB0ZWQgPSBGYWxzZQorCisgICAgaWYgZmluZGxlYWtzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcHJpbnQgJ05vIEdDIGF2YWlsYWJsZSwgZGlzYWJsaW5nIGZpbmRsZWFrcy4nCisgICAgICAgICAgICBmaW5kbGVha3MgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBVbmNvbW1lbnQgdGhlIGxpbmUgYmVsb3cgdG8gcmVwb3J0IGdhcmJhZ2UgdGhhdCBpcyBub3QKKyAgICAgICAgICAgICMgZnJlZWFibGUgYnkgcmVmZXJlbmNlIGNvdW50aW5nIGFsb25lLiAgQnkgZGVmYXVsdCBvbmx5CisgICAgICAgICAgICAjIGdhcmJhZ2UgdGhhdCBpcyBub3QgY29sbGVjdGFibGUgYnkgdGhlIEdDIGlzIHJlcG9ydGVkLgorICAgICAgICAgICAgI2djLnNldF9kZWJ1ZyhnYy5ERUJVR19TQVZFQUxMKQorICAgICAgICAgICAgZm91bmRfZ2FyYmFnZSA9IFtdCisKKyAgICBpZiBzaW5nbGU6CisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgJ3B5bmV4dHRlc3QnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICdyJykKKyAgICAgICAgICAgIG5leHRfdGVzdCA9IGZwLnJlYWQoKS5zdHJpcCgpCisgICAgICAgICAgICB0ZXN0cyA9IFtuZXh0X3Rlc3RdCisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgaWYgZnJvbWZpbGU6CisgICAgICAgIHRlc3RzID0gW10KKyAgICAgICAgZnAgPSBvcGVuKG9zLnBhdGguam9pbih0ZXN0X3N1cHBvcnQuU0FWRURDV0QsIGZyb21maWxlKSkKKyAgICAgICAgZm9yIGxpbmUgaW4gZnA6CisgICAgICAgICAgICBndXRzID0gbGluZS5zcGxpdCgpICMgYXNzdW1pbmcgbm8gdGVzdCBoYXMgd2hpdGVzcGFjZSBpbiBpdHMgbmFtZQorICAgICAgICAgICAgaWYgZ3V0cyBhbmQgbm90IGd1dHNbMF0uc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgIHRlc3RzLmV4dGVuZChndXRzKQorICAgICAgICBmcC5jbG9zZSgpCisKKyAgICAjIFN0cmlwIC5weSBleHRlbnNpb25zLgorICAgIHJlbW92ZXB5KGFyZ3MpCisgICAgcmVtb3ZlcHkodGVzdHMpCisKKyAgICBzdGR0ZXN0cyA9IFNURFRFU1RTWzpdCisgICAgbm90dGVzdHMgPSBOT1RURVNUUy5jb3B5KCkKKyAgICBpZiBleGNsdWRlOgorICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgICAgICBpZiBhcmcgaW4gc3RkdGVzdHM6CisgICAgICAgICAgICAgICAgc3RkdGVzdHMucmVtb3ZlKGFyZykKKyAgICAgICAgICAgIG5vdHRlc3RzLmFkZChhcmcpCisgICAgICAgIGFyZ3MgPSBbXQorCisgICAgIyBGb3IgYSBwYXJ0aWFsIHJ1biwgd2UgZG8gbm90IG5lZWQgdG8gY2x1dHRlciB0aGUgb3V0cHV0LgorICAgIGlmIHZlcmJvc2Ugb3IgaGVhZGVyIG9yIG5vdCAocXVpZXQgb3Igc2luZ2xlIG9yIHRlc3RzIG9yIGFyZ3MpOgorICAgICAgICAjIFByaW50IGJhc2ljIHBsYXRmb3JtIGluZm9ybWF0aW9uCisgICAgICAgIHByaW50ICI9PSIsIHBsYXRmb3JtLnB5dGhvbl9pbXBsZW1lbnRhdGlvbigpLCBcCisgICAgICAgICAgICAgICAgICAgICIgIi5qb2luKHN5cy52ZXJzaW9uLnNwbGl0KCkpCisgICAgICAgIHByaW50ICI9PSAgIiwgcGxhdGZvcm0ucGxhdGZvcm0oYWxpYXNlZD1UcnVlKSwgXAorICAgICAgICAgICAgICAgICAgICAgICIlcy1lbmRpYW4iICUgc3lzLmJ5dGVvcmRlcgorICAgICAgICBwcmludCAiPT0gICIsIG9zLmdldGN3ZCgpCisgICAgICAgIHByaW50ICJUZXN0aW5nIHdpdGggZmxhZ3M6Iiwgc3lzLmZsYWdzCisKKyAgICBhbGx0ZXN0cyA9IGZpbmR0ZXN0cyh0ZXN0ZGlyLCBzdGR0ZXN0cywgbm90dGVzdHMpCisgICAgc2VsZWN0ZWQgPSB0ZXN0cyBvciBhcmdzIG9yIGFsbHRlc3RzCisgICAgaWYgc2luZ2xlOgorICAgICAgICBzZWxlY3RlZCA9IHNlbGVjdGVkWzoxXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXh0X3NpbmdsZV90ZXN0ID0gYWxsdGVzdHNbYWxsdGVzdHMuaW5kZXgoc2VsZWN0ZWRbMF0pKzFdCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgbmV4dF9zaW5nbGVfdGVzdCA9IE5vbmUKKyAgICBpZiByYW5kb21pemU6CisgICAgICAgIHJhbmRvbS5zZWVkKHJhbmRvbV9zZWVkKQorICAgICAgICBwcmludCAiVXNpbmcgcmFuZG9tIHNlZWQiLCByYW5kb21fc2VlZAorICAgICAgICByYW5kb20uc2h1ZmZsZShzZWxlY3RlZCkKKyAgICBpZiB0cmFjZToKKyAgICAgICAgaW1wb3J0IHRyYWNlCisgICAgICAgIHRyYWNlciA9IHRyYWNlLlRyYWNlKGlnbm9yZWRpcnM9W3N5cy5wcmVmaXgsIHN5cy5leGVjX3ByZWZpeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlPUZhbHNlLCBjb3VudD1UcnVlKQorCisgICAgdGVzdF90aW1lcyA9IFtdCisgICAgdGVzdF9zdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSB1c2VfcmVzb3VyY2VzCisgICAgc2F2ZV9tb2R1bGVzID0gc3lzLm1vZHVsZXMua2V5cygpCisKKyAgICBkZWYgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KToKKyAgICAgICAgb2ssIHRlc3RfdGltZSA9IHJlc3VsdAorICAgICAgICB0ZXN0X3RpbWVzLmFwcGVuZCgodGVzdF90aW1lLCB0ZXN0KSkKKyAgICAgICAgaWYgb2sgPT0gUEFTU0VEOgorICAgICAgICAgICAgZ29vZC5hcHBlbmQodGVzdCkKKyAgICAgICAgZWxpZiBvayA9PSBGQUlMRUQ6CisgICAgICAgICAgICBiYWQuYXBwZW5kKHRlc3QpCisgICAgICAgIGVsaWYgb2sgPT0gRU5WX0NIQU5HRUQ6CisgICAgICAgICAgICBiYWQuYXBwZW5kKHRlc3QpCisgICAgICAgICAgICBlbnZpcm9ubWVudF9jaGFuZ2VkLmFwcGVuZCh0ZXN0KQorICAgICAgICBlbGlmIG9rID09IFNLSVBQRUQ6CisgICAgICAgICAgICBza2lwcGVkLmFwcGVuZCh0ZXN0KQorICAgICAgICBlbGlmIG9rID09IFJFU09VUkNFX0RFTklFRDoKKyAgICAgICAgICAgIHNraXBwZWQuYXBwZW5kKHRlc3QpCisgICAgICAgICAgICByZXNvdXJjZV9kZW5pZWRzLmFwcGVuZCh0ZXN0KQorCisgICAgaWYgZm9yZXZlcjoKKyAgICAgICAgZGVmIHRlc3RfZm9yZXZlcih0ZXN0cz1saXN0KHNlbGVjdGVkKSk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB0ZXN0CisgICAgICAgICAgICAgICAgICAgIGlmIGJhZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICB0ZXN0cyA9IHRlc3RfZm9yZXZlcigpCisgICAgZWxzZToKKyAgICAgICAgdGVzdHMgPSBpdGVyKHNlbGVjdGVkKQorCisgICAgaWYgdXNlX21wOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIHRocmVhZGluZyBpbXBvcnQgVGhyZWFkCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJNdWx0aXByb2Nlc3Mgb3B0aW9uIHJlcXVpcmVzIHRocmVhZCBzdXBwb3J0IgorICAgICAgICAgICAgc3lzLmV4aXQoMikKKyAgICAgICAgZnJvbSBRdWV1ZSBpbXBvcnQgUXVldWUKKyAgICAgICAgZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRQorICAgICAgICBkZWJ1Z19vdXRwdXRfcGF0ID0gcmUuY29tcGlsZShyIlxbXGQrIHJlZnNcXSQiKQorICAgICAgICBvdXRwdXQgPSBRdWV1ZSgpCisgICAgICAgIGRlZiB0ZXN0c19hbmRfYXJncygpOgorICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgYXJnc190dXBsZSA9ICgKKyAgICAgICAgICAgICAgICAgICAgKHRlc3QsIHZlcmJvc2UsIHF1aWV0KSwKKyAgICAgICAgICAgICAgICAgICAgZGljdChodW50cmxlYWtzPWh1bnRybGVha3MsIHVzZV9yZXNvdXJjZXM9dXNlX3Jlc291cmNlcykKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgeWllbGQgKHRlc3QsIGFyZ3NfdHVwbGUpCisgICAgICAgIHBlbmRpbmcgPSB0ZXN0c19hbmRfYXJncygpCisgICAgICAgIG9wdF9hcmdzID0gdGVzdF9zdXBwb3J0LmFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCisgICAgICAgIGJhc2VfY21kID0gW3N5cy5leGVjdXRhYmxlXSArIG9wdF9hcmdzICsgWyctbScsICd0ZXN0LnJlZ3J0ZXN0J10KKyAgICAgICAgZGVmIHdvcmsoKToKKyAgICAgICAgICAgICMgQSB3b3JrZXIgdGhyZWFkLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QsIGFyZ3NfdHVwbGUgPSBuZXh0KHBlbmRpbmcpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1dCgoTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgIyAtRSBpcyBuZWVkZWQgYnkgc29tZSB0ZXN0cywgZS5nLiB0ZXN0X2ltcG9ydAorICAgICAgICAgICAgICAgICAgICBwb3BlbiA9IFBvcGVuKGJhc2VfY21kICsgWyctLXNsYXZlYXJncycsIGpzb24uZHVtcHMoYXJnc190dXBsZSldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9KG9zLm5hbWUgIT0gJ250JykpCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcG9wZW4uY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgICAgICAgICAjIFN0cmlwIGxhc3QgcmVmY291bnQgb3V0cHV0IGxpbmUgaWYgaXQgZXhpc3RzLCBzaW5jZSBpdAorICAgICAgICAgICAgICAgICAgICAjIGNvbWVzIGZyb20gdGhlIHNodXRkb3duIG9mIHRoZSBpbnRlcnByZXRlciBpbiB0aGUgc3ViY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyID0gZGVidWdfb3V0cHV0X3BhdC5zdWIoIiIsIHN0ZGVycikKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LCBfLCByZXN1bHQgPSBzdGRvdXQuc3RyaXAoKS5ycGFydGl0aW9uKCJcbiIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHV0KChOb25lLCBOb25lLCBOb25lLCBOb25lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqc29uLmxvYWRzKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0ID0gdGVzdCsnXG4nK3N0ZG91dAorICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHV0KCh0ZXN0LCBzdGRvdXQucnN0cmlwKCksIHN0ZGVyci5yc3RyaXAoKSwgcmVzdWx0KSkKKyAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIG91dHB1dC5wdXQoKE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHdvcmtlcnMgPSBbVGhyZWFkKHRhcmdldD13b3JrKSBmb3IgaSBpbiByYW5nZSh1c2VfbXApXQorICAgICAgICBmb3Igd29ya2VyIGluIHdvcmtlcnM6CisgICAgICAgICAgICB3b3JrZXIuc3RhcnQoKQorICAgICAgICBmaW5pc2hlZCA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgZmluaXNoZWQgPCB1c2VfbXA6CisgICAgICAgICAgICAgICAgdGVzdCwgc3Rkb3V0LCBzdGRlcnIsIHJlc3VsdCA9IG91dHB1dC5nZXQoKQorICAgICAgICAgICAgICAgIGlmIHRlc3QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZmluaXNoZWQgKz0gMQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHN0ZG91dDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgc3Rkb3V0CisgICAgICAgICAgICAgICAgaWYgc3RkZXJyOgorICAgICAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsIHN0ZGVycgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICAgICAgICAgIGlmIHJlc3VsdFswXSA9PSBJTlRFUlJVUFRFRDoKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHJlc3VsdFsxXSA9PSAnS2V5Ym9hcmRJbnRlcnJ1cHQnCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0ICAgIyBXaGF0IGVsc2U/CisgICAgICAgICAgICAgICAgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IFRydWUKKyAgICAgICAgICAgIHBlbmRpbmcuY2xvc2UoKQorICAgICAgICBmb3Igd29ya2VyIGluIHdvcmtlcnM6CisgICAgICAgICAgICB3b3JrZXIuam9pbigpCisgICAgZWxzZToKKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICAgICAgcHJpbnQgdGVzdAorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgaWYgdHJhY2U6CisgICAgICAgICAgICAgICAgIyBJZiB3ZSdyZSB0cmFjaW5nIGNvZGUgY292ZXJhZ2UsIHRoZW4gd2UgZG9uJ3QgZXhpdCB3aXRoIHN0YXR1cworICAgICAgICAgICAgICAgICMgaWYgb24gYSBmYWxzZSByZXR1cm4gdmFsdWUgZnJvbSBtYWluLgorICAgICAgICAgICAgICAgIHRyYWNlci5ydW5jdHgoJ3J1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbHM9Z2xvYmFscygpLCBsb2NhbHM9dmFycygpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MpCisgICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVfcmVzdWx0KHRlc3QsIHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZTMgYW5kIHJlc3VsdFswXSA9PSBGQUlMRUQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiUmUtcnVubmluZyB0ZXN0ICVyIGluIHZlcmJvc2UgbW9kZSIgJSB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICBydW50ZXN0KHRlc3QsIFRydWUsIHF1aWV0LCBodW50cmxlYWtzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgaWYgZmluZGxlYWtzOgorICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgICAgIGlmIGdjLmdhcmJhZ2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJXYXJuaW5nOiB0ZXN0IGNyZWF0ZWQiLCBsZW4oZ2MuZ2FyYmFnZSksCisgICAgICAgICAgICAgICAgICAgIHByaW50ICJ1bmNvbGxlY3RhYmxlIG9iamVjdChzKS4iCisgICAgICAgICAgICAgICAgICAgICMgbW92ZSB0aGUgdW5jb2xsZWN0YWJsZSBvYmplY3RzIHNvbWV3aGVyZSBzbyB3ZSBkb24ndCBzZWUKKyAgICAgICAgICAgICAgICAgICAgIyB0aGVtIGFnYWluCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2dhcmJhZ2UuZXh0ZW5kKGdjLmdhcmJhZ2UpCisgICAgICAgICAgICAgICAgICAgIGRlbCBnYy5nYXJiYWdlWzpdCisgICAgICAgICAgICAjIFVubG9hZCB0aGUgbmV3bHkgaW1wb3J0ZWQgbW9kdWxlcyAoYmVzdCBlZmZvcnQgZmluYWxpemF0aW9uKQorICAgICAgICAgICAgZm9yIG1vZHVsZSBpbiBzeXMubW9kdWxlcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYgbW9kdWxlIG5vdCBpbiBzYXZlX21vZHVsZXMgYW5kIG1vZHVsZS5zdGFydHN3aXRoKCJ0ZXN0LiIpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5sb2FkKG1vZHVsZSkKKworICAgIGlmIGludGVycnVwdGVkOgorICAgICAgICAjIHByaW50IGEgbmV3bGluZSBhZnRlciBeQworICAgICAgICBwcmludAorICAgICAgICBwcmludCAiVGVzdCBzdWl0ZSBpbnRlcnJ1cHRlZCBieSBzaWduYWwgU0lHSU5ULiIKKyAgICAgICAgb21pdHRlZCA9IHNldChzZWxlY3RlZCkgLSBzZXQoZ29vZCkgLSBzZXQoYmFkKSAtIHNldChza2lwcGVkKQorICAgICAgICBwcmludCBjb3VudChsZW4ob21pdHRlZCksICJ0ZXN0IiksICJvbWl0dGVkOiIKKyAgICAgICAgcHJpbnRsaXN0KG9taXR0ZWQpCisgICAgaWYgZ29vZCBhbmQgbm90IHF1aWV0OgorICAgICAgICBpZiBub3QgYmFkIGFuZCBub3Qgc2tpcHBlZCBhbmQgbm90IGludGVycnVwdGVkIGFuZCBsZW4oZ29vZCkgPiAxOgorICAgICAgICAgICAgcHJpbnQgIkFsbCIsCisgICAgICAgIHByaW50IGNvdW50KGxlbihnb29kKSwgInRlc3QiKSwgIk9LLiIKKyAgICBpZiBwcmludF9zbG93OgorICAgICAgICB0ZXN0X3RpbWVzLnNvcnQocmV2ZXJzZT1UcnVlKQorICAgICAgICBwcmludCAiMTAgc2xvd2VzdCB0ZXN0czoiCisgICAgICAgIGZvciB0aW1lLCB0ZXN0IGluIHRlc3RfdGltZXNbOjEwXToKKyAgICAgICAgICAgIHByaW50ICIlczogJS4xZnMiICUgKHRlc3QsIHRpbWUpCisgICAgaWYgYmFkOgorICAgICAgICBiYWQgPSBzZXQoYmFkKSAtIHNldChlbnZpcm9ubWVudF9jaGFuZ2VkKQorICAgICAgICBpZiBiYWQ6CisgICAgICAgICAgICBwcmludCBjb3VudChsZW4oYmFkKSwgInRlc3QiKSwgImZhaWxlZDoiCisgICAgICAgICAgICBwcmludGxpc3QoYmFkKQorICAgICAgICBpZiBlbnZpcm9ubWVudF9jaGFuZ2VkOgorICAgICAgICAgICAgcHJpbnQgInt9IGFsdGVyZWQgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudDoiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICBjb3VudChsZW4oZW52aXJvbm1lbnRfY2hhbmdlZCksICJ0ZXN0IikpCisgICAgICAgICAgICBwcmludGxpc3QoZW52aXJvbm1lbnRfY2hhbmdlZCkKKyAgICBpZiBza2lwcGVkIGFuZCBub3QgcXVpZXQ6CisgICAgICAgIHByaW50IGNvdW50KGxlbihza2lwcGVkKSwgInRlc3QiKSwgInNraXBwZWQ6IgorICAgICAgICBwcmludGxpc3Qoc2tpcHBlZCkKKworICAgICAgICBlID0gX0V4cGVjdGVkU2tpcHMoKQorICAgICAgICBwbGF0ID0gc3lzLnBsYXRmb3JtCisgICAgICAgIGlmIGUuaXN2YWxpZCgpOgorICAgICAgICAgICAgc3VycHJpc2UgPSBzZXQoc2tpcHBlZCkgLSBlLmdldGV4cGVjdGVkKCkgLSBzZXQocmVzb3VyY2VfZGVuaWVkcykKKyAgICAgICAgICAgIGlmIHN1cnByaXNlOgorICAgICAgICAgICAgICAgIHByaW50IGNvdW50KGxlbihzdXJwcmlzZSksICJza2lwIiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBvbiIsIHBsYXQgKyAiOiIKKyAgICAgICAgICAgICAgICBwcmludGxpc3Qoc3VycHJpc2UpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICJUaG9zZSBza2lwcyBhcmUgYWxsIGV4cGVjdGVkIG9uIiwgcGxhdCArICIuIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgIkFzayBzb21lb25lIHRvIHRlYWNoIHJlZ3J0ZXN0LnB5IGFib3V0IHdoaWNoIHRlc3RzIGFyZSIKKyAgICAgICAgICAgIHByaW50ICJleHBlY3RlZCB0byBnZXQgc2tpcHBlZCBvbiIsIHBsYXQgKyAiLiIKKworICAgIGlmIHZlcmJvc2UyIGFuZCBiYWQ6CisgICAgICAgIHByaW50ICJSZS1ydW5uaW5nIGZhaWxlZCB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUiCisgICAgICAgIGZvciB0ZXN0IGluIGJhZDoKKyAgICAgICAgICAgIHByaW50ICJSZS1ydW5uaW5nIHRlc3QgJXIgaW4gdmVyYm9zZSBtb2RlIiAlIHRlc3QKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC52ZXJib3NlID0gVHJ1ZQorICAgICAgICAgICAgICAgIG9rID0gcnVudGVzdCh0ZXN0LCBUcnVlLCBxdWlldCwgaHVudHJsZWFrcykKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICAjIHByaW50IGEgbmV3bGluZSBzZXBhcmF0ZSBmcm9tIHRoZSBeQworICAgICAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgaWYgc2luZ2xlOgorICAgICAgICBpZiBuZXh0X3NpbmdsZV90ZXN0OgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKG5leHRfc2luZ2xlX3Rlc3QgKyAnXG4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lKQorCisgICAgaWYgdHJhY2U6CisgICAgICAgIHIgPSB0cmFjZXIucmVzdWx0cygpCisgICAgICAgIHIud3JpdGVfcmVzdWx0cyhzaG93X21pc3Npbmc9VHJ1ZSwgc3VtbWFyeT1UcnVlLCBjb3ZlcmRpcj1jb3ZlcmRpcikKKworICAgIGlmIHJ1bmxlYWtzOgorICAgICAgICBvcy5zeXN0ZW0oImxlYWtzICVkIiAlIG9zLmdldHBpZCgpKQorCisgICAgc3lzLmV4aXQobGVuKGJhZCkgPiAwIG9yIGludGVycnVwdGVkKQorCisKK1NURFRFU1RTID0gWworICAgICd0ZXN0X2dyYW1tYXInLAorICAgICd0ZXN0X29wY29kZXMnLAorICAgICd0ZXN0X2RpY3QnLAorICAgICd0ZXN0X2J1aWx0aW4nLAorICAgICd0ZXN0X2V4Y2VwdGlvbnMnLAorICAgICd0ZXN0X3R5cGVzJywKKyAgICAndGVzdF91bml0dGVzdCcsCisgICAgJ3Rlc3RfZG9jdGVzdCcsCisgICAgJ3Rlc3RfZG9jdGVzdDInLAorXQorCitOT1RURVNUUyA9IHsKKyAgICAndGVzdF9zdXBwb3J0JywKKyAgICAndGVzdF9mdXR1cmUxJywKKyAgICAndGVzdF9mdXR1cmUyJywKK30KKworZGVmIGZpbmR0ZXN0cyh0ZXN0ZGlyPU5vbmUsIHN0ZHRlc3RzPVNURFRFU1RTLCBub3R0ZXN0cz1OT1RURVNUUyk6CisgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBhbGwgYXBwbGljYWJsZSB0ZXN0IG1vZHVsZXMuIiIiCisgICAgdGVzdGRpciA9IGZpbmR0ZXN0ZGlyKHRlc3RkaXIpCisgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHRlc3RkaXIpCisgICAgdGVzdHMgPSBbXQorICAgIG90aGVycyA9IHNldChzdGR0ZXN0cykgfCBub3R0ZXN0cworICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICBtb2RuYW1lLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KG5hbWUpCisgICAgICAgIGlmIG1vZG5hbWVbOjVdID09ICJ0ZXN0XyIgYW5kIGV4dCA9PSAiLnB5IiBhbmQgbW9kbmFtZSBub3QgaW4gb3RoZXJzOgorICAgICAgICAgICAgdGVzdHMuYXBwZW5kKG1vZG5hbWUpCisgICAgcmV0dXJuIHN0ZHRlc3RzICsgc29ydGVkKHRlc3RzKQorCitkZWYgcnVudGVzdCh0ZXN0LCB2ZXJib3NlLCBxdWlldCwKKyAgICAgICAgICAgIGh1bnRybGVha3M9RmFsc2UsIHVzZV9yZXNvdXJjZXM9Tm9uZSk6CisgICAgIiIiUnVuIGEgc2luZ2xlIHRlc3QuCisKKyAgICB0ZXN0IC0tIHRoZSBuYW1lIG9mIHRoZSB0ZXN0CisgICAgdmVyYm9zZSAtLSBpZiB0cnVlLCBwcmludCBtb3JlIG1lc3NhZ2VzCisgICAgcXVpZXQgLS0gaWYgdHJ1ZSwgZG9uJ3QgcHJpbnQgJ3NraXBwZWQnIG1lc3NhZ2VzIChwcm9iYWJseSByZWR1bmRhbnQpCisgICAgdGVzdF90aW1lcyAtLSBhIGxpc3Qgb2YgKHRpbWUsIHRlc3RfbmFtZSkgcGFpcnMKKyAgICBodW50cmxlYWtzIC0tIHJ1biBtdWx0aXBsZSB0aW1lcyB0byB0ZXN0IGZvciBsZWFrczsgcmVxdWlyZXMgYSBkZWJ1ZworICAgICAgICAgICAgICAgICAgYnVpbGQ7IGEgdHJpcGxlIGNvcnJlc3BvbmRpbmcgdG8gLVIncyB0aHJlZSBhcmd1bWVudHMKKyAgICBSZXR1cm5zIG9uZSBvZiB0aGUgdGVzdCByZXN1bHQgY29uc3RhbnRzOgorICAgICAgICBJTlRFUlJVUFRFRCAgICAgIEtleWJvYXJkSW50ZXJydXB0IHdoZW4gcnVuIHVuZGVyIC1qCisgICAgICAgIFJFU09VUkNFX0RFTklFRCAgdGVzdCBza2lwcGVkIGJlY2F1c2UgcmVzb3VyY2UgZGVuaWVkCisgICAgICAgIFNLSVBQRUQgICAgICAgICAgdGVzdCBza2lwcGVkIGZvciBzb21lIG90aGVyIHJlYXNvbgorICAgICAgICBFTlZfQ0hBTkdFRCAgICAgIHRlc3QgZmFpbGVkIGJlY2F1c2UgaXQgY2hhbmdlZCB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50CisgICAgICAgIEZBSUxFRCAgICAgICAgICAgdGVzdCBmYWlsZWQKKyAgICAgICAgUEFTU0VEICAgICAgICAgICB0ZXN0IHBhc3NlZAorICAgICIiIgorCisgICAgdGVzdF9zdXBwb3J0LnZlcmJvc2UgPSB2ZXJib3NlICAjIFRlbGwgdGVzdHMgdG8gYmUgbW9kZXJhdGVseSBxdWlldAorICAgIGlmIHVzZV9yZXNvdXJjZXMgaXMgbm90IE5vbmU6CisgICAgICAgIHRlc3Rfc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gdXNlX3Jlc291cmNlcworICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MpCisgICAgZmluYWxseToKKyAgICAgICAgY2xlYW51cF90ZXN0X2Ryb3BwaW5ncyh0ZXN0LCB2ZXJib3NlKQorCisKKyMgVW5pdCB0ZXN0cyBhcmUgc3VwcG9zZWQgdG8gbGVhdmUgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCB1bmNoYW5nZWQKKyMgb25jZSB0aGV5IGNvbXBsZXRlLiAgQnV0IHNvbWV0aW1lcyB0ZXN0cyBoYXZlIGJ1Z3MsIGVzcGVjaWFsbHkgd2hlbgorIyB0ZXN0cyBmYWlsLCBhbmQgdGhlIGNoYW5nZXMgdG8gZW52aXJvbm1lbnQgZ28gb24gdG8gbWVzcyB1cCBvdGhlcgorIyB0ZXN0cy4gIFRoaXMgY2FuIGNhdXNlIGlzc3VlcyB3aXRoIGJ1aWxkYm90IHN0YWJpbGl0eSwgc2luY2UgdGVzdHMKKyMgYXJlIHJ1biBpbiByYW5kb20gb3JkZXIgYW5kIHNvIHByb2JsZW1zIG1heSBhcHBlYXIgdG8gY29tZSBhbmQgZ28uCisjIFRoZXJlIGFyZSBhIGZldyB0aGluZ3Mgd2UgY2FuIHNhdmUgYW5kIHJlc3RvcmUgdG8gbWl0aWdhdGUgdGhpcywgYW5kCisjIHRoZSBmb2xsb3dpbmcgY29udGV4dCBtYW5hZ2VyIGhhbmRsZXMgdGhpcyB0YXNrLgorCitjbGFzcyBzYXZlZF90ZXN0X2Vudmlyb25tZW50OgorICAgICIiIlNhdmUgYml0cyBvZiB0aGUgdGVzdCBlbnZpcm9ubWVudCBhbmQgcmVzdG9yZSB0aGVtIGF0IGJsb2NrIGV4aXQuCisKKyAgICAgICAgd2l0aCBzYXZlZF90ZXN0X2Vudmlyb25tZW50KHRlc3RuYW1lLCB2ZXJib3NlLCBxdWlldCk6CisgICAgICAgICAgICAjc3R1ZmYKKworICAgIFVubGVzcyBxdWlldCBpcyBUcnVlLCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0byBzdGRlcnIgaWYgYW55IG9mCisgICAgdGhlIHNhdmVkIGl0ZW1zIHdhcyBjaGFuZ2VkIGJ5IHRoZSB0ZXN0LiAgVGhlIGF0dHJpYnV0ZSAnY2hhbmdlZCcKKyAgICBpcyBpbml0aWFsbHkgRmFsc2UsIGJ1dCBpcyBzZXQgdG8gVHJ1ZSBpZiBhIGNoYW5nZSBpcyBkZXRlY3RlZC4KKworICAgIElmIHZlcmJvc2UgaXMgbW9yZSB0aGFuIDEsIHRoZSBiZWZvcmUgYW5kIGFmdGVyIHN0YXRlIG9mIGNoYW5nZWQKKyAgICBpdGVtcyBpcyBhbHNvIHByaW50ZWQuCisgICAgIiIiCisKKyAgICBjaGFuZ2VkID0gRmFsc2UKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0bmFtZSwgdmVyYm9zZT0wLCBxdWlldD1GYWxzZSk6CisgICAgICAgIHNlbGYudGVzdG5hbWUgPSB0ZXN0bmFtZQorICAgICAgICBzZWxmLnZlcmJvc2UgPSB2ZXJib3NlCisgICAgICAgIHNlbGYucXVpZXQgPSBxdWlldAorCisgICAgIyBUbyBhZGQgdGhpbmdzIHRvIHNhdmUgYW5kIHJlc3RvcmUsIGFkZCBhIG5hbWUgWFhYIHRvIHRoZSByZXNvdXJjZXMgbGlzdAorICAgICMgYW5kIGFkZCBjb3JyZXNwb25kaW5nIGdldF9YWFgvcmVzdG9yZV9YWFggZnVuY3Rpb25zLiAgZ2V0X1hYWCBzaG91bGQKKyAgICAjIHJldHVybiB0aGUgdmFsdWUgdG8gYmUgc2F2ZWQgYW5kIGNvbXBhcmVkIGFnYWluc3QgYSBzZWNvbmQgY2FsbCB0byB0aGUKKyAgICAjIGdldCBmdW5jdGlvbiB3aGVuIHRlc3QgZXhlY3V0aW9uIGNvbXBsZXRlcy4gIHJlc3RvcmVfWFhYIHNob3VsZCBhY2NlcHQKKyAgICAjIHRoZSBzYXZlZCB2YWx1ZSBhbmQgcmVzdG9yZSB0aGUgcmVzb3VyY2UgdXNpbmcgaXQuICBJdCB3aWxsIGJlIGNhbGxlZCBpZgorICAgICMgYW5kIG9ubHkgaWYgYSBjaGFuZ2UgaW4gdGhlIHZhbHVlIGlzIGRldGVjdGVkLgorICAgICMKKyAgICAjIE5vdGU6IFhYWCB3aWxsIGhhdmUgYW55ICcuJyByZXBsYWNlZCB3aXRoICdfJyBjaGFyYWN0ZXJzIHdoZW4gZGV0ZXJtaW5pbmcKKyAgICAjIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZCBuYW1lcy4KKworICAgIHJlc291cmNlcyA9ICgnc3lzLmFyZ3YnLCAnY3dkJywgJ3N5cy5zdGRpbicsICdzeXMuc3Rkb3V0JywgJ3N5cy5zdGRlcnInLAorICAgICAgICAgICAgICAgICAnb3MuZW52aXJvbicsICdzeXMucGF0aCcsICdhc3luY29yZS5zb2NrZXRfbWFwJywKKyAgICAgICAgICAgICAgICAgJ3Rlc3Rfc3VwcG9ydC5URVNURk4nLAorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiBnZXRfc3lzX2FyZ3Yoc2VsZik6CisgICAgICAgIHJldHVybiBpZChzeXMuYXJndiksIHN5cy5hcmd2LCBzeXMuYXJndls6XQorICAgIGRlZiByZXN0b3JlX3N5c19hcmd2KHNlbGYsIHNhdmVkX2FyZ3YpOgorICAgICAgICBzeXMuYXJndiA9IHNhdmVkX2FyZ3ZbMV0KKyAgICAgICAgc3lzLmFyZ3ZbOl0gPSBzYXZlZF9hcmd2WzJdCisKKyAgICBkZWYgZ2V0X2N3ZChzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLmdldGN3ZCgpCisgICAgZGVmIHJlc3RvcmVfY3dkKHNlbGYsIHNhdmVkX2N3ZCk6CisgICAgICAgIG9zLmNoZGlyKHNhdmVkX2N3ZCkKKworICAgIGRlZiBnZXRfc3lzX3N0ZG91dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHN5cy5zdGRvdXQKKyAgICBkZWYgcmVzdG9yZV9zeXNfc3Rkb3V0KHNlbGYsIHNhdmVkX3N0ZG91dCk6CisgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlZF9zdGRvdXQKKworICAgIGRlZiBnZXRfc3lzX3N0ZGVycihzZWxmKToKKyAgICAgICAgcmV0dXJuIHN5cy5zdGRlcnIKKyAgICBkZWYgcmVzdG9yZV9zeXNfc3RkZXJyKHNlbGYsIHNhdmVkX3N0ZGVycik6CisgICAgICAgIHN5cy5zdGRlcnIgPSBzYXZlZF9zdGRlcnIKKworICAgIGRlZiBnZXRfc3lzX3N0ZGluKHNlbGYpOgorICAgICAgICByZXR1cm4gc3lzLnN0ZGluCisgICAgZGVmIHJlc3RvcmVfc3lzX3N0ZGluKHNlbGYsIHNhdmVkX3N0ZGluKToKKyAgICAgICAgc3lzLnN0ZGluID0gc2F2ZWRfc3RkaW4KKworICAgIGRlZiBnZXRfb3NfZW52aXJvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIGlkKG9zLmVudmlyb24pLCBvcy5lbnZpcm9uLCBkaWN0KG9zLmVudmlyb24pCisgICAgZGVmIHJlc3RvcmVfb3NfZW52aXJvbihzZWxmLCBzYXZlZF9lbnZpcm9uKToKKyAgICAgICAgb3MuZW52aXJvbiA9IHNhdmVkX2Vudmlyb25bMV0KKyAgICAgICAgb3MuZW52aXJvbi5jbGVhcigpCisgICAgICAgIG9zLmVudmlyb24udXBkYXRlKHNhdmVkX2Vudmlyb25bMl0pCisKKyAgICBkZWYgZ2V0X3N5c19wYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4gaWQoc3lzLnBhdGgpLCBzeXMucGF0aCwgc3lzLnBhdGhbOl0KKyAgICBkZWYgcmVzdG9yZV9zeXNfcGF0aChzZWxmLCBzYXZlZF9wYXRoKToKKyAgICAgICAgc3lzLnBhdGggPSBzYXZlZF9wYXRoWzFdCisgICAgICAgIHN5cy5wYXRoWzpdID0gc2F2ZWRfcGF0aFsyXQorCisgICAgZGVmIGdldF9hc3luY29yZV9zb2NrZXRfbWFwKHNlbGYpOgorICAgICAgICBhc3luY29yZSA9IHN5cy5tb2R1bGVzLmdldCgnYXN5bmNvcmUnKQorICAgICAgICAjIFhYWCBNYWtpbmcgYSBjb3B5IGtlZXBzIG9iamVjdHMgYWxpdmUgdW50aWwgX19leGl0X18gZ2V0cyBjYWxsZWQuCisgICAgICAgIHJldHVybiBhc3luY29yZSBhbmQgYXN5bmNvcmUuc29ja2V0X21hcC5jb3B5KCkgb3Ige30KKyAgICBkZWYgcmVzdG9yZV9hc3luY29yZV9zb2NrZXRfbWFwKHNlbGYsIHNhdmVkX21hcCk6CisgICAgICAgIGFzeW5jb3JlID0gc3lzLm1vZHVsZXMuZ2V0KCdhc3luY29yZScpCisgICAgICAgIGlmIGFzeW5jb3JlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYXN5bmNvcmUuY2xvc2VfYWxsKGlnbm9yZV9hbGw9VHJ1ZSkKKyAgICAgICAgICAgIGFzeW5jb3JlLnNvY2tldF9tYXAudXBkYXRlKHNhdmVkX21hcCkKKworICAgIGRlZiBnZXRfdGVzdF9zdXBwb3J0X1RFU1RGTihzZWxmKToKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTik6CisgICAgICAgICAgICByZXN1bHQgPSAnZicKKyAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pOgorICAgICAgICAgICAgcmVzdWx0ID0gJ2QnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQgPSBOb25lCisgICAgICAgIHJldHVybiByZXN1bHQKKyAgICBkZWYgcmVzdG9yZV90ZXN0X3N1cHBvcnRfVEVTVEZOKHNlbGYsIHNhdmVkX3ZhbHVlKToKKyAgICAgICAgaWYgc2F2ZWRfdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4pOgorICAgICAgICAgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pOgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiByZXNvdXJjZV9pbmZvKHNlbGYpOgorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLnJlc291cmNlczoKKyAgICAgICAgICAgIG1ldGhvZF9zdWZmaXggPSBuYW1lLnJlcGxhY2UoJy4nLCAnXycpCisgICAgICAgICAgICBnZXRfbmFtZSA9ICdnZXRfJyArIG1ldGhvZF9zdWZmaXgKKyAgICAgICAgICAgIHJlc3RvcmVfbmFtZSA9ICdyZXN0b3JlXycgKyBtZXRob2Rfc3VmZml4CisgICAgICAgICAgICB5aWVsZCBuYW1lLCBnZXRhdHRyKHNlbGYsIGdldF9uYW1lKSwgZ2V0YXR0cihzZWxmLCByZXN0b3JlX25hbWUpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLnNhdmVkX3ZhbHVlcyA9IGRpY3QoKG5hbWUsIGdldCgpKSBmb3IgbmFtZSwgZ2V0LCByZXN0b3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBzZWxmLnJlc291cmNlX2luZm8oKSkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKToKKyAgICAgICAgc2F2ZWRfdmFsdWVzID0gc2VsZi5zYXZlZF92YWx1ZXMKKyAgICAgICAgZGVsIHNlbGYuc2F2ZWRfdmFsdWVzCisgICAgICAgIGZvciBuYW1lLCBnZXQsIHJlc3RvcmUgaW4gc2VsZi5yZXNvdXJjZV9pbmZvKCk6CisgICAgICAgICAgICBjdXJyZW50ID0gZ2V0KCkKKyAgICAgICAgICAgIG9yaWdpbmFsID0gc2F2ZWRfdmFsdWVzLnBvcChuYW1lKQorICAgICAgICAgICAgIyBDaGVjayBmb3IgY2hhbmdlcyB0byB0aGUgcmVzb3VyY2UncyB2YWx1ZQorICAgICAgICAgICAgaWYgY3VycmVudCAhPSBvcmlnaW5hbDoKKyAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgcmVzdG9yZShvcmlnaW5hbCkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5xdWlldDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICJXYXJuaW5nIC0tIHt9IHdhcyBtb2RpZmllZCBieSB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHNlbGYudGVzdG5hbWUpKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2UgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBCZWZvcmU6IHt9XG4gIEFmdGVyOiAge30gIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsLCBjdXJyZW50KSkKKyAgICAgICAgICAgICMgWFhYIChuY29naGxhbik6IGZvciBtb3N0IHJlc291cmNlcyAoZS5nLiBzeXMucGF0aCkgaWRlbnRpdHkKKyAgICAgICAgICAgICMgbWF0dGVycyBhdCBsZWFzdCBhcyBtdWNoIGFzIHZhbHVlLiBGb3Igb3RoZXJzIChlLmcuIGN3ZCksCisgICAgICAgICAgICAjIGlkZW50aXR5IGlzIGlycmVsZXZhbnQuIFNob3VsZCB3ZSBhZGQgYSBtZWNoYW5pc20gdG8gY2hlY2sKKyAgICAgICAgICAgICMgZm9yIHN1YnN0aXR1dGlvbiBpbiB0aGUgY2FzZXMgd2hlcmUgaXQgbWF0dGVycz8KKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3M9RmFsc2UpOgorICAgIHRlc3Rfc3VwcG9ydC51bmxvYWQodGVzdCkKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBjYXB0dXJlX3N0ZG91dCA9IE5vbmUKKyAgICBlbHNlOgorICAgICAgICBjYXB0dXJlX3N0ZG91dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKworICAgIHRlc3RfdGltZSA9IDAuMAorICAgIHJlZmxlYWsgPSBGYWxzZSAgIyBUcnVlIGlmIHRoZSB0ZXN0IGxlYWtlZCByZWZlcmVuY2VzLgorICAgIHRyeToKKyAgICAgICAgc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGNhcHR1cmVfc3Rkb3V0OgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBjYXB0dXJlX3N0ZG91dAorICAgICAgICAgICAgaWYgdGVzdC5zdGFydHN3aXRoKCd0ZXN0LicpOgorICAgICAgICAgICAgICAgIGFic3Rlc3QgPSB0ZXN0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgQWx3YXlzIGltcG9ydCBpdCBmcm9tIHRoZSB0ZXN0IHBhY2thZ2UKKyAgICAgICAgICAgICAgICBhYnN0ZXN0ID0gJ3Rlc3QuJyArIHRlc3QKKyAgICAgICAgICAgIHdpdGggc2F2ZWRfdGVzdF9lbnZpcm9ubWVudCh0ZXN0LCB2ZXJib3NlLCBxdWlldCkgYXMgZW52aXJvbm1lbnQ6CisgICAgICAgICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgdGhlX3BhY2thZ2UgPSBfX2ltcG9ydF9fKGFic3Rlc3QsIGdsb2JhbHMoKSwgbG9jYWxzKCksIFtdKQorICAgICAgICAgICAgICAgIHRoZV9tb2R1bGUgPSBnZXRhdHRyKHRoZV9wYWNrYWdlLCB0ZXN0KQorICAgICAgICAgICAgICAgICMgT2xkIHRlc3RzIHJ1biB0byBjb21wbGV0aW9uIHNpbXBseSBhcyBhIHNpZGUtZWZmZWN0IG9mCisgICAgICAgICAgICAgICAgIyBiZWluZyBpbXBvcnRlZC4gIEZvciB0ZXN0cyBiYXNlZCBvbiB1bml0dGVzdCBvciBkb2N0ZXN0LAorICAgICAgICAgICAgICAgICMgZXhwbGljaXRseSBpbnZva2UgdGhlaXIgdGVzdF9tYWluKCkgZnVuY3Rpb24gKGlmIGl0IGV4aXN0cykuCisgICAgICAgICAgICAgICAgaW5kaXJlY3RfdGVzdCA9IGdldGF0dHIodGhlX21vZHVsZSwgInRlc3RfbWFpbiIsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgaW5kaXJlY3RfdGVzdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaW5kaXJlY3RfdGVzdCgpCisgICAgICAgICAgICAgICAgaWYgaHVudHJsZWFrczoKKyAgICAgICAgICAgICAgICAgICAgcmVmbGVhayA9IGRhc2hfUih0aGVfbW9kdWxlLCB0ZXN0LCBpbmRpcmVjdF90ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgaHVudHJsZWFrcykKKyAgICAgICAgICAgICAgICB0ZXN0X3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAorICAgIGV4Y2VwdCB0ZXN0X3N1cHBvcnQuUmVzb3VyY2VEZW5pZWQsIG1zZzoKKyAgICAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICAgICAgcHJpbnQgdGVzdCwgInNraXBwZWQgLS0iLCBtc2cKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICByZXR1cm4gUkVTT1VSQ0VfREVOSUVELCB0ZXN0X3RpbWUKKyAgICBleGNlcHQgdW5pdHRlc3QuU2tpcFRlc3QsIG1zZzoKKyAgICAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICAgICAgcHJpbnQgdGVzdCwgInNraXBwZWQgLS0iLCBtc2cKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICByZXR1cm4gU0tJUFBFRCwgdGVzdF90aW1lCisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICByYWlzZQorICAgIGV4Y2VwdCB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCwgbXNnOgorICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICJ0ZXN0IiwgdGVzdCwgImZhaWxlZCAtLSIsIG1zZworICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgcmV0dXJuIEZBSUxFRCwgdGVzdF90aW1lCisgICAgZXhjZXB0OgorICAgICAgICB0eXBlLCB2YWx1ZSA9IHN5cy5leGNfaW5mbygpWzoyXQorICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICJ0ZXN0IiwgdGVzdCwgImNyYXNoZWQgLS0iLCBzdHIodHlwZSkgKyAiOiIsIHZhbHVlCisgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgcmV0dXJuIEZBSUxFRCwgdGVzdF90aW1lCisgICAgZWxzZToKKyAgICAgICAgaWYgcmVmbGVhazoKKyAgICAgICAgICAgIHJldHVybiBGQUlMRUQsIHRlc3RfdGltZQorICAgICAgICBpZiBlbnZpcm9ubWVudC5jaGFuZ2VkOgorICAgICAgICAgICAgcmV0dXJuIEVOVl9DSEFOR0VELCB0ZXN0X3RpbWUKKyAgICAgICAgIyBFeGNlcHQgaW4gdmVyYm9zZSBtb2RlLCB0ZXN0cyBzaG91bGQgbm90IHByaW50IGFueXRoaW5nCisgICAgICAgIGlmIHZlcmJvc2Ugb3IgaHVudHJsZWFrczoKKyAgICAgICAgICAgIHJldHVybiBQQVNTRUQsIHRlc3RfdGltZQorICAgICAgICBvdXRwdXQgPSBjYXB0dXJlX3N0ZG91dC5nZXR2YWx1ZSgpCisgICAgICAgIGlmIG5vdCBvdXRwdXQ6CisgICAgICAgICAgICByZXR1cm4gUEFTU0VELCB0ZXN0X3RpbWUKKyAgICAgICAgcHJpbnQgInRlc3QiLCB0ZXN0LCAicHJvZHVjZWQgdW5leHBlY3RlZCBvdXRwdXQ6IgorICAgICAgICBwcmludCAiKiIgKiA3MAorICAgICAgICBwcmludCBvdXRwdXQKKyAgICAgICAgcHJpbnQgIioiICogNzAKKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIHJldHVybiBGQUlMRUQsIHRlc3RfdGltZQorCitkZWYgY2xlYW51cF90ZXN0X2Ryb3BwaW5ncyh0ZXN0bmFtZSwgdmVyYm9zZSk6CisgICAgaW1wb3J0IHN0YXQKKyAgICBpbXBvcnQgZ2MKKworICAgICMgRmlyc3Qga2lsbCBhbnkgZGFuZ2xpbmcgcmVmZXJlbmNlcyB0byBvcGVuIGZpbGVzIGV0Yy4KKyAgICBnYy5jb2xsZWN0KCkKKworICAgICMgVHJ5IHRvIGNsZWFuIHVwIGp1bmsgY29tbW9ubHkgbGVmdCBiZWhpbmQuICBXaGlsZSB0ZXN0cyBzaG91bGRuJ3QgbGVhdmUKKyAgICAjIGFueSBmaWxlcyBvciBkaXJlY3RvcmllcyBiZWhpbmQsIHdoZW4gYSB0ZXN0IGZhaWxzIHRoYXQgY2FuIGJlIHRlZGlvdXMKKyAgICAjIGZvciBpdCB0byBhcnJhbmdlLiAgVGhlIGNvbnNlcXVlbmNlcyBjYW4gYmUgZXNwZWNpYWxseSBuYXN0eSBvbiBXaW5kb3dzLAorICAgICMgc2luY2UgaWYgYSB0ZXN0IGxlYXZlcyBhIGZpbGUgb3BlbiwgaXQgY2Fubm90IGJlIGRlbGV0ZWQgYnkgbmFtZSAod2hpbGUKKyAgICAjIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgdGhhdCBoZXJlIGVpdGhlciwgd2UgY2FuIGRpc3BsYXkgdGhlCisgICAgIyBuYW1lIG9mIHRoZSBvZmZlbmRpbmcgdGVzdCwgd2hpY2ggaXMgYSByZWFsIGhlbHApLgorICAgIGZvciBuYW1lIGluICh0ZXN0X3N1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgICAiZGJfaG9tZSIsCisgICAgICAgICAgICAgICAgKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG5hbWUpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG5hbWUpOgorICAgICAgICAgICAga2luZCwgbnVrZXIgPSAiZGlyZWN0b3J5Iiwgc2h1dGlsLnJtdHJlZQorICAgICAgICBlbGlmIG9zLnBhdGguaXNmaWxlKG5hbWUpOgorICAgICAgICAgICAga2luZCwgbnVrZXIgPSAiZmlsZSIsIG9zLnVubGluaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXJyb3IoIm9zLnBhdGggc2F5cyAlciBleGlzdHMgYnV0IGlzIG5laXRoZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdG9yeSBub3IgZmlsZSIgJSBuYW1lKQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiJXIgbGVmdCBiZWhpbmQgJXMgJXIiICUgKHRlc3RuYW1lLCBraW5kLCBuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGlmIHdlIGhhdmUgY2htb2QsIGZpeCBwb3NzaWJsZSBwZXJtaXNzaW9ucyBwcm9ibGVtcworICAgICAgICAgICAgIyB0aGF0IG1pZ2h0IHByZXZlbnQgY2xlYW51cAorICAgICAgICAgICAgaWYgKGhhc2F0dHIob3MsICdjaG1vZCcpKToKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChuYW1lLCBzdGF0LlNfSVJXWFUgfCBzdGF0LlNfSVJXWEcgfCBzdGF0LlNfSVJXWE8pCisgICAgICAgICAgICBudWtlcihuYW1lKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBtc2c6CisgICAgICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAoIiVyIGxlZnQgYmVoaW5kICVzICVyIGFuZCBpdCBjb3VsZG4ndCBiZSAiCisgICAgICAgICAgICAgICAgInJlbW92ZWQ6ICVzIiAlICh0ZXN0bmFtZSwga2luZCwgbmFtZSwgbXNnKSkKKworZGVmIGRhc2hfUih0aGVfbW9kdWxlLCB0ZXN0LCBpbmRpcmVjdF90ZXN0LCBodW50cmxlYWtzKToKKyAgICAiIiJSdW4gYSB0ZXN0IG11bHRpcGxlIHRpbWVzLCBsb29raW5nIGZvciByZWZlcmVuY2UgbGVha3MuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBGYWxzZSBpZiB0aGUgdGVzdCBkaWRuJ3QgbGVhayByZWZlcmVuY2VzOyBUcnVlIGlmIHdlIGRldGVjdGVkIHJlZmxlYWtzLgorICAgICIiIgorICAgICMgVGhpcyBjb2RlIGlzIGhhY2tpc2ggYW5kIGluZWxlZ2FudCwgYnV0IGl0IHNlZW1zIHRvIGRvIHRoZSBqb2IuCisgICAgaW1wb3J0IGNvcHlfcmVnLCBfYWJjb2xsLCBfcHlpbworCisgICAgaWYgbm90IGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRyYWNraW5nIHJlZmVyZW5jZSBsZWFrcyByZXF1aXJlcyBhIGRlYnVnIGJ1aWxkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJvZiBQeXRob24iKQorCisgICAgIyBTYXZlIGN1cnJlbnQgdmFsdWVzIGZvciBkYXNoX1JfY2xlYW51cCgpIHRvIHJlc3RvcmUuCisgICAgZnMgPSB3YXJuaW5ncy5maWx0ZXJzWzpdCisgICAgcHMgPSBjb3B5X3JlZy5kaXNwYXRjaF90YWJsZS5jb3B5KCkKKyAgICBwaWMgPSBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jb3B5KCkKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCB6aXBpbXBvcnQKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHpkYyA9IE5vbmUgIyBSdW4gdW5tb2RpZmllZCBvbiBwbGF0Zm9ybXMgd2l0aG91dCB6aXBpbXBvcnQgc3VwcG9ydAorICAgIGVsc2U6CisgICAgICAgIHpkYyA9IHppcGltcG9ydC5femlwX2RpcmVjdG9yeV9jYWNoZS5jb3B5KCkKKyAgICBhYmNzID0ge30KKyAgICBtb2R1bGVzID0gX2FiY29sbCwgX3B5aW8KKyAgICBmb3IgYWJjIGluIFtnZXRhdHRyKG1vZCwgYSkgZm9yIG1vZCBpbiBtb2R1bGVzIGZvciBhIGluIG1vZC5fX2FsbF9fXToKKyAgICAgICAgIyBYWFggaXNpbnN0YW5jZShhYmMsIEFCQ01ldGEpIGxlYWRzIHRvIGluZmluaXRlIHJlY3Vyc2lvbgorICAgICAgICBpZiBub3QgaGFzYXR0cihhYmMsICdfYWJjX3JlZ2lzdHJ5Jyk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3Igb2JqIGluIGFiYy5fX3N1YmNsYXNzZXNfXygpICsgW2FiY106CisgICAgICAgICAgICBhYmNzW29ial0gPSBvYmouX2FiY19yZWdpc3RyeS5jb3B5KCkKKworICAgIGlmIGluZGlyZWN0X3Rlc3Q6CisgICAgICAgIGRlZiBydW5fdGhlX3Rlc3QoKToKKyAgICAgICAgICAgIGluZGlyZWN0X3Rlc3QoKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBydW5fdGhlX3Rlc3QoKToKKyAgICAgICAgICAgIGltcC5yZWxvYWQodGhlX21vZHVsZSkKKworICAgIGRlbHRhcyA9IFtdCisgICAgbndhcm11cCwgbnRyYWNrZWQsIGZuYW1lID0gaHVudHJsZWFrcworICAgIGZuYW1lID0gb3MucGF0aC5qb2luKHRlc3Rfc3VwcG9ydC5TQVZFRENXRCwgZm5hbWUpCisgICAgcmVwY291bnQgPSBud2FybXVwICsgbnRyYWNrZWQKKyAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAiYmVnaW5uaW5nIiwgcmVwY291bnQsICJyZXBldGl0aW9ucyIKKyAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAoIjEyMzQ1Njc4OTAiKihyZXBjb3VudC8vMTAgKyAxKSlbOnJlcGNvdW50XQorICAgIGRhc2hfUl9jbGVhbnVwKGZzLCBwcywgcGljLCB6ZGMsIGFiY3MpCisgICAgZm9yIGkgaW4gcmFuZ2UocmVwY291bnQpOgorICAgICAgICByY19iZWZvcmUgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgIHJ1bl90aGVfdGVzdCgpCisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy4nKQorICAgICAgICBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCBhYmNzKQorICAgICAgICByY19hZnRlciA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgaWYgaSA+PSBud2FybXVwOgorICAgICAgICAgICAgZGVsdGFzLmFwcGVuZChyY19hZnRlciAtIHJjX2JlZm9yZSkKKyAgICBwcmludCA+PiBzeXMuc3RkZXJyCisgICAgaWYgYW55KGRlbHRhcyk6CisgICAgICAgIG1zZyA9ICclcyBsZWFrZWQgJXMgcmVmZXJlbmNlcywgc3VtPSVzJyAlICh0ZXN0LCBkZWx0YXMsIHN1bShkZWx0YXMpKQorICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCBtc2cKKyAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAiYSIpIGFzIHJlZnJlcDoKKyAgICAgICAgICAgIHByaW50ID4+IHJlZnJlcCwgbXNnCisgICAgICAgICAgICByZWZyZXAuZmx1c2goKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitkZWYgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcyk6CisgICAgaW1wb3J0IGdjLCBjb3B5X3JlZworICAgIGltcG9ydCBfc3RycHRpbWUsIGxpbmVjYWNoZQorICAgIGRpcmNhY2hlID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2RpcmNhY2hlJywgZGVwcmVjYXRlZD1UcnVlKQorICAgIGltcG9ydCB1cmxwYXJzZSwgdXJsbGliLCB1cmxsaWIyLCBtaW1ldHlwZXMsIGRvY3Rlc3QKKyAgICBpbXBvcnQgc3RydWN0LCBmaWxlY21wCisgICAgZnJvbSBkaXN0dXRpbHMuZGlyX3V0aWwgaW1wb3J0IF9wYXRoX2NyZWF0ZWQKKworICAgICMgQ2xlYXIgdGhlIHdhcm5pbmdzIHJlZ2lzdHJ5LCBzbyB0aGV5IGNhbiBiZSBkaXNwbGF5ZWQgYWdhaW4KKyAgICBmb3IgbW9kIGluIHN5cy5tb2R1bGVzLnZhbHVlcygpOgorICAgICAgICBpZiBoYXNhdHRyKG1vZCwgJ19fd2FybmluZ3JlZ2lzdHJ5X18nKToKKyAgICAgICAgICAgIGRlbCBtb2QuX193YXJuaW5ncmVnaXN0cnlfXworCisgICAgIyBSZXN0b3JlIHNvbWUgb3JpZ2luYWwgdmFsdWVzLgorICAgIHdhcm5pbmdzLmZpbHRlcnNbOl0gPSBmcworICAgIGNvcHlfcmVnLmRpc3BhdGNoX3RhYmxlLmNsZWFyKCkKKyAgICBjb3B5X3JlZy5kaXNwYXRjaF90YWJsZS51cGRhdGUocHMpCisgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY2xlYXIoKQorICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLnVwZGF0ZShwaWMpCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgemlwaW1wb3J0CisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBwYXNzICMgUnVuIHVubW9kaWZpZWQgb24gcGxhdGZvcm1zIHdpdGhvdXQgemlwaW1wb3J0IHN1cHBvcnQKKyAgICBlbHNlOgorICAgICAgICB6aXBpbXBvcnQuX3ppcF9kaXJlY3RvcnlfY2FjaGUuY2xlYXIoKQorICAgICAgICB6aXBpbXBvcnQuX3ppcF9kaXJlY3RvcnlfY2FjaGUudXBkYXRlKHpkYykKKworICAgICMgY2xlYXIgdHlwZSBjYWNoZQorICAgIHN5cy5fY2xlYXJfdHlwZV9jYWNoZSgpCisKKyAgICAjIENsZWFyIEFCQyByZWdpc3RyaWVzLCByZXN0b3JpbmcgcHJldmlvdXNseSBzYXZlZCBBQkMgcmVnaXN0cmllcy4KKyAgICBmb3IgYWJjLCByZWdpc3RyeSBpbiBhYmNzLml0ZW1zKCk6CisgICAgICAgIGFiYy5fYWJjX3JlZ2lzdHJ5ID0gcmVnaXN0cnkuY29weSgpCisgICAgICAgIGFiYy5fYWJjX2NhY2hlLmNsZWFyKCkKKyAgICAgICAgYWJjLl9hYmNfbmVnYXRpdmVfY2FjaGUuY2xlYXIoKQorCisgICAgIyBDbGVhciBhc3NvcnRlZCBtb2R1bGUgY2FjaGVzLgorICAgIF9wYXRoX2NyZWF0ZWQuY2xlYXIoKQorICAgIHJlLnB1cmdlKCkKKyAgICBfc3RycHRpbWUuX3JlZ2V4X2NhY2hlLmNsZWFyKCkKKyAgICB1cmxwYXJzZS5jbGVhcl9jYWNoZSgpCisgICAgdXJsbGliLnVybGNsZWFudXAoKQorICAgIHVybGxpYjIuaW5zdGFsbF9vcGVuZXIoTm9uZSkKKyAgICBkaXJjYWNoZS5yZXNldCgpCisgICAgbGluZWNhY2hlLmNsZWFyY2FjaGUoKQorICAgIG1pbWV0eXBlcy5fZGVmYXVsdF9taW1lX3R5cGVzKCkKKyAgICBmaWxlY21wLl9jYWNoZS5jbGVhcigpCisgICAgc3RydWN0Ll9jbGVhcmNhY2hlKCkKKyAgICBkb2N0ZXN0Lm1hc3RlciA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBjdHlwZXMKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICMgRG9uJ3Qgd29ycnkgYWJvdXQgcmVzZXR0aW5nIHRoZSBjYWNoZSBpZiBjdHlwZXMgaXMgbm90IHN1cHBvcnRlZAorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgY3R5cGVzLl9yZXNldF9jYWNoZSgpCisKKyAgICAjIENvbGxlY3QgY3ljbGljIHRyYXNoLgorICAgIGdjLmNvbGxlY3QoKQorCitkZWYgZmluZHRlc3RkaXIocGF0aD1Ob25lKToKKyAgICByZXR1cm4gcGF0aCBvciBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpcgorCitkZWYgcmVtb3ZlcHkobmFtZXMpOgorICAgIGlmIG5vdCBuYW1lczoKKyAgICAgICAgcmV0dXJuCisgICAgZm9yIGlkeCwgbmFtZSBpbiBlbnVtZXJhdGUobmFtZXMpOgorICAgICAgICBiYXNlbmFtZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChuYW1lKQorICAgICAgICBpZiBleHQgPT0gJy5weSc6CisgICAgICAgICAgICBuYW1lc1tpZHhdID0gYmFzZW5hbWUKKworZGVmIGNvdW50KG4sIHdvcmQpOgorICAgIGlmIG4gPT0gMToKKyAgICAgICAgcmV0dXJuICIlZCAlcyIgJSAobiwgd29yZCkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gIiVkICVzcyIgJSAobiwgd29yZCkKKworZGVmIHByaW50bGlzdCh4LCB3aWR0aD03MCwgaW5kZW50PTQpOgorICAgICIiIlByaW50IHRoZSBlbGVtZW50cyBvZiBpdGVyYWJsZSB4IHRvIHN0ZG91dC4KKworICAgIE9wdGlvbmFsIGFyZyB3aWR0aCAoZGVmYXVsdCA3MCkgaXMgdGhlIG1heGltdW0gbGluZSBsZW5ndGguCisgICAgT3B0aW9uYWwgYXJnIGluZGVudCAoZGVmYXVsdCA0KSBpcyB0aGUgbnVtYmVyIG9mIGJsYW5rcyB3aXRoIHdoaWNoIHRvCisgICAgYmVnaW4gZWFjaCBsaW5lLgorICAgICIiIgorCisgICAgZnJvbSB0ZXh0d3JhcCBpbXBvcnQgZmlsbAorICAgIGJsYW5rcyA9ICcgJyAqIGluZGVudAorICAgICMgUHJpbnQgdGhlIHNvcnRlZCBsaXN0OiAneCcgbWF5IGJlIGEgJy0tcmFuZG9tJyBsaXN0IG9yIGEgc2V0KCkKKyAgICBwcmludCBmaWxsKCcgJy5qb2luKHN0cihlbHQpIGZvciBlbHQgaW4gc29ydGVkKHgpKSwgd2lkdGgsCisgICAgICAgICAgICAgICBpbml0aWFsX2luZGVudD1ibGFua3MsIHN1YnNlcXVlbnRfaW5kZW50PWJsYW5rcykKKworIyBNYXAgc3lzLnBsYXRmb3JtIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGJhc2VuYW1lcyBvZiB0ZXN0cworIyBleHBlY3RlZCB0byBiZSBza2lwcGVkIG9uIHRoYXQgcGxhdGZvcm0uCisjCisjIFNwZWNpYWwgY2FzZXM6CisjICAgICB0ZXN0X3BlcDI3NworIyAgICAgICAgIFRoZSBfRXhwZWN0ZWRTa2lwcyBjb25zdHJ1Y3RvciBhZGRzIHRoaXMgdG8gdGhlIHNldCBvZiBleHBlY3RlZAorIyAgICAgICAgIHNraXBzIGlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzLgorIyAgICAgdGVzdF90aW1lb3V0CisjICAgICAgICAgQ29udHJvbGxlZCBieSB0ZXN0X3RpbWVvdXQuc2tpcF9leHBlY3RlZC4gIFJlcXVpcmVzIHRoZSBuZXR3b3JrCisjICAgICAgICAgcmVzb3VyY2UgYW5kIGEgc29ja2V0IG1vZHVsZS4KKyMKKyMgVGVzdHMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgc2tpcHBlZCBldmVyeXdoZXJlIGV4Y2VwdCBvbiBvbmUgcGxhdGZvcm0KKyMgYXJlIGFsc28gaGFuZGxlZCBzZXBhcmF0ZWx5LgorCitfZXhwZWN0YXRpb25zID0geworICAgICd3aW4zMic6CisgICAgICAgICIiIgorICAgICAgICB0ZXN0X19sb2NhbGUKKyAgICAgICAgdGVzdF9ic2RkYjE4NQorICAgICAgICB0ZXN0X2JzZGRiMworICAgICAgICB0ZXN0X2NvbW1hbmRzCisgICAgICAgIHRlc3RfY3J5cHQKKyAgICAgICAgdGVzdF9jdXJzZXMKKyAgICAgICAgdGVzdF9kYm0KKyAgICAgICAgdGVzdF9kbAorICAgICAgICB0ZXN0X2ZjbnRsCisgICAgICAgIHRlc3RfZm9yazEKKyAgICAgICAgdGVzdF9lcG9sbAorICAgICAgICB0ZXN0X2dkYm0KKyAgICAgICAgdGVzdF9ncnAKKyAgICAgICAgdGVzdF9pb2N0bAorICAgICAgICB0ZXN0X2xhcmdlZmlsZQorICAgICAgICB0ZXN0X2txdWV1ZQorICAgICAgICB0ZXN0X21obGliCisgICAgICAgIHRlc3Rfb3BlbnB0eQorICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2CisgICAgICAgIHRlc3RfcGlwZXMKKyAgICAgICAgdGVzdF9wb2xsCisgICAgICAgIHRlc3RfcG9zaXgKKyAgICAgICAgdGVzdF9wdHkKKyAgICAgICAgdGVzdF9wd2QKKyAgICAgICAgdGVzdF9yZXNvdXJjZQorICAgICAgICB0ZXN0X3NpZ25hbAorICAgICAgICB0ZXN0X3RocmVhZHNpZ25hbHMKKyAgICAgICAgdGVzdF90aW1pbmcKKyAgICAgICAgdGVzdF93YWl0MworICAgICAgICB0ZXN0X3dhaXQ0CisgICAgICAgICIiIiwKKyAgICAnbGludXgyJzoKKyAgICAgICAgIiIiCisgICAgICAgIHRlc3RfYnNkZGIxODUKKyAgICAgICAgdGVzdF9jdXJzZXMKKyAgICAgICAgdGVzdF9kbAorICAgICAgICB0ZXN0X2xhcmdlZmlsZQorICAgICAgICB0ZXN0X2txdWV1ZQorICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2CisgICAgICAgICIiIiwKKyAgICAndW5peHdhcmU3JzoKKyAgICAgICAgIiIiCisgICAgICAgIHRlc3RfYnNkZGIKKyAgICAgICAgdGVzdF9ic2RkYjE4NQorICAgICAgICB0ZXN0X2RsCisgICAgICAgIHRlc3RfZXBvbGwKKyAgICAgICAgdGVzdF9sYXJnZWZpbGUKKyAgICAgICAgdGVzdF9rcXVldWUKKyAgICAgICAgdGVzdF9taW5pZG9tCisgICAgICAgIHRlc3Rfb3BlbnB0eQorICAgICAgICB0ZXN0X3B5ZXhwYXQKKyAgICAgICAgdGVzdF9zYXgKKyAgICAgICAgdGVzdF9zdW5kcnkKKyAgICAgICAgIiIiLAorICAgICdvcGVudW5peDgnOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9ic2RkYgorICAgICAgICB0ZXN0X2JzZGRiMTg1CisgICAgICAgIHRlc3RfZGwKKyAgICAgICAgdGVzdF9lcG9sbAorICAgICAgICB0ZXN0X2xhcmdlZmlsZQorICAgICAgICB0ZXN0X2txdWV1ZQorICAgICAgICB0ZXN0X21pbmlkb20KKyAgICAgICAgdGVzdF9vcGVucHR5CisgICAgICAgIHRlc3RfcHlleHBhdAorICAgICAgICB0ZXN0X3NheAorICAgICAgICB0ZXN0X3N1bmRyeQorICAgICAgICAiIiIsCisgICAgJ3Njb19zdjMnOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9hc3luY2hhdAorICAgICAgICB0ZXN0X2JzZGRiCisgICAgICAgIHRlc3RfYnNkZGIxODUKKyAgICAgICAgdGVzdF9kbAorICAgICAgICB0ZXN0X2ZvcmsxCisgICAgICAgIHRlc3RfZXBvbGwKKyAgICAgICAgdGVzdF9nZXR0ZXh0CisgICAgICAgIHRlc3RfbGFyZ2VmaWxlCisgICAgICAgIHRlc3RfbG9jYWxlCisgICAgICAgIHRlc3Rfa3F1ZXVlCisgICAgICAgIHRlc3RfbWluaWRvbQorICAgICAgICB0ZXN0X29wZW5wdHkKKyAgICAgICAgdGVzdF9weWV4cGF0CisgICAgICAgIHRlc3RfcXVldWUKKyAgICAgICAgdGVzdF9zYXgKKyAgICAgICAgdGVzdF9zdW5kcnkKKyAgICAgICAgdGVzdF90aHJlYWQKKyAgICAgICAgdGVzdF90aHJlYWRlZF9pbXBvcnQKKyAgICAgICAgdGVzdF90aHJlYWRlZHRlbXBmaWxlCisgICAgICAgIHRlc3RfdGhyZWFkaW5nCisgICAgICAgICIiIiwKKyAgICAncmlzY29zJzoKKyAgICAgICAgIiIiCisgICAgICAgIHRlc3RfYXN5bmNoYXQKKyAgICAgICAgdGVzdF9hdGV4aXQKKyAgICAgICAgdGVzdF9ic2RkYgorICAgICAgICB0ZXN0X2JzZGRiMTg1CisgICAgICAgIHRlc3RfYnNkZGIzCisgICAgICAgIHRlc3RfY29tbWFuZHMKKyAgICAgICAgdGVzdF9jcnlwdAorICAgICAgICB0ZXN0X2RibQorICAgICAgICB0ZXN0X2RsCisgICAgICAgIHRlc3RfZmNudGwKKyAgICAgICAgdGVzdF9mb3JrMQorICAgICAgICB0ZXN0X2Vwb2xsCisgICAgICAgIHRlc3RfZ2RibQorICAgICAgICB0ZXN0X2dycAorICAgICAgICB0ZXN0X2xhcmdlZmlsZQorICAgICAgICB0ZXN0X2xvY2FsZQorICAgICAgICB0ZXN0X2txdWV1ZQorICAgICAgICB0ZXN0X21tYXAKKyAgICAgICAgdGVzdF9vcGVucHR5CisgICAgICAgIHRlc3RfcG9sbAorICAgICAgICB0ZXN0X3BvcGVuMgorICAgICAgICB0ZXN0X3B0eQorICAgICAgICB0ZXN0X3B3ZAorICAgICAgICB0ZXN0X3N0cm9wCisgICAgICAgIHRlc3Rfc3VuZHJ5CisgICAgICAgIHRlc3RfdGhyZWFkCisgICAgICAgIHRlc3RfdGhyZWFkZWRfaW1wb3J0CisgICAgICAgIHRlc3RfdGhyZWFkZWR0ZW1wZmlsZQorICAgICAgICB0ZXN0X3RocmVhZGluZworICAgICAgICB0ZXN0X3RpbWluZworICAgICAgICAiIiIsCisgICAgJ2Rhcndpbic6CisgICAgICAgICIiIgorICAgICAgICB0ZXN0X19sb2NhbGUKKyAgICAgICAgdGVzdF9ic2RkYgorICAgICAgICB0ZXN0X2JzZGRiMworICAgICAgICB0ZXN0X2N1cnNlcworICAgICAgICB0ZXN0X2Vwb2xsCisgICAgICAgIHRlc3RfZ2RiCisgICAgICAgIHRlc3RfZ2RibQorICAgICAgICB0ZXN0X2xhcmdlZmlsZQorICAgICAgICB0ZXN0X2xvY2FsZQorICAgICAgICB0ZXN0X2txdWV1ZQorICAgICAgICB0ZXN0X21pbmlkb20KKyAgICAgICAgdGVzdF9vc3NhdWRpb2RldgorICAgICAgICB0ZXN0X3BvbGwKKyAgICAgICAgIiIiLAorICAgICdzdW5vczUnOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9ic2RkYgorICAgICAgICB0ZXN0X2JzZGRiMTg1CisgICAgICAgIHRlc3RfY3Vyc2VzCisgICAgICAgIHRlc3RfZGJtCisgICAgICAgIHRlc3RfZXBvbGwKKyAgICAgICAgdGVzdF9rcXVldWUKKyAgICAgICAgdGVzdF9nZGJtCisgICAgICAgIHRlc3RfZ3ppcAorICAgICAgICB0ZXN0X29wZW5wdHkKKyAgICAgICAgdGVzdF96aXBmaWxlCisgICAgICAgIHRlc3RfemxpYgorICAgICAgICAiIiIsCisgICAgJ2hwLXV4MTEnOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9ic2RkYgorICAgICAgICB0ZXN0X2JzZGRiMTg1CisgICAgICAgIHRlc3RfY3Vyc2VzCisgICAgICAgIHRlc3RfZGwKKyAgICAgICAgdGVzdF9lcG9sbAorICAgICAgICB0ZXN0X2dkYm0KKyAgICAgICAgdGVzdF9nemlwCisgICAgICAgIHRlc3RfbGFyZ2VmaWxlCisgICAgICAgIHRlc3RfbG9jYWxlCisgICAgICAgIHRlc3Rfa3F1ZXVlCisgICAgICAgIHRlc3RfbWluaWRvbQorICAgICAgICB0ZXN0X29wZW5wdHkKKyAgICAgICAgdGVzdF9weWV4cGF0CisgICAgICAgIHRlc3Rfc2F4CisgICAgICAgIHRlc3RfemlwZmlsZQorICAgICAgICB0ZXN0X3psaWIKKyAgICAgICAgIiIiLAorICAgICdhdGhlb3MnOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9ic2RkYjE4NQorICAgICAgICB0ZXN0X2N1cnNlcworICAgICAgICB0ZXN0X2RsCisgICAgICAgIHRlc3RfZ2RibQorICAgICAgICB0ZXN0X2Vwb2xsCisgICAgICAgIHRlc3RfbGFyZ2VmaWxlCisgICAgICAgIHRlc3RfbG9jYWxlCisgICAgICAgIHRlc3Rfa3F1ZXVlCisgICAgICAgIHRlc3RfbWhsaWIKKyAgICAgICAgdGVzdF9tbWFwCisgICAgICAgIHRlc3RfcG9sbAorICAgICAgICB0ZXN0X3BvcGVuMgorICAgICAgICB0ZXN0X3Jlc291cmNlCisgICAgICAgICIiIiwKKyAgICAnY3lnd2luJzoKKyAgICAgICAgIiIiCisgICAgICAgIHRlc3RfYnNkZGIxODUKKyAgICAgICAgdGVzdF9ic2RkYjMKKyAgICAgICAgdGVzdF9jdXJzZXMKKyAgICAgICAgdGVzdF9kYm0KKyAgICAgICAgdGVzdF9lcG9sbAorICAgICAgICB0ZXN0X2lvY3RsCisgICAgICAgIHRlc3Rfa3F1ZXVlCisgICAgICAgIHRlc3RfbGFyZ2VmaWxlCisgICAgICAgIHRlc3RfbG9jYWxlCisgICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKKyAgICAgICAgdGVzdF9zb2NrZXRzZXJ2ZXIKKyAgICAgICAgIiIiLAorICAgICdvczJlbXgnOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9hdWRpb29wCisgICAgICAgIHRlc3RfYnNkZGIxODUKKyAgICAgICAgdGVzdF9ic2RkYjMKKyAgICAgICAgdGVzdF9jb21tYW5kcworICAgICAgICB0ZXN0X2N1cnNlcworICAgICAgICB0ZXN0X2RsCisgICAgICAgIHRlc3RfZXBvbGwKKyAgICAgICAgdGVzdF9rcXVldWUKKyAgICAgICAgdGVzdF9sYXJnZWZpbGUKKyAgICAgICAgdGVzdF9taGxpYgorICAgICAgICB0ZXN0X21tYXAKKyAgICAgICAgdGVzdF9vcGVucHR5CisgICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKKyAgICAgICAgdGVzdF9wdHkKKyAgICAgICAgdGVzdF9yZXNvdXJjZQorICAgICAgICB0ZXN0X3NpZ25hbAorICAgICAgICAiIiIsCisgICAgJ2ZyZWVic2Q0JzoKKyAgICAgICAgIiIiCisgICAgICAgIHRlc3RfYnNkZGIKKyAgICAgICAgdGVzdF9ic2RkYjMKKyAgICAgICAgdGVzdF9lcG9sbAorICAgICAgICB0ZXN0X2dkYm0KKyAgICAgICAgdGVzdF9sb2NhbGUKKyAgICAgICAgdGVzdF9vc3NhdWRpb2RldgorICAgICAgICB0ZXN0X3BlcDI3NworICAgICAgICB0ZXN0X3B0eQorICAgICAgICB0ZXN0X3NvY2tldHNlcnZlcgorICAgICAgICB0ZXN0X3RjbAorICAgICAgICB0ZXN0X3RrCisgICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKKyAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKKyAgICAgICAgdGVzdF90aW1lb3V0CisgICAgICAgIHRlc3RfdXJsbGlibmV0CisgICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCisgICAgICAgICIiIiwKKyAgICAnYWl4NSc6CisgICAgICAgICIiIgorICAgICAgICB0ZXN0X2JzZGRiCisgICAgICAgIHRlc3RfYnNkZGIxODUKKyAgICAgICAgdGVzdF9ic2RkYjMKKyAgICAgICAgdGVzdF9iejIKKyAgICAgICAgdGVzdF9kbAorICAgICAgICB0ZXN0X2Vwb2xsCisgICAgICAgIHRlc3RfZ2RibQorICAgICAgICB0ZXN0X2d6aXAKKyAgICAgICAgdGVzdF9rcXVldWUKKyAgICAgICAgdGVzdF9vc3NhdWRpb2RldgorICAgICAgICB0ZXN0X3RjbAorICAgICAgICB0ZXN0X3RrCisgICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKKyAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKKyAgICAgICAgdGVzdF96aXBpbXBvcnQKKyAgICAgICAgdGVzdF96bGliCisgICAgICAgICIiIiwKKyAgICAnb3BlbmJzZDMnOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdF9hc2NpaV9mb3JtYXRkCisgICAgICAgIHRlc3RfYnNkZGIKKyAgICAgICAgdGVzdF9ic2RkYjMKKyAgICAgICAgdGVzdF9jdHlwZXMKKyAgICAgICAgdGVzdF9kbAorICAgICAgICB0ZXN0X2Vwb2xsCisgICAgICAgIHRlc3RfZ2RibQorICAgICAgICB0ZXN0X2xvY2FsZQorICAgICAgICB0ZXN0X25vcm1hbGl6YXRpb24KKyAgICAgICAgdGVzdF9vc3NhdWRpb2RldgorICAgICAgICB0ZXN0X3BlcDI3NworICAgICAgICB0ZXN0X3RjbAorICAgICAgICB0ZXN0X3RrCisgICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKKyAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKKyAgICAgICAgdGVzdF9tdWx0aXByb2Nlc3NpbmcKKyAgICAgICAgIiIiLAorICAgICduZXRic2QzJzoKKyAgICAgICAgIiIiCisgICAgICAgIHRlc3RfYXNjaWlfZm9ybWF0ZAorICAgICAgICB0ZXN0X2JzZGRiCisgICAgICAgIHRlc3RfYnNkZGIxODUKKyAgICAgICAgdGVzdF9ic2RkYjMKKyAgICAgICAgdGVzdF9jdHlwZXMKKyAgICAgICAgdGVzdF9jdXJzZXMKKyAgICAgICAgdGVzdF9kbAorICAgICAgICB0ZXN0X2Vwb2xsCisgICAgICAgIHRlc3RfZ2RibQorICAgICAgICB0ZXN0X2xvY2FsZQorICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2CisgICAgICAgIHRlc3RfcGVwMjc3CisgICAgICAgIHRlc3RfdGNsCisgICAgICAgIHRlc3RfdGsKKyAgICAgICAgdGVzdF90dGtfZ3Vpb25seQorICAgICAgICB0ZXN0X3R0a190ZXh0b25seQorICAgICAgICB0ZXN0X211bHRpcHJvY2Vzc2luZworICAgICAgICAiIiIsCit9CitfZXhwZWN0YXRpb25zWydmcmVlYnNkNSddID0gX2V4cGVjdGF0aW9uc1snZnJlZWJzZDQnXQorX2V4cGVjdGF0aW9uc1snZnJlZWJzZDYnXSA9IF9leHBlY3RhdGlvbnNbJ2ZyZWVic2Q0J10KK19leHBlY3RhdGlvbnNbJ2ZyZWVic2Q3J10gPSBfZXhwZWN0YXRpb25zWydmcmVlYnNkNCddCitfZXhwZWN0YXRpb25zWydmcmVlYnNkOCddID0gX2V4cGVjdGF0aW9uc1snZnJlZWJzZDQnXQorCitjbGFzcyBfRXhwZWN0ZWRTa2lwczoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGltcG9ydCBvcy5wYXRoCisgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF90aW1lb3V0CisKKyAgICAgICAgc2VsZi52YWxpZCA9IEZhbHNlCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiBfZXhwZWN0YXRpb25zOgorICAgICAgICAgICAgcyA9IF9leHBlY3RhdGlvbnNbc3lzLnBsYXRmb3JtXQorICAgICAgICAgICAgc2VsZi5leHBlY3RlZCA9IHNldChzLnNwbGl0KCkpCisKKyAgICAgICAgICAgICMgZXhwZWN0ZWQgdG8gYmUgc2tpcHBlZCBvbiBldmVyeSBwbGF0Zm9ybSwgZXZlbiBMaW51eAorICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfbGludXhhdWRpb2RldicpCisKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X3BlcDI3NycpCisKKyAgICAgICAgICAgIGlmIHRlc3RfdGltZW91dC5za2lwX2V4cGVjdGVkOgorICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X3RpbWVvdXQnKQorCisgICAgICAgICAgICBpZiBzeXMubWF4aW50ID09IDkyMjMzNzIwMzY4NTQ3NzU4MDdMOgorICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X2ltYWdlb3AnKQorCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gImRhcndpbiI6CisgICAgICAgICAgICAgICAgTUFDX09OTFkgPSBbInRlc3RfbWFjb3MiLCAidGVzdF9tYWNvc3Rvb2xzIiwgInRlc3RfYWVwYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9wbGlzdGxpYiIsICJ0ZXN0X3NjcmlwdHBhY2thZ2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9hcHBsZXNpbmdsZSJdCisgICAgICAgICAgICAgICAgZm9yIHNraXAgaW4gTUFDX09OTFk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKHNraXApCisgICAgICAgICAgICBlbGlmIGxlbih1J1wwJy5lbmNvZGUoJ3VuaWNvZGUtaW50ZXJuYWwnKSkgPT0gNDoKKyAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgidGVzdF9tYWNvc3Rvb2xzIikKKworCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIndpbjMyIjoKKyAgICAgICAgICAgICAgICAjIHRlc3Rfc3FsaXRlIGlzIG9ubHkgcmVsaWFibGUgb24gV2luZG93cyB3aGVyZSB0aGUgbGlicmFyeQorICAgICAgICAgICAgICAgICMgaXMgZGlzdHJpYnV0ZWQgd2l0aCBQeXRob24KKyAgICAgICAgICAgICAgICBXSU5fT05MWSA9IFsidGVzdF91bmljb2RlX2ZpbGUiLCAidGVzdF93aW5yZWciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3dpbnNvdW5kIiwgInRlc3Rfc3RhcnRmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9zcWxpdGUiLCAidGVzdF9tc2lsaWIiXQorICAgICAgICAgICAgICAgIGZvciBza2lwIGluIFdJTl9PTkxZOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZChza2lwKQorCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ2lyaXgnOgorICAgICAgICAgICAgICAgIElSSVhfT05MWSA9IFsidGVzdF9pbWFnZW9wIiwgInRlc3RfYWwiLCAidGVzdF9jZCIsICJ0ZXN0X2NsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RfZ2wiLCAidGVzdF9pbWdmaWxlIl0KKyAgICAgICAgICAgICAgICBmb3Igc2tpcCBpbiBJUklYX09OTFk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKHNraXApCisKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnc3Vub3M1JzoKKyAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9zdW5hdWRpb2RldicpCisgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfbmlzJykKKworICAgICAgICAgICAgaWYgbm90IHN5cy5weTNrd2FybmluZzoKKyAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9weTNrd2FybicpCisKKyAgICAgICAgICAgIHNlbGYudmFsaWQgPSBUcnVlCisKKyAgICBkZWYgaXN2YWxpZChzZWxmKToKKyAgICAgICAgIlJldHVybiB0cnVlIGlmZiBfRXhwZWN0ZWRTa2lwcyBrbm93cyBhYm91dCB0aGUgY3VycmVudCBwbGF0Zm9ybS4iCisgICAgICAgIHJldHVybiBzZWxmLnZhbGlkCisKKyAgICBkZWYgZ2V0ZXhwZWN0ZWQoc2VsZik6CisgICAgICAgICIiIlJldHVybiBzZXQgb2YgdGVzdCBuYW1lcyB3ZSBleHBlY3QgdG8gc2tpcCBvbiBjdXJyZW50IHBsYXRmb3JtLgorCisgICAgICAgIHNlbGYuaXN2YWxpZCgpIG11c3QgYmUgdHJ1ZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgYXNzZXJ0IHNlbGYuaXN2YWxpZCgpCisgICAgICAgIHJldHVybiBzZWxmLmV4cGVjdGVkCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgIyBmaW5kdGVzdGRpcigpIGdldHMgdGhlIGRpcm5hbWUgb3V0IG9mIF9fZmlsZV9fLCBzbyB3ZSBoYXZlIHRvIG1ha2UgaXQKKyAgICAjIGFic29sdXRlIGJlZm9yZSBjaGFuZ2luZyB0aGUgd29ya2luZyBkaXJlY3RvcnkuCisgICAgIyBGb3IgZXhhbXBsZSBfX2ZpbGVfXyBtYXkgYmUgcmVsYXRpdmUgd2hlbiBydW5uaW5nIHRyYWNlIG9yIHByb2ZpbGUuCisgICAgIyBTZWUgaXNzdWUgIzkzMjMuCisgICAgX19maWxlX18gPSBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pCisKKyAgICAjIHNhbml0eSBjaGVjaworICAgIGFzc2VydCBfX2ZpbGVfXyA9PSBvcy5wYXRoLmFic3BhdGgoc3lzLmFyZ3ZbMF0pCisKKyAgICAjIFdoZW4gdGVzdHMgYXJlIHJ1biBmcm9tIHRoZSBQeXRob24gYnVpbGQgZGlyZWN0b3J5LCBpdCBpcyBiZXN0IHByYWN0aWNlCisgICAgIyB0byBrZWVwIHRoZSB0ZXN0IGZpbGVzIGluIGEgc3ViZm9sZGVyLiAgSXQgZWFzZXMgdGhlIGNsZWFudXAgb2YgbGVmdG92ZXIKKyAgICAjIGZpbGVzIHVzaW5nIGNvbW1hbmQgIm1ha2UgZGlzdGNsZWFuIi4KKyAgICBpZiBzeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkKCk6CisgICAgICAgIFRFTVBESVIgPSBvcy5wYXRoLmFic3BhdGgoJ2J1aWxkJykKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKFRFTVBESVIpOgorICAgICAgICAgICAgb3MubWtkaXIoVEVNUERJUikKKworICAgICMgRGVmaW5lIGEgd3JpdGFibGUgdGVtcCBkaXIgdGhhdCB3aWxsIGJlIHVzZWQgYXMgY3dkIHdoaWxlIHJ1bm5pbmcKKyAgICAjIHRoZSB0ZXN0cy4gVGhlIG5hbWUgb2YgdGhlIGRpciBpbmNsdWRlcyB0aGUgcGlkIHRvIGFsbG93IHBhcmFsbGVsCisgICAgIyB0ZXN0aW5nIChzZWUgdGhlIC1qIG9wdGlvbikuCisgICAgVEVTVENXRCA9ICd0ZXN0X3B5dGhvbl97fScuZm9ybWF0KG9zLmdldHBpZCgpKQorCisgICAgVEVTVENXRCA9IG9zLnBhdGguam9pbihURU1QRElSLCBURVNUQ1dEKQorCisgICAgIyBSdW4gdGhlIHRlc3RzIGluIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgdGVtcG9yYXJ5IGNoYW5nZXMgdGhlIENXRCB0byBhCisgICAgIyB0ZW1wb3JhcnkgYW5kIHdyaXRhYmxlIGRpcmVjdG9yeS4gSWYgaXQncyBub3QgcG9zc2libGUgdG8gY3JlYXRlIG9yCisgICAgIyBjaGFuZ2UgdGhlIENXRCwgdGhlIG9yaWdpbmFsIENXRCB3aWxsIGJlIHVzZWQuIFRoZSBvcmlnaW5hbCBDV0QgaXMKKyAgICAjIGF2YWlsYWJsZSBmcm9tIHRlc3Rfc3VwcG9ydC5TQVZFRENXRC4KKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC50ZW1wX2N3ZChURVNUQ1dELCBxdWlldD1UcnVlKToKKyAgICAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvcmVsaW1wb3J0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3JlbGltcG9ydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGFhNDk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3JlbGltcG9ydC5weQpAQCAtMCwwICsxIEBACitmcm9tIC50ZXN0X2ltcG9ydCBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3JlcGVyZi5weSBiL2xpYi9weXRob24yLjcvdGVzdC9yZXBlcmYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhhYzQwZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9yZXBlcmYucHkKQEAgLTAsMCArMSwyMyBAQAoraW1wb3J0IHJlCitpbXBvcnQgdGltZQorCitkZWYgbWFpbigpOgorICAgIHMgPSAiXDEzaGVsbG9cMTQgXDEzd29ybGRcMTQgIiAqIDEwMDAKKyAgICBwID0gcmUuY29tcGlsZShyIihbXDEzXDE0XSkiKQorICAgIHRpbWVmdW5jKDEwLCBwLnN1YiwgIiIsIHMpCisgICAgdGltZWZ1bmMoMTAsIHAuc3BsaXQsIHMpCisgICAgdGltZWZ1bmMoMTAsIHAuZmluZGFsbCwgcykKKworZGVmIHRpbWVmdW5jKG4sIGZ1bmMsICphcmdzLCAqKmt3KToKKyAgICB0MCA9IHRpbWUuY2xvY2soKQorICAgIHRyeToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CisgICAgICAgICAgICByZXN1bHQgPSBmdW5jKCphcmdzLCAqKmt3KQorICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgZmluYWxseToKKyAgICAgICAgdDEgPSB0aW1lLmNsb2NrKCkKKyAgICAgICAgaWYgbiA+IDE6CisgICAgICAgICAgICBwcmludCBuLCAidGltZXMiLAorICAgICAgICBwcmludCBmdW5jLl9fbmFtZV9fLCAiJS4zZiIgJSAodDEtdDApLCAiQ1BVIHNlY29uZHMiCisKK21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3NhbXBsZV9kb2N0ZXN0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3NhbXBsZV9kb2N0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YWRlZTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3Qvc2FtcGxlX2RvY3Rlc3QucHkKQEAgLTAsMCArMSw3NiBAQAorIiIiVGhpcyBpcyBhIHNhbXBsZSBtb2R1bGUgdGhhdCBkb2Vzbid0IHJlYWxseSB0ZXN0IGFueXRoaW5nIGFsbCB0aGF0CisgICBpbnRlcmVzdGluZy4KKworSXQgc2ltcGx5IGhhcyBhIGZldyB0ZXN0cywgc29tZSBvZiB3aGljaCBzdWNjZWVkIGFuZCBzb21lIG9mIHdoaWNoIGZhaWwuCisKK0l0J3MgaW1wb3J0YW50IHRoYXQgdGhlIG51bWJlcnMgcmVtYWluIGNvbnN0YW50IGFzIGFub3RoZXIgdGVzdCBpcwordGVzdGluZyB0aGUgcnVubmluZyBvZiB0aGVzZSB0ZXN0cy4KKworCis+Pj4gMisyCis0CisiIiIKKworCitkZWYgZm9vKCk6CisgICAgIiIiCisKKyAgICA+Pj4gMisyCisgICAgNQorCisgICAgPj4+IDIrMgorICAgIDQKKyAgICAiIiIKKworZGVmIGJhcigpOgorICAgICIiIgorCisgICAgPj4+IDIrMgorICAgIDQKKyAgICAiIiIKKworZGVmIHRlc3Rfc2lsbHlfc2V0dXAoKToKKyAgICAiIiIKKworICAgID4+PiBpbXBvcnQgdGVzdC50ZXN0X2RvY3Rlc3QKKyAgICA+Pj4gdGVzdC50ZXN0X2RvY3Rlc3Quc2lsbHlTZXR1cAorICAgIFRydWUKKyAgICAiIiIKKworZGVmIHdfYmxhbmsoKToKKyAgICAiIiIKKyAgICA+Pj4gaWYgMToKKyAgICAuLi4gICAgcHJpbnQgJ2EnCisgICAgLi4uICAgIHByaW50CisgICAgLi4uICAgIHByaW50ICdiJworICAgIGEKKyAgICA8QkxBTktMSU5FPgorICAgIGIKKyAgICAiIiIKKworeCA9IDEKK2RlZiB4X2lzX29uZSgpOgorICAgICIiIgorICAgID4+PiB4CisgICAgMQorICAgICIiIgorCitkZWYgeV9pc19vbmUoKToKKyAgICAiIiIKKyAgICA+Pj4geQorICAgIDEKKyAgICAiIiIKKworX190ZXN0X18gPSB7J2dvb2QnOiAiIiIKKyAgICAgICAgICAgICAgICAgICAgPj4+IDQyCisgICAgICAgICAgICAgICAgICAgIDQyCisgICAgICAgICAgICAgICAgICAgICIiIiwKKyAgICAgICAgICAgICdiYWQnOiAgIiIiCisgICAgICAgICAgICAgICAgICAgID4+PiA0MgorICAgICAgICAgICAgICAgICAgICA2NjYKKyAgICAgICAgICAgICAgICAgICAgIiIiLAorICAgICAgICAgICB9CisKK2RlZiB0ZXN0X3N1aXRlKCk6CisgICAgaW1wb3J0IGRvY3Rlc3QKKyAgICByZXR1cm4gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3NhbXBsZV9kb2N0ZXN0X25vX2RvY3N0cmluZ3MucHkgYi9saWIvcHl0aG9uMi43L3Rlc3Qvc2FtcGxlX2RvY3Rlc3Rfbm9fZG9jc3RyaW5ncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDIwMWVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3NhbXBsZV9kb2N0ZXN0X25vX2RvY3N0cmluZ3MucHkKQEAgLTAsMCArMSwxMiBAQAorIyBUaGlzIGlzIGEgc2FtcGxlIG1vZHVsZSB1c2VkIGZvciB0ZXN0aW5nIGRvY3Rlc3QuCisjCisjIFRoaXMgbW9kdWxlIGlzIGZvciB0ZXN0aW5nIGhvdyBkb2N0ZXN0IGhhbmRsZXMgYSBtb2R1bGUgd2l0aCBubworIyBkb2NzdHJpbmdzLgorCisKK2NsYXNzIEZvbyhvYmplY3QpOgorCisgICAgIyBBIGNsYXNzIHdpdGggbm8gZG9jc3RyaW5nLgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3Qvc2FtcGxlX2RvY3Rlc3Rfbm9fZG9jdGVzdHMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3Qvc2FtcGxlX2RvY3Rlc3Rfbm9fZG9jdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RhYTU3MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9zYW1wbGVfZG9jdGVzdF9ub19kb2N0ZXN0cy5weQpAQCAtMCwwICsxLDE1IEBACisiIiJUaGlzIGlzIGEgc2FtcGxlIG1vZHVsZSB1c2VkIGZvciB0ZXN0aW5nIGRvY3Rlc3QuCisKK1RoaXMgbW9kdWxlIGlzIGZvciB0ZXN0aW5nIGhvdyBkb2N0ZXN0IGhhbmRsZXMgYSBtb2R1bGUgd2l0aCBkb2NzdHJpbmdzCitidXQgbm8gZG9jdGVzdCBleGFtcGxlcy4KKworIiIiCisKKworY2xhc3MgRm9vKG9iamVjdCk6CisgICAgIiIiQSBkb2NzdHJpbmcgd2l0aCBubyBkb2N0ZXN0IGV4YW1wbGVzLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9zY3JpcHRfaGVscGVyLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3NjcmlwdF9oZWxwZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y3YzcwZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9zY3JpcHRfaGVscGVyLnB5CkBAIC0wLDAgKzEsMTcwIEBACisjIENvbW1vbiB1dGlsaXR5IGZ1bmN0aW9ucyB1c2VkIGJ5IHZhcmlvdXMgc2NyaXB0IGV4ZWN1dGlvbiB0ZXN0cworIyAgZS5nLiB0ZXN0X2NtZF9saW5lLCB0ZXN0X2NtZF9saW5lX3NjcmlwdCBhbmQgdGVzdF9ydW5weQorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IG9zLnBhdGgKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBweV9jb21waWxlCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IHNodXRpbAordHJ5OgorICAgIGltcG9ydCB6aXBmaWxlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyBJZiBQeXRob24gaXMgYnVpbGQgd2l0aG91dCBVbmljb2RlIHN1cHBvcnQsIGltcG9ydGluZyBfaW8gd2lsbAorICAgICMgZmFpbCwgd2hpY2gsIGluIHR1cm4sIG1lYW5zIHRoYXQgemlwZmlsZSBjYW5ub3QgYmUgaW1wb3J0ZWQKKyAgICAjIE1vc3Qgb2YgdGhpcyBtb2R1bGUgY2FuIHRoZW4gc3RpbGwgYmUgdXNlZC4KKyAgICBwYXNzCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHN0cmlwX3B5dGhvbl9zdGRlcnIKKworIyBFeGVjdXRpbmcgdGhlIGludGVycHJldGVyIGluIGEgc3VicHJvY2VzcworZGVmIF9hc3NlcnRfcHl0aG9uKGV4cGVjdGVkX3N1Y2Nlc3MsICphcmdzLCAqKmVudl92YXJzKToKKyAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZV0KKyAgICBpZiBub3QgZW52X3ZhcnM6CisgICAgICAgIGNtZF9saW5lLmFwcGVuZCgnLUUnKQorICAgIGNtZF9saW5lLmV4dGVuZChhcmdzKQorICAgICMgTmVlZCB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQsIGZvciBpbi1wbGFjZSB0ZXN0aW5nIG9mCisgICAgIyBzaGFyZWQgbGlicmFyeSBidWlsZHMuCisgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICBlbnYudXBkYXRlKGVudl92YXJzKQorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZF9saW5lLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQorICAgIHRyeToKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBzdWJwcm9jZXNzLl9jbGVhbnVwKCkKKyAgICAgICAgcC5zdGRvdXQuY2xvc2UoKQorICAgICAgICBwLnN0ZGVyci5jbG9zZSgpCisgICAgcmMgPSBwLnJldHVybmNvZGUKKyAgICBlcnIgPSAgc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCisgICAgaWYgKHJjIGFuZCBleHBlY3RlZF9zdWNjZXNzKSBvciAobm90IHJjIGFuZCBub3QgZXhwZWN0ZWRfc3VjY2Vzcyk6CisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAorICAgICAgICAgICAgIlByb2Nlc3MgcmV0dXJuIGNvZGUgaXMgJWQsICIKKyAgICAgICAgICAgICJzdGRlcnIgZm9sbG93czpcbiVzIiAlIChyYywgZXJyLmRlY29kZSgnYXNjaWknLCAnaWdub3JlJykpKQorICAgIHJldHVybiByYywgb3V0LCBlcnIKKworZGVmIGFzc2VydF9weXRob25fb2soKmFyZ3MsICoqZW52X3ZhcnMpOgorICAgICIiIgorICAgIEFzc2VydCB0aGF0IHJ1bm5pbmcgdGhlIGludGVycHJldGVyIHdpdGggYGFyZ3NgIGFuZCBvcHRpb25hbCBlbnZpcm9ubWVudAorICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIGlzIG9rIGFuZCByZXR1cm4gYSAocmV0dXJuIGNvZGUsIHN0ZG91dCwgc3RkZXJyKSB0dXBsZS4KKyAgICAiIiIKKyAgICByZXR1cm4gX2Fzc2VydF9weXRob24oVHJ1ZSwgKmFyZ3MsICoqZW52X3ZhcnMpCisKK2RlZiBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoKmFyZ3MsICoqZW52X3ZhcnMpOgorICAgICIiIgorICAgIEFzc2VydCB0aGF0IHJ1bm5pbmcgdGhlIGludGVycHJldGVyIHdpdGggYGFyZ3NgIGFuZCBvcHRpb25hbCBlbnZpcm9ubWVudAorICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIGZhaWxzIGFuZCByZXR1cm4gYSAocmV0dXJuIGNvZGUsIHN0ZG91dCwgc3RkZXJyKSB0dXBsZS4KKyAgICAiIiIKKyAgICByZXR1cm4gX2Fzc2VydF9weXRob24oRmFsc2UsICphcmdzLCAqKmVudl92YXJzKQorCitkZWYgcHl0aG9uX2V4aXRfY29kZSgqYXJncyk6CisgICAgY21kX2xpbmUgPSBbc3lzLmV4ZWN1dGFibGUsICctRSddCisgICAgY21kX2xpbmUuZXh0ZW5kKGFyZ3MpCisgICAgd2l0aCBvcGVuKG9zLmRldm51bGwsICd3JykgYXMgZGV2bnVsbDoKKyAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2FsbChjbWRfbGluZSwgc3Rkb3V0PWRldm51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKworZGVmIHNwYXduX3B5dGhvbigqYXJncywgKiprd2FyZ3MpOgorICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlLCAnLUUnXQorICAgIGNtZF9saW5lLmV4dGVuZChhcmdzKQorICAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKGNtZF9saW5lLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorCitkZWYga2lsbF9weXRob24ocCk6CisgICAgcC5zdGRpbi5jbG9zZSgpCisgICAgZGF0YSA9IHAuc3Rkb3V0LnJlYWQoKQorICAgIHAuc3Rkb3V0LmNsb3NlKCkKKyAgICAjIHRyeSB0byBjbGVhbnVwIHRoZSBjaGlsZCBzbyB3ZSBkb24ndCBhcHBlYXIgdG8gbGVhayB3aGVuIHJ1bm5pbmcKKyAgICAjIHdpdGggcmVncnRlc3QgLVIuCisgICAgcC53YWl0KCkKKyAgICBzdWJwcm9jZXNzLl9jbGVhbnVwKCkKKyAgICByZXR1cm4gZGF0YQorCitkZWYgcnVuX3B5dGhvbigqYXJncywgKiprd2FyZ3MpOgorICAgIGlmIF9fZGVidWdfXzoKKyAgICAgICAgcCA9IHNwYXduX3B5dGhvbigqYXJncywgKiprd2FyZ3MpCisgICAgZWxzZToKKyAgICAgICAgcCA9IHNwYXduX3B5dGhvbignLU8nLCAqYXJncywgKiprd2FyZ3MpCisgICAgc3Rkb3V0X2RhdGEgPSBraWxsX3B5dGhvbihwKQorICAgIHJldHVybiBwLndhaXQoKSwgc3Rkb3V0X2RhdGEKKworIyBTY3JpcHQgY3JlYXRpb24gdXRpbGl0aWVzCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHRlbXBfZGlyKCk6CisgICAgZGlybmFtZSA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgIGRpcm5hbWUgPSBvcy5wYXRoLnJlYWxwYXRoKGRpcm5hbWUpCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBkaXJuYW1lCisgICAgZmluYWxseToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShkaXJuYW1lKQorCitkZWYgbWFrZV9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UpOgorICAgIHNjcmlwdF9maWxlbmFtZSA9IHNjcmlwdF9iYXNlbmFtZStvcy5leHRzZXArJ3B5JworICAgIHNjcmlwdF9uYW1lID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsIHNjcmlwdF9maWxlbmFtZSkKKyAgICBzY3JpcHRfZmlsZSA9IG9wZW4oc2NyaXB0X25hbWUsICd3JykKKyAgICBzY3JpcHRfZmlsZS53cml0ZShzb3VyY2UpCisgICAgc2NyaXB0X2ZpbGUuY2xvc2UoKQorICAgIHJldHVybiBzY3JpcHRfbmFtZQorCitkZWYgY29tcGlsZV9zY3JpcHQoc2NyaXB0X25hbWUpOgorICAgIHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQorICAgIGlmIF9fZGVidWdfXzoKKyAgICAgICAgY29tcGlsZWRfbmFtZSA9IHNjcmlwdF9uYW1lICsgJ2MnCisgICAgZWxzZToKKyAgICAgICAgY29tcGlsZWRfbmFtZSA9IHNjcmlwdF9uYW1lICsgJ28nCisgICAgcmV0dXJuIGNvbXBpbGVkX25hbWUKKworZGVmIG1ha2VfemlwX3NjcmlwdCh6aXBfZGlyLCB6aXBfYmFzZW5hbWUsIHNjcmlwdF9uYW1lLCBuYW1lX2luX3ppcD1Ob25lKToKKyAgICB6aXBfZmlsZW5hbWUgPSB6aXBfYmFzZW5hbWUrb3MuZXh0c2VwKyd6aXAnCisgICAgemlwX25hbWUgPSBvcy5wYXRoLmpvaW4oemlwX2RpciwgemlwX2ZpbGVuYW1lKQorICAgIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxlKHppcF9uYW1lLCAndycpCisgICAgaWYgbmFtZV9pbl96aXAgaXMgTm9uZToKKyAgICAgICAgbmFtZV9pbl96aXAgPSBvcy5wYXRoLmJhc2VuYW1lKHNjcmlwdF9uYW1lKQorICAgIHppcF9maWxlLndyaXRlKHNjcmlwdF9uYW1lLCBuYW1lX2luX3ppcCkKKyAgICB6aXBfZmlsZS5jbG9zZSgpCisgICAgI2lmIHRlc3QudGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgIyAgICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZSh6aXBfbmFtZSwgJ3InKQorICAgICMgICAgcHJpbnQgJ0NvbnRlbnRzIG9mICVyOicgJSB6aXBfbmFtZQorICAgICMgICAgemlwX2ZpbGUucHJpbnRkaXIoKQorICAgICMgICAgemlwX2ZpbGUuY2xvc2UoKQorICAgIHJldHVybiB6aXBfbmFtZSwgb3MucGF0aC5qb2luKHppcF9uYW1lLCBuYW1lX2luX3ppcCkKKworZGVmIG1ha2VfcGtnKHBrZ19kaXIpOgorICAgIG9zLm1rZGlyKHBrZ19kaXIpCisgICAgbWFrZV9zY3JpcHQocGtnX2RpciwgJ19faW5pdF9fJywgJycpCisKK2RlZiBtYWtlX3ppcF9wa2coemlwX2RpciwgemlwX2Jhc2VuYW1lLCBwa2dfbmFtZSwgc2NyaXB0X2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICBzb3VyY2UsIGRlcHRoPTEsIGNvbXBpbGVkPUZhbHNlKToKKyAgICB1bmxpbmsgPSBbXQorICAgIGluaXRfbmFtZSA9IG1ha2Vfc2NyaXB0KHppcF9kaXIsICdfX2luaXRfXycsICcnKQorICAgIHVubGluay5hcHBlbmQoaW5pdF9uYW1lKQorICAgIGluaXRfYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGluaXRfbmFtZSkKKyAgICBzY3JpcHRfbmFtZSA9IG1ha2Vfc2NyaXB0KHppcF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlKQorICAgIHVubGluay5hcHBlbmQoc2NyaXB0X25hbWUpCisgICAgaWYgY29tcGlsZWQ6CisgICAgICAgIGluaXRfbmFtZSA9IGNvbXBpbGVfc2NyaXB0KGluaXRfbmFtZSkKKyAgICAgICAgc2NyaXB0X25hbWUgPSBjb21waWxlX3NjcmlwdChzY3JpcHRfbmFtZSkKKyAgICAgICAgdW5saW5rLmV4dGVuZCgoaW5pdF9uYW1lLCBzY3JpcHRfbmFtZSkpCisgICAgcGtnX25hbWVzID0gW29zLnNlcC5qb2luKFtwa2dfbmFtZV0qaSkgZm9yIGkgaW4gcmFuZ2UoMSwgZGVwdGgrMSldCisgICAgc2NyaXB0X25hbWVfaW5femlwID0gb3MucGF0aC5qb2luKHBrZ19uYW1lc1stMV0sIG9zLnBhdGguYmFzZW5hbWUoc2NyaXB0X25hbWUpKQorICAgIHppcF9maWxlbmFtZSA9IHppcF9iYXNlbmFtZStvcy5leHRzZXArJ3ppcCcKKyAgICB6aXBfbmFtZSA9IG9zLnBhdGguam9pbih6aXBfZGlyLCB6aXBfZmlsZW5hbWUpCisgICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoemlwX25hbWUsICd3JykKKyAgICBmb3IgbmFtZSBpbiBwa2dfbmFtZXM6CisgICAgICAgIGluaXRfbmFtZV9pbl96aXAgPSBvcy5wYXRoLmpvaW4obmFtZSwgaW5pdF9iYXNlbmFtZSkKKyAgICAgICAgemlwX2ZpbGUud3JpdGUoaW5pdF9uYW1lLCBpbml0X25hbWVfaW5femlwKQorICAgIHppcF9maWxlLndyaXRlKHNjcmlwdF9uYW1lLCBzY3JpcHRfbmFtZV9pbl96aXApCisgICAgemlwX2ZpbGUuY2xvc2UoKQorICAgIGZvciBuYW1lIGluIHVubGluazoKKyAgICAgICAgb3MudW5saW5rKG5hbWUpCisgICAgI2lmIHRlc3QudGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgIyAgICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZSh6aXBfbmFtZSwgJ3InKQorICAgICMgICAgcHJpbnQgJ0NvbnRlbnRzIG9mICVyOicgJSB6aXBfbmFtZQorICAgICMgICAgemlwX2ZpbGUucHJpbnRkaXIoKQorICAgICMgICAgemlwX2ZpbGUuY2xvc2UoKQorICAgIHJldHVybiB6aXBfbmFtZSwgb3MucGF0aC5qb2luKHppcF9uYW1lLCBzY3JpcHRfbmFtZV9pbl96aXApCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3Qvc2VxX3Rlc3RzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3NlcV90ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWU0ZTBlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3NlcV90ZXN0cy5weQpAQCAtMCwwICsxLDM5MiBAQAorIiIiCitUZXN0cyBjb21tb24gdG8gdHVwbGUsIGxpc3QgYW5kIFVzZXJMaXN0LlVzZXJMaXN0CisiIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCisKKyMgVmFyaW91cyBpdGVyYWJsZXMKKyMgVGhpcyBpcyB1c2VkIGZvciBjaGVja2luZyB0aGUgY29uc3RydWN0b3IgKGhlcmUgYW5kIGluIHRlc3RfZGVxdWUucHkpCitkZWYgaXRlcmZ1bmMoc2Vxbik6CisgICAgJ1JlZ3VsYXIgZ2VuZXJhdG9yJworICAgIGZvciBpIGluIHNlcW46CisgICAgICAgIHlpZWxkIGkKKworY2xhc3MgU2VxdWVuY2U6CisgICAgJ1NlcXVlbmNlIHVzaW5nIF9fZ2V0aXRlbV9fJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VxbltpXQorCitjbGFzcyBJdGVyRnVuYzoKKyAgICAnU2VxdWVuY2UgdXNpbmcgaXRlcmF0b3IgcHJvdG9jb2wnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgICAgIHNlbGYuaSA9IDAKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaSA+PSBsZW4oc2VsZi5zZXFuKTogcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICB2ID0gc2VsZi5zZXFuW3NlbGYuaV0KKyAgICAgICAgc2VsZi5pICs9IDEKKyAgICAgICAgcmV0dXJuIHYKKworY2xhc3MgSXRlckdlbjoKKyAgICAnU2VxdWVuY2UgdXNpbmcgaXRlcmF0b3IgcHJvdG9jb2wgZGVmaW5lZCB3aXRoIGEgZ2VuZXJhdG9yJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBmb3IgdmFsIGluIHNlbGYuc2VxbjoKKyAgICAgICAgICAgIHlpZWxkIHZhbAorCitjbGFzcyBJdGVyTmV4dE9ubHk6CisgICAgJ01pc3NpbmcgX19nZXRpdGVtX18gYW5kIF9faXRlcl9fJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaSA+PSBsZW4oc2VsZi5zZXFuKTogcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICB2ID0gc2VsZi5zZXFuW3NlbGYuaV0KKyAgICAgICAgc2VsZi5pICs9IDEKKyAgICAgICAgcmV0dXJuIHYKKworY2xhc3MgSXRlck5vTmV4dDoKKyAgICAnSXRlcmF0b3IgbWlzc2luZyBuZXh0KCknCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgICAgIHNlbGYuaSA9IDAKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKK2NsYXNzIEl0ZXJHZW5FeGM6CisgICAgJ1Rlc3QgcHJvcGFnYXRpb24gb2YgZXhjZXB0aW9ucycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgMyAvLyAwCisKK2NsYXNzIEl0ZXJGdW5jU3RvcDoKKyAgICAnVGVzdCBpbW1lZGlhdGUgc3RvcCcKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHBhc3MKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKworZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluLCBpbWFwCitkZWYgaXRlcm11bHRpKHNlcW4pOgorICAgICdUZXN0IG11bHRpcGxlIHRpZXJzIG9mIGl0ZXJhdG9ycycKKyAgICByZXR1cm4gY2hhaW4oaW1hcChsYW1iZGEgeDp4LCBpdGVyZnVuYyhJdGVyR2VuKFNlcXVlbmNlKHNlcW4pKSkpKQorCitjbGFzcyBDb21tb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoZSB0eXBlIHRvIGJlIHRlc3RlZAorICAgIHR5cGUydGVzdCA9IE5vbmUKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9ycyhzZWxmKToKKyAgICAgICAgbDAgPSBbXQorICAgICAgICBsMSA9IFswXQorICAgICAgICBsMiA9IFswLCAxXQorCisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdCgpCisgICAgICAgIHUwID0gc2VsZi50eXBlMnRlc3QobDApCisgICAgICAgIHUxID0gc2VsZi50eXBlMnRlc3QobDEpCisgICAgICAgIHUyID0gc2VsZi50eXBlMnRlc3QobDIpCisKKyAgICAgICAgdXUgPSBzZWxmLnR5cGUydGVzdCh1KQorICAgICAgICB1dTAgPSBzZWxmLnR5cGUydGVzdCh1MCkKKyAgICAgICAgdXUxID0gc2VsZi50eXBlMnRlc3QodTEpCisgICAgICAgIHV1MiA9IHNlbGYudHlwZTJ0ZXN0KHUyKQorCisgICAgICAgIHYgPSBzZWxmLnR5cGUydGVzdCh0dXBsZSh1KSkKKyAgICAgICAgY2xhc3MgT3RoZXJTZXE6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaW5pdHNlcSk6CisgICAgICAgICAgICAgICAgc2VsZi5fX2RhdGEgPSBpbml0c2VxCisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYuX19kYXRhKQorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fZGF0YVtpXQorICAgICAgICBzID0gT3RoZXJTZXEodTApCisgICAgICAgIHYwID0gc2VsZi50eXBlMnRlc3QocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odjApLCBsZW4ocykpCisKKyAgICAgICAgcyA9ICJ0aGlzIGlzIGFsc28gYSBzZXF1ZW5jZSIKKyAgICAgICAgdnYgPSBzZWxmLnR5cGUydGVzdChzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2diksIGxlbihzKSkKKworICAgICAgICAjIENyZWF0ZSBmcm9tIHZhcmlvdXMgaXRlcmF0YWJsZXMKKyAgICAgICAgZm9yIHMgaW4gKCIxMjMiLCAiIiwgcmFuZ2UoMTAwMCksICgnZG8nLCAxLjIpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgIGZvciBnIGluIChTZXF1ZW5jZSwgSXRlckZ1bmMsIEl0ZXJHZW4sCisgICAgICAgICAgICAgICAgICAgICAgaXRlcm11bHRpLCBpdGVyZnVuYyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChnKHMpKSwgc2VsZi50eXBlMnRlc3QocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KEl0ZXJGdW5jU3RvcChzKSksIHNlbGYudHlwZTJ0ZXN0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGMgZm9yIGMgaW4gIjEyMyIpLCBzZWxmLnR5cGUydGVzdCgiMTIzIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBJdGVyTmV4dE9ubHkocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBJdGVyTm9OZXh0KHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBJdGVyR2VuRXhjKHMpKQorCisgICAgZGVmIHRlc3RfdHJ1dGgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi50eXBlMnRlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudHlwZTJ0ZXN0KFs0Ml0pKQorCisgICAgZGVmIHRlc3RfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAyLCAzLCA0XSkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbih1KSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbaV0sIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbbG9uZyhpKV0sIGkpCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgtbGVuKHUpLCAtMSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbaV0sIGxlbih1KStpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1W2xvbmcoaSldLCBsZW4odSkraSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdS5fX2dldGl0ZW1fXywgLWxlbih1KS0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCB1Ll9fZ2V0aXRlbV9fLCBsZW4odSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUuX19nZXRpdGVtX18sIHNsaWNlKDAsMTAsMCkpCisKKyAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdS5fX2dldGl0ZW1fXywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdS5fX2dldGl0ZW1fXywgLTEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1Ll9fZ2V0aXRlbV9fKQorCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMTAsIDExXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzBdLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzFdLCAxMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWy0yXSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVstMV0sIDExKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhLl9fZ2V0aXRlbV9fLCAtMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYS5fX2dldGl0ZW1fXywgMykKKworICAgIGRlZiB0ZXN0X2dldHNsaWNlKHNlbGYpOgorICAgICAgICBsID0gWzAsIDEsIDIsIDMsIDRdCisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVswOjBdLCBzZWxmLnR5cGUydGVzdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbMToyXSwgc2VsZi50eXBlMnRlc3QoWzFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Wy0yOi0xXSwgc2VsZi50eXBlMnRlc3QoWzNdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Wy0xMDAwOjEwMDBdLCB1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbMTAwMDotMTAwMF0sIHNlbGYudHlwZTJ0ZXN0KFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1WzpdLCB1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbMTpOb25lXSwgc2VsZi50eXBlMnRlc3QoWzEsIDIsIDMsIDRdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1W05vbmU6M10sIHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAyXSkpCisKKyAgICAgICAgIyBFeHRlbmRlZCBzbGljZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Wzo6XSwgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Wzo6Ml0sIHNlbGYudHlwZTJ0ZXN0KFswLCAyLCA0XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVsxOjoyXSwgc2VsZi50eXBlMnRlc3QoWzEsIDNdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Wzo6LTFdLCBzZWxmLnR5cGUydGVzdChbNCwgMywgMiwgMSwgMF0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbOjotMl0sIHNlbGYudHlwZTJ0ZXN0KFs0LCAyLCAwXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVszOjotMl0sIHNlbGYudHlwZTJ0ZXN0KFszLCAxXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVszOjM6LTJdLCBzZWxmLnR5cGUydGVzdChbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVszOjI6LTJdLCBzZWxmLnR5cGUydGVzdChbM10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbMzoxOi0yXSwgc2VsZi50eXBlMnRlc3QoWzNdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1WzM6MDotMl0sIHNlbGYudHlwZTJ0ZXN0KFszLCAxXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVs6Oi0xMDBdLCBzZWxmLnR5cGUydGVzdChbNF0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbMTAwOi0xMDA6XSwgc2VsZi50eXBlMnRlc3QoW10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbLTEwMDoxMDA6XSwgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1WzEwMDotMTAwOi0xXSwgdVs6Oi0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Wy0xMDA6MTAwOi0xXSwgc2VsZi50eXBlMnRlc3QoW10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbLTEwMEw6MTAwTDoyTF0sIHNlbGYudHlwZTJ0ZXN0KFswLCAyLCA0XSkpCisKKyAgICAgICAgIyBUZXN0IGV4dHJlbWUgY2FzZXMgd2l0aCBsb25nIGludHMKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLDEsMiwzLDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbIC1wb3coMiwxMjhMKTogMyBdLCBzZWxmLnR5cGUydGVzdChbMCwxLDJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWyAzOiBwb3coMiwxNDVMKSBdLCBzZWxmLnR5cGUydGVzdChbMyw0XSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1Ll9fZ2V0c2xpY2VfXykKKworICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgorICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoWzAsIDEsIDJdKQorICAgICAgICBmb3IgaSBpbiB1OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCB1KQorICAgICAgICBmb3IgaSBpbiBtaW4odSktMSwgbWF4KHUpKzE6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGksIHUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1Ll9fY29udGFpbnNfXykKKworICAgIGRlZiB0ZXN0X2NvbnRhaW5zX2Zha2Uoc2VsZik6CisgICAgICAgIGNsYXNzIEFsbEVxOgorICAgICAgICAgICAgIyBTZXF1ZW5jZXMgbXVzdCB1c2UgcmljaCBjb21wYXJpc29uIGFnYWluc3QgZWFjaCBpdGVtCisgICAgICAgICAgICAjICh1bmxlc3MgImlzIiBpcyB0cnVlLCBvciBhbiBlYXJsaWVyIGl0ZW0gYW5zd2VyZWQpCisgICAgICAgICAgICAjIFNvIGluc3RhbmNlcyBvZiBBbGxFcSBtdXN0IGJlIGZvdW5kIGluIGFsbCBub24tZW1wdHkgc2VxdWVuY2VzLgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZSAjIENhbid0IG1lZXQgaGFzaCBpbnZhcmlhbnQgcmVxdWlyZW1lbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oQWxsRXEoKSwgc2VsZi50eXBlMnRlc3QoW10pKQorICAgICAgICBzZWxmLmFzc2VydEluKEFsbEVxKCksIHNlbGYudHlwZTJ0ZXN0KFsxXSkpCisKKyAgICBkZWYgdGVzdF9jb250YWluc19vcmRlcihzZWxmKToKKyAgICAgICAgIyBTZXF1ZW5jZXMgbXVzdCB0ZXN0IGluLW9yZGVyLiAgSWYgYSByaWNoIGNvbXBhcmlzb24gaGFzIHNpZGUKKyAgICAgICAgIyBlZmZlY3RzLCB0aGVzZSB3aWxsIGJlIHZpc2libGUgdG8gdGVzdHMgYWdhaW5zdCBsYXRlciBtZW1iZXJzLgorICAgICAgICAjIEluIHRoaXMgdGVzdCwgdGhlICJzaWRlIGVmZmVjdCIgaXMgYSBzaG9ydC1jaXJjdWl0aW5nIHJhaXNlLgorICAgICAgICBjbGFzcyBEb05vdFRlc3RFcShFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBTdG9wQ29tcGFyZXM6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByYWlzZSBEb05vdFRlc3RFcQorCisgICAgICAgIGNoZWNrZmlyc3QgPSBzZWxmLnR5cGUydGVzdChbMSwgU3RvcENvbXBhcmVzKCldKQorICAgICAgICBzZWxmLmFzc2VydEluKDEsIGNoZWNrZmlyc3QpCisgICAgICAgIGNoZWNrbGFzdCA9IHNlbGYudHlwZTJ0ZXN0KFtTdG9wQ29tcGFyZXMoKSwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERvTm90VGVzdEVxLCBjaGVja2xhc3QuX19jb250YWluc19fLCAxKQorCisgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnR5cGUydGVzdCgpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi50eXBlMnRlc3QoW10pKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi50eXBlMnRlc3QoWzBdKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAyXSkpLCAzKQorCisgICAgZGVmIHRlc3RfbWlubWF4KHNlbGYpOgorICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoWzAsIDEsIDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbih1KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgodSksIDIpCisKKyAgICBkZWYgdGVzdF9hZGRtdWwoc2VsZik6CisgICAgICAgIHUxID0gc2VsZi50eXBlMnRlc3QoWzBdKQorICAgICAgICB1MiA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1MSwgdTEgKyBzZWxmLnR5cGUydGVzdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUxLCBzZWxmLnR5cGUydGVzdCgpICsgdTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTEgKyBzZWxmLnR5cGUydGVzdChbMV0pLCB1MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChbLTFdKSArIHUxLCBzZWxmLnR5cGUydGVzdChbLTEsIDBdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdCgpLCB1MiowKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KCksIDAqdTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoKSwgdTIqMEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoKSwgMEwqdTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIsIHUyKjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIsIDEqdTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIsIHUyKjFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyLCAxTCp1MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Mit1MiwgdTIqMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Mit1MiwgMip1MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Mit1MiwgdTIqMkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIrdTIsIDJMKnUyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyK3UyK3UyLCB1MiozKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyK3UyK3UyLCAzKnUyKQorCisgICAgICAgIGNsYXNzIHN1YmNsYXNzKHNlbGYudHlwZTJ0ZXN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdTMgPSBzdWJjbGFzcyhbMCwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTMsIHUzKjEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QodTMsIHUzKjEpCisKKyAgICBkZWYgdGVzdF9pYWRkKHNlbGYpOgorICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoWzAsIDFdKQorICAgICAgICB1ICs9IHNlbGYudHlwZTJ0ZXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBzZWxmLnR5cGUydGVzdChbMCwgMV0pKQorICAgICAgICB1ICs9IHNlbGYudHlwZTJ0ZXN0KFsyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBzZWxmLnR5cGUydGVzdChbMCwgMSwgMiwgM10pKQorICAgICAgICB1ICs9IHNlbGYudHlwZTJ0ZXN0KFs0LCA1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBzZWxmLnR5cGUydGVzdChbMCwgMSwgMiwgMywgNCwgNV0pKQorCisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdCgic3BhbSIpCisgICAgICAgIHUgKz0gc2VsZi50eXBlMnRlc3QoImVnZ3MiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIHNlbGYudHlwZTJ0ZXN0KCJzcGFtZWdncyIpKQorCisgICAgZGVmIHRlc3RfaW11bChzZWxmKToKKyAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgdSAqPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgc2VsZi50eXBlMnRlc3QoWzAsIDEsIDAsIDEsIDAsIDFdKSkKKworICAgIGRlZiB0ZXN0X2dldGl0ZW1vdmVyd3JpdGVpdGVyKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IF9fZ2V0aXRlbV9fIG92ZXJyaWRlcyBhcmUgbm90IHJlY29nbml6ZWQgYnkgX19pdGVyX18KKyAgICAgICAgY2xhc3MgVChzZWxmLnR5cGUydGVzdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyKGtleSkgKyAnISEhJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZXIoVCgoMSwyKSkpLm5leHQoKSwgMSkKKworICAgIGRlZiB0ZXN0X3JlcGVhdChzZWxmKToKKyAgICAgICAgZm9yIG0gaW4geHJhbmdlKDQpOgorICAgICAgICAgICAgcyA9IHR1cGxlKHJhbmdlKG0pKQorICAgICAgICAgICAgZm9yIG4gaW4geHJhbmdlKC0zLCA1KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KHMqbiksIHNlbGYudHlwZTJ0ZXN0KHMpKm4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KHMpKigtNCksIHNlbGYudHlwZTJ0ZXN0KFtdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQocyksIGlkKHMqMSkpCisKKyAgICBkZWYgdGVzdF9iaWdyZXBlYXQoc2VsZik6CisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgaWYgc3lzLm1heGludCA8PSAyMTQ3NDgzNjQ3OgorICAgICAgICAgICAgeCA9IHNlbGYudHlwZTJ0ZXN0KFswXSkKKyAgICAgICAgICAgIHggKj0gMioqMTYKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE1lbW9yeUVycm9yLCB4Ll9fbXVsX18sIDIqKjE2KQorICAgICAgICAgICAgaWYgaGFzYXR0cih4LCAnX19pbXVsX18nKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhNZW1vcnlFcnJvciwgeC5fX2ltdWxfXywgMioqMTYpCisKKyAgICBkZWYgdGVzdF9zdWJzY3JpcHQoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChbMTAsIDExXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZ2V0aXRlbV9fKDBMKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2dldGl0ZW1fXygxTCksIDExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19nZXRpdGVtX18oLTJMKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2dldGl0ZW1fXygtMUwpLCAxMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYS5fX2dldGl0ZW1fXywgLTMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGEuX19nZXRpdGVtX18sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2dldGl0ZW1fXyhzbGljZSgwLDEpKSwgc2VsZi50eXBlMnRlc3QoWzEwXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2dldGl0ZW1fXyhzbGljZSgxLDIpKSwgc2VsZi50eXBlMnRlc3QoWzExXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2dldGl0ZW1fXyhzbGljZSgwLDIpKSwgc2VsZi50eXBlMnRlc3QoWzEwLCAxMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19nZXRpdGVtX18oc2xpY2UoMCwzKSksIHNlbGYudHlwZTJ0ZXN0KFsxMCwgMTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZ2V0aXRlbV9fKHNsaWNlKDMsNSkpLCBzZWxmLnR5cGUydGVzdChbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuX19nZXRpdGVtX18sIHNsaWNlKDAsIDEwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fZ2V0aXRlbV9fLCAneCcpCisKKyAgICBkZWYgdGVzdF9jb3VudChzZWxmKToKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAyXSkqMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuY291bnQoMCksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5jb3VudCgxKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmNvdW50KDMpLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5jb3VudCkKKworICAgICAgICBjbGFzcyBCYWRFeGMoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBCYWRDbXA6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBvdGhlciA9PSAyOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBCYWRFeGMoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJhZEV4YywgYS5jb3VudCwgQmFkQ21wKCkpCisKKyAgICBkZWYgdGVzdF9pbmRleChzZWxmKToKKyAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmluZGV4KDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuaW5kZXgoMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUuaW5kZXgsIDIpCisKKyAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KFstMiwgLTEsIDAsIDAsIDEsIDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuY291bnQoMCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5pbmRleCgwKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmluZGV4KDAsIDIpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuaW5kZXgoLTIsIC0xMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5pbmRleCgwLCAzKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmluZGV4KDAsIDMsIDQpLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1LmluZGV4LCAyLCAwLCAtMTApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1LmluZGV4KQorCisgICAgICAgIGNsYXNzIEJhZEV4YyhFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEJhZENtcDoKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIG90aGVyID09IDI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJhZEV4YygpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgYSA9IHNlbGYudHlwZTJ0ZXN0KFswLCAxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQmFkRXhjLCBhLmluZGV4LCBCYWRDbXAoKSkKKworICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoWy0yLCAtMSwgMCwgMCwgMSwgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5pbmRleCgwKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmluZGV4KDAsIDIpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuaW5kZXgoMCwgLTQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuaW5kZXgoLTIsIC0xMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5pbmRleCgwLCAzKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmluZGV4KDAsIC0zKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmluZGV4KDAsIDMsIDQpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuaW5kZXgoMCwgLTMsIC0yKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmluZGV4KDAsIC00KnN5cy5tYXhpbnQsIDQqc3lzLm1heGludCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuaW5kZXgsIDAsIDQqc3lzLm1heGludCwtNCpzeXMubWF4aW50KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLmluZGV4LCAyLCAwLCAtMTApCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3Qvc2dtbF9pbnB1dC5odG1sIGIvbGliL3B5dGhvbjIuNy90ZXN0L3NnbWxfaW5wdXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGQyZTZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3NnbWxfaW5wdXQuaHRtbApAQCAtMCwwICsxLDIxMiBAQAorPGh0bWw+CisgPGhlYWQ+CisgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vb2dhbWUxODIuZGUvZXBpY2JsdWUvZm9ybWF0ZS5jc3MiPgorICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9ImpzL2Zsb3R0ZW4uanMiPjwvc2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgICA8c2NyaXB0IGxhbmd1YWdlPUphdmFTY3JpcHQ+IGlmIChwYXJlbnQuZnJhbWVzLmxlbmd0aCA9PSAwKSB7IHRvcC5sb2NhdGlvbi5ocmVmID0gImh0dHA6Ly9lcy5vZ2FtZS5vcmcvIjsgfSA8L3NjcmlwdD4gPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+CitmdW5jdGlvbiBoYWhhKHoxKSB7CisgIGV2YWwoImxvY2F0aW9uPSciK3oxLm9wdGlvbnNbejEuc2VsZWN0ZWRJbmRleF0udmFsdWUrIiciKTsKK30KKzwvc2NyaXB0PgorPGNlbnRlcj4KKzx0YWJsZT4KKyA8dHI+CisgIDx0ZD48L3RkPgorICA8dGQ+CisgICA8Y2VudGVyPgorICAgPHRhYmxlPgorICAgIDx0cj4KKyAgICAgPHRkPjxpbWcgc3JjPSJodHRwOi8vb2dhbWUxODIuZGUvZXBpY2JsdWUvcGxhbmV0ZW4vc21hbGwvc19kc2NoanVuZ2VscGxhbmV0MDQuanBnIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPjwvdGQ+CisgICAgIDx0ZD4KKyAgICAgIDx0YWJsZSBib3JkZXI9IjEiPgorICAgICAgIDxzZWxlY3Qgc2l6ZT0iMSIgb25jaGFuZ2U9ImhhaGEodGhpcykiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIvZ2FtZS9mbG90dGVuMS5waHA/c2Vzc2lvbj04OTEyYWU5MTJmZWMmY3A9MzM4NzUzNDEmbW9kZT1GbG90dGUmZ2lkPSZtZXNzYWdlemllbD0mcmU9MCIgc2VsZWN0ZWQ+QWxpZW4gc2V4IGZyaWVuZCAgICBbMjoyNTA6Nl08L29wdGlvbj4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ii9nYW1lL2Zsb3R0ZW4xLnBocD9zZXNzaW9uPTg5MTJhZTkxMmZlYyZjcD0zMzkwNTEwMCZtb2RlPUZsb3R0ZSZnaWQ9Jm1lc3NhZ2V6aWVsPSZyZT0wIiA+MTk4OSAgICBbMjoyNDg6MTRdPC9vcHRpb24+IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIvZ2FtZS9mbG90dGVuMS5waHA/c2Vzc2lvbj04OTEyYWU5MTJmZWMmY3A9MzQ1NzA4MDgmbW9kZT1GbG90dGUmZ2lkPSZtZXNzYWdlemllbD0mcmU9MCIgPjE5OTAgICAgWzI6MjQ4OjZdPC9vcHRpb24+IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIvZ2FtZS9mbG90dGVuMS5waHA/c2Vzc2lvbj04OTEyYWU5MTJmZWMmY3A9MzQ1NzA4NTgmbW9kZT1GbG90dGUmZ2lkPSZtZXNzYWdlemllbD0mcmU9MCIgPjE5OTEgICAgWzI6MjU0OjZdPC9vcHRpb24+IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIvZ2FtZS9mbG90dGVuMS5waHA/c2Vzc2lvbj04OTEyYWU5MTJmZWMmY3A9MzQ1NzI5MjkmbW9kZT1GbG90dGUmZ2lkPSZtZXNzYWdlemllbD0mcmU9MCIgPkNvbG9uaWEgICAgWzI6MjUzOjEyXTwvb3B0aW9uPiAKKyAgICAgICAgICAgICAgIDwvc2VsZWN0PgorICAgICAgPC90YWJsZT4KKyAgICAgPC90ZD4KKyAgICA8L3RyPgorICA8L3RhYmxlPgorICA8L2NlbnRlcj4KKyAgPC90ZD4KKyAgPHRkPgorICAgPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+CisgICAgPHRyPgorICAgICA8dGQgYWxpZ249ImNlbnRlciI+PC90ZD4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4NSI+CisgICAgICA8aW1nIGJvcmRlcj0iMCIgc3JjPSJodHRwOi8vb2dhbWUxODIuZGUvZXBpY2JsdWUvaW1hZ2VzL21ldGFsbC5naWYiIHdpZHRoPSI0MiIgaGVpZ2h0PSIyMiI+CisgICAgIDwvdGQ+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iODUiPgorICAgICAgPGltZyBib3JkZXI9IjAiIHNyYz0iaHR0cDovL29nYW1lMTgyLmRlL2VwaWNibHVlL2ltYWdlcy9rcmlzdGFsbC5naWYiIHdpZHRoPSI0MiIgaGVpZ2h0PSIyMiI+CisgICAgIDwvdGQ+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iODUiPgorICAgICAgPGltZyBib3JkZXI9IjAiIHNyYz0iaHR0cDovL29nYW1lMTgyLmRlL2VwaWNibHVlL2ltYWdlcy9kZXV0ZXJpdW0uZ2lmIiB3aWR0aD0iNDIiIGhlaWdodD0iMjIiPgorICAgICA8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij4KKyAgICAgIDxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHA6Ly9vZ2FtZTE4Mi5kZS9lcGljYmx1ZS9pbWFnZXMvZW5lcmdpZS5naWYiIHdpZHRoPSI0MiIgaGVpZ2h0PSIyMiI+CisgICAgIDwvdGQ+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj48L3RkPgorICAgIDwvdHI+CisgICAgPHRyPgorICAgICA8dGQgYWxpZ249ImNlbnRlciI+PGk+PGI+Jm5ic3A7Jm5ic3A7PC9iPjwvaT48L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij48aT48Yj48Zm9udCBjb2xvcj0iI2ZmZmZmZiI+TWV0YWw8L2ZvbnQ+PC9iPjwvaT48L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij48aT48Yj48Zm9udCBjb2xvcj0iI2ZmZmZmZiI+Q3Jpc3RhbDwvZm9udD48L2I+PC9pPjwvdGQ+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iODUiPjxpPjxiPjxmb250IGNvbG9yPSIjZmZmZmZmIj5EZXV0ZXJpbzwvZm9udD48L2I+PC9pPjwvdGQ+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iODUiPjxpPjxiPjxmb250IGNvbG9yPSIjZmZmZmZmIj5FbmVyZ+1hPC9mb250PjwvYj48L2k+PC90ZD4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiPjxpPjxiPiZuYnNwOyZuYnNwOzwvYj48L2k+PC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiPjwvdGQ+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iODUiPjE2MC42MzY8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij4zLjQwNjwvdGQ+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iODUiPjM5LjIzMDwvdGQ+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iODUiPjxmb250IGNvbG9yPSNmZjAwMDA+LTgwPC9mb250Pi8zLjk2NTwvdGQ+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj48L3RkPgorICAgIDwvdHI+CisgICA8L3RhYmxlPgorICA8L3RyPgorIDwvdGFibGU+CisgIDwvY2VudGVyPgorPGJyIC8+CisgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgorICA8IS0tCisgICAgIGZ1bmN0aW9uIGxpbmtfdG9fZ2FtZXBheSgpIHsKKyAgICBzZWxmLmxvY2F0aW9uID0gImh0dHBzOi8vd3d3LmdhbWVwYXkuZGUvP2xhbmc9ZXMmc2VydmVySUQ9OCZ1c2VySUQ9MTI5MzYwJmdhbWVJRD1vZ2FtZSZndWk9djImY2hrc3VtPWE5NzUxYWZhOWUzN2U2YjFiODI2MzU2YmNjYTQ1Njc1IjsKKyAgfQorLy8tLT4KKyAgPC9zY3JpcHQ+Cis8Y2VudGVyPgorICA8dGFibGUgd2lkdGg9IjUxOSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjEiPgorICAgPHRyIGhlaWdodD0iMjAiPgorICA8dGQgY29sc3Bhbj0iOCIgY2xhc3M9ImMiPkZsb3RhcyAobWF4LiA5KTwvdGQ+CisgICA8L3RyPgorICAgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoPk51bS48L3RoPgorICAgIDx0aD5NaXNp8248L3RoPgorICAgIDx0aD5DYW50aWRhZDwvdGg+CisgICAgPHRoPkNvbWllbnpvPC90aD4KKyAgICA8dGg+U2FsaWRhPC90aD4KKyAgICA8dGg+T2JqZXRpdm88L3RoPgorICAgIDx0aD5MbGVnYWRhPC90aD4KKyAgICA8dGg+T3JkZW48L3RoPiAgIAorICAgPC90cj4KKyAgICAgPHRyIGhlaWdodD0iMjAiPgorICAgIDx0aD4xPC90aD4KKyAgICA8dGg+ICAKKyAgICAgIDxhIHRpdGxlPSIiPkVzcGlvbmFqZTwvYT4KKyAgICAgIDxhIHRpdGxlPSJGbG90YSBlbiBlbCBwbGFuZXRhIj4oRik8L2E+CisgICAgPC90aD4KKyAgICA8dGg+IDxhIHRpdGxlPSJTb25kYSBkZSBlc3Bpb25hamU6IDMgCisiPjM8L2E+PC90aD4KKyAgICA8dGg+WzI6MjUwOjZdPC90aD4KKyAgICA8dGg+V2VkIEF1ZyA5IDE4OjAwOjAyPC90aD4KKyAgICA8dGg+WzI6MjQyOjVdPC90aD4KKyAgICA8dGg+V2VkIEF1ZyA5IDE4OjAxOjAyPC90aD4KKyAgICA8dGg+CisgICAgICAgICA8Zm9ybSBhY3Rpb249ImZsb3R0ZW4xLnBocD9zZXNzaW9uPTg5MTJhZTkxMmZlYyIgbWV0aG9kPSJQT1NUIj4KKwk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJvcmRlcl9yZXR1cm4iIHZhbHVlPSIyNTA1NDQ5MCIgLz4KKyAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudmlhciBkZSByZWdyZXNvIiAvPgorICAgICA8L2Zvcm0+CisgICAgICAgICAgICA8L3RoPgorICAgPC90cj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgICA8dGg+MjwvdGg+CisgICAgPHRoPiAgCisgICAgICA8YSB0aXRsZT0iIj5Fc3Bpb25hamU8L2E+CisgICAgICA8YSB0aXRsZT0iVm9sdmVyIGFsIHBsYW5ldGEiPihWKTwvYT4KKyAgICA8L3RoPgorICAgIDx0aD4gPGEgdGl0bGU9IlNvbmRhIGRlIGVzcGlvbmFqZTogMyAKKyI+MzwvYT48L3RoPgorICAgIDx0aD5bMjoyNTA6Nl08L3RoPgorICAgIDx0aD5XZWQgQXVnIDkgMTc6NTk6NTU8L3RoPgorICAgIDx0aD5bMjoyNDI6MV08L3RoPgorICAgIDx0aD5XZWQgQXVnIDkgMTg6MDE6NTU8L3RoPgorICAgIDx0aD4KKyAgICAgICAgICAgIDwvdGg+CisgICA8L3RyPgorICA8L3RhYmxlPgorCisKKyAgCis8Zm9ybSBhY3Rpb249ImZsb3R0ZW4yLnBocD9zZXNzaW9uPTg5MTJhZTkxMmZlYyIgbWV0aG9kPSJQT1NUIj4KKyAgPHRhYmxlIHdpZHRoPSI1MTkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIxIj4KKyAgICAgICA8dHIgaGVpZ2h0PSIyMCI+CisgIDx0ZCBjb2xzcGFuPSI0IiBjbGFzcz0iYyI+TnVldmEgbWlzafNuOiBlbGVnaXIgbmF2ZXM8L3RkPgorICAgPC90cj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgPHRoPk5hdmVzPC90aD4KKyAgPHRoPkRpc3BvbmlibGVzPC90aD4KKzwhLS0gICAgPHRoPkdlc2NoLjwvdGg+IC0tPgorICAgIDx0aD4tPC90aD4KKyAgICA8dGg+LTwvdGg+CisgICA8L3RyPgorICAgPHRyIGhlaWdodD0iMjAiPgorICAgIDx0aD48YSB0aXRsZT0iVmVsb2NpZGFkOiA4NTAwIj5OYXZlIHBlcXVl8WEgZGUgY2FyZ2E8L2E+PC90aD4gCisgICAgPHRoPjEwPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibWF4c2hpcDIwMiIgdmFsdWU9IjEwIi8+PC90aD4KKzwhLS0gICAgPHRoPjg1MDAgLS0+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNvbnN1bXB0aW9uMjAyIiB2YWx1ZT0iMTAiLz4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3BlZWQyMDIiIHZhbHVlPSI4NTAwIiAvPjwvdGg+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNhcGFjaXR5MjAyIiB2YWx1ZT0iNTAwMCIgLz48L3RoPgorICAgICA8dGg+PGEgaHJlZj0iamF2YXNjcmlwdDptYXhTaGlwKCdzaGlwMjAyJyk7IiA+beF4PC9hPiA8L3RoPgorICAgICA8dGg+PGlucHV0IG5hbWU9InNoaXAyMDIiIHNpemU9IjEwIiB2YWx1ZT0iMCIgYWx0PSJOYXZlIHBlcXVl8WEgZGUgY2FyZ2EgMTAiLz48L3RoPgorICAgPC90cj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgICA8dGg+PGEgdGl0bGU9IlZlbG9jaWRhZDogMTI3NTAiPk5hdmUgZ3JhbmRlIGRlIGNhcmdhPC9hPjwvdGg+IAorICAgIDx0aD4xOTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1heHNoaXAyMDMiIHZhbHVlPSIxOSIvPjwvdGg+Cis8IS0tICAgIDx0aD4xMjc1MCAtLT4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY29uc3VtcHRpb24yMDMiIHZhbHVlPSI1MCIvPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcGVlZDIwMyIgdmFsdWU9IjEyNzUwIiAvPjwvdGg+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNhcGFjaXR5MjAzIiB2YWx1ZT0iMjUwMDAiIC8+PC90aD4KKyAgICAgPHRoPjxhIGhyZWY9ImphdmFzY3JpcHQ6bWF4U2hpcCgnc2hpcDIwMycpOyIgPm3heDwvYT4gPC90aD4KKyAgICAgPHRoPjxpbnB1dCBuYW1lPSJzaGlwMjAzIiBzaXplPSIxMCIgdmFsdWU9IjAiIGFsdD0iTmF2ZSBncmFuZGUgZGUgY2FyZ2EgMTkiLz48L3RoPgorICAgPC90cj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgICA8dGg+PGEgdGl0bGU9IlZlbG9jaWRhZDogMjcwMDAiPkNydWNlcm88L2E+PC90aD4gCisgICAgPHRoPjY8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJtYXhzaGlwMjA2IiB2YWx1ZT0iNiIvPjwvdGg+Cis8IS0tICAgIDx0aD4yNzAwMCAtLT4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY29uc3VtcHRpb24yMDYiIHZhbHVlPSIzMDAiLz4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3BlZWQyMDYiIHZhbHVlPSIyNzAwMCIgLz48L3RoPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjYXBhY2l0eTIwNiIgdmFsdWU9IjgwMCIgLz48L3RoPgorICAgICA8dGg+PGEgaHJlZj0iamF2YXNjcmlwdDptYXhTaGlwKCdzaGlwMjA2Jyk7IiA+beF4PC9hPiA8L3RoPgorICAgICA8dGg+PGlucHV0IG5hbWU9InNoaXAyMDYiIHNpemU9IjEwIiB2YWx1ZT0iMCIgYWx0PSJDcnVjZXJvIDYiLz48L3RoPgorICAgPC90cj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgICA8dGg+PGEgdGl0bGU9IlZlbG9jaWRhZDogMzQwMCI+UmVjaWNsYWRvcjwvYT48L3RoPiAKKyAgICA8dGg+MTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1heHNoaXAyMDkiIHZhbHVlPSIxIi8+PC90aD4KKzwhLS0gICAgPHRoPjM0MDAgLS0+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNvbnN1bXB0aW9uMjA5IiB2YWx1ZT0iMzAwIi8+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNwZWVkMjA5IiB2YWx1ZT0iMzQwMCIgLz48L3RoPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjYXBhY2l0eTIwOSIgdmFsdWU9IjIwMDAwIiAvPjwvdGg+CisgICAgIDx0aD48YSBocmVmPSJqYXZhc2NyaXB0Om1heFNoaXAoJ3NoaXAyMDknKTsiID5t4Xg8L2E+IDwvdGg+CisgICAgIDx0aD48aW5wdXQgbmFtZT0ic2hpcDIwOSIgc2l6ZT0iMTAiIHZhbHVlPSIwIiBhbHQ9IlJlY2ljbGFkb3IgMSIvPjwvdGg+CisgICA8L3RyPgorICAgPHRyIGhlaWdodD0iMjAiPgorICAgIDx0aD48YSB0aXRsZT0iVmVsb2NpZGFkOiAxNzAwMDAwMDAiPlNvbmRhIGRlIGVzcGlvbmFqZTwvYT48L3RoPiAKKyAgICA8dGg+MTM5PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibWF4c2hpcDIxMCIgdmFsdWU9IjEzOSIvPjwvdGg+Cis8IS0tICAgIDx0aD4xNzAwMDAwMDAgLS0+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNvbnN1bXB0aW9uMjEwIiB2YWx1ZT0iMSIvPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcGVlZDIxMCIgdmFsdWU9IjE3MDAwMDAwMCIgLz48L3RoPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjYXBhY2l0eTIxMCIgdmFsdWU9IjUiIC8+PC90aD4KKyAgICAgPHRoPjxhIGhyZWY9ImphdmFzY3JpcHQ6bWF4U2hpcCgnc2hpcDIxMCcpOyIgPm3heDwvYT4gPC90aD4KKyAgICAgPHRoPjxpbnB1dCBuYW1lPSJzaGlwMjEwIiBzaXplPSIxMCIgdmFsdWU9IjAiIGFsdD0iU29uZGEgZGUgZXNwaW9uYWplIDEzOSIvPjwvdGg+CisgICA8L3RyPgorICAgPHRyIGhlaWdodD0iMjAiPgorICA8dGggY29sc3Bhbj0iMiI+PGEgaHJlZj0iamF2YXNjcmlwdDpub1NoaXBzKCk7IiA+TmluZ3VuYSBuYXZlPC9hPjwvdGg+CisgIDx0aCBjb2xzcGFuPSIyIj48YSBocmVmPSJqYXZhc2NyaXB0Om1heFNoaXBzKCk7IiA+VG9kYXMgbGFzIG5hdmVzPC9hPjwvdGg+CisgICA8L3RyPgorICAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgICA8dGggY29sc3Bhbj0iNCI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNvbnRpbnVhciIgLz48L3RoPgorICAgPC90cj4KKzx0cj48dGggY29sc3Bhbj00PgorPGlmcmFtZSBpZD0nYTQ0ZmI1MjInIG5hbWU9J2E0NGZiNTIyJyBzcmM9J2h0dHA6Ly9hZHMuZ2FtZWZvcmdlYWRzLmRlL2FkZnJhbWUucGhwP249YTQ0ZmI1MjImYW1wO3doYXQ9em9uZTo1NzgnIGZyYW1lc3BhY2luZz0nMCcgZnJhbWVib3JkZXI9J25vJyBzY3JvbGxpbmc9J25vJyB3aWR0aD0nNDY4JyBoZWlnaHQ9JzYwJz48L2lmcmFtZT4KKzxicj48Y2VudGVyPjwvY2VudGVyPjwvYnI+Cis8L3RoPjwvdHI+Cis8L2Zvcm0+Cis8L3RhYmxlPgorIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9zaGEyNTYucGVtIGIvbGliL3B5dGhvbjIuNy90ZXN0L3NoYTI1Ni5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3NTU3NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9zaGEyNTYucGVtCkBAIC0wLDAgKzEsMTI4IEBACisjIENlcnRpZmljYXRlIGNoYWluIGZvciBodHRwczovL3NoYTI1Ni50YnMtaW50ZXJuZXQuY29tCisgMCBzOi9DPUZSL3Bvc3RhbENvZGU9MTQwMDAvU1Q9Q2FsdmFkb3MvTD1DQUVOL3N0cmVldD0yMiBydWUgZGUgQnJldGFnbmUvTz1UQlMgSU5URVJORVQvT1U9MDAwMiA0NDA0NDM4MTAvT1U9Q2VydGlmaWNhdHMgVEJTIFg1MDkvQ049ZWNvbS50YnMteDUwOS5jb20KKyAgIGk6L0M9RlIvU1Q9Q2FsdmFkb3MvTD1DYWVuL089VEJTIElOVEVSTkVUL09VPVRlcm1zIGFuZCBDb25kaXRpb25zOiBodHRwOi8vd3d3LnRicy1pbnRlcm5ldC5jb20vQ0EvcmVwb3NpdG9yeS9PVT1UQlMgSU5URVJORVQgQ0EvQ049VEJTIFg1MDkgQ0EgYnVzaW5lc3MKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJR1RqQ0NCVGFnQXdJQkFnSVFPaDNkOWRORFBxMWNTZEptRWlNcHFEQU5CZ2txaGtpRzl3MEJBUVVGQURDQgoreVRFTE1Ba0dBMVVFQmhNQ1JsSXhFVEFQQmdOVkJBZ1RDRU5oYkhaaFpHOXpNUTB3Q3dZRFZRUUhFd1JEWVdWdQorTVJVd0V3WURWUVFLRXd4VVFsTWdTVTVVUlZKT1JWUXhTREJHQmdOVkJBc1RQMVJsY20xeklHRnVaQ0JEYjI1aworYVhScGIyNXpPaUJvZEhSd09pOHZkM2QzTG5SaWN5MXBiblJsY201bGRDNWpiMjB2UTBFdmNtVndiM05wZEc5eQorZVRFWU1CWUdBMVVFQ3hNUFZFSlRJRWxPVkVWU1RrVlVJRU5CTVIwd0d3WURWUVFERXhSVVFsTWdXRFV3T1NCRAorUVNCaWRYTnBibVZ6Y3pBZUZ3MHhNVEF4TWpVd01EQXdNREJhRncweE16QXlNRFV5TXpVNU5UbGFNSUhITVFzdworQ1FZRFZRUUdFd0pHVWpFT01Bd0dBMVVFRVJNRk1UUXdNREF4RVRBUEJnTlZCQWdUQ0VOaGJIWmhaRzl6TVEwdworQ3dZRFZRUUhFd1JEUVVWT01Sc3dHUVlEVlFRSkV4SXlNaUJ5ZFdVZ1pHVWdRbkpsZEdGbmJtVXhGVEFUQmdOVgorQkFvVERGUkNVeUJKVGxSRlVrNUZWREVYTUJVR0ExVUVDeE1PTURBd01pQTBOREEwTkRNNE1UQXhIVEFiQmdOVgorQkFzVEZFTmxjblJwWm1sallYUnpJRlJDVXlCWU5UQTVNUm93R0FZRFZRUURFeEZsWTI5dExuUmljeTE0TlRBNQorTG1OdmJUQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUtScmxIVW5KKysxbHBjZworanRZY283Y2RtUmUrRUVmVG13UGZDZGZWM0cxUWZzVFN2WTZGZk1wbS84M3BxSGZUKzRBTndyMTh3RDlackFFTgorRzE2bWY5VmRDR0sxMitUUDdEbXFlWnlHSXFsRkZvYWhRbm1iOEVhcnZFNDMvMVVlUTJDVjlYbXp3WnZwcWVsaQorTGZYc0ZvbmF3clkzSDZabk13UzY0U3Q2MVorOWdkeXVaL1Jic29aQmJUNUtVakRFRzg0NFFSVTRPVDFJR2VFSQorZVk1Tk01Uk5JaDZaTmhWdHFlZUN4TVM3YWZPTmtIUXJPY283M1JkU1RSY2svSGo5Nk9mbDNNSE5IcnlyK0FNSworREdGazFrTENaR3BQZFh0a3hYdmFEZVFvaVlEbGlsMjZDV2MrWUs2eHlEUE1kc1d2b0cxNFpMeUNwek1YQTcvNworNFlBUVJIMENBd0VBQWFPQ0FqQXdnZ0lzTUI4R0ExVWRJd1FZTUJhQUZCb0pCTXo1Q1krN0hxRE8xS1FVZjB2VgorSTFqTk1CMEdBMVVkRGdRV0JCUWdPVThIc1d6Ym1ENFdaUDVXdGR3N2pjYTJXREFPQmdOVkhROEJBZjhFQkFNQworQmFBd0RBWURWUjBUQVFIL0JBSXdBREFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJdworVEFZRFZSMGdCRVV3UXpCQkJnc3JCZ0VFQVlEbE53SUJBVEF5TURBR0NDc0dBUVVGQndJQkZpUm9kSFJ3Y3pvdgorTDNkM2R5NTBZbk10YVc1MFpYSnVaWFF1WTI5dEwwTkJMME5RVXpFd2R3WURWUjBmQkhBd2JqQTNvRFdnTTRZeAorYUhSMGNEb3ZMMk55YkM1MFluTXRhVzUwWlhKdVpYUXVZMjl0TDFSQ1UxZzFNRGxEUVdKMWMybHVaWE56TG1OeQorYkRBem9ER2dMNFl0YUhSMGNEb3ZMMk55YkM1MFluTXRlRFV3T1M1amIyMHZWRUpUV0RVd09VTkJZblZ6YVc1bAorYzNNdVkzSnNNSUd3QmdnckJnRUZCUWNCQVFTQm96Q0JvREE5QmdnckJnRUZCUWN3QW9ZeGFIUjBjRG92TDJOeQorZEM1MFluTXRhVzUwWlhKdVpYUXVZMjl0TDFSQ1UxZzFNRGxEUVdKMWMybHVaWE56TG1OeWREQTVCZ2dyQmdFRgorQlFjd0FvWXRhSFIwY0RvdkwyTnlkQzUwWW5NdGVEVXdPUzVqYjIwdlZFSlRXRFV3T1VOQlluVnphVzVsYzNNdQorWTNKME1DUUdDQ3NHQVFVRkJ6QUJoaGhvZEhSd09pOHZiMk56Y0M1MFluTXRlRFV3T1M1amIyMHdNd1lEVlIwUgorQkN3d0tvSVJaV052YlM1MFluTXRlRFV3T1M1amIyMkNGWGQzZHk1bFkyOXRMblJpY3kxNE5UQTVMbU52YlRBTgorQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBclQ0TkhmYlk4N2JHQXc4bFBWNERtSGxtdUR1VnAveTdsdE8zWW5zZQorM1J6OFJ4VzJBenVPME95MkYwQ3U0eVdLdE15RXlNWHlIcVd0YWU3RWxSYmRUdTV3NUd3VkJMSkhDbEN6QzhTOQorU3BnTU1RVHgzUmduOHZqa0h1VTlWWlFsdWxaeWlQSzd5dW5qYzdjMzEwUzlGUlo3WHhPd2Y4Tm54NFduQitObworV3JmQXB6aGhRbDMxdytSeXJOeFplNThoQ2ZEREhtZXZSdndMalE3ODVab1FYSkRqMmozcUFENGFJMnlCOGxCNQorb2FFMWpsQ0p6QzdLbXovWTlqemZtdi96QXMxTFFUbTlrdGV2djRCVFVGYUdqdjlqeG5RMXhuUzg2Mlppb3VMVworelpZSWxZUGY0RjZKalhHaUlRZ1FSZ2xJTFVmcTNmdEpkOS9vazlXOVpGOGg4dz09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCisgMSBzOi9DPUZSL1NUPUNhbHZhZG9zL0w9Q2Flbi9PPVRCUyBJTlRFUk5FVC9PVT1UZXJtcyBhbmQgQ29uZGl0aW9uczogaHR0cDovL3d3dy50YnMtaW50ZXJuZXQuY29tL0NBL3JlcG9zaXRvcnkvT1U9VEJTIElOVEVSTkVUIENBL0NOPVRCUyBYNTA5IENBIGJ1c2luZXNzCisgICBpOi9DPVNFL089QWRkVHJ1c3QgQUIvT1U9QWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsvQ049QWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9vdAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlGUHpDQ0JDZWdBd0lCQWdJUURsQnovKytpUlNtTERlVlJIVC9oQURBTkJna3Foa2lHOXcwQkFRVUZBREJ2CitNUXN3Q1FZRFZRUUdFd0pUUlRFVU1CSUdBMVVFQ2hNTFFXUmtWSEoxYzNRZ1FVSXhKakFrQmdOVkJBc1RIVUZrCitaRlJ5ZFhOMElFVjRkR1Z5Ym1Gc0lGUlVVQ0JPWlhSM2IzSnJNU0l3SUFZRFZRUURFeGxCWkdSVWNuVnpkQ0JGCitlSFJsY201aGJDQkRRU0JTYjI5ME1CNFhEVEExTVRJd01UQXdNREF3TUZvWERURTVNRGN3T1RFNE1Ua3lNbG93CitnY2t4Q3pBSkJnTlZCQVlUQWtaU01SRXdEd1lEVlFRSUV3aERZV3gyWVdSdmN6RU5NQXNHQTFVRUJ4TUVRMkZsCitiakVWTUJNR0ExVUVDaE1NVkVKVElFbE9WRVZTVGtWVU1VZ3dSZ1lEVlFRTEV6OVVaWEp0Y3lCaGJtUWdRMjl1CitaR2wwYVc5dWN6b2dhSFIwY0RvdkwzZDNkeTUwWW5NdGFXNTBaWEp1WlhRdVkyOXRMME5CTDNKbGNHOXphWFJ2Citjbmt4R0RBV0JnTlZCQXNURDFSQ1V5QkpUbFJGVWs1RlZDQkRRVEVkTUJzR0ExVUVBeE1VVkVKVElGZzFNRGtnCitRMEVnWW5WemFXNWxjM013Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRREIxUEFVCitxdWRDY3ozdG15R2NmK3U2RWtacW9uS0tIclY0Z1pZYnZWa0lSb2ptbWxoZmkvand2cEh2bzhicVN0LzlSajVTCitqaENEVzBwY2JJK0lQUHREMUp5K0NITlNmbk1xVkR5NkNLUTNwNW1hVHpDTUc2WlQrWGpudmNORDV2K0Z0YWlCCit4azFpQ1g2dXZ0MGplVXRkWnZZYnl5dHNTREU2YzNZNS8vd1J4T0Y4dE0xSnhpYndPM3B5RVIyNmpiYk4yZ1F6CittL0VrZEdqTGRKNHN2UGsyM1dEQXZRNkcwL3oyTGNBYUpCK1hMZnFSd2ZRcEhRdmZLYTF1VGk4UGl2QzhxdGlwCitybU5RTU1QTWp4U0syYXpYOGNLampUREppVUthQ2I0VkhsSkRXS0VzQ0ZScGdKQW9BdVg4ZjdZZnMxTTRlc0dvCitzV2IzUEdzcEszTzIydUlsQWdNQkFBR2pnZ0Y2TUlJQmRqQWRCZ05WSFE0RUZnUVVHZ2tFelBrSmo3c2VvTTdVCitwQlIvUzlValdNMHdEZ1lEVlIwUEFRSC9CQVFEQWdFR01CSUdBMVVkRXdFQi93UUlNQVlCQWY4Q0FRQXdHQVlECitWUjBnQkJFd0R6QU5CZ3NyQmdFRUFZRGxOd0lCQVRCN0JnTlZIUjhFZERCeU1EaWdOcUEwaGpKb2RIUndPaTh2CitZM0pzTG1OdmJXOWtiMk5oTG1OdmJTOUJaR1JVY25WemRFVjRkR1Z5Ym1Gc1EwRlNiMjkwTG1OeWJEQTJvRFNnCitNb1l3YUhSMGNEb3ZMMk55YkM1amIyMXZaRzh1Ym1WMEwwRmtaRlJ5ZFhOMFJYaDBaWEp1WVd4RFFWSnZiM1F1CitZM0pzTUlHR0JnZ3JCZ0VGQlFjQkFRUjZNSGd3T3dZSUt3WUJCUVVITUFLR0wyaDBkSEE2THk5amNuUXVZMjl0CitiMlJ2WTJFdVkyOXRMMEZrWkZSeWRYTjBWVlJPVTJWeWRtVnlRMEV1WTNKME1Ea0dDQ3NHQVFVRkJ6QUNoaTFvCitkSFJ3T2k4dlkzSjBMbU52Ylc5a2J5NXVaWFF2UVdSa1ZISjFjM1JWVkU1VFpYSjJaWEpEUVM1amNuUXdFUVlKCitZSVpJQVliNFFnRUJCQVFEQWdJRU1BMEdDU3FHU0liM0RRRUJCUVVBQTRJQkFRQTdtcXJNZ2svTXJFNlFuYk5BCitoNG5SQ24ydGk0Ymc0dzJDM2xCNmJTdlJQbll3dU53OUpiOHZ1S2tORnpSRHhOSlhxVkRaZGZGVzVDVlFKdXlkCituZkF4ODMrd2src3B6dkZhRTFLaEZZZk45RzlwUWZYVWZ2RFJvSWNKZ1BFS1VYTDF3UmlPRytJalUzVlZJOHBnCitJZ3FIa3I3eWxsbjVpNXpDaUZBUHVJSm1ZVVNGZy9neEg1eGtDTmNqSnFxckhySGF0SnI2UXJya2U5M2pvdXB3CitvVTFuamZBY1p0WXA2ZmJpSzZ1MmIxcEpxd2tWQkU4UnNmTG5QaFJqK1NGYnB2anY4T2Q3by9pZUpoRklZUU5VCitrMmpYMnU4cVpuQWlOdzkzTFpXOWxwWWp0dXZNWHE4UVFwcEVOTmphNWI1M3E3VXdJK2xVN1pHalo3cXV1RVNwCitKNi81CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCisgMiBzOi9DPVNFL089QWRkVHJ1c3QgQUIvT1U9QWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsvQ049QWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9vdAorICAgaTovQz1VUy9TVD1VVC9MPVNhbHQgTGFrZSBDaXR5L089VGhlIFVTRVJUUlVTVCBOZXR3b3JrL09VPWh0dHA6Ly93d3cudXNlcnRydXN0LmNvbS9DTj1VVE4tVVNFUkZpcnN0LUhhcmR3YXJlCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUVUekNDQXplZ0F3SUJBZ0lRSE01RVlwVVplcDFqVXZueUk2bTJtREFOQmdrcWhraUc5dzBCQVFVRkFEQ0IKK2x6RUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdUQWxWVU1SY3dGUVlEVlFRSEV3NVRZV3gwSUV4aGEyVWcKK1EybDBlVEVlTUJ3R0ExVUVDaE1WVkdobElGVlRSVkpVVWxWVFZDQk9aWFIzYjNKck1TRXdId1lEVlFRTEV4aG8KK2RIUndPaTh2ZDNkM0xuVnpaWEowY25WemRDNWpiMjB4SHpBZEJnTlZCQU1URmxWVVRpMVZVMFZTUm1seWMzUXQKK1NHRnlaSGRoY21Vd0hoY05NRFV3TmpBM01EZ3dPVEV3V2hjTk1Ua3dOekE1TVRneE9USXlXakJ2TVFzd0NRWUQKK1ZRUUdFd0pUUlRFVU1CSUdBMVVFQ2hNTFFXUmtWSEoxYzNRZ1FVSXhKakFrQmdOVkJBc1RIVUZrWkZSeWRYTjAKK0lFVjRkR1Z5Ym1Gc0lGUlVVQ0JPWlhSM2IzSnJNU0l3SUFZRFZRUURFeGxCWkdSVWNuVnpkQ0JGZUhSbGNtNWgKK2JDQkRRU0JTYjI5ME1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdC9jYU0rYnkKK0FBUXRPZUJPVyswZnZHd1B6Ylg2STdiTzNwc1JNNWVrS1V4OWs1KzlTcnlUN1FNYTQ0L1A1VzFRV3RhWEtaUmEKK2dMQkpldHN1bGYyNHlyODNPQzBlUHBGQnJYQld4L0JQUCtneW5uVEt5SkJVNmNaZkQzaWRta0E4RHF4aHFsNFUKK2o1NkhvV3BRM05lYVRxOEZzNlp4bEp4eHMxQmdDc2NUblRnSGhnS282YWhwSmhpUXEweXdUeU9yT2srRTJOL08KK24rRnBiN3ZYUXRkclJPVEhyZTV0UVY5eVduRUlON041WmFSWm9KUTM5d0F2RGNLU2N0clFPSExiRktoRnhGMHEKK2ZiZTAxc1R1ck0wVFJMZkpLOTFEQUNYNllibHBhbGdqRWJlbk00OVdkVm4xelNuWFJyY0tLMlcyMDBKdkZiSzQKK2UvdnY2VjFUMVRSYUp3SURBUUFCbzRHOU1JRzZNQjhHQTFVZEl3UVlNQmFBRktGeVh5WWJLSmhEbFYwSE45V0YKK2xwMUwwc05GTUIwR0ExVWREZ1FXQkJTdHZaaDZOTFFtOS9yRUpsVHZBNzNnSk10VUdqQU9CZ05WSFE4QkFmOEUKK0JBTUNBUVl3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFSQmdsZ2hrZ0JodmhDQVFFRUJBTUNBUUl3UkFZRFZSMGYKK0JEMHdPekE1b0RlZ05ZWXphSFIwY0RvdkwyTnliQzUxYzJWeWRISjFjM1F1WTI5dEwxVlVUaTFWVTBWU1JtbHkKK2MzUXRTR0Z5WkhkaGNtVXVZM0pzTUEwR0NTcUdTSWIzRFFFQkJRVUFBNElCQVFCeVFoQU5PczRrQ2xyd0Y4QlcKK29udlVPR0NTalJLNTJ6WVpnRFhZTmpEdG1yNXJKNk55UEZETm4rSnhrTHBqWWV0SUZNVGJTUmU2NzlCdDhtN2EKK2dJQW9RWUZRdHhNdXlMbkplZ0IyYUViUWlJeGgvdEMyMVVjRkY3a3RkbkRvVGxBNnczcEx1dnVuYUk4NE9mM28KKzJZQnJoemtUYkNmYVlrNUpSbFRwdWRXOURrVWtIQnN5eDNua25QS25wbGtJR2FLMGpnbjhFMG4rU0ZhYllhSGsKK0k5THJvWVQvK0p0TGVmaDlsZ0JkQWdWdjBVUGJ6b0dmdURzcmsvWmgrVXJnYkxGcEhvVm5FbGh6YmtoNjRaMFgKK09HYUp1blFjNjhjQ1p1NUhUbi9hSzdmQkdNY1ZmbFJDWExWRVFwVTlQSUFkR0E4WW52ZzY4NHQ4R01hS3NSbDEKK2pJR1oKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KKyAzIHM6L0M9VVMvU1Q9VVQvTD1TYWx0IExha2UgQ2l0eS9PPVRoZSBVU0VSVFJVU1QgTmV0d29yay9PVT1odHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20vQ049VVROLVVTRVJGaXJzdC1IYXJkd2FyZQorICAgaTovQz1VUy9TVD1VVC9MPVNhbHQgTGFrZSBDaXR5L089VGhlIFVTRVJUUlVTVCBOZXR3b3JrL09VPWh0dHA6Ly93d3cudXNlcnRydXN0LmNvbS9DTj1VVE4tVVNFUkZpcnN0LUhhcmR3YXJlCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUVkRENDQTF5Z0F3SUJBZ0lRUkw0TWkxQUFKTFFSMHpZcS9tVUsvVEFOQmdrcWhraUc5dzBCQVFVRkFEQ0IKK2x6RUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdUQWxWVU1SY3dGUVlEVlFRSEV3NVRZV3gwSUV4aGEyVWcKK1EybDBlVEVlTUJ3R0ExVUVDaE1WVkdobElGVlRSVkpVVWxWVFZDQk9aWFIzYjNKck1TRXdId1lEVlFRTEV4aG8KK2RIUndPaTh2ZDNkM0xuVnpaWEowY25WemRDNWpiMjB4SHpBZEJnTlZCQU1URmxWVVRpMVZVMFZTUm1seWMzUXQKK1NHRnlaSGRoY21Vd0hoY05PVGt3TnpBNU1UZ3hNRFF5V2hjTk1Ua3dOekE1TVRneE9USXlXakNCbHpFTE1Ba0cKK0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnVEFsVlVNUmN3RlFZRFZRUUhFdzVUWVd4MElFeGhhMlVnUTJsMGVURWUKK01Cd0dBMVVFQ2hNVlZHaGxJRlZUUlZKVVVsVlRWQ0JPWlhSM2IzSnJNU0V3SHdZRFZRUUxFeGhvZEhSd09pOHYKK2QzZDNMblZ6WlhKMGNuVnpkQzVqYjIweEh6QWRCZ05WQkFNVEZsVlVUaTFWVTBWU1JtbHljM1F0U0dGeVpIZGgKK2NtVXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDeDk4TTRQN1NvZjg4NWdsRm4KKzBHMmYwdjlZOCtlZksrd05pVlNadVRpWkZ2ZmdJWGxJd3J0aGRCS1dIVHhxY3RVOEVHYzZPZTByRTgxbTY1VUoKK002UnNsN0hveHV6QmRYbWNSbDZOcTlCcS9ia3FWUmNRVkxNWjhKcjI4YkZkdHFkdCsrQnhGMnVpaVBzQTMvNGEKK01YY01tZ0Y2c1RMakt3RUhPRzdEcFY0anZFV2JlMURCeVRDUDIrVXJldE5iK3pOQUhxRFZtQmU4aTRmRGlkTmQKK29JNnlxcXIyam1tSUJzWDZpU0h6Q0oxcExna3pteWtOUmcrTXpFazBzR2xSdmZrR3pXaXRaa3k4UHF4aHZRcUkKK0RzamZQZTU4QkV5ZENsNXJrZGJ1eCswb2phdE5oNGx6MEc2azBCNFdpeFRoZGtRRGYyT3M1TTFKbk1XUzlLc3kKK29VaGJBZ01CQUFHamdia3dnYll3Q3dZRFZSMFBCQVFEQWdIR01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0hRWUQKK1ZSME9CQllFRktGeVh5WWJLSmhEbFYwSE45V0ZscDFMMHNORk1FUUdBMVVkSHdROU1Ec3dPYUEzb0RXR00yaDAKK2RIQTZMeTlqY213dWRYTmxjblJ5ZFhOMExtTnZiUzlWVkU0dFZWTkZVa1pwY25OMExVaGhjbVIzWVhKbExtTnkKK2JEQXhCZ05WSFNVRUtqQW9CZ2dyQmdFRkJRY0RBUVlJS3dZQkJRVUhBd1VHQ0NzR0FRVUZCd01HQmdnckJnRUYKK0JRY0RCekFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBUnhrUDNuVEdtWmV2L0swb1huV082eTFuN2s1N0s5Y00KKy8vYmV5MVdpQ3VGTVZHV1RZR3VmRXB5dFhvTXM2MXF1d09RdDlBQmpIYmpBYlBMUFNidE5rMjhHcGdvaXNrbGkKK0NFNy95TWdVc29nV1hlY0I1QktWNVVVMHM0dHB2YyswaFk5MVVaNTlPamc2RkVnU3h2dW5PeHFORFlKQUIrZ0UKK0NKQ2hpY3NaVU4vS0hBRzhIUVFaZXhCMmx6dnVrSkRLeEE0ZkZtNTE3elA0MDI5YkhwYmo0SFIzZEh1S29tNHQKKzNYYldPVENDOEt1Y1V2SXF4NjlKWG43SGFPV0NnY2hxSi9rbmlDclZXRkNWSC9BN0hGZTdmUlE1WWl1YXlaU1MKK0txTWlEUCtKSm4xZkl5dEgxeFVkcVdxZVVRMHFVWjZCK2RRN1huQVNmeEF5bkI2N25maG1xQT09CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3Qvc29ydHBlcmYucHkgYi9saWIvcHl0aG9uMi43L3Rlc3Qvc29ydHBlcmYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4M2VlNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9zb3J0cGVyZi5weQpAQCAtMCwwICsxLDE2OSBAQAorIiIiU29ydCBwZXJmb3JtYW5jZSB0ZXN0LgorCitTZWUgbWFpbigpIGZvciBjb21tYW5kIGxpbmUgc3ludGF4LgorU2VlIHRhYnVsYXRlKCkgZm9yIG91dHB1dCBmb3JtYXQuCisKKyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHJhbmRvbQoraW1wb3J0IG1hcnNoYWwKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IG9zCisKK3RkID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCisKK2RlZiByYW5kZmxvYXRzKG4pOgorICAgICIiIlJldHVybiBhIGxpc3Qgb2YgbiByYW5kb20gZmxvYXRzIGluIFswLCAxKS4iIiIKKyAgICAjIEdlbmVyYXRpbmcgZmxvYXRzIGlzIGV4cGVuc2l2ZSwgc28gdGhpcyB3cml0ZXMgdGhlbSBvdXQgdG8gYSBmaWxlIGluCisgICAgIyBhIHRlbXAgZGlyZWN0b3J5LiAgSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsIGl0IGp1c3QgcmVhZHMgdGhlbQorICAgICMgYmFjayBpbiBhbmQgc2h1ZmZsZXMgdGhlbSBhIGJpdC4KKyAgICBmbiA9IG9zLnBhdGguam9pbih0ZCwgInJyJTA2ZCIgJSBuKQorICAgIHRyeToKKyAgICAgICAgZnAgPSBvcGVuKGZuLCAicmIiKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICByID0gcmFuZG9tLnJhbmRvbQorICAgICAgICByZXN1bHQgPSBbcigpIGZvciBpIGluIHhyYW5nZShuKV0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZwID0gb3BlbihmbiwgIndiIikKKyAgICAgICAgICAgICAgICBtYXJzaGFsLmR1bXAocmVzdWx0LCBmcCkKKyAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICAgICAgZnAgPSBOb25lCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIGZwOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm4pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIHByaW50ICJjYW4ndCB3cml0ZSIsIGZuLCAiOiIsIG1zZworICAgIGVsc2U6CisgICAgICAgIHJlc3VsdCA9IG1hcnNoYWwubG9hZChmcCkKKyAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAjIFNodWZmbGUgaXQgYSBiaXQuLi4KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgaSA9IHJhbmRvbS5yYW5kcmFuZ2UobikKKyAgICAgICAgICAgIHRlbXAgPSByZXN1bHRbOmldCisgICAgICAgICAgICBkZWwgcmVzdWx0WzppXQorICAgICAgICAgICAgdGVtcC5yZXZlcnNlKCkKKyAgICAgICAgICAgIHJlc3VsdC5leHRlbmQodGVtcCkKKyAgICAgICAgICAgIGRlbCB0ZW1wCisgICAgYXNzZXJ0IGxlbihyZXN1bHQpID09IG4KKyAgICByZXR1cm4gcmVzdWx0CisKK2RlZiBmbHVzaCgpOgorICAgIHN5cy5zdGRvdXQuZmx1c2goKQorCitkZWYgZG9pdChMKToKKyAgICB0MCA9IHRpbWUuY2xvY2soKQorICAgIEwuc29ydCgpCisgICAgdDEgPSB0aW1lLmNsb2NrKCkKKyAgICBwcmludCAiJTYuMmYiICUgKHQxLXQwKSwKKyAgICBmbHVzaCgpCisKK2RlZiB0YWJ1bGF0ZShyKToKKyAgICAiIiJUYWJ1bGF0ZSBzb3J0IHNwZWVkIGZvciBsaXN0cyBvZiB2YXJpb3VzIHNpemVzLgorCisgICAgVGhlIHNpemVzIGFyZSAyKippIGZvciBpIGluIHIgKHRoZSBhcmd1bWVudCwgYSBsaXN0KS4KKworICAgIFRoZSBvdXRwdXQgZGlzcGxheXMgaSwgMioqaSwgYW5kIHRoZSB0aW1lIHRvIHNvcnQgYXJyYXlzIG9mIDIqKmkKKyAgICBmbG9hdGluZyBwb2ludCBudW1iZXJzIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorCisgICAgKnNvcnQ6IHJhbmRvbSBkYXRhCisgICAgXHNvcnQ6IGRlc2NlbmRpbmcgZGF0YQorICAgIC9zb3J0OiBhc2NlbmRpbmcgZGF0YQorICAgIDNzb3J0OiBhc2NlbmRpbmcsIHRoZW4gMyByYW5kb20gZXhjaGFuZ2VzCisgICAgK3NvcnQ6IGFzY2VuZGluZywgdGhlbiAxMCByYW5kb20gYXQgdGhlIGVuZAorICAgICVzb3J0OiBhc2NlbmRpbmcsIHRoZW4gcmFuZG9tbHkgcmVwbGFjZSAxJSBvZiB0aGUgZWxlbWVudHMgdy8gcmFuZG9tIHZhbHVlcworICAgIH5zb3J0OiBtYW55IGR1cGxpY2F0ZXMKKyAgICA9c29ydDogYWxsIGVxdWFsCisgICAgIXNvcnQ6IHdvcnN0IGNhc2Ugc2NlbmFyaW8KKworICAgICIiIgorICAgIGNhc2VzID0gdHVwbGUoW2NoICsgInNvcnQiIGZvciBjaCBpbiByIipcLzMrJX49ISJdKQorICAgIGZtdCA9ICgiJTJzICU3cyIgKyAiICU2cyIqbGVuKGNhc2VzKSkKKyAgICBwcmludCBmbXQgJSAoKCJpIiwgIjIqKmkiKSArIGNhc2VzKQorICAgIGZvciBpIGluIHI6CisgICAgICAgIG4gPSAxIDw8IGkKKyAgICAgICAgTCA9IHJhbmRmbG9hdHMobikKKyAgICAgICAgcHJpbnQgIiUyZCAlN2QiICUgKGksIG4pLAorICAgICAgICBmbHVzaCgpCisgICAgICAgIGRvaXQoTCkgIyAqc29ydAorICAgICAgICBMLnJldmVyc2UoKQorICAgICAgICBkb2l0KEwpICMgXHNvcnQKKyAgICAgICAgZG9pdChMKSAjIC9zb3J0CisKKyAgICAgICAgIyBEbyAzIHJhbmRvbSBleGNoYW5nZXMuCisgICAgICAgIGZvciBkdW1teSBpbiByYW5nZSgzKToKKyAgICAgICAgICAgIGkxID0gcmFuZG9tLnJhbmRyYW5nZShuKQorICAgICAgICAgICAgaTIgPSByYW5kb20ucmFuZHJhbmdlKG4pCisgICAgICAgICAgICBMW2kxXSwgTFtpMl0gPSBMW2kyXSwgTFtpMV0KKyAgICAgICAgZG9pdChMKSAjIDNzb3J0CisKKyAgICAgICAgIyBSZXBsYWNlIHRoZSBsYXN0IDEwIHdpdGggcmFuZG9tIGZsb2F0cy4KKyAgICAgICAgaWYgbiA+PSAxMDoKKyAgICAgICAgICAgIExbLTEwOl0gPSBbcmFuZG9tLnJhbmRvbSgpIGZvciBkdW1teSBpbiByYW5nZSgxMCldCisgICAgICAgIGRvaXQoTCkgIyArc29ydAorCisgICAgICAgICMgUmVwbGFjZSAxJSBvZiB0aGUgZWxlbWVudHMgYXQgcmFuZG9tLgorICAgICAgICBmb3IgZHVtbXkgaW4geHJhbmdlKG4gLy8gMTAwKToKKyAgICAgICAgICAgIExbcmFuZG9tLnJhbmRyYW5nZShuKV0gPSByYW5kb20ucmFuZG9tKCkKKyAgICAgICAgZG9pdChMKSAjICVzb3J0CisKKyAgICAgICAgIyBBcnJhbmdlIGZvciBsb3RzIG9mIGR1cGxpY2F0ZXMuCisgICAgICAgIGlmIG4gPiA0OgorICAgICAgICAgICAgZGVsIExbNDpdCisgICAgICAgICAgICBMID0gTCAqIChuIC8vIDQpCisgICAgICAgICAgICAjIEZvcmNlIHRoZSBlbGVtZW50cyB0byBiZSBkaXN0aW5jdCBvYmplY3RzLCBlbHNlIHRpbWluZ3MgY2FuIGJlCisgICAgICAgICAgICAjIGFydGlmaWNpYWxseSBsb3cuCisgICAgICAgICAgICBMID0gbWFwKGxhbWJkYSB4OiAtLXgsIEwpCisgICAgICAgIGRvaXQoTCkgIyB+c29ydAorICAgICAgICBkZWwgTAorCisgICAgICAgICMgQWxsIGVxdWFsLiAgQWdhaW4sIGZvcmNlIHRoZSBlbGVtZW50cyB0byBiZSBkaXN0aW5jdCBvYmplY3RzLgorICAgICAgICBMID0gbWFwKGFicywgWy0wLjVdICogbikKKyAgICAgICAgZG9pdChMKSAjID1zb3J0CisgICAgICAgIGRlbCBMCisKKyAgICAgICAgIyBUaGlzIG9uZSBsb29rcyBsaWtlIFszLCAyLCAxLCAwLCAwLCAxLCAyLCAzXS4gIEl0IHdhcyBhIGJhZCBjYXNlCisgICAgICAgICMgZm9yIGFuIG9sZGVyIGltcGxlbWVudGF0aW9uIG9mIHF1aWNrc29ydCwgd2hpY2ggdXNlZCB0aGUgbWVkaWFuCisgICAgICAgICMgb2YgdGhlIGZpcnN0LCBsYXN0IGFuZCBtaWRkbGUgZWxlbWVudHMgYXMgdGhlIHBpdm90LgorICAgICAgICBoYWxmID0gbiAvLyAyCisgICAgICAgIEwgPSByYW5nZShoYWxmIC0gMSwgLTEsIC0xKQorICAgICAgICBMLmV4dGVuZChyYW5nZShoYWxmKSkKKyAgICAgICAgIyBGb3JjZSB0byBmbG9hdCwgc28gdGhhdCB0aGUgdGltaW5ncyBhcmUgY29tcGFyYWJsZS4gIFRoaXMgaXMKKyAgICAgICAgIyBzaWduaWZpY2FudGx5IGZhc3RlciBpZiB3ZSBsZWF2ZSB0aGFtIGFzIGludHMuCisgICAgICAgIEwgPSBtYXAoZmxvYXQsIEwpCisgICAgICAgIGRvaXQoTCkgIyAhc29ydAorICAgICAgICBwcmludAorCitkZWYgbWFpbigpOgorICAgICIiIk1haW4gcHJvZ3JhbSB3aGVuIGludm9rZWQgYXMgYSBzY3JpcHQuCisKKyAgICBPbmUgYXJndW1lbnQ6IHRhYnVsYXRlIGEgc2luZ2xlIHJvdy4KKyAgICBUd28gYXJndW1lbnRzOiB0YWJ1bGF0ZSBhIHJhbmdlIChpbmNsdXNpdmUpLgorICAgIEV4dHJhIGFyZ3VtZW50cyBhcmUgdXNlZCB0byBzZWVkIHRoZSByYW5kb20gZ2VuZXJhdG9yLgorCisgICAgIiIiCisgICAgIyBkZWZhdWx0IHJhbmdlIChpbmNsdXNpdmUpCisgICAgazEgPSAxNQorICAgIGsyID0gMjAKKyAgICBpZiBzeXMuYXJndlsxOl06CisgICAgICAgICMgb25lIGFyZ3VtZW50OiBzaW5nbGUgcG9pbnQKKyAgICAgICAgazEgPSBrMiA9IGludChzeXMuYXJndlsxXSkKKyAgICAgICAgaWYgc3lzLmFyZ3ZbMjpdOgorICAgICAgICAgICAgIyB0d28gYXJndW1lbnRzOiBzcGVjaWZ5IHJhbmdlCisgICAgICAgICAgICBrMiA9IGludChzeXMuYXJndlsyXSkKKyAgICAgICAgICAgIGlmIHN5cy5hcmd2WzM6XToKKyAgICAgICAgICAgICAgICAjIGRlcml2ZSByYW5kb20gc2VlZCBmcm9tIHJlbWFpbmluZyBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICB4ID0gMQorICAgICAgICAgICAgICAgIGZvciBhIGluIHN5cy5hcmd2WzM6XToKKyAgICAgICAgICAgICAgICAgICAgeCA9IDY5MDY5ICogeCArIGhhc2goYSkKKyAgICAgICAgICAgICAgICByYW5kb20uc2VlZCh4KQorICAgIHIgPSByYW5nZShrMSwgazIrMSkgICAgICAgICAgICAgICAgICMgaW5jbHVkZSB0aGUgZW5kIHBvaW50CisgICAgdGFidWxhdGUocikKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC9zdHJpbmdfdGVzdHMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YWI2YWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5CkBAIC0wLDAgKzEsMTM1NSBAQAorIiIiCitDb21tb24gdGVzdHMgc2hhcmVkIGJ5IHRlc3Rfc3RyLCB0ZXN0X3VuaWNvZGUsIHRlc3RfdXNlcnN0cmluZyBhbmQgdGVzdF9zdHJpbmcuCisiIiIKKworaW1wb3J0IHVuaXR0ZXN0LCBzdHJpbmcsIHN5cywgc3RydWN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSBVc2VyTGlzdCBpbXBvcnQgVXNlckxpc3QKK2ltcG9ydCBfdGVzdGNhcGkKKworY2xhc3MgU2VxdWVuY2U6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcT0nd3h5eicpOiBzZWxmLnNlcSA9IHNlcQorICAgIGRlZiBfX2xlbl9fKHNlbGYpOiByZXR1cm4gbGVuKHNlbGYuc2VxKQorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKTogcmV0dXJuIHNlbGYuc2VxW2ldCisKK2NsYXNzIEJhZFNlcTEoU2VxdWVuY2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKTogc2VsZi5zZXEgPSBbNywgJ2hlbGxvJywgMTIzTF0KKworY2xhc3MgQmFkU2VxMihTZXF1ZW5jZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOiBzZWxmLnNlcSA9IFsnYScsICdiJywgJ2MnXQorICAgIGRlZiBfX2xlbl9fKHNlbGYpOiByZXR1cm4gOAorCitjbGFzcyBDb21tb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoaXMgdGVzdGNhc2UgY29udGFpbnMgdGVzdCB0aGF0IGNhbiBiZSB1c2VkIGluIGFsbAorICAgICMgc3RyaW5nbGlrZSBjbGFzc2VzLiBDdXJyZW50bHkgdGhpcyBpcyBzdHIsIHVuaWNvZGUKKyAgICAjIFVzZXJTdHJpbmcgYW5kIHRoZSBzdHJpbmcgbW9kdWxlLgorCisgICAgIyBUaGUgdHlwZSB0byBiZSB0ZXN0ZWQKKyAgICAjIENoYW5nZSBpbiBzdWJjbGFzc2VzIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3VyIG9mIGZpeHRlc3R0eXBlKCkKKyAgICB0eXBlMnRlc3QgPSBOb25lCisKKyAgICAjIEFsbCB0ZXN0cyBwYXNzIHRoZWlyIGFyZ3VtZW50cyB0byB0aGUgdGVzdGluZyBtZXRob2RzCisgICAgIyBhcyBzdHIgb2JqZWN0cy4gZml4dGVzdHR5cGUoKSBjYW4gYmUgdXNlZCB0byBwcm9wYWdhdGUKKyAgICAjIHRoZXNlIGFyZ3VtZW50cyB0byB0aGUgYXBwcm9wcmlhdGUgdHlwZQorICAgIGRlZiBmaXh0eXBlKHNlbGYsIG9iaik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBzdHIpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLnR5cGUydGVzdChvYmopCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGxpc3QpOgorICAgICAgICAgICAgcmV0dXJuIFtzZWxmLmZpeHR5cGUoeCkgZm9yIHggaW4gb2JqXQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCB0dXBsZSk6CisgICAgICAgICAgICByZXR1cm4gdHVwbGUoW3NlbGYuZml4dHlwZSh4KSBmb3IgeCBpbiBvYmpdKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBkaWN0KToKKyAgICAgICAgICAgIHJldHVybiBkaWN0KFsKKyAgICAgICAgICAgICAgIChzZWxmLmZpeHR5cGUoa2V5KSwgc2VsZi5maXh0eXBlKHZhbHVlKSkKKyAgICAgICAgICAgICAgIGZvciAoa2V5LCB2YWx1ZSkgaW4gb2JqLml0ZXJpdGVtcygpCisgICAgICAgICAgICBdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIG9iagorCisgICAgIyBjaGVjayB0aGF0IG9iamVjdC5tZXRob2QoKmFyZ3MpIHJldHVybnMgcmVzdWx0CisgICAgZGVmIGNoZWNrZXF1YWwoc2VsZiwgcmVzdWx0LCBvYmplY3QsIG1ldGhvZG5hbWUsICphcmdzKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5maXh0eXBlKHJlc3VsdCkKKyAgICAgICAgb2JqZWN0ID0gc2VsZi5maXh0eXBlKG9iamVjdCkKKyAgICAgICAgYXJncyA9IHNlbGYuZml4dHlwZShhcmdzKQorICAgICAgICByZWFscmVzdWx0ID0gZ2V0YXR0cihvYmplY3QsIG1ldGhvZG5hbWUpKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgcmVhbHJlc3VsdAorICAgICAgICApCisgICAgICAgICMgaWYgdGhlIG9yaWdpbmFsIGlzIHJldHVybmVkIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgICMgdGhpcyBkb2Vzbid0IGhhcHBlbiB3aXRoIHN1YmNsYXNzZXMKKyAgICAgICAgaWYgb2JqZWN0ID09IHJlYWxyZXN1bHQ6CisgICAgICAgICAgICBjbGFzcyBzdWJ0eXBlKHNlbGYuX19jbGFzc19fLnR5cGUydGVzdCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgb2JqZWN0ID0gc3VidHlwZShvYmplY3QpCisgICAgICAgICAgICByZWFscmVzdWx0ID0gZ2V0YXR0cihvYmplY3QsIG1ldGhvZG5hbWUpKCphcmdzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9iamVjdCBpcyBub3QgcmVhbHJlc3VsdCkKKworICAgICMgY2hlY2sgdGhhdCBvYmplY3QubWV0aG9kKCphcmdzKSByYWlzZXMgZXhjCisgICAgZGVmIGNoZWNrcmFpc2VzKHNlbGYsIGV4Yywgb2JqZWN0LCBtZXRob2RuYW1lLCAqYXJncyk6CisgICAgICAgIG9iamVjdCA9IHNlbGYuZml4dHlwZShvYmplY3QpCisgICAgICAgIGFyZ3MgPSBzZWxmLmZpeHR5cGUoYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBleGMsCisgICAgICAgICAgICBnZXRhdHRyKG9iamVjdCwgbWV0aG9kbmFtZSksCisgICAgICAgICAgICAqYXJncworICAgICAgICApCisKKyAgICAjIGNhbGwgb2JqZWN0Lm1ldGhvZCgqYXJncykgd2l0aG91dCBhbnkgY2hlY2tzCisgICAgZGVmIGNoZWNrY2FsbChzZWxmLCBvYmplY3QsIG1ldGhvZG5hbWUsICphcmdzKToKKyAgICAgICAgb2JqZWN0ID0gc2VsZi5maXh0eXBlKG9iamVjdCkKKyAgICAgICAgYXJncyA9IHNlbGYuZml4dHlwZShhcmdzKQorICAgICAgICBnZXRhdHRyKG9iamVjdCwgbWV0aG9kbmFtZSkoKmFyZ3MpCisKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZyAxMDU0MTM5OiAgKz0gb3B0aW1pemF0aW9uIHdhcyBub3QgaW52YWxpZGF0aW5nIGNhY2hlZCBoYXNoIHZhbHVlCisgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdCgnRE5TU0VDJykKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KCcnKQorICAgICAgICBmb3IgYyBpbiBhOgorICAgICAgICAgICAgYiArPSBjCisgICAgICAgICAgICBoYXNoKGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGFzaChiKSkKKworICAgIGRlZiB0ZXN0X2NhcGl0YWxpemUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnIGhlbGxvICcsICcgaGVsbG8gJywgJ2NhcGl0YWxpemUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ0hlbGxvICcsICdIZWxsbyAnLCdjYXBpdGFsaXplJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdIZWxsbyAnLCAnaGVsbG8gJywnY2FwaXRhbGl6ZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnQWFhYScsICdhYWFhJywgJ2NhcGl0YWxpemUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ0FhYWEnLCAnQWFBYScsICdjYXBpdGFsaXplJykKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ2NhcGl0YWxpemUnLCA0MikKKworICAgIGRlZiB0ZXN0X2NvdW50KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMywgJ2FhYScsICdjb3VudCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhYWEnLCAnY291bnQnLCAnYicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCAnYWFhJywgJ2NvdW50JywgJ2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ2FhYScsICdjb3VudCcsICdiJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDMsICdhYWEnLCAnY291bnQnLCAnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYWFhJywgJ2NvdW50JywgJ2InKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ2FhYScsICdjb3VudCcsICdiJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDIsICdhYWEnLCAnY291bnQnLCAnYScsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYWFhJywgJ2NvdW50JywgJ2EnLCAxMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEsICdhYWEnLCAnY291bnQnLCAnYScsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMywgJ2FhYScsICdjb3VudCcsICdhJywgLTEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMSwgJ2FhYScsICdjb3VudCcsICdhJywgMCwgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDMsICdhYWEnLCAnY291bnQnLCAnYScsIDAsIDEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMiwgJ2FhYScsICdjb3VudCcsICdhJywgMCwgLTEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYWFhJywgJ2NvdW50JywgJ2EnLCAwLCAtMTApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCAnYWFhJywgJ2NvdW50JywgJycsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxLCAnYWFhJywgJ2NvdW50JywgJycsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYWFhJywgJ2NvdW50JywgJycsIDEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMiwgJ2FhYScsICdjb3VudCcsICcnLCAtMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDQsICdhYWEnLCAnY291bnQnLCAnJywgLTEwKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxLCAnJywgJ2NvdW50JywgJycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnJywgJ2NvdW50JywgJycsIDEsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnJywgJ2NvdW50JywgJycsIHN5cy5tYXhpbnQsIDApCisKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICcnLCAnY291bnQnLCAneHgnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJycsICdjb3VudCcsICd4eCcsIDEsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnJywgJ2NvdW50JywgJ3h4Jywgc3lzLm1heGludCwgMCkKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ2NvdW50JykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdjb3VudCcsIDQyKQorCisgICAgICAgICMgRm9yIGEgdmFyaWV0eSBvZiBjb21iaW5hdGlvbnMsCisgICAgICAgICMgICAgdmVyaWZ5IHRoYXQgc3RyLmNvdW50KCkgbWF0Y2hlcyBhbiBlcXVpdmFsZW50IGZ1bmN0aW9uCisgICAgICAgICMgICAgcmVwbGFjaW5nIGFsbCBvY2N1cnJlbmNlcyBhbmQgdGhlbiBkaWZmZXJlbmNpbmcgdGhlIHN0cmluZyBsZW5ndGhzCisgICAgICAgIGNoYXJzZXQgPSBbJycsICdhJywgJ2InXQorICAgICAgICBkaWdpdHMgPSA3CisgICAgICAgIGJhc2UgPSBsZW4oY2hhcnNldCkKKyAgICAgICAgdGVzdHN0cmluZ3MgPSBzZXQoKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoYmFzZSAqKiBkaWdpdHMpOgorICAgICAgICAgICAgZW50cnkgPSBbXQorICAgICAgICAgICAgZm9yIGogaW4geHJhbmdlKGRpZ2l0cyk6CisgICAgICAgICAgICAgICAgaSwgbSA9IGRpdm1vZChpLCBiYXNlKQorICAgICAgICAgICAgICAgIGVudHJ5LmFwcGVuZChjaGFyc2V0W21dKQorICAgICAgICAgICAgdGVzdHN0cmluZ3MuYWRkKCcnLmpvaW4oZW50cnkpKQorICAgICAgICB0ZXN0c3RyaW5ncyA9IGxpc3QodGVzdHN0cmluZ3MpCisgICAgICAgIGZvciBpIGluIHRlc3RzdHJpbmdzOgorICAgICAgICAgICAgaSA9IHNlbGYuZml4dHlwZShpKQorICAgICAgICAgICAgbiA9IGxlbihpKQorICAgICAgICAgICAgZm9yIGogaW4gdGVzdHN0cmluZ3M6CisgICAgICAgICAgICAgICAgcjEgPSBpLmNvdW50KGopCisgICAgICAgICAgICAgICAgaWYgajoKKyAgICAgICAgICAgICAgICAgICAgcjIsIHJlbSA9IGRpdm1vZChuIC0gbGVuKGkucmVwbGFjZShqLCAnJykpLCBsZW4oaikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcjIsIHJlbSA9IGxlbihpKSsxLCAwCisgICAgICAgICAgICAgICAgaWYgcmVtIG9yIHIxICE9IHIyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbSwgMCwgJyVzICE9IDAgZm9yICVzJyAlIChyZW0sIGkpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIxLCByMiwgJyVzICE9ICVzIGZvciAlcycgJSAocjEsIHIyLCBpKSkKKworICAgIGRlZiB0ZXN0X2ZpbmQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYWJjZGVmZ2hpYWJjJywgJ2ZpbmQnLCAnYWJjJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDksICdhYmNkZWZnaGlhYmMnLCAnZmluZCcsICdhYmMnLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdhYmNkZWZnaGlhYmMnLCAnZmluZCcsICdkZWYnLCA0KQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYWJjJywgJ2ZpbmQnLCAnJywgMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDMsICdhYmMnLCAnZmluZCcsICcnLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdhYmMnLCAnZmluZCcsICcnLCA0KQorCisgICAgICAgICMgdG8gY2hlY2sgdGhlIGFiaWxpdHkgdG8gcGFzcyBOb25lIGFzIGRlZmF1bHRzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCggMiwgJ3JyYXJycnJycnJycmEnLCAnZmluZCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEyLCAncnJhcnJycnJycnJyYScsICdmaW5kJywgJ2EnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdycmFycnJycnJycnJhJywgJ2ZpbmQnLCAnYScsIDQsIDYpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMiwgJ3JyYXJycnJycnJycmEnLCAnZmluZCcsICdhJywgNCwgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCAyLCAncnJhcnJycnJycnJyYScsICdmaW5kJywgJ2EnLCBOb25lLCA2KQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnZmluZCcpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnZmluZCcsIDQyKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnJywgJ2ZpbmQnLCAnJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnJywgJ2ZpbmQnLCAnJywgMSwgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnJywgJ2ZpbmQnLCAnJywgc3lzLm1heGludCwgMCkKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICcnLCAnZmluZCcsICd4eCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJycsICdmaW5kJywgJ3h4JywgMSwgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnJywgJ2ZpbmQnLCAneHgnLCBzeXMubWF4aW50LCAwKQorCisgICAgICAgICMgaXNzdWUgNzQ1OAorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdhYicsICdmaW5kJywgJ3h4eCcsIHN5cy5tYXhzaXplICsgMSwgMCkKKworICAgICAgICAjIEZvciBhIHZhcmlldHkgb2YgY29tYmluYXRpb25zLAorICAgICAgICAjICAgIHZlcmlmeSB0aGF0IHN0ci5maW5kKCkgbWF0Y2hlcyBfX2NvbnRhaW5zX18KKyAgICAgICAgIyAgICBhbmQgdGhhdCB0aGUgZm91bmQgc3Vic3RyaW5nIGlzIHJlYWxseSBhdCB0aGF0IGxvY2F0aW9uCisgICAgICAgIGNoYXJzZXQgPSBbJycsICdhJywgJ2InLCAnYyddCisgICAgICAgIGRpZ2l0cyA9IDUKKyAgICAgICAgYmFzZSA9IGxlbihjaGFyc2V0KQorICAgICAgICB0ZXN0c3RyaW5ncyA9IHNldCgpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShiYXNlICoqIGRpZ2l0cyk6CisgICAgICAgICAgICBlbnRyeSA9IFtdCisgICAgICAgICAgICBmb3IgaiBpbiB4cmFuZ2UoZGlnaXRzKToKKyAgICAgICAgICAgICAgICBpLCBtID0gZGl2bW9kKGksIGJhc2UpCisgICAgICAgICAgICAgICAgZW50cnkuYXBwZW5kKGNoYXJzZXRbbV0pCisgICAgICAgICAgICB0ZXN0c3RyaW5ncy5hZGQoJycuam9pbihlbnRyeSkpCisgICAgICAgIHRlc3RzdHJpbmdzID0gbGlzdCh0ZXN0c3RyaW5ncykKKyAgICAgICAgZm9yIGkgaW4gdGVzdHN0cmluZ3M6CisgICAgICAgICAgICBpID0gc2VsZi5maXh0eXBlKGkpCisgICAgICAgICAgICBmb3IgaiBpbiB0ZXN0c3RyaW5nczoKKyAgICAgICAgICAgICAgICBsb2MgPSBpLmZpbmQoaikKKyAgICAgICAgICAgICAgICByMSA9IChsb2MgIT0gLTEpCisgICAgICAgICAgICAgICAgcjIgPSBqIGluIGkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIxLCByMikKKyAgICAgICAgICAgICAgICBpZiBsb2MgIT0gLTE6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaVtsb2M6bG9jK2xlbihqKV0sIGopCisKKyAgICBkZWYgdGVzdF9yZmluZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDksICAnYWJjZGVmZ2hpYWJjJywgJ3JmaW5kJywgJ2FiYycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMiwgJ2FiY2RlZmdoaWFiYycsICdyZmluZCcsICcnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ2FiY2RlZmdoaWFiYycsICdyZmluZCcsICdhYmNkJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnYWJjZGVmZ2hpYWJjJywgJ3JmaW5kJywgJ2FiY3onKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCAnYWJjJywgJ3JmaW5kJywgJycsIDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCAnYWJjJywgJ3JmaW5kJywgJycsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJ2FiYycsICdyZmluZCcsICcnLCA0KQorCisgICAgICAgICMgdG8gY2hlY2sgdGhlIGFiaWxpdHkgdG8gcGFzcyBOb25lIGFzIGRlZmF1bHRzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMiwgJ3JyYXJycnJycnJycmEnLCAncmZpbmQnLCAnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMiwgJ3JyYXJycnJycnJycmEnLCAncmZpbmQnLCAnYScsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJ3JyYXJycnJycnJycmEnLCAncmZpbmQnLCAnYScsIDQsIDYpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMiwgJ3JyYXJycnJycnJycmEnLCAncmZpbmQnLCAnYScsIDQsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCggMiwgJ3JyYXJycnJycnJycmEnLCAncmZpbmQnLCAnYScsIE5vbmUsIDYpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdyZmluZCcpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAncmZpbmQnLCA0MikKKworICAgICAgICAjIEZvciBhIHZhcmlldHkgb2YgY29tYmluYXRpb25zLAorICAgICAgICAjICAgIHZlcmlmeSB0aGF0IHN0ci5yZmluZCgpIG1hdGNoZXMgX19jb250YWluc19fCisgICAgICAgICMgICAgYW5kIHRoYXQgdGhlIGZvdW5kIHN1YnN0cmluZyBpcyByZWFsbHkgYXQgdGhhdCBsb2NhdGlvbgorICAgICAgICBjaGFyc2V0ID0gWycnLCAnYScsICdiJywgJ2MnXQorICAgICAgICBkaWdpdHMgPSA1CisgICAgICAgIGJhc2UgPSBsZW4oY2hhcnNldCkKKyAgICAgICAgdGVzdHN0cmluZ3MgPSBzZXQoKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoYmFzZSAqKiBkaWdpdHMpOgorICAgICAgICAgICAgZW50cnkgPSBbXQorICAgICAgICAgICAgZm9yIGogaW4geHJhbmdlKGRpZ2l0cyk6CisgICAgICAgICAgICAgICAgaSwgbSA9IGRpdm1vZChpLCBiYXNlKQorICAgICAgICAgICAgICAgIGVudHJ5LmFwcGVuZChjaGFyc2V0W21dKQorICAgICAgICAgICAgdGVzdHN0cmluZ3MuYWRkKCcnLmpvaW4oZW50cnkpKQorICAgICAgICB0ZXN0c3RyaW5ncyA9IGxpc3QodGVzdHN0cmluZ3MpCisgICAgICAgIGZvciBpIGluIHRlc3RzdHJpbmdzOgorICAgICAgICAgICAgaSA9IHNlbGYuZml4dHlwZShpKQorICAgICAgICAgICAgZm9yIGogaW4gdGVzdHN0cmluZ3M6CisgICAgICAgICAgICAgICAgbG9jID0gaS5yZmluZChqKQorICAgICAgICAgICAgICAgIHIxID0gKGxvYyAhPSAtMSkKKyAgICAgICAgICAgICAgICByMiA9IGogaW4gaQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocjEsIHIyKQorICAgICAgICAgICAgICAgIGlmIGxvYyAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpW2xvYzpsb2MrbGVuKGopXSwgc2VsZi5maXh0eXBlKGopKQorCisgICAgICAgICMgaXNzdWUgNzQ1OAorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdhYicsICdyZmluZCcsICd4eHgnLCBzeXMubWF4c2l6ZSArIDEsIDApCisKKyAgICBkZWYgdGVzdF9pbmRleChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhYmNkZWZnaGlhYmMnLCAnaW5kZXgnLCAnJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDMsICdhYmNkZWZnaGlhYmMnLCAnaW5kZXgnLCAnZGVmJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhYmNkZWZnaGlhYmMnLCAnaW5kZXgnLCAnYWJjJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDksICdhYmNkZWZnaGlhYmMnLCAnaW5kZXgnLCAnYWJjJywgMSkKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsICdhYmNkZWZnaGlhYmMnLCAnaW5kZXgnLCAnaGliJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnYWJjZGVmZ2hpYWInLCAnaW5kZXgnLCAnYWJjJywgMSkKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnYWJjZGVmZ2hpJywgJ2luZGV4JywgJ2doaScsIDgpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ2FiY2RlZmdoaScsICdpbmRleCcsICdnaGknLCAtMSkKKworICAgICAgICAjIHRvIGNoZWNrIHRoZSBhYmlsaXR5IHRvIHBhc3MgTm9uZSBhcyBkZWZhdWx0cworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoIDIsICdycmFycnJycnJycnJhJywgJ2luZGV4JywgJ2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTIsICdycmFycnJycnJycnJhJywgJ2luZGV4JywgJ2EnLCA0KQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsICdycmFycnJycnJycnJhJywgJ2luZGV4JywgJ2EnLCA0LCA2KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTIsICdycmFycnJycnJycnJhJywgJ2luZGV4JywgJ2EnLCA0LCBOb25lKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoIDIsICdycmFycnJycnJycnJhJywgJ2luZGV4JywgJ2EnLCBOb25lLCA2KQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnaW5kZXgnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ2luZGV4JywgNDIpCisKKyAgICBkZWYgdGVzdF9yaW5kZXgoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMiwgJ2FiY2RlZmdoaWFiYycsICdyaW5kZXgnLCAnJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDMsICAnYWJjZGVmZ2hpYWJjJywgJ3JpbmRleCcsICdkZWYnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoOSwgICdhYmNkZWZnaGlhYmMnLCAncmluZGV4JywgJ2FiYycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAgJ2FiY2RlZmdoaWFiYycsICdyaW5kZXgnLCAnYWJjJywgMCwgLTEpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnYWJjZGVmZ2hpYWJjJywgJ3JpbmRleCcsICdoaWInKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsICdkZWZnaGlhYmMnLCAncmluZGV4JywgJ2RlZicsIDEpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ2RlZmdoaWFiYycsICdyaW5kZXgnLCAnYWJjJywgMCwgLTEpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ2FiY2RlZmdoaScsICdyaW5kZXgnLCAnZ2hpJywgMCwgOCkKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnYWJjZGVmZ2hpJywgJ3JpbmRleCcsICdnaGknLCAwLCAtMSkKKworICAgICAgICAjIHRvIGNoZWNrIHRoZSBhYmlsaXR5IHRvIHBhc3MgTm9uZSBhcyBkZWZhdWx0cworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTIsICdycmFycnJycnJycnJhJywgJ3JpbmRleCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEyLCAncnJhcnJycnJycnJyYScsICdyaW5kZXgnLCAnYScsIDQpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ3JyYXJycnJycnJycmEnLCAncmluZGV4JywgJ2EnLCA0LCA2KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTIsICdycmFycnJycnJycnJhJywgJ3JpbmRleCcsICdhJywgNCwgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCAyLCAncnJhcnJycnJycnJyYScsICdyaW5kZXgnLCAnYScsIE5vbmUsIDYpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdyaW5kZXgnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3JpbmRleCcsIDQyKQorCisgICAgZGVmIHRlc3RfbG93ZXIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnaGVsbG8nLCAnSGVMTG8nLCAnbG93ZXInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvJywgJ2hlbGxvJywgJ2xvd2VyJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdsb3dlcicsIDQyKQorCisgICAgZGVmIHRlc3RfdXBwZXIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnSEVMTE8nLCAnSGVMTG8nLCAndXBwZXInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ0hFTExPJywgJ0hFTExPJywgJ3VwcGVyJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICd1cHBlcicsIDQyKQorCisgICAgZGVmIHRlc3RfZXhwYW5kdGFicyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnLCA4KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgIGRlZlxuZyAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiICBkZWZcbmcgICBoaScsICdhYmNcclxuYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJywgOCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJywgJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLCAnZXhwYW5kdGFicycsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnICBhXG4gYicsICcgXHRhXG5cdGInLCAnZXhwYW5kdGFicycsIDEpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdleHBhbmR0YWJzJywgNDIsIDQyKQorICAgICAgICAjIFRoaXMgdGVzdCBpcyBvbmx5IHZhbGlkIHdoZW4gc2l6ZW9mKGludCkgPT0gc2l6ZW9mKHZvaWQqKSA9PSA0LgorICAgICAgICBpZiBzeXMubWF4aW50IDwgKDEgPDwgMzIpIGFuZCBzdHJ1Y3QuY2FsY3NpemUoJ1AnKSA9PSA0OgorICAgICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhPdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHRhXG5cdGInLCAnZXhwYW5kdGFicycsIHN5cy5tYXhpbnQpCisKKyAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsndGhpcycsICdpcycsICd0aGUnLCAnc3BsaXQnLCAnZnVuY3Rpb24nXSwKKyAgICAgICAgICAgICd0aGlzIGlzIHRoZSBzcGxpdCBmdW5jdGlvbicsICdzcGxpdCcpCisKKyAgICAgICAgIyBieSB3aGl0ZXNwYWNlCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjJywgJ2QnXSwgJ2EgYiBjIGQgJywgJ3NwbGl0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiIGMgZCddLCAnYSBiIGMgZCcsICdzcGxpdCcsIE5vbmUsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjIGQnXSwgJ2EgYiBjIGQnLCAnc3BsaXQnLCBOb25lLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhIGIgYyBkJywgJ3NwbGl0JywgTm9uZSwgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYSBiIGMgZCcsICdzcGxpdCcsIE5vbmUsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjJywgJ2QnXSwgJ2EgYiBjIGQnLCAnc3BsaXQnLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLm1heGludC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhIGIgYyBkJ10sICdhIGIgYyBkJywgJ3NwbGl0JywgTm9uZSwgMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSBiIGMgZCddLCAnICBhIGIgYyBkJywgJ3NwbGl0JywgTm9uZSwgMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MgIGQnXSwgJ2EgIGIgIGMgIGQnLCAnc3BsaXQnLCBOb25lLCAyKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbXSwgJyAgICAgICAgICcsICdzcGxpdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnXSwgJyAgYSAgICAnLCAnc3BsaXQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InXSwgJyAgYSAgICBiICAgJywgJ3NwbGl0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiICAgJ10sICcgIGEgICAgYiAgICcsICdzcGxpdCcsIE5vbmUsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYiAgIGMgICAnXSwgJyAgYSAgICBiICAgYyAgICcsICdzcGxpdCcsIE5vbmUsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjICAgJ10sICcgIGEgICAgYiAgIGMgICAnLCAnc3BsaXQnLCBOb25lLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InXSwgJ1xuXHRhIFx0XHIgYiBcdiAnLCAnc3BsaXQnKQorICAgICAgICBhYWEgPSAnIGEgJyoyMAorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJ10qMjAsIGFhYSwgJ3NwbGl0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSddICsgW2FhYVs0Ol1dLCBhYWEsICdzcGxpdCcsIE5vbmUsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnXSoxOSArIFsnYSAnXSwgYWFhLCAnc3BsaXQnLCBOb25lLCAxOSkKKworICAgICAgICAjIGJ5IGEgY2hhcgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhfGJ8Y3xkJywgJ3NwbGl0JywgJ3wnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhfGJ8Y3xkJ10sICdhfGJ8Y3xkJywgJ3NwbGl0JywgJ3wnLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2J8Y3xkJ10sICdhfGJ8Y3xkJywgJ3NwbGl0JywgJ3wnLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnY3xkJ10sICdhfGJ8Y3xkJywgJ3NwbGl0JywgJ3wnLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhfGJ8Y3xkJywgJ3NwbGl0JywgJ3wnLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhfGJ8Y3xkJywgJ3NwbGl0JywgJ3wnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhfGJ8Y3xkJywgJ3NwbGl0JywgJ3wnLAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLm1heGludC0yKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhfGJ8Y3xkJ10sICdhfGJ8Y3xkJywgJ3NwbGl0JywgJ3wnLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJycsICdifHxjfHxkJ10sICdhfHxifHxjfHxkJywgJ3NwbGl0JywgJ3wnLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydlbmRjYXNlICcsICcnXSwgJ2VuZGNhc2UgfCcsICdzcGxpdCcsICd8JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnJywgJyBzdGFydGNhc2UnXSwgJ3wgc3RhcnRjYXNlJywgJ3NwbGl0JywgJ3wnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycnLCAnYm90aGNhc2UnLCAnJ10sICd8Ym90aGNhc2V8JywgJ3NwbGl0JywgJ3wnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJycsICdiXHgwMGNceDAwZCddLCAnYVx4MDBceDAwYlx4MDBjXHgwMGQnLCAnc3BsaXQnLCAnXHgwMCcsIDIpCisKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSddKjIwLCAoJ2F8JyoyMClbOi0xXSwgJ3NwbGl0JywgJ3wnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJ10qMTUgK1snYXxhfGF8YXxhJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYXwnKjIwKVs6LTFdLCAnc3BsaXQnLCAnfCcsIDE1KQorCisgICAgICAgICMgYnkgc3RyaW5nCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjJywgJ2QnXSwgJ2EvL2IvL2MvL2QnLCAnc3BsaXQnLCAnLy8nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2IvL2MvL2QnXSwgJ2EvL2IvL2MvL2QnLCAnc3BsaXQnLCAnLy8nLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYy8vZCddLCAnYS8vYi8vYy8vZCcsICdzcGxpdCcsICcvLycsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjJywgJ2QnXSwgJ2EvL2IvL2MvL2QnLCAnc3BsaXQnLCAnLy8nLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhLy9iLy9jLy9kJywgJ3NwbGl0JywgJy8vJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYS8vYi8vYy8vZCcsICdzcGxpdCcsICcvLycsCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMubWF4aW50LTEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhLy9iLy9jLy9kJ10sICdhLy9iLy9jLy9kJywgJ3NwbGl0JywgJy8vJywgMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICcnLCAnYi8vLy9jLy8vL2QnXSwgJ2EvLy8vYi8vLy9jLy8vL2QnLCAnc3BsaXQnLCAnLy8nLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydlbmRjYXNlICcsICcnXSwgJ2VuZGNhc2UgdGVzdCcsICdzcGxpdCcsICd0ZXN0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnJywgJyBiZWdpbmNhc2UnXSwgJ3Rlc3QgYmVnaW5jYXNlJywgJ3NwbGl0JywgJ3Rlc3QnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycnLCAnIGJvdGhjYXNlICcsICcnXSwgJ3Rlc3QgYm90aGNhc2UgdGVzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnc3BsaXQnLCAndGVzdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYmMnXSwgJ2FiYmJjJywgJ3NwbGl0JywgJ2JiJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnJywgJyddLCAnYWFhJywgJ3NwbGl0JywgJ2FhYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2FhYSddLCAnYWFhJywgJ3NwbGl0JywgJ2FhYScsIDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2FiJywgJ2FiJ10sICdhYmJhYWInLCAnc3BsaXQnLCAnYmEnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhYWFhJ10sICdhYWFhJywgJ3NwbGl0JywgJ2FhYicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJyddLCAnJywgJ3NwbGl0JywgJ2FhYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2FhJ10sICdhYScsICdzcGxpdCcsICdhYWEnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydBJywgJ2JvYmInXSwgJ0FiYm9iYmJvYmInLCAnc3BsaXQnLCAnYmJvYmInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydBJywgJ0InLCAnJ10sICdBYmJvYmJCYmJvYmInLCAnc3BsaXQnLCAnYmJvYmInKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnXSoyMCwgKCdhQkxBSCcqMjApWzotNF0sICdzcGxpdCcsICdCTEFIJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSddKjIwLCAoJ2FCTEFIJyoyMClbOi00XSwgJ3NwbGl0JywgJ0JMQUgnLCAxOSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSddKjE4ICsgWydhQkxBSGEnXSwgKCdhQkxBSCcqMjApWzotNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAnc3BsaXQnLCAnQkxBSCcsIDE4KQorCisgICAgICAgICMgbWl4ZWQgdXNlIG9mIHN0ciBhbmQgdW5pY29kZQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoW3UnYScsIHUnYicsIHUnYyBkJ10sICdhIGIgYyBkJywgJ3NwbGl0JywgdScgJywgMikKKworICAgICAgICAjIGFyZ3VtZW50IHR5cGUKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdzcGxpdCcsIDQyLCA0MiwgNDIpCisKKyAgICAgICAgIyBudWxsIGNhc2UKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnaGVsbG8nLCAnc3BsaXQnLCAnJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnaGVsbG8nLCAnc3BsaXQnLCAnJywgMCkKKworICAgIGRlZiB0ZXN0X3JzcGxpdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsndGhpcycsICdpcycsICd0aGUnLCAncnNwbGl0JywgJ2Z1bmN0aW9uJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoaXMgaXMgdGhlIHJzcGxpdCBmdW5jdGlvbicsICdyc3BsaXQnKQorCisgICAgICAgICMgYnkgd2hpdGVzcGFjZQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhIGIgYyBkICcsICdyc3BsaXQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhIGIgYycsICdkJ10sICdhIGIgYyBkJywgJ3JzcGxpdCcsIE5vbmUsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EgYicsICdjJywgJ2QnXSwgJ2EgYiBjIGQnLCAncnNwbGl0JywgTm9uZSwgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYSBiIGMgZCcsICdyc3BsaXQnLCBOb25lLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhIGIgYyBkJywgJ3JzcGxpdCcsIE5vbmUsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjJywgJ2QnXSwgJ2EgYiBjIGQnLCAncnNwbGl0JywgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5tYXhpbnQtMjApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EgYiBjIGQnXSwgJ2EgYiBjIGQnLCAncnNwbGl0JywgTm9uZSwgMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYSBiIGMgZCddLCAnYSBiIGMgZCAgJywgJ3JzcGxpdCcsIE5vbmUsIDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EgIGInLCAnYycsICdkJ10sICdhICBiICBjICBkJywgJ3JzcGxpdCcsIE5vbmUsIDIpCisKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFtdLCAnICAgICAgICAgJywgJ3JzcGxpdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnXSwgJyAgYSAgICAnLCAncnNwbGl0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJ10sICcgIGEgICAgYiAgICcsICdyc3BsaXQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycgIGEnLCAnYiddLCAnICBhICAgIGIgICAnLCAncnNwbGl0JywgTm9uZSwgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnICBhICAgIGInLCdjJ10sICcgIGEgICAgYiAgIGMgICAnLCAncnNwbGl0JywKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJyAgYScsICdiJywgJ2MnXSwgJyAgYSAgICBiICAgYyAgICcsICdyc3BsaXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJ10sICdcblx0YSBcdFxyIGIgXHYgJywgJ3JzcGxpdCcsIE5vbmUsIDg4KQorICAgICAgICBhYWEgPSAnIGEgJyoyMAorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJ10qMjAsIGFhYSwgJ3JzcGxpdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbYWFhWzotNF1dICsgWydhJ10sIGFhYSwgJ3JzcGxpdCcsIE5vbmUsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJyBhICBhJ10gKyBbJ2EnXSoxOCwgYWFhLCAncnNwbGl0JywgTm9uZSwgMTgpCisKKworICAgICAgICAjIGJ5IGEgY2hhcgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhfGJ8Y3xkJywgJ3JzcGxpdCcsICd8JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYXxifGMnLCAnZCddLCAnYXxifGN8ZCcsICdyc3BsaXQnLCAnfCcsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2F8YicsICdjJywgJ2QnXSwgJ2F8YnxjfGQnLCAncnNwbGl0JywgJ3wnLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhfGJ8Y3xkJywgJ3JzcGxpdCcsICd8JywgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYXxifGN8ZCcsICdyc3BsaXQnLCAnfCcsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjJywgJ2QnXSwgJ2F8YnxjfGQnLCAncnNwbGl0JywgJ3wnLAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLm1heGludC0xMDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2F8YnxjfGQnXSwgJ2F8YnxjfGQnLCAncnNwbGl0JywgJ3wnLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhfHxifHxjJywgJycsICdkJ10sICdhfHxifHxjfHxkJywgJ3JzcGxpdCcsICd8JywgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnJywgJyBiZWdpbmNhc2UnXSwgJ3wgYmVnaW5jYXNlJywgJ3JzcGxpdCcsICd8JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnZW5kY2FzZSAnLCAnJ10sICdlbmRjYXNlIHwnLCAncnNwbGl0JywgJ3wnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycnLCAnYm90aGNhc2UnLCAnJ10sICd8Ym90aGNhc2V8JywgJ3JzcGxpdCcsICd8JykKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhXHgwMFx4MDBiJywgJ2MnLCAnZCddLCAnYVx4MDBceDAwYlx4MDBjXHgwMGQnLCAncnNwbGl0JywgJ1x4MDAnLCAyKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnXSoyMCwgKCdhfCcqMjApWzotMV0sICdyc3BsaXQnLCAnfCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2F8YXxhfGF8YSddK1snYSddKjE1LAorICAgICAgICAgICAgICAgICAgICAgICAgKCdhfCcqMjApWzotMV0sICdyc3BsaXQnLCAnfCcsIDE1KQorCisgICAgICAgICMgYnkgc3RyaW5nCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjJywgJ2QnXSwgJ2EvL2IvL2MvL2QnLCAncnNwbGl0JywgJy8vJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYS8vYi8vYycsICdkJ10sICdhLy9iLy9jLy9kJywgJ3JzcGxpdCcsICcvLycsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EvL2InLCAnYycsICdkJ10sICdhLy9iLy9jLy9kJywgJ3JzcGxpdCcsICcvLycsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EnLCAnYicsICdjJywgJ2QnXSwgJ2EvL2IvL2MvL2QnLCAncnNwbGl0JywgJy8vJywgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYScsICdiJywgJ2MnLCAnZCddLCAnYS8vYi8vYy8vZCcsICdyc3BsaXQnLCAnLy8nLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJywgJ2InLCAnYycsICdkJ10sICdhLy9iLy9jLy9kJywgJ3JzcGxpdCcsICcvLycsCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMubWF4aW50LTUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2EvL2IvL2MvL2QnXSwgJ2EvL2IvL2MvL2QnLCAncnNwbGl0JywgJy8vJywgMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYS8vLy9iLy8vL2MnLCAnJywgJ2QnXSwgJ2EvLy8vYi8vLy9jLy8vL2QnLCAncnNwbGl0JywgJy8vJywgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnJywgJyBiZWdpbmNhc2UnXSwgJ3Rlc3QgYmVnaW5jYXNlJywgJ3JzcGxpdCcsICd0ZXN0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnZW5kY2FzZSAnLCAnJ10sICdlbmRjYXNlIHRlc3QnLCAncnNwbGl0JywgJ3Rlc3QnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycnLCAnIGJvdGhjYXNlICcsICcnXSwgJ3Rlc3QgYm90aGNhc2UgdGVzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAncnNwbGl0JywgJ3Rlc3QnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhYicsICdjJ10sICdhYmJiYycsICdyc3BsaXQnLCAnYmInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycnLCAnJ10sICdhYWEnLCAncnNwbGl0JywgJ2FhYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2FhYSddLCAnYWFhJywgJ3JzcGxpdCcsICdhYWEnLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhYicsICdhYiddLCAnYWJiYWFiJywgJ3JzcGxpdCcsICdiYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2FhYWEnXSwgJ2FhYWEnLCAncnNwbGl0JywgJ2FhYicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJyddLCAnJywgJ3JzcGxpdCcsICdhYWEnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhYSddLCAnYWEnLCAncnNwbGl0JywgJ2FhYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJ2Jib2InLCAnQSddLCAnYmJvYmJib2JiQScsICdyc3BsaXQnLCAnYmJvYmInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWycnLCAnQicsICdBJ10sICdiYm9iYkJiYm9iYkEnLCAncnNwbGl0JywgJ2Jib2JiJykKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJ10qMjAsICgnYUJMQUgnKjIwKVs6LTRdLCAncnNwbGl0JywgJ0JMQUgnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhJ10qMjAsICgnYUJMQUgnKjIwKVs6LTRdLCAncnNwbGl0JywgJ0JMQUgnLCAxOSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYUJMQUhhJ10gKyBbJ2EnXSoxOCwgKCdhQkxBSCcqMjApWzotNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAncnNwbGl0JywgJ0JMQUgnLCAxOCkKKworICAgICAgICAjIG1peGVkIHVzZSBvZiBzdHIgYW5kIHVuaWNvZGUKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFt1J2EgYicsIHUnYycsIHUnZCddLCAnYSBiIGMgZCcsICdyc3BsaXQnLCB1JyAnLCAyKQorCisgICAgICAgICMgYXJndW1lbnQgdHlwZQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3JzcGxpdCcsIDQyLCA0MiwgNDIpCisKKyAgICAgICAgIyBudWxsIGNhc2UKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnaGVsbG8nLCAncnNwbGl0JywgJycpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ2hlbGxvJywgJ3JzcGxpdCcsICcnLCAwKQorCisgICAgZGVmIHRlc3Rfc3RyaXAoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnaGVsbG8nLCAnICAgaGVsbG8gICAnLCAnc3RyaXAnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvICAgJywgJyAgIGhlbGxvICAgJywgJ2xzdHJpcCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnICAgaGVsbG8nLCAnICAgaGVsbG8gICAnLCAncnN0cmlwJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsbycsICdoZWxsbycsICdzdHJpcCcpCisKKyAgICAgICAgIyBzdHJpcC9sc3RyaXAvcnN0cmlwIHdpdGggTm9uZSBhcmcKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoZWxsbycsICcgICBoZWxsbyAgICcsICdzdHJpcCcsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnaGVsbG8gICAnLCAnICAgaGVsbG8gICAnLCAnbHN0cmlwJywgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcgICBoZWxsbycsICcgICBoZWxsbyAgICcsICdyc3RyaXAnLCBOb25lKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvJywgJ2hlbGxvJywgJ3N0cmlwJywgTm9uZSkKKworICAgICAgICAjIHN0cmlwL2xzdHJpcC9yc3RyaXAgd2l0aCBzdHIgYXJnCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnaGVsbG8nLCAneHl6enloZWxsb3h5enp5JywgJ3N0cmlwJywgJ3h5eicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnaGVsbG94eXp6eScsICd4eXp6eWhlbGxveHl6enknLCAnbHN0cmlwJywgJ3h5eicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgneHl6enloZWxsbycsICd4eXp6eWhlbGxveHl6enknLCAncnN0cmlwJywgJ3h5eicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnaGVsbG8nLCAnaGVsbG8nLCAnc3RyaXAnLCAneHl6JykKKworICAgICAgICAjIHN0cmlwL2xzdHJpcC9yc3RyaXAgd2l0aCB1bmljb2RlIGFyZworICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKHVuaWNvZGUoJ2hlbGxvJywgJ2FzY2lpJyksICd4eXp6eWhlbGxveHl6enknLAorICAgICAgICAgICAgICAgICAnc3RyaXAnLCB1bmljb2RlKCd4eXonLCAnYXNjaWknKSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1bmljb2RlKCdoZWxsb3h5enp5JywgJ2FzY2lpJyksICd4eXp6eWhlbGxveHl6enknLAorICAgICAgICAgICAgICAgICAnbHN0cmlwJywgdW5pY29kZSgneHl6JywgJ2FzY2lpJykpCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwodW5pY29kZSgneHl6enloZWxsbycsICdhc2NpaScpLCAneHl6enloZWxsb3h5enp5JywKKyAgICAgICAgICAgICAgICAgJ3JzdHJpcCcsIHVuaWNvZGUoJ3h5eicsICdhc2NpaScpKQorICAgICAgICAgICAgIyBYWFgKKyAgICAgICAgICAgICNzZWxmLmNoZWNrZXF1YWwodW5pY29kZSgnaGVsbG8nLCAnYXNjaWknKSwgJ2hlbGxvJywKKyAgICAgICAgICAgICMgICAgICdzdHJpcCcsIHVuaWNvZGUoJ3h5eicsICdhc2NpaScpKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnc3RyaXAnLCA0MiwgNDIpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnbHN0cmlwJywgNDIsIDQyKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3JzdHJpcCcsIDQyLCA0MikKKworICAgIGRlZiB0ZXN0X2xqdXN0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYyAgICAgICAnLCAnYWJjJywgJ2xqdXN0JywgMTApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjICAgJywgJ2FiYycsICdsanVzdCcsIDYpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjJywgJ2FiYycsICdsanVzdCcsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjJywgJ2FiYycsICdsanVzdCcsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjKioqKioqKicsICdhYmMnLCAnbGp1c3QnLCAxMCwgJyonKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2FiYycsICdsanVzdCcpCisKKyAgICBkZWYgdGVzdF9yanVzdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcgICAgICAgYWJjJywgJ2FiYycsICdyanVzdCcsIDEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyAgIGFiYycsICdhYmMnLCAncmp1c3QnLCA2KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYycsICdhYmMnLCAncmp1c3QnLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYycsICdhYmMnLCAncmp1c3QnLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyoqKioqKiphYmMnLCAnYWJjJywgJ3JqdXN0JywgMTAsICcqJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAncmp1c3QnKQorCisgICAgZGVmIHRlc3RfY2VudGVyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyAgIGFiYyAgICAnLCAnYWJjJywgJ2NlbnRlcicsIDEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyBhYmMgICcsICdhYmMnLCAnY2VudGVyJywgNikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMnLCAnYWJjJywgJ2NlbnRlcicsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjJywgJ2FiYycsICdjZW50ZXInLCAyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyoqKmFiYyoqKionLCAnYWJjJywgJ2NlbnRlcicsIDEwLCAnKicpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2NlbnRlcicpCisKKyAgICBkZWYgdGVzdF9zd2FwY2FzZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdoRWxsTyBDb01QdVRFclMnLCAnSGVMTG8gY09tcFV0ZVJzJywgJ3N3YXBjYXNlJykKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3N3YXBjYXNlJywgNDIpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgorICAgICAgICBFUSA9IHNlbGYuY2hlY2tlcXVhbAorCisgICAgICAgICMgT3BlcmF0aW9ucyBvbiB0aGUgZW1wdHkgc3RyaW5nCisgICAgICAgIEVRKCIiLCAiIiwgInJlcGxhY2UiLCAiIiwgIiIpCisgICAgICAgIEVRKCJBIiwgIiIsICJyZXBsYWNlIiwgIiIsICJBIikKKyAgICAgICAgRVEoIiIsICIiLCAicmVwbGFjZSIsICJBIiwgIiIpCisgICAgICAgIEVRKCIiLCAiIiwgInJlcGxhY2UiLCAiQSIsICJBIikKKyAgICAgICAgRVEoIiIsICIiLCAicmVwbGFjZSIsICIiLCAiIiwgMTAwKQorICAgICAgICBFUSgiIiwgIiIsICJyZXBsYWNlIiwgIiIsICIiLCBzeXMubWF4aW50KQorCisgICAgICAgICMgaW50ZXJsZWF2ZSAoZnJvbT09IiIsICd0bycgZ2V0cyBpbnNlcnRlZCBldmVyeXdoZXJlKQorICAgICAgICBFUSgiQSIsICJBIiwgInJlcGxhY2UiLCAiIiwgIiIpCisgICAgICAgIEVRKCIqQSoiLCAiQSIsICJyZXBsYWNlIiwgIiIsICIqIikKKyAgICAgICAgRVEoIioxQSoxIiwgIkEiLCAicmVwbGFjZSIsICIiLCAiKjEiKQorICAgICAgICBFUSgiKi0jQSotIyIsICJBIiwgInJlcGxhY2UiLCAiIiwgIiotIyIpCisgICAgICAgIEVRKCIqLUEqLUEqLSIsICJBQSIsICJyZXBsYWNlIiwgIiIsICIqLSIpCisgICAgICAgIEVRKCIqLUEqLUEqLSIsICJBQSIsICJyZXBsYWNlIiwgIiIsICIqLSIsIC0xKQorICAgICAgICBFUSgiKi1BKi1BKi0iLCAiQUEiLCAicmVwbGFjZSIsICIiLCAiKi0iLCBzeXMubWF4aW50KQorICAgICAgICBFUSgiKi1BKi1BKi0iLCAiQUEiLCAicmVwbGFjZSIsICIiLCAiKi0iLCA0KQorICAgICAgICBFUSgiKi1BKi1BKi0iLCAiQUEiLCAicmVwbGFjZSIsICIiLCAiKi0iLCAzKQorICAgICAgICBFUSgiKi1BKi1BIiwgIkFBIiwgInJlcGxhY2UiLCAiIiwgIiotIiwgMikKKyAgICAgICAgRVEoIiotQUEiLCAiQUEiLCAicmVwbGFjZSIsICIiLCAiKi0iLCAxKQorICAgICAgICBFUSgiQUEiLCAiQUEiLCAicmVwbGFjZSIsICIiLCAiKi0iLCAwKQorCisgICAgICAgICMgc2luZ2xlIGNoYXJhY3RlciBkZWxldGlvbiAoZnJvbT09IkEiLCB0bz09IiIpCisgICAgICAgIEVRKCIiLCAiQSIsICJyZXBsYWNlIiwgIkEiLCAiIikKKyAgICAgICAgRVEoIiIsICJBQUEiLCAicmVwbGFjZSIsICJBIiwgIiIpCisgICAgICAgIEVRKCIiLCAiQUFBIiwgInJlcGxhY2UiLCAiQSIsICIiLCAtMSkKKyAgICAgICAgRVEoIiIsICJBQUEiLCAicmVwbGFjZSIsICJBIiwgIiIsIHN5cy5tYXhpbnQpCisgICAgICAgIEVRKCIiLCAiQUFBIiwgInJlcGxhY2UiLCAiQSIsICIiLCA0KQorICAgICAgICBFUSgiIiwgIkFBQSIsICJyZXBsYWNlIiwgIkEiLCAiIiwgMykKKyAgICAgICAgRVEoIkEiLCAiQUFBIiwgInJlcGxhY2UiLCAiQSIsICIiLCAyKQorICAgICAgICBFUSgiQUEiLCAiQUFBIiwgInJlcGxhY2UiLCAiQSIsICIiLCAxKQorICAgICAgICBFUSgiQUFBIiwgIkFBQSIsICJyZXBsYWNlIiwgIkEiLCAiIiwgMCkKKyAgICAgICAgRVEoIiIsICJBQUFBQUFBQUFBIiwgInJlcGxhY2UiLCAiQSIsICIiKQorICAgICAgICBFUSgiQkNEIiwgIkFCQUNBREEiLCAicmVwbGFjZSIsICJBIiwgIiIpCisgICAgICAgIEVRKCJCQ0QiLCAiQUJBQ0FEQSIsICJyZXBsYWNlIiwgIkEiLCAiIiwgLTEpCisgICAgICAgIEVRKCJCQ0QiLCAiQUJBQ0FEQSIsICJyZXBsYWNlIiwgIkEiLCAiIiwgc3lzLm1heGludCkKKyAgICAgICAgRVEoIkJDRCIsICJBQkFDQURBIiwgInJlcGxhY2UiLCAiQSIsICIiLCA1KQorICAgICAgICBFUSgiQkNEIiwgIkFCQUNBREEiLCAicmVwbGFjZSIsICJBIiwgIiIsIDQpCisgICAgICAgIEVRKCJCQ0RBIiwgIkFCQUNBREEiLCAicmVwbGFjZSIsICJBIiwgIiIsIDMpCisgICAgICAgIEVRKCJCQ0FEQSIsICJBQkFDQURBIiwgInJlcGxhY2UiLCAiQSIsICIiLCAyKQorICAgICAgICBFUSgiQkFDQURBIiwgIkFCQUNBREEiLCAicmVwbGFjZSIsICJBIiwgIiIsIDEpCisgICAgICAgIEVRKCJBQkFDQURBIiwgIkFCQUNBREEiLCAicmVwbGFjZSIsICJBIiwgIiIsIDApCisgICAgICAgIEVRKCJCQ0QiLCAiQUJDQUQiLCAicmVwbGFjZSIsICJBIiwgIiIpCisgICAgICAgIEVRKCJCQ0QiLCAiQUJDQURBQSIsICJyZXBsYWNlIiwgIkEiLCAiIikKKyAgICAgICAgRVEoIkJDRCIsICJCQ0QiLCAicmVwbGFjZSIsICJBIiwgIiIpCisgICAgICAgIEVRKCIqKioqKioqKioqKioqIiwgIioqKioqKioqKioqKioiLCAicmVwbGFjZSIsICJBIiwgIiIpCisgICAgICAgIEVRKCJeQV4iLCAiXiIrIkEiKjEwMDArIl4iLCAicmVwbGFjZSIsICJBIiwgIiIsIDk5OSkKKworICAgICAgICAjIHN1YnN0cmluZyBkZWxldGlvbiAoZnJvbT09InRoZSIsIHRvPT0iIikKKyAgICAgICAgRVEoIiIsICJ0aGUiLCAicmVwbGFjZSIsICJ0aGUiLCAiIikKKyAgICAgICAgRVEoImF0ZXIiLCAidGhlYXRlciIsICJyZXBsYWNlIiwgInRoZSIsICIiKQorICAgICAgICBFUSgiIiwgInRoZXRoZSIsICJyZXBsYWNlIiwgInRoZSIsICIiKQorICAgICAgICBFUSgiIiwgInRoZXRoZXRoZXRoZSIsICJyZXBsYWNlIiwgInRoZSIsICIiKQorICAgICAgICBFUSgiYWFhYSIsICJ0aGVhdGhlYXRoZWF0aGVhIiwgInJlcGxhY2UiLCAidGhlIiwgIiIpCisgICAgICAgIEVRKCJ0aGF0IiwgInRoYXQiLCAicmVwbGFjZSIsICJ0aGUiLCAiIikKKyAgICAgICAgRVEoInRoYWV0IiwgInRoYWV0IiwgInJlcGxhY2UiLCAidGhlIiwgIiIpCisgICAgICAgIEVRKCJoZXJlIGFuZCByZSIsICJoZXJlIGFuZCB0aGVyZSIsICJyZXBsYWNlIiwgInRoZSIsICIiKQorICAgICAgICBFUSgiaGVyZSBhbmQgcmUgYW5kIHJlIiwgImhlcmUgYW5kIHRoZXJlIGFuZCB0aGVyZSIsCisgICAgICAgICAgICJyZXBsYWNlIiwgInRoZSIsICIiLCBzeXMubWF4aW50KQorICAgICAgICBFUSgiaGVyZSBhbmQgcmUgYW5kIHJlIiwgImhlcmUgYW5kIHRoZXJlIGFuZCB0aGVyZSIsCisgICAgICAgICAgICJyZXBsYWNlIiwgInRoZSIsICIiLCAtMSkKKyAgICAgICAgRVEoImhlcmUgYW5kIHJlIGFuZCByZSIsICJoZXJlIGFuZCB0aGVyZSBhbmQgdGhlcmUiLAorICAgICAgICAgICAicmVwbGFjZSIsICJ0aGUiLCAiIiwgMykKKyAgICAgICAgRVEoImhlcmUgYW5kIHJlIGFuZCByZSIsICJoZXJlIGFuZCB0aGVyZSBhbmQgdGhlcmUiLAorICAgICAgICAgICAicmVwbGFjZSIsICJ0aGUiLCAiIiwgMikKKyAgICAgICAgRVEoImhlcmUgYW5kIHJlIGFuZCB0aGVyZSIsICJoZXJlIGFuZCB0aGVyZSBhbmQgdGhlcmUiLAorICAgICAgICAgICAicmVwbGFjZSIsICJ0aGUiLCAiIiwgMSkKKyAgICAgICAgRVEoImhlcmUgYW5kIHRoZXJlIGFuZCB0aGVyZSIsICJoZXJlIGFuZCB0aGVyZSBhbmQgdGhlcmUiLAorICAgICAgICAgICAicmVwbGFjZSIsICJ0aGUiLCAiIiwgMCkKKyAgICAgICAgRVEoImhlcmUgYW5kIHJlIGFuZCByZSIsICJoZXJlIGFuZCB0aGVyZSBhbmQgdGhlcmUiLCAicmVwbGFjZSIsICJ0aGUiLCAiIikKKworICAgICAgICBFUSgiYWJjIiwgImFiYyIsICJyZXBsYWNlIiwgInRoZSIsICIiKQorICAgICAgICBFUSgiYWJjZGVmZyIsICJhYmNkZWZnIiwgInJlcGxhY2UiLCAidGhlIiwgIiIpCisKKyAgICAgICAgIyBzdWJzdHJpbmcgZGVsZXRpb24gKGZyb209PSJib2IiLCB0bz09IiIpCisgICAgICAgIEVRKCJib2IiLCAiYmJvYm9iIiwgInJlcGxhY2UiLCAiYm9iIiwgIiIpCisgICAgICAgIEVRKCJib2JYYm9iIiwgImJib2JvYlhiYm9ib2IiLCAicmVwbGFjZSIsICJib2IiLCAiIikKKyAgICAgICAgRVEoImFhYWFhYWEiLCAiYWFhYWFhYWJvYiIsICJyZXBsYWNlIiwgImJvYiIsICIiKQorICAgICAgICBFUSgiYWFhYWFhYSIsICJhYWFhYWFhIiwgInJlcGxhY2UiLCAiYm9iIiwgIiIpCisKKyAgICAgICAgIyBzaW5nbGUgY2hhcmFjdGVyIHJlcGxhY2UgaW4gcGxhY2UgKGxlbihmcm9tKT09bGVuKHRvKT09MSkKKyAgICAgICAgRVEoIldobyBnb2VzIHRoZXJlPyIsICJXaG8gZ29lcyB0aGVyZT8iLCAicmVwbGFjZSIsICJvIiwgIm8iKQorICAgICAgICBFUSgiV2hPIGdPZXMgdGhlcmU/IiwgIldobyBnb2VzIHRoZXJlPyIsICJyZXBsYWNlIiwgIm8iLCAiTyIpCisgICAgICAgIEVRKCJXaE8gZ09lcyB0aGVyZT8iLCAiV2hvIGdvZXMgdGhlcmU/IiwgInJlcGxhY2UiLCAibyIsICJPIiwgc3lzLm1heGludCkKKyAgICAgICAgRVEoIldoTyBnT2VzIHRoZXJlPyIsICJXaG8gZ29lcyB0aGVyZT8iLCAicmVwbGFjZSIsICJvIiwgIk8iLCAtMSkKKyAgICAgICAgRVEoIldoTyBnT2VzIHRoZXJlPyIsICJXaG8gZ29lcyB0aGVyZT8iLCAicmVwbGFjZSIsICJvIiwgIk8iLCAzKQorICAgICAgICBFUSgiV2hPIGdPZXMgdGhlcmU/IiwgIldobyBnb2VzIHRoZXJlPyIsICJyZXBsYWNlIiwgIm8iLCAiTyIsIDIpCisgICAgICAgIEVRKCJXaE8gZ29lcyB0aGVyZT8iLCAiV2hvIGdvZXMgdGhlcmU/IiwgInJlcGxhY2UiLCAibyIsICJPIiwgMSkKKyAgICAgICAgRVEoIldobyBnb2VzIHRoZXJlPyIsICJXaG8gZ29lcyB0aGVyZT8iLCAicmVwbGFjZSIsICJvIiwgIk8iLCAwKQorCisgICAgICAgIEVRKCJXaG8gZ29lcyB0aGVyZT8iLCAiV2hvIGdvZXMgdGhlcmU/IiwgInJlcGxhY2UiLCAiYSIsICJxIikKKyAgICAgICAgRVEoIndobyBnb2VzIHRoZXJlPyIsICJXaG8gZ29lcyB0aGVyZT8iLCAicmVwbGFjZSIsICJXIiwgInciKQorICAgICAgICBFUSgid3dobyBnb2VzIHRoZXJlP3d3IiwgIldXaG8gZ29lcyB0aGVyZT9XVyIsICJyZXBsYWNlIiwgIlciLCAidyIpCisgICAgICAgIEVRKCJXaG8gZ29lcyB0aGVyZSEiLCAiV2hvIGdvZXMgdGhlcmU/IiwgInJlcGxhY2UiLCAiPyIsICIhIikKKyAgICAgICAgRVEoIldobyBnb2VzIHRoZXJlISEiLCAiV2hvIGdvZXMgdGhlcmU/PyIsICJyZXBsYWNlIiwgIj8iLCAiISIpCisKKyAgICAgICAgRVEoIldobyBnb2VzIHRoZXJlPyIsICJXaG8gZ29lcyB0aGVyZT8iLCAicmVwbGFjZSIsICIuIiwgIiEiKQorCisgICAgICAgICMgc3Vic3RyaW5nIHJlcGxhY2UgaW4gcGxhY2UgKGxlbihmcm9tKT09bGVuKHRvKSA+IDEpCisgICAgICAgIEVRKCJUaCoqICoqIGEgdCoqc3VlIiwgIlRoaXMgaXMgYSB0aXNzdWUiLCAicmVwbGFjZSIsICJpcyIsICIqKiIpCisgICAgICAgIEVRKCJUaCoqICoqIGEgdCoqc3VlIiwgIlRoaXMgaXMgYSB0aXNzdWUiLCAicmVwbGFjZSIsICJpcyIsICIqKiIsIHN5cy5tYXhpbnQpCisgICAgICAgIEVRKCJUaCoqICoqIGEgdCoqc3VlIiwgIlRoaXMgaXMgYSB0aXNzdWUiLCAicmVwbGFjZSIsICJpcyIsICIqKiIsIC0xKQorICAgICAgICBFUSgiVGgqKiAqKiBhIHQqKnN1ZSIsICJUaGlzIGlzIGEgdGlzc3VlIiwgInJlcGxhY2UiLCAiaXMiLCAiKioiLCA0KQorICAgICAgICBFUSgiVGgqKiAqKiBhIHQqKnN1ZSIsICJUaGlzIGlzIGEgdGlzc3VlIiwgInJlcGxhY2UiLCAiaXMiLCAiKioiLCAzKQorICAgICAgICBFUSgiVGgqKiAqKiBhIHRpc3N1ZSIsICJUaGlzIGlzIGEgdGlzc3VlIiwgInJlcGxhY2UiLCAiaXMiLCAiKioiLCAyKQorICAgICAgICBFUSgiVGgqKiBpcyBhIHRpc3N1ZSIsICJUaGlzIGlzIGEgdGlzc3VlIiwgInJlcGxhY2UiLCAiaXMiLCAiKioiLCAxKQorICAgICAgICBFUSgiVGhpcyBpcyBhIHRpc3N1ZSIsICJUaGlzIGlzIGEgdGlzc3VlIiwgInJlcGxhY2UiLCAiaXMiLCAiKioiLCAwKQorICAgICAgICBFUSgiY29ib2IiLCAiYm9ib2IiLCAicmVwbGFjZSIsICJib2IiLCAiY29iIikKKyAgICAgICAgRVEoImNvYm9iWGNvYm9jb2IiLCAiYm9ib2JYYm9ib2JvYiIsICJyZXBsYWNlIiwgImJvYiIsICJjb2IiKQorICAgICAgICBFUSgiYm9ib2IiLCAiYm9ib2IiLCAicmVwbGFjZSIsICJib3QiLCAiYm90IikKKworICAgICAgICAjIHJlcGxhY2Ugc2luZ2xlIGNoYXJhY3RlciAobGVuKGZyb20pPT0xLCBsZW4odG8pPjEpCisgICAgICAgIEVRKCJSZXlLS2phdmlLSyIsICJSZXlramF2aWsiLCAicmVwbGFjZSIsICJrIiwgIktLIikKKyAgICAgICAgRVEoIlJleUtLamF2aUtLIiwgIlJleWtqYXZpayIsICJyZXBsYWNlIiwgImsiLCAiS0siLCAtMSkKKyAgICAgICAgRVEoIlJleUtLamF2aUtLIiwgIlJleWtqYXZpayIsICJyZXBsYWNlIiwgImsiLCAiS0siLCBzeXMubWF4aW50KQorICAgICAgICBFUSgiUmV5S0tqYXZpS0siLCAiUmV5a2phdmlrIiwgInJlcGxhY2UiLCAiayIsICJLSyIsIDIpCisgICAgICAgIEVRKCJSZXlLS2phdmlrIiwgIlJleWtqYXZpayIsICJyZXBsYWNlIiwgImsiLCAiS0siLCAxKQorICAgICAgICBFUSgiUmV5a2phdmlrIiwgIlJleWtqYXZpayIsICJyZXBsYWNlIiwgImsiLCAiS0siLCAwKQorICAgICAgICBFUSgiQS0tLS1CLS0tLUMtLS0tIiwgIkEuQi5DLiIsICJyZXBsYWNlIiwgIi4iLCAiLS0tLSIpCisKKyAgICAgICAgRVEoIlJleWtqYXZpayIsICJSZXlramF2aWsiLCAicmVwbGFjZSIsICJxIiwgIktLIikKKworICAgICAgICAjIHJlcGxhY2Ugc3Vic3RyaW5nIChsZW4oZnJvbSk+MSwgbGVuKHRvKSE9bGVuKGZyb20pKQorICAgICAgICBFUSgiaGFtLCBoYW0sIGVnZ3MgYW5kIGhhbSIsICJzcGFtLCBzcGFtLCBlZ2dzIGFuZCBzcGFtIiwKKyAgICAgICAgICAgInJlcGxhY2UiLCAic3BhbSIsICJoYW0iKQorICAgICAgICBFUSgiaGFtLCBoYW0sIGVnZ3MgYW5kIGhhbSIsICJzcGFtLCBzcGFtLCBlZ2dzIGFuZCBzcGFtIiwKKyAgICAgICAgICAgInJlcGxhY2UiLCAic3BhbSIsICJoYW0iLCBzeXMubWF4aW50KQorICAgICAgICBFUSgiaGFtLCBoYW0sIGVnZ3MgYW5kIGhhbSIsICJzcGFtLCBzcGFtLCBlZ2dzIGFuZCBzcGFtIiwKKyAgICAgICAgICAgInJlcGxhY2UiLCAic3BhbSIsICJoYW0iLCAtMSkKKyAgICAgICAgRVEoImhhbSwgaGFtLCBlZ2dzIGFuZCBoYW0iLCAic3BhbSwgc3BhbSwgZWdncyBhbmQgc3BhbSIsCisgICAgICAgICAgICJyZXBsYWNlIiwgInNwYW0iLCAiaGFtIiwgNCkKKyAgICAgICAgRVEoImhhbSwgaGFtLCBlZ2dzIGFuZCBoYW0iLCAic3BhbSwgc3BhbSwgZWdncyBhbmQgc3BhbSIsCisgICAgICAgICAgICJyZXBsYWNlIiwgInNwYW0iLCAiaGFtIiwgMykKKyAgICAgICAgRVEoImhhbSwgaGFtLCBlZ2dzIGFuZCBzcGFtIiwgInNwYW0sIHNwYW0sIGVnZ3MgYW5kIHNwYW0iLAorICAgICAgICAgICAicmVwbGFjZSIsICJzcGFtIiwgImhhbSIsIDIpCisgICAgICAgIEVRKCJoYW0sIHNwYW0sIGVnZ3MgYW5kIHNwYW0iLCAic3BhbSwgc3BhbSwgZWdncyBhbmQgc3BhbSIsCisgICAgICAgICAgICJyZXBsYWNlIiwgInNwYW0iLCAiaGFtIiwgMSkKKyAgICAgICAgRVEoInNwYW0sIHNwYW0sIGVnZ3MgYW5kIHNwYW0iLCAic3BhbSwgc3BhbSwgZWdncyBhbmQgc3BhbSIsCisgICAgICAgICAgICJyZXBsYWNlIiwgInNwYW0iLCAiaGFtIiwgMCkKKworICAgICAgICBFUSgiYm9ib2IiLCAiYm9ib2JvYiIsICJyZXBsYWNlIiwgImJvYm9iIiwgImJvYiIpCisgICAgICAgIEVRKCJib2JvYlhib2JvYiIsICJib2JvYm9iWGJvYm9ib2IiLCAicmVwbGFjZSIsICJib2JvYiIsICJib2IiKQorICAgICAgICBFUSgiQk9CT0JPQiIsICJCT0JPQk9CIiwgInJlcGxhY2UiLCAiYm9iIiwgImJvYmJ5IikKKworICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBiYSA9IGJ1ZmZlcignYScpCisgICAgICAgICAgICBiYiA9IGJ1ZmZlcignYicpCisgICAgICAgIEVRKCJiYmMiLCAiYWJjIiwgInJlcGxhY2UiLCBiYSwgYmIpCisgICAgICAgIEVRKCJhYWMiLCAiYWJjIiwgInJlcGxhY2UiLCBiYiwgYmEpCisKKyAgICAgICAgIworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ29uZUB0d28hdGhyZWUhJywgJ29uZSF0d28hdGhyZWUhJywgJ3JlcGxhY2UnLCAnIScsICdAJywgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdvbmV0d290aHJlZScsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgJyEnLCAnJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdvbmVAdHdvQHRocmVlIScsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgJyEnLCAnQCcsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnb25lQHR3b0B0aHJlZUAnLCAnb25lIXR3byF0aHJlZSEnLCAncmVwbGFjZScsICchJywgJ0AnLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ29uZUB0d29AdGhyZWVAJywgJ29uZSF0d28hdGhyZWUhJywgJ3JlcGxhY2UnLCAnIScsICdAJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdvbmUhdHdvIXRocmVlIScsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgJyEnLCAnQCcsIDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnb25lQHR3b0B0aHJlZUAnLCAnb25lIXR3byF0aHJlZSEnLCAncmVwbGFjZScsICchJywgJ0AnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ29uZSF0d28hdGhyZWUhJywgJ29uZSF0d28hdGhyZWUhJywgJ3JlcGxhY2UnLCAneCcsICdAJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdvbmUhdHdvIXRocmVlIScsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgJ3gnLCAnQCcsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnLWEtYi1jLScsICdhYmMnLCAncmVwbGFjZScsICcnLCAnLScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnLWEtYi1jJywgJ2FiYycsICdyZXBsYWNlJywgJycsICctJywgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMnLCAnYWJjJywgJ3JlcGxhY2UnLCAnJywgJy0nLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJycsICcnLCAncmVwbGFjZScsICcnLCAnJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMnLCAnYWJjJywgJ3JlcGxhY2UnLCAnYWInLCAnLS0nLCAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYycsICdhYmMnLCAncmVwbGFjZScsICd4eScsICctLScpCisgICAgICAgICMgTmV4dCB0aHJlZSBmb3IgU0YgYnVnIDQyMjA4ODogW09TRjEgYWxwaGFdIHN0cmluZy5yZXBsYWNlKCk7IGRpZWQgd2l0aAorICAgICAgICAjIE1lbW9yeUVycm9yIGR1ZSB0byBlbXB0eSByZXN1bHQgKHBsYXRmb3JtIG1hbGxvYyBpc3N1ZSB3aGVuIHJlcXVlc3RpbmcKKyAgICAgICAgIyAwIGJ5dGVzKS4KKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcnLCAnMTIzJywgJ3JlcGxhY2UnLCAnMTIzJywgJycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnJywgJzEyMzEyMycsICdyZXBsYWNlJywgJzEyMycsICcnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ3gnLCAnMTIzeDEyMycsICdyZXBsYWNlJywgJzEyMycsICcnKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAncmVwbGFjZScpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAncmVwbGFjZScsIDQyKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3JlcGxhY2UnLCA0MiwgJ2gnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3JlcGxhY2UnLCAnaCcsIDQyKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZV9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBmb3Igb3ZlcmZsb3cgY2hlY2tpbmcgb24gMzIgYml0IG1hY2hpbmVzCisgICAgICAgIGlmIHN5cy5tYXhpbnQgIT0gMjE0NzQ4MzY0NyBvciBzdHJ1Y3QuY2FsY3NpemUoIlAiKSA+IDQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgQTJfMTYgPSAiQSIgKiAoMioqMTYpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoT3ZlcmZsb3dFcnJvciwgQTJfMTYsICJyZXBsYWNlIiwgIiIsIEEyXzE2KQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKE92ZXJmbG93RXJyb3IsIEEyXzE2LCAicmVwbGFjZSIsICJBIiwgQTJfMTYpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoT3ZlcmZsb3dFcnJvciwgQTJfMTYsICJyZXBsYWNlIiwgIkFBIiwgQTJfMTYrQTJfMTYpCisKKyAgICBkZWYgdGVzdF96ZmlsbChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcxMjMnLCAnMTIzJywgJ3pmaWxsJywgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcxMjMnLCAnMTIzJywgJ3pmaWxsJywgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcwMTIzJywgJzEyMycsICd6ZmlsbCcsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnKzEyMycsICcrMTIzJywgJ3pmaWxsJywgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcrMTIzJywgJysxMjMnLCAnemZpbGwnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyswMTIzJywgJysxMjMnLCAnemZpbGwnLCA1KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJy0xMjMnLCAnLTEyMycsICd6ZmlsbCcsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnLTEyMycsICctMTIzJywgJ3pmaWxsJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCctMDEyMycsICctMTIzJywgJ3pmaWxsJywgNSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcwMDAnLCAnJywgJ3pmaWxsJywgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCczNCcsICczNCcsICd6ZmlsbCcsIDEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnMDAzNCcsICczNCcsICd6ZmlsbCcsIDQpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICcxMjMnLCAnemZpbGwnKQorCisjIFhYWCBhbGlhcyBmb3IgcHkzayBmb3J3YXJkIGNvbXBhdGliaWxpdHkKK0Jhc2VUZXN0ID0gQ29tbW9uVGVzdAorCitjbGFzcyBNaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdDoKKyAgICAjIGFkZGl0aW9uYWwgdGVzdHMgdGhhdCBvbmx5IHdvcmsgZm9yCisgICAgIyBzdHJpbmdsaWtlIG9iamVjdHMsIGkuZS4gc3RyLCB1bmljb2RlLCBVc2VyU3RyaW5nCisgICAgIyAoYnV0IG5vdCB0aGUgc3RyaW5nIG1vZHVsZSkKKworICAgIGRlZiB0ZXN0X2lzbG93ZXIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJycsICdpc2xvd2VyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhJywgJ2lzbG93ZXInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdBJywgJ2lzbG93ZXInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdcbicsICdpc2xvd2VyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhYmMnLCAnaXNsb3dlcicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2FCYycsICdpc2xvd2VyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhYmNcbicsICdpc2xvd2VyJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnaXNsb3dlcicsIDQyKQorCisgICAgZGVmIHRlc3RfaXN1cHBlcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnJywgJ2lzdXBwZXInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdhJywgJ2lzdXBwZXInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ0EnLCAnaXN1cHBlcicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ1xuJywgJ2lzdXBwZXInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ0FCQycsICdpc3VwcGVyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnQWJDJywgJ2lzdXBwZXInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ0FCQ1xuJywgJ2lzdXBwZXInKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2FiYycsICdpc3VwcGVyJywgNDIpCisKKyAgICBkZWYgdGVzdF9pc3RpdGxlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICcnLCAnaXN0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2EnLCAnaXN0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnQScsICdpc3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnXG4nLCAnaXN0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnQSBUaXRsZWNhc2VkIExpbmUnLCAnaXN0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnQVxuVGl0bGVjYXNlZCBMaW5lJywgJ2lzdGl0bGUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ0EgVGl0bGVjYXNlZCwgTGluZScsICdpc3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnTm90IGEgY2FwaXRhbGl6ZWQgU3RyaW5nJywgJ2lzdGl0bGUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdOb3RcdGEgVGl0bGVjYXNlIFN0cmluZycsICdpc3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnTm90LS1hIFRpdGxlY2FzZSBTdHJpbmcnLCAnaXN0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ05PVCcsICdpc3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnaXN0aXRsZScsIDQyKQorCisgICAgZGVmIHRlc3RfaXNzcGFjZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnJywgJ2lzc3BhY2UnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdhJywgJ2lzc3BhY2UnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJyAnLCAnaXNzcGFjZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnXHQnLCAnaXNzcGFjZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnXHInLCAnaXNzcGFjZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnXG4nLCAnaXNzcGFjZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnIFx0XHJcbicsICdpc3NwYWNlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnIFx0XHJcbmEnLCAnaXNzcGFjZScpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ2lzc3BhY2UnLCA0MikKKworICAgIGRlZiB0ZXN0X2lzYWxwaGEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJycsICdpc2FscGhhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhJywgJ2lzYWxwaGEnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ0EnLCAnaXNhbHBoYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ1xuJywgJ2lzYWxwaGEnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2FiYycsICdpc2FscGhhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYUJjMTIzJywgJ2lzYWxwaGEnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdhYmNcbicsICdpc2FscGhhJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnaXNhbHBoYScsIDQyKQorCisgICAgZGVmIHRlc3RfaXNhbG51bShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnJywgJ2lzYWxudW0nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2EnLCAnaXNhbG51bScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnQScsICdpc2FsbnVtJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnXG4nLCAnaXNhbG51bScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnMTIzYWJjNDU2JywgJ2lzYWxudW0nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2ExYjNjJywgJ2lzYWxudW0nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdhQmMwMDAgJywgJ2lzYWxudW0nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdhYmNcbicsICdpc2FsbnVtJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnaXNhbG51bScsIDQyKQorCisgICAgZGVmIHRlc3RfaXNkaWdpdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnJywgJ2lzZGlnaXQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdhJywgJ2lzZGlnaXQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJzAnLCAnaXNkaWdpdCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnMDEyMzQ1Njc4OScsICdpc2RpZ2l0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnMDEyMzQ1Njc4OWEnLCAnaXNkaWdpdCcpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnaXNkaWdpdCcsIDQyKQorCisgICAgZGVmIHRlc3RfdGl0bGUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnIEhlbGxvICcsICcgaGVsbG8gJywgJ3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdIZWxsbyAnLCAnaGVsbG8gJywgJ3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdIZWxsbyAnLCAnSGVsbG8gJywgJ3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdGb3JtYXQgVGhpcyBBcyBUaXRsZSBTdHJpbmcnLCAiZk9yTWFUIHRoSXMgYVMgdGl0TGUgU3RyaW5nIiwgJ3RpdGxlJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdGb3JtYXQsVGhpcy1BcypUaXRsZTtTdHJpbmcnLCAiZk9yTWFULHRoSXMtYVMqdGl0TGU7U3RyaW5nIiwgJ3RpdGxlJywgKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ0dldGludCcsICJnZXRJbnQiLCAndGl0bGUnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3RpdGxlJywgNDIpCisKKyAgICBkZWYgdGVzdF9zcGxpdGxpbmVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhYmMnLCAnZGVmJywgJycsICdnaGknXSwgImFiY1xuZGVmXG5ccmdoaSIsICdzcGxpdGxpbmVzJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYWJjJywgJ2RlZicsICcnLCAnZ2hpJ10sICJhYmNcbmRlZlxuXHJcbmdoaSIsICdzcGxpdGxpbmVzJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYWJjJywgJ2RlZicsICdnaGknXSwgImFiY1xuZGVmXHJcbmdoaSIsICdzcGxpdGxpbmVzJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnYWJjJywgJ2RlZicsICdnaGknXSwgImFiY1xuZGVmXHJcbmdoaVxuIiwgJ3NwbGl0bGluZXMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoWydhYmMnLCAnZGVmJywgJ2doaScsICcnXSwgImFiY1xuZGVmXHJcbmdoaVxuXHIiLCAnc3BsaXRsaW5lcycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbJycsICdhYmMnLCAnZGVmJywgJ2doaScsICcnXSwgIlxuYWJjXG5kZWZcclxuZ2hpXG5cciIsICdzcGxpdGxpbmVzJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFsnXG4nLCAnYWJjXG4nLCAnZGVmXHJcbicsICdnaGlcbicsICdcciddLCAiXG5hYmNcbmRlZlxyXG5naGlcblxyIiwgJ3NwbGl0bGluZXMnLCAxKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ3NwbGl0bGluZXMnLCA0MiwgNDIpCisKKyAgICBkZWYgdGVzdF9zdGFydHN3aXRoKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnaGUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnaGVsbG8nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdzdGFydHN3aXRoJywgJycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnZWxsbycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdlbGxvJywgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ28nLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ28nLCA1KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnJywgNSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdsbycsIDYpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdzdGFydHN3aXRoJywgJ2xvd28nLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvd29ybGQnLCAnc3RhcnRzd2l0aCcsICdsb3dvJywgMywgNykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG93b3JsZCcsICdzdGFydHN3aXRoJywgJ2xvd28nLCAzLCA2KQorCisgICAgICAgICMgdGVzdCBuZWdhdGl2ZSBpbmRpY2VzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdoZScsIDAsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnaGUnLCAtNTMsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2hlbGxvJywgMCwgLTEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnaGVsbG8gd29ybGQnLCAtMSwgLTEwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2VsbG8nLCAtNSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdzdGFydHN3aXRoJywgJ2VsbG8nLCAtNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdvJywgLTIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICdvJywgLTEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICcnLCAtMywgLTMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAnbG8nLCAtOSkKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCA0MikKKworICAgICAgICAjIHRlc3QgdHVwbGUgYXJndW1lbnRzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICgnaGUnLCAnaGEnKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICgnbG8nLCAnbGxvJykpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG8nLCAnc3RhcnRzd2l0aCcsICgnaGVsbG94JywgJ2hlbGxvJykpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAoKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsb3dvcmxkJywgJ3N0YXJ0c3dpdGgnLCAoJ2hlbGxvd28nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmxkJywgJ2xvd28nKSwgMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG93b3JsZCcsICdzdGFydHN3aXRoJywgKCdoZWxsb3dvJywgJ2VsbG8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JsZCcpLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAoJ2xvJywgJ2hlJyksIDAsIC0xKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdzdGFydHN3aXRoJywgKCdoZScsICdoZWwnKSwgMCwgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdzdGFydHN3aXRoJywgKCdoZScsICdoZWwnKSwgMCwgMikKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3N0YXJ0c3dpdGgnLCAoNDIsKSkKKworICAgIGRlZiB0ZXN0X2VuZHN3aXRoKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgJ2xvJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnZW5kc3dpdGgnLCAnaGUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgJycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICd3b3JsJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgJ3dvcmwnLCAzLCA5KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnd29ybGQnLCAzLCAxMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgJ2xvd28nLCAxLCA3KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnbG93bycsIDIsIDcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICdsb3dvJywgMywgNykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICdsb3dvJywgNCwgNykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICdsb3dvJywgMywgOCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnYWInLCAnZW5kc3dpdGgnLCAnYWInLCAwLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdhYicsICdlbmRzd2l0aCcsICdhYicsIDAsIDApCisKKyAgICAgICAgIyB0ZXN0IG5lZ2F0aXZlIGluZGljZXMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdlbmRzd2l0aCcsICdsbycsIC0yKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsbycsICdlbmRzd2l0aCcsICdoZScsIC0yKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgJycsIC0zLCAtMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCAnaGVsbG8nLCAnZW5kc3dpdGgnLCAnaGVsbG8gd29ybGQnLCAtMTAsIC0yKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgJ3dvcmwnLCAtNikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgJ3dvcmwnLCAtNSwgLTEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICd3b3JsJywgLTUsIDkpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICd3b3JsZCcsIC03LCAxMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgJ2xvd28nLCAtOTksIC0zKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnbG93bycsIC04LCAtMykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgJ2xvd28nLCAtNywgLTMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvd29ybGQnLCAnZW5kc3dpdGgnLCAnbG93bycsIDMsIC00KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgJ2xvd28nLCAtOCwgLTIpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycsICdlbmRzd2l0aCcpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnZW5kc3dpdGgnLCA0MikKKworICAgICAgICAjIHRlc3QgdHVwbGUgYXJndW1lbnRzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgKCdoZScsICdoYScpKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgKCdsbycsICdsbG8nKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdlbmRzd2l0aCcsICgnaGVsbG94JywgJ2hlbGxvJykpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgKCkpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnaGVsbG93b3JsZCcsICdlbmRzd2l0aCcsICgnaGVsbG93bycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdybGQnLCAnbG93bycpLCAzKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdoZWxsb3dvcmxkJywgJ2VuZHN3aXRoJywgKCdoZWxsb3dvJywgJ2VsbG8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JsZCcpLCAzLCAtMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdlbmRzd2l0aCcsICgnaGVsbCcsICdlbGwnKSwgMCwgLTEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChGYWxzZSwgJ2hlbGxvJywgJ2VuZHN3aXRoJywgKCdoZScsICdoZWwnKSwgMCwgMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdoZWxsbycsICdlbmRzd2l0aCcsICgnaGUnLCAnaGVsbCcpLCAwLCA0KQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnZW5kc3dpdGgnLCAoNDIsKSkKKworICAgIGRlZiB0ZXN0X19fY29udGFpbnNfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICcnLCAnX19jb250YWluc19fJywgJycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnYWJjJywgJ19fY29udGFpbnNfXycsICcnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdhYmMnLCAnX19jb250YWluc19fJywgJ1wwJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdcMGFiYycsICdfX2NvbnRhaW5zX18nLCAnXDAnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2FiY1wwJywgJ19fY29udGFpbnNfXycsICdcMCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChUcnVlLCAnXDBhYmMnLCAnX19jb250YWluc19fJywgJ2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2FzZGYnLCAnX19jb250YWluc19fJywgJ2FzZGYnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICdhc2QnLCAnX19jb250YWluc19fJywgJ2FzZGYnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsICcnLCAnX19jb250YWluc19fJywgJ2FzZGYnKQorCisgICAgZGVmIHRlc3Rfc3Vic2NyaXB0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwodSdhJywgJ2FiYycsICdfX2dldGl0ZW1fXycsIDApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1J2MnLCAnYWJjJywgJ19fZ2V0aXRlbV9fJywgLTEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1J2EnLCAnYWJjJywgJ19fZ2V0aXRlbV9fJywgMEwpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1J2FiYycsICdhYmMnLCAnX19nZXRpdGVtX18nLCBzbGljZSgwLCAzKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKHUnYWJjJywgJ2FiYycsICdfX2dldGl0ZW1fXycsIHNsaWNlKDAsIDEwMDApKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwodSdhJywgJ2FiYycsICdfX2dldGl0ZW1fXycsIHNsaWNlKDAsIDEpKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwodScnLCAnYWJjJywgJ19fZ2V0aXRlbV9fJywgc2xpY2UoMCwgMCkpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnX19nZXRpdGVtX18nLCAnZGVmJykKKworICAgIGRlZiB0ZXN0X3NsaWNlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYycsICdhYmMnLCAnX19nZXRzbGljZV9fJywgMCwgMTAwMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMnLCAnYWJjJywgJ19fZ2V0c2xpY2VfXycsIDAsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWInLCAnYWJjJywgJ19fZ2V0c2xpY2VfXycsIDAsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYmMnLCAnYWJjJywgJ19fZ2V0c2xpY2VfXycsIDEsIDMpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYicsICdhYmMnLCAnX19nZXRzbGljZV9fJywgMSwgMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcnLCAnYWJjJywgJ19fZ2V0c2xpY2VfXycsIDIsIDIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnJywgJ2FiYycsICdfX2dldHNsaWNlX18nLCAxMDAwLCAxMDAwKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJycsICdhYmMnLCAnX19nZXRzbGljZV9fJywgMjAwMCwgMTAwMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcnLCAnYWJjJywgJ19fZ2V0c2xpY2VfXycsIDIsIDEpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnX19nZXRzbGljZV9fJywgJ2RlZicpCisKKyAgICBkZWYgdGVzdF9leHRlbmRlZF9nZXRzbGljZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGV4dGVuZGVkIHNsaWNpbmcgYnkgY29tcGFyaW5nIHdpdGggbGlzdCBzbGljaW5nLgorICAgICAgICBzID0gc3RyaW5nLmFzY2lpX2xldHRlcnMgKyBzdHJpbmcuZGlnaXRzCisgICAgICAgIGluZGljZXMgPSAoMCwgTm9uZSwgMSwgMywgNDEsIC0xLCAtMiwgLTM3KQorICAgICAgICBmb3Igc3RhcnQgaW4gaW5kaWNlczoKKyAgICAgICAgICAgIGZvciBzdG9wIGluIGluZGljZXM6CisgICAgICAgICAgICAgICAgIyBTa2lwIHN0ZXAgMCAoaW52YWxpZCkKKyAgICAgICAgICAgICAgICBmb3Igc3RlcCBpbiBpbmRpY2VzWzE6XToKKyAgICAgICAgICAgICAgICAgICAgTCA9IGxpc3Qocylbc3RhcnQ6c3RvcDpzdGVwXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwodSIiLmpvaW4oTCksIHMsICdfX2dldGl0ZW1fXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZShzdGFydCwgc3RvcCwgc3RlcCkpCisKKyAgICBkZWYgdGVzdF9tdWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnJywgJ2FiYycsICdfX211bF9fJywgLTEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnJywgJ2FiYycsICdfX211bF9fJywgMCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmMnLCAnYWJjJywgJ19fbXVsX18nLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY2FiY2FiYycsICdhYmMnLCAnX19tdWxfXycsIDMpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ19fbXVsX18nKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2FiYycsICdfX211bF9fJywgJycpCisgICAgICAgICMgWFhYOiBvbiBhIDY0LWJpdCBzeXN0ZW0sIHRoaXMgZG9lc24ndCByYWlzZSBhbiBvdmVyZmxvdyBlcnJvciwKKyAgICAgICAgIyBidXQgZWl0aGVyIHJhaXNlcyBhIE1lbW9yeUVycm9yLCBvciBzdWNjZWVkcyAoaWYgeW91IGhhdmUgNTRUaUIpCisgICAgICAgICNzZWxmLmNoZWNrcmFpc2VzKE92ZXJmbG93RXJyb3IsIDEwMDAwKidhYmMnLCAnX19tdWxfXycsIDIwMDAwMDAwMDApCisKKyAgICBkZWYgdGVzdF9qb2luKHNlbGYpOgorICAgICAgICAjIGpvaW4gbm93IHdvcmtzIHdpdGggYW55IHNlcXVlbmNlIHR5cGUKKyAgICAgICAgIyBtb3ZlZCBoZXJlLCBiZWNhdXNlIHRoZSBhcmd1bWVudCBvcmRlciBpcworICAgICAgICAjIGRpZmZlcmVudCBpbiBzdHJpbmcuam9pbiAoc2VlIHRoZSB0ZXN0IGluCisgICAgICAgICMgdGVzdC50ZXN0X3N0cmluZy5TdHJpbmdUZXN0LnRlc3Rfam9pbikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhIGIgYyBkJywgJyAnLCAnam9pbicsIFsnYScsICdiJywgJ2MnLCAnZCddKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY2QnLCAnJywgJ2pvaW4nLCAoJ2EnLCAnYicsICdjJywgJ2QnKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdiZCcsICcnLCAnam9pbicsICgnJywgJ2InLCAnJywgJ2QnKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYycsICcnLCAnam9pbicsICgnYScsICcnLCAnYycsICcnKSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCd3IHggeSB6JywgJyAnLCAnam9pbicsIFNlcXVlbmNlKCkpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjJywgJ2EnLCAnam9pbicsICgnYWJjJywpKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ3onLCAnYScsICdqb2luJywgVXNlckxpc3QoWyd6J10pKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKHVuaWNvZGUoJ2EuYi5jJyksIHVuaWNvZGUoJy4nKSwgJ2pvaW4nLCBbJ2EnLCAnYicsICdjJ10pCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwodW5pY29kZSgnYS5iLmMnKSwgJy4nLCAnam9pbicsIFt1bmljb2RlKCdhJyksICdiJywgJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1bmljb2RlKCdhLmIuYycpLCAnLicsICdqb2luJywgWydhJywgdW5pY29kZSgnYicpLCAnYyddKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKHVuaWNvZGUoJ2EuYi5jJyksICcuJywgJ2pvaW4nLCBbJ2EnLCAnYicsIHVuaWNvZGUoJ2MnKV0pCisgICAgICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJy4nLCAnam9pbicsIFsnYScsIHVuaWNvZGUoJ2InKSwgM10pCisgICAgICAgIGZvciBpIGluIFs1LCAyNSwgMTI1XToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgoKCgnYScgKiBpKSArICctJykgKiBpKVs6LTFdLCAnLScsICdqb2luJywKKyAgICAgICAgICAgICAgICAgWydhJyAqIGldICogaSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgoKCgnYScgKiBpKSArICctJykgKiBpKVs6LTFdLCAnLScsICdqb2luJywKKyAgICAgICAgICAgICAgICAgKCdhJyAqIGksKSAqIGkpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICcgJywgJ2pvaW4nLCBCYWRTZXExKCkpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYSBiIGMnLCAnICcsICdqb2luJywgQmFkU2VxMigpKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnICcsICdqb2luJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICcgJywgJ2pvaW4nLCA3KQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyAnLCAnam9pbicsIFNlcXVlbmNlKFs3LCAnaGVsbG8nLCAxMjNMXSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgeWllbGQgNCArICIiCisgICAgICAgICAgICBzZWxmLmZpeHR5cGUoJyAnKS5qb2luKGYoKSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZToKKyAgICAgICAgICAgIGlmICcrJyBub3QgaW4gc3RyKGUpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnam9pbigpIGF0ZSBleGNlcHRpb24gbWVzc2FnZScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2V4Y2VwdGlvbiBub3QgcmFpc2VkJykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnK2hlbGxvKycsICcrJXMrJywgJ19fbW9kX18nLCAnaGVsbG8nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJysxMCsnLCAnKyVkKycsICdfX21vZF9fJywgMTApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYScsICIlYyIsICdfX21vZF9fJywgImEiKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2EnLCAiJWMiLCAnX19tb2RfXycsICJhIikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCciJywgIiVjIiwgJ19fbW9kX18nLCAzNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCckJywgIiVjIiwgJ19fbW9kX18nLCAzNikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcxMCcsICIlZCIsICdfX21vZF9fJywgMTApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnXHg3ZicsICIlYyIsICdfX21vZF9fJywgMHg3ZikKKworICAgICAgICBmb3Igb3JkaW5hbCBpbiAoLTEwMCwgMHgyMDAwMDApOgorICAgICAgICAgICAgIyB1bmljb2RlIHJhaXNlcyBWYWx1ZUVycm9yLCBzdHIgcmFpc2VzIE92ZXJmbG93RXJyb3IKKyAgICAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpLCAnJWMnLCAnX19tb2RfXycsIG9yZGluYWwpCisKKyAgICAgICAgbG9uZ3ZhbHVlID0gc3lzLm1heGludCArIDEwTAorICAgICAgICBzbG9uZ3ZhbHVlID0gc3RyKGxvbmd2YWx1ZSkKKyAgICAgICAgaWYgc2xvbmd2YWx1ZVstMV0gaW4gKCJMIiwibCIpOiBzbG9uZ3ZhbHVlID0gc2xvbmd2YWx1ZVs6LTFdCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnIDQyJywgJyUzbGQnLCAnX19tb2RfXycsIDQyKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJzQyJywgJyVkJywgJ19fbW9kX18nLCA0MkwpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnNDInLCAnJWQnLCAnX19tb2RfXycsIDQyLjApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbChzbG9uZ3ZhbHVlLCAnJWQnLCAnX19tb2RfXycsIGxvbmd2YWx1ZSkKKyAgICAgICAgc2VsZi5jaGVja2NhbGwoJyVkJywgJ19fbW9kX18nLCBmbG9hdChsb25ndmFsdWUpKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJzAwNDIuMDAnLCAnJTA3LjJmJywgJ19fbW9kX18nLCA0MikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcwMDQyLjAwJywgJyUwNy4yRicsICdfX21vZF9fJywgNDIpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnX19tb2RfXycpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJShmb28pcycsICdfX21vZF9fJywgNDIpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJXMlcycsICdfX21vZF9fJywgKDQyLCkpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJWMnLCAnX19tb2RfXycsIChOb25lLCkpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJyUoZm9vJywgJ19fbW9kX18nLCB7fSkKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclKGZvbylzICUoYmFyKXMnLCAnX19tb2RfXycsICgnZm9vJywgNDIpKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyVkJywgJ19fbW9kX18nLCAiNDIiKSAjIG5vdCBudW1lcmljCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJWQnLCAnX19tb2RfXycsICg0MiswaikpICMgbm8gaW50L2xvbmcgY29udmVyc2lvbiBwcm92aWRlZAorCisgICAgICAgICMgYXJndW1lbnQgbmFtZXMgd2l0aCBwcm9wZXJseSBuZXN0ZWQgYnJhY2tldHMgYXJlIHN1cHBvcnRlZAorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2JhcicsICclKChmb28pKXMnLCAnX19tb2RfXycsIHsnKGZvbyknOiAnYmFyJ30pCisKKyAgICAgICAgIyAxMDAgaXMgYSBtYWdpYyBudW1iZXIgaW4gUHlVbmljb2RlX0Zvcm1hdCwgdGhpcyBmb3JjZXMgYSByZXNpemUKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwMyonYScrJ3gnLCAnJXN4JywgJ19fbW9kX18nLCAxMDMqJ2EnKQorCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJSpzJywgJ19fbW9kX18nLCAoJ2ZvbycsICdiYXInKSkKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclMTAuKmYnLCAnX19tb2RfXycsICgnZm9vJywgNDIuKSkKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnJTEwJywgJ19fbW9kX18nLCAoNDIsKSkKKworICAgICAgICB3aWR0aCA9IGludChfdGVzdGNhcGkuUFlfU1NJWkVfVF9NQVggKyAxKQorICAgICAgICBpZiB3aWR0aCA8PSBzeXMubWF4aW50OgorICAgICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhPdmVyZmxvd0Vycm9yLCAnJSpzJywgJ19fbW9kX18nLCAod2lkdGgsICcnKSkKKyAgICAgICAgcHJlYyA9IGludChfdGVzdGNhcGkuSU5UX01BWCArIDEpCisgICAgICAgIGlmIHByZWMgPD0gc3lzLm1heGludDoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoT3ZlcmZsb3dFcnJvciwgJyUuKmYnLCAnX19tb2RfXycsIChwcmVjLCAxLiAvIDcpKQorICAgICAgICAjIElzc3VlIDE1OTg5CisgICAgICAgIHdpZHRoID0gaW50KDEgPDwgKF90ZXN0Y2FwaS5QWV9TU0laRV9UX01BWC5iaXRfbGVuZ3RoKCkgKyAxKSkKKyAgICAgICAgaWYgd2lkdGggPD0gc3lzLm1heGludDoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoT3ZlcmZsb3dFcnJvciwgJyUqcycsICdfX21vZF9fJywgKHdpZHRoLCAnJykpCisgICAgICAgIHByZWMgPSBpbnQoX3Rlc3RjYXBpLlVJTlRfTUFYICsgMSkKKyAgICAgICAgaWYgcHJlYyA8PSBzeXMubWF4aW50OgorICAgICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhPdmVyZmxvd0Vycm9yLCAnJS4qZicsICdfX21vZF9fJywgKHByZWMsIDEuIC8gNykpCisKKyAgICAgICAgY2xhc3MgWChvYmplY3QpOiBwYXNzCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ19fbW9kX18nLCBYKCkpCisgICAgICAgIGNsYXNzIFgoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ21lbG9uIGFwcGxlJywgJyUobWVsb24pcyAlKGFwcGxlKXMnLCAnX19tb2RfXycsIFgoKSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0Zm9ybWF0dGluZyhzZWxmKToKKyAgICAgICAgIyBmbG9hdCBmb3JtYXR0aW5nCisgICAgICAgIGZvciBwcmVjIGluIHhyYW5nZSgxMDApOgorICAgICAgICAgICAgZm9ybWF0ID0gJyUlLiVpZicgJSBwcmVjCisgICAgICAgICAgICB2YWx1ZSA9IDAuMDEKKyAgICAgICAgICAgIGZvciB4IGluIHhyYW5nZSg2MCk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDMuMTQxNTkyNjUzNTkgLyAzLjAgKiAxMC4wCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2NhbGwoZm9ybWF0LCAiX19tb2RfXyIsIHZhbHVlKQorCisgICAgZGVmIHRlc3RfaW5wbGFjZV9yZXdyaXRlcyhzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHN0cmluZ3MgZG9uJ3QgY29weSBhbmQgbW9kaWZ5IGNhY2hlZCBzaW5nbGUtY2hhcmFjdGVyIHN0cmluZ3MKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhJywgJ0EnLCAnbG93ZXInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ0EnLCAnaXN1cHBlcicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnQScsICdhJywgJ3VwcGVyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdhJywgJ2lzbG93ZXInKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYScsICdBJywgJ3JlcGxhY2UnLCAnQScsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsICdBJywgJ2lzdXBwZXInKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnQScsICdhJywgJ2NhcGl0YWxpemUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2EnLCAnaXNsb3dlcicpCisKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdBJywgJ2EnLCAnc3dhcGNhc2UnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2EnLCAnaXNsb3dlcicpCisKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdBJywgJ2EnLCAndGl0bGUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgJ2EnLCAnaXNsb3dlcicpCisKKyAgICBkZWYgdGVzdF9wYXJ0aXRpb24oc2VsZik6CisKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCgndGhpcyBpcyB0aGUgcGFyJywgJ3RpJywgJ3Rpb24gbWV0aG9kJyksCisgICAgICAgICAgICAndGhpcyBpcyB0aGUgcGFydGl0aW9uIG1ldGhvZCcsICdwYXJ0aXRpb24nLCAndGknKQorCisgICAgICAgICMgZnJvbSByYXltb25kJ3Mgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbgorICAgICAgICBTID0gJ2h0dHA6Ly93d3cucHl0aG9uLm9yZycKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCgnaHR0cCcsICc6Ly8nLCAnd3d3LnB5dGhvbi5vcmcnKSwgUywgJ3BhcnRpdGlvbicsICc6Ly8nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKCdodHRwOi8vd3d3LnB5dGhvbi5vcmcnLCAnJywgJycpLCBTLCAncGFydGl0aW9uJywgJz8nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKCcnLCAnaHR0cDovLycsICd3d3cucHl0aG9uLm9yZycpLCBTLCAncGFydGl0aW9uJywgJ2h0dHA6Ly8nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKCdodHRwOi8vd3d3LnB5dGhvbi4nLCAnb3JnJywgJycpLCBTLCAncGFydGl0aW9uJywgJ29yZycpCisKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCBTLCAncGFydGl0aW9uJywgJycpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCBTLCAncGFydGl0aW9uJywgTm9uZSkKKworICAgICAgICAjIG1peGVkIHVzZSBvZiBzdHIgYW5kIHVuaWNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYS9iL2MnLnBhcnRpdGlvbih1Jy8nKSwgKCdhJywgJy8nLCAnYi9jJykpCisKKyAgICBkZWYgdGVzdF9ycGFydGl0aW9uKHNlbGYpOgorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgoJ3RoaXMgaXMgdGhlIHJwYXJ0aScsICd0aScsICdvbiBtZXRob2QnKSwKKyAgICAgICAgICAgICd0aGlzIGlzIHRoZSBycGFydGl0aW9uIG1ldGhvZCcsICdycGFydGl0aW9uJywgJ3RpJykKKworICAgICAgICAjIGZyb20gcmF5bW9uZCdzIG9yaWdpbmFsIHNwZWNpZmljYXRpb24KKyAgICAgICAgUyA9ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcnCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgoJ2h0dHAnLCAnOi8vJywgJ3d3dy5weXRob24ub3JnJyksIFMsICdycGFydGl0aW9uJywgJzovLycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgoJycsICcnLCAnaHR0cDovL3d3dy5weXRob24ub3JnJyksIFMsICdycGFydGl0aW9uJywgJz8nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKCcnLCAnaHR0cDovLycsICd3d3cucHl0aG9uLm9yZycpLCBTLCAncnBhcnRpdGlvbicsICdodHRwOi8vJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCgnaHR0cDovL3d3dy5weXRob24uJywgJ29yZycsICcnKSwgUywgJ3JwYXJ0aXRpb24nLCAnb3JnJykKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFZhbHVlRXJyb3IsIFMsICdycGFydGl0aW9uJywgJycpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCBTLCAncnBhcnRpdGlvbicsIE5vbmUpCisKKyAgICAgICAgIyBtaXhlZCB1c2Ugb2Ygc3RyIGFuZCB1bmljb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2EvYi9jJy5ycGFydGl0aW9uKHUnLycpLCAoJ2EvYicsICcvJywgJ2MnKSkKKworICAgIGRlZiB0ZXN0X25vbmVfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICAjIGlzc3VlIDExODI4CisgICAgICAgIHMgPSAnaGVsbG8nCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgyLCBzLCAnZmluZCcsICdsJywgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDMsIHMsICdmaW5kJywgJ2wnLCAtMiwgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDIsIHMsICdmaW5kJywgJ2wnLCBOb25lLCAtMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsIHMsICdmaW5kJywgJ2gnLCBOb25lLCBOb25lKQorCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCBzLCAncmZpbmQnLCAnbCcsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCBzLCAncmZpbmQnLCAnbCcsIC0yLCBOb25lKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMiwgcywgJ3JmaW5kJywgJ2wnLCBOb25lLCAtMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsIHMsICdyZmluZCcsICdoJywgTm9uZSwgTm9uZSkKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMiwgcywgJ2luZGV4JywgJ2wnLCBOb25lKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMywgcywgJ2luZGV4JywgJ2wnLCAtMiwgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDIsIHMsICdpbmRleCcsICdsJywgTm9uZSwgLTIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCBzLCAnaW5kZXgnLCAnaCcsIE5vbmUsIE5vbmUpCisKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDMsIHMsICdyaW5kZXgnLCAnbCcsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgzLCBzLCAncmluZGV4JywgJ2wnLCAtMiwgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDIsIHMsICdyaW5kZXgnLCAnbCcsIE5vbmUsIC0yKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgcywgJ3JpbmRleCcsICdoJywgTm9uZSwgTm9uZSkKKworICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMiwgcywgJ2NvdW50JywgJ2wnLCBOb25lKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMSwgcywgJ2NvdW50JywgJ2wnLCAtMiwgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEsIHMsICdjb3VudCcsICdsJywgTm9uZSwgLTIpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCBzLCAnY291bnQnLCAneCcsIE5vbmUsIE5vbmUpCisKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsIHMsICdlbmRzd2l0aCcsICdvJywgTm9uZSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsIHMsICdlbmRzd2l0aCcsICdsbycsIC0yLCBOb25lKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgcywgJ2VuZHN3aXRoJywgJ2wnLCBOb25lLCAtMikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKEZhbHNlLCBzLCAnZW5kc3dpdGgnLCAneCcsIE5vbmUsIE5vbmUpCisKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKFRydWUsIHMsICdzdGFydHN3aXRoJywgJ2gnLCBOb25lKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgcywgJ3N0YXJ0c3dpdGgnLCAnbCcsIC0yLCBOb25lKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoVHJ1ZSwgcywgJ3N0YXJ0c3dpdGgnLCAnaCcsIE5vbmUsIC0yKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoRmFsc2UsIHMsICdzdGFydHN3aXRoJywgJ3gnLCBOb25lLCBOb25lKQorCisgICAgZGVmIHRlc3RfZmluZF9ldGNfcmFpc2VfY29ycmVjdF9lcnJvcl9tZXNzYWdlcyhzZWxmKToKKyAgICAgICAgIyBpc3N1ZSAxMTgyOAorICAgICAgICBzID0gJ2hlbGxvJworICAgICAgICB4ID0gJ3gnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgcidcYmZpbmRcYicsIHMuZmluZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ1xicmZpbmRcYicsIHMucmZpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgcidcYmluZGV4XGInLCBzLmluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInXGJyaW5kZXhcYicsIHMucmluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInXmNvdW50XCgnLCBzLmNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInXnN0YXJ0c3dpdGhcKCcsIHMuc3RhcnRzd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ15lbmRzd2l0aFwoJywgcy5lbmRzd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgTm9uZSwgTm9uZSwgTm9uZSkKKworY2xhc3MgTWl4aW5TdHJTdHJpbmdVc2VyU3RyaW5nVGVzdDoKKyAgICAjIEFkZGl0aW9uYWwgdGVzdHMgZm9yIDhiaXQgc3RyaW5ncywgaS5lLiBzdHIsIFVzZXJTdHJpbmcgYW5kCisgICAgIyB0aGUgc3RyaW5nIG1vZHVsZQorCisgICAgZGVmIHRlc3RfbWFrZXRyYW5zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAnJy5qb2luKG1hcChjaHIsIHhyYW5nZSgyNTYpKSkucmVwbGFjZSgnYWJjJywgJ3h5eicpLAorICAgICAgICAgICBzdHJpbmcubWFrZXRyYW5zKCdhYmMnLCAneHl6JykKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJpbmcubWFrZXRyYW5zLCAnYWJjJywgJ3h5encnKQorCisgICAgZGVmIHRlc3RfdHJhbnNsYXRlKHNlbGYpOgorICAgICAgICB0YWJsZSA9IHN0cmluZy5tYWtldHJhbnMoJ2FiYycsICd4eXonKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ3h5enh5eicsICd4eXphYmNkZWYnLCAndHJhbnNsYXRlJywgdGFibGUsICdkZWYnKQorCisgICAgICAgIHRhYmxlID0gc3RyaW5nLm1ha2V0cmFucygnYScsICdBJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdBYmMnLCAnYWJjJywgJ3RyYW5zbGF0ZScsIHRhYmxlKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ3h5eicsICd4eXonLCAndHJhbnNsYXRlJywgdGFibGUpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgneXonLCAneHl6JywgJ3RyYW5zbGF0ZScsIHRhYmxlLCAneCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgneXgnLCAnenl6engnLCAndHJhbnNsYXRlJywgTm9uZSwgJ3onKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ3p5enp4JywgJ3p5enp4JywgJ3RyYW5zbGF0ZScsIE5vbmUsICcnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ3p5enp4JywgJ3p5enp4JywgJ3RyYW5zbGF0ZScsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJ3h5eicsICd0cmFuc2xhdGUnLCAndG9vIHNob3J0JywgJ3N0cmlwJykKKyAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAneHl6JywgJ3RyYW5zbGF0ZScsICd0b28gc2hvcnQnKQorCisKK2NsYXNzIE1peGluU3RyVXNlclN0cmluZ1Rlc3Q6CisgICAgIyBBZGRpdGlvbmFsIHRlc3RzIHRoYXQgb25seSB3b3JrIHdpdGgKKyAgICAjIDhiaXQgY29tcGF0aWJsZSBvYmplY3QsIGkuZS4gc3RyIGFuZCBVc2VyU3RyaW5nCisKKyAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICBkZWYgdGVzdF9lbmNvZGluZ19kZWNvZGluZyhzZWxmKToKKyAgICAgICAgICAgIGNvZGVjcyA9IFsoJ3JvdDEzJywgJ3VyeXliIGpiZXlxJyksCisgICAgICAgICAgICAgICAgICAgICAgKCdiYXNlNjQnLCAnYUdWc2JHOGdkMjl5YkdRPVxuJyksCisgICAgICAgICAgICAgICAgICAgICAgKCdoZXgnLCAnNjg2NTZjNmM2ZjIwNzc2ZjcyNmM2NCcpLAorICAgICAgICAgICAgICAgICAgICAgICgndXUnLCAnYmVnaW4gNjY2IDxkYXRhPlxuKzomNUw7JlxcQD1WXVI7JjAgXG4gXG5lbmRcbicpXQorICAgICAgICAgICAgZm9yIGVuY29kaW5nLCBkYXRhIGluIGNvZGVjczoKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoZGF0YSwgJ2hlbGxvIHdvcmxkJywgJ2VuY29kZScsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnaGVsbG8gd29ybGQnLCBkYXRhLCAnZGVjb2RlJywgZW5jb2RpbmcpCisgICAgICAgICAgICAjIHpsaWIgaXMgb3B0aW9uYWwsIHNvIHdlIG1ha2UgdGhlIHRlc3Qgb3B0aW9uYWwgdG9vLi4uCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IHpsaWIKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGEgPSAneFx4OWNceGNiSFx4Y2RceGM5XHhjOVcoXHhjZi9ceGNhSVx4MDFceDAwXHgxYVx4MGJceDA0XScKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoZGF0YSwgJ2hlbGxvIHdvcmxkJywgJ2VuY29kZScsICd6bGliJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2hlbGxvIHdvcmxkJywgZGF0YSwgJ2RlY29kZScsICd6bGliJykKKworICAgICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICd4eXonLCAnZGVjb2RlJywgNDIpCisgICAgICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ3h5eicsICdlbmNvZGUnLCA0MikKKworCitjbGFzcyBNaXhpblN0clVuaWNvZGVUZXN0OgorICAgICMgQWRkaXRpb25hbCB0ZXN0cyB0aGF0IG9ubHkgd29yayB3aXRoIHN0ciBhbmQgdW5pY29kZS4KKworICAgIGRlZiB0ZXN0X2J1ZzEwMDEwMTEoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGpvaW4gcmV0dXJucyBhIE5FVyBvYmplY3QgZm9yIHNpbmdsZSBpdGVtIHNlcXVlbmNlcworICAgICAgICAjIGludm9sdmluZyBhIHN1YmNsYXNzLgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGl0IGlzIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLgorICAgICAgICAjIENoZWNrIHRoZSBvcHRpbWlzYXRpb24gc3RpbGwgb2NjdXJzIGZvciBzdGFuZGFyZCBvYmplY3RzLgorICAgICAgICB0ID0gc2VsZi50eXBlMnRlc3QKKyAgICAgICAgY2xhc3Mgc3ViY2xhc3ModCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHMxID0gc3ViY2xhc3MoImFiY2QiKQorICAgICAgICBzMiA9IHQoKS5qb2luKFtzMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMSBpcyBub3QgczIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHMyKSBpcyB0KQorCisgICAgICAgIHMxID0gdCgiYWJjZCIpCisgICAgICAgIHMyID0gdCgpLmpvaW4oW3MxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxIGlzIHMyKQorCisgICAgICAgICMgU2hvdWxkIGFsc28gdGVzdCBtaXhlZC10eXBlIGpvaW4uCisgICAgICAgIGlmIHQgaXMgdW5pY29kZToKKyAgICAgICAgICAgIHMxID0gc3ViY2xhc3MoImFiY2QiKQorICAgICAgICAgICAgczIgPSAiIi5qb2luKFtzMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoczEgaXMgbm90IHMyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoczIpIGlzIHQpCisKKyAgICAgICAgICAgIHMxID0gdCgiYWJjZCIpCisgICAgICAgICAgICBzMiA9ICIiLmpvaW4oW3MxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMSBpcyBzMikKKworICAgICAgICBlbGlmIHQgaXMgc3RyOgorICAgICAgICAgICAgczEgPSBzdWJjbGFzcygiYWJjZCIpCisgICAgICAgICAgICBzMiA9IHUiIi5qb2luKFtzMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoczEgaXMgbm90IHMyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoczIpIGlzIHVuaWNvZGUpICMgcHJvbW90ZXMhCisKKyAgICAgICAgICAgIHMxID0gdCgiYWJjZCIpCisgICAgICAgICAgICBzMiA9IHUiIi5qb2luKFtzMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoczEgaXMgbm90IHMyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoczIpIGlzIHVuaWNvZGUpICMgcHJvbW90ZXMhCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgidW5leHBlY3RlZCB0eXBlIGZvciBNaXhpblN0clVuaWNvZGVUZXN0ICVyIiAlIHQpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3Qvc3VicHJvY2Vzc2RhdGEvc2lnY2hpbGRfaWdub3JlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3N1YnByb2Nlc3NkYXRhL3NpZ2NoaWxkX2lnbm9yZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjMyMGZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3N1YnByb2Nlc3NkYXRhL3NpZ2NoaWxkX2lnbm9yZS5weQpAQCAtMCwwICsxLDE1IEBACitpbXBvcnQgc2lnbmFsLCBzdWJwcm9jZXNzLCBzeXMsIHRpbWUKKyMgT24gTGludXggdGhpcyBjYXVzZXMgb3Mud2FpdHBpZCB0byBmYWlsIHdpdGggT1NFcnJvciBhcyB0aGUgT1MgaGFzIGFscmVhZHkKKyMgcmVhcGVkIG91ciBjaGlsZCBwcm9jZXNzLiAgVGhlIHdhaXQoKSBwYXNzaW5nIHRoZSBPU0Vycm9yIG9uIHRvIHRoZSBjYWxsZXIKKyMgYW5kIGNhdXNpbmcgdXMgdG8gZXhpdCB3aXRoIGFuIGVycm9yIGlzIHdoYXQgd2UgYXJlIHRlc3RpbmcgYWdhaW5zdC4KK3NpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIHNpZ25hbC5TSUdfSUdOKQorc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctYycsICdwcmludCgiYWxiYXRyb3NzIiknXSkud2FpdCgpCisjIEFsc28gZW5zdXJlIHBvbGwoKSBoYW5kbGVzIGFuIGVycm5vLkVDSElMRCBhcHByb3ByaWF0ZWx5LgorcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAncHJpbnQoImFsYmF0cm9zcyIpJ10pCitudW1fcG9sbHMgPSAwCit3aGlsZSBwLnBvbGwoKSBpcyBOb25lOgorICAgICMgV2FpdGluZyBmb3IgdGhlIHByb2Nlc3MgdG8gZmluaXNoLgorICAgIHRpbWUuc2xlZXAoMC4wMSkgICMgQXZvaWQgYmVpbmcgYSBDUFUgYnVzeSBsb29wLgorICAgIG51bV9wb2xscyArPSAxCisgICAgaWYgbnVtX3BvbGxzID4gMzAwMDoKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdwb2xsIHNob3VsZCBoYXZlIHJldHVybmVkIDAgd2l0aGluIDMwIHNlY29uZHMnKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3N5bWxpbmtfc3VwcG9ydC5weSBiL2xpYi9weXRob24yLjcvdGVzdC9zeW1saW5rX3N1cHBvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAxZDBmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC9zeW1saW5rX3N1cHBvcnQucHkKQEAgLTAsMCArMSwxMDAgQEAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgcGxhdGZvcm0KKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOCisKK2RlZiBjYW5fc3ltbGluaygpOgorICAgICMgY2FjaGUgdGhlIHJlc3VsdCBpbiBjYW5fc3ltbGluay5wcmV2X3ZhbAorICAgIHByZXZfdmFsID0gZ2V0YXR0cihjYW5fc3ltbGluaywgJ3ByZXZfdmFsJywgTm9uZSkKKyAgICBpZiBwcmV2X3ZhbCBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIHByZXZfdmFsCisgICAgc3ltbGlua19wYXRoID0gVEVTVEZOICsgImNhbl9zeW1saW5rIgorICAgIHRyeToKKyAgICAgICAgc3ltbGluayhURVNURk4sIHN5bWxpbmtfcGF0aCkKKyAgICAgICAgY2FuID0gVHJ1ZQorICAgIGV4Y2VwdCAoT1NFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICBjYW4gPSBGYWxzZQorICAgIGVsc2U6CisgICAgICAgIG9zLnJlbW92ZShzeW1saW5rX3BhdGgpCisgICAgY2FuX3N5bWxpbmsucHJldl92YWwgPSBjYW4KKyAgICByZXR1cm4gY2FuCisKK2RlZiBza2lwX3VubGVzc19zeW1saW5rKHRlc3QpOgorICAgICIiIlNraXAgZGVjb3JhdG9yIGZvciB0ZXN0cyB0aGF0IHJlcXVpcmUgZnVuY3Rpb25hbCBzeW1saW5rIiIiCisgICAgb2sgPSBjYW5fc3ltbGluaygpCisgICAgbXNnID0gIlJlcXVpcmVzIGZ1bmN0aW9uYWwgc3ltbGluayBpbXBsZW1lbnRhdGlvbiIKKyAgICByZXR1cm4gdGVzdCBpZiBvayBlbHNlIHVuaXR0ZXN0LnNraXAobXNnKSh0ZXN0KQorCitkZWYgX3N5bWxpbmtfd2luMzIodGFyZ2V0LCBsaW5rLCB0YXJnZXRfaXNfZGlyZWN0b3J5PUZhbHNlKToKKyAgICAiIiIKKyAgICBDdHlwZXMgc3ltbGluayBpbXBsZW1lbnRhdGlvbiBzaW5jZSBQeXRob24gZG9lc24ndCBzdXBwb3J0CisgICAgc3ltbGlua3MgaW4gd2luZG93cyB5ZXQuIEJvcnJvd2VkIGZyb20gamFyYWNvLndpbmRvd3MgcHJvamVjdC4KKyAgICAiIiIKKyAgICBpbXBvcnQgY3R5cGVzLndpbnR5cGVzCisgICAgQ3JlYXRlU3ltYm9saWNMaW5rID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMi5DcmVhdGVTeW1ib2xpY0xpbmtXCisgICAgQ3JlYXRlU3ltYm9saWNMaW5rLmFyZ3R5cGVzID0gKAorICAgICAgICBjdHlwZXMud2ludHlwZXMuTFBXU1RSLAorICAgICAgICBjdHlwZXMud2ludHlwZXMuTFBXU1RSLAorICAgICAgICBjdHlwZXMud2ludHlwZXMuRFdPUkQsCisgICAgICAgICkKKyAgICBDcmVhdGVTeW1ib2xpY0xpbmsucmVzdHlwZSA9IGN0eXBlcy53aW50eXBlcy5CT09MRUFOCisKKyAgICBkZWYgZm9ybWF0X3N5c3RlbV9tZXNzYWdlKGVycm5vKToKKyAgICAgICAgIiIiCisgICAgICAgIENhbGwgRm9ybWF0TWVzc2FnZSB3aXRoIGEgc3lzdGVtIGVycm9yIG51bWJlciB0byByZXRyaWV2ZQorICAgICAgICB0aGUgZGVzY3JpcHRpdmUgZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgIiIiCisgICAgICAgICMgZmlyc3Qgc29tZSBmbGFncyB1c2VkIGJ5IEZvcm1hdE1lc3NhZ2VXCisgICAgICAgIEFMTE9DQVRFX0JVRkZFUiA9IDB4MTAwCisgICAgICAgIEFSR1VNRU5UX0FSUkFZID0gMHgyMDAwCisgICAgICAgIEZST01fSE1PRFVMRSA9IDB4ODAwCisgICAgICAgIEZST01fU1RSSU5HID0gMHg0MDAKKyAgICAgICAgRlJPTV9TWVNURU0gPSAweDEwMDAKKyAgICAgICAgSUdOT1JFX0lOU0VSVFMgPSAweDIwMAorCisgICAgICAgICMgTGV0IEZvcm1hdE1lc3NhZ2VXIGFsbG9jYXRlIHRoZSBidWZmZXIgKHdlJ2xsIGZyZWUgaXQgYmVsb3cpCisgICAgICAgICMgQWxzbywgbGV0IGl0IGtub3cgd2Ugd2FudCBhIHN5c3RlbSBlcnJvciBtZXNzYWdlLgorICAgICAgICBmbGFncyA9IEFMTE9DQVRFX0JVRkZFUiB8IEZST01fU1lTVEVNCisgICAgICAgIHNvdXJjZSA9IE5vbmUKKyAgICAgICAgbWVzc2FnZV9pZCA9IGVycm5vCisgICAgICAgIGxhbmd1YWdlX2lkID0gMAorICAgICAgICByZXN1bHRfYnVmZmVyID0gY3R5cGVzLndpbnR5cGVzLkxQV1NUUigpCisgICAgICAgIGJ1ZmZlcl9zaXplID0gMAorICAgICAgICBhcmd1bWVudHMgPSBOb25lCisgICAgICAgIGJ5dGVzID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMi5Gb3JtYXRNZXNzYWdlVygKKyAgICAgICAgICAgIGZsYWdzLAorICAgICAgICAgICAgc291cmNlLAorICAgICAgICAgICAgbWVzc2FnZV9pZCwKKyAgICAgICAgICAgIGxhbmd1YWdlX2lkLAorICAgICAgICAgICAgY3R5cGVzLmJ5cmVmKHJlc3VsdF9idWZmZXIpLAorICAgICAgICAgICAgYnVmZmVyX3NpemUsCisgICAgICAgICAgICBhcmd1bWVudHMsCisgICAgICAgICAgICApCisgICAgICAgICMgbm90ZSB0aGUgZm9sbG93aW5nIHdpbGwgY2F1c2UgYW4gaW5maW5pdGUgbG9vcCBpZiBHZXRMYXN0RXJyb3IKKyAgICAgICAgIyAgcmVwZWF0ZWRseSByZXR1cm5zIGFuIGVycm9yIHRoYXQgY2Fubm90IGJlIGZvcm1hdHRlZCwgYWx0aG91Z2gKKyAgICAgICAgIyAgdGhpcyBzaG91bGQgbm90IGhhcHBlbi4KKyAgICAgICAgaGFuZGxlX25vbnplcm9fc3VjY2VzcyhieXRlcykKKyAgICAgICAgbWVzc2FnZSA9IHJlc3VsdF9idWZmZXIudmFsdWUKKyAgICAgICAgY3R5cGVzLndpbmRsbC5rZXJuZWwzMi5Mb2NhbEZyZWUocmVzdWx0X2J1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1lc3NhZ2UKKworICAgIGRlZiBoYW5kbGVfbm9uemVyb19zdWNjZXNzKHJlc3VsdCk6CisgICAgICAgIGlmIHJlc3VsdCA9PSAwOgorICAgICAgICAgICAgdmFsdWUgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyLkdldExhc3RFcnJvcigpCisgICAgICAgICAgICBzdHJlcnJvciA9IGZvcm1hdF9zeXN0ZW1fbWVzc2FnZSh2YWx1ZSkKKyAgICAgICAgICAgIHJhaXNlIFdpbmRvd3NFcnJvcih2YWx1ZSwgc3RyZXJyb3IpCisKKyAgICB0YXJnZXRfaXNfZGlyZWN0b3J5ID0gdGFyZ2V0X2lzX2RpcmVjdG9yeSBvciBvcy5wYXRoLmlzZGlyKHRhcmdldCkKKyAgICBoYW5kbGVfbm9uemVyb19zdWNjZXNzKENyZWF0ZVN5bWJvbGljTGluayhsaW5rLCB0YXJnZXQsIHRhcmdldF9pc19kaXJlY3RvcnkpKQorCitzeW1saW5rID0gb3Muc3ltbGluayBpZiBoYXNhdHRyKG9zLCAnc3ltbGluaycpIGVsc2UgKAorICAgIF9zeW1saW5rX3dpbjMyIGlmIHBsYXRmb3JtLnN5c3RlbSgpID09ICdXaW5kb3dzJyBlbHNlIE5vbmUKKykKKworZGVmIHJlbW92ZV9zeW1saW5rKG5hbWUpOgorICAgICMgT24gV2luZG93cywgdG8gcmVtb3ZlIGEgZGlyZWN0b3J5IHN5bWxpbmssIG9uZSBtdXN0IHVzZSBybWRpcgorICAgIHRyeToKKyAgICAgICAgb3Mucm1kaXIobmFtZSkKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgb3MucmVtb3ZlKG5hbWUpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9NaW1lV3JpdGVyLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfTWltZVdyaXRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjY2MzZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfTWltZVdyaXRlci5weQpAQCAtMCwwICsxLDI5MiBAQAorIiIiVGVzdCBwcm9ncmFtIGZvciBNaW1lV3JpdGVyIG1vZHVsZS4KKworVGhlIHRlc3QgcHJvZ3JhbSB3YXMgdG9vIGJpZyB0byBjb21mb3J0YWJseSBmaXQgaW4gdGhlIE1pbWVXcml0ZXIKK2NsYXNzLCBzbyBpdCdzIGhlcmUgaW4gaXRzIG93biBmaWxlLgorCitUaGlzIHNob3VsZCBnZW5lcmF0ZSBCYXJyeSdzIGV4YW1wbGUsIG1vZHVsbyBzb21lIHF1b3RlcyBhbmQgbmV3bGluZXMuCisKKyIiIgorCitpbXBvcnQgdW5pdHRlc3QsIFN0cmluZ0lPCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKKworaW1wb3J0X21vZHVsZSgiTWltZVdyaXRlciIsIGRlcHJlY2F0ZWQ9VHJ1ZSkKK2Zyb20gTWltZVdyaXRlciBpbXBvcnQgTWltZVdyaXRlcgorCitTRUxMRVIgPSAnJydcCitJTlRFUkZBQ0UgU2VsbGVyLTE7CisKK1RZUEUgU2VsbGVyID0gT0JKRUNUCisgICAgRE9DVU1FTlRBVElPTiAiQSBzaW1wbGUgU2VsbGVyIGludGVyZmFjZSB0byB0ZXN0IElMVSIKKyAgICBNRVRIT0RTCisgICAgICAgICAgICBwcmljZSgpOklOVEVHRVIsCisgICAgRU5EOworJycnCisKK0JVWUVSID0gJycnXAorY2xhc3MgQnV5ZXI6CisgICAgZGVmIF9fc2V0dXBfXyhzZWxmLCBtYXhwcmljZSk6CisgICAgICAgIHNlbGYuX21heHByaWNlID0gbWF4cHJpY2UKKworICAgIGRlZiBfX21haW5fXyhzZWxmLCBrb3MpOgorICAgICAgICAiIiJFbnRyeSBwb2ludCB1cG9uIGFycml2YWwgYXQgYSBuZXcgS09TLiIiIgorICAgICAgICBicm9rZXIgPSBrb3MuYnJva2VyKCkKKyAgICAgICAgIyBCNCA9PSBCYXJyeSdzIEJpZyBCYXNzIEJ1c2luZXNzIDotKQorICAgICAgICBzZWxsZXIgPSBicm9rZXIubG9va3VwKCdTZWxsZXJfMS5TZWxsZXInLCAnQjQnKQorICAgICAgICBpZiBzZWxsZXI6CisgICAgICAgICAgICBwcmljZSA9IHNlbGxlci5wcmljZSgpCisgICAgICAgICAgICBwcmludCAnU2VsbGVyIHdhbnRzICQnLCBwcmljZSwgJy4uLiAnCisgICAgICAgICAgICBpZiBwcmljZSA+IHNlbGYuX21heHByaWNlOgorICAgICAgICAgICAgICAgIHByaW50ICd0b28gbXVjaCEnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICJJJ2xsIHRha2UgaXQhIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgJ25vIHNlbGxlciBmb3VuZCBoZXJlJworJycnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgYXNrIHdoeSB0aGlzIGNvbW1lbnQgaXMgaGVyZQorCitTVEFURSA9ICcnJ1wKKyMgaW5zdGFudGlhdGUgYSBidXllciBpbnN0YW5jZSBhbmQgcHV0IGl0IGluIGEgbWFnaWMgcGxhY2UgZm9yIHRoZSBLT1MKKyMgdG8gZmluZC4KK19fa3BfXyA9IEJ1eWVyKCkKK19fa3BfXy5fX3NldHVwX18oNTAwKQorJycnCisKK1NJTVBMRV9NRVRBREFUQSA9IFsKKyAgICAgICAgKCJJbnRlcnByZXRlciIsICJweXRob24iKSwKKyAgICAgICAgKCJJbnRlcnByZXRlci1WZXJzaW9uIiwgIjEuMyIpLAorICAgICAgICAoIk93bmVyLU5hbWUiLCAiQmFycnkgV2Fyc2F3IiksCisgICAgICAgICgiT3duZXItUmVuZGV6dm91cyIsICJid2Fyc2F3QGNucmkucmVzdG9uLnZhLnVzIiksCisgICAgICAgICgiSG9tZS1LU1MiLCAia3NzLmNucmkucmVzdG9uLnZhLnVzIiksCisgICAgICAgICgiSWRlbnRpZmllciIsICJoZGw6Ly9jbnJpLmtzcy9teV9maXJzdF9rbm93Ym90IiksCisgICAgICAgICgiTGF1bmNoLURhdGUiLCAiTW9uIEZlYiAxMiAxNjozOTowMyBFU1QgMTk5NiIpLAorICAgICAgICBdCisKK0NPTVBMRVhfTUVUQURBVEEgPSBbCisgICAgICAgICgiTWV0YWRhdGEtVHlwZSIsICJjb21wbGV4IiksCisgICAgICAgICgiTWV0YWRhdGEtS2V5IiwgImNvbm5lY3Rpb24iKSwKKyAgICAgICAgKCJBY2Nlc3MiLCAicmVhZC1vbmx5IiksCisgICAgICAgICgiQ29ubmVjdGlvbi1EZXNjcmlwdGlvbiIsICJCYXJyeSdzIEJpZyBCYXNzIEJ1c2luZXNzIiksCisgICAgICAgICgiQ29ubmVjdGlvbi1JZCIsICJCNCIpLAorICAgICAgICAoIkNvbm5lY3Rpb24tRGlyZWN0aW9uIiwgImNsaWVudCIpLAorICAgICAgICBdCisKK0VYVEVSTkFMX01FVEFEQVRBID0gWworICAgICAgICAoIk1ldGFkYXRhLVR5cGUiLCAiY29tcGxleCIpLAorICAgICAgICAoIk1ldGFkYXRhLUtleSIsICJnZW5lcmljLWludGVyZmFjZSIpLAorICAgICAgICAoIkFjY2VzcyIsICJyZWFkLW9ubHkiKSwKKyAgICAgICAgKCJDb25uZWN0aW9uLURlc2NyaXB0aW9uIiwgIkdlbmVyaWMgSW50ZXJmYWNlIGZvciBBbGwgS25vd2JvdHMiKSwKKyAgICAgICAgKCJDb25uZWN0aW9uLUlkIiwgImdlbmVyaWMta3AiKSwKKyAgICAgICAgKCJDb25uZWN0aW9uLURpcmVjdGlvbiIsICJjbGllbnQiKSwKKyAgICAgICAgXQorCisKK09VVFBVVCA9ICcnJ1wKK0Zyb206IGJ3YXJzYXdAY25yaS5yZXN0b24udmEudXMKK0RhdGU6IE1vbiBGZWIgMTIgMTc6MjE6NDggRVNUIDE5OTYKK1RvOiBrc3Mtc3VibWl0QGNucmkucmVzdG9uLnZhLnVzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQva25vd2JvdDsKKyAgICBib3VuZGFyeT0iODAxc3BhbTk5OSI7CisgICAgdmVyc2lvbj0iMC4xIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorCistLTgwMXNwYW05OTkKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2tub3dib3QtbWV0YWRhdGE7CisgICAgYm91bmRhcnk9IjgwMnNwYW05OTkiCisKKworLS04MDJzcGFtOTk5CitDb250ZW50LVR5cGU6IG1lc3NhZ2UvcmZjODIyCitLUC1NZXRhZGF0YS1UeXBlOiBzaW1wbGUKK0tQLUFjY2VzczogcmVhZC1vbmx5CisKK0tQTUQtSW50ZXJwcmV0ZXI6IHB5dGhvbgorS1BNRC1JbnRlcnByZXRlci1WZXJzaW9uOiAxLjMKK0tQTUQtT3duZXItTmFtZTogQmFycnkgV2Fyc2F3CitLUE1ELU93bmVyLVJlbmRlenZvdXM6IGJ3YXJzYXdAY25yaS5yZXN0b24udmEudXMKK0tQTUQtSG9tZS1LU1M6IGtzcy5jbnJpLnJlc3Rvbi52YS51cworS1BNRC1JZGVudGlmaWVyOiBoZGw6Ly9jbnJpLmtzcy9teV9maXJzdF9rbm93Ym90CitLUE1ELUxhdW5jaC1EYXRlOiBNb24gRmViIDEyIDE2OjM5OjAzIEVTVCAxOTk2CisKKy0tODAyc3BhbTk5OQorQ29udGVudC1UeXBlOiB0ZXh0L2lzbAorS1AtTWV0YWRhdGEtVHlwZTogY29tcGxleAorS1AtTWV0YWRhdGEtS2V5OiBjb25uZWN0aW9uCitLUC1BY2Nlc3M6IHJlYWQtb25seQorS1AtQ29ubmVjdGlvbi1EZXNjcmlwdGlvbjogQmFycnkncyBCaWcgQmFzcyBCdXNpbmVzcworS1AtQ29ubmVjdGlvbi1JZDogQjQKK0tQLUNvbm5lY3Rpb24tRGlyZWN0aW9uOiBjbGllbnQKKworSU5URVJGQUNFIFNlbGxlci0xOworCitUWVBFIFNlbGxlciA9IE9CSkVDVAorICAgIERPQ1VNRU5UQVRJT04gIkEgc2ltcGxlIFNlbGxlciBpbnRlcmZhY2UgdG8gdGVzdCBJTFUiCisgICAgTUVUSE9EUworICAgICAgICAgICAgcHJpY2UoKTpJTlRFR0VSLAorICAgIEVORDsKKworLS04MDJzcGFtOTk5CitDb250ZW50LVR5cGU6IG1lc3NhZ2UvZXh0ZXJuYWwtYm9keTsKKyAgICBhY2Nlc3MtdHlwZT0iVVJMIjsKKyAgICBVUkw9ImhkbDovL2Nucmkua3NzL2dlbmVyaWMta25vd2JvdCIKKworQ29udGVudC1UeXBlOiB0ZXh0L2lzbAorS1AtTWV0YWRhdGEtVHlwZTogY29tcGxleAorS1AtTWV0YWRhdGEtS2V5OiBnZW5lcmljLWludGVyZmFjZQorS1AtQWNjZXNzOiByZWFkLW9ubHkKK0tQLUNvbm5lY3Rpb24tRGVzY3JpcHRpb246IEdlbmVyaWMgSW50ZXJmYWNlIGZvciBBbGwgS25vd2JvdHMKK0tQLUNvbm5lY3Rpb24tSWQ6IGdlbmVyaWMta3AKK0tQLUNvbm5lY3Rpb24tRGlyZWN0aW9uOiBjbGllbnQKKworCistLTgwMnNwYW05OTktLQorCistLTgwMXNwYW05OTkKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2tub3dib3QtY29kZTsKKyAgICBib3VuZGFyeT0iODAzc3BhbTk5OSIKKworCistLTgwM3NwYW05OTkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorS1AtTW9kdWxlLU5hbWU6IEJ1eWVyS1AKKworY2xhc3MgQnV5ZXI6CisgICAgZGVmIF9fc2V0dXBfXyhzZWxmLCBtYXhwcmljZSk6CisgICAgICAgIHNlbGYuX21heHByaWNlID0gbWF4cHJpY2UKKworICAgIGRlZiBfX21haW5fXyhzZWxmLCBrb3MpOgorICAgICAgICAiIiJFbnRyeSBwb2ludCB1cG9uIGFycml2YWwgYXQgYSBuZXcgS09TLiIiIgorICAgICAgICBicm9rZXIgPSBrb3MuYnJva2VyKCkKKyAgICAgICAgIyBCNCA9PSBCYXJyeSdzIEJpZyBCYXNzIEJ1c2luZXNzIDotKQorICAgICAgICBzZWxsZXIgPSBicm9rZXIubG9va3VwKCdTZWxsZXJfMS5TZWxsZXInLCAnQjQnKQorICAgICAgICBpZiBzZWxsZXI6CisgICAgICAgICAgICBwcmljZSA9IHNlbGxlci5wcmljZSgpCisgICAgICAgICAgICBwcmludCAnU2VsbGVyIHdhbnRzICQnLCBwcmljZSwgJy4uLiAnCisgICAgICAgICAgICBpZiBwcmljZSA+IHNlbGYuX21heHByaWNlOgorICAgICAgICAgICAgICAgIHByaW50ICd0b28gbXVjaCEnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICJJJ2xsIHRha2UgaXQhIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgJ25vIHNlbGxlciBmb3VuZCBoZXJlJworCistLTgwM3NwYW05OTktLQorCistLTgwMXNwYW05OTkKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2tub3dib3Qtc3RhdGU7CisgICAgYm91bmRhcnk9IjgwNHNwYW05OTkiCitLUC1NYWluLU1vZHVsZTogbWFpbgorCisKKy0tODA0c3BhbTk5OQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCitLUC1Nb2R1bGUtTmFtZTogbWFpbgorCisjIGluc3RhbnRpYXRlIGEgYnV5ZXIgaW5zdGFuY2UgYW5kIHB1dCBpdCBpbiBhIG1hZ2ljIHBsYWNlIGZvciB0aGUgS09TCisjIHRvIGZpbmQuCitfX2twX18gPSBCdXllcigpCitfX2twX18uX19zZXR1cF9fKDUwMCkKKworLS04MDRzcGFtOTk5LS0KKworLS04MDFzcGFtOTk5LS0KKycnJworCitjbGFzcyBNaW1ld3JpdGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgYnVmID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorCisgICAgICAgICMgVG9wbGV2ZWwgaGVhZGVycworCisgICAgICAgIHRvcGxldmVsID0gTWltZVdyaXRlcihidWYpCisgICAgICAgIHRvcGxldmVsLmFkZGhlYWRlcigiRnJvbSIsICJid2Fyc2F3QGNucmkucmVzdG9uLnZhLnVzIikKKyAgICAgICAgdG9wbGV2ZWwuYWRkaGVhZGVyKCJEYXRlIiwgIk1vbiBGZWIgMTIgMTc6MjE6NDggRVNUIDE5OTYiKQorICAgICAgICB0b3BsZXZlbC5hZGRoZWFkZXIoIlRvIiwgImtzcy1zdWJtaXRAY25yaS5yZXN0b24udmEudXMiKQorICAgICAgICB0b3BsZXZlbC5hZGRoZWFkZXIoIk1JTUUtVmVyc2lvbiIsICIxLjAiKQorCisgICAgICAgICMgVG9wbGV2ZWwgYm9keSBwYXJ0cworCisgICAgICAgIGYgPSB0b3BsZXZlbC5zdGFydG11bHRpcGFydGJvZHkoImtub3dib3QiLCAiODAxc3BhbTk5OSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWygidmVyc2lvbiIsICIwLjEiKV0sIHByZWZpeD0wKQorICAgICAgICBmLndyaXRlKCJUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LlxuIikKKworICAgICAgICAjIEZpcnN0IHRvcGxldmVsIGJvZHkgcGFydDogbWV0YWRhdGEKKworICAgICAgICBtZCA9IHRvcGxldmVsLm5leHRwYXJ0KCkKKyAgICAgICAgbWQuc3RhcnRtdWx0aXBhcnRib2R5KCJrbm93Ym90LW1ldGFkYXRhIiwgIjgwMnNwYW05OTkiKQorCisgICAgICAgICMgTWV0YWRhdGEgcGFydCAxCisKKyAgICAgICAgbWQxID0gbWQubmV4dHBhcnQoKQorICAgICAgICBtZDEuYWRkaGVhZGVyKCJLUC1NZXRhZGF0YS1UeXBlIiwgInNpbXBsZSIpCisgICAgICAgIG1kMS5hZGRoZWFkZXIoIktQLUFjY2VzcyIsICJyZWFkLW9ubHkiKQorICAgICAgICBtID0gTWltZVdyaXRlcihtZDEuc3RhcnRib2R5KCJtZXNzYWdlL3JmYzgyMiIpKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBTSU1QTEVfTUVUQURBVEE6CisgICAgICAgICAgICBtLmFkZGhlYWRlcigiS1BNRC0iICsga2V5LCB2YWx1ZSkKKyAgICAgICAgbS5mbHVzaGhlYWRlcnMoKQorICAgICAgICBkZWwgbWQxCisKKyAgICAgICAgIyBNZXRhZGF0YSBwYXJ0IDIKKworICAgICAgICBtZDIgPSBtZC5uZXh0cGFydCgpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIENPTVBMRVhfTUVUQURBVEE6CisgICAgICAgICAgICBtZDIuYWRkaGVhZGVyKCJLUC0iICsga2V5LCB2YWx1ZSkKKyAgICAgICAgZiA9IG1kMi5zdGFydGJvZHkoInRleHQvaXNsIikKKyAgICAgICAgZi53cml0ZShTRUxMRVIpCisgICAgICAgIGRlbCBtZDIKKworICAgICAgICAjIE1ldGFkYXRhIHBhcnQgMworCisgICAgICAgIG1kMyA9IG1kLm5leHRwYXJ0KCkKKyAgICAgICAgZiA9IG1kMy5zdGFydGJvZHkoIm1lc3NhZ2UvZXh0ZXJuYWwtYm9keSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsoImFjY2Vzcy10eXBlIiwgIlVSTCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJVUkwiLCAiaGRsOi8vY25yaS5rc3MvZ2VuZXJpYy1rbm93Ym90IildKQorICAgICAgICBtID0gTWltZVdyaXRlcihmKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBFWFRFUk5BTF9NRVRBREFUQToKKyAgICAgICAgICAgIG1kMy5hZGRoZWFkZXIoIktQLSIgKyBrZXksIHZhbHVlKQorICAgICAgICBtZDMuc3RhcnRib2R5KCJ0ZXh0L2lzbCIpCisgICAgICAgICMgUGhhbnRvbSBib2R5IGRvZXNuJ3QgbmVlZCB0byBiZSB3cml0dGVuCisKKyAgICAgICAgbWQubGFzdHBhcnQoKQorCisgICAgICAgICMgU2Vjb25kIHRvcGxldmVsIGJvZHkgcGFydDogY29kZQorCisgICAgICAgIGNvZGUgPSB0b3BsZXZlbC5uZXh0cGFydCgpCisgICAgICAgIGNvZGUuc3RhcnRtdWx0aXBhcnRib2R5KCJrbm93Ym90LWNvZGUiLCAiODAzc3BhbTk5OSIpCisKKyAgICAgICAgIyBDb2RlOiBidXllciBwcm9ncmFtIHNvdXJjZQorCisgICAgICAgIGJ1eWVyID0gY29kZS5uZXh0cGFydCgpCisgICAgICAgIGJ1eWVyLmFkZGhlYWRlcigiS1AtTW9kdWxlLU5hbWUiLCAiQnV5ZXJLUCIpCisgICAgICAgIGYgPSBidXllci5zdGFydGJvZHkoInRleHQvcGxhaW4iKQorICAgICAgICBmLndyaXRlKEJVWUVSKQorCisgICAgICAgIGNvZGUubGFzdHBhcnQoKQorCisgICAgICAgICMgVGhpcmQgdG9wbGV2ZWwgYm9keSBwYXJ0OiBzdGF0ZQorCisgICAgICAgIHN0YXRlID0gdG9wbGV2ZWwubmV4dHBhcnQoKQorICAgICAgICBzdGF0ZS5hZGRoZWFkZXIoIktQLU1haW4tTW9kdWxlIiwgIm1haW4iKQorICAgICAgICBzdGF0ZS5zdGFydG11bHRpcGFydGJvZHkoImtub3dib3Qtc3RhdGUiLCAiODA0c3BhbTk5OSIpCisKKyAgICAgICAgIyBTdGF0ZTogYSBidW5jaCBvZiBhc3NpZ25tZW50cworCisgICAgICAgIHN0ID0gc3RhdGUubmV4dHBhcnQoKQorICAgICAgICBzdC5hZGRoZWFkZXIoIktQLU1vZHVsZS1OYW1lIiwgIm1haW4iKQorICAgICAgICBmID0gc3Quc3RhcnRib2R5KCJ0ZXh0L3BsYWluIikKKyAgICAgICAgZi53cml0ZShTVEFURSkKKworICAgICAgICBzdGF0ZS5sYXN0cGFydCgpCisKKyAgICAgICAgIyBFbmQgdG9wbGV2ZWwgYm9keSBwYXJ0cworCisgICAgICAgIHRvcGxldmVsLmxhc3RwYXJ0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi5nZXR2YWx1ZSgpLCBPVVRQVVQpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoTWltZXdyaXRlclRlc3QpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X1NpbXBsZUhUVFBTZXJ2ZXIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9TaW1wbGVIVFRQU2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZWM4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9TaW1wbGVIVFRQU2VydmVyLnB5CkBAIC0wLDAgKzEsNDEgQEAKKyIiIgorVGhlc2UgdGVzdHMgb25seSBjaGVjayB1cmwgcGFyc2luZyBmb3Igbm93LgorV2UgZG9uJ3Qgd2FudCB0byByZXF1aXJlIHRoZSAnbmV0d29yaycgcmVzb3VyY2UuCisiIiIKKworaW1wb3J0IG9zLCB1bml0dGVzdAorZnJvbSBTaW1wbGVIVFRQU2VydmVyIGltcG9ydCBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKworY2xhc3MgU29ja2V0bGVzc1JlcXVlc3RIYW5kbGVyIChTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgcGFzcworCitjbGFzcyBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiIFRlc3QgdXJsIHBhcnNpbmcgIiIiCisgICAgZGVmIHNldFVwIChzZWxmKToKKyAgICAgICAgc2VsZi50cmFuc2xhdGVkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgc2VsZi50cmFuc2xhdGVkID0gb3MucGF0aC5qb2luKHNlbGYudHJhbnNsYXRlZCwgJ2ZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gU29ja2V0bGVzc1JlcXVlc3RIYW5kbGVyICgpCisKKyAgICBkZWYgdGVzdF9xdWVyeUFyZ3VtZW50cyAoc2VsZik6CisgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGggKCcvZmlsZW5hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsIChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCisgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGggKCcvZmlsZW5hbWU/Zm9vPWJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwgKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKKyAgICAgICAgcGF0aCA9IHNlbGYuaGFuZGxlci50cmFuc2xhdGVfcGF0aCAoJy9maWxlbmFtZT9hPWImc3BhbT1lZ2dzI3pvdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwgKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKKworICAgIGRlZiB0ZXN0X3N0YXJ0V2l0aERvdWJsZVNsYXNoIChzZWxmKToKKyAgICAgICAgcGF0aCA9IHNlbGYuaGFuZGxlci50cmFuc2xhdGVfcGF0aCAoJy8vZmlsZW5hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsIChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCisgICAgICAgIHBhdGggPSBzZWxmLmhhbmRsZXIudHJhbnNsYXRlX3BhdGggKCcvL2ZpbGVuYW1lP2Zvbz1iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsIChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X1N0cmluZ0lPLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfU3RyaW5nSU8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJmMzA3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X1N0cmluZ0lPLnB5CkBAIC0wLDAgKzEsMjI0IEBACisjIFRlc3RzIFN0cmluZ0lPIGFuZCBjU3RyaW5nSU8KKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBjU3RyaW5nSU8KK2ltcG9ydCB0eXBlcworaW1wb3J0IGFycmF5CitpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK2NsYXNzIFRlc3RHZW5lcmljU3RyaW5nSU8odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgdXNlIGEgY2xhc3MgdmFyaWFibGUgTU9EVUxFIHRvIGRlZmluZSB3aGljaCBtb2R1bGUgaXMgYmVpbmcgdGVzdGVkCisKKyAgICAjIExpbmUgb2YgZGF0YSB0byB0ZXN0IGFzIHN0cmluZworICAgIF9saW5lID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVohJworCisgICAgIyBDb25zdHJ1Y3RvciB0byB1c2UgZm9yIHRoZSB0ZXN0IGRhdGEgKC5fbGluZSBpcyBwYXNzZWQgdG8gdGhpcworICAgICMgY29uc3RydWN0b3IpCisgICAgY29uc3RydWN0b3IgPSBzdHIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fbGluZXMgPSBzZWxmLmNvbnN0cnVjdG9yKChzZWxmLl9saW5lICsgJ1xuJykgKiA1KQorICAgICAgICBzZWxmLl9mcCA9IHNlbGYuTU9EVUxFLlN0cmluZ0lPKHNlbGYuX2xpbmVzKQorCisgICAgZGVmIHRlc3RfcmVhZHMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuX2ZwLnNlZWspCisgICAgICAgIGVxKHNlbGYuX2ZwLnJlYWQoMTApLCBzZWxmLl9saW5lWzoxMF0pCisgICAgICAgIGVxKHNlbGYuX2ZwLnJlYWQoMCksICcnKQorICAgICAgICBlcShzZWxmLl9mcC5yZWFkbGluZSgwKSwgJycpCisgICAgICAgIGVxKHNlbGYuX2ZwLnJlYWRsaW5lKCksIHNlbGYuX2xpbmVbMTA6XSArICdcbicpCisgICAgICAgIGVxKGxlbihzZWxmLl9mcC5yZWFkbGluZXMoNjApKSwgMikKKyAgICAgICAgc2VsZi5fZnAuc2VlaygwKQorICAgICAgICBlcShzZWxmLl9mcC5yZWFkbGluZSgtMSksIHNlbGYuX2xpbmUgKyAnXG4nKQorCisgICAgZGVmIHRlc3Rfd3JpdGVzKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5NT0RVTEUuU3RyaW5nSU8oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYuc2VlaykKKyAgICAgICAgZi53cml0ZShzZWxmLl9saW5lWzo2XSkKKyAgICAgICAgZi5zZWVrKDMpCisgICAgICAgIGYud3JpdGUoc2VsZi5fbGluZVsyMDoyNl0pCisgICAgICAgIGYud3JpdGUoc2VsZi5fbGluZVs1Ml0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXR2YWx1ZSgpLCAnYWJjdXZ3eHl6IScpCisKKyAgICBkZWYgdGVzdF93cml0ZWxpbmVzKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5NT0RVTEUuU3RyaW5nSU8oKQorICAgICAgICBmLndyaXRlbGluZXMoW3NlbGYuX2xpbmVbMF0sIHNlbGYuX2xpbmVbMV0sIHNlbGYuX2xpbmVbMl1dKQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHZhbHVlKCksICdhYmMnKQorCisgICAgZGVmIHRlc3Rfd3JpdGVsaW5lc19lcnJvcihzZWxmKToKKyAgICAgICAgZGVmIGVycm9yR2VuKCk6CisgICAgICAgICAgICB5aWVsZCAnYScKKyAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0KCkKKyAgICAgICAgZiA9IHNlbGYuTU9EVUxFLlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQsIGYud3JpdGVsaW5lcywgZXJyb3JHZW4oKSkKKworICAgIGRlZiB0ZXN0X3RydW5jYXRlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZiA9IHNlbGYuTU9EVUxFLlN0cmluZ0lPKCkKKyAgICAgICAgZi53cml0ZShzZWxmLl9saW5lcykKKyAgICAgICAgZi5zZWVrKDEwKQorICAgICAgICBmLnRydW5jYXRlKCkKKyAgICAgICAgZXEoZi5nZXR2YWx1ZSgpLCAnYWJjZGVmZ2hpaicpCisgICAgICAgIGYudHJ1bmNhdGUoNSkKKyAgICAgICAgZXEoZi5nZXR2YWx1ZSgpLCAnYWJjZGUnKQorICAgICAgICBmLndyaXRlKCd4eXonKQorICAgICAgICBlcShmLmdldHZhbHVlKCksICdhYmNkZXh5eicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGYudHJ1bmNhdGUsIC0xKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi53cml0ZSwgJ2Zyb2JuaXR6JykKKworICAgIGRlZiB0ZXN0X2Nsb3NlZF9mbGFnKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5NT0RVTEUuU3RyaW5nSU8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuY2xvc2VkLCBGYWxzZSkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5jbG9zZWQsIFRydWUpCisgICAgICAgIGYgPSBzZWxmLk1PRFVMRS5TdHJpbmdJTygiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmNsb3NlZCwgRmFsc2UpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuY2xvc2VkLCBUcnVlKQorCisgICAgZGVmIHRlc3RfaXNhdHR5KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5NT0RVTEUuU3RyaW5nSU8oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYuaXNhdHR5LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuaXNhdHR5KCksIEZhbHNlKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5pc2F0dHkpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRvcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHVubGVzcyA9IHNlbGYuYXNzZXJ0VHJ1ZQorICAgICAgICBlcShpdGVyKHNlbGYuX2ZwKSwgc2VsZi5fZnApCisgICAgICAgICMgRG9lcyB0aGlzIG9iamVjdCBzdXBwb3J0IHRoZSBpdGVyYXRpb24gcHJvdG9jb2w/CisgICAgICAgIHVubGVzcyhoYXNhdHRyKHNlbGYuX2ZwLCAnX19pdGVyX18nKSkKKyAgICAgICAgdW5sZXNzKGhhc2F0dHIoc2VsZi5fZnAsICduZXh0JykpCisgICAgICAgIGkgPSAwCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuX2ZwOgorICAgICAgICAgICAgZXEobGluZSwgc2VsZi5fbGluZSArICdcbicpCisgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgZXEoaSwgNSkKKyAgICAgICAgc2VsZi5fZnAuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLl9mcC5uZXh0KQorCisgICAgZGVmIHRlc3RfZ2V0dmFsdWUoc2VsZik6CisgICAgICAgIHNlbGYuX2ZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5fZnAuZ2V0dmFsdWUpCisKKyAgICBAdGVzdF9zdXBwb3J0LmJpZ21lbXRlc3QodGVzdF9zdXBwb3J0Ll8yRyArIDIqKjI2LCBtZW11c2U9Mi4wMDEpCisgICAgZGVmIHRlc3RfcmVhZHNfZnJvbV9sYXJnZV9zdHJlYW0oc2VsZiwgc2l6ZSk6CisgICAgICAgIGxpbmVzaXplID0gMioqMjYgIyA2NCBNaUIKKyAgICAgICAgbGluZXMgPSBbJ3gnICogKGxpbmVzaXplIC0gMSkgKyAnXG4nXSAqIChzaXplIC8vIGxpbmVzaXplKSArIFwKKyAgICAgICAgICAgICAgICBbJ3knICogKHNpemUgJSBsaW5lc2l6ZSldCisgICAgICAgIGYgPSBzZWxmLk1PRFVMRS5TdHJpbmdJTygnJy5qb2luKGxpbmVzKSkKKyAgICAgICAgZm9yIGksIGV4cGVjdGVkIGluIGVudW1lcmF0ZShsaW5lcyk6CisgICAgICAgICAgICBsaW5lID0gZi5yZWFkKGxlbihleHBlY3RlZCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaW5lKSwgbGVuKGV4cGVjdGVkKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICcnKQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgZm9yIGksIGV4cGVjdGVkIGluIGVudW1lcmF0ZShsaW5lcyk6CisgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaW5lKSwgbGVuKGV4cGVjdGVkKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgpLCAnJykKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZXMoKSwgbGluZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZXMoKSwgW10pCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmVzKHNpemUpLCBsaW5lcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygpLCBbXSkKKworICAgICMgSW4gd29yc3QgY2FzZSBjU3RyaW5nSU8gcmVxdWlyZXMgMiArIDEgKyAxLzIgKyAxLzIqKjIgKyAuLi4gPSA0CisgICAgIyBieXRlcyBwZXIgaW5wdXQgY2hhcmFjdGVyLgorICAgIEB0ZXN0X3N1cHBvcnQuYmlnbWVtdGVzdCh0ZXN0X3N1cHBvcnQuXzJHLCBtZW11c2U9NCkKKyAgICBkZWYgdGVzdF93cml0ZXNfdG9fbGFyZ2Vfc3RyZWFtKHNlbGYsIHNpemUpOgorICAgICAgICBzID0gJ3gnICogMioqMjYgIyA2NCBNaUIKKyAgICAgICAgZiA9IHNlbGYuTU9EVUxFLlN0cmluZ0lPKCkKKyAgICAgICAgbiA9IHNpemUKKyAgICAgICAgd2hpbGUgbiA+IGxlbihzKToKKyAgICAgICAgICAgIGYud3JpdGUocykKKyAgICAgICAgICAgIG4gLT0gbGVuKHMpCisgICAgICAgIHMgPSBOb25lCisgICAgICAgIGYud3JpdGUoJ3gnICogbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZi5nZXR2YWx1ZSgpKSwgc2l6ZSkKKworCitjbGFzcyBUZXN0U3RyaW5nSU8oVGVzdEdlbmVyaWNTdHJpbmdJTyk6CisgICAgTU9EVUxFID0gU3RyaW5nSU8KKworICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisKKyAgICAgICAgaWYgbm90IHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6IHJldHVybgorCisgICAgICAgICMgVGhlIFN0cmluZ0lPIG1vZHVsZSBhbHNvIHN1cHBvcnRzIGNvbmNhdGVuYXRpbmcgVW5pY29kZQorICAgICAgICAjIHNuaXBwZXRzIHRvIGxhcmdlciBVbmljb2RlIHN0cmluZ3MuIFRoaXMgaXMgdGVzdGVkIGJ5IHRoaXMKKyAgICAgICAgIyBtZXRob2QuIE5vdGUgdGhhdCBjU3RyaW5nSU8gZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGV4dGVuc2lvbi4KKworICAgICAgICBmID0gc2VsZi5NT0RVTEUuU3RyaW5nSU8oKQorICAgICAgICBmLndyaXRlKHNlbGYuX2xpbmVbOjZdKQorICAgICAgICBmLnNlZWsoMykKKyAgICAgICAgZi53cml0ZSh1bmljb2RlKHNlbGYuX2xpbmVbMjA6MjZdKSkKKyAgICAgICAgZi53cml0ZSh1bmljb2RlKHNlbGYuX2xpbmVbNTJdKSkKKyAgICAgICAgcyA9IGYuZ2V0dmFsdWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHVuaWNvZGUoJ2FiY3V2d3h5eiEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHMpLCB0eXBlcy5Vbmljb2RlVHlwZSkKKworY2xhc3MgVGVzdGNTdHJpbmdJTyhUZXN0R2VuZXJpY1N0cmluZ0lPKToKKyAgICBNT0RVTEUgPSBjU3RyaW5nSU8KKworICAgIGRlZiB0ZXN0X2FycmF5X3N1cHBvcnQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE3MzAxMTQ6IGNTdHJpbmdJTyBzaG91bGQgYWNjZXB0IGFycmF5IG9iamVjdHMKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KCdCJywgWzAsMSwyXSkKKyAgICAgICAgZiA9IHNlbGYuTU9EVUxFLlN0cmluZ0lPKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXR2YWx1ZSgpLCAnXHgwMFx4MDFceDAyJykKKworICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisKKyAgICAgICAgaWYgbm90IHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6IHJldHVybgorCisgICAgICAgICMgVGhlIGNTdHJpbmdJTyBtb2R1bGUgY29udmVydHMgVW5pY29kZSBzdHJpbmdzIHRvIGNoYXJhY3RlcgorICAgICAgICAjIHN0cmluZ3Mgd2hlbiB3cml0aW5nIHRoZW0gdG8gY1N0cmluZ0lPIG9iamVjdHMuCisgICAgICAgICMgQ2hlY2sgdGhhdCB0aGlzIHdvcmtzLgorCisgICAgICAgIGYgPSBzZWxmLk1PRFVMRS5TdHJpbmdJTygpCisgICAgICAgIGYud3JpdGUodSdhYmNkZScpCisgICAgICAgIHMgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAnYWJjZGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocyksIHN0cikKKworICAgICAgICBmID0gc2VsZi5NT0RVTEUuU3RyaW5nSU8odSdhYmNkZScpCisgICAgICAgIHMgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAnYWJjZGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocyksIHN0cikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsIHNlbGYuTU9EVUxFLlN0cmluZ0lPLCB1J1x4ZjQnKQorCisKK2ltcG9ydCBzeXMKK2lmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdqYXZhJyk6CisgICAgIyBKeXRob24gZG9lc24ndCBoYXZlIGEgYnVmZmVyIG9iamVjdCwgc28gd2UganVzdCBkbyBhIHVzZWxlc3MKKyAgICAjIGZha2Ugb2YgdGhlIGJ1ZmZlciB0ZXN0cy4KKyAgICBidWZmZXIgPSBzdHIKKworY2xhc3MgVGVzdEJ1ZmZlclN0cmluZ0lPKFRlc3RTdHJpbmdJTyk6CisgICAgY29uc3RydWN0b3IgPSBidWZmZXIKKworY2xhc3MgVGVzdEJ1ZmZlcmNTdHJpbmdJTyhUZXN0Y1N0cmluZ0lPKToKKyAgICBjb25zdHJ1Y3RvciA9IGJ1ZmZlcgorCitjbGFzcyBUZXN0TWVtb3J5dmlld2NTdHJpbmdJTyhUZXN0Y1N0cmluZ0lPKToKKyAgICBjb25zdHJ1Y3RvciA9IG1lbW9yeXZpZXcKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0U3RyaW5nSU8sIFRlc3RjU3RyaW5nSU8pCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygoImJ1ZmZlci4uIG5vdCBzdXBwb3J0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEJ1ZmZlclN0cmluZ0lPLCBUZXN0QnVmZmVyY1N0cmluZ0lPKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdE1lbW9yeXZpZXdjU3RyaW5nSU8pCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X19fYWxsX18ucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9fX2FsbF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNWRiZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9fX2FsbF9fLnB5CkBAIC0wLDAgKzEsMTIzIEBACitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKKyMgU2V0dXAgYnNkZGIgd2FybmluZ3MKK3RyeToKKyAgICBic2RkYiA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnYnNkZGInLCBkZXByZWNhdGVkPVRydWUpCitleGNlcHQgdW5pdHRlc3QuU2tpcFRlc3Q6CisgICAgcGFzcworCisKK2NsYXNzIE5vQWxsKFJ1bnRpbWVFcnJvcik6CisgICAgcGFzcworCitjbGFzcyBGYWlsZWRJbXBvcnQoUnVudGltZUVycm9yKToKKyAgICBwYXNzCisKKworY2xhc3MgQWxsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY2hlY2tfYWxsKHNlbGYsIG1vZG5hbWUpOgorICAgICAgICBuYW1lcyA9IHt9CisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoIi4qIChtb2R1bGV8cGFja2FnZSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZyksIHF1aWV0PVRydWUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV4ZWMgImltcG9ydCAlcyIgJSBtb2RuYW1lIGluIG5hbWVzCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgIyBTaWxlbnQgZmFpbCBoZXJlIHNlZW1zIHRoZSBiZXN0IHJvdXRlIHNpbmNlIHNvbWUgbW9kdWxlcworICAgICAgICAgICAgICAgICMgbWF5IG5vdCBiZSBhdmFpbGFibGUgb3Igbm90IGluaXRpYWxpemUgcHJvcGVybHkgaW4gYWxsCisgICAgICAgICAgICAgICAgIyBlbnZpcm9ubWVudHMuCisgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkSW1wb3J0KG1vZG5hbWUpCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHN5cy5tb2R1bGVzW21vZG5hbWVdLCAiX19hbGxfXyIpOgorICAgICAgICAgICAgcmFpc2UgTm9BbGwobW9kbmFtZSkKKyAgICAgICAgbmFtZXMgPSB7fQorICAgICAgICB0cnk6CisgICAgICAgICAgICBleGVjICJmcm9tICVzIGltcG9ydCAqIiAlIG1vZG5hbWUgaW4gbmFtZXMKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgIyBJbmNsdWRlIHRoZSBtb2R1bGUgbmFtZSBpbiB0aGUgZXhjZXB0aW9uIHN0cmluZworICAgICAgICAgICAgc2VsZi5mYWlsKCJfX2FsbF9fIGZhaWx1cmUgaW4ge306IHt9OiB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgIG1vZG5hbWUsIGUuX19jbGFzc19fLl9fbmFtZV9fLCBlKSkKKyAgICAgICAgaWYgIl9fYnVpbHRpbnNfXyIgaW4gbmFtZXM6CisgICAgICAgICAgICBkZWwgbmFtZXNbIl9fYnVpbHRpbnNfXyJdCisgICAgICAgIGtleXMgPSBzZXQobmFtZXMpCisgICAgICAgIGFsbCA9IHNldChzeXMubW9kdWxlc1ttb2RuYW1lXS5fX2FsbF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIGFsbCkKKworICAgIGRlZiB3YWxrX21vZHVsZXMoc2VsZiwgYmFzZWRpciwgbW9kcGF0aCk6CisgICAgICAgIGZvciBmbiBpbiBzb3J0ZWQob3MubGlzdGRpcihiYXNlZGlyKSk6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGJhc2VkaXIsIGZuKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgICAgICBwa2dfaW5pdCA9IG9zLnBhdGguam9pbihwYXRoLCAnX19pbml0X18ucHknKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBrZ19pbml0KToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgcGtnX2luaXQsIG1vZHBhdGggKyBmbgorICAgICAgICAgICAgICAgICAgICBmb3IgcCwgbSBpbiBzZWxmLndhbGtfbW9kdWxlcyhwYXRoLCBtb2RwYXRoICsgZm4gKyAiLiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgcCwgbQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3QgZm4uZW5kc3dpdGgoJy5weScpIG9yIGZuID09ICdfX2luaXRfXy5weSc6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHlpZWxkIHBhdGgsIG1vZHBhdGggKyBmbls6LTNdCisKKyAgICBkZWYgdGVzdF9hbGwoc2VsZik6CisgICAgICAgICMgQmxhY2tsaXN0ZWQgbW9kdWxlcyBhbmQgcGFja2FnZXMKKyAgICAgICAgYmxhY2tsaXN0ID0gc2V0KFsKKyAgICAgICAgICAgICMgV2lsbCByYWlzZSBhIFN5bnRheEVycm9yIHdoZW4gY29tcGlsaW5nIHRoZSBleGVjIHN0YXRlbWVudAorICAgICAgICAgICAgJ19fZnV0dXJlX18nLAorICAgICAgICBdKQorCisgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgorICAgICAgICAgICAgIyBJbiBjYXNlIF9zb2NrZXQgZmFpbHMgdG8gYnVpbGQsIG1ha2UgdGhpcyB0ZXN0IGZhaWwgbW9yZSBncmFjZWZ1bGx5CisgICAgICAgICAgICAjIHRoYW4gYW4gQXR0cmlidXRlRXJyb3Igc29tZXdoZXJlIGRlZXAgaW4gQ0dJSFRUUFNlcnZlci4KKyAgICAgICAgICAgIGltcG9ydCBfc29ja2V0CisKKyAgICAgICAgIyBybGNvbXBsZXRlciBuZWVkcyBzcGVjaWFsIGNvbnNpZGVyYXRpb247IGl0IGltcG9ydCByZWFkbGluZSB3aGljaAorICAgICAgICAjIGluaXRpYWxpemVzIEdOVSByZWFkbGluZSB3aGljaCBjYWxscyBzZXRsb2NhbGUoTENfQ1RZUEUsICIiKS4uLiA6LSgKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHJsY29tcGxldGVyCisgICAgICAgICAgICBpbXBvcnQgbG9jYWxlCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0NUWVBFLCAnQycpCisKKyAgICAgICAgaWdub3JlZCA9IFtdCisgICAgICAgIGZhaWxlZF9pbXBvcnRzID0gW10KKyAgICAgICAgbGliX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQorICAgICAgICBmb3IgcGF0aCwgbW9kbmFtZSBpbiBzZWxmLndhbGtfbW9kdWxlcyhsaWJfZGlyLCAiIik6CisgICAgICAgICAgICBtID0gbW9kbmFtZQorICAgICAgICAgICAgYmxhY2tsaXN0ZWQgPSBGYWxzZQorICAgICAgICAgICAgd2hpbGUgbToKKyAgICAgICAgICAgICAgICBpZiBtIGluIGJsYWNrbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgYmxhY2tsaXN0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgbSA9IG0ucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgICAgICBpZiBibGFja2xpc3RlZDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KG1vZG5hbWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBUaGlzIGhldXJpc3RpYyBzcGVlZHMgdXAgdGhlIHByb2Nlc3MgYnkgcmVtb3ZpbmcsIGRlIGZhY3RvLAorICAgICAgICAgICAgICAgICMgbW9zdCB0ZXN0IG1vZHVsZXMgKGFuZCBhdm9pZGluZyB0aGUgYXV0by1leGVjdXRpbmcgb25lcykuCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGlmICJfX2FsbF9fIiBub3QgaW4gZi5yZWFkKCk6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBOb0FsbChtb2RuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2FsbChtb2RuYW1lKQorICAgICAgICAgICAgZXhjZXB0IE5vQWxsOgorICAgICAgICAgICAgICAgIGlnbm9yZWQuYXBwZW5kKG1vZG5hbWUpCisgICAgICAgICAgICBleGNlcHQgRmFpbGVkSW1wb3J0OgorICAgICAgICAgICAgICAgIGZhaWxlZF9pbXBvcnRzLmFwcGVuZChtb2RuYW1lKQorCisgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCdGb2xsb3dpbmcgbW9kdWxlcyBoYXZlIG5vIF9fYWxsX18gYW5kIGhhdmUgYmVlbiBpZ25vcmVkOicsCisgICAgICAgICAgICAgICAgICBpZ25vcmVkKQorICAgICAgICAgICAgcHJpbnQoJ0ZvbGxvd2luZyBtb2R1bGVzIGZhaWxlZCB0byBiZSBpbXBvcnRlZDonLCBmYWlsZWRfaW1wb3J0cykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQWxsVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfX19mdXR1cmVfXy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X19fZnV0dXJlX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4ZjhlNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X19fZnV0dXJlX18ucHkKQEAgLTAsMCArMSw2NiBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IF9fZnV0dXJlX18KKworR09PRF9TRVJJQUxTID0gKCJhbHBoYSIsICJiZXRhIiwgImNhbmRpZGF0ZSIsICJmaW5hbCIpCisKK2ZlYXR1cmVzID0gX19mdXR1cmVfXy5hbGxfZmVhdHVyZV9uYW1lcworCitjbGFzcyBGdXR1cmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X25hbWVzKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IGFsbF9mZWF0dXJlX25hbWVzIGFwcGVhcnMgY29ycmVjdC4KKyAgICAgICAgZ2l2ZW5fZmVhdHVyZV9uYW1lcyA9IGZlYXR1cmVzWzpdCisgICAgICAgIGZvciBuYW1lIGluIGRpcihfX2Z1dHVyZV9fKToKKyAgICAgICAgICAgIG9iaiA9IGdldGF0dHIoX19mdXR1cmVfXywgbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIGlmIG9iaiBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShvYmosIF9fZnV0dXJlX18uX0ZlYXR1cmUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICAgICAgICAgbmFtZSBpbiBnaXZlbl9mZWF0dXJlX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAiJXIgc2hvdWxkIGhhdmUgYmVlbiBpbiBhbGxfZmVhdHVyZV9uYW1lcyIgJSBuYW1lCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGdpdmVuX2ZlYXR1cmVfbmFtZXMucmVtb3ZlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdpdmVuX2ZlYXR1cmVfbmFtZXMpLCAwLAorICAgICAgICAgICAgICAgImFsbF9mZWF0dXJlX25hbWVzIGhhcyB0b28gbXVjaDogJXIiICUgZ2l2ZW5fZmVhdHVyZV9uYW1lcykKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIGZvciBmZWF0dXJlIGluIGZlYXR1cmVzOgorICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKF9fZnV0dXJlX18sIGZlYXR1cmUpCisKKyAgICAgICAgICAgIG9wdGlvbmFsID0gdmFsdWUuZ2V0T3B0aW9uYWxSZWxlYXNlKCkKKyAgICAgICAgICAgIG1hbmRhdG9yeSA9IHZhbHVlLmdldE1hbmRhdG9yeVJlbGVhc2UoKQorCisgICAgICAgICAgICBhID0gc2VsZi5hc3NlcnRUcnVlCisgICAgICAgICAgICBlID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAgICAgZGVmIGNoZWNrKHQsIG5hbWUpOgorICAgICAgICAgICAgICAgIGEoaXNpbnN0YW5jZSh0LCB0dXBsZSksICIlcyBpc24ndCB0dXBsZSIgJSBuYW1lKQorICAgICAgICAgICAgICAgIGUobGVuKHQpLCA1LCAiJXMgaXNuJ3QgNS10dXBsZSIgJSBuYW1lKQorICAgICAgICAgICAgICAgIChtYWpvciwgbWlub3IsIG1pY3JvLCBsZXZlbCwgc2VyaWFsKSA9IHQKKyAgICAgICAgICAgICAgICBhKGlzaW5zdGFuY2UobWFqb3IsIGludCksICIlcyBtYWpvciBpc24ndCBpbnQiICAlIG5hbWUpCisgICAgICAgICAgICAgICAgYShpc2luc3RhbmNlKG1pbm9yLCBpbnQpLCAiJXMgbWlub3IgaXNuJ3QgaW50IiAlIG5hbWUpCisgICAgICAgICAgICAgICAgYShpc2luc3RhbmNlKG1pY3JvLCBpbnQpLCAiJXMgbWljcm8gaXNuJ3QgaW50IiAlIG5hbWUpCisgICAgICAgICAgICAgICAgYShpc2luc3RhbmNlKGxldmVsLCBiYXNlc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgIiVzIGxldmVsIGlzbid0IHN0cmluZyIgJSBuYW1lKQorICAgICAgICAgICAgICAgIGEobGV2ZWwgaW4gR09PRF9TRVJJQUxTLAorICAgICAgICAgICAgICAgICAgICAgICAiJXMgbGV2ZWwgc3RyaW5nIGhhcyB1bmtub3duIHZhbHVlIiAlIG5hbWUpCisgICAgICAgICAgICAgICAgYShpc2luc3RhbmNlKHNlcmlhbCwgaW50KSwgIiVzIHNlcmlhbCBpc24ndCBpbnQiICUgbmFtZSkKKworICAgICAgICAgICAgY2hlY2sob3B0aW9uYWwsICJvcHRpb25hbCIpCisgICAgICAgICAgICBpZiBtYW5kYXRvcnkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgY2hlY2sobWFuZGF0b3J5LCAibWFuZGF0b3J5IikKKyAgICAgICAgICAgICAgICBhKG9wdGlvbmFsIDwgbWFuZGF0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uYWwgbm90IGxlc3MgdGhhbiBtYW5kYXRvcnksIGFuZCBtYW5kYXRvcnkgbm90IE5vbmUiKQorCisgICAgICAgICAgICBhKGhhc2F0dHIodmFsdWUsICJjb21waWxlcl9mbGFnIiksCisgICAgICAgICAgICAgICAgICAgImZlYXR1cmUgaXMgbWlzc2luZyBhIC5jb21waWxlcl9mbGFnIGF0dHIiKQorICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGNvbXBpbGUgYWNjZXB0cyB0aGUgZmxhZy4KKyAgICAgICAgICAgIGNvbXBpbGUoIiIsICI8dGVzdD4iLCAiZXhlYyIsIHZhbHVlLmNvbXBpbGVyX2ZsYWcpCisgICAgICAgICAgICBhKGlzaW5zdGFuY2UoZ2V0YXR0cih2YWx1ZSwgImNvbXBpbGVyX2ZsYWciKSwgaW50KSwKKyAgICAgICAgICAgICAgICAgICAiLmNvbXBpbGVyX2ZsYWcgaXNuJ3QgaW50IikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChGdXR1cmVUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9fbG9jYWxlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfX2xvY2FsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmNiOTI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfX2xvY2FsZS5weQpAQCAtMCwwICsxLDEzNyBAQAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Citmcm9tIF9sb2NhbGUgaW1wb3J0IChzZXRsb2NhbGUsIExDX05VTUVSSUMsIGxvY2FsZWNvbnYsIEVycm9yKQordHJ5OgorICAgIGZyb20gX2xvY2FsZSBpbXBvcnQgKFJBRElYQ0hBUiwgVEhPVVNFUCwgbmxfbGFuZ2luZm8pCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgbmxfbGFuZ2luZm8gPSBOb25lCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworZnJvbSBwbGF0Zm9ybSBpbXBvcnQgdW5hbWUKKworaWYgdW5hbWUoKVswXSA9PSAiRGFyd2luIjoKKyAgICBtYWosIG1pbiwgbWljID0gW2ludChwYXJ0KSBmb3IgcGFydCBpbiB1bmFtZSgpWzJdLnNwbGl0KCIuIildCisgICAgaWYgKG1haiwgbWluLCBtaWMpIDwgKDgsIDAsIDApOgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibG9jYWxlIHN1cHBvcnQgYnJva2VuIGZvciBPUyBYIDwgMTAuNCIpCisKK2NhbmRpZGF0ZV9sb2NhbGVzID0gWydlc19VWScsICdmcl9GUicsICdmaV9GSScsICdlc19DTycsICdwdF9QVCcsICdpdF9JVCcsCisgICAgJ2V0X0VFJywgJ2VzX1BZJywgJ25vX05PJywgJ25sX05MJywgJ2x2X0xWJywgJ2VsX0dSJywgJ2JlX0JZJywgJ2ZyX0JFJywKKyAgICAncm9fUk8nLCAncnVfVUEnLCAncnVfUlUnLCAnZXNfVkUnLCAnY2FfRVMnLCAnc2VfTk8nLCAnZXNfRUMnLCAnaWRfSUQnLAorICAgICdrYV9HRScsICdlc19DTCcsICdodV9IVScsICd3YV9CRScsICdsdF9MVCcsICdzbF9TSScsICdocl9IUicsICdlc19BUicsCisgICAgJ2VzX0VTJywgJ29jX0ZSJywgJ2dsX0VTJywgJ2JnX0JHJywgJ2lzX0lTJywgJ21rX01LJywgJ2RlX0FUJywgJ3B0X0JSJywKKyAgICAnZGFfREsnLCAnbm5fTk8nLCAnY3NfQ1onLCAnZGVfTFUnLCAnZXNfQk8nLCAnc3FfQUwnLCAnc2tfU0snLCAnZnJfQ0gnLAorICAgICdkZV9ERScsICdzcl9ZVScsICdicl9GUicsICdubF9CRScsICdzdl9GSScsICdwbF9QTCcsICdmcl9DQScsICdmb19GTycsCisgICAgJ2JzX0JBJywgJ2ZyX0xVJywgJ2tsX0dMJywgJ2ZhX0lSJywgJ2RlX0JFJywgJ3N2X1NFJywgJ2l0X0NIJywgJ3VrX1VBJywKKyAgICAnZXVfRVMnLCAndmlfVk4nLCAnYWZfWkEnLCAnbmJfTk8nLCAnZW5fREsnLCAndGdfVEonLCAnZW5fVVMnLAorICAgICdlc19FUy5JU084ODU5LTEnLCAnZnJfRlIuSVNPODg1OS0xNScsICdydV9SVS5LT0k4LVInLCAna29fS1IuZXVjS1InXQorCisjIFdvcmthcm91bmQgZm9yIE1TVkM2KGRlYnVnKSBjcmFzaCBidWcKK2lmICJNU0Mgdi4xMjAwIiBpbiBzeXMudmVyc2lvbjoKKyAgICBkZWYgYWNjZXB0KGxvYyk6CisgICAgICAgIGEgPSBsb2Muc3BsaXQoIi4iKQorICAgICAgICByZXR1cm4gbm90KGxlbihhKSA9PSAyIGFuZCBsZW4oYVstMV0pID49IDkpCisgICAgY2FuZGlkYXRlX2xvY2FsZXMgPSBbbG9jIGZvciBsb2MgaW4gY2FuZGlkYXRlX2xvY2FsZXMgaWYgYWNjZXB0KGxvYyldCisKKyMgTGlzdCBrbm93biBsb2NhbGUgdmFsdWVzIHRvIHRlc3QgYWdhaW5zdCB3aGVuIGF2YWlsYWJsZS4KKyMgRGljdCBmb3JtYXR0ZWQgYXMgYGA8bG9jYWxlPiA6ICg8ZGVjaW1hbF9wb2ludD4sIDx0aG91c2FuZHNfc2VwPilgYC4gIElmIGEKKyMgdmFsdWUgaXMgbm90IGtub3duLCB1c2UgJycgLgora25vd25fbnVtZXJpY3MgPSB7J2ZyX0ZSJyA6ICgnLCcsICcnKSwgJ2VuX1VTJzooJy4nLCAnLCcpfQorCitjbGFzcyBfTG9jYWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm9sZGxvY2FsZSA9IHNldGxvY2FsZShMQ19OVU1FUklDKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZXRsb2NhbGUoTENfTlVNRVJJQywgc2VsZi5vbGRsb2NhbGUpCisKKyAgICAjIFdhbnQgdG8ga25vdyB3aGF0IHZhbHVlIHdhcyBjYWxjdWxhdGVkLCB3aGF0IGl0IHdhcyBjb21wYXJlZCBhZ2FpbnN0LAorICAgICMgd2hhdCBmdW5jdGlvbiB3YXMgdXNlZCBmb3IgdGhlIGNhbGN1bGF0aW9uLCB3aGF0IHR5cGUgb2YgZGF0YSB3YXMgdXNlZCwKKyAgICAjIHRoZSBsb2NhbGUgdGhhdCB3YXMgc3VwcG9zZWRseSBzZXQsIGFuZCB0aGUgYWN0dWFsIGxvY2FsZSB0aGF0IGlzIHNldC4KKyAgICBsY19udW1lcmljX2Vycl9tc2cgPSAiJXMgIT0gJXMgKCVzIGZvciAlczsgc2V0IHRvICVzLCB1c2luZyAlcykiCisKKyAgICBkZWYgbnVtZXJpY190ZXN0ZXIoc2VsZiwgY2FsY190eXBlLCBjYWxjX3ZhbHVlLCBkYXRhX3R5cGUsIHVzZWRfbG9jYWxlKToKKyAgICAgICAgIiIiQ29tcGFyZSBjYWxjdWxhdGlvbiBhZ2FpbnN0IGtub3duIHZhbHVlLCBpZiBhdmFpbGFibGUiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2V0X2xvY2FsZSA9IHNldGxvY2FsZShMQ19OVU1FUklDKQorICAgICAgICBleGNlcHQgRXJyb3I6CisgICAgICAgICAgICBzZXRfbG9jYWxlID0gIjxub3QgYWJsZSB0byBkZXRlcm1pbmU+IgorICAgICAgICBrbm93bl92YWx1ZSA9IGtub3duX251bWVyaWNzLmdldCh1c2VkX2xvY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnJywgJycpKVtkYXRhX3R5cGUgPT0gJ3Rob3VzYW5kc19zZXAnXQorICAgICAgICBpZiBrbm93bl92YWx1ZSBhbmQgY2FsY192YWx1ZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsY192YWx1ZSwga25vd25fdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGNfbnVtZXJpY19lcnJfbXNnICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY192YWx1ZSwga25vd25fdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjX3R5cGUsIGRhdGFfdHlwZSwgc2V0X2xvY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRfbG9jYWxlKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG5sX2xhbmdpbmZvLCAibmxfbGFuZ2luZm8gaXMgbm90IGF2YWlsYWJsZSIpCisgICAgZGVmIHRlc3RfbGNfbnVtZXJpY19ubF9sYW5naW5mbyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG5sX2xhbmdpbmZvIGFnYWluc3Qga25vd24gdmFsdWVzCisgICAgICAgIGZvciBsb2MgaW4gY2FuZGlkYXRlX2xvY2FsZXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2V0bG9jYWxlKExDX05VTUVSSUMsIGxvYykKKyAgICAgICAgICAgIGV4Y2VwdCBFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm9yIGxpLCBsYyBpbiAoKFJBRElYQ0hBUiwgImRlY2ltYWxfcG9pbnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVEhPVVNFUCwgInRob3VzYW5kc19zZXAiKSk6CisgICAgICAgICAgICAgICAgc2VsZi5udW1lcmljX3Rlc3RlcignbmxfbGFuZ2luZm8nLCBubF9sYW5naW5mbyhsaSksIGxjLCBsb2MpCisKKyAgICBkZWYgdGVzdF9sY19udW1lcmljX2xvY2FsZWNvbnYoc2VsZik6CisgICAgICAgICMgVGVzdCBsb2NhbGVjb252IGFnYWluc3Qga25vd24gdmFsdWVzCisgICAgICAgIGZvciBsb2MgaW4gY2FuZGlkYXRlX2xvY2FsZXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2V0bG9jYWxlKExDX05VTUVSSUMsIGxvYykKKyAgICAgICAgICAgIGV4Y2VwdCBFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm9yIGxjIGluICgiZGVjaW1hbF9wb2ludCIsICJ0aG91c2FuZHNfc2VwIik6CisgICAgICAgICAgICAgICAgc2VsZi5udW1lcmljX3Rlc3RlcignbG9jYWxlY29udicsIGxvY2FsZWNvbnYoKVtsY10sIGxjLCBsb2MpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhubF9sYW5naW5mbywgIm5sX2xhbmdpbmZvIGlzIG5vdCBhdmFpbGFibGUiKQorICAgIGRlZiB0ZXN0X2xjX251bWVyaWNfYmFzaWMoc2VsZik6CisgICAgICAgICMgVGVzdCBubF9sYW5naW5mbyBhZ2FpbnN0IGxvY2FsZWNvbnYKKyAgICAgICAgZm9yIGxvYyBpbiBjYW5kaWRhdGVfbG9jYWxlczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZXRsb2NhbGUoTENfTlVNRVJJQywgbG9jKQorICAgICAgICAgICAgZXhjZXB0IEVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3IgbGksIGxjIGluICgoUkFESVhDSEFSLCAiZGVjaW1hbF9wb2ludCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUSE9VU0VQLCAidGhvdXNhbmRzX3NlcCIpKToKKyAgICAgICAgICAgICAgICBubF9yYWRpeGNoYXIgPSBubF9sYW5naW5mbyhsaSkKKyAgICAgICAgICAgICAgICBsaV9yYWRpeGNoYXIgPSBsb2NhbGVjb252KClbbGNdCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZXRfbG9jYWxlID0gc2V0bG9jYWxlKExDX05VTUVSSUMpCisgICAgICAgICAgICAgICAgZXhjZXB0IEVycm9yOgorICAgICAgICAgICAgICAgICAgICBzZXRfbG9jYWxlID0gIjxub3QgYWJsZSB0byBkZXRlcm1pbmU+IgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmxfcmFkaXhjaGFyLCBsaV9yYWRpeGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyAobmxfbGFuZ2luZm8pICE9ICVzIChsb2NhbGVjb252KSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoc2V0IHRvICVzLCB1c2luZyAlcykiICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmxfcmFkaXhjaGFyLCBsaV9yYWRpeGNoYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2MsIHNldF9sb2NhbGUpKQorCisgICAgZGVmIHRlc3RfZmxvYXRfcGFyc2luZyhzZWxmKToKKyAgICAgICAgIyBCdWcgIzEzOTE4NzI6IFRlc3Qgd2hldGhlciBmbG9hdCBwYXJzaW5nIGlzIG9rYXkgb24gRXVyb3BlYW4KKyAgICAgICAgIyBsb2NhbGVzLgorICAgICAgICBmb3IgbG9jIGluIGNhbmRpZGF0ZV9sb2NhbGVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNldGxvY2FsZShMQ19OVU1FUklDLCBsb2MpCisgICAgICAgICAgICBleGNlcHQgRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBJZ25vcmUgYnVnZ3kgbG9jYWxlIGRhdGFiYXNlcy4gKE1hYyBPUyAxMC40IGFuZCBzb21lIG90aGVyIEJTRHMpCisgICAgICAgICAgICBpZiBsb2MgPT0gJ2V1X0VTJyBhbmQgbG9jYWxlY29udigpWydkZWNpbWFsX3BvaW50J10gPT0gIicgIjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChldmFsKCczLjE0JykgKiAxMDApLCAzMTQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBldmFsKCczLjE0JykgZmFpbGVkIGZvciAlcyIgJSBsb2MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgnMy4xNCcpICogMTAwKSwgMzE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgZmxvYXQoJzMuMTQnKSBmYWlsZWQgZm9yICVzIiAlIGxvYykKKyAgICAgICAgICAgIGlmIGxvY2FsZWNvbnYoKVsnZGVjaW1hbF9wb2ludCddICE9ICcuJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVjb252KClbJ2RlY2ltYWxfcG9pbnQnXS5qb2luKFsnMScsICcyMyddKSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChfTG9jYWxlVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X19vc3hfc3VwcG9ydC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X19vc3hfc3VwcG9ydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjZjZWI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfX29zeF9zdXBwb3J0LnB5CkBAIC0wLDAgKzEsMjc5IEBACisiIiIKK1Rlc3Qgc3VpdGUgZm9yIF9vc3hfc3VwcG9ydDogc2hhcmVkIE9TIFggc3VwcG9ydCBmdW5jdGlvbnMuCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0CisKK2ltcG9ydCBfb3N4X3N1cHBvcnQKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImRhcndpbiIpLCAicmVxdWlyZXMgT1MgWCIpCitjbGFzcyBUZXN0X09TWFN1cHBvcnQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIHNlbGYucHJvZ19uYW1lID0gJ2JvZ3VzX3Byb2dyYW1feHh4eCcKKyAgICAgICAgc2VsZi50ZW1wX3BhdGhfZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLmdldGN3ZCgpKQorICAgICAgICBzZWxmLmVudiA9IHRlc3QudGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5lbnYuX19leGl0X18pCisgICAgICAgIGZvciBjdiBpbiAoJ0NGTEFHUycsICdMREZMQUdTJywgJ0NQUEZMQUdTJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQkFTRUNGTEFHUycsICdCTERTSEFSRUQnLCAnTERTSEFSRUQnLCAnQ0MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDWFgnLCAnUFlfQ0ZMQUdTJywgJ1BZX0xERkxBR1MnLCAnUFlfQ1BQRkxBR1MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQWV9DT1JFX0NGTEFHUycpOgorICAgICAgICAgICAgaWYgY3YgaW4gc2VsZi5lbnY6CisgICAgICAgICAgICAgICAgc2VsZi5lbnYudW5zZXQoY3YpCisKKyAgICBkZWYgYWRkX2V4cGVjdGVkX3NhdmVkX2luaXRpYWxfdmFsdWVzKHNlbGYsIGNvbmZpZ192YXJzLCBleHBlY3RlZF92YXJzKToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgaW5pdGlhbCB2YWx1ZXMgZm9yIGFsbCBtb2RpZmllZCBjb25maWcgdmFycworICAgICAgICAjIGFyZSBhbHNvIHNhdmVkIHdpdGggbW9kaWZpZWQga2V5cy4KKyAgICAgICAgZXhwZWN0ZWRfdmFycy51cGRhdGUoKCdfT1NYX1NVUFBPUlRfSU5JVElBTF8nKyBrLAorICAgICAgICAgICAgICAgIGNvbmZpZ192YXJzW2tdKSBmb3IgayBpbiBjb25maWdfdmFycworICAgICAgICAgICAgICAgICAgICBpZiBjb25maWdfdmFyc1trXSAhPSBleHBlY3RlZF92YXJzW2tdKQorCisgICAgZGVmIHRlc3RfX2ZpbmRfZXhlY3V0YWJsZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5lbnZbJ1BBVEgnXToKKyAgICAgICAgICAgIHNlbGYuZW52WydQQVRIJ10gPSBzZWxmLmVudlsnUEFUSCddICsgJzonCisgICAgICAgIHNlbGYuZW52WydQQVRIJ10gPSBzZWxmLmVudlsnUEFUSCddICsgb3MucGF0aC5hYnNwYXRoKHNlbGYudGVtcF9wYXRoX2RpcikKKyAgICAgICAgdGVzdC50ZXN0X3N1cHBvcnQudW5saW5rKHNlbGYucHJvZ19uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShfb3N4X3N1cHBvcnQuX2ZpbmRfZXhlY3V0YWJsZShzZWxmLnByb2dfbmFtZSkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0LnRlc3Rfc3VwcG9ydC51bmxpbmssIHNlbGYucHJvZ19uYW1lKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5wcm9nX25hbWUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIiMhL2Jpbi9zaFxuL2Jpbi9lY2hvIE9LXG4iKQorICAgICAgICBvcy5jaG1vZChzZWxmLnByb2dfbmFtZSwgc3RhdC5TX0lSV1hVKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvZ19uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vc3hfc3VwcG9ydC5fZmluZF9leGVjdXRhYmxlKHNlbGYucHJvZ19uYW1lKSkKKworICAgIGRlZiB0ZXN0X19yZWFkX291dHB1dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5lbnZbJ1BBVEgnXToKKyAgICAgICAgICAgIHNlbGYuZW52WydQQVRIJ10gPSBzZWxmLmVudlsnUEFUSCddICsgJzonCisgICAgICAgIHNlbGYuZW52WydQQVRIJ10gPSBzZWxmLmVudlsnUEFUSCddICsgb3MucGF0aC5hYnNwYXRoKHNlbGYudGVtcF9wYXRoX2RpcikKKyAgICAgICAgdGVzdC50ZXN0X3N1cHBvcnQudW5saW5rKHNlbGYucHJvZ19uYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodGVzdC50ZXN0X3N1cHBvcnQudW5saW5rLCBzZWxmLnByb2dfbmFtZSkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYucHJvZ19uYW1lLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCIjIS9iaW4vc2hcbi9iaW4vZWNobyBFeHBlY3RlZE91dHB1dFxuIikKKyAgICAgICAgb3MuY2htb2Qoc2VsZi5wcm9nX25hbWUsIHN0YXQuU19JUldYVSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnRXhwZWN0ZWRPdXRwdXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vc3hfc3VwcG9ydC5fcmVhZF9vdXRwdXQoc2VsZi5wcm9nX25hbWUpKQorCisgICAgZGVmIHRlc3RfX2ZpbmRfYnVpbGRfdG9vbChzZWxmKToKKyAgICAgICAgb3V0ID0gX29zeF9zdXBwb3J0Ll9maW5kX2J1aWxkX3Rvb2woJ2NjJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG91dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NjIG5vdCBmb3VuZCAtIGNoZWNrIHhjb2RlLXNlbGVjdCcpCisKKyAgICBkZWYgdGVzdF9fZ2V0X3N5c3RlbV92ZXJzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUocGxhdGZvcm0ubWFjX3ZlcigpWzBdLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3N4X3N1cHBvcnQuX2dldF9zeXN0ZW1fdmVyc2lvbigpKSkKKworICAgIGRlZiB0ZXN0X19yZW1vdmVfb3JpZ2luYWxfdmFsdWVzKHNlbGYpOgorICAgICAgICBjb25maWdfdmFycyA9IHsKKyAgICAgICAgJ0NDJzogJ2djYy10ZXN0IC1wdGhyZWFkcycsCisgICAgICAgIH0KKyAgICAgICAgZXhwZWN0ZWRfdmFycyA9IHsKKyAgICAgICAgJ0NDJzogJ2NsYW5nIC1wdGhyZWFkcycsCisgICAgICAgIH0KKyAgICAgICAgY3YgPSAnQ0MnCisgICAgICAgIG5ld3ZhbHVlID0gJ2NsYW5nIC1wdGhyZWFkcycKKyAgICAgICAgX29zeF9zdXBwb3J0Ll9zYXZlX21vZGlmaWVkX3ZhbHVlKGNvbmZpZ192YXJzLCBjdiwgbmV3dmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZXhwZWN0ZWRfdmFycywgY29uZmlnX3ZhcnMpCisgICAgICAgIF9vc3hfc3VwcG9ydC5fcmVtb3ZlX29yaWdpbmFsX3ZhbHVlcyhjb25maWdfdmFycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF92YXJzLCBjb25maWdfdmFycykKKworICAgIGRlZiB0ZXN0X19zYXZlX21vZGlmaWVkX3ZhbHVlKHNlbGYpOgorICAgICAgICBjb25maWdfdmFycyA9IHsKKyAgICAgICAgJ0NDJzogJ2djYy10ZXN0IC1wdGhyZWFkcycsCisgICAgICAgIH0KKyAgICAgICAgZXhwZWN0ZWRfdmFycyA9IHsKKyAgICAgICAgJ0NDJzogJ2NsYW5nIC1wdGhyZWFkcycsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hZGRfZXhwZWN0ZWRfc2F2ZWRfaW5pdGlhbF92YWx1ZXMoY29uZmlnX3ZhcnMsIGV4cGVjdGVkX3ZhcnMpCisgICAgICAgIGN2ID0gJ0NDJworICAgICAgICBuZXd2YWx1ZSA9ICdjbGFuZyAtcHRocmVhZHMnCisgICAgICAgIF9vc3hfc3VwcG9ydC5fc2F2ZV9tb2RpZmllZF92YWx1ZShjb25maWdfdmFycywgY3YsIG5ld3ZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3ZhcnMsIGNvbmZpZ192YXJzKQorCisgICAgZGVmIHRlc3RfX3NhdmVfbW9kaWZpZWRfdmFsdWVfdW5jaGFuZ2VkKHNlbGYpOgorICAgICAgICBjb25maWdfdmFycyA9IHsKKyAgICAgICAgJ0NDJzogJ2djYy10ZXN0IC1wdGhyZWFkcycsCisgICAgICAgIH0KKyAgICAgICAgZXhwZWN0ZWRfdmFycyA9IGNvbmZpZ192YXJzLmNvcHkoKQorICAgICAgICBjdiA9ICdDQycKKyAgICAgICAgbmV3dmFsdWUgPSAnZ2NjLXRlc3QgLXB0aHJlYWRzJworICAgICAgICBfb3N4X3N1cHBvcnQuX3NhdmVfbW9kaWZpZWRfdmFsdWUoY29uZmlnX3ZhcnMsIGN2LCBuZXd2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF92YXJzLCBjb25maWdfdmFycykKKworICAgIGRlZiB0ZXN0X19zdXBwb3J0c191bml2ZXJzYWxfYnVpbGRzKHNlbGYpOgorICAgICAgICBpbXBvcnQgcGxhdGZvcm0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGF0Zm9ybS5tYWNfdmVyKClbMF0uc3BsaXQoJy4nKSA+PSBbJzEwJywgJzQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3N4X3N1cHBvcnQuX3N1cHBvcnRzX3VuaXZlcnNhbF9idWlsZHMoKSkKKworICAgIGRlZiB0ZXN0X19maW5kX2FwcHJvcHJpYXRlX2NvbXBpbGVyKHNlbGYpOgorICAgICAgICBjb21waWxlcnMgPSAoCisgICAgICAgICAgICAgICAgICAgICAgICAoJ2djYy10ZXN0JywgJ2k2ODYtYXBwbGUtZGFyd2luMTEtbGx2bS1nY2MtNC4yJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoJ2NsYW5nJywgJ2NsYW5nIHZlcnNpb24gMy4xJyksCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgY29uZmlnX3ZhcnMgPSB7CisgICAgICAgICdDQyc6ICdnY2MtdGVzdCAtcHRocmVhZHMnLAorICAgICAgICAnQ1hYJzogJ2NjKystdGVzdCcsCisgICAgICAgICdDRkxBR1MnOiAnLWZuby1zdHJpY3QtYWxpYXNpbmcgIC1nIC1PMyAtYXJjaCBwcGMgLWFyY2ggaTM4NiAgJywKKyAgICAgICAgJ0xERkxBR1MnOiAnLWFyY2ggcHBjIC1hcmNoIGkzODYgICAtZycsCisgICAgICAgICdDUFBGTEFHUyc6ICctSS4gLWlzeXNyb290IC9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsnLAorICAgICAgICAnQkxEU0hBUkVEJzogJ2djYy10ZXN0IC1idW5kbGUgLWFyY2ggcHBjIC1hcmNoIGkzODYgLWcnLAorICAgICAgICAnTERTSEFSRUQnOiAnZ2NjLXRlc3QgLWJ1bmRsZSAtYXJjaCBwcGMgLWFyY2ggaTM4NiAnCisgICAgICAgICAgICAgICAgICAgICAgICAnLWlzeXNyb290IC9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsgLWcnLAorICAgICAgICB9CisgICAgICAgIGV4cGVjdGVkX3ZhcnMgPSB7CisgICAgICAgICdDQyc6ICdjbGFuZyAtcHRocmVhZHMnLAorICAgICAgICAnQ1hYJzogJ2NsYW5nKysnLAorICAgICAgICAnQ0ZMQUdTJzogJy1mbm8tc3RyaWN0LWFsaWFzaW5nICAtZyAtTzMgLWFyY2ggcHBjIC1hcmNoIGkzODYgICcsCisgICAgICAgICdMREZMQUdTJzogJy1hcmNoIHBwYyAtYXJjaCBpMzg2ICAgLWcnLAorICAgICAgICAnQ1BQRkxBR1MnOiAnLUkuIC1pc3lzcm9vdCAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrJywKKyAgICAgICAgJ0JMRFNIQVJFRCc6ICdjbGFuZyAtYnVuZGxlIC1hcmNoIHBwYyAtYXJjaCBpMzg2IC1nJywKKyAgICAgICAgJ0xEU0hBUkVEJzogJ2NsYW5nIC1idW5kbGUgLWFyY2ggcHBjIC1hcmNoIGkzODYgJworICAgICAgICAgICAgICAgICAgICAgICAgJy1pc3lzcm9vdCAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrIC1nJywKKyAgICAgICAgfQorICAgICAgICBzZWxmLmFkZF9leHBlY3RlZF9zYXZlZF9pbml0aWFsX3ZhbHVlcyhjb25maWdfdmFycywgZXhwZWN0ZWRfdmFycykKKworICAgICAgICBzdWZmaXggPSAoJzonICsgc2VsZi5lbnZbJ1BBVEgnXSkgaWYgc2VsZi5lbnZbJ1BBVEgnXSBlbHNlICcnCisgICAgICAgIHNlbGYuZW52WydQQVRIJ10gPSBvcy5wYXRoLmFic3BhdGgoc2VsZi50ZW1wX3BhdGhfZGlyKSArIHN1ZmZpeAorICAgICAgICBmb3IgY19uYW1lLCBjX291dHB1dCBpbiBjb21waWxlcnM6CisgICAgICAgICAgICB0ZXN0LnRlc3Rfc3VwcG9ydC51bmxpbmsoY19uYW1lKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRlc3QudGVzdF9zdXBwb3J0LnVubGluaywgY19uYW1lKQorICAgICAgICAgICAgd2l0aCBvcGVuKGNfbmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiMhL2Jpbi9zaFxuL2Jpbi9lY2hvICIgKyBjX291dHB1dCkKKyAgICAgICAgICAgIG9zLmNobW9kKGNfbmFtZSwgc3RhdC5TX0lSV1hVKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3ZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29zeF9zdXBwb3J0Ll9maW5kX2FwcHJvcHJpYXRlX2NvbXBpbGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX3ZhcnMpKQorCisgICAgZGVmIHRlc3RfX3JlbW92ZV91bml2ZXJzYWxfZmxhZ3Moc2VsZik6CisgICAgICAgIGNvbmZpZ192YXJzID0geworICAgICAgICAnQ0ZMQUdTJzogJy1mbm8tc3RyaWN0LWFsaWFzaW5nICAtZyAtTzMgLWFyY2ggcHBjIC1hcmNoIGkzODYgICcsCisgICAgICAgICdMREZMQUdTJzogJy1hcmNoIHBwYyAtYXJjaCBpMzg2ICAgLWcnLAorICAgICAgICAnQ1BQRkxBR1MnOiAnLUkuIC1pc3lzcm9vdCAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrJywKKyAgICAgICAgJ0JMRFNIQVJFRCc6ICdnY2MtNC4wIC1idW5kbGUgIC1hcmNoIHBwYyAtYXJjaCBpMzg2IC1nJywKKyAgICAgICAgJ0xEU0hBUkVEJzogJ2djYy00LjAgLWJ1bmRsZSAgLWFyY2ggcHBjIC1hcmNoIGkzODYgJworICAgICAgICAgICAgICAgICAgICAgICAgJy1pc3lzcm9vdCAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrIC1nJywKKyAgICAgICAgfQorICAgICAgICBleHBlY3RlZF92YXJzID0geworICAgICAgICAnQ0ZMQUdTJzogJy1mbm8tc3RyaWN0LWFsaWFzaW5nICAtZyAtTzMgICAgJywKKyAgICAgICAgJ0xERkxBR1MnOiAnICAgIC1nJywKKyAgICAgICAgJ0NQUEZMQUdTJzogJy1JLiAgJywKKyAgICAgICAgJ0JMRFNIQVJFRCc6ICdnY2MtNC4wIC1idW5kbGUgICAgLWcnLAorICAgICAgICAnTERTSEFSRUQnOiAnZ2NjLTQuMCAtYnVuZGxlICAgICAgLWcnLAorICAgICAgICB9CisgICAgICAgIHNlbGYuYWRkX2V4cGVjdGVkX3NhdmVkX2luaXRpYWxfdmFsdWVzKGNvbmZpZ192YXJzLCBleHBlY3RlZF92YXJzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3N4X3N1cHBvcnQuX3JlbW92ZV91bml2ZXJzYWxfZmxhZ3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfdmFycykpCisKKyAgICBkZWYgdGVzdF9fcmVtb3ZlX3Vuc3VwcG9ydGVkX2FyY2hzKHNlbGYpOgorICAgICAgICBjb25maWdfdmFycyA9IHsKKyAgICAgICAgJ0NDJzogJ2NsYW5nJywKKyAgICAgICAgJ0NGTEFHUyc6ICctZm5vLXN0cmljdC1hbGlhc2luZyAgLWcgLU8zIC1hcmNoIHBwYyAtYXJjaCBpMzg2ICAnLAorICAgICAgICAnTERGTEFHUyc6ICctYXJjaCBwcGMgLWFyY2ggaTM4NiAgIC1nJywKKyAgICAgICAgJ0NQUEZMQUdTJzogJy1JLiAtaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkaycsCisgICAgICAgICdCTERTSEFSRUQnOiAnZ2NjLTQuMCAtYnVuZGxlICAtYXJjaCBwcGMgLWFyY2ggaTM4NiAtZycsCisgICAgICAgICdMRFNIQVJFRCc6ICdnY2MtNC4wIC1idW5kbGUgIC1hcmNoIHBwYyAtYXJjaCBpMzg2ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICctaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayAtZycsCisgICAgICAgIH0KKyAgICAgICAgZXhwZWN0ZWRfdmFycyA9IHsKKyAgICAgICAgJ0NDJzogJ2NsYW5nJywKKyAgICAgICAgJ0NGTEFHUyc6ICctZm5vLXN0cmljdC1hbGlhc2luZyAgLWcgLU8zICAtYXJjaCBpMzg2ICAnLAorICAgICAgICAnTERGTEFHUyc6ICcgLWFyY2ggaTM4NiAgIC1nJywKKyAgICAgICAgJ0NQUEZMQUdTJzogJy1JLiAtaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkaycsCisgICAgICAgICdCTERTSEFSRUQnOiAnZ2NjLTQuMCAtYnVuZGxlICAgLWFyY2ggaTM4NiAtZycsCisgICAgICAgICdMRFNIQVJFRCc6ICdnY2MtNC4wIC1idW5kbGUgICAtYXJjaCBpMzg2ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICctaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayAtZycsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hZGRfZXhwZWN0ZWRfc2F2ZWRfaW5pdGlhbF92YWx1ZXMoY29uZmlnX3ZhcnMsIGV4cGVjdGVkX3ZhcnMpCisKKyAgICAgICAgc3VmZml4ID0gKCc6JyArIHNlbGYuZW52WydQQVRIJ10pIGlmIHNlbGYuZW52WydQQVRIJ10gZWxzZSAnJworICAgICAgICBzZWxmLmVudlsnUEFUSCddID0gb3MucGF0aC5hYnNwYXRoKHNlbGYudGVtcF9wYXRoX2RpcikgKyBzdWZmaXgKKyAgICAgICAgY19uYW1lID0gJ2NsYW5nJworICAgICAgICB0ZXN0LnRlc3Rfc3VwcG9ydC51bmxpbmsoY19uYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodGVzdC50ZXN0X3N1cHBvcnQudW5saW5rLCBjX25hbWUpCisgICAgICAgICMgZXhpdCBzdGF0dXMgMjU1IG1lYW5zIG5vIFBQQyBzdXBwb3J0IGluIHRoaXMgY29tcGlsZXIgY2hhaW4KKyAgICAgICAgd2l0aCBvcGVuKGNfbmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiIyEvYmluL3NoXG5leGl0IDI1NSIpCisgICAgICAgIG9zLmNobW9kKGNfbmFtZSwgc3RhdC5TX0lSV1hVKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3ZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29zeF9zdXBwb3J0Ll9yZW1vdmVfdW5zdXBwb3J0ZWRfYXJjaHMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfdmFycykpCisKKyAgICBkZWYgdGVzdF9fb3ZlcnJpZGVfYWxsX2FyY2hzKHNlbGYpOgorICAgICAgICBzZWxmLmVudlsnQVJDSEZMQUdTJ10gPSAnLWFyY2ggeDg2XzY0JworICAgICAgICBjb25maWdfdmFycyA9IHsKKyAgICAgICAgJ0NDJzogJ2NsYW5nJywKKyAgICAgICAgJ0NGTEFHUyc6ICctZm5vLXN0cmljdC1hbGlhc2luZyAgLWcgLU8zIC1hcmNoIHBwYyAtYXJjaCBpMzg2ICAnLAorICAgICAgICAnTERGTEFHUyc6ICctYXJjaCBwcGMgLWFyY2ggaTM4NiAgIC1nJywKKyAgICAgICAgJ0NQUEZMQUdTJzogJy1JLiAtaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkaycsCisgICAgICAgICdCTERTSEFSRUQnOiAnZ2NjLTQuMCAtYnVuZGxlICAtYXJjaCBwcGMgLWFyY2ggaTM4NiAtZycsCisgICAgICAgICdMRFNIQVJFRCc6ICdnY2MtNC4wIC1idW5kbGUgLWFyY2ggcHBjIC1hcmNoIGkzODYgJworICAgICAgICAgICAgICAgICAgICAgICAgJy1pc3lzcm9vdCAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrIC1nJywKKyAgICAgICAgfQorICAgICAgICBleHBlY3RlZF92YXJzID0geworICAgICAgICAnQ0MnOiAnY2xhbmcnLAorICAgICAgICAnQ0ZMQUdTJzogJy1mbm8tc3RyaWN0LWFsaWFzaW5nICAtZyAtTzMgICAgIC1hcmNoIHg4Nl82NCcsCisgICAgICAgICdMREZMQUdTJzogJyAgICAtZyAtYXJjaCB4ODZfNjQnLAorICAgICAgICAnQ1BQRkxBR1MnOiAnLUkuIC1pc3lzcm9vdCAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrJywKKyAgICAgICAgJ0JMRFNIQVJFRCc6ICdnY2MtNC4wIC1idW5kbGUgICAgLWcgLWFyY2ggeDg2XzY0JywKKyAgICAgICAgJ0xEU0hBUkVEJzogJ2djYy00LjAgLWJ1bmRsZSAgIC1pc3lzcm9vdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAnL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayAtZyAtYXJjaCB4ODZfNjQnLAorICAgICAgICB9CisgICAgICAgIHNlbGYuYWRkX2V4cGVjdGVkX3NhdmVkX2luaXRpYWxfdmFsdWVzKGNvbmZpZ192YXJzLCBleHBlY3RlZF92YXJzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3N4X3N1cHBvcnQuX292ZXJyaWRlX2FsbF9hcmNocygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ192YXJzKSkKKworICAgIGRlZiB0ZXN0X19jaGVja19mb3JfdW5hdmFpbGFibGVfc2RrKHNlbGYpOgorICAgICAgICBjb25maWdfdmFycyA9IHsKKyAgICAgICAgJ0NDJzogJ2NsYW5nJywKKyAgICAgICAgJ0NGTEFHUyc6ICctZm5vLXN0cmljdC1hbGlhc2luZyAgLWcgLU8zIC1hcmNoIHBwYyAtYXJjaCBpMzg2ICAnCisgICAgICAgICAgICAgICAgICAgICAgICAnLWlzeXNyb290IC9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC4xLnNkaycsCisgICAgICAgICdMREZMQUdTJzogJy1hcmNoIHBwYyAtYXJjaCBpMzg2ICAgLWcnLAorICAgICAgICAnQ1BQRkxBR1MnOiAnLUkuIC1pc3lzcm9vdCAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuMS5zZGsnLAorICAgICAgICAnQkxEU0hBUkVEJzogJ2djYy00LjAgLWJ1bmRsZSAgLWFyY2ggcHBjIC1hcmNoIGkzODYgLWcnLAorICAgICAgICAnTERTSEFSRUQnOiAnZ2NjLTQuMCAtYnVuZGxlICAtYXJjaCBwcGMgLWFyY2ggaTM4NiAnCisgICAgICAgICAgICAgICAgICAgICAgICAnLWlzeXNyb290IC9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC4xLnNkayAtZycsCisgICAgICAgIH0KKyAgICAgICAgZXhwZWN0ZWRfdmFycyA9IHsKKyAgICAgICAgJ0NDJzogJ2NsYW5nJywKKyAgICAgICAgJ0NGTEFHUyc6ICctZm5vLXN0cmljdC1hbGlhc2luZyAgLWcgLU8zIC1hcmNoIHBwYyAtYXJjaCBpMzg2ICAnCisgICAgICAgICAgICAgICAgICAgICAgICAnICcsCisgICAgICAgICdMREZMQUdTJzogJy1hcmNoIHBwYyAtYXJjaCBpMzg2ICAgLWcnLAorICAgICAgICAnQ1BQRkxBR1MnOiAnLUkuICAnLAorICAgICAgICAnQkxEU0hBUkVEJzogJ2djYy00LjAgLWJ1bmRsZSAgLWFyY2ggcHBjIC1hcmNoIGkzODYgLWcnLAorICAgICAgICAnTERTSEFSRUQnOiAnZ2NjLTQuMCAtYnVuZGxlICAtYXJjaCBwcGMgLWFyY2ggaTM4NiAnCisgICAgICAgICAgICAgICAgICAgICAgICAnIC1nJywKKyAgICAgICAgfQorICAgICAgICBzZWxmLmFkZF9leHBlY3RlZF9zYXZlZF9pbml0aWFsX3ZhbHVlcyhjb25maWdfdmFycywgZXhwZWN0ZWRfdmFycykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3ZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29zeF9zdXBwb3J0Ll9jaGVja19mb3JfdW5hdmFpbGFibGVfc2RrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX3ZhcnMpKQorCisgICAgZGVmIHRlc3RfZ2V0X3BsYXRmb3JtX29zeChzZWxmKToKKyAgICAgICAgIyBOb3RlLCBnZXRfcGxhdGZvcm1fb3N4IGlzIGN1cnJlbnRseSB0ZXN0ZWQgbW9yZSBleHRlbnNpdmVseQorICAgICAgICAjIGluZGlyZWN0bHkgYnkgdGVzdF9zeXNjb25maWcgYW5kIHRlc3RfZGlzdHV0aWxzCisgICAgICAgIGNvbmZpZ192YXJzID0geworICAgICAgICAnQ0ZMQUdTJzogJy1mbm8tc3RyaWN0LWFsaWFzaW5nICAtZyAtTzMgLWFyY2ggcHBjIC1hcmNoIGkzODYgICcKKyAgICAgICAgICAgICAgICAgICAgICAgICctaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjEuc2RrJywKKyAgICAgICAgJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCc6ICcxMC42JywKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgPSBfb3N4X3N1cHBvcnQuZ2V0X3BsYXRmb3JtX29zeChjb25maWdfdmFycywgJyAnLCAnICcsICcgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ21hY29zeCcsICcxMC42JywgJ2ZhdCcpLCByZXN1bHQpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0X09TWFN1cHBvcnQpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FiYy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FiYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YThjM2ExCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYWJjLnB5CkBAIC0wLDAgKzEsMjMzIEBACisjIENvcHlyaWdodCAyMDA3IEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisKKyIiIlVuaXQgdGVzdHMgZm9yIGFiYy5weS4iIiIKKworaW1wb3J0IHVuaXR0ZXN0LCB3ZWFrcmVmCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitpbXBvcnQgYWJjCitmcm9tIGluc3BlY3QgaW1wb3J0IGlzYWJzdHJhY3QKKworCitjbGFzcyBUZXN0QUJDKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0bWV0aG9kX2Jhc2ljcyhzZWxmKToKKyAgICAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgICAgICBkZWYgZm9vKHNlbGYpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb28uX19pc2Fic3RyYWN0bWV0aG9kX18pCisgICAgICAgIGRlZiBiYXIoc2VsZik6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGJhciwgIl9faXNhYnN0cmFjdG1ldGhvZF9fIikpCisKKyAgICBkZWYgdGVzdF9hYnN0cmFjdHByb3BlcnR5X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgQGFiYy5hYnN0cmFjdHByb3BlcnR5CisgICAgICAgIGRlZiBmb28oc2VsZik6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvby5fX2lzYWJzdHJhY3RtZXRob2RfXykKKyAgICAgICAgZGVmIGJhcihzZWxmKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYmFyLCAiX19pc2Fic3RyYWN0bWV0aG9kX18iKSkKKworICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCisgICAgICAgICAgICBAYWJjLmFic3RyYWN0cHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBmb28oc2VsZik6IHJldHVybiAzCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBmb28oc2VsZik6IHJldHVybiBzdXBlcihELCBzZWxmKS5mb28KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEKCkuZm9vLCAzKQorCisgICAgZGVmIHRlc3RfYWJzdHJhY3RtZXRob2RfaW50ZWdyYXRpb24oc2VsZik6CisgICAgICAgIGZvciBhYnN0cmFjdHRoaW5nIGluIFthYmMuYWJzdHJhY3RtZXRob2QsIGFiYy5hYnN0cmFjdHByb3BlcnR5XToKKyAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCisgICAgICAgICAgICAgICAgQGFic3RyYWN0dGhpbmcKKyAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOiBwYXNzICAjIGFic3RyYWN0CisgICAgICAgICAgICAgICAgZGVmIGJhcihzZWxmKTogcGFzcyAgIyBjb25jcmV0ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLl9fYWJzdHJhY3RtZXRob2RzX18sIHNldChbImZvbyJdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQykgICMgYmVjYXVzZSBmb28gaXMgYWJzdHJhY3QKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2Fic3RyYWN0KEMpKQorICAgICAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgICAgICBkZWYgYmFyKHNlbGYpOiBwYXNzICAjIGNvbmNyZXRlIG92ZXJyaWRlIG9mIGNvbmNyZXRlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuX19hYnN0cmFjdG1ldGhvZHNfXywgc2V0KFsiZm9vIl0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBEKSAgIyBiZWNhdXNlIGZvbyBpcyBzdGlsbCBhYnN0cmFjdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzYWJzdHJhY3QoRCkpCisgICAgICAgICAgICBjbGFzcyBFKEQpOgorICAgICAgICAgICAgICAgIGRlZiBmb28oc2VsZik6IHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRS5fX2Fic3RyYWN0bWV0aG9kc19fLCBzZXQoKSkKKyAgICAgICAgICAgIEUoKSAgIyBub3cgZm9vIGlzIGNvbmNyZXRlLCB0b28KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNhYnN0cmFjdChFKSkKKyAgICAgICAgICAgIGNsYXNzIEYoRSk6CisgICAgICAgICAgICAgICAgQGFic3RyYWN0dGhpbmcKKyAgICAgICAgICAgICAgICBkZWYgYmFyKHNlbGYpOiBwYXNzICAjIGFic3RyYWN0IG92ZXJyaWRlIG9mIGNvbmNyZXRlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYuX19hYnN0cmFjdG1ldGhvZHNfXywgc2V0KFsiYmFyIl0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGKSAgIyBiZWNhdXNlIGJhciBpcyBhYnN0cmFjdCBub3cKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2Fic3RyYWN0KEYpKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nfb2xkc3R5bGVfY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKKyAgICAgICAgY2xhc3MgT2xkc3R5bGVDbGFzczoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKE9sZHN0eWxlQ2xhc3MsIEEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQSwgT2xkc3R5bGVDbGFzcykpCisKKyAgICBkZWYgdGVzdF9pc2luc3RhbmNlX2NsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCisgICAgICAgIGNsYXNzIE9sZHN0eWxlQ2xhc3M6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShPbGRzdHlsZUNsYXNzLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoT2xkc3R5bGVDbGFzcywgdHlwZShPbGRzdHlsZUNsYXNzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShBLCBPbGRzdHlsZUNsYXNzKSkKKyAgICAgICAgIyBUaGlzIHJhaXNlcyBhIHJlY3Vyc2lvbiBkZXB0aCBlcnJvciwgYnV0IGlzIGxvdy1wcmlvcml0eToKKyAgICAgICAgIyBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShBLCBhYmMuQUJDTWV0YSkpCisKKyAgICBkZWYgdGVzdF9yZWdpc3RyYXRpb25fYmFzaWNzKHNlbGYpOgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCisgICAgICAgIGNsYXNzIEIob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYiA9IEIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQiwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhCLCAoQSwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGIsIEEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShiLCAoQSwpKQorICAgICAgICBBLnJlZ2lzdGVyKEIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEIsIEEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhCLCAoQSwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGIsIEEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiLCAoQSwpKQorICAgICAgICBjbGFzcyBDKEIpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMsIEEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDLCAoQSwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGMsIEEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjLCAoQSwpKQorCisgICAgZGVmIHRlc3RfaXNpbnN0YW5jZV9pbnZhbGlkYXRpb24oc2VsZik6CisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKKyAgICAgICAgY2xhc3MgQihvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBiID0gQigpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShiLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKGIsIChBLCkpKQorICAgICAgICBBLnJlZ2lzdGVyKEIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGIsIEEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiLCAoQSwpKSkKKworICAgIGRlZiB0ZXN0X3JlZ2lzdHJhdGlvbl9idWlsdGlucyhzZWxmKToKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQorICAgICAgICBBLnJlZ2lzdGVyKGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKDQyLCBBKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoNDIsIChBLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGludCwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGludCwgKEEsKSkpCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIEIucmVnaXN0ZXIoYmFzZXN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKCIiLCBBKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoIiIsIChBLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHN0ciwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHN0ciwgKEEsKSkpCisKKyAgICBkZWYgdGVzdF9yZWdpc3RyYXRpb25fZWRnZV9jYXNlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQorICAgICAgICBBLnJlZ2lzdGVyKEEpICAjIHNob3VsZCBwYXNzIHNpbGVudGx5CisgICAgICAgIGNsYXNzIEExKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIEExLnJlZ2lzdGVyLCBBKSAgIyBjeWNsZXMgbm90IGFsbG93ZWQKKyAgICAgICAgY2xhc3MgQihvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBBMS5yZWdpc3RlcihCKSAgIyBvaworICAgICAgICBBMS5yZWdpc3RlcihCKSAgIyBzaG91bGQgcGFzcyBzaWxlbnRseQorICAgICAgICBjbGFzcyBDKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBBLnJlZ2lzdGVyKEMpICAjIHNob3VsZCBwYXNzIHNpbGVudGx5CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgQy5yZWdpc3RlciwgQSkgICMgY3ljbGVzIG5vdCBhbGxvd2VkCisgICAgICAgIEMucmVnaXN0ZXIoQikgICMgb2sKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX25vbl9jbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgIkNhbiBvbmx5IHJlZ2lzdGVyIGNsYXNzZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBLnJlZ2lzdGVyLCA0KQorCisgICAgZGVmIHRlc3RfcmVnaXN0cmF0aW9uX3RyYW5zaXRpdmVuZXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEEsIEEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhBLCAoQSwpKSkKKyAgICAgICAgY2xhc3MgQjoKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQSwgQikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhBLCAoQiwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEIsIEEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQiwgKEEsKSkpCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYWJjLkFCQ01ldGEKKyAgICAgICAgQS5yZWdpc3RlcihCKQorICAgICAgICBjbGFzcyBCMShCKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQjEsIEEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhCMSwgKEEsKSkpCisgICAgICAgIGNsYXNzIEMxKEMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBCMS5yZWdpc3RlcihDMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEMsIEIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQywgKEIsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhDLCBCMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhDLCAoQjEsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMxLCBBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQzEsIChBLCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDMSwgQikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMxLCAoQiwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQzEsIEIxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQzEsIChCMSwpKSkKKyAgICAgICAgQzEucmVnaXN0ZXIoaW50KQorICAgICAgICBjbGFzcyBNeUludChpbnQpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhNeUludCwgQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKE15SW50LCAoQSwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKDQyLCBBKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoNDIsIChBLCkpCisKKyAgICBkZWYgdGVzdF9hbGxfbmV3X21ldGhvZHNfYXJlX2NhbGxlZChzZWxmKToKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQorICAgICAgICBjbGFzcyBCKG9iamVjdCk6CisgICAgICAgICAgICBjb3VudGVyID0gMAorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICBCLmNvdW50ZXIgKz0gMQorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihCLCBjbHMpLl9fbmV3X18oY2xzKQorICAgICAgICBjbGFzcyBDKEEsIEIpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEIuY291bnRlciwgMCkKKyAgICAgICAgQygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQi5jb3VudGVyLCAxKQorCisgICAgZGVmIHRlc3RfY2FjaGVfbGVhayhzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgIzI1MjEuCisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBhYmMuQUJDTWV0YQorICAgICAgICAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgICAgICAgICAgZGVmIGYoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDKEEpOgorICAgICAgICAgICAgZGVmIGYoc2VsZik6CisgICAgICAgICAgICAgICAgQS5mKHNlbGYpCisgICAgICAgIHIgPSB3ZWFrcmVmLnJlZihDKQorICAgICAgICAjIFRyaWdnZXIgY2FjaGUuCisgICAgICAgIEMoKS5mKCkKKyAgICAgICAgZGVsIEMKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIoKSwgTm9uZSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEFCQykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYWJzdHJhY3RfbnVtYmVycy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Fic3RyYWN0X251bWJlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1ZjhjZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Fic3RyYWN0X251bWJlcnMucHkKQEAgLTAsMCArMSw1MiBAQAorIiIiVW5pdCB0ZXN0cyBmb3IgbnVtYmVycy5weS4iIiIKKworaW1wb3J0IG1hdGgKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBudW1iZXJzIGltcG9ydCBDb21wbGV4LCBSZWFsLCBSYXRpb25hbCwgSW50ZWdyYWwKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIFRlc3ROdW1iZXJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGludCwgSW50ZWdyYWwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhpbnQsIENvbXBsZXgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgaW50KDcpLnJlYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgaW50KDcpLmltYWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgaW50KDcpLmNvbmp1Z2F0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIGludCg3KS5udW1lcmF0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgaW50KDcpLmRlbm9taW5hdG9yKQorCisgICAgZGVmIHRlc3RfbG9uZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MobG9uZywgSW50ZWdyYWwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhsb25nLCBDb21wbGV4KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIGxvbmcoNykucmVhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsb25nKDcpLmltYWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgbG9uZyg3KS5jb25qdWdhdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBsb25nKDcpLm51bWVyYXRvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsb25nKDcpLmRlbm9taW5hdG9yKQorCisgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhmbG9hdCwgUmF0aW9uYWwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhmbG9hdCwgUmVhbCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LjMsIGZsb2F0KDcuMykucmVhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBmbG9hdCg3LjMpLmltYWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNy4zLCBmbG9hdCg3LjMpLmNvbmp1Z2F0ZSgpKQorCisgICAgZGVmIHRlc3RfY29tcGxleChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKGNvbXBsZXgsIFJlYWwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhjb21wbGV4LCBDb21wbGV4KSkKKworICAgICAgICBjMSwgYzIgPSBjb21wbGV4KDMsIDIpLCBjb21wbGV4KDQsMSkKKyAgICAgICAgIyBYWFg6IFRoaXMgaXMgbm90IGlkZWFsLCBidXQgc2VlIHRoZSBjb21tZW50IGluIG1hdGhfdHJ1bmMoKS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIG1hdGgudHJ1bmMsIGMxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZsb2F0LCBjMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnQsIGMxKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0TnVtYmVycykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYWVwYWNrLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYWVwYWNrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZWEyNWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9hZXBhY2sucHkKQEAgLTAsMCArMSw5MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDMgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2FldHlwZXMgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnYWV0eXBlcycpCithZXBhY2sgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnYWVwYWNrJykKKworY2xhc3MgVGVzdEFlcGFjayh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgT0JKRUNUUyA9IFsKKyAgICAgICAgYWV0eXBlcy5FbnVtKCdlbnVtJyksCisgICAgICAgIGFldHlwZXMuVHlwZSgndHlwZScpLAorICAgICAgICBhZXR5cGVzLktleXdvcmQoJ2t3cmQnKSwKKyAgICAgICAgYWV0eXBlcy5SYW5nZSgxLCAxMCksCisgICAgICAgIGFldHlwZXMuQ29tcGFyaXNvbigxLCAnPCAgICcsIDEwKSwKKyAgICAgICAgYWV0eXBlcy5Mb2dpY2FsKCdub3QgJywgMSksCisgICAgICAgIGFldHlwZXMuSW50bFRleHQoMCwgMCwgJ2ludGVybmF0aW9uYWwgdGV4dCcpLAorICAgICAgICBhZXR5cGVzLkludGxXcml0aW5nQ29kZSgwLDApLAorICAgICAgICBhZXR5cGVzLlFEUG9pbnQoNTAsMTAwKSwKKyAgICAgICAgYWV0eXBlcy5RRFJlY3RhbmdsZSg1MCwxMDAsMTUwLDIwMCksCisgICAgICAgIGFldHlwZXMuUkdCQ29sb3IoMHg3MDAwLCAweDYwMDAsIDB4NTAwMCksCisgICAgICAgIGFldHlwZXMuVW5rbm93bigneHh4eCcsICd1bmtub3duIHR5cGUgZGF0YScpLAorICAgICAgICBhZXR5cGVzLkNoYXJhY3RlcigxKSwKKyAgICAgICAgYWV0eXBlcy5DaGFyYWN0ZXIoMiwgYWV0eXBlcy5MaW5lKDIpKSwKKyAgICBdCisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXBfc3RyaW5nKHNlbGYpOgorICAgICAgICBvID0gJ2Egc3RyaW5nJworICAgICAgICBwYWNrZWQgPSBhZXBhY2sucGFjayhvKQorICAgICAgICB1bnBhY2tlZCA9IGFlcGFjay51bnBhY2socGFja2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8sIHVucGFja2VkKQorCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwX2ludChzZWxmKToKKyAgICAgICAgbyA9IDEyCisgICAgICAgIHBhY2tlZCA9IGFlcGFjay5wYWNrKG8pCisgICAgICAgIHVucGFja2VkID0gYWVwYWNrLnVucGFjayhwYWNrZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobywgdW5wYWNrZWQpCisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXBfZmxvYXQoc2VsZik6CisgICAgICAgIG8gPSAxMi4xCisgICAgICAgIHBhY2tlZCA9IGFlcGFjay5wYWNrKG8pCisgICAgICAgIHVucGFja2VkID0gYWVwYWNrLnVucGFjayhwYWNrZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobywgdW5wYWNrZWQpCisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXBfTm9uZShzZWxmKToKKyAgICAgICAgbyA9IE5vbmUKKyAgICAgICAgcGFja2VkID0gYWVwYWNrLnBhY2sobykKKyAgICAgICAgdW5wYWNrZWQgPSBhZXBhY2sudW5wYWNrKHBhY2tlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLCB1bnBhY2tlZCkKKworICAgIGRlZiB0ZXN0X3JvdW5kdHJpcF9hZW9iamVjdHMoc2VsZik6CisgICAgICAgIGZvciBvIGluIHNlbGYuT0JKRUNUUzoKKyAgICAgICAgICAgIHBhY2tlZCA9IGFlcGFjay5wYWNrKG8pCisgICAgICAgICAgICB1bnBhY2tlZCA9IGFlcGFjay51bnBhY2socGFja2VkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG8pLCByZXByKHVucGFja2VkKSkKKworICAgIGRlZiB0ZXN0X3JvdW5kdHJpcF9GU1NwZWMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBDYXJib24uRmlsZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3QgaGFzYXR0cihDYXJib24uRmlsZSwgIkZTU3BlYyIpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG8gPSBDYXJib24uRmlsZS5GU1NwZWMob3MuY3VyZGlyKQorICAgICAgICBwYWNrZWQgPSBhZXBhY2sucGFjayhvKQorICAgICAgICB1bnBhY2tlZCA9IGFlcGFjay51bnBhY2socGFja2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8uYXNfcGF0aG5hbWUoKSwgdW5wYWNrZWQuYXNfcGF0aG5hbWUoKSkKKworICAgIGRlZiB0ZXN0X3JvdW5kdHJpcF9BbGlhcyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IENhcmJvbi5GaWxlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3QgaGFzYXR0cihDYXJib24uRmlsZSwgIkZTU3BlYyIpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG8gPSBDYXJib24uRmlsZS5GU1NwZWMob3MuY3VyZGlyKS5OZXdBbGlhc01pbmltYWwoKQorICAgICAgICBwYWNrZWQgPSBhZXBhY2sucGFjayhvKQorICAgICAgICB1bnBhY2tlZCA9IGFlcGFjay51bnBhY2socGFja2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8uRlNSZXNvbHZlQWxpYXMoTm9uZSlbMF0uYXNfcGF0aG5hbWUoKSwKKyAgICAgICAgICAgIHVucGFja2VkLkZTUmVzb2x2ZUFsaWFzKE5vbmUpWzBdLmFzX3BhdGhuYW1lKCkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEFlcGFjaykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9haWZjLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYWlmYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmIzZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYWlmYy5weQpAQCAtMCwwICsxLDE2MCBAQAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIHJ1bl91bml0dGVzdCwgVEVTVEZOCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGlvCisKK2ltcG9ydCBhaWZjCisKKworY2xhc3MgQUlGQ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmYgPSBzZWxmLmZvdXQgPSBOb25lCisgICAgICAgIHNlbGYuc25kZmlsZXBhdGggPSBmaW5kZmlsZSgnU2luZS0xMDAwSHotMzAwbXMuYWlmJykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgaWYgc2VsZi5mb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZm91dC5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgKGFpZmMuRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbW92ZShURVNURk4pCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3Rfc2tpcHVua25vd24oc2VsZik6CisgICAgICAgICNJc3N1ZSAyMjQ1CisgICAgICAgICNUaGlzIGZpbGUgY29udGFpbnMgY2h1bmsgdHlwZXMgYWlmYyBkb2Vzbid0IHJlY29nbml6ZS4KKyAgICAgICAgc2VsZi5mID0gYWlmYy5vcGVuKHNlbGYuc25kZmlsZXBhdGgpCisKKyAgICBkZWYgdGVzdF9wYXJhbXMoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oc2VsZi5zbmRmaWxlcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldG5jaGFubmVscygpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0c2FtcHdpZHRoKCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRmcmFtZXJhdGUoKSwgNDgwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRuZnJhbWVzKCksIDE0NDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0Y29tcHR5cGUoKSwgJ05PTkUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0Y29tcG5hbWUoKSwgJ25vdCBjb21wcmVzc2VkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHBhcmFtcygpLCAoMiwgMiwgNDgwMDAsIDE0NDAwLCAnTk9ORScsICdub3QgY29tcHJlc3NlZCcpKQorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihzZWxmLnNuZGZpbGVwYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcygyKSwgJ1x4MDBceDAwXHgwMFx4MDBceDBiXHhkNFx4MGJceGQ0JykKKyAgICAgICAgZi5yZXdpbmQoKQorICAgICAgICBwb3MwID0gZi50ZWxsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3MwLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcygyKSwgJ1x4MDBceDAwXHgwMFx4MDBceDBiXHhkNFx4MGJceGQ0JykKKyAgICAgICAgcG9zMiA9IGYudGVsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zMiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRmcmFtZXMoMiksICdceDE3dFx4MTd0Ilx4YWQiXHhhZCcpCisgICAgICAgIGYuc2V0cG9zKHBvczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKDIpLCAnXHgxN3RceDE3dCJceGFkIlx4YWQnKQorICAgICAgICBmLnNldHBvcyhwb3MwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcygyKSwgJ1x4MDBceDAwXHgwMFx4MDBceDBiXHhkNFx4MGJceGQ0JykKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mID0gYWlmYy5vcGVuKHNlbGYuc25kZmlsZXBhdGgpCisgICAgICAgIGZvdXQgPSBzZWxmLmZvdXQgPSBhaWZjLm9wZW4oVEVTVEZOLCAnd2InKQorICAgICAgICBmb3V0LmFpZmMoKQorICAgICAgICBmb3V0LnNldHBhcmFtcyhmLmdldHBhcmFtcygpKQorICAgICAgICBmb3IgZnJhbWUgaW4gcmFuZ2UoZi5nZXRuZnJhbWVzKCkpOgorICAgICAgICAgICAgZm91dC53cml0ZWZyYW1lcyhmLnJlYWRmcmFtZXMoMSkpCisgICAgICAgIGZvdXQuY2xvc2UoKQorICAgICAgICBmb3V0ID0gc2VsZi5mb3V0ID0gYWlmYy5vcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgZi5yZXdpbmQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0cGFyYW1zKCksIGZvdXQuZ2V0cGFyYW1zKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKDUpLCBmb3V0LnJlYWRmcmFtZXMoNSkpCisKKyAgICBkZWYgdGVzdF9jb21wcmVzcyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihzZWxmLnNuZGZpbGVwYXRoKQorICAgICAgICBmb3V0ID0gc2VsZi5mb3V0ID0gYWlmYy5vcGVuKFRFU1RGTiwgJ3diJykKKyAgICAgICAgZm91dC5haWZjKCkKKyAgICAgICAgZm91dC5zZXRuY2hhbm5lbHMoZi5nZXRuY2hhbm5lbHMoKSkKKyAgICAgICAgZm91dC5zZXRzYW1wd2lkdGgoZi5nZXRzYW1wd2lkdGgoKSkKKyAgICAgICAgZm91dC5zZXRmcmFtZXJhdGUoZi5nZXRmcmFtZXJhdGUoKSkKKyAgICAgICAgZm91dC5zZXRjb21wdHlwZSgnVUxBVycsICdmb28nKQorICAgICAgICBmb3IgZnJhbWUgaW4gcmFuZ2UoZi5nZXRuZnJhbWVzKCkpOgorICAgICAgICAgICAgZm91dC53cml0ZWZyYW1lcyhmLnJlYWRmcmFtZXMoMSkpCisgICAgICAgIGZvdXQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoCisgICAgICAgICAgICBvcy5zdGF0KFRFU1RGTikuc3Rfc2l6ZSwKKyAgICAgICAgICAgIG9zLnN0YXQoc2VsZi5zbmRmaWxlcGF0aCkuc3Rfc2l6ZSowLjc1LAorICAgICAgICAgICAgKQorICAgICAgICBmb3V0ID0gc2VsZi5mb3V0ID0gYWlmYy5vcGVuKFRFU1RGTiwgJ3JiJykKKyAgICAgICAgZi5yZXdpbmQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0cGFyYW1zKClbMDozXSwgZm91dC5nZXRwYXJhbXMoKVswOjNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdXQuZ2V0Y29tcHR5cGUoKSwgJ1VMQVcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdXQuZ2V0Y29tcG5hbWUoKSwgJ2ZvbycpCisgICAgICAgICMgWFhYOiB0aGlzIHRlc3QgZmFpbHMsIG5vdCBzdXJlIGlmIGl0IHNob3VsZCBzdWNjZWVkIG9yIG5vdAorICAgICAgICAjIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKDUpLCBmb3V0LnJlYWRmcmFtZXMoNSkpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgY2xhc3MgV3JhcGZpbGUob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlKToKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGUgPSBvcGVuKGZpbGUsICdyYicpCisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZWQgPSBGYWxzZQorICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6IHJldHVybiBnZXRhdHRyKHNlbGYuZmlsZSwgYXR0cikKKyAgICAgICAgdGVzdGZpbGUgPSBXcmFwZmlsZShzZWxmLnNuZGZpbGVwYXRoKQorICAgICAgICBmID0gc2VsZi5mID0gYWlmYy5vcGVuKHRlc3RmaWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RmaWxlLmNsb3NlZCwgRmFsc2UpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RmaWxlLmNsb3NlZCwgVHJ1ZSkKKyAgICAgICAgdGVzdGZpbGUgPSBvcGVuKFRFU1RGTiwgJ3diJykKKyAgICAgICAgZm91dCA9IGFpZmMub3Blbih0ZXN0ZmlsZSwgJ3diJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ZXN0ZmlsZS5jbG9zZWQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYWlmYy5FcnJvcik6CisgICAgICAgICAgICBmb3V0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3RmaWxlLmNsb3NlZCkKKyAgICAgICAgZm91dC5jbG9zZSgpICMgZG8gbm90aGluZworCisKK2NsYXNzIEFJRkNMb3dMZXZlbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcmVhZF93cml0dGVuKHNlbGYpOgorICAgICAgICBkZWYgcmVhZF93cml0dGVuKHNlbGYsIHdoYXQpOgorICAgICAgICAgICAgZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICAgICAgZ2V0YXR0cihhaWZjLCAnX3dyaXRlXycgKyB3aGF0KShmLCB4KQorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihhaWZjLCAnX3JlYWRfJyArIHdoYXQpKGYpCisgICAgICAgIGZvciB4IGluICgtMSwgMCwgMC4xLCAxKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZF93cml0dGVuKHgsICdmbG9hdCcpLCB4KQorICAgICAgICBmb3IgeCBpbiAoZmxvYXQoJ05hTicpLCBmbG9hdCgnSW5mJykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkX3dyaXR0ZW4oeCwgJ2Zsb2F0JyksIGFpZmMuX0hVR0VfVkFMKQorICAgICAgICBmb3IgeCBpbiAoYicnLCBiJ2ZvbycsIGInYScgKiAyNTUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkX3dyaXR0ZW4oeCwgJ3N0cmluZycpLCB4KQorICAgICAgICBmb3IgeCBpbiAoLTB4N0ZGRkZGRkYsIC0xLCAwLCAxLCAweDdGRkZGRkZGKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZF93cml0dGVuKHgsICdsb25nJyksIHgpCisgICAgICAgIGZvciB4IGluICgwLCAxLCAweEZGRkZGRkZGKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZF93cml0dGVuKHgsICd1bG9uZycpLCB4KQorICAgICAgICBmb3IgeCBpbiAoLTB4N0ZGRiwgLTEsIDAsIDEsIDB4N0ZGRik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRfd3JpdHRlbih4LCAnc2hvcnQnKSwgeCkKKyAgICAgICAgZm9yIHggaW4gKDAsIDEsIDB4RkZGRik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRfd3JpdHRlbih4LCAndXNob3J0JyksIHgpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JhaXNlcyhzZWxmKToKKyAgICAgICAgZiA9IGlvLkJ5dGVzSU8oYidceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGFpZmMuX3JlYWRfdWxvbmcsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBhaWZjLl9yZWFkX2xvbmcsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBhaWZjLl9yZWFkX3VzaG9ydCwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGFpZmMuX3JlYWRfc2hvcnQsIGYpCisKKyAgICBkZWYgdGVzdF93cml0ZV9sb25nX3N0cmluZ19yYWlzZXMoc2VsZik6CisgICAgICAgIGYgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGFpZmMuX3dyaXRlX3N0cmluZyhmLCBiJ3RvbyBsb25nJyAqIDI1NSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEFJRkNUZXN0KQorICAgIHJ1bl91bml0dGVzdChBSUZDTG93TGV2ZWxUZXN0KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9hbC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4ODU3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9hbC5weQpAQCAtMCwwICsxLDI1IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisiIiJXaGltcHkgdGVzdCBzY3JpcHQgZm9yIHRoZSBhbCBtb2R1bGUKKyAgIFJvZ2VyIEUuIE1hc3NlCisiIiIKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGltcG9ydF9tb2R1bGUKK2FsID0gaW1wb3J0X21vZHVsZSgnYWwnLCBkZXByZWNhdGVkPVRydWUpCisKK2FsYXR0cnMgPSBbJ19fZG9jX18nLCAnX19uYW1lX18nLCAnZ2V0ZGVmYXVsdCcsICdnZXRtaW5tYXgnLCAnZ2V0bmFtZScsICdnZXRwYXJhbXMnLAorICAgICAgICAgICAnbmV3Y29uZmlnJywgJ29wZW5wb3J0JywgJ3F1ZXJ5cGFyYW1zJywgJ3NldHBhcmFtcyddCisKKyMgVGhpcyBpcyBhIHZlcnkgdW5vYnRydXNpdmUgdGVzdCBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgYWwgbW9kdWxlIGFuZCBhbGwgaXRzCisjIGF0dHJpYnV0ZXMuICBNb3JlIGNvbXByZWhlbnNpdmUgZXhhbXBsZXMgY2FuIGJlIGZvdW5kIGluIERlbW8vYWwKKworZGVmIHRlc3RfbWFpbigpOgorICAgICMgdG91Y2ggYWxsIHRoZSBhdHRyaWJ1dGVzIG9mIGFsIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnVG91Y2hpbmcgYWwgbW9kdWxlIGF0dHJpYnV0ZXMuLi4nCisgICAgZm9yIGF0dHIgaW4gYWxhdHRyczoKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICd0b3VjaGluZzogJywgYXR0cgorICAgICAgICBnZXRhdHRyKGFsLCBhdHRyKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FueWRibS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FueWRibS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDFkZDBiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYW55ZGJtLnB5CkBAIC0wLDAgKzEsOTcgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyIiIlRlc3Qgc2NyaXB0IGZvciB0aGUgYW55ZGJtIG1vZHVsZQorICAgYmFzZWQgb24gdGVzdGR1bWJkYm0ucHkKKyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGdsb2IKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK19mbmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKworIyBTaWxlbmNlIFB5M2sgd2FybmluZworYW55ZGJtID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2FueWRibScsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKworZGVmIF9kZWxldGVfZmlsZXMoKToKKyAgICAjIHdlIGRvbid0IGtub3cgdGhlIHByZWNpc2UgbmFtZSB0aGUgdW5kZXJseWluZyBkYXRhYmFzZSB1c2VzCisgICAgIyBzbyB3ZSB1c2UgZ2xvYiB0byBsb2NhdGUgYWxsIG5hbWVzCisgICAgZm9yIGYgaW4gZ2xvYi5nbG9iKF9mbmFtZSArICIqIik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhmKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworY2xhc3MgQW55REJNVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIF9kaWN0ID0geycwJzogJycsCisgICAgICAgICAgICAgJ2EnOiAnUHl0aG9uOicsCisgICAgICAgICAgICAgJ2InOiAnUHJvZ3JhbW1pbmcnLAorICAgICAgICAgICAgICdjJzogJ3RoZScsCisgICAgICAgICAgICAgJ2QnOiAnd2F5JywKKyAgICAgICAgICAgICAnZic6ICdHdWlkbycsCisgICAgICAgICAgICAgJ2cnOiAnaW50ZW5kZWQnCisgICAgICAgICAgICAgfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuX19pbml0X18oc2VsZiwgKmFyZ3MpCisKKyAgICBkZWYgdGVzdF9hbnlkYm1fY3JlYXRpb24oc2VsZik6CisgICAgICAgIGYgPSBhbnlkYm0ub3BlbihfZm5hbWUsICdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmtleXMoKSwgW10pCisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fZGljdDoKKyAgICAgICAgICAgIGZba2V5XSA9IHNlbGYuX2RpY3Rba2V5XQorICAgICAgICBzZWxmLnJlYWRfaGVscGVyKGYpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfYW55ZGJtX21vZGlmaWNhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5pbml0X2RiKCkKKyAgICAgICAgZiA9IGFueWRibS5vcGVuKF9mbmFtZSwgJ2MnKQorICAgICAgICBzZWxmLl9kaWN0WydnJ10gPSBmWydnJ10gPSAiaW5kZW50ZWQiCisgICAgICAgIHNlbGYucmVhZF9oZWxwZXIoZikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9hbnlkYm1fcmVhZChzZWxmKToKKyAgICAgICAgc2VsZi5pbml0X2RiKCkKKyAgICAgICAgZiA9IGFueWRibS5vcGVuKF9mbmFtZSwgJ3InKQorICAgICAgICBzZWxmLnJlYWRfaGVscGVyKGYpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfYW55ZGJtX2tleXMoc2VsZik6CisgICAgICAgIHNlbGYuaW5pdF9kYigpCisgICAgICAgIGYgPSBhbnlkYm0ub3BlbihfZm5hbWUsICdyJykKKyAgICAgICAga2V5cyA9IHNlbGYua2V5c19oZWxwZXIoZikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgcmVhZF9oZWxwZXIoc2VsZiwgZik6CisgICAgICAgIGtleXMgPSBzZWxmLmtleXNfaGVscGVyKGYpCisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fZGljdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGljdFtrZXldLCBmW2tleV0pCisKKyAgICBkZWYgaW5pdF9kYihzZWxmKToKKyAgICAgICAgZiA9IGFueWRibS5vcGVuKF9mbmFtZSwgJ24nKQorICAgICAgICBmb3IgayBpbiBzZWxmLl9kaWN0OgorICAgICAgICAgICAgZltrXSA9IHNlbGYuX2RpY3Rba10KKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYga2V5c19oZWxwZXIoc2VsZiwgZik6CisgICAgICAgIGtleXMgPSBmLmtleXMoKQorICAgICAgICBrZXlzLnNvcnQoKQorICAgICAgICBka2V5cyA9IHNlbGYuX2RpY3Qua2V5cygpCisgICAgICAgIGRrZXlzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIGRrZXlzKQorICAgICAgICByZXR1cm4ga2V5cworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBfZGVsZXRlX2ZpbGVzKCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgX2RlbGV0ZV9maWxlcygpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0cnk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQW55REJNVGVzdENhc2UpCisgICAgZmluYWxseToKKyAgICAgICAgX2RlbGV0ZV9maWxlcygpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FwcGxlc2luZ2xlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYXBwbGVzaW5nbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJlZmZlMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FwcGxlc2luZ2xlLnB5CkBAIC0wLDAgKzEsNzEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHN0cnVjdAorCitNYWNPUyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdNYWNPUycpCisjIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGV4aXN0IGlmIE1hY09TIGRvZXMuCitpbXBvcnQgYXBwbGVzaW5nbGUKKworQVNfTUFHSUM9MHgwMDA1MTYwMAorQVNfVkVSU0lPTj0weDAwMDIwMDAwCitkYXRhZm9ya2RhdGEgPSAnaGVsbG9cclwwd29ybGRcbicKK3Jlc291cmNlZm9ya2RhdGEgPSAnZ29vZGJ5ZVxuY3J1ZWxcMHdvcmxkXHInCisKK2FwcGxlc2luZ2xlZGF0YSA9IHN0cnVjdC5wYWNrKCI+bGwxNnNoIiwgQVNfTUFHSUMsIEFTX1ZFUlNJT04sICJmb28iLCAyKSArIFwKKyAgICBzdHJ1Y3QucGFjaygiPmxsbGxsbCIsIDEsIDUwLCBsZW4oZGF0YWZvcmtkYXRhKSwKKyAgICAgICAgMiwgNTArbGVuKGRhdGFmb3JrZGF0YSksIGxlbihyZXNvdXJjZWZvcmtkYXRhKSkgKyBcCisgICAgZGF0YWZvcmtkYXRhICsgXAorICAgIHJlc291cmNlZm9ya2RhdGEKK1RFU1RGTjIgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgJzInCisKK2NsYXNzIFRlc3RBcHBsZXNpbmdsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndycpCisgICAgICAgIGZwLndyaXRlKGFwcGxlc2luZ2xlZGF0YSkKKyAgICAgICAgZnAuY2xvc2UoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOMikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIGNvbXBhcmVEYXRhKHNlbGYsIGlzcmYsIGRhdGEpOgorICAgICAgICBpZiBpc3JmOgorICAgICAgICAgICAgZnAgPSBNYWNPUy5vcGVucmYoVEVTVEZOMiwgJypyYicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmcCA9IG9wZW4oVEVTVEZOMiwgJ3JiJykKKyAgICAgICAgZmlsZWRhdGEgPSBmcC5yZWFkKDEwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZmlsZWRhdGEpCisKKyAgICBkZWYgdGVzdF9hcHBsZXNpbmdsZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTjIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYXBwbGVzaW5nbGUuZGVjb2RlKHRlc3Rfc3VwcG9ydC5URVNURk4sIFRFU1RGTjIpCisgICAgICAgIHNlbGYuY29tcGFyZURhdGEoRmFsc2UsIGRhdGFmb3JrZGF0YSkKKyAgICAgICAgc2VsZi5jb21wYXJlRGF0YShUcnVlLCByZXNvdXJjZWZvcmtkYXRhKQorCisgICAgZGVmIHRlc3RfYXBwbGVzaW5nbGVfcmVzb25seShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTjIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYXBwbGVzaW5nbGUuZGVjb2RlKHRlc3Rfc3VwcG9ydC5URVNURk4sIFRFU1RGTjIsIHJlc29ubHk9VHJ1ZSkKKyAgICAgICAgc2VsZi5jb21wYXJlRGF0YShGYWxzZSwgcmVzb3VyY2Vmb3JrZGF0YSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEFwcGxlc2luZ2xlKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYXJncGFyc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBmZGY0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5CkBAIC0wLDAgKzEsNDc2MyBAQAorIyBBdXRob3I6IFN0ZXZlbiBKLiBCZXRoYXJkIDxzdGV2ZW4uYmV0aGFyZEBnbWFpbC5jb20+LgorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cworaW1wb3J0IHRleHR3cmFwCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGFyZ3BhcnNlCisKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKK2NsYXNzIFN0ZElPQnVmZmVyKFN0cmluZ0lPKToKKyAgICBwYXNzCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBhc3NlcnRFcXVhbChzZWxmLCBvYmoxLCBvYmoyKToKKyAgICAgICAgaWYgb2JqMSAhPSBvYmoyOgorICAgICAgICAgICAgcHJpbnQoJycpCisgICAgICAgICAgICBwcmludChyZXByKG9iajEpKQorICAgICAgICAgICAgcHJpbnQocmVwcihvYmoyKSkKKyAgICAgICAgICAgIHByaW50KG9iajEpCisgICAgICAgICAgICBwcmludChvYmoyKQorICAgICAgICBzdXBlcihUZXN0Q2FzZSwgc2VsZikuYXNzZXJ0RXF1YWwob2JqMSwgb2JqMikKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBUaGUgdGVzdHMgYXNzdW1lIHRoYXQgbGluZSB3cmFwcGluZyBvY2N1cnMgYXQgODAgY29sdW1ucywgYnV0IHRoaXMKKyAgICAgICAgIyBiZWhhdmlvdXIgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc2V0dGluZyB0aGUgQ09MVU1OUyBlbnZpcm9ubWVudAorICAgICAgICAjIHZhcmlhYmxlLiAgVG8gZW5zdXJlIHRoYXQgdGhpcyBhc3N1bXB0aW9uIGlzIHRydWUsIHVuc2V0IENPTFVNTlMuCisgICAgICAgIGVudiA9IHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkKKyAgICAgICAgZW52LnVuc2V0KCJDT0xVTU5TIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGVudi5fX2V4aXRfXykKKworCitjbGFzcyBUZW1wRGlyTWl4aW4ob2JqZWN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50ZW1wX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBzZWxmLm9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcihzZWxmLnRlbXBfZGlyKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBvcy5jaGRpcihzZWxmLm9sZF9kaXIpCisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi50ZW1wX2RpciwgVHJ1ZSkKKworICAgIGRlZiBjcmVhdGVfcmVhZG9ubHlfZmlsZShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBfZGlyLCBmaWxlbmFtZSkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3cnKSBhcyBmaWxlOgorICAgICAgICAgICAgZmlsZS53cml0ZShmaWxlbmFtZSkKKyAgICAgICAgb3MuY2htb2QoZmlsZV9wYXRoLCBzdGF0LlNfSVJFQUQpCisKK2NsYXNzIFNpZyhvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgc2VsZi5rd2FyZ3MgPSBrd2FyZ3MKKworCitjbGFzcyBOUyhvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUoa3dhcmdzKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBzb3J0ZWRfaXRlbXMgPSBzb3J0ZWQoc2VsZi5fX2RpY3RfXy5pdGVtcygpKQorICAgICAgICBrd2FyZ19zdHIgPSAnLCAnLmpvaW4oWyclcz0lcicgJSB0dXAgZm9yIHR1cCBpbiBzb3J0ZWRfaXRlbXNdKQorICAgICAgICByZXR1cm4gJyVzKCVzKScgJSAodHlwZShzZWxmKS5fX25hbWVfXywga3dhcmdfc3RyKQorCisgICAgX19oYXNoX18gPSBOb25lCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHZhcnMoc2VsZikgPT0gdmFycyhvdGhlcikKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IChzZWxmID09IG90aGVyKQorCisKK2NsYXNzIEFyZ3VtZW50UGFyc2VyRXJyb3IoRXhjZXB0aW9uKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsIGVycm9yX2NvZGU9Tm9uZSk6CisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBtZXNzYWdlLCBzdGRvdXQsIHN0ZGVycikKKyAgICAgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZQorICAgICAgICBzZWxmLnN0ZG91dCA9IHN0ZG91dAorICAgICAgICBzZWxmLnN0ZGVyciA9IHN0ZGVycgorICAgICAgICBzZWxmLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlCisKKworZGVmIHN0ZGVycl90b19wYXJzZXJfZXJyb3IocGFyc2VfYXJncywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAjIGlmIHRoaXMgaXMgYmVpbmcgY2FsbGVkIHJlY3Vyc2l2ZWx5IGFuZCBzdGRlcnIgb3Igc3Rkb3V0IGlzIGFscmVhZHkgYmVpbmcKKyAgICAjIHJlZGlyZWN0ZWQsIHNpbXBseSBjYWxsIHRoZSBmdW5jdGlvbiBhbmQgbGV0IHRoZSBlbmNsb3NpbmcgZnVuY3Rpb24KKyAgICAjIGNhdGNoIHRoZSBleGNlcHRpb24KKyAgICBpZiBpc2luc3RhbmNlKHN5cy5zdGRlcnIsIFN0ZElPQnVmZmVyKSBvciBpc2luc3RhbmNlKHN5cy5zdGRvdXQsIFN0ZElPQnVmZmVyKToKKyAgICAgICAgcmV0dXJuIHBhcnNlX2FyZ3MoKmFyZ3MsICoqa3dhcmdzKQorCisgICAgIyBpZiB0aGlzIGlzIG5vdCBiZWluZyBjYWxsZWQgcmVjdXJzaXZlbHksIHJlZGlyZWN0IHN0ZGVyciBhbmQKKyAgICAjIHVzZSBpdCBhcyB0aGUgQXJndW1lbnRQYXJzZXJFcnJvciBtZXNzYWdlCisgICAgb2xkX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICBvbGRfc3RkZXJyID0gc3lzLnN0ZGVycgorICAgIHN5cy5zdGRvdXQgPSBTdGRJT0J1ZmZlcigpCisgICAgc3lzLnN0ZGVyciA9IFN0ZElPQnVmZmVyKCkKKyAgICB0cnk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlX2FyZ3MoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgZm9yIGtleSBpbiBsaXN0KHZhcnMocmVzdWx0KSk6CisgICAgICAgICAgICAgICAgaWYgZ2V0YXR0cihyZXN1bHQsIGtleSkgaXMgc3lzLnN0ZG91dDoKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihyZXN1bHQsIGtleSwgb2xkX3N0ZG91dCkKKyAgICAgICAgICAgICAgICBpZiBnZXRhdHRyKHJlc3VsdCwga2V5KSBpcyBzeXMuc3RkZXJyOgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHJlc3VsdCwga2V5LCBvbGRfc3RkZXJyKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgIGNvZGUgPSBzeXMuZXhjX2luZm8oKVsxXS5jb2RlCisgICAgICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0LmdldHZhbHVlKCkKKyAgICAgICAgICAgIHN0ZGVyciA9IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKQorICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRQYXJzZXJFcnJvcigiU3lzdGVtRXhpdCIsIHN0ZG91dCwgc3RkZXJyLCBjb2RlKQorICAgIGZpbmFsbHk6CisgICAgICAgIHN5cy5zdGRvdXQgPSBvbGRfc3Rkb3V0CisgICAgICAgIHN5cy5zdGRlcnIgPSBvbGRfc3RkZXJyCisKKworY2xhc3MgRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYXJncGFyc2UuQXJndW1lbnRQYXJzZXIpOgorCisgICAgZGVmIHBhcnNlX2FyZ3Moc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcGFyc2VfYXJncyA9IHN1cGVyKEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyLCBzZWxmKS5wYXJzZV9hcmdzCisgICAgICAgIHJldHVybiBzdGRlcnJfdG9fcGFyc2VyX2Vycm9yKHBhcnNlX2FyZ3MsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBleGl0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGV4aXQgPSBzdXBlcihFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlciwgc2VsZikuZXhpdAorICAgICAgICByZXR1cm4gc3RkZXJyX3RvX3BhcnNlcl9lcnJvcihleGl0LCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgZXJyb3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgZXJyb3IgPSBzdXBlcihFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlciwgc2VsZikuZXJyb3IKKyAgICAgICAgcmV0dXJuIHN0ZGVycl90b19wYXJzZXJfZXJyb3IoZXJyb3IsICphcmdzLCAqKmt3YXJncykKKworCitjbGFzcyBQYXJzZXJUZXN0ZXJNZXRhY2xhc3ModHlwZSk6CisgICAgIiIiQWRkcyBwYXJzZXIgdGVzdHMgdXNpbmcgdGhlIGNsYXNzIGF0dHJpYnV0ZXMuCisKKyAgICBDbGFzc2VzIG9mIHRoaXMgdHlwZSBzaG91bGQgc3BlY2lmeSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzIC0tIGEgbGlzdCBvZiBTaWcgb2JqZWN0cyB3aGljaCBzcGVjaWZ5CisgICAgICAgIHRoZSBzaWduYXR1cmVzIG9mIEFyZ3VtZW50IG9iamVjdHMgdG8gYmUgY3JlYXRlZAorICAgIGZhaWx1cmVzIC0tIGEgbGlzdCBvZiBhcmdzIGxpc3RzIHRoYXQgc2hvdWxkIGNhdXNlIHRoZSBwYXJzZXIKKyAgICAgICAgdG8gZmFpbAorICAgIHN1Y2Nlc3NlcyAtLSBhIGxpc3Qgb2YgKGluaXRpYWxfYXJncywgb3B0aW9ucywgcmVtYWluaW5nX2FyZ3MpIHR1cGxlcworICAgICAgICB3aGVyZSBpbml0aWFsX2FyZ3Mgc3BlY2lmaWVzIHRoZSBzdHJpbmcgYXJncyB0byBiZSBwYXJzZWQsCisgICAgICAgIG9wdGlvbnMgaXMgYSBkaWN0IHRoYXQgc2hvdWxkIG1hdGNoIHRoZSB2YXJzKCkgb2YgdGhlIG9wdGlvbnMKKyAgICAgICAgcGFyc2VkIG91dCBvZiBpbml0aWFsX2FyZ3MsIGFuZCByZW1haW5pbmdfYXJncyBzaG91bGQgYmUgYW55CisgICAgICAgIHJlbWFpbmluZyB1bnBhcnNlZCBhcmd1bWVudHMKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBib2R5ZGljdCk6CisgICAgICAgIGlmIG5hbWUgPT0gJ1BhcnNlclRlc3RDYXNlJzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgZGVmYXVsdCBwYXJzZXIgc2lnbmF0dXJlIGlzIGVtcHR5CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKGNscywgJ3BhcnNlcl9zaWduYXR1cmUnKToKKyAgICAgICAgICAgIGNscy5wYXJzZXJfc2lnbmF0dXJlID0gU2lnKCkKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoY2xzLCAncGFyc2VyX2NsYXNzJyk6CisgICAgICAgICAgICBjbHMucGFyc2VyX2NsYXNzID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIKKworICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAjIGZ1bmN0aW9ucyBmb3IgYWRkaW5nIG9wdGlvbmFsIGFyZ3VtZW50cworICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBkZWYgbm9fZ3JvdXBzKHBhcnNlciwgYXJndW1lbnRfc2lnbmF0dXJlcyk6CisgICAgICAgICAgICAiIiJBZGQgYWxsIGFyZ3VtZW50cyBkaXJlY3RseSB0byB0aGUgcGFyc2VyIiIiCisgICAgICAgICAgICBmb3Igc2lnIGluIGFyZ3VtZW50X3NpZ25hdHVyZXM6CisgICAgICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgqc2lnLmFyZ3MsICoqc2lnLmt3YXJncykKKworICAgICAgICBkZWYgb25lX2dyb3VwKHBhcnNlciwgYXJndW1lbnRfc2lnbmF0dXJlcyk6CisgICAgICAgICAgICAiIiJBZGQgYWxsIGFyZ3VtZW50cyB1bmRlciBhIHNpbmdsZSBncm91cCBpbiB0aGUgcGFyc2VyIiIiCisgICAgICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2ZvbycpCisgICAgICAgICAgICBmb3Igc2lnIGluIGFyZ3VtZW50X3NpZ25hdHVyZXM6CisgICAgICAgICAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCpzaWcuYXJncywgKipzaWcua3dhcmdzKQorCisgICAgICAgIGRlZiBtYW55X2dyb3VwcyhwYXJzZXIsIGFyZ3VtZW50X3NpZ25hdHVyZXMpOgorICAgICAgICAgICAgIiIiQWRkIGVhY2ggYXJndW1lbnQgaW4gaXRzIG93biBncm91cCB0byB0aGUgcGFyc2VyIiIiCisgICAgICAgICAgICBmb3IgaSwgc2lnIGluIGVudW1lcmF0ZShhcmd1bWVudF9zaWduYXR1cmVzKToKKyAgICAgICAgICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2ZvbzolaScgJSBpKQorICAgICAgICAgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgqc2lnLmFyZ3MsICoqc2lnLmt3YXJncykKKworICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICMgZnVuY3Rpb25zIGZvciBwYXJzaW5nIGFyZ3MKKyAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBkZWYgbGlzdGFyZ3MocGFyc2VyLCBhcmdzKToKKyAgICAgICAgICAgICIiIlBhcnNlIHRoZSBhcmdzIGJ5IHBhc3NpbmcgaW4gYSBsaXN0IiIiCisgICAgICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgICAgICBkZWYgc3lzYXJncyhwYXJzZXIsIGFyZ3MpOgorICAgICAgICAgICAgIiIiUGFyc2UgdGhlIGFyZ3MgYnkgZGVmYXVsdGluZyB0byBzeXMuYXJndiIiIgorICAgICAgICAgICAgb2xkX3N5c19hcmd2ID0gc3lzLmFyZ3YKKyAgICAgICAgICAgIHN5cy5hcmd2ID0gW29sZF9zeXNfYXJndlswXV0gKyBhcmdzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3lzLmFyZ3YgPSBvbGRfc3lzX2FyZ3YKKworICAgICAgICAjIGNsYXNzIHRoYXQgaG9sZHMgdGhlIGNvbWJpbmF0aW9uIG9mIG9uZSBvcHRpb25hbCBhcmd1bWVudAorICAgICAgICAjIGFkZGl0aW9uIG1ldGhvZCBhbmQgb25lIGFyZyBwYXJzaW5nIG1ldGhvZAorICAgICAgICBjbGFzcyBBZGRUZXN0cyhvYmplY3QpOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdGVyX2NscywgYWRkX2FyZ3VtZW50cywgcGFyc2VfYXJncyk6CisgICAgICAgICAgICAgICAgc2VsZi5fYWRkX2FyZ3VtZW50cyA9IGFkZF9hcmd1bWVudHMKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9hcmdzID0gcGFyc2VfYXJncworCisgICAgICAgICAgICAgICAgYWRkX2FyZ3VtZW50c19uYW1lID0gc2VsZi5fYWRkX2FyZ3VtZW50cy5fX25hbWVfXworICAgICAgICAgICAgICAgIHBhcnNlX2FyZ3NfbmFtZSA9IHNlbGYuX3BhcnNlX2FyZ3MuX19uYW1lX18KKyAgICAgICAgICAgICAgICBmb3IgdGVzdF9mdW5jIGluIFtzZWxmLnRlc3RfZmFpbHVyZXMsIHNlbGYudGVzdF9zdWNjZXNzZXNdOgorICAgICAgICAgICAgICAgICAgICBmdW5jX25hbWUgPSB0ZXN0X2Z1bmMuX19uYW1lX18KKyAgICAgICAgICAgICAgICAgICAgbmFtZXMgPSBmdW5jX25hbWUsIGFkZF9hcmd1bWVudHNfbmFtZSwgcGFyc2VfYXJnc19uYW1lCisgICAgICAgICAgICAgICAgICAgIHRlc3RfbmFtZSA9ICdfJy5qb2luKG5hbWVzKQorCisgICAgICAgICAgICAgICAgICAgIGRlZiB3cmFwcGVyKHNlbGYsIHRlc3RfZnVuYz10ZXN0X2Z1bmMpOgorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9mdW5jKHNlbGYpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuX19uYW1lX18gPSB0ZXN0X25hbWUKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cih0ZXN0ZXJfY2xzLCB0ZXN0X25hbWUsIHdyYXBwZXIpCisKKyAgICAgICAgICAgIGRlZiBfZ2V0X3BhcnNlcihzZWxmLCB0ZXN0ZXIpOgorICAgICAgICAgICAgICAgIGFyZ3MgPSB0ZXN0ZXIucGFyc2VyX3NpZ25hdHVyZS5hcmdzCisgICAgICAgICAgICAgICAga3dhcmdzID0gdGVzdGVyLnBhcnNlcl9zaWduYXR1cmUua3dhcmdzCisgICAgICAgICAgICAgICAgcGFyc2VyID0gdGVzdGVyLnBhcnNlcl9jbGFzcygqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5fYWRkX2FyZ3VtZW50cyhwYXJzZXIsIHRlc3Rlci5hcmd1bWVudF9zaWduYXR1cmVzKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgICAgICAgICAgZGVmIHRlc3RfZmFpbHVyZXMoc2VsZiwgdGVzdGVyKToKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHRlc3RlcikKKyAgICAgICAgICAgICAgICBmb3IgYXJnc19zdHIgaW4gdGVzdGVyLmZhaWx1cmVzOgorICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc19zdHIuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICByYWlzZXMgPSB0ZXN0ZXIuYXNzZXJ0UmFpc2VzCisgICAgICAgICAgICAgICAgICAgIHJhaXNlcyhBcmd1bWVudFBhcnNlckVycm9yLCBwYXJzZXIucGFyc2VfYXJncywgYXJncykKKworICAgICAgICAgICAgZGVmIHRlc3Rfc3VjY2Vzc2VzKHNlbGYsIHRlc3Rlcik6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcih0ZXN0ZXIpCisgICAgICAgICAgICAgICAgZm9yIGFyZ3MsIGV4cGVjdGVkX25zIGluIHRlc3Rlci5zdWNjZXNzZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJncywgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzLnNwbGl0KCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0X25zID0gc2VsZi5fcGFyc2VfYXJncyhwYXJzZXIsIGFyZ3MpCisgICAgICAgICAgICAgICAgICAgIHRlc3Rlci5hc3NlcnRFcXVhbChleHBlY3RlZF9ucywgcmVzdWx0X25zKQorCisgICAgICAgICMgYWRkIHRlc3RzIGZvciBlYWNoIGNvbWJpbmF0aW9uIG9mIGFuIG9wdGlvbmFscyBhZGRpbmcgbWV0aG9kCisgICAgICAgICMgYW5kIGFuIGFyZyBwYXJzaW5nIG1ldGhvZAorICAgICAgICBmb3IgYWRkX2FyZ3VtZW50cyBpbiBbbm9fZ3JvdXBzLCBvbmVfZ3JvdXAsIG1hbnlfZ3JvdXBzXToKKyAgICAgICAgICAgIGZvciBwYXJzZV9hcmdzIGluIFtsaXN0YXJncywgc3lzYXJnc106CisgICAgICAgICAgICAgICAgQWRkVGVzdHMoY2xzLCBhZGRfYXJndW1lbnRzLCBwYXJzZV9hcmdzKQorCitiYXNlcyA9IFRlc3RDYXNlLAorUGFyc2VyVGVzdENhc2UgPSBQYXJzZXJUZXN0ZXJNZXRhY2xhc3MoJ1BhcnNlclRlc3RDYXNlJywgYmFzZXMsIHt9KQorCisjID09PT09PT09PT09PT09PQorIyBPcHRpb25hbHMgdGVzdHMKKyMgPT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RPcHRpb25hbHNTaW5nbGVEYXNoKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIHdpdGggYSBzaW5nbGUtZGFzaCBvcHRpb24gc3RyaW5nIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnKV0KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnYScsICctLWZvbycsICcteCAtLWZvbycsICcteCAteSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSkpLAorICAgICAgICAoJy14IGEnLCBOUyh4PSdhJykpLAorICAgICAgICAoJy14YScsIE5TKHg9J2EnKSksCisgICAgICAgICgnLXggLTEnLCBOUyh4PSctMScpKSwKKyAgICAgICAgKCcteC0xJywgTlMoeD0nLTEnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNTaW5nbGVEYXNoQ29tYmluZWQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgd2l0aCBhIHNpbmdsZS1kYXNoIG9wdGlvbiBzdHJpbmciIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICAgICAgU2lnKCcteXl5JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PTQyKSwKKyAgICAgICAgU2lnKCcteicpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnYScsICctLWZvbycsICcteGEnLCAnLXggLS1mb28nLCAnLXggLXonLCAnLXogLXgnLAorICAgICAgICAgICAgICAgICcteXgnLCAnLXl6IGEnLCAnLXl5eXgnLCAnLXl5eXphJywgJy14eXphJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1GYWxzZSwgeXl5PU5vbmUsIHo9Tm9uZSkpLAorICAgICAgICAoJy14JywgTlMoeD1UcnVlLCB5eXk9Tm9uZSwgej1Ob25lKSksCisgICAgICAgICgnLXphJywgTlMoeD1GYWxzZSwgeXl5PU5vbmUsIHo9J2EnKSksCisgICAgICAgICgnLXogYScsIE5TKHg9RmFsc2UsIHl5eT1Ob25lLCB6PSdhJykpLAorICAgICAgICAoJy14emEnLCBOUyh4PVRydWUsIHl5eT1Ob25lLCB6PSdhJykpLAorICAgICAgICAoJy14eiBhJywgTlMoeD1UcnVlLCB5eXk9Tm9uZSwgej0nYScpKSwKKyAgICAgICAgKCcteCAtemEnLCBOUyh4PVRydWUsIHl5eT1Ob25lLCB6PSdhJykpLAorICAgICAgICAoJy14IC16IGEnLCBOUyh4PVRydWUsIHl5eT1Ob25lLCB6PSdhJykpLAorICAgICAgICAoJy15JywgTlMoeD1GYWxzZSwgeXl5PTQyLCB6PU5vbmUpKSwKKyAgICAgICAgKCcteXl5JywgTlMoeD1GYWxzZSwgeXl5PTQyLCB6PU5vbmUpKSwKKyAgICAgICAgKCcteCAteXl5IC16YScsIE5TKHg9VHJ1ZSwgeXl5PTQyLCB6PSdhJykpLAorICAgICAgICAoJy14IC15eXkgLXogYScsIE5TKHg9VHJ1ZSwgeXl5PTQyLCB6PSdhJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzU2luZ2xlRGFzaExvbmcoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgd2l0aCBhIG11bHRpLWNoYXJhY3RlciBzaW5nbGUtZGFzaCBvcHRpb24gc3RyaW5nIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLWZvbycpXQorICAgIGZhaWx1cmVzID0gWyctZm9vJywgJ2EnLCAnLS1mb28nLCAnLWZvbyAtLWZvbycsICctZm9vIC15JywgJy1mb29hJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPU5vbmUpKSwKKyAgICAgICAgKCctZm9vIGEnLCBOUyhmb289J2EnKSksCisgICAgICAgICgnLWZvbyAtMScsIE5TKGZvbz0nLTEnKSksCisgICAgICAgICgnLWZvIGEnLCBOUyhmb289J2EnKSksCisgICAgICAgICgnLWYgYScsIE5TKGZvbz0nYScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc1NpbmdsZURhc2hTdWJzZXRBbWJpZ3VvdXMoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgT3B0aW9uYWxzIHdoZXJlIG9wdGlvbiBzdHJpbmdzIGFyZSBzdWJzZXRzIG9mIGVhY2ggb3RoZXIiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctZicpLCBTaWcoJy1mb29iYXInKSwgU2lnKCctZm9vcmFiJyldCisgICAgZmFpbHVyZXMgPSBbJy1mJywgJy1mb28nLCAnLWZvJywgJy1mb28gYicsICctZm9vYicsICctZm9vYmEnLCAnLWZvb3JhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZj1Ob25lLCBmb29iYXI9Tm9uZSwgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZiBhJywgTlMoZj0nYScsIGZvb2Jhcj1Ob25lLCBmb29yYWI9Tm9uZSkpLAorICAgICAgICAoJy1mYScsIE5TKGY9J2EnLCBmb29iYXI9Tm9uZSwgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZm9hJywgTlMoZj0nb2EnLCBmb29iYXI9Tm9uZSwgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZm9vYScsIE5TKGY9J29vYScsIGZvb2Jhcj1Ob25lLCBmb29yYWI9Tm9uZSkpLAorICAgICAgICAoJy1mb29iYXIgYScsIE5TKGY9Tm9uZSwgZm9vYmFyPSdhJywgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZm9vcmFiIGEnLCBOUyhmPU5vbmUsIGZvb2Jhcj1Ob25lLCBmb29yYWI9J2EnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNTaW5nbGVEYXNoQW1iaWd1b3VzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IE9wdGlvbmFscyB0aGF0IHBhcnRpYWxseSBtYXRjaCBidXQgYXJlIG5vdCBzdWJzZXRzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLWZvb2JhcicpLCBTaWcoJy1mb29yYWInKV0KKyAgICBmYWlsdXJlcyA9IFsnLWYnLCAnLWYgYScsICctZmEnLCAnLWZvYScsICctZm9vJywgJy1mbycsICctZm9vIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb29iYXI9Tm9uZSwgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZm9vYiBhJywgTlMoZm9vYmFyPSdhJywgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZm9vciBhJywgTlMoZm9vYmFyPU5vbmUsIGZvb3JhYj0nYScpKSwKKyAgICAgICAgKCctZm9vYmEgYScsIE5TKGZvb2Jhcj0nYScsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZvb3JhIGEnLCBOUyhmb29iYXI9Tm9uZSwgZm9vcmFiPSdhJykpLAorICAgICAgICAoJy1mb29iYXIgYScsIE5TKGZvb2Jhcj0nYScsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZvb3JhYiBhJywgTlMoZm9vYmFyPU5vbmUsIGZvb3JhYj0nYScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc051bWVyaWMoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgd2l0aCBhIHNob3J0IG9wdCBzdHJpbmciIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctMScsIGRlc3Q9J29uZScpXQorICAgIGZhaWx1cmVzID0gWyctMScsICdhJywgJy0xIC0tZm9vJywgJy0xIC15JywgJy0xIC0xJywgJy0xIC0yJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMob25lPU5vbmUpKSwKKyAgICAgICAgKCctMSBhJywgTlMob25lPSdhJykpLAorICAgICAgICAoJy0xYScsIE5TKG9uZT0nYScpKSwKKyAgICAgICAgKCctMS0yJywgTlMob25lPSctMicpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0RvdWJsZURhc2goUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgd2l0aCBhIGRvdWJsZS1kYXNoIG9wdGlvbiBzdHJpbmciIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctLWZvbycpXQorICAgIGZhaWx1cmVzID0gWyctLWZvbycsICctZicsICctZiBhJywgJ2EnLCAnLS1mb28gLXgnLCAnLS1mb28gLS1iYXInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289Tm9uZSkpLAorICAgICAgICAoJy0tZm9vIGEnLCBOUyhmb289J2EnKSksCisgICAgICAgICgnLS1mb289YScsIE5TKGZvbz0nYScpKSwKKyAgICAgICAgKCctLWZvbyAtMi41JywgTlMoZm9vPSctMi41JykpLAorICAgICAgICAoJy0tZm9vPS0yLjUnLCBOUyhmb289Jy0yLjUnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNEb3VibGVEYXNoUGFydGlhbE1hdGNoKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBwYXJ0aWFsIG1hdGNoaW5nIHdpdGggYSBkb3VibGUtZGFzaCBvcHRpb24gc3RyaW5nIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tYmFkZ2VyJywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgICAgIFNpZygnLS1iYXQnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy0tYmFyJywgJy0tYicsICctLWJhJywgJy0tYj0yJywgJy0tYmE9NCcsICctLWJhZGdlIDUnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhiYWRnZXI9RmFsc2UsIGJhdD1Ob25lKSksCisgICAgICAgICgnLS1iYXQgWCcsIE5TKGJhZGdlcj1GYWxzZSwgYmF0PSdYJykpLAorICAgICAgICAoJy0tYmFkJywgTlMoYmFkZ2VyPVRydWUsIGJhdD1Ob25lKSksCisgICAgICAgICgnLS1iYWRnJywgTlMoYmFkZ2VyPVRydWUsIGJhdD1Ob25lKSksCisgICAgICAgICgnLS1iYWRnZScsIE5TKGJhZGdlcj1UcnVlLCBiYXQ9Tm9uZSkpLAorICAgICAgICAoJy0tYmFkZ2VyJywgTlMoYmFkZ2VyPVRydWUsIGJhdD1Ob25lKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNEb3VibGVEYXNoUHJlZml4TWF0Y2goUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHdoZW4gb25lIGRvdWJsZS1kYXNoIG9wdGlvbiBzdHJpbmcgaXMgYSBwcmVmaXggb2YgYW5vdGhlciIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWJhZGdlcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgICAgICBTaWcoJy0tYmEnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy0tYmFyJywgJy0tYicsICctLWJhJywgJy0tYj0yJywgJy0tYmFkZ2UgNSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGJhZGdlcj1GYWxzZSwgYmE9Tm9uZSkpLAorICAgICAgICAoJy0tYmEgWCcsIE5TKGJhZGdlcj1GYWxzZSwgYmE9J1gnKSksCisgICAgICAgICgnLS1iYT1YJywgTlMoYmFkZ2VyPUZhbHNlLCBiYT0nWCcpKSwKKyAgICAgICAgKCctLWJhZCcsIE5TKGJhZGdlcj1UcnVlLCBiYT1Ob25lKSksCisgICAgICAgICgnLS1iYWRnJywgTlMoYmFkZ2VyPVRydWUsIGJhPU5vbmUpKSwKKyAgICAgICAgKCctLWJhZGdlJywgTlMoYmFkZ2VyPVRydWUsIGJhPU5vbmUpKSwKKyAgICAgICAgKCctLWJhZGdlcicsIE5TKGJhZGdlcj1UcnVlLCBiYT1Ob25lKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNTaW5nbGVEb3VibGVEYXNoKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIHdpdGggc2luZ2xlLSBhbmQgZG91YmxlLWRhc2ggb3B0aW9uIHN0cmluZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLWYnLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICAgICAgU2lnKCctLWJhcicpLAorICAgICAgICBTaWcoJy1iYXonLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9NDIpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLS1iYXInLCAnLWZiYXInLCAnLWZiYXonLCAnLWJhemYnLCAnLWIgQicsICdCJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZj1GYWxzZSwgYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgICAgICgnLWYnLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJy0tYmEgQicsIE5TKGY9RmFsc2UsIGJhcj0nQicsIGJhej1Ob25lKSksCisgICAgICAgICgnLWYgLS1iYXIgQicsIE5TKGY9VHJ1ZSwgYmFyPSdCJywgYmF6PU5vbmUpKSwKKyAgICAgICAgKCctZiAtYicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej00MikpLAorICAgICAgICAoJy1iYSAtZicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej00MikpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWx0ZXJuYXRlUHJlZml4Q2hhcnMoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgd2l0aCBvcHRpb24gc3RyaW5ncyB3aXRoIGN1c3RvbSBwcmVmaXhlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcmVmaXhfY2hhcnM9Jys6LycsIGFkZF9oZWxwPUZhbHNlKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnK2YnLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICAgICAgU2lnKCc6OmJhcicpLAorICAgICAgICBTaWcoJy9iYXonLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9NDIpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLS1iYXInLCAnLWZiYXInLCAnLWIgQicsICdCJywgJy1mJywgJy0tYmFyIEInLCAnLWJheicsICctaCcsICctLWhlbHAnLCAnK2gnLCAnOjpoZWxwJywgJy9oZWxwJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZj1GYWxzZSwgYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgICAgICgnK2YnLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJzo6YmEgQicsIE5TKGY9RmFsc2UsIGJhcj0nQicsIGJhej1Ob25lKSksCisgICAgICAgICgnK2YgOjpiYXIgQicsIE5TKGY9VHJ1ZSwgYmFyPSdCJywgYmF6PU5vbmUpKSwKKyAgICAgICAgKCcrZiAvYicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej00MikpLAorICAgICAgICAoJy9iYSArZicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej00MikpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWx0ZXJuYXRlUHJlZml4Q2hhcnNBZGRlZEhlbHAoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIldoZW4gYGAtYGAgbm90IGluIHByZWZpeF9jaGFycywgZGVmYXVsdCBvcGVyYXRvcnMgY3JlYXRlZCBmb3IgaGVscAorICAgICAgIHNob3VsZCB1c2UgdGhlIHByZWZpeF9jaGFycyBpbiB1c2UgcmF0aGVyIHRoYW4gLSBvciAtLQorICAgICAgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU5NDQ0IiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByZWZpeF9jaGFycz0nKzovJywgYWRkX2hlbHA9VHJ1ZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJytmJywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgICAgIFNpZygnOjpiYXInKSwKKyAgICAgICAgU2lnKCcvYmF6JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PTQyKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy0tYmFyJywgJy1mYmFyJywgJy1iIEInLCAnQicsICctZicsICctLWJhciBCJywgJy1iYXonXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmPUZhbHNlLCBiYXI9Tm9uZSwgYmF6PU5vbmUpKSwKKyAgICAgICAgKCcrZicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgICAgICgnOjpiYSBCJywgTlMoZj1GYWxzZSwgYmFyPSdCJywgYmF6PU5vbmUpKSwKKyAgICAgICAgKCcrZiA6OmJhciBCJywgTlMoZj1UcnVlLCBiYXI9J0InLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJytmIC9iJywgTlMoZj1UcnVlLCBiYXI9Tm9uZSwgYmF6PTQyKSksCisgICAgICAgICgnL2JhICtmJywgTlMoZj1UcnVlLCBiYXI9Tm9uZSwgYmF6PTQyKSkKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FsdGVybmF0ZVByZWZpeENoYXJzTXVsdGlwbGVTaG9ydEFyZ3MoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlZlcmlmeSB0aGF0IE9wdGlvbmFscyBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZWlyIGRlZmluZWQgcHJlZml4ZXMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJlZml4X2NoYXJzPScrLScsIGFkZF9oZWxwPUZhbHNlKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICAgICAgU2lnKCcreScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgICAgICBTaWcoJyt6JywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctdycsCisgICAgICAgICAgICAgICAgJy14eXonLAorICAgICAgICAgICAgICAgICcreCcsCisgICAgICAgICAgICAgICAgJy15JywKKyAgICAgICAgICAgICAgICAnK3h5eicsCisgICAgXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PUZhbHNlLCB5PUZhbHNlLCB6PUZhbHNlKSksCisgICAgICAgICgnLXgnLCBOUyh4PVRydWUsIHk9RmFsc2UsIHo9RmFsc2UpKSwKKyAgICAgICAgKCcreSAteCcsIE5TKHg9VHJ1ZSwgeT1UcnVlLCB6PUZhbHNlKSksCisgICAgICAgICgnK3l6IC14JywgTlMoeD1UcnVlLCB5PVRydWUsIHo9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzU2hvcnRMb25nKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgY29tYmluYXRpb24gb2Ygc2luZ2xlLSBhbmQgZG91YmxlLWRhc2ggb3B0aW9uIHN0cmluZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXYnLCAnLS12ZXJib3NlJywgJy1uJywgJy0tbm9pc3knLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy0teCAtLXZlcmJvc2UnLCAnLU4nLCAnYScsICctdiB4J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlModmVyYm9zZT1GYWxzZSkpLAorICAgICAgICAoJy12JywgTlModmVyYm9zZT1UcnVlKSksCisgICAgICAgICgnLS12ZXJib3NlJywgTlModmVyYm9zZT1UcnVlKSksCisgICAgICAgICgnLW4nLCBOUyh2ZXJib3NlPVRydWUpKSwKKyAgICAgICAgKCctLW5vaXN5JywgTlModmVyYm9zZT1UcnVlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNEZXN0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB2YXJpb3VzIG1lYW5zIG9mIHNldHRpbmcgZGVzdGluYXRpb24iIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctLWZvby1iYXInKSwgU2lnKCctLWJheicsIGRlc3Q9J3phYmJheicpXQorICAgIGZhaWx1cmVzID0gWydhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLS1mb28tYmFyIGYnLCBOUyhmb29fYmFyPSdmJywgemFiYmF6PU5vbmUpKSwKKyAgICAgICAgKCctLWJheiBnJywgTlMoZm9vX2Jhcj1Ob25lLCB6YWJiYXo9J2cnKSksCisgICAgICAgICgnLS1mb28tYmFyIGggLS1iYXogaScsIE5TKGZvb19iYXI9J2gnLCB6YWJiYXo9J2knKSksCisgICAgICAgICgnLS1iYXogaiAtLWZvby1iYXIgaycsIE5TKGZvb19iYXI9J2snLCB6YWJiYXo9J2onKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNEZWZhdWx0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIGEgZGVmYXVsdCBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteCcpLCBTaWcoJy15JywgZGVmYXVsdD00MildCisgICAgZmFpbHVyZXMgPSBbJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUsIHk9NDIpKSwKKyAgICAgICAgKCcteHgnLCBOUyh4PSd4JywgeT00MikpLAorICAgICAgICAoJy15eScsIE5TKHg9Tm9uZSwgeT0neScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc05hcmdzRGVmYXVsdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgbm90IHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBhcmdzIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy14JyldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUpKSwKKyAgICAgICAgKCcteCBhJywgTlMoeD0nYScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc05hcmdzMShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyB0aGUgMSBhcmcgZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnLCBuYXJncz0xKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICcteCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSkpLAorICAgICAgICAoJy14IGEnLCBOUyh4PVsnYSddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNOYXJnczMoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgdGhlIDMgYXJncyBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteCcsIG5hcmdzPTMpXQorICAgIGZhaWx1cmVzID0gWydhJywgJy14JywgJy14IGEnLCAnLXggYSBiJywgJ2EgLXgnLCAnYSAteCBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lKSksCisgICAgICAgICgnLXggYSBiIGMnLCBOUyh4PVsnYScsICdiJywgJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzTmFyZ3NPcHRpb25hbChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyBhbiBPcHRpb25hbCBhcmcgZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy13JywgbmFyZ3M9Jz8nKSwKKyAgICAgICAgU2lnKCcteCcsIG5hcmdzPSc/JywgY29uc3Q9NDIpLAorICAgICAgICBTaWcoJy15JywgbmFyZ3M9Jz8nLCBkZWZhdWx0PSdzcGFtJyksCisgICAgICAgIFNpZygnLXonLCBuYXJncz0nPycsIHR5cGU9aW50LCBjb25zdD0nNDInLCBkZWZhdWx0PSc4NCcpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnMiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHc9Tm9uZSwgeD1Ob25lLCB5PSdzcGFtJywgej04NCkpLAorICAgICAgICAoJy13JywgTlModz1Ob25lLCB4PU5vbmUsIHk9J3NwYW0nLCB6PTg0KSksCisgICAgICAgICgnLXcgMicsIE5TKHc9JzInLCB4PU5vbmUsIHk9J3NwYW0nLCB6PTg0KSksCisgICAgICAgICgnLXgnLCBOUyh3PU5vbmUsIHg9NDIsIHk9J3NwYW0nLCB6PTg0KSksCisgICAgICAgICgnLXggMicsIE5TKHc9Tm9uZSwgeD0nMicsIHk9J3NwYW0nLCB6PTg0KSksCisgICAgICAgICgnLXknLCBOUyh3PU5vbmUsIHg9Tm9uZSwgeT1Ob25lLCB6PTg0KSksCisgICAgICAgICgnLXkgMicsIE5TKHc9Tm9uZSwgeD1Ob25lLCB5PScyJywgej04NCkpLAorICAgICAgICAoJy16JywgTlModz1Ob25lLCB4PU5vbmUsIHk9J3NwYW0nLCB6PTQyKSksCisgICAgICAgICgnLXogMicsIE5TKHc9Tm9uZSwgeD1Ob25lLCB5PSdzcGFtJywgej0yKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNOYXJnc1plcm9Pck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgYW4gYXJncyBmb3IgYW4gT3B0aW9uYWwgdGhhdCBhY2NlcHRzIHplcm8gb3IgbW9yZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG5hcmdzPScqJyksCisgICAgICAgIFNpZygnLXknLCBuYXJncz0nKicsIGRlZmF1bHQ9J3NwYW0nKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUsIHk9J3NwYW0nKSksCisgICAgICAgICgnLXgnLCBOUyh4PVtdLCB5PSdzcGFtJykpLAorICAgICAgICAoJy14IGEnLCBOUyh4PVsnYSddLCB5PSdzcGFtJykpLAorICAgICAgICAoJy14IGEgYicsIE5TKHg9WydhJywgJ2InXSwgeT0nc3BhbScpKSwKKyAgICAgICAgKCcteScsIE5TKHg9Tm9uZSwgeT1bXSkpLAorICAgICAgICAoJy15IGEnLCBOUyh4PU5vbmUsIHk9WydhJ10pKSwKKyAgICAgICAgKCcteSBhIGInLCBOUyh4PU5vbmUsIHk9WydhJywgJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzTmFyZ3NPbmVPck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgYW4gYXJncyBmb3IgYW4gT3B0aW9uYWwgdGhhdCBhY2NlcHRzIG9uZSBvciBtb3JlIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgbmFyZ3M9JysnKSwKKyAgICAgICAgU2lnKCcteScsIG5hcmdzPScrJywgZGVmYXVsdD0nc3BhbScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnYScsICcteCcsICcteScsICdhIC14JywgJ2EgLXkgYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSwgeT0nc3BhbScpKSwKKyAgICAgICAgKCcteCBhJywgTlMoeD1bJ2EnXSwgeT0nc3BhbScpKSwKKyAgICAgICAgKCcteCBhIGInLCBOUyh4PVsnYScsICdiJ10sIHk9J3NwYW0nKSksCisgICAgICAgICgnLXkgYScsIE5TKHg9Tm9uZSwgeT1bJ2EnXSkpLAorICAgICAgICAoJy15IGEgYicsIE5TKHg9Tm9uZSwgeT1bJ2EnLCAnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNDaG9pY2VzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIHRoZSBjaG9pY2VzIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctZicsIGNob2ljZXM9J2FiYycpLAorICAgICAgICBTaWcoJy1nJywgdHlwZT1pbnQsIGNob2ljZXM9cmFuZ2UoNSkpXQorICAgIGZhaWx1cmVzID0gWydhJywgJy1mIGQnLCAnLWZhZCcsICctZ2EnLCAnLWcgNiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGY9Tm9uZSwgZz1Ob25lKSksCisgICAgICAgICgnLWYgYScsIE5TKGY9J2EnLCBnPU5vbmUpKSwKKyAgICAgICAgKCctZiBjJywgTlMoZj0nYycsIGc9Tm9uZSkpLAorICAgICAgICAoJy1nIDAnLCBOUyhmPU5vbmUsIGc9MCkpLAorICAgICAgICAoJy1nIDAzJywgTlMoZj1Ob25lLCBnPTMpKSwKKyAgICAgICAgKCctZmIgLWc0JywgTlMoZj0nYicsIGc9NCkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzUmVxdWlyZWQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBhbiBvcHRpb25hbCBhY3Rpb24gdGhhdCBpcyByZXF1aXJlZCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9aW50LCByZXF1aXJlZD1UcnVlKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLXggMScsIE5TKHg9MSkpLAorICAgICAgICAoJy14NDInLCBOUyh4PTQyKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25TdG9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIHN0b3JlIGFjdGlvbiBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteCcsIGFjdGlvbj0nc3RvcmUnKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICdhIC14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lKSksCisgICAgICAgICgnLXhmb28nLCBOUyh4PSdmb28nKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25TdG9yZUNvbnN0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgc3RvcmVfY29uc3QgYWN0aW9uIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy15JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PW9iamVjdCldCisgICAgZmFpbHVyZXMgPSBbJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh5PU5vbmUpKSwKKyAgICAgICAgKCcteScsIE5TKHk9b2JqZWN0KSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25TdG9yZUZhbHNlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgc3RvcmVfZmFsc2UgYWN0aW9uIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy16JywgYWN0aW9uPSdzdG9yZV9mYWxzZScpXQorICAgIGZhaWx1cmVzID0gWydhJywgJy16YScsICcteiBhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoej1UcnVlKSksCisgICAgICAgICgnLXonLCBOUyh6PUZhbHNlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25TdG9yZVRydWUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBzdG9yZV90cnVlIGFjdGlvbiBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctLWFwcGxlJywgYWN0aW9uPSdzdG9yZV90cnVlJyldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLS1hcHBsZT1iJywgJy0tYXBwbGUgYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGFwcGxlPUZhbHNlKSksCisgICAgICAgICgnLS1hcHBsZScsIE5TKGFwcGxlPVRydWUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FjdGlvbkFwcGVuZChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIGFwcGVuZCBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLS1iYXonLCBhY3Rpb249J2FwcGVuZCcpXQorICAgIGZhaWx1cmVzID0gWydhJywgJy0tYmF6JywgJ2EgLS1iYXonLCAnLS1iYXogYSBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoYmF6PU5vbmUpKSwKKyAgICAgICAgKCctLWJheiBhJywgTlMoYmF6PVsnYSddKSksCisgICAgICAgICgnLS1iYXogYSAtLWJheiBiJywgTlMoYmF6PVsnYScsICdiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FjdGlvbkFwcGVuZFdpdGhEZWZhdWx0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgYXBwZW5kIGFjdGlvbiBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctLWJheicsIGFjdGlvbj0nYXBwZW5kJywgZGVmYXVsdD1bJ1gnXSldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLS1iYXonLCAnYSAtLWJheicsICctLWJheiBhIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhiYXo9WydYJ10pKSwKKyAgICAgICAgKCctLWJheiBhJywgTlMoYmF6PVsnWCcsICdhJ10pKSwKKyAgICAgICAgKCctLWJheiBhIC0tYmF6IGInLCBOUyhiYXo9WydYJywgJ2EnLCAnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25BcHBlbmRDb25zdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIGFwcGVuZF9jb25zdCBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy1iJywgYWN0aW9uPSdhcHBlbmRfY29uc3QnLCBjb25zdD1FeGNlcHRpb24pLAorICAgICAgICBTaWcoJy1jJywgYWN0aW9uPSdhcHBlbmQnLCBkZXN0PSdiJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWydhJywgJy1jJywgJ2EgLWMnLCAnLWJ4JywgJy1iIHgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhiPU5vbmUpKSwKKyAgICAgICAgKCctYicsIE5TKGI9W0V4Y2VwdGlvbl0pKSwKKyAgICAgICAgKCctYiAtY3ggLWIgLWN5eicsIE5TKGI9W0V4Y2VwdGlvbiwgJ3gnLCBFeGNlcHRpb24sICd5eiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25BcHBlbmRDb25zdFdpdGhEZWZhdWx0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgYXBwZW5kX2NvbnN0IGFjdGlvbiBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLWInLCBhY3Rpb249J2FwcGVuZF9jb25zdCcsIGNvbnN0PUV4Y2VwdGlvbiwgZGVmYXVsdD1bJ1gnXSksCisgICAgICAgIFNpZygnLWMnLCBhY3Rpb249J2FwcGVuZCcsIGRlc3Q9J2InKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLWMnLCAnYSAtYycsICctYngnLCAnLWIgeCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGI9WydYJ10pKSwKKyAgICAgICAgKCctYicsIE5TKGI9WydYJywgRXhjZXB0aW9uXSkpLAorICAgICAgICAoJy1iIC1jeCAtYiAtY3l6JywgTlMoYj1bJ1gnLCBFeGNlcHRpb24sICd4JywgRXhjZXB0aW9uLCAneXonXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uQ291bnQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBjb3VudCBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnLCBhY3Rpb249J2NvdW50JyldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLXggYScsICcteCBiJywgJy14IGEgLXggYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSkpLAorICAgICAgICAoJy14JywgTlMoeD0xKSksCisgICAgXQorCisKKyMgPT09PT09PT09PT09PT09PQorIyBQb3NpdGlvbmFsIHRlc3RzCisjID09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB0aGF0IGRvZXNuJ3Qgc3BlY2lmeSBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLXgnLCAnYSBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz0nYScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3MxKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB0aGF0IHNwZWNpZmllcyBhbiBuYXJncyBvZiAxIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9MSldCisgICAgZmFpbHVyZXMgPSBbJycsICcteCcsICdhIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPVsnYSddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzMihQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgdGhhdCBzcGVjaWZpZXMgYW4gbmFyZ3Mgb2YgMiIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPTIpXQorICAgIGZhaWx1cmVzID0gWycnLCAnYScsICcteCcsICdhIGIgYyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnLCAnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzWmVyb09yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgdGhhdCBzcGVjaWZpZXMgdW5saW1pdGVkIG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9JyonKV0KKyAgICBmYWlsdXJlcyA9IFsnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289W10pKSwKKyAgICAgICAgKCdhJywgTlMoZm9vPVsnYSddKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYScsICdiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NaZXJvT3JNb3JlRGVmYXVsdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgdGhhdCBzcGVjaWZpZXMgdW5saW1pdGVkIG5hcmdzIGFuZCBhIGRlZmF1bHQiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nKicsIGRlZmF1bHQ9J2JhcicpXQorICAgIGZhaWx1cmVzID0gWycteCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvbz0nYmFyJykpLAorICAgICAgICAoJ2EnLCBOUyhmb289WydhJ10pKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289WydhJywgJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09uZU9yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgdGhhdCBzcGVjaWZpZXMgb25lIG9yIG1vcmUgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nKycpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPVsnYSddKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYScsICdiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgYW4gT3B0aW9uYWwgUG9zaXRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPSc/JyldCisgICAgZmFpbHVyZXMgPSBbJy14JywgJ2EgYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvbz1Ob25lKSksCisgICAgICAgICgnYScsIE5TKGZvbz0nYScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbERlZmF1bHQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGFuIE9wdGlvbmFsIFBvc2l0aW9uYWwgd2l0aCBhIGRlZmF1bHQgdmFsdWUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nPycsIGRlZmF1bHQ9NDIpXQorICAgIGZhaWx1cmVzID0gWycteCcsICdhIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289NDIpKSwKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09wdGlvbmFsQ29udmVydGVkRGVmYXVsdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgYW4gT3B0aW9uYWwgUG9zaXRpb25hbCB3aXRoIGEgZGVmYXVsdCB2YWx1ZQorICAgIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIHRoZSBhcHByb3ByaWF0ZSB0eXBlLgorICAgICIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdmb28nLCBuYXJncz0nPycsIHR5cGU9aW50LCBkZWZhdWx0PSc0MicpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnYSBiJywgJzEgMiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvbz00MikpLAorICAgICAgICAoJzEnLCBOUyhmb289MSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc05vbmVOb25lKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHR3byBQb3NpdGlvbmFscyB0aGF0IGRvbid0IHNwZWNpZnkgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nKSwgU2lnKCdiYXInKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy14JywgJ2EnLCAnYSBiIGMnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9J2InKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzTm9uZTEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggbm8gbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggMSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycpLCBTaWcoJ2JhcicsIG5hcmdzPTEpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYScsICdhIGIgYyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnczJOb25lKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIDIgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggbm9uZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPTIpLCBTaWcoJ2JhcicpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYScsICdhIGInLCAnYSBiIGMgZCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj0nYycpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lWmVyb09yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCBubyBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCB1bmxpbWl0ZWQiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nKSwgU2lnKCdiYXInLCBuYXJncz0nKicpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJywgYmFyPVtdKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289J2EnLCBiYXI9WydiJywgJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc05vbmVPbmVPck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggbm8gbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggb25lIG9yIG1vcmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nKSwgU2lnKCdiYXInLCBuYXJncz0nKycpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPSdhJywgYmFyPVsnYicsICdjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lT3B0aW9uYWwoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggbm8gbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nKSwgU2lnKCdiYXInLCBuYXJncz0nPycpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYSBiIGMnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJywgYmFyPU5vbmUpKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9J2InKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzWmVyb09yTW9yZU5vbmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggdW5saW1pdGVkIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIG5vbmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nKicpLCBTaWcoJ2JhcicpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPVtdLCBiYXI9J2EnKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYSddLCBiYXI9J2InKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289WydhJywgJ2InXSwgYmFyPSdjJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09uZU9yTW9yZU5vbmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggb25lIG9yIG1vcmUgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggbm9uZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPScrJyksIFNpZygnYmFyJyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYSddLCBiYXI9J2InKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289WydhJywgJ2InXSwgYmFyPSdjJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09wdGlvbmFsTm9uZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCBhbiBPcHRpb25hbCBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCBub25lIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PTQyKSwgU2lnKCdiYXInKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EgYiBjJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz00MiwgYmFyPSdhJykpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj0nYicpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3MyWmVyb09yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCAyIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIHVubGltaXRlZCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPTIpLCBTaWcoJ2JhcicsIG5hcmdzPScqJyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj1bXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj1bJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnczJPbmVPck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggMiBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCBvbmUgb3IgbW9yZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPTIpLCBTaWcoJ2JhcicsIG5hcmdzPScrJyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJywgJ2EgYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj1bJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnczJPcHRpb25hbChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCAyIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSBvcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPTIpLCBTaWcoJ2JhcicsIG5hcmdzPSc/JyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJywgJ2EgYiBjIGQnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289WydhJywgJ2InXSwgYmFyPU5vbmUpKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9J2MnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzWmVyb09yTW9yZTEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggdW5saW1pdGVkIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIDEiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nKicpLCBTaWcoJ2JhcicsIG5hcmdzPTEpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCBdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhmb289W10sIGJhcj1bJ2EnXSkpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnXSwgYmFyPVsnYiddKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289WydhJywgJ2InXSwgYmFyPVsnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT25lT3JNb3JlMShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCBvbmUgb3IgbW9yZSBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCAxIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9JysnKSwgU2lnKCdiYXInLCBuYXJncz0xKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289WydhJ10sIGJhcj1bJ2InXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj1bJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09wdGlvbmFsMShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCBhbiBPcHRpb25hbCBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCAxIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9Jz8nKSwgU2lnKCdiYXInLCBuYXJncz0xKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EgYiBjJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz1Ob25lLCBiYXI9WydhJ10pKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lWmVyb09yTW9yZTEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhyZWUgUG9zaXRpb25hbHM6IG5vIG5hcmdzLCB1bmxpbWl0ZWQgbmFyZ3MgYW5kIDEgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnZm9vJyksCisgICAgICAgIFNpZygnYmFyJywgbmFyZ3M9JyonKSwKKyAgICAgICAgU2lnKCdiYXonLCBuYXJncz0xKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPVtdLCBiYXo9WydiJ10pKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSwgYmF6PVsnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzTm9uZU9uZU9yTW9yZTEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhyZWUgUG9zaXRpb25hbHM6IG5vIG5hcmdzLCBvbmUgb3IgbW9yZSBuYXJncyBhbmQgMSBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdmb28nKSwKKyAgICAgICAgU2lnKCdiYXInLCBuYXJncz0nKycpLAorICAgICAgICBTaWcoJ2JheicsIG5hcmdzPTEpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnLCAnYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPSdhJywgYmFyPVsnYiddLCBiYXo9WydjJ10pKSwKKyAgICAgICAgKCdhIGIgYyBkJywgTlMoZm9vPSdhJywgYmFyPVsnYicsICdjJ10sIGJhej1bJ2QnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc05vbmVPcHRpb25hbDEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhyZWUgUG9zaXRpb25hbHM6IG5vIG5hcmdzLCBvcHRpb25hbCBuYXJnIGFuZCAxIG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ2ZvbycpLAorICAgICAgICBTaWcoJ2JhcicsIG5hcmdzPSc/JywgZGVmYXVsdD0wLjYyNSksCisgICAgICAgIFNpZygnYmF6JywgbmFyZ3M9MSksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj0wLjYyNSwgYmF6PVsnYiddKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289J2EnLCBiYXI9J2InLCBiYXo9WydjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbE9wdGlvbmFsKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHR3byBvcHRpb25hbCBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdmb28nLCBuYXJncz0nPycpLAorICAgICAgICBTaWcoJ2JhcicsIG5hcmdzPSc/JywgZGVmYXVsdD00MiksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctLWZvbycsICdhIGIgYyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvbz1Ob25lLCBiYXI9NDIpKSwKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJywgYmFyPTQyKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPSdiJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09wdGlvbmFsWmVyb09yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhbiBPcHRpb25hbCBuYXJnIGZvbGxvd2VkIGJ5IHVubGltaXRlZCBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPSc/JyksIFNpZygnYmFyJywgbmFyZ3M9JyonKV0KKyAgICBmYWlsdXJlcyA9IFsnLS1mb28nXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289Tm9uZSwgYmFyPVtdKSksCisgICAgICAgICgnYScsIE5TKGZvbz0nYScsIGJhcj1bXSkpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPSdhJywgYmFyPVsnYicsICdjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPcHRpb25hbE9uZU9yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhbiBPcHRpb25hbCBuYXJnIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9Jz8nKSwgU2lnKCdiYXInLCBuYXJncz0nKycpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPU5vbmUsIGJhcj1bJ2EnXSkpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPSdhJywgYmFyPVsnYicsICdjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzQ2hvaWNlc1N0cmluZyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIHNldCBvZiBzaW5nbGUtY2hhcmFjdGVyIGNob2ljZXMiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdzcGFtJywgY2hvaWNlcz1zZXQoJ2FiY2RlZmcnKSldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdoJywgJzQyJywgJ2VmJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKHNwYW09J2EnKSksCisgICAgICAgICgnZycsIE5TKHNwYW09J2cnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc0Nob2ljZXNJbnQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBzZXQgb2YgaW50ZWdlciBjaG9pY2VzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnc3BhbScsIHR5cGU9aW50LCBjaG9pY2VzPXJhbmdlKDIwKSldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdoJywgJzQyJywgJ2VmJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnNCcsIE5TKHNwYW09NCkpLAorICAgICAgICAoJzE1JywgTlMoc3BhbT0xNSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNBY3Rpb25BcHBlbmQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhlICdhcHBlbmQnIGFjdGlvbiIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdzcGFtJywgYWN0aW9uPSdhcHBlbmQnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgYWN0aW9uPSdhcHBlbmQnLCBuYXJncz0yKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJywgJ2EgYicsICdhIGIgYyBkJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiIGMnLCBOUyhzcGFtPVsnYScsIFsnYicsICdjJ11dKSksCisgICAgXQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgQ29tYmluZWQgb3B0aW9uYWxzIGFuZCBwb3NpdGlvbmFscyB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RPcHRpb25hbHNOdW1lcmljQW5kUG9zaXRpb25hbHMoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIG5lZ2F0aXZlIG51bWJlciBhcmdzIHdoZW4gbnVtZXJpYyBvcHRpb25zIGFyZSBwcmVzZW50IiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ3gnLCBuYXJncz0nPycpLAorICAgICAgICBTaWcoJy00JywgZGVzdD0neScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLTInLCAnLTMxNSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSwgeT1GYWxzZSkpLAorICAgICAgICAoJ2EnLCBOUyh4PSdhJywgeT1GYWxzZSkpLAorICAgICAgICAoJy00JywgTlMoeD1Ob25lLCB5PVRydWUpKSwKKyAgICAgICAgKCctNCBhJywgTlMoeD0nYScsIHk9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWxtb3N0TnVtZXJpY0FuZFBvc2l0aW9uYWxzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBuZWdhdGl2ZSBudW1iZXIgYXJncyB3aGVuIGFsbW9zdCBudW1lcmljIG9wdGlvbnMgYXJlIHByZXNlbnQiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygneCcsIG5hcmdzPSc/JyksCisgICAgICAgIFNpZygnLWs0JywgZGVzdD0neScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLWszJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PUZhbHNlKSksCisgICAgICAgICgnLTInLCBOUyh4PSctMicsIHk9RmFsc2UpKSwKKyAgICAgICAgKCdhJywgTlMoeD0nYScsIHk9RmFsc2UpKSwKKyAgICAgICAgKCctazQnLCBOUyh4PU5vbmUsIHk9VHJ1ZSkpLAorICAgICAgICAoJy1rNCBhJywgTlMoeD0nYScsIHk9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0RW1wdHlBbmRTcGFjZUNvbnRhaW5pbmdBcmd1bWVudHMoUGFyc2VyVGVzdENhc2UpOgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCd4JywgbmFyZ3M9Jz8nKSwKKyAgICAgICAgU2lnKCcteScsICctLXl5eScsIGRlc3Q9J3knKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy15J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgIChbJyddLCBOUyh4PScnLCB5PU5vbmUpKSwKKyAgICAgICAgKFsnYSBiYWRnZXInXSwgTlMoeD0nYSBiYWRnZXInLCB5PU5vbmUpKSwKKyAgICAgICAgKFsnLWEgYmFkZ2VyJ10sIE5TKHg9Jy1hIGJhZGdlcicsIHk9Tm9uZSkpLAorICAgICAgICAoWycteScsICcnXSwgTlMoeD1Ob25lLCB5PScnKSksCisgICAgICAgIChbJy15JywgJ2EgYmFkZ2VyJ10sIE5TKHg9Tm9uZSwgeT0nYSBiYWRnZXInKSksCisgICAgICAgIChbJy15JywgJy1hIGJhZGdlciddLCBOUyh4PU5vbmUsIHk9Jy1hIGJhZGdlcicpKSwKKyAgICAgICAgKFsnLS15eXk9YSBiYWRnZXInXSwgTlMoeD1Ob25lLCB5PSdhIGJhZGdlcicpKSwKKyAgICAgICAgKFsnLS15eXk9LWEgYmFkZ2VyJ10sIE5TKHg9Tm9uZSwgeT0nLWEgYmFkZ2VyJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UHJlZml4Q2hhcmFjdGVyT25seUFyZ3VtZW50cyhQYXJzZXJUZXN0Q2FzZSk6CisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByZWZpeF9jaGFycz0nLSsnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLScsIGRlc3Q9J3gnLCBuYXJncz0nPycsIGNvbnN0PSdiYWRnZXInKSwKKyAgICAgICAgU2lnKCcrJywgZGVzdD0neScsIHR5cGU9aW50LCBkZWZhdWx0PTQyKSwKKyAgICAgICAgU2lnKCctKy0nLCBkZXN0PSd6JywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycteScsICcrIC0nXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUsIHk9NDIsIHo9RmFsc2UpKSwKKyAgICAgICAgKCctJywgTlMoeD0nYmFkZ2VyJywgeT00Miwgej1GYWxzZSkpLAorICAgICAgICAoJy0gWCcsIE5TKHg9J1gnLCB5PTQyLCB6PUZhbHNlKSksCisgICAgICAgICgnKyAtMycsIE5TKHg9Tm9uZSwgeT0tMywgej1GYWxzZSkpLAorICAgICAgICAoJy0rLScsIE5TKHg9Tm9uZSwgeT00Miwgej1UcnVlKSksCisgICAgICAgICgnLSA9PT0nLCBOUyh4PSc9PT0nLCB5PTQyLCB6PUZhbHNlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3ROYXJnc1plcm9Pck1vcmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgYW4gYXJncyBmb3IgYW4gT3B0aW9uYWwgdGhhdCBhY2NlcHRzIHplcm8gb3IgbW9yZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy14JywgbmFyZ3M9JyonKSwgU2lnKCd5JywgbmFyZ3M9JyonKV0KKyAgICBmYWlsdXJlcyA9IFtdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSwgeT1bXSkpLAorICAgICAgICAoJy14JywgTlMoeD1bXSwgeT1bXSkpLAorICAgICAgICAoJy14IGEnLCBOUyh4PVsnYSddLCB5PVtdKSksCisgICAgICAgICgnLXggYSAtLSBiJywgTlMoeD1bJ2EnXSwgeT1bJ2InXSkpLAorICAgICAgICAoJ2EnLCBOUyh4PU5vbmUsIHk9WydhJ10pKSwKKyAgICAgICAgKCdhIC14JywgTlMoeD1bXSwgeT1bJ2EnXSkpLAorICAgICAgICAoJ2EgLXggYicsIE5TKHg9WydiJ10sIHk9WydhJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE5hcmdzUmVtYWluZGVyKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIGEgcG9zaXRpb25hbCB3aXRoIG5hcmdzPVJFTUFJTkRFUiIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ3gnKSwgU2lnKCd5JywgbmFyZ3M9Jy4uLicpLCBTaWcoJy16JyldCisgICAgZmFpbHVyZXMgPSBbJycsICcteicsICcteiBaJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnWCcsIE5TKHg9J1gnLCB5PVtdLCB6PU5vbmUpKSwKKyAgICAgICAgKCcteiBaIFgnLCBOUyh4PSdYJywgeT1bXSwgej0nWicpKSwKKyAgICAgICAgKCdYIEEgQiAteiBaJywgTlMoeD0nWCcsIHk9WydBJywgJ0InLCAnLXonLCAnWiddLCB6PU5vbmUpKSwKKyAgICAgICAgKCdYIFkgLS1mb28nLCBOUyh4PSdYJywgeT1bJ1knLCAnLS1mb28nXSwgej1Ob25lKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25MaWtlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBvcHRpb25zIHRoYXQgbWF5IG9yIG1heSBub3QgYmUgYXJndW1lbnRzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgdHlwZT1mbG9hdCksCisgICAgICAgIFNpZygnLTMnLCB0eXBlPWZsb2F0LCBkZXN0PSd5JyksCisgICAgICAgIFNpZygneicsIG5hcmdzPScqJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycteCcsICcteTIuNScsICcteGEnLCAnLXggLWEnLAorICAgICAgICAgICAgICAgICcteCAtMycsICcteCAtMy41JywgJy0zIC0zLjUnLAorICAgICAgICAgICAgICAgICcteCAtMi41JywgJy14IC0yLjUgYScsICctMyAtLjUnLAorICAgICAgICAgICAgICAgICdhIHggLTEnLCAnLXggLTEgYScsICctMyAtMSBhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PU5vbmUsIHo9W10pKSwKKyAgICAgICAgKCcteCAyLjUnLCBOUyh4PTIuNSwgeT1Ob25lLCB6PVtdKSksCisgICAgICAgICgnLXggMi41IGEnLCBOUyh4PTIuNSwgeT1Ob25lLCB6PVsnYSddKSksCisgICAgICAgICgnLTMuNScsIE5TKHg9Tm9uZSwgeT0wLjUsIHo9W10pKSwKKyAgICAgICAgKCctMy0uNScsIE5TKHg9Tm9uZSwgeT0tMC41LCB6PVtdKSksCisgICAgICAgICgnLTMgLjUnLCBOUyh4PU5vbmUsIHk9MC41LCB6PVtdKSksCisgICAgICAgICgnYSAtMy41JywgTlMoeD1Ob25lLCB5PTAuNSwgej1bJ2EnXSkpLAorICAgICAgICAoJ2EnLCBOUyh4PU5vbmUsIHk9Tm9uZSwgej1bJ2EnXSkpLAorICAgICAgICAoJ2EgLXggMScsIE5TKHg9MS4wLCB5PU5vbmUsIHo9WydhJ10pKSwKKyAgICAgICAgKCcteCAxIGEnLCBOUyh4PTEuMCwgeT1Ob25lLCB6PVsnYSddKSksCisgICAgICAgICgnLTMgMSBhJywgTlMoeD1Ob25lLCB5PTEuMCwgej1bJ2EnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0RGVmYXVsdFN1cHByZXNzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFjdGlvbnMgd2l0aCBzdXBwcmVzc2VkIGRlZmF1bHRzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ2ZvbycsIG5hcmdzPSc/JywgZGVmYXVsdD1hcmdwYXJzZS5TVVBQUkVTUyksCisgICAgICAgIFNpZygnYmFyJywgbmFyZ3M9JyonLCBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTKSwKKyAgICAgICAgU2lnKCctLWJheicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUygpKSwKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJykpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSkpLAorICAgICAgICAoJy0tYmF6JywgTlMoYmF6PVRydWUpKSwKKyAgICAgICAgKCdhIC0tYmF6JywgTlMoZm9vPSdhJywgYmF6PVRydWUpKSwKKyAgICAgICAgKCctLWJheiBhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10sIGJhej1UcnVlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQYXJzZXJEZWZhdWx0U3VwcHJlc3MoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYWN0aW9ucyB3aXRoIGEgcGFyc2VyLWxldmVsIGRlZmF1bHQgb2YgU1VQUFJFU1MiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcoYXJndW1lbnRfZGVmYXVsdD1hcmdwYXJzZS5TVVBQUkVTUykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ2ZvbycsIG5hcmdzPSc/JyksCisgICAgICAgIFNpZygnYmFyJywgbmFyZ3M9JyonKSwKKyAgICAgICAgU2lnKCctLWJheicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUygpKSwKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJykpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSkpLAorICAgICAgICAoJy0tYmF6JywgTlMoYmF6PVRydWUpKSwKKyAgICAgICAgKCdhIC0tYmF6JywgTlMoZm9vPSdhJywgYmF6PVRydWUpKSwKKyAgICAgICAgKCctLWJheiBhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10sIGJhej1UcnVlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQYXJzZXJEZWZhdWx0NDIoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYWN0aW9ucyB3aXRoIGEgcGFyc2VyLWxldmVsIGRlZmF1bHQgb2YgNDIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcoYXJndW1lbnRfZGVmYXVsdD00MiwgdmVyc2lvbj0nMS4wJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ2ZvbycsIG5hcmdzPSc/JyksCisgICAgICAgIFNpZygnYmFyJywgbmFyZ3M9JyonKSwKKyAgICAgICAgU2lnKCctLWJheicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289NDIsIGJhcj00MiwgYmF6PTQyKSksCisgICAgICAgICgnYScsIE5TKGZvbz0nYScsIGJhcj00MiwgYmF6PTQyKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddLCBiYXo9NDIpKSwKKyAgICAgICAgKCctLWJheicsIE5TKGZvbz00MiwgYmFyPTQyLCBiYXo9VHJ1ZSkpLAorICAgICAgICAoJ2EgLS1iYXonLCBOUyhmb289J2EnLCBiYXI9NDIsIGJhej1UcnVlKSksCisgICAgICAgICgnLS1iYXogYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddLCBiYXo9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0QXJndW1lbnRzRnJvbUZpbGUoVGVtcERpck1peGluLCBQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCByZWFkaW5nIGFyZ3VtZW50cyBmcm9tIGEgZmlsZSIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0QXJndW1lbnRzRnJvbUZpbGUsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgZmlsZV90ZXh0cyA9IFsKKyAgICAgICAgICAgICgnaGVsbG8nLCAnaGVsbG8gd29ybGQhXG4nKSwKKyAgICAgICAgICAgICgncmVjdXJzaXZlJywgJy1hXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICdBXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICdAaGVsbG8nKSwKKyAgICAgICAgICAgICgnaW52YWxpZCcsICdAbm8tc3VjaC1wYXRoXG4nKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgcGF0aCwgdGV4dCBpbiBmaWxlX3RleHRzOgorICAgICAgICAgICAgZmlsZSA9IG9wZW4ocGF0aCwgJ3cnKQorICAgICAgICAgICAgZmlsZS53cml0ZSh0ZXh0KQorICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKGZyb21maWxlX3ByZWZpeF9jaGFycz0nQCcpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctYScpLAorICAgICAgICBTaWcoJ3gnKSwKKyAgICAgICAgU2lnKCd5JywgbmFyZ3M9JysnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJycsICctYicsICdYJywgJ0BpbnZhbGlkJywgJ0BtaXNzaW5nJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnWCBZJywgTlMoYT1Ob25lLCB4PSdYJywgeT1bJ1knXSkpLAorICAgICAgICAoJ1ggLWEgQSBZIFonLCBOUyhhPSdBJywgeD0nWCcsIHk9WydZJywgJ1onXSkpLAorICAgICAgICAoJ0BoZWxsbyBYJywgTlMoYT1Ob25lLCB4PSdoZWxsbyB3b3JsZCEnLCB5PVsnWCddKSksCisgICAgICAgICgnWCBAaGVsbG8nLCBOUyhhPU5vbmUsIHg9J1gnLCB5PVsnaGVsbG8gd29ybGQhJ10pKSwKKyAgICAgICAgKCctYSBCIEByZWN1cnNpdmUgWSBaJywgTlMoYT0nQScsIHg9J2hlbGxvIHdvcmxkIScsIHk9WydZJywgJ1onXSkpLAorICAgICAgICAoJ1ggQHJlY3Vyc2l2ZSBaIC1hIEInLCBOUyhhPSdCJywgeD0nWCcsIHk9WydoZWxsbyB3b3JsZCEnLCAnWiddKSksCisgICAgICAgIChbIi1hIiwgIiIsICJYIiwgIlkiXSwgTlMoYT0nJywgeD0nWCcsIHk9WydZJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdEFyZ3VtZW50c0Zyb21GaWxlQ29udmVydGVyKFRlbXBEaXJNaXhpbiwgUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgcmVhZGluZyBhcmd1bWVudHMgZnJvbSBhIGZpbGUiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdEFyZ3VtZW50c0Zyb21GaWxlQ29udmVydGVyLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIGZpbGVfdGV4dHMgPSBbCisgICAgICAgICAgICAoJ2hlbGxvJywgJ2hlbGxvIHdvcmxkIVxuJyksCisgICAgICAgIF0KKyAgICAgICAgZm9yIHBhdGgsIHRleHQgaW4gZmlsZV90ZXh0czoKKyAgICAgICAgICAgIGZpbGUgPSBvcGVuKHBhdGgsICd3JykKKyAgICAgICAgICAgIGZpbGUud3JpdGUodGV4dCkKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorCisgICAgY2xhc3MgRnJvbUZpbGVDb252ZXJ0ZXJBcmd1bWVudFBhcnNlcihFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcik6CisKKyAgICAgICAgZGVmIGNvbnZlcnRfYXJnX2xpbmVfdG9fYXJncyhzZWxmLCBhcmdfbGluZSk6CisgICAgICAgICAgICBmb3IgYXJnIGluIGFyZ19saW5lLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgbm90IGFyZy5zdHJpcCgpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHlpZWxkIGFyZworICAgIHBhcnNlcl9jbGFzcyA9IEZyb21GaWxlQ29udmVydGVyQXJndW1lbnRQYXJzZXIKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKGZyb21maWxlX3ByZWZpeF9jaGFycz0nQCcpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCd5JywgbmFyZ3M9JysnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdAaGVsbG8gWCcsIE5TKHk9WydoZWxsbycsICd3b3JsZCEnLCAnWCddKSksCisgICAgXQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09CisjIFR5cGUgY29udmVyc2lvbiB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEZpbGVUeXBlUmVwcihUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9yKHNlbGYpOgorICAgICAgICB0eXBlID0gYXJncGFyc2UuRmlsZVR5cGUoJ3InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGaWxlVHlwZSgncicpIiwgcmVwcih0eXBlKSkKKworICAgIGRlZiB0ZXN0X3diXzEoc2VsZik6CisgICAgICAgIHR5cGUgPSBhcmdwYXJzZS5GaWxlVHlwZSgnd2InLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGaWxlVHlwZSgnd2InLCAxKSIsIHJlcHIodHlwZSkpCisKKworY2xhc3MgUkZpbGUob2JqZWN0KToKKyAgICBzZWVuID0ge30KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisgICAgX19oYXNoX18gPSBOb25lCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgb3RoZXIgaW4gc2VsZi5zZWVuOgorICAgICAgICAgICAgdGV4dCA9IHNlbGYuc2VlbltvdGhlcl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRleHQgPSBzZWxmLnNlZW5bb3RoZXJdID0gb3RoZXIucmVhZCgpCisgICAgICAgICAgICBvdGhlci5jbG9zZSgpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRleHQsIHN0cik6CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgcmV0dXJuIHNlbGYubmFtZSA9PSBvdGhlci5uYW1lID09IHRleHQKKworCitjbGFzcyBUZXN0RmlsZVR5cGVSKFRlbXBEaXJNaXhpbiwgUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhlIEZpbGVUeXBlIG9wdGlvbi9hcmd1bWVudCB0eXBlIGZvciByZWFkaW5nIGZpbGVzIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RGaWxlVHlwZVIsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgZm9yIGZpbGVfbmFtZSBpbiBbJ2ZvbycsICdiYXInXToKKyAgICAgICAgICAgIGZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLnRlbXBfZGlyLCBmaWxlX25hbWUpLCAndycpCisgICAgICAgICAgICBmaWxlLndyaXRlKGZpbGVfbmFtZSkKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICBzZWxmLmNyZWF0ZV9yZWFkb25seV9maWxlKCdyZWFkb25seScpCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgpKSwKKyAgICAgICAgU2lnKCdzcGFtJywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgncicpKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14JywgJy14IGJhcicsICdub24tZXhpc3RlbnQtZmlsZS50eHQnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdmb28nLCBOUyh4PU5vbmUsIHNwYW09UkZpbGUoJ2ZvbycpKSksCisgICAgICAgICgnLXggZm9vIGJhcicsIE5TKHg9UkZpbGUoJ2ZvbycpLCBzcGFtPVJGaWxlKCdiYXInKSkpLAorICAgICAgICAoJ2JhciAteCBmb28nLCBOUyh4PVJGaWxlKCdmb28nKSwgc3BhbT1SRmlsZSgnYmFyJykpKSwKKyAgICAgICAgKCcteCAtIC0nLCBOUyh4PXN5cy5zdGRpbiwgc3BhbT1zeXMuc3RkaW4pKSwKKyAgICAgICAgKCdyZWFkb25seScsIE5TKHg9Tm9uZSwgc3BhbT1SRmlsZSgncmVhZG9ubHknKSkpLAorICAgIF0KKworY2xhc3MgVGVzdEZpbGVUeXBlRGVmYXVsdHMoVGVtcERpck1peGluLCBQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IGEgZmlsZSBpcyBub3QgY3JlYXRlZCB1bmxlc3MgdGhlIGRlZmF1bHQgaXMgbmVlZGVkIiIiCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0RmlsZVR5cGVEZWZhdWx0cywgc2VsZikuc2V0VXAoKQorICAgICAgICBmaWxlID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi50ZW1wX2RpciwgJ2dvb2QnKSwgJ3cnKQorICAgICAgICBmaWxlLndyaXRlKCdnb29kJykKKyAgICAgICAgZmlsZS5jbG9zZSgpCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy1jJywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgncicpLCBkZWZhdWx0PSduby1maWxlLnR4dCcpLAorICAgIF0KKyAgICAjIHNob3VsZCBwcm92b2tlIG5vIHN1Y2ggZmlsZSBlcnJvcgorICAgIGZhaWx1cmVzID0gWycnXQorICAgICMgc2hvdWxkIG5vdCBwcm92b2tlIGVycm9yIGJlY2F1c2UgZGVmYXVsdCBmaWxlIGlzIGNyZWF0ZWQKKyAgICBzdWNjZXNzZXMgPSBbKCctYyBnb29kJywgTlMoYz1SRmlsZSgnZ29vZCcpKSldCisKKworY2xhc3MgVGVzdEZpbGVUeXBlUkIoVGVtcERpck1peGluLCBQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgRmlsZVR5cGUgb3B0aW9uL2FyZ3VtZW50IHR5cGUgZm9yIHJlYWRpbmcgZmlsZXMiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdEZpbGVUeXBlUkIsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgZm9yIGZpbGVfbmFtZSBpbiBbJ2ZvbycsICdiYXInXToKKyAgICAgICAgICAgIGZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLnRlbXBfZGlyLCBmaWxlX25hbWUpLCAndycpCisgICAgICAgICAgICBmaWxlLndyaXRlKGZpbGVfbmFtZSkKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3JiJykpLAorICAgICAgICBTaWcoJ3NwYW0nLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCdyYicpKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14JywgJy14IGJhciddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2ZvbycsIE5TKHg9Tm9uZSwgc3BhbT1SRmlsZSgnZm9vJykpKSwKKyAgICAgICAgKCcteCBmb28gYmFyJywgTlMoeD1SRmlsZSgnZm9vJyksIHNwYW09UkZpbGUoJ2JhcicpKSksCisgICAgICAgICgnYmFyIC14IGZvbycsIE5TKHg9UkZpbGUoJ2ZvbycpLCBzcGFtPVJGaWxlKCdiYXInKSkpLAorICAgICAgICAoJy14IC0gLScsIE5TKHg9c3lzLnN0ZGluLCBzcGFtPXN5cy5zdGRpbikpLAorICAgIF0KKworCitjbGFzcyBXRmlsZShvYmplY3QpOgorICAgIHNlZW4gPSBzZXQoKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICBfX2hhc2hfXyA9IE5vbmUKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBvdGhlciBub3QgaW4gc2VsZi5zZWVuOgorICAgICAgICAgICAgdGV4dCA9ICdDaGVjayB0aGF0IGZpbGUgaXMgd3JpdGFibGUuJworICAgICAgICAgICAgaWYgJ2InIGluIG90aGVyLm1vZGU6CisgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuZW5jb2RlKCdhc2NpaScpCisgICAgICAgICAgICBvdGhlci53cml0ZSh0ZXh0KQorICAgICAgICAgICAgb3RoZXIuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5zZWVuLmFkZChvdGhlcikKKyAgICAgICAgcmV0dXJuIHNlbGYubmFtZSA9PSBvdGhlci5uYW1lCisKKworQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKG9zLCAnZ2V0ZXVpZCcpIGFuZCBvcy5nZXRldWlkKCkgPT0gMCwKKyAgICAgICAgICAgICAgICAgIm5vbi1yb290IHVzZXIgcmVxdWlyZWQiKQorY2xhc3MgVGVzdEZpbGVUeXBlVyhUZW1wRGlyTWl4aW4sIFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBGaWxlVHlwZSBvcHRpb24vYXJndW1lbnQgdHlwZSBmb3Igd3JpdGluZyBmaWxlcyIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0RmlsZVR5cGVXLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYuY3JlYXRlX3JlYWRvbmx5X2ZpbGUoJ3JlYWRvbmx5JykKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3JykpLAorICAgICAgICBTaWcoJ3NwYW0nLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3JykpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnLXggYmFyJ10KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnLXggYmFyJywgJ3JlYWRvbmx5J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnZm9vJywgTlMoeD1Ob25lLCBzcGFtPVdGaWxlKCdmb28nKSkpLAorICAgICAgICAoJy14IGZvbyBiYXInLCBOUyh4PVdGaWxlKCdmb28nKSwgc3BhbT1XRmlsZSgnYmFyJykpKSwKKyAgICAgICAgKCdiYXIgLXggZm9vJywgTlMoeD1XRmlsZSgnZm9vJyksIHNwYW09V0ZpbGUoJ2JhcicpKSksCisgICAgICAgICgnLXggLSAtJywgTlMoeD1zeXMuc3Rkb3V0LCBzcGFtPXN5cy5zdGRvdXQpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdEZpbGVUeXBlV0IoVGVtcERpck1peGluLCBQYXJzZXJUZXN0Q2FzZSk6CisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgnd2InKSksCisgICAgICAgIFNpZygnc3BhbScsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJykpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnLXggYmFyJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnZm9vJywgTlMoeD1Ob25lLCBzcGFtPVdGaWxlKCdmb28nKSkpLAorICAgICAgICAoJy14IGZvbyBiYXInLCBOUyh4PVdGaWxlKCdmb28nKSwgc3BhbT1XRmlsZSgnYmFyJykpKSwKKyAgICAgICAgKCdiYXIgLXggZm9vJywgTlMoeD1XRmlsZSgnZm9vJyksIHNwYW09V0ZpbGUoJ2JhcicpKSksCisgICAgICAgICgnLXggLSAtJywgTlMoeD1zeXMuc3Rkb3V0LCBzcGFtPXN5cy5zdGRvdXQpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFR5cGVDYWxsYWJsZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBzb21lIGNhbGxhYmxlcyBhcyBvcHRpb24vYXJndW1lbnQgdHlwZXMiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1lZ2dzJywgdHlwZT1jb21wbGV4KSwKKyAgICAgICAgU2lnKCdzcGFtJywgdHlwZT1mbG9hdCksCisgICAgXQorICAgIGZhaWx1cmVzID0gWydhJywgJzQyaicsICctLWVnZ3MgYScsICctLWVnZ3MgMmknXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCctLWVnZ3M9NDIgNDInLCBOUyhlZ2dzPTQyLCBzcGFtPTQyLjApKSwKKyAgICAgICAgKCctLWVnZ3MgMmogLS0gLTEuNScsIE5TKGVnZ3M9MmosIHNwYW09LTEuNSkpLAorICAgICAgICAoJzEwMjQuNjc1JywgTlMoZWdncz1Ob25lLCBzcGFtPTEwMjQuNjc1KSksCisgICAgXQorCisKK2NsYXNzIFRlc3RUeXBlVXNlckRlZmluZWQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSB1c2VyLWRlZmluZWQgb3B0aW9uL2FyZ3VtZW50IHR5cGUiIiIKKworICAgIGNsYXNzIE15VHlwZShUZXN0Q2FzZSk6CisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorCisgICAgICAgIF9faGFzaF9fID0gTm9uZQorCisgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuICh0eXBlKHNlbGYpLCBzZWxmLnZhbHVlKSA9PSAodHlwZShvdGhlciksIG90aGVyLnZhbHVlKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9TXlUeXBlKSwKKyAgICAgICAgU2lnKCdzcGFtJywgdHlwZT1NeVR5cGUpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFtdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgLXggYicsIE5TKHg9TXlUeXBlKCdiJyksIHNwYW09TXlUeXBlKCdhJykpKSwKKyAgICAgICAgKCcteGYgZycsIE5TKHg9TXlUeXBlKCdmJyksIHNwYW09TXlUeXBlKCdnJykpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFR5cGVDbGFzc2ljQ2xhc3MoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBjbGFzc2ljIGNsYXNzIHR5cGUiIiIKKworICAgIGNsYXNzIEM6CisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorCisgICAgICAgIF9faGFzaF9fID0gTm9uZQorCisgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuICh0eXBlKHNlbGYpLCBzZWxmLnZhbHVlKSA9PSAodHlwZShvdGhlciksIG90aGVyLnZhbHVlKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9QyksCisgICAgICAgIFNpZygnc3BhbScsIHR5cGU9QyksCisgICAgXQorICAgIGZhaWx1cmVzID0gW10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSAteCBiJywgTlMoeD1DKCdiJyksIHNwYW09QygnYScpKSksCisgICAgICAgICgnLXhmIGcnLCBOUyh4PUMoJ2YnKSwgc3BhbT1DKCdnJykpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFR5cGVSZWdpc3RyYXRpb24oVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSB1c2VyLWRlZmluZWQgdHlwZSBieSByZWdpc3RlcmluZyBpdCIiIgorCisgICAgZGVmIHRlc3Qoc2VsZik6CisKKyAgICAgICAgZGVmIGdldF9teV90eXBlKHN0cmluZyk6CisgICAgICAgICAgICByZXR1cm4gJ215X3R5cGV7JXN9JyAlIHN0cmluZworCisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnJlZ2lzdGVyKCd0eXBlJywgJ215X3R5cGUnLCBnZXRfbXlfdHlwZSkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCB0eXBlPSdteV90eXBlJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgneScsIHR5cGU9J215X3R5cGUnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoJzEnLnNwbGl0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TKHg9Tm9uZSwgeT0nbXlfdHlwZXsxfScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCcteCAxIDQyJy5zcGxpdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOUyh4PSdteV90eXBlezF9JywgeT0nbXlfdHlwZXs0Mn0nKSkKKworCisjID09PT09PT09PT09PQorIyBBY3Rpb24gdGVzdHMKKyMgPT09PT09PT09PT09CisKK2NsYXNzIFRlc3RBY3Rpb25Vc2VyRGVmaW5lZChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIHVzZXItZGVmaW5lZCBvcHRpb24vYXJndW1lbnQgYWN0aW9uIiIiCisKKyAgICBjbGFzcyBPcHRpb25hbEFjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgorCisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWUsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBjaGVjayBkZXN0aW5hdGlvbiBhbmQgb3B0aW9uIHN0cmluZworICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLmRlc3QgPT0gJ3NwYW0nLCAnZGVzdDogJXMnICUgc2VsZi5kZXN0CisgICAgICAgICAgICAgICAgYXNzZXJ0IG9wdGlvbl9zdHJpbmcgPT0gJy1zJywgJ2ZsYWc6ICVzJyAlIG9wdGlvbl9zdHJpbmcKKyAgICAgICAgICAgICAgICAjIHdoZW4gb3B0aW9uIGlzIGJlZm9yZSBhcmd1bWVudCwgYmFkZ2VyPTIsIGFuZCB3aGVuCisgICAgICAgICAgICAgICAgIyBvcHRpb24gaXMgYWZ0ZXIgYXJndW1lbnQsIGJhZGdlcj08d2hhdGV2ZXIgd2FzIHNldD4KKyAgICAgICAgICAgICAgICBleHBlY3RlZF9ucyA9IE5TKHNwYW09MC4yNSkKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpbiBbMC4xMjUsIDAuNjI1XToKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbnMuYmFkZ2VyID0gMgorICAgICAgICAgICAgICAgIGVsaWYgdmFsdWUgaW4gWzIuMF06CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25zLmJhZGdlciA9IDg0CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ3ZhbHVlOiAlcycgJSB2YWx1ZSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgZXhwZWN0ZWRfbnMgPT0gbmFtZXNwYWNlLCAoJ2V4cGVjdGVkICVzLCBnb3QgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkX25zLCBuYW1lc3BhY2UpKQorICAgICAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgorICAgICAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50UGFyc2VyRXJyb3IoJ29wdF9hY3Rpb24gZmFpbGVkOiAlcycgJSBlKQorICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsICdzcGFtJywgdmFsdWUpCisKKyAgICBjbGFzcyBQb3NpdGlvbmFsQWN0aW9uKGFyZ3BhcnNlLkFjdGlvbik6CisKKyAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZSwgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBhc3NlcnQgb3B0aW9uX3N0cmluZyBpcyBOb25lLCAoJ29wdGlvbl9zdHJpbmc6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmcpCisgICAgICAgICAgICAgICAgIyBjaGVjayBkZXN0aW5hdGlvbgorICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLmRlc3QgPT0gJ2JhZGdlcicsICdkZXN0OiAlcycgJSBzZWxmLmRlc3QKKyAgICAgICAgICAgICAgICAjIHdoZW4gYXJndW1lbnQgaXMgYmVmb3JlIG9wdGlvbiwgc3BhbT0wLjI1LCBhbmQgd2hlbgorICAgICAgICAgICAgICAgICMgb3B0aW9uIGlzIGFmdGVyIGFyZ3VtZW50LCBzcGFtPTx3aGF0ZXZlciB3YXMgc2V0PgorICAgICAgICAgICAgICAgIGV4cGVjdGVkX25zID0gTlMoYmFkZ2VyPTIpCisgICAgICAgICAgICAgICAgaWYgdmFsdWUgaW4gWzQyLCA4NF06CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25zLnNwYW0gPSAwLjI1CisgICAgICAgICAgICAgICAgZWxpZiB2YWx1ZSBpbiBbMV06CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25zLnNwYW0gPSAwLjYyNQorICAgICAgICAgICAgICAgIGVsaWYgdmFsdWUgaW4gWzJdOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9ucy5zcGFtID0gMC4xMjUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigndmFsdWU6ICVzJyAlIHZhbHVlKQorICAgICAgICAgICAgICAgIGFzc2VydCBleHBlY3RlZF9ucyA9PSBuYW1lc3BhY2UsICgnZXhwZWN0ZWQgJXMsIGdvdCAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRfbnMsIG5hbWVzcGFjZSkpCisgICAgICAgICAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6CisgICAgICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRQYXJzZXJFcnJvcignYXJnX2FjdGlvbiBmYWlsZWQ6ICVzJyAlIGUpCisgICAgICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgJ2JhZGdlcicsIHZhbHVlKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctcycsIGRlc3Q9J3NwYW0nLCBhY3Rpb249T3B0aW9uYWxBY3Rpb24sCisgICAgICAgICAgICB0eXBlPWZsb2F0LCBkZWZhdWx0PTAuMjUpLAorICAgICAgICBTaWcoJ2JhZGdlcicsIGFjdGlvbj1Qb3NpdGlvbmFsQWN0aW9uLAorICAgICAgICAgICAgdHlwZT1pbnQsIG5hcmdzPSc/JywgZGVmYXVsdD0yKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCctczAuMTI1JywgTlMoc3BhbT0wLjEyNSwgYmFkZ2VyPTIpKSwKKyAgICAgICAgKCc0MicsIE5TKHNwYW09MC4yNSwgYmFkZ2VyPTQyKSksCisgICAgICAgICgnLXMgMC42MjUgMScsIE5TKHNwYW09MC42MjUsIGJhZGdlcj0xKSksCisgICAgICAgICgnODQgLXMyJywgTlMoc3BhbT0yLjAsIGJhZGdlcj04NCkpLAorICAgIF0KKworCitjbGFzcyBUZXN0QWN0aW9uUmVnaXN0cmF0aW9uKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgdXNlci1kZWZpbmVkIGFjdGlvbiBzdXBwbGllZCBieSByZWdpc3RlcmluZyBpdCIiIgorCisgICAgY2xhc3MgTXlBY3Rpb24oYXJncGFyc2UuQWN0aW9uKToKKworICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlcywgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QsICdmb29bJXNdJyAlIHZhbHVlcykKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorCisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnJlZ2lzdGVyKCdhY3Rpb24nLCAnbXlfYWN0aW9uJywgc2VsZi5NeUFjdGlvbikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFkZ2VyJywgYWN0aW9uPSdteV9hY3Rpb24nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoWycxJ10pLCBOUyhiYWRnZXI9J2Zvb1sxXScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKFsnNDInXSksIE5TKGJhZGdlcj0nZm9vWzQyXScpKQorCisKKyMgPT09PT09PT09PT09PT09PQorIyBTdWJwYXJzZXJzIHRlc3RzCisjID09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEFkZFN1YnBhcnNlcnMoVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhlIGFkZF9zdWJwYXJzZXJzIG1ldGhvZCIiIgorCisgICAgZGVmIGFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRQYXJzZXJFcnJvciwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIF9nZXRfcGFyc2VyKHNlbGYsIHN1YnBhcnNlcl9oZWxwPUZhbHNlLCBwcmVmaXhfY2hhcnM9Tm9uZSk6CisgICAgICAgICMgY3JlYXRlIGEgcGFyc2VyIHdpdGggYSBzdWJwYXJzZXJzIGFyZ3VtZW50CisgICAgICAgIGlmIHByZWZpeF9jaGFyczoKKyAgICAgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKAorICAgICAgICAgICAgICAgIHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0nbWFpbiBkZXNjcmlwdGlvbicsIHByZWZpeF9jaGFycz1wcmVmaXhfY2hhcnMpCisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgICAgIHByZWZpeF9jaGFyc1swXSAqIDIgKyAnZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nZm9vIGhlbHAnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoCisgICAgICAgICAgICAgICAgcHJvZz0nUFJPRycsIGRlc2NyaXB0aW9uPSdtYWluIGRlc2NyaXB0aW9uJykKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAgICAgJy0tZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nZm9vIGhlbHAnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgJ2JhcicsIHR5cGU9ZmxvYXQsIGhlbHA9J2JhciBoZWxwJykKKworICAgICAgICAjIGNoZWNrIHRoYXQgb25seSBvbmUgc3VicGFyc2VycyBhcmd1bWVudCBjYW4gYmUgYWRkZWQKKyAgICAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhoZWxwPSdjb21tYW5kIGhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VyLmFkZF9zdWJwYXJzZXJzKQorCisgICAgICAgICMgYWRkIGZpcnN0IHN1Yi1wYXJzZXIKKyAgICAgICAgcGFyc2VyMV9rd2FyZ3MgPSBkaWN0KGRlc2NyaXB0aW9uPScxIGRlc2NyaXB0aW9uJykKKyAgICAgICAgaWYgc3VicGFyc2VyX2hlbHA6CisgICAgICAgICAgICBwYXJzZXIxX2t3YXJnc1snaGVscCddID0gJzEgaGVscCcKKyAgICAgICAgcGFyc2VyMSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignMScsICoqcGFyc2VyMV9rd2FyZ3MpCisgICAgICAgIHBhcnNlcjEuYWRkX2FyZ3VtZW50KCctdycsIHR5cGU9aW50LCBoZWxwPSd3IGhlbHAnKQorICAgICAgICBwYXJzZXIxLmFkZF9hcmd1bWVudCgneCcsIGNob2ljZXM9J2FiYycsIGhlbHA9J3ggaGVscCcpCisKKyAgICAgICAgIyBhZGQgc2Vjb25kIHN1Yi1wYXJzZXIKKyAgICAgICAgcGFyc2VyMl9rd2FyZ3MgPSBkaWN0KGRlc2NyaXB0aW9uPScyIGRlc2NyaXB0aW9uJykKKyAgICAgICAgaWYgc3VicGFyc2VyX2hlbHA6CisgICAgICAgICAgICBwYXJzZXIyX2t3YXJnc1snaGVscCddID0gJzIgaGVscCcKKyAgICAgICAgcGFyc2VyMiA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignMicsICoqcGFyc2VyMl9rd2FyZ3MpCisgICAgICAgIHBhcnNlcjIuYWRkX2FyZ3VtZW50KCcteScsIGNob2ljZXM9JzEyMycsIGhlbHA9J3kgaGVscCcpCisgICAgICAgIHBhcnNlcjIuYWRkX2FyZ3VtZW50KCd6JywgdHlwZT1jb21wbGV4LCBuYXJncz0nKicsIGhlbHA9J3ogaGVscCcpCisKKyAgICAgICAgIyBhZGQgdGhpcmQgc3ViLXBhcnNlcgorICAgICAgICBwYXJzZXIzX2t3YXJncyA9IGRpY3QoZGVzY3JpcHRpb249JzMgZGVzY3JpcHRpb24nKQorICAgICAgICBpZiBzdWJwYXJzZXJfaGVscDoKKyAgICAgICAgICAgIHBhcnNlcjNfa3dhcmdzWydoZWxwJ10gPSAnMyBoZWxwJworICAgICAgICBwYXJzZXIzID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCczJywgKipwYXJzZXIzX2t3YXJncykKKyAgICAgICAgcGFyc2VyMy5hZGRfYXJndW1lbnQoJ3QnLCB0eXBlPWludCwgaGVscD0ndCBoZWxwJykKKyAgICAgICAgcGFyc2VyMy5hZGRfYXJndW1lbnQoJ3UnLCBuYXJncz0nLi4uJywgaGVscD0ndSBoZWxwJykKKworICAgICAgICAjIHJldHVybiB0aGUgbWFpbiBwYXJzZXIKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0QWRkU3VicGFyc2Vycywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnBhcnNlciA9IHNlbGYuX2dldF9wYXJzZXIoKQorICAgICAgICBzZWxmLmNvbW1hbmRfaGVscF9wYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHN1YnBhcnNlcl9oZWxwPVRydWUpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9hcmdzX2ZhaWx1cmVzKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHNvbWUgZmFpbHVyZSBjYXNlczoKKyAgICAgICAgZm9yIGFyZ3Nfc3RyIGluIFsnJywgJ2EnLCAnYSBhJywgJzAuNSBhJywgJzAuNSAxJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnMC41IDEgLXknLCAnMC41IDIgLXcnXToKKyAgICAgICAgICAgIGFyZ3MgPSBhcmdzX3N0ci5zcGxpdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3Ioc2VsZi5wYXJzZXIucGFyc2VfYXJncywgYXJncykKKworICAgIGRlZiB0ZXN0X3BhcnNlX2FyZ3Moc2VsZik6CisgICAgICAgICMgY2hlY2sgc29tZSBub24tZmFpbHVyZSBjYXNlczoKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnBhcnNlX2FyZ3MoJzAuNSAxIGIgLXcgNycuc3BsaXQoKSksCisgICAgICAgICAgICBOUyhmb289RmFsc2UsIGJhcj0wLjUsIHc9NywgeD0nYicpLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9hcmdzKCcwLjI1IC0tZm9vIDIgLXkgMiAzaiAtLSAtMWonLnNwbGl0KCkpLAorICAgICAgICAgICAgTlMoZm9vPVRydWUsIGJhcj0wLjI1LCB5PScyJywgej1bM2osIC0xal0pLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9hcmdzKCctLWZvbyAwLjEyNSAxIGMnLnNwbGl0KCkpLAorICAgICAgICAgICAgTlMoZm9vPVRydWUsIGJhcj0wLjEyNSwgdz1Ob25lLCB4PSdjJyksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnBhcnNlX2FyZ3MoJy0xLjUgMyAxMSAtLSBhIC0tZm9vIDcgLS0gYicuc3BsaXQoKSksCisgICAgICAgICAgICBOUyhmb289RmFsc2UsIGJhcj0tMS41LCB0PTExLCB1PVsnYScsICctLWZvbycsICc3JywgJy0tJywgJ2InXSksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3BhcnNlX2tub3duX2FyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9rbm93bl9hcmdzKCcwLjUgMSBiIC13IDcnLnNwbGl0KCkpLAorICAgICAgICAgICAgKE5TKGZvbz1GYWxzZSwgYmFyPTAuNSwgdz03LCB4PSdiJyksIFtdKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2Vfa25vd25fYXJncygnMC41IC1wIDEgYiAtdyA3Jy5zcGxpdCgpKSwKKyAgICAgICAgICAgIChOUyhmb289RmFsc2UsIGJhcj0wLjUsIHc9NywgeD0nYicpLCBbJy1wJ10pLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9rbm93bl9hcmdzKCcwLjUgMSBiIC13IDcgLXAnLnNwbGl0KCkpLAorICAgICAgICAgICAgKE5TKGZvbz1GYWxzZSwgYmFyPTAuNSwgdz03LCB4PSdiJyksIFsnLXAnXSksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoJzAuNSAxIGIgLXEgLXJzIC13IDcnLnNwbGl0KCkpLAorICAgICAgICAgICAgKE5TKGZvbz1GYWxzZSwgYmFyPTAuNSwgdz03LCB4PSdiJyksIFsnLXEnLCAnLXJzJ10pLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9rbm93bl9hcmdzKCcwLjUgLVcgMSBiIC1YIFkgLXcgNyBaJy5zcGxpdCgpKSwKKyAgICAgICAgICAgIChOUyhmb289RmFsc2UsIGJhcj0wLjUsIHc9NywgeD0nYicpLCBbJy1XJywgJy1YJywgJ1knLCAnWiddKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZGVzdChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoZGVzdD0nYmFyJykKKyAgICAgICAgcGFyc2VyMSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignMScpCisgICAgICAgIHBhcnNlcjEuYWRkX2FyZ3VtZW50KCdiYXonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKGZvbz1GYWxzZSwgYmFyPScxJywgYmF6PScyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoJzEgMicuc3BsaXQoKSkpCisKKyAgICBkZWYgdGVzdF9oZWxwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLmZvcm1hdF91c2FnZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd1c2FnZTogUFJPRyBbLWhdIFstLWZvb10gYmFyIHsxLDIsM30gLi4uXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLmZvcm1hdF9oZWxwKCksIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvb10gYmFyIHsxLDIsM30gLi4uCisKKyAgICAgICAgICAgIG1haW4gZGVzY3JpcHRpb24KKworICAgICAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIGJhciAgICAgICAgIGJhciBoZWxwCisgICAgICAgICAgICAgIHsxLDIsM30gICAgIGNvbW1hbmQgaGVscAorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLS1mb28gICAgICAgZm9vIGhlbHAKKyAgICAgICAgICAgICcnJykpCisKKyAgICBkZWYgdGVzdF9oZWxwX2V4dHJhX3ByZWZpeF9jaGFycyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgLSBpcyBzdGlsbCB1c2VkIGZvciBoZWxwIGlmIGl0IGlzIGEgbm9uLWZpcnN0IHByZWZpeCBjaGFyCisgICAgICAgIHBhcnNlciA9IHNlbGYuX2dldF9wYXJzZXIocHJlZml4X2NoYXJzPScrOi0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfdXNhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndXNhZ2U6IFBST0cgWy1oXSBbKytmb29dIGJhciB7MSwyLDN9IC4uLlxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X2hlbHAoKSwgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWysrZm9vXSBiYXIgezEsMiwzfSAuLi4KKworICAgICAgICAgICAgbWFpbiBkZXNjcmlwdGlvbgorCisgICAgICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgYmFyICAgICAgICAgYmFyIGhlbHAKKyAgICAgICAgICAgICAgezEsMiwzfSAgICAgY29tbWFuZCBoZWxwCisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICArK2ZvbyAgICAgICBmb28gaGVscAorICAgICAgICAgICAgJycnKSkKKworCisgICAgZGVmIHRlc3RfaGVscF9hbHRlcm5hdGVfcHJlZml4X2NoYXJzKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHByZWZpeF9jaGFycz0nKzovJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X3VzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzYWdlOiBQUk9HIFsraF0gWysrZm9vXSBiYXIgezEsMiwzfSAuLi5cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmZvcm1hdF9oZWxwKCksIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbK2hdIFsrK2Zvb10gYmFyIHsxLDIsM30gLi4uCisKKyAgICAgICAgICAgIG1haW4gZGVzY3JpcHRpb24KKworICAgICAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIGJhciAgICAgICAgIGJhciBoZWxwCisgICAgICAgICAgICAgIHsxLDIsM30gICAgIGNvbW1hbmQgaGVscAorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgICtoLCArK2hlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgKytmb28gICAgICAgZm9vIGhlbHAKKyAgICAgICAgICAgICcnJykpCisKKyAgICBkZWYgdGVzdF9wYXJzZXJfY29tbWFuZF9oZWxwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tbWFuZF9oZWxwX3BhcnNlci5mb3JtYXRfdXNhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndXNhZ2U6IFBST0cgWy1oXSBbLS1mb29dIGJhciB7MSwyLDN9IC4uLlxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbW1hbmRfaGVscF9wYXJzZXIuZm9ybWF0X2hlbHAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb29dIGJhciB7MSwyLDN9IC4uLgorCisgICAgICAgICAgICBtYWluIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICBiYXIgICAgICAgICBiYXIgaGVscAorICAgICAgICAgICAgICB7MSwyLDN9ICAgICBjb21tYW5kIGhlbHAKKyAgICAgICAgICAgICAgICAxICAgICAgICAgMSBoZWxwCisgICAgICAgICAgICAgICAgMiAgICAgICAgIDIgaGVscAorICAgICAgICAgICAgICAgIDMgICAgICAgICAzIGhlbHAKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC0tZm9vICAgICAgIGZvbyBoZWxwCisgICAgICAgICAgICAnJycpKQorCisgICAgZGVmIHRlc3Rfc3VicGFyc2VyX3RpdGxlX2hlbHAoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbWFpbiBkZXNjcmlwdGlvbicpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nZm9vIGhlbHAnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCBoZWxwPSdiYXIgaGVscCcpCisgICAgICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnModGl0bGU9J3N1YmNvbW1hbmRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nY29tbWFuZCBoZWxwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdhZGRpdGlvbmFsIHRleHQnKQorICAgICAgICBwYXJzZXIxID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCcxJykKKyAgICAgICAgcGFyc2VyMiA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmZvcm1hdF91c2FnZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd1c2FnZTogUFJPRyBbLWhdIFstLWZvb10gYmFyIHsxLDJ9IC4uLlxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X2hlbHAoKSwgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vXSBiYXIgezEsMn0gLi4uCisKKyAgICAgICAgICAgIG1haW4gZGVzY3JpcHRpb24KKworICAgICAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIGJhciAgICAgICAgIGJhciBoZWxwCisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICAtLWZvbyAgICAgICBmb28gaGVscAorCisgICAgICAgICAgICBzdWJjb21tYW5kczoKKyAgICAgICAgICAgICAgY29tbWFuZCBoZWxwCisKKyAgICAgICAgICAgICAgezEsMn0gICAgICAgYWRkaXRpb25hbCB0ZXh0CisgICAgICAgICAgICAnJycpKQorCisgICAgZGVmIF90ZXN0X3N1YnBhcnNlcl9oZWxwKHNlbGYsIGFyZ3Nfc3RyLCBleHBlY3RlZF9oZWxwKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2VfYXJncyhhcmdzX3N0ci5zcGxpdCgpKQorICAgICAgICBleGNlcHQgQXJndW1lbnRQYXJzZXJFcnJvcjoKKyAgICAgICAgICAgIGVyciA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICBpZiBlcnIuc3Rkb3V0ICE9IGV4cGVjdGVkX2hlbHA6CisgICAgICAgICAgICAgICAgcHJpbnQocmVwcihleHBlY3RlZF9oZWxwKSkKKyAgICAgICAgICAgICAgICBwcmludChyZXByKGVyci5zdGRvdXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuc3Rkb3V0LCBleHBlY3RlZF9oZWxwKQorCisgICAgZGVmIHRlc3Rfc3VicGFyc2VyMV9oZWxwKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3N1YnBhcnNlcl9oZWxwKCc1LjAgMSAtaCcsIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBiYXIgMSBbLWhdIFstdyBXXSB7YSxiLGN9CisKKyAgICAgICAgICAgIDEgZGVzY3JpcHRpb24KKworICAgICAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIHthLGIsY30gICAgIHggaGVscAorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLXcgVyAgICAgICAgdyBoZWxwCisgICAgICAgICAgICAnJycpKQorCisgICAgZGVmIHRlc3Rfc3VicGFyc2VyMl9oZWxwKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3N1YnBhcnNlcl9oZWxwKCc1LjAgMiAtaCcsIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBiYXIgMiBbLWhdIFsteSB7MSwyLDN9XSBbeiBbeiAuLi5dXQorCisgICAgICAgICAgICAyIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICB6ICAgICAgICAgICB6IGhlbHAKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC15IHsxLDIsM30gIHkgaGVscAorICAgICAgICAgICAgJycnKSkKKworIyA9PT09PT09PT09PT0KKyMgR3JvdXBzIHRlc3RzCisjID09PT09PT09PT09PQorCitjbGFzcyBUZXN0UG9zaXRpb25hbHNHcm91cHMoVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoYXQgb3JkZXIgb2YgZ3JvdXAgcG9zaXRpb25hbHMgbWF0Y2hlcyBjb25zdHJ1Y3Rpb24gb3JkZXIiIiIKKworICAgIGRlZiB0ZXN0X25vbmdyb3VwX2ZpcnN0KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnZycpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnYmFyJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmF6JykKKyAgICAgICAgZXhwZWN0ZWQgPSBOUyhmb289JzEnLCBiYXI9JzInLCBiYXo9JzMnKQorICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2VfYXJncygnMSAyIDMnLnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X2dyb3VwX2ZpcnN0KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgneHh4JykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCdmb28nKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXonKQorICAgICAgICBleHBlY3RlZCA9IE5TKGZvbz0nMScsIGJhcj0nMicsIGJhej0nMycpCisgICAgICAgIHJlc3VsdCA9IHBhcnNlci5wYXJzZV9hcmdzKCcxIDIgMycuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcmVzdWx0KQorCisgICAgZGVmIHRlc3RfaW50ZXJsZWF2ZWRfZ3JvdXBzKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgneHh4JykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnZm9vJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCdiYXInKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXonKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ3l5eScpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnZnJlbGwnKQorICAgICAgICBleHBlY3RlZCA9IE5TKGZvbz0nMScsIGJhcj0nMicsIGJhej0nMycsIGZyZWxsPSc0JykKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlX2FyZ3MoJzEgMiAzIDQnLnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCkKKworIyA9PT09PT09PT09PT09PT09PT09CisjIFBhcmVudCBwYXJzZXIgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0UGFyZW50UGFyc2VycyhUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhhdCBwYXJzZXJzIGNhbiBiZSBjcmVhdGVkIHdpdGggcGFyZW50IHBhcnNlcnMiIiIKKworICAgIGRlZiBhc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50UGFyc2VyRXJyb3IsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdFBhcmVudFBhcnNlcnMsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi53eHl6X3BhcmVudCA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorICAgICAgICBzZWxmLnd4eXpfcGFyZW50LmFkZF9hcmd1bWVudCgnLS13JykKKyAgICAgICAgeF9ncm91cCA9IHNlbGYud3h5el9wYXJlbnQuYWRkX2FyZ3VtZW50X2dyb3VwKCd4JykKKyAgICAgICAgeF9ncm91cC5hZGRfYXJndW1lbnQoJy15JykKKyAgICAgICAgc2VsZi53eHl6X3BhcmVudC5hZGRfYXJndW1lbnQoJ3onKQorCisgICAgICAgIHNlbGYuYWJjZF9wYXJlbnQgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgc2VsZi5hYmNkX3BhcmVudC5hZGRfYXJndW1lbnQoJ2EnKQorICAgICAgICBzZWxmLmFiY2RfcGFyZW50LmFkZF9hcmd1bWVudCgnLWInKQorICAgICAgICBjX2dyb3VwID0gc2VsZi5hYmNkX3BhcmVudC5hZGRfYXJndW1lbnRfZ3JvdXAoJ2MnKQorICAgICAgICBjX2dyb3VwLmFkZF9hcmd1bWVudCgnLS1kJykKKworICAgICAgICBzZWxmLndfcGFyZW50ID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisgICAgICAgIHNlbGYud19wYXJlbnQuYWRkX2FyZ3VtZW50KCctLXcnKQorCisgICAgICAgIHNlbGYuel9wYXJlbnQgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgc2VsZi56X3BhcmVudC5hZGRfYXJndW1lbnQoJ3onKQorCisgICAgICAgICMgcGFyZW50cyB3aXRoIG11dHVhbGx5IGV4Y2x1c2l2ZSBncm91cHMKKyAgICAgICAgc2VsZi5hYl9tdXRleF9wYXJlbnQgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgZ3JvdXAgPSBzZWxmLmFiX211dGV4X3BhcmVudC5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWInLCBhY3Rpb249J3N0b3JlX3RydWUnKQorCisgICAgICAgIHNlbGYubWFpbl9wcm9ncmFtID0gb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9wYXJlbnQoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHBhcmVudHM9W3NlbGYud3h5el9wYXJlbnRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCcteSAxIDIgLS13IDMnLnNwbGl0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TKHc9JzMnLCB5PScxJywgej0nMicpKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3BhcmVudF9tdXRleChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9tdXRleF9hYihzZWxmLmFiX211dGV4X3BhcmVudC5wYXJzZV9hcmdzKQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPVtzZWxmLmFiX211dGV4X3BhcmVudF0pCisgICAgICAgIHNlbGYuX3Rlc3RfbXV0ZXhfYWIocGFyc2VyLnBhcnNlX2FyZ3MpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfZ3JhbnBhcmVudF9tdXRleChzZWxmKToKKyAgICAgICAgcGFyZW50cyA9IFtzZWxmLmFiX211dGV4X3BhcmVudF0KKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UsIHBhcmVudHM9cGFyZW50cykKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyc2VyXSkKKyAgICAgICAgc2VsZi5fdGVzdF9tdXRleF9hYihwYXJzZXIucGFyc2VfYXJncykKKworICAgIGRlZiBfdGVzdF9tdXRleF9hYihzZWxmLCBwYXJzZV9hcmdzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9hcmdzKFtdKSwgTlMoYT1GYWxzZSwgYj1GYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VfYXJncyhbJy1hJ10pLCBOUyhhPVRydWUsIGI9RmFsc2UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX2FyZ3MoWyctYiddKSwgTlMoYT1GYWxzZSwgYj1UcnVlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlX2FyZ3MsIFsnLWEnLCAnLWInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlX2FyZ3MsIFsnLWInLCAnLWEnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlX2FyZ3MsIFsnLWMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlX2FyZ3MsIFsnLWEnLCAnLWMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlX2FyZ3MsIFsnLWInLCAnLWMnXSkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX3BhcmVudHMoc2VsZik6CisgICAgICAgIHBhcmVudHMgPSBbc2VsZi5hYmNkX3BhcmVudCwgc2VsZi53eHl6X3BhcmVudF0KKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1wYXJlbnRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCctLWQgMSAtLXcgMiAzIDQnLnNwbGl0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TKGE9JzMnLCBiPU5vbmUsIGQ9JzEnLCB3PScyJywgeT1Ob25lLCB6PSc0JykpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9wYXJlbnRzX211dGV4KHNlbGYpOgorICAgICAgICBwYXJlbnRzID0gW3NlbGYuYWJfbXV0ZXhfcGFyZW50LCBzZWxmLnd4eXpfcGFyZW50XQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPXBhcmVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoJy1hIC0tdyAyIDMnLnNwbGl0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TKGE9VHJ1ZSwgYj1GYWxzZSwgdz0nMicsIHk9Tm9uZSwgej0nMycpKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IoCisgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncywgJy1hIC0tdyAyIDMgLWInLnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcigKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzLCAnLWEgLWIgLS13IDIgMycuc3BsaXQoKSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0aW5nX3BhcmVudHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgYXJncGFyc2UuQXJndW1lbnRFcnJvciwKKyAgICAgICAgICAgIGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLAorICAgICAgICAgICAgcGFyZW50cz1bc2VsZi53X3BhcmVudCwgc2VsZi53eHl6X3BhcmVudF0pCisKKyAgICBkZWYgdGVzdF9jb25mbGljdGluZ19wYXJlbnRzX211dGV4KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGFyZ3BhcnNlLkFyZ3VtZW50RXJyb3IsCisgICAgICAgICAgICBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlciwKKyAgICAgICAgICAgIHBhcmVudHM9W3NlbGYuYWJjZF9wYXJlbnQsIHNlbGYuYWJfbXV0ZXhfcGFyZW50XSkKKworICAgIGRlZiB0ZXN0X3NhbWVfYXJndW1lbnRfbmFtZV9wYXJlbnRzKHNlbGYpOgorICAgICAgICBwYXJlbnRzID0gW3NlbGYud3h5el9wYXJlbnQsIHNlbGYuel9wYXJlbnRdCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHBhcmVudHM9cGFyZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncygnMSAyJy5zcGxpdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOUyh3PU5vbmUsIHk9Tm9uZSwgej0nMicpKQorCisgICAgZGVmIHRlc3Rfc3VicGFyc2VyX3BhcmVudHMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycygpCisgICAgICAgIGFiY2RlX3BhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYmFyJywgcGFyZW50cz1bc2VsZi5hYmNkX3BhcmVudF0pCisgICAgICAgIGFiY2RlX3BhcnNlci5hZGRfYXJndW1lbnQoJ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCdiYXIgLWIgMSAtLWQgMiAzIDQnLnNwbGl0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TKGE9JzMnLCBiPScxJywgZD0nMicsIGU9JzQnKSkKKworICAgIGRlZiB0ZXN0X3N1YnBhcnNlcl9wYXJlbnRzX211dGV4KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoKQorICAgICAgICBwYXJlbnRzID0gW3NlbGYuYWJfbXV0ZXhfcGFyZW50XQorICAgICAgICBhYmNfcGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdmb28nLCBwYXJlbnRzPXBhcmVudHMpCisgICAgICAgIGNfZ3JvdXAgPSBhYmNfcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnY19ncm91cCcpCisgICAgICAgIGNfZ3JvdXAuYWRkX2FyZ3VtZW50KCdjJykKKyAgICAgICAgcGFyZW50cyA9IFtzZWxmLnd4eXpfcGFyZW50LCBzZWxmLmFiX211dGV4X3BhcmVudF0KKyAgICAgICAgd3h5emFiZV9wYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2JhcicsIHBhcmVudHM9cGFyZW50cykKKyAgICAgICAgd3h5emFiZV9wYXJzZXIuYWRkX2FyZ3VtZW50KCdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncygnZm9vIC1hIDQnLnNwbGl0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TKGE9VHJ1ZSwgYj1GYWxzZSwgYz0nNCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCdiYXIgLWIgIC0tdyAyIDMgNCcuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlMoYT1GYWxzZSwgYj1UcnVlLCB3PScyJywgeT1Ob25lLCB6PSczJywgZT0nNCcpKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IoCisgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncywgJ2ZvbyAtYSAtYiA0Jy5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IoCisgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncywgJ2JhciAtYiAtYSA0Jy5zcGxpdCgpKQorCisgICAgZGVmIHRlc3RfcGFyZW50X2hlbHAoc2VsZik6CisgICAgICAgIHBhcmVudHMgPSBbc2VsZi5hYmNkX3BhcmVudCwgc2VsZi53eHl6X3BhcmVudF0KKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1wYXJlbnRzKQorICAgICAgICBwYXJzZXJfaGVscCA9IHBhcnNlci5mb3JtYXRfaGVscCgpCisgICAgICAgIHByb2duYW1lID0gc2VsZi5tYWluX3Byb2dyYW0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXJfaGVscCwgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiB7fXt9Wy1oXSBbLWIgQl0gWy0tZCBEXSBbLS13IFddIFsteSBZXSBhIHoKKworICAgICAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIGEKKyAgICAgICAgICAgICAgegorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLWIgQgorICAgICAgICAgICAgICAtLXcgVworCisgICAgICAgICAgICBjOgorICAgICAgICAgICAgICAtLWQgRAorCisgICAgICAgICAgICB4OgorICAgICAgICAgICAgICAteSBZCisgICAgICAgICcnJy5mb3JtYXQocHJvZ25hbWUsICcgJyBpZiBwcm9nbmFtZSBlbHNlICcnICkpKQorCisgICAgZGVmIHRlc3RfZ3JvdXBzX3BhcmVudHMoc2VsZik6CisgICAgICAgIHBhcmVudCA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorICAgICAgICBnID0gcGFyZW50LmFkZF9hcmd1bWVudF9ncm91cCh0aXRsZT0nZycsIGRlc2NyaXB0aW9uPSdnZCcpCisgICAgICAgIGcuYWRkX2FyZ3VtZW50KCctdycpCisgICAgICAgIGcuYWRkX2FyZ3VtZW50KCcteCcpCisgICAgICAgIG0gPSBwYXJlbnQuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgICAgIG0uYWRkX2FyZ3VtZW50KCcteScpCisgICAgICAgIG0uYWRkX2FyZ3VtZW50KCcteicpCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHBhcmVudHM9W3BhcmVudF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRQYXJzZXJFcnJvciwgcGFyc2VyLnBhcnNlX2FyZ3MsCisgICAgICAgICAgICBbJy15JywgJ1knLCAnLXonLCAnWiddKQorCisgICAgICAgIHBhcnNlcl9oZWxwID0gcGFyc2VyLmZvcm1hdF9oZWxwKCkKKyAgICAgICAgcHJvZ25hbWUgPSBzZWxmLm1haW5fcHJvZ3JhbQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlcl9oZWxwLCB0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgdXNhZ2U6IHt9e31bLWhdIFstdyBXXSBbLXggWF0gWy15IFkgfCAteiBaXQorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLXkgWQorICAgICAgICAgICAgICAteiBaCisKKyAgICAgICAgICAgIGc6CisgICAgICAgICAgICAgIGdkCisKKyAgICAgICAgICAgICAgLXcgVworICAgICAgICAgICAgICAteCBYCisgICAgICAgICcnJy5mb3JtYXQocHJvZ25hbWUsICcgJyBpZiBwcm9nbmFtZSBlbHNlICcnICkpKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBNdXR1YWxseSBleGNsdXNpdmUgZ3JvdXAgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZUdyb3VwRXJyb3JzKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfYWRkX2FyZ3VtZW50X2dyb3VwKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCisgICAgICAgIHJhaXNlcyhUeXBlRXJyb3IsIHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwLCB0aXRsZT0nZm9vJykKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfYWRkX2FyZ3VtZW50KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgICAgICBhZGRfYXJndW1lbnQgPSBncm91cC5hZGRfYXJndW1lbnQKKyAgICAgICAgcmFpc2VzID0gc2VsZi5hc3NlcnRSYWlzZXMKKyAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsIGFkZF9hcmd1bWVudCwgJy0tZm9vJywgcmVxdWlyZWQ9VHJ1ZSkKKyAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsIGFkZF9hcmd1bWVudCwgJ2JhcicpCisgICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBhZGRfYXJndW1lbnQsICdiYXInLCBuYXJncz0nKycpCisgICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBhZGRfYXJndW1lbnQsICdiYXInLCBuYXJncz0xKQorICAgICAgICByYWlzZXMoVmFsdWVFcnJvciwgYWRkX2FyZ3VtZW50LCAnYmFyJywgbmFyZ3M9YXJncGFyc2UuUEFSU0VSKQorCisgICAgZGVmIHRlc3RfaGVscChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgICAgIGdyb3VwMSA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICAgICAgZ3JvdXAxLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBncm91cDEuYWRkX2FyZ3VtZW50KCctLWJhcicsIGFjdGlvbj0nc3RvcmVfZmFsc2UnKQorICAgICAgICBncm91cDIgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgICAgIGdyb3VwMi5hZGRfYXJndW1lbnQoJy0tc291cCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgIGdyb3VwMi5hZGRfYXJndW1lbnQoJy0tbnV0cycsIGFjdGlvbj0nc3RvcmVfZmFsc2UnKQorICAgICAgICBleHBlY3RlZCA9ICcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIHwgLS1iYXJdIFstLXNvdXAgfCAtLW51dHNdCisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICAtLWZvbworICAgICAgICAgICAgICAtLWJhcgorICAgICAgICAgICAgICAtLXNvdXAKKyAgICAgICAgICAgICAgLS1udXRzCisgICAgICAgICAgICAgICcnJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoZXhwZWN0ZWQpKQorCitjbGFzcyBNRU1peGluKG9iamVjdCk6CisKKyAgICBkZWYgdGVzdF9mYWlsdXJlc193aGVuX25vdF9yZXF1aXJlZChzZWxmKToKKyAgICAgICAgcGFyc2VfYXJncyA9IHNlbGYuZ2V0X3BhcnNlcihyZXF1aXJlZD1GYWxzZSkucGFyc2VfYXJncworICAgICAgICBlcnJvciA9IEFyZ3VtZW50UGFyc2VyRXJyb3IKKyAgICAgICAgZm9yIGFyZ3Nfc3RyaW5nIGluIHNlbGYuZmFpbHVyZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgcGFyc2VfYXJncywgYXJnc19zdHJpbmcuc3BsaXQoKSkKKworICAgIGRlZiB0ZXN0X2ZhaWx1cmVzX3doZW5fcmVxdWlyZWQoc2VsZik6CisgICAgICAgIHBhcnNlX2FyZ3MgPSBzZWxmLmdldF9wYXJzZXIocmVxdWlyZWQ9VHJ1ZSkucGFyc2VfYXJncworICAgICAgICBlcnJvciA9IEFyZ3VtZW50UGFyc2VyRXJyb3IKKyAgICAgICAgZm9yIGFyZ3Nfc3RyaW5nIGluIHNlbGYuZmFpbHVyZXMgKyBbJyddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3IsIHBhcnNlX2FyZ3MsIGFyZ3Nfc3RyaW5nLnNwbGl0KCkpCisKKyAgICBkZWYgdGVzdF9zdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQoc2VsZik6CisgICAgICAgIHBhcnNlX2FyZ3MgPSBzZWxmLmdldF9wYXJzZXIocmVxdWlyZWQ9RmFsc2UpLnBhcnNlX2FyZ3MKKyAgICAgICAgc3VjY2Vzc2VzID0gc2VsZi5zdWNjZXNzZXMgKyBzZWxmLnN1Y2Nlc3Nlc193aGVuX25vdF9yZXF1aXJlZAorICAgICAgICBmb3IgYXJnc19zdHJpbmcsIGV4cGVjdGVkX25zIGluIHN1Y2Nlc3NlczoKKyAgICAgICAgICAgIGFjdHVhbF9ucyA9IHBhcnNlX2FyZ3MoYXJnc19zdHJpbmcuc3BsaXQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX25zLCBleHBlY3RlZF9ucykKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Nlc193aGVuX3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBwYXJzZV9hcmdzID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPVRydWUpLnBhcnNlX2FyZ3MKKyAgICAgICAgZm9yIGFyZ3Nfc3RyaW5nLCBleHBlY3RlZF9ucyBpbiBzZWxmLnN1Y2Nlc3NlczoKKyAgICAgICAgICAgIGFjdHVhbF9ucyA9IHBhcnNlX2FyZ3MoYXJnc19zdHJpbmcuc3BsaXQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX25zLCBleHBlY3RlZF9ucykKKworICAgIGRlZiB0ZXN0X3VzYWdlX3doZW5fbm90X3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBmb3JtYXRfdXNhZ2UgPSBzZWxmLmdldF9wYXJzZXIocmVxdWlyZWQ9RmFsc2UpLmZvcm1hdF91c2FnZQorICAgICAgICBleHBlY3RlZF91c2FnZSA9IHNlbGYudXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXRfdXNhZ2UoKSwgdGV4dHdyYXAuZGVkZW50KGV4cGVjdGVkX3VzYWdlKSkKKworICAgIGRlZiB0ZXN0X3VzYWdlX3doZW5fcmVxdWlyZWQoc2VsZik6CisgICAgICAgIGZvcm1hdF91c2FnZSA9IHNlbGYuZ2V0X3BhcnNlcihyZXF1aXJlZD1UcnVlKS5mb3JtYXRfdXNhZ2UKKyAgICAgICAgZXhwZWN0ZWRfdXNhZ2UgPSBzZWxmLnVzYWdlX3doZW5fcmVxdWlyZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXRfdXNhZ2UoKSwgdGV4dHdyYXAuZGVkZW50KGV4cGVjdGVkX3VzYWdlKSkKKworICAgIGRlZiB0ZXN0X2hlbHBfd2hlbl9ub3RfcmVxdWlyZWQoc2VsZik6CisgICAgICAgIGZvcm1hdF9oZWxwID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPUZhbHNlKS5mb3JtYXRfaGVscAorICAgICAgICBoZWxwID0gc2VsZi51c2FnZV93aGVuX25vdF9yZXF1aXJlZCArIHNlbGYuaGVscAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdF9oZWxwKCksIHRleHR3cmFwLmRlZGVudChoZWxwKSkKKworICAgIGRlZiB0ZXN0X2hlbHBfd2hlbl9yZXF1aXJlZChzZWxmKToKKyAgICAgICAgZm9ybWF0X2hlbHAgPSBzZWxmLmdldF9wYXJzZXIocmVxdWlyZWQ9VHJ1ZSkuZm9ybWF0X2hlbHAKKyAgICAgICAgaGVscCA9IHNlbGYudXNhZ2Vfd2hlbl9yZXF1aXJlZCArIHNlbGYuaGVscAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdF9oZWxwKCksIHRleHR3cmFwLmRlZGVudChoZWxwKSkKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVTaW1wbGUoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQ9Tm9uZSk6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tYmFyJywgaGVscD0nYmFyIGhlbHAnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tYmF6JywgbmFyZ3M9Jz8nLCBjb25zdD0nWicsIGhlbHA9J2JheiBoZWxwJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZmFpbHVyZXMgPSBbJy0tYmFyIFggLS1iYXogWScsICctLWJhciBYIC0tYmF6J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLS1iYXIgWCcsIE5TKGJhcj0nWCcsIGJhej1Ob25lKSksCisgICAgICAgICgnLS1iYXIgWCAtLWJhciBaJywgTlMoYmFyPSdaJywgYmF6PU5vbmUpKSwKKyAgICAgICAgKCctLWJheiBZJywgTlMoYmFyPU5vbmUsIGJhej0nWScpKSwKKyAgICAgICAgKCctLWJheicsIE5TKGJhcj1Ob25lLCBiYXo9J1onKSksCisgICAgXQorICAgIHN1Y2Nlc3Nlc193aGVuX25vdF9yZXF1aXJlZCA9IFsKKyAgICAgICAgKCcnLCBOUyhiYXI9Tm9uZSwgYmF6PU5vbmUpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1iYXIgQkFSIHwgLS1iYXogW0JBWl1dCisgICAgICAgICcnJworICAgIHVzYWdlX3doZW5fcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gKC0tYmFyIEJBUiB8IC0tYmF6IFtCQVpdKQorICAgICAgICAnJycKKyAgICBoZWxwID0gJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC0tYmFyIEJBUiAgICBiYXIgaGVscAorICAgICAgICAgIC0tYmF6IFtCQVpdICBiYXogaGVscAorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVMb25nKE1FTWl4aW4sIFRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIHJlcXVpcmVkPU5vbmUpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1hYmNkZScsIGhlbHA9J2FiY2RlIGhlbHAnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZnaGlqJywgaGVscD0nZmdoaWogaGVscCcpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAocmVxdWlyZWQ9cmVxdWlyZWQpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1rbG1ubycsIGhlbHA9J2tsbW5vIGhlbHAnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tcHFyc3QnLCBoZWxwPSdwcXJzdCBoZWxwJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZmFpbHVyZXMgPSBbJy0ta2xtbm8gWCAtLXBxcnN0IFknXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCctLWtsbW5vIFgnLCBOUyhhYmNkZT1Ob25lLCBmZ2hpaj1Ob25lLCBrbG1ubz0nWCcsIHBxcnN0PU5vbmUpKSwKKyAgICAgICAgKCctLWFiY2RlIFkgLS1rbG1ubyBYJywKKyAgICAgICAgICAgIE5TKGFiY2RlPSdZJywgZmdoaWo9Tm9uZSwga2xtbm89J1gnLCBwcXJzdD1Ob25lKSksCisgICAgICAgICgnLS1wcXJzdCBYJywgTlMoYWJjZGU9Tm9uZSwgZmdoaWo9Tm9uZSwga2xtbm89Tm9uZSwgcHFyc3Q9J1gnKSksCisgICAgICAgICgnLS1wcXJzdCBYIC0tZmdoaWogWScsCisgICAgICAgICAgICBOUyhhYmNkZT1Ob25lLCBmZ2hpaj0nWScsIGtsbW5vPU5vbmUsIHBxcnN0PSdYJykpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnJywgTlMoYWJjZGU9Tm9uZSwgZmdoaWo9Tm9uZSwga2xtbm89Tm9uZSwgcHFyc3Q9Tm9uZSkpLAorICAgIF0KKworICAgIHVzYWdlX3doZW5fbm90X3JlcXVpcmVkID0gJycnXAorICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tYWJjZGUgQUJDREVdIFstLWZnaGlqIEZHSElKXQorICAgICAgICAgICAgICAgIFstLWtsbW5vIEtMTU5PIHwgLS1wcXJzdCBQUVJTVF0KKyAgICAnJycKKyAgICB1c2FnZV93aGVuX3JlcXVpcmVkID0gJycnXAorICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tYWJjZGUgQUJDREVdIFstLWZnaGlqIEZHSElKXQorICAgICAgICAgICAgICAgICgtLWtsbW5vIEtMTU5PIHwgLS1wcXJzdCBQUVJTVCkKKyAgICAnJycKKyAgICBoZWxwID0gJycnXAorCisgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgLWgsIC0taGVscCAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgLS1hYmNkZSBBQkNERSAgYWJjZGUgaGVscAorICAgICAgLS1mZ2hpaiBGR0hJSiAgZmdoaWogaGVscAorICAgICAgLS1rbG1ubyBLTE1OTyAga2xtbm8gaGVscAorICAgICAgLS1wcXJzdCBQUVJTVCAgcHFyc3QgaGVscAorICAgICcnJworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZUZpcnN0U3VwcHJlc3NlZChNRU1peGluLCBUZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0X3BhcnNlcihzZWxmLCByZXF1aXJlZCk6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy14JywgaGVscD1hcmdwYXJzZS5TVVBQUkVTUykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCcteScsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLCBoZWxwPSd5IGhlbHAnKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBmYWlsdXJlcyA9IFsnLXggWCAteSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy14IFgnLCBOUyh4PSdYJywgeT1UcnVlKSksCisgICAgICAgICgnLXggWCAteCBZJywgTlMoeD0nWScsIHk9VHJ1ZSkpLAorICAgICAgICAoJy15JywgTlMoeD1Ob25lLCB5PUZhbHNlKSksCisgICAgXQorICAgIHN1Y2Nlc3Nlc193aGVuX25vdF9yZXF1aXJlZCA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUsIHk9VHJ1ZSkpLAorICAgIF0KKworICAgIHVzYWdlX3doZW5fbm90X3JlcXVpcmVkID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsteV0KKyAgICAgICAgJycnCisgICAgdXNhZ2Vfd2hlbl9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSAteQorICAgICAgICAnJycKKyAgICBoZWxwID0gJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXkgICAgICAgICAgeSBoZWxwCisgICAgICAgICcnJworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU1hbnlTdXBwcmVzc2VkKE1FTWl4aW4sIFRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIHJlcXVpcmVkKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAocmVxdWlyZWQ9cmVxdWlyZWQpCisgICAgICAgIGFkZCA9IGdyb3VwLmFkZF9hcmd1bWVudAorICAgICAgICBhZGQoJy0tc3BhbScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpCisgICAgICAgIGFkZCgnLS1iYWRnZXInLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywgaGVscD1hcmdwYXJzZS5TVVBQUkVTUykKKyAgICAgICAgYWRkKCctLWJsYWRkZXInLCBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBmYWlsdXJlcyA9IFsKKyAgICAgICAgJy0tc3BhbSAtLWJhZGdlcicsCisgICAgICAgICctLWJhZGdlciAtLWJsYWRkZXIgQicsCisgICAgICAgICctLWJsYWRkZXIgQiAtLXNwYW0nLAorICAgIF0KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLS1zcGFtJywgTlMoc3BhbT1UcnVlLCBiYWRnZXI9VHJ1ZSwgYmxhZGRlcj1Ob25lKSksCisgICAgICAgICgnLS1iYWRnZXInLCBOUyhzcGFtPUZhbHNlLCBiYWRnZXI9RmFsc2UsIGJsYWRkZXI9Tm9uZSkpLAorICAgICAgICAoJy0tYmxhZGRlciBCJywgTlMoc3BhbT1GYWxzZSwgYmFkZ2VyPVRydWUsIGJsYWRkZXI9J0InKSksCisgICAgICAgICgnLS1zcGFtIC0tc3BhbScsIE5TKHNwYW09VHJ1ZSwgYmFkZ2VyPVRydWUsIGJsYWRkZXI9Tm9uZSkpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnJywgTlMoc3BhbT1GYWxzZSwgYmFkZ2VyPVRydWUsIGJsYWRkZXI9Tm9uZSkpLAorICAgIF0KKworICAgIHVzYWdlX3doZW5fcmVxdWlyZWQgPSB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXQorICAgICAgICAnJycKKyAgICBoZWxwID0gJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICcnJworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsQW5kUG9zaXRpb25hbChNRU1peGluLCBUZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0X3BhcnNlcihzZWxmLCByZXF1aXJlZCk6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nRk9PJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXNwYW0nLCBoZWxwPSdTUEFNJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCdiYWRnZXInLCBuYXJncz0nKicsIGRlZmF1bHQ9J1gnLCBoZWxwPSdCQURHRVInKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBmYWlsdXJlcyA9IFsKKyAgICAgICAgJy0tZm9vIC0tc3BhbSBTJywKKyAgICAgICAgJy0tc3BhbSBTIFgnLAorICAgICAgICAnWCAtLWZvbycsCisgICAgICAgICdYIFkgWiAtLXNwYW0gUycsCisgICAgICAgICctLWZvbyBYIFknLAorICAgIF0KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLS1mb28nLCBOUyhmb289VHJ1ZSwgc3BhbT1Ob25lLCBiYWRnZXI9J1gnKSksCisgICAgICAgICgnLS1zcGFtIFMnLCBOUyhmb289RmFsc2UsIHNwYW09J1MnLCBiYWRnZXI9J1gnKSksCisgICAgICAgICgnWCcsIE5TKGZvbz1GYWxzZSwgc3BhbT1Ob25lLCBiYWRnZXI9WydYJ10pKSwKKyAgICAgICAgKCdYIFkgWicsIE5TKGZvbz1GYWxzZSwgc3BhbT1Ob25lLCBiYWRnZXI9WydYJywgJ1knLCAnWiddKSksCisgICAgXQorICAgIHN1Y2Nlc3Nlc193aGVuX25vdF9yZXF1aXJlZCA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289RmFsc2UsIHNwYW09Tm9uZSwgYmFkZ2VyPSdYJykpLAorICAgIF0KKworICAgIHVzYWdlX3doZW5fbm90X3JlcXVpcmVkID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyB8IC0tc3BhbSBTUEFNIHwgYmFkZ2VyIFtiYWRnZXIgLi4uXV0KKyAgICAgICAgJycnCisgICAgdXNhZ2Vfd2hlbl9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSAoLS1mb28gfCAtLXNwYW0gU1BBTSB8IGJhZGdlciBbYmFkZ2VyIC4uLl0pCisgICAgICAgICcnJworICAgIGhlbHAgPSAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgYmFkZ2VyICAgICAgIEJBREdFUgorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vICAgICAgICBGT08KKyAgICAgICAgICAtLXNwYW0gU1BBTSAgU1BBTQorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVPcHRpb25hbHNNaXhlZChNRU1peGluLCBUZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0X3BhcnNlcihzZWxmLCByZXF1aXJlZCk6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J3ggaGVscCcpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAocmVxdWlyZWQ9cmVxdWlyZWQpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWEnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdhIGhlbHAnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy1iJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nYiBoZWxwJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXknLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSd5IGhlbHAnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy1jJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nYyBoZWxwJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZmFpbHVyZXMgPSBbJy1hIC1iJywgJy1iIC1jJywgJy1hIC1jJywgJy1hIC1iIC1jJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLWEnLCBOUyhhPVRydWUsIGI9RmFsc2UsIGM9RmFsc2UsIHg9RmFsc2UsIHk9RmFsc2UpKSwKKyAgICAgICAgKCctYicsIE5TKGE9RmFsc2UsIGI9VHJ1ZSwgYz1GYWxzZSwgeD1GYWxzZSwgeT1GYWxzZSkpLAorICAgICAgICAoJy1jJywgTlMoYT1GYWxzZSwgYj1GYWxzZSwgYz1UcnVlLCB4PUZhbHNlLCB5PUZhbHNlKSksCisgICAgICAgICgnLWEgLXgnLCBOUyhhPVRydWUsIGI9RmFsc2UsIGM9RmFsc2UsIHg9VHJ1ZSwgeT1GYWxzZSkpLAorICAgICAgICAoJy15IC1iJywgTlMoYT1GYWxzZSwgYj1UcnVlLCBjPUZhbHNlLCB4PUZhbHNlLCB5PVRydWUpKSwKKyAgICAgICAgKCcteCAteSAtYycsIE5TKGE9RmFsc2UsIGI9RmFsc2UsIGM9VHJ1ZSwgeD1UcnVlLCB5PVRydWUpKSwKKyAgICBdCisgICAgc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkID0gWworICAgICAgICAoJycsIE5TKGE9RmFsc2UsIGI9RmFsc2UsIGM9RmFsc2UsIHg9RmFsc2UsIHk9RmFsc2UpKSwKKyAgICAgICAgKCcteCcsIE5TKGE9RmFsc2UsIGI9RmFsc2UsIGM9RmFsc2UsIHg9VHJ1ZSwgeT1GYWxzZSkpLAorICAgICAgICAoJy15JywgTlMoYT1GYWxzZSwgYj1GYWxzZSwgYz1GYWxzZSwgeD1GYWxzZSwgeT1UcnVlKSksCisgICAgXQorCisgICAgdXNhZ2Vfd2hlbl9yZXF1aXJlZCA9IHVzYWdlX3doZW5fbm90X3JlcXVpcmVkID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsteF0gWy1hXSBbLWJdIFsteV0gWy1jXQorICAgICAgICAnJycKKyAgICBoZWxwID0gJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXggICAgICAgICAgeCBoZWxwCisgICAgICAgICAgLWEgICAgICAgICAgYSBoZWxwCisgICAgICAgICAgLWIgICAgICAgICAgYiBoZWxwCisgICAgICAgICAgLXkgICAgICAgICAgeSBoZWxwCisgICAgICAgICAgLWMgICAgICAgICAgYyBoZWxwCisgICAgICAgICcnJworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZUluR3JvdXAoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQ9Tm9uZSk6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICAgICB0aXRsZWRfZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKAorICAgICAgICAgICAgdGl0bGU9J1RpdGxlZCBncm91cCcsIGRlc2NyaXB0aW9uPSdHcm91cCBkZXNjcmlwdGlvbicpCisgICAgICAgIG11dGV4X2dyb3VwID0gXAorICAgICAgICAgICAgdGl0bGVkX2dyb3VwLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAocmVxdWlyZWQ9cmVxdWlyZWQpCisgICAgICAgIG11dGV4X2dyb3VwLmFkZF9hcmd1bWVudCgnLS1iYXInLCBoZWxwPSdiYXIgaGVscCcpCisgICAgICAgIG11dGV4X2dyb3VwLmFkZF9hcmd1bWVudCgnLS1iYXonLCBoZWxwPSdiYXogaGVscCcpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWyctLWJhciBYIC0tYmF6IFknLCAnLS1iYXogWCAtLWJhciBZJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLS1iYXIgWCcsIE5TKGJhcj0nWCcsIGJhej1Ob25lKSksCisgICAgICAgICgnLS1iYXogWScsIE5TKGJhcj1Ob25lLCBiYXo9J1knKSksCisgICAgXQorICAgIHN1Y2Nlc3Nlc193aGVuX25vdF9yZXF1aXJlZCA9IFsKKyAgICAgICAgKCcnLCBOUyhiYXI9Tm9uZSwgYmF6PU5vbmUpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1iYXIgQkFSIHwgLS1iYXogQkFaXQorICAgICAgICAnJycKKyAgICB1c2FnZV93aGVuX3JlcXVpcmVkID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdICgtLWJhciBCQVIgfCAtLWJheiBCQVopCisgICAgICAgICcnJworICAgIGhlbHAgPSAnJydcCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKworICAgICAgICBUaXRsZWQgZ3JvdXA6CisgICAgICAgICAgR3JvdXAgZGVzY3JpcHRpb24KKworICAgICAgICAgIC0tYmFyIEJBUiAgIGJhciBoZWxwCisgICAgICAgICAgLS1iYXogQkFaICAgYmF6IGhlbHAKKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlT3B0aW9uYWxzQW5kUG9zaXRpb25hbHNNaXhlZChNRU1peGluLCBUZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0X3BhcnNlcihzZWxmLCByZXF1aXJlZCk6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd4JywgaGVscD0neCBoZWxwJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXknLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSd5IGhlbHAnKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJ2EnLCBuYXJncz0nPycsIGhlbHA9J2EgaGVscCcpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWInLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdiIGhlbHAnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy1jJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nYyBoZWxwJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZmFpbHVyZXMgPSBbJ1ggQSAtYicsICctYiAtYycsICctYyBYIEEnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdYIEEnLCBOUyhhPSdBJywgYj1GYWxzZSwgYz1GYWxzZSwgeD0nWCcsIHk9RmFsc2UpKSwKKyAgICAgICAgKCdYIC1iJywgTlMoYT1Ob25lLCBiPVRydWUsIGM9RmFsc2UsIHg9J1gnLCB5PUZhbHNlKSksCisgICAgICAgICgnWCAtYycsIE5TKGE9Tm9uZSwgYj1GYWxzZSwgYz1UcnVlLCB4PSdYJywgeT1GYWxzZSkpLAorICAgICAgICAoJ1ggQSAteScsIE5TKGE9J0EnLCBiPUZhbHNlLCBjPUZhbHNlLCB4PSdYJywgeT1UcnVlKSksCisgICAgICAgICgnWCAteSAtYicsIE5TKGE9Tm9uZSwgYj1UcnVlLCBjPUZhbHNlLCB4PSdYJywgeT1UcnVlKSksCisgICAgXQorICAgIHN1Y2Nlc3Nlc193aGVuX25vdF9yZXF1aXJlZCA9IFsKKyAgICAgICAgKCdYJywgTlMoYT1Ob25lLCBiPUZhbHNlLCBjPUZhbHNlLCB4PSdYJywgeT1GYWxzZSkpLAorICAgICAgICAoJ1ggLXknLCBOUyhhPU5vbmUsIGI9RmFsc2UsIGM9RmFsc2UsIHg9J1gnLCB5PVRydWUpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX3JlcXVpcmVkID0gdXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy15XSBbLWJdIFstY10geCBbYV0KKyAgICAgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICB4ICAgICAgICAgICB4IGhlbHAKKyAgICAgICAgICBhICAgICAgICAgICBhIGhlbHAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC15ICAgICAgICAgIHkgaGVscAorICAgICAgICAgIC1iICAgICAgICAgIGIgaGVscAorICAgICAgICAgIC1jICAgICAgICAgIGMgaGVscAorICAgICAgICAnJycKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIE11dHVhbGx5IGV4Y2x1c2l2ZSBncm91cCBpbiBwYXJlbnQgcGFyc2VyIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgTUVQQmFzZShvYmplY3QpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQ9Tm9uZSk6CisgICAgICAgIHBhcmVudCA9IHN1cGVyKE1FUEJhc2UsIHNlbGYpLmdldF9wYXJzZXIocmVxdWlyZWQ9cmVxdWlyZWQpCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKAorICAgICAgICAgICAgcHJvZz1wYXJlbnQucHJvZywgYWRkX2hlbHA9RmFsc2UsIHBhcmVudHM9W3BhcmVudF0pCisgICAgICAgIHJldHVybiBwYXJzZXIKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVHcm91cEVycm9yc1BhcmVudCgKKyAgICBNRVBCYXNlLCBUZXN0TXV0dWFsbHlFeGNsdXNpdmVHcm91cEVycm9ycyk6CisgICAgcGFzcworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZVNpbXBsZVBhcmVudCgKKyAgICBNRVBCYXNlLCBUZXN0TXV0dWFsbHlFeGNsdXNpdmVTaW1wbGUpOgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVMb25nUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZUxvbmcpOgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVGaXJzdFN1cHByZXNzZWRQYXJlbnQoCisgICAgTUVQQmFzZSwgVGVzdE11dHVhbGx5RXhjbHVzaXZlRmlyc3RTdXBwcmVzc2VkKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlTWFueVN1cHByZXNzZWRQYXJlbnQoCisgICAgTUVQQmFzZSwgVGVzdE11dHVhbGx5RXhjbHVzaXZlTWFueVN1cHByZXNzZWQpOgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVPcHRpb25hbEFuZFBvc2l0aW9uYWxQYXJlbnQoCisgICAgTUVQQmFzZSwgVGVzdE11dHVhbGx5RXhjbHVzaXZlT3B0aW9uYWxBbmRQb3NpdGlvbmFsKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlT3B0aW9uYWxzTWl4ZWRQYXJlbnQoCisgICAgTUVQQmFzZSwgVGVzdE11dHVhbGx5RXhjbHVzaXZlT3B0aW9uYWxzTWl4ZWQpOgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVPcHRpb25hbHNBbmRQb3NpdGlvbmFsc01peGVkUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsc0FuZFBvc2l0aW9uYWxzTWl4ZWQpOgorICAgIHBhc3MKKworIyA9PT09PT09PT09PT09PT09PQorIyBTZXQgZGVmYXVsdCB0ZXN0cworIyA9PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0U2V0RGVmYXVsdHMoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRzX25vX2FyZ3Moc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyh4PSdmb28nKQorICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKHk9J2JhcicsIHo9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PSdmb28nLCB5PSdiYXInLCB6PTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PSdmb28nLCB5PSdiYXInLCB6PTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdLCBOUygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PSdiYXonLCB5PSdiYXInLCB6PTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdLCBOUyh4PSdiYXonKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nYmF6JywgeT0nYmFyJywgej0yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSwgTlMoeD0nYmF6Jywgej0yKSkpCisKKyAgICBkZWYgdGVzdF9zZXRfZGVmYXVsdHNfd2l0aF9hcmdzKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRfZGVmYXVsdHMoeD0nZm9vJywgeT0nYmFyJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCBkZWZhdWx0PSd4Zm9veCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0neGZvb3gnLCB5PSdiYXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0neGZvb3gnLCB5PSdiYXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSwgTlMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nYmF6JywgeT0nYmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10sIE5TKHg9J2JheicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PScxJywgeT0nYmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoJy14IDEnLnNwbGl0KCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9JzEnLCB5PSdiYXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncygnLXggMScuc3BsaXQoKSwgTlMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nMScsIHk9J2JhcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKCcteCAxJy5zcGxpdCgpLCBOUyh4PSdiYXonKSkpCisKKyAgICBkZWYgdGVzdF9zZXRfZGVmYXVsdHNfc3VicGFyc2VycyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKHg9J2ZvbycpCisgICAgICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoKQorICAgICAgICBwYXJzZXJfYSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYScpCisgICAgICAgIHBhcnNlcl9hLnNldF9kZWZhdWx0cyh5PSdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J2ZvbycsIHk9J2JhcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKCdhJy5zcGxpdCgpKSkKKworICAgIGRlZiB0ZXN0X3NldF9kZWZhdWx0c19wYXJlbnRzKHNlbGYpOgorICAgICAgICBwYXJlbnQgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgcGFyZW50LnNldF9kZWZhdWx0cyh4PSdmb28nKQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPVtwYXJlbnRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J2ZvbycpLCBwYXJzZXIucGFyc2VfYXJncyhbXSkpCisKKyAgICBkZWYgdGVzdF9zZXRfZGVmYXVsdHNfc2FtZV9hc19hZGRfYXJndW1lbnQoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyh3PSdXJywgeD0nWCcsIHk9J1knLCB6PSdaJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXcnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsIGRlZmF1bHQ9J1hYJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgneScsIG5hcmdzPSc/JykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgneicsIG5hcmdzPSc/JywgZGVmYXVsdD0nWlonKQorCisgICAgICAgICMgZGVmYXVsdHMgc2V0IHByZXZpb3VzbHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh3PSdXJywgeD0nWFgnLCB5PSdZJywgej0nWlonKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSkpCisKKyAgICAgICAgIyByZXNldCBkZWZhdWx0cworICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKHc9J1dXJywgeD0nWCcsIHk9J1lZJywgej0nWicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlModz0nV1cnLCB4PSdYJywgeT0nWVknLCB6PSdaJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10pKQorCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRzX3NhbWVfYXNfYWRkX2FyZ3VtZW50X2dyb3VwKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRfZGVmYXVsdHModz0nVycsIHg9J1gnLCB5PSdZJywgej0nWicpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnZm9vJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctdycpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXgnLCBkZWZhdWx0PSdYWCcpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgneScsIG5hcmdzPSc/JykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCd6JywgbmFyZ3M9Jz8nLCBkZWZhdWx0PSdaWicpCisKKworICAgICAgICAjIGRlZmF1bHRzIHNldCBwcmV2aW91c2x5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlModz0nVycsIHg9J1hYJywgeT0nWScsIHo9J1paJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10pKQorCisgICAgICAgICMgcmVzZXQgZGVmYXVsdHMKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyh3PSdXVycsIHg9J1gnLCB5PSdZWScsIHo9J1onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHc9J1dXJywgeD0nWCcsIHk9J1lZJywgej0nWicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdKSkKKworIyA9PT09PT09PT09PT09PT09PQorIyBHZXQgZGVmYXVsdCB0ZXN0cworIyA9PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0R2V0RGVmYXVsdChUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9nZXRfZGVmYXVsdChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHBhcnNlci5nZXRfZGVmYXVsdCgiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcGFyc2VyLmdldF9kZWZhdWx0KCJiYXIiKSkKKworICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcGFyc2VyLmdldF9kZWZhdWx0KCJmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBwYXJzZXIuZ2V0X2RlZmF1bHQoImJhciIpKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tYmFyIiwgdHlwZT1pbnQsIGRlZmF1bHQ9NDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcGFyc2VyLmdldF9kZWZhdWx0KCJmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgcGFyc2VyLmdldF9kZWZhdWx0KCJiYXIiKSkKKworICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKGZvbz0iYmFkZ2VyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYmFkZ2VyIiwgcGFyc2VyLmdldF9kZWZhdWx0KCJmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgcGFyc2VyLmdldF9kZWZhdWx0KCJiYXIiKSkKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBOYW1lc3BhY2UgJ2NvbnRhaW5zJyB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0TmFtZXNwYWNlQ29udGFpbnNTaW1wbGUoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIG5zID0gYXJncGFyc2UuTmFtZXNwYWNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJyBpbiBucywgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycgbm90IGluIG5zLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd4JyBpbiBucywgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9ub25fZW1wdHkoc2VsZik6CisgICAgICAgIG5zID0gYXJncGFyc2UuTmFtZXNwYWNlKHg9MSwgeT0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd4JyBpbiBucywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneCcgbm90IGluIG5zLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneScgaW4gbnMsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycgaW4gbnMsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd4eCcgaW4gbnMsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd6JyBpbiBucywgRmFsc2UpCisKKyMgPT09PT09PT09PT09PT09PT09PT09CisjIEhlbHAgZm9ybWF0dGluZyB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEhlbHBGb3JtYXR0aW5nTWV0YWNsYXNzKHR5cGUpOgorCisgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGJvZHlkaWN0KToKKyAgICAgICAgaWYgbmFtZSA9PSAnSGVscFRlc3RDYXNlJzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNsYXNzIEFkZFRlc3RzKG9iamVjdCk6CisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X2NsYXNzLCBmdW5jX3N1ZmZpeCwgc3RkX25hbWUpOgorICAgICAgICAgICAgICAgIHNlbGYuZnVuY19zdWZmaXggPSBmdW5jX3N1ZmZpeAorICAgICAgICAgICAgICAgIHNlbGYuc3RkX25hbWUgPSBzdGRfbmFtZQorCisgICAgICAgICAgICAgICAgZm9yIHRlc3RfZnVuYyBpbiBbc2VsZi50ZXN0X2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RfcHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X3ByaW50X2ZpbGVdOgorICAgICAgICAgICAgICAgICAgICB0ZXN0X25hbWUgPSAnJXNfJXMnICUgKHRlc3RfZnVuYy5fX25hbWVfXywgZnVuY19zdWZmaXgpCisKKyAgICAgICAgICAgICAgICAgICAgZGVmIHRlc3Rfd3JhcHBlcihzZWxmLCB0ZXN0X2Z1bmM9dGVzdF9mdW5jKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZnVuYyhzZWxmKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3dyYXBwZXIuX19uYW1lX18gPSB0ZXN0X25hbWUKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cih0ZXN0X2NsYXNzLCB0ZXN0X25hbWUsIHRlc3Rfd3JhcHBlcikKKworICAgICAgICAgICAgZGVmIF9nZXRfcGFyc2VyKHNlbGYsIHRlc3Rlcik6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAgICAgICAgICAgICAgICAgICp0ZXN0ZXIucGFyc2VyX3NpZ25hdHVyZS5hcmdzLAorICAgICAgICAgICAgICAgICAgICAqKnRlc3Rlci5wYXJzZXJfc2lnbmF0dXJlLmt3YXJncykKKyAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRfc2lnIGluIGdldGF0dHIodGVzdGVyLCAnYXJndW1lbnRfc2lnbmF0dXJlcycsIFtdKToKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgqYXJndW1lbnRfc2lnLmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiphcmd1bWVudF9zaWcua3dhcmdzKQorICAgICAgICAgICAgICAgIGdyb3VwX3NpZ3MgPSBnZXRhdHRyKHRlc3RlciwgJ2FyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMnLCBbXSkKKyAgICAgICAgICAgICAgICBmb3IgZ3JvdXBfc2lnLCBhcmd1bWVudF9zaWdzIGluIGdyb3VwX3NpZ3M6CisgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgqZ3JvdXBfc2lnLmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmdyb3VwX3NpZy5rd2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudF9zaWcgaW4gYXJndW1lbnRfc2lnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgqYXJndW1lbnRfc2lnLmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiphcmd1bWVudF9zaWcua3dhcmdzKQorICAgICAgICAgICAgICAgIHN1YnBhcnNlcnNfc2lncyA9IGdldGF0dHIodGVzdGVyLCAnc3VicGFyc2Vyc19zaWduYXR1cmVzJywgW10pCisgICAgICAgICAgICAgICAgaWYgc3VicGFyc2Vyc19zaWdzOgorICAgICAgICAgICAgICAgICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHN1YnBhcnNlcl9zaWcgaW4gc3VicGFyc2Vyc19zaWdzOgorICAgICAgICAgICAgICAgICAgICAgICAgc3VicGFyc2Vycy5hZGRfcGFyc2VyKCpzdWJwYXJzZXJfc2lnLmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqc3VicGFyc2VyX3NpZy5rd2FyZ3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgICAgICAgICBkZWYgX3Rlc3Qoc2VsZiwgdGVzdGVyLCBwYXJzZXJfdGV4dCk6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGdldGF0dHIodGVzdGVyLCBzZWxmLmZ1bmNfc3VmZml4KQorICAgICAgICAgICAgICAgIGV4cGVjdGVkX3RleHQgPSB0ZXh0d3JhcC5kZWRlbnQoZXhwZWN0ZWRfdGV4dCkKKyAgICAgICAgICAgICAgICBpZiBleHBlY3RlZF90ZXh0ICE9IHBhcnNlcl90ZXh0OgorICAgICAgICAgICAgICAgICAgICBwcmludChyZXByKGV4cGVjdGVkX3RleHQpKQorICAgICAgICAgICAgICAgICAgICBwcmludChyZXByKHBhcnNlcl90ZXh0KSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGNoYXIxLCBjaGFyMiBpbiB6aXAoZXhwZWN0ZWRfdGV4dCwgcGFyc2VyX3RleHQpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hhcjEgIT0gY2hhcjI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2ZpcnN0IGRpZmY6ICVyICVyJyAlIChjaGFyMSwgY2hhcjIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgdGVzdGVyLmFzc2VydEVxdWFsKGV4cGVjdGVkX3RleHQsIHBhcnNlcl90ZXh0KQorCisgICAgICAgICAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZiwgdGVzdGVyKToKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHRlc3RlcikKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSBnZXRhdHRyKHBhcnNlciwgJ2Zvcm1hdF8lcycgJSBzZWxmLmZ1bmNfc3VmZml4KQorICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3QodGVzdGVyLCBmb3JtYXQoKSkKKworICAgICAgICAgICAgZGVmIHRlc3RfcHJpbnQoc2VsZiwgdGVzdGVyKToKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHRlc3RlcikKKyAgICAgICAgICAgICAgICBwcmludF8gPSBnZXRhdHRyKHBhcnNlciwgJ3ByaW50XyVzJyAlIHNlbGYuZnVuY19zdWZmaXgpCisgICAgICAgICAgICAgICAgb2xkX3N0cmVhbSA9IGdldGF0dHIoc3lzLCBzZWxmLnN0ZF9uYW1lKQorICAgICAgICAgICAgICAgIHNldGF0dHIoc3lzLCBzZWxmLnN0ZF9uYW1lLCBTdGRJT0J1ZmZlcigpKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRfKCkKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VyX3RleHQgPSBnZXRhdHRyKHN5cywgc2VsZi5zdGRfbmFtZSkuZ2V0dmFsdWUoKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoc3lzLCBzZWxmLnN0ZF9uYW1lLCBvbGRfc3RyZWFtKQorICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3QodGVzdGVyLCBwYXJzZXJfdGV4dCkKKworICAgICAgICAgICAgZGVmIHRlc3RfcHJpbnRfZmlsZShzZWxmLCB0ZXN0ZXIpOgorICAgICAgICAgICAgICAgIHBhcnNlciA9IHNlbGYuX2dldF9wYXJzZXIodGVzdGVyKQorICAgICAgICAgICAgICAgIHByaW50XyA9IGdldGF0dHIocGFyc2VyLCAncHJpbnRfJXMnICUgc2VsZi5mdW5jX3N1ZmZpeCkKKyAgICAgICAgICAgICAgICBzZmlsZSA9IFN0ZElPQnVmZmVyKCkKKyAgICAgICAgICAgICAgICBwcmludF8oc2ZpbGUpCisgICAgICAgICAgICAgICAgcGFyc2VyX3RleHQgPSBzZmlsZS5nZXR2YWx1ZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fdGVzdCh0ZXN0ZXIsIHBhcnNlcl90ZXh0KQorCisgICAgICAgICMgYWRkIHRlc3RzIGZvciB7Zm9ybWF0LHByaW50fV97dXNhZ2UsaGVscCx2ZXJzaW9ufQorICAgICAgICBmb3IgZnVuY19zdWZmaXgsIHN0ZF9uYW1lIGluIFsoJ3VzYWdlJywgJ3N0ZG91dCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2hlbHAnLCAnc3Rkb3V0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgndmVyc2lvbicsICdzdGRlcnInKV06CisgICAgICAgICAgICBBZGRUZXN0cyhjbHMsIGZ1bmNfc3VmZml4LCBzdGRfbmFtZSkKKworYmFzZXMgPSBUZXN0Q2FzZSwKK0hlbHBUZXN0Q2FzZSA9IFRlc3RIZWxwRm9ybWF0dGluZ01ldGFjbGFzcygnSGVscFRlc3RDYXNlJywgYmFzZXMsIHt9KQorCisKK2NsYXNzIFRlc3RIZWxwQmlnZ2VyT3B0aW9uYWxzKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiTWFrZSBzdXJlIHRoYXQgYXJndW1lbnQgaGVscCBhbGlnbnMgd2hlbiBvcHRpb25zIGFyZSBsb25nZXIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycsIGRlc2NyaXB0aW9uPSdERVNDUklQVElPTicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlcGlsb2c9J0VQSUxPRycsIHZlcnNpb249JzAuMScpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J1ggSEVMUCcpLAorICAgICAgICBTaWcoJy0teScsIGhlbHA9J1kgSEVMUCcpLAorICAgICAgICBTaWcoJ2ZvbycsIGhlbHA9J0ZPTyBIRUxQJyksCisgICAgICAgIFNpZygnYmFyJywgaGVscD0nQkFSIEhFTFAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy12XSBbLXhdIFstLXkgWV0gZm9vIGJhcgorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgREVTQ1JJUFRJT04KKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBmb28gICAgICAgICAgICBGT08gSEVMUAorICAgICAgICAgIGJhciAgICAgICAgICAgIEJBUiBIRUxQCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdiwgLS12ZXJzaW9uICBzaG93IHByb2dyYW0ncyB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdAorICAgICAgICAgIC14ICAgICAgICAgICAgIFggSEVMUAorICAgICAgICAgIC0teSBZICAgICAgICAgIFkgSEVMUAorCisgICAgICAgIEVQSUxPRworICAgICcnJworICAgIHZlcnNpb24gPSAnJydcCisgICAgICAgIDAuMQorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0SGVscEJpZ2dlck9wdGlvbmFsR3JvdXBzKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiTWFrZSBzdXJlIHRoYXQgYXJndW1lbnQgaGVscCBhbGlnbnMgd2hlbiBvcHRpb25zIGFyZSBsb25nZXIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycsIGRlc2NyaXB0aW9uPSdERVNDUklQVElPTicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlcGlsb2c9J0VQSUxPRycsIHZlcnNpb249JzAuMScpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J1ggSEVMUCcpLAorICAgICAgICBTaWcoJy0teScsIGhlbHA9J1kgSEVMUCcpLAorICAgICAgICBTaWcoJ2ZvbycsIGhlbHA9J0ZPTyBIRUxQJyksCisgICAgICAgIFNpZygnYmFyJywgaGVscD0nQkFSIEhFTFAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygnR1JPVVAgVElUTEUnLCBkZXNjcmlwdGlvbj0nR1JPVVAgREVTQ1JJUFRJT04nKSwgWworICAgICAgICAgICAgU2lnKCdiYXonLCBoZWxwPSdCQVogSEVMUCcpLAorICAgICAgICAgICAgU2lnKCcteicsIG5hcmdzPScrJywgaGVscD0nWiBIRUxQJyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy12XSBbLXhdIFstLXkgWV0gWy16IFogW1ogLi4uXV0gZm9vIGJhciBiYXoKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIERFU0NSSVBUSU9OCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgZm9vICAgICAgICAgICAgRk9PIEhFTFAKKyAgICAgICAgICBiYXIgICAgICAgICAgICBCQVIgSEVMUAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXYsIC0tdmVyc2lvbiAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAgICAteCAgICAgICAgICAgICBYIEhFTFAKKyAgICAgICAgICAtLXkgWSAgICAgICAgICBZIEhFTFAKKworICAgICAgICBHUk9VUCBUSVRMRToKKyAgICAgICAgICBHUk9VUCBERVNDUklQVElPTgorCisgICAgICAgICAgYmF6ICAgICAgICAgICAgQkFaIEhFTFAKKyAgICAgICAgICAteiBaIFtaIC4uLl0gICBaIEhFTFAKKworICAgICAgICBFUElMT0cKKyAgICAnJycKKyAgICB2ZXJzaW9uID0gJycnXAorICAgICAgICAwLjEKKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdEhlbHBCaWdnZXJQb3NpdGlvbmFscyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IGhlbHAgYWxpZ25zIHdoZW4gYXJndW1lbnRzIGFyZSBsb25nZXIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcodXNhZ2U9J1VTQUdFJywgZGVzY3JpcHRpb249J0RFU0NSSVBUSU9OJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nWCBIRUxQJyksCisgICAgICAgIFNpZygnLS15JywgaGVscD0nWSBIRUxQJyksCisgICAgICAgIFNpZygnZWtpZWtpZWtpZmVrYW5nJywgaGVscD0nRUtJIEhFTFAnKSwKKyAgICAgICAgU2lnKCdiYXInLCBoZWxwPSdCQVIgSEVMUCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFVTQUdFCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBERVNDUklQVElPTgorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGVraWVraWVraWZla2FuZyAgRUtJIEhFTFAKKyAgICAgICAgICBiYXIgICAgICAgICAgICAgIEJBUiBIRUxQCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14ICAgICAgICAgICAgICAgWCBIRUxQCisgICAgICAgICAgLS15IFkgICAgICAgICAgICBZIEhFTFAKKyAgICAgICAgJycnCisKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFJlZm9ybWF0dGluZyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IHRleHQgYWZ0ZXIgc2hvcnQgbmFtZXMgc3RhcnRzIG9uIHRoZSBmaXJzdCBsaW5lIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKAorICAgICAgICBwcm9nPSdQUk9HJywKKyAgICAgICAgZGVzY3JpcHRpb249JyAgIG9kZGx5ICAgIGZvcm1hdHRlZFxuJworICAgICAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb25cbicKKyAgICAgICAgICAgICAgICAgICAgJ1xuJworICAgICAgICAgICAgICAgICAgICAndGhhdCBpcyBzbyBsb25nIHRoYXQgaXQgc2hvdWxkIGdvIG9udG8gbXVsdGlwbGUgJworICAgICAgICAgICAgICAgICAgICAnbGluZXMgd2hlbiB3cmFwcGVkJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWFgnLCBoZWxwPSdvZGRseVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgZm9ybWF0dGVkIC14IGhlbHAnKSwKKyAgICAgICAgU2lnKCd5JywgbWV0YXZhcj0neXl5JywgaGVscD0nbm9ybWFsIHkgaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCd0aXRsZScsIGRlc2NyaXB0aW9uPSdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIG9kZGx5IGZvcm1hdHRlZCBncm91cFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nKSwKKyAgICAgICAgIFtTaWcoJy1hJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgaGVscD0nIG9kZGx5IFxuJworICAgICAgICAgICAgICAgICAgICdmb3JtYXR0ZWQgICAgLWEgIGhlbHAgIFxuJworICAgICAgICAgICAgICAgICAgICcgICAgYWdhaW4sIHNvIGxvbmcgdGhhdCBpdCBzaG91bGQgYmUgd3JhcHBlZCBvdmVyICcKKyAgICAgICAgICAgICAgICAgICAnbXVsdGlwbGUgbGluZXMnKV0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWFhdIFstYV0geXl5CisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBvZGRseSBmb3JtYXR0ZWQgZGVzY3JpcHRpb24gdGhhdCBpcyBzbyBsb25nIHRoYXQgaXQgc2hvdWxkIGdvIG9udG8gXAorbXVsdGlwbGUKKyAgICAgICAgbGluZXMgd2hlbiB3cmFwcGVkCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgeXl5ICAgICAgICAgbm9ybWFsIHkgaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXggWFggICAgICAgb2RkbHkgZm9ybWF0dGVkIC14IGhlbHAKKworICAgICAgICB0aXRsZToKKyAgICAgICAgICBvZGRseSBmb3JtYXR0ZWQgZ3JvdXAgZGVzY3JpcHRpb24KKworICAgICAgICAgIC1hICAgICAgICAgIG9kZGx5IGZvcm1hdHRlZCAtYSBoZWxwIGFnYWluLCBzbyBsb25nIHRoYXQgaXQgc2hvdWxkIFwKK2JlIHdyYXBwZWQKKyAgICAgICAgICAgICAgICAgICAgICBvdmVyIG11bHRpcGxlIGxpbmVzCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwV3JhcHBpbmdTaG9ydE5hbWVzKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiTWFrZSBzdXJlIHRoYXQgdGV4dCBhZnRlciBzaG9ydCBuYW1lcyBzdGFydHMgb24gdGhlIGZpcnN0IGxpbmUiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycsIGRlc2NyaXB0aW9uPSAnRFxuRCcgKiAzMCkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWFgnLCBoZWxwPSdYSEggSFgnICogMjApLAorICAgICAgICBTaWcoJ3knLCBtZXRhdmFyPSd5eXknLCBoZWxwPSdZSCBZSCcgKiAyMCksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ0FMUEhBUycpLCBbCisgICAgICAgICAgICBTaWcoJy1hJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nQUhISCBISEEnICogMTApXSksCisgICAgXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsteCBYWF0gWy1hXSB5eXkKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIEQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgXAorREQgREQgREQKKyAgICAgICAgREQgREQgREQgREQgRAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHl5eSAgICAgICAgIFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggXAorWUhZSCBZSFlICisgICAgICAgICAgICAgICAgICAgICAgWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXggWFggICAgICAgWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIFwKK0hYWEhIIEhYWEhICisgICAgICAgICAgICAgICAgICAgICAgSFhYSEggSFhYSEggSFhYSEggSFhYSEggSFhYSEggSFhYSEggSFhYSEggSFhYSEggSFhYSEggSFgKKworICAgICAgICBBTFBIQVM6CisgICAgICAgICAgLWEgICAgICAgICAgQUhISCBISEFBSEhIIEhIQUFISEggSEhBQUhISCBISEFBSEhIIEhIQUFISEggSEhBQUhISCBcCitISEFBSEhICisgICAgICAgICAgICAgICAgICAgICAgSEhBQUhISCBISEFBSEhIIEhIQQorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFdyYXBwaW5nTG9uZ05hbWVzKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiTWFrZSBzdXJlIHRoYXQgdGV4dCBhZnRlciBsb25nIG5hbWVzIHN0YXJ0cyBvbiB0aGUgbmV4dCBsaW5lIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHVzYWdlPSdVU0FHRScsIGRlc2NyaXB0aW9uPSAnRCBEJyAqIDMwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj0nViBWJyozMCkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWCcgKiAyNSwgaGVscD0nWEggWEgnICogMjApLAorICAgICAgICBTaWcoJ3knLCBtZXRhdmFyPSd5JyAqIDI1LCBoZWxwPSdZSCBZSCcgKiAyMCksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ0FMUEhBUycpLCBbCisgICAgICAgICAgICBTaWcoJy1hJywgbWV0YXZhcj0nQScgKiAyNSwgaGVscD0nQUggQUgnICogMjApLAorICAgICAgICAgICAgU2lnKCd6JywgbWV0YXZhcj0neicgKiAyNSwgaGVscD0nWkggWkgnICogMjApXSksCisgICAgXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogVVNBR0UKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIEQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgREQgXAorREQgREQgREQKKyAgICAgICAgREQgREQgREQgREQgRAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFwKK1lIWUggWUhZSAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC12LCAtLXZlcnNpb24gICAgICAgICBzaG93IHByb2dyYW0ncyB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdAorICAgICAgICAgIC14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEggWEhYSCBYSFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEhYSCBYSFhIIFwKK1hIWEggWEhYSAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYSFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEhYSCBYSAorCisgICAgICAgIEFMUEhBUzoKKyAgICAgICAgICAtYSBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFIIEFIQUggQUhBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFIQUggQUhBSCBcCitBSEFIIEFIQUgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUhBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFIQUggQUgKKyAgICAgICAgICB6enp6enp6enp6enp6enp6enp6enp6enp6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpIIFpIWkggWkhaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpIWkggWkhaSCBcCitaSFpIIFpIWkgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWkhaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpIWkggWkgKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnJ1wKKyAgICAgICAgViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBWViBcCitWViBWViBWVgorICAgICAgICBWViBWViBWViBWViBWCisgICAgICAgICcnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2UoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGJhc2ljIHVzYWdlIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXcnLCBuYXJncz0nKycsIGhlbHA9J3cnKSwKKyAgICAgICAgU2lnKCcteCcsIG5hcmdzPScqJywgaGVscD0neCcpLAorICAgICAgICBTaWcoJ2EnLCBoZWxwPSdhJyksCisgICAgICAgIFNpZygnYicsIGhlbHA9J2InLCBuYXJncz0yKSwKKyAgICAgICAgU2lnKCdjJywgaGVscD0nYycsIG5hcmdzPSc/JyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ2dyb3VwJyksIFsKKyAgICAgICAgICAgIFNpZygnLXknLCBuYXJncz0nPycsIGhlbHA9J3knKSwKKyAgICAgICAgICAgIFNpZygnLXonLCBuYXJncz0zLCBoZWxwPSd6JyksCisgICAgICAgICAgICBTaWcoJ2QnLCBoZWxwPSdkJywgbmFyZ3M9JyonKSwKKyAgICAgICAgICAgIFNpZygnZScsIGhlbHA9J2UnLCBuYXJncz0nKycpLAorICAgICAgICBdKQorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXcgVyBbVyAuLi5dXSBbLXggW1ggW1ggLi4uXV1dIFsteSBbWV1dIFsteiBaIFogWl0KKyAgICAgICAgICAgICAgICAgICAgYSBiIGIgW2NdIFtkIFtkIC4uLl1dIGUgW2UgLi4uXQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgYSAgICAgICAgICAgICAgIGEKKyAgICAgICAgICBiICAgICAgICAgICAgICAgYgorICAgICAgICAgIGMgICAgICAgICAgICAgICBjCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXcgVyBbVyAuLi5dICAgIHcKKyAgICAgICAgICAteCBbWCBbWCAuLi5dXSAgeAorCisgICAgICAgIGdyb3VwOgorICAgICAgICAgIC15IFtZXSAgICAgICAgICB5CisgICAgICAgICAgLXogWiBaIFogICAgICAgIHoKKyAgICAgICAgICBkICAgICAgICAgICAgICAgZAorICAgICAgICAgIGUgICAgICAgICAgICAgICBlCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwT25seVVzZXJHcm91cHMoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGJhc2ljIHVzYWdlIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW10KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCd4eHh4JyksIFsKKyAgICAgICAgICAgIFNpZygnLXgnLCBoZWxwPSd4JyksCisgICAgICAgICAgICBTaWcoJ2EnLCBoZWxwPSdhJyksCisgICAgICAgIF0pLAorICAgICAgICAoU2lnKCd5eXl5JyksIFsKKyAgICAgICAgICAgIFNpZygnYicsIGhlbHA9J2InKSwKKyAgICAgICAgICAgIFNpZygnLXknLCBoZWxwPSd5JyksCisgICAgICAgIF0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy14IFhdIFsteSBZXSBhIGIKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHh4eHg6CisgICAgICAgICAgLXggWCAgeAorICAgICAgICAgIGEgICAgIGEKKworICAgICAgICB5eXl5OgorICAgICAgICAgIGIgICAgIGIKKyAgICAgICAgICAteSBZICB5CisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2VMb25nUHJvZyhIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlIHByb2cgaXMgbG9uZyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQJyAqIDYwKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXcnLCBtZXRhdmFyPSdXJyksCisgICAgICAgIFNpZygnLXgnLCBtZXRhdmFyPSdYJyksCisgICAgICAgIFNpZygnYScpLAorICAgICAgICBTaWcoJ2InKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAKKyAgICAgICAgICAgICAgIFstaF0gWy13IFddIFsteCBYXSBhIGIKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGEKKyAgICAgICAgICBiCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdyBXCisgICAgICAgICAgLXggWAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlTG9uZ1Byb2dPcHRpb25zV3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlIHByb2cgaXMgbG9uZyBhbmQgdGhlIG9wdGlvbmFscyB3cmFwIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1AnICogNjApCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctdycsIG1ldGF2YXI9J1cnICogMjUpLAorICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWCcgKiAyNSksCisgICAgICAgIFNpZygnLXknLCBtZXRhdmFyPSdZJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteicsIG1ldGF2YXI9J1onICogMjUpLAorICAgICAgICBTaWcoJ2EnKSwKKyAgICAgICAgU2lnKCdiJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQCisgICAgICAgICAgICAgICBbLWhdIFstdyBXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXXSBcCitbLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF0KKyAgICAgICAgICAgICAgIFsteSBZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZXSBbLXogWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWl0KKyAgICAgICAgICAgICAgIGEgYgorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgYQorICAgICAgICAgIGIKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdyBXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXCisgICAgICAgICAgLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorICAgICAgICAgIC15IFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVkKKyAgICAgICAgICAteiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2VMb25nUHJvZ1Bvc2l0aW9uYWxzV3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlIHByb2cgaXMgbG9uZyBhbmQgdGhlIHBvc2l0aW9uYWxzIHdyYXAiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUCcgKiA2MCwgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdhJyAqIDI1KSwKKyAgICAgICAgU2lnKCdiJyAqIDI1KSwKKyAgICAgICAgU2lnKCdjJyAqIDI1KSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAKKyAgICAgICAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgICAgICAgY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorICAgICAgICAgIGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIKKyAgICAgICAgICBjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2VPcHRpb25hbHNXcmFwKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1c2FnZSBtZXNzYWdlcyB3aGVyZSB0aGUgb3B0aW9uYWxzIHdyYXAiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctdycsIG1ldGF2YXI9J1cnICogMjUpLAorICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWCcgKiAyNSksCisgICAgICAgIFNpZygnLXknLCBtZXRhdmFyPSdZJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteicsIG1ldGF2YXI9J1onICogMjUpLAorICAgICAgICBTaWcoJ2EnKSwKKyAgICAgICAgU2lnKCdiJyksCisgICAgICAgIFNpZygnYycpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXcgV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV10gXAorWy14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhdCisgICAgICAgICAgICAgICAgICAgIFsteSBZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZXSBcCitbLXogWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWl0KKyAgICAgICAgICAgICAgICAgICAgYSBiIGMKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGEKKyAgICAgICAgICBiCisgICAgICAgICAgYworCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC13IFdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1cKKyAgICAgICAgICAteCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCisgICAgICAgICAgLXkgWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWQorICAgICAgICAgIC16IFpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWloKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBVc2FnZVBvc2l0aW9uYWxzV3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlIHBvc2l0aW9uYWxzIHdyYXAiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcpLAorICAgICAgICBTaWcoJy15JyksCisgICAgICAgIFNpZygnLXonKSwKKyAgICAgICAgU2lnKCdhJyAqIDI1KSwKKyAgICAgICAgU2lnKCdiJyAqIDI1KSwKKyAgICAgICAgU2lnKCdjJyAqIDI1KSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFhdIFsteSBZXSBbLXogWl0KKyAgICAgICAgICAgICAgICAgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSBiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiCisgICAgICAgICAgICAgICAgICAgIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAgICAgICAgICBiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiCisgICAgICAgICAgY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14IFgKKyAgICAgICAgICAteSBZCisgICAgICAgICAgLXogWgorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlT3B0aW9uYWxzUG9zaXRpb25hbHNXcmFwKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1c2FnZSBtZXNzYWdlcyB3aGVyZSB0aGUgb3B0aW9uYWxzIGFuZCBwb3NpdGlvbmFscyB3cmFwIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCBtZXRhdmFyPSdYJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteScsIG1ldGF2YXI9J1knICogMjUpLAorICAgICAgICBTaWcoJy16JywgbWV0YXZhcj0nWicgKiAyNSksCisgICAgICAgIFNpZygnYScgKiAyNSksCisgICAgICAgIFNpZygnYicgKiAyNSksCisgICAgICAgIFNpZygnYycgKiAyNSksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsteCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYXSBcCitbLXkgWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV0KKyAgICAgICAgICAgICAgICAgICAgWy16IFpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpdCisgICAgICAgICAgICAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgICAgICAgICAgICBjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgICAgICAgICAgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAteCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCisgICAgICAgICAgLXkgWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWQorICAgICAgICAgIC16IFpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWloKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBVc2FnZU9wdGlvbmFsc09ubHlXcmFwKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1c2FnZSBtZXNzYWdlcyB3aGVyZSB0aGVyZSBhcmUgb25seSBvcHRpb25hbHMgYW5kIHRoZXkgd3JhcCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWCcgKiAyNSksCisgICAgICAgIFNpZygnLXknLCBtZXRhdmFyPSdZJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteicsIG1ldGF2YXI9J1onICogMjUpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF0gXAorWy15IFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVldCisgICAgICAgICAgICAgICAgICAgIFsteiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaXQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorICAgICAgICAgIC15IFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVkKKyAgICAgICAgICAteiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2VQb3NpdGlvbmFsc09ubHlXcmFwKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1c2FnZSBtZXNzYWdlcyB3aGVyZSB0aGVyZSBhcmUgb25seSBwb3NpdGlvbmFscyBhbmQgdGhleSB3cmFwIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ2EnICogMjUpLAorICAgICAgICBTaWcoJ2InICogMjUpLAorICAgICAgICBTaWcoJ2MnICogMjUpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSBiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiCisgICAgICAgICAgICAgICAgICAgIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAgICAgICAgICBiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiCisgICAgICAgICAgY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFZhcmlhYmxlRXhwYW5zaW9uKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgcHJvcGVybHkgaW4gaGVscCBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgdHlwZT1pbnQsCisgICAgICAgICAgICBoZWxwPSd4ICUocHJvZylzICUoZGVmYXVsdClzICUodHlwZSlzICUlJyksCisgICAgICAgIFNpZygnLXknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgZGVmYXVsdD00MiwgY29uc3Q9J1hYWCcsCisgICAgICAgICAgICBoZWxwPSd5ICUocHJvZylzICUoZGVmYXVsdClzICUoY29uc3QpcycpLAorICAgICAgICBTaWcoJy0tZm9vJywgY2hvaWNlcz0nYWJjJywKKyAgICAgICAgICAgIGhlbHA9J2ZvbyAlKHByb2cpcyAlKGRlZmF1bHQpcyAlKGNob2ljZXMpcycpLAorICAgICAgICBTaWcoJy0tYmFyJywgZGVmYXVsdD0nYmF6JywgY2hvaWNlcz1bMSwgMl0sIG1ldGF2YXI9J0JCQicsCisgICAgICAgICAgICBoZWxwPSdiYXIgJShwcm9nKXMgJShkZWZhdWx0KXMgJShkZXN0KXMnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSAlKHByb2cpcyAlKGRlZmF1bHQpcycpLAorICAgICAgICBTaWcoJ2JhZGdlcicsIGRlZmF1bHQ9MC41LCBoZWxwPSdiYWRnZXIgJShwcm9nKXMgJShkZWZhdWx0KXMnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygnZ3JvdXAnKSwgWworICAgICAgICAgICAgU2lnKCctYScsIGhlbHA9J2EgJShwcm9nKXMgJShkZWZhdWx0KXMnKSwKKyAgICAgICAgICAgIFNpZygnLWInLCBkZWZhdWx0PS0xLCBoZWxwPSdiICUocHJvZylzICUoZGVmYXVsdClzJyksCisgICAgICAgIF0pCisgICAgXQorICAgIHVzYWdlID0gKCcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWF0gWy15XSBbLS1mb28ge2EsYixjfV0gWy0tYmFyIEJCQl0gWy1hIEFdIFstYiBCXQorICAgICAgICAgICAgICAgICAgICBzcGFtIGJhZGdlcgorICAgICAgICAnJycpCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgICAgIHNwYW0gUFJPRyBOb25lCisgICAgICAgICAgYmFkZ2VyICAgICAgICAgYmFkZ2VyIFBST0cgMC41CisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAteCBYICAgICAgICAgICB4IFBST0cgTm9uZSBpbnQgJQorICAgICAgICAgIC15ICAgICAgICAgICAgIHkgUFJPRyA0MiBYWFgKKyAgICAgICAgICAtLWZvbyB7YSxiLGN9ICBmb28gUFJPRyBOb25lIGEsIGIsIGMKKyAgICAgICAgICAtLWJhciBCQkIgICAgICBiYXIgUFJPRyBiYXogYmFyCisKKyAgICAgICAgZ3JvdXA6CisgICAgICAgICAgLWEgQSAgICAgICAgICAgYSBQUk9HIE5vbmUKKyAgICAgICAgICAtYiBCICAgICAgICAgICBiIFBST0cgLTEKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBWYXJpYWJsZUV4cGFuc2lvblVzYWdlU3VwcGxpZWQoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCBwcm9wZXJseSB3aGVuIHVzYWdlPSBpcyBwcmVzZW50IiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCB1c2FnZT0nJShwcm9nKXMgRk9PJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW10KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICgnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIEZPTworICAgICAgICAnJycpCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVmFyaWFibGVFeHBhbnNpb25Ob0FyZ3VtZW50cyhIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHByb3Blcmx5IHdpdGggbm8gYXJndW1lbnRzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW10KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICgnJydcCisgICAgICAgIHVzYWdlOiBQUk9HCisgICAgICAgICcnJykKKyAgICBoZWxwID0gdXNhZ2UKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFN1cHByZXNzVXNhZ2UoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgaXRlbXMgY2FuIGJlIHN1cHByZXNzZWQgaW4gdXNhZ2UgbWVzc2FnZXMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycsIHVzYWdlPWFyZ3BhcnNlLlNVUFBSRVNTKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nLCBoZWxwPSdmb28gaGVscCcpLAorICAgICAgICBTaWcoJ3NwYW0nLCBoZWxwPSdzcGFtIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgaGVscCA9ICcnJ1wKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgICAgICAgc3BhbSBoZWxwCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08gICBmb28gaGVscAorICAgICAgICAnJycKKyAgICB1c2FnZSA9ICcnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBTdXBwcmVzc09wdGlvbmFsKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IG9wdGlvbmFsIGFyZ3VtZW50cyBjYW4gYmUgc3VwcHJlc3NlZCBpbiBoZWxwIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD1hcmdwYXJzZS5TVVBQUkVTUyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgc3BhbQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgc3BhbSBoZWxwCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwU3VwcHJlc3NPcHRpb25hbEdyb3VwKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IG9wdGlvbmFsIGdyb3VwcyBjYW4gYmUgc3VwcHJlc3NlZCBpbiBoZWxwIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nLCBoZWxwPSdmb28gaGVscCcpLAorICAgICAgICBTaWcoJ3NwYW0nLCBoZWxwPSdzcGFtIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygnZ3JvdXAnKSwgW1NpZygnLS1iYXInLCBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKV0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXSBzcGFtCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBzcGFtICAgICAgICBzcGFtIGhlbHAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vIEZPTyAgIGZvbyBoZWxwCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwU3VwcHJlc3NQb3NpdGlvbmFsKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHBvc2l0aW9uYWwgYXJndW1lbnRzIGNhbiBiZSBzdXBwcmVzc2VkIGluIGhlbHAgbWVzc2FnZXMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9J2ZvbyBoZWxwJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08gICBmb28gaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFJlcXVpcmVkT3B0aW9uYWwoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgcmVxdWlyZWQgb3B0aW9ucyBkb24ndCBsb29rIG9wdGlvbmFsIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nLCByZXF1aXJlZD1UcnVlLCBoZWxwPSdmb28gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSAtLWZvbyBGT08KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1mb28gRk9PICAgZm9vIGhlbHAKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBBbHRlcm5hdGVQcmVmaXhDaGFycyhIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBvcHRpb25zIGRpc3BsYXkgd2l0aCBkaWZmZXJlbnQgcHJlZml4IGNoYXJhY3RlcnMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycsIHByZWZpeF9jaGFycz0nXjsnLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ15eZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nZm9vIGhlbHAnKSwKKyAgICAgICAgU2lnKCc7YicsICc7O2JhcicsIGhlbHA9J2JhciBoZWxwJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbXl5mb29dIFs7YiBCQVJdCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgXl5mb28gICAgICAgICAgICAgIGZvbyBoZWxwCisgICAgICAgICAgO2IgQkFSLCA7O2JhciBCQVIgIGJhciBoZWxwCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwTm9IZWxwT3B0aW9uYWwoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgdGhlIC0taGVscCBhcmd1bWVudCBjYW4gYmUgc3VwcHJlc3NlZCBoZWxwIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSBoZWxwJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLS1mb28gRk9PXSBzcGFtCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBzcGFtICAgICAgIHNwYW0gaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtLWZvbyBGT08gIGZvbyBoZWxwCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVmVyc2lvbk9wdGlvbmFsKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHRoZSAtLXZlcnNpb24gYXJndW1lbnQgY2FuIGJlIHN1cHByZXNzZWQgaGVscCBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgdmVyc2lvbj0nMS4wJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSBoZWxwJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstdl0gWy0tZm9vIEZPT10gc3BhbQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgICAgICAgICAgc3BhbSBoZWxwCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdiwgLS12ZXJzaW9uICBzaG93IHByb2dyYW0ncyB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vIEZPTyAgICAgIGZvbyBoZWxwCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJydcCisgICAgICAgIDEuMAorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0SGVscE5vbmUoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgbm8gZXJyb3JzIG9jY3VyIGlmIG5vIGhlbHAgaXMgc3BlY2lmaWVkIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nKSwKKyAgICAgICAgU2lnKCdzcGFtJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyBGT09dIHNwYW0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0KKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vIEZPTworICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFR1cGxlTWV0YXZhcihIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3Qgc3BlY2lmeWluZyBtZXRhdmFyIGFzIGEgdHVwbGUiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctdycsIGhlbHA9J3cnLCBuYXJncz0nKycsIG1ldGF2YXI9KCdXMScsICdXMicpKSwKKyAgICAgICAgU2lnKCcteCcsIGhlbHA9J3gnLCBuYXJncz0nKicsIG1ldGF2YXI9KCdYMScsICdYMicpKSwKKyAgICAgICAgU2lnKCcteScsIGhlbHA9J3knLCBuYXJncz0zLCBtZXRhdmFyPSgnWTEnLCAnWTInLCAnWTMnKSksCisgICAgICAgIFNpZygnLXonLCBoZWxwPSd6JywgbmFyZ3M9Jz8nLCBtZXRhdmFyPSgnWjEnLCApKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy13IFcxIFtXMiAuLi5dXSBbLXggW1gxIFtYMiAuLi5dXV0gWy15IFkxIFkyIFkzXSBcCitbLXogW1oxXV0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXcgVzEgW1cyIC4uLl0gICAgdworICAgICAgICAgIC14IFtYMSBbWDIgLi4uXV0gIHgKKyAgICAgICAgICAteSBZMSBZMiBZMyAgICAgICB5CisgICAgICAgICAgLXogW1oxXSAgICAgICAgICAgegorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFJhd1RleHQoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBSYXdUZXh0SGVscEZvcm1hdHRlciIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZygKKyAgICAgICAgcHJvZz0nUFJPRycsIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdUZXh0SGVscEZvcm1hdHRlciwKKyAgICAgICAgZGVzY3JpcHRpb249J0tlZXAgdGhlIGZvcm1hdHRpbmdcbicKKyAgICAgICAgICAgICAgICAgICAgJyAgICBleGFjdGx5IGFzIGl0IGlzIHdyaXR0ZW5cbicKKyAgICAgICAgICAgICAgICAgICAgJ1xuJworICAgICAgICAgICAgICAgICAgICAnaGVyZVxuJykKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nLCBoZWxwPScgICAgZm9vIGhlbHAgc2hvdWxkIGFsc29cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGVhciBhcyBnaXZlbiBoZXJlJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCd0aXRsZScsIGRlc2NyaXB0aW9uPScgICAgVGhpcyB0ZXh0XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgc2hvdWxkIGJlIGluZGVudGVkXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBleGFjdGx5IGxpa2UgaXQgaXMgaGVyZVxuJyksCisgICAgICAgICBbU2lnKCctLWJhcicsIGhlbHA9J2JhciBoZWxwJyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10gWy0tYmFyIEJBUl0gc3BhbQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgS2VlcCB0aGUgZm9ybWF0dGluZworICAgICAgICAgICAgZXhhY3RseSBhcyBpdCBpcyB3cml0dGVuCisKKyAgICAgICAgaGVyZQorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgIHNwYW0gaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1mb28gRk9PICAgICAgIGZvbyBoZWxwIHNob3VsZCBhbHNvCisgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyIGFzIGdpdmVuIGhlcmUKKworICAgICAgICB0aXRsZToKKyAgICAgICAgICAgICAgVGhpcyB0ZXh0CisgICAgICAgICAgICBzaG91bGQgYmUgaW5kZW50ZWQKKyAgICAgICAgICAgICAgZXhhY3RseSBsaWtlIGl0IGlzIGhlcmUKKworICAgICAgICAgIC0tYmFyIEJBUiAgIGJhciBoZWxwCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwUmF3RGVzY3JpcHRpb24oSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBSYXdUZXh0SGVscEZvcm1hdHRlciIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZygKKyAgICAgICAgcHJvZz0nUFJPRycsIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXIsCisgICAgICAgIGRlc2NyaXB0aW9uPSdLZWVwIHRoZSBmb3JtYXR0aW5nXG4nCisgICAgICAgICAgICAgICAgICAgICcgICAgZXhhY3RseSBhcyBpdCBpcyB3cml0dGVuXG4nCisgICAgICAgICAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICAgICAgICAgJ2hlcmVcbicpCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nICBmb28gaGVscCBzaG91bGQgbm90XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgcmV0YWluIHRoaXMgb2RkIGZvcm1hdHRpbmcnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSBoZWxwJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ3RpdGxlJywgZGVzY3JpcHRpb249JyAgICBUaGlzIHRleHRcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBzaG91bGQgYmUgaW5kZW50ZWRcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGV4YWN0bHkgbGlrZSBpdCBpcyBoZXJlXG4nKSwKKyAgICAgICAgIFtTaWcoJy0tYmFyJywgaGVscD0nYmFyIGhlbHAnKV0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXSBbLS1iYXIgQkFSXSBzcGFtCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBLZWVwIHRoZSBmb3JtYXR0aW5nCisgICAgICAgICAgICBleGFjdGx5IGFzIGl0IGlzIHdyaXR0ZW4KKworICAgICAgICBoZXJlCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgICAgICAgc3BhbSBoZWxwCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08gICBmb28gaGVscCBzaG91bGQgbm90IHJldGFpbiB0aGlzIG9kZCBmb3JtYXR0aW5nCisKKyAgICAgICAgdGl0bGU6CisgICAgICAgICAgICAgIFRoaXMgdGV4dAorICAgICAgICAgICAgc2hvdWxkIGJlIGluZGVudGVkCisgICAgICAgICAgICAgIGV4YWN0bHkgbGlrZSBpdCBpcyBoZXJlCisKKyAgICAgICAgICAtLWJhciBCQVIgICBiYXIgaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscEFyZ3VtZW50RGVmYXVsdHMoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBBcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlciIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZygKKyAgICAgICAgcHJvZz0nUFJPRycsIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlciwKKyAgICAgICAgZGVzY3JpcHRpb249J2Rlc2NyaXB0aW9uJykKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nLCBoZWxwPSdmb28gaGVscCAtIG9oIGFuZCBieSB0aGUgd2F5LCAlKGRlZmF1bHQpcycpLAorICAgICAgICBTaWcoJy0tYmFyJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nYmFyIGhlbHAnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSBoZWxwJyksCisgICAgICAgIFNpZygnYmFkZ2VyJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PSd3b29kZW4nLCBoZWxwPSdiYWRnZXIgaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCd0aXRsZScsIGRlc2NyaXB0aW9uPSdkZXNjcmlwdGlvbicpLAorICAgICAgICAgW1NpZygnLS1iYXonLCB0eXBlPWludCwgZGVmYXVsdD00MiwgaGVscD0nYmF6IGhlbHAnKV0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXSBbLS1iYXJdIFstLWJheiBCQVpdIHNwYW0gW2JhZGdlcl0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIGRlc2NyaXB0aW9uCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgICAgICAgc3BhbSBoZWxwCisgICAgICAgICAgYmFkZ2VyICAgICAgYmFkZ2VyIGhlbHAgKGRlZmF1bHQ6IHdvb2RlbikKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vIEZPTyAgIGZvbyBoZWxwIC0gb2ggYW5kIGJ5IHRoZSB3YXksIE5vbmUKKyAgICAgICAgICAtLWJhciAgICAgICBiYXIgaGVscCAoZGVmYXVsdDogRmFsc2UpCisKKyAgICAgICAgdGl0bGU6CisgICAgICAgICAgZGVzY3JpcHRpb24KKworICAgICAgICAgIC0tYmF6IEJBWiAgIGJheiBoZWxwIChkZWZhdWx0OiA0MikKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKK2NsYXNzIFRlc3RIZWxwVmVyc2lvbkFjdGlvbihIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhlIGRlZmF1bHQgaGVscCBmb3IgdGhlIHZlcnNpb24gYWN0aW9uIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0nZGVzY3JpcHRpb24nKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctVicsICctLXZlcnNpb24nLCBhY3Rpb249J3ZlcnNpb24nLCB2ZXJzaW9uPSczLjYnKV0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLVZdCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBkZXNjcmlwdGlvbgorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLVYsIC0tdmVyc2lvbiAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKK2NsYXNzIFRlc3RIZWxwU3VicGFyc2Vyc09yZGVyaW5nKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBvcmRlcmluZyBvZiBzdWJjb21tYW5kcyBpbiBoZWxwIG1hdGNoZXMgdGhlIGNvZGUiIiIKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2Rpc3BsYXkgc29tZSBzdWJjb21tYW5kcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPScwLjEnKQorCisgICAgc3VicGFyc2Vyc19zaWduYXR1cmVzID0gW1NpZyhuYW1lPW5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuYW1lIGluICgnYScsICdiJywgJ2MnLCAnZCcsICdlJyldCisKKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXZdIHthLGIsYyxkLGV9IC4uLgorICAgICAgICAnJycKKworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBkaXNwbGF5IHNvbWUgc3ViY29tbWFuZHMKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICB7YSxiLGMsZCxlfQorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXYsIC0tdmVyc2lvbiAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAgJycnCisKKyAgICB2ZXJzaW9uID0gJycnXAorICAgICAgICAwLjEKKyAgICAgICAgJycnCisKK2NsYXNzIFRlc3RIZWxwU3VicGFyc2Vyc1dpdGhIZWxwT3JkZXJpbmcoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IG9yZGVyaW5nIG9mIHN1YmNvbW1hbmRzIGluIGhlbHAgbWF0Y2hlcyB0aGUgY29kZSIiIgorICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nZGlzcGxheSBzb21lIHN1YmNvbW1hbmRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb249JzAuMScpCisKKyAgICBzdWJjb21tYW5kX2RhdGEgPSAoKCdhJywgJ2Egc3ViY29tbWFuZCBoZWxwJyksCisgICAgICAgICAgICAgICAgICAgICAgICgnYicsICdiIHN1YmNvbW1hbmQgaGVscCcpLAorICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAnYyBzdWJjb21tYW5kIGhlbHAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKCdkJywgJ2Qgc3ViY29tbWFuZCBoZWxwJyksCisgICAgICAgICAgICAgICAgICAgICAgICgnZScsICdlIHN1YmNvbW1hbmQgaGVscCcpLAorICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICBzdWJwYXJzZXJzX3NpZ25hdHVyZXMgPSBbU2lnKG5hbWU9bmFtZSwgaGVscD1oZWxwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSwgaGVscCBpbiBzdWJjb21tYW5kX2RhdGFdCisKKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXZdIHthLGIsYyxkLGV9IC4uLgorICAgICAgICAnJycKKworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBkaXNwbGF5IHNvbWUgc3ViY29tbWFuZHMKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICB7YSxiLGMsZCxlfQorICAgICAgICAgICAgYSAgICAgICAgICAgIGEgc3ViY29tbWFuZCBoZWxwCisgICAgICAgICAgICBiICAgICAgICAgICAgYiBzdWJjb21tYW5kIGhlbHAKKyAgICAgICAgICAgIGMgICAgICAgICAgICBjIHN1YmNvbW1hbmQgaGVscAorICAgICAgICAgICAgZCAgICAgICAgICAgIGQgc3ViY29tbWFuZCBoZWxwCisgICAgICAgICAgICBlICAgICAgICAgICAgZSBzdWJjb21tYW5kIGhlbHAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC12LCAtLXZlcnNpb24gIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0CisgICAgICAgICcnJworCisgICAgdmVyc2lvbiA9ICcnJ1wKKyAgICAgICAgMC4xCisgICAgICAgICcnJworCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBPcHRpb25hbC9Qb3NpdGlvbmFsIGNvbnN0cnVjdG9yIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEludmFsaWRBcmd1bWVudENvbnN0cnVjdG9ycyhUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIGJ1bmNoIG9mIGludmFsaWQgQXJndW1lbnQgY29uc3RydWN0b3JzIiIiCisKKyAgICBkZWYgYXNzZXJ0VHlwZUVycm9yKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwYXJzZXIuYWRkX2FyZ3VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgYXNzZXJ0VmFsdWVFcnJvcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBhcnNlci5hZGRfYXJndW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfa2V5d29yZF9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCcteCcsIGJhcj1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignLXknLCBjYWxsYmFjaz0nZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJy15JywgY2FsbGJhY2tfYXJncz0oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJy15JywgY2FsbGJhY2tfa3dhcmdzPXt9KQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19kZXN0aW5hdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoKQorICAgICAgICBmb3IgYWN0aW9uIGluIFsnYXBwZW5kJywgJ3N0b3JlJ106CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcihhY3Rpb249YWN0aW9uKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9vcHRpb25fc3RyaW5ncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCctLScpCisgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignLS0tJykKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfdHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCctLWZvbycsIHR5cGU9J2ludCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignLS1mb28nLCB0eXBlPShpbnQsIGZsb2F0KSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfYWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFZhbHVlRXJyb3IoJy14JywgYWN0aW9uPSdmb28nKQorICAgICAgICBzZWxmLmFzc2VydFZhbHVlRXJyb3IoJ2ZvbycsIGFjdGlvbj0nYmF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCctLWZvbycsIGFjdGlvbj0oJ3N0b3JlJywgJ2FwcGVuZCcpKQorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tZm9vIiwgYWN0aW9uPSJzdG9yZS10cnVlIikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgIGV4cGVjdGVkID0gJ3Vua25vd24gYWN0aW9uJworICAgICAgICAgICAgbXNnID0gJ2V4cGVjdGVkICVyLCBmb3VuZCAlcicgJSAoZXhwZWN0ZWQsIGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWQgaW4gc3RyKGUpLCBtc2cpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9kZXN0KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoZGVzdD0nZm9vJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgZGVzdD0nYmF6JykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgIGV4cGVjdGVkID0gJ2Rlc3Qgc3VwcGxpZWQgdHdpY2UgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQnCisgICAgICAgICAgICBtc2cgPSAnZXhwZWN0ZWQgJXIsIGZvdW5kICVyJyAlIChleHBlY3RlZCwgZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZCBpbiBzdHIoZSksIG1zZykKKworICAgIGRlZiB0ZXN0X25vX2FyZ3VtZW50X2FjdGlvbnMoc2VsZik6CisgICAgICAgIGZvciBhY3Rpb24gaW4gWydzdG9yZV9jb25zdCcsICdzdG9yZV90cnVlJywgJ3N0b3JlX2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGVuZF9jb25zdCcsICdjb3VudCddOgorICAgICAgICAgICAgZm9yIGF0dHJzIGluIFtkaWN0KHR5cGU9aW50KSwgZGljdChuYXJncz0nKycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0KGNob2ljZXM9J2FiJyldOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCcteCcsIGFjdGlvbj1hY3Rpb24sICoqYXR0cnMpCisKKyAgICBkZWYgdGVzdF9ub19hcmd1bWVudF9ub19jb25zdF9hY3Rpb25zKHNlbGYpOgorICAgICAgICAjIG9wdGlvbnMgd2l0aCB6ZXJvIGFyZ3VtZW50cworICAgICAgICBmb3IgYWN0aW9uIGluIFsnc3RvcmVfdHJ1ZScsICdzdG9yZV9mYWxzZScsICdjb3VudCddOgorCisgICAgICAgICAgICAjIGNvbnN0IGlzIGFsd2F5cyBkaXNhbGxvd2VkCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignLXgnLCBjb25zdD0nZm9vJywgYWN0aW9uPWFjdGlvbikKKworICAgICAgICAgICAgIyBuYXJncyBpcyBhbHdheXMgZGlzYWxsb3dlZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJy14JywgbmFyZ3M9JyonLCBhY3Rpb249YWN0aW9uKQorCisgICAgZGVmIHRlc3RfbW9yZV90aGFuX29uZV9hcmd1bWVudF9hY3Rpb25zKHNlbGYpOgorICAgICAgICBmb3IgYWN0aW9uIGluIFsnc3RvcmUnLCAnYXBwZW5kJ106CisKKyAgICAgICAgICAgICMgbmFyZ3M9MCBpcyBkaXNhbGxvd2VkCisgICAgICAgICAgICBzZWxmLmFzc2VydFZhbHVlRXJyb3IoJy14JywgbmFyZ3M9MCwgYWN0aW9uPWFjdGlvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignc3BhbScsIG5hcmdzPTAsIGFjdGlvbj1hY3Rpb24pCisKKyAgICAgICAgICAgICMgY29uc3QgaXMgZGlzYWxsb3dlZCB3aXRoIG5vbi1vcHRpb25hbCBhcmd1bWVudHMKKyAgICAgICAgICAgIGZvciBuYXJncyBpbiBbMSwgJyonLCAnKyddOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignLXgnLCBjb25zdD0nZm9vJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9bmFyZ3MsIGFjdGlvbj1hY3Rpb24pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCdzcGFtJywgY29uc3Q9J2ZvbycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcmdzPW5hcmdzLCBhY3Rpb249YWN0aW9uKQorCisgICAgZGVmIHRlc3RfcmVxdWlyZWRfY29uc3RfYWN0aW9ucyhzZWxmKToKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBbJ3N0b3JlX2NvbnN0JywgJ2FwcGVuZF9jb25zdCddOgorCisgICAgICAgICAgICAjIG5hcmdzIGlzIGFsd2F5cyBkaXNhbGxvd2VkCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignLXgnLCBuYXJncz0nKycsIGFjdGlvbj1hY3Rpb24pCisKKyAgICBkZWYgdGVzdF9wYXJzZXJzX2FjdGlvbl9taXNzaW5nX3BhcmFtcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJ2NvbW1hbmQnLCBhY3Rpb249J3BhcnNlcnMnKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignY29tbWFuZCcsIGFjdGlvbj0ncGFyc2VycycsIHByb2c9J1BST0cnKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignY29tbWFuZCcsIGFjdGlvbj0ncGFyc2VycycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcl9jbGFzcz1hcmdwYXJzZS5Bcmd1bWVudFBhcnNlcikKKworICAgIGRlZiB0ZXN0X3JlcXVpcmVkX3Bvc2l0aW9uYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCdmb28nLCByZXF1aXJlZD1UcnVlKQorCisgICAgZGVmIHRlc3RfdXNlcl9kZWZpbmVkX2FjdGlvbihzZWxmKToKKworICAgICAgICBjbGFzcyBTdWNjZXNzKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQWN0aW9uKG9iamVjdCk6CisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1GYWxzZSk6CisgICAgICAgICAgICAgICAgaWYgZGVzdCA9PSAnc3BhbSc6CisgICAgICAgICAgICAgICAgICAgIGlmIGNvbnN0IGlzIFN1Y2Nlc3M6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZWZhdWx0IGlzIFN1Y2Nlc3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3VjY2VzcygpCisKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN1Y2Nlc3MsIHBhcnNlci5hZGRfYXJndW1lbnQsICctLXNwYW0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249QWN0aW9uLCBkZWZhdWx0PVN1Y2Nlc3MsIGNvbnN0PVN1Y2Nlc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN1Y2Nlc3MsIHBhcnNlci5hZGRfYXJndW1lbnQsICdzcGFtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPUFjdGlvbiwgZGVmYXVsdD1TdWNjZXNzLCBjb25zdD1TdWNjZXNzKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEFjdGlvbnMgcmV0dXJuZWQgYnkgYWRkX2FyZ3VtZW50CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RBY3Rpb25zUmV0dXJuZWQoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZGVzdChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBhY3Rpb24gPSBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLmRlc3QsICdmb28nKQorICAgICAgICBhY3Rpb24gPSBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYicsICctLWJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLmRlc3QsICdiYXInKQorICAgICAgICBhY3Rpb24gPSBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsICcteScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLmRlc3QsICd4JykKKworICAgIGRlZiB0ZXN0X21pc2Moc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgYWN0aW9uID0gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBuYXJncz0nPycsIGNvbnN0PTQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ODQsIHR5cGU9aW50LCBjaG9pY2VzPVsxLCAyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdGT08nLCBtZXRhdmFyPSdCQVInLCBkZXN0PSdiYXonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5uYXJncywgJz8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5jb25zdCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLmRlZmF1bHQsIDg0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi50eXBlLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLmNob2ljZXMsIFsxLCAyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24uaGVscCwgJ0ZPTycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLm1ldGF2YXIsICdCQVInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5kZXN0LCAnYmF6JykKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEFyZ3VtZW50IGNvbmZsaWN0IGhhbmRsaW5nIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RDb25mbGljdEhhbmRsaW5nKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2JhZF90eXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RfaGFuZGxlcj0nZm9vJykKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0X2Vycm9yKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXJncGFyc2UuQXJndW1lbnRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCwgJy14JykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXJncGFyc2UuQXJndW1lbnRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCwgJy0tc3BhbScpCisKKyAgICBkZWYgdGVzdF9yZXNvbHZlX2Vycm9yKHNlbGYpOgorICAgICAgICBnZXRfcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIKKyAgICAgICAgcGFyc2VyID0gZ2V0X3BhcnNlcihwcm9nPSdQUk9HJywgY29uZmxpY3RfaGFuZGxlcj0ncmVzb2x2ZScpCisKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCBoZWxwPSdPTEQgWCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgaGVscD0nTkVXIFgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWF0KKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC14IFggICAgICAgIE5FVyBYCisgICAgICAgICAgICAnJycpKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3BhbScsIG1ldGF2YXI9J09MRF9TUEFNJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zcGFtJywgbWV0YXZhcj0nTkVXX1NQQU0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWF0gWy0tc3BhbSBORVdfU1BBTV0KKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLXggWCAgICAgICAgICAgICBORVcgWAorICAgICAgICAgICAgICAtLXNwYW0gTkVXX1NQQU0KKyAgICAgICAgICAgICcnJykpCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBIZWxwIGFuZCBWZXJzaW9uIG9wdGlvbiB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0T3B0aW9uYWxzSGVscFZlcnNpb25BY3Rpb25zKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBoZWxwIGFuZCB2ZXJzaW9uIGFjdGlvbnMiIiIKKworICAgIGRlZiBfZ2V0X2Vycm9yKHNlbGYsIGZ1bmMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBleGNlcHQgQXJndW1lbnRQYXJzZXJFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRQYXJzZXJFcnJvciwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGFzc2VydFByaW50SGVscEV4aXQoc2VsZiwgcGFyc2VyLCBhcmdzX3N0cik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBwYXJzZXIuZm9ybWF0X2hlbHAoKSwKKyAgICAgICAgICAgIHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgYXJnc19zdHIuc3BsaXQoKSkuc3Rkb3V0KQorCisgICAgZGVmIGFzc2VydFByaW50VmVyc2lvbkV4aXQoc2VsZiwgcGFyc2VyLCBhcmdzX3N0cik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBwYXJzZXIuZm9ybWF0X3ZlcnNpb24oKSwKKyAgICAgICAgICAgIHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgYXJnc19zdHIuc3BsaXQoKSkuc3RkZXJyKQorCisgICAgZGVmIGFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3Ioc2VsZiwgcGFyc2VyLCAqYXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50UGFyc2VyRXJyb3IsIHBhcnNlci5wYXJzZV9hcmdzLCBhcmdzKQorCisgICAgZGVmIHRlc3RfdmVyc2lvbihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIodmVyc2lvbj0nMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRQcmludEhlbHBFeGl0KHBhcnNlciwgJy1oJykKKyAgICAgICAgc2VsZi5hc3NlcnRQcmludEhlbHBFeGl0KHBhcnNlciwgJy0taGVscCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRWZXJzaW9uRXhpdChwYXJzZXIsICctdicpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRWZXJzaW9uRXhpdChwYXJzZXIsICctLXZlcnNpb24nKQorCisgICAgZGVmIHRlc3RfdmVyc2lvbl9mb3JtYXQoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BQUCcsIHZlcnNpb249JyUocHJvZylzIDMuNScpCisgICAgICAgIG1zZyA9IHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgWyctdiddKS5zdGRlcnIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnUFBQIDMuNVxuJywgbXNnKQorCisgICAgZGVmIHRlc3RfdmVyc2lvbl9ub19oZWxwKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSwgdmVyc2lvbj0nMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlciwgJy1oJykKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlciwgJy0taGVscCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRWZXJzaW9uRXhpdChwYXJzZXIsICctdicpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRWZXJzaW9uRXhpdChwYXJzZXIsICctLXZlcnNpb24nKQorCisgICAgZGVmIHRlc3RfdmVyc2lvbl9hY3Rpb24oc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1hYWCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1WJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nJShwcm9nKXMgMy43JykKKyAgICAgICAgbXNnID0gc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBbJy1WJ10pLnN0ZGVycgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdYWFggMy43XG4nLCBtc2cpCisKKyAgICBkZWYgdGVzdF9ub19oZWxwKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlciwgJy1oJykKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlciwgJy0taGVscCcpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctdicpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctLXZlcnNpb24nKQorCisgICAgZGVmIHRlc3RfYWx0ZXJuYXRlX2hlbHBfdmVyc2lvbihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsIGFjdGlvbj0naGVscCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy15JywgYWN0aW9uPSd2ZXJzaW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRQcmludEhlbHBFeGl0KHBhcnNlciwgJy14JykKKyAgICAgICAgc2VsZi5hc3NlcnRQcmludFZlcnNpb25FeGl0KHBhcnNlciwgJy15JykKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlciwgJy12JykKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlciwgJy0tdmVyc2lvbicpCisKKyAgICBkZWYgdGVzdF9oZWxwX3ZlcnNpb25fZXh0cmFfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcih2ZXJzaW9uPScxLjAnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3knKQorCisgICAgICAgICMgdHJ5IGFsbCBjb21iaW5hdGlvbnMgb2YgdmFsaWQgcHJlZml4ZXMgYW5kIHN1ZmZpeGVzCisgICAgICAgIHZhbGlkX3ByZWZpeGVzID0gWycnLCAnLXgnLCAnZm9vJywgJy14IGJhcicsICdiYXogLXgnXQorICAgICAgICB2YWxpZF9zdWZmaXhlcyA9IHZhbGlkX3ByZWZpeGVzICsgWyctLWJhZC1vcHRpb24nLCAnZm9vIGJhciBiYXonXQorICAgICAgICBmb3IgcHJlZml4IGluIHZhbGlkX3ByZWZpeGVzOgorICAgICAgICAgICAgZm9yIHN1ZmZpeCBpbiB2YWxpZF9zdWZmaXhlczoKKyAgICAgICAgICAgICAgICBmb3JtYXQgPSAnJXMgJSVzICVzJyAlIChwcmVmaXgsIHN1ZmZpeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRIZWxwRXhpdChwYXJzZXIsIGZvcm1hdCAlICctaCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFByaW50SGVscEV4aXQocGFyc2VyLCBmb3JtYXQgJSAnLS1oZWxwJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRWZXJzaW9uRXhpdChwYXJzZXIsIGZvcm1hdCAlICctdicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFByaW50VmVyc2lvbkV4aXQocGFyc2VyLCBmb3JtYXQgJSAnLS12ZXJzaW9uJykKKworCisjID09PT09PT09PT09PT09PT09PT09PT0KKyMgc3RyKCkgYW5kIHJlcHIoKSB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RTdHJpbmdzKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHN0cigpICBhbmQgcmVwcigpIG9uIE9wdGlvbmFscyBhbmQgUG9zaXRpb25hbHMiIiIKKworICAgIGRlZiBhc3NlcnRTdHJpbmdFcXVhbChzZWxmLCBvYmosIHJlc3VsdF9zdHJpbmcpOgorICAgICAgICBmb3IgZnVuYyBpbiBbc3RyLCByZXByXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYyhvYmopLCByZXN1bHRfc3RyaW5nKQorCisgICAgZGVmIHRlc3Rfb3B0aW9uYWwoc2VsZik6CisgICAgICAgIG9wdGlvbiA9IGFyZ3BhcnNlLkFjdGlvbigKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPVsnLS1mb28nLCAnLWEnLCAnLWInXSwKKyAgICAgICAgICAgIGRlc3Q9J2InLAorICAgICAgICAgICAgdHlwZT0naW50JywKKyAgICAgICAgICAgIG5hcmdzPScrJywKKyAgICAgICAgICAgIGRlZmF1bHQ9NDIsCisgICAgICAgICAgICBjaG9pY2VzPVsxLCAyLCAzXSwKKyAgICAgICAgICAgIGhlbHA9J0hFTFAnLAorICAgICAgICAgICAgbWV0YXZhcj0nTUVUQVZBUicpCisgICAgICAgIHN0cmluZyA9ICgKKyAgICAgICAgICAgICJBY3Rpb24ob3B0aW9uX3N0cmluZ3M9WyctLWZvbycsICctYScsICctYiddLCBkZXN0PSdiJywgIgorICAgICAgICAgICAgIm5hcmdzPScrJywgY29uc3Q9Tm9uZSwgZGVmYXVsdD00MiwgdHlwZT0naW50JywgIgorICAgICAgICAgICAgImNob2ljZXM9WzEsIDIsIDNdLCBoZWxwPSdIRUxQJywgbWV0YXZhcj0nTUVUQVZBUicpIikKKyAgICAgICAgc2VsZi5hc3NlcnRTdHJpbmdFcXVhbChvcHRpb24sIHN0cmluZykKKworICAgIGRlZiB0ZXN0X2FyZ3VtZW50KHNlbGYpOgorICAgICAgICBhcmd1bWVudCA9IGFyZ3BhcnNlLkFjdGlvbigKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPVtdLAorICAgICAgICAgICAgZGVzdD0neCcsCisgICAgICAgICAgICB0eXBlPWZsb2F0LAorICAgICAgICAgICAgbmFyZ3M9Jz8nLAorICAgICAgICAgICAgZGVmYXVsdD0yLjUsCisgICAgICAgICAgICBjaG9pY2VzPVswLjUsIDEuNSwgMi41XSwKKyAgICAgICAgICAgIGhlbHA9J0ggSEggSCcsCisgICAgICAgICAgICBtZXRhdmFyPSdNViBNViBNVicpCisgICAgICAgIHN0cmluZyA9ICgKKyAgICAgICAgICAgICJBY3Rpb24ob3B0aW9uX3N0cmluZ3M9W10sIGRlc3Q9J3gnLCBuYXJncz0nPycsICIKKyAgICAgICAgICAgICJjb25zdD1Ob25lLCBkZWZhdWx0PTIuNSwgdHlwZT0lciwgY2hvaWNlcz1bMC41LCAxLjUsIDIuNV0sICIKKyAgICAgICAgICAgICJoZWxwPSdIIEhIIEgnLCBtZXRhdmFyPSdNViBNViBNVicpIiAlIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydFN0cmluZ0VxdWFsKGFyZ3VtZW50LCBzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2Uoc2VsZik6CisgICAgICAgIG5zID0gYXJncGFyc2UuTmFtZXNwYWNlKGZvbz00MiwgYmFyPSdzcGFtJykKKyAgICAgICAgc3RyaW5nID0gIk5hbWVzcGFjZShiYXI9J3NwYW0nLCBmb289NDIpIgorICAgICAgICBzZWxmLmFzc2VydFN0cmluZ0VxdWFsKG5zLCBzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9wYXJzZXIoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICAgICBzdHJpbmcgPSAoCisgICAgICAgICAgICAiQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycsIHVzYWdlPU5vbmUsIGRlc2NyaXB0aW9uPU5vbmUsICIKKyAgICAgICAgICAgICJ2ZXJzaW9uPU5vbmUsIGZvcm1hdHRlcl9jbGFzcz0lciwgY29uZmxpY3RfaGFuZGxlcj0nZXJyb3InLCAiCisgICAgICAgICAgICAiYWRkX2hlbHA9VHJ1ZSkiICUgYXJncGFyc2UuSGVscEZvcm1hdHRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRTdHJpbmdFcXVhbChwYXJzZXIsIHN0cmluZykKKworIyA9PT09PT09PT09PT09PT0KKyMgTmFtZXNwYWNlIHRlc3RzCisjID09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0TmFtZXNwYWNlKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBucywgJ3gnKQorCisgICAgICAgIG5zID0gYXJncGFyc2UuTmFtZXNwYWNlKGE9NDIsIGI9J3NwYW0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmEsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmIsICdzcGFtJykKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBuczEgPSBhcmdwYXJzZS5OYW1lc3BhY2UoYT0xLCBiPTIpCisgICAgICAgIG5zMiA9IGFyZ3BhcnNlLk5hbWVzcGFjZShiPTIsIGE9MSkKKyAgICAgICAgbnMzID0gYXJncGFyc2UuTmFtZXNwYWNlKGE9MSkKKyAgICAgICAgbnM0ID0gYXJncGFyc2UuTmFtZXNwYWNlKGI9MikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zMSwgbnMyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG5zMSwgbnMzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG5zMSwgbnM0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG5zMiwgbnMzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG5zMiwgbnM0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMxICE9IG5zMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zMSAhPSBuczQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuczIgIT0gbnMzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMyICE9IG5zNCkKKworCisjID09PT09PT09PT09PT09PT09PT0KKyMgRmlsZSBlbmNvZGluZyB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RFbmNvZGluZyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgX3Rlc3RfbW9kdWxlX2VuY29kaW5nKHNlbGYsIHBhdGgpOgorICAgICAgICBwYXRoLCBfID0gb3MucGF0aC5zcGxpdGV4dChwYXRoKQorICAgICAgICBwYXRoICs9ICIucHkiCisgICAgICAgIHdpdGggY29kZWNzLm9wZW4ocGF0aCwgJ3InLCAndXRmOCcpIGFzIGY6CisgICAgICAgICAgICBmLnJlYWQoKQorCisgICAgZGVmIHRlc3RfYXJncGFyc2VfbW9kdWxlX2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X21vZHVsZV9lbmNvZGluZyhhcmdwYXJzZS5fX2ZpbGVfXykKKworICAgIGRlZiB0ZXN0X3Rlc3RfYXJncGFyc2VfbW9kdWxlX2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X21vZHVsZV9lbmNvZGluZyhfX2ZpbGVfXykKKworIyA9PT09PT09PT09PT09PT09PT09CisjIEFyZ3VtZW50RXJyb3IgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0QXJndW1lbnRFcnJvcihUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hcmd1bWVudF9lcnJvcihzZWxmKToKKyAgICAgICAgbXNnID0gIm15IGVycm9yIGhlcmUiCisgICAgICAgIGVycm9yID0gYXJncGFyc2UuQXJndW1lbnRFcnJvcihOb25lLCBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVycm9yKSwgbXNnKQorCisjID09PT09PT09PT09PT09PT09PT09PT09CisjIEFyZ3VtZW50VHlwZUVycm9yIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RBcmd1bWVudFR5cGVFcnJvcihUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hcmd1bWVudF90eXBlX2Vycm9yKHNlbGYpOgorCisgICAgICAgIGRlZiBzcGFtKHN0cmluZyk6CisgICAgICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcignc3BhbSEnKQorCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgneCcsIHR5cGU9c3BhbSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoWydYWFgnXSkKKyAgICAgICAgZXhjZXB0IEFyZ3VtZW50UGFyc2VyRXJyb3I6CisgICAgICAgICAgICBleHBlY3RlZCA9ICd1c2FnZTogUFJPRyB4XG5QUk9HOiBlcnJvcjogYXJndW1lbnQgeDogc3BhbSFcbicKKyAgICAgICAgICAgIG1zZyA9IHN5cy5leGNfaW5mbygpWzFdLnN0ZGVycgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgbXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCkKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgQ2hlY2sgdGhhdCB0aGUgdHlwZSBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBvbmNlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0VHlwZUZ1bmN0aW9uQ2FsbE9ubHlPbmNlKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3R5cGVfZnVuY3Rpb25fY2FsbF9vbmx5X29uY2Uoc2VsZik6CisgICAgICAgIGRlZiBzcGFtKHN0cmluZ190b19jb252ZXJ0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nX3RvX2NvbnZlcnQsICdzcGFtIScpCisgICAgICAgICAgICByZXR1cm4gJ2Zvb19jb252ZXJ0ZWQnCisKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIHR5cGU9c3BhbSwgZGVmYXVsdD0nYmFyJykKKyAgICAgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCctLWZvbyBzcGFtIScuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyhmb289J2Zvb19jb252ZXJ0ZWQnKSwgYXJncykKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgQ2hlY2sgc2VtYW50aWNzIHJlZ2FyZGluZyB0aGUgZGVmYXVsdCBhcmd1bWVudCBhbmQgdHlwZSBjb252ZXJzaW9uCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0VHlwZUZ1bmN0aW9uQ2FsbGVkT25EZWZhdWx0KFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3R5cGVfZnVuY3Rpb25fY2FsbF93aXRoX25vbl9zdHJpbmdfZGVmYXVsdChzZWxmKToKKyAgICAgICAgZGVmIHNwYW0oaW50X3RvX2NvbnZlcnQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRfdG9fY29udmVydCwgMCkKKyAgICAgICAgICAgIHJldHVybiAnZm9vX2NvbnZlcnRlZCcKKworICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgdHlwZT1zcGFtLCBkZWZhdWx0PTApCisgICAgICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhbXSkKKyAgICAgICAgIyBmb28gc2hvdWxkICpub3QqIGJlIGNvbnZlcnRlZCBiZWNhdXNlIGl0cyBkZWZhdWx0IGlzIG5vdCBhIHN0cmluZy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyhmb289MCksIGFyZ3MpCisKKyAgICBkZWYgdGVzdF90eXBlX2Z1bmN0aW9uX2NhbGxfd2l0aF9zdHJpbmdfZGVmYXVsdChzZWxmKToKKyAgICAgICAgZGVmIHNwYW0oaW50X3RvX2NvbnZlcnQpOgorICAgICAgICAgICAgcmV0dXJuICdmb29fY29udmVydGVkJworCisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCB0eXBlPXNwYW0sIGRlZmF1bHQ9JzAnKQorICAgICAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoW10pCisgICAgICAgICMgZm9vIGlzIGNvbnZlcnRlZCBiZWNhdXNlIGl0cyBkZWZhdWx0IGlzIGEgc3RyaW5nLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKGZvbz0nZm9vX2NvbnZlcnRlZCcpLCBhcmdzKQorCisgICAgZGVmIHRlc3Rfbm9fZG91YmxlX3R5cGVfY29udmVyc2lvbl9vZl9kZWZhdWx0KHNlbGYpOgorICAgICAgICBkZWYgZXh0ZW5kKHN0cl90b19jb252ZXJ0KToKKyAgICAgICAgICAgIHJldHVybiBzdHJfdG9fY29udmVydCArICcqJworCisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS10ZXN0JywgdHlwZT1leHRlbmQsIGRlZmF1bHQ9JyonKQorICAgICAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoW10pCisgICAgICAgICMgVGhlIHRlc3QgYXJndW1lbnQgd2lsbCBiZSB0d28gc3RhcnMsIG9uZSBjb21pbmcgZnJvbSB0aGUgZGVmYXVsdAorICAgICAgICAjIHZhbHVlIGFuZCBvbmUgY29taW5nIGZyb20gdGhlIHR5cGUgY29udmVyc2lvbiBiZWluZyBjYWxsZWQgZXhhY3RseQorICAgICAgICAjIG9uY2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlModGVzdD0nKionKSwgYXJncykKKworICAgIGRlZiB0ZXN0X2lzc3VlXzE1OTA2KHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNTkwNjogV2hlbiBhY3Rpb249J2FwcGVuZCcsIHR5cGU9c3RyLCBkZWZhdWx0PVtdIGFyZQorICAgICAgICAjIHByb3ZpZGluZywgdGhlIGRlc3QgdmFsdWUgd2FzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gIltdIiB3aGVuIGl0CisgICAgICAgICMgc2hvdWxkIGhhdmUgYmVlbiBhbiBlbXB0eSBsaXN0LgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdGVzdCcsIGRlc3Q9J3Rlc3QnLCB0eXBlPXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVtdLCBhY3Rpb249J2FwcGVuZCcpCisgICAgICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLnRlc3QsIFtdKQorCisjID09PT09PT09PT09PT09PT09PT09PT0KKyMgcGFyc2Vfa25vd25fYXJncyB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RQYXJzZUtub3duQXJncyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hcmd1bWVudHNfdHVwbGUoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoKCkpCisKKyAgICBkZWYgdGVzdF9hcmd1bWVudHNfbGlzdChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSkKKworICAgIGRlZiB0ZXN0X2FyZ3VtZW50c190dXBsZV9wb3NpdGlvbmFsKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3gnKQorICAgICAgICBwYXJzZXIucGFyc2VfYXJncygoJ3gnLCkpCisKKyAgICBkZWYgdGVzdF9hcmd1bWVudHNfbGlzdF9wb3NpdGlvbmFsKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3gnKQorICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbJ3gnXSkKKworICAgIGRlZiB0ZXN0X29wdGlvbmFscyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycpCisgICAgICAgIGFyZ3MsIGV4dHJhcyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKCctLWZvbyBGIC0tYmFyIC0tYmF6Jy5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKGZvbz0nRicpLCBhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnLS1iYXInLCAnLS1iYXonXSwgZXh0cmFzKQorCisgICAgZGVmIHRlc3RfbWl4ZWQoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCBuYXJncz0nPycsIGNvbnN0PTEsIHR5cGU9aW50KQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNwYW0nLCBhY3Rpb249J3N0b3JlX2ZhbHNlJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFkZ2VyJykKKworICAgICAgICBhcmd2ID0gWyJCIiwgIkMiLCAiLS1mb28iLCAiLXYiLCAiMyIsICI0Il0KKyAgICAgICAgYXJncywgZXh0cmFzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJndikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh2PTMsIHNwYW09VHJ1ZSwgYmFkZ2VyPSJCIiksIGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyJDIiwgIi0tZm9vIiwgIjQiXSwgZXh0cmFzKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09CisjIGFkZF9hcmd1bWVudCBtZXRhdmFyIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RBZGRBcmd1bWVudE1ldGF2YXIoVGVzdENhc2UpOgorCisgICAgRVhQRUNURURfTUVTU0FHRSA9ICJsZW5ndGggb2YgbWV0YXZhciB0dXBsZSBkb2VzIG5vdCBtYXRjaCBuYXJncyIKKworICAgIGRlZiBkb190ZXN0X25vX2V4Y2VwdGlvbihzZWxmLCBuYXJncywgbWV0YXZhcik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1mb28iLCBuYXJncz1uYXJncywgbWV0YXZhcj1tZXRhdmFyKQorCisgICAgZGVmIGRvX3Rlc3RfZXhjZXB0aW9uKHNlbGYsIG5hcmdzLCBtZXRhdmFyKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1mb28iLCBuYXJncz1uYXJncywgbWV0YXZhcj1tZXRhdmFyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzWzBdLCBzZWxmLkVYUEVDVEVEX01FU1NBR0UpCisKKyAgICAjIFVuaXQgdGVzdHMgZm9yIGRpZmZlcmVudCB2YWx1ZXMgb2YgbWV0YXZhciB3aGVuIG5hcmdzPU5vbmUKKworICAgIGRlZiB0ZXN0X25hcmdzX05vbmVfbWV0YXZhcl9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9Tm9uZSwgbWV0YXZhcj0iMSIpCisKKyAgICBkZWYgdGVzdF9uYXJnc19Ob25lX21ldGF2YXJfbGVuZ3RoMChzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz1Ob25lLCBtZXRhdmFyPXR1cGxlKCkpCisKKyAgICBkZWYgdGVzdF9uYXJnc19Ob25lX21ldGF2YXJfbGVuZ3RoMShzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X25vX2V4Y2VwdGlvbihuYXJncz1Ob25lLCBtZXRhdmFyPSgiMSIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfTm9uZV9tZXRhdmFyX2xlbmd0aDIoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9Tm9uZSwgbWV0YXZhcj0oIjEiLCAiMiIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfTm9uZV9tZXRhdmFyX2xlbmd0aDMoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9Tm9uZSwgbWV0YXZhcj0oIjEiLCAiMiIsICIzIikpCisKKyAgICAjIFVuaXQgdGVzdHMgZm9yIGRpZmZlcmVudCB2YWx1ZXMgb2YgbWV0YXZhciB3aGVuIG5hcmdzPT8KKworICAgIGRlZiB0ZXN0X25hcmdzX29wdGlvbmFsX21ldGF2YXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSI/IiwgbWV0YXZhcj0iMSIpCisKKyAgICBkZWYgdGVzdF9uYXJnc19vcHRpb25hbF9tZXRhdmFyX2xlbmd0aDAoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9Ij8iLCBtZXRhdmFyPXR1cGxlKCkpCisKKyAgICBkZWYgdGVzdF9uYXJnc19vcHRpb25hbF9tZXRhdmFyX2xlbmd0aDEoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9Ij8iLCBtZXRhdmFyPSgiMSIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3Nfb3B0aW9uYWxfbWV0YXZhcl9sZW5ndGgyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPSI/IiwgbWV0YXZhcj0oIjEiLCAiMiIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3Nfb3B0aW9uYWxfbWV0YXZhcl9sZW5ndGgzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPSI/IiwgbWV0YXZhcj0oIjEiLCAiMiIsICIzIikpCisKKyAgICAjIFVuaXQgdGVzdHMgZm9yIGRpZmZlcmVudCB2YWx1ZXMgb2YgbWV0YXZhciB3aGVuIG5hcmdzPSoKKworICAgIGRlZiB0ZXN0X25hcmdzX3plcm9vcm1vcmVfbWV0YXZhcl9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9IioiLCBtZXRhdmFyPSIxIikKKworICAgIGRlZiB0ZXN0X25hcmdzX3plcm9vcm1vcmVfbWV0YXZhcl9sZW5ndGgwKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPSIqIiwgbWV0YXZhcj10dXBsZSgpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfemVyb29ybW9yZV9tZXRhdmFyX2xlbmd0aDEoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9IioiLCBtZXRhdmFyPSgiMSIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfemVyb29ybW9yZV9tZXRhdmFyX2xlbmd0aDIoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9IioiLCBtZXRhdmFyPSgiMSIsICIyIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc196ZXJvb3Jtb3JlX21ldGF2YXJfbGVuZ3RoMyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz0iKiIsIG1ldGF2YXI9KCIxIiwgIjIiLCAiMyIpKQorCisgICAgIyBVbml0IHRlc3RzIGZvciBkaWZmZXJlbnQgdmFsdWVzIG9mIG1ldGF2YXIgd2hlbiBuYXJncz0rCisKKyAgICBkZWYgdGVzdF9uYXJnc19vbmVvcm1vcmVfbWV0YXZhcl9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9IisiLCBtZXRhdmFyPSIxIikKKworICAgIGRlZiB0ZXN0X25hcmdzX29uZW9ybW9yZV9tZXRhdmFyX2xlbmd0aDAoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9IisiLCBtZXRhdmFyPXR1cGxlKCkpCisKKyAgICBkZWYgdGVzdF9uYXJnc19vbmVvcm1vcmVfbWV0YXZhcl9sZW5ndGgxKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSIrIiwgbWV0YXZhcj0oIjEiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzX29uZW9ybW9yZV9tZXRhdmFyX2xlbmd0aDIoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9IisiLCBtZXRhdmFyPSgiMSIsICIyIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc19vbmVvcm1vcmVfbWV0YXZhcl9sZW5ndGgzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPSIrIiwgbWV0YXZhcj0oIjEiLCAiMiIsICIzIikpCisKKyAgICAjIFVuaXQgdGVzdHMgZm9yIGRpZmZlcmVudCB2YWx1ZXMgb2YgbWV0YXZhciB3aGVuIG5hcmdzPS4uLgorCisgICAgZGVmIHRlc3RfbmFyZ3NfcmVtYWluZGVyX21ldGF2YXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSIuLi4iLCBtZXRhdmFyPSIxIikKKworICAgIGRlZiB0ZXN0X25hcmdzX3JlbWFpbmRlcl9tZXRhdmFyX2xlbmd0aDAoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9Ii4uLiIsIG1ldGF2YXI9dHVwbGUoKSkKKworICAgIGRlZiB0ZXN0X25hcmdzX3JlbWFpbmRlcl9tZXRhdmFyX2xlbmd0aDEoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9Ii4uLiIsIG1ldGF2YXI9KCIxIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc19yZW1haW5kZXJfbWV0YXZhcl9sZW5ndGgyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSIuLi4iLCBtZXRhdmFyPSgiMSIsICIyIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc19yZW1haW5kZXJfbWV0YXZhcl9sZW5ndGgzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSIuLi4iLCBtZXRhdmFyPSgiMSIsICIyIiwgIjMiKSkKKworICAgICMgVW5pdCB0ZXN0cyBmb3IgZGlmZmVyZW50IHZhbHVlcyBvZiBtZXRhdmFyIHdoZW4gbmFyZ3M9QS4uLgorCisgICAgZGVmIHRlc3RfbmFyZ3NfcGFyc2VyX21ldGF2YXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSJBLi4uIiwgbWV0YXZhcj0iMSIpCisKKyAgICBkZWYgdGVzdF9uYXJnc19wYXJzZXJfbWV0YXZhcl9sZW5ndGgwKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPSJBLi4uIiwgbWV0YXZhcj10dXBsZSgpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfcGFyc2VyX21ldGF2YXJfbGVuZ3RoMShzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X25vX2V4Y2VwdGlvbihuYXJncz0iQS4uLiIsIG1ldGF2YXI9KCIxIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc19wYXJzZXJfbWV0YXZhcl9sZW5ndGgyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPSJBLi4uIiwgbWV0YXZhcj0oIjEiLCAiMiIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfcGFyc2VyX21ldGF2YXJfbGVuZ3RoMyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz0iQS4uLiIsIG1ldGF2YXI9KCIxIiwgIjIiLCAiMyIpKQorCisgICAgIyBVbml0IHRlc3RzIGZvciBkaWZmZXJlbnQgdmFsdWVzIG9mIG1ldGF2YXIgd2hlbiBuYXJncz0xCisKKyAgICBkZWYgdGVzdF9uYXJnc18xX21ldGF2YXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPTEsIG1ldGF2YXI9IjEiKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfMV9tZXRhdmFyX2xlbmd0aDAoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9MSwgbWV0YXZhcj10dXBsZSgpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfMV9tZXRhdmFyX2xlbmd0aDEoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9MSwgbWV0YXZhcj0oIjEiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzXzFfbWV0YXZhcl9sZW5ndGgyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPTEsIG1ldGF2YXI9KCIxIiwgIjIiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzXzFfbWV0YXZhcl9sZW5ndGgzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPTEsIG1ldGF2YXI9KCIxIiwgIjIiLCAiMyIpKQorCisgICAgIyBVbml0IHRlc3RzIGZvciBkaWZmZXJlbnQgdmFsdWVzIG9mIG1ldGF2YXIgd2hlbiBuYXJncz0yCisKKyAgICBkZWYgdGVzdF9uYXJnc18yX21ldGF2YXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPTIsIG1ldGF2YXI9IjEiKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfMl9tZXRhdmFyX2xlbmd0aDAoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9MiwgbWV0YXZhcj10dXBsZSgpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfMl9tZXRhdmFyX2xlbmd0aDEoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9MiwgbWV0YXZhcj0oIjEiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzXzJfbWV0YXZhcl9sZW5ndGgyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPTIsIG1ldGF2YXI9KCIxIiwgIjIiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzXzJfbWV0YXZhcl9sZW5ndGgzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPTIsIG1ldGF2YXI9KCIxIiwgIjIiLCAiMyIpKQorCisgICAgIyBVbml0IHRlc3RzIGZvciBkaWZmZXJlbnQgdmFsdWVzIG9mIG1ldGF2YXIgd2hlbiBuYXJncz0zCisKKyAgICBkZWYgdGVzdF9uYXJnc18zX21ldGF2YXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPTMsIG1ldGF2YXI9IjEiKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfM19tZXRhdmFyX2xlbmd0aDAoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9MywgbWV0YXZhcj10dXBsZSgpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfM19tZXRhdmFyX2xlbmd0aDEoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9MywgbWV0YXZhcj0oIjEiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzXzNfbWV0YXZhcl9sZW5ndGgyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPTMsIG1ldGF2YXI9KCIxIiwgIjIiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzXzNfbWV0YXZhcl9sZW5ndGgzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPTMsIG1ldGF2YXI9KCIxIiwgIjIiLCAiMyIpKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgZnJvbSBhcmdwYXJzZSBpbXBvcnQgKiB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RJbXBvcnRTdGFyKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBmb3IgbmFtZSBpbiBhcmdwYXJzZS5fX2FsbF9fOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoYXJncGFyc2UsIG5hbWUpKQorCisgICAgZGVmIHRlc3RfYWxsX2V4cG9ydHNfZXZlcnl0aGluZ19idXRfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgaXRlbXMgPSBbCisgICAgICAgICAgICBuYW1lCisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gdmFycyhhcmdwYXJzZSkuaXRlbXMoKQorICAgICAgICAgICAgaWYgbm90IG5hbWUuc3RhcnRzd2l0aCgiXyIpCisgICAgICAgICAgICBpZiBub3QgaW5zcGVjdC5pc21vZHVsZSh2YWx1ZSkKKyAgICAgICAgXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpdGVtcyksIHNvcnRlZChhcmdwYXJzZS5fX2FsbF9fKSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgICMgc2lsZW5jZSB3YXJuaW5ncyBhYm91dCB2ZXJzaW9uIGFyZ3VtZW50IC0gdGhlc2UgYXJlIGV4cGVjdGVkCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoCisgICAgICAgICAgICAoJ1RoZSAidmVyc2lvbiIgYXJndW1lbnQgdG8gQXJndW1lbnRQYXJzZXIgaXMgZGVwcmVjYXRlZC4nLAorICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICAoJ1RoZSAoZm9ybWF0fHByaW50KV92ZXJzaW9uIG1ldGhvZCBpcyBkZXByZWNhdGVkJywKKyAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKyAgICAjIFJlbW92ZSBnbG9iYWwgcmVmZXJlbmNlcyB0byBhdm9pZCBsb29raW5nIGxpa2Ugd2UgaGF2ZSByZWZsZWFrcy4KKyAgICBSRmlsZS5zZWVuID0ge30KKyAgICBXRmlsZS5zZWVuID0gc2V0KCkKKworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FycmF5LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYXJyYXkucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzRkY2NiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FycmF5LnB5CkBAIC0wLDAgKzEsMTExMSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIiIiVGVzdCB0aGUgYXJyYXltb2R1bGUuCisgICBSb2dlciBFLiBNYXNzZQorIiIiCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eQoraW1wb3J0IGFycmF5LCBjU3RyaW5nSU8KK2Zyb20gY1BpY2tsZSBpbXBvcnQgbG9hZHMsIGR1bXBzLCBISUdIRVNUX1BST1RPQ09MCisKK2NsYXNzIEFycmF5U3ViY2xhc3MoYXJyYXkuYXJyYXkpOgorICAgIHBhc3MKKworY2xhc3MgQXJyYXlTdWJjbGFzc1dpdGhLd2FyZ3MoYXJyYXkuYXJyYXkpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlY29kZSwgbmV3YXJnPU5vbmUpOgorICAgICAgICBhcnJheS5hcnJheS5fX2luaXRfXyhzZWxmLCB0eXBlY29kZSkKKwordGVzdHMgPSBbXSAjIGxpc3QgdG8gYWNjdW11bGF0ZSBhbGwgdGVzdHMKK3R5cGVjb2RlcyA9ICJjdWJCaEhpSWxMZmQiCisKK2NsYXNzIEJhZENvbnN0cnVjdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhcnJheS5hcnJheSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhcnJheS5hcnJheSwgc3BhbT00MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhcnJheS5hcnJheSwgJ3h4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXJyYXkuYXJyYXksICd4JykKKwordGVzdHMuYXBwZW5kKEJhZENvbnN0cnVjdG9yVGVzdCkKKworY2xhc3MgQmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgUmVxdWlyZWQgY2xhc3MgYXR0cmlidXRlcyAocHJvdmlkZWQgYnkgc3ViY2xhc3NlcworICAgICMgdHlwZWNvZGU6IHRoZSB0eXBlY29kZSB0byB0ZXN0CisgICAgIyBleGFtcGxlOiBhbiBpbml0aWFsaXplciB1c2FibGUgaW4gdGhlIGNvbnN0cnVjdG9yIGZvciB0aGlzIHR5cGUKKyAgICAjIHNtYWxsZXJleGFtcGxlOiB0aGUgc2FtZSBsZW5ndGggYXMgZXhhbXBsZSwgYnV0IHNtYWxsZXIKKyAgICAjIGJpZ2dlcmV4YW1wbGU6IHRoZSBzYW1lIGxlbmd0aCBhcyBleGFtcGxlLCBidXQgYmlnZ2VyCisgICAgIyBvdXRzaWRlOiBBbiBlbnRyeSB0aGF0IGlzIG5vdCBpbiBleGFtcGxlCisgICAgIyBtaW5pdGVtc2l6ZTogdGhlIG1pbmltdW0gZ3VhcmFudGVlZCBpdGVtc2l6ZQorCisgICAgZGVmIGFzc2VydEVudHJ5RXF1YWwoc2VsZiwgZW50cnkxLCBlbnRyeTIpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5MSwgZW50cnkyKQorCisgICAgZGVmIGJhZHR5cGVjb2RlKHNlbGYpOgorICAgICAgICAjIFJldHVybiBhIHR5cGVjb2RlIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gb3VyIG93bgorICAgICAgICByZXR1cm4gdHlwZWNvZGVzWyh0eXBlY29kZXMuaW5kZXgoc2VsZi50eXBlY29kZSkrMSkgJSBsZW4odHlwZWNvZGVzKV0KKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnR5cGVjb2RlLCBzZWxmLnR5cGVjb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5pdGVtc2l6ZT49c2VsZi5taW5pdGVtc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhcnJheS5hcnJheSwgc2VsZi50eXBlY29kZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgIGEuYXBwZW5kKHNlbGYuZXhhbXBsZVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYSksIDEpCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYSksIGxlbihzZWxmLmV4YW1wbGUpKQorCisgICAgZGVmIHRlc3RfYnVmZmVyX2luZm8oc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5idWZmZXJfaW5mbywgNDIpCisgICAgICAgIGJpID0gYS5idWZmZXJfaW5mbygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiaSwgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJpKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJpWzBdLCAoaW50LCBsb25nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJpWzFdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmlbMV0sIGxlbihhKSkKKworICAgIGRlZiB0ZXN0X2J5dGVzd2FwKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuYnl0ZXN3YXAsIDQyKQorICAgICAgICBpZiBhLml0ZW1zaXplIGluICgxLCAyLCA0LCA4KToKKyAgICAgICAgICAgIGIgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgICAgICBiLmJ5dGVzd2FwKCkKKyAgICAgICAgICAgIGlmIGEuaXRlbXNpemU9PTE6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGEsIGIpCisgICAgICAgICAgICBiLmJ5dGVzd2FwKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIGltcG9ydCBjb3B5CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGIgPSBjb3B5LmNvcHkoYSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChhKSwgaWQoYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5KHNlbGYpOgorICAgICAgICBpbXBvcnQgY29weQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBiID0gY29weS5kZWVwY29weShhKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGEpLCBpZChiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UoSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgICAgIGIgPSBsb2FkcyhkdW1wcyhhLCBwcm90b2NvbCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGEpLCBpZChiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKworICAgICAgICAgICAgYSA9IEFycmF5U3ViY2xhc3Moc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICAgICAgYS54ID0gMTAKKyAgICAgICAgICAgIGIgPSBsb2FkcyhkdW1wcyhhLCBwcm90b2NvbCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGEpLCBpZChiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS54LCBiLngpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYSksIHR5cGUoYikpCisKKyAgICBkZWYgdGVzdF9waWNrbGVfZm9yX2VtcHR5X2FycmF5KHNlbGYpOgorICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UoSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgICAgICBiID0gbG9hZHMoZHVtcHMoYSwgcHJvdG9jb2wpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChhKSwgaWQoYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisKKyAgICAgICAgICAgIGEgPSBBcnJheVN1YmNsYXNzKHNlbGYudHlwZWNvZGUpCisgICAgICAgICAgICBhLnggPSAxMAorICAgICAgICAgICAgYiA9IGxvYWRzKGR1bXBzKGEsIHByb3RvY29sKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYSksIGlkKGIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLngsIGIueCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShhKSwgdHlwZShiKSkKKworICAgIGRlZiB0ZXN0X2luc2VydChzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYS5pbnNlcnQoMCwgc2VsZi5leGFtcGxlWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhKSwgMStsZW4oc2VsZi5leGFtcGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzBdLCBhWzFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuaW5zZXJ0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuaW5zZXJ0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuaW5zZXJ0LCAwLCBOb25lKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGEuaW5zZXJ0KC0xLCBzZWxmLmV4YW1wbGVbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoCisgICAgICAgICAgICAgICAgc2VsZi50eXBlY29kZSwKKyAgICAgICAgICAgICAgICBzZWxmLmV4YW1wbGVbOi0xXSArIHNlbGYuZXhhbXBsZVs6MV0gKyBzZWxmLmV4YW1wbGVbLTE6XQorICAgICAgICAgICAgKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYS5pbnNlcnQoLTEwMDAsIHNlbGYuZXhhbXBsZVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbOjFdICsgc2VsZi5leGFtcGxlKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYS5pbnNlcnQoMTAwMCwgc2VsZi5leGFtcGxlWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSArIHNlbGYuZXhhbXBsZVs6MV0pCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3RvZnJvbWZpbGUoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAyKnNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLnRvZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLnRvZmlsZSwgY1N0cmluZ0lPLlN0cmluZ0lPKCkpCisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3diJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYS50b2ZpbGUoZikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgYiA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAncmInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiLmZyb21maWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICAgICAgIGIuZnJvbWZpbGUsCisgICAgICAgICAgICAgICAgY1N0cmluZ0lPLlN0cmluZ0lPKCksIGxlbihzZWxmLmV4YW1wbGUpCisgICAgICAgICAgICApCisgICAgICAgICAgICBiLmZyb21maWxlKGYsIGxlbihzZWxmLmV4YW1wbGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhLCBiKQorICAgICAgICAgICAgYi5mcm9tZmlsZShmLCBsZW4oc2VsZi5leGFtcGxlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBiLmZyb21maWxlLCBmLCAxKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3QgZi5jbG9zZWQ6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9mcm9tZmlsZV9pb2Vycm9yKHNlbGYpOgorICAgICAgICAjIElzc3VlICM1Mzk1OiBDaGVjayBpZiBmcm9tZmlsZSByYWlzZXMgYSBwcm9wZXIgSU9FcnJvcgorICAgICAgICAjIGluc3RlYWQgb2YgRU9GRXJyb3IuCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAnd2InKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBhLmZyb21maWxlLCBmLCBsZW4oc2VsZi5leGFtcGxlKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfZmlsZXdyaXRlKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgMipzZWxmLmV4YW1wbGUpCisgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3YicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoYSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgYiA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAncmInKQorICAgICAgICAgICAgYi5mcm9tZmlsZShmLCBsZW4oc2VsZi5leGFtcGxlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYSwgYikKKyAgICAgICAgICAgIGIuZnJvbWZpbGUoZiwgbGVuKHNlbGYuZXhhbXBsZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlZDoKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X3RvZnJvbWxpc3Qoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAyKnNlbGYuZXhhbXBsZSkKKyAgICAgICAgYiA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS50b2xpc3QsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGIuZnJvbWxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYi5mcm9tbGlzdCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYi5mcm9tbGlzdCwgW05vbmVdKQorICAgICAgICBiLmZyb21saXN0KGEudG9saXN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKworICAgIGRlZiB0ZXN0X3RvZnJvbXN0cmluZyhzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIDIqc2VsZi5leGFtcGxlKQorICAgICAgICBiID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLnRvc3RyaW5nLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiLmZyb21zdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYi5mcm9tc3RyaW5nLCA0MikKKyAgICAgICAgYi5mcm9tc3RyaW5nKGEudG9zdHJpbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICBpZiBhLml0ZW1zaXplPjE6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiLmZyb21zdHJpbmcsICJ4IikKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAyKnNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBldmFsKHJlcHIoYSksIHsiYXJyYXkiOiBhcnJheS5hcnJheX0pKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYSksICJhcnJheSgnJXMnKSIgJSBzZWxmLnR5cGVjb2RlKQorCisgICAgZGVmIHRlc3Rfc3RyKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgMipzZWxmLmV4YW1wbGUpCisgICAgICAgIHN0cihhKQorCisgICAgZGVmIHRlc3RfY21wKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPT0gNDIpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgIT0gNDIpIGlzIFRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID09IGEpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAhPSBhKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIDwgYSkgaXMgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA8PSBhKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPiBhKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID49IGEpIGlzIFRydWUpCisKKyAgICAgICAgYWwgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLnNtYWxsZXJleGFtcGxlKQorICAgICAgICBhYiA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuYmlnZ2VyZXhhbXBsZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPT0gMiphKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICE9IDIqYSkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIDwgMiphKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPD0gMiphKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPiAyKmEpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPj0gMiphKSBpcyBGYWxzZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPT0gYWwpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgIT0gYWwpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA8IGFsKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIDw9IGFsKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID4gYWwpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA+PSBhbCkgaXMgVHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPT0gYWIpIGlzIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgIT0gYWIpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA8IGFiKSBpcyBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPD0gYWIpIGlzIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA+IGFiKSBpcyBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID49IGFiKSBpcyBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkgXAorICAgICAgICAgICAgKyBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbOjotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlICsgc2VsZi5leGFtcGxlWzo6LTFdKQorICAgICAgICApCisKKyAgICAgICAgYiA9IGFycmF5LmFycmF5KHNlbGYuYmFkdHlwZWNvZGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fYWRkX18sIGIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fYWRkX18sICJiYWQiKQorCisgICAgZGVmIHRlc3RfaWFkZChzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZVs6Oi0xXSkKKyAgICAgICAgYiA9IGEKKyAgICAgICAgYSArPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAyKnNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaXMgYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbOjotMV0rMipzZWxmLmV4YW1wbGUpCisgICAgICAgICkKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYSArPSBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlICsgc2VsZi5leGFtcGxlKQorICAgICAgICApCisKKyAgICAgICAgYiA9IGFycmF5LmFycmF5KHNlbGYuYmFkdHlwZWNvZGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fYWRkX18sIGIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9faWFkZF9fLCAiYmFkIikKKworICAgIGRlZiB0ZXN0X211bChzZWxmKToKKyAgICAgICAgYSA9IDUqYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIDUqc2VsZi5leGFtcGxlKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkqNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSo1KQorICAgICAgICApCisKKyAgICAgICAgYSA9IDAqYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgICkKKworICAgICAgICBhID0gKC0xKSphcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX211bF9fLCAiYmFkIikKKworICAgIGRlZiB0ZXN0X2ltdWwoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGIgPSBhCisKKyAgICAgICAgYSAqPSA1CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgNSpzZWxmLmV4YW1wbGUpCisgICAgICAgICkKKworICAgICAgICBhICo9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaXMgYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKSkKKworICAgICAgICBhICo9IDEwMDAKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaXMgYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKSkKKworICAgICAgICBhICo9IC0xCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkpCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYSAqPSAtMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX2ltdWxfXywgImJhZCIpCisKKyAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBzZWxmLmFzc2VydEVudHJ5RXF1YWwoYVswXSwgc2VsZi5leGFtcGxlWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVudHJ5RXF1YWwoYVswTF0sIHNlbGYuZXhhbXBsZVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFbnRyeUVxdWFsKGFbLTFdLCBzZWxmLmV4YW1wbGVbLTFdKQorICAgICAgICBzZWxmLmFzc2VydEVudHJ5RXF1YWwoYVstMUxdLCBzZWxmLmV4YW1wbGVbLTFdKQorICAgICAgICBzZWxmLmFzc2VydEVudHJ5RXF1YWwoYVtsZW4oc2VsZi5leGFtcGxlKS0xXSwgc2VsZi5leGFtcGxlWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFbnRyeUVxdWFsKGFbLWxlbihzZWxmLmV4YW1wbGUpXSwgc2VsZi5leGFtcGxlWzBdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19nZXRpdGVtX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGEuX19nZXRpdGVtX18sIGxlbihzZWxmLmV4YW1wbGUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhLl9fZ2V0aXRlbV9fLCAtbGVuKHNlbGYuZXhhbXBsZSktMSkKKworICAgIGRlZiB0ZXN0X3NldGl0ZW0oc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGFbMF0gPSBhWy0xXQorICAgICAgICBzZWxmLmFzc2VydEVudHJ5RXF1YWwoYVswXSwgYVstMV0pCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYVswTF0gPSBhWy0xXQorICAgICAgICBzZWxmLmFzc2VydEVudHJ5RXF1YWwoYVswXSwgYVstMV0pCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYVstMV0gPSBhWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RW50cnlFcXVhbChhWzBdLCBhWy0xXSkKKworICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBhWy0xTF0gPSBhWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RW50cnlFcXVhbChhWzBdLCBhWy0xXSkKKworICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBhW2xlbihzZWxmLmV4YW1wbGUpLTFdID0gYVswXQorICAgICAgICBzZWxmLmFzc2VydEVudHJ5RXF1YWwoYVswXSwgYVstMV0pCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYVstbGVuKHNlbGYuZXhhbXBsZSldID0gYVstMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFbnRyeUVxdWFsKGFbMF0sIGFbLTFdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX3NldGl0ZW1fXykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fc2V0aXRlbV9fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19zZXRpdGVtX18sIDAsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgSW5kZXhFcnJvciwKKyAgICAgICAgICAgIGEuX19zZXRpdGVtX18sCisgICAgICAgICAgICBsZW4oc2VsZi5leGFtcGxlKSwgc2VsZi5leGFtcGxlWzBdCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBJbmRleEVycm9yLAorICAgICAgICAgICAgYS5fX3NldGl0ZW1fXywKKyAgICAgICAgICAgIC1sZW4oc2VsZi5leGFtcGxlKS0xLCBzZWxmLmV4YW1wbGVbMF0KKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgZGVsIGFbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbMTpdKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgZGVsIGFbLTFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlWzotMV0pCisgICAgICAgICkKKworICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBkZWwgYVtsZW4oc2VsZi5leGFtcGxlKS0xXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZVs6LTFdKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgZGVsIGFbLWxlbihzZWxmLmV4YW1wbGUpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZVsxOl0pCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19kZWxpdGVtX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX2RlbGl0ZW1fXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgYS5fX2RlbGl0ZW1fXywgbGVuKHNlbGYuZXhhbXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGEuX19kZWxpdGVtX18sIC1sZW4oc2VsZi5leGFtcGxlKS0xKQorCisgICAgZGVmIHRlc3RfZ2V0c2xpY2Uoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6XSwgYSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYVsxOl0sCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbMTpdKQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGFbOjFdLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlWzoxXSkKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhWzotMV0sCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbOi0xXSkKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhWy0xOl0sCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbLTE6XSkKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhWy0xOi0xXSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYVsyOjFdLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhWzEwMDA6XSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWy0xMDAwOl0sIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6MTAwMF0sIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhWzotMTAwMF0sCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVstMTAwMDoxMDAwXSwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGFbMjAwMDoxMDAwXSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2V4dGVuZGVkX2dldHNsaWNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgZXh0ZW5kZWQgc2xpY2luZyBieSBjb21wYXJpbmcgd2l0aCBsaXN0IHNsaWNpbmcKKyAgICAgICAgIyAoQXNzdW1lcyBsaXN0IGNvbnZlcnNpb24gd29ya3MgY29ycmVjdGx5LCB0b28pCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGluZGljZXMgPSAoMCwgTm9uZSwgMSwgMywgMTksIDEwMCwgLTEsIC0yLCAtMzEsIC0xMDApCisgICAgICAgIGZvciBzdGFydCBpbiBpbmRpY2VzOgorICAgICAgICAgICAgZm9yIHN0b3AgaW4gaW5kaWNlczoKKyAgICAgICAgICAgICAgICAjIEV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBpbml0aWFsIDAgKGludmFsaWQgc3RlcCkKKyAgICAgICAgICAgICAgICBmb3Igc3RlcCBpbiBpbmRpY2VzWzE6XToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFbc3RhcnQ6c3RvcDpzdGVwXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChhKVtzdGFydDpzdG9wOnN0ZXBdKQorCisgICAgZGVmIHRlc3Rfc2V0c2xpY2Uoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGFbOjFdID0gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSArIHNlbGYuZXhhbXBsZVsxOl0pCisgICAgICAgICkKKworICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBhWzotMV0gPSBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlICsgc2VsZi5leGFtcGxlWy0xOl0pCisgICAgICAgICkKKworICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBhWy0xOl0gPSBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlWzotMV0gKyBzZWxmLmV4YW1wbGUpCisgICAgICAgICkKKworICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBhWzE6XSA9IGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbOjFdICsgc2VsZi5leGFtcGxlKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYVsxOi0xXSA9IGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheSgKKyAgICAgICAgICAgICAgICBzZWxmLnR5cGVjb2RlLAorICAgICAgICAgICAgICAgIHNlbGYuZXhhbXBsZVs6MV0gKyBzZWxmLmV4YW1wbGUgKyBzZWxmLmV4YW1wbGVbLTE6XQorICAgICAgICAgICAgKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYVsxMDAwOl0gPSBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgMipzZWxmLmV4YW1wbGUpCisgICAgICAgICkKKworICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBhWy0xMDAwOl0gPSBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYVs6MTAwMF0gPSBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYVs6LTEwMDBdID0gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIDIqc2VsZi5leGFtcGxlKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYVsxOjBdID0gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZVs6MV0gKyBzZWxmLmV4YW1wbGUgKyBzZWxmLmV4YW1wbGVbMTpdKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYVsyMDAwOjEwMDBdID0gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIDIqc2VsZi5leGFtcGxlKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fc2V0c2xpY2VfXywgMCwgMCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fc2V0aXRlbV9fLCBzbGljZSgwLCAwKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLl9fc2V0aXRlbV9fLCBzbGljZSgwLCAxKSwgTm9uZSkKKworICAgICAgICBiID0gYXJyYXkuYXJyYXkoc2VsZi5iYWR0eXBlY29kZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19zZXRzbGljZV9fLCAwLCAwLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19zZXRpdGVtX18sIHNsaWNlKDAsIDApLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19zZXRpdGVtX18sIHNsaWNlKDAsIDEpLCBiKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kZWRfc2V0X2RlbF9zbGljZShzZWxmKToKKyAgICAgICAgaW5kaWNlcyA9ICgwLCBOb25lLCAxLCAzLCAxOSwgMTAwLCAtMSwgLTIsIC0zMSwgLTEwMCkKKyAgICAgICAgZm9yIHN0YXJ0IGluIGluZGljZXM6CisgICAgICAgICAgICBmb3Igc3RvcCBpbiBpbmRpY2VzOgorICAgICAgICAgICAgICAgICMgRXZlcnl0aGluZyBleGNlcHQgdGhlIGluaXRpYWwgMCAoaW52YWxpZCBzdGVwKQorICAgICAgICAgICAgICAgIGZvciBzdGVwIGluIGluZGljZXNbMTpdOgorICAgICAgICAgICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICAgICAgICAgICAgICBMID0gbGlzdChhKQorICAgICAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgc2xpY2Ugb2YgZXhhY3RseSB0aGUgcmlnaHQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAjIGJ1dCB3aXRoIChob3BlZnVsbHkpIGRpZmZlcmVudCBkYXRhLgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gTFtzdGFydDpzdG9wOnN0ZXBdCisgICAgICAgICAgICAgICAgICAgIGRhdGEucmV2ZXJzZSgpCisgICAgICAgICAgICAgICAgICAgIExbc3RhcnQ6c3RvcDpzdGVwXSA9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgYVtzdGFydDpzdG9wOnN0ZXBdID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBMKSkKKworICAgICAgICAgICAgICAgICAgICBkZWwgTFtzdGFydDpzdG9wOnN0ZXBdCisgICAgICAgICAgICAgICAgICAgIGRlbCBhW3N0YXJ0OnN0b3A6c3RlcF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBMKSkKKworICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgorICAgICAgICBleGFtcGxlID0gMipzZWxmLmV4YW1wbGUKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIGV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5pbmRleCkKKyAgICAgICAgZm9yIHggaW4gZXhhbXBsZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5pbmRleCh4KSwgZXhhbXBsZS5pbmRleCh4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYS5pbmRleCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYS5pbmRleCwgc2VsZi5vdXRzaWRlKQorCisgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CisgICAgICAgIGV4YW1wbGUgPSAyKnNlbGYuZXhhbXBsZQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLmNvdW50KQorICAgICAgICBmb3IgeCBpbiBleGFtcGxlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmNvdW50KHgpLCBleGFtcGxlLmNvdW50KHgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuY291bnQoc2VsZi5vdXRzaWRlKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmNvdW50KE5vbmUpLCAwKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgorICAgICAgICBmb3IgeCBpbiBzZWxmLmV4YW1wbGU6CisgICAgICAgICAgICBleGFtcGxlID0gMipzZWxmLmV4YW1wbGUKKyAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBleGFtcGxlKQorICAgICAgICAgICAgcG9zID0gZXhhbXBsZS5pbmRleCh4KQorICAgICAgICAgICAgZXhhbXBsZTIgPSBleGFtcGxlWzpwb3NdICsgZXhhbXBsZVtwb3MrMTpdCisgICAgICAgICAgICBhLnJlbW92ZSh4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBleGFtcGxlMikpCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYS5yZW1vdmUsIHNlbGYub3V0c2lkZSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLnJlbW92ZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGEucG9wKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAyKnNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLnBvcCwgNDIsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEucG9wLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhLnBvcCwgbGVuKGEpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBhLnBvcCwgLWxlbihhKS0xKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RW50cnlFcXVhbChhLnBvcCgwKSwgc2VsZi5leGFtcGxlWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZVsxOl0rc2VsZi5leGFtcGxlKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RW50cnlFcXVhbChhLnBvcCgxKSwgc2VsZi5leGFtcGxlWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZVsxOjJdK3NlbGYuZXhhbXBsZVszOl0rc2VsZi5leGFtcGxlKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RW50cnlFcXVhbChhLnBvcCgwKSwgc2VsZi5leGFtcGxlWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVudHJ5RXF1YWwoYS5wb3AoKSwgc2VsZi5leGFtcGxlWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGVbMzpdK3NlbGYuZXhhbXBsZVs6LTFdKQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9yZXZlcnNlKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEucmV2ZXJzZSwgNDIpCisgICAgICAgIGEucmV2ZXJzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlWzo6LTFdKQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9leHRlbmQoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5leHRlbmQpCisgICAgICAgIGEuZXh0ZW5kKGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZVs6Oi0xXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlK3NlbGYuZXhhbXBsZVs6Oi0xXSkKKyAgICAgICAgKQorCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGEuZXh0ZW5kKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlK3NlbGYuZXhhbXBsZSkKKyAgICAgICAgKQorCisgICAgICAgIGIgPSBhcnJheS5hcnJheShzZWxmLmJhZHR5cGVjb2RlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5leHRlbmQsIGIpCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYS5leHRlbmQoc2VsZi5leGFtcGxlWzo6LTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgYSwKKyAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZStzZWxmLmV4YW1wbGVbOjotMV0pCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX3dpdGhfaXRlcmFibGVfYXJndW1lbnQoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBpdGVyKHNlbGYuZXhhbXBsZSkpCisgICAgICAgIGIgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKworICAgICAgICAjIG5vbi1pdGVyYWJsZSBhcmd1bWVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFycmF5LmFycmF5LCBzZWxmLnR5cGVjb2RlLCAxMCkKKworICAgICAgICAjIHBhc3MgdGhyb3VnaCBlcnJvcnMgcmFpc2VkIGluIF9faXRlcl9fCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgVW5pY29kZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgYXJyYXkuYXJyYXksIHNlbGYudHlwZWNvZGUsIEEoKSkKKworICAgICAgICAjIHBhc3MgdGhyb3VnaCBlcnJvcnMgcmFpc2VkIGluIG5leHQoKQorICAgICAgICBkZWYgQigpOgorICAgICAgICAgICAgcmFpc2UgVW5pY29kZUVycm9yCisgICAgICAgICAgICB5aWVsZCBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgYXJyYXkuYXJyYXksIHNlbGYudHlwZWNvZGUsIEIoKSkKKworICAgIGRlZiB0ZXN0X2NvdmVyaXRlcnRyYXZlcnNlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICBsID0gW2l0ZXIoYSldCisgICAgICAgIGwuYXBwZW5kKGwpCisgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfYnVmZmVyKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBiID0gYnVmZmVyKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYlswXSwgYS50b3N0cmluZygpWzBdKQorCisgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKKyAgICAgICAgcyA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgcCA9IHByb3h5KHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC50b3N0cmluZygpLCBzLnRvc3RyaW5nKCkpCisgICAgICAgIHMgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlZmVyZW5jZUVycm9yLCBsZW4sIHApCisKKyAgICBkZWYgdGVzdF9idWdfNzgyMzY5KHNlbGYpOgorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAiZ2V0cmVmY291bnQiKToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgICAgICBiID0gYXJyYXkuYXJyYXkoJ0InLCByYW5nZSg2NCkpCisgICAgICAgICAgICByYyA9IHN5cy5nZXRyZWZjb3VudCgxMCkKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgICAgICBiID0gYXJyYXkuYXJyYXkoJ0InLCByYW5nZSg2NCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCBzeXMuZ2V0cmVmY291bnQoMTApKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nfd2l0aF9rd2FyZ3Moc2VsZik6CisgICAgICAgICMgU0YgYnVnICMxNDg2NjYzIC0tIHRoaXMgdXNlZCB0byBlcnJvbmVvdXNseSByYWlzZSBhIFR5cGVFcnJvcgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgJycsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIEFycmF5U3ViY2xhc3NXaXRoS3dhcmdzKCdiJywgbmV3YXJnPTEpCisKKworY2xhc3MgU3RyaW5nVGVzdChCYXNlVGVzdCk6CisKKyAgICBkZWYgdGVzdF9zZXRpdGVtKHNlbGYpOgorICAgICAgICBzdXBlcihTdHJpbmdUZXN0LCBzZWxmKS50ZXN0X3NldGl0ZW0oKQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuX19zZXRpdGVtX18sIDAsIHNlbGYuZXhhbXBsZVs6Ml0pCisKK2NsYXNzIENoYXJhY3RlclRlc3QoU3RyaW5nVGVzdCk6CisgICAgdHlwZWNvZGUgPSAnYycKKyAgICBleGFtcGxlID0gJ1x4MDFhekFaXHgwMFx4ZmUnCisgICAgc21hbGxlcmV4YW1wbGUgPSAnXHgwMWF6QVlceDAwXHhmZScKKyAgICBiaWdnZXJleGFtcGxlID0gJ1x4MDFhekFaXHgwMFx4ZmYnCisgICAgb3V0c2lkZSA9ICdceDMzJworICAgIG1pbml0ZW1zaXplID0gMQorCisgICAgZGVmIHRlc3Rfc3ViYmNsYXNzaW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBFZGl0YWJsZVN0cmluZyhhcnJheS5hcnJheSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5LmFycmF5Ll9fbmV3X18oY2xzLCAnYycsIHMpCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzLCBjb2xvcj0nYmx1ZScpOgorICAgICAgICAgICAgICAgIHNlbGYuY29sb3IgPSBjb2xvcgorCisgICAgICAgICAgICBkZWYgc3RyaXAoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZls6XSA9IGFycmF5LmFycmF5KCdjJywgc2VsZi50b3N0cmluZygpLnN0cmlwKCkpCisKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0VkaXRhYmxlU3RyaW5nKCVyKScgJSBzZWxmLnRvc3RyaW5nKCkKKworICAgICAgICBzID0gRWRpdGFibGVTdHJpbmcoIlx0dGVzdFxyXG4iKQorICAgICAgICBzLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnRvc3RyaW5nKCksICJ0ZXN0IikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY29sb3IsICJibHVlIikKKyAgICAgICAgcy5jb2xvciA9ICJyZWQiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb2xvciwgInJlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5fX2RpY3RfXy5rZXlzKCksIFsiY29sb3IiXSkKKworICAgIGRlZiB0ZXN0X25vdW5pY29kZShzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYS5mcm9tdW5pY29kZSwgdW5pY29kZSgnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEudG91bmljb2RlKQorCit0ZXN0cy5hcHBlbmQoQ2hhcmFjdGVyVGVzdCkKKworaWYgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKKyAgICBjbGFzcyBVbmljb2RlVGVzdChTdHJpbmdUZXN0KToKKyAgICAgICAgdHlwZWNvZGUgPSAndScKKyAgICAgICAgZXhhbXBsZSA9IHVuaWNvZGUocidceDAxXHUyNjNhXHgwMFx1ZmVmZicsICd1bmljb2RlLWVzY2FwZScpCisgICAgICAgIHNtYWxsZXJleGFtcGxlID0gdW5pY29kZShyJ1x4MDFcdTI2M2FceDAwXHVmZWZlJywgJ3VuaWNvZGUtZXNjYXBlJykKKyAgICAgICAgYmlnZ2VyZXhhbXBsZSA9IHVuaWNvZGUocidceDAxXHUyNjNhXHgwMVx1ZmVmZicsICd1bmljb2RlLWVzY2FwZScpCisgICAgICAgIG91dHNpZGUgPSB1bmljb2RlKCdceDMzJykKKyAgICAgICAgbWluaXRlbXNpemUgPSAyCisKKyAgICAgICAgZGVmIHRlc3RfdW5pY29kZShzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXJyYXkuYXJyYXksICdiJywgdW5pY29kZSgnZm9vJywgJ2FzY2lpJykpCisKKyAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheSgndScsIHVuaWNvZGUocidceGEwXHhjMlx1MTIzNCcsICd1bmljb2RlLWVzY2FwZScpKQorICAgICAgICAgICAgYS5mcm9tdW5pY29kZSh1bmljb2RlKCcgJywgJ2FzY2lpJykpCisgICAgICAgICAgICBhLmZyb211bmljb2RlKHVuaWNvZGUoJycsICdhc2NpaScpKQorICAgICAgICAgICAgYS5mcm9tdW5pY29kZSh1bmljb2RlKCcnLCAnYXNjaWknKSkKKyAgICAgICAgICAgIGEuZnJvbXVuaWNvZGUodW5pY29kZShyJ1x4MTFhYmNceGZmXHUxMjM0JywgJ3VuaWNvZGUtZXNjYXBlJykpCisgICAgICAgICAgICBzID0gYS50b3VuaWNvZGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzLAorICAgICAgICAgICAgICAgIHVuaWNvZGUocidceGEwXHhjMlx1MTIzNCBceDExYWJjXHhmZlx1MTIzNCcsICd1bmljb2RlLWVzY2FwZScpCisgICAgICAgICAgICApCisKKyAgICAgICAgICAgIHMgPSB1bmljb2RlKHInXHgwMD0iXCdhXFxiXHg4MFx4ZmZcdTAwMDBcdTAwMDFcdTEyMzQnLCAndW5pY29kZS1lc2NhcGUnKQorICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KCd1JywgcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgcmVwcihhKSwKKyAgICAgICAgICAgICAgICByIiIiYXJyYXkoJ3UnLCB1J1x4MDA9IlwnYVxcYlx4ODBceGZmXHgwMFx4MDFcdTEyMzQnKSIiIgorICAgICAgICAgICAgKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuZnJvbXVuaWNvZGUpCisKKyAgICB0ZXN0cy5hcHBlbmQoVW5pY29kZVRlc3QpCisKK2NsYXNzIE51bWJlclRlc3QoQmFzZVRlc3QpOgorCisgICAgZGVmIHRlc3RfZXh0c2xpY2Uoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCByYW5nZSg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzo6XSwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzo6Ml0sIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFswLDIsNF0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMTo6Ml0sIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFsxLDNdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzo6LTFdLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBbNCwzLDIsMSwwXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6Oi0yXSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgWzQsMiwwXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVszOjotMl0sIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFszLDFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWy0xMDA6MTAwOl0sIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVsxMDA6LTEwMDotMV0sIGFbOjotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVstMTAwTDoxMDBMOjJMXSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgWzAsMiw0XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVsxMDAwOjIwMDA6Ml0sIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWy0xMDAwOi0yMDAwOi0yXSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgW10pKQorCisgICAgZGVmIHRlc3RfZGVsc2xpY2Uoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCByYW5nZSg1KSkKKyAgICAgICAgZGVsIGFbOjoyXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFsxLDNdKSkKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHJhbmdlKDUpKQorICAgICAgICBkZWwgYVsxOjoyXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFswLDIsNF0pKQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgcmFuZ2UoNSkpCisgICAgICAgIGRlbCBhWzE6Oi0yXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFswLDIsMyw0XSkpCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCByYW5nZSgxMCkpCisgICAgICAgIGRlbCBhWzo6MTAwMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBbMSwyLDMsNCw1LDYsNyw4LDldKSkKKyAgICAgICAgIyB0ZXN0IGlzc3VlNzc4OAorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgcmFuZ2UoMTApKQorICAgICAgICBkZWwgYVs5OjoxPDwzMzNdCisKKyAgICBkZWYgdGVzdF9hc3NpZ25tZW50KHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgcmFuZ2UoMTApKQorICAgICAgICBhWzo6Ml0gPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBbNDJdKjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgWzQyLCAxLCA0MiwgMywgNDIsIDUsIDQyLCA3LCA0MiwgOV0pKQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgcmFuZ2UoMTApKQorICAgICAgICBhWzo6LTRdID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgWzEwXSozKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIFswLCAxMCwgMiwgMywgNCwgMTAsIDYsIDcsIDggLDEwXSkpCisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCByYW5nZSg0KSkKKyAgICAgICAgYVs6Oi0xXSA9IGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBbMywgMiwgMSwgMF0pKQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgcmFuZ2UoMTApKQorICAgICAgICBiID0gYVs6XQorICAgICAgICBjID0gYVs6XQorICAgICAgICBpbnMgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCByYW5nZSgyKSkKKyAgICAgICAgYVsyOjNdID0gaW5zCisgICAgICAgIGJbc2xpY2UoMiwzKV0gPSBpbnMKKyAgICAgICAgY1syOjM6XSA9IGlucworCisgICAgZGVmIHRlc3RfaXRlcmF0aW9uY29udGFpbnMoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCByYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhKSwgcmFuZ2UoMTApKQorICAgICAgICBiID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgWzIwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWy0xXSBpbiBhLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0gbm90IGluIGEsIFRydWUpCisKKyAgICBkZWYgY2hlY2tfb3ZlcmZsb3coc2VsZiwgbG93ZXIsIHVwcGVyKToKKyAgICAgICAgIyBtZXRob2QgdG8gYmUgdXNlZCBieSBzdWJjbGFzc2VzCisKKyAgICAgICAgIyBzaG91bGQgbm90IG92ZXJmbG93IGFzc2lnbmluZyBsb3dlciBsaW1pdAorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgW2xvd2VyXSkKKyAgICAgICAgYVswXSA9IGxvd2VyCisgICAgICAgICMgc2hvdWxkIG92ZXJmbG93IGFzc2lnbmluZyBsZXNzIHRoYW4gbG93ZXIgbGltaXQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgYXJyYXkuYXJyYXksIHNlbGYudHlwZWNvZGUsIFtsb3dlci0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgYS5fX3NldGl0ZW1fXywgMCwgbG93ZXItMSkKKyAgICAgICAgIyBzaG91bGQgbm90IG92ZXJmbG93IGFzc2lnbmluZyB1cHBlciBsaW1pdAorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgW3VwcGVyXSkKKyAgICAgICAgYVswXSA9IHVwcGVyCisgICAgICAgICMgc2hvdWxkIG92ZXJmbG93IGFzc2lnbmluZyBtb3JlIHRoYW4gdXBwZXIgbGltaXQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgYXJyYXkuYXJyYXksIHNlbGYudHlwZWNvZGUsIFt1cHBlcisxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgYS5fX3NldGl0ZW1fXywgMCwgdXBwZXIrMSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzaW5nKHNlbGYpOgorICAgICAgICB0eXBlY29kZSA9IHNlbGYudHlwZWNvZGUKKyAgICAgICAgY2xhc3MgRXhhZ2dlcmF0aW5nQXJyYXkoYXJyYXkuYXJyYXkpOgorICAgICAgICAgICAgX19zbG90c19fID0gWydvZmZzZXQnXQorCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIHR5cGVjb2RlLCBkYXRhLCBvZmZzZXQpOgorICAgICAgICAgICAgICAgIHJldHVybiBhcnJheS5hcnJheS5fX25ld19fKGNscywgdHlwZWNvZGUsIGRhdGEpCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlY29kZSwgZGF0YSwgb2Zmc2V0KToKKyAgICAgICAgICAgICAgICBzZWxmLm9mZnNldCA9IG9mZnNldAorCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5LmFycmF5Ll9fZ2V0aXRlbV9fKHNlbGYsIGkpICsgc2VsZi5vZmZzZXQKKworICAgICAgICBhID0gRXhhZ2dlcmF0aW5nQXJyYXkoc2VsZi50eXBlY29kZSwgWzMsIDYsIDcsIDExXSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFbnRyeUVxdWFsKGFbMF0sIDcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIGEsICJjb2xvciIsICJibHVlIikKKworY2xhc3MgU2lnbmVkTnVtYmVyVGVzdChOdW1iZXJUZXN0KToKKyAgICBleGFtcGxlID0gWy0xLCAwLCAxLCA0MiwgMHg3Zl0KKyAgICBzbWFsbGVyZXhhbXBsZSA9IFstMSwgMCwgMSwgNDIsIDB4N2VdCisgICAgYmlnZ2VyZXhhbXBsZSA9IFstMSwgMCwgMSwgNDMsIDB4N2ZdCisgICAgb3V0c2lkZSA9IDIzCisKKyAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCisgICAgICAgIGxvd2VyID0gLTEgKiBsb25nKHBvdygyLCBhLml0ZW1zaXplICogOCAtIDEpKQorICAgICAgICB1cHBlciA9IGxvbmcocG93KDIsIGEuaXRlbXNpemUgKiA4IC0gMSkpIC0gMUwKKyAgICAgICAgc2VsZi5jaGVja19vdmVyZmxvdyhsb3dlciwgdXBwZXIpCisKK2NsYXNzIFVuc2lnbmVkTnVtYmVyVGVzdChOdW1iZXJUZXN0KToKKyAgICBleGFtcGxlID0gWzAsIDEsIDE3LCAyMywgNDIsIDB4ZmZdCisgICAgc21hbGxlcmV4YW1wbGUgPSBbMCwgMSwgMTcsIDIzLCA0MiwgMHhmZV0KKyAgICBiaWdnZXJleGFtcGxlID0gWzAsIDEsIDE3LCAyMywgNDMsIDB4ZmZdCisgICAgb3V0c2lkZSA9IDB4YWEKKworICAgIGRlZiB0ZXN0X292ZXJmbG93KHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKKyAgICAgICAgbG93ZXIgPSAwCisgICAgICAgIHVwcGVyID0gbG9uZyhwb3coMiwgYS5pdGVtc2l6ZSAqIDgpKSAtIDFMCisgICAgICAgIHNlbGYuY2hlY2tfb3ZlcmZsb3cobG93ZXIsIHVwcGVyKQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9zaXplb2Zfd2l0aF9idWZmZXIoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGJhc2VzaXplID0gdGVzdF9zdXBwb3J0LmNhbGN2b2Jqc2l6ZSgnNFAnKQorICAgICAgICBidWZmZXJfc2l6ZSA9IGEuYnVmZmVyX2luZm8oKVsxXSAqIGEuaXRlbXNpemUKKyAgICAgICAgdGVzdF9zdXBwb3J0LmNoZWNrX3NpemVvZihzZWxmLCBhLCBiYXNlc2l6ZSArIGJ1ZmZlcl9zaXplKQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9zaXplb2Zfd2l0aG91dF9idWZmZXIoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICBiYXNlc2l6ZSA9IHRlc3Rfc3VwcG9ydC5jYWxjdm9ianNpemUoJzRQJykKKyAgICAgICAgdGVzdF9zdXBwb3J0LmNoZWNrX3NpemVvZihzZWxmLCBhLCBiYXNlc2l6ZSkKKworCitjbGFzcyBCeXRlVGVzdChTaWduZWROdW1iZXJUZXN0KToKKyAgICB0eXBlY29kZSA9ICdiJworICAgIG1pbml0ZW1zaXplID0gMQordGVzdHMuYXBwZW5kKEJ5dGVUZXN0KQorCitjbGFzcyBVbnNpZ25lZEJ5dGVUZXN0KFVuc2lnbmVkTnVtYmVyVGVzdCk6CisgICAgdHlwZWNvZGUgPSAnQicKKyAgICBtaW5pdGVtc2l6ZSA9IDEKK3Rlc3RzLmFwcGVuZChVbnNpZ25lZEJ5dGVUZXN0KQorCitjbGFzcyBTaG9ydFRlc3QoU2lnbmVkTnVtYmVyVGVzdCk6CisgICAgdHlwZWNvZGUgPSAnaCcKKyAgICBtaW5pdGVtc2l6ZSA9IDIKK3Rlc3RzLmFwcGVuZChTaG9ydFRlc3QpCisKK2NsYXNzIFVuc2lnbmVkU2hvcnRUZXN0KFVuc2lnbmVkTnVtYmVyVGVzdCk6CisgICAgdHlwZWNvZGUgPSAnSCcKKyAgICBtaW5pdGVtc2l6ZSA9IDIKK3Rlc3RzLmFwcGVuZChVbnNpZ25lZFNob3J0VGVzdCkKKworY2xhc3MgSW50VGVzdChTaWduZWROdW1iZXJUZXN0KToKKyAgICB0eXBlY29kZSA9ICdpJworICAgIG1pbml0ZW1zaXplID0gMgordGVzdHMuYXBwZW5kKEludFRlc3QpCisKK2NsYXNzIFVuc2lnbmVkSW50VGVzdChVbnNpZ25lZE51bWJlclRlc3QpOgorICAgIHR5cGVjb2RlID0gJ0knCisgICAgbWluaXRlbXNpemUgPSAyCit0ZXN0cy5hcHBlbmQoVW5zaWduZWRJbnRUZXN0KQorCitjbGFzcyBMb25nVGVzdChTaWduZWROdW1iZXJUZXN0KToKKyAgICB0eXBlY29kZSA9ICdsJworICAgIG1pbml0ZW1zaXplID0gNAordGVzdHMuYXBwZW5kKExvbmdUZXN0KQorCitjbGFzcyBVbnNpZ25lZExvbmdUZXN0KFVuc2lnbmVkTnVtYmVyVGVzdCk6CisgICAgdHlwZWNvZGUgPSAnTCcKKyAgICBtaW5pdGVtc2l6ZSA9IDQKK3Rlc3RzLmFwcGVuZChVbnNpZ25lZExvbmdUZXN0KQorCitjbGFzcyBGUFRlc3QoTnVtYmVyVGVzdCk6CisgICAgZXhhbXBsZSA9IFstNDIuMCwgMCwgNDIsIDFlNSwgLTFlMTBdCisgICAgc21hbGxlcmV4YW1wbGUgPSBbLTQyLjAsIDAsIDQyLCAxZTUsIC0yZTEwXQorICAgIGJpZ2dlcmV4YW1wbGUgPSBbLTQyLjAsIDAsIDQyLCAxZTUsIDFlMTBdCisgICAgb3V0c2lkZSA9IDIzCisKKyAgICBkZWYgYXNzZXJ0RW50cnlFcXVhbChzZWxmLCBlbnRyeTEsIGVudHJ5Mik6CisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZW50cnkxLCBlbnRyeTIpCisKKyAgICBkZWYgdGVzdF9ieXRlc3dhcChzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLmJ5dGVzd2FwLCA0MikKKyAgICAgICAgaWYgYS5pdGVtc2l6ZSBpbiAoMSwgMiwgNCwgOCk6CisgICAgICAgICAgICBiID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQorICAgICAgICAgICAgYi5ieXRlc3dhcCgpCisgICAgICAgICAgICBpZiBhLml0ZW1zaXplPT0xOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBPbiBhbHBoYXMgdHJlYXRpbmcgdGhlIGJ5dGUgc3dhcHBlZCBiaXQgcGF0dGVycyBhcworICAgICAgICAgICAgICAgICMgZmxvYXRzL2RvdWJsZXMgcmVzdWx0cyBpbiBmbG9hdGluZyBwb2ludCBleGNlcHRpb25zCisgICAgICAgICAgICAgICAgIyA9PiBjb21wYXJlIHRoZSA4Yml0IHN0cmluZyB2YWx1ZXMgaW5zdGVhZAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYS50b3N0cmluZygpLCBiLnRvc3RyaW5nKCkpCisgICAgICAgICAgICBiLmJ5dGVzd2FwKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKworY2xhc3MgRmxvYXRUZXN0KEZQVGVzdCk6CisgICAgdHlwZWNvZGUgPSAnZicKKyAgICBtaW5pdGVtc2l6ZSA9IDQKK3Rlc3RzLmFwcGVuZChGbG9hdFRlc3QpCisKK2NsYXNzIERvdWJsZVRlc3QoRlBUZXN0KToKKyAgICB0eXBlY29kZSA9ICdkJworICAgIG1pbml0ZW1zaXplID0gOAorCisgICAgZGVmIHRlc3RfYWxsb2Nfb3ZlcmZsb3coc2VsZik6CisgICAgICAgIGZyb20gc3lzIGltcG9ydCBtYXhzaXplCisgICAgICAgIGEgPSBhcnJheS5hcnJheSgnZCcsIFstMV0qNjU1MzYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGEgKj0gbWF4c2l6ZS8vNjU1MzYgKyAxCisgICAgICAgIGV4Y2VwdCBNZW1vcnlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQXJyYXkgb2Ygc2l6ZSA+IG1heHNpemUgY3JlYXRlZCAtIE1lbW9yeUVycm9yIGV4cGVjdGVkIikKKyAgICAgICAgYiA9IGFycmF5LmFycmF5KCdkJywgWyAyLjcxODI4MTgzLCAzLjE0MTU5MjY1LCAtMV0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGIgKiAobWF4c2l6ZS8vMyArIDEpCisgICAgICAgIGV4Y2VwdCBNZW1vcnlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQXJyYXkgb2Ygc2l6ZSA+IG1heHNpemUgY3JlYXRlZCAtIE1lbW9yeUVycm9yIGV4cGVjdGVkIikKKwordGVzdHMuYXBwZW5kKERvdWJsZVRlc3QpCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICBpbXBvcnQgc3lzCisKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKworICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZworICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgY291bnRzID0gW05vbmVdICogNQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKGNvdW50cykpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgcHJpbnQgY291bnRzCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FzY2lpX2Zvcm1hdGQucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9hc2NpaV9mb3JtYXRkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YTYxNmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9hc2NpaV9mb3JtYXRkLnB5CkBAIC0wLDAgKzEsNTggQEAKKyMgUHlPU19hc2NpaV9mb3JtYXRkIGlzIGRlcHJlY2F0ZWQgYW5kIG5vdCBjYWxsZWQgZnJvbSBhbnl3aGVyZSBpbgorIyAgUHl0aG9uIGl0c2VsZi4gU28gdGhpcyBtb2R1bGUgaXMgdGhlIG9ubHkgcGxhY2UgaXQgZ2V0cyB0ZXN0ZWQuCisjIFRlc3QgdGhhdCBpdCB3b3JrcywgYW5kIHRlc3QgdGhhdCBpdCdzIGRlcHJlY2F0ZWQuCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2hlY2tfd2FybmluZ3MsIHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQorCisjIFNraXAgdGVzdHMgaWYgX2N0eXBlcyBtb2R1bGUgZG9lcyBub3QgZXhpc3QKK2ltcG9ydF9tb2R1bGUoJ19jdHlwZXMnKQorCitmcm9tIGN0eXBlcyBpbXBvcnQgcHl0aG9uYXBpLCBjcmVhdGVfc3RyaW5nX2J1ZmZlciwgc2l6ZW9mLCBieXJlZiwgY19kb3VibGUKK1B5T1NfYXNjaWlfZm9ybWF0ZCA9IHB5dGhvbmFwaS5QeU9TX2FzY2lpX2Zvcm1hdGQKKworCitjbGFzcyBGb3JtYXREZXByZWNhdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9kZXByZWNhdGlvbihzZWxmKToKKyAgICAgICAgYnVmID0gY3JlYXRlX3N0cmluZ19idWZmZXIoJyAnICogMTAwKQorCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCdQeU9TX2FzY2lpX2Zvcm1hdGQgaXMgZGVwcmVjYXRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgUHlPU19hc2NpaV9mb3JtYXRkKGJ5cmVmKGJ1ZiksIHNpemVvZihidWYpLCAnJSsuMTBmJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2RvdWJsZSgxMC4wKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAnKzEwLjAwMDAwMDAwMDAnKQorCisKK2NsYXNzIEZvcm1hdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIGVuc3VyZSB0aGF0LCBmb3IgdGhlIHJlc3RyaWN0ZWQgc2V0IG9mIGZvcm1hdCBjb2RlcywKKyAgICAjICUtZm9ybWF0dGluZyByZXR1cm5zIHRoZSBzYW1lIHZhbHVlcyBvcyBQeU9TX2FzY2lpX2Zvcm1hdGQKKyAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6CisgICAgICAgIGJ1ZiA9IGNyZWF0ZV9zdHJpbmdfYnVmZmVyKCcgJyAqIDEwMCkKKworICAgICAgICB0ZXN0cyA9IFsKKyAgICAgICAgICAgICgnJWYnLCAxMDAuMCksCisgICAgICAgICAgICAoJyVnJywgMTAwLjApLAorICAgICAgICAgICAgKCclI2cnLCAxMDAuMCksCisgICAgICAgICAgICAoJyUjLjJnJywgMTAwLjApLAorICAgICAgICAgICAgKCclIy4yZycsIDEyMy40NTY3KSwKKyAgICAgICAgICAgICgnJSMuMmcnLCAxLjIzNDU2N2UyMDApLAorICAgICAgICAgICAgKCclZScsIDEuMjM0NTY3ZTIwMCksCisgICAgICAgICAgICAoJyVlJywgMS4yMzQpLAorICAgICAgICAgICAgKCclK2UnLCAxLjIzNCksCisgICAgICAgICAgICAoJyUtZScsIDEuMjM0KSwKKyAgICAgICAgICAgIF0KKworICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnUHlPU19hc2NpaV9mb3JtYXRkIGlzIGRlcHJlY2F0ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIGZvciBmb3JtYXQsIHZhbCBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICBQeU9TX2FzY2lpX2Zvcm1hdGQoYnlyZWYoYnVmKSwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY19kb3VibGUodmFsKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgZm9ybWF0ICUgdmFsKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoRm9ybWF0RGVwcmVjYXRpb25UZXN0cywgRm9ybWF0VGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FzdC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjgwMTk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYXN0LnB5CkBAIC0wLDAgKzEsNTgwIEBACitpbXBvcnQgc3lzLCBpdGVydG9vbHMsIHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IGFzdAorCitkZWYgdG9fdHVwbGUodCk6CisgICAgaWYgdCBpcyBOb25lIG9yIGlzaW5zdGFuY2UodCwgKGJhc2VzdHJpbmcsIGludCwgbG9uZywgY29tcGxleCkpOgorICAgICAgICByZXR1cm4gdAorICAgIGVsaWYgaXNpbnN0YW5jZSh0LCBsaXN0KToKKyAgICAgICAgcmV0dXJuIFt0b190dXBsZShlKSBmb3IgZSBpbiB0XQorICAgIHJlc3VsdCA9IFt0Ll9fY2xhc3NfXy5fX25hbWVfX10KKyAgICBpZiBoYXNhdHRyKHQsICdsaW5lbm8nKSBhbmQgaGFzYXR0cih0LCAnY29sX29mZnNldCcpOgorICAgICAgICByZXN1bHQuYXBwZW5kKCh0LmxpbmVubywgdC5jb2xfb2Zmc2V0KSkKKyAgICBpZiB0Ll9maWVsZHMgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIHR1cGxlKHJlc3VsdCkKKyAgICBmb3IgZiBpbiB0Ll9maWVsZHM6CisgICAgICAgIHJlc3VsdC5hcHBlbmQodG9fdHVwbGUoZ2V0YXR0cih0LCBmKSkpCisgICAgcmV0dXJuIHR1cGxlKHJlc3VsdCkKKworCisjIFRoZXNlIHRlc3RzIGFyZSBjb21waWxlZCB0aHJvdWdoICJleGVjIgorIyBUaGVyZSBzaG91bGQgYmUgYXRsZWFzdCBvbmUgdGVzdCBwZXIgc3RhdGVtZW50CitleGVjX3Rlc3RzID0gWworICAgICMgTm9uZQorICAgICJOb25lIiwKKyAgICAjIEZ1bmN0aW9uRGVmCisgICAgImRlZiBmKCk6IHBhc3MiLAorICAgICMgRnVuY3Rpb25EZWYgd2l0aCBhcmcKKyAgICAiZGVmIGYoYSk6IHBhc3MiLAorICAgICMgRnVuY3Rpb25EZWYgd2l0aCBhcmcgYW5kIGRlZmF1bHQgdmFsdWUKKyAgICAiZGVmIGYoYT0wKTogcGFzcyIsCisgICAgIyBGdW5jdGlvbkRlZiB3aXRoIHZhcmFyZ3MKKyAgICAiZGVmIGYoKmFyZ3MpOiBwYXNzIiwKKyAgICAjIEZ1bmN0aW9uRGVmIHdpdGgga3dhcmdzCisgICAgImRlZiBmKCoqa3dhcmdzKTogcGFzcyIsCisgICAgIyBGdW5jdGlvbkRlZiB3aXRoIGFsbCBraW5kIG9mIGFyZ3MKKyAgICAiZGVmIGYoYSwgYj0xLCBjPU5vbmUsIGQ9W10sIGU9e30sICphcmdzLCAqKmt3YXJncyk6IHBhc3MiLAorICAgICMgQ2xhc3NEZWYKKyAgICAiY2xhc3MgQzpwYXNzIiwKKyAgICAjIENsYXNzRGVmLCBuZXcgc3R5bGUgY2xhc3MKKyAgICAiY2xhc3MgQyhvYmplY3QpOiBwYXNzIiwKKyAgICAjIFJldHVybgorICAgICJkZWYgZigpOnJldHVybiAxIiwKKyAgICAjIERlbGV0ZQorICAgICJkZWwgdiIsCisgICAgIyBBc3NpZ24KKyAgICAidiA9IDEiLAorICAgICMgQXVnQXNzaWduCisgICAgInYgKz0gMSIsCisgICAgIyBQcmludAorICAgICJwcmludCA+PmYsIDEsICIsCisgICAgIyBGb3IKKyAgICAiZm9yIHYgaW4gdjpwYXNzIiwKKyAgICAjIFdoaWxlCisgICAgIndoaWxlIHY6cGFzcyIsCisgICAgIyBJZgorICAgICJpZiB2OnBhc3MiLAorICAgICMgUmFpc2UKKyAgICAicmFpc2UgRXhjZXB0aW9uLCAnc3RyaW5nJyIsCisgICAgIyBUcnlFeGNlcHQKKyAgICAidHJ5OlxuICBwYXNzXG5leGNlcHQgRXhjZXB0aW9uOlxuICBwYXNzIiwKKyAgICAjIFRyeUZpbmFsbHkKKyAgICAidHJ5OlxuICBwYXNzXG5maW5hbGx5OlxuICBwYXNzIiwKKyAgICAjIEFzc2VydAorICAgICJhc3NlcnQgdiIsCisgICAgIyBJbXBvcnQKKyAgICAiaW1wb3J0IHN5cyIsCisgICAgIyBJbXBvcnRGcm9tCisgICAgImZyb20gc3lzIGltcG9ydCB2IiwKKyAgICAjIEV4ZWMKKyAgICAiZXhlYyAndiciLAorICAgICMgR2xvYmFsCisgICAgImdsb2JhbCB2IiwKKyAgICAjIEV4cHIKKyAgICAiMSIsCisgICAgIyBQYXNzLAorICAgICJwYXNzIiwKKyAgICAjIEJyZWFrCisgICAgImJyZWFrIiwKKyAgICAjIENvbnRpbnVlCisgICAgImNvbnRpbnVlIiwKKyAgICAjIGZvciBzdGF0ZW1lbnRzIHdpdGggbmFrZWQgdHVwbGVzIChzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTY3MDQpCisgICAgImZvciBhLGIgaW4gYzogcGFzcyIsCisgICAgIlsoYSxiKSBmb3IgYSxiIGluIGNdIiwKKyAgICAiKChhLGIpIGZvciBhLGIgaW4gYykiLAorICAgICIoKGEsYikgZm9yIChhLGIpIGluIGMpIiwKKyAgICAjIE11bHRpbGluZSBnZW5lcmF0b3IgZXhwcmVzc2lvbiAodGVzdCBmb3IgLmxpbmVubyAmIC5jb2xfb2Zmc2V0KQorICAgICIiIigKKyAgICAoCisgICAgQWEKKyAgICAsCisgICAgICAgQmIKKyAgICApCisgICAgZm9yCisgICAgQWEKKyAgICAsCisgICAgQmIgaW4gQ2MKKyAgICApIiIiLAorICAgICMgZGljdGNvbXAKKyAgICAie2EgOiBiIGZvciB3IGluIHggZm9yIG0gaW4gcCBpZiBnfSIsCisgICAgIyBkaWN0Y29tcCB3aXRoIG5ha2VkIHR1cGxlCisgICAgInthIDogYiBmb3Igdix3IGluIHh9IiwKKyAgICAjIHNldGNvbXAKKyAgICAie3IgZm9yIGwgaW4geCBpZiBnfSIsCisgICAgIyBzZXRjb21wIHdpdGggbmFrZWQgdHVwbGUKKyAgICAie3IgZm9yIGwsbSBpbiB4fSIsCitdCisKKyMgVGhlc2UgYXJlIGNvbXBpbGVkIHRocm91Z2ggInNpbmdsZSIKKyMgYmVjYXVzZSBvZiBvdmVybGFwIHdpdGggImV2YWwiLCBpdCBqdXN0IHRlc3RzIHdoYXQKKyMgY2FuJ3QgYmUgdGVzdGVkIHdpdGggImV2YWwiCitzaW5nbGVfdGVzdHMgPSBbCisgICAgIjErMiIKK10KKworIyBUaGVzZSBhcmUgY29tcGlsZWQgdGhyb3VnaCAiZXZhbCIKKyMgSXQgc2hvdWxkIHRlc3QgYWxsIGV4cHJlc3Npb25zCitldmFsX3Rlc3RzID0gWworICAjIE5vbmUKKyAgIk5vbmUiLAorICAjIEJvb2xPcAorICAiYSBhbmQgYiIsCisgICMgQmluT3AKKyAgImEgKyBiIiwKKyAgIyBVbmFyeU9wCisgICJub3QgdiIsCisgICMgTGFtYmRhCisgICJsYW1iZGE6Tm9uZSIsCisgICMgRGljdAorICAieyAxOjIgfSIsCisgICMgRW1wdHkgZGljdAorICAie30iLAorICAjIFNldAorICAie05vbmUsfSIsCisgICMgTXVsdGlsaW5lIGRpY3QgKHRlc3QgZm9yIC5saW5lbm8gJiAuY29sX29mZnNldCkKKyAgIiIieworICAgICAgMQorICAgICAgICA6CisgICAgICAgICAgMgorICAgICB9IiIiLAorICAjIExpc3RDb21wCisgICJbYSBmb3IgYiBpbiBjIGlmIGRdIiwKKyAgIyBHZW5lcmF0b3JFeHAKKyAgIihhIGZvciBiIGluIGMgaWYgZCkiLAorICAjIFlpZWxkIC0geWllbGQgZXhwcmVzc2lvbnMgY2FuJ3Qgd29yayBvdXRzaWRlIGEgZnVuY3Rpb24KKyAgIworICAjIENvbXBhcmUKKyAgIjEgPCAyIDwgMyIsCisgICMgQ2FsbAorICAiZigxLDIsYz0zLCpkLCoqZSkiLAorICAjIFJlcHIKKyAgImB2YCIsCisgICMgTnVtCisgICIxMEwiLAorICAjIFN0cgorICAiJ3N0cmluZyciLAorICAjIEF0dHJpYnV0ZQorICAiYS5iIiwKKyAgIyBTdWJzY3JpcHQKKyAgImFbYjpjXSIsCisgICMgTmFtZQorICAidiIsCisgICMgTGlzdAorICAiWzEsMiwzXSIsCisgICMgRW1wdHkgbGlzdAorICAiW10iLAorICAjIFR1cGxlCisgICIxLDIsMyIsCisgICMgVHVwbGUKKyAgIigxLDIsMykiLAorICAjIEVtcHR5IHR1cGxlCisgICIoKSIsCisgICMgQ29tYmluYXRpb24KKyAgImEuYi5jLmQoYS5iWzE6Ml0pIiwKKworXQorCisjIFRPRE86IGV4cHJfY29udGV4dCwgc2xpY2UsIGJvb2xvcCwgb3BlcmF0b3IsIHVuYXJ5b3AsIGNtcG9wLCBjb21wcmVoZW5zaW9uCisjIGV4Y2VwdGhhbmRsZXIsIGFyZ3VtZW50cywga2V5d29yZHMsIGFsaWFzCisKK2NsYXNzIEFTVF9UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2Fzc2VydFRydWVvcmRlcihzZWxmLCBhc3Rfbm9kZSwgcGFyZW50X3Bvcyk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFzdF9ub2RlLCBhc3QuQVNUKSBvciBhc3Rfbm9kZS5fZmllbGRzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShhc3Rfbm9kZSwgKGFzdC5leHByLCBhc3Quc3RtdCwgYXN0LmV4Y2VwdGhhbmRsZXIpKToKKyAgICAgICAgICAgIG5vZGVfcG9zID0gKGFzdF9ub2RlLmxpbmVubywgYXN0X25vZGUuY29sX29mZnNldCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlX3BvcyA+PSBwYXJlbnRfcG9zKQorICAgICAgICAgICAgcGFyZW50X3BvcyA9IChhc3Rfbm9kZS5saW5lbm8sIGFzdF9ub2RlLmNvbF9vZmZzZXQpCisgICAgICAgIGZvciBuYW1lIGluIGFzdF9ub2RlLl9maWVsZHM6CisgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIoYXN0X25vZGUsIG5hbWUpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKKyAgICAgICAgICAgICAgICBmb3IgY2hpbGQgaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydFRydWVvcmRlcihjaGlsZCwgcGFyZW50X3BvcykKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZW9yZGVyKHZhbHVlLCBwYXJlbnRfcG9zKQorCisgICAgZGVmIHRlc3RfQVNUX29iamVjdHMoc2VsZik6CisgICAgICAgIHggPSBhc3QuQVNUKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9maWVsZHMsICgpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgeC52YXJhcmcKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHguZm9vYmFyID0gMjEKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGFzdC5BU1QobGluZW5vPTIpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgIyAiX2FzdC5BU1QgY29uc3RydWN0b3IgdGFrZXMgMCBwb3NpdGlvbmFsIGFyZ3VtZW50cyIKKyAgICAgICAgICAgIGFzdC5BU1QoMikKKworICAgIGRlZiB0ZXN0X3NuaXBwZXRzKHNlbGYpOgorICAgICAgICBmb3IgaW5wdXQsIG91dHB1dCwga2luZCBpbiAoKGV4ZWNfdGVzdHMsIGV4ZWNfcmVzdWx0cywgImV4ZWMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaW5nbGVfdGVzdHMsIHNpbmdsZV9yZXN1bHRzLCAic2luZ2xlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXZhbF90ZXN0cywgZXZhbF9yZXN1bHRzLCAiZXZhbCIpKToKKyAgICAgICAgICAgIGZvciBpLCBvIGluIGl0ZXJ0b29scy5pemlwKGlucHV0LCBvdXRwdXQpOgorICAgICAgICAgICAgICAgIGFzdF90cmVlID0gY29tcGlsZShpLCAiPyIsIGtpbmQsIGFzdC5QeUNGX09OTFlfQVNUKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG9fdHVwbGUoYXN0X3RyZWUpLCBvKQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydFRydWVvcmRlcihhc3RfdHJlZSwgKDAsIDApKQorCisgICAgZGVmIHRlc3Rfc2xpY2Uoc2VsZik6CisgICAgICAgIHNsYyA9IGFzdC5wYXJzZSgieFs6Ol0iKS5ib2R5WzBdLnZhbHVlLnNsaWNlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNsYy51cHBlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2xjLmxvd2VyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2xjLnN0ZXAsIGFzdC5OYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsYy5zdGVwLmlkLCAiTm9uZSIpCisKKyAgICBkZWYgdGVzdF9mcm9tX2ltcG9ydChzZWxmKToKKyAgICAgICAgaW0gPSBhc3QucGFyc2UoImZyb20gLiBpbXBvcnQgeSIpLmJvZHlbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW0ubW9kdWxlKQorCisgICAgZGVmIHRlc3Rfbm9uX2ludGVybmVkX2Z1dHVyZV9mcm9tX2FzdChzZWxmKToKKyAgICAgICAgbW9kID0gYXN0LnBhcnNlKCJmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vZC5ib2R5WzBdLCBhc3QuSW1wb3J0RnJvbSkKKyAgICAgICAgbW9kLmJvZHlbMF0ubW9kdWxlID0gIiBfX2Z1dHVyZV9fICIuc3RyaXAoKQorICAgICAgICBjb21waWxlKG1vZCwgIjx0ZXN0PiIsICJleGVjIikKKworICAgIGRlZiB0ZXN0X2Jhc2VfY2xhc3NlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoYXN0LkZvciwgYXN0LnN0bXQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhhc3QuTmFtZSwgYXN0LmV4cHIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhhc3Quc3RtdCwgYXN0LkFTVCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGFzdC5leHByLCBhc3QuQVNUKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoYXN0LmNvbXByZWhlbnNpb24sIGFzdC5BU1QpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhhc3QuR3QsIGFzdC5BU1QpKQorCisgICAgZGVmIHRlc3RfZmllbGRfYXR0cl9leGlzdGVuY2Uoc2VsZik6CisgICAgICAgIGZvciBuYW1lLCBpdGVtIGluIGFzdC5fX2RpY3RfXy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlbSwgdHlwZSkgYW5kIG5hbWUgIT0gJ0FTVCcgYW5kIG5hbWVbMF0uaXN1cHBlcigpOgorICAgICAgICAgICAgICAgIHggPSBpdGVtKCkKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHgsIGFzdC5BU1QpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoeC5fZmllbGRzKSwgdHVwbGUpCisKKyAgICBkZWYgdGVzdF9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIHggPSBhc3QuYXJndW1lbnRzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9maWVsZHMsICgnYXJncycsICd2YXJhcmcnLCAna3dhcmcnLCAnZGVmYXVsdHMnKSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHgudmFyYXJnCisKKyAgICAgICAgeCA9IGFzdC5hcmd1bWVudHMoMSwgMiwgMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnZhcmFyZywgMikKKworICAgIGRlZiB0ZXN0X2ZpZWxkX2F0dHJfd3JpdGFibGUoc2VsZik6CisgICAgICAgIHggPSBhc3QuTnVtKCkKKyAgICAgICAgIyBXZSBjYW4gYXNzaWduIHRvIF9maWVsZHMKKyAgICAgICAgeC5fZmllbGRzID0gNjY2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fZmllbGRzLCA2NjYpCisKKyAgICBkZWYgdGVzdF9jbGFzc2F0dHJzKHNlbGYpOgorICAgICAgICB4ID0gYXN0Lk51bSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fZmllbGRzLCAoJ24nLCkpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICB4Lm4KKworICAgICAgICB4ID0gYXN0Lk51bSg0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Lm4sIDQyKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgeC5saW5lbm8KKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHguZm9vYmFyCisKKyAgICAgICAgeCA9IGFzdC5OdW0obGluZW5vPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5saW5lbm8sIDIpCisKKyAgICAgICAgeCA9IGFzdC5OdW0oNDIsIGxpbmVubz0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubGluZW5vLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX2ZpZWxkcywgKCduJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubiwgNDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhc3QuTnVtLCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFzdC5OdW0sIDEsIDIsIGxpbmVubz0wKQorCisgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBib2R5ID0gW2FzdC5OdW0oNDIpXQorICAgICAgICB4ID0gYXN0Lk1vZHVsZShib2R5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYm9keSwgYm9keSkKKworICAgIGRlZiB0ZXN0X25vZGVjbGFzc2VzKHNlbGYpOgorICAgICAgICAjIFplcm8gYXJndW1lbnRzIGNvbnN0cnVjdG9yIGV4cGxpY2l0ZWx5IGFsbG93ZWQKKyAgICAgICAgeCA9IGFzdC5CaW5PcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fZmllbGRzLCAoJ2xlZnQnLCAnb3AnLCAncmlnaHQnKSkKKworICAgICAgICAjIFJhbmRvbSBhdHRyaWJ1dGUgYWxsb3dlZCB0b28KKyAgICAgICAgeC5mb29iYXJiYXogPSA1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5mb29iYXJiYXosIDUpCisKKyAgICAgICAgbjEgPSBhc3QuTnVtKDEpCisgICAgICAgIG4zID0gYXN0Lk51bSgzKQorICAgICAgICBhZGRvcCA9IGFzdC5BZGQoKQorICAgICAgICB4ID0gYXN0LkJpbk9wKG4xLCBhZGRvcCwgbjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5sZWZ0LCBuMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Lm9wLCBhZGRvcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnJpZ2h0LCBuMykKKworICAgICAgICB4ID0gYXN0LkJpbk9wKDEsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5sZWZ0LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgub3AsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5yaWdodCwgMykKKworICAgICAgICB4ID0gYXN0LkJpbk9wKDEsIDIsIDMsIGxpbmVubz0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubGVmdCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Lm9wLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgucmlnaHQsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5saW5lbm8sIDApCisKKyAgICAgICAgIyBub2RlIHJhaXNlcyBleGNlcHRpb24gd2hlbiBub3QgZ2l2ZW4gZW5vdWdoIGFyZ3VtZW50cworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFzdC5CaW5PcCwgMSwgMikKKyAgICAgICAgIyBub2RlIHJhaXNlcyBleGNlcHRpb24gd2hlbiBnaXZlbiB0b28gbWFueSBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhc3QuQmluT3AsIDEsIDIsIDMsIDQpCisgICAgICAgICMgbm9kZSByYWlzZXMgZXhjZXB0aW9uIHdoZW4gbm90IGdpdmVuIGVub3VnaCBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhc3QuQmluT3AsIDEsIDIsIGxpbmVubz0wKQorICAgICAgICAjIG5vZGUgcmFpc2VzIGV4Y2VwdGlvbiB3aGVuIGdpdmVuIHRvbyBtYW55IGFyZ3VtZW50cworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFzdC5CaW5PcCwgMSwgMiwgMywgNCwgbGluZW5vPTApCisKKyAgICAgICAgIyBjYW4gc2V0IGF0dHJpYnV0ZXMgdGhyb3VnaCBrd2FyZ3MgdG9vCisgICAgICAgIHggPSBhc3QuQmluT3AobGVmdD0xLCBvcD0yLCByaWdodD0zLCBsaW5lbm89MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmxlZnQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5vcCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnJpZ2h0LCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubGluZW5vLCAwKQorCisgICAgICAgICMgUmFuZG9tIGt3YXJncyBhbHNvIGFsbG93ZWQKKyAgICAgICAgeCA9IGFzdC5CaW5PcCgxLCAyLCAzLCBmb29iYXJiYXo9NDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5mb29iYXJiYXosIDQyKQorCisgICAgZGVmIHRlc3Rfbm9fZmllbGRzKHNlbGYpOgorICAgICAgICAjIHRoaXMgdXNlZCB0byBmYWlsIGJlY2F1c2UgU3ViLl9maWVsZHMgd2FzIE5vbmUKKyAgICAgICAgeCA9IGFzdC5TdWIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX2ZpZWxkcywgKCkpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKKyAgICAgICAgaW1wb3J0IHBpY2tsZQorICAgICAgICBtb2RzID0gW3BpY2tsZV0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGNQaWNrbGUKKyAgICAgICAgICAgIG1vZHMuYXBwZW5kKGNQaWNrbGUpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcHJvdG9jb2xzID0gWzAsIDEsIDJdCisgICAgICAgIGZvciBtb2QgaW4gbW9kczoKKyAgICAgICAgICAgIGZvciBwcm90b2NvbCBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICAgICAgZm9yIGFzdCBpbiAoY29tcGlsZShpLCAiPyIsICJleGVjIiwgMHg0MDApIGZvciBpIGluIGV4ZWNfdGVzdHMpOgorICAgICAgICAgICAgICAgICAgICBhc3QyID0gbW9kLmxvYWRzKG1vZC5kdW1wcyhhc3QsIHByb3RvY29sKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0b190dXBsZShhc3QyKSwgdG9fdHVwbGUoYXN0KSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfaWRlbnRpdGlmZXIoc2VsZik6CisgICAgICAgIG0gPSBhc3QuTW9kdWxlKFthc3QuRXhwcihhc3QuTmFtZSh1IngiLCBhc3QuTG9hZCgpKSldKQorICAgICAgICBhc3QuZml4X21pc3NpbmdfbG9jYXRpb25zKG0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGNvbXBpbGUobSwgIjx0ZXN0PiIsICJleGVjIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiaWRlbnRpZmllciBtdXN0IGJlIG9mIHR5cGUgc3RyIiwgc3RyKGNtLmV4Y2VwdGlvbikpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX3N0cmluZyhzZWxmKToKKyAgICAgICAgbSA9IGFzdC5Nb2R1bGUoW2FzdC5FeHByKGFzdC5TdHIoNDMpKV0pCisgICAgICAgIGFzdC5maXhfbWlzc2luZ19sb2NhdGlvbnMobSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgY29tcGlsZShtLCAiPHRlc3Q+IiwgImV4ZWMiKQorICAgICAgICBzZWxmLmFzc2VydEluKCJzdHJpbmcgbXVzdCBiZSBvZiB0eXBlIHN0ciBvciB1bmkiLCBzdHIoY20uZXhjZXB0aW9uKSkKKworCitjbGFzcyBBU1RIZWxwZXJzX1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcGFyc2Uoc2VsZik6CisgICAgICAgIGEgPSBhc3QucGFyc2UoJ2ZvbygxICsgMSknKQorICAgICAgICBiID0gY29tcGlsZSgnZm9vKDEgKyAxKScsICc8dW5rbm93bj4nLCAnZXhlYycsIGFzdC5QeUNGX09OTFlfQVNUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5kdW1wKGEpLCBhc3QuZHVtcChiKSkKKworICAgIGRlZiB0ZXN0X2R1bXAoc2VsZik6CisgICAgICAgIG5vZGUgPSBhc3QucGFyc2UoJ3NwYW0oZWdncywgImFuZCBjaGVlc2UiKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmR1bXAobm9kZSksCisgICAgICAgICAgICAiTW9kdWxlKGJvZHk9W0V4cHIodmFsdWU9Q2FsbChmdW5jPU5hbWUoaWQ9J3NwYW0nLCBjdHg9TG9hZCgpKSwgIgorICAgICAgICAgICAgImFyZ3M9W05hbWUoaWQ9J2VnZ3MnLCBjdHg9TG9hZCgpKSwgU3RyKHM9J2FuZCBjaGVlc2UnKV0sICIKKyAgICAgICAgICAgICJrZXl3b3Jkcz1bXSwgc3RhcmFyZ3M9Tm9uZSwga3dhcmdzPU5vbmUpKV0pIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmR1bXAobm9kZSwgYW5ub3RhdGVfZmllbGRzPUZhbHNlKSwKKyAgICAgICAgICAgICJNb2R1bGUoW0V4cHIoQ2FsbChOYW1lKCdzcGFtJywgTG9hZCgpKSwgW05hbWUoJ2VnZ3MnLCBMb2FkKCkpLCAiCisgICAgICAgICAgICAiU3RyKCdhbmQgY2hlZXNlJyldLCBbXSwgTm9uZSwgTm9uZSkpXSkiCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QuZHVtcChub2RlLCBpbmNsdWRlX2F0dHJpYnV0ZXM9VHJ1ZSksCisgICAgICAgICAgICAiTW9kdWxlKGJvZHk9W0V4cHIodmFsdWU9Q2FsbChmdW5jPU5hbWUoaWQ9J3NwYW0nLCBjdHg9TG9hZCgpLCAiCisgICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksIGFyZ3M9W05hbWUoaWQ9J2VnZ3MnLCBjdHg9TG9hZCgpLCAiCisgICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9NSksIFN0cihzPSdhbmQgY2hlZXNlJywgbGluZW5vPTEsICIKKyAgICAgICAgICAgICJjb2xfb2Zmc2V0PTExKV0sIGtleXdvcmRzPVtdLCBzdGFyYXJncz1Ob25lLCBrd2FyZ3M9Tm9uZSwgIgorICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCBsaW5lbm89MSwgY29sX29mZnNldD0wKV0pIgorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9jb3B5X2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBzcmMgPSBhc3QucGFyc2UoJzEgKyAxJywgbW9kZT0nZXZhbCcpCisgICAgICAgIHNyYy5ib2R5LnJpZ2h0ID0gYXN0LmNvcHlfbG9jYXRpb24oYXN0Lk51bSgyKSwgc3JjLmJvZHkucmlnaHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmR1bXAoc3JjLCBpbmNsdWRlX2F0dHJpYnV0ZXM9VHJ1ZSksCisgICAgICAgICAgICAnRXhwcmVzc2lvbihib2R5PUJpbk9wKGxlZnQ9TnVtKG49MSwgbGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksICcKKyAgICAgICAgICAgICdvcD1BZGQoKSwgcmlnaHQ9TnVtKG49MiwgbGluZW5vPTEsIGNvbF9vZmZzZXQ9NCksIGxpbmVubz0xLCAnCisgICAgICAgICAgICAnY29sX29mZnNldD0wKSknCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2ZpeF9taXNzaW5nX2xvY2F0aW9ucyhzZWxmKToKKyAgICAgICAgc3JjID0gYXN0LnBhcnNlKCd3cml0ZSgic3BhbSIpJykKKyAgICAgICAgc3JjLmJvZHkuYXBwZW5kKGFzdC5FeHByKGFzdC5DYWxsKGFzdC5OYW1lKCdzcGFtJywgYXN0LkxvYWQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXN0LlN0cignZWdncycpXSwgW10sIE5vbmUsIE5vbmUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmMsIGFzdC5maXhfbWlzc2luZ19sb2NhdGlvbnMoc3JjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QuZHVtcChzcmMsIGluY2x1ZGVfYXR0cmlidXRlcz1UcnVlKSwKKyAgICAgICAgICAgICJNb2R1bGUoYm9keT1bRXhwcih2YWx1ZT1DYWxsKGZ1bmM9TmFtZShpZD0nd3JpdGUnLCBjdHg9TG9hZCgpLCAiCisgICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksIGFyZ3M9W1N0cihzPSdzcGFtJywgbGluZW5vPTEsICIKKyAgICAgICAgICAgICJjb2xfb2Zmc2V0PTYpXSwga2V5d29yZHM9W10sIHN0YXJhcmdzPU5vbmUsIGt3YXJncz1Ob25lLCAiCisgICAgICAgICAgICAibGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksIGxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCAiCisgICAgICAgICAgICAiRXhwcih2YWx1ZT1DYWxsKGZ1bmM9TmFtZShpZD0nc3BhbScsIGN0eD1Mb2FkKCksIGxpbmVubz0xLCAiCisgICAgICAgICAgICAiY29sX29mZnNldD0wKSwgYXJncz1bU3RyKHM9J2VnZ3MnLCBsaW5lbm89MSwgY29sX29mZnNldD0wKV0sICIKKyAgICAgICAgICAgICJrZXl3b3Jkcz1bXSwgc3RhcmFyZ3M9Tm9uZSwga3dhcmdzPU5vbmUsIGxpbmVubz0xLCAiCisgICAgICAgICAgICAiY29sX29mZnNldD0wKSwgbGluZW5vPTEsIGNvbF9vZmZzZXQ9MCldKSIKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfaW5jcmVtZW50X2xpbmVubyhzZWxmKToKKyAgICAgICAgc3JjID0gYXN0LnBhcnNlKCcxICsgMScsIG1vZGU9J2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5pbmNyZW1lbnRfbGluZW5vKHNyYywgbj0zKSwgc3JjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5kdW1wKHNyYywgaW5jbHVkZV9hdHRyaWJ1dGVzPVRydWUpLAorICAgICAgICAgICAgJ0V4cHJlc3Npb24oYm9keT1CaW5PcChsZWZ0PU51bShuPTEsIGxpbmVubz00LCBjb2xfb2Zmc2V0PTApLCAnCisgICAgICAgICAgICAnb3A9QWRkKCksIHJpZ2h0PU51bShuPTEsIGxpbmVubz00LCBjb2xfb2Zmc2V0PTQpLCBsaW5lbm89NCwgJworICAgICAgICAgICAgJ2NvbF9vZmZzZXQ9MCkpJworICAgICAgICApCisgICAgICAgICMgaXNzdWUxMDg2OTogZG8gbm90IGluY3JlbWVudCBsaW5lbm8gb2Ygcm9vdCB0d2ljZQorICAgICAgICBzcmMgPSBhc3QucGFyc2UoJzEgKyAxJywgbW9kZT0nZXZhbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmluY3JlbWVudF9saW5lbm8oc3JjLmJvZHksIG49MyksIHNyYy5ib2R5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5kdW1wKHNyYywgaW5jbHVkZV9hdHRyaWJ1dGVzPVRydWUpLAorICAgICAgICAgICAgJ0V4cHJlc3Npb24oYm9keT1CaW5PcChsZWZ0PU51bShuPTEsIGxpbmVubz00LCBjb2xfb2Zmc2V0PTApLCAnCisgICAgICAgICAgICAnb3A9QWRkKCksIHJpZ2h0PU51bShuPTEsIGxpbmVubz00LCBjb2xfb2Zmc2V0PTQpLCBsaW5lbm89NCwgJworICAgICAgICAgICAgJ2NvbF9vZmZzZXQ9MCkpJworICAgICAgICApCisKKyAgICBkZWYgdGVzdF9pdGVyX2ZpZWxkcyhzZWxmKToKKyAgICAgICAgbm9kZSA9IGFzdC5wYXJzZSgnZm9vKCknLCBtb2RlPSdldmFsJykKKyAgICAgICAgZCA9IGRpY3QoYXN0Lml0ZXJfZmllbGRzKG5vZGUuYm9keSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5wb3AoJ2Z1bmMnKS5pZCwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeydrZXl3b3Jkcyc6IFtdLCAna3dhcmdzJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyZ3MnOiBbXSwgJ3N0YXJhcmdzJzogTm9uZX0pCisKKyAgICBkZWYgdGVzdF9pdGVyX2NoaWxkX25vZGVzKHNlbGYpOgorICAgICAgICBub2RlID0gYXN0LnBhcnNlKCJzcGFtKDIzLCA0MiwgZWdncz0nbGVlaycpIiwgbW9kZT0nZXZhbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpc3QoYXN0Lml0ZXJfY2hpbGRfbm9kZXMobm9kZS5ib2R5KSkpLCA0KQorICAgICAgICBpdGVyYXRvciA9IGFzdC5pdGVyX2NoaWxkX25vZGVzKG5vZGUuYm9keSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0ZXJhdG9yKS5pZCwgJ3NwYW0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXRlcmF0b3IpLm4sIDIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXRlcmF0b3IpLm4sIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5kdW1wKG5leHQoaXRlcmF0b3IpKSwKKyAgICAgICAgICAgICJrZXl3b3JkKGFyZz0nZWdncycsIHZhbHVlPVN0cihzPSdsZWVrJykpIgorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9nZXRfZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBub2RlID0gYXN0LnBhcnNlKCdkZWYgZm9vKCk6XG4gICIiImxpbmUgb25lXG4gIGxpbmUgdHdvIiIiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QuZ2V0X2RvY3N0cmluZyhub2RlLmJvZHlbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICdsaW5lIG9uZVxubGluZSB0d28nKQorCisgICAgZGVmIHRlc3RfbGl0ZXJhbF9ldmFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5saXRlcmFsX2V2YWwoJ1sxLCAyLCAzXScpLCBbMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmxpdGVyYWxfZXZhbCgneyJmb28iOiA0Mn0nKSwgeyJmb28iOiA0Mn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmxpdGVyYWxfZXZhbCgnKFRydWUsIEZhbHNlLCBOb25lKScpLCAoVHJ1ZSwgRmFsc2UsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhc3QubGl0ZXJhbF9ldmFsLCAnZm9vKCknKQorCisgICAgZGVmIHRlc3RfbGl0ZXJhbF9ldmFsX2lzc3VlNDkwNyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QubGl0ZXJhbF9ldmFsKCcyaicpLCAyaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QubGl0ZXJhbF9ldmFsKCcxMCArIDJqJyksIDEwICsgMmopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmxpdGVyYWxfZXZhbCgnMS41IC0gMmonKSwgMS41IC0gMmopCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGFzdC5saXRlcmFsX2V2YWwsICcyICsgKDMgKyA0aiknKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCgiYmFja3F1b3RlIG5vdCBzdXBwb3J0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ludGF4V2FybmluZykpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEFTVF9UZXN0cywgQVNUSGVscGVyc19UZXN0KQorCitkZWYgbWFpbigpOgorICAgIGlmIF9fbmFtZV9fICE9ICdfX21haW5fXyc6CisgICAgICAgIHJldHVybgorICAgIGlmIHN5cy5hcmd2WzE6XSA9PSBbJy1nJ106CisgICAgICAgIGZvciBzdGF0ZW1lbnRzLCBraW5kIGluICgoZXhlY190ZXN0cywgImV4ZWMiKSwgKHNpbmdsZV90ZXN0cywgInNpbmdsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2YWxfdGVzdHMsICJldmFsIikpOgorICAgICAgICAgICAgcHJpbnQga2luZCsiX3Jlc3VsdHMgPSBbIgorICAgICAgICAgICAgZm9yIHMgaW4gc3RhdGVtZW50czoKKyAgICAgICAgICAgICAgICBwcmludCByZXByKHRvX3R1cGxlKGNvbXBpbGUocywgIj8iLCBraW5kLCAweDQwMCkpKSsiLCIKKyAgICAgICAgICAgIHByaW50ICJdIgorICAgICAgICBwcmludCAibWFpbigpIgorICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CisgICAgdGVzdF9tYWluKCkKKworIyMjIyBFVkVSWVRISU5HIEJFTE9XIElTIEdFTkVSQVRFRCAjIyMjIworZXhlY19yZXN1bHRzID0gWworKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdOb25lJywgKCdMb2FkJywpKSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgTm9uZSwgW10pLCBbKCdQYXNzJywgKDEsIDkpKV0sIFtdKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ05hbWUnLCAoMSwgNiksICdhJywgKCdQYXJhbScsKSldLCBOb25lLCBOb25lLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTApKV0sIFtdKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ05hbWUnLCAoMSwgNiksICdhJywgKCdQYXJhbScsKSldLCBOb25lLCBOb25lLCBbKCdOdW0nLCAoMSwgOCksIDApXSksIFsoJ1Bhc3MnLCAoMSwgMTIpKV0sIFtdKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCAnYXJncycsIE5vbmUsIFtdKSwgWygnUGFzcycsICgxLCAxNCkpXSwgW10pXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsICdrd2FyZ3MnLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTcpKV0sIFtdKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ05hbWUnLCAoMSwgNiksICdhJywgKCdQYXJhbScsKSksICgnTmFtZScsICgxLCA5KSwgJ2InLCAoJ1BhcmFtJywpKSwgKCdOYW1lJywgKDEsIDE0KSwgJ2MnLCAoJ1BhcmFtJywpKSwgKCdOYW1lJywgKDEsIDIyKSwgJ2QnLCAoJ1BhcmFtJywpKSwgKCdOYW1lJywgKDEsIDI4KSwgJ2UnLCAoJ1BhcmFtJywpKV0sICdhcmdzJywgJ2t3YXJncycsIFsoJ051bScsICgxLCAxMSksIDEpLCAoJ05hbWUnLCAoMSwgMTYpLCAnTm9uZScsICgnTG9hZCcsKSksICgnTGlzdCcsICgxLCAyNCksIFtdLCAoJ0xvYWQnLCkpLCAoJ0RpY3QnLCAoMSwgMzApLCBbXSwgW10pXSksIFsoJ1Bhc3MnLCAoMSwgNTIpKV0sIFtdKV0pLAorKCdNb2R1bGUnLCBbKCdDbGFzc0RlZicsICgxLCAwKSwgJ0MnLCBbXSwgWygnUGFzcycsICgxLCA4KSldLCBbXSldKSwKKygnTW9kdWxlJywgWygnQ2xhc3NEZWYnLCAoMSwgMCksICdDJywgWygnTmFtZScsICgxLCA4KSwgJ29iamVjdCcsICgnTG9hZCcsKSldLCBbKCdQYXNzJywgKDEsIDE3KSldLCBbXSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgTm9uZSwgW10pLCBbKCdSZXR1cm4nLCAoMSwgOCksICgnTnVtJywgKDEsIDE1KSwgMSkpXSwgW10pXSksCisoJ01vZHVsZScsIFsoJ0RlbGV0ZScsICgxLCAwKSwgWygnTmFtZScsICgxLCA0KSwgJ3YnLCAoJ0RlbCcsKSldKV0pLAorKCdNb2R1bGUnLCBbKCdBc3NpZ24nLCAoMSwgMCksIFsoJ05hbWUnLCAoMSwgMCksICd2JywgKCdTdG9yZScsKSldLCAoJ051bScsICgxLCA0KSwgMSkpXSksCisoJ01vZHVsZScsIFsoJ0F1Z0Fzc2lnbicsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAndicsICgnU3RvcmUnLCkpLCAoJ0FkZCcsKSwgKCdOdW0nLCAoMSwgNSksIDEpKV0pLAorKCdNb2R1bGUnLCBbKCdQcmludCcsICgxLCAwKSwgKCdOYW1lJywgKDEsIDgpLCAnZicsICgnTG9hZCcsKSksIFsoJ051bScsICgxLCAxMSksIDEpXSwgRmFsc2UpXSksCisoJ01vZHVsZScsIFsoJ0ZvcicsICgxLCAwKSwgKCdOYW1lJywgKDEsIDQpLCAndicsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgOSksICd2JywgKCdMb2FkJywpKSwgWygnUGFzcycsICgxLCAxMSkpXSwgW10pXSksCisoJ01vZHVsZScsIFsoJ1doaWxlJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgNiksICd2JywgKCdMb2FkJywpKSwgWygnUGFzcycsICgxLCA4KSldLCBbXSldKSwKKygnTW9kdWxlJywgWygnSWYnLCAoMSwgMCksICgnTmFtZScsICgxLCAzKSwgJ3YnLCAoJ0xvYWQnLCkpLCBbKCdQYXNzJywgKDEsIDUpKV0sIFtdKV0pLAorKCdNb2R1bGUnLCBbKCdSYWlzZScsICgxLCAwKSwgKCdOYW1lJywgKDEsIDYpLCAnRXhjZXB0aW9uJywgKCdMb2FkJywpKSwgKCdTdHInLCAoMSwgMTcpLCAnc3RyaW5nJyksIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ1RyeUV4Y2VwdCcsICgxLCAwKSwgWygnUGFzcycsICgyLCAyKSldLCBbKCdFeGNlcHRIYW5kbGVyJywgKDMsIDApLCAoJ05hbWUnLCAoMywgNyksICdFeGNlcHRpb24nLCAoJ0xvYWQnLCkpLCBOb25lLCBbKCdQYXNzJywgKDQsIDIpKV0pXSwgW10pXSksCisoJ01vZHVsZScsIFsoJ1RyeUZpbmFsbHknLCAoMSwgMCksIFsoJ1Bhc3MnLCAoMiwgMikpXSwgWygnUGFzcycsICg0LCAyKSldKV0pLAorKCdNb2R1bGUnLCBbKCdBc3NlcnQnLCAoMSwgMCksICgnTmFtZScsICgxLCA3KSwgJ3YnLCAoJ0xvYWQnLCkpLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdJbXBvcnQnLCAoMSwgMCksIFsoJ2FsaWFzJywgJ3N5cycsIE5vbmUpXSldKSwKKygnTW9kdWxlJywgWygnSW1wb3J0RnJvbScsICgxLCAwKSwgJ3N5cycsIFsoJ2FsaWFzJywgJ3YnLCBOb25lKV0sIDApXSksCisoJ01vZHVsZScsIFsoJ0V4ZWMnLCAoMSwgMCksICgnU3RyJywgKDEsIDUpLCAndicpLCBOb25lLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdHbG9iYWwnLCAoMSwgMCksIFsndiddKV0pLAorKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ051bScsICgxLCAwKSwgMSkpXSksCisoJ01vZHVsZScsIFsoJ1Bhc3MnLCAoMSwgMCkpXSksCisoJ01vZHVsZScsIFsoJ0JyZWFrJywgKDEsIDApKV0pLAorKCdNb2R1bGUnLCBbKCdDb250aW51ZScsICgxLCAwKSldKSwKKygnTW9kdWxlJywgWygnRm9yJywgKDEsIDApLCAoJ1R1cGxlJywgKDEsIDQpLCBbKCdOYW1lJywgKDEsIDQpLCAnYScsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgNiksICdiJywgKCdTdG9yZScsKSldLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDExKSwgJ2MnLCAoJ0xvYWQnLCkpLCBbKCdQYXNzJywgKDEsIDE0KSldLCBbXSldKSwKKygnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdMaXN0Q29tcCcsICgxLCAxKSwgKCdUdXBsZScsICgxLCAyKSwgWygnTmFtZScsICgxLCAyKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNCksICdiJywgKCdMb2FkJywpKV0sICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ1R1cGxlJywgKDEsIDExKSwgWygnTmFtZScsICgxLCAxMSksICdhJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMyksICdiJywgKCdTdG9yZScsKSldLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDE4KSwgJ2MnLCAoJ0xvYWQnLCkpLCBbXSldKSldKSwKKygnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdHZW5lcmF0b3JFeHAnLCAoMSwgMSksICgnVHVwbGUnLCAoMSwgMiksIFsoJ05hbWUnLCAoMSwgMiksICdhJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDQpLCAnYicsICgnTG9hZCcsKSldLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdUdXBsZScsICgxLCAxMSksIFsoJ05hbWUnLCAoMSwgMTEpLCAnYScsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTMpLCAnYicsICgnU3RvcmUnLCkpXSwgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxOCksICdjJywgKCdMb2FkJywpKSwgW10pXSkpXSksCisoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnR2VuZXJhdG9yRXhwJywgKDEsIDEpLCAoJ1R1cGxlJywgKDEsIDIpLCBbKCdOYW1lJywgKDEsIDIpLCAnYScsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCA0KSwgJ2InLCAoJ0xvYWQnLCkpXSwgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnVHVwbGUnLCAoMSwgMTIpLCBbKCdOYW1lJywgKDEsIDEyKSwgJ2EnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDE0KSwgJ2InLCAoJ1N0b3JlJywpKV0sICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMjApLCAnYycsICgnTG9hZCcsKSksIFtdKV0pKV0pLAorKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ0dlbmVyYXRvckV4cCcsICgyLCA0KSwgKCdUdXBsZScsICgzLCA0KSwgWygnTmFtZScsICgzLCA0KSwgJ0FhJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDUsIDcpLCAnQmInLCAoJ0xvYWQnLCkpXSwgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnVHVwbGUnLCAoOCwgNCksIFsoJ05hbWUnLCAoOCwgNCksICdBYScsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMTAsIDQpLCAnQmInLCAoJ1N0b3JlJywpKV0sICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMTAsIDEwKSwgJ0NjJywgKCdMb2FkJywpKSwgW10pXSkpXSksCisoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnRGljdENvbXAnLCAoMSwgMSksICgnTmFtZScsICgxLCAxKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNSksICdiJywgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnTmFtZScsICgxLCAxMSksICd3JywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxNiksICd4JywgKCdMb2FkJywpKSwgW10pLCAoJ2NvbXByZWhlbnNpb24nLCAoJ05hbWUnLCAoMSwgMjIpLCAnbScsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMjcpLCAncCcsICgnTG9hZCcsKSksIFsoJ05hbWUnLCAoMSwgMzIpLCAnZycsICgnTG9hZCcsKSldKV0pKV0pLAorKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ0RpY3RDb21wJywgKDEsIDEpLCAoJ05hbWUnLCAoMSwgMSksICdhJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDUpLCAnYicsICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ1R1cGxlJywgKDEsIDExKSwgWygnTmFtZScsICgxLCAxMSksICd2JywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMyksICd3JywgKCdTdG9yZScsKSldLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDE4KSwgJ3gnLCAoJ0xvYWQnLCkpLCBbXSldKSldKSwKKygnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdTZXRDb21wJywgKDEsIDEpLCAoJ05hbWUnLCAoMSwgMSksICdyJywgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnTmFtZScsICgxLCA3KSwgJ2wnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDEyKSwgJ3gnLCAoJ0xvYWQnLCkpLCBbKCdOYW1lJywgKDEsIDE3KSwgJ2cnLCAoJ0xvYWQnLCkpXSldKSldKSwKKygnTW9kdWxlJywgWygnRXhwcicsICgxLCAwKSwgKCdTZXRDb21wJywgKDEsIDEpLCAoJ05hbWUnLCAoMSwgMSksICdyJywgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnVHVwbGUnLCAoMSwgNyksIFsoJ05hbWUnLCAoMSwgNyksICdsJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCA5KSwgJ20nLCAoJ1N0b3JlJywpKV0sICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTQpLCAneCcsICgnTG9hZCcsKSksIFtdKV0pKV0pLAorXQorc2luZ2xlX3Jlc3VsdHMgPSBbCisoJ0ludGVyYWN0aXZlJywgWygnRXhwcicsICgxLCAwKSwgKCdCaW5PcCcsICgxLCAwKSwgKCdOdW0nLCAoMSwgMCksIDEpLCAoJ0FkZCcsKSwgKCdOdW0nLCAoMSwgMiksIDIpKSldKSwKK10KK2V2YWxfcmVzdWx0cyA9IFsKKygnRXhwcmVzc2lvbicsICgnTmFtZScsICgxLCAwKSwgJ05vbmUnLCAoJ0xvYWQnLCkpKSwKKygnRXhwcmVzc2lvbicsICgnQm9vbE9wJywgKDEsIDApLCAoJ0FuZCcsKSwgWygnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNiksICdiJywgKCdMb2FkJywpKV0pKSwKKygnRXhwcmVzc2lvbicsICgnQmluT3AnLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ0FkZCcsKSwgKCdOYW1lJywgKDEsIDQpLCAnYicsICgnTG9hZCcsKSkpKSwKKygnRXhwcmVzc2lvbicsICgnVW5hcnlPcCcsICgxLCAwKSwgKCdOb3QnLCksICgnTmFtZScsICgxLCA0KSwgJ3YnLCAoJ0xvYWQnLCkpKSksCisoJ0V4cHJlc3Npb24nLCAoJ0xhbWJkYScsICgxLCAwKSwgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgTm9uZSwgW10pLCAoJ05hbWUnLCAoMSwgNyksICdOb25lJywgKCdMb2FkJywpKSkpLAorKCdFeHByZXNzaW9uJywgKCdEaWN0JywgKDEsIDApLCBbKCdOdW0nLCAoMSwgMiksIDEpXSwgWygnTnVtJywgKDEsIDQpLCAyKV0pKSwKKygnRXhwcmVzc2lvbicsICgnRGljdCcsICgxLCAwKSwgW10sIFtdKSksCisoJ0V4cHJlc3Npb24nLCAoJ1NldCcsICgxLCAwKSwgWygnTmFtZScsICgxLCAxKSwgJ05vbmUnLCAoJ0xvYWQnLCkpXSkpLAorKCdFeHByZXNzaW9uJywgKCdEaWN0JywgKDEsIDApLCBbKCdOdW0nLCAoMiwgNiksIDEpXSwgWygnTnVtJywgKDQsIDEwKSwgMildKSksCisoJ0V4cHJlc3Npb24nLCAoJ0xpc3RDb21wJywgKDEsIDEpLCAoJ05hbWUnLCAoMSwgMSksICdhJywgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnTmFtZScsICgxLCA3KSwgJ2InLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDEyKSwgJ2MnLCAoJ0xvYWQnLCkpLCBbKCdOYW1lJywgKDEsIDE3KSwgJ2QnLCAoJ0xvYWQnLCkpXSldKSksCisoJ0V4cHJlc3Npb24nLCAoJ0dlbmVyYXRvckV4cCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDEpLCAnYScsICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ05hbWUnLCAoMSwgNyksICdiJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMiksICdjJywgKCdMb2FkJywpKSwgWygnTmFtZScsICgxLCAxNyksICdkJywgKCdMb2FkJywpKV0pXSkpLAorKCdFeHByZXNzaW9uJywgKCdDb21wYXJlJywgKDEsIDApLCAoJ051bScsICgxLCAwKSwgMSksIFsoJ0x0JywpLCAoJ0x0JywpXSwgWygnTnVtJywgKDEsIDQpLCAyKSwgKCdOdW0nLCAoMSwgOCksIDMpXSkpLAorKCdFeHByZXNzaW9uJywgKCdDYWxsJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdmJywgKCdMb2FkJywpKSwgWygnTnVtJywgKDEsIDIpLCAxKSwgKCdOdW0nLCAoMSwgNCksIDIpXSwgWygna2V5d29yZCcsICdjJywgKCdOdW0nLCAoMSwgOCksIDMpKV0sICgnTmFtZScsICgxLCAxMSksICdkJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDE1KSwgJ2UnLCAoJ0xvYWQnLCkpKSksCisoJ0V4cHJlc3Npb24nLCAoJ1JlcHInLCAoMSwgMCksICgnTmFtZScsICgxLCAxKSwgJ3YnLCAoJ0xvYWQnLCkpKSksCisoJ0V4cHJlc3Npb24nLCAoJ051bScsICgxLCAwKSwgMTBMKSksCisoJ0V4cHJlc3Npb24nLCAoJ1N0cicsICgxLCAwKSwgJ3N0cmluZycpKSwKKygnRXhwcmVzc2lvbicsICgnQXR0cmlidXRlJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpKSwKKygnRXhwcmVzc2lvbicsICgnU3Vic2NyaXB0JywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgKCdTbGljZScsICgnTmFtZScsICgxLCAyKSwgJ2InLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNCksICdjJywgKCdMb2FkJywpKSwgTm9uZSksICgnTG9hZCcsKSkpLAorKCdFeHByZXNzaW9uJywgKCdOYW1lJywgKDEsIDApLCAndicsICgnTG9hZCcsKSkpLAorKCdFeHByZXNzaW9uJywgKCdMaXN0JywgKDEsIDApLCBbKCdOdW0nLCAoMSwgMSksIDEpLCAoJ051bScsICgxLCAzKSwgMiksICgnTnVtJywgKDEsIDUpLCAzKV0sICgnTG9hZCcsKSkpLAorKCdFeHByZXNzaW9uJywgKCdMaXN0JywgKDEsIDApLCBbXSwgKCdMb2FkJywpKSksCisoJ0V4cHJlc3Npb24nLCAoJ1R1cGxlJywgKDEsIDApLCBbKCdOdW0nLCAoMSwgMCksIDEpLCAoJ051bScsICgxLCAyKSwgMiksICgnTnVtJywgKDEsIDQpLCAzKV0sICgnTG9hZCcsKSkpLAorKCdFeHByZXNzaW9uJywgKCdUdXBsZScsICgxLCAxKSwgWygnTnVtJywgKDEsIDEpLCAxKSwgKCdOdW0nLCAoMSwgMyksIDIpLCAoJ051bScsICgxLCA1KSwgMyldLCAoJ0xvYWQnLCkpKSwKKygnRXhwcmVzc2lvbicsICgnVHVwbGUnLCAoMSwgMCksIFtdLCAoJ0xvYWQnLCkpKSwKKygnRXhwcmVzc2lvbicsICgnQ2FsbCcsICgxLCAwKSwgKCdBdHRyaWJ1dGUnLCAoMSwgMCksICgnQXR0cmlidXRlJywgKDEsIDApLCAoJ0F0dHJpYnV0ZScsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICdiJywgKCdMb2FkJywpKSwgJ2MnLCAoJ0xvYWQnLCkpLCAnZCcsICgnTG9hZCcsKSksIFsoJ1N1YnNjcmlwdCcsICgxLCA4KSwgKCdBdHRyaWJ1dGUnLCAoMSwgOCksICgnTmFtZScsICgxLCA4KSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSksICgnU2xpY2UnLCAoJ051bScsICgxLCAxMiksIDEpLCAoJ051bScsICgxLCAxNCksIDIpLCBOb25lKSwgKCdMb2FkJywpKV0sIFtdLCBOb25lLCBOb25lKSksCitdCittYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FzeW5jaGF0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYXN5bmNoYXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxZWMwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FzeW5jaGF0LnB5CkBAIC0wLDAgKzEsMjczIEBACisjIHRlc3QgYXN5bmNoYXQKKworaW1wb3J0IGFzeW5jb3JlLCBhc3luY2hhdCwgc29ja2V0LCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Cit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKworSE9TVCA9IHRlc3Rfc3VwcG9ydC5IT1NUCitTRVJWRVJfUVVJVCA9ICdRVUlUXG4nCisKK2lmIHRocmVhZGluZzoKKyAgICBjbGFzcyBlY2hvX3NlcnZlcih0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAgICAgIyBwYXJhbWV0ZXIgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGFzc2VkIGJhY2sgdG8gdGhlCisgICAgICAgICMgY2xpZW50IGVhY2ggc2VuZAorICAgICAgICBjaHVua19zaXplID0gMQorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudCk6CisgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICBzZWxmLmV2ZW50ID0gZXZlbnQKKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrKQorICAgICAgICAgICAgIyBUaGlzIHdpbGwgYmUgc2V0IGlmIHRoZSBjbGllbnQgd2FudHMgdXMgdG8gd2FpdCBiZWZvcmUgZWNob2luZyBkYXRhCisgICAgICAgICAgICAjIGJhY2suCisgICAgICAgICAgICBzZWxmLnN0YXJ0X3Jlc2VuZF9ldmVudCA9IE5vbmUKKworICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zb2NrLmxpc3RlbigxKQorICAgICAgICAgICAgc2VsZi5ldmVudC5zZXQoKQorICAgICAgICAgICAgY29ubiwgY2xpZW50ID0gc2VsZi5zb2NrLmFjY2VwdCgpCisgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9ICIiCisgICAgICAgICAgICAjIGNvbGxlY3QgZGF0YSB1bnRpbCBxdWl0IG1lc3NhZ2UgaXMgc2VlbgorICAgICAgICAgICAgd2hpbGUgU0VSVkVSX1FVSVQgbm90IGluIHNlbGYuYnVmZmVyOgorICAgICAgICAgICAgICAgIGRhdGEgPSBjb25uLnJlY3YoMSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IHNlbGYuYnVmZmVyICsgZGF0YQorCisgICAgICAgICAgICAjIHJlbW92ZSB0aGUgU0VSVkVSX1FVSVQgbWVzc2FnZQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBzZWxmLmJ1ZmZlci5yZXBsYWNlKFNFUlZFUl9RVUlULCAnJykKKworICAgICAgICAgICAgaWYgc2VsZi5zdGFydF9yZXNlbmRfZXZlbnQ6CisgICAgICAgICAgICAgICAgc2VsZi5zdGFydF9yZXNlbmRfZXZlbnQud2FpdCgpCisKKyAgICAgICAgICAgICMgcmUtc2VuZCBlbnRpcmUgc2V0IG9mIGNvbGxlY3RlZCBkYXRhCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyB0aGlzIG1heSBmYWlsIG9uIHNvbWUgdGVzdHMsIHN1Y2ggYXMgdGVzdF9jbG9zZV93aGVuX2RvbmUsIHNpbmNlCisgICAgICAgICAgICAgICAgIyB0aGUgY2xpZW50IGNsb3NlcyB0aGUgY2hhbm5lbCB3aGVuIGl0J3MgZG9uZSBzZW5kaW5nCisgICAgICAgICAgICAgICAgd2hpbGUgc2VsZi5idWZmZXI6CisgICAgICAgICAgICAgICAgICAgIG4gPSBjb25uLnNlbmQoc2VsZi5idWZmZXJbOnNlbGYuY2h1bmtfc2l6ZV0pCisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMDEpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gc2VsZi5idWZmZXJbbjpdCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCisKKyAgICBjbGFzcyBlY2hvX2NsaWVudChhc3luY2hhdC5hc3luY19jaGF0KToKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdGVybWluYXRvciwgc2VydmVyX3BvcnQpOgorICAgICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgc2VsZi5jb250ZW50cyA9IFtdCisgICAgICAgICAgICBzZWxmLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNlbGYuY29ubmVjdCgoSE9TVCwgc2VydmVyX3BvcnQpKQorICAgICAgICAgICAgc2VsZi5zZXRfdGVybWluYXRvcih0ZXJtaW5hdG9yKQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSAnJworCisgICAgICAgIGRlZiBoYW5kbGVfY29ubmVjdChzZWxmKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAjIHNlbGVjdC5wb2xsIHJldHVybnMgYSBzZWxlY3QuUE9MTEhVUCBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0cworICAgICAgICAgICAgIyBvbiBkYXJ3aW4sIHNvIGp1c3QgaWdub3JlIGl0CisgICAgICAgICAgICBkZWYgaGFuZGxlX2V4cHQoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGRlZiBjb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICBzZWxmLmJ1ZmZlciArPSBkYXRhCisKKyAgICAgICAgZGVmIGZvdW5kX3Rlcm1pbmF0b3Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLmNvbnRlbnRzLmFwcGVuZChzZWxmLmJ1ZmZlcikKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gIiIKKworCisgICAgZGVmIHN0YXJ0X2VjaG9fc2VydmVyKCk6CisgICAgICAgIGV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgcyA9IGVjaG9fc2VydmVyKGV2ZW50KQorICAgICAgICBzLnN0YXJ0KCkKKyAgICAgICAgZXZlbnQud2FpdCgpCisgICAgICAgIGV2ZW50LmNsZWFyKCkKKyAgICAgICAgdGltZS5zbGVlcCgwLjAxKSAjIEdpdmUgc2VydmVyIHRpbWUgdG8gc3RhcnQgYWNjZXB0aW5nLgorICAgICAgICByZXR1cm4gcywgZXZlbnQKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgVGVzdEFzeW5jaGF0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB1c2Vwb2xsID0gRmFsc2UKKworICAgIGRlZiBzZXRVcCAoc2VsZik6CisgICAgICAgIHNlbGYuX3RocmVhZHMgPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKworICAgIGRlZiB0ZWFyRG93biAoc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKKworICAgIGRlZiBsaW5lX3Rlcm1pbmF0b3JfY2hlY2soc2VsZiwgdGVybSwgc2VydmVyX2NodW5rKToKKyAgICAgICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzID0gZWNob19zZXJ2ZXIoZXZlbnQpCisgICAgICAgIHMuY2h1bmtfc2l6ZSA9IHNlcnZlcl9jaHVuaworICAgICAgICBzLnN0YXJ0KCkKKyAgICAgICAgZXZlbnQud2FpdCgpCisgICAgICAgIGV2ZW50LmNsZWFyKCkKKyAgICAgICAgdGltZS5zbGVlcCgwLjAxKSAjIEdpdmUgc2VydmVyIHRpbWUgdG8gc3RhcnQgYWNjZXB0aW5nLgorICAgICAgICBjID0gZWNob19jbGllbnQodGVybSwgcy5wb3J0KQorICAgICAgICBjLnB1c2goImhlbGxvICIpCisgICAgICAgIGMucHVzaCgid29ybGQlcyIgJSB0ZXJtKQorICAgICAgICBjLnB1c2goIkknbSBub3QgZGVhZCB5ZXQhJXMiICUgdGVybSkKKyAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQorICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKKyAgICAgICAgcy5qb2luKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFsiaGVsbG8gd29ybGQiLCAiSSdtIG5vdCBkZWFkIHlldCEiXSkKKworICAgICMgdGhlIGxpbmUgdGVybWluYXRvciB0ZXN0cyBiZWxvdyBjaGVjayByZWNlaXZpbmcgdmFyaW91c2x5LXNpemVkCisgICAgIyBjaHVua3MgYmFjayBmcm9tIHRoZSBzZXJ2ZXIgaW4gb3JkZXIgdG8gZXhlcmNpc2UgYWxsIGJyYW5jaGVzIG9mCisgICAgIyBhc3luY19jaGF0LmhhbmRsZV9yZWFkCisKKyAgICBkZWYgdGVzdF9saW5lX3Rlcm1pbmF0b3IxKHNlbGYpOgorICAgICAgICAjIHRlc3Qgb25lLWNoYXJhY3RlciB0ZXJtaW5hdG9yCisgICAgICAgIGZvciBsIGluICgxLDIsMyk6CisgICAgICAgICAgICBzZWxmLmxpbmVfdGVybWluYXRvcl9jaGVjaygnXG4nLCBsKQorCisgICAgZGVmIHRlc3RfbGluZV90ZXJtaW5hdG9yMihzZWxmKToKKyAgICAgICAgIyB0ZXN0IHR3by1jaGFyYWN0ZXIgdGVybWluYXRvcgorICAgICAgICBmb3IgbCBpbiAoMSwyLDMpOgorICAgICAgICAgICAgc2VsZi5saW5lX3Rlcm1pbmF0b3JfY2hlY2soJ1xyXG4nLCBsKQorCisgICAgZGVmIHRlc3RfbGluZV90ZXJtaW5hdG9yMyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRocmVlLWNoYXJhY3RlciB0ZXJtaW5hdG9yCisgICAgICAgIGZvciBsIGluICgxLDIsMyk6CisgICAgICAgICAgICBzZWxmLmxpbmVfdGVybWluYXRvcl9jaGVjaygncXFxJywgbCkKKworICAgIGRlZiBudW1lcmljX3Rlcm1pbmF0b3JfY2hlY2soc2VsZiwgdGVybWxlbik6CisgICAgICAgICMgVHJ5IHJlYWRpbmcgYSBmaXhlZCBudW1iZXIgb2YgYnl0ZXMKKyAgICAgICAgcywgZXZlbnQgPSBzdGFydF9lY2hvX3NlcnZlcigpCisgICAgICAgIGMgPSBlY2hvX2NsaWVudCh0ZXJtbGVuLCBzLnBvcnQpCisgICAgICAgIGRhdGEgPSAiaGVsbG8gd29ybGQsIEknbSBub3QgZGVhZCB5ZXQhXG4iCisgICAgICAgIGMucHVzaChkYXRhKQorICAgICAgICBjLnB1c2goU0VSVkVSX1FVSVQpCisgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQorICAgICAgICBzLmpvaW4oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW2RhdGFbOnRlcm1sZW5dXSkKKworICAgIGRlZiB0ZXN0X251bWVyaWNfdGVybWluYXRvcjEoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCBpbnRzICYgbG9uZ3MgYm90aCB3b3JrIChzaW5jZSB0eXBlIGlzCisgICAgICAgICMgZXhwbGljaXRseSBjaGVja2VkIGluIGFzeW5jX2NoYXQuaGFuZGxlX3JlYWQpCisgICAgICAgIHNlbGYubnVtZXJpY190ZXJtaW5hdG9yX2NoZWNrKDEpCisgICAgICAgIHNlbGYubnVtZXJpY190ZXJtaW5hdG9yX2NoZWNrKDFMKQorCisgICAgZGVmIHRlc3RfbnVtZXJpY190ZXJtaW5hdG9yMihzZWxmKToKKyAgICAgICAgc2VsZi5udW1lcmljX3Rlcm1pbmF0b3JfY2hlY2soNkwpCisKKyAgICBkZWYgdGVzdF9ub25lX3Rlcm1pbmF0b3Ioc2VsZik6CisgICAgICAgICMgVHJ5IHJlYWRpbmcgYSBmaXhlZCBudW1iZXIgb2YgYnl0ZXMKKyAgICAgICAgcywgZXZlbnQgPSBzdGFydF9lY2hvX3NlcnZlcigpCisgICAgICAgIGMgPSBlY2hvX2NsaWVudChOb25lLCBzLnBvcnQpCisgICAgICAgIGRhdGEgPSAiaGVsbG8gd29ybGQsIEknbSBub3QgZGVhZCB5ZXQhXG4iCisgICAgICAgIGMucHVzaChkYXRhKQorICAgICAgICBjLnB1c2goU0VSVkVSX1FVSVQpCisgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQorICAgICAgICBzLmpvaW4oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5idWZmZXIsIGRhdGEpCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfcHJvZHVjZXIoc2VsZik6CisgICAgICAgIHMsIGV2ZW50ID0gc3RhcnRfZWNob19zZXJ2ZXIoKQorICAgICAgICBjID0gZWNob19jbGllbnQoJ1xuJywgcy5wb3J0KQorICAgICAgICBkYXRhID0gImhlbGxvIHdvcmxkXG5JJ20gbm90IGRlYWQgeWV0IVxuIgorICAgICAgICBwID0gYXN5bmNoYXQuc2ltcGxlX3Byb2R1Y2VyKGRhdGErU0VSVkVSX1FVSVQsIGJ1ZmZlcl9zaXplPTgpCisgICAgICAgIGMucHVzaF93aXRoX3Byb2R1Y2VyKHApCisgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQorICAgICAgICBzLmpvaW4oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgWyJoZWxsbyB3b3JsZCIsICJJJ20gbm90IGRlYWQgeWV0ISJdKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX3Byb2R1Y2VyKHNlbGYpOgorICAgICAgICBzLCBldmVudCA9IHN0YXJ0X2VjaG9fc2VydmVyKCkKKyAgICAgICAgYyA9IGVjaG9fY2xpZW50KCdcbicsIHMucG9ydCkKKyAgICAgICAgZGF0YSA9ICJoZWxsbyB3b3JsZFxuSSdtIG5vdCBkZWFkIHlldCFcbiIKKyAgICAgICAgYy5wdXNoX3dpdGhfcHJvZHVjZXIoZGF0YStTRVJWRVJfUVVJVCkKKyAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCisgICAgICAgIHMuam9pbigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbImhlbGxvIHdvcmxkIiwgIkknbSBub3QgZGVhZCB5ZXQhIl0pCisKKyAgICBkZWYgdGVzdF9lbXB0eV9saW5lKHNlbGYpOgorICAgICAgICAjIGNoZWNrcyB0aGF0IGVtcHR5IGxpbmVzIGFyZSBoYW5kbGVkIGNvcnJlY3RseQorICAgICAgICBzLCBldmVudCA9IHN0YXJ0X2VjaG9fc2VydmVyKCkKKyAgICAgICAgYyA9IGVjaG9fY2xpZW50KCdcbicsIHMucG9ydCkKKyAgICAgICAgYy5wdXNoKCJoZWxsbyB3b3JsZFxuXG5JJ20gbm90IGRlYWQgeWV0IVxuIikKKyAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQorICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKKyAgICAgICAgcy5qb2luKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFsiaGVsbG8gd29ybGQiLCAiIiwgIkknbSBub3QgZGVhZCB5ZXQhIl0pCisKKyAgICBkZWYgdGVzdF9jbG9zZV93aGVuX2RvbmUoc2VsZik6CisgICAgICAgIHMsIGV2ZW50ID0gc3RhcnRfZWNob19zZXJ2ZXIoKQorICAgICAgICBzLnN0YXJ0X3Jlc2VuZF9ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIGMgPSBlY2hvX2NsaWVudCgnXG4nLCBzLnBvcnQpCisgICAgICAgIGMucHVzaCgiaGVsbG8gd29ybGRcbkknbSBub3QgZGVhZCB5ZXQhXG4iKQorICAgICAgICBjLnB1c2goU0VSVkVSX1FVSVQpCisgICAgICAgIGMuY2xvc2Vfd2hlbl9kb25lKCkKKyAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCisKKyAgICAgICAgIyBPbmx5IGFsbG93IHRoZSBzZXJ2ZXIgdG8gc3RhcnQgZWNob2luZyBkYXRhIGJhY2sgdG8gdGhlIGNsaWVudCBhZnRlcgorICAgICAgICAjIHRoZSBjbGllbnQgaGFzIGNsb3NlZCBpdHMgY29ubmVjdGlvbi4gIFRoaXMgcHJldmVudHMgYSByYWNlIGNvbmRpdGlvbgorICAgICAgICAjIHdoZXJlIHRoZSBzZXJ2ZXIgZWNob2VzIGFsbCBvZiBpdHMgZGF0YSBiZWZvcmUgd2UgY2FuIGNoZWNrIHRoYXQgaXQKKyAgICAgICAgIyBnb3QgYW55IGRvd24gYmVsb3cuCisgICAgICAgIHMuc3RhcnRfcmVzZW5kX2V2ZW50LnNldCgpCisgICAgICAgIHMuam9pbigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbXSkKKyAgICAgICAgIyB0aGUgc2VydmVyIG1pZ2h0IGhhdmUgYmVlbiBhYmxlIHRvIHNlbmQgYSBieXRlIG9yIHR3byBiYWNrLCBidXQgdGhpcworICAgICAgICAjIGF0IGxlYXN0IGNoZWNrcyB0aGF0IGl0IHJlY2VpdmVkIHNvbWV0aGluZyBhbmQgZGlkbid0IGp1c3QgZmFpbAorICAgICAgICAjICh3aGljaCBjb3VsZCBzdGlsbCByZXN1bHQgaW4gdGhlIGNsaWVudCBub3QgaGF2aW5nIHJlY2VpdmVkIGFueXRoaW5nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHMuYnVmZmVyKSA+IDApCisKKworY2xhc3MgVGVzdEFzeW5jaGF0X1dpdGhQb2xsKFRlc3RBc3luY2hhdCk6CisgICAgdXNlcG9sbCA9IFRydWUKKworY2xhc3MgVGVzdEhlbHBlckZ1bmN0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZmluZF9wcmVmaXhfYXRfZW5kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzeW5jaGF0LmZpbmRfcHJlZml4X2F0X2VuZCgicXdlcnR5XHIiLCAiXHJcbiIpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzeW5jaGF0LmZpbmRfcHJlZml4X2F0X2VuZCgicXdlcnR5ZGtqZiIsICJcclxuIiksIDApCisKK2NsYXNzIFRlc3RGaWZvKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaGF0LmZpZm8oKQorICAgICAgICBmLnB1c2goNykKKyAgICAgICAgZi5wdXNoKCdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZiksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5maXJzdCgpLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucG9wKCksICgxLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZiksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5maXJzdCgpLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5pc19lbXB0eSgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBvcCgpLCAoMSwgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5pc19lbXB0eSgpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucG9wKCksICgwLCBOb25lKSkKKworICAgIGRlZiB0ZXN0X2dpdmVuX2xpc3Qoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2hhdC5maWZvKFsneCcsIDE3LCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZiksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wb3AoKSwgKDEsICd4JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wb3AoKSwgKDEsIDE3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBvcCgpLCAoMSwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wb3AoKSwgKDAsIE5vbmUpKQorCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RBc3luY2hhdCwgVGVzdEFzeW5jaGF0X1dpdGhQb2xsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdEhlbHBlckZ1bmN0aW9ucywgVGVzdEZpZm8pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FzeW5jb3JlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYXN5bmNvcmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM0NDcwZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2FzeW5jb3JlLnB5CkBAIC0wLDAgKzEsNzQ1IEBACitpbXBvcnQgYXN5bmNvcmUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHNlbGVjdAoraW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzdHJ1Y3QKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCB1bmxpbmsKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCitIT1NUID0gdGVzdF9zdXBwb3J0LkhPU1QKKworY2xhc3MgZHVtbXlzb2NrZXQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmNsb3NlZCA9IEZhbHNlCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2VkID0gVHJ1ZQorCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDQyCisKK2NsYXNzIGR1bW15Y2hhbm5lbDoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc29ja2V0ID0gZHVtbXlzb2NrZXQoKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCisKK2NsYXNzIGV4aXRpbmdkdW1teToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBoYW5kbGVfcmVhZF9ldmVudChzZWxmKToKKyAgICAgICAgcmFpc2UgYXN5bmNvcmUuRXhpdE5vdygpCisKKyAgICBoYW5kbGVfd3JpdGVfZXZlbnQgPSBoYW5kbGVfcmVhZF9ldmVudAorICAgIGhhbmRsZV9jbG9zZSA9IGhhbmRsZV9yZWFkX2V2ZW50CisgICAgaGFuZGxlX2V4cHRfZXZlbnQgPSBoYW5kbGVfcmVhZF9ldmVudAorCitjbGFzcyBjcmFzaGluZ2R1bW15OgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5lcnJvcl9oYW5kbGVkID0gRmFsc2UKKworICAgIGRlZiBoYW5kbGVfcmVhZF9ldmVudChzZWxmKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCkKKworICAgIGhhbmRsZV93cml0ZV9ldmVudCA9IGhhbmRsZV9yZWFkX2V2ZW50CisgICAgaGFuZGxlX2Nsb3NlID0gaGFuZGxlX3JlYWRfZXZlbnQKKyAgICBoYW5kbGVfZXhwdF9ldmVudCA9IGhhbmRsZV9yZWFkX2V2ZW50CisKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmVycm9yX2hhbmRsZWQgPSBUcnVlCisKKyMgdXNlZCB3aGVuIHRlc3Rpbmcgc2VuZGVyczsganVzdCBjb2xsZWN0cyB3aGF0IGl0IGdldHMgdW50aWwgbmV3bGluZSBpcyBzZW50CitkZWYgY2FwdHVyZV9zZXJ2ZXIoZXZ0LCBidWYsIHNlcnYpOgorICAgIHRyeToKKyAgICAgICAgc2Vydi5saXN0ZW4oNSkKKyAgICAgICAgY29ubiwgYWRkciA9IHNlcnYuYWNjZXB0KCkKKyAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBuID0gMjAwCisgICAgICAgIHdoaWxlIG4gPiAwOgorICAgICAgICAgICAgciwgdywgZSA9IHNlbGVjdC5zZWxlY3QoW2Nvbm5dLCBbXSwgW10pCisgICAgICAgICAgICBpZiByOgorICAgICAgICAgICAgICAgIGRhdGEgPSBjb25uLnJlY3YoMTApCisgICAgICAgICAgICAgICAgIyBrZWVwIGV2ZXJ5dGhpbmcgZXhjZXB0IGZvciB0aGUgbmV3bGluZSB0ZXJtaW5hdG9yCisgICAgICAgICAgICAgICAgYnVmLndyaXRlKGRhdGEucmVwbGFjZSgnXG4nLCAnJykpCisgICAgICAgICAgICAgICAgaWYgJ1xuJyBpbiBkYXRhOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbiAtPSAxCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisKKyAgICAgICAgY29ubi5jbG9zZSgpCisgICAgZmluYWxseToKKyAgICAgICAgc2Vydi5jbG9zZSgpCisgICAgICAgIGV2dC5zZXQoKQorCisKK2NsYXNzIEhlbHBlckZ1bmN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3JlYWR3cml0ZWV4YyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBleGNlcHRpb24gaGFuZGxpbmcgYmVoYXZpb3Igb2YgcmVhZCwgd3JpdGUgYW5kIF9leGNlcHRpb24KKworICAgICAgICAjIGNoZWNrIHRoYXQgRXhpdE5vdyBleGNlcHRpb25zIGluIHRoZSBvYmplY3QgaGFuZGxlciBtZXRob2QKKyAgICAgICAgIyBidWJibGVzIGFsbCB0aGUgd2F5IHVwIHRocm91Z2ggYXN5bmNvcmUgcmVhZC93cml0ZS9fZXhjZXB0aW9uIGNhbGxzCisgICAgICAgIHRyMSA9IGV4aXRpbmdkdW1teSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jb3JlLkV4aXROb3csIGFzeW5jb3JlLnJlYWQsIHRyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNvcmUuRXhpdE5vdywgYXN5bmNvcmUud3JpdGUsIHRyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNvcmUuRXhpdE5vdywgYXN5bmNvcmUuX2V4Y2VwdGlvbiwgdHIxKQorCisgICAgICAgICMgY2hlY2sgdGhhdCBhbiBleGNlcHRpb24gb3RoZXIgdGhhbiBFeGl0Tm93IGluIHRoZSBvYmplY3QgaGFuZGxlcgorICAgICAgICAjIG1ldGhvZCBjYXVzZXMgdGhlIGhhbmRsZV9lcnJvciBtZXRob2QgdG8gZ2V0IGNhbGxlZAorICAgICAgICB0cjIgPSBjcmFzaGluZ2R1bW15KCkKKyAgICAgICAgYXN5bmNvcmUucmVhZCh0cjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIyLmVycm9yX2hhbmRsZWQsIFRydWUpCisKKyAgICAgICAgdHIyID0gY3Jhc2hpbmdkdW1teSgpCisgICAgICAgIGFzeW5jb3JlLndyaXRlKHRyMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cjIuZXJyb3JfaGFuZGxlZCwgVHJ1ZSkKKworICAgICAgICB0cjIgPSBjcmFzaGluZ2R1bW15KCkKKyAgICAgICAgYXN5bmNvcmUuX2V4Y2VwdGlvbih0cjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIyLmVycm9yX2hhbmRsZWQsIFRydWUpCisKKyAgICAjIGFzeW5jb3JlLnJlYWR3cml0ZSB1c2VzIGNvbnN0YW50cyBpbiB0aGUgc2VsZWN0IG1vZHVsZSB0aGF0CisgICAgIyBhcmUgbm90IHByZXNlbnQgaW4gV2luZG93cyBzeXN0ZW1zIChzZWUgdGhpcyB0aHJlYWQ6CisgICAgIyBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tbGlzdC8yMDAxLU9jdG9iZXIvMTA5OTczLmh0bWwpCisgICAgIyBUaGVzZSBjb25zdGFudHMgc2hvdWxkIGJlIHByZXNlbnQgYXMgbG9uZyBhcyBwb2xsIGlzIGF2YWlsYWJsZQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzZWxlY3QsICdwb2xsJyksICdzZWxlY3QucG9sbCByZXF1aXJlZCcpCisgICAgZGVmIHRlc3RfcmVhZHdyaXRlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgY29ycmVjdCBtZXRob2RzIGFyZSBjYWxsZWQgYnkgcmVhZHdyaXRlKCkKKworICAgICAgICBhdHRyaWJ1dGVzID0gKCdyZWFkJywgJ2V4cHQnLCAnd3JpdGUnLCAnY2xvc2VkJywgJ2Vycm9yX2hhbmRsZWQnKQorCisgICAgICAgIGV4cGVjdGVkID0gKAorICAgICAgICAgICAgKHNlbGVjdC5QT0xMSU4sICdyZWFkJyksCisgICAgICAgICAgICAoc2VsZWN0LlBPTExQUkksICdleHB0JyksCisgICAgICAgICAgICAoc2VsZWN0LlBPTExPVVQsICd3cml0ZScpLAorICAgICAgICAgICAgKHNlbGVjdC5QT0xMRVJSLCAnY2xvc2VkJyksCisgICAgICAgICAgICAoc2VsZWN0LlBPTExIVVAsICdjbG9zZWQnKSwKKyAgICAgICAgICAgIChzZWxlY3QuUE9MTE5WQUwsICdjbG9zZWQnKSwKKyAgICAgICAgICAgICkKKworICAgICAgICBjbGFzcyB0ZXN0b2JqOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYucmVhZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuZXhwdCA9IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcl9oYW5kbGVkID0gRmFsc2UKKworICAgICAgICAgICAgZGVmIGhhbmRsZV9yZWFkX2V2ZW50KHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYucmVhZCA9IFRydWUKKworICAgICAgICAgICAgZGVmIGhhbmRsZV93cml0ZV9ldmVudChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlID0gVHJ1ZQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2Nsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VkID0gVHJ1ZQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2V4cHRfZXZlbnQoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5leHB0ID0gVHJ1ZQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JfaGFuZGxlZCA9IFRydWUKKworICAgICAgICBmb3IgZmxhZywgZXhwZWN0ZWRhdHRyIGluIGV4cGVjdGVkOgorICAgICAgICAgICAgdG9iaiA9IHRlc3RvYmooKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHRvYmosIGV4cGVjdGVkYXR0ciksIEZhbHNlKQorICAgICAgICAgICAgYXN5bmNvcmUucmVhZHdyaXRlKHRvYmosIGZsYWcpCisKKyAgICAgICAgICAgICMgT25seSB0aGUgYXR0cmlidXRlIG1vZGlmaWVkIGJ5IHRoZSByb3V0aW5lIHdlIGV4cGVjdCB0byBiZQorICAgICAgICAgICAgIyBjYWxsZWQgc2hvdWxkIGJlIFRydWUuCisgICAgICAgICAgICBmb3IgYXR0ciBpbiBhdHRyaWJ1dGVzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cih0b2JqLCBhdHRyKSwgYXR0cj09ZXhwZWN0ZWRhdHRyKQorCisgICAgICAgICAgICAjIGNoZWNrIHRoYXQgRXhpdE5vdyBleGNlcHRpb25zIGluIHRoZSBvYmplY3QgaGFuZGxlciBtZXRob2QKKyAgICAgICAgICAgICMgYnViYmxlcyBhbGwgdGhlIHdheSB1cCB0aHJvdWdoIGFzeW5jb3JlIHJlYWR3cml0ZSBjYWxsCisgICAgICAgICAgICB0cjEgPSBleGl0aW5nZHVtbXkoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNvcmUuRXhpdE5vdywgYXN5bmNvcmUucmVhZHdyaXRlLCB0cjEsIGZsYWcpCisKKyAgICAgICAgICAgICMgY2hlY2sgdGhhdCBhbiBleGNlcHRpb24gb3RoZXIgdGhhbiBFeGl0Tm93IGluIHRoZSBvYmplY3QgaGFuZGxlcgorICAgICAgICAgICAgIyBtZXRob2QgY2F1c2VzIHRoZSBoYW5kbGVfZXJyb3IgbWV0aG9kIHRvIGdldCBjYWxsZWQKKyAgICAgICAgICAgIHRyMiA9IGNyYXNoaW5nZHVtbXkoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cjIuZXJyb3JfaGFuZGxlZCwgRmFsc2UpCisgICAgICAgICAgICBhc3luY29yZS5yZWFkd3JpdGUodHIyLCBmbGFnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cjIuZXJyb3JfaGFuZGxlZCwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlYWxsKHNlbGYpOgorICAgICAgICBzZWxmLmNsb3NlYWxsX2NoZWNrKEZhbHNlKQorCisgICAgZGVmIHRlc3RfY2xvc2VhbGxfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZWFsbF9jaGVjayhUcnVlKQorCisgICAgZGVmIGNsb3NlYWxsX2NoZWNrKHNlbGYsIHVzZWRlZmF1bHQpOgorICAgICAgICAjIENoZWNrIHRoYXQgY2xvc2VfYWxsKCkgY2xvc2VzIGV2ZXJ5dGhpbmcgaW4gYSBnaXZlbiBtYXAKKworICAgICAgICBsID0gW10KKyAgICAgICAgdGVzdG1hcCA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIGMgPSBkdW1teWNoYW5uZWwoKQorICAgICAgICAgICAgbC5hcHBlbmQoYykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zb2NrZXQuY2xvc2VkLCBGYWxzZSkKKyAgICAgICAgICAgIHRlc3RtYXBbaV0gPSBjCisKKyAgICAgICAgaWYgdXNlZGVmYXVsdDoKKyAgICAgICAgICAgIHNvY2tldG1hcCA9IGFzeW5jb3JlLnNvY2tldF9tYXAKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBhc3luY29yZS5zb2NrZXRfbWFwID0gdGVzdG1hcAorICAgICAgICAgICAgICAgIGFzeW5jb3JlLmNsb3NlX2FsbCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHRlc3RtYXAsIGFzeW5jb3JlLnNvY2tldF9tYXAgPSBhc3luY29yZS5zb2NrZXRfbWFwLCBzb2NrZXRtYXAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzeW5jb3JlLmNsb3NlX2FsbCh0ZXN0bWFwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RtYXApLCAwKQorCisgICAgICAgIGZvciBjIGluIGw6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc29ja2V0LmNsb3NlZCwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2NvbXBhY3RfdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkkgZG9uJ3QgbGlrZSBzcGFtISIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJlYWxfdCwgcmVhbF92LCByZWFsX3RiID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIHIgPSBhc3luY29yZS5jb21wYWN0X3RyYWNlYmFjaygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgKGYsIGZ1bmN0aW9uLCBsaW5lKSwgdCwgdiwgaW5mbyA9IHIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLnNwbGl0KGYpWy0xXSwgJ3Rlc3RfYXN5bmNvcmUucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmN0aW9uLCAndGVzdF9jb21wYWN0X3RyYWNlYmFjaycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgcmVhbF90KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsIHJlYWxfdikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLCAnWyVzfCVzfCVzXScgJSAoZiwgZnVuY3Rpb24sIGxpbmUpKQorCisKK2NsYXNzIERpc3BhdGNoZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGFzeW5jb3JlLmNsb3NlX2FsbCgpCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgZCA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucmVhZGFibGUoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLndyaXRhYmxlKCksIFRydWUpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBkID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihkKSwgJzxhc3luY29yZS5kaXNwYXRjaGVyIGF0ICUjeD4nICUgaWQoZCkpCisKKyAgICBkZWYgdGVzdF9sb2coc2VsZik6CisgICAgICAgIGQgPSBhc3luY29yZS5kaXNwYXRjaGVyKCkKKworICAgICAgICAjIGNhcHR1cmUgb3V0cHV0IG9mIGRpc3BhdGNoZXIubG9nKCkgKHRvIHN0ZGVycikKKyAgICAgICAgZnAgPSBTdHJpbmdJTygpCisgICAgICAgIHN0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgbDEgPSAiTG92ZWx5IHNwYW0hIFdvbmRlcmZ1bCBzcGFtISIKKyAgICAgICAgbDIgPSAiSSBkb24ndCBsaWtlIHNwYW0hIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuc3RkZXJyID0gZnAKKyAgICAgICAgICAgIGQubG9nKGwxKQorICAgICAgICAgICAgZC5sb2cobDIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc3RkZXJyID0gc3RkZXJyCisKKyAgICAgICAgbGluZXMgPSBmcC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbJ2xvZzogJXMnICUgbDEsICdsb2c6ICVzJyAlIGwyXSkKKworICAgIGRlZiB0ZXN0X2xvZ19pbmZvKHNlbGYpOgorICAgICAgICBkID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCisKKyAgICAgICAgIyBjYXB0dXJlIG91dHB1dCBvZiBkaXNwYXRjaGVyLmxvZ19pbmZvKCkgKHRvIHN0ZG91dCB2aWEgcHJpbnQpCisgICAgICAgIGZwID0gU3RyaW5nSU8oKQorICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIGwxID0gIkhhdmUgeW91IGdvdCBhbnl0aGluZyB3aXRob3V0IHNwYW0/IgorICAgICAgICBsMiA9ICJXaHkgY2FuJ3Qgc2hlIGhhdmUgZWdnIGJhY29uIHNwYW0gYW5kIHNhdXNhZ2U/IgorICAgICAgICBsMyA9ICJUSEFUJ1MgZ290IHNwYW0gaW4gaXQhIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gZnAKKyAgICAgICAgICAgIGQubG9nX2luZm8obDEsICdFR0dTJykKKyAgICAgICAgICAgIGQubG9nX2luZm8obDIpCisgICAgICAgICAgICBkLmxvZ19pbmZvKGwzLCAnU1BBTScpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3Rkb3V0CisKKyAgICAgICAgbGluZXMgPSBmcC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQorICAgICAgICBleHBlY3RlZCA9IFsnRUdHUzogJXMnICUgbDEsICdpbmZvOiAlcycgJSBsMiwgJ1NQQU06ICVzJyAlIGwzXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfdW5oYW5kbGVkKHNlbGYpOgorICAgICAgICBkID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCisgICAgICAgIGQuaWdub3JlX2xvZ190eXBlcyA9ICgpCisKKyAgICAgICAgIyBjYXB0dXJlIG91dHB1dCBvZiBkaXNwYXRjaGVyLmxvZ19pbmZvKCkgKHRvIHN0ZG91dCB2aWEgcHJpbnQpCisgICAgICAgIGZwID0gU3RyaW5nSU8oKQorICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBmcAorICAgICAgICAgICAgZC5oYW5kbGVfZXhwdCgpCisgICAgICAgICAgICBkLmhhbmRsZV9yZWFkKCkKKyAgICAgICAgICAgIGQuaGFuZGxlX3dyaXRlKCkKKyAgICAgICAgICAgIGQuaGFuZGxlX2Nvbm5lY3QoKQorICAgICAgICAgICAgZC5oYW5kbGVfYWNjZXB0KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKKworICAgICAgICBsaW5lcyA9IGZwLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCisgICAgICAgIGV4cGVjdGVkID0gWyd3YXJuaW5nOiB1bmhhbmRsZWQgaW5jb21pbmcgcHJpb3JpdHkgZXZlbnQnLAorICAgICAgICAgICAgICAgICAgICAnd2FybmluZzogdW5oYW5kbGVkIHJlYWQgZXZlbnQnLAorICAgICAgICAgICAgICAgICAgICAnd2FybmluZzogdW5oYW5kbGVkIHdyaXRlIGV2ZW50JywKKyAgICAgICAgICAgICAgICAgICAgJ3dhcm5pbmc6IHVuaGFuZGxlZCBjb25uZWN0IGV2ZW50JywKKyAgICAgICAgICAgICAgICAgICAgJ3dhcm5pbmc6IHVuaGFuZGxlZCBhY2NlcHQgZXZlbnQnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2lzc3VlXzg1OTQoc2VsZik6CisgICAgICAgICMgWFhYIC0gdGhpcyB0ZXN0IGlzIHN1cHBvc2VkIHRvIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciBQeXRob24KKyAgICAgICAgIyB2ZXJzaW9uCisgICAgICAgIGQgPSBhc3luY29yZS5kaXNwYXRjaGVyKHNvY2tldC5zb2NrZXQoKSkKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGVycm9yIG1lc3NhZ2Ugbm8gbG9uZ2VyIHJlZmVycyB0byB0aGUgc29ja2V0CisgICAgICAgICMgb2JqZWN0IGJ1dCB0aGUgZGlzcGF0Y2hlciBpbnN0YW5jZSBpbnN0ZWFkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKEF0dHJpYnV0ZUVycm9yLCAnZGlzcGF0Y2hlciBpbnN0YW5jZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIsIGQsICdmb28nKQorICAgICAgICAjIGNoZWFwIGluaGVyaXRhbmNlIHdpdGggdGhlIHVuZGVybHlpbmcgc29ja2V0IGlzIHN1cHBvc2VkCisgICAgICAgICMgdG8gc3RpbGwgd29yayBidXQgYSBEZXByZWNhdGlvbldhcm5pbmcgaXMgZXhwZWN0ZWQKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKKyAgICAgICAgICAgIGZhbWlseSA9IGQuZmFtaWx5CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhbWlseSwgc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHdbMF0uY2F0ZWdvcnksIERlcHJlY2F0aW9uV2FybmluZykpCisKKyAgICBkZWYgdGVzdF9zdHJlcnJvcihzZWxmKToKKyAgICAgICAgIyByZWZlcnMgdG8gYnVnICM4NTczCisgICAgICAgIGVyciA9IGFzeW5jb3JlLl9zdHJlcnJvcihlcnJuby5FUEVSTSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgJ3N0cmVycm9yJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgb3Muc3RyZXJyb3IoZXJybm8uRVBFUk0pKQorICAgICAgICBlcnIgPSBhc3luY29yZS5fc3RyZXJyb3IoLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIgIT0gIiIpCisKKworY2xhc3MgZGlzcGF0Y2hlcndpdGhzZW5kX25vcmVhZChhc3luY29yZS5kaXNwYXRjaGVyX3dpdGhfc2VuZCk6CisgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBoYW5kbGVfY29ubmVjdChzZWxmKToKKyAgICAgICAgcGFzcworCitjbGFzcyBEaXNwYXRjaGVyV2l0aFNlbmRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdXNlcG9sbCA9IEZhbHNlCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgYXN5bmNvcmUuY2xvc2VfYWxsKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgQHRlc3Rfc3VwcG9ydC5yZWFwX3RocmVhZHMKKyAgICBkZWYgdGVzdF9zZW5kKHNlbGYpOgorICAgICAgICBldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzb2NrLnNldHRpbWVvdXQoMykKKyAgICAgICAgcG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc29jaykKKworICAgICAgICBjYXAgPSBTdHJpbmdJTygpCisgICAgICAgIGFyZ3MgPSAoZXZ0LCBjYXAsIHNvY2spCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1jYXB0dXJlX3NlcnZlciwgYXJncz1hcmdzKQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyB3YWl0IGEgbGl0dGxlIGxvbmdlciBmb3IgdGhlIHNlcnZlciB0byBpbml0aWFsaXplIChpdCBzb21ldGltZXMKKyAgICAgICAgICAgICMgcmVmdXNlcyBjb25uZWN0aW9ucyBvbiBzbG93IG1hY2hpbmVzIHdpdGhvdXQgdGhpcyB3YWl0KQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjIpCisKKyAgICAgICAgICAgIGRhdGEgPSAiU3VwcG9zZSB0aGVyZSBpc24ndCBhIDE2LXRvbiB3ZWlnaHQ/IgorICAgICAgICAgICAgZCA9IGRpc3BhdGNoZXJ3aXRoc2VuZF9ub3JlYWQoKQorICAgICAgICAgICAgZC5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICBkLmNvbm5lY3QoKEhPU1QsIHBvcnQpKQorCisgICAgICAgICAgICAjIGdpdmUgdGltZSBmb3Igc29ja2V0IHRvIGNvbm5lY3QKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorCisgICAgICAgICAgICBkLnNlbmQoZGF0YSkKKyAgICAgICAgICAgIGQuc2VuZChkYXRhKQorICAgICAgICAgICAgZC5zZW5kKCdcbicpCisKKyAgICAgICAgICAgIG4gPSAxMDAwCisgICAgICAgICAgICB3aGlsZSBkLm91dF9idWZmZXIgYW5kIG4gPiAwOgorICAgICAgICAgICAgICAgIGFzeW5jb3JlLnBvbGwoKQorICAgICAgICAgICAgICAgIG4gLT0gMQorCisgICAgICAgICAgICBldnQud2FpdCgpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwLmdldHZhbHVlKCksIGRhdGEqMikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHQuam9pbigpCisKKworY2xhc3MgRGlzcGF0Y2hlcldpdGhTZW5kVGVzdHNfVXNlUG9sbChEaXNwYXRjaGVyV2l0aFNlbmRUZXN0cyk6CisgICAgdXNlcG9sbCA9IFRydWUKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihhc3luY29yZSwgJ2ZpbGVfd3JhcHBlcicpLAorICAgICAgICAgICAgICAgICAgICAgJ2FzeW5jb3JlLmZpbGVfd3JhcHBlciByZXF1aXJlZCcpCitjbGFzcyBGaWxlV3JhcHBlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gIkl0J3Mgbm90IGRlYWQsIGl0J3Mgc2xlZXBpbmchIgorICAgICAgICB3aXRoIGZpbGUoVEVTVEZOLCAndycpIGFzIGg6CisgICAgICAgICAgICBoLndyaXRlKHNlbGYuZCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKworICAgIGRlZiB0ZXN0X3JlY3Yoc2VsZik6CisgICAgICAgIGZkID0gb3Mub3BlbihURVNURk4sIG9zLk9fUkRPTkxZKQorICAgICAgICB3ID0gYXN5bmNvcmUuZmlsZV93cmFwcGVyKGZkKQorICAgICAgICBvcy5jbG9zZShmZCkKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHcuZmQsIGZkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHcuZmlsZW5vKCksIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcucmVjdigxMyksICJJdCdzIG5vdCBkZWFkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LnJlYWQoNiksICIsIGl0J3MiKQorICAgICAgICB3LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdy5yZWFkLCAxKQorCisKKyAgICBkZWYgdGVzdF9zZW5kKHNlbGYpOgorICAgICAgICBkMSA9ICJDb21lIGFnYWluPyIKKyAgICAgICAgZDIgPSAiSSB3YW50IHRvIGJ1eSBzb21lIGNoZWVzZS4iCisgICAgICAgIGZkID0gb3Mub3BlbihURVNURk4sIG9zLk9fV1JPTkxZIHwgb3MuT19BUFBFTkQpCisgICAgICAgIHcgPSBhc3luY29yZS5maWxlX3dyYXBwZXIoZmQpCisgICAgICAgIG9zLmNsb3NlKGZkKQorCisgICAgICAgIHcud3JpdGUoZDEpCisgICAgICAgIHcuc2VuZChkMikKKyAgICAgICAgdy5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZShURVNURk4pLnJlYWQoKSwgc2VsZi5kICsgZDEgKyBkMikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoYXN5bmNvcmUsICdmaWxlX2Rpc3BhdGNoZXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYXN5bmNvcmUuZmlsZV9kaXNwYXRjaGVyIHJlcXVpcmVkJykKKyAgICBkZWYgdGVzdF9kaXNwYXRjaGVyKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oVEVTVEZOLCBvcy5PX1JET05MWSkKKyAgICAgICAgZGF0YSA9IFtdCisgICAgICAgIGNsYXNzIEZpbGVEaXNwYXRjaGVyKGFzeW5jb3JlLmZpbGVfZGlzcGF0Y2hlcik6CisgICAgICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoc2VsZi5yZWN2KDI5KSkKKyAgICAgICAgcyA9IEZpbGVEaXNwYXRjaGVyKGZkKQorICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgYXN5bmNvcmUubG9vcCh0aW1lb3V0PTAuMDEsIHVzZV9wb2xsPVRydWUsIGNvdW50PTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIiLmpvaW4oZGF0YSksIHNlbGYuZCkKKworCitjbGFzcyBCYXNlVGVzdEhhbmRsZXIoYXN5bmNvcmUuZGlzcGF0Y2hlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc29jaz1Ob25lKToKKyAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmLCBzb2NrKQorICAgICAgICBzZWxmLmZsYWcgPSBGYWxzZQorCisgICAgZGVmIGhhbmRsZV9hY2NlcHQoc2VsZik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiaGFuZGxlX2FjY2VwdCBub3Qgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIikKKworICAgIGRlZiBoYW5kbGVfY29ubmVjdChzZWxmKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJoYW5kbGVfY29ubmVjdCBub3Qgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIikKKworICAgIGRlZiBoYW5kbGVfZXhwdChzZWxmKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJoYW5kbGVfZXhwdCBub3Qgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIikKKworICAgIGRlZiBoYW5kbGVfY2xvc2Uoc2VsZik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiaGFuZGxlX2Nsb3NlIG5vdCBzdXBwb3NlZCB0byBiZSBjYWxsZWQiKQorCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgcmFpc2UKKworCitjbGFzcyBUQ1BTZXJ2ZXIoYXN5bmNvcmUuZGlzcGF0Y2hlcik6CisgICAgIiIiQSBzZXJ2ZXIgd2hpY2ggbGlzdGVucyBvbiBhbiBhZGRyZXNzIGFuZCBkaXNwYXRjaGVzIHRoZQorICAgIGNvbm5lY3Rpb24gdG8gYSBoYW5kbGVyLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhbmRsZXI9QmFzZVRlc3RIYW5kbGVyLCBob3N0PUhPU1QsIHBvcnQ9MCk6CisgICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuc2V0X3JldXNlX2FkZHIoKQorICAgICAgICBzZWxmLmJpbmQoKGhvc3QsIHBvcnQpKQorICAgICAgICBzZWxmLmxpc3Rlbig1KQorICAgICAgICBzZWxmLmhhbmRsZXIgPSBoYW5kbGVyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYWRkcmVzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbOjJdCisKKyAgICBkZWYgaGFuZGxlX2FjY2VwdChzZWxmKToKKyAgICAgICAgcGFpciA9IHNlbGYuYWNjZXB0KCkKKyAgICAgICAgaWYgcGFpciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlcihwYWlyWzBdKQorCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgcmFpc2UKKworCitjbGFzcyBCYXNlQ2xpZW50KEJhc2VUZXN0SGFuZGxlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcyk6CisgICAgICAgIEJhc2VUZXN0SGFuZGxlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5jb25uZWN0KGFkZHJlc3MpCisKKyAgICBkZWYgaGFuZGxlX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBCYXNlVGVzdEFQSSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGFzeW5jb3JlLmNsb3NlX2FsbCgpCisKKyAgICBkZWYgbG9vcF93YWl0aW5nX2Zvcl9mbGFnKHNlbGYsIGluc3RhbmNlLCB0aW1lb3V0PTUpOgorICAgICAgICB0aW1lb3V0ID0gZmxvYXQodGltZW91dCkgLyAxMDAKKyAgICAgICAgY291bnQgPSAxMDAKKyAgICAgICAgd2hpbGUgYXN5bmNvcmUuc29ja2V0X21hcCBhbmQgY291bnQgPiAwOgorICAgICAgICAgICAgYXN5bmNvcmUubG9vcCh0aW1lb3V0PTAuMDEsIGNvdW50PTEsIHVzZV9wb2xsPXNlbGYudXNlX3BvbGwpCisgICAgICAgICAgICBpZiBpbnN0YW5jZS5mbGFnOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgY291bnQgLT0gMQorICAgICAgICAgICAgdGltZS5zbGVlcCh0aW1lb3V0KQorICAgICAgICBzZWxmLmZhaWwoImZsYWcgbm90IHNldCIpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfY29ubmVjdChzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgaGFuZGxlX2Nvbm5lY3QgaXMgY2FsbGVkIG9uIGNvbm5lY3QoKQorCisgICAgICAgIGNsYXNzIFRlc3RDbGllbnQoQmFzZUNsaWVudCk6CisgICAgICAgICAgICBkZWYgaGFuZGxlX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5mbGFnID0gVHJ1ZQorCisgICAgICAgIHNlcnZlciA9IFRDUFNlcnZlcigpCisgICAgICAgIGNsaWVudCA9IFRlc3RDbGllbnQoc2VydmVyLmFkZHJlc3MpCisgICAgICAgIHNlbGYubG9vcF93YWl0aW5nX2Zvcl9mbGFnKGNsaWVudCkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9hY2NlcHQoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIGhhbmRsZV9hY2NlcHQoKSBpcyBjYWxsZWQgd2hlbiBhIGNsaWVudCBjb25uZWN0cworCisgICAgICAgIGNsYXNzIFRlc3RMaXN0ZW5lcihCYXNlVGVzdEhhbmRsZXIpOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgQmFzZVRlc3RIYW5kbGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICAgICAgc2VsZi5iaW5kKChIT1NULCAwKSkKKyAgICAgICAgICAgICAgICBzZWxmLmxpc3Rlbig1KQorICAgICAgICAgICAgICAgIHNlbGYuYWRkcmVzcyA9IHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbOjJdCisKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfYWNjZXB0KHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZyA9IFRydWUKKworICAgICAgICBzZXJ2ZXIgPSBUZXN0TGlzdGVuZXIoKQorICAgICAgICBjbGllbnQgPSBCYXNlQ2xpZW50KHNlcnZlci5hZGRyZXNzKQorICAgICAgICBzZWxmLmxvb3Bfd2FpdGluZ19mb3JfZmxhZyhzZXJ2ZXIpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfcmVhZChzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgaGFuZGxlX3JlYWQgaXMgY2FsbGVkIG9uIGRhdGEgcmVjZWl2ZWQKKworICAgICAgICBjbGFzcyBUZXN0Q2xpZW50KEJhc2VDbGllbnQpOgorICAgICAgICAgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZyA9IFRydWUKKworICAgICAgICBjbGFzcyBUZXN0SGFuZGxlcihCYXNlVGVzdEhhbmRsZXIpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgorICAgICAgICAgICAgICAgIEJhc2VUZXN0SGFuZGxlci5fX2luaXRfXyhzZWxmLCBjb25uKQorICAgICAgICAgICAgICAgIHNlbGYuc2VuZCgneCcgKiAxMDI0KQorCisgICAgICAgIHNlcnZlciA9IFRDUFNlcnZlcihUZXN0SGFuZGxlcikKKyAgICAgICAgY2xpZW50ID0gVGVzdENsaWVudChzZXJ2ZXIuYWRkcmVzcykKKyAgICAgICAgc2VsZi5sb29wX3dhaXRpbmdfZm9yX2ZsYWcoY2xpZW50KQorCisgICAgZGVmIHRlc3RfaGFuZGxlX3dyaXRlKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSBoYW5kbGVfd3JpdGUgaXMgY2FsbGVkCisKKyAgICAgICAgY2xhc3MgVGVzdENsaWVudChCYXNlQ2xpZW50KToKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfd3JpdGUoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5mbGFnID0gVHJ1ZQorCisgICAgICAgIHNlcnZlciA9IFRDUFNlcnZlcigpCisgICAgICAgIGNsaWVudCA9IFRlc3RDbGllbnQoc2VydmVyLmFkZHJlc3MpCisgICAgICAgIHNlbGYubG9vcF93YWl0aW5nX2Zvcl9mbGFnKGNsaWVudCkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9jbG9zZShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgaGFuZGxlX2Nsb3NlIGlzIGNhbGxlZCB3aGVuIHRoZSBvdGhlciBlbmQgY2xvc2VzCisgICAgICAgICMgdGhlIGNvbm5lY3Rpb24KKworICAgICAgICBjbGFzcyBUZXN0Q2xpZW50KEJhc2VDbGllbnQpOgorCisgICAgICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICAgICAgICAgIyBpbiBvcmRlciB0byBtYWtlIGhhbmRsZV9jbG9zZSBiZSBjYWxsZWQgd2UgYXJlIHN1cHBvc2VkCisgICAgICAgICAgICAgICAgIyB0byBtYWtlIGF0IGxlYXN0IG9uZSByZWN2KCkgY2FsbAorICAgICAgICAgICAgICAgIHNlbGYucmVjdigxMDI0KQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2Nsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgICAgICBjbGFzcyBUZXN0SGFuZGxlcihCYXNlVGVzdEhhbmRsZXIpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgorICAgICAgICAgICAgICAgIEJhc2VUZXN0SGFuZGxlci5fX2luaXRfXyhzZWxmLCBjb25uKQorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgICAgIHNlcnZlciA9IFRDUFNlcnZlcihUZXN0SGFuZGxlcikKKyAgICAgICAgY2xpZW50ID0gVGVzdENsaWVudChzZXJ2ZXIuYWRkcmVzcykKKyAgICAgICAgc2VsZi5sb29wX3dhaXRpbmdfZm9yX2ZsYWcoY2xpZW50KQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgic3Vub3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICJPT0Igc3VwcG9ydCBpcyBicm9rZW4gb24gU29sYXJpcyIpCisgICAgZGVmIHRlc3RfaGFuZGxlX2V4cHQoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGhhbmRsZV9leHB0IGlzIGNhbGxlZCBvbiBPT0IgZGF0YSByZWNlaXZlZC4KKyAgICAgICAgIyBOb3RlOiB0aGlzIG1pZ2h0IGZhaWwgb24gc29tZSBwbGF0Zm9ybXMgYXMgT09CIGRhdGEgaXMKKyAgICAgICAgIyB0ZW51b3VzbHkgc3VwcG9ydGVkIGFuZCByYXJlbHkgdXNlZC4KKworICAgICAgICBjbGFzcyBUZXN0Q2xpZW50KEJhc2VDbGllbnQpOgorICAgICAgICAgICAgZGVmIGhhbmRsZV9leHB0KHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZyA9IFRydWUKKworICAgICAgICBjbGFzcyBUZXN0SGFuZGxlcihCYXNlVGVzdEhhbmRsZXIpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgorICAgICAgICAgICAgICAgIEJhc2VUZXN0SGFuZGxlci5fX2luaXRfXyhzZWxmLCBjb25uKQorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LnNlbmQoY2hyKDI0NCksIHNvY2tldC5NU0dfT09CKQorCisgICAgICAgIHNlcnZlciA9IFRDUFNlcnZlcihUZXN0SGFuZGxlcikKKyAgICAgICAgY2xpZW50ID0gVGVzdENsaWVudChzZXJ2ZXIuYWRkcmVzcykKKyAgICAgICAgc2VsZi5sb29wX3dhaXRpbmdfZm9yX2ZsYWcoY2xpZW50KQorCisgICAgZGVmIHRlc3RfaGFuZGxlX2Vycm9yKHNlbGYpOgorCisgICAgICAgIGNsYXNzIFRlc3RDbGllbnQoQmFzZUNsaWVudCk6CisgICAgICAgICAgICBkZWYgaGFuZGxlX3dyaXRlKHNlbGYpOgorICAgICAgICAgICAgICAgIDEuMCAvIDAKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5mbGFnID0gVHJ1ZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oImV4Y2VwdGlvbiBub3QgcmFpc2VkIikKKworICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoKQorICAgICAgICBjbGllbnQgPSBUZXN0Q2xpZW50KHNlcnZlci5hZGRyZXNzKQorICAgICAgICBzZWxmLmxvb3Bfd2FpdGluZ19mb3JfZmxhZyhjbGllbnQpCisKKyAgICBkZWYgdGVzdF9jb25uZWN0aW9uX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHNlcnZlciA9IFRDUFNlcnZlcigpCisgICAgICAgIGNsaWVudCA9IEJhc2VDbGllbnQoc2VydmVyLmFkZHJlc3MpCisKKyAgICAgICAgIyB3ZSBzdGFydCBkaXNjb25uZWN0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXJ2ZXIuY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVyLmFjY2VwdGluZykKKyAgICAgICAgIyB0aGlzIGNhbid0IGJlIHRha2VuIGZvciBncmFudGVkIGFjcm9zcyBhbGwgcGxhdGZvcm1zCisgICAgICAgICNzZWxmLmFzc2VydEZhbHNlKGNsaWVudC5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2xpZW50LmFjY2VwdGluZykKKworICAgICAgICAjIGV4ZWN1dGUgc29tZSBsb29wcyBzbyB0aGF0IGNsaWVudCBjb25uZWN0cyB0byBzZXJ2ZXIKKyAgICAgICAgYXN5bmNvcmUubG9vcCh0aW1lb3V0PTAuMDEsIHVzZV9wb2xsPXNlbGYudXNlX3BvbGwsIGNvdW50PTEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXJ2ZXIuY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVyLmFjY2VwdGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNsaWVudC5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2xpZW50LmFjY2VwdGluZykKKworICAgICAgICAjIGRpc2Nvbm5lY3QgdGhlIGNsaWVudAorICAgICAgICBjbGllbnQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlcnZlci5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXJ2ZXIuYWNjZXB0aW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNsaWVudC5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2xpZW50LmFjY2VwdGluZykKKworICAgICAgICAjIHN0b3Agc2VydmluZworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlcnZlci5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VydmVyLmFjY2VwdGluZykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zb2NrZXQoc2VsZik6CisgICAgICAgIHMgPSBhc3luY29yZS5kaXNwYXRjaGVyKCkKKyAgICAgICAgcy5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zb2NrZXQuZmFtaWx5LCBzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnNvY2tldC50eXBlLCBzb2NrZXQuU09DS19TVFJFQU0pCisKKyAgICBkZWYgdGVzdF9iaW5kKHNlbGYpOgorICAgICAgICBzMSA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoKQorICAgICAgICBzMS5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHMxLmJpbmQoKEhPU1QsIDApKQorICAgICAgICBzMS5saXN0ZW4oNSkKKyAgICAgICAgcG9ydCA9IHMxLnNvY2tldC5nZXRzb2NrbmFtZSgpWzFdCisKKyAgICAgICAgczIgPSBhc3luY29yZS5kaXNwYXRjaGVyKCkKKyAgICAgICAgczIuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAjIEVBRERSSU5VU0UgaW5kaWNhdGVzIHRoZSBzb2NrZXQgd2FzIGNvcnJlY3RseSBib3VuZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHMyLmJpbmQsIChIT1NULCBwb3J0KSkKKworICAgIGRlZiB0ZXN0X3NldF9yZXVzZV9hZGRyKHNlbGYpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIHVuaXR0ZXN0LnNraXAoIlNPX1JFVVNFQUREUiBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBpZiBTT19SRVVTRUFERFIgc3VjY2VlZGVkIGZvciBzb2NrIHdlIGV4cGVjdCBhc3luY29yZQorICAgICAgICAgICAgIyB0byBkbyB0aGUgc2FtZQorICAgICAgICAgICAgcyA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoc29ja2V0LnNvY2tldCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLnNvY2tldC5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT19SRVVTRUFERFIpKQorICAgICAgICAgICAgcy5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICBzLnNldF9yZXVzZV9hZGRyKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnNvY2tldC5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT19SRVVTRUFERFIpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc29jay5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIEB0ZXN0X3N1cHBvcnQucmVhcF90aHJlYWRzCisgICAgZGVmIHRlc3RfcXVpY2tfY29ubmVjdChzZWxmKToKKyAgICAgICAgIyBzZWU6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMDM0MAorICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoKQorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bGFtYmRhOiBhc3luY29yZS5sb29wKHRpbWVvdXQ9MC4xLCBjb3VudD01MDApKQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHQuam9pbikKKworICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoMjApOgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHMuc2V0dGltZW91dCguMikKKyAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX0xJTkdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygnaWknLCAxLCAwKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3Qoc2VydmVyLmFkZHJlc3MpCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKworY2xhc3MgVGVzdEFQSV9Vc2VTZWxlY3QoQmFzZVRlc3RBUEkpOgorICAgIHVzZV9wb2xsID0gRmFsc2UKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzZWxlY3QsICdwb2xsJyksICdzZWxlY3QucG9sbCByZXF1aXJlZCcpCitjbGFzcyBUZXN0QVBJX1VzZVBvbGwoQmFzZVRlc3RBUEkpOgorICAgIHVzZV9wb2xsID0gVHJ1ZQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0cyA9IFtIZWxwZXJGdW5jdGlvblRlc3RzLCBEaXNwYXRjaGVyVGVzdHMsIERpc3BhdGNoZXJXaXRoU2VuZFRlc3RzLAorICAgICAgICAgICAgIERpc3BhdGNoZXJXaXRoU2VuZFRlc3RzX1VzZVBvbGwsIFRlc3RBUElfVXNlU2VsZWN0LAorICAgICAgICAgICAgIFRlc3RBUElfVXNlUG9sbCwgRmlsZVdyYXBwZXJUZXN0XQorICAgIHJ1bl91bml0dGVzdCgqdGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2F0ZXhpdC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2F0ZXhpdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjg1Yjc1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYXRleGl0LnB5CkBAIC0wLDAgKzEsODIgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgYXRleGl0Citmcm9tIGltcCBpbXBvcnQgcmVsb2FkCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBzZWxmLnNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICBzZWxmLnNhdmVfc3RkZXJyID0gc3lzLnN0ZGVycgorICAgICAgICBzeXMuc3Rkb3V0ID0gc3lzLnN0ZGVyciA9IHNlbGYuc3Vic3RfaW8gPSBzCisgICAgICAgIHNlbGYuc2F2ZV9oYW5kbGVycyA9IGF0ZXhpdC5fZXhpdGhhbmRsZXJzCisgICAgICAgIGF0ZXhpdC5fZXhpdGhhbmRsZXJzID0gW10KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuc2F2ZV9zdGRvdXQKKyAgICAgICAgc3lzLnN0ZGVyciA9IHNlbGYuc2F2ZV9zdGRlcnIKKyAgICAgICAgYXRleGl0Ll9leGl0aGFuZGxlcnMgPSBzZWxmLnNhdmVfaGFuZGxlcnMKKworICAgIGRlZiB0ZXN0X2FyZ3Moc2VsZik6CisgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihzZWxmLmgxKQorICAgICAgICBhdGV4aXQucmVnaXN0ZXIoc2VsZi5oNCkKKyAgICAgICAgYXRleGl0LnJlZ2lzdGVyKHNlbGYuaDQsIDQsIGt3PSJhYmMiKQorICAgICAgICBhdGV4aXQuX3J1bl9leGl0ZnVuY3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3Vic3RfaW8uZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaDQgKDQsKSB7J2t3JzogJ2FiYyd9XG5oNCAoKSB7fVxuaDFcbiIpCisKKyAgICBkZWYgdGVzdF9iYWRhcmdzKHNlbGYpOgorICAgICAgICBhdGV4aXQucmVnaXN0ZXIobGFtYmRhOiAxLCAwLCAwLCAoeCBmb3IgeCBpbiAoMSwyKSksIDAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXRleGl0Ll9ydW5fZXhpdGZ1bmNzKQorCisgICAgZGVmIHRlc3Rfb3JkZXIoc2VsZik6CisgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihzZWxmLmgxKQorICAgICAgICBhdGV4aXQucmVnaXN0ZXIoc2VsZi5oMikKKyAgICAgICAgYXRleGl0LnJlZ2lzdGVyKHNlbGYuaDMpCisgICAgICAgIGF0ZXhpdC5fcnVuX2V4aXRmdW5jcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdWJzdF9pby5nZXR2YWx1ZSgpLCAiaDNcbmgyXG5oMVxuIikKKworICAgIGRlZiB0ZXN0X3N5c19vdmVycmlkZShzZWxmKToKKyAgICAgICAgIyBiZSBzdXJlIGEgcHJlc2V0IHN5cy5leGl0ZnVuYyBpcyBoYW5kbGVkIHByb3Blcmx5CisgICAgICAgIGV4ZnVuYyA9IHN5cy5leGl0ZnVuYworICAgICAgICBzeXMuZXhpdGZ1bmMgPSBzZWxmLmgxCisgICAgICAgIHJlbG9hZChhdGV4aXQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihzZWxmLmgyKQorICAgICAgICAgICAgYXRleGl0Ll9ydW5fZXhpdGZ1bmNzKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5leGl0ZnVuYyA9IGV4ZnVuYworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3Vic3RfaW8uZ2V0dmFsdWUoKSwgImgyXG5oMVxuIikKKworICAgIGRlZiB0ZXN0X3JhaXNlKHNlbGYpOgorICAgICAgICBhdGV4aXQucmVnaXN0ZXIoc2VsZi5yYWlzZTEpCisgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihzZWxmLnJhaXNlMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdGV4aXQuX3J1bl9leGl0ZnVuY3MpCisKKyAgICAjIyMgaGVscGVycworICAgIGRlZiBoMShzZWxmKToKKyAgICAgICAgcHJpbnQgImgxIgorCisgICAgZGVmIGgyKHNlbGYpOgorICAgICAgICBwcmludCAiaDIiCisKKyAgICBkZWYgaDMoc2VsZik6CisgICAgICAgIHByaW50ICJoMyIKKworICAgIGRlZiBoNChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwcmludCAiaDQiLCBhcmdzLCBrd2FyZ3MKKworICAgIGRlZiByYWlzZTEoc2VsZik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorCisgICAgZGVmIHJhaXNlMihzZWxmKToKKyAgICAgICAgcmFpc2UgU3lzdGVtRXJyb3IKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYXVkaW9vcC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2F1ZGlvb3AucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVhNTE1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2F1ZGlvb3AucHkKQEAgLTAsMCArMSwzOTMgQEAKK2ltcG9ydCBhdWRpb29wCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzdHJ1Y3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCisKK2Zvcm1hdHMgPSB7CisgICAgMTogJ2InLAorICAgIDI6ICdoJywKKyAgICA0OiAnaScsCit9CisKK2RlZiBwYWNrKHdpZHRoLCBkYXRhKToKKyAgICByZXR1cm4gc3RydWN0LnBhY2soJz0lZCVzJyAlIChsZW4oZGF0YSksIGZvcm1hdHNbd2lkdGhdKSwgKmRhdGEpCisKK3BhY2tzID0geworICAgIDE6IGxhbWJkYSAqZGF0YTogcGFjaygxLCBkYXRhKSwKKyAgICAyOiBsYW1iZGEgKmRhdGE6IHBhY2soMiwgZGF0YSksCisgICAgNDogbGFtYmRhICpkYXRhOiBwYWNrKDQsIGRhdGEpLAorfQorbWF4dmFsdWVzID0ge3c6ICgxIDw8ICg4ICogdyAtIDEpKSAtIDEgZm9yIHcgaW4gKDEsIDIsIDQpfQorbWludmFsdWVzID0ge3c6IC0xIDw8ICg4ICogdyAtIDEpIGZvciB3IGluICgxLCAyLCA0KX0KKworZGF0YXMgPSB7CisgICAgMTogYidceDAwXHgxMlx4NDVceGJiXHg3Zlx4ODBceGZmJywKKyAgICAyOiBwYWNrc1syXSgwLCAweDEyMzQsIDB4NDU2NywgLTB4NDU2NywgMHg3ZmZmLCAtMHg4MDAwLCAtMSksCisgICAgNDogcGFja3NbNF0oMCwgMHgxMjM0NTY3OCwgMHg0NTY3ODlhYiwgLTB4NDU2Nzg5YWIsCisgICAgICAgICAgICAgICAgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsIC0xKSwKK30KKworSU5WQUxJRF9EQVRBID0gWworICAgIChiJ2FiYycsIDApLAorICAgIChiJ2FiYycsIDIpLAorICAgIChiJ2FiYycsIDQpLAorXQorCisKK2NsYXNzIFRlc3RBdWRpb29wKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X21heChzZWxmKToKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHAgPSBwYWNrc1t3XQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChwKDUpLCB3KSwgNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgocCg1LCAtOCwgLTEpLCB3KSwgOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgocChtYXh2YWx1ZXNbd10pLCB3KSwgbWF4dmFsdWVzW3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChwKG1pbnZhbHVlc1t3XSksIHcpLCAtbWludmFsdWVzW3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChkYXRhc1t3XSwgdyksIC1taW52YWx1ZXNbd10pCisKKyAgICBkZWYgdGVzdF9taW5tYXgoc2VsZik6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KGInJywgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCkpCisgICAgICAgICAgICBwID0gcGFja3Nbd10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgocCg1KSwgdyksICg1LCA1KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgocCg1LCAtOCwgLTEpLCB3KSwgKC04LCA1KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgocChtYXh2YWx1ZXNbd10pLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heHZhbHVlc1t3XSwgbWF4dmFsdWVzW3ddKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgocChtaW52YWx1ZXNbd10pLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1pbnZhbHVlc1t3XSwgbWludmFsdWVzW3ddKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgoZGF0YXNbd10sIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWludmFsdWVzW3ddLCBtYXh2YWx1ZXNbd10pKQorCisgICAgZGVmIHRlc3RfbWF4cHAoc2VsZik6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChwYWNrc1t3XSgqcmFuZ2UoMTAwKSksIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKHBhY2tzW3ddKDksIDEwLCA1LCA1LCAwLCAxKSwgdyksIDEwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKGRhdGFzW3ddLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4dmFsdWVzW3ddIC0gbWludmFsdWVzW3ddKQorCisgICAgZGVmIHRlc3RfYXZnKHNlbGYpOgorICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhiJycsIHcpLCAwKQorICAgICAgICAgICAgcCA9IHBhY2tzW3ddCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZnKHAoNSksIHcpLCA1KQorICAgICAgICAgICAgc2VsZiAuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmcocCg1LCA4KSwgdyksIDYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZnKHAoNSwgLTgpLCB3KSwgLTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZnKHAobWF4dmFsdWVzW3ddLCBtYXh2YWx1ZXNbd10pLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4dmFsdWVzW3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhwKG1pbnZhbHVlc1t3XSwgbWludmFsdWVzW3ddKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnZhbHVlc1t3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhwYWNrc1s0XSgweDUwMDAwMDAwLCAweDcwMDAwMDAwKSwgNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MDAwMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhwYWNrc1s0XSgtMHg1MDAwMDAwMCwgLTB4NzAwMDAwMDApLCA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtMHg2MDAwMDAwMCkKKworICAgIGRlZiB0ZXN0X2F2Z3BwKHNlbGYpOgorICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGInJywgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAocGFja3Nbd10oKnJhbmdlKDEwMCkpLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChwYWNrc1t3XSg5LCAxMCwgNSwgNSwgMCwgMSksIHcpLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGRhdGFzWzFdLCAxKSwgMTk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoZGF0YXNbMl0sIDIpLCA1MDUzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGRhdGFzWzRdLCA0KSwgMzMxMTg5NzAwMikKKworICAgIGRlZiB0ZXN0X3JtcyhzZWxmKToKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHAgPSBwYWNrc1t3XQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhwKCpyYW5nZSgxMDApKSwgdyksIDU3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChhdWRpb29wLnJtcyhwKG1heHZhbHVlc1t3XSkgKiA1LCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4dmFsdWVzW3ddLCBkZWx0YT0xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChhdWRpb29wLnJtcyhwKG1pbnZhbHVlc1t3XSkgKiA1LCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLW1pbnZhbHVlc1t3XSwgZGVsdGE9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhkYXRhc1sxXSwgMSksIDc3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKGRhdGFzWzJdLCAyKSwgMjAwMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoZGF0YXNbNF0sIDQpLCAxMzEwODU0MTUyKQorCisgICAgZGVmIHRlc3RfY3Jvc3Moc2VsZik6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MoYicnLCB3KSwgLTEpCisgICAgICAgICAgICBwID0gcGFja3Nbd10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhwKDAsIDEsIDIpLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhwKDEsIDIsIC0zLCAtNCksIHcpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKHAoLTEsIC0yLCAzLCA0KSwgdyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MocCgwLCBtaW52YWx1ZXNbd10pLCB3KSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhwKG1pbnZhbHVlc1t3XSwgbWF4dmFsdWVzW3ddKSwgdyksIDEpCisKKyAgICBkZWYgdGVzdF9hZGQoc2VsZik6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGInJywgYicnLCB3KSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChkYXRhc1t3XSwgYidcMCcgKiBsZW4oZGF0YXNbd10pLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNbd10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbMV0sIGRhdGFzWzFdLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4MDBceDI0XHg3Zlx4ODBceDdmXHg4MFx4ZmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzWzJdLCBkYXRhc1syXSwgMiksCisgICAgICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgyNDY4LCAweDdmZmYsIC0weDgwMDAsIDB4N2ZmZiwgLTB4ODAwMCwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzWzRdLCBkYXRhc1s0XSwgNCksCisgICAgICAgICAgICAgICAgcGFja3NbNF0oMCwgMHgyNDY4YWNmMCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLCAtMikpCisKKyAgICBkZWYgdGVzdF9iaWFzKHNlbGYpOgorICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgZm9yIGJpYXMgaW4gMCwgMSwgLTEsIDEyNywgLTEyOCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoYicnLCB3LCBiaWFzKSwgYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1sxXSwgMSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAxXHgxM1x4NDZceGJjXHg4MFx4ODFceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbMV0sIDEsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceDExXHg0NFx4YmFceDdlXHg3Zlx4ZmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1sxXSwgMSwgMHg3ZmZmZmZmZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHgxMVx4NDRceGJhXHg3ZVx4N2ZceGZlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbMV0sIDEsIC0weDgwMDAwMDAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1sxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbMl0sIDIsIDEpLAorICAgICAgICAgICAgICAgIHBhY2tzWzJdKDEsIDB4MTIzNSwgMHg0NTY4LCAtMHg0NTY2LCAtMHg4MDAwLCAtMHg3ZmZmLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbMl0sIDIsIC0xKSwKKyAgICAgICAgICAgICAgICBwYWNrc1syXSgtMSwgMHgxMjMzLCAweDQ1NjYsIC0weDQ1NjgsIDB4N2ZmZSwgMHg3ZmZmLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzJdLCAyLCAweDdmZmZmZmZmKSwKKyAgICAgICAgICAgICAgICBwYWNrc1syXSgtMSwgMHgxMjMzLCAweDQ1NjYsIC0weDQ1NjgsIDB4N2ZmZSwgMHg3ZmZmLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzJdLCAyLCAtMHg4MDAwMDAwMCksCisgICAgICAgICAgICAgICAgZGF0YXNbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzRdLCA0LCAxKSwKKyAgICAgICAgICAgICAgICBwYWNrc1s0XSgxLCAweDEyMzQ1Njc5LCAweDQ1Njc4OWFjLCAtMHg0NTY3ODlhYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtMHg4MDAwMDAwMCwgLTB4N2ZmZmZmZmYsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1s0XSwgNCwgLTEpLAorICAgICAgICAgICAgICAgIHBhY2tzWzRdKC0xLCAweDEyMzQ1Njc3LCAweDQ1Njc4OWFhLCAtMHg0NTY3ODlhYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZmZlLCAweDdmZmZmZmZmLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzRdLCA0LCAweDdmZmZmZmZmKSwKKyAgICAgICAgICAgICAgICBwYWNrc1s0XSgweDdmZmZmZmZmLCAtMHg2ZGNiYTk4OSwgLTB4M2E5ODc2NTYsIDB4M2E5ODc2NTQsCisgICAgICAgICAgICAgICAgICAgICAgICAgLTIsIC0xLCAweDdmZmZmZmZlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbNF0sIDQsIC0weDgwMDAwMDAwKSwKKyAgICAgICAgICAgICAgICBwYWNrc1s0XSgtMHg4MDAwMDAwMCwgLTB4NmRjYmE5ODgsIC0weDNhOTg3NjU1LCAweDNhOTg3NjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAwLCAweDdmZmZmZmZmKSkKKworICAgIGRlZiB0ZXN0X2xpbjJsaW4oc2VsZik6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1t3XSwgdywgdyksIGRhdGFzW3ddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzFdLCAxLCAyKSwKKyAgICAgICAgICAgIHBhY2tzWzJdKDAsIDB4MTIwMCwgMHg0NTAwLCAtMHg0NTAwLCAweDdmMDAsIC0weDgwMDAsIC0weDEwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzFdLCAxLCA0KSwKKyAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MTIwMDAwMDAsIDB4NDUwMDAwMDAsIC0weDQ1MDAwMDAwLAorICAgICAgICAgICAgICAgICAgICAgMHg3ZjAwMDAwMCwgLTB4ODAwMDAwMDAsIC0weDEwMDAwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1syXSwgMiwgMSksCisgICAgICAgICAgICBiJ1x4MDBceDEyXHg0NVx4YmFceDdmXHg4MFx4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1syXSwgMiwgNCksCisgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDEyMzQwMDAwLCAweDQ1NjcwMDAwLCAtMHg0NTY3MDAwMCwKKyAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZjAwMDAsIC0weDgwMDAwMDAwLCAtMHgxMDAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzRdLCA0LCAxKSwKKyAgICAgICAgICAgIGInXHgwMFx4MTJceDQ1XHhiYVx4N2ZceDgwXHhmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzRdLCA0LCAyKSwKKyAgICAgICAgICAgIHBhY2tzWzJdKDAsIDB4MTIzNCwgMHg0NTY3LCAtMHg0NTY4LCAweDdmZmYsIC0weDgwMDAsIC0xKSkKKworICAgIGRlZiB0ZXN0X2FkcGNtMmxpbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1x4MDdceDdmXHg3ZicsIDEsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDBceDAwXHgwMFx4ZmZceDAwXHhmZicsICgtMTc5LCA0MCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGInXHgwN1x4N2ZceDdmJywgMiwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKHBhY2tzWzJdKDAsIDB4YiwgMHgyOSwgLTB4MTYsIDB4NzIsIC0weGIzKSwgKC0xNzksIDQwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYidceDA3XHg3Zlx4N2YnLCA0LCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAocGFja3NbNF0oMCwgMHhiMDAwMCwgMHgyOTAwMDAsIC0weDE2MDAwMCwgMHg3MjAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0weGIzMDAwMCksICgtMTc5LCA0MCkpKQorCisgICAgICAgICMgVmVyeSBjdXJzb3J5IHRlc3QKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYidcMCcgKiA1LCB3LCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInXDAnICogdyAqIDEwLCAoMCwgMCkpKQorCisgICAgZGVmIHRlc3RfbGluMmFkcGNtKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGRhdGFzWzFdLCAxLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoLTIyMSwgMzkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShkYXRhc1syXSwgMiwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKDMxLCAzOSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGRhdGFzWzRdLCA0LCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoMzEsIDM5KSkpCisKKyAgICAgICAgIyBWZXJ5IGN1cnNvcnkgdGVzdAorICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShiJ1wwJyAqIHcgKiAxMCwgdywgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1wwJyAqIDUsICgwLCAwKSkpCisKKyAgICBkZWYgdGVzdF9saW4yYWxhdyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGRhdGFzWzFdLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NWEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGF0YXNbMl0sIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkYXRhc1s0XSwgNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDU1JykKKworICAgIGRlZiB0ZXN0X2FsYXcybGluKHNlbGYpOgorICAgICAgICBlbmNvZGVkID0gYidceDAwXHgwM1x4MjRceDJhXHg1MVx4NTRceDU1XHg1OFx4NmJceDcxXHg3ZidcCisgICAgICAgICAgICAgICAgICBiJ1x4ODBceDgzXHhhNFx4YWFceGQxXHhkNFx4ZDVceGQ4XHhlYlx4ZjFceGZmJworICAgICAgICBzcmMgPSBbLTY4OCwgLTcyMCwgLTIyNDAsIC00MDMyLCAtOSwgLTMsIC0xLCAtMjcsIC0yNDQsIC04MiwgLTEwNiwKKyAgICAgICAgICAgICAgIDY4OCwgNzIwLCAyMjQwLCA0MDMyLCA5LCAzLCAxLCAyNywgMjQ0LCA4MiwgMTA2XQorICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFsYXcybGluKGVuY29kZWQsIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrc1t3XSgqKHggPDwgKHcgKiA4KSA+PiAxMyBmb3IgeCBpbiBzcmMpKSkKKworICAgICAgICBlbmNvZGVkID0gJycuam9pbihjaHIoeCkgZm9yIHggaW4geHJhbmdlKDI1NikpCisgICAgICAgIGZvciB3IGluIDIsIDQ6CisgICAgICAgICAgICBkZWNvZGVkID0gYXVkaW9vcC5hbGF3MmxpbihlbmNvZGVkLCB3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGRlY29kZWQsIHcpLCBlbmNvZGVkKQorCisgICAgZGVmIHRlc3RfbGluMnVsYXcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkYXRhc1sxXSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDY3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRhdGFzWzJdLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4N2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoZGF0YXNbNF0sIDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg3ZScpCisKKyAgICBkZWYgdGVzdF91bGF3MmxpbihzZWxmKToKKyAgICAgICAgZW5jb2RlZCA9IGInXHgwMFx4MGVceDI4XHgzZlx4NTdceDZhXHg3Nlx4N2NceDdlXHg3ZidcCisgICAgICAgICAgICAgICAgICBiJ1x4ODBceDhlXHhhOFx4YmZceGQ3XHhlYVx4ZjZceGZjXHhmZVx4ZmYnCisgICAgICAgIHNyYyA9IFstODAzMSwgLTQ0NDcsIC0xNDcxLCAtNDk1LCAtMTYzLCAtNTMsIC0xOCwgLTYsIC0yLCAwLAorICAgICAgICAgICAgICAgODAzMSwgNDQ0NywgMTQ3MSwgNDk1LCAxNjMsIDUzLCAxOCwgNiwgMiwgMF0KKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC51bGF3MmxpbihlbmNvZGVkLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja3Nbd10oKih4IDw8ICh3ICogOCkgPj4gMTQgZm9yIHggaW4gc3JjKSkpCisKKyAgICAgICAgIyBDdXJyZW50IHUtbGF3IGltcGxlbWVudGF0aW9uIGhhcyB0d28gY29kZXMgZm8gMDogMHg3ZiBhbmQgMHhmZi4KKyAgICAgICAgZW5jb2RlZCA9ICcnLmpvaW4oY2hyKHgpIGZvciB4IGluIHJhbmdlKDEyNykgKyByYW5nZSgxMjgsIDI1NikpCisgICAgICAgIGZvciB3IGluIDIsIDQ6CisgICAgICAgICAgICBkZWNvZGVkID0gYXVkaW9vcC51bGF3MmxpbihlbmNvZGVkLCB3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRlY29kZWQsIHcpLCBlbmNvZGVkKQorCisgICAgZGVmIHRlc3RfbXVsKHNlbGYpOgorICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChiJycsIHcsIDIpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzW3ddLCB3LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcMCcgKiBsZW4oZGF0YXNbd10pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1t3XSwgdywgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzW3ddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzWzFdLCAxLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4MDBceDI0XHg3Zlx4ODBceDdmXHg4MFx4ZmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzWzJdLCAyLCAyKSwKKyAgICAgICAgICAgICAgICBwYWNrc1syXSgwLCAweDI0NjgsIDB4N2ZmZiwgLTB4ODAwMCwgMHg3ZmZmLCAtMHg4MDAwLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoZGF0YXNbNF0sIDQsIDIpLAorICAgICAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MjQ2OGFjZjAsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLCAtMikpCisKKyAgICBkZWYgdGVzdF9yYXRlY3Yoc2VsZik6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGInJywgdywgMSwgODAwMCwgODAwMCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJycsICgtMSwgKCgwLCAwKSwpKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGInJywgdywgNSwgODAwMCwgODAwMCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJycsICgtMSwgKCgwLCAwKSwpICogNSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJhdGVjdihiJycsIHcsIDEsIDgwMDAsIDE2MDAwLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInJywgKC0yLCAoKDAsIDApLCkpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YoZGF0YXNbd10sIHcsIDEsIDgwMDAsIDgwMDAsIE5vbmUpWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1t3XSkKKyAgICAgICAgc3RhdGUgPSBOb25lCisgICAgICAgIGQxLCBzdGF0ZSA9IGF1ZGlvb3AucmF0ZWN2KGInXHgwMFx4MDFceDAyJywgMSwgMSwgODAwMCwgMTYwMDAsIHN0YXRlKQorICAgICAgICBkMiwgc3RhdGUgPSBhdWRpb29wLnJhdGVjdihiJ1x4MDBceDAxXHgwMicsIDEsIDEsIDgwMDAsIDE2MDAwLCBzdGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSArIGQyLCBiJ1wwMDBcMDAwXDAwMVwwMDFcMDAyXDAwMVwwMDBcMDAwXDAwMVwwMDFcMDAyJykKKworICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgZDAsIHN0YXRlMCA9IGF1ZGlvb3AucmF0ZWN2KGRhdGFzW3ddLCB3LCAxLCA4MDAwLCAxNjAwMCwgTm9uZSkKKyAgICAgICAgICAgIGQsIHN0YXRlID0gYicnLCBOb25lCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oZGF0YXNbd10pLCB3KToKKyAgICAgICAgICAgICAgICBkMSwgc3RhdGUgPSBhdWRpb29wLnJhdGVjdihkYXRhc1t3XVtpOmkgKyB3XSwgdywgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MDAwLCAxNjAwMCwgc3RhdGUpCisgICAgICAgICAgICAgICAgZCArPSBkMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIHN0YXRlMCkKKworICAgIGRlZiB0ZXN0X3JldmVyc2Uoc2VsZik6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmV2ZXJzZShiJycsIHcpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmV2ZXJzZShwYWNrc1t3XSgwLCAxLCAyKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tzW3ddKDIsIDEsIDApKQorCisgICAgZGVmIHRlc3RfdG9tb25vKHNlbGYpOgorICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgZGF0YTEgPSBkYXRhc1t3XQorICAgICAgICAgICAgZGF0YTIgPSBieXRlYXJyYXkoMiAqIGxlbihkYXRhMSkpCisgICAgICAgICAgICBmb3IgayBpbiByYW5nZSh3KToKKyAgICAgICAgICAgICAgICBkYXRhMltrOjoyKnddID0gZGF0YTFbazo6d10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b21vbm8oc3RyKGRhdGEyKSwgdywgMSwgMCksIGRhdGExKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnRvbW9ubyhzdHIoZGF0YTIpLCB3LCAwLCAxKSwgYidcMCcgKiBsZW4oZGF0YTEpKQorICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2Uodyk6CisgICAgICAgICAgICAgICAgZGF0YTJbayt3OjoyKnddID0gZGF0YTFbazo6d10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b21vbm8oc3RyKGRhdGEyKSwgdywgMC41LCAwLjUpLCBkYXRhMSkKKworICAgIGRlZiB0ZXN0X3Rvc3RlcmVvKHNlbGYpOgorICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICAgICAgZGF0YTEgPSBkYXRhc1t3XQorICAgICAgICAgICAgZGF0YTIgPSBieXRlYXJyYXkoMiAqIGxlbihkYXRhMSkpCisgICAgICAgICAgICBmb3IgayBpbiByYW5nZSh3KToKKyAgICAgICAgICAgICAgICBkYXRhMltrOjoyKnddID0gZGF0YTFbazo6d10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b3N0ZXJlbyhkYXRhMSwgdywgMSwgMCksIGRhdGEyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnRvc3RlcmVvKGRhdGExLCB3LCAwLCAwKSwgYidcMCcgKiBsZW4oZGF0YTIpKQorICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2Uodyk6CisgICAgICAgICAgICAgICAgZGF0YTJbayt3OjoyKnddID0gZGF0YTFbazo6d10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b3N0ZXJlbyhkYXRhMSwgdywgMSwgMSksIGRhdGEyKQorCisgICAgZGVmIHRlc3RfZmluZGZhY3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmYWN0b3IoZGF0YXNbMl0sIGRhdGFzWzJdKSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZhY3RvcihiJ1wwJyAqIGxlbihkYXRhc1syXSksIGRhdGFzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLjApCisKKyAgICBkZWYgdGVzdF9maW5kZml0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZpdChkYXRhc1syXSwgZGF0YXNbMl0pLCAoMCwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoZGF0YXNbMl0sIHBhY2tzWzJdKDEsIDIsIDApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgODAzOC44KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoZGF0YXNbMl1bOi0yXSAqIDUgKyBkYXRhc1syXSwgZGF0YXNbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICgzMCwgMS4wKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRtYXgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kbWF4KGRhdGFzWzJdLCAxKSwgNSkKKworICAgIGRlZiB0ZXN0X2dldHNhbXBsZShzZWxmKToKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgICAgIGRhdGEgPSBwYWNrc1t3XSgwLCAxLCAtMSwgbWF4dmFsdWVzW3ddLCBtaW52YWx1ZXNbd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDApLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShkYXRhLCB3LCAxKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgMiksIC0xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShkYXRhLCB3LCAzKSwgbWF4dmFsdWVzW3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShkYXRhLCB3LCA0KSwgbWludmFsdWVzW3ddKQorCisgICAgZGVmIHRlc3RfbmVnYXRpdmVsZW4oc2VsZik6CisgICAgICAgICMgZnJvbSBpc3N1ZSAzMzA2LCBwcmV2aW91c2x5IGl0IHNlZ2ZhdWx0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwKKyAgICAgICAgICAgIGF1ZGlvb3AuZmluZG1heCwgJycuam9pbiggY2hyKHgpIGZvciB4IGluIHhyYW5nZSgyNTYpKSwgLTIzOTIzOTIpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTc2NzMoc2VsZik6CisgICAgICAgIHN0YXRlID0gTm9uZQorICAgICAgICBmb3IgZGF0YSwgc2l6ZSBpbiBJTlZBTElEX0RBVEE6CisgICAgICAgICAgICBzaXplMiA9IHNpemUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AuZ2V0c2FtcGxlLCBkYXRhLCBzaXplLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5tYXgsIGRhdGEsIHNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLm1pbm1heCwgZGF0YSwgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AuYXZnLCBkYXRhLCBzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5ybXMsIGRhdGEsIHNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmF2Z3BwLCBkYXRhLCBzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5tYXhwcCwgZGF0YSwgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AuY3Jvc3MsIGRhdGEsIHNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLm11bCwgZGF0YSwgc2l6ZSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC50b21vbm8sIGRhdGEsIHNpemUsIDAuNSwgMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC50b3N0ZXJlbywgZGF0YSwgc2l6ZSwgMC41LCAwLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmFkZCwgZGF0YSwgZGF0YSwgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AuYmlhcywgZGF0YSwgc2l6ZSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AucmV2ZXJzZSwgZGF0YSwgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AubGluMmxpbiwgZGF0YSwgc2l6ZSwgc2l6ZTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLnJhdGVjdiwgZGF0YSwgc2l6ZSwgMSwgMSwgMSwgc3RhdGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmxpbjJ1bGF3LCBkYXRhLCBzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5saW4yYWxhdywgZGF0YSwgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AubGluMmFkcGNtLCBkYXRhLCBzaXplLCBzdGF0ZSkKKworICAgIGRlZiB0ZXN0X3dyb25nc2l6ZShzZWxmKToKKyAgICAgICAgZGF0YSA9IGInYWJjZGVmZ2gnCisgICAgICAgIHN0YXRlID0gTm9uZQorICAgICAgICBmb3Igc2l6ZSBpbiAoLTEsIDAsIDMsIDUsIDEwMjQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC51bGF3MmxpbiwgZGF0YSwgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AuYWxhdzJsaW4sIGRhdGEsIHNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmFkcGNtMmxpbiwgZGF0YSwgc2l6ZSwgc3RhdGUpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoVGVzdEF1ZGlvb3ApCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2F1Z2Fzc2lnbi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2F1Z2Fzc2lnbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTllOGI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYXVnYXNzaWduLnB5CkBAIC0wLDAgKzEsMzMxIEBACisjIEF1Z21lbnRlZCBhc3NpZ25tZW50IHRlc3QuCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfcHkza193YXJuaW5ncworaW1wb3J0IHVuaXR0ZXN0CisKKworY2xhc3MgQXVnQXNzaWduVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RCYXNpYyhzZWxmKToKKyAgICAgICAgeCA9IDIKKyAgICAgICAgeCArPSAxCisgICAgICAgIHggKj0gMgorICAgICAgICB4ICoqPSAyCisgICAgICAgIHggLT0gOAorICAgICAgICB4IC8vPSA1CisgICAgICAgIHggJT0gMworICAgICAgICB4ICY9IDIKKyAgICAgICAgeCB8PSA1CisgICAgICAgIHggXj0gMQorICAgICAgICB4IC89IDIKKyAgICAgICAgaWYgMS8yID09IDA6CisgICAgICAgICAgICAjIGNsYXNzaWMgZGl2aXNpb24KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgMykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgbmV3LXN0eWxlIGRpdmlzaW9uICh3aXRoIC1RbmV3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAzLjApCisKKyAgICBkZWYgdGVzdF93aXRoX3VucGFja2luZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsICJ4LCBiICs9IDMiLCAiPHRlc3Q+IiwgImV4ZWMiKQorCisgICAgZGVmIHRlc3RJbkxpc3Qoc2VsZik6CisgICAgICAgIHggPSBbMl0KKyAgICAgICAgeFswXSArPSAxCisgICAgICAgIHhbMF0gKj0gMgorICAgICAgICB4WzBdICoqPSAyCisgICAgICAgIHhbMF0gLT0gOAorICAgICAgICB4WzBdIC8vPSA1CisgICAgICAgIHhbMF0gJT0gMworICAgICAgICB4WzBdICY9IDIKKyAgICAgICAgeFswXSB8PSA1CisgICAgICAgIHhbMF0gXj0gMQorICAgICAgICB4WzBdIC89IDIKKyAgICAgICAgaWYgMS8yID09IDA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbMF0sIDMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbMF0sIDMuMCkKKworICAgIGRlZiB0ZXN0SW5EaWN0KHNlbGYpOgorICAgICAgICB4ID0gezA6IDJ9CisgICAgICAgIHhbMF0gKz0gMQorICAgICAgICB4WzBdICo9IDIKKyAgICAgICAgeFswXSAqKj0gMgorICAgICAgICB4WzBdIC09IDgKKyAgICAgICAgeFswXSAvLz0gNQorICAgICAgICB4WzBdICU9IDMKKyAgICAgICAgeFswXSAmPSAyCisgICAgICAgIHhbMF0gfD0gNQorICAgICAgICB4WzBdIF49IDEKKyAgICAgICAgeFswXSAvPSAyCisgICAgICAgIGlmIDEvMiA9PSAwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzBdLCAzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzBdLCAzLjApCisKKyAgICBkZWYgdGVzdFNlcXVlbmNlcyhzZWxmKToKKyAgICAgICAgeCA9IFsxLDJdCisgICAgICAgIHggKz0gWzMsNF0KKyAgICAgICAgeCAqPSAyCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBbMSwgMiwgMywgNCwgMSwgMiwgMywgNF0pCisKKyAgICAgICAgeCA9IFsxLCAyLCAzXQorICAgICAgICB5ID0geAorICAgICAgICB4WzE6Ml0gKj0gMgorICAgICAgICB5WzE6Ml0gKz0gWzFdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBbMSwgMiwgMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIHkpCisKKyAgICBkZWYgdGVzdEN1c3RvbU1ldGhvZHMxKHNlbGYpOgorCisgICAgICAgIGNsYXNzIGF1Z190ZXN0OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbCA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19yYWRkX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWwgKyB2YWwKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGF1Z190ZXN0KHNlbGYudmFsICsgdmFsKQorCisgICAgICAgIGNsYXNzIGF1Z190ZXN0MihhdWdfdGVzdCk6CisgICAgICAgICAgICBkZWYgX19pYWRkX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbCA9IHNlbGYudmFsICsgdmFsCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBjbGFzcyBhdWdfdGVzdDMoYXVnX3Rlc3QpOgorICAgICAgICAgICAgZGVmIF9faWFkZF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGF1Z190ZXN0MyhzZWxmLnZhbCArIHZhbCkKKworICAgICAgICB4ID0gYXVnX3Rlc3QoMSkKKyAgICAgICAgeSA9IHgKKyAgICAgICAgeCArPSAxMAorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBhdWdfdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YWwsIDExKQorCisgICAgICAgIHggPSBhdWdfdGVzdDIoMikKKyAgICAgICAgeSA9IHgKKyAgICAgICAgeCArPSAxMAorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YWwsIDEyKQorCisgICAgICAgIHggPSBhdWdfdGVzdDMoMykKKyAgICAgICAgeSA9IHgKKyAgICAgICAgeCArPSAxMAorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBhdWdfdGVzdDMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudmFsLCAxMykKKworCisgICAgZGVmIHRlc3RDdXN0b21NZXRob2RzMih0ZXN0X3NlbGYpOgorICAgICAgICBvdXRwdXQgPSBbXQorCisgICAgICAgIGNsYXNzIHRlc3RhbGw6CisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fYWRkX18gY2FsbGVkIikKKyAgICAgICAgICAgIGRlZiBfX3JhZGRfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fcmFkZF9fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19pYWRkX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2lhZGRfXyBjYWxsZWQiKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgICAgIGRlZiBfX3N1Yl9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19zdWJfXyBjYWxsZWQiKQorICAgICAgICAgICAgZGVmIF9fcnN1Yl9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19yc3ViX18gY2FsbGVkIikKKyAgICAgICAgICAgIGRlZiBfX2lzdWJfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9faXN1Yl9fIGNhbGxlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZGVmIF9fbXVsX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX211bF9fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19ybXVsX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX3JtdWxfXyBjYWxsZWQiKQorICAgICAgICAgICAgZGVmIF9faW11bF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19pbXVsX18gY2FsbGVkIikKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBkZWYgX19kaXZfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fZGl2X18gY2FsbGVkIikKKyAgICAgICAgICAgIGRlZiBfX3JkaXZfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fcmRpdl9fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19pZGl2X18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2lkaXZfXyBjYWxsZWQiKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgICAgIGRlZiBfX2Zsb29yZGl2X18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2Zsb29yZGl2X18gY2FsbGVkIikKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIF9faWZsb29yZGl2X18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2lmbG9vcmRpdl9fIGNhbGxlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX3JmbG9vcmRpdl9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19yZmxvb3JkaXZfXyBjYWxsZWQiKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fdHJ1ZWRpdl9fIGNhbGxlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2l0cnVlZGl2X18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2l0cnVlZGl2X18gY2FsbGVkIikKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBkZWYgX19tb2RfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fbW9kX18gY2FsbGVkIikKKyAgICAgICAgICAgIGRlZiBfX3Jtb2RfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fcm1vZF9fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19pbW9kX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2ltb2RfXyBjYWxsZWQiKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgICAgIGRlZiBfX3Bvd19fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19wb3dfXyBjYWxsZWQiKQorICAgICAgICAgICAgZGVmIF9fcnBvd19fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19ycG93X18gY2FsbGVkIikKKyAgICAgICAgICAgIGRlZiBfX2lwb3dfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9faXBvd19fIGNhbGxlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZGVmIF9fb3JfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fb3JfXyBjYWxsZWQiKQorICAgICAgICAgICAgZGVmIF9fcm9yX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX3Jvcl9fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19pb3JfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9faW9yX18gY2FsbGVkIikKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBkZWYgX19hbmRfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fYW5kX18gY2FsbGVkIikKKyAgICAgICAgICAgIGRlZiBfX3JhbmRfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fcmFuZF9fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19pYW5kX18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2lhbmRfXyBjYWxsZWQiKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgICAgIGRlZiBfX3hvcl9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX194b3JfXyBjYWxsZWQiKQorICAgICAgICAgICAgZGVmIF9fcnhvcl9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19yeG9yX18gY2FsbGVkIikKKyAgICAgICAgICAgIGRlZiBfX2l4b3JfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9faXhvcl9fIGNhbGxlZCIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZGVmIF9fcnNoaWZ0X18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX3JzaGlmdF9fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19ycnNoaWZ0X18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX3Jyc2hpZnRfXyBjYWxsZWQiKQorICAgICAgICAgICAgZGVmIF9faXJzaGlmdF9fKHNlbGYsIHZhbCk6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19pcnNoaWZ0X18gY2FsbGVkIikKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBkZWYgX19sc2hpZnRfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fbHNoaWZ0X18gY2FsbGVkIikKKyAgICAgICAgICAgIGRlZiBfX3Jsc2hpZnRfXyhzZWxmLCB2YWwpOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fcmxzaGlmdF9fIGNhbGxlZCIpCisgICAgICAgICAgICBkZWYgX19pbHNoaWZ0X18oc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2lsc2hpZnRfXyBjYWxsZWQiKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgeCA9IHRlc3RhbGwoKQorICAgICAgICB4ICsgMQorICAgICAgICAxICsgeAorICAgICAgICB4ICs9IDEKKworICAgICAgICB4IC0gMQorICAgICAgICAxIC0geAorICAgICAgICB4IC09IDEKKworICAgICAgICB4ICogMQorICAgICAgICAxICogeAorICAgICAgICB4ICo9IDEKKworICAgICAgICBpZiAxLzIgPT0gMDoKKyAgICAgICAgICAgIHggLyAxCisgICAgICAgICAgICAxIC8geAorICAgICAgICAgICAgeCAvPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRydWUgZGl2aXNpb24gaXMgaW4gZWZmZWN0LCBzbyAiLyIgZG9lc24ndCBtYXAgdG8gX19kaXZfXyBldGM7CisgICAgICAgICAgICAjIGJ1dCB0aGUgY2FubmVkIGV4cGVjdGVkLW91dHB1dCBmaWxlIHJlcXVpcmVzIHRoYXQgdGhvc2UgZ2V0IGNhbGxlZC4KKyAgICAgICAgICAgIHguX19kaXZfXygxKQorICAgICAgICAgICAgeC5fX3JkaXZfXygxKQorICAgICAgICAgICAgeC5fX2lkaXZfXygxKQorCisgICAgICAgIHggLy8gMQorICAgICAgICAxIC8vIHgKKyAgICAgICAgeCAvLz0gMQorCisgICAgICAgIHggJSAxCisgICAgICAgIDEgJSB4CisgICAgICAgIHggJT0gMQorCisgICAgICAgIHggKiogMQorICAgICAgICAxICoqIHgKKyAgICAgICAgeCAqKj0gMQorCisgICAgICAgIHggfCAxCisgICAgICAgIDEgfCB4CisgICAgICAgIHggfD0gMQorCisgICAgICAgIHggJiAxCisgICAgICAgIDEgJiB4CisgICAgICAgIHggJj0gMQorCisgICAgICAgIHggXiAxCisgICAgICAgIDEgXiB4CisgICAgICAgIHggXj0gMQorCisgICAgICAgIHggPj4gMQorICAgICAgICAxID4+IHgKKyAgICAgICAgeCA+Pj0gMQorCisgICAgICAgIHggPDwgMQorICAgICAgICAxIDw8IHgKKyAgICAgICAgeCA8PD0gMQorCisgICAgICAgIHRlc3Rfc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICcnJ1wKK19fYWRkX18gY2FsbGVkCitfX3JhZGRfXyBjYWxsZWQKK19faWFkZF9fIGNhbGxlZAorX19zdWJfXyBjYWxsZWQKK19fcnN1Yl9fIGNhbGxlZAorX19pc3ViX18gY2FsbGVkCitfX211bF9fIGNhbGxlZAorX19ybXVsX18gY2FsbGVkCitfX2ltdWxfXyBjYWxsZWQKK19fZGl2X18gY2FsbGVkCitfX3JkaXZfXyBjYWxsZWQKK19faWRpdl9fIGNhbGxlZAorX19mbG9vcmRpdl9fIGNhbGxlZAorX19yZmxvb3JkaXZfXyBjYWxsZWQKK19faWZsb29yZGl2X18gY2FsbGVkCitfX21vZF9fIGNhbGxlZAorX19ybW9kX18gY2FsbGVkCitfX2ltb2RfXyBjYWxsZWQKK19fcG93X18gY2FsbGVkCitfX3Jwb3dfXyBjYWxsZWQKK19faXBvd19fIGNhbGxlZAorX19vcl9fIGNhbGxlZAorX19yb3JfXyBjYWxsZWQKK19faW9yX18gY2FsbGVkCitfX2FuZF9fIGNhbGxlZAorX19yYW5kX18gY2FsbGVkCitfX2lhbmRfXyBjYWxsZWQKK19feG9yX18gY2FsbGVkCitfX3J4b3JfXyBjYWxsZWQKK19faXhvcl9fIGNhbGxlZAorX19yc2hpZnRfXyBjYWxsZWQKK19fcnJzaGlmdF9fIGNhbGxlZAorX19pcnNoaWZ0X18gY2FsbGVkCitfX2xzaGlmdF9fIGNhbGxlZAorX19ybHNoaWZ0X18gY2FsbGVkCitfX2lsc2hpZnRfXyBjYWxsZWQKKycnJy5zcGxpdGxpbmVzKCkpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKCJjbGFzc2ljIGludCBkaXZpc2lvbiIsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICBydW5fdW5pdHRlc3QoQXVnQXNzaWduVGVzdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYmFzZTY0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYmFzZTY0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMmNlZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9iYXNlNjQucHkKQEAgLTAsMCArMSwyMTYgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBiYXNlNjQKKworCisMCitjbGFzcyBMZWdhY3lCYXNlNjRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZW5jb2Rlc3RyaW5nKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoYmFzZTY0LmVuY29kZXN0cmluZygid3d3LnB5dGhvbi5vcmciKSwgImQzZDNMbkI1ZEdodmJpNXZjbWM9XG4iKQorICAgICAgICBlcShiYXNlNjQuZW5jb2Rlc3RyaW5nKCJhIiksICJZUT09XG4iKQorICAgICAgICBlcShiYXNlNjQuZW5jb2Rlc3RyaW5nKCJhYiIpLCAiWVdJPVxuIikKKyAgICAgICAgZXEoYmFzZTY0LmVuY29kZXN0cmluZygiYWJjIiksICJZV0pqXG4iKQorICAgICAgICBlcShiYXNlNjQuZW5jb2Rlc3RyaW5nKCIiKSwgIiIpCisgICAgICAgIGVxKGJhc2U2NC5lbmNvZGVzdHJpbmcoImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMDEyMzQ1Njc4OSFAIzBeJiooKTs6PD4sLiBbXXt9IiksCisgICAgICAgICAgICJZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYcEJRa05FIgorICAgICAgICAgICAiUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldqQXhNak0wXG5OVCIKKyAgICAgICAgICAgIlkzT0RraFFDTXdYaVlxS0NrN09qdytMQzRnVzExN2ZRPT1cbiIpCisgICAgICAgICMgTm9uLWJ5dGVzCisgICAgICAgIGVxKGJhc2U2NC5lbmNvZGVzdHJpbmcoYnl0ZWFycmF5KCdhYmMnKSksICdZV0pqXG4nKQorCisgICAgZGVmIHRlc3RfZGVjb2Rlc3RyaW5nKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoYmFzZTY0LmRlY29kZXN0cmluZygiZDNkM0xuQjVkR2h2Ymk1dmNtYz1cbiIpLCAid3d3LnB5dGhvbi5vcmciKQorICAgICAgICBlcShiYXNlNjQuZGVjb2Rlc3RyaW5nKCJZUT09XG4iKSwgImEiKQorICAgICAgICBlcShiYXNlNjQuZGVjb2Rlc3RyaW5nKCJZV0k9XG4iKSwgImFiIikKKyAgICAgICAgZXEoYmFzZTY0LmRlY29kZXN0cmluZygiWVdKalxuIiksICJhYmMiKQorICAgICAgICBlcShiYXNlNjQuZGVjb2Rlc3RyaW5nKCJZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYcEJRa05FIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSVVpIU0VsS1MweE5UazlRVVZKVFZGVldWMWhaV2pBeE1qTTBcbk5UIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZM09Ea2hRQ013WGlZcUtDazdPancrTEM0Z1cxMTdmUT09XG4iKSwKKyAgICAgICAgICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorICAgICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisgICAgICAgICAgICIwMTIzNDU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30iKQorICAgICAgICBlcShiYXNlNjQuZGVjb2Rlc3RyaW5nKCcnKSwgJycpCisgICAgICAgICMgTm9uLWJ5dGVzCisgICAgICAgIGVxKGJhc2U2NC5kZWNvZGVzdHJpbmcoYnl0ZWFycmF5KCJZV0pqXG4iKSksICJhYmMiKQorCisgICAgZGVmIHRlc3RfZW5jb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisgICAgICAgIGluZnAgPSBTdHJpbmdJTygnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCisgICAgICAgICAgICAgICAgICAgICAgICAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCisgICAgICAgICAgICAgICAgICAgICAgICAnMDEyMzQ1Njc4OSFAIzBeJiooKTs6PD4sLiBbXXt9JykKKyAgICAgICAgb3V0ZnAgPSBTdHJpbmdJTygpCisgICAgICAgIGJhc2U2NC5lbmNvZGUoaW5mcCwgb3V0ZnApCisgICAgICAgIGVxKG91dGZwLmdldHZhbHVlKCksCisgICAgICAgICAgICdZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYcEJRa05FJworICAgICAgICAgICAnUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldqQXhNak0wXG5OVCcKKyAgICAgICAgICAgJ1kzT0RraFFDTXdYaVlxS0NrN09qdytMQzRnVzExN2ZRPT1cbicpCisKKyAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZik6CisgICAgICAgIGZyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworICAgICAgICBpbmZwID0gU3RyaW5nSU8oJ2QzZDNMbkI1ZEdodmJpNXZjbWM9JykKKyAgICAgICAgb3V0ZnAgPSBTdHJpbmdJTygpCisgICAgICAgIGJhc2U2NC5kZWNvZGUoaW5mcCwgb3V0ZnApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0ZnAuZ2V0dmFsdWUoKSwgJ3d3dy5weXRob24ub3JnJykKKworCisMCitjbGFzcyBCYXNlWFlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYjY0ZW5jb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgIyBUZXN0IGRlZmF1bHQgYWxwaGFiZXQKKyAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZSgid3d3LnB5dGhvbi5vcmciKSwgImQzZDNMbkI1ZEdodmJpNXZjbWM9IikKKyAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZSgnXHgwMCcpLCAnQUE9PScpCisgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoImEiKSwgIllRPT0iKQorICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKCJhYiIpLCAiWVdJPSIpCisgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoImFiYyIpLCAiWVdKaiIpCisgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoIiIpLCAiIikKKyAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZSgiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwMTIzNDU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30iKSwKKyAgICAgICAgICAgIllXSmpaR1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjFkbmQ0ZVhwQlFrTkUiCisgICAgICAgICAgICJSVVpIU0VsS1MweE5UazlRVVZKVFZGVldWMWhaV2pBeE1qTTBOVCIKKyAgICAgICAgICAgIlkzT0RraFFDTXdYaVlxS0NrN09qdytMQzRnVzExN2ZRPT0iKQorICAgICAgICAjIFRlc3Qgd2l0aCBhcmJpdHJhcnkgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycworICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKCdceGQzVlx4YmVvXHhmN1x4MWQnLCBhbHRjaGFycz0nKiQnKSwgJzAxYSpiJGNkJykKKyAgICAgICAgIyBOb24tYnl0ZXMKKyAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZShieXRlYXJyYXkoJ2FiY2QnKSksICdZV0pqWkE9PScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmI2NGVuY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsIGFsdGNoYXJzPWJ5dGVhcnJheSgnKiQnKSkKKyAgICAgICAgIyBUZXN0IHN0YW5kYXJkIGFscGhhYmV0CisgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUoInd3dy5weXRob24ub3JnIiksICJkM2QzTG5CNWRHaHZiaTV2Y21jPSIpCisgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUoImEiKSwgIllRPT0iKQorICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKCJhYiIpLCAiWVdJPSIpCisgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUoImFiYyIpLCAiWVdKaiIpCisgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUoIiIpLCAiIikKKyAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZSgiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwMTIzNDU2Nzg5IUAjMF4mKigpOzo8PiwuIFtde30iKSwKKyAgICAgICAgICAgIllXSmpaR1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjFkbmQ0ZVhwQlFrTkUiCisgICAgICAgICAgICJSVVpIU0VsS1MweE5UazlRVVZKVFZGVldWMWhaV2pBeE1qTTBOVCIKKyAgICAgICAgICAgIlkzT0RraFFDTXdYaVlxS0NrN09qdytMQzRnVzExN2ZRPT0iKQorICAgICAgICAjIE5vbi1ieXRlcworICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKGJ5dGVhcnJheSgnYWJjZCcpKSwgJ1lXSmpaQT09JykKKyAgICAgICAgIyBUZXN0IHdpdGggJ1VSTCBzYWZlJyBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXJzCisgICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZSgnXHhkM1ZceGJlb1x4ZjdceDFkJyksICcwMWEtYl9jZCcpCisgICAgICAgICMgTm9uLWJ5dGVzCisgICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZShieXRlYXJyYXkoJ1x4ZDNWXHhiZW9ceGY3XHgxZCcpKSwgJzAxYS1iX2NkJykKKworICAgIGRlZiB0ZXN0X2I2NGRlY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKGJhc2U2NC5iNjRkZWNvZGUoImQzZDNMbkI1ZEdodmJpNXZjbWM9IiksICJ3d3cucHl0aG9uLm9yZyIpCisgICAgICAgIGVxKGJhc2U2NC5iNjRkZWNvZGUoJ0FBPT0nKSwgJ1x4MDAnKQorICAgICAgICBlcShiYXNlNjQuYjY0ZGVjb2RlKCJZUT09IiksICJhIikKKyAgICAgICAgZXEoYmFzZTY0LmI2NGRlY29kZSgiWVdJPSIpLCAiYWIiKQorICAgICAgICBlcShiYXNlNjQuYjY0ZGVjb2RlKCJZV0pqIiksICJhYmMiKQorICAgICAgICBlcShiYXNlNjQuYjY0ZGVjb2RlKCJZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYcEJRa05FIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSVVpIU0VsS1MweE5UazlRVVZKVFZGVldWMWhaV2pBeE1qTTBcbk5UIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZM09Ea2hRQ013WGlZcUtDazdPancrTEM0Z1cxMTdmUT09IiksCisgICAgICAgICAgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKKyAgICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorICAgICAgICAgICAiMDEyMzQ1Njc4OSFAIzBeJiooKTs6PD4sLiBbXXt9IikKKyAgICAgICAgZXEoYmFzZTY0LmI2NGRlY29kZSgnJyksICcnKQorICAgICAgICAjIFRlc3Qgd2l0aCBhcmJpdHJhcnkgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycworICAgICAgICBlcShiYXNlNjQuYjY0ZGVjb2RlKCcwMWEqYiRjZCcsIGFsdGNoYXJzPScqJCcpLCAnXHhkM1ZceGJlb1x4ZjdceDFkJykKKyAgICAgICAgIyBOb24tYnl0ZXMKKyAgICAgICAgZXEoYmFzZTY0LmI2NGRlY29kZShieXRlYXJyYXkoIllXSmoiKSksICJhYmMiKQorICAgICAgICAjIFRlc3Qgc3RhbmRhcmQgYWxwaGFiZXQKKyAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZSgiZDNkM0xuQjVkR2h2Ymk1dmNtYz0iKSwgInd3dy5weXRob24ub3JnIikKKyAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZSgiWVE9PSIpLCAiYSIpCisgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUoIllXST0iKSwgImFiIikKKyAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZSgiWVdKaiIpLCAiYWJjIikKKyAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZSgiIiksICIiKQorICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlKCJZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYcEJRa05FIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSVVpIU0VsS1MweE5UazlRVVZKVFZGVldWMWhaV2pBeE1qTTBOVCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWTNPRGtoUUNNd1hpWXFLQ2s3T2p3K0xDNGdXMTE3ZlE9PSIpLAorICAgICAgICAgICAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCisgICAgICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKyAgICAgICAgICAgIjAxMjM0NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fSIpCisgICAgICAgICMgTm9uLWJ5dGVzCisgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUoYnl0ZWFycmF5KCJZV0pqIikpLCAiYWJjIikKKyAgICAgICAgIyBUZXN0IHdpdGggJ1VSTCBzYWZlJyBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXJzCisgICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZSgnMDFhLWJfY2QnKSwgJ1x4ZDNWXHhiZW9ceGY3XHgxZCcpCisgICAgICAgICMgTm9uLWJ5dGVzCisgICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZShieXRlYXJyYXkoJzAxYS1iX2NkJykpLCAnXHhkM1ZceGJlb1x4ZjdceDFkJykKKworICAgIGRlZiB0ZXN0X2I2NGRlY29kZV9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjY0ZGVjb2RlLCAnYWJjJykKKworICAgIGRlZiB0ZXN0X2IzMmVuY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKGJhc2U2NC5iMzJlbmNvZGUoJycpLCAnJykKKyAgICAgICAgZXEoYmFzZTY0LmIzMmVuY29kZSgnXHgwMCcpLCAnQUE9PT09PT0nKQorICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKCdhJyksICdNRT09PT09PScpCisgICAgICAgIGVxKGJhc2U2NC5iMzJlbmNvZGUoJ2FiJyksICdNRlJBPT09PScpCisgICAgICAgIGVxKGJhc2U2NC5iMzJlbmNvZGUoJ2FiYycpLCAnTUZSR0c9PT0nKQorICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKCdhYmNkJyksICdNRlJHR1pBPScpCisgICAgICAgIGVxKGJhc2U2NC5iMzJlbmNvZGUoJ2FiY2RlJyksICdNRlJHR1pERicpCisgICAgICAgICMgTm9uLWJ5dGVzCisgICAgICAgIGVxKGJhc2U2NC5iMzJlbmNvZGUoYnl0ZWFycmF5KCdhYmNkJykpLCAnTUZSR0daQT0nKQorCisgICAgZGVmIHRlc3RfYjMyZGVjb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZSgnJyksICcnKQorICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKCdBQT09PT09PScpLCAnXHgwMCcpCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJ01FPT09PT09JyksICdhJykKKyAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZSgnTUZSQT09PT0nKSwgJ2FiJykKKyAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZSgnTUZSR0c9PT0nKSwgJ2FiYycpCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJ01GUkdHWkE9JyksICdhYmNkJykKKyAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZSgnTUZSR0daREYnKSwgJ2FiY2RlJykKKyAgICAgICAgIyBOb24tYnl0ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjMyZGVjb2RlLCBieXRlYXJyYXkoJ01GUkdHPT09JykpCisKKyAgICBkZWYgdGVzdF9iMzJkZWNvZGVfY2FzZWZvbGQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKCcnLCBUcnVlKSwgJycpCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJ01FPT09PT09JywgVHJ1ZSksICdhJykKKyAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZSgnTUZSQT09PT0nLCBUcnVlKSwgJ2FiJykKKyAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZSgnTUZSR0c9PT0nLCBUcnVlKSwgJ2FiYycpCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJ01GUkdHWkE9JywgVHJ1ZSksICdhYmNkJykKKyAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZSgnTUZSR0daREYnLCBUcnVlKSwgJ2FiY2RlJykKKyAgICAgICAgIyBMb3dlciBjYXNlcworICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKCdtZT09PT09PScsIFRydWUpLCAnYScpCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJ21mcmE9PT09JywgVHJ1ZSksICdhYicpCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJ21mcmdnPT09JywgVHJ1ZSksICdhYmMnKQorICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKCdtZnJnZ3phPScsIFRydWUpLCAnYWJjZCcpCisgICAgICAgIGVxKGJhc2U2NC5iMzJkZWNvZGUoJ21mcmdnemRmJywgVHJ1ZSksICdhYmNkZScpCisgICAgICAgICMgRXhwZWN0ZWQgZXhjZXB0aW9ucworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iMzJkZWNvZGUsICdtZT09PT09PScpCisgICAgICAgICMgTWFwcGluZyB6ZXJvIGFuZCBvbmUKKyAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZSgnTUxPMjM0NTYnKSwgJ2JceGRkXHhhZFx4ZjNceGJlJykKKyAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZSgnTTEwMjM0NTYnLCBtYXAwMT0nTCcpLCAnYlx4ZGRceGFkXHhmM1x4YmUnKQorICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKCdNMTAyMzQ1NicsIG1hcDAxPSdJJyksICdiXHgxZFx4YWRceGYzXHhiZScpCisKKyAgICBkZWYgdGVzdF9iMzJkZWNvZGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmIzMmRlY29kZSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmIzMmRlY29kZSwgJ0FCQ0RFRj09JykKKworICAgIGRlZiB0ZXN0X2IxNmVuY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKGJhc2U2NC5iMTZlbmNvZGUoJ1x4MDFceDAyXHhhYlx4Y2RceGVmJyksICcwMTAyQUJDREVGJykKKyAgICAgICAgZXEoYmFzZTY0LmIxNmVuY29kZSgnXHgwMCcpLCAnMDAnKQorICAgICAgICAjIE5vbi1ieXRlcworICAgICAgICBlcShiYXNlNjQuYjE2ZW5jb2RlKGJ5dGVhcnJheSgnXHgwMVx4MDJceGFiXHhjZFx4ZWYnKSksICcwMTAyQUJDREVGJykKKworICAgIGRlZiB0ZXN0X2IxNmRlY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoJzAxMDJBQkNERUYnKSwgJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKyAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZSgnMDAnKSwgJ1x4MDAnKQorICAgICAgICAjIExvd2VyIGNhc2UgaXMgbm90IGFsbG93ZWQgd2l0aG91dCBhIGZsYWcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjE2ZGVjb2RlLCAnMDEwMmFiY2RlZicpCisgICAgICAgICMgQ2FzZSBmb2xkCisgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoJzAxMDJhYmNkZWYnLCBUcnVlKSwgJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKyAgICAgICAgIyBOb24tYnl0ZXMKKyAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShieXRlYXJyYXkoIjAxMDJBQkNERUYiKSksICdceDAxXHgwMlx4YWJceGNkXHhlZicpCisKKworDAorZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Jhc3Rpb24ucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9iYXN0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NjBlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9iYXN0aW9uLnB5CkBAIC0wLDAgKzEsMyBAQAorIyNpbXBvcnQgQmFzdGlvbgorIyMKKyMjQmFzdGlvbi5fdGVzdCgpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9iaWdhZGRyc3BhY2UucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9iaWdhZGRyc3BhY2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxOWE1MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2JpZ2FkZHJzcGFjZS5weQpAQCAtMCwwICsxLDQ2IEBACitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgYmlnYWRkcnNwYWNldGVzdCwgTUFYX1B5X3NzaXplX3QKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCBzeXMKKworCitjbGFzcyBTdHJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBiaWdhZGRyc3BhY2V0ZXN0CisgICAgZGVmIHRlc3RfY29uY2F0KHNlbGYpOgorICAgICAgICBzMSA9ICd4JyAqIE1BWF9QeV9zc2l6ZV90CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9wZXJhdG9yLmFkZCwgczEsICc/JykKKworICAgIEBiaWdhZGRyc3BhY2V0ZXN0CisgICAgZGVmIHRlc3Rfb3B0aW1pemVkX2NvbmNhdChzZWxmKToKKyAgICAgICAgeCA9ICd4JyAqIE1BWF9QeV9zc2l6ZV90CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHggPSB4ICsgJz8nICAgICAjIHRoaXMgc3RhdGVtZW50IHVzZXMgYSBmYXN0IHBhdGggaW4gY2V2YWwuYworICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIE92ZXJmbG93RXJyb3IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB4ICs9ICc/JyAgICAgICAgIyB0aGlzIHN0YXRlbWVudCB1c2VzIGEgZmFzdCBwYXRoIGluIGNldmFsLmMKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBPdmVyZmxvd0Vycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIE1BWF9QeV9zc2l6ZV90KQorCisgICAgIyMjIHRoZSBmb2xsb3dpbmcgdGVzdCBpcyBwZW5kaW5nIGEgcGF0Y2gKKyAgICAjICAgKGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAwNi1KdWx5LzA2Nzc3NC5odG1sKQorICAgICNAYmlnYWRkcnNwYWNldGVzdAorICAgICNkZWYgdGVzdF9yZXBlYXQoc2VsZik6CisgICAgIyAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcGVyYXRvci5tdWwsICd4JywgTUFYX1B5X3NzaXplX3QgKyAxKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFN0clRlc3QpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaWYgbGVuKHN5cy5hcmd2KSA+IDE6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5zZXRfbWVtbGltaXQoc3lzLmFyZ3ZbMV0pCisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2JpZ21lbS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2JpZ21lbS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDFjMzczCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYmlnbWVtLnB5CkBAIC0wLDAgKzEsMTA3MyBAQAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IGJpZ21lbXRlc3QsIF8xRywgXzJHLCBfNEcsIHByZWNpc2lvbmJpZ21lbXRlc3QKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCBzeXMKKworIyBCaWdtZW0gdGVzdGluZyBob3VzZXJ1bGVzOgorIworIyAgLSBUcnkgbm90IHRvIGFsbG9jYXRlIHRvbyBtYW55IGxhcmdlIG9iamVjdHMuIEl0J3Mgb2theSB0byByZWx5IG9uCisjICAgIHJlZmNvdW50aW5nIHNlbWFudGljcywgYnV0IGRvbid0IGZvcmdldCB0aGF0ICdzID0gY3JlYXRlX2xhcmdlc3RyaW5nKCknCisjICAgIGRvZXNuJ3QgcmVsZWFzZSB0aGUgb2xkICdzJyAoaWYgaXQgZXhpc3RzKSB1bnRpbCB3ZWxsIGFmdGVyIGl0cyBuZXcKKyMgICAgdmFsdWUgaGFzIGJlZW4gY3JlYXRlZC4gVXNlICdkZWwgcycgYmVmb3JlIHRoZSBjcmVhdGVfbGFyZ2VzdHJpbmcgY2FsbC4KKyMKKyMgIC0gRG8gKm5vdCogY29tcGFyZSBsYXJnZSBvYmplY3RzIHVzaW5nIGFzc2VydEVxdWFsIG9yIHNpbWlsYXIuIEl0J3MgYQorIyAgICBsZW5ndHkgb3BlcmF0aW9uIGFuZCB0aGUgZXJyb3JtZXNzYWdlIHdpbGwgYmUgdXR0ZXJseSB1c2VsZXNzIGR1ZSB0bworIyAgICBpdHMgc2l6ZS4gVG8gbWFrZSBzdXJlIHdoZXRoZXIgYSByZXN1bHQgaGFzIHRoZSByaWdodCBjb250ZW50cywgYmV0dGVyCisjICAgIHRvIHVzZSB0aGUgc3RyaXAgb3IgY291bnQgbWV0aG9kcywgb3IgY29tcGFyZSBtZWFuaW5nZnVsIHNsaWNlcy4KKyMKKyMgIC0gRG9uJ3QgZm9yZ2V0IHRvIHRlc3QgZm9yIGxhcmdlIGluZGljZXMsIG9mZnNldHMgYW5kIHJlc3VsdHMgYW5kIHN1Y2gsCisjICAgIGluIGFkZGl0aW9uIHRvIGxhcmdlIHNpemVzLgorIworIyAgLSBXaGVuIHJlcGVhdGluZyBhbiBvYmplY3QgKHNheSwgYSBzdWJzdHJpbmcsIG9yIGEgc21hbGwgbGlzdCkgdG8gY3JlYXRlCisjICAgIGEgbGFyZ2Ugb2JqZWN0LCBtYWtlIHRoZSBzdWJvYmplY3Qgb2YgYSBsZW5ndGggdGhhdCBpcyBub3QgYSBwb3dlciBvZgorIyAgICAyLiBUaGF0IHdheSwgaW50LXdyYXBwaW5nIHByb2JsZW1zIGFyZSBtb3JlIGVhc2lseSBkZXRlY3RlZC4KKyMKKyMgIC0gV2hpbGUgdGhlIGJpZ21lbXRlc3QgZGVjb3JhdG9yIHNwZWFrcyBvZiAnbWluc2l6ZScsIGFsbCB0ZXN0cyB3aWxsCisjICAgIGFjdHVhbGx5IGJlIGNhbGxlZCB3aXRoIGEgbXVjaCBzbWFsbGVyIG51bWJlciB0b28sIGluIHRoZSBub3JtYWwKKyMgICAgdGVzdCBydW4gKDVLYiBjdXJyZW50bHkuKSBUaGlzIGlzIHNvIHRoZSB0ZXN0cyB0aGVtc2VsdmVzIGdldCBmcmVxdWVudAorIyAgICB0ZXN0aW5nLiBDb25zZXF1ZW50bHksIGFsd2F5cyBtYWtlIGFsbCBsYXJnZSBhbGxvY2F0aW9ucyBiYXNlZCBvbiB0aGUKKyMgICAgcGFzc2VkLWluICdzaXplJywgYW5kIGRvbid0IHJlbHkgb24gdGhlIHNpemUgYmVpbmcgdmVyeSBsYXJnZS4gQWxzbywKKyMgICAgbWVtdXNlLXBlci1zaXplIHNob3VsZCByZW1haW4gc2FuZSAobGVzcyB0aGFuIGEgZmV3IHRob3VzYW5kKTsgaWYgeW91cgorIyAgICB0ZXN0IHVzZXMgbW9yZSwgYWRqdXN0ICdzaXplJyB1cHdhcmQsIGluc3RlYWQuCisKK2NsYXNzIFN0clRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9jYXBpdGFsaXplKHNlbGYsIHNpemUpOgorICAgICAgICBTVUJTVFIgPSAnIGFiYyBkZWYgZ2hpJworICAgICAgICBzID0gJy0nICogc2l6ZSArIFNVQlNUUgorICAgICAgICBjYXBzID0gcy5jYXBpdGFsaXplKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXBzWy1sZW4oU1VCU1RSKTpdLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNVQlNUUi5jYXBpdGFsaXplKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2Fwcy5sc3RyaXAoJy0nKSwgU1VCU1RSKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfY2VudGVyKHNlbGYsIHNpemUpOgorICAgICAgICBTVUJTVFIgPSAnIGFiYyBkZWYgZ2hpJworICAgICAgICBzID0gU1VCU1RSLmNlbnRlcihzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgbHBhZHNpemUgPSBycGFkc2l6ZSA9IChsZW4ocykgLSBsZW4oU1VCU1RSKSkgLy8gMgorICAgICAgICBpZiBsZW4ocykgJSAyOgorICAgICAgICAgICAgbHBhZHNpemUgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbbHBhZHNpemU6LXJwYWRzaXplXSwgU1VCU1RSKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3RyaXAoKSwgU1VCU1RSLnN0cmlwKCkpCisKKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV8yRyAtIDEsIG1lbXVzZT0xKQorICAgIGRlZiB0ZXN0X2NlbnRlcl91bmljb2RlKHNlbGYsIHNpemUpOgorICAgICAgICBTVUJTVFIgPSB1JyBhYmMgZGVmIGdoaScKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcyA9IFNVQlNUUi5jZW50ZXIoc2l6ZSkKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBwYXNzICMgYWNjZXB0YWJsZSBvbiAzMi1iaXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICAgICAgbHBhZHNpemUgPSBycGFkc2l6ZSA9IChsZW4ocykgLSBsZW4oU1VCU1RSKSkgLy8gMgorICAgICAgICAgICAgaWYgbGVuKHMpICUgMjoKKyAgICAgICAgICAgICAgICBscGFkc2l6ZSArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbbHBhZHNpemU6LXJwYWRzaXplXSwgU1VCU1RSKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0cmlwKCksIFNVQlNUUi5zdHJpcCgpKQorICAgICAgICAgICAgZGVsIHMKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9jb3VudChzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKKyAgICAgICAgcyA9ICcuJyAqIHNpemUgKyBTVUJTVFIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcuJyksIHNpemUpCisgICAgICAgIHMgKz0gJy4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnLicpLCBzaXplICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcgJyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnaScpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJ2onKSwgMCkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMiwgbWVtdXNlPTMpCisgICAgZGVmIHRlc3RfZGVjb2RlKHNlbGYsIHNpemUpOgorICAgICAgICBzID0gJy4nICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzLmRlY29kZSgndXRmLTgnKSksIHNpemUpCisKKyAgICBkZWYgYmFzaWNfZW5jb2RlX3Rlc3Qoc2VsZiwgc2l6ZSwgZW5jLCBjPXUnLicsIGV4cGVjdGVkc2l6ZT1Ob25lKToKKyAgICAgICAgaWYgZXhwZWN0ZWRzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBleHBlY3RlZHNpemUgPSBzaXplCisKKyAgICAgICAgcyA9IGMgKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMuZW5jb2RlKGVuYykpLCBleHBlY3RlZHNpemUpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDIsIG1lbXVzZT0zKQorICAgIGRlZiB0ZXN0X2VuY29kZShzZWxmLCBzaXplKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYmFzaWNfZW5jb2RlX3Rlc3Qoc2l6ZSwgJ3V0Zi04JykKKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzRHIC8vIDYgKyAyLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9lbmNvZGVfcmF3X3VuaWNvZGVfZXNjYXBlKHNlbGYsIHNpemUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5iYXNpY19lbmNvZGVfdGVzdChzaXplLCAncmF3X3VuaWNvZGVfZXNjYXBlJykKKyAgICAgICAgZXhjZXB0IE1lbW9yeUVycm9yOgorICAgICAgICAgICAgcGFzcyAjIGFjY2VwdGFibGUgb24gMzItYml0CisKKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV80RyAvLyA1ICsgNzAsIG1lbXVzZT0zKQorICAgIGRlZiB0ZXN0X2VuY29kZV91dGY3KHNlbGYsIHNpemUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5iYXNpY19lbmNvZGVfdGVzdChzaXplLCAndXRmNycpCisgICAgICAgIGV4Y2VwdCBNZW1vcnlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MgIyBhY2NlcHRhYmxlIG9uIDMyLWJpdAorCisgICAgQHByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1fNEcgLy8gNCArIDUsIG1lbXVzZT02KQorICAgIGRlZiB0ZXN0X2VuY29kZV91dGYzMihzZWxmLCBzaXplKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYmFzaWNfZW5jb2RlX3Rlc3Qoc2l6ZSwgJ3V0ZjMyJywgZXhwZWN0ZWRzaXplPTQqc2l6ZSs0KQorICAgICAgICBleGNlcHQgTWVtb3J5RXJyb3I6CisgICAgICAgICAgICBwYXNzICMgYWNjZXB0YWJsZSBvbiAzMi1iaXQKKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzJHLTEsIG1lbXVzZT00KQorICAgIGRlZiB0ZXN0X2RlY29kZWFzY2lpKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5iYXNpY19lbmNvZGVfdGVzdChzaXplLCAnYXNjaWknLCBjPSdBJykKKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzRHIC8vIDUsIG1lbXVzZT02KzIpCisgICAgZGVmIHRlc3RfdW5pY29kZV9yZXByX29mbHcoc2VsZiwgc2l6ZSk6CisgICAgICAgIHNlbGYuc2tpcFRlc3QoInRlc3QgY3Jhc2hlcyAtIHNlZSBpc3N1ZSAjMTQ5MDQiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gdSJcdUFBQUEiKnNpemUKKyAgICAgICAgICAgIHIgPSByZXByKHMpCisgICAgICAgIGV4Y2VwdCBNZW1vcnlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MgIyBhY2NlcHRhYmxlIG9uIDMyLWJpdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMgPT0gZXZhbChyKSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9lbmRzd2l0aChzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKKyAgICAgICAgcyA9ICctJyAqIHNpemUgKyBTVUJTVFIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZW5kc3dpdGgoU1VCU1RSKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZW5kc3dpdGgocykpCisgICAgICAgIHMyID0gJy4uLicgKyBzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMi5lbmRzd2l0aChzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLmVuZHN3aXRoKCdhJyArIFNVQlNUUikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoU1VCU1RSLmVuZHN3aXRoKHMpKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfZXhwYW5kdGFicyhzZWxmLCBzaXplKToKKyAgICAgICAgcyA9ICctJyAqIHNpemUKKyAgICAgICAgdGFic2l6ZSA9IDgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmV4cGFuZHRhYnMoKSwgcykKKyAgICAgICAgZGVsIHMKKyAgICAgICAgc2xlbiwgcmVtYWluZGVyID0gZGl2bW9kKHNpemUsIHRhYnNpemUpCisgICAgICAgIHMgPSAnICAgICAgIFx0JyAqIHNsZW4KKyAgICAgICAgcyA9IHMuZXhwYW5kdGFicyh0YWJzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSAtIHJlbWFpbmRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocy5zdHJpcCgnICcpKSwgMCkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9maW5kKHNlbGYsIHNpemUpOgorICAgICAgICBTVUJTVFIgPSAnIGFiYyBkZWYgZ2hpJworICAgICAgICBzdWJsZW4gPSBsZW4oU1VCU1RSKQorICAgICAgICBzID0gJycuam9pbihbU1VCU1RSLCAnLScgKiBzaXplLCBTVUJTVFJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZmluZCgnICcpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZmluZChTVUJTVFIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZmluZCgnICcsIHN1YmxlbiksIHN1YmxlbiArIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5maW5kKFNVQlNUUiwgbGVuKFNVQlNUUikpLCBzdWJsZW4gKyBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZmluZCgnaScpLCBTVUJTVFIuZmluZCgnaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZmluZCgnaScsIHN1YmxlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3VibGVuICsgc2l6ZSArIFNVQlNUUi5maW5kKCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5maW5kKCdpJywgc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3VibGVuICsgc2l6ZSArIFNVQlNUUi5maW5kKCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5maW5kKCdqJyksIC0xKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQorICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYsIHNpemUpOgorICAgICAgICBTVUJTVFIgPSAnIGFiYyBkZWYgZ2hpJworICAgICAgICBzdWJsZW4gPSBsZW4oU1VCU1RSKQorICAgICAgICBzID0gJycuam9pbihbU1VCU1RSLCAnLScgKiBzaXplLCBTVUJTVFJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuaW5kZXgoJyAnKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmluZGV4KFNVQlNUUiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5pbmRleCgnICcsIHN1YmxlbiksIHN1YmxlbiArIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5pbmRleChTVUJTVFIsIHN1YmxlbiksIHN1YmxlbiArIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5pbmRleCgnaScpLCBTVUJTVFIuaW5kZXgoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmluZGV4KCdpJywgc3VibGVuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJsZW4gKyBzaXplICsgU1VCU1RSLmluZGV4KCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5pbmRleCgnaScsIHNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxlbiArIHNpemUgKyBTVUJTVFIuaW5kZXgoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5pbmRleCwgJ2onKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQorICAgIGRlZiB0ZXN0X2lzYWxudW0oc2VsZiwgc2l6ZSk6CisgICAgICAgIFNVQlNUUiA9ICcxMjM0NTYnCisgICAgICAgIHMgPSAnYScgKiBzaXplICsgU1VCU1RSCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmlzYWxudW0oKSkKKyAgICAgICAgcyArPSAnLicKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLmlzYWxudW0oKSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9pc2FscGhhKHNlbGYsIHNpemUpOgorICAgICAgICBTVUJTVFIgPSAnenp6enp6eicKKyAgICAgICAgcyA9ICdhJyAqIHNpemUgKyBTVUJTVFIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuaXNhbHBoYSgpKQorICAgICAgICBzICs9ICcuJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuaXNhbHBoYSgpKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQorICAgIGRlZiB0ZXN0X2lzZGlnaXQoc2VsZiwgc2l6ZSk6CisgICAgICAgIFNVQlNUUiA9ICcxMjM0NTYnCisgICAgICAgIHMgPSAnOScgKiBzaXplICsgU1VCU1RSCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmlzZGlnaXQoKSkKKyAgICAgICAgcyArPSAneicKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLmlzZGlnaXQoKSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9pc2xvd2VyKHNlbGYsIHNpemUpOgorICAgICAgICBjaGFycyA9ICcnLmpvaW4oWyBjaHIoYykgZm9yIGMgaW4gcmFuZ2UoMjU1KSBpZiBub3QgY2hyKGMpLmlzdXBwZXIoKSBdKQorICAgICAgICByZXBlYXRzID0gc2l6ZSAvLyBsZW4oY2hhcnMpICsgMgorICAgICAgICBzID0gY2hhcnMgKiByZXBlYXRzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmlzbG93ZXIoKSkKKyAgICAgICAgcyArPSAnQScKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLmlzbG93ZXIoKSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9pc3NwYWNlKHNlbGYsIHNpemUpOgorICAgICAgICB3aGl0ZXNwYWNlID0gJyBcZlxuXHJcdFx2JworICAgICAgICByZXBlYXRzID0gc2l6ZSAvLyBsZW4od2hpdGVzcGFjZSkgKyAyCisgICAgICAgIHMgPSB3aGl0ZXNwYWNlICogcmVwZWF0cworICAgICAgICBzZWxmLmFzc2VydFRydWUocy5pc3NwYWNlKCkpCisgICAgICAgIHMgKz0gJ2onCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5pc3NwYWNlKCkpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfaXN0aXRsZShzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJzEyMzQ1NicKKyAgICAgICAgcyA9ICcnLmpvaW4oWydBJywgJ2EnICogc2l6ZSwgU1VCU1RSXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuaXN0aXRsZSgpKQorICAgICAgICBzICs9ICdBJworICAgICAgICBzZWxmLmFzc2VydFRydWUocy5pc3RpdGxlKCkpCisgICAgICAgIHMgKz0gJ2FBJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuaXN0aXRsZSgpKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQorICAgIGRlZiB0ZXN0X2lzdXBwZXIoc2VsZiwgc2l6ZSk6CisgICAgICAgIGNoYXJzID0gJycuam9pbihbIGNocihjKSBmb3IgYyBpbiByYW5nZSgyNTUpIGlmIG5vdCBjaHIoYykuaXNsb3dlcigpIF0pCisgICAgICAgIHJlcGVhdHMgPSBzaXplIC8vIGxlbihjaGFycykgKyAyCisgICAgICAgIHMgPSBjaGFycyAqIHJlcGVhdHMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuaXN1cHBlcigpKQorICAgICAgICBzICs9ICdhJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuaXN1cHBlcigpKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQorICAgIGRlZiB0ZXN0X2pvaW4oc2VsZiwgc2l6ZSk6CisgICAgICAgIHMgPSAnQScgKiBzaXplCisgICAgICAgIHggPSBzLmpvaW4oWydhYWFhYScsICdiYmJiYiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguY291bnQoJ2EnKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmNvdW50KCdiJyksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4LnN0YXJ0c3dpdGgoJ2FhYWFhQScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5lbmRzd2l0aCgnQWJiYmJiJykpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9sanVzdChzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKKyAgICAgICAgcyA9IFNVQlNUUi5sanVzdChzaXplKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKFNVQlNUUiArICcgICcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0cmlwKCksIFNVQlNUUi5zdHJpcCgpKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfbG93ZXIoc2VsZiwgc2l6ZSk6CisgICAgICAgIHMgPSAnQScgKiBzaXplCisgICAgICAgIHMgPSBzLmxvd2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnYScpLCBzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfbHN0cmlwKHNlbGYsIHNpemUpOgorICAgICAgICBTVUJTVFIgPSAnYWJjIGRlZiBnaGknCisgICAgICAgIHMgPSBTVUJTVFIucmp1c3Qoc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5sc3RyaXAoKSwgU1VCU1RSLmxzdHJpcCgpKQorICAgICAgICBkZWwgcworICAgICAgICBzID0gU1VCU1RSLmxqdXN0KHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzdHJpcHBlZCA9IHMubHN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cmlwcGVkIGlzIHMpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYsIHNpemUpOgorICAgICAgICByZXBsYWNlbWVudCA9ICdhJworICAgICAgICBzID0gJyAnICogc2l6ZQorICAgICAgICBzID0gcy5yZXBsYWNlKCcgJywgcmVwbGFjZW1lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQocmVwbGFjZW1lbnQpLCBzaXplKQorICAgICAgICBzID0gcy5yZXBsYWNlKHJlcGxhY2VtZW50LCAnICcsIHNpemUgLSA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KHJlcGxhY2VtZW50KSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWy0xMDpdLCAnICAgICAgYWFhYScpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCisgICAgZGVmIHRlc3RfcmZpbmQoc2VsZiwgc2l6ZSk6CisgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCisgICAgICAgIHN1YmxlbiA9IGxlbihTVUJTVFIpCisgICAgICAgIHMgPSAnJy5qb2luKFtTVUJTVFIsICctJyAqIHNpemUsIFNVQlNUUl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZmluZCgnICcpLCBzdWJsZW4gKyBzaXplICsgU1VCU1RSLnJmaW5kKCcgJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZmluZChTVUJTVFIpLCBzdWJsZW4gKyBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmZpbmQoJyAnLCAwLCBzaXplKSwgU1VCU1RSLnJmaW5kKCcgJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZmluZChTVUJTVFIsIDAsIHN1YmxlbiArIHNpemUpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmZpbmQoJ2knKSwgc3VibGVuICsgc2l6ZSArIFNVQlNUUi5yZmluZCgnaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmZpbmQoJ2knLCAwLCBzdWJsZW4pLCBTVUJTVFIucmZpbmQoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJmaW5kKCdpJywgMCwgc3VibGVuICsgc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgU1VCU1RSLnJmaW5kKCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yZmluZCgnaicpLCAtMSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9yaW5kZXgoc2VsZiwgc2l6ZSk6CisgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCisgICAgICAgIHN1YmxlbiA9IGxlbihTVUJTVFIpCisgICAgICAgIHMgPSAnJy5qb2luKFtTVUJTVFIsICctJyAqIHNpemUsIFNVQlNUUl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yaW5kZXgoJyAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibGVuICsgc2l6ZSArIFNVQlNUUi5yaW5kZXgoJyAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJpbmRleChTVUJTVFIpLCBzdWJsZW4gKyBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmluZGV4KCcgJywgMCwgc3VibGVuICsgc2l6ZSAtIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNVQlNUUi5yaW5kZXgoJyAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJpbmRleChTVUJTVFIsIDAsIHN1YmxlbiArIHNpemUpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmluZGV4KCdpJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3VibGVuICsgc2l6ZSArIFNVQlNUUi5yaW5kZXgoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJpbmRleCgnaScsIDAsIHN1YmxlbiksIFNVQlNUUi5yaW5kZXgoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJpbmRleCgnaScsIDAsIHN1YmxlbiArIHNpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNVQlNUUi5yaW5kZXgoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5yaW5kZXgsICdqJykKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT0xKQorICAgIGRlZiB0ZXN0X3JqdXN0KHNlbGYsIHNpemUpOgorICAgICAgICBTVUJTVFIgPSAnIGFiYyBkZWYgZ2hpJworICAgICAgICBzID0gU1VCU1RSLmxqdXN0KHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoU1VCU1RSICsgJyAgJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3RyaXAoKSwgU1VCU1RSLnN0cmlwKCkpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9yc3RyaXAoc2VsZiwgc2l6ZSk6CisgICAgICAgIFNVQlNUUiA9ICcgYWJjIGRlZiBnaGknCisgICAgICAgIHMgPSBTVUJTVFIubGp1c3Qoc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yc3RyaXAoKSwgU1VCU1RSLnJzdHJpcCgpKQorICAgICAgICBkZWwgcworICAgICAgICBzID0gU1VCU1RSLnJqdXN0KHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzdHJpcHBlZCA9IHMucnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cmlwcGVkIGlzIHMpCisKKyAgICAjIFRoZSB0ZXN0IHRha2VzIGFib3V0IHNpemUgYnl0ZXMgdG8gYnVpbGQgYSBzdHJpbmcsIGFuZCB0aGVuIGFib3V0CisgICAgIyBzcXJ0KHNpemUpIHN1YnN0cmluZ3Mgb2Ygc3FydChzaXplKSBpbiBzaXplIGFuZCBhIGxpc3QgdG8KKyAgICAjIGhvbGQgc3FydChzaXplKSBpdGVtcy4gSXQncyBjbG9zZSBidXQganVzdCBvdmVyIDJ4IHNpemUuCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yLjEpCisgICAgZGVmIHRlc3Rfc3BsaXRfc21hbGwoc2VsZiwgc2l6ZSk6CisgICAgICAgICMgQ3J1ZGVseSBjYWxjdWxhdGUgYW4gZXN0aW1hdGUgc28gdGhhdCB0aGUgcmVzdWx0IG9mIHMuc3BsaXQgd29uJ3QKKyAgICAgICAgIyB0YWtlIHVwIGFuIGlub3JkaW5hdGUgYW1vdW50IG9mIG1lbW9yeQorICAgICAgICBjaHVua3NpemUgPSBpbnQoc2l6ZSAqKiAwLjUgKyAyKQorICAgICAgICBTVUJTVFIgPSAnYScgKyAnICcgKiBjaHVua3NpemUKKyAgICAgICAgcyA9IFNVQlNUUiAqIGNodW5rc2l6ZQorICAgICAgICBsID0gcy5zcGxpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBjaHVua3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGwpLCBzZXQoWydhJ10pKQorICAgICAgICBkZWwgbAorICAgICAgICBsID0gcy5zcGxpdCgnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBjaHVua3NpemUgKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChsKSwgc2V0KFsnJywgJyAnICogY2h1bmtzaXplXSkpCisKKyAgICAjIEFsbG9jYXRlcyBhIHN0cmluZyBvZiB0d2ljZSBzaXplIChhbmQgYnJpZWZseSB0d28pIGFuZCBhIGxpc3Qgb2YKKyAgICAjIHNpemUuICBCZWNhdXNlIG9mIGludGVybmFsIGFmZmFpcnMsIHRoZSBzLnNwbGl0KCkgY2FsbCBwcm9kdWNlcyBhCisgICAgIyBsaXN0IG9mIHNpemUgdGltZXMgdGhlIHNhbWUgb25lLWNoYXJhY3RlciBzdHJpbmcsIHNvIHdlIG9ubHkKKyAgICAjIHN1ZmZlciBmb3IgdGhlIGxpc3Qgc2l6ZS4gKE90aGVyd2lzZSwgaXQnZCBjb3N0IGFub3RoZXIgNDggdGltZXMKKyAgICAjIHNpemUgaW4gYnl0ZXMhKSBOZXZlcnRoZWxlc3MsIGEgbGlzdCBvZiBzaXplIHRha2VzCisgICAgIyA4KnNpemUgYnl0ZXMuCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyA1LCBtZW11c2U9MTApCisgICAgZGVmIHRlc3Rfc3BsaXRfbGFyZ2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIHMgPSAnIGEnICogc2l6ZSArICcgJworICAgICAgICBsID0gcy5zcGxpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChsKSwgc2V0KFsnYSddKSkKKyAgICAgICAgZGVsIGwKKyAgICAgICAgbCA9IHMuc3BsaXQoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGwpLCBzZXQoWycgJ10pKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yLjEpCisgICAgZGVmIHRlc3Rfc3BsaXRsaW5lcyhzZWxmLCBzaXplKToKKyAgICAgICAgIyBDcnVkZWx5IGNhbGN1bGF0ZSBhbiBlc3RpbWF0ZSBzbyB0aGF0IHRoZSByZXN1bHQgb2Ygcy5zcGxpdCB3b24ndAorICAgICAgICAjIHRha2UgdXAgYW4gaW5vcmRpbmF0ZSBhbW91bnQgb2YgbWVtb3J5CisgICAgICAgIGNodW5rc2l6ZSA9IGludChzaXplICoqIDAuNSArIDIpIC8vIDIKKyAgICAgICAgU1VCU1RSID0gJyAnICogY2h1bmtzaXplICsgJ1xuJyArICcgJyAqIGNodW5rc2l6ZSArICdcclxuJworICAgICAgICBzID0gU1VCU1RSICogY2h1bmtzaXplCisgICAgICAgIGwgPSBzLnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgY2h1bmtzaXplICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobCksIHNldChbJyAnICogY2h1bmtzaXplXSkpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRywgbWVtdXNlPTIpCisgICAgZGVmIHRlc3Rfc3RhcnRzd2l0aChzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJyBhYmMgZGVmIGdoaScKKyAgICAgICAgcyA9ICctJyAqIHNpemUgKyBTVUJTVFIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aChzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgnLScgKiBzaXplKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLnN0YXJ0c3dpdGgoU1VCU1RSKSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9zdHJpcChzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJyAgIGFiYyBkZWYgZ2hpICAgJworICAgICAgICBzID0gU1VCU1RSLnJqdXN0KHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3RyaXAoKSwgU1VCU1RSLnN0cmlwKCkpCisgICAgICAgIGRlbCBzCisgICAgICAgIHMgPSBTVUJTVFIubGp1c3Qoc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdHJpcCgpLCBTVUJTVFIuc3RyaXAoKSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9zd2FwY2FzZShzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gImFCY0RlRkcxMi4nXHhhOVx4MDAiCisgICAgICAgIHN1YmxlbiA9IGxlbihTVUJTVFIpCisgICAgICAgIHJlcGVhdHMgPSBzaXplIC8vIHN1YmxlbiArIDIKKyAgICAgICAgcyA9IFNVQlNUUiAqIHJlcGVhdHMKKyAgICAgICAgcyA9IHMuc3dhcGNhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc3VibGVuICogcmVwZWF0cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzpzdWJsZW4gKiAzXSwgU1VCU1RSLnN3YXBjYXNlKCkgKiAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLXN1YmxlbiAqIDM6XSwgU1VCU1RSLnN3YXBjYXNlKCkgKiAzKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcsIG1lbXVzZT0yKQorICAgIGRlZiB0ZXN0X3RpdGxlKHNlbGYsIHNpemUpOgorICAgICAgICBTVUJTVFIgPSAnU3BhYUhBYWFBYWhhbScKKyAgICAgICAgcyA9IFNVQlNUUiAqIChzaXplIC8vIGxlbihTVUJTVFIpICsgMikKKyAgICAgICAgcyA9IHMudGl0bGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKChTVUJTVFIgKiAzKS50aXRsZSgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZW5kc3dpdGgoU1VCU1RSLmxvd2VyKCkgKiAzKSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF90cmFuc2xhdGUoc2VsZiwgc2l6ZSk6CisgICAgICAgIHRyYW5zID0gc3RyaW5nLm1ha2V0cmFucygnLmFaJywgJy0hJCcpCisgICAgICAgIFNVQlNUUiA9ICdhWnouei5BYXouJworICAgICAgICBzdWJsZW4gPSBsZW4oU1VCU1RSKQorICAgICAgICByZXBlYXRzID0gc2l6ZSAvLyBzdWJsZW4gKyAyCisgICAgICAgIHMgPSBTVUJTVFIgKiByZXBlYXRzCisgICAgICAgIHMgPSBzLnRyYW5zbGF0ZSh0cmFucykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHJlcGVhdHMgKiBzdWJsZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1s6c3VibGVuXSwgU1VCU1RSLnRyYW5zbGF0ZSh0cmFucykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stc3VibGVuOl0sIFNVQlNUUi50cmFuc2xhdGUodHJhbnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJy4nKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCchJyksIHJlcGVhdHMgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJ3onKSwgcmVwZWF0cyAqIDMpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDUsIG1lbXVzZT0yKQorICAgIGRlZiB0ZXN0X3VwcGVyKHNlbGYsIHNpemUpOgorICAgICAgICBzID0gJ2EnICogc2l6ZQorICAgICAgICBzID0gcy51cHBlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJ0EnKSwgc2l6ZSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMjAsIG1lbXVzZT0xKQorICAgIGRlZiB0ZXN0X3pmaWxsKHNlbGYsIHNpemUpOgorICAgICAgICBTVUJTVFIgPSAnLTU2ODMyNDcyMzU5ODIzNCcKKyAgICAgICAgcyA9IFNVQlNUUi56ZmlsbChzaXplKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aCgnMCcgKyBTVUJTVFJbMTpdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgnLTAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnMCcpLCBzaXplIC0gbGVuKFNVQlNUUikpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZiwgc2l6ZSk6CisgICAgICAgIHMgPSAnLScgKiBzaXplCisgICAgICAgIHNmID0gJyVzJyAlIChzLCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMgPT0gc2YpCisgICAgICAgIGRlbCBzZgorICAgICAgICBzZiA9ICcuLiVzLi4nICUgKHMsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZiksIGxlbihzKSArIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZi5zdGFydHN3aXRoKCcuLi0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNmLmVuZHN3aXRoKCctLi4nKSkKKyAgICAgICAgZGVsIHMsIHNmCisKKyAgICAgICAgc2l6ZSAvLz0gMgorICAgICAgICBlZGdlID0gJy0nICogc2l6ZQorICAgICAgICBzID0gJycuam9pbihbZWRnZSwgJyVzJywgZWRnZV0pCisgICAgICAgIGRlbCBlZGdlCisgICAgICAgIHMgPSBzICUgJy4uLicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUgKiAyICsgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcuJyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnLScpLCBzaXplICogMikKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT01KQorICAgIGRlZiB0ZXN0X3JlcHJfc21hbGwoc2VsZiwgc2l6ZSk6CisgICAgICAgIHMgPSAnLScgKiBzaXplCisgICAgICAgIHMgPSByZXByKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplICsgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzBdLCAiJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stMV0sICInIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCctJyksIHNpemUpCisgICAgICAgIGRlbCBzCisgICAgICAgICMgcmVwcigpIHdpbGwgY3JlYXRlIGEgc3RyaW5nIGZvdXIgdGltZXMgYXMgbGFyZ2UgYXMgdGhpcyAnYmluYXJ5CisgICAgICAgICMgc3RyaW5nJywgYnV0IHdlIGRvbid0IHdhbnQgdG8gYWxsb2NhdGUgbXVjaCBtb3JlIHRoYW4gdHdpY2UKKyAgICAgICAgIyBzaXplIGluIHRvdGFsLiAgKFdlIGRvIGV4dHJhIHRlc3RpbmcgaW4gdGVzdF9yZXByX2xhcmdlKCkpCisgICAgICAgIHMgPSAnXHgwMCcgKiBzaXplCisgICAgICAgIHMgPSByZXByKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplICogNCArIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1swXSwgIiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLTFdLCAiJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnXFwnKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcwJyksIHNpemUgKiAyKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTUpCisgICAgZGVmIHRlc3RfcmVwcl9sYXJnZShzZWxmLCBzaXplKToKKyAgICAgICAgcyA9ICdceDAwJyAqIHNpemUKKyAgICAgICAgcyA9IHJlcHIocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUgKiA0ICsgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzBdLCAiJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stMV0sICInIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCdcXCcpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJzAnKSwgc2l6ZSAqIDIpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPTIqKjMyIC8vIDUsIG1lbXVzZT02KzIpCisgICAgZGVmIHRlc3RfdW5pY29kZV9yZXByKHNlbGYsIHNpemUpOgorICAgICAgICBzID0gdSJcdUFBQUEiICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHJlcHIocykpID4gc2l6ZSkKKworICAgICMgVGhpcyB0ZXN0IGlzIG1lYW5pbmdmdWwgZXZlbiB3aXRoIHNpemUgPCAyRywgYXMgbG9uZyBhcyB0aGUKKyAgICAjIGRvdWJsZWQgc3RyaW5nIGlzID4gMkcgKGJ1dCBpdCB0ZXN0cyBtb3JlIGlmIGJvdGggYXJlID4gMkcgOikKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8xRyArIDIsIG1lbXVzZT0zKQorICAgIGRlZiB0ZXN0X2NvbmNhdChzZWxmLCBzaXplKToKKyAgICAgICAgcyA9ICcuJyAqIHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUpCisgICAgICAgIHMgPSBzICsgcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudCgnLicpLCBzaXplICogMikKKworICAgICMgVGhpcyB0ZXN0IGlzIG1lYW5pbmdmdWwgZXZlbiB3aXRoIHNpemUgPCAyRywgYXMgbG9uZyBhcyB0aGUKKyAgICAjIHJlcGVhdGVkIHN0cmluZyBpcyA+IDJHIChidXQgaXQgdGVzdHMgbW9yZSBpZiBib3RoIGFyZSA+IDJHIDopCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMUcgKyAyLCBtZW11c2U9MykKKyAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZiwgc2l6ZSk6CisgICAgICAgIHMgPSAnLicgKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBzaXplKQorICAgICAgICBzID0gcyAqIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY291bnQoJy4nKSwgc2l6ZSAqIDIpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDIwLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9zbGljZV9hbmRfZ2V0aXRlbShzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJzAxMjM0NTY3ODknCisgICAgICAgIHN1YmxlbiA9IGxlbihTVUJTVFIpCisgICAgICAgIHMgPSBTVUJTVFIgKiAoc2l6ZSAvLyBzdWJsZW4pCisgICAgICAgIHN0ZXBzaXplID0gbGVuKHMpIC8vIDEwMAorICAgICAgICBzdGVwc2l6ZSA9IHN0ZXBzaXplIC0gKHN0ZXBzaXplICUgc3VibGVuKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocykgLSBzdGVwc2l6ZSwgc3RlcHNpemUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2ldLCBTVUJTVFJbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbaTppICsgc3VibGVuXSwgU1VCU1RSKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2k6aSArIHN1YmxlbjoyXSwgU1VCU1RSWzo6Ml0pCisgICAgICAgICAgICBpZiBpID4gMDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbaSArIHN1YmxlbiAtIDE6aSAtIDE6LTNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VCU1RSW3N1Ymxlbjo6LTNdKQorICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBkbyBzb21lIHNsaWNpbmcgYW5kIGluZGV4aW5nIG5lYXIgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgIyBzdHJpbmcsIHRvby4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2xlbihzKSAtIDFdLCBTVUJTVFJbLTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLTFdLCBTVUJTVFJbLTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbbGVuKHMpIC0gMTBdLCBTVUJTVFJbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stc3VibGVuXSwgU1VCU1RSWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbbGVuKHMpOl0sICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbbGVuKHMpIC0gMTpdLCBTVUJTVFJbLTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLTE6XSwgU1VCU1RSWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzW2xlbihzKSAtIHN1YmxlbjpdLCBTVUJTVFIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1stc3VibGVuOl0sIFNVQlNUUikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc1s6XSksIGxlbihzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc1s6bGVuKHMpIC0gNV0pLCBsZW4ocykgLSA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzWzU6LTVdKSwgbGVuKHMpIC0gMTApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwgcywgbGVuKHMpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBvcGVyYXRvci5nZXRpdGVtLCBzLCBsZW4ocykgKyAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBvcGVyYXRvci5nZXRpdGVtLCBzLCBsZW4ocykgKyAxPDwzMSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmLCBzaXplKToKKyAgICAgICAgU1VCU1RSID0gJzAxMjM0NTY3ODknCisgICAgICAgIGVkZ2UgPSAnLScgKiAoc2l6ZSAvLyAyKQorICAgICAgICBzID0gJycuam9pbihbZWRnZSwgU1VCU1RSLCBlZGdlXSkKKyAgICAgICAgZGVsIGVkZ2UKKyAgICAgICAgc2VsZi5hc3NlcnRJbihTVUJTVFIsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oU1VCU1RSICogMiwgcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignLScsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBzKQorICAgICAgICBzICs9ICdhJworICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgcykKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT0yKQorICAgIGRlZiB0ZXN0X2NvbXBhcmUoc2VsZiwgc2l6ZSk6CisgICAgICAgIHMxID0gJy0nICogc2l6ZQorICAgICAgICBzMiA9ICctJyAqIHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxID09IHMyKQorICAgICAgICBkZWwgczIKKyAgICAgICAgczIgPSBzMSArICdhJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMxID09IHMyKQorICAgICAgICBkZWwgczIKKyAgICAgICAgczIgPSAnLicgKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoczEgPT0gczIpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYsIHNpemUpOgorICAgICAgICAjIE5vdCBzdXJlIGlmIHdlIGNhbiBkbyBhbnkgbWVhbmluZ2Z1bCB0ZXN0cyBoZXJlLi4uICBFdmVuIGlmIHdlCisgICAgICAgICMgc3RhcnQgcmVseWluZyBvbiB0aGUgZXhhY3QgYWxnb3JpdGhtIHVzZWQsIHRoZSByZXN1bHQgd2lsbCBiZQorICAgICAgICAjIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIEMgJ2xvbmcgaW50Jy4gIEV2ZW4gdGhpcworICAgICAgICAjIHRlc3QgaXMgZG9kZ3kgKHRoZXJlJ3Mgbm8gKmd1YXJhbnRlZSogdGhhdCB0aGUgdHdvIHRoaW5ncyBzaG91bGQKKyAgICAgICAgIyBoYXZlIGEgZGlmZmVyZW50IGhhc2gsIGV2ZW4gaWYgdGhleSwgaW4gdGhlIGN1cnJlbnQKKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbiwgYWxtb3N0IGFsd2F5cyBkby4pCisgICAgICAgIHMgPSAnXHgwMCcgKiBzaXplCisgICAgICAgIGgxID0gaGFzaChzKQorICAgICAgICBkZWwgcworICAgICAgICBzID0gJ1x4MDAnICogKHNpemUgKyAxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID09IGhhc2gocykpCisKK2NsYXNzIFR1cGxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIFR1cGxlcyBoYXZlIGEgc21hbGwsIGZpeGVkLXNpemVkIGhlYWQgYW5kIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvCisgICAgIyBkYXRhLiAgU2luY2Ugd2UncmUgdGVzdGluZyA2NC1iaXQgYWRkcmVzc2luZywgd2UgY2FuIGFzc3VtZSB0aGF0IHRoZQorICAgICMgcG9pbnRlcnMgYXJlIDggYnl0ZXMsIGFuZCB0aGF0IHRodXMgdGhhdCB0aGUgdHVwbGVzIHRha2UgdXAgOCBieXRlcworICAgICMgcGVyIHNpemUuCisKKyAgICAjIEFzIGEgc2lkZS1lZmZlY3Qgb2YgdGVzdGluZyBsb25nIHR1cGxlcywgdGhlc2UgdGVzdHMgaGFwcGVuIHRvIHRlc3QKKyAgICAjIGhhdmluZyBtb3JlIHRoYW4gMjw8MzEgcmVmZXJlbmNlcyB0byBhbnkgZ2l2ZW4gb2JqZWN0LiBIZW5jZSB0aGUKKyAgICAjIHVzZSBvZiBkaWZmZXJlbnQgdHlwZXMgb2Ygb2JqZWN0cyBhcyBjb250ZW50cyBpbiBkaWZmZXJlbnQgdGVzdHMuCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDIsIG1lbXVzZT0xNikKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYsIHNpemUpOgorICAgICAgICB0MSA9ICh1JycsKSAqIHNpemUKKyAgICAgICAgdDIgPSAodScnLCkgKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA9PSB0MikKKyAgICAgICAgZGVsIHQyCisgICAgICAgIHQyID0gKHUnJywpICogKHNpemUgKyAxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQxID09IHQyKQorICAgICAgICBkZWwgdDIKKyAgICAgICAgdDIgPSAoMSwpICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQxID09IHQyKQorCisgICAgIyBUZXN0IGNvbmNhdGVuYXRpbmcgaW50byBhIHNpbmdsZSB0dXBsZSBvZiBtb3JlIHRoYW4gMkcgaW4gbGVuZ3RoLAorICAgICMgYW5kIGNvbmNhdGVuYXRpbmcgYSB0dXBsZSBvZiBtb3JlIHRoYW4gMkcgaW4gbGVuZ3RoIHNlcGFyYXRlbHksIHNvCisgICAgIyB0aGUgc21hbGxlciB0ZXN0IHN0aWxsIGdldHMgcnVuIGV2ZW4gaWYgdGhlcmUgaXNuJ3QgbWVtb3J5IGZvciB0aGUKKyAgICAjIGxhcmdlciB0ZXN0IChidXQgd2Ugc3RpbGwgbGV0IHRoZSB0ZXN0ZXIga25vdyB0aGUgbGFyZ2VyIHRlc3QgaXMKKyAgICAjIHNraXBwZWQsIGluIHZlcmJvc2UgbW9kZS4pCisgICAgZGVmIGJhc2ljX2NvbmNhdF90ZXN0KHNlbGYsIHNpemUpOgorICAgICAgICB0ID0gKCgpLCkgKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCBzaXplKQorICAgICAgICB0ID0gdCArIHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odCksIHNpemUgKiAyKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gMiArIDIsIG1lbXVzZT0yNCkKKyAgICBkZWYgdGVzdF9jb25jYXRfc21hbGwoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX2NvbmNhdF90ZXN0KHNpemUpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDIsIG1lbXVzZT0yNCkKKyAgICBkZWYgdGVzdF9jb25jYXRfbGFyZ2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX2NvbmNhdF90ZXN0KHNpemUpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyA1ICsgMTAsIG1lbXVzZT04ICogNSkKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmLCBzaXplKToKKyAgICAgICAgdCA9ICgxLCAyLCAzLCA0LCA1KSAqIHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odCksIHNpemUgKiA1KQorICAgICAgICBzZWxmLmFzc2VydEluKDUsIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKDEsIDIsIDMsIDQsIDUpLCB0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDAsIHQpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9OCkKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYsIHNpemUpOgorICAgICAgICB0MSA9ICgwLCkgKiBzaXplCisgICAgICAgIGgxID0gaGFzaCh0MSkKKyAgICAgICAgZGVsIHQxCisgICAgICAgIHQyID0gKDAsKSAqIChzaXplICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSA9PSBoYXNoKHQyKSkKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT04KQorICAgIGRlZiB0ZXN0X2luZGV4X2FuZF9zbGljZShzZWxmLCBzaXplKToKKyAgICAgICAgdCA9IChOb25lLCkgKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbLTFdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbNV0sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFtzaXplIC0gMV0sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0sIHQsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFs6NV0sIChOb25lLCkgKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbLTU6XSwgKE5vbmUsKSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFsyMDoyNV0sIChOb25lLCkgKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbLTI1Oi0yMF0sIChOb25lLCkgKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbc2l6ZSAtIDU6XSwgKE5vbmUsKSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFtzaXplIC0gNTpzaXplXSwgKE5vbmUsKSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFtzaXplIC0gNjpzaXplIC0gMl0sIChOb25lLCkgKiA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbc2l6ZTpzaXplXSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFtzaXplOnNpemUrNV0sICgpKQorCisgICAgIyBMaWtlIHRlc3RfY29uY2F0LCBzcGxpdCBpbiB0d28uCisgICAgZGVmIGJhc2ljX3Rlc3RfcmVwZWF0KHNlbGYsIHNpemUpOgorICAgICAgICB0ID0gKCcnLCkgKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCBzaXplKQorICAgICAgICB0ID0gdCAqIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odCksIHNpemUgKiAyKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gMiArIDIsIG1lbXVzZT0yNCkKKyAgICBkZWYgdGVzdF9yZXBlYXRfc21hbGwoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX3Rlc3RfcmVwZWF0KHNpemUpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDIsIG1lbXVzZT0yNCkKKyAgICBkZWYgdGVzdF9yZXBlYXRfbGFyZ2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX3Rlc3RfcmVwZWF0KHNpemUpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8xRyAtIDEsIG1lbXVzZT0xMikKKyAgICBkZWYgdGVzdF9yZXBlYXRfbGFyZ2VfMihzZWxmLCBzaXplKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYmFzaWNfdGVzdF9yZXBlYXQoc2l6ZSkKKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzFHIC0gMSwgbWVtdXNlPTkpCisgICAgZGVmIHRlc3RfZnJvbV8yR19nZW5lcmF0b3Ioc2VsZiwgc2l6ZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHQgPSB0dXBsZSh4cmFuZ2Uoc2l6ZSkpCisgICAgICAgIGV4Y2VwdCBNZW1vcnlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MgIyBhY2NlcHRhYmxlIG9uIDMyLWJpdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY291bnQgPSAwCisgICAgICAgICAgICBmb3IgaXRlbSBpbiB0OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbSwgY291bnQpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgc2l6ZSkKKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzFHIC0gMjUsIG1lbXVzZT05KQorICAgIGRlZiB0ZXN0X2Zyb21fYWxtb3N0XzJHX2dlbmVyYXRvcihzZWxmLCBzaXplKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdCA9IHR1cGxlKHhyYW5nZShzaXplKSkKKyAgICAgICAgICAgIGNvdW50ID0gMAorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gdDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW0sIGNvdW50KQorICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnQsIHNpemUpCisgICAgICAgIGV4Y2VwdCBNZW1vcnlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MgIyBhY2NlcHRhYmxlLCBleHBlY3RlZCBvbiAzMi1iaXQKKworICAgICMgTGlrZSB0ZXN0X2NvbmNhdCwgc3BsaXQgaW4gdHdvLgorICAgIGRlZiBiYXNpY190ZXN0X3JlcHIoc2VsZiwgc2l6ZSk6CisgICAgICAgIHQgPSAoMCwpICogc2l6ZQorICAgICAgICBzID0gcmVwcih0KQorICAgICAgICAjIFRoZSByZXByIG9mIGEgdHVwbGUgb2YgMCdzIGlzIGV4YWN0bHkgdGhyZWUgdGltZXMgdGhlIHR1cGxlIGxlbmd0aC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUgKiAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbOjVdLCAnKDAsIDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLTU6XSwgJzAsIDApJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcwJyksIHNpemUpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyAzICsgMiwgbWVtdXNlPTggKyAzKQorICAgIGRlZiB0ZXN0X3JlcHJfc21hbGwoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX3Rlc3RfcmVwcihzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAyLCBtZW11c2U9OCArIDMpCisgICAgZGVmIHRlc3RfcmVwcl9sYXJnZShzZWxmLCBzaXplKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYmFzaWNfdGVzdF9yZXByKHNpemUpCisKK2NsYXNzIExpc3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgTGlrZSB0dXBsZXMsIGxpc3RzIGhhdmUgYSBzbWFsbCwgZml4ZWQtc2l6ZWQgaGVhZCBhbmQgYW4gYXJyYXkgb2YKKyAgICAjIHBvaW50ZXJzIHRvIGRhdGEsIHNvIDggYnl0ZXMgcGVyIHNpemUuIEFsc28gbGlrZSB0dXBsZXMsIHdlIG1ha2UgdGhlCisgICAgIyBsaXN0cyBob2xkIHJlZmVyZW5jZXMgdG8gdmFyaW91cyBvYmplY3RzIHRvIHRlc3QgdGhlaXIgcmVmY291bnQKKyAgICAjIGxpbWl0cy4KKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMiwgbWVtdXNlPTE2KQorICAgIGRlZiB0ZXN0X2NvbXBhcmUoc2VsZiwgc2l6ZSk6CisgICAgICAgIGwxID0gW3UnJ10gKiBzaXplCisgICAgICAgIGwyID0gW3UnJ10gKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsMSA9PSBsMikKKyAgICAgICAgZGVsIGwyCisgICAgICAgIGwyID0gW3UnJ10gKiAoc2l6ZSArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobDEgPT0gbDIpCisgICAgICAgIGRlbCBsMgorICAgICAgICBsMiA9IFsyXSAqIHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsMSA9PSBsMikKKworICAgICMgVGVzdCBjb25jYXRlbmF0aW5nIGludG8gYSBzaW5nbGUgbGlzdCBvZiBtb3JlIHRoYW4gMkcgaW4gbGVuZ3RoLAorICAgICMgYW5kIGNvbmNhdGVuYXRpbmcgYSBsaXN0IG9mIG1vcmUgdGhhbiAyRyBpbiBsZW5ndGggc2VwYXJhdGVseSwgc28KKyAgICAjIHRoZSBzbWFsbGVyIHRlc3Qgc3RpbGwgZ2V0cyBydW4gZXZlbiBpZiB0aGVyZSBpc24ndCBtZW1vcnkgZm9yIHRoZQorICAgICMgbGFyZ2VyIHRlc3QgKGJ1dCB3ZSBzdGlsbCBsZXQgdGhlIHRlc3RlciBrbm93IHRoZSBsYXJnZXIgdGVzdCBpcworICAgICMgc2tpcHBlZCwgaW4gdmVyYm9zZSBtb2RlLikKKyAgICBkZWYgYmFzaWNfdGVzdF9jb25jYXQoc2VsZiwgc2l6ZSk6CisgICAgICAgIGwgPSBbW11dICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgbCA9IGwgKyBsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplICogMikKKworICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDIgKyAyLCBtZW11c2U9MjQpCisgICAgZGVmIHRlc3RfY29uY2F0X3NtYWxsKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5iYXNpY190ZXN0X2NvbmNhdChzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAyLCBtZW11c2U9MjQpCisgICAgZGVmIHRlc3RfY29uY2F0X2xhcmdlKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5iYXNpY190ZXN0X2NvbmNhdChzaXplKQorCisgICAgZGVmIGJhc2ljX3Rlc3RfaW5wbGFjZV9jb25jYXQoc2VsZiwgc2l6ZSk6CisgICAgICAgIGwgPSBbc3lzLnN0ZG91dF0gKiBzaXplCisgICAgICAgIGwgKz0gbAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsWzBdIGlzIGxbLTFdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobFtzaXplIC0gMV0gaXMgbFtzaXplICsgMV0pCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyAyICsgMiwgbWVtdXNlPTI0KQorICAgIGRlZiB0ZXN0X2lucGxhY2VfY29uY2F0X3NtYWxsKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5iYXNpY190ZXN0X2lucGxhY2VfY29uY2F0KHNpemUpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDIsIG1lbXVzZT0yNCkKKyAgICBkZWYgdGVzdF9pbnBsYWNlX2NvbmNhdF9sYXJnZShzZWxmLCBzaXplKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYmFzaWNfdGVzdF9pbnBsYWNlX2NvbmNhdChzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gNSArIDEwLCBtZW11c2U9OCAqIDUpCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZiwgc2l6ZSk6CisgICAgICAgIGwgPSBbMSwgMiwgMywgNCwgNV0gKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbig1LCBsKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKFsxLCAyLCAzLCA0LCA1XSwgbCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigwLCBsKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTgpCisgICAgZGVmIHRlc3RfaGFzaChzZWxmLCBzaXplKToKKyAgICAgICAgbCA9IFswXSAqIHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNoLCBsKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAxMCwgbWVtdXNlPTgpCisgICAgZGVmIHRlc3RfaW5kZXhfYW5kX3NsaWNlKHNlbGYsIHNpemUpOgorICAgICAgICBsID0gW05vbmVdICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0xXSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzVdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbc2l6ZSAtIDFdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBvcGVyYXRvci5nZXRpdGVtLCBsLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbOjVdLCBbTm9uZV0gKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTU6XSwgW05vbmVdICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzIwOjI1XSwgW05vbmVdICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0yNTotMjBdLCBbTm9uZV0gKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbc2l6ZSAtIDU6XSwgW05vbmVdICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsW3NpemUgLSA1OnNpemVdLCBbTm9uZV0gKiA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbc2l6ZSAtIDY6c2l6ZSAtIDJdLCBbTm9uZV0gKiA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbc2l6ZTpzaXplXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFtzaXplOnNpemUrNV0sIFtdKQorCisgICAgICAgIGxbc2l6ZSAtIDJdID0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy0zOl0sIFtOb25lLCA1LCBOb25lXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLmNvdW50KDUpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBvcGVyYXRvci5zZXRpdGVtLCBsLCBzaXplLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKworICAgICAgICBsW3NpemUgLSA3Ol0gPSBbMSwgMiwgMywgNCwgNV0KKyAgICAgICAgc2l6ZSAtPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTc6XSwgW05vbmUsIE5vbmUsIDEsIDIsIDMsIDQsIDVdKQorCisgICAgICAgIGxbOjddID0gWzEsIDIsIDMsIDQsIDVdCisgICAgICAgIHNpemUgLT0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzo3XSwgWzEsIDIsIDMsIDQsIDUsIE5vbmUsIE5vbmVdKQorCisgICAgICAgIGRlbCBsW3NpemUgLSAxXQorICAgICAgICBzaXplIC09IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstMV0sIDQpCisKKyAgICAgICAgZGVsIGxbLTI6XQorICAgICAgICBzaXplIC09IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstMV0sIDIpCisKKyAgICAgICAgZGVsIGxbMF0KKyAgICAgICAgc2l6ZSAtPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbMF0sIDIpCisKKyAgICAgICAgZGVsIGxbOjJdCisgICAgICAgIHNpemUgLT0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzBdLCA0KQorCisgICAgIyBMaWtlIHRlc3RfY29uY2F0LCBzcGxpdCBpbiB0d28uCisgICAgZGVmIGJhc2ljX3Rlc3RfcmVwZWF0KHNlbGYsIHNpemUpOgorICAgICAgICBsID0gW10gKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobCkKKyAgICAgICAgbCA9IFsnJ10gKiBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBsID0gbCAqIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUgKiAyKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gMiArIDIsIG1lbXVzZT0yNCkKKyAgICBkZWYgdGVzdF9yZXBlYXRfc21hbGwoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX3Rlc3RfcmVwZWF0KHNpemUpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDIsIG1lbXVzZT0yNCkKKyAgICBkZWYgdGVzdF9yZXBlYXRfbGFyZ2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX3Rlc3RfcmVwZWF0KHNpemUpCisKKyAgICBkZWYgYmFzaWNfdGVzdF9pbnBsYWNlX3JlcGVhdChzZWxmLCBzaXplKToKKyAgICAgICAgbCA9IFsnJ10KKyAgICAgICAgbCAqPSBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobFswXSBpcyBsWy0xXSkKKyAgICAgICAgZGVsIGwKKworICAgICAgICBsID0gWycnXSAqIHNpemUKKyAgICAgICAgbCAqPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxbc2l6ZSAtIDFdIGlzIGxbLTFdKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gMiArIDIsIG1lbXVzZT0xNikKKyAgICBkZWYgdGVzdF9pbnBsYWNlX3JlcGVhdF9zbWFsbChzZWxmLCBzaXplKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYmFzaWNfdGVzdF9pbnBsYWNlX3JlcGVhdChzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAyLCBtZW11c2U9MTYpCisgICAgZGVmIHRlc3RfaW5wbGFjZV9yZXBlYXRfbGFyZ2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX3Rlc3RfaW5wbGFjZV9yZXBlYXQoc2l6ZSkKKworICAgIGRlZiBiYXNpY190ZXN0X3JlcHIoc2VsZiwgc2l6ZSk6CisgICAgICAgIGwgPSBbMF0gKiBzaXplCisgICAgICAgIHMgPSByZXByKGwpCisgICAgICAgICMgVGhlIHJlcHIgb2YgYSBsaXN0IG9mIDAncyBpcyBleGFjdGx5IHRocmVlIHRpbWVzIHRoZSBsaXN0IGxlbmd0aC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIHNpemUgKiAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbOjVdLCAnWzAsIDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLTU6XSwgJzAsIDBdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcwJyksIHNpemUpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyAzICsgMiwgbWVtdXNlPTggKyAzKQorICAgIGRlZiB0ZXN0X3JlcHJfc21hbGwoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX3Rlc3RfcmVwcihzaXplKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgKyAyLCBtZW11c2U9OCArIDMpCisgICAgZGVmIHRlc3RfcmVwcl9sYXJnZShzZWxmLCBzaXplKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYmFzaWNfdGVzdF9yZXByKHNpemUpCisKKyAgICAjIGxpc3Qgb3ZlcmFsbG9jYXRlcyB+MS84dGggb2YgdGhlIHRvdGFsIHNpemUgKG9uIGZpcnN0IGV4cGFuc2lvbikgc28KKyAgICAjIHRoZSBzaW5nbGUgbGlzdC5hcHBlbmQgY2FsbCBwdXRzIG1lbXVzZSBhdCA5IGJ5dGVzIHBlciBzaXplLgorICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHLCBtZW11c2U9OSkKKyAgICBkZWYgdGVzdF9hcHBlbmQoc2VsZiwgc2l6ZSk6CisgICAgICAgIGwgPSBbb2JqZWN0KCldICogc2l6ZQorICAgICAgICBsLmFwcGVuZChvYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUrMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxbLTNdIGlzIGxbLTJdKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxbLTJdIGlzIGxbLTFdKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gNSArIDIsIG1lbXVzZT04ICogNSkKKyAgICBkZWYgdGVzdF9jb3VudChzZWxmLCBzaXplKToKKyAgICAgICAgbCA9IFsxLCAyLCAzLCA0LCA1XSAqIHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLmNvdW50KDEpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwuY291bnQoIjEiKSwgMCkKKworICAgIGRlZiBiYXNpY190ZXN0X2V4dGVuZChzZWxmLCBzaXplKToKKyAgICAgICAgbCA9IFtmaWxlXSAqIHNpemUKKyAgICAgICAgbC5leHRlbmQobCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUgKiAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobFswXSBpcyBsWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxbc2l6ZSAtIDFdIGlzIGxbc2l6ZSArIDFdKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gMiArIDIsIG1lbXVzZT0xNikKKyAgICBkZWYgdGVzdF9leHRlbmRfc21hbGwoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX3Rlc3RfZXh0ZW5kKHNpemUpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDIsIG1lbXVzZT0xNikKKyAgICBkZWYgdGVzdF9leHRlbmRfbGFyZ2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2ljX3Rlc3RfZXh0ZW5kKHNpemUpCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyA1ICsgMiwgbWVtdXNlPTggKiA1KQorICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYsIHNpemUpOgorICAgICAgICBsID0gWzFMLCAyTCwgM0wsIDRMLCA1TF0gKiBzaXplCisgICAgICAgIHNpemUgKj0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwuaW5kZXgoMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5pbmRleCg1LCBzaXplIC0gNSksIHNpemUgLSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwuaW5kZXgoNSwgc2l6ZSAtIDUsIHNpemUpLCBzaXplIC0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbC5pbmRleCwgMSwgc2l6ZSAtIDQsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGwuaW5kZXgsIDZMKQorCisgICAgIyBUaGlzIHRlc3RzIHN1ZmZlcnMgZnJvbSBvdmVyYWxsb2NhdGlvbiwganVzdCBsaWtlIHRlc3RfYXBwZW5kLgorICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT05KQorICAgIGRlZiB0ZXN0X2luc2VydChzZWxmLCBzaXplKToKKyAgICAgICAgbCA9IFsxLjBdICogc2l6ZQorICAgICAgICBsLmluc2VydChzaXplIC0gMSwgIkEiKQorICAgICAgICBzaXplICs9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstMzpdLCBbMS4wLCAiQSIsIDEuMF0pCisKKyAgICAgICAgbC5pbnNlcnQoc2l6ZSArIDEsICJCIikKKyAgICAgICAgc2l6ZSArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTM6XSwgWyJBIiwgMS4wLCAiQiJdKQorCisgICAgICAgIGwuaW5zZXJ0KDEsICJDIikKKyAgICAgICAgc2l6ZSArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbOjNdLCBbMS4wLCAiQyIsIDEuMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFtzaXplIC0gMzpdLCBbIkEiLCAxLjAsICJCIl0pCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyA1ICsgNCwgbWVtdXNlPTggKiA1KQorICAgIGRlZiB0ZXN0X3BvcChzZWxmLCBzaXplKToKKyAgICAgICAgbCA9IFt1ImEiLCB1ImIiLCB1ImMiLCB1ImQiLCB1ImUiXSAqIHNpemUKKyAgICAgICAgc2l6ZSAqPSA1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorCisgICAgICAgIGl0ZW0gPSBsLnBvcCgpCisgICAgICAgIHNpemUgLT0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVtLCB1ImUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTI6XSwgW3UiYyIsIHUiZCJdKQorCisgICAgICAgIGl0ZW0gPSBsLnBvcCgwKQorICAgICAgICBzaXplIC09IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbSwgdSJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzoyXSwgW3UiYiIsIHUiYyJdKQorCisgICAgICAgIGl0ZW0gPSBsLnBvcChzaXplIC0gMikKKyAgICAgICAgc2l6ZSAtPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW0sIHUiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFstMjpdLCBbdSJiIiwgdSJkIl0pCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9OCkKKyAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZiwgc2l6ZSk6CisgICAgICAgIGwgPSBbMTBdICogc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSkKKworICAgICAgICBsLnJlbW92ZSgxMCkKKyAgICAgICAgc2l6ZSAtPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorCisgICAgICAgICMgQmVjYXVzZSBvZiB0aGUgZWFybGllciBsLnJlbW92ZSgpLCB0aGlzIGFwcGVuZCBkb2Vzbid0IHRyaWdnZXIKKyAgICAgICAgIyBhIHJlc2l6ZS4KKyAgICAgICAgbC5hcHBlbmQoNSkKKyAgICAgICAgc2l6ZSArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTI6XSwgWzEwLCA1XSkKKyAgICAgICAgbC5yZW1vdmUoNSkKKyAgICAgICAgc2l6ZSAtPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTI6XSwgWzEwLCAxMF0pCisKKyAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyA1ICsgMiwgbWVtdXNlPTggKiA1KQorICAgIGRlZiB0ZXN0X3JldmVyc2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIGwgPSBbMSwgMiwgMywgNCwgNV0gKiBzaXplCisgICAgICAgIGwucmV2ZXJzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGwpLCBzaXplICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWy01Ol0sIFs1LCA0LCAzLCAyLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzo1XSwgWzUsIDQsIDMsIDIsIDFdKQorCisgICAgQGJpZ21lbXRlc3QobWluc2l6ZT1fMkcgLy8gNSArIDIsIG1lbXVzZT04ICogNSkKKyAgICBkZWYgdGVzdF9zb3J0KHNlbGYsIHNpemUpOgorICAgICAgICBsID0gWzEsIDIsIDMsIDQsIDVdICogc2l6ZQorICAgICAgICBsLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSAqIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5jb3VudCgxKSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzoxMF0sIFsxXSAqIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbLTEwOl0sIFs1XSAqIDEwKQorCitjbGFzcyBCdWZmZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzFHLCBtZW11c2U9NCkKKyAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZiwgc2l6ZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICBiID0gYnVmZmVyKCJBQUFBIikqc2l6ZQorICAgICAgICBleGNlcHQgTWVtb3J5RXJyb3I6CisgICAgICAgICAgICBwYXNzICMgYWNjZXB0YWJsZSBvbiAzMi1iaXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvdW50ID0gMAorICAgICAgICAgICAgZm9yIGMgaW4gYjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsICdBJykKKyAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCBzaXplKjQpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFN0clRlc3QsIFR1cGxlVGVzdCwgTGlzdFRlc3QsIEJ1ZmZlclRlc3QpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaWYgbGVuKHN5cy5hcmd2KSA+IDE6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5zZXRfbWVtbGltaXQoc3lzLmFyZ3ZbMV0pCisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2JpbmFzY2lpLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYmluYXNjaWkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgyNWYxYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2JpbmFzY2lpLnB5CkBAIC0wLDAgKzEsMjM2IEBACisiIiJUZXN0IHRoZSBiaW5hc2NpaSBDIG1vZHVsZS4iIiIKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgYXJyYXkKKworIyBOb3RlOiAiKl9oZXgiIGZ1bmN0aW9ucyBhcmUgYWxpYXNlcyBmb3IgIih1biloZXhsaWZ5IgorYjJhX2Z1bmN0aW9ucyA9IFsnYjJhX2Jhc2U2NCcsICdiMmFfaGV4JywgJ2IyYV9ocXgnLCAnYjJhX3FwJywgJ2IyYV91dScsCisgICAgICAgICAgICAgICAgICdoZXhsaWZ5JywgJ3JsZWNvZGVfaHF4J10KK2EyYl9mdW5jdGlvbnMgPSBbJ2EyYl9iYXNlNjQnLCAnYTJiX2hleCcsICdhMmJfaHF4JywgJ2EyYl9xcCcsICdhMmJfdXUnLAorICAgICAgICAgICAgICAgICAndW5oZXhsaWZ5JywgJ3JsZWRlY29kZV9ocXgnXQorYWxsX2Z1bmN0aW9ucyA9IGEyYl9mdW5jdGlvbnMgKyBiMmFfZnVuY3Rpb25zICsgWydjcmMzMicsICdjcmNfaHF4J10KKworCitjbGFzcyBCaW5BU0NJSVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgdHlwZTJ0ZXN0ID0gc3RyCisgICAgIyBDcmVhdGUgYmluYXJ5IHRlc3QgZGF0YQorICAgIHJhd2RhdGEgPSAiVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy5cclxuIgorICAgICMgQmUgc2xvdyBzbyB3ZSBkb24ndCBkZXBlbmQgb24gb3RoZXIgbW9kdWxlcworICAgIHJhd2RhdGEgKz0gIiIuam9pbihtYXAoY2hyLCB4cmFuZ2UoMjU2KSkpCisgICAgcmF3ZGF0YSArPSAiXHJcbkhlbGxvIHdvcmxkLlxuIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLnR5cGUydGVzdChzZWxmLnJhd2RhdGEpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25zKHNlbGYpOgorICAgICAgICAjIENoZWNrIG1vZHVsZSBleGNlcHRpb25zCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGJpbmFzY2lpLkVycm9yLCBFeGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhiaW5hc2NpaS5JbmNvbXBsZXRlLCBFeGNlcHRpb24pKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25zKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZXNlbmNlIG9mIGFsbCBmdW5jdGlvbnMKKyAgICAgICAgZm9yIG5hbWUgaW4gYWxsX2Z1bmN0aW9uczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGdldGF0dHIoYmluYXNjaWksIG5hbWUpLCAnX19jYWxsX18nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXR0cihiaW5hc2NpaSwgbmFtZSkpCisKKyAgICBkZWYgdGVzdF9yZXR1cm5lZF92YWx1ZShzZWxmKToKKyAgICAgICAgIyBMaW1pdCB0byB0aGUgbWluaW11bSBvZiBhbGwgbGltaXRzIChiMmFfdXUpCisgICAgICAgIE1BWF9BTEwgPSA0NQorICAgICAgICByYXcgPSBzZWxmLnJhd2RhdGFbOk1BWF9BTExdCisgICAgICAgIGZvciBmYSwgZmIgaW4gemlwKGEyYl9mdW5jdGlvbnMsIGIyYV9mdW5jdGlvbnMpOgorICAgICAgICAgICAgYTJiID0gZ2V0YXR0cihiaW5hc2NpaSwgZmEpCisgICAgICAgICAgICBiMmEgPSBnZXRhdHRyKGJpbmFzY2lpLCBmYikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBhID0gYjJhKHNlbGYudHlwZTJ0ZXN0KHJhdykpCisgICAgICAgICAgICAgICAgcmVzID0gYTJiKHNlbGYudHlwZTJ0ZXN0KGEpKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgie30ve30gY29udmVyc2lvbiByYWlzZXMgeyFyfSIuZm9ybWF0KGZiLCBmYSwgZXJyKSkKKyAgICAgICAgICAgIGlmIGZiID09ICdiMmFfaHF4JzoKKyAgICAgICAgICAgICAgICAjIGIyYV9ocXggcmV0dXJucyBhIHR1cGxlCisgICAgICAgICAgICAgICAgcmVzLCBfID0gcmVzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgcmF3LCAie30ve30gY29udmVyc2lvbjogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyFyfSAhPSB7IXJ9Ii5mb3JtYXQoZmIsIGZhLCByZXMsIHJhdykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzLCBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYSwgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKG1heChvcmQoYykgZm9yIGMgaW4gYSksIDEyOCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJpbmFzY2lpLmNyY19ocXgocmF3LCAwKSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYmluYXNjaWkuY3JjMzIocmF3KSwgaW50KQorCisgICAgZGVmIHRlc3RfYmFzZTY0dmFsaWQoc2VsZik6CisgICAgICAgICMgVGVzdCBiYXNlNjQgd2l0aCB2YWxpZCBkYXRhCisgICAgICAgIE1BWF9CQVNFNjQgPSA1NworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzZWxmLnJhd2RhdGEpLCBNQVhfQkFTRTY0KToKKyAgICAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChzZWxmLnJhd2RhdGFbaTppK01BWF9CQVNFNjRdKQorICAgICAgICAgICAgYSA9IGJpbmFzY2lpLmIyYV9iYXNlNjQoYikKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChhKQorICAgICAgICByZXMgPSAiIgorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChsaW5lKQorICAgICAgICAgICAgYiA9IGJpbmFzY2lpLmEyYl9iYXNlNjQoYSkKKyAgICAgICAgICAgIHJlcyA9IHJlcyArIGIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHNlbGYucmF3ZGF0YSkKKworICAgIGRlZiB0ZXN0X2Jhc2U2NGludmFsaWQoc2VsZik6CisgICAgICAgICMgVGVzdCBiYXNlNjQgd2l0aCByYW5kb20gaW52YWxpZCBjaGFyYWN0ZXJzIHNwcmlua2xlZCB0aHJvdWdob3V0CisgICAgICAgICMgKFRoaXMgcmVxdWlyZXMgYSBuZXcgdmVyc2lvbiBvZiBiaW5hc2NpaS4pCisgICAgICAgIE1BWF9CQVNFNjQgPSA1NworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzZWxmLmRhdGEpLCBNQVhfQkFTRTY0KToKKyAgICAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChzZWxmLnJhd2RhdGFbaTppK01BWF9CQVNFNjRdKQorICAgICAgICAgICAgYSA9IGJpbmFzY2lpLmIyYV9iYXNlNjQoYikKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChhKQorCisgICAgICAgIGZpbGxlcnMgPSAiIgorICAgICAgICB2YWxpZCA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OSsvIgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMjU2KToKKyAgICAgICAgICAgIGMgPSBjaHIoaSkKKyAgICAgICAgICAgIGlmIGMgbm90IGluIHZhbGlkOgorICAgICAgICAgICAgICAgIGZpbGxlcnMgKz0gYworICAgICAgICBkZWYgYWRkbm9pc2UobGluZSk6CisgICAgICAgICAgICBub2lzZSA9IGZpbGxlcnMKKyAgICAgICAgICAgIHJhdGlvID0gbGVuKGxpbmUpIC8vIGxlbihub2lzZSkKKyAgICAgICAgICAgIHJlcyA9ICIiCisgICAgICAgICAgICB3aGlsZSBsaW5lIGFuZCBub2lzZToKKyAgICAgICAgICAgICAgICBpZiBsZW4obGluZSkgLy8gbGVuKG5vaXNlKSA+IHJhdGlvOgorICAgICAgICAgICAgICAgICAgICBjLCBsaW5lID0gbGluZVswXSwgbGluZVsxOl0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjLCBub2lzZSA9IG5vaXNlWzBdLCBub2lzZVsxOl0KKyAgICAgICAgICAgICAgICByZXMgKz0gYworICAgICAgICAgICAgcmV0dXJuIHJlcyArIG5vaXNlICsgbGluZQorICAgICAgICByZXMgPSAiIgorICAgICAgICBmb3IgbGluZSBpbiBtYXAoYWRkbm9pc2UsIGxpbmVzKToKKyAgICAgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChsaW5lKQorICAgICAgICAgICAgYiA9IGJpbmFzY2lpLmEyYl9iYXNlNjQoYSkKKyAgICAgICAgICAgIHJlcyArPSBiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZWxmLnJhd2RhdGEpCisKKyAgICAgICAgIyBUZXN0IGJhc2U2NCB3aXRoIGp1c3QgaW52YWxpZCBjaGFyYWN0ZXJzLCB3aGljaCBzaG91bGQgcmV0dXJuCisgICAgICAgICMgZW1wdHkgc3RyaW5ncy4gVEJEOiBzaG91bGRuJ3QgaXQgcmFpc2UgYW4gZXhjZXB0aW9uIGluc3RlYWQgPworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmEyYl9iYXNlNjQoc2VsZi50eXBlMnRlc3QoZmlsbGVycykpLCAnJykKKworICAgIGRlZiB0ZXN0X3V1KHNlbGYpOgorICAgICAgICBNQVhfVVUgPSA0NQorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzZWxmLmRhdGEpLCBNQVhfVVUpOgorICAgICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KHNlbGYucmF3ZGF0YVtpOmkrTUFYX1VVXSkKKyAgICAgICAgICAgIGEgPSBiaW5hc2NpaS5iMmFfdXUoYikKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChhKQorICAgICAgICByZXMgPSAiIgorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChsaW5lKQorICAgICAgICAgICAgYiA9IGJpbmFzY2lpLmEyYl91dShhKQorICAgICAgICAgICAgcmVzICs9IGIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHNlbGYucmF3ZGF0YSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmEyYl91dSgiXHg3ZiIpLCAiXHgwMCIqMzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYTJiX3V1KCJceDgwIiksICJceDAwIiozMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5hMmJfdXUoIlx4ZmYiKSwgIlx4MDAiKjMxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiaW5hc2NpaS5FcnJvciwgYmluYXNjaWkuYTJiX3V1LCAiXHhmZlx4MDAiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiaW5hc2NpaS5FcnJvciwgYmluYXNjaWkuYTJiX3V1LCAiISEhISIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmluYXNjaWkuRXJyb3IsIGJpbmFzY2lpLmIyYV91dSwgNDYqIiEiKQorCisgICAgICAgICMgSXNzdWUgIzc3MDEgKGNyYXNoIG9uIGEgcHlkZWJ1ZyBidWlsZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5iMmFfdXUoJ3gnKSwgJyE+ICAgXG4nKQorCisgICAgZGVmIHRlc3RfY3JjMzIoc2VsZik6CisgICAgICAgIGNyYyA9IGJpbmFzY2lpLmNyYzMyKHNlbGYudHlwZTJ0ZXN0KCJUZXN0IHRoZSBDUkMtMzIgb2YiKSkKKyAgICAgICAgY3JjID0gYmluYXNjaWkuY3JjMzIoc2VsZi50eXBlMnRlc3QoIiB0aGlzIHN0cmluZy4iKSwgY3JjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyYywgMTU3MTIyMDMzMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJpbmFzY2lpLmNyYzMyKQorCisgICAgZGVmIHRlc3RfaHF4KHNlbGYpOgorICAgICAgICAjIFBlcmZvcm0gYmluaGV4NCBzdHlsZSBSTEUtY29tcHJlc3Npb24KKyAgICAgICAgIyBUaGVuIGNhbGN1bGF0ZSB0aGUgaGV4YmluNCBiaW5hcnktdG8tQVNDSUkgdHJhbnNsYXRpb24KKyAgICAgICAgcmxlID0gYmluYXNjaWkucmxlY29kZV9ocXgoc2VsZi5kYXRhKQorICAgICAgICBhID0gYmluYXNjaWkuYjJhX2hxeChzZWxmLnR5cGUydGVzdChybGUpKQorICAgICAgICBiLCBfID0gYmluYXNjaWkuYTJiX2hxeChzZWxmLnR5cGUydGVzdChhKSkKKyAgICAgICAgcmVzID0gYmluYXNjaWkucmxlZGVjb2RlX2hxeChiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZWxmLnJhd2RhdGEpCisKKyAgICBkZWYgdGVzdF9oZXgoc2VsZik6CisgICAgICAgICMgdGVzdCBoZXhsaWZpY2F0aW9uCisgICAgICAgIHMgPSAne3NcMDA1XDAwMFwwMDBcMDAwd29ybGRpXDAwMlwwMDBcMDAwXDAwMHNcMDA1XDAwMFwwMDBcMDAwaGVsbG9pXDAwMVwwMDBcMDAwXDAwMDAnCisgICAgICAgIHQgPSBiaW5hc2NpaS5iMmFfaGV4KHNlbGYudHlwZTJ0ZXN0KHMpKQorICAgICAgICB1ID0gYmluYXNjaWkuYTJiX2hleChzZWxmLnR5cGUydGVzdCh0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCB1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJpbmFzY2lpLmEyYl9oZXgsIHRbOi0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiaW5hc2NpaS5hMmJfaGV4LCB0WzotMV0gKyAncScpCisKKyAgICAgICAgIyBWZXJpZnkgdGhlIHRyZWF0bWVudCBvZiBVbmljb2RlIHN0cmluZ3MKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuaGV4bGlmeSh1bmljb2RlKCdhJywgJ2FzY2lpJykpLCAnNjEnKQorCisgICAgZGVmIHRlc3RfcXAoc2VsZik6CisgICAgICAgICMgQSB0ZXN0IGZvciBTRiBidWcgNTM0MzQ3IChzZWdmYXVsdHMgd2l0aG91dCB0aGUgcHJvcGVyIGZpeCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmluYXNjaWkuYTJiX3FwKCIiLCAqKnsxOjF9KQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJiaW5hc2NpaS5hMmJfcXAoKip7MToxfSkgZGlkbid0IHJhaXNlIFR5cGVFcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYTJiX3FwKCI9ICIpLCAiPSAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmEyYl9xcCgiPT0iKSwgIj0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmEyYl9xcCgiPUFYIiksICI9QVgiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJpbmFzY2lpLmIyYV9xcCwgZm9vPSJiYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmEyYl9xcCgiPTAwXHJcbj0wMCIpLCAiXHgwMFxyXG5ceDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGJpbmFzY2lpLmIyYV9xcCgiXHhmZlxyXG5ceGZmXG5ceGZmIiksCisgICAgICAgICAgICAiPUZGXHJcbj1GRlxyXG49RkYiCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGJpbmFzY2lpLmIyYV9xcCgiMCIqNzUrIlx4ZmZcclxuXHhmZlxyXG5ceGZmIiksCisgICAgICAgICAgICAiMCIqNzUrIj1cclxuPUZGXHJcbj1GRlxyXG49RkYiCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmIyYV9xcCgnXDBcbicpLCAnPTAwXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmIyYV9xcCgnXDBcbicsIHF1b3RldGFicz1UcnVlKSwgJz0wMFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5iMmFfcXAoJ2Zvb1x0YmFyXHRcbicpLCAnZm9vXHRiYXI9MDlcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYjJhX3FwKCdmb29cdGJhclx0XG4nLCBxdW90ZXRhYnM9VHJ1ZSksICdmb289MDliYXI9MDlcbicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5iMmFfcXAoJy4nKSwgJz0yRScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYjJhX3FwKCcuXG4nKSwgJz0yRVxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5iMmFfcXAoJ2EuXG4nKSwgJ2EuXG4nKQorCisgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIEEgdGVzdCBmb3IgU0YgYnVnICMxMDIyOTUzLiAgTWFrZSBzdXJlIFN5c3RlbUVycm9yIGlzIG5vdCByYWlzZWQuCisgICAgICAgIGVtcHR5ID0gc2VsZi50eXBlMnRlc3QoJycpCisgICAgICAgIGZvciBmdW5jIGluIGFsbF9mdW5jdGlvbnM6CisgICAgICAgICAgICBpZiBmdW5jID09ICdjcmNfaHF4JzoKKyAgICAgICAgICAgICAgICAjIGNyY19ocXggbmVlZHMgMiBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICBiaW5hc2NpaS5jcmNfaHF4KGVtcHR5LCAwKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmID0gZ2V0YXR0cihiaW5hc2NpaSwgZnVuYykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmKGVtcHR5KQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgie30oeyFyfSkgcmFpc2VzIHshcn0iLmZvcm1hdChmdW5jLCBlbXB0eSwgZXJyKSkKKworCitjbGFzcyBBcnJheUJpbkFTQ0lJVGVzdChCaW5BU0NJSVRlc3QpOgorICAgIGRlZiB0eXBlMnRlc3Qoc2VsZiwgcyk6CisgICAgICAgIHJldHVybiBhcnJheS5hcnJheSgnYycsIHMpCisKKworY2xhc3MgQnl0ZWFycmF5QmluQVNDSUlUZXN0KEJpbkFTQ0lJVGVzdCk6CisgICAgdHlwZTJ0ZXN0ID0gYnl0ZWFycmF5CisKKworY2xhc3MgTWVtb3J5dmlld0JpbkFTQ0lJVGVzdChCaW5BU0NJSVRlc3QpOgorICAgIHR5cGUydGVzdCA9IG1lbW9yeXZpZXcKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChCaW5BU0NJSVRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJpbkFTQ0lJVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVhcnJheUJpbkFTQ0lJVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeXZpZXdCaW5BU0NJSVRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2JpbmhleC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2JpbmhleC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZjg5NzAzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYmluaGV4LnB5CkBAIC0wLDAgKzEsNDkgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyIiIlRlc3Qgc2NyaXB0IGZvciB0aGUgYmluaGV4IEMgbW9kdWxlCisKKyAgIFVzZXMgdGhlIG1lY2hhbmlzbSBvZiB0aGUgcHl0aG9uIGJpbmhleCBtb2R1bGUKKyAgIEJhc2VkIG9uIGFuIG9yaWdpbmFsIHRlc3QgYnkgUm9nZXIgRS4gTWFzc2UuCisiIiIKK2ltcG9ydCBiaW5oZXgKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK2NsYXNzIEJpbkhleFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mbmFtZTEgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgIHNlbGYuZm5hbWUyID0gdGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0cnk6IG9zLnVubGluayhzZWxmLmZuYW1lMSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6IHBhc3MKKworICAgICAgICB0cnk6IG9zLnVubGluayhzZWxmLmZuYW1lMikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6IHBhc3MKKworICAgIERBVEEgPSAnSmFjayBpcyBteSBoZXJvJworCisgICAgZGVmIHRlc3RfYmluaGV4KHNlbGYpOgorICAgICAgICBmID0gb3BlbihzZWxmLmZuYW1lMSwgJ3cnKQorICAgICAgICBmLndyaXRlKHNlbGYuREFUQSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgYmluaGV4LmJpbmhleChzZWxmLmZuYW1lMSwgc2VsZi5mbmFtZTIpCisKKyAgICAgICAgYmluaGV4LmhleGJpbihzZWxmLmZuYW1lMiwgc2VsZi5mbmFtZTEpCisKKyAgICAgICAgZiA9IG9wZW4oc2VsZi5mbmFtZTEsICdyJykKKyAgICAgICAgZmluaXNoID0gZi5yZWFkbGluZSgpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBmaW5pc2gpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQmluSGV4VGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYmlub3AucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9iaW5vcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWVmNjI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYmlub3AucHkKQEAgLTAsMCArMSwzMzEgQEAKKyIiIlRlc3RzIGZvciBiaW5hcnkgb3BlcmF0b3JzIG9uIHN1YnR5cGVzIG9mIGJ1aWx0LWluIHR5cGVzLiIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2RlZiBnY2QoYSwgYik6CisgICAgIiIiR3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgdXNpbmcgRXVjbGlkJ3MgYWxnb3JpdGhtLiIiIgorICAgIHdoaWxlIGE6CisgICAgICAgIGEsIGIgPSBiJWEsIGEKKyAgICByZXR1cm4gYgorCitkZWYgaXNpbnQoeCk6CisgICAgIiIiVGVzdCB3aGV0aGVyIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBpbnQgb3IgbG9uZy4iIiIKKyAgICByZXR1cm4gaXNpbnN0YW5jZSh4LCBpbnQpIG9yIGlzaW5zdGFuY2UoeCwgbG9uZykKKworZGVmIGlzbnVtKHgpOgorICAgICIiIlRlc3Qgd2hldGhlciBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYSBidWlsdC1pbiBudW1lcmljIHR5cGUuIiIiCisgICAgZm9yIFQgaW4gaW50LCBsb25nLCBmbG9hdCwgY29tcGxleDoKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh4LCBUKToKKyAgICAgICAgICAgIHJldHVybiAxCisgICAgcmV0dXJuIDAKKworZGVmIGlzUmF0KHgpOgorICAgICIiIlRlc3Qgd2hldGVyIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgUmF0IGNsYXNzLiIiIgorICAgIHJldHVybiBpc2luc3RhbmNlKHgsIFJhdCkKKworY2xhc3MgUmF0KG9iamVjdCk6CisKKyAgICAiIiJSYXRpb25hbCBudW1iZXIgaW1wbGVtZW50ZWQgYXMgYSBub3JtYWxpemVkIHBhaXIgb2YgbG9uZ3MuIiIiCisKKyAgICBfX3Nsb3RzX18gPSBbJ19SYXRfX251bScsICdfUmF0X19kZW4nXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG51bT0wTCwgZGVuPTFMKToKKyAgICAgICAgIiIiQ29uc3RydWN0b3I6IFJhdChbbnVtWywgZGVuXV0pLgorCisgICAgICAgIFRoZSBhcmd1bWVudHMgbXVzdCBiZSBpbnRzIG9yIGxvbmdzLCBhbmQgZGVmYXVsdCB0byAoMCwgMSkuIiIiCisgICAgICAgIGlmIG5vdCBpc2ludChudW0pOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiUmF0IG51bWVyYXRvciBtdXN0IGJlIGludCBvciBsb25nICglcikiICUgbnVtCisgICAgICAgIGlmIG5vdCBpc2ludChkZW4pOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiUmF0IGRlbm9taW5hdG9yIG11c3QgYmUgaW50IG9yIGxvbmcgKCVyKSIgJSBkZW4KKyAgICAgICAgIyBCdXQgdGhlIHplcm8gaXMgYWx3YXlzIG9uCisgICAgICAgIGlmIGRlbiA9PSAwOgorICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IsICJ6ZXJvIGRlbm9taW5hdG9yIgorICAgICAgICBnID0gZ2NkKGRlbiwgbnVtKQorICAgICAgICBzZWxmLl9fbnVtID0gbG9uZyhudW0vL2cpCisgICAgICAgIHNlbGYuX19kZW4gPSBsb25nKGRlbi8vZykKKworICAgIGRlZiBfZ2V0X251bShzZWxmKToKKyAgICAgICAgIiIiQWNjZXNzb3IgZnVuY3Rpb24gZm9yIHJlYWQtb25seSAnbnVtJyBhdHRyaWJ1dGUgb2YgUmF0LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fX251bQorICAgIG51bSA9IHByb3BlcnR5KF9nZXRfbnVtLCBOb25lKQorCisgICAgZGVmIF9nZXRfZGVuKHNlbGYpOgorICAgICAgICAiIiJBY2Nlc3NvciBmdW5jdGlvbiBmb3IgcmVhZC1vbmx5ICdkZW4nIGF0dHJpYnV0ZSBvZiBSYXQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9fZGVuCisgICAgZGVuID0gcHJvcGVydHkoX2dldF9kZW4sIE5vbmUpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICIiIkNvbnZlcnQgYSBSYXQgdG8gYW4gc3RyaW5nIHJlc2VtYmxpbmcgYSBSYXQgY29uc3RydWN0b3IgY2FsbC4iIiIKKyAgICAgICAgcmV0dXJuICJSYXQoJWQsICVkKSIgJSAoc2VsZi5fX251bSwgc2VsZi5fX2RlbikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJDb252ZXJ0IGEgUmF0IHRvIGEgc3RyaW5nIHJlc2VtYmxpbmcgYSBkZWNpbWFsIG51bWVyaWMgdmFsdWUuIiIiCisgICAgICAgIHJldHVybiBzdHIoZmxvYXQoc2VsZikpCisKKyAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAiIiJDb252ZXJ0IGEgUmF0IHRvIGEgZmxvYXQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9fbnVtKjEuMC9zZWxmLl9fZGVuCisKKyAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgIiIiQ29udmVydCBhIFJhdCB0byBhbiBpbnQ7IHNlbGYuZGVuIG11c3QgYmUgMS4iIiIKKyAgICAgICAgaWYgc2VsZi5fX2RlbiA9PSAxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQoc2VsZi5fX251bSkKKyAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IsICgiJXMgdG9vIGxhcmdlIHRvIGNvbnZlcnQgdG8gaW50IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoc2VsZikpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJjYW4ndCBjb252ZXJ0ICVzIHRvIGludCIgJSByZXByKHNlbGYpCisKKyAgICBkZWYgX19sb25nX18oc2VsZik6CisgICAgICAgICIiIkNvbnZlcnQgYSBSYXQgdG8gYW4gbG9uZzsgc2VsZi5kZW4gbXVzdCBiZSAxLiIiIgorICAgICAgICBpZiBzZWxmLl9fZGVuID09IDE6CisgICAgICAgICAgICByZXR1cm4gbG9uZyhzZWxmLl9fbnVtKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAiY2FuJ3QgY29udmVydCAlcyB0byBsb25nIiAlIHJlcHIoc2VsZikKKworICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiQWRkIHR3byBSYXRzLCBvciBhIFJhdCBhbmQgYSBudW1iZXIuIiIiCisgICAgICAgIGlmIGlzaW50KG90aGVyKToKKyAgICAgICAgICAgIG90aGVyID0gUmF0KG90aGVyKQorICAgICAgICBpZiBpc1JhdChvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gUmF0KHNlbGYuX19udW0qb3RoZXIuX19kZW4gKyBvdGhlci5fX251bSpzZWxmLl9fZGVuLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fZGVuKm90aGVyLl9fZGVuKQorICAgICAgICBpZiBpc251bShvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gZmxvYXQoc2VsZikgKyBvdGhlcgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIF9fcmFkZF9fID0gX19hZGRfXworCisgICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJTdWJ0cmFjdCB0d28gUmF0cywgb3IgYSBSYXQgYW5kIGEgbnVtYmVyLiIiIgorICAgICAgICBpZiBpc2ludChvdGhlcik6CisgICAgICAgICAgICBvdGhlciA9IFJhdChvdGhlcikKKyAgICAgICAgaWYgaXNSYXQob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIFJhdChzZWxmLl9fbnVtKm90aGVyLl9fZGVuIC0gb3RoZXIuX19udW0qc2VsZi5fX2RlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2RlbipvdGhlci5fX2RlbikKKyAgICAgICAgaWYgaXNudW0ob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIGZsb2F0KHNlbGYpIC0gb3RoZXIKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgX19yc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJTdWJ0cmFjdCB0d28gUmF0cywgb3IgYSBSYXQgYW5kIGEgbnVtYmVyIChyZXZlcnNlZCBhcmdzKS4iIiIKKyAgICAgICAgaWYgaXNpbnQob3RoZXIpOgorICAgICAgICAgICAgb3RoZXIgPSBSYXQob3RoZXIpCisgICAgICAgIGlmIGlzUmF0KG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBSYXQob3RoZXIuX19udW0qc2VsZi5fX2RlbiAtIHNlbGYuX19udW0qb3RoZXIuX19kZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19kZW4qb3RoZXIuX19kZW4pCisgICAgICAgIGlmIGlzbnVtKG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBvdGhlciAtIGZsb2F0KHNlbGYpCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIF9fbXVsX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJNdWx0aXBseSB0d28gUmF0cywgb3IgYSBSYXQgYW5kIGEgbnVtYmVyLiIiIgorICAgICAgICBpZiBpc1JhdChvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gUmF0KHNlbGYuX19udW0qb3RoZXIuX19udW0sIHNlbGYuX19kZW4qb3RoZXIuX19kZW4pCisgICAgICAgIGlmIGlzaW50KG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBSYXQoc2VsZi5fX251bSpvdGhlciwgc2VsZi5fX2RlbikKKyAgICAgICAgaWYgaXNudW0ob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIGZsb2F0KHNlbGYpKm90aGVyCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgX19ybXVsX18gPSBfX211bF9fCisKKyAgICBkZWYgX190cnVlZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJEaXZpZGUgdHdvIFJhdHMsIG9yIGEgUmF0IGFuZCBhIG51bWJlci4iIiIKKyAgICAgICAgaWYgaXNSYXQob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIFJhdChzZWxmLl9fbnVtKm90aGVyLl9fZGVuLCBzZWxmLl9fZGVuKm90aGVyLl9fbnVtKQorICAgICAgICBpZiBpc2ludChvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gUmF0KHNlbGYuX19udW0sIHNlbGYuX19kZW4qb3RoZXIpCisgICAgICAgIGlmIGlzbnVtKG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBmbG9hdChzZWxmKSAvIG90aGVyCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgX19kaXZfXyA9IF9fdHJ1ZWRpdl9fCisKKyAgICBkZWYgX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiRGl2aWRlIHR3byBSYXRzLCBvciBhIFJhdCBhbmQgYSBudW1iZXIgKHJldmVyc2VkIGFyZ3MpLiIiIgorICAgICAgICBpZiBpc1JhdChvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gUmF0KG90aGVyLl9fbnVtKnNlbGYuX19kZW4sIG90aGVyLl9fZGVuKnNlbGYuX19udW0pCisgICAgICAgIGlmIGlzaW50KG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBSYXQob3RoZXIqc2VsZi5fX2Rlbiwgc2VsZi5fX251bSkKKyAgICAgICAgaWYgaXNudW0ob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIG90aGVyIC8gZmxvYXQoc2VsZikKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBfX3JkaXZfXyA9IF9fcnRydWVkaXZfXworCisgICAgZGVmIF9fZmxvb3JkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIkRpdmlkZSB0d28gUmF0cywgcmV0dXJuaW5nIHRoZSBmbG9vcmVkIHJlc3VsdC4iIiIKKyAgICAgICAgaWYgaXNpbnQob3RoZXIpOgorICAgICAgICAgICAgb3RoZXIgPSBSYXQob3RoZXIpCisgICAgICAgIGVsaWYgbm90IGlzUmF0KG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICB4ID0gc2VsZi9vdGhlcgorICAgICAgICByZXR1cm4geC5fX251bSAvLyB4Ll9fZGVuCisKKyAgICBkZWYgX19yZmxvb3JkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICIiIkRpdmlkZSB0d28gUmF0cywgcmV0dXJuaW5nIHRoZSBmbG9vcmVkIHJlc3VsdCAocmV2ZXJzZWQgYXJncykuIiIiCisgICAgICAgIHggPSBvdGhlci9zZWxmCisgICAgICAgIHJldHVybiB4Ll9fbnVtIC8vIHguX19kZW4KKworICAgIGRlZiBfX2Rpdm1vZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiRGl2aWRlIHR3byBSYXRzLCByZXR1cm5pbmcgcXVvdGllbnQgYW5kIHJlbWFpbmRlci4iIiIKKyAgICAgICAgaWYgaXNpbnQob3RoZXIpOgorICAgICAgICAgICAgb3RoZXIgPSBSYXQob3RoZXIpCisgICAgICAgIGVsaWYgbm90IGlzUmF0KG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICB4ID0gc2VsZi8vb3RoZXIKKyAgICAgICAgcmV0dXJuICh4LCBzZWxmIC0gb3RoZXIgKiB4KQorCisgICAgZGVmIF9fcmRpdm1vZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiRGl2aWRlIHR3byBSYXRzLCByZXR1cm5pbmcgcXVvdGllbnQgYW5kIHJlbWFpbmRlciAocmV2ZXJzZWQgYXJncykuIiIiCisgICAgICAgIGlmIGlzaW50KG90aGVyKToKKyAgICAgICAgICAgIG90aGVyID0gUmF0KG90aGVyKQorICAgICAgICBlbGlmIG5vdCBpc1JhdChvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIGRpdm1vZChvdGhlciwgc2VsZikKKworICAgIGRlZiBfX21vZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiVGFrZSBvbmUgUmF0IG1vZHVsbyBhbm90aGVyLiIiIgorICAgICAgICByZXR1cm4gZGl2bW9kKHNlbGYsIG90aGVyKVsxXQorCisgICAgZGVmIF9fcm1vZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiVGFrZSBvbmUgUmF0IG1vZHVsbyBhbm90aGVyIChyZXZlcnNlZCBhcmdzKS4iIiIKKyAgICAgICAgcmV0dXJuIGRpdm1vZChvdGhlciwgc2VsZilbMV0KKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJDb21wYXJlIHR3byBSYXRzIGZvciBlcXVhbGl0eS4iIiIKKyAgICAgICAgaWYgaXNpbnQob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19kZW4gPT0gMSBhbmQgc2VsZi5fX251bSA9PSBvdGhlcgorICAgICAgICBpZiBpc1JhdChvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX251bSA9PSBvdGhlci5fX251bSBhbmQgc2VsZi5fX2RlbiA9PSBvdGhlci5fX2RlbgorICAgICAgICBpZiBpc251bShvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gZmxvYXQoc2VsZikgPT0gb3RoZXIKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgIiIiQ29tcGFyZSB0d28gUmF0cyBmb3IgaW5lcXVhbGl0eS4iIiIKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCisKKyAgICAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisgICAgX19oYXNoX18gPSBOb25lCisKK2NsYXNzIFJhdFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJVbml0IHRlc3RzIGZvciBSYXQgY2xhc3MgYW5kIGl0cyBzdXBwb3J0IHV0aWxpdGllcy4iIiIKKworICAgIGRlZiB0ZXN0X2djZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoMTAsIDEyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoMTAsIDE1KSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoMTAsIDExKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnY2QoMTAwLCAxNSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2NkKC0xMCwgMiksIC0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjZCgxMCwgLTIpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjZCgtMTAsIC0yKSwgLTIpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDIwKToKKyAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKDEsIDIwKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2NkKGksIGopID4gMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2NkKC1pLCBqKSA8IDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjZChpLCAtaikgPiAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnY2QoLWksIC1qKSA8IDApCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgYSA9IFJhdCgxMCwgMTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5udW0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5kZW4sIDMpCisgICAgICAgIGEgPSBSYXQoMTBMLCAxNUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5udW0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5kZW4sIDMpCisgICAgICAgIGEgPSBSYXQoMTAsIC0xNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLm51bSwgLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5kZW4sIDMpCisgICAgICAgIGEgPSBSYXQoLTEwLCAxNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLm51bSwgLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5kZW4sIDMpCisgICAgICAgIGEgPSBSYXQoLTEwLCAtMTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5udW0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5kZW4sIDMpCisgICAgICAgIGEgPSBSYXQoNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLm51bSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmRlbiwgMSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYSA9IFJhdCgxLCAwKQorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlJhdCgxLCAwKSBkaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiKQorICAgICAgICBmb3IgYmFkIGluICIwIiwgMC4wLCAwaiwgKCksIFtdLCB7fSwgTm9uZSwgUmF0LCB1bml0dGVzdDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBhID0gUmF0KGJhZCkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlJhdCglcikgZGlkbid0IHJhaXNlIFR5cGVFcnJvciIgJSBiYWQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYSA9IFJhdCgxLCBiYWQpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJSYXQoMSwgJXIpIGRpZG4ndCByYWlzZSBUeXBlRXJyb3IiICUgYmFkKQorCisgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFJhdCgyLCAzKSArIFJhdCgxLCAzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoMiwgMykgKyAxLCBSYXQoNSwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSArIFJhdCgyLCAzKSwgUmF0KDUsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEuMCArIFJhdCgxLCAyKSwgMS41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFJhdCgxLCAyKSArIDEuMCwgMS41KQorCisgICAgZGVmIHRlc3Rfc3ViKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFJhdCg3LCAyKSAtIFJhdCg3LCA1KSwgUmF0KDIxLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUmF0KDcsIDUpIC0gMSwgUmF0KDIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgLSBSYXQoMywgNSksIFJhdCgyLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoMywgMikgLSAxLjAsIDAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLjAgLSBSYXQoMSwgMiksIDAuNSkKKworICAgIGRlZiB0ZXN0X211bChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoMiwgMykgKiBSYXQoNSwgNyksIFJhdCgxMCwgMjEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFJhdCgxMCwgMykgKiAzLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzICogUmF0KDEwLCAzKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUmF0KDEwLCA1KSAqIDAuNSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAuNSAqIFJhdCgxMCwgNSksIDEuMCkKKworICAgIGRlZiB0ZXN0X2RpdihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoMTAsIDMpIC8gUmF0KDUsIDcpLCBSYXQoMTQsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFJhdCgxMCwgMykgLyAzLCBSYXQoMTAsIDkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIgLyBSYXQoNSksIFJhdCgyLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLjAgKiBSYXQoMSwgMiksIDEuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoMSwgMikgKiAzLjAsIDEuNSkKKworICAgIGRlZiB0ZXN0X2Zsb29yZGl2KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFJhdCgxMCkgLy8gUmF0KDQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFJhdCgxMCwgMykgLy8gUmF0KDQsIDMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFJhdCgxMCkgLy8gNCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMCAvLyBSYXQoNCksIDIpCisKKyAgICBkZWYgdGVzdF9lcShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSYXQoMTApLCBSYXQoMjAsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFJhdCgxMCksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwLCBSYXQoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFJhdCgxMCksIDEwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTAuMCwgUmF0KDEwKSkKKworICAgIGRlZiB0ZXN0X2Z1dHVyZV9kaXYoc2VsZik6CisgICAgICAgIGV4ZWMgZnV0dXJlX3Rlc3QKKworICAgICMgWFhYIFJhbiBvdXQgb2Ygc3RlYW07IFRPIERPOiBkaXZtb2QsIGRpdiwgZnV0dXJlIGRpdmlzaW9uCisKK2Z1dHVyZV90ZXN0ID0gIiIiCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCitzZWxmLmFzc2VydEVxdWFsKFJhdCgxMCwgMykgLyBSYXQoNSwgNyksIFJhdCgxNCwgMykpCitzZWxmLmFzc2VydEVxdWFsKFJhdCgxMCwgMykgLyAzLCBSYXQoMTAsIDkpKQorc2VsZi5hc3NlcnRFcXVhbCgyIC8gUmF0KDUpLCBSYXQoMiwgNSkpCitzZWxmLmFzc2VydEVxdWFsKDMuMCAqIFJhdCgxLCAyKSwgMS41KQorc2VsZi5hc3NlcnRFcXVhbChSYXQoMSwgMikgKiAzLjAsIDEuNSkKK3NlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnMS8yJyksIDAuNSkKKyIiIgorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChSYXRUZXN0Q2FzZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9iaXNlY3QucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9iaXNlY3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzMzMwYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Jpc2VjdC5weQpAQCAtMCwwICsxLDM2OCBAQAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSBVc2VyTGlzdCBpbXBvcnQgVXNlckxpc3QKKworIyBXZSBkbyBhIGJpdCBvZiB0cmlja2VyeSBoZXJlIHRvIGJlIGFibGUgdG8gdGVzdCBib3RoIHRoZSBDIGltcGxlbWVudGF0aW9uCisjIGFuZCB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2R1bGUuCisKKyMgTWFrZSBpdCBpbXBvc3NpYmxlIHRvIGltcG9ydCB0aGUgQyBpbXBsZW1lbnRhdGlvbiBhbnltb3JlLgorc3lzLm1vZHVsZXNbJ19iaXNlY3QnXSA9IDAKKyMgV2UgbXVzdCBhbHNvIGhhbmRsZSB0aGUgY2FzZSB0aGF0IGJpc2VjdCB3YXMgaW1wb3J0ZWQgYmVmb3JlLgoraWYgJ2Jpc2VjdCcgaW4gc3lzLm1vZHVsZXM6CisgICAgZGVsIHN5cy5tb2R1bGVzWydiaXNlY3QnXQorCisjIE5vdyB3ZSBjYW4gaW1wb3J0IHRoZSBtb2R1bGUgYW5kIGdldCB0aGUgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24uCitpbXBvcnQgYmlzZWN0IGFzIHB5X2Jpc2VjdAorCisjIFJlc3RvcmUgZXZlcnl0aGluZyB0byBub3JtYWwuCitkZWwgc3lzLm1vZHVsZXNbJ19iaXNlY3QnXQorZGVsIHN5cy5tb2R1bGVzWydiaXNlY3QnXQorCisjIFRoaXMgaXMgbm93IHRoZSBtb2R1bGUgd2l0aCB0aGUgQyBpbXBsZW1lbnRhdGlvbi4KK2ltcG9ydCBiaXNlY3QgYXMgY19iaXNlY3QKKworCitjbGFzcyBSYW5nZShvYmplY3QpOgorICAgICIiIkEgdHJpdmlhbCB4cmFuZ2UoKS1saWtlIG9iamVjdCB3aXRob3V0IGFueSBpbnRlZ2VyIHdpZHRoIGxpbWl0YXRpb25zLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydCwgc3RvcCk6CisgICAgICAgIHNlbGYuc3RhcnQgPSBzdGFydAorICAgICAgICBzZWxmLnN0b3AgPSBzdG9wCisgICAgICAgIHNlbGYubGFzdF9pbnNlcnQgPSBOb25lCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RvcCAtIHNlbGYuc3RhcnQKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpZHgpOgorICAgICAgICBuID0gc2VsZi5zdG9wIC0gc2VsZi5zdGFydAorICAgICAgICBpZiBpZHggPCAwOgorICAgICAgICAgICAgaWR4ICs9IG4KKyAgICAgICAgaWYgaWR4ID49IG46CisgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yKGlkeCkKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RhcnQgKyBpZHgKKworICAgIGRlZiBpbnNlcnQoc2VsZiwgaWR4LCBpdGVtKToKKyAgICAgICAgc2VsZi5sYXN0X2luc2VydCA9IGlkeCwgaXRlbQorCisKK2NsYXNzIFRlc3RCaXNlY3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IE5vbmUKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wcmVjb21wdXRlZENhc2VzID0gWworICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgW10sIDEsIDApLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzFdLCAwLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxXSwgMSwgMSksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMV0sIDIsIDEpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDFdLCAwLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAxXSwgMSwgMiksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMV0sIDIsIDIpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDEsIDFdLCAwLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAxLCAxXSwgMSwgMyksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMSwgMV0sIDIsIDMpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDEsIDEsIDFdLCAwLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAxLCAxLCAxXSwgMSwgNCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMSwgMSwgMV0sIDIsIDQpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDJdLCAwLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAyXSwgMSwgMSksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMl0sIDEuNSwgMSksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMl0sIDIsIDIpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDJdLCAzLCAyKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAxLCAyLCAyXSwgMCwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMSwgMiwgMl0sIDEsIDIpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDEsIDIsIDJdLCAxLjUsIDIpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDEsIDIsIDJdLCAyLCA0KSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAxLCAyLCAyXSwgMywgNCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMiwgM10sIDAsIDApLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDIsIDNdLCAxLCAxKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAyLCAzXSwgMS41LCAxKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAyLCAzXSwgMiwgMiksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMiwgM10sIDIuNSwgMiksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMiwgM10sIDMsIDMpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDIsIDNdLCA0LCAzKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAyLCAyLCAzLCAzLCAzLCA0LCA0LCA0LCA0XSwgMCwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNF0sIDEsIDEpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDIsIDIsIDMsIDMsIDMsIDQsIDQsIDQsIDRdLCAxLjUsIDEpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwgWzEsIDIsIDIsIDMsIDMsIDMsIDQsIDQsIDQsIDRdLCAyLCAzKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAyLCAyLCAzLCAzLCAzLCA0LCA0LCA0LCA0XSwgMi41LCAzKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAyLCAyLCAzLCAzLCAzLCA0LCA0LCA0LCA0XSwgMywgNiksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNF0sIDMuNSwgNiksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LCBbMSwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNF0sIDQsIDEwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsIFsxLCAyLCAyLCAzLCAzLCAzLCA0LCA0LCA0LCA0XSwgNSwgMTApLAorCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFtdLCAxLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzFdLCAwLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzFdLCAxLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzFdLCAyLCAxKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDFdLCAwLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDFdLCAxLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDFdLCAyLCAyKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDEsIDFdLCAwLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDEsIDFdLCAxLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDEsIDFdLCAyLCAzKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDEsIDEsIDFdLCAwLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDEsIDEsIDFdLCAxLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDEsIDEsIDFdLCAyLCA0KSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDJdLCAwLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDJdLCAxLCAwKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDJdLCAxLjUsIDEpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMl0sIDIsIDEpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMl0sIDMsIDIpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMSwgMiwgMl0sIDAsIDApLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMSwgMiwgMl0sIDEsIDApLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMSwgMiwgMl0sIDEuNSwgMiksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAxLCAyLCAyXSwgMiwgMiksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAxLCAyLCAyXSwgMywgNCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAyLCAzXSwgMCwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAyLCAzXSwgMSwgMCksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAyLCAzXSwgMS41LCAxKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDIsIDNdLCAyLCAxKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDIsIDNdLCAyLjUsIDIpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMiwgM10sIDMsIDIpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMiwgM10sIDQsIDMpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNF0sIDAsIDApLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNF0sIDEsIDApLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNF0sIDEuNSwgMSksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAyLCAyLCAzLCAzLCAzLCA0LCA0LCA0LCA0XSwgMiwgMSksCisgICAgICAgICAgICAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIFsxLCAyLCAyLCAzLCAzLCAzLCA0LCA0LCA0LCA0XSwgMi41LCAzKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDIsIDIsIDMsIDMsIDMsIDQsIDQsIDQsIDRdLCAzLCAzKSwKKyAgICAgICAgICAgIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgWzEsIDIsIDIsIDMsIDMsIDMsIDQsIDQsIDQsIDRdLCAzLjUsIDYpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNF0sIDQsIDYpLAorICAgICAgICAgICAgKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBbMSwgMiwgMiwgMywgMywgMywgNCwgNCwgNCwgNF0sIDUsIDEwKQorICAgICAgICBdCisKKyAgICBkZWYgdGVzdF9wcmVjb21wdXRlZChzZWxmKToKKyAgICAgICAgZm9yIGZ1bmMsIGRhdGEsIGVsZW0sIGV4cGVjdGVkIGluIHNlbGYucHJlY29tcHV0ZWRDYXNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYyhkYXRhLCBlbGVtKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoVXNlckxpc3QoZGF0YSksIGVsZW0pLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2xvKHNlbGYpOgorICAgICAgICAjIElzc3VlIDMzMDEKKyAgICAgICAgbW9kID0gc2VsZi5tb2R1bGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmJpc2VjdF9sZWZ0LCBbMSwgMiwgM10sIDUsIC0xLCAzKSwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmJpc2VjdF9yaWdodCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfbGVmdCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfcmlnaHQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpLAorCisgICAgZGVmIHRlc3RfbGFyZ2VfcmFuZ2Uoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTM0OTYKKyAgICAgICAgbW9kID0gc2VsZi5tb2R1bGUKKyAgICAgICAgbiA9IHN5cy5tYXhzaXplCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSB4cmFuZ2Uobi0xKQorICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImNhbid0IGNyZWF0ZSBhIHhyYW5nZSgpIG9iamVjdCBvZiBzaXplIGBzeXMubWF4c2l6ZWAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5iaXNlY3RfbGVmdChkYXRhLCBuLTMpLCBuLTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmJpc2VjdF9yaWdodChkYXRhLCBuLTMpLCBuLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmJpc2VjdF9sZWZ0KGRhdGEsIG4tMywgbi0xMCwgbiksIG4tMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuYmlzZWN0X3JpZ2h0KGRhdGEsIG4tMywgbi0xMCwgbiksIG4tMikKKworICAgIGRlZiB0ZXN0X2xhcmdlX3B5cmFuZ2Uoc2VsZik6CisgICAgICAgICMgU2FtZSBhcyBhYm92ZSwgYnV0IHdpdGhvdXQgQy1pbXBvc2VkIGxpbWl0cyBvbiByYW5nZSgpIHBhcmFtZXRlcnMKKyAgICAgICAgbW9kID0gc2VsZi5tb2R1bGUKKyAgICAgICAgbiA9IHN5cy5tYXhzaXplCisgICAgICAgIGRhdGEgPSBSYW5nZSgwLCBuLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmJpc2VjdF9sZWZ0KGRhdGEsIG4tMyksIG4tMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuYmlzZWN0X3JpZ2h0KGRhdGEsIG4tMyksIG4tMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuYmlzZWN0X2xlZnQoZGF0YSwgbi0zLCBuLTEwLCBuKSwgbi0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5iaXNlY3RfcmlnaHQoZGF0YSwgbi0zLCBuLTEwLCBuKSwgbi0yKQorICAgICAgICB4ID0gbiAtIDEwMAorICAgICAgICBtb2QuaW5zb3J0X2xlZnQoZGF0YSwgeCwgeCAtIDUwLCB4ICsgNTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YS5sYXN0X2luc2VydCwgKHgsIHgpKQorICAgICAgICB4ID0gbiAtIDIwMAorICAgICAgICBtb2QuaW5zb3J0X3JpZ2h0KGRhdGEsIHgsIHggLSA1MCwgeCArIDUwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEubGFzdF9pbnNlcnQsICh4ICsgMSwgeCkpCisKKyAgICBkZWYgdGVzdF9yYW5kb20oc2VsZiwgbj0yNSk6CisgICAgICAgIGZyb20gcmFuZG9tIGltcG9ydCByYW5kcmFuZ2UKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG4pOgorICAgICAgICAgICAgZGF0YSA9IFtyYW5kcmFuZ2UoMCwgbiwgMikgZm9yIGogaW4geHJhbmdlKGkpXQorICAgICAgICAgICAgZGF0YS5zb3J0KCkKKyAgICAgICAgICAgIGVsZW0gPSByYW5kcmFuZ2UoLTEsIG4rMSkKKyAgICAgICAgICAgIGlwID0gc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQoZGF0YSwgZWxlbSkKKyAgICAgICAgICAgIGlmIGlwIDwgbGVuKGRhdGEpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbGVtIDw9IGRhdGFbaXBdKQorICAgICAgICAgICAgaWYgaXAgPiAwOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhW2lwLTFdIDwgZWxlbSkKKyAgICAgICAgICAgIGlwID0gc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0KGRhdGEsIGVsZW0pCisgICAgICAgICAgICBpZiBpcCA8IGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbSA8IGRhdGFbaXBdKQorICAgICAgICAgICAgaWYgaXAgPiAwOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhW2lwLTFdIDw9IGVsZW0pCisKKyAgICBkZWYgdGVzdF9vcHRpb25hbFNsaWNpbmcoc2VsZik6CisgICAgICAgIGZvciBmdW5jLCBkYXRhLCBlbGVtLCBleHBlY3RlZCBpbiBzZWxmLnByZWNvbXB1dGVkQ2FzZXM6CisgICAgICAgICAgICBmb3IgbG8gaW4geHJhbmdlKDQpOgorICAgICAgICAgICAgICAgIGxvID0gbWluKGxlbihkYXRhKSwgbG8pCisgICAgICAgICAgICAgICAgZm9yIGhpIGluIHhyYW5nZSgzLDgpOgorICAgICAgICAgICAgICAgICAgICBoaSA9IG1pbihsZW4oZGF0YSksIGhpKQorICAgICAgICAgICAgICAgICAgICBpcCA9IGZ1bmMoZGF0YSwgZWxlbSwgbG8sIGhpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG8gPD0gaXAgPD0gaGkpCisgICAgICAgICAgICAgICAgICAgIGlmIGZ1bmMgaXMgc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQgYW5kIGlwIDwgaGk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbSA8PSBkYXRhW2lwXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZnVuYyBpcyBzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCBhbmQgaXAgPiBsbzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhW2lwLTFdIDwgZWxlbSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZnVuYyBpcyBzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQgYW5kIGlwIDwgaGk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbSA8IGRhdGFbaXBdKQorICAgICAgICAgICAgICAgICAgICBpZiBmdW5jIGlzIHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCBhbmQgaXAgPiBsbzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhW2lwLTFdIDw9IGVsZW0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXAsIG1heChsbywgbWluKGhpLCBleHBlY3RlZCkpKQorCisgICAgZGVmIHRlc3RfYmFja2NvbXBhdGliaWxpdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tb2R1bGUuYmlzZWN0LCBzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQpCisKKyAgICBkZWYgdGVzdF9rZXl3b3JkX2FyZ3Moc2VsZik6CisgICAgICAgIGRhdGEgPSBbMTAsIDIwLCAzMCwgNDAsIDUwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0KGE9ZGF0YSwgeD0yNSwgbG89MSwgaGk9MyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0KGE9ZGF0YSwgeD0yNSwgbG89MSwgaGk9MyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tb2R1bGUuYmlzZWN0KGE9ZGF0YSwgeD0yNSwgbG89MSwgaGk9MyksIDIpCisgICAgICAgIHNlbGYubW9kdWxlLmluc29ydF9sZWZ0KGE9ZGF0YSwgeD0yNSwgbG89MSwgaGk9MykKKyAgICAgICAgc2VsZi5tb2R1bGUuaW5zb3J0X3JpZ2h0KGE9ZGF0YSwgeD0yNSwgbG89MSwgaGk9MykKKyAgICAgICAgc2VsZi5tb2R1bGUuaW5zb3J0KGE9ZGF0YSwgeD0yNSwgbG89MSwgaGk9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBbMTAsIDIwLCAyNSwgMjUsIDI1LCAzMCwgNDAsIDUwXSkKKworY2xhc3MgVGVzdEJpc2VjdFB5dGhvbihUZXN0QmlzZWN0KToKKyAgICBtb2R1bGUgPSBweV9iaXNlY3QKKworY2xhc3MgVGVzdEJpc2VjdEMoVGVzdEJpc2VjdCk6CisgICAgbW9kdWxlID0gY19iaXNlY3QKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0SW5zb3J0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2R1bGUgPSBOb25lCisKKyAgICBkZWYgdGVzdF92c0J1aWx0aW5Tb3J0KHNlbGYsIG49NTAwKToKKyAgICAgICAgZnJvbSByYW5kb20gaW1wb3J0IGNob2ljZQorICAgICAgICBmb3IgaW5zb3J0ZWQgaW4gKGxpc3QoKSwgVXNlckxpc3QoKSk6CisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uobik6CisgICAgICAgICAgICAgICAgZGlnaXQgPSBjaG9pY2UoIjAxMjM0NTY3ODkiKQorICAgICAgICAgICAgICAgIGlmIGRpZ2l0IGluICIwMjQ2OCI6CisgICAgICAgICAgICAgICAgICAgIGYgPSBzZWxmLm1vZHVsZS5pbnNvcnRfbGVmdAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGYgPSBzZWxmLm1vZHVsZS5pbnNvcnRfcmlnaHQKKyAgICAgICAgICAgICAgICBmKGluc29ydGVkLCBkaWdpdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGluc29ydGVkKSwgaW5zb3J0ZWQpCisKKyAgICBkZWYgdGVzdF9iYWNrY29tcGF0aWJpbGl0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1vZHVsZS5pbnNvcnQsIHNlbGYubW9kdWxlLmluc29ydF9yaWdodCkKKworICAgIGRlZiB0ZXN0X2xpc3REZXJpdmVkKHNlbGYpOgorICAgICAgICBjbGFzcyBMaXN0KGxpc3QpOgorICAgICAgICAgICAgZGF0YSA9IFtdCisgICAgICAgICAgICBkZWYgaW5zZXJ0KHNlbGYsIGluZGV4LCBpdGVtKToKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGEuaW5zZXJ0KGluZGV4LCBpdGVtKQorCisgICAgICAgIGxzdCA9IExpc3QoKQorICAgICAgICBzZWxmLm1vZHVsZS5pbnNvcnRfbGVmdChsc3QsIDEwKQorICAgICAgICBzZWxmLm1vZHVsZS5pbnNvcnRfcmlnaHQobHN0LCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFs1LCAxMF0sIGxzdC5kYXRhKQorCitjbGFzcyBUZXN0SW5zb3J0UHl0aG9uKFRlc3RJbnNvcnQpOgorICAgIG1vZHVsZSA9IHB5X2Jpc2VjdAorCitjbGFzcyBUZXN0SW5zb3J0QyhUZXN0SW5zb3J0KToKKyAgICBtb2R1bGUgPSBjX2Jpc2VjdAorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworY2xhc3MgTGVuT25seToKKyAgICAiRHVtbXkgc2VxdWVuY2UgY2xhc3MgZGVmaW5pbmcgX19sZW5fXyBidXQgbm90IF9fZ2V0aXRlbV9fLiIKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDEwCisKK2NsYXNzIEdldE9ubHk6CisgICAgIkR1bW15IHNlcXVlbmNlIGNsYXNzIGRlZmluaW5nIF9fZ2V0aXRlbV9fIGJ1dCBub3QgX19sZW5fXy4iCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG5keCk6CisgICAgICAgIHJldHVybiAxMAorCitjbGFzcyBDbXBFcnI6CisgICAgIkR1bW15IGVsZW1lbnQgdGhhdCBhbHdheXMgcmFpc2VzIGFuIGVycm9yIGR1cmluZyBjb21wYXJpc29uIgorICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKKworY2xhc3MgVGVzdEVycm9ySGFuZGxpbmcodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IE5vbmUKKworICAgIGRlZiB0ZXN0X25vbl9zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsCisgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5pbnNvcnRfbGVmdCwgc2VsZi5tb2R1bGUuaW5zb3J0X3JpZ2h0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgMTAsIDEwKQorCisgICAgZGVmIHRlc3RfbGVuX29ubHkoc2VsZik6CisgICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LAorICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuaW5zb3J0X2xlZnQsIHNlbGYubW9kdWxlLmluc29ydF9yaWdodCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZiwgTGVuT25seSgpLCAxMCkKKworICAgIGRlZiB0ZXN0X2dldF9vbmx5KHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoc2VsZi5tb2R1bGUuYmlzZWN0X2xlZnQsIHNlbGYubW9kdWxlLmJpc2VjdF9yaWdodCwKKyAgICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLmluc29ydF9sZWZ0LCBzZWxmLm1vZHVsZS5pbnNvcnRfcmlnaHQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGYsIEdldE9ubHkoKSwgMTApCisKKyAgICBkZWYgdGVzdF9jbXBfZXJyKHNlbGYpOgorICAgICAgICBzZXEgPSBbQ21wRXJyKCksIENtcEVycigpLCBDbXBFcnIoKV0KKyAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLmJpc2VjdF9sZWZ0LCBzZWxmLm1vZHVsZS5iaXNlY3RfcmlnaHQsCisgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5pbnNvcnRfbGVmdCwgc2VsZi5tb2R1bGUuaW5zb3J0X3JpZ2h0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBmLCBzZXEsIDEwKQorCisgICAgZGVmIHRlc3RfYXJnX3BhcnNpbmcoc2VsZik6CisgICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5iaXNlY3RfbGVmdCwgc2VsZi5tb2R1bGUuYmlzZWN0X3JpZ2h0LAorICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuaW5zb3J0X2xlZnQsIHNlbGYubW9kdWxlLmluc29ydF9yaWdodCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIDEwKQorCitjbGFzcyBUZXN0RXJyb3JIYW5kbGluZ1B5dGhvbihUZXN0RXJyb3JIYW5kbGluZyk6CisgICAgbW9kdWxlID0gcHlfYmlzZWN0CisKK2NsYXNzIFRlc3RFcnJvckhhbmRsaW5nQyhUZXN0RXJyb3JIYW5kbGluZyk6CisgICAgbW9kdWxlID0gY19iaXNlY3QKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitsaWJyZWZ0ZXN0ID0gIiIiCitFeGFtcGxlIGZyb20gdGhlIExpYnJhcnkgUmVmZXJlbmNlOiAgRG9jL2xpYnJhcnkvYmlzZWN0LnJzdAorCitUaGUgYmlzZWN0KCkgZnVuY3Rpb24gaXMgZ2VuZXJhbGx5IHVzZWZ1bCBmb3IgY2F0ZWdvcml6aW5nIG51bWVyaWMgZGF0YS4KK1RoaXMgZXhhbXBsZSB1c2VzIGJpc2VjdCgpIHRvIGxvb2sgdXAgYSBsZXR0ZXIgZ3JhZGUgZm9yIGFuIGV4YW0gdG90YWwKKyhzYXkpIGJhc2VkIG9uIGEgc2V0IG9mIG9yZGVyZWQgbnVtZXJpYyBicmVha3BvaW50czogODUgYW5kIHVwIGlzIGFuIGBBJywKKzc1Li44NCBpcyBhIGBCJywgZXRjLgorCisgICAgPj4+IGdyYWRlcyA9ICJGRURDQkEiCisgICAgPj4+IGJyZWFrcG9pbnRzID0gWzMwLCA0NCwgNjYsIDc1LCA4NV0KKyAgICA+Pj4gZnJvbSBiaXNlY3QgaW1wb3J0IGJpc2VjdAorICAgID4+PiBkZWYgZ3JhZGUodG90YWwpOgorICAgIC4uLiAgICAgICAgICAgcmV0dXJuIGdyYWRlc1tiaXNlY3QoYnJlYWtwb2ludHMsIHRvdGFsKV0KKyAgICAuLi4KKyAgICA+Pj4gZ3JhZGUoNjYpCisgICAgJ0MnCisgICAgPj4+IG1hcChncmFkZSwgWzMzLCA5OSwgNzcsIDQ0LCAxMiwgODhdKQorICAgIFsnRScsICdBJywgJ0InLCAnRCcsICdGJywgJ0EnXQorCisiIiIKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitfX3Rlc3RfXyA9IHsnbGlicmVmdGVzdCcgOiBsaWJyZWZ0ZXN0fQorCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2Jpc2VjdAorCisgICAgdGVzdF9jbGFzc2VzID0gW1Rlc3RCaXNlY3RQeXRob24sIFRlc3RCaXNlY3RDLAorICAgICAgICAgICAgICAgICAgICBUZXN0SW5zb3J0UHl0aG9uLCBUZXN0SW5zb3J0QywKKyAgICAgICAgICAgICAgICAgICAgVGVzdEVycm9ySGFuZGxpbmdQeXRob24sIFRlc3RFcnJvckhhbmRsaW5nQ10KKworICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9iaXNlY3QsIHZlcmJvc2UpCisKKyAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKKyAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihjb3VudHMpKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICBwcmludCBjb3VudHMKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYm9vbC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Jvb2wucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZjZDFhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Jvb2wucHkKQEAgLTAsMCArMSwzNzAgQEAKKyMgVGVzdCBwcm9wZXJ0aWVzIG9mIGJvb2wgcHJvbWlzZWQgYnkgUEVQIDI4NQorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2ltcG9ydCBvcworCitjbGFzcyBCb29sVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgQyhib29sKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImJvb2wgc2hvdWxkIG5vdCBiZSBzdWJjbGFzc2FibGUiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50Ll9fbmV3X18sIGJvb2wsIDApCisKKyAgICBkZWYgdGVzdF9wcmludChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm8gPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgICAgICBwcmludCA+PiBmbywgRmFsc2UsIFRydWUKKyAgICAgICAgICAgIGZvLmNsb3NlKCkKKyAgICAgICAgICAgIGZvID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby5yZWFkKCksICdGYWxzZSBUcnVlXG4nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm8uY2xvc2UoKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoRmFsc2UpLCAnRmFsc2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoVHJ1ZSksICdUcnVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHJlcHIoRmFsc2UpKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChyZXByKFRydWUpKSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3N0cihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRmFsc2UpLCAnRmFsc2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihUcnVlKSwgJ1RydWUnKQorCisgICAgZGVmIHRlc3RfaW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChGYWxzZSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoaW50KEZhbHNlKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KFRydWUpLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGludChUcnVlKSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KEZhbHNlKSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGZsb2F0KEZhbHNlKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoVHJ1ZSksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChmbG9hdChUcnVlKSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2xvbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhGYWxzZSksIDBMKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGxvbmcoRmFsc2UpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKFRydWUpLCAxTCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChsb25nKFRydWUpLCBUcnVlKQorCisgICAgZGVmIHRlc3RfbWF0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgrRmFsc2UsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoK0ZhbHNlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtRmFsc2UsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoLUZhbHNlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoRmFsc2UpLCAwKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGFicyhGYWxzZSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCtUcnVlLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KCtUcnVlLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1UcnVlLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoVHJ1ZSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoYWJzKFRydWUpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKH5GYWxzZSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoflRydWUsIC0yKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UrMiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlKzIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMitGYWxzZSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyK1RydWUsIDMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZStGYWxzZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChGYWxzZStGYWxzZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UrVHJ1ZSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChGYWxzZStUcnVlLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUrRmFsc2UsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoVHJ1ZStGYWxzZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlK1RydWUsIDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLVRydWUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoVHJ1ZS1UcnVlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZS1GYWxzZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChGYWxzZS1GYWxzZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZS1GYWxzZSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChUcnVlLUZhbHNlLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLVRydWUsIC0xKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSoxLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlKjEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoRmFsc2UqMSwgRmFsc2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLy8xLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KFRydWUvLzEsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UvLzEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoRmFsc2UvLzEsIEZhbHNlKQorCisgICAgICAgIGZvciBiIGluIEZhbHNlLCBUcnVlOgorICAgICAgICAgICAgZm9yIGkgaW4gMCwgMSwgMjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIqKmksIGludChiKSoqaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGIqKmksIGJvb2woaW50KGIpKippKSkKKworICAgICAgICBmb3IgYSBpbiBGYWxzZSwgVHJ1ZToKKyAgICAgICAgICAgIGZvciBiIGluIEZhbHNlLCBUcnVlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoYSZiLCBib29sKGludChhKSZpbnQoYikpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoYXxiLCBib29sKGludChhKXxpbnQoYikpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoYV5iLCBib29sKGludChhKV5pbnQoYikpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSZpbnQoYiksIGludChhKSZpbnQoYikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChhJmludChiKSwgYm9vbChpbnQoYSkmaW50KGIpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF8aW50KGIpLCBpbnQoYSl8aW50KGIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoYXxpbnQoYiksIGJvb2woaW50KGEpfGludChiKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhXmludChiKSwgaW50KGEpXmludChiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGFeaW50KGIpLCBib29sKGludChhKV5pbnQoYikpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGEpJmIsIGludChhKSZpbnQoYikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChpbnQoYSkmYiwgYm9vbChpbnQoYSkmaW50KGIpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChhKXxiLCBpbnQoYSl8aW50KGIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoaW50KGEpfGIsIGJvb2woaW50KGEpfGludChiKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoYSleYiwgaW50KGEpXmludChiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGludChhKV5iLCBib29sKGludChhKV5pbnQoYikpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMT09MSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygxPT0wLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygwPDEsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMTwwLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygwPD0wLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKDE8PTAsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKDE+MCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygxPjEsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKDE+PTEsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMD49MSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMCE9MSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygwIT0wLCBGYWxzZSkKKworICAgICAgICB4ID0gWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeCBpcyB4LCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHggaXMgbm90IHgsIEZhbHNlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMSBpbiB4LCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKDAgaW4geCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMSBub3QgaW4geCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMCBub3QgaW4geCwgVHJ1ZSkKKworICAgICAgICB4ID0gezE6IDJ9CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeCBpcyB4LCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHggaXMgbm90IHgsIEZhbHNlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMSBpbiB4LCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKDAgaW4geCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMSBub3QgaW4geCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoMCBub3QgaW4geCwgVHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydElzKG5vdCBUcnVlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhub3QgRmFsc2UsIFRydWUpCisKKyAgICBkZWYgdGVzdF9jb252ZXJ0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJvb2wsIDQyLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKDEwKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKDEpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKGJvb2woLTEpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKGJvb2woMCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKGJvb2woImhlbGxvIiksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYm9vbCgiIiksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKGJvb2woKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiVkIiAlIEZhbHNlLCAiMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiVkIiAlIFRydWUsICIxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiJXgiICUgRmFsc2UsICIwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiJXgiICUgVHJ1ZSwgIjEiKQorCisgICAgZGVmIHRlc3RfaGFzYXR0cihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhoYXNhdHRyKFtdLCAiYXBwZW5kIiksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaGFzYXR0cihbXSwgIndvYmJsZSIpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2NhbGxhYmxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzKGNhbGxhYmxlKGxlbiksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY2FsbGFibGUoMSksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfaXNpbnN0YW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpc2luc3RhbmNlKFRydWUsIGJvb2wpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKGlzaW5zdGFuY2UoRmFsc2UsIGJvb2wpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKGlzaW5zdGFuY2UoVHJ1ZSwgaW50KSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpc2luc3RhbmNlKEZhbHNlLCBpbnQpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKGlzaW5zdGFuY2UoMSwgYm9vbCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKGlzaW5zdGFuY2UoMCwgYm9vbCksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfaXNzdWJjbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpc3N1YmNsYXNzKGJvb2wsIGludCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaXNzdWJjbGFzcyhpbnQsIGJvb2wpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2hhc2tleShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcygxIGluIHt9LCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygxIGluIHsxOjF9LCBUcnVlKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHt9Lmhhc19rZXkoMSksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh7MToxfS5oYXNfa2V5KDEpLCBUcnVlKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzKCJ4eXoiLmVuZHN3aXRoKCJ6IiksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInh5eiIuZW5kc3dpdGgoIngiKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInh5ejAxMjMiLmlzYWxudW0oKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiQCMkJSIuaXNhbG51bSgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygieHl6Ii5pc2FscGhhKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIkAjJCUiLmlzYWxwaGEoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIjAxMjMiLmlzZGlnaXQoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygieHl6Ii5pc2RpZ2l0KCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKCJ4eXoiLmlzbG93ZXIoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiWFlaIi5pc2xvd2VyKCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKCIgIi5pc3NwYWNlKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIlhZWiIuaXNzcGFjZSgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiWCIuaXN0aXRsZSgpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKCJ4Ii5pc3RpdGxlKCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKCJYWVoiLmlzdXBwZXIoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygieHl6Ii5pc3VwcGVyKCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKCJ4eXoiLnN0YXJ0c3dpdGgoIngiKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygieHl6Ii5zdGFydHN3aXRoKCJ6IiksIEZhbHNlKQorCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoInh5eiIsICdhc2NpaScpLmVuZHN3aXRoKHVuaWNvZGUoInoiLCAnYXNjaWknKSksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoInh5eiIsICdhc2NpaScpLmVuZHN3aXRoKHVuaWNvZGUoIngiLCAnYXNjaWknKSksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCJ4eXowMTIzIiwgJ2FzY2lpJykuaXNhbG51bSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCJAIyQlIiwgJ2FzY2lpJykuaXNhbG51bSgpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModW5pY29kZSgieHl6IiwgJ2FzY2lpJykuaXNhbHBoYSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCJAIyQlIiwgJ2FzY2lpJykuaXNhbHBoYSgpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModW5pY29kZSgiMDEyMyIsICdhc2NpaScpLmlzZGVjaW1hbCgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCJ4eXoiLCAnYXNjaWknKS5pc2RlY2ltYWwoKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoIjAxMjMiLCAnYXNjaWknKS5pc2RpZ2l0KCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoInh5eiIsICdhc2NpaScpLmlzZGlnaXQoKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoInh5eiIsICdhc2NpaScpLmlzbG93ZXIoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModW5pY29kZSgiWFlaIiwgJ2FzY2lpJykuaXNsb3dlcigpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModW5pY29kZSgiMDEyMyIsICdhc2NpaScpLmlzbnVtZXJpYygpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCJ4eXoiLCAnYXNjaWknKS5pc251bWVyaWMoKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoIiAiLCAnYXNjaWknKS5pc3NwYWNlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoIlhZWiIsICdhc2NpaScpLmlzc3BhY2UoKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoIlgiLCAnYXNjaWknKS5pc3RpdGxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoIngiLCAnYXNjaWknKS5pc3RpdGxlKCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bmljb2RlKCJYWVoiLCAnYXNjaWknKS5pc3VwcGVyKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoInh5eiIsICdhc2NpaScpLmlzdXBwZXIoKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHVuaWNvZGUoInh5eiIsICdhc2NpaScpLnN0YXJ0c3dpdGgodW5pY29kZSgieCIsICdhc2NpaScpKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModW5pY29kZSgieHl6IiwgJ2FzY2lpJykuc3RhcnRzd2l0aCh1bmljb2RlKCJ6IiwgJ2FzY2lpJykpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2Jvb2xlYW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSAmIDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShUcnVlICYgMSwgYm9vbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlICYgVHJ1ZSwgVHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUgfCAxLCAxKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoVHJ1ZSB8IDEsIGJvb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSB8IFRydWUsIFRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlIF4gMSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKFRydWUgXiAxLCBib29sKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUgXiBUcnVlLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2ZpbGVjbG9zZWQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZi5jbG9zZWQsIEZhbHNlKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGYuY2xvc2VkLCBUcnVlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF90eXBlcyhzZWxmKToKKyAgICAgICAgIyB0eXBlcyBhcmUgYWx3YXlzIHRydWUuCisgICAgICAgIGZvciB0IGluIFtib29sLCBjb21wbGV4LCBkaWN0LCBmaWxlLCBmbG9hdCwgaW50LCBsaXN0LCBsb25nLCBvYmplY3QsCisgICAgICAgICAgICAgICAgICBzZXQsIHN0ciwgdHVwbGUsIHR5cGVdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKHQpLCBUcnVlKQorCisgICAgZGVmIHRlc3Rfb3BlcmF0b3Ioc2VsZik6CisgICAgICAgIGltcG9ydCBvcGVyYXRvcgorICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLnRydXRoKDApLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci50cnV0aCgxKSwgVHJ1ZSkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5pc0NhbGxhYmxlKDApLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IuaXNDYWxsYWJsZShsZW4pLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmlzTnVtYmVyVHlwZShOb25lKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IuaXNOdW1iZXJUeXBlKDApLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLm5vdF8oMSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLm5vdF8oMCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoMCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmlzU2VxdWVuY2VUeXBlKFtdKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5jb250YWlucyhbXSwgMSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmNvbnRhaW5zKFsxXSwgMSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IuaXNNYXBwaW5nVHlwZSgxKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IuaXNNYXBwaW5nVHlwZSh7fSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IubHQoMCwgMCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmx0KDAsIDEpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmlzXyhUcnVlLCBUcnVlKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5pc18oVHJ1ZSwgRmFsc2UpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5pc19ub3QoVHJ1ZSwgVHJ1ZSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLmlzX25vdChUcnVlLCBGYWxzZSksIFRydWUpCisKKyAgICBkZWYgdGVzdF9tYXJzaGFsKHNlbGYpOgorICAgICAgICBpbXBvcnQgbWFyc2hhbAorICAgICAgICBzZWxmLmFzc2VydElzKG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyhUcnVlKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKEZhbHNlKSksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBpbXBvcnQgcGlja2xlCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhUcnVlKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhGYWxzZSkpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKFRydWUsIFRydWUpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKEZhbHNlLCBUcnVlKSksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfY3BpY2tsZShzZWxmKToKKyAgICAgICAgaW1wb3J0IGNQaWNrbGUKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjUGlja2xlLmxvYWRzKGNQaWNrbGUuZHVtcHMoVHJ1ZSkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKGNQaWNrbGUubG9hZHMoY1BpY2tsZS5kdW1wcyhGYWxzZSkpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjUGlja2xlLmxvYWRzKGNQaWNrbGUuZHVtcHMoVHJ1ZSwgVHJ1ZSkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKGNQaWNrbGUubG9hZHMoY1BpY2tsZS5kdW1wcyhGYWxzZSwgVHJ1ZSkpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X21peGVkcGlja2xlKHNlbGYpOgorICAgICAgICBpbXBvcnQgcGlja2xlLCBjUGlja2xlCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocGlja2xlLmxvYWRzKGNQaWNrbGUuZHVtcHMoVHJ1ZSkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHBpY2tsZS5sb2FkcyhjUGlja2xlLmR1bXBzKEZhbHNlKSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKHBpY2tsZS5sb2FkcyhjUGlja2xlLmR1bXBzKFRydWUsIFRydWUpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwaWNrbGUubG9hZHMoY1BpY2tsZS5kdW1wcyhGYWxzZSwgVHJ1ZSkpLCBGYWxzZSkKKworICAgICAgICBzZWxmLmFzc2VydElzKGNQaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKFRydWUpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjUGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhGYWxzZSkpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjUGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhUcnVlLCBUcnVlKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY1BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoRmFsc2UsIFRydWUpKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9waWNrbGV2YWx1ZXMoc2VsZik6CisgICAgICAgIGltcG9ydCBwaWNrbGUsIGNQaWNrbGUKKworICAgICAgICAjIFRlc3QgZm9yIHNwZWNpZmljIGJhY2t3YXJkcy1jb21wYXRpYmxlIHBpY2tsZSB2YWx1ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaWNrbGUuZHVtcHMoVHJ1ZSksICJJMDFcbi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpY2tsZS5kdW1wcyhGYWxzZSksICJJMDBcbi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNQaWNrbGUuZHVtcHMoVHJ1ZSksICJJMDFcbi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNQaWNrbGUuZHVtcHMoRmFsc2UpLCAiSTAwXG4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaWNrbGUuZHVtcHMoVHJ1ZSwgVHJ1ZSksICJJMDFcbi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpY2tsZS5kdW1wcyhGYWxzZSwgVHJ1ZSksICJJMDBcbi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNQaWNrbGUuZHVtcHMoVHJ1ZSwgVHJ1ZSksICJJMDFcbi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNQaWNrbGUuZHVtcHMoRmFsc2UsIFRydWUpLCAiSTAwXG4uIikKKworICAgIGRlZiB0ZXN0X2NvbnZlcnRfdG9fYm9vbChzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBUeXBlRXJyb3Igb2NjdXJzIHdoZW4gYmFkIHRoaW5ncyBhcmUgcmV0dXJuZWQKKyAgICAgICAgIyBmcm9tIF9fbm9uemVyb19fKCkuICBUaGlzIGlzbid0IHJlYWxseSBhIGJvb2wgdGVzdCwgYnV0CisgICAgICAgICMgaXQncyByZWxhdGVkLgorICAgICAgICBjaGVjayA9IGxhbWJkYSBvOiBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJvb2wsIG8pCisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIGNoZWNrKEZvbygpKQorCisgICAgICAgIGNsYXNzIEJhcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiWWVzIgorICAgICAgICBjaGVjayhCYXIoKSkKKworICAgICAgICBjbGFzcyBCYXooaW50KToKKyAgICAgICAgICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICBjaGVjayhCYXooKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChCb29sVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYnNkZGIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9ic2RkYi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMWVlMGExCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYnNkZGIucHkKQEAgLTAsMCArMSwzNTcgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyIiIlRlc3Qgc2NyaXB0IGZvciB0aGUgYnNkZGIgQyBtb2R1bGUgYnkgUm9nZXIgRS4gTWFzc2UKKyAgIEFkYXB0ZWQgdG8gdW5pdHRlc3QgZm9ybWF0IGFuZCBleHBhbmRlZCBzY29wZSBieSBSYXltb25kIEhldHRpbmdlcgorIiIiCitpbXBvcnQgb3MsIHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisjIFNraXAgdGVzdCBpZiBfYnNkZGIgd2Fzbid0IGJ1aWx0LgordGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ19ic2RkYicpCisKK2JzZGRiID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2JzZGRiJywgZGVwcmVjYXRlZD1UcnVlKQorIyBKdXN0IHNvIHdlIGtub3cgaXQncyBpbXBvcnRlZDoKK3Rlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdkYmhhc2gnLCBkZXByZWNhdGVkPVRydWUpCisKKworY2xhc3MgVGVzdEJTRERCKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBvcGVuZmxhZyA9ICdjJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmYgPSBzZWxmLm9wZW5tZXRob2RbMF0oc2VsZi5mbmFtZSwgc2VsZi5vcGVuZmxhZywgY2FjaGVzaXplPTMyNzY4KQorICAgICAgICBzZWxmLmQgPSBkaWN0KHE9J0d1aWRvJywgdz0ndmFuJywgZT0nUm9zc3VtJywgcj0naW52ZW50ZWQnLCB0PSdQeXRob24nLCB5PScnKQorICAgICAgICBmb3IgaywgdiBpbiBzZWxmLmQuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmZba10gPSB2CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZi5zeW5jKCkKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgaWYgc2VsZi5mbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLmZuYW1lKQorICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgorICAgICAgICBmb3IgaywgdiBpbiBzZWxmLmQuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZltrXSwgdikKKworICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5mKSwgbGVuKHNlbGYuZCkpCisKKyAgICBkZWYgdGVzdF9jaGFuZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuZlsnciddID0gJ2Rpc2NvdmVyZWQnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mWydyJ10sICdkaXNjb3ZlcmVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigncicsIHNlbGYuZi5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2Rpc2NvdmVyZWQnLCBzZWxmLmYudmFsdWVzKCkpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9hbmRfcmVvcGVuKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmZuYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAjIGlmIHdlJ3JlIHVzaW5nIGFuIGluLW1lbW9yeSBvbmx5IGRiLCB3ZSBjYW4ndCByZW9wZW4gaXQKKyAgICAgICAgICAgICMgc28gZmluaXNoIGhlcmUuCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgc2VsZi5mID0gc2VsZi5vcGVubWV0aG9kWzBdKHNlbGYuZm5hbWUsICd3JykKKyAgICAgICAgZm9yIGssIHYgaW4gc2VsZi5kLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZba10sIHYpCisKKyAgICBkZWYgYXNzZXJ0U2V0RXF1YWxzKHNlbGYsIHNlcW4xLCBzZXFuMik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlcW4xKSwgc2V0KHNlcW4yKSkKKworICAgIGRlZiB0ZXN0X21hcHBpbmdfaXRlcmF0aW9uX21ldGhvZHMoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmYKKyAgICAgICAgZCA9IHNlbGYuZAorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFscyhkLCBmKQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFscyhkLmtleXMoKSwgZi5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWxzKGQudmFsdWVzKCksIGYudmFsdWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWxzKGQuaXRlbXMoKSwgZi5pdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFscyhkLml0ZXJrZXlzKCksIGYuaXRlcmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbHMoZC5pdGVydmFsdWVzKCksIGYuaXRlcnZhbHVlcygpKQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFscyhkLml0ZXJpdGVtcygpLCBmLml0ZXJpdGVtcygpKQorCisgICAgZGVmIHRlc3RfaXRlcl93aGlsZV9tb2RpZnlpbmdfdmFsdWVzKHNlbGYpOgorICAgICAgICBkaSA9IGl0ZXIoc2VsZi5kKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGtleSA9IGRpLm5leHQoKQorICAgICAgICAgICAgICAgIHNlbGYuZFtrZXldID0gJ21vZGlmaWVkICcra2V5CisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgaXQgc2hvdWxkIGJlaGF2ZSB0aGUgc2FtZSBhcyBhIGRpY3QuICBtb2RpZnlpbmcgdmFsdWVzCisgICAgICAgICMgb2YgZXhpc3Rpbmcga2V5cyBzaG91bGQgbm90IGJyZWFrIGl0ZXJhdGlvbi4gIChhZGRpbmcKKyAgICAgICAgIyBvciByZW1vdmluZyBrZXlzIHNob3VsZCkKKyAgICAgICAgbG9vcHNfbGVmdCA9IGxlbihzZWxmLmYpCisgICAgICAgIGZpID0gaXRlcihzZWxmLmYpCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAga2V5ID0gZmkubmV4dCgpCisgICAgICAgICAgICAgICAgc2VsZi5mW2tleV0gPSAnbW9kaWZpZWQgJytrZXkKKyAgICAgICAgICAgICAgICBsb29wc19sZWZ0IC09IDEKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9vcHNfbGVmdCwgMCkKKworICAgICAgICBzZWxmLnRlc3RfbWFwcGluZ19pdGVyYXRpb25fbWV0aG9kcygpCisKKyAgICBkZWYgdGVzdF9pdGVyX2Fib3J0X29uX2NoYW5nZWRfc2l6ZShzZWxmKToKKyAgICAgICAgZGVmIERpY3RJdGVyQWJvcnQoKToKKyAgICAgICAgICAgIGRpID0gaXRlcihzZWxmLmQpCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGkubmV4dCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZFsnbmV3a2V5J10gPSAnU1BBTScKKyAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBEaWN0SXRlckFib3J0KQorCisgICAgICAgIGRlZiBEYkl0ZXJBYm9ydCgpOgorICAgICAgICAgICAgZmkgPSBpdGVyKHNlbGYuZikKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmaS5uZXh0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mWyduZXdrZXknXSA9ICdTUEFNJworICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIERiSXRlckFib3J0KQorCisgICAgZGVmIHRlc3RfaXRlcml0ZW1zX2Fib3J0X29uX2NoYW5nZWRfc2l6ZShzZWxmKToKKyAgICAgICAgZGVmIERpY3RJdGVyaXRlbXNBYm9ydCgpOgorICAgICAgICAgICAgZGkgPSBzZWxmLmQuaXRlcml0ZW1zKCkKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkaS5uZXh0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kWyduZXdrZXknXSA9ICdTUEFNJworICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIERpY3RJdGVyaXRlbXNBYm9ydCkKKworICAgICAgICBkZWYgRGJJdGVyaXRlbXNBYm9ydCgpOgorICAgICAgICAgICAgZmkgPSBzZWxmLmYuaXRlcml0ZW1zKCkKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBrZXksIHZhbHVlID0gZmkubmV4dCgpCisgICAgICAgICAgICAgICAgICAgIGRlbCBzZWxmLmZba2V5XQorICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIERiSXRlcml0ZW1zQWJvcnQpCisKKyAgICBkZWYgdGVzdF9pdGVyaXRlbXNfd2hpbGVfbW9kaWZ5aW5nX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgZGkgPSBzZWxmLmQuaXRlcml0ZW1zKCkKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBrLCB2ID0gZGkubmV4dCgpCisgICAgICAgICAgICAgICAgc2VsZi5kW2tdID0gJ21vZGlmaWVkICcrdgorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIGl0IHNob3VsZCBiZWhhdmUgdGhlIHNhbWUgYXMgYSBkaWN0LiAgbW9kaWZ5aW5nIHZhbHVlcworICAgICAgICAjIG9mIGV4aXN0aW5nIGtleXMgc2hvdWxkIG5vdCBicmVhayBpdGVyYXRpb24uICAoYWRkaW5nCisgICAgICAgICMgb3IgcmVtb3Zpbmcga2V5cyBzaG91bGQpCisgICAgICAgIGxvb3BzX2xlZnQgPSBsZW4oc2VsZi5mKQorICAgICAgICBmaSA9IHNlbGYuZi5pdGVyaXRlbXMoKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGssIHYgPSBmaS5uZXh0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmZba10gPSAnbW9kaWZpZWQgJyt2CisgICAgICAgICAgICAgICAgbG9vcHNfbGVmdCAtPSAxCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb3BzX2xlZnQsIDApCisKKyAgICAgICAgc2VsZi50ZXN0X21hcHBpbmdfaXRlcmF0aW9uX21ldGhvZHMoKQorCisgICAgZGVmIHRlc3RfZmlyc3RfbmV4dF9sb29waW5nKHNlbGYpOgorICAgICAgICBpdGVtcyA9IFtzZWxmLmYuZmlyc3QoKV0KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEsIGxlbihzZWxmLmYpKToKKyAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChzZWxmLmYubmV4dCgpKQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFscyhpdGVtcywgc2VsZi5kLml0ZW1zKCkpCisKKyAgICBkZWYgdGVzdF9wcmV2aW91c19sYXN0X2xvb3Bpbmcoc2VsZik6CisgICAgICAgIGl0ZW1zID0gW3NlbGYuZi5sYXN0KCldCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxLCBsZW4oc2VsZi5mKSk6CisgICAgICAgICAgICBpdGVtcy5hcHBlbmQoc2VsZi5mLnByZXZpb3VzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWxzKGl0ZW1zLCBzZWxmLmQuaXRlbXMoKSkKKworICAgIGRlZiB0ZXN0X2ZpcnN0X3doaWxlX2RlbGV0aW5nKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIGJ1ZyAxNzI1ODU2CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oc2VsZi5kKSA+PSAyLCAidGVzdCByZXF1aXJlcyA+PTIgaXRlbXMiKQorICAgICAgICBmb3IgXyBpbiBzZWxmLmQ6CisgICAgICAgICAgICBrZXkgPSBzZWxmLmYuZmlyc3QoKVswXQorICAgICAgICAgICAgZGVsIHNlbGYuZltrZXldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHNlbGYuZi5pdGVtcygpLCAiZXhwZWN0ZWQgZW1wdHkgZGIgYWZ0ZXIgdGVzdCIpCisKKyAgICBkZWYgdGVzdF9sYXN0X3doaWxlX2RlbGV0aW5nKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIGJ1ZyAxNzI1ODU2J3MgZXZpbCB0d2luCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oc2VsZi5kKSA+PSAyLCAidGVzdCByZXF1aXJlcyA+PTIgaXRlbXMiKQorICAgICAgICBmb3IgXyBpbiBzZWxmLmQ6CisgICAgICAgICAgICBrZXkgPSBzZWxmLmYubGFzdCgpWzBdCisgICAgICAgICAgICBkZWwgc2VsZi5mW2tleV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgc2VsZi5mLml0ZW1zKCksICJleHBlY3RlZCBlbXB0eSBkYiBhZnRlciB0ZXN0IikKKworICAgIGRlZiB0ZXN0X3NldF9sb2NhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuc2V0X2xvY2F0aW9uKCdlJyksICgnZScsIHNlbGYuZFsnZSddKSkKKworICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgorICAgICAgICBmb3IgayBpbiBzZWxmLmQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGssIHNlbGYuZikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbm90IGhlcmUnLCBzZWxmLmYpCisKKyAgICBkZWYgdGVzdF9oYXNfa2V5KHNlbGYpOgorICAgICAgICBmb3IgayBpbiBzZWxmLmQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5mLmhhc19rZXkoaykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgc2VsZi5mLmhhc19rZXkoJ25vdCBoZXJlJykpCisKKyAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKKyAgICAgICAgc2VsZi5mLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5mKSwgMCkKKworICAgIGRlZiB0ZXN0X19ub19kZWFkbG9ja19maXJzdChzZWxmLCBkZWJ1Zz0wKToKKyAgICAgICAgIyBkbyB0aGlzIHNvIHRoYXQgdGVzdGVycyBjYW4gc2VlIHdoYXQgZnVuY3Rpb24gd2UncmUgaW4gaW4KKyAgICAgICAgIyB2ZXJib3NlIG1vZGUgd2hlbiB3ZSBkZWFkbG9jay4KKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisKKyAgICAgICAgIyBpbiBweWJzZGRiJ3MgX0RCV2l0aEN1cnNvciB0aGlzIGNhdXNlcyBhbiBpbnRlcm5hbCBEQkN1cnNvcgorICAgICAgICAjIG9iamVjdCBpcyBjcmVhdGVkLiAgT3RoZXIgdGVzdF8gbWV0aG9kcyBpbiB0aGlzIGNsYXNzIGNvdWxkCisgICAgICAgICMgaW5hZHZlcnRlbnRseSBjYXVzZSB0aGUgZGVhZGxvY2sgYnV0IGFuIGV4cGxpY2l0IHRlc3QgaXMgbmVlZGVkLgorICAgICAgICBpZiBkZWJ1ZzogcHJpbnQgIkEiCisgICAgICAgIGssdiA9IHNlbGYuZi5maXJzdCgpCisgICAgICAgIGlmIGRlYnVnOiBwcmludCAiQiIsIGsKKyAgICAgICAgc2VsZi5mW2tdID0gImRlYWRsb2NrLiAgZG8gbm90IHBhc3MgZ28uICBkbyBub3QgY29sbGVjdCAkMjAwLiIKKyAgICAgICAgaWYgZGVidWc6IHByaW50ICJDIgorICAgICAgICAjIGlmIHRoZSBic2RkYiBpbXBsZW1lbnRhdGlvbiBsZWF2ZXMgdGhlIERCQ3Vyc29yIG9wZW4gZHVyaW5nCisgICAgICAgICMgdGhlIGRhdGFiYXNlIHdyaXRlIGFuZCBsb2NraW5nK3RocmVhZGluZyBzdXBwb3J0IGlzIGVuYWJsZWQKKyAgICAgICAgIyB0aGUgY3Vyc29yJ3MgcmVhZCBsb2NrIHdpbGwgZGVhZGxvY2sgdGhlIHdyaXRlIGxvY2sgcmVxdWVzdC4uCisKKyAgICAgICAgIyB0ZXN0IHRoZSBpdGVyYXRvciBpbnRlcmZhY2UKKyAgICAgICAgaWYgVHJ1ZToKKyAgICAgICAgICAgIGlmIGRlYnVnOiBwcmludCAiRCIKKyAgICAgICAgICAgIGkgPSBzZWxmLmYuaXRlcml0ZW1zKCkKKyAgICAgICAgICAgIGssdiA9IGkubmV4dCgpCisgICAgICAgICAgICBpZiBkZWJ1ZzogcHJpbnQgIkUiCisgICAgICAgICAgICBzZWxmLmZba10gPSAicGxlYXNlIGRvbid0IGRlYWRsb2NrIgorICAgICAgICAgICAgaWYgZGVidWc6IHByaW50ICJGIgorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGssdiA9IGkubmV4dCgpCisgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBkZWJ1ZzogcHJpbnQgIkYyIgorCisgICAgICAgICAgICBpID0gaXRlcihzZWxmLmYpCisgICAgICAgICAgICBpZiBkZWJ1ZzogcHJpbnQgIkciCisgICAgICAgICAgICB3aGlsZSBpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVidWc6IHByaW50ICJIIgorICAgICAgICAgICAgICAgICAgICBrID0gaS5uZXh0KCkKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVidWc6IHByaW50ICJJIgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZba10gPSAiZGVhZGxvY2tzLXItdXMiCisgICAgICAgICAgICAgICAgICAgIGlmIGRlYnVnOiBwcmludCAiSiIKKyAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgaSA9IE5vbmUKKyAgICAgICAgICAgIGlmIGRlYnVnOiBwcmludCAiSyIKKworICAgICAgICAjIHRlc3QgdGhlIGxlZ2FjeSBjdXJzb3IgaW50ZXJmYWNlIG1peGVkIHdpdGggd3JpdGVzCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5mLmZpcnN0KClbMF0sIHNlbGYuZCkKKyAgICAgICAgayA9IHNlbGYuZi5uZXh0KClbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBzZWxmLmQpCisgICAgICAgIHNlbGYuZltrXSA9ICJiZSBnb25lIHdpdGggeWUgZGVhZGxvY2tzIgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5mW2tdLCAiYmUgZ29uZSB3aXRoIHllIGRlYWRsb2NrcyIpCisKKyAgICBkZWYgdGVzdF9mb3JfY3Vyc29yX21lbWxlYWsoc2VsZik6CisgICAgICAgICMgZG8gdGhlIGJzZGRiLl9EQldpdGhDdXJzb3IgaXRlcmF0b3IgaW50ZXJuYWxzIGxlYWsgY3Vyc29ycz8KKyAgICAgICAgbmMxID0gbGVuKHNlbGYuZi5fY3Vyc29yX3JlZnMpCisgICAgICAgICMgY3JlYXRlIGl0ZXJhdG9yCisgICAgICAgIGkgPSBzZWxmLmYuaXRlcml0ZW1zKCkKKyAgICAgICAgbmMyID0gbGVuKHNlbGYuZi5fY3Vyc29yX3JlZnMpCisgICAgICAgICMgdXNlIHRoZSBpdGVyYXRvciAoc2hvdWxkIHJ1biB0byB0aGUgZmlyc3QgeWllbGQsIGNyZWF0aW5nIHRoZSBjdXJzb3IpCisgICAgICAgIGssIHYgPSBpLm5leHQoKQorICAgICAgICBuYzMgPSBsZW4oc2VsZi5mLl9jdXJzb3JfcmVmcykKKyAgICAgICAgIyBkZXN0cm95IHRoZSBpdGVyYXRvcjsgdGhpcyBzaG91bGQgY2F1c2UgdGhlIHdlYWtyZWYgY2FsbGJhY2sKKyAgICAgICAgIyB0byByZW1vdmUgdGhlIGN1cnNvciBvYmplY3QgZnJvbSBzZWxmLmYuX2N1cnNvcl9yZWZzCisgICAgICAgIGRlbCBpCisgICAgICAgIG5jNCA9IGxlbihzZWxmLmYuX2N1cnNvcl9yZWZzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmMxLCBuYzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmMxLCBuYzQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuYzMgPT0gbmMxKzEpCisKKyAgICBkZWYgdGVzdF9wb3BpdGVtKHNlbGYpOgorICAgICAgICBrLCB2ID0gc2VsZi5mLnBvcGl0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydEluKGssIHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih2LCBzZWxmLmQudmFsdWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oaywgc2VsZi5mKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmQpLTEsIGxlbihzZWxmLmYpKQorCisgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgorICAgICAgICBrID0gJ3cnCisgICAgICAgIHYgPSBzZWxmLmYucG9wKGspCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgc2VsZi5kW2tdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGssIHNlbGYuZikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih2LCBzZWxmLmYudmFsdWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuZCktMSwgbGVuKHNlbGYuZikpCisKKyAgICBkZWYgdGVzdF9nZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLmdldCgnTm90SGVyZScpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5nZXQoJ05vdEhlcmUnLCAnRGVmYXVsdCcpLCAnRGVmYXVsdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLmdldCgncScsICdEZWZhdWx0JyksIHNlbGYuZFsncSddKQorCisgICAgZGVmIHRlc3Rfc2V0ZGVmYXVsdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuc2V0ZGVmYXVsdCgnbmV3JywgJ2RvZycpLCAnZG9nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuc2V0ZGVmYXVsdCgncicsICdjYXQnKSwgc2VsZi5kWydyJ10pCisKKyAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgICAgIG5ldyA9IGRpY3QoeT0nbGlmZScsIHU9J29mJywgaT0nYnJpYW4nKQorICAgICAgICBzZWxmLmYudXBkYXRlKG5ldykKKyAgICAgICAgc2VsZi5kLnVwZGF0ZShuZXcpCisgICAgICAgIGZvciBrLCB2IGluIHNlbGYuZC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mW2tdLCB2KQorCisgICAgZGVmIHRlc3Rfa2V5b3JkZXJpbmcoc2VsZik6CisgICAgICAgIGlmIHNlbGYub3Blbm1ldGhvZFswXSBpcyBub3QgYnNkZGIuYnRvcGVuOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGtleXMgPSBzZWxmLmQua2V5cygpCisgICAgICAgIGtleXMuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLmZpcnN0KClbMF0sIGtleXNbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLm5leHQoKVswXSwga2V5c1sxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYubGFzdCgpWzBdLCBrZXlzWy0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYucHJldmlvdXMoKVswXSwga2V5c1stMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzZWxmLmYpLCBrZXlzKQorCitjbGFzcyBUZXN0QlRyZWUoVGVzdEJTRERCKToKKyAgICBmbmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICBvcGVubWV0aG9kID0gW2JzZGRiLmJ0b3Blbl0KKworY2xhc3MgVGVzdEJUcmVlX0luTWVtb3J5KFRlc3RCU0REQik6CisgICAgZm5hbWUgPSBOb25lCisgICAgb3Blbm1ldGhvZCA9IFtic2RkYi5idG9wZW5dCisKK2NsYXNzIFRlc3RCVHJlZV9Jbk1lbW9yeV9UcnVuY2F0ZShUZXN0QlNEREIpOgorICAgIGZuYW1lID0gTm9uZQorICAgIG9wZW5mbGFnID0gJ24nCisgICAgb3Blbm1ldGhvZCA9IFtic2RkYi5idG9wZW5dCisKK2NsYXNzIFRlc3RIYXNoVGFibGUoVGVzdEJTRERCKToKKyAgICBmbmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICBvcGVubWV0aG9kID0gW2JzZGRiLmhhc2hvcGVuXQorCitjbGFzcyBUZXN0SGFzaFRhYmxlX0luTWVtb3J5KFRlc3RCU0REQik6CisgICAgZm5hbWUgPSBOb25lCisgICAgb3Blbm1ldGhvZCA9IFtic2RkYi5oYXNob3Blbl0KKworIyMgICAgICAgICAjIChic2RkYi5ybm9wZW4sJ1JlY29yZCBOdW1iZXJzJyksICdwdXQnIGZvciBSRUNOTyBmb3IgYnNkZGIgMS44NQorIyMgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJzIGJyb2tlbi4uLiBhdCBsZWFzdCBvbgorIyMgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2xhcmlzIEludGVsIC0gcm1hc3NlIDEvOTcKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIFRlc3RCVHJlZSwKKyAgICAgICAgVGVzdEhhc2hUYWJsZSwKKyAgICAgICAgVGVzdEJUcmVlX0luTWVtb3J5LAorICAgICAgICBUZXN0SGFzaFRhYmxlX0luTWVtb3J5LAorICAgICAgICBUZXN0QlRyZWVfSW5NZW1vcnlfVHJ1bmNhdGUsCisgICAgKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9ic2RkYjE4NS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2JzZGRiMTg1LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MTAyYzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9ic2RkYjE4NS5weQpAQCAtMCwwICsxLDQzIEBACisiIiJUZXN0cyBmb3IgdGhlIGJzZGRiMTg1IG1vZHVsZS4KKworVGhlIGZpbGUgMTg1dGVzdC5kYiBmb3VuZCBpbiBMaWIvdGVzdC8gaXMgZm9yIHRlc3RpbmcgcHVycG9zZXMgd2l0aCB0aGlzCit0ZXN0aW5nIHN1aXRlLgorCisiIiIKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgZmluZGZpbGUsIGltcG9ydF9tb2R1bGUKK2ltcG9ydCB1bml0dGVzdAorYnNkZGIxODUgPSBpbXBvcnRfbW9kdWxlKCdic2RkYjE4NScsIGRlcHJlY2F0ZWQ9VHJ1ZSkKK2ltcG9ydCBhbnlkYm0KK2ltcG9ydCB3aGljaGRiCitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHNodXRpbAorCitjbGFzcyBCc2RkYjE4NVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X29wZW5fZXhpc3RpbmdfaGFzaChzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgd2UgY2FuIG9wZW4gYSBmaWxlIGtub3duIHRvIGJlIGEgaGFzaCB2MiBmaWxlCisgICAgICAgIGRiID0gYnNkZGIxODUuaGFzaG9wZW4oZmluZGZpbGUoIjE4NXRlc3QuZGIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYlsiMSJdLCAiMSIpCisgICAgICAgIGRiLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3doaWNoZGIoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgd2hpY2hkYiBjb3JyZWN0bHkgc25pZmZzIHRoZSBrbm93biBoYXNoIHYyIGZpbGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aGljaGRiLndoaWNoZGIoZmluZGZpbGUoIjE4NXRlc3QuZGIiKSksICJic2RkYjE4NSIpCisKKyAgICBkZWYgdGVzdF9hbnlkYm1fY3JlYXRlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IGFueWRibS5vcGVuIGRvZXMgKm5vdCogY3JlYXRlIGEgYnNkZGIxODUgZmlsZQorICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGJmaWxlID0gb3MucGF0aC5qb2luKHRtcGRpciwgImZvby5kYiIpCisgICAgICAgICAgICBhbnlkYm0ub3BlbihkYmZpbGUsICJjIikuY2xvc2UoKQorICAgICAgICAgICAgZnR5cGUgPSB3aGljaGRiLndoaWNoZGIoZGJmaWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmdHlwZSwgImJzZGRiMTg1IikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodG1wZGlyKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEJzZGRiMTg1VGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2JzZGRiMy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2JzZGRiMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTkxNDViCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYnNkZGIzLnB5CkBAIC0wLDAgKzEsODEgQEAKKyMgVGVzdCBkcml2ZXIgZm9yIGJzZGRiIHBhY2thZ2UuCisiIiIKK1J1biBhbGwgdGVzdCBjYXNlcy4KKyIiIgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKKworIyBTa2lwIHRlc3QgaWYgX2JzZGRiIG1vZHVsZSB3YXMgbm90IGJ1aWx0LgoraW1wb3J0X21vZHVsZSgnX2JzZGRiJykKKyMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKK2ltcG9ydF9tb2R1bGUoJ2JzZGRiJywgZGVwcmVjYXRlZD1UcnVlKQorCisjIFdoZW4gcnVubmluZyBhcyBhIHNjcmlwdCBpbnN0ZWFkIG9mIHdpdGhpbiB0aGUgcmVncnRlc3QgZnJhbWV3b3JrLCBza2lwIHRoZQorIyByZXF1aXJlcyB0ZXN0LCBzaW5jZSBpdCdzIG9idmlvdXMgd2Ugd2FudCB0byBydW4gdGhlbS4KK2lmIF9fbmFtZV9fICE9ICdfX21haW5fXyc6CisgICAgcmVxdWlyZXMoJ2JzZGRiJykKKwordmVyYm9zZSA9IEZhbHNlCitpZiAndmVyYm9zZScgaW4gc3lzLmFyZ3Y6CisgICAgdmVyYm9zZSA9IFRydWUKKyAgICBzeXMuYXJndi5yZW1vdmUoJ3ZlcmJvc2UnKQorCitpZiAnc2lsZW50JyBpbiBzeXMuYXJndjogICMgdGFrZSBjYXJlIG9mIG9sZCBmbGFnLCBqdXN0IGluIGNhc2UKKyAgICB2ZXJib3NlID0gRmFsc2UKKyAgICBzeXMuYXJndi5yZW1vdmUoJ3NpbGVudCcpCisKKworY2xhc3MgVGltaW5nQ2hlY2sodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVGhpcyBjbGFzcyBpcyBub3QgYSByZWFsIHRlc3QuICBJdHMgcHVycG9zZSBpcyB0byBwcmludCBhIG1lc3NhZ2UKKyAgICBwZXJpb2RpY2FsbHkgd2hlbiB0aGUgdGVzdCBydW5zIHNsb3dseS4gIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSBidWlsZGJvdHMKKyAgICBmcm9tIHRpbWluZyBvdXQgb24gc2xvdyBtYWNoaW5lcy4iIiIKKworICAgICMgSG93IG11Y2ggdGltZSBpbiBzZWNvbmRzIGJlZm9yZSBwcmludGluZyBhICdTdGlsbCB3b3JraW5nJyBtZXNzYWdlLgorICAgICMgU2luY2UgdGhpcyBpcyBydW4gYXQgbW9zdCBvbmNlIGJldHdlZW4gZWFjaCB0ZXN0IG1vZHVsZSwgdXNlIGEgc21hbGxlcgorICAgICMgaW50ZXJ2YWwgdGhhbiBvdGhlciB0ZXN0cy4KKyAgICBfUFJJTlRfV09SS0lOR19NU0dfSU5URVJWQUwgPSA0ICogNjAKKworICAgICMgbmV4dF90aW1lIGlzIHVzZWQgYXMgYSBnbG9iYWwgdmFyaWFibGUgdGhhdCBzdXJ2aXZlcyBlYWNoIGluc3RhbmNlLgorICAgICMgVGhpcyBpcyBuZWNlc3Nhcnkgc2luY2UgYSBuZXcgaW5zdGFuY2Ugd2lsbCBiZSBjcmVhdGVkIGZvciBlYWNoIHRlc3QuCisgICAgbmV4dF90aW1lID0gdGltZS50aW1lKCkgKyBfUFJJTlRfV09SS0lOR19NU0dfSU5URVJWQUwKKworICAgIGRlZiB0ZXN0Q2hlY2tFbGFwc2VkVGltZShzZWxmKToKKyAgICAgICAgIyBQcmludCBzdGlsbCB3b3JraW5nIG1lc3NhZ2Ugc2luY2UgdGhlc2UgdGVzdHMgY2FuIGJlIHJlYWxseSBzbG93LgorICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICBpZiBzZWxmLm5leHRfdGltZSA8PSBub3c6CisgICAgICAgICAgICBUaW1pbmdDaGVjay5uZXh0X3RpbWUgPSBub3cgKyBzZWxmLl9QUklOVF9XT1JLSU5HX01TR19JTlRFUlZBTAorICAgICAgICAgICAgc3lzLl9fc3Rkb3V0X18ud3JpdGUoJyAgdGVzdF9ic2RkYjMgc3RpbGwgd29ya2luZywgYmUgcGF0aWVudC4uLlxuJykKKyAgICAgICAgICAgIHN5cy5fX3N0ZG91dF9fLmZsdXNoKCkKKworCisjIEZvciBpbnZvY2F0aW9uIHRocm91Z2ggcmVncnRlc3QKK2RlZiB0ZXN0X21haW4oKToKKyAgICBmcm9tIGJzZGRiIGltcG9ydCBkYgorICAgIGZyb20gYnNkZGIudGVzdCBpbXBvcnQgdGVzdF9hbGwKKyAgICB0ZXN0X2FsbC5zZXRfdGVzdF9wYXRoX3ByZWZpeChvcy5wYXRoLmpvaW4odGVtcGZpbGUuZ2V0dGVtcGRpcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3otdGVzdF9ic2RkYjMtJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmdldHBpZCgpKSkKKyAgICAjIFBsZWFzZSBsZWF2ZSB0aGlzIHByaW50IGluLCBoYXZpbmcgdGhpcyBzaG93IHVwIGluIHRoZSBidWlsZGJvdHMKKyAgICAjIG1ha2VzIGRpYWdub3NpbmcgcHJvYmxlbXMgYSBsb3QgZWFzaWVyLgorICAgIHByaW50ID4+c3lzLnN0ZGVyciwgZGIuREJfVkVSU0lPTl9TVFJJTkcKKyAgICBwcmludCA+PnN5cy5zdGRlcnIsICdUZXN0IHBhdGggcHJlZml4OiAnLCB0ZXN0X2FsbC5nZXRfdGVzdF9wYXRoX3ByZWZpeCgpCisgICAgdHJ5OgorICAgICAgICBydW5fdW5pdHRlc3QodGVzdF9hbGwuc3VpdGUobW9kdWxlX3ByZWZpeD0nYnNkZGIudGVzdC4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltaW5nX2NoZWNrPVRpbWluZ0NoZWNrKSkKKyAgICBmaW5hbGx5OgorICAgICAgICAjIFRoZSBvbmx5IHJlYXNvbiB0byByZW1vdmUgZGJfaG9tZSBpcyBpbiBjYXNlIGlmIHRoZXJlIGlzIGFuIG9sZAorICAgICAgICAjIG9uZSBseWluZyBhcm91bmQuICBUaGlzIG1pZ2h0IGJlIGJ5IGEgZGlmZmVyZW50IHVzZXIsIHNvIGp1c3QKKyAgICAgICAgIyBpZ25vcmUgZXJyb3JzLiAgV2Ugc2hvdWxkIGFsd2F5cyBtYWtlIGEgdW5pcXVlIG5hbWUgbm93LgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2FsbC5yZW1vdmVfdGVzdF9wYXRoX2RpcmVjdG9yeSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9idWZmZXIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9idWZmZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM4ZTYzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2J1ZmZlci5weQpAQCAtMCwwICsxLDM5IEBACisiIiJVbml0IHRlc3RzIGZvciBidWZmZXIgb2JqZWN0cy4KKworRm9yIG5vdywgdGVzdHMganVzdCBuZXcgb3IgY2hhbmdlZCBmdW5jdGlvbmFsaXR5LgorCisiIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBCdWZmZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9leHRlbmRlZF9nZXRzbGljZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGV4dGVuZGVkIHNsaWNpbmcgYnkgY29tcGFyaW5nIHdpdGggbGlzdCBzbGljaW5nLgorICAgICAgICBzID0gIiIuam9pbihjaHIoYykgZm9yIGMgaW4gbGlzdChyYW5nZSgyNTUsIC0xLCAtMSkpKQorICAgICAgICBiID0gYnVmZmVyKHMpCisgICAgICAgIGluZGljZXMgPSAoMCwgTm9uZSwgMSwgMywgMTksIDMwMCwgLTEsIC0yLCAtMzEsIC0zMDApCisgICAgICAgIGZvciBzdGFydCBpbiBpbmRpY2VzOgorICAgICAgICAgICAgZm9yIHN0b3AgaW4gaW5kaWNlczoKKyAgICAgICAgICAgICAgICAjIFNraXAgc3RlcCAwIChpbnZhbGlkKQorICAgICAgICAgICAgICAgIGZvciBzdGVwIGluIGluZGljZXNbMTpdOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbc3RhcnQ6c3RvcDpzdGVwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzW3N0YXJ0OnN0b3A6c3RlcF0pCisKKyAgICBkZWYgdGVzdF9uZXdidWZmZXJfaW50ZXJmYWNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgYnVmZmVyIG9iamVjdCBoYXMgdGhlIG5ldyBidWZmZXIgaW50ZXJmYWNlCisgICAgICAgICMgYXMgdXNlZCBieSB0aGUgbWVtb3J5dmlldyBvYmplY3QKKyAgICAgICAgcyA9ICIiLmpvaW4oY2hyKGMpIGZvciBjIGluIGxpc3QocmFuZ2UoMjU1LCAtMSwgLTEpKSkKKyAgICAgICAgYiA9IGJ1ZmZlcihzKQorICAgICAgICBtID0gbWVtb3J5dmlldyhiKSAjIFNob3VsZCBub3QgcmFpc2UgYW4gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS50b2J5dGVzKCksIHMpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKCJidWZmZXIuLiBub3Qgc3VwcG9ydGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChCdWZmZXJUZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYnVmaW8ucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9idWZpby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhiMWUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYnVmaW8ucHkKQEAgLTAsMCArMSw3OSBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CisKK2ltcG9ydCBpbyAjIEMgaW1wbGVtZW50YXRpb24uCitpbXBvcnQgX3B5aW8gYXMgcHlpbyAjIFB5dGhvbiBpbXBsZW1lbnRhdGlvbi4KKworIyBTaW1wbGUgdGVzdCB0byBlbnN1cmUgdGhhdCBvcHRpbWl6YXRpb25zIGluIHRoZSBJTyBsaWJyYXJ5IGRlbGl2ZXIgdGhlCisjIGV4cGVjdGVkIHJlc3VsdHMuICBGb3IgYmVzdCB0ZXN0aW5nLCBydW4gdGhpcyB1bmRlciBhIGRlYnVnLWJ1aWxkIFB5dGhvbiB0b28KKyMgKHRvIGV4ZXJjaXNlIGFzc2VydHMgaW4gdGhlIEMgY29kZSkuCisKK2xlbmd0aHMgPSBsaXN0KHJhbmdlKDEsIDI1NykpICsgWzUxMiwgMTAwMCwgMTAyNCwgMjA0OCwgNDA5NiwgODE5MiwgMTAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjM4NCwgMzI3NjgsIDY1NTM2LCAxMDAwMDAwXQorCitjbGFzcyBCdWZmZXJTaXplVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRyeV9vbmUoc2VsZiwgcyk6CisgICAgICAgICMgV3JpdGUgcyArICJcbiIgKyBzIHRvIGZpbGUsIHRoZW4gb3BlbiBpdCBhbmQgZW5zdXJlIHRoYXQgc3VjY2Vzc2l2ZQorICAgICAgICAjIC5yZWFkbGluZSgpcyBkZWxpdmVyIHdoYXQgd2Ugd3JvdGUuCisKKyAgICAgICAgIyBFbnN1cmUgd2UgY2FuIG9wZW4gVEVTVEZOIGZvciB3cml0aW5nLgorICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKworICAgICAgICAjIFNpbmNlIEMgZG9lc24ndCBndWFyYW50ZWUgd2UgY2FuIHdyaXRlL3JlYWQgYXJiaXRyYXJ5IGJ5dGVzIGluIHRleHQKKyAgICAgICAgIyBmaWxlcywgdXNlIGJpbmFyeSBtb2RlLgorICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHdyaXRlIG9uY2Ugd2l0aCBcbiBhbmQgb25jZSB3aXRob3V0CisgICAgICAgICAgICBmLndyaXRlKHMpCisgICAgICAgICAgICBmLndyaXRlKGIiXG4iKQorICAgICAgICAgICAgZi53cml0ZShzKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBmID0gb3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikKKyAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgcyArIGIiXG4iKQorICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBzKQorICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBsaW5lKSAjIE11c3QgYmUgYXQgRU9GCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIGRyaXZlX29uZShzZWxmLCBwYXR0ZXJuKToKKyAgICAgICAgZm9yIGxlbmd0aCBpbiBsZW5ndGhzOgorICAgICAgICAgICAgIyBSZXBlYXQgc3RyaW5nICdwYXR0ZXJuJyBhcyBvZnRlbiBhcyBuZWVkZWQgdG8gcmVhY2ggdG90YWwgbGVuZ3RoCisgICAgICAgICAgICAjICdsZW5ndGgnLiAgVGhlbiBjYWxsIHRyeV9vbmUgd2l0aCB0aGF0IHN0cmluZywgYSBzdHJpbmcgb25lIGxhcmdlcgorICAgICAgICAgICAgIyB0aGFuIHRoYXQsIGFuZCBhIHN0cmluZyBvbmUgc21hbGxlciB0aGFuIHRoYXQuICBUcnkgdGhpcyB3aXRoIGFsbAorICAgICAgICAgICAgIyBzbWFsbCBzaXplcyBhbmQgdmFyaW91cyBwb3dlcnMgb2YgMiwgc28gd2UgZXhlcmNpc2UgYWxsIGxpa2VseQorICAgICAgICAgICAgIyBzdGRpbyBidWZmZXIgc2l6ZXMsIGFuZCAib2ZmIGJ5IG9uZSIgZXJyb3JzIG9uIGJvdGggc2lkZXMuCisgICAgICAgICAgICBxLCByID0gZGl2bW9kKGxlbmd0aCwgbGVuKHBhdHRlcm4pKQorICAgICAgICAgICAgdGVzdHN0cmluZyA9IHBhdHRlcm4gKiBxICsgcGF0dGVybls6cl0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RzdHJpbmcpLCBsZW5ndGgpCisgICAgICAgICAgICBzZWxmLnRyeV9vbmUodGVzdHN0cmluZykKKyAgICAgICAgICAgIHNlbGYudHJ5X29uZSh0ZXN0c3RyaW5nICsgYiJ4IikKKyAgICAgICAgICAgIHNlbGYudHJ5X29uZSh0ZXN0c3RyaW5nWzotMV0pCisKKyAgICBkZWYgdGVzdF9wcmltZXBhdChzZWxmKToKKyAgICAgICAgIyBBIHBhdHRlcm4gd2l0aCBwcmltZSBsZW5ndGgsIHRvIGF2b2lkIHNpbXBsZSByZWxhdGlvbnNoaXBzIHdpdGgKKyAgICAgICAgIyBzdGRpbyBidWZmZXIgc2l6ZXMuCisgICAgICAgIHNlbGYuZHJpdmVfb25lKGIiMTIzNDU2Nzg5MFwwMFwwMVwwMlwwM1wwNFwwNVwwNiIpCisKKyAgICBkZWYgdGVzdF9udWxscGF0KHNlbGYpOgorICAgICAgICBzZWxmLmRyaXZlX29uZShieXRlcygxMDAwKSkKKworCitjbGFzcyBDQnVmZmVyU2l6ZVRlc3QoQnVmZmVyU2l6ZVRlc3QpOgorICAgIG9wZW4gPSBpby5vcGVuCisKK2NsYXNzIFB5QnVmZmVyU2l6ZVRlc3QoQnVmZmVyU2l6ZVRlc3QpOgorICAgIG9wZW4gPSBzdGF0aWNtZXRob2QocHlpby5vcGVuKQorCitjbGFzcyBCdWlsdGluQnVmZmVyU2l6ZVRlc3QoQnVmZmVyU2l6ZVRlc3QpOgorICAgIG9wZW4gPSBvcGVuCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KENCdWZmZXJTaXplVGVzdCwgUHlCdWZmZXJTaXplVGVzdCwgQnVpbHRpbkJ1ZmZlclNpemVUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9idWlsdGluLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYnVpbHRpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmRlNTI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYnVpbHRpbi5weQpAQCAtMCwwICsxLDE3MTIgQEAKKyMgUHl0aG9uIHRlc3Qgc2V0IC0tIGJ1aWx0LWluIGZ1bmN0aW9ucworCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgZmNtcCwgaGF2ZV91bmljb2RlLCBURVNURk4sIHVubGluaywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX3VuaXR0ZXN0LCBjaGVja19weTNrX3dhcm5pbmdzCitpbXBvcnQgd2FybmluZ3MKK2Zyb20gb3BlcmF0b3IgaW1wb3J0IG5lZworCitpbXBvcnQgc3lzLCBjU3RyaW5nSU8sIHJhbmRvbSwgVXNlckRpY3QKKworIyBjb3VudCB0aGUgbnVtYmVyIG9mIHRlc3QgcnVucy4KKyMgdXNlZCB0byBza2lwIHJ1bm5pbmcgdGVzdF9leGVjZmlsZSgpIG11bHRpcGxlIHRpbWVzCisjIGFuZCB0byBjcmVhdGUgdW5pcXVlIHN0cmluZ3MgdG8gaW50ZXJuIGluIHRlc3RfaW50ZXJuKCkKK251bXJ1bnMgPSAwCisKK2NsYXNzIFNxdWFyZXM6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4KToKKyAgICAgICAgc2VsZi5tYXggPSBtYXgKKyAgICAgICAgc2VsZi5zb2ZhciA9IFtdCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKTogcmV0dXJuIGxlbihzZWxmLnNvZmFyKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICBpZiBub3QgMCA8PSBpIDwgc2VsZi5tYXg6IHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgbiA9IGxlbihzZWxmLnNvZmFyKQorICAgICAgICB3aGlsZSBuIDw9IGk6CisgICAgICAgICAgICBzZWxmLnNvZmFyLmFwcGVuZChuKm4pCisgICAgICAgICAgICBuICs9IDEKKyAgICAgICAgcmV0dXJuIHNlbGYuc29mYXJbaV0KKworY2xhc3MgU3RyU3F1YXJlczoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXgpOgorICAgICAgICBzZWxmLm1heCA9IG1heAorICAgICAgICBzZWxmLnNvZmFyID0gW10KKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuc29mYXIpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgIGlmIG5vdCAwIDw9IGkgPCBzZWxmLm1heDoKKyAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgbiA9IGxlbihzZWxmLnNvZmFyKQorICAgICAgICB3aGlsZSBuIDw9IGk6CisgICAgICAgICAgICBzZWxmLnNvZmFyLmFwcGVuZChzdHIobipuKSkKKyAgICAgICAgICAgIG4gKz0gMQorICAgICAgICByZXR1cm4gc2VsZi5zb2ZhcltpXQorCitjbGFzcyBCaXRCdWNrZXQ6CisgICAgZGVmIHdyaXRlKHNlbGYsIGxpbmUpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgVGVzdEZhaWxpbmdCb29sOgorICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisKK2NsYXNzIFRlc3RGYWlsaW5nSXRlcjoKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorCitjbGFzcyBCdWlsdGluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9pbXBvcnQoc2VsZik6CisgICAgICAgIF9faW1wb3J0X18oJ3N5cycpCisgICAgICAgIF9faW1wb3J0X18oJ3RpbWUnKQorICAgICAgICBfX2ltcG9ydF9fKCdzdHJpbmcnKQorICAgICAgICBfX2ltcG9ydF9fKG5hbWU9J3N5cycpCisgICAgICAgIF9faW1wb3J0X18obmFtZT0ndGltZScsIGxldmVsPTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBfX2ltcG9ydF9fLCAnc3BhbXNwYW0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9faW1wb3J0X18sIDEsIDIsIDMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9faW1wb3J0X18sICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9faW1wb3J0X18sICdzeXMnLCBuYW1lPSdzeXMnKQorCisgICAgZGVmIHRlc3RfYWJzKHNlbGYpOgorICAgICAgICAjIGludAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicygwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoMTIzNCksIDEyMzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKC0xMjM0KSwgMTIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFicygtc3lzLm1heGludC0xKSA+IDApCisgICAgICAgICMgZmxvYXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoMC4wKSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicygzLjE0KSwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoLTMuMTQpLCAzLjE0KQorICAgICAgICAjIGxvbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoMEwpLCAwTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoMTIzNEwpLCAxMjM0TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoLTEyMzRMKSwgMTIzNEwpCisgICAgICAgICMgc3RyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYWJzLCAnYScpCisgICAgICAgICMgYm9vbAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhUcnVlKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoRmFsc2UpLCAwKQorICAgICAgICAjIG90aGVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYWJzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFicywgTm9uZSkKKyAgICAgICAgY2xhc3MgQWJzQ2xhc3Mob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2Fic19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAtNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhBYnNDbGFzcygpKSwgLTUpCisKKyAgICBkZWYgdGVzdF9hbGwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsKFsyLCA0LCA2XSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsKFsyLCBOb25lLCA2XSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGFsbCwgWzIsIFRlc3RGYWlsaW5nQm9vbCgpLCA2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBhbGwsIFRlc3RGYWlsaW5nSXRlcigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFsbCwgMTApICAgICAgICAgICAgICAgIyBOb24taXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhbGwpICAgICAgICAgICAgICAgICAgICMgTm8gYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFsbCwgWzIsIDQsIDZdLCBbXSkgICAgIyBUb28gbWFueSBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsKFtdKSwgVHJ1ZSkgICAgICAgICAgICAgICAgICAgICAjIEVtcHR5IGl0ZXJhdG9yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsKFswLCBUZXN0RmFpbGluZ0Jvb2woKV0pLCBGYWxzZSkjIFNob3J0LWNpcmN1aXQKKyAgICAgICAgUyA9IFs1MCwgNjBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsKHggPiA0MiBmb3IgeCBpbiBTKSwgVHJ1ZSkKKyAgICAgICAgUyA9IFs1MCwgNDAsIDYwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbCh4ID4gNDIgZm9yIHggaW4gUyksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfYW55KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFueShbTm9uZSwgTm9uZSwgTm9uZV0pLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbnkoW05vbmUsIDQsIE5vbmVdKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBhbnksIFtOb25lLCBUZXN0RmFpbGluZ0Jvb2woKSwgNl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgYW55LCBUZXN0RmFpbGluZ0l0ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhbnksIDEwKSAgICAgICAgICAgICAgICMgTm9uLWl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYW55KSAgICAgICAgICAgICAgICAgICAjIE5vIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhbnksIFsyLCA0LCA2XSwgW10pICAgICMgVG9vIG1hbnkgYXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFueShbXSksIEZhbHNlKSAgICAgICAgICAgICAgICAgICAgIyBFbXB0eSBpdGVyYXRvcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFueShbMSwgVGVzdEZhaWxpbmdCb29sKCldKSwgVHJ1ZSkgIyBTaG9ydC1jaXJjdWl0CisgICAgICAgIFMgPSBbNDAsIDYwLCAzMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbnkoeCA+IDQyIGZvciB4IGluIFMpLCBUcnVlKQorICAgICAgICBTID0gWzEwLCAyMCwgMzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW55KHggPiA0MiBmb3IgeCBpbiBTKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9uZWcoc2VsZik6CisgICAgICAgIHggPSAtc3lzLm1heGludC0xCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHgsIGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXgsIHN5cy5tYXhpbnQrMSkKKworICAgIGRlZiB0ZXN0X2FwcGx5KHNlbGYpOgorICAgICAgICBkZWYgZjAoKmFyZ3MpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCAoKSkKKyAgICAgICAgZGVmIGYxKGExKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYTEsIDEpCisgICAgICAgIGRlZiBmMihhMSwgYTIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhMSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYTIsIDIpCisgICAgICAgIGRlZiBmMyhhMSwgYTIsIGEzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYTEsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEyLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhMywgMykKKyAgICAgICAgYXBwbHkoZjAsICgpKQorICAgICAgICBhcHBseShmMSwgKDEsKSkKKyAgICAgICAgYXBwbHkoZjIsICgxLCAyKSkKKyAgICAgICAgYXBwbHkoZjMsICgxLCAyLCAzKSkKKworICAgICAgICAjIEEgUHlDRnVuY3Rpb24gdGhhdCB0YWtlcyBvbmx5IHBvc2l0aW9uYWwgcGFyYW1ldGVycyBzaG91bGQgYWxsb3cgYW4KKyAgICAgICAgIyBlbXB0eSBrZXl3b3JkIGRpY3Rpb25hcnkgdG8gcGFzcyB3aXRob3V0IGEgY29tcGxhaW50LCBidXQgcmFpc2UgYQorICAgICAgICAjIFR5cGVFcnJvciBpZiB0aGUgZGljdGlvbmFyeSBpcyBub24tZW1wdHkuCisgICAgICAgIGFwcGx5KGlkLCAoMSwpLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhcHBseSwgaWQsICgxLCksIHsiZm9vIjogMX0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXBwbHkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXBwbHksIGlkLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhcHBseSwgaWQsICg0MiwpLCA0MikKKworICAgIGRlZiB0ZXN0X2NhbGxhYmxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUobGVuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZSgiYSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUoY2FsbGFibGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUobGFtYmRhIHgsIHk6IHggKyB5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZShfX2J1aWx0aW5zX18pKQorICAgICAgICBkZWYgZigpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShmKSkKKworICAgICAgICBjbGFzcyBDbGFzc2ljOgorICAgICAgICAgICAgZGVmIG1ldGgoc2VsZik6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKENsYXNzaWMpKQorICAgICAgICBjID0gQ2xhc3NpYygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShjLm1ldGgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxhYmxlKGMpKQorCisgICAgICAgIGNsYXNzIE5ld1N0eWxlKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgbWV0aChzZWxmKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUoTmV3U3R5bGUpKQorICAgICAgICBuID0gTmV3U3R5bGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUobi5tZXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZShuKSkKKworICAgICAgICAjIENsYXNzaWMgYW5kIG5ldy1zdHlsZSBjbGFzc2VzIGV2YWx1YXRlIF9fY2FsbF9fKCkgZGlmZmVyZW50bHkKKyAgICAgICAgYy5fX2NhbGxfXyA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKGMpKQorICAgICAgICBkZWwgYy5fX2NhbGxfXworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxhYmxlKGMpKQorICAgICAgICBuLl9fY2FsbF9fID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxhYmxlKG4pKQorICAgICAgICBkZWwgbi5fX2NhbGxfXworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxhYmxlKG4pKQorCisgICAgICAgIGNsYXNzIE4yKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZik6IHBhc3MKKyAgICAgICAgbjIgPSBOMigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShuMikpCisgICAgICAgIGNsYXNzIE4zKE4yKTogcGFzcworICAgICAgICBuMyA9IE4zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKG4zKSkKKworICAgIGRlZiB0ZXN0X2NocihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaHIoMzIpLCAnICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hyKDY1KSwgJ0EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNocig5NyksICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaHIoMHhmZiksICdceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2hyLCAyNTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2hyKQorCisgICAgZGVmIHRlc3RfY21wKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCgtMSwgMSksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCgxLCAtMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKDEsIDEpLCAwKQorICAgICAgICAjIHZlcmlmeSB0aGF0IGNpcmN1bGFyIG9iamVjdHMgYXJlIG5vdCBoYW5kbGVkCisgICAgICAgIGEgPSBbXTsgYS5hcHBlbmQoYSkKKyAgICAgICAgYiA9IFtdOyBiLmFwcGVuZChiKQorICAgICAgICBmcm9tIFVzZXJMaXN0IGltcG9ydCBVc2VyTGlzdAorICAgICAgICBjID0gVXNlckxpc3QoKTsgYy5hcHBlbmQoYykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjbXAsIGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY21wLCBiLCBjKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGNtcCwgYywgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjbXAsIGEsIGMpCisgICAgICAgIyBva2F5LCBub3cgYnJlYWsgdGhlIGN5Y2xlcworICAgICAgICBhLnBvcCgpOyBiLnBvcCgpOyBjLnBvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY21wKQorCisgICAgZGVmIHRlc3RfY29lcmNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZjbXAoY29lcmNlKDEsIDEuMSksICgxLjAsIDEuMSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZXJjZSgxLCAxTCksICgxTCwgMUwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZjbXAoY29lcmNlKDFMLCAxLjEpLCAoMS4wLCAxLjEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2VyY2UpCisgICAgICAgIGNsYXNzIEJhZE51bWJlcjoKKyAgICAgICAgICAgIGRlZiBfX2NvZXJjZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvZXJjZSwgNDIsIEJhZE51bWJlcigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBjb2VyY2UsIDAuNSwgaW50KCIxMjM0NSIgKiAxMDAwKSkKKworICAgIGRlZiB0ZXN0X2NvbXBpbGUoc2VsZik6CisgICAgICAgIGNvbXBpbGUoJ3ByaW50IDFcbicsICcnLCAnZXhlYycpCisgICAgICAgIGJvbSA9ICdceGVmXHhiYlx4YmYnCisgICAgICAgIGNvbXBpbGUoYm9tICsgJ3ByaW50IDFcbicsICcnLCAnZXhlYycpCisgICAgICAgIGNvbXBpbGUoc291cmNlPSdwYXNzJywgZmlsZW5hbWU9Jz8nLCBtb2RlPSdleGVjJykKKyAgICAgICAgY29tcGlsZShkb250X2luaGVyaXQ9MCwgZmlsZW5hbWU9J3RtcCcsIHNvdXJjZT0nMCcsIG1vZGU9J2V2YWwnKQorICAgICAgICBjb21waWxlKCdwYXNzJywgJz8nLCBkb250X2luaGVyaXQ9MSwgbW9kZT0nZXhlYycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGlsZSwgJ3ByaW50IDQyXG4nLCAnPHN0cmluZz4nLCAnYmFkbW9kZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBpbGUsICdwcmludCA0MlxuJywgJzxzdHJpbmc+JywgJ3NpbmdsZScsIDB4ZmYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGlsZSwgY2hyKDApLCAnZicsICdleGVjJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21waWxlLCAncGFzcycsICc/JywgJ2V4ZWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlPSdldmFsJywgc291cmNlPScwJywgZmlsZW5hbWU9J3RtcCcpCisgICAgICAgIGlmIGhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIGNvbXBpbGUodW5pY29kZSgncHJpbnQgdSJceGMzXHhhNSJcbicsICd1dGY4JyksICcnLCAnZXhlYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBpbGUsIHVuaWNocigwKSwgJ2YnLCAnZXhlYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21waWxlLCB1bmljb2RlKCdhID0gMScpLCAnZicsICdiYWQnKQorCisKKyAgICBkZWYgdGVzdF9kZWxhdHRyKHNlbGYpOgorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIHN5cy5zcGFtID0gMQorICAgICAgICBkZWxhdHRyKHN5cywgJ3NwYW0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRlbGF0dHIpCisKKyAgICBkZWYgdGVzdF9kaXIoc2VsZik6CisgICAgICAgICMgZGlyKHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGlyLCA0MiwgNDIpCisKKyAgICAgICAgIyBkaXIoKSAtIGxvY2FsIHNjb3BlCisgICAgICAgIGxvY2FsX3ZhciA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbG9jYWxfdmFyJywgZGlyKCkpCisKKyAgICAgICAgIyBkaXIobW9kdWxlKQorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2V4aXQnLCBkaXIoc3lzKSkKKworICAgICAgICAjIGRpcihtb2R1bGVfd2l0aF9pbnZhbGlkX19kaWN0X18pCisgICAgICAgIGltcG9ydCB0eXBlcworICAgICAgICBjbGFzcyBGb28odHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgICAgICBfX2RpY3RfXyA9IDgKKyAgICAgICAgZiA9IEZvbygiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXIsIGYpCisKKyAgICAgICAgIyBkaXIodHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigic3RyaXAiLCBkaXIoc3RyKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiX19tcm9fXyIsIGRpcihzdHIpKQorCisgICAgICAgICMgZGlyKG9iaikKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi54ID0gNworICAgICAgICAgICAgICAgIHNlbGYueSA9IDgKKyAgICAgICAgICAgICAgICBzZWxmLnogPSA5CisgICAgICAgIGYgPSBGb28oKQorICAgICAgICBzZWxmLmFzc2VydEluKCJ5IiwgZGlyKGYpKQorCisgICAgICAgICMgZGlyKG9ial9ub19fZGljdF9fKQorICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFtdCisgICAgICAgIGYgPSBGb28oKQorICAgICAgICBzZWxmLmFzc2VydEluKCJfX3JlcHJfXyIsIGRpcihmKSkKKworICAgICAgICAjIGRpcihvYmpfbm9fX2NsYXNzX193aXRoX19kaWN0X18pCisgICAgICAgICMgKGFuIHVnbHkgdHJpY2sgdG8gY2F1c2UgZ2V0YXR0cihmLCAiX19jbGFzc19fIikgdG8gZmFpbCkKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbIl9fY2xhc3NfXyIsICJfX2RpY3RfXyJdCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5iYXIgPSAid293IgorICAgICAgICBmID0gRm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiX19yZXByX18iLCBkaXIoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImJhciIsIGRpcihmKSkKKworICAgICAgICAjIGRpcihvYmpfdXNpbmcgX19kaXJfXykKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWyJrYW4iLCAiZ2EiLCAicm9vIl0KKyAgICAgICAgZiA9IEZvbygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXIoZikgPT0gWyJnYSIsICJrYW4iLCAicm9vIl0pCisKKyAgICAgICAgIyBkaXIob2JqX19kaXJfX25vdF9saXN0KQorICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA3CisgICAgICAgIGYgPSBGb28oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRpciwgZikKKworICAgIGRlZiB0ZXN0X2Rpdm1vZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZtb2QoMTIsIDcpLCAoMSwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2bW9kKC0xMiwgNyksICgtMiwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2bW9kKDEyLCAtNyksICgtMiwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgtMTIsIC03KSwgKDEsIC01KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgxMkwsIDdMKSwgKDFMLCA1TCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2bW9kKC0xMkwsIDdMKSwgKC0yTCwgMkwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgxMkwsIC03TCksICgtMkwsIC0yTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2bW9kKC0xMkwsIC03TCksICgxTCwgLTVMKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgxMiwgN0wpLCAoMSwgNUwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgtMTIsIDdMKSwgKC0yLCAyTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2bW9kKDEyTCwgLTcpLCAoLTJMLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2bW9kKC0xMkwsIC03KSwgKDFMLCAtNSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZtb2QoLXN5cy5tYXhpbnQtMSwgLTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChzeXMubWF4aW50KzEsIDApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZmNtcChkaXZtb2QoMy4yNSwgMS4wKSwgKDMuMCwgMC4yNSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZjbXAoZGl2bW9kKC0zLjI1LCAxLjApLCAoLTQuMCwgMC43NSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZjbXAoZGl2bW9kKDMuMjUsIC0xLjApLCAoLTQuMCwgLTAuNzUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmY21wKGRpdm1vZCgtMy4yNSwgLTEuMCksICgzLjAsIC0wLjI1KSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXZtb2QpCisKKyAgICBkZWYgdGVzdF9ldmFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJzErMScpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJyAxKzFcbicpLCAyKQorICAgICAgICBnbG9iYWxzID0geydhJzogMSwgJ2InOiAyfQorICAgICAgICBsb2NhbHMgPSB7J2InOiAyMDAsICdjJzogMzAwfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ2EnLCBnbG9iYWxzKSAsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnYScsIGdsb2JhbHMsIGxvY2FscyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnYicsIGdsb2JhbHMsIGxvY2FscyksIDIwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCdjJywgZ2xvYmFscywgbG9jYWxzKSwgMzAwKQorICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwodW5pY29kZSgnMSsxJykpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHVuaWNvZGUoJyAxKzFcbicpKSwgMikKKyAgICAgICAgZ2xvYmFscyA9IHsnYSc6IDEsICdiJzogMn0KKyAgICAgICAgbG9jYWxzID0geydiJzogMjAwLCAnYyc6IDMwMH0KKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHVuaWNvZGUoJ2EnKSwgZ2xvYmFscyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwodW5pY29kZSgnYScpLCBnbG9iYWxzLCBsb2NhbHMpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHVuaWNvZGUoJ2InKSwgZ2xvYmFscywgbG9jYWxzKSwgMjAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHVuaWNvZGUoJ2MnKSwgZ2xvYmFscywgbG9jYWxzKSwgMzAwKQorICAgICAgICAgICAgYm9tID0gJ1x4ZWZceGJiXHhiZicKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChib20gKyAnYScsIGdsb2JhbHMsIGxvY2FscyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwodW5pY29kZSgndSJceGMzXHhhNSInLCAndXRmOCcpLCBnbG9iYWxzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZSgnXHhjM1x4YTUnLCAndXRmOCcpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgKCkpCisKKyAgICBkZWYgdGVzdF9nZW5lcmFsX2V2YWwoc2VsZik6CisgICAgICAgICMgVGVzdHMgdGhhdCBnZW5lcmFsIG1hcHBpbmdzIGNhbiBiZSB1c2VkIGZvciB0aGUgbG9jYWxzIGFyZ3VtZW50CisKKyAgICAgICAgY2xhc3MgTToKKyAgICAgICAgICAgICJUZXN0IG1hcHBpbmcgaW50ZXJmYWNlIHZlcnN1cyBwb3NzaWJsZSBjYWxscyBmcm9tIGV2YWwoKS4iCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICBpZiBrZXkgPT0gJ2EnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTIKKyAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcgorICAgICAgICAgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3QoJ3h5eicpCisKKyAgICAgICAgbSA9IE0oKQorICAgICAgICBnID0gZ2xvYmFscygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnYScsIGcsIG0pLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yLCBldmFsLCAnYicsIGcsIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnZGlyKCknLCBnLCBtKSwgbGlzdCgneHl6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnZ2xvYmFscygpJywgZywgbSksIGcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnbG9jYWxzKCknLCBnLCBtKSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAnYScsIG0pCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICAiTm9uLW1hcHBpbmciCisgICAgICAgICAgICBwYXNzCisgICAgICAgIG0gPSBBKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAnYScsIGcsIG0pCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBkaWN0IHN1YmNsYXNzZXMgd29yayBhcyB3ZWxsCisgICAgICAgIGNsYXNzIEQoZGljdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICBpZiBrZXkgPT0gJ2EnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTIKKyAgICAgICAgICAgICAgICByZXR1cm4gZGljdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpCisgICAgICAgICAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGlzdCgneHl6JykKKworICAgICAgICBkID0gRCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnYScsIGcsIGQpLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yLCBldmFsLCAnYicsIGcsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnZGlyKCknLCBnLCBkKSwgbGlzdCgneHl6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnZ2xvYmFscygpJywgZywgZCksIGcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnbG9jYWxzKCknLCBnLCBkKSwgZCkKKworICAgICAgICAjIFZlcmlmeSBsb2NhbHMgc3RvcmVzICh1c2VkIGJ5IGxpc3QgY29tcHMpCisgICAgICAgIGV2YWwoJ1tsb2NhbHMoKSBmb3IgaSBpbiAoMiwzKV0nLCBnLCBkKQorICAgICAgICBldmFsKCdbbG9jYWxzKCkgZm9yIGkgaW4gKDIsMyldJywgZywgVXNlckRpY3QuVXNlckRpY3QoKSkKKworICAgICAgICBjbGFzcyBTcHJlYWRTaGVldDoKKyAgICAgICAgICAgICJTYW1wbGUgYXBwbGljYXRpb24gc2hvd2luZyBuZXN0ZWQsIGNhbGN1bGF0ZWQgbG9va3Vwcy4iCisgICAgICAgICAgICBfY2VsbHMgPSB7fQorICAgICAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgZm9ybXVsYSk6CisgICAgICAgICAgICAgICAgc2VsZi5fY2VsbHNba2V5XSA9IGZvcm11bGEKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiBldmFsKHNlbGYuX2NlbGxzW2tleV0sIGdsb2JhbHMoKSwgc2VsZikKKworICAgICAgICBzcyA9IFNwcmVhZFNoZWV0KCkKKyAgICAgICAgc3NbJ2ExJ10gPSAnNScKKyAgICAgICAgc3NbJ2EyJ10gPSAnYTEqNicKKyAgICAgICAgc3NbJ2EzJ10gPSAnYTIqNycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc1snYTMnXSwgMjEwKQorCisgICAgICAgICMgVmVyaWZ5IHRoYXQgZGlyKCkgY2F0Y2hlcyBhIG5vbi1saXN0IHJldHVybmVkIGJ5IGV2YWwKKyAgICAgICAgIyBTRiBidWcgIzEwMDQ2NjkKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpdGVtKToKKyAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihpdGVtKQorICAgICAgICAgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdhJworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV2YWwsICdkaXIoKScsIGdsb2JhbHMoKSwgQygpKQorCisgICAgIyBEb25lIG91dHNpZGUgb2YgdGhlIG1ldGhvZCB0ZXN0X3ogdG8gZ2V0IHRoZSBjb3JyZWN0IHNjb3BlCisgICAgeiA9IDAKKyAgICBmID0gb3BlbihURVNURk4sICd3JykKKyAgICBmLndyaXRlKCd6ID0geisxXG4nKQorICAgIGYud3JpdGUoJ3ogPSB6KjJcbicpCisgICAgZi5jbG9zZSgpCisgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCgiZXhlY2ZpbGUuLiBub3Qgc3VwcG9ydGVkIGluIDMueCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgZXhlY2ZpbGUoVEVTVEZOKQorCisgICAgZGVmIHRlc3RfZXhlY2ZpbGUoc2VsZik6CisgICAgICAgIGdsb2JhbCBudW1ydW5zCisgICAgICAgIGlmIG51bXJ1bnM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbnVtcnVucyArPSAxCisKKyAgICAgICAgZ2xvYmFscyA9IHsnYSc6IDEsICdiJzogMn0KKyAgICAgICAgbG9jYWxzID0geydiJzogMjAwLCAnYyc6IDMwMH0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX19jbGFzc19fLnosIDIpCisgICAgICAgIGdsb2JhbHNbJ3onXSA9IDAKKyAgICAgICAgZXhlY2ZpbGUoVEVTVEZOLCBnbG9iYWxzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbHNbJ3onXSwgMikKKyAgICAgICAgbG9jYWxzWyd6J10gPSAwCisgICAgICAgIGV4ZWNmaWxlKFRFU1RGTiwgZ2xvYmFscywgbG9jYWxzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2Fsc1sneiddLCAyKQorCisgICAgICAgIGNsYXNzIE06CisgICAgICAgICAgICAiVGVzdCBtYXBwaW5nIGludGVyZmFjZSB2ZXJzdXMgcG9zc2libGUgY2FsbHMgZnJvbSBleGVjZmlsZSgpLiIKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnogPSAxMAorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgaWYga2V5ID09ICd6JzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuegorICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCisgICAgICAgICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgaWYga2V5ID09ICd6JzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi56ID0gdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKworICAgICAgICBsb2NhbHMgPSBNKCkKKyAgICAgICAgbG9jYWxzWyd6J10gPSAwCisgICAgICAgIGV4ZWNmaWxlKFRFU1RGTiwgZ2xvYmFscywgbG9jYWxzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2Fsc1sneiddLCAyKQorCisgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXhlY2ZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXhlY2ZpbGUsIFRFU1RGTiwge30sICgpKQorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZXhlY2ZpbGUsIG9zLmN1cmRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZXhlY2ZpbGUsICJJX2RvbnRfZXhpc3QiKQorCisgICAgZGVmIHRlc3RfZmlsdGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihsYW1iZGEgYzogJ2EnIDw9IGMgPD0gJ3onLCAnSGVsbG8gV29ybGQnKSwgJ2VsbG9vcmxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWx0ZXIoTm9uZSwgWzEsICdoZWxsbycsIFtdLCBbM10sICcnLCBOb25lLCA5LCAwXSksIFsxLCAnaGVsbG8nLCBbM10sIDldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihsYW1iZGEgeDogeCA+IDAsIFsxLCAtMywgOSwgMCwgMl0pLCBbMSwgOSwgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsdGVyKE5vbmUsIFNxdWFyZXMoMTApKSwgWzEsIDQsIDksIDE2LCAyNSwgMzYsIDQ5LCA2NCwgODFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihsYW1iZGEgeDogeCUyLCBTcXVhcmVzKDEwKSksIFsxLCA5LCAyNSwgNDksIDgxXSkKKyAgICAgICAgZGVmIGlkZW50aXR5KGl0ZW0pOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgZmlsdGVyKGlkZW50aXR5LCBTcXVhcmVzKDUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZpbHRlcikKKyAgICAgICAgY2xhc3MgQmFkU2VxKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIGlmIGluZGV4PDQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmlsdGVyLCBsYW1iZGEgeDogeCwgQmFkU2VxKCkpCisgICAgICAgIGRlZiBiYWRmdW5jKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmlsdGVyLCBiYWRmdW5jLCByYW5nZSg1KSkKKworICAgICAgICAjIHRlc3QgYmx0aW5tb2R1bGUuYzo6ZmlsdGVydHVwbGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihOb25lLCAoMSwgMikpLCAoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsdGVyKGxhbWJkYSB4OiB4Pj0zLCAoMSwgMiwgMywgNCkpLCAoMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmlsdGVyLCA0MiwgKDEsIDIpKQorCisgICAgICAgICMgdGVzdCBibHRpbm1vZHVsZS5jOjpmaWx0ZXJzdHJpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihOb25lLCAiMTIiKSwgIjEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWx0ZXIobGFtYmRhIHg6IHg+PSIzIiwgIjEyMzQiKSwgIjM0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmaWx0ZXIsIDQyLCAiMTIiKQorICAgICAgICBjbGFzcyBiYWRzdHIoc3RyKToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmaWx0ZXIsIGxhbWJkYSB4OiB4ID49IjMiLCBiYWRzdHIoIjEyMzQiKSkKKworICAgICAgICBjbGFzcyBiYWRzdHIyKHN0cik6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZpbHRlciwgbGFtYmRhIHg6IHggPj00MiwgYmFkc3RyMigiMTIzNCIpKQorCisgICAgICAgIGNsYXNzIHdlaXJkc3RyKHN0cik6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIHJldHVybiB3ZWlyZHN0cigyKnN0ci5fX2dldGl0ZW1fXyhzZWxmLCBpbmRleCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsdGVyKGxhbWJkYSB4OiB4Pj0iMzMiLCB3ZWlyZHN0cigiMTIzNCIpKSwgIjMzNDQiKQorCisgICAgICAgIGNsYXNzIHNoaWZ0c3RyKHN0cik6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIHJldHVybiBjaHIob3JkKHN0ci5fX2dldGl0ZW1fXyhzZWxmLCBpbmRleCkpKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsdGVyKGxhbWJkYSB4OiB4Pj0iMyIsIHNoaWZ0c3RyKCIxMjM0IikpLCAiMzQ1IikKKworICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICAjIHRlc3QgYmx0aW5tb2R1bGUuYzo6ZmlsdGVydW5pY29kZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihOb25lLCB1bmljb2RlKCIxMiIpKSwgdW5pY29kZSgiMTIiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsdGVyKGxhbWJkYSB4OiB4Pj0iMyIsIHVuaWNvZGUoIjEyMzQiKSksIHVuaWNvZGUoIjM0IikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZpbHRlciwgNDIsIHVuaWNvZGUoIjEyIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmaWx0ZXIsIGxhbWJkYSB4OiB4ID49IjMiLCBiYWRzdHIodW5pY29kZSgiMTIzNCIpKSkKKworICAgICAgICAgICAgY2xhc3MgYmFkdW5pY29kZSh1bmljb2RlKToKKyAgICAgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmlsdGVyLCBsYW1iZGEgeDogeCA+PTQyLCBiYWR1bmljb2RlKCIxMjM0IikpCisKKyAgICAgICAgICAgIGNsYXNzIHdlaXJkdW5pY29kZSh1bmljb2RlKToKKyAgICAgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2VpcmR1bmljb2RlKDIqdW5pY29kZS5fX2dldGl0ZW1fXyhzZWxmLCBpbmRleCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGZpbHRlcihsYW1iZGEgeDogeD49dW5pY29kZSgiMzMiKSwgd2VpcmR1bmljb2RlKCIxMjM0IikpLCB1bmljb2RlKCIzMzQ0IikpCisKKyAgICAgICAgICAgIGNsYXNzIHNoaWZ0dW5pY29kZSh1bmljb2RlKToKKyAgICAgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5pY2hyKG9yZCh1bmljb2RlLl9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KSkrMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgZmlsdGVyKGxhbWJkYSB4OiB4Pj11bmljb2RlKCIzIiksIHNoaWZ0dW5pY29kZSgiMTIzNCIpKSwKKyAgICAgICAgICAgICAgICB1bmljb2RlKCIzNDUiKQorICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZmlsdGVyX3N1YmNsYXNzZXMoc2VsZik6CisgICAgICAgICMgdGVzdCB0aGF0IGZpbHRlcigpIG5ldmVyIHJldHVybnMgdHVwbGUsIHN0ciBvciB1bmljb2RlIHN1YmNsYXNzZXMKKyAgICAgICAgIyBhbmQgdGhhdCB0aGUgcmVzdWx0IGFsd2F5cyBnb2VzIHRocm91Z2ggX19nZXRpdGVtX18KKyAgICAgICAgZnVuY3MgPSAoTm9uZSwgYm9vbCwgbGFtYmRhIHg6IFRydWUpCisgICAgICAgIGNsYXNzIHR1cGxlMih0dXBsZSk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIHJldHVybiAyKnR1cGxlLl9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KQorICAgICAgICBjbGFzcyBzdHIyKHN0cik6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIHJldHVybiAyKnN0ci5fX2dldGl0ZW1fXyhzZWxmLCBpbmRleCkKKyAgICAgICAgaW5wdXRzID0geworICAgICAgICAgICAgdHVwbGUyOiB7KCk6ICgpLCAoMSwgMiwgMyk6ICgyLCA0LCA2KX0sCisgICAgICAgICAgICBzdHIyOiAgIHsiIjogIiIsICIxMjMiOiAiMTEyMjMzIn0KKyAgICAgICAgfQorICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBjbGFzcyB1bmljb2RlMih1bmljb2RlKToKKyAgICAgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMip1bmljb2RlLl9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KQorICAgICAgICAgICAgaW5wdXRzW3VuaWNvZGUyXSA9IHsKKyAgICAgICAgICAgICAgICB1bmljb2RlKCk6IHVuaWNvZGUoKSwKKyAgICAgICAgICAgICAgICB1bmljb2RlKCIxMjMiKTogdW5pY29kZSgiMTEyMjMzIikKKyAgICAgICAgICAgIH0KKworICAgICAgICBmb3IgKGNscywgaW5wcykgaW4gaW5wdXRzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZm9yIChpbnAsIGV4cCkgaW4gaW5wcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgb3V0cHV0IGdvZXMgdGhyb3VnaCBfX2dldGl0ZW1fXworICAgICAgICAgICAgICAgICMgZXZlbiBpZiBmdW5jIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoZnVuY3NbMF0sIGNscyhpbnApKSwKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGZ1bmNzWzFdLCBjbHMoaW5wKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgZm9yIGZ1bmMgaW4gZnVuY3M6CisgICAgICAgICAgICAgICAgICAgIG91dHAgPSBmaWx0ZXIoZnVuYywgY2xzKGlucCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cCwgZXhwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGlzaW5zdGFuY2Uob3V0cCwgY2xzKSkKKworICAgIGRlZiB0ZXN0X2dldGF0dHIoc2VsZik6CisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIoc3lzLCAnc3Rkb3V0JykgaXMgc3lzLnN0ZG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhdHRyLCBzeXMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXR0ciwgc3lzLCAxLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhdHRyKQorICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGdldGF0dHIsIHN5cywgdW5pY2hyKHN5cy5tYXh1bmljb2RlKSkKKworICAgIGRlZiB0ZXN0X2hhc2F0dHIoc2VsZik6CisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3lzLCAnc3Rkb3V0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzYXR0ciwgc3lzLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2F0dHIpCisgICAgICAgIGlmIGhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgaGFzYXR0ciwgc3lzLCB1bmljaHIoc3lzLm1heHVuaWNvZGUpKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCBoYXNhdHRyIGFsbG93cyBTeXN0ZW1FeGl0IGFuZCBLZXlib2FyZEludGVycnVwdHMgYnkKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCB3aGF0KToKKyAgICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgaGFzYXR0ciwgQSgpLCAiYiIpCisgICAgICAgIGNsYXNzIEI6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgd2hhdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBoYXNhdHRyLCBCKCksICJiIikKKworICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgIGhhc2goTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKDEpLCBoYXNoKDFMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKDEpLCBoYXNoKDEuMCkpCisgICAgICAgIGhhc2goJ3NwYW0nKQorICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goJ3NwYW0nKSwgaGFzaCh1bmljb2RlKCdzcGFtJykpKQorICAgICAgICBoYXNoKCgwLDEsMiwzKSkKKyAgICAgICAgZGVmIGYoKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIHt9KQorICAgICAgICAjIEJ1ZyAxNTM2MDIxOiBBbGxvdyBoYXNoIHRvIHJldHVybiBsb25nIG9iamVjdHMKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMioqMTAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShoYXNoKFgoKSkpLCBpbnQpCisgICAgICAgIGNsYXNzIFkob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMioqMTAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShoYXNoKFkoKSkpLCBpbnQpCisgICAgICAgIGNsYXNzIFoobG9uZyk6CisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKFooNDIpKSwgaGFzaCg0MkwpKQorCisgICAgZGVmIHRlc3RfaGV4KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleCgxNiksICcweDEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXgoMTZMKSwgJzB4MTBMJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXgoLTE2KSwgJy0weDEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXgoLTE2TCksICctMHgxMEwnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhleCwge30pCisKKyAgICBkZWYgdGVzdF9pZChzZWxmKToKKyAgICAgICAgaWQoTm9uZSkKKyAgICAgICAgaWQoMSkKKyAgICAgICAgaWQoMUwpCisgICAgICAgIGlkKDEuMCkKKyAgICAgICAgaWQoJ3NwYW0nKQorICAgICAgICBpZCgoMCwxLDIsMykpCisgICAgICAgIGlkKFswLDEsMiwzXSkKKyAgICAgICAgaWQoeydzcGFtJzogMSwgJ2VnZ3MnOiAyLCAnaGFtJzogM30pCisKKyAgICAjIFRlc3QgaW5wdXQoKSBsYXRlciwgdG9nZXRoZXIgd2l0aCByYXdfaW5wdXQKKworICAgICMgdGVzdF9pbnQoKTogc2VlIHRlc3RfaW50LnB5IGZvciBpbnQoKSB0ZXN0cy4KKworICAgIGRlZiB0ZXN0X2ludGVybihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnRlcm4pCisgICAgICAgICMgVGhpcyBmYWlscyBpZiB0aGUgdGVzdCBpcyBydW4gdHdpY2Ugd2l0aCBhIGNvbnN0YW50IHN0cmluZywKKyAgICAgICAgIyB0aGVyZWZvcmUgYXBwZW5kIHRoZSBydW4gY291bnRlcgorICAgICAgICBzID0gIm5ldmVyIGludGVybmVkIGJlZm9yZSAiICsgc3RyKG51bXJ1bnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnRlcm4ocykgaXMgcykKKyAgICAgICAgczIgPSBzLnN3YXBjYXNlKCkuc3dhcGNhc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50ZXJuKHMyKSBpcyBzKQorCisgICAgICAgICMgU3ViY2xhc3NlcyBvZiBzdHJpbmcgY2FuJ3QgYmUgaW50ZXJuZWQsIGJlY2F1c2UgdGhleQorICAgICAgICAjIHByb3ZpZGUgdG9vIG11Y2ggb3Bwb3J0dW5pdHkgZm9yIGluc2FuZSB0aGluZ3MgdG8gaGFwcGVuLgorICAgICAgICAjIFdlIGRvbid0IHdhbnQgdGhlbSBpbiB0aGUgaW50ZXJuZWQgZGljdCBhbmQgaWYgdGhleSBhcmVuJ3QKKyAgICAgICAgIyBhY3R1YWxseSBpbnRlcm5lZCwgd2UgZG9uJ3Qgd2FudCB0byBjcmVhdGUgdGhlIGFwcGVhcmFuY2UKKyAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJ5IGFsbG93aW5nIGludGVybigpIHRvIHN1Y2NlZWQuCisgICAgICAgIGNsYXNzIFMoc3RyKToKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMTIzCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnRlcm4sIFMoImFiYyIpKQorCisgICAgICAgICMgSXQncyBzdGlsbCBzYWZlIHRvIHBhc3MgdGhlc2Ugc3RyaW5ncyB0byByb3V0aW5lcyB0aGF0CisgICAgICAgICMgY2FsbCBpbnRlcm4gaW50ZXJuYWxseSwgZS5nLiBQeU9iamVjdF9TZXRBdHRyKCkuCisgICAgICAgIHMgPSBTKCJhYmMiKQorICAgICAgICBzZXRhdHRyKHMsIHMsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihzLCBzKSwgcykKKworICAgIGRlZiB0ZXN0X2l0ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpdGVyLCA0MiwgNDIpCisgICAgICAgIGxpc3RzID0gWygiMSIsICIyIiksIFsiMSIsICIyIl0sICIxMiJdCisgICAgICAgIGlmIGhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIGxpc3RzLmFwcGVuZCh1bmljb2RlKCIxMiIpKQorICAgICAgICBmb3IgbCBpbiBsaXN0czoKKyAgICAgICAgICAgIGkgPSBpdGVyKGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkubmV4dCgpLCAnMScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkubmV4dCgpLCAnMicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBpLm5leHQpCisKKyAgICBkZWYgdGVzdF9pc2luc3RhbmNlKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBFOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjID0gQygpCisgICAgICAgIGQgPSBEKCkKKyAgICAgICAgZSA9IEUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShjLCBDKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZCwgQykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNpbnN0YW5jZShlLCBDKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc2luc3RhbmNlKGMsIEQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGlzaW5zdGFuY2UoJ2ZvbycsIEUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlzaW5zdGFuY2UsIEUsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlzaW5zdGFuY2UpCisKKyAgICBkZWYgdGVzdF9pc3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBFOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjID0gQygpCisgICAgICAgIGQgPSBEKCkKKyAgICAgICAgZSA9IEUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhELCBDKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQywgQykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNzdWJjbGFzcyhDLCBEKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpc3N1YmNsYXNzLCAnZm9vJywgRSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpc3N1YmNsYXNzLCBFLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpc3N1YmNsYXNzKQorCisgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbignMTIzJyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKCgpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oKDEsIDIsIDMsIDQpKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oWzEsIDIsIDMsIDRdKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oe30pLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih7J2EnOjEsICdiJzogMn0pLCAyKQorICAgICAgICBjbGFzcyBCYWRTZXE6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxlbiwgQmFkU2VxKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGVuLCAyKQorICAgICAgICBjbGFzcyBDbGFzc2ljU3R5bGU6IHBhc3MKKyAgICAgICAgY2xhc3MgTmV3U3R5bGUob2JqZWN0KTogcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgbGVuLCBDbGFzc2ljU3R5bGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsZW4sIE5ld1N0eWxlKCkpCisKKyAgICBkZWYgdGVzdF9tYXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtYXAoTm9uZSwgJ2hlbGxvIHdvcmxkJyksCisgICAgICAgICAgICBbJ2gnLCdlJywnbCcsJ2wnLCdvJywnICcsJ3cnLCdvJywncicsJ2wnLCdkJ10KKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbWFwKE5vbmUsICdhYmNkJywgJ2VmZycpLAorICAgICAgICAgICAgWygnYScsICdlJyksICgnYicsICdmJyksICgnYycsICdnJyksICgnZCcsIE5vbmUpXQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtYXAoTm9uZSwgcmFuZ2UoMTApKSwKKyAgICAgICAgICAgIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtYXAobGFtYmRhIHg6IHgqeCwgcmFuZ2UoMSw0KSksCisgICAgICAgICAgICBbMSwgNCwgOV0KKyAgICAgICAgKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIG1hdGggaW1wb3J0IHNxcnQKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgZGVmIHNxcnQoeCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvdyh4LCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtYXAobGFtYmRhIHg6IG1hcChzcXJ0LHgpLCBbWzE2LCA0XSwgWzgxLCA5XV0pLAorICAgICAgICAgICAgW1s0LjAsIDIuMF0sIFs5LjAsIDMuMF1dCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIG1hcChsYW1iZGEgeCwgeTogeCt5LCBbMSwzLDJdLCBbOSwxLDRdKSwKKyAgICAgICAgICAgIFsxMCwgNCwgNl0KKyAgICAgICAgKQorCisgICAgICAgIGRlZiBwbHVzKCp2KToKKyAgICAgICAgICAgIGFjY3UgPSAwCisgICAgICAgICAgICBmb3IgaSBpbiB2OiBhY2N1ID0gYWNjdSArIGkKKyAgICAgICAgICAgIHJldHVybiBhY2N1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtYXAocGx1cywgWzEsIDMsIDddKSwKKyAgICAgICAgICAgIFsxLCAzLCA3XQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtYXAocGx1cywgWzEsIDMsIDddLCBbNCwgOSwgMl0pLAorICAgICAgICAgICAgWzErNCwgMys5LCA3KzJdCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIG1hcChwbHVzLCBbMSwgMywgN10sIFs0LCA5LCAyXSwgWzEsIDEsIDBdKSwKKyAgICAgICAgICAgIFsxKzQrMSwgMys5KzEsIDcrMiswXQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtYXAoTm9uZSwgU3F1YXJlcygxMCkpLAorICAgICAgICAgICAgWzAsIDEsIDQsIDksIDE2LCAyNSwgMzYsIDQ5LCA2NCwgODFdCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIG1hcChpbnQsIFNxdWFyZXMoMTApKSwKKyAgICAgICAgICAgIFswLCAxLCA0LCA5LCAxNiwgMjUsIDM2LCA0OSwgNjQsIDgxXQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBtYXAoTm9uZSwgU3F1YXJlcygzKSwgU3F1YXJlcygyKSksCisgICAgICAgICAgICBbKDAsMCksICgxLDEpLCAoNCxOb25lKV0KKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbWFwKG1heCwgU3F1YXJlcygzKSwgU3F1YXJlcygyKSksCisgICAgICAgICAgICBbMCwgMSwgNF0KKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXAsIGxhbWJkYSB4OiB4LCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXAoTm9uZSwgWzQyXSksIFs0Ml0pCisgICAgICAgIGNsYXNzIEJhZFNlcToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXAsIGxhbWJkYSB4OiB4LCBCYWRTZXEoKSkKKyAgICAgICAgZGVmIGJhZGZ1bmMoeCk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBtYXAsIGJhZGZ1bmMsIHJhbmdlKDUpKQorCisgICAgZGVmIHRlc3RfbWF4KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgnMTIzMTIzJyksICczJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoMSwgMiwgMyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KCgxLCAyLCAzLCAxLCAyLCAzKSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KFsxLCAyLCAzLCAxLCAyLCAzXSksIDMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoMSwgMkwsIDMuMCksIDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoMUwsIDIuMCwgMyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEuMCwgMiwgM0wpLCAzTCkKKworICAgICAgICBmb3Igc3RtdCBpbiAoCisgICAgICAgICAgICAibWF4KGtleT1pbnQpIiwgICAgICAgICAgICAgICAgICMgbm8gYXJncworICAgICAgICAgICAgIm1heCgxLCBrZXk9aW50KSIsICAgICAgICAgICAgICAjIHNpbmdsZSBhcmcgbm90IGl0ZXJhYmxlCisgICAgICAgICAgICAibWF4KDEsIDIsIGtleXN0b25lPWludCkiLCAgICAgICMgd3Jvbmcga2V5d29yZAorICAgICAgICAgICAgIm1heCgxLCAyLCBrZXk9aW50LCBhYmM9aW50KSIsICAjIHR3byBtYW55IGtleXdvcmRzCisgICAgICAgICAgICAibWF4KDEsIDIsIGtleT0xKSIsICAgICAgICAgICAgICMga2V5ZnVuYyBpcyBub3QgY2FsbGFibGUKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXhlYyhzdG10KSBpbiBnbG9iYWxzKCkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoc3RtdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoMSwpLCBrZXk9bmVnKSwgMSkgICAgICMgb25lIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsMiksIGtleT1uZWcpLCAxKSAgICAjIHR3byBlbGVtIGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEsIDIsIGtleT1uZWcpLCAxKSAgICAgIyB0d28gZWxlbXMKKworICAgICAgICBkYXRhID0gW3JhbmRvbS5yYW5kcmFuZ2UoMjAwKSBmb3IgaSBpbiByYW5nZSgxMDApXQorICAgICAgICBrZXlzID0gZGljdCgoZWxlbSwgcmFuZG9tLnJhbmRyYW5nZSg1MCkpIGZvciBlbGVtIGluIGRhdGEpCisgICAgICAgIGYgPSBrZXlzLl9fZ2V0aXRlbV9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KGRhdGEsIGtleT1mKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWQocmV2ZXJzZWQoZGF0YSksIGtleT1mKVstMV0pCisKKyAgICBkZWYgdGVzdF9taW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCcxMjMxMjMnKSwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigxLCAyLCAzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKDEsIDIsIDMsIDEsIDIsIDMpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oWzEsIDIsIDMsIDEsIDIsIDNdKSwgMSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigxLCAyTCwgMy4wKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oMUwsIDIuMCwgMyksIDFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigxLjAsIDIsIDNMKSwgMS4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWluKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1pbiwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1pbiwgKCkpCisgICAgICAgIGNsYXNzIEJhZFNlcToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtaW4sIEJhZFNlcSgpKQorICAgICAgICBjbGFzcyBCYWROdW1iZXI6CisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtaW4sICg0MiwgQmFkTnVtYmVyKCkpKQorCisgICAgICAgIGZvciBzdG10IGluICgKKyAgICAgICAgICAgICJtaW4oa2V5PWludCkiLCAgICAgICAgICAgICAgICAgIyBubyBhcmdzCisgICAgICAgICAgICAibWluKDEsIGtleT1pbnQpIiwgICAgICAgICAgICAgICMgc2luZ2xlIGFyZyBub3QgaXRlcmFibGUKKyAgICAgICAgICAgICJtaW4oMSwgMiwga2V5c3RvbmU9aW50KSIsICAgICAgIyB3cm9uZyBrZXl3b3JkCisgICAgICAgICAgICAibWluKDEsIDIsIGtleT1pbnQsIGFiYz1pbnQpIiwgICMgdHdvIG1hbnkga2V5d29yZHMKKyAgICAgICAgICAgICJtaW4oMSwgMiwga2V5PTEpIiwgICAgICAgICAgICAgIyBrZXlmdW5jIGlzIG5vdCBjYWxsYWJsZQorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBleGVjKHN0bXQpIGluIGdsb2JhbHMoKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbChzdG10KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLCksIGtleT1uZWcpLCAxKSAgICAgIyBvbmUgZWxlbSBpdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigoMSwyKSwga2V5PW5lZyksIDIpICAgICMgdHdvIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oMSwgMiwga2V5PW5lZyksIDIpICAgICAjIHR3byBlbGVtcworCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnJhbmRyYW5nZSgyMDApIGZvciBpIGluIHJhbmdlKDEwMCldCisgICAgICAgIGtleXMgPSBkaWN0KChlbGVtLCByYW5kb20ucmFuZHJhbmdlKDUwKSkgZm9yIGVsZW0gaW4gZGF0YSkKKyAgICAgICAgZiA9IGtleXMuX19nZXRpdGVtX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oZGF0YSwga2V5PWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZChkYXRhLCBrZXk9ZilbMF0pCisKKyAgICBkZWYgdGVzdF9uZXh0KHNlbGYpOgorICAgICAgICBpdCA9IGl0ZXIocmFuZ2UoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0LCA0MiksIDQyKQorCisgICAgICAgIGNsYXNzIEl0ZXIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorCisgICAgICAgIGl0ID0gaXRlcihJdGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCwgNDIpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaXQgPSBnZW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0LCA0MiksIDQyKQorCisgICAgZGVmIHRlc3Rfb2N0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9jdCgxMDApLCAnMDE0NCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2N0KDEwMEwpLCAnMDE0NEwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9jdCgtMTAwKSwgJy0wMTQ0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvY3QoLTEwMEwpLCAnLTAxNDRMJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvY3QsICgpKQorCisgICAgZGVmIHdyaXRlX3Rlc3RmaWxlKHNlbGYpOgorICAgICAgICAjIE5CIHRoZSBmaXJzdCA0IGxpbmVzIGFyZSBhbHNvIHVzZWQgdG8gdGVzdCBpbnB1dCBhbmQgcmF3X2lucHV0LCBiZWxvdworICAgICAgICBmcCA9IG9wZW4oVEVTVEZOLCAndycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZwLndyaXRlKCcxKzFcbicpCisgICAgICAgICAgICBmcC53cml0ZSgnMSsxXG4nKQorICAgICAgICAgICAgZnAud3JpdGUoJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cnKQorICAgICAgICAgICAgZnAud3JpdGUoJy5cbicpCisgICAgICAgICAgICBmcC53cml0ZSgnRGVhciBKb2huXG4nKQorICAgICAgICAgICAgZnAud3JpdGUoJ1hYWCcqMTAwKQorICAgICAgICAgICAgZnAud3JpdGUoJ1lZWScqMTAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZnAuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfb3BlbihzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV90ZXN0ZmlsZSgpCisgICAgICAgIGZwID0gb3BlbihURVNURk4sICdyJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSg0KSwgJzErMVxuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoNCksICcxKzFcbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKCksICdUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nLlxuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoNCksICdEZWFyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoMTAwKSwgJyBKb2huXG4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkKDMwMCksICdYWFgnKjEwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZCgxMDAwKSwgJ1lZWScqMTAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB1bmxpbmsoVEVTVEZOKQorCisgICAgZGVmIHRlc3Rfb3JkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZCgnICcpLCAzMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmQoJ0EnKSwgNjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkKCdhJyksIDk3KQorICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZCh1bmljaHIoc3lzLm1heHVuaWNvZGUpKSwgc3lzLm1heHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3JkLCA0MikKKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcmQsIHVuaWNvZGUoIjEyIikpCisKKyAgICBkZWYgdGVzdF9wb3coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDAsMCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDAsMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDEsMCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDEsMSksIDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coMiwwKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coMiwxMCksIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDIsMjApLCAxMDI0KjEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDIsMzApLCAxMDI0KjEwMjQqMTAyNCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygtMiwwKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTIsMSksIC0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygtMiwyKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTIsMyksIC04KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDBMLDApLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygwTCwxKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coMUwsMCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDFMLDEpLCAxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDJMLDApLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyTCwxMCksIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDJMLDIwKSwgMTAyNCoxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyTCwzMCksIDEwMjQqMTAyNCoxMDI0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KC0yTCwwKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTJMLDEpLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTJMLDIpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygtMkwsMyksIC04KQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KDAuLDApLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwb3coMC4sMSksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBvdygxLiwwKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KDEuLDEpLCAxLikKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBvdygyLiwwKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KDIuLDEwKSwgMTAyNC4pCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KDIuLDIwKSwgMTAyNC4qMTAyNC4pCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KDIuLDMwKSwgMTAyNC4qMTAyNC4qMTAyNC4pCisKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwb3coLTIuLDApLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwb3coLTIuLDEpLCAtMi4pCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KC0yLiwyKSwgNC4pCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KC0yLiwzKSwgLTguKQorCisgICAgICAgIGZvciB4IGluIDIsIDJMLCAyLjA6CisgICAgICAgICAgICBmb3IgeSBpbiAxMCwgMTBMLCAxMC4wOgorICAgICAgICAgICAgICAgIGZvciB6IGluIDEwMDAsIDEwMDBMLCAxMDAwLjA6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoeCwgZmxvYXQpIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZSh5LCBmbG9hdCkgb3IgXAorICAgICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKHosIGZsb2F0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG93LCB4LCB5LCB6KQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwb3coeCwgeSwgeiksIDI0LjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3csIC0xLCAtMiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93LCAxLCAyLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvdywgLTFMLCAtMkwsIDNMKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3csIDFMLCAyTCwgMEwpCisgICAgICAgICMgV2lsbCByZXR1cm4gY29tcGxleCBpbiAzLjA6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvdywgLTM0Mi40MywgMC4yMzQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3cpCisKKyAgICBkZWYgdGVzdF9yYW5nZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZSgzKSwgWzAsIDEsIDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDEsIDUpLCBbMSwgMiwgMywgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKC0zKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMSwgMTAsIDMpLCBbMSwgNCwgN10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoNSwgLTUsIC0zKSwgWzUsIDIsIC0xLCAtNF0pCisKKyAgICAgICAgIyBOb3cgdGVzdCByYW5nZSgpIHdpdGggbG9uZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZSgtMioqMTAwKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMCwgLTIqKjEwMCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDAsIDIqKjEwMCwgLTEpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZSgwLCAyKioxMDAsIC0xKSwgW10pCisKKyAgICAgICAgYSA9IGxvbmcoMTAgKiBzeXMubWF4aW50KQorICAgICAgICBiID0gbG9uZygxMDAgKiBzeXMubWF4aW50KQorICAgICAgICBjID0gbG9uZyg1MCAqIHN5cy5tYXhpbnQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZShhLCBhKzIpLCBbYSwgYSsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZShhKzIsIGEsIC0xTCksIFthKzIsIGErMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoYSs0LCBhLCAtMiksIFthKzQsIGErMl0pCisKKyAgICAgICAgc2VxID0gcmFuZ2UoYSwgYiwgYykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihhLCBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYiwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXEpLCAyKQorCisgICAgICAgIHNlcSA9IHJhbmdlKGIsIGEsIC1jKQorICAgICAgICBzZWxmLmFzc2VydEluKGIsIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihhLCBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIDIpCisKKyAgICAgICAgc2VxID0gcmFuZ2UoLWEsIC1iLCAtYykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigtYSwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKC1iLCBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMSwgMiwgMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZ2UsIDEsIDIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmdlLCBhLCBhICsgMSwgbG9uZygwKSkKKworICAgICAgICBjbGFzcyBiYWR6ZXJvKGludCk6CisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBJbnZhbGlkIGNtcCBtYWtlcyB0aGlzIHVuaGFzaGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCByYW5nZSwgYSwgYSArIDEsIGJhZHplcm8oMSkpCisKKyAgICAgICAgIyBSZWplY3QgZmxvYXRzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAxLiwgMS4sIDEuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAxZTEwMCwgMWUxMDEsIDFlMTAxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMCwgNDIsICJzcGFtIikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCByYW5nZSwgLXN5cy5tYXhpbnQsIHN5cy5tYXhpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHJhbmdlLCAwLCAyKnN5cy5tYXhpbnQpCisKKyAgICAgICAgYmlnbnVtID0gMipzeXMubWF4aW50CisgICAgICAgIHNtYWxsbnVtID0gNDIKKyAgICAgICAgIyBPbGQtc3R5bGUgdXNlci1kZWZpbmVkIGNsYXNzIHdpdGggX19pbnRfXyBtZXRob2QKKyAgICAgICAgY2xhc3MgSTA6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbik6CisgICAgICAgICAgICAgICAgc2VsZi5uID0gaW50KG4pCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoSTAoYmlnbnVtKSwgSTAoYmlnbnVtICsgMSkpLCBbYmlnbnVtXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZShJMChzbWFsbG51bSksIEkwKHNtYWxsbnVtICsgMSkpLCBbc21hbGxudW1dKQorCisgICAgICAgICMgTmV3LXN0eWxlIHVzZXItZGVmaW5lZCBjbGFzcyB3aXRoIF9faW50X18gbWV0aG9kCisgICAgICAgIGNsYXNzIEkxKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbik6CisgICAgICAgICAgICAgICAgc2VsZi5uID0gaW50KG4pCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoSTEoYmlnbnVtKSwgSTEoYmlnbnVtICsgMSkpLCBbYmlnbnVtXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZShJMShzbWFsbG51bSksIEkxKHNtYWxsbnVtICsgMSkpLCBbc21hbGxudW1dKQorCisgICAgICAgICMgTmV3LXN0eWxlIHVzZXItZGVmaW5lZCBjbGFzcyB3aXRoIGZhaWxpbmcgX19pbnRfXyBtZXRob2QKKyAgICAgICAgY2xhc3MgSVgob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHJhbmdlLCBJWCgpKQorCisgICAgICAgICMgTmV3LXN0eWxlIHVzZXItZGVmaW5lZCBjbGFzcyB3aXRoIGludmFsaWQgX19pbnRfXyBtZXRob2QKKyAgICAgICAgY2xhc3MgSU4ob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAibm90IGEgbnVtYmVyIgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCBJTigpKQorCisgICAgICAgICMgRXhlcmNpc2UgdmFyaW91cyBjb21iaW5hdGlvbnMgb2YgYmFkIGFyZ3VtZW50cywgdG8gY2hlY2sKKyAgICAgICAgIyByZWZjb3VudGluZyBsb2dpYworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMCwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLjAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAuMCwgMC4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsIDAsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMCwgMC4wLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLCAwLjAsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMC4wLCAwLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLjAsIDAsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMC4wLCAwLjAsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAuMCwgMC4wLCAxLjApCisKKworCisgICAgZGVmIHRlc3RfaW5wdXRfYW5kX3Jhd19pbnB1dChzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV90ZXN0ZmlsZSgpCisgICAgICAgIGZwID0gb3BlbihURVNURk4sICdyJykKKyAgICAgICAgc2F2ZXN0ZGluID0gc3lzLnN0ZGluCisgICAgICAgIHNhdmVzdGRvdXQgPSBzeXMuc3Rkb3V0ICMgRWF0cyB0aGUgZWNobworICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuc3RkaW4gPSBmcAorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IEJpdEJ1Y2tldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlucHV0KCksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlucHV0KCd0ZXN0aW5nXG4nKSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2lucHV0KCksICdUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nLicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19pbnB1dCgndGVzdGluZ1xuJyksICdEZWFyIEpvaG4nKQorCisgICAgICAgICAgICAjIFNGIDE1MzUxNjU6IGRvbid0IHNlZ2ZhdWx0IG9uIGNsb3NlZCBzdGRpbgorICAgICAgICAgICAgIyBzeXMuc3Rkb3V0IG11c3QgYmUgYSByZWd1bGFyIGZpbGUgZm9yIHRyaWdnZXJpbmcKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlc3Rkb3V0CisgICAgICAgICAgICBzeXMuc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW5wdXQpCisKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBCaXRCdWNrZXQoKQorICAgICAgICAgICAgc3lzLnN0ZGluID0gY1N0cmluZ0lPLlN0cmluZ0lPKCJOVUxMXDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnB1dCwgNDIsIDQyKQorICAgICAgICAgICAgc3lzLnN0ZGluID0gY1N0cmluZ0lPLlN0cmluZ0lPKCIgICAgJ3doaXRlc3BhY2UnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5wdXQoKSwgJ3doaXRlc3BhY2UnKQorICAgICAgICAgICAgc3lzLnN0ZGluID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBpbnB1dCkKKworICAgICAgICAgICAgIyBTRiA4NzYxNzg6IG1ha2Ugc3VyZSBpbnB1dCgpIHJlc3BlY3QgZnV0dXJlIG9wdGlvbnMuCisgICAgICAgICAgICBzeXMuc3RkaW4gPSBjU3RyaW5nSU8uU3RyaW5nSU8oJzEvMicpCisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIGV4ZWMgY29tcGlsZSgncHJpbnQgaW5wdXQoKScsICd0ZXN0X2J1aWx0aW5fdG1wJywgJ2V4ZWMnKQorICAgICAgICAgICAgc3lzLnN0ZGluLnNlZWsoMCwgMCkKKyAgICAgICAgICAgIGV4ZWMgY29tcGlsZSgnZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbjtwcmludCBpbnB1dCgpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9idWlsdGluX3RtcCcsICdleGVjJykKKyAgICAgICAgICAgIHN5cy5zdGRpbi5zZWVrKDAsIDApCisgICAgICAgICAgICBleGVjIGNvbXBpbGUoJ3ByaW50IGlucHV0KCknLCAndGVzdF9idWlsdGluX3RtcCcsICdleGVjJykKKyAgICAgICAgICAgICMgVGhlIHJlc3VsdCB3ZSBleHBlY3QgZGVwZW5kcyBvbiB3aGV0aGVyIG5ldyBkaXZpc2lvbiBzZW1hbnRpY3MKKyAgICAgICAgICAgICMgYXJlIGFscmVhZHkgaW4gZWZmZWN0LgorICAgICAgICAgICAgaWYgMS8yID09IDA6CisgICAgICAgICAgICAgICAgIyBUaGlzIHRlc3Qgd2FzIGNvbXBpbGVkIHdpdGggb2xkIHNlbWFudGljcy4KKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IFsnMCcsICcwLjUnLCAnMCddCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgVGhpcyB0ZXN0IHdhcyBjb21waWxlZCB3aXRoIG5ldyBzZW1hbnRpY3MgKGUuZy4sIC1RbmV3CisgICAgICAgICAgICAgICAgIyB3YXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IFsnMC41JywgJzAuNScsICcwLjUnXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuc3Rkb3V0LmdldHZhbHVlKCkuc3BsaXRsaW5lcygpLCBleHBlY3RlZCkKKworICAgICAgICAgICAgZGVsIHN5cy5zdGRvdXQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgaW5wdXQsICdwcm9tcHQnKQorICAgICAgICAgICAgZGVsIHN5cy5zdGRpbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBpbnB1dCwgJ3Byb21wdCcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc3RkaW4gPSBzYXZlc3RkaW4KKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlc3Rkb3V0CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorCisgICAgZGVmIHRlc3RfcmVkdWNlKHNlbGYpOgorICAgICAgICBhZGQgPSBsYW1iZGEgeCwgeTogeCt5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGFkZCwgWydhJywgJ2InLCAnYyddLCAnJyksICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmVkdWNlKGFkZCwgW1snYScsICdjJ10sIFtdLCBbJ2QnLCAndyddXSwgW10pLAorICAgICAgICAgICAgWydhJywnYycsJ2QnLCd3J10KKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShsYW1iZGEgeCwgeTogeCp5LCByYW5nZSgyLDgpLCAxKSwgNTA0MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlZHVjZShsYW1iZGEgeCwgeTogeCp5LCByYW5nZSgyLDIxKSwgMUwpLAorICAgICAgICAgICAgMjQzMjkwMjAwODE3NjY0MDAwMEwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShhZGQsIFNxdWFyZXMoMTApKSwgMjg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShhZGQsIFNxdWFyZXMoMTApLCAwKSwgMjg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShhZGQsIFNxdWFyZXMoMCksIDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZHVjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZHVjZSwgNDIsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZHVjZSwgNDIsIDQyLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIE5vbmUsIHJhbmdlKDUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZHVjZSwgYWRkLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoNDIsICIxIiksICIxIikgIyBmdW5jIGlzIG5ldmVyIGNhbGxlZCB3aXRoIG9uZSBpdGVtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKDQyLCAiIiwgIjEiKSwgIjEiKSAjIGZ1bmMgaXMgbmV2ZXIgY2FsbGVkIHdpdGggb25lIGl0ZW0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIDQyLCAoNDIsIDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIGFkZCwgW10pICMgYXJnIDIgbXVzdCBub3QgYmUgZW1wdHkgc2VxdWVuY2Ugd2l0aCBubyBpbml0aWFsIHZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCBhZGQsICIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZHVjZSwgYWRkLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoYWRkLCBbXSwgTm9uZSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGFkZCwgW10sIDQyKSwgNDIpCisKKyAgICAgICAgY2xhc3MgQmFkU2VxOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJlZHVjZSwgNDIsIEJhZFNlcSgpKQorCisgICAgZGVmIHRlc3RfcmVsb2FkKHNlbGYpOgorICAgICAgICBpbXBvcnQgbWFyc2hhbAorICAgICAgICByZWxvYWQobWFyc2hhbCkKKyAgICAgICAgaW1wb3J0IHN0cmluZworICAgICAgICByZWxvYWQoc3RyaW5nKQorICAgICAgICAjIyBpbXBvcnQgc3lzCisgICAgICAgICMjIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCByZWxvYWQsIHN5cykKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcignJyksICdcJ1wnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKDApLCAnMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcigwTCksICcwTCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcigoKSksICcoKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihbXSksICdbXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih7fSksICd7fScpCisgICAgICAgIGEgPSBbXQorICAgICAgICBhLmFwcGVuZChhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYSksICdbWy4uLl1dJykKKyAgICAgICAgYSA9IHt9CisgICAgICAgIGFbMF0gPSBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihhKSwgJ3swOiB7Li4ufX0nKQorCisgICAgZGVmIHRlc3Rfcm91bmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMC4wKSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocm91bmQoMC4wKSksIGZsb2F0KSAgIyBXaWxsIGJlIGludCBpbiAzLjAuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMS4wKSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDEwLjApLCAxMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDEwMDAwMDAwMDAuMCksIDEwMDAwMDAwMDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxZTIwKSwgMWUyMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0xLjApLCAtMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0xMC4wKSwgLTEwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTEwMDAwMDAwMDAuMCksIC0xMDAwMDAwMDAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTFlMjApLCAtMWUyMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDAuMSksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxLjEpLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMTAuMSksIDEwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMTAwMDAwMDAwMC4xKSwgMTAwMDAwMDAwMC4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTEuMSksIC0xLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTEwLjEpLCAtMTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtMTAwMDAwMDAwMC4xKSwgLTEwMDAwMDAwMDAuMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDAuOSksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg5LjkpLCAxMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDk5OTk5OTk5OS45KSwgMTAwMDAwMDAwMC4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTAuOSksIC0xLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTkuOSksIC0xMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC05OTk5OTk5OTkuOSksIC0xMDAwMDAwMDAwLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtOC4wLCAtMSksIC0xMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocm91bmQoLTguMCwgLTEpKSwgZmxvYXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJvdW5kKC04LjAsIDApKSwgZmxvYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyb3VuZCgtOC4wLCAxKSksIGZsb2F0KQorCisgICAgICAgICMgQ2hlY2sgaGFsZiByb3VuZGluZyBiZWhhdmlvdXIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNS41KSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg2LjUpLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC01LjUpLCAtNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtNi41KSwgLTcpCisKKyAgICAgICAgIyBDaGVjayBiZWhhdmlvciBvbiBpbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoOCksIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTgpLCAtOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJvdW5kKDApKSwgZmxvYXQpICAjIFdpbGwgYmUgaW50IGluIDMuMC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJvdW5kKC04LCAtMSkpLCBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJvdW5kKC04LCAwKSksIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocm91bmQoLTgsIDEpKSwgZmxvYXQpCisKKyAgICAgICAgIyB0ZXN0IG5ldyBrd2FyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZChudW1iZXI9LTguMCwgbmRpZ2l0cz0tMSksIC0xMC4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcm91bmQpCisKKyAgICAgICAgIyB0ZXN0IGdlbmVyaWMgcm91bmRpbmcgZGVsZWdhdGlvbiBmb3IgcmVhbHMKKyAgICAgICAgY2xhc3MgVGVzdFJvdW5kKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAyMy4wCisKKyAgICAgICAgY2xhc3MgVGVzdE5vUm91bmQob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKFRlc3RSb3VuZCgpKSwgMjMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByb3VuZCwgMSwgMiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByb3VuZCwgVGVzdE5vUm91bmQoKSkKKworICAgICAgICB0ID0gVGVzdE5vUm91bmQoKQorICAgICAgICB0Ll9fZmxvYXRfXyA9IGxhbWJkYSAqYXJnczogYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJvdW5kLCB0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJvdW5kLCB0LCAwKQorCisgICAgIyBTb21lIHZlcnNpb25zIG9mIGdsaWJjIGZvciBhbHBoYSBoYXZlIGEgYnVnIHRoYXQgYWZmZWN0cworICAgICMgZmxvYXQgLT4gaW50ZWdlciByb3VuZGluZyAoZmxvb3IsIGNlaWwsIHJpbnQsIHJvdW5kKSBmb3IKKyAgICAjIHZhbHVlcyBpbiB0aGUgcmFuZ2UgWzIqKjUyLCAyKio1MykuICBTZWU6CisgICAgIworICAgICMgICBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01MzUwCisgICAgIworICAgICMgV2Ugc2tpcCB0aGlzIHRlc3Qgb24gTGludXgvYWxwaGEgaWYgaXQgd291bGQgZmFpbC4KKyAgICBsaW51eF9hbHBoYSA9IChwbGF0Zm9ybS5zeXN0ZW0oKS5zdGFydHN3aXRoKCdMaW51eCcpIGFuZAorICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtLm1hY2hpbmUoKS5zdGFydHN3aXRoKCdhbHBoYScpKQorICAgIHN5c3RlbV9yb3VuZF9idWcgPSByb3VuZCg1ZTE1KzEpICE9IDVlMTUrMQorICAgIEB1bml0dGVzdC5za2lwSWYobGludXhfYWxwaGEgYW5kIHN5c3RlbV9yb3VuZF9idWcsCisgICAgICAgICAgICAgICAgICAgICAidGVzdCB3aWxsIGZhaWw7ICBmYWlsdXJlIGlzIHByb2JhYmx5IGR1ZSB0byBhICIKKyAgICAgICAgICAgICAgICAgICAgICJidWdneSBzeXN0ZW0gcm91bmQgZnVuY3Rpb24iKQorICAgIGRlZiB0ZXN0X3JvdW5kX2xhcmdlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxODY5OiBpbnRlZ3JhbCBmbG9hdHMgc2hvdWxkIHJlbWFpbiB1bmNoYW5nZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg1ZTE1LTEpLCA1ZTE1LTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNWUxNSksIDVlMTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNWUxNSsxKSwgNWUxNSsxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDVlMTUrMiksIDVlMTUrMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg1ZTE1KzMpLCA1ZTE1KzMpCisKKyAgICBkZWYgdGVzdF9zZXRhdHRyKHNlbGYpOgorICAgICAgICBzZXRhdHRyKHN5cywgJ3NwYW0nLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5zcGFtLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIHN5cywgMSwgJ3NwYW0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIpCisKKyAgICBkZWYgdGVzdF9zdW0oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKFtdKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0ocmFuZ2UoMiw4KSksIDI3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bShpdGVyKHJhbmdlKDIsOCkpKSwgMjcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKFNxdWFyZXMoMTApKSwgMjg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bShpdGVyKFNxdWFyZXMoMTApKSksIDI4NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oW1sxXSwgWzJdLCBbM11dLCBbXSksIFsxLCAyLCAzXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN1bSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdW0sIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN1bSwgWydhJywgJ2InLCAnYyddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN1bSwgWydhJywgJ2InLCAnYyddLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdW0sIFtbMV0sIFsyXSwgWzNdXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdW0sIFt7MjozfV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3VtLCBbezI6M31dKjIsIHsyOjN9KQorCisgICAgICAgIGNsYXNzIEJhZFNlcToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdW0sIEJhZFNlcSgpKQorCisgICAgICAgIGVtcHR5ID0gW10KKyAgICAgICAgc3VtKChbeF0gZm9yIHggaW4gcmFuZ2UoMTApKSwgZW1wdHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW1wdHksIFtdKQorCisgICAgZGVmIHRlc3RfdHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKCcnKSwgIHR5cGUoJzEyMycpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHR5cGUoJycpLCB0eXBlKCgpKSkKKworICAgIGRlZiB0ZXN0X3VuaWNocihzZWxmKToKKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljaHIoMzIpLCB1bmljb2RlKCcgJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNocig2NSksIHVuaWNvZGUoJ0EnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY2hyKDk3KSwgdW5pY29kZSgnYScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICB1bmljaHIoc3lzLm1heHVuaWNvZGUpLAorICAgICAgICAgICAgICAgIHVuaWNvZGUoJ1xcVSUwOHgnICUgKHN5cy5tYXh1bmljb2RlKSwgJ3VuaWNvZGUtZXNjYXBlJykKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHVuaWNociwgc3lzLm1heHVuaWNvZGUrMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdW5pY2hyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE92ZXJmbG93RXJyb3IsIFZhbHVlRXJyb3IpLCB1bmljaHIsIDIqKjMyKQorCisgICAgIyBXZSBkb24ndCB3YW50IHNlbGYgaW4gdmFycygpLCBzbyB0aGVzZSBhcmUgc3RhdGljIG1ldGhvZHMKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ2V0X3ZhcnNfZjAoKToKKyAgICAgICAgcmV0dXJuIHZhcnMoKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnZXRfdmFyc19mMigpOgorICAgICAgICBCdWlsdGluVGVzdC5nZXRfdmFyc19mMCgpCisgICAgICAgIGEgPSAxCisgICAgICAgIGIgPSAyCisgICAgICAgIHJldHVybiB2YXJzKCkKKworICAgIGNsYXNzIENfZ2V0X3ZhcnMob2JqZWN0KToKKyAgICAgICAgZGVmIGdldERpY3Qoc2VsZik6CisgICAgICAgICAgICByZXR1cm4geydhJzoyfQorICAgICAgICBfX2RpY3RfXyA9IHByb3BlcnR5KGZnZXQ9Z2V0RGljdCkKKworICAgIGRlZiB0ZXN0X3ZhcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHZhcnMoKSksIHNldChkaXIoKSkpCisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQodmFycyhzeXMpKSwgc2V0KGRpcihzeXMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdldF92YXJzX2YwKCksIHt9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X3ZhcnNfZjIoKSwgeydhJzogMSwgJ2InOiAyfSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB2YXJzLCA0MiwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdmFycywgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFycyhzZWxmLkNfZ2V0X3ZhcnMoKSksIHsnYSc6Mn0pCisKKyAgICBkZWYgdGVzdF96aXAoc2VsZik6CisgICAgICAgIGEgPSAoMSwgMiwgMykKKyAgICAgICAgYiA9ICg0LCA1LCA2KQorICAgICAgICB0ID0gWygxLCA0KSwgKDIsIDUpLCAoMywgNildCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKGEsIGIpLCB0KQorICAgICAgICBiID0gWzQsIDUsIDZdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKGEsIGIpLCB0KQorICAgICAgICBiID0gKDQsIDUsIDYsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKGEsIGIpLCB0KQorICAgICAgICBjbGFzcyBJOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIGlmIGkgPCAwIG9yIGkgPiAyOiByYWlzZSBJbmRleEVycm9yCisgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyA0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKGEsIEkoKSksIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCgqW10pLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB6aXAsIE5vbmUpCisgICAgICAgIGNsYXNzIEc6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgemlwLCBhLCBHKCkpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgemlwIGRvZXNuJ3QgdHJ5IHRvIGFsbG9jYXRlIGEgYmlsbGlvbiBlbGVtZW50cyBmb3IgdGhlCisgICAgICAgICMgcmVzdWx0IGxpc3Qgd2hlbiBvbmUgb2YgaXRzIGFyZ3VtZW50cyBkb2Vzbid0IHNheSBob3cgbG9uZyBpdCBpcy4KKyAgICAgICAgIyBBIE1lbW9yeUVycm9yIGlzIHRoZSBtb3N0IGxpa2VseSBmYWlsdXJlIG1vZGUuCisgICAgICAgIGNsYXNzIFNlcXVlbmNlV2l0aG91dEFMZW5ndGg6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgaWYgaSA9PSA1OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHppcChTZXF1ZW5jZVdpdGhvdXRBTGVuZ3RoKCksIHhyYW5nZSgyKiozMCkpLAorICAgICAgICAgICAgbGlzdChlbnVtZXJhdGUocmFuZ2UoNSkpKQorICAgICAgICApCisKKyAgICAgICAgY2xhc3MgQmFkU2VxOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIGlmIGkgPT0gNToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHppcCwgQmFkU2VxKCksIEJhZFNlcSgpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIGJhc2ljIG1hY2hpbmVyeSBvZiB0aGUgZm9ybWF0KCkgYnVpbHRpbi4gIERvbid0IHRlc3QKKyAgICAgICAgIyAgdGhlIHNwZWNpZmljcyBvZiB0aGUgdmFyaW91cyBmb3JtYXR0ZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDMsICcnKSwgJzMnKQorCisgICAgICAgICMgUmV0dXJucyBzb21lIGNsYXNzZXMgdG8gdXNlIGZvciB2YXJpb3VzIHRlc3RzLiAgVGhlcmUncworICAgICAgICAjICBhbiBvbGQtc3R5bGUgdmVyc2lvbiwgYW5kIGEgbmV3LXN0eWxlIHZlcnNpb24KKyAgICAgICAgZGVmIGNsYXNzZXNfbmV3KCk6CisgICAgICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyKHNlbGYueCkgKyBmb3JtYXRfc3BlYworICAgICAgICAgICAgY2xhc3MgRGVyaXZlZEZyb21BKEEpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgY2xhc3MgU2ltcGxlKG9iamVjdCk6IHBhc3MKKyAgICAgICAgICAgIGNsYXNzIERlcml2ZWRGcm9tU2ltcGxlKFNpbXBsZSk6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyKHNlbGYueCkgKyBmb3JtYXRfc3BlYworICAgICAgICAgICAgY2xhc3MgRGVyaXZlZEZyb21TaW1wbGUyKERlcml2ZWRGcm9tU2ltcGxlKTogcGFzcworICAgICAgICAgICAgcmV0dXJuIEEsIERlcml2ZWRGcm9tQSwgRGVyaXZlZEZyb21TaW1wbGUsIERlcml2ZWRGcm9tU2ltcGxlMgorCisgICAgICAgICMgSW4gMy4wLCBjbGFzc2VzX2NsYXNzaWMgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgY2xhc3Nlc19uZXcKKyAgICAgICAgZGVmIGNsYXNzZXNfY2xhc3NpYygpOgorICAgICAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYueCA9IHgKKyAgICAgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHIoc2VsZi54KSArIGZvcm1hdF9zcGVjCisgICAgICAgICAgICBjbGFzcyBEZXJpdmVkRnJvbUEoQSk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBjbGFzcyBTaW1wbGU6IHBhc3MKKyAgICAgICAgICAgIGNsYXNzIERlcml2ZWRGcm9tU2ltcGxlKFNpbXBsZSk6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyKHNlbGYueCkgKyBmb3JtYXRfc3BlYworICAgICAgICAgICAgY2xhc3MgRGVyaXZlZEZyb21TaW1wbGUyKERlcml2ZWRGcm9tU2ltcGxlKTogcGFzcworICAgICAgICAgICAgcmV0dXJuIEEsIERlcml2ZWRGcm9tQSwgRGVyaXZlZEZyb21TaW1wbGUsIERlcml2ZWRGcm9tU2ltcGxlMgorCisgICAgICAgIGRlZiBjbGFzc190ZXN0KEEsIERlcml2ZWRGcm9tQSwgRGVyaXZlZEZyb21TaW1wbGUsIERlcml2ZWRGcm9tU2ltcGxlMik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChBKDMpLCAnc3BlYycpLCAnM3NwZWMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoRGVyaXZlZEZyb21BKDQpLCAnc3BlYycpLCAnNHNwZWMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoRGVyaXZlZEZyb21TaW1wbGUoNSksICdhYmMnKSwgJzVhYmMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoRGVyaXZlZEZyb21TaW1wbGUyKDEwKSwgJ2FiY2RlZicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTBhYmNkZWYnKQorCisgICAgICAgIGNsYXNzX3Rlc3QoKmNsYXNzZXNfbmV3KCkpCisgICAgICAgIGNsYXNzX3Rlc3QoKmNsYXNzZXNfY2xhc3NpYygpKQorCisgICAgICAgIGRlZiBlbXB0eV9mb3JtYXRfc3BlYyh2YWx1ZSk6CisgICAgICAgICAgICAjIHRlc3QgdGhhdDoKKyAgICAgICAgICAgICMgIGZvcm1hdCh4LCAnJykgPT0gc3RyKHgpCisgICAgICAgICAgICAjICBmb3JtYXQoeCkgPT0gc3RyKHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh2YWx1ZSwgIiIpLCBzdHIodmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQodmFsdWUpLCBzdHIodmFsdWUpKQorCisgICAgICAgICMgZm9yIGJ1aWx0aW4gdHlwZXMsIGZvcm1hdCh4LCAiIikgPT0gc3RyKHgpCisgICAgICAgIGVtcHR5X2Zvcm1hdF9zcGVjKDE3KioxMykKKyAgICAgICAgZW1wdHlfZm9ybWF0X3NwZWMoMS4wKQorICAgICAgICBlbXB0eV9mb3JtYXRfc3BlYygzLjE0MTVlMTA0KQorICAgICAgICBlbXB0eV9mb3JtYXRfc3BlYygtMy4xNDE1ZTEwNCkKKyAgICAgICAgZW1wdHlfZm9ybWF0X3NwZWMoMy4xNDE1ZS0xMDQpCisgICAgICAgIGVtcHR5X2Zvcm1hdF9zcGVjKC0zLjE0MTVlLTEwNCkKKyAgICAgICAgZW1wdHlfZm9ybWF0X3NwZWMob2JqZWN0KQorICAgICAgICBlbXB0eV9mb3JtYXRfc3BlYyhOb25lKQorCisgICAgICAgICMgVHlwZUVycm9yIGJlY2F1c2Ugc2VsZi5fX2Zvcm1hdF9fIHJldHVybnMgdGhlIHdyb25nIHR5cGUKKyAgICAgICAgY2xhc3MgQmFkRm9ybWF0UmVzdWx0OgorICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiAxLjAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmb3JtYXQsIEJhZEZvcm1hdFJlc3VsdCgpLCAiIikKKworICAgICAgICAjIFR5cGVFcnJvciBiZWNhdXNlIGZvcm1hdF9zcGVjIGlzIG5vdCB1bmljb2RlIG9yIHN0cgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZvcm1hdCwgb2JqZWN0KCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZm9ybWF0LCBvYmplY3QoKSwgb2JqZWN0KCkpCisKKyAgICAgICAgIyB0ZXN0cyBmb3Igb2JqZWN0Ll9fZm9ybWF0X18gcmVhbGx5IGJlbG9uZyBlbHNld2hlcmUsIGJ1dAorICAgICAgICAjICB0aGVyZSdzIG5vIGdvb2QgcGxhY2UgdG8gcHV0IHRoZW0KKyAgICAgICAgeCA9IG9iamVjdCgpLl9fZm9ybWF0X18oJycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4LnN0YXJ0c3dpdGgoJzxvYmplY3Qgb2JqZWN0IGF0JykpCisKKyAgICAgICAgIyBmaXJzdCBhcmd1bWVudCB0byBvYmplY3QuX19mb3JtYXRfXyBtdXN0IGJlIHN0cmluZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9iamVjdCgpLl9fZm9ybWF0X18sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb2JqZWN0KCkuX19mb3JtYXRfXywgb2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb2JqZWN0KCkuX19mb3JtYXRfXywgTm9uZSkKKworICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICMgSXNzdWUgIzc5OTQ6IG9iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0IHN0cmluZyBpcworICAgICAgICAjICBwZW5kaW5nIGRlcHJlY2F0ZWQKKyAgICAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9mb3JtYXRfc3RyaW5nKG9iaiwgZm10X3N0ciwgc2hvdWxkX3JhaXNlX3dhcm5pbmcpOgorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgZm9ybWF0KG9iaiwgZm10X3N0cikKKyAgICAgICAgICAgIGlmIHNob3VsZF9yYWlzZV93YXJuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh3WzBdLm1lc3NhZ2UsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZycsIHN0cih3WzBdLm1lc3NhZ2UpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKKworICAgICAgICBmbXRfc3RycyA9IFsnJywgJ3MnLCB1JycsIHUncyddCisKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIGZtdF9zdHIpOgorICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXQoJycsIGZtdF9zdHIpCisKKyAgICAgICAgZm9yIGZtdF9zdHIgaW4gZm10X3N0cnM6CisgICAgICAgICAgICB0ZXN0X2RlcHJlY2F0ZWRfZm9ybWF0X3N0cmluZyhBKCksIGZtdF9zdHIsIEZhbHNlKQorCisgICAgICAgIGNsYXNzIEI6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGZvciBjbHMgaW4gW29iamVjdCwgQiwgQ106CisgICAgICAgICAgICBmb3IgZm10X3N0ciBpbiBmbXRfc3RyczoKKyAgICAgICAgICAgICAgICB0ZXN0X2RlcHJlY2F0ZWRfZm9ybWF0X3N0cmluZyhjbHMoKSwgZm10X3N0ciwgbGVuKGZtdF9zdHIpICE9IDApCisgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBjYW4gdGFrZSBhIHN1YmNsYXNzIG9mIHN0ciBhcyBhIGZvcm1hdCBzcGVjCisgICAgICAgIGNsYXNzIERlcml2ZWRGcm9tU3RyKHN0cik6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMCwgRGVyaXZlZEZyb21TdHIoJzEwJykpLCAnICAgICAgICAgMCcpCisKKyAgICBkZWYgdGVzdF9iaW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKDApLCAnMGIwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oMSksICcwYjEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbigtMSksICctMGIxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oMioqNjUpLCAnMGIxJyArICcwJyAqIDY1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbigyKio2NS0xKSwgJzBiJyArICcxJyAqIDY1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbigtKDIqKjY1KSksICctMGIxJyArICcwJyAqIDY1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbigtKDIqKjY1LTEpKSwgJy0wYicgKyAnMScgKiA2NSkKKworICAgIGRlZiB0ZXN0X2J5dGVhcnJheV90cmFuc2xhdGUoc2VsZik6CisgICAgICAgIHggPSBieXRlYXJyYXkoImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHgudHJhbnNsYXRlLCAiMSIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgeC50cmFuc2xhdGUsICIxIioyNTYsIDEpCisKK2NsYXNzIFRlc3RTb3J0ZWQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIGRhdGEgPSByYW5nZSgxMDApCisgICAgICAgIGNvcHkgPSBkYXRhWzpdCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGNvcHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc29ydGVkKGNvcHkpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRhdGEsIGNvcHkpCisKKyAgICAgICAgZGF0YS5yZXZlcnNlKCkKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoY29weSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBzb3J0ZWQoY29weSwgY21wPWxhbWJkYSB4LCB5OiBjbXAoeSx4KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGF0YSwgY29weSkKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoY29weSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBzb3J0ZWQoY29weSwga2V5PWxhbWJkYSB4OiAteCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGF0YSwgY29weSkKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoY29weSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBzb3J0ZWQoY29weSwgcmV2ZXJzZT0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYXRhLCBjb3B5KQorCisgICAgZGVmIHRlc3RfaW5wdXR0eXBlcyhzZWxmKToKKyAgICAgICAgcyA9ICdhYnJhY2FkYWJyYScKKyAgICAgICAgdHlwZXMgPSBbbGlzdCwgdHVwbGVdCisgICAgICAgIGlmIGhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIHR5cGVzLmluc2VydCgwLCB1bmljb2RlKQorICAgICAgICBmb3IgVCBpbiB0eXBlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHMpLCBzb3J0ZWQoVChzKSkpCisKKyAgICAgICAgcyA9ICcnLmpvaW4oZGljdC5mcm9ta2V5cyhzKS5rZXlzKCkpICAjIHVuaXF1ZSBsZXR0ZXJzIG9ubHkKKyAgICAgICAgdHlwZXMgPSBbc2V0LCBmcm96ZW5zZXQsIGxpc3QsIHR1cGxlLCBkaWN0LmZyb21rZXlzXQorICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICB0eXBlcy5pbnNlcnQoMCwgdW5pY29kZSkKKyAgICAgICAgZm9yIFQgaW4gdHlwZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzKSwgc29ydGVkKFQocykpKQorCisgICAgZGVmIHRlc3RfYmFkZGVjb3JhdG9yKHNlbGYpOgorICAgICAgICBkYXRhID0gJ1RoZSBxdWljayBCcm93biBmb3ggSnVtcGVkIG92ZXIgVGhlIGxhenkgRG9nJy5zcGxpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc29ydGVkLCBkYXRhLCBOb25lLCBsYW1iZGEgeCx5OiAwKQorCitkZWYgX3J1bl91bml0dGVzdCgqYXJncyk6CisgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICAgICAgKCIuKyBub3Qgc3VwcG9ydGVkIGluIDMueCIsIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICAoIi4rIGlzIHJlbmFtZWQgdG8gaW1wLnJlbG9hZCIsIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICAoImNsYXNzaWMgaW50IGRpdmlzaW9uIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHJ1bl91bml0dGVzdCgqYXJncykKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIHRlc3RfY2xhc3NlcyA9IChCdWlsdGluVGVzdCwgVGVzdFNvcnRlZCkKKworICAgIF9ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKworICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZworICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgY291bnRzID0gW05vbmVdICogNQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKGNvdW50cykpOgorICAgICAgICAgICAgX3J1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgIHByaW50IGNvdW50cworCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2J5dGVzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYnl0ZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg4YjkzMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2J5dGVzLnB5CkBAIC0wLDAgKzEsMTE0MCBAQAorIiIiVW5pdCB0ZXN0cyBmb3IgdGhlIGJ5dGVzIGFuZCBieXRlYXJyYXkgdHlwZXMuCisKK1hYWCBUaGlzIGlzIGEgbWVzcy4gIENvbW1vbiB0ZXN0cyBzaG91bGQgYmUgbW92ZWQgdG8gYnVmZmVyX3Rlc3RzLnB5LAord2hpY2ggaXRzZWxmIG91Z2h0IHRvIGJlIHVuaWZpZWQgd2l0aCBzdHJpbmdfdGVzdHMucHkgKGFuZCB0aGUgbGF0dGVyCitzaG91bGQgYmUgbW9kZXJuaXplZCkuCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCBjb3B5CitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgcGlja2xlCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0CitpbXBvcnQgdGVzdC5zdHJpbmdfdGVzdHMKK2ltcG9ydCB0ZXN0LmJ1ZmZlcl90ZXN0cworCisKK2lmIHN5cy5mbGFncy5ieXRlc193YXJuaW5nOgorICAgIGRlZiBjaGVja19ieXRlc193YXJuaW5ncyhmdW5jKToKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgICAgICBkZWYgd3JhcHBlcigqYXJncywgKiprdyk6CisgICAgICAgICAgICB3aXRoIHRlc3QudGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgQnl0ZXNXYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3cpCisgICAgICAgIHJldHVybiB3cmFwcGVyCitlbHNlOgorICAgICMgbm8tb3AKKyAgICBkZWYgY2hlY2tfYnl0ZXNfd2FybmluZ3MoZnVuYyk6CisgICAgICAgIHJldHVybiBmdW5jCisKKworY2xhc3MgSW5kZXhhYmxlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT0wKToKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworCitjbGFzcyBCYXNlQnl0ZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGIpLCBzZWxmLnR5cGUydGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLl9fY2xhc3NfXywgc2VsZi50eXBlMnRlc3QpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogYlswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBiWzFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IGJbc3lzLm1heGludF0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogYltzeXMubWF4aW50KzFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IGJbMTAqKjEwMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogYlstMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogYlstMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogYlstc3lzLm1heGludF0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogYlstc3lzLm1heGludC0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBiWy1zeXMubWF4aW50LTJdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IGJbLTEwKioxMDBdKQorCisgICAgZGVmIHRlc3RfZnJvbV9saXN0KHNlbGYpOgorICAgICAgICBpbnRzID0gbGlzdChyYW5nZSgyNTYpKQorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoaSBmb3IgaSBpbiBpbnRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiKSwgMjU2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIGludHMpCisKKyAgICBkZWYgdGVzdF9mcm9tX2luZGV4KHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoW0luZGV4YWJsZSgpLCBJbmRleGFibGUoMSksIEluZGV4YWJsZSgyNTQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4YWJsZSgyNTUpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBbMCwgMSwgMjU0LCAyNTVdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgW0luZGV4YWJsZSgtMSldKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgW0luZGV4YWJsZSgyNTYpXSkKKworICAgIGRlZiB0ZXN0X2Zyb21fc3NpemUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoMCksIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdCgxKSwgYidceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdCg1KSwgYidceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCAtMSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KCcwJywgJ2FzY2lpJyksIGInMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYicwJyksIGInMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBzeXMubWF4c2l6ZSArIDEpCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl90eXBlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgMC4wKQorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgcGFzcworICAgICAgICAjIGFsbG93ZWQgaW4gMi54CisgICAgICAgICNzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBbIjAiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgWzAuMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFtOb25lXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgW0MoKV0pCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl92YWx1ZV9lcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBbLTFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgWy1zeXMubWF4aW50XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFstc3lzLm1heGludC0xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFstc3lzLm1heGludC0yXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFstMTAqKjEwMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBbMjU2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFsyNTddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgW3N5cy5tYXhpbnRdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgW3N5cy5tYXhpbnQrMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBbMTAqKjEwMF0pCisKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgorICAgICAgICBiMSA9IHNlbGYudHlwZTJ0ZXN0KFsxLCAyLCAzXSkKKyAgICAgICAgYjIgPSBzZWxmLnR5cGUydGVzdChbMSwgMiwgM10pCisgICAgICAgIGIzID0gc2VsZi50eXBlMnRlc3QoWzEsIDNdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYjEsIGIyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYjIgIT0gYjMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiMSA8PSBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIxIDw9IGIzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYjEgPCAgYjMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiMSA+PSBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIzID49IGIyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYjMgPiAgYjIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMSAhPSBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMiA9PSBiMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMSA+ICBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMSA+ICBiMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMSA+PSBiMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMSA8ICBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMyA8ICBiMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiMyA8PSBiMikKKworICAgIEBjaGVja19ieXRlc193YXJuaW5ncworICAgIGRlZiB0ZXN0X2NvbXBhcmVfdG9fc3RyKHNlbGYpOgorICAgICAgICAjIEJ5dGUgY29tcGFyaXNvbnMgd2l0aCB1bmljb2RlIHNob3VsZCBhbHdheXMgZmFpbCEKKyAgICAgICAgIyBUZXN0IHRoaXMgZm9yIGFsbCBleHBlY3RlZCBieXRlIG9yZGVycyBhbmQgVW5pY29kZSBjaGFyYWN0ZXIgc2l6ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIlwwYVwwYlwwYyIpID09IHUiYWJjIiwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiJcMFwwXDBhXDBcMFwwYlwwXDBcMGMiKSA9PSB1ImFiYyIsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiYVwwYlwwY1wwIikgPT0gdSJhYmMiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiImFcMFwwXDBiXDBcMFwwY1wwXDBcMCIpID09IHUiYWJjIiwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoKSA9PSB1bmljb2RlKCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KCkgIT0gdW5pY29kZSgpLCBUcnVlKQorCisgICAgZGVmIHRlc3RfcmV2ZXJzZWQoc2VsZik6CisgICAgICAgIGlucHV0ID0gbGlzdChtYXAob3JkLCAiSGVsbG8iKSkKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGlucHV0KQorICAgICAgICBvdXRwdXQgPSBsaXN0KHJldmVyc2VkKGIpKQorICAgICAgICBpbnB1dC5yZXZlcnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIGlucHV0KQorCisgICAgZGVmIHRlc3RfZ2V0c2xpY2Uoc2VsZik6CisgICAgICAgIGRlZiBieShzKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnR5cGUydGVzdChtYXAob3JkLCBzKSkKKyAgICAgICAgYiA9IGJ5KCJIZWxsbywgd29ybGQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6NV0sIGJ5KCJIZWxsbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMTo1XSwgYnkoImVsbG8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzU6N10sIGJ5KCIsICIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbNzpdLCBieSgid29ybGQiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzc6MTJdLCBieSgid29ybGQiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzc6MTAwXSwgYnkoIndvcmxkIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzotN10sIGJ5KCJIZWxsbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbLTExOi03XSwgYnkoImVsbG8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWy03Oi01XSwgYnkoIiwgIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYlstNTpdLCBieSgid29ybGQiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWy01OjEyXSwgYnkoIndvcmxkIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYlstNToxMDBdLCBieSgid29ybGQiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWy0xMDA6NV0sIGJ5KCJIZWxsbyIpKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kZWRfZ2V0c2xpY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCBleHRlbmRlZCBzbGljaW5nIGJ5IGNvbXBhcmluZyB3aXRoIGxpc3Qgc2xpY2luZy4KKyAgICAgICAgTCA9IGxpc3QocmFuZ2UoMjU1KSkKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KEwpCisgICAgICAgIGluZGljZXMgPSAoMCwgTm9uZSwgMSwgMywgMTksIDEwMCwgLTEsIC0yLCAtMzEsIC0xMDApCisgICAgICAgIGZvciBzdGFydCBpbiBpbmRpY2VzOgorICAgICAgICAgICAgZm9yIHN0b3AgaW4gaW5kaWNlczoKKyAgICAgICAgICAgICAgICAjIFNraXAgc3RlcCAwIChpbnZhbGlkKQorICAgICAgICAgICAgICAgIGZvciBzdGVwIGluIGluZGljZXNbMTpdOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbc3RhcnQ6c3RvcDpzdGVwXSwgc2VsZi50eXBlMnRlc3QoTFtzdGFydDpzdG9wOnN0ZXBdKSkKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzYW1wbGUgPSB1IkhlbGxvIHdvcmxkXG5cdTEyMzRcdTU2NzhcdTlhYmNcdWRlZjAiCisgICAgICAgIGZvciBlbmMgaW4gKCJ1dGY4IiwgInV0ZjE2Iik6CisgICAgICAgICAgICBiID0gc2VsZi50eXBlMnRlc3Qoc2FtcGxlLCBlbmMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIHNlbGYudHlwZTJ0ZXN0KHNhbXBsZS5lbmNvZGUoZW5jKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgc2VsZi50eXBlMnRlc3QsIHNhbXBsZSwgImxhdGluMSIpCisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChzYW1wbGUsICJsYXRpbjEiLCAiaWdub3JlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBzZWxmLnR5cGUydGVzdChzYW1wbGVbOi00XSwgInV0Zi04IikpCisKKyAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZik6CisgICAgICAgIHNhbXBsZSA9IHUiSGVsbG8gd29ybGRcblx1MTIzNFx1NTY3OFx1OWFiY1xkZWYwXGRlZjAiCisgICAgICAgIGZvciBlbmMgaW4gKCJ1dGY4IiwgInV0ZjE2Iik6CisgICAgICAgICAgICBiID0gc2VsZi50eXBlMnRlc3Qoc2FtcGxlLCBlbmMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZGVjb2RlKGVuYyksIHNhbXBsZSkKKyAgICAgICAgc2FtcGxlID0gdSJIZWxsbyB3b3JsZFxuXHg4MFx4ODFceGZlXHhmZiIKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KHNhbXBsZSwgImxhdGluMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgYi5kZWNvZGUsICJ1dGY4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmRlY29kZSgidXRmOCIsICJpZ25vcmUiKSwgIkhlbGxvIHdvcmxkXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZGVjb2RlKGVycm9ycz0iaWdub3JlIiwgZW5jb2Rpbmc9InV0ZjgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsbG8gd29ybGRcbiIpCisKKyAgICBkZWYgdGVzdF9mcm9tX2ludChzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgc2VsZi50eXBlMnRlc3QoKSkKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIHNlbGYudHlwZTJ0ZXN0KFswXSoxMCkpCisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdCgxMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBzZWxmLnR5cGUydGVzdChbMF0qMTAwMDApKQorCisgICAgZGVmIHRlc3RfY29uY2F0KHNlbGYpOgorICAgICAgICBiMSA9IHNlbGYudHlwZTJ0ZXN0KGIiYWJjIikKKyAgICAgICAgYjIgPSBzZWxmLnR5cGUydGVzdChiImRlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYjEgKyBiMiwgYiJhYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIxICsgYnl0ZXMoYiJkZWYiKSwgYiJhYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGIiZGVmIikgKyBiMSwgYiJkZWZhYmMiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYjEgKyB1ImRlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB1ImFiYyIgKyBiMikKKworICAgIGRlZiB0ZXN0X3JlcGVhdChzZWxmKToKKyAgICAgICAgZm9yIGIgaW4gYiJhYmMiLCBzZWxmLnR5cGUydGVzdChiImFiYyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiICogMywgYiJhYmNhYmNhYmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiICogMCwgYiIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiICogLTEsIGIiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiICogMy4xNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiAzLjE0ICogYikKKyAgICAgICAgICAgICMgWFhYIFNob3VsZG4ndCBieXRlcyBhbmQgYnl0ZWFycmF5IGFncmVlIG9uIHdoYXQgdG8gcmFpc2U/CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoT3ZlcmZsb3dFcnJvciwgTWVtb3J5RXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBiICogc3lzLm1heHNpemUpCisKKyAgICBkZWYgdGVzdF9yZXBlYXRfMWNoYXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYid4JykqMTAwLCBzZWxmLnR5cGUydGVzdChbb3JkKCd4JyldKjEwMCkpCisKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGIiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcmQoJ2EnKSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihpbnQob3JkKCdhJykpLCBiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDIwMCwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiAzMDAgaW4gYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiAtMSBpbiBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogTm9uZSBpbiBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogZmxvYXQob3JkKCdhJykpIGluIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB1ImEiIGluIGIpCisgICAgICAgIGZvciBmIGluIGJ5dGVzLCBieXRlYXJyYXk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGYoYiIiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZihiImEiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZihiImIiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZihiImMiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZihiImFiIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGYoYiJiYyIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihmKGIiYWJjIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGYoYiJhYyIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihmKGIiZCIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihmKGIiZGFiIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGYoYiJhYmQiKSwgYikKKworICAgIGRlZiB0ZXN0X2Zyb21oZXgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QuZnJvbWhleCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdC5mcm9taGV4LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgodScnKSwgc2VsZi50eXBlMnRlc3QoKSkKKyAgICAgICAgYiA9IGJ5dGVhcnJheShbMHgxYSwgMHgyYiwgMHgzMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QuZnJvbWhleCh1JzFhMkIzMCcpLCBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgodScgIDFBIDJCICAzMCAgICcpLCBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgodScwMDAwJyksIGInXDBcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgsIHUnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LmZyb21oZXgsIHUncnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdC5mcm9taGV4LCB1JzFhIGIgY2QnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdC5mcm9taGV4LCB1J1x4MDAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdC5mcm9taGV4LCB1JzEyICAgXHgwMCAgIDM0JykKKworICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiIiKS5qb2luKFtdKSwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiIikuam9pbihbYiIiXSksIGIiIikKKyAgICAgICAgZm9yIGxzdCBpbiBbW2IiYWJjIl0sIFtiImEiLCBiImJjIl0sIFtiImFiIiwgYiJjIl0sIFtiImEiLCBiImIiLCBiImMiXV06CisgICAgICAgICAgICBsc3QgPSBsaXN0KG1hcChzZWxmLnR5cGUydGVzdCwgbHN0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiIiKS5qb2luKGxzdCksIGIiYWJjIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiIiKS5qb2luKHR1cGxlKGxzdCkpLCBiImFiYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiIikuam9pbihpdGVyKGxzdCkpLCBiImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiIuIikuam9pbihbYiJhYiIsIGIiY2QiXSksIGIiYWIuY2QiKQorICAgICAgICAjIFhYWCBtb3JlLi4uCisKKyAgICBkZWYgdGVzdF9jb3VudChzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInbWlzc2lzc2lwcGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuY291bnQoYidpJyksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5jb3VudChiJ3NzJyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5jb3VudChiJ3cnKSwgMCkKKworICAgIGRlZiB0ZXN0X3N0YXJ0c3dpdGgoc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnR5cGUydGVzdCgpLnN0YXJ0c3dpdGgoYiJhbnl0aGluZyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5zdGFydHN3aXRoKGIiaGVsbG8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuc3RhcnRzd2l0aChiImhlbCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5zdGFydHN3aXRoKGIiaCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIuc3RhcnRzd2l0aChiImhlbGxvdyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIuc3RhcnRzd2l0aChiImhhIikpCisKKyAgICBkZWYgdGVzdF9lbmRzd2l0aChzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJ5dGVhcnJheSgpLmVuZHN3aXRoKGIiYW55dGhpbmciKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuZW5kc3dpdGgoYiJoZWxsbyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5lbmRzd2l0aChiImxsbyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5lbmRzd2l0aChiIm8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiLmVuZHN3aXRoKGIid2hlbGxvIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYi5lbmRzd2l0aChiIm5vIikpCisKKyAgICBkZWYgdGVzdF9maW5kKHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5maW5kKGInc3MnKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmZpbmQoYidzcycsIDMpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZmluZChiJ3NzJywgMSwgNyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5maW5kKGInc3MnLCAxLCAzKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5maW5kKGIndycpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmZpbmQoYidtaXNzaXNzaXBwaWFuJyksIC0xKQorCisgICAgZGVmIHRlc3RfcmZpbmQoc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJmaW5kKGInc3MnKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJmaW5kKGInc3MnLCAzKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJmaW5kKGInc3MnLCAwLCA2KSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJmaW5kKGIndycpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJmaW5kKGInbWlzc2lzc2lwcGlhbicpLCAtMSkKKworICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYid3b3JsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5pbmRleChiJ3cnKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmluZGV4KGInb3JsJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGIuaW5kZXgsIGInd29ybScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGIuaW5kZXgsIGInbGRvJykKKworICAgIGRlZiB0ZXN0X3JpbmRleChzZWxmKToKKyAgICAgICAgIyBYWFggY291bGQgYmUgbW9yZSByaWdvcm91cworICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYid3b3JsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yaW5kZXgoYid3JyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yaW5kZXgoYidvcmwnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYi5yaW5kZXgsIGInd29ybScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGIucmluZGV4LCBiJ2xkbycpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yZXBsYWNlKGInaScsIGInYScpLCBiJ21hc3Nhc3NhcHBhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJlcGxhY2UoYidzcycsIGIneCcpLCBiJ21peGl4aXBwaScpCisKKyAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInbWlzc2lzc2lwcGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQoYidpJyksIFtiJ20nLCBiJ3NzJywgYidzcycsIGIncHAnLCBiJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQoYidzcycpLCBbYidtaScsIGInaScsIGInaXBwaSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQoYid3JyksIFtiXSkKKworICAgIGRlZiB0ZXN0X3NwbGl0X3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgIGZvciBiIGluIChiJyAgYXJmICBiYXJmICAnLCBiJ2FyZlx0YmFyZicsIGInYXJmXG5iYXJmJywgYidhcmZccmJhcmYnLAorICAgICAgICAgICAgICAgICAgYidhcmZcZmJhcmYnLCBiJ2FyZlx2YmFyZicpOgorICAgICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQoKSwgW2InYXJmJywgYidiYXJmJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3BsaXQoTm9uZSksIFtiJ2FyZicsIGInYmFyZiddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnNwbGl0KE5vbmUsIDIpLCBbYidhcmYnLCBiJ2JhcmYnXSkKKyAgICAgICAgZm9yIGIgaW4gKGInYVx4MUNiJywgYidhXHgxRGInLCBiJ2FceDFFYicsIGInYVx4MUZiJyk6CisgICAgICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5zcGxpdCgpLCBbYl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYicgIGEgIGJiICBjICAnKS5zcGxpdChOb25lLCAwKSwgW2InYSAgYmIgIGMgICddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInICBhICBiYiAgYyAgJykuc3BsaXQoTm9uZSwgMSksIFtiJ2EnLCBiJ2JiICBjICAnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiJyAgYSAgYmIgIGMgICcpLnNwbGl0KE5vbmUsIDIpLCBbYidhJywgYidiYicsIGInYyAgJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYicgIGEgIGJiICBjICAnKS5zcGxpdChOb25lLCAzKSwgW2InYScsIGInYmInLCBiJ2MnXSkKKworICAgIGRlZiB0ZXN0X3NwbGl0X3N0cmluZ19lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdChiJ2EgYicpLnNwbGl0LCB1JyAnKQorCisgICAgZGVmIHRlc3Rfc3BsaXRfdW5pY29kZXdoaXRlc3BhY2Uoc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiIlx4MDlceDBBXHgwQlx4MENceDBEXHgxQ1x4MURceDFFXHgxRiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5zcGxpdCgpLCBbYidceDFjXHgxZFx4MWVceDFmJ10pCisKKyAgICBkZWYgdGVzdF9yc3BsaXQoc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJzcGxpdChiJ2knKSwgW2InbScsIGInc3MnLCBiJ3NzJywgYidwcCcsIGInJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3BsaXQoYidzcycpLCBbYidtaScsIGInaScsIGInaXBwaSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnNwbGl0KGIndycpLCBbYl0pCisKKyAgICBkZWYgdGVzdF9yc3BsaXRfd2hpdGVzcGFjZShzZWxmKToKKyAgICAgICAgZm9yIGIgaW4gKGInICBhcmYgIGJhcmYgICcsIGInYXJmXHRiYXJmJywgYidhcmZcbmJhcmYnLCBiJ2FyZlxyYmFyZicsCisgICAgICAgICAgICAgICAgICBiJ2FyZlxmYmFyZicsIGInYXJmXHZiYXJmJyk6CisgICAgICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3BsaXQoKSwgW2InYXJmJywgYidiYXJmJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnNwbGl0KE5vbmUpLCBbYidhcmYnLCBiJ2JhcmYnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3BsaXQoTm9uZSwgMiksIFtiJ2FyZicsIGInYmFyZiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInICBhICBiYiAgYyAgJykucnNwbGl0KE5vbmUsIDApLCBbYicgIGEgIGJiICBjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYicgIGEgIGJiICBjICAnKS5yc3BsaXQoTm9uZSwgMSksIFtiJyAgYSAgYmInLCBiJ2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiJyAgYSAgYmIgIGMgICcpLnJzcGxpdChOb25lLCAyKSwgW2InICBhJywgYidiYicsIGInYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInICBhICBiYiAgYyAgJykucnNwbGl0KE5vbmUsIDMpLCBbYidhJywgYidiYicsIGInYyddKQorCisgICAgZGVmIHRlc3RfcnNwbGl0X3N0cmluZ19lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdChiJ2EgYicpLnJzcGxpdCwgdScgJykKKworICAgIGRlZiB0ZXN0X3JzcGxpdF91bmljb2Rld2hpdGVzcGFjZShzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGIiXHgwOVx4MEFceDBCXHgwQ1x4MERceDFDXHgxRFx4MUVceDFGIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJzcGxpdCgpLCBbYidceDFjXHgxZFx4MWVceDFmJ10pCisKKyAgICBkZWYgdGVzdF9wYXJ0aXRpb24oc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnBhcnRpdGlvbihiJ3NzJyksIChiJ21pJywgYidzcycsIGInaXNzaXBwaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucGFydGl0aW9uKGIndycpLCAoYidtaXNzaXNzaXBwaScsIGInJywgYicnKSkKKworICAgIGRlZiB0ZXN0X3JwYXJ0aXRpb24oc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJwYXJ0aXRpb24oYidzcycpLCAoYidtaXNzaScsIGInc3MnLCBiJ2lwcGknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJwYXJ0aXRpb24oYidpJyksIChiJ21pc3Npc3NpcHAnLCBiJ2knLCBiJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnBhcnRpdGlvbihiJ3cnKSwgKGInJywgYicnLCBiJ21pc3Npc3NpcHBpJykpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBmb3IgYiBpbiBiIiIsIGIiYSIsIGIiYWJjIiwgYiJceGZmYWJceDgwIiwgYiJcMFwwXDM3N1wwXDAiOgorICAgICAgICAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiKQorICAgICAgICAgICAgICAgIHBzID0gcGlja2xlLmR1bXBzKGIsIHByb3RvKQorICAgICAgICAgICAgICAgIHEgPSBwaWNrbGUubG9hZHMocHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBxKQorCisgICAgZGVmIHRlc3Rfc3RyaXAoc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnN0cmlwKGInaScpLCBiJ21pc3Npc3NpcHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3RyaXAoYidtJyksIGInaXNzaXNzaXBwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5zdHJpcChiJ3BpJyksIGInbWlzc2lzcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5zdHJpcChiJ2ltJyksIGInc3Npc3NpcHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3RyaXAoYidwaW0nKSwgYidzc2lzcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5zdHJpcChiKSwgYicnKQorCisgICAgZGVmIHRlc3RfbHN0cmlwKHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5sc3RyaXAoYidpJyksIGInbWlzc2lzc2lwcGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIubHN0cmlwKGInbScpLCBiJ2lzc2lzc2lwcGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIubHN0cmlwKGIncGknKSwgYidtaXNzaXNzaXBwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5sc3RyaXAoYidpbScpLCBiJ3NzaXNzaXBwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5sc3RyaXAoYidwaW0nKSwgYidzc2lzc2lwcGknKQorCisgICAgZGVmIHRlc3RfcnN0cmlwKHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3RyaXAoYidpJyksIGInbWlzc2lzc2lwcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3RyaXAoYidtJyksIGInbWlzc2lzc2lwcGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnN0cmlwKGIncGknKSwgYidtaXNzaXNzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJzdHJpcChiJ2ltJyksIGInbWlzc2lzc2lwcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3RyaXAoYidwaW0nKSwgYidtaXNzaXNzJykKKworICAgIGRlZiB0ZXN0X3N0cmlwX3doaXRlc3BhY2Uoc2VsZik6CisgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJyBcdFxuXHJcZlx2YWJjIFx0XG5cclxmXHYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuc3RyaXAoKSwgYidhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIubHN0cmlwKCksIGInYWJjIFx0XG5cclxmXHYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnN0cmlwKCksIGInIFx0XG5cclxmXHZhYmMnKQorCisgICAgZGVmIHRlc3Rfc3RyaXBfYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInYWJjJykuc3RyaXAobWVtb3J5dmlldyhiJ2FjJykpLCBiJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGInYWJjJykubHN0cmlwKG1lbW9yeXZpZXcoYidhYycpKSwgYidiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYidhYmMnKS5yc3RyaXAobWVtb3J5dmlldyhiJ2FjJykpLCBiJ2FiJykKKworICAgIGRlZiB0ZXN0X3N0cmlwX3N0cmluZ19lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdChiJ2FiYycpLnN0cmlwLCB1J2InKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0KGInYWJjJykubHN0cmlwLCB1J2InKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0KGInYWJjJykucnN0cmlwLCB1J2InKQorCisgICAgZGVmIHRlc3Rfb3JkKHNlbGYpOgorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidcMEFceDdmXHg4MFx4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtvcmQoYltpOmkrMV0pIGZvciBpIGluIHJhbmdlKGxlbihiKSldLAorICAgICAgICAgICAgICAgICAgICAgICAgIFswLCA2NSwgMTI3LCAxMjgsIDI1NV0pCisKKyAgICBkZWYgdGVzdF9ub25lX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgIyBpc3N1ZSAxMTgyOAorICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidoZWxsbycpCisgICAgICAgIGwgPSBzZWxmLnR5cGUydGVzdChiJ2wnKQorICAgICAgICBoID0gc2VsZi50eXBlMnRlc3QoYidoJykKKyAgICAgICAgeCA9IHNlbGYudHlwZTJ0ZXN0KGIneCcpCisgICAgICAgIG8gPSBzZWxmLnR5cGUydGVzdChiJ28nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgYi5maW5kKGwsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGIuZmluZChsLCAtMiwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgYi5maW5kKGwsIE5vbmUsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBiLmZpbmQoaCwgTm9uZSwgTm9uZSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBiLnJmaW5kKGwsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGIucmZpbmQobCwgLTIsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGIucmZpbmQobCwgTm9uZSwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGIucmZpbmQoaCwgTm9uZSwgTm9uZSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBiLmluZGV4KGwsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGIuaW5kZXgobCwgLTIsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGIuaW5kZXgobCwgTm9uZSwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGIuaW5kZXgoaCwgTm9uZSwgTm9uZSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBiLnJpbmRleChsLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBiLnJpbmRleChsLCAtMiwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgYi5yaW5kZXgobCwgTm9uZSwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGIucmluZGV4KGgsIE5vbmUsIE5vbmUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgYi5jb3VudChsLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBiLmNvdW50KGwsIC0yLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBiLmNvdW50KGwsIE5vbmUsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBiLmNvdW50KHgsIE5vbmUsIE5vbmUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgYi5lbmRzd2l0aChvLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBiLmVuZHN3aXRoKG8sIC0yLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBiLmVuZHN3aXRoKGwsIE5vbmUsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgYi5lbmRzd2l0aCh4LCBOb25lLCBOb25lKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGIuc3RhcnRzd2l0aChoLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBiLnN0YXJ0c3dpdGgobCwgLTIsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGIuc3RhcnRzd2l0aChoLCBOb25lLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGIuc3RhcnRzd2l0aCh4LCBOb25lLCBOb25lKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfZXRjX3JhaXNlX2NvcnJlY3RfZXJyb3JfbWVzc2FnZXMoc2VsZik6CisgICAgICAgICMgaXNzdWUgMTE4MjgKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInaGVsbG8nKQorICAgICAgICB4ID0gc2VsZi50eXBlMnRlc3QoYid4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ1xiZmluZFxiJywgYi5maW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInXGJyZmluZFxiJywgYi5yZmluZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ1xiaW5kZXhcYicsIGIuaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgcidcYnJpbmRleFxiJywgYi5yaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgcidcYmNvdW50XGInLCBiLmNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInXGJzdGFydHN3aXRoXGInLCBiLnN0YXJ0c3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgcidcYmVuZHN3aXRoXGInLCBiLmVuZHN3aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQorCisKK2NsYXNzIEJ5dGVBcnJheVRlc3QoQmFzZUJ5dGVzVGVzdCk6CisgICAgdHlwZTJ0ZXN0ID0gYnl0ZWFycmF5CisKKyAgICBkZWYgdGVzdF9ub2hhc2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgYnl0ZWFycmF5KCkpCisKKyAgICBkZWYgdGVzdF9ieXRlYXJyYXlfYXBpKHNlbGYpOgorICAgICAgICBzaG9ydF9zYW1wbGUgPSBiIkhlbGxvIHdvcmxkXG4iCisgICAgICAgIHNhbXBsZSA9IHNob3J0X3NhbXBsZSArIGIiXDAiKigyMCAtIGxlbihzaG9ydF9zYW1wbGUpKQorICAgICAgICB0Zm4gPSB0ZW1wZmlsZS5ta3RlbXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFByZXBhcmUKKyAgICAgICAgICAgIHdpdGggb3Blbih0Zm4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzaG9ydF9zYW1wbGUpCisgICAgICAgICAgICAjIFRlc3QgcmVhZGludG8KKyAgICAgICAgICAgIHdpdGggb3Blbih0Zm4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgYiA9IGJ5dGVhcnJheSgyMCkKKyAgICAgICAgICAgICAgICBuID0gZi5yZWFkaW50byhiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCBsZW4oc2hvcnRfc2FtcGxlKSkKKyAgICAgICAgICAgICMgUHl0aG9uIDIueAorICAgICAgICAgICAgYl9zYW1wbGUgPSAob3JkKHMpIGZvciBzIGluIHNhbXBsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgbGlzdChiX3NhbXBsZSkpCisgICAgICAgICAgICAjIFRlc3Qgd3JpdGluZyBpbiBiaW5hcnkgbW9kZQorICAgICAgICAgICAgd2l0aCBvcGVuKHRmbiwgIndiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGIpCisgICAgICAgICAgICB3aXRoIG9wZW4odGZuLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNhbXBsZSkKKyAgICAgICAgICAgICMgVGV4dCBtb2RlIGlzIGFtYmlndW91czsgZG9uJ3QgdGVzdAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0Zm4pCisgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfcmV2ZXJzZShzZWxmKToKKyAgICAgICAgYiA9IGJ5dGVhcnJheShiJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJldmVyc2UoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiJ29sbGVoJykKKyAgICAgICAgYiA9IGJ5dGVhcnJheShiJ2hlbGxvMScpICMgdGVzdCBldmVuIG51bWJlciBvZiBpdGVtcworICAgICAgICBiLnJldmVyc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGInMW9sbGVoJykKKyAgICAgICAgYiA9IGJ5dGVhcnJheSgpCisgICAgICAgIGIucmV2ZXJzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYikKKworICAgIGRlZiB0ZXN0X3JlZ2V4cHMoc2VsZik6CisgICAgICAgIGRlZiBieShzKToKKyAgICAgICAgICAgIHJldHVybiBieXRlYXJyYXkobWFwKG9yZCwgcykpCisgICAgICAgIGIgPSBieSgiSGVsbG8sIHdvcmxkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKHIiXHcrIiwgYiksIFtieSgiSGVsbG8iKSwgYnkoIndvcmxkIildKQorCisgICAgZGVmIHRlc3Rfc2V0aXRlbShzZWxmKToKKyAgICAgICAgYiA9IGJ5dGVhcnJheShbMSwgMiwgM10pCisgICAgICAgIGJbMV0gPSAxMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkoWzEsIDEwMCwgM10pKQorICAgICAgICBiWy0xXSA9IDIwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGJ5dGVhcnJheShbMSwgMTAwLCAyMDBdKSkKKyAgICAgICAgYlswXSA9IEluZGV4YWJsZSgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkoWzEwLCAxMDAsIDIwMF0pKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiWzNdID0gMAorICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgcmFpc2UgSW5kZXhFcnJvciIpCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBiWy0xMF0gPSAwCisgICAgICAgICAgICBzZWxmLmZhaWwoIkRpZG4ndCByYWlzZSBJbmRleEVycm9yIikKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJbMF0gPSAyNTYKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IHJhaXNlIFZhbHVlRXJyb3IiKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYlswXSA9IEluZGV4YWJsZSgtMSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IHJhaXNlIFZhbHVlRXJyb3IiKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYlswXSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IHJhaXNlIFR5cGVFcnJvciIpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9kZWxpdGVtKHNlbGYpOgorICAgICAgICBiID0gYnl0ZWFycmF5KHJhbmdlKDEwKSkKKyAgICAgICAgZGVsIGJbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkocmFuZ2UoMSwgMTApKSkKKyAgICAgICAgZGVsIGJbLTFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KHJhbmdlKDEsIDkpKSkKKyAgICAgICAgZGVsIGJbNF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkoWzEsIDIsIDMsIDQsIDYsIDcsIDhdKSkKKworICAgIGRlZiB0ZXN0X3NldHNsaWNlKHNlbGYpOgorICAgICAgICBiID0gYnl0ZWFycmF5KHJhbmdlKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBsaXN0KHJhbmdlKDEwKSkpCisKKyAgICAgICAgYlswOjVdID0gYnl0ZWFycmF5KFsxLCAxLCAxLCAxLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkoWzEsIDEsIDEsIDEsIDEsIDUsIDYsIDcsIDgsIDldKSkKKworICAgICAgICBkZWwgYlswOi01XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGJ5dGVhcnJheShbNSwgNiwgNywgOCwgOV0pKQorCisgICAgICAgIGJbMDowXSA9IGJ5dGVhcnJheShbMCwgMSwgMiwgMywgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KHJhbmdlKDEwKSkpCisKKyAgICAgICAgYlstNzotM10gPSBieXRlYXJyYXkoWzEwMCwgMTAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkoWzAsIDEsIDIsIDEwMCwgMTAxLCA3LCA4LCA5XSkpCisKKyAgICAgICAgYlszOjVdID0gWzMsIDQsIDUsIDZdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KHJhbmdlKDEwKSkpCisKKyAgICAgICAgYlszOjBdID0gWzQyLCA0MiwgNDJdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KFswLCAxLCAyLCA0MiwgNDIsIDQyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XSkpCisKKyAgICAgICAgYlszOl0gPSBiJ2ZvbycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkoWzAsIDEsIDIsIDEwMiwgMTExLCAxMTFdKSkKKworICAgICAgICBiWzozXSA9IG1lbW9yeXZpZXcoYidmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGJ5dGVhcnJheShbMTAyLCAxMTEsIDExMSwgMTAyLCAxMTEsIDExMV0pKQorCisgICAgICAgIGJbMzo0XSA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KFsxMDIsIDExMSwgMTExLCAxMTEsIDExMV0pKQorCisgICAgICAgIGJbMTpdID0gbGlzdChiJ3V1dXUnKSAgIyB0aGlzIHdvcmtzIG9ubHkgb24gUHl0aG9uMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGJ5dGVhcnJheShbMTAyLCAxMTcsIDExNywgMTE3LCAxMTddKSkKKworICAgICAgICBmb3IgZWxlbSBpbiBbNSwgLTUsIDAsIGxvbmcoMTBlMjApLCB1J3N0cicsIDIuMywgW3UnYScsIHUnYiddLCBbW11dXToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBiWzM6NF0gPSBlbGVtCisKKyAgICAgICAgZm9yIGVsZW0gaW4gW1syNTQsIDI1NSwgMjU2XSwgWy0yNTYsIDkwMDBdXToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgYlszOjRdID0gZWxlbQorCisgICAgZGVmIHRlc3RfZXh0ZW5kZWRfc2V0X2RlbF9zbGljZShzZWxmKToKKyAgICAgICAgaW5kaWNlcyA9ICgwLCBOb25lLCAxLCAzLCAxOSwgMzAwLCAxPDwzMzMsIC0xLCAtMiwgLTMxLCAtMzAwKQorICAgICAgICBmb3Igc3RhcnQgaW4gaW5kaWNlczoKKyAgICAgICAgICAgIGZvciBzdG9wIGluIGluZGljZXM6CisgICAgICAgICAgICAgICAgIyBTa2lwIGludmFsaWQgc3RlcCAwCisgICAgICAgICAgICAgICAgZm9yIHN0ZXAgaW4gaW5kaWNlc1sxOl06CisgICAgICAgICAgICAgICAgICAgIEwgPSBsaXN0KHJhbmdlKDI1NSkpCisgICAgICAgICAgICAgICAgICAgIGIgPSBieXRlYXJyYXkoTCkKKyAgICAgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBhIHNsaWNlIG9mIGV4YWN0bHkgdGhlIHJpZ2h0IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIyBidXQgd2l0aCBkaWZmZXJlbnQgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IExbc3RhcnQ6c3RvcDpzdGVwXQorICAgICAgICAgICAgICAgICAgICBkYXRhLnJldmVyc2UoKQorICAgICAgICAgICAgICAgICAgICBMW3N0YXJ0OnN0b3A6c3RlcF0gPSBkYXRhCisgICAgICAgICAgICAgICAgICAgIGJbc3RhcnQ6c3RvcDpzdGVwXSA9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkoTCkpCisKKyAgICAgICAgICAgICAgICAgICAgZGVsIExbc3RhcnQ6c3RvcDpzdGVwXQorICAgICAgICAgICAgICAgICAgICBkZWwgYltzdGFydDpzdG9wOnN0ZXBdCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KEwpKQorCisgICAgZGVmIHRlc3Rfc2V0c2xpY2VfdHJhcChzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCB3ZSBjb3JyZWN0bHkgaGFuZGxlIGFzc2lnbmluZyBzZWxmCisgICAgICAgICMgdG8gYSBzbGljZSBvZiBzZWxmICh0aGUgb2xkIExhbWJlcnQgTWVlcnRlbnMgdHJhcCkuCisgICAgICAgIGIgPSBieXRlYXJyYXkocmFuZ2UoMjU2KSkKKyAgICAgICAgYls4Ol0gPSBiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KGxpc3QocmFuZ2UoOCkpICsgbGlzdChyYW5nZSgyNTYpKSkpCisKKyAgICBkZWYgdGVzdF9pY29uY2F0KHNlbGYpOgorICAgICAgICBiID0gYnl0ZWFycmF5KGIiYWJjIikKKyAgICAgICAgYjEgPSBiCisgICAgICAgIGIgKz0gYiJkZWYiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYiJhYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiBpcyBiMSkKKyAgICAgICAgYiArPSBiInh5eiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiImFiY2RlZnh5eiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGIgKz0gdSIiCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImJ5dGVzICs9IHVuaWNvZGUgZGlkbid0IHJhaXNlIFR5cGVFcnJvciIpCisKKyAgICBkZWYgdGVzdF9pcmVwZWF0KHNlbGYpOgorICAgICAgICBiID0gYnl0ZWFycmF5KGIiYWJjIikKKyAgICAgICAgYjEgPSBiCisgICAgICAgIGIgKj0gMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiYWJjYWJjYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIgaXMgYjEpCisKKyAgICBkZWYgdGVzdF9pcmVwZWF0XzFjaGFyKHNlbGYpOgorICAgICAgICBiID0gYnl0ZWFycmF5KGIieCIpCisgICAgICAgIGIxID0gYgorICAgICAgICBiICo9IDEwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIieCIqMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiBpcyBiMSkKKworICAgIGRlZiB0ZXN0X2FsbG9jKHNlbGYpOgorICAgICAgICBiID0gYnl0ZWFycmF5KCkKKyAgICAgICAgYWxsb2MgPSBiLl9fYWxsb2NfXygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGxvYyA+PSAwKQorICAgICAgICBzZXEgPSBbYWxsb2NdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICBiICs9IGIieCIKKyAgICAgICAgICAgIGFsbG9jID0gYi5fX2FsbG9jX18oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFsbG9jID49IGxlbihiKSkKKyAgICAgICAgICAgIGlmIGFsbG9jIG5vdCBpbiBzZXE6CisgICAgICAgICAgICAgICAgc2VxLmFwcGVuZChhbGxvYykKKworICAgIGRlZiB0ZXN0X2V4dGVuZChzZWxmKToKKyAgICAgICAgb3JpZyA9IGInaGVsbG8nCisgICAgICAgIGEgPSBieXRlYXJyYXkob3JpZykKKyAgICAgICAgYS5leHRlbmQoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBvcmlnICsgb3JpZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzU6XSwgb3JpZykKKyAgICAgICAgYSA9IGJ5dGVhcnJheShiJycpCisgICAgICAgICMgVGVzdCBpdGVyYXRvcnMgdGhhdCBkb24ndCBoYXZlIGEgX19sZW5ndGhfaGludF9fCisgICAgICAgIGEuZXh0ZW5kKG1hcChvcmQsIG9yaWcgKiAyNSkpCisgICAgICAgIGEuZXh0ZW5kKG9yZCh4KSBmb3IgeCBpbiBvcmlnICogMjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgb3JpZyAqIDUwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbLTU6XSwgb3JpZykKKyAgICAgICAgYSA9IGJ5dGVhcnJheShiJycpCisgICAgICAgIGEuZXh0ZW5kKGl0ZXIobWFwKG9yZCwgb3JpZyAqIDUwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgb3JpZyAqIDUwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbLTU6XSwgb3JpZykKKyAgICAgICAgYSA9IGJ5dGVhcnJheShiJycpCisgICAgICAgIGEuZXh0ZW5kKGxpc3QobWFwKG9yZCwgb3JpZyAqIDUwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgb3JpZyAqIDUwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbLTU6XSwgb3JpZykKKyAgICAgICAgYSA9IGJ5dGVhcnJheShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuZXh0ZW5kLCBbMCwgMSwgMiwgMjU2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYS5leHRlbmQsIFswLCAxLCAyLCAtMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGEpLCAwKQorICAgICAgICBhID0gYnl0ZWFycmF5KGInJykKKyAgICAgICAgYS5leHRlbmQoW0luZGV4YWJsZShvcmQoJ2EnKSldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGInYScpCisKKyAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6CisgICAgICAgIGIgPSBieXRlYXJyYXkoYidoZWxsbycpCisgICAgICAgIGIucmVtb3ZlKG9yZCgnbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGInaGVsbycpCisgICAgICAgIGIucmVtb3ZlKG9yZCgnbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGInaGVvJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBiLnJlbW92ZShvcmQoJ2wnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogYi5yZW1vdmUoNDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGIucmVtb3ZlKHUnZScpKQorICAgICAgICAjIHJlbW92ZSBmaXJzdCBhbmQgbGFzdAorICAgICAgICBiLnJlbW92ZShvcmQoJ28nKSkKKyAgICAgICAgYi5yZW1vdmUob3JkKCdoJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYidlJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGIucmVtb3ZlKHUnZScpKQorICAgICAgICBiLnJlbW92ZShJbmRleGFibGUob3JkKCdlJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGInJykKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgYiA9IGJ5dGVhcnJheShiJ3dvcmxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnBvcCgpLCBvcmQoJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnBvcCgwKSwgb3JkKCd3JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5wb3AoLTIpLCBvcmQoJ3InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBiLnBvcCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogYnl0ZWFycmF5KCkucG9wKCkpCisgICAgICAgICMgdGVzdCBmb3IgaXNzdWUgIzY4NDYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlYXJyYXkoYidceGZmJykucG9wKCksIDB4ZmYpCisKKyAgICBkZWYgdGVzdF9ub3NvcnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBsYW1iZGE6IGJ5dGVhcnJheSgpLnNvcnQoKSkKKworICAgIGRlZiB0ZXN0X2FwcGVuZChzZWxmKToKKyAgICAgICAgYiA9IGJ5dGVhcnJheShiJ2hlbGwnKQorICAgICAgICBiLmFwcGVuZChvcmQoJ28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmFwcGVuZCgxMDApLCBOb25lKQorICAgICAgICBiID0gYnl0ZWFycmF5KCkKKyAgICAgICAgYi5hcHBlbmQob3JkKCdBJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGIpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYi5hcHBlbmQodSdvJykpCisgICAgICAgIGIgPSBieXRlYXJyYXkoKQorICAgICAgICBiLmFwcGVuZChJbmRleGFibGUob3JkKCdBJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGInQScpCisKKyAgICBkZWYgdGVzdF9pbnNlcnQoc2VsZik6CisgICAgICAgIGIgPSBieXRlYXJyYXkoYidtc3Nzc3BwJykKKyAgICAgICAgYi5pbnNlcnQoMSwgb3JkKCdpJykpCisgICAgICAgIGIuaW5zZXJ0KDQsIG9yZCgnaScpKQorICAgICAgICBiLmluc2VydCgtMiwgb3JkKCdpJykpCisgICAgICAgIGIuaW5zZXJ0KDEwMDAsIG9yZCgnaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGInbWlzc2lzc2lwcGknKQorICAgICAgICAjIGFsbG93ZWQgaW4gMi54CisgICAgICAgICNzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYi5pbnNlcnQoMCwgYicxJykpCisgICAgICAgIGIgPSBieXRlYXJyYXkoKQorICAgICAgICBiLmluc2VydCgwLCBJbmRleGFibGUob3JkKCdBJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGInQScpCisKKyAgICBkZWYgdGVzdF9jb3BpZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgNDM0OC4gIE1ha2Ugc3VyZSB0aGF0IG9wZXJhdGlvbnMgdGhhdCBkb24ndCBtdXRhdGUgdGhlIGFycmF5CisgICAgICAgICMgY29weSB0aGUgYnl0ZXMuCisgICAgICAgIGIgPSBieXRlYXJyYXkoYidhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIgaXMgYi5yZXBsYWNlKGInYWJjJywgYidjZGUnLCAwKSkKKworICAgICAgICB0ID0gYnl0ZWFycmF5KFtpIGZvciBpIGluIHJhbmdlKDI1NildKQorICAgICAgICB4ID0gYnl0ZWFycmF5KGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh4IGlzIHgudHJhbnNsYXRlKHQpKQorCisgICAgZGVmIHRlc3RfcGFydGl0aW9uX2J5dGVhcnJheV9kb2VzbnRfc2hhcmVfbnVsbHN0cmluZyhzZWxmKToKKyAgICAgICAgYSwgYiwgYyA9IGJ5dGVhcnJheShiIngiKS5wYXJ0aXRpb24oYiJ5IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYiIiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiBpcyBub3QgYykKKyAgICAgICAgYiArPSBiIiEiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYiIiKQorICAgICAgICBhLCBiLCBjID0gYnl0ZWFycmF5KGIieCIpLnBhcnRpdGlvbihiInkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBiIiIpCisgICAgICAgICMgU2FtZSBmb3IgcnBhcnRpdGlvbgorICAgICAgICBiLCBjLCBhID0gYnl0ZWFycmF5KGIieCIpLnJwYXJ0aXRpb24oYiJ5IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYiIiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiBpcyBub3QgYykKKyAgICAgICAgYiArPSBiIiEiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYiIiKQorICAgICAgICBjLCBiLCBhID0gYnl0ZWFycmF5KGIieCIpLnJwYXJ0aXRpb24oYiJ5IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYiIiKQorCisgICAgZGVmIHRlc3RfcmVzaXplX2ZvcmJpZGRlbihzZWxmKToKKyAgICAgICAgIyAjNDUwOTogY2FuJ3QgcmVzaXplIGEgYnl0ZWFycmF5IHdoZW4gdGhlcmUgYXJlIGJ1ZmZlciBleHBvcnRzLCBldmVuCisgICAgICAgICMgaWYgaXQgd291bGRuJ3QgcmVhbGxvY2F0ZSB0aGUgdW5kZXJseWluZyBidWZmZXIuCisgICAgICAgICMgRnVydGhlcm1vcmUsIG5vIGRlc3RydWN0aXZlIGNoYW5nZXMgdG8gdGhlIGJ1ZmZlciBtYXkgYmUgYXBwbGllZAorICAgICAgICAjIGJlZm9yZSByYWlzaW5nIHRoZSBlcnJvci4KKyAgICAgICAgYiA9IGJ5dGVhcnJheShyYW5nZSgxMCkpCisgICAgICAgIHYgPSBtZW1vcnl2aWV3KGIpCisgICAgICAgIGRlZiByZXNpemUobik6CisgICAgICAgICAgICBiWzE6LTFdID0gcmFuZ2UobiArIDEsIDIqbiAtIDEpCisgICAgICAgIHJlc2l6ZSgxMCkKKyAgICAgICAgb3JpZyA9IGJbOl0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIHJlc2l6ZSwgMTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgb3JpZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIHJlc2l6ZSwgOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBvcmlnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCdWZmZXJFcnJvciwgcmVzaXplLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIG9yaWcpCisgICAgICAgICMgT3RoZXIgb3BlcmF0aW9ucyBpbXBseWluZyByZXNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIGIucG9wLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIG9yaWcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBiLnJlbW92ZSwgYlsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBvcmlnKQorICAgICAgICBkZWYgZGVsaXRlbSgpOgorICAgICAgICAgICAgZGVsIGJbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIGRlbGl0ZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgb3JpZykKKyAgICAgICAgIyBkZWxldGluZyBhIG5vbi1jb250aWd1b3VzIHNsaWNlCisgICAgICAgIGRlZiBkZWxzbGljZSgpOgorICAgICAgICAgICAgYlsxOi0xOjJdID0gYiIiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBkZWxzbGljZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBvcmlnKQorCisgICAgZGVmIHRlc3RfZW1wdHlfYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICAjIElzc3VlICM3NTYxOiBvcGVyYXRpb25zIG9uIGVtcHR5IGJ5dGVhcnJheXMgY291bGQgY3Jhc2ggaW4gbWFueQorICAgICAgICAjIHNpdHVhdGlvbnMsIGR1ZSB0byBhIGZyYWdpbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCisgICAgICAgICMgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKCkgQyBtYWNyby4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCBieXRlYXJyYXkoYicnKSkKKworCitjbGFzcyBBc3NvcnRlZEJ5dGVzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIworICAgICMgVGVzdCB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiBieXRlcyBhbmQgYnl0ZWFycmF5CisgICAgIworCisgICAgQGNoZWNrX2J5dGVzX3dhcm5pbmdzCisgICAgZGVmIHRlc3RfcmVwcl9zdHIoc2VsZik6CisgICAgICAgIGZvciBmIGluIHN0ciwgcmVwcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihieXRlYXJyYXkoKSksICJieXRlYXJyYXkoYicnKSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYnl0ZWFycmF5KFswXSkpLCAiYnl0ZWFycmF5KGInXFx4MDAnKSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYnl0ZWFycmF5KFswLCAxLCAyNTQsIDI1NV0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVhcnJheShiJ1xceDAwXFx4MDFcXHhmZVxceGZmJykiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGIiYWJjIiksICJiJ2FiYyciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGIiJyIpLCAnJydiIiciJycnKSAjICcnJworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGIiJ1wiIiksIHIiIiJiJ1wnIiciIiIpICMgJworCisgICAgZGVmIHRlc3RfY29tcGFyZV9ieXRlc190b19ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmMiID09IGJ5dGVzKGIiYWJjIiksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYiIgIT0gYnl0ZXMoYiJhYmMiKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiIiA8PSBieXRlcyhiImFiYyIpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWIiIDwgYnl0ZXMoYiJhYmMiKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiYyIgPj0gYnl0ZXMoYiJhYiIpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjIiA+IGJ5dGVzKGIiYWIiKSwgVHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjIiAhPSBieXRlcyhiImFiYyIpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiIiA9PSBieXRlcyhiImFiYyIpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiIiA+IGJ5dGVzKGIiYWJjIiksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWIiID49IGJ5dGVzKGIiYWJjIiksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjIiA8IGJ5dGVzKGIiYWIiKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmMiIDw9IGJ5dGVzKGIiYWIiKSwgRmFsc2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhiImFiYyIpID09IGIiYWJjIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhiImFiIikgIT0gYiJhYmMiLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGIiYWIiKSA8PSBiImFiYyIsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoYiJhYiIpIDwgYiJhYmMiLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGIiYWJjIikgPj0gYiJhYiIsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoYiJhYmMiKSA+IGIiYWIiLCBUcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoYiJhYmMiKSAhPSBiImFiYyIsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGIiYWIiKSA9PSBiImFiYyIsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGIiYWIiKSA+IGIiYWJjIiwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoYiJhYiIpID49IGIiYWJjIiwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoYiJhYmMiKSA8IGIiYWIiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhiImFiYyIpIDw9IGIiYWIiLCBGYWxzZSkKKworICAgIEB0ZXN0LnRlc3Rfc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfZG9jKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShieXRlYXJyYXkuX19kb2NfXykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJ5dGVhcnJheS5fX2RvY19fLnN0YXJ0c3dpdGgoImJ5dGVhcnJheSgiKSwgYnl0ZWFycmF5Ll9fZG9jX18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGJ5dGVzLl9fZG9jX18pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShieXRlcy5fX2RvY19fLnN0YXJ0c3dpdGgoImJ5dGVzKCIpLCBieXRlcy5fX2RvY19fKQorCisgICAgZGVmIHRlc3RfZnJvbV9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIHNhbXBsZSA9IGJ5dGVzKGIiSGVsbG8gd29ybGRcblx4ODBceDgxXHhmZVx4ZmYiKQorICAgICAgICBidWYgPSBtZW1vcnl2aWV3KHNhbXBsZSkKKyAgICAgICAgYiA9IGJ5dGVhcnJheShidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYnl0ZWFycmF5KHNhbXBsZSkpCisKKyAgICBAY2hlY2tfYnl0ZXNfd2FybmluZ3MKKyAgICBkZWYgdGVzdF90b19zdHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGInJyksICJiJyciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihiJ3gnKSwgImIneCciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihiJ1x4ODAnKSwgImInXFx4ODAnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYnl0ZWFycmF5KGInJykpLCAiYnl0ZWFycmF5KGInJykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihieXRlYXJyYXkoYid4JykpLCAiYnl0ZWFycmF5KGIneCcpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYnl0ZWFycmF5KGInXHg4MCcpKSwgImJ5dGVhcnJheShiJ1xceDgwJykiKQorCisgICAgZGVmIHRlc3RfbGl0ZXJhbChzZWxmKToKKyAgICAgICAgdGVzdHMgPSAgWworICAgICAgICAgICAgKGIiV29uZGVyZnVsIHNwYW0iLCAiV29uZGVyZnVsIHNwYW0iKSwKKyAgICAgICAgICAgIChiciJXb25kZXJmdWwgc3BhbSB0b28iLCAiV29uZGVyZnVsIHNwYW0gdG9vIiksCisgICAgICAgICAgICAoYiJceGFhXHgwMFwwMDBcMjAwIiwgIlx4YWFceDAwXDAwMFwyMDAiKSwKKyAgICAgICAgICAgIChiciJceGFhXHgwMFwwMDBcMjAwIiwgciJceGFhXHgwMFwwMDBcMjAwIiksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGIsIHMgaW4gdGVzdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGJ5dGVhcnJheShzLCAnbGF0aW4tMScpKQorICAgICAgICBmb3IgYyBpbiByYW5nZSgxMjgsIDI1Nik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiIiVzIicgJSBjaHIoYykpCisKKyAgICBkZWYgdGVzdF90cmFuc2xhdGUoc2VsZik6CisgICAgICAgIGIgPSBiJ2hlbGxvJworICAgICAgICBiYSA9IGJ5dGVhcnJheShiKQorICAgICAgICByb3NldHRhID0gYnl0ZWFycmF5KHJhbmdlKDAsIDI1NikpCisgICAgICAgIHJvc2V0dGFbb3JkKCdvJyldID0gb3JkKCdlJykKKyAgICAgICAgYyA9IGIudHJhbnNsYXRlKHJvc2V0dGEsIGInbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgYidoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYidoZWUnKQorICAgICAgICBjID0gYmEudHJhbnNsYXRlKHJvc2V0dGEsIGInbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmEsIGInaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGInaGVlJykKKyAgICAgICAgYyA9IGIudHJhbnNsYXRlKE5vbmUsIGInZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgYidobGxvJykKKyAgICAgICAgYyA9IGJhLnRyYW5zbGF0ZShOb25lLCBiJ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGInaGxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYi50cmFuc2xhdGUsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmEudHJhbnNsYXRlLCBOb25lLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc3BsaXRfYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYSBiJy5zcGxpdChtZW1vcnl2aWV3KGInICcpKSwgW2InYScsIGInYiddKQorCisgICAgZGVmIHRlc3RfcnNwbGl0X2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2EgYicucnNwbGl0KG1lbW9yeXZpZXcoYicgJykpLCBbYidhJywgYidiJ10pCisKKyAgICAjIE9wdGltaXphdGlvbnM6CisgICAgIyBfX2l0ZXJfXz8gKG9wdGltaXphdGlvbikKKyAgICAjIF9fcmV2ZXJzZWRfXz8gKG9wdGltaXphdGlvbikKKworICAgICMgWFhYIE1vcmUgc3RyaW5nIG1ldGhvZHM/ICAoVGhvc2UgdGhhdCBkb24ndCB1c2UgY2hhcmFjdGVyIHByb3BlcnRpZXMpCisKKyAgICAjIFRoZXJlIGFyZSB0ZXN0cyBpbiBzdHJpbmdfdGVzdHMucHkgdGhhdCBhcmUgbW9yZQorICAgICMgY29tcHJlaGVuc2l2ZSBmb3IgdGhpbmdzIGxpa2Ugc3BsaXQsIHBhcnRpdGlvbiwgZXRjLgorICAgICMgVW5mb3J0dW5hdGVseSB0aGV5IGFyZSBhbGwgYnVuZGxlZCB3aXRoIHRlc3RzIHRoYXQKKyAgICAjIGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIGJ5dGVzCisKKyAgICAjIEkndmUgc3RhcnRlZCBwb3J0aW5nIHNvbWUgb2YgdGhvc2UgaW50byBieXRlYXJyYXlfdGVzdHMucHksIHdlIHNob3VsZCBwb3J0CisgICAgIyB0aGUgcmVzdCB0aGF0IG1ha2Ugc2Vuc2UgKHRoZSBjb2RlIGNhbiBiZSBjbGVhbmVkIHVwIHRvIHVzZSBtb2Rlcm4KKyAgICAjIHVuaXR0ZXN0IG1ldGhvZHMgYXQgdGhlIHNhbWUgdGltZSkuCisKK2NsYXNzIEJ5dGVhcnJheVBFUDMxMzdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LmJ1ZmZlcl90ZXN0cy5NaXhpbkJ5dGVzQnVmZmVyQ29tbW9uVGVzdHMpOgorICAgIGRlZiBtYXJzaGFsKHNlbGYsIHgpOgorICAgICAgICByZXR1cm4gYnl0ZWFycmF5KHgpCisKKyAgICBkZWYgdGVzdF9yZXR1cm5zX25ld19jb3B5KHNlbGYpOgorICAgICAgICB2YWwgPSBzZWxmLm1hcnNoYWwoYicxMjM0JykKKyAgICAgICAgIyBPbiBpbW11dGFibGUgdHlwZXMgdGhlc2UgTUFZIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGVtc2VsdmVzCisgICAgICAgICMgYnV0IG9uIG11dGFibGUgdHlwZXMgbGlrZSBieXRlYXJyYXkgdGhleSBNVVNUIHJldHVybiBhIG5ldyBjb3B5LgorICAgICAgICBmb3IgbWV0aG5hbWUgaW4gKCd6ZmlsbCcsICdyanVzdCcsICdsanVzdCcsICdjZW50ZXInKToKKyAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIodmFsLCBtZXRobmFtZSkKKyAgICAgICAgICAgIG5ld3ZhbCA9IG1ldGhvZCgzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIG5ld3ZhbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWwgaXMgbm90IG5ld3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRobmFtZSsnIHJldHVybmVkIHNlbGYgb24gYSBtdXRhYmxlIG9iamVjdCcpCisgICAgICAgIGZvciBleHByIGluICgndmFsLnNwbGl0KClbMF0nLCAndmFsLnJzcGxpdCgpWzBdJywKKyAgICAgICAgICAgICAgICAgICAgICd2YWwucGFydGl0aW9uKCIuIilbMF0nLCAndmFsLnJwYXJ0aXRpb24oIi4iKVsyXScsCisgICAgICAgICAgICAgICAgICAgICAndmFsLnNwbGl0bGluZXMoKVswXScsICd2YWwucmVwbGFjZSgiIiwgIiIpJyk6CisgICAgICAgICAgICBuZXd2YWwgPSBldmFsKGV4cHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgbmV3dmFsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbCBpcyBub3QgbmV3dmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIrJyByZXR1cm5lZCB2YWwgb24gYSBtdXRhYmxlIG9iamVjdCcpCisKK2NsYXNzIEZpeGVkU3RyaW5nVGVzdCh0ZXN0LnN0cmluZ190ZXN0cy5CYXNlVGVzdCk6CisKKyAgICBkZWYgZml4dHlwZShzZWxmLCBvYmopOgorICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgc3RyKToKKyAgICAgICAgICAgIHJldHVybiBvYmouZW5jb2RlKCJ1dGYtOCIpCisgICAgICAgIHJldHVybiBzdXBlcihGaXhlZFN0cmluZ1Rlc3QsIHNlbGYpLmZpeHR5cGUob2JqKQorCisgICAgIyBDdXJyZW50bHkgdGhlIGJ5dGVzIGNvbnRhaW5tZW50IHRlc3RpbmcgdXNlcyBhIHNpbmdsZSBpbnRlZ2VyCisgICAgIyB2YWx1ZS4gVGhpcyBtYXkgbm90IGJlIHRoZSBmaW5hbCBkZXNpZ24sIGJ1dCB1bnRpbCB0aGVuIHRoZQorICAgICMgYnl0ZXMgc2VjdGlvbiB3aXRoIGluIGEgYnl0ZXMgY29udGFpbm1lbnQgbm90IHZhbGlkCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIHBhc3MKKyAgICBkZWYgdGVzdF9leHBhbmR0YWJzKHNlbGYpOgorICAgICAgICBwYXNzCisgICAgZGVmIHRlc3RfdXBwZXIoc2VsZik6CisgICAgICAgIHBhc3MKKyAgICBkZWYgdGVzdF9sb3dlcihzZWxmKToKKyAgICAgICAgcGFzcworICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgICMgWFhYIGNoZWNrIHRoaXMgb3V0CisgICAgICAgIHBhc3MKKworCitjbGFzcyBCeXRlQXJyYXlBc1N0cmluZ1Rlc3QoRml4ZWRTdHJpbmdUZXN0KToKKyAgICB0eXBlMnRlc3QgPSBieXRlYXJyYXkKKworCitjbGFzcyBCeXRlQXJyYXlTdWJjbGFzcyhieXRlYXJyYXkpOgorICAgIHBhc3MKKworY2xhc3MgQnl0ZUFycmF5U3ViY2xhc3NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhCeXRlQXJyYXlTdWJjbGFzcywgYnl0ZWFycmF5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKEJ5dGVBcnJheVN1YmNsYXNzKCksIGJ5dGVhcnJheSkKKworICAgICAgICBhLCBiID0gYiJhYmNkIiwgYiJlZmdoIgorICAgICAgICBfYSwgX2IgPSBCeXRlQXJyYXlTdWJjbGFzcyhhKSwgQnl0ZUFycmF5U3ViY2xhc3MoYikKKworICAgICAgICAjIHRlc3QgY29tcGFyaXNvbiBvcGVyYXRvcnMgd2l0aCBzdWJjbGFzcyBpbnN0YW5jZXMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9hID09IF9hKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2EgIT0gX2IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfYSA8IF9iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX2EgPD0gX2IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfYiA+PSBfYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9iID4gX2EpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfYSBpcyBub3QgYSkKKworICAgICAgICAjIHRlc3QgY29uY2F0IG9mIHN1YmNsYXNzIGluc3RhbmNlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyBiLCBfYSArIF9iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyBiLCBhICsgX2IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSArIGIsIF9hICsgYikKKworICAgICAgICAjIHRlc3QgcmVwZWF0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhKjUgPT0gX2EqNSkKKworICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGpvaW4gcmV0dXJucyBhIE5FVyBvYmplY3QgZm9yIHNpbmdsZSBpdGVtIHNlcXVlbmNlcworICAgICAgICAjIGludm9sdmluZyBhIHN1YmNsYXNzLgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGl0IGlzIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLgorICAgICAgICBzMSA9IEJ5dGVBcnJheVN1YmNsYXNzKGIiYWJjZCIpCisgICAgICAgIHMyID0gYnl0ZWFycmF5KCkuam9pbihbczFdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoczEgaXMgbm90IHMyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShzMikgaXMgYnl0ZWFycmF5LCB0eXBlKHMyKSkKKworICAgICAgICAjIFRlc3QgcmV2ZXJzZSwgY2FsbGluZyBqb2luIG9uIHN1YmNsYXNzCisgICAgICAgIHMzID0gczEuam9pbihbYiJhYmNkIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHMzKSBpcyBieXRlYXJyYXkpCisKKyAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CisgICAgICAgIGEgPSBCeXRlQXJyYXlTdWJjbGFzcyhiImFiY2QiKQorICAgICAgICBhLnggPSAxMAorICAgICAgICBhLnkgPSBCeXRlQXJyYXlTdWJjbGFzcyhiImVmZ2giKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGIgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGEsIHByb3RvKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYSksIGlkKGIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLngsIGIueCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS55LCBiLnkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYSksIHR5cGUoYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYS55KSwgdHlwZShiLnkpKQorCisgICAgZGVmIHRlc3RfY29weShzZWxmKToKKyAgICAgICAgYSA9IEJ5dGVBcnJheVN1YmNsYXNzKGIiYWJjZCIpCisgICAgICAgIGEueCA9IDEwCisgICAgICAgIGEueSA9IEJ5dGVBcnJheVN1YmNsYXNzKGIiZWZnaCIpCisgICAgICAgIGZvciBjb3B5X21ldGhvZCBpbiAoY29weS5jb3B5LCBjb3B5LmRlZXBjb3B5KToKKyAgICAgICAgICAgIGIgPSBjb3B5X21ldGhvZChhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChhKSwgaWQoYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEueCwgYi54KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnksIGIueSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShhKSwgdHlwZShiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShhLnkpLCB0eXBlKGIueSkpCisKKyAgICBkZWYgdGVzdF9pbml0X292ZXJyaWRlKHNlbGYpOgorICAgICAgICBjbGFzcyBzdWJjbGFzcyhieXRlYXJyYXkpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5ld2FyZz0xLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIGJ5dGVhcnJheS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHggPSBzdWJjbGFzcyg0LCBzb3VyY2U9YiJhYmNkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBiImFiY2QiKQorICAgICAgICB4ID0gc3ViY2xhc3MobmV3YXJnPTQsIHNvdXJjZT1iImFiY2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIGIiYWJjZCIpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICAjdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEJ5dGVzVGVzdCkKKyAgICAjdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEFzc29ydGVkQnl0ZXNUZXN0KQorICAgICN0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQnl0ZXNBc1N0cmluZ1Rlc3QpCisgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBCeXRlQXJyYXlUZXN0LAorICAgICAgICBCeXRlQXJyYXlBc1N0cmluZ1Rlc3QsCisgICAgICAgIEJ5dGVBcnJheVN1YmNsYXNzVGVzdCwKKyAgICAgICAgQnl0ZWFycmF5UEVQMzEzN1Rlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2J6Mi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2J6Mi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjc1MTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfYnoyLnB5CkBAIC0wLDAgKzEsNDgyIEBACisjIS91c3IvYmluL2VudiBweXRob24KK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIF80RywgYmlnbWVtdGVzdCwgaW1wb3J0X21vZHVsZSwgZmluZGZpbGUKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKwordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKK2J6MiA9IGltcG9ydF9tb2R1bGUoJ2J6MicpCitmcm9tIGJ6MiBpbXBvcnQgQloyRmlsZSwgQloyQ29tcHJlc3NvciwgQloyRGVjb21wcmVzc29yCisKK2hhc19jbWRsaW5lX2J1bnppcDIgPSBzeXMucGxhdGZvcm0gbm90IGluICgid2luMzIiLCAib3MyZW14IiwgInJpc2NvcyIpCisKK2NsYXNzIEJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiQmFzZSBmb3Igb3RoZXIgdGVzdGNhc2VzLiIKKyAgICBURVhUID0gJ3Jvb3Q6eDowOjA6cm9vdDovcm9vdDovYmluL2Jhc2hcbmJpbjp4OjE6MTpiaW46L2JpbjpcbmRhZW1vbjp4OjI6MjpkYWVtb246L3NiaW46XG5hZG06eDozOjQ6YWRtOi92YXIvYWRtOlxubHA6eDo0Ojc6bHA6L3Zhci9zcG9vbC9scGQ6XG5zeW5jOng6NTowOnN5bmM6L3NiaW46L2Jpbi9zeW5jXG5zaHV0ZG93bjp4OjY6MDpzaHV0ZG93bjovc2Jpbjovc2Jpbi9zaHV0ZG93blxuaGFsdDp4Ojc6MDpoYWx0Oi9zYmluOi9zYmluL2hhbHRcbm1haWw6eDo4OjEyOm1haWw6L3Zhci9zcG9vbC9tYWlsOlxubmV3czp4Ojk6MTM6bmV3czovdmFyL3Nwb29sL25ld3M6XG51dWNwOng6MTA6MTQ6dXVjcDovdmFyL3Nwb29sL3V1Y3A6XG5vcGVyYXRvcjp4OjExOjA6b3BlcmF0b3I6L3Jvb3Q6XG5nYW1lczp4OjEyOjEwMDpnYW1lczovdXNyL2dhbWVzOlxuZ29waGVyOng6MTM6MzA6Z29waGVyOi91c3IvbGliL2dvcGhlci1kYXRhOlxuZnRwOng6MTQ6NTA6RlRQIFVzZXI6L3Zhci9mdHA6L2Jpbi9iYXNoXG5ub2JvZHk6eDo2NTUzNDo2NTUzNDpOb2JvZHk6L2hvbWU6XG5wb3N0Zml4Ong6MTAwOjEwMTpwb3N0Zml4Oi92YXIvc3Bvb2wvcG9zdGZpeDpcbm5pZW1leWVyOng6NTAwOjUwMDo6L2hvbWUvbmllbWV5ZXI6L2Jpbi9iYXNoXG5wb3N0Z3Jlczp4OjEwMToxMDI6UG9zdGdyZVNRTCBTZXJ2ZXI6L3Zhci9saWIvcGdzcWw6L2Jpbi9iYXNoXG5teXNxbDp4OjEwMjoxMDM6TXlTUUwgc2VydmVyOi92YXIvbGliL215c3FsOi9iaW4vYmFzaFxud3d3Ong6MTAzOjEwNDo6L3Zhci93d3c6L2Jpbi9mYWxzZVxuJworICAgIERBVEEgPSAnQlpoOTFBWSZTWS5ceGM4Tlx4MThceDAwXHgwMT5fXHg4MFx4MDBceDEwQFx4MDJceGZmXHhmMFx4MDFceDA3blx4MDA/XHhlN1x4ZmZceGUwMFx4MDFceDk5XHhhYVx4MDBceGMwXHgwM0ZceDg2XHg4YyMmXHg4M0ZceDlhXHgwM1x4MDZceGE2XHhkMFx4YTZceDkzTVx4MGZRXHhhN1x4YThceDA2XHg4MDRoaFx4MTIkXHgxMVx4YTRpNFx4ZjE0U1x4ZDI8UVx4YjVceDBmSFx4ZDNceGQ0XHhkZFx4ZDVceDg3XHhiYlx4ZjhceDk0XHJceDhmXHhhZklceDEyXHhlMVx4YzlceGY4L0VceDAwcHVceDg5XHgxMl1ceGM5XHhiYkRMXG5RXHgwZVx0MVx4MTJceGRmXHhhMFx4YzBceDk3XHhhYzJPOVx4ODlceDEzXHg5NFx4MGVceDFjN1x4MGVkXHg5NUlceDBjXHhhYUpceGE0XHgxOExceDEwXHgwNSNceDljXHhhZlx4YmFceGJjL1x4OTdceDhhI0NceGM4XHhlMVx4OGNXXHhmOVx4ZTJceGQwXHhkNk1ceGE3XHg4YlhhPGVceDg0dFx4Y2JMXHhiM1x4YTdceGQ5XHhjZFx4ZDFceGNiXHg4NC5ceGFmXHhiM1x4YWJceGFiXHhhZGBufVx4YTBsaFx0RSxceDhlWlx4MTVceDE3Vkg+XHg4OFx4ZTVceGNkOWdkNlx4MGJcblx4ZTlceDliXHhkNVx4OGFceDk5XHhmN1x4MDguS1x4OGV2XHhmYlx4Zjd4d1x4YmJceGRmXHhhMVx4OTJceGYxXHhkZHwvIjtceGEyXHhiYVx4OWZceGQ1XHhiMSNBXHhiNlx4ZjZceGIzb1x4YzlceGM1eVxcXHhlYk9ceGU3XHg4NVx4OWFceGJjXHhiNmY4XHg5NTJceGQ1XHhkNyIlXHg4OT5WLFx4ZjdceGE2elx4ZTJceDlmXHhhM1x4ZGZceDExXHgxMSJceGQ2RSlJXHhhOVx4MTNeXHhjYVx4ZjNyXHhkMFx4MDNVXHg5MjJceGYyNlx4ZWNceGI2XHhlZFx4OGJceGMzVVx4MTNceDlkXHhjNVx4MTcwXHhhNFx4ZmFeXHg5Mlx4YWNERlx4OGFceDk3XHhkNlx4MTlceGZlXHhkZFx4YjhceGJkXHgxYVx4OWFceDE5XHhhM1x4ODBhbmtSXHg4Ylx4ZTVceGQ4M11ceGE5XHhjNlx4MDhceDgyZlx4ZjZceGI5IjZsJFx4YjhqQFx4YzBceDhhXHhiMGwxLi5ceGJha1x4ODNsc1x4MTVceGJjXHhmNFx4YzFceDEzXHhiZVx4ZjhFXHhiOFx4OWRcclx4YThceDlka1x4ODRceGQzblx4ZmFceGFjUVx4MDdceGIxJXlceGFhdlx4YjRceDA4XHhlMHpceDFiXHgxNlx4ZjVceDA0XHhlOVx4Y2NceGI5XHgwOHpceDFlbjcuR1x4ZmNdXHhjOVx4MTRceGUxQkBceGJiIThgJworICAgIERBVEFfQ1JMRiA9ICdCWmg5MUFZJlNZXHhhZXpceGJiTlx4MDBceDAxSFx4ZGZceDgwXHgwMFx4MTJAXHgwMlx4ZmZceGYwXHgwMVx4MDduXHgwMD9ceGU3XHhmZlx4ZTBAXHgwMVx4YmNceGM2YFx4ODYqXHg4ZD1NXHhhOVx4OWFceDg2XHhkMExAXHgwZklceGE2IVx4YTFceDEzXHhjOFx4ODhqZGlceDhkQFx4MDNAXHgxYVx4MWFceDBjXHgwY1x4ODMgXHgwMFx4YzRoMlx4MTlceDAxXHg4MkRceDg0ZVx0XHhlOFx4OTlceDg5XHgxOVx4MWFoXHgwMFxyXHgxYVx4MTFceGFmXHg5Ylx4MGZHXHhmNShceDFiXHgxZj9cdFx4MTJceGNmXHhiNVx4ZmNceDk1RVx4MDBwc1x4ODlceDEyXlx4YTRceGRkXHhhMiZceDA1KFx4ODdceDA0XHg5OFx4ODl1XHhlNDAlXHhiNlx4MTlcJ1x4OGNceGM0XHg4OVx4Y2FceDA3XHgwZVx4MWIhXHg5MVVJRlUlQ1x4OTk0IURJXHhkMlx4ZmFceGYwXHhmMU44V1x4ZGVceDEzQVx4ZjVceDljciU/XHg5ZjM7STQ1QVx4ZDFceDhiVFx4YjE8bFx4YmFceGNiX1x4YzAweFlceDE3clx4MTdceDg4XHgwOFx4MDhAXHhhMFxyeUBceDEwXHgwNCQpYFx4ZjJceGNlXHg4OXpceGIwc1x4ZWNceDliLmlXXHg5ZFx4ODFceGI1LSt0XHg5Zlx4MWFcJ1x4OTdkQlx4ZjV4XHhiNVx4YmUuWy5ceGQ3XHgwZVx4ODFceGU3XHgwOFx4MWNOYFx4ODhceDEwXHhjYVx4ODdceGMzISJceDgwXHg5MlJceGExL1x4ZDFceGMwXHhlNm1mXHhhY1x4YmRceDk5XHhjY2FceGIzXHg4NzgwPlx4YTRceGM3XHg4ZFx4MWFcXCJceGFkXHhhMVx4YWJ5QmdceDE1XHhiOWxceDg4XHg4OFx4OTFrIlx4OTRceGE0XHhkNFx4ODlceGFlKlx4YTZceDBiXHgxMFx4MGNceGQ2XHhkNG1ceGU4Nlx4ZWNceGI1alx4OGFceDg2alwnO1x4Y2EuXHgwMUlceGYyXHhhYUpceGU4XHg4OFx4OGNVK3QzXHhmYlx4MGNcblx4YTMzXHgxM3IyXHJceDE2XHhlMFx4YjMoXHhiZlx4MWRceDgzclx4ZTdNXHhmMERceDEzNjVceGQ4XHg4OFx4ZDNceGE0XHg5Mlx4Y2IyXHgwNlx4MDRcXFx4YzFceGIwXHhlYS8vXHhiZWsmXHhkOFx4ZTYrdFx4ZTVceGExXHgxM1x4YWRhXHgxNlx4ZGVyNSJ3XVx4YTJpXHhiN1tceDk3UiBceGUySVRceGNkO1pceDA0ZGs0XHhhZFx4OGFcdFx4ZDNceDgxelx4MTBceGYxOl5gXHhhYlx4MWZceGM1XHhkY1x4OTFOXHgxNCQrXHg5ZVx4YWVceGQzXHg4MCcKKyAgICBFTVBUWV9EQVRBID0gJ0JaaDlceDE3ckU4UFx4OTBceDAwXHgwMFx4MDBceDAwJworCisgICAgaWYgaGFzX2NtZGxpbmVfYnVuemlwMjoKKyAgICAgICAgZGVmIGRlY29tcHJlc3Moc2VsZiwgZGF0YSk6CisgICAgICAgICAgICBwb3AgPSBzdWJwcm9jZXNzLlBvcGVuKCJidW56aXAyIiwgc2hlbGw9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICBwb3Auc3RkaW4ud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIHBvcC5zdGRpbi5jbG9zZSgpCisgICAgICAgICAgICByZXQgPSBwb3Auc3Rkb3V0LnJlYWQoKQorICAgICAgICAgICAgcG9wLnN0ZG91dC5jbG9zZSgpCisgICAgICAgICAgICBpZiBwb3Aud2FpdCgpICE9IDA6CisgICAgICAgICAgICAgICAgcmV0ID0gYnoyLmRlY29tcHJlc3MoZGF0YSkKKyAgICAgICAgICAgIHJldHVybiByZXQKKworICAgIGVsc2U6CisgICAgICAgICMgYnVuemlwMiBpc24ndCBhdmFpbGFibGUgdG8gcnVuIG9uIFdpbmRvd3MuCisgICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgcmV0dXJuIGJ6Mi5kZWNvbXByZXNzKGRhdGEpCisKKworY2xhc3MgQloyRmlsZVRlc3QoQmFzZVRlc3QpOgorICAgICJUZXN0IEJaMkZpbGUgdHlwZSBtaXNjZWxsYW5lb3VzIG1ldGhvZHMuIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gVEVTVEZOCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHNlbGYuZmlsZW5hbWUpOgorICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuZmlsZW5hbWUpCisKKyAgICBkZWYgY3JlYXRlVGVtcEZpbGUoc2VsZiwgY3JsZj0wKToKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBpZiBjcmxmOgorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLkRBVEFfQ1JMRgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5EQVRBCisgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisKKyAgICBkZWYgdGVzdFJlYWQoc2VsZik6CisgICAgICAgICMgIlRlc3QgQloyRmlsZS5yZWFkKCkiCisgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5yZWFkLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUKQorCisgICAgZGVmIHRlc3RSZWFkMChzZWxmKToKKyAgICAgICAgIyBUZXN0IEJCWjJGaWxlLnJlYWQoMCkiCisgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5yZWFkLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoMCksICIiKQorCisgICAgZGVmIHRlc3RSZWFkQ2h1bmsxMChzZWxmKToKKyAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnJlYWQoKSBpbiBjaHVua3Mgb2YgMTAgYnl0ZXMiCisgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIHRleHQgPSAnJworICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBzdHIgPSBiejJmLnJlYWQoMTApCisgICAgICAgICAgICAgICAgaWYgbm90IHN0cjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICB0ZXh0ICs9IHN0cgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBzZWxmLlRFWFQpCisKKyAgICBkZWYgdGVzdFJlYWQxMDAoc2VsZik6CisgICAgICAgICMgIlRlc3QgQloyRmlsZS5yZWFkKDEwMCkiCisgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKDEwMCksIHNlbGYuVEVYVFs6MTAwXSkKKworICAgIGRlZiB0ZXN0UmVhZExpbmUoc2VsZik6CisgICAgICAgICMgIlRlc3QgQloyRmlsZS5yZWFkbGluZSgpIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYucmVhZGxpbmUsIE5vbmUpCisgICAgICAgICAgICBzaW8gPSBTdHJpbmdJTyhzZWxmLlRFWFQpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBzaW8ucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWRsaW5lKCksIGxpbmUpCisKKyAgICBkZWYgdGVzdFJlYWRMaW5lcyhzZWxmKToKKyAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnJlYWRsaW5lcygpIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYucmVhZGxpbmVzLCBOb25lKQorICAgICAgICAgICAgc2lvID0gU3RyaW5nSU8oc2VsZi5URVhUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWRsaW5lcygpLCBzaW8ucmVhZGxpbmVzKCkpCisKKyAgICBkZWYgdGVzdEl0ZXJhdG9yKHNlbGYpOgorICAgICAgICAjICJUZXN0IGl0ZXIoQloyRmlsZSkiCisgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIHNpbyA9IFN0cmluZ0lPKHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdGVyKGJ6MmYpKSwgc2lvLnJlYWRsaW5lcygpKQorCisgICAgZGVmIHRlc3RDbG9zZWRJdGVyYXRvckRlYWRsb2NrKHNlbGYpOgorICAgICAgICAjICJUZXN0IHRoYXQgaXRlcmF0aW9uIG9uIGEgY2xvc2VkIGJ6MmZpbGUgcmVsZWFzZXMgdGhlIGxvY2suIgorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzMzA5CisgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQorICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQorICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi5uZXh0KQorICAgICAgICAjIFRoaXMgY2FsbCB3aWxsIGRlYWRsb2NrIG9mIHRoZSBhYm92ZSAubmV4dCBjYWxsIGZhaWxlZCB0bworICAgICAgICAjIHJlbGVhc2UgdGhlIGxvY2suCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYucmVhZGxpbmVzKQorCisgICAgZGVmIHRlc3RYUmVhZExpbmVzKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkZpbGUueHJlYWRsaW5lcygpIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgc2lvID0gU3RyaW5nSU8oc2VsZi5URVhUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYnoyZi54cmVhZGxpbmVzKCkpLCBzaW8ucmVhZGxpbmVzKCkpCisgICAgICAgIGJ6MmYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RVbml2ZXJzYWxOZXdsaW5lc0xGKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkZpbGUucmVhZCgpIHdpdGggdW5pdmVyc2FsIG5ld2xpbmVzIChcXG4pIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInJVIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYubmV3bGluZXMsICJcbiIpCisgICAgICAgIGJ6MmYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RVbml2ZXJzYWxOZXdsaW5lc0NSTEYoc2VsZik6CisgICAgICAgICMgIlRlc3QgQloyRmlsZS5yZWFkKCkgd2l0aCB1bml2ZXJzYWwgbmV3bGluZXMgKFxcclxcbikiCisgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoY3JsZj0xKQorICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lLCAiclUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5uZXdsaW5lcywgIlxyXG4iKQorICAgICAgICBiejJmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0V3JpdGUoc2VsZik6CisgICAgICAgICMgIlRlc3QgQloyRmlsZS53cml0ZSgpIgorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInciKSBhcyBiejJmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLndyaXRlKQorICAgICAgICAgICAgYnoyZi53cml0ZShzZWxmLlRFWFQpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLCBzZWxmLlRFWFQpCisKKyAgICBkZWYgdGVzdFdyaXRlQ2h1bmtzMTAoc2VsZik6CisgICAgICAgICMgIlRlc3QgQloyRmlsZS53cml0ZSgpIHdpdGggY2h1bmtzIG9mIDEwIGJ5dGVzIgorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInciKSBhcyBiejJmOgorICAgICAgICAgICAgbiA9IDAKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgc3RyID0gc2VsZi5URVhUW24qMTA6KG4rMSkqMTBdCisgICAgICAgICAgICAgICAgaWYgbm90IHN0cjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBiejJmLndyaXRlKHN0cikKKyAgICAgICAgICAgICAgICBuICs9IDEKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSksIHNlbGYuVEVYVCkKKworICAgIGRlZiB0ZXN0V3JpdGVMaW5lcyhzZWxmKToKKyAgICAgICAgIyAiVGVzdCBCWjJGaWxlLndyaXRlbGluZXMoKSIKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi53cml0ZWxpbmVzKQorICAgICAgICAgICAgc2lvID0gU3RyaW5nSU8oc2VsZi5URVhUKQorICAgICAgICAgICAgYnoyZi53cml0ZWxpbmVzKHNpby5yZWFkbGluZXMoKSkKKyAgICAgICAgIyBwYXRjaCAjMTUzNTUwMAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiejJmLndyaXRlbGluZXMsIFsiYSJdKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKSwgc2VsZi5URVhUKQorCisgICAgZGVmIHRlc3RXcml0ZU1ldGhvZHNPblJlYWRPbmx5RmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgYnoyZjoKKyAgICAgICAgICAgIGJ6MmYud3JpdGUoImFiYyIpCisKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJyIikgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGUsICJhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGVsaW5lcywgWyJhIl0pCisKKyAgICBkZWYgdGVzdFNlZWtGb3J3YXJkKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkZpbGUuc2VlaygxNTAsIDApIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYuc2VlaykKKyAgICAgICAgICAgIGJ6MmYuc2VlaygxNTApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbMTUwOl0pCisKKyAgICBkZWYgdGVzdFNlZWtCYWNrd2FyZHMoc2VsZik6CisgICAgICAgICMgIlRlc3QgQloyRmlsZS5zZWVrKC0xNTAsIDEpIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBiejJmLnJlYWQoNTAwKQorICAgICAgICAgICAgYnoyZi5zZWVrKC0xNTAsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbNTAwLTE1MDpdKQorCisgICAgZGVmIHRlc3RTZWVrQmFja3dhcmRzRnJvbUVuZChzZWxmKToKKyAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnNlZWsoLTE1MCwgMikiCisgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIGJ6MmYuc2VlaygtMTUwLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUW2xlbihzZWxmLlRFWFQpLTE1MDpdKQorCisgICAgZGVmIHRlc3RTZWVrUG9zdEVuZChzZWxmKToKKyAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnNlZWsoMTUwMDAwKSIKKyAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgYnoyZi5zZWVrKDE1MDAwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi50ZWxsKCksIGxlbihzZWxmLlRFWFQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgIiIpCisKKyAgICBkZWYgdGVzdFNlZWtQb3N0RW5kVHdpY2Uoc2VsZik6CisgICAgICAgICMgIlRlc3QgQloyRmlsZS5zZWVrKDE1MDAwMCkgdHdpY2UiCisgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIGJ6MmYuc2VlaygxNTAwMDApCisgICAgICAgICAgICBiejJmLnNlZWsoMTUwMDAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnRlbGwoKSwgbGVuKHNlbGYuVEVYVCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCAiIikKKworICAgIGRlZiB0ZXN0U2Vla1ByZVN0YXJ0KHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkZpbGUuc2VlaygtMTUwLCAwKSIKKyAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgYnoyZi5zZWVrKC0xNTApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYudGVsbCgpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUKQorCisgICAgZGVmIHRlc3RPcGVuRGVsKHNlbGYpOgorICAgICAgICAjICJUZXN0IG9wZW5pbmcgYW5kIGRlbGV0aW5nIGEgZmlsZSBtYW55IHRpbWVzIgorICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMDAwKToKKyAgICAgICAgICAgIG8gPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCisgICAgICAgICAgICBkZWwgbworCisgICAgZGVmIHRlc3RPcGVuTm9uZXhpc3RlbnQoc2VsZik6CisgICAgICAgICMgIlRlc3Qgb3BlbmluZyBhIG5vbmV4aXN0ZW50IGZpbGUiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIEJaMkZpbGUsICIvbm9uL2V4aXN0ZW50IikKKworICAgIGRlZiB0ZXN0TW9kZVUoc2VsZik6CisgICAgICAgICMgQnVnICMxMTk0MTgxOiBiejIuQloyRmlsZSBvcGVuZWQgZm9yIHdyaXRlIHdpdGggbW9kZSAiVSIKKyAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCisgICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJVIikKKyAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIGYgPSBmaWxlKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGYuc2VlaygwLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBsZW4oc2VsZi5EQVRBKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdEJ1ZzExOTEwNDMoc2VsZik6CisgICAgICAgICMgcmVhZGxpbmVzKCkgZm9yIGZpbGVzIGNvbnRhaW5pbmcgbm8gbmV3bGluZQorICAgICAgICBkYXRhID0gJ0JaaDkxQVkmU1lceGQ5Ylx4ODldXHgwMFx4MDBceDAwXHgwM1x4ODBceDA0XHgwMFx4MDJceDAwXHgwY1x4MDAgXHgwMCFceDlhaDNNXHgxMzxdXHhjOVx4MTRceGUxQkNlXHg4YSV0JworICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBsaW5lcyA9IGJ6MmYucmVhZGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgWydUZXN0J10pCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgeGxpbmVzID0gbGlzdChiejJmLnJlYWRsaW5lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhsaW5lcywgWydUZXN0J10pCisKKyAgICBkZWYgdGVzdENvbnRleHRQcm90b2NvbChzZWxmKToKKyAgICAgICAgIyBCWjJGaWxlIHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wKKyAgICAgICAgZiA9IE5vbmUKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIieHh4IikKKyAgICAgICAgZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInJiIikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggZjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJfX2VudGVyX18gb24gYSBjbG9zZWQgZmlsZSBkaWRuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICAgICAgMSAvLyAwCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiMSAvLyAwIGRpZG4ndCByYWlzZSBhbiBleGNlcHRpb24iKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdFRocmVhZGluZyhzZWxmKToKKyAgICAgICAgIyBVc2luZyBhIEJaMkZpbGUgZnJvbSBzZXZlcmFsIHRocmVhZHMgZG9lc24ndCBkZWFkbG9jayAoaXNzdWUgIzcyMDUpLgorICAgICAgICBkYXRhID0gIjEiICogMioqMjAKKyAgICAgICAgbnRocmVhZHMgPSAxMAorICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICd3YicpIGFzIGY6CisgICAgICAgICAgICBkZWYgY29tcCgpOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgICAgICB0aHJlYWRzID0gW3RocmVhZGluZy5UaHJlYWQodGFyZ2V0PWNvbXApIGZvciBpIGluIHJhbmdlKG50aHJlYWRzKV0KKyAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgIHQuam9pbigpCisKKyAgICBkZWYgdGVzdE1peGVkSXRlcmF0aW9uUmVhZHMoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzgzOTc6IG1peGVkIGl0ZXJhdGlvbiBhbmQgcmVhZHMgc2hvdWxkIGJlIGZvcmJpZGRlbi4KKyAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgIyBUaGUgaW50ZXJuYWwgYnVmZmVyIHNpemUgaXMgaGFyZC13aXJlZCB0byA4MTkyIGJ5dGVzLCB3ZSBtdXN0CisgICAgICAgICAgICAjIHdyaXRlIG91dCBtb3JlIHRoYW4gdGhhdCBmb3IgdGhlIHRlc3QgdG8gc3RvcCBoYWxmIHRocm91Z2gKKyAgICAgICAgICAgICMgdGhlIGJ1ZmZlci4KKyAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUICogMTAwKQorICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBuZXh0KGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnJlYWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnJlYWRsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkbGluZXMpCisKK2NsYXNzIEJaMkNvbXByZXNzb3JUZXN0KEJhc2VUZXN0KToKKyAgICBkZWYgdGVzdENvbXByZXNzKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkNvbXByZXNzb3IuY29tcHJlc3MoKS9mbHVzaCgpIgorICAgICAgICBiejJjID0gQloyQ29tcHJlc3NvcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyYy5jb21wcmVzcykKKyAgICAgICAgZGF0YSA9IGJ6MmMuY29tcHJlc3Moc2VsZi5URVhUKQorICAgICAgICBkYXRhICs9IGJ6MmMuZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGVjb21wcmVzcyhkYXRhKSwgc2VsZi5URVhUKQorCisgICAgZGVmIHRlc3RDb21wcmVzc0VtcHR5U3RyaW5nKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkNvbXByZXNzb3IuY29tcHJlc3MoKS9mbHVzaCgpIG9mIGVtcHR5IHN0cmluZyIKKyAgICAgICAgYnoyYyA9IEJaMkNvbXByZXNzb3IoKQorICAgICAgICBkYXRhID0gYnoyYy5jb21wcmVzcygnJykKKyAgICAgICAgZGF0YSArPSBiejJjLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBzZWxmLkVNUFRZX0RBVEEpCisKKyAgICBkZWYgdGVzdENvbXByZXNzQ2h1bmtzMTAoc2VsZik6CisgICAgICAgICMgIlRlc3QgQloyQ29tcHJlc3Nvci5jb21wcmVzcygpL2ZsdXNoKCkgd2l0aCBjaHVua3Mgb2YgMTAgYnl0ZXMiCisgICAgICAgIGJ6MmMgPSBCWjJDb21wcmVzc29yKCkKKyAgICAgICAgbiA9IDAKKyAgICAgICAgZGF0YSA9ICcnCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBzdHIgPSBzZWxmLlRFWFRbbioxMDoobisxKSoxMF0KKyAgICAgICAgICAgIGlmIG5vdCBzdHI6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGRhdGEgKz0gYnoyYy5jb21wcmVzcyhzdHIpCisgICAgICAgICAgICBuICs9IDEKKyAgICAgICAgZGF0YSArPSBiejJjLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRlY29tcHJlc3MoZGF0YSksIHNlbGYuVEVYVCkKKworICAgIEBiaWdtZW10ZXN0KF80RywgbWVtdXNlPTEuMjUpCisgICAgZGVmIHRlc3RCaWdtZW0oc2VsZiwgc2l6ZSk6CisgICAgICAgIHRleHQgPSAiYSIgKiBzaXplCisgICAgICAgIGJ6MmMgPSBiejIuQloyQ29tcHJlc3NvcigpCisgICAgICAgIGRhdGEgPSBiejJjLmNvbXByZXNzKHRleHQpICsgYnoyYy5mbHVzaCgpCisgICAgICAgIGRlbCB0ZXh0CisgICAgICAgIHRleHQgPSBzZWxmLmRlY29tcHJlc3MoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGV4dCksIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC5zdHJpcCgiYSIpLCAiIikKKworCitjbGFzcyBCWjJEZWNvbXByZXNzb3JUZXN0KEJhc2VUZXN0KToKKyAgICBkZWYgdGVzdF9Db25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBCWjJEZWNvbXByZXNzb3IsIDQyKQorCisgICAgZGVmIHRlc3REZWNvbXByZXNzKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkRlY29tcHJlc3Nvci5kZWNvbXByZXNzKCkiCisgICAgICAgIGJ6MmQgPSBCWjJEZWNvbXByZXNzb3IoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmQuZGVjb21wcmVzcykKKyAgICAgICAgdGV4dCA9IGJ6MmQuZGVjb21wcmVzcyhzZWxmLkRBVEEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgc2VsZi5URVhUKQorCisgICAgZGVmIHRlc3REZWNvbXByZXNzQ2h1bmtzMTAoc2VsZik6CisgICAgICAgICMgIlRlc3QgQloyRGVjb21wcmVzc29yLmRlY29tcHJlc3MoKSB3aXRoIGNodW5rcyBvZiAxMCBieXRlcyIKKyAgICAgICAgYnoyZCA9IEJaMkRlY29tcHJlc3NvcigpCisgICAgICAgIHRleHQgPSAnJworICAgICAgICBuID0gMAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgc3RyID0gc2VsZi5EQVRBW24qMTA6KG4rMSkqMTBdCisgICAgICAgICAgICBpZiBub3Qgc3RyOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0ZXh0ICs9IGJ6MmQuZGVjb21wcmVzcyhzdHIpCisgICAgICAgICAgICBuICs9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBzZWxmLlRFWFQpCisKKyAgICBkZWYgdGVzdERlY29tcHJlc3NVbnVzZWREYXRhKHNlbGYpOgorICAgICAgICAjICJUZXN0IEJaMkRlY29tcHJlc3Nvci5kZWNvbXByZXNzKCkgd2l0aCB1bnVzZWQgZGF0YSIKKyAgICAgICAgYnoyZCA9IEJaMkRlY29tcHJlc3NvcigpCisgICAgICAgIHVudXNlZF9kYXRhID0gInRoaXMgaXMgdW51c2VkIGRhdGEiCisgICAgICAgIHRleHQgPSBiejJkLmRlY29tcHJlc3Moc2VsZi5EQVRBK3VudXNlZF9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsIHNlbGYuVEVYVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJkLnVudXNlZF9kYXRhLCB1bnVzZWRfZGF0YSkKKworICAgIGRlZiB0ZXN0RU9GRXJyb3Ioc2VsZik6CisgICAgICAgICMgIkNhbGxpbmcgQloyRGVjb21wcmVzc29yLmRlY29tcHJlc3MoKSBhZnRlciBFT1MgbXVzdCByYWlzZSBFT0ZFcnJvciIKKyAgICAgICAgYnoyZCA9IEJaMkRlY29tcHJlc3NvcigpCisgICAgICAgIHRleHQgPSBiejJkLmRlY29tcHJlc3Moc2VsZi5EQVRBKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgYnoyZC5kZWNvbXByZXNzLCAiYW55dGhpbmciKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgYnoyZC5kZWNvbXByZXNzLCAiIikKKworICAgIEBiaWdtZW10ZXN0KF80RywgbWVtdXNlPTEuMjUpCisgICAgZGVmIHRlc3RCaWdtZW0oc2VsZiwgc2l6ZSk6CisgICAgICAgICMgSXNzdWUgIzE0Mzk4OiBkZWNvbXByZXNzaW9uIGZhaWxzIHdoZW4gb3V0cHV0IGRhdGEgaXMgPj0yR0IuCisgICAgICAgIGlmIHNpemUgPCBfNEc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJUZXN0IG5lZWRzIDVHQiBvZiBtZW1vcnkgdG8gcnVuLiIpCisgICAgICAgIGNvbXByZXNzZWQgPSBiejIuY29tcHJlc3MoImEiICogXzRHKQorICAgICAgICB0ZXh0ID0gYnoyLkJaMkRlY29tcHJlc3NvcigpLmRlY29tcHJlc3MoY29tcHJlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGV4dCksIF80RykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LnN0cmlwKCJhIiksICIiKQorCisKK2NsYXNzIEZ1bmNUZXN0KEJhc2VUZXN0KToKKyAgICAiVGVzdCBtb2R1bGUgZnVuY3Rpb25zIgorCisgICAgZGVmIHRlc3RDb21wcmVzcyhzZWxmKToKKyAgICAgICAgIyAiVGVzdCBjb21wcmVzcygpIGZ1bmN0aW9uIgorICAgICAgICBkYXRhID0gYnoyLmNvbXByZXNzKHNlbGYuVEVYVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRlY29tcHJlc3MoZGF0YSksIHNlbGYuVEVYVCkKKworICAgIGRlZiB0ZXN0Q29tcHJlc3NFbXB0eVN0cmluZyhzZWxmKToKKyAgICAgICAgIyAiVGVzdCBjb21wcmVzcygpIG9mIGVtcHR5IHN0cmluZyIKKyAgICAgICAgdGV4dCA9IGJ6Mi5jb21wcmVzcygnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBzZWxmLkVNUFRZX0RBVEEpCisKKyAgICBkZWYgdGVzdERlY29tcHJlc3Moc2VsZik6CisgICAgICAgICMgIlRlc3QgZGVjb21wcmVzcygpIGZ1bmN0aW9uIgorICAgICAgICB0ZXh0ID0gYnoyLmRlY29tcHJlc3Moc2VsZi5EQVRBKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsIHNlbGYuVEVYVCkKKworICAgIGRlZiB0ZXN0RGVjb21wcmVzc0VtcHR5KHNlbGYpOgorICAgICAgICAjICJUZXN0IGRlY29tcHJlc3MoKSBmdW5jdGlvbiB3aXRoIGVtcHR5IHN0cmluZyIKKyAgICAgICAgdGV4dCA9IGJ6Mi5kZWNvbXByZXNzKCIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICIiKQorCisgICAgZGVmIHRlc3REZWNvbXByZXNzVG9FbXB0eVN0cmluZyhzZWxmKToKKyAgICAgICAgIyAiVGVzdCBkZWNvbXByZXNzKCkgb2YgbWluaW1hbCBiejIgZGF0YSB0byBlbXB0eSBzdHJpbmciCisgICAgICAgIHRleHQgPSBiejIuZGVjb21wcmVzcyhzZWxmLkVNUFRZX0RBVEEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgJycpCisKKyAgICBkZWYgdGVzdERlY29tcHJlc3NJbmNvbXBsZXRlKHNlbGYpOgorICAgICAgICAjICJUZXN0IGRlY29tcHJlc3MoKSBmdW5jdGlvbiB3aXRoIGluY29tcGxldGUgZGF0YSIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyLmRlY29tcHJlc3MsIHNlbGYuREFUQVs6LTEwXSkKKworICAgIEBiaWdtZW10ZXN0KF80RywgbWVtdXNlPTEuMjUpCisgICAgZGVmIHRlc3RDb21wcmVzc0JpZ21lbShzZWxmLCBzaXplKToKKyAgICAgICAgdGV4dCA9ICJhIiAqIHNpemUKKyAgICAgICAgZGF0YSA9IGJ6Mi5jb21wcmVzcyh0ZXh0KQorICAgICAgICBkZWwgdGV4dAorICAgICAgICB0ZXh0ID0gc2VsZi5kZWNvbXByZXNzKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRleHQpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQuc3RyaXAoImEiKSwgIiIpCisKKyAgICBAYmlnbWVtdGVzdChfNEcsIG1lbXVzZT0xLjI1KQorICAgIGRlZiB0ZXN0RGVjb21wcmVzc0JpZ21lbShzZWxmLCBzaXplKToKKyAgICAgICAgIyBJc3N1ZSAjMTQzOTg6IGRlY29tcHJlc3Npb24gZmFpbHMgd2hlbiBvdXRwdXQgZGF0YSBpcyA+PTJHQi4KKyAgICAgICAgaWYgc2l6ZSA8IF80RzoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIlRlc3QgbmVlZHMgNUdCIG9mIG1lbW9yeSB0byBydW4uIikKKyAgICAgICAgY29tcHJlc3NlZCA9IGJ6Mi5jb21wcmVzcygiYSIgKiBfNEcpCisgICAgICAgIHRleHQgPSBiejIuZGVjb21wcmVzcyhjb21wcmVzc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXh0KSwgXzRHKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQuc3RyaXAoImEiKSwgIiIpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBCWjJGaWxlVGVzdCwKKyAgICAgICAgQloyQ29tcHJlc3NvclRlc3QsCisgICAgICAgIEJaMkRlY29tcHJlc3NvclRlc3QsCisgICAgICAgIEZ1bmNUZXN0CisgICAgKQorICAgIHRlc3Rfc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQorCisjIHZpbTp0cz00OnN3PTQKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NhbGVuZGFyLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY2FsZW5kYXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmYjc2ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NhbGVuZGFyLnB5CkBAIC0wLDAgKzEsNDc1IEBACitpbXBvcnQgY2FsZW5kYXIKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IGxvY2FsZQoraW1wb3J0IGRhdGV0aW1lCisKKworcmVzdWx0XzIwMDRfdGV4dCA9ICIiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDQKKworICAgICAgSmFudWFyeSAgICAgICAgICAgICAgICAgICBGZWJydWFyeSAgICAgICAgICAgICAgICAgICBNYXJjaAorTW8gVHUgV2UgVGggRnIgU2EgU3UgICAgICBNbyBUdSBXZSBUaCBGciBTYSBTdSAgICAgIE1vIFR1IFdlIFRoIEZyIFNhIFN1CisgICAgICAgICAgMSAgMiAgMyAgNCAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICAgIDEgIDIgIDMgIDQgIDUgIDYgIDcKKyA1ICA2ICA3ICA4ICA5IDEwIDExICAgICAgIDIgIDMgIDQgIDUgIDYgIDcgIDggICAgICAgOCAgOSAxMCAxMSAxMiAxMyAxNAorMTIgMTMgMTQgMTUgMTYgMTcgMTggICAgICAgOSAxMCAxMSAxMiAxMyAxNCAxNSAgICAgIDE1IDE2IDE3IDE4IDE5IDIwIDIxCisxOSAyMCAyMSAyMiAyMyAyNCAyNSAgICAgIDE2IDE3IDE4IDE5IDIwIDIxIDIyICAgICAgMjIgMjMgMjQgMjUgMjYgMjcgMjgKKzI2IDI3IDI4IDI5IDMwIDMxICAgICAgICAgMjMgMjQgMjUgMjYgMjcgMjggMjkgICAgICAyOSAzMCAzMQorCisgICAgICAgQXByaWwgICAgICAgICAgICAgICAgICAgICAgTWF5ICAgICAgICAgICAgICAgICAgICAgICBKdW5lCitNbyBUdSBXZSBUaCBGciBTYSBTdSAgICAgIE1vIFR1IFdlIFRoIEZyIFNhIFN1ICAgICAgTW8gVHUgV2UgVGggRnIgU2EgU3UKKyAgICAgICAgICAxICAyICAzICA0ICAgICAgICAgICAgICAgICAgICAgIDEgIDIgICAgICAgICAgMSAgMiAgMyAgNCAgNSAgNgorIDUgIDYgIDcgIDggIDkgMTAgMTEgICAgICAgMyAgNCAgNSAgNiAgNyAgOCAgOSAgICAgICA3ICA4ICA5IDEwIDExIDEyIDEzCisxMiAxMyAxNCAxNSAxNiAxNyAxOCAgICAgIDEwIDExIDEyIDEzIDE0IDE1IDE2ICAgICAgMTQgMTUgMTYgMTcgMTggMTkgMjAKKzE5IDIwIDIxIDIyIDIzIDI0IDI1ICAgICAgMTcgMTggMTkgMjAgMjEgMjIgMjMgICAgICAyMSAyMiAyMyAyNCAyNSAyNiAyNworMjYgMjcgMjggMjkgMzAgICAgICAgICAgICAyNCAyNSAyNiAyNyAyOCAyOSAzMCAgICAgIDI4IDI5IDMwCisgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKKyAgICAgICAgSnVseSAgICAgICAgICAgICAgICAgICAgIEF1Z3VzdCAgICAgICAgICAgICAgICAgIFNlcHRlbWJlcgorTW8gVHUgV2UgVGggRnIgU2EgU3UgICAgICBNbyBUdSBXZSBUaCBGciBTYSBTdSAgICAgIE1vIFR1IFdlIFRoIEZyIFNhIFN1CisgICAgICAgICAgMSAgMiAgMyAgNCAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgIDEgIDIgIDMgIDQgIDUKKyA1ICA2ICA3ICA4ICA5IDEwIDExICAgICAgIDIgIDMgIDQgIDUgIDYgIDcgIDggICAgICAgNiAgNyAgOCAgOSAxMCAxMSAxMgorMTIgMTMgMTQgMTUgMTYgMTcgMTggICAgICAgOSAxMCAxMSAxMiAxMyAxNCAxNSAgICAgIDEzIDE0IDE1IDE2IDE3IDE4IDE5CisxOSAyMCAyMSAyMiAyMyAyNCAyNSAgICAgIDE2IDE3IDE4IDE5IDIwIDIxIDIyICAgICAgMjAgMjEgMjIgMjMgMjQgMjUgMjYKKzI2IDI3IDI4IDI5IDMwIDMxICAgICAgICAgMjMgMjQgMjUgMjYgMjcgMjggMjkgICAgICAyNyAyOCAyOSAzMAorICAgICAgICAgICAgICAgICAgICAgICAgICAzMCAzMQorCisgICAgICBPY3RvYmVyICAgICAgICAgICAgICAgICAgIE5vdmVtYmVyICAgICAgICAgICAgICAgICAgRGVjZW1iZXIKK01vIFR1IFdlIFRoIEZyIFNhIFN1ICAgICAgTW8gVHUgV2UgVGggRnIgU2EgU3UgICAgICBNbyBUdSBXZSBUaCBGciBTYSBTdQorICAgICAgICAgICAgIDEgIDIgIDMgICAgICAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgICAgICAgICAgICAxICAyICAzICA0ICA1CisgNCAgNSAgNiAgNyAgOCAgOSAxMCAgICAgICA4ICA5IDEwIDExIDEyIDEzIDE0ICAgICAgIDYgIDcgIDggIDkgMTAgMTEgMTIKKzExIDEyIDEzIDE0IDE1IDE2IDE3ICAgICAgMTUgMTYgMTcgMTggMTkgMjAgMjEgICAgICAxMyAxNCAxNSAxNiAxNyAxOCAxOQorMTggMTkgMjAgMjEgMjIgMjMgMjQgICAgICAyMiAyMyAyNCAyNSAyNiAyNyAyOCAgICAgIDIwIDIxIDIyIDIzIDI0IDI1IDI2CisyNSAyNiAyNyAyOCAyOSAzMCAzMSAgICAgIDI5IDMwICAgICAgICAgICAgICAgICAgICAgMjcgMjggMjkgMzAgMzEKKyIiIgorCityZXN1bHRfMjAwNF9odG1sID0gIiIiCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJhc2NpaSI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWFzY2lpIiAvPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iY2FsZW5kYXIuY3NzIiAvPgorPHRpdGxlPkNhbGVuZGFyIGZvciAyMDA0PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ieWVhciI+Cis8dHI+PHRoIGNvbHNwYW49IjMiIGNsYXNzPSJ5ZWFyIj4yMDA0PC90aD48L3RyPjx0cj48dGQ+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibW9udGgiPgorPHRyPjx0aCBjb2xzcGFuPSI3IiBjbGFzcz0ibW9udGgiPkphbnVhcnk8L3RoPjwvdHI+Cis8dHI+PHRoIGNsYXNzPSJtb24iPk1vbjwvdGg+PHRoIGNsYXNzPSJ0dWUiPlR1ZTwvdGg+PHRoIGNsYXNzPSJ3ZWQiPldlZDwvdGg+PHRoIGNsYXNzPSJ0aHUiPlRodTwvdGg+PHRoIGNsYXNzPSJmcmkiPkZyaTwvdGg+PHRoIGNsYXNzPSJzYXQiPlNhdDwvdGg+PHRoIGNsYXNzPSJzdW4iPlN1bjwvdGg+PC90cj4KKzx0cj48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9InRodSI+MTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjI8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4zPC90ZD48dGQgY2xhc3M9InN1biI+NDwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+NTwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjY8L3RkPjx0ZCBjbGFzcz0id2VkIj43PC90ZD48dGQgY2xhc3M9InRodSI+ODwvdGQ+PHRkIGNsYXNzPSJmcmkiPjk8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4xMDwvdGQ+PHRkIGNsYXNzPSJzdW4iPjExPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4xMjwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjEzPC90ZD48dGQgY2xhc3M9IndlZCI+MTQ8L3RkPjx0ZCBjbGFzcz0idGh1Ij4xNTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjE2PC90ZD48dGQgY2xhc3M9InNhdCI+MTc8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xODwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MTk8L3RkPjx0ZCBjbGFzcz0idHVlIj4yMDwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjIxPC90ZD48dGQgY2xhc3M9InRodSI+MjI8L3RkPjx0ZCBjbGFzcz0iZnJpIj4yMzwvdGQ+PHRkIGNsYXNzPSJzYXQiPjI0PC90ZD48dGQgY2xhc3M9InN1biI+MjU8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjI2PC90ZD48dGQgY2xhc3M9InR1ZSI+Mjc8L3RkPjx0ZCBjbGFzcz0id2VkIj4yODwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjI5PC90ZD48dGQgY2xhc3M9ImZyaSI+MzA8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4zMTwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48L3RyPgorPC90YWJsZT4KKzwvdGQ+PHRkPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9Im1vbnRoIj4KKzx0cj48dGggY29sc3Bhbj0iNyIgY2xhc3M9Im1vbnRoIj5GZWJydWFyeTwvdGg+PC90cj4KKzx0cj48dGggY2xhc3M9Im1vbiI+TW9uPC90aD48dGggY2xhc3M9InR1ZSI+VHVlPC90aD48dGggY2xhc3M9IndlZCI+V2VkPC90aD48dGggY2xhc3M9InRodSI+VGh1PC90aD48dGggY2xhc3M9ImZyaSI+RnJpPC90aD48dGggY2xhc3M9InNhdCI+U2F0PC90aD48dGggY2xhc3M9InN1biI+U3VuPC90aD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4yPC90ZD48dGQgY2xhc3M9InR1ZSI+MzwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjQ8L3RkPjx0ZCBjbGFzcz0idGh1Ij41PC90ZD48dGQgY2xhc3M9ImZyaSI+NjwvdGQ+PHRkIGNsYXNzPSJzYXQiPjc8L3RkPjx0ZCBjbGFzcz0ic3VuIj44PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj45PC90ZD48dGQgY2xhc3M9InR1ZSI+MTA8L3RkPjx0ZCBjbGFzcz0id2VkIj4xMTwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjEyPC90ZD48dGQgY2xhc3M9ImZyaSI+MTM8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4xNDwvdGQ+PHRkIGNsYXNzPSJzdW4iPjE1PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4xNjwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjE3PC90ZD48dGQgY2xhc3M9IndlZCI+MTg8L3RkPjx0ZCBjbGFzcz0idGh1Ij4xOTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjIwPC90ZD48dGQgY2xhc3M9InNhdCI+MjE8L3RkPjx0ZCBjbGFzcz0ic3VuIj4yMjwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MjM8L3RkPjx0ZCBjbGFzcz0idHVlIj4yNDwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjI1PC90ZD48dGQgY2xhc3M9InRodSI+MjY8L3RkPjx0ZCBjbGFzcz0iZnJpIj4yNzwvdGQ+PHRkIGNsYXNzPSJzYXQiPjI4PC90ZD48dGQgY2xhc3M9InN1biI+Mjk8L3RkPjwvdHI+Cis8L3RhYmxlPgorPC90ZD48dGQ+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibW9udGgiPgorPHRyPjx0aCBjb2xzcGFuPSI3IiBjbGFzcz0ibW9udGgiPk1hcmNoPC90aD48L3RyPgorPHRyPjx0aCBjbGFzcz0ibW9uIj5Nb248L3RoPjx0aCBjbGFzcz0idHVlIj5UdWU8L3RoPjx0aCBjbGFzcz0id2VkIj5XZWQ8L3RoPjx0aCBjbGFzcz0idGh1Ij5UaHU8L3RoPjx0aCBjbGFzcz0iZnJpIj5Gcmk8L3RoPjx0aCBjbGFzcz0ic2F0Ij5TYXQ8L3RoPjx0aCBjbGFzcz0ic3VuIj5TdW48L3RoPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjE8L3RkPjx0ZCBjbGFzcz0idHVlIj4yPC90ZD48dGQgY2xhc3M9IndlZCI+MzwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjQ8L3RkPjx0ZCBjbGFzcz0iZnJpIj41PC90ZD48dGQgY2xhc3M9InNhdCI+NjwvdGQ+PHRkIGNsYXNzPSJzdW4iPjc8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjg8L3RkPjx0ZCBjbGFzcz0idHVlIj45PC90ZD48dGQgY2xhc3M9IndlZCI+MTA8L3RkPjx0ZCBjbGFzcz0idGh1Ij4xMTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjEyPC90ZD48dGQgY2xhc3M9InNhdCI+MTM8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xNDwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MTU8L3RkPjx0ZCBjbGFzcz0idHVlIj4xNjwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjE3PC90ZD48dGQgY2xhc3M9InRodSI+MTg8L3RkPjx0ZCBjbGFzcz0iZnJpIj4xOTwvdGQ+PHRkIGNsYXNzPSJzYXQiPjIwPC90ZD48dGQgY2xhc3M9InN1biI+MjE8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjIyPC90ZD48dGQgY2xhc3M9InR1ZSI+MjM8L3RkPjx0ZCBjbGFzcz0id2VkIj4yNDwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjI1PC90ZD48dGQgY2xhc3M9ImZyaSI+MjY8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4yNzwvdGQ+PHRkIGNsYXNzPSJzdW4iPjI4PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4yOTwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjMwPC90ZD48dGQgY2xhc3M9IndlZCI+MzE8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L3RkPjwvdHI+PHRyPjx0ZD48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJtb250aCI+Cis8dHI+PHRoIGNvbHNwYW49IjciIGNsYXNzPSJtb250aCI+QXByaWw8L3RoPjwvdHI+Cis8dHI+PHRoIGNsYXNzPSJtb24iPk1vbjwvdGg+PHRoIGNsYXNzPSJ0dWUiPlR1ZTwvdGg+PHRoIGNsYXNzPSJ3ZWQiPldlZDwvdGg+PHRoIGNsYXNzPSJ0aHUiPlRodTwvdGg+PHRoIGNsYXNzPSJmcmkiPkZyaTwvdGg+PHRoIGNsYXNzPSJzYXQiPlNhdDwvdGg+PHRoIGNsYXNzPSJzdW4iPlN1bjwvdGg+PC90cj4KKzx0cj48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9InRodSI+MTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjI8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4zPC90ZD48dGQgY2xhc3M9InN1biI+NDwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+NTwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjY8L3RkPjx0ZCBjbGFzcz0id2VkIj43PC90ZD48dGQgY2xhc3M9InRodSI+ODwvdGQ+PHRkIGNsYXNzPSJmcmkiPjk8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4xMDwvdGQ+PHRkIGNsYXNzPSJzdW4iPjExPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4xMjwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjEzPC90ZD48dGQgY2xhc3M9IndlZCI+MTQ8L3RkPjx0ZCBjbGFzcz0idGh1Ij4xNTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjE2PC90ZD48dGQgY2xhc3M9InNhdCI+MTc8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xODwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MTk8L3RkPjx0ZCBjbGFzcz0idHVlIj4yMDwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjIxPC90ZD48dGQgY2xhc3M9InRodSI+MjI8L3RkPjx0ZCBjbGFzcz0iZnJpIj4yMzwvdGQ+PHRkIGNsYXNzPSJzYXQiPjI0PC90ZD48dGQgY2xhc3M9InN1biI+MjU8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjI2PC90ZD48dGQgY2xhc3M9InR1ZSI+Mjc8L3RkPjx0ZCBjbGFzcz0id2VkIj4yODwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjI5PC90ZD48dGQgY2xhc3M9ImZyaSI+MzA8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48L3RyPgorPC90YWJsZT4KKzwvdGQ+PHRkPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9Im1vbnRoIj4KKzx0cj48dGggY29sc3Bhbj0iNyIgY2xhc3M9Im1vbnRoIj5NYXk8L3RoPjwvdHI+Cis8dHI+PHRoIGNsYXNzPSJtb24iPk1vbjwvdGg+PHRoIGNsYXNzPSJ0dWUiPlR1ZTwvdGg+PHRoIGNsYXNzPSJ3ZWQiPldlZDwvdGg+PHRoIGNsYXNzPSJ0aHUiPlRodTwvdGg+PHRoIGNsYXNzPSJmcmkiPkZyaTwvdGg+PHRoIGNsYXNzPSJzYXQiPlNhdDwvdGg+PHRoIGNsYXNzPSJzdW4iPlN1bjwvdGg+PC90cj4KKzx0cj48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJzYXQiPjE8L3RkPjx0ZCBjbGFzcz0ic3VuIj4yPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4zPC90ZD48dGQgY2xhc3M9InR1ZSI+NDwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjU8L3RkPjx0ZCBjbGFzcz0idGh1Ij42PC90ZD48dGQgY2xhc3M9ImZyaSI+NzwvdGQ+PHRkIGNsYXNzPSJzYXQiPjg8L3RkPjx0ZCBjbGFzcz0ic3VuIj45PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4xMDwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjExPC90ZD48dGQgY2xhc3M9IndlZCI+MTI8L3RkPjx0ZCBjbGFzcz0idGh1Ij4xMzwvdGQ+PHRkIGNsYXNzPSJmcmkiPjE0PC90ZD48dGQgY2xhc3M9InNhdCI+MTU8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xNjwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MTc8L3RkPjx0ZCBjbGFzcz0idHVlIj4xODwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjE5PC90ZD48dGQgY2xhc3M9InRodSI+MjA8L3RkPjx0ZCBjbGFzcz0iZnJpIj4yMTwvdGQ+PHRkIGNsYXNzPSJzYXQiPjIyPC90ZD48dGQgY2xhc3M9InN1biI+MjM8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjI0PC90ZD48dGQgY2xhc3M9InR1ZSI+MjU8L3RkPjx0ZCBjbGFzcz0id2VkIj4yNjwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjI3PC90ZD48dGQgY2xhc3M9ImZyaSI+Mjg8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4yOTwvdGQ+PHRkIGNsYXNzPSJzdW4iPjMwPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4zMTwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L3RkPjx0ZD48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJtb250aCI+Cis8dHI+PHRoIGNvbHNwYW49IjciIGNsYXNzPSJtb250aCI+SnVuZTwvdGg+PC90cj4KKzx0cj48dGggY2xhc3M9Im1vbiI+TW9uPC90aD48dGggY2xhc3M9InR1ZSI+VHVlPC90aD48dGggY2xhc3M9IndlZCI+V2VkPC90aD48dGggY2xhc3M9InRodSI+VGh1PC90aD48dGggY2xhc3M9ImZyaSI+RnJpPC90aD48dGggY2xhc3M9InNhdCI+U2F0PC90aD48dGggY2xhc3M9InN1biI+U3VuPC90aD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjE8L3RkPjx0ZCBjbGFzcz0id2VkIj4yPC90ZD48dGQgY2xhc3M9InRodSI+MzwvdGQ+PHRkIGNsYXNzPSJmcmkiPjQ8L3RkPjx0ZCBjbGFzcz0ic2F0Ij41PC90ZD48dGQgY2xhc3M9InN1biI+NjwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+NzwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjg8L3RkPjx0ZCBjbGFzcz0id2VkIj45PC90ZD48dGQgY2xhc3M9InRodSI+MTA8L3RkPjx0ZCBjbGFzcz0iZnJpIj4xMTwvdGQ+PHRkIGNsYXNzPSJzYXQiPjEyPC90ZD48dGQgY2xhc3M9InN1biI+MTM8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjE0PC90ZD48dGQgY2xhc3M9InR1ZSI+MTU8L3RkPjx0ZCBjbGFzcz0id2VkIj4xNjwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjE3PC90ZD48dGQgY2xhc3M9ImZyaSI+MTg8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4xOTwvdGQ+PHRkIGNsYXNzPSJzdW4iPjIwPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4yMTwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjIyPC90ZD48dGQgY2xhc3M9IndlZCI+MjM8L3RkPjx0ZCBjbGFzcz0idGh1Ij4yNDwvdGQ+PHRkIGNsYXNzPSJmcmkiPjI1PC90ZD48dGQgY2xhc3M9InNhdCI+MjY8L3RkPjx0ZCBjbGFzcz0ic3VuIj4yNzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+Mjg8L3RkPjx0ZCBjbGFzcz0idHVlIj4yOTwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjMwPC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjwvdHI+Cis8L3RhYmxlPgorPC90ZD48L3RyPjx0cj48dGQ+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibW9udGgiPgorPHRyPjx0aCBjb2xzcGFuPSI3IiBjbGFzcz0ibW9udGgiPkp1bHk8L3RoPjwvdHI+Cis8dHI+PHRoIGNsYXNzPSJtb24iPk1vbjwvdGg+PHRoIGNsYXNzPSJ0dWUiPlR1ZTwvdGg+PHRoIGNsYXNzPSJ3ZWQiPldlZDwvdGg+PHRoIGNsYXNzPSJ0aHUiPlRodTwvdGg+PHRoIGNsYXNzPSJmcmkiPkZyaTwvdGg+PHRoIGNsYXNzPSJzYXQiPlNhdDwvdGg+PHRoIGNsYXNzPSJzdW4iPlN1bjwvdGg+PC90cj4KKzx0cj48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9InRodSI+MTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjI8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4zPC90ZD48dGQgY2xhc3M9InN1biI+NDwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+NTwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjY8L3RkPjx0ZCBjbGFzcz0id2VkIj43PC90ZD48dGQgY2xhc3M9InRodSI+ODwvdGQ+PHRkIGNsYXNzPSJmcmkiPjk8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4xMDwvdGQ+PHRkIGNsYXNzPSJzdW4iPjExPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4xMjwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjEzPC90ZD48dGQgY2xhc3M9IndlZCI+MTQ8L3RkPjx0ZCBjbGFzcz0idGh1Ij4xNTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjE2PC90ZD48dGQgY2xhc3M9InNhdCI+MTc8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xODwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MTk8L3RkPjx0ZCBjbGFzcz0idHVlIj4yMDwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjIxPC90ZD48dGQgY2xhc3M9InRodSI+MjI8L3RkPjx0ZCBjbGFzcz0iZnJpIj4yMzwvdGQ+PHRkIGNsYXNzPSJzYXQiPjI0PC90ZD48dGQgY2xhc3M9InN1biI+MjU8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjI2PC90ZD48dGQgY2xhc3M9InR1ZSI+Mjc8L3RkPjx0ZCBjbGFzcz0id2VkIj4yODwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjI5PC90ZD48dGQgY2xhc3M9ImZyaSI+MzA8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4zMTwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48L3RyPgorPC90YWJsZT4KKzwvdGQ+PHRkPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9Im1vbnRoIj4KKzx0cj48dGggY29sc3Bhbj0iNyIgY2xhc3M9Im1vbnRoIj5BdWd1c3Q8L3RoPjwvdHI+Cis8dHI+PHRoIGNsYXNzPSJtb24iPk1vbjwvdGg+PHRoIGNsYXNzPSJ0dWUiPlR1ZTwvdGg+PHRoIGNsYXNzPSJ3ZWQiPldlZDwvdGg+PHRoIGNsYXNzPSJ0aHUiPlRodTwvdGg+PHRoIGNsYXNzPSJmcmkiPkZyaTwvdGg+PHRoIGNsYXNzPSJzYXQiPlNhdDwvdGg+PHRoIGNsYXNzPSJzdW4iPlN1bjwvdGg+PC90cj4KKzx0cj48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9InN1biI+MTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MjwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjM8L3RkPjx0ZCBjbGFzcz0id2VkIj40PC90ZD48dGQgY2xhc3M9InRodSI+NTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjY8L3RkPjx0ZCBjbGFzcz0ic2F0Ij43PC90ZD48dGQgY2xhc3M9InN1biI+ODwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+OTwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjEwPC90ZD48dGQgY2xhc3M9IndlZCI+MTE8L3RkPjx0ZCBjbGFzcz0idGh1Ij4xMjwvdGQ+PHRkIGNsYXNzPSJmcmkiPjEzPC90ZD48dGQgY2xhc3M9InNhdCI+MTQ8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xNTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MTY8L3RkPjx0ZCBjbGFzcz0idHVlIj4xNzwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjE4PC90ZD48dGQgY2xhc3M9InRodSI+MTk8L3RkPjx0ZCBjbGFzcz0iZnJpIj4yMDwvdGQ+PHRkIGNsYXNzPSJzYXQiPjIxPC90ZD48dGQgY2xhc3M9InN1biI+MjI8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjIzPC90ZD48dGQgY2xhc3M9InR1ZSI+MjQ8L3RkPjx0ZCBjbGFzcz0id2VkIj4yNTwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjI2PC90ZD48dGQgY2xhc3M9ImZyaSI+Mjc8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4yODwvdGQ+PHRkIGNsYXNzPSJzdW4iPjI5PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4zMDwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjMxPC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L3RkPjx0ZD48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJtb250aCI+Cis8dHI+PHRoIGNvbHNwYW49IjciIGNsYXNzPSJtb250aCI+U2VwdGVtYmVyPC90aD48L3RyPgorPHRyPjx0aCBjbGFzcz0ibW9uIj5Nb248L3RoPjx0aCBjbGFzcz0idHVlIj5UdWU8L3RoPjx0aCBjbGFzcz0id2VkIj5XZWQ8L3RoPjx0aCBjbGFzcz0idGh1Ij5UaHU8L3RoPjx0aCBjbGFzcz0iZnJpIj5Gcmk8L3RoPjx0aCBjbGFzcz0ic2F0Ij5TYXQ8L3RoPjx0aCBjbGFzcz0ic3VuIj5TdW48L3RoPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0id2VkIj4xPC90ZD48dGQgY2xhc3M9InRodSI+MjwvdGQ+PHRkIGNsYXNzPSJmcmkiPjM8L3RkPjx0ZCBjbGFzcz0ic2F0Ij40PC90ZD48dGQgY2xhc3M9InN1biI+NTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+NjwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjc8L3RkPjx0ZCBjbGFzcz0id2VkIj44PC90ZD48dGQgY2xhc3M9InRodSI+OTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjEwPC90ZD48dGQgY2xhc3M9InNhdCI+MTE8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xMjwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MTM8L3RkPjx0ZCBjbGFzcz0idHVlIj4xNDwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjE1PC90ZD48dGQgY2xhc3M9InRodSI+MTY8L3RkPjx0ZCBjbGFzcz0iZnJpIj4xNzwvdGQ+PHRkIGNsYXNzPSJzYXQiPjE4PC90ZD48dGQgY2xhc3M9InN1biI+MTk8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjIwPC90ZD48dGQgY2xhc3M9InR1ZSI+MjE8L3RkPjx0ZCBjbGFzcz0id2VkIj4yMjwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjIzPC90ZD48dGQgY2xhc3M9ImZyaSI+MjQ8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4yNTwvdGQ+PHRkIGNsYXNzPSJzdW4iPjI2PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4yNzwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjI4PC90ZD48dGQgY2xhc3M9IndlZCI+Mjk8L3RkPjx0ZCBjbGFzcz0idGh1Ij4zMDwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L3RkPjwvdHI+PHRyPjx0ZD48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJtb250aCI+Cis8dHI+PHRoIGNvbHNwYW49IjciIGNsYXNzPSJtb250aCI+T2N0b2JlcjwvdGg+PC90cj4KKzx0cj48dGggY2xhc3M9Im1vbiI+TW9uPC90aD48dGggY2xhc3M9InR1ZSI+VHVlPC90aD48dGggY2xhc3M9IndlZCI+V2VkPC90aD48dGggY2xhc3M9InRodSI+VGh1PC90aD48dGggY2xhc3M9ImZyaSI+RnJpPC90aD48dGggY2xhc3M9InNhdCI+U2F0PC90aD48dGggY2xhc3M9InN1biI+U3VuPC90aD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJmcmkiPjE8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4yPC90ZD48dGQgY2xhc3M9InN1biI+MzwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+NDwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjU8L3RkPjx0ZCBjbGFzcz0id2VkIj42PC90ZD48dGQgY2xhc3M9InRodSI+NzwvdGQ+PHRkIGNsYXNzPSJmcmkiPjg8L3RkPjx0ZCBjbGFzcz0ic2F0Ij45PC90ZD48dGQgY2xhc3M9InN1biI+MTA8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjExPC90ZD48dGQgY2xhc3M9InR1ZSI+MTI8L3RkPjx0ZCBjbGFzcz0id2VkIj4xMzwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjE0PC90ZD48dGQgY2xhc3M9ImZyaSI+MTU8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4xNjwvdGQ+PHRkIGNsYXNzPSJzdW4iPjE3PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4xODwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjE5PC90ZD48dGQgY2xhc3M9IndlZCI+MjA8L3RkPjx0ZCBjbGFzcz0idGh1Ij4yMTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjIyPC90ZD48dGQgY2xhc3M9InNhdCI+MjM8L3RkPjx0ZCBjbGFzcz0ic3VuIj4yNDwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MjU8L3RkPjx0ZCBjbGFzcz0idHVlIj4yNjwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjI3PC90ZD48dGQgY2xhc3M9InRodSI+Mjg8L3RkPjx0ZCBjbGFzcz0iZnJpIj4yOTwvdGQ+PHRkIGNsYXNzPSJzYXQiPjMwPC90ZD48dGQgY2xhc3M9InN1biI+MzE8L3RkPjwvdHI+Cis8L3RhYmxlPgorPC90ZD48dGQ+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibW9udGgiPgorPHRyPjx0aCBjb2xzcGFuPSI3IiBjbGFzcz0ibW9udGgiPk5vdmVtYmVyPC90aD48L3RyPgorPHRyPjx0aCBjbGFzcz0ibW9uIj5Nb248L3RoPjx0aCBjbGFzcz0idHVlIj5UdWU8L3RoPjx0aCBjbGFzcz0id2VkIj5XZWQ8L3RoPjx0aCBjbGFzcz0idGh1Ij5UaHU8L3RoPjx0aCBjbGFzcz0iZnJpIj5Gcmk8L3RoPjx0aCBjbGFzcz0ic2F0Ij5TYXQ8L3RoPjx0aCBjbGFzcz0ic3VuIj5TdW48L3RoPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjE8L3RkPjx0ZCBjbGFzcz0idHVlIj4yPC90ZD48dGQgY2xhc3M9IndlZCI+MzwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjQ8L3RkPjx0ZCBjbGFzcz0iZnJpIj41PC90ZD48dGQgY2xhc3M9InNhdCI+NjwvdGQ+PHRkIGNsYXNzPSJzdW4iPjc8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjg8L3RkPjx0ZCBjbGFzcz0idHVlIj45PC90ZD48dGQgY2xhc3M9IndlZCI+MTA8L3RkPjx0ZCBjbGFzcz0idGh1Ij4xMTwvdGQ+PHRkIGNsYXNzPSJmcmkiPjEyPC90ZD48dGQgY2xhc3M9InNhdCI+MTM8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xNDwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MTU8L3RkPjx0ZCBjbGFzcz0idHVlIj4xNjwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjE3PC90ZD48dGQgY2xhc3M9InRodSI+MTg8L3RkPjx0ZCBjbGFzcz0iZnJpIj4xOTwvdGQ+PHRkIGNsYXNzPSJzYXQiPjIwPC90ZD48dGQgY2xhc3M9InN1biI+MjE8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjIyPC90ZD48dGQgY2xhc3M9InR1ZSI+MjM8L3RkPjx0ZCBjbGFzcz0id2VkIj4yNDwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjI1PC90ZD48dGQgY2xhc3M9ImZyaSI+MjY8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4yNzwvdGQ+PHRkIGNsYXNzPSJzdW4iPjI4PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4yOTwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjMwPC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L3RkPjx0ZD48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJtb250aCI+Cis8dHI+PHRoIGNvbHNwYW49IjciIGNsYXNzPSJtb250aCI+RGVjZW1iZXI8L3RoPjwvdHI+Cis8dHI+PHRoIGNsYXNzPSJtb24iPk1vbjwvdGg+PHRoIGNsYXNzPSJ0dWUiPlR1ZTwvdGg+PHRoIGNsYXNzPSJ3ZWQiPldlZDwvdGg+PHRoIGNsYXNzPSJ0aHUiPlRodTwvdGg+PHRoIGNsYXNzPSJmcmkiPkZyaTwvdGg+PHRoIGNsYXNzPSJzYXQiPlNhdDwvdGg+PHRoIGNsYXNzPSJzdW4iPlN1bjwvdGg+PC90cj4KKzx0cj48dGQgY2xhc3M9Im5vZGF5Ij4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjE8L3RkPjx0ZCBjbGFzcz0idGh1Ij4yPC90ZD48dGQgY2xhc3M9ImZyaSI+MzwvdGQ+PHRkIGNsYXNzPSJzYXQiPjQ8L3RkPjx0ZCBjbGFzcz0ic3VuIj41PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj42PC90ZD48dGQgY2xhc3M9InR1ZSI+NzwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjg8L3RkPjx0ZCBjbGFzcz0idGh1Ij45PC90ZD48dGQgY2xhc3M9ImZyaSI+MTA8L3RkPjx0ZCBjbGFzcz0ic2F0Ij4xMTwvdGQ+PHRkIGNsYXNzPSJzdW4iPjEyPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0ibW9uIj4xMzwvdGQ+PHRkIGNsYXNzPSJ0dWUiPjE0PC90ZD48dGQgY2xhc3M9IndlZCI+MTU8L3RkPjx0ZCBjbGFzcz0idGh1Ij4xNjwvdGQ+PHRkIGNsYXNzPSJmcmkiPjE3PC90ZD48dGQgY2xhc3M9InNhdCI+MTg8L3RkPjx0ZCBjbGFzcz0ic3VuIj4xOTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9Im1vbiI+MjA8L3RkPjx0ZCBjbGFzcz0idHVlIj4yMTwvdGQ+PHRkIGNsYXNzPSJ3ZWQiPjIyPC90ZD48dGQgY2xhc3M9InRodSI+MjM8L3RkPjx0ZCBjbGFzcz0iZnJpIj4yNDwvdGQ+PHRkIGNsYXNzPSJzYXQiPjI1PC90ZD48dGQgY2xhc3M9InN1biI+MjY8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJtb24iPjI3PC90ZD48dGQgY2xhc3M9InR1ZSI+Mjg8L3RkPjx0ZCBjbGFzcz0id2VkIj4yOTwvdGQ+PHRkIGNsYXNzPSJ0aHUiPjMwPC90ZD48dGQgY2xhc3M9ImZyaSI+MzE8L3RkPjx0ZCBjbGFzcz0ibm9kYXkiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJub2RheSI+Jm5ic3A7PC90ZD48L3RyPgorPC90YWJsZT4KKzwvdGQ+PC90cj48L3RhYmxlPjwvYm9keT4KKzwvaHRtbD4KKyIiIgorCisKK2NsYXNzIE91dHB1dFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgbm9ybWFsaXplX2NhbGVuZGFyKHNlbGYsIHMpOgorICAgICAgICAjIEZpbHRlcnMgb3V0IGxvY2FsZSBkZXBlbmRlbnQgc3RyaW5ncworICAgICAgICBkZWYgbmVpdGhlcnNwYWNlbm9yZGlnaXQoYyk6CisgICAgICAgICAgICByZXR1cm4gbm90IGMuaXNzcGFjZSgpIGFuZCBub3QgYy5pc2RpZ2l0KCkKKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBsaW5lIGluIHMuc3BsaXRsaW5lcyhGYWxzZSk6CisgICAgICAgICAgICAjIERyb3AgdGV4dHMsIGFzIHRoZXkgYXJlIGxvY2FsZSBkZXBlbmRlbnQKKyAgICAgICAgICAgIGlmIGxpbmUgYW5kIG5vdCBmaWx0ZXIobmVpdGhlcnNwYWNlbm9yZGlnaXQsIGxpbmUpOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICByZXR1cm4gbGluZXMKKworICAgIGRlZiB0ZXN0X291dHB1dChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYubm9ybWFsaXplX2NhbGVuZGFyKGNhbGVuZGFyLmNhbGVuZGFyKDIwMDQpKSwKKyAgICAgICAgICAgIHNlbGYubm9ybWFsaXplX2NhbGVuZGFyKHJlc3VsdF8yMDA0X3RleHQpCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X291dHB1dF90ZXh0Y2FsZW5kYXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjYWxlbmRhci5UZXh0Q2FsZW5kYXIoKS5mb3JtYXR5ZWFyKDIwMDQpLnN0cmlwKCksCisgICAgICAgICAgICByZXN1bHRfMjAwNF90ZXh0LnN0cmlwKCkKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3Rfb3V0cHV0X2h0bWxjYWxlbmRhcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNhbGVuZGFyLkhUTUxDYWxlbmRhcigpLmZvcm1hdHllYXJwYWdlKDIwMDQpLnN0cmlwKCksCisgICAgICAgICAgICByZXN1bHRfMjAwNF9odG1sLnN0cmlwKCkKKyAgICAgICAgKQorCisKK2NsYXNzIENhbGVuZGFyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2lzbGVhcChzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgcmV0dXJuIGlzIHJpZ2h0IGZvciBhIGZldyB5ZWFycywgYW5kCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIHJldHVybiB2YWx1ZXMgYXJlIDEgb3IgMCwgbm90IGp1c3QgdHJ1ZSBvcgorICAgICAgICAjIGZhbHNlIChzZWUgU0YgYnVnICM0ODU3OTQpLiAgU3BlY2lmaWMgYWRkaXRpb25hbCB0ZXN0cyBtYXkKKyAgICAgICAgIyBiZSBhcHByb3ByaWF0ZTsgdGhpcyB0ZXN0cyBhIHNpbmdsZSAiY3ljbGUiLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLmlzbGVhcCgyMDAwKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxlbmRhci5pc2xlYXAoMjAwMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIuaXNsZWFwKDIwMDIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLmlzbGVhcCgyMDAzKSwgMCkKKworICAgIGRlZiB0ZXN0X3NldGZpcnN0d2Vla2RheShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2FsZW5kYXIuc2V0Zmlyc3R3ZWVrZGF5LCAnZmxhYmJlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNhbGVuZGFyLnNldGZpcnN0d2Vla2RheSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNhbGVuZGFyLnNldGZpcnN0d2Vla2RheSwgMjAwKQorICAgICAgICBvcmlnID0gY2FsZW5kYXIuZmlyc3R3ZWVrZGF5KCkKKyAgICAgICAgY2FsZW5kYXIuc2V0Zmlyc3R3ZWVrZGF5KGNhbGVuZGFyLlNVTkRBWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxlbmRhci5maXJzdHdlZWtkYXkoKSwgY2FsZW5kYXIuU1VOREFZKQorICAgICAgICBjYWxlbmRhci5zZXRmaXJzdHdlZWtkYXkoY2FsZW5kYXIuTU9OREFZKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGVuZGFyLmZpcnN0d2Vla2RheSgpLCBjYWxlbmRhci5NT05EQVkpCisgICAgICAgIGNhbGVuZGFyLnNldGZpcnN0d2Vla2RheShvcmlnKQorCisgICAgZGVmIHRlc3RfZW51bWVyYXRld2Vla2RheXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGNhbGVuZGFyLmRheV9hYmJyLl9fZ2V0aXRlbV9fLCAtMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGNhbGVuZGFyLmRheV9uYW1lLl9fZ2V0aXRlbV9fLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oW2QgZm9yIGQgaW4gY2FsZW5kYXIuZGF5X2FiYnJdKSwgNykKKworICAgIGRlZiB0ZXN0X2RheXMoc2VsZik6CisgICAgICAgIGZvciBhdHRyIGluICJkYXlfbmFtZSIsICJkYXlfYWJiciI6CisgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIoY2FsZW5kYXIsIGF0dHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2YWx1ZSksIDcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2YWx1ZVs6XSksIDcpCisgICAgICAgICAgICAjIGVuc3VyZSB0aGV5J3JlIGFsbCB1bmlxdWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNldCh2YWx1ZSkpLCA3KQorICAgICAgICAgICAgIyB2ZXJpZnkgaXQgImFjdHMgbGlrZSBhIHNlcXVlbmNlIiBpbiB0d28gZm9ybXMgb2YgaXRlcmF0aW9uCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWzo6LTFdLCBsaXN0KHJldmVyc2VkKHZhbHVlKSkpCisKKyAgICBkZWYgdGVzdF9tb250aHMoc2VsZik6CisgICAgICAgIGZvciBhdHRyIGluICJtb250aF9uYW1lIiwgIm1vbnRoX2FiYnIiOgorICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKGNhbGVuZGFyLCBhdHRyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWUpLCAxMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZhbHVlWzpdKSwgMTMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWzBdLCAiIikKKyAgICAgICAgICAgICMgZW5zdXJlIHRoZXkncmUgYWxsIHVuaXF1ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2V0KHZhbHVlKSksIDEzKQorICAgICAgICAgICAgIyB2ZXJpZnkgaXQgImFjdHMgbGlrZSBhIHNlcXVlbmNlIiBpbiB0d28gZm9ybXMgb2YgaXRlcmF0aW9uCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWzo6LTFdLCBsaXN0KHJldmVyc2VkKHZhbHVlKSkpCisKKyAgICBkZWYgdGVzdF9sb2NhbGVjYWxlbmRhcnMoc2VsZik6CisgICAgICAgICMgZW5zdXJlIHRoYXQgTG9jYWxle1RleHQsSFRNTH1DYWxlbmRhciByZXNldHMgdGhlIGxvY2FsZSBwcm9wZXJseQorICAgICAgICAjIChpdCBpcyBzdGlsbCBub3QgdGhyZWFkLXNhZmUgdGhvdWdoKQorICAgICAgICBvbGRfb2N0b2JlciA9IGNhbGVuZGFyLlRleHRDYWxlbmRhcigpLmZvcm1hdG1vbnRobmFtZSgyMDEwLCAxMCwgMTApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhbCA9IGNhbGVuZGFyLkxvY2FsZVRleHRDYWxlbmRhcihsb2NhbGU9JycpCisgICAgICAgICAgICBsb2NhbF93ZWVrZGF5ID0gY2FsLmZvcm1hdHdlZWtkYXkoMSwgMTApCisgICAgICAgICAgICBsb2NhbF9tb250aCA9IGNhbC5mb3JtYXRtb250aG5hbWUoMjAxMCwgMTAsIDEwKQorICAgICAgICBleGNlcHQgbG9jYWxlLkVycm9yOgorICAgICAgICAgICAgIyBjYW5ub3Qgc2V0IHRoZSBzeXN0ZW0gZGVmYXVsdCBsb2NhbGUgLS0gc2tpcCByZXN0IG9mIHRlc3QKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdjYW5ub3Qgc2V0IHRoZSBzeXN0ZW0gZGVmYXVsdCBsb2NhbGUnKQorICAgICAgICAjIHNob3VsZCBiZSBlbmNvZGFibGUKKyAgICAgICAgbG9jYWxfd2Vla2RheS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgbG9jYWxfbW9udGguZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvY2FsX3dlZWtkYXkpLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobGVuKGxvY2FsX21vbnRoKSwgMTApCisgICAgICAgIGNhbCA9IGNhbGVuZGFyLkxvY2FsZUhUTUxDYWxlbmRhcihsb2NhbGU9JycpCisgICAgICAgIGxvY2FsX3dlZWtkYXkgPSBjYWwuZm9ybWF0d2Vla2RheSgxKQorICAgICAgICBsb2NhbF9tb250aCA9IGNhbC5mb3JtYXRtb250aG5hbWUoMjAxMCwgMTApCisgICAgICAgICMgc2hvdWxkIGJlIGVuY29kYWJsZQorICAgICAgICBsb2NhbF93ZWVrZGF5LmVuY29kZSgndXRmLTgnKQorICAgICAgICBsb2NhbF9tb250aC5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgbmV3X29jdG9iZXIgPSBjYWxlbmRhci5UZXh0Q2FsZW5kYXIoKS5mb3JtYXRtb250aG5hbWUoMjAxMCwgMTAsIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9sZF9vY3RvYmVyLCBuZXdfb2N0b2JlcikKKworICAgIGRlZiB0ZXN0X2l0ZXJtb250aGRhdGVzKHNlbGYpOgorICAgICAgICAjIGVuc3VyZSBpdGVybW9udGhkYXRlcyBkb2Vzbid0IG92ZXJmbG93IGFmdGVyIGRhdGV0aW1lLk1BWFlFQVIKKyAgICAgICAgIyBzZWUgIzE1NDIxCisgICAgICAgIGxpc3QoY2FsZW5kYXIuQ2FsZW5kYXIoKS5pdGVybW9udGhkYXRlcyhkYXRldGltZS5NQVhZRUFSLCAxMikpCisKKworY2xhc3MgTW9udGhDYWxlbmRhclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYub2xkZmlyc3R3ZWVrZGF5ID0gY2FsZW5kYXIuZmlyc3R3ZWVrZGF5KCkKKyAgICAgICAgY2FsZW5kYXIuc2V0Zmlyc3R3ZWVrZGF5KHNlbGYuZmlyc3R3ZWVrZGF5KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBjYWxlbmRhci5zZXRmaXJzdHdlZWtkYXkoc2VsZi5vbGRmaXJzdHdlZWtkYXkpCisKKyAgICBkZWYgY2hlY2tfd2Vla3Moc2VsZiwgeWVhciwgbW9udGgsIHdlZWtzKToKKyAgICAgICAgY2FsID0gY2FsZW5kYXIubW9udGhjYWxlbmRhcih5ZWFyLCBtb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY2FsKSwgbGVuKHdlZWtzKSkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbih3ZWVrcykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3ZWVrc1tpXSwgc3VtKGRheSAhPSAwIGZvciBkYXkgaW4gY2FsW2ldKSkKKworCitjbGFzcyBNb25kYXlUZXN0Q2FzZShNb250aENhbGVuZGFyVGVzdENhc2UpOgorICAgIGZpcnN0d2Vla2RheSA9IGNhbGVuZGFyLk1PTkRBWQorCisgICAgZGVmIHRlc3RfZmVicnVhcnkoc2VsZik6CisgICAgICAgICMgQSAyOC1kYXkgZmVicnVhcnkgc3RhcnRpbmcgb24gbW9uZGF5ICg3KzcrNys3IGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTk5OSwgMiwgKDcsIDcsIDcsIDcpKQorCisgICAgICAgICMgQSAyOC1kYXkgZmVicnVhcnkgc3RhcnRpbmcgb24gdHVlc2RheSAoNis3KzcrNysxIGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMjAwNSwgMiwgKDYsIDcsIDcsIDcsIDEpKQorCisgICAgICAgICMgQSAyOC1kYXkgZmVicnVhcnkgc3RhcnRpbmcgb24gc3VuZGF5ICgxKzcrNys3KzYgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTg3LCAyLCAoMSwgNywgNywgNywgNikpCisKKyAgICAgICAgIyBBIDI5LWRheSBmZWJydWFyeSBzdGFydGluZyBvbiBtb25kYXkgKDcrNys3KzcrMSBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5ODgsIDIsICg3LCA3LCA3LCA3LCAxKSkKKworICAgICAgICAjIEEgMjktZGF5IGZlYnJ1YXJ5IHN0YXJ0aW5nIG9uIHR1ZXNkYXkgKDYrNys3KzcrMiBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5NzIsIDIsICg2LCA3LCA3LCA3LCAyKSkKKworICAgICAgICAjIEEgMjktZGF5IGZlYnJ1YXJ5IHN0YXJ0aW5nIG9uIHN1bmRheSAoMSs3KzcrNys3IGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMjAwNCwgMiwgKDEsIDcsIDcsIDcsIDcpKQorCisgICAgZGVmIHRlc3RfYXByaWwoc2VsZik6CisgICAgICAgICMgQSAzMC1kYXkgYXByaWwgc3RhcnRpbmcgb24gbW9uZGF5ICg3KzcrNys3KzIgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTM1LCA0LCAoNywgNywgNywgNywgMikpCisKKyAgICAgICAgIyBBIDMwLWRheSBhcHJpbCBzdGFydGluZyBvbiB0dWVzZGF5ICg2KzcrNys3KzMgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTc1LCA0LCAoNiwgNywgNywgNywgMykpCisKKyAgICAgICAgIyBBIDMwLWRheSBhcHJpbCBzdGFydGluZyBvbiBzdW5kYXkgKDErNys3KzcrNysxIGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTk0NSwgNCwgKDEsIDcsIDcsIDcsIDcsIDEpKQorCisgICAgICAgICMgQSAzMC1kYXkgYXByaWwgc3RhcnRpbmcgb24gc2F0dXJkYXkgKDIrNys3KzcrNyBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5OTUsIDQsICgyLCA3LCA3LCA3LCA3KSkKKworICAgICAgICAjIEEgMzAtZGF5IGFwcmlsIHN0YXJ0aW5nIG9uIGZyaWRheSAoMys3KzcrNys2IGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTk5NCwgNCwgKDMsIDcsIDcsIDcsIDYpKQorCisgICAgZGVmIHRlc3RfZGVjZW1iZXIoc2VsZik6CisgICAgICAgICMgQSAzMS1kYXkgZGVjZW1iZXIgc3RhcnRpbmcgb24gbW9uZGF5ICg3KzcrNys3KzMgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTgwLCAxMiwgKDcsIDcsIDcsIDcsIDMpKQorCisgICAgICAgICMgQSAzMS1kYXkgZGVjZW1iZXIgc3RhcnRpbmcgb24gdHVlc2RheSAoNis3KzcrNys0IGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTk4NywgMTIsICg2LCA3LCA3LCA3LCA0KSkKKworICAgICAgICAjIEEgMzEtZGF5IGRlY2VtYmVyIHN0YXJ0aW5nIG9uIHN1bmRheSAoMSs3KzcrNys3KzIgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTY4LCAxMiwgKDEsIDcsIDcsIDcsIDcsIDIpKQorCisgICAgICAgICMgQSAzMS1kYXkgZGVjZW1iZXIgc3RhcnRpbmcgb24gdGh1cnNkYXkgKDQrNys3KzcrNiBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5ODgsIDEyLCAoNCwgNywgNywgNywgNikpCisKKyAgICAgICAgIyBBIDMxLWRheSBkZWNlbWJlciBzdGFydGluZyBvbiBmcmlkYXkgKDMrNys3KzcrNyBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDIwMTcsIDEyLCAoMywgNywgNywgNywgNykpCisKKyAgICAgICAgIyBBIDMxLWRheSBkZWNlbWJlciBzdGFydGluZyBvbiBzYXR1cmRheSAoMis3KzcrNys3KzEgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygyMDY4LCAxMiwgKDIsIDcsIDcsIDcsIDcsIDEpKQorCisKK2NsYXNzIFN1bmRheVRlc3RDYXNlKE1vbnRoQ2FsZW5kYXJUZXN0Q2FzZSk6CisgICAgZmlyc3R3ZWVrZGF5ID0gY2FsZW5kYXIuU1VOREFZCisKKyAgICBkZWYgdGVzdF9mZWJydWFyeShzZWxmKToKKyAgICAgICAgIyBBIDI4LWRheSBmZWJydWFyeSBzdGFydGluZyBvbiBzdW5kYXkgKDcrNys3KzcgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygyMDA5LCAyLCAoNywgNywgNywgNykpCisKKyAgICAgICAgIyBBIDI4LWRheSBmZWJydWFyeSBzdGFydGluZyBvbiBtb25kYXkgKDYrNys3KzcrMSBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5OTksIDIsICg2LCA3LCA3LCA3LCAxKSkKKworICAgICAgICAjIEEgMjgtZGF5IGZlYnJ1YXJ5IHN0YXJ0aW5nIG9uIHNhdHVyZGF5ICgxKzcrNys3KzYgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTk3LCAyLCAoMSwgNywgNywgNywgNikpCisKKyAgICAgICAgIyBBIDI5LWRheSBmZWJydWFyeSBzdGFydGluZyBvbiBzdW5kYXkgKDcrNys3KzcrMSBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDIwMDQsIDIsICg3LCA3LCA3LCA3LCAxKSkKKworICAgICAgICAjIEEgMjktZGF5IGZlYnJ1YXJ5IHN0YXJ0aW5nIG9uIG1vbmRheSAoNis3KzcrNysyIGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTk2MCwgMiwgKDYsIDcsIDcsIDcsIDIpKQorCisgICAgICAgICMgQSAyOS1kYXkgZmVicnVhcnkgc3RhcnRpbmcgb24gc2F0dXJkYXkgKDErNys3KzcrNyBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5NjQsIDIsICgxLCA3LCA3LCA3LCA3KSkKKworICAgIGRlZiB0ZXN0X2FwcmlsKHNlbGYpOgorICAgICAgICAjIEEgMzAtZGF5IGFwcmlsIHN0YXJ0aW5nIG9uIHN1bmRheSAoNys3KzcrNysyIGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTkyMywgNCwgKDcsIDcsIDcsIDcsIDIpKQorCisgICAgICAgICMgQSAzMC1kYXkgYXByaWwgc3RhcnRpbmcgb24gbW9uZGF5ICg2KzcrNys3KzMgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTE4LCA0LCAoNiwgNywgNywgNywgMykpCisKKyAgICAgICAgIyBBIDMwLWRheSBhcHJpbCBzdGFydGluZyBvbiBzYXR1cmRheSAoMSs3KzcrNys3KzEgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTUwLCA0LCAoMSwgNywgNywgNywgNywgMSkpCisKKyAgICAgICAgIyBBIDMwLWRheSBhcHJpbCBzdGFydGluZyBvbiBmcmlkYXkgKDIrNys3KzcrNyBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5NjAsIDQsICgyLCA3LCA3LCA3LCA3KSkKKworICAgICAgICAjIEEgMzAtZGF5IGFwcmlsIHN0YXJ0aW5nIG9uIHRodXJzZGF5ICgzKzcrNys3KzYgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTA5LCA0LCAoMywgNywgNywgNywgNikpCisKKyAgICBkZWYgdGVzdF9kZWNlbWJlcihzZWxmKToKKyAgICAgICAgIyBBIDMxLWRheSBkZWNlbWJlciBzdGFydGluZyBvbiBzdW5kYXkgKDcrNys3KzcrMyBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDIwODAsIDEyLCAoNywgNywgNywgNywgMykpCisKKyAgICAgICAgIyBBIDMxLWRheSBkZWNlbWJlciBzdGFydGluZyBvbiBtb25kYXkgKDYrNys3KzcrNCBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5NDEsIDEyLCAoNiwgNywgNywgNywgNCkpCisKKyAgICAgICAgIyBBIDMxLWRheSBkZWNlbWJlciBzdGFydGluZyBvbiBzYXR1cmRheSAoMSs3KzcrNys3KzIgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTIzLCAxMiwgKDEsIDcsIDcsIDcsIDcsIDIpKQorCisgICAgICAgICMgQSAzMS1kYXkgZGVjZW1iZXIgc3RhcnRpbmcgb24gd2VkbmVzZGF5ICg0KzcrNys3KzYgZGF5cykKKyAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTQ4LCAxMiwgKDQsIDcsIDcsIDcsIDYpKQorCisgICAgICAgICMgQSAzMS1kYXkgZGVjZW1iZXIgc3RhcnRpbmcgb24gdGh1cnNkYXkgKDMrNys3KzcrNyBkYXlzKQorICAgICAgICBzZWxmLmNoZWNrX3dlZWtzKDE5MjcsIDEyLCAoMywgNywgNywgNywgNykpCisKKyAgICAgICAgIyBBIDMxLWRheSBkZWNlbWJlciBzdGFydGluZyBvbiBmcmlkYXkgKDIrNys3KzcrNysxIGRheXMpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vla3MoMTk5NSwgMTIsICgyLCA3LCA3LCA3LCA3LCAxKSkKKworCitjbGFzcyBNb250aFJhbmdlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2phbnVhcnkoc2VsZik6CisgICAgICAgICMgVGVzdHMgdmFsaWQgbG93ZXIgYm91bmRhcnkgY2FzZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxlbmRhci5tb250aHJhbmdlKDIwMDQsMSksICgzLDMxKSkKKworICAgIGRlZiB0ZXN0X2ZlYnJ1YXJ5X2xlYXAoc2VsZik6CisgICAgICAgICMgVGVzdHMgRmVicnVhcnkgZHVyaW5nIGxlYXAgeWVhci4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxlbmRhci5tb250aHJhbmdlKDIwMDQsMiksICg2LDI5KSkKKworICAgIGRlZiB0ZXN0X2ZlYnJ1YXJ5X25vbmxlYXAoc2VsZik6CisgICAgICAgICMgVGVzdHMgRmVicnVhcnkgaW4gbm9uLWxlYXAgeWVhci4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxlbmRhci5tb250aHJhbmdlKDIwMTAsMiksICgwLDI4KSkKKworICAgIGRlZiB0ZXN0X2RlY2VtYmVyKHNlbGYpOgorICAgICAgICAjIFRlc3RzIHZhbGlkIHVwcGVyIGJvdW5kYXJ5IGNhc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubW9udGhyYW5nZSgyMDA0LDEyKSwgKDIsMzEpKQorCisgICAgZGVmIHRlc3RfemVyb3RoX21vbnRoKHNlbGYpOgorICAgICAgICAjIFRlc3RzIGxvdyBpbnZhbGlkIGJvdW5kYXJ5IGNhc2UuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoY2FsZW5kYXIuSWxsZWdhbE1vbnRoRXJyb3IpOgorICAgICAgICAgICAgY2FsZW5kYXIubW9udGhyYW5nZSgyMDA0LCAwKQorCisgICAgZGVmIHRlc3RfdGhpcnRlZW50aF9tb250aChzZWxmKToKKyAgICAgICAgIyBUZXN0cyBoaWdoIGludmFsaWQgYm91bmRhcnkgY2FzZS4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjYWxlbmRhci5JbGxlZ2FsTW9udGhFcnJvcik6CisgICAgICAgICAgICBjYWxlbmRhci5tb250aHJhbmdlKDIwMDQsIDEzKQorCitjbGFzcyBMZWFwZGF5c1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9ub19yYW5nZShzZWxmKToKKyAgICAgICAgIyB0ZXN0IHdoZW4gbm8gcmFuZ2UgaS5lLiB0d28gaWRlbnRpY2FsIHllYXJzIGFzIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxlbmRhci5sZWFwZGF5cygyMDEwLDIwMTApLCAwKQorCisgICAgZGVmIHRlc3Rfbm9fbGVhcGRheXMoc2VsZik6CisgICAgICAgICMgdGVzdCB3aGVuIG5vIGxlYXAgeWVhcnMgaW4gcmFuZ2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxlbmRhci5sZWFwZGF5cygyMDEwLDIwMTEpLCAwKQorCisgICAgZGVmIHRlc3Rfbm9fbGVhcGRheXNfdXBwZXJfYm91bmRhcnkoc2VsZik6CisgICAgICAgICMgdGVzdCBubyBsZWFwIHllYXJzIGluIHJhbmdlLCB3aGVuIHVwcGVyIGJvdW5kYXJ5IGlzIGEgbGVhcCB5ZWFyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubGVhcGRheXMoMjAxMCwyMDEyKSwgMCkKKworICAgIGRlZiB0ZXN0X29uZV9sZWFwZGF5X2xvd2VyX2JvdW5kYXJ5KHNlbGYpOgorICAgICAgICAjIHRlc3Qgd2hlbiBvbmUgbGVhcCB5ZWFyIGluIHJhbmdlLCBsb3dlciBib3VuZGFyeSBpcyBsZWFwIHllYXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxlbmRhci5sZWFwZGF5cygyMDEyLDIwMTMpLCAxKQorCisgICAgZGVmIHRlc3Rfc2V2ZXJhbF9sZWFweWVhcnNfaW5fcmFuZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubGVhcGRheXMoMTk5NywyMDIwKSwgNSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgT3V0cHV0VGVzdENhc2UsCisgICAgICAgIENhbGVuZGFyVGVzdENhc2UsCisgICAgICAgIE1vbmRheVRlc3RDYXNlLAorICAgICAgICBTdW5kYXlUZXN0Q2FzZSwKKyAgICAgICAgTW9udGhSYW5nZVRlc3RDYXNlLAorICAgICAgICBMZWFwZGF5c1Rlc3RDYXNlLAorICAgICkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jYWxsLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY2FsbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDZjMmM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY2FsbC5weQpAQCAtMCwwICsxLDEzNCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisjIFRoZSB0ZXN0IGNhc2VzIGhlcmUgY292ZXIgc2V2ZXJhbCBwYXRocyB0aHJvdWdoIHRoZSBmdW5jdGlvbiBjYWxsaW5nCisjIGNvZGUuICBUaGV5IGRlcGVuZCBvbiB0aGUgTUVUSF9YWFggZmxhZyB0aGF0IGlzIHVzZWQgdG8gZGVmaW5lIGEgQworIyBmdW5jdGlvbiwgd2hpY2ggY2FuJ3QgYmUgdmVyaWZpZWQgZnJvbSBQeXRob24uICBJZiB0aGUgTUVUSF9YWFggZGVjbAorIyBmb3IgYSBDIGZ1bmN0aW9uIGNoYW5nZXMsIHRoZXNlIHRlc3RzIG1heSBub3QgY292ZXIgdGhlIHJpZ2h0IHBhdGhzLgorCitjbGFzcyBDRnVuY3Rpb25DYWxscyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF92YXJhcmdzMChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB7fS5oYXNfa2V5KQorCisgICAgZGVmIHRlc3RfdmFyYXJnczEoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHt9Lmhhc19rZXkoMCkKKworICAgIGRlZiB0ZXN0X3ZhcmFyZ3MyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHt9Lmhhc19rZXksIDAsIDEpCisKKyAgICBkZWYgdGVzdF92YXJhcmdzMF9leHQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHt9Lmhhc19rZXkoKigpKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfdmFyYXJnczFfZXh0KHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB7fS5oYXNfa2V5KCooMCwpKQorCisgICAgZGVmIHRlc3RfdmFyYXJnczJfZXh0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAge30uaGFzX2tleSgqKDEsIDIpKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisKKyAgICBkZWYgdGVzdF92YXJhcmdzMF9rdyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB7fS5oYXNfa2V5LCB4PTIpCisKKyAgICBkZWYgdGVzdF92YXJhcmdzMV9rdyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB7fS5oYXNfa2V5LCB4PTIpCisKKyAgICBkZWYgdGVzdF92YXJhcmdzMl9rdyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB7fS5oYXNfa2V5LCB4PTIsIHk9MikKKworICAgIGRlZiB0ZXN0X29sZGFyZ3MwXzAoc2VsZik6CisgICAgICAgIHt9LmtleXMoKQorCisgICAgZGVmIHRlc3Rfb2xkYXJnczBfMShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB7fS5rZXlzLCAwKQorCisgICAgZGVmIHRlc3Rfb2xkYXJnczBfMihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB7fS5rZXlzLCAwLCAxKQorCisgICAgZGVmIHRlc3Rfb2xkYXJnczBfMF9leHQoc2VsZik6CisgICAgICAgIHt9LmtleXMoKigpKQorCisgICAgZGVmIHRlc3Rfb2xkYXJnczBfMV9leHQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHt9LmtleXMoKigwLCkpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKworICAgIGRlZiB0ZXN0X29sZGFyZ3MwXzJfZXh0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB7fS5rZXlzKCooMSwgMikpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKworICAgIGRlZiB0ZXN0X29sZGFyZ3MwXzBfa3coc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHt9LmtleXMoeD0yKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisKKyAgICBkZWYgdGVzdF9vbGRhcmdzMF8xX2t3KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHt9LmtleXMsIHg9MikKKworICAgIGRlZiB0ZXN0X29sZGFyZ3MwXzJfa3coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwge30ua2V5cywgeD0yLCB5PTIpCisKKyAgICBkZWYgdGVzdF9vbGRhcmdzMV8wKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFtdLmNvdW50KQorCisgICAgZGVmIHRlc3Rfb2xkYXJnczFfMShzZWxmKToKKyAgICAgICAgW10uY291bnQoMSkKKworICAgIGRlZiB0ZXN0X29sZGFyZ3MxXzIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgW10uY291bnQsIDEsIDIpCisKKyAgICBkZWYgdGVzdF9vbGRhcmdzMV8wX2V4dChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgW10uY291bnQoKigpKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisKKyAgICBkZWYgdGVzdF9vbGRhcmdzMV8xX2V4dChzZWxmKToKKyAgICAgICAgW10uY291bnQoKigxLCkpCisKKyAgICBkZWYgdGVzdF9vbGRhcmdzMV8yX2V4dChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgW10uY291bnQoKigxLCAyKSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorCisgICAgZGVmIHRlc3Rfb2xkYXJnczFfMF9rdyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBbXS5jb3VudCwgeD0yKQorCisgICAgZGVmIHRlc3Rfb2xkYXJnczFfMV9rdyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBbXS5jb3VudCwge30sIHg9MikKKworICAgIGRlZiB0ZXN0X29sZGFyZ3MxXzJfa3coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgW10uY291bnQsIHg9MiwgeT0yKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENGdW5jdGlvbkNhbGxzKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NhcGkucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jYXBpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZGIzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jYXBpLnB5CkBAIC0wLDAgKzEsMTQwIEBACisjIFJ1biB0aGUgX3Rlc3RjYXBpIG1vZHVsZSB0ZXN0cyAodGVzdHMgZm9yIHRoZSBQeXRob24vQyBBUEkpOiAgYnkgZGVmbiwKKyMgdGhlc2UgYXJlIGFsbCBmdW5jdGlvbnMgX3Rlc3RjYXBpIGV4cG9ydHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCAndGVzdF8nLgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHJhbmRvbQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAordHJ5OgorICAgIGltcG9ydCB0aHJlYWQKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkID0gTm9uZQorICAgIHRocmVhZGluZyA9IE5vbmUKK2ltcG9ydCBfdGVzdGNhcGkKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFRlc3RQZW5kaW5nQ2FsbHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHBlbmRpbmdjYWxsc19zdWJtaXQoc2VsZiwgbCwgbik6CisgICAgICAgIGRlZiBjYWxsYmFjaygpOgorICAgICAgICAgICAgI3RoaXMgZnVuY3Rpb24gY2FuIGJlIGludGVycnVwdGVkIGJ5IHRocmVhZCBzd2l0Y2hpbmcgc28gbGV0J3MKKyAgICAgICAgICAgICN1c2UgYW4gYXRvbWljIG9wZXJhdGlvbgorICAgICAgICAgICAgbC5hcHBlbmQoTm9uZSkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShuKToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAocmFuZG9tLnJhbmRvbSgpKjAuMDIpICMwLjAxIHNlY3Mgb24gYXZlcmFnZQorICAgICAgICAgICAgI3RyeSBzdWJtaXR0aW5nIGNhbGxiYWNrIHVudGlsIHN1Y2Nlc3NmdWwuCisgICAgICAgICAgICAjcmVseSBvbiByZWd1bGFyIGludGVycnVwdCB0byBmbHVzaCBxdWV1ZSBpZiB3ZSBhcmUKKyAgICAgICAgICAgICN1bnN1Y2Nlc3NmdWwuCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGlmIF90ZXN0Y2FwaS5fcGVuZGluZ190aHJlYWRmdW5jKGNhbGxiYWNrKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICBkZWYgcGVuZGluZ2NhbGxzX3dhaXQoc2VsZiwgbCwgbiwgY29udGV4dCA9IE5vbmUpOgorICAgICAgICAjbm93LCBzdGljayBhcm91bmQgdW50aWwgbFswXSBoYXMgZ3Jvd24gdG8gMTAKKyAgICAgICAgY291bnQgPSAwOworICAgICAgICB3aGlsZSBsZW4obCkgIT0gbjoKKyAgICAgICAgICAgICN0aGlzIGJ1c3kgbG9vcCBpcyB3aGVyZSB3ZSBleHBlY3QgdG8gYmUgaW50ZXJydXB0ZWQgdG8KKyAgICAgICAgICAgICNydW4gb3VyIGNhbGxiYWNrcy4gIE5vdGUgdGhhdCBjYWxsYmFja3MgYXJlIG9ubHkgcnVuIG9uIHRoZQorICAgICAgICAgICAgI21haW4gdGhyZWFkCisgICAgICAgICAgICBpZiBGYWxzZSBhbmQgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIiglaSkiJShsZW4obCksKSwKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDAwKToKKyAgICAgICAgICAgICAgICBhID0gaSppCisgICAgICAgICAgICBpZiBjb250ZXh0IGFuZCBub3QgY29udGV4dC5ldmVudC5pc19zZXQoKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvdW50IDwgMTAwMDAsCisgICAgICAgICAgICAgICAgInRpbWVvdXQgd2FpdGluZyBmb3IgJWkgY2FsbGJhY2tzLCBnb3QgJWkiJShuLCBsZW4obCkpKQorICAgICAgICBpZiBGYWxzZSBhbmQgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiKCVpKSIlKGxlbihsKSwpCisKKyAgICBkZWYgdGVzdF9wZW5kaW5nY2FsbHNfdGhyZWFkZWQoc2VsZik6CisgICAgICAgICNkbyBldmVyeSBjYWxsYmFjayBvbiBhIHNlcGFyYXRlIHRocmVhZAorICAgICAgICBuID0gMzIgI3RvdGFsIGNhbGxiYWNrcworICAgICAgICB0aHJlYWRzID0gW10KKyAgICAgICAgY2xhc3MgZm9vKG9iamVjdCk6cGFzcworICAgICAgICBjb250ZXh0ID0gZm9vKCkKKyAgICAgICAgY29udGV4dC5sID0gW10KKyAgICAgICAgY29udGV4dC5uID0gMiAjc3VibWl0cyBwZXIgdGhyZWFkCisgICAgICAgIGNvbnRleHQublRocmVhZHMgPSBuIC8vIGNvbnRleHQubgorICAgICAgICBjb250ZXh0Lm5GaW5pc2hlZCA9IDAKKyAgICAgICAgY29udGV4dC5sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBjb250ZXh0LmV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShjb250ZXh0Lm5UaHJlYWRzKToKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLnBlbmRpbmdjYWxsc190aHJlYWQsIGFyZ3MgPSAoY29udGV4dCwpKQorICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQorCisgICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3dhaXQoY29udGV4dC5sLCBuLCBjb250ZXh0KQorCisgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICB0LmpvaW4oKQorCisgICAgZGVmIHBlbmRpbmdjYWxsc190aHJlYWQoc2VsZiwgY29udGV4dCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3N1Ym1pdChjb250ZXh0LmwsIGNvbnRleHQubikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHdpdGggY29udGV4dC5sb2NrOgorICAgICAgICAgICAgICAgIGNvbnRleHQubkZpbmlzaGVkICs9IDEKKyAgICAgICAgICAgICAgICBuRmluaXNoZWQgPSBjb250ZXh0Lm5GaW5pc2hlZAorICAgICAgICAgICAgICAgIGlmIEZhbHNlIGFuZCB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgImZpbmlzaGVkIHRocmVhZHM6ICIsIG5GaW5pc2hlZAorICAgICAgICAgICAgaWYgbkZpbmlzaGVkID09IGNvbnRleHQublRocmVhZHM6CisgICAgICAgICAgICAgICAgY29udGV4dC5ldmVudC5zZXQoKQorCisgICAgZGVmIHRlc3RfcGVuZGluZ2NhbGxzX25vbl90aHJlYWRlZChzZWxmKToKKyAgICAgICAgI2FnYWluLCBqdXN0IHVzaW5nIHRoZSBtYWluIHRocmVhZCwgbGlrZWx5IHRoZXkgd2lsbCBhbGwgYmUgZGlzcGF0Y2hlZCBhdAorICAgICAgICAjb25jZS4gIEl0IGlzIG9rIHRvIGFzayBmb3IgdG9vIG1hbnksIGJlY2F1c2Ugd2UgbG9vcCB1bnRpbCB3ZSBmaW5kIGEgc2xvdC4KKyAgICAgICAgI3RoZSBsb29wIGNhbiBiZSBpbnRlcnJ1cHRlZCB0byBkaXNwYXRjaC4KKyAgICAgICAgI3RoZXJlIGFyZSBvbmx5IDMyIGRpc3BhdGNoIHNsb3RzLCBzbyB3ZSBnbyBmb3IgdHdpY2UgdGhhdCEKKyAgICAgICAgbCA9IFtdCisgICAgICAgIG4gPSA2NAorICAgICAgICBzZWxmLnBlbmRpbmdjYWxsc19zdWJtaXQobCwgbikKKyAgICAgICAgc2VsZi5wZW5kaW5nY2FsbHNfd2FpdChsLCBuKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZyBhbmQgdGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFRlc3RUaHJlYWRTdGF0ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAdGVzdF9zdXBwb3J0LnJlYXBfdGhyZWFkcworICAgIGRlZiB0ZXN0X3RocmVhZF9zdGF0ZShzZWxmKToKKyAgICAgICAgIyBzb21lIGV4dHJhIHRocmVhZC1zdGF0ZSB0ZXN0cyBkcml2ZW4gdmlhIF90ZXN0Y2FwaQorICAgICAgICBkZWYgdGFyZ2V0KCk6CisgICAgICAgICAgICBpZGVudHMgPSBbXQorCisgICAgICAgICAgICBkZWYgY2FsbGJhY2soKToKKyAgICAgICAgICAgICAgICBpZGVudHMuYXBwZW5kKHRocmVhZC5nZXRfaWRlbnQoKSkKKworICAgICAgICAgICAgX3Rlc3RjYXBpLl90ZXN0X3RocmVhZF9zdGF0ZShjYWxsYmFjaykKKyAgICAgICAgICAgIGEgPSBiID0gY2FsbGJhY2sKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgICAgICMgQ2hlY2sgb3VyIG1haW4gdGhyZWFkIGlzIGluIHRoZSBsaXN0IGV4YWN0bHkgMyB0aW1lcy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWRlbnRzLmNvdW50KHRocmVhZC5nZXRfaWRlbnQoKSksIDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZG4ndCBmaW5kIG1haW4gdGhyZWFkIGNvcnJlY3RseSBpbiB0aGUgbGlzdCIpCisKKyAgICAgICAgdGFyZ2V0KCkKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXRhcmdldCkKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHQuam9pbigpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGZvciBuYW1lIGluIGRpcihfdGVzdGNhcGkpOgorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ3Rlc3RfJyk6CisgICAgICAgICAgICB0ZXN0ID0gZ2V0YXR0cihfdGVzdGNhcGksIG5hbWUpCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAiaW50ZXJuYWwiLCBuYW1lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGVzdCgpCisgICAgICAgICAgICBleGNlcHQgX3Rlc3RjYXBpLmVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkLCBzeXMuZXhjX2luZm8oKVsxXQorCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0UGVuZGluZ0NhbGxzLCBUZXN0VGhyZWFkU3RhdGUpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NkLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY2QucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWRhYTgyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NkLnB5CkBAIC0wLDAgKzEsMzAgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyIiIldoaW1weSB0ZXN0IHNjcmlwdCBmb3IgdGhlIGNkIG1vZHVsZQorICAgUm9nZXIgRS4gTWFzc2UKKyIiIgorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgaW1wb3J0X21vZHVsZQorCitjZCA9IGltcG9ydF9tb2R1bGUoJ2NkJykKKworY2RhdHRycyA9IFsnQkxPQ0tTSVpFJywgJ0NEUk9NJywgJ0RBVEFTSVpFJywgJ0VSUk9SJywgJ05PRElTQycsICdQQVVTRUQnLCAnUExBWUlORycsICdSRUFEWScsCisgICAgICAgICAgICdTVElMTCcsICdfX2RvY19fJywgJ19fbmFtZV9fJywgJ2F0aW1lJywgJ2F1ZGlvJywgJ2NhdGFsb2cnLCAnY29udHJvbCcsICdjcmVhdGVwYXJzZXInLCAnZXJyb3InLAorICAgICAgICAgICAnaWRlbnQnLCAnaW5kZXgnLCAnbXNmdG9mcmFtZScsICdvcGVuJywgJ3BudW0nLCAncHRpbWUnXQorCisKKyMgVGhpcyBpcyBhIHZlcnkgaW5vYnRydXNpdmUgdGVzdCBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgY2QgbW9kdWxlIGFuZCBhbGwgaXRzCisjIGF0dHJpYnV0ZXMuICBNb3JlIGNvbXByZWhlbnNpdmUgZXhhbXBsZXMgY2FuIGJlIGZvdW5kIGluIERlbW8vY2QgYW5kCisjIHJlcXVpcmUgdGhhdCB5b3UgaGF2ZSBhIENEIGFuZCBhIENEIFJPTSBkcml2ZQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgIyB0b3VjaCBhbGwgdGhlIGF0dHJpYnV0ZXMgb2YgY2Qgd2l0aG91dCBkb2luZyBhbnl0aGluZworICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdUb3VjaGluZyBjZCBtb2R1bGUgYXR0cmlidXRlcy4uLicKKyAgICBmb3IgYXR0ciBpbiBjZGF0dHJzOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ3RvdWNoaW5nOiAnLCBhdHRyCisgICAgICAgIGdldGF0dHIoY2QsIGF0dHIpCisKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jZmdwYXJzZXIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jZmdwYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAwNzNmMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NmZ3BhcnNlci5weQpAQCAtMCwwICsxLDczOCBAQAoraW1wb3J0IENvbmZpZ1BhcnNlcgoraW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IFVzZXJEaWN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKworY2xhc3MgU29ydGVkRGljdChVc2VyRGljdC5Vc2VyRGljdCk6CisgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmRhdGEuaXRlbXMoKQorICAgICAgICByZXN1bHQuc29ydCgpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmRhdGEua2V5cygpCisgICAgICAgIHJlc3VsdC5zb3J0KCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBYWFggbmV2ZXIgdXNlZD8KKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pdGVtcygpCisgICAgICAgIHJldHVybiBbaVsxXSBmb3IgaSBpbiByZXN1bHRdCisKKyAgICBkZWYgaXRlcml0ZW1zKHNlbGYpOiByZXR1cm4gaXRlcihzZWxmLml0ZW1zKCkpCisgICAgZGVmIGl0ZXJrZXlzKHNlbGYpOiByZXR1cm4gaXRlcihzZWxmLmtleXMoKSkKKyAgICBfX2l0ZXJfXyA9IGl0ZXJrZXlzCisgICAgZGVmIGl0ZXJ2YWx1ZXMoc2VsZik6IHJldHVybiBpdGVyKHNlbGYudmFsdWVzKCkpCisKKworY2xhc3MgVGVzdENhc2VCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBhbGxvd19ub192YWx1ZSA9IEZhbHNlCisKKyAgICBkZWYgbmV3Y29uZmlnKHNlbGYsIGRlZmF1bHRzPU5vbmUpOgorICAgICAgICBpZiBkZWZhdWx0cyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5jZiA9IHNlbGYuY29uZmlnX2NsYXNzKGFsbG93X25vX3ZhbHVlPXNlbGYuYWxsb3dfbm9fdmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmNmID0gc2VsZi5jb25maWdfY2xhc3MoZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfbm9fdmFsdWU9c2VsZi5hbGxvd19ub192YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuY2YKKworICAgIGRlZiBmcm9tc3RyaW5nKHNlbGYsIHN0cmluZywgZGVmYXVsdHM9Tm9uZSk6CisgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoZGVmYXVsdHMpCisgICAgICAgIHNpbyA9IFN0cmluZ0lPLlN0cmluZ0lPKHN0cmluZykKKyAgICAgICAgY2YucmVhZGZwKHNpbykKKyAgICAgICAgcmV0dXJuIGNmCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgY29uZmlnX3N0cmluZyA9ICgKKyAgICAgICAgICAgICJbRm9vIEJhcl1cbiIKKyAgICAgICAgICAgICJmb289YmFyXG4iCisgICAgICAgICAgICAiW1NwYWNleSBCYXJdXG4iCisgICAgICAgICAgICAiZm9vID0gYmFyXG4iCisgICAgICAgICAgICAiW0NvbW1lbnRlZCBCYXJdXG4iCisgICAgICAgICAgICAiZm9vOiBiYXIgOyBjb21tZW50XG4iCisgICAgICAgICAgICAiW0xvbmcgTGluZV1cbiIKKyAgICAgICAgICAgICJmb286IHRoaXMgbGluZSBpcyBtdWNoLCBtdWNoIGxvbmdlciB0aGFuIG15IGVkaXRvclxuIgorICAgICAgICAgICAgIiAgIGxpa2VzIGl0LlxuIgorICAgICAgICAgICAgIltTZWN0aW9uXFx3aXRoJHdlaXJkJWNoYXJhY3RlcnNbXHRdXG4iCisgICAgICAgICAgICAiW0ludGVybmF0aW9uYWxpemVkIFN0dWZmXVxuIgorICAgICAgICAgICAgImZvb1tiZ106IEJ1bGdhcmlhblxuIgorICAgICAgICAgICAgImZvbz1EZWZhdWx0XG4iCisgICAgICAgICAgICAiZm9vW2VuXT1FbmdsaXNoXG4iCisgICAgICAgICAgICAiZm9vW2RlXT1EZXV0c2NoXG4iCisgICAgICAgICAgICAiW1NwYWNlc11cbiIKKyAgICAgICAgICAgICJrZXkgd2l0aCBzcGFjZXMgOiB2YWx1ZVxuIgorICAgICAgICAgICAgImFub3RoZXIgd2l0aCBzcGFjZXMgPSBzcGxhdCFcbiIKKyAgICAgICAgICAgICkKKyAgICAgICAgaWYgc2VsZi5hbGxvd19ub192YWx1ZToKKyAgICAgICAgICAgIGNvbmZpZ19zdHJpbmcgKz0gKAorICAgICAgICAgICAgICAgICJbTm9WYWx1ZV1cbiIKKyAgICAgICAgICAgICAgICAib3B0aW9uLXdpdGhvdXQtdmFsdWVcbiIKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoY29uZmlnX3N0cmluZykKKyAgICAgICAgTCA9IGNmLnNlY3Rpb25zKCkKKyAgICAgICAgTC5zb3J0KCkKKyAgICAgICAgRSA9IFtyJ0NvbW1lbnRlZCBCYXInLAorICAgICAgICAgICAgIHInRm9vIEJhcicsCisgICAgICAgICAgICAgcidJbnRlcm5hdGlvbmFsaXplZCBTdHVmZicsCisgICAgICAgICAgICAgcidMb25nIExpbmUnLAorICAgICAgICAgICAgIHInU2VjdGlvblx3aXRoJHdlaXJkJWNoYXJhY3RlcnNbJyAnXHQnLAorICAgICAgICAgICAgIHInU3BhY2VzJywKKyAgICAgICAgICAgICByJ1NwYWNleSBCYXInLAorICAgICAgICAgICAgIF0KKyAgICAgICAgaWYgc2VsZi5hbGxvd19ub192YWx1ZToKKyAgICAgICAgICAgIEUuYXBwZW5kKHInTm9WYWx1ZScpCisgICAgICAgIEUuc29ydCgpCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShMLCBFKQorCisgICAgICAgICMgVGhlIHVzZSBvZiBzcGFjZXMgaW4gdGhlIHNlY3Rpb24gbmFtZXMgc2VydmVzIGFzIGEKKyAgICAgICAgIyByZWdyZXNzaW9uIHRlc3QgZm9yIFNvdXJjZUZvcmdlIGJ1ZyAjNTgzMjQ4OgorICAgICAgICAjIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zZi81ODMyNDgKKyAgICAgICAgZXEoY2YuZ2V0KCdGb28gQmFyJywgJ2ZvbycpLCAnYmFyJykKKyAgICAgICAgZXEoY2YuZ2V0KCdTcGFjZXkgQmFyJywgJ2ZvbycpLCAnYmFyJykKKyAgICAgICAgZXEoY2YuZ2V0KCdDb21tZW50ZWQgQmFyJywgJ2ZvbycpLCAnYmFyJykKKyAgICAgICAgZXEoY2YuZ2V0KCdTcGFjZXMnLCAna2V5IHdpdGggc3BhY2VzJyksICd2YWx1ZScpCisgICAgICAgIGVxKGNmLmdldCgnU3BhY2VzJywgJ2Fub3RoZXIgd2l0aCBzcGFjZXMnKSwgJ3NwbGF0IScpCisgICAgICAgIGlmIHNlbGYuYWxsb3dfbm9fdmFsdWU6CisgICAgICAgICAgICBlcShjZi5nZXQoJ05vVmFsdWUnLCAnb3B0aW9uLXdpdGhvdXQtdmFsdWUnKSwgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdfX25hbWVfXycsIGNmLm9wdGlvbnMoIkZvbyBCYXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18gIm9wdGlvbiIgc2hvdWxkIG5vdCBiZSBleHBvc2VkIGJ5IHRoZSBBUEkhJykKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgcmlnaHQgdGhpbmdzIGhhcHBlbiBmb3IgcmVtb3ZlX29wdGlvbigpOworICAgICAgICAjIGFkZGVkIHRvIGluY2x1ZGUgY2hlY2sgZm9yIFNvdXJjZUZvcmdlIGJ1ZyAjMTIzMzI0OgorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2YucmVtb3ZlX29wdGlvbignRm9vIEJhcicsICdmb28nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVfb3B0aW9uKCkgZmFpbGVkIHRvIHJlcG9ydCBleGlzdGVuY2Ugb2Ygb3B0aW9uIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjZi5oYXNfb3B0aW9uKCdGb28gQmFyJywgJ2ZvbycpLAorICAgICAgICAgICAgICAgICAgICAicmVtb3ZlX29wdGlvbigpIGZhaWxlZCB0byByZW1vdmUgb3B0aW9uIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjZi5yZW1vdmVfb3B0aW9uKCdGb28gQmFyJywgJ2ZvbycpLAorICAgICAgICAgICAgICAgICAgICAicmVtb3ZlX29wdGlvbigpIGZhaWxlZCB0byByZXBvcnQgbm9uLWV4aXN0ZW5jZSBvZiBvcHRpb24iCisgICAgICAgICAgICAgICAgICAgICIgdGhhdCB3YXMgcmVtb3ZlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQ29uZmlnUGFyc2VyLk5vU2VjdGlvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjZi5yZW1vdmVfb3B0aW9uLCAnTm8gU3VjaCBTZWN0aW9uJywgJ2ZvbycpCisKKyAgICAgICAgZXEoY2YuZ2V0KCdMb25nIExpbmUnLCAnZm9vJyksCisgICAgICAgICAgICd0aGlzIGxpbmUgaXMgbXVjaCwgbXVjaCBsb25nZXIgdGhhbiBteSBlZGl0b3Jcbmxpa2VzIGl0LicpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NlbnNpdGl2aXR5KHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKKyAgICAgICAgY2YuYWRkX3NlY3Rpb24oIkEiKQorICAgICAgICBjZi5hZGRfc2VjdGlvbigiYSIpCisgICAgICAgIEwgPSBjZi5zZWN0aW9ucygpCisgICAgICAgIEwuc29ydCgpCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShMLCBbIkEiLCAiYSJdKQorICAgICAgICBjZi5zZXQoImEiLCAiQiIsICJ2YWx1ZSIpCisgICAgICAgIGVxKGNmLm9wdGlvbnMoImEiKSwgWyJiIl0pCisgICAgICAgIGVxKGNmLmdldCgiYSIsICJiIiksICJ2YWx1ZSIsCisgICAgICAgICAgICJjb3VsZCBub3QgbG9jYXRlIG9wdGlvbiwgZXhwZWN0aW5nIGNhc2UtaW5zZW5zaXRpdmUgb3B0aW9uIG5hbWVzIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNmLmhhc19vcHRpb24oImEiLCAiYiIpKQorICAgICAgICBjZi5zZXQoIkEiLCAiQS1CIiwgIkEtQiB2YWx1ZSIpCisgICAgICAgIGZvciBvcHQgaW4gKCJhLWIiLCAiQS1iIiwgImEtQiIsICJBLUIiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICAgICBjZi5oYXNfb3B0aW9uKCJBIiwgb3B0KSwKKyAgICAgICAgICAgICAgICAiaGFzX29wdGlvbigpIHJldHVybmVkIGZhbHNlIGZvciBvcHRpb24gd2hpY2ggc2hvdWxkIGV4aXN0IikKKyAgICAgICAgZXEoY2Yub3B0aW9ucygiQSIpLCBbImEtYiJdKQorICAgICAgICBlcShjZi5vcHRpb25zKCJhIiksIFsiYiJdKQorICAgICAgICBjZi5yZW1vdmVfb3B0aW9uKCJhIiwgIkIiKQorICAgICAgICBlcShjZi5vcHRpb25zKCJhIiksIFtdKQorCisgICAgICAgICMgU0YgYnVnICM0MzIzNjk6CisgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKAorICAgICAgICAgICAgIltNeVNlY3Rpb25dXG5PcHRpb246IGZpcnN0IGxpbmVcblx0c2Vjb25kIGxpbmVcbiIpCisgICAgICAgIGVxKGNmLm9wdGlvbnMoIk15U2VjdGlvbiIpLCBbIm9wdGlvbiJdKQorICAgICAgICBlcShjZi5nZXQoIk15U2VjdGlvbiIsICJPcHRpb24iKSwgImZpcnN0IGxpbmVcbnNlY29uZCBsaW5lIikKKworICAgICAgICAjIFNGIGJ1ZyAjNTYxODIyOgorICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygiW3NlY3Rpb25dXG5uZWtleT1uZXZhbHVlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cz17ImtleSI6InZhbHVlIn0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZi5oYXNfb3B0aW9uKCJzZWN0aW9uIiwgIktleSIpKQorCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2Nhc2Vfc2Vuc2l0aXZpdHkoc2VsZik6CisgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoeyJmb28iOiAiQmFyIn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjZi5nZXQoIkRFRkFVTFQiLCAiRm9vIiksICJCYXIiLAorICAgICAgICAgICAgImNvdWxkIG5vdCBsb2NhdGUgb3B0aW9uLCBleHBlY3RpbmcgY2FzZS1pbnNlbnNpdGl2ZSBvcHRpb24gbmFtZXMiKQorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKHsiRm9vIjogIkJhciJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2YuZ2V0KCJERUZBVUxUIiwgIkZvbyIpLCAiQmFyIiwKKyAgICAgICAgICAgICJjb3VsZCBub3QgbG9jYXRlIG9wdGlvbiwgZXhwZWN0aW5nIGNhc2UtaW5zZW5zaXRpdmUgZGVmYXVsdHMiKQorCisgICAgZGVmIHRlc3RfcGFyc2VfZXJyb3JzKHNlbGYpOgorICAgICAgICBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoQ29uZmlnUGFyc2VyLlBhcnNpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW0Zvb11cbiAgZXh0cmEtc3BhY2VzOiBzcGxhdFxuIikKKyAgICAgICAgc2VsZi5wYXJzZV9lcnJvcihDb25maWdQYXJzZXIuUGFyc2luZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbRm9vXVxuICBleHRyYS1zcGFjZXM9IHNwbGF0XG4iKQorICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKENvbmZpZ1BhcnNlci5QYXJzaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIltGb29dXG46dmFsdWUtd2l0aG91dC1vcHRpb24tbmFtZVxuIikKKyAgICAgICAgc2VsZi5wYXJzZV9lcnJvcihDb25maWdQYXJzZXIuUGFyc2luZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbRm9vXVxuPXZhbHVlLXdpdGhvdXQtb3B0aW9uLW5hbWVcbiIpCisgICAgICAgIHNlbGYucGFyc2VfZXJyb3IoQ29uZmlnUGFyc2VyLk1pc3NpbmdTZWN0aW9uSGVhZGVyRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIFNlY3Rpb24hXG4iKQorCisgICAgZGVmIHBhcnNlX2Vycm9yKHNlbGYsIGV4Yywgc3JjKToKKyAgICAgICAgc2lvID0gU3RyaW5nSU8uU3RyaW5nSU8oc3JjKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhleGMsIHNlbGYuY2YucmVhZGZwLCBzaW8pCisKKyAgICBkZWYgdGVzdF9xdWVyeV9lcnJvcnMoc2VsZik6CisgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLnNlY3Rpb25zKCksIFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICJuZXcgQ29uZmlnUGFyc2VyIHNob3VsZCBoYXZlIG5vIGRlZmluZWQgc2VjdGlvbnMiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNmLmhhc19zZWN0aW9uKCJGb28iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAibmV3IENvbmZpZ1BhcnNlciBzaG91bGQgaGF2ZSBubyBhY2tub3dsZWRnZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzZWN0aW9ucyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKENvbmZpZ1BhcnNlci5Ob1NlY3Rpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2Yub3B0aW9ucywgIkZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKENvbmZpZ1BhcnNlci5Ob1NlY3Rpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2Yuc2V0LCAiZm9vIiwgImJhciIsICJ2YWx1ZSIpCisgICAgICAgIHNlbGYuZ2V0X2Vycm9yKENvbmZpZ1BhcnNlci5Ob1NlY3Rpb25FcnJvciwgImZvbyIsICJiYXIiKQorICAgICAgICBjZi5hZGRfc2VjdGlvbigiZm9vIikKKyAgICAgICAgc2VsZi5nZXRfZXJyb3IoQ29uZmlnUGFyc2VyLk5vT3B0aW9uRXJyb3IsICJmb28iLCAiYmFyIikKKworICAgIGRlZiBnZXRfZXJyb3Ioc2VsZiwgZXhjLCBzZWN0aW9uLCBvcHRpb24pOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNmLmdldChzZWN0aW9uLCBvcHRpb24pCisgICAgICAgIGV4Y2VwdCBleGMsIGU6CisgICAgICAgICAgICByZXR1cm4gZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24gdHlwZSAlcy4lcyIKKyAgICAgICAgICAgICAgICAgICAgICAlIChleGMuX19tb2R1bGVfXywgZXhjLl9fbmFtZV9fKSkKKworICAgIGRlZiB0ZXN0X2Jvb2xlYW4oc2VsZik6CisgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKAorICAgICAgICAgICAgIltCT09MVEVTVF1cbiIKKyAgICAgICAgICAgICJUMT0xXG4iCisgICAgICAgICAgICAiVDI9VFJVRVxuIgorICAgICAgICAgICAgIlQzPVRydWVcbiIKKyAgICAgICAgICAgICJUND1vTlxuIgorICAgICAgICAgICAgIlQ1PXllc1xuIgorICAgICAgICAgICAgIkYxPTBcbiIKKyAgICAgICAgICAgICJGMj1GQUxTRVxuIgorICAgICAgICAgICAgIkYzPUZhbHNlXG4iCisgICAgICAgICAgICAiRjQ9b0ZGXG4iCisgICAgICAgICAgICAiRjU9bk9cbiIKKyAgICAgICAgICAgICJFMT0yXG4iCisgICAgICAgICAgICAiRTI9Zm9vXG4iCisgICAgICAgICAgICAiRTM9LTFcbiIKKyAgICAgICAgICAgICJFND0wLjFcbiIKKyAgICAgICAgICAgICJFNT1GQUxTRSBBTkQgTU9SRSIKKyAgICAgICAgICAgICkKKyAgICAgICAgZm9yIHggaW4gcmFuZ2UoMSwgNSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2YuZ2V0Ym9vbGVhbignQk9PTFRFU1QnLCAndCVkJyAlIHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjZi5nZXRib29sZWFuKCdCT09MVEVTVCcsICdmJWQnICUgeCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YuZ2V0Ym9vbGVhbiwgJ0JPT0xURVNUJywgJ2UlZCcgJSB4KQorCisgICAgZGVmIHRlc3Rfd2VpcmRfZXJyb3JzKHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKKyAgICAgICAgY2YuYWRkX3NlY3Rpb24oIkZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKENvbmZpZ1BhcnNlci5EdXBsaWNhdGVTZWN0aW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNmLmFkZF9zZWN0aW9uLCAiRm9vIikKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICBjb25maWdfc3RyaW5nID0gKAorICAgICAgICAgICAgIltMb25nIExpbmVdXG4iCisgICAgICAgICAgICAiZm9vOiB0aGlzIGxpbmUgaXMgbXVjaCwgbXVjaCBsb25nZXIgdGhhbiBteSBlZGl0b3JcbiIKKyAgICAgICAgICAgICIgICBsaWtlcyBpdC5cbiIKKyAgICAgICAgICAgICJbREVGQVVMVF1cbiIKKyAgICAgICAgICAgICJmb286IGFub3RoZXIgdmVyeVxuIgorICAgICAgICAgICAgIiBsb25nIGxpbmVcbiIKKyAgICAgICAgICAgICkKKyAgICAgICAgaWYgc2VsZi5hbGxvd19ub192YWx1ZToKKyAgICAgICAgICAgIGNvbmZpZ19zdHJpbmcgKz0gKAorICAgICAgICAgICAgIltWYWx1ZWxlc3NdXG4iCisgICAgICAgICAgICAib3B0aW9uLXdpdGhvdXQtdmFsdWVcbiIKKyAgICAgICAgICAgICkKKworICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZyhjb25maWdfc3RyaW5nKQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGNmLndyaXRlKG91dHB1dCkKKyAgICAgICAgZXhwZWN0X3N0cmluZyA9ICgKKyAgICAgICAgICAgICJbREVGQVVMVF1cbiIKKyAgICAgICAgICAgICJmb28gPSBhbm90aGVyIHZlcnlcbiIKKyAgICAgICAgICAgICJcdGxvbmcgbGluZVxuIgorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgIltMb25nIExpbmVdXG4iCisgICAgICAgICAgICAiZm9vID0gdGhpcyBsaW5lIGlzIG11Y2gsIG11Y2ggbG9uZ2VyIHRoYW4gbXkgZWRpdG9yXG4iCisgICAgICAgICAgICAiXHRsaWtlcyBpdC5cbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICkKKyAgICAgICAgaWYgc2VsZi5hbGxvd19ub192YWx1ZToKKyAgICAgICAgICAgIGV4cGVjdF9zdHJpbmcgKz0gKAorICAgICAgICAgICAgICAgICJbVmFsdWVsZXNzXVxuIgorICAgICAgICAgICAgICAgICJvcHRpb24td2l0aG91dC12YWx1ZVxuIgorICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LmdldHZhbHVlKCksIGV4cGVjdF9zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9zZXRfc3RyaW5nX3R5cGVzKHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygiW3NlY3RdXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24xPWZvb1xuIikKKyAgICAgICAgIyBDaGVjayB0aGF0IHdlIGRvbid0IGdldCBhbiBleGNlcHRpb24gd2hlbiBzZXR0aW5nIHZhbHVlcyBpbgorICAgICAgICAjIGFuIGV4aXN0aW5nIHNlY3Rpb24gdXNpbmcgc3RyaW5nczoKKyAgICAgICAgY2xhc3MgbXlzdHIoc3RyKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2Yuc2V0KCJzZWN0IiwgIm9wdGlvbjEiLCAic3BsYXQiKQorICAgICAgICBjZi5zZXQoInNlY3QiLCAib3B0aW9uMSIsIG15c3RyKCJzcGxhdCIpKQorICAgICAgICBjZi5zZXQoInNlY3QiLCAib3B0aW9uMiIsICJzcGxhdCIpCisgICAgICAgIGNmLnNldCgic2VjdCIsICJvcHRpb24yIiwgbXlzdHIoInNwbGF0IikpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHVuaWNvZGUKKyAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNmLnNldCgic2VjdCIsICJvcHRpb24xIiwgdW5pY29kZSgic3BsYXQiKSkKKyAgICAgICAgICAgIGNmLnNldCgic2VjdCIsICJvcHRpb24yIiwgdW5pY29kZSgic3BsYXQiKSkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmV0dXJuc19maWxlX2xpc3Qoc2VsZik6CisgICAgICAgIGZpbGUxID0gdGVzdF9zdXBwb3J0LmZpbmRmaWxlKCJjZmdwYXJzZXIuMSIpCisgICAgICAgICMgY2hlY2sgd2hlbiB3ZSBwYXNzIGEgbWl4IG9mIHJlYWRhYmxlIGFuZCBub24tcmVhZGFibGUgZmlsZXM6CisgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoKQorICAgICAgICBwYXJzZWRfZmlsZXMgPSBjZi5yZWFkKFtmaWxlMSwgIm5vbmV4aXN0ZW50LWZpbGUiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZWRfZmlsZXMsIFtmaWxlMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCJGb28gQmFyIiwgImZvbyIpLCAibmV3YmFyIikKKyAgICAgICAgIyBjaGVjayB3aGVuIHdlIHBhc3Mgb25seSBhIGZpbGVuYW1lOgorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKKyAgICAgICAgcGFyc2VkX2ZpbGVzID0gY2YucmVhZChmaWxlMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZWRfZmlsZXMsIFtmaWxlMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCJGb28gQmFyIiwgImZvbyIpLCAibmV3YmFyIikKKyAgICAgICAgIyBjaGVjayB3aGVuIHdlIHBhc3Mgb25seSBtaXNzaW5nIGZpbGVzOgorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKKyAgICAgICAgcGFyc2VkX2ZpbGVzID0gY2YucmVhZChbIm5vbmV4aXN0ZW50LWZpbGUiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZWRfZmlsZXMsIFtdKQorICAgICAgICAjIGNoZWNrIHdoZW4gd2UgcGFzcyBubyBmaWxlczoKKyAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIHBhcnNlZF9maWxlcyA9IGNmLnJlYWQoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VkX2ZpbGVzLCBbXSkKKworICAgICMgc2hhcmVkIGJ5IHN1YmNsYXNzZXMKKyAgICBkZWYgZ2V0X2ludGVycG9sYXRpb25fY29uZmlnKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5mcm9tc3RyaW5nKAorICAgICAgICAgICAgIltGb29dXG4iCisgICAgICAgICAgICAiYmFyPXNvbWV0aGluZyAlKHdpdGgxKXMgaW50ZXJwb2xhdGlvbiAoMSBzdGVwKVxuIgorICAgICAgICAgICAgImJhcjk9c29tZXRoaW5nICUod2l0aDkpcyBsb3RzIG9mIGludGVycG9sYXRpb24gKDkgc3RlcHMpXG4iCisgICAgICAgICAgICAiYmFyMTA9c29tZXRoaW5nICUod2l0aDEwKXMgbG90cyBvZiBpbnRlcnBvbGF0aW9uICgxMCBzdGVwcylcbiIKKyAgICAgICAgICAgICJiYXIxMT1zb21ldGhpbmcgJSh3aXRoMTEpcyBsb3RzIG9mIGludGVycG9sYXRpb24gKDExIHN0ZXBzKVxuIgorICAgICAgICAgICAgIndpdGgxMT0lKHdpdGgxMClzXG4iCisgICAgICAgICAgICAid2l0aDEwPSUod2l0aDkpc1xuIgorICAgICAgICAgICAgIndpdGg5PSUod2l0aDgpc1xuIgorICAgICAgICAgICAgIndpdGg4PSUoV2l0aDcpc1xuIgorICAgICAgICAgICAgIndpdGg3PSUoV0lUSDYpc1xuIgorICAgICAgICAgICAgIndpdGg2PSUod2l0aDUpc1xuIgorICAgICAgICAgICAgIldpdGg1PSUod2l0aDQpc1xuIgorICAgICAgICAgICAgIldJVEg0PSUod2l0aDMpc1xuIgorICAgICAgICAgICAgIndpdGgzPSUod2l0aDIpc1xuIgorICAgICAgICAgICAgIndpdGgyPSUod2l0aDEpc1xuIgorICAgICAgICAgICAgIndpdGgxPXdpdGhcbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJbTXV0dWFsIFJlY3Vyc2lvbl1cbiIKKyAgICAgICAgICAgICJmb289JShiYXIpc1xuIgorICAgICAgICAgICAgImJhcj0lKGZvbylzXG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiW0ludGVycG9sYXRpb24gRXJyb3JdXG4iCisgICAgICAgICAgICAibmFtZT0lKHJlZmVyZW5jZSlzXG4iLAorICAgICAgICAgICAgIyBubyBkZWZpbml0aW9uIGZvciAncmVmZXJlbmNlJworICAgICAgICAgICAgZGVmYXVsdHM9eyJnZXRuYW1lIjogIiUoX19uYW1lX18pcyJ9KQorCisgICAgZGVmIGNoZWNrX2l0ZW1zX2NvbmZpZyhzZWxmLCBleHBlY3RlZCk6CisgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKAorICAgICAgICAgICAgIltzZWN0aW9uXVxuIgorICAgICAgICAgICAgIm5hbWUgPSB2YWx1ZVxuIgorICAgICAgICAgICAgImtleTogfCUobmFtZSlzfCBcbiIKKyAgICAgICAgICAgICJnZXRkZWZhdWx0OiB8JShkZWZhdWx0KXN8XG4iCisgICAgICAgICAgICAiZ2V0bmFtZTogfCUoX19uYW1lX18pc3wiLAorICAgICAgICAgICAgZGVmYXVsdHM9eyJkZWZhdWx0IjogIjxkZWZhdWx0PiJ9KQorICAgICAgICBMID0gbGlzdChjZi5pdGVtcygic2VjdGlvbiIpKQorICAgICAgICBMLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEwsIGV4cGVjdGVkKQorCisKK2NsYXNzIENvbmZpZ1BhcnNlclRlc3RDYXNlKFRlc3RDYXNlQmFzZSk6CisgICAgY29uZmlnX2NsYXNzID0gQ29uZmlnUGFyc2VyLkNvbmZpZ1BhcnNlcgorICAgIGFsbG93X25vX3ZhbHVlID0gVHJ1ZQorCisgICAgZGVmIHRlc3RfaW50ZXJwb2xhdGlvbihzZWxmKToKKyAgICAgICAgcmF3dmFsID0geworICAgICAgICAgICAgQ29uZmlnUGFyc2VyLkNvbmZpZ1BhcnNlcjogKCJzb21ldGhpbmcgJSh3aXRoMTEpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvdHMgb2YgaW50ZXJwb2xhdGlvbiAoMTEgc3RlcHMpIiksCisgICAgICAgICAgICBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcjogIiUod2l0aDEpcyIsCisgICAgICAgIH0KKyAgICAgICAgY2YgPSBzZWxmLmdldF9pbnRlcnBvbGF0aW9uX2NvbmZpZygpCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShjZi5nZXQoIkZvbyIsICJnZXRuYW1lIiksICJGb28iKQorICAgICAgICBlcShjZi5nZXQoIkZvbyIsICJiYXIiKSwgInNvbWV0aGluZyB3aXRoIGludGVycG9sYXRpb24gKDEgc3RlcCkiKQorICAgICAgICBlcShjZi5nZXQoIkZvbyIsICJiYXI5IiksCisgICAgICAgICAgICJzb21ldGhpbmcgd2l0aCBsb3RzIG9mIGludGVycG9sYXRpb24gKDkgc3RlcHMpIikKKyAgICAgICAgZXEoY2YuZ2V0KCJGb28iLCAiYmFyMTAiKSwKKyAgICAgICAgICAgInNvbWV0aGluZyB3aXRoIGxvdHMgb2YgaW50ZXJwb2xhdGlvbiAoMTAgc3RlcHMpIikKKyAgICAgICAgc2VsZi5nZXRfZXJyb3IoQ29uZmlnUGFyc2VyLkludGVycG9sYXRpb25EZXB0aEVycm9yLCAiRm9vIiwgImJhcjExIikKKworICAgIGRlZiB0ZXN0X2ludGVycG9sYXRpb25fbWlzc2luZ192YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5nZXRfaW50ZXJwb2xhdGlvbl9jb25maWcoKQorICAgICAgICBlID0gc2VsZi5nZXRfZXJyb3IoQ29uZmlnUGFyc2VyLkludGVycG9sYXRpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnRlcnBvbGF0aW9uIEVycm9yIiwgIm5hbWUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUucmVmZXJlbmNlLCAicmVmZXJlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLnNlY3Rpb24sICJJbnRlcnBvbGF0aW9uIEVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm9wdGlvbiwgIm5hbWUiKQorCisgICAgZGVmIHRlc3RfaXRlbXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaXRlbXNfY29uZmlnKFsoJ2RlZmF1bHQnLCAnPGRlZmF1bHQ+JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2dldGRlZmF1bHQnLCAnfDxkZWZhdWx0PnwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZ2V0bmFtZScsICd8c2VjdGlvbnwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgna2V5JywgJ3x2YWx1ZXwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnbmFtZScsICd2YWx1ZScpXSkKKworICAgIGRlZiB0ZXN0X3NldF9ub25zdHJpbmdfdHlwZXMoc2VsZik6CisgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoKQorICAgICAgICBjZi5hZGRfc2VjdGlvbignbm9uLXN0cmluZycpCisgICAgICAgIGNmLnNldCgnbm9uLXN0cmluZycsICdpbnQnLCAxKQorICAgICAgICBjZi5zZXQoJ25vbi1zdHJpbmcnLCAnbGlzdCcsIFswLCAxLCAxLCAyLCAzLCA1LCA4LCAxMywgJyUoJ10pCisgICAgICAgIGNmLnNldCgnbm9uLXN0cmluZycsICdkaWN0JywgeydwaSc6IDMuMTQxNTksICclKCc6IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclKGxpc3QpJzogJyUobGlzdCknfSkKKyAgICAgICAgY2Yuc2V0KCdub24tc3RyaW5nJywgJ3N0cmluZ193aXRoX2ludGVycG9sYXRpb24nLCAnJShsaXN0KXMnKQorICAgICAgICBjZi5zZXQoJ25vbi1zdHJpbmcnLCAnbm8tdmFsdWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnbm9uLXN0cmluZycsICdpbnQnLCByYXc9VHJ1ZSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2YuZ2V0LCAnbm9uLXN0cmluZycsICdpbnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnbm9uLXN0cmluZycsICdsaXN0JywgcmF3PVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFswLCAxLCAxLCAyLCAzLCA1LCA4LCAxMywgJyUoJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2YuZ2V0LCAnbm9uLXN0cmluZycsICdsaXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoJ25vbi1zdHJpbmcnLCAnZGljdCcsIHJhdz1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J3BpJzogMy4xNDE1OSwgJyUoJzogMSwgJyUobGlzdCknOiAnJShsaXN0KSd9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNmLmdldCwgJ25vbi1zdHJpbmcnLCAnZGljdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdub24tc3RyaW5nJywgJ3N0cmluZ193aXRoX2ludGVycG9sYXRpb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXc9VHJ1ZSksICclKGxpc3QpcycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNmLmdldCwgJ25vbi1zdHJpbmcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5nX3dpdGhfaW50ZXJwb2xhdGlvbicsIHJhdz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoJ25vbi1zdHJpbmcnLCAnbm8tdmFsdWUnKSwgTm9uZSkKKworY2xhc3MgTXVsdGlsaW5lVmFsdWVzVGVzdENhc2UoVGVzdENhc2VCYXNlKToKKyAgICBjb25maWdfY2xhc3MgPSBDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyCisgICAgd29uZGVyZnVsX3NwYW0gPSAoIkknbSBoYXZpbmcgc3BhbSBzcGFtIHNwYW0gc3BhbSAiCisgICAgICAgICAgICAgICAgICAgICAgInNwYW0gc3BhbSBzcGFtIGJlYWtlZCBiZWFucyBzcGFtICIKKyAgICAgICAgICAgICAgICAgICAgICAic3BhbSBzcGFtIGFuZCBzcGFtISIpLnJlcGxhY2UoJyAnLCAnXHRcbicpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgcyA9ICdzZWN0aW9ue30nLmZvcm1hdChpKQorICAgICAgICAgICAgY2YuYWRkX3NlY3Rpb24ocykKKyAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgICAgICBjZi5zZXQocywgJ2xvdmVseV9zcGFte30nLmZvcm1hdChqKSwgc2VsZi53b25kZXJmdWxfc3BhbSkKKyAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3JykgYXMgZjoKKyAgICAgICAgICAgIGNmLndyaXRlKGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfZG9taW5hdGluZ19tdWx0aWxpbmVfdmFsdWVzKHNlbGYpOgorICAgICAgICAjIHdlJ3JlIHJlYWRpbmcgZnJvbSBmaWxlIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB0aGUgY29kZSBjaGFuZ2VkCisgICAgICAgICMgZHVyaW5nIHBlcmZvcm1hbmNlIHVwZGF0ZXMgaW4gUHl0aG9uIDMuMgorICAgICAgICBjZl9mcm9tX2ZpbGUgPSBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOKSBhcyBmOgorICAgICAgICAgICAgY2ZfZnJvbV9maWxlLnJlYWRmcChmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmX2Zyb21fZmlsZS5nZXQoJ3NlY3Rpb244JywgJ2xvdmVseV9zcGFtNCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud29uZGVyZnVsX3NwYW0ucmVwbGFjZSgnXHRcbicsICdcbicpKQorCitjbGFzcyBSYXdDb25maWdQYXJzZXJUZXN0Q2FzZShUZXN0Q2FzZUJhc2UpOgorICAgIGNvbmZpZ19jbGFzcyA9IENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIKKworICAgIGRlZiB0ZXN0X2ludGVycG9sYXRpb24oc2VsZik6CisgICAgICAgIGNmID0gc2VsZi5nZXRfaW50ZXJwb2xhdGlvbl9jb25maWcoKQorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoY2YuZ2V0KCJGb28iLCAiZ2V0bmFtZSIpLCAiJShfX25hbWVfXylzIikKKyAgICAgICAgZXEoY2YuZ2V0KCJGb28iLCAiYmFyIiksCisgICAgICAgICAgICJzb21ldGhpbmcgJSh3aXRoMSlzIGludGVycG9sYXRpb24gKDEgc3RlcCkiKQorICAgICAgICBlcShjZi5nZXQoIkZvbyIsICJiYXI5IiksCisgICAgICAgICAgICJzb21ldGhpbmcgJSh3aXRoOSlzIGxvdHMgb2YgaW50ZXJwb2xhdGlvbiAoOSBzdGVwcykiKQorICAgICAgICBlcShjZi5nZXQoIkZvbyIsICJiYXIxMCIpLAorICAgICAgICAgICAic29tZXRoaW5nICUod2l0aDEwKXMgbG90cyBvZiBpbnRlcnBvbGF0aW9uICgxMCBzdGVwcykiKQorICAgICAgICBlcShjZi5nZXQoIkZvbyIsICJiYXIxMSIpLAorICAgICAgICAgICAic29tZXRoaW5nICUod2l0aDExKXMgbG90cyBvZiBpbnRlcnBvbGF0aW9uICgxMSBzdGVwcykiKQorCisgICAgZGVmIHRlc3RfaXRlbXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaXRlbXNfY29uZmlnKFsoJ2RlZmF1bHQnLCAnPGRlZmF1bHQ+JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2dldGRlZmF1bHQnLCAnfCUoZGVmYXVsdClzfCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdnZXRuYW1lJywgJ3wlKF9fbmFtZV9fKXN8JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2tleScsICd8JShuYW1lKXN8JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ25hbWUnLCAndmFsdWUnKV0pCisKKyAgICBkZWYgdGVzdF9zZXRfbm9uc3RyaW5nX3R5cGVzKHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKKyAgICAgICAgY2YuYWRkX3NlY3Rpb24oJ25vbi1zdHJpbmcnKQorICAgICAgICBjZi5zZXQoJ25vbi1zdHJpbmcnLCAnaW50JywgMSkKKyAgICAgICAgY2Yuc2V0KCdub24tc3RyaW5nJywgJ2xpc3QnLCBbMCwgMSwgMSwgMiwgMywgNSwgOCwgMTNdKQorICAgICAgICBjZi5zZXQoJ25vbi1zdHJpbmcnLCAnZGljdCcsIHsncGknOiAzLjE0MTU5fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoJ25vbi1zdHJpbmcnLCAnaW50JyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdub24tc3RyaW5nJywgJ2xpc3QnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbMCwgMSwgMSwgMiwgMywgNSwgOCwgMTNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnbm9uLXN0cmluZycsICdkaWN0JyksIHsncGknOiAzLjE0MTU5fSkKKworCitjbGFzcyBTYWZlQ29uZmlnUGFyc2VyVGVzdENhc2UoQ29uZmlnUGFyc2VyVGVzdENhc2UpOgorICAgIGNvbmZpZ19jbGFzcyA9IENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFyc2VyCisKKyAgICBkZWYgdGVzdF9zYWZlX2ludGVycG9sYXRpb24oc2VsZik6CisgICAgICAgICMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zZi81MTE3MzcKKyAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoIltzZWN0aW9uXVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uMT14eHhcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbjI9JShvcHRpb24xKXMveHh4XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvaz0lKG9wdGlvbjEpcy8lJXNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdF9vaz0lKG9wdGlvbjIpcy8lJXMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgic2VjdGlvbiIsICJvayIpLCAieHh4LyVzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoInNlY3Rpb24iLCAibm90X29rIiksICJ4eHgveHh4LyVzIikKKworICAgIGRlZiB0ZXN0X3NldF9tYWxmb3JtYXR0ZWRfaW50ZXJwb2xhdGlvbihzZWxmKToKKyAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoIltzZWN0XVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uMT1mb29cbiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoJ3NlY3QnLCAib3B0aW9uMSIpLCAiZm9vIikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjZi5zZXQsICJzZWN0IiwgIm9wdGlvbjEiLCAiJWZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNmLnNldCwgInNlY3QiLCAib3B0aW9uMSIsICJmb28lIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2Yuc2V0LCAic2VjdCIsICJvcHRpb24xIiwgImYlb28iKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdzZWN0JywgIm9wdGlvbjEiKSwgImZvbyIpCisKKyAgICAgICAgIyBidWcgIzU3NDE6IGRvdWJsZSBwZXJjZW50cyBhcmUgKm5vdCogbWFsZm9ybWVkCisgICAgICAgIGNmLnNldCgic2VjdCIsICJvcHRpb24yIiwgImZvbyUlYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoInNlY3QiLCAib3B0aW9uMiIpLCAiZm9vJWJhciIpCisKKyAgICBkZWYgdGVzdF9zZXRfbm9uc3RyaW5nX3R5cGVzKHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygiW3NlY3RdXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24xPWZvb1xuIikKKyAgICAgICAgIyBDaGVjayB0aGF0IHdlIGdldCBhIFR5cGVFcnJvciB3aGVuIHNldHRpbmcgbm9uLXN0cmluZyB2YWx1ZXMKKyAgICAgICAgIyBpbiBhbiBleGlzdGluZyBzZWN0aW9uOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNmLnNldCwgInNlY3QiLCAib3B0aW9uMSIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2Yuc2V0LCAic2VjdCIsICJvcHRpb24xIiwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNmLnNldCwgInNlY3QiLCAib3B0aW9uMSIsIG9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNmLnNldCwgInNlY3QiLCAib3B0aW9uMiIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2Yuc2V0LCAic2VjdCIsICJvcHRpb24yIiwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNmLnNldCwgInNlY3QiLCAib3B0aW9uMiIsIG9iamVjdCgpKQorCisgICAgZGVmIHRlc3RfYWRkX3NlY3Rpb25fZGVmYXVsdF8xKHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2YuYWRkX3NlY3Rpb24sICJkZWZhdWx0IikKKworICAgIGRlZiB0ZXN0X2FkZF9zZWN0aW9uX2RlZmF1bHRfMihzZWxmKToKKyAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNmLmFkZF9zZWN0aW9uLCAiREVGQVVMVCIpCisKKworY2xhc3MgU2FmZUNvbmZpZ1BhcnNlclRlc3RDYXNlTm9WYWx1ZShTYWZlQ29uZmlnUGFyc2VyVGVzdENhc2UpOgorICAgIGFsbG93X25vX3ZhbHVlID0gVHJ1ZQorCitjbGFzcyBUZXN0Q2hhaW5NYXAodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2lzc3VlXzEyNzE3KHNlbGYpOgorICAgICAgICBkMSA9IGRpY3QocmVkPTEsIGdyZWVuPTIpCisgICAgICAgIGQyID0gZGljdChncmVlbj0zLCBibHVlPTQpCisgICAgICAgIGRjb21iID0gZDIuY29weSgpCisgICAgICAgIGRjb21iLnVwZGF0ZShkMSkKKyAgICAgICAgY20gPSBDb25maWdQYXJzZXIuX0NoYWlubWFwKGQxLCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNtLmtleXMoKSwgbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoY20ua2V5cygpKSwgc2V0KGRjb21iLmtleXMoKSkpICAgICAgIyBrZXlzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoY20udmFsdWVzKCkpLCBzZXQoZGNvbWIudmFsdWVzKCkpKSAgIyB2YWx1ZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChjbS5pdGVtcygpKSwgc2V0KGRjb21iLml0ZW1zKCkpKSAgICAjIGl0ZW1zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoY20pLCBzZXQoZGNvbWIpKSAgICAgICAgICAgICAgICAgICAgIyBfX2l0ZXJfXyAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLCBkY29tYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIF9fZXFfXygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2NtW2tdIGZvciBrIGluIGRjb21iXSwgZGNvbWIudmFsdWVzKCkpICMgX19nZXRpdGVtX18oKQorICAgICAgICBrbGlzdCA9ICdyZWQgZ3JlZW4gYmx1ZSBibGFjayBicm93bicuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtjbS5nZXQoaywgMTApIGZvciBrIGluIGtsaXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbZGNvbWIuZ2V0KGssIDEwKSBmb3IgayBpbiBrbGlzdF0pICAgICAgIyBnZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtrIGluIGNtIGZvciBrIGluIGtsaXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbayBpbiBkY29tYiBmb3IgayBpbiBrbGlzdF0pICAgICAgICAgICAgIyBfX2NvbnRhaW5zX18oKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtjbS5oYXNfa2V5KGspIGZvciBrIGluIGtsaXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rjb21iLmhhc19rZXkoaykgZm9yIGsgaW4ga2xpc3RdKSAgIyBoYXNfa2V5KCkKKworY2xhc3MgSXNzdWU3MDA1VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3Qgb3V0cHV0IHdoZW4gTm9uZSBpcyBzZXQoKSBhcyBhIHZhbHVlIGFuZCBhbGxvd19ub192YWx1ZSA9PSBGYWxzZS4KKworICAgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU3MDA1CisKKyAgICAiIiIKKworICAgIGV4cGVjdGVkX291dHB1dCA9ICJbc2VjdGlvbl1cbm9wdGlvbiA9IE5vbmVcblxuIgorCisgICAgZGVmIHByZXBhcmUoc2VsZiwgY29uZmlnX2NsYXNzKToKKyAgICAgICAgIyBUaGlzIGlzIHRoZSBkZWZhdWx0LCBidXQgdGhhdCdzIHRoZSBwb2ludC4KKyAgICAgICAgY3AgPSBjb25maWdfY2xhc3MoYWxsb3dfbm9fdmFsdWU9RmFsc2UpCisgICAgICAgIGNwLmFkZF9zZWN0aW9uKCJzZWN0aW9uIikKKyAgICAgICAgY3Auc2V0KCJzZWN0aW9uIiwgIm9wdGlvbiIsIE5vbmUpCisgICAgICAgIHNpbyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgY3Aud3JpdGUoc2lvKQorICAgICAgICByZXR1cm4gc2lvLmdldHZhbHVlKCkKKworICAgIGRlZiB0ZXN0X25vbmVfYXNfdmFsdWVfc3RyaW5naWZpZWQoc2VsZik6CisgICAgICAgIG91dHB1dCA9IHNlbGYucHJlcGFyZShDb25maWdQYXJzZXIuQ29uZmlnUGFyc2VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgc2VsZi5leHBlY3RlZF9vdXRwdXQpCisKKyAgICBkZWYgdGVzdF9ub25lX2FzX3ZhbHVlX3N0cmluZ2lmaWVkX3JhdyhzZWxmKToKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5wcmVwYXJlKENvbmZpZ1BhcnNlci5SYXdDb25maWdQYXJzZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBzZWxmLmV4cGVjdGVkX291dHB1dCkKKworCitjbGFzcyBTb3J0ZWRUZXN0Q2FzZShSYXdDb25maWdQYXJzZXJUZXN0Q2FzZSk6CisgICAgZGVmIG5ld2NvbmZpZyhzZWxmLCBkZWZhdWx0cz1Ob25lKToKKyAgICAgICAgc2VsZi5jZiA9IHNlbGYuY29uZmlnX2NsYXNzKGRlZmF1bHRzPWRlZmF1bHRzLCBkaWN0X3R5cGU9U29ydGVkRGljdCkKKyAgICAgICAgcmV0dXJuIHNlbGYuY2YKKworICAgIGRlZiB0ZXN0X3NvcnRlZChzZWxmKToKKyAgICAgICAgc2VsZi5mcm9tc3RyaW5nKCJbYl1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJvND0xXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAibzM9MlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIm8yPTNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICJvMT00XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiW2FdXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAiaz12XG4iKQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHNlbGYuY2Yud3JpdGUob3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbYV1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiayA9IHZcblxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJbYl1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibzEgPSA0XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIm8yID0gM1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJvMyA9IDJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibzQgPSAxXG5cbiIpCisKKworY2xhc3MgRXhjZXB0aW9uUGlja2xpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgZm9yIGlzc3VlICMxMzc2MDogQ29uZmlnUGFyc2VyIGV4Y2VwdGlvbnMgYXJlIG5vdCBwaWNrbGFibGUuIiIiCisKKyAgICBkZWYgdGVzdF9lcnJvcihzZWxmKToKKyAgICAgICAgaW1wb3J0IHBpY2tsZQorICAgICAgICBlMSA9IENvbmZpZ1BhcnNlci5FcnJvcigndmFsdWUnKQorICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxKQorICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQorCisgICAgZGVmIHRlc3Rfbm9zZWN0aW9uZXJyb3Ioc2VsZik6CisgICAgICAgIGltcG9ydCBwaWNrbGUKKyAgICAgICAgZTEgPSBDb25maWdQYXJzZXIuTm9TZWN0aW9uRXJyb3IoJ3NlY3Rpb24nKQorICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxKQorICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKworICAgIGRlZiB0ZXN0X25vb3B0aW9uZXJyb3Ioc2VsZik6CisgICAgICAgIGltcG9ydCBwaWNrbGUKKyAgICAgICAgZTEgPSBDb25maWdQYXJzZXIuTm9PcHRpb25FcnJvcignb3B0aW9uJywgJ3NlY3Rpb24nKQorICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxKQorICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm9wdGlvbiwgZTIub3B0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKworICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZXNlY3Rpb25lcnJvcihzZWxmKToKKyAgICAgICAgaW1wb3J0IHBpY2tsZQorICAgICAgICBlMSA9IENvbmZpZ1BhcnNlci5EdXBsaWNhdGVTZWN0aW9uRXJyb3IoJ3NlY3Rpb24nKQorICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxKQorICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKworICAgIGRlZiB0ZXN0X2ludGVycG9sYXRpb25lcnJvcihzZWxmKToKKyAgICAgICAgaW1wb3J0IHBpY2tsZQorICAgICAgICBlMSA9IENvbmZpZ1BhcnNlci5JbnRlcnBvbGF0aW9uRXJyb3IoJ29wdGlvbicsICdzZWN0aW9uJywgJ21zZycpCisgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEpCisgICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNlY3Rpb24sIGUyLnNlY3Rpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEub3B0aW9uLCBlMi5vcHRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQorCisgICAgZGVmIHRlc3RfaW50ZXJwb2xhdGlvbm1pc3NpbmdvcHRpb25lcnJvcihzZWxmKToKKyAgICAgICAgaW1wb3J0IHBpY2tsZQorICAgICAgICBlMSA9IENvbmZpZ1BhcnNlci5JbnRlcnBvbGF0aW9uTWlzc2luZ09wdGlvbkVycm9yKCdvcHRpb24nLCAnc2VjdGlvbicsCisgICAgICAgICAgICAncmF3dmFsJywgJ3JlZmVyZW5jZScpCisgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEpCisgICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNlY3Rpb24sIGUyLnNlY3Rpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEub3B0aW9uLCBlMi5vcHRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEucmVmZXJlbmNlLCBlMi5yZWZlcmVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQorCisgICAgZGVmIHRlc3RfaW50ZXJwb2xhdGlvbnN5bnRheGVycm9yKHNlbGYpOgorICAgICAgICBpbXBvcnQgcGlja2xlCisgICAgICAgIGUxID0gQ29uZmlnUGFyc2VyLkludGVycG9sYXRpb25TeW50YXhFcnJvcignb3B0aW9uJywgJ3NlY3Rpb24nLCAnbXNnJykKKyAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKKyAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc2VjdGlvbiwgZTIuc2VjdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5vcHRpb24sIGUyLm9wdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCisKKyAgICBkZWYgdGVzdF9pbnRlcnBvbGF0aW9uZGVwdGhlcnJvcihzZWxmKToKKyAgICAgICAgaW1wb3J0IHBpY2tsZQorICAgICAgICBlMSA9IENvbmZpZ1BhcnNlci5JbnRlcnBvbGF0aW9uRGVwdGhFcnJvcignb3B0aW9uJywgJ3NlY3Rpb24nLAorICAgICAgICAgICAgJ3Jhd3ZhbCcpCisgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEpCisgICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNlY3Rpb24sIGUyLnNlY3Rpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEub3B0aW9uLCBlMi5vcHRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQorCisgICAgZGVmIHRlc3RfcGFyc2luZ2Vycm9yKHNlbGYpOgorICAgICAgICBpbXBvcnQgcGlja2xlCisgICAgICAgIGUxID0gQ29uZmlnUGFyc2VyLlBhcnNpbmdFcnJvcignc291cmNlJykKKyAgICAgICAgZTEuYXBwZW5kKDEsICdsaW5lMScpCisgICAgICAgIGUxLmFwcGVuZCgyLCAnbGluZTInKQorICAgICAgICBlMS5hcHBlbmQoMywgJ2xpbmUzJykKKyAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKKyAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuZmlsZW5hbWUsIGUyLmZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmVycm9ycywgZTIuZXJyb3JzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKworICAgIGRlZiB0ZXN0X21pc3NpbmdzZWN0aW9uaGVhZGVyZXJyb3Ioc2VsZik6CisgICAgICAgIGltcG9ydCBwaWNrbGUKKyAgICAgICAgZTEgPSBDb25maWdQYXJzZXIuTWlzc2luZ1NlY3Rpb25IZWFkZXJFcnJvcignZmlsZW5hbWUnLCAxMjMsICdsaW5lJykKKyAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKKyAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubGluZSwgZTIubGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5maWxlbmFtZSwgZTIuZmlsZW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubGluZW5vLCBlMi5saW5lbm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBDb25maWdQYXJzZXJUZXN0Q2FzZSwKKyAgICAgICAgTXVsdGlsaW5lVmFsdWVzVGVzdENhc2UsCisgICAgICAgIFJhd0NvbmZpZ1BhcnNlclRlc3RDYXNlLAorICAgICAgICBTYWZlQ29uZmlnUGFyc2VyVGVzdENhc2UsCisgICAgICAgIFNhZmVDb25maWdQYXJzZXJUZXN0Q2FzZU5vVmFsdWUsCisgICAgICAgIFNvcnRlZFRlc3RDYXNlLAorICAgICAgICBJc3N1ZTcwMDVUZXN0Q2FzZSwKKyAgICAgICAgVGVzdENoYWluTWFwLAorICAgICAgICBFeGNlcHRpb25QaWNrbGluZ1Rlc3RDYXNlLAorICAgICAgICApCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY2dpLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY2dpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YWJlOTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jZ2kucHkKQEAgLTAsMCArMSwzOTQgQEAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfd2FybmluZ3MKK2ltcG9ydCBjZ2kKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgSGFja2VkU3lzTW9kdWxlOgorICAgICMgVGhlIHJlZ3Jlc3Npb24gdGVzdCB3aWxsIGhhdmUgcmVhbCB2YWx1ZXMgaW4gc3lzLmFyZ3YsIHdoaWNoCisgICAgIyB3aWxsIGNvbXBsZXRlbHkgY29uZnVzZSB0aGUgdGVzdCBvZiB0aGUgY2dpIG1vZHVsZQorICAgIGFyZ3YgPSBbXQorICAgIHN0ZGluID0gc3lzLnN0ZGluCisKK2NnaS5zeXMgPSBIYWNrZWRTeXNNb2R1bGUoKQorCit0cnk6CisgICAgZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworY2xhc3MgQ29tcGFyYWJsZUV4Y2VwdGlvbjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXJyKToKKyAgICAgICAgc2VsZi5lcnIgPSBlcnIKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYuZXJyKQorCisgICAgZGVmIF9fY21wX18oc2VsZiwgYW5FeGMpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhbkV4YywgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICB4ID0gY21wKHNlbGYuZXJyLl9fY2xhc3NfXywgYW5FeGMuX19jbGFzc19fKQorICAgICAgICBpZiB4ICE9IDA6CisgICAgICAgICAgICByZXR1cm4geAorICAgICAgICByZXR1cm4gY21wKHNlbGYuZXJyLmFyZ3MsIGFuRXhjLmFyZ3MpCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuZXJyLCBhdHRyKQorCitkZWYgZG9fdGVzdChidWYsIG1ldGhvZCk6CisgICAgZW52ID0ge30KKyAgICBpZiBtZXRob2QgPT0gIkdFVCI6CisgICAgICAgIGZwID0gTm9uZQorICAgICAgICBlbnZbJ1JFUVVFU1RfTUVUSE9EJ10gPSAnR0VUJworICAgICAgICBlbnZbJ1FVRVJZX1NUUklORyddID0gYnVmCisgICAgZWxpZiBtZXRob2QgPT0gIlBPU1QiOgorICAgICAgICBmcCA9IFN0cmluZ0lPKGJ1ZikKKyAgICAgICAgZW52WydSRVFVRVNUX01FVEhPRCddID0gJ1BPU1QnCisgICAgICAgIGVudlsnQ09OVEVOVF9UWVBFJ10gPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJworICAgICAgICBlbnZbJ0NPTlRFTlRfTEVOR1RIJ10gPSBzdHIobGVuKGJ1ZikpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgInVua25vd24gbWV0aG9kOiAlcyIgJSBtZXRob2QKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBjZ2kucGFyc2UoZnAsIGVudiwgc3RyaWN0X3BhcnNpbmc9MSkKKyAgICBleGNlcHQgU3RhbmRhcmRFcnJvciwgZXJyOgorICAgICAgICByZXR1cm4gQ29tcGFyYWJsZUV4Y2VwdGlvbihlcnIpCisKK3BhcnNlX3N0cmljdF90ZXN0X2Nhc2VzID0gWworICAgICgiIiwgVmFsdWVFcnJvcigiYmFkIHF1ZXJ5IGZpZWxkOiAnJyIpKSwKKyAgICAoIiYiLCBWYWx1ZUVycm9yKCJiYWQgcXVlcnkgZmllbGQ6ICcnIikpLAorICAgICgiJiYiLCBWYWx1ZUVycm9yKCJiYWQgcXVlcnkgZmllbGQ6ICcnIikpLAorICAgICgiOyIsIFZhbHVlRXJyb3IoImJhZCBxdWVyeSBmaWVsZDogJyciKSksCisgICAgKCI7JjsiLCBWYWx1ZUVycm9yKCJiYWQgcXVlcnkgZmllbGQ6ICcnIikpLAorICAgICMgU2hvdWxkIHRoZSBuZXh0IGZldyByZWFsbHkgYmUgdmFsaWQ/CisgICAgKCI9Iiwge30pLAorICAgICgiPSY9Iiwge30pLAorICAgICgiPTs9Iiwge30pLAorICAgICMgVGhpcyByZXN0IHNlZW0gdG8gbWFrZSBzZW5zZQorICAgICgiPWEiLCB7Jyc6IFsnYSddfSksCisgICAgKCImPWEiLCBWYWx1ZUVycm9yKCJiYWQgcXVlcnkgZmllbGQ6ICcnIikpLAorICAgICgiPWEmIiwgVmFsdWVFcnJvcigiYmFkIHF1ZXJ5IGZpZWxkOiAnJyIpKSwKKyAgICAoIj0mYSIsIFZhbHVlRXJyb3IoImJhZCBxdWVyeSBmaWVsZDogJ2EnIikpLAorICAgICgiYj1hIiwgeydiJzogWydhJ119KSwKKyAgICAoImIrPWEiLCB7J2IgJzogWydhJ119KSwKKyAgICAoImE9Yj1hIiwgeydhJzogWydiPWEnXX0pLAorICAgICgiYT0rYj1hIiwgeydhJzogWycgYj1hJ119KSwKKyAgICAoIiZiPWEiLCBWYWx1ZUVycm9yKCJiYWQgcXVlcnkgZmllbGQ6ICcnIikpLAorICAgICgiYiY9YSIsIFZhbHVlRXJyb3IoImJhZCBxdWVyeSBmaWVsZDogJ2InIikpLAorICAgICgiYT1hK2ImYj1iK2MiLCB7J2EnOiBbJ2EgYiddLCAnYic6IFsnYiBjJ119KSwKKyAgICAoImE9YStiJmE9YithIiwgeydhJzogWydhIGInLCAnYiBhJ119KSwKKyAgICAoIng9MSZ5PTIuMCZ6PTItMy4lMmIwIiwgeyd4JzogWycxJ10sICd5JzogWycyLjAnXSwgJ3onOiBbJzItMy4rMCddfSksCisgICAgKCJ4PTE7eT0yLjAmej0yLTMuJTJiMCIsIHsneCc6IFsnMSddLCAneSc6IFsnMi4wJ10sICd6JzogWycyLTMuKzAnXX0pLAorICAgICgieD0xO3k9Mi4wO3o9Mi0zLiUyYjAiLCB7J3gnOiBbJzEnXSwgJ3knOiBbJzIuMCddLCAneic6IFsnMi0zLiswJ119KSwKKyAgICAoIkhiYzUxNjExNjhjNTQyMzMzNjMzMzE1ZGVlMTE4MjIyNzprZXlfc3RvcmVfc2VxaWQ9NDAwMDA2JmN1eWVyPXImdmlldz1idXN0b21lciZvcmRlcl9pZD0wYmIyZTI0ODYzODgzM2Q0OGNiN2ZlZDMwMDAwMGYxYiZleHBpcmU9OTY0NTQ2MjYzJmxvYmFsZT1lbi1VUyZraWQ9MTMwMDAzLjMwMDAzOCZzcz1lbnYiLAorICAgICB7J0hiYzUxNjExNjhjNTQyMzMzNjMzMzE1ZGVlMTE4MjIyNzprZXlfc3RvcmVfc2VxaWQnOiBbJzQwMDAwNiddLAorICAgICAgJ2N1eWVyJzogWydyJ10sCisgICAgICAnZXhwaXJlJzogWyc5NjQ1NDYyNjMnXSwKKyAgICAgICdraWQnOiBbJzEzMDAwMy4zMDAwMzgnXSwKKyAgICAgICdsb2JhbGUnOiBbJ2VuLVVTJ10sCisgICAgICAnb3JkZXJfaWQnOiBbJzBiYjJlMjQ4NjM4ODMzZDQ4Y2I3ZmVkMzAwMDAwZjFiJ10sCisgICAgICAnc3MnOiBbJ2VudiddLAorICAgICAgJ3ZpZXcnOiBbJ2J1c3RvbWVyJ10sCisgICAgICB9KSwKKworICAgICgiZ3JvdXBfaWQ9NTQ3MCZzZXQ9Y3VzdG9tJl9hc3NpZ25lZF90bz0zMTM5MiZfc3RhdHVzPTEmX2NhdGVnb3J5PTEwMCZTVUJNSVQ9QnJvd3NlIiwKKyAgICAgeydTVUJNSVQnOiBbJ0Jyb3dzZSddLAorICAgICAgJ19hc3NpZ25lZF90byc6IFsnMzEzOTInXSwKKyAgICAgICdfY2F0ZWdvcnknOiBbJzEwMCddLAorICAgICAgJ19zdGF0dXMnOiBbJzEnXSwKKyAgICAgICdncm91cF9pZCc6IFsnNTQ3MCddLAorICAgICAgJ3NldCc6IFsnY3VzdG9tJ10sCisgICAgICB9KQorICAgIF0KKworZGVmIGZpcnN0X2VsdHMobGlzdCk6CisgICAgcmV0dXJuIG1hcChsYW1iZGEgeDp4WzBdLCBsaXN0KQorCitkZWYgZmlyc3Rfc2Vjb25kX2VsdHMobGlzdCk6CisgICAgcmV0dXJuIG1hcChsYW1iZGEgcDoocFswXSwgcFsxXVswXSksIGxpc3QpCisKK2RlZiBnZW5fcmVzdWx0KGRhdGEsIGVudmlyb24pOgorICAgIGZha2Vfc3RkaW4gPSBTdHJpbmdJTyhkYXRhKQorICAgIGZha2Vfc3RkaW4uc2VlaygwKQorICAgIGZvcm0gPSBjZ2kuRmllbGRTdG9yYWdlKGZwPWZha2Vfc3RkaW4sIGVudmlyb249ZW52aXJvbikKKworICAgIHJlc3VsdCA9IHt9CisgICAgZm9yIGssIHYgaW4gZGljdChmb3JtKS5pdGVtcygpOgorICAgICAgICByZXN1bHRba10gPSBpc2luc3RhbmNlKHYsIGxpc3QpIGFuZCBmb3JtLmdldGxpc3Qoaykgb3Igdi52YWx1ZQorCisgICAgcmV0dXJuIHJlc3VsdAorCitjbGFzcyBDZ2lUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9lc2NhcGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRlc3QgJmFtcDsgc3RyaW5nIiwgY2dpLmVzY2FwZSgidGVzdCAmIHN0cmluZyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCImbHQ7dGVzdCBzdHJpbmcmZ3Q7IiwgY2dpLmVzY2FwZSgiPHRlc3Qgc3RyaW5nPiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCImcXVvdDt0ZXN0IHN0cmluZyZxdW90OyIsIGNnaS5lc2NhcGUoJyJ0ZXN0IHN0cmluZyInLCBUcnVlKSkKKworICAgIGRlZiB0ZXN0X3N0cmljdChzZWxmKToKKyAgICAgICAgZm9yIG9yaWcsIGV4cGVjdCBpbiBwYXJzZV9zdHJpY3RfdGVzdF9jYXNlczoKKyAgICAgICAgICAgICMgVGVzdCBiYXNpYyBwYXJzaW5nCisgICAgICAgICAgICBkID0gZG9fdGVzdChvcmlnLCAiR0VUIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZXhwZWN0LCAiRXJyb3IgcGFyc2luZyAlcyIgJSByZXByKG9yaWcpKQorICAgICAgICAgICAgZCA9IGRvX3Rlc3Qob3JpZywgIlBPU1QiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBleHBlY3QsICJFcnJvciBwYXJzaW5nICVzIiAlIHJlcHIob3JpZykpCisKKyAgICAgICAgICAgIGVudiA9IHsnUVVFUllfU1RSSU5HJzogb3JpZ30KKyAgICAgICAgICAgIGZjZCA9IGNnaS5Gb3JtQ29udGVudERpY3QoZW52KQorICAgICAgICAgICAgc2QgPSBjZ2kuU3ZGb3JtQ29udGVudERpY3QoZW52KQorICAgICAgICAgICAgZnMgPSBjZ2kuRmllbGRTdG9yYWdlKGVudmlyb249ZW52KQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3QsIGRpY3QpOgorICAgICAgICAgICAgICAgICMgdGVzdCBkaWN0IGludGVyZmFjZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGV4cGVjdCksIGxlbihmY2QpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChleHBlY3Qua2V5cygpLCBmY2Qua2V5cygpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChleHBlY3QudmFsdWVzKCksIGZjZC52YWx1ZXMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZXhwZWN0Lml0ZW1zKCksIGZjZC5pdGVtcygpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmNkLmdldCgibm9uZXhpc3RlbnQgZmllbGQiLCAiZGVmYXVsdCIpLCAiZGVmYXVsdCIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2QpLCBsZW4oZnMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChzZC5rZXlzKCksIGZzLmtleXMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZzLmdldHZhbHVlKCJub25leGlzdGVudCBmaWVsZCIsICJkZWZhdWx0IiksICJkZWZhdWx0IikKKyAgICAgICAgICAgICAgICAjIHRlc3QgaW5kaXZpZHVhbCBmaWVsZHMKKyAgICAgICAgICAgICAgICBmb3Iga2V5IGluIGV4cGVjdC5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdF92YWwgPSBleHBlY3Rba2V5XQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNkLmhhc19rZXkoa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGZjZFtrZXldLCBleHBlY3Rba2V5XSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmY2QuZ2V0KGtleSwgImRlZmF1bHQiKSwgZmNkW2tleV0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmcy5oYXNfa2V5KGtleSkpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihleHBlY3RfdmFsKSA+IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVfdmFsdWUgPSAwCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVfdmFsdWUgPSAxCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHNkW2tleV0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNpbmdsZV92YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnMuZ2V0dmFsdWUoa2V5KSwgZXhwZWN0X3ZhbCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaW5nbGVfdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgZXhwZWN0X3ZhbFswXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnMuZ2V0dmFsdWUoa2V5KSwgZXhwZWN0X3ZhbFswXSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKHNkLmdldGxpc3Qoa2V5KSwgZXhwZWN0X3ZhbCkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2luZ2xlX3ZhbHVlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKHNkLnZhbHVlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfZWx0cyhleHBlY3QudmFsdWVzKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKHNkLml0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9zZWNvbmRfZWx0cyhleHBlY3QuaXRlbXMoKSkpCisKKyAgICBkZWYgdGVzdF93ZWlyZF9mb3JtY29udGVudGRpY3Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgd2VpcmQgRm9ybUNvbnRlbnREaWN0IGNsYXNzZXMKKyAgICAgICAgZW52ID0geydRVUVSWV9TVFJJTkcnOiAieD0xJnk9Mi4wJno9Mi0zLiUyYjAmMT0xYWJjIn0KKyAgICAgICAgZXhwZWN0ID0geyd4JzogMSwgJ3knOiAyLjAsICd6JzogJzItMy4rMCcsICcxJzogJzFhYmMnfQorICAgICAgICBkID0gY2dpLkludGVycEZvcm1Db250ZW50RGljdChlbnYpCisgICAgICAgIGZvciBrLCB2IGluIGV4cGVjdC5pdGVtcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkW2tdLCB2KQorICAgICAgICBmb3IgaywgdiBpbiBkLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdFtrXSwgdikKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGV4cGVjdC52YWx1ZXMoKSwgZC52YWx1ZXMoKSkKKworICAgIGRlZiB0ZXN0X2xvZyhzZWxmKToKKyAgICAgICAgY2dpLmxvZygiVGVzdGluZyIpCisKKyAgICAgICAgY2dpLmxvZ2ZwID0gU3RyaW5nSU8oKQorICAgICAgICBjZ2kuaW5pdGxvZygiJXMiLCAiVGVzdGluZyBpbml0bG9nIDEiKQorICAgICAgICBjZ2kubG9nKCIlcyIsICJUZXN0aW5nIGxvZyAyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZ2kubG9nZnAuZ2V0dmFsdWUoKSwgIlRlc3RpbmcgaW5pdGxvZyAxXG5UZXN0aW5nIGxvZyAyXG4iKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiL2Rldi9udWxsIik6CisgICAgICAgICAgICBjZ2kubG9nZnAgPSBOb25lCisgICAgICAgICAgICBjZ2kubG9nZmlsZSA9ICIvZGV2L251bGwiCisgICAgICAgICAgICBjZ2kuaW5pdGxvZygiJXMiLCAiVGVzdGluZyBsb2cgMyIpCisgICAgICAgICAgICBjZ2kubG9nKCJUZXN0aW5nIGxvZyA0IikKKworICAgIGRlZiB0ZXN0X2ZpZWxkc3RvcmFnZV9yZWFkbGluZShzZWxmKToKKyAgICAgICAgIyBGaWVsZFN0b3JhZ2UgdXNlcyByZWFkbGluZSwgd2hpY2ggaGFzIHRoZSBjYXBhY2l0eSB0byByZWFkIGFsbAorICAgICAgICAjIGNvbnRlbnRzIG9mIHRoZSBpbnB1dCBmaWxlIGludG8gbWVtb3J5OyB3ZSB1c2UgcmVhZGxpbmUncyBzaXplIGFyZ3VtZW50CisgICAgICAgICMgdG8gcHJldmVudCB0aGF0IGZvciBmaWxlcyB0aGF0IGRvIG5vdCBjb250YWluIGFueSBuZXdsaW5lcyBpbgorICAgICAgICAjIG5vbi1HRVQvSEVBRCByZXF1ZXN0cworICAgICAgICBjbGFzcyBUZXN0UmVhZGxpbmVGaWxlOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUpOgorICAgICAgICAgICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKKyAgICAgICAgICAgICAgICBzZWxmLm51bWNhbGxzID0gMAorCisgICAgICAgICAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgICAgICAgICBzZWxmLm51bWNhbGxzICs9IDEKKyAgICAgICAgICAgICAgICBpZiBzaXplOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlLnJlYWRsaW5lKHNpemUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZS5yZWFkbGluZSgpCisKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBmaWxlID0gc2VsZi5fX2RpY3RfX1snZmlsZSddCisgICAgICAgICAgICAgICAgYSA9IGdldGF0dHIoZmlsZSwgbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhLCBpbnQpOgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIG5hbWUsIGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGEKKworICAgICAgICBmID0gVGVzdFJlYWRsaW5lRmlsZSh0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkpCisgICAgICAgIGYud3JpdGUoJ3gnICogMjU2ICogMTAyNCkKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIGVudiA9IHsnUkVRVUVTVF9NRVRIT0QnOidQVVQnfQorICAgICAgICBmcyA9IGNnaS5GaWVsZFN0b3JhZ2UoZnA9ZiwgZW52aXJvbj1lbnYpCisgICAgICAgICMgaWYgd2UncmUgbm90IGNodW5raW5nIHByb3Blcmx5LCByZWFkbGluZSBpcyBvbmx5IGNhbGxlZCB0d2ljZQorICAgICAgICAjIChieSByZWFkX2JpbmFyeSk7IGlmIHdlIGFyZSBjaHVua2luZyBwcm9wZXJseSwgaXQgd2lsbCBiZSBjYWxsZWQgNSB0aW1lcworICAgICAgICAjIGFzIGxvbmcgYXMgdGhlIGNodW5rc2l6ZSBpcyAxIDw8IDE2LgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5udW1jYWxscyA+IDIpCisKKyAgICBkZWYgdGVzdF9maWVsZHN0b3JhZ2VfbXVsdGlwYXJ0KHNlbGYpOgorICAgICAgICAjVGVzdCBiYXNpYyBGaWVsZFN0b3JhZ2UgbXVsdGlwYXJ0IHBhcnNpbmcKKyAgICAgICAgZW52ID0geydSRVFVRVNUX01FVEhPRCc6J1BPU1QnLCAnQ09OVEVOVF9UWVBFJzonbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNzIxODM3MzczMzUwNzA1NTI2Njg4MTY0Njg0JywgJ0NPTlRFTlRfTEVOR1RIJzonNTU4J30KKyAgICAgICAgcG9zdGRhdGEgPSAiIiItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTcyMTgzNzM3MzM1MDcwNTUyNjY4ODE2NDY4NAorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJpZCIKKworMTIzNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03MjE4MzczNzMzNTA3MDU1MjY2ODgxNjQ2ODQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0idGl0bGUiCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03MjE4MzczNzMzNTA3MDU1MjY2ODgxNjQ2ODQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iZmlsZSI7IGZpbGVuYW1lPSJ0ZXN0LnR4dCIKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCitUZXN0aW5nIDEyMy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03MjE4MzczNzMzNTA3MDU1MjY2ODgxNjQ2ODQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ic3VibWl0IgorCisgQWRkXHgyMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03MjE4MzczNzMzNTA3MDU1MjY2ODgxNjQ2ODQtLQorIiIiCisgICAgICAgIGZzID0gY2dpLkZpZWxkU3RvcmFnZShmcD1TdHJpbmdJTyhwb3N0ZGF0YSksIGVudmlyb249ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmcy5saXN0KSwgNCkKKyAgICAgICAgZXhwZWN0ID0gW3snbmFtZSc6J2lkJywgJ2ZpbGVuYW1lJzpOb25lLCAndmFsdWUnOicxMjM0J30sCisgICAgICAgICAgICAgICAgICB7J25hbWUnOid0aXRsZScsICdmaWxlbmFtZSc6Tm9uZSwgJ3ZhbHVlJzonJ30sCisgICAgICAgICAgICAgICAgICB7J25hbWUnOidmaWxlJywgJ2ZpbGVuYW1lJzondGVzdC50eHQnLCd2YWx1ZSc6J1Rlc3RpbmcgMTIzLlxuJ30sCisgICAgICAgICAgICAgICAgICB7J25hbWUnOidzdWJtaXQnLCAnZmlsZW5hbWUnOk5vbmUsICd2YWx1ZSc6JyBBZGQgJ31dCisgICAgICAgIGZvciB4IGluIHJhbmdlKGxlbihmcy5saXN0KSk6CisgICAgICAgICAgICBmb3IgaywgZXhwIGluIGV4cGVjdFt4XS5pdGVtcygpOgorICAgICAgICAgICAgICAgIGdvdCA9IGdldGF0dHIoZnMubGlzdFt4XSwgaykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwKQorCisgICAgX3FzX3Jlc3VsdCA9IHsKKyAgICAgICAgJ2tleTEnOiAndmFsdWUxJywKKyAgICAgICAgJ2tleTInOiBbJ3ZhbHVlMngnLCAndmFsdWUyeSddLAorICAgICAgICAna2V5Myc6ICd2YWx1ZTMnLAorICAgICAgICAna2V5NCc6ICd2YWx1ZTQnCisgICAgfQorICAgIGRlZiB0ZXN0UVNBbmRVcmxFbmNvZGUoc2VsZik6CisgICAgICAgIGRhdGEgPSAia2V5Mj12YWx1ZTJ4JmtleTM9dmFsdWUzJmtleTQ9dmFsdWU0IgorICAgICAgICBlbnZpcm9uID0geworICAgICAgICAgICAgJ0NPTlRFTlRfTEVOR1RIJzogICBzdHIobGVuKGRhdGEpKSwKKyAgICAgICAgICAgICdDT05URU5UX1RZUEUnOiAgICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsCisgICAgICAgICAgICAnUVVFUllfU1RSSU5HJzogICAgICdrZXkxPXZhbHVlMSZrZXkyPXZhbHVlMnknLAorICAgICAgICAgICAgJ1JFUVVFU1RfTUVUSE9EJzogICAnUE9TVCcsCisgICAgICAgIH0KKyAgICAgICAgdiA9IGdlbl9yZXN1bHQoZGF0YSwgZW52aXJvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9xc19yZXN1bHQsIHYpCisKKyAgICBkZWYgdGVzdFFTQW5kRm9ybURhdGEoc2VsZik6CisgICAgICAgIGRhdGEgPSAiIiIKKy0tLTEyMworQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJrZXkyIgorCit2YWx1ZTJ5CistLS0xMjMKK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ia2V5MyIKKwordmFsdWUzCistLS0xMjMKK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ia2V5NCIKKwordmFsdWU0CistLS0xMjMtLQorIiIiCisgICAgICAgIGVudmlyb24gPSB7CisgICAgICAgICAgICAnQ09OVEVOVF9MRU5HVEgnOiAgIHN0cihsZW4oZGF0YSkpLAorICAgICAgICAgICAgJ0NPTlRFTlRfVFlQRSc6ICAgICAnbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9LTEyMycsCisgICAgICAgICAgICAnUVVFUllfU1RSSU5HJzogICAgICdrZXkxPXZhbHVlMSZrZXkyPXZhbHVlMngnLAorICAgICAgICAgICAgJ1JFUVVFU1RfTUVUSE9EJzogICAnUE9TVCcsCisgICAgICAgIH0KKyAgICAgICAgdiA9IGdlbl9yZXN1bHQoZGF0YSwgZW52aXJvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9xc19yZXN1bHQsIHYpCisKKyAgICBkZWYgdGVzdFFTQW5kRm9ybURhdGFGaWxlKHNlbGYpOgorICAgICAgICBkYXRhID0gIiIiCistLS0xMjMKK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ia2V5MiIKKwordmFsdWUyeQorLS0tMTIzCitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImtleTMiCisKK3ZhbHVlMworLS0tMTIzCitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImtleTQiCisKK3ZhbHVlNAorLS0tMTIzCitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9InVwbG9hZCI7IGZpbGVuYW1lPSJmYWtlLnR4dCIKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCit0aGlzIGlzIHRoZSBjb250ZW50IG9mIHRoZSBmYWtlIGZpbGUKKworLS0tMTIzLS0KKyIiIgorICAgICAgICBlbnZpcm9uID0geworICAgICAgICAgICAgJ0NPTlRFTlRfTEVOR1RIJzogICBzdHIobGVuKGRhdGEpKSwKKyAgICAgICAgICAgICdDT05URU5UX1RZUEUnOiAgICAgJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PS0xMjMnLAorICAgICAgICAgICAgJ1FVRVJZX1NUUklORyc6ICAgICAna2V5MT12YWx1ZTEma2V5Mj12YWx1ZTJ4JywKKyAgICAgICAgICAgICdSRVFVRVNUX01FVEhPRCc6ICAgJ1BPU1QnLAorICAgICAgICB9CisgICAgICAgIHJlc3VsdCA9IHNlbGYuX3FzX3Jlc3VsdC5jb3B5KCkKKyAgICAgICAgcmVzdWx0LnVwZGF0ZSh7CisgICAgICAgICAgICAndXBsb2FkJzogJ3RoaXMgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIGZha2UgZmlsZVxuJworICAgICAgICB9KQorICAgICAgICB2ID0gZ2VuX3Jlc3VsdChkYXRhLCBlbnZpcm9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgdikKKworICAgIGRlZiB0ZXN0X2RlcHJlY2F0ZWRfcGFyc2VfcXMoc2VsZik6CisgICAgICAgICMgdGhpcyBmdW5jIGlzIG1vdmVkIHRvIHVybHBhcnNlLCB0aGlzIGlzIGp1c3QgYSBzYW5pdHkgY2hlY2sKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJ2NnaS5wYXJzZV9xcyBpcyBkZXByZWNhdGVkLCB1c2UgdXJscGFyc2UuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFyc2VfcXMgaW5zdGVhZCcsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeydhJzogWydBMSddLCAnQic6IFsnQjMnXSwgJ2InOiBbJ0IyJ119LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZ2kucGFyc2VfcXMoJ2E9QTEmYj1CMiZCPUIzJykpCisKKyAgICBkZWYgdGVzdF9kZXByZWNhdGVkX3BhcnNlX3FzbChzZWxmKToKKyAgICAgICAgIyB0aGlzIGZ1bmMgaXMgbW92ZWQgdG8gdXJscGFyc2UsIHRoaXMgaXMganVzdCBhIHNhbml0eSBjaGVjaworICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnY2dpLnBhcnNlX3FzbCBpcyBkZXByZWNhdGVkLCB1c2UgdXJscGFyc2UuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFyc2VfcXNsIGluc3RlYWQnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoJ2EnLCAnQTEnKSwgKCdiJywgJ0IyJyksICgnQicsICdCMycpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2dpLnBhcnNlX3FzbCgnYT1BMSZiPUIyJkI9QjMnKSkKKworICAgIGRlZiB0ZXN0X3BhcnNlX2hlYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNnaS5wYXJzZV9oZWFkZXIoInRleHQvcGxhaW4iKSwKKyAgICAgICAgICAgICgidGV4dC9wbGFpbiIsIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNnaS5wYXJzZV9oZWFkZXIoInRleHQvdm5kLmp1c3QubWFkZS50aGlzLnVwIDsgIiksCisgICAgICAgICAgICAoInRleHQvdm5kLmp1c3QubWFkZS50aGlzLnVwIiwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2dpLnBhcnNlX2hlYWRlcigidGV4dC9wbGFpbjtjaGFyc2V0PXVzLWFzY2lpIiksCisgICAgICAgICAgICAoInRleHQvcGxhaW4iLCB7ImNoYXJzZXQiOiAidXMtYXNjaWkifSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjZ2kucGFyc2VfaGVhZGVyKCd0ZXh0L3BsYWluIDsgY2hhcnNldD0idXMtYXNjaWkiJyksCisgICAgICAgICAgICAoInRleHQvcGxhaW4iLCB7ImNoYXJzZXQiOiAidXMtYXNjaWkifSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjZ2kucGFyc2VfaGVhZGVyKCd0ZXh0L3BsYWluIDsgY2hhcnNldD0idXMtYXNjaWkiOyBhbm90aGVyPW9wdCcpLAorICAgICAgICAgICAgKCJ0ZXh0L3BsYWluIiwgeyJjaGFyc2V0IjogInVzLWFzY2lpIiwgImFub3RoZXIiOiAib3B0In0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2dpLnBhcnNlX2hlYWRlcignYXR0YWNobWVudDsgZmlsZW5hbWU9InNpbGx5LnR4dCInKSwKKyAgICAgICAgICAgICgiYXR0YWNobWVudCIsIHsiZmlsZW5hbWUiOiAic2lsbHkudHh0In0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2dpLnBhcnNlX2hlYWRlcignYXR0YWNobWVudDsgZmlsZW5hbWU9InN0cmFuZ2U7bmFtZSInKSwKKyAgICAgICAgICAgICgiYXR0YWNobWVudCIsIHsiZmlsZW5hbWUiOiAic3RyYW5nZTtuYW1lIn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY2dpLnBhcnNlX2hlYWRlcignYXR0YWNobWVudDsgZmlsZW5hbWU9InN0cmFuZ2U7bmFtZSI7c2l6ZT0xMjM7JyksCisgICAgICAgICAgICAoImF0dGFjaG1lbnQiLCB7ImZpbGVuYW1lIjogInN0cmFuZ2U7bmFtZSIsICJzaXplIjogIjEyMyJ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNnaS5wYXJzZV9oZWFkZXIoJ2Zvcm0tZGF0YTsgbmFtZT0iZmlsZXMiOyBmaWxlbmFtZT0iZm9cXCJvO2JhciInKSwKKyAgICAgICAgICAgICgiZm9ybS1kYXRhIiwgeyJuYW1lIjogImZpbGVzIiwgImZpbGVuYW1lIjogJ2ZvIm87YmFyJ30pKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoQ2dpVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NoYXJtYXBjb2RlYy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NoYXJtYXBjb2RlYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTg0MDU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY2hhcm1hcGNvZGVjLnB5CkBAIC0wLDAgKzEsNTYgQEAKKyIiIiBQeXRob24gY2hhcmFjdGVyIG1hcHBpbmcgY29kZWMgdGVzdAorCitUaGlzIHVzZXMgdGhlIHRlc3QgY29kZWMgaW4gdGVzdGNvZGVjLnB5IGFuZCB0aHVzIGFsc28gdGVzdHMgdGhlCitlbmNvZGluZ3MgcGFja2FnZSBsb29rdXAgc2NoZW1lLgorCitXcml0dGVuIGJ5IE1hcmMtQW5kcmUgTGVtYnVyZyAobWFsQGxlbWJ1cmcuY29tKS4KKworKGMpIENvcHlyaWdodCAyMDAwIEd1aWRvIHZhbiBSb3NzdW0uCisKKyIiIiMiCisKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydCwgdW5pdHRlc3QKKworaW1wb3J0IGNvZGVjcworCisjIFJlZ2lzdGVyIGEgc2VhcmNoIGZ1bmN0aW9uIHdoaWNoIGtub3dzIGFib3V0IG91ciBjb2RlYworZGVmIGNvZGVjX3NlYXJjaF9mdW5jdGlvbihlbmNvZGluZyk6CisgICAgaWYgZW5jb2RpbmcgPT0gJ3Rlc3Rjb2RlYyc6CisgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdGNvZGVjCisgICAgICAgIHJldHVybiB0dXBsZSh0ZXN0Y29kZWMuZ2V0cmVnZW50cnkoKSkKKyAgICByZXR1cm4gTm9uZQorCitjb2RlY3MucmVnaXN0ZXIoY29kZWNfc2VhcmNoX2Z1bmN0aW9uKQorCisjIHRlc3QgY29kZWMncyBuYW1lIChzZWUgdGVzdC90ZXN0Y29kZWMucHkpCitjb2RlY25hbWUgPSAndGVzdGNvZGVjJworCitjbGFzcyBDaGFybWFwQ29kZWNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcngoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnYWJjJywgY29kZWNuYW1lKSwgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ3hkZWYnLCBjb2RlY25hbWUpLCB1J2FiY2RlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnZGVmeCcsIGNvZGVjbmFtZSksIHUnZGVmYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdkeGYnLCBjb2RlY25hbWUpLCB1J2RhYmNmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdkeGZ4JywgY29kZWNuYW1lKSwgdSdkYWJjZmFiYycpCisKKyAgICBkZWYgdGVzdF9lbmNvZGV4KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnYWJjJy5lbmNvZGUoY29kZWNuYW1lKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd4ZGVmJy5lbmNvZGUoY29kZWNuYW1lKSwgJ2FiY2RlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdkZWZ4Jy5lbmNvZGUoY29kZWNuYW1lKSwgJ2RlZmFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdkeGYnLmVuY29kZShjb2RlY25hbWUpLCAnZGFiY2YnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnZHhmeCcuZW5jb2RlKGNvZGVjbmFtZSksICdkYWJjZmFiYycpCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcnkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgneWRlZicsIGNvZGVjbmFtZSksIHUnZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdkZWZ5JywgY29kZWNuYW1lKSwgdSdkZWYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ2R5ZicsIGNvZGVjbmFtZSksIHUnZGYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ2R5ZnknLCBjb2RlY25hbWUpLCB1J2RmJykKKworICAgIGRlZiB0ZXN0X21hcHRvdW5kZWZpbmVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHVuaWNvZGUsICdhYmNcMDAxJywgY29kZWNuYW1lKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENoYXJtYXBDb2RlY1Rlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NsLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY2wucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTAxMDJlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NsLnB5CkBAIC0wLDAgKzEsODIgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyIiIldoaW1weSB0ZXN0IHNjcmlwdCBmb3IgdGhlIGNsIG1vZHVsZQorICAgUm9nZXIgRS4gTWFzc2UKKyIiIgorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgaW1wb3J0X21vZHVsZQorCitjbCA9IGltcG9ydF9tb2R1bGUoJ2NsJykKKworY2xhdHRycyA9IFsnQURERURfQUxHT1JJVEhNX0VSUk9SJywgJ0FMQVcnLCAnQUxHT1JJVEhNX0lEJywKKydBTEdPUklUSE1fVkVSU0lPTicsICdBVURJTycsICdBV0FSRV9FUlJPUicsICdBV0FSRV9NUEVHX0FVRElPJywKKydBV0FSRV9NVUxUSVJBVEUnLCAnQVdDTVBfQ09OU1RfUVVBTCcsICdBV0NNUF9GSVhFRF9SQVRFJywKKydBV0NNUF9JTkRFUEVOREVOVCcsICdBV0NNUF9KT0lOVF9TVEVSRU8nLCAnQVdDTVBfTE9TU0xFU1MnLAorJ0FXQ01QX01QRUdfTEFZRVJfSScsICdBV0NNUF9NUEVHX0xBWUVSX0lJJywgJ0FXQ01QX1NURVJFTycsCisnQWxnb3JpdGhtJywgJ0FsZ29yaXRobU51bWJlcicsICdBbGdvcml0aG1UeXBlJywgJ0F1ZGlvRm9ybWF0TmFtZScsCisnQkFEX0FMR09SSVRITV9OQU1FJywgJ0JBRF9BTEdPUklUSE1fVFlQRScsICdCQURfQkxPQ0tfU0laRScsCisnQkFEX0JPQVJEJywgJ0JBRF9CVUZGRVJJTkcnLCAnQkFEX0JVRkZFUkxFTkdUSF9ORUcnLAorJ0JBRF9CVUZGRVJMRU5HVEhfT0REJywgJ0JBRF9CVUZGRVJfRVhJU1RTJywgJ0JBRF9CVUZGRVJfSEFORExFJywKKydCQURfQlVGRkVSX1BPSU5URVInLCAnQkFEX0JVRkZFUl9RVUVSWV9TSVpFJywgJ0JBRF9CVUZGRVJfU0laRScsCisnQkFEX0JVRkZFUl9TSVpFX1BPSU5URVInLCAnQkFEX0JVRkZFUl9UWVBFJywKKydCQURfQ09NUFJFU1NJT05fU0NIRU1FJywgJ0JBRF9DT01QUkVTU09SX0hBTkRMRScsCisnQkFEX0NPTVBSRVNTT1JfSEFORExFX1BPSU5URVInLCAnQkFEX0ZSQU1FX1NJWkUnLAorJ0JBRF9GVU5DVElPTkFMSVRZJywgJ0JBRF9GVU5DVElPTl9QT0lOVEVSJywgJ0JBRF9IRUFERVJfU0laRScsCisnQkFEX0lOSVRJQUxfVkFMVUUnLCAnQkFEX0lOVEVSTkFMX0ZPUk1BVCcsICdCQURfTElDRU5TRScsCisnQkFEX01JTl9HVF9NQVgnLCAnQkFEX05PX0JVRkZFUlNQQUNFJywgJ0JBRF9OVU1CRVJfT0ZfQkxPQ0tTJywKKydCQURfUEFSQU0nLCAnQkFEX1BBUkFNX0lEX1BPSU5URVInLCAnQkFEX1BBUkFNX1RZUEUnLCAnQkFEX1BPSU5URVInLAorJ0JBRF9QVkJVRkZFUicsICdCQURfU0NIRU1FX1BPSU5URVInLCAnQkFEX1NUUkVBTV9IRUFERVInLAorJ0JBRF9TVFJJTkdfUE9JTlRFUicsICdCQURfVEVYVF9TVFJJTkdfUFRSJywgJ0JFU1RfRklUJywKKydCSURJUkVDVElPTkFMJywgJ0JJVFJBVEVfUE9MSUNZJywgJ0JJVFJBVEVfVEFSR0VUJywKKydCSVRTX1BFUl9DT01QT05FTlQnLCAnQkxFTkRJTkcnLCAnQkxPQ0tfU0laRScsICdCT1RUT01fVVAnLAorJ0JVRkZFUl9OT1RfQ1JFQVRFRCcsICdCVUZfREFUQScsICdCVUZfRlJBTUUnLCAnQnl0ZXNQZXJQaXhlbCcsCisnQnl0ZXNQZXJTYW1wbGUnLCAnQ0hBTk5FTF9QT0xJQ1knLCAnQ0hST01BX1RIUkVTSE9MRCcsICdDT0RFQycsCisnQ09NUE9ORU5UUycsICdDT01QUkVTU0VEX0JVRkZFUl9TSVpFJywgJ0NPTVBSRVNTSU9OX1JBVElPJywKKydDT01QUkVTU09SJywgJ0NPTlRJTlVPVVNfQkxPQ0snLCAnQ09OVElOVU9VU19OT05CTE9DSycsCisnQ29tcHJlc3NJbWFnZScsICdEQVRBJywgJ0RFQ09NUFJFU1NPUicsICdEZWNvbXByZXNzSW1hZ2UnLAorJ0VER0VfVEhSRVNIT0xEJywgJ0VOQUJMRV9JTUFHRUlORk8nLCAnRU5EX09GX1NFUVVFTkNFJywgJ0VOVU1fVkFMVUUnLAorJ0VYQUNUX0NPTVBSRVNTSU9OX1JBVElPJywgJ0VYVEVSTkFMX0RFVklDRScsICdGTE9BVElOR19FTlVNX1ZBTFVFJywKKydGTE9BVElOR19SQU5HRV9WQUxVRScsICdGUkFNRScsICdGUkFNRV9CVUZGRVJfU0laRScsCisnRlJBTUVfQlVGRkVSX1NJWkVfWkVSTycsICdGUkFNRV9SQVRFJywgJ0ZSQU1FX1RZUEUnLCAnRzcxMV9BTEFXJywKKydHNzExX1VMQVcnLCAnR1JBWVNDQUxFJywgJ0dldEFsZ29yaXRobU5hbWUnLCAnSERDQycsCisnSERDQ19TQU1QTEVTX1BFUl9USUxFJywgJ0hEQ0NfVElMRV9USFJFU0hPTEQnLCAnSEVBREVSX1NUQVJUX0NPREUnLAorJ0lNQUdFX0hFSUdIVCcsICdJTUFHRV9XSURUSCcsICdJTlRFUk5BTF9GT1JNQVQnLAorJ0lOVEVSTkFMX0lNQUdFX0hFSUdIVCcsICdJTlRFUk5BTF9JTUFHRV9XSURUSCcsICdJTlRSQScsICdKUEVHJywKKydKUEVHX0VSUk9SJywgJ0pQRUdfTlVNX1BBUkFNUycsICdKUEVHX1FVQUxJVFlfRkFDVE9SJywKKydKUEVHX1FVQU5USVpBVElPTl9UQUJMRVMnLCAnSlBFR19TT0ZUV0FSRScsICdKUEVHX1NUUkVBTV9IRUFERVJTJywKKydLRVlGUkFNRScsICdMQVNUX0ZSQU1FX0lOREVYJywgJ0xBWUVSJywgJ0xVTUFfVEhSRVNIT0xEJywKKydNQVhfTlVNQkVSX09GX0FVRElPX0FMR09SSVRITVMnLCAnTUFYX05VTUJFUl9PRl9PUklHSU5BTF9GT1JNQVRTJywKKydNQVhfTlVNQkVSX09GX1BBUkFNUycsICdNQVhfTlVNQkVSX09GX1ZJREVPX0FMR09SSVRITVMnLCAnTU9OTycsCisnTVBFR19WSURFTycsICdNVkMxJywgJ01WQzInLCAnTVZDMl9CTEVORElORycsICdNVkMyX0JMRU5ESU5HX09GRicsCisnTVZDMl9CTEVORElOR19PTicsICdNVkMyX0NIUk9NQV9USFJFU0hPTEQnLCAnTVZDMl9FREdFX1RIUkVTSE9MRCcsCisnTVZDMl9FUlJPUicsICdNVkMyX0xVTUFfVEhSRVNIT0xEJywgJ05FWFRfTk9UX0FWQUlMQUJMRScsCisnTk9JU0VfTUFSR0lOJywgJ05PTkUnLCAnTlVNQkVSX09GX0ZSQU1FUycsICdOVU1CRVJfT0ZfUEFSQU1TJywKKydPUklFTlRBVElPTicsICdPUklHSU5BTF9GT1JNQVQnLCAnT3BlbkNvbXByZXNzb3InLAorJ09wZW5EZWNvbXByZXNzb3InLCAnUEFSQU1fT1VUX09GX1JBTkdFJywgJ1BSRURJQ1RFRCcsICdQUkVST0xMJywKKydQYXJhbUlEJywgJ1BhcmFtTnVtYmVyJywgJ1BhcmFtVHlwZScsICdRVUFMSVRZX0ZBQ1RPUicsCisnUVVBTElUWV9MRVZFTCcsICdRdWVyeUFsZ29yaXRobXMnLCAnUXVlcnlNYXhIZWFkZXJTaXplJywKKydRdWVyeVNjaGVtZScsICdRdWVyeVNjaGVtZUZyb21OYW1lJywgJ1JBTkdFX1ZBTFVFJywgJ1JHQicsICdSR0IzMzInLAorJ1JHQjgnLCAnUkdCQScsICdSR0JYJywgJ1JMRScsICdSTEUyNCcsICdSVFInLCAnUlRSMScsCisnUlRSX1FVQUxJVFlfTEVWRUwnLCAnU0FNUExFU19QRVJfVElMRScsICdTQ0hFTUVfQlVTWScsCisnU0NIRU1FX05PVF9BVkFJTEFCTEUnLCAnU1BFRUQnLCAnU1RFUkVPX0lOVEVSTEVBVkVEJywKKydTVFJFQU1fSEVBREVSUycsICdTZXREZWZhdWx0JywgJ1NldE1heCcsICdTZXRNaW4nLCAnVElMRV9USFJFU0hPTEQnLAorJ1RPUF9ET1dOJywgJ1VMQVcnLCAnVU5DT01QUkVTU0VEJywgJ1VOQ09NUFJFU1NFRF9BVURJTycsCisnVU5DT01QUkVTU0VEX1ZJREVPJywgJ1VOS05PV05fU0NIRU1FJywgJ1ZJREVPJywgJ1ZpZGVvRm9ybWF0TmFtZScsCisnWScsICdZQ2JDcicsICdZQ2JDcjQyMicsICdZQ2JDcjQyMkRDJywgJ1lDYkNyNDIySEMnLCAnWVVWJywgJ1lVVjQyMicsCisnWVVWNDIyREMnLCAnWVVWNDIySEMnLCAnX19kb2NfXycsICdfX25hbWVfXycsICdjdnRfdHlwZScsICdlcnJvciddCisKKworIyBUaGlzIGlzIGEgdmVyeSBpbm9idHJ1c2l2ZSB0ZXN0IGZvciB0aGUgZXhpc3RlbmNlIG9mIHRoZSBjbAorIyBtb2R1bGUgYW5kIGFsbCBpdHMgYXR0cmlidXRlcy4KKworZGVmIHRlc3RfbWFpbigpOgorICAgICMgdG91Y2ggYWxsIHRoZSBhdHRyaWJ1dGVzIG9mIGFsIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnVG91Y2hpbmcgY2wgbW9kdWxlIGF0dHJpYnV0ZXMuLi4nCisgICAgZm9yIGF0dHIgaW4gY2xhdHRyczoKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICd0b3VjaGluZzogJywgYXR0cgorICAgICAgICBnZXRhdHRyKGNsLCBhdHRyKQorCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY2xhc3MucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jbGFzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWNkZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY2xhc3MucHkKQEAgLTAsMCArMSw2NDYgQEAKKyJUZXN0IHRoZSBmdW5jdGlvbmFsaXR5IG9mIFB5dGhvbiBjbGFzc2VzIGltcGxlbWVudGluZyBvcGVyYXRvcnMuIgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKwordGVzdG1ldGhzID0gWworCisjIEJpbmFyeSBvcGVyYXRpb25zCisgICAgImFkZCIsCisgICAgInJhZGQiLAorICAgICJzdWIiLAorICAgICJyc3ViIiwKKyAgICAibXVsIiwKKyAgICAicm11bCIsCisgICAgImRpdiIsCisgICAgInJkaXYiLAorICAgICJtb2QiLAorICAgICJybW9kIiwKKyAgICAiZGl2bW9kIiwKKyAgICAicmRpdm1vZCIsCisgICAgInBvdyIsCisgICAgInJwb3ciLAorICAgICJyc2hpZnQiLAorICAgICJycnNoaWZ0IiwKKyAgICAibHNoaWZ0IiwKKyAgICAicmxzaGlmdCIsCisgICAgImFuZCIsCisgICAgInJhbmQiLAorICAgICJvciIsCisgICAgInJvciIsCisgICAgInhvciIsCisgICAgInJ4b3IiLAorCisjIExpc3QvZGljdCBvcGVyYXRpb25zCisgICAgImNvbnRhaW5zIiwKKyAgICAiZ2V0aXRlbSIsCisgICAgImdldHNsaWNlIiwKKyAgICAic2V0aXRlbSIsCisgICAgInNldHNsaWNlIiwKKyAgICAiZGVsaXRlbSIsCisgICAgImRlbHNsaWNlIiwKKworIyBVbmFyeSBvcGVyYXRpb25zCisgICAgIm5lZyIsCisgICAgInBvcyIsCisgICAgImFicyIsCisKKyMgZ2VuZXJpYyBvcGVyYXRpb25zCisgICAgImluaXQiLAorICAgIF0KKworIyBUaGVzZSBuZWVkIHRvIHJldHVybiBzb21ldGhpbmcgb3RoZXIgdGhhbiBOb25lCisjICAgICJjb2VyY2UiLAorIyAgICAiaGFzaCIsCisjICAgICJzdHIiLAorIyAgICAicmVwciIsCisjICAgICJpbnQiLAorIyAgICAibG9uZyIsCisjICAgICJmbG9hdCIsCisjICAgICJvY3QiLAorIyAgICAiaGV4IiwKKworIyBUaGVzZSBhcmUgc2VwYXJhdGUgYmVjYXVzZSB0aGV5IGNhbiBpbmZsdWVuY2UgdGhlIHRlc3Qgb2Ygb3RoZXIgbWV0aG9kcy4KKyMgICAgImdldGF0dHIiLAorIyAgICAic2V0YXR0ciIsCisjICAgICJkZWxhdHRyIiwKKworY2FsbExzdCA9IFtdCitkZWYgdHJhY2tDYWxsKGYpOgorICAgIGRlZiB0cmFjaygqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBjYWxsTHN0LmFwcGVuZCgoZi5fX25hbWVfXywgYXJncykpCisgICAgICAgIHJldHVybiBmKCphcmdzLCAqKmt3YXJncykKKyAgICByZXR1cm4gdHJhY2sKKworY2xhc3MgQWxsVGVzdHM6CisgICAgdHJhY2tDYWxsID0gdHJhY2tDYWxsCisKKyAgICBAdHJhY2tDYWxsCisgICAgZGVmIF9fY29lcmNlX18oc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gKHNlbGYsKSArIGFyZ3MKKworICAgIEB0cmFja0NhbGwKKyAgICBkZWYgX19oYXNoX18oc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gaGFzaChpZChzZWxmKSkKKworICAgIEB0cmFja0NhbGwKKyAgICBkZWYgX19zdHJfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiAiQWxsVGVzdHMiCisKKyAgICBAdHJhY2tDYWxsCisgICAgZGVmIF9fcmVwcl9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuICJBbGxUZXN0cyIKKworICAgIEB0cmFja0NhbGwKKyAgICBkZWYgX19pbnRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiAxCisKKyAgICBAdHJhY2tDYWxsCisgICAgZGVmIF9fZmxvYXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiAxLjAKKworICAgIEB0cmFja0NhbGwKKyAgICBkZWYgX19sb25nX18oc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gMUwKKworICAgIEB0cmFja0NhbGwKKyAgICBkZWYgX19vY3RfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiAnMDEnCisKKyAgICBAdHJhY2tDYWxsCisgICAgZGVmIF9faGV4X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gJzB4MScKKworICAgIEB0cmFja0NhbGwKKyAgICBkZWYgX19jbXBfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiAwCisKKyMgU3ludGhlc2l6ZSBhbGwgdGhlIG90aGVyIEFsbFRlc3RzIG1ldGhvZHMgZnJvbSB0aGUgbmFtZXMgaW4gdGVzdG1ldGhzLgorCittZXRob2RfdGVtcGxhdGUgPSAiIiJcCitAdHJhY2tDYWxsCitkZWYgX18lKG1ldGhvZClzX18oc2VsZiwgKmFyZ3MpOgorICAgIHBhc3MKKyIiIgorCitmb3IgbWV0aG9kIGluIHRlc3RtZXRoczoKKyAgICBleGVjIG1ldGhvZF90ZW1wbGF0ZSAlIGxvY2FscygpIGluIEFsbFRlc3RzLl9fZGljdF9fCisKK2RlbCBtZXRob2QsIG1ldGhvZF90ZW1wbGF0ZQorCitjbGFzcyBDbGFzc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorCisgICAgZGVmIGFzc2VydENhbGxTdGFjayhzZWxmLCBleHBlY3RlZF9jYWxscyk6CisgICAgICAgIGFjdHVhbENhbGxMaXN0ID0gY2FsbExzdFs6XSAgIyBuZWVkIHRvIGNvcHkgYmVjYXVzZSB0aGUgY29tcGFyaXNvbiBiZWxvdyB3aWxsIGFkZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkaXRpb25hbCBjYWxscyB0byBjYWxsTHN0CisgICAgICAgIGlmIGV4cGVjdGVkX2NhbGxzICE9IGFjdHVhbENhbGxMaXN0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBjYWxsIGxpc3Q6XG4gICVzXG5kb2VzIG5vdCBtYXRjaCBhY3R1YWwgY2FsbCBsaXN0XG4gICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkX2NhbGxzLCBhY3R1YWxDYWxsTGlzdCkpCisKKyAgICBkZWYgdGVzdEluaXQoc2VsZik6CisgICAgICAgIGZvbyA9IEFsbFRlc3RzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19pbml0X18iLCAoZm9vLCkpXSkKKworICAgIGRlZiB0ZXN0QmluYXJ5T3BzKHNlbGYpOgorICAgICAgICB0ZXN0bWUgPSBBbGxUZXN0cygpCisgICAgICAgICMgQmluYXJ5IG9wZXJhdGlvbnMKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lICsgMQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fYWRkX18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAxICsgdGVzdG1lCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX19yYWRkX18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWUgLSAxCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX19zdWJfXyIsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIDEgLSB0ZXN0bWUKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCJfX3JzdWJfXyIsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZSAqIDEKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCJfX211bF9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgMSAqIHRlc3RtZQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fcm11bF9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBpZiAxLzIgPT0gMDoKKyAgICAgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAgICAgdGVzdG1lIC8gMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCJfX2Rpdl9fIiwgKHRlc3RtZSwgMSkpXSkKKworCisgICAgICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgICAgIDEgLyB0ZXN0bWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX19yZGl2X18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWUgJSAxCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX19tb2RfXyIsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIDEgJSB0ZXN0bWUKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCJfX3Jtb2RfXyIsICh0ZXN0bWUsIDEpKV0pCisKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgZGl2bW9kKHRlc3RtZSwxKQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fZGl2bW9kX18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICBkaXZtb2QoMSwgdGVzdG1lKQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fcmRpdm1vZF9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lICoqIDEKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCJfX3Bvd19fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgMSAqKiB0ZXN0bWUKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCJfX3Jwb3dfXyIsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZSA+PiAxCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX19yc2hpZnRfXyIsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIDEgPj4gdGVzdG1lCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX19ycnNoaWZ0X18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWUgPDwgMQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fbHNoaWZ0X18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAxIDw8IHRlc3RtZQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fcmxzaGlmdF9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lICYgMQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fYW5kX18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAxICYgdGVzdG1lCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX19yYW5kX18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWUgfCAxCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX19vcl9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgMSB8IHRlc3RtZQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoIl9fcm9yX18iLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWUgXiAxCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgiX194b3JfXyIsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIDEgXiB0ZXN0bWUKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCJfX3J4b3JfXyIsICh0ZXN0bWUsIDEpKV0pCisKKyAgICBkZWYgdGVzdExpc3RBbmREaWN0T3BzKHNlbGYpOgorICAgICAgICB0ZXN0bWUgPSBBbGxUZXN0cygpCisKKyAgICAgICAgIyBMaXN0L2RpY3Qgb3BlcmF0aW9ucworCisgICAgICAgIGNsYXNzIEVtcHR5OiBwYXNzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgMSBpbiBFbXB0eSgpCisgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZhaWxlZCwgc2hvdWxkIGhhdmUgcmFpc2VkIFR5cGVFcnJvcicpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIDEgaW4gdGVzdG1lCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fY29udGFpbnNfXycsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZVsxXQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2dldGl0ZW1fXycsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZVsxXSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19zZXRpdGVtX18nLCAodGVzdG1lLCAxLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICBkZWwgdGVzdG1lWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fZGVsaXRlbV9fJywgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lWzo0Ml0KKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19nZXRzbGljZV9fJywgKHRlc3RtZSwgMCwgNDIpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZVs6NDJdID0gIlRoZSBBbnN3ZXIiCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fc2V0c2xpY2VfXycsICh0ZXN0bWUsIDAsIDQyLCAiVGhlIEFuc3dlciIpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIGRlbCB0ZXN0bWVbOjQyXQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2RlbHNsaWNlX18nLCAodGVzdG1lLCAwLCA0MikpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lWzI6MTAyNDoxMF0KKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19nZXRpdGVtX18nLCAodGVzdG1lLCBzbGljZSgyLCAxMDI0LCAxMCkpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZVsyOjEwMjQ6MTBdID0gIkEgbG90IgorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX3NldGl0ZW1fXycsICh0ZXN0bWUsIHNsaWNlKDIsIDEwMjQsIDEwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkEgbG90IikpXSkKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIGRlbCB0ZXN0bWVbMjoxMDI0OjEwXQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2RlbGl0ZW1fXycsICh0ZXN0bWUsIHNsaWNlKDIsIDEwMjQsIDEwKSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lWzo0MiwgLi4uLCA6MjQ6LCAyNCwgMTAwXQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2dldGl0ZW1fXycsICh0ZXN0bWUsIChzbGljZShOb25lLCA0MiwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsbGlwc2lzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZShOb25lLCAyNCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0LCAxMDApKSldKQorICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lWzo0MiwgLi4uLCA6MjQ6LCAyNCwgMTAwXSA9ICJTdHJhbmdlIgorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX3NldGl0ZW1fXycsICh0ZXN0bWUsIChzbGljZShOb25lLCA0MiwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsbGlwc2lzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZShOb25lLCAyNCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0LCAxMDApLCAiU3RyYW5nZSIpKV0pCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICBkZWwgdGVzdG1lWzo0MiwgLi4uLCA6MjQ6LCAyNCwgMTAwXQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2RlbGl0ZW1fXycsICh0ZXN0bWUsIChzbGljZShOb25lLCA0MiwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsbGlwc2lzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZShOb25lLCAyNCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0LCAxMDApKSldKQorCisgICAgICAgICMgTm93IHJlbW92ZSB0aGUgc2xpY2UgaG9va3MgdG8gc2VlIGlmIGNvbnZlcnRpbmcgbm9ybWFsIHNsaWNlcyB0bworICAgICAgICAjICBzbGljZSBvYmplY3Qgd29ya3MuCisKKyAgICAgICAgZ2V0c2xpY2UgPSBBbGxUZXN0cy5fX2dldHNsaWNlX18KKyAgICAgICAgZGVsIEFsbFRlc3RzLl9fZ2V0c2xpY2VfXworICAgICAgICBzZXRzbGljZSA9IEFsbFRlc3RzLl9fc2V0c2xpY2VfXworICAgICAgICBkZWwgQWxsVGVzdHMuX19zZXRzbGljZV9fCisgICAgICAgIGRlbHNsaWNlID0gQWxsVGVzdHMuX19kZWxzbGljZV9fCisgICAgICAgIGRlbCBBbGxUZXN0cy5fX2RlbHNsaWNlX18KKworICAgICAgICAjIFhYWCB3aGVuIHVzaW5nIG5ldy1zdHlsZSBjbGFzc2VzIHRoZSBzbGljZSB0ZXN0bWVbOjQyXSBwcm9kdWNlcworICAgICAgICAjICBzbGljZShOb25lLCA0MiwgTm9uZSkgaW5zdGVhZCBvZiBzbGljZSgwLCA0MiwgTm9uZSkuIHB5M2sgd2lsbCBoYXZlCisgICAgICAgICMgIHRvIGNoYW5nZSB0aGlzIHRlc3QuCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWVbOjQyXQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2dldGl0ZW1fXycsICh0ZXN0bWUsIHNsaWNlKDAsIDQyLCBOb25lKSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lWzo0Ml0gPSAiVGhlIEFuc3dlciIKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19zZXRpdGVtX18nLCAodGVzdG1lLCBzbGljZSgwLCA0MiwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBBbnN3ZXIiKSldKQorICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgZGVsIHRlc3RtZVs6NDJdCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fZGVsaXRlbV9fJywgKHRlc3RtZSwgc2xpY2UoMCwgNDIsIE5vbmUpKSldKQorCisgICAgICAgICMgUmVzdG9yZSB0aGUgc2xpY2UgbWV0aG9kcywgb3IgdGhlIHRlc3RzIHdpbGwgZmFpbCB3aXRoIHJlZ3J0ZXN0IC1SLgorICAgICAgICBBbGxUZXN0cy5fX2dldHNsaWNlX18gPSBnZXRzbGljZQorICAgICAgICBBbGxUZXN0cy5fX3NldHNsaWNlX18gPSBzZXRzbGljZQorICAgICAgICBBbGxUZXN0cy5fX2RlbHNsaWNlX18gPSBkZWxzbGljZQorCisKKyAgICBAdGVzdF9zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0RGVsSXRlbShzZWxmKToKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIG9rID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHNlbGYub2sgPSBUcnVlCisgICAgICAgIGEgPSBBKCkKKyAgICAgICAgIyBTdWJ0bGU6IHdlIG5lZWQgdG8gY2FsbCBQeVNlcXVlbmNlX1NldEl0ZW0sIG5vdCBQeU1hcHBpbmdfU2V0SXRlbS4KKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IHNlcXVlbmNlX2RlbGl0ZW0KKyAgICAgICAgc2VxdWVuY2VfZGVsaXRlbShhLCAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5vaykKKworCisgICAgZGVmIHRlc3RVbmFyeU9wcyhzZWxmKToKKyAgICAgICAgdGVzdG1lID0gQWxsVGVzdHMoKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAtdGVzdG1lCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fbmVnX18nLCAodGVzdG1lLCkpXSkKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgICt0ZXN0bWUKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19wb3NfXycsICh0ZXN0bWUsKSldKQorICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgYWJzKHRlc3RtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19hYnNfXycsICh0ZXN0bWUsKSldKQorICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgaW50KHRlc3RtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19pbnRfXycsICh0ZXN0bWUsKSldKQorICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgbG9uZyh0ZXN0bWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fbG9uZ19fJywgKHRlc3RtZSwpKV0pCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICBmbG9hdCh0ZXN0bWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fZmxvYXRfXycsICh0ZXN0bWUsKSldKQorICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgb2N0KHRlc3RtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19vY3RfXycsICh0ZXN0bWUsKSldKQorICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgaGV4KHRlc3RtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19oZXhfXycsICh0ZXN0bWUsKSldKQorCisKKyAgICBkZWYgdGVzdE1pc2Moc2VsZik6CisgICAgICAgIHRlc3RtZSA9IEFsbFRlc3RzKCkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgaGFzaCh0ZXN0bWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19faGFzaF9fJywgKHRlc3RtZSwpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHJlcHIodGVzdG1lKQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX3JlcHJfXycsICh0ZXN0bWUsKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICBzdHIodGVzdG1lKQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX3N0cl9fJywgKHRlc3RtZSwpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZSA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgnX19jbXBfXycsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZSA8IDEKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCdfX2NtcF9fJywgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lID4gMQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoJ19fY21wX18nLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICBldmFsKCd0ZXN0bWUgPD4gMScpICAjIFhYWCBraWxsIHRoaXMgaW4gcHkzaworICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoJ19fY21wX18nLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWUgIT0gMQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoJ19fY21wX18nLCAodGVzdG1lLCAxKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAxID09IHRlc3RtZQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoJ19fY21wX18nLCAoMSwgdGVzdG1lKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAxIDwgdGVzdG1lCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fY29lcmNlX18iLCAodGVzdG1lLCAxKSksICgnX19jbXBfXycsICgxLCB0ZXN0bWUpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIDEgPiB0ZXN0bWUKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19jb2VyY2VfXyIsICh0ZXN0bWUsIDEpKSwgKCdfX2NtcF9fJywgKDEsIHRlc3RtZSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgZXZhbCgnMSA8PiB0ZXN0bWUnKQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoJ19fY21wX18nLCAoMSwgdGVzdG1lKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAxICE9IHRlc3RtZQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX2NvZXJjZV9fIiwgKHRlc3RtZSwgMSkpLCAoJ19fY21wX18nLCAoMSwgdGVzdG1lKSldKQorCisKKyAgICBkZWYgdGVzdEdldFNldEFuZERlbChzZWxmKToKKyAgICAgICAgIyBJbnRlcmZlcmluZyB0ZXN0cworICAgICAgICBjbGFzcyBFeHRyYVRlc3RzKEFsbFRlc3RzKToKKyAgICAgICAgICAgIEB0cmFja0NhbGwKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJTb21lVmFsIgorCisgICAgICAgICAgICBAdHJhY2tDYWxsCisgICAgICAgICAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgQHRyYWNrQ2FsbAorICAgICAgICAgICAgZGVmIF9fZGVsYXR0cl9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdGVzdG1lID0gRXh0cmFUZXN0cygpCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZS5zcGFtCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fZ2V0YXR0cl9fJywgKHRlc3RtZSwgInNwYW0iKSldKQorCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWUuZWdncyA9ICJzcGFtLCBzcGFtLCBzcGFtIGFuZCBoYW0iCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoJ19fc2V0YXR0cl9fJywgKHRlc3RtZSwgImVnZ3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbSwgc3BhbSwgc3BhbSBhbmQgaGFtIikpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgZGVsIHRlc3RtZS5jYXJkaW5hbAorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2RlbGF0dHJfXycsICh0ZXN0bWUsICJjYXJkaW5hbCIpKV0pCisKKyAgICBkZWYgdGVzdERlbChzZWxmKToKKyAgICAgICAgeCA9IFtdCisKKyAgICAgICAgY2xhc3MgRGVsVGVzdDoKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHguYXBwZW5kKCJjcmFiIHBlb3BsZSwgY3JhYiBwZW9wbGUiKQorICAgICAgICB0ZXN0bWUgPSBEZWxUZXN0KCkKKyAgICAgICAgZGVsIHRlc3RtZQorICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyJjcmFiIHBlb3BsZSwgY3JhYiBwZW9wbGUiXSwgeCkKKworICAgIGRlZiB0ZXN0QmFkVHlwZVJldHVybmVkKHNlbGYpOgorICAgICAgICAjIHJldHVybiB2YWx1ZXMgb2Ygc29tZSBtZXRob2QgYXJlIHR5cGUtY2hlY2tlZAorICAgICAgICBjbGFzcyBCYWRUeXBlQ2xhc3M6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgX19mbG9hdF9fID0gX19pbnRfXworICAgICAgICAgICAgX19sb25nX18gPSBfX2ludF9fCisgICAgICAgICAgICBfX3N0cl9fID0gX19pbnRfXworICAgICAgICAgICAgX19yZXByX18gPSBfX2ludF9fCisgICAgICAgICAgICBfX29jdF9fID0gX19pbnRfXworICAgICAgICAgICAgX19oZXhfXyA9IF9faW50X18KKworICAgICAgICBmb3IgZiBpbiBbaW50LCBmbG9hdCwgbG9uZywgc3RyLCByZXByLCBvY3QsIGhleF06CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIEJhZFR5cGVDbGFzcygpKQorCisgICAgZGVmIHRlc3RNaXhJbnRzQW5kTG9uZ3Moc2VsZik6CisgICAgICAgICMgbWl4aW5nIHVwIGludHMgYW5kIGxvbmdzIGlzIG9rYXkKKyAgICAgICAgY2xhc3MgSW50TG9uZ01peENsYXNzOgorICAgICAgICAgICAgQHRyYWNrQ2FsbAorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyTAorCisgICAgICAgICAgICBAdHJhY2tDYWxsCisgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDY0CisKKyAgICAgICAgbWl4SW50QW5kTG9uZyA9IEludExvbmdNaXhDbGFzcygpCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIGFzX2ludCA9IGludChtaXhJbnRBbmRMb25nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYXNfaW50KSwgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc19pbnQsIDQyTCkKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygnX19pbnRfXycsIChtaXhJbnRBbmRMb25nLCkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgYXNfbG9uZyA9IGxvbmcobWl4SW50QW5kTG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGFzX2xvbmcpLCBsb25nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzX2xvbmcsIDY0KQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCdfX2xvbmdfXycsIChtaXhJbnRBbmRMb25nLCkpXSkKKworICAgIGRlZiB0ZXN0SGFzaFN0dWZmKHNlbGYpOgorICAgICAgICAjIFRlc3QgY29ycmVjdCBlcnJvcnMgZnJvbSBoYXNoKCkgb24gb2JqZWN0cyB3aXRoIGNvbXBhcmlzb25zIGJ1dAorICAgICAgICAjICBubyBfX2hhc2hfXworCisgICAgICAgIGNsYXNzIEMwOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGhhc2goQzAoKSkgIyBUaGlzIHNob3VsZCB3b3JrOyB0aGUgbmV4dCB0d28gc2hvdWxkIHJhaXNlIFR5cGVFcnJvcgorCisgICAgICAgIGNsYXNzIEMxOgorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOiByZXR1cm4gMAorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgQzEoKSkKKworICAgICAgICBjbGFzcyBDMjoKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOiByZXR1cm4gMQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgQzIoKSkKKworCisgICAgZGVmIHRlc3RTRkJ1ZzUzMjY0NihzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBTRiBidWcgNTMyNjQ2CisKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgQS5fX2NhbGxfXyA9IEEoKQorICAgICAgICBhID0gQSgpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYSgpICMgVGhpcyBzaG91bGQgbm90IHNlZ2ZhdWx0CisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBSdW50aW1lRXJyb3IiKQorCisgICAgZGVmIHRlc3RGb3JFeGNlcHRpb25zUmFpc2VkSW5JbnN0YW5jZUdldGF0dHIyKHNlbGYpOgorICAgICAgICAjIFRlc3RzIGZvciBleGNlcHRpb25zIHJhaXNlZCBpbiBpbnN0YW5jZV9nZXRhdHRyMigpLgorCisgICAgICAgIGRlZiBib29oKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImJvb2giKQorCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBhID0gcHJvcGVydHkoYm9vaCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgQSgpLmEgIyBSYWlzZWQgQXR0cmlidXRlRXJyb3I6IEEgaW5zdGFuY2UgaGFzIG5vIGF0dHJpYnV0ZSAnYScKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yLCB4OgorICAgICAgICAgICAgaWYgc3RyKHgpICE9ICJib29oIjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImF0dHJpYnV0ZSBlcnJvciBmb3IgQSgpLmEgZ290IG1hc2tlZDogJXMiICUgeCkKKworICAgICAgICBjbGFzcyBFOgorICAgICAgICAgICAgX19lcV9fID0gcHJvcGVydHkoYm9vaCkKKyAgICAgICAgRSgpID09IEUoKSAjIEluIGRlYnVnIG1vZGUsIGNhdXNlZCBhIEMtbGV2ZWwgYXNzZXJ0KCkgdG8gZmFpbAorCisgICAgICAgIGNsYXNzIEk6CisgICAgICAgICAgICBfX2luaXRfXyA9IHByb3BlcnR5KGJvb2gpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgSW4gZGVidWcgbW9kZSwgcHJpbnRlZCBYWFggdW5kZXRlY3RlZCBlcnJvciBhbmQKKyAgICAgICAgICAgICMgIHJhaXNlcyBBdHRyaWJ1dGVFcnJvcgorICAgICAgICAgICAgSSgpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgeDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiYXR0cmlidXRlIGVycm9yIGZvciBJLl9faW5pdF9fIGdvdCBtYXNrZWQiKQorCisgICAgZGVmIHRlc3RIYXNoQ29tcGFyaXNvbk9mTWV0aG9kcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGNvbXBhcmlzb24gYW5kIGhhc2ggb2YgbWV0aG9kcworICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHNlbGYueCA9IHgKKyAgICAgICAgICAgIGRlZiBmKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiBnKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnggPT0gb3RoZXIueAorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLngKKyAgICAgICAgY2xhc3MgQihBKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBhMSA9IEEoMSkKKyAgICAgICAgYTIgPSBBKDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYTEuZiwgYTEuZikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhMS5mLCBhMi5mKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGExLmYsIGExLmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYTEuZiwgQSgxKS5mKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYTEuZiksIGhhc2goYTEuZikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhMS5mKSwgaGFzaChBKDEpLmYpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoQS5mLCBhMS5mKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKEEuZiwgQS5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEIuZiwgQS5mKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goQi5mKSwgaGFzaChBLmYpKQorCisgICAgICAgICMgdGhlIGZvbGxvd2luZyB0cmlnZ2VycyBhIFN5c3RlbUVycm9yIGluIDIuNAorICAgICAgICBhID0gQShoYXNoKEEuZi5pbV9mdW5jKV4oLTEpKQorICAgICAgICBoYXNoKGEuZikKKworICAgIGRlZiB0ZXN0QXR0clNsb3RzKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgYyBpbiBDLCBDKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHR5cGUoYykuX19nZXRhdHRyaWJ1dGVfXywgYywgW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHR5cGUoYykuX19zZXRhdHRyX18sIGMsIFtdLCBbXSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgICAgICAgICAoIi4rX18oZ2V0fHNldHxkZWwpc2xpY2VfXyBoYXMgYmVlbiByZW1vdmVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwKKyAgICAgICAgICAgICgiY2xhc3NpYyBpbnQgZGl2aXNpb24iLCBEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgKCI8PiBub3Qgc3VwcG9ydGVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ2xhc3NUZXN0cykKKworaWYgX19uYW1lX189PSdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NtYXRoLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY21hdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1YzRiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NtYXRoLnB5CkBAIC0wLDAgKzEsNDc0IEBACitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X21hdGggaW1wb3J0IHBhcnNlX3Rlc3RmaWxlLCB0ZXN0X2ZpbGUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGNtYXRoLCBtYXRoCitmcm9tIGNtYXRoIGltcG9ydCBwaGFzZSwgcG9sYXIsIHJlY3QsIHBpCisKK0lORiA9IGZsb2F0KCdpbmYnKQorTkFOID0gZmxvYXQoJ25hbicpCisKK2NvbXBsZXhfemVyb3MgPSBbY29tcGxleCh4LCB5KSBmb3IgeCBpbiBbMC4wLCAtMC4wXSBmb3IgeSBpbiBbMC4wLCAtMC4wXV0KK2NvbXBsZXhfaW5maW5pdGllcyA9IFtjb21wbGV4KHgsIHkpIGZvciB4LCB5IGluIFsKKyAgICAgICAgKElORiwgMC4wKSwgICMgMXN0IHF1YWRyYW50CisgICAgICAgIChJTkYsIDIuMyksCisgICAgICAgIChJTkYsIElORiksCisgICAgICAgICgyLjMsIElORiksCisgICAgICAgICgwLjAsIElORiksCisgICAgICAgICgtMC4wLCBJTkYpLCAjIDJuZCBxdWFkcmFudAorICAgICAgICAoLTIuMywgSU5GKSwKKyAgICAgICAgKC1JTkYsIElORiksCisgICAgICAgICgtSU5GLCAyLjMpLAorICAgICAgICAoLUlORiwgMC4wKSwKKyAgICAgICAgKC1JTkYsIC0wLjApLCAjIDNyZCBxdWFkcmFudAorICAgICAgICAoLUlORiwgLTIuMyksCisgICAgICAgICgtSU5GLCAtSU5GKSwKKyAgICAgICAgKC0yLjMsIC1JTkYpLAorICAgICAgICAoLTAuMCwgLUlORiksCisgICAgICAgICgwLjAsIC1JTkYpLCAjIDR0aCBxdWFkcmFudAorICAgICAgICAoMi4zLCAtSU5GKSwKKyAgICAgICAgKElORiwgLUlORiksCisgICAgICAgIChJTkYsIC0yLjMpLAorICAgICAgICAoSU5GLCAtMC4wKQorICAgICAgICBdXQorY29tcGxleF9uYW5zID0gW2NvbXBsZXgoeCwgeSkgZm9yIHgsIHkgaW4gWworICAgICAgICAoTkFOLCAtSU5GKSwKKyAgICAgICAgKE5BTiwgLTIuMyksCisgICAgICAgIChOQU4sIC0wLjApLAorICAgICAgICAoTkFOLCAwLjApLAorICAgICAgICAoTkFOLCAyLjMpLAorICAgICAgICAoTkFOLCBJTkYpLAorICAgICAgICAoLUlORiwgTkFOKSwKKyAgICAgICAgKC0yLjMsIE5BTiksCisgICAgICAgICgtMC4wLCBOQU4pLAorICAgICAgICAoMC4wLCBOQU4pLAorICAgICAgICAoMi4zLCBOQU4pLAorICAgICAgICAoSU5GLCBOQU4pCisgICAgICAgIF1dCisKK2NsYXNzIENNYXRoVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgbGlzdCBvZiBhbGwgZnVuY3Rpb25zIGluIGNtYXRoCisgICAgdGVzdF9mdW5jdGlvbnMgPSBbZ2V0YXR0cihjbWF0aCwgZm5hbWUpIGZvciBmbmFtZSBpbiBbCisgICAgICAgICAgICAnYWNvcycsICdhY29zaCcsICdhc2luJywgJ2FzaW5oJywgJ2F0YW4nLCAnYXRhbmgnLAorICAgICAgICAgICAgJ2NvcycsICdjb3NoJywgJ2V4cCcsICdsb2cnLCAnbG9nMTAnLCAnc2luJywgJ3NpbmgnLAorICAgICAgICAgICAgJ3NxcnQnLCAndGFuJywgJ3RhbmgnXV0KKyAgICAjIHRlc3QgZmlyc3QgYW5kIHNlY29uZCBhcmd1bWVudHMgaW5kZXBlbmRlbnRseSBmb3IgMi1hcmd1bWVudCBsb2cKKyAgICB0ZXN0X2Z1bmN0aW9ucy5hcHBlbmQobGFtYmRhIHggOiBjbWF0aC5sb2coeCwgMTcyOS4gKyAwaikpCisgICAgdGVzdF9mdW5jdGlvbnMuYXBwZW5kKGxhbWJkYSB4IDogY21hdGgubG9nKDE0Li0yN2osIHgpKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfdmFsdWVzID0gb3Blbih0ZXN0X2ZpbGUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYudGVzdF92YWx1ZXMuY2xvc2UoKQorCisgICAgZGVmIHJBc3NlcnRBbG1vc3RFcXVhbChzZWxmLCBhLCBiLCByZWxfZXJyID0gMmUtMTUsIGFic19lcnIgPSA1ZS0zMjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9Tm9uZSk6CisgICAgICAgICIiIkZhaWwgaWYgdGhlIHR3byBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFyZSBub3QgYWxtb3N0IGVxdWFsLgorCisgICAgICAgIERldGVybWluZSB3aGV0aGVyIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBhIGFuZCBiIGFyZSBlcXVhbCB0byB3aXRoaW4KKyAgICAgICAgYSAoc21hbGwpIHJvdW5kaW5nIGVycm9yLiAgVGhlIGRlZmF1bHQgdmFsdWVzIGZvciByZWxfZXJyIGFuZAorICAgICAgICBhYnNfZXJyIGFyZSBjaG9zZW4gdG8gYmUgc3VpdGFibGUgZm9yIHBsYXRmb3JtcyB3aGVyZSBhIGZsb2F0IGlzCisgICAgICAgIHJlcHJlc2VudGVkIGJ5IGFuIElFRUUgNzU0IGRvdWJsZS4gIFRoZXkgYWxsb3cgYW4gZXJyb3Igb2YgYmV0d2VlbgorICAgICAgICA5IGFuZCAxOSB1bHBzLgorICAgICAgICAiIiIKKworICAgICAgICAjIHNwZWNpYWwgdmFsdWVzIHRlc3RpbmcKKyAgICAgICAgaWYgbWF0aC5pc25hbihhKToKKyAgICAgICAgICAgIGlmIG1hdGguaXNuYW4oYik6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLmZhaWwobXNnIG9yICd7IXJ9IHNob3VsZCBiZSBuYW4nLmZvcm1hdChiKSkKKworICAgICAgICBpZiBtYXRoLmlzaW5mKGEpOgorICAgICAgICAgICAgaWYgYSA9PSBiOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5mYWlsKG1zZyBvciAnZmluaXRlIHJlc3VsdCB3aGVyZSBpbmZpbml0eSBleHBlY3RlZDogJworICAgICAgICAgICAgICAgICAgICAgICdleHBlY3RlZCB7IXJ9LCBnb3QgeyFyfScuZm9ybWF0KGEsIGIpKQorCisgICAgICAgICMgaWYgYm90aCBhIGFuZCBiIGFyZSB6ZXJvLCBjaGVjayB3aGV0aGVyIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaWduCisgICAgICAgICMgKGluIHRoZW9yeSB0aGVyZSBhcmUgZXhhbXBsZXMgd2hlcmUgaXQgd291bGQgYmUgbGVnaXRpbWF0ZSBmb3IgYQorICAgICAgICAjIGFuZCBiIHRvIGhhdmUgb3Bwb3NpdGUgc2lnbnM7IGluIHByYWN0aWNlIHRoZXNlIGhhcmRseSBldmVyCisgICAgICAgICMgb2NjdXIpLgorICAgICAgICBpZiBub3QgYSBhbmQgbm90IGI6CisgICAgICAgICAgICBpZiBtYXRoLmNvcHlzaWduKDEuLCBhKSAhPSBtYXRoLmNvcHlzaWduKDEuLCBiKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwobXNnIG9yICd6ZXJvIGhhcyB3cm9uZyBzaWduOiBleHBlY3RlZCB7IXJ9LCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdnb3QgeyFyfScuZm9ybWF0KGEsIGIpKQorCisgICAgICAgICMgaWYgYS1iIG92ZXJmbG93cywgb3IgYiBpcyBpbmZpbml0ZSwgcmV0dXJuIEZhbHNlLiAgQWdhaW4sIGluCisgICAgICAgICMgdGhlb3J5IHRoZXJlIGFyZSBleGFtcGxlcyB3aGVyZSBhIGlzIHdpdGhpbiBhIGZldyB1bHBzIG9mIHRoZQorICAgICAgICAjIG1heCByZXByZXNlbnRhYmxlIGZsb2F0LCBhbmQgdGhlbiBiIGNvdWxkIGxlZ2l0aW1hdGVseSBiZQorICAgICAgICAjIGluZmluaXRlLiAgSW4gcHJhY3RpY2UgdGhlc2UgZXhhbXBsZXMgYXJlIHJhcmUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFic29sdXRlX2Vycm9yID0gYWJzKGItYSkKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHRlc3QgcGFzc2VzIGlmIGVpdGhlciB0aGUgYWJzb2x1dGUgZXJyb3Igb3IgdGhlIHJlbGF0aXZlCisgICAgICAgICAgICAjIGVycm9yIGlzIHN1ZmZpY2llbnRseSBzbWFsbC4gIFRoZSBkZWZhdWx0cyBhbW91bnQgdG8gYW4KKyAgICAgICAgICAgICMgZXJyb3Igb2YgYmV0d2VlbiA5IHVscHMgYW5kIDE5IHVscHMgb24gYW4gSUVFRS03NTQgY29tcGxpYW50CisgICAgICAgICAgICAjIG1hY2hpbmUuCisgICAgICAgICAgICBpZiBhYnNvbHV0ZV9lcnJvciA8PSBtYXgoYWJzX2VyciwgcmVsX2VyciAqIGFicyhhKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuZmFpbChtc2cgb3IKKyAgICAgICAgICAgICAgICAgICd7IXJ9IGFuZCB7IXJ9IGFyZSBub3Qgc3VmZmljaWVudGx5IGNsb3NlJy5mb3JtYXQoYSwgYikpCisKKyAgICBkZWYgdGVzdF9jb25zdGFudHMoc2VsZik6CisgICAgICAgIGVfZXhwZWN0ZWQgPSAyLjcxODI4MTgyODQ1OTA0NTIzNTM2CisgICAgICAgIHBpX2V4cGVjdGVkID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NgorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNtYXRoLnBpLCBwaV9leHBlY3RlZCwgcGxhY2VzPTksCisgICAgICAgICAgICBtc2c9ImNtYXRoLnBpIGlzIHt9OyBzaG91bGQgYmUge30iLmZvcm1hdChjbWF0aC5waSwgcGlfZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNtYXRoLmUsIGVfZXhwZWN0ZWQsIHBsYWNlcz05LAorICAgICAgICAgICAgbXNnPSJjbWF0aC5lIGlzIHt9OyBzaG91bGQgYmUge30iLmZvcm1hdChjbWF0aC5lLCBlX2V4cGVjdGVkKSkKKworICAgIGRlZiB0ZXN0X3VzZXJfb2JqZWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgYXV0b21hdGljIGNhbGxpbmcgb2YgX19jb21wbGV4X18gYW5kIF9fZmxvYXRfXyBieSBjbWF0aAorICAgICAgICAjIGZ1bmN0aW9ucworCisgICAgICAgICMgc29tZSByYW5kb20gdmFsdWVzIHRvIHVzZSBhcyB0ZXN0IHZhbHVlczsgd2UgYXZvaWQgdmFsdWVzCisgICAgICAgICMgZm9yIHdoaWNoIGFueSBvZiB0aGUgZnVuY3Rpb25zIGluIGNtYXRoIGlzIHVuZGVmaW5lZAorICAgICAgICAjIChpLmUuIDAuLCAxLiwgLTEuLCAxaiwgLTFqKSBvciB3b3VsZCBjYXVzZSBvdmVyZmxvdworICAgICAgICBjeF9hcmcgPSA0LjQxOTQxNDQzOSArIDEuNDk3MTAwMTEzagorICAgICAgICBmbHRfYXJnID0gLTYuMTMxNjc3NzI1CisKKyAgICAgICAgIyBhIHZhcmlldHkgb2Ygbm9uLWNvbXBsZXggbnVtYmVycywgdXNlZCB0byBjaGVjayB0aGF0CisgICAgICAgICMgbm9uLWNvbXBsZXggcmV0dXJuIHZhbHVlcyBmcm9tIF9fY29tcGxleF9fIGdpdmUgYW4gZXJyb3IKKyAgICAgICAgbm9uX2NvbXBsZXhlcyA9IFsibm90IGNvbXBsZXgiLCAxLCA1TCwgMi4sIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0KCksIE5vdEltcGxlbWVudGVkXQorCisgICAgICAgICMgTm93IHdlIGludHJvZHVjZSBhIHZhcmlldHkgb2YgY2xhc3NlcyB3aG9zZSBpbnN0YW5jZXMgbWlnaHQKKyAgICAgICAgIyBlbmQgdXAgYmVpbmcgcGFzc2VkIHRvIHRoZSBjbWF0aCBmdW5jdGlvbnMKKworICAgICAgICAjIHVzdWFsIGNhc2U6IG5ldy1zdHlsZSBjbGFzcyBpbXBsZW1lbnRpbmcgX19jb21wbGV4X18KKyAgICAgICAgY2xhc3MgTXlDb21wbGV4KG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fY29tcGxleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKKyAgICAgICAgIyBvbGQtc3R5bGUgY2xhc3MgaW1wbGVtZW50aW5nIF9fY29tcGxleF9fCisgICAgICAgIGNsYXNzIE15Q29tcGxleE9TOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2NvbXBsZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCisgICAgICAgICMgY2xhc3NlcyBmb3Igd2hpY2ggX19jb21wbGV4X18gcmFpc2VzIGFuIGV4Y2VwdGlvbgorICAgICAgICBjbGFzcyBTb21lRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIE15Q29tcGxleEV4Y2VwdGlvbihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fY29tcGxleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIFNvbWVFeGNlcHRpb24KKyAgICAgICAgY2xhc3MgTXlDb21wbGV4RXhjZXB0aW9uT1M6CisgICAgICAgICAgICBkZWYgX19jb21wbGV4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgU29tZUV4Y2VwdGlvbgorCisgICAgICAgICMgc29tZSBjbGFzc2VzIG5vdCBwcm92aWRpbmcgX19mbG9hdF9fIG9yIF9fY29tcGxleF9fCisgICAgICAgIGNsYXNzIE5laXRoZXJDb21wbGV4Tm9yRmxvYXQob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgTmVpdGhlckNvbXBsZXhOb3JGbG9hdE9TOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBNeUludChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6IHJldHVybiAyCisgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6IHJldHVybiAyTAorICAgICAgICAgICAgZGVmIF9faW5kZXhfXyhzZWxmKTogcmV0dXJuIDIKKyAgICAgICAgY2xhc3MgTXlJbnRPUzoKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOiByZXR1cm4gMgorICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOiByZXR1cm4gMkwKKyAgICAgICAgICAgIGRlZiBfX2luZGV4X18oc2VsZik6IHJldHVybiAyCisKKyAgICAgICAgIyBvdGhlciBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgX19mbG9hdF9fIGFuZCBfX2NvbXBsZXhfXworICAgICAgICAjIHRoYXQgc2hvdWxkIHdvcmsKKyAgICAgICAgY2xhc3MgRmxvYXRBbmRDb21wbGV4KG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBmbHRfYXJnCisgICAgICAgICAgICBkZWYgX19jb21wbGV4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGN4X2FyZworICAgICAgICBjbGFzcyBGbG9hdEFuZENvbXBsZXhPUzoKKyAgICAgICAgICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZsdF9hcmcKKyAgICAgICAgICAgIGRlZiBfX2NvbXBsZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3hfYXJnCisgICAgICAgIGNsYXNzIEp1c3RGbG9hdChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmx0X2FyZworICAgICAgICBjbGFzcyBKdXN0RmxvYXRPUzoKKyAgICAgICAgICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZsdF9hcmcKKworICAgICAgICBmb3IgZiBpbiBzZWxmLnRlc3RfZnVuY3Rpb25zOgorICAgICAgICAgICAgIyB1c3VhbCB1c2FnZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKE15Q29tcGxleChjeF9hcmcpKSwgZihjeF9hcmcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKE15Q29tcGxleE9TKGN4X2FyZykpLCBmKGN4X2FyZykpCisgICAgICAgICAgICAjIG90aGVyIGNvbWJpbmF0aW9ucyBvZiBfX2Zsb2F0X18gYW5kIF9fY29tcGxleF9fCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoRmxvYXRBbmRDb21wbGV4KCkpLCBmKGN4X2FyZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoRmxvYXRBbmRDb21wbGV4T1MoKSksIGYoY3hfYXJnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihKdXN0RmxvYXQoKSksIGYoZmx0X2FyZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoSnVzdEZsb2F0T1MoKSksIGYoZmx0X2FyZykpCisgICAgICAgICAgICAjIFR5cGVFcnJvciBzaG91bGQgYmUgcmFpc2VkIGZvciBjbGFzc2VzIG5vdCBwcm92aWRpbmcKKyAgICAgICAgICAgICMgZWl0aGVyIF9fY29tcGxleF9fIG9yIF9fZmxvYXRfXywgZXZlbiBpZiB0aGV5IHByb3ZpZGUKKyAgICAgICAgICAgICMgX19pbnRfXywgX19sb25nX18gb3IgX19pbmRleF9fLiAgQW4gb2xkLXN0eWxlIGNsYXNzCisgICAgICAgICAgICAjIGN1cnJlbnRseSByYWlzZXMgQXR0cmlidXRlRXJyb3IgaW5zdGVhZCBvZiBhIFR5cGVFcnJvcjsKKyAgICAgICAgICAgICMgdGhpcyBjb3VsZCBiZSBjb25zaWRlcmVkIGEgYnVnLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBOZWl0aGVyQ29tcGxleE5vckZsb2F0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIE15SW50KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIGYsIE5laXRoZXJDb21wbGV4Tm9yRmxvYXRPUygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCBmLCBNeUludE9TKCkpCisgICAgICAgICAgICAjIG5vbi1jb21wbGV4IHJldHVybiB2YWx1ZSBmcm9tIF9fY29tcGxleF9fIC0+IFR5cGVFcnJvcgorICAgICAgICAgICAgZm9yIGJhZF9jb21wbGV4IGluIG5vbl9jb21wbGV4ZXM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBNeUNvbXBsZXgoYmFkX2NvbXBsZXgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgTXlDb21wbGV4T1MoYmFkX2NvbXBsZXgpKQorICAgICAgICAgICAgIyBleGNlcHRpb25zIGluIF9fY29tcGxleF9fIHNob3VsZCBiZSBwcm9wYWdhdGVkIGNvcnJlY3RseQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU29tZUV4Y2VwdGlvbiwgZiwgTXlDb21wbGV4RXhjZXB0aW9uKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTb21lRXhjZXB0aW9uLCBmLCBNeUNvbXBsZXhFeGNlcHRpb25PUygpKQorCisgICAgZGVmIHRlc3RfaW5wdXRfdHlwZShzZWxmKToKKyAgICAgICAgIyBpbnRzIGFuZCBsb25ncyBzaG91bGQgYmUgYWNjZXB0YWJsZSBpbnB1dHMgdG8gYWxsIGNtYXRoCisgICAgICAgICMgZnVuY3Rpb25zLCBieSB2aXJ0dWUgb2YgcHJvdmlkaW5nIGEgX19mbG9hdF9fIG1ldGhvZAorICAgICAgICBmb3IgZiBpbiBzZWxmLnRlc3RfZnVuY3Rpb25zOgorICAgICAgICAgICAgZm9yIGFyZyBpbiBbMiwgMkwsIDIuXToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYXJnKSwgZihhcmcuX19mbG9hdF9fKCkpKQorCisgICAgICAgICMgYnV0IHN0cmluZ3Mgc2hvdWxkIGdpdmUgYSBUeXBlRXJyb3IKKyAgICAgICAgZm9yIGYgaW4gc2VsZi50ZXN0X2Z1bmN0aW9uczoKKyAgICAgICAgICAgIGZvciBhcmcgaW4gWyJhIiwgImxvbmdfc3RyaW5nIiwgIjAiLCAiMWoiLCAiIl06CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBhcmcpCisKKyAgICBkZWYgdGVzdF9jbWF0aF9tYXRjaGVzX21hdGgoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCBjb3JyZXNwb25kaW5nIGNtYXRoIGFuZCBtYXRoIGZ1bmN0aW9ucyBhcmUgZXF1YWwKKyAgICAgICAgIyBmb3IgZmxvYXRzIGluIHRoZSBhcHByb3ByaWF0ZSByYW5nZQorCisgICAgICAgICMgdGVzdF92YWx1ZXMgaW4gKDAsIDEpCisgICAgICAgIHRlc3RfdmFsdWVzID0gWzAuMDEsIDAuMSwgMC4yLCAwLjUsIDAuOSwgMC45OV0KKworICAgICAgICAjIHRlc3RfdmFsdWVzIGZvciBmdW5jdGlvbnMgZGVmaW5lZCBvbiBbLTEuLCAxLl0KKyAgICAgICAgdW5pdF9pbnRlcnZhbCA9IHRlc3RfdmFsdWVzICsgWy14IGZvciB4IGluIHRlc3RfdmFsdWVzXSArIFwKKyAgICAgICAgICAgIFswLiwgMS4sIC0xLl0KKworICAgICAgICAjIHRlc3RfdmFsdWVzIGZvciBsb2csIGxvZzEwLCBzcXJ0CisgICAgICAgIHBvc2l0aXZlID0gdGVzdF92YWx1ZXMgKyBbMS5dICsgWzEuL3ggZm9yIHggaW4gdGVzdF92YWx1ZXNdCisgICAgICAgIG5vbm5lZ2F0aXZlID0gWzAuXSArIHBvc2l0aXZlCisKKyAgICAgICAgIyB0ZXN0X3ZhbHVlcyBmb3IgZnVuY3Rpb25zIGRlZmluZWQgb24gdGhlIHdob2xlIHJlYWwgbGluZQorICAgICAgICByZWFsX2xpbmUgPSBbMC5dICsgcG9zaXRpdmUgKyBbLXggZm9yIHggaW4gcG9zaXRpdmVdCisKKyAgICAgICAgdGVzdF9mdW5jdGlvbnMgPSB7CisgICAgICAgICAgICAnYWNvcycgOiB1bml0X2ludGVydmFsLAorICAgICAgICAgICAgJ2FzaW4nIDogdW5pdF9pbnRlcnZhbCwKKyAgICAgICAgICAgICdhdGFuJyA6IHJlYWxfbGluZSwKKyAgICAgICAgICAgICdjb3MnIDogcmVhbF9saW5lLAorICAgICAgICAgICAgJ2Nvc2gnIDogcmVhbF9saW5lLAorICAgICAgICAgICAgJ2V4cCcgOiByZWFsX2xpbmUsCisgICAgICAgICAgICAnbG9nJyA6IHBvc2l0aXZlLAorICAgICAgICAgICAgJ2xvZzEwJyA6IHBvc2l0aXZlLAorICAgICAgICAgICAgJ3NpbicgOiByZWFsX2xpbmUsCisgICAgICAgICAgICAnc2luaCcgOiByZWFsX2xpbmUsCisgICAgICAgICAgICAnc3FydCcgOiBub25uZWdhdGl2ZSwKKyAgICAgICAgICAgICd0YW4nIDogcmVhbF9saW5lLAorICAgICAgICAgICAgJ3RhbmgnIDogcmVhbF9saW5lfQorCisgICAgICAgIGZvciBmbiwgdmFsdWVzIGluIHRlc3RfZnVuY3Rpb25zLml0ZW1zKCk6CisgICAgICAgICAgICBmbG9hdF9mbiA9IGdldGF0dHIobWF0aCwgZm4pCisgICAgICAgICAgICBjb21wbGV4X2ZuID0gZ2V0YXR0cihjbWF0aCwgZm4pCisgICAgICAgICAgICBmb3IgdiBpbiB2YWx1ZXM6CisgICAgICAgICAgICAgICAgeiA9IGNvbXBsZXhfZm4odikKKyAgICAgICAgICAgICAgICBzZWxmLnJBc3NlcnRBbG1vc3RFcXVhbChmbG9hdF9mbih2KSwgei5yZWFsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMC4sIHouaW1hZykKKworICAgICAgICAjIHRlc3QgdHdvLWFyZ3VtZW50IHZlcnNpb24gb2YgbG9nIHdpdGggdmFyaW91cyBiYXNlcworICAgICAgICBmb3IgYmFzZSBpbiBbMC41LCAyLiwgMTAuXToKKyAgICAgICAgICAgIGZvciB2IGluIHBvc2l0aXZlOgorICAgICAgICAgICAgICAgIHogPSBjbWF0aC5sb2codiwgYmFzZSkKKyAgICAgICAgICAgICAgICBzZWxmLnJBc3NlcnRBbG1vc3RFcXVhbChtYXRoLmxvZyh2LCBiYXNlKSwgei5yZWFsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMC4sIHouaW1hZykKKworICAgIGRlZiB0ZXN0X3NwZWNpZmljX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgaWYgbm90IGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGRlZiByZWN0X2NvbXBsZXgoeik6CisgICAgICAgICAgICAiIiJXcmFwcGVkIHZlcnNpb24gb2YgcmVjdCB0aGF0IGFjY2VwdHMgYSBjb21wbGV4IG51bWJlciBpbnN0ZWFkIG9mCisgICAgICAgICAgICB0d28gZmxvYXQgYXJndW1lbnRzLiIiIgorICAgICAgICAgICAgcmV0dXJuIGNtYXRoLnJlY3Qoei5yZWFsLCB6LmltYWcpCisKKyAgICAgICAgZGVmIHBvbGFyX2NvbXBsZXgoeik6CisgICAgICAgICAgICAiIiJXcmFwcGVkIHZlcnNpb24gb2YgcG9sYXIgdGhhdCByZXR1cm5zIGEgY29tcGxleCBudW1iZXIgaW5zdGVhZCBvZgorICAgICAgICAgICAgdHdvIGZsb2F0cy4iIiIKKyAgICAgICAgICAgIHJldHVybiBjb21wbGV4KCpwb2xhcih6KSkKKworICAgICAgICBmb3IgaWQsIGZuLCBhciwgYWksIGVyLCBlaSwgZmxhZ3MgaW4gcGFyc2VfdGVzdGZpbGUodGVzdF9maWxlKToKKyAgICAgICAgICAgIGFyZyA9IGNvbXBsZXgoYXIsIGFpKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBjb21wbGV4KGVyLCBlaSkKKyAgICAgICAgICAgIGlmIGZuID09ICdyZWN0JzoKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IHJlY3RfY29tcGxleAorICAgICAgICAgICAgZWxpZiBmbiA9PSAncG9sYXInOgorICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gcG9sYXJfY29tcGxleAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IGdldGF0dHIoY21hdGgsIGZuKQorICAgICAgICAgICAgaWYgJ2RpdmlkZS1ieS16ZXJvJyBpbiBmbGFncyBvciAnaW52YWxpZCcgaW4gZmxhZ3M6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBhY3R1YWwgPSBmdW5jdGlvbihhcmcpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdWYWx1ZUVycm9yIG5vdCByYWlzZWQgaW4gdGVzdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICd7fToge30oY29tcGxleCh7IXJ9LCB7IXJ9KSknLmZvcm1hdChpZCwgZm4sIGFyLCBhaSkpCisKKyAgICAgICAgICAgIGlmICdvdmVyZmxvdycgaW4gZmxhZ3M6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBhY3R1YWwgPSBmdW5jdGlvbihhcmcpCisgICAgICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdPdmVyZmxvd0Vycm9yIG5vdCByYWlzZWQgaW4gdGVzdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICd7fToge30oY29tcGxleCh7IXJ9LCB7IXJ9KSknLmZvcm1hdChpZCwgZm4sIGFyLCBhaSkpCisKKyAgICAgICAgICAgIGFjdHVhbCA9IGZ1bmN0aW9uKGFyZykKKworICAgICAgICAgICAgaWYgJ2lnbm9yZS1yZWFsLXNpZ24nIGluIGZsYWdzOgorICAgICAgICAgICAgICAgIGFjdHVhbCA9IGNvbXBsZXgoYWJzKGFjdHVhbC5yZWFsKSwgYWN0dWFsLmltYWcpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBjb21wbGV4KGFicyhleHBlY3RlZC5yZWFsKSwgZXhwZWN0ZWQuaW1hZykKKyAgICAgICAgICAgIGlmICdpZ25vcmUtaW1hZy1zaWduJyBpbiBmbGFnczoKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBjb21wbGV4KGFjdHVhbC5yZWFsLCBhYnMoYWN0dWFsLmltYWcpKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gY29tcGxleChleHBlY3RlZC5yZWFsLCBhYnMoZXhwZWN0ZWQuaW1hZykpCisKKyAgICAgICAgICAgICMgZm9yIHRoZSByZWFsIHBhcnQgb2YgdGhlIGxvZyBmdW5jdGlvbiwgd2UgYWxsb3cgYW4KKyAgICAgICAgICAgICMgYWJzb2x1dGUgZXJyb3Igb2YgdXAgdG8gMmUtMTUuCisgICAgICAgICAgICBpZiBmbiBpbiAoJ2xvZycsICdsb2cxMCcpOgorICAgICAgICAgICAgICAgIHJlYWxfYWJzX2VyciA9IDJlLTE1CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlYWxfYWJzX2VyciA9IDVlLTMyMworCisgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gKAorICAgICAgICAgICAgICAgICd7fToge30oY29tcGxleCh7IXJ9LCB7IXJ9KSlcbicKKyAgICAgICAgICAgICAgICAnRXhwZWN0ZWQ6IGNvbXBsZXgoeyFyfSwgeyFyfSlcbicKKyAgICAgICAgICAgICAgICAnUmVjZWl2ZWQ6IGNvbXBsZXgoeyFyfSwgeyFyfSlcbicKKyAgICAgICAgICAgICAgICAnUmVjZWl2ZWQgdmFsdWUgaW5zdWZmaWNpZW50bHkgY2xvc2UgdG8gZXhwZWN0ZWQgdmFsdWUuJworICAgICAgICAgICAgICAgICkuZm9ybWF0KGlkLCBmbiwgYXIsIGFpLAorICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQucmVhbCwgZXhwZWN0ZWQuaW1hZywKKyAgICAgICAgICAgICAgICAgICAgIGFjdHVhbC5yZWFsLCBhY3R1YWwuaW1hZykKKyAgICAgICAgICAgIHNlbGYuckFzc2VydEFsbW9zdEVxdWFsKGV4cGVjdGVkLnJlYWwsIGFjdHVhbC5yZWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19lcnI9cmVhbF9hYnNfZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz1lcnJvcl9tZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5yQXNzZXJ0QWxtb3N0RXF1YWwoZXhwZWN0ZWQuaW1hZywgYWN0dWFsLmltYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPWVycm9yX21lc3NhZ2UpCisKKyAgICBkZWYgYXNzZXJ0Q0lTRXF1YWwoc2VsZiwgYSwgYik6CisgICAgICAgIGVwcyA9IDFFLTcKKyAgICAgICAgaWYgYWJzKGFbMF0gLSBiWzBdKSA+IGVwcyBvciBhYnMoYVsxXSAtIGJbMV0pID4gZXBzOgorICAgICAgICAgICAgc2VsZi5mYWlsKChhICxiKSkKKworICAgIGRlZiB0ZXN0X3BvbGFyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydENJU0VxdWFsKHBvbGFyKDApLCAoMC4sIDAuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRDSVNFcXVhbChwb2xhcigxLiksICgxLiwgMC4pKQorICAgICAgICBzZWxmLmFzc2VydENJU0VxdWFsKHBvbGFyKC0xLiksICgxLiwgcGkpKQorICAgICAgICBzZWxmLmFzc2VydENJU0VxdWFsKHBvbGFyKDFqKSwgKDEuLCBwaS8yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRDSVNFcXVhbChwb2xhcigtMWopLCAoMS4sIC1waS8yKSkKKworICAgIGRlZiB0ZXN0X3BoYXNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKDApLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZSgxLiksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKC0xLiksIHBpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKC0xLisxRS0zMDBqKSwgcGkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocGhhc2UoLTEuLTFFLTMwMGopLCAtcGkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocGhhc2UoMWopLCBwaS8yKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKC0xaiksIC1waS8yKQorCisgICAgICAgICMgemVyb3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaGFzZShjb21wbGV4KDAuMCwgMC4wKSksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaGFzZShjb21wbGV4KDAuMCwgLTAuMCkpLCAtMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBoYXNlKGNvbXBsZXgoLTAuMCwgMC4wKSksIHBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBoYXNlKGNvbXBsZXgoLTAuMCwgLTAuMCkpLCAtcGkpCisKKyAgICAgICAgIyBpbmZpbml0aWVzCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocGhhc2UoY29tcGxleCgtSU5GLCAtMC4wKSksIC1waSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZShjb21wbGV4KC1JTkYsIC0yLjMpKSwgLXBpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKGNvbXBsZXgoLUlORiwgLUlORikpLCAtMC43NSpwaSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZShjb21wbGV4KC0yLjMsIC1JTkYpKSwgLXBpLzIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocGhhc2UoY29tcGxleCgtMC4wLCAtSU5GKSksIC1waS8yKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKGNvbXBsZXgoMC4wLCAtSU5GKSksIC1waS8yKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKGNvbXBsZXgoMi4zLCAtSU5GKSksIC1waS8yKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKGNvbXBsZXgoSU5GLCAtSU5GKSksIC1waS80KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBoYXNlKGNvbXBsZXgoSU5GLCAtMi4zKSksIC0wLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGhhc2UoY29tcGxleChJTkYsIC0wLjApKSwgLTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaGFzZShjb21wbGV4KElORiwgMC4wKSksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaGFzZShjb21wbGV4KElORiwgMi4zKSksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZShjb21wbGV4KElORiwgSU5GKSksIHBpLzQpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocGhhc2UoY29tcGxleCgyLjMsIElORikpLCBwaS8yKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKGNvbXBsZXgoMC4wLCBJTkYpKSwgcGkvMikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZShjb21wbGV4KC0wLjAsIElORikpLCBwaS8yKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKGNvbXBsZXgoLTIuMywgSU5GKSksIHBpLzIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocGhhc2UoY29tcGxleCgtSU5GLCBJTkYpKSwgMC43NSpwaSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZShjb21wbGV4KC1JTkYsIDIuMykpLCBwaSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwaGFzZShjb21wbGV4KC1JTkYsIDAuMCkpLCBwaSkKKworICAgICAgICAjIHJlYWwgb3IgaW1hZ2luYXJ5IHBhcnQgTmFOCisgICAgICAgIGZvciB6IGluIGNvbXBsZXhfbmFuczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHBoYXNlKHopKSkKKworICAgIGRlZiB0ZXN0X2FicyhzZWxmKToKKyAgICAgICAgIyB6ZXJvcworICAgICAgICBmb3IgeiBpbiBjb21wbGV4X3plcm9zOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoeiksIDAuMCkKKworICAgICAgICAjIGluZmluaXRpZXMKKyAgICAgICAgZm9yIHogaW4gY29tcGxleF9pbmZpbml0aWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoeiksIElORikKKworICAgICAgICAjIHJlYWwgb3IgaW1hZ2luYXJ5IHBhcnQgTmFOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKGNvbXBsZXgoTkFOLCAtSU5GKSksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoTkFOLCAtMi4zKSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihhYnMoY29tcGxleChOQU4sIC0wLjApKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGFicyhjb21wbGV4KE5BTiwgMC4wKSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihhYnMoY29tcGxleChOQU4sIDIuMykpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoY29tcGxleChOQU4sIElORikpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKGNvbXBsZXgoLUlORiwgTkFOKSksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoLTIuMywgTkFOKSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihhYnMoY29tcGxleCgtMC4wLCBOQU4pKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGFicyhjb21wbGV4KDAuMCwgTkFOKSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihhYnMoY29tcGxleCgyLjMsIE5BTikpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoY29tcGxleChJTkYsIE5BTikpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGFicyhjb21wbGV4KE5BTiwgTkFOKSkpKQorCisgICAgICAgICMgcmVzdWx0IG92ZXJmbG93cworICAgICAgICBpZiBmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBhYnMsIGNvbXBsZXgoMS40ZTMwOCwgMS40ZTMwOCkpCisKKyAgICBkZWYgYXNzZXJ0Q0VxdWFsKHNlbGYsIGEsIGIpOgorICAgICAgICBlcHMgPSAxRS03CisgICAgICAgIGlmIGFicyhhLnJlYWwgLSBiWzBdKSA+IGVwcyBvciBhYnMoYS5pbWFnIC0gYlsxXSkgPiBlcHM6CisgICAgICAgICAgICBzZWxmLmZhaWwoKGEgLGIpKQorCisgICAgZGVmIHRlc3RfcmVjdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRDRXF1YWwocmVjdCgwLCAwKSwgKDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydENFcXVhbChyZWN0KDEsIDApLCAoMS4sIDApKQorICAgICAgICBzZWxmLmFzc2VydENFcXVhbChyZWN0KDEsIC1waSksICgtMS4sIDApKQorICAgICAgICBzZWxmLmFzc2VydENFcXVhbChyZWN0KDEsIHBpLzIpLCAoMCwgMS4pKQorICAgICAgICBzZWxmLmFzc2VydENFcXVhbChyZWN0KDEsIC1waS8yKSwgKDAsIC0xLikpCisKKyAgICBkZWYgdGVzdF9pc25hbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbWF0aC5pc25hbigxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbWF0aC5pc25hbigxaikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY21hdGguaXNuYW4oSU5GKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzbmFuKE5BTikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc25hbihjb21wbGV4KE5BTiwgMCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNuYW4oY29tcGxleCgwLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzbmFuKGNvbXBsZXgoTkFOLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzbmFuKGNvbXBsZXgoTkFOLCBJTkYpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzbmFuKGNvbXBsZXgoSU5GLCBOQU4pKSkKKworICAgIGRlZiB0ZXN0X2lzaW5mKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNtYXRoLmlzaW5mKDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNtYXRoLmlzaW5mKDFqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbWF0aC5pc2luZihOQU4pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNpbmYoSU5GKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtYXRoLmlzaW5mKGNvbXBsZXgoSU5GLCAwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc2luZihjb21wbGV4KDAsIElORikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNpbmYoY29tcGxleChJTkYsIElORikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNpbmYoY29tcGxleChOQU4sIElORikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY21hdGguaXNpbmYoY29tcGxleChJTkYsIE5BTikpKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoQ01hdGhUZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY21kLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY21kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTI1OGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jbWQucHkKQEAgLTAsMCArMSwyNDYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIiIiCitUZXN0IHNjcmlwdCBmb3IgdGhlICdjbWQnIG1vZHVsZQorT3JpZ2luYWwgYnkgTWljaGFlbCBTY2huZWlkZXIKKyIiIgorCisKK2ltcG9ydCBjbWQKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgcmUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IFN0cmluZ0lPCisKK2NsYXNzIHNhbXBsZWNtZGNsYXNzKGNtZC5DbWQpOgorICAgICIiIgorICAgIEluc3RhbmNlIHRoZSBzYW1wbGVjbGFzczoKKyAgICA+Pj4gbXljbWQgPSBzYW1wbGVjbWRjbGFzcygpCisKKyAgICBUZXN0IGZvciB0aGUgZnVuY3Rpb24gcGFyc2VsaW5lKCk6CisgICAgPj4+IG15Y21kLnBhcnNlbGluZSgiIikKKyAgICAoTm9uZSwgTm9uZSwgJycpCisgICAgPj4+IG15Y21kLnBhcnNlbGluZSgiPyIpCisgICAgKCdoZWxwJywgJycsICdoZWxwICcpCisgICAgPj4+IG15Y21kLnBhcnNlbGluZSgiP2hlbHAiKQorICAgICgnaGVscCcsICdoZWxwJywgJ2hlbHAgaGVscCcpCisgICAgPj4+IG15Y21kLnBhcnNlbGluZSgiISIpCisgICAgKCdzaGVsbCcsICcnLCAnc2hlbGwgJykKKyAgICA+Pj4gbXljbWQucGFyc2VsaW5lKCIhY29tbWFuZCIpCisgICAgKCdzaGVsbCcsICdjb21tYW5kJywgJ3NoZWxsIGNvbW1hbmQnKQorICAgID4+PiBteWNtZC5wYXJzZWxpbmUoImZ1bmMiKQorICAgICgnZnVuYycsICcnLCAnZnVuYycpCisgICAgPj4+IG15Y21kLnBhcnNlbGluZSgiZnVuYyBhcmcxIikKKyAgICAoJ2Z1bmMnLCAnYXJnMScsICdmdW5jIGFyZzEnKQorCisKKyAgICBUZXN0IGZvciB0aGUgZnVuY3Rpb24gb25lY21kKCk6CisgICAgPj4+IG15Y21kLm9uZWNtZCgiIikKKyAgICA+Pj4gbXljbWQub25lY21kKCJhZGQgNCA1IikKKyAgICA5CisgICAgPj4+IG15Y21kLm9uZWNtZCgiIikKKyAgICA5CisgICAgPj4+IG15Y21kLm9uZWNtZCgidGVzdCIpCisgICAgKioqIFVua25vd24gc3ludGF4OiB0ZXN0CisKKyAgICBUZXN0IGZvciB0aGUgZnVuY3Rpb24gZW1wdHlsaW5lKCk6CisgICAgPj4+IG15Y21kLmVtcHR5bGluZSgpCisgICAgKioqIFVua25vd24gc3ludGF4OiB0ZXN0CisKKyAgICBUZXN0IGZvciB0aGUgZnVuY3Rpb24gZGVmYXVsdCgpOgorICAgID4+PiBteWNtZC5kZWZhdWx0KCJkZWZhdWx0IikKKyAgICAqKiogVW5rbm93biBzeW50YXg6IGRlZmF1bHQKKworICAgIFRlc3QgZm9yIHRoZSBmdW5jdGlvbiBjb21wbGV0ZWRlZmF1bHQoKToKKyAgICA+Pj4gbXljbWQuY29tcGxldGVkZWZhdWx0KCkKKyAgICBUaGlzIGlzIHRoZSBjb21wbGV0ZWRlZmF1bHQgbWV0aG9kZQorICAgID4+PiBteWNtZC5jb21wbGV0ZW5hbWVzKCJhIikKKyAgICBbJ2FkZCddCisKKyAgICBUZXN0IGZvciB0aGUgZnVuY3Rpb24gY29tcGxldGVuYW1lcygpOgorICAgID4+PiBteWNtZC5jb21wbGV0ZW5hbWVzKCIxMiIpCisgICAgW10KKyAgICA+Pj4gbXljbWQuY29tcGxldGVuYW1lcygiaGVscCIpCisgICAgWydoZWxwJ10KKworICAgIFRlc3QgZm9yIHRoZSBmdW5jdGlvbiBjb21wbGV0ZV9oZWxwKCk6CisgICAgPj4+IG15Y21kLmNvbXBsZXRlX2hlbHAoImEiKQorICAgIFsnYWRkJ10KKyAgICA+Pj4gbXljbWQuY29tcGxldGVfaGVscCgiaGUiKQorICAgIFsnaGVscCddCisgICAgPj4+IG15Y21kLmNvbXBsZXRlX2hlbHAoIjEyIikKKyAgICBbXQorICAgID4+PiBzb3J0ZWQobXljbWQuY29tcGxldGVfaGVscCgiIikpCisgICAgWydhZGQnLCAnZXhpdCcsICdoZWxwJywgJ3NoZWxsJ10KKworICAgIFRlc3QgZm9yIHRoZSBmdW5jdGlvbiBkb19oZWxwKCk6CisgICAgPj4+IG15Y21kLmRvX2hlbHAoInRlc3RldCIpCisgICAgKioqIE5vIGhlbHAgb24gdGVzdGV0CisgICAgPj4+IG15Y21kLmRvX2hlbHAoImFkZCIpCisgICAgaGVscCB0ZXh0IGZvciBhZGQKKyAgICA+Pj4gbXljbWQub25lY21kKCJoZWxwIGFkZCIpCisgICAgaGVscCB0ZXh0IGZvciBhZGQKKyAgICA+Pj4gbXljbWQuZG9faGVscCgiIikKKyAgICA8QkxBTktMSU5FPgorICAgIERvY3VtZW50ZWQgY29tbWFuZHMgKHR5cGUgaGVscCA8dG9waWM+KToKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgYWRkICBoZWxwCisgICAgPEJMQU5LTElORT4KKyAgICBVbmRvY3VtZW50ZWQgY29tbWFuZHM6CisgICAgPT09PT09PT09PT09PT09PT09PT09PQorICAgIGV4aXQgIHNoZWxsCisgICAgPEJMQU5LTElORT4KKworICAgIFRlc3QgZm9yIHRoZSBmdW5jdGlvbiBwcmludF90b3BpY3MoKToKKyAgICA+Pj4gbXljbWQucHJpbnRfdG9waWNzKCJoZWFkZXIiLCBbImNvbW1hbmQxIiwgImNvbW1hbmQyIl0sIDIgLDEwKQorICAgIGhlYWRlcgorICAgID09PT09PQorICAgIGNvbW1hbmQxCisgICAgY29tbWFuZDIKKyAgICA8QkxBTktMSU5FPgorCisgICAgVGVzdCBmb3IgdGhlIGZ1bmN0aW9uIGNvbHVtbml6ZSgpOgorICAgID4+PiBteWNtZC5jb2x1bW5pemUoW3N0cihpKSBmb3IgaSBpbiB4cmFuZ2UoMjApXSkKKyAgICAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5ICAxMCAgMTEgIDEyICAxMyAgMTQgIDE1ICAxNiAgMTcgIDE4ICAxOQorICAgID4+PiBteWNtZC5jb2x1bW5pemUoW3N0cihpKSBmb3IgaSBpbiB4cmFuZ2UoMjApXSwgMTApCisgICAgMCAgNyAgIDE0CisgICAgMSAgOCAgIDE1CisgICAgMiAgOSAgIDE2CisgICAgMyAgMTAgIDE3CisgICAgNCAgMTEgIDE4CisgICAgNSAgMTIgIDE5CisgICAgNiAgMTMKKworICAgIFRoaXMgaXMgYSBpbnRlcmFjdGl2ZSB0ZXN0LCBwdXQgc29tZSBjb21tYW5kcyBpbiB0aGUgY21kcXVldWUgYXR0cmlidXRlCisgICAgYW5kIGxldCBpdCBleGVjdXRlCisgICAgVGhpcyB0ZXN0IGluY2x1ZGVzIHRoZSBwcmVsb29wKCksIHBvc3Rsb29wKCksIGRlZmF1bHQoKSwgZW1wdHlsaW5lKCksCisgICAgcGFyc2VsaW5lKCksIGRvX2hlbHAoKSBmdW5jdGlvbnMKKyAgICA+Pj4gbXljbWQudXNlX3Jhd2lucHV0PTAKKyAgICA+Pj4gbXljbWQuY21kcXVldWU9WyIiLCAiYWRkIiwgImFkZCA0IDUiLCAiaGVscCIsICJoZWxwIGFkZCIsImV4aXQiXQorICAgID4+PiBteWNtZC5jbWRsb29wKCkKKyAgICBIZWxsbyBmcm9tIHByZWxvb3AKKyAgICBoZWxwIHRleHQgZm9yIGFkZAorICAgICoqKiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMKKyAgICA5CisgICAgPEJMQU5LTElORT4KKyAgICBEb2N1bWVudGVkIGNvbW1hbmRzICh0eXBlIGhlbHAgPHRvcGljPik6CisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIGFkZCAgaGVscAorICAgIDxCTEFOS0xJTkU+CisgICAgVW5kb2N1bWVudGVkIGNvbW1hbmRzOgorICAgID09PT09PT09PT09PT09PT09PT09PT0KKyAgICBleGl0ICBzaGVsbAorICAgIDxCTEFOS0xJTkU+CisgICAgaGVscCB0ZXh0IGZvciBhZGQKKyAgICBIZWxsbyBmcm9tIHBvc3Rsb29wCisgICAgIiIiCisKKyAgICBkZWYgcHJlbG9vcChzZWxmKToKKyAgICAgICAgcHJpbnQgIkhlbGxvIGZyb20gcHJlbG9vcCIKKworICAgIGRlZiBwb3N0bG9vcChzZWxmKToKKyAgICAgICAgcHJpbnQgIkhlbGxvIGZyb20gcG9zdGxvb3AiCisKKyAgICBkZWYgY29tcGxldGVkZWZhdWx0KHNlbGYsICppZ25vcmVkKToKKyAgICAgICAgcHJpbnQgIlRoaXMgaXMgdGhlIGNvbXBsZXRlZGVmYXVsdCBtZXRob2RlIgorICAgICAgICByZXR1cm4KKworICAgIGRlZiBjb21wbGV0ZV9jb21tYW5kKHNlbGYpOgorICAgICAgICBwcmludCAiY29tcGxldGUgY29tbWFuZCIKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgZG9fc2hlbGwoc2VsZiwgcyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBkb19hZGQoc2VsZiwgcyk6CisgICAgICAgIGwgPSBzLnNwbGl0KCkKKyAgICAgICAgaWYgbGVuKGwpICE9IDI6CisgICAgICAgICAgICBwcmludCAiKioqIGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBsID0gW2ludChpKSBmb3IgaSBpbiBsXQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHByaW50ICIqKiogYXJndW1lbnRzIHNob3VsZCBiZSBudW1iZXJzIgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHByaW50IGxbMF0rbFsxXQorCisgICAgZGVmIGhlbHBfYWRkKHNlbGYpOgorICAgICAgICBwcmludCAiaGVscCB0ZXh0IGZvciBhZGQiCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGRvX2V4aXQoc2VsZiwgYXJnKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitjbGFzcyBUZXN0QWx0ZXJuYXRlSW5wdXQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3Mgc2ltcGxlY21kKGNtZC5DbWQpOgorCisgICAgICAgIGRlZiBkb19wcmludChzZWxmLCBhcmdzKToKKyAgICAgICAgICAgIHByaW50ID4+c2VsZi5zdGRvdXQsIGFyZ3MKKworICAgICAgICBkZWYgZG9fRU9GKHNlbGYsIGFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworCisgICAgY2xhc3Mgc2ltcGxlY21kMihzaW1wbGVjbWQpOgorCisgICAgICAgIGRlZiBkb19FT0Yoc2VsZiwgYXJncyk6CisgICAgICAgICAgICBwcmludCA+PnNlbGYuc3Rkb3V0LCAnKioqIFVua25vd24gc3ludGF4OiBFT0YnCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisKKyAgICBkZWYgdGVzdF9maWxlX3dpdGhfbWlzc2luZ19maW5hbF9ubChzZWxmKToKKyAgICAgICAgaW5wdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygicHJpbnQgdGVzdFxucHJpbnQgdGVzdDIiKQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGNtZCA9IHNlbGYuc2ltcGxlY21kKHN0ZGluPWlucHV0LCBzdGRvdXQ9b3V0cHV0KQorICAgICAgICBjbWQudXNlX3Jhd2lucHV0ID0gRmFsc2UKKyAgICAgICAgY21kLmNtZGxvb3AoKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFsKG91dHB1dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgKCIoQ21kKSB0ZXN0XG4iCisgICAgICAgICAgICAgIihDbWQpIHRlc3QyXG4iCisgICAgICAgICAgICAgIihDbWQpICIpKQorCisKKyAgICBkZWYgdGVzdF9pbnB1dF9yZXNldF9hdF9FT0Yoc2VsZik6CisgICAgICAgIGlucHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oInByaW50IHRlc3RcbnByaW50IHRlc3QyIikKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBjbWQgPSBzZWxmLnNpbXBsZWNtZDIoc3RkaW49aW5wdXQsIHN0ZG91dD1vdXRwdXQpCisgICAgICAgIGNtZC51c2VfcmF3aW5wdXQgPSBGYWxzZQorICAgICAgICBjbWQuY21kbG9vcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlMaW5lRXF1YWwob3V0cHV0LmdldHZhbHVlKCksCisgICAgICAgICAgICAoIihDbWQpIHRlc3RcbiIKKyAgICAgICAgICAgICAiKENtZCkgdGVzdDJcbiIKKyAgICAgICAgICAgICAiKENtZCkgKioqIFVua25vd24gc3ludGF4OiBFT0ZcbiIpKQorICAgICAgICBpbnB1dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCJwcmludCBcblxuIikKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBjbWQuc3RkaW4gPSBpbnB1dAorICAgICAgICBjbWQuc3Rkb3V0ID0gb3V0cHV0CisgICAgICAgIGNtZC5jbWRsb29wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICgiKENtZCkgXG4iCisgICAgICAgICAgICAgIihDbWQpIFxuIgorICAgICAgICAgICAgICIoQ21kKSAqKiogVW5rbm93biBzeW50YXg6IEVPRlxuIikpCisKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9jbWQKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9jbWQsIHZlcmJvc2UpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0QWx0ZXJuYXRlSW5wdXQpCisKK2RlZiB0ZXN0X2NvdmVyYWdlKGNvdmVyZGlyKToKKyAgICB0cmFjZSA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0cmFjZScpCisgICAgdHJhY2VyPXRyYWNlLlRyYWNlKGlnbm9yZWRpcnM9W3N5cy5wcmVmaXgsIHN5cy5leGVjX3ByZWZpeCxdLAorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2U9MCwgY291bnQ9MSkKKyAgICB0cmFjZXIucnVuKCdyZWxvYWQoY21kKTt0ZXN0X21haW4oKScpCisgICAgcj10cmFjZXIucmVzdWx0cygpCisgICAgcHJpbnQgIldyaXRpbmcgY292ZXJhZ2UgcmVzdWx0cy4uLiIKKyAgICByLndyaXRlX3Jlc3VsdHMoc2hvd19taXNzaW5nPVRydWUsIHN1bW1hcnk9VHJ1ZSwgY292ZXJkaXI9Y292ZXJkaXIpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgaWYgIi1jIiBpbiBzeXMuYXJndjoKKyAgICAgICAgdGVzdF9jb3ZlcmFnZSgnL3RtcC9jbWQuY292ZXInKQorICAgIGVsaWYgIi1pIiBpbiBzeXMuYXJndjoKKyAgICAgICAgc2FtcGxlY21kY2xhc3MoKS5jbWRsb29wKCkKKyAgICBlbHNlOgorICAgICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY21kX2xpbmUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jbWRfbGluZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmYyNmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY21kX2xpbmUucHkKQEAgLTAsMCArMSwxNDMgQEAKKyMgVGVzdHMgaW52b2NhdGlvbiBvZiB0aGUgaW50ZXJwcmV0ZXIgd2l0aCB2YXJpb3VzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKyMgQWxsIHRlc3RzIGFyZSBleGVjdXRlZCB3aXRoIGVudmlyb25tZW50IHZhcmlhYmxlcyBpZ25vcmVkCisjIFNlZSB0ZXN0X2NtZF9saW5lX3NjcmlwdC5weSBmb3IgdGVzdGluZyBvZiBzY3JpcHQgZXhlY3V0aW9uCisKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgKAorICAgIGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZSwgc3Bhd25fcHl0aG9uLCBraWxsX3B5dGhvbiwKKyAgICBweXRob25fZXhpdF9jb2RlCispCisKKworY2xhc3MgQ21kTGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzdGFydF9weXRob24oc2VsZiwgKmFyZ3MpOgorICAgICAgICBwID0gc3Bhd25fcHl0aG9uKCphcmdzKQorICAgICAgICByZXR1cm4ga2lsbF9weXRob24ocCkKKworICAgIGRlZiBleGl0X2NvZGUoc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gcHl0aG9uX2V4aXRfY29kZSgqYXJncykKKworICAgIGRlZiB0ZXN0X2RpcmVjdG9yaWVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYuZXhpdF9jb2RlKCcuJyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5leGl0X2NvZGUoJzwgLicpLCAwKQorCisgICAgZGVmIHZlcmlmeV92YWxpZF9mbGFnKHNlbGYsIGNtZF9saW5lKToKKyAgICAgICAgZGF0YSA9IHNlbGYuc3RhcnRfcHl0aG9uKGNtZF9saW5lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YSA9PSAnJyBvciBkYXRhLmVuZHN3aXRoKCdcbicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCBkYXRhKQorCisgICAgZGVmIHRlc3Rfb3B0aW1pemUoc2VsZik6CisgICAgICAgIHNlbGYudmVyaWZ5X3ZhbGlkX2ZsYWcoJy1PJykKKyAgICAgICAgc2VsZi52ZXJpZnlfdmFsaWRfZmxhZygnLU9PJykKKworICAgIGRlZiB0ZXN0X3Eoc2VsZik6CisgICAgICAgIHNlbGYudmVyaWZ5X3ZhbGlkX2ZsYWcoJy1Rb2xkJykKKyAgICAgICAgc2VsZi52ZXJpZnlfdmFsaWRfZmxhZygnLVFuZXcnKQorICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctUXdhcm4nKQorICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctUXdhcm5hbGwnKQorCisgICAgZGVmIHRlc3Rfc2l0ZV9mbGFnKHNlbGYpOgorICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctUycpCisKKyAgICBkZWYgdGVzdF91c2FnZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJbigndXNhZ2UnLCBzZWxmLnN0YXJ0X3B5dGhvbignLWgnKSkKKworICAgIGRlZiB0ZXN0X3ZlcnNpb24oc2VsZik6CisgICAgICAgIHZlcnNpb24gPSAnUHl0aG9uICVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnN0YXJ0X3B5dGhvbignLVYnKS5zdGFydHN3aXRoKHZlcnNpb24pKQorCisgICAgZGVmIHRlc3RfcnVuX21vZHVsZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGV4cGVjdGVkIG9wZXJhdGlvbiBvZiB0aGUgJy1tJyBzd2l0Y2gKKyAgICAgICAgIyBTd2l0Y2ggbmVlZHMgYW4gYXJndW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLmV4aXRfY29kZSgnLW0nKSwgMCkKKyAgICAgICAgIyBDaGVjayB3ZSBnZXQgYW4gZXJyb3IgZm9yIGEgbm9uZXhpc3RlbnQgbW9kdWxlCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoCisgICAgICAgICAgICBzZWxmLmV4aXRfY29kZSgnLW0nLCAnZm5vcmQ0MzUyMHh5eicpLAorICAgICAgICAgICAgMCkKKyAgICAgICAgIyBDaGVjayB0aGUgcnVucHkgbW9kdWxlIGFsc28gZ2l2ZXMgYW4gZXJyb3IgZm9yCisgICAgICAgICMgYSBub25leGlzdGVudCBtb2R1bGUKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuZXhpdF9jb2RlKCctbScsICdydW5weScsICdmbm9yZDQzNTIweHl6JyksCisgICAgICAgICAgICAwKQorICAgICAgICAjIEFsbCBnb29kIGlmIG1vZHVsZSBpcyBsb2NhdGVkIGFuZCBydW4gc3VjY2Vzc2Z1bGx5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLmV4aXRfY29kZSgnLW0nLCAndGltZWl0JywgJy1uJywgJzEnKSwKKyAgICAgICAgICAgIDApCisKKyAgICBkZWYgdGVzdF9ydW5fbW9kdWxlX2J1ZzE3NjQ0MDcoc2VsZik6CisgICAgICAgICMgLW0gYW5kIC1pIG5lZWQgdG8gcGxheSB3ZWxsIHRvZ2V0aGVyCisgICAgICAgICMgUnVucyB0aGUgdGltZWl0IG1vZHVsZSBhbmQgY2hlY2tzIHRoZSBfX21haW5fXworICAgICAgICAjIG5hbWVzcGFjZSBoYXMgYmVlbiBwb3B1bGF0ZWQgYXBwcm9wcmlhdGVseQorICAgICAgICBwID0gc3Bhd25fcHl0aG9uKCctaScsICctbScsICd0aW1laXQnLCAnLW4nLCAnMScpCisgICAgICAgIHAuc3RkaW4ud3JpdGUoJ1RpbWVyXG4nKQorICAgICAgICBwLnN0ZGluLndyaXRlKCdleGl0KClcbicpCisgICAgICAgIGRhdGEgPSBraWxsX3B5dGhvbihwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5zdGFydHN3aXRoKCcxIGxvb3AnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignX19tYWluX18uVGltZXInLCBkYXRhKQorCisgICAgZGVmIHRlc3RfcnVuX2NvZGUoc2VsZik6CisgICAgICAgICMgVGVzdCBleHBlY3RlZCBvcGVyYXRpb24gb2YgdGhlICctYycgc3dpdGNoCisgICAgICAgICMgU3dpdGNoIG5lZWRzIGFuIGFyZ3VtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5leGl0X2NvZGUoJy1jJyksIDApCisgICAgICAgICMgQ2hlY2sgd2UgZ2V0IGFuIGVycm9yIGZvciBhbiB1bmNhdWdodCBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuZXhpdF9jb2RlKCctYycsICdyYWlzZSBFeGNlcHRpb24nKSwKKyAgICAgICAgICAgIDApCisgICAgICAgICMgQWxsIGdvb2QgaWYgZXhlY3V0aW9uIGlzIHN1Y2Nlc3NmdWwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuZXhpdF9jb2RlKCctYycsICdwYXNzJyksCisgICAgICAgICAgICAwKQorCisgICAgZGVmIHRlc3RfaGFzaF9yYW5kb21pemF0aW9uKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IC1SIGVuYWJsZXMgaGFzaCByYW5kb21pemF0aW9uOgorICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctUicpCisgICAgICAgIGhhc2hlcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIpOgorICAgICAgICAgICAgY29kZSA9ICdwcmludChoYXNoKCJzcGFtIikpJworICAgICAgICAgICAgZGF0YSA9IHNlbGYuc3RhcnRfcHl0aG9uKCctUicsICctYycsIGNvZGUpCisgICAgICAgICAgICBoYXNoZXMuYXBwZW5kKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaGFzaGVzWzBdLCBoYXNoZXNbMV0pCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBzeXMuZmxhZ3MgY29udGFpbnMgaGFzaF9yYW5kb21pemF0aW9uCisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHN5czsgcHJpbnQgc3lzLmZsYWdzJworICAgICAgICBkYXRhID0gc2VsZi5zdGFydF9weXRob24oJy1SJywgJy1jJywgY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdoYXNoX3JhbmRvbWl6YXRpb249MScgaW4gZGF0YSkKKworICAgIGRlZiB0ZXN0X2RlbF9fX21haW5fXyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTUwMDE6IFB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzKCkgZGlkIGNyYXNoIGJlY2F1c2UgaXQga2VwdCBhCisgICAgICAgICMgYm9ycm93ZWQgcmVmZXJlbmNlIHRvIHRoZSBkaWN0IG9mIF9fbWFpbl9fIG1vZHVsZSBhbmQgbGF0ZXIgbW9kaWZ5CisgICAgICAgICMgdGhlIGRpY3Qgd2hlcmVhcyB0aGUgbW9kdWxlIHdhcyBkZXN0cm95ZWQKKyAgICAgICAgZmlsZW5hbWUgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRlc3QudGVzdF9zdXBwb3J0LnVubGluaywgZmlsZW5hbWUpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInciKSBhcyBzY3JpcHQ6CisgICAgICAgICAgICBwcmludCA+PnNjcmlwdCwgImltcG9ydCBzeXMiCisgICAgICAgICAgICBwcmludCA+PnNjcmlwdCwgImRlbCBzeXMubW9kdWxlc1snX19tYWluX18nXSIKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9vayhmaWxlbmFtZSkKKworICAgIGRlZiB0ZXN0X3Vua25vd25fb3B0aW9ucyhzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctRScsICcteicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidVbmtub3duIG9wdGlvbjogLXonLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLnNwbGl0bGluZXMoKS5jb3VudChiJ1Vua25vd24gb3B0aW9uOiAteicpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgb3V0KQorICAgICAgICAjIEFkZCAid2l0aG91dD0nLUUnIiB0byBwcmV2ZW50IF9hc3NlcnRfcHl0aG9uIHRvIGFwcGVuZCAtRQorICAgICAgICAjIHRvIGVudl92YXJzIGFuZCBjaGFuZ2UgdGhlIG91dHB1dCBvZiBzdGRlcnIKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCcteicsIHdpdGhvdXQ9Jy1FJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1Vua25vd24gb3B0aW9uOiAteicsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuc3BsaXRsaW5lcygpLmNvdW50KGInVW5rbm93biBvcHRpb246IC16JyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBvdXQpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgnLWEnLCAnLXonLCB3aXRob3V0PSctRScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidVbmtub3duIG9wdGlvbjogLWEnLCBlcnIpCisgICAgICAgICMgb25seSB0aGUgZmlyc3QgdW5rbm93biBvcHRpb24gaXMgcmVwb3J0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiJ1Vua25vd24gb3B0aW9uOiAteicsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuc3BsaXRsaW5lcygpLmNvdW50KGInVW5rbm93biBvcHRpb246IC1hJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBvdXQpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDbWRMaW5lVGVzdCkKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMDUyMjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jbWRfbGluZV9zY3JpcHQucHkKQEAgLTAsMCArMSwyMjkgQEAKKyMgVGVzdHMgY29tbWFuZCBsaW5lIGV4ZWN1dGlvbiBvZiBzY3JpcHRzCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0Citmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgKHJ1bl9weXRob24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfZGlyLCBtYWtlX3NjcmlwdCwgY29tcGlsZV9zY3JpcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF9weXRob25fZmFpbHVyZSwgbWFrZV9wa2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfemlwX3NjcmlwdCwgbWFrZV96aXBfcGtnKQorCit2ZXJib3NlID0gdGVzdC50ZXN0X3N1cHBvcnQudmVyYm9zZQorCisKK2V4YW1wbGVfYXJncyA9IFsndGVzdDEnLCAndGVzdDInLCAndGVzdDMnXQorCit0ZXN0X3NvdXJjZSA9ICIiIlwKKyMgU2NyaXB0IG1heSBiZSBydW4gd2l0aCBvcHRpbWlzYXRpb24gZW5hYmxlZCwgc28gZG9uJ3QgcmVseSBvbiBhc3NlcnQKKyMgc3RhdGVtZW50cyBiZWluZyBleGVjdXRlZAorZGVmIGFzc2VydEVxdWFsKGxocywgcmhzKToKKyAgICBpZiBsaHMgIT0gcmhzOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignJXIgIT0gJXInICUgKGxocywgcmhzKSkKK2RlZiBhc3NlcnRJZGVudGljYWwobGhzLCByaHMpOgorICAgIGlmIGxocyBpcyBub3QgcmhzOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignJXIgaXMgbm90ICVyJyAlIChsaHMsIHJocykpCisjIENoZWNrIGJhc2ljIGNvZGUgZXhlY3V0aW9uCityZXN1bHQgPSBbJ1RvcCBsZXZlbCBhc3NpZ25tZW50J10KK2RlZiBmKCk6CisgICAgcmVzdWx0LmFwcGVuZCgnTG93ZXIgbGV2ZWwgcmVmZXJlbmNlJykKK2YoKQorYXNzZXJ0RXF1YWwocmVzdWx0LCBbJ1RvcCBsZXZlbCBhc3NpZ25tZW50JywgJ0xvd2VyIGxldmVsIHJlZmVyZW5jZSddKQorIyBDaGVjayBwb3B1bGF0aW9uIG9mIG1hZ2ljIHZhcmlhYmxlcworYXNzZXJ0RXF1YWwoX19uYW1lX18sICdfX21haW5fXycpCitwcmludCAnX19maWxlX189PSVyJyAlIF9fZmlsZV9fCitwcmludCAnX19wYWNrYWdlX189PSVyJyAlIF9fcGFja2FnZV9fCisjIENoZWNrIHRoZSBzeXMgbW9kdWxlCitpbXBvcnQgc3lzCithc3NlcnRJZGVudGljYWwoZ2xvYmFscygpLCBzeXMubW9kdWxlc1tfX25hbWVfX10uX19kaWN0X18pCitwcmludCAnc3lzLmFyZ3ZbMF09PSVyJyAlIHN5cy5hcmd2WzBdCisiIiIKKworZGVmIF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlPXRlc3Rfc291cmNlKToKKyAgICByZXR1cm4gbWFrZV9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UpCisKK2RlZiBfbWFrZV90ZXN0X3ppcF9wa2coemlwX2RpciwgemlwX2Jhc2VuYW1lLCBwa2dfbmFtZSwgc2NyaXB0X2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9dGVzdF9zb3VyY2UsIGRlcHRoPTEpOgorICAgIHJldHVybiBtYWtlX3ppcF9wa2coemlwX2RpciwgemlwX2Jhc2VuYW1lLCBwa2dfbmFtZSwgc2NyaXB0X2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLCBkZXB0aCkKKworIyBUaGVyZSdzIG5vIGVhc3kgd2F5IHRvIHBhc3MgdGhlIHNjcmlwdCBkaXJlY3RvcnkgaW4gdG8gZ2V0CisjIC1tIHRvIHdvcmsgKGF2b2lkaW5nIHRoYXQgaXMgdGhlIHdob2xlIHBvaW50IG9mIG1ha2luZworIyBkaXJlY3RvcmllcyBhbmQgemlwZmlsZXMgZXhlY3V0YWJsZSEpCisjIFNvIHdlIGZha2UgaXQgZm9yIHRlc3RpbmcgcHVycG9zZXMgd2l0aCBhIGN1c3RvbSBsYXVuY2ggc2NyaXB0CitsYXVuY2hfc291cmNlID0gIiIiXAoraW1wb3J0IHN5cywgb3MucGF0aCwgcnVucHkKK3N5cy5wYXRoLmluc2VydCgwLCAlcykKK3J1bnB5Ll9ydW5fbW9kdWxlX2FzX21haW4oJXIpCisiIiIKKworZGVmIF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBtb2R1bGVfbmFtZSwgcGF0aD1Ob25lKToKKyAgICBpZiBwYXRoIGlzIE5vbmU6CisgICAgICAgIHBhdGggPSAib3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSIKKyAgICBlbHNlOgorICAgICAgICBwYXRoID0gcmVwcihwYXRoKQorICAgIHNvdXJjZSA9IGxhdW5jaF9zb3VyY2UgJSAocGF0aCwgbW9kdWxlX25hbWUpCisgICAgcmV0dXJuIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlKQorCitjbGFzcyBDbWRMaW5lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIF9jaGVja19zY3JpcHQoc2VsZiwgc2NyaXB0X25hbWUsIGV4cGVjdGVkX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYXJndjAsIGV4cGVjdGVkX3BhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNtZF9saW5lX3N3aXRjaGVzKToKKyAgICAgICAgcnVuX2FyZ3MgPSBjbWRfbGluZV9zd2l0Y2hlcyArIChzY3JpcHRfbmFtZSwpCisgICAgICAgIGV4aXRfY29kZSwgZGF0YSA9IHJ1bl9weXRob24oKnJ1bl9hcmdzKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ091dHB1dCBmcm9tIHRlc3Qgc2NyaXB0ICVyOicgJSBzY3JpcHRfbmFtZQorICAgICAgICAgICAgcHJpbnQgZGF0YQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4aXRfY29kZSwgMCkKKyAgICAgICAgcHJpbnRlZF9maWxlID0gJ19fZmlsZV9fPT0lcicgJSBleHBlY3RlZF9maWxlCisgICAgICAgIHByaW50ZWRfYXJndjAgPSAnc3lzLmFyZ3ZbMF09PSVyJyAlIGV4cGVjdGVkX2FyZ3YwCisgICAgICAgIHByaW50ZWRfcGFja2FnZSA9ICdfX3BhY2thZ2VfXz09JXInICUgZXhwZWN0ZWRfcGFja2FnZQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ0V4cGVjdGVkIG91dHB1dDonCisgICAgICAgICAgICBwcmludCBwcmludGVkX2ZpbGUKKyAgICAgICAgICAgIHByaW50IHByaW50ZWRfcGFja2FnZQorICAgICAgICAgICAgcHJpbnQgcHJpbnRlZF9hcmd2MAorICAgICAgICBzZWxmLmFzc2VydEluKHByaW50ZWRfZmlsZSwgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwcmludGVkX3BhY2thZ2UsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocHJpbnRlZF9hcmd2MCwgZGF0YSkKKworICAgIGRlZiBfY2hlY2tfaW1wb3J0X2Vycm9yKHNlbGYsIHNjcmlwdF9uYW1lLCBleHBlY3RlZF9tc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNtZF9saW5lX3N3aXRjaGVzKToKKyAgICAgICAgcnVuX2FyZ3MgPSBjbWRfbGluZV9zd2l0Y2hlcyArIChzY3JpcHRfbmFtZSwpCisgICAgICAgIGV4aXRfY29kZSwgZGF0YSA9IHJ1bl9weXRob24oKnJ1bl9hcmdzKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ091dHB1dCBmcm9tIHRlc3Qgc2NyaXB0ICVyOicgJSBzY3JpcHRfbmFtZQorICAgICAgICAgICAgcHJpbnQgZGF0YQorICAgICAgICAgICAgcHJpbnQgJ0V4cGVjdGVkIG91dHB1dDogJXInICUgZXhwZWN0ZWRfbXNnCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWRfbXNnLCBkYXRhKQorCisgICAgZGVmIHRlc3RfYmFzaWNfc2NyaXB0KHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ3NjcmlwdCcpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X25hbWUsIHNjcmlwdF9uYW1lLCBzY3JpcHRfbmFtZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NjcmlwdF9jb21waWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnKQorICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IGNvbXBpbGVfc2NyaXB0KHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGNvbXBpbGVkX25hbWUsIGNvbXBpbGVkX25hbWUsIGNvbXBpbGVkX25hbWUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9uYW1lLCBzY3JpcHRfZGlyLCAnJykKKworICAgIGRlZiB0ZXN0X2RpcmVjdG9yeV9jb21waWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdfX21haW5fXycpCisgICAgICAgICAgICBjb21waWxlZF9uYW1lID0gY29tcGlsZV9zY3JpcHQoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBvcy5yZW1vdmUoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X2RpciwgY29tcGlsZWRfbmFtZSwgc2NyaXB0X2RpciwgJycpCisKKyAgICBkZWYgdGVzdF9kaXJlY3RvcnlfZXJyb3Ioc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbXNnID0gImNhbid0IGZpbmQgJ19fbWFpbl9fJyBtb2R1bGUgaW4gJXIiICUgc2NyaXB0X2RpcgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfaW1wb3J0X2Vycm9yKHNjcmlwdF9kaXIsIG1zZykKKworICAgIGRlZiB0ZXN0X3ppcGZpbGUoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nKQorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lLCBydW5fbmFtZSwgemlwX25hbWUsICcnKQorCisgICAgZGVmIHRlc3RfemlwZmlsZV9jb21waWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdfX21haW5fXycpCisgICAgICAgICAgICBjb21waWxlZF9uYW1lID0gY29tcGlsZV9zY3JpcHQoc2NyaXB0X25hbWUpCisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgY29tcGlsZWRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdCh6aXBfbmFtZSwgcnVuX25hbWUsIHppcF9uYW1lLCAnJykKKworICAgIGRlZiB0ZXN0X3ppcGZpbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnbm90X21haW4nKQorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgbXNnID0gImNhbid0IGZpbmQgJ19fbWFpbl9fJyBtb2R1bGUgaW4gJXIiICUgemlwX25hbWUKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2ltcG9ydF9lcnJvcih6aXBfbmFtZSwgbXNnKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2luX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpcikKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ3NjcmlwdCcpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZy5zY3JpcHQnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lLCBzY3JpcHRfbmFtZSwgc2NyaXB0X25hbWUsICd0ZXN0X3BrZycpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfaW5fcGFja2FnZV9pbl96aXBmaWxlKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IF9tYWtlX3Rlc3RfemlwX3BrZyhzY3JpcHRfZGlyLCAndGVzdF96aXAnLCAndGVzdF9wa2cnLCAnc2NyaXB0JykKKyAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnLnNjcmlwdCcsIHppcF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lLCBydW5fbmFtZSwgcnVuX25hbWUsICd0ZXN0X3BrZycpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfaW5fc3VicGFja2FnZV9pbl96aXBmaWxlKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IF9tYWtlX3Rlc3RfemlwX3BrZyhzY3JpcHRfZGlyLCAndGVzdF96aXAnLCAndGVzdF9wa2cnLCAnc2NyaXB0JywgZGVwdGg9MikKKyAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnLnRlc3RfcGtnLnNjcmlwdCcsIHppcF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lLCBydW5fbmFtZSwgcnVuX25hbWUsICd0ZXN0X3BrZy50ZXN0X3BrZycpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHBrZ19kaXIsICdfX21haW5fXycpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQobGF1bmNoX25hbWUsIHNjcmlwdF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCAndGVzdF9wa2cnKQorCisgICAgZGVmIHRlc3RfcGFja2FnZV9jb21waWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChwa2dfZGlyLCAnX19tYWluX18nKQorICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IGNvbXBpbGVfc2NyaXB0KHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgbGF1bmNoX25hbWUgPSBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsICdsYXVuY2gnLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lLCBjb21waWxlZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUsICd0ZXN0X3BrZycpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlX2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCisgICAgICAgICAgICBtc2cgPSAoIid0ZXN0X3BrZycgaXMgYSBwYWNrYWdlIGFuZCBjYW5ub3QgIgorICAgICAgICAgICAgICAgICAgICJiZSBkaXJlY3RseSBleGVjdXRlZCIpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBzZWxmLl9jaGVja19pbXBvcnRfZXJyb3IobGF1bmNoX25hbWUsIG1zZykKKworICAgIGRlZiB0ZXN0X3BhY2thZ2VfcmVjdXJzaW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCisgICAgICAgICAgICBtYWluX2RpciA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAnX19tYWluX18nKQorICAgICAgICAgICAgbWFrZV9wa2cobWFpbl9kaXIpCisgICAgICAgICAgICBtc2cgPSAoIkNhbm5vdCB1c2UgcGFja2FnZSBhcyBfX21haW5fXyBtb2R1bGU7ICIKKyAgICAgICAgICAgICAgICAgICAiJ3Rlc3RfcGtnJyBpcyBhIHBhY2thZ2UgYW5kIGNhbm5vdCAiCisgICAgICAgICAgICAgICAgICAgImJlIGRpcmVjdGx5IGV4ZWN1dGVkIikKKyAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2ltcG9ydF9lcnJvcihsYXVuY2hfbmFtZSwgbXNnKQorCisgICAgZGVmIHRlc3RfZGFzaF9tX2Vycm9yX2NvZGVfaXNfb25lKHNlbGYpOgorICAgICAgICAjIElmIGEgbW9kdWxlIGlzIGludm9rZWQgd2l0aCB0aGUgLW0gY29tbWFuZCBsaW5lIGZsYWcKKyAgICAgICAgIyBhbmQgcmVzdWx0cyBpbiBhbiBlcnJvciB0aGF0IHRoZSByZXR1cm4gY29kZSB0byB0aGUKKyAgICAgICAgIyBzaGVsbCBpcyAnMScKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChwa2dfZGlyLCAnb3RoZXInLCAiaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzogcmFpc2UgVmFsdWVFcnJvciIpCisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ3Rlc3RfcGtnLm90aGVyJywgKmV4YW1wbGVfYXJncykKKyAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOgorICAgICAgICAgICAgICAgIHByaW50KG91dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDEpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDbWRMaW5lVGVzdCkKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29kZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdhZGY1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGUucHkKQEAgLTAsMCArMSwxNDcgQEAKKyIiIlRoaXMgbW9kdWxlIGluY2x1ZGVzIHRlc3RzIG9mIHRoZSBjb2RlIG9iamVjdCByZXByZXNlbnRhdGlvbi4KKworPj4+IGRlZiBmKHgpOgorLi4uICAgICBkZWYgZyh5KToKKy4uLiAgICAgICAgIHJldHVybiB4ICsgeQorLi4uICAgICByZXR1cm4gZworLi4uCisKKz4+PiBkdW1wKGYuZnVuY19jb2RlKQorbmFtZTogZgorYXJnY291bnQ6IDEKK25hbWVzOiAoKQordmFybmFtZXM6ICgneCcsICdnJykKK2NlbGx2YXJzOiAoJ3gnLCkKK2ZyZWV2YXJzOiAoKQorbmxvY2FsczogMgorZmxhZ3M6IDMKK2NvbnN0czogKCdOb25lJywgJzxjb2RlIG9iamVjdCBnPicpCisKKz4+PiBkdW1wKGYoNCkuZnVuY19jb2RlKQorbmFtZTogZworYXJnY291bnQ6IDEKK25hbWVzOiAoKQordmFybmFtZXM6ICgneScsKQorY2VsbHZhcnM6ICgpCitmcmVldmFyczogKCd4JywpCitubG9jYWxzOiAxCitmbGFnczogMTkKK2NvbnN0czogKCdOb25lJywpCisKKz4+PiBkZWYgaCh4LCB5KToKKy4uLiAgICAgYSA9IHggKyB5CisuLi4gICAgIGIgPSB4IC0geQorLi4uICAgICBjID0gYSAqIGIKKy4uLiAgICAgcmV0dXJuIGMKKy4uLgorPj4+IGR1bXAoaC5mdW5jX2NvZGUpCituYW1lOiBoCithcmdjb3VudDogMgorbmFtZXM6ICgpCit2YXJuYW1lczogKCd4JywgJ3knLCAnYScsICdiJywgJ2MnKQorY2VsbHZhcnM6ICgpCitmcmVldmFyczogKCkKK25sb2NhbHM6IDUKK2ZsYWdzOiA2NworY29uc3RzOiAoJ05vbmUnLCkKKworPj4+IGRlZiBhdHRycyhvYmopOgorLi4uICAgICBwcmludCBvYmouYXR0cjEKKy4uLiAgICAgcHJpbnQgb2JqLmF0dHIyCisuLi4gICAgIHByaW50IG9iai5hdHRyMworCis+Pj4gZHVtcChhdHRycy5mdW5jX2NvZGUpCituYW1lOiBhdHRycworYXJnY291bnQ6IDEKK25hbWVzOiAoJ2F0dHIxJywgJ2F0dHIyJywgJ2F0dHIzJykKK3Zhcm5hbWVzOiAoJ29iaicsKQorY2VsbHZhcnM6ICgpCitmcmVldmFyczogKCkKK25sb2NhbHM6IDEKK2ZsYWdzOiA2NworY29uc3RzOiAoJ05vbmUnLCkKKworPj4+IGRlZiBvcHRpbWl6ZV9hd2F5KCk6CisuLi4gICAgICdkb2Mgc3RyaW5nJworLi4uICAgICAnbm90IGEgZG9jc3RyaW5nJworLi4uICAgICA1MworLi4uICAgICA1M0wKKworPj4+IGR1bXAob3B0aW1pemVfYXdheS5mdW5jX2NvZGUpCituYW1lOiBvcHRpbWl6ZV9hd2F5Cithcmdjb3VudDogMAorbmFtZXM6ICgpCit2YXJuYW1lczogKCkKK2NlbGx2YXJzOiAoKQorZnJlZXZhcnM6ICgpCitubG9jYWxzOiAwCitmbGFnczogNjcKK2NvbnN0czogKCInZG9jIHN0cmluZyciLCAnTm9uZScpCisKKyIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCitpbXBvcnQgX3Rlc3RjYXBpCisKKworZGVmIGNvbnN0cyh0KToKKyAgICAiIiJZaWVsZCBhIGRvY3Rlc3Qtc2FmZSBzZXF1ZW5jZSBvZiBvYmplY3QgcmVwcnMuIiIiCisgICAgZm9yIGVsdCBpbiB0OgorICAgICAgICByID0gcmVwcihlbHQpCisgICAgICAgIGlmIHIuc3RhcnRzd2l0aCgiPGNvZGUgb2JqZWN0Iik6CisgICAgICAgICAgICB5aWVsZCAiPGNvZGUgb2JqZWN0ICVzPiIgJSBlbHQuY29fbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgeWllbGQgcgorCitkZWYgZHVtcChjbyk6CisgICAgIiIiUHJpbnQgb3V0IGEgdGV4dCByZXByZXNlbnRhdGlvbiBvZiBhIGNvZGUgb2JqZWN0LiIiIgorICAgIGZvciBhdHRyIGluIFsibmFtZSIsICJhcmdjb3VudCIsICJuYW1lcyIsICJ2YXJuYW1lcyIsICJjZWxsdmFycyIsCisgICAgICAgICAgICAgICAgICJmcmVldmFycyIsICJubG9jYWxzIiwgImZsYWdzIl06CisgICAgICAgIHByaW50ICIlczogJXMiICUgKGF0dHIsIGdldGF0dHIoY28sICJjb18iICsgYXR0cikpCisgICAgcHJpbnQgImNvbnN0czoiLCB0dXBsZShjb25zdHMoY28uY29fY29uc3RzKSkKKworCitjbGFzcyBDb2RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9uZXdlbXB0eShzZWxmKToKKyAgICAgICAgY28gPSBfdGVzdGNhcGkuY29kZV9uZXdlbXB0eSgiZmlsZW5hbWUiLCAiZnVuY25hbWUiLCAxNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjby5jb19maWxlbmFtZSwgImZpbGVuYW1lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjby5jb19uYW1lLCAiZnVuY25hbWUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvLmNvX2ZpcnN0bGluZW5vLCAxNSkKKworCitjbGFzcyBDb2RlV2Vha1JlZlRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIGEgY29kZSBvYmplY3QgaW4gYSBjbGVhbiBlbnZpcm9ubWVudCBzbyB0aGF0IHdlIGtub3cgd2UgaGF2ZQorICAgICAgICAjIHRoZSBvbmx5IHJlZmVyZW5jZSB0byBpdCBsZWZ0LgorICAgICAgICBuYW1lc3BhY2UgPSB7fQorICAgICAgICBleGVjICJkZWYgZigpOiBwYXNzIiBpbiBnbG9iYWxzKCksIG5hbWVzcGFjZQorICAgICAgICBmID0gbmFtZXNwYWNlWyJmIl0KKyAgICAgICAgZGVsIG5hbWVzcGFjZQorCisgICAgICAgIHNlbGYuY2FsbGVkID0gRmFsc2UKKyAgICAgICAgZGVmIGNhbGxiYWNrKGNvZGUpOgorICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCisKKyAgICAgICAgIyBmIGlzIG5vdyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uLCBhbmQgdGhyb3VnaCBpdCwgdGhlIGNvZGUKKyAgICAgICAgIyBvYmplY3QuICBXaGlsZSB3ZSBob2xkIGl0LCBjaGVjayB0aGF0IHdlIGNhbiBjcmVhdGUgYSB3ZWFrcmVmIGFuZAorICAgICAgICAjIGRlcmVmIGl0LiAgVGhlbiBkZWxldGUgaXQsIGFuZCBjaGVjayB0aGF0IHRoZSBjYWxsYmFjayBnZXRzIGNhbGxlZCBhbmQKKyAgICAgICAgIyB0aGUgcmVmZXJlbmNlIGRpZXMuCisgICAgICAgIGNvZGVyZWYgPSB3ZWFrcmVmLnJlZihmLl9fY29kZV9fLCBjYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJvb2woY29kZXJlZigpKSkKKyAgICAgICAgZGVsIGYKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShib29sKGNvZGVyZWYoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNhbGxlZCkKKworCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX2RvY3Rlc3QsIHJ1bl91bml0dGVzdAorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9jb2RlCisgICAgcnVuX2RvY3Rlc3QodGVzdF9jb2RlLCB2ZXJib3NlKQorICAgIHJ1bl91bml0dGVzdChDb2RlVGVzdCwgQ29kZVdlYWtSZWZUZXN0KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFjMmRmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5CkBAIC0wLDAgKzEsODA0IEBACitpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQsIHVuaXR0ZXN0CitpbXBvcnQgc3lzLCBjb2RlY3MsIGh0bWxlbnRpdHlkZWZzLCB1bmljb2RlZGF0YQorCitjbGFzcyBQb3NSZXR1cm46CisgICAgIyB0aGlzIGNhbiBiZSB1c2VkIGZvciBjb25maWd1cmFibGUgY2FsbGJhY2tzCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYucG9zID0gMAorCisgICAgZGVmIGhhbmRsZShzZWxmLCBleGMpOgorICAgICAgICBvbGRwb3MgPSBzZWxmLnBvcworICAgICAgICByZWFscG9zID0gb2xkcG9zCisgICAgICAgIGlmIHJlYWxwb3M8MDoKKyAgICAgICAgICAgIHJlYWxwb3MgPSBsZW4oZXhjLm9iamVjdCkgKyByZWFscG9zCisgICAgICAgICMgaWYgd2UgZG9uJ3QgYWR2YW5jZSB0aGlzIHRpbWUsIHRlcm1pbmF0ZSBvbiB0aGUgbmV4dCBjYWxsCisgICAgICAgICMgb3RoZXJ3aXNlIHdlJ2QgZ2V0IGFuIGVuZGxlc3MgbG9vcAorICAgICAgICBpZiByZWFscG9zIDw9IGV4Yy5zdGFydDoKKyAgICAgICAgICAgIHNlbGYucG9zID0gbGVuKGV4Yy5vYmplY3QpCisgICAgICAgIHJldHVybiAodSI8Pz4iLCBvbGRwb3MpCisKKyMgQSBVbmljb2RlRW5jb2RlRXJyb3Igb2JqZWN0IHdpdGggYSBiYWQgc3RhcnQgYXR0cmlidXRlCitjbGFzcyBCYWRTdGFydFVuaWNvZGVFbmNvZGVFcnJvcihVbmljb2RlRW5jb2RlRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgVW5pY29kZUVuY29kZUVycm9yLl9faW5pdF9fKHNlbGYsICJhc2NpaSIsIHUiIiwgMCwgMSwgImJhZCIpCisgICAgICAgIHNlbGYuc3RhcnQgPSBbXQorCisjIEEgVW5pY29kZUVuY29kZUVycm9yIG9iamVjdCB3aXRoIGEgYmFkIG9iamVjdCBhdHRyaWJ1dGUKK2NsYXNzIEJhZE9iamVjdFVuaWNvZGVFbmNvZGVFcnJvcihVbmljb2RlRW5jb2RlRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgVW5pY29kZUVuY29kZUVycm9yLl9faW5pdF9fKHNlbGYsICJhc2NpaSIsIHUiIiwgMCwgMSwgImJhZCIpCisgICAgICAgIHNlbGYub2JqZWN0ID0gW10KKworIyBBIFVuaWNvZGVEZWNvZGVFcnJvciBvYmplY3Qgd2l0aG91dCBhbiBlbmQgYXR0cmlidXRlCitjbGFzcyBOb0VuZFVuaWNvZGVEZWNvZGVFcnJvcihVbmljb2RlRGVjb2RlRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgVW5pY29kZURlY29kZUVycm9yLl9faW5pdF9fKHNlbGYsICJhc2NpaSIsICIiLCAwLCAxLCAiYmFkIikKKyAgICAgICAgZGVsIHNlbGYuZW5kCisKKyMgQSBVbmljb2RlRGVjb2RlRXJyb3Igb2JqZWN0IHdpdGggYSBiYWQgb2JqZWN0IGF0dHJpYnV0ZQorY2xhc3MgQmFkT2JqZWN0VW5pY29kZURlY29kZUVycm9yKFVuaWNvZGVEZWNvZGVFcnJvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IuX19pbml0X18oc2VsZiwgImFzY2lpIiwgIiIsIDAsIDEsICJiYWQiKQorICAgICAgICBzZWxmLm9iamVjdCA9IFtdCisKKyMgQSBVbmljb2RlVHJhbnNsYXRlRXJyb3Igb2JqZWN0IHdpdGhvdXQgYSBzdGFydCBhdHRyaWJ1dGUKK2NsYXNzIE5vU3RhcnRVbmljb2RlVHJhbnNsYXRlRXJyb3IoVW5pY29kZVRyYW5zbGF0ZUVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvci5fX2luaXRfXyhzZWxmLCB1IiIsIDAsIDEsICJiYWQiKQorICAgICAgICBkZWwgc2VsZi5zdGFydAorCisjIEEgVW5pY29kZVRyYW5zbGF0ZUVycm9yIG9iamVjdCB3aXRob3V0IGFuIGVuZCBhdHRyaWJ1dGUKK2NsYXNzIE5vRW5kVW5pY29kZVRyYW5zbGF0ZUVycm9yKFVuaWNvZGVUcmFuc2xhdGVFcnJvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IuX19pbml0X18oc2VsZiwgIHUiIiwgMCwgMSwgImJhZCIpCisgICAgICAgIGRlbCBzZWxmLmVuZAorCisjIEEgVW5pY29kZVRyYW5zbGF0ZUVycm9yIG9iamVjdCB3aXRob3V0IGFuIG9iamVjdCBhdHRyaWJ1dGUKK2NsYXNzIE5vT2JqZWN0VW5pY29kZVRyYW5zbGF0ZUVycm9yKFVuaWNvZGVUcmFuc2xhdGVFcnJvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IuX19pbml0X18oc2VsZiwgdSIiLCAwLCAxLCAiYmFkIikKKyAgICAgICAgZGVsIHNlbGYub2JqZWN0CisKK2NsYXNzIENvZGVjQ2FsbGJhY2tUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3htbGNoYXJyZWZyZXBsYWNlKHNlbGYpOgorICAgICAgICAjIHJlcGxhY2UgdW5lbmNvZGFibGUgY2hhcmFjdGVycyB3aGljaCBudW1lcmljIGNoYXJhY3RlciBlbnRpdGllcy4KKyAgICAgICAgIyBGb3IgYXNjaWksIGxhdGluLTEgYW5kIGNoYXJtYXBzIHRoaXMgaXMgY29tcGxldGVseSBpbXBsZW1lbnRlZAorICAgICAgICAjIGluIEMgYW5kIHNob3VsZCBiZSByZWFzb25hYmx5IGZhc3QuCisgICAgICAgIHMgPSB1Ilx1MzBiOVx1MzBkMVx1MzBlMiBceGU0bmQgZWdncyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHMuZW5jb2RlKCJhc2NpaSIsICJ4bWxjaGFycmVmcmVwbGFjZSIpLAorICAgICAgICAgICAgIiYjMTI0NzM7JiMxMjQ5NzsmIzEyNTE0OyAmIzIyODtuZCBlZ2dzIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzLmVuY29kZSgibGF0aW4tMSIsICJ4bWxjaGFycmVmcmVwbGFjZSIpLAorICAgICAgICAgICAgIiYjMTI0NzM7JiMxMjQ5NzsmIzEyNTE0OyBceGU0bmQgZWdncyIKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfeG1sY2hhcm5hbWVyZXBsYWNlKHNlbGYpOgorICAgICAgICAjIFRoaXMgdGltZSB1c2UgYSBuYW1lZCBjaGFyYWN0ZXIgZW50aXR5IGZvciB1bmVuY29kYWJsZQorICAgICAgICAjIGNoYXJhY3RlcnMsIGlmIG9uZSBpcyBhdmFpbGFibGUuCisKKyAgICAgICAgZGVmIHhtbGNoYXJuYW1lcmVwbGFjZShleGMpOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBVbmljb2RlRW5jb2RlRXJyb3IpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlICVyIiAlIGV4YykKKyAgICAgICAgICAgIGwgPSBbXQorICAgICAgICAgICAgZm9yIGMgaW4gZXhjLm9iamVjdFtleGMuc3RhcnQ6ZXhjLmVuZF06CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsLmFwcGVuZCh1IiYlczsiICUgaHRtbGVudGl0eWRlZnMuY29kZXBvaW50Mm5hbWVbb3JkKGMpXSkKKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGwuYXBwZW5kKHUiJiMlZDsiICUgb3JkKGMpKQorICAgICAgICAgICAgcmV0dXJuICh1IiIuam9pbihsKSwgZXhjLmVuZCkKKworICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoCisgICAgICAgICAgICAidGVzdC54bWxjaGFybmFtZXJlcGxhY2UiLCB4bWxjaGFybmFtZXJlcGxhY2UpCisKKyAgICAgICAgc2luID0gdSJceGFiXHUyMTFjXHhiYiA9IFx1MjMyOVx1MTIzNFx1MjBhY1x1MjMyYSIKKyAgICAgICAgc291dCA9ICImbGFxdW87JnJlYWw7JnJhcXVvOyA9ICZsYW5nOyYjNDY2MDsmZXVybzsmcmFuZzsiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2luLmVuY29kZSgiYXNjaWkiLCAidGVzdC54bWxjaGFybmFtZXJlcGxhY2UiKSwgc291dCkKKyAgICAgICAgc291dCA9ICJceGFiJnJlYWw7XHhiYiA9ICZsYW5nOyYjNDY2MDsmZXVybzsmcmFuZzsiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2luLmVuY29kZSgibGF0aW4tMSIsICJ0ZXN0LnhtbGNoYXJuYW1lcmVwbGFjZSIpLCBzb3V0KQorICAgICAgICBzb3V0ID0gIlx4YWImcmVhbDtceGJiID0gJmxhbmc7JiM0NjYwO1x4YTQmcmFuZzsiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2luLmVuY29kZSgiaXNvLTg4NTktMTUiLCAidGVzdC54bWxjaGFybmFtZXJlcGxhY2UiKSwgc291dCkKKworICAgIGRlZiB0ZXN0X3VuaW5hbWVyZXBsYWNlKHNlbGYpOgorICAgICAgICAjIFdlJ3JlIHVzaW5nIHRoZSBuYW1lcyBmcm9tIHRoZSB1bmljb2RlIGRhdGFiYXNlIHRoaXMgdGltZSwKKyAgICAgICAgIyBhbmQgd2UncmUgZG9pbmcgInN5bnRheCBoaWdobGlnaHRpbmciIGhlcmUsIGkuZS4gd2UgaW5jbHVkZQorICAgICAgICAjIHRoZSByZXBsYWNlZCB0ZXh0IGluIEFOU0kgZXNjYXBlIHNlcXVlbmNlcy4gRm9yIHRoaXMgaXQgaXMKKyAgICAgICAgIyB1c2VmdWwgdGhhdCB0aGUgZXJyb3IgaGFuZGxlciBpcyBub3QgY2FsbGVkIGZvciBldmVyeSBzaW5nbGUKKyAgICAgICAgIyB1bmVuY29kYWJsZSBjaGFyYWN0ZXIsIGJ1dCBmb3IgYSBjb21wbGV0ZSBzZXF1ZW5jZSBvZgorICAgICAgICAjIHVuZW5jb2RhYmxlIGNoYXJhY3RlcnMsIG90aGVyd2lzZSB3ZSB3b3VsZCBvdXRwdXQgbWFueQorICAgICAgICAjIHVubmVjZXNzYXJ5IGVzY2FwZSBzZXF1ZW5jZXMuCisKKyAgICAgICAgZGVmIHVuaW5hbWVyZXBsYWNlKGV4Yyk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShleGMsIFVuaWNvZGVFbmNvZGVFcnJvcik6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgJXIiICUgZXhjKQorICAgICAgICAgICAgbCA9IFtdCisgICAgICAgICAgICBmb3IgYyBpbiBleGMub2JqZWN0W2V4Yy5zdGFydDpleGMuZW5kXToKKyAgICAgICAgICAgICAgICBsLmFwcGVuZCh1bmljb2RlZGF0YS5uYW1lKGMsIHUiMHgleCIgJSBvcmQoYykpKQorICAgICAgICAgICAgcmV0dXJuICh1IlwwMzNbMW0lc1wwMzNbMG0iICUgdSIsICIuam9pbihsKSwgZXhjLmVuZCkKKworICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoCisgICAgICAgICAgICAidGVzdC51bmluYW1lcmVwbGFjZSIsIHVuaW5hbWVyZXBsYWNlKQorCisgICAgICAgIHNpbiA9IHUiXHhhY1x1MTIzNFx1MjBhY1x1ODAwMCIKKyAgICAgICAgc291dCA9ICJcMDMzWzFtTk9UIFNJR04sIEVUSElPUElDIFNZTExBQkxFIFNFRSwgRVVSTyBTSUdOLCBDSksgVU5JRklFRCBJREVPR1JBUEgtODAwMFwwMzNbMG0iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2luLmVuY29kZSgiYXNjaWkiLCAidGVzdC51bmluYW1lcmVwbGFjZSIpLCBzb3V0KQorCisgICAgICAgIHNvdXQgPSAiXHhhY1wwMzNbMW1FVEhJT1BJQyBTWUxMQUJMRSBTRUUsIEVVUk8gU0lHTiwgQ0pLIFVOSUZJRUQgSURFT0dSQVBILTgwMDBcMDMzWzBtIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpbi5lbmNvZGUoImxhdGluLTEiLCAidGVzdC51bmluYW1lcmVwbGFjZSIpLCBzb3V0KQorCisgICAgICAgIHNvdXQgPSAiXHhhY1wwMzNbMW1FVEhJT1BJQyBTWUxMQUJMRSBTRUVcMDMzWzBtXHhhNFwwMzNbMW1DSksgVU5JRklFRCBJREVPR1JBUEgtODAwMFwwMzNbMG0iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2luLmVuY29kZSgiaXNvLTg4NTktMTUiLCAidGVzdC51bmluYW1lcmVwbGFjZSIpLCBzb3V0KQorCisgICAgZGVmIHRlc3RfYmFja3NsYXNoZXNjYXBlKHNlbGYpOgorICAgICAgICAjIERvZXMgdGhlIHNhbWUgYXMgdGhlICJ1bmljb2RlLWVzY2FwZSIgZW5jb2RpbmcsIGJ1dCB3aXRoIGRpZmZlcmVudAorICAgICAgICAjIGJhc2UgZW5jb2RpbmdzLgorICAgICAgICBzaW4gPSB1ImFceGFjXHUxMjM0XHUyMGFjXHU4MDAwIgorICAgICAgICBpZiBzeXMubWF4dW5pY29kZSA+IDB4ZmZmZjoKKyAgICAgICAgICAgIHNpbiArPSB1bmljaHIoc3lzLm1heHVuaWNvZGUpCisgICAgICAgIHNvdXQgPSAiYVxceGFjXFx1MTIzNFxcdTIwYWNcXHU4MDAwIgorICAgICAgICBpZiBzeXMubWF4dW5pY29kZSA+IDB4ZmZmZjoKKyAgICAgICAgICAgIHNvdXQgKz0gIlxcVSUwOHgiICUgc3lzLm1heHVuaWNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaW4uZW5jb2RlKCJhc2NpaSIsICJiYWNrc2xhc2hyZXBsYWNlIiksIHNvdXQpCisKKyAgICAgICAgc291dCA9ICJhXHhhY1xcdTEyMzRcXHUyMGFjXFx1ODAwMCIKKyAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgPiAweGZmZmY6CisgICAgICAgICAgICBzb3V0ICs9ICJcXFUlMDh4IiAlIHN5cy5tYXh1bmljb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2luLmVuY29kZSgibGF0aW4tMSIsICJiYWNrc2xhc2hyZXBsYWNlIiksIHNvdXQpCisKKyAgICAgICAgc291dCA9ICJhXHhhY1xcdTEyMzRceGE0XFx1ODAwMCIKKyAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgPiAweGZmZmY6CisgICAgICAgICAgICBzb3V0ICs9ICJcXFUlMDh4IiAlIHN5cy5tYXh1bmljb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2luLmVuY29kZSgiaXNvLTg4NTktMTUiLCAiYmFja3NsYXNocmVwbGFjZSIpLCBzb3V0KQorCisgICAgZGVmIHRlc3RfZGVjb2RpbmdfY2FsbGJhY2tzKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgYSB0ZXN0IGZvciBhIGRlY29kaW5nIGNhbGxiYWNrIGhhbmRsZXIKKyAgICAgICAgIyB0aGF0IGFsbG93cyB0aGUgZGVjb2Rpbmcgb2YgdGhlIGludmFsaWQgc2VxdWVuY2UKKyAgICAgICAgIyAiXHhjMFx4ODAiIGFuZCByZXR1cm5zICJceDAwIiBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXJyb3IuCisgICAgICAgICMgQWxsIG90aGVyIGlsbGVnYWwgc2VxdWVuY2VzIHdpbGwgYmUgaGFuZGxlZCBzdHJpY3RseS4KKyAgICAgICAgZGVmIHJlbGF4ZWR1dGY4KGV4Yyk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShleGMsIFVuaWNvZGVEZWNvZGVFcnJvcik6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgJXIiICUgZXhjKQorICAgICAgICAgICAgaWYgZXhjLm9iamVjdFtleGMuc3RhcnQ6ZXhjLnN0YXJ0KzJdID09ICJceGMwXHg4MCI6CisgICAgICAgICAgICAgICAgcmV0dXJuICh1Ilx4MDAiLCBleGMuc3RhcnQrMikgIyByZXRyeSBhZnRlciB0d28gYnl0ZXMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgZXhjCisKKyAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0LnJlbGF4ZWR1dGY4IiwgcmVsYXhlZHV0ZjgpCisKKyAgICAgICAgIyBhbGwgdGhlICJceGMwXHg4MCIgd2lsbCBiZSBkZWNvZGVkIHRvICJceDAwIgorICAgICAgICBzaW4gPSAiYVx4MDBiXHhjMFx4ODBjXHhjM1x4YmNceGMwXHg4MFx4YzBceDgwIgorICAgICAgICBzb3V0ID0gdSJhXHgwMGJceDAwY1x4ZmNceDAwXHgwMCIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaW4uZGVjb2RlKCJ1dGYtOCIsICJ0ZXN0LnJlbGF4ZWR1dGY4IiksIHNvdXQpCisKKyAgICAgICAgIyAiXHhjMFx4ODEiIGlzIG5vdCB2YWxpZCBhbmQgYSBVbmljb2RlRGVjb2RlRXJyb3Igd2lsbCBiZSByYWlzZWQKKyAgICAgICAgc2luID0gIlx4YzBceDgwXHhjMFx4ODEiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgc2luLmRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwgInRlc3QucmVsYXhlZHV0ZjgiKQorCisgICAgZGVmIHRlc3RfY2hhcm1hcGVuY29kZShzZWxmKToKKyAgICAgICAgIyBGb3IgY2hhcm1hcCBlbmNvZGluZ3MgdGhlIHJlcGxhY2VtZW50IHN0cmluZyB3aWxsIGJlCisgICAgICAgICMgbWFwcGVkIHRocm91Z2ggdGhlIGVuY29kaW5nIGFnYWluLiBUaGlzIG1lYW5zLCB0aGF0CisgICAgICAgICMgdG8gYmUgYWJsZSB0byB1c2UgZS5nLiB0aGUgInJlcGxhY2UiIGhhbmRsZXIsIHRoZQorICAgICAgICAjIGNoYXJtYXAgaGFzIHRvIGhhdmUgYSBtYXBwaW5nIGZvciAiPyIuCisgICAgICAgIGNoYXJtYXAgPSBkaWN0KFsgKG9yZChjKSwgMipjLnVwcGVyKCkpIGZvciBjIGluICJhYmNkZWZnaCJdKQorICAgICAgICBzaW4gPSB1ImFiYyIKKyAgICAgICAgc291dCA9ICJBQUJCQ0MiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmNoYXJtYXBfZW5jb2RlKHNpbiwgInN0cmljdCIsIGNoYXJtYXApWzBdLCBzb3V0KQorCisgICAgICAgIHNpbiA9IHUiYWJjQSIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBjb2RlY3MuY2hhcm1hcF9lbmNvZGUsIHNpbiwgInN0cmljdCIsIGNoYXJtYXApCisKKyAgICAgICAgY2hhcm1hcFtvcmQoIj8iKV0gPSAiWFlaIgorICAgICAgICBzaW4gPSB1ImFiY0RFRiIKKyAgICAgICAgc291dCA9ICJBQUJCQ0NYWVpYWVpYWVoiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmNoYXJtYXBfZW5jb2RlKHNpbiwgInJlcGxhY2UiLCBjaGFybWFwKVswXSwgc291dCkKKworICAgICAgICBjaGFybWFwW29yZCgiPyIpXSA9IHUiWFlaIgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5jaGFybWFwX2VuY29kZSwgc2luLCAicmVwbGFjZSIsIGNoYXJtYXApCisKKyAgICAgICAgY2hhcm1hcFtvcmQoIj8iKV0gPSB1IlhZWiIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MuY2hhcm1hcF9lbmNvZGUsIHNpbiwgInJlcGxhY2UiLCBjaGFybWFwKQorCisgICAgZGVmIHRlc3RfZGVjb2RldW5pY29kZWludGVybmFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFVuaWNvZGVEZWNvZGVFcnJvciwKKyAgICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMCIuZGVjb2RlLAorICAgICAgICAgICAgInVuaWNvZGUtaW50ZXJuYWwiLAorICAgICAgICApCisgICAgICAgIGlmIHN5cy5tYXh1bmljb2RlID4gMHhmZmZmOgorICAgICAgICAgICAgZGVmIGhhbmRsZXJfdW5pY29kZWludGVybmFsKGV4Yyk6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBVbmljb2RlRGVjb2RlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRvbid0IGtub3cgaG93IHRvIGhhbmRsZSAlciIgJSBleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuICh1Ilx4MDEiLCAxKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMCIuZGVjb2RlKCJ1bmljb2RlLWludGVybmFsIiwgImlnbm9yZSIpLAorICAgICAgICAgICAgICAgIHUiXHUwMDAwIgorICAgICAgICAgICAgKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMCIuZGVjb2RlKCJ1bmljb2RlLWludGVybmFsIiwgInJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICB1Ilx1MDAwMFx1ZmZmZCIKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0Lmh1aSIsIGhhbmRsZXJfdW5pY29kZWludGVybmFsKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICJceDAwXHgwMFx4MDBceDAwXHgwMCIuZGVjb2RlKCJ1bmljb2RlLWludGVybmFsIiwgInRlc3QuaHVpIiksCisgICAgICAgICAgICAgICAgdSJcdTAwMDBcdTAwMDFcdTAwMDAiCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3Moc2VsZik6CisgICAgICAgIGRlZiBoYW5kbGVyMShleGMpOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBVbmljb2RlRW5jb2RlRXJyb3IpIFwKKyAgICAgICAgICAgICAgIGFuZCBub3QgaXNpbnN0YW5jZShleGMsIFVuaWNvZGVEZWNvZGVFcnJvcik6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgJXIiICUgZXhjKQorICAgICAgICAgICAgbCA9IFt1IjwlZD4iICUgb3JkKGV4Yy5vYmplY3RbcG9zXSkgZm9yIHBvcyBpbiB4cmFuZ2UoZXhjLnN0YXJ0LCBleGMuZW5kKV0KKyAgICAgICAgICAgIHJldHVybiAodSJbJXNdIiAlIHUiIi5qb2luKGwpLCBleGMuZW5kKQorCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5oYW5kbGVyMSIsIGhhbmRsZXIxKQorCisgICAgICAgIGRlZiBoYW5kbGVyMihleGMpOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBVbmljb2RlRGVjb2RlRXJyb3IpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlICVyIiAlIGV4YykKKyAgICAgICAgICAgIGwgPSBbdSI8JWQ+IiAlIG9yZChleGMub2JqZWN0W3Bvc10pIGZvciBwb3MgaW4geHJhbmdlKGV4Yy5zdGFydCwgZXhjLmVuZCldCisgICAgICAgICAgICByZXR1cm4gKHUiWyVzXSIgJSB1IiIuam9pbihsKSwgZXhjLmVuZCsxKSAjIHNraXAgb25lIGNoYXJhY3RlcgorCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5oYW5kbGVyMiIsIGhhbmRsZXIyKQorCisgICAgICAgIHMgPSAiXHgwMFx4ODFceDdmXHg4MFx4ZmYiCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHMuZGVjb2RlKCJhc2NpaSIsICJ0ZXN0LmhhbmRsZXIxIiksCisgICAgICAgICAgICB1Ilx4MDBbPDEyOT5dXHg3Zls8MTI4Pl1bPDI1NT5dIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzLmRlY29kZSgiYXNjaWkiLCAidGVzdC5oYW5kbGVyMiIpLAorICAgICAgICAgICAgdSJceDAwWzwxMjk+XVs8MTI4Pl0iCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgIlxcdTMwNDJcdTN4eHgiLmRlY29kZSgidW5pY29kZS1lc2NhcGUiLCAidGVzdC5oYW5kbGVyMSIpLAorICAgICAgICAgICAgdSJcdTMwNDJbPDkyPjwxMTc+PDUxPl14eHgiCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgIlxcdTMwNDJcdTN4eCIuZGVjb2RlKCJ1bmljb2RlLWVzY2FwZSIsICJ0ZXN0LmhhbmRsZXIxIiksCisgICAgICAgICAgICB1Ilx1MzA0Mls8OTI+PDExNz48NTE+XXh4IgorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiYWJjIiwgInRlc3QuaGFuZGxlcjEiLCB7b3JkKCJhIik6IHUieiJ9KVswXSwKKyAgICAgICAgICAgIHUiels8OTg+XVs8OTk+XSIKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1ImdceGZjXHhkZnJrIi5lbmNvZGUoImFzY2lpIiwgInRlc3QuaGFuZGxlcjEiKSwKKyAgICAgICAgICAgIHUiZ1s8MjUyPjwyMjM+XXJrIgorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHUiZ1x4ZmNceGRmIi5lbmNvZGUoImFzY2lpIiwgInRlc3QuaGFuZGxlcjEiKSwKKyAgICAgICAgICAgIHUiZ1s8MjUyPjwyMjM+XSIKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfbG9uZ3N0cmluZ3Moc2VsZik6CisgICAgICAgICMgdGVzdCBsb25nIHN0cmluZ3MgdG8gY2hlY2sgZm9yIG1lbW9yeSBvdmVyZmxvdyBwcm9ibGVtcworICAgICAgICBlcnJvcnMgPSBbICJzdHJpY3QiLCAiaWdub3JlIiwgInJlcGxhY2UiLCAieG1sY2hhcnJlZnJlcGxhY2UiLAorICAgICAgICAgICAgICAgICAgICJiYWNrc2xhc2hyZXBsYWNlIl0KKyAgICAgICAgIyByZWdpc3RlciB0aGUgaGFuZGxlcnMgdW5kZXIgZGlmZmVyZW50IG5hbWVzLAorICAgICAgICAjIHRvIHByZXZlbnQgdGhlIGNvZGVjIGZyb20gcmVjb2duaXppbmcgdGhlIG5hbWUKKyAgICAgICAgZm9yIGVyciBpbiBlcnJvcnM6CisgICAgICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuIiArIGVyciwgY29kZWNzLmxvb2t1cF9lcnJvcihlcnIpKQorICAgICAgICBsID0gMTAwMAorICAgICAgICBlcnJvcnMgKz0gWyAidGVzdC4iICsgZXJyIGZvciBlcnIgaW4gZXJyb3JzIF0KKyAgICAgICAgZm9yIHVuaSBpbiBbIHMqbCBmb3IgcyBpbiAodSJ4IiwgdSJcdTMwNDIiLCB1ImFceGU0IikgXToKKyAgICAgICAgICAgIGZvciBlbmMgaW4gKCJhc2NpaSIsICJsYXRpbi0xIiwgImlzby04ODU5LTEiLCAiaXNvLTg4NTktMTUiLAorICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwgInV0Zi03IiwgInV0Zi0xNiIsICJ1dGYtMzIiKToKKyAgICAgICAgICAgICAgICBmb3IgZXJyIGluIGVycm9yczoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdW5pLmVuY29kZShlbmMsIGVycikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBjaGVja19leGNlcHRpb25vYmplY3RhcmdzKHNlbGYsIGV4Y3R5cGUsIGFyZ3MsIG1zZyk6CisgICAgICAgICMgVGVzdCBVbmljb2RlRXJyb3Igc3ViY2xhc3NlczogY29uc3RydWN0aW9uLCBhdHRyaWJ1dGUgYXNzaWdubWVudCBhbmQgX19zdHJfXyBjb252ZXJzaW9uCisgICAgICAgICMgY2hlY2sgd2l0aCBvbmUgbWlzc2luZyBhcmd1bWVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV4Y3R5cGUsICphcmdzWzotMV0pCisgICAgICAgICMgY2hlY2sgd2l0aCBvbmUgYXJndW1lbnQgdG9vIG11Y2gKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBleGN0eXBlLCAqKGFyZ3MgKyBbInRvbyBtdWNoIl0pKQorICAgICAgICAjIGNoZWNrIHdpdGggb25lIGFyZ3VtZW50IG9mIHRoZSB3cm9uZyB0eXBlCisgICAgICAgIHdyb25nYXJncyA9IFsgInNwYW0iLCB1ImVnZ3MiLCA0MiwgMS4wLCBOb25lIF0KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihhcmdzKSk6CisgICAgICAgICAgICBmb3Igd3JvbmdhcmcgaW4gd3JvbmdhcmdzOgorICAgICAgICAgICAgICAgIGlmIHR5cGUod3JvbmdhcmcpIGlzIHR5cGUoYXJnc1tpXSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIyBidWlsZCBhcmd1bWVudCBhcnJheQorICAgICAgICAgICAgICAgIGNhbGxhcmdzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgaiBpbiB4cmFuZ2UobGVuKGFyZ3MpKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaT09ajoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxhcmdzLmFwcGVuZCh3cm9uZ2FyZykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxhcmdzLmFwcGVuZChhcmdzW2ldKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXhjdHlwZSwgKmNhbGxhcmdzKQorCisgICAgICAgICMgY2hlY2sgd2l0aCB0aGUgY29ycmVjdCBudW1iZXIgYW5kIHR5cGUgb2YgYXJndW1lbnRzCisgICAgICAgIGV4YyA9IGV4Y3R5cGUoKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGV4YyksIG1zZykKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVlbmNvZGVlcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKAorICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yLAorICAgICAgICAgICAgWyJhc2NpaSIsIHUiZ1x4ZmNyayIsIDEsIDIsICJvdWNoIl0sCisgICAgICAgICAgICAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBlbmNvZGUgY2hhcmFjdGVyIHUnXFx4ZmMnIGluIHBvc2l0aW9uIDE6IG91Y2giCisgICAgICAgICkKKyAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKAorICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yLAorICAgICAgICAgICAgWyJhc2NpaSIsIHUiZ1x4ZmNyayIsIDEsIDQsICJvdWNoIl0sCisgICAgICAgICAgICAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBlbmNvZGUgY2hhcmFjdGVycyBpbiBwb3NpdGlvbiAxLTM6IG91Y2giCisgICAgICAgICkKKyAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKAorICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yLAorICAgICAgICAgICAgWyJhc2NpaSIsIHUiXHhmY3giLCAwLCAxLCAib3VjaCJdLAorICAgICAgICAgICAgIidhc2NpaScgY29kZWMgY2FuJ3QgZW5jb2RlIGNoYXJhY3RlciB1J1xceGZjJyBpbiBwb3NpdGlvbiAwOiBvdWNoIgorICAgICAgICApCisgICAgICAgIHNlbGYuY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncygKKyAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvciwKKyAgICAgICAgICAgIFsiYXNjaWkiLCB1Ilx1MDEwMHgiLCAwLCAxLCAib3VjaCJdLAorICAgICAgICAgICAgIidhc2NpaScgY29kZWMgY2FuJ3QgZW5jb2RlIGNoYXJhY3RlciB1J1xcdTAxMDAnIGluIHBvc2l0aW9uIDA6IG91Y2giCisgICAgICAgICkKKyAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKAorICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yLAorICAgICAgICAgICAgWyJhc2NpaSIsIHUiXHVmZmZmeCIsIDAsIDEsICJvdWNoIl0sCisgICAgICAgICAgICAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBlbmNvZGUgY2hhcmFjdGVyIHUnXFx1ZmZmZicgaW4gcG9zaXRpb24gMDogb3VjaCIKKyAgICAgICAgKQorICAgICAgICBpZiBzeXMubWF4dW5pY29kZSA+IDB4ZmZmZjoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncygKKyAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgWyJhc2NpaSIsIHUiXFUwMDAxMDAwMHgiLCAwLCAxLCAib3VjaCJdLAorICAgICAgICAgICAgICAgICInYXNjaWknIGNvZGVjIGNhbid0IGVuY29kZSBjaGFyYWN0ZXIgdSdcXFUwMDAxMDAwMCcgaW4gcG9zaXRpb24gMDogb3VjaCIKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVkZWNvZGVlcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKAorICAgICAgICAgICAgVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgWyJhc2NpaSIsICJnXHhmY3JrIiwgMSwgMiwgIm91Y2giXSwKKyAgICAgICAgICAgICInYXNjaWknIGNvZGVjIGNhbid0IGRlY29kZSBieXRlIDB4ZmMgaW4gcG9zaXRpb24gMTogb3VjaCIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmNoZWNrX2V4Y2VwdGlvbm9iamVjdGFyZ3MoCisgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICBbImFzY2lpIiwgImdceGZjcmsiLCAxLCAzLCAib3VjaCJdLAorICAgICAgICAgICAgIidhc2NpaScgY29kZWMgY2FuJ3QgZGVjb2RlIGJ5dGVzIGluIHBvc2l0aW9uIDEtMjogb3VjaCIKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdW5pY29kZXRyYW5zbGF0ZWVycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2V4Y2VwdGlvbm9iamVjdGFyZ3MoCisgICAgICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IsCisgICAgICAgICAgICBbdSJnXHhmY3JrIiwgMSwgMiwgIm91Y2giXSwKKyAgICAgICAgICAgICJjYW4ndCB0cmFuc2xhdGUgY2hhcmFjdGVyIHUnXFx4ZmMnIGluIHBvc2l0aW9uIDE6IG91Y2giCisgICAgICAgICkKKyAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKAorICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yLAorICAgICAgICAgICAgW3UiZ1x1MDEwMHJrIiwgMSwgMiwgIm91Y2giXSwKKyAgICAgICAgICAgICJjYW4ndCB0cmFuc2xhdGUgY2hhcmFjdGVyIHUnXFx1MDEwMCcgaW4gcG9zaXRpb24gMTogb3VjaCIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmNoZWNrX2V4Y2VwdGlvbm9iamVjdGFyZ3MoCisgICAgICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IsCisgICAgICAgICAgICBbdSJnXHVmZmZmcmsiLCAxLCAyLCAib3VjaCJdLAorICAgICAgICAgICAgImNhbid0IHRyYW5zbGF0ZSBjaGFyYWN0ZXIgdSdcXHVmZmZmJyBpbiBwb3NpdGlvbiAxOiBvdWNoIgorICAgICAgICApCisgICAgICAgIGlmIHN5cy5tYXh1bmljb2RlID4gMHhmZmZmOgorICAgICAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKAorICAgICAgICAgICAgICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvciwKKyAgICAgICAgICAgICAgICBbdSJnXFUwMDAxMDAwMHJrIiwgMSwgMiwgIm91Y2giXSwKKyAgICAgICAgICAgICAgICAiY2FuJ3QgdHJhbnNsYXRlIGNoYXJhY3RlciB1J1xcVTAwMDEwMDAwJyBpbiBwb3NpdGlvbiAxOiBvdWNoIgorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmNoZWNrX2V4Y2VwdGlvbm9iamVjdGFyZ3MoCisgICAgICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IsCisgICAgICAgICAgICBbdSJnXHhmY3JrIiwgMSwgMywgIm91Y2giXSwKKyAgICAgICAgICAgICJjYW4ndCB0cmFuc2xhdGUgY2hhcmFjdGVycyBpbiBwb3NpdGlvbiAxLTI6IG91Y2giCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2JhZGFuZGdvb2RzdHJpY3RleGNlcHRpb25zKHNlbGYpOgorICAgICAgICAjICJzdHJpY3QiIGNvbXBsYWlucyBhYm91dCBhIG5vbi1leGNlcHRpb24gcGFzc2VkIGluCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICAgY29kZWNzLnN0cmljdF9lcnJvcnMsCisgICAgICAgICAgICA0MgorICAgICAgICApCisgICAgICAgICMgInN0cmljdCIgY29tcGxhaW5zIGFib3V0IHRoZSB3cm9uZyBleGNlcHRpb24gdHlwZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEV4Y2VwdGlvbiwKKyAgICAgICAgICAgIGNvZGVjcy5zdHJpY3RfZXJyb3JzLAorICAgICAgICAgICAgRXhjZXB0aW9uKCJvdWNoIikKKyAgICAgICAgKQorCisgICAgICAgICMgSWYgdGhlIGNvcnJlY3QgZXhjZXB0aW9uIGlzIHBhc3NlZCBpbiwgInN0cmljdCIgcmFpc2VzIGl0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yLAorICAgICAgICAgICAgY29kZWNzLnN0cmljdF9lcnJvcnMsCisgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgdSJcdTMwNDIiLCAwLCAxLCAib3VjaCIpCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2JhZGFuZGdvb2RpZ25vcmVleGNlcHRpb25zKHNlbGYpOgorICAgICAgICAjICJpZ25vcmUiIGNvbXBsYWlucyBhYm91dCBhIG5vbi1leGNlcHRpb24gcGFzc2VkIGluCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICBUeXBlRXJyb3IsCisgICAgICAgICAgIGNvZGVjcy5pZ25vcmVfZXJyb3JzLAorICAgICAgICAgICA0MgorICAgICAgICApCisgICAgICAgICMgImlnbm9yZSIgY29tcGxhaW5zIGFib3V0IHRoZSB3cm9uZyBleGNlcHRpb24gdHlwZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICBjb2RlY3MuaWdub3JlX2Vycm9ycywKKyAgICAgICAgICAgVW5pY29kZUVycm9yKCJvdWNoIikKKyAgICAgICAgKQorICAgICAgICAjIElmIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbiBpcyBwYXNzZWQgaW4sICJpZ25vcmUiIHJldHVybnMgYW4gZW1wdHkgcmVwbGFjZW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5pZ25vcmVfZXJyb3JzKFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCB1Ilx1MzA0MiIsIDAsIDEsICJvdWNoIikpLAorICAgICAgICAgICAgKHUiIiwgMSkKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmlnbm9yZV9lcnJvcnMoVW5pY29kZURlY29kZUVycm9yKCJhc2NpaSIsICJceGZmIiwgMCwgMSwgIm91Y2giKSksCisgICAgICAgICAgICAodSIiLCAxKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuaWdub3JlX2Vycm9ycyhVbmljb2RlVHJhbnNsYXRlRXJyb3IodSJcdTMwNDIiLCAwLCAxLCAib3VjaCIpKSwKKyAgICAgICAgICAgICh1IiIsIDEpCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2JhZGFuZGdvb2RyZXBsYWNlZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgIyAicmVwbGFjZSIgY29tcGxhaW5zIGFib3V0IGEgbm9uLWV4Y2VwdGlvbiBwYXNzZWQgaW4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgY29kZWNzLnJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICA0MgorICAgICAgICApCisgICAgICAgICMgInJlcGxhY2UiIGNvbXBsYWlucyBhYm91dCB0aGUgd3JvbmcgZXhjZXB0aW9uIHR5cGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgY29kZWNzLnJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICBVbmljb2RlRXJyb3IoIm91Y2giKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICAgY29kZWNzLnJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICAgQmFkT2JqZWN0VW5pY29kZUVuY29kZUVycm9yKCkKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgIGNvZGVjcy5yZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgIEJhZE9iamVjdFVuaWNvZGVEZWNvZGVFcnJvcigpCisgICAgICAgICkKKyAgICAgICAgIyBXaXRoIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbiwgInJlcGxhY2UiIHJldHVybnMgYW4gIj8iIG9yIHUiXHVmZmZkIiByZXBsYWNlbWVudAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLnJlcGxhY2VfZXJyb3JzKFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCB1Ilx1MzA0MiIsIDAsIDEsICJvdWNoIikpLAorICAgICAgICAgICAgKHUiPyIsIDEpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5yZXBsYWNlX2Vycm9ycyhVbmljb2RlRGVjb2RlRXJyb3IoImFzY2lpIiwgIlx4ZmYiLCAwLCAxLCAib3VjaCIpKSwKKyAgICAgICAgICAgICh1Ilx1ZmZmZCIsIDEpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5yZXBsYWNlX2Vycm9ycyhVbmljb2RlVHJhbnNsYXRlRXJyb3IodSJcdTMwNDIiLCAwLCAxLCAib3VjaCIpKSwKKyAgICAgICAgICAgICh1Ilx1ZmZmZCIsIDEpCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2JhZGFuZGdvb2R4bWxjaGFycmVmcmVwbGFjZWV4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgICMgInhtbGNoYXJyZWZyZXBsYWNlIiBjb21wbGFpbnMgYWJvdXQgYSBub24tZXhjZXB0aW9uIHBhc3NlZCBpbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICBjb2RlY3MueG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICA0MgorICAgICAgICApCisgICAgICAgICMgInhtbGNoYXJyZWZyZXBsYWNlIiBjb21wbGFpbnMgYWJvdXQgdGhlIHdyb25nIGV4Y2VwdGlvbiB0eXBlcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICBjb2RlY3MueG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICBVbmljb2RlRXJyb3IoIm91Y2giKQorICAgICAgICApCisgICAgICAgICMgInhtbGNoYXJyZWZyZXBsYWNlIiBjYW4gb25seSBiZSB1c2VkIGZvciBlbmNvZGluZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgIGNvZGVjcy54bWxjaGFycmVmcmVwbGFjZV9lcnJvcnMsCisgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IoImFzY2lpIiwgIlx4ZmYiLCAwLCAxLCAib3VjaCIpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBUeXBlRXJyb3IsCisgICAgICAgICAgICBjb2RlY3MueG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yKHUiXHUzMDQyIiwgMCwgMSwgIm91Y2giKQorICAgICAgICApCisgICAgICAgICMgVXNlIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbgorICAgICAgICBjcyA9ICgwLCAxLCA5LCAxMCwgOTksIDEwMCwgOTk5LCAxMDAwLCA5OTk5LCAxMDAwMCwgMHgzMDQyKQorICAgICAgICBzID0gIiIuam9pbih1bmljaHIoYykgZm9yIGMgaW4gY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MueG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzKAorICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCBzLCAwLCBsZW4ocyksICJvdWNoIikKKyAgICAgICAgICAgICksCisgICAgICAgICAgICAodSIiLmpvaW4odSImIyVkOyIgJSBvcmQoYykgZm9yIGMgaW4gcyksIGxlbihzKSkKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYmFkYW5kZ29vZGJhY2tzbGFzaHJlcGxhY2VleGNlcHRpb25zKHNlbGYpOgorICAgICAgICAjICJiYWNrc2xhc2hyZXBsYWNlIiBjb21wbGFpbnMgYWJvdXQgYSBub24tZXhjZXB0aW9uIHBhc3NlZCBpbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMsCisgICAgICAgICAgIDQyCisgICAgICAgICkKKyAgICAgICAgIyAiYmFja3NsYXNocmVwbGFjZSIgY29tcGxhaW5zIGFib3V0IHRoZSB3cm9uZyBleGNlcHRpb24gdHlwZXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICBVbmljb2RlRXJyb3IoIm91Y2giKQorICAgICAgICApCisgICAgICAgICMgImJhY2tzbGFzaHJlcGxhY2UiIGNhbiBvbmx5IGJlIHVzZWQgZm9yIGVuY29kaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICAgVW5pY29kZURlY29kZUVycm9yKCJhc2NpaSIsICJceGZmIiwgMCwgMSwgIm91Y2giKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yKHUiXHUzMDQyIiwgMCwgMSwgIm91Y2giKQorICAgICAgICApCisgICAgICAgICMgVXNlIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCB1Ilx1MzA0MiIsIDAsIDEsICJvdWNoIikpLAorICAgICAgICAgICAgKHUiXFx1MzA0MiIsIDEpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycyhVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgdSJceDAwIiwgMCwgMSwgIm91Y2giKSksCisgICAgICAgICAgICAodSJcXHgwMCIsIDEpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycyhVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgdSJceGZmIiwgMCwgMSwgIm91Y2giKSksCisgICAgICAgICAgICAodSJcXHhmZiIsIDEpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycyhVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgdSJcdTAxMDAiLCAwLCAxLCAib3VjaCIpKSwKKyAgICAgICAgICAgICh1IlxcdTAxMDAiLCAxKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHUiXHVmZmZmIiwgMCwgMSwgIm91Y2giKSksCisgICAgICAgICAgICAodSJcXHVmZmZmIiwgMSkKKyAgICAgICAgKQorICAgICAgICBpZiBzeXMubWF4dW5pY29kZT4weGZmZmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycyhVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgdSJcVTAwMDEwMDAwIiwgMCwgMSwgIm91Y2giKSksCisgICAgICAgICAgICAgICAgKHUiXFxVMDAwMTAwMDAiLCAxKQorICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHUiXFUwMDEwZmZmZiIsIDAsIDEsICJvdWNoIikpLAorICAgICAgICAgICAgICAgICh1IlxcVTAwMTBmZmZmIiwgMSkKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2JhZGhhbmRsZXJyZXN1bHRzKHNlbGYpOgorICAgICAgICByZXN1bHRzID0gKCA0MiwgdSJmb28iLCAoMSwyLDMpLCAodSJmb28iLCAxLCAzKSwgKHUiZm9vIiwgTm9uZSksICh1ImZvbyIsKSwgKCJmb28iLCAxLCAzKSwgKCJmb28iLCBOb25lKSwgKCJmb28iLCkgKQorICAgICAgICBlbmNzID0gKCJhc2NpaSIsICJsYXRpbi0xIiwgImlzby04ODU5LTEiLCAiaXNvLTg4NTktMTUiKQorCisgICAgICAgIGZvciByZXMgaW4gcmVzdWx0czoKKyAgICAgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5iYWRoYW5kbGVyIiwgbGFtYmRhIHg6IHJlcykKKyAgICAgICAgICAgIGZvciBlbmMgaW4gZW5jczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICB1Ilx1MzA0MiIuZW5jb2RlLAorICAgICAgICAgICAgICAgICAgICBlbmMsCisgICAgICAgICAgICAgICAgICAgICJ0ZXN0LmJhZGhhbmRsZXIiCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZm9yIChlbmMsIGJ5dGVzKSBpbiAoCisgICAgICAgICAgICAgICAgKCJhc2NpaSIsICJceGZmIiksCisgICAgICAgICAgICAgICAgKCJ1dGYtOCIsICJceGZmIiksCisgICAgICAgICAgICAgICAgKCJ1dGYtNyIsICIreC0iKSwKKyAgICAgICAgICAgICAgICAoInVuaWNvZGUtaW50ZXJuYWwiLCAiXHgwMCIpLAorICAgICAgICAgICAgKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICBieXRlcy5kZWNvZGUsCisgICAgICAgICAgICAgICAgICAgIGVuYywKKyAgICAgICAgICAgICAgICAgICAgInRlc3QuYmFkaGFuZGxlciIKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9sb29rdXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLnN0cmljdF9lcnJvcnMsIGNvZGVjcy5sb29rdXBfZXJyb3IoInN0cmljdCIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5pZ25vcmVfZXJyb3JzLCBjb2RlY3MubG9va3VwX2Vycm9yKCJpZ25vcmUiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3Muc3RyaWN0X2Vycm9ycywgY29kZWNzLmxvb2t1cF9lcnJvcigic3RyaWN0IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MueG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICAgY29kZWNzLmxvb2t1cF9lcnJvcigieG1sY2hhcnJlZnJlcGxhY2UiKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMsCisgICAgICAgICAgICBjb2RlY3MubG9va3VwX2Vycm9yKCJiYWNrc2xhc2hyZXBsYWNlIikKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdW5lbmNvZGFibGVyZXBsYWNlbWVudChzZWxmKToKKyAgICAgICAgZGVmIHVuZW5jcmVwbChleGMpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIFVuaWNvZGVFbmNvZGVFcnJvcik6CisgICAgICAgICAgICAgICAgcmV0dXJuICh1Ilx1NDI0MiIsIGV4Yy5lbmQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlICVyIiAlIGV4YykKKyAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0LnVuZW5jcmVwbGhhbmRsZXIiLCB1bmVuY3JlcGwpCisgICAgICAgIGZvciBlbmMgaW4gKCJhc2NpaSIsICJpc28tODg1OS0xIiwgImlzby04ODU5LTE1Iik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgdSJcdTQyNDIiLmVuY29kZSwKKyAgICAgICAgICAgICAgICBlbmMsCisgICAgICAgICAgICAgICAgInRlc3QudW5lbmNyZXBsaGFuZGxlciIKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2JhZHJlZ2lzdGVyY2FsbChzZWxmKToKKyAgICAgICAgIyBlbmhhbmNlIGNvdmVyYWdlIG9mOgorICAgICAgICAjIE1vZHVsZXMvX2NvZGVjc21vZHVsZS5jOjpyZWdpc3Rlcl9lcnJvcigpCisgICAgICAgICMgUHl0aG9uL2NvZGVjcy5jOjpQeUNvZGVjX1JlZ2lzdGVyRXJyb3IoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5yZWdpc3Rlcl9lcnJvciwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLnJlZ2lzdGVyX2Vycm9yLCAidGVzdC5kdW1teSIsIDQyKQorCisgICAgZGVmIHRlc3RfYmFkbG9va3VwY2FsbChzZWxmKToKKyAgICAgICAgIyBlbmhhbmNlIGNvdmVyYWdlIG9mOgorICAgICAgICAjIE1vZHVsZXMvX2NvZGVjc21vZHVsZS5jOjpsb29rdXBfZXJyb3IoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5sb29rdXBfZXJyb3IpCisKKyAgICBkZWYgdGVzdF91bmtub3duaGFuZGxlcihzZWxmKToKKyAgICAgICAgIyBlbmhhbmNlIGNvdmVyYWdlIG9mOgorICAgICAgICAjIE1vZHVsZXMvX2NvZGVjc21vZHVsZS5jOjpsb29rdXBfZXJyb3IoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhMb29rdXBFcnJvciwgY29kZWNzLmxvb2t1cF9lcnJvciwgInRlc3QudW5rbm93biIpCisKKyAgICBkZWYgdGVzdF94bWxjaGFycmVmdmFsdWVzKHNlbGYpOgorICAgICAgICAjIGVuaGFuY2UgY292ZXJhZ2Ugb2Y6CisgICAgICAgICMgUHl0aG9uL2NvZGVjcy5jOjpQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzKCkKKyAgICAgICAgIyBhbmQgaW5saW5lIGltcGxlbWVudGF0aW9ucworICAgICAgICB2ID0gKDEsIDUsIDEwLCA1MCwgMTAwLCA1MDAsIDEwMDAsIDUwMDAsIDEwMDAwLCA1MDAwMCkKKyAgICAgICAgaWYgc3lzLm1heHVuaWNvZGU+PTEwMDAwMDoKKyAgICAgICAgICAgIHYgKz0gKDEwMDAwMCwgNTAwMDAwLCAxMDAwMDAwKQorICAgICAgICBzID0gdSIiLmpvaW4oW3VuaWNocih4KSBmb3IgeCBpbiB2XSkKKyAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0LnhtbGNoYXJyZWZyZXBsYWNlIiwgY29kZWNzLnhtbGNoYXJyZWZyZXBsYWNlX2Vycm9ycykKKyAgICAgICAgZm9yIGVuYyBpbiAoImFzY2lpIiwgImlzby04ODU5LTE1Iik6CisgICAgICAgICAgICBmb3IgZXJyIGluICgieG1sY2hhcnJlZnJlcGxhY2UiLCAidGVzdC54bWxjaGFycmVmcmVwbGFjZSIpOgorICAgICAgICAgICAgICAgIHMuZW5jb2RlKGVuYywgZXJyKQorCisgICAgZGVmIHRlc3RfZGVjb2RlaGVscGVyKHNlbGYpOgorICAgICAgICAjIGVuaGFuY2UgY292ZXJhZ2Ugb2Y6CisgICAgICAgICMgT2JqZWN0cy91bmljb2Rlb2JqZWN0LmM6OnVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKCkKKyAgICAgICAgIyBhbmQgY2FsbGVycworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhMb29rdXBFcnJvciwgIlx4ZmYiLmRlY29kZSwgImFzY2lpIiwgInRlc3QudW5rbm93biIpCisKKyAgICAgICAgZGVmIGJhZGRlY29kZXJldHVybjEoZXhjKToKKyAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuYmFkZGVjb2RlcmV0dXJuMSIsIGJhZGRlY29kZXJldHVybjEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgIlx4ZmYiLmRlY29kZSwgImFzY2lpIiwgInRlc3QuYmFkZGVjb2RlcmV0dXJuMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgIlxcIi5kZWNvZGUsICJ1bmljb2RlLWVzY2FwZSIsICJ0ZXN0LmJhZGRlY29kZXJldHVybjEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICJcXHgwIi5kZWNvZGUsICJ1bmljb2RlLWVzY2FwZSIsICJ0ZXN0LmJhZGRlY29kZXJldHVybjEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICJcXHgweSIuZGVjb2RlLCAidW5pY29kZS1lc2NhcGUiLCAidGVzdC5iYWRkZWNvZGVyZXR1cm4xIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAiXFxVZmZmZmVlZWUiLmRlY29kZSwgInVuaWNvZGUtZXNjYXBlIiwgInRlc3QuYmFkZGVjb2RlcmV0dXJuMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgIlxcdXl5eXkiLmRlY29kZSwgInJhdy11bmljb2RlLWVzY2FwZSIsICJ0ZXN0LmJhZGRlY29kZXJldHVybjEiKQorCisgICAgICAgIGRlZiBiYWRkZWNvZGVyZXR1cm4yKGV4Yyk6CisgICAgICAgICAgICByZXR1cm4gKHUiPyIsIE5vbmUpCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5iYWRkZWNvZGVyZXR1cm4yIiwgYmFkZGVjb2RlcmV0dXJuMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAiXHhmZiIuZGVjb2RlLCAiYXNjaWkiLCAidGVzdC5iYWRkZWNvZGVyZXR1cm4yIikKKworICAgICAgICBoYW5kbGVyID0gUG9zUmV0dXJuKCkKKyAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0LnBvc3JldHVybiIsIGhhbmRsZXIuaGFuZGxlKQorCisgICAgICAgICMgVmFsaWQgbmVnYXRpdmUgcG9zaXRpb24KKyAgICAgICAgaGFuZGxlci5wb3MgPSAtMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJceGZmMCIuZGVjb2RlKCJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpLCB1Ijw/PjAiKQorCisgICAgICAgICMgVmFsaWQgbmVnYXRpdmUgcG9zaXRpb24KKyAgICAgICAgaGFuZGxlci5wb3MgPSAtMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJceGZmMCIuZGVjb2RlKCJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpLCB1Ijw/Pjw/PiIpCisKKyAgICAgICAgIyBOZWdhdGl2ZSBwb3NpdGlvbiBvdXQgb2YgYm91bmRzCisgICAgICAgIGhhbmRsZXIucG9zID0gLTMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgIlx4ZmYwIi5kZWNvZGUsICJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpCisKKyAgICAgICAgIyBWYWxpZCBwb3NpdGl2ZSBwb3NpdGlvbgorICAgICAgICBoYW5kbGVyLnBvcyA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiXHhmZjAiLmRlY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgdSI8Pz4wIikKKworICAgICAgICAjIExhcmdlc3QgdmFsaWQgcG9zaXRpdmUgcG9zaXRpb24gKG9uZSBiZXlvbmQgZW5kIG9mIGlucHV0KQorICAgICAgICBoYW5kbGVyLnBvcyA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiXHhmZjAiLmRlY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgdSI8Pz4iKQorCisgICAgICAgICMgSW52YWxpZCBwb3NpdGl2ZSBwb3NpdGlvbgorICAgICAgICBoYW5kbGVyLnBvcyA9IDMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgIlx4ZmYwIi5kZWNvZGUsICJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpCisKKyAgICAgICAgIyBSZXN0YXJ0IGF0IHRoZSAiMCIKKyAgICAgICAgaGFuZGxlci5wb3MgPSA2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlxcdXl5eXkwIi5kZWNvZGUoInJhdy11bmljb2RlLWVzY2FwZSIsICJ0ZXN0LnBvc3JldHVybiIpLCB1Ijw/PjAiKQorCisgICAgICAgIGNsYXNzIEQoZGljdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgY29kZWNzLmNoYXJtYXBfZGVjb2RlLCAiXHhmZiIsICJzdHJpY3QiLCB7MHhmZjogTm9uZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvZGVjcy5jaGFybWFwX2RlY29kZSwgIlx4ZmYiLCAic3RyaWN0IiwgRCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5jaGFybWFwX2RlY29kZSwgIlx4ZmYiLCAic3RyaWN0IiwgezB4ZmY6IDB4MTEwMDAwfSkKKworICAgIGRlZiB0ZXN0X2VuY29kZWhlbHBlcihzZWxmKToKKyAgICAgICAgIyBlbmhhbmNlIGNvdmVyYWdlIG9mOgorICAgICAgICAjIE9iamVjdHMvdW5pY29kZW9iamVjdC5jOjp1bmljb2RlX2VuY29kZV9jYWxsX2Vycm9yaGFuZGxlcigpCisgICAgICAgICMgYW5kIGNhbGxlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTG9va3VwRXJyb3IsIHUiXHhmZiIuZW5jb2RlLCAiYXNjaWkiLCAidGVzdC51bmtub3duIikKKworICAgICAgICBkZWYgYmFkZW5jb2RlcmV0dXJuMShleGMpOgorICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5iYWRlbmNvZGVyZXR1cm4xIiwgYmFkZW5jb2RlcmV0dXJuMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1Ilx4ZmYiLmVuY29kZSwgImFzY2lpIiwgInRlc3QuYmFkZW5jb2RlcmV0dXJuMSIpCisKKyAgICAgICAgZGVmIGJhZGVuY29kZXJldHVybjIoZXhjKToKKyAgICAgICAgICAgIHJldHVybiAodSI/IiwgTm9uZSkKKyAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0LmJhZGVuY29kZXJldHVybjIiLCBiYWRlbmNvZGVyZXR1cm4yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiXHhmZiIuZW5jb2RlLCAiYXNjaWkiLCAidGVzdC5iYWRlbmNvZGVyZXR1cm4yIikKKworICAgICAgICBoYW5kbGVyID0gUG9zUmV0dXJuKCkKKyAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0LnBvc3JldHVybiIsIGhhbmRsZXIuaGFuZGxlKQorCisgICAgICAgICMgVmFsaWQgbmVnYXRpdmUgcG9zaXRpb24KKyAgICAgICAgaGFuZGxlci5wb3MgPSAtMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiXHhmZjAiLmVuY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgIjw/PjAiKQorCisgICAgICAgICMgVmFsaWQgbmVnYXRpdmUgcG9zaXRpb24KKyAgICAgICAgaGFuZGxlci5wb3MgPSAtMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiXHhmZjAiLmVuY29kZSgiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKSwgIjw/Pjw/PiIpCisKKyAgICAgICAgIyBOZWdhdGl2ZSBwb3NpdGlvbiBvdXQgb2YgYm91bmRzCisgICAgICAgIGhhbmRsZXIucG9zID0gLTMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdSJceGZmMCIuZW5jb2RlLCAiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKQorCisgICAgICAgICMgVmFsaWQgcG9zaXRpdmUgcG9zaXRpb24KKyAgICAgICAgaGFuZGxlci5wb3MgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJceGZmMCIuZW5jb2RlKCJhc2NpaSIsICJ0ZXN0LnBvc3JldHVybiIpLCAiPD8+MCIpCisKKyAgICAgICAgIyBMYXJnZXN0IHZhbGlkIHBvc2l0aXZlIHBvc2l0aW9uIChvbmUgYmV5b25kIGVuZCBvZiBpbnB1dAorICAgICAgICBoYW5kbGVyLnBvcyA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ilx4ZmYwIi5lbmNvZGUoImFzY2lpIiwgInRlc3QucG9zcmV0dXJuIiksICI8Pz4iKQorCisgICAgICAgICMgSW52YWxpZCBwb3NpdGl2ZSBwb3NpdGlvbgorICAgICAgICBoYW5kbGVyLnBvcyA9IDMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdSJceGZmMCIuZW5jb2RlLCAiYXNjaWkiLCAidGVzdC5wb3NyZXR1cm4iKQorCisgICAgICAgIGhhbmRsZXIucG9zID0gMAorCisgICAgICAgIGNsYXNzIEQoZGljdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIGZvciBlcnIgaW4gKCJzdHJpY3QiLCAicmVwbGFjZSIsICJ4bWxjaGFycmVmcmVwbGFjZSIsICJiYWNrc2xhc2hyZXBsYWNlIiwgInRlc3QucG9zcmV0dXJuIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGNvZGVjcy5jaGFybWFwX2VuY29kZSwgdSJceGZmIiwgZXJyLCB7MHhmZjogTm9uZX0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb2RlY3MuY2hhcm1hcF9lbmNvZGUsIHUiXHhmZiIsIGVyciwgRCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MuY2hhcm1hcF9lbmNvZGUsIHUiXHhmZiIsIGVyciwgezB4ZmY6IDMwMH0pCisKKyAgICBkZWYgdGVzdF90cmFuc2xhdGVoZWxwZXIoc2VsZik6CisgICAgICAgICMgZW5oYW5jZSBjb3ZlcmFnZSBvZjoKKyAgICAgICAgIyBPYmplY3RzL3VuaWNvZGVvYmplY3QuYzo6dW5pY29kZV9lbmNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoKQorICAgICAgICAjIGFuZCBjYWxsZXJzCisgICAgICAgICMgKFVuZm9ydHVuYXRlbHkgdGhlIGVycm9ycyBhcmd1bWVudCBpcyBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZQorICAgICAgICAjIGZyb20gUHl0aG9uLCBzbyB3ZSBjYW4ndCB0ZXN0IHRoYXQgbXVjaCkKKyAgICAgICAgY2xhc3MgRChkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJceGZmIi50cmFuc2xhdGUsIEQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1Ilx4ZmYiLnRyYW5zbGF0ZSwgezB4ZmY6IHN5cy5tYXh1bmljb2RlKzF9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiXHhmZiIudHJhbnNsYXRlLCB7MHhmZjogKCl9KQorCisgICAgZGVmIHRlc3RfYnVnODI4NzM3KHNlbGYpOgorICAgICAgICBjaGFybWFwID0geworICAgICAgICAgICAgb3JkKCImIik6IHUiJmFtcDsiLAorICAgICAgICAgICAgb3JkKCI8Iik6IHUiJmx0OyIsCisgICAgICAgICAgICBvcmQoIj4iKTogdSImZ3Q7IiwKKyAgICAgICAgICAgIG9yZCgnIicpOiB1IiZxdW90OyIsCisgICAgICAgIH0KKworICAgICAgICBmb3IgbiBpbiAoMSwgMTAsIDEwMCwgMTAwMCk6CisgICAgICAgICAgICB0ZXh0ID0gdSdhYmM8ZGVmPmdoaScqbgorICAgICAgICAgICAgdGV4dC50cmFuc2xhdGUoY2hhcm1hcCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDb2RlY0NhbGxiYWNrVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfY24ucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19jbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTVlOGRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfY24ucHkKQEAgLTAsMCArMSw4NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIHRlc3RfY29kZWNlbmNvZGluZ3NfY24ucHkKKyMgICBDb2RlYyBlbmNvZGluZyB0ZXN0cyBmb3IgUFJDIGVuY29kaW5ncy4KKyMKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgVGVzdF9HQjIzMTIodGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZW5jb2RpbmcgPSAnZ2IyMzEyJworICAgIHRzdHJpbmcgPSB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQubG9hZF90ZXN0c3RyaW5nKCdnYjIzMTInKQorICAgIGNvZGVjdGVzdHMgPSAoCisgICAgICAgICMgaW52YWxpZCBieXRlcworICAgICAgICAoImFiY1x4ODFceDgxXHhjMVx4YzQiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4YzgiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4ODFceDgxXHhjMVx4YzQiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHU4MDRhIiksCisgICAgICAgICgiYWJjXHg4MVx4ODFceGMxXHhjNFx4YzgiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHU4MDRhXHVmZmZkIiksCisgICAgICAgICgiYWJjXHg4MVx4ODFceGMxXHhjNCIsICJpZ25vcmUiLCAgdSJhYmNcdTgwNGEiKSwKKyAgICAgICAgKCJceGMxXHg2NCIsICJzdHJpY3QiLCBOb25lKSwKKyAgICApCisKK2NsYXNzIFRlc3RfR0JLKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2diaycKKyAgICB0c3RyaW5nID0gdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LmxvYWRfdGVzdHN0cmluZygnZ2JrJykKKyAgICBjb2RlY3Rlc3RzID0gKAorICAgICAgICAjIGludmFsaWQgYnl0ZXMKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgInN0cmljdCIsICBOb25lKSwKKyAgICAgICAgKCJhYmNceGM4IiwgInN0cmljdCIsICBOb25lKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1ODA0YSIpLAorICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzRceGM4IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1ODA0YVx1ZmZmZCIpLAorICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAiaWdub3JlIiwgIHUiYWJjXHU4MDRhIiksCisgICAgICAgICgiXHg4M1x4MzRceDgzXHgzMSIsICJzdHJpY3QiLCBOb25lKSwKKyAgICAgICAgKHUiXHUzMGZiIiwgInN0cmljdCIsIE5vbmUpLAorICAgICkKKworY2xhc3MgVGVzdF9HQjE4MDMwKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2diMTgwMzAnCisgICAgdHN0cmluZyA9IHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5sb2FkX3Rlc3RzdHJpbmcoJ2diMTgwMzAnKQorICAgIGNvZGVjdGVzdHMgPSAoCisgICAgICAgICMgaW52YWxpZCBieXRlcworICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4YzgiLCAic3RyaWN0IiwgIE5vbmUpLAorICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHU4MDRhIiksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNFx4YzgiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHU4MDRhXHVmZmZkIiksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJpZ25vcmUiLCAgdSJhYmNcdTgwNGEiKSwKKyAgICAgICAgKCJhYmNceDg0XHgzOVx4ODRceDM5XHhjMVx4YzQiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHU4MDRhIiksCisgICAgICAgICh1Ilx1MzBmYiIsICJzdHJpY3QiLCAiXHg4MTlceGE3OSIpLAorICAgICkKKyAgICBoYXNfaXNvMTA2NDYgPSBUcnVlCisKK2NsYXNzIFRlc3RfSFoodGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZW5jb2RpbmcgPSAnaHonCisgICAgdHN0cmluZyA9IHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5sb2FkX3Rlc3RzdHJpbmcoJ2h6JykKKyAgICBjb2RlY3Rlc3RzID0gKAorICAgICAgICAjIHRlc3QgJ35cbicgKDMgbGluZXMpCisgICAgICAgIChiJ1RoaXMgc2VudGVuY2UgaXMgaW4gQVNDSUkuXG4nCisgICAgICAgICBiJ1RoZSBuZXh0IHNlbnRlbmNlIGlzIGluIEdCLn57PDpLeTI7U3sjLH59flxuJworICAgICAgICAgYid+e05wSilsNkhLISN+fUJ5ZS5cbicsCisgICAgICAgICAnc3RyaWN0JywKKyAgICAgICAgIHUnVGhpcyBzZW50ZW5jZSBpcyBpbiBBU0NJSS5cbicKKyAgICAgICAgIHUnVGhlIG5leHQgc2VudGVuY2UgaXMgaW4gR0IuJworICAgICAgICAgdSdcdTVkZjFcdTYyNDBcdTRlMGRcdTZiMzJcdWZmMGNcdTUyZmZcdTY1YmRcdTY1YmNcdTRlYmFcdTMwMDInCisgICAgICAgICB1J0J5ZS5cbicpLAorICAgICAgICAjIHRlc3QgJ35cbicgKDQgbGluZXMpCisgICAgICAgIChiJ1RoaXMgc2VudGVuY2UgaXMgaW4gQVNDSUkuXG4nCisgICAgICAgICBiJ1RoZSBuZXh0IHNlbnRlbmNlIGlzIGluIEdCLn5cbicKKyAgICAgICAgIGInfns8Okt5MjtTeyMsTnBKKWw2SEshI359flxuJworICAgICAgICAgYidCeWUuXG4nLAorICAgICAgICAgJ3N0cmljdCcsCisgICAgICAgICB1J1RoaXMgc2VudGVuY2UgaXMgaW4gQVNDSUkuXG4nCisgICAgICAgICB1J1RoZSBuZXh0IHNlbnRlbmNlIGlzIGluIEdCLicKKyAgICAgICAgIHUnXHU1ZGYxXHU2MjQwXHU0ZTBkXHU2YjMyXHVmZjBjXHU1MmZmXHU2NWJkXHU2NWJjXHU0ZWJhXHUzMDAyJworICAgICAgICAgdSdCeWUuXG4nKSwKKyAgICAgICAgIyBpbnZhbGlkIGJ5dGVzCisgICAgICAgIChiJ2FifmNkJywgJ3JlcGxhY2UnLCB1J2FiXHVGRkZEZCcpLAorICAgICAgICAoYidhYlx4ZmZjZCcsICdyZXBsYWNlJywgdSdhYlx1RkZGRGNkJyksCisgICAgICAgIChiJ2FifntceDgxXHg4MVx4NDFceDQ0fn1jZCcsICdyZXBsYWNlJywgdSdhYlx1RkZGRFx1RkZGRFx1ODA0QWNkJyksCisgICAgKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfaGsucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19oay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWMyNjA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfaGsucHkKQEAgLTAsMCArMSwyNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIHRlc3RfY29kZWNlbmNvZGluZ3NfaGsucHkKKyMgICBDb2RlYyBlbmNvZGluZyB0ZXN0cyBmb3IgSG9uZ0tvbmcgZW5jb2RpbmdzLgorIworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBUZXN0X0JpZzVIS1NDUyh0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdiaWc1aGtzY3MnCisgICAgdHN0cmluZyA9IHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5sb2FkX3Rlc3RzdHJpbmcoJ2JpZzVoa3NjcycpCisgICAgY29kZWN0ZXN0cyA9ICgKKyAgICAgICAgIyBpbnZhbGlkIGJ5dGVzCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHhjOCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdThiMTAiKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0XHhjOCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdThiMTBcdWZmZmQiKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgImlnbm9yZSIsICB1ImFiY1x1OGIxMCIpLAorICAgICkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2lzbzIwMjIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19pc28yMDIyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMWQyYWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19pc28yMDIyLnB5CkBAIC0wLDAgKzEsNDYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb2RlYyBlbmNvZGluZyB0ZXN0cyBmb3IgSVNPIDIwMjIgZW5jb2RpbmdzLgorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorCitDT01NT05fQ09ERUNfVEVTVFMgPSAoCisgICAgICAgICMgaW52YWxpZCBieXRlcworICAgICAgICAoYidhYlx4RkZjZCcsICdyZXBsYWNlJywgdSdhYlx1RkZGRGNkJyksCisgICAgICAgIChiJ2FiXHgxQmRlZicsICdyZXBsYWNlJywgdSdhYlx4MUJkZWYnKSwKKyAgICAgICAgKGInYWJceDFCJGRlZicsICdyZXBsYWNlJywgdSdhYlx1RkZGRCcpLAorICAgICkKKworY2xhc3MgVGVzdF9JU08yMDIyX0pQKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2lzbzIwMjJfanAnCisgICAgdHN0cmluZyA9IHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5sb2FkX3Rlc3RzdHJpbmcoJ2lzbzIwMjJfanAnKQorICAgIGNvZGVjdGVzdHMgPSBDT01NT05fQ09ERUNfVEVTVFMgKyAoCisgICAgICAgIChiJ2FiXHgxQk5kZWYnLCAncmVwbGFjZScsIHUnYWJceDFCTmRlZicpLAorICAgICkKKworY2xhc3MgVGVzdF9JU08yMDIyX0pQMih0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdpc28yMDIyX2pwXzInCisgICAgdHN0cmluZyA9IHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5sb2FkX3Rlc3RzdHJpbmcoJ2lzbzIwMjJfanAnKQorICAgIGNvZGVjdGVzdHMgPSBDT01NT05fQ09ERUNfVEVTVFMgKyAoCisgICAgICAgIChiJ2FiXHgxQk5kZWYnLCAncmVwbGFjZScsIHUnYWJkZWYnKSwKKyAgICApCisKK2NsYXNzIFRlc3RfSVNPMjAyMl9LUih0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdpc28yMDIyX2tyJworICAgIHRzdHJpbmcgPSB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQubG9hZF90ZXN0c3RyaW5nKCdpc28yMDIyX2tyJykKKyAgICBjb2RlY3Rlc3RzID0gQ09NTU9OX0NPREVDX1RFU1RTICsgKAorICAgICAgICAoYidhYlx4MUJOZGVmJywgJ3JlcGxhY2UnLCB1J2FiXHgxQk5kZWYnKSwKKyAgICApCisKKyAgICAjIGlzbzIwMjJfa3IudHh0IGNhbm5vdCBiZSB1c2VkIHRvIHRlc3QgImNodW5rIGNvZGluZyI6IHRoZSBlc2NhcGUKKyAgICAjIHNlcXVlbmNlIGlzIG9ubHkgd3JpdHRlbiBvbiB0aGUgZmlyc3QgbGluZQorICAgIGRlZiB0ZXN0X2NodW5rY29kaW5nKHNlbGYpOgorICAgICAgICBwYXNzCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19qcC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2pwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmODFmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19qcC5weQpAQCAtMCwwICsxLDEwNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIHRlc3RfY29kZWNlbmNvZGluZ3NfanAucHkKKyMgICBDb2RlYyBlbmNvZGluZyB0ZXN0cyBmb3IgSmFwYW5lc2UgZW5jb2RpbmdzLgorIworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBUZXN0X0NQOTMyKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2NwOTMyJworICAgIHRzdHJpbmcgPSB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQubG9hZF90ZXN0c3RyaW5nKCdzaGlmdF9qaXMnKQorICAgIGNvZGVjdGVzdHMgPSAoCisgICAgICAgICMgaW52YWxpZCBieXRlcworICAgICAgICAoImFiY1x4ODFceDAwXHg4MVx4MDBceDgyXHg4NCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHhmOCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHg4MVx4MDBceDgyXHg4NCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdWZmNDQiKSwKKyAgICAgICAgKCJhYmNceDgxXHgwMFx4ODJceDg0XHg4OCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdWZmNDRcdWZmZmQiKSwKKyAgICAgICAgKCJhYmNceDgxXHgwMFx4ODJceDg0IiwgImlnbm9yZSIsICB1ImFiY1x1ZmY0NCIpLAorICAgICAgICAjIHNqaXMgdnMgY3A5MzIKKyAgICAgICAgKCJcXFx4N2UiLCAicmVwbGFjZSIsIHUiXFxceDdlIiksCisgICAgICAgICgiXHg4MVx4NWZceDgxXHg2MVx4ODFceDdjIiwgInJlcGxhY2UiLCB1Ilx1ZmYzY1x1MjIyNVx1ZmYwZCIpLAorICAgICkKKworY2xhc3MgVGVzdF9FVUNfSklTWDAyMTModGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2V1Y19qaXN4MDIxMycKKyAgICB0c3RyaW5nID0gdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LmxvYWRfdGVzdHN0cmluZygnZXVjX2ppc3gwMjEzJykKKyAgICBjb2RlY3Rlc3RzID0gKAorICAgICAgICAjIGludmFsaWQgYnl0ZXMKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgInN0cmljdCIsICBOb25lKSwKKyAgICAgICAgKCJhYmNceGM4IiwgInN0cmljdCIsICBOb25lKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1Nzk1NiIpLAorICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzRceGM4IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1Nzk1Nlx1ZmZmZCIpLAorICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAiaWdub3JlIiwgIHUiYWJjXHU3OTU2IiksCisgICAgICAgICgiYWJjXHg4Zlx4ODNceDgzIiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZCIpLAorICAgICAgICAoIlx4YzFceDY0IiwgInN0cmljdCIsIE5vbmUpLAorICAgICAgICAoIlx4YTFceGMwIiwgInN0cmljdCIsIHUiXHVmZjNjIiksCisgICAgKQorICAgIHhtbGNoYXJuYW1ldGVzdCA9ICgKKyAgICAgICAgdSJceGFiXHUyMTFjXHhiYiA9IFx1MjMyOVx1MTIzNFx1MjMyYSIsCisgICAgICAgICJceGE5XHhhOCZyZWFsO1x4YTlceGIyID0gJmxhbmc7JiM0NjYwOyZyYW5nOyIKKyAgICApCisKK2V1Y2pwX2NvbW1vbnRlc3RzID0gKAorICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgKCJhYmNceGM4IiwgInN0cmljdCIsICBOb25lKSwKKyAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHU3OTU2IiksCisgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0XHhjOCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdTc5NTZcdWZmZmQiKSwKKyAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAiaWdub3JlIiwgIHUiYWJjXHU3OTU2IiksCisgICAgKCJhYmNceDhmXHg4M1x4ODMiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkIiksCisgICAgKCJceGMxXHg2NCIsICJzdHJpY3QiLCBOb25lKSwKKykKKworY2xhc3MgVGVzdF9FVUNfSlBfQ09NUEFUKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZW5jb2RpbmcgPSAnZXVjX2pwJworICAgIHRzdHJpbmcgPSB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQubG9hZF90ZXN0c3RyaW5nKCdldWNfanAnKQorICAgIGNvZGVjdGVzdHMgPSBldWNqcF9jb21tb250ZXN0cyArICgKKyAgICAgICAgKCJceGExXHhjMFxcIiwgInN0cmljdCIsIHUiXHVmZjNjXFwiKSwKKyAgICAgICAgKHUiXHhhNSIsICJzdHJpY3QiLCAiXHg1YyIpLAorICAgICAgICAodSJcdTIwM2UiLCAic3RyaWN0IiwgIlx4N2UiKSwKKyAgICApCisKK3NoaWZ0amlzX2NvbW1vbmVuY3Rlc3RzID0gKAorICAgICgiYWJjXHg4MFx4ODBceDgyXHg4NCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgKCJhYmNceGY4IiwgInN0cmljdCIsICBOb25lKSwKKyAgICAoImFiY1x4ODBceDgwXHg4Mlx4ODQiLCAicmVwbGFjZSIsIHUiYWJjXHVmZmZkXHVmZjQ0IiksCisgICAgKCJhYmNceDgwXHg4MFx4ODJceDg0XHg4OCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdWZmNDRcdWZmZmQiKSwKKyAgICAoImFiY1x4ODBceDgwXHg4Mlx4ODRkZWYiLCAiaWdub3JlIiwgIHUiYWJjXHVmZjQ0ZGVmIiksCispCisKK2NsYXNzIFRlc3RfU0pJU19DT01QQVQodGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZW5jb2RpbmcgPSAnc2hpZnRfamlzJworICAgIHRzdHJpbmcgPSB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQubG9hZF90ZXN0c3RyaW5nKCdzaGlmdF9qaXMnKQorICAgIGNvZGVjdGVzdHMgPSBzaGlmdGppc19jb21tb25lbmN0ZXN0cyArICgKKyAgICAgICAgKCJcXFx4N2UiLCAic3RyaWN0IiwgdSJcXFx4N2UiKSwKKyAgICAgICAgKCJceDgxXHg1Zlx4ODFceDYxXHg4MVx4N2MiLCAic3RyaWN0IiwgdSJcdWZmM2NcdTIwMTZcdTIyMTIiKSwKKyAgICApCisKK2NsYXNzIFRlc3RfU0pJU1gwMjEzKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ3NoaWZ0X2ppc3gwMjEzJworICAgIHRzdHJpbmcgPSB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQubG9hZF90ZXN0c3RyaW5nKCdzaGlmdF9qaXN4MDIxMycpCisgICAgY29kZWN0ZXN0cyA9ICgKKyAgICAgICAgIyBpbnZhbGlkIGJ5dGVzCisgICAgICAgICgiYWJjXHg4MFx4ODBceDgyXHg4NCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHhmOCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHg4MFx4ODBceDgyXHg4NCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdWZmNDQiKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4ODJceDg0XHg4OCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdWZmNDRcdWZmZmQiKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4ODJceDg0ZGVmIiwgImlnbm9yZSIsICB1ImFiY1x1ZmY0NGRlZiIpLAorICAgICAgICAjIHNqaXMgdnMgY3A5MzIKKyAgICAgICAgKCJcXFx4N2UiLCAicmVwbGFjZSIsIHUiXHhhNVx1MjAzZSIpLAorICAgICAgICAoIlx4ODFceDVmXHg4MVx4NjFceDgxXHg3YyIsICJyZXBsYWNlIiwgdSJceDVjXHUyMDE2XHUyMjEyIiksCisgICAgKQorICAgIHhtbGNoYXJuYW1ldGVzdCA9ICgKKyAgICAgICAgdSJceGFiXHUyMTFjXHhiYiA9IFx1MjMyOVx1MTIzNFx1MjMyYSIsCisgICAgICAgICJceDg1RyZyZWFsO1x4ODVRID0gJmxhbmc7JiM0NjYwOyZyYW5nOyIKKyAgICApCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19rci5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2tyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjODY2YTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19rci5weQpAQCAtMCwwICsxLDY5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgdGVzdF9jb2RlY2VuY29kaW5nc19rci5weQorIyAgIENvZGVjIGVuY29kaW5nIHRlc3RzIGZvciBST0sgZW5jb2RpbmdzLgorIworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBUZXN0X0NQOTQ5KHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2NwOTQ5JworICAgIHRzdHJpbmcgPSB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQubG9hZF90ZXN0c3RyaW5nKCdjcDk0OScpCisgICAgY29kZWN0ZXN0cyA9ICgKKyAgICAgICAgIyBpbnZhbGlkIGJ5dGVzCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHhjOCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdWM4OTQiKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0XHhjOCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdWM4OTRcdWZmZmQiKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgImlnbm9yZSIsICB1ImFiY1x1Yzg5NCIpLAorICAgICkKKworY2xhc3MgVGVzdF9FVUNLUih0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdldWNfa3InCisgICAgdHN0cmluZyA9IHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5sb2FkX3Rlc3RzdHJpbmcoJ2V1Y19rcicpCisgICAgY29kZWN0ZXN0cyA9ICgKKyAgICAgICAgIyBpbnZhbGlkIGJ5dGVzCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHhjOCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdWM4OTQiKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0XHhjOCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdWM4OTRcdWZmZmQiKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgImlnbm9yZSIsICB1ImFiY1x1Yzg5NCIpLAorCisgICAgICAgICMgY29tcG9zZWQgbWFrZS11cCBzZXF1ZW5jZSBlcnJvcnMKKyAgICAgICAgKCJceGE0XHhkNCIsICJzdHJpY3QiLCBOb25lKSwKKyAgICAgICAgKCJceGE0XHhkNFx4YTQiLCAic3RyaWN0IiwgTm9uZSksCisgICAgICAgICgiXHhhNFx4ZDRceGE0XHhiNiIsICJzdHJpY3QiLCBOb25lKSwKKyAgICAgICAgKCJceGE0XHhkNFx4YTRceGI2XHhhNCIsICJzdHJpY3QiLCBOb25lKSwKKyAgICAgICAgKCJceGE0XHhkNFx4YTRceGI2XHhhNFx4ZDAiLCAic3RyaWN0IiwgTm9uZSksCisgICAgICAgICgiXHhhNFx4ZDRceGE0XHhiNlx4YTRceGQwXHhhNCIsICJzdHJpY3QiLCBOb25lKSwKKyAgICAgICAgKCJceGE0XHhkNFx4YTRceGI2XHhhNFx4ZDBceGE0XHhkNCIsICJzdHJpY3QiLCB1Ilx1YzRkNCIpLAorICAgICAgICAoIlx4YTRceGQ0XHhhNFx4YjZceGE0XHhkMFx4YTRceGQ0eCIsICJzdHJpY3QiLCB1Ilx1YzRkNHgiKSwKKyAgICAgICAgKCJhXHhhNFx4ZDRceGE0XHhiNlx4YTQiLCAicmVwbGFjZSIsIHUiYVx1ZmZmZCIpLAorICAgICAgICAoIlx4YTRceGQ0XHhhM1x4YjZceGE0XHhkMFx4YTRceGQ0IiwgInN0cmljdCIsIE5vbmUpLAorICAgICAgICAoIlx4YTRceGQ0XHhhNFx4YjZceGEzXHhkMFx4YTRceGQ0IiwgInN0cmljdCIsIE5vbmUpLAorICAgICAgICAoIlx4YTRceGQ0XHhhNFx4YjZceGE0XHhkMFx4YTNceGQ0IiwgInN0cmljdCIsIE5vbmUpLAorICAgICAgICAoIlx4YTRceGQ0XHhhNFx4ZmZceGE0XHhkMFx4YTRceGQ0IiwgInJlcGxhY2UiLCB1Ilx1ZmZmZCIpLAorICAgICAgICAoIlx4YTRceGQ0XHhhNFx4YjZceGE0XHhmZlx4YTRceGQ0IiwgInJlcGxhY2UiLCB1Ilx1ZmZmZCIpLAorICAgICAgICAoIlx4YTRceGQ0XHhhNFx4YjZceGE0XHhkMFx4YTRceGZmIiwgInJlcGxhY2UiLCB1Ilx1ZmZmZCIpLAorICAgICAgICAoIlx4YzFceGM0IiwgInN0cmljdCIsIHUiXHVjODk0IiksCisgICAgKQorCitjbGFzcyBUZXN0X0pPSEFCKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2pvaGFiJworICAgIHRzdHJpbmcgPSB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQubG9hZF90ZXN0c3RyaW5nKCdqb2hhYicpCisgICAgY29kZWN0ZXN0cyA9ICgKKyAgICAgICAgIyBpbnZhbGlkIGJ5dGVzCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHhjOCIsICJzdHJpY3QiLCAgTm9uZSksCisgICAgICAgICgiYWJjXHg4MFx4ODBceGMxXHhjNCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdWNkMjciKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0XHhjOCIsICJyZXBsYWNlIiwgdSJhYmNcdWZmZmRcdWNkMjdcdWZmZmQiKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgImlnbm9yZSIsICB1ImFiY1x1Y2QyNyIpLAorICAgICkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX3R3LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfdHcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzZDA2ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX3R3LnB5CkBAIC0wLDAgKzEsMjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyB0ZXN0X2NvZGVjZW5jb2RpbmdzX3R3LnB5CisjICAgQ29kZWMgZW5jb2RpbmcgdGVzdHMgZm9yIFJPQyBlbmNvZGluZ3MuCisjCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFRlc3RfQmlnNSh0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdiaWc1JworICAgIHRzdHJpbmcgPSB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQubG9hZF90ZXN0c3RyaW5nKCdiaWc1JykKKyAgICBjb2RlY3Rlc3RzID0gKAorICAgICAgICAjIGludmFsaWQgYnl0ZXMKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgInN0cmljdCIsICBOb25lKSwKKyAgICAgICAgKCJhYmNceGM4IiwgInN0cmljdCIsICBOb25lKSwKKyAgICAgICAgKCJhYmNceDgwXHg4MFx4YzFceGM0IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1OGIxMCIpLAorICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzRceGM4IiwgInJlcGxhY2UiLCB1ImFiY1x1ZmZmZFx1OGIxMFx1ZmZmZCIpLAorICAgICAgICAoImFiY1x4ODBceDgwXHhjMVx4YzQiLCAiaWdub3JlIiwgIHUiYWJjXHU4YjEwIiksCisgICAgKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29kZWNtYXBzX2NuLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29kZWNtYXBzX2NuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NGZjNTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2RlY21hcHNfY24ucHkKQEAgLTAsMCArMSwzMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIHRlc3RfY29kZWNtYXBzX2NuLnB5CisjICAgQ29kZWMgbWFwcGluZyB0ZXN0cyBmb3IgUFJDIGVuY29kaW5ncworIworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBUZXN0R0IyMzEyTWFwKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdnYjIzMTInCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vcGVvcGxlLmZyZWVic2Qub3JnL35wZXJreS9pMThuL0VVQy1DTi5UWFQnCisKK2NsYXNzIFRlc3RHQktNYXAodGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlX01hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2diaycKKyAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvJyBcCisgICAgICAgICAgICAgICAgICdNSUNTRlQvV0lORE9XUy9DUDkzNi5UWFQnCisKK2NsYXNzIFRlc3RHQjE4MDMwTWFwKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2diMTgwMzAnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vc291cmNlLmljdS1wcm9qZWN0Lm9yZy9yZXBvcy9pY3UvZGF0YS8nIFwKKyAgICAgICAgICAgICAgICAgJ3RydW5rL2NoYXJzZXQvZGF0YS94bWwvZ2ItMTgwMzAtMjAwMC54bWwnCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGVjbWFwc19oay5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGVjbWFwc19oay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjJhYjdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29kZWNtYXBzX2hrLnB5CkBAIC0wLDAgKzEsMjEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyB0ZXN0X2NvZGVjbWFwc19oay5weQorIyAgIENvZGVjIG1hcHBpbmcgdGVzdHMgZm9yIEhvbmdLb25nIGVuY29kaW5ncworIworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBUZXN0QmlnNUhLU0NTTWFwKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZW5jb2RpbmcgPSAnYmlnNWhrc2NzJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3Blb3BsZS5mcmVlYnNkLm9yZy9+cGVya3kvaTE4bi9CSUc1SEtTQ1MtMjAwNC5UWFQnCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3Rfc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gWyd1cmxmZXRjaCddCisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGVjbWFwc19qcC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGVjbWFwc19qcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDY2YTk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29kZWNtYXBzX2pwLnB5CkBAIC0wLDAgKzEsNjcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyB0ZXN0X2NvZGVjbWFwc19qcC5weQorIyAgIENvZGVjIG1hcHBpbmcgdGVzdHMgZm9yIEphcGFuZXNlIGVuY29kaW5ncworIworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBUZXN0Q1A5MzJNYXAodGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlX01hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2NwOTMyJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvVkVORE9SUy9NSUNTRlQvJyBcCisgICAgICAgICAgICAgICAgICdXSU5ET1dTL0NQOTMyLlRYVCcKKyAgICBzdXBtYXBzID0gWworICAgICAgICAoJ1x4ODAnLCB1J1x1MDA4MCcpLAorICAgICAgICAoJ1x4YTAnLCB1J1x1ZjhmMCcpLAorICAgICAgICAoJ1x4ZmQnLCB1J1x1ZjhmMScpLAorICAgICAgICAoJ1x4ZmUnLCB1J1x1ZjhmMicpLAorICAgICAgICAoJ1x4ZmYnLCB1J1x1ZjhmMycpLAorICAgIF0KKyAgICBmb3IgaSBpbiByYW5nZSgweGExLCAweGUwKToKKyAgICAgICAgc3VwbWFwcy5hcHBlbmQoKGNocihpKSwgdW5pY2hyKGkrMHhmZWMwKSkpCisKKworY2xhc3MgVGVzdEVVQ0pQQ09NUEFUTWFwKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdldWNfanAnCisgICAgbWFwZmlsZW5hbWUgPSAnRVVDLUpQLlRYVCcKKyAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly9wZW9wbGUuZnJlZWJzZC5vcmcvfnBlcmt5L2kxOG4vRVVDLUpQLlRYVCcKKworCitjbGFzcyBUZXN0U0pJU0NPTVBBVE1hcCh0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2VfTWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdzaGlmdF9qaXMnCisgICAgbWFwZmlsZW5hbWUgPSAnU0hJRlRKSVMuVFhUJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvT0JTT0xFVEUnIFwKKyAgICAgICAgICAgICAgICAgJy9FQVNUQVNJQS9KSVMvU0hJRlRKSVMuVFhUJworICAgIHBhc3NfZW5jdGVzdCA9IFsKKyAgICAgICAgKCdceDgxXycsIHUnXFwnKSwKKyAgICBdCisgICAgcGFzc19kZWN0ZXN0ID0gWworICAgICAgICAoJ1xcJywgdSdceGE1JyksCisgICAgICAgICgnficsIHUnXHUyMDNlJyksCisgICAgICAgICgnXHg4MV8nLCB1J1xcJyksCisgICAgXQorCitjbGFzcyBUZXN0RVVDSklTWDAyMTNNYXAodGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlX01hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2V1Y19qaXN4MDIxMycKKyAgICBtYXBmaWxlbmFtZSA9ICdFVUMtSklTWDAyMTMuVFhUJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3Blb3BsZS5mcmVlYnNkLm9yZy9+cGVya3kvaTE4bi9FVUMtSklTWDAyMTMuVFhUJworCisKK2NsYXNzIFRlc3RTSklTWDAyMTNNYXAodGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlX01hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdzaGlmdF9qaXN4MDIxMycKKyAgICBtYXBmaWxlbmFtZSA9ICdTSElGVF9KSVNYMDIxMy5UWFQnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vcGVvcGxlLmZyZWVic2Qub3JnL35wZXJreS9pMThuL1NISUZUX0pJU1gwMjEzLlRYVCcKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29kZWNtYXBzX2tyLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29kZWNtYXBzX2tyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YzYxMmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2RlY21hcHNfa3IucHkKQEAgLTAsMCArMSw0NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIHRlc3RfY29kZWNtYXBzX2tyLnB5CisjICAgQ29kZWMgbWFwcGluZyB0ZXN0cyBmb3IgUk9LIGVuY29kaW5ncworIworCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBUZXN0Q1A5NDlNYXAodGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlX01hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2NwOTQ5JworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvVkVORE9SUy9NSUNTRlQnIFwKKyAgICAgICAgICAgICAgICAgJy9XSU5ET1dTL0NQOTQ5LlRYVCcKKworCitjbGFzcyBUZXN0RVVDS1JNYXAodGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlX01hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2V1Y19rcicKKyAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly9wZW9wbGUuZnJlZWJzZC5vcmcvfnBlcmt5L2kxOG4vRVVDLUtSLlRYVCcKKworICAgICMgQTRENCBIQU5HVUwgRklMTEVSIGluZGljYXRlcyB0aGUgYmVnaW4gb2YgOC1ieXRlcyBtYWtlLXVwIHNlcXVlbmNlLgorICAgIHBhc3NfZW5jdGVzdCA9IFsoJ1x4YTRceGQ0JywgdSdcdTMxNjQnKV0KKyAgICBwYXNzX2RlY3Rlc3QgPSBbKCdceGE0XHhkNCcsIHUnXHUzMTY0JyldCisKKworY2xhc3MgVGVzdEpPSEFCTWFwKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBlbmNvZGluZyA9ICdqb2hhYicKKyAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL09CU09MRVRFL0VBU1RBU0lBLycgXAorICAgICAgICAgICAgICAgICAnS1NDL0pPSEFCLlRYVCcKKyAgICAjIEtTIFggMTAwMSBzdGFuZGFyZCBhc3NpZ25lZCAweDVjIGFzIFdPTiBTSUdOLgorICAgICMgYnV0LCBpbiBlYXJseSA5MHMgdGhhdCBpcyB0aGUgb25seSBlcmEgdXNlZCBqb2hhYiB3aWRlbHksCisgICAgIyB0aGUgbW9zdCBzb2Z0d2FyZXMgaW1wbGVtZW50cyBpdCBhcyBSRVZFUlNFIFNPTElEVVMuCisgICAgIyBTbywgd2UgaWdub3JlIHRoZSBzdGFuZGFyZCBoZXJlLgorICAgIHBhc3NfZW5jdGVzdCA9IFsoJ1xcJywgdSdcdTIwYTknKV0KKyAgICBwYXNzX2RlY3Rlc3QgPSBbKCdcXCcsIHUnXHUyMGE5JyldCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2RlY21hcHNfdHcucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2RlY21hcHNfdHcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzYWUyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGVjbWFwc190dy5weQpAQCAtMCwwICsxLDMxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgdGVzdF9jb2RlY21hcHNfdHcucHkKKyMgICBDb2RlYyBtYXBwaW5nIHRlc3RzIGZvciBST0MgZW5jb2RpbmdzCisjCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIFRlc3RCSUc1TWFwKHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2JpZzUnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9NQVBQSU5HUy9PQlNPTEVURS8nIFwKKyAgICAgICAgICAgICAgICAgJ0VBU1RBU0lBL09USEVSL0JJRzUuVFhUJworCitjbGFzcyBUZXN0Q1A5NTBNYXAodGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlX01hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGVuY29kaW5nID0gJ2NwOTUwJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvVkVORE9SUy9NSUNTRlQvJyBcCisgICAgICAgICAgICAgICAgICdXSU5ET1dTL0NQOTUwLlRYVCcKKyAgICBwYXNzX2VuY3Rlc3QgPSBbCisgICAgICAgICgnXHhhMlx4Y2MnLCB1J1x1NTM0MScpLAorICAgICAgICAoJ1x4YTJceGNlJywgdSdcdTUzNDUnKSwKKyAgICBdCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2RlY3MucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2RlY3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNjZjgxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGVjcy5weQpAQCAtMCwwICsxLDIwMTggQEAKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBjb2RlY3MKK2ltcG9ydCBsb2NhbGUKK2ltcG9ydCBzeXMsIFN0cmluZ0lPLCBfdGVzdGNhcGkKKworZGVmIGNvZGluZ19jaGVja2VyKHNlbGYsIGNvZGVyKToKKyAgICBkZWYgY2hlY2soaW5wdXQsIGV4cGVjdCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZXIoaW5wdXQpLCAoZXhwZWN0LCBsZW4oaW5wdXQpKSkKKyAgICByZXR1cm4gY2hlY2sKKworY2xhc3MgUXVldWUob2JqZWN0KToKKyAgICAiIiIKKyAgICBxdWV1ZTogd3JpdGUgYnl0ZXMgYXQgb25lIGVuZCwgcmVhZCBieXRlcyBmcm9tIHRoZSBvdGhlciBlbmQKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2J1ZmZlciA9ICIiCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgY2hhcnMpOgorICAgICAgICBzZWxmLl9idWZmZXIgKz0gY2hhcnMKKworICAgIGRlZiByZWFkKHNlbGYsIHNpemU9LTEpOgorICAgICAgICBpZiBzaXplPDA6CisgICAgICAgICAgICBzID0gc2VsZi5fYnVmZmVyCisgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSAiIgorICAgICAgICAgICAgcmV0dXJuIHMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHMgPSBzZWxmLl9idWZmZXJbOnNpemVdCisgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbc2l6ZTpdCisgICAgICAgICAgICByZXR1cm4gcworCitjbGFzcyBSZWFkVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGNoZWNrX3BhcnRpYWwoc2VsZiwgaW5wdXQsIHBhcnRpYWxyZXN1bHRzKToKKyAgICAgICAgIyBnZXQgYSBTdHJlYW1SZWFkZXIgZm9yIHRoZSBlbmNvZGluZyBhbmQgZmVlZCB0aGUgYnl0ZXN0cmluZyB2ZXJzaW9uCisgICAgICAgICMgb2YgaW5wdXQgdG8gdGhlIHJlYWRlciBieXRlIGJ5IGJ5dGUuIFJlYWQgZXZlcnl0aGluZyBhdmFpbGFibGUgZnJvbQorICAgICAgICAjIHRoZSBTdHJlYW1SZWFkZXIgYW5kIGNoZWNrIHRoYXQgdGhlIHJlc3VsdHMgZXF1YWwgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICMgZW50cmllcyBmcm9tIHBhcnRpYWxyZXN1bHRzLgorICAgICAgICBxID0gUXVldWUoKQorICAgICAgICByID0gY29kZWNzLmdldHJlYWRlcihzZWxmLmVuY29kaW5nKShxKQorICAgICAgICByZXN1bHQgPSB1IiIKKyAgICAgICAgZm9yIChjLCBwYXJ0aWFscmVzdWx0KSBpbiB6aXAoaW5wdXQuZW5jb2RlKHNlbGYuZW5jb2RpbmcpLCBwYXJ0aWFscmVzdWx0cyk6CisgICAgICAgICAgICBxLndyaXRlKGMpCisgICAgICAgICAgICByZXN1bHQgKz0gci5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBwYXJ0aWFscmVzdWx0KQorICAgICAgICAjIGNoZWNrIHRoYXQgdGhlcmUncyBub3RoaW5nIGxlZnQgaW4gdGhlIGJ1ZmZlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLnJlYWQoKSwgdSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuYnl0ZWJ1ZmZlciwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5jaGFyYnVmZmVyLCB1IiIpCisKKyAgICAgICAgIyBkbyB0aGUgY2hlY2sgYWdhaW4sIHRoaXMgdGltZSB1c2luZyBhIGluY3JlbWVudGFsIGRlY29kZXIKKyAgICAgICAgZCA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXIoc2VsZi5lbmNvZGluZykoKQorICAgICAgICByZXN1bHQgPSB1IiIKKyAgICAgICAgZm9yIChjLCBwYXJ0aWFscmVzdWx0KSBpbiB6aXAoaW5wdXQuZW5jb2RlKHNlbGYuZW5jb2RpbmcpLCBwYXJ0aWFscmVzdWx0cyk6CisgICAgICAgICAgICByZXN1bHQgKz0gZC5kZWNvZGUoYykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBwYXJ0aWFscmVzdWx0KQorICAgICAgICAjIGNoZWNrIHRoYXQgdGhlcmUncyBub3RoaW5nIGxlZnQgaW4gdGhlIGJ1ZmZlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmRlY29kZSgiIiwgVHJ1ZSksIHUiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmJ1ZmZlciwgIiIpCisKKyAgICAgICAgIyBDaGVjayB3aGV0aGVyIHRoZSByZXNldCBtZXRob2Qgd29ya3MgcHJvcGVybHkKKyAgICAgICAgZC5yZXNldCgpCisgICAgICAgIHJlc3VsdCA9IHUiIgorICAgICAgICBmb3IgKGMsIHBhcnRpYWxyZXN1bHQpIGluIHppcChpbnB1dC5lbmNvZGUoc2VsZi5lbmNvZGluZyksIHBhcnRpYWxyZXN1bHRzKToKKyAgICAgICAgICAgIHJlc3VsdCArPSBkLmRlY29kZShjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHBhcnRpYWxyZXN1bHQpCisgICAgICAgICMgY2hlY2sgdGhhdCB0aGVyZSdzIG5vdGhpbmcgbGVmdCBpbiB0aGUgYnVmZmVycworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGVjb2RlKCIiLCBUcnVlKSwgdSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYnVmZmVyLCAiIikKKworICAgICAgICAjIGNoZWNrIGl0ZXJkZWNvZGUoKQorICAgICAgICBlbmNvZGVkID0gaW5wdXQuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBpbnB1dCwKKyAgICAgICAgICAgIHUiIi5qb2luKGNvZGVjcy5pdGVyZGVjb2RlKGVuY29kZWQsIHNlbGYuZW5jb2RpbmcpKQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgZGVmIGdldHJlYWRlcihpbnB1dCk6CisgICAgICAgICAgICBzdHJlYW0gPSBTdHJpbmdJTy5TdHJpbmdJTyhpbnB1dC5lbmNvZGUoc2VsZi5lbmNvZGluZykpCisgICAgICAgICAgICByZXR1cm4gY29kZWNzLmdldHJlYWRlcihzZWxmLmVuY29kaW5nKShzdHJlYW0pCisKKyAgICAgICAgZGVmIHJlYWRhbGxsaW5lcyhpbnB1dCwga2VlcGVuZHM9VHJ1ZSwgc2l6ZT1Ob25lKToKKyAgICAgICAgICAgIHJlYWRlciA9IGdldHJlYWRlcihpbnB1dCkKKyAgICAgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgbGluZSA9IHJlYWRlci5yZWFkbGluZShzaXplPXNpemUsIGtlZXBlbmRzPWtlZXBlbmRzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgcmV0dXJuICJ8Ii5qb2luKGxpbmVzKQorCisgICAgICAgIHMgPSB1ImZvb1xuYmFyXHJcbmJhelxyc3BhbVx1MjAyOGVnZ3MiCisgICAgICAgIHNleHBlY3RlZCA9IHUiZm9vXG58YmFyXHJcbnxiYXpccnxzcGFtXHUyMDI4fGVnZ3MiCisgICAgICAgIHNleHBlY3RlZG5vZW5kcyA9IHUiZm9vfGJhcnxiYXp8c3BhbXxlZ2dzIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRhbGxsaW5lcyhzLCBUcnVlKSwgc2V4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRhbGxsaW5lcyhzLCBGYWxzZSksIHNleHBlY3RlZG5vZW5kcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkYWxsbGluZXMocywgVHJ1ZSwgMTApLCBzZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGFsbGxpbmVzKHMsIEZhbHNlLCAxMCksIHNleHBlY3RlZG5vZW5kcykKKworICAgICAgICAjIFRlc3QgbG9uZyBsaW5lcyAobXVsdGlwbGUgY2FsbHMgdG8gcmVhZCgpIGluIHJlYWRsaW5lKCkpCisgICAgICAgIHZ3ID0gW10KKyAgICAgICAgdndvID0gW10KKyAgICAgICAgZm9yIChpLCBsaW5lZW5kKSBpbiBlbnVtZXJhdGUodSJcbiBcclxuIFxyIFx1MjAyOCIuc3BsaXQoKSk6CisgICAgICAgICAgICB2dy5hcHBlbmQoKGkqMjAwKSp1IlwzMDQyIiArIGxpbmVlbmQpCisgICAgICAgICAgICB2d28uYXBwZW5kKChpKjIwMCkqdSJcMzA0MiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGFsbGxpbmVzKCIiLmpvaW4odncpLCBUcnVlKSwgIiIuam9pbih2dykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGFsbGxpbmVzKCIiLmpvaW4odncpLCBGYWxzZSksIiIuam9pbih2d28pKQorCisgICAgICAgICMgVGVzdCBsaW5lcyB3aGVyZSB0aGUgZmlyc3QgcmVhZCBtaWdodCBlbmQgd2l0aCBcciwgc28gdGhlCisgICAgICAgICMgcmVhZGVyIGhhcyB0byBsb29rIGFoZWFkIHdoZXRoZXIgdGhpcyBpcyBhIGxvbmUgXHIgb3IgYSBcclxuCisgICAgICAgIGZvciBzaXplIGluIHhyYW5nZSg4MCk6CisgICAgICAgICAgICBmb3IgbGluZWVuZCBpbiB1IlxuIFxyXG4gXHIgXHUyMDI4Ii5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHMgPSAxMCooc2l6ZSp1ImEiICsgbGluZWVuZCArIHUieHh4XG4iKQorICAgICAgICAgICAgICAgIHJlYWRlciA9IGdldHJlYWRlcihzKQorICAgICAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZGxpbmUoa2VlcGVuZHM9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplKnUiYSIgKyBsaW5lZW5kLAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgcmVhZGVyID0gZ2V0cmVhZGVyKHMpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkbGluZShrZWVwZW5kcz1GYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplKnUiYSIsCisgICAgICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2J1ZzExNzUzOTYoc2VsZik6CisgICAgICAgIHMgPSBbCisgICAgICAgICAgICAnPCUhLS09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuJywKKyAgICAgICAgICAgICcgICAgQkxPRyBpbmRleCBwYWdlOiBzaG93IHJlY2VudCBhcnRpY2xlcyxcclxuJywKKyAgICAgICAgICAgICcgICAgdG9kYXlcJ3MgYXJ0aWNsZXMsIG9yIGFydGljbGVzIG9mIGEgc3BlY2lmaWMgZGF0ZS5cclxuJywKKyAgICAgICAgICAgICc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tJT5cclxuJywKKyAgICAgICAgICAgICc8JUBpbnB1dGVuY29kaW5nPSJJU08tODg1OS0xIiU+XHJcbicsCisgICAgICAgICAgICAnPCVAcGFnZXRlbXBsYXRlPVRFTVBMQVRFLnklPlxyXG4nLAorICAgICAgICAgICAgJzwlQGltcG9ydD1pbXBvcnQgZnJvZy51dGlsLCBmcm9nJT5cclxuJywKKyAgICAgICAgICAgICc8JUBpbXBvcnQ9aW1wb3J0IGZyb2cub2JqZWN0cyU+XHJcbicsCisgICAgICAgICAgICAnPCVAaW1wb3J0PWZyb20gZnJvZy5zdG9yYWdlZXJyb3JzIGltcG9ydCBTdG9yYWdlRXJyb3IlPlxyXG4nLAorICAgICAgICAgICAgJzwlXHJcbicsCisgICAgICAgICAgICAnXHJcbicsCisgICAgICAgICAgICAnaW1wb3J0IGxvZ2dpbmdcclxuJywKKyAgICAgICAgICAgICdsb2c9bG9nZ2luZy5nZXRMb2dnZXIoIlNuYWtlbGV0cy5sb2dnZXIiKVxyXG4nLAorICAgICAgICAgICAgJ1xyXG4nLAorICAgICAgICAgICAgJ1xyXG4nLAorICAgICAgICAgICAgJ3VzZXI9c2VsZi5TZXNzaW9uQ3R4LnVzZXJcclxuJywKKyAgICAgICAgICAgICdzdG9yYWdlRW5naW5lPXNlbGYuU2Vzc2lvbkN0eC5zdG9yYWdlRW5naW5lXHJcbicsCisgICAgICAgICAgICAnXHJcbicsCisgICAgICAgICAgICAnXHJcbicsCisgICAgICAgICAgICAnZGVmIHJlYWRBcnRpY2xlc0Zyb21EYXRlKGRhdGUsIGNvdW50PU5vbmUpOlxyXG4nLAorICAgICAgICAgICAgJyAgICBlbnRyeWlkcz1zdG9yYWdlRW5naW5lLmxpc3RCbG9nRW50cmllcyhkYXRlKVxyXG4nLAorICAgICAgICAgICAgJyAgICBlbnRyeWlkcy5yZXZlcnNlKCkgIyBkZXNjZW5kaW5nXHJcbicsCisgICAgICAgICAgICAnICAgIGlmIGNvdW50OlxyXG4nLAorICAgICAgICAgICAgJyAgICAgICAgZW50cnlpZHM9ZW50cnlpZHNbOmNvdW50XVxyXG4nLAorICAgICAgICAgICAgJyAgICB0cnk6XHJcbicsCisgICAgICAgICAgICAnICAgICAgICByZXR1cm4gWyBmcm9nLm9iamVjdHMuQmxvZ0VudHJ5LmxvYWQoc3RvcmFnZUVuZ2luZSwgZGF0ZSwgSWQpIGZvciBJZCBpbiBlbnRyeWlkcyBdXHJcbicsCisgICAgICAgICAgICAnICAgIGV4Y2VwdCBTdG9yYWdlRXJyb3IseDpcclxuJywKKyAgICAgICAgICAgICcgICAgICAgIGxvZy5lcnJvcigiRXJyb3IgbG9hZGluZyBhcnRpY2xlczogIitzdHIoeCkpXHJcbicsCisgICAgICAgICAgICAnICAgICAgICBzZWxmLmFib3J0KCJjYW5ub3QgbG9hZCBhcnRpY2xlcyIpXHJcbicsCisgICAgICAgICAgICAnXHJcbicsCisgICAgICAgICAgICAnc2hvd2RhdGU9Tm9uZVxyXG4nLAorICAgICAgICAgICAgJ1xyXG4nLAorICAgICAgICAgICAgJ2FyZz1zZWxmLlJlcXVlc3QuZ2V0QXJnKClcclxuJywKKyAgICAgICAgICAgICdpZiBhcmc9PSJ0b2RheSI6XHJcbicsCisgICAgICAgICAgICAnICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLSBUT0RBWVwnUyBBUlRJQ0xFU1xyXG4nLAorICAgICAgICAgICAgJyAgICBzZWxmLndyaXRlKCI8aDI+VG9kYXlcJ3MgYXJ0aWNsZXM8L2gyPiIpXHJcbicsCisgICAgICAgICAgICAnICAgIHNob3dkYXRlID0gZnJvZy51dGlsLmlzb2RhdGVzdHIoKSBcclxuJywKKyAgICAgICAgICAgICcgICAgZW50cmllcyA9IHJlYWRBcnRpY2xlc0Zyb21EYXRlKHNob3dkYXRlKVxyXG4nLAorICAgICAgICAgICAgJ2VsaWYgYXJnPT0iYWN0aXZlIjpcclxuJywKKyAgICAgICAgICAgICcgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tIEFDVElWRSBBUlRJQ0xFUyByZWRpcmVjdFxyXG4nLAorICAgICAgICAgICAgJyAgICBzZWxmLllyZWRpcmVjdCgiYWN0aXZlLnkiKVxyXG4nLAorICAgICAgICAgICAgJ2VsaWYgYXJnPT0ibG9naW4iOlxyXG4nLAorICAgICAgICAgICAgJyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0gTE9HSU4gUEFHRSByZWRpcmVjdFxyXG4nLAorICAgICAgICAgICAgJyAgICBzZWxmLllyZWRpcmVjdCgibG9naW4ueSIpXHJcbicsCisgICAgICAgICAgICAnZWxpZiBhcmc9PSJkYXRlIjpcclxuJywKKyAgICAgICAgICAgICcgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tIEFSVElDTEVTIE9GIEEgU1BFQ0lGSUMgREFURVxyXG4nLAorICAgICAgICAgICAgJyAgICBzaG93ZGF0ZSA9IHNlbGYuUmVxdWVzdC5nZXRQYXJhbWV0ZXIoImRhdGUiKVxyXG4nLAorICAgICAgICAgICAgJyAgICBzZWxmLndyaXRlKCI8aDI+QXJ0aWNsZXMgd3JpdHRlbiBvbiAlczwvaDI+IiUgZnJvZy51dGlsLm1lZGl1bWRhdGVzdHIoc2hvd2RhdGUpKVxyXG4nLAorICAgICAgICAgICAgJyAgICBlbnRyaWVzID0gcmVhZEFydGljbGVzRnJvbURhdGUoc2hvd2RhdGUpXHJcbicsCisgICAgICAgICAgICAnZWxzZTpcclxuJywKKyAgICAgICAgICAgICcgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tIFJFQ0VOVCBBUlRJQ0xFU1xyXG4nLAorICAgICAgICAgICAgJyAgICBzZWxmLndyaXRlKCI8aDI+UmVjZW50IGFydGljbGVzPC9oMj4iKVxyXG4nLAorICAgICAgICAgICAgJyAgICBkYXRlcz1zdG9yYWdlRW5naW5lLmxpc3RCbG9nRW50cnlEYXRlcygpXHJcbicsCisgICAgICAgICAgICAnICAgIGlmIGRhdGVzOlxyXG4nLAorICAgICAgICAgICAgJyAgICAgICAgZW50cmllcz1bXVxyXG4nLAorICAgICAgICAgICAgJyAgICAgICAgU0hPV0FNT1VOVD0xMFxyXG4nLAorICAgICAgICAgICAgJyAgICAgICAgZm9yIHNob3dkYXRlIGluIGRhdGVzOlxyXG4nLAorICAgICAgICAgICAgJyAgICAgICAgICAgIGVudHJpZXMuZXh0ZW5kKCByZWFkQXJ0aWNsZXNGcm9tRGF0ZShzaG93ZGF0ZSwgU0hPV0FNT1VOVC1sZW4oZW50cmllcykpIClcclxuJywKKyAgICAgICAgICAgICcgICAgICAgICAgICBpZiBsZW4oZW50cmllcyk+PVNIT1dBTU9VTlQ6XHJcbicsCisgICAgICAgICAgICAnICAgICAgICAgICAgICAgIGJyZWFrXHJcbicsCisgICAgICAgICAgICAnICAgICAgICAgICAgICAgIFxyXG4nLAorICAgICAgICBdCisgICAgICAgIHN0cmVhbSA9IFN0cmluZ0lPLlN0cmluZ0lPKCIiLmpvaW4ocykuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQorICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKHNlbGYuZW5jb2RpbmcpKHN0cmVhbSkKKyAgICAgICAgZm9yIChpLCBsaW5lKSBpbiBlbnVtZXJhdGUocmVhZGVyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgc1tpXSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lcXVldWUoc2VsZik6CisgICAgICAgIHEgPSBRdWV1ZSgpCisgICAgICAgIHdyaXRlciA9IGNvZGVjcy5nZXR3cml0ZXIoc2VsZi5lbmNvZGluZykocSkKKyAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcihzZWxmLmVuY29kaW5nKShxKQorCisgICAgICAgICMgTm8gbGluZWVuZHMKKyAgICAgICAgd3JpdGVyLndyaXRlKHUiZm9vXHIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZShrZWVwZW5kcz1GYWxzZSksIHUiZm9vIikKKyAgICAgICAgd3JpdGVyLndyaXRlKHUiXG5iYXJcciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKGtlZXBlbmRzPUZhbHNlKSwgdSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZShrZWVwZW5kcz1GYWxzZSksIHUiYmFyIikKKyAgICAgICAgd3JpdGVyLndyaXRlKHUiYmF6IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoa2VlcGVuZHM9RmFsc2UpLCB1ImJheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKGtlZXBlbmRzPUZhbHNlKSwgdSIiKQorCisgICAgICAgICMgTGluZWVuZHMKKyAgICAgICAgd3JpdGVyLndyaXRlKHUiZm9vXHIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZShrZWVwZW5kcz1UcnVlKSwgdSJmb29cciIpCisgICAgICAgIHdyaXRlci53cml0ZSh1IlxuYmFyXHIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZShrZWVwZW5kcz1UcnVlKSwgdSJcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKGtlZXBlbmRzPVRydWUpLCB1ImJhclxyIikKKyAgICAgICAgd3JpdGVyLndyaXRlKHUiYmF6IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoa2VlcGVuZHM9VHJ1ZSksIHUiYmF6IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoa2VlcGVuZHM9VHJ1ZSksIHUiIikKKyAgICAgICAgd3JpdGVyLndyaXRlKHUiZm9vXHJcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKGtlZXBlbmRzPVRydWUpLCB1ImZvb1xyXG4iKQorCisgICAgZGVmIHRlc3RfYnVnMTA5ODk5MF9hKHNlbGYpOgorICAgICAgICBzMSA9IHUieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCB5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5XHJcbiIKKyAgICAgICAgczIgPSB1Im9mZmVuZGluZyBsaW5lOiBsYWRmaiBhc2tsZGZqIGtsYXNkaiBmc2tsYSBkZnphc2tkaiBmYXNrbGZqIGxhc2tkIGZqYXNrbGZ6enp6YWEld2hlcmVpc3RoaXMhISFcclxuIgorICAgICAgICBzMyA9IHUibmV4dCBsaW5lLlxyXG4iCisKKyAgICAgICAgcyA9IChzMStzMitzMykuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgIHN0cmVhbSA9IFN0cmluZ0lPLlN0cmluZ0lPKHMpCisgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoc2VsZi5lbmNvZGluZykoc3RyZWFtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZSgpLCBzMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoKSwgczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKCksIHMzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZSgpLCB1IiIpCisKKyAgICBkZWYgdGVzdF9idWcxMDk4OTkwX2Ioc2VsZik6CisgICAgICAgIHMxID0gdSJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFcclxuIgorICAgICAgICBzMiA9IHUiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiXHJcbiIKKyAgICAgICAgczMgPSB1InN0aWxsb2theTpiYmJieHhcclxuIgorICAgICAgICBzNCA9IHUiYnJva2VuISEhIWJhZGJhZFxyXG4iCisgICAgICAgIHM1ID0gdSJhZ2Fpbm9rYXkuXHJcbiIKKworICAgICAgICBzID0gKHMxK3MyK3MzK3M0K3M1KS5lbmNvZGUoc2VsZi5lbmNvZGluZykKKyAgICAgICAgc3RyZWFtID0gU3RyaW5nSU8uU3RyaW5nSU8ocykKKyAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcihzZWxmLmVuY29kaW5nKShzdHJlYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKCksIHMxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZSgpLCBzMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoKSwgczMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKCksIHM0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZSgpLCBzNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoKSwgdSIiKQorCitjbGFzcyBVVEYzMlRlc3QoUmVhZFRlc3QpOgorICAgIGVuY29kaW5nID0gInV0Zi0zMiIKKworICAgIHNwYW1sZSA9ICgnXHhmZlx4ZmVceDAwXHgwMCcKKyAgICAgICAgICAgICAgJ3NceDAwXHgwMFx4MDBwXHgwMFx4MDBceDAwYVx4MDBceDAwXHgwMG1ceDAwXHgwMFx4MDAnCisgICAgICAgICAgICAgICdzXHgwMFx4MDBceDAwcFx4MDBceDAwXHgwMGFceDAwXHgwMFx4MDBtXHgwMFx4MDBceDAwJykKKyAgICBzcGFtYmUgPSAoJ1x4MDBceDAwXHhmZVx4ZmYnCisgICAgICAgICAgICAgICdceDAwXHgwMFx4MDBzXHgwMFx4MDBceDAwcFx4MDBceDAwXHgwMGFceDAwXHgwMFx4MDBtJworICAgICAgICAgICAgICAnXHgwMFx4MDBceDAwc1x4MDBceDAwXHgwMHBceDAwXHgwMFx4MDBhXHgwMFx4MDBceDAwbScpCisKKyAgICBkZWYgdGVzdF9vbmx5X29uZV9ib20oc2VsZik6CisgICAgICAgIF8sXyxyZWFkZXIsd3JpdGVyID0gY29kZWNzLmxvb2t1cChzZWxmLmVuY29kaW5nKQorICAgICAgICAjIGVuY29kZSBzb21lIHN0cmVhbQorICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBmID0gd3JpdGVyKHMpCisgICAgICAgIGYud3JpdGUodSJzcGFtIikKKyAgICAgICAgZi53cml0ZSh1InNwYW0iKQorICAgICAgICBkID0gcy5nZXR2YWx1ZSgpCisgICAgICAgICMgY2hlY2sgd2hldGhlciB0aGVyZSBpcyBleGFjdGx5IG9uZSBCT00gaW4gaXQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQgPT0gc2VsZi5zcGFtbGUgb3IgZCA9PSBzZWxmLnNwYW1iZSkKKyAgICAgICAgIyB0cnkgdG8gcmVhZCBpdCBiYWNrCisgICAgICAgIHMgPSBTdHJpbmdJTy5TdHJpbmdJTyhkKQorICAgICAgICBmID0gcmVhZGVyKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHUic3BhbXNwYW0iKQorCisgICAgZGVmIHRlc3RfYmFkYm9tKHNlbGYpOgorICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oNCoiXHhmZiIpCisgICAgICAgIGYgPSBjb2RlY3MuZ2V0cmVhZGVyKHNlbGYuZW5jb2RpbmcpKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgZi5yZWFkKQorCisgICAgICAgIHMgPSBTdHJpbmdJTy5TdHJpbmdJTyg4KiJceGZmIikKKyAgICAgICAgZiA9IGNvZGVjcy5nZXRyZWFkZXIoc2VsZi5lbmNvZGluZykocykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBmLnJlYWQpCisKKyAgICBkZWYgdGVzdF9wYXJ0aWFsKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3BhcnRpYWwoCisgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmXFUwMDAxMDAwMCIsCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgdSIiLCAjIGZpcnN0IGJ5dGUgb2YgQk9NIHJlYWQKKyAgICAgICAgICAgICAgICB1IiIsICMgc2Vjb25kIGJ5dGUgb2YgQk9NIHJlYWQKKyAgICAgICAgICAgICAgICB1IiIsICMgdGhpcmQgYnl0ZSBvZiBCT00gcmVhZAorICAgICAgICAgICAgICAgIHUiIiwgIyBmb3VydGggYnl0ZSBvZiBCT00gcmVhZCA9PiBieXRlb3JkZXIga25vd24KKyAgICAgICAgICAgICAgICB1IiIsCisgICAgICAgICAgICAgICAgdSIiLAorICAgICAgICAgICAgICAgIHUiIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmZcVTAwMDEwMDAwIiwKKyAgICAgICAgICAgIF0KKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfaGFuZGxlcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHUnXHVmZmZkJywgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNzLnV0Zl8zMl9kZWNvZGUoJ1x4MDEnLCAncmVwbGFjZScsIFRydWUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh1JycsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjcy51dGZfMzJfZGVjb2RlKCdceDAxJywgJ2lnbm9yZScsIFRydWUpKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGNvZGVjcy51dGZfMzJfZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhmZiIsICJzdHJpY3QiLCBUcnVlKQorCisgICAgZGVmIHRlc3RfaXNzdWU4OTQxKHNlbGYpOgorICAgICAgICAjIElzc3VlICM4OTQxOiBpbnN1ZmZpY2llbnQgcmVzdWx0IGFsbG9jYXRpb24gd2hlbiBkZWNvZGluZyBpbnRvCisgICAgICAgICMgc3Vycm9nYXRlIHBhaXJzIG9uIFVDUy0yIGJ1aWxkcy4KKyAgICAgICAgZW5jb2RlZF9sZSA9ICdceGZmXHhmZVx4MDBceDAwJyArICdceDAwXHgwMFx4MDFceDAwJyAqIDEwMjQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTAwMDAnICogMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY3MudXRmXzMyX2RlY29kZShlbmNvZGVkX2xlKVswXSkKKyAgICAgICAgZW5jb2RlZF9iZSA9ICdceDAwXHgwMFx4ZmVceGZmJyArICdceDAwXHgwMVx4MDBceDAwJyAqIDEwMjQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTAwMDAnICogMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY3MudXRmXzMyX2RlY29kZShlbmNvZGVkX2JlKVswXSkKKworY2xhc3MgVVRGMzJMRVRlc3QoUmVhZFRlc3QpOgorICAgIGVuY29kaW5nID0gInV0Zi0zMi1sZSIKKworICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKKyAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmZcVTAwMDEwMDAwIiwKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICB1IiIsCisgICAgICAgICAgICAgICAgdSIiLAorICAgICAgICAgICAgICAgIHUiIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmZcVTAwMDEwMDAwIiwKKyAgICAgICAgICAgIF0KKyAgICAgICAgKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiXFUwMDAxMDIwMyIuZW5jb2RlKHNlbGYuZW5jb2RpbmcpLCAiXHgwM1x4MDJceDAxXHgwMCIpCisKKyAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgY29kZWNzLnV0Zl8zMl9sZV9kZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJceGZmIiwgInN0cmljdCIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTg5NDEoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzg5NDE6IGluc3VmZmljaWVudCByZXN1bHQgYWxsb2NhdGlvbiB3aGVuIGRlY29kaW5nIGludG8KKyAgICAgICAgIyBzdXJyb2dhdGUgcGFpcnMgb24gVUNTLTIgYnVpbGRzLgorICAgICAgICBlbmNvZGVkID0gJ1x4MDBceDAwXHgwMVx4MDAnICogMTAyNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXFUwMDAxMDAwMCcgKiAxMDI0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjcy51dGZfMzJfbGVfZGVjb2RlKGVuY29kZWQpWzBdKQorCitjbGFzcyBVVEYzMkJFVGVzdChSZWFkVGVzdCk6CisgICAgZW5jb2RpbmcgPSAidXRmLTMyLWJlIgorCisgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKAorICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMFx1ZmZmZlxVMDAwMTAwMDAiLAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIHUiIiwKKyAgICAgICAgICAgICAgICB1IiIsCisgICAgICAgICAgICAgICAgdSIiLAorICAgICAgICAgICAgICAgIHUiXHgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMFx1ZmZmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMFx1ZmZmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMFx1ZmZmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMFx1ZmZmZiIsCisgICAgICAgICAgICAgICAgdSJceDAwXHhmZlx1MDEwMFx1ZmZmZlxVMDAwMTAwMDAiLAorICAgICAgICAgICAgXQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJcVTAwMDEwMjAzIi5lbmNvZGUoc2VsZi5lbmNvZGluZyksICJceDAwXHgwMVx4MDJceDAzIikKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjb2RlY3MudXRmXzMyX2JlX2RlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZmYiLCAic3RyaWN0IiwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2lzc3VlODk0MShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjODk0MTogaW5zdWZmaWNpZW50IHJlc3VsdCBhbGxvY2F0aW9uIHdoZW4gZGVjb2RpbmcgaW50bworICAgICAgICAjIHN1cnJvZ2F0ZSBwYWlycyBvbiBVQ1MtMiBidWlsZHMuCisgICAgICAgIGVuY29kZWQgPSAnXHgwMFx4MDFceDAwXHgwMCcgKiAxMDI0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwMDAwJyAqIDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNzLnV0Zl8zMl9iZV9kZWNvZGUoZW5jb2RlZClbMF0pCisKKworY2xhc3MgVVRGMTZUZXN0KFJlYWRUZXN0KToKKyAgICBlbmNvZGluZyA9ICJ1dGYtMTYiCisKKyAgICBzcGFtbGUgPSAnXHhmZlx4ZmVzXHgwMHBceDAwYVx4MDBtXHgwMHNceDAwcFx4MDBhXHgwMG1ceDAwJworICAgIHNwYW1iZSA9ICdceGZlXHhmZlx4MDBzXHgwMHBceDAwYVx4MDBtXHgwMHNceDAwcFx4MDBhXHgwMG0nCisKKyAgICBkZWYgdGVzdF9vbmx5X29uZV9ib20oc2VsZik6CisgICAgICAgIF8sXyxyZWFkZXIsd3JpdGVyID0gY29kZWNzLmxvb2t1cChzZWxmLmVuY29kaW5nKQorICAgICAgICAjIGVuY29kZSBzb21lIHN0cmVhbQorICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBmID0gd3JpdGVyKHMpCisgICAgICAgIGYud3JpdGUodSJzcGFtIikKKyAgICAgICAgZi53cml0ZSh1InNwYW0iKQorICAgICAgICBkID0gcy5nZXR2YWx1ZSgpCisgICAgICAgICMgY2hlY2sgd2hldGhlciB0aGVyZSBpcyBleGFjdGx5IG9uZSBCT00gaW4gaXQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQgPT0gc2VsZi5zcGFtbGUgb3IgZCA9PSBzZWxmLnNwYW1iZSkKKyAgICAgICAgIyB0cnkgdG8gcmVhZCBpdCBiYWNrCisgICAgICAgIHMgPSBTdHJpbmdJTy5TdHJpbmdJTyhkKQorICAgICAgICBmID0gcmVhZGVyKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHUic3BhbXNwYW0iKQorCisgICAgZGVmIHRlc3RfYmFkYm9tKHNlbGYpOgorICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oIlx4ZmZceGZmIikKKyAgICAgICAgZiA9IGNvZGVjcy5nZXRyZWFkZXIoc2VsZi5lbmNvZGluZykocykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBmLnJlYWQpCisKKyAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCJceGZmXHhmZlx4ZmZceGZmIikKKyAgICAgICAgZiA9IGNvZGVjcy5nZXRyZWFkZXIoc2VsZi5lbmNvZGluZykocykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBmLnJlYWQpCisKKyAgICBkZWYgdGVzdF9wYXJ0aWFsKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3BhcnRpYWwoCisgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmXFUwMDAxMDAwMCIsCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgdSIiLCAjIGZpcnN0IGJ5dGUgb2YgQk9NIHJlYWQKKyAgICAgICAgICAgICAgICB1IiIsICMgc2Vjb25kIGJ5dGUgb2YgQk9NIHJlYWQgPT4gYnl0ZW9yZGVyIGtub3duCisgICAgICAgICAgICAgICAgdSIiLAorICAgICAgICAgICAgICAgIHUiXHgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwMTAwXHVmZmZmXFUwMDAxMDAwMCIsCisgICAgICAgICAgICBdCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2hhbmRsZXJzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh1J1x1ZmZmZCcsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjcy51dGZfMTZfZGVjb2RlKCdceDAxJywgJ3JlcGxhY2UnLCBUcnVlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodScnLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY3MudXRmXzE2X2RlY29kZSgnXHgwMScsICdpZ25vcmUnLCBUcnVlKSkKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjb2RlY3MudXRmXzE2X2RlY29kZSwgIlx4ZmYiLCAic3RyaWN0IiwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2J1ZzY5MTI5MShzZWxmKToKKyAgICAgICAgIyBGaWxlcyBhcmUgYWx3YXlzIG9wZW5lZCBpbiBiaW5hcnkgbW9kZSwgZXZlbiBpZiBubyBiaW5hcnkgbW9kZSB3YXMKKyAgICAgICAgIyBzcGVjaWZpZWQuICBUaGlzIG1lYW5zIHRoYXQgbm8gYXV0b21hdGljIGNvbnZlcnNpb24gb2YgJ1xuJyBpcyBkb25lCisgICAgICAgICMgb24gcmVhZGluZyBhbmQgd3JpdGluZy4KKyAgICAgICAgczEgPSB1J0hlbGxvXHJcbndvcmxkXHJcbicKKworICAgICAgICBzID0gczEuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0X3N1cHBvcnQudW5saW5rLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShzKQorICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICdVJywgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZykgYXMgcmVhZGVyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZCgpLCBzMSkKKworY2xhc3MgVVRGMTZMRVRlc3QoUmVhZFRlc3QpOgorICAgIGVuY29kaW5nID0gInV0Zi0xNi1sZSIKKworICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKKyAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmZcVTAwMDEwMDAwIiwKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICB1IiIsCisgICAgICAgICAgICAgICAgdSJceDAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmZcVTAwMDEwMDAwIiwKKyAgICAgICAgICAgIF0KKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICB0ZXN0cyA9IFsKKyAgICAgICAgICAgIChiJ1x4ZmYnLCB1J1x1ZmZmZCcpLAorICAgICAgICAgICAgKGInQVx4MDBaJywgdSdBXHVmZmZkJyksCisgICAgICAgICAgICAoYidBXHgwMEJceDAwQ1x4MDBEXHgwMFonLCB1J0FCQ0RcdWZmZmQnKSwKKyAgICAgICAgICAgIChiJ1x4MDBceGQ4JywgdSdcdWZmZmQnKSwKKyAgICAgICAgICAgIChiJ1x4MDBceGQ4QScsIHUnXHVmZmZkJyksCisgICAgICAgICAgICAoYidceDAwXHhkOEFceDAwJywgdSdcdWZmZmRBJyksCisgICAgICAgICAgICAoYidceDAwXHhkY0FceDAwJywgdSdcdWZmZmRBJyksCisgICAgICAgIF0KKyAgICAgICAgZm9yIHJhdywgZXhwZWN0ZWQgaW4gdGVzdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGNvZGVjcy51dGZfMTZfbGVfZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3LCAnc3RyaWN0JywgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3LmRlY29kZSgndXRmLTE2bGUnLCAncmVwbGFjZScpLCBleHBlY3RlZCkKKworY2xhc3MgVVRGMTZCRVRlc3QoUmVhZFRlc3QpOgorICAgIGVuY29kaW5nID0gInV0Zi0xNi1iZSIKKworICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKKyAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmZcVTAwMDEwMDAwIiwKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICB1IiIsCisgICAgICAgICAgICAgICAgdSJceDAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDAiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHgwMFx4ZmZcdTAxMDBcdWZmZmZcVTAwMDEwMDAwIiwKKyAgICAgICAgICAgIF0KKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICB0ZXN0cyA9IFsKKyAgICAgICAgICAgIChiJ1x4ZmYnLCB1J1x1ZmZmZCcpLAorICAgICAgICAgICAgKGInXHgwMEFceGZmJywgdSdBXHVmZmZkJyksCisgICAgICAgICAgICAoYidceDAwQVx4MDBCXHgwMENceDAwRFonLCB1J0FCQ0RcdWZmZmQnKSwKKyAgICAgICAgICAgIChiJ1x4ZDhceDAwJywgdSdcdWZmZmQnKSwKKyAgICAgICAgICAgIChiJ1x4ZDhceDAwXHhkYycsIHUnXHVmZmZkJyksCisgICAgICAgICAgICAoYidceGQ4XHgwMFx4MDBBJywgdSdcdWZmZmRBJyksCisgICAgICAgICAgICAoYidceGRjXHgwMFx4MDBBJywgdSdcdWZmZmRBJyksCisgICAgICAgIF0KKyAgICAgICAgZm9yIHJhdywgZXhwZWN0ZWQgaW4gdGVzdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGNvZGVjcy51dGZfMTZfYmVfZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3LCAnc3RyaWN0JywgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3LmRlY29kZSgndXRmLTE2YmUnLCAncmVwbGFjZScpLCBleHBlY3RlZCkKKworY2xhc3MgVVRGOFRlc3QoUmVhZFRlc3QpOgorICAgIGVuY29kaW5nID0gInV0Zi04IgorCisgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKAorICAgICAgICAgICAgdSJceDAwXHhmZlx1MDdmZlx1MDgwMFx1ZmZmZlxVMDAwMTAwMDAiLAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIHUiXHgwMCIsCisgICAgICAgICAgICAgICAgdSJceDAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwN2ZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwN2ZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwN2ZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwN2ZmXHUwODAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwN2ZmXHUwODAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwN2ZmXHUwODAwIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwN2ZmXHUwODAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwN2ZmXHUwODAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwN2ZmXHUwODAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwN2ZmXHUwODAwXHVmZmZmIiwKKyAgICAgICAgICAgICAgICB1Ilx4MDBceGZmXHUwN2ZmXHUwODAwXHVmZmZmXFUwMDAxMDAwMCIsCisgICAgICAgICAgICBdCisgICAgICAgICkKKworY2xhc3MgVVRGN1Rlc3QoUmVhZFRlc3QpOgorICAgIGVuY29kaW5nID0gInV0Zi03IgorCisgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKAorICAgICAgICAgICAgdSJhKy1iIiwKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICB1ImEiLAorICAgICAgICAgICAgICAgIHUiYSIsCisgICAgICAgICAgICAgICAgdSJhKyIsCisgICAgICAgICAgICAgICAgdSJhKy0iLAorICAgICAgICAgICAgICAgIHUiYSstYiIsCisgICAgICAgICAgICBdCisgICAgICAgICkKKworY2xhc3MgVVRGMTZFeFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGNvZGVjcy51dGZfMTZfZXhfZGVjb2RlLCAiXHhmZiIsICJzdHJpY3QiLCAwLCBUcnVlKQorCisgICAgZGVmIHRlc3RfYmFkX2FyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLnV0Zl8xNl9leF9kZWNvZGUpCisKK2NsYXNzIFJlYWRCdWZmZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2FycmF5KHNlbGYpOgorICAgICAgICBpbXBvcnQgYXJyYXkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5yZWFkYnVmZmVyX2VuY29kZShhcnJheS5hcnJheSgiYyIsICJzcGFtIikpLAorICAgICAgICAgICAgKCJzcGFtIiwgNCkKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLnJlYWRidWZmZXJfZW5jb2RlKCIiKSwgKCIiLCAwKSkKKworICAgIGRlZiB0ZXN0X2JhZF9hcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5yZWFkYnVmZmVyX2VuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MucmVhZGJ1ZmZlcl9lbmNvZGUsIDQyKQorCitjbGFzcyBDaGFyQnVmZmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmNoYXJidWZmZXJfZW5jb2RlKCJzcGFtIiksICgic3BhbSIsIDQpKQorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmNoYXJidWZmZXJfZW5jb2RlKCIiKSwgKCIiLCAwKSkKKworICAgIGRlZiB0ZXN0X2JhZF9hcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5jaGFyYnVmZmVyX2VuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MuY2hhcmJ1ZmZlcl9lbmNvZGUsIDQyKQorCitjbGFzcyBVVEY4U2lnVGVzdChSZWFkVGVzdCk6CisgICAgZW5jb2RpbmcgPSAidXRmLTgtc2lnIgorCisgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKAorICAgICAgICAgICAgdSJcdWZlZmZceDAwXHhmZlx1MDdmZlx1MDgwMFx1ZmZmZlxVMDAwMTAwMDAiLAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgIHUiIiwKKyAgICAgICAgICAgICAgICB1IiIsCisgICAgICAgICAgICAgICAgdSIiLCAjIEZpcnN0IEJPTSBoYXMgYmVlbiByZWFkIGFuZCBza2lwcGVkCisgICAgICAgICAgICAgICAgdSIiLAorICAgICAgICAgICAgICAgIHUiIiwKKyAgICAgICAgICAgICAgICB1Ilx1ZmVmZiIsICMgU2Vjb25kIEJPTSBoYXMgYmVlbiByZWFkIGFuZCBlbWl0dGVkCisgICAgICAgICAgICAgICAgdSJcdWZlZmZceDAwIiwgIyAiXHgwMCIgcmVhZCBhbmQgZW1pdHRlZAorICAgICAgICAgICAgICAgIHUiXHVmZWZmXHgwMCIsICMgRmlyc3QgYnl0ZSBvZiBlbmNvZGVkIHUiXHhmZiIgcmVhZAorICAgICAgICAgICAgICAgIHUiXHVmZWZmXHgwMFx4ZmYiLCAjIFNlY29uZCBieXRlIG9mIGVuY29kZWQgdSJceGZmIiByZWFkCisgICAgICAgICAgICAgICAgdSJcdWZlZmZceDAwXHhmZiIsICMgRmlyc3QgYnl0ZSBvZiBlbmNvZGVkIHUiXHUwN2ZmIiByZWFkCisgICAgICAgICAgICAgICAgdSJcdWZlZmZceDAwXHhmZlx1MDdmZiIsICMgU2Vjb25kIGJ5dGUgb2YgZW5jb2RlZCB1Ilx1MDdmZiIgcmVhZAorICAgICAgICAgICAgICAgIHUiXHVmZWZmXHgwMFx4ZmZcdTA3ZmYiLAorICAgICAgICAgICAgICAgIHUiXHVmZWZmXHgwMFx4ZmZcdTA3ZmYiLAorICAgICAgICAgICAgICAgIHUiXHVmZWZmXHgwMFx4ZmZcdTA3ZmZcdTA4MDAiLAorICAgICAgICAgICAgICAgIHUiXHVmZWZmXHgwMFx4ZmZcdTA3ZmZcdTA4MDAiLAorICAgICAgICAgICAgICAgIHUiXHVmZWZmXHgwMFx4ZmZcdTA3ZmZcdTA4MDAiLAorICAgICAgICAgICAgICAgIHUiXHVmZWZmXHgwMFx4ZmZcdTA3ZmZcdTA4MDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHVmZWZmXHgwMFx4ZmZcdTA3ZmZcdTA4MDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHVmZWZmXHgwMFx4ZmZcdTA3ZmZcdTA4MDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHVmZWZmXHgwMFx4ZmZcdTA3ZmZcdTA4MDBcdWZmZmYiLAorICAgICAgICAgICAgICAgIHUiXHVmZWZmXHgwMFx4ZmZcdTA3ZmZcdTA4MDBcdWZmZmZcVTAwMDEwMDAwIiwKKyAgICAgICAgICAgIF0KKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYnVnMTYwMTUwMShzZWxmKToKKyAgICAgICAgIyBTRiBidWcgIzE2MDE1MDE6IGNoZWNrIHRoYXQgdGhlIGNvZGVjIHdvcmtzIHdpdGggYSBidWZmZXIKKyAgICAgICAgdW5pY29kZSgiXHhlZlx4YmJceGJmIiwgInV0Zi04LXNpZyIpCisKKyAgICBkZWYgdGVzdF9ib20oc2VsZik6CisgICAgICAgIGQgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxkZWNvZGVyKCJ1dGYtOC1zaWciKSgpCisgICAgICAgIHMgPSB1InNwYW0iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5kZWNvZGUocy5lbmNvZGUoInV0Zi04LXNpZyIpKSwgcykKKworICAgIGRlZiB0ZXN0X3N0cmVhbV9ib20oc2VsZik6CisgICAgICAgIHVuaXN0cmluZyA9IHUiQUJDXHUwMEExXHUyMjAwWFlaIgorICAgICAgICBieXRlc3RyaW5nID0gY29kZWNzLkJPTV9VVEY4ICsgIkFCQ1x4QzJceEExXHhFMlx4ODhceDgwWFlaIgorCisgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoInV0Zi04LXNpZyIpCisgICAgICAgIGZvciBzaXplaGludCBpbiBbTm9uZV0gKyByYW5nZSgxLCAxMSkgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICBbNjQsIDEyOCwgMjU2LCA1MTIsIDEwMjRdOgorICAgICAgICAgICAgaXN0cmVhbSA9IHJlYWRlcihTdHJpbmdJTy5TdHJpbmdJTyhieXRlc3RyaW5nKSkKKyAgICAgICAgICAgIG9zdHJlYW0gPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGlmIHNpemVoaW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gaXN0cmVhbS5yZWFkKHNpemVoaW50KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBpc3RyZWFtLnJlYWQoKQorCisgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgb3N0cmVhbS53cml0ZShkYXRhKQorCisgICAgICAgICAgICBnb3QgPSBvc3RyZWFtLmdldHZhbHVlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCB1bmlzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9zdHJlYW1fYmFyZShzZWxmKToKKyAgICAgICAgdW5pc3RyaW5nID0gdSJBQkNcdTAwQTFcdTIyMDBYWVoiCisgICAgICAgIGJ5dGVzdHJpbmcgPSAiQUJDXHhDMlx4QTFceEUyXHg4OFx4ODBYWVoiCisKKyAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcigidXRmLTgtc2lnIikKKyAgICAgICAgZm9yIHNpemVoaW50IGluIFtOb25lXSArIHJhbmdlKDEsIDExKSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIFs2NCwgMTI4LCAyNTYsIDUxMiwgMTAyNF06CisgICAgICAgICAgICBpc3RyZWFtID0gcmVhZGVyKFN0cmluZ0lPLlN0cmluZ0lPKGJ5dGVzdHJpbmcpKQorICAgICAgICAgICAgb3N0cmVhbSA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgaWYgc2l6ZWhpbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBpc3RyZWFtLnJlYWQoc2l6ZWhpbnQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGlzdHJlYW0ucmVhZCgpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBvc3RyZWFtLndyaXRlKGRhdGEpCisKKyAgICAgICAgICAgIGdvdCA9IG9zdHJlYW0uZ2V0dmFsdWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIHVuaXN0cmluZykKKworY2xhc3MgRXNjYXBlRGVjb2RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmVzY2FwZV9kZWNvZGUoIiIpLCAoIiIsIDApKQorCisgICAgZGVmIHRlc3RfcmF3KHNlbGYpOgorICAgICAgICBkZWNvZGUgPSBjb2RlY3MuZXNjYXBlX2RlY29kZQorICAgICAgICBmb3IgYiBpbiByYW5nZSgyNTYpOgorICAgICAgICAgICAgYiA9IGNocihiKQorICAgICAgICAgICAgaWYgYiAhPSAnXFwnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlKGIgKyAnMCcpLCAoYiArICcwJywgMikpCisKKyAgICBkZWYgdGVzdF9lc2NhcGUoc2VsZik6CisgICAgICAgIGRlY29kZSA9IGNvZGVjcy5lc2NhcGVfZGVjb2RlCisgICAgICAgIGNoZWNrID0gY29kaW5nX2NoZWNrZXIoc2VsZiwgZGVjb2RlKQorICAgICAgICBjaGVjayhiIltcXFxuXSIsIGIiW10iKQorICAgICAgICBjaGVjayhicidbXCJdJywgYidbIl0nKQorICAgICAgICBjaGVjayhiciJbXCddIiwgYiJbJ10iKQorICAgICAgICBjaGVjayhiciJbXFxdIiwgYnIiW1xdIikKKyAgICAgICAgY2hlY2soYnIiW1xhXSIsIGIiW1x4MDddIikKKyAgICAgICAgY2hlY2soYnIiW1xiXSIsIGIiW1x4MDhdIikKKyAgICAgICAgY2hlY2soYnIiW1x0XSIsIGIiW1x4MDldIikKKyAgICAgICAgY2hlY2soYnIiW1xuXSIsIGIiW1x4MGFdIikKKyAgICAgICAgY2hlY2soYnIiW1x2XSIsIGIiW1x4MGJdIikKKyAgICAgICAgY2hlY2soYnIiW1xmXSIsIGIiW1x4MGNdIikKKyAgICAgICAgY2hlY2soYnIiW1xyXSIsIGIiW1x4MGRdIikKKyAgICAgICAgY2hlY2soYnIiW1w3XSIsIGIiW1x4MDddIikKKyAgICAgICAgY2hlY2soYnIiW1w4XSIsIGJyIltcOF0iKQorICAgICAgICBjaGVjayhiciJbXDc4XSIsIGIiW1x4MDc4XSIpCisgICAgICAgIGNoZWNrKGJyIltcNDFdIiwgYiJbIV0iKQorICAgICAgICBjaGVjayhiciJbXDQxOF0iLCBiIlshOF0iKQorICAgICAgICBjaGVjayhiciJbXDEwMV0iLCBiIltBXSIpCisgICAgICAgIGNoZWNrKGJyIltcMTAxMF0iLCBiIltBMF0iKQorICAgICAgICBjaGVjayhiciJbXDUwMV0iLCBiIltBXSIpCisgICAgICAgIGNoZWNrKGJyIltceDQxXSIsIGIiW0FdIikKKyAgICAgICAgY2hlY2soYnIiW1xYNDFdIiwgYnIiW1xYNDFdIikKKyAgICAgICAgY2hlY2soYnIiW1x4NDEwXSIsIGIiW0EwXSIpCisgICAgICAgIGZvciBiIGluIHJhbmdlKDI1Nik6CisgICAgICAgICAgICBiID0gY2hyKGIpCisgICAgICAgICAgICBpZiBiIG5vdCBpbiAnXG4iXCdcXGFidG52ZnIwMTIzNDU2N3gnOgorICAgICAgICAgICAgICAgIGNoZWNrKCdcXCcgKyBiLCAnXFwnICsgYikKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgZGVjb2RlID0gY29kZWNzLmVzY2FwZV9kZWNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGVjb2RlLCBiciJceCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRlY29kZSwgYnIiW1x4XSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlKGJyIltceF1ceCIsICJpZ25vcmUiKSwgKGIiW10iLCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGUoYnIiW1x4XVx4IiwgInJlcGxhY2UiKSwgKGIiWz9dPyIsIDYpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZWNvZGUsIGJyIlx4MCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRlY29kZSwgYnIiW1x4MF0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZShiciJbXHgwXVx4MCIsICJpZ25vcmUiKSwgKGIiW10iLCA4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGUoYnIiW1x4MF1ceDAiLCAicmVwbGFjZSIpLCAoYiJbP10/IiwgOCkpCisKK2NsYXNzIFJlY29kaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcmVjb2Rpbmcoc2VsZik6CisgICAgICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGYyID0gY29kZWNzLkVuY29kZWRGaWxlKGYsICJ1bmljb2RlX2ludGVybmFsIiwgInV0Zi04IikKKyAgICAgICAgZjIud3JpdGUodSJhIikKKyAgICAgICAgZjIuY2xvc2UoKQorICAgICAgICAjIFB5dGhvbiB1c2VkIHRvIGNyYXNoIG9uIHRoaXMgYXQgZXhpdCBiZWNhdXNlIG9mIGEgcmVmY291bnQKKyAgICAgICAgIyBidWcgaW4gX2NvZGVjc21vZHVsZS5jCisKKyMgRnJvbSBSRkMgMzQ5MgorcHVueWNvZGVfdGVzdGNhc2VzID0gWworICAgICMgQSBBcmFiaWMgKEVneXB0aWFuKToKKyAgICAodSJcdTA2NDRcdTA2NEFcdTA2NDdcdTA2NDVcdTA2MjdcdTA2MjhcdTA2MkFcdTA2NDNcdTA2NDQiCisgICAgIHUiXHUwNjQ1XHUwNjQ4XHUwNjM0XHUwNjM5XHUwNjMxXHUwNjI4XHUwNjRBXHUwNjFGIiwKKyAgICAgImVnYnBkYWo2YnU0YnhmZ2VoZnZ3eG4iKSwKKyAgICAjIEIgQ2hpbmVzZSAoc2ltcGxpZmllZCk6CisgICAgKHUiXHU0RUQ2XHU0RUVDXHU0RTNBXHU0RUMwXHU0RTQ4XHU0RTBEXHU4QkY0XHU0RTJEXHU2NTg3IiwKKyAgICAgImlocXdjcmI0Y3Y4YThkcWcwNTZwcWp5ZSIpLAorICAgICMgQyBDaGluZXNlICh0cmFkaXRpb25hbCk6CisgICAgKHUiXHU0RUQ2XHU1MDExXHU3MjMyXHU0RUMwXHU5RUJEXHU0RTBEXHU4QUFBXHU0RTJEXHU2NTg3IiwKKyAgICAgImlocXdjdHZ6YzkxZjY1OWRyc3MzeDhibzB5YiIpLAorICAgICMgRCBDemVjaDogUHJvPGNjYXJvbj5wcm9zdDxlY2Fyb24+bmVtbHV2PGlhY3V0ZT48Y2Nhcm9uPmVza3kKKyAgICAodSJcdTAwNTBcdTAwNzJcdTAwNkZcdTAxMERcdTAwNzBcdTAwNzJcdTAwNkZcdTAwNzNcdTAwNzQiCisgICAgIHUiXHUwMTFCXHUwMDZFXHUwMDY1XHUwMDZEXHUwMDZDXHUwMDc1XHUwMDc2XHUwMEVEXHUwMTBEIgorICAgICB1Ilx1MDA2NVx1MDA3M1x1MDA2Qlx1MDA3OSIsCisgICAgICJQcm9wcm9zdG5lbWx1dmVza3ktdXliMjRkbWE0MWEiKSwKKyAgICAjIEUgSGVicmV3OgorICAgICh1Ilx1MDVEQ1x1MDVERVx1MDVENFx1MDVENFx1MDVERFx1MDVFNFx1MDVFOVx1MDVENVx1MDVEOCIKKyAgICAgdSJcdTA1RENcdTA1RDBcdTA1REVcdTA1RDNcdTA1RDFcdTA1RThcdTA1RDlcdTA1RERcdTA1RTIiCisgICAgIHUiXHUwNUQxXHUwNUU4XHUwNUQ5XHUwNUVBIiwKKyAgICAgIjRkYmNhZ2RhaHltYnhla2hlaDZlMGE3ZmVpMGIiKSwKKyAgICAjIEYgSGluZGkgKERldmFuYWdhcmkpOgorICAgICh1Ilx1MDkyRlx1MDkzOVx1MDkzMlx1MDk0Qlx1MDkxN1x1MDkzOVx1MDkzRlx1MDkyOFx1MDk0RCIKKyAgICB1Ilx1MDkyNlx1MDk0MFx1MDkxNVx1MDk0RFx1MDkyRlx1MDk0Qlx1MDkwMlx1MDkyOFx1MDkzOSIKKyAgICB1Ilx1MDk0MFx1MDkwMlx1MDkyQ1x1MDk0Qlx1MDkzMlx1MDkzOFx1MDkxNVx1MDkyNFx1MDk0NyIKKyAgICB1Ilx1MDkzOVx1MDk0OFx1MDkwMiIsCisgICAgImkxYmFhN2VjaTlnbHJkOWIyYWUxYmowaGZjZ2c2aXlhZjhvMGExZGlnMGNkIiksCisKKyAgICAjKEcpIEphcGFuZXNlIChrYW5qaSBhbmQgaGlyYWdhbmEpOgorICAgICh1Ilx1MzA2QVx1MzA1Q1x1MzA3Rlx1MzA5M1x1MzA2QVx1NjVFNVx1NjcyQ1x1OEE5RVx1MzA5MiIKKyAgICB1Ilx1OEE3MVx1MzA1N1x1MzA2Nlx1MzA0Rlx1MzA4Q1x1MzA2QVx1MzA0NFx1MzA2RVx1MzA0QiIsCisgICAgICJuOGpvazVheTVkemFiZDVieW05ZjBjbTU2ODVycmpldHI2cGR4YSIpLAorCisgICAgIyAoSCkgS29yZWFuIChIYW5ndWwgc3lsbGFibGVzKToKKyAgICAodSJcdUMxMzhcdUFDQzRcdUM3NThcdUJBQThcdUI0RTBcdUMwQUNcdUI3OENcdUI0RTRcdUM3NzQiCisgICAgIHUiXHVENTVDXHVBRDZEXHVDNUI0XHVCOTdDXHVDNzc0XHVENTc0XHVENTVDXHVCMkU0XHVCQTc0IgorICAgICB1Ilx1QzVCQ1x1QjlDOFx1QjA5OFx1Qzg4Qlx1Qzc0NFx1QUU0QyIsCisgICAgICI5ODlhb21zdmk1ZTgzZGIxZDJhMzU1Y3YxZTB2YWsxZHdydjkzZDV4YmgxNWEwZHQzMGE1aiIKKyAgICAgInBzZDg3OWNjbTZmZWE5OGMiKSwKKworICAgICMgKEkpIFJ1c3NpYW4gKEN5cmlsbGljKToKKyAgICAodSJcdTA0M0ZcdTA0M0VcdTA0NDdcdTA0MzVcdTA0M0NcdTA0NDNcdTA0MzZcdTA0MzVcdTA0M0UiCisgICAgIHUiXHUwNDNEXHUwNDM4XHUwNDNEXHUwNDM1XHUwNDMzXHUwNDNFXHUwNDMyXHUwNDNFXHUwNDQwIgorICAgICB1Ilx1MDQ0Rlx1MDQ0Mlx1MDQzRlx1MDQzRVx1MDQ0MFx1MDQ0M1x1MDQ0MVx1MDQ0MVx1MDQzQSIKKyAgICAgdSJcdTA0MzgiLAorICAgICAiYjFhYmZhYWVwZHJubmJnZWZiYURvdGN3YXRtcTJnNGwiKSwKKworICAgICMgKEopIFNwYW5pc2g6IFBvcnF1PGVhY3V0ZT5ub3B1ZWRlbnNpbXBsZW1lbnRlaGFibGFyZW5Fc3BhPG50aWxkZT5vbAorICAgICh1Ilx1MDA1MFx1MDA2Rlx1MDA3Mlx1MDA3MVx1MDA3NVx1MDBFOVx1MDA2RVx1MDA2Rlx1MDA3MCIKKyAgICAgdSJcdTAwNzVcdTAwNjVcdTAwNjRcdTAwNjVcdTAwNkVcdTAwNzNcdTAwNjlcdTAwNkRcdTAwNzAiCisgICAgIHUiXHUwMDZDXHUwMDY1XHUwMDZEXHUwMDY1XHUwMDZFXHUwMDc0XHUwMDY1XHUwMDY4XHUwMDYxIgorICAgICB1Ilx1MDA2Mlx1MDA2Q1x1MDA2MVx1MDA3Mlx1MDA2NVx1MDA2RVx1MDA0NVx1MDA3M1x1MDA3MCIKKyAgICAgdSJcdTAwNjFcdTAwRjFcdTAwNkZcdTAwNkMiLAorICAgICAiUG9ycXVub3B1ZWRlbnNpbXBsZW1lbnRlaGFibGFyZW5Fc3Bhb2wtZm1kNTZhIiksCisKKyAgICAjIChLKSBWaWV0bmFtZXNlOgorICAgICMgIFQ8YWRvdGJlbG93PmlzYW9oPG9kb3RiZWxvdz5raDxvY2lyYz5uZ3RoPGVjaXJjaG9va2Fib3ZlPmNoXAorICAgICMgICA8aWhvb2thYm92ZT5uPG9hY3V0ZT5pdGk8ZWNpcmNhY3V0ZT5uZ1ZpPGVjaXJjZG90YmVsb3c+dAorICAgICh1Ilx1MDA1NFx1MUVBMVx1MDA2OVx1MDA3M1x1MDA2MVx1MDA2Rlx1MDA2OFx1MUVDRFx1MDA2QiIKKyAgICAgdSJcdTAwNjhcdTAwRjRcdTAwNkVcdTAwNjdcdTAwNzRcdTAwNjhcdTFFQzNcdTAwNjNcdTAwNjgiCisgICAgIHUiXHUxRUM5XHUwMDZFXHUwMEYzXHUwMDY5XHUwMDc0XHUwMDY5XHUxRUJGXHUwMDZFXHUwMDY3IgorICAgICB1Ilx1MDA1Nlx1MDA2OVx1MUVDN1x1MDA3NCIsCisgICAgICJUaXNhb2hraG5ndGhjaG5pdGluZ1ZpdC1ramNyODI2OHF5eGFmZDJmMWI5ZyIpLAorCisgICAgIyhMKSAzPG5lbj5CPGd1bWk+PGtpbnBhY2hpPjxzZW5zZWk+CisgICAgKHUiXHUwMDMzXHU1RTc0XHUwMDQyXHU3RDQ0XHU5MUQxXHU1MTZCXHU1MTQ4XHU3NTFGIiwKKyAgICAgIjNCLXd3NGM1ZTE4MGU1NzVhNjVsc3kyYiIpLAorCisgICAgIyAoTSkgPGFtdXJvPjxuYW1pZT4td2l0aC1TVVBFUi1NT05LRVlTCisgICAgKHUiXHU1Qjg5XHU1QkE0XHU1OTQ4XHU3RjhFXHU2MDc1XHUwMDJEXHUwMDc3XHUwMDY5XHUwMDc0IgorICAgICB1Ilx1MDA2OFx1MDAyRFx1MDA1M1x1MDA1NVx1MDA1MFx1MDA0NVx1MDA1Mlx1MDAyRFx1MDA0RCIKKyAgICAgdSJcdTAwNEZcdTAwNEVcdTAwNEJcdTAwNDVcdTAwNTlcdTAwNTMiLAorICAgICAiLXdpdGgtU1VQRVItTU9OS0VZUy1wYzU4YWc4MGE4cWFpMDBnN245biIpLAorCisgICAgIyAoTikgSGVsbG8tQW5vdGhlci1XYXktPHNvcmV6b3JlPjxubz48YmFzaG8+CisgICAgKHUiXHUwMDQ4XHUwMDY1XHUwMDZDXHUwMDZDXHUwMDZGXHUwMDJEXHUwMDQxXHUwMDZFXHUwMDZGIgorICAgICB1Ilx1MDA3NFx1MDA2OFx1MDA2NVx1MDA3Mlx1MDAyRFx1MDA1N1x1MDA2MVx1MDA3OVx1MDAyRCIKKyAgICAgdSJcdTMwNURcdTMwOENcdTMwNUVcdTMwOENcdTMwNkVcdTU4MzRcdTYyNDAiLAorICAgICAiSGVsbG8tQW5vdGhlci1XYXktLWZjNHF1YTA1YXV3YjM2NzR2ZnIwYiIpLAorCisgICAgIyAoTykgPGhpdG90c3U+PHlhbmU+PG5vPjxzaGl0YT4yCisgICAgKHUiXHUzMDcyXHUzMDY4XHUzMDY0XHU1QzRCXHU2ODM5XHUzMDZFXHU0RTBCXHUwMDMyIiwKKyAgICAgIjItdTl0bHpyOTc1NmJ0M3VjMHYiKSwKKworICAgICMgKFApIE1hamk8ZGU+S29pPHN1cnU+NTxieW91PjxtYWU+CisgICAgKHUiXHUwMDREXHUwMDYxXHUwMDZBXHUwMDY5XHUzMDY3XHUwMDRCXHUwMDZGXHUwMDY5XHUzMDU5IgorICAgICB1Ilx1MzA4Qlx1MDAzNVx1NzlEMlx1NTI0RCIsCisgICAgICJNYWppS29pNS03ODNndWU2cXowNzVhem01ZSIpLAorCisgICAgICMgKFEpIDxwYWZpaT5kZTxydW5iYT4KKyAgICAodSJcdTMwRDFcdTMwRDVcdTMwQTNcdTMwRkNcdTAwNjRcdTAwNjVcdTMwRUJcdTMwRjNcdTMwRDAiLAorICAgICAiZGUtamc0YXZoYnkxbm9jMGQiKSwKKworICAgICMgKFIpIDxzb25vPjxzdXBpaWRvPjxkZT4KKyAgICAodSJcdTMwNURcdTMwNkVcdTMwQjlcdTMwRDRcdTMwRkNcdTMwQzlcdTMwNjciLAorICAgICAiZDlqdWF1NDFhd2N6Y3pwIiksCisKKyAgICAjIChTKSAtPiAkMS4wMCA8LQorICAgICh1Ilx1MDAyRFx1MDAzRVx1MDAyMFx1MDAyNFx1MDAzMVx1MDAyRVx1MDAzMFx1MDAzMFx1MDAyMCIKKyAgICAgdSJcdTAwM0NcdTAwMkQiLAorICAgICAiLT4gJDEuMDAgPC0tIikKKyAgICBdCisKK2ZvciBpIGluIHB1bnljb2RlX3Rlc3RjYXNlczoKKyAgICBpZiBsZW4oaSkhPTI6CisgICAgICAgIHByaW50IHJlcHIoaSkKKworY2xhc3MgUHVueWNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9lbmNvZGUoc2VsZik6CisgICAgICAgIGZvciB1bmksIHB1bnkgaW4gcHVueWNvZGVfdGVzdGNhc2VzOgorICAgICAgICAgICAgIyBOZWVkIHRvIGNvbnZlcnQgYm90aCBzdHJpbmdzIHRvIGxvd2VyIGNhc2UsIHNpbmNlCisgICAgICAgICAgICAjIHNvbWUgb2YgdGhlIGV4dGVuZGVkIGVuY29kaW5ncyB1c2UgdXBwZXIgY2FzZSwgYnV0IG91cgorICAgICAgICAgICAgIyBjb2RlIHByb2R1Y2VzIG9ubHkgbG93ZXIgY2FzZS4gQ29udmVydGluZyBqdXN0IHB1bnkgdG8KKyAgICAgICAgICAgICMgbG93ZXIgaXMgYWxzbyBpbnN1ZmZpY2llbnQsIHNpbmNlIHNvbWUgb2YgdGhlIGlucHV0IGNoYXJhY3RlcnMKKyAgICAgICAgICAgICMgYXJlIHVwcGVyIGNhc2UuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaS5lbmNvZGUoInB1bnljb2RlIikubG93ZXIoKSwgcHVueS5sb3dlcigpKQorCisgICAgZGVmIHRlc3RfZGVjb2RlKHNlbGYpOgorICAgICAgICBmb3IgdW5pLCBwdW55IGluIHB1bnljb2RlX3Rlc3RjYXNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pLCBwdW55LmRlY29kZSgicHVueWNvZGUiKSkKKworY2xhc3MgVW5pY29kZUludGVybmFsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYnVnMTI1MTMwMChzZWxmKToKKyAgICAgICAgIyBEZWNvZGluZyB3aXRoIHVuaWNvZGVfaW50ZXJuYWwgdXNlZCB0byBub3QgY29ycmVjdGx5IGhhbmRsZSAiY29kZQorICAgICAgICAjIHBvaW50cyIgYWJvdmUgMHgxMGZmZmYgb24gVUNTLTQgYnVpbGRzLgorICAgICAgICBpZiBzeXMubWF4dW5pY29kZSA+IDB4ZmZmZjoKKyAgICAgICAgICAgIG9rID0gWworICAgICAgICAgICAgICAgICgiXHgwMFx4MTBceGZmXHhmZiIsIHUiXFUwMDEwZmZmZiIpLAorICAgICAgICAgICAgICAgICgiXHgwMFx4MDBceDAxXHgwMSIsIHUiXFUwMDAwMDEwMSIpLAorICAgICAgICAgICAgICAgICgiIiwgdSIiKSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgICAgIG5vdF9vayA9IFsKKyAgICAgICAgICAgICAgICAiXHg3Zlx4ZmZceGZmXHhmZiIsCisgICAgICAgICAgICAgICAgIlx4ODBceDAwXHgwMFx4MDAiLAorICAgICAgICAgICAgICAgICJceDgxXHgwMFx4MDBceDAwIiwKKyAgICAgICAgICAgICAgICAiXHgwMCIsCisgICAgICAgICAgICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgICAgICAgIF0KKyAgICAgICAgICAgIGZvciBpbnRlcm5hbCwgdW5pIGluIG9rOgorICAgICAgICAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gImxpdHRsZSI6CisgICAgICAgICAgICAgICAgICAgIGludGVybmFsID0gIiIuam9pbihyZXZlcnNlZChpbnRlcm5hbCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmksIGludGVybmFsLmRlY29kZSgidW5pY29kZV9pbnRlcm5hbCIpKQorICAgICAgICAgICAgZm9yIGludGVybmFsIGluIG5vdF9vazoKKyAgICAgICAgICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgorICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbCA9ICIiLmpvaW4ocmV2ZXJzZWQoaW50ZXJuYWwpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgaW50ZXJuYWwuZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAidW5pY29kZV9pbnRlcm5hbCIpCisKKyAgICBkZWYgdGVzdF9kZWNvZGVfZXJyb3JfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgPiAweGZmZmY6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgxMVx4MTFceDAwIi5kZWNvZGUoInVuaWNvZGVfaW50ZXJuYWwiKQorICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciwgZXg6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidW5pY29kZV9pbnRlcm5hbCIsIGV4LmVuY29kaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlx4MDBceDAwXHgwMFx4MDBceDAwXHgxMVx4MTFceDAwIiwgZXgub2JqZWN0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNCwgZXguc3RhcnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg4LCBleC5lbmQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgpCisKKyAgICBkZWYgdGVzdF9kZWNvZGVfY2FsbGJhY2soc2VsZik6CisgICAgICAgIGlmIHN5cy5tYXh1bmljb2RlID4gMHhmZmZmOgorICAgICAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJVbmljb2RlSW50ZXJuYWxUZXN0IiwgY29kZWNzLmlnbm9yZV9lcnJvcnMpCisgICAgICAgICAgICBkZWNvZGVyID0gY29kZWNzLmdldGRlY29kZXIoInVuaWNvZGVfaW50ZXJuYWwiKQorICAgICAgICAgICAgYWIgPSB1ImFiIi5lbmNvZGUoInVuaWNvZGVfaW50ZXJuYWwiKQorICAgICAgICAgICAgaWdub3JlZCA9IGRlY29kZXIoIiVzXHgyMlx4MjJceDIyXHgyMiVzIiAlIChhYls6NF0sIGFiWzQ6XSksCisgICAgICAgICAgICAgICAgIlVuaWNvZGVJbnRlcm5hbFRlc3QiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodSJhYiIsIDEyKSwgaWdub3JlZCkKKworICAgIGRlZiB0ZXN0X2VuY29kZV9sZW5ndGgoc2VsZik6CisgICAgICAgICMgSXNzdWUgMzczOQorICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGVuY29kZXIoInVuaWNvZGVfaW50ZXJuYWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIodSJhIilbMV0sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlcih1Ilx4ZTlcdTAxNDIiKVsxXSwgMikKKworICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGVuY29kZXIoInN0cmluZy1lc2NhcGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIocidceDAwJylbMV0sIDQpCisKKyMgRnJvbSBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWRuL2RyYWZ0LWpvc2Vmc3Nvbi1pZG4tdGVzdC12ZWN0b3JzLmh0bWwKK25hbWVwcmVwX3Rlc3RzID0gWworICAgICMgMy4xIE1hcCB0byBub3RoaW5nLgorICAgICgnZm9vXHhjMlx4YWRceGNkXHg4Zlx4ZTFceGEwXHg4Nlx4ZTFceGEwXHg4YmJhcicKKyAgICAgJ1x4ZTJceDgwXHg4Ylx4ZTJceDgxXHhhMGJhelx4ZWZceGI4XHg4MFx4ZWZceGI4XHg4OFx4ZWYnCisgICAgICdceGI4XHg4Zlx4ZWZceGJiXHhiZicsCisgICAgICdmb29iYXJiYXonKSwKKyAgICAjIDMuMiBDYXNlIGZvbGRpbmcgQVNDSUkgVSswMDQzIFUrMDA0MSBVKzAwNDYgVSswMDQ1LgorICAgICgnQ0FGRScsCisgICAgICdjYWZlJyksCisgICAgIyAzLjMgQ2FzZSBmb2xkaW5nIDhiaXQgVSswMERGIChnZXJtYW4gc2hhcnAgcykuCisgICAgIyBUaGUgb3JpZ2luYWwgdGVzdCBjYXNlIGlzIGJvZ3VzOyBpdCBzYXlzIFx4YzNceGRmCisgICAgKCdceGMzXHg5ZicsCisgICAgICdzcycpLAorICAgICMgMy40IENhc2UgZm9sZGluZyBVKzAxMzAgKHR1cmtpc2ggY2FwaXRhbCBJIHdpdGggZG90KS4KKyAgICAoJ1x4YzRceGIwJywKKyAgICAgJ2lceGNjXHg4NycpLAorICAgICMgMy41IENhc2UgZm9sZGluZyBtdWx0aWJ5dGUgVSswMTQzIFUrMDM3QS4KKyAgICAoJ1x4YzVceDgzXHhjZFx4YmEnLAorICAgICAnXHhjNVx4ODQgXHhjZVx4YjknKSwKKyAgICAjIDMuNiBDYXNlIGZvbGRpbmcgVSsyMTIxIFUrMzNDNiBVKzFEN0JCLgorICAgICMgWFhYOiBza2lwIHRoaXMgYXMgaXQgZmFpbHMgaW4gVUNTLTIgbW9kZQorICAgICMoJ1x4ZTJceDg0XHhhMVx4ZTNceDhmXHg4Nlx4ZjBceDlkXHg5ZVx4YmInLAorICAgICMgJ3RlbGNceGUyXHg4OFx4OTVrZ1x4Y2ZceDgzJyksCisgICAgKE5vbmUsIE5vbmUpLAorICAgICMgMy43IE5vcm1hbGl6YXRpb24gb2YgVSswMDZhIFUrMDMwYyBVKzAwQTAgVSswMEFBLgorICAgICgnalx4Y2NceDhjXHhjMlx4YTBceGMyXHhhYScsCisgICAgICdceGM3XHhiMCBhJyksCisgICAgIyAzLjggQ2FzZSBmb2xkaW5nIFUrMUZCNyBhbmQgbm9ybWFsaXphdGlvbi4KKyAgICAoJ1x4ZTFceGJlXHhiNycsCisgICAgICdceGUxXHhiZVx4YjZceGNlXHhiOScpLAorICAgICMgMy45IFNlbGYtcmV2ZXJ0aW5nIGNhc2UgZm9sZGluZyBVKzAxRjAgYW5kIG5vcm1hbGl6YXRpb24uCisgICAgIyBUaGUgb3JpZ2luYWwgdGVzdCBjYXNlIGlzIGJvZ3VzLCBpdCBzYXlzIGBceGM3XHhmMCcKKyAgICAoJ1x4YzdceGIwJywKKyAgICAgJ1x4YzdceGIwJyksCisgICAgIyAzLjEwIFNlbGYtcmV2ZXJ0aW5nIGNhc2UgZm9sZGluZyBVKzAzOTAgYW5kIG5vcm1hbGl6YXRpb24uCisgICAgKCdceGNlXHg5MCcsCisgICAgICdceGNlXHg5MCcpLAorICAgICMgMy4xMSBTZWxmLXJldmVydGluZyBjYXNlIGZvbGRpbmcgVSswM0IwIGFuZCBub3JtYWxpemF0aW9uLgorICAgICgnXHhjZVx4YjAnLAorICAgICAnXHhjZVx4YjAnKSwKKyAgICAjIDMuMTIgU2VsZi1yZXZlcnRpbmcgY2FzZSBmb2xkaW5nIFUrMUU5NiBhbmQgbm9ybWFsaXphdGlvbi4KKyAgICAoJ1x4ZTFceGJhXHg5NicsCisgICAgICdceGUxXHhiYVx4OTYnKSwKKyAgICAjIDMuMTMgU2VsZi1yZXZlcnRpbmcgY2FzZSBmb2xkaW5nIFUrMUY1NiBhbmQgbm9ybWFsaXphdGlvbi4KKyAgICAoJ1x4ZTFceGJkXHg5NicsCisgICAgICdceGUxXHhiZFx4OTYnKSwKKyAgICAjIDMuMTQgQVNDSUkgc3BhY2UgY2hhcmFjdGVyIFUrMDAyMC4KKyAgICAoJyAnLAorICAgICAnICcpLAorICAgICMgMy4xNSBOb24tQVNDSUkgOGJpdCBzcGFjZSBjaGFyYWN0ZXIgVSswMEEwLgorICAgICgnXHhjMlx4YTAnLAorICAgICAnICcpLAorICAgICMgMy4xNiBOb24tQVNDSUkgbXVsdGlieXRlIHNwYWNlIGNoYXJhY3RlciBVKzE2ODAuCisgICAgKCdceGUxXHg5YVx4ODAnLAorICAgICBOb25lKSwKKyAgICAjIDMuMTcgTm9uLUFTQ0lJIG11bHRpYnl0ZSBzcGFjZSBjaGFyYWN0ZXIgVSsyMDAwLgorICAgICgnXHhlMlx4ODBceDgwJywKKyAgICAgJyAnKSwKKyAgICAjIDMuMTggWmVybyBXaWR0aCBTcGFjZSBVKzIwMGIuCisgICAgKCdceGUyXHg4MFx4OGInLAorICAgICAnJyksCisgICAgIyAzLjE5IE5vbi1BU0NJSSBtdWx0aWJ5dGUgc3BhY2UgY2hhcmFjdGVyIFUrMzAwMC4KKyAgICAoJ1x4ZTNceDgwXHg4MCcsCisgICAgICcgJyksCisgICAgIyAzLjIwIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycyBVKzAwMTAgVSswMDdGLgorICAgICgnXHgxMFx4N2YnLAorICAgICAnXHgxMFx4N2YnKSwKKyAgICAjIDMuMjEgTm9uLUFTQ0lJIDhiaXQgY29udHJvbCBjaGFyYWN0ZXIgVSswMDg1LgorICAgICgnXHhjMlx4ODUnLAorICAgICBOb25lKSwKKyAgICAjIDMuMjIgTm9uLUFTQ0lJIG11bHRpYnl0ZSBjb250cm9sIGNoYXJhY3RlciBVKzE4MEUuCisgICAgKCdceGUxXHhhMFx4OGUnLAorICAgICBOb25lKSwKKyAgICAjIDMuMjMgWmVybyBXaWR0aCBOby1CcmVhayBTcGFjZSBVK0ZFRkYuCisgICAgKCdceGVmXHhiYlx4YmYnLAorICAgICAnJyksCisgICAgIyAzLjI0IE5vbi1BU0NJSSBjb250cm9sIGNoYXJhY3RlciBVKzFEMTc1LgorICAgICgnXHhmMFx4OWRceDg1XHhiNScsCisgICAgIE5vbmUpLAorICAgICMgMy4yNSBQbGFuZSAwIHByaXZhdGUgdXNlIGNoYXJhY3RlciBVK0YxMjMuCisgICAgKCdceGVmXHg4NFx4YTMnLAorICAgICBOb25lKSwKKyAgICAjIDMuMjYgUGxhbmUgMTUgcHJpdmF0ZSB1c2UgY2hhcmFjdGVyIFUrRjEyMzQuCisgICAgKCdceGYzXHhiMVx4ODhceGI0JywKKyAgICAgTm9uZSksCisgICAgIyAzLjI3IFBsYW5lIDE2IHByaXZhdGUgdXNlIGNoYXJhY3RlciBVKzEwRjIzNC4KKyAgICAoJ1x4ZjRceDhmXHg4OFx4YjQnLAorICAgICBOb25lKSwKKyAgICAjIDMuMjggTm9uLWNoYXJhY3RlciBjb2RlIHBvaW50IFUrOEZGRkUuCisgICAgKCdceGYyXHg4Zlx4YmZceGJlJywKKyAgICAgTm9uZSksCisgICAgIyAzLjI5IE5vbi1jaGFyYWN0ZXIgY29kZSBwb2ludCBVKzEwRkZGRi4KKyAgICAoJ1x4ZjRceDhmXHhiZlx4YmYnLAorICAgICBOb25lKSwKKyAgICAjIDMuMzAgU3Vycm9nYXRlIGNvZGUgVStERjQyLgorICAgICgnXHhlZFx4YmRceDgyJywKKyAgICAgTm9uZSksCisgICAgIyAzLjMxIE5vbi1wbGFpbiB0ZXh0IGNoYXJhY3RlciBVK0ZGRkQuCisgICAgKCdceGVmXHhiZlx4YmQnLAorICAgICBOb25lKSwKKyAgICAjIDMuMzIgSWRlb2dyYXBoaWMgZGVzY3JpcHRpb24gY2hhcmFjdGVyIFUrMkZGNS4KKyAgICAoJ1x4ZTJceGJmXHhiNScsCisgICAgIE5vbmUpLAorICAgICMgMy4zMyBEaXNwbGF5IHByb3BlcnR5IGNoYXJhY3RlciBVKzAzNDEuCisgICAgKCdceGNkXHg4MScsCisgICAgICdceGNjXHg4MScpLAorICAgICMgMy4zNCBMZWZ0LXRvLXJpZ2h0IG1hcmsgVSsyMDBFLgorICAgICgnXHhlMlx4ODBceDhlJywKKyAgICAgTm9uZSksCisgICAgIyAzLjM1IERlcHJlY2F0ZWQgVSsyMDJBLgorICAgICgnXHhlMlx4ODBceGFhJywKKyAgICAgTm9uZSksCisgICAgIyAzLjM2IExhbmd1YWdlIHRhZ2dpbmcgY2hhcmFjdGVyIFUrRTAwMDEuCisgICAgKCdceGYzXHhhMFx4ODBceDgxJywKKyAgICAgTm9uZSksCisgICAgIyAzLjM3IExhbmd1YWdlIHRhZ2dpbmcgY2hhcmFjdGVyIFUrRTAwNDIuCisgICAgKCdceGYzXHhhMFx4ODFceDgyJywKKyAgICAgTm9uZSksCisgICAgIyAzLjM4IEJpZGk6IFJhbmRBTENhdCBjaGFyYWN0ZXIgVSswNUJFIGFuZCBMQ2F0IGNoYXJhY3RlcnMuCisgICAgKCdmb29ceGQ2XHhiZWJhcicsCisgICAgIE5vbmUpLAorICAgICMgMy4zOSBCaWRpOiBSYW5kQUxDYXQgY2hhcmFjdGVyIFUrRkQ1MCBhbmQgTENhdCBjaGFyYWN0ZXJzLgorICAgICgnZm9vXHhlZlx4YjVceDkwYmFyJywKKyAgICAgTm9uZSksCisgICAgIyAzLjQwIEJpZGk6IFJhbmRBTENhdCBjaGFyYWN0ZXIgVStGQjM4IGFuZCBMQ2F0IGNoYXJhY3RlcnMuCisgICAgKCdmb29ceGVmXHhiOVx4YjZiYXInLAorICAgICAnZm9vIFx4ZDlceDhlYmFyJyksCisgICAgIyAzLjQxIEJpZGk6IFJhbmRBTENhdCB3aXRob3V0IHRyYWlsaW5nIFJhbmRBTENhdCBVKzA2MjcgVSswMDMxLgorICAgICgnXHhkOFx4YTcxJywKKyAgICAgTm9uZSksCisgICAgIyAzLjQyIEJpZGk6IFJhbmRBTENhdCBjaGFyYWN0ZXIgVSswNjI3IFUrMDAzMSBVKzA2MjguCisgICAgKCdceGQ4XHhhNzFceGQ4XHhhOCcsCisgICAgICdceGQ4XHhhNzFceGQ4XHhhOCcpLAorICAgICMgMy40MyBVbmFzc2lnbmVkIGNvZGUgcG9pbnQgVStFMDAwMi4KKyAgICAjIFNraXAgdGhpcyB0ZXN0IGFzIHdlIGFsbG93IHVuYXNzaWduZWQKKyAgICAjKCdceGYzXHhhMFx4ODBceDgyJywKKyAgICAjIE5vbmUpLAorICAgIChOb25lLCBOb25lKSwKKyAgICAjIDMuNDQgTGFyZ2VyIHRlc3QgKHNocmlua2luZykuCisgICAgIyBPcmlnaW5hbCB0ZXN0IGNhc2UgcmVhZHMgXHhjM1x4ZGYKKyAgICAoJ1hceGMyXHhhZFx4YzNceDlmXHhjNFx4YjBceGUyXHg4NFx4YTFqXHhjY1x4OGNceGMyXHhhMFx4YzInCisgICAgICdceGFhXHhjZVx4YjBceGUyXHg4MFx4ODAnLAorICAgICAneHNzaVx4Y2NceDg3dGVsXHhjN1x4YjAgYVx4Y2VceGIwICcpLAorICAgICMgMy40NSBMYXJnZXIgdGVzdCAoZXhwYW5kaW5nKS4KKyAgICAjIE9yaWdpbmFsIHRlc3QgY2FzZSByZWFkcyBceGMzXHg5ZgorICAgICgnWFx4YzNceDlmXHhlM1x4OGNceDk2XHhjNFx4YjBceGUyXHg4NFx4YTFceGUyXHg5Mlx4OWZceGUzXHg4YycKKyAgICAgJ1x4ODAnLAorICAgICAneHNzXHhlM1x4ODJceGFkXHhlM1x4ODNceGFkXHhlM1x4ODNceGExXHhlM1x4ODNceGJjXHhlMycKKyAgICAgJ1x4ODNceDg4XHhlM1x4ODNceGFiaVx4Y2NceDg3dGVsXHgyOGRceDI5XHhlM1x4ODInCisgICAgICdceGEyXHhlM1x4ODNceDkxXHhlM1x4ODNceGJjXHhlM1x4ODNceDg4JykKKyAgICBdCisKKworY2xhc3MgTmFtZXByZXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9uYW1lcHJlcChzZWxmKToKKyAgICAgICAgZnJvbSBlbmNvZGluZ3MuaWRuYSBpbXBvcnQgbmFtZXByZXAKKyAgICAgICAgZm9yIHBvcywgKG9yaWcsIHByZXBwZWQpIGluIGVudW1lcmF0ZShuYW1lcHJlcF90ZXN0cyk6CisgICAgICAgICAgICBpZiBvcmlnIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBTa2lwcGVkCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgVGhlIFVuaWNvZGUgc3RyaW5ncyBhcmUgZ2l2ZW4gaW4gVVRGLTgKKyAgICAgICAgICAgIG9yaWcgPSB1bmljb2RlKG9yaWcsICJ1dGYtOCIpCisgICAgICAgICAgICBpZiBwcmVwcGVkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBJbnB1dCBjb250YWlucyBwcm9oaWJpdGVkIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIG5hbWVwcmVwLCBvcmlnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmVwcGVkID0gdW5pY29kZShwcmVwcGVkLCAidXRmLTgiKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lcHJlcChvcmlnKSwgcHJlcHBlZCkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLGU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkKCJUZXN0IDMuJWQ6ICVzIiAlIChwb3MrMSwgc3RyKGUpKSkKKworY2xhc3MgSUROQUNvZGVjVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYnVpbHRpbl9kZWNvZGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgicHl0aG9uLm9yZyIsICJpZG5hIiksIHUicHl0aG9uLm9yZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgicHl0aG9uLm9yZy4iLCAiaWRuYSIpLCB1InB5dGhvbi5vcmcuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCJ4bi0tcHl0aG4tbXVhLm9yZyIsICJpZG5hIiksIHUicHl0aFx4ZjZuLm9yZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgieG4tLXB5dGhuLW11YS5vcmcuIiwgImlkbmEiKSwgdSJweXRoXHhmNm4ub3JnLiIpCisKKyAgICBkZWYgdGVzdF9idWlsdGluX2VuY29kZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1InB5dGhvbi5vcmciLmVuY29kZSgiaWRuYSIpLCAicHl0aG9uLm9yZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInB5dGhvbi5vcmcuIi5lbmNvZGUoImlkbmEiKSwgInB5dGhvbi5vcmcuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1InB5dGhceGY2bi5vcmciLmVuY29kZSgiaWRuYSIpLCAieG4tLXB5dGhuLW11YS5vcmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUicHl0aFx4ZjZuLm9yZy4iLmVuY29kZSgiaWRuYSIpLCAieG4tLXB5dGhuLW11YS5vcmcuIikKKworICAgIGRlZiB0ZXN0X3N0cmVhbShzZWxmKToKKyAgICAgICAgaW1wb3J0IFN0cmluZ0lPCisgICAgICAgIHIgPSBjb2RlY3MuZ2V0cmVhZGVyKCJpZG5hIikoU3RyaW5nSU8uU3RyaW5nSU8oImFiYyIpKQorICAgICAgICByLnJlYWQoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLnJlYWQoKSwgdSIiKQorCisgICAgZGVmIHRlc3RfaW5jcmVtZW50YWxfZGVjb2RlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgIiIuam9pbihjb2RlY3MuaXRlcmRlY29kZSgicHl0aG9uLm9yZyIsICJpZG5hIikpLAorICAgICAgICAgICAgdSJweXRob24ub3JnIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAiIi5qb2luKGNvZGVjcy5pdGVyZGVjb2RlKCJweXRob24ub3JnLiIsICJpZG5hIikpLAorICAgICAgICAgICAgdSJweXRob24ub3JnLiIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgIiIuam9pbihjb2RlY3MuaXRlcmRlY29kZSgieG4tLXB5dGhuLW11YS5vcmcuIiwgImlkbmEiKSksCisgICAgICAgICAgICB1InB5dGhceGY2bi5vcmcuIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAiIi5qb2luKGNvZGVjcy5pdGVyZGVjb2RlKCJ4bi0tcHl0aG4tbXVhLm9yZy4iLCAiaWRuYSIpKSwKKyAgICAgICAgICAgIHUicHl0aFx4ZjZuLm9yZy4iCisgICAgICAgICkKKworICAgICAgICBkZWNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlcigiaWRuYSIpKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgieG4tLXhhbSIsICksIHUiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgicGxlLTl0YS5vIiwgKSwgdSJceGU0eGFtcGxlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUodSJyZyIpLCB1IiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUodSIiLCBUcnVlKSwgdSJvcmciKQorCisgICAgICAgIGRlY29kZXIucmVzZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCJ4bi0teGFtIiwgKSwgdSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCJwbGUtOXRhLm8iLCApLCB1Ilx4ZTR4YW1wbGUuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgicmcuIiksIHUib3JnLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoIiIsIFRydWUpLCB1IiIpCisKKyAgICBkZWYgdGVzdF9pbmNyZW1lbnRhbF9lbmNvZGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAiIi5qb2luKGNvZGVjcy5pdGVyZW5jb2RlKHUicHl0aG9uLm9yZyIsICJpZG5hIikpLAorICAgICAgICAgICAgInB5dGhvbi5vcmciCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICIiLmpvaW4oY29kZWNzLml0ZXJlbmNvZGUodSJweXRob24ub3JnLiIsICJpZG5hIikpLAorICAgICAgICAgICAgInB5dGhvbi5vcmcuIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAiIi5qb2luKGNvZGVjcy5pdGVyZW5jb2RlKHUicHl0aFx4ZjZuLm9yZy4iLCAiaWRuYSIpKSwKKyAgICAgICAgICAgICJ4bi0tcHl0aG4tbXVhLm9yZy4iCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICIiLmpvaW4oY29kZWNzLml0ZXJlbmNvZGUodSJweXRoXHhmNm4ub3JnLiIsICJpZG5hIikpLAorICAgICAgICAgICAgInhuLS1weXRobi1tdWEub3JnLiIKKyAgICAgICAgKQorCisgICAgICAgIGVuY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxlbmNvZGVyKCJpZG5hIikoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUiXHhlNHgiKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSJhbXBsZS5vcmciKSwgInhuLS14YW1wbGUtOXRhLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSIiLCBUcnVlKSwgIm9yZyIpCisKKyAgICAgICAgZW5jb2Rlci5yZXNldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSJceGU0eCIpLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1ImFtcGxlLm9yZy4iKSwgInhuLS14YW1wbGUtOXRhLm9yZy4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUiIiwgVHJ1ZSksICIiKQorCitjbGFzcyBDb2RlY3NNb2R1bGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2RlY29kZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MuZGVjb2RlKCdceGU0XHhmNlx4ZmMnLCAnbGF0aW4tMScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1J1x4ZTRceGY2XHhmYycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLmRlY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MuZGVjb2RlKCdhYmMnKSwgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGNvZGVjcy5kZWNvZGUsICdceGZmJywgJ2FzY2lpJykKKworICAgIGRlZiB0ZXN0X2VuY29kZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MuZW5jb2RlKHUnXHhlNFx4ZjZceGZjJywgJ2xhdGluLTEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x4ZTRceGY2XHhmYycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLmVuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTG9va3VwRXJyb3IsIGNvZGVjcy5lbmNvZGUsICJmb28iLCAiX19zcGFtX18iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5lbmNvZGUodSdhYmMnKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgY29kZWNzLmVuY29kZSwgdSdceGZmZmYnLCAnYXNjaWknKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLnJlZ2lzdGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5yZWdpc3RlciwgNDIpCisKKyAgICBkZWYgdGVzdF9sb29rdXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLmxvb2t1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTG9va3VwRXJyb3IsIGNvZGVjcy5sb29rdXAsICJfX3NwYW1fXyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKExvb2t1cEVycm9yLCBjb2RlY3MubG9va3VwLCAiICIpCisKKyAgICBkZWYgdGVzdF9nZXRlbmNvZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5nZXRlbmNvZGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhMb29rdXBFcnJvciwgY29kZWNzLmdldGVuY29kZXIsICJfX3NwYW1fXyIpCisKKyAgICBkZWYgdGVzdF9nZXRkZWNvZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5nZXRkZWNvZGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhMb29rdXBFcnJvciwgY29kZWNzLmdldGRlY29kZXIsICJfX3NwYW1fXyIpCisKKyAgICBkZWYgdGVzdF9nZXRyZWFkZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLmdldHJlYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTG9va3VwRXJyb3IsIGNvZGVjcy5nZXRyZWFkZXIsICJfX3NwYW1fXyIpCisKKyAgICBkZWYgdGVzdF9nZXR3cml0ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLmdldHdyaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTG9va3VwRXJyb3IsIGNvZGVjcy5nZXR3cml0ZXIsICJfX3NwYW1fXyIpCisKKyAgICBkZWYgdGVzdF9sb29rdXBfaXNzdWUxODEzKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxODEzOiB1bmRlciBUdXJraXNoIGxvY2FsZXMsIGxvb2t1cCBvZiBzb21lIGNvZGVjcyBmYWlsZWQKKyAgICAgICAgIyBiZWNhdXNlICdJJyBpcyBsb3dlcmNhc2VkIGFzIGEgZG90bGVzcyAiaSIKKyAgICAgICAgb2xkbG9jYWxlID0gbG9jYWxlLmdldGxvY2FsZShsb2NhbGUuTENfQ1RZUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb2NhbGUuc2V0bG9jYWxlLCBsb2NhbGUuTENfQ1RZUEUsIG9sZGxvY2FsZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfQ1RZUEUsICd0cl9UUicpCisgICAgICAgIGV4Y2VwdCBsb2NhbGUuRXJyb3I6CisgICAgICAgICAgICAjIFVuc3VwcG9ydGVkIGxvY2FsZSBvbiB0aGlzIHN5c3RlbQorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgndGVzdCBuZWVkcyBUdXJraXNoIGxvY2FsZScpCisgICAgICAgIGMgPSBjb2RlY3MubG9va3VwKCdBU0NJSScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5uYW1lLCAnYXNjaWknKQorCitjbGFzcyBTdHJlYW1SZWFkZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5yZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKCd1dGYtOCcpCisgICAgICAgIHNlbGYuc3RyZWFtID0gU3RyaW5nSU8uU3RyaW5nSU8oJ1x4ZWRceDk1XHg5Y1xuXHhlYVx4YjhceDgwJykKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lcyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYucmVhZGVyKHNlbGYuc3RyZWFtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmVzKCksIFt1J1x1ZDU1Y1xuJywgdSdcdWFlMDAnXSkKKworY2xhc3MgRW5jb2RlZEZpbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oJ1x4ZWRceDk1XHg5Y1xuXHhlYVx4YjhceDgwJykKKyAgICAgICAgZWYgPSBjb2RlY3MuRW5jb2RlZEZpbGUoZiwgJ3V0Zi0xNi1sZScsICd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWYucmVhZCgpLCAnXFxceGQ1XG5ceDAwXHgwMFx4YWUnKQorCisgICAgICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIGVmID0gY29kZWNzLkVuY29kZWRGaWxlKGYsICd1dGYtOCcsICdsYXRpbjEnKQorICAgICAgICBlZi53cml0ZSgnXHhjM1x4YmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0dmFsdWUoKSwgJ1x4ZmMnKQorCitjbGFzcyBTdHIyU3RyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICBzaW4gPSAiXHg4MCIuZW5jb2RlKCJiYXNlNjRfY29kZWMiKQorICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKCJiYXNlNjRfY29kZWMiKShTdHJpbmdJTy5TdHJpbmdJTyhzaW4pKQorICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXQsICJceDgwIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNvdXQsIHN0cikKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgorICAgICAgICBzaW4gPSAiXHg4MCIuZW5jb2RlKCJiYXNlNjRfY29kZWMiKQorICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKCJiYXNlNjRfY29kZWMiKShTdHJpbmdJTy5TdHJpbmdJTyhzaW4pKQorICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3V0LCAiXHg4MCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzb3V0LCBzdHIpCisKK2FsbF91bmljb2RlX2VuY29kaW5ncyA9IFsKKyAgICAiYXNjaWkiLAorICAgICJiYXNlNjRfY29kZWMiLAorICAgICJiaWc1IiwKKyAgICAiYmlnNWhrc2NzIiwKKyAgICAiY2hhcm1hcCIsCisgICAgImNwMDM3IiwKKyAgICAiY3AxMDA2IiwKKyAgICAiY3AxMDI2IiwKKyAgICAiY3AxMTQwIiwKKyAgICAiY3AxMjUwIiwKKyAgICAiY3AxMjUxIiwKKyAgICAiY3AxMjUyIiwKKyAgICAiY3AxMjUzIiwKKyAgICAiY3AxMjU0IiwKKyAgICAiY3AxMjU1IiwKKyAgICAiY3AxMjU2IiwKKyAgICAiY3AxMjU3IiwKKyAgICAiY3AxMjU4IiwKKyAgICAiY3A0MjQiLAorICAgICJjcDQzNyIsCisgICAgImNwNTAwIiwKKyAgICAiY3A3MjAiLAorICAgICJjcDczNyIsCisgICAgImNwNzc1IiwKKyAgICAiY3A4NTAiLAorICAgICJjcDg1MiIsCisgICAgImNwODU1IiwKKyAgICAiY3A4NTYiLAorICAgICJjcDg1NyIsCisgICAgImNwODU4IiwKKyAgICAiY3A4NjAiLAorICAgICJjcDg2MSIsCisgICAgImNwODYyIiwKKyAgICAiY3A4NjMiLAorICAgICJjcDg2NCIsCisgICAgImNwODY1IiwKKyAgICAiY3A4NjYiLAorICAgICJjcDg2OSIsCisgICAgImNwODc0IiwKKyAgICAiY3A4NzUiLAorICAgICJjcDkzMiIsCisgICAgImNwOTQ5IiwKKyAgICAiY3A5NTAiLAorICAgICJldWNfamlzXzIwMDQiLAorICAgICJldWNfamlzeDAyMTMiLAorICAgICJldWNfanAiLAorICAgICJldWNfa3IiLAorICAgICJnYjE4MDMwIiwKKyAgICAiZ2IyMzEyIiwKKyAgICAiZ2JrIiwKKyAgICAiaGV4X2NvZGVjIiwKKyAgICAiaHBfcm9tYW44IiwKKyAgICAiaHoiLAorICAgICJpZG5hIiwKKyAgICAiaXNvMjAyMl9qcCIsCisgICAgImlzbzIwMjJfanBfMSIsCisgICAgImlzbzIwMjJfanBfMiIsCisgICAgImlzbzIwMjJfanBfMjAwNCIsCisgICAgImlzbzIwMjJfanBfMyIsCisgICAgImlzbzIwMjJfanBfZXh0IiwKKyAgICAiaXNvMjAyMl9rciIsCisgICAgImlzbzg4NTlfMSIsCisgICAgImlzbzg4NTlfMTAiLAorICAgICJpc284ODU5XzExIiwKKyAgICAiaXNvODg1OV8xMyIsCisgICAgImlzbzg4NTlfMTQiLAorICAgICJpc284ODU5XzE1IiwKKyAgICAiaXNvODg1OV8xNiIsCisgICAgImlzbzg4NTlfMiIsCisgICAgImlzbzg4NTlfMyIsCisgICAgImlzbzg4NTlfNCIsCisgICAgImlzbzg4NTlfNSIsCisgICAgImlzbzg4NTlfNiIsCisgICAgImlzbzg4NTlfNyIsCisgICAgImlzbzg4NTlfOCIsCisgICAgImlzbzg4NTlfOSIsCisgICAgImpvaGFiIiwKKyAgICAia29pOF9yIiwKKyAgICAia29pOF91IiwKKyAgICAibGF0aW5fMSIsCisgICAgIm1hY19jeXJpbGxpYyIsCisgICAgIm1hY19ncmVlayIsCisgICAgIm1hY19pY2VsYW5kIiwKKyAgICAibWFjX2xhdGluMiIsCisgICAgIm1hY19yb21hbiIsCisgICAgIm1hY190dXJraXNoIiwKKyAgICAicGFsbW9zIiwKKyAgICAicHRjcDE1NCIsCisgICAgInB1bnljb2RlIiwKKyAgICAicmF3X3VuaWNvZGVfZXNjYXBlIiwKKyAgICAicm90XzEzIiwKKyAgICAic2hpZnRfamlzIiwKKyAgICAic2hpZnRfamlzXzIwMDQiLAorICAgICJzaGlmdF9qaXN4MDIxMyIsCisgICAgInRpc182MjAiLAorICAgICJ1bmljb2RlX2VzY2FwZSIsCisgICAgInVuaWNvZGVfaW50ZXJuYWwiLAorICAgICJ1dGZfMTYiLAorICAgICJ1dGZfMTZfYmUiLAorICAgICJ1dGZfMTZfbGUiLAorICAgICJ1dGZfNyIsCisgICAgInV0Zl84IiwKK10KKworaWYgaGFzYXR0cihjb2RlY3MsICJtYmNzX2VuY29kZSIpOgorICAgIGFsbF91bmljb2RlX2VuY29kaW5ncy5hcHBlbmQoIm1iY3MiKQorCisjIFRoZSBmb2xsb3dpbmcgZW5jb2RpbmdzIHdvcmsgb25seSB3aXRoIHN0ciwgbm90IHVuaWNvZGUKK2FsbF9zdHJpbmdfZW5jb2RpbmdzID0gWworICAgICJxdW9wcmlfY29kZWMiLAorICAgICJzdHJpbmdfZXNjYXBlIiwKKyAgICAidXVfY29kZWMiLAorXQorCisjIFRoZSBmb2xsb3dpbmcgZW5jb2RpbmcgaXMgbm90IHRlc3RlZCwgYmVjYXVzZSBpdCdzIG5vdCBzdXBwb3NlZAorIyB0byB3b3JrOgorIyAgICAidW5kZWZpbmVkIgorCisjIFRoZSBmb2xsb3dpbmcgZW5jb2RpbmdzIGRvbid0IHdvcmsgaW4gc3RhdGVmdWwgbW9kZQorYnJva2VuX3VuaWNvZGVfd2l0aF9zdHJlYW1zID0gWworICAgICJiYXNlNjRfY29kZWMiLAorICAgICJoZXhfY29kZWMiLAorICAgICJwdW55Y29kZSIsCisgICAgInVuaWNvZGVfaW50ZXJuYWwiCitdCiticm9rZW5faW5jcmVtZW50YWxfY29kZXJzID0gYnJva2VuX3VuaWNvZGVfd2l0aF9zdHJlYW1zWzpdCisKKyMgVGhlIGZvbGxvd2luZyBlbmNvZGluZ3Mgb25seSBzdXBwb3J0ICJzdHJpY3QiIG1vZGUKK29ubHlfc3RyaWN0X21vZGUgPSBbCisgICAgImlkbmEiLAorICAgICJ6bGliX2NvZGVjIiwKKyAgICAiYnoyX2NvZGVjIiwKK10KKwordHJ5OgorICAgIGltcG9ydCBiejIKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitlbHNlOgorICAgIGFsbF91bmljb2RlX2VuY29kaW5ncy5hcHBlbmQoImJ6Ml9jb2RlYyIpCisgICAgYnJva2VuX3VuaWNvZGVfd2l0aF9zdHJlYW1zLmFwcGVuZCgiYnoyX2NvZGVjIikKKwordHJ5OgorICAgIGltcG9ydCB6bGliCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBhbGxfdW5pY29kZV9lbmNvZGluZ3MuYXBwZW5kKCJ6bGliX2NvZGVjIikKKyAgICBicm9rZW5fdW5pY29kZV93aXRoX3N0cmVhbXMuYXBwZW5kKCJ6bGliX2NvZGVjIikKKworY2xhc3MgQmFzaWNVbmljb2RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYmFzaWNzKHNlbGYpOgorICAgICAgICBzID0gdSJhYmMxMjMiICMgYWxsIGNvZGVjcyBzaG91bGQgYmUgYWJsZSB0byBlbmNvZGUgdGhlc2UKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIGFsbF91bmljb2RlX2VuY29kaW5nczoKKyAgICAgICAgICAgIG5hbWUgPSBjb2RlY3MubG9va3VwKGVuY29kaW5nKS5uYW1lCisgICAgICAgICAgICBpZiBlbmNvZGluZy5lbmRzd2l0aCgiX2NvZGVjIik6CisgICAgICAgICAgICAgICAgbmFtZSArPSAiX2NvZGVjIgorICAgICAgICAgICAgZWxpZiBlbmNvZGluZyA9PSAibGF0aW5fMSI6CisgICAgICAgICAgICAgICAgbmFtZSA9ICJsYXRpbl8xIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGluZy5yZXBsYWNlKCJfIiwgIi0iKSwgbmFtZS5yZXBsYWNlKCJfIiwgIi0iKSkKKyAgICAgICAgICAgIChieXRlcywgc2l6ZSkgPSBjb2RlY3MuZ2V0ZW5jb2RlcihlbmNvZGluZykocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKHMpLCAiJXIgIT0gJXIgKGVuY29kaW5nPSVyKSIgJSAoc2l6ZSwgbGVuKHMpLCBlbmNvZGluZykpCisgICAgICAgICAgICAoY2hhcnMsIHNpemUpID0gY29kZWNzLmdldGRlY29kZXIoZW5jb2RpbmcpKGJ5dGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGFycywgcywgIiVyICE9ICVyIChlbmNvZGluZz0lcikiICUgKGNoYXJzLCBzLCBlbmNvZGluZykpCisKKyAgICAgICAgICAgIGlmIGVuY29kaW5nIG5vdCBpbiBicm9rZW5fdW5pY29kZV93aXRoX3N0cmVhbXM6CisgICAgICAgICAgICAgICAgIyBjaGVjayBzdHJlYW0gcmVhZGVyL3dyaXRlcgorICAgICAgICAgICAgICAgIHEgPSBRdWV1ZSgpCisgICAgICAgICAgICAgICAgd3JpdGVyID0gY29kZWNzLmdldHdyaXRlcihlbmNvZGluZykocSkKKyAgICAgICAgICAgICAgICBlbmNvZGVkcmVzdWx0ID0gIiIKKyAgICAgICAgICAgICAgICBmb3IgYyBpbiBzOgorICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGUoYykKKyAgICAgICAgICAgICAgICAgICAgZW5jb2RlZHJlc3VsdCArPSBxLnJlYWQoKQorICAgICAgICAgICAgICAgIHEgPSBRdWV1ZSgpCisgICAgICAgICAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcihlbmNvZGluZykocSkKKyAgICAgICAgICAgICAgICBkZWNvZGVkcmVzdWx0ID0gdSIiCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gZW5jb2RlZHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgcS53cml0ZShjKQorICAgICAgICAgICAgICAgICAgICBkZWNvZGVkcmVzdWx0ICs9IHJlYWRlci5yZWFkKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZWRyZXN1bHQsIHMsICIlciAhPSAlciAoZW5jb2Rpbmc9JXIpIiAlIChkZWNvZGVkcmVzdWx0LCBzLCBlbmNvZGluZykpCisKKyAgICAgICAgICAgIGlmIGVuY29kaW5nIG5vdCBpbiBicm9rZW5faW5jcmVtZW50YWxfY29kZXJzOgorICAgICAgICAgICAgICAgICMgY2hlY2sgaW5jcmVtZW50YWwgZGVjb2Rlci9lbmNvZGVyIChmZXRjaGVkIHZpYSB0aGUgUHl0aG9uCisgICAgICAgICAgICAgICAgIyBhbmQgQyBBUEkpIGFuZCBpdGVyZW5jb2RlKCkvaXRlcmRlY29kZSgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcihlbmNvZGluZykoKQorICAgICAgICAgICAgICAgICAgICBjZW5jb2RlciA9IF90ZXN0Y2FwaS5jb2RlY19pbmNyZW1lbnRhbGVuY29kZXIoZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgZXhjZXB0IExvb2t1cEVycm9yOiAjIG5vIEluY3JlbWVudGFsRW5jb2RlcgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBpbmNyZW1lbnRhbCBkZWNvZGVyL2VuY29kZXIKKyAgICAgICAgICAgICAgICAgICAgZW5jb2RlZHJlc3VsdCA9ICIiCisgICAgICAgICAgICAgICAgICAgIGZvciBjIGluIHM6CisgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkcmVzdWx0ICs9IGVuY29kZXIuZW5jb2RlKGMpCisgICAgICAgICAgICAgICAgICAgIGVuY29kZWRyZXN1bHQgKz0gZW5jb2Rlci5lbmNvZGUodSIiLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBkZWNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlcihlbmNvZGluZykoKQorICAgICAgICAgICAgICAgICAgICBkZWNvZGVkcmVzdWx0ID0gdSIiCisgICAgICAgICAgICAgICAgICAgIGZvciBjIGluIGVuY29kZWRyZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkcmVzdWx0ICs9IGRlY29kZXIuZGVjb2RlKGMpCisgICAgICAgICAgICAgICAgICAgIGRlY29kZWRyZXN1bHQgKz0gZGVjb2Rlci5kZWNvZGUoIiIsIFRydWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlZHJlc3VsdCwgcywgIiVyICE9ICVyIChlbmNvZGluZz0lcikiICUgKGRlY29kZWRyZXN1bHQsIHMsIGVuY29kaW5nKSkKKworICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIEMgQVBJCisgICAgICAgICAgICAgICAgICAgIGVuY29kZWRyZXN1bHQgPSAiIgorICAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiBzOgorICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZHJlc3VsdCArPSBjZW5jb2Rlci5lbmNvZGUoYykKKyAgICAgICAgICAgICAgICAgICAgZW5jb2RlZHJlc3VsdCArPSBjZW5jb2Rlci5lbmNvZGUodSIiLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBjZGVjb2RlciA9IF90ZXN0Y2FwaS5jb2RlY19pbmNyZW1lbnRhbGRlY29kZXIoZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgIGRlY29kZWRyZXN1bHQgPSB1IiIKKyAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gZW5jb2RlZHJlc3VsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRyZXN1bHQgKz0gY2RlY29kZXIuZGVjb2RlKGMpCisgICAgICAgICAgICAgICAgICAgIGRlY29kZWRyZXN1bHQgKz0gY2RlY29kZXIuZGVjb2RlKCIiLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZWRyZXN1bHQsIHMsICIlciAhPSAlciAoZW5jb2Rpbmc9JXIpIiAlIChkZWNvZGVkcmVzdWx0LCBzLCBlbmNvZGluZykpCisKKyAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBpdGVyZW5jb2RlKCkvaXRlcmRlY29kZSgpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHUiIi5qb2luKGNvZGVjcy5pdGVyZGVjb2RlKGNvZGVjcy5pdGVyZW5jb2RlKHMsIGVuY29kaW5nKSwgZW5jb2RpbmcpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgcywgIiVyICE9ICVyIChlbmNvZGluZz0lcikiICUgKHJlc3VsdCwgcywgZW5jb2RpbmcpKQorCisgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgaXRlcmVuY29kZSgpL2l0ZXJkZWNvZGUoKSB3aXRoIGVtcHR5IHN0cmluZworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB1IiIuam9pbihjb2RlY3MuaXRlcmRlY29kZShjb2RlY3MuaXRlcmVuY29kZSh1IiIsIGVuY29kaW5nKSwgZW5jb2RpbmcpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgdSIiKQorCisgICAgICAgICAgICAgICAgaWYgZW5jb2Rpbmcgbm90IGluIG9ubHlfc3RyaWN0X21vZGU6CisgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgaW5jcmVtZW50YWwgZGVjb2Rlci9lbmNvZGVyIHdpdGggZXJyb3JzIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxlbmNvZGVyKGVuY29kaW5nKSgiaWdub3JlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlbmNvZGVyID0gX3Rlc3RjYXBpLmNvZGVjX2luY3JlbWVudGFsZW5jb2RlcihlbmNvZGluZywgImlnbm9yZSIpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBMb29rdXBFcnJvcjogIyBubyBJbmNyZW1lbnRhbEVuY29kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWRyZXN1bHQgPSAiIi5qb2luKGVuY29kZXIuZW5jb2RlKGMpIGZvciBjIGluIHMpCisgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlcihlbmNvZGluZykoImlnbm9yZSIpCisgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkcmVzdWx0ID0gdSIiLmpvaW4oZGVjb2Rlci5kZWNvZGUoYykgZm9yIGMgaW4gZW5jb2RlZHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlZHJlc3VsdCwgcywgIiVyICE9ICVyIChlbmNvZGluZz0lcikiICUgKGRlY29kZWRyZXN1bHQsIHMsIGVuY29kaW5nKSkKKworICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZHJlc3VsdCA9ICIiLmpvaW4oY2VuY29kZXIuZW5jb2RlKGMpIGZvciBjIGluIHMpCisgICAgICAgICAgICAgICAgICAgICAgICBjZGVjb2RlciA9IF90ZXN0Y2FwaS5jb2RlY19pbmNyZW1lbnRhbGRlY29kZXIoZW5jb2RpbmcsICJpZ25vcmUiKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZHJlc3VsdCA9IHUiIi5qb2luKGNkZWNvZGVyLmRlY29kZShjKSBmb3IgYyBpbiBlbmNvZGVkcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVkcmVzdWx0LCBzLCAiJXIgIT0gJXIgKGVuY29kaW5nPSVyKSIgJSAoZGVjb2RlZHJlc3VsdCwgcywgZW5jb2RpbmcpKQorCisgICAgZGVmIHRlc3Rfc2VlayhzZWxmKToKKyAgICAgICAgIyBhbGwgY29kZWNzIHNob3VsZCBiZSBhYmxlIHRvIGVuY29kZSB0aGVzZQorICAgICAgICBzID0gdSIlc1xuJXNcbiIgJSAoMTAwKnUiYWJjMTIzIiwgMTAwKnUiZGVmNDU2IikKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIGFsbF91bmljb2RlX2VuY29kaW5nczoKKyAgICAgICAgICAgIGlmIGVuY29kaW5nID09ICJpZG5hIjogIyBGSVhNRTogU2VlIFNGIGJ1ZyAjMTE2MzE3OAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBlbmNvZGluZyBpbiBicm9rZW5fdW5pY29kZV93aXRoX3N0cmVhbXM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoZW5jb2RpbmcpKFN0cmluZ0lPLlN0cmluZ0lPKHMuZW5jb2RlKGVuY29kaW5nKSkpCisgICAgICAgICAgICBmb3IgdCBpbiB4cmFuZ2UoNSk6CisgICAgICAgICAgICAgICAgIyBUZXN0IHRoYXQgY2FsbGluZyBzZWVrIHJlc2V0cyB0aGUgaW50ZXJuYWwgY29kZWMgc3RhdGUgYW5kIGJ1ZmZlcnMKKyAgICAgICAgICAgICAgICByZWFkZXIuc2VlaygwLCAwKQorICAgICAgICAgICAgICAgIGxpbmUgPSByZWFkZXIucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1s6bGVuKGxpbmUpXSwgbGluZSkKKworICAgIGRlZiB0ZXN0X2JhZF9kZWNvZGVfYXJncyhzZWxmKToKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIGFsbF91bmljb2RlX2VuY29kaW5nczoKKyAgICAgICAgICAgIGRlY29kZXIgPSBjb2RlY3MuZ2V0ZGVjb2RlcihlbmNvZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGVjb2RlcikKKyAgICAgICAgICAgIGlmIGVuY29kaW5nIG5vdCBpbiAoImlkbmEiLCAicHVueWNvZGUiKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRlY29kZXIsIDQyKQorCisgICAgZGVmIHRlc3RfYmFkX2VuY29kZV9hcmdzKHNlbGYpOgorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYWxsX3VuaWNvZGVfZW5jb2RpbmdzOgorICAgICAgICAgICAgZW5jb2RlciA9IGNvZGVjcy5nZXRlbmNvZGVyKGVuY29kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBlbmNvZGVyKQorCisgICAgZGVmIHRlc3RfZW5jb2RpbmdfbWFwX3R5cGVfaW5pdGlhbGl6ZWQoc2VsZik6CisgICAgICAgIGZyb20gZW5jb2RpbmdzIGltcG9ydCBjcDExNDAKKyAgICAgICAgIyBUaGlzIHVzZWQgdG8gY3Jhc2gsIHdlIGFyZSBvbmx5IHZlcmlmeWluZyB0aGVyZSdzIG5vIGNyYXNoLgorICAgICAgICB0YWJsZV90eXBlID0gdHlwZShjcDExNDAuZW5jb2RpbmdfdGFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFibGVfdHlwZSwgdGFibGVfdHlwZSkKKworY2xhc3MgQmFzaWNTdHJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CisgICAgICAgIHMgPSAiYWJjMTIzIgorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYWxsX3N0cmluZ19lbmNvZGluZ3M6CisgICAgICAgICAgICAoYnl0ZXMsIHNpemUpID0gY29kZWNzLmdldGVuY29kZXIoZW5jb2RpbmcpKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIGxlbihzKSkKKyAgICAgICAgICAgIChjaGFycywgc2l6ZSkgPSBjb2RlY3MuZ2V0ZGVjb2RlcihlbmNvZGluZykoYnl0ZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoYXJzLCBzLCAiJXIgIT0gJXIgKGVuY29kaW5nPSVyKSIgJSAoY2hhcnMsIHMsIGVuY29kaW5nKSkKKworY2xhc3MgQ2hhcm1hcFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2RlY29kZV93aXRoX3N0cmluZ19tYXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJzdHJpY3QiLCB1ImFiYyIpLAorICAgICAgICAgICAgKHUiYWJjIiwgMykKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSwgYiJceDAwXHgwMVx4MDIiLCAic3RyaWN0IiwgdSJhYiIKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSwgIlx4MDBceDAxXHgwMiIsICJzdHJpY3QiLCB1ImFiXHVmZmZlIgorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgInJlcGxhY2UiLCB1ImFiIiksCisgICAgICAgICAgICAodSJhYlx1ZmZmZCIsIDMpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAicmVwbGFjZSIsIHUiYWJcdWZmZmUiKSwKKyAgICAgICAgICAgICh1ImFiXHVmZmZkIiwgMykKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJpZ25vcmUiLCB1ImFiIiksCisgICAgICAgICAgICAodSJhYiIsIDMpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAiaWdub3JlIiwgdSJhYlx1ZmZmZSIpLAorICAgICAgICAgICAgKHUiYWIiLCAzKQorICAgICAgICApCisKKyAgICAgICAgYWxsYnl0ZXMgPSAiIi5qb2luKGNocihpKSBmb3IgaSBpbiB4cmFuZ2UoMjU2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZShhbGxieXRlcywgImlnbm9yZSIsIHUiIiksCisgICAgICAgICAgICAodSIiLCBsZW4oYWxsYnl0ZXMpKQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kZWNvZGVfd2l0aF9pbnQyc3RyX21hcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgInN0cmljdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IHUnYScsIDE6IHUnYicsIDI6IHUnYyd9KSwKKyAgICAgICAgICAgICh1ImFiYyIsIDMpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAic3RyaWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MDogdSdBYScsIDE6IHUnQmInLCAyOiB1J0NjJ30pLAorICAgICAgICAgICAgKHUiQWFCYkNjIiwgMykKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJzdHJpY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiB1J1xVMDAxMEZGRkYnLCAxOiB1J2InLCAyOiB1J2MnfSksCisgICAgICAgICAgICAodSJcVTAwMTBGRkZGYmMiLCAzKQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgInN0cmljdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IHUnYScsIDE6IHUnYicsIDI6IHUnJ30pLAorICAgICAgICAgICAgKHUiYWIiLCAzKQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlLCAiXHgwMFx4MDFceDAyIiwgInN0cmljdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiB1J2EnLCAxOiB1J2InfQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlLCAiXHgwMFx4MDFceDAyIiwgInN0cmljdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiB1J2EnLCAxOiB1J2InLCAyOiBOb25lfQorICAgICAgICApCisKKyAgICAgICAgIyBJc3N1ZSAjMTQ4NTAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlLCAiXHgwMFx4MDFceDAyIiwgInN0cmljdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiB1J2EnLCAxOiB1J2InLCAyOiB1J1x1ZmZmZSd9CisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAicmVwbGFjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IHUnYScsIDE6IHUnYid9KSwKKyAgICAgICAgICAgICh1ImFiXHVmZmZkIiwgMykKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJyZXBsYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MDogdSdhJywgMTogdSdiJywgMjogTm9uZX0pLAorICAgICAgICAgICAgKHUiYWJcdWZmZmQiLCAzKQorICAgICAgICApCisKKyAgICAgICAgIyBJc3N1ZSAjMTQ4NTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgInJlcGxhY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiB1J2EnLCAxOiB1J2InLCAyOiB1J1x1ZmZmZSd9KSwKKyAgICAgICAgICAgICh1ImFiXHVmZmZkIiwgMykKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJpZ25vcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiB1J2EnLCAxOiB1J2InfSksCisgICAgICAgICAgICAodSJhYiIsIDMpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAiaWdub3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MDogdSdhJywgMTogdSdiJywgMjogTm9uZX0pLAorICAgICAgICAgICAgKHUiYWIiLCAzKQorICAgICAgICApCisKKyAgICAgICAgIyBJc3N1ZSAjMTQ4NTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgImlnbm9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IHUnYScsIDE6IHUnYicsIDI6IHUnXHVmZmZlJ30pLAorICAgICAgICAgICAgKHUiYWIiLCAzKQorICAgICAgICApCisKKyAgICAgICAgYWxsYnl0ZXMgPSAiIi5qb2luKGNocihpKSBmb3IgaSBpbiB4cmFuZ2UoMjU2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZShhbGxieXRlcywgImlnbm9yZSIsIHt9KSwKKyAgICAgICAgICAgICh1IiIsIGxlbihhbGxieXRlcykpCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2RlY29kZV93aXRoX2ludDJpbnRfbWFwKHNlbGYpOgorICAgICAgICBhID0gb3JkKHUnYScpCisgICAgICAgIGIgPSBvcmQodSdiJykKKyAgICAgICAgYyA9IG9yZCh1J2MnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJzdHJpY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiBhLCAxOiBiLCAyOiBjfSksCisgICAgICAgICAgICAodSJhYmMiLCAzKQorICAgICAgICApCisKKyAgICAgICAgIyBJc3N1ZSAjMTUzNzkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgInN0cmljdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IDB4MTBGRkZGLCAxOiBiLCAyOiBjfSksCisgICAgICAgICAgICAodSJcVTAwMTBGRkZGYmMiLCAzKQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlLCAiXHgwMFx4MDFceDAyIiwgInN0cmljdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswOiAweDExMDAwMCwgMTogYiwgMjogY30KKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSwgIlx4MDBceDAxXHgwMiIsICJzdHJpY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MDogYSwgMTogYn0sCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUsICJceDAwXHgwMVx4MDIiLCAic3RyaWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IGEsIDE6IGIsIDI6IDB4RkZGRX0sCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAicmVwbGFjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IGEsIDE6IGJ9KSwKKyAgICAgICAgICAgICh1ImFiXHVmZmZkIiwgMykKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoIlx4MDBceDAxXHgwMiIsICJyZXBsYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MDogYSwgMTogYiwgMjogMHhGRkZFfSksCisgICAgICAgICAgICAodSJhYlx1ZmZmZCIsIDMpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29kZWNzLmNoYXJtYXBfZGVjb2RlKCJceDAwXHgwMVx4MDIiLCAiaWdub3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MDogYSwgMTogYn0pLAorICAgICAgICAgICAgKHUiYWIiLCAzKQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvZGVjcy5jaGFybWFwX2RlY29kZSgiXHgwMFx4MDFceDAyIiwgImlnbm9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezA6IGEsIDE6IGIsIDI6IDB4RkZGRX0pLAorICAgICAgICAgICAgKHUiYWIiLCAzKQorICAgICAgICApCisKKworY2xhc3MgV2l0aFN0bXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9lbmNvZGVkZmlsZShzZWxmKToKKyAgICAgICAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKCJceGMzXHhiYyIpCisgICAgICAgIHdpdGggY29kZWNzLkVuY29kZWRGaWxlKGYsICJsYXRpbi0xIiwgInV0Zi04IikgYXMgZWY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVmLnJlYWQoKSwgIlx4ZmMiKQorCisgICAgZGVmIHRlc3Rfc3RyZWFtcmVhZGVyd3JpdGVyKHNlbGYpOgorICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oIlx4YzNceGJjIikKKyAgICAgICAgaW5mbyA9IGNvZGVjcy5sb29rdXAoInV0Zi04IikKKyAgICAgICAgd2l0aCBjb2RlY3MuU3RyZWFtUmVhZGVyV3JpdGVyKGYsIGluZm8uc3RyZWFtcmVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5zdHJlYW13cml0ZXIsICdzdHJpY3QnKSBhcyBzcnc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNydy5yZWFkKCksIHUiXHhmYyIpCisKKworY2xhc3MgVW5pY29kZUVzY2FwZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy51bmljb2RlX2VzY2FwZV9lbmNvZGUodSIiKSwgKCIiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MudW5pY29kZV9lc2NhcGVfZGVjb2RlKCIiKSwgKHUiIiwgMCkpCisKKyAgICBkZWYgdGVzdF9yYXdfZW5jb2RlKHNlbGYpOgorICAgICAgICBlbmNvZGUgPSBjb2RlY3MudW5pY29kZV9lc2NhcGVfZW5jb2RlCisgICAgICAgIGZvciBiIGluIHJhbmdlKDMyLCAxMjcpOgorICAgICAgICAgICAgaWYgYiAhPSBvcmQoJ1xcJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGUodW5pY2hyKGIpKSwgKGNocihiKSwgMSkpCisKKyAgICBkZWYgdGVzdF9yYXdfZGVjb2RlKHNlbGYpOgorICAgICAgICBkZWNvZGUgPSBjb2RlY3MudW5pY29kZV9lc2NhcGVfZGVjb2RlCisgICAgICAgIGZvciBiIGluIHJhbmdlKDI1Nik6CisgICAgICAgICAgICBpZiBiICE9IG9yZCgnXFwnKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZShjaHIoYikgKyAnMCcpLCAodW5pY2hyKGIpICsgdScwJywgMikpCisKKyAgICBkZWYgdGVzdF9lc2NhcGVfZW5jb2RlKHNlbGYpOgorICAgICAgICBlbmNvZGUgPSBjb2RlY3MudW5pY29kZV9lc2NhcGVfZW5jb2RlCisgICAgICAgIGNoZWNrID0gY29kaW5nX2NoZWNrZXIoc2VsZiwgZW5jb2RlKQorICAgICAgICBjaGVjayh1J1x0JywgcidcdCcpCisgICAgICAgIGNoZWNrKHUnXG4nLCByJ1xuJykKKyAgICAgICAgY2hlY2sodSdccicsIHInXHInKQorICAgICAgICBjaGVjayh1J1xcJywgcidcXCcpCisgICAgICAgIGZvciBiIGluIHJhbmdlKDMyKToKKyAgICAgICAgICAgIGlmIGNocihiKSBub3QgaW4gJ1x0XG5ccic6CisgICAgICAgICAgICAgICAgY2hlY2sodW5pY2hyKGIpLCAnXFx4JTAyeCcgJSBiKQorICAgICAgICBmb3IgYiBpbiByYW5nZSgxMjcsIDI1Nik6CisgICAgICAgICAgICBjaGVjayh1bmljaHIoYiksICdcXHglMDJ4JyAlIGIpCisgICAgICAgIGNoZWNrKHUnXHUyMGFjJywgcidcdTIwYWMnKQorICAgICAgICBjaGVjayh1J1xVMDAwMWQxMjAnLCByJ1xVMDAwMWQxMjAnKQorCisgICAgZGVmIHRlc3RfZXNjYXBlX2RlY29kZShzZWxmKToKKyAgICAgICAgZGVjb2RlID0gY29kZWNzLnVuaWNvZGVfZXNjYXBlX2RlY29kZQorICAgICAgICBjaGVjayA9IGNvZGluZ19jaGVja2VyKHNlbGYsIGRlY29kZSkKKyAgICAgICAgY2hlY2soIltcXFxuXSIsIHUiW10iKQorICAgICAgICBjaGVjayhyJ1tcIl0nLCB1J1siXScpCisgICAgICAgIGNoZWNrKHIiW1wnXSIsIHUiWyddIikKKyAgICAgICAgY2hlY2sociJbXFxdIiwgdXIiW1xdIikKKyAgICAgICAgY2hlY2sociJbXGFdIiwgdSJbXHgwN10iKQorICAgICAgICBjaGVjayhyIltcYl0iLCB1IltceDA4XSIpCisgICAgICAgIGNoZWNrKHIiW1x0XSIsIHUiW1x4MDldIikKKyAgICAgICAgY2hlY2sociJbXG5dIiwgdSJbXHgwYV0iKQorICAgICAgICBjaGVjayhyIltcdl0iLCB1IltceDBiXSIpCisgICAgICAgIGNoZWNrKHIiW1xmXSIsIHUiW1x4MGNdIikKKyAgICAgICAgY2hlY2sociJbXHJdIiwgdSJbXHgwZF0iKQorICAgICAgICBjaGVjayhyIltcN10iLCB1IltceDA3XSIpCisgICAgICAgIGNoZWNrKHIiW1w4XSIsIHVyIltcOF0iKQorICAgICAgICBjaGVjayhyIltcNzhdIiwgdSJbXHgwNzhdIikKKyAgICAgICAgY2hlY2sociJbXDQxXSIsIHUiWyFdIikKKyAgICAgICAgY2hlY2sociJbXDQxOF0iLCB1IlshOF0iKQorICAgICAgICBjaGVjayhyIltcMTAxXSIsIHUiW0FdIikKKyAgICAgICAgY2hlY2sociJbXDEwMTBdIiwgdSJbQTBdIikKKyAgICAgICAgY2hlY2sociJbXHg0MV0iLCB1IltBXSIpCisgICAgICAgIGNoZWNrKHIiW1x4NDEwXSIsIHUiW0EwXSIpCisgICAgICAgIGNoZWNrKHIiXHUyMGFjIiwgdSJcdTIwYWMiKQorICAgICAgICBjaGVjayhyIlxVMDAwMWQxMjAiLCB1IlxVMDAwMWQxMjAiKQorICAgICAgICBmb3IgYiBpbiByYW5nZSgyNTYpOgorICAgICAgICAgICAgaWYgY2hyKGIpIG5vdCBpbiAnXG4iXCdcXGFidG52ZnIwMTIzNDU2N3h1VU4nOgorICAgICAgICAgICAgICAgIGNoZWNrKCdcXCcgKyBjaHIoYiksIHUnXFwnICsgdW5pY2hyKGIpKQorCisgICAgZGVmIHRlc3RfZGVjb2RlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgZGVjb2RlID0gY29kZWNzLnVuaWNvZGVfZXNjYXBlX2RlY29kZQorICAgICAgICBmb3IgYywgZCBpbiAoJ3gnLCAyKSwgKCd1JywgNCksICgnVScsIDQpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoZCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxcIiArIGMgKyAiMCIqaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiW1xcIiArIGMgKyAiMCIqaSArICJdIikKKyAgICAgICAgICAgICAgICBkYXRhID0gIltcXCIgKyBjICsgIjAiKmkgKyAiXVxcIiArIGMgKyAiMCIqaQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlKGRhdGEsICJpZ25vcmUiKSwgKHUiW10iLCBsZW4oZGF0YSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlKGRhdGEsICJyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSJbXHVmZmZkXVx1ZmZmZCIsIGxlbihkYXRhKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgZGVjb2RlLCByIlxVMDAxMTAwMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZShyIlxVMDAxMTAwMDAiLCAiaWdub3JlIiksICh1IiIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGUociJcVTAwMTEwMDAwIiwgInJlcGxhY2UiKSwgKHUiXHVmZmZkIiwgMTApKQorCisKK2NsYXNzIFJhd1VuaWNvZGVFc2NhcGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MucmF3X3VuaWNvZGVfZXNjYXBlX2VuY29kZSh1IiIpLCAoIiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5yYXdfdW5pY29kZV9lc2NhcGVfZGVjb2RlKCIiKSwgKHUiIiwgMCkpCisKKyAgICBkZWYgdGVzdF9yYXdfZW5jb2RlKHNlbGYpOgorICAgICAgICBlbmNvZGUgPSBjb2RlY3MucmF3X3VuaWNvZGVfZXNjYXBlX2VuY29kZQorICAgICAgICBmb3IgYiBpbiByYW5nZSgyNTYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGUodW5pY2hyKGIpKSwgKGNocihiKSwgMSkpCisKKyAgICBkZWYgdGVzdF9yYXdfZGVjb2RlKHNlbGYpOgorICAgICAgICBkZWNvZGUgPSBjb2RlY3MucmF3X3VuaWNvZGVfZXNjYXBlX2RlY29kZQorICAgICAgICBmb3IgYiBpbiByYW5nZSgyNTYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGUoY2hyKGIpICsgJzAnKSwgKHVuaWNocihiKSArIHUnMCcsIDIpKQorCisgICAgZGVmIHRlc3RfZXNjYXBlX2VuY29kZShzZWxmKToKKyAgICAgICAgZW5jb2RlID0gY29kZWNzLnJhd191bmljb2RlX2VzY2FwZV9lbmNvZGUKKyAgICAgICAgY2hlY2sgPSBjb2RpbmdfY2hlY2tlcihzZWxmLCBlbmNvZGUpCisgICAgICAgIGZvciBiIGluIHJhbmdlKDI1Nik6CisgICAgICAgICAgICBpZiBjaHIoYikgbm90IGluICd1VSc6CisgICAgICAgICAgICAgICAgY2hlY2sodSdcXCcgKyB1bmljaHIoYiksICdcXCcgKyBjaHIoYikpCisgICAgICAgIGNoZWNrKHUnXHUyMGFjJywgcidcdTIwYWMnKQorICAgICAgICBjaGVjayh1J1xVMDAwMWQxMjAnLCByJ1xVMDAwMWQxMjAnKQorCisgICAgZGVmIHRlc3RfZXNjYXBlX2RlY29kZShzZWxmKToKKyAgICAgICAgZGVjb2RlID0gY29kZWNzLnJhd191bmljb2RlX2VzY2FwZV9kZWNvZGUKKyAgICAgICAgY2hlY2sgPSBjb2RpbmdfY2hlY2tlcihzZWxmLCBkZWNvZGUpCisgICAgICAgIGZvciBiIGluIHJhbmdlKDI1Nik6CisgICAgICAgICAgICBpZiBjaHIoYikgbm90IGluICd1VSc6CisgICAgICAgICAgICAgICAgY2hlY2soJ1xcJyArIGNocihiKSwgdSdcXCcgKyB1bmljaHIoYikpCisgICAgICAgIGNoZWNrKHIiXHUyMGFjIiwgdSJcdTIwYWMiKQorICAgICAgICBjaGVjayhyIlxVMDAwMWQxMjAiLCB1IlxVMDAwMWQxMjAiKQorCisgICAgZGVmIHRlc3RfZGVjb2RlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgZGVjb2RlID0gY29kZWNzLnJhd191bmljb2RlX2VzY2FwZV9kZWNvZGUKKyAgICAgICAgZm9yIGMsIGQgaW4gKCd1JywgNCksICgnVScsIDQpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoZCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxcIiArIGMgKyAiMCIqaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiW1xcIiArIGMgKyAiMCIqaSArICJdIikKKyAgICAgICAgICAgICAgICBkYXRhID0gIltcXCIgKyBjICsgIjAiKmkgKyAiXVxcIiArIGMgKyAiMCIqaQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlKGRhdGEsICJpZ25vcmUiKSwgKHUiW10iLCBsZW4oZGF0YSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlKGRhdGEsICJyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodSJbXHVmZmZkXVx1ZmZmZCIsIGxlbihkYXRhKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgZGVjb2RlLCByIlxVMDAxMTAwMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZShyIlxVMDAxMTAwMDAiLCAiaWdub3JlIiksICh1IiIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGUociJcVTAwMTEwMDAwIiwgInJlcGxhY2UiKSwgKHUiXHVmZmZkIiwgMTApKQorCisKK2NsYXNzIEJvbVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3NlZWswKHNlbGYpOgorICAgICAgICBkYXRhID0gdSIxMjM0NTY3ODkwIgorICAgICAgICB0ZXN0cyA9ICgidXRmLTE2IiwKKyAgICAgICAgICAgICAgICAgInV0Zi0xNi1sZSIsCisgICAgICAgICAgICAgICAgICJ1dGYtMTYtYmUiLAorICAgICAgICAgICAgICAgICAidXRmLTMyIiwKKyAgICAgICAgICAgICAgICAgInV0Zi0zMi1sZSIsCisgICAgICAgICAgICAgICAgICJ1dGYtMzItYmUiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodGVzdF9zdXBwb3J0LnVubGluaywgdGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIHRlc3RzOgorICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgQk9NIGlzIHdyaXR0ZW4gb25seSBvbmNlCisgICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3KycsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YSAqIDIpCisgICAgICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YSAqIDIpCisKKyAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgQk9NIGlzIHdyaXR0ZW4gYWZ0ZXIgYSBzZWVrKDApCisgICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3KycsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YVswXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGYudGVsbCgpLCAwKQorICAgICAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBkYXRhKQorCisgICAgICAgICAgICAjIChTdHJlYW1Xcml0ZXIpIENoZWNrIHRoYXQgdGhlIEJPTSBpcyB3cml0dGVuIGFmdGVyIGEgc2VlaygwKQorICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndysnLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlci53cml0ZShkYXRhWzBdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZi53cml0ZXIudGVsbCgpLCAwKQorICAgICAgICAgICAgICAgIGYud3JpdGVyLnNlZWsoMCkKKyAgICAgICAgICAgICAgICBmLndyaXRlci53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGEpCisKKyAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgQk9NIGlzIG5vdCB3cml0dGVuIGFmdGVyIGEgc2VlaygpIGF0IGEgcG9zaXRpb24KKyAgICAgICAgICAgICMgZGlmZmVyZW50IHRoYW4gdGhlIHN0YXJ0CisgICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3KycsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICAgICAgICAgICAgICBmLnNlZWsoZi50ZWxsKCkpCisgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGEgKiAyKQorCisgICAgICAgICAgICAjIChTdHJlYW1Xcml0ZXIpIENoZWNrIHRoYXQgdGhlIEJPTSBpcyBub3Qgd3JpdHRlbiBhZnRlciBhIHNlZWsoKQorICAgICAgICAgICAgIyBhdCBhIHBvc2l0aW9uIGRpZmZlcmVudCB0aGFuIHRoZSBzdGFydAorICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndysnLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlci53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIGYud3JpdGVyLnNlZWsoZi53cml0ZXIudGVsbCgpKQorICAgICAgICAgICAgICAgIGYud3JpdGVyLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YSAqIDIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIFVURjMyVGVzdCwKKyAgICAgICAgVVRGMzJMRVRlc3QsCisgICAgICAgIFVURjMyQkVUZXN0LAorICAgICAgICBVVEYxNlRlc3QsCisgICAgICAgIFVURjE2TEVUZXN0LAorICAgICAgICBVVEYxNkJFVGVzdCwKKyAgICAgICAgVVRGOFRlc3QsCisgICAgICAgIFVURjhTaWdUZXN0LAorICAgICAgICBVVEY3VGVzdCwKKyAgICAgICAgVVRGMTZFeFRlc3QsCisgICAgICAgIFJlYWRCdWZmZXJUZXN0LAorICAgICAgICBDaGFyQnVmZmVyVGVzdCwKKyAgICAgICAgRXNjYXBlRGVjb2RlVGVzdCwKKyAgICAgICAgUmVjb2RpbmdUZXN0LAorICAgICAgICBQdW55Y29kZVRlc3QsCisgICAgICAgIFVuaWNvZGVJbnRlcm5hbFRlc3QsCisgICAgICAgIE5hbWVwcmVwVGVzdCwKKyAgICAgICAgSUROQUNvZGVjVGVzdCwKKyAgICAgICAgQ29kZWNzTW9kdWxlVGVzdCwKKyAgICAgICAgU3RyZWFtUmVhZGVyVGVzdCwKKyAgICAgICAgRW5jb2RlZEZpbGVUZXN0LAorICAgICAgICBTdHIyU3RyVGVzdCwKKyAgICAgICAgQmFzaWNVbmljb2RlVGVzdCwKKyAgICAgICAgQmFzaWNTdHJUZXN0LAorICAgICAgICBDaGFybWFwVGVzdCwKKyAgICAgICAgV2l0aFN0bXRUZXN0LAorICAgICAgICBVbmljb2RlRXNjYXBlVGVzdCwKKyAgICAgICAgUmF3VW5pY29kZUVzY2FwZVRlc3QsCisgICAgICAgIEJvbVRlc3QsCisgICAgKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGVvcC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGVvcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGNkM2NlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29kZW9wLnB5CkBAIC0wLDAgKzEsMzA0IEBACisiIiIKKyAgIFRlc3QgY2FzZXMgZm9yIGNvZGVvcC5weQorICAgTmljayBNYXRoZXdzb24KKyIiIgoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGlzX2p5dGhvbgorCitmcm9tIGNvZGVvcCBpbXBvcnQgY29tcGlsZV9jb21tYW5kLCBQeUNGX0RPTlRfSU1QTFlfREVERU5UCisKK2lmIGlzX2p5dGhvbjoKKyAgICBpbXBvcnQgc3lzCisgICAgaW1wb3J0IGNTdHJpbmdJTworCisgICAgZGVmIHVuaWZ5X2NhbGxhYmxlcyhkKToKKyAgICAgICAgZm9yIG4sdiBpbiBkLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBjYWxsYWJsZSh2KToKKyAgICAgICAgICAgICAgICBkW25dID0gY2FsbGFibGUKKyAgICAgICAgcmV0dXJuIGQKKworY2xhc3MgQ29kZW9wVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGFzc2VydFZhbGlkKHNlbGYsIHN0ciwgc3ltYm9sPSdzaW5nbGUnKToKKyAgICAgICAgJycnc3VjY2VlZCBpZmYgc3RyIGlzIGEgdmFsaWQgcGllY2Ugb2YgY29kZScnJworICAgICAgICBpZiBpc19qeXRob246CisgICAgICAgICAgICBjb2RlID0gY29tcGlsZV9jb21tYW5kKHN0ciwgIjxpbnB1dD4iLCBzeW1ib2wpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29kZSkKKyAgICAgICAgICAgIGlmIHN5bWJvbCA9PSAic2luZ2xlIjoKKyAgICAgICAgICAgICAgICBkLHIgPSB7fSx7fQorICAgICAgICAgICAgICAgIHNhdmVkX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGV4ZWMgY29kZSBpbiBkCisgICAgICAgICAgICAgICAgICAgIGV4ZWMgY29tcGlsZShzdHIsIjxpbnB1dD4iLCJzaW5nbGUiKSBpbiByCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVkX3N0ZG91dAorICAgICAgICAgICAgZWxpZiBzeW1ib2wgPT0gJ2V2YWwnOgorICAgICAgICAgICAgICAgIGN0eCA9IHsnYSc6IDJ9CisgICAgICAgICAgICAgICAgZCA9IHsgJ3ZhbHVlJzogZXZhbChjb2RlLGN0eCkgfQorICAgICAgICAgICAgICAgIHIgPSB7ICd2YWx1ZSc6IGV2YWwoc3RyLGN0eCkgfQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmlmeV9jYWxsYWJsZXMociksdW5pZnlfY2FsbGFibGVzKGQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSBjb21waWxlKHN0ciwgIjxpbnB1dD4iLCBzeW1ib2wsIFB5Q0ZfRE9OVF9JTVBMWV9ERURFTlQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBpbGVfY29tbWFuZChzdHIsICI8aW5wdXQ+Iiwgc3ltYm9sKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgYXNzZXJ0SW5jb21wbGV0ZShzZWxmLCBzdHIsIHN5bWJvbD0nc2luZ2xlJyk6CisgICAgICAgICcnJ3N1Y2NlZWQgaWZmIHN0ciBpcyB0aGUgc3RhcnQgb2YgYSB2YWxpZCBwaWVjZSBvZiBjb2RlJycnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGlsZV9jb21tYW5kKHN0ciwgc3ltYm9sPXN5bWJvbCksIE5vbmUpCisKKyAgICBkZWYgYXNzZXJ0SW52YWxpZChzZWxmLCBzdHIsIHN5bWJvbD0nc2luZ2xlJywgaXNfc3ludGF4PTEpOgorICAgICAgICAnJydzdWNjZWVkIGlmZiBzdHIgaXMgdGhlIHN0YXJ0IG9mIGFuIGludmFsaWQgcGllY2Ugb2YgY29kZScnJworICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21waWxlX2NvbW1hbmQoc3RyLHN5bWJvbD1zeW1ib2wpCisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiByYWlzZWQgZm9yIGludmFsaWQgY29kZSIpCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc19zeW50YXgpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc19zeW50YXgpCisKKyAgICBkZWYgdGVzdF92YWxpZChzZWxmKToKKyAgICAgICAgYXYgPSBzZWxmLmFzc2VydFZhbGlkCisKKyAgICAgICAgIyBzcGVjaWFsIGNhc2UKKyAgICAgICAgaWYgbm90IGlzX2p5dGhvbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGlsZV9jb21tYW5kKCIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZSgicGFzcyIsICI8aW5wdXQ+IiwgJ3NpbmdsZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlDRl9ET05UX0lNUExZX0RFREVOVCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBpbGVfY29tbWFuZCgiXG4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZSgicGFzcyIsICI8aW5wdXQ+IiwgJ3NpbmdsZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlDRl9ET05UX0lNUExZX0RFREVOVCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhdigiIikKKyAgICAgICAgICAgIGF2KCJcbiIpCisKKyAgICAgICAgYXYoImEgPSAxIikKKyAgICAgICAgYXYoIlxuYSA9IDEiKQorICAgICAgICBhdigiYSA9IDFcbiIpCisgICAgICAgIGF2KCJhID0gMVxuXG4iKQorICAgICAgICBhdigiXG5cbmEgPSAxXG5cbiIpCisKKyAgICAgICAgYXYoImRlZiB4KCk6XG4gIHBhc3NcbiIpCisgICAgICAgIGF2KCJpZiAxOlxuIHBhc3NcbiIpCisKKyAgICAgICAgYXYoIlxuXG5pZiAxOiBwYXNzXG4iKQorICAgICAgICBhdigiXG5cbmlmIDE6IHBhc3NcblxuIikKKworICAgICAgICBhdigiZGVmIHgoKTpcblxuIHBhc3NcbiIpCisgICAgICAgIGF2KCJkZWYgeCgpOlxuICBwYXNzXG4gIFxuIikKKyAgICAgICAgYXYoImRlZiB4KCk6XG4gIHBhc3NcbiBcbiIpCisKKyAgICAgICAgYXYoInBhc3NcbiIpCisgICAgICAgIGF2KCIzKiozXG4iKQorCisgICAgICAgIGF2KCJpZiA5PT0zOlxuICAgcGFzc1xuZWxzZTpcbiAgIHBhc3NcbiIpCisgICAgICAgIGF2KCJpZiAxOlxuIHBhc3NcbiBpZiAxOlxuICBwYXNzXG4gZWxzZTpcbiAgcGFzc1xuIikKKworICAgICAgICBhdigiI2FcbiNiXG5hID0gM1xuIikKKyAgICAgICAgYXYoIiNhXG5cbiAgIFxuYT0zXG4iKQorICAgICAgICBhdigiYT0zXG5cbiIpCisgICAgICAgIGF2KCJhID0gOSsgXFxcbjMiKQorCisgICAgICAgIGF2KCIzKiozIiwiZXZhbCIpCisgICAgICAgIGF2KCIobGFtYmRhIHo6IFxuIHoqKjMpIiwiZXZhbCIpCisKKyAgICAgICAgYXYoIjkrIFxcXG4zIiwiZXZhbCIpCisgICAgICAgIGF2KCI5KyBcXFxuM1xuIiwiZXZhbCIpCisKKyAgICAgICAgYXYoIlxuXG5hKiozIiwiZXZhbCIpCisgICAgICAgIGF2KCJcbiBcbmEqKjMiLCJldmFsIikKKyAgICAgICAgYXYoIiNhXG4jYlxuYSoqMyIsImV2YWwiKQorCisgICAgICAgIGF2KCJcblxuYSA9IDFcblxuIikKKyAgICAgICAgYXYoIlxuXG5pZiAxOiBhPTFcblxuIikKKworICAgICAgICBhdigiaWYgMTpcbiBwYXNzXG4gaWYgMTpcbiAgcGFzc1xuIGVsc2U6XG4gIHBhc3NcbiIpCisgICAgICAgIGF2KCIjYVxuXG4gICBcbmE9M1xuXG4iKQorCisgICAgICAgIGF2KCJcblxuYSoqMyIsImV2YWwiKQorICAgICAgICBhdigiXG4gXG5hKiozIiwiZXZhbCIpCisgICAgICAgIGF2KCIjYVxuI2JcbmEqKjMiLCJldmFsIikKKworICAgICAgICBhdigiZGVmIGYoKTpcbiB0cnk6IHBhc3NcbiBmaW5hbGx5OiBbeCBmb3IgeCBpbiAoMSwyKV1cbiIpCisgICAgICAgIGF2KCJkZWYgZigpOlxuIHBhc3NcbiNmb29cbiIpCisgICAgICAgIGF2KCJAYS5iLmNcbmRlZiBmKCk6XG4gcGFzc1xuIikKKworICAgIGRlZiB0ZXN0X2luY29tcGxldGUoc2VsZik6CisgICAgICAgIGFpID0gc2VsZi5hc3NlcnRJbmNvbXBsZXRlCisKKyAgICAgICAgYWkoIihhICoqIikKKyAgICAgICAgYWkoIihhLGIsIikKKyAgICAgICAgYWkoIihhLGIsKCIpCisgICAgICAgIGFpKCIoYSxiLCgiKQorICAgICAgICBhaSgiYSA9ICgiKQorICAgICAgICBhaSgiYSA9IHsiKQorICAgICAgICBhaSgiYiArIHsiKQorCisgICAgICAgIGFpKCJpZiA5PT0zOlxuICAgcGFzc1xuZWxzZToiKQorICAgICAgICBhaSgiaWYgOT09MzpcbiAgIHBhc3NcbmVsc2U6XG4iKQorICAgICAgICBhaSgiaWYgOT09MzpcbiAgIHBhc3NcbmVsc2U6XG4gICBwYXNzIikKKyAgICAgICAgYWkoImlmIDE6IikKKyAgICAgICAgYWkoImlmIDE6XG4iKQorICAgICAgICBhaSgiaWYgMTpcbiBwYXNzXG4gaWYgMTpcbiAgcGFzc1xuIGVsc2U6IikKKyAgICAgICAgYWkoImlmIDE6XG4gcGFzc1xuIGlmIDE6XG4gIHBhc3NcbiBlbHNlOlxuIikKKyAgICAgICAgYWkoImlmIDE6XG4gcGFzc1xuIGlmIDE6XG4gIHBhc3NcbiBlbHNlOlxuICBwYXNzIikKKworICAgICAgICBhaSgiZGVmIHgoKToiKQorICAgICAgICBhaSgiZGVmIHgoKTpcbiIpCisgICAgICAgIGFpKCJkZWYgeCgpOlxuXG4iKQorCisgICAgICAgIGFpKCJkZWYgeCgpOlxuICBwYXNzIikKKyAgICAgICAgYWkoImRlZiB4KCk6XG4gIHBhc3NcbiAiKQorICAgICAgICBhaSgiZGVmIHgoKTpcbiAgcGFzc1xuICAiKQorICAgICAgICBhaSgiXG5cbmRlZiB4KCk6XG4gIHBhc3MiKQorCisgICAgICAgIGFpKCJhID0gOSsgXFwiKQorICAgICAgICBhaSgiYSA9ICdhXFwiKQorICAgICAgICBhaSgiYSA9ICcnJ3h5IikKKworICAgICAgICBhaSgiIiwiZXZhbCIpCisgICAgICAgIGFpKCJcbiIsImV2YWwiKQorICAgICAgICBhaSgiKCIsImV2YWwiKQorICAgICAgICBhaSgiKFxuXG5cbiIsImV2YWwiKQorICAgICAgICBhaSgiKDkrIiwiZXZhbCIpCisgICAgICAgIGFpKCI5KyBcXCIsImV2YWwiKQorICAgICAgICBhaSgibGFtYmRhIHo6IFxcIiwiZXZhbCIpCisKKyAgICAgICAgYWkoImlmIFRydWU6XG4gaWYgVHJ1ZTpcbiAgaWYgVHJ1ZTogICBcbiIpCisKKyAgICAgICAgYWkoIkBhKCIpCisgICAgICAgIGFpKCJAYShiIikKKyAgICAgICAgYWkoIkBhKGIsIikKKyAgICAgICAgYWkoIkBhKGIsYyIpCisgICAgICAgIGFpKCJAYShiLGMsIikKKworICAgICAgICBhaSgiZnJvbSBhIGltcG9ydCAoIikKKyAgICAgICAgYWkoImZyb20gYSBpbXBvcnQgKGIiKQorICAgICAgICBhaSgiZnJvbSBhIGltcG9ydCAoYiwiKQorICAgICAgICBhaSgiZnJvbSBhIGltcG9ydCAoYixjIikKKyAgICAgICAgYWkoImZyb20gYSBpbXBvcnQgKGIsYywiKQorCisgICAgICAgIGFpKCJbIik7CisgICAgICAgIGFpKCJbYSIpOworICAgICAgICBhaSgiW2EsIik7CisgICAgICAgIGFpKCJbYSxiIik7CisgICAgICAgIGFpKCJbYSxiLCIpOworCisgICAgICAgIGFpKCJ7Iik7CisgICAgICAgIGFpKCJ7YSIpOworICAgICAgICBhaSgie2E6Iik7CisgICAgICAgIGFpKCJ7YTpiIik7CisgICAgICAgIGFpKCJ7YTpiLCIpOworICAgICAgICBhaSgie2E6YixjIik7CisgICAgICAgIGFpKCJ7YTpiLGM6Iik7CisgICAgICAgIGFpKCJ7YTpiLGM6ZCIpOworICAgICAgICBhaSgie2E6YixjOmQsIik7CisKKyAgICAgICAgYWkoImEoIikKKyAgICAgICAgYWkoImEoYiIpCisgICAgICAgIGFpKCJhKGIsIikKKyAgICAgICAgYWkoImEoYixjIikKKyAgICAgICAgYWkoImEoYixjLCIpCisKKyAgICAgICAgYWkoImFbIikKKyAgICAgICAgYWkoImFbYiIpCisgICAgICAgIGFpKCJhW2IsIikKKyAgICAgICAgYWkoImFbYjoiKQorICAgICAgICBhaSgiYVtiOmMiKQorICAgICAgICBhaSgiYVtiOmM6IikKKyAgICAgICAgYWkoImFbYjpjOmQiKQorCisgICAgICAgIGFpKCJkZWYgYSgiKQorICAgICAgICBhaSgiZGVmIGEoYiIpCisgICAgICAgIGFpKCJkZWYgYShiLCIpCisgICAgICAgIGFpKCJkZWYgYShiLGMiKQorICAgICAgICBhaSgiZGVmIGEoYixjLCIpCisKKyAgICAgICAgYWkoIigiKQorICAgICAgICBhaSgiKGEiKQorICAgICAgICBhaSgiKGEsIikKKyAgICAgICAgYWkoIihhLGIiKQorICAgICAgICBhaSgiKGEsYiwiKQorCisgICAgICAgIGFpKCJpZiBhOlxuIHBhc3NcbmVsaWYgYjoiKQorICAgICAgICBhaSgiaWYgYTpcbiBwYXNzXG5lbGlmIGI6XG4gcGFzc1xuZWxzZToiKQorCisgICAgICAgIGFpKCJ3aGlsZSBhOiIpCisgICAgICAgIGFpKCJ3aGlsZSBhOlxuIHBhc3NcbmVsc2U6IikKKworICAgICAgICBhaSgiZm9yIGEgaW4gYjoiKQorICAgICAgICBhaSgiZm9yIGEgaW4gYjpcbiBwYXNzXG5lbHNlOiIpCisKKyAgICAgICAgYWkoInRyeToiKQorICAgICAgICBhaSgidHJ5OlxuIHBhc3NcbmV4Y2VwdDoiKQorICAgICAgICBhaSgidHJ5OlxuIHBhc3NcbmZpbmFsbHk6IikKKyAgICAgICAgYWkoInRyeTpcbiBwYXNzXG5leGNlcHQ6XG4gcGFzc1xuZmluYWxseToiKQorCisgICAgICAgIGFpKCJ3aXRoIGE6IikKKyAgICAgICAgYWkoIndpdGggYSBhcyBiOiIpCisKKyAgICAgICAgYWkoImNsYXNzIGE6IikKKyAgICAgICAgYWkoImNsYXNzIGEoIikKKyAgICAgICAgYWkoImNsYXNzIGEoYiIpCisgICAgICAgIGFpKCJjbGFzcyBhKGIsIikKKyAgICAgICAgYWkoImNsYXNzIGEoKToiKQorCisgICAgICAgIGFpKCJbeCBmb3IiKQorICAgICAgICBhaSgiW3ggZm9yIHggaW4iKQorICAgICAgICBhaSgiW3ggZm9yIHggaW4gKCIpCisKKyAgICAgICAgYWkoIih4IGZvciIpCisgICAgICAgIGFpKCIoeCBmb3IgeCBpbiIpCisgICAgICAgIGFpKCIoeCBmb3IgeCBpbiAoIikKKworICAgIGRlZiB0ZXN0X2ludmFsaWQoc2VsZik6CisgICAgICAgIGFpID0gc2VsZi5hc3NlcnRJbnZhbGlkCisgICAgICAgIGFpKCJhIGIiKQorCisgICAgICAgIGFpKCJhIEAiKQorICAgICAgICBhaSgiYSBiIEAiKQorICAgICAgICBhaSgiYSAqKiBAIikKKworICAgICAgICBhaSgiYSA9ICIpCisgICAgICAgIGFpKCJhID0gOSArIikKKworICAgICAgICBhaSgiZGVmIHgoKTpcblxucGFzc1xuIikKKworICAgICAgICBhaSgiXG5cbiBpZiAxOiBwYXNzXG5cbnBhc3MiKQorCisgICAgICAgIGFpKCJhID0gOSsgXFxcbiIpCisgICAgICAgIGFpKCJhID0gJ2FcXCAiKQorICAgICAgICBhaSgiYSA9ICdhXFxcbiIpCisKKyAgICAgICAgYWkoImEgPSAxIiwiZXZhbCIpCisgICAgICAgIGFpKCJhID0gKCIsImV2YWwiKQorICAgICAgICBhaSgiXSIsImV2YWwiKQorICAgICAgICBhaSgiKCkpIiwiZXZhbCIpCisgICAgICAgIGFpKCJbfSIsImV2YWwiKQorICAgICAgICBhaSgiOSsiLCJldmFsIikKKyAgICAgICAgYWkoImxhbWJkYSB6OiIsImV2YWwiKQorICAgICAgICBhaSgiYSBiIiwiZXZhbCIpCisKKyAgICAgICAgYWkoInJldHVybiAyLjMiKQorICAgICAgICBhaSgiaWYgKGEgPT0gMSBhbmQgYiA9IDIpOiBwYXNzIikKKworICAgICAgICBhaSgiZGVsIDEiKQorICAgICAgICBhaSgiZGVsICgpIikKKyAgICAgICAgYWkoImRlbCAoMSwpIikKKyAgICAgICAgYWkoImRlbCBbMV0iKQorICAgICAgICBhaSgiZGVsICcxJyIpCisKKyAgICAgICAgYWkoIltpIGZvciBpIGluIHJhbmdlKDEwKV0gPSAoMSwgMiwgMykiKQorCisgICAgZGVmIHRlc3RfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGlsZV9jb21tYW5kKCJhID0gMVxuIiwgImFiYyIpLmNvX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUoImEgPSAxXG4iLCAiYWJjIiwgJ3NpbmdsZScpLmNvX2ZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNvbXBpbGVfY29tbWFuZCgiYSA9IDFcbiIsICJhYmMiKS5jb19maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlKCJhID0gMVxuIiwgImRlZiIsICdzaW5nbGUnKS5jb19maWxlbmFtZSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KENvZGVvcFRlc3RzKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGluZy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZGluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjVkZGIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29kaW5nLnB5CkBAIC0wLDAgKzEsMzcgQEAKKworaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0LCB1bml0dGVzdAoraW1wb3J0IG9zCisKK2NsYXNzIENvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2JhZF9jb2Rpbmcoc2VsZik6CisgICAgICAgIG1vZHVsZV9uYW1lID0gJ2JhZF9jb2RpbmcnCisgICAgICAgIHNlbGYudmVyaWZ5X2JhZF9tb2R1bGUobW9kdWxlX25hbWUpCisKKyAgICBkZWYgdGVzdF9iYWRfY29kaW5nMihzZWxmKToKKyAgICAgICAgbW9kdWxlX25hbWUgPSAnYmFkX2NvZGluZzInCisgICAgICAgIHNlbGYudmVyaWZ5X2JhZF9tb2R1bGUobW9kdWxlX25hbWUpCisKKyAgICBkZWYgdmVyaWZ5X2JhZF9tb2R1bGUoc2VsZiwgbW9kdWxlX25hbWUpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgX19pbXBvcnRfXywgJ3Rlc3QuJyArIG1vZHVsZV9uYW1lKQorCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsIG1vZHVsZV9uYW1lICsgJy5weScpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSkgYXMgZnA6CisgICAgICAgICAgICB0ZXh0ID0gZnAucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCB0ZXh0LCBmaWxlbmFtZSwgJ2V4ZWMnKQorCisgICAgZGVmIHRlc3RfZXJyb3JfZnJvbV9zdHJpbmcoc2VsZik6CisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2Mjg5CisgICAgICAgIGlucHV0ID0gdSIjIGNvZGluZzogYXNjaWlcblxOe1NOT1dNQU59Ii5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIGNvbXBpbGUoaW5wdXQsICI8c3RyaW5nPiIsICJleGVjIikKKyAgICAgICAgZXhwZWN0ZWQgPSAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZSAweGUyIGluIHBvc2l0aW9uIDE2OiAiIFwKKyAgICAgICAgICAgICAgICAgICAib3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KSIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuZXhjZXB0aW9uLmFyZ3NbMF0uc3RhcnRzd2l0aChleHBlY3RlZCkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDb2RpbmdUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2VyY2lvbi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvZXJjaW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNTVjNDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2VyY2lvbi5weQpAQCAtMCwwICsxLDM0OCBAQAoraW1wb3J0IGNvcHkKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBUZXN0RmFpbGVkLCBjaGVja193YXJuaW5ncworCisKKyMgRmFrZSBhIG51bWJlciB0aGF0IGltcGxlbWVudHMgbnVtZXJpYyBtZXRob2RzIHRocm91Z2ggX19jb2VyY2VfXworY2xhc3MgQ29lcmNlTnVtYmVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLmFyZyA9IGFyZworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxDb2VyY2VOdW1iZXIgJXM+JyAlIHJlcHIoc2VsZi5hcmcpCisKKyAgICBkZWYgX19jb2VyY2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIENvZXJjZU51bWJlcik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5hcmcsIG90aGVyLmFyZworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLmFyZywgb3RoZXIpCisKKyMgTmV3LXN0eWxlIGNsYXNzIHZlcnNpb24gb2YgQ29lcmNlTnVtYmVyCitjbGFzcyBDb2VyY2VUbyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLmFyZyA9IGFyZworICAgIGRlZiBfX2NvZXJjZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgQ29lcmNlVG8pOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXJnLCBvdGhlci5hcmcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmFyZywgb3RoZXIKKworCisjIEZha2UgYSBudW1iZXIgdGhhdCBpbXBsZW1lbnRzIG51bWVyaWMgb3BzIHRocm91Z2ggbWV0aG9kcy4KK2NsYXNzIE1ldGhvZE51bWJlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZixhcmcpOgorICAgICAgICBzZWxmLmFyZyA9IGFyZworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxNZXRob2ROdW1iZXIgJXM+JyAlIHJlcHIoc2VsZi5hcmcpCisKKyAgICBkZWYgX19hZGRfXyhzZWxmLG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXJnICsgb3RoZXIKKworICAgIGRlZiBfX3JhZGRfXyhzZWxmLG90aGVyKToKKyAgICAgICAgcmV0dXJuIG90aGVyICsgc2VsZi5hcmcKKworICAgIGRlZiBfX3N1Yl9fKHNlbGYsb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5hcmcgLSBvdGhlcgorCisgICAgZGVmIF9fcnN1Yl9fKHNlbGYsb3RoZXIpOgorICAgICAgICByZXR1cm4gb3RoZXIgLSBzZWxmLmFyZworCisgICAgZGVmIF9fbXVsX18oc2VsZixvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmFyZyAqIG90aGVyCisKKyAgICBkZWYgX19ybXVsX18oc2VsZixvdGhlcik6CisgICAgICAgIHJldHVybiBvdGhlciAqIHNlbGYuYXJnCisKKyAgICBkZWYgX19kaXZfXyhzZWxmLG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXJnIC8gb3RoZXIKKworICAgIGRlZiBfX3JkaXZfXyhzZWxmLG90aGVyKToKKyAgICAgICAgcmV0dXJuIG90aGVyIC8gc2VsZi5hcmcKKworICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXJnIC8gb3RoZXIKKworICAgIGRlZiBfX3J0cnVlZGl2X18oc2VsZixvdGhlcik6CisgICAgICAgIHJldHVybiBvdGhlciAvIHNlbGYuYXJnCisKKyAgICBkZWYgX19mbG9vcmRpdl9fKHNlbGYsb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5hcmcgLy8gb3RoZXIKKworICAgIGRlZiBfX3JmbG9vcmRpdl9fKHNlbGYsb3RoZXIpOgorICAgICAgICByZXR1cm4gb3RoZXIgLy8gc2VsZi5hcmcKKworICAgIGRlZiBfX3Bvd19fKHNlbGYsb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5hcmcgKiogb3RoZXIKKworICAgIGRlZiBfX3Jwb3dfXyhzZWxmLG90aGVyKToKKyAgICAgICAgcmV0dXJuIG90aGVyICoqIHNlbGYuYXJnCisKKyAgICBkZWYgX19tb2RfXyhzZWxmLG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXJnICUgb3RoZXIKKworICAgIGRlZiBfX3Jtb2RfXyhzZWxmLG90aGVyKToKKyAgICAgICAgcmV0dXJuIG90aGVyICUgc2VsZi5hcmcKKworICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIGNtcChzZWxmLmFyZywgb3RoZXIpCisKKworY2FuZGlkYXRlcyA9IFsyLCAyTCwgNC4wLCAyKzBqLCBbMV0sICgyLCksIE5vbmUsCisgICAgICAgICAgICAgIE1ldGhvZE51bWJlcigyKSwgQ29lcmNlTnVtYmVyKDIpXQorCitpbmZpeF9iaW5vcHMgPSBbICcrJywgJy0nLCAnKicsICcqKicsICclJywgJy8vJywgJy8nIF0KKworVEUgPSBUeXBlRXJyb3IKKyMgYiA9IGJvdGggbm9ybWFsIGFuZCBhdWdtZW50ZWQgZ2l2ZSBzYW1lIHJlc3VsdCBsaXN0CisjIHMgPSBzaW5nbGUgcmVzdWx0IGxpc3RzIGZvciBub3JtYWwgYW5kIGF1Z21lbnRlZAorIyBlID0gZXF1YWxzIG90aGVyIHJlc3VsdHMKKyMgcmVzdWx0IGxpc3RzOiBbJysnLCAnLScsICcqJywgJyoqJywgJyUnLCAnLy8nLCAoJ2NsYXNzaWMgLycsICduZXcgLycpXQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDItdHVwbGUgaWYgcmVzdWx0cyBkaWZmZXIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBvbmx5IG9uZSB2YWx1ZQoraW5maXhfcmVzdWx0cyA9IHsKKyAgICAjIDIKKyAgICAoMCwwKTogKCdiJywgWzQsIDAsIDQsIDQsIDAsIDEsICgxLCAxLjApXSksCisgICAgKDAsMSk6ICgnZScsICgwLDApKSwKKyAgICAoMCwyKTogKCdiJywgWzYuMCwgLTIuMCwgOC4wLCAxNi4wLCAyLjAsIDAuMCwgMC41XSksCisgICAgKDAsMyk6ICgnYicsIFs0KzBqLCAwKzBqLCA0KzBqLCA0KzBqLCAwKzBqLCAxKzBqLCAxKzBqXSksCisgICAgKDAsNCk6ICgnYicsIFtURSwgVEUsIFsxLCAxXSwgVEUsIFRFLCBURSwgVEVdKSwKKyAgICAoMCw1KTogKCdiJywgW1RFLCBURSwgKDIsIDIpLCBURSwgVEUsIFRFLCBURV0pLAorICAgICgwLDYpOiAoJ2InLCBbVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEVdKSwKKyAgICAoMCw3KTogKCdlJywgKDAsMCkpLAorICAgICgwLDgpOiAoJ2UnLCAoMCwwKSksCisKKyAgICAjIDJMCisgICAgKDEsMCk6ICgnZScsICgwLDApKSwKKyAgICAoMSwxKTogKCdlJywgKDAsMSkpLAorICAgICgxLDIpOiAoJ2UnLCAoMCwyKSksCisgICAgKDEsMyk6ICgnZScsICgwLDMpKSwKKyAgICAoMSw0KTogKCdlJywgKDAsNCkpLAorICAgICgxLDUpOiAoJ2UnLCAoMCw1KSksCisgICAgKDEsNik6ICgnZScsICgwLDYpKSwKKyAgICAoMSw3KTogKCdlJywgKDAsNykpLAorICAgICgxLDgpOiAoJ2UnLCAoMCw4KSksCisKKyAgICAjIDQuMAorICAgICgyLDApOiAoJ2InLCBbNi4wLCAyLjAsIDguMCwgMTYuMCwgMC4wLCAyLjAsIDIuMF0pLAorICAgICgyLDEpOiAoJ2UnLCAoMiwwKSksCisgICAgKDIsMik6ICgnYicsIFs4LjAsIDAuMCwgMTYuMCwgMjU2LjAsIDAuMCwgMS4wLCAxLjBdKSwKKyAgICAoMiwzKTogKCdiJywgWzYrMGosIDIrMGosIDgrMGosIDE2KzBqLCAwKzBqLCAyKzBqLCAyKzBqXSksCisgICAgKDIsNCk6ICgnYicsIFtURSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURV0pLAorICAgICgyLDUpOiAoJ2UnLCAoMiw0KSksCisgICAgKDIsNik6ICgnZScsICgyLDQpKSwKKyAgICAoMiw3KTogKCdlJywgKDIsMCkpLAorICAgICgyLDgpOiAoJ2UnLCAoMiwwKSksCisKKyAgICAjICgyKzBqKQorICAgICgzLDApOiAoJ2InLCBbNCswaiwgMCswaiwgNCswaiwgNCswaiwgMCswaiwgMSswaiwgMSswal0pLAorICAgICgzLDEpOiAoJ2UnLCAoMywwKSksCisgICAgKDMsMik6ICgnYicsIFs2KzBqLCAtMiswaiwgOCswaiwgMTYrMGosIDIrMGosIDArMGosIDAuNSswal0pLAorICAgICgzLDMpOiAoJ2InLCBbNCswaiwgMCswaiwgNCswaiwgNCswaiwgMCswaiwgMSswaiwgMSswal0pLAorICAgICgzLDQpOiAoJ2InLCBbVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEVdKSwKKyAgICAoMyw1KTogKCdlJywgKDMsNCkpLAorICAgICgzLDYpOiAoJ2UnLCAoMyw0KSksCisgICAgKDMsNyk6ICgnZScsICgzLDApKSwKKyAgICAoMyw4KTogKCdlJywgKDMsMCkpLAorCisgICAgIyBbMV0KKyAgICAoNCwwKTogKCdiJywgW1RFLCBURSwgWzEsIDFdLCBURSwgVEUsIFRFLCBURV0pLAorICAgICg0LDEpOiAoJ2UnLCAoNCwwKSksCisgICAgKDQsMik6ICgnYicsIFtURSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURV0pLAorICAgICg0LDMpOiAoJ2InLCBbVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEVdKSwKKyAgICAoNCw0KTogKCdiJywgW1sxLCAxXSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURV0pLAorICAgICg0LDUpOiAoJ3MnLCBbVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEVdLCBbWzEsIDJdLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFXSksCisgICAgKDQsNik6ICgnYicsIFtURSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURV0pLAorICAgICg0LDcpOiAoJ2UnLCAoNCwwKSksCisgICAgKDQsOCk6ICgnZScsICg0LDApKSwKKworICAgICMgKDIsKQorICAgICg1LDApOiAoJ2InLCBbVEUsIFRFLCAoMiwgMiksIFRFLCBURSwgVEUsIFRFXSksCisgICAgKDUsMSk6ICgnZScsICg1LDApKSwKKyAgICAoNSwyKTogKCdiJywgW1RFLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFXSksCisgICAgKDUsMyk6ICgnZScsICg1LDIpKSwKKyAgICAoNSw0KTogKCdlJywgKDUsMikpLAorICAgICg1LDUpOiAoJ2InLCBbKDIsIDIpLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFXSksCisgICAgKDUsNik6ICgnYicsIFtURSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURV0pLAorICAgICg1LDcpOiAoJ2UnLCAoNSwwKSksCisgICAgKDUsOCk6ICgnZScsICg1LDApKSwKKworICAgICMgTm9uZQorICAgICg2LDApOiAoJ2InLCBbVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEVdKSwKKyAgICAoNiwxKTogKCdlJywgKDYsMCkpLAorICAgICg2LDIpOiAoJ2UnLCAoNiwwKSksCisgICAgKDYsMyk6ICgnZScsICg2LDApKSwKKyAgICAoNiw0KTogKCdlJywgKDYsMCkpLAorICAgICg2LDUpOiAoJ2UnLCAoNiwwKSksCisgICAgKDYsNik6ICgnZScsICg2LDApKSwKKyAgICAoNiw3KTogKCdlJywgKDYsMCkpLAorICAgICg2LDgpOiAoJ2UnLCAoNiwwKSksCisKKyAgICAjIE1ldGhvZE51bWJlcigyKQorICAgICg3LDApOiAoJ2UnLCAoMCwwKSksCisgICAgKDcsMSk6ICgnZScsICgwLDEpKSwKKyAgICAoNywyKTogKCdlJywgKDAsMikpLAorICAgICg3LDMpOiAoJ2UnLCAoMCwzKSksCisgICAgKDcsNCk6ICgnZScsICgwLDQpKSwKKyAgICAoNyw1KTogKCdlJywgKDAsNSkpLAorICAgICg3LDYpOiAoJ2UnLCAoMCw2KSksCisgICAgKDcsNyk6ICgnZScsICgwLDcpKSwKKyAgICAoNyw4KTogKCdlJywgKDAsOCkpLAorCisgICAgIyBDb2VyY2VOdW1iZXIoMikKKyAgICAoOCwwKTogKCdlJywgKDAsMCkpLAorICAgICg4LDEpOiAoJ2UnLCAoMCwxKSksCisgICAgKDgsMik6ICgnZScsICgwLDIpKSwKKyAgICAoOCwzKTogKCdlJywgKDAsMykpLAorICAgICg4LDQpOiAoJ2UnLCAoMCw0KSksCisgICAgKDgsNSk6ICgnZScsICgwLDUpKSwKKyAgICAoOCw2KTogKCdlJywgKDAsNikpLAorICAgICg4LDcpOiAoJ2UnLCAoMCw3KSksCisgICAgKDgsOCk6ICgnZScsICgwLDgpKSwKK30KKworZGVmIHByb2Nlc3NfaW5maXhfcmVzdWx0cygpOgorICAgIGZvciBrZXkgaW4gc29ydGVkKGluZml4X3Jlc3VsdHMpOgorICAgICAgICB2YWwgPSBpbmZpeF9yZXN1bHRzW2tleV0KKyAgICAgICAgaWYgdmFsWzBdID09ICdlJzoKKyAgICAgICAgICAgIGluZml4X3Jlc3VsdHNba2V5XSA9IGluZml4X3Jlc3VsdHNbdmFsWzFdXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgdmFsWzBdID09ICdzJzoKKyAgICAgICAgICAgICAgICByZXMgPSAodmFsWzFdLCB2YWxbMl0pCisgICAgICAgICAgICBlbGlmIHZhbFswXSA9PSAnYic6CisgICAgICAgICAgICAgICAgcmVzID0gKHZhbFsxXSwgdmFsWzFdKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXNbaV1bNl0sIHR1cGxlKToKKyAgICAgICAgICAgICAgICAgICAgaWYgMS8yID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAjIHRlc3Rpbmcgd2l0aCBjbGFzc2ljIChmbG9vcikgZGl2aXNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc1tpXVs2XSA9IHJlc1tpXVs2XVswXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0aW5nIHdpdGggLVFuZXcKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc1tpXVs2XSA9IHJlc1tpXVs2XVsxXQorICAgICAgICAgICAgaW5maXhfcmVzdWx0c1trZXldID0gcmVzCisKKword2l0aCBjaGVja193YXJuaW5ncygoImNsYXNzaWMgKGludHxsb25nKSBkaXZpc2lvbiIsIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICAgICAgICAgIHF1aWV0PVRydWUpOgorICAgIHByb2Nlc3NfaW5maXhfcmVzdWx0cygpCisgICAgIyBub3cgaW5maXhfcmVzdWx0cyBoYXMgdHdvIGxpc3RzIG9mIHJlc3VsdHMgZm9yIGV2ZXJ5IHBhaXJpbmcuCisKK3ByZWZpeF9iaW5vcHMgPSBbICdkaXZtb2QnIF0KK3ByZWZpeF9yZXN1bHRzID0gWworICAgIFsoMSwwKSwgKDFMLDBMKSwgKDAuMCwyLjApLCAoKDErMGopLDBqKSwgVEUsIFRFLCBURSwgVEUsICgxLDApXSwKKyAgICBbKDFMLDBMKSwgKDFMLDBMKSwgKDAuMCwyLjApLCAoKDErMGopLDBqKSwgVEUsIFRFLCBURSwgVEUsICgxTCwwTCldLAorICAgIFsoMi4wLDAuMCksICgyLjAsMC4wKSwgKDEuMCwwLjApLCAoKDIrMGopLDBqKSwgVEUsIFRFLCBURSwgVEUsICgyLjAsMC4wKV0sCisgICAgWygoMSswaiksMGopLCAoKDErMGopLDBqKSwgKDBqLCgyKzBqKSksICgoMSswaiksMGopLCBURSwgVEUsIFRFLCBURSwgKCgxKzBqKSwwaildLAorICAgIFtURSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFXSwKKyAgICBbVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURV0sCisgICAgW1RFLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEVdLAorICAgIFtURSwgVEUsIFRFLCBURSwgVEUsIFRFLCBURSwgVEUsIFRFXSwKKyAgICBbKDEsMCksICgxTCwwTCksICgwLjAsMi4wKSwgKCgxKzBqKSwwaiksIFRFLCBURSwgVEUsIFRFLCAoMSwwKV0KK10KKworZGVmIGZvcm1hdF9mbG9hdCh2YWx1ZSk6CisgICAgaWYgYWJzKHZhbHVlKSA8IDAuMDE6CisgICAgICAgIHJldHVybiAnMC4wJworICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnJS4xZicgJSB2YWx1ZQorCisjIGF2b2lkIHRlc3RpbmcgcGxhdGZvcm0gZnAgcXVpcmtzCitkZWYgZm9ybWF0X3Jlc3VsdCh2YWx1ZSk6CisgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgY29tcGxleCk6CisgICAgICAgIHJldHVybiAnKCVzICsgJXNqKScgJSAoZm9ybWF0X2Zsb2F0KHZhbHVlLnJlYWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9mbG9hdCh2YWx1ZS5pbWFnKSkKKyAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKyAgICAgICAgcmV0dXJuIGZvcm1hdF9mbG9hdCh2YWx1ZSkKKyAgICByZXR1cm4gc3RyKHZhbHVlKQorCitjbGFzcyBDb2VyY2lvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2luZml4X2Jpbm9wcyhzZWxmKToKKyAgICAgICAgZm9yIGlhLCBhIGluIGVudW1lcmF0ZShjYW5kaWRhdGVzKToKKyAgICAgICAgICAgIGZvciBpYiwgYiBpbiBlbnVtZXJhdGUoY2FuZGlkYXRlcyk6CisgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGluZml4X3Jlc3VsdHNbKGlhLCBpYildCisgICAgICAgICAgICAgICAgZm9yIG9wLCByZXMsIGlyZXMgaW4gemlwKGluZml4X2Jpbm9wcywgcmVzdWx0c1swXSwgcmVzdWx0c1sxXSk6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlcyBpcyBURToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhICVzIGInICUgb3AsIHsnYSc6IGEsICdiJzogYn0pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdF9yZXN1bHQocmVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3Jlc3VsdChldmFsKCdhICVzIGInICUgb3ApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzICVzICVzID09ICVzIGZhaWxlZCcgJSAoYSwgb3AsIGIsIHJlcykpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHogPSBjb3B5LmNvcHkoYSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGNvcHkuRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICB6ID0gYSAjIGFzc3VtZSBpdCBoYXMgbm8gaW5wbGFjZSBvcHMKKyAgICAgICAgICAgICAgICAgICAgaWYgaXJlcyBpcyBURToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjICd6ICVzPSBiJyAlIG9wCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJUeXBlRXJyb3Igbm90IHJhaXNlZCIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBleGVjKCd6ICVzPSBiJyAlIG9wKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcmVzLCB6KQorCisgICAgZGVmIHRlc3RfcHJlZml4X2Jpbm9wcyhzZWxmKToKKyAgICAgICAgZm9yIGlhLCBhIGluIGVudW1lcmF0ZShjYW5kaWRhdGVzKToKKyAgICAgICAgICAgIGZvciBpYiwgYiBpbiBlbnVtZXJhdGUoY2FuZGlkYXRlcyk6CisgICAgICAgICAgICAgICAgZm9yIG9wIGluIHByZWZpeF9iaW5vcHM6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IHByZWZpeF9yZXN1bHRzW2lhXVtpYl0KKyAgICAgICAgICAgICAgICAgICAgaWYgcmVzIGlzIFRFOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzKGEsIGIpJyAlIG9wLCB7J2EnOiBhLCAnYic6IGJ9KQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXRfcmVzdWx0KHJlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9yZXN1bHQoZXZhbCgnJXMoYSwgYiknICUgb3ApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzKCVzLCAlcykgPT0gJXMgZmFpbGVkJyAlIChvcCwgYSwgYiwgcmVzKSkKKworICAgIGRlZiB0ZXN0X2NtcHR5cGVzKHNlbGYpOgorICAgICAgICAjIEJ1aWx0LWluIHRwX2NvbXBhcmUgc2xvdHMgZXhwZWN0IHRoZWlyIGFyZ3VtZW50cyB0byBoYXZlIHRoZQorICAgICAgICAjIHNhbWUgdHlwZSwgYnV0IGEgdXNlci1kZWZpbmVkIF9fY29lcmNlX18gZG9lc24ndCBoYXZlIHRvIG9iZXkuCisgICAgICAgICMgU0YgIzk4MDM1MgorICAgICAgICBldmlsX2NvZXJjZXIgPSBDb2VyY2VUbyg0MikKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlc2UgZG9uJ3QgY3Jhc2ggYW55IG1vcmUKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjbXAodSdmaXNoJywgZXZpbF9jb2VyY2VyKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjbXAoc2xpY2UoMSksIGV2aWxfY29lcmNlciksIDApCisgICAgICAgICMgLi4uYnV0IHRoYXQgdGhpcyBzdGlsbCB3b3JrcworICAgICAgICBjbGFzcyBXYWNreUNvbXBhcmVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19jbXBfXyhzbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3RoZXIgPT0gNDIsICdleHBlY3RlZCBldmlsX2NvZXJjZXIsIGdvdCAlcicgJSBvdGhlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgSW52YWxpZCBjbXAgbWFrZXMgdGhpcyB1bmhhc2hhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKFdhY2t5Q29tcGFyZXIoKSwgZXZpbF9jb2VyY2VyKSwgMCkKKyAgICAgICAgIyAuLi5hbmQgY2xhc3NpYyBjbGFzc2VzIHRvbywgc2luY2UgdGhhdCBjb2RlIHBhdGggaXMgYSBsaXR0bGUgZGlmZmVyZW50CisgICAgICAgIGNsYXNzIENsYXNzaWNXYWNreUNvbXBhcmVyOgorICAgICAgICAgICAgZGVmIF9fY21wX18oc2xmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG90aGVyID09IDQyLCAnZXhwZWN0ZWQgZXZpbF9jb2VyY2VyLCBnb3QgJXInICUgb3RoZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoQ2xhc3NpY1dhY2t5Q29tcGFyZXIoKSwgZXZpbF9jb2VyY2VyKSwgMCkKKworICAgIGRlZiB0ZXN0X2luZmluaXRlX3JlY19jbGFzc2ljX2NsYXNzZXMoc2VsZik6CisgICAgICAgICMgaWYgX19jb2VyY2VfXygpIHJldHVybnMgaXRzIGFyZ3VtZW50cyByZXZlcnNlZCBpdCBjYXVzZXMgYW4gaW5maW5pdGUKKyAgICAgICAgIyByZWN1cnNpb24gZm9yIGNsYXNzaWMgY2xhc3Nlcy4KKyAgICAgICAgY2xhc3MgVGVzdGVyOgorICAgICAgICAgICAgZGVmIF9fY29lcmNlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciwgc2VsZgorCisgICAgICAgIGV4YyA9IFRlc3RGYWlsZWQoIl9fY29lcmNlX18oKSByZXR1cm5pbmcgaXRzIGFyZ3VtZW50cyByZXZlcnNlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCByYWlzZSBSdW50aW1lRXJyb3IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBUZXN0ZXIoKSArIDEKKyAgICAgICAgZXhjZXB0IChSdW50aW1lRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmFpc2UgZXhjCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBleGMKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCJjb21wbGV4IGRpdm1vZC4uLCAvLyBhbmQgJSBhcmUgZGVwcmVjYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiY2xhc3NpYyAoaW50fGxvbmcpIGRpdmlzaW9uIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1aWV0PVRydWUpOgorICAgICAgICBydW5fdW5pdHRlc3QoQ29lcmNpb25UZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZGViM2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weQpAQCAtMCwwICsxLDEwNDIgQEAKKworaW1wb3J0IHVuaXR0ZXN0LCBkb2N0ZXN0LCBvcGVyYXRvcgoraW1wb3J0IGluc3BlY3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlLCBDb3VudGVyLCBPcmRlcmVkRGljdAorZnJvbSB0ZXN0IGltcG9ydCBtYXBwaW5nX3Rlc3RzCitpbXBvcnQgcGlja2xlLCBjUGlja2xlLCBjb3B5Citmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZHJhbmdlLCBzaHVmZmxlCitpbXBvcnQga2V5d29yZAoraW1wb3J0IHJlCitpbXBvcnQgc3lzCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBIYXNoYWJsZSwgSXRlcmFibGUsIEl0ZXJhdG9yCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBTaXplZCwgQ29udGFpbmVyLCBDYWxsYWJsZQorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgU2V0LCBNdXRhYmxlU2V0Citmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBNYXBwaW5nLCBNdXRhYmxlTWFwcGluZworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgU2VxdWVuY2UsIE11dGFibGVTZXF1ZW5jZQorCitUZXN0TlQgPSBuYW1lZHR1cGxlKCdUZXN0TlQnLCAneCB5IHonKSAgICAjIHR5cGUgdXNlZCBmb3IgcGlja2xlIHRlc3RzCisKK2NsYXNzIFRlc3ROYW1lZFR1cGxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2ZhY3Rvcnkoc2VsZik6CisgICAgICAgIFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAneCB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQb2ludC5fX25hbWVfXywgJ1BvaW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQb2ludC5fX3Nsb3RzX18sICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBvaW50Ll9fbW9kdWxlX18sIF9fbmFtZV9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBvaW50Ll9fZ2V0aXRlbV9fLCB0dXBsZS5fX2dldGl0ZW1fXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQb2ludC5fZmllbGRzLCAoJ3gnLCAneScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5hbWVkdHVwbGUsICdhYmMlJywgJ2VmZyBnaGknKSAgICAgICAjIHR5cGUgaGFzIG5vbi1hbHBoYSBjaGFyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5hbWVkdHVwbGUsICdjbGFzcycsICdlZmcgZ2hpJykgICAgICAjIHR5cGUgaGFzIGtleXdvcmQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmFtZWR0dXBsZSwgJzlhYmMnLCAnZWZnIGdoaScpICAgICAgICMgdHlwZSBzdGFydHMgd2l0aCBkaWdpdAorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5hbWVkdHVwbGUsICdhYmMnLCAnZWZnIGclaGknKSAgICAgICAjIGZpZWxkIHdpdGggbm9uLWFscGhhIGNoYXIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmFtZWR0dXBsZSwgJ2FiYycsICdhYmMgY2xhc3MnKSAgICAgICMgZmllbGQgaGFzIGtleXdvcmQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmFtZWR0dXBsZSwgJ2FiYycsICc4ZWZnIDlnaGknKSAgICAgICMgZmllbGQgc3RhcnRzIHdpdGggZGlnaXQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmFtZWR0dXBsZSwgJ2FiYycsICdfZWZnIGdoaScpICAgICAgICMgZmllbGQgd2l0aCBsZWFkaW5nIHVuZGVyc2NvcmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmFtZWR0dXBsZSwgJ2FiYycsICdlZmcgZWZnIGdoaScpICAgICMgZHVwbGljYXRlIGZpZWxkCisKKyAgICAgICAgbmFtZWR0dXBsZSgnUG9pbnQwJywgJ3gxIHkyJykgICAjIFZlcmlmeSB0aGF0IG51bWJlcnMgYXJlIGFsbG93ZWQgaW4gbmFtZXMKKyAgICAgICAgbmFtZWR0dXBsZSgnXycsICdhIGIgYycpICAgICAgICAjIFRlc3QgbGVhZGluZyB1bmRlcnNjb3JlcyBpbiBhIHR5cGVuYW1lCisKKyAgICAgICAgbnQgPSBuYW1lZHR1cGxlKCdudCcsIHUndGhlIHF1aWNrIGJyb3duIGZveCcpICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIHVuaWNvZGUgaW5wdXQKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigidSciLCByZXByKG50Ll9maWVsZHMpKQorICAgICAgICBudCA9IG5hbWVkdHVwbGUoJ250JywgKHUndGhlJywgdSdxdWljaycpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgdW5pY29kZSBpbnB1dAorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJ1JyIsIHJlcHIobnQuX2ZpZWxkcykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBQb2ludC5fbWFrZSwgWzExXSkgICAgICAgICAgICAgICAgICAgICAjIGNhdGNoIHRvbyBmZXcgYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFBvaW50Ll9tYWtlLCBbMTEsIDIyLCAzM10pICAgICAgICAgICAgICMgY2F0Y2ggdG9vIG1hbnkgYXJncworCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfZmFjdG9yeV9kb2NfYXR0cihzZWxmKToKKyAgICAgICAgUG9pbnQgPSBuYW1lZHR1cGxlKCdQb2ludCcsICd4IHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBvaW50Ll9fZG9jX18sICdQb2ludCh4LCB5KScpCisKKyAgICBkZWYgdGVzdF9uYW1lX2ZpeGVyKHNlbGYpOgorICAgICAgICBmb3Igc3BlYywgcmVuYW1lZCBpbiBbCisgICAgICAgICAgICBbKCdlZmcnLCAnZyVoaScpLCAgKCdlZmcnLCAnXzEnKV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWVsZCB3aXRoIG5vbi1hbHBoYSBjaGFyCisgICAgICAgICAgICBbKCdhYmMnLCAnY2xhc3MnKSwgKCdhYmMnLCAnXzEnKV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaWVsZCBoYXMga2V5d29yZAorICAgICAgICAgICAgWygnOGVmZycsICc5Z2hpJyksICgnXzAnLCAnXzEnKV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmllbGQgc3RhcnRzIHdpdGggZGlnaXQKKyAgICAgICAgICAgIFsoJ2FiYycsICdfZWZnJyksICgnYWJjJywgJ18xJyldLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpZWxkIHdpdGggbGVhZGluZyB1bmRlcnNjb3JlCisgICAgICAgICAgICBbKCdhYmMnLCAnZWZnJywgJ2VmZycsICdnaGknKSwgKCdhYmMnLCAnZWZnJywgJ18yJywgJ2doaScpXSwgICAgIyBkdXBsaWNhdGUgZmllbGQKKyAgICAgICAgICAgIFsoJ2FiYycsICcnLCAneCcpLCAoJ2FiYycsICdfMScsICd4JyldLCAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpZWxkbmFtZSBpcyBhIHNwYWNlCisgICAgICAgIF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVkdHVwbGUoJ05UJywgc3BlYywgcmVuYW1lPVRydWUpLl9maWVsZHMsIHJlbmFtZWQpCisKKyAgICBkZWYgdGVzdF9pbnN0YW5jZShzZWxmKToKKyAgICAgICAgUG9pbnQgPSBuYW1lZHR1cGxlKCdQb2ludCcsICd4IHknKQorICAgICAgICBwID0gUG9pbnQoMTEsIDIyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFBvaW50KHg9MTEsIHk9MjIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFBvaW50KDExLCB5PTIyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQb2ludCh5PTIyLCB4PTExKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQb2ludCgqKDExLCAyMikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFBvaW50KCoqZGljdCh4PTExLCB5PTIyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgUG9pbnQsIDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0b28gZmV3IGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBQb2ludCwgMSwgMiwgMykgICAgICAgICAgICAgICAgICAgICAgICAjIHRvbyBtYW55IGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAnUG9pbnQoWFhYPTEsIHk9MiknLCBsb2NhbHMoKSkgICAjIHdyb25nIGtleXdvcmQgYXJndW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAnUG9pbnQoeD0xKScsIGxvY2FscygpKSAgICAgICAgICAjIG1pc3Npbmcga2V5d29yZCBhcmd1bWVudAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocCksICdQb2ludCh4PTExLCB5PTIyKScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ19fZGljdF9fJywgZGlyKHApKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdmVyaWZ5IGluc3RhbmNlIGhhcyBubyBkaWN0CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ19fd2Vha3JlZl9fJywgZGlyKHApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFBvaW50Ll9tYWtlKFsxMSwgMjJdKSkgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGVzdCBfbWFrZSBjbGFzc21ldGhvZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuX2ZpZWxkcywgKCd4JywgJ3knKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGVzdCBfZmllbGRzIGF0dHJpYnV0ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuX3JlcGxhY2UoeD0xKSwgKDEsIDIyKSkgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGVzdCBfcmVwbGFjZSBtZXRob2QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLl9hc2RpY3QoKSwgZGljdCh4PTExLCB5PTIyKSkgICAgICAgICAgICAgICAgICAgICAjIHRlc3QgX2FzZGljdCBtZXRob2QKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwLl9yZXBsYWNlKHg9MSwgZXJyb3I9MikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9mYWlsKCdEaWQgbm90IGRldGVjdCBhbiBpbmNvcnJlY3QgZmllbGRuYW1lJykKKworICAgICAgICAjIHZlcmlmeSB0aGF0IGZpZWxkIHN0cmluZyBjYW4gaGF2ZSBjb21tYXMKKyAgICAgICAgUG9pbnQgPSBuYW1lZHR1cGxlKCdQb2ludCcsICd4LCB5JykKKyAgICAgICAgcCA9IFBvaW50KHg9MTEsIHk9MjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihwKSwgJ1BvaW50KHg9MTEsIHk9MjIpJykKKworICAgICAgICAjIHZlcmlmeSB0aGF0IGZpZWxkc3BlYyBjYW4gYmUgYSBub24tc3RyaW5nIHNlcXVlbmNlCisgICAgICAgIFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAoJ3gnLCAneScpKQorICAgICAgICBwID0gUG9pbnQoeD0xMSwgeT0yMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHApLCAnUG9pbnQoeD0xMSwgeT0yMiknKQorCisgICAgZGVmIHRlc3RfdHVwbGVuZXNzKHNlbGYpOgorICAgICAgICBQb2ludCA9IG5hbWVkdHVwbGUoJ1BvaW50JywgJ3ggeScpCisgICAgICAgIHAgPSBQb2ludCgxMSwgMjIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHAsIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsICgxMSwgMjIpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbWF0Y2hlcyBhIHJlYWwgdHVwbGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShwKSwgKDExLCAyMikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvZXJjYWJsZSB0byBhIHJlYWwgdHVwbGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHApLCBbMTEsIDIyXSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvZXJjYWJsZSB0byBhIGxpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgocCksIDIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KCpwKSwgMjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdGFyLWFibGUKKyAgICAgICAgeCwgeSA9IHAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCAoeCwgeSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVucGFja3MgbGlrZSBhIHR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHBbMF0sIHBbMV0pLCAoMTEsIDIyKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbmRleGFibGUgbGlrZSBhIHR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHAuX19nZXRpdGVtX18sIDMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLngsIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC55LCB5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZXZhbCwgJ3AueicsIGxvY2FscygpKQorCisgICAgZGVmIHRlc3Rfb2RkX3NpemVzKHNlbGYpOgorICAgICAgICBaZXJvID0gbmFtZWR0dXBsZSgnWmVybycsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFplcm8oKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWmVyby5fbWFrZShbXSksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoWmVybygpKSwgJ1plcm8oKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWmVybygpLl9hc2RpY3QoKSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWmVybygpLl9maWVsZHMsICgpKQorCisgICAgICAgIERvdCA9IG5hbWVkdHVwbGUoJ0RvdCcsICdkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEb3QoMSksICgxLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRG90Ll9tYWtlKFsxXSksICgxLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRG90KDEpLmQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihEb3QoMSkpLCAnRG90KGQ9MSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERvdCgxKS5fYXNkaWN0KCksIHsnZCc6MX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRG90KDEpLl9yZXBsYWNlKGQ9OTk5KSwgKDk5OSwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERvdCgxKS5fZmllbGRzLCAoJ2QnLCkpCisKKyAgICAgICAgbiA9IDUwMDAKKyAgICAgICAgaW1wb3J0IHN0cmluZywgcmFuZG9tCisgICAgICAgIG5hbWVzID0gbGlzdChzZXQoJycuam9pbihbcmFuZG9tLmNob2ljZShzdHJpbmcuYXNjaWlfbGV0dGVycykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaiBpbiByYW5nZSgxMCldKSBmb3IgaSBpbiByYW5nZShuKSkpCisgICAgICAgIG4gPSBsZW4obmFtZXMpCisgICAgICAgIEJpZyA9IG5hbWVkdHVwbGUoJ0JpZycsIG5hbWVzKQorICAgICAgICBiID0gQmlnKCpyYW5nZShuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCB0dXBsZShyYW5nZShuKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQmlnLl9tYWtlKHJhbmdlKG4pKSwgdHVwbGUocmFuZ2UobikpKQorICAgICAgICBmb3IgcG9zLCBuYW1lIGluIGVudW1lcmF0ZShuYW1lcyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIoYiwgbmFtZSksIHBvcykKKyAgICAgICAgcmVwcihiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbWFrZSBzdXJlIHJlcHIoKSBkb2Vzbid0IGJsb3ctdXAKKyAgICAgICAgZCA9IGIuX2FzZGljdCgpCisgICAgICAgIGRfZXhwZWN0ZWQgPSBkaWN0KHppcChuYW1lcywgcmFuZ2UobikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRfZXhwZWN0ZWQpCisgICAgICAgIGIyID0gYi5fcmVwbGFjZSgqKmRpY3QoWyhuYW1lc1sxXSwgOTk5KSwobmFtZXNbLTVdLCA0MildKSkKKyAgICAgICAgYjJfZXhwZWN0ZWQgPSByYW5nZShuKQorICAgICAgICBiMl9leHBlY3RlZFsxXSA9IDk5OQorICAgICAgICBiMl9leHBlY3RlZFstNV0gPSA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIyLCB0dXBsZShiMl9leHBlY3RlZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5fZmllbGRzLCB0dXBsZShuYW1lcykpCisKKyAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CisgICAgICAgIHAgPSBUZXN0TlQoeD0xMCwgeT0yMCwgej0zMCkKKyAgICAgICAgZm9yIG1vZHVsZSBpbiBwaWNrbGUsIGNQaWNrbGU6CisgICAgICAgICAgICBsb2FkcyA9IGdldGF0dHIobW9kdWxlLCAnbG9hZHMnKQorICAgICAgICAgICAgZHVtcHMgPSBnZXRhdHRyKG1vZHVsZSwgJ2R1bXBzJykKKyAgICAgICAgICAgIGZvciBwcm90b2NvbCBpbiAtMSwgMCwgMSwgMjoKKyAgICAgICAgICAgICAgICBxID0gbG9hZHMoZHVtcHMocCwgcHJvdG9jb2wpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgcSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuX2ZpZWxkcywgcS5fZmllbGRzKQorCisgICAgZGVmIHRlc3RfY29weShzZWxmKToKKyAgICAgICAgcCA9IFRlc3ROVCh4PTEwLCB5PTIwLCB6PTMwKQorICAgICAgICBmb3IgY29waWVyIGluIGNvcHkuY29weSwgY29weS5kZWVwY29weToKKyAgICAgICAgICAgIHEgPSBjb3BpZXIocCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgcSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5fZmllbGRzLCBxLl9maWVsZHMpCisKKyAgICBkZWYgdGVzdF9uYW1lX2NvbmZsaWN0cyhzZWxmKToKKyAgICAgICAgIyBTb21lIG5hbWVzIGxpa2UgInNlbGYiLCAiY2xzIiwgInR1cGxlIiwgIml0ZW1nZXR0ZXIiLCBhbmQgInByb3BlcnR5IgorICAgICAgICAjIGZhaWxlZCB3aGVuIHVzZWQgYXMgZmllbGQgbmFtZXMuICBUZXN0IHRvIG1ha2Ugc3VyZSB0aGVzZSBub3cgd29yay4KKyAgICAgICAgVCA9IG5hbWVkdHVwbGUoJ1QnLCAnaXRlbWdldHRlciBwcm9wZXJ0eSBzZWxmIGNscyB0dXBsZScpCisgICAgICAgIHQgPSBUKDEsIDIsIDMsIDQsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgKDEsMiwzLDQsNSkpCisgICAgICAgIG5ld3QgPSB0Ll9yZXBsYWNlKGl0ZW1nZXR0ZXI9MTAsIHByb3BlcnR5PTIwLCBzZWxmPTMwLCBjbHM9NDAsIHR1cGxlPTUwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld3QsICgxMCwyMCwzMCw0MCw1MCkpCisKKyAgICAgICAgIyBCcm9hZGVyIHRlc3Qgb2YgYWxsIGludGVyZXN0aW5nIG5hbWVzIGluIGEgdGVtcGxhdGUKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgdGVtcGxhdGU6CisgICAgICAgICAgICBUID0gbmFtZWR0dXBsZSgnVCcsICd4JywgdmVyYm9zZT1UcnVlKQorICAgICAgICB3b3JkcyA9IHNldChyZS5maW5kYWxsKCdbQS1aYS16XSsnLCB0ZW1wbGF0ZS5nZXR2YWx1ZSgpKSkKKyAgICAgICAgd29yZHMgLT0gc2V0KGtleXdvcmQua3dsaXN0KQorICAgICAgICBUID0gbmFtZWR0dXBsZSgnVCcsIHdvcmRzKQorICAgICAgICAjIHRlc3QgX19uZXdfXworICAgICAgICB2YWx1ZXMgPSB0dXBsZShyYW5nZShsZW4od29yZHMpKSkKKyAgICAgICAgdCA9IFQoKnZhbHVlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCB2YWx1ZXMpCisgICAgICAgIHQgPSBUKCoqZGljdCh6aXAoVC5fZmllbGRzLCB2YWx1ZXMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCB2YWx1ZXMpCisgICAgICAgICMgdGVzdCBfbWFrZQorICAgICAgICB0ID0gVC5fbWFrZSh2YWx1ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdmFsdWVzKQorICAgICAgICAjIGV4ZXJjaXNlIF9fcmVwcl9fCisgICAgICAgIHJlcHIodCkKKyAgICAgICAgIyB0ZXN0IF9hc2RpY3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Ll9hc2RpY3QoKSwgZGljdCh6aXAoVC5fZmllbGRzLCB2YWx1ZXMpKSkKKyAgICAgICAgIyB0ZXN0IF9yZXBsYWNlCisgICAgICAgIHQgPSBULl9tYWtlKHZhbHVlcykKKyAgICAgICAgbmV3dmFsdWVzID0gdHVwbGUodioxMCBmb3IgdiBpbiB2YWx1ZXMpCisgICAgICAgIG5ld3QgPSB0Ll9yZXBsYWNlKCoqZGljdCh6aXAoVC5fZmllbGRzLCBuZXd2YWx1ZXMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXd0LCBuZXd2YWx1ZXMpCisgICAgICAgICMgdGVzdCBfZmllbGRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVC5fZmllbGRzLCB0dXBsZSh3b3JkcykpCisgICAgICAgICMgdGVzdCBfX2dldG5ld2FyZ3NfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuX19nZXRuZXdhcmdzX18oKSwgdmFsdWVzKQorCitjbGFzcyBBQkNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhzZWxmLCBhYmMsICpuYW1lcyk6CisgICAgICAgIG1ldGhvZHN0dWJzID0gZGljdC5mcm9ta2V5cyhuYW1lcywgbGFtYmRhIHMsICphcmdzOiAwKQorCisgICAgICAgICMgZXZlcnl0aGluZyBzaG91bGQgd29yayB3aWxsIGFsbCByZXF1aXJlZCBtZXRob2RzIGFyZSBwcmVzZW50CisgICAgICAgIEMgPSB0eXBlKCdDJywgKGFiYywpLCBtZXRob2RzdHVicykKKyAgICAgICAgQygpCisKKyAgICAgICAgIyBpbnN0YW50aWF0aW9uIHNob3VsZCBmYWlsIGlmIGEgcmVxdWlyZWQgbWV0aG9kIGlzIG1pc3NpbmcKKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICBzdHVicyA9IG1ldGhvZHN0dWJzLmNvcHkoKQorICAgICAgICAgICAgZGVsIHN0dWJzW25hbWVdCisgICAgICAgICAgICBDID0gdHlwZSgnQycsIChhYmMsKSwgc3R1YnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEMsIG5hbWUpCisKKyAgICBkZWYgdmFsaWRhdGVfaXNpbnN0YW5jZShzZWxmLCBhYmMsIG5hbWUpOgorICAgICAgICBzdHViID0gbGFtYmRhIHMsICphcmdzOiAwCisKKyAgICAgICAgIyBuZXctc3R5bGUgY2xhc3MKKyAgICAgICAgQyA9IHR5cGUoJ0MnLCAob2JqZWN0LCksIHtuYW1lOiBzdHVifSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKEMoKSwgYWJjKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDLCBhYmMpKQorICAgICAgICAjIG9sZC1zdHlsZSBjbGFzcworICAgICAgICBjbGFzcyBDOiBwYXNzCisgICAgICAgIHNldGF0dHIoQywgbmFtZSwgc3R1YikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKEMoKSwgYWJjKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDLCBhYmMpKQorCisgICAgICAgICMgbmV3LXN0eWxlIGNsYXNzCisgICAgICAgIEMgPSB0eXBlKCdDJywgKG9iamVjdCwpLCB7J19faGFzaF9fJzogTm9uZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShDKCksIGFiYykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEMsIGFiYykpCisgICAgICAgICMgb2xkLXN0eWxlIGNsYXNzCisgICAgICAgIGNsYXNzIEM6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKEMoKSwgYWJjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQywgYWJjKSkKKworICAgIGRlZiB2YWxpZGF0ZV9jb21wYXJpc29uKHNlbGYsIGluc3RhbmNlKToKKyAgICAgICAgb3BzID0gWydsdCcsICdndCcsICdsZScsICdnZScsICduZScsICdvcicsICdhbmQnLCAneG9yJywgJ3N1YiddCisgICAgICAgIG9wZXJhdG9ycyA9IHt9CisgICAgICAgIGZvciBvcCBpbiBvcHM6CisgICAgICAgICAgICBuYW1lID0gJ19fJyArIG9wICsgJ19fJworICAgICAgICAgICAgb3BlcmF0b3JzW25hbWVdID0gZ2V0YXR0cihvcGVyYXRvciwgbmFtZSkKKworICAgICAgICBjbGFzcyBPdGhlcjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnJpZ2h0X3NpZGUgPSBGYWxzZQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgc2VsZi5yaWdodF9zaWRlID0gVHJ1ZQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBfX2x0X18gPSBfX2VxX18KKyAgICAgICAgICAgIF9fZ3RfXyA9IF9fZXFfXworICAgICAgICAgICAgX19sZV9fID0gX19lcV9fCisgICAgICAgICAgICBfX2dlX18gPSBfX2VxX18KKyAgICAgICAgICAgIF9fbmVfXyA9IF9fZXFfXworICAgICAgICAgICAgX19yb3JfXyA9IF9fZXFfXworICAgICAgICAgICAgX19yYW5kX18gPSBfX2VxX18KKyAgICAgICAgICAgIF9fcnhvcl9fID0gX19lcV9fCisgICAgICAgICAgICBfX3JzdWJfXyA9IF9fZXFfXworCisgICAgICAgIGZvciBuYW1lLCBvcCBpbiBvcGVyYXRvcnMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGluc3RhbmNlLCBuYW1lKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgb3RoZXIgPSBPdGhlcigpCisgICAgICAgICAgICBvcChpbnN0YW5jZSwgb3RoZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3RoZXIucmlnaHRfc2lkZSwnUmlnaHQgc2lkZSBub3QgY2FsbGVkIGZvciAlcy4lcycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICh0eXBlKGluc3RhbmNlKSwgbmFtZSkpCisKK2NsYXNzIFRlc3RPbmVUcmlja1BvbnlBQkNzKEFCQ1Rlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X0hhc2hhYmxlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHNvbWUgbm9uLWhhc2hhYmxlcworICAgICAgICBub25fc2FtcGxlcyA9IFtsaXN0KCksIHNldCgpLCBkaWN0KCldCisgICAgICAgIGZvciB4IGluIG5vbl9zYW1wbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIEhhc2hhYmxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHR5cGUoeCksIEhhc2hhYmxlKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgIyBDaGVjayBzb21lIGhhc2hhYmxlcworICAgICAgICBzYW1wbGVzID0gW05vbmUsCisgICAgICAgICAgICAgICAgICAgaW50KCksIGZsb2F0KCksIGNvbXBsZXgoKSwKKyAgICAgICAgICAgICAgICAgICBzdHIoKSwKKyAgICAgICAgICAgICAgICAgICB0dXBsZSgpLCBmcm96ZW5zZXQoKSwKKyAgICAgICAgICAgICAgICAgICBpbnQsIGxpc3QsIG9iamVjdCwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICBdCisgICAgICAgIGZvciB4IGluIHNhbXBsZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgSGFzaGFibGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh0eXBlKHgpLCBIYXNoYWJsZSksIHJlcHIodHlwZSh4KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgSGFzaGFibGUpCisgICAgICAgICMgQ2hlY2sgZGlyZWN0IHN1YmNsYXNzaW5nCisgICAgICAgIGNsYXNzIEgoSGFzaGFibGUpOgorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihILCBzZWxmKS5fX2hhc2hfXygpCisgICAgICAgICAgICBfX2VxX18gPSBIYXNoYWJsZS5fX2VxX18gIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goSCgpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKGludCwgSCkpCisgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhIYXNoYWJsZSwgJ19faGFzaF9fJykKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9pc2luc3RhbmNlKEhhc2hhYmxlLCAnX19oYXNoX18nKQorCisgICAgZGVmIHRlc3RfSXRlcmFibGUoc2VsZik6CisgICAgICAgICMgQ2hlY2sgc29tZSBub24taXRlcmFibGVzCisgICAgICAgIG5vbl9zYW1wbGVzID0gW05vbmUsIDQyLCAzLjE0LCAxal0KKyAgICAgICAgZm9yIHggaW4gbm9uX3NhbXBsZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoeCwgSXRlcmFibGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3ModHlwZSh4KSwgSXRlcmFibGUpLCByZXByKHR5cGUoeCkpKQorICAgICAgICAjIENoZWNrIHNvbWUgaXRlcmFibGVzCisgICAgICAgIHNhbXBsZXMgPSBbc3RyKCksCisgICAgICAgICAgICAgICAgICAgdHVwbGUoKSwgbGlzdCgpLCBzZXQoKSwgZnJvemVuc2V0KCksIGRpY3QoKSwKKyAgICAgICAgICAgICAgICAgICBkaWN0KCkua2V5cygpLCBkaWN0KCkuaXRlbXMoKSwgZGljdCgpLnZhbHVlcygpLAorICAgICAgICAgICAgICAgICAgIChsYW1iZGE6ICh5aWVsZCkpKCksCisgICAgICAgICAgICAgICAgICAgKHggZm9yIHggaW4gW10pLAorICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHggaW4gc2FtcGxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBJdGVyYWJsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHR5cGUoeCksIEl0ZXJhYmxlKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgIyBDaGVjayBkaXJlY3Qgc3ViY2xhc3NpbmcKKyAgICAgICAgY2xhc3MgSShJdGVyYWJsZSk6CisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKEksIHNlbGYpLl9faXRlcl9fKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KEkoKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3Moc3RyLCBJKSkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKEl0ZXJhYmxlLCAnX19pdGVyX18nKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2lzaW5zdGFuY2UoSXRlcmFibGUsICdfX2l0ZXJfXycpCisKKyAgICBkZWYgdGVzdF9JdGVyYXRvcihzZWxmKToKKyAgICAgICAgbm9uX3NhbXBsZXMgPSBbTm9uZSwgNDIsIDMuMTQsIDFqLCAiIi5lbmNvZGUoJ2FzY2lpJyksICIiLCAoKSwgW10sCisgICAgICAgICAgICB7fSwgc2V0KCldCisgICAgICAgIGZvciB4IGluIG5vbl9zYW1wbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIEl0ZXJhdG9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHR5cGUoeCksIEl0ZXJhdG9yKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgc2FtcGxlcyA9IFtpdGVyKHN0cigpKSwKKyAgICAgICAgICAgICAgICAgICBpdGVyKHR1cGxlKCkpLCBpdGVyKGxpc3QoKSksIGl0ZXIoZGljdCgpKSwKKyAgICAgICAgICAgICAgICAgICBpdGVyKHNldCgpKSwgaXRlcihmcm96ZW5zZXQoKSksCisgICAgICAgICAgICAgICAgICAgaXRlcihkaWN0KCkua2V5cygpKSwgaXRlcihkaWN0KCkuaXRlbXMoKSksCisgICAgICAgICAgICAgICAgICAgaXRlcihkaWN0KCkudmFsdWVzKCkpLAorICAgICAgICAgICAgICAgICAgIChsYW1iZGE6ICh5aWVsZCkpKCksCisgICAgICAgICAgICAgICAgICAgKHggZm9yIHggaW4gW10pLAorICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHggaW4gc2FtcGxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBJdGVyYXRvcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHR5cGUoeCksIEl0ZXJhdG9yKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKEl0ZXJhdG9yLCAnbmV4dCcsICdfX2l0ZXJfXycpCisKKyAgICAgICAgIyBJc3N1ZSAxMDU2NQorICAgICAgICBjbGFzcyBOZXh0T25seToKKyAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICB5aWVsZCAxCisgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoTmV4dE9ubHkoKSwgSXRlcmF0b3IpCisgICAgICAgIGNsYXNzIE5leHRPbmx5TmV3KG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKE5leHRPbmx5TmV3KCksIEl0ZXJhdG9yKQorCisgICAgZGVmIHRlc3RfU2l6ZWQoc2VsZik6CisgICAgICAgIG5vbl9zYW1wbGVzID0gW05vbmUsIDQyLCAzLjE0LCAxaiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYTogKHlpZWxkKSkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKHggZm9yIHggaW4gW10pLAorICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgIGZvciB4IGluIG5vbl9zYW1wbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIFNpemVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHR5cGUoeCksIFNpemVkKSwgcmVwcih0eXBlKHgpKSkKKyAgICAgICAgc2FtcGxlcyA9IFtzdHIoKSwKKyAgICAgICAgICAgICAgICAgICB0dXBsZSgpLCBsaXN0KCksIHNldCgpLCBmcm96ZW5zZXQoKSwgZGljdCgpLAorICAgICAgICAgICAgICAgICAgIGRpY3QoKS5rZXlzKCksIGRpY3QoKS5pdGVtcygpLCBkaWN0KCkudmFsdWVzKCksCisgICAgICAgICAgICAgICAgICAgXQorICAgICAgICBmb3IgeCBpbiBzYW1wbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIFNpemVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3ModHlwZSh4KSwgU2l6ZWQpLCByZXByKHR5cGUoeCkpKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoU2l6ZWQsICdfX2xlbl9fJykKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9pc2luc3RhbmNlKFNpemVkLCAnX19sZW5fXycpCisKKyAgICBkZWYgdGVzdF9Db250YWluZXIoc2VsZik6CisgICAgICAgIG5vbl9zYW1wbGVzID0gW05vbmUsIDQyLCAzLjE0LCAxaiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYTogKHlpZWxkKSkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKHggZm9yIHggaW4gW10pLAorICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgIGZvciB4IGluIG5vbl9zYW1wbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIENvbnRhaW5lcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyh0eXBlKHgpLCBDb250YWluZXIpLCByZXByKHR5cGUoeCkpKQorICAgICAgICBzYW1wbGVzID0gW3N0cigpLAorICAgICAgICAgICAgICAgICAgIHR1cGxlKCksIGxpc3QoKSwgc2V0KCksIGZyb3plbnNldCgpLCBkaWN0KCksCisgICAgICAgICAgICAgICAgICAgZGljdCgpLmtleXMoKSwgZGljdCgpLml0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgXQorICAgICAgICBmb3IgeCBpbiBzYW1wbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIENvbnRhaW5lcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHR5cGUoeCksIENvbnRhaW5lciksIHJlcHIodHlwZSh4KSkpCisgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhDb250YWluZXIsICdfX2NvbnRhaW5zX18nKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2lzaW5zdGFuY2UoQ29udGFpbmVyLCAnX19jb250YWluc19fJykKKworICAgIGRlZiB0ZXN0X0NhbGxhYmxlKHNlbGYpOgorICAgICAgICBub25fc2FtcGxlcyA9IFtOb25lLCA0MiwgMy4xNCwgMWosCisgICAgICAgICAgICAgICAgICAgICAgICIiLCAiIi5lbmNvZGUoJ2FzY2lpJyksICgpLCBbXSwge30sIHNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhOiAoeWllbGQpKSgpLAorICAgICAgICAgICAgICAgICAgICAgICAoeCBmb3IgeCBpbiBbXSksCisgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHggaW4gbm9uX3NhbXBsZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoeCwgQ2FsbGFibGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3ModHlwZSh4KSwgQ2FsbGFibGUpLCByZXByKHR5cGUoeCkpKQorICAgICAgICBzYW1wbGVzID0gW2xhbWJkYTogTm9uZSwKKyAgICAgICAgICAgICAgICAgICB0eXBlLCBpbnQsIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICBsZW4sCisgICAgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQsIFtdLmFwcGVuZCwKKyAgICAgICAgICAgICAgICAgICBdCisgICAgICAgIGZvciB4IGluIHNhbXBsZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgQ2FsbGFibGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh0eXBlKHgpLCBDYWxsYWJsZSksIHJlcHIodHlwZSh4KSkpCisgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhDYWxsYWJsZSwgJ19fY2FsbF9fJykKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9pc2luc3RhbmNlKENhbGxhYmxlLCAnX19jYWxsX18nKQorCisgICAgZGVmIHRlc3RfZGlyZWN0X3N1YmNsYXNzaW5nKHNlbGYpOgorICAgICAgICBmb3IgQiBpbiBIYXNoYWJsZSwgSXRlcmFibGUsIEl0ZXJhdG9yLCBTaXplZCwgQ29udGFpbmVyLCBDYWxsYWJsZToKKyAgICAgICAgICAgIGNsYXNzIEMoQik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQywgQikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoaW50LCBDKSkKKworICAgIGRlZiB0ZXN0X3JlZ2lzdHJhdGlvbihzZWxmKToKKyAgICAgICAgZm9yIEIgaW4gSGFzaGFibGUsIEl0ZXJhYmxlLCBJdGVyYXRvciwgU2l6ZWQsIENvbnRhaW5lciwgQ2FsbGFibGU6CisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSB0eXBlCisgICAgICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICAjIE1ha2Ugc3VyZSBpdCBpc24ndCBoYXNoYWJsZSBieSBkZWZhdWx0CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQywgQiksIEIuX19uYW1lX18pCisgICAgICAgICAgICBCLnJlZ2lzdGVyKEMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDLCBCKSkKKworY2xhc3MgV2l0aFNldChNdXRhYmxlU2V0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdD0oKSk6CisgICAgICAgIHNlbGYuZGF0YSA9IHNldChpdCkKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuZGF0YSkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5kYXRhKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKKyAgICAgICAgcmV0dXJuIGl0ZW0gaW4gc2VsZi5kYXRhCisKKyAgICBkZWYgYWRkKHNlbGYsIGl0ZW0pOgorICAgICAgICBzZWxmLmRhdGEuYWRkKGl0ZW0pCisKKyAgICBkZWYgZGlzY2FyZChzZWxmLCBpdGVtKToKKyAgICAgICAgc2VsZi5kYXRhLmRpc2NhcmQoaXRlbSkKKworY2xhc3MgVGVzdENvbGxlY3Rpb25BQkNzKEFCQ1Rlc3RDYXNlKToKKworICAgICMgWFhYIEZvciBub3csIHdlIG9ubHkgdGVzdCBzb21lIHZpcnR1YWwgaW5oZXJpdGFuY2UgcHJvcGVydGllcy4KKyAgICAjIFdlIHNob3VsZCBhbHNvIHRlc3QgdGhlIHByb3BlciBiZWhhdmlvciBvZiB0aGUgY29sbGVjdGlvbiBBQkNzCisgICAgIyBhcyByZWFsIGJhc2UgY2xhc3NlcyBvciBtaXgtaW4gY2xhc3Nlcy4KKworICAgIGRlZiB0ZXN0X1NldChzZWxmKToKKyAgICAgICAgZm9yIHNhbXBsZSBpbiBbc2V0LCBmcm96ZW5zZXRdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNhbXBsZSgpLCBTZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzYW1wbGUsIFNldCkpCisgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhTZXQsICdfX2NvbnRhaW5zX18nLCAnX19pdGVyX18nLCAnX19sZW5fXycpCisgICAgICAgIGNsYXNzIE15U2V0KFNldCk6CisgICAgICAgICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRlcihbXSkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9jb21wYXJpc29uKE15U2V0KCkpCisKKyAgICBkZWYgdGVzdF9oYXNoX1NldChzZWxmKToKKyAgICAgICAgY2xhc3MgT25lVHdvVGhyZWVTZXQoU2V0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRlbnRzID0gWzEsIDIsIDNdCisgICAgICAgICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHJldHVybiB4IGluIHNlbGYuY29udGVudHMKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBsZW4oc2VsZi5jb250ZW50cykKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRlcihzZWxmLmNvbnRlbnRzKQorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9oYXNoKCkKKyAgICAgICAgYSwgYiA9IE9uZVR3b1RocmVlU2V0KCksIE9uZVR3b1RocmVlU2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2goYSkgPT0gaGFzaChiKSkKKworICAgIGRlZiB0ZXN0X011dGFibGVTZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZXQoKSwgTXV0YWJsZVNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2V0LCBNdXRhYmxlU2V0KSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGZyb3plbnNldCgpLCBNdXRhYmxlU2V0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoZnJvemVuc2V0LCBNdXRhYmxlU2V0KSkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKE11dGFibGVTZXQsICdfX2NvbnRhaW5zX18nLCAnX19pdGVyX18nLCAnX19sZW5fXycsCisgICAgICAgICAgICAnYWRkJywgJ2Rpc2NhcmQnKQorCisgICAgZGVmIHRlc3RfaXNzdWVfNTY0NyhzZWxmKToKKyAgICAgICAgIyBNdXRhYmxlU2V0Ll9faWFuZF9fIG11dGF0ZWQgdGhlIHNldCBkdXJpbmcgaXRlcmF0aW9uCisgICAgICAgIHMgPSBXaXRoU2V0KCdhYmNkJykKKyAgICAgICAgcyAmPSBXaXRoU2V0KCdjZGVmJykgICAgICAgICAgICAjIFRoaXMgdXNlZCB0byBmYWlsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHMpLCBzZXQoJ2NkJykpCisKKyAgICBkZWYgdGVzdF9pc3N1ZV80OTIwKHNlbGYpOgorICAgICAgICAjIE11dGFibGVTZXQucG9wKCkgbWV0aG9kIGRpZCBub3Qgd29yaworICAgICAgICBjbGFzcyBNeVNldChjb2xsZWN0aW9ucy5NdXRhYmxlU2V0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXz1bJ19fcyddCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZixpdGVtcz1Ob25lKToKKyAgICAgICAgICAgICAgICBpZiBpdGVtcyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBpdGVtcz1bXQorICAgICAgICAgICAgICAgIHNlbGYuX19zPXNldChpdGVtcykKKyAgICAgICAgICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZix2KToKKyAgICAgICAgICAgICAgICByZXR1cm4gdiBpbiBzZWxmLl9fcworICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBpdGVyKHNlbGYuX19zKQorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9fcykKKyAgICAgICAgICAgIGRlZiBhZGQoc2VsZix2KToKKyAgICAgICAgICAgICAgICByZXN1bHQ9diBub3QgaW4gc2VsZi5fX3MKKyAgICAgICAgICAgICAgICBzZWxmLl9fcy5hZGQodikKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgICAgICBkZWYgZGlzY2FyZChzZWxmLHYpOgorICAgICAgICAgICAgICAgIHJlc3VsdD12IGluIHNlbGYuX19zCisgICAgICAgICAgICAgICAgc2VsZi5fX3MuZGlzY2FyZCh2KQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIk15U2V0KCVzKSIgJSByZXByKGxpc3Qoc2VsZikpCisgICAgICAgIHMgPSBNeVNldChbNSw0MywyLDFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucG9wKCksIDEpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTg3NTAoc2VsZik6CisgICAgICAgIGVtcHR5ID0gV2l0aFNldCgpCisgICAgICAgIGZ1bGwgPSBXaXRoU2V0KHJhbmdlKDEwKSkKKyAgICAgICAgcyA9IFdpdGhTZXQoZnVsbCkKKyAgICAgICAgcyAtPSBzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgZW1wdHkpCisgICAgICAgIHMgPSBXaXRoU2V0KGZ1bGwpCisgICAgICAgIHMgXj0gcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIGVtcHR5KQorICAgICAgICBzID0gV2l0aFNldChmdWxsKQorICAgICAgICBzICY9IHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBmdWxsKQorICAgICAgICBzIHw9IHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBmdWxsKQorCisgICAgZGVmIHRlc3RfTWFwcGluZyhzZWxmKToKKyAgICAgICAgZm9yIHNhbXBsZSBpbiBbZGljdF06CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2FtcGxlKCksIE1hcHBpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzYW1wbGUsIE1hcHBpbmcpKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoTWFwcGluZywgJ19fY29udGFpbnNfXycsICdfX2l0ZXJfXycsICdfX2xlbl9fJywKKyAgICAgICAgICAgICdfX2dldGl0ZW1fXycpCisgICAgICAgIGNsYXNzIE15TWFwcGluZyhjb2xsZWN0aW9ucy5NYXBwaW5nKToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBpdGVyKCgpKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2NvbXBhcmlzb24oTXlNYXBwaW5nKCkpCisKKyAgICBkZWYgdGVzdF9NdXRhYmxlTWFwcGluZyhzZWxmKToKKyAgICAgICAgZm9yIHNhbXBsZSBpbiBbZGljdF06CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2FtcGxlKCksIE11dGFibGVNYXBwaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2FtcGxlLCBNdXRhYmxlTWFwcGluZykpCisgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhNdXRhYmxlTWFwcGluZywgJ19fY29udGFpbnNfXycsICdfX2l0ZXJfXycsICdfX2xlbl9fJywKKyAgICAgICAgICAgICdfX2dldGl0ZW1fXycsICdfX3NldGl0ZW1fXycsICdfX2RlbGl0ZW1fXycpCisKKyAgICBkZWYgdGVzdF9TZXF1ZW5jZShzZWxmKToKKyAgICAgICAgZm9yIHNhbXBsZSBpbiBbdHVwbGUsIGxpc3QsIHN0cl06CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2FtcGxlKCksIFNlcXVlbmNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2FtcGxlLCBTZXF1ZW5jZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGJhc2VzdHJpbmcsIFNlcXVlbmNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJhbmdlKDEwKSwgU2VxdWVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHhyYW5nZSwgU2VxdWVuY2UpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzdHIsIFNlcXVlbmNlKSkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKFNlcXVlbmNlLCAnX19jb250YWluc19fJywgJ19faXRlcl9fJywgJ19fbGVuX18nLAorICAgICAgICAgICAgJ19fZ2V0aXRlbV9fJykKKworICAgIGRlZiB0ZXN0X011dGFibGVTZXF1ZW5jZShzZWxmKToKKyAgICAgICAgZm9yIHNhbXBsZSBpbiBbdHVwbGUsIHN0cl06CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uoc2FtcGxlKCksIE11dGFibGVTZXF1ZW5jZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhzYW1wbGUsIE11dGFibGVTZXF1ZW5jZSkpCisgICAgICAgIGZvciBzYW1wbGUgaW4gW2xpc3RdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNhbXBsZSgpLCBNdXRhYmxlU2VxdWVuY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzYW1wbGUsIE11dGFibGVTZXF1ZW5jZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhiYXNlc3RyaW5nLCBNdXRhYmxlU2VxdWVuY2UpKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoTXV0YWJsZVNlcXVlbmNlLCAnX19jb250YWluc19fJywgJ19faXRlcl9fJywKKyAgICAgICAgICAgICdfX2xlbl9fJywgJ19fZ2V0aXRlbV9fJywgJ19fc2V0aXRlbV9fJywgJ19fZGVsaXRlbV9fJywgJ2luc2VydCcpCisKK2NsYXNzIFRlc3RDb3VudGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgYyA9IENvdW50ZXIoJ2FiY2FiYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgQ291bnRlcih7J2EnOjMgLCAnYic6IDIsICdjJzogMX0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIENvdW50ZXIoYT0zLCBiPTIsIGM9MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjLCBkaWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYywgTWFwcGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQ291bnRlciwgZGljdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKENvdW50ZXIsIE1hcHBpbmcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oYy52YWx1ZXMoKSksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGMudmFsdWVzKCkpLCBbMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGMua2V5cygpKSwgWydhJywgJ2InLCAnYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChjKSwgWydhJywgJ2InLCAnYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChjLml0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2EnLCAzKSwgKCdiJywgMiksICgnYycsIDEpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjWydiJ10sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1sneiddLCAwKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuaGFzX2tleSgnYycpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmhhc19rZXkoJ3onKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5fX2NvbnRhaW5zX18oJ2MnKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLl9fY29udGFpbnNfXygneicpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmdldCgnYicsIDEwKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmdldCgneicsIDEwKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgZGljdChhPTMsIGI9MiwgYz0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAiQ291bnRlcih7J2EnOiAzLCAnYic6IDIsICdjJzogMX0pIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1vc3RfY29tbW9uKCksIFsoJ2EnLCAzKSwgKCdiJywgMiksICgnYycsIDEpXSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubW9zdF9jb21tb24oaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2EnLCAzKSwgKCdiJywgMiksICgnYycsIDEpXVs6aV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihzb3J0ZWQoYy5lbGVtZW50cygpKSksICdhYWFiYmMnKQorICAgICAgICBjWydhJ10gKz0gMSAgICAgICAgICMgaW5jcmVtZW50IGFuIGV4aXN0aW5nIHZhbHVlCisgICAgICAgIGNbJ2InXSAtPSAyICAgICAgICAgIyBzdWIgZXhpc3RpbmcgdmFsdWUgdG8gemVybworICAgICAgICBkZWwgY1snYyddICAgICAgICAgICMgcmVtb3ZlIGFuIGVudHJ5CisgICAgICAgIGRlbCBjWydjJ10gICAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCBkZWwgZG9lc24ndCByYWlzZSBLZXlFcnJvcgorICAgICAgICBjWydkJ10gLT0gMiAgICAgICAgICMgc3ViIGZyb20gYSBtaXNzaW5nIHZhbHVlCisgICAgICAgIGNbJ2UnXSA9IC01ICAgICAgICAgIyBkaXJlY3RseSBhc3NpZ24gYSBtaXNzaW5nIHZhbHVlCisgICAgICAgIGNbJ2YnXSArPSA0ICAgICAgICAgIyBhZGQgdG8gYSBtaXNzaW5nIHZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgZGljdChhPTQsIGI9MCwgZD0tMiwgZT0tNSwgZj00KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJy5qb2luKHNvcnRlZChjLmVsZW1lbnRzKCkpKSwgJ2FhYWFmZmZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnBvcCgnZicpLCA0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdmJywgYykKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICBlbGVtLCBjbnQgPSBjLnBvcGl0ZW0oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBjKQorICAgICAgICBjLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnQ291bnRlcigpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgQ291bnRlci5mcm9ta2V5cywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgYykKKyAgICAgICAgYy51cGRhdGUoZGljdChhPTUsIGI9MykpCisgICAgICAgIGMudXBkYXRlKGM9MSkKKyAgICAgICAgYy51cGRhdGUoQ291bnRlcignYScgKiA1MCArICdiJyAqIDMwKSkKKyAgICAgICAgYy51cGRhdGUoKSAgICAgICAgICAjIHRlc3QgY2FzZSB3aXRoIG5vIGFyZ3MKKyAgICAgICAgYy5fX2luaXRfXygnYScgKiA1MDAgKyAnYicgKiAzMDApCisgICAgICAgIGMuX19pbml0X18oJ2NkYycpCisgICAgICAgIGMuX19pbml0X18oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGRpY3QoYT01NTUsIGI9MzMzLCBjPTMsIGQ9MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zZXRkZWZhdWx0KCdkJywgNSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1snZCddLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2V0ZGVmYXVsdCgnZScsIDUpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNbJ2UnXSwgNSkKKworICAgIGRlZiB0ZXN0X2NvcHlpbmcoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBjb3VudGVycyBhcmUgY29weWFibGUsIGRlZXBjb3B5YWJsZSwgcGlja2xhYmxlLCBhbmQKKyAgICAgICAgI2hhdmUgYSByZXByL2V2YWwgcm91bmQtdHJpcAorICAgICAgICB3b3JkcyA9IENvdW50ZXIoJ3doaWNoIHdpdGNoIGhhZCB3aGljaCB3aXRjaGVzIHdyaXN0IHdhdGNoJy5zcGxpdCgpKQorICAgICAgICB1cGRhdGVfdGVzdCA9IENvdW50ZXIoKQorICAgICAgICB1cGRhdGVfdGVzdC51cGRhdGUod29yZHMpCisgICAgICAgIGZvciBpLCBkdXAgaW4gZW51bWVyYXRlKFsKKyAgICAgICAgICAgICAgICAgICAgd29yZHMuY29weSgpLAorICAgICAgICAgICAgICAgICAgICBjb3B5LmNvcHkod29yZHMpLAorICAgICAgICAgICAgICAgICAgICBjb3B5LmRlZXBjb3B5KHdvcmRzKSwKKyAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMCkpLAorICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAxKSksCisgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgLTEpKSwKKyAgICAgICAgICAgICAgICAgICAgY1BpY2tsZS5sb2FkcyhjUGlja2xlLmR1bXBzKHdvcmRzLCAwKSksCisgICAgICAgICAgICAgICAgICAgIGNQaWNrbGUubG9hZHMoY1BpY2tsZS5kdW1wcyh3b3JkcywgMSkpLAorICAgICAgICAgICAgICAgICAgICBjUGlja2xlLmxvYWRzKGNQaWNrbGUuZHVtcHMod29yZHMsIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgY1BpY2tsZS5sb2FkcyhjUGlja2xlLmR1bXBzKHdvcmRzLCAtMSkpLAorICAgICAgICAgICAgICAgICAgICBldmFsKHJlcHIod29yZHMpKSwKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3Rlc3QsCisgICAgICAgICAgICAgICAgICAgIENvdW50ZXIod29yZHMpLAorICAgICAgICAgICAgICAgICAgICBdKToKKyAgICAgICAgICAgIG1zZyA9IChpLCBkdXAsIHdvcmRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR1cCBpcyBub3Qgd29yZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1cCwgd29yZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkdXApLCBsZW4od29yZHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGR1cCksIHR5cGUod29yZHMpKQorCisgICAgZGVmIHRlc3RfY29weV9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgTXlDb3VudGVyKENvdW50ZXIpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjID0gTXlDb3VudGVyKCdzbGFydGliYXJ0ZmFzdCcpCisgICAgICAgIGQgPSBjLmNvcHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCBsZW4oYykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkKSwgdHlwZShjKSkKKworICAgIGRlZiB0ZXN0X2NvbnZlcnNpb25zKHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgdG86IHNldCwgbGlzdCwgZGljdAorICAgICAgICBzID0gJ3NoZSBzZWxscyBzZWEgc2hlbGxzIGJ5IHRoZSBzZWEgc2hvcmUnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKENvdW50ZXIocykuZWxlbWVudHMoKSksIHNvcnRlZChzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoQ291bnRlcihzKSksIHNvcnRlZChzZXQocykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoQ291bnRlcihzKSksIGRpY3QoQ291bnRlcihzKS5pdGVtcygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoQ291bnRlcihzKSksIHNldChzKSkKKworICAgIGRlZiB0ZXN0X2ludmFyaWFudF9mb3JfdGhlX2luX29wZXJhdG9yKHNlbGYpOgorICAgICAgICBjID0gQ291bnRlcihhPTEwLCBiPS0yLCBjPTApCisgICAgICAgIGZvciBlbGVtIGluIGM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbSBpbiBjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBjKQorCisgICAgZGVmIHRlc3RfbXVsdGlzZXRfb3BlcmF0aW9ucyhzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBhZGRpbmcgYSB6ZXJvIGNvdW50ZXIgd2lsbCBzdHJpcCB6ZXJvcyBhbmQgbmVnYXRpdmVzCisgICAgICAgIGMgPSBDb3VudGVyKGE9MTAsIGI9LTIsIGM9MCkgKyBDb3VudGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KGMpLCBkaWN0KGE9MTApKQorCisgICAgICAgIGVsZW1lbnRzID0gJ2FiY2QnCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMDApOgorICAgICAgICAgICAgIyB0ZXN0IHJhbmRvbSBwYWlycyBvZiBtdWx0aXNldHMKKyAgICAgICAgICAgIHAgPSBDb3VudGVyKGRpY3QoKGVsZW0sIHJhbmRyYW5nZSgtMiw0KSkgZm9yIGVsZW0gaW4gZWxlbWVudHMpKQorICAgICAgICAgICAgcC51cGRhdGUoZT0xLCBmPS0xLCBnPTApCisgICAgICAgICAgICBxID0gQ291bnRlcihkaWN0KChlbGVtLCByYW5kcmFuZ2UoLTIsNCkpIGZvciBlbGVtIGluIGVsZW1lbnRzKSkKKyAgICAgICAgICAgIHEudXBkYXRlKGg9MSwgaT0tMSwgaj0wKQorICAgICAgICAgICAgZm9yIGNvdW50ZXJvcCwgbnVtYmVyb3AgaW4gWworICAgICAgICAgICAgICAgIChDb3VudGVyLl9fYWRkX18sIGxhbWJkYSB4LCB5OiBtYXgoMCwgeCt5KSksCisgICAgICAgICAgICAgICAgKENvdW50ZXIuX19zdWJfXywgbGFtYmRhIHgsIHk6IG1heCgwLCB4LXkpKSwKKyAgICAgICAgICAgICAgICAoQ291bnRlci5fX29yX18sIGxhbWJkYSB4LCB5OiBtYXgoMCx4LHkpKSwKKyAgICAgICAgICAgICAgICAoQ291bnRlci5fX2FuZF9fLCBsYW1iZGEgeCwgeTogbWF4KDAsIG1pbih4LHkpKSksCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvdW50ZXJvcChwLCBxKQorICAgICAgICAgICAgICAgIGZvciB4IGluIGVsZW1lbnRzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bWJlcm9wKHBbeF0sIHFbeF0pLCByZXN1bHRbeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvdW50ZXJvcCwgeCwgcCwgcSkpCisgICAgICAgICAgICAgICAgIyB2ZXJpZnkgdGhhdCByZXN1bHRzIGV4Y2x1ZGUgbm9uLXBvc2l0aXZlIGNvdW50cworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4PjAgZm9yIHggaW4gcmVzdWx0LnZhbHVlcygpKQorCisgICAgICAgIGVsZW1lbnRzID0gJ2FiY2RlZicKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgICMgdmVyaWZ5IHRoYXQgcmFuZG9tIG11bHRpc2V0cyB3aXRoIG5vIHJlcGVhdHMgYXJlIGV4YWN0bHkgbGlrZSBzZXRzCisgICAgICAgICAgICBwID0gQ291bnRlcihkaWN0KChlbGVtLCByYW5kcmFuZ2UoMCwgMikpIGZvciBlbGVtIGluIGVsZW1lbnRzKSkKKyAgICAgICAgICAgIHEgPSBDb3VudGVyKGRpY3QoKGVsZW0sIHJhbmRyYW5nZSgwLCAyKSkgZm9yIGVsZW0gaW4gZWxlbWVudHMpKQorICAgICAgICAgICAgZm9yIGNvdW50ZXJvcCwgc2V0b3AgaW4gWworICAgICAgICAgICAgICAgIChDb3VudGVyLl9fc3ViX18sIHNldC5fX3N1Yl9fKSwKKyAgICAgICAgICAgICAgICAoQ291bnRlci5fX29yX18sIHNldC5fX29yX18pLAorICAgICAgICAgICAgICAgIChDb3VudGVyLl9fYW5kX18sIHNldC5fX2FuZF9fKSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICAgICAgY291bnRlcl9yZXN1bHQgPSBjb3VudGVyb3AocCwgcSkKKyAgICAgICAgICAgICAgICBzZXRfcmVzdWx0ID0gc2V0b3Aoc2V0KHAuZWxlbWVudHMoKSksIHNldChxLmVsZW1lbnRzKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRlcl9yZXN1bHQsIGRpY3QuZnJvbWtleXMoc2V0X3Jlc3VsdCwgMSkpCisKKyAgICBkZWYgdGVzdF9zdWJ0cmFjdChzZWxmKToKKyAgICAgICAgYyA9IENvdW50ZXIoYT0tNSwgYj0wLCBjPTUsIGQ9MTAsIGU9MTUsZz00MCkKKyAgICAgICAgYy5zdWJ0cmFjdChhPTEsIGI9MiwgYz0tMywgZD0xMCwgZT0yMCwgZj0zMCwgaD0tNTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgQ291bnRlcihhPS02LCBiPS0yLCBjPTgsIGQ9MCwgZT0tNSwgZj0tMzAsIGc9NDAsIGg9NTApKQorICAgICAgICBjID0gQ291bnRlcihhPS01LCBiPTAsIGM9NSwgZD0xMCwgZT0xNSxnPTQwKQorICAgICAgICBjLnN1YnRyYWN0KENvdW50ZXIoYT0xLCBiPTIsIGM9LTMsIGQ9MTAsIGU9MjAsIGY9MzAsIGg9LTUwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBDb3VudGVyKGE9LTYsIGI9LTIsIGM9OCwgZD0wLCBlPS01LCBmPS0zMCwgZz00MCwgaD01MCkpCisgICAgICAgIGMgPSBDb3VudGVyKCdhYWFiYmNkJykKKyAgICAgICAgYy5zdWJ0cmFjdCgnYWFhYWJiY2NlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBDb3VudGVyKGE9LTEsIGI9MCwgYz0tMSwgZD0xLCBlPS0xKSkKKworY2xhc3MgVGVzdE9yZGVyZWREaWN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIE9yZGVyZWREaWN0KFsoJ2EnLCAxKSwgKCdiJywgMildLCBOb25lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgYXJncworICAgICAgICBwYWlycyA9IFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKE9yZGVyZWREaWN0KGRpY3QocGFpcnMpKS5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAjIGRpY3QgaW5wdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoT3JkZXJlZERpY3QoKipkaWN0KHBhaXJzKSkuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICMga3dkcyBpbnB1dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoT3JkZXJlZERpY3QocGFpcnMpLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICAgICAgICAgIyBwYWlycyBpbnB1dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoT3JkZXJlZERpY3QoWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgOSksICgnZCcsIDQpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM9MywgZT01KS5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICMgbWl4ZWQgaW5wdXQKKworICAgICAgICAjIG1ha2Ugc3VyZSBubyBwb3NpdGlvbmFsIGFyZ3MgY29uZmxpY3Qgd2l0aCBwb3NzaWJsZSBrd2RhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhcmdzcGVjKE9yZGVyZWREaWN0Ll9fZGljdF9fWydfX2luaXRfXyddKS5hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnc2VsZiddKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgZGlyZWN0IGNhbGxzIHRvIF9faW5pdF9fIGRvIG5vdCBjbGVhciBwcmV2aW91cyBjb250ZW50cworICAgICAgICBkID0gT3JkZXJlZERpY3QoWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnZCcsIDQ0KSwgKCdlJywgNTUpXSkKKyAgICAgICAgZC5fX2luaXRfXyhbKCdlJywgNSksICgnZicsIDYpXSwgZz03LCBkPTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkLml0ZW1zKCkpLAorICAgICAgICAgICAgWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNiksICgnZycsIDcpXSkKKworICAgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgT3JkZXJlZERpY3QoKS51cGRhdGUoWygnYScsIDEpLCAoJ2InLCAyKV0sIE5vbmUpICAgICAgICAgICAgICAgICAgICAgICAgIyB0b28gbWFueSBhcmdzCisgICAgICAgIHBhaXJzID0gWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KV0KKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kLnVwZGF0ZShkaWN0KHBhaXJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQob2QuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGljdCBpbnB1dAorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2QudXBkYXRlKCoqZGljdChwYWlycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKG9kLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGt3ZHMgaW5wdXQKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kLnVwZGF0ZShwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGFpcnMgaW5wdXQKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kLnVwZGF0ZShbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCA5KSwgKCdkJywgNCldLCBjPTMsIGU9NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbWl4ZWQgaW5wdXQKKworICAgICAgICAjIElzc3VlIDkxMzc6IE5hbWVkIGFyZ3VtZW50IGNhbGxlZCAnb3RoZXInIG9yICdzZWxmJworICAgICAgICAjIHNob3VsZG4ndCBiZSB0cmVhdGVkIHNwZWNpYWxseS4KKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kLnVwZGF0ZShzZWxmPTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIFsoJ3NlbGYnLCAyMyldKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2QudXBkYXRlKG90aGVyPXt9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIFsoJ290aGVyJywge30pXSkKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kLnVwZGF0ZShyZWQ9NSwgYmx1ZT02LCBvdGhlcj03LCBzZWxmPTgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGxpc3Qob2QuaXRlbXMoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2JsdWUnLCA2KSwgKCdvdGhlcicsIDcpLCAoJ3JlZCcsIDUpLCAoJ3NlbGYnLCA4KV0pCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBkaXJlY3QgY2FsbHMgdG8gdXBkYXRlIGRvIG5vdCBjbGVhciBwcmV2aW91cyBjb250ZW50cworICAgICAgICAjIGFkZCB0aGF0IHVwZGF0ZXMgaXRlbXMgYXJlIG5vdCBtb3ZlZCB0byB0aGUgZW5kCisgICAgICAgIGQgPSBPcmRlcmVkRGljdChbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNDQpLCAoJ2UnLCA1NSldKQorICAgICAgICBkLnVwZGF0ZShbKCdlJywgNSksICgnZicsIDYpXSwgZz03LCBkPTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkLml0ZW1zKCkpLAorICAgICAgICAgICAgWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNiksICgnZycsIDcpXSkKKworICAgIGRlZiB0ZXN0X2FiYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKE9yZGVyZWREaWN0KCksIE11dGFibGVNYXBwaW5nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhPcmRlcmVkRGljdCwgTXV0YWJsZU1hcHBpbmcpKQorCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIHNodWZmbGUocGFpcnMpCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kKSwgbGVuKHBhaXJzKSkKKyAgICAgICAgb2QuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZCksIDApCisKKyAgICBkZWYgdGVzdF9kZWxpdGVtKHNlbGYpOgorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBkZWwgb2RbJ2EnXQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhJywgb2QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgZGVsIG9kWydhJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBwYWlyc1s6Ml0gKyBwYWlyc1szOl0pCisKKyAgICBkZWYgdGVzdF9zZXRpdGVtKHNlbGYpOgorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KFsoJ2QnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2EnLCA0KSwgKCdlJywgNSldKQorICAgICAgICBvZFsnYyddID0gMTAgICAgICAgICAgICMgZXhpc3RpbmcgZWxlbWVudAorICAgICAgICBvZFsnZiddID0gMjAgICAgICAgICAgICMgbmV3IGVsZW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2QnLCAxKSwgKCdiJywgMiksICgnYycsIDEwKSwgKCdhJywgNCksICgnZScsIDUpLCAoJ2YnLCAyMCldKQorCisgICAgZGVmIHRlc3RfaXRlcmF0b3JzKHNlbGYpOgorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBzaHVmZmxlKHBhaXJzKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QpLCBbdFswXSBmb3IgdCBpbiBwYWlyc10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2Qua2V5cygpWzpdLCBbdFswXSBmb3IgdCBpbiBwYWlyc10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QudmFsdWVzKClbOl0sIFt0WzFdIGZvciB0IGluIHBhaXJzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZC5pdGVtcygpWzpdLCBwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZXJrZXlzKCkpLCBbdFswXSBmb3IgdCBpbiBwYWlyc10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVydmFsdWVzKCkpLCBbdFsxXSBmb3IgdCBpbiBwYWlyc10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVyaXRlbXMoKSksIHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQob2QpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbdFswXSBmb3IgdCBpbiByZXZlcnNlZChwYWlycyldKQorCisgICAgZGVmIHRlc3RfcG9waXRlbShzZWxmKToKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgd2hpbGUgcGFpcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnBvcGl0ZW0oKSwgcGFpcnMucG9wKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgb2QucG9waXRlbSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kKSwgMCkKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgd2hpbGUgcGFpcnM6CisgICAgICAgICAgICBrLCB2ID0gcGFpcnMucG9wKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QucG9wKGspLCB2KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIG9kLnBvcCgneHl6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnBvcChrLCAxMjM0NSksIDEyMzQ1KQorCisgICAgICAgICMgbWFrZSBzdXJlIHBvcCBzdGlsbCB3b3JrcyB3aGVuIF9fbWlzc2luZ19fIGlzIGRlZmluZWQKKyAgICAgICAgY2xhc3MgTWlzc2luZyhPcmRlcmVkRGljdCk6CisgICAgICAgICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBtID0gTWlzc2luZyhhPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5wb3AoJ2InLCA1KSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnBvcCgnYScsIDYpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucG9wKCdhJywgNiksIDYpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgbS5wb3AoJ2EnKQorCisgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIHNodWZmbGUocGFpcnMpCisgICAgICAgIG9kMSA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBvZDIgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZDEsIG9kMikgICAgICAgICAgIyBzYW1lIG9yZGVyIGltcGxpZXMgZXF1YWxpdHkKKyAgICAgICAgcGFpcnMgPSBwYWlyc1syOl0gKyBwYWlyc1s6Ml0KKyAgICAgICAgb2QyID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwob2QxLCBvZDIpICAgICAgICMgZGlmZmVyZW50IG9yZGVyIGltcGxpZXMgaW5lcXVhbGl0eQorICAgICAgICAjIGNvbXBhcmlzb24gdG8gcmVndWxhciBkaWN0IGlzIG5vdCBvcmRlciBzZW5zaXRpdmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZDEsIGRpY3Qob2QyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KG9kMiksIG9kMSkKKyAgICAgICAgIyBkaWZmZXJlbnQgbGVuZ3RoIGltcGxpZWQgaW5lcXVhbGl0eQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG9kMSwgT3JkZXJlZERpY3QocGFpcnNbOi0xXSkpCisKKyAgICBkZWYgdGVzdF9jb3B5aW5nKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgb3JkZXJlZCBkaWN0cyBhcmUgY29weWFibGUsIGRlZXBjb3B5YWJsZSwgcGlja2xhYmxlLAorICAgICAgICAjIGFuZCBoYXZlIGEgcmVwci9ldmFsIHJvdW5kLXRyaXAKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgdXBkYXRlX3Rlc3QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIHVwZGF0ZV90ZXN0LnVwZGF0ZShvZCkKKyAgICAgICAgZm9yIGksIGR1cCBpbiBlbnVtZXJhdGUoWworICAgICAgICAgICAgICAgICAgICBvZC5jb3B5KCksCisgICAgICAgICAgICAgICAgICAgIGNvcHkuY29weShvZCksCisgICAgICAgICAgICAgICAgICAgIGNvcHkuZGVlcGNvcHkob2QpLAorICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAwKSksCisgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDEpKSwKKyAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMikpLAorICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAtMSkpLAorICAgICAgICAgICAgICAgICAgICBldmFsKHJlcHIob2QpKSwKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3Rlc3QsCisgICAgICAgICAgICAgICAgICAgIE9yZGVyZWREaWN0KG9kKSwKKyAgICAgICAgICAgICAgICAgICAgXSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZHVwIGlzIG5vdCBvZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwLCBvZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkdXAuaXRlbXMoKSksIGxpc3Qob2QuaXRlbXMoKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkdXApLCBsZW4ob2QpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGR1cCksIHR5cGUob2QpKQorCisgICAgZGVmIHRlc3RfeWFtbF9saW5rYWdlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IF9fcmVkdWNlX18gaXMgc2V0dXAgaW4gYSB3YXkgdGhhdCBzdXBwb3J0cyBQeVlBTUwncyBkdW1wKCkgZmVhdHVyZS4KKyAgICAgICAgIyBJbiB5YW1sLCBsaXN0cyBhcmUgbmF0aXZlIGJ1dCB0dXBsZXMgYXJlIG5vdC4KKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgIyB5YW1sLmR1bXAob2QpIC0tPgorICAgICAgICAjICchIXB5dGhvbi9vYmplY3QvYXBwbHk6X19tYWluX18uT3JkZXJlZERpY3Rcbi0gLSBbYSwgMV1cbiAgLSBbYiwgMl1cbicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFsbCh0eXBlKHBhaXIpPT1saXN0IGZvciBwYWlyIGluIG9kLl9fcmVkdWNlX18oKVsxXSkpCisKKyAgICBkZWYgdGVzdF9yZWR1Y2Vfbm90X3Rvb19mYXQoc2VsZik6CisgICAgICAgICMgZG8gbm90IHNhdmUgaW5zdGFuY2UgZGljdGlvbmFyeSBpZiBub3QgbmVlZGVkCisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kLl9fcmVkdWNlX18oKSksIDIpCisgICAgICAgIG9kLnggPSAxMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZC5fX3JlZHVjZV9fKCkpLCAzKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihvZCksCisgICAgICAgICAgICAiT3JkZXJlZERpY3QoWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChyZXByKG9kKSksIG9kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoT3JkZXJlZERpY3QoKSksICJPcmRlcmVkRGljdCgpIikKKworICAgIGRlZiB0ZXN0X3JlcHJfcmVjdXJzaXZlKHNlbGYpOgorICAgICAgICAjIFNlZSBpc3N1ZSAjOTgyNgorICAgICAgICBvZCA9IE9yZGVyZWREaWN0LmZyb21rZXlzKCdhYmMnKQorICAgICAgICBvZFsneCddID0gb2QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG9kKSwKKyAgICAgICAgICAgICJPcmRlcmVkRGljdChbKCdhJywgTm9uZSksICgnYicsIE5vbmUpLCAoJ2MnLCBOb25lKSwgKCd4JywgLi4uKV0pIikKKworICAgIGRlZiB0ZXN0X3NldGRlZmF1bHQoc2VsZik6CisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIHNodWZmbGUocGFpcnMpCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHBhaXJfb3JkZXIgPSBsaXN0KG9kLml0ZW1zKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2Quc2V0ZGVmYXVsdCgnYScsIDEwKSwgMykKKyAgICAgICAgIyBtYWtlIHN1cmUgb3JkZXIgZGlkbid0IGNoYW5nZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJfb3JkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2Quc2V0ZGVmYXVsdCgneCcsIDEwKSwgMTApCisgICAgICAgICMgbWFrZSBzdXJlICd4JyBpcyBhZGRlZCB0byB0aGUgZW5kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKVstMV0sICgneCcsIDEwKSkKKworICAgICAgICAjIG1ha2Ugc3VyZSBzZXRkZWZhdWx0IHN0aWxsIHdvcmtzIHdoZW4gX19taXNzaW5nX18gaXMgZGVmaW5lZAorICAgICAgICBjbGFzcyBNaXNzaW5nKE9yZGVyZWREaWN0KToKKyAgICAgICAgICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTWlzc2luZygpLnNldGRlZmF1bHQoNSwgOSksIDkpCisKKyAgICBkZWYgdGVzdF9yZWluc2VydChzZWxmKToKKyAgICAgICAgIyBHaXZlbiBpbnNlcnQgYSwgaW5zZXJ0IGIsIGRlbGV0ZSBhLCByZS1pbnNlcnQgYSwKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCBhIGlzIG5vdyBsYXRlciB0aGFuIGIuCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZFsnYSddID0gMQorICAgICAgICBvZFsnYiddID0gMgorICAgICAgICBkZWwgb2RbJ2EnXQorICAgICAgICBvZFsnYSddID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIFsoJ2InLCAyKSwgKCdhJywgMSldKQorCisgICAgZGVmIHRlc3Rfdmlld3Moc2VsZik6CisgICAgICAgIHMgPSAndGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciBhIGxhenkgZG9nIHllc3RlcmRheSBiZWZvcmUgZGF3bicuc3BsaXQoKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0LmZyb21rZXlzKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC52aWV3a2V5cygpKSwgIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC52aWV3dmFsdWVzKCkpLCAgW05vbmUgZm9yIGsgaW4gc10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC52aWV3aXRlbXMoKSksICBbKGssIE5vbmUpIGZvciBrIGluIHNdKQorCisgICAgZGVmIHRlc3Rfb3ZlcnJpZGVfdXBkYXRlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IHN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHVwZGF0ZSgpIHdpdGhvdXQgYnJlYWtpbmcgX19pbml0X18oKQorICAgICAgICBjbGFzcyBNeU9EKE9yZGVyZWREaWN0KToKKyAgICAgICAgICAgIGRlZiB1cGRhdGUoc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCkKKyAgICAgICAgaXRlbXMgPSBbKCdhJywgMSksICgnYycsIDMpLCAoJ2InLCAyKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KE15T0QoaXRlbXMpLml0ZW1zKCkpLCBpdGVtcykKKworY2xhc3MgR2VuZXJhbE1hcHBpbmdUZXN0cyhtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6CisgICAgdHlwZTJ0ZXN0ID0gT3JkZXJlZERpY3QKKworICAgIGRlZiB0ZXN0X3BvcGl0ZW0oc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9waXRlbSkKKworY2xhc3MgTXlPcmRlcmVkRGljdChPcmRlcmVkRGljdCk6CisgICAgcGFzcworCitjbGFzcyBTdWJjbGFzc01hcHBpbmdUZXN0cyhtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6CisgICAgdHlwZTJ0ZXN0ID0gTXlPcmRlcmVkRGljdAorCisgICAgZGVmIHRlc3RfcG9waXRlbShzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5wb3BpdGVtKQorCitpbXBvcnQgY29sbGVjdGlvbnMKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIE5hbWVkVHVwbGVEb2NzID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUobW9kdWxlPWNvbGxlY3Rpb25zKQorICAgIHRlc3RfY2xhc3NlcyA9IFtUZXN0TmFtZWRUdXBsZSwgTmFtZWRUdXBsZURvY3MsIFRlc3RPbmVUcmlja1BvbnlBQkNzLAorICAgICAgICAgICAgICAgICAgICBUZXN0Q29sbGVjdGlvbkFCQ3MsIFRlc3RDb3VudGVyLAorICAgICAgICAgICAgICAgICAgICBUZXN0T3JkZXJlZERpY3QsIEdlbmVyYWxNYXBwaW5nVGVzdHMsIFN1YmNsYXNzTWFwcGluZ1Rlc3RzXQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QoY29sbGVjdGlvbnMsIHZlcmJvc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvbG9yc3lzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29sb3JzeXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThjZDg4NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvbG9yc3lzLnB5CkBAIC0wLDAgKzEsNzYgQEAKK2ltcG9ydCB1bml0dGVzdCwgdGVzdC50ZXN0X3N1cHBvcnQKK2ltcG9ydCBjb2xvcnN5cworCitkZWYgZnJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKToKKyAgICB3aGlsZSBzdGFydCA8PSBzdG9wOgorICAgICAgICB5aWVsZCBzdGFydAorICAgICAgICBzdGFydCArPSBzdGVwCisKK2NsYXNzIENvbG9yc3lzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgYXNzZXJ0VHJpcGxlRXF1YWwoc2VsZiwgdHIxLCB0cjIpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0cjEpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0cjIpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHRyMVswXSwgdHIyWzBdKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHRyMVsxXSwgdHIyWzFdKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHRyMVsyXSwgdHIyWzJdKQorCisgICAgZGVmIHRlc3RfaHN2X3JvdW5kdHJpcChzZWxmKToKKyAgICAgICAgZm9yIHIgaW4gZnJhbmdlKDAuMCwgMS4wLCAwLjIpOgorICAgICAgICAgICAgZm9yIGcgaW4gZnJhbmdlKDAuMCwgMS4wLCAwLjIpOgorICAgICAgICAgICAgICAgIGZvciBiIGluIGZyYW5nZSgwLjAsIDEuMCwgMC4yKToKKyAgICAgICAgICAgICAgICAgICAgcmdiID0gKHIsIGcsIGIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICByZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnN5cy5oc3ZfdG9fcmdiKCpjb2xvcnN5cy5yZ2JfdG9faHN2KCpyZ2IpKQorICAgICAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9oc3ZfdmFsdWVzKHNlbGYpOgorICAgICAgICB2YWx1ZXMgPSBbCisgICAgICAgICAgICAjIHJnYiwgaHN2CisgICAgICAgICAgICAoKDAuMCwgMC4wLCAwLjApLCAoICAwICAsIDAuMCwgMC4wKSksICMgYmxhY2sKKyAgICAgICAgICAgICgoMC4wLCAwLjAsIDEuMCksICg0Li82LiwgMS4wLCAxLjApKSwgIyBibHVlCisgICAgICAgICAgICAoKDAuMCwgMS4wLCAwLjApLCAoMi4vNi4sIDEuMCwgMS4wKSksICMgZ3JlZW4KKyAgICAgICAgICAgICgoMC4wLCAxLjAsIDEuMCksICgzLi82LiwgMS4wLCAxLjApKSwgIyBjeWFuCisgICAgICAgICAgICAoKDEuMCwgMC4wLCAwLjApLCAoICAwICAsIDEuMCwgMS4wKSksICMgcmVkCisgICAgICAgICAgICAoKDEuMCwgMC4wLCAxLjApLCAoNS4vNi4sIDEuMCwgMS4wKSksICMgcHVycGxlCisgICAgICAgICAgICAoKDEuMCwgMS4wLCAwLjApLCAoMS4vNi4sIDEuMCwgMS4wKSksICMgeWVsbG93CisgICAgICAgICAgICAoKDEuMCwgMS4wLCAxLjApLCAoICAwICAsIDAuMCwgMS4wKSksICMgd2hpdGUKKyAgICAgICAgICAgICgoMC41LCAwLjUsIDAuNSksICggIDAgICwgMC4wLCAwLjUpKSwgIyBncmV5CisgICAgICAgIF0KKyAgICAgICAgZm9yIChyZ2IsIGhzdikgaW4gdmFsdWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbChoc3YsIGNvbG9yc3lzLnJnYl90b19oc3YoKnJnYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKHJnYiwgY29sb3JzeXMuaHN2X3RvX3JnYigqaHN2KSkKKworICAgIGRlZiB0ZXN0X2hsc19yb3VuZHRyaXAoc2VsZik6CisgICAgICAgIGZvciByIGluIGZyYW5nZSgwLjAsIDEuMCwgMC4yKToKKyAgICAgICAgICAgIGZvciBnIGluIGZyYW5nZSgwLjAsIDEuMCwgMC4yKToKKyAgICAgICAgICAgICAgICBmb3IgYiBpbiBmcmFuZ2UoMC4wLCAxLjAsIDAuMik6CisgICAgICAgICAgICAgICAgICAgIHJnYiA9IChyLCBnLCBiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgcmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzeXMuaGxzX3RvX3JnYigqY29sb3JzeXMucmdiX3RvX2hscygqcmdiKSkKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfaGxzX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgdmFsdWVzID0gWworICAgICAgICAgICAgIyByZ2IsIGhscworICAgICAgICAgICAgKCgwLjAsIDAuMCwgMC4wKSwgKCAgMCAgLCAwLjAsIDAuMCkpLCAjIGJsYWNrCisgICAgICAgICAgICAoKDAuMCwgMC4wLCAxLjApLCAoNC4vNi4sIDAuNSwgMS4wKSksICMgYmx1ZQorICAgICAgICAgICAgKCgwLjAsIDEuMCwgMC4wKSwgKDIuLzYuLCAwLjUsIDEuMCkpLCAjIGdyZWVuCisgICAgICAgICAgICAoKDAuMCwgMS4wLCAxLjApLCAoMy4vNi4sIDAuNSwgMS4wKSksICMgY3lhbgorICAgICAgICAgICAgKCgxLjAsIDAuMCwgMC4wKSwgKCAgMCAgLCAwLjUsIDEuMCkpLCAjIHJlZAorICAgICAgICAgICAgKCgxLjAsIDAuMCwgMS4wKSwgKDUuLzYuLCAwLjUsIDEuMCkpLCAjIHB1cnBsZQorICAgICAgICAgICAgKCgxLjAsIDEuMCwgMC4wKSwgKDEuLzYuLCAwLjUsIDEuMCkpLCAjIHllbGxvdworICAgICAgICAgICAgKCgxLjAsIDEuMCwgMS4wKSwgKCAgMCAgLCAxLjAsIDAuMCkpLCAjIHdoaXRlCisgICAgICAgICAgICAoKDAuNSwgMC41LCAwLjUpLCAoICAwICAsIDAuNSwgMC4wKSksICMgZ3JleQorICAgICAgICBdCisgICAgICAgIGZvciAocmdiLCBobHMpIGluIHZhbHVlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwoaGxzLCBjb2xvcnN5cy5yZ2JfdG9faGxzKCpyZ2IpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbChyZ2IsIGNvbG9yc3lzLmhsc190b19yZ2IoKmhscykpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29sb3JzeXNUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb21tYW5kcy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvbW1hbmRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NmIxODIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb21tYW5kcy5weQpAQCAtMCwwICsxLDc0IEBACisnJycKKyAgIFRlc3RzIGZvciBjb21tYW5kcyBtb2R1bGUKKyAgIE5pY2sgTWF0aGV3c29uCisnJycKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zLCB0ZW1wZmlsZSwgcmUKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCByZWFwX2NoaWxkcmVuLCBpbXBvcnRfbW9kdWxlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja193YXJuaW5ncworCisjIFNpbGVuY2UgUHkzayB3YXJuaW5nCitjb21tYW5kcyA9IGltcG9ydF9tb2R1bGUoJ2NvbW1hbmRzJywgZGVwcmVjYXRlZD1UcnVlKQorCisjIFRoZSBtb2R1bGUgc2F5czoKKyMgICAiTkIgVGhpcyBvbmx5IHdvcmtzIChhbmQgaXMgb25seSByZWxldmFudCkgZm9yIFVOSVguIgorIworIyBBY3R1YWxseSwgZ2V0b3V0cHV0IHNob3VsZCB3b3JrIG9uIGFueSBwbGF0Zm9ybSB3aXRoIGFuIG9zLnBvcGVuLCBidXQKKyMgSSdsbCB0YWtlIHRoZSBjb21tZW50IGFzIGdpdmVuLCBhbmQgc2tpcCB0aGlzIHN1aXRlLgorCitpZiBvcy5uYW1lICE9ICdwb3NpeCc6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ05vdCBwb3NpeDsgc2tpcHBpbmcgdGVzdF9jb21tYW5kcycpCisKKworY2xhc3MgQ29tbWFuZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2dldG91dHB1dChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tYW5kcy5nZXRvdXRwdXQoJ2VjaG8geHl6enknKSwgJ3h5enp5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21tYW5kcy5nZXRzdGF0dXNvdXRwdXQoJ2VjaG8geHl6enknKSwgKDAsICd4eXp6eScpKQorCisgICAgICAgICMgd2UgdXNlIG1rZHRlbXAgaW4gdGhlIG5leHQgbGluZSB0byBjcmVhdGUgYW4gZW1wdHkgZGlyZWN0b3J5CisgICAgICAgICMgdW5kZXIgb3VyIGV4Y2x1c2l2ZSBjb250cm9sOyBmcm9tIHRoYXQsIHdlIGNhbiBpbnZlbnQgYSBwYXRobmFtZQorICAgICAgICAjIHRoYXQgd2UgX2tub3dfIHdvbid0IGV4aXN0LiAgVGhpcyBpcyBndWFyYW50ZWVkIHRvIGZhaWwuCisgICAgICAgIGRpciA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKGRpciwgImZvbyIpCisKKyAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gY29tbWFuZHMuZ2V0c3RhdHVzb3V0cHV0KCdjYXQgJyArIG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHN0YXR1cywgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIGRpciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBvcy5ybWRpcihkaXIpCisKKyAgICBkZWYgdGVzdF9nZXRzdGF0dXMoc2VsZik6CisgICAgICAgICMgVGhpcyBwYXR0ZXJuIHNob3VsZCBtYXRjaCAnbHMgLWxkIC8uJyBvbiBhbnkgcG9zaXgKKyAgICAgICAgIyBzeXN0ZW0sIGhvd2V2ZXIgcGVydmVyc2VseSBjb25maWd1cmVkLiAgRXZlbiBvbiBzeXN0ZW1zCisgICAgICAgICMgKGUuZy4sIEN5Z3dpbikgd2hlcmUgdXNlciBhbmQgZ3JvdXAgbmFtZXMgY2FuIGhhdmUgc3BhY2VzOgorICAgICAgICAjICAgICBkcnd4ci14ci14ICAgMTUgQWRtaW5pc3QgRG9tYWluIFUgICAgIDQwOTYgQXVnIDEyIDEyOjUwIC8KKyAgICAgICAgIyAgICAgZHJ3eHIteHIteCAgIDE1IEpvZSBVc2VyIE15IEdyb3VwICAgICA0MDk2IEF1ZyAxMiAxMjo1MCAvCisgICAgICAgICMgTm90ZSB0aGF0IHRoZSBmaXJzdCBjYXNlIGFib3ZlIGhhcyBhIHNwYWNlIGluIHRoZSBncm91cCBuYW1lCisgICAgICAgICMgd2hpbGUgdGhlIHNlY29uZCBvbmUgaGFzIGEgc3BhY2UgaW4gYm90aCBuYW1lcy4KKyAgICAgICAgIyBTcGVjaWFsIGF0dHJpYnV0ZXMgc3VwcG9ydGVkOgorICAgICAgICAjICAgKyA9IGhhcyBBQ0xzCisgICAgICAgICMgICBAID0gaGFzIE1hYyBPUyBYIGV4dGVuZGVkIGF0dHJpYnV0ZXMKKyAgICAgICAgIyAgIC4gPSBoYXMgYSBTRUxpbnV4IHNlY3VyaXR5IGNvbnRleHQKKyAgICAgICAgcGF0ID0gcicnJ2QuLi4uLi4uLi4gICAjIEl0IGlzIGEgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgWy4rQF0/ICAgICAgICMgSXQgbWF5IGhhdmUgc3BlY2lhbCBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgICAgICAgXHMrXGQrICAgICAgICMgSXQgaGFzIHNvbWUgbnVtYmVyIG9mIGxpbmtzLgorICAgICAgICAgICAgICAgICAgW14vXSogICAgICAgICMgU2tpcCB1c2VyLCBncm91cCwgc2l6ZSwgYW5kIGRhdGUuCisgICAgICAgICAgICAgICAgICAvXC4gICAgICAgICAgIyBhbmQgZW5kIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgICAgICAgICAgICAnJycKKworICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgiLipjb21tYW5kcy5nZXRzdGF0dXMuLiBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocGF0LCBjb21tYW5kcy5nZXRzdGF0dXMoIi8uIiksIHJlLlZFUkJPU0UpKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoQ29tbWFuZFRlc3RzKQorICAgIHJlYXBfY2hpbGRyZW4oKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvbXBhcmUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb21wYXJlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZGE4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb21wYXJlLnB5CkBAIC0wLDAgKzEsNTggQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgRW1wdHk6CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxFbXB0eT4nCisKK2NsYXNzIENvZXJjZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5hcmcgPSBhcmcKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8Q29lcmNlICVzPicgJSBzZWxmLmFyZworCisgICAgZGVmIF9fY29lcmNlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBDb2VyY2UpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXJnLCBvdGhlci5hcmcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmFyZywgb3RoZXIKKworY2xhc3MgQ21wOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLGFyZyk6CisgICAgICAgIHNlbGYuYXJnID0gYXJnCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPENtcCAlcz4nICUgc2VsZi5hcmcKKworICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIGNtcChzZWxmLmFyZywgb3RoZXIpCisKK2NsYXNzIENvbXBhcmlzb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzZXQxID0gWzIsIDIuMCwgMkwsIDIrMGosIENvZXJjZSgyKSwgQ21wKDIuMCldCisgICAgc2V0MiA9IFtbMV0sICgzLCksIE5vbmUsIEVtcHR5KCldCisgICAgY2FuZGlkYXRlcyA9IHNldDEgKyBzZXQyCisKKyAgICBkZWYgdGVzdF9jb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgZm9yIGEgaW4gc2VsZi5jYW5kaWRhdGVzOgorICAgICAgICAgICAgZm9yIGIgaW4gc2VsZi5jYW5kaWRhdGVzOgorICAgICAgICAgICAgICAgIGlmICgoYSBpbiBzZWxmLnNldDEpIGFuZCAoYiBpbiBzZWxmLnNldDEpKSBvciBhIGlzIGI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGEsIGIpCisKKyAgICBkZWYgdGVzdF9pZF9jb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgZGVmYXVsdCBjb21wYXJpc29uIGNvbXBhcmVzIGlkKCkgb2YgYXJncworICAgICAgICBMID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgTC5pbnNlcnQobGVuKEwpLy8yLCBFbXB0eSgpKQorICAgICAgICBmb3IgYSBpbiBMOgorICAgICAgICAgICAgZm9yIGIgaW4gTDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChhLCBiKSwgY21wKGlkKGEpLCBpZChiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYT0lciwgYj0lcicgJSAoYSwgYikpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENvbXBhcmlzb25UZXN0KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb21waWxlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29tcGlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmNiNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29tcGlsZS5weQpAQCAtMCwwICsxLDUyNiBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgX2FzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB0ZXh0d3JhcAorCitjbGFzcyBUZXN0U3BlY2lmaWNzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X25vX2VuZGluZ19uZXdsaW5lKHNlbGYpOgorICAgICAgICBjb21waWxlKCJoaSIsICI8dGVzdD4iLCAiZXhlYyIpCisgICAgICAgIGNvbXBpbGUoImhpXHIiLCAiPHRlc3Q+IiwgImV4ZWMiKQorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIGNvbXBpbGUoIiIsICI8dGVzdD4iLCAiZXhlYyIpCisKKyAgICBkZWYgdGVzdF9vdGhlcl9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgY29tcGlsZSgiXHJcbiIsICI8dGVzdD4iLCAiZXhlYyIpCisgICAgICAgIGNvbXBpbGUoIlxyIiwgIjx0ZXN0PiIsICJleGVjIikKKyAgICAgICAgY29tcGlsZSgiaGlcclxuc3R1ZmZcclxuZGVmIGYoKTpcbiAgICBwYXNzXHIiLCAiPHRlc3Q+IiwgImV4ZWMiKQorICAgICAgICBjb21waWxlKCJ0aGlzX2lzXHJyZWFsbHlfb2xkX21hY1xyZGVmIGYoKTpcbiAgICBwYXNzIiwgIjx0ZXN0PiIsICJleGVjIikKKworICAgIGRlZiB0ZXN0X2RlYnVnX2Fzc2lnbm1lbnQoc2VsZik6CisgICAgICAgICMgY2F0Y2ggYXNzaWdubWVudHMgdG8gX19kZWJ1Z19fCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCAnX19kZWJ1Z19fID0gMScsICc/JywgJ3NpbmdsZScpCisgICAgICAgIGltcG9ydCBfX2J1aWx0aW5fXworICAgICAgICBwcmV2ID0gX19idWlsdGluX18uX19kZWJ1Z19fCisgICAgICAgIHNldGF0dHIoX19idWlsdGluX18sICdfX2RlYnVnX18nLCAnc3VyZScpCisgICAgICAgIHNldGF0dHIoX19idWlsdGluX18sICdfX2RlYnVnX18nLCBwcmV2KQorCisgICAgZGVmIHRlc3RfYXJndW1lbnRfaGFuZGxpbmcoc2VsZik6CisgICAgICAgICMgZGV0ZWN0IGR1cGxpY2F0ZSBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkIGFyZ3VtZW50cworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgJ2xhbWJkYSBhLGE6MCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAnbGFtYmRhIGEsYT0xOjAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgJ2xhbWJkYSBhPTEsYT0xOjAnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBleGVjICdkZWYgZihhLCBhKTogcGFzcycKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZHVwbGljYXRlIGFyZ3VtZW50cyIpCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlYyAnZGVmIGYoYSA9IDAsIGEgPSAxKTogcGFzcycKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZHVwbGljYXRlIGtleXdvcmQgYXJndW1lbnRzIikKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBleGVjICdkZWYgZihhKTogZ2xvYmFsIGE7IGEgPSAxJworICAgICAgICAgICAgc2VsZi5mYWlsKCJ2YXJpYWJsZSBpcyBnbG9iYWwgYW5kIGxvY2FsIikKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3Rfc3ludGF4X2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgIjErKjMiLCAiZmlsZW5hbWUiLCAiZXhlYyIpCisKKyAgICBkZWYgdGVzdF9ub25lX2tleXdvcmRfYXJnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgImYoTm9uZT0xKSIsICI8c3RyaW5nPiIsICJleGVjIikKKworICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV9nbG9iYWxfbG9jYWwoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4ZWMgJ2RlZiBmKGEpOiBnbG9iYWwgYTsgYSA9IDEnCisgICAgICAgICAgICBzZWxmLmZhaWwoInZhcmlhYmxlIGlzIGdsb2JhbCBhbmQgbG9jYWwiKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9leGVjX2Z1bmN0aW9uYWxfc3R5bGUoc2VsZik6CisgICAgICAgICMgRXhlYydpbmcgYSB0dXBsZSBvZiBsZW5ndGggMiB3b3Jrcy4KKyAgICAgICAgZyA9IHsnYic6IDJ9CisgICAgICAgIGV4ZWMoImEgPSBiICsgMSIsIGcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ1snYSddLCAzKQorCisgICAgICAgICMgQXMgZG9lcyBleGVjJ2luZyBhIHR1cGxlIG9mIGxlbmd0aCAzLgorICAgICAgICBsID0geydiJzogM30KKyAgICAgICAgZyA9IHsnYic6IDUsICdjJzogN30KKyAgICAgICAgZXhlYygiYSA9IGIgKyBjIiwgZywgbCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYScsIGcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobFsnYSddLCAxMCkKKworICAgICAgICAjIFR1cGxlcyBub3Qgb2YgbGVuZ3RoIDIgb3IgMyBhcmUgaW52YWxpZC4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZXhlYygiYSA9IGIgKyAxIiwpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZXhlYygiYSA9IGIgKyAxIiwge30sIHt9LCB7fSkKKworICAgICAgICAjIENhbid0IG1peCBhbmQgbWF0Y2ggdGhlIHR3byBjYWxsaW5nIGZvcm1zLgorICAgICAgICBnID0geydhJzogMywgJ2InOiA0fQorICAgICAgICBsID0ge30KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZXhlYygiYSA9IGIgKyAxIiwgZykgaW4gZworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBleGVjKCJhID0gYiArIDEiLCBnLCBsKSBpbiBnLCBsCisKKyAgICBkZWYgdGVzdF9leGVjX3dpdGhfZ2VuZXJhbF9tYXBwaW5nX2Zvcl9sb2NhbHMoc2VsZik6CisKKyAgICAgICAgY2xhc3MgTToKKyAgICAgICAgICAgICJUZXN0IG1hcHBpbmcgaW50ZXJmYWNlIHZlcnN1cyBwb3NzaWJsZSBjYWxscyBmcm9tIGV2YWwoKS4iCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICBpZiBrZXkgPT0gJ2EnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTIKKyAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcgorICAgICAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0cyA9IChrZXksIHZhbHVlKQorICAgICAgICAgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3QoJ3h5eicpCisKKyAgICAgICAgbSA9IE0oKQorICAgICAgICBnID0gZ2xvYmFscygpCisgICAgICAgIGV4ZWMgJ3ogPSBhJyBpbiBnLCBtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5yZXN1bHRzLCAoJ3onLCAxMikpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4ZWMgJ3ogPSBiJyBpbiBnLCBtCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0RpZCBub3QgZGV0ZWN0IGEgS2V5RXJyb3InKQorICAgICAgICBleGVjICd6ID0gZGlyKCknIGluIGcsIG0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJlc3VsdHMsICgneicsIGxpc3QoJ3h5eicpKSkKKyAgICAgICAgZXhlYyAneiA9IGdsb2JhbHMoKScgaW4gZywgbQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucmVzdWx0cywgKCd6JywgZykpCisgICAgICAgIGV4ZWMgJ3ogPSBsb2NhbHMoKScgaW4gZywgbQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucmVzdWx0cywgKCd6JywgbSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4ZWMgJ3ogPSBiJyBpbiBtCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0RpZCBub3QgdmFsaWRhdGUgZ2xvYmFscyBhcyBhIHJlYWwgZGljdCcpCisKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgICJOb24tbWFwcGluZyIKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbSA9IEEoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBleGVjICd6ID0gYScgaW4gZywgbQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdEaWQgbm90IHZhbGlkYXRlIGxvY2FscyBhcyBhIG1hcHBpbmcnKQorCisgICAgICAgICMgVmVyaWZ5IHRoYXQgZGljdCBzdWJjbGFzc2VzIHdvcmsgYXMgd2VsbAorICAgICAgICBjbGFzcyBEKGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgaWYga2V5ID09ICdhJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEyCisgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KQorICAgICAgICBkID0gRCgpCisgICAgICAgIGV4ZWMgJ3ogPSBhJyBpbiBnLCBkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsneiddLCAxMikKKworICAgIGRlZiB0ZXN0X2V4dGVuZGVkX2FyZyhzZWxmKToKKyAgICAgICAgbG9uZ2V4cHIgPSAneCA9IHggb3IgJyArICcteCcgKiAyNTAwCisgICAgICAgIGNvZGUgPSAnJycKK2RlZiBmKHgpOgorICAgICVzCisgICAgJXMKKyAgICAlcworICAgICVzCisgICAgJXMKKyAgICAlcworICAgICVzCisgICAgJXMKKyAgICAlcworICAgICVzCisgICAgIyB0aGUgZXhwcmVzc2lvbnMgYWJvdmUgaGF2ZSBubyBlZmZlY3QsIHggPT0gYXJndW1lbnQKKyAgICB3aGlsZSB4OgorICAgICAgICB4IC09IDEKKyAgICAgICAgIyBFWFRFTkRFRF9BUkcvSlVNUF9BQlNPTFVURSBoZXJlCisgICAgcmV0dXJuIHgKKycnJyAlICgobG9uZ2V4cHIsKSoxMCkKKyAgICAgICAgZXhlYyBjb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZig1KSwgMCkKKworICAgIGRlZiB0ZXN0X2NvbXBsZXhfYXJncyhzZWxmKToKKworICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICAgICAgICAgICgidHVwbGUgcGFyYW1ldGVyIHVucGFja2luZyBoYXMgYmVlbiByZW1vdmVkIiwgU3ludGF4V2FybmluZykpOgorICAgICAgICAgICAgZXhlYyB0ZXh0d3JhcC5kZWRlbnQoJycnCisgICAgICAgIGRlZiBjb21wX2FyZ3MoKGEsIGIpKToKKyAgICAgICAgICAgIHJldHVybiBhLGIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wX2FyZ3MoKDEsIDIpKSwgKDEsIDIpKQorCisgICAgICAgIGRlZiBjb21wX2FyZ3MoKGEsIGIpPSgzLCA0KSk6CisgICAgICAgICAgICByZXR1cm4gYSwgYgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBfYXJncygoMSwgMikpLCAoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcF9hcmdzKCksICgzLCA0KSkKKworICAgICAgICBkZWYgY29tcF9hcmdzKGEsIChiLCBjKSk6CisgICAgICAgICAgICByZXR1cm4gYSwgYiwgYworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBfYXJncygxLCAoMiwgMykpLCAoMSwgMiwgMykpCisKKyAgICAgICAgZGVmIGNvbXBfYXJncyhhPTIsIChiLCBjKT0oMywgNCkpOgorICAgICAgICAgICAgcmV0dXJuIGEsIGIsIGMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wX2FyZ3MoMSwgKDIsIDMpKSwgKDEsIDIsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBfYXJncygpLCAoMiwgMywgNCkpCisgICAgICAgICcnJykKKworICAgIGRlZiB0ZXN0X2FyZ3VtZW50X29yZGVyKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBleGVjICdkZWYgZihhPTEsIChiLCBjKSk6IHBhc3MnCisgICAgICAgICAgICBzZWxmLmZhaWwoIm5vbi1kZWZhdWx0IGFyZ3MgYWZ0ZXIgZGVmYXVsdCIpCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2Zsb2F0X2xpdGVyYWxzKHNlbGYpOgorICAgICAgICAjIHRlc3RpbmcgYmFkIGZsb2F0IGxpdGVyYWxzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAiMmUiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgIjIuMGUrIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsICIxZS0iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgIjMtNGUvMjEiKQorCisgICAgZGVmIHRlc3RfaW5kZW50YXRpb24oc2VsZik6CisgICAgICAgICMgdGVzdGluZyBjb21waWxlKCkgb2YgaW5kZW50ZWQgYmxvY2sgdy9vIHRyYWlsaW5nIG5ld2xpbmUiCisgICAgICAgIHMgPSAiIiIKK2lmIDE6CisgICAgaWYgMjoKKyAgICAgICAgcGFzcyIiIgorICAgICAgICBjb21waWxlKHMsICI8c3RyaW5nPiIsICJleGVjIikKKworICAgICMgVGhpcyB0ZXN0IGlzIHByb2JhYmx5IHNwZWNpZmljIHRvIENQeXRob24gYW5kIG1heSBub3QgZ2VuZXJhbGl6ZQorICAgICMgdG8gb3RoZXIgaW1wbGVtZW50YXRpb25zLiAgV2UgYXJlIHRyeWluZyB0byBlbnN1cmUgdGhhdCB3aGVuCisgICAgIyB0aGUgZmlyc3QgbGluZSBvZiBjb2RlIHN0YXJ0cyBhZnRlciAyNTYsIGNvcnJlY3QgbGluZSBudW1iZXJzCisgICAgIyBpbiB0cmFjZWJhY2tzIGFyZSBzdGlsbCBwcm9kdWNlZC4KKyAgICBkZWYgdGVzdF9sZWFkaW5nX25ld2xpbmVzKHNlbGYpOgorICAgICAgICBzMjU2ID0gIiIuam9pbihbIlxuIl0gKiAyNTYgKyBbInNwYW0iXSkKKyAgICAgICAgY28gPSBjb21waWxlKHMyNTYsICdmbicsICdleGVjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjby5jb19maXJzdGxpbmVubywgMjU3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvLmNvX2xub3RhYiwgJycpCisKKyAgICBkZWYgdGVzdF9saXRlcmFsc193aXRoX2xlYWRpbmdfemVyb2VzKHNlbGYpOgorICAgICAgICBmb3IgYXJnIGluIFsiMDc3Nzg3IiwgIjB4aiIsICIweC4iLCAiMGUiLCAgIjA5MDAwMDAwMDAwMDAwMCIsCisgICAgICAgICAgICAgICAgICAgICIwODAwMDAwMDAwMDAwMDAiLCAiMDAwMDAwMDAwMDAwMDA5IiwgIjAwMDAwMDAwMDAwMDAwOCIsCisgICAgICAgICAgICAgICAgICAgICIwYjQyIiwgIjBCQURDQUZFIiwgIjBvMTIzNDU2Nzg5IiwgIjBiMS4xIiwgIjBvNC4yIiwKKyAgICAgICAgICAgICAgICAgICAgIjBiMTAxajIiLCAiMG8xNTNqMiIsICIwYjEwMGUxIiwgIjBvNzc3ZTEiLCAiMG84IiwgIjBvNzgiXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBhcmcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwNzc3IiksIDUxMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwNzc3TCIpLCA1MTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMDAwNzc3IiksIDUxMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIweGZmIiksIDI1NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIweGZmTCIpLCAyNTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMFhmRiIpLCAyNTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMDc3Ny4iKSwgNzc3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjA3NzcuMCIpLCA3NzcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzc3ZTAiKSwgNzc3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjA3NzdlMSIpLCA3NzcwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjBlMCIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjAwMDBFLTAxMiIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjA5LjUiKSwgOS41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjA3NzdqIiksIDc3N2opCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMDBqIiksIDBqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjAwLjAiKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwZTMiKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwOTAwMDAwMDAwMDAwMDAuIiksIDkwMDAwMDAwMDAwMDAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwOTAwMDAwMDAwMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpLCA5MDAwMDAwMDAwMDAwMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMDkwMDAwMDAwMDAwMDAwZTAiKSwgOTAwMDAwMDAwMDAwMDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjA5MDAwMDAwMDAwMDAwMGUtMCIpLCA5MDAwMDAwMDAwMDAwMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMDkwMDAwMDAwMDAwMDAwaiIpLCA5MDAwMDAwMDAwMDAwMGopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMDAwMDAwMDAwMDAwMDA3IiksIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMDAwMDAwMDAwMDAwMDA4LiIpLCA4LikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwMDAwMDAwMDAwMDAwMDkuIiksIDkuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjBiMTAxMDEwIiksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIi0wYjAwMDAwMDAwMDAxMCIpLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwbzc3NyIpLCA1MTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiLTBvMDAwMDAxMCIpLCAtOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCIwMjAwMDAwMDAwMDAuMCIpLCAyMDAwMDAwMDAwMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIjAzNzc3Nzc3Nzc3N2UwIiksIDM3Nzc3Nzc3Nzc3LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMCkKKworICAgIGRlZiB0ZXN0X3VuYXJ5X21pbnVzKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0cmVhdG1lbnQgb2YgdW5hcnkgbWludXMgb24gbmVnYXRpdmUgbnVtYmVycyBTRiBidWcgIzY2MDQ1NQorICAgICAgICBpZiBzeXMubWF4aW50ID09IDIxNDc0ODM2NDc6CisgICAgICAgICAgICAjIDMyLWJpdCBtYWNoaW5lCisgICAgICAgICAgICBhbGxfb25lX2JpdHMgPSAnMHhmZmZmZmZmZicKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChhbGxfb25lX2JpdHMpLCA0Mjk0OTY3Mjk1TCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiLSIgKyBhbGxfb25lX2JpdHMpLCAtNDI5NDk2NzI5NUwpCisgICAgICAgIGVsaWYgc3lzLm1heGludCA9PSA5MjIzMzcyMDM2ODU0Nzc1ODA3OgorICAgICAgICAgICAgIyA2NC1iaXQgbWFjaGluZQorICAgICAgICAgICAgYWxsX29uZV9iaXRzID0gJzB4ZmZmZmZmZmZmZmZmZmZmZicKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChhbGxfb25lX2JpdHMpLCAxODQ0Njc0NDA3MzcwOTU1MTYxNUwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoIi0iICsgYWxsX29uZV9iaXRzKSwgLTE4NDQ2NzQ0MDczNzA5NTUxNjE1TCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiSG93IG1hbnkgYml0cyAqZG9lcyogdGhpcyBtYWNoaW5lIGhhdmU/Pz8iKQorICAgICAgICAjIFZlcmlmeSB0cmVhdG1lbnQgb2YgY29uc3RhbnQgZm9sZGluZyBvbiAtKHN5cy5tYXhpbnQrMSkKKyAgICAgICAgIyBpLmUuIC0yMTQ3NDgzNjQ4IG9uIDMyIGJpdCBwbGF0Zm9ybXMuICBTaG91bGQgcmV0dXJuIGludCwgbm90IGxvbmcuCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShldmFsKCIlcyIgJSAoLXN5cy5tYXhpbnQgLSAxKSksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV2YWwoIiVzIiAlICgtc3lzLm1heGludCAtIDIpKSwgbG9uZykKKworICAgIGlmIHN5cy5tYXhpbnQgPT0gOTIyMzM3MjAzNjg1NDc3NTgwNzoKKyAgICAgICAgZGVmIHRlc3RfMzJfNjNfYml0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgICAgIGEgPSArNDI5NDk2NzI5NiAgIyAxIDw8IDMyCisgICAgICAgICAgICBiID0gLTQyOTQ5NjcyOTYgICMgMSA8PCAzMgorICAgICAgICAgICAgYyA9ICsyODE0NzQ5NzY3MTA2NTYgICMgMSA8PCA0OAorICAgICAgICAgICAgZCA9IC0yODE0NzQ5NzY3MTA2NTYgICMgMSA8PCA0OAorICAgICAgICAgICAgZSA9ICs0NjExNjg2MDE4NDI3Mzg3OTA0ICAjIDEgPDwgNjIKKyAgICAgICAgICAgIGYgPSAtNDYxMTY4NjAxODQyNzM4NzkwNCAgIyAxIDw8IDYyCisgICAgICAgICAgICBnID0gKzkyMjMzNzIwMzY4NTQ3NzU4MDcgICMgMSA8PCA2MyAtIDEKKyAgICAgICAgICAgIGggPSAtOTIyMzM3MjAzNjg1NDc3NTgwNyAgIyAxIDw8IDYzIC0gMQorCisgICAgICAgICAgICBmb3IgdmFyaWFibGUgaW4gc2VsZi50ZXN0XzMyXzYzX2JpdF92YWx1ZXMuZnVuY19jb2RlLmNvX2NvbnN0czoKKyAgICAgICAgICAgICAgICBpZiB2YXJpYWJsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhcmlhYmxlLCBpbnQpCisKKyAgICBkZWYgdGVzdF9zZXF1ZW5jZV91bnBhY2tpbmdfZXJyb3Ioc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHNlcXVlbmNlIHBhY2tpbmcvdW5wYWNraW5nIHdpdGggIm9yIi4gIFNGIGJ1ZyAjNzU3ODE4CisgICAgICAgIGksaiA9ICgxLCAtMSkgb3IgKC0xLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaiwgLTEpCisKKyAgICBkZWYgdGVzdF9ub25lX2Fzc2lnbm1lbnQoc2VsZik6CisgICAgICAgIHN0bXRzID0gWworICAgICAgICAgICAgJ05vbmUgPSAwJywKKyAgICAgICAgICAgICdOb25lICs9IDAnLAorICAgICAgICAgICAgJ19fYnVpbHRpbnNfXy5Ob25lID0gMCcsCisgICAgICAgICAgICAnZGVmIE5vbmUoKTogcGFzcycsCisgICAgICAgICAgICAnY2xhc3MgTm9uZTogcGFzcycsCisgICAgICAgICAgICAnKGEsIE5vbmUpID0gMCwgMCcsCisgICAgICAgICAgICAnZm9yIE5vbmUgaW4gcmFuZ2UoMTApOiBwYXNzJywKKyAgICAgICAgICAgICdkZWYgZihOb25lKTogcGFzcycsCisgICAgICAgICAgICAnaW1wb3J0IE5vbmUnLAorICAgICAgICAgICAgJ2ltcG9ydCB4IGFzIE5vbmUnLAorICAgICAgICAgICAgJ2Zyb20geCBpbXBvcnQgTm9uZScsCisgICAgICAgICAgICAnZnJvbSB4IGltcG9ydCB5IGFzIE5vbmUnCisgICAgICAgIF0KKyAgICAgICAgZm9yIHN0bXQgaW4gc3RtdHM6CisgICAgICAgICAgICBzdG10ICs9ICJcbiIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCBzdG10LCAndG1wJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgc3RtdCwgJ3RtcCcsICdleGVjJykKKyAgICAgICAgIyBUaGlzIGlzIG9rLgorICAgICAgICBjb21waWxlKCJmcm9tIE5vbmUgaW1wb3J0IHgiLCAidG1wIiwgImV4ZWMiKQorICAgICAgICBjb21waWxlKCJmcm9tIHggaW1wb3J0IE5vbmUgYXMgeSIsICJ0bXAiLCAiZXhlYyIpCisgICAgICAgIGNvbXBpbGUoImltcG9ydCBOb25lIGFzIHgiLCAidG1wIiwgImV4ZWMiKQorCisgICAgZGVmIHRlc3RfaW1wb3J0KHNlbGYpOgorICAgICAgICBzdWNjZWVkID0gWworICAgICAgICAgICAgJ2ltcG9ydCBzeXMnLAorICAgICAgICAgICAgJ2ltcG9ydCBvcywgc3lzJywKKyAgICAgICAgICAgICdpbXBvcnQgb3MgYXMgYmFyJywKKyAgICAgICAgICAgICdpbXBvcnQgb3MucGF0aCBhcyBiYXInLAorICAgICAgICAgICAgJ2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgbmVzdGVkX3Njb3BlcywgZ2VuZXJhdG9ycycsCisgICAgICAgICAgICAnZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCAobmVzdGVkX3Njb3BlcyxcbmdlbmVyYXRvcnMpJywKKyAgICAgICAgICAgICdmcm9tIF9fZnV0dXJlX18gaW1wb3J0IChuZXN0ZWRfc2NvcGVzLFxuZ2VuZXJhdG9ycywpJywKKyAgICAgICAgICAgICdmcm9tIHN5cyBpbXBvcnQgc3RkaW4sIHN0ZGVyciwgc3Rkb3V0JywKKyAgICAgICAgICAgICdmcm9tIHN5cyBpbXBvcnQgKHN0ZGluLCBzdGRlcnIsXG5zdGRvdXQpJywKKyAgICAgICAgICAgICdmcm9tIHN5cyBpbXBvcnQgKHN0ZGluLCBzdGRlcnIsXG5zdGRvdXQsKScsCisgICAgICAgICAgICAnZnJvbSBzeXMgaW1wb3J0IChzdGRpblxuLCBzdGRlcnIsIHN0ZG91dCknLAorICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCAoc3RkaW5cbiwgc3RkZXJyLCBzdGRvdXQsKScsCisgICAgICAgICAgICAnZnJvbSBzeXMgaW1wb3J0IHN0ZGluIGFzIHNpLCBzdGRvdXQgYXMgc28sIHN0ZGVyciBhcyBzZScsCisgICAgICAgICAgICAnZnJvbSBzeXMgaW1wb3J0IChzdGRpbiBhcyBzaSwgc3Rkb3V0IGFzIHNvLCBzdGRlcnIgYXMgc2UpJywKKyAgICAgICAgICAgICdmcm9tIHN5cyBpbXBvcnQgKHN0ZGluIGFzIHNpLCBzdGRvdXQgYXMgc28sIHN0ZGVyciBhcyBzZSwpJywKKyAgICAgICAgICAgIF0KKyAgICAgICAgZmFpbCA9IFsKKyAgICAgICAgICAgICdpbXBvcnQgKG9zLCBzeXMpJywKKyAgICAgICAgICAgICdpbXBvcnQgKG9zKSwgKHN5cyknLAorICAgICAgICAgICAgJ2ltcG9ydCAoKG9zKSwgKHN5cykpJywKKyAgICAgICAgICAgICdpbXBvcnQgKHN5cycsCisgICAgICAgICAgICAnaW1wb3J0IHN5cyknLAorICAgICAgICAgICAgJ2ltcG9ydCAob3MsKScsCisgICAgICAgICAgICAnaW1wb3J0IG9zIEFzIGJhcicsCisgICAgICAgICAgICAnaW1wb3J0IG9zLnBhdGggYSBiYXInLAorICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCBzdGRpbiBBcyBzdGRvdXQnLAorICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCBzdGRpbiBhIHN0ZG91dCcsCisgICAgICAgICAgICAnZnJvbSAoc3lzKSBpbXBvcnQgc3RkaW4nLAorICAgICAgICAgICAgJ2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgKG5lc3RlZF9zY29wZXMnLAorICAgICAgICAgICAgJ2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgbmVzdGVkX3Njb3BlcyknLAorICAgICAgICAgICAgJ2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgbmVzdGVkX3Njb3BlcyxcbmdlbmVyYXRvcnMnLAorICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCAoc3RkaW4nLAorICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCBzdGRpbiknLAorICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCBzdGRpbiwgc3Rkb3V0LFxuc3RkZXJyJywKKyAgICAgICAgICAgICdmcm9tIHN5cyBpbXBvcnQgc3RkaW4gc2knLAorICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCBzdGRpbiwnCisgICAgICAgICAgICAnZnJvbSBzeXMgaW1wb3J0ICgqKScsCisgICAgICAgICAgICAnZnJvbSBzeXMgaW1wb3J0IChzdGRpbiwsIHN0ZG91dCwgc3RkZXJyKScsCisgICAgICAgICAgICAnZnJvbSBzeXMgaW1wb3J0IChzdGRpbiwgc3Rkb3V0KSwnLAorICAgICAgICAgICAgXQorICAgICAgICBmb3Igc3RtdCBpbiBzdWNjZWVkOgorICAgICAgICAgICAgY29tcGlsZShzdG10LCAndG1wJywgJ2V4ZWMnKQorICAgICAgICBmb3Igc3RtdCBpbiBmYWlsOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIHN0bXQsICd0bXAnLCAnZXhlYycpCisKKyAgICBkZWYgdGVzdF9mb3JfZGlzdGluY3RfY29kZV9vYmplY3RzKHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZyAxMDQ4ODcwCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBmMSA9IGxhbWJkYSB4PTE6IHgKKyAgICAgICAgICAgIGYyID0gbGFtYmRhIHg9MjogeAorICAgICAgICAgICAgcmV0dXJuIGYxLCBmMgorICAgICAgICBmMSwgZjIgPSBmKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChmMS5mdW5jX2NvZGUpLCBpZChmMi5mdW5jX2NvZGUpKQorCisgICAgZGVmIHRlc3RfbGFtYmRhX2RvYyhzZWxmKToKKyAgICAgICAgbCA9IGxhbWJkYTogImZvbyIKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobC5fX2RvY19fKQorCisgICAgZGVmIHRlc3RfdW5pY29kZV9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgY29kZSA9IHUiIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbnBhc3NcbiIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIGNvZGUsICJ0bXAiLCAiZXhlYyIpCisKKyAgICBkZWYgdGVzdF9zdWJzY3JpcHRzKHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZyAxNDQ4ODA0CisgICAgICAgICMgQ2xhc3MgdG8gbWFrZSB0ZXN0aW5nIHN1YnNjcmlwdCByZXN1bHRzIGVhc3kKKyAgICAgICAgY2xhc3Mgc3RyX21hcChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZGF0YSA9IHt9CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kYXRhW3N0cihrZXkpXQorICAgICAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYuZGF0YVtzdHIoa2V5KV0gPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgZGVsIHNlbGYuZGF0YVtzdHIoa2V5KV0KKyAgICAgICAgICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyKGtleSkgaW4gc2VsZi5kYXRhCisgICAgICAgIGQgPSBzdHJfbWFwKCkKKyAgICAgICAgIyBJbmRleAorICAgICAgICBkWzFdID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMV0sIDEpCisgICAgICAgIGRbMV0gKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMV0sIDIpCisgICAgICAgIGRlbCBkWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMSwgZCkKKyAgICAgICAgIyBUdXBsZSBvZiBpbmRpY2VzCisgICAgICAgIGRbMSwgMV0gPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxLCAxXSwgMSkKKyAgICAgICAgZFsxLCAxXSArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxLCAxXSwgMikKKyAgICAgICAgZGVsIGRbMSwgMV0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoMSwgMSksIGQpCisgICAgICAgICMgU2ltcGxlIHNsaWNlCisgICAgICAgIGRbMToyXSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6Ml0sIDEpCisgICAgICAgIGRbMToyXSArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxOjJdLCAyKQorICAgICAgICBkZWwgZFsxOjJdCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2xpY2UoMSwgMiksIGQpCisgICAgICAgICMgVHVwbGUgb2Ygc2ltcGxlIHNsaWNlcworICAgICAgICBkWzE6MiwgMToyXSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6MiwgMToyXSwgMSkKKyAgICAgICAgZFsxOjIsIDE6Ml0gKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMToyLCAxOjJdLCAyKQorICAgICAgICBkZWwgZFsxOjIsIDE6Ml0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoc2xpY2UoMSwgMiksIHNsaWNlKDEsIDIpKSwgZCkKKyAgICAgICAgIyBFeHRlbmRlZCBzbGljZQorICAgICAgICBkWzE6MjozXSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6MjozXSwgMSkKKyAgICAgICAgZFsxOjI6M10gKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMToyOjNdLCAyKQorICAgICAgICBkZWwgZFsxOjI6M10KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihzbGljZSgxLCAyLCAzKSwgZCkKKyAgICAgICAgIyBUdXBsZSBvZiBleHRlbmRlZCBzbGljZXMKKyAgICAgICAgZFsxOjI6MywgMToyOjNdID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMToyOjMsIDE6MjozXSwgMSkKKyAgICAgICAgZFsxOjI6MywgMToyOjNdICs9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6MjozLCAxOjI6M10sIDIpCisgICAgICAgIGRlbCBkWzE6MjozLCAxOjI6M10KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoc2xpY2UoMSwgMiwgMyksIHNsaWNlKDEsIDIsIDMpKSwgZCkKKyAgICAgICAgIyBFbGxpcHNpcworICAgICAgICBkWy4uLl0gPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsuLi5dLCAxKQorICAgICAgICBkWy4uLl0gKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbLi4uXSwgMikKKyAgICAgICAgZGVsIGRbLi4uXQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKEVsbGlwc2lzLCBkKQorICAgICAgICAjIFR1cGxlIG9mIEVsbGlwc2VzCisgICAgICAgIGRbLi4uLCAuLi5dID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbLi4uLCAuLi5dLCAxKQorICAgICAgICBkWy4uLiwgLi4uXSArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsuLi4sIC4uLl0sIDIpCisgICAgICAgIGRlbCBkWy4uLiwgLi4uXQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKChFbGxpcHNpcywgRWxsaXBzaXMpLCBkKQorCisgICAgZGVmIHRlc3RfbWFuZ2xpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIF9fbWFuZ2xlZCA9IDEKKyAgICAgICAgICAgICAgICBfX25vdF9tYW5nbGVkX18gPSAyCisgICAgICAgICAgICAgICAgaW1wb3J0IF9fbWFuZ2xlZF9tb2QKKyAgICAgICAgICAgICAgICBpbXBvcnQgX19wYWNrYWdlX18ubW9kdWxlCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiX0FfX21hbmdsZWQiLCBBLmYuZnVuY19jb2RlLmNvX3Zhcm5hbWVzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJfX25vdF9tYW5nbGVkX18iLCBBLmYuZnVuY19jb2RlLmNvX3Zhcm5hbWVzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJfQV9fbWFuZ2xlZF9tb2QiLCBBLmYuZnVuY19jb2RlLmNvX3Zhcm5hbWVzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJfX3BhY2thZ2VfXyIsIEEuZi5mdW5jX2NvZGUuY29fdmFybmFtZXMpCisKKyAgICBkZWYgdGVzdF9jb21waWxlX2FzdChzZWxmKToKKyAgICAgICAgZm5hbWUgPSBfX2ZpbGVfXworICAgICAgICBpZiBmbmFtZS5sb3dlcigpLmVuZHN3aXRoKCgncHljJywgJ3B5bycpKToKKyAgICAgICAgICAgIGZuYW1lID0gZm5hbWVbOi0xXQorICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZjb250ZW50cyA9IGYucmVhZCgpCisgICAgICAgIHNhbXBsZV9jb2RlID0gWworICAgICAgICAgICAgWyc8YXNzaWduPicsICd4ID0gNSddLAorICAgICAgICAgICAgWyc8cHJpbnQxPicsICdwcmludCAxJ10sCisgICAgICAgICAgICBbJzxwcmludHY+JywgJ3ByaW50IHYnXSwKKyAgICAgICAgICAgIFsnPHByaW50VHJ1ZT4nLCAncHJpbnQgVHJ1ZSddLAorICAgICAgICAgICAgWyc8cHJpbnRMaXN0PicsICdwcmludCBbXSddLAorICAgICAgICAgICAgWyc8aWZibG9jaz4nLCAiIiJpZiBUcnVlOlxuICAgIHBhc3NcbiIiIl0sCisgICAgICAgICAgICBbJzxmb3JibG9jaz4nLCAiIiJmb3IgbiBpbiBbMSwgMiwgM106XG4gICAgcHJpbnQgblxuIiIiXSwKKyAgICAgICAgICAgIFsnPGRlZmZ1bmM+JywgIiIiZGVmIGZvbygpOlxuICAgIHBhc3NcbmZvbygpXG4iIiJdLAorICAgICAgICAgICAgW2ZuYW1lLCBmY29udGVudHNdLAorICAgICAgICBdCisKKyAgICAgICAgZm9yIGZuYW1lLCBjb2RlIGluIHNhbXBsZV9jb2RlOgorICAgICAgICAgICAgY28xID0gY29tcGlsZShjb2RlLCAnJXMxJyAlIGZuYW1lLCAnZXhlYycpCisgICAgICAgICAgICBhc3QgPSBjb21waWxlKGNvZGUsICclczInICUgZm5hbWUsICdleGVjJywgX2FzdC5QeUNGX09OTFlfQVNUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoYXN0KSA9PSBfYXN0Lk1vZHVsZSkKKyAgICAgICAgICAgIGNvMiA9IGNvbXBpbGUoYXN0LCAnJXMzJyAlIGZuYW1lLCAnZXhlYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvMSwgY28yKQorICAgICAgICAgICAgIyB0aGUgY29kZSBvYmplY3QncyBmaWxlbmFtZSBjb21lcyBmcm9tIHRoZSBzZWNvbmQgY29tcGlsYXRpb24gc3RlcAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbzIuY29fZmlsZW5hbWUsICclczMnICUgZm5hbWUpCisKKyAgICAgICAgIyByYWlzZSBleGNlcHRpb24gd2hlbiBub2RlIHR5cGUgZG9lc24ndCBtYXRjaCB3aXRoIGNvbXBpbGUgbW9kZQorICAgICAgICBjbzEgPSBjb21waWxlKCdwcmludCAxJywgJzxzdHJpbmc+JywgJ2V4ZWMnLCBfYXN0LlB5Q0ZfT05MWV9BU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGlsZSwgY28xLCAnPGFzdD4nLCAnZXZhbCcpCisKKyAgICAgICAgIyByYWlzZSBleGNlcHRpb24gd2hlbiBub2RlIHR5cGUgaXMgbm8gc3RhcnQgbm9kZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBpbGUsIF9hc3QuSWYoKSwgJzxhc3Q+JywgJ2V4ZWMnKQorCisgICAgICAgICMgcmFpc2UgZXhjZXB0aW9uIHdoZW4gbm9kZSBoYXMgaW52YWxpZCBjaGlsZHJlbgorICAgICAgICBhc3QgPSBfYXN0Lk1vZHVsZSgpCisgICAgICAgIGFzdC5ib2R5ID0gW19hc3QuQm9vbE9wKCldCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGlsZSwgYXN0LCAnPGFzdD4nLCAnZXhlYycpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFNwZWNpZmljcykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29tcGlsZWFsbC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmNjk4OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkKQEAgLTAsMCArMSw4MCBAQAoraW1wb3J0IGNvbXBpbGVhbGwKK2ltcG9ydCBpbXAKK2ltcG9ydCBvcworaW1wb3J0IHB5X2NvbXBpbGUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCB0ZW1wZmlsZQorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIENvbXBpbGVhbGxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHNlbGYuc291cmNlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdfdGVzdC5weScpCisgICAgICAgIHNlbGYuYmNfcGF0aCA9IHNlbGYuc291cmNlX3BhdGggKyAoJ2MnIGlmIF9fZGVidWdfXyBlbHNlICdvJykKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuc291cmNlX3BhdGgsICd3JykgYXMgZmlsZToKKyAgICAgICAgICAgIGZpbGUud3JpdGUoJ3ggPSAxMjNcbicpCisgICAgICAgIHNlbGYuc291cmNlX3BhdGgyID0gb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAnX3Rlc3QyLnB5JykKKyAgICAgICAgc2VsZi5iY19wYXRoMiA9IHNlbGYuc291cmNlX3BhdGgyICsgKCdjJyBpZiBfX2RlYnVnX18gZWxzZSAnbycpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLnNvdXJjZV9wYXRoLCBzZWxmLnNvdXJjZV9wYXRoMikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpcmVjdG9yeSkKKworICAgIGRlZiBkYXRhKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5iY19wYXRoLCAncmInKSBhcyBmaWxlOgorICAgICAgICAgICAgZGF0YSA9IGZpbGUucmVhZCg4KQorICAgICAgICBtdGltZSA9IGludChvcy5zdGF0KHNlbGYuc291cmNlX3BhdGgpLnN0X210aW1lKQorICAgICAgICBjb21wYXJlID0gc3RydWN0LnBhY2soJzw0c2wnLCBpbXAuZ2V0X21hZ2ljKCksIG10aW1lKQorICAgICAgICByZXR1cm4gZGF0YSwgY29tcGFyZQorCisgICAgZGVmIHJlY3JlYXRpb25fY2hlY2soc2VsZiwgbWV0YWRhdGEpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGNvbXBpbGVhbGwgcmVjcmVhdGVzIGJ5dGVjb2RlIHdoZW4gdGhlIG5ldyBtZXRhZGF0YSBpcworICAgICAgICB1c2VkLiIiIgorICAgICAgICBpZiBub3QgaGFzYXR0cihvcywgJ3N0YXQnKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5zb3VyY2VfcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgqc2VsZi5kYXRhKCkpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmJjX3BhdGgsICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICBiYyA9IGZpbGUucmVhZCgpW2xlbihtZXRhZGF0YSk6XQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5iY19wYXRoLCAnd2InKSBhcyBmaWxlOgorICAgICAgICAgICAgZmlsZS53cml0ZShtZXRhZGF0YSkKKyAgICAgICAgICAgIGZpbGUud3JpdGUoYmMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoKnNlbGYuZGF0YSgpKQorICAgICAgICBjb21waWxlYWxsLmNvbXBpbGVfZGlyKHNlbGYuZGlyZWN0b3J5LCBmb3JjZT1GYWxzZSwgcXVpZXQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCpzZWxmLmRhdGEoKSkKKworICAgIGRlZiB0ZXN0X210aW1lKHNlbGYpOgorICAgICAgICAjIFRlc3QgYSBjaGFuZ2UgaW4gbXRpbWUgbGVhZHMgdG8gYSBuZXcgLnB5Yy4KKyAgICAgICAgc2VsZi5yZWNyZWF0aW9uX2NoZWNrKHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wLmdldF9tYWdpYygpLCAxKSkKKworICAgIGRlZiB0ZXN0X21hZ2ljX251bWJlcihzZWxmKToKKyAgICAgICAgIyBUZXN0IGEgY2hhbmdlIGluIG10aW1lIGxlYWRzIHRvIGEgbmV3IC5weWMuCisgICAgICAgIHNlbGYucmVjcmVhdGlvbl9jaGVjayhiJ1wwXDBcMFwwJykKKworICAgIGRlZiB0ZXN0X2NvbXBpbGVfZmlsZXMoc2VsZik6CisgICAgICAgICMgVGVzdCBjb21waWxpbmcgYSBzaW5nbGUgZmlsZSwgYW5kIGNvbXBsZXRlIGRpcmVjdG9yeQorICAgICAgICBmb3IgZm4gaW4gKHNlbGYuYmNfcGF0aCwgc2VsZi5iY19wYXRoMik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY29tcGlsZWFsbC5jb21waWxlX2ZpbGUoc2VsZi5zb3VyY2VfcGF0aCwgZm9yY2U9RmFsc2UsIHF1aWV0PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShzZWxmLmJjX3BhdGgpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3Qgb3MucGF0aC5pc2ZpbGUoc2VsZi5iY19wYXRoMikpCisgICAgICAgIG9zLnVubGluayhzZWxmLmJjX3BhdGgpCisgICAgICAgIGNvbXBpbGVhbGwuY29tcGlsZV9kaXIoc2VsZi5kaXJlY3RvcnksIGZvcmNlPUZhbHNlLCBxdWlldD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoc2VsZi5iY19wYXRoKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb3MucGF0aC5pc2ZpbGUoc2VsZi5iY19wYXRoMikpCisgICAgICAgIG9zLnVubGluayhzZWxmLmJjX3BhdGgpCisgICAgICAgIG9zLnVubGluayhzZWxmLmJjX3BhdGgyKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDb21waWxlYWxsVGVzdHMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29tcGlsZXIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb21waWxlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTk4ODExCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29tcGlsZXIucHkKQEAgLTAsMCArMSwzMTcgQEAKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAorY29tcGlsZXIgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdjb21waWxlcicsIGRlcHJlY2F0ZWQ9VHJ1ZSkKK2Zyb20gY29tcGlsZXIuYXN0IGltcG9ydCBmbGF0dGVuCitpbXBvcnQgb3MsIHN5cywgdGltZSwgdW5pdHRlc3QKK2Zyb20gcmFuZG9tIGltcG9ydCByYW5kb20KK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKKyMgSG93IG11Y2ggdGltZSBpbiBzZWNvbmRzIGNhbiBwYXNzIGJlZm9yZSB3ZSBwcmludCBhICdTdGlsbCB3b3JraW5nJyBtZXNzYWdlLgorX1BSSU5UX1dPUktJTkdfTVNHX0lOVEVSVkFMID0gNSAqIDYwCisKK2NsYXNzIFRyaXZpYWxDb250ZXh0KG9iamVjdCk6CisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKToKKyAgICAgICAgcGFzcworCitjbGFzcyBDb21waWxlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RDb21waWxlTGlicmFyeShzZWxmKToKKyAgICAgICAgIyBBIHNpbXBsZSBidXQgbGFyZ2UgdGVzdC4gIENvbXBpbGUgYWxsIHRoZSBjb2RlIGluIHRoZQorICAgICAgICAjIHN0YW5kYXJkIGxpYnJhcnkgYW5kIGl0cyB0ZXN0IHN1aXRlLiAgVGhpcyBkb2Vzbid0IHZlcmlmeQorICAgICAgICAjIHRoYXQgYW55IG9mIHRoZSBjb2RlIGlzIGNvcnJlY3QsIG1lcmVseSB0aGUgY29tcGlsZXIgaXMgYWJsZQorICAgICAgICAjIHRvIGdlbmVyYXRlIHNvbWUga2luZCBvZiBjb2RlIGZvciBpdC4KKworICAgICAgICBuZXh0X3RpbWUgPSB0aW1lLnRpbWUoKSArIF9QUklOVF9XT1JLSU5HX01TR19JTlRFUlZBTAorICAgICAgICAjIHdhcm5pbmc6IGlmICdvcycgb3IgJ3Rlc3Rfc3VwcG9ydCcgYXJlIG1vdmVkIGluIHNvbWUgb3RoZXIgZGlyLAorICAgICAgICAjIHRoZXkgc2hvdWxkIGJlIGNoYW5nZWQgaGVyZS4KKyAgICAgICAgbGliZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLl9fZmlsZV9fKQorICAgICAgICB0ZXN0ZGlyID0gb3MucGF0aC5kaXJuYW1lKHRlc3QudGVzdF9zdXBwb3J0Ll9fZmlsZV9fKQorCisgICAgICAgIGZvciBkaXIgaW4gW3Rlc3RkaXJdOgorICAgICAgICAgICAgZm9yIGJhc2VuYW1lIGluICJ0ZXN0X29zLnB5Iiw6CisgICAgICAgICAgICAgICAgIyBQcmludCBzdGlsbCB3b3JraW5nIG1lc3NhZ2Ugc2luY2UgdGhpcyB0ZXN0IGNhbiBiZSByZWFsbHkgc2xvdworICAgICAgICAgICAgICAgIGlmIG5leHRfdGltZSA8PSB0aW1lLnRpbWUoKToKKyAgICAgICAgICAgICAgICAgICAgbmV4dF90aW1lID0gdGltZS50aW1lKCkgKyBfUFJJTlRfV09SS0lOR19NU0dfSU5URVJWQUwKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuX19zdGRvdXRfXywgXAorICAgICAgICAgICAgICAgICAgICAgICAnICB0ZXN0Q29tcGlsZUxpYnJhcnkgc3RpbGwgd29ya2luZywgYmUgcGF0aWVudC4uLicKKyAgICAgICAgICAgICAgICAgICAgc3lzLl9fc3Rkb3V0X18uZmx1c2goKQorCisgICAgICAgICAgICAgICAgaWYgbm90IGJhc2VuYW1lLmVuZHN3aXRoKCIucHkiKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBub3QgVEVTVF9BTEwgYW5kIHJhbmRvbSgpIDwgMC45ODoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGRpciwgYmFzZW5hbWUpCisgICAgICAgICAgICAgICAgaWYgdGVzdC50ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgImNvbXBpbGluZyIsIHBhdGgKKyAgICAgICAgICAgICAgICBmID0gb3BlbihwYXRoLCAiVSIpCisgICAgICAgICAgICAgICAgYnVmID0gZi5yZWFkKCkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBpZiAiYmFkc3ludGF4IiBpbiBiYXNlbmFtZSBvciAiYmFkX2NvZGluZyIgaW4gYmFzZW5hbWU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlci5jb21waWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGJhc2VuYW1lLCAiZXhlYyIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIuY29tcGlsZShidWYsIGJhc2VuYW1lLCAiZXhlYyIpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gbGlzdChlLmFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZCgiaW4gZmlsZSAlc10iICUgYmFzZW5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAjYXJnc1swXSArPSAiW2luIGZpbGUgJXNdIiAlIGJhc2VuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICBlLmFyZ3MgPSB0dXBsZShhcmdzKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiB0ZXN0TmV3Q2xhc3NTeW50YXgoc2VsZik6CisgICAgICAgIGNvbXBpbGVyLmNvbXBpbGUoImNsYXNzIGZvbygpOnBhc3NcblxuIiwiPHN0cmluZz4iLCJleGVjIikKKworICAgIGRlZiB0ZXN0WWllbGRFeHByKHNlbGYpOgorICAgICAgICBjb21waWxlci5jb21waWxlKCJkZWYgZygpOiB5aWVsZFxuXG4iLCAiPHN0cmluZz4iLCAiZXhlYyIpCisKKyAgICBkZWYgdGVzdEtleXdvcmRBZnRlclN0YXJhcmdzKHNlbGYpOgorICAgICAgICBkZWYgZigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYXJncywga3dhcmdzKSwgKCgyLDMpLCB7J3gnOiAxLCAneSc6IDR9KSkKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ2YoeD0xLCAqKDIsIDMpLCB5PTQpJywgJzxzdHJpbmc+JywgJ2V4ZWMnKQorICAgICAgICBleGVjIGMgaW4geydmJzogZn0KKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZXIucGFyc2UsICJmb28oYT0xLCBiKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlci5wYXJzZSwgImZvbygxLCAqYXJncywgMykiKQorCisgICAgZGVmIHRlc3RUcnlFeGNlcHRGaW5hbGx5KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBleGNlcHQgYW5kIGZpbmFsbHkgY2xhdXNlcyBpbiBvbmUgdHJ5IHN0bXQgYXJlIHJlY29nbml6ZWQKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoInRyeTpcbiAxLy8wXG5leGNlcHQ6XG4gZSA9IDFcbmZpbmFsbHk6XG4gZiA9IDEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHN0cmluZz4iLCAiZXhlYyIpCisgICAgICAgIGRjdCA9IHt9CisgICAgICAgIGV4ZWMgYyBpbiBkY3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY3QuZ2V0KCdlJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGN0LmdldCgnZicpLCAxKQorCisgICAgZGVmIHRlc3REZWZhdWx0QXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGVyLnBhcnNlLCAiZGVmIGZvbyhhPTEsIGIpOiBwYXNzIikKKworICAgIGRlZiB0ZXN0RG9jc3RyaW5ncyhzZWxmKToKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJyJkb2MiJywgJzxzdHJpbmc+JywgJ2V4ZWMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdfX2RvY19fJywgYy5jb19uYW1lcykKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ2RlZiBmKCk6XG4gImRvYyInLCAnPHN0cmluZz4nLCAnZXhlYycpCisgICAgICAgIGcgPSB7fQorICAgICAgICBleGVjIGMgaW4gZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdbJ2YnXS5fX2RvY19fLCAiZG9jIikKKworICAgIGRlZiB0ZXN0TGluZU5vKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhbGwgbm9kZXMgZXhjZXB0IE1vZHVsZSBoYXZlIGEgY29ycmVjdCBsaW5lbm8gYXR0cmlidXRlLgorICAgICAgICBmaWxlbmFtZSA9IF9fZmlsZV9fCisgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCgiLnB5YyIsICIucHlvIikpOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZVs6LTFdCisgICAgICAgIHRyZWUgPSBjb21waWxlci5wYXJzZUZpbGUoZmlsZW5hbWUpCisgICAgICAgIHNlbGYuY2hlY2tfbGluZW5vKHRyZWUpCisKKyAgICBkZWYgY2hlY2tfbGluZW5vKHNlbGYsIG5vZGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19saW5lbm8obm9kZSkKKyAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgorICAgICAgICAgICAgcHJpbnQgbm9kZS5fX2NsYXNzX18sIG5vZGUubGluZW5vCisgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIF9jaGVja19saW5lbm8oc2VsZiwgbm9kZSk6CisgICAgICAgIGlmIG5vdCBub2RlLl9fY2xhc3NfXyBpbiBOT0xJTkVOTzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShub2RlLmxpbmVubywgaW50LAorICAgICAgICAgICAgICAgICJsaW5lbm89JXMgb24gJXMiICUgKG5vZGUubGluZW5vLCBub2RlLl9fY2xhc3NfXykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm9kZS5saW5lbm8gPiAwLAorICAgICAgICAgICAgICAgICJsaW5lbm89JXMgb24gJXMiICUgKG5vZGUubGluZW5vLCBub2RlLl9fY2xhc3NfXykpCisgICAgICAgIGZvciBjaGlsZCBpbiBub2RlLmdldENoaWxkTm9kZXMoKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfbGluZW5vKGNoaWxkKQorCisgICAgZGVmIHRlc3RGbGF0dGVuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsYXR0ZW4oWzEsIFsyXV0pLCBbMSwgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxhdHRlbigoMSwgKDIsKSkpLCBbMSwgMl0pCisKKyAgICBkZWYgdGVzdE5lc3RlZFNjb3BlKHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgnZGVmIGcoKTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBhID0gMVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGRlZiBmKCk6IHJldHVybiBhICsgMlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIHJldHVybiBmKClcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3VsdCA9IGcoKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3RyaW5nPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGVjJykKKyAgICAgICAgZGN0ID0ge30KKyAgICAgICAgZXhlYyBjIGluIGRjdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjdC5nZXQoJ3Jlc3VsdCcpLCAzKQorCisgICAgZGVmIHRlc3RHZW5FeHAoc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCdsaXN0KChpLGopIGZvciBpIGluIHJhbmdlKDMpIGlmIGkgPCAzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICBmb3IgaiBpbiByYW5nZSg0KSBpZiBqID4gMiknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0cmluZz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXZhbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjKSwgWygwLCAzKSwgKDEsIDMpLCAoMiwgMyldKQorCisgICAgZGVmIHRlc3RTZXRMaXRlcmFsKHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgnezEsIDIsIDN9JywgJzxzdHJpbmc+JywgJ2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYyksIHsxLDIsM30pCisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCd7MSwgMiwgMyx9JywgJzxzdHJpbmc+JywgJ2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYyksIHsxLDIsM30pCisKKyAgICBkZWYgdGVzdERpY3RMaXRlcmFsKHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgnezE6MiwgMjozLCAzOjR9JywgJzxzdHJpbmc+JywgJ2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYyksIHsxOjIsIDI6MywgMzo0fSkKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ3sxOjIsIDI6MywgMzo0LH0nLCAnPHN0cmluZz4nLCAnZXZhbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjKSwgezE6MiwgMjozLCAzOjR9KQorCisgICAgZGVmIHRlc3RTZXRDb21wKHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgne3ggZm9yIHggaW4gcmFuZ2UoMSwgNCl9JywgJzxzdHJpbmc+JywgJ2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYyksIHsxLCAyLCAzfSkKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ3t4ICogeSBmb3IgeCBpbiByYW5nZSgzKSBpZiB4ICE9IDAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgZm9yIHkgaW4gcmFuZ2UoNCkgaWYgeSAhPSAwfScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3RyaW5nPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGMpLCB7MSwgMiwgMywgNCwgNn0pCisKKyAgICBkZWYgdGVzdERpY3RDb21wKHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZXIuY29tcGlsZSgne3g6eCsxIGZvciB4IGluIHJhbmdlKDEsIDQpfScsICc8c3RyaW5nPicsICdldmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGMpLCB7MToyLCAyOjMsIDM6NH0pCisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCd7KHgsIHkpIDogeSBmb3IgeCBpbiByYW5nZSgyKSBpZiB4ICE9IDAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICBmb3IgeSBpbiByYW5nZSgzKSBpZiB5ICE9IDB9JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHJpbmc+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoYyksIHsoMSwgMik6IDIsICgxLCAxKTogMX0pCisKKyAgICBkZWYgdGVzdFdpdGgoc2VsZik6CisgICAgICAgICMgU0YgYnVnIDE2MzgyNDMKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnRcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZiBmKCk6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgd2l0aCBUcml2aWFsQ29udGV4dCgpOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICByZXR1cm4gMVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzdWx0ID0gZigpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHJpbmc+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4ZWMnICkKKyAgICAgICAgZGN0ID0geydUcml2aWFsQ29udGV4dCc6IFRyaXZpYWxDb250ZXh0fQorICAgICAgICBleGVjIGMgaW4gZGN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGN0LmdldCgncmVzdWx0JyksIDEpCisKKyAgICBkZWYgdGVzdFdpdGhBc3Moc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlci5jb21waWxlKCdmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWYgZigpOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIHdpdGggVHJpdmlhbENvbnRleHQoKSBhcyB0YzpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgcmV0dXJuIDFcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3VsdCA9IGYoKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3RyaW5nPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGVjJyApCisgICAgICAgIGRjdCA9IHsnVHJpdmlhbENvbnRleHQnOiBUcml2aWFsQ29udGV4dH0KKyAgICAgICAgZXhlYyBjIGluIGRjdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjdC5nZXQoJ3Jlc3VsdCcpLCAxKQorCisgICAgZGVmIHRlc3RXaXRoTXVsdChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgY2xhc3MgQ3R4OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgorICAgICAgICAgICAgICAgIHNlbGYubiA9IG4KKyAgICAgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZChzZWxmLm4pCisgICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnRcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZiBmKCk6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgd2l0aCBDdHgoMSkgYXMgdGMsIEN0eCgyKSBhcyB0YzI6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIHJldHVybiAxXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXN1bHQgPSBmKCknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0cmluZz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhlYycgKQorICAgICAgICBkY3QgPSB7J0N0eCc6IEN0eH0KKyAgICAgICAgZXhlYyBjIGluIGRjdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjdC5nZXQoJ3Jlc3VsdCcpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgWzEsIDJdKQorCisgICAgZGVmIHRlc3RHbG9iYWwoc2VsZik6CisgICAgICAgIGNvZGUgPSBjb21waWxlci5jb21waWxlKCdnbG9iYWwgeFxueD0xJywgJzxzdHJpbmc+JywgJ2V4ZWMnKQorICAgICAgICBkMSA9IHsnX19idWlsdGluc19fJzoge319CisgICAgICAgIGQyID0ge30KKyAgICAgICAgZXhlYyBjb2RlIGluIGQxLCBkMgorICAgICAgICAjIHggc2hvdWxkIGJlIGluIHRoZSBnbG9iYWxzIGRpY3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5nZXQoJ3gnKSwgMSkKKworICAgIGRlZiB0ZXN0UHJpbnRGdW5jdGlvbihzZWxmKToKKyAgICAgICAgYyA9IGNvbXBpbGVyLmNvbXBpbGUoJ2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb25cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByaW50KCJhIiwgImIiLCBzZXA9IioqIiwgZW5kPSIrKyIsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlPW91dHB1dCknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0cmluZz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhlYycgKQorICAgICAgICBkY3QgPSB7J291dHB1dCc6IFN0cmluZ0lPKCl9CisgICAgICAgIGV4ZWMgYyBpbiBkY3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY3RbJ291dHB1dCddLmdldHZhbHVlKCksICdhKipiKysnKQorCisgICAgZGVmIF90ZXN0RXJyRW5jKHNlbGYsIHNyYywgdGV4dCwgb2Zmc2V0KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29tcGlsZShzcmMsICIiLCAiZXhlYyIpCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5vZmZzZXQsIG9mZnNldCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS50ZXh0LCB0ZXh0KQorCisgICAgZGVmIHRlc3RTb3VyY2VDb2RlRW5jb2RpbmdzRXJyb3Ioc2VsZik6CisgICAgICAgICMgVGVzdCBTeW50YXhFcnJvciB3aXRoIGVuY29kaW5nIGRlZmluaXRpb24KKyAgICAgICAgc2ppcyA9ICJwcmludCAnXHg4M1x4NzBceDgzXHg0M1x4ODNceDVjXHg4M1x4OTMnLCAnXG4iCisgICAgICAgIGFzY2lpID0gInByaW50ICcxMjM0NTY3OCcsICdcbiIKKyAgICAgICAgZW5jZGVmID0gIiMhIC0qLSBjb2Rpbmc6IFNoaWZ0SklTIC0qLVxuIgorCisgICAgICAgICMgYXNjaWkgc291cmNlIHdpdGhvdXQgZW5jZGVmCisgICAgICAgIHNlbGYuX3Rlc3RFcnJFbmMoYXNjaWksIGFzY2lpLCAxOSkKKworICAgICAgICAjIGFzY2lpIHNvdXJjZSB3aXRoIGVuY2RlZgorICAgICAgICBzZWxmLl90ZXN0RXJyRW5jKGVuY2RlZithc2NpaSwgYXNjaWksIDE5KQorCisgICAgICAgICMgbm9uLWFzY2lpIHNvdXJjZSB3aXRoIGVuY2RlZgorICAgICAgICBzZWxmLl90ZXN0RXJyRW5jKGVuY2RlZitzamlzLCBzamlzLCAxOSkKKworICAgICAgICAjIFNoaWZ0SklTIHNvdXJjZSB3aXRob3V0IGVuY2RlZgorICAgICAgICBzZWxmLl90ZXN0RXJyRW5jKHNqaXMsIHNqaXMsIDE5KQorCisKK05PTElORU5PID0gKGNvbXBpbGVyLmFzdC5Nb2R1bGUsIGNvbXBpbGVyLmFzdC5TdG10LCBjb21waWxlci5hc3QuRGlzY2FyZCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBjb2RlIGJlbG93IGlzIGp1c3QgdXNlZCB0byB0cmlnZ2VyIHNvbWUgcG9zc2libGUgZXJyb3JzLCBmb3IgdGhlIGJlbmVmaXQgb2YKKyMgdGVzdExpbmVObworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBUb3RvOgorICAgICIiImRvY3N0cmluZyIiIgorICAgIHBhc3MKKworYSwgYiA9IDIsIDMKK1tjLCBkXSA9IDUsIDYKK2wgPSBbKHgsIHkpIGZvciB4LCB5IGluIHppcChyYW5nZSg1KSwgcmFuZ2UoNSwxMCkpXQorbFswXQorbFszOjRdCitkID0geydhJzogMn0KK2QgPSB7fQorZCA9IHt4OiB5IGZvciB4LCB5IGluIHppcChyYW5nZSg1KSwgcmFuZ2UoNSwxMCkpfQorcyA9IHt4IGZvciB4IGluIHJhbmdlKDEwKX0KK3MgPSB7MX0KK3QgPSAoKQordCA9ICgxLCAyKQorbCA9IFtdCitsID0gWzEsIDJdCitpZiBsOgorICAgIHBhc3MKK2Vsc2U6CisgICAgYSwgYiA9IGIsIGEKKwordHJ5OgorICAgIHByaW50IHlvCitleGNlcHQ6CisgICAgeW8gPSAzCitlbHNlOgorICAgIHlvICs9IDMKKwordHJ5OgorICAgIGEgKz0gYgorZmluYWxseToKKyAgICBiID0gMAorCitmcm9tIG1hdGggaW1wb3J0ICoKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgdGVzdF9tYWluKCk6CisgICAgZ2xvYmFsIFRFU1RfQUxMCisgICAgVEVTVF9BTEwgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCJjcHUiKQorICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDb21waWxlclRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvbXBsZXgucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb21wbGV4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZTg2NzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb21wbGV4LnB5CkBAIC0wLDAgKzEsNjUxIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2Zyb20gcmFuZG9tIGltcG9ydCByYW5kb20KK2Zyb20gbWF0aCBpbXBvcnQgYXRhbjIsIGlzbmFuLCBjb3B5c2lnbgorCitJTkYgPSBmbG9hdCgiaW5mIikKK05BTiA9IGZsb2F0KCJuYW4iKQorIyBUaGVzZSB0ZXN0cyBlbnN1cmUgdGhhdCBjb21wbGV4IG1hdGggZG9lcyB0aGUgcmlnaHQgdGhpbmcKKworY2xhc3MgQ29tcGxleFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGFzc2VydEFsbW9zdEVxdWFsKHNlbGYsIGEsIGIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGEsIGNvbXBsZXgpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShiLCBjb21wbGV4KToKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbChzZWxmLCBhLnJlYWwsIGIucmVhbCkKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbChzZWxmLCBhLmltYWcsIGIuaW1hZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWwoc2VsZiwgYS5yZWFsLCBiKQorICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsKHNlbGYsIGEuaW1hZywgMC4pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGIsIGNvbXBsZXgpOgorICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsKHNlbGYsIGEsIGIucmVhbCkKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbChzZWxmLCAwLiwgYi5pbWFnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbChzZWxmLCBhLCBiKQorCisgICAgZGVmIGFzc2VydENsb3NlQWJzKHNlbGYsIHgsIHksIGVwcz0xZS05KToKKyAgICAgICAgIiIiUmV0dXJuIHRydWUgaWZmIGZsb2F0cyB4IGFuZCB5ICJhcmUgY2xvc2VcIiIiIgorICAgICAgICAjIHB1dCB0aGUgb25lIHdpdGggbGFyZ2VyIG1hZ25pdHVkZSBzZWNvbmQKKyAgICAgICAgaWYgYWJzKHgpID4gYWJzKHkpOgorICAgICAgICAgICAgeCwgeSA9IHksIHgKKyAgICAgICAgaWYgeSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIGFicyh4KSA8IGVwcworICAgICAgICBpZiB4ID09IDA6CisgICAgICAgICAgICByZXR1cm4gYWJzKHkpIDwgZXBzCisgICAgICAgICMgY2hlY2sgdGhhdCByZWxhdGl2ZSBkaWZmZXJlbmNlIDwgZXBzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhYnMoKHgteSkveSkgPCBlcHMpCisKKyAgICBkZWYgYXNzZXJ0RmxvYXRzQXJlSWRlbnRpY2FsKHNlbGYsIHgsIHkpOgorICAgICAgICAiIiJhc3NlcnQgdGhhdCBmbG9hdHMgeCBhbmQgeSBhcmUgaWRlbnRpY2FsLCBpbiB0aGUgc2Vuc2UgdGhhdDoKKyAgICAgICAgKDEpIGJvdGggeCBhbmQgeSBhcmUgbmFucywgb3IKKyAgICAgICAgKDIpIGJvdGggeCBhbmQgeSBhcmUgaW5maW5pdGllcywgd2l0aCB0aGUgc2FtZSBzaWduLCBvcgorICAgICAgICAoMykgYm90aCB4IGFuZCB5IGFyZSB6ZXJvcywgd2l0aCB0aGUgc2FtZSBzaWduLCBvcgorICAgICAgICAoNCkgeCBhbmQgeSBhcmUgYm90aCBmaW5pdGUgYW5kIG5vbnplcm8sIGFuZCB4ID09IHkKKworICAgICAgICAiIiIKKyAgICAgICAgbXNnID0gJ2Zsb2F0cyB7IXJ9IGFuZCB7IXJ9IGFyZSBub3QgaWRlbnRpY2FsJworCisgICAgICAgIGlmIGlzbmFuKHgpIG9yIGlzbmFuKHkpOgorICAgICAgICAgICAgaWYgaXNuYW4oeCkgYW5kIGlzbmFuKHkpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbGlmIHggPT0geToKKyAgICAgICAgICAgIGlmIHggIT0gMC4wOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgIyBib3RoIHplcm87IGNoZWNrIHRoYXQgc2lnbnMgbWF0Y2gKKyAgICAgICAgICAgIGVsaWYgY29weXNpZ24oMS4wLCB4KSA9PSBjb3B5c2lnbigxLjAsIHkpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2cgKz0gJzogemVyb3MgaGF2ZSBkaWZmZXJlbnQgc2lnbnMnCisgICAgICAgIHNlbGYuZmFpbChtc2cuZm9ybWF0KHgsIHkpKQorCisgICAgZGVmIGFzc2VydENsb3NlKHNlbGYsIHgsIHksIGVwcz0xZS05KToKKyAgICAgICAgIiIiUmV0dXJuIHRydWUgaWZmIGNvbXBsZXhlcyB4IGFuZCB5ICJhcmUgY2xvc2VcIiIiIgorICAgICAgICBzZWxmLmFzc2VydENsb3NlQWJzKHgucmVhbCwgeS5yZWFsLCBlcHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Q2xvc2VBYnMoeC5pbWFnLCB5LmltYWcsIGVwcykKKworICAgIGRlZiBjaGVja19kaXYoc2VsZiwgeCwgeSk6CisgICAgICAgICIiIkNvbXB1dGUgY29tcGxleCB6PXgqeSwgYW5kIGNoZWNrIHRoYXQgei94PT15IGFuZCB6L3k9PXguIiIiCisgICAgICAgIHogPSB4ICogeQorICAgICAgICBpZiB4ICE9IDA6CisgICAgICAgICAgICBxID0geiAvIHgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q2xvc2UocSwgeSkKKyAgICAgICAgICAgIHEgPSB6Ll9fZGl2X18oeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q2xvc2UocSwgeSkKKyAgICAgICAgICAgIHEgPSB6Ll9fdHJ1ZWRpdl9fKHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydENsb3NlKHEsIHkpCisgICAgICAgIGlmIHkgIT0gMDoKKyAgICAgICAgICAgIHEgPSB6IC8geQorICAgICAgICAgICAgc2VsZi5hc3NlcnRDbG9zZShxLCB4KQorICAgICAgICAgICAgcSA9IHouX19kaXZfXyh5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRDbG9zZShxLCB4KQorICAgICAgICAgICAgcSA9IHouX190cnVlZGl2X18oeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q2xvc2UocSwgeCkKKworICAgIGRlZiB0ZXN0X2RpdihzZWxmKToKKyAgICAgICAgc2ltcGxlX3JlYWwgPSBbZmxvYXQoaSkgZm9yIGkgaW4geHJhbmdlKC01LCA2KV0KKyAgICAgICAgc2ltcGxlX2NvbXBsZXggPSBbY29tcGxleCh4LCB5KSBmb3IgeCBpbiBzaW1wbGVfcmVhbCBmb3IgeSBpbiBzaW1wbGVfcmVhbF0KKyAgICAgICAgZm9yIHggaW4gc2ltcGxlX2NvbXBsZXg6CisgICAgICAgICAgICBmb3IgeSBpbiBzaW1wbGVfY29tcGxleDoKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2Rpdih4LCB5KQorCisgICAgICAgICMgQSBuYWl2ZSBjb21wbGV4IGRpdmlzaW9uIGFsZ29yaXRobSAoc3VjaCBhcyBpbiAyLjApIGlzIHZlcnkgcHJvbmUgdG8KKyAgICAgICAgIyBub25zZW5zZSBlcnJvcnMgZm9yIHRoZXNlIChvdmVyZmxvd3MgYW5kIHVuZGVyZmxvd3MpLgorICAgICAgICBzZWxmLmNoZWNrX2Rpdihjb21wbGV4KDFlMjAwLCAxZTIwMCksIDErMGopCisgICAgICAgIHNlbGYuY2hlY2tfZGl2KGNvbXBsZXgoMWUtMjAwLCAxZS0yMDApLCAxKzBqKQorCisgICAgICAgICMgSnVzdCBmb3IgZnVuLgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZGl2KGNvbXBsZXgocmFuZG9tKCksIHJhbmRvbSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXgocmFuZG9tKCksIHJhbmRvbSgpKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgY29tcGxleC5fX2Rpdl9fLCAxKzFqLCAwKzBqKQorICAgICAgICAjIEZJWE1FOiBUaGUgZm9sbG93aW5nIGN1cnJlbnRseSBjcmFzaGVzIG9uIEFscGhhCisgICAgICAgICMgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcG93LCAxZTIwMCsxaiwgMWUyMDArMWopCisKKyAgICBkZWYgdGVzdF90cnVlZGl2KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXguX190cnVlZGl2X18oMiswaiwgMSsxaiksIDEtMWopCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBjb21wbGV4Ll9fdHJ1ZWRpdl9fLCAxKzFqLCAwKzBqKQorCisgICAgZGVmIHRlc3RfZmxvb3JkaXYoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleC5fX2Zsb29yZGl2X18oMyswaiwgMS41KzBqKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGNvbXBsZXguX19mbG9vcmRpdl9fLCAzKzBqLCAwKzBqKQorCisgICAgZGVmIHRlc3RfY29lcmNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBjb21wbGV4Ll9fY29lcmNlX18sIDErMWosIDFMPDwxMDAwMCkKKworICAgIGRlZiB0ZXN0X25vX2ltcGxpY2l0X2NvZXJjZShzZWxmKToKKyAgICAgICAgIyBQeXRob24gMi43IHJlbW92ZWQgaW1wbGljaXQgY29lcmNpb24gZnJvbSB0aGUgY29tcGxleCB0eXBlCisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2NvZXJjZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZQorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgICAgIGEgPSBBKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgKyAyLjBqKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA8IDIuMGopCisKKyAgICBkZWYgdGVzdF9yaWNoY29tcGFyZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4Ll9fZXFfXygxKzFqLCAxTDw8MTAwMDApLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4Ll9fbHRfXygxKzFqLCBOb25lKSwgTm90SW1wbGVtZW50ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29tcGxleC5fX2VxX18oMSsxaiwgMSsxaiksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29tcGxleC5fX2VxX18oMSsxaiwgMisyaiksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKGNvbXBsZXguX19uZV9fKDErMWosIDErMWopLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb21wbGV4Ll9fbmVfXygxKzFqLCAyKzJqKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4Ll9fbHRfXywgMSsxaiwgMisyaikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4Ll9fbGVfXywgMSsxaiwgMisyaikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4Ll9fZ3RfXywgMSsxaiwgMisyaikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4Ll9fZ2VfXywgMSsxaiwgMisyaikKKworICAgIGRlZiB0ZXN0X3JpY2hjb21wYXJlX2JvdW5kYXJpZXMoc2VsZik6CisgICAgICAgIGRlZiBjaGVjayhuLCBkZWx0YXMsIGlzX2VxdWFsLCBpbWFnID0gMC4wKToKKyAgICAgICAgICAgIGZvciBkZWx0YSBpbiBkZWx0YXM6CisgICAgICAgICAgICAgICAgaSA9IG4gKyBkZWx0YQorICAgICAgICAgICAgICAgIHogPSBjb21wbGV4KGksIGltYWcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjb21wbGV4Ll9fZXFfXyh6LCBpKSwgaXNfZXF1YWwoZGVsdGEpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29tcGxleC5fX25lX18oeiwgaSksIG5vdCBpc19lcXVhbChkZWx0YSkpCisgICAgICAgICMgRm9yIElFRUUtNzU0IGRvdWJsZXMgdGhlIGZvbGxvd2luZyBzaG91bGQgaG9sZDoKKyAgICAgICAgIyAgICB4IGluIFsyICoqICg1MiArIGkpLCAyICoqICg1MyArIGkgKyAxKV0gLT4geCBtb2QgMiAqKiBpID09IDAKKyAgICAgICAgIyB3aGVyZSB0aGUgaW50ZXJ2YWwgaXMgcmVwcmVzZW50YWJsZSwgb2YgY291cnNlLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAxMCk6CisgICAgICAgICAgICBwb3cgPSA1MiArIGkKKyAgICAgICAgICAgIG11bHQgPSAyICoqIGkKKyAgICAgICAgICAgIGNoZWNrKDIgKiogcG93LCByYW5nZSgxLCAxMDEpLCBsYW1iZGEgZGVsdGE6IGRlbHRhICUgbXVsdCA9PSAwKQorICAgICAgICAgICAgY2hlY2soMiAqKiBwb3csIHJhbmdlKDEsIDEwMSksIGxhbWJkYSBkZWx0YTogRmFsc2UsIGZsb2F0KGkpKQorICAgICAgICBjaGVjaygyICoqIDUzLCByYW5nZSgtMTAwLCAwKSwgbGFtYmRhIGRlbHRhOiBUcnVlKQorCisgICAgZGVmIHRlc3RfbW9kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgKDErMWopLl9fbW9kX18sIDArMGopCisKKyAgICAgICAgYSA9IDMuMzMrNC40M2oKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYSAlIDAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJtb2R1bG8gcGFyYW1hIGNhbid0IGJlIDAiKQorCisgICAgZGVmIHRlc3RfZGl2bW9kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgZGl2bW9kLCAxKzFqLCAwKzBqKQorCisgICAgZGVmIHRlc3RfcG93KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBvdygxKzFqLCAwKzBqKSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBvdygwKzBqLCAyKzBqKSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcG93LCAwKzBqLCAxaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwb3coMWosIC0xKSwgMS8xaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwb3coMWosIDIwMCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvdywgMSsxaiwgMSsxaiwgMSsxaikKKworICAgICAgICBhID0gMy4zMys0LjQzagorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKiogMGosIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAqKiAwLiswLmosIDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzaiAqKiAwaiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzaiAqKiAwLCAxKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIDBqICoqIGEKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgZmFpbCAwLjAgdG8gbmVnYXRpdmUgb3IgY29tcGxleCBwb3dlciIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgMGogKiogKDMtMmopCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGZhaWwgMC4wIHRvIG5lZ2F0aXZlIG9yIGNvbXBsZXggcG93ZXIiKQorCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBpcyB1c2VkIHRvIGV4ZXJjaXNlIGNlcnRhaW4gY29kZSBwYXRocworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKiogMTA1LCBhICoqIDEwNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICoqIC0xMDUsIGEgKiogLTEwNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICoqIC0zMCwgYSAqKiAtMzApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLjBqICoqIDAsIDEpCisKKyAgICAgICAgYiA9IDUuMSsyLjNqCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvdywgYSwgYiwgMCkKKworICAgIGRlZiB0ZXN0X2Jvb2xjb250ZXh0KHNlbGYpOgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb21wbGV4KHJhbmRvbSgpICsgMWUtNiwgcmFuZG9tKCkgKyAxZS02KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjb21wbGV4KDAuMCwgMC4wKSkKKworICAgIGRlZiB0ZXN0X2Nvbmp1Z2F0ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRDbG9zZShjb21wbGV4KDUuMywgOS44KS5jb25qdWdhdGUoKSwgNS4zLTkuOGopCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgY2xhc3MgT1M6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOiBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2NvbXBsZXhfXyhzZWxmKTogcmV0dXJuIHNlbGYudmFsdWUKKyAgICAgICAgY2xhc3MgTlMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6IHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fY29tcGxleF9fKHNlbGYpOiByZXR1cm4gc2VsZi52YWx1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXgoT1MoMSsxMGopKSwgMSsxMGopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleChOUygxKzEwaikpLCAxKzEwaikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCBPUyhOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCBOUyhOb25lKSkKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIjErMTBqIiksIDErMTBqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoMTApLCAxMCswaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDEwLjApLCAxMCswaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDEwTCksIDEwKzBqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoMTArMGopLCAxMCswaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDEsMTApLCAxKzEwaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDEsMTBMKSwgMSsxMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgxLDEwLjApLCAxKzEwaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDFMLDEwKSwgMSsxMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgxTCwxMEwpLCAxKzEwaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDFMLDEwLjApLCAxKzEwaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDEuMCwxMCksIDErMTBqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoMS4wLDEwTCksIDErMTBqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoMS4wLDEwLjApLCAxKzEwaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDMuMTQrMGopLCAzLjE0KzBqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoMy4xNCksIDMuMTQrMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgzMTQpLCAzMTQuMCswaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDMxNEwpLCAzMTQuMCswaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDMuMTQrMGosIDBqKSwgMy4xNCswaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDMuMTQsIDAuMCksIDMuMTQrMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgzMTQsIDApLCAzMTQuMCswaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDMxNEwsIDBMKSwgMzE0LjArMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgwaiwgMy4xNGopLCAtMy4xNCswaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDAuMCwgMy4xNGopLCAtMy4xNCswaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDBqLCAzLjE0KSwgMy4xNGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgwLjAsIDMuMTQpLCAzLjE0aikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIxIiksIDErMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiMWoiKSwgMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgpLCAgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCItMSIpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIrMSIpLCArMSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIoMSsyaikiKSwgMSsyaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIoMS4zKzIuMmopIiksIDEuMysyLjJqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIjMuMTQrMUoiKSwgMy4xNCsxaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIgKCArMy4xNC02SiApIiksIDMuMTQtNmopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiICggKzMuMTQtSiApIiksIDMuMTQtMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiICggKzMuMTQraiApIiksIDMuMTQrMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiSiIpLCAxaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIoIGogKSIpLCAxaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIrSiIpLCAxaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIoIC1qKSIpLCAtMWopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgnMWUtNTAwJyksIDAuMCArIDAuMGopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgnLTFlLTUwMGonKSwgMC4wIC0gMC4waikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCctMWUtNTAwKzFlLTUwMGonKSwgLTAuMCArIDAuMGopCisKKyAgICAgICAgY2xhc3MgY29tcGxleDIoY29tcGxleCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KGNvbXBsZXgyKDErMWopKSwgMSsxaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KHJlYWw9MTcsIGltYWc9MjMpLCAxNysyM2opCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleChyZWFsPTE3KzIzaiksIDE3KzIzaikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KHJlYWw9MTcrMjNqLCBpbWFnPTIzKSwgMTcrNDZqKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgocmVhbD0xKzJqLCBpbWFnPTMrNGopLCAtMys1aikKKworICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIHNpZ24gb2YgYSB6ZXJvIGluIHRoZSByZWFsIG9yIGltYWdpbmFyeSBwYXJ0CisgICAgICAgICMgaXMgcHJlc2VydmVkIHdoZW4gY29uc3RydWN0aW5nIGZyb20gdHdvIGZsb2F0cy4gIChUaGVzZSBjaGVja3MKKyAgICAgICAgIyBhcmUgaGFybWxlc3Mgb24gc3lzdGVtcyB3aXRob3V0IHN1cHBvcnQgZm9yIHNpZ25lZCB6ZXJvcy4pCisgICAgICAgIGRlZiBzcGxpdF96ZXJvcyh4KToKKyAgICAgICAgICAgICIiIkZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgZGlmZmVyZW50IHJlc3VsdHMgZm9yIDAuIGFuZCAtMC4iIiIKKyAgICAgICAgICAgIHJldHVybiBhdGFuMih4LCAtMS4pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdF96ZXJvcyhjb21wbGV4KDEuLCAwLikuaW1hZyksIHNwbGl0X3plcm9zKDAuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdF96ZXJvcyhjb21wbGV4KDEuLCAtMC4pLmltYWcpLCBzcGxpdF96ZXJvcygtMC4pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0X3plcm9zKGNvbXBsZXgoMC4sIDEuKS5yZWFsKSwgc3BsaXRfemVyb3MoMC4pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0X3plcm9zKGNvbXBsZXgoLTAuLCAxLikucmVhbCksIHNwbGl0X3plcm9zKC0wLikpCisKKyAgICAgICAgYyA9IDMuMTQgKyAxagorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tcGxleChjKSBpcyBjKQorICAgICAgICBkZWwgYworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgIjEiLCAiMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgMSwgIjEiKQorCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXgodW5pY29kZSgiICAzLjE0K0ogICIpKSwgMy4xNCsxaikKKworICAgICAgICAjIFNGIGJ1ZyA1NDM4NDA6ICBjb21wbGV4KHN0cmluZykgYWNjZXB0cyBzdHJpbmdzIHdpdGggXDAKKyAgICAgICAgIyBGaXhlZCBpbiAyLjMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICcxKzFqXDBqJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludCwgNSszaikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsb25nLCA1KzNqKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZsb2F0LCA1KzNqKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiXDAiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiM1wwOSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgIjEiLCAiMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgIjEiLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCAxLCAiMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIxKyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIxKzFqKzFqIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIi0tIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIigxKzJqIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIjErMmopIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIjErKDJqKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIoMSsyaikxMjMiKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgdW5pY29kZSgieCIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMWorMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIxZTFlaiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIxZSsrMWVqIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIikxKzJqKCIpCisgICAgICAgICMgdGhlIGZvbGxvd2luZyB0aHJlZSBhcmUgYWNjZXB0ZWQgYnkgUHl0aG9uIDIuNgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMS4uMWoiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMS4xMS4xaiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIxZTEuMWoiKQorCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgICAgICAgICAjIGNoZWNrIHRoYXQgY29tcGxleCBhY2NlcHRzIGxvbmcgdW5pY29kZSBzdHJpbmdzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoY29tcGxleCh1bmljb2RlKCIxIio1MDApKSksIGNvbXBsZXgpCisKKyAgICAgICAgY2xhc3MgRXZpbEV4YyhFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIGV2aWxjb21wbGV4OgorICAgICAgICAgICAgZGVmIF9fY29tcGxleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV2aWxFeGMKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFdmlsRXhjLCBjb21wbGV4LCBldmlsY29tcGxleCgpKQorCisgICAgICAgIGNsYXNzIGZsb2F0MjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KGZsb2F0Mig0Mi4pKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleChyZWFsPWZsb2F0MigxNy4pLCBpbWFnPWZsb2F0MigyMy4pKSwgMTcrMjNqKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIGZsb2F0MihOb25lKSkKKworICAgICAgICBjbGFzcyBjb21wbGV4MChjb21wbGV4KToKKyAgICAgICAgICAgICIiIlRlc3QgdXNhZ2Ugb2YgX19jb21wbGV4X18oKSB3aGVuIGluaGVyaXRpbmcgZnJvbSAnY29tcGxleCciIiIKKyAgICAgICAgICAgIGRlZiBfX2NvbXBsZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDJqCisKKyAgICAgICAgY2xhc3MgY29tcGxleDEoY29tcGxleCk6CisgICAgICAgICAgICAiIiJUZXN0IHVzYWdlIG9mIF9fY29tcGxleF9fKCkgd2l0aCBhIF9fbmV3X18oKSBtZXRob2QiIiIKKyAgICAgICAgICAgIGRlZiBfX25ld19fKHNlbGYsIHZhbHVlPTBqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxleC5fX25ld19fKHNlbGYsIDIqdmFsdWUpCisgICAgICAgICAgICBkZWYgX19jb21wbGV4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBjbGFzcyBjb21wbGV4Mihjb21wbGV4KToKKyAgICAgICAgICAgICIiIk1ha2Ugc3VyZSB0aGF0IF9fY29tcGxleF9fKCkgY2FsbHMgZmFpbCBpZiBhbnl0aGluZyBvdGhlciB0aGFuIGEKKyAgICAgICAgICAgIGNvbXBsZXggaXMgcmV0dXJuZWQiIiIKKyAgICAgICAgICAgIGRlZiBfX2NvbXBsZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleChjb21wbGV4MCgxaikpLCA0MmopCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleChjb21wbGV4MSgxaikpLCAyaikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCBjb21wbGV4MigxaikpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgeGNvbXBsZXgoY29tcGxleCk6CisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4geGNvbXBsZXgoY29tcGxleChzZWxmKSArIG90aGVyKQorICAgICAgICAgICAgX19yYWRkX18gPSBfX2FkZF9fCisKKyAgICAgICAgICAgIGRlZiBfX3N1Yl9fKHNlbGYsb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB4Y29tcGxleChjb21wbGV4KHNlbGYpICsgb3RoZXIpCisgICAgICAgICAgICBfX3JzdWJfXyA9IF9fc3ViX18KKworICAgICAgICAgICAgZGVmIF9fbXVsX18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KGNvbXBsZXgoc2VsZikgKiBvdGhlcikKKyAgICAgICAgICAgIF9fcm11bF9fID0gX19tdWxfXworCisgICAgICAgICAgICBkZWYgX19kaXZfXyhzZWxmLG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4geGNvbXBsZXgoY29tcGxleChzZWxmKSAvIG90aGVyKQorCisgICAgICAgICAgICBkZWYgX19yZGl2X18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KG90aGVyIC8gY29tcGxleChzZWxmKSkKKworICAgICAgICAgICAgX190cnVlZGl2X18gPSBfX2Rpdl9fCisgICAgICAgICAgICBfX3J0cnVlZGl2X18gPSBfX3JkaXZfXworCisgICAgICAgICAgICBkZWYgX19mbG9vcmRpdl9fKHNlbGYsb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB4Y29tcGxleChjb21wbGV4KHNlbGYpIC8vIG90aGVyKQorCisgICAgICAgICAgICBkZWYgX19yZmxvb3JkaXZfXyhzZWxmLG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4geGNvbXBsZXgob3RoZXIgLy8gY29tcGxleChzZWxmKSkKKworICAgICAgICAgICAgZGVmIF9fcG93X18oc2VsZixvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjb21wbGV4KGNvbXBsZXgoc2VsZikgKiogb3RoZXIpCisKKyAgICAgICAgICAgIGRlZiBfX3Jwb3dfXyhzZWxmLG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4geGNvbXBsZXgob3RoZXIgKiogY29tcGxleChzZWxmKSApCisKKyAgICAgICAgICAgIGRlZiBfX21vZF9fKHNlbGYsb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiB4Y29tcGxleChjb21wbGV4KHNlbGYpICUgb3RoZXIpCisKKyAgICAgICAgICAgIGRlZiBfX3Jtb2RfXyhzZWxmLG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4geGNvbXBsZXgob3RoZXIgJSBjb21wbGV4KHNlbGYpKQorCisgICAgICAgIGluZml4X2Jpbm9wcyA9ICgnKycsICctJywgJyonLCAnKionLCAnJScsICcvLycsICcvJykKKyAgICAgICAgeGNvbXBsZXhfdmFsdWVzID0gKHhjb21wbGV4KDEpLCB4Y29tcGxleCgxMjMuMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4Y29tcGxleCgtMTArMmopLCB4Y29tcGxleCgzKzE4N2opLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeGNvbXBsZXgoMy03OGopKQorICAgICAgICB0ZXN0X3ZhbHVlcyA9ICgxLCAxMjMuMCwgMTAtMTlqLCB4Y29tcGxleCgxKzJqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgeGNvbXBsZXgoMSs4N2opLCB4Y29tcGxleCgxMCs5MGopKQorCisgICAgICAgIGZvciBvcCBpbiBpbmZpeF9iaW5vcHM6CisgICAgICAgICAgICBmb3IgeCBpbiB4Y29tcGxleF92YWx1ZXM6CisgICAgICAgICAgICAgICAgZm9yIHkgaW4gdGVzdF92YWx1ZXM6CisgICAgICAgICAgICAgICAgICAgIGEgPSAneCAlcyB5JyAlIG9wCisgICAgICAgICAgICAgICAgICAgIGIgPSAneSAlcyB4JyAlIG9wCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGV2YWwoYSkpIGlzIHR5cGUoZXZhbChiKSkgaXMgeGNvbXBsZXgpCisKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoLTMwLCAzMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goeCksIGhhc2goY29tcGxleCh4LCAwKSkpCisgICAgICAgICAgICB4IC89IDMuMCAgICAjIG5vdyBjaGVjayBhZ2FpbnN0IGZsb2F0aW5nIHBvaW50CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goeCksIGhhc2goY29tcGxleCh4LCAwLikpKQorCisgICAgZGVmIHRlc3RfYWJzKHNlbGYpOgorICAgICAgICBudW1zID0gW2NvbXBsZXgoeC8zLiwgeS83LikgZm9yIHggaW4geHJhbmdlKC05LDkpIGZvciB5IGluIHhyYW5nZSgtOSw5KV0KKyAgICAgICAgZm9yIG51bSBpbiBudW1zOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgobnVtLnJlYWwqKjIgKyBudW0uaW1hZyoqMikgICoqIDAuNSwgYWJzKG51bSkpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoMSs2aiksICcoMSs2aiknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoMS02aiksICcoMS02aiknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVwcigtKDErMGopKSwgJygtMSstMGopJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEtNmosY29tcGxleChyZXByKDEtNmopKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxKzZqLGNvbXBsZXgocmVwcigxKzZqKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTZqLGNvbXBsZXgocmVwcigtNmopKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg2aixjb21wbGV4KHJlcHIoNmopKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgxLiwgSU5GKSksICIoMStpbmZqKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KDEuLCAtSU5GKSksICIoMS1pbmZqKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KElORiwgMSkpLCAiKGluZisxaikiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgtSU5GLCBJTkYpKSwgIigtaW5mK2luZmopIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoTkFOLCAxKSksICIobmFuKzFqKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KDEsIE5BTikpLCAiKDErbmFuaikiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleChOQU4sIE5BTikpLCAiKG5hbituYW5qKSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoMCwgSU5GKSksICJpbmZqIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoMCwgLUlORikpLCAiLWluZmoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgwLCBOQU4pKSwgIm5hbmoiKQorCisgICAgZGVmIHRlc3RfbmVnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMSs2aiksIC0xLTZqKQorCisgICAgZGVmIHRlc3RfZmlsZShzZWxmKToKKyAgICAgICAgYSA9IDMuMzMrNC40M2oKKyAgICAgICAgYiA9IDUuMSsyLjNqCisKKyAgICAgICAgZm8gPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICAgICAgcHJpbnQgPj5mbywgYSwgYgorICAgICAgICAgICAgZm8uY2xvc2UoKQorICAgICAgICAgICAgZm8gPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWQoKSwgIiVzICVzXG4iICUgKGEsIGIpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgKGZvIGlzIG5vdCBOb25lKSBhbmQgKG5vdCBmby5jbG9zZWQpOgorICAgICAgICAgICAgICAgIGZvLmNsb3NlKCkKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2dldG5ld2FyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDErMmopLl9fZ2V0bmV3YXJnc19fKCksICgxLjAsIDIuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEtMmopLl9fZ2V0bmV3YXJnc19fKCksICgxLjAsIC0yLjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgyaikuX19nZXRuZXdhcmdzX18oKSwgKDAuMCwgMi4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTBqKS5fX2dldG5ld2FyZ3NfXygpLCAoMC4wLCAtMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4KDAsIElORikuX19nZXRuZXdhcmdzX18oKSwgKDAuMCwgSU5GKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4KElORiwgMCkuX19nZXRuZXdhcmdzX18oKSwgKElORiwgMC4wKSkKKworICAgIGlmIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKToKKyAgICAgICAgZGVmIHRlc3RfcGx1c19taW51c18waihzZWxmKToKKyAgICAgICAgICAgICMgdGVzdCB0aGF0IC0waiBhbmQgMGogbGl0ZXJhbHMgYXJlIG5vdCBpZGVudGlmaWVkCisgICAgICAgICAgICB6MSwgejIgPSAwaiwgLTBqCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0YW4yKHoxLmltYWcsIC0xLiksIGF0YW4yKDAuLCAtMS4pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdGFuMih6Mi5pbWFnLCAtMS4pLCBhdGFuMigtMC4sIC0xLikpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgcmVxdWlyZXMgSUVFRSA3NTQgZG91YmxlcyIpCisgICAgZGVmIHRlc3Rfb3ZlcmZsb3coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleCgiMWU1MDAiKSwgY29tcGxleChJTkYsIDAuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleCgiLTFlNTAwaiIpLCBjb21wbGV4KDAuMCwgLUlORikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleCgiLTFlNTAwKzEuOGUzMDhqIiksIGNvbXBsZXgoLUlORiwgSU5GKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKyAgICBkZWYgdGVzdF9yZXByX3JvdW5kdHJpcChzZWxmKToKKyAgICAgICAgdmFscyA9IFswLjAsIDFlLTUwMCwgMWUtMzE1LCAxZS0yMDAsIDAuMDEyMywgMy4xNDE1LCAxZTUwLCBJTkYsIE5BTl0KKyAgICAgICAgdmFscyArPSBbLXYgZm9yIHYgaW4gdmFsc10KKworICAgICAgICAjIGNvbXBsZXgocmVwcih6KSkgc2hvdWxkIHJlY292ZXIgeiBleGFjdGx5LCBldmVuIGZvciBjb21wbGV4CisgICAgICAgICMgbnVtYmVycyBpbnZvbHZpbmcgYW4gaW5maW5pdHksIG5hbiwgb3IgbmVnYXRpdmUgemVybworICAgICAgICBmb3IgeCBpbiB2YWxzOgorICAgICAgICAgICAgZm9yIHkgaW4gdmFsczoKKyAgICAgICAgICAgICAgICB6ID0gY29tcGxleCh4LCB5KQorICAgICAgICAgICAgICAgIHJvdW5kdHJpcCA9IGNvbXBsZXgocmVwcih6KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZsb2F0c0FyZUlkZW50aWNhbCh6LnJlYWwsIHJvdW5kdHJpcC5yZWFsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmxvYXRzQXJlSWRlbnRpY2FsKHouaW1hZywgcm91bmR0cmlwLmltYWcpCisKKyAgICAgICAgIyBpZiB3ZSBwcmVkZWZpbmUgc29tZSBjb25zdGFudHMsIHRoZW4gZXZhbChyZXByKHopKSBzaG91bGQKKyAgICAgICAgIyBhbHNvIHdvcmssIGV4Y2VwdCB0aGF0IGl0IG1pZ2h0IGNoYW5nZSB0aGUgc2lnbiBvZiB6ZXJvcworICAgICAgICBpbmYsIG5hbiA9IGZsb2F0KCdpbmYnKSwgZmxvYXQoJ25hbicpCisgICAgICAgIGluZmosIG5hbmogPSBjb21wbGV4KDAuMCwgaW5mKSwgY29tcGxleCgwLjAsIG5hbikKKyAgICAgICAgZm9yIHggaW4gdmFsczoKKyAgICAgICAgICAgIGZvciB5IGluIHZhbHM6CisgICAgICAgICAgICAgICAgeiA9IGNvbXBsZXgoeCwgeSkKKyAgICAgICAgICAgICAgICByb3VuZHRyaXAgPSBldmFsKHJlcHIoeikpCisgICAgICAgICAgICAgICAgIyBhZGRpbmcgMC4wIGhhcyBubyBlZmZlY3QgYmVzaWRlIGNoYW5naW5nIC0wLjAgdG8gMC4wCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGbG9hdHNBcmVJZGVudGljYWwoMC4wICsgei5yZWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCArIHJvdW5kdHJpcC5yZWFsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmxvYXRzQXJlSWRlbnRpY2FsKDAuMCArIHouaW1hZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAgKyByb3VuZHRyaXAuaW1hZykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgIyBlbXB0eSBmb3JtYXQgc3RyaW5nIGlzIHNhbWUgYXMgc3RyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMSszaiwgJycpLCBzdHIoMSszaikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNSszLjVqLCAnJyksIHN0cigxLjUrMy41aikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDNqLCAnJyksIHN0cigzaikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDMuMmosICcnKSwgc3RyKDMuMmopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgzKzBqLCAnJyksIHN0cigzKzBqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMy4yKzBqLCAnJyksIHN0cigzLjIrMGopKQorCisgICAgICAgICMgZW1wdHkgcHJlc2VudGF0aW9uIHR5cGUgc2hvdWxkIHN0aWxsIGJlIGFuYWxvZ291cyB0byBzdHIsCisgICAgICAgICMgZXZlbiB3aGVuIGZvcm1hdCBzdHJpbmcgaXMgbm9uZW1wdHkgKGlzc3VlICM1OTIwKS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMy4yKzBqLCAnLScpLCBzdHIoMy4yKzBqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMy4yKzBqLCAnPCcpLCBzdHIoMy4yKzBqKSkKKyAgICAgICAgeiA9IDQvNy4gLSAxMDBqLzcuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICcnKSwgc3RyKHopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh6LCAnLScpLCBzdHIoeikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICc8JyksIHN0cih6KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeiwgJzEwJyksIHN0cih6KSkKKyAgICAgICAgeiA9IGNvbXBsZXgoMC4wLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICcnKSwgc3RyKHopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh6LCAnLScpLCBzdHIoeikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICc8JyksIHN0cih6KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeiwgJzInKSwgc3RyKHopKQorICAgICAgICB6ID0gY29tcGxleCgtMC4wLCAyLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICcnKSwgc3RyKHopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh6LCAnLScpLCBzdHIoeikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHosICc8JyksIHN0cih6KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeiwgJzMnKSwgc3RyKHopKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDErM2osICdnJyksICcxKzNqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoM2osICdnJyksICcwKzNqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzMuNWosICdnJyksICcxLjUrMy41aicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzMuNWosICcrZycpLCAnKzEuNSszLjVqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41LTMuNWosICcrZycpLCAnKzEuNS0zLjVqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41LTMuNWosICctZycpLCAnMS41LTMuNWonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrMy41aiwgJyBnJyksICcgMS41KzMuNWonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUtMy41aiwgJyBnJyksICcgMS41LTMuNWonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS41KzMuNWosICcgZycpLCAnLTEuNSszLjVqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuNS0zLjVqLCAnIGcnKSwgJy0xLjUtMy41aicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuNS0zLjVlLTIwaiwgJ2cnKSwgJy0xLjUtMy41ZS0yMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS41LTMuNWosICdmJyksICctMS41MDAwMDAtMy41MDAwMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuNS0zLjVqLCAnRicpLCAnLTEuNTAwMDAwLTMuNTAwMDAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjUtMy41aiwgJ2UnKSwgJy0xLjUwMDAwMGUrMDAtMy41MDAwMDBlKzAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjUtMy41aiwgJy4yZScpLCAnLTEuNTBlKzAwLTMuNTBlKzAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjUtMy41aiwgJy4yRScpLCAnLTEuNTBFKzAwLTMuNTBFKzAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjVlMTAtMy41ZTVqLCAnLjJHJyksICctMS41RSsxMC0zLjVFKzA1aicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnPDIwZycpLCAgJzEuNSszaiAgICAgICAgICAgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnKjwyMGcnKSwgJzEuNSszaioqKioqKioqKioqKioqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnPjIwZycpLCAgJyAgICAgICAgICAgICAgMS41KzNqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnXjIwZycpLCAgJyAgICAgICAxLjUrM2ogICAgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnPDIwJyksICAgJygxLjUrM2opICAgICAgICAgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnPjIwJyksICAgJyAgICAgICAgICAgICgxLjUrM2opJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnXjIwJyksICAgJyAgICAgICgxLjUrM2opICAgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS4xMjMtMy4xMjNqLCAnXjIwLjInKSwgJyAgICAgKDEuMS0zLjFqKSAgICAgJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrM2osICcyMC4yZicpLCAnICAgICAgICAgIDEuNTArMy4wMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjUrM2osICc+MjAuMmYnKSwgJyAgICAgICAgICAxLjUwKzMuMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41KzNqLCAnPDIwLjJmJyksICcxLjUwKzMuMDBqICAgICAgICAgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNWUyMCszaiwgJzwyMC4yZicpLCAnMTUwMDAwMDAwMDAwMDAwMDAwMDAwLjAwKzMuMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41ZTIwKzNqLCAnPjQwLjJmJyksICcgICAgICAgICAgMTUwMDAwMDAwMDAwMDAwMDAwMDAwLjAwKzMuMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41ZTIwKzNqLCAnXjQwLC4yZicpLCAnICAxNTAsMDAwLDAwMCwwMDAsMDAwLDAwMCwwMDAuMDArMy4wMGogICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuNWUyMSszaiwgJ140MCwuMmYnKSwgJyAxLDUwMCwwMDAsMDAwLDAwMCwwMDAsMDAwLDAwMC4wMCszLjAwaiAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjVlMjErMzAwMGosICcsLjJmJyksICcxLDUwMCwwMDAsMDAwLDAwMCwwMDAsMDAwLDAwMC4wMCszLDAwMC4wMGonKQorCisgICAgICAgICMgYWx0ZXJuYXRlIGlzIGludmFsaWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgKDEuNSswLjVqKS5fX2Zvcm1hdF9fLCAnI2YnKQorCisgICAgICAgICMgemVybyBwYWRkaW5nIGlzIGludmFsaWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgKDEuNSswLjVqKS5fX2Zvcm1hdF9fLCAnMDEwZicpCisKKyAgICAgICAgIyAnPScgYWxpZ25tZW50IGlzIGludmFsaWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgKDEuNSszaikuX19mb3JtYXRfXywgJz0yMCcpCisKKyAgICAgICAgIyBpbnRlZ2VyIHByZXNlbnRhdGlvbiB0eXBlcyBhcmUgYW4gZXJyb3IKKyAgICAgICAgZm9yIHQgaW4gJ2JjZG94WCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoMS41KzAuNWopLl9fZm9ybWF0X18sIHQpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgZXZlcnl0aGluZyB3b3JrcyBpbiAnJy5mb3JtYXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcqezA6LjNmfSonLmZvcm1hdCgzLjE0MTU5KzIuNzE4MjhqKSwgJyozLjE0MisyLjcxOGoqJykKKworICAgICAgICAjIGlzc3VlIDMzODI6ICdmJyBhbmQgJ0YnIHdpdGggaW5mJ3MgYW5kIG5hbidzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmZ9Jy5mb3JtYXQoSU5GKzBqKSwgJ2luZiswLjAwMDAwMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpGfScuZm9ybWF0KElORiswaiksICdJTkYrMC4wMDAwMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdCgtSU5GKzBqKSwgJy1pbmYrMC4wMDAwMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Rn0nLmZvcm1hdCgtSU5GKzBqKSwgJy1JTkYrMC4wMDAwMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdChjb21wbGV4KElORiwgSU5GKSksICdpbmYraW5maicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoY29tcGxleChJTkYsIElORikpLCAnSU5GK0lORmonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpmfScuZm9ybWF0KGNvbXBsZXgoSU5GLCAtSU5GKSksICdpbmYtaW5maicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoY29tcGxleChJTkYsIC1JTkYpKSwgJ0lORi1JTkZqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdChjb21wbGV4KC1JTkYsIElORikpLCAnLWluZitpbmZqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Rn0nLmZvcm1hdChjb21wbGV4KC1JTkYsIElORikpLCAnLUlORitJTkZqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdChjb21wbGV4KC1JTkYsIC1JTkYpKSwgJy1pbmYtaW5maicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoY29tcGxleCgtSU5GLCAtSU5GKSksICctSU5GLUlORmonKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmZ9Jy5mb3JtYXQoY29tcGxleChOQU4sIDApKSwgJ25hbiswLjAwMDAwMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpGfScuZm9ybWF0KGNvbXBsZXgoTkFOLCAwKSksICdOQU4rMC4wMDAwMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdChjb21wbGV4KE5BTiwgTkFOKSksICduYW4rbmFuaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoY29tcGxleChOQU4sIE5BTikpLCAnTkFOK05BTmonKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCJjb21wbGV4IGRpdm1vZC4uLCAvLyBhbmQgJSBhcmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVwcmVjYXRlZCIsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENvbXBsZXhUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb21wbGV4X2FyZ3MucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb21wbGV4X2FyZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM2Y2JlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvbXBsZXhfYXJncy5weQpAQCAtMCwwICsxLDExOCBAQAorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdGV4dHdyYXAKKworY2xhc3MgQ29tcGxleEFyZ3NUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY2hlY2soc2VsZiwgZnVuYywgZXhwZWN0ZWQsICphcmdzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKCphcmdzKSwgZXhwZWN0ZWQpCisKKyAgICAjIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdGVzdGVkIGJlbG93IGFzIGxhbWJkYXMgdG9vLiAgSWYgeW91IGFkZCBhCisgICAgIyBmdW5jdGlvbiB0ZXN0LCBhbHNvIGFkZCBhIHNpbWlsYXIgbGFtYmRhIHRlc3QuCisKKyAgICAjIEZ1bmN0aW9ucyBhcmUgd3JhcHBlZCBpbiAiZXhlYyIgc3RhdGVtZW50cyBpbiBvcmRlciB0bworICAgICMgc2lsZW5jZSBQeTNrIHdhcm5pbmdzLgorCisgICAgZGVmIHRlc3RfZnVuY19wYXJlbnNfbm9fdW5wYWNraW5nKHNlbGYpOgorICAgICAgICBleGVjIHRleHR3cmFwLmRlZGVudCgiIiIKKyAgICAgICAgZGVmIGYoKCgoKHgpKSkpKTogcmV0dXJuIHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCAxLCAxKQorICAgICAgICAjIElubmVyIHBhcmVucyBhcmUgZWxpZGVkLCBzYW1lIGFzOiBmKHgsKQorICAgICAgICBkZWYgZigoKHgpKSwpOiByZXR1cm4geAorICAgICAgICBzZWxmLmNoZWNrKGYsIDIsIDIpCisgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2Z1bmNfMShzZWxmKToKKyAgICAgICAgZXhlYyB0ZXh0d3JhcC5kZWRlbnQoIiIiCisgICAgICAgIGRlZiBmKCgoKCh4KSwpKSkpOiByZXR1cm4geAorICAgICAgICBzZWxmLmNoZWNrKGYsIDMsICgzLCkpCisgICAgICAgIGRlZiBmKCgoKCh4KSksKSkpOiByZXR1cm4geAorICAgICAgICBzZWxmLmNoZWNrKGYsIDQsICg0LCkpCisgICAgICAgIGRlZiBmKCgoKCh4KSkpLCkpOiByZXR1cm4geAorICAgICAgICBzZWxmLmNoZWNrKGYsIDUsICg1LCkpCisgICAgICAgIGRlZiBmKCgoeCksKSk6IHJldHVybiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgNiwgKDYsKSkKKyAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZnVuY18yKHNlbGYpOgorICAgICAgICBleGVjIHRleHR3cmFwLmRlZGVudCgiIiIKKyAgICAgICAgZGVmIGYoKCgoKHgpKSwpLCkpOiByZXR1cm4geAorICAgICAgICBzZWxmLmNoZWNrKGYsIDIsICgoMiwpLCkpCisgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2Z1bmNfMyhzZWxmKToKKyAgICAgICAgZXhlYyB0ZXh0d3JhcC5kZWRlbnQoIiIiCisgICAgICAgIGRlZiBmKCgoKCgoeCkpLCksKSwpKTogcmV0dXJuIHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCAzLCAoKCgzLCksKSwpKQorICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9mdW5jX2NvbXBsZXgoc2VsZik6CisgICAgICAgIGV4ZWMgdGV4dHdyYXAuZGVkZW50KCIiIgorICAgICAgICBkZWYgZigoKCgoKHgpKSwpLCksKSwgYSwgYiwgYyk6IHJldHVybiB4LCBhLCBiLCBjCisgICAgICAgIHNlbGYuY2hlY2soZiwgKDMsIDksIDgsIDcpLCAoKCgzLCksKSwpLCA5LCA4LCA3KQorCisgICAgICAgIGRlZiBmKCgoKCgoKHgpKSwpKSwpLCksIGEsIGIsIGMpOiByZXR1cm4geCwgYSwgYiwgYworICAgICAgICBzZWxmLmNoZWNrKGYsICgzLCA5LCA4LCA3KSwgKCgoMywpLCksKSwgOSwgOCwgNykKKworICAgICAgICBkZWYgZihhLCBiLCBjLCAoKCgoKCh4KSksKSksKSwpKTogcmV0dXJuIGEsIGIsIGMsIHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCAoOSwgOCwgNywgMyksIDksIDgsIDcsICgoKDMsKSwpLCkpCisgICAgICAgICIiIikKKworICAgICMgRHVwbGljYXRlIHRoZSB0ZXN0cyBhYm92ZSwgYnV0IGZvciBsYW1iZGEuICBJZiB5b3UgYWRkIGEgbGFtYmRhIHRlc3QsCisgICAgIyBhbHNvIGFkZCBhIHNpbWlsYXIgZnVuY3Rpb24gdGVzdCBhYm92ZS4KKworICAgIGRlZiB0ZXN0X2xhbWJkYV9wYXJlbnNfbm9fdW5wYWNraW5nKHNlbGYpOgorICAgICAgICBleGVjIHRleHR3cmFwLmRlZGVudCgiIiIKKyAgICAgICAgZiA9IGxhbWJkYSAoKCgoKHgpKSkpKTogeAorICAgICAgICBzZWxmLmNoZWNrKGYsIDEsIDEpCisgICAgICAgICMgSW5uZXIgcGFyZW5zIGFyZSBlbGlkZWQsIHNhbWUgYXM6IGYoeCwpCisgICAgICAgIGYgPSBsYW1iZGEgKCh4KSksOiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgMiwgMikKKyAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfbGFtYmRhXzEoc2VsZik6CisgICAgICAgIGV4ZWMgdGV4dHdyYXAuZGVkZW50KCIiIgorICAgICAgICBmID0gbGFtYmRhICgoKCgoeCksKSkpKTogeAorICAgICAgICBzZWxmLmNoZWNrKGYsIDMsICgzLCkpCisgICAgICAgIGYgPSBsYW1iZGEgKCgoKCh4KSksKSkpOiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgNCwgKDQsKSkKKyAgICAgICAgZiA9IGxhbWJkYSAoKCgoKHgpKSksKSk6IHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCA1LCAoNSwpKQorICAgICAgICBmID0gbGFtYmRhICgoKHgpLCkpOiB4CisgICAgICAgIHNlbGYuY2hlY2soZiwgNiwgKDYsKSkKKyAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfbGFtYmRhXzIoc2VsZik6CisgICAgICAgIGV4ZWMgdGV4dHdyYXAuZGVkZW50KCIiIgorICAgICAgICBmID0gbGFtYmRhICgoKCgoeCkpLCksKSk6IHgKKyAgICAgICAgc2VsZi5jaGVjayhmLCAyLCAoKDIsKSwpKQorICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9sYW1iZGFfMyhzZWxmKToKKyAgICAgICAgZXhlYyB0ZXh0d3JhcC5kZWRlbnQoIiIiCisgICAgICAgIGYgPSBsYW1iZGEgKCgoKCgoeCkpLCksKSwpKTogeAorICAgICAgICBzZWxmLmNoZWNrKGYsIDMsICgoKDMsKSwpLCkpCisgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2xhbWJkYV9jb21wbGV4KHNlbGYpOgorICAgICAgICBleGVjIHRleHR3cmFwLmRlZGVudCgiIiIKKyAgICAgICAgZiA9IGxhbWJkYSAoKCgoKHgpKSwpLCksKSwgYSwgYiwgYzogKHgsIGEsIGIsIGMpCisgICAgICAgIHNlbGYuY2hlY2soZiwgKDMsIDksIDgsIDcpLCAoKCgzLCksKSwpLCA5LCA4LCA3KQorCisgICAgICAgIGYgPSBsYW1iZGEgKCgoKCgoeCkpLCkpLCksKSwgYSwgYiwgYzogKHgsIGEsIGIsIGMpCisgICAgICAgIHNlbGYuY2hlY2soZiwgKDMsIDksIDgsIDcpLCAoKCgzLCksKSwpLCA5LCA4LCA3KQorCisgICAgICAgIGYgPSBsYW1iZGEgYSwgYiwgYywgKCgoKCgoeCkpLCkpLCksKTogKGEsIGIsIGMsIHgpCisgICAgICAgIHNlbGYuY2hlY2soZiwgKDksIDgsIDcsIDMpLCA5LCA4LCA3LCAoKCgzLCksKSwpKQorICAgICAgICAiIiIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgICAgICAgICAoInR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcgaGFzIGJlZW4gcmVtb3ZlZCIsIFN5bnRheFdhcm5pbmcpLAorICAgICAgICAgICAgKCJwYXJlbnRoZXNpemVkIGFyZ3VtZW50IG5hbWVzIGFyZSBpbnZhbGlkIiwgU3ludGF4V2FybmluZykpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENvbXBsZXhBcmdzVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvbnRhaW5zLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29udGFpbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzODA4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvbnRhaW5zLnB5CkBAIC0wLDAgKzEsMTExIEBACitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBoYXZlX3VuaWNvZGUsIHJ1bl91bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0CisKKworY2xhc3MgYmFzZV9zZXQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsKToKKyAgICAgICAgc2VsZi5lbCA9IGVsCisKK2NsYXNzIHNldChiYXNlX3NldCk6CisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBlbCk6CisgICAgICAgIHJldHVybiBzZWxmLmVsID09IGVsCisKK2NsYXNzIHNlcShiYXNlX3NldCk6CisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG4pOgorICAgICAgICByZXR1cm4gW3NlbGYuZWxdW25dCisKKworY2xhc3MgVGVzdENvbnRhaW5zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jb21tb25fdGVzdHMoc2VsZik6CisgICAgICAgIGEgPSBiYXNlX3NldCgxKQorICAgICAgICBiID0gc2V0KDEpCisgICAgICAgIGMgPSBzZXEoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigxLCBiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDAsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMSwgYykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigwLCBjKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogMSBpbiBhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogMSBub3QgaW4gYSkKKworICAgICAgICAjIHRlc3QgY2hhciBpbiBzdHJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYycsICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdkJywgJ2FiYycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJycsICdhYmMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBOb25lIGluICdhYmMnKQorCisgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICBkZWYgdGVzdF9jaGFyX2luX3VuaWNvZGUoc2VsZik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdjJywgdW5pY29kZSgnYWJjJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdkJywgdW5pY29kZSgnYWJjJykpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJycsIHVuaWNvZGUoJycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih1bmljb2RlKCcnKSwgJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHVuaWNvZGUoJycpLCB1bmljb2RlKCcnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJycsIHVuaWNvZGUoJ2FiYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih1bmljb2RlKCcnKSwgJ2FiYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHVuaWNvZGUoJycpLCB1bmljb2RlKCdhYmMnKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IE5vbmUgaW4gdW5pY29kZSgnYWJjJykpCisKKyAgICAgICAgICAgICMgdGVzdCBVbmljb2RlIGNoYXIgaW4gVW5pY29kZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih1bmljb2RlKCdjJyksIHVuaWNvZGUoJ2FiYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbih1bmljb2RlKCdkJyksIHVuaWNvZGUoJ2FiYycpKQorCisgICAgICAgICAgICAjIHRlc3QgVW5pY29kZSBjaGFyIGluIHN0cmluZworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih1bmljb2RlKCdjJyksICdhYmMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbih1bmljb2RlKCdkJyksICdhYmMnKQorCisgICAgZGVmIHRlc3RfYnVpbHRpbl9zZXF1ZW5jZV90eXBlcyhzZWxmKToKKyAgICAgICAgIyBhIGNvbGxlY3Rpb24gb2YgdGVzdHMgb24gYnVpbHRpbiBzZXF1ZW5jZSB0eXBlcworICAgICAgICBhID0gcmFuZ2UoMTApCisgICAgICAgIGZvciBpIGluIGE6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGksIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTYsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYSwgYSkKKworICAgICAgICBhID0gdHVwbGUoYSkKKyAgICAgICAgZm9yIGkgaW4gYToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaSwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxNiwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihhLCBhKQorCisgICAgICAgIGNsYXNzIERldmlhbnQxOgorICAgICAgICAgICAgIiIiQmVoYXZlcyBzdHJhbmdlbHkgd2hlbiBjb21wYXJlZAorCisgICAgICAgICAgICBUaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb250YWlucyBjb2RlCisgICAgICAgICAgICB3b3JrcyB3aGVuIHRoZSBsaXN0IGlzIG1vZGlmaWVkIGR1cmluZyB0aGUgY2hlY2suCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGFMaXN0ID0gcmFuZ2UoMTUpCisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgb3RoZXIgPT0gMTI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYUxpc3QucmVtb3ZlKDEyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFMaXN0LnJlbW92ZSgxMykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hTGlzdC5yZW1vdmUoMTQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBzZWxmLmFzc2VydE5vdEluKERldmlhbnQxKCksIERldmlhbnQxLmFMaXN0KQorCisgICAgICAgIGNsYXNzIERldmlhbnQyOgorICAgICAgICAgICAgIiIiQmVoYXZlcyBzdHJhbmdlbHkgd2hlbiBjb21wYXJlZAorCisgICAgICAgICAgICBUaGlzIGNsYXNzIHJhaXNlcyBhbiBleGNlcHRpb24gZHVyaW5nIGNvbXBhcmlzb24uICBUaGF0IGluCisgICAgICAgICAgICB0dXJuIGNhdXNlcyB0aGUgY29tcGFyaXNvbiB0byBmYWlsIHdpdGggYSBUeXBlRXJyb3IuCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBvdGhlciA9PSA0OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJnb3RjaGEiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihEZXZpYW50MigpLCBhKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoVGVzdENvbnRhaW5zKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjhjOTVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQpAQCAtMCwwICsxLDMyNiBAQAorIiIiVW5pdCB0ZXN0cyBmb3IgY29udGV4dGxpYi5weSwgYW5kIG90aGVyIGNvbnRleHQgbWFuYWdlcnMuIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIGNvbnRleHRsaWIgaW1wb3J0ICogICMgVGVzdHMgX19hbGxfXworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCisKK2NsYXNzIENvbnRleHRNYW5hZ2VyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY29udGV4dG1hbmFnZXJfcGxhaW4oc2VsZik6CisgICAgICAgIHN0YXRlID0gW10KKyAgICAgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiB3b29ob28oKToKKyAgICAgICAgICAgIHN0YXRlLmFwcGVuZCgxKQorICAgICAgICAgICAgeWllbGQgNDIKKyAgICAgICAgICAgIHN0YXRlLmFwcGVuZCg5OTkpCisgICAgICAgIHdpdGggd29vaG9vKCkgYXMgeDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgNDIpCisgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgWzEsIDQyLCA5OTldKQorCisgICAgZGVmIHRlc3RfY29udGV4dG1hbmFnZXJfZmluYWxseShzZWxmKToKKyAgICAgICAgc3RhdGUgPSBbXQorICAgICAgICBAY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIHdvb2hvbygpOgorICAgICAgICAgICAgc3RhdGUuYXBwZW5kKDEpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgNDIKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3RhdGUuYXBwZW5kKDk5OSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICB3aXRoIHdvb2hvbygpIGFzIHg6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgWzFdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgNDIpCisgICAgICAgICAgICAgICAgc3RhdGUuYXBwZW5kKHgpCisgICAgICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbMSwgNDIsIDk5OV0pCisKKyAgICBkZWYgdGVzdF9jb250ZXh0bWFuYWdlcl9ub19yZXJhaXNlKHNlbGYpOgorICAgICAgICBAY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIHdoZWUoKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIGN0eCA9IHdoZWUoKQorICAgICAgICBjdHguX19lbnRlcl9fKCkKKyAgICAgICAgIyBDYWxsaW5nIF9fZXhpdF9fIHNob3VsZCBub3QgcmVzdWx0IGluIGFuIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGN0eC5fX2V4aXRfXyhUeXBlRXJyb3IsIFR5cGVFcnJvcigiZm9vIiksIE5vbmUpKQorCisgICAgZGVmIHRlc3RfY29udGV4dG1hbmFnZXJfdHJhcF95aWVsZF9hZnRlcl90aHJvdyhzZWxmKToKKyAgICAgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiB3aG9vKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICBjdHggPSB3aG9vKCkKKyAgICAgICAgY3R4Ll9fZW50ZXJfXygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLCBjdHguX19leGl0X18sIFR5cGVFcnJvciwgVHlwZUVycm9yKCJmb28iKSwgTm9uZQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9jb250ZXh0bWFuYWdlcl9leGNlcHQoc2VsZik6CisgICAgICAgIHN0YXRlID0gW10KKyAgICAgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiB3b29ob28oKToKKyAgICAgICAgICAgIHN0YXRlLmFwcGVuZCgxKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIDQyCisgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgc3RhdGUuYXBwZW5kKGUuYXJnc1swXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbMSwgNDIsIDk5OV0pCisgICAgICAgIHdpdGggd29vaG9vKCkgYXMgeDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgNDIpCisgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoeCkKKyAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yKDk5OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgWzEsIDQyLCA5OTldKQorCisgICAgZGVmIF9jcmVhdGVfY29udGV4dG1hbmFnZXJfYXR0cmlicyhzZWxmKToKKyAgICAgICAgZGVmIGF0dHJpYnMoKiprdyk6CisgICAgICAgICAgICBkZWYgZGVjb3JhdGUoZnVuYyk6CisgICAgICAgICAgICAgICAgZm9yIGssdiBpbiBrdy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKGZ1bmMsayx2KQorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jCisgICAgICAgICAgICByZXR1cm4gZGVjb3JhdGUKKyAgICAgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgICAgIEBhdHRyaWJzKGZvbz0nYmFyJykKKyAgICAgICAgZGVmIGJheihzcGFtKToKKyAgICAgICAgICAgICIiIldoZWUhIiIiCisgICAgICAgIHJldHVybiBiYXoKKworICAgIGRlZiB0ZXN0X2NvbnRleHRtYW5hZ2VyX2F0dHJpYnMoc2VsZik6CisgICAgICAgIGJheiA9IHNlbGYuX2NyZWF0ZV9jb250ZXh0bWFuYWdlcl9hdHRyaWJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXouX19uYW1lX18sJ2JheicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6LmZvbywgJ2JhcicpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9jb250ZXh0bWFuYWdlcl9kb2NfYXR0cmliKHNlbGYpOgorICAgICAgICBiYXogPSBzZWxmLl9jcmVhdGVfY29udGV4dG1hbmFnZXJfYXR0cmlicygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6Ll9fZG9jX18sICJXaGVlISIpCisKK2NsYXNzIE5lc3RlZFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgWFhYIFRoaXMgbmVlZHMgbW9yZSB3b3JrCisKKyAgICBkZWYgdGVzdF9uZXN0ZWQoc2VsZik6CisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgYSgpOgorICAgICAgICAgICAgeWllbGQgMQorICAgICAgICBAY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIGIoKToKKyAgICAgICAgICAgIHlpZWxkIDIKKyAgICAgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiBjKCk6CisgICAgICAgICAgICB5aWVsZCAzCisgICAgICAgIHdpdGggbmVzdGVkKGEoKSwgYigpLCBjKCkpIGFzICh4LCB5LCB6KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeiwgMykKKworICAgIGRlZiB0ZXN0X25lc3RlZF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBzdGF0ZSA9IFtdCisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgYSgpOgorICAgICAgICAgICAgc3RhdGUuYXBwZW5kKDEpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgMgorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoMykKKyAgICAgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiBiKCk6CisgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoNCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCA1CisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN0YXRlLmFwcGVuZCg2KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgIHdpdGggbmVzdGVkKGEoKSwgYigpKSBhcyAoeCwgeSk6CisgICAgICAgICAgICAgICAgc3RhdGUuYXBwZW5kKHgpCisgICAgICAgICAgICAgICAgc3RhdGUuYXBwZW5kKHkpCisgICAgICAgICAgICAgICAgMSAvLyAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxLCA0LCAyLCA1LCA2LCAzXSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF9yaWdodF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgYSgpOgorICAgICAgICAgICAgeWllbGQgMQorICAgICAgICBjbGFzcyBiKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBuZXN0ZWQoYSgpLCBiKCkpIGFzICh4LCB5KToKKyAgICAgICAgICAgICAgICAxIC8vIDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoeCwgeSksICgxLCAyKSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF9iX3N3YWxsb3dzKHNlbGYpOgorICAgICAgICBAY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIGEoKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgYigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgIyBTd2FsbG93IHRoZSBleGNlcHRpb24KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggbmVzdGVkKGEoKSwgYigpKToKKyAgICAgICAgICAgICAgICAxIC8vIDAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3Qgc3dhbGxvdyBaZXJvRGl2aXNpb25FcnJvciIpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfYnJlYWsoc2VsZik6CisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgYSgpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgc3RhdGUgPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzdGF0ZSArPSAxCisgICAgICAgICAgICB3aXRoIG5lc3RlZChhKCksIGEoKSk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHN0YXRlICs9IDEwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIDEpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfY29udGludWUoc2VsZik6CisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgYSgpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgc3RhdGUgPSAwCisgICAgICAgIHdoaWxlIHN0YXRlIDwgMzoKKyAgICAgICAgICAgIHN0YXRlICs9IDEKKyAgICAgICAgICAgIHdpdGggbmVzdGVkKGEoKSwgYSgpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc3RhdGUgKz0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgMykKKworICAgIGRlZiB0ZXN0X25lc3RlZF9yZXR1cm4oc2VsZik6CisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgYSgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICB3aXRoIG5lc3RlZChhKCksIGEoKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIHJldHVybiAxMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbygpLCAxKQorCitjbGFzcyBDbG9zaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBYWFggVGhpcyBuZWVkcyBtb3JlIHdvcmsKKworICAgIGRlZiB0ZXN0X2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHN0YXRlID0gW10KKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoMSkKKyAgICAgICAgeCA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbXSkKKyAgICAgICAgd2l0aCBjbG9zaW5nKHgpIGFzIHk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxXSkKKworICAgIGRlZiB0ZXN0X2Nsb3NpbmdfZXJyb3Ioc2VsZik6CisgICAgICAgIHN0YXRlID0gW10KKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoMSkKKyAgICAgICAgeCA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICB3aXRoIGNsb3NpbmcoeCkgYXMgeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICAgICAgMSAvLyAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxXSkKKworY2xhc3MgRmlsZUNvbnRleHRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdFdpdGhPcGVuKHNlbGYpOgorICAgICAgICB0Zm4gPSB0ZW1wZmlsZS5ta3RlbXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gTm9uZQorICAgICAgICAgICAgd2l0aCBvcGVuKHRmbiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiQm9vaFxuIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKKyAgICAgICAgICAgIGYgPSBOb25lCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4odGZuLCAiciIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICJCb29oXG4iKQorICAgICAgICAgICAgICAgICAgICAxIC8vIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGZuKQorCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgTG9ja0NvbnRleHRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgYm9pbGVyUGxhdGUoc2VsZiwgbG9jaywgbG9ja2VkKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrZWQoKSkKKyAgICAgICAgd2l0aCBsb2NrOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2tlZCgpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG9ja2VkKCkpCisgICAgICAgICAgICAgICAgMSAvLyAwCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdFdpdGhMb2NrKHNlbGYpOgorICAgICAgICBsb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLmJvaWxlclBsYXRlKGxvY2ssIGxvY2subG9ja2VkKQorCisgICAgZGVmIHRlc3RXaXRoUkxvY2soc2VsZik6CisgICAgICAgIGxvY2sgPSB0aHJlYWRpbmcuUkxvY2soKQorICAgICAgICBzZWxmLmJvaWxlclBsYXRlKGxvY2ssIGxvY2suX2lzX293bmVkKQorCisgICAgZGVmIHRlc3RXaXRoQ29uZGl0aW9uKHNlbGYpOgorICAgICAgICBsb2NrID0gdGhyZWFkaW5nLkNvbmRpdGlvbigpCisgICAgICAgIGRlZiBsb2NrZWQoKToKKyAgICAgICAgICAgIHJldHVybiBsb2NrLl9pc19vd25lZCgpCisgICAgICAgIHNlbGYuYm9pbGVyUGxhdGUobG9jaywgbG9ja2VkKQorCisgICAgZGVmIHRlc3RXaXRoU2VtYXBob3JlKHNlbGYpOgorICAgICAgICBsb2NrID0gdGhyZWFkaW5nLlNlbWFwaG9yZSgpCisgICAgICAgIGRlZiBsb2NrZWQoKToKKyAgICAgICAgICAgIGlmIGxvY2suYWNxdWlyZShGYWxzZSk6CisgICAgICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgc2VsZi5ib2lsZXJQbGF0ZShsb2NrLCBsb2NrZWQpCisKKyAgICBkZWYgdGVzdFdpdGhCb3VuZGVkU2VtYXBob3JlKHNlbGYpOgorICAgICAgICBsb2NrID0gdGhyZWFkaW5nLkJvdW5kZWRTZW1hcGhvcmUoKQorICAgICAgICBkZWYgbG9ja2VkKCk6CisgICAgICAgICAgICBpZiBsb2NrLmFjcXVpcmUoRmFsc2UpOgorICAgICAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHNlbGYuYm9pbGVyUGxhdGUobG9jaywgbG9ja2VkKQorCisjIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIHRlc3QgYWN0dWFsbHkgcnVuIHVuZGVyIHJlZ3J0ZXN0LnB5IQorZGVmIHRlc3RfbWFpbigpOgorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgiV2l0aC1zdGF0ZW1lbnRzIG5vdyBkaXJlY3RseSBzdXBwb3J0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGNvbnRleHQgbWFuYWdlcnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29va2llLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29va2llLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNjEzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb29raWUucHkKQEAgLTAsMCArMSw5OSBAQAorIyBTaW1wbGUgdGVzdCBzdWl0ZSBmb3IgQ29va2llLnB5CisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcnVuX2RvY3Rlc3QsIGNoZWNrX3dhcm5pbmdzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBDb29raWUKKworCitjbGFzcyBDb29raWVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBDdXJyZW50bHkgdGhpcyBvbmx5IHRlc3RzIFNpbXBsZUNvb2tpZQorICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICBjYXNlcyA9IFsKKyAgICAgICAgICAgIHsgJ2RhdGEnOiAnY2hpcHM9YWhveTsgdmllbm5hPWZpbmdlcicsCisgICAgICAgICAgICAgICdkaWN0JzogeydjaGlwcyc6J2Fob3knLCAndmllbm5hJzonZmluZ2VyJ30sCisgICAgICAgICAgICAgICdyZXByJzogIjxTaW1wbGVDb29raWU6IGNoaXBzPSdhaG95JyB2aWVubmE9J2Zpbmdlcic+IiwKKyAgICAgICAgICAgICAgJ291dHB1dCc6ICdTZXQtQ29va2llOiBjaGlwcz1haG95XG5TZXQtQ29va2llOiB2aWVubmE9ZmluZ2VyJywKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIHsgJ2RhdGEnOiAna2VlYmxlcj0iRT1tYzI7IEw9XFwiTG92ZXNcXCI7IGZ1ZGdlPVxcMDEyOyInLAorICAgICAgICAgICAgICAnZGljdCc6IHsna2VlYmxlcicgOiAnRT1tYzI7IEw9IkxvdmVzIjsgZnVkZ2U9XDAxMjsnfSwKKyAgICAgICAgICAgICAgJ3JlcHInOiAnJyc8U2ltcGxlQ29va2llOiBrZWVibGVyPSdFPW1jMjsgTD0iTG92ZXMiOyBmdWRnZT1cXG47Jz4nJycsCisgICAgICAgICAgICAgICdvdXRwdXQnOiAnU2V0LUNvb2tpZToga2VlYmxlcj0iRT1tYzI7IEw9XFwiTG92ZXNcXCI7IGZ1ZGdlPVxcMDEyOyInLAorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgIyBDaGVjayBpbGxlZ2FsIGNvb2tpZXMgdGhhdCBoYXZlIGFuICc9JyBjaGFyIGluIGFuIHVucXVvdGVkIHZhbHVlCisgICAgICAgICAgICB7ICdkYXRhJzogJ2tlZWJsZXI9RT1tYzInLAorICAgICAgICAgICAgICAnZGljdCc6IHsna2VlYmxlcicgOiAnRT1tYzInfSwKKyAgICAgICAgICAgICAgJ3JlcHInOiAiPFNpbXBsZUNvb2tpZToga2VlYmxlcj0nRT1tYzInPiIsCisgICAgICAgICAgICAgICdvdXRwdXQnOiAnU2V0LUNvb2tpZToga2VlYmxlcj1FPW1jMicsCisgICAgICAgICAgICB9CisgICAgICAgIF0KKworICAgICAgICBmb3IgY2FzZSBpbiBjYXNlczoKKyAgICAgICAgICAgIEMgPSBDb29raWUuU2ltcGxlQ29va2llKCkKKyAgICAgICAgICAgIEMubG9hZChjYXNlWydkYXRhJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoQyksIGNhc2VbJ3JlcHInXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5vdXRwdXQoc2VwPSdcbicpLCBjYXNlWydvdXRwdXQnXSkKKyAgICAgICAgICAgIGZvciBrLCB2IGluIHNvcnRlZChjYXNlWydkaWN0J10uaXRlcml0ZW1zKCkpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ1trXS52YWx1ZSwgdikKKworICAgIGRlZiB0ZXN0X2xvYWQoc2VsZik6CisgICAgICAgIEMgPSBDb29raWUuU2ltcGxlQ29va2llKCkKKyAgICAgICAgQy5sb2FkKCdDdXN0b21lcj0iV0lMRV9FX0NPWU9URSI7IFZlcnNpb249MTsgUGF0aD0vYWNtZScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDWydDdXN0b21lciddLnZhbHVlLCAnV0lMRV9FX0NPWU9URScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ1snQ3VzdG9tZXInXVsndmVyc2lvbiddLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ1snQ3VzdG9tZXInXVsncGF0aCddLCAnL2FjbWUnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5vdXRwdXQoWydwYXRoJ10pLAorICAgICAgICAgICAgJ1NldC1Db29raWU6IEN1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgUGF0aD0vYWNtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5qc19vdXRwdXQoKSwgciIiIgorICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIDwhLS0gYmVnaW4gaGlkaW5nCisgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9ICJDdXN0b21lcj1cIldJTEVfRV9DT1lPVEVcIjsgUGF0aD0vYWNtZTsgVmVyc2lvbj0xIjsKKyAgICAgICAgLy8gZW5kIGhpZGluZyAtLT4KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgICIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmpzX291dHB1dChbJ3BhdGgnXSksIHIiIiIKKyAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICA8IS0tIGJlZ2luIGhpZGluZworICAgICAgICBkb2N1bWVudC5jb29raWUgPSAiQ3VzdG9tZXI9XCJXSUxFX0VfQ09ZT1RFXCI7IFBhdGg9L2FjbWUiOworICAgICAgICAvLyBlbmQgaGlkaW5nIC0tPgorICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgIiIiKQorCisgICAgICAgICMgbG9hZGluZyAnZXhwaXJlcycKKyAgICAgICAgQyA9IENvb2tpZS5TaW1wbGVDb29raWUoKQorICAgICAgICBDLmxvYWQoJ0N1c3RvbWVyPSJXIjsgZXhwaXJlcz1XZWQsIDAxIEphbiAyMDEwIDAwOjAwOjAwIEdNVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ1snQ3VzdG9tZXInXVsnZXhwaXJlcyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICdXZWQsIDAxIEphbiAyMDEwIDAwOjAwOjAwIEdNVCcpCisgICAgICAgIEMgPSBDb29raWUuU2ltcGxlQ29va2llKCkKKyAgICAgICAgQy5sb2FkKCdDdXN0b21lcj0iVyI7IGV4cGlyZXM9V2VkLCAwMSBKYW4gOTggMDA6MDA6MDAgR01UJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDWydDdXN0b21lciddWydleHBpcmVzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1dlZCwgMDEgSmFuIDk4IDAwOjAwOjAwIEdNVCcpCisKKyAgICBkZWYgdGVzdF9leHRlbmRlZF9lbmNvZGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgOTgyNDogc29tZSBicm93c2VycyBkb24ndCBmb2xsb3cgdGhlIHN0YW5kYXJkOyB3ZSBub3cKKyAgICAgICAgIyBlbmNvZGUgLCBhbmQgOyB0byBrZWVwIHRoZW0gZnJvbSB0cmlwcGluZyB1cC4KKyAgICAgICAgQyA9IENvb2tpZS5TaW1wbGVDb29raWUoKQorICAgICAgICBDWyd2YWwnXSA9ICJzb21lLGZ1bmt5O3N0dWZmIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMub3V0cHV0KFsndmFsJ10pLAorICAgICAgICAgICAgJ1NldC1Db29raWU6IHZhbD0ic29tZVxcMDU0ZnVua3lcXDA3M3N0dWZmIicpCisKKyAgICBkZWYgdGVzdF9xdW90ZWRfbWV0YShzZWxmKToKKyAgICAgICAgIyBUcnkgY29va2llIHdpdGggcXVvdGVkIG1ldGEtZGF0YQorICAgICAgICBDID0gQ29va2llLlNpbXBsZUNvb2tpZSgpCisgICAgICAgIEMubG9hZCgnQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOyBWZXJzaW9uPSIxIjsgUGF0aD0iL2FjbWUiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDWydDdXN0b21lciddLnZhbHVlLCAnV0lMRV9FX0NPWU9URScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ1snQ3VzdG9tZXInXVsndmVyc2lvbiddLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ1snQ3VzdG9tZXInXVsncGF0aCddLCAnL2FjbWUnKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KENvb2tpZVRlc3RzKQorICAgIGlmIENvb2tpZS5fX2RvY19fIGlzIG5vdCBOb25lOgorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnLitDb29raWUgY2xhc3MgaXMgaW5zZWN1cmU7IGRvIG5vdCB1c2UgaXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHJ1bl9kb2N0ZXN0KENvb2tpZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29va2llbGliLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29va2llbGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMGFkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb29raWVsaWIucHkKQEAgLTAsMCArMSwxNzYyIEBACisjIC0qLSBjb2Rpbmc6IGxhdGluLTEgLSotCisiIiJUZXN0cyBmb3IgY29va2llbGliLnB5LiIiIgorCitpbXBvcnQgY29va2llbGliCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHRpbWUKKworZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCitjbGFzcyBEYXRlVGltZVRlc3RzKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3RpbWUyaXNveihzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IHRpbWUyaXNvegorCisgICAgICAgIGJhc2UgPSAxMDE5MjI3MDAwCisgICAgICAgIGRheSA9IDI0KjM2MDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lMmlzb3ooYmFzZSksICIyMDAyLTA0LTE5IDE0OjM2OjQwWiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZTJpc296KGJhc2UrZGF5KSwgIjIwMDItMDQtMjAgMTQ6MzY6NDBaIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lMmlzb3ooYmFzZSsyKmRheSksICIyMDAyLTA0LTIxIDE0OjM2OjQwWiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZTJpc296KGJhc2UrMypkYXkpLCAiMjAwMi0wNC0yMiAxNDozNjo0MFoiKQorCisgICAgICAgIGF6ID0gdGltZTJpc296KCkKKyAgICAgICAgYnogPSB0aW1lMmlzb3ooNTAwMDAwKQorICAgICAgICBmb3IgdGV4dCBpbiAoYXosIGJ6KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2gociJeXGR7NH0tXGRcZC1cZFxkIFxkXGQ6XGRcZDpcZFxkWiQiLCB0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIHRpbWUyaXNveiBmb3JtYXQ6ICVzICVzIiAlIChheiwgYnopKQorCisgICAgZGVmIHRlc3RfaHR0cDJ0aW1lKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgaHR0cDJ0aW1lCisKKyAgICAgICAgZGVmIHBhcnNlX2RhdGUodGV4dCk6CisgICAgICAgICAgICByZXR1cm4gdGltZS5nbXRpbWUoaHR0cDJ0aW1lKHRleHQpKVs6Nl0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX2RhdGUoIjAxIEphbiAyMDAxIiksICgyMDAxLCAxLCAxLCAwLCAwLCAwLjApKQorCisgICAgICAgICMgdGhpcyB0ZXN0IHdpbGwgYnJlYWsgYXJvdW5kIHllYXIgMjA3MAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX2RhdGUoIjAzLUZlYi0yMCIpLCAoMjAyMCwgMiwgMywgMCwgMCwgMC4wKSkKKworICAgICAgICAjIHRoaXMgdGVzdCB3aWxsIGJyZWFrIGFyb3VuZCB5ZWFyIDIwNDgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9kYXRlKCIwMy1GZWItOTgiKSwgKDE5OTgsIDIsIDMsIDAsIDAsIDAuMCkpCisKKyAgICBkZWYgdGVzdF9odHRwMnRpbWVfZm9ybWF0cyhzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IGh0dHAydGltZSwgdGltZTJpc296CisKKyAgICAgICAgIyB0ZXN0IGh0dHAydGltZSBmb3Igc3VwcG9ydGVkIGRhdGVzLiAgVGVzdCBjYXNlcyB3aXRoIDIgZGlnaXQgeWVhcgorICAgICAgICAjIHdpbGwgcHJvYmFibHkgYnJlYWsgaW4geWVhciAyMDQ0LgorICAgICAgICB0ZXN0cyA9IFsKKyAgICAgICAgICdUaHUsIDAzIEZlYiAxOTk0IDAwOjAwOjAwIEdNVCcsICAjIHByb3Bvc2VkIG5ldyBIVFRQIGZvcm1hdAorICAgICAgICAgJ1RodXJzZGF5LCAwMy1GZWItOTQgMDA6MDA6MDAgR01UJywgICMgb2xkIHJmYzg1MCBIVFRQIGZvcm1hdAorICAgICAgICAgJ1RodXJzZGF5LCAwMy1GZWItMTk5NCAwMDowMDowMCBHTVQnLCAgIyBicm9rZW4gcmZjODUwIEhUVFAgZm9ybWF0CisKKyAgICAgICAgICcwMyBGZWIgMTk5NCAwMDowMDowMCBHTVQnLCAgIyBIVFRQIGZvcm1hdCAobm8gd2Vla2RheSkKKyAgICAgICAgICcwMy1GZWItOTQgMDA6MDA6MDAgR01UJywgICMgb2xkIHJmYzg1MCAobm8gd2Vla2RheSkKKyAgICAgICAgICcwMy1GZWItMTk5NCAwMDowMDowMCBHTVQnLCAgIyBicm9rZW4gcmZjODUwIChubyB3ZWVrZGF5KQorICAgICAgICAgJzAzLUZlYi0xOTk0IDAwOjAwIEdNVCcsICAjIGJyb2tlbiByZmM4NTAgKG5vIHdlZWtkYXksIG5vIHNlY29uZHMpCisgICAgICAgICAnMDMtRmViLTE5OTQgMDA6MDAnLCAgIyBicm9rZW4gcmZjODUwIChubyB3ZWVrZGF5LCBubyBzZWNvbmRzLCBubyB0eikKKworICAgICAgICAgJzAzLUZlYi05NCcsICAjIG9sZCByZmM4NTAgSFRUUCBmb3JtYXQgKG5vIHdlZWtkYXksIG5vIHRpbWUpCisgICAgICAgICAnMDMtRmViLTE5OTQnLCAgIyBicm9rZW4gcmZjODUwIEhUVFAgZm9ybWF0IChubyB3ZWVrZGF5LCBubyB0aW1lKQorICAgICAgICAgJzAzIEZlYiAxOTk0JywgICMgcHJvcG9zZWQgbmV3IEhUVFAgZm9ybWF0IChubyB3ZWVrZGF5LCBubyB0aW1lKQorCisgICAgICAgICAjIEEgZmV3IHRlc3RzIHdpdGggZXh0cmEgc3BhY2UgYXQgdmFyaW91cyBwbGFjZXMKKyAgICAgICAgICcgIDAzICAgRmViICAgMTk5NCAgMDowMCAgJywKKyAgICAgICAgICcgIDAzLUZlYi0xOTk0ICAnLAorICAgICAgICBdCisKKyAgICAgICAgdGVzdF90ID0gNzYwMjMzNjAwICAjIGFzc3VtZSBicm9rZW4gUE9TSVggY291bnRpbmcgb2Ygc2Vjb25kcworICAgICAgICByZXN1bHQgPSB0aW1lMmlzb3oodGVzdF90KQorICAgICAgICBleHBlY3RlZCA9ICIxOTk0LTAyLTAzIDAwOjAwOjAwWiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICIlcyAgPT4gICclcycgKCVzKSIgJSAodGVzdF90LCByZXN1bHQsIGV4cGVjdGVkKSkKKworICAgICAgICBmb3IgcyBpbiB0ZXN0czoKKyAgICAgICAgICAgIHQgPSBodHRwMnRpbWUocykKKyAgICAgICAgICAgIHQyID0gaHR0cDJ0aW1lKHMubG93ZXIoKSkKKyAgICAgICAgICAgIHQzID0gaHR0cDJ0aW1lKHMudXBwZXIoKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQgPT0gdDIgPT0gdDMgPT0gdGVzdF90LAorICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnICA9PiAgJXMsICVzLCAlcyAoJXMpIiAlIChzLCB0LCB0MiwgdDMsIHRlc3RfdCkpCisKKyAgICBkZWYgdGVzdF9odHRwMnRpbWVfZ2FyYmFnZShzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IGh0dHAydGltZQorCisgICAgICAgIGZvciB0ZXN0IGluIFsKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgJ0dhcmJhZ2UnLAorICAgICAgICAgICAgJ01hbmRhZyAxNi4gU2VwdGVtYmVyIDE5OTYnLAorICAgICAgICAgICAgJzAxLTAwLTE5ODAnLAorICAgICAgICAgICAgJzAxLTEzLTE5ODAnLAorICAgICAgICAgICAgJzAwLTAxLTE5ODAnLAorICAgICAgICAgICAgJzMyLTAxLTE5ODAnLAorICAgICAgICAgICAgJzAxLTAxLTE5ODAgMjU6MDA6MDAnLAorICAgICAgICAgICAgJzAxLTAxLTE5ODAgMDA6NjE6MDAnLAorICAgICAgICAgICAgJzAxLTAxLTE5ODAgMDA6MDA6NjInLAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShodHRwMnRpbWUodGVzdCkgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDJ0aW1lKCVzKSBpcyBub3QgTm9uZVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwMnRpbWUodGVzdCkgJXMiICUgKHRlc3QsIGh0dHAydGltZSh0ZXN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICApCisKKworY2xhc3MgSGVhZGVyVGVzdHMoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcGFyc2VfbnNfaGVhZGVyc19leHBpcmVzKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgcGFyc2VfbnNfaGVhZGVycworCisgICAgICAgICMgcXVvdGVzIHNob3VsZCBiZSBzdHJpcHBlZAorICAgICAgICBleHBlY3RlZCA9IFtbKCdmb28nLCAnYmFyJyksICgnZXhwaXJlcycsIDIyMDkwNjk0MTJMKSwgKCd2ZXJzaW9uJywgJzAnKV1dCisgICAgICAgIGZvciBoZHIgaW4gWworICAgICAgICAgICAgJ2Zvbz1iYXI7IGV4cGlyZXM9MDEgSmFuIDIwNDAgMjI6MjM6MzIgR01UJywKKyAgICAgICAgICAgICdmb289YmFyOyBleHBpcmVzPSIwMSBKYW4gMjA0MCAyMjoyMzozMiBHTVQiJywKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX25zX2hlYWRlcnMoW2hkcl0pLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3BhcnNlX25zX2hlYWRlcnNfdmVyc2lvbihzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IHBhcnNlX25zX2hlYWRlcnMKKworICAgICAgICAjIHF1b3RlcyBzaG91bGQgYmUgc3RyaXBwZWQKKyAgICAgICAgZXhwZWN0ZWQgPSBbWygnZm9vJywgJ2JhcicpLCAoJ3ZlcnNpb24nLCAnMScpXV0KKyAgICAgICAgZm9yIGhkciBpbiBbCisgICAgICAgICAgICAnZm9vPWJhcjsgdmVyc2lvbj0iMSInLAorICAgICAgICAgICAgJ2Zvbz1iYXI7IFZlcnNpb249IjEiJywKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX25zX2hlYWRlcnMoW2hkcl0pLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3BhcnNlX25zX2hlYWRlcnNfc3BlY2lhbF9uYW1lcyhzZWxmKToKKyAgICAgICAgIyBuYW1lcyBzdWNoIGFzICdleHBpcmVzJyBhcmUgbm90IHNwZWNpYWwgaW4gZmlyc3QgbmFtZT12YWx1ZSBwYWlyCisgICAgICAgICMgb2YgU2V0LUNvb2tpZTogaGVhZGVyCisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBwYXJzZV9uc19oZWFkZXJzCisKKyAgICAgICAgIyBDb29raWUgd2l0aCBuYW1lICdleHBpcmVzJworICAgICAgICBoZHIgPSAnZXhwaXJlcz0wMSBKYW4gMjA0MCAyMjoyMzozMiBHTVQnCisgICAgICAgIGV4cGVjdGVkID0gW1soImV4cGlyZXMiLCAiMDEgSmFuIDIwNDAgMjI6MjM6MzIgR01UIiksICgidmVyc2lvbiIsICIwIildXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX25zX2hlYWRlcnMoW2hkcl0pLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2pvaW5faGVhZGVyX3dvcmRzKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgam9pbl9oZWFkZXJfd29yZHMKKworICAgICAgICBqb2luZWQgPSBqb2luX2hlYWRlcl93b3JkcyhbWygiZm9vIiwgTm9uZSksICgiYmFyIiwgImJheiIpXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbmVkLCAiZm9vOyBiYXI9YmF6IikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW5faGVhZGVyX3dvcmRzKFtbXV0pLCAiIikKKworICAgIGRlZiB0ZXN0X3NwbGl0X2hlYWRlcl93b3JkcyhzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IHNwbGl0X2hlYWRlcl93b3JkcworCisgICAgICAgIHRlc3RzID0gWworICAgICAgICAgICAgKCJmb28iLCBbWygiZm9vIiwgTm9uZSldXSksCisgICAgICAgICAgICAoImZvbz1iYXIiLCBbWygiZm9vIiwgImJhciIpXV0pLAorICAgICAgICAgICAgKCIgICBmb28gICAiLCBbWygiZm9vIiwgTm9uZSldXSksCisgICAgICAgICAgICAoIiAgIGZvbz0gICAiLCBbWygiZm9vIiwgIiIpXV0pLAorICAgICAgICAgICAgKCIgICBmb289IiwgW1soImZvbyIsICIiKV1dKSwKKyAgICAgICAgICAgICgiICAgZm9vPSAgIDsgIiwgW1soImZvbyIsICIiKV1dKSwKKyAgICAgICAgICAgICgiICAgZm9vPSAgIDsgYmFyPSBiYXogIiwgW1soImZvbyIsICIiKSwgKCJiYXIiLCAiYmF6IildXSksCisgICAgICAgICAgICAoImZvbz1iYXIgYmFyPWJheiIsIFtbKCJmb28iLCAiYmFyIiksICgiYmFyIiwgImJheiIpXV0pLAorICAgICAgICAgICAgIyBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgaWYgdGhpcyBuZXh0IGZhaWxzLCBidXQgaXQgd29ya3MgQVRNCisgICAgICAgICAgICAoImZvbz0gYmFyPWJheiIsIFtbKCJmb28iLCAiYmFyPWJheiIpXV0pLAorICAgICAgICAgICAgKCJmb289YmFyO2Jhcj1iYXoiLCBbWygiZm9vIiwgImJhciIpLCAoImJhciIsICJiYXoiKV1dKSwKKyAgICAgICAgICAgICgnZm9vIGJhciBiYXonLCBbWygiZm9vIiwgTm9uZSksICgiYmFyIiwgTm9uZSksICgiYmF6IiwgTm9uZSldXSksCisgICAgICAgICAgICAoImEsIGIsIGMiLCBbWygiYSIsIE5vbmUpXSwgWygiYiIsIE5vbmUpXSwgWygiYyIsIE5vbmUpXV0pLAorICAgICAgICAgICAgKHInZm9vOyBiYXI9YmF6LCBzcGFtPSwgZm9vPSJcLFw7XCIiLCBiYXI9ICcsCisgICAgICAgICAgICAgW1soImZvbyIsIE5vbmUpLCAoImJhciIsICJiYXoiKV0sCisgICAgICAgICAgICAgIFsoInNwYW0iLCAiIildLCBbKCJmb28iLCAnLDsiJyldLCBbKCJiYXIiLCAiIildXSksCisgICAgICAgICAgICBdCisKKyAgICAgICAgZm9yIGFyZywgZXhwZWN0IGluIHRlc3RzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNwbGl0X2hlYWRlcl93b3JkcyhbYXJnXSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrLCBTdHJpbmdJTworICAgICAgICAgICAgICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhOb25lLCBmKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9ICIoZXJyb3IgLS0gdHJhY2ViYWNrIGZvbGxvd3MpXG5cbiVzIiAlIGYuZ2V0dmFsdWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsICBleHBlY3QsICIiIgorV2hlbiBwYXJzaW5nOiAnJXMnCitFeHBlY3RlZDogICAgICclcycKK0dvdDogICAgICAgICAgJyVzJworIiIiICUgKGFyZywgZXhwZWN0LCByZXN1bHQpKQorCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgc3BsaXRfaGVhZGVyX3dvcmRzLCBqb2luX2hlYWRlcl93b3JkcworCisgICAgICAgIHRlc3RzID0gWworICAgICAgICAgICAgKCJmb28iLCAiZm9vIiksCisgICAgICAgICAgICAoImZvbz1iYXIiLCAiZm9vPWJhciIpLAorICAgICAgICAgICAgKCIgICBmb28gICAiLCAiZm9vIiksCisgICAgICAgICAgICAoImZvbz0iLCAnZm9vPSIiJyksCisgICAgICAgICAgICAoImZvbz1iYXIgYmFyPWJheiIsICJmb289YmFyOyBiYXI9YmF6IiksCisgICAgICAgICAgICAoImZvbz1iYXI7YmFyPWJheiIsICJmb289YmFyOyBiYXI9YmF6IiksCisgICAgICAgICAgICAoJ2ZvbyBiYXIgYmF6JywgImZvbzsgYmFyOyBiYXoiKSwKKyAgICAgICAgICAgIChyJ2Zvbz0iXCIiIGJhcj0iXFwiJywgcidmb289IlwiIjsgYmFyPSJcXCInKSwKKyAgICAgICAgICAgICgnZm9vLCwsYmFyJywgJ2ZvbywgYmFyJyksCisgICAgICAgICAgICAoJ2Zvbz1iYXIsYmFyPWJheicsICdmb289YmFyLCBiYXI9YmF6JyksCisKKyAgICAgICAgICAgICgndGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEnLAorICAgICAgICAgICAgICd0ZXh0L2h0bWw7IGNoYXJzZXQ9Imlzby04ODU5LTEiJyksCisKKyAgICAgICAgICAgICgnZm9vPSJiYXIiOyBwb3J0PSI4MCw4MSI7IGRpc2NhcmQsIGJhcj1iYXonLAorICAgICAgICAgICAgICdmb289YmFyOyBwb3J0PSI4MCw4MSI7IGRpc2NhcmQsIGJhcj1iYXonKSwKKworICAgICAgICAgICAgKHInQmFzaWMgcmVhbG09IlwiZm9vXFxcXGJhclwiIicsCisgICAgICAgICAgICAgcidCYXNpYzsgcmVhbG09IlwiZm9vXFxcXGJhclwiIicpCisgICAgICAgICAgICBdCisKKyAgICAgICAgZm9yIGFyZywgZXhwZWN0IGluIHRlc3RzOgorICAgICAgICAgICAgaW5wdXQgPSBzcGxpdF9oZWFkZXJfd29yZHMoW2FyZ10pCisgICAgICAgICAgICByZXMgPSBqb2luX2hlYWRlcl93b3JkcyhpbnB1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBleHBlY3QsICIiIgorV2hlbiBwYXJzaW5nOiAnJXMnCitFeHBlY3RlZDogICAgICclcycKK0dvdDogICAgICAgICAgJyVzJworSW5wdXQgd2FzOiAgICAnJXMnCisiIiIgJSAoYXJnLCBleHBlY3QsIHJlcywgaW5wdXQpKQorCisKK2NsYXNzIEZha2VSZXNwb25zZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGVhZGVycz1bXSwgdXJsPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgaGVhZGVyczogbGlzdCBvZiBSRkM4MjItc3R5bGUgJ0tleTogdmFsdWUnIHN0cmluZ3MKKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCBtaW1ldG9vbHMsIFN0cmluZ0lPCisgICAgICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTygiXG4iLmpvaW4oaGVhZGVycykpCisgICAgICAgIHNlbGYuX2hlYWRlcnMgPSBtaW1ldG9vbHMuTWVzc2FnZShmKQorICAgICAgICBzZWxmLl91cmwgPSB1cmwKKyAgICBkZWYgaW5mbyhzZWxmKTogcmV0dXJuIHNlbGYuX2hlYWRlcnMKKworZGVmIGludGVyYWN0XzI5NjUoY29va2llamFyLCB1cmwsICpzZXRfY29va2llX2hkcnMpOgorICAgIHJldHVybiBfaW50ZXJhY3QoY29va2llamFyLCB1cmwsIHNldF9jb29raWVfaGRycywgIlNldC1Db29raWUyIikKKworZGVmIGludGVyYWN0X25ldHNjYXBlKGNvb2tpZWphciwgdXJsLCAqc2V0X2Nvb2tpZV9oZHJzKToKKyAgICByZXR1cm4gX2ludGVyYWN0KGNvb2tpZWphciwgdXJsLCBzZXRfY29va2llX2hkcnMsICJTZXQtQ29va2llIikKKworZGVmIF9pbnRlcmFjdChjb29raWVqYXIsIHVybCwgc2V0X2Nvb2tpZV9oZHJzLCBoZHJfbmFtZSk6CisgICAgIiIiUGVyZm9ybSBhIHNpbmdsZSByZXF1ZXN0IC8gcmVzcG9uc2UgY3ljbGUsIHJldHVybmluZyBDb29raWU6IGhlYWRlci4iIiIKKyAgICBmcm9tIHVybGxpYjIgaW1wb3J0IFJlcXVlc3QKKyAgICByZXEgPSBSZXF1ZXN0KHVybCkKKyAgICBjb29raWVqYXIuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQorICAgIGNvb2tpZV9oZHIgPSByZXEuZ2V0X2hlYWRlcigiQ29va2llIiwgIiIpCisgICAgaGVhZGVycyA9IFtdCisgICAgZm9yIGhkciBpbiBzZXRfY29va2llX2hkcnM6CisgICAgICAgIGhlYWRlcnMuYXBwZW5kKCIlczogJXMiICUgKGhkcl9uYW1lLCBoZHIpKQorICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCB1cmwpCisgICAgY29va2llamFyLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKKyAgICByZXR1cm4gY29va2llX2hkcgorCisKK2NsYXNzIEZpbGVDb29raWVKYXJUZXN0cyhUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbHdwX3ZhbHVlbGVzc19jb29raWUoc2VsZik6CisgICAgICAgICMgY29va2llcyB3aXRoIG5vIHZhbHVlIHNob3VsZCBiZSBzYXZlZCBhbmQgbG9hZGVkIGNvbnNpc3RlbnRseQorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgTFdQQ29va2llSmFyCisgICAgICAgIGZpbGVuYW1lID0gdGVzdF9zdXBwb3J0LlRFU1RGTgorICAgICAgICBjID0gTFdQQ29va2llSmFyKCkKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgJ2JvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5fY29va2llc1sid3d3LmFjbWUuY29tIl1bIi8iXVsiYm9vIl0udmFsdWUsIE5vbmUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGMuc2F2ZShmaWxlbmFtZSwgaWdub3JlX2Rpc2NhcmQ9VHJ1ZSkKKyAgICAgICAgICAgIGMgPSBMV1BDb29raWVKYXIoKQorICAgICAgICAgICAgYy5sb2FkKGZpbGVuYW1lLCBpZ25vcmVfZGlzY2FyZD1UcnVlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJ5OiBvcy51bmxpbmsoZmlsZW5hbWUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWyIvIl1bImJvbyJdLnZhbHVlLCBOb25lKQorCisgICAgZGVmIHRlc3RfYmFkX21hZ2ljKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgTFdQQ29va2llSmFyLCBNb3ppbGxhQ29va2llSmFyLCBMb2FkRXJyb3IKKyAgICAgICAgIyBJT0Vycm9ycyAoZWcuIGZpbGUgZG9lc24ndCBleGlzdCkgYXJlIGFsbG93ZWQgdG8gcHJvcGFnYXRlCisgICAgICAgIGZpbGVuYW1lID0gdGVzdF9zdXBwb3J0LlRFU1RGTgorICAgICAgICBmb3IgY29va2llamFyX2NsYXNzIGluIExXUENvb2tpZUphciwgTW96aWxsYUNvb2tpZUphcjoKKyAgICAgICAgICAgIGMgPSBjb29raWVqYXJfY2xhc3MoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGMubG9hZChmaWxlbmFtZT0iZm9yIHRoaXMgdGVzdCB0byB3b3JrLCBhIGZpbGUgd2l0aCB0aGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGVuYW1lIHNob3VsZCBub3QgZXhpc3QiKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGV4YzoKKyAgICAgICAgICAgICAgICAjIGV4YWN0bHkgSU9FcnJvciwgbm90IExvYWRFcnJvcgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLl9fY2xhc3NfXywgSU9FcnJvcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBJT0Vycm9yIGZvciBpbnZhbGlkIGZpbGVuYW1lIikKKyAgICAgICAgIyBJbnZhbGlkIGNvbnRlbnRzIG9mIGNvb2tpZXMgZmlsZSAoZWcuIGJhZCBtYWdpYyBzdHJpbmcpCisgICAgICAgICMgY2F1c2VzIGEgTG9hZEVycm9yLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInciKQorICAgICAgICAgICAgZi53cml0ZSgib29wc1xuIikKKyAgICAgICAgICAgIGZvciBjb29raWVqYXJfY2xhc3MgaW4gTFdQQ29va2llSmFyLCBNb3ppbGxhQ29va2llSmFyOgorICAgICAgICAgICAgICAgIGMgPSBjb29raWVqYXJfY2xhc3MoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKExvYWRFcnJvciwgYy5sb2FkLCBmaWxlbmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyeTogb3MudW5saW5rKGZpbGVuYW1lKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6IHBhc3MKKworY2xhc3MgQ29va2llVGVzdHMoVGVzdENhc2UpOgorICAgICMgWFhYCisgICAgIyBHZXQgcmlkIG9mIHN0cmluZyBjb21wYXJpc29ucyB3aGVyZSBub3QgYWN0dWFsbHkgdGVzdGluZyBzdHIgLyByZXByLgorICAgICMgLmNsZWFyKCkgZXRjLgorICAgICMgSVAgYWRkcmVzc2VzIGxpa2UgNTAgKHNpbmdsZSBudW1iZXIsIG5vIGRvdCkgYW5kIGRvbWFpbi1tYXRjaGluZworICAgICMgIGZ1bmN0aW9ucyAoYW5kIGlzX0hETik/ICBTZWUgZHJhZnQgUkZDIDI5NjUgZXJyYXRhLgorICAgICMgU3RyaWN0bmVzcyBzd2l0Y2hlcworICAgICMgaXNfdGhpcmRfcGFydHkoKQorICAgICMgdW52ZXJpZmlhYmlsaXR5IC8gdGhpcmQtcGFydHkgYmxvY2tpbmcKKyAgICAjIE5ldHNjYXBlIGNvb2tpZXMgd29yayB0aGUgc2FtZSBhcyBSRkMgMjk2NSB3aXRoIHJlZ2FyZCB0byBwb3J0LgorICAgICMgU2V0LUNvb2tpZSB3aXRoIG5lZ2F0aXZlIG1heCBhZ2UuCisgICAgIyBJZiB0dXJuIFJGQyAyOTY1IGhhbmRsaW5nIG9mZiwgU2V0LUNvb2tpZTIgY29va2llcyBzaG91bGQgbm90IGNsb2JiZXIKKyAgICAjICBTZXQtQ29va2llIGNvb2tpZXMuCisgICAgIyBDb29raWUyIHNob3VsZCBiZSBzZW50IGlmICphbnkqIGNvb2tpZXMgYXJlIG5vdCBWMSAoaWUuIFYwIE9SIFYyIGV0Yy4pLgorICAgICMgQ29va2llcyAoVjEgYW5kIFYwKSB3aXRoIG5vIGV4cGlyeSBkYXRlIHNob3VsZCBiZSBzZXQgdG8gYmUgZGlzY2FyZGVkLgorICAgICMgUkZDIDI5NjUgUXVvdGluZzoKKyAgICAjICBTaG91bGQgYWNjZXB0IHVucXVvdGVkIGNvb2tpZS1hdHRyaWJ1dGUgdmFsdWVzPyAgY2hlY2sgZXJyYXRhIGRyYWZ0LgorICAgICMgICBXaGljaCBhcmUgcmVxdWlyZWQgb24gdGhlIHdheSBpbiBhbmQgb3V0PworICAgICMgIFNob3VsZCBhbHdheXMgcmV0dXJuIHF1b3RlZCBjb29raWUtYXR0cmlidXRlIHZhbHVlcz8KKyAgICAjIFByb3BlciB0ZXN0aW5nIG9mIHdoZW4gUkZDIDI5NjUgY2xvYmJlcnMgTmV0c2NhcGUgKHdhaXRpbmcgZm9yIGVycmF0YSkuCisgICAgIyBQYXRoLW1hdGNoIG9uIHJldHVybiAoc2FtZSBmb3IgVjAgYW5kIFYxKS4KKyAgICAjIFJGQyAyOTY1IGFjY2VwdGFuY2UgYW5kIHJldHVybmluZyBydWxlcworICAgICMgIFNldC1Db29raWUyIHdpdGhvdXQgdmVyc2lvbiBhdHRyaWJ1dGUgaXMgcmVqZWN0ZWQuCisKKyAgICAjIE5ldHNjYXBlIHBlY3VsaWFyaXRpZXMgbGlzdCBmcm9tIFJvbmFsZCBUc2NoYWxhci4KKyAgICAjIFRoZSBmaXJzdCB0d28gc3RpbGwgbmVlZCB0ZXN0cywgdGhlIHJlc3QgYXJlIGNvdmVyZWQuCisjIyAtIFF1b3Rpbmc6IG9ubHkgcXVvdGVzIGFyb3VuZCB0aGUgZXhwaXJlcyB2YWx1ZSBhcmUgcmVjb2duaXplZCBhcyBzdWNoCisjIyAgIChhbmQgeWVzLCBzb21lIGZvbGtzIHF1b3RlIHRoZSBleHBpcmVzIHZhbHVlKTsgcXVvdGVzIGFyb3VuZCBhbnkgb3RoZXIKKyMjICAgdmFsdWUgYXJlIHRyZWF0ZWQgYXMgcGFydCBvZiB0aGUgdmFsdWUuCisjIyAtIFdoaXRlIHNwYWNlOiB3aGl0ZSBzcGFjZSBhcm91bmQgbmFtZXMgYW5kIHZhbHVlcyBpcyBpZ25vcmVkCisjIyAtIERlZmF1bHQgcGF0aDogaWYgbm8gcGF0aCBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIHRoZSBwYXRoIGRlZmF1bHRzIHRvIHRoZQorIyMgICBwYXRoIGluIHRoZSByZXF1ZXN0LXVyaSB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIHRoZSBsYXN0ICcvJy4gTm90ZQorIyMgICB0aGF0IHRoaXMgaXMgZW50aXJlbHkgZGlmZmVyZW50IGZyb20gd2hhdCB0aGUgc3BlYyBzYXlzLgorIyMgLSBDb21tYXMgYW5kIG90aGVyIGRlbGltaXRlcnM6IE5ldHNjYXBlIGp1c3QgcGFyc2VzIHVudGlsIHRoZSBuZXh0ICc7Jy4KKyMjICAgVGhpcyBtZWFucyBpdCB3aWxsIGFsbG93IGNvbW1hcyBldGMgaW5zaWRlIHZhbHVlcyAoYW5kIHllcywgYm90aAorIyMgICBjb21tYXMgYW5kIGVxdWFscyBhcmUgY29tbW9ubHkgYXBwZWFyIGluIHRoZSBjb29raWUgdmFsdWUpLiBUaGlzIGFsc28KKyMjICAgbWVhbnMgdGhhdCBpZiB5b3UgZm9sZCBtdWx0aXBsZSBTZXQtQ29va2llIGhlYWRlciBmaWVsZHMgaW50byBvbmUsCisjIyAgIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCBpdCdsbCBiZSBhIGhlYWRhY2hlIHRvIHBhcnNlIChhdCBsZWFzdCBteSBoZWFkCisjIyAgIHN0YXJ0cyBodXJ0aW5nIGV2ZXJ5dGltZSBJIHRoaW5rIG9mIHRoYXQgY29kZSkuCisjIyAtIEV4cGlyZXM6IFlvdSdsbCBnZXQgYWxsIHNvcnRzIG9mIGRhdGUgZm9ybWF0cyBpbiB0aGUgZXhwaXJlcywKKyMjICAgaW5jbHVkaW5nIGVtdHB5IGV4cGlyZXMgYXR0cmlidXRlcyAoImV4cGlyZXM9IikuIEJlIGFzIGZsZXhpYmxlIGFzIHlvdQorIyMgICBjYW4sIGFuZCBjZXJ0YWlubHkgZG9uJ3QgZXhwZWN0IHRoZSB3ZWVrZGF5IHRvIGJlIHRoZXJlOyBpZiB5b3UgY2FuJ3QKKyMjICAgcGFyc2UgaXQsIGp1c3QgaWdub3JlIGl0IGFuZCBwcmV0ZW5kIGl0J3MgYSBzZXNzaW9uIGNvb2tpZS4KKyMjIC0gRG9tYWluLW1hdGNoaW5nOiBOZXRzY2FwZSB1c2VzIHRoZSAyLWRvdCBydWxlIGZvciBfYWxsXyBkb21haW5zLCBub3QKKyMjICAganVzdCB0aGUgNyBzcGVjaWFsIFRMRCdzIGxpc3RlZCBpbiB0aGVpciBzcGVjLiBBbmQgZm9sa3MgcmVseSBvbgorIyMgICB0aGF0Li4uCisKKyAgICBkZWYgdGVzdF9kb21haW5fcmV0dXJuX29rKHNlbGYpOgorICAgICAgICAjIHRlc3Qgb3B0aW1pemF0aW9uOiAuZG9tYWluX3JldHVybl9vaygpIHNob3VsZCBmaWx0ZXIgb3V0IG1vc3QKKyAgICAgICAgIyBkb21haW5zIGluIHRoZSBDb29raWVKYXIgYmVmb3JlIHdlIHRyeSB0byBhY2Nlc3MgdGhlbSAoYmVjYXVzZSB0aGF0CisgICAgICAgICMgbWF5IHJlcXVpcmUgZGlzayBhY2Nlc3MgLS0gaW4gcGFydGljdWxhciwgd2l0aCBNU0lFQ29va2llSmFyKQorICAgICAgICAjIFRoaXMgaXMgb25seSBhIHJvdWdoIGNoZWNrIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBzbyBpdCdzIG5vdCB0b28KKyAgICAgICAgIyBjcml0aWNhbCBhcyBsb25nIGFzIGl0J3Mgc3VmZmljaWVudGx5IGxpYmVyYWwuCisgICAgICAgIGltcG9ydCBjb29raWVsaWIsIHVybGxpYjIKKyAgICAgICAgcG9sID0gY29va2llbGliLkRlZmF1bHRDb29raWVQb2xpY3koKQorICAgICAgICBmb3IgdXJsLCBkb21haW4sIG9rIGluIFsKKyAgICAgICAgICAgICgiaHR0cDovL2Zvby5iYXIuY29tLyIsICJibGFoLmNvbSIsIEZhbHNlKSwKKyAgICAgICAgICAgICgiaHR0cDovL2Zvby5iYXIuY29tLyIsICJyaHViYXJiLmJsYWguY29tIiwgRmFsc2UpLAorICAgICAgICAgICAgKCJodHRwOi8vZm9vLmJhci5jb20vIiwgInJodWJhcmIuZm9vLmJhci5jb20iLCBGYWxzZSksCisgICAgICAgICAgICAoImh0dHA6Ly9mb28uYmFyLmNvbS8iLCAiLmZvby5iYXIuY29tIiwgVHJ1ZSksCisgICAgICAgICAgICAoImh0dHA6Ly9mb28uYmFyLmNvbS8iLCAiZm9vLmJhci5jb20iLCBUcnVlKSwKKyAgICAgICAgICAgICgiaHR0cDovL2Zvby5iYXIuY29tLyIsICIuYmFyLmNvbSIsIFRydWUpLAorICAgICAgICAgICAgKCJodHRwOi8vZm9vLmJhci5jb20vIiwgImNvbSIsIFRydWUpLAorICAgICAgICAgICAgKCJodHRwOi8vZm9vLmNvbS8iLCAicmh1YmFyYi5mb28uY29tIiwgRmFsc2UpLAorICAgICAgICAgICAgKCJodHRwOi8vZm9vLmNvbS8iLCAiLmZvby5jb20iLCBUcnVlKSwKKyAgICAgICAgICAgICgiaHR0cDovL2Zvby5jb20vIiwgImZvby5jb20iLCBUcnVlKSwKKyAgICAgICAgICAgICgiaHR0cDovL2Zvby5jb20vIiwgImNvbSIsIFRydWUpLAorICAgICAgICAgICAgKCJodHRwOi8vZm9vLyIsICJyaHViYXJiLmZvbyIsIEZhbHNlKSwKKyAgICAgICAgICAgICgiaHR0cDovL2Zvby8iLCAiLmZvbyIsIFRydWUpLAorICAgICAgICAgICAgKCJodHRwOi8vZm9vLyIsICJmb28iLCBUcnVlKSwKKyAgICAgICAgICAgICgiaHR0cDovL2Zvby8iLCAiZm9vLmxvY2FsIiwgVHJ1ZSksCisgICAgICAgICAgICAoImh0dHA6Ly9mb28vIiwgIi5sb2NhbCIsIFRydWUpLAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHJlcXVlc3QgPSB1cmxsaWIyLlJlcXVlc3QodXJsKQorICAgICAgICAgICAgciA9IHBvbC5kb21haW5fcmV0dXJuX29rKGRvbWFpbiwgcmVxdWVzdCkKKyAgICAgICAgICAgIGlmIG9rOiBzZWxmLmFzc2VydFRydWUocikKKyAgICAgICAgICAgIGVsc2U6IHNlbGYuYXNzZXJ0VHJ1ZShub3QgcikKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfdmFsdWUoc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBNb3ppbGxhQ29va2llSmFyLCBsd3BfY29va2llX3N0cgorCisgICAgICAgICMgbWlzc2luZyA9IHNpZ24gaW4gQ29va2llOiBoZWFkZXIgaXMgcmVnYXJkZWQgYnkgTW96aWxsYSBhcyBhIG1pc3NpbmcKKyAgICAgICAgIyBuYW1lLCBhbmQgYnkgY29va2llbGliIGFzIGEgbWlzc2luZyB2YWx1ZQorICAgICAgICBmaWxlbmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICAgICAgYyA9IE1vemlsbGFDb29raWVKYXIoZmlsZW5hbWUpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICdlZ2dzJykKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgJyJzcGFtIjsgcGF0aD0vZm9vLycpCisgICAgICAgIGNvb2tpZSA9IGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWyIvIl1bImVnZ3MiXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29va2llLnZhbHVlIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29va2llLm5hbWUsICJlZ2dzIikKKyAgICAgICAgY29va2llID0gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl1bJy9mb28vJ11bJyJzcGFtIiddCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb29raWUudmFsdWUgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb29raWUubmFtZSwgJyJzcGFtIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHdwX2Nvb2tpZV9zdHIoY29va2llKSwgKAorICAgICAgICAgICAgcicic3BhbSI7IHBhdGg9Ii9mb28vIjsgZG9tYWluPSJ3d3cuYWNtZS5jb20iOyAnCisgICAgICAgICAgICAncGF0aF9zcGVjOyBkaXNjYXJkOyB2ZXJzaW9uPTAnKSkKKyAgICAgICAgb2xkX3N0ciA9IHJlcHIoYykKKyAgICAgICAgYy5zYXZlKGlnbm9yZV9leHBpcmVzPVRydWUsIGlnbm9yZV9kaXNjYXJkPVRydWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGMgPSBNb3ppbGxhQ29va2llSmFyKGZpbGVuYW1lKQorICAgICAgICAgICAgYy5yZXZlcnQoaWdub3JlX2V4cGlyZXM9VHJ1ZSwgaWdub3JlX2Rpc2NhcmQ9VHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayhjLmZpbGVuYW1lKQorICAgICAgICAjIGNvb2tpZXMgdW5jaGFuZ2VkIGFwYXJ0IGZyb20gbG9zdCBpbmZvIHJlLiB3aGV0aGVyIHBhdGggd2FzIHNwZWNpZmllZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmVwcihjKSwKKyAgICAgICAgICAgIHJlLnN1YigicGF0aF9zcGVjaWZpZWQ9JXMiICUgVHJ1ZSwgInBhdGhfc3BlY2lmaWVkPSVzIiAlIEZhbHNlLAorICAgICAgICAgICAgICAgICAgIG9sZF9zdHIpCisgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vZm9vLyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICcic3BhbSI7IGVnZ3MnKQorCisgICAgZGVmIHRlc3RfcmZjMjEwOV9oYW5kbGluZyhzZWxmKToKKyAgICAgICAgIyBSRkMgMjEwOSBjb29raWVzIGFyZSBoYW5kbGVkIGFzIFJGQyAyOTY1IG9yIE5ldHNjYXBlIGNvb2tpZXMsCisgICAgICAgICMgZGVwZW5kZW50IG9uIHBvbGljeSBzZXR0aW5ncworICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisKKyAgICAgICAgZm9yIHJmYzIxMDlfYXNfbmV0c2NhcGUsIHJmYzI5NjUsIHZlcnNpb24gaW4gWworICAgICAgICAgICAgIyBkZWZhdWx0IGFjY29yZGluZyB0byByZmMyOTY1IGlmIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZAorICAgICAgICAgICAgKE5vbmUsIEZhbHNlLCAwKSwKKyAgICAgICAgICAgIChOb25lLCBUcnVlLCAxKSwKKyAgICAgICAgICAgICMgZXhwbGljaXQgcmZjMjEwOV9hc19uZXRzY2FwZQorICAgICAgICAgICAgKEZhbHNlLCBGYWxzZSwgTm9uZSksICAjIHZlcnNpb24gTm9uZSBoZXJlIG1lYW5zIG5vIGNvb2tpZSBzdG9yZWQKKyAgICAgICAgICAgIChGYWxzZSwgVHJ1ZSwgMSksCisgICAgICAgICAgICAoVHJ1ZSwgRmFsc2UsIDApLAorICAgICAgICAgICAgKFRydWUsIFRydWUsIDApLAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHBvbGljeSA9IERlZmF1bHRDb29raWVQb2xpY3koCisgICAgICAgICAgICAgICAgcmZjMjEwOV9hc19uZXRzY2FwZT1yZmMyMTA5X2FzX25ldHNjYXBlLAorICAgICAgICAgICAgICAgIHJmYzI5NjU9cmZjMjk2NSkKKyAgICAgICAgICAgIGMgPSBDb29raWVKYXIocG9saWN5KQorICAgICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIiwgIm5pPW5pOyBWZXJzaW9uPTEiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvb2tpZSA9IGMuX2Nvb2tpZXNbInd3dy5leGFtcGxlLmNvbSJdWyIvIl1bIm5pIl0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmVyc2lvbiBpcyBOb25lKSAgIyBkaWRuJ3QgZXhwZWN0IGEgc3RvcmVkIGNvb2tpZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvb2tpZS52ZXJzaW9uLCB2ZXJzaW9uKQorICAgICAgICAgICAgICAgICMgMjk2NSBjb29raWVzIGFyZSB1bmFmZmVjdGVkCisgICAgICAgICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvbz1iYXI7IFZlcnNpb249MSIpCisgICAgICAgICAgICAgICAgaWYgcmZjMjk2NToKKyAgICAgICAgICAgICAgICAgICAgY29va2llMjk2NSA9IGMuX2Nvb2tpZXNbInd3dy5leGFtcGxlLmNvbSJdWyIvIl1bImZvbyJdCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29va2llMjk2NS52ZXJzaW9uLCAxKQorCisgICAgZGVmIHRlc3RfbnNfcGFyc2VyKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBERUZBVUxUX0hUVFBfUE9SVAorCisgICAgICAgIGMgPSBDb29raWVKYXIoKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhbT1lZ2dzOyBEb01haW49LmFjbWUuY29tOyBwb3J0OyBibEFyZ2g9ImZlZXAiJykKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgJ25pPW5pOyBwb3J0PTgwLDgwODAnKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbTo4MC8iLCAnbmluaT1uaScpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tOjgwLyIsICdmb289YmFyOyBleHBpcmVzPScpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tOjgwLyIsICdzcGFtPWVnZ3M7ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGlyZXM9IkZvbyBCYXIgMjUgMzM6MjI6MTEgMzAyMiInKQorCisgICAgICAgIGNvb2tpZSA9IGMuX2Nvb2tpZXNbIi5hY21lLmNvbSJdWyIvIl1bInNwYW0iXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvb2tpZS5kb21haW4sICIuYWNtZS5jb20iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29va2llLmRvbWFpbl9zcGVjaWZpZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29va2llLnBvcnQsIERFRkFVTFRfSFRUUF9QT1JUKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNvb2tpZS5wb3J0X3NwZWNpZmllZCkKKyAgICAgICAgIyBjYXNlIGlzIHByZXNlcnZlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29va2llLmhhc19ub25zdGFuZGFyZF9hdHRyKCJibEFyZ2giKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgIG5vdCBjb29raWUuaGFzX25vbnN0YW5kYXJkX2F0dHIoImJsYXJnaCIpKQorCisgICAgICAgIGNvb2tpZSA9IGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWyIvIl1bIm5pIl0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb29raWUuZG9tYWluLCAid3d3LmFjbWUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjb29raWUuZG9tYWluX3NwZWNpZmllZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb29raWUucG9ydCwgIjgwLDgwODAiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29va2llLnBvcnRfc3BlY2lmaWVkKQorCisgICAgICAgIGNvb2tpZSA9IGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWyIvIl1bIm5pbmkiXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29va2llLnBvcnQgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjb29raWUucG9ydF9zcGVjaWZpZWQpCisKKyAgICAgICAgIyBpbnZhbGlkIGV4cGlyZXMgc2hvdWxkIG5vdCBjYXVzZSBjb29raWUgdG8gYmUgZHJvcHBlZAorICAgICAgICBmb28gPSBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXVsiLyJdWyJmb28iXQorICAgICAgICBzcGFtID0gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl1bIi8iXVsiZm9vIl0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvby5leHBpcmVzIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGFtLmV4cGlyZXMgaXMgTm9uZSkKKworICAgIGRlZiB0ZXN0X25zX3BhcnNlcl9zcGVjaWFsX25hbWVzKHNlbGYpOgorICAgICAgICAjIG5hbWVzIHN1Y2ggYXMgJ2V4cGlyZXMnIGFyZSBub3Qgc3BlY2lhbCBpbiBmaXJzdCBuYW1lPXZhbHVlIHBhaXIKKyAgICAgICAgIyBvZiBTZXQtQ29va2llOiBoZWFkZXIKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphcgorCisgICAgICAgIGMgPSBDb29raWVKYXIoKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnZXhwaXJlcz1lZ2dzJykKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgJ3ZlcnNpb249ZWdnczsgc3BhbT1lZ2dzJykKKworICAgICAgICBjb29raWVzID0gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl1bIi8iXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2V4cGlyZXMnIGluIGNvb2tpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgndmVyc2lvbicgaW4gY29va2llcykKKworICAgIGRlZiB0ZXN0X2V4cGlyZXMoc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCB0aW1lMm5ldHNjYXBlLCBDb29raWVKYXIKKworICAgICAgICAjIGlmIGV4cGlyZXMgaXMgaW4gZnV0dXJlLCBrZWVwIGNvb2tpZS4uLgorICAgICAgICBjID0gQ29va2llSmFyKCkKKyAgICAgICAgZnV0dXJlID0gdGltZTJuZXRzY2FwZSh0aW1lLnRpbWUoKSszNjAwKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnc3BhbT0iYmFyIjsgZXhwaXJlcz0lcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICBmdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorICAgICAgICBub3cgPSB0aW1lMm5ldHNjYXBlKHRpbWUudGltZSgpLTEpCisgICAgICAgICMgLi4uIGFuZCBpZiBpbiBwYXN0IG9yIHByZXNlbnQsIGRpc2NhcmQgaXQKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgJ2Zvbz0iZWdncyI7IGV4cGlyZXM9JXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbm93KQorICAgICAgICBoID0gaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnc3BhbT0iYmFyIicgaW4gaCBhbmQgImZvbyIgbm90IGluIGgpCisKKyAgICAgICAgIyBtYXgtYWdlIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBleHBpcmVzLCBhbmQgemVybyBtYXgtYWdlIGlzIHJlcXVlc3QgdG8KKyAgICAgICAgIyBkZWxldGUgYm90aCBuZXcgY29va2llIGFuZCBhbnkgb2xkIG1hdGNoaW5nIGNvb2tpZQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnZWdncz0iYmFyIjsgZXhwaXJlcz0lcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICBmdXR1cmUpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICdiYXI9ImJhciI7IGV4cGlyZXM9JXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMykKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIiwgJ2VnZ3M9ImJhciI7ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGlyZXM9JXM7IG1heC1hZ2U9MCcgJSBmdXR1cmUpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICdiYXI9ImJhciI7ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ21heC1hZ2U9MDsgZXhwaXJlcz0lcycgJSBmdXR1cmUpCisgICAgICAgIGggPSBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKKworICAgICAgICAjIHRlc3QgZXhwaXJ5IGF0IGVuZCBvZiBzZXNzaW9uIGZvciBjb29raWVzIHdpdGggbm8gZXhwaXJlcyBhdHRyaWJ1dGUKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cucmh1YmFyYi5uZXQvIiwgJ3dodW09ImZpenoiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCisgICAgICAgIGMuY2xlYXJfc2Vzc2lvbl9jb29raWVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3NwYW09ImJhciInLCBoKQorCisgICAgICAgICMgWFhYIFJGQyAyOTY1IGV4cGlyeSBydWxlcyAoc29tZSBhcHBseSB0byBWMCB0b28pCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3BhdGgoc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKworICAgICAgICAjIFJGQyAyOTY1CisgICAgICAgIHBvbCA9IERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKQorCisgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQorICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICdzcGFtPSJiYXIiOyBWZXJzaW9uPSIxIicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi8iLCBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKKworICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9ibGFoIiwgJ2VnZ3M9ImJhciI7IFZlcnNpb249IjEiJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiLyIsIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQorCisgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQorICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2JsYWgvcmh1YmFyYiIsCisgICAgICAgICAgICAgICAgICAgICAgJ2VnZ3M9ImJhciI7IFZlcnNpb249IjEiJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiL2JsYWgvIiwgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCisKKyAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCisgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYmxhaC9yaHViYXJiLyIsCisgICAgICAgICAgICAgICAgICAgICAgJ2VnZ3M9ImJhciI7IFZlcnNpb249IjEiJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiL2JsYWgvcmh1YmFyYi8iLCBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKKworICAgICAgICAjIE5ldHNjYXBlCisKKyAgICAgICAgYyA9IENvb2tpZUphcigpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsICdzcGFtPSJiYXIiJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiLyIsIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQorCisgICAgICAgIGMgPSBDb29raWVKYXIoKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9ibGFoIiwgJ2VnZ3M9ImJhciInKQorICAgICAgICBzZWxmLmFzc2VydEluKCIvIiwgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCisKKyAgICAgICAgYyA9IENvb2tpZUphcigpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2JsYWgvcmh1YmFyYiIsICdlZ2dzPSJiYXIiJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiL2JsYWgiLCBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKKworICAgICAgICBjID0gQ29va2llSmFyKCkKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYmxhaC9yaHViYXJiLyIsICdlZ2dzPSJiYXIiJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiL2JsYWgvcmh1YmFyYiIsIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9wYXRoX3dpdGhfcXVlcnkoc2VsZik6CisgICAgICAgIGNqID0gY29va2llbGliLkNvb2tpZUphcigpCisgICAgICAgIHVyaSA9ICJodHRwOi8vZXhhbXBsZS5jb20vP3NwYW0vZWdncyIKKyAgICAgICAgdmFsdWUgPSAnZWdncz0iYmFyIicKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoY2osIHVyaSwgdmFsdWUpCisgICAgICAgICMgZGVmYXVsdCBwYXRoIGRvZXMgbm90IGluY2x1ZGUgcXVlcnksIHNvIGlzICIvIiwgbm90ICIvP3NwYW0iCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi8iLCBjai5fY29va2llc1siZXhhbXBsZS5jb20iXSkKKyAgICAgICAgIyBjb29raWUgaXMgc2VudCBiYWNrIHRvIHRoZSBzYW1lIFVSSQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0X25ldHNjYXBlKGNqLCB1cmkpLCB2YWx1ZSkKKworICAgIGRlZiB0ZXN0X2VzY2FwZV9wYXRoKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgZXNjYXBlX3BhdGgKKyAgICAgICAgY2FzZXMgPSBbCisgICAgICAgICAgICAjIHF1b3RlZCBzYWZlCisgICAgICAgICAgICAoIi9mb28lMmYvYmFyIiwgIi9mb28lMkYvYmFyIiksCisgICAgICAgICAgICAoIi9mb28lMkYvYmFyIiwgIi9mb28lMkYvYmFyIiksCisgICAgICAgICAgICAjIHF1b3RlZCAlCisgICAgICAgICAgICAoIi9mb28lJS9iYXIiLCAiL2ZvbyUlL2JhciIpLAorICAgICAgICAgICAgIyBxdW90ZWQgdW5zYWZlCisgICAgICAgICAgICAoIi9mbyUxOW8vYmFyIiwgIi9mbyUxOW8vYmFyIiksCisgICAgICAgICAgICAoIi9mbyU3ZG8vYmFyIiwgIi9mbyU3RG8vYmFyIiksCisgICAgICAgICAgICAjIHVucXVvdGVkIHNhZmUKKyAgICAgICAgICAgICgiL2Zvby9iYXImIiwgIi9mb28vYmFyJiIpLAorICAgICAgICAgICAgKCIvZm9vLy9iYXIiLCAiL2Zvby8vYmFyIiksCisgICAgICAgICAgICAoIlwxNzYvZm9vL2JhciIsICJcMTc2L2Zvby9iYXIiKSwKKyAgICAgICAgICAgICMgdW5xdW90ZWQgdW5zYWZlCisgICAgICAgICAgICAoIi9mb29cMDMxL2JhciIsICIvZm9vJTE5L2JhciIpLAorICAgICAgICAgICAgKCIvXDE3NWZvby9iYXIiLCAiLyU3RGZvby9iYXIiKSwKKyAgICAgICAgICAgICMgdW5pY29kZQorICAgICAgICAgICAgKHUiL2Zvby9iYXJcdWFiY2QiLCAiL2Zvby9iYXIlRUElQUYlOEQiKSwgICMgVVRGLTggZW5jb2RlZAorICAgICAgICAgICAgXQorICAgICAgICBmb3IgYXJnLCByZXN1bHQgaW4gY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVzY2FwZV9wYXRoKGFyZyksIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X3JlcXVlc3RfcGF0aChzZWxmKToKKyAgICAgICAgZnJvbSB1cmxsaWIyIGltcG9ydCBSZXF1ZXN0CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCByZXF1ZXN0X3BhdGgKKyAgICAgICAgIyB3aXRoIHBhcmFtZXRlcnMKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbS9yaGV1bS9yaGFwb250aWN1bTsiCisgICAgICAgICAgICAgICAgICAgICAgImZvbz1iYXI7c2luZz1zb25nP2FwcGxlcz1wZWFycyZzcGFtPWVnZ3MjbmkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfcGF0aChyZXEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIvcmhldW0vcmhhcG9udGljdW07Zm9vPWJhcjtzaW5nPXNvbmciKQorICAgICAgICAjIHdpdGhvdXQgcGFyYW1ldGVycworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3JoZXVtL3JoYXBvbnRpY3VtPyIKKyAgICAgICAgICAgICAgICAgICAgICAiYXBwbGVzPXBlYXJzJnNwYW09ZWdncyNuaSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxdWVzdF9wYXRoKHJlcSksICIvcmhldW0vcmhhcG9udGljdW0iKQorICAgICAgICAjIG1pc3NpbmcgZmluYWwgc2xhc2gKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxdWVzdF9wYXRoKHJlcSksICIvIikKKworICAgIGRlZiB0ZXN0X3JlcXVlc3RfcG9ydChzZWxmKToKKyAgICAgICAgZnJvbSB1cmxsaWIyIGltcG9ydCBSZXF1ZXN0CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCByZXF1ZXN0X3BvcnQsIERFRkFVTFRfSFRUUF9QT1JUCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuYWNtZS5jb206MTIzNC8iLAorICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9eyJIb3N0IjogInd3dy5hY21lLmNvbTo0MzIxIn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxdWVzdF9wb3J0KHJlcSksICIxMjM0IikKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS8iLAorICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9eyJIb3N0IjogInd3dy5hY21lLmNvbTo0MzIxIn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxdWVzdF9wb3J0KHJlcSksIERFRkFVTFRfSFRUUF9QT1JUKQorCisgICAgZGVmIHRlc3RfcmVxdWVzdF9ob3N0KHNlbGYpOgorICAgICAgICBmcm9tIHVybGxpYjIgaW1wb3J0IFJlcXVlc3QKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IHJlcXVlc3RfaG9zdAorICAgICAgICAjIHRoaXMgcmVxdWVzdCBpcyBpbGxlZ2FsIChSRkMyNjE2LCAxNC4yLjMpCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly8xLjEuMS4xLyIsCisgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17Ikhvc3QiOiAid3d3LmFjbWUuY29tOjgwIn0pCisgICAgICAgICMgbGlid3d3LXBlcmwgd2FudHMgdGhpcyByZXNwb25zZSwgYnV0IHRoYXQgc2VlbXMgd3JvbmcgKFJGQyAyNjE2LAorICAgICAgICAjIHNlY3Rpb24gNS4yLCBwb2ludCAxLiwgYW5kIFJGQyAyOTY1IHNlY3Rpb24gMSwgcGFyYWdyYXBoIDMpCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfaG9zdChyZXEpLCAid3d3LmFjbWUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0X2hvc3QocmVxKSwgIjEuMS4xLjEiKQorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tLyIsCisgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17Ikhvc3QiOiAiaXJyZWxldmFudC5jb20ifSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0X2hvc3QocmVxKSwgInd3dy5hY21lLmNvbSIpCisgICAgICAgICMgbm90IGFjdHVhbGx5IHN1cmUgdGhpcyBvbmUgaXMgdmFsaWQgUmVxdWVzdCBvYmplY3QsIHNvIG1heWJlIHNob3VsZAorICAgICAgICAjIHJlbW92ZSB0ZXN0IGZvciBubyBob3N0IGluIHVybCBpbiByZXF1ZXN0X2hvc3QgZnVuY3Rpb24/CisgICAgICAgIHJlcSA9IFJlcXVlc3QoIi9yZXNvdXJjZS5odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzPXsiSG9zdCI6ICJ3d3cuYWNtZS5jb20ifSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0X2hvc3QocmVxKSwgInd3dy5hY21lLmNvbSIpCisgICAgICAgICMgcG9ydCBzaG91bGRuJ3QgYmUgaW4gcmVxdWVzdC1ob3N0CisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuYWNtZS5jb206MjM0NS9yZXNvdXJjZS5odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzPXsiSG9zdCI6ICJ3d3cuYWNtZS5jb206NTQzMiJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfaG9zdChyZXEpLCAid3d3LmFjbWUuY29tIikKKworICAgIGRlZiB0ZXN0X2lzX0hETihzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IGlzX0hETgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfSEROKCJmb28uYmFyLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfSEROKCIxZm9vMi4zYmFyNC41Y29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNfSEROKCIxOTIuMTY4LjEuMSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGlzX0hETigiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNfSEROKCIuIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNfSEROKCIuZm9vLmJhci5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc19IRE4oIi4uZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNfSEROKCJmb28uIikpCisKKyAgICBkZWYgdGVzdF9yZWFjaChzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IHJlYWNoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhY2goInd3dy5hY21lLmNvbSIpLCAiLmFjbWUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFjaCgiYWNtZS5jb20iKSwgImFjbWUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFjaCgiYWNtZS5sb2NhbCIpLCAiLmxvY2FsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFjaCgiLmxvY2FsIiksICIubG9jYWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWNoKCIuY29tIiksICIuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFjaCgiLiIpLCAiLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhY2goIiIpLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFjaCgiMTkyLjE2OC4wLjEiKSwgIjE5Mi4xNjguMC4xIikKKworICAgIGRlZiB0ZXN0X2RvbWFpbl9tYXRjaChzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IGRvbWFpbl9tYXRjaCwgdXNlcl9kb21haW5fbWF0Y2gKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRvbWFpbl9tYXRjaCgiMTkyLjE2OC4xLjEiLCAiMTkyLjE2OC4xLjEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBkb21haW5fbWF0Y2goIjE5Mi4xNjguMS4xIiwgIi4xNjguMS4xIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkb21haW5fbWF0Y2goIngueS5jb20iLCAieC5ZLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIi5ZLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGRvbWFpbl9tYXRjaCgieC55LmNvbSIsICJZLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZG9tYWluX21hdGNoKCJhLmIuYy5jb20iLCAiLmMuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZG9tYWluX21hdGNoKCIuYy5jb20iLCAiYS5iLmMuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkb21haW5fbWF0Y2goImV4YW1wbGUubG9jYWwiLCAiLmxvY2FsIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZG9tYWluX21hdGNoKCJibGFoLmJsYWgiLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZG9tYWluX21hdGNoKCIiLCAiLnJodWJhcmIucmh1YmFyYiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZG9tYWluX21hdGNoKCIiLCAiIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfZG9tYWluX21hdGNoKCJhY21lLmNvbSIsICJhY21lLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHVzZXJfZG9tYWluX21hdGNoKCJhY21lLmNvbSIsICIuYWNtZS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfZG9tYWluX21hdGNoKCJyaHViYXJiLmFjbWUuY29tIiwgIi5hY21lLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXNlcl9kb21haW5fbWF0Y2goInd3dy5yaHViYXJiLmFjbWUuY29tIiwgIi5hY21lLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAieC5ZLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAiLlkuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAiWS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfZG9tYWluX21hdGNoKCJ5LmNvbSIsICJZLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHVzZXJfZG9tYWluX21hdGNoKCIueS5jb20iLCAiWS5jb20iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfZG9tYWluX21hdGNoKCIueS5jb20iLCAiLlkuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1c2VyX2RvbWFpbl9tYXRjaCgieC55LmNvbSIsICIuY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAiY29tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAibSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHVzZXJfZG9tYWluX21hdGNoKCJ4LnkuY29tIiwgIi5tIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIngueS5jb20iLCAiLiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXNlcl9kb21haW5fbWF0Y2goIjE5Mi4xNjguMS4xIiwgIjE5Mi4xNjguMS4xIikpCisgICAgICAgICMgbm90IGJvdGggSEROcywgc28gbXVzdCBzdHJpbmctY29tcGFyZSBlcXVhbCB0byBtYXRjaAorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHVzZXJfZG9tYWluX21hdGNoKCIxOTIuMTY4LjEuMSIsICIuMTY4LjEuMSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHVzZXJfZG9tYWluX21hdGNoKCIxOTIuMTY4LjEuMSIsICIuIikpCisgICAgICAgICMgZW1wdHkgc3RyaW5nIGlzIGEgc3BlY2lhbCBjYXNlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdXNlcl9kb21haW5fbWF0Y2goIjE5Mi4xNjguMS4xIiwgIiIpKQorCisgICAgZGVmIHRlc3Rfd3JvbmdfZG9tYWluKHNlbGYpOgorICAgICAgICAjIENvb2tpZXMgd2hvc2UgZWZmZWN0aXZlIHJlcXVlc3QtaG9zdCBuYW1lIGRvZXMgbm90IGRvbWFpbi1tYXRjaCB0aGUKKyAgICAgICAgIyBkb21haW4gYXJlIHJlamVjdGVkLgorCisgICAgICAgICMgWFhYIGZhciBmcm9tIGNvbXBsZXRlCisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIKKyAgICAgICAgYyA9IENvb2tpZUphcigpCisgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cubmFzdHkuY29tLyIsCisgICAgICAgICAgICAgICAgICAgICAgJ2Zvbz1iYXI7IGRvbWFpbj1mcmllbmRseS5vcmc7IFZlcnNpb249IjEiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDApCisKKyAgICBkZWYgdGVzdF9zdHJpY3RfZG9tYWluKHNlbGYpOgorICAgICAgICAjIENvb2tpZXMgd2hvc2UgZG9tYWluIGlzIGEgY291bnRyeS1jb2RlIHRsZCBsaWtlIC5jby51ayBzaG91bGQKKyAgICAgICAgIyBub3QgYmUgc2V0IGlmIENvb2tpZVBvbGljeS5zdHJpY3RfZG9tYWluIGlzIHRydWUuCisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKworICAgICAgICBjcCA9IERlZmF1bHRDb29raWVQb2xpY3koc3RyaWN0X2RvbWFpbj1UcnVlKQorICAgICAgICBjaiA9IENvb2tpZUphcihwb2xpY3k9Y3ApCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGNqLCAiaHR0cDovL2V4YW1wbGUuY28udWsvIiwgJ25vPXByb2JsZW1vJykKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoY2osICJodHRwOi8vZXhhbXBsZS5jby51ay8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnb2tleT1kb2tleTsgRG9tYWluPS5leGFtcGxlLmNvLnVrJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY2opLCAyKQorICAgICAgICBmb3IgcHNldWRvX3RsZCBpbiBbIi5jby51ayIsICIub3JnLnphIiwgIi50eC51cyIsICIubmFtZS51cyJdOgorICAgICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoY2osICJodHRwOi8vZXhhbXBsZS4lcy8iICUgcHNldWRvX3RsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFtPWVnZ3M7IERvbWFpbj0uY28udWsnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY2opLCAyKQorCisgICAgZGVmIHRlc3RfdHdvX2NvbXBvbmVudF9kb21haW5fbnMoc2VsZik6CisgICAgICAgICMgTmV0c2NhcGU6IC53d3cuYmFyLmNvbSwgd3d3LmJhci5jb20sIC5iYXIuY29tLCBiYXIuY29tLCBubyBkb21haW4KKyAgICAgICAgIyBzaG91bGQgYWxsIGdldCBhY2NlcHRlZCwgYXMgc2hvdWxkIC5hY21lLmNvbSwgYWNtZS5jb20gYW5kIG5vIGRvbWFpbgorICAgICAgICAjIGZvciAyLWNvbXBvbmVudCBkb21haW5zIGxpa2UgYWNtZS5jb20uCisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKworICAgICAgICBjID0gQ29va2llSmFyKCkKKworICAgICAgICAjIHR3by1jb21wb25lbnQgVjAgZG9tYWluIGlzIE9LCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZm9vLm5ldC8iLCAnbnM9YmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5fY29va2llc1siZm9vLm5ldCJdWyIvIl1bIm5zIl0udmFsdWUsICJiYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZm9vLm5ldC8iKSwgIm5zPWJhciIpCisgICAgICAgICMgKndpbGwqIGJlIHJldHVybmVkIHRvIGFueSBvdGhlciBkb21haW4gKHVubGlrZSBSRkMgMjk2NSkuLi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5mb28ubmV0LyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJucz1iYXIiKQorICAgICAgICAjIC4uLnVubGVzcyByZXF1ZXN0ZWQgb3RoZXJ3aXNlCisgICAgICAgIHBvbCA9IERlZmF1bHRDb29raWVQb2xpY3koCisgICAgICAgICAgICBzdHJpY3RfbnNfZG9tYWluPURlZmF1bHRDb29raWVQb2xpY3kuRG9tYWluU3RyaWN0Tm9uRG9tYWluKQorICAgICAgICBjLnNldF9wb2xpY3kocG9sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmZvby5uZXQvIiksICIiKQorCisgICAgICAgICMgdW5saWtlIFJGQyAyOTY1LCBldmVuIGV4cGxpY2l0IHR3by1jb21wb25lbnQgZG9tYWluIGlzIE9LLAorICAgICAgICAjIGJlY2F1c2UgLmZvby5uZXQgbWF0Y2hlcyBmb28ubmV0CisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZm9vLm5ldC9mb28vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwYW0xPWVnZ3M7IGRvbWFpbj1mb28ubmV0JykKKyAgICAgICAgIyBldmVuIGlmIHN0YXJ0cyB3aXRoIGEgZG90IC0tIGluIE5TIHJ1bGVzLCAuZm9vLm5ldCBtYXRjaGVzIGZvby5uZXQhCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZm9vLm5ldC9mb28vYmFyLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFtMj1lZ2dzOyBkb21haW49LmZvby5uZXQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLl9jb29raWVzWyIuZm9vLm5ldCJdWyIvZm9vIl1bInNwYW0xIl0udmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgImVnZ3MiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX2Nvb2tpZXNbIi5mb28ubmV0Il1bIi9mb28vYmFyIl1bInNwYW0yIl0udmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgImVnZ3MiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZm9vLm5ldC9mb28vYmFyLyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFtMj1lZ2dzOyBzcGFtMT1lZ2dzOyBucz1iYXIiKQorCisgICAgICAgICMgdG9wLWxldmVsIGRvbWFpbiBpcyB0b28gZ2VuZXJhbAorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL2Zvby5uZXQvIiwgJ25pbmk9Im5pIjsgZG9tYWluPS5uZXQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMykKKworIyMgICAgICAgICAjIE5ldHNjYXBlIHByb3RvY29sIGRvZXNuJ3QgYWxsb3cgbm9uLXNwZWNpYWwgdG9wIGxldmVsIGRvbWFpbnMgKHN1Y2gKKyMjICAgICAgICAgIyBhcyBjby51aykgaW4gdGhlIGRvbWFpbiBhdHRyaWJ1dGUgdW5sZXNzIHRoZXJlIGFyZSBhdCBsZWFzdCB0aHJlZQorIyMgICAgICAgICAjIGRvdHMgaW4gaXQuCisgICAgICAgICMgT2ggeWVzIGl0IGRvZXMhICBSZWFsIGltcGxlbWVudGF0aW9ucyBkb24ndCBjaGVjayB0aGlzLCBhbmQgcmVhbAorICAgICAgICAjIGNvb2tpZXMgKG9mIGNvdXJzZSkgcmVseSBvbiB0aGF0IGJlaGF2aW91ci4KKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly9mb28uY28udWsiLCAnbmFzdHk9dHJpY2s7IGRvbWFpbj0uY28udWsnKQorIyMgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDQpCisKKyAgICBkZWYgdGVzdF90d29fY29tcG9uZW50X2RvbWFpbl9yZmMyOTY1KHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisKKyAgICAgICAgcG9sID0gRGVmYXVsdENvb2tpZVBvbGljeShyZmMyOTY1PVRydWUpCisgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQorCisgICAgICAgICMgdHdvLWNvbXBvbmVudCBWMSBkb21haW4gaXMgT0sKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2Zvby5uZXQvIiwgJ2Zvbz1iYXI7IFZlcnNpb249IjEiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5fY29va2llc1siZm9vLm5ldCJdWyIvIl1bImZvbyJdLnZhbHVlLCAiYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vZm9vLm5ldC8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJFZlcnNpb249MTsgZm9vPWJhciIpCisgICAgICAgICMgd29uJ3QgYmUgcmV0dXJuZWQgdG8gYW55IG90aGVyIGRvbWFpbiAoYmVjYXVzZSBkb21haW4gd2FzIGltcGxpZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5mb28ubmV0LyIpLCAiIikKKworICAgICAgICAjIHVubGVzcyBkb21haW4gaXMgZ2l2ZW4gZXhwbGljaXRseSwgYmVjYXVzZSB0aGVuIGl0IG11c3QgYmUKKyAgICAgICAgIyByZXdyaXR0ZW4gdG8gc3RhcnQgd2l0aCBhIGRvdDogZm9vLm5ldCAtLT4gLmZvby5uZXQsIHdoaWNoIGRvZXMKKyAgICAgICAgIyBub3QgZG9tYWluLW1hdGNoIGZvby5uZXQKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2Zvby5uZXQvZm9vIiwKKyAgICAgICAgICAgICAgICAgICAgICAnc3BhbT1lZ2dzOyBkb21haW49Zm9vLm5ldDsgcGF0aD0vZm9vOyBWZXJzaW9uPSIxIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9mb28ubmV0L2ZvbyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIkVmVyc2lvbj0xOyBmb289YmFyIikKKworICAgICAgICAjIGV4cGxpY2l0IGZvby5uZXQgZnJvbSB0aHJlZS1jb21wb25lbnQgZG9tYWluIHd3dy5mb28ubmV0ICpkb2VzKiBnZXQKKyAgICAgICAgIyBzZXQsIGJlY2F1c2UgLmZvby5uZXQgZG9tYWluLW1hdGNoZXMgLmZvby5uZXQKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5mb28ubmV0L2Zvby8iLAorICAgICAgICAgICAgICAgICAgICAgICdzcGFtPWVnZ3M7IGRvbWFpbj1mb28ubmV0OyBWZXJzaW9uPSIxIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5fY29va2llc1siLmZvby5uZXQiXVsiL2Zvby8iXVsic3BhbSJdLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICJlZ2dzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2Zvby5uZXQvZm9vLyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIkVmVyc2lvbj0xOyBmb289YmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmZvby5uZXQvZm9vLyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICckVmVyc2lvbj0xOyBzcGFtPWVnZ3M7ICREb21haW49ImZvby5uZXQiJykKKworICAgICAgICAjIHRvcC1sZXZlbCBkb21haW4gaXMgdG9vIGdlbmVyYWwKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2Zvby5uZXQvIiwKKyAgICAgICAgICAgICAgICAgICAgICAnbmk9Im5pIjsgZG9tYWluPSIubmV0IjsgVmVyc2lvbj0iMSInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMikKKworICAgICAgICAjIFJGQyAyOTY1IGRvZXNuJ3QgcmVxdWlyZSBibG9ja2luZyB0aGlzCisgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9mb28uY28udWsvIiwKKyAgICAgICAgICAgICAgICAgICAgICAnbmFzdHk9dHJpY2s7IGRvbWFpbj0uY28udWs7IFZlcnNpb249IjEiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDMpCisKKyAgICBkZWYgdGVzdF9kb21haW5fYWxsb3coc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKyAgICAgICAgZnJvbSB1cmxsaWIyIGltcG9ydCBSZXF1ZXN0CisKKyAgICAgICAgYyA9IENvb2tpZUphcihwb2xpY3k9RGVmYXVsdENvb2tpZVBvbGljeSgKKyAgICAgICAgICAgIGJsb2NrZWRfZG9tYWlucz1bImFjbWUuY29tIl0sCisgICAgICAgICAgICBhbGxvd2VkX2RvbWFpbnM9WyJ3d3cuYWNtZS5jb20iXSkpCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL2FjbWUuY29tLyIpCisgICAgICAgIGhlYWRlcnMgPSBbIlNldC1Db29raWU6IENVU1RPTUVSPVdJTEVfRV9DT1lPVEU7IHBhdGg9LyJdCisgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL2FjbWUuY29tLyIpCisgICAgICAgIGMuZXh0cmFjdF9jb29raWVzKHJlcywgcmVxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMCkKKworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tLyIpCisgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iKQorICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5jb3lvdGUuY29tLyIpCisgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5jb3lvdGUuY29tLyIpCisgICAgICAgIGMuZXh0cmFjdF9jb29raWVzKHJlcywgcmVxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKKworICAgICAgICAjIHNldCBhIGNvb2tpZSB3aXRoIG5vbi1hbGxvd2VkIGRvbWFpbi4uLgorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmNveW90ZS5jb20vIikKKyAgICAgICAgcmVzID0gRmFrZVJlc3BvbnNlKGhlYWRlcnMsICJodHRwOi8vd3d3LmNveW90ZS5jb20vIikKKyAgICAgICAgY29va2llcyA9IGMubWFrZV9jb29raWVzKHJlcywgcmVxKQorICAgICAgICBjLnNldF9jb29raWUoY29va2llc1swXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCisgICAgICAgICMgLi4uIGFuZCBjaGVjayBpcyBkb2Vzbid0IGdldCByZXR1cm5lZAorICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCByZXEuaGFzX2hlYWRlcigiQ29va2llIikpCisKKyAgICBkZWYgdGVzdF9kb21haW5fYmxvY2soc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKyAgICAgICAgZnJvbSB1cmxsaWIyIGltcG9ydCBSZXF1ZXN0CisKKyAgICAgICAgcG9sID0gRGVmYXVsdENvb2tpZVBvbGljeSgKKyAgICAgICAgICAgIHJmYzI5NjU9VHJ1ZSwgYmxvY2tlZF9kb21haW5zPVsiLmFjbWUuY29tIl0pCisgICAgICAgIGMgPSBDb29raWVKYXIocG9saWN5PXBvbCkKKyAgICAgICAgaGVhZGVycyA9IFsiU2V0LUNvb2tpZTogQ1VTVE9NRVI9V0lMRV9FX0NPWU9URTsgcGF0aD0vIl0KKworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tLyIpCisgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iKQorICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDApCisKKyAgICAgICAgcCA9IHBvbC5zZXRfYmxvY2tlZF9kb21haW5zKFsiYWNtZS5jb20iXSkKKyAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorCisgICAgICAgIGMuY2xlYXIoKQorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnJvYWRydW5uZXIubmV0LyIpCisgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5yb2FkcnVubmVyLm5ldC8iKQorICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cucm9hZHJ1bm5lci5uZXQvIikKKyAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgocmVxLmhhc19oZWFkZXIoIkNvb2tpZSIpIGFuZAorICAgICAgICAgICAgICAgICAgICAgIHJlcS5oYXNfaGVhZGVyKCJDb29raWUyIikpKQorCisgICAgICAgIGMuY2xlYXIoKQorICAgICAgICBwb2wuc2V0X2Jsb2NrZWRfZG9tYWlucyhbIi5hY21lLmNvbSJdKQorICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCisKKyAgICAgICAgIyBzZXQgYSBjb29raWUgd2l0aCBibG9ja2VkIGRvbWFpbi4uLgorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tLyIpCisgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iKQorICAgICAgICBjb29raWVzID0gYy5tYWtlX2Nvb2tpZXMocmVzLCByZXEpCisgICAgICAgIGMuc2V0X2Nvb2tpZShjb29raWVzWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMikKKyAgICAgICAgIyAuLi4gYW5kIGNoZWNrIGlzIGRvZXNuJ3QgZ2V0IHJldHVybmVkCisgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHJlcS5oYXNfaGVhZGVyKCJDb29raWUiKSkKKworICAgIGRlZiB0ZXN0X3NlY3VyZShzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQorCisgICAgICAgIGZvciBucyBpbiBUcnVlLCBGYWxzZToKKyAgICAgICAgICAgIGZvciB3aGl0ZXNwYWNlIGluICIgIiwgIiI6CisgICAgICAgICAgICAgICAgYyA9IENvb2tpZUphcigpCisgICAgICAgICAgICAgICAgaWYgbnM6CisgICAgICAgICAgICAgICAgICAgIHBvbCA9IERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgaW50ID0gaW50ZXJhY3RfbmV0c2NhcGUKKyAgICAgICAgICAgICAgICAgICAgdnMgPSAiIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBvbCA9IERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKQorICAgICAgICAgICAgICAgICAgICBpbnQgPSBpbnRlcmFjdF8yOTY1CisgICAgICAgICAgICAgICAgICAgIHZzID0gIjsgVmVyc2lvbj0xIgorICAgICAgICAgICAgICAgIGMuc2V0X3BvbGljeShwb2wpCisgICAgICAgICAgICAgICAgdXJsID0gImh0dHA6Ly93d3cuYWNtZS5jb20vIgorICAgICAgICAgICAgICAgIGludChjLCB1cmwsICJmb28xPWJhciVzJXMiICUgKHZzLCB3aGl0ZXNwYWNlKSkKKyAgICAgICAgICAgICAgICBpbnQoYywgdXJsLCAiZm9vMj1iYXIlczsgc2VjdXJlJXMiICUgICh2cywgd2hpdGVzcGFjZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgICAgICBub3QgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl1bIi8iXVsiZm9vMSJdLnNlY3VyZSwKKyAgICAgICAgICAgICAgICAgICAgIm5vbi1zZWN1cmUgY29va2llIHJlZ2lzdGVyZWQgc2VjdXJlIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgICAgIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdWyIvIl1bImZvbzIiXS5zZWN1cmUsCisgICAgICAgICAgICAgICAgICAgICJzZWN1cmUgY29va2llIHJlZ2lzdGVyZWQgbm9uLXNlY3VyZSIpCisKKyAgICBkZWYgdGVzdF9xdW90ZV9jb29raWVfdmFsdWUoc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKyAgICAgICAgYyA9IENvb2tpZUphcihwb2xpY3k9RGVmYXVsdENvb2tpZVBvbGljeShyZmMyOTY1PVRydWUpKQorICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsIHInZm9vPVxiImEicjsgVmVyc2lvbj0xJykKKyAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLCByJyRWZXJzaW9uPTE7IGZvbz1cXGJcImFcInInKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19maW5hbF9zbGFzaChzZWxmKToKKyAgICAgICAgIyBNaXNzaW5nIHNsYXNoIGZyb20gcmVxdWVzdCBVUkwncyBhYnNfcGF0aCBzaG91bGQgYmUgYXNzdW1lZCBwcmVzZW50LgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisgICAgICAgIGZyb20gdXJsbGliMiBpbXBvcnQgUmVxdWVzdAorICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5hY21lLmNvbSIKKyAgICAgICAgYyA9IENvb2tpZUphcihEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjU9VHJ1ZSkpCisgICAgICAgIGludGVyYWN0XzI5NjUoYywgdXJsLCAiZm9vPWJhcjsgVmVyc2lvbj0xIikKKyAgICAgICAgcmVxID0gUmVxdWVzdCh1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQorICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcS5oYXNfaGVhZGVyKCJDb29raWUiKSkKKworICAgIGRlZiB0ZXN0X2RvbWFpbl9taXJyb3Ioc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKworICAgICAgICBwb2wgPSBEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjU9VHJ1ZSkKKworICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKKyAgICAgICAgdXJsID0gImh0dHA6Ly9mb28uYmFyLmNvbS8iCisgICAgICAgIGludGVyYWN0XzI5NjUoYywgdXJsLCAic3BhbT1lZ2dzOyBWZXJzaW9uPTEiKQorICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkRvbWFpbiIsIGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgImFic2VudCBkb21haW4gcmV0dXJuZWQgd2l0aCBkb21haW4gcHJlc2VudCIpCisKKyAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCisgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgorICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgJ3NwYW09ZWdnczsgVmVyc2lvbj0xOyBEb21haW49LmJhci5jb20nKQorICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyREb21haW49Ii5iYXIuY29tIicsIGgsICJkb21haW4gbm90IHJldHVybmVkIikKKworICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKKyAgICAgICAgdXJsID0gImh0dHA6Ly9mb28uYmFyLmNvbS8iCisgICAgICAgICMgbm90ZSBtaXNzaW5nIGluaXRpYWwgZG90IGluIERvbWFpbgorICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgJ3NwYW09ZWdnczsgVmVyc2lvbj0xOyBEb21haW49YmFyLmNvbScpCisgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJERvbWFpbj0iYmFyLmNvbSInLCBoLCAiZG9tYWluIG5vdCByZXR1cm5lZCIpCisKKyAgICBkZWYgdGVzdF9wYXRoX21pcnJvcihzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQorCisgICAgICAgIHBvbCA9IERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKQorCisgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQorICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICJzcGFtPWVnZ3M7IFZlcnNpb249MSIpCisgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiUGF0aCIsIGgsICJhYnNlbnQgcGF0aCByZXR1cm5lZCB3aXRoIHBhdGggcHJlc2VudCIpCisKKyAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCisgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgorICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgJ3NwYW09ZWdnczsgVmVyc2lvbj0xOyBQYXRoPS8nKQorICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyRQYXRoPSIvIicsIGgsICJwYXRoIG5vdCByZXR1cm5lZCIpCisKKyAgICBkZWYgdGVzdF9wb3J0X21pcnJvcihzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQorCisgICAgICAgIHBvbCA9IERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKQorCisgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQorICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICJzcGFtPWVnZ3M7IFZlcnNpb249MSIpCisgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiUG9ydCIsIGgsICJhYnNlbnQgcG9ydCByZXR1cm5lZCB3aXRoIHBvcnQgcHJlc2VudCIpCisKKyAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCisgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgorICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgInNwYW09ZWdnczsgVmVyc2lvbj0xOyBQb3J0IikKKyAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKCJcJFBvcnQoW149XXwkKSIsIGgpLAorICAgICAgICAgICAgICAgICAgICAgInBvcnQgd2l0aCBubyB2YWx1ZSBub3QgcmV0dXJuZWQgd2l0aCBubyB2YWx1ZSIpCisKKyAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCisgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgorICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgJ3NwYW09ZWdnczsgVmVyc2lvbj0xOyBQb3J0PSI4MCInKQorICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyRQb3J0PSI4MCInLCBoLAorICAgICAgICAgICAgICAgICAgICAgICJwb3J0IHdpdGggc2luZ2xlIHZhbHVlIG5vdCByZXR1cm5lZCB3aXRoIHNpbmdsZSB2YWx1ZSIpCisKKyAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCisgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgorICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgJ3NwYW09ZWdnczsgVmVyc2lvbj0xOyBQb3J0PSI4MCw4MDgwIicpCisgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJFBvcnQ9IjgwLDgwODAiJywgaCwKKyAgICAgICAgICAgICAgICAgICAgICAicG9ydCB3aXRoIG11bHRpcGxlIHZhbHVlcyBub3QgcmV0dXJuZWQgd2l0aCBtdWx0aXBsZSAiCisgICAgICAgICAgICAgICAgICAgICAgInZhbHVlcyIpCisKKyAgICBkZWYgdGVzdF9ub19yZXR1cm5fY29tbWVudChzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQorCisgICAgICAgIGMgPSBDb29raWVKYXIoRGVmYXVsdENvb2tpZVBvbGljeShyZmMyOTY1PVRydWUpKQorICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICdzcGFtPWVnZ3M7IFZlcnNpb249MTsgJworICAgICAgICAgICAgICAgICAgICAgICdDb21tZW50PSJkb2VzIGFueWJvZHkgcmVhZCB0aGVzZT8iOyAnCisgICAgICAgICAgICAgICAgICAgICAgJ0NvbW1lbnRVUkw9Imh0dHA6Ly9mb28uYmFyLm5ldC9jb21tZW50Lmh0bWwiJykKKyAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAiQ29tbWVudCIgbm90IGluIGgsCisgICAgICAgICAgICAiQ29tbWVudCBvciBDb21tZW50VVJMIGNvb2tpZS1hdHRyaWJ1dGVzIHJldHVybmVkIHRvIHNlcnZlciIpCisKKyAgICBkZWYgdGVzdF9Db29raWVfaXRlcmF0b3Ioc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIENvb2tpZSwgRGVmYXVsdENvb2tpZVBvbGljeQorCisgICAgICAgIGNzID0gQ29va2llSmFyKERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKSkKKyAgICAgICAgIyBhZGQgc29tZSByYW5kb20gY29va2llcworICAgICAgICBpbnRlcmFjdF8yOTY1KGNzLCAiaHR0cDovL2JsYWguc3BhbS5vcmcvIiwgJ2Zvbz1lZ2dzOyBWZXJzaW9uPTE7ICcKKyAgICAgICAgICAgICAgICAgICAgICAnQ29tbWVudD0iZG9lcyBhbnlib2R5IHJlYWQgdGhlc2U/IjsgJworICAgICAgICAgICAgICAgICAgICAgICdDb21tZW50VVJMPSJodHRwOi8vZm9vLmJhci5uZXQvY29tbWVudC5odG1sIicpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGNzLCAiaHR0cDovL3d3dy5hY21lLmNvbS9ibGFoLyIsICJzcGFtPWJhcjsgc2VjdXJlIikKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjcywgImh0dHA6Ly93d3cuYWNtZS5jb20vYmxhaC8iLAorICAgICAgICAgICAgICAgICAgICAgICJmb289YmFyOyBzZWN1cmU7IFZlcnNpb249MSIpCisgICAgICAgIGludGVyYWN0XzI5NjUoY3MsICJodHRwOi8vd3d3LmFjbWUuY29tL2JsYWgvIiwKKyAgICAgICAgICAgICAgICAgICAgICAiZm9vPWJhcjsgcGF0aD0vOyBWZXJzaW9uPTEiKQorICAgICAgICBpbnRlcmFjdF8yOTY1KGNzLCAiaHR0cDovL3d3dy5zb2wubm8iLAorICAgICAgICAgICAgICAgICAgICAgIHInYmFuZz13YWxsb3A7IHZlcnNpb249MTsgZG9tYWluPSIuc29sLm5vIjsgJworICAgICAgICAgICAgICAgICAgICAgIHIncG9ydD0iOTAsMTAwLCA4MCw4MDgwIjsgJworICAgICAgICAgICAgICAgICAgICAgIHInbWF4LWFnZT0xMDA7IENvbW1lbnQgPSAiSnVzdCBraWRkaW5nISAoXCJ8XFxcXCkgIicpCisKKyAgICAgICAgdmVyc2lvbnMgPSBbMSwgMSwgMSwgMCwgMV0KKyAgICAgICAgbmFtZXMgPSBbImJhbmciLCAiZm9vIiwgImZvbyIsICJzcGFtIiwgImZvbyJdCisgICAgICAgIGRvbWFpbnMgPSBbIi5zb2wubm8iLCAiYmxhaC5zcGFtLm9yZyIsICJ3d3cuYWNtZS5jb20iLAorICAgICAgICAgICAgICAgICAgICJ3d3cuYWNtZS5jb20iLCAid3d3LmFjbWUuY29tIl0KKyAgICAgICAgcGF0aHMgPSBbIi8iLCAiLyIsICIvIiwgIi9ibGFoIiwgIi9ibGFoLyJdCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNCk6CisgICAgICAgICAgICBpID0gMAorICAgICAgICAgICAgZm9yIGMgaW4gY3M6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGMsIENvb2tpZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMudmVyc2lvbiwgdmVyc2lvbnNbaV0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm5hbWUsIG5hbWVzW2ldKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kb21haW4sIGRvbWFpbnNbaV0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnBhdGgsIHBhdGhzW2ldKQorICAgICAgICAgICAgICAgIGkgPSBpICsgMQorCisgICAgZGVmIHRlc3RfcGFyc2VfbnNfaGVhZGVycyhzZWxmKToKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IHBhcnNlX25zX2hlYWRlcnMKKworICAgICAgICAjIG1pc3NpbmcgZG9tYWluIHZhbHVlIChpbnZhbGlkIGNvb2tpZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHBhcnNlX25zX2hlYWRlcnMoWyJmb289YmFyOyBwYXRoPS87IGRvbWFpbiJdKSwKKyAgICAgICAgICAgIFtbKCJmb28iLCAiYmFyIiksCisgICAgICAgICAgICAgICgicGF0aCIsICIvIiksICgiZG9tYWluIiwgTm9uZSksICgidmVyc2lvbiIsICIwIildXQorICAgICAgICAgICAgKQorICAgICAgICAjIGludmFsaWQgZXhwaXJlcyB2YWx1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcGFyc2VfbnNfaGVhZGVycyhbImZvbz1iYXI7IGV4cGlyZXM9Rm9vIEJhciAxMiAzMzoyMjoxMSAyMDAwIl0pLAorICAgICAgICAgICAgW1soImZvbyIsICJiYXIiKSwgKCJleHBpcmVzIiwgTm9uZSksICgidmVyc2lvbiIsICIwIildXQorICAgICAgICAgICAgKQorICAgICAgICAjIG1pc3NpbmcgY29va2llIHZhbHVlICh2YWxpZCBjb29raWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBwYXJzZV9uc19oZWFkZXJzKFsiZm9vIl0pLAorICAgICAgICAgICAgW1soImZvbyIsIE5vbmUpLCAoInZlcnNpb24iLCAiMCIpXV0KKyAgICAgICAgICAgICkKKyAgICAgICAgIyBzaG91bGRuJ3QgYWRkIHZlcnNpb24gaWYgaGVhZGVyIGlzIGVtcHR5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VfbnNfaGVhZGVycyhbIiJdKSwgW10pCisKKyAgICBkZWYgdGVzdF9iYWRfY29va2llX2hlYWRlcihzZWxmKToKKworICAgICAgICBkZWYgY29va2llamFyX2Zyb21fY29va2llX2hlYWRlcnMoaGVhZGVycyk6CisgICAgICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyCisgICAgICAgICAgICBmcm9tIHVybGxpYjIgaW1wb3J0IFJlcXVlc3QKKyAgICAgICAgICAgIGMgPSBDb29raWVKYXIoKQorICAgICAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKQorICAgICAgICAgICAgciA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKQorICAgICAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMociwgcmVxKQorICAgICAgICAgICAgcmV0dXJuIGMKKworICAgICAgICAjIG5vbmUgb2YgdGhlc2UgYmFkIGhlYWRlcnMgc2hvdWxkIGNhdXNlIGFuIGV4Y2VwdGlvbiB0byBiZSByYWlzZWQKKyAgICAgICAgZm9yIGhlYWRlcnMgaW4gWworICAgICAgICAgICAgWyJTZXQtQ29va2llOiAiXSwgICMgYWN0dWFsbHksIG5vdGhpbmcgd3Jvbmcgd2l0aCB0aGlzCisgICAgICAgICAgICBbIlNldC1Db29raWUyOiAiXSwgICMgZGl0dG8KKyAgICAgICAgICAgICMgbWlzc2luZyBkb21haW4gdmFsdWUKKyAgICAgICAgICAgIFsiU2V0LUNvb2tpZTI6IGE9Zm9vOyBwYXRoPS87IFZlcnNpb249MTsgZG9tYWluIl0sCisgICAgICAgICAgICAjIGJhZCBtYXgtYWdlCisgICAgICAgICAgICBbIlNldC1Db29raWU6IGI9Zm9vOyBtYXgtYWdlPW9vcHMiXSwKKyAgICAgICAgICAgICMgYmFkIHZlcnNpb24KKyAgICAgICAgICAgIFsiU2V0LUNvb2tpZTogYj1mb287IHZlcnNpb249c3BhbSJdLAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIGMgPSBjb29raWVqYXJfZnJvbV9jb29raWVfaGVhZGVycyhoZWFkZXJzKQorICAgICAgICAgICAgIyB0aGVzZSBiYWQgY29va2llcyBzaG91bGRuJ3QgYmUgc2V0CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMCkKKworICAgICAgICAjIGNvb2tpZSB3aXRoIGludmFsaWQgZXhwaXJlcyBpcyB0cmVhdGVkIGFzIHNlc3Npb24gY29va2llCisgICAgICAgIGhlYWRlcnMgPSBbIlNldC1Db29raWU6IGM9Zm9vOyBleHBpcmVzPUZvbyBCYXIgMTIgMzM6MjI6MTEgMjAwMCJdCisgICAgICAgIGMgPSBjb29raWVqYXJfZnJvbV9jb29raWVfaGVhZGVycyhoZWFkZXJzKQorICAgICAgICBjb29raWUgPSBjLl9jb29raWVzWyJ3d3cuZXhhbXBsZS5jb20iXVsiLyJdWyJjIl0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvb2tpZS5leHBpcmVzIGlzIE5vbmUpCisKKworY2xhc3MgTFdQQ29va2llVGVzdHMoVGVzdENhc2UpOgorICAgICMgVGVzdHMgdGFrZW4gZnJvbSBsaWJ3d3ctcGVybCwgd2l0aCBhIGZldyBtb2RpZmljYXRpb25zIGFuZCBhZGRpdGlvbnMuCisKKyAgICBkZWYgdGVzdF9uZXRzY2FwZV9leGFtcGxlXzEoc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKyAgICAgICAgZnJvbSB1cmxsaWIyIGltcG9ydCBSZXF1ZXN0CisKKyAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgIyBGaXJzdCB3ZSBjaGVjayB0aGF0IGl0IHdvcmtzIGZvciB0aGUgb3JpZ2luYWwgZXhhbXBsZSBhdAorICAgICAgICAjIGh0dHA6Ly93d3cubmV0c2NhcGUuY29tL25ld3NyZWYvc3RkL2Nvb2tpZV9zcGVjLmh0bWwKKworICAgICAgICAjIENsaWVudCByZXF1ZXN0cyBhIGRvY3VtZW50LCBhbmQgcmVjZWl2ZXMgaW4gdGhlIHJlc3BvbnNlOgorICAgICAgICAjCisgICAgICAgICMgICAgICAgU2V0LUNvb2tpZTogQ1VTVE9NRVI9V0lMRV9FX0NPWU9URTsgcGF0aD0vOyBleHBpcmVzPVdlZG5lc2RheSwgMDktTm92LTk5IDIzOjEyOjQwIEdNVAorICAgICAgICAjCisgICAgICAgICMgV2hlbiBjbGllbnQgcmVxdWVzdHMgYSBVUkwgaW4gcGF0aCAiLyIgb24gdGhpcyBzZXJ2ZXIsIGl0IHNlbmRzOgorICAgICAgICAjCisgICAgICAgICMgICAgICAgQ29va2llOiBDVVNUT01FUj1XSUxFX0VfQ09ZT1RFCisgICAgICAgICMKKyAgICAgICAgIyBDbGllbnQgcmVxdWVzdHMgYSBkb2N1bWVudCwgYW5kIHJlY2VpdmVzIGluIHRoZSByZXNwb25zZToKKyAgICAgICAgIworICAgICAgICAjICAgICAgIFNldC1Db29raWU6IFBBUlRfTlVNQkVSPVJPQ0tFVF9MQVVOQ0hFUl8wMDAxOyBwYXRoPS8KKyAgICAgICAgIworICAgICAgICAjIFdoZW4gY2xpZW50IHJlcXVlc3RzIGEgVVJMIGluIHBhdGggIi8iIG9uIHRoaXMgc2VydmVyLCBpdCBzZW5kczoKKyAgICAgICAgIworICAgICAgICAjICAgICAgIENvb2tpZTogQ1VTVE9NRVI9V0lMRV9FX0NPWU9URTsgUEFSVF9OVU1CRVI9Uk9DS0VUX0xBVU5DSEVSXzAwMDEKKyAgICAgICAgIworICAgICAgICAjIENsaWVudCByZWNlaXZlczoKKyAgICAgICAgIworICAgICAgICAjICAgICAgIFNldC1Db29raWU6IFNISVBQSU5HPUZFREVYOyBwYXRoPS9mbworICAgICAgICAjCisgICAgICAgICMgV2hlbiBjbGllbnQgcmVxdWVzdHMgYSBVUkwgaW4gcGF0aCAiLyIgb24gdGhpcyBzZXJ2ZXIsIGl0IHNlbmRzOgorICAgICAgICAjCisgICAgICAgICMgICAgICAgQ29va2llOiBDVVNUT01FUj1XSUxFX0VfQ09ZT1RFOyBQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMQorICAgICAgICAjCisgICAgICAgICMgV2hlbiBjbGllbnQgcmVxdWVzdHMgYSBVUkwgaW4gcGF0aCAiL2ZvbyIgb24gdGhpcyBzZXJ2ZXIsIGl0IHNlbmRzOgorICAgICAgICAjCisgICAgICAgICMgICAgICAgQ29va2llOiBDVVNUT01FUj1XSUxFX0VfQ09ZT1RFOyBQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMTsgU0hJUFBJTkc9RkVERVgKKyAgICAgICAgIworICAgICAgICAjIFRoZSBsYXN0IENvb2tpZSBpcyBidWdneSwgYmVjYXVzZSBib3RoIHNwZWNpZmljYXRpb25zIHNheSB0aGF0IHRoZQorICAgICAgICAjIG1vc3Qgc3BlY2lmaWMgY29va2llIG11c3QgYmUgc2VudCBmaXJzdC4gIFNISVBQSU5HPUZFREVYIGlzIHRoZQorICAgICAgICAjIG1vc3Qgc3BlY2lmaWMgYW5kIHNob3VsZCB0aHVzIGJlIGZpcnN0LgorCisgICAgICAgIHllYXJfcGx1c19vbmUgPSB0aW1lLmxvY2FsdGltZSgpWzBdICsgMQorCisgICAgICAgIGhlYWRlcnMgPSBbXQorCisgICAgICAgIGMgPSBDb29raWVKYXIoRGVmYXVsdENvb2tpZVBvbGljeShyZmMyOTY1ID0gVHJ1ZSkpCisKKyAgICAgICAgI3JlcSA9IFJlcXVlc3QoImh0dHA6Ly8xLjEuMS4xLyIsCisgICAgICAgICMgICAgICAgICAgICAgIGhlYWRlcnM9eyJIb3N0IjogInd3dy5hY21lLmNvbTo4MCJ9KQorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tOjgwLyIsCisgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17Ikhvc3QiOiAid3d3LmFjbWUuY29tOjgwIn0pCisKKyAgICAgICAgaGVhZGVycy5hcHBlbmQoCisgICAgICAgICAgICAiU2V0LUNvb2tpZTogQ1VTVE9NRVI9V0lMRV9FX0NPWU9URTsgcGF0aD0vIDsgIgorICAgICAgICAgICAgImV4cGlyZXM9V2VkbmVzZGF5LCAwOS1Ob3YtJWQgMjM6MTI6NDAgR01UIiAlIHllYXJfcGx1c19vbmUpCisgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iKQorICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKKworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tLyIpCisgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpLCAiQ1VTVE9NRVI9V0lMRV9FX0NPWU9URSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9oZWFkZXIoIkNvb2tpZTIiKSwgJyRWZXJzaW9uPSIxIicpCisKKyAgICAgICAgaGVhZGVycy5hcHBlbmQoIlNldC1Db29raWU6IFBBUlRfTlVNQkVSPVJPQ0tFVF9MQVVOQ0hFUl8wMDAxOyBwYXRoPS8iKQorICAgICAgICByZXMgPSBGYWtlUmVzcG9uc2UoaGVhZGVycywgImh0dHA6Ly93d3cuYWNtZS5jb20vIikKKyAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS9mb28vYmFyIikKKyAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCisKKyAgICAgICAgaCA9IHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKQorICAgICAgICBzZWxmLmFzc2VydEluKCJQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMSIsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkNVU1RPTUVSPVdJTEVfRV9DT1lPVEUiLCBoKQorCisgICAgICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llOiBTSElQUElORz1GRURFWDsgcGF0aD0vZm9vJykKKyAgICAgICAgcmVzID0gRmFrZVJlc3BvbnNlKGhlYWRlcnMsICJodHRwOi8vd3d3LmFjbWUuY29tIikKKyAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS8iKQorICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKKworICAgICAgICBoID0gcmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlBBUlRfTlVNQkVSPVJPQ0tFVF9MQVVOQ0hFUl8wMDAxIiwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiQ1VTVE9NRVI9V0lMRV9FX0NPWU9URSIsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlNISVBQSU5HPUZFREVYIiwgaCkKKworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFjbWUuY29tL2Zvby8iKQorICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKKworICAgICAgICBoID0gcmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlBBUlRfTlVNQkVSPVJPQ0tFVF9MQVVOQ0hFUl8wMDAxIiwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiQ1VTVE9NRVI9V0lMRV9FX0NPWU9URSIsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoLnN0YXJ0c3dpdGgoIlNISVBQSU5HPUZFREVYOyIpKQorCisgICAgZGVmIHRlc3RfbmV0c2NhcGVfZXhhbXBsZV8yKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyCisgICAgICAgIGZyb20gdXJsbGliMiBpbXBvcnQgUmVxdWVzdAorCisgICAgICAgICMgU2Vjb25kIEV4YW1wbGUgdHJhbnNhY3Rpb24gc2VxdWVuY2U6CisgICAgICAgICMKKyAgICAgICAgIyBBc3N1bWUgYWxsIG1hcHBpbmdzIGZyb20gYWJvdmUgaGF2ZSBiZWVuIGNsZWFyZWQuCisgICAgICAgICMKKyAgICAgICAgIyBDbGllbnQgcmVjZWl2ZXM6CisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBTZXQtQ29va2llOiBQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMTsgcGF0aD0vCisgICAgICAgICMKKyAgICAgICAgIyBXaGVuIGNsaWVudCByZXF1ZXN0cyBhIFVSTCBpbiBwYXRoICIvIiBvbiB0aGlzIHNlcnZlciwgaXQgc2VuZHM6CisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBDb29raWU6IFBBUlRfTlVNQkVSPVJPQ0tFVF9MQVVOQ0hFUl8wMDAxCisgICAgICAgICMKKyAgICAgICAgIyBDbGllbnQgcmVjZWl2ZXM6CisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBTZXQtQ29va2llOiBQQVJUX05VTUJFUj1SSURJTkdfUk9DS0VUXzAwMjM7IHBhdGg9L2FtbW8KKyAgICAgICAgIworICAgICAgICAjIFdoZW4gY2xpZW50IHJlcXVlc3RzIGEgVVJMIGluIHBhdGggIi9hbW1vIiBvbiB0aGlzIHNlcnZlciwgaXQgc2VuZHM6CisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBDb29raWU6IFBBUlRfTlVNQkVSPVJJRElOR19ST0NLRVRfMDAyMzsgUEFSVF9OVU1CRVI9Uk9DS0VUX0xBVU5DSEVSXzAwMDEKKyAgICAgICAgIworICAgICAgICAjICAgICAgIE5PVEU6IFRoZXJlIGFyZSB0d28gbmFtZS92YWx1ZSBwYWlycyBuYW1lZCAiUEFSVF9OVU1CRVIiIGR1ZSB0bworICAgICAgICAjICAgICAgIHRoZSBpbmhlcml0YW5jZSBvZiB0aGUgIi8iIG1hcHBpbmcgaW4gYWRkaXRpb24gdG8gdGhlICIvYW1tbyIgbWFwcGluZy4KKworICAgICAgICBjID0gQ29va2llSmFyKCkKKyAgICAgICAgaGVhZGVycyA9IFtdCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS8iKQorICAgICAgICBoZWFkZXJzLmFwcGVuZCgiU2V0LUNvb2tpZTogUEFSVF9OVU1CRVI9Uk9DS0VUX0xBVU5DSEVSXzAwMDE7IHBhdGg9LyIpCisgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iKQorCisgICAgICAgIGMuZXh0cmFjdF9jb29raWVzKHJlcywgcmVxKQorCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuYWNtZS5jb20vIikKKyAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hlYWRlcigiQ29va2llIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMSIpCisKKyAgICAgICAgaGVhZGVycy5hcHBlbmQoCisgICAgICAgICAgICAiU2V0LUNvb2tpZTogUEFSVF9OVU1CRVI9UklESU5HX1JPQ0tFVF8wMDIzOyBwYXRoPS9hbW1vIikKKyAgICAgICAgcmVzID0gRmFrZVJlc3BvbnNlKGhlYWRlcnMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIpCisgICAgICAgIGMuZXh0cmFjdF9jb29raWVzKHJlcywgcmVxKQorCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuYWNtZS5jb20vYW1tbyIpCisgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2gociJQQVJUX05VTUJFUj1SSURJTkdfUk9DS0VUXzAwMjM7XHMqIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpKSkKKworICAgIGRlZiB0ZXN0X2lldGZfZXhhbXBsZV8xKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyLCBEZWZhdWx0Q29va2llUG9saWN5CisgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICMgVGhlbiB3ZSB0ZXN0IHdpdGggdGhlIGV4YW1wbGVzIGZyb20gZHJhZnQtaWV0Zi1odHRwLXN0YXRlLW1hbi1tZWMtMDMudHh0CisgICAgICAgICMKKyAgICAgICAgIyA1LiAgRVhBTVBMRVMKKworICAgICAgICBjID0gQ29va2llSmFyKERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKSkKKworICAgICAgICAjCisgICAgICAgICMgNS4xICBFeGFtcGxlIDEKKyAgICAgICAgIworICAgICAgICAjIE1vc3QgZGV0YWlsIG9mIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGhlYWRlcnMgaGFzIGJlZW4gb21pdHRlZC4gIEFzc3VtZQorICAgICAgICAjIHRoZSB1c2VyIGFnZW50IGhhcyBubyBzdG9yZWQgY29va2llcy4KKyAgICAgICAgIworICAgICAgICAjICAgMS4gIFVzZXIgQWdlbnQgLT4gU2VydmVyCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBQT1NUIC9hY21lL2xvZ2luIEhUVFAvMS4xCisgICAgICAgICMgICAgICAgW2Zvcm0gZGF0YV0KKyAgICAgICAgIworICAgICAgICAjICAgICAgIFVzZXIgaWRlbnRpZmllcyBzZWxmIHZpYSBhIGZvcm0uCisgICAgICAgICMKKyAgICAgICAgIyAgIDIuICBTZXJ2ZXIgLT4gVXNlciBBZ2VudAorICAgICAgICAjCisgICAgICAgICMgICAgICAgSFRUUC8xLjEgMjAwIE9LCisgICAgICAgICMgICAgICAgU2V0LUNvb2tpZTI6IEN1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIgorICAgICAgICAjCisgICAgICAgICMgICAgICAgQ29va2llIHJlZmxlY3RzIHVzZXIncyBpZGVudGl0eS4KKworICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KAorICAgICAgICAgICAgYywgJ2h0dHA6Ly93d3cuYWNtZS5jb20vYWNtZS9sb2dpbicsCisgICAgICAgICAgICAnQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOyBWZXJzaW9uPSIxIjsgUGF0aD0iL2FjbWUiJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjb29raWUpCisKKyAgICAgICAgIworICAgICAgICAjICAgMy4gIFVzZXIgQWdlbnQgLT4gU2VydmVyCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBQT1NUIC9hY21lL3BpY2tpdGVtIEhUVFAvMS4xCisgICAgICAgICMgICAgICAgQ29va2llOiAkVmVyc2lvbj0iMSI7IEN1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgJFBhdGg9Ii9hY21lIgorICAgICAgICAjICAgICAgIFtmb3JtIGRhdGFdCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBVc2VyIHNlbGVjdHMgYW4gaXRlbSBmb3IgYGBzaG9wcGluZyBiYXNrZXQuJycKKyAgICAgICAgIworICAgICAgICAjICAgNC4gIFNlcnZlciAtPiBVc2VyIEFnZW50CisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBIVFRQLzEuMSAyMDAgT0sKKyAgICAgICAgIyAgICAgICBTZXQtQ29va2llMjogUGFydF9OdW1iZXI9IlJvY2tldF9MYXVuY2hlcl8wMDAxIjsgVmVyc2lvbj0iMSI7CisgICAgICAgICMgICAgICAgICAgICAgICBQYXRoPSIvYWNtZSIKKyAgICAgICAgIworICAgICAgICAjICAgICAgIFNob3BwaW5nIGJhc2tldCBjb250YWlucyBhbiBpdGVtLgorCisgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgJ2h0dHA6Ly93d3cuYWNtZS5jb20vYWNtZS9waWNraXRlbScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BhcnRfTnVtYmVyPSJSb2NrZXRfTGF1bmNoZXJfMDAwMSI7ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIicpOworICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKAorICAgICAgICAgICAgcideXCRWZXJzaW9uPSI/MSI/OyBDdXN0b21lcj0iP1dJTEVfRV9DT1lPVEUiPzsgXCRQYXRoPSIvYWNtZSIkJywKKyAgICAgICAgICAgIGNvb2tpZSkpCisKKyAgICAgICAgIworICAgICAgICAjICAgNS4gIFVzZXIgQWdlbnQgLT4gU2VydmVyCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBQT1NUIC9hY21lL3NoaXBwaW5nIEhUVFAvMS4xCisgICAgICAgICMgICAgICAgQ29va2llOiAkVmVyc2lvbj0iMSI7CisgICAgICAgICMgICAgICAgICAgICAgICBDdXN0b21lcj0iV0lMRV9FX0NPWU9URSI7ICRQYXRoPSIvYWNtZSI7CisgICAgICAgICMgICAgICAgICAgICAgICBQYXJ0X051bWJlcj0iUm9ja2V0X0xhdW5jaGVyXzAwMDEiOyAkUGF0aD0iL2FjbWUiCisgICAgICAgICMgICAgICAgW2Zvcm0gZGF0YV0KKyAgICAgICAgIworICAgICAgICAjICAgICAgIFVzZXIgc2VsZWN0cyBzaGlwcGluZyBtZXRob2QgZnJvbSBmb3JtLgorICAgICAgICAjCisgICAgICAgICMgICA2LiAgU2VydmVyIC0+IFVzZXIgQWdlbnQKKyAgICAgICAgIworICAgICAgICAjICAgICAgIEhUVFAvMS4xIDIwMCBPSworICAgICAgICAjICAgICAgIFNldC1Db29raWUyOiBTaGlwcGluZz0iRmVkRXgiOyBWZXJzaW9uPSIxIjsgUGF0aD0iL2FjbWUiCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBOZXcgY29va2llIHJlZmxlY3RzIHNoaXBwaW5nIG1ldGhvZC4KKworICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2FjbWUvc2hpcHBpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTaGlwcGluZz0iRmVkRXgiOyBWZXJzaW9uPSIxIjsgUGF0aD0iL2FjbWUiJykKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKHInXlwkVmVyc2lvbj0iPzEiPzsnLCBjb29raWUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKHInUGFydF9OdW1iZXI9Ij9Sb2NrZXRfTGF1bmNoZXJfMDAwMSI/OycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHMqXCRQYXRoPSJcL2FjbWUiJywgY29va2llKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaChyJ0N1c3RvbWVyPSI/V0lMRV9FX0NPWU9URSI/O1xzKlwkUGF0aD0iXC9hY21lIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2llKSkKKworICAgICAgICAjCisgICAgICAgICMgICA3LiAgVXNlciBBZ2VudCAtPiBTZXJ2ZXIKKyAgICAgICAgIworICAgICAgICAjICAgICAgIFBPU1QgL2FjbWUvcHJvY2VzcyBIVFRQLzEuMQorICAgICAgICAjICAgICAgIENvb2tpZTogJFZlcnNpb249IjEiOworICAgICAgICAjICAgICAgICAgICAgICAgQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOyAkUGF0aD0iL2FjbWUiOworICAgICAgICAjICAgICAgICAgICAgICAgUGFydF9OdW1iZXI9IlJvY2tldF9MYXVuY2hlcl8wMDAxIjsgJFBhdGg9Ii9hY21lIjsKKyAgICAgICAgIyAgICAgICAgICAgICAgIFNoaXBwaW5nPSJGZWRFeCI7ICRQYXRoPSIvYWNtZSIKKyAgICAgICAgIyAgICAgICBbZm9ybSBkYXRhXQorICAgICAgICAjCisgICAgICAgICMgICAgICAgVXNlciBjaG9vc2VzIHRvIHByb2Nlc3Mgb3JkZXIuCisgICAgICAgICMKKyAgICAgICAgIyAgIDguICBTZXJ2ZXIgLT4gVXNlciBBZ2VudAorICAgICAgICAjCisgICAgICAgICMgICAgICAgSFRUUC8xLjEgMjAwIE9LCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBUcmFuc2FjdGlvbiBpcyBjb21wbGV0ZS4KKworICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2FjbWUvcHJvY2VzcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHJlLnNlYXJjaChyJ1NoaXBwaW5nPSI/RmVkRXgiPztccypcJFBhdGg9IlwvYWNtZSInLCBjb29raWUpIGFuZAorICAgICAgICAgICAgIldJTEVfRV9DT1lPVEUiIGluIGNvb2tpZSkKKworICAgICAgICAjCisgICAgICAgICMgVGhlIHVzZXIgYWdlbnQgbWFrZXMgYSBzZXJpZXMgb2YgcmVxdWVzdHMgb24gdGhlIG9yaWdpbiBzZXJ2ZXIsIGFmdGVyCisgICAgICAgICMgZWFjaCBvZiB3aGljaCBpdCByZWNlaXZlcyBhIG5ldyBjb29raWUuICBBbGwgdGhlIGNvb2tpZXMgaGF2ZSB0aGUgc2FtZQorICAgICAgICAjIFBhdGggYXR0cmlidXRlIGFuZCAoZGVmYXVsdCkgZG9tYWluLiAgQmVjYXVzZSB0aGUgcmVxdWVzdCBVUkxzIGFsbCBoYXZlCisgICAgICAgICMgL2FjbWUgYXMgYSBwcmVmaXgsIGFuZCB0aGF0IG1hdGNoZXMgdGhlIFBhdGggYXR0cmlidXRlLCBlYWNoIHJlcXVlc3QKKyAgICAgICAgIyBjb250YWlucyBhbGwgdGhlIGNvb2tpZXMgcmVjZWl2ZWQgc28gZmFyLgorCisgICAgZGVmIHRlc3RfaWV0Zl9leGFtcGxlXzIoc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKworICAgICAgICAjIDUuMiAgRXhhbXBsZSAyCisgICAgICAgICMKKyAgICAgICAgIyBUaGlzIGV4YW1wbGUgaWxsdXN0cmF0ZXMgdGhlIGVmZmVjdCBvZiB0aGUgUGF0aCBhdHRyaWJ1dGUuICBBbGwgZGV0YWlsCisgICAgICAgICMgb2YgcmVxdWVzdCBhbmQgcmVzcG9uc2UgaGVhZGVycyBoYXMgYmVlbiBvbWl0dGVkLiAgQXNzdW1lIHRoZSB1c2VyIGFnZW50CisgICAgICAgICMgaGFzIG5vIHN0b3JlZCBjb29raWVzLgorCisgICAgICAgIGMgPSBDb29raWVKYXIoRGVmYXVsdENvb2tpZVBvbGljeShyZmMyOTY1PVRydWUpKQorCisgICAgICAgICMgSW1hZ2luZSB0aGUgdXNlciBhZ2VudCBoYXMgcmVjZWl2ZWQsIGluIHJlc3BvbnNlIHRvIGVhcmxpZXIgcmVxdWVzdHMsCisgICAgICAgICMgdGhlIHJlc3BvbnNlIGhlYWRlcnMKKyAgICAgICAgIworICAgICAgICAjIFNldC1Db29raWUyOiBQYXJ0X051bWJlcj0iUm9ja2V0X0xhdW5jaGVyXzAwMDEiOyBWZXJzaW9uPSIxIjsKKyAgICAgICAgIyAgICAgICAgIFBhdGg9Ii9hY21lIgorICAgICAgICAjCisgICAgICAgICMgYW5kCisgICAgICAgICMKKyAgICAgICAgIyBTZXQtQ29va2llMjogUGFydF9OdW1iZXI9IlJpZGluZ19Sb2NrZXRfMDAyMyI7IFZlcnNpb249IjEiOworICAgICAgICAjICAgICAgICAgUGF0aD0iL2FjbWUvYW1tbyIKKworICAgICAgICBpbnRlcmFjdF8yOTY1KAorICAgICAgICAgICAgYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYWNtZS9hbW1vL3NwZWNpZmljIiwKKyAgICAgICAgICAgICdQYXJ0X051bWJlcj0iUm9ja2V0X0xhdW5jaGVyXzAwMDEiOyBWZXJzaW9uPSIxIjsgUGF0aD0iL2FjbWUiJywKKyAgICAgICAgICAgICdQYXJ0X051bWJlcj0iUmlkaW5nX1JvY2tldF8wMDIzIjsgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lL2FtbW8iJykKKworICAgICAgICAjIEEgc3Vic2VxdWVudCByZXF1ZXN0IGJ5IHRoZSB1c2VyIGFnZW50IHRvIHRoZSAoc2FtZSkgc2VydmVyIGZvciBVUkxzIG9mCisgICAgICAgICMgdGhlIGZvcm0gL2FjbWUvYW1tby8uLi4gIHdvdWxkIGluY2x1ZGUgdGhlIGZvbGxvd2luZyByZXF1ZXN0IGhlYWRlcjoKKyAgICAgICAgIworICAgICAgICAjIENvb2tpZTogJFZlcnNpb249IjEiOworICAgICAgICAjICAgICAgICAgUGFydF9OdW1iZXI9IlJpZGluZ19Sb2NrZXRfMDAyMyI7ICRQYXRoPSIvYWNtZS9hbW1vIjsKKyAgICAgICAgIyAgICAgICAgIFBhcnRfTnVtYmVyPSJSb2NrZXRfTGF1bmNoZXJfMDAwMSI7ICRQYXRoPSIvYWNtZSIKKyAgICAgICAgIworICAgICAgICAjIE5vdGUgdGhhdCB0aGUgTkFNRT1WQUxVRSBwYWlyIGZvciB0aGUgY29va2llIHdpdGggdGhlIG1vcmUgc3BlY2lmaWMgUGF0aAorICAgICAgICAjIGF0dHJpYnV0ZSwgL2FjbWUvYW1tbywgY29tZXMgYmVmb3JlIHRoZSBvbmUgd2l0aCB0aGUgbGVzcyBzcGVjaWZpYyBQYXRoCisgICAgICAgICMgYXR0cmlidXRlLCAvYWNtZS4gIEZ1cnRoZXIgbm90ZSB0aGF0IHRoZSBzYW1lIGNvb2tpZSBuYW1lIGFwcGVhcnMgbW9yZQorICAgICAgICAjIHRoYW4gb25jZS4KKworICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2FjbWUvYW1tby8uLi4iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICByZS5zZWFyY2gociJSaWRpbmdfUm9ja2V0XzAwMjMuKlJvY2tldF9MYXVuY2hlcl8wMDAxIiwgY29va2llKSkKKworICAgICAgICAjIEEgc3Vic2VxdWVudCByZXF1ZXN0IGJ5IHRoZSB1c2VyIGFnZW50IHRvIHRoZSAoc2FtZSkgc2VydmVyIGZvciBhIFVSTCBvZgorICAgICAgICAjIHRoZSBmb3JtIC9hY21lL3BhcnRzLyB3b3VsZCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgcmVxdWVzdCBoZWFkZXI6CisgICAgICAgICMKKyAgICAgICAgIyBDb29raWU6ICRWZXJzaW9uPSIxIjsgUGFydF9OdW1iZXI9IlJvY2tldF9MYXVuY2hlcl8wMDAxIjsgJFBhdGg9Ii9hY21lIgorICAgICAgICAjCisgICAgICAgICMgSGVyZSwgdGhlIHNlY29uZCBjb29raWUncyBQYXRoIGF0dHJpYnV0ZSAvYWNtZS9hbW1vIGlzIG5vdCBhIHByZWZpeCBvZgorICAgICAgICAjIHRoZSByZXF1ZXN0IFVSTCwgL2FjbWUvcGFydHMvLCBzbyB0aGUgY29va2llIGRvZXMgbm90IGdldCBmb3J3YXJkZWQgdG8KKyAgICAgICAgIyB0aGUgc2VydmVyLgorCisgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYWNtZS9wYXJ0cy8iKQorICAgICAgICBzZWxmLmFzc2VydEluKCJSb2NrZXRfTGF1bmNoZXJfMDAwMSIsIGNvb2tpZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiUmlkaW5nX1JvY2tldF8wMDIzIiwgY29va2llKQorCisgICAgZGVmIHRlc3RfcmVqZWN0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgcmVqZWN0aW9uIG9mIFNldC1Db29raWUyIHJlc3BvbnNlcyBiYXNlZCBvbiBkb21haW4sIHBhdGgsIHBvcnQuCisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBEZWZhdWx0Q29va2llUG9saWN5LCBMV1BDb29raWVKYXIKKworICAgICAgICBwb2wgPSBEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjU9VHJ1ZSkKKworICAgICAgICBjID0gTFdQQ29va2llSmFyKHBvbGljeT1wb2wpCisKKyAgICAgICAgbWF4X2FnZSA9ICJtYXgtYWdlPTM2MDAiCisKKyAgICAgICAgIyBpbGxlZ2FsIGRvbWFpbiAobm8gZW1iZWRkZWQgZG90cykKKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvbz1iYXI7IGRvbWFpbj0iLmNvbSI7IHZlcnNpb249MScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYykKKworICAgICAgICAjIGxlZ2FsIGRvbWFpbgorICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGluZz1wb25nOyBkb21haW49ImFjbWUuY29tIjsgdmVyc2lvbj0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCisKKyAgICAgICAgIyBpbGxlZ2FsIGRvbWFpbiAoaG9zdCBwcmVmaXggInd3dy5hIiBjb250YWlucyBhIGRvdCkKKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hLmFjbWUuY29tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2hpej1iYW5nOyBkb21haW49ImFjbWUuY29tIjsgdmVyc2lvbj0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCisKKyAgICAgICAgIyBsZWdhbCBkb21haW4KKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hLmFjbWUuY29tIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd293PWZsdXR0ZXI7IGRvbWFpbj0iLmEuYWNtZS5jb20iOyB2ZXJzaW9uPTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMikKKworICAgICAgICAjIGNhbid0IHBhcnRpYWxseSBtYXRjaCBhbiBJUC1hZGRyZXNzCisgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly8xMjUuMTI1LjEyNS4xMjUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6enp6PXBpbmc7IGRvbWFpbj0iMTI1LjEyNS4xMjUiOyB2ZXJzaW9uPTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMikKKworICAgICAgICAjIGlsbGVnYWwgcGF0aCAobXVzdCBiZSBwcmVmaXggb2YgcmVxdWVzdCBwYXRoKQorICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LnNvbC5ubyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JsYWg9cmh1YmFyYjsgZG9tYWluPSIuc29sLm5vIjsgcGF0aD0iL2ZvbyI7ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmVyc2lvbj0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCisKKyAgICAgICAgIyBsZWdhbCBwYXRoCisgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuc29sLm5vL2Zvby9iYXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiaW5nPWJvbmc7IGRvbWFpbj0iLnNvbC5ubyI7IHBhdGg9Ii9mb28iOyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb249MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAzKQorCisgICAgICAgICMgaWxsZWdhbCBwb3J0IChyZXF1ZXN0LXBvcnQgbm90IGluIGxpc3QpCisgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuc29sLm5vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2hpej1mZmZ0OyBkb21haW49Ii5zb2wubm8iOyBwb3J0PSI5MCwxMDAiOyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb249MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAzKQorCisgICAgICAgICMgbGVnYWwgcG9ydAorICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KAorICAgICAgICAgICAgYywgImh0dHA6Ly93d3cuc29sLm5vIiwKKyAgICAgICAgICAgIHInYmFuZz13YWxsb3A7IHZlcnNpb249MTsgZG9tYWluPSIuc29sLm5vIjsgJworICAgICAgICAgICAgcidwb3J0PSI5MCwxMDAsIDgwLDgwODAiOyAnCisgICAgICAgICAgICByJ21heC1hZ2U9MTAwOyBDb21tZW50ID0gIkp1c3Qga2lkZGluZyEgKFwifFxcXFwpICInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgNCkKKworICAgICAgICAjIHBvcnQgYXR0cmlidXRlIHdpdGhvdXQgYW55IHZhbHVlIChjdXJyZW50IHBvcnQpCisgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuc29sLm5vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vOT1iYXI7IHZlcnNpb249MTsgZG9tYWluPSIuc29sLm5vIjsgcG9ydDsgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXgtYWdlPTEwMDsnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgNSkKKworICAgICAgICAjIGVuY29kZWQgcGF0aAorICAgICAgICAjIExXUCBoYXMgdGhpcyB0ZXN0LCBidXQgdW5lc2NhcGluZyBhbGxvd2VkIHBhdGggY2hhcmFjdGVycyBzZWVtcworICAgICAgICAjIGxpa2UgYSBiYWQgaWRlYSwgc28gSSB0aGluayB0aGlzIHNob3VsZCBmYWlsOgorIyMgICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LnNvbC5uby9mb28vIiwKKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgcidmb284PWJhcjsgdmVyc2lvbj0xOyBwYXRoPSIvJTY2b28iJykKKyAgICAgICAgIyBidXQgdGhpcyBpcyBPSywgYmVjYXVzZSAnPCcgaXMgbm90IGFuIGFsbG93ZWQgSFRUUCBVUkwgcGF0aAorICAgICAgICAjIGNoYXJhY3RlcjoKKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5zb2wubm8vPG9vLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidmb284PWJhcjsgdmVyc2lvbj0xOyBwYXRoPSIvJTNjb28iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDYpCisKKyAgICAgICAgIyBzYXZlIGFuZCByZXN0b3JlCisgICAgICAgIGZpbGVuYW1lID0gdGVzdF9zdXBwb3J0LlRFU1RGTgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGMuc2F2ZShmaWxlbmFtZSwgaWdub3JlX2Rpc2NhcmQ9VHJ1ZSkKKyAgICAgICAgICAgIG9sZCA9IHJlcHIoYykKKworICAgICAgICAgICAgYyA9IExXUENvb2tpZUphcihwb2xpY3k9cG9sKQorICAgICAgICAgICAgYy5sb2FkKGZpbGVuYW1lLCBpZ25vcmVfZGlzY2FyZD1UcnVlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJ5OiBvcy51bmxpbmsoZmlsZW5hbWUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2xkLCByZXByKGMpKQorCisgICAgZGVmIHRlc3RfdXJsX2VuY29kaW5nKHNlbGYpOgorICAgICAgICAjIFRyeSBzb21lIFVSTCBlbmNvZGluZ3Mgb2YgdGhlIFBBVEhzLgorICAgICAgICAjICh0aGUgYmVoYXZpb3VyIGhlcmUgaGFzIGNoYW5nZWQgZnJvbSBsaWJ3d3ctcGVybCkKKyAgICAgICAgZnJvbSBjb29raWVsaWIgaW1wb3J0IENvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQorCisgICAgICAgIGMgPSBDb29raWVKYXIoRGVmYXVsdENvb2tpZVBvbGljeShyZmMyOTY1PVRydWUpKQorICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2ZvbyUyZiUyNS8lM2MlM2MlMEFuZXclRTUvJUU1IiwKKyAgICAgICAgICAgICAgICAgICAgICAiZm9vICA9ICAgYmFyOyB2ZXJzaW9uICAgID0gICAxIikKKworICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KAorICAgICAgICAgICAgYywgImh0dHA6Ly93d3cuYWNtZS5jb20vZm9vJTJmJTI1Lzw8JTBhbmV35S/m+OUiLAorICAgICAgICAgICAgJ2Jhcj1iYXo7IHBhdGg9Ii9mb28vIjsgdmVyc2lvbj0xJyk7CisgICAgICAgIHZlcnNpb25fcmUgPSByZS5jb21waWxlKHInXlwkdmVyc2lvbj1cIj8xXCI/JywgcmUuSSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJmb289YmFyIiBpbiBjb29raWUgYW5kIHZlcnNpb25fcmUuc2VhcmNoKGNvb2tpZSkpCisKKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NSgKKyAgICAgICAgICAgIGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2Zvby8lMjUvPDwlMGFuZXflL+b45SIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY29va2llKQorCisgICAgICAgICMgdW5pY29kZSBVUkwgZG9lc24ndCByYWlzZSBleGNlcHRpb24KKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCB1Imh0dHA6Ly93d3cuYWNtZS5jb20vXHhmYyIpCisKKyAgICBkZWYgdGVzdF9tb3ppbGxhKHNlbGYpOgorICAgICAgICAjIFNhdmUgLyBsb2FkIE1vemlsbGEvTmV0c2NhcGUgY29va2llIGZpbGUgZm9ybWF0LgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgTW96aWxsYUNvb2tpZUphciwgRGVmYXVsdENvb2tpZVBvbGljeQorCisgICAgICAgIHllYXJfcGx1c19vbmUgPSB0aW1lLmxvY2FsdGltZSgpWzBdICsgMQorCisgICAgICAgIGZpbGVuYW1lID0gdGVzdF9zdXBwb3J0LlRFU1RGTgorCisgICAgICAgIGMgPSBNb3ppbGxhQ29va2llSmFyKGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3k9RGVmYXVsdENvb2tpZVBvbGljeShyZmMyOTY1PVRydWUpKQorICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIsCisgICAgICAgICAgICAgICAgICAgICAgImZvbzE9YmFyOyBtYXgtYWdlPTEwMDsgVmVyc2lvbj0xIikKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLAorICAgICAgICAgICAgICAgICAgICAgICdmb28yPWJhcjsgcG9ydD0iODAiOyBtYXgtYWdlPTEwMDsgRGlzY2FyZDsgVmVyc2lvbj0xJykKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAiZm9vMz1iYXI7IHNlY3VyZTsgVmVyc2lvbj0xIikKKworICAgICAgICBleHBpcmVzID0gImV4cGlyZXM9MDktTm92LSVkIDIzOjEyOjQwIEdNVCIgJSAoeWVhcl9wbHVzX29uZSwpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmZvby5jb20vIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZvb2E9YmFyOyAlcyIgJSBleHBpcmVzKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5mb28uY29tLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJmb29iPWJhcjsgRG9tYWluPS5mb28uY29tOyAlcyIgJSBleHBpcmVzKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5mb28uY29tLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJmb29jPWJhcjsgRG9tYWluPXd3dy5mb28uY29tOyAlcyIgJSBleHBpcmVzKQorCisgICAgICAgIGRlZiBzYXZlX2FuZF9yZXN0b3JlKGNqLCBpZ25vcmVfZGlzY2FyZCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY2ouc2F2ZShpZ25vcmVfZGlzY2FyZD1pZ25vcmVfZGlzY2FyZCkKKyAgICAgICAgICAgICAgICBuZXdfYyA9IE1vemlsbGFDb29raWVKYXIoZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKSkKKyAgICAgICAgICAgICAgICBuZXdfYy5sb2FkKGlnbm9yZV9kaXNjYXJkPWlnbm9yZV9kaXNjYXJkKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB0cnk6IG9zLnVubGluayhmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogcGFzcworICAgICAgICAgICAgcmV0dXJuIG5ld19jCisKKyAgICAgICAgbmV3X2MgPSBzYXZlX2FuZF9yZXN0b3JlKGMsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5ld19jKSwgNikgICMgbm9uZSBkaXNjYXJkZWQKKyAgICAgICAgc2VsZi5hc3NlcnRJbigibmFtZT0nZm9vMScsIHZhbHVlPSdiYXInIiwgcmVwcihuZXdfYykpCisKKyAgICAgICAgbmV3X2MgPSBzYXZlX2FuZF9yZXN0b3JlKGMsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuZXdfYyksIDQpICAjIDIgb2YgdGhlbSBkaXNjYXJkZWQgb24gc2F2ZQorICAgICAgICBzZWxmLmFzc2VydEluKCJuYW1lPSdmb28xJywgdmFsdWU9J2JhciciLCByZXByKG5ld19jKSkKKworICAgIGRlZiB0ZXN0X25ldHNjYXBlX21pc2Moc2VsZik6CisgICAgICAgICMgU29tZSBhZGRpdGlvbmFsIE5ldHNjYXBlIGNvb2tpZXMgdGVzdHMuCisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIKKyAgICAgICAgZnJvbSB1cmxsaWIyIGltcG9ydCBSZXF1ZXN0CisKKyAgICAgICAgYyA9IENvb2tpZUphcigpCisgICAgICAgIGhlYWRlcnMgPSBbXQorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vZm9vLmJhci5hY21lLmNvbS9mb28iKQorCisgICAgICAgICMgTmV0c2NhcGUgYWxsb3dzIGEgaG9zdCBwYXJ0IHRoYXQgY29udGFpbnMgZG90cworICAgICAgICBoZWFkZXJzLmFwcGVuZCgiU2V0LUNvb2tpZTogQ3VzdG9tZXI9V0lMRV9FX0NPWU9URTsgZG9tYWluPS5hY21lLmNvbSIpCisgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5hY21lLmNvbS9mb28iKQorICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKKworICAgICAgICAjIGFuZCB0aGF0IHRoZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIGhvc3Qgd2l0aG91dCBhZGRpbmcgYSBsZWFkaW5nCisgICAgICAgICMgZG90IHRvIHRoZSBkb21haW4uICBTaG91bGQgbm90IHF1b3RlIGV2ZW4gaWYgc3RyYW5nZSBjaGFycyBhcmUgdXNlZAorICAgICAgICAjIGluIHRoZSBjb29raWUgdmFsdWUuCisgICAgICAgIGhlYWRlcnMuYXBwZW5kKCJTZXQtQ29va2llOiBQQVJUX05VTUJFUj0zLDQ7IGRvbWFpbj1mb28uYmFyLmFjbWUuY29tIikKKyAgICAgICAgcmVzID0gRmFrZVJlc3BvbnNlKGhlYWRlcnMsICJodHRwOi8vd3d3LmFjbWUuY29tL2ZvbyIpCisgICAgICAgIGMuZXh0cmFjdF9jb29raWVzKHJlcywgcmVxKQorCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly9mb28uYmFyLmFjbWUuY29tL2ZvbyIpCisgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAiUEFSVF9OVU1CRVI9Myw0IiBpbiByZXEuZ2V0X2hlYWRlcigiQ29va2llIikgYW5kCisgICAgICAgICAgICAiQ3VzdG9tZXI9V0lMRV9FX0NPWU9URSIgaW4gcmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpKQorCisgICAgZGVmIHRlc3RfaW50cmFuZXRfZG9tYWluc18yOTY1KHNlbGYpOgorICAgICAgICAjIFRlc3QgaGFuZGxpbmcgb2YgbG9jYWwgaW50cmFuZXQgaG9zdG5hbWVzIHdpdGhvdXQgYSBkb3QuCisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKworICAgICAgICBjID0gQ29va2llSmFyKERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NT1UcnVlKSkKKyAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2V4YW1wbGUvIiwKKyAgICAgICAgICAgICAgICAgICAgICAiZm9vMT1iYXI7IFBPUlQ7IERpc2NhcmQ7IFZlcnNpb249MTsiKQorICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vZXhhbXBsZS8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb28yPWJhcjsgZG9tYWluPSIubG9jYWwiOyBWZXJzaW9uPTEnKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmb28xPWJhciIsIGNvb2tpZSkKKworICAgICAgICBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vZXhhbXBsZS8iLCAnZm9vMz1iYXI7IFZlcnNpb249MScpCisgICAgICAgIGNvb2tpZSA9IGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9leGFtcGxlLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZvbzI9YmFyIiwgY29va2llKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMykKKworICAgIGRlZiB0ZXN0X2ludHJhbmV0X2RvbWFpbnNfbnMoc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKworICAgICAgICBjID0gQ29va2llSmFyKERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NSA9IEZhbHNlKSkKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly9leGFtcGxlLyIsICJmb28xPWJhciIpCisgICAgICAgIGNvb2tpZSA9IGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZXhhbXBsZS8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vMj1iYXI7IGRvbWFpbj0ubG9jYWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZm9vMT1iYXIiLCBjb29raWUpCisKKyAgICAgICAgY29va2llID0gaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly9leGFtcGxlLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZvbzI9YmFyIiwgY29va2llKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMikKKworICAgIGRlZiB0ZXN0X2VtcHR5X3BhdGgoc2VsZik6CisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIsIERlZmF1bHRDb29raWVQb2xpY3kKKyAgICAgICAgZnJvbSB1cmxsaWIyIGltcG9ydCBSZXF1ZXN0CisKKyAgICAgICAgIyBUZXN0IGZvciBlbXB0eSBwYXRoCisgICAgICAgICMgQnJva2VuIHdlYi1zZXJ2ZXIgT1JJT04vMS4zLjM4IHJldHVybnMgdG8gdGhlIGNsaWVudCByZXNwb25zZSBsaWtlCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICBTZXQtQ29va2llOiBKU0VTU0lPTklEPUFCQ0RFUkFORE9NMTIzOyBQYXRoPQorICAgICAgICAjCisgICAgICAgICMgaWUuIHdpdGggUGF0aCBzZXQgdG8gbm90aGluZy4KKyAgICAgICAgIyBJbiB0aGlzIGNhc2UsIGV4dHJhY3RfY29va2llcygpIG11c3Qgc2V0IGNvb2tpZSB0byAvIChyb290KQorICAgICAgICBjID0gQ29va2llSmFyKERlZmF1bHRDb29raWVQb2xpY3kocmZjMjk2NSA9IFRydWUpKQorICAgICAgICBoZWFkZXJzID0gW10KKworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFudHMuY29tLyIpCisgICAgICAgIGhlYWRlcnMuYXBwZW5kKCJTZXQtQ29va2llOiBKU0VTU0lPTklEPUFCQ0RFUkFORE9NMTIzOyBQYXRoPSIpCisgICAgICAgIHJlcyA9IEZha2VSZXNwb25zZShoZWFkZXJzLCAiaHR0cDovL3d3dy5hbnRzLmNvbS8iKQorICAgICAgICBjLmV4dHJhY3RfY29va2llcyhyZXMsIHJlcSkKKworICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LmFudHMuY29tLyIpCisgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJKU0VTU0lPTklEPUFCQ0RFUkFORE9NMTIzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hlYWRlcigiQ29va2llMiIpLCAnJFZlcnNpb249IjEiJykKKworICAgICAgICAjIG1pc3NpbmcgcGF0aCBpbiB0aGUgcmVxdWVzdCBVUkkKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5hbnRzLmNvbTo4MDgwIikKKyAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hlYWRlcigiQ29va2llIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkpTRVNTSU9OSUQ9QUJDREVSQU5ET00xMjMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJDb29raWUyIiksICckVmVyc2lvbj0iMSInKQorCisgICAgZGVmIHRlc3Rfc2Vzc2lvbl9jb29raWVzKHNlbGYpOgorICAgICAgICBmcm9tIGNvb2tpZWxpYiBpbXBvcnQgQ29va2llSmFyCisgICAgICAgIGZyb20gdXJsbGliMiBpbXBvcnQgUmVxdWVzdAorCisgICAgICAgIHllYXJfcGx1c19vbmUgPSB0aW1lLmxvY2FsdGltZSgpWzBdICsgMQorCisgICAgICAgICMgQ2hlY2sgc2Vzc2lvbiBjb29raWVzIGFyZSBkZWxldGVkIHByb3Blcmx5IGJ5CisgICAgICAgICMgQ29va2llSmFyLmNsZWFyX3Nlc3Npb25fY29va2llcyBtZXRob2QKKworICAgICAgICByZXEgPSBSZXF1ZXN0KCdodHRwOi8vd3d3LnBlcmxtZWlzdGVyLmNvbS9zY3JpcHRzJykKKyAgICAgICAgaGVhZGVycyA9IFtdCisgICAgICAgIGhlYWRlcnMuYXBwZW5kKCJTZXQtQ29va2llOiBzMT1zZXNzaW9uO1BhdGg9L3NjcmlwdHMiKQorICAgICAgICBoZWFkZXJzLmFwcGVuZCgiU2V0LUNvb2tpZTogcDE9cGVybTsgRG9tYWluPS5wZXJsbWVpc3Rlci5jb207IgorICAgICAgICAgICAgICAgICAgICAgICAiUGF0aD0vO2V4cGlyZXM9RnJpLCAwMi1GZWItJWQgMjM6MjQ6MjAgR01UIiAlCisgICAgICAgICAgICAgICAgICAgICAgIHllYXJfcGx1c19vbmUpCisgICAgICAgIGhlYWRlcnMuYXBwZW5kKCJTZXQtQ29va2llOiBwMj1wZXJtO1BhdGg9LztleHBpcmVzPUZyaSwgIgorICAgICAgICAgICAgICAgICAgICAgICAiMDItRmViLSVkIDIzOjI0OjIwIEdNVCIgJSB5ZWFyX3BsdXNfb25lKQorICAgICAgICBoZWFkZXJzLmFwcGVuZCgiU2V0LUNvb2tpZTogczI9c2Vzc2lvbjtQYXRoPS9zY3JpcHRzOyIKKyAgICAgICAgICAgICAgICAgICAgICAgIkRvbWFpbj0ucGVybG1laXN0ZXIuY29tIikKKyAgICAgICAgaGVhZGVycy5hcHBlbmQoJ1NldC1Db29raWUyOiBzMz1zZXNzaW9uO1ZlcnNpb249MTtEaXNjYXJkO1BhdGg9Ii8iJykKKyAgICAgICAgcmVzID0gRmFrZVJlc3BvbnNlKGhlYWRlcnMsICdodHRwOi8vd3d3LnBlcmxtZWlzdGVyLmNvbS9zY3JpcHRzJykKKworICAgICAgICBjID0gQ29va2llSmFyKCkKKyAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMocmVzLCByZXEpCisgICAgICAgICMgSG93IG1hbnkgc2Vzc2lvbi9wZXJtYW5lbnQgY29va2llcyBkbyB3ZSBoYXZlPworICAgICAgICBjb3VudGVyID0geyJzZXNzaW9uX2FmdGVyIjogMCwKKyAgICAgICAgICAgICAgICAgICAicGVybV9hZnRlciI6IDAsCisgICAgICAgICAgICAgICAgICAgInNlc3Npb25fYmVmb3JlIjogMCwKKyAgICAgICAgICAgICAgICAgICAicGVybV9iZWZvcmUiOiAwfQorICAgICAgICBmb3IgY29va2llIGluIGM6CisgICAgICAgICAgICBrZXkgPSAiJXNfYmVmb3JlIiAlIGNvb2tpZS52YWx1ZQorICAgICAgICAgICAgY291bnRlcltrZXldID0gY291bnRlcltrZXldICsgMQorICAgICAgICBjLmNsZWFyX3Nlc3Npb25fY29va2llcygpCisgICAgICAgICMgSG93IG1hbnkgbm93PworICAgICAgICBmb3IgY29va2llIGluIGM6CisgICAgICAgICAgICBrZXkgPSAiJXNfYWZ0ZXIiICUgY29va2llLnZhbHVlCisgICAgICAgICAgICBjb3VudGVyW2tleV0gPSBjb3VudGVyW2tleV0gKyAxCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAoCisgICAgICAgICAgICAjIGEgcGVybWFuZW50IGNvb2tpZSBnb3QgbG9zdCBhY2NpZGVudGFsbHkKKyAgICAgICAgICAgIGNvdW50ZXJbInBlcm1fYWZ0ZXIiXSAhPSBjb3VudGVyWyJwZXJtX2JlZm9yZSJdIG9yCisgICAgICAgICAgICAjIGEgc2Vzc2lvbiBjb29raWUgaGFzbid0IGJlZW4gY2xlYXJlZAorICAgICAgICAgICAgY291bnRlclsic2Vzc2lvbl9hZnRlciJdICE9IDAgb3IKKyAgICAgICAgICAgICMgd2UgZGlkbid0IGhhdmUgc2Vzc2lvbiBjb29raWVzIGluIHRoZSBmaXJzdCBwbGFjZQorICAgICAgICAgICAgY291bnRlclsic2Vzc2lvbl9iZWZvcmUiXSA9PSAwKSkKKworCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgRGF0ZVRpbWVUZXN0cywKKyAgICAgICAgSGVhZGVyVGVzdHMsCisgICAgICAgIENvb2tpZVRlc3RzLAorICAgICAgICBGaWxlQ29va2llSmFyVGVzdHMsCisgICAgICAgIExXUENvb2tpZVRlc3RzLAorICAgICAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvcHkucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb3B5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjRmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jb3B5LnB5CkBAIC0wLDAgKzEsNzEyIEBACisiIiJVbml0IHRlc3RzIGZvciB0aGUgY29weSBtb2R1bGUuIiIiCisKK2ltcG9ydCBjb3B5CitpbXBvcnQgY29weV9yZWcKK2ltcG9ydCB3ZWFrcmVmCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgVGVzdENvcHkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBBdHRlbXB0IGZ1bGwgbGluZSBjb3ZlcmFnZSBvZiBjb3B5LnB5IGZyb20gdG9wIHRvIGJvdHRvbQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkuRXJyb3IgaXMgY29weS5lcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoY29weS5FcnJvciwgRXhjZXB0aW9uKSkKKworICAgICMgVGhlIGNvcHkoKSBtZXRob2QKKworICAgIGRlZiB0ZXN0X2NvcHlfYmFzaWMoc2VsZik6CisgICAgICAgIHggPSA0MgorICAgICAgICB5ID0gY29weS5jb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKworICAgIGRlZiB0ZXN0X2NvcHlfY29weShzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbyk6CisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KKyAgICAgICAgICAgIGRlZiBfX2NvcHlfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gQyhzZWxmLmZvbykKKyAgICAgICAgeCA9IEMoNDIpCisgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9fY2xhc3NfXywgeC5fX2NsYXNzX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5mb28sIHguZm9vKQorCisgICAgZGVmIHRlc3RfY29weV9yZWdpc3RyeShzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBmb28pOgorICAgICAgICAgICAgICAgIG9iaiA9IG9iamVjdC5fX25ld19fKGNscykKKyAgICAgICAgICAgICAgICBvYmouZm9vID0gZm9vCisgICAgICAgICAgICAgICAgcmV0dXJuIG9iagorICAgICAgICBkZWYgcGlja2xlX0Mob2JqKToKKyAgICAgICAgICAgIHJldHVybiAoQywgKG9iai5mb28sKSkKKyAgICAgICAgeCA9IEMoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29weS5jb3B5LCB4KQorICAgICAgICBjb3B5X3JlZy5waWNrbGUoQywgcGlja2xlX0MsIEMpCisgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKKworICAgIGRlZiB0ZXN0X2NvcHlfcmVkdWNlX2V4KHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19yZWR1Y2VfZXhfXyhzZWxmLCBwcm90byk6CisgICAgICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCwgInNob3VsZG4ndCBjYWxsIHRoaXMiCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgeSA9IGNvcHkuY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyB4KQorCisgICAgZGVmIHRlc3RfY29weV9yZWR1Y2Uoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICB4ID0gQygpCisgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgeCkKKworICAgIGRlZiB0ZXN0X2NvcHlfY2FudChzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJfX3JlZHVjZSIpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvciwgbmFtZQorICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKQorICAgICAgICB4ID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNvcHkuRXJyb3IsIGNvcHkuY29weSwgeCkKKworICAgICMgVHlwZS1zcGVjaWZpYyBfY29weV94eHgoKSBtZXRob2RzCisKKyAgICBkZWYgdGVzdF9jb3B5X2F0b21pYyhzZWxmKToKKyAgICAgICAgY2xhc3MgQ2xhc3NpYzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgTmV3U3R5bGUob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdGVzdHMgPSBbTm9uZSwgNDIsIDJMKioxMDAsIDMuMTQsIFRydWUsIEZhbHNlLCAxaiwKKyAgICAgICAgICAgICAgICAgImhlbGxvIiwgdSJoZWxsb1x1MTIzNCIsIGYuZnVuY19jb2RlLAorICAgICAgICAgICAgICAgICBOZXdTdHlsZSwgeHJhbmdlKDEwKSwgQ2xhc3NpYywgbWF4XQorICAgICAgICBmb3IgeCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb3B5LmNvcHkoeCkgaXMgeCwgcmVwcih4KSkKKworICAgIGRlZiB0ZXN0X2NvcHlfbGlzdChzZWxmKToKKyAgICAgICAgeCA9IFsxLCAyLCAzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuY29weSh4KSwgeCkKKworICAgIGRlZiB0ZXN0X2NvcHlfdHVwbGUoc2VsZik6CisgICAgICAgIHggPSAoMSwgMiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmNvcHkoeCksIHgpCisKKyAgICBkZWYgdGVzdF9jb3B5X2RpY3Qoc2VsZik6CisgICAgICAgIHggPSB7ImZvbyI6IDEsICJiYXIiOiAyfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuY29weSh4KSwgeCkKKworICAgIGRlZiB0ZXN0X2NvcHlfaW5zdF92YW5pbGxhKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbyk6CisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYuZm9vLCBvdGhlci5mb28pCisgICAgICAgIHggPSBDKDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuY29weSh4KSwgeCkKKworICAgIGRlZiB0ZXN0X2NvcHlfaW5zdF9jb3B5KHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbyk6CisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KKyAgICAgICAgICAgIGRlZiBfX2NvcHlfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gQyhzZWxmLmZvbykKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYuZm9vLCBvdGhlci5mb28pCisgICAgICAgIHggPSBDKDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuY29weSh4KSwgeCkKKworICAgIGRlZiB0ZXN0X2NvcHlfaW5zdF9nZXRpbml0YXJncyhzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb28pOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisgICAgICAgICAgICBkZWYgX19nZXRpbml0YXJnc19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoc2VsZi5mb28sKQorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZi5mb28sIG90aGVyLmZvbykKKyAgICAgICAgeCA9IEMoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29weS5jb3B5KHgpLCB4KQorCisgICAgZGVmIHRlc3RfY29weV9pbnN0X2dldHN0YXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbyk6CisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHsiZm9vIjogc2VsZi5mb299CisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmLmZvbywgb3RoZXIuZm9vKQorICAgICAgICB4ID0gQyg0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmNvcHkoeCksIHgpCisKKyAgICBkZWYgdGVzdF9jb3B5X2luc3Rfc2V0c3RhdGUoc2VsZik6CisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9vKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworICAgICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSBzdGF0ZVsiZm9vIl0KKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYuZm9vLCBvdGhlci5mb28pCisgICAgICAgIHggPSBDKDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuY29weSh4KSwgeCkKKworICAgIGRlZiB0ZXN0X2NvcHlfaW5zdF9nZXRzdGF0ZV9zZXRzdGF0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb28pOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZvbworICAgICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSBzdGF0ZQorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZi5mb28sIG90aGVyLmZvbykKKyAgICAgICAgeCA9IEMoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29weS5jb3B5KHgpLCB4KQorCisgICAgIyBUaGUgZGVlcGNvcHkoKSBtZXRob2QKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2Jhc2ljKHNlbGYpOgorICAgICAgICB4ID0gNDIKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfbWVtbyhzZWxmKToKKyAgICAgICAgIyBUZXN0cyBvZiByZWZsZXhpdmUgb2JqZWN0cyBhcmUgdW5kZXIgdHlwZS1zcGVjaWZpYyBzZWN0aW9ucyBiZWxvdy4KKyAgICAgICAgIyBUaGlzIHRlc3RzIG9ubHkgcmVwZXRpdGlvbnMgb2Ygb2JqZWN0cy4KKyAgICAgICAgeCA9IFtdCisgICAgICAgIHggPSBbeCwgeF0KKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHlbMF0gaXMgbm90IHhbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5WzBdIGlzIHlbMV0pCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9pc3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAjIFhYWCBOb3RlOiB0aGVyZSdzIG5vIHdheSB0byB0ZXN0IHRoZSBUeXBlRXJyb3IgY29taW5nIG91dCBvZgorICAgICAgICAjIGlzc3ViY2xhc3MoKSAtLSB0aGlzIGNhbiBvbmx5IGhhcHBlbiB3aGVuIGFuIGV4dGVuc2lvbgorICAgICAgICAjIG1vZHVsZSBkZWZpbmVzIGEgInR5cGUiIHRoYXQgZG9lc24ndCBmb3JtYWxseSBpbmhlcml0IGZyb20KKyAgICAgICAgIyB0eXBlLgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IE1ldGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmRlZXBjb3B5KEMpLCBDKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfZGVlcGNvcHkoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb28pOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisgICAgICAgICAgICBkZWYgX19kZWVwY29weV9fKHNlbGYsIG1lbW89Tm9uZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEMoc2VsZi5mb28pCisgICAgICAgIHggPSBDKDQyKQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX19jbGFzc19fLCB4Ll9fY2xhc3NfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmZvbywgeC5mb28pCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9yZWdpc3RyeShzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBmb28pOgorICAgICAgICAgICAgICAgIG9iaiA9IG9iamVjdC5fX25ld19fKGNscykKKyAgICAgICAgICAgICAgICBvYmouZm9vID0gZm9vCisgICAgICAgICAgICAgICAgcmV0dXJuIG9iagorICAgICAgICBkZWYgcGlja2xlX0Mob2JqKToKKyAgICAgICAgICAgIHJldHVybiAoQywgKG9iai5mb28sKSkKKyAgICAgICAgeCA9IEMoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29weS5kZWVwY29weSwgeCkKKyAgICAgICAgY29weV9yZWcucGlja2xlKEMsIHBpY2tsZV9DLCBDKQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfcmVkdWNlX2V4KHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19yZWR1Y2VfZXhfXyhzZWxmLCBwcm90byk6CisgICAgICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCwgInNob3VsZG4ndCBjYWxsIHRoaXMiCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgeCkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3JlZHVjZShzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgeCkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2NhbnQoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiX19yZWR1Y2UiKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IsIG5hbWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSkKKyAgICAgICAgeCA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjb3B5LkVycm9yLCBjb3B5LmRlZXBjb3B5LCB4KQorCisgICAgIyBUeXBlLXNwZWNpZmljIF9kZWVwY29weV94eHgoKSBtZXRob2RzCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9hdG9taWMoc2VsZik6CisgICAgICAgIGNsYXNzIENsYXNzaWM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIE5ld1N0eWxlKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRlc3RzID0gW05vbmUsIDQyLCAyTCoqMTAwLCAzLjE0LCBUcnVlLCBGYWxzZSwgMWosCisgICAgICAgICAgICAgICAgICJoZWxsbyIsIHUiaGVsbG9cdTEyMzQiLCBmLmZ1bmNfY29kZSwKKyAgICAgICAgICAgICAgICAgTmV3U3R5bGUsIHhyYW5nZSgxMCksIENsYXNzaWMsIG1heF0KKyAgICAgICAgZm9yIHggaW4gdGVzdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weS5kZWVwY29weSh4KSBpcyB4LCByZXByKHgpKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfbGlzdChzZWxmKToKKyAgICAgICAgeCA9IFtbMSwgMl0sIDNdCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgbm90IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzBdIGlzIG5vdCB5WzBdKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfcmVmbGV4aXZlX2xpc3Qoc2VsZik6CisgICAgICAgIHggPSBbXQorICAgICAgICB4LmFwcGVuZCh4KQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGNtcCwgeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5WzBdIGlzIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHkpLCAxKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfdHVwbGUoc2VsZik6CisgICAgICAgIHggPSAoWzEsIDJdLCAzKQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFswXSBpcyBub3QgeVswXSkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3JlZmxleGl2ZV90dXBsZShzZWxmKToKKyAgICAgICAgeCA9IChbXSwpCisgICAgICAgIHhbMF0uYXBwZW5kKHgpCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY21wLCB5LCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHlbMF0gaXMgbm90IHhbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5WzBdWzBdIGlzIHkpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9kaWN0KHNlbGYpOgorICAgICAgICB4ID0geyJmb28iOiBbMSwgMl0sICJiYXIiOiAzfQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFsiZm9vIl0gaXMgbm90IHlbImZvbyJdKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfcmVmbGV4aXZlX2RpY3Qoc2VsZik6CisgICAgICAgIHggPSB7fQorICAgICAgICB4Wydmb28nXSA9IHgKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjbXAsIHksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeVsnZm9vJ10gaXMgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeSksIDEpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9rZWVwYWxpdmUoc2VsZik6CisgICAgICAgIG1lbW8gPSB7fQorICAgICAgICB4ID0gNDIKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCwgbWVtbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1lbW9baWQoeCldIGlzIHgpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9pbnN0X3ZhbmlsbGEoc2VsZik6CisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9vKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZi5mb28sIG90aGVyLmZvbykKKyAgICAgICAgeCA9IEMoWzQyXSkKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5mb28gaXMgbm90IHguZm9vKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfaW5zdF9kZWVwY29weShzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb28pOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisgICAgICAgICAgICBkZWYgX19kZWVwY29weV9fKHNlbGYsIG1lbW8pOgorICAgICAgICAgICAgICAgIHJldHVybiBDKGNvcHkuZGVlcGNvcHkoc2VsZi5mb28sIG1lbW8pKQorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZi5mb28sIG90aGVyLmZvbykKKyAgICAgICAgeCA9IEMoWzQyXSkKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuZm9vIGlzIG5vdCB4LmZvbykKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2luc3RfZ2V0aW5pdGFyZ3Moc2VsZik6CisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9vKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworICAgICAgICAgICAgZGVmIF9fZ2V0aW5pdGFyZ3NfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYuZm9vLCkKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYuZm9vLCBvdGhlci5mb28pCisgICAgICAgIHggPSBDKFs0Ml0pCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5LmZvbyBpcyBub3QgeC5mb28pCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9pbnN0X2dldHN0YXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbyk6CisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHsiZm9vIjogc2VsZi5mb299CisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmLmZvbywgb3RoZXIuZm9vKQorICAgICAgICB4ID0gQyhbNDJdKQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5mb28gaXMgbm90IHguZm9vKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfaW5zdF9zZXRzdGF0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb28pOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisgICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IHN0YXRlWyJmb28iXQorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZi5mb28sIG90aGVyLmZvbykKKyAgICAgICAgeCA9IEMoWzQyXSkKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuZm9vIGlzIG5vdCB4LmZvbykKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2luc3RfZ2V0c3RhdGVfc2V0c3RhdGUoc2VsZik6CisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9vKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mb28KKyAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gc3RhdGUKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYuZm9vLCBvdGhlci5mb28pCisgICAgICAgIHggPSBDKFs0Ml0pCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5LmZvbyBpcyBub3QgeC5mb28pCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9yZWZsZXhpdmVfaW5zdChzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgeCA9IEMoKQorICAgICAgICB4LmZvbyA9IHgKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5LmZvbyBpcyB5KQorCisgICAgIyBfcmVjb25zdHJ1Y3QoKQorCisgICAgZGVmIHRlc3RfcmVjb25zdHJ1Y3Rfc3RyaW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgeCA9IEMoKQorICAgICAgICB5ID0gY29weS5jb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCisKKyAgICBkZWYgdGVzdF9yZWNvbnN0cnVjdF9ub3N0YXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKEMsICgpKQorICAgICAgICB4ID0gQygpCisgICAgICAgIHguZm9vID0gNDIKKyAgICAgICAgeSA9IGNvcHkuY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5fX2NsYXNzX18gaXMgeC5fX2NsYXNzX18pCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5Ll9fY2xhc3NfXyBpcyB4Ll9fY2xhc3NfXykKKworICAgIGRlZiB0ZXN0X3JlY29uc3RydWN0X3N0YXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKEMsICgpLCBzZWxmLl9fZGljdF9fKQorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZi5fX2RpY3RfXywgb3RoZXIuX19kaWN0X18pCisgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgICAgICB4ID0gQygpCisgICAgICAgIHguZm9vID0gWzQyXQorICAgICAgICB5ID0gY29weS5jb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeS5mb28gaXMgbm90IHguZm9vKQorCisgICAgZGVmIHRlc3RfcmVjb25zdHJ1Y3Rfc3RhdGVfc2V0c3RhdGUoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoQywgKCksIHNlbGYuX19kaWN0X18pCisgICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgICAgICAgICBzZWxmLl9fZGljdF9fLnVwZGF0ZShzdGF0ZSkKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYuX19kaWN0X18sIG90aGVyLl9fZGljdF9fKQorICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKyAgICAgICAgeCA9IEMoKQorICAgICAgICB4LmZvbyA9IFs0Ml0KKyAgICAgICAgeSA9IGNvcHkuY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIHgpCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuZm9vIGlzIG5vdCB4LmZvbykKKworICAgIGRlZiB0ZXN0X3JlY29uc3RydWN0X3JlZmxleGl2ZShzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB4ID0gQygpCisgICAgICAgIHguZm9vID0geAorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyBub3QgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkuZm9vIGlzIHkpCisKKyAgICAjIEFkZGl0aW9ucyBmb3IgUHl0aG9uIDIuMyBhbmQgcGlja2xlIHByb3RvY29sIDIKKworICAgIGRlZiB0ZXN0X3JlZHVjZV80dHVwbGUoc2VsZik6CisgICAgICAgIGNsYXNzIEMobGlzdCk6CisgICAgICAgICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKEMsICgpLCBzZWxmLl9fZGljdF9fLCBpdGVyKHNlbGYpKQorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAoY21wKGxpc3Qoc2VsZiksIGxpc3Qob3RoZXIpKSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgY21wKHNlbGYuX19kaWN0X18sIG90aGVyLl9fZGljdF9fKSkKKyAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZSAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisgICAgICAgIHggPSBDKFtbMSwgMl0sIDNdKQorICAgICAgICB5ID0gY29weS5jb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgbm90IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzBdIGlzIHlbMF0pCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgbm90IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzBdIGlzIG5vdCB5WzBdKQorCisgICAgZGVmIHRlc3RfcmVkdWNlXzV0dXBsZShzZWxmKToKKyAgICAgICAgY2xhc3MgQyhkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoQywgKCksIHNlbGYuX19kaWN0X18sIE5vbmUsIHNlbGYuaXRlcml0ZW1zKCkpCisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChjbXAoZGljdChzZWxmKSwgbGlzdChkaWN0KSkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtcChzZWxmLl9fZGljdF9fLCBvdGhlci5fX2RpY3RfXykpCisgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgICAgICB4ID0gQyhbKCJmb28iLCBbMSwgMl0pLCAoImJhciIsIDMpXSkKKyAgICAgICAgeSA9IGNvcHkuY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFsiZm9vIl0gaXMgeVsiZm9vIl0pCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgbm90IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WyJmb28iXSBpcyBub3QgeVsiZm9vIl0pCisKKyAgICBkZWYgdGVzdF9jb3B5X3Nsb3RzKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbImZvbyJdCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgeC5mb28gPSBbNDJdCisgICAgICAgIHkgPSBjb3B5LmNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHguZm9vIGlzIHkuZm9vKQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfc2xvdHMoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsiZm9vIl0KKyAgICAgICAgeCA9IEMoKQorICAgICAgICB4LmZvbyA9IFs0Ml0KKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmZvbywgeS5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4LmZvbyBpcyBub3QgeS5mb28pCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9kaWN0X3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBDKGRpY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQ9Tm9uZSk6CisgICAgICAgICAgICAgICAgaWYgbm90IGQ6CisgICAgICAgICAgICAgICAgICAgIGQgPSB7fQorICAgICAgICAgICAgICAgIHNlbGYuX2tleXMgPSBsaXN0KGQua2V5cygpKQorICAgICAgICAgICAgICAgIGRpY3QuX19pbml0X18oc2VsZiwgZCkKKyAgICAgICAgICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIGl0ZW0pOgorICAgICAgICAgICAgICAgIGRpY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCBpdGVtKQorICAgICAgICAgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZi5fa2V5czoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fa2V5cy5hcHBlbmQoa2V5KQorICAgICAgICB4ID0gQyhkPXsnZm9vJzowfSkKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX2tleXMsIHkuX2tleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICB4WydiYXInXSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh4LCB5KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHguX2tleXMsIHkuX2tleXMpCisKKyAgICBkZWYgdGVzdF9jb3B5X2xpc3Rfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEMobGlzdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHggPSBDKFtbMSwgMl0sIDNdKQorICAgICAgICB4LmZvbyA9IFs0LCA1XQorICAgICAgICB5ID0gY29weS5jb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4KSwgbGlzdCh5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmZvbywgeS5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzBdIGlzIHlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4LmZvbyBpcyB5LmZvbykKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2xpc3Rfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEMobGlzdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHggPSBDKFtbMSwgMl0sIDNdKQorICAgICAgICB4LmZvbyA9IFs0LCA1XQorICAgICAgICB5ID0gY29weS5kZWVwY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5mb28sIHkuZm9vKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFswXSBpcyBub3QgeVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHguZm9vIGlzIG5vdCB5LmZvbykKKworICAgIGRlZiB0ZXN0X2NvcHlfdHVwbGVfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEModHVwbGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB4ID0gQyhbMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoeCksICgxLCAyLCAzKSkKKyAgICAgICAgeSA9IGNvcHkuY29weSh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKHkpLCAoMSwgMiwgMykpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV90dXBsZV9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQyh0dXBsZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHggPSBDKFtbMSwgMl0sIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKHgpLCAoWzEsIDJdLCAzKSkKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZSh5KSwgKFsxLCAyXSwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIG5vdCB5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoeFswXSBpcyBub3QgeVswXSkKKworICAgIGRlZiB0ZXN0X2dldHN0YXRlX2V4YyhzZWxmKToKKyAgICAgICAgY2xhc3MgRXZpbFN0YXRlKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJhaW4ndCBnb3Qgbm8gc3RpY2tpbicgc3RhdGUiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvcHkuY29weSwgRXZpbFN0YXRlKCkpCisKKyAgICBkZWYgdGVzdF9jb3B5X2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuY29weShnbG9iYWxfZm9vKSwgZ2xvYmFsX2ZvbykKKyAgICAgICAgZGVmIGZvbyh4LCB5KTogcmV0dXJuIHgreQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuY29weShmb28pLCBmb28pCisgICAgICAgIGJhciA9IGxhbWJkYTogTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuY29weShiYXIpLCBiYXIpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmRlZXBjb3B5KGdsb2JhbF9mb28pLCBnbG9iYWxfZm9vKQorICAgICAgICBkZWYgZm9vKHgsIHkpOiByZXR1cm4geCt5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29weS5kZWVwY29weShmb28pLCBmb28pCisgICAgICAgIGJhciA9IGxhbWJkYTogTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuZGVlcGNvcHkoYmFyKSwgYmFyKQorCisgICAgZGVmIF9jaGVja193ZWFrcmVmKHNlbGYsIF9jb3B5KToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvYmogPSBDKCkKKyAgICAgICAgeCA9IHdlYWtyZWYucmVmKG9iaikKKyAgICAgICAgeSA9IF9jb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCisgICAgICAgIGRlbCBvYmoKKyAgICAgICAgeSA9IF9jb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHgpCisKKyAgICBkZWYgdGVzdF9jb3B5X3dlYWtyZWYoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX3dlYWtyZWYoY29weS5jb3B5KQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHlfd2Vha3JlZihzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfd2Vha3JlZihjb3B5LmRlZXBjb3B5KQorCisgICAgZGVmIF9jaGVja19jb3B5X3dlYWtkaWN0KHNlbGYsIF9kaWN0dHlwZSk6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYSwgYiwgYywgZCA9IFtDKCkgZm9yIGkgaW4geHJhbmdlKDQpXQorICAgICAgICB1ID0gX2RpY3R0eXBlKCkKKyAgICAgICAgdVthXSA9IGIKKyAgICAgICAgdVtjXSA9IGQKKyAgICAgICAgdiA9IGNvcHkuY29weSh1KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHYgaXMgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCB1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbYV0sIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodltjXSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDIpCisgICAgICAgIGRlbCBjLCBkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpLCAxKQorICAgICAgICB4LCB5ID0gQygpLCBDKCkKKyAgICAgICAgIyBUaGUgdW5kZXJseWluZyBjb250YWluZXJzIGFyZSBkZWNvdXBsZWQKKyAgICAgICAgdlt4XSA9IHkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih4LCB1KQorCisgICAgZGVmIHRlc3RfY29weV93ZWFra2V5ZGljdChzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfY29weV93ZWFrZGljdCh3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KQorCisgICAgZGVmIHRlc3RfY29weV93ZWFrdmFsdWVkaWN0KHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19jb3B5X3dlYWtkaWN0KHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3dlYWtrZXlkaWN0KHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgc2VsZi5pID0gaQorICAgICAgICBhLCBiLCBjLCBkID0gW0MoaSkgZm9yIGkgaW4geHJhbmdlKDQpXQorICAgICAgICB1ID0gd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSgpCisgICAgICAgIHVbYV0gPSBiCisgICAgICAgIHVbY10gPSBkCisgICAgICAgICMgS2V5cyBhcmVuJ3QgY29waWVkLCB2YWx1ZXMgYXJlCisgICAgICAgIHYgPSBjb3B5LmRlZXBjb3B5KHUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodiwgdSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodlthXSBpcyBiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHZbY10gaXMgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2W2FdLmksIGIuaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2W2NdLmksIGQuaSkKKyAgICAgICAgZGVsIGMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDEpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV93ZWFrdmFsdWVkaWN0KHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgc2VsZi5pID0gaQorICAgICAgICBhLCBiLCBjLCBkID0gW0MoaSkgZm9yIGkgaW4geHJhbmdlKDQpXQorICAgICAgICB1ID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KCkKKyAgICAgICAgdVthXSA9IGIKKyAgICAgICAgdVtjXSA9IGQKKyAgICAgICAgIyBLZXlzIGFyZSBjb3BpZWQsIHZhbHVlcyBhcmVuJ3QKKyAgICAgICAgdiA9IGNvcHkuZGVlcGNvcHkodSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh2LCB1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2KSwgMikKKyAgICAgICAgKHgsIHkpLCAoeiwgdCkgPSBzb3J0ZWQodi5pdGVtcygpLCBrZXk9bGFtYmRhIHBhaXI6IHBhaXJbMF0uaSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh4IGlzIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5pLCBhLmkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeiBpcyBjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHouaSwgYy5pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodCBpcyBkKQorICAgICAgICBkZWwgeCwgeSwgeiwgdAorICAgICAgICBkZWwgZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2KSwgMSkKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5X2JvdW5kX21ldGhvZChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgbShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGYgPSBGb28oKQorICAgICAgICBmLmIgPSBmLm0KKyAgICAgICAgZyA9IGNvcHkuZGVlcGNvcHkoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLm0sIGcuYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGcuYi5pbV9zZWxmIGlzIGcpCisgICAgICAgIGcuYigpCisKKworZGVmIGdsb2JhbF9mb28oeCwgeSk6IHJldHVybiB4K3kKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdENvcHkpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvcHlfcmVnLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY29weV9yZWcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNkYjhiNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NvcHlfcmVnLnB5CkBAIC0wLDAgKzEsMTIxIEBACitpbXBvcnQgY29weV9yZWcKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnBpY2tsZXRlc3RlciBpbXBvcnQgRXh0ZW5zaW9uU2F2ZXIKKworY2xhc3MgQzoKKyAgICBwYXNzCisKKworY2xhc3MgV2l0aG91dFNsb3RzKG9iamVjdCk6CisgICAgcGFzcworCitjbGFzcyBXaXRoV2Vha3JlZihvYmplY3QpOgorICAgIF9fc2xvdHNfXyA9ICgnX193ZWFrcmVmX18nLCkKKworY2xhc3MgV2l0aFByaXZhdGUob2JqZWN0KToKKyAgICBfX3Nsb3RzX18gPSAoJ19fc3BhbScsKQorCitjbGFzcyBXaXRoU2luZ2xlU3RyaW5nKG9iamVjdCk6CisgICAgX19zbG90c19fID0gJ3NwYW0nCisKK2NsYXNzIFdpdGhJbmhlcml0ZWQoV2l0aFNpbmdsZVN0cmluZyk6CisgICAgX19zbG90c19fID0gKCdlZ2dzJywpCisKKworY2xhc3MgQ29weVJlZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvcHlfcmVnLnBpY2tsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQywgTm9uZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X25vbmNhbGxhYmxlX3JlZHVjZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb3B5X3JlZy5waWNrbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoMSksICJub3QgYSBjYWxsYWJsZSIpCisKKyAgICBkZWYgdGVzdF9ub25jYWxsYWJsZV9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb3B5X3JlZy5waWNrbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoMSksIGludCwgIm5vdCBhIGNhbGxhYmxlIikKKworICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CisgICAgICAgIGltcG9ydCBjb3B5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgY29weS5jb3B5KFRydWUpKQorCisgICAgZGVmIHRlc3RfZXh0ZW5zaW9uX3JlZ2lzdHJ5KHNlbGYpOgorICAgICAgICBtb2QsIGZ1bmMsIGNvZGUgPSAnanVuazEgJywgJyBqdW5rMicsIDB4YWJjZAorICAgICAgICBlID0gRXh0ZW5zaW9uU2F2ZXIoY29kZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBTaG91bGRuJ3QgYmUgaW4gcmVnaXN0cnkgbm93LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29weV9yZWcucmVtb3ZlX2V4dGVuc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZCwgZnVuYywgY29kZSkKKyAgICAgICAgICAgIGNvcHlfcmVnLmFkZF9leHRlbnNpb24obW9kLCBmdW5jLCBjb2RlKQorICAgICAgICAgICAgIyBTaG91bGQgYmUgaW4gdGhlIHJlZ2lzdHJ5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHlfcmVnLl9leHRlbnNpb25fcmVnaXN0cnlbbW9kLCBmdW5jXSA9PSBjb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHlfcmVnLl9pbnZlcnRlZF9yZWdpc3RyeVtjb2RlXSA9PSAobW9kLCBmdW5jKSkKKyAgICAgICAgICAgICMgU2hvdWxkbid0IGJlIGluIHRoZSBjYWNoZS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oY29kZSwgY29weV9yZWcuX2V4dGVuc2lvbl9jYWNoZSkKKyAgICAgICAgICAgICMgUmVkdW5kYW50IHJlZ2lzdHJhdGlvbiBzaG91bGQgYmUgT0suCisgICAgICAgICAgICBjb3B5X3JlZy5hZGRfZXh0ZW5zaW9uKG1vZCwgZnVuYywgY29kZSkgICMgc2hvdWxkbid0IGJsb3cgdXAKKyAgICAgICAgICAgICMgQ29uZmxpY3RpbmcgY29kZS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvcHlfcmVnLmFkZF9leHRlbnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QsIGZ1bmMsIGNvZGUgKyAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29weV9yZWcucmVtb3ZlX2V4dGVuc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZCwgZnVuYywgY29kZSArIDEpCisgICAgICAgICAgICAjIENvbmZsaWN0aW5nIG1vZHVsZSBuYW1lLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29weV9yZWcuYWRkX2V4dGVuc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZFsxOl0sIGZ1bmMsIGNvZGUgKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29weV9yZWcucmVtb3ZlX2V4dGVuc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZFsxOl0sIGZ1bmMsIGNvZGUgKQorICAgICAgICAgICAgIyBDb25mbGljdGluZyBmdW5jdGlvbiBuYW1lLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29weV9yZWcuYWRkX2V4dGVuc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZCwgZnVuY1sxOl0sIGNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb3B5X3JlZy5yZW1vdmVfZXh0ZW5zaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLCBmdW5jWzE6XSwgY29kZSkKKyAgICAgICAgICAgICMgQ2FuJ3QgcmVtb3ZlIG9uZSB0aGF0IGlzbid0IHJlZ2lzdGVyZWQgYXQgYWxsLgorICAgICAgICAgICAgaWYgY29kZSArIDEgbm90IGluIGNvcHlfcmVnLl9pbnZlcnRlZF9yZWdpc3RyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb3B5X3JlZy5yZW1vdmVfZXh0ZW5zaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZFsxOl0sIGZ1bmNbMTpdLCBjb2RlICsgMSkKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZS5yZXN0b3JlKCkKKworICAgICAgICAjIFNob3VsZG4ndCBiZSB0aGVyZSBhbnltb3JlLgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKChtb2QsIGZ1bmMpLCBjb3B5X3JlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5KQorICAgICAgICAjIFRoZSBjb2RlICptYXkqIGJlIGluIGNvcHlfcmVnLl9leHRlbnNpb25fcmVnaXN0cnksIHRob3VnaCwgaWYKKyAgICAgICAgIyB3ZSBoYXBwZW5lZCB0byBwaWNrIG9uIGEgcmVnaXN0ZXJlZCBjb2RlLiAgU28gZG9uJ3QgY2hlY2sgZm9yCisgICAgICAgICMgdGhhdC4KKworICAgICAgICAjIENoZWNrIHZhbGlkIGNvZGVzIGF0IHRoZSBsaW1pdHMuCisgICAgICAgIGZvciBjb2RlIGluIDEsIDB4N2ZmZmZmZmY6CisgICAgICAgICAgICBlID0gRXh0ZW5zaW9uU2F2ZXIoY29kZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb3B5X3JlZy5hZGRfZXh0ZW5zaW9uKG1vZCwgZnVuYywgY29kZSkKKyAgICAgICAgICAgICAgICBjb3B5X3JlZy5yZW1vdmVfZXh0ZW5zaW9uKG1vZCwgZnVuYywgY29kZSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZS5yZXN0b3JlKCkKKworICAgICAgICAjIEVuc3VyZSBpbnZhbGlkIGNvZGVzIGJsb3cgdXAuCisgICAgICAgIGZvciBjb2RlIGluIC0xLCAwLCAweDgwMDAwMDAwTDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvcHlfcmVnLmFkZF9leHRlbnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QsIGZ1bmMsIGNvZGUpCisKKyAgICBkZWYgdGVzdF9zbG90bmFtZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29weV9yZWcuX3Nsb3RuYW1lcyhXaXRob3V0U2xvdHMpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5X3JlZy5fc2xvdG5hbWVzKFdpdGhXZWFrcmVmKSwgW10pCisgICAgICAgIGV4cGVjdGVkID0gWydfV2l0aFByaXZhdGVfX3NwYW0nXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHlfcmVnLl9zbG90bmFtZXMoV2l0aFByaXZhdGUpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5X3JlZy5fc2xvdG5hbWVzKFdpdGhTaW5nbGVTdHJpbmcpLCBbJ3NwYW0nXSkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ2VnZ3MnLCAnc3BhbSddCisgICAgICAgIGV4cGVjdGVkLnNvcnQoKQorICAgICAgICByZXN1bHQgPSBjb3B5X3JlZy5fc2xvdG5hbWVzKFdpdGhJbmhlcml0ZWQpCisgICAgICAgIHJlc3VsdC5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENvcHlSZWdUZXN0Q2FzZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jcGlja2xlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY3BpY2tsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmM3MDBiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY3BpY2tsZS5weQpAQCAtMCwwICsxLDIzNyBAQAoraW1wb3J0IGNQaWNrbGUKK2ltcG9ydCBjU3RyaW5nSU8KK2ltcG9ydCBpbworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QucGlja2xldGVzdGVyIGltcG9ydCAoQWJzdHJhY3RQaWNrbGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFBpY2tsZU1vZHVsZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0UGlja2xlclVucGlja2xlck9iamVjdFRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ21lbVBpY2tsZVRlc3RzKQorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgY1N0cmluZ0lPTWl4aW46CisgICAgb3V0cHV0ID0gaW5wdXQgPSBjU3RyaW5nSU8uU3RyaW5nSU8KKworICAgIGRlZiBjbG9zZShzZWxmLCBmKToKKyAgICAgICAgcGFzcworCitjbGFzcyBCeXRlc0lPTWl4aW46CisgICAgb3V0cHV0ID0gaW5wdXQgPSBpby5CeXRlc0lPCisKKyAgICBkZWYgY2xvc2Uoc2VsZiwgZik6CisgICAgICAgIHBhc3MKKworY2xhc3MgRmlsZUlPTWl4aW46CisKKyAgICBkZWYgb3V0cHV0KHNlbGYpOgorICAgICAgICByZXR1cm4gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAnd2IrJykKKworICAgIGRlZiBpbnB1dChzZWxmLCBkYXRhKToKKyAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3diKycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIGNsb3NlKHNlbGYsIGYpOgorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisKK2NsYXNzIGNQaWNrbGVUZXN0cyhBYnN0cmFjdFBpY2tsZVRlc3RzLCBBYnN0cmFjdFBpY2tsZU1vZHVsZVRlc3RzKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kdW1wcyA9IGNQaWNrbGUuZHVtcHMKKyAgICAgICAgc2VsZi5sb2FkcyA9IGNQaWNrbGUubG9hZHMKKworICAgIGVycm9yID0gY1BpY2tsZS5CYWRQaWNrbGVHZXQKKyAgICBtb2R1bGUgPSBjUGlja2xlCisKK2NsYXNzIGNQaWNrbGVQaWNrbGVyVGVzdHMoQWJzdHJhY3RQaWNrbGVUZXN0cyk6CisKKyAgICBkZWYgZHVtcHMoc2VsZiwgYXJnLCBwcm90bz0wKToKKyAgICAgICAgZiA9IHNlbGYub3V0cHV0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IGNQaWNrbGUuUGlja2xlcihmLCBwcm90bykKKyAgICAgICAgICAgIHAuZHVtcChhcmcpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5jbG9zZShmKQorCisgICAgZGVmIGxvYWRzKHNlbGYsIGJ1Zik6CisgICAgICAgIGYgPSBzZWxmLmlucHV0KGJ1ZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IGNQaWNrbGUuVW5waWNrbGVyKGYpCisgICAgICAgICAgICByZXR1cm4gcC5sb2FkKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoZikKKworICAgIGVycm9yID0gY1BpY2tsZS5CYWRQaWNrbGVHZXQKKworY2xhc3MgY1N0cmluZ0lPQ1BpY2tsZXJUZXN0cyhjU3RyaW5nSU9NaXhpbiwgY1BpY2tsZVBpY2tsZXJUZXN0cyk6CisgICAgcGFzcworCitjbGFzcyBCeXRlc0lPQ1BpY2tsZXJUZXN0cyhCeXRlc0lPTWl4aW4sIGNQaWNrbGVQaWNrbGVyVGVzdHMpOgorICAgIHBhc3MKKworY2xhc3MgRmlsZUlPQ1BpY2tsZXJUZXN0cyhGaWxlSU9NaXhpbiwgY1BpY2tsZVBpY2tsZXJUZXN0cyk6CisgICAgcGFzcworCisKK2NsYXNzIGNQaWNrbGVMaXN0UGlja2xlclRlc3RzKEFic3RyYWN0UGlja2xlVGVzdHMpOgorCisgICAgZGVmIGR1bXBzKHNlbGYsIGFyZywgcHJvdG89MCk6CisgICAgICAgIHAgPSBjUGlja2xlLlBpY2tsZXIocHJvdG8pCisgICAgICAgIHAuZHVtcChhcmcpCisgICAgICAgIHJldHVybiBwLmdldHZhbHVlKCkKKworICAgIGRlZiBsb2FkcyhzZWxmLCAqYXJncyk6CisgICAgICAgIGYgPSBzZWxmLmlucHV0KGFyZ3NbMF0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSBjUGlja2xlLlVucGlja2xlcihmKQorICAgICAgICAgICAgcmV0dXJuIHAubG9hZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmNsb3NlKGYpCisKKyAgICBlcnJvciA9IGNQaWNrbGUuQmFkUGlja2xlR2V0CisKK2NsYXNzIGNTdHJpbmdJT0NQaWNrbGVyTGlzdFRlc3RzKGNTdHJpbmdJT01peGluLCBjUGlja2xlTGlzdFBpY2tsZXJUZXN0cyk6CisgICAgcGFzcworCitjbGFzcyBCeXRlc0lPQ1BpY2tsZXJMaXN0VGVzdHMoQnl0ZXNJT01peGluLCBjUGlja2xlTGlzdFBpY2tsZXJUZXN0cyk6CisgICAgcGFzcworCitjbGFzcyBGaWxlSU9DUGlja2xlckxpc3RUZXN0cyhGaWxlSU9NaXhpbiwgY1BpY2tsZUxpc3RQaWNrbGVyVGVzdHMpOgorICAgIHBhc3MKKworCitjbGFzcyBjUGlja2xlRmFzdFBpY2tsZXJUZXN0cyhBYnN0cmFjdFBpY2tsZVRlc3RzKToKKworICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvPTApOgorICAgICAgICBmID0gc2VsZi5vdXRwdXQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0gY1BpY2tsZS5QaWNrbGVyKGYsIHByb3RvKQorICAgICAgICAgICAgcC5mYXN0ID0gMQorICAgICAgICAgICAgcC5kdW1wKGFyZykKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmNsb3NlKGYpCisKKyAgICBkZWYgbG9hZHMoc2VsZiwgKmFyZ3MpOgorICAgICAgICBmID0gc2VsZi5pbnB1dChhcmdzWzBdKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0gY1BpY2tsZS5VbnBpY2tsZXIoZikKKyAgICAgICAgICAgIHJldHVybiBwLmxvYWQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5jbG9zZShmKQorCisgICAgZXJyb3IgPSBjUGlja2xlLkJhZFBpY2tsZUdldAorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2xpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0UGlja2xlVGVzdHMudGVzdF9yZWN1cnNpdmVfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZikKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV90dXBsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RQaWNrbGVUZXN0cy50ZXN0X3JlY3Vyc2l2ZV90dXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZikKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9pbnN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFBpY2tsZVRlc3RzLnRlc3RfcmVjdXJzaXZlX2luc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfZGljdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RQaWNrbGVUZXN0cy50ZXN0X3JlY3Vyc2l2ZV9kaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmKQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX211bHRpKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdFBpY2tsZVRlc3RzLnRlc3RfcmVjdXJzaXZlX211bHRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmKQorCisgICAgZGVmIHRlc3Rfbm9ucmVjdXJzaXZlX2RlZXAoc2VsZik6CisgICAgICAgICMgSWYgaXQncyBub3QgY3ljbGljLCBpdCBzaG91bGQgcGlja2xlIE9LIGV2ZW4gaWYgdGhlIG5lc3RpbmcKKyAgICAgICAgIyBkZXB0aCBleGNlZWRzIFBZX0NQSUNLTEVfRkFTVF9MSU1JVC4gIFRoYXQgaGFwcGVucyB0byBiZQorICAgICAgICAjIDUwIHRvZGF5LiAgSmFjayBKYW5zZW4gcmVwb3J0ZWQgc3RhY2sgb3ZlcmZsb3cgb24gTWFjIE9TIDkKKyAgICAgICAgIyBhdCA2NC4KKyAgICAgICAgYSA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDYwKToKKyAgICAgICAgICAgIGEgPSBbYV0KKyAgICAgICAgYiA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorCitjbGFzcyBjU3RyaW5nSU9DUGlja2xlckZhc3RUZXN0cyhjU3RyaW5nSU9NaXhpbiwgY1BpY2tsZUZhc3RQaWNrbGVyVGVzdHMpOgorICAgIHBhc3MKKworY2xhc3MgQnl0ZXNJT0NQaWNrbGVyRmFzdFRlc3RzKEJ5dGVzSU9NaXhpbiwgY1BpY2tsZUZhc3RQaWNrbGVyVGVzdHMpOgorICAgIHBhc3MKKworY2xhc3MgRmlsZUlPQ1BpY2tsZXJGYXN0VGVzdHMoRmlsZUlPTWl4aW4sIGNQaWNrbGVGYXN0UGlja2xlclRlc3RzKToKKyAgICBwYXNzCisKKworY2xhc3MgY1BpY2tsZVBpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0cyhBYnN0cmFjdFBpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0cyk6CisKKyAgICBwaWNrbGVyX2NsYXNzID0gY1BpY2tsZS5QaWNrbGVyCisgICAgdW5waWNrbGVyX2NsYXNzID0gY1BpY2tsZS5VbnBpY2tsZXIKKworY2xhc3MgY1BpY2tsZUJpZ21lbVBpY2tsZVRlc3RzKEJpZ21lbVBpY2tsZVRlc3RzKToKKworICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvPTAsIGZhc3Q9MCk6CisgICAgICAgICMgSWdub3JlIGZhc3QKKyAgICAgICAgcmV0dXJuIGNQaWNrbGUuZHVtcHMoYXJnLCBwcm90bykKKworICAgIGRlZiBsb2FkcyhzZWxmLCBidWYpOgorICAgICAgICAjIElnbm9yZSBmYXN0CisgICAgICAgIHJldHVybiBjUGlja2xlLmxvYWRzKGJ1ZikKKworCitjbGFzcyBOb2RlKG9iamVjdCk6CisgICAgcGFzcworCitjbGFzcyBjUGlja2xlRGVlcFJlY3Vyc2l2ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaXNzdWUyNzAyKHNlbGYpOgorICAgICAgICAjIFRoaXMgc2hvdWxkIHJhaXNlIGEgUmVjdXJzaW9uTGltaXQgYnV0IGluIHNvbWUKKyAgICAgICAgIyBwbGF0Zm9ybXMgKEZyZWVCU0QsIHdpbjMyKSBzb21ldGltZXMgcmFpc2VzIEtleUVycm9yIGluc3RlYWQsCisgICAgICAgICMgb3IganVzdCBzaWxlbnRseSB0ZXJtaW5hdGVzIHRoZSBpbnRlcnByZXRlciAoPWNyYXNoZXMpLgorICAgICAgICBub2RlcyA9IFtOb2RlKCkgZm9yIGkgaW4gcmFuZ2UoNTAwKV0KKyAgICAgICAgZm9yIG4gaW4gbm9kZXM6CisgICAgICAgICAgICBuLmNvbm5lY3Rpb25zID0gbGlzdChub2RlcykKKyAgICAgICAgICAgIG4uY29ubmVjdGlvbnMucmVtb3ZlKG4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChBdHRyaWJ1dGVFcnJvciwgUnVudGltZUVycm9yKSwgY1BpY2tsZS5kdW1wcywgbikKKworICAgIGRlZiB0ZXN0X2lzc3VlMzE3OShzZWxmKToKKyAgICAgICAgIyBTYWZlIHRlc3QsIGJlY2F1c2UgSSBicm9rZSB0aGlzIGNhc2Ugd2hlbiBmaXhpbmcgdGhlCisgICAgICAgICMgYmVoYXZpb3VyIGZvciB0aGUgcHJldmlvdXMgdGVzdC4KKyAgICAgICAgcmVzPVtdCisgICAgICAgIGZvciB4IGluIHJhbmdlKDEsMjAwMCk6CisgICAgICAgICAgICByZXMuYXBwZW5kKGRpY3QoZG9jPXgsIHNpbWlsYXI9W10pKQorICAgICAgICBjUGlja2xlLmR1bXBzKHJlcykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgY1BpY2tsZVRlc3RzLAorICAgICAgICBjU3RyaW5nSU9DUGlja2xlclRlc3RzLAorICAgICAgICBCeXRlc0lPQ1BpY2tsZXJUZXN0cywKKyAgICAgICAgRmlsZUlPQ1BpY2tsZXJUZXN0cywKKyAgICAgICAgY1N0cmluZ0lPQ1BpY2tsZXJMaXN0VGVzdHMsCisgICAgICAgIEJ5dGVzSU9DUGlja2xlckxpc3RUZXN0cywKKyAgICAgICAgRmlsZUlPQ1BpY2tsZXJMaXN0VGVzdHMsCisgICAgICAgIGNTdHJpbmdJT0NQaWNrbGVyRmFzdFRlc3RzLAorICAgICAgICBCeXRlc0lPQ1BpY2tsZXJGYXN0VGVzdHMsCisgICAgICAgIEZpbGVJT0NQaWNrbGVyRmFzdFRlc3RzLAorICAgICAgICBjUGlja2xlRGVlcFJlY3Vyc2l2ZSwKKyAgICAgICAgY1BpY2tsZVBpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0cywKKyAgICAgICAgY1BpY2tsZUJpZ21lbVBpY2tsZVRlc3RzLAorICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jcHJvZmlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjNmZTYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkKQEAgLTAsMCArMSwxMjcgQEAKKyIiIlRlc3Qgc3VpdGUgZm9yIHRoZSBjUHJvZmlsZSBtb2R1bGUuIiIiCisKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCB1bmxpbmsKKworIyByaXAgb2ZmIGFsbCBpbnRlcmVzdGluZyBzdHVmZiBmcm9tIHRlc3RfcHJvZmlsZQoraW1wb3J0IGNQcm9maWxlCitmcm9tIHRlc3QudGVzdF9wcm9maWxlIGltcG9ydCBQcm9maWxlVGVzdCwgcmVnZW5lcmF0ZV9leHBlY3RlZF9vdXRwdXQKKworY2xhc3MgQ1Byb2ZpbGVUZXN0KFByb2ZpbGVUZXN0KToKKyAgICBwcm9maWxlcmNsYXNzID0gY1Byb2ZpbGUuUHJvZmlsZQorICAgIGV4cGVjdGVkX2xpc3Rfc29ydF9vdXRwdXQgPSAie21ldGhvZCAnc29ydCcgb2YgJ2xpc3QnIG9iamVjdHN9IgorCisgICAgIyBJc3N1ZSAzODk1LgorICAgIGRlZiB0ZXN0X2JhZF9jb3VudGVyX2R1cmluZ19kZWFsbG9jKHNlbGYpOgorICAgICAgICBpbXBvcnQgX2xzcHJvZgorICAgICAgICAjIE11c3QgdXNlIGEgZmlsZSBhcyBTdHJpbmdJTyBkb2Vzbid0IHRyaWdnZXIgdGhlIGJ1Zy4KKyAgICAgICAgc3lzLnN0ZGVyciA9IG9wZW4oVEVTVEZOLCAndycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9iaiA9IF9sc3Byb2YuUHJvZmlsZXIobGFtYmRhOiBpbnQpCisgICAgICAgICAgICBvYmouZW5hYmxlKCkKKyAgICAgICAgICAgIG9iaiA9IF9sc3Byb2YuUHJvZmlsZXIoMSkKKyAgICAgICAgICAgIG9iai5kaXNhYmxlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzeXMuX19zdGRlcnJfXworICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KENQcm9maWxlVGVzdCkKKworZGVmIG1haW4oKToKKyAgICBpZiAnLXInIG5vdCBpbiBzeXMuYXJndjoKKyAgICAgICAgdGVzdF9tYWluKCkKKyAgICBlbHNlOgorICAgICAgICByZWdlbmVyYXRlX2V4cGVjdGVkX291dHB1dChfX2ZpbGVfXywgQ1Byb2ZpbGVUZXN0KQorCisKKyMgRG9uJ3QgcmVtb3ZlIHRoaXMgY29tbWVudC4gRXZlcnl0aGluZyBiZWxvdyBpdCBpcyBhdXRvLWdlbmVyYXRlZC4KKyMtLWN1dC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDUHJvZmlsZVRlc3QuZXhwZWN0ZWRfb3V0cHV0WydwcmludF9zdGF0cyddID0gIiIiXAorICAgICAgICAgMTI2IGZ1bmN0aW9uIGNhbGxzICgxMDYgcHJpbWl0aXZlIGNhbGxzKSBpbiAxLjAwMCBzZWNvbmRzCisKKyAgIE9yZGVyZWQgYnk6IHN0YW5kYXJkIG5hbWUKKworICAgbmNhbGxzICB0b3R0aW1lICBwZXJjYWxsICBjdW10aW1lICBwZXJjYWxsIGZpbGVuYW1lOmxpbmVubyhmdW5jdGlvbikKKyAgICAgICAgMSAgICAwLjAwMCAgICAwLjAwMCAgICAxLjAwMCAgICAxLjAwMCA8c3RyaW5nPjoxKDxtb2R1bGU+KQorICAgICAgIDI4ICAgIDAuMDI4ICAgIDAuMDAxICAgIDAuMDI4ICAgIDAuMDAxIHByb2ZpbGVlLnB5OjExMChfX2dldGF0dHJfXykKKyAgICAgICAgMSAgICAwLjI3MCAgICAwLjI3MCAgICAxLjAwMCAgICAxLjAwMCBwcm9maWxlZS5weToyNSh0ZXN0ZnVuYykKKyAgICAgMjMvMyAgICAwLjE1MCAgICAwLjAwNyAgICAwLjE3MCAgICAwLjA1NyBwcm9maWxlZS5weTozNShmYWN0b3JpYWwpCisgICAgICAgMjAgICAgMC4wMjAgICAgMC4wMDEgICAgMC4wMjAgICAgMC4wMDEgcHJvZmlsZWUucHk6NDgobXVsKQorICAgICAgICAyICAgIDAuMDQwICAgIDAuMDIwICAgIDAuNjAwICAgIDAuMzAwIHByb2ZpbGVlLnB5OjU1KGhlbHBlcikKKyAgICAgICAgNCAgICAwLjExNiAgICAwLjAyOSAgICAwLjEyMCAgICAwLjAzMCBwcm9maWxlZS5weTo3MyhoZWxwZXIxKQorICAgICAgICAyICAgIDAuMDAwICAgIDAuMDAwICAgIDAuMTQwICAgIDAuMDcwIHByb2ZpbGVlLnB5Ojg0KGhlbHBlcjJfaW5kaXJlY3QpCisgICAgICAgIDggICAgMC4zMTIgICAgMC4wMzkgICAgMC40MDAgICAgMC4wNTAgcHJvZmlsZWUucHk6ODgoaGVscGVyMikKKyAgICAgICAgOCAgICAwLjA2NCAgICAwLjAwOCAgICAwLjA4MCAgICAwLjAxMCBwcm9maWxlZS5weTo5OChzdWJoZWxwZXIpCisgICAgICAgMTIgICAgMC4wMDAgICAgMC4wMDAgICAgMC4wMTIgICAgMC4wMDEge2hhc2F0dHJ9CisgICAgICAgIDQgICAgMC4wMDAgICAgMC4wMDAgICAgMC4wMDAgICAgMC4wMDAge21ldGhvZCAnYXBwZW5kJyBvZiAnbGlzdCcgb2JqZWN0c30KKyAgICAgICAgMSAgICAwLjAwMCAgICAwLjAwMCAgICAwLjAwMCAgICAwLjAwMCB7bWV0aG9kICdkaXNhYmxlJyBvZiAnX2xzcHJvZi5Qcm9maWxlcicgb2JqZWN0c30KKyAgICAgICAgOCAgICAwLjAwMCAgICAwLjAwMCAgICAwLjAwMCAgICAwLjAwMCB7cmFuZ2V9CisgICAgICAgIDQgICAgMC4wMDAgICAgMC4wMDAgICAgMC4wMDAgICAgMC4wMDAge3N5cy5leGNfaW5mb30KKworCisiIiIKK0NQcm9maWxlVGVzdC5leHBlY3RlZF9vdXRwdXRbJ3ByaW50X2NhbGxlcnMnXSA9ICIiIlwKKyAgIE9yZGVyZWQgYnk6IHN0YW5kYXJkIG5hbWUKKworRnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgY2FsbGVkIGJ5Li4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY2FsbHMgIHRvdHRpbWUgIGN1bXRpbWUKKzxzdHJpbmc+OjEoPG1vZHVsZT4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0KK3Byb2ZpbGVlLnB5OjExMChfX2dldGF0dHJfXykgICAgICAgICAgICAgICAgICAgICAgPC0gICAgICAxNiAgICAwLjAxNiAgICAwLjAxNiAgcHJvZmlsZWUucHk6OTgoc3ViaGVscGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICAgIDAuMDEyICAgIDAuMDEyICB7aGFzYXR0cn0KK3Byb2ZpbGVlLnB5OjI1KHRlc3RmdW5jKSAgICAgICAgICAgICAgICAgICAgICAgICAgPC0gICAgICAgMSAgICAwLjI3MCAgICAxLjAwMCAgPHN0cmluZz46MSg8bW9kdWxlPikKK3Byb2ZpbGVlLnB5OjM1KGZhY3RvcmlhbCkgICAgICAgICAgICAgICAgICAgICAgICAgPC0gICAgICAgMSAgICAwLjAxNCAgICAwLjEzMCAgcHJvZmlsZWUucHk6MjUodGVzdGZ1bmMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwLzMgICAgMC4xMzAgICAgMC4xNDcgIHByb2ZpbGVlLnB5OjM1KGZhY3RvcmlhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgICAwLjAwNiAgICAwLjA0MCAgcHJvZmlsZWUucHk6ODQoaGVscGVyMl9pbmRpcmVjdCkKK3Byb2ZpbGVlLnB5OjQ4KG11bCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0gICAgICAyMCAgICAwLjAyMCAgICAwLjAyMCAgcHJvZmlsZWUucHk6MzUoZmFjdG9yaWFsKQorcHJvZmlsZWUucHk6NTUoaGVscGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8LSAgICAgICAyICAgIDAuMDQwICAgIDAuNjAwICBwcm9maWxlZS5weToyNSh0ZXN0ZnVuYykKK3Byb2ZpbGVlLnB5OjczKGhlbHBlcjEpICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0gICAgICAgNCAgICAwLjExNiAgICAwLjEyMCAgcHJvZmlsZWUucHk6NTUoaGVscGVyKQorcHJvZmlsZWUucHk6ODQoaGVscGVyMl9pbmRpcmVjdCkgICAgICAgICAgICAgICAgICA8LSAgICAgICAyICAgIDAuMDAwICAgIDAuMTQwICBwcm9maWxlZS5weTo1NShoZWxwZXIpCitwcm9maWxlZS5weTo4OChoZWxwZXIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtICAgICAgIDYgICAgMC4yMzQgICAgMC4zMDAgIHByb2ZpbGVlLnB5OjU1KGhlbHBlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgICAwLjA3OCAgICAwLjEwMCAgcHJvZmlsZWUucHk6ODQoaGVscGVyMl9pbmRpcmVjdCkKK3Byb2ZpbGVlLnB5Ojk4KHN1YmhlbHBlcikgICAgICAgICAgICAgICAgICAgICAgICAgPC0gICAgICAgOCAgICAwLjA2NCAgICAwLjA4MCAgcHJvZmlsZWUucHk6ODgoaGVscGVyMikKK3toYXNhdHRyfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0gICAgICAgNCAgICAwLjAwMCAgICAwLjAwNCAgcHJvZmlsZWUucHk6NzMoaGVscGVyMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgICAwLjAwMCAgICAwLjAwOCAgcHJvZmlsZWUucHk6ODgoaGVscGVyMikKK3ttZXRob2QgJ2FwcGVuZCcgb2YgJ2xpc3QnIG9iamVjdHN9ICAgICAgICAgICAgICAgPC0gICAgICAgNCAgICAwLjAwMCAgICAwLjAwMCAgcHJvZmlsZWUucHk6NzMoaGVscGVyMSkKK3ttZXRob2QgJ2Rpc2FibGUnIG9mICdfbHNwcm9mLlByb2ZpbGVyJyBvYmplY3RzfSAgPC0KK3tyYW5nZX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0gICAgICAgOCAgICAwLjAwMCAgICAwLjAwMCAgcHJvZmlsZWUucHk6OTgoc3ViaGVscGVyKQore3N5cy5leGNfaW5mb30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8LSAgICAgICA0ICAgIDAuMDAwICAgIDAuMDAwICBwcm9maWxlZS5weTo3MyhoZWxwZXIxKQorCisKKyIiIgorQ1Byb2ZpbGVUZXN0LmV4cGVjdGVkX291dHB1dFsncHJpbnRfY2FsbGVlcyddID0gIiIiXAorICAgT3JkZXJlZCBieTogc3RhbmRhcmQgbmFtZQorCitGdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNhbGxzICB0b3R0aW1lICBjdW10aW1lCis8c3RyaW5nPjoxKDxtb2R1bGU+KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAgICAgIDEgICAgMC4yNzAgICAgMS4wMDAgIHByb2ZpbGVlLnB5OjI1KHRlc3RmdW5jKQorcHJvZmlsZWUucHk6MTEwKF9fZ2V0YXR0cl9fKSAgICAgICAgICAgICAgICAgICAgICAtPgorcHJvZmlsZWUucHk6MjUodGVzdGZ1bmMpICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgICAgICAxICAgIDAuMDE0ICAgIDAuMTMwICBwcm9maWxlZS5weTozNShmYWN0b3JpYWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgICAgMC4wNDAgICAgMC42MDAgIHByb2ZpbGVlLnB5OjU1KGhlbHBlcikKK3Byb2ZpbGVlLnB5OjM1KGZhY3RvcmlhbCkgICAgICAgICAgICAgICAgICAgICAgICAgLT4gICAgMjAvMyAgICAwLjEzMCAgICAwLjE0NyAgcHJvZmlsZWUucHk6MzUoZmFjdG9yaWFsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwICAgIDAuMDIwICAgIDAuMDIwICBwcm9maWxlZS5weTo0OChtdWwpCitwcm9maWxlZS5weTo0OChtdWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+Citwcm9maWxlZS5weTo1NShoZWxwZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAgICAgIDQgICAgMC4xMTYgICAgMC4xMjAgIHByb2ZpbGVlLnB5OjczKGhlbHBlcjEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgICAgMC4wMDAgICAgMC4xNDAgIHByb2ZpbGVlLnB5Ojg0KGhlbHBlcjJfaW5kaXJlY3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgICAgMC4yMzQgICAgMC4zMDAgIHByb2ZpbGVlLnB5Ojg4KGhlbHBlcjIpCitwcm9maWxlZS5weTo3MyhoZWxwZXIxKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAgICAgIDQgICAgMC4wMDAgICAgMC4wMDQgIHtoYXNhdHRyfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAgIDAuMDAwICAgIDAuMDAwICB7bWV0aG9kICdhcHBlbmQnIG9mICdsaXN0JyBvYmplY3RzfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAgIDAuMDAwICAgIDAuMDAwICB7c3lzLmV4Y19pbmZvfQorcHJvZmlsZWUucHk6ODQoaGVscGVyMl9pbmRpcmVjdCkgICAgICAgICAgICAgICAgICAtPiAgICAgICAyICAgIDAuMDA2ICAgIDAuMDQwICBwcm9maWxlZS5weTozNShmYWN0b3JpYWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgICAgMC4wNzggICAgMC4xMDAgIHByb2ZpbGVlLnB5Ojg4KGhlbHBlcjIpCitwcm9maWxlZS5weTo4OChoZWxwZXIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAgICAgIDggICAgMC4wNjQgICAgMC4wODAgIHByb2ZpbGVlLnB5Ojk4KHN1YmhlbHBlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgICAwLjAwMCAgICAwLjAwOCAge2hhc2F0dHJ9Citwcm9maWxlZS5weTo5OChzdWJoZWxwZXIpICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAgICAgMTYgICAgMC4wMTYgICAgMC4wMTYgIHByb2ZpbGVlLnB5OjExMChfX2dldGF0dHJfXykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgICAwLjAwMCAgICAwLjAwMCAge3JhbmdlfQore2hhc2F0dHJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgICAgIDEyICAgIDAuMDEyICAgIDAuMDEyICBwcm9maWxlZS5weToxMTAoX19nZXRhdHRyX18pCit7bWV0aG9kICdhcHBlbmQnIG9mICdsaXN0JyBvYmplY3RzfSAgICAgICAgICAgICAgIC0+Cit7bWV0aG9kICdkaXNhYmxlJyBvZiAnX2xzcHJvZi5Qcm9maWxlcicgb2JqZWN0c30gIC0+Cit7cmFuZ2V9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+Cit7c3lzLmV4Y19pbmZvfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+CisKKworIiIiCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jcnlwdC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2NyeXB0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYjIwMGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jcnlwdC5weQpAQCAtMCwwICsxLDE3IEBACitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CisKK2NyeXB0ID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2NyeXB0JykKKworY2xhc3MgQ3J5cHRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jcnlwdChzZWxmKToKKyAgICAgICAgYyA9IGNyeXB0LmNyeXB0KCdteXBhc3N3b3JkJywgJ2FiJykKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnVGVzdCBlbmNyeXB0aW9uOiAnLCBjCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENyeXB0VGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Nzdi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Nzdi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2NhNWFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY3N2LnB5CkBAIC0wLDAgKzEsMTA3NiBAQAorIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQorIyBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorIyBjc3YgcGFja2FnZSB1bml0IHRlc3RzCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgY3N2CitpbXBvcnQgZ2MKK2ltcG9ydCBpbworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgVGVzdF9Dc3YodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgdGhlIHVuZGVybHlpbmcgQyBjc3YgcGFyc2VyIGluIHdheXMgdGhhdCBhcmUgbm90IGFwcHJvcHJpYXRlCisgICAgZnJvbSB0aGUgaGlnaCBsZXZlbCBpbnRlcmZhY2UuIEZ1cnRoZXIgdGVzdHMgb2YgdGhpcyBuYXR1cmUgYXJlIGRvbmUKKyAgICBpbiBUZXN0RGlhbGVjdFJlZ2lzdHJ5LgorICAgICIiIgorICAgIGRlZiBfdGVzdF9hcmdfdmFsaWQoc2VsZiwgY3RvciwgYXJnKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdG9yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0b3IsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3RvciwgYXJnLCBiYWRfYXR0ciA9IDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3RvciwgYXJnLCBkZWxpbWl0ZXIgPSAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0b3IsIGFyZywgZGVsaW1pdGVyID0gJ1hYJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBjdG9yLCBhcmcsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0b3IsIGFyZywgZGVsaW1pdGVyPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3RvciwgYXJnLCBkZWxpbWl0ZXI9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdG9yLCBhcmcsIHF1b3RlY2hhcj0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0b3IsIGFyZywgbGluZXRlcm1pbmF0b3I9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdG9yLCBhcmcsIGxpbmV0ZXJtaW5hdG9yPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3RvciwgYXJnLCBxdW90aW5nPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3RvciwgYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90aW5nPWNzdi5RVU9URV9BTEwsIHF1b3RlY2hhcj0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdG9yLCBhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3Rpbmc9Y3N2LlFVT1RFX0FMTCwgcXVvdGVjaGFyPU5vbmUpCisKKyAgICBkZWYgdGVzdF9yZWFkZXJfYXJnX3ZhbGlkKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2FyZ192YWxpZChjc3YucmVhZGVyLCBbXSkKKworICAgIGRlZiB0ZXN0X3dyaXRlcl9hcmdfdmFsaWQoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYXJnX3ZhbGlkKGNzdi53cml0ZXIsIFN0cmluZ0lPKCkpCisKKyAgICBkZWYgX3Rlc3RfZGVmYXVsdF9hdHRycyhzZWxmLCBjdG9yLCAqYXJncyk6CisgICAgICAgIG9iaiA9IGN0b3IoKmFyZ3MpCisgICAgICAgICMgQ2hlY2sgZGVmYXVsdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5kZWxpbWl0ZXIsICcsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5kb3VibGVxdW90ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5lc2NhcGVjaGFyLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5kaWFsZWN0LmxpbmV0ZXJtaW5hdG9yLCAiXHJcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3QucXVvdGVjaGFyLCAnIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3QucXVvdGluZywgY3N2LlFVT1RFX01JTklNQUwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3Quc2tpcGluaXRpYWxzcGFjZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3Quc3RyaWN0LCBGYWxzZSkKKyAgICAgICAgIyBUcnkgZGVsZXRpbmcgb3IgY2hhbmdpbmcgYXR0cmlidXRlcyAodGhleSBhcmUgcmVhZC1vbmx5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRlbGF0dHIsIG9iai5kaWFsZWN0LCAnZGVsaW1pdGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCBvYmouZGlhbGVjdCwgJ2RlbGltaXRlcicsICc6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGRlbGF0dHIsIG9iai5kaWFsZWN0LCAncXVvdGluZycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBvYmouZGlhbGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1b3RpbmcnLCBOb25lKQorCisgICAgZGVmIHRlc3RfcmVhZGVyX2F0dHJzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2RlZmF1bHRfYXR0cnMoY3N2LnJlYWRlciwgW10pCisKKyAgICBkZWYgdGVzdF93cml0ZXJfYXR0cnMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZGVmYXVsdF9hdHRycyhjc3Yud3JpdGVyLCBTdHJpbmdJTygpKQorCisgICAgZGVmIF90ZXN0X2t3X2F0dHJzKHNlbGYsIGN0b3IsICphcmdzKToKKyAgICAgICAgIyBOb3cgdHJ5IHdpdGggYWx0ZXJuYXRlIG9wdGlvbnMKKyAgICAgICAga3dhcmdzID0gZGljdChkZWxpbWl0ZXI9JzonLCBkb3VibGVxdW90ZT1GYWxzZSwgZXNjYXBlY2hhcj0nXFwnLAorICAgICAgICAgICAgICAgICAgICAgIGxpbmV0ZXJtaW5hdG9yPSdccicsIHF1b3RlY2hhcj0nKicsCisgICAgICAgICAgICAgICAgICAgICAgcXVvdGluZz1jc3YuUVVPVEVfTk9ORSwgc2tpcGluaXRpYWxzcGFjZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgIHN0cmljdD1UcnVlKQorICAgICAgICBvYmogPSBjdG9yKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5kZWxpbWl0ZXIsICc6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5kb3VibGVxdW90ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3QuZXNjYXBlY2hhciwgJ1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5saW5ldGVybWluYXRvciwgIlxyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5xdW90ZWNoYXIsICcqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5xdW90aW5nLCBjc3YuUVVPVEVfTk9ORSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5za2lwaW5pdGlhbHNwYWNlLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5kaWFsZWN0LnN0cmljdCwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3JlYWRlcl9rd19hdHRycyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9rd19hdHRycyhjc3YucmVhZGVyLCBbXSkKKworICAgIGRlZiB0ZXN0X3dyaXRlcl9rd19hdHRycyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9rd19hdHRycyhjc3Yud3JpdGVyLCBTdHJpbmdJTygpKQorCisgICAgZGVmIF90ZXN0X2RpYWxlY3RfYXR0cnMoc2VsZiwgY3RvciwgKmFyZ3MpOgorICAgICAgICAjIE5vdyB0cnkgd2l0aCBkaWFsZWN0LWRlcml2ZWQgb3B0aW9ucworICAgICAgICBjbGFzcyBkaWFsZWN0OgorICAgICAgICAgICAgZGVsaW1pdGVyPSctJworICAgICAgICAgICAgZG91YmxlcXVvdGU9RmFsc2UKKyAgICAgICAgICAgIGVzY2FwZWNoYXI9J14nCisgICAgICAgICAgICBsaW5ldGVybWluYXRvcj0nJCcKKyAgICAgICAgICAgIHF1b3RlY2hhcj0nIycKKyAgICAgICAgICAgIHF1b3Rpbmc9Y3N2LlFVT1RFX0FMTAorICAgICAgICAgICAgc2tpcGluaXRpYWxzcGFjZT1UcnVlCisgICAgICAgICAgICBzdHJpY3Q9RmFsc2UKKyAgICAgICAgYXJncyA9IGFyZ3MgKyAoZGlhbGVjdCwpCisgICAgICAgIG9iaiA9IGN0b3IoKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3QuZGVsaW1pdGVyLCAnLScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3QuZG91YmxlcXVvdGUsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5kaWFsZWN0LmVzY2FwZWNoYXIsICdeJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5saW5ldGVybWluYXRvciwgIiQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5kaWFsZWN0LnF1b3RlY2hhciwgJyMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5kaWFsZWN0LnF1b3RpbmcsIGNzdi5RVU9URV9BTEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRpYWxlY3Quc2tpcGluaXRpYWxzcGFjZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZGlhbGVjdC5zdHJpY3QsIEZhbHNlKQorCisgICAgZGVmIHRlc3RfcmVhZGVyX2RpYWxlY3RfYXR0cnMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZGlhbGVjdF9hdHRycyhjc3YucmVhZGVyLCBbXSkKKworICAgIGRlZiB0ZXN0X3dyaXRlcl9kaWFsZWN0X2F0dHJzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2RpYWxlY3RfYXR0cnMoY3N2LndyaXRlciwgU3RyaW5nSU8oKSkKKworCisgICAgZGVmIF93cml0ZV90ZXN0KHNlbGYsIGZpZWxkcywgZXhwZWN0LCAqKmt3YXJncyk6CisgICAgICAgIGZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIGZpbGVvYmogPSBvcy5mZG9wZW4oZmQsICJ3K2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGZpbGVvYmosICoqa3dhcmdzKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KGZpZWxkcykKKyAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlb2JqLnJlYWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ICsgd3JpdGVyLmRpYWxlY3QubGluZXRlcm1pbmF0b3IpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfYXJnX3ZhbGlkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIE5vbmUsICcnKQorICAgICAgICBzZWxmLl93cml0ZV90ZXN0KCgpLCAnJykKKyAgICAgICAgc2VsZi5fd3JpdGVfdGVzdChbTm9uZV0sICciIicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgc2VsZi5fd3JpdGVfdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW05vbmVdLCBOb25lLCBxdW90aW5nID0gY3N2LlFVT1RFX05PTkUpCisgICAgICAgICMgQ2hlY2sgdGhhdCBleGNlcHRpb25zIGFyZSBwYXNzZWQgdXAgdGhlIGNoYWluCisgICAgICAgIGNsYXNzIEJhZExpc3Q6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMTA7CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgaWYgaSA+IDI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5fd3JpdGVfdGVzdCwgQmFkTGlzdCgpLCAnJykKKyAgICAgICAgY2xhc3MgQmFkSXRlbToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5fd3JpdGVfdGVzdCwgW0JhZEl0ZW0oKV0sICcnKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfYmlnZmllbGQoc2VsZik6CisgICAgICAgICMgVGhpcyBleGVyY2lzZXMgdGhlIGJ1ZmZlciByZWFsbG9jIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgYmlnc3RyaW5nID0gJ1gnICogNTAwMDAKKyAgICAgICAgc2VsZi5fd3JpdGVfdGVzdChbYmlnc3RyaW5nLGJpZ3N0cmluZ10sICclcywlcycgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKGJpZ3N0cmluZywgYmlnc3RyaW5nKSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3F1b3Rpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoWydhJywxLCdwLHEnXSwgJ2EsMSwicCxxIicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWydhJywxLCdwLHEnXSwgJ2EsMSxwLHEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90aW5nID0gY3N2LlFVT1RFX05PTkUpCisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoWydhJywxLCdwLHEnXSwgJ2EsMSwicCxxIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGluZyA9IGNzdi5RVU9URV9NSU5JTUFMKQorICAgICAgICBzZWxmLl93cml0ZV90ZXN0KFsnYScsMSwncCxxJ10sICciYSIsMSwicCxxIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGluZyA9IGNzdi5RVU9URV9OT05OVU1FUklDKQorICAgICAgICBzZWxmLl93cml0ZV90ZXN0KFsnYScsMSwncCxxJ10sICciYSIsIjEiLCJwLHEiJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBxdW90aW5nID0gY3N2LlFVT1RFX0FMTCkKKyAgICAgICAgc2VsZi5fd3JpdGVfdGVzdChbJ2FcbmInLDFdLCAnImFcbmIiLCIxIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGluZyA9IGNzdi5RVU9URV9BTEwpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lc2NhcGUoc2VsZik6CisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoWydhJywxLCdwLHEnXSwgJ2EsMSwicCxxIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlY2hhcj0nXFwnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsnYScsMSwncCwicSInXSwgJ2EsMSwicCxcXCJxXFwiIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZWNoYXI9Tm9uZSwgZG91YmxlcXVvdGU9RmFsc2UpCisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoWydhJywxLCdwLCJxIiddLCAnYSwxLCJwLFxcInFcXCIiJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGVjaGFyPSdcXCcsIGRvdWJsZXF1b3RlID0gRmFsc2UpCisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoWyciJ10sICciIiIiJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGVjaGFyPSdcXCcsIHF1b3RpbmcgPSBjc3YuUVVPVEVfTUlOSU1BTCkKKyAgICAgICAgc2VsZi5fd3JpdGVfdGVzdChbJyInXSwgJ1xcIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlY2hhcj0nXFwnLCBxdW90aW5nID0gY3N2LlFVT1RFX01JTklNQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlcXVvdGUgPSBGYWxzZSkKKyAgICAgICAgc2VsZi5fd3JpdGVfdGVzdChbJyInXSwgJ1xcIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlY2hhcj0nXFwnLCBxdW90aW5nID0gY3N2LlFVT1RFX05PTkUpCisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoWydhJywxLCdwLHEnXSwgJ2EsMSxwXFwscScsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlY2hhcj0nXFwnLCBxdW90aW5nID0gY3N2LlFVT1RFX05PTkUpCisKKyAgICBkZWYgdGVzdF93cml0ZXJvd3Moc2VsZik6CisgICAgICAgIGNsYXNzIEJyb2tlbkZpbGU6CisgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgYnVmKToKKyAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoQnJva2VuRmlsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB3cml0ZXIud3JpdGVyb3dzLCBbWydhJ11dKQorICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3cml0ZXIud3JpdGVyb3dzLCBOb25lKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93cyhbWydhJywnYiddLFsnYycsJ2QnXV0pCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5yZWFkKCksICJhLGJcclxuYyxkXHJcbiIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZmxvYXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTM1NzM6IGxvc3Mgb2YgcHJlY2lzaW9uIGJlY2F1c2UgY3N2LndyaXRlcgorICAgICAgICAjIHVzZXMgc3RyKCkgZm9yIGZsb2F0cyBpbnN0ZWFkIG9mIHJlcHIoKQorICAgICAgICBvcmlnX3JvdyA9IFsxLjIzNDU2Nzg5MDEyMywgMS4wLzcuMCwgJ2FiYyddCisgICAgICAgIGYgPSBTdHJpbmdJTygpCisgICAgICAgIGMgPSBjc3Yud3JpdGVyKGYsIHF1b3Rpbmc9Y3N2LlFVT1RFX05PTk5VTUVSSUMpCisgICAgICAgIGMud3JpdGVyb3cob3JpZ19yb3cpCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBjID0gY3N2LnJlYWRlcihmLCBxdW90aW5nPWNzdi5RVU9URV9OT05OVU1FUklDKQorICAgICAgICBuZXdfcm93ID0gbmV4dChjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWdfcm93LCBuZXdfcm93KQorCisgICAgZGVmIF9yZWFkX3Rlc3Qoc2VsZiwgaW5wdXQsIGV4cGVjdCwgKiprd2FyZ3MpOgorICAgICAgICByZWFkZXIgPSBjc3YucmVhZGVyKGlucHV0LCAqKmt3YXJncykKKyAgICAgICAgcmVzdWx0ID0gbGlzdChyZWFkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9yZWFkX29kZGlucHV0cyhzZWxmKToKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFtdLCBbXSkKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFsnJ10sIFtbXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgc2VsZi5fcmVhZF90ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJyJhYiJjJ10sIE5vbmUsIHN0cmljdCA9IDEpCisgICAgICAgICMgY2Fubm90IGhhbmRsZSBudWxsIGJ5dGVzIGZvciB0aGUgbW9tZW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgc2VsZi5fcmVhZF90ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2FiXDBjJ10sIE5vbmUsIHN0cmljdCA9IDEpCisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbJyJhYiJjJ10sIFtbJ2FiYyddXSwgZG91YmxlcXVvdGUgPSAwKQorCisgICAgZGVmIHRlc3RfcmVhZF9lb2woc2VsZik6CisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbJ2EsYiddLCBbWydhJywnYiddXSkKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFsnYSxiXG4nXSwgW1snYScsJ2InXV0pCisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbJ2EsYlxyXG4nXSwgW1snYScsJ2InXV0pCisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbJ2EsYlxyJ10sIFtbJ2EnLCdiJ11dKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIHNlbGYuX3JlYWRfdGVzdCwgWydhLGJccmMsZCddLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBzZWxmLl9yZWFkX3Rlc3QsIFsnYSxiXG5jLGQnXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgc2VsZi5fcmVhZF90ZXN0LCBbJ2EsYlxyXG5jLGQnXSwgW10pCisKKyAgICBkZWYgdGVzdF9yZWFkX2VvZihzZWxmKToKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFsnYSwiJ10sIFtbJ2EnLCAnJ11dKQorICAgICAgICBzZWxmLl9yZWFkX3Rlc3QoWyciYSddLCBbWydhJ11dKQorICAgICAgICBzZWxmLl9yZWFkX3Rlc3QoWydeJ10sIFtbJ1xuJ11dLCBlc2NhcGVjaGFyPSdeJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBzZWxmLl9yZWFkX3Rlc3QsIFsnYSwiJ10sIFtdLCBzdHJpY3Q9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBzZWxmLl9yZWFkX3Rlc3QsIFsnImEnXSwgW10sIHN0cmljdD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIHNlbGYuX3JlYWRfdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWydeJ10sIFtdLCBlc2NhcGVjaGFyPSdeJywgc3RyaWN0PVRydWUpCisKKyAgICBkZWYgdGVzdF9yZWFkX2VzY2FwZShzZWxmKToKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFsnYSxcXGIsYyddLCBbWydhJywgJ2InLCAnYyddXSwgZXNjYXBlY2hhcj0nXFwnKQorICAgICAgICBzZWxmLl9yZWFkX3Rlc3QoWydhLGJcXCxjJ10sIFtbJ2EnLCAnYixjJ11dLCBlc2NhcGVjaGFyPSdcXCcpCisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbJ2EsImJcXCxjIiddLCBbWydhJywgJ2IsYyddXSwgZXNjYXBlY2hhcj0nXFwnKQorICAgICAgICBzZWxmLl9yZWFkX3Rlc3QoWydhLCJiLFxcYyInXSwgW1snYScsICdiLGMnXV0sIGVzY2FwZWNoYXI9J1xcJykKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFsnYSwiYixjXFwiIiddLCBbWydhJywgJ2IsYyInXV0sIGVzY2FwZWNoYXI9J1xcJykKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFsnYSwiYixjIlxcJ10sIFtbJ2EnLCAnYixjXFwnXV0sIGVzY2FwZWNoYXI9J1xcJykKKworICAgIGRlZiB0ZXN0X3JlYWRfcXVvdGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFsnMSwiLDMsIiw1J10sIFtbJzEnLCAnLDMsJywgJzUnXV0pCisgICAgICAgIHNlbGYuX3JlYWRfdGVzdChbJzEsIiwzLCIsNSddLCBbWycxJywgJyInLCAnMycsICciJywgJzUnXV0sCisgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZWNoYXI9Tm9uZSwgZXNjYXBlY2hhcj0nXFwnKQorICAgICAgICBzZWxmLl9yZWFkX3Rlc3QoWycxLCIsMywiLDUnXSwgW1snMScsICciJywgJzMnLCAnIicsICc1J11dLAorICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGluZz1jc3YuUVVPVEVfTk9ORSwgZXNjYXBlY2hhcj0nXFwnKQorICAgICAgICAjIHdpbGwgdGhpcyBmYWlsIHdoZXJlIGxvY2FsZSB1c2VzIGNvbW1hIGZvciBkZWNpbWFscz8KKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFsnLDMsIjUiLDcuMywgOSddLCBbWycnLCAzLCAnNScsIDcuMywgOV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGluZz1jc3YuUVVPVEVfTk9OTlVNRVJJQykKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFsnImFcbmIiLCA3J10sIFtbJ2FcbmInLCAnIDcnXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuX3JlYWRfdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWydhYmMsMyddLCBbW11dLAorICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90aW5nPWNzdi5RVU9URV9OT05OVU1FUklDKQorCisgICAgZGVmIHRlc3RfcmVhZF9iaWdmaWVsZChzZWxmKToKKyAgICAgICAgIyBUaGlzIGV4ZXJjaXNlcyB0aGUgYnVmZmVyIHJlYWxsb2MgZnVuY3Rpb25hbGl0eSBhbmQgZmllbGQgc2l6ZQorICAgICAgICAjIGxpbWl0cy4KKyAgICAgICAgbGltaXQgPSBjc3YuZmllbGRfc2l6ZV9saW1pdCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNpemUgPSA1MDAwMAorICAgICAgICAgICAgYmlnc3RyaW5nID0gJ1gnICogc2l6ZQorICAgICAgICAgICAgYmlnbGluZSA9ICclcywlcycgJSAoYmlnc3RyaW5nLCBiaWdzdHJpbmcpCisgICAgICAgICAgICBzZWxmLl9yZWFkX3Rlc3QoW2JpZ2xpbmVdLCBbW2JpZ3N0cmluZywgYmlnc3RyaW5nXV0pCisgICAgICAgICAgICBjc3YuZmllbGRfc2l6ZV9saW1pdChzaXplKQorICAgICAgICAgICAgc2VsZi5fcmVhZF90ZXN0KFtiaWdsaW5lXSwgW1tiaWdzdHJpbmcsIGJpZ3N0cmluZ11dKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjc3YuZmllbGRfc2l6ZV9saW1pdCgpLCBzaXplKQorICAgICAgICAgICAgY3N2LmZpZWxkX3NpemVfbGltaXQoc2l6ZS0xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBzZWxmLl9yZWFkX3Rlc3QsIFtiaWdsaW5lXSwgW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNzdi5maWVsZF9zaXplX2xpbWl0LCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YuZmllbGRfc2l6ZV9saW1pdCwgMSwgTm9uZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNzdi5maWVsZF9zaXplX2xpbWl0KGxpbWl0KQorCisgICAgZGVmIHRlc3RfcmVhZF9saW5lbnVtKHNlbGYpOgorICAgICAgICBmb3IgciBpbiAoY3N2LnJlYWRlcihbJ2xpbmUsMScsICdsaW5lLDInLCAnbGluZSwzJ10pLAorICAgICAgICAgICAgICAgICAgY3N2LkRpY3RSZWFkZXIoWydsaW5lLDEnLCAnbGluZSwyJywgJ2xpbmUsMyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRuYW1lcz1bJ2EnLCAnYicsICdjJ10pKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5saW5lX251bSwgMCkKKyAgICAgICAgICAgIHIubmV4dCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIubGluZV9udW0sIDEpCisgICAgICAgICAgICByLm5leHQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmxpbmVfbnVtLCAyKQorICAgICAgICAgICAgci5uZXh0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5saW5lX251bSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIHIubmV4dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5saW5lX251bSwgMykKKworICAgIGRlZiB0ZXN0X3JvdW5kdHJpcF9xdW90ZWVkX25ld2xpbmVzKHNlbGYpOgorICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3cml0ZXIud3JpdGVyb3dzLCBOb25lKQorICAgICAgICAgICAgcm93cyA9IFtbJ2FcbmInLCdiJ10sWydjJywneFxyXG5kJ11dCisgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3dzKHJvd3MpCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIGZvciBpLCByb3cgaW4gZW51bWVyYXRlKGNzdi5yZWFkZXIoZmlsZW9iaikpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93LCByb3dzW2ldKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworY2xhc3MgVGVzdERpYWxlY3RSZWdpc3RyeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcmVnaXN0cnlfYmFkYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YubGlzdF9kaWFsZWN0cywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YuZ2V0X2RpYWxlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgY3N2LmdldF9kaWFsZWN0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNzdi5nZXRfZGlhbGVjdCwgIm5vbmVzdWNoIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YudW5yZWdpc3Rlcl9kaWFsZWN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNzdi51bnJlZ2lzdGVyX2RpYWxlY3QsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgY3N2LnVucmVnaXN0ZXJfZGlhbGVjdCwgIm5vbmVzdWNoIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YucmVnaXN0ZXJfZGlhbGVjdCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YucmVnaXN0ZXJfZGlhbGVjdCwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YucmVnaXN0ZXJfZGlhbGVjdCwgIm5vbmVzdWNoIiwgMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YucmVnaXN0ZXJfZGlhbGVjdCwgIm5vbmVzdWNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkYXJndW1lbnQ9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YucmVnaXN0ZXJfZGlhbGVjdCwgIm5vbmVzdWNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGluZz1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNzdi5yZWdpc3Rlcl9kaWFsZWN0LCBbXSkKKworICAgIGRlZiB0ZXN0X3JlZ2lzdHJ5KHNlbGYpOgorICAgICAgICBjbGFzcyBteWV4Y2VsdHN2KGNzdi5leGNlbCk6CisgICAgICAgICAgICBkZWxpbWl0ZXIgPSAiXHQiCisgICAgICAgIG5hbWUgPSAibXlleGNlbHRzdiIKKyAgICAgICAgZXhwZWN0ZWRfZGlhbGVjdHMgPSBjc3YubGlzdF9kaWFsZWN0cygpICsgW25hbWVdCisgICAgICAgIGV4cGVjdGVkX2RpYWxlY3RzLnNvcnQoKQorICAgICAgICBjc3YucmVnaXN0ZXJfZGlhbGVjdChuYW1lLCBteWV4Y2VsdHN2KQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY3N2LnVucmVnaXN0ZXJfZGlhbGVjdCwgbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjc3YuZ2V0X2RpYWxlY3QobmFtZSkuZGVsaW1pdGVyLCAnXHQnKQorICAgICAgICBnb3RfZGlhbGVjdHMgPSBzb3J0ZWQoY3N2Lmxpc3RfZGlhbGVjdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9kaWFsZWN0cywgZ290X2RpYWxlY3RzKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfa3dhcmdzKHNlbGYpOgorICAgICAgICBuYW1lID0gJ2ZlZGNiYScKKyAgICAgICAgY3N2LnJlZ2lzdGVyX2RpYWxlY3QobmFtZSwgZGVsaW1pdGVyPSc7JykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNzdi51bnJlZ2lzdGVyX2RpYWxlY3QsIG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3N2LmdldF9kaWFsZWN0KG5hbWUpLmRlbGltaXRlciwgJzsnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtbJ1gnLCAnWScsICdaJ11dLCBsaXN0KGNzdi5yZWFkZXIoWydYO1k7WiddLCBuYW1lKSkpCisKKyAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX2RpYWxlY3Qoc2VsZik6CisgICAgICAgIGNsYXNzIG15ZXhjZWx0c3YoY3N2LkRpYWxlY3QpOgorICAgICAgICAgICAgZGVsaW1pdGVyID0gIlx0IgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIG15ZXhjZWx0c3YpCisKKyAgICBkZWYgdGVzdF9zcGFjZV9kaWFsZWN0KHNlbGYpOgorICAgICAgICBjbGFzcyBzcGFjZShjc3YuZXhjZWwpOgorICAgICAgICAgICAgZGVsaW1pdGVyID0gIiAiCisgICAgICAgICAgICBxdW90aW5nID0gY3N2LlFVT1RFX05PTkUKKyAgICAgICAgICAgIGVzY2FwZWNoYXIgPSAiXFwiCisKKyAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZmlsZW9iaiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbGVvYmoud3JpdGUoImFiYyBkZWZcbmMxY2NjY2MxIGJlbnplbmVcbiIpCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIHJkciA9IGNzdi5yZWFkZXIoZmlsZW9iaiwgZGlhbGVjdD1zcGFjZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZHIubmV4dCgpLCBbImFiYyIsICJkZWYiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmRyLm5leHQoKSwgWyJjMWNjY2NjMSIsICJiZW56ZW5lIl0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorCisgICAgZGVmIHRlc3RfZGlhbGVjdF9hcHBseShzZWxmKToKKyAgICAgICAgY2xhc3MgdGVzdEEoY3N2LmV4Y2VsKToKKyAgICAgICAgICAgIGRlbGltaXRlciA9ICJcdCIKKyAgICAgICAgY2xhc3MgdGVzdEIoY3N2LmV4Y2VsKToKKyAgICAgICAgICAgIGRlbGltaXRlciA9ICI6IgorICAgICAgICBjbGFzcyB0ZXN0Qyhjc3YuZXhjZWwpOgorICAgICAgICAgICAgZGVsaW1pdGVyID0gInwiCisKKyAgICAgICAgY3N2LnJlZ2lzdGVyX2RpYWxlY3QoJ3Rlc3RDJywgdGVzdEMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGZpbGVvYmopCisgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KFsxLDIsM10pCisgICAgICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlb2JqLnJlYWQoKSwgIjEsMiwzXHJcbiIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorCisgICAgICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICAgICAgZmlsZW9iaiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqLCB0ZXN0QSkKKyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coWzEsMiwzXSkKKyAgICAgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVvYmoucmVhZCgpLCAiMVx0Mlx0M1xyXG4iKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgICAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgICAgIGZpbGVvYmogPSBvcy5mZG9wZW4oZmQsICJ3K2IiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZmlsZW9iaiwgZGlhbGVjdD10ZXN0QigpKQorICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhbMSwyLDNdKQorICAgICAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5yZWFkKCksICIxOjI6M1xyXG4iKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgICAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgICAgIGZpbGVvYmogPSBvcy5mZG9wZW4oZmQsICJ3K2IiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZmlsZW9iaiwgZGlhbGVjdD0ndGVzdEMnKQorICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhbMSwyLDNdKQorICAgICAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5yZWFkKCksICIxfDJ8M1xyXG4iKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgICAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgICAgIGZpbGVvYmogPSBvcy5mZG9wZW4oZmQsICJ3K2IiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZmlsZW9iaiwgZGlhbGVjdD10ZXN0QSwgZGVsaW1pdGVyPSc7JykKKyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coWzEsMiwzXSkKKyAgICAgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVvYmoucmVhZCgpLCAiMTsyOzNcclxuIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNzdi51bnJlZ2lzdGVyX2RpYWxlY3QoJ3Rlc3RDJykKKworICAgIGRlZiB0ZXN0X2JhZF9kaWFsZWN0KHNlbGYpOgorICAgICAgICAjIFVua25vd24gcGFyYW1ldGVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2LnJlYWRlciwgW10sIGJhZF9hdHRyID0gMCkKKyAgICAgICAgIyBCYWQgdmFsdWVzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2LnJlYWRlciwgW10sIGRlbGltaXRlciA9IE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2LnJlYWRlciwgW10sIHF1b3RpbmcgPSAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YucmVhZGVyLCBbXSwgcXVvdGluZyA9IDEwMCkKKworY2xhc3MgVGVzdENzdkJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiByZWFkZXJBc3NlcnRFcXVhbChzZWxmLCBpbnB1dCwgZXhwZWN0ZWRfcmVzdWx0KToKKyAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZmlsZW9iaiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbGVvYmoud3JpdGUoaW5wdXQpCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIHJlYWRlciA9IGNzdi5yZWFkZXIoZmlsZW9iaiwgZGlhbGVjdCA9IHNlbGYuZGlhbGVjdCkKKyAgICAgICAgICAgIGZpZWxkcyA9IGxpc3QocmVhZGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWVsZHMsIGV4cGVjdGVkX3Jlc3VsdCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKKyAgICBkZWYgd3JpdGVyQXNzZXJ0RXF1YWwoc2VsZiwgaW5wdXQsIGV4cGVjdGVkX3Jlc3VsdCk6CisgICAgICAgIGZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIGZpbGVvYmogPSBvcy5mZG9wZW4oZmQsICJ3K2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGZpbGVvYmosIGRpYWxlY3QgPSBzZWxmLmRpYWxlY3QpCisgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3dzKGlucHV0KQorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVvYmoucmVhZCgpLCBleHBlY3RlZF9yZXN1bHQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorCitjbGFzcyBUZXN0RGlhbGVjdEV4Y2VsKFRlc3RDc3ZCYXNlKToKKyAgICBkaWFsZWN0ID0gJ2V4Y2VsJworCisgICAgZGVmIHRlc3Rfc2luZ2xlKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCdhYmMnLCBbWydhYmMnXV0pCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIHNlbGYucmVhZGVyQXNzZXJ0RXF1YWwoJzEsMiwzLDQsNScsIFtbJzEnLCcyJywnMycsJzQnLCc1J11dKQorCisgICAgZGVmIHRlc3RfYmxhbmtsaW5lKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCcnLCBbXSkKKworICAgIGRlZiB0ZXN0X2VtcHR5X2ZpZWxkcyhzZWxmKToKKyAgICAgICAgc2VsZi5yZWFkZXJBc3NlcnRFcXVhbCgnLCcsIFtbJycsICcnXV0pCisKKyAgICBkZWYgdGVzdF9zaW5nbGVxdW90ZWQoc2VsZik6CisgICAgICAgIHNlbGYucmVhZGVyQXNzZXJ0RXF1YWwoJyIiJywgW1snJ11dKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlcXVvdGVkX2xlZnRfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYucmVhZGVyQXNzZXJ0RXF1YWwoJyIiLCcsIFtbJycsJyddXSkKKworICAgIGRlZiB0ZXN0X3NpbmdsZXF1b3RlZF9yaWdodF9lbXB0eShzZWxmKToKKyAgICAgICAgc2VsZi5yZWFkZXJBc3NlcnRFcXVhbCgnLCIiJywgW1snJywnJ11dKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3F1b3RlZF9xdW90ZShzZWxmKToKKyAgICAgICAgc2VsZi5yZWFkZXJBc3NlcnRFcXVhbCgnIiIiIicsIFtbJyInXV0pCisKKyAgICBkZWYgdGVzdF9xdW90ZWRfcXVvdGVzKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCciIiIiIiInLCBbWyciIiddXSkKKworICAgIGRlZiB0ZXN0X2lubGluZV9xdW90ZShzZWxmKToKKyAgICAgICAgc2VsZi5yZWFkZXJBc3NlcnRFcXVhbCgnYSIiYicsIFtbJ2EiImInXV0pCisKKyAgICBkZWYgdGVzdF9pbmxpbmVfcXVvdGVzKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCdhImIiYycsIFtbJ2EiYiJjJ11dKQorCisgICAgZGVmIHRlc3RfcXVvdGVzX2FuZF9tb3JlKHNlbGYpOgorICAgICAgICAjIEV4Y2VsIHdvdWxkIG5ldmVyIHdyaXRlIGEgZmllbGQgY29udGFpbmluZyAnImEiYicsIGJ1dCB3aGVuCisgICAgICAgICMgcmVhZGluZyBvbmUsIGl0IHdpbGwgcmV0dXJuICdhYicuCisgICAgICAgIHNlbGYucmVhZGVyQXNzZXJ0RXF1YWwoJyJhImInLCBbWydhYiddXSkKKworICAgIGRlZiB0ZXN0X2xvbmVfcXVvdGUoc2VsZik6CisgICAgICAgIHNlbGYucmVhZGVyQXNzZXJ0RXF1YWwoJ2EiYicsIFtbJ2EiYiddXSkKKworICAgIGRlZiB0ZXN0X3F1b3RlX2FuZF9xdW90ZShzZWxmKToKKyAgICAgICAgIyBFeGNlbCB3b3VsZCBuZXZlciB3cml0ZSBhIGZpZWxkIGNvbnRhaW5pbmcgJyJhIiAiYiInLCBidXQgd2hlbgorICAgICAgICAjIHJlYWRpbmcgb25lLCBpdCB3aWxsIHJldHVybiAnYSAiYiInLgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCciYSIgImIiJywgW1snYSAiYiInXV0pCisKKyAgICBkZWYgdGVzdF9zcGFjZV9hbmRfcXVvdGUoc2VsZik6CisgICAgICAgIHNlbGYucmVhZGVyQXNzZXJ0RXF1YWwoJyAiYSInLCBbWycgImEiJ11dKQorCisgICAgZGVmIHRlc3RfcXVvdGVkKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCcxLDIsMywiSSB0aGluaywgdGhlcmVmb3JlIEkgYW0iLDUsNicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1snMScsICcyJywgJzMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0kgdGhpbmssIHRoZXJlZm9yZSBJIGFtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1JywgJzYnXV0pCisKKyAgICBkZWYgdGVzdF9xdW90ZWRfcXVvdGUoc2VsZik6CisgICAgICAgIHNlbGYucmVhZGVyQXNzZXJ0RXF1YWwoJzEsMiwzLCIiIkkgc2VlLCIiIHNhaWQgdGhlIGJsaW5kIG1hbiIsImFzIGhlIHBpY2tlZCB1cCBoaXMgaGFtbWVyIGFuZCBzYXciJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbWycxJywgJzInLCAnMycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIkkgc2VlLCIgc2FpZCB0aGUgYmxpbmQgbWFuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcyBoZSBwaWNrZWQgdXAgaGlzIGhhbW1lciBhbmQgc2F3J11dKQorCisgICAgZGVmIHRlc3RfcXVvdGVkX25sKHNlbGYpOgorICAgICAgICBpbnB1dCA9ICcnJ1wKKzEsMiwzLCIiIkkgc2VlLCIiCitzYWlkIHRoZSBibGluZCBtYW4iLCJhcyBoZSBwaWNrZWQgdXAgaGlzCitoYW1tZXIgYW5kIHNhdyIKKzksOCw3LDYnJycKKyAgICAgICAgc2VsZi5yZWFkZXJBc3NlcnRFcXVhbChpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbWycxJywgJzInLCAnMycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciSSBzZWUsIlxuc2FpZCB0aGUgYmxpbmQgbWFuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzIGhlIHBpY2tlZCB1cCBoaXNcbmhhbW1lciBhbmQgc2F3J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnOScsJzgnLCc3JywnNiddXSkKKworICAgIGRlZiB0ZXN0X2R1YmlvdXNfcXVvdGUoc2VsZik6CisgICAgICAgIHNlbGYucmVhZGVyQXNzZXJ0RXF1YWwoJzEyLDEyLDEiLCcsIFtbJzEyJywgJzEyJywgJzEiJywgJyddXSkKKworICAgIGRlZiB0ZXN0X251bGwoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVyQXNzZXJ0RXF1YWwoW10sICcnKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3dyaXRlcihzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZXJBc3NlcnRFcXVhbChbWydhYmMnXV0sICdhYmNcclxuJykKKworICAgIGRlZiB0ZXN0X3NpbXBsZV93cml0ZXIoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVyQXNzZXJ0RXF1YWwoW1sxLCAyLCAnYWJjJywgMywgNF1dLCAnMSwyLGFiYywzLDRcclxuJykKKworICAgIGRlZiB0ZXN0X3F1b3RlcyhzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZXJBc3NlcnRFcXVhbChbWzEsIDIsICdhImJjIicsIDMsIDRdXSwgJzEsMiwiYSIiYmMiIiIsMyw0XHJcbicpCisKKyAgICBkZWYgdGVzdF9xdW90ZV9maWVsZHNlcChzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZXJBc3NlcnRFcXVhbChbWydhYmMsZGVmJ11dLCAnImFiYyxkZWYiXHJcbicpCisKKyAgICBkZWYgdGVzdF9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZXJBc3NlcnRFcXVhbChbWzEsIDIsICdhXG5iYycsIDMsIDRdXSwgJzEsMiwiYVxuYmMiLDMsNFxyXG4nKQorCitjbGFzcyBFc2NhcGVkRXhjZWwoY3N2LmV4Y2VsKToKKyAgICBxdW90aW5nID0gY3N2LlFVT1RFX05PTkUKKyAgICBlc2NhcGVjaGFyID0gJ1xcJworCitjbGFzcyBUZXN0RXNjYXBlZEV4Y2VsKFRlc3RDc3ZCYXNlKToKKyAgICBkaWFsZWN0ID0gRXNjYXBlZEV4Y2VsKCkKKworICAgIGRlZiB0ZXN0X2VzY2FwZV9maWVsZHNlcChzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZXJBc3NlcnRFcXVhbChbWydhYmMsZGVmJ11dLCAnYWJjXFwsZGVmXHJcbicpCisKKyAgICBkZWYgdGVzdF9yZWFkX2VzY2FwZV9maWVsZHNlcChzZWxmKToKKyAgICAgICAgc2VsZi5yZWFkZXJBc3NlcnRFcXVhbCgnYWJjXFwsZGVmXHJcbicsIFtbJ2FiYyxkZWYnXV0pCisKK2NsYXNzIFF1b3RlZEVzY2FwZWRFeGNlbChjc3YuZXhjZWwpOgorICAgIHF1b3RpbmcgPSBjc3YuUVVPVEVfTk9OTlVNRVJJQworICAgIGVzY2FwZWNoYXIgPSAnXFwnCisKK2NsYXNzIFRlc3RRdW90ZWRFc2NhcGVkRXhjZWwoVGVzdENzdkJhc2UpOgorICAgIGRpYWxlY3QgPSBRdW90ZWRFc2NhcGVkRXhjZWwoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZXNjYXBlX2ZpZWxkc2VwKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlckFzc2VydEVxdWFsKFtbJ2FiYyxkZWYnXV0sICciYWJjLGRlZiJcclxuJykKKworICAgIGRlZiB0ZXN0X3JlYWRfZXNjYXBlX2ZpZWxkc2VwKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCciYWJjXFwsZGVmIlxyXG4nLCBbWydhYmMsZGVmJ11dKQorCitjbGFzcyBUZXN0RGljdEZpZWxkcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyMjICJsb25nIiBtZWFucyB0aGUgcm93IGlzIGxvbmdlciB0aGFuIHRoZSBudW1iZXIgb2YgZmllbGRuYW1lcworICAgICMjIyAic2hvcnQiIG1lYW5zIHRoZXJlIGFyZSBmZXdlciBlbGVtZW50cyBpbiB0aGUgcm93IHRoYW4gZmllbGRuYW1lcworICAgIGRlZiB0ZXN0X3dyaXRlX3NpbXBsZV9kaWN0KHNlbGYpOgorICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBmaWxlb2JqID0gaW8ub3BlbihmZCwgJ3crYicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi5EaWN0V3JpdGVyKGZpbGVvYmosIGZpZWxkbmFtZXMgPSBbImYxIiwgImYyIiwgImYzIl0pCisgICAgICAgICAgICB3cml0ZXIud3JpdGVoZWFkZXIoKQorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVvYmoucmVhZGxpbmUoKSwgImYxLGYyLGYzXHJcbiIpCisgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coeyJmMSI6IDEwLCAiZjMiOiAiYWJjIn0pCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIGZpbGVvYmoucmVhZGxpbmUoKSAjIGhlYWRlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlb2JqLnJlYWQoKSwgIjEwLCxhYmNcclxuIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKKyAgICBkZWYgdGVzdF93cml0ZV9ub19maWVsZHMoc2VsZik6CisgICAgICAgIGZpbGVvYmogPSBTdHJpbmdJTygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2LkRpY3RXcml0ZXIsIGZpbGVvYmopCisKKyAgICBkZWYgdGVzdF9yZWFkX2RpY3RfZmllbGRzKHNlbGYpOgorICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZW9iai53cml0ZSgiMSwyLGFiY1xyXG4iKQorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICByZWFkZXIgPSBjc3YuRGljdFJlYWRlcihmaWxlb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRuYW1lcz1bImYxIiwgImYyIiwgImYzIl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5uZXh0KCksIHsiZjEiOiAnMScsICJmMiI6ICcyJywgImYzIjogJ2FiYyd9KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIGRlZiB0ZXN0X3JlYWRfZGljdF9ub19maWVsZG5hbWVzKHNlbGYpOgorICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZW9iai53cml0ZSgiZjEsZjIsZjNcclxuMSwyLGFiY1xyXG4iKQorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICByZWFkZXIgPSBjc3YuRGljdFJlYWRlcihmaWxlb2JqKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIuZmllbGRuYW1lcywgWyJmMSIsICJmMiIsICJmMyJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIubmV4dCgpLCB7ImYxIjogJzEnLCAiZjIiOiAnMicsICJmMyI6ICdhYmMnfSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKKyAgICAjIFR3byB0ZXN0IGNhc2VzIHRvIG1ha2Ugc3VyZSBleGlzdGluZyB3YXlzIG9mIGltcGxpY2l0bHkgc2V0dGluZworICAgICMgZmllbGRuYW1lcyBjb250aW51ZSB0byB3b3JrLiAgQm90aCBhcmlzZSBmcm9tIGRpc2N1c3Npb24gaW4gaXNzdWUzNDM2LgorICAgIGRlZiB0ZXN0X3JlYWRfZGljdF9maWVsZG5hbWVzX2Zyb21fZmlsZShzZWxmKToKKyAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoImYxLGYyLGYzXHJcbjEsMixhYmNcclxuIikKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgcmVhZGVyID0gY3N2LkRpY3RSZWFkZXIoZiwgZmllbGRuYW1lcz1jc3YucmVhZGVyKGYpLm5leHQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLmZpZWxkbmFtZXMsIFsiZjEiLCAiZjIiLCAiZjMiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLm5leHQoKSwgeyJmMSI6ICcxJywgImYyIjogJzInLCAiZjMiOiAnYWJjJ30pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorCisgICAgZGVmIHRlc3RfcmVhZF9kaWN0X2ZpZWxkbmFtZXNfY2hhaW4oc2VsZik6CisgICAgICAgIGltcG9ydCBpdGVydG9vbHMKKyAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoImYxLGYyLGYzXHJcbjEsMixhYmNcclxuIikKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgcmVhZGVyID0gY3N2LkRpY3RSZWFkZXIoZikKKyAgICAgICAgICAgIGZpcnN0ID0gbmV4dChyZWFkZXIpCisgICAgICAgICAgICBmb3Igcm93IGluIGl0ZXJ0b29scy5jaGFpbihbZmlyc3RdLCByZWFkZXIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLmZpZWxkbmFtZXMsIFsiZjEiLCAiZjIiLCAiZjMiXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdywgeyJmMSI6ICcxJywgImYyIjogJzInLCAiZjMiOiAnYWJjJ30pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorCisgICAgZGVmIHRlc3RfcmVhZF9sb25nKHNlbGYpOgorICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZW9iai53cml0ZSgiMSwyLGFiYyw0LDUsNlxyXG4iKQorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICByZWFkZXIgPSBjc3YuRGljdFJlYWRlcihmaWxlb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRuYW1lcz1bImYxIiwgImYyIl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5uZXh0KCksIHsiZjEiOiAnMScsICJmMiI6ICcyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmU6IFsiYWJjIiwgIjQiLCAiNSIsICI2Il19KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIGRlZiB0ZXN0X3JlYWRfbG9uZ193aXRoX3Jlc3Qoc2VsZik6CisgICAgICAgIGZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIGZpbGVvYmogPSBvcy5mZG9wZW4oZmQsICJ3K2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWxlb2JqLndyaXRlKCIxLDIsYWJjLDQsNSw2XHJcbiIpCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIHJlYWRlciA9IGNzdi5EaWN0UmVhZGVyKGZpbGVvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZG5hbWVzPVsiZjEiLCAiZjIiXSwgcmVzdGtleT0iX3Jlc3QiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIubmV4dCgpLCB7ImYxIjogJzEnLCAiZjIiOiAnMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX3Jlc3QiOiBbImFiYyIsICI0IiwgIjUiLCAiNiJdfSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKKyAgICBkZWYgdGVzdF9yZWFkX2xvbmdfd2l0aF9yZXN0X25vX2ZpZWxkbmFtZXMoc2VsZik6CisgICAgICAgIGZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIGZpbGVvYmogPSBvcy5mZG9wZW4oZmQsICJ3K2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWxlb2JqLndyaXRlKCJmMSxmMlxyXG4xLDIsYWJjLDQsNSw2XHJcbiIpCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIHJlYWRlciA9IGNzdi5EaWN0UmVhZGVyKGZpbGVvYmosIHJlc3RrZXk9Il9yZXN0IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLmZpZWxkbmFtZXMsIFsiZjEiLCAiZjIiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLm5leHQoKSwgeyJmMSI6ICcxJywgImYyIjogJzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9yZXN0IjogWyJhYmMiLCAiNCIsICI1IiwgIjYiXX0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorCisgICAgZGVmIHRlc3RfcmVhZF9zaG9ydChzZWxmKToKKyAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZmlsZW9iaiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbGVvYmoud3JpdGUoIjEsMixhYmMsNCw1LDZcclxuMSwyLGFiY1xyXG4iKQorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICByZWFkZXIgPSBjc3YuRGljdFJlYWRlcihmaWxlb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRuYW1lcz0iMSAyIDMgNCA1IDYiLnNwbGl0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0dmFsPSJERUZBVUxUIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLm5leHQoKSwgeyIxIjogJzEnLCAiMiI6ICcyJywgIjMiOiAnYWJjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IjogJzQnLCAiNSI6ICc1JywgIjYiOiAnNid9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIubmV4dCgpLCB7IjEiOiAnMScsICIyIjogJzInLCAiMyI6ICdhYmMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiOiAnREVGQVVMVCcsICI1IjogJ0RFRkFVTFQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjYiOiAnREVGQVVMVCd9KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIGRlZiB0ZXN0X3JlYWRfbXVsdGkoc2VsZik6CisgICAgICAgIHNhbXBsZSA9IFsKKyAgICAgICAgICAgICcyMTQ3NDgzNjQ4LDQzLjBlMTIsMTcsYWJjLGRlZlxyXG4nLAorICAgICAgICAgICAgJzE0NzQ4MzY0OCw0My4wZTIsMTcsYWJjLGRlZlxyXG4nLAorICAgICAgICAgICAgJzQ3NDgzNjQ4LDQzLjAsMTcwLGFiYyxkZWZcclxuJworICAgICAgICAgICAgXQorCisgICAgICAgIHJlYWRlciA9IGNzdi5EaWN0UmVhZGVyKHNhbXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRuYW1lcz0iaTEgZmxvYXQgaTIgczEgczIiLnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLm5leHQoKSwgeyJpMSI6ICcyMTQ3NDgzNjQ4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0IjogJzQzLjBlMTInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaTIiOiAnMTcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiczEiOiAnYWJjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInMyIjogJ2RlZid9KQorCisgICAgZGVmIHRlc3RfcmVhZF93aXRoX2JsYW5rcyhzZWxmKToKKyAgICAgICAgcmVhZGVyID0gY3N2LkRpY3RSZWFkZXIoWyIxLDIsYWJjLDQsNSw2XHJcbiIsIlxyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEsMixhYmMsNCw1LDZcclxuIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkbmFtZXM9IjEgMiAzIDQgNSA2Ii5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5uZXh0KCksIHsiMSI6ICcxJywgIjIiOiAnMicsICIzIjogJ2FiYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IjogJzQnLCAiNSI6ICc1JywgIjYiOiAnNid9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5uZXh0KCksIHsiMSI6ICcxJywgIjIiOiAnMicsICIzIjogJ2FiYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IjogJzQnLCAiNSI6ICc1JywgIjYiOiAnNid9KQorCisgICAgZGVmIHRlc3RfcmVhZF9zZW1pX3NlcChzZWxmKToKKyAgICAgICAgcmVhZGVyID0gY3N2LkRpY3RSZWFkZXIoWyIxOzI7YWJjOzQ7NTs2XHJcbiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZG5hbWVzPSIxIDIgMyA0IDUgNiIuc3BsaXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsaW1pdGVyPSc7JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIubmV4dCgpLCB7IjEiOiAnMScsICIyIjogJzInLCAiMyI6ICdhYmMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCI6ICc0JywgIjUiOiAnNScsICI2IjogJzYnfSkKKworY2xhc3MgVGVzdEFycmF5V3JpdGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pbnRfd3JpdGUoc2VsZik6CisgICAgICAgIGltcG9ydCBhcnJheQorICAgICAgICBjb250ZW50cyA9IFsoMjAtaSkgZm9yIGkgaW4gcmFuZ2UoMjApXQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoJ2knLCBjb250ZW50cykKKworICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqLCBkaWFsZWN0PSJleGNlbCIpCisgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coYSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gIiwiLmpvaW4oW3N0cihpKSBmb3IgaSBpbiBhXSkrIlxyXG4iCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5yZWFkKCksIGV4cGVjdGVkKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIGRlZiB0ZXN0X2RvdWJsZV93cml0ZShzZWxmKToKKyAgICAgICAgaW1wb3J0IGFycmF5CisgICAgICAgIGNvbnRlbnRzID0gWygyMC1pKSowLjEgZm9yIGkgaW4gcmFuZ2UoMjApXQorICAgICAgICBhID0gYXJyYXkuYXJyYXkoJ2QnLCBjb250ZW50cykKKyAgICAgICAgZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZmlsZW9iaiA9IG9zLmZkb3BlbihmZCwgIncrYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZmlsZW9iaiwgZGlhbGVjdD0iZXhjZWwiKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KGEpCisgICAgICAgICAgICBleHBlY3RlZCA9ICIsIi5qb2luKFtyZXByKGkpIGZvciBpIGluIGFdKSsiXHJcbiIKKyAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlb2JqLnJlYWQoKSwgZXhwZWN0ZWQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayhuYW1lKQorCisgICAgZGVmIHRlc3RfZmxvYXRfd3JpdGUoc2VsZik6CisgICAgICAgIGltcG9ydCBhcnJheQorICAgICAgICBjb250ZW50cyA9IFsoMjAtaSkqMC4xIGZvciBpIGluIHJhbmdlKDIwKV0KKyAgICAgICAgYSA9IGFycmF5LmFycmF5KCdmJywgY29udGVudHMpCisgICAgICAgIGZkLCBuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIGZpbGVvYmogPSBvcy5mZG9wZW4oZmQsICJ3K2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGZpbGVvYmosIGRpYWxlY3Q9ImV4Y2VsIikKKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhhKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSAiLCIuam9pbihbcmVwcihpKSBmb3IgaSBpbiBhXSkrIlxyXG4iCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5yZWFkKCksIGV4cGVjdGVkKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworICAgIGRlZiB0ZXN0X2NoYXJfd3JpdGUoc2VsZik6CisgICAgICAgIGltcG9ydCBhcnJheSwgc3RyaW5nCisgICAgICAgIGEgPSBhcnJheS5hcnJheSgnYycsIHN0cmluZy5sZXR0ZXJzKQorICAgICAgICBmZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICBmaWxlb2JqID0gb3MuZmRvcGVuKGZkLCAidytiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqLCBkaWFsZWN0PSJleGNlbCIpCisgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coYSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gIiwiLmpvaW4oYSkrIlxyXG4iCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5yZWFkKCksIGV4cGVjdGVkKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKworY2xhc3MgVGVzdERpYWxlY3RWYWxpZGl0eSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcXVvdGluZyhzZWxmKToKKyAgICAgICAgY2xhc3MgbXlkaWFsZWN0KGNzdi5EaWFsZWN0KToKKyAgICAgICAgICAgIGRlbGltaXRlciA9ICI7IgorICAgICAgICAgICAgZXNjYXBlY2hhciA9ICdcXCcKKyAgICAgICAgICAgIGRvdWJsZXF1b3RlID0gRmFsc2UKKyAgICAgICAgICAgIHNraXBpbml0aWFsc3BhY2UgPSBUcnVlCisgICAgICAgICAgICBsaW5ldGVybWluYXRvciA9ICdcclxuJworICAgICAgICAgICAgcXVvdGluZyA9IGNzdi5RVU9URV9OT05FCisgICAgICAgIGQgPSBteWRpYWxlY3QoKQorCisgICAgICAgIG15ZGlhbGVjdC5xdW90aW5nID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIG15ZGlhbGVjdCkKKworICAgICAgICBteWRpYWxlY3QuZG91YmxlcXVvdGUgPSBUcnVlCisgICAgICAgIG15ZGlhbGVjdC5xdW90aW5nID0gY3N2LlFVT1RFX0FMTAorICAgICAgICBteWRpYWxlY3QucXVvdGVjaGFyID0gJyInCisgICAgICAgIGQgPSBteWRpYWxlY3QoKQorCisgICAgICAgIG15ZGlhbGVjdC5xdW90ZWNoYXIgPSAiJyciCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgbXlkaWFsZWN0KQorCisgICAgICAgIG15ZGlhbGVjdC5xdW90ZWNoYXIgPSA0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgbXlkaWFsZWN0KQorCisgICAgZGVmIHRlc3RfZGVsaW1pdGVyKHNlbGYpOgorICAgICAgICBjbGFzcyBteWRpYWxlY3QoY3N2LkRpYWxlY3QpOgorICAgICAgICAgICAgZGVsaW1pdGVyID0gIjsiCisgICAgICAgICAgICBlc2NhcGVjaGFyID0gJ1xcJworICAgICAgICAgICAgZG91YmxlcXVvdGUgPSBGYWxzZQorICAgICAgICAgICAgc2tpcGluaXRpYWxzcGFjZSA9IFRydWUKKyAgICAgICAgICAgIGxpbmV0ZXJtaW5hdG9yID0gJ1xyXG4nCisgICAgICAgICAgICBxdW90aW5nID0gY3N2LlFVT1RFX05PTkUKKyAgICAgICAgZCA9IG15ZGlhbGVjdCgpCisKKyAgICAgICAgbXlkaWFsZWN0LmRlbGltaXRlciA9ICI6OjoiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgbXlkaWFsZWN0KQorCisgICAgICAgIG15ZGlhbGVjdC5kZWxpbWl0ZXIgPSA0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgbXlkaWFsZWN0KQorCisgICAgZGVmIHRlc3RfbGluZXRlcm1pbmF0b3Ioc2VsZik6CisgICAgICAgIGNsYXNzIG15ZGlhbGVjdChjc3YuRGlhbGVjdCk6CisgICAgICAgICAgICBkZWxpbWl0ZXIgPSAiOyIKKyAgICAgICAgICAgIGVzY2FwZWNoYXIgPSAnXFwnCisgICAgICAgICAgICBkb3VibGVxdW90ZSA9IEZhbHNlCisgICAgICAgICAgICBza2lwaW5pdGlhbHNwYWNlID0gVHJ1ZQorICAgICAgICAgICAgbGluZXRlcm1pbmF0b3IgPSAnXHJcbicKKyAgICAgICAgICAgIHF1b3RpbmcgPSBjc3YuUVVPVEVfTk9ORQorICAgICAgICBkID0gbXlkaWFsZWN0KCkKKworICAgICAgICBteWRpYWxlY3QubGluZXRlcm1pbmF0b3IgPSAiOjo6IgorICAgICAgICBkID0gbXlkaWFsZWN0KCkKKworICAgICAgICBteWRpYWxlY3QubGluZXRlcm1pbmF0b3IgPSA0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgbXlkaWFsZWN0KQorCisKK2NsYXNzIFRlc3RTbmlmZmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzYW1wbGUxID0gIiIiXAorSGFycnkncywgQXJsaW5ndG9uIEhlaWdodHMsIElMLCAyLzEvMDMsIEtpbWkgSGF5ZXMKK1NoYXJrIENpdHksIEdsZW5kYWxlIEhlaWdodHMsIElMLCAxMi8yOC8wMiwgUHJlemVuY2UKK1RvbW15J3MgUGxhY2UsIEJsdWUgSXNsYW5kLCBJTCwgMTIvMjgvMDIsIEJsdWUgU3VuZGF5L1doaXRlIENyb3cKK1N0b25lY3V0dGVycyBTZWFmb29kIGFuZCBDaG9wIEhvdXNlLCBMZW1vbnQsIElMLCAxMi8xOS8wMiwgV2VlayBCYWNrCisiIiIKKyAgICBzYW1wbGUyID0gIiIiXAorJ0hhcnJ5JydzJzonQXJsaW5ndG9uIEhlaWdodHMnOidJTCc6JzIvMS8wMyc6J0tpbWkgSGF5ZXMnCisnU2hhcmsgQ2l0eSc6J0dsZW5kYWxlIEhlaWdodHMnOidJTCc6JzEyLzI4LzAyJzonUHJlemVuY2UnCisnVG9tbXknJ3MgUGxhY2UnOidCbHVlIElzbGFuZCc6J0lMJzonMTIvMjgvMDInOidCbHVlIFN1bmRheS9XaGl0ZSBDcm93JworJ1N0b25lY3V0dGVycyAnJ1NlYWZvb2QnJyBhbmQgQ2hvcCBIb3VzZSc6J0xlbW9udCc6J0lMJzonMTIvMTkvMDInOidXZWVrIEJhY2snCisiIiIKKyAgICBoZWFkZXIgPSAnJydcCisidmVudWUiLCJjaXR5Iiwic3RhdGUiLCJkYXRlIiwicGVyZm9ybWVycyIKKycnJworICAgIHNhbXBsZTMgPSAnJydcCiswNS8wNS8wMz8wNS8wNS8wMz8wNS8wNS8wMz8wNS8wNS8wMz8wNS8wNS8wMz8wNS8wNS8wMworMDUvMDUvMDM/MDUvMDUvMDM/MDUvMDUvMDM/MDUvMDUvMDM/MDUvMDUvMDM/MDUvMDUvMDMKKzA1LzA1LzAzPzA1LzA1LzAzPzA1LzA1LzAzPzA1LzA1LzAzPzA1LzA1LzAzPzA1LzA1LzAzCisnJycKKworICAgIHNhbXBsZTQgPSAnJydcCisyMTQ3NDgzNjQ4OzQzLjBlMTI7MTc7YWJjO2RlZgorMTQ3NDgzNjQ4OzQzLjBlMjsxNzthYmM7ZGVmCis0NzQ4MzY0ODs0My4wOzE3MDthYmM7ZGVmCisnJycKKworICAgIHNhbXBsZTUgPSAiYWFhXHRiYmJcclxuQUFBXHRcclxuQkJCXHRcclxuIgorICAgIHNhbXBsZTYgPSAiYXxifGNcclxuZHxlfGZcclxuIgorICAgIHNhbXBsZTcgPSAiJ2EnfCdiJ3wnYydcclxuJ2QnfGV8ZlxyXG4iCisKKyAgICBkZWYgdGVzdF9oYXNfaGVhZGVyKHNlbGYpOgorICAgICAgICBzbmlmZmVyID0gY3N2LlNuaWZmZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuaWZmZXIuaGFzX2hlYWRlcihzZWxmLnNhbXBsZTEpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmlmZmVyLmhhc19oZWFkZXIoc2VsZi5oZWFkZXIrc2VsZi5zYW1wbGUxKSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3NuaWZmKHNlbGYpOgorICAgICAgICBzbmlmZmVyID0gY3N2LlNuaWZmZXIoKQorICAgICAgICBkaWFsZWN0ID0gc25pZmZlci5zbmlmZihzZWxmLnNhbXBsZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlhbGVjdC5kZWxpbWl0ZXIsICIsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWFsZWN0LnF1b3RlY2hhciwgJyInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpYWxlY3Quc2tpcGluaXRpYWxzcGFjZSwgVHJ1ZSkKKworICAgICAgICBkaWFsZWN0ID0gc25pZmZlci5zbmlmZihzZWxmLnNhbXBsZTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlhbGVjdC5kZWxpbWl0ZXIsICI6IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWFsZWN0LnF1b3RlY2hhciwgIiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpYWxlY3Quc2tpcGluaXRpYWxzcGFjZSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9kZWxpbWl0ZXJzKHNlbGYpOgorICAgICAgICBzbmlmZmVyID0gY3N2LlNuaWZmZXIoKQorICAgICAgICBkaWFsZWN0ID0gc25pZmZlci5zbmlmZihzZWxmLnNhbXBsZTMpCisgICAgICAgICMgZ2l2ZW4gdGhhdCBhbGwgdGhyZWUgbGluZXMgaW4gc2FtcGxlMyBhcmUgZXF1YWwsCisgICAgICAgICMgSSB0aGluayB0aGF0IGFueSBjaGFyYWN0ZXIgY291bGQgaGF2ZSBiZWVuICdndWVzc2VkJyBhcyB0aGUKKyAgICAgICAgIyBkZWxpbWl0ZXIsIGRlcGVuZGluZyBvbiBkaWN0aW9uYXJ5IG9yZGVyCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGlhbGVjdC5kZWxpbWl0ZXIsIHNlbGYuc2FtcGxlMykKKyAgICAgICAgZGlhbGVjdCA9IHNuaWZmZXIuc25pZmYoc2VsZi5zYW1wbGUzLCBkZWxpbWl0ZXJzPSI/LCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlhbGVjdC5kZWxpbWl0ZXIsICI/IikKKyAgICAgICAgZGlhbGVjdCA9IHNuaWZmZXIuc25pZmYoc2VsZi5zYW1wbGUzLCBkZWxpbWl0ZXJzPSIvLCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlhbGVjdC5kZWxpbWl0ZXIsICIvIikKKyAgICAgICAgZGlhbGVjdCA9IHNuaWZmZXIuc25pZmYoc2VsZi5zYW1wbGU0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpYWxlY3QuZGVsaW1pdGVyLCAiOyIpCisgICAgICAgIGRpYWxlY3QgPSBzbmlmZmVyLnNuaWZmKHNlbGYuc2FtcGxlNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWFsZWN0LmRlbGltaXRlciwgIlx0IikKKyAgICAgICAgZGlhbGVjdCA9IHNuaWZmZXIuc25pZmYoc2VsZi5zYW1wbGU2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpYWxlY3QuZGVsaW1pdGVyLCAifCIpCisgICAgICAgIGRpYWxlY3QgPSBzbmlmZmVyLnNuaWZmKHNlbGYuc2FtcGxlNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWFsZWN0LmRlbGltaXRlciwgInwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpYWxlY3QucXVvdGVjaGFyLCAiJyIpCisKKyAgICBkZWYgdGVzdF9kb3VibGVxdW90ZShzZWxmKToKKyAgICAgICAgc25pZmZlciA9IGNzdi5TbmlmZmVyKCkKKyAgICAgICAgZGlhbGVjdCA9IHNuaWZmZXIuc25pZmYoc2VsZi5oZWFkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGlhbGVjdC5kb3VibGVxdW90ZSkKKyAgICAgICAgZGlhbGVjdCA9IHNuaWZmZXIuc25pZmYoc2VsZi5zYW1wbGUyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlhbGVjdC5kb3VibGVxdW90ZSkKKworaWYgbm90IGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOiBwcmludCAiKioqIHNraXBwaW5nIGxlYWthZ2UgdGVzdHMgKioqIgorZWxzZToKKyAgICBjbGFzcyBOVUw6CisgICAgICAgIGRlZiB3cml0ZShzLCAqYXJncyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdyaXRlbGluZXMgPSB3cml0ZQorCisgICAgY2xhc3MgVGVzdExlYWtzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3JlYWQoc2VsZik6CisgICAgICAgICAgICBkZWx0YSA9IDAKKyAgICAgICAgICAgIGxhc3RyYyA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgyMCk6CisgICAgICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnYy5nYXJiYWdlLCBbXSkKKyAgICAgICAgICAgICAgICByYyA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgICAgICAgICBjc3YucmVhZGVyKFsiYSxiLGNcclxuIl0pCisgICAgICAgICAgICAgICAgY3N2LnJlYWRlcihbImEsYixjXHJcbiJdKQorICAgICAgICAgICAgICAgIGNzdi5yZWFkZXIoWyJhLGIsY1xyXG4iXSkKKyAgICAgICAgICAgICAgICBkZWx0YSA9IHJjLWxhc3RyYworICAgICAgICAgICAgICAgIGxhc3RyYyA9IHJjCisgICAgICAgICAgICAjIGlmIGNzdi5yZWFkZXIoKSBsZWFrcywgbGFzdCBkZWx0YSBzaG91bGQgYmUgMyBvciBtb3JlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlbHRhIDwgMywgVHJ1ZSkKKworICAgICAgICBkZWYgdGVzdF9jcmVhdGVfd3JpdGUoc2VsZik6CisgICAgICAgICAgICBkZWx0YSA9IDAKKyAgICAgICAgICAgIGxhc3RyYyA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgICAgIHMgPSBOVUwoKQorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDIwKToKKyAgICAgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmdhcmJhZ2UsIFtdKQorICAgICAgICAgICAgICAgIHJjID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICAgICAgICAgIGNzdi53cml0ZXIocykKKyAgICAgICAgICAgICAgICBjc3Yud3JpdGVyKHMpCisgICAgICAgICAgICAgICAgY3N2LndyaXRlcihzKQorICAgICAgICAgICAgICAgIGRlbHRhID0gcmMtbGFzdHJjCisgICAgICAgICAgICAgICAgbGFzdHJjID0gcmMKKyAgICAgICAgICAgICMgaWYgY3N2LndyaXRlcigpIGxlYWtzLCBsYXN0IGRlbHRhIHNob3VsZCBiZSAzIG9yIG1vcmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVsdGEgPCAzLCBUcnVlKQorCisgICAgICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgICAgICBkZWx0YSA9IDAKKyAgICAgICAgICAgIHJvd3MgPSBbImEsYixjXHJcbiJdKjUKKyAgICAgICAgICAgIGxhc3RyYyA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgyMCk6CisgICAgICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnYy5nYXJiYWdlLCBbXSkKKyAgICAgICAgICAgICAgICByYyA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgICAgICAgICByZHIgPSBjc3YucmVhZGVyKHJvd3MpCisgICAgICAgICAgICAgICAgZm9yIHJvdyBpbiByZHI6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBkZWx0YSA9IHJjLWxhc3RyYworICAgICAgICAgICAgICAgIGxhc3RyYyA9IHJjCisgICAgICAgICAgICAjIGlmIHJlYWRlciBsZWFrcyBkdXJpbmcgcmVhZCwgZGVsdGEgc2hvdWxkIGJlIDUgb3IgbW9yZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWx0YSA8IDUsIFRydWUpCisKKyAgICAgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgICAgICBkZWx0YSA9IDAKKyAgICAgICAgICAgIHJvd3MgPSBbWzEsMiwzXV0qNQorICAgICAgICAgICAgcyA9IE5VTCgpCisgICAgICAgICAgICBsYXN0cmMgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMjApOgorICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuZ2FyYmFnZSwgW10pCisgICAgICAgICAgICAgICAgcmMgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihzKQorICAgICAgICAgICAgICAgIGZvciByb3cgaW4gcm93czoKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KHJvdykKKyAgICAgICAgICAgICAgICBkZWx0YSA9IHJjLWxhc3RyYworICAgICAgICAgICAgICAgIGxhc3RyYyA9IHJjCisgICAgICAgICAgICAjIGlmIHdyaXRlciBsZWFrcyBkdXJpbmcgd3JpdGUsIGxhc3QgZGVsdGEgc2hvdWxkIGJlIDUgb3IgbW9yZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWx0YSA8IDUsIFRydWUpCisKKyMgY29tbWVudGVkIG91dCBmb3Igbm93IC0gY3N2IG1vZHVsZSBkb2Vzbid0IHlldCBzdXBwb3J0IFVuaWNvZGUKKyMjIGNsYXNzIFRlc3RVbmljb2RlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyMjICAgICBkZWYgdGVzdF91bmljb2RlX3JlYWQoc2VsZik6CisjIyAgICAgICAgIGltcG9ydCBjb2RlY3MKKyMjICAgICAgICAgZiA9IGNvZGVjcy5FbmNvZGVkRmlsZShTdHJpbmdJTygiTWFydGluIHZvbiBM9ndpcywiCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hcmMgQW5kcukgTGVtYnVyZywiCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkd1aWRvIHZhbiBSb3NzdW0sIgorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGcmFu529pcyBQaW5hcmRcclxuIiksCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9lbmNvZGluZz0naXNvLTg4NTktMScpCisjIyAgICAgICAgIHJlYWRlciA9IGNzdi5yZWFkZXIoZikKKyMjICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJlYWRlciksIFtbdSJNYXJ0aW4gdm9uIEz2d2lzIiwKKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSJNYXJjIEFuZHLpIExlbWJ1cmciLAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Ikd1aWRvIHZhbiBSb3NzdW0iLAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1IkZyYW7nb2lzIFBpbmFyZG4iXV0pCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBtb2QgPSBzeXMubW9kdWxlc1tfX25hbWVfX10KKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICAqW2dldGF0dHIobW9kLCBuYW1lKSBmb3IgbmFtZSBpbiBkaXIobW9kKSBpZiBuYW1lLnN0YXJ0c3dpdGgoJ1Rlc3QnKV0KKyAgICApCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2N0eXBlcy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2N0eXBlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2YyODc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfY3R5cGVzLnB5CkBAIC0wLDAgKzEsMTUgQEAKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKKyNTa2lwIHRlc3RzIGlmIF9jdHlwZXMgbW9kdWxlIGRvZXMgbm90IGV4aXN0CitpbXBvcnRfbW9kdWxlKCdfY3R5cGVzJykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgaW1wb3J0IGN0eXBlcy50ZXN0CisgICAgc2tpcHBlZCwgdGVzdGNhc2VzID0gY3R5cGVzLnRlc3QuZ2V0X3Rlc3RzKGN0eXBlcy50ZXN0LCAidGVzdF8qLnB5IiwgdmVyYm9zaXR5PTApCisgICAgc3VpdGVzID0gW3VuaXR0ZXN0Lm1ha2VTdWl0ZSh0KSBmb3IgdCBpbiB0ZXN0Y2FzZXNdCisgICAgcnVuX3VuaXR0ZXN0KHVuaXR0ZXN0LlRlc3RTdWl0ZShzdWl0ZXMpKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jdXJzZXMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9jdXJzZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzZWNjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2N1cnNlcy5weQpAQCAtMCwwICsxLDI5NSBAQAorIworIyBUZXN0IHNjcmlwdCBmb3IgdGhlIGN1cnNlcyBtb2R1bGUKKyMKKyMgVGhpcyBzY3JpcHQgZG9lc24ndCBhY3R1YWxseSBkaXNwbGF5IGFueXRoaW5nIHZlcnkgY29oZXJlbnQuIGJ1dCBpdAorIyBkb2VzIGNhbGwgZXZlcnkgbWV0aG9kIGFuZCBmdW5jdGlvbi4KKyMKKyMgRnVuY3Rpb25zIG5vdCB0ZXN0ZWQ6IHtkZWYscmVzZXR9X3tzaGVsbCxwcm9nfV9tb2RlLCBnZXRjaCgpLCBnZXRzdHIoKSwKKyMgaW5pdF9jb2xvcigpCisjIE9ubHkgY2FsbGVkLCBub3QgdGVzdGVkOiBnZXRtb3VzZSgpLCB1bmdldG1vdXNlKCkKKyMKKworaW1wb3J0IHN5cywgdGVtcGZpbGUsIG9zCisKKyMgT3B0aW9uYWxseSB0ZXN0IGN1cnNlcyBtb2R1bGUuICBUaGlzIGN1cnJlbnRseSByZXF1aXJlcyB0aGF0IHRoZQorIyAnY3Vyc2VzJyByZXNvdXJjZSBiZSBnaXZlbiBvbiB0aGUgcmVncnRlc3QgY29tbWFuZCBsaW5lIHVzaW5nIHRoZSAtdQorIyBvcHRpb24uICBJZiBub3QgYXZhaWxhYmxlLCBub3RoaW5nIGFmdGVyIHRoaXMgbGluZSB3aWxsIGJlIGV4ZWN1dGVkLgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBpbXBvcnRfbW9kdWxlCityZXF1aXJlcygnY3Vyc2VzJykKK2N1cnNlcyA9IGltcG9ydF9tb2R1bGUoJ2N1cnNlcycpCitjdXJzZXMucGFuZWwgPSBpbXBvcnRfbW9kdWxlKCdjdXJzZXMucGFuZWwnKQorCisKKyMgWFhYOiBpZiBuZXd0ZXJtIHdhcyBzdXBwb3J0ZWQgd2UgY291bGQgdXNlIGl0IGluc3RlYWQgb2YgaW5pdHNjciBhbmQgbm90IGV4aXQKK3Rlcm0gPSBvcy5lbnZpcm9uLmdldCgnVEVSTScpCitpZiBub3QgdGVybSBvciB0ZXJtID09ICd1bmtub3duJzoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgIiRURVJNPSVyLCBjYWxsaW5nIGluaXRzY3IoKSBtYXkgY2F1c2UgZXhpdCIgJSB0ZXJtCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAiY3lnd2luIjoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiY3lnd2luJ3MgY3Vyc2VzIG1vc3RseSBqdXN0IGhhbmdzIikKKworZGVmIHdpbmRvd19mdW5jcyhzdGRzY3IpOgorICAgICJUZXN0IHRoZSBtZXRob2RzIG9mIHdpbmRvd3MiCisgICAgd2luID0gY3Vyc2VzLm5ld3dpbigxMCwxMCkKKyAgICB3aW4gPSBjdXJzZXMubmV3d2luKDUsNSwgNSw1KQorICAgIHdpbjIgPSBjdXJzZXMubmV3d2luKDE1LDE1LCA1LDUpCisKKyAgICBmb3IgbWV0aCBpbiBbc3Rkc2NyLmFkZGNoLCBzdGRzY3IuYWRkc3RyXToKKyAgICAgICAgZm9yIGFyZ3MgaW4gWygnYScpLCAoJ2EnLCBjdXJzZXMuQV9CT0xEKSwKKyAgICAgICAgICAgICAgICAgICAgICg0LDQsICdhJyksICg1LDUsICdhJywgY3Vyc2VzLkFfQk9MRCldOgorICAgICAgICAgICAgbWV0aCgqYXJncykKKworICAgIGZvciBtZXRoIGluIFtzdGRzY3IuYm94LCBzdGRzY3IuY2xlYXIsIHN0ZHNjci5jbHJ0b2JvdCwKKyAgICAgICAgICAgICAgICAgc3Rkc2NyLmNscnRvZW9sLCBzdGRzY3IuY3Vyc3luY3VwLCBzdGRzY3IuZGVsY2gsCisgICAgICAgICAgICAgICAgIHN0ZHNjci5kZWxldGVsbiwgc3Rkc2NyLmVyYXNlLCBzdGRzY3IuZ2V0YmVneXgsCisgICAgICAgICAgICAgICAgIHN0ZHNjci5nZXRia2dkLCBzdGRzY3IuZ2V0a2V5LCBzdGRzY3IuZ2V0bWF4eXgsCisgICAgICAgICAgICAgICAgIHN0ZHNjci5nZXRwYXJ5eCwgc3Rkc2NyLmdldHl4LCBzdGRzY3IuaW5jaCwKKyAgICAgICAgICAgICAgICAgc3Rkc2NyLmluc2VydGxuLCBzdGRzY3IuaW5zdHIsIHN0ZHNjci5pc193aW50b3VjaGVkLAorICAgICAgICAgICAgICAgICB3aW4ubm91dHJlZnJlc2gsIHN0ZHNjci5yZWRyYXd3aW4sIHN0ZHNjci5yZWZyZXNoLAorICAgICAgICAgICAgICAgICBzdGRzY3Iuc3RhbmRvdXQsIHN0ZHNjci5zdGFuZGVuZCwgc3Rkc2NyLnN5bmNkb3duLAorICAgICAgICAgICAgICAgICBzdGRzY3Iuc3luY3VwLCBzdGRzY3IudG91Y2h3aW4sIHN0ZHNjci51bnRvdWNod2luXToKKyAgICAgICAgbWV0aCgpCisKKyAgICBzdGRzY3IuYWRkbnN0cignMTIzNCcsIDMpCisgICAgc3Rkc2NyLmFkZG5zdHIoJzEyMzQnLCAzLCBjdXJzZXMuQV9CT0xEKQorICAgIHN0ZHNjci5hZGRuc3RyKDQsNCwgJzEyMzQnLCAzKQorICAgIHN0ZHNjci5hZGRuc3RyKDUsNSwgJzEyMzQnLCAzLCBjdXJzZXMuQV9CT0xEKQorCisgICAgc3Rkc2NyLmF0dHJvbihjdXJzZXMuQV9CT0xEKQorICAgIHN0ZHNjci5hdHRyb2ZmKGN1cnNlcy5BX0JPTEQpCisgICAgc3Rkc2NyLmF0dHJzZXQoY3Vyc2VzLkFfQk9MRCkKKyAgICBzdGRzY3IuYmtnZCgnICcpCisgICAgc3Rkc2NyLmJrZ2QoJyAnLCBjdXJzZXMuQV9SRVZFUlNFKQorICAgIHN0ZHNjci5ia2dkc2V0KCcgJykKKyAgICBzdGRzY3IuYmtnZHNldCgnICcsIGN1cnNlcy5BX1JFVkVSU0UpCisKKyAgICB3aW4uYm9yZGVyKDY1LCA2NiwgNjcsIDY4LAorICAgICAgICAgICAgICAgNjksIDcwLCA3MSwgNzIpCisgICAgd2luLmJvcmRlcignfCcsICchJywgJy0nLCAnXycsCisgICAgICAgICAgICAgICAnKycsICdcXCcsICcjJywgJy8nKQorICAgIHRyeToKKyAgICAgICAgd2luLmJvcmRlcig2NSwgNjYsIDY3LCA2OCwKKyAgICAgICAgICAgICAgICAgICA2OSwgW10sIDcxLCA3MikKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiRXhwZWN0ZWQgd2luLmJvcmRlcigpIHRvIHJhaXNlIFR5cGVFcnJvciIKKworICAgIHN0ZHNjci5jbGVhcm9rKDEpCisKKyAgICB3aW40ID0gc3Rkc2NyLmRlcndpbigyLDIpCisgICAgd2luNCA9IHN0ZHNjci5kZXJ3aW4oMSwxLCA1LDUpCisgICAgd2luNC5tdmRlcndpbig5LDkpCisKKyAgICBzdGRzY3IuZWNob2NoYXIoJ2EnKQorICAgIHN0ZHNjci5lY2hvY2hhcignYScsIGN1cnNlcy5BX0JPTEQpCisgICAgc3Rkc2NyLmhsaW5lKCctJywgNSkKKyAgICBzdGRzY3IuaGxpbmUoJy0nLCA1LCBjdXJzZXMuQV9CT0xEKQorICAgIHN0ZHNjci5obGluZSgxLDEsJy0nLCA1KQorICAgIHN0ZHNjci5obGluZSgxLDEsJy0nLCA1LCBjdXJzZXMuQV9CT0xEKQorCisgICAgc3Rkc2NyLmlkY29rKDEpCisgICAgc3Rkc2NyLmlkbG9rKDEpCisgICAgc3Rkc2NyLmltbWVkb2soMSkKKyAgICBzdGRzY3IuaW5zY2goJ2MnKQorICAgIHN0ZHNjci5pbnNkZWxsbigxKQorICAgIHN0ZHNjci5pbnNuc3RyKCdhYmMnLCAzKQorICAgIHN0ZHNjci5pbnNuc3RyKCdhYmMnLCAzLCBjdXJzZXMuQV9CT0xEKQorICAgIHN0ZHNjci5pbnNuc3RyKDUsIDUsICdhYmMnLCAzKQorICAgIHN0ZHNjci5pbnNuc3RyKDUsIDUsICdhYmMnLCAzLCBjdXJzZXMuQV9CT0xEKQorCisgICAgc3Rkc2NyLmluc3N0cignZGVmJykKKyAgICBzdGRzY3IuaW5zc3RyKCdkZWYnLCBjdXJzZXMuQV9CT0xEKQorICAgIHN0ZHNjci5pbnNzdHIoNSwgNSwgJ2RlZicpCisgICAgc3Rkc2NyLmluc3N0cig1LCA1LCAnZGVmJywgY3Vyc2VzLkFfQk9MRCkKKyAgICBzdGRzY3IuaXNfbGluZXRvdWNoZWQoMCkKKyAgICBzdGRzY3Iua2V5cGFkKDEpCisgICAgc3Rkc2NyLmxlYXZlb2soMSkKKyAgICBzdGRzY3IubW92ZSgzLDMpCisgICAgd2luLm12d2luKDIsMikKKyAgICBzdGRzY3Iubm9kZWxheSgxKQorICAgIHN0ZHNjci5ub3RpbWVvdXQoMSkKKyAgICB3aW4yLm92ZXJsYXkod2luKQorICAgIHdpbjIub3ZlcndyaXRlKHdpbikKKyAgICB3aW4yLm92ZXJsYXkod2luLCAxLCAyLCAzLCAzLCAyLCAxKQorICAgIHdpbjIub3ZlcndyaXRlKHdpbiwgMSwgMiwgMywgMywgMiwgMSkKKyAgICBzdGRzY3IucmVkcmF3bG4oMSwyKQorCisgICAgc3Rkc2NyLnNjcm9sbG9rKDEpCisgICAgc3Rkc2NyLnNjcm9sbCgpCisgICAgc3Rkc2NyLnNjcm9sbCgyKQorICAgIHN0ZHNjci5zY3JvbGwoLTMpCisKKyAgICBzdGRzY3IubW92ZSgxMiwgMikKKyAgICBzdGRzY3Iuc2V0c2NycmVnKDEwLDE1KQorICAgIHdpbjMgPSBzdGRzY3Iuc3Vid2luKDEwLDEwKQorICAgIHdpbjMgPSBzdGRzY3Iuc3Vid2luKDEwLDEwLCA1LDUpCisgICAgc3Rkc2NyLnN5bmNvaygxKQorICAgIHN0ZHNjci50aW1lb3V0KDUpCisgICAgc3Rkc2NyLnRvdWNobGluZSg1LDUpCisgICAgc3Rkc2NyLnRvdWNobGluZSg1LDUsMCkKKyAgICBzdGRzY3IudmxpbmUoJ2EnLCAzKQorICAgIHN0ZHNjci52bGluZSgnYScsIDMsIGN1cnNlcy5BX1NUQU5ET1VUKQorICAgIHN0ZHNjci5jaGdhdCg1LCAyLCAzLCBjdXJzZXMuQV9CTElOSykKKyAgICBzdGRzY3IuY2hnYXQoMywgY3Vyc2VzLkFfQk9MRCkKKyAgICBzdGRzY3IuY2hnYXQoNSwgOCwgY3Vyc2VzLkFfVU5ERVJMSU5FKQorICAgIHN0ZHNjci5jaGdhdChjdXJzZXMuQV9CTElOSykKKyAgICBzdGRzY3IucmVmcmVzaCgpCisKKyAgICBzdGRzY3IudmxpbmUoMSwxLCAnYScsIDMpCisgICAgc3Rkc2NyLnZsaW5lKDEsMSwgJ2EnLCAzLCBjdXJzZXMuQV9TVEFORE9VVCkKKworICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAncmVzaXplJyk6CisgICAgICAgIHN0ZHNjci5yZXNpemUoKQorICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAnZW5jbG9zZScpOgorICAgICAgICBzdGRzY3IuZW5jbG9zZSgpCisKKworZGVmIG1vZHVsZV9mdW5jcyhzdGRzY3IpOgorICAgICJUZXN0IG1vZHVsZS1sZXZlbCBmdW5jdGlvbnMiCisKKyAgICBmb3IgZnVuYyBpbiBbY3Vyc2VzLmJhdWRyYXRlLCBjdXJzZXMuYmVlcCwgY3Vyc2VzLmNhbl9jaGFuZ2VfY29sb3IsCisgICAgICAgICAgICAgICAgIGN1cnNlcy5jYnJlYWssIGN1cnNlcy5kZWZfcHJvZ19tb2RlLCBjdXJzZXMuZG91cGRhdGUsCisgICAgICAgICAgICAgICAgIGN1cnNlcy5maWx0ZXIsIGN1cnNlcy5mbGFzaCwgY3Vyc2VzLmZsdXNoaW5wLAorICAgICAgICAgICAgICAgICBjdXJzZXMuaGFzX2NvbG9ycywgY3Vyc2VzLmhhc19pYywgY3Vyc2VzLmhhc19pbCwKKyAgICAgICAgICAgICAgICAgY3Vyc2VzLmlzZW5kd2luLCBjdXJzZXMua2lsbGNoYXIsIGN1cnNlcy5sb25nbmFtZSwKKyAgICAgICAgICAgICAgICAgY3Vyc2VzLm5vY2JyZWFrLCBjdXJzZXMubm9lY2hvLCBjdXJzZXMubm9ubCwKKyAgICAgICAgICAgICAgICAgY3Vyc2VzLm5vcWlmbHVzaCwgY3Vyc2VzLm5vcmF3LAorICAgICAgICAgICAgICAgICBjdXJzZXMucmVzZXRfcHJvZ19tb2RlLCBjdXJzZXMudGVybWF0dHJzLAorICAgICAgICAgICAgICAgICBjdXJzZXMudGVybW5hbWUsIGN1cnNlcy5lcmFzZWNoYXIsIGN1cnNlcy5nZXRzeXhdOgorICAgICAgICBmdW5jKCkKKworICAgICMgRnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgbmVlZCBhcmd1bWVudHMKKyAgICBpZiBjdXJzZXMudGlnZXRzdHIoImNub3JtIik6CisgICAgICAgIGN1cnNlcy5jdXJzX3NldCgxKQorICAgIGN1cnNlcy5kZWxheV9vdXRwdXQoMSkKKyAgICBjdXJzZXMuZWNobygpIDsgY3Vyc2VzLmVjaG8oMSkKKworICAgIGZ4ID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgIyBjZiB0ZW1wZmlsZS5weSBUZW1wb3JhcnlGaWxlIHZzIE5hbWVkVGVtcG9yYXJ5RmlsZQorICAgIGlmIG9zLm5hbWUgIT0gJ3Bvc2l4JyBvciBvcy5zeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6CisgICAgICAgIGYgPSBmeC5maWxlCisgICAgZWxzZToKKyAgICAgICAgZiA9IGZ4CisgICAgc3Rkc2NyLnB1dHdpbihmKQorICAgIGYuc2VlaygwKQorICAgIGN1cnNlcy5nZXR3aW4oZikKKyAgICBmeC5jbG9zZSgpCisKKyAgICBjdXJzZXMuaGFsZmRlbGF5KDEpCisgICAgY3Vyc2VzLmludHJmbHVzaCgxKQorICAgIGN1cnNlcy5tZXRhKDEpCisgICAgY3Vyc2VzLm5hcG1zKDEwMCkKKyAgICBjdXJzZXMubmV3cGFkKDUwLDUwKQorICAgIHdpbiA9IGN1cnNlcy5uZXd3aW4oNSw1KQorICAgIHdpbiA9IGN1cnNlcy5uZXd3aW4oNSw1LCAxLDEpCisgICAgY3Vyc2VzLm5sKCkgOyBjdXJzZXMubmwoMSkKKyAgICBjdXJzZXMucHV0cCgnYWJjJykKKyAgICBjdXJzZXMucWlmbHVzaCgpCisgICAgY3Vyc2VzLnJhdygpIDsgY3Vyc2VzLnJhdygxKQorICAgIGN1cnNlcy5zZXRzeXgoNSw1KQorICAgIGN1cnNlcy50aWdldGZsYWcoJ2hjJykKKyAgICBjdXJzZXMudGlnZXRudW0oJ2NvJykKKyAgICBjdXJzZXMudGlnZXRzdHIoJ2NyJykKKyAgICBjdXJzZXMudHBhcm0oJ2NyJykKKyAgICBjdXJzZXMudHlwZWFoZWFkKHN5cy5fX3N0ZGluX18uZmlsZW5vKCkpCisgICAgY3Vyc2VzLnVuY3RybCgnYScpCisgICAgY3Vyc2VzLnVuZ2V0Y2goJ2EnKQorICAgIGN1cnNlcy51c2VfZW52KDEpCisKKyAgICAjIEZ1bmN0aW9ucyBvbmx5IGF2YWlsYWJsZSBvbiBhIGZldyBwbGF0Zm9ybXMKKyAgICBpZiBjdXJzZXMuaGFzX2NvbG9ycygpOgorICAgICAgICBjdXJzZXMuc3RhcnRfY29sb3IoKQorICAgICAgICBjdXJzZXMuaW5pdF9wYWlyKDIsIDEsMSkKKyAgICAgICAgY3Vyc2VzLmNvbG9yX2NvbnRlbnQoMSkKKyAgICAgICAgY3Vyc2VzLmNvbG9yX3BhaXIoMikKKyAgICAgICAgY3Vyc2VzLnBhaXJfY29udGVudChjdXJzZXMuQ09MT1JfUEFJUlMgLSAxKQorICAgICAgICBjdXJzZXMucGFpcl9udW1iZXIoMCkKKworICAgICAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ3VzZV9kZWZhdWx0X2NvbG9ycycpOgorICAgICAgICAgICAgY3Vyc2VzLnVzZV9kZWZhdWx0X2NvbG9ycygpCisKKyAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ2tleW5hbWUnKToKKyAgICAgICAgY3Vyc2VzLmtleW5hbWUoMTMpCisKKyAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ2hhc19rZXknKToKKyAgICAgICAgY3Vyc2VzLmhhc19rZXkoMTMpCisKKyAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ2dldG1vdXNlJyk6CisgICAgICAgIChhdmFpbG1hc2ssIG9sZG1hc2spID0gY3Vyc2VzLm1vdXNlbWFzayhjdXJzZXMuQlVUVE9OMV9QUkVTU0VEKQorICAgICAgICAjIGF2YWlsbWFzayBpbmRpY2F0ZXMgdGhhdCBtb3VzZSBzdHVmZiBub3QgYXZhaWxhYmxlLgorICAgICAgICBpZiBhdmFpbG1hc2sgIT0gMDoKKyAgICAgICAgICAgIGN1cnNlcy5tb3VzZWludGVydmFsKDEwKQorICAgICAgICAgICAgIyBqdXN0IHZlcmlmeSB0aGVzZSBkb24ndCBjYXVzZSBlcnJvcnMKKyAgICAgICAgICAgIGN1cnNlcy51bmdldG1vdXNlKDAsIDAsIDAsIDAsIGN1cnNlcy5CVVRUT04xX1BSRVNTRUQpCisgICAgICAgICAgICBtID0gY3Vyc2VzLmdldG1vdXNlKCkKKworICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAnaXNfdGVybV9yZXNpemVkJyk6CisgICAgICAgIGN1cnNlcy5pc190ZXJtX3Jlc2l6ZWQoKnN0ZHNjci5nZXRtYXh5eCgpKQorICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAncmVzaXpldGVybScpOgorICAgICAgICBjdXJzZXMucmVzaXpldGVybSgqc3Rkc2NyLmdldG1heHl4KCkpCisgICAgaWYgaGFzYXR0cihjdXJzZXMsICdyZXNpemVfdGVybScpOgorICAgICAgICBjdXJzZXMucmVzaXplX3Rlcm0oKnN0ZHNjci5nZXRtYXh5eCgpKQorCitkZWYgdW5pdF90ZXN0cygpOgorICAgIGZyb20gY3Vyc2VzIGltcG9ydCBhc2NpaQorICAgIGZvciBjaCwgZXhwZWN0ZWQgaW4gWygnYScsICdhJyksICgnQScsICdBJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCc7JywgJzsnKSwgKCcgJywgJyAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ1x4N2YnLCAnXj8nKSwgKCdcbicsICdeSicpLCAoJ1wwJywgJ15AJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIyBNZXRhLWJpdCBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdceDhhJywgJyFeSicpLCAoJ1x4YzEnLCAnIUEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBdOgorICAgICAgICBpZiBhc2NpaS51bmN0cmwoY2gpICE9IGV4cGVjdGVkOgorICAgICAgICAgICAgcHJpbnQgJ2N1cnNlcy51bmN0cmwgZmFpbHMgb24gY2hhcmFjdGVyJywgcmVwcihjaCkKKworCitkZWYgdGVzdF91c2VycHRyX3dpdGhvdXRfc2V0KHN0ZHNjcik6CisgICAgdyA9IGN1cnNlcy5uZXd3aW4oMTAsIDEwKQorICAgIHAgPSBjdXJzZXMucGFuZWwubmV3X3BhbmVsKHcpCisgICAgIyB0cnkgdG8gYWNjZXNzIHVzZXJwdHIoKSBiZWZvcmUgY2FsbGluZyBzZXRfdXNlcnB0cigpIC0tIHNlZ2ZhdWx0cworICAgIHRyeToKKyAgICAgICAgcC51c2VycHRyKCkKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAndXNlcnB0ciBzaG91bGQgZmFpbCBzaW5jZSBub3Qgc2V0JworICAgIGV4Y2VwdCBjdXJzZXMucGFuZWwuZXJyb3I6CisgICAgICAgIHBhc3MKKworZGVmIHRlc3RfcmVzaXplX3Rlcm0oc3Rkc2NyKToKKyAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ3Jlc2l6ZXRlcm0nKToKKyAgICAgICAgbGluZXMsIGNvbHMgPSBjdXJzZXMuTElORVMsIGN1cnNlcy5DT0xTCisgICAgICAgIGN1cnNlcy5yZXNpemV0ZXJtKGxpbmVzIC0gMSwgY29scyArIDEpCisKKyAgICAgICAgaWYgY3Vyc2VzLkxJTkVTICE9IGxpbmVzIC0gMSBvciBjdXJzZXMuQ09MUyAhPSBjb2xzICsgMToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIkV4cGVjdGVkIHJlc2l6ZXRlcm0gdG8gdXBkYXRlIExJTkVTIGFuZCBDT0xTIgorCitkZWYgdGVzdF9pc3N1ZTYyNDMoc3Rkc2NyKToKKyAgICBjdXJzZXMudW5nZXRjaCgxMDI1KQorICAgIHN0ZHNjci5nZXRrZXkoKQorCitkZWYgbWFpbihzdGRzY3IpOgorICAgIGN1cnNlcy5zYXZldHR5KCkKKyAgICB0cnk6CisgICAgICAgIG1vZHVsZV9mdW5jcyhzdGRzY3IpCisgICAgICAgIHdpbmRvd19mdW5jcyhzdGRzY3IpCisgICAgICAgIHRlc3RfdXNlcnB0cl93aXRob3V0X3NldChzdGRzY3IpCisgICAgICAgIHRlc3RfcmVzaXplX3Rlcm0oc3Rkc2NyKQorICAgICAgICB0ZXN0X2lzc3VlNjI0MyhzdGRzY3IpCisgICAgZmluYWxseToKKyAgICAgICAgY3Vyc2VzLnJlc2V0dHkoKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGN1cnNlcy53cmFwcGVyKG1haW4pCisgICAgdW5pdF90ZXN0cygpCitlbHNlOgorICAgIGlmIG5vdCBzeXMuX19zdGRvdXRfXy5pc2F0dHkoKToKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInN5cy5fX3N0ZG91dF9fIGlzIG5vdCBhIHR0eSIpCisgICAgIyB0ZXN0aW5nIHNldHVwdGVybSgpIGluc2lkZSBpbml0c2NyL2VuZHdpbgorICAgICMgY2F1c2VzIHRlcm1pbmFsIGJyZWFrYWdlCisgICAgY3Vyc2VzLnNldHVwdGVybShmZD1zeXMuX19zdGRvdXRfXy5maWxlbm8oKSkKKyAgICB0cnk6CisgICAgICAgIHN0ZHNjciA9IGN1cnNlcy5pbml0c2NyKCkKKyAgICAgICAgbWFpbihzdGRzY3IpCisgICAgZmluYWxseToKKyAgICAgICAgY3Vyc2VzLmVuZHdpbigpCisgICAgdW5pdF90ZXN0cygpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kYXRldGltZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RhdGV0aW1lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNDZkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kYXRldGltZS5weQpAQCAtMCwwICsxLDMzNjcgQEAKKyIiIlRlc3QgZGF0ZS90aW1lIHR5cGUuCisKK1NlZSBodHRwOi8vd3d3LnpvcGUub3JnL01lbWJlcnMvZmRyYWtlL0RhdGVUaW1lV2lraS9UZXN0Q2FzZXMKKyIiIgorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoraW1wb3J0IHN5cworaW1wb3J0IHBpY2tsZQoraW1wb3J0IGNQaWNrbGUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitmcm9tIGRhdGV0aW1lIGltcG9ydCBNSU5ZRUFSLCBNQVhZRUFSCitmcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lZGVsdGEKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IHR6aW5mbworZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZQorZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZSwgZGF0ZXRpbWUKKworcGlja2xlX2Nob2ljZXMgPSBbKHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8pCisgICAgICAgICAgICAgICAgICBmb3IgcGlja2xlciBpbiBwaWNrbGUsIGNQaWNrbGUKKyAgICAgICAgICAgICAgICAgIGZvciB1bnBpY2tsZXIgaW4gcGlja2xlLCBjUGlja2xlCisgICAgICAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoMyldCithc3NlcnQgbGVuKHBpY2tsZV9jaG9pY2VzKSA9PSAyKjIqMworCisjIEFuIGFyYml0cmFyeSBjb2xsZWN0aW9uIG9mIG9iamVjdHMgb2Ygbm9uLWRhdGV0aW1lIHR5cGVzLCBmb3IgdGVzdGluZworIyBtaXhlZC10eXBlIGNvbXBhcmlzb25zLgorT1RIRVJTVFVGRiA9ICgxMCwgMTBMLCAzNC41LCAiYWJjIiwge30sIFtdLCAoKSkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb2R1bGUgdGVzdHMKKworY2xhc3MgVGVzdE1vZHVsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb25zdGFudHMoc2VsZik6CisgICAgICAgIGltcG9ydCBkYXRldGltZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGV0aW1lLk1JTllFQVIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0ZXRpbWUuTUFYWUVBUiwgOTk5OSkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdHppbmZvIHRlc3RzCisKK2NsYXNzIEZpeGVkT2Zmc2V0KHR6aW5mbyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9mZnNldCwgbmFtZSwgZHN0b2Zmc2V0PTQyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvZmZzZXQsIGludCk6CisgICAgICAgICAgICBvZmZzZXQgPSB0aW1lZGVsdGEobWludXRlcz1vZmZzZXQpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZHN0b2Zmc2V0LCBpbnQpOgorICAgICAgICAgICAgZHN0b2Zmc2V0ID0gdGltZWRlbHRhKG1pbnV0ZXM9ZHN0b2Zmc2V0KQorICAgICAgICBzZWxmLl9fb2Zmc2V0ID0gb2Zmc2V0CisgICAgICAgIHNlbGYuX19uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9fZHN0b2Zmc2V0ID0gZHN0b2Zmc2V0CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX25hbWUubG93ZXIoKQorICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOgorICAgICAgICByZXR1cm4gc2VsZi5fX29mZnNldAorICAgIGRlZiB0em5hbWUoc2VsZiwgZHQpOgorICAgICAgICByZXR1cm4gc2VsZi5fX25hbWUKKyAgICBkZWYgZHN0KHNlbGYsIGR0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19kc3RvZmZzZXQKKworY2xhc3MgUGlja2xhYmxlRml4ZWRPZmZzZXQoRml4ZWRPZmZzZXQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvZmZzZXQ9Tm9uZSwgbmFtZT1Ob25lLCBkc3RvZmZzZXQ9Tm9uZSk6CisgICAgICAgIEZpeGVkT2Zmc2V0Ll9faW5pdF9fKHNlbGYsIG9mZnNldCwgbmFtZSwgZHN0b2Zmc2V0KQorCitjbGFzcyBUZXN0VFpJbmZvKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X25vbl9hYnN0cmFjdG5lc3Moc2VsZik6CisgICAgICAgICMgSW4gb3JkZXIgdG8gYWxsb3cgc3ViY2xhc3NlcyB0byBnZXQgcGlja2xlZCwgdGhlIEMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIyB3YXNuJ3QgYWJsZSB0byBnZXQgYXdheSB3aXRoIGhhdmluZyBfX2luaXRfXyByYWlzZQorICAgICAgICAjIE5vdEltcGxlbWVudGVkRXJyb3IuCisgICAgICAgIHVzZWxlc3MgPSB0emluZm8oKQorICAgICAgICBkdCA9IGRhdGV0aW1lLm1heAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB1c2VsZXNzLnR6bmFtZSwgZHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHVzZWxlc3MudXRjb2Zmc2V0LCBkdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdXNlbGVzcy5kc3QsIGR0KQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfbXVzdF9vdmVycmlkZShzZWxmKToKKyAgICAgICAgY2xhc3MgTm90RW5vdWdoKHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgb2Zmc2V0LCBuYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLl9fb2Zmc2V0ID0gb2Zmc2V0CisgICAgICAgICAgICAgICAgc2VsZi5fX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKE5vdEVub3VnaCwgdHppbmZvKSkKKyAgICAgICAgbmUgPSBOb3RFbm91Z2goMywgIk5vdEJ5QUxvbmdTaG90IikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG5lLCB0emluZm8pCisKKyAgICAgICAgZHQgPSBkYXRldGltZS5ub3coKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBuZS50em5hbWUsIGR0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBuZS51dGNvZmZzZXQsIGR0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBuZS5kc3QsIGR0KQorCisgICAgZGVmIHRlc3Rfbm9ybWFsKHNlbGYpOgorICAgICAgICBmbyA9IEZpeGVkT2Zmc2V0KDMsICJUaHJlZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmbywgdHppbmZvKQorICAgICAgICBmb3IgZHQgaW4gZGF0ZXRpbWUubm93KCksIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnV0Y29mZnNldChkdCksIHRpbWVkZWx0YShtaW51dGVzPTMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby50em5hbWUoZHQpLCAiVGhyZWUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby5kc3QoZHQpLCB0aW1lZGVsdGEobWludXRlcz00MikpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZ19iYXNlKHNlbGYpOgorICAgICAgICAjIFRoZXJlJ3Mgbm8gcG9pbnQgdG8gcGlja2xpbmcgdHppbmZvIG9iamVjdHMgb24gdGhlaXIgb3duICh0aGV5CisgICAgICAgICMgY2Fycnkgbm8gZGF0YSksIGJ1dCB0aGV5IG5lZWQgdG8gYmUgcGlja2xhYmxlIGFueXdheSBlbHNlCisgICAgICAgICMgY29uY3JldGUgc3ViY2xhc3NlcyBjYW4ndCBiZSBwaWNrbGVkLgorICAgICAgICBvcmlnID0gdHppbmZvLl9fbmV3X18odHppbmZvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShvcmlnKSBpcyB0emluZm8pCisgICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgorICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQorICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGRlcml2ZWQpIGlzIHR6aW5mbykKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBjYW4gcGlja2xlL3VucGlja2xlIGFuIGluc3RhbmNlIG9mIGEgc3ViY2xhc3MuCisgICAgICAgIG9mZnNldCA9IHRpbWVkZWx0YShtaW51dGVzPS0zMDApCisgICAgICAgIG9yaWcgPSBQaWNrbGFibGVGaXhlZE9mZnNldChvZmZzZXQsICdjb29raWUnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob3JpZywgdHppbmZvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShvcmlnKSBpcyBQaWNrbGFibGVGaXhlZE9mZnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLnV0Y29mZnNldChOb25lKSwgb2Zmc2V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcudHpuYW1lKE5vbmUpLCAnY29va2llJykKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCisgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRlcml2ZWQsIHR6aW5mbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGRlcml2ZWQpIGlzIFBpY2tsYWJsZUZpeGVkT2Zmc2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXJpdmVkLnV0Y29mZnNldChOb25lKSwgb2Zmc2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXJpdmVkLnR6bmFtZShOb25lKSwgJ2Nvb2tpZScpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJhc2UgY2xhc2UgZm9yIHRlc3RpbmcgYSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aW1lZGVsdGEsIHRpbWUsIGRhdGUgYW5kCisjIGRhdGV0aW1lIGNvbXBhcmlzb25zLgorCitjbGFzcyBIYXJtbGVzc01peGVkQ29tcGFyaXNvbjoKKyAgICAjIFRlc3QgdGhhdCBfX2VxX18gYW5kIF9fbmVfXyBkb24ndCBjb21wbGFpbiBmb3IgbWl4ZWQtdHlwZSBjb21wYXJpc29ucy4KKworICAgICMgU3ViY2xhc3NlcyBtdXN0IGRlZmluZSAndGhlY2xhc3MnLCBhbmQgdGhlY2xhc3MoMSwgMSwgMSkgbXVzdCBiZSBhCisgICAgIyBsZWdpdCBjb25zdHJ1Y3Rvci4KKworICAgIGRlZiB0ZXN0X2hhcm1sZXNzX21peGVkX2NvbXBhcmlzb24oc2VsZik6CisgICAgICAgIG1lID0gc2VsZi50aGVjbGFzcygxLCAxLCAxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWUgPT0gKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZSAhPSAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoKSA9PSBtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgpICE9IG1lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obWUsIFsxLCAyMEwsIFtdLCBtZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oW10sIFttZSwgMSwgMjBMLCBbXV0pCisKKyAgICBkZWYgdGVzdF9oYXJtZnVsX21peGVkX2NvbXBhcmlzb24oc2VsZik6CisgICAgICAgIG1lID0gc2VsZi50aGVjbGFzcygxLCAxLCAxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBtZSA8ICgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbWUgPD0gKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBtZSA+ICgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbWUgPj0gKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6ICgpIDwgbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiAoKSA8PSBtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6ICgpID4gbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiAoKSA+PSBtZSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCwgKCksIG1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCwgbWUsICgpKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyB0aW1lZGVsdGEgdGVzdHMKKworY2xhc3MgVGVzdFRpbWVEZWx0YShIYXJtbGVzc01peGVkQ29tcGFyaXNvbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgdGhlY2xhc3MgPSB0aW1lZGVsdGEKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgdGQgPSB0aW1lZGVsdGEKKworICAgICAgICAjIENoZWNrIGtleXdvcmQgYXJncyB0byBjb25zdHJ1Y3RvcgorICAgICAgICBlcSh0ZCgpLCB0ZCh3ZWVrcz0wLCBkYXlzPTAsIGhvdXJzPTAsIG1pbnV0ZXM9MCwgc2Vjb25kcz0wLAorICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHM9MCwgbWljcm9zZWNvbmRzPTApKQorICAgICAgICBlcSh0ZCgxKSwgdGQoZGF5cz0xKSkKKyAgICAgICAgZXEodGQoMCwgMSksIHRkKHNlY29uZHM9MSkpCisgICAgICAgIGVxKHRkKDAsIDAsIDEpLCB0ZChtaWNyb3NlY29uZHM9MSkpCisgICAgICAgIGVxKHRkKHdlZWtzPTEpLCB0ZChkYXlzPTcpKQorICAgICAgICBlcSh0ZChkYXlzPTEpLCB0ZChob3Vycz0yNCkpCisgICAgICAgIGVxKHRkKGhvdXJzPTEpLCB0ZChtaW51dGVzPTYwKSkKKyAgICAgICAgZXEodGQobWludXRlcz0xKSwgdGQoc2Vjb25kcz02MCkpCisgICAgICAgIGVxKHRkKHNlY29uZHM9MSksIHRkKG1pbGxpc2Vjb25kcz0xMDAwKSkKKyAgICAgICAgZXEodGQobWlsbGlzZWNvbmRzPTEpLCB0ZChtaWNyb3NlY29uZHM9MTAwMCkpCisKKyAgICAgICAgIyBDaGVjayBmbG9hdCBhcmdzIHRvIGNvbnN0cnVjdG9yCisgICAgICAgIGVxKHRkKHdlZWtzPTEuMC83KSwgdGQoZGF5cz0xKSkKKyAgICAgICAgZXEodGQoZGF5cz0xLjAvMjQpLCB0ZChob3Vycz0xKSkKKyAgICAgICAgZXEodGQoaG91cnM9MS4wLzYwKSwgdGQobWludXRlcz0xKSkKKyAgICAgICAgZXEodGQobWludXRlcz0xLjAvNjApLCB0ZChzZWNvbmRzPTEpKQorICAgICAgICBlcSh0ZChzZWNvbmRzPTAuMDAxKSwgdGQobWlsbGlzZWNvbmRzPTEpKQorICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9MC4wMDEpLCB0ZChtaWNyb3NlY29uZHM9MSkpCisKKyAgICBkZWYgdGVzdF9jb21wdXRhdGlvbnMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICB0ZCA9IHRpbWVkZWx0YQorCisgICAgICAgIGEgPSB0ZCg3KSAjIE9uZSB3ZWVrCisgICAgICAgIGIgPSB0ZCgwLCA2MCkgIyBPbmUgbWludXRlCisgICAgICAgIGMgPSB0ZCgwLCAwLCAxMDAwKSAjIE9uZSBtaWxsaXNlY29uZAorICAgICAgICBlcShhK2IrYywgdGQoNywgNjAsIDEwMDApKQorICAgICAgICBlcShhLWIsIHRkKDYsIDI0KjM2MDAgLSA2MCkpCisgICAgICAgIGVxKC1hLCB0ZCgtNykpCisgICAgICAgIGVxKCthLCB0ZCg3KSkKKyAgICAgICAgZXEoLWIsIHRkKC0xLCAyNCozNjAwIC0gNjApKQorICAgICAgICBlcSgtYywgdGQoLTEsIDI0KjM2MDAgLSAxLCA5OTkwMDApKQorICAgICAgICBlcShhYnMoYSksIGEpCisgICAgICAgIGVxKGFicygtYSksIGEpCisgICAgICAgIGVxKHRkKDYsIDI0KjM2MDApLCBhKQorICAgICAgICBlcSh0ZCgwLCAwLCA2MCoxMDAwMDAwKSwgYikKKyAgICAgICAgZXEoYSoxMCwgdGQoNzApKQorICAgICAgICBlcShhKjEwLCAxMCphKQorICAgICAgICBlcShhKjEwTCwgMTAqYSkKKyAgICAgICAgZXEoYioxMCwgdGQoMCwgNjAwKSkKKyAgICAgICAgZXEoMTAqYiwgdGQoMCwgNjAwKSkKKyAgICAgICAgZXEoYioxMEwsIHRkKDAsIDYwMCkpCisgICAgICAgIGVxKGMqMTAsIHRkKDAsIDAsIDEwMDAwKSkKKyAgICAgICAgZXEoMTAqYywgdGQoMCwgMCwgMTAwMDApKQorICAgICAgICBlcShjKjEwTCwgdGQoMCwgMCwgMTAwMDApKQorICAgICAgICBlcShhKi0xLCAtYSkKKyAgICAgICAgZXEoYiotMiwgLWItYikKKyAgICAgICAgZXEoYyotMiwgLWMrLWMpCisgICAgICAgIGVxKGIqKDYwKjI0KSwgKGIqNjApKjI0KQorICAgICAgICBlcShiKig2MCoyNCksICg2MCpiKSoyNCkKKyAgICAgICAgZXEoYyoxMDAwLCB0ZCgwLCAxKSkKKyAgICAgICAgZXEoMTAwMCpjLCB0ZCgwLCAxKSkKKyAgICAgICAgZXEoYS8vNywgdGQoMSkpCisgICAgICAgIGVxKGIvLzEwLCB0ZCgwLCA2KSkKKyAgICAgICAgZXEoYy8vMTAwMCwgdGQoMCwgMCwgMSkpCisgICAgICAgIGVxKGEvLzEwLCB0ZCgwLCA3KjI0KjM2MCkpCisgICAgICAgIGVxKGEvLzM2MDAwMDAsIHRkKDAsIDAsIDcqMjQqMTAwMCkpCisKKyAgICAgICAgIyBJc3N1ZSAjMTE1NzYKKyAgICAgICAgZXEodGQoOTk5OTk5OTk5LCA4NjM5OSwgOTk5OTk5KSAtIHRkKDk5OTk5OTk5OSwgODYzOTksIDk5OTk5OCksCisgICAgICAgICAgIHRkKDAsIDAsIDEpKQorICAgICAgICBlcSh0ZCg5OTk5OTk5OTksIDEsIDEpIC0gdGQoOTk5OTk5OTk5LCAxLCAwKSwKKyAgICAgICAgICAgdGQoMCwgMCwgMSkpCisKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfY29tcHV0YXRpb25zKHNlbGYpOgorICAgICAgICBhID0gdGltZWRlbHRhKDQyKQorCisgICAgICAgICMgQWRkL3N1YiBpbnRzLCBsb25ncywgZmxvYXRzIHNob3VsZCBiZSBpbGxlZ2FsCisgICAgICAgIGZvciBpIGluIDEsIDFMLCAxLjA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYStpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEtaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBpK2EpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogaS1hKQorCisgICAgICAgICMgTXVsL2RpdiBieSBmbG9hdCBpc24ndCBzdXBwb3J0ZWQuCisgICAgICAgIHggPSAyLjMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEqeCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHgqYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEveCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHgvYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgLy8geCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHggLy8gYSkKKworICAgICAgICAjIERpdmlzaW9uIG9mIGludCBieSB0aW1lZGVsdGEgZG9lc24ndCBtYWtlIHNlbnNlLgorICAgICAgICAjIERpdmlzaW9uIGJ5IHplcm8gZG9lc24ndCBtYWtlIHNlbnNlLgorICAgICAgICBmb3IgemVybyBpbiAwLCAwTDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB6ZXJvIC8vIGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbGFtYmRhOiBhIC8vIHplcm8pCisKKyAgICBkZWYgdGVzdF9iYXNpY19hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBkYXlzLCBzZWNvbmRzLCB1cyA9IDEsIDcsIDMxCisgICAgICAgIHRkID0gdGltZWRlbHRhKGRheXMsIHNlY29uZHMsIHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRheXMsIGRheXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2Vjb25kcywgc2Vjb25kcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5taWNyb3NlY29uZHMsIHVzKQorCisgICAgZGVmIHRlc3RfdG90YWxfc2Vjb25kcyhzZWxmKToKKyAgICAgICAgdGQgPSB0aW1lZGVsdGEoZGF5cz0zNjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQudG90YWxfc2Vjb25kcygpLCAzMTUzNjAwMC4wKQorICAgICAgICBmb3IgdG90YWxfc2Vjb25kcyBpbiBbMTIzNDU2Ljc4OTAxMiwgLTEyMzQ1Ni43ODkwMTIsIDAuMTIzNDU2LCAwLCAxZTZdOgorICAgICAgICAgICAgdGQgPSB0aW1lZGVsdGEoc2Vjb25kcz10b3RhbF9zZWNvbmRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC50b3RhbF9zZWNvbmRzKCksIHRvdGFsX3NlY29uZHMpCisgICAgICAgICMgSXNzdWU4NjQ0OiBUZXN0IHRoYXQgdGQudG90YWxfc2Vjb25kcygpIGhhcyB0aGUgc2FtZQorICAgICAgICAjIGFjY3VyYWN5IGFzIHRkIC8gdGltZWRlbHRhKHNlY29uZHM9MSkuCisgICAgICAgIGZvciBtcyBpbiBbLTEsIC0yLCAtMTIzXToKKyAgICAgICAgICAgIHRkID0gdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz1tcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQudG90YWxfc2Vjb25kcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKDI0KjM2MDAqdGQuZGF5cyArIHRkLnNlY29uZHMpKjEwKio2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHRkLm1pY3Jvc2Vjb25kcykvMTAqKjYpCisKKyAgICBkZWYgdGVzdF9jYXJyaWVzKHNlbGYpOgorICAgICAgICB0MSA9IHRpbWVkZWx0YShkYXlzPTEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgd2Vla3M9LTcsCisgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzPS0yNCooMTAwLTQ5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWludXRlcz0tMywKKyAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz0xMiwKKyAgICAgICAgICAgICAgICAgICAgICAgbWljcm9zZWNvbmRzPSgzKjYwIC0gMTIpICogMWU2ICsgMSkKKyAgICAgICAgdDIgPSB0aW1lZGVsdGEobWljcm9zZWNvbmRzPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorCisgICAgZGVmIHRlc3RfaGFzaF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgdDEgPSB0aW1lZGVsdGEoZGF5cz0xMDAsCisgICAgICAgICAgICAgICAgICAgICAgIHdlZWtzPS03LAorICAgICAgICAgICAgICAgICAgICAgICBob3Vycz0tMjQqKDEwMC00OSksCisgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZXM9LTMsCisgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9MTIsCisgICAgICAgICAgICAgICAgICAgICAgIG1pY3Jvc2Vjb25kcz0oMyo2MCAtIDEyKSAqIDEwMDAwMDApCisgICAgICAgIHQyID0gdGltZWRlbHRhKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHQxKSwgaGFzaCh0MikpCisKKyAgICAgICAgdDEgKz0gdGltZWRlbHRhKHdlZWtzPTcpCisgICAgICAgIHQyICs9IHRpbWVkZWx0YShkYXlzPTcqNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0MSksIGhhc2godDIpKQorCisgICAgICAgIGQgPSB7dDE6IDF9CisgICAgICAgIGRbdDJdID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkW3QxXSwgMikKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgorICAgICAgICBhcmdzID0gMTIsIDM0LCA1NgorICAgICAgICBvcmlnID0gdGltZWRlbHRhKCphcmdzKQorICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKKyAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKKyAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcsIGRlcml2ZWQpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgorICAgICAgICB0MSA9IHRpbWVkZWx0YSgyLCAzLCA0KQorICAgICAgICB0MiA9IHRpbWVkZWx0YSgyLCAzLCA0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID49IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxICE9IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxIDwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDEsIHQyKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDIsIHQxKSwgMCkKKworICAgICAgICBmb3IgYXJncyBpbiAoMywgMywgMyksICgyLCA0LCA0KSwgKDIsIDMsIDUpOgorICAgICAgICAgICAgdDIgPSB0aW1lZGVsdGEoKmFyZ3MpICAgIyB0aGlzIGlzIGxhcmdlciB0aGFuIHQxCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID49IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxICE9IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyICE9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA9PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPT0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDwgdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID49IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQxLCB0MiksIC0xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDIsIHQxKSwgMSkKKworICAgICAgICBmb3IgYmFkYXJnIGluIE9USEVSU1RVRkY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxID09IGJhZGFyZywgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxICE9IGJhZGFyZywgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFkYXJnID09IHQxLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFkYXJnICE9IHQxLCBUcnVlKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPD0gYmFkYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxIDwgYmFkYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID4gYmFkYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID49IGJhZGFyZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiYWRhcmcgPD0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnIDwgdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnID4gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnID49IHQxKQorCisgICAgZGVmIHRlc3Rfc3RyKHNlbGYpOgorICAgICAgICB0ZCA9IHRpbWVkZWx0YQorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICBlcShzdHIodGQoMSkpLCAiMSBkYXksIDA6MDA6MDAiKQorICAgICAgICBlcShzdHIodGQoLTEpKSwgIi0xIGRheSwgMDowMDowMCIpCisgICAgICAgIGVxKHN0cih0ZCgyKSksICIyIGRheXMsIDA6MDA6MDAiKQorICAgICAgICBlcShzdHIodGQoLTIpKSwgIi0yIGRheXMsIDA6MDA6MDAiKQorCisgICAgICAgIGVxKHN0cih0ZChob3Vycz0xMiwgbWludXRlcz01OCwgc2Vjb25kcz01OSkpLCAiMTI6NTg6NTkiKQorICAgICAgICBlcShzdHIodGQoaG91cnM9MiwgbWludXRlcz0zLCBzZWNvbmRzPTQpKSwgIjI6MDM6MDQiKQorICAgICAgICBlcShzdHIodGQod2Vla3M9LTMwLCBob3Vycz0yMywgbWludXRlcz0xMiwgc2Vjb25kcz0zNCkpLAorICAgICAgICAgICAiLTIxMCBkYXlzLCAyMzoxMjozNCIpCisKKyAgICAgICAgZXEoc3RyKHRkKG1pbGxpc2Vjb25kcz0xKSksICIwOjAwOjAwLjAwMTAwMCIpCisgICAgICAgIGVxKHN0cih0ZChtaWNyb3NlY29uZHM9MykpLCAiMDowMDowMC4wMDAwMDMiKQorCisgICAgICAgIGVxKHN0cih0ZChkYXlzPTk5OTk5OTk5OSwgaG91cnM9MjMsIG1pbnV0ZXM9NTksIHNlY29uZHM9NTksCisgICAgICAgICAgICAgICAgICAgbWljcm9zZWNvbmRzPTk5OTk5OSkpLAorICAgICAgICAgICAiOTk5OTk5OTk5IGRheXMsIDIzOjU5OjU5Ljk5OTk5OSIpCisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXAoc2VsZik6CisgICAgICAgIGZvciB0ZCBpbiAodGltZWRlbHRhKGRheXM9OTk5OTk5OTk5LCBob3Vycz0yMywgbWludXRlcz01OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz01OSwgbWljcm9zZWNvbmRzPTk5OTk5OSksCisgICAgICAgICAgICAgICAgICAgdGltZWRlbHRhKGRheXM9LTk5OTk5OTk5OSksCisgICAgICAgICAgICAgICAgICAgdGltZWRlbHRhKGRheXM9MSwgc2Vjb25kcz0yLCBtaWNyb3NlY29uZHM9MykpOgorCisgICAgICAgICAgICAjIFZlcmlmeSB0ZCAtPiBzdHJpbmcgLT4gdGQgaWRlbnRpdHkuCisgICAgICAgICAgICBzID0gcmVwcih0ZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoJ2RhdGV0aW1lLicpKQorICAgICAgICAgICAgcyA9IHNbOTpdCisgICAgICAgICAgICB0ZDIgPSBldmFsKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLCB0ZDIpCisKKyAgICAgICAgICAgICMgVmVyaWZ5IGlkZW50aXR5IHZpYSByZWNvbnN0cnVjdGluZyBmcm9tIHBpZWNlcy4KKyAgICAgICAgICAgIHRkMiA9IHRpbWVkZWx0YSh0ZC5kYXlzLCB0ZC5zZWNvbmRzLCB0ZC5taWNyb3NlY29uZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLCB0ZDIpCisKKyAgICBkZWYgdGVzdF9yZXNvbHV0aW9uX2luZm8oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0aW1lZGVsdGEubWluLCB0aW1lZGVsdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0aW1lZGVsdGEubWF4LCB0aW1lZGVsdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0aW1lZGVsdGEucmVzb2x1dGlvbiwgdGltZWRlbHRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZWRlbHRhLm1heCA+IHRpbWVkZWx0YS5taW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZWRlbHRhLm1pbiwgdGltZWRlbHRhKC05OTk5OTk5OTkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWVkZWx0YS5tYXgsIHRpbWVkZWx0YSg5OTk5OTk5OTksIDI0KjM2MDAtMSwgMWU2LTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWVkZWx0YS5yZXNvbHV0aW9uLCB0aW1lZGVsdGEoMCwgMCwgMSkpCisKKyAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgdGlueSA9IHRpbWVkZWx0YS5yZXNvbHV0aW9uCisKKyAgICAgICAgdGQgPSB0aW1lZGVsdGEubWluICsgdGlueQorICAgICAgICB0ZCAtPSB0aW55ICAjIG5vIHByb2JsZW0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgdGQuX19zdWJfXywgdGlueSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgdGQuX19hZGRfXywgLXRpbnkpCisKKyAgICAgICAgdGQgPSB0aW1lZGVsdGEubWF4IC0gdGlueQorICAgICAgICB0ZCArPSB0aW55ICAjIG5vIHByb2JsZW0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgdGQuX19hZGRfXywgdGlueSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgdGQuX19zdWJfXywgLXRpbnkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbGFtYmRhOiAtdGltZWRlbHRhLm1heCkKKworICAgIGRlZiB0ZXN0X21pY3Jvc2Vjb25kX3JvdW5kaW5nKHNlbGYpOgorICAgICAgICB0ZCA9IHRpbWVkZWx0YQorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICAjIFNpbmdsZS1maWVsZCByb3VuZGluZy4KKyAgICAgICAgZXEodGQobWlsbGlzZWNvbmRzPTAuNC8xMDAwKSwgdGQoMCkpICAgICMgcm91bmRzIHRvIDAKKyAgICAgICAgZXEodGQobWlsbGlzZWNvbmRzPS0wLjQvMTAwMCksIHRkKDApKSAgICAjIHJvdW5kcyB0byAwCisgICAgICAgIGVxKHRkKG1pbGxpc2Vjb25kcz0wLjYvMTAwMCksIHRkKG1pY3Jvc2Vjb25kcz0xKSkKKyAgICAgICAgZXEodGQobWlsbGlzZWNvbmRzPS0wLjYvMTAwMCksIHRkKG1pY3Jvc2Vjb25kcz0tMSkpCisKKyAgICAgICAgIyBSb3VuZGluZyBkdWUgdG8gY29udHJpYnV0aW9ucyBmcm9tIG1vcmUgdGhhbiBvbmUgZmllbGQuCisgICAgICAgIHVzX3Blcl9ob3VyID0gMzYwMGU2CisgICAgICAgIHVzX3Blcl9kYXkgPSB1c19wZXJfaG91ciAqIDI0CisgICAgICAgIGVxKHRkKGRheXM9LjQvdXNfcGVyX2RheSksIHRkKDApKQorICAgICAgICBlcSh0ZChob3Vycz0uMi91c19wZXJfaG91ciksIHRkKDApKQorICAgICAgICBlcSh0ZChkYXlzPS40L3VzX3Blcl9kYXksIGhvdXJzPS4yL3VzX3Blcl9ob3VyKSwgdGQobWljcm9zZWNvbmRzPTEpKQorCisgICAgICAgIGVxKHRkKGRheXM9LS40L3VzX3Blcl9kYXkpLCB0ZCgwKSkKKyAgICAgICAgZXEodGQoaG91cnM9LS4yL3VzX3Blcl9ob3VyKSwgdGQoMCkpCisgICAgICAgIGVxKHRkKGRheXM9LS40L3VzX3Blcl9kYXksIGhvdXJzPS0uMi91c19wZXJfaG91ciksIHRkKG1pY3Jvc2Vjb25kcz0tMSkpCisKKyAgICBkZWYgdGVzdF9tYXNzaXZlX25vcm1hbGl6YXRpb24oc2VsZik6CisgICAgICAgIHRkID0gdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz0tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodGQuZGF5cywgdGQuc2Vjb25kcywgdGQubWljcm9zZWNvbmRzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoLTEsIDI0KjM2MDAtMSwgOTk5OTk5KSkKKworICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lZGVsdGEoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lZGVsdGEoMCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lZGVsdGEoMCwgMCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lZGVsdGEobWljcm9zZWNvbmRzPTEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHRpbWVkZWx0YSgwKSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3RpbWVkZWx0YShzZWxmKToKKworICAgICAgICBjbGFzcyBUKHRpbWVkZWx0YSk6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgZnJvbV90ZCh0ZCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFQodGQuZGF5cywgdGQuc2Vjb25kcywgdGQubWljcm9zZWNvbmRzKQorCisgICAgICAgICAgICBkZWYgYXNfaG91cnMoc2VsZik6CisgICAgICAgICAgICAgICAgc3VtID0gKHNlbGYuZGF5cyAqIDI0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRzIC8gMzYwMC4wICsKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5taWNyb3NlY29uZHMgLyAzNjAwZTYpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJvdW5kKHN1bSkKKworICAgICAgICB0MSA9IFQoZGF5cz0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0MSkgaXMgVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS5hc19ob3VycygpLCAyNCkKKworICAgICAgICB0MiA9IFQoZGF5cz0tMSwgc2Vjb25kcz0tMzYwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodDIpIGlzIFQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuYXNfaG91cnMoKSwgLTI1KQorCisgICAgICAgIHQzID0gdDEgKyB0MgorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0MykgaXMgdGltZWRlbHRhKQorICAgICAgICB0NCA9IFQuZnJvbV90ZCh0MykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodDQpIGlzIFQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMuZGF5cywgdDQuZGF5cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My5zZWNvbmRzLCB0NC5zZWNvbmRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLm1pY3Jvc2Vjb25kcywgdDQubWljcm9zZWNvbmRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0MyksIHN0cih0NCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDQuYXNfaG91cnMoKSwgLTEpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGRhdGUgdGVzdHMKKworY2xhc3MgVGVzdERhdGVPbmx5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3RzIGhlcmUgd29uJ3QgcGFzcyBpZiBhbHNvIHJ1biBvbiBkYXRldGltZSBvYmplY3RzLCBzbyBkb24ndAorICAgICMgc3ViY2xhc3MgdGhpcyB0byB0ZXN0IGRhdGV0aW1lcyB0b28uCisKKyAgICBkZWYgdGVzdF9kZWx0YV9ub25fZGF5c19pZ25vcmVkKHNlbGYpOgorICAgICAgICBkdCA9IGRhdGUoMjAwMCwgMSwgMikKKyAgICAgICAgZGVsdGEgPSB0aW1lZGVsdGEoZGF5cz0xLCBob3Vycz0yLCBtaW51dGVzPTMsIHNlY29uZHM9NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWljcm9zZWNvbmRzPTUpCisgICAgICAgIGRheXMgPSB0aW1lZGVsdGEoZGVsdGEuZGF5cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXlzLCB0aW1lZGVsdGEoMSkpCisKKyAgICAgICAgZHQyID0gZHQgKyBkZWx0YQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MiwgZHQgKyBkYXlzKQorCisgICAgICAgIGR0MiA9IGRlbHRhICsgZHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIsIGR0ICsgZGF5cykKKworICAgICAgICBkdDIgPSBkdCAtIGRlbHRhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLCBkdCAtIGRheXMpCisKKyAgICAgICAgZGVsdGEgPSAtZGVsdGEKKyAgICAgICAgZGF5cyA9IHRpbWVkZWx0YShkZWx0YS5kYXlzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRheXMsIHRpbWVkZWx0YSgtMikpCisKKyAgICAgICAgZHQyID0gZHQgKyBkZWx0YQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MiwgZHQgKyBkYXlzKQorCisgICAgICAgIGR0MiA9IGRlbHRhICsgZHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIsIGR0ICsgZGF5cykKKworICAgICAgICBkdDIgPSBkdCAtIGRlbHRhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLCBkdCAtIGRheXMpCisKK2NsYXNzIFN1YmNsYXNzRGF0ZShkYXRlKToKKyAgICBzdWJfdmFyID0gMQorCitjbGFzcyBUZXN0RGF0ZShIYXJtbGVzc01peGVkQ29tcGFyaXNvbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdHMgaGVyZSBzaG91bGQgcGFzcyBmb3IgYm90aCBkYXRlcyBhbmQgZGF0ZXRpbWVzLCBleGNlcHQgZm9yIGEKKyAgICAjIGZldyB0ZXN0cyB0aGF0IFRlc3REYXRlVGltZSBvdmVycmlkZXMuCisKKyAgICB0aGVjbGFzcyA9IGRhdGUKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIGR0ID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnllYXIsIDIwMDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQubW9udGgsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuZGF5LCAxKQorCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwKHNlbGYpOgorICAgICAgICBmb3IgZHQgaW4gKHNlbGYudGhlY2xhc3MoMSwgMiwgMyksCisgICAgICAgICAgICAgICAgICAgc2VsZi50aGVjbGFzcy50b2RheSgpKToKKyAgICAgICAgICAgICMgVmVyaWZ5IGR0IC0+IHN0cmluZyAtPiBkYXRlIGlkZW50aXR5LgorICAgICAgICAgICAgcyA9IHJlcHIoZHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCdkYXRldGltZS4nKSkKKyAgICAgICAgICAgIHMgPSBzWzk6XQorICAgICAgICAgICAgZHQyID0gZXZhbChzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdCwgZHQyKQorCisgICAgICAgICAgICAjIFZlcmlmeSBpZGVudGl0eSB2aWEgcmVjb25zdHJ1Y3RpbmcgZnJvbSBwaWVjZXMuCisgICAgICAgICAgICBkdDIgPSBzZWxmLnRoZWNsYXNzKGR0LnllYXIsIGR0Lm1vbnRoLCBkdC5kYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCBkdDIpCisKKyAgICBkZWYgdGVzdF9vcmRpbmFsX2NvbnZlcnNpb25zKHNlbGYpOgorICAgICAgICAjIENoZWNrIHNvbWUgZml4ZWQgdmFsdWVzLgorICAgICAgICBmb3IgeSwgbSwgZCwgbiBpbiBbKDEsIDEsIDEsIDEpLCAgICAgICMgY2FsZW5kYXIgb3JpZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgMTIsIDMxLCAzNjUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsIDEsIDEsIDM2NiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpcnN0IGV4YW1wbGUgZnJvbSAiQ2FsZW5kcmljYWwgQ2FsY3VsYXRpb25zIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5NDUsIDExLCAxMiwgNzEwMzQ3KV06CisgICAgICAgICAgICBkID0gc2VsZi50aGVjbGFzcyh5LCBtLCBkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCBkLnRvb3JkaW5hbCgpKQorICAgICAgICAgICAgZnJvbW9yZCA9IHNlbGYudGhlY2xhc3MuZnJvbW9yZGluYWwobikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZnJvbW9yZCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoZnJvbW9yZCwgImhvdXIiKToKKyAgICAgICAgICAgICMgaWYgd2UncmUgY2hlY2tpbmcgc29tZXRoaW5nIGZhbmNpZXIgdGhhbiBhIGRhdGUsIHZlcmlmeQorICAgICAgICAgICAgIyB0aGUgZXh0cmEgZmllbGRzIGhhdmUgYmVlbiB6ZXJvZWQgb3V0CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcm9tb3JkLmhvdXIsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcm9tb3JkLm1pbnV0ZSwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyb21vcmQuc2Vjb25kLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnJvbW9yZC5taWNyb3NlY29uZCwgMCkKKworICAgICAgICAjIENoZWNrIGZpcnN0IGFuZCBsYXN0IGRheXMgb2YgeWVhciBzcG90dGlseSBhY3Jvc3MgdGhlIHdob2xlCisgICAgICAgICMgcmFuZ2Ugb2YgeWVhcnMgc3VwcG9ydGVkLgorICAgICAgICBmb3IgeWVhciBpbiB4cmFuZ2UoTUlOWUVBUiwgTUFYWUVBUisxLCA3KToKKyAgICAgICAgICAgICMgVmVyaWZ5ICh5ZWFyLCAxLCAxKSAtPiBvcmRpbmFsIC0+IHksIG0sIGQgaXMgaWRlbnRpdHkuCisgICAgICAgICAgICBkID0gc2VsZi50aGVjbGFzcyh5ZWFyLCAxLCAxKQorICAgICAgICAgICAgbiA9IGQudG9vcmRpbmFsKCkKKyAgICAgICAgICAgIGQyID0gc2VsZi50aGVjbGFzcy5mcm9tb3JkaW5hbChuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkMikKKyAgICAgICAgICAgICMgVmVyaWZ5IHRoYXQgbW92aW5nIGJhY2sgYSBkYXkgZ2V0cyB0byB0aGUgZW5kIG9mIHllYXItMS4KKyAgICAgICAgICAgIGlmIHllYXIgPiAxOgorICAgICAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzLmZyb21vcmRpbmFsKG4tMSkKKyAgICAgICAgICAgICAgICBkMiA9IHNlbGYudGhlY2xhc3MoeWVhci0xLCAxMiwgMzEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLnRvb3JkaW5hbCgpLCBuLTEpCisKKyAgICAgICAgIyBUZXN0IGV2ZXJ5IGRheSBpbiBhIGxlYXAteWVhciBhbmQgYSBub24tbGVhcCB5ZWFyLgorICAgICAgICBkaW0gPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0KKyAgICAgICAgZm9yIHllYXIsIGlzbGVhcCBpbiAoMjAwMCwgVHJ1ZSksICgyMDAyLCBGYWxzZSk6CisgICAgICAgICAgICBuID0gc2VsZi50aGVjbGFzcyh5ZWFyLCAxLCAxKS50b29yZGluYWwoKQorICAgICAgICAgICAgZm9yIG1vbnRoLCBtYXhkYXkgaW4gemlwKHJhbmdlKDEsIDEzKSwgZGltKToKKyAgICAgICAgICAgICAgICBpZiBtb250aCA9PSAyIGFuZCBpc2xlYXA6CisgICAgICAgICAgICAgICAgICAgIG1heGRheSArPSAxCisgICAgICAgICAgICAgICAgZm9yIGRheSBpbiByYW5nZSgxLCBtYXhkYXkrMSk6CisgICAgICAgICAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKHllYXIsIG1vbnRoLCBkYXkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC50b29yZGluYWwoKSwgbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzZWxmLnRoZWNsYXNzLmZyb21vcmRpbmFsKG4pKQorICAgICAgICAgICAgICAgICAgICBuICs9IDEKKworICAgIGRlZiB0ZXN0X2V4dHJlbWVfb3JkaW5hbHMoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnRoZWNsYXNzLm1pbgorICAgICAgICBhID0gc2VsZi50aGVjbGFzcyhhLnllYXIsIGEubW9udGgsIGEuZGF5KSAgIyBnZXQgcmlkIG9mIHRpbWUgcGFydHMKKyAgICAgICAgYW9yZCA9IGEudG9vcmRpbmFsKCkKKyAgICAgICAgYiA9IGEuZnJvbW9yZGluYWwoYW9yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogYS5mcm9tb3JkaW5hbChhb3JkIC0gMSkpCisKKyAgICAgICAgYiA9IGEgKyB0aW1lZGVsdGEoZGF5cz0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIudG9vcmRpbmFsKCksIGFvcmQgKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIHNlbGYudGhlY2xhc3MuZnJvbW9yZGluYWwoYW9yZCArIDEpKQorCisgICAgICAgIGEgPSBzZWxmLnRoZWNsYXNzLm1heAorICAgICAgICBhID0gc2VsZi50aGVjbGFzcyhhLnllYXIsIGEubW9udGgsIGEuZGF5KSAgIyBnZXQgcmlkIG9mIHRpbWUgcGFydHMKKyAgICAgICAgYW9yZCA9IGEudG9vcmRpbmFsKCkKKyAgICAgICAgYiA9IGEuZnJvbW9yZGluYWwoYW9yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogYS5mcm9tb3JkaW5hbChhb3JkICsgMSkpCisKKyAgICAgICAgYiA9IGEgLSB0aW1lZGVsdGEoZGF5cz0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIudG9vcmRpbmFsKCksIGFvcmQgLSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIHNlbGYudGhlY2xhc3MuZnJvbW9yZGluYWwoYW9yZCAtIDEpKQorCisgICAgZGVmIHRlc3RfYmFkX2NvbnN0cnVjdG9yX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgIyBiYWQgeWVhcnMKKyAgICAgICAgc2VsZi50aGVjbGFzcyhNSU5ZRUFSLCAxLCAxKSAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcyhNQVhZRUFSLCAxLCAxKSAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgTUlOWUVBUi0xLCAxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCBNQVhZRUFSKzEsIDEsIDEpCisgICAgICAgICMgYmFkIG1vbnRocworICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEsIDEpICAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMTIsIDEpICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMTMsIDEpCisgICAgICAgICMgYmFkIGRheXMKKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAyLCAyOSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDQsIDIsIDI5KSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjQwMCwgMiwgMjkpICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMiwgMzApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDEsIDIsIDI5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMTAwLCAyLCAyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMTkwMCwgMiwgMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDEsIDMyKQorCisgICAgZGVmIHRlc3RfaGFzaF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwMCwgMTIsIDMxKQorICAgICAgICAjIHNhbWUgdGhpbmcKKyAgICAgICAgZSA9IHNlbGYudGhlY2xhc3MoMjAwMCwgMTIsIDMxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChkKSwgaGFzaChlKSkKKworICAgICAgICBkaWMgPSB7ZDogMX0KKyAgICAgICAgZGljW2VdID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tkXSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWNbZV0sIDIpCisKKyAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwMSwgIDEsICAxKQorICAgICAgICAjIHNhbWUgdGhpbmcKKyAgICAgICAgZSA9IHNlbGYudGhlY2xhc3MoMjAwMSwgIDEsICAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChkKSwgaGFzaChlKSkKKworICAgICAgICBkaWMgPSB7ZDogMX0KKyAgICAgICAgZGljW2VdID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tkXSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWNbZV0sIDIpCisKKyAgICBkZWYgdGVzdF9jb21wdXRhdGlvbnMoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDEsIDMxKQorICAgICAgICBiID0gc2VsZi50aGVjbGFzcygxOTU2LCAxLCAzMSkKKworICAgICAgICBkaWZmID0gYS1iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZi5kYXlzLCA0NiozNjUgKyBsZW4ocmFuZ2UoMTk1NiwgMjAwMiwgNCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmYuc2Vjb25kcywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWZmLm1pY3Jvc2Vjb25kcywgMCkKKworICAgICAgICBkYXkgPSB0aW1lZGVsdGEoMSkKKyAgICAgICAgd2VlayA9IHRpbWVkZWx0YSg3KQorICAgICAgICBhID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyBkYXksIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF5ICsgYSwgc2VsZi50aGVjbGFzcygyMDAyLCAzLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gZGF5LCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1kYXkgKyBhLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyB3ZWVrLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSB3ZWVrLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDIsIDIzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgNTIqd2Vlaywgc2VsZi50aGVjbGFzcygyMDAzLCAzLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gNTIqd2Vlaywgc2VsZi50aGVjbGFzcygyMDAxLCAzLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSArIHdlZWspIC0gYSwgd2VlaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSArIGRheSkgLSBhLCBkYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgLSB3ZWVrKSAtIGEsIC13ZWVrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhIC0gZGF5KSAtIGEsIC1kYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhICsgd2VlayksIC13ZWVrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAoYSArIGRheSksIC1kYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhIC0gd2VlayksIHdlZWspCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhIC0gZGF5KSwgZGF5KQorCisgICAgICAgICMgQWRkL3N1YiBpbnRzLCBsb25ncywgZmxvYXRzIHNob3VsZCBiZSBpbGxlZ2FsCisgICAgICAgIGZvciBpIGluIDEsIDFMLCAxLjA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYStpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEtaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBpK2EpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogaS1hKQorCisgICAgICAgICMgZGVsdGEgLSBkYXRlIGlzIHNlbnNlbGVzcy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGRheSAtIGEpCisgICAgICAgICMgbWl4aW5nIGRhdGUgYW5kIChkZWx0YSBvciBkYXRlKSB2aWEgKiBvciAvLyBpcyBzZW5zZWxlc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGRheSAqIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhICogZGF5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogZGF5IC8vIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhIC8vIGRheSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgKiBhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSAvLyBhKQorICAgICAgICAjIGRhdGUgKyBkYXRlIGlzIHNlbnNlbGVzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSArIGEpCisKKyAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgdGlueSA9IHNlbGYudGhlY2xhc3MucmVzb2x1dGlvbgorCisgICAgICAgIGZvciBkZWx0YSBpbiBbdGlueSwgdGltZWRlbHRhKDEpLCB0aW1lZGVsdGEoMildOgorICAgICAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzLm1pbiArIGRlbHRhCisgICAgICAgICAgICBkdCAtPSBkZWx0YSAgIyBubyBwcm9ibGVtCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBkdC5fX3N1Yl9fLCBkZWx0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGR0Ll9fYWRkX18sIC1kZWx0YSkKKworICAgICAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzLm1heCAtIGRlbHRhCisgICAgICAgICAgICBkdCArPSBkZWx0YSAgIyBubyBwcm9ibGVtCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBkdC5fX2FkZF9fLCBkZWx0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGR0Ll9fc3ViX18sIC1kZWx0YSkKKworICAgIGRlZiB0ZXN0X2Zyb210aW1lc3RhbXAoc2VsZik6CisgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgIyBUcnkgYW4gYXJiaXRyYXJ5IGZpeGVkIHZhbHVlLgorICAgICAgICB5ZWFyLCBtb250aCwgZGF5ID0gMTk5OSwgOSwgMTkKKyAgICAgICAgdHMgPSB0aW1lLm1rdGltZSgoeWVhciwgbW9udGgsIGRheSwgMCwgMCwgMCwgMCwgMCwgLTEpKQorICAgICAgICBkID0gc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKHRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQueWVhciwgeWVhcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLm1vbnRoLCBtb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmRheSwgZGF5KQorCisgICAgZGVmIHRlc3RfaW5zYW5lX2Zyb210aW1lc3RhbXAoc2VsZik6CisgICAgICAgICMgSXQncyBwb3NzaWJsZSB0aGF0IHNvbWUgcGxhdGZvcm0gbWFwcyB0aW1lX3QgdG8gZG91YmxlLAorICAgICAgICAjIGFuZCB0aGF0IHRoaXMgdGVzdCB3aWxsIGZhaWwgdGhlcmUuICBUaGlzIHRlc3Qgc2hvdWxkCisgICAgICAgICMgZXhlbXB0IHN1Y2ggcGxhdGZvcm1zIChwcm92aWRlZCB0aGV5IHJldHVybiByZWFzb25hYmxlCisgICAgICAgICMgcmVzdWx0cyEpLgorICAgICAgICBmb3IgaW5zYW5lIGluIC0xZTIwMCwgMWUyMDA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLmZyb210aW1lc3RhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNhbmUpCisKKyAgICBkZWYgdGVzdF90b2RheShzZWxmKToKKyAgICAgICAgaW1wb3J0IHRpbWUKKworICAgICAgICAjIFdlIGNsYWltIHRoYXQgdG9kYXkoKSBpcyBsaWtlIGZyb210aW1lc3RhbXAodGltZS50aW1lKCkpLCBzbworICAgICAgICAjIHByb3ZlIGl0LgorICAgICAgICBmb3IgZHVtbXkgaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICB0b2RheSA9IHNlbGYudGhlY2xhc3MudG9kYXkoKQorICAgICAgICAgICAgdHMgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgdG9kYXlhZ2FpbiA9IHNlbGYudGhlY2xhc3MuZnJvbXRpbWVzdGFtcCh0cykKKyAgICAgICAgICAgIGlmIHRvZGF5ID09IHRvZGF5YWdhaW46CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICMgVGhlcmUgYXJlIHNldmVyYWwgbGVnaXQgcmVhc29ucyB0aGF0IGNvdWxkIGZhaWw6CisgICAgICAgICAgICAjIDEuIEl0IHJlY2VudGx5IGJlY2FtZSBtaWRuaWdodCwgYmV0d2VlbiB0aGUgdG9kYXkoKSBhbmQgdGhlCisgICAgICAgICAgICAjICAgIHRpbWUoKSBjYWxscy4KKyAgICAgICAgICAgICMgMi4gVGhlIHBsYXRmb3JtIHRpbWUoKSBoYXMgc3VjaCBmaW5lIHJlc29sdXRpb24gdGhhdCB3ZSdsbAorICAgICAgICAgICAgIyAgICBuZXZlciBnZXQgdGhlIHNhbWUgdmFsdWUgdHdpY2UuCisgICAgICAgICAgICAjIDMuIFRoZSBwbGF0Zm9ybSB0aW1lKCkgaGFzIHBvb3IgcmVzb2x1dGlvbiwgYW5kIHdlIGp1c3QKKyAgICAgICAgICAgICMgICAgaGFwcGVuZWQgdG8gY2FsbCB0b2RheSgpIHJpZ2h0IGJlZm9yZSBhIHJlc29sdXRpb24gcXVhbnR1bQorICAgICAgICAgICAgIyAgICBib3VuZGFyeS4KKyAgICAgICAgICAgICMgNC4gVGhlIHN5c3RlbSBjbG9jayBnb3QgZmlkZGxlZCBiZXR3ZWVuIGNhbGxzLgorICAgICAgICAgICAgIyBJbiBhbnkgY2FzZSwgd2FpdCBhIGxpdHRsZSB3aGlsZSBhbmQgdHJ5IGFnYWluLgorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisKKyAgICAgICAgIyBJdCB3b3JrZWQgb3IgaXQgZGlkbid0LiAgSWYgaXQgZGlkbid0LCBhc3N1bWUgaXQncyByZWFzb24gIzIsIGFuZAorICAgICAgICAjIGxldCB0aGUgdGVzdCBwYXNzIGlmIHRoZXkncmUgd2l0aGluIGhhbGYgYSBzZWNvbmQgb2YgZWFjaCBvdGhlci4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRvZGF5ID09IHRvZGF5YWdhaW4gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGFicyh0b2RheWFnYWluIC0gdG9kYXkpIDwgdGltZWRlbHRhKHNlY29uZHM9MC41KSkKKworICAgIGRlZiB0ZXN0X3dlZWtkYXkoc2VsZik6CisgICAgICAgIGZvciBpIGluIHJhbmdlKDcpOgorICAgICAgICAgICAgIyBNYXJjaCA0LCAyMDAyIGlzIGEgTW9uZGF5CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhlY2xhc3MoMjAwMiwgMywgNCtpKS53ZWVrZGF5KCksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhlY2xhc3MoMjAwMiwgMywgNCtpKS5pc293ZWVrZGF5KCksIGkrMSkKKyAgICAgICAgICAgICMgSmFudWFyeSAyLCAxOTU2IGlzIGEgTW9uZGF5CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhlY2xhc3MoMTk1NiwgMSwgMitpKS53ZWVrZGF5KCksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhlY2xhc3MoMTk1NiwgMSwgMitpKS5pc293ZWVrZGF5KCksIGkrMSkKKworICAgIGRlZiB0ZXN0X2lzb2NhbGVuZGFyKHNlbGYpOgorICAgICAgICAjIENoZWNrIGV4YW1wbGVzIGZyb20KKyAgICAgICAgIyBodHRwOi8vd3d3LnBoeXMudXUubmwvfnZnZW50L2NhbGVuZGFyL2lzb2NhbGVuZGFyLmh0bQorICAgICAgICBmb3IgaSBpbiByYW5nZSg3KToKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDMsIDEyLCAyMitpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmlzb2NhbGVuZGFyKCksICgyMDAzLCA1MiwgaSsxKSkKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDMsIDEyLCAyOSkgKyB0aW1lZGVsdGEoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pc29jYWxlbmRhcigpLCAoMjAwNCwgMSwgaSsxKSkKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDQsIDEsIDUraSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pc29jYWxlbmRhcigpLCAoMjAwNCwgMiwgaSsxKSkKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDksIDEyLCAyMStpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmlzb2NhbGVuZGFyKCksICgyMDA5LCA1MiwgaSsxKSkKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDksIDEyLCAyOCkgKyB0aW1lZGVsdGEoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pc29jYWxlbmRhcigpLCAoMjAwOSwgNTMsIGkrMSkpCisgICAgICAgICAgICBkID0gc2VsZi50aGVjbGFzcygyMDEwLCAxLCA0K2kpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXNvY2FsZW5kYXIoKSwgKDIwMTAsIDEsIGkrMSkpCisKKyAgICBkZWYgdGVzdF9pc29fbG9uZ195ZWFycyhzZWxmKToKKyAgICAgICAgIyBDYWxjdWxhdGUgbG9uZyBJU08geWVhcnMgYW5kIGNvbXBhcmUgdG8gdGFibGUgZnJvbQorICAgICAgICAjIGh0dHA6Ly93d3cucGh5cy51dS5ubC9+dmdlbnQvY2FsZW5kYXIvaXNvY2FsZW5kYXIuaHRtCisgICAgICAgIElTT19MT05HX1lFQVJTX1RBQkxFID0gIiIiCisgICAgICAgICAgICAgIDQgICAzMiAgIDYwICAgODgKKyAgICAgICAgICAgICAgOSAgIDM3ICAgNjUgICA5MworICAgICAgICAgICAgIDE1ICAgNDMgICA3MSAgIDk5CisgICAgICAgICAgICAgMjAgICA0OCAgIDc2CisgICAgICAgICAgICAgMjYgICA1NCAgIDgyCisKKyAgICAgICAgICAgIDEwNSAgMTMzICAxNjEgIDE4OQorICAgICAgICAgICAgMTExICAxMzkgIDE2NyAgMTk1CisgICAgICAgICAgICAxMTYgIDE0NCAgMTcyCisgICAgICAgICAgICAxMjIgIDE1MCAgMTc4CisgICAgICAgICAgICAxMjggIDE1NiAgMTg0CisKKyAgICAgICAgICAgIDIwMSAgMjI5ICAyNTcgIDI4NQorICAgICAgICAgICAgMjA3ICAyMzUgIDI2MyAgMjkxCisgICAgICAgICAgICAyMTIgIDI0MCAgMjY4ICAyOTYKKyAgICAgICAgICAgIDIxOCAgMjQ2ICAyNzQKKyAgICAgICAgICAgIDIyNCAgMjUyICAyODAKKworICAgICAgICAgICAgMzAzICAzMzEgIDM1OSAgMzg3CisgICAgICAgICAgICAzMDggIDMzNiAgMzY0ICAzOTIKKyAgICAgICAgICAgIDMxNCAgMzQyICAzNzAgIDM5OAorICAgICAgICAgICAgMzIwICAzNDggIDM3NgorICAgICAgICAgICAgMzI1ICAzNTMgIDM4MQorICAgICAgICAiIiIKKyAgICAgICAgaXNvX2xvbmdfeWVhcnMgPSBtYXAoaW50LCBJU09fTE9OR19ZRUFSU19UQUJMRS5zcGxpdCgpKQorICAgICAgICBpc29fbG9uZ195ZWFycy5zb3J0KCkKKyAgICAgICAgTCA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDQwMCk6CisgICAgICAgICAgICBkID0gc2VsZi50aGVjbGFzcygyMDAwK2ksIDEyLCAzMSkKKyAgICAgICAgICAgIGQxID0gc2VsZi50aGVjbGFzcygxNjAwK2ksIDEyLCAzMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pc29jYWxlbmRhcigpWzE6XSwgZDEuaXNvY2FsZW5kYXIoKVsxOl0pCisgICAgICAgICAgICBpZiBkLmlzb2NhbGVuZGFyKClbMV0gPT0gNTM6CisgICAgICAgICAgICAgICAgTC5hcHBlbmQoaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMLCBpc29fbG9uZ195ZWFycykKKworICAgIGRlZiB0ZXN0X2lzb2Zvcm1hdChzZWxmKToKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMiwgMywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAiMDAwMi0wMy0wMiIpCisKKyAgICBkZWYgdGVzdF9jdGltZShzZWxmKToKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmN0aW1lKCksICJTYXQgTWFyICAyIDAwOjAwOjAwIDIwMDIiKQorCisgICAgZGVmIHRlc3Rfc3RyZnRpbWUoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIwMDUsIDMsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zdHJmdGltZSgibTolbSBkOiVkIHk6JXkiKSwgIm06MDMgZDowMiB5OjA1IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0cmZ0aW1lKCIiKSwgIiIpICMgU0YgYnVnICM3NjEzMzcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0cmZ0aW1lKCd4JyoxMDAwKSwgJ3gnKjEwMDApICMgU0YgYnVnICMxNTU2Nzg0CisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LnN0cmZ0aW1lKSAjIG5lZWRzIGFuIGFyZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuc3RyZnRpbWUsICJvbmUiLCAidHdvIikgIyB0b28gbWFueSBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdC5zdHJmdGltZSwgNDIpICMgYXJnIHdyb25nIHR5cGUKKworICAgICAgICAjIHRlc3QgdGhhdCB1bmljb2RlIGlucHV0IGlzIGFsbG93ZWQgKGlzc3VlIDI3ODIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zdHJmdGltZSh1IiVtIiksICIwMyIpCisKKyAgICAgICAgIyBBIG5haXZlIG9iamVjdCByZXBsYWNlcyAleiBhbmQgJVogdy8gZW1wdHkgc3RyaW5ncy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0cmZ0aW1lKCInJXonICclWiciKSwgIicnICcnIikKKworICAgICAgICAjbWFrZSBzdXJlIHRoYXQgaW52YWxpZCBmb3JtYXQgc3BlY2lmaWVycyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkKKyAgICAgICAgI3NlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuc3RyZnRpbWUsICIlZSIpCisgICAgICAgICNzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnN0cmZ0aW1lLCAiJSIpCisgICAgICAgICNzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnN0cmZ0aW1lLCAiJSMiKQorCisgICAgICAgICNvaCB3ZWxsLCBzb21lIHN5c3RlbXMganVzdCBpZ25vcmUgdGhvc2UgaW52YWxpZCBvbmVzLgorICAgICAgICAjYXQgbGVhc3QsIGV4Y2VyY2lzZSB0aGVtIHRvIG1ha2Ugc3VyZSB0aGF0IG5vIGNyYXNoZXMKKyAgICAgICAgI2FyZSBnZW5lcmF0ZWQKKyAgICAgICAgZm9yIGYgaW4gWyIlZSIsICIlIiwgIiUjIl06CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdC5zdHJmdGltZShmKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICNjaGVjayB0aGF0IHRoaXMgc3RhbmRhcmQgZXh0ZW5zaW9uIHdvcmtzCisgICAgICAgIHQuc3RyZnRpbWUoIiVmIikKKworCisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3MoMjAwNywgOSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuX19mb3JtYXRfXygnJyksIHN0cihkdCkpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IGEgZGVyaXZlZCBjbGFzcydzIF9fc3RyX18oKSBnZXRzIGNhbGxlZAorICAgICAgICBjbGFzcyBBKHNlbGYudGhlY2xhc3MpOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdBJworICAgICAgICBhID0gQSgyMDA3LCA5LCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZm9ybWF0X18oJycpLCAnQScpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IGEgZGVyaXZlZCBjbGFzcydzIHN0cmZ0aW1lIGdldHMgY2FsbGVkCisgICAgICAgIGNsYXNzIEIoc2VsZi50aGVjbGFzcyk6CisgICAgICAgICAgICBkZWYgc3RyZnRpbWUoc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiAnQicKKyAgICAgICAgYiA9IEIoMjAwNywgOSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5fX2Zvcm1hdF9fKCcnKSwgc3RyKGR0KSkKKworICAgICAgICBmb3IgZm10IGluIFsibTolbSBkOiVkIHk6JXkiLAorICAgICAgICAgICAgICAgICAgICAibTolbSBkOiVkIHk6JXkgSDolSCBNOiVNIFM6JVMiLAorICAgICAgICAgICAgICAgICAgICAiJXogJVoiLAorICAgICAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5fX2Zvcm1hdF9fKGZtdCksIGR0LnN0cmZ0aW1lKGZtdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19mb3JtYXRfXyhmbXQpLCBkdC5zdHJmdGltZShmbXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLl9fZm9ybWF0X18oZm10KSwgJ0InKQorCisgICAgZGVmIHRlc3RfcmVzb2x1dGlvbl9pbmZvKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi50aGVjbGFzcy5taW4sIHNlbGYudGhlY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRoZWNsYXNzLm1heCwgc2VsZi50aGVjbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYudGhlY2xhc3MucmVzb2x1dGlvbiwgdGltZWRlbHRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50aGVjbGFzcy5tYXggPiBzZWxmLnRoZWNsYXNzLm1pbikKKworICAgIGRlZiB0ZXN0X2V4dHJlbWVfdGltZWRlbHRhKHNlbGYpOgorICAgICAgICBiaWcgPSBzZWxmLnRoZWNsYXNzLm1heCAtIHNlbGYudGhlY2xhc3MubWluCisgICAgICAgICMgMzY1MjA1OCBkYXlzLCAyMyBob3VycywgNTkgbWludXRlcywgNTkgc2Vjb25kcywgOTk5OTk5IG1pY3Jvc2Vjb25kcworICAgICAgICBuID0gKGJpZy5kYXlzKjI0KjM2MDAgKyBiaWcuc2Vjb25kcykqMTAwMDAwMCArIGJpZy5taWNyb3NlY29uZHMKKyAgICAgICAgIyBuID09IDMxNTUzNzg5NzU5OTk5OTk5OSB+PSAyKio1OC4xMworICAgICAgICBqdXN0YXNiaWcgPSB0aW1lZGVsdGEoMCwgMCwgbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaWcsIGp1c3Rhc2JpZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZWNsYXNzLm1pbiArIGJpZywgc2VsZi50aGVjbGFzcy5tYXgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGVjbGFzcy5tYXggLSBiaWcsIHNlbGYudGhlY2xhc3MubWluKQorCisgICAgZGVmIHRlc3RfdGltZXR1cGxlKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiByYW5nZSg3KToKKyAgICAgICAgICAgICMgSmFudWFyeSAyLCAxOTU2IGlzIGEgTW9uZGF5ICgwKQorICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMTk1NiwgMSwgMitpKQorICAgICAgICAgICAgdCA9IGQudGltZXR1cGxlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgKDE5NTYsIDEsIDIraSwgMCwgMCwgMCwgaSwgMitpLCAtMSkpCisgICAgICAgICAgICAjIEZlYnJ1YXJ5IDEsIDE5NTYgaXMgYSBXZWRuZXNkYXkgKDIpCisgICAgICAgICAgICBkID0gc2VsZi50aGVjbGFzcygxOTU2LCAyLCAxK2kpCisgICAgICAgICAgICB0ID0gZC50aW1ldHVwbGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCAoMTk1NiwgMiwgMStpLCAwLCAwLCAwLCAoMitpKSU3LCAzMitpLCAtMSkpCisgICAgICAgICAgICAjIE1hcmNoIDEsIDE5NTYgaXMgYSBUaHVyc2RheSAoMyksIGFuZCBpcyB0aGUgMzErMjkrMSA9IDYxc3QgZGF5CisgICAgICAgICAgICAjIG9mIHRoZSB5ZWFyLgorICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMTk1NiwgMywgMStpKQorICAgICAgICAgICAgdCA9IGQudGltZXR1cGxlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgKDE5NTYsIDMsIDEraSwgMCwgMCwgMCwgKDMraSklNywgNjEraSwgLTEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX3llYXIsIDE5NTYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1fbW9uLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX21kYXksIDEraSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV9ob3VyLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX21pbiwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV9zZWMsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1fd2RheSwgKDMraSklNykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV95ZGF5LCA2MStpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX2lzZHN0LCAtMSkKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgorICAgICAgICBhcmdzID0gNiwgNywgMjMKKyAgICAgICAgb3JpZyA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCisgICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgorICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQorICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKKworICAgIGRlZiB0ZXN0X2NvbXBhcmUoc2VsZik6CisgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygyLCAzLCA0KQorICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoMiwgMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID09IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSAhPSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA8IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQxLCB0MiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQyLCB0MSksIDApCisKKyAgICAgICAgZm9yIGFyZ3MgaW4gKDMsIDMsIDMpLCAoMiwgNCwgNCksICgyLCAzLCA1KToKKyAgICAgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygqYXJncykgICAjIHRoaXMgaXMgbGFyZ2VyIHRoYW4gdDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID4gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPj0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgIT0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgIT0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID09IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA9PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPCB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPj0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDw9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDEsIHQyKSwgLTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MiwgdDEpLCAxKQorCisgICAgICAgIGZvciBiYWRhcmcgaW4gT1RIRVJTVFVGRjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEgPT0gYmFkYXJnLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEgIT0gYmFkYXJnLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWRhcmcgPT0gdDEsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWRhcmcgIT0gdDEsIFRydWUpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA8IGJhZGFyZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA+IGJhZGFyZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA+PSBiYWRhcmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnIDw9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGJhZGFyZyA8IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGJhZGFyZyA+IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGJhZGFyZyA+PSB0MSkKKworICAgIGRlZiB0ZXN0X21peGVkX2NvbXBhcmUoc2VsZik6CisgICAgICAgIG91ciA9IHNlbGYudGhlY2xhc3MoMjAwMCwgNCwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbXAsIG91ciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbXAsIDEsIG91cikKKworICAgICAgICBjbGFzcyBBbm90aGVyRGF0ZVRpbWVDbGFzcyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgICMgUmV0dXJuICJlcXVhbCIgc28gY2FsbGluZyB0aGlzIGNhbid0IGJlIGNvbmZ1c2VkIHdpdGgKKyAgICAgICAgICAgICAgICAjIGNvbXBhcmUtYnktYWRkcmVzcyAod2hpY2ggbmV2ZXIgc2F5cyAiZXF1YWwiIGZvciBkaXN0aW5jdAorICAgICAgICAgICAgICAgICMgb2JqZWN0cykuCisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZSAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisKKyAgICAgICAgIyBUaGlzIHN0aWxsIGVycm9ycywgYmVjYXVzZSBkYXRlIGFuZCBkYXRldGltZSBjb21wYXJpc29uIHJhaXNlCisgICAgICAgICMgVHlwZUVycm9yIGluc3RlYWQgb2YgTm90SW1wbGVtZW50ZWQgd2hlbiB0aGV5IGRvbid0IGtub3cgd2hhdCB0bworICAgICAgICAjIGRvLCBpbiBvcmRlciB0byBzdG9wIGNvbXBhcmlzb24gZnJvbSBmYWxsaW5nIGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICAgICAgIyBjb21wYXJlLWJ5LWFkZHJlc3MuCisgICAgICAgIHRoZWlyID0gQW5vdGhlckRhdGVUaW1lQ2xhc3MoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCwgb3VyLCB0aGVpcikKKyAgICAgICAgIyBPb3BzOiAgVGhlIG5leHQgc3RhYiByYWlzZXMgVHlwZUVycm9yIGluIHRoZSBDIGltcGxlbWVudGF0aW9uLAorICAgICAgICAjIGJ1dCBub3QgaW4gdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBkYXRldGltZS4gIFRoZSBkaWZmZXJlbmNlCisgICAgICAgICMgaXMgZHVlIHRvIHRoYXQgdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZWZpbmVzIF9fY21wX18gYnV0CisgICAgICAgICMgdGhlIEMgaW1wbGVtZW50YXRpb24gZGVmaW5lcyB0cF9yaWNoY29tcGFyZS4gIFRoaXMgaXMgbW9yZSBwYWluCisgICAgICAgICMgdG8gZml4IHRoYW4gaXQncyB3b3J0aCwgc28gY29tbWVudGluZyBvdXQgdGhlIHRlc3QuCisgICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbChjbXAodGhlaXIsIG91ciksIDApCisKKyAgICAgICAgIyBCdXQgZGF0ZSBhbmQgZGF0ZXRpbWUgY29tcGFyaXNvbiByZXR1cm4gTm90SW1wbGVtZW50ZWQgaW5zdGVhZCBpZiB0aGUKKyAgICAgICAgIyBvdGhlciBvYmplY3QgaGFzIGEgdGltZXR1cGxlIGF0dHIuICBUaGlzIGdpdmVzIHRoZSBvdGhlciBvYmplY3QgYQorICAgICAgICAjIGNoYW5jZSB0byBkbyB0aGUgY29tcGFyaXNvbi4KKyAgICAgICAgY2xhc3MgQ29tcGFyYWJsZShBbm90aGVyRGF0ZVRpbWVDbGFzcyk6CisgICAgICAgICAgICBkZWYgdGltZXR1cGxlKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoKQorCisgICAgICAgIHRoZWlyID0gQ29tcGFyYWJsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKG91ciwgdGhlaXIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0aGVpciwgb3VyKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91ciA9PSB0aGVpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRoZWlyID09IG91cikKKworICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CisgICAgICAgICMgQWxsIGRhdGVzIGFyZSBjb25zaWRlcmVkIHRydWUuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRoZWNsYXNzLm1pbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudGhlY2xhc3MubWF4KQorCisgICAgZGVmIHRlc3Rfc3RyZnRpbWVfb3V0X29mX3JhbmdlKHNlbGYpOgorICAgICAgICAjIEZvciBuYXN0eSB0ZWNobmljYWwgcmVhc29ucywgd2UgY2FuJ3QgaGFuZGxlIHllYXJzIGJlZm9yZSAxOTAwLgorICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xzKDE5MDAsIDEsIDEpLnN0cmZ0aW1lKCIlWSIpLCAiMTkwMCIpCisgICAgICAgIGZvciB5IGluIDEsIDQ5LCA1MSwgOTksIDEwMCwgMTAwMCwgMTg5OToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNscyh5LCAxLCAxKS5zdHJmdGltZSwgIiVZIikKKworICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6CisgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKKyAgICAgICAgYXJncyA9IFsxLCAyLCAzXQorICAgICAgICBiYXNlID0gY2xzKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UsIGJhc2UucmVwbGFjZSgpKQorCisgICAgICAgIGkgPSAwCisgICAgICAgIGZvciBuYW1lLCBuZXd2YWwgaW4gKCgieWVhciIsIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm1vbnRoIiwgMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZGF5IiwgNCkpOgorICAgICAgICAgICAgbmV3YXJncyA9IGFyZ3NbOl0KKyAgICAgICAgICAgIG5ld2FyZ3NbaV0gPSBuZXd2YWwKKyAgICAgICAgICAgIGV4cGVjdGVkID0gY2xzKCpuZXdhcmdzKQorICAgICAgICAgICAgZ290ID0gYmFzZS5yZXBsYWNlKCoqe25hbWU6IG5ld3ZhbH0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisgICAgICAgICAgICBpICs9IDEKKworICAgICAgICAjIE91dCBvZiBib3VuZHMuCisgICAgICAgIGJhc2UgPSBjbHMoMjAwMCwgMiwgMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2UucmVwbGFjZSwgeWVhcj0yMDAxKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfZGF0ZShzZWxmKToKKworICAgICAgICBjbGFzcyBDKHNlbGYudGhlY2xhc3MpOgorICAgICAgICAgICAgdGhlQW5zd2VyID0gNDIKKworICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd3MpOgorICAgICAgICAgICAgICAgIHRlbXAgPSBrd3MuY29weSgpCisgICAgICAgICAgICAgICAgZXh0cmEgPSB0ZW1wLnBvcCgnZXh0cmEnKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYudGhlY2xhc3MuX19uZXdfXyhjbHMsICphcmdzLCAqKnRlbXApCisgICAgICAgICAgICAgICAgcmVzdWx0LmV4dHJhID0gZXh0cmEKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgICAgIGRlZiBuZXdtZXRoKHNlbGYsIHN0YXJ0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQgKyBzZWxmLnllYXIgKyBzZWxmLm1vbnRoCisKKyAgICAgICAgYXJncyA9IDIwMDMsIDQsIDE0CisKKyAgICAgICAgZHQxID0gc2VsZi50aGVjbGFzcygqYXJncykKKyAgICAgICAgZHQyID0gQygqYXJncywgKip7J2V4dHJhJzogN30pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIuX19jbGFzc19fLCBDKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi50aGVBbnN3ZXIsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5leHRyYSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDEudG9vcmRpbmFsKCksIGR0Mi50b29yZGluYWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIubmV3bWV0aCgtNyksIGR0MS55ZWFyICsgZHQxLm1vbnRoIC0gNykKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nX3N1YmNsYXNzX2RhdGUoc2VsZik6CisKKyAgICAgICAgYXJncyA9IDYsIDcsIDIzCisgICAgICAgIG9yaWcgPSBTdWJjbGFzc0RhdGUoKmFyZ3MpCisgICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgorICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQorICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKKworICAgIGRlZiB0ZXN0X2JhY2tkb29yX3Jlc2lzdGFuY2Uoc2VsZik6CisgICAgICAgICMgRm9yIGZhc3QgdW5waWNrbGluZywgdGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgYSBwaWNrbGUgc3RyaW5nLgorICAgICAgICAjIFRoaXMgaXMgYSBsb3ctb3ZlcmhlYWQgYmFja2Rvb3IuICBBIHVzZXIgY2FuIChieSBpbnRlbnQgb3IKKyAgICAgICAgIyBtaXN0YWtlKSBwYXNzIGEgc3RyaW5nIGRpcmVjdGx5LCB3aGljaCAoaWYgaXQncyB0aGUgcmlnaHQgbGVuZ3RoKQorICAgICAgICAjIHdpbGwgZ2V0IHRyZWF0ZWQgbGlrZSBhIHBpY2tsZSwgYW5kIGJ5cGFzcyB0aGUgbm9ybWFsIHNhbml0eQorICAgICAgICAjIGNoZWNrcyBpbiB0aGUgY29uc3RydWN0b3IuICBUaGlzIGNhbiBjcmVhdGUgaW5zYW5lIG9iamVjdHMuCisgICAgICAgICMgVGhlIGNvbnN0cnVjdG9yIGRvZXNuJ3Qgd2FudCB0byBidXJuIHRoZSB0aW1lIHRvIHZhbGlkYXRlIGFsbAorICAgICAgICAjIGZpZWxkcywgYnV0IGRvZXMgY2hlY2sgdGhlIG1vbnRoIGZpZWxkLiAgVGhpcyBzdG9wcywgZS5nLiwKKyAgICAgICAgIyBkYXRldGltZS5kYXRldGltZSgnMTk5NS0wMy0yNScpIGZyb20geWllbGRpbmcgYW4gaW5zYW5lIG9iamVjdC4KKyAgICAgICAgYmFzZSA9ICcxOTk1LTAzLTI1JworICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhzZWxmLnRoZWNsYXNzLCBkYXRldGltZSk6CisgICAgICAgICAgICBiYXNlID0gYmFzZVs6NF0KKyAgICAgICAgZm9yIG1vbnRoX2J5dGUgaW4gJzknLCBjaHIoMCksIGNocigxMyksICdceGZmJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50aGVjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVs6Ml0gKyBtb250aF9ieXRlICsgYmFzZVszOl0pCisgICAgICAgIGZvciBvcmRfYnl0ZSBpbiByYW5nZSgxLCAxMyk6CisgICAgICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGJsb3cgdXAgYmVjYXVzZSBvZiB0aGUgbW9udGggYnl0ZSBhbG9uZS4gIElmCisgICAgICAgICAgICAjIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzIHRvIGRvIG1vcmUtY2FyZWZ1bCBjaGVja2luZywgaXQgbWF5CisgICAgICAgICAgICAjIGJsb3cgdXAgYmVjYXVzZSBvdGhlciBmaWVsZHMgYXJlIGluc2FuZS4KKyAgICAgICAgICAgIHNlbGYudGhlY2xhc3MoYmFzZVs6Ml0gKyBjaHIob3JkX2J5dGUpICsgYmFzZVszOl0pCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGRhdGV0aW1lIHRlc3RzCisKK2NsYXNzIFN1YmNsYXNzRGF0ZXRpbWUoZGF0ZXRpbWUpOgorICAgIHN1Yl92YXIgPSAxCisKK2NsYXNzIFRlc3REYXRlVGltZShUZXN0RGF0ZSk6CisKKyAgICB0aGVjbGFzcyA9IGRhdGV0aW1lCisKKyAgICBkZWYgdGVzdF9iYXNpY19hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSwgMTIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQueWVhciwgMjAwMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5tb250aCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5kYXksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuaG91ciwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQubWludXRlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnNlY29uZCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5taWNyb3NlY29uZCwgMCkKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2F0dHJpYnV0ZXNfbm9uemVybyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgYWxsIGF0dHJpYnV0ZXMgYXJlIG5vbi16ZXJvIHNvIGJ1Z3MgaW4KKyAgICAgICAgIyBiaXQtc2hpZnRpbmcgYWNjZXNzIHNob3cgdXAuCisgICAgICAgIGR0ID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCAxLCAxMiwgNTksIDU5LCA4MDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnllYXIsIDIwMDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQubW9udGgsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuZGF5LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmhvdXIsIDEyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Lm1pbnV0ZSwgNTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuc2Vjb25kLCA1OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5taWNyb3NlY29uZCwgODAwMCkKKworICAgIGRlZiB0ZXN0X3JvdW5kdHJpcChzZWxmKToKKyAgICAgICAgZm9yIGR0IGluIChzZWxmLnRoZWNsYXNzKDEsIDIsIDMsIDQsIDUsIDYsIDcpLAorICAgICAgICAgICAgICAgICAgIHNlbGYudGhlY2xhc3Mubm93KCkpOgorICAgICAgICAgICAgIyBWZXJpZnkgZHQgLT4gc3RyaW5nIC0+IGRhdGV0aW1lIGlkZW50aXR5LgorICAgICAgICAgICAgcyA9IHJlcHIoZHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCdkYXRldGltZS4nKSkKKyAgICAgICAgICAgIHMgPSBzWzk6XQorICAgICAgICAgICAgZHQyID0gZXZhbChzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdCwgZHQyKQorCisgICAgICAgICAgICAjIFZlcmlmeSBpZGVudGl0eSB2aWEgcmVjb25zdHJ1Y3RpbmcgZnJvbSBwaWVjZXMuCisgICAgICAgICAgICBkdDIgPSBzZWxmLnRoZWNsYXNzKGR0LnllYXIsIGR0Lm1vbnRoLCBkdC5kYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0LmhvdXIsIGR0Lm1pbnV0ZSwgZHQuc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdC5taWNyb3NlY29uZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIGR0MikKKworICAgIGRlZiB0ZXN0X2lzb2Zvcm1hdChzZWxmKToKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMiwgMywgMiwgNCwgNSwgMSwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICAgICIwMDAyLTAzLTAyVDA0OjA1OjAxLjAwMDEyMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoJ1QnKSwgIjAwMDItMDMtMDJUMDQ6MDU6MDEuMDAwMTIzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgnICcpLCAiMDAwMi0wMy0wMiAwNDowNTowMS4wMDAxMjMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCdceDAwJyksICIwMDAyLTAzLTAyXHgwMDA0OjA1OjAxLjAwMDEyMyIpCisgICAgICAgICMgc3RyIGlzIElTTyBmb3JtYXQgd2l0aCB0aGUgc2VwYXJhdG9yIGZvcmNlZCB0byBhIGJsYW5rLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0KSwgIjAwMDItMDMtMDIgMDQ6MDU6MDEuMDAwMTIzIikKKworICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygyLCAzLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICAgICIwMDAyLTAzLTAyVDAwOjAwOjAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgnVCcpLCAiMDAwMi0wMy0wMlQwMDowMDowMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoJyAnKSwgIjAwMDItMDMtMDIgMDA6MDA6MDAiKQorICAgICAgICAjIHN0ciBpcyBJU08gZm9ybWF0IHdpdGggdGhlIHNlcGFyYXRvciBmb3JjZWQgdG8gYSBibGFuay4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodCksICIwMDAyLTAzLTAyIDAwOjAwOjAwIikKKworICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzKDIwMDcsIDksIDEwLCA0LCA1LCAxLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuX19mb3JtYXRfXygnJyksIHN0cihkdCkpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IGEgZGVyaXZlZCBjbGFzcydzIF9fc3RyX18oKSBnZXRzIGNhbGxlZAorICAgICAgICBjbGFzcyBBKHNlbGYudGhlY2xhc3MpOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdBJworICAgICAgICBhID0gQSgyMDA3LCA5LCAxMCwgNCwgNSwgMSwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19mb3JtYXRfXygnJyksICdBJykKKworICAgICAgICAjIGNoZWNrIHRoYXQgYSBkZXJpdmVkIGNsYXNzJ3Mgc3RyZnRpbWUgZ2V0cyBjYWxsZWQKKyAgICAgICAgY2xhc3MgQihzZWxmLnRoZWNsYXNzKToKKyAgICAgICAgICAgIGRlZiBzdHJmdGltZShzZWxmLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuICdCJworICAgICAgICBiID0gQigyMDA3LCA5LCAxMCwgNCwgNSwgMSwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuX19mb3JtYXRfXygnJyksIHN0cihkdCkpCisKKyAgICAgICAgZm9yIGZtdCBpbiBbIm06JW0gZDolZCB5OiV5IiwKKyAgICAgICAgICAgICAgICAgICAgIm06JW0gZDolZCB5OiV5IEg6JUggTTolTSBTOiVTIiwKKyAgICAgICAgICAgICAgICAgICAgIiV6ICVaIiwKKyAgICAgICAgICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuX19mb3JtYXRfXyhmbXQpLCBkdC5zdHJmdGltZShmbXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZm9ybWF0X18oZm10KSwgZHQuc3RyZnRpbWUoZm10KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5fX2Zvcm1hdF9fKGZtdCksICdCJykKKworICAgIGRlZiB0ZXN0X21vcmVfY3RpbWUoc2VsZik6CisgICAgICAgICMgVGVzdCBmaWVsZHMgdGhhdCBUZXN0RGF0ZSBkb2Vzbid0IHRvdWNoLgorICAgICAgICBpbXBvcnQgdGltZQorCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDIsIDE4LCAzLCA1LCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5jdGltZSgpLCAiU2F0IE1hciAgMiAxODowMzowNSAyMDAyIikKKyAgICAgICAgIyBPb3BzISAgVGhlIG5leHQgbGluZSBmYWlscyBvbiBXaW4ySyB1bmRlciBNU1ZDIDYsIHNvIGl0J3MgY29tbWVudGVkCisgICAgICAgICMgb3V0LiAgVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCB0LmN0aW1lKCkgcHJvZHVjZXMgIiAyIiBmb3IgdGhlIGRheSwKKyAgICAgICAgIyBidXQgcGxhdGZvcm0gY3RpbWUoKSBwcm9kdWNlcyAiMDIiIGZvciB0aGUgZGF5LiAgQWNjb3JkaW5nIHRvCisgICAgICAgICMgQzk5LCB0LmN0aW1lKCkgaXMgY29ycmVjdCBoZXJlLgorICAgICAgICAjIHNlbGYuYXNzZXJ0RXF1YWwodC5jdGltZSgpLCB0aW1lLmN0aW1lKHRpbWUubWt0aW1lKHQudGltZXR1cGxlKCkpKSkKKworICAgICAgICAjIFNvIHRlc3QgYSBjYXNlIHdoZXJlIHRoYXQgZGlmZmVyZW5jZSBkb2Vzbid0IG1hdHRlci4KKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMjIsIDE4LCAzLCA1LCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5jdGltZSgpLCB0aW1lLmN0aW1lKHRpbWUubWt0aW1lKHQudGltZXR1cGxlKCkpKSkKKworICAgIGRlZiB0ZXN0X3R6X2luZGVwZW5kZW50X2NvbXBhcmluZyhzZWxmKToKKyAgICAgICAgZHQxID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCAxLCA5LCAwLCAwKQorICAgICAgICBkdDIgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEsIDEwLCAwLCAwKQorICAgICAgICBkdDMgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEsIDksIDAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQxLCBkdDMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdDIgPiBkdDMpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgY29tcGFyaXNvbiBkb2Vzbid0IGZvcmdldCBtaWNyb3NlY29uZHMsIGFuZCBpc24ndCBkb25lCisgICAgICAgICMgdmlhIGNvbXBhcmluZyBhIGZsb2F0IHRpbWVzdGFtcCAoYW4gSUVFRSBkb3VibGUgZG9lc24ndCBoYXZlIGVub3VnaAorICAgICAgICAjIHByZWNpc2lvbiB0byBzcGFuIG1pY3Jvc2Vjb25kIHJlc29sdXRpb24gYWNyb3NzIHllYXJzIDEgdGhydSA5OTk5LAorICAgICAgICAjIHNvIGNvbXBhcmluZyB2aWEgdGltZXN0YW1wIG5lY2Vzc2FyaWx5IGNhbGxzIHNvbWUgZGlzdGluY3QgdmFsdWVzCisgICAgICAgICMgZXF1YWwpLgorICAgICAgICBkdDEgPSBzZWxmLnRoZWNsYXNzKE1BWFlFQVIsIDEyLCAzMSwgMjMsIDU5LCA1OSwgOTk5OTk4KQorICAgICAgICB1cyA9IHRpbWVkZWx0YShtaWNyb3NlY29uZHM9MSkKKyAgICAgICAgZHQyID0gZHQxICsgdXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIgLSBkdDEsIHVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZHQxIDwgZHQyKQorCisgICAgZGVmIHRlc3Rfc3RyZnRpbWVfd2l0aF9iYWRfdHpuYW1lX3JlcGxhY2Uoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IG9rIGlmIHR6aW5mby50em5hbWUoKS5yZXBsYWNlKCkgcmV0dXJucyBhIG5vbi1zdHJpbmcKKyAgICAgICAgY2xhc3MgTXlUekluZm8oRml4ZWRPZmZzZXQpOgorICAgICAgICAgICAgZGVmIHR6bmFtZShzZWxmLCBkdCk6CisgICAgICAgICAgICAgICAgY2xhc3MgTXlTdHIoc3RyKToKKyAgICAgICAgICAgICAgICAgICAgZGVmIHJlcGxhY2Uoc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICAgICByZXR1cm4gTXlTdHIoJ25hbWUnKQorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygyMDA1LCAzLCAyLCAwLCAwLCAwLCAwLCBNeVR6SW5mbygzLCAnbmFtZScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuc3RyZnRpbWUsICclWicpCisKKyAgICBkZWYgdGVzdF9iYWRfY29uc3RydWN0b3JfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICAjIGJhZCB5ZWFycworICAgICAgICBzZWxmLnRoZWNsYXNzKE1JTllFQVIsIDEsIDEpICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKE1BWFlFQVIsIDEsIDEpICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCBNSU5ZRUFSLTEsIDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIE1BWFlFQVIrMSwgMSwgMSkKKyAgICAgICAgIyBiYWQgbW9udGhzCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMSwgMSkgICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxMiwgMSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAwLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxMywgMSkKKyAgICAgICAgIyBiYWQgZGF5cworICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDIsIDI5KSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwNCwgMiwgMjkpICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcygyNDAwLCAyLCAyOSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAyLCAzMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMSwgMiwgMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIxMDAsIDIsIDI5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAxOTAwLCAyLCAyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMSwgMzIpCisgICAgICAgICMgYmFkIGhvdXJzCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMSwgMzEsIDApICAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMSwgMzEsIDIzKSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDEsIDMxLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMSwgMzEsIDI0KQorICAgICAgICAjIGJhZCBtaW51dGVzCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMSwgMzEsIDIzLCAwKSAgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEsIDMxLCAyMywgNTkpICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMSwgMzEsIDIzLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMSwgMzEsIDIzLCA2MCkKKyAgICAgICAgIyBiYWQgc2Vjb25kcworICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEsIDMxLCAyMywgNTksIDApICAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMSwgMzEsIDIzLCA1OSwgNTkpICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMSwgMzEsIDIzLCA1OSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDEsIDMxLCAyMywgNTksIDYwKQorICAgICAgICAjIGJhZCBtaWNyb3NlY29uZHMKKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxLCAzMSwgMjMsIDU5LCA1OSwgMCkgICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxLCAzMSwgMjMsIDU5LCA1OSwgOTk5OTk5KSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDAsIDEsIDMxLCAyMywgNTksIDU5LCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMCwgMSwgMzEsIDIzLCA1OSwgNTksCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDApCisKKyAgICBkZWYgdGVzdF9oYXNoX2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBkID0gc2VsZi50aGVjbGFzcygyMDAwLCAxMiwgMzEsIDIzLCAzMCwgMTcpCisgICAgICAgIGUgPSBzZWxmLnRoZWNsYXNzKDIwMDAsIDEyLCAzMSwgMjMsIDMwLCAxNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZCksIGhhc2goZSkpCisKKyAgICAgICAgZGljID0ge2Q6IDF9CisgICAgICAgIGRpY1tlXSA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWNbZF0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2VdLCAyKQorCisgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDEsICAxLCAgMSwgIDAsICA1LCAxNykKKyAgICAgICAgZSA9IHNlbGYudGhlY2xhc3MoMjAwMSwgIDEsICAxLCAgMCwgIDUsIDE3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChkKSwgaGFzaChlKSkKKworICAgICAgICBkaWMgPSB7ZDogMX0KKyAgICAgICAgZGljW2VdID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tkXSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWNbZV0sIDIpCisKKyAgICBkZWYgdGVzdF9jb21wdXRhdGlvbnMoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDEsIDMxKQorICAgICAgICBiID0gc2VsZi50aGVjbGFzcygxOTU2LCAxLCAzMSkKKyAgICAgICAgZGlmZiA9IGEtYgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmYuZGF5cywgNDYqMzY1ICsgbGVuKHJhbmdlKDE5NTYsIDIwMDIsIDQpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWZmLnNlY29uZHMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZi5taWNyb3NlY29uZHMsIDApCisgICAgICAgIGEgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDIsIDE3LCA2KQorICAgICAgICBtaWxsaXNlYyA9IHRpbWVkZWx0YSgwLCAwLCAxMDAwKQorICAgICAgICBob3VyID0gdGltZWRlbHRhKDAsIDM2MDApCisgICAgICAgIGRheSA9IHRpbWVkZWx0YSgxKQorICAgICAgICB3ZWVrID0gdGltZWRlbHRhKDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSArIGhvdXIsIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMiwgMTgsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvdXIgKyBhLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDIsIDE4LCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgMTAqaG91ciwgc2VsZi50aGVjbGFzcygyMDAyLCAzLCAzLCAzLCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gaG91ciwgc2VsZi50aGVjbGFzcygyMDAyLCAzLCAyLCAxNiwgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLWhvdXIgKyBhLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDIsIDE2LCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gaG91ciwgYSArIC1ob3VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAyMCpob3VyLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEsIDIxLCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgZGF5LCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDMsIDE3LCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gZGF5LCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEsIDE3LCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgd2Vlaywgc2VsZi50aGVjbGFzcygyMDAyLCAzLCA5LCAxNywgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIHdlZWssIHNlbGYudGhlY2xhc3MoMjAwMiwgMiwgMjMsIDE3LCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgNTIqd2Vlaywgc2VsZi50aGVjbGFzcygyMDAzLCAzLCAxLCAxNywgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIDUyKndlZWssIHNlbGYudGhlY2xhc3MoMjAwMSwgMywgMywgMTcsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhICsgd2VlaykgLSBhLCB3ZWVrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhICsgZGF5KSAtIGEsIGRheSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSArIGhvdXIpIC0gYSwgaG91cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSArIG1pbGxpc2VjKSAtIGEsIG1pbGxpc2VjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhIC0gd2VlaykgLSBhLCAtd2VlaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSAtIGRheSkgLSBhLCAtZGF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhIC0gaG91cikgLSBhLCAtaG91cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSAtIG1pbGxpc2VjKSAtIGEsIC1taWxsaXNlYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgKyB3ZWVrKSwgLXdlZWspCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhICsgZGF5KSwgLWRheSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgKyBob3VyKSwgLWhvdXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhICsgbWlsbGlzZWMpLCAtbWlsbGlzZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhIC0gd2VlayksIHdlZWspCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhIC0gZGF5KSwgZGF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAoYSAtIGhvdXIpLCBob3VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAoYSAtIG1pbGxpc2VjKSwgbWlsbGlzZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSArICh3ZWVrICsgZGF5ICsgaG91ciArIG1pbGxpc2VjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEwLCAxOCwgNiwgMCwgMTAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSArICh3ZWVrICsgZGF5ICsgaG91ciArIG1pbGxpc2VjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKChhICsgd2VlaykgKyBkYXkpICsgaG91cikgKyBtaWxsaXNlYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKHdlZWsgKyBkYXkgKyBob3VyICsgbWlsbGlzZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMiwgMiwgMjIsIDE2LCA1LCA1OSwgOTk5MDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKHdlZWsgKyBkYXkgKyBob3VyICsgbWlsbGlzZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKGEgLSB3ZWVrKSAtIGRheSkgLSBob3VyKSAtIG1pbGxpc2VjKQorICAgICAgICAjIEFkZC9zdWIgaW50cywgbG9uZ3MsIGZsb2F0cyBzaG91bGQgYmUgaWxsZWdhbAorICAgICAgICBmb3IgaSBpbiAxLCAxTCwgMS4wOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEraSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhLWkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogaSthKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGktYSkKKworICAgICAgICAjIGRlbHRhIC0gZGF0ZXRpbWUgaXMgc2Vuc2VsZXNzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogZGF5IC0gYSkKKyAgICAgICAgIyBtaXhpbmcgZGF0ZXRpbWUgYW5kIChkZWx0YSBvciBkYXRldGltZSkgdmlhICogb3IgLy8gaXMgc2Vuc2VsZXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBkYXkgKiBhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSAqIGRheSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGRheSAvLyBhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSAvLyBkYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhICogYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgLy8gYSkKKyAgICAgICAgIyBkYXRldGltZSArIGRhdGV0aW1lIGlzIHNlbnNlbGVzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSArIGEpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKKyAgICAgICAgYXJncyA9IDYsIDcsIDIzLCAyMCwgNTksIDEsIDY0KioyCisgICAgICAgIG9yaWcgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKKyAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKKyAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcsIGRlcml2ZWQpCisKKyAgICBkZWYgdGVzdF9tb3JlX3BpY2tsaW5nKHNlbGYpOgorICAgICAgICBhID0gc2VsZi50aGVjbGFzcygyMDAzLCAyLCA3LCAxNiwgNDgsIDM3LCA0NDQxMTYpCisgICAgICAgIHMgPSBwaWNrbGUuZHVtcHMoYSkKKyAgICAgICAgYiA9IHBpY2tsZS5sb2FkcyhzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIueWVhciwgMjAwMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLm1vbnRoLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZGF5LCA3KQorCisgICAgZGVmIHRlc3RfcGlja2xpbmdfc3ViY2xhc3NfZGF0ZXRpbWUoc2VsZik6CisgICAgICAgIGFyZ3MgPSA2LCA3LCAyMywgMjAsIDU5LCAxLCA2NCoqMgorICAgICAgICBvcmlnID0gU3ViY2xhc3NEYXRldGltZSgqYXJncykKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCisgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQorCisgICAgZGVmIHRlc3RfbW9yZV9jb21wYXJlKHNlbGYpOgorICAgICAgICAjIFRoZSB0ZXN0X2NvbXBhcmUoKSBpbmhlcml0ZWQgZnJvbSBUZXN0RGF0ZSBjb3ZlcnMgdGhlIGVycm9yIGNhc2VzLgorICAgICAgICAjIFdlIGp1c3Qgd2FudCB0byB0ZXN0IGxleGljb2dyYXBoaWMgb3JkZXJpbmcgb24gdGhlIG1lbWJlcnMgZGF0ZXRpbWUKKyAgICAgICAgIyBoYXMgdGhhdCBkYXRlIGxhY2tzLgorICAgICAgICBhcmdzID0gWzIwMDAsIDExLCAyOSwgMjAsIDU4LCAxNiwgOTk5OTk4XQorICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCisgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID09IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSAhPSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA8IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQxLCB0MiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQyLCB0MSksIDApCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGFyZ3MpKToKKyAgICAgICAgICAgIG5ld2FyZ3MgPSBhcmdzWzpdCisgICAgICAgICAgICBuZXdhcmdzW2ldID0gYXJnc1tpXSArIDEKKyAgICAgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygqbmV3YXJncykgICAjIHRoaXMgaXMgbGFyZ2VyIHRoYW4gdDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID4gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPj0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgIT0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgIT0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID09IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA9PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPCB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPj0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDw9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDEsIHQyKSwgLTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MiwgdDEpLCAxKQorCisKKyAgICAjIEEgaGVscGVyIGZvciB0aW1lc3RhbXAgY29uc3RydWN0b3IgdGVzdHMuCisgICAgZGVmIHZlcmlmeV9maWVsZF9lcXVhbGl0eShzZWxmLCBleHBlY3RlZCwgZ290KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZC50bV95ZWFyLCBnb3QueWVhcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZC50bV9tb24sIGdvdC5tb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZC50bV9tZGF5LCBnb3QuZGF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLnRtX2hvdXIsIGdvdC5ob3VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLnRtX21pbiwgZ290Lm1pbnV0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZC50bV9zZWMsIGdvdC5zZWNvbmQpCisKKyAgICBkZWYgdGVzdF9mcm9tdGltZXN0YW1wKHNlbGYpOgorICAgICAgICBpbXBvcnQgdGltZQorCisgICAgICAgIHRzID0gdGltZS50aW1lKCkKKyAgICAgICAgZXhwZWN0ZWQgPSB0aW1lLmxvY2FsdGltZSh0cykKKyAgICAgICAgZ290ID0gc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKHRzKQorICAgICAgICBzZWxmLnZlcmlmeV9maWVsZF9lcXVhbGl0eShleHBlY3RlZCwgZ290KQorCisgICAgZGVmIHRlc3RfdXRjZnJvbXRpbWVzdGFtcChzZWxmKToKKyAgICAgICAgaW1wb3J0IHRpbWUKKworICAgICAgICB0cyA9IHRpbWUudGltZSgpCisgICAgICAgIGV4cGVjdGVkID0gdGltZS5nbXRpbWUodHMpCisgICAgICAgIGdvdCA9IHNlbGYudGhlY2xhc3MudXRjZnJvbXRpbWVzdGFtcCh0cykKKyAgICAgICAgc2VsZi52ZXJpZnlfZmllbGRfZXF1YWxpdHkoZXhwZWN0ZWQsIGdvdCkKKworICAgIGRlZiB0ZXN0X21pY3Jvc2Vjb25kX3JvdW5kaW5nKHNlbGYpOgorICAgICAgICAjIFRlc3Qgd2hldGhlciBmcm9tdGltZXN0YW1wICJyb3VuZHMgdXAiIGZsb2F0cyB0aGF0IGFyZSBsZXNzCisgICAgICAgICMgdGhhbiBvbmUgbWljcm9zZWNvbmQgc21hbGxlciB0aGFuIGFuIGludGVnZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKDAuOTk5OTk5OSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKDEpKQorCisgICAgZGVmIHRlc3RfaW5zYW5lX2Zyb210aW1lc3RhbXAoc2VsZik6CisgICAgICAgICMgSXQncyBwb3NzaWJsZSB0aGF0IHNvbWUgcGxhdGZvcm0gbWFwcyB0aW1lX3QgdG8gZG91YmxlLAorICAgICAgICAjIGFuZCB0aGF0IHRoaXMgdGVzdCB3aWxsIGZhaWwgdGhlcmUuICBUaGlzIHRlc3Qgc2hvdWxkCisgICAgICAgICMgZXhlbXB0IHN1Y2ggcGxhdGZvcm1zIChwcm92aWRlZCB0aGV5IHJldHVybiByZWFzb25hYmxlCisgICAgICAgICMgcmVzdWx0cyEpLgorICAgICAgICBmb3IgaW5zYW5lIGluIC0xZTIwMCwgMWUyMDA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLmZyb210aW1lc3RhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNhbmUpCisKKyAgICBkZWYgdGVzdF9pbnNhbmVfdXRjZnJvbXRpbWVzdGFtcChzZWxmKToKKyAgICAgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgc29tZSBwbGF0Zm9ybSBtYXBzIHRpbWVfdCB0byBkb3VibGUsCisgICAgICAgICMgYW5kIHRoYXQgdGhpcyB0ZXN0IHdpbGwgZmFpbCB0aGVyZS4gIFRoaXMgdGVzdCBzaG91bGQKKyAgICAgICAgIyBleGVtcHQgc3VjaCBwbGF0Zm9ybXMgKHByb3ZpZGVkIHRoZXkgcmV0dXJuIHJlYXNvbmFibGUKKyAgICAgICAgIyByZXN1bHRzISkuCisgICAgICAgIGZvciBpbnNhbmUgaW4gLTFlMjAwLCAxZTIwMDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MudXRjZnJvbXRpbWVzdGFtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2FuZSkKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luZG93cyBkb2Vzbid0IGFjY2VwdCBuZWdhdGl2ZSB0aW1lc3RhbXBzIikKKyAgICBkZWYgdGVzdF9uZWdhdGl2ZV9mbG9hdF9mcm9tdGltZXN0YW1wKHNlbGYpOgorICAgICAgICAjIFRoZSByZXN1bHQgaXMgdHotZGVwZW5kZW50OyBhdCBsZWFzdCB0ZXN0IHRoYXQgdGhpcyBkb2Vzbid0CisgICAgICAgICMgZmFpbCAobGlrZSBpdCBkaWQgYmVmb3JlIGJ1ZyAxNjQ2NzI4IHdhcyBmaXhlZCkuCisgICAgICAgIHNlbGYudGhlY2xhc3MuZnJvbXRpbWVzdGFtcCgtMS4wNSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW5kb3dzIGRvZXNuJ3QgYWNjZXB0IG5lZ2F0aXZlIHRpbWVzdGFtcHMiKQorICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2Zsb2F0X3V0Y2Zyb210aW1lc3RhbXAoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzLnV0Y2Zyb210aW1lc3RhbXAoLTEuMDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgc2VsZi50aGVjbGFzcygxOTY5LCAxMiwgMzEsIDIzLCA1OSwgNTgsIDk1MDAwMCkpCisKKyAgICBkZWYgdGVzdF91dGNub3coc2VsZik6CisgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgIyBDYWxsIGl0IGEgc3VjY2VzcyBpZiB1dGNub3coKSBhbmQgdXRjZnJvbXRpbWVzdGFtcCgpIGFyZSB3aXRoaW4KKyAgICAgICAgIyBhIHNlY29uZCBvZiBlYWNoIG90aGVyLgorICAgICAgICB0b2xlcmFuY2UgPSB0aW1lZGVsdGEoc2Vjb25kcz0xKQorICAgICAgICBmb3IgZHVtbXkgaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICBmcm9tX25vdyA9IHNlbGYudGhlY2xhc3MudXRjbm93KCkKKyAgICAgICAgICAgIGZyb21fdGltZXN0YW1wID0gc2VsZi50aGVjbGFzcy51dGNmcm9tdGltZXN0YW1wKHRpbWUudGltZSgpKQorICAgICAgICAgICAgaWYgYWJzKGZyb21fdGltZXN0YW1wIC0gZnJvbV9ub3cpIDw9IHRvbGVyYW5jZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgIyBFbHNlIHRyeSBhZ2FpbiBhIGZldyB0aW1lcy4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFicyhmcm9tX3RpbWVzdGFtcCAtIGZyb21fbm93KSA8PSB0b2xlcmFuY2UpCisKKyAgICBkZWYgdGVzdF9zdHJwdGltZShzZWxmKToKKyAgICAgICAgaW1wb3J0IF9zdHJwdGltZQorCisgICAgICAgIHN0cmluZyA9ICcyMDA0LTEyLTAxIDEzOjAyOjQ3LjE5NycKKyAgICAgICAgZm9ybWF0ID0gJyVZLSVtLSVkICVIOiVNOiVTLiVmJworICAgICAgICByZXN1bHQsIGZyYWMgPSBfc3RycHRpbWUuX3N0cnB0aW1lKHN0cmluZywgZm9ybWF0KQorICAgICAgICBleHBlY3RlZCA9IHNlbGYudGhlY2xhc3MoKihyZXN1bHRbMDo2XSsoZnJhYywpKSkKKyAgICAgICAgZ290ID0gc2VsZi50aGVjbGFzcy5zdHJwdGltZShzdHJpbmcsIGZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorCisgICAgZGVmIHRlc3RfbW9yZV90aW1ldHVwbGUoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0cyBmaWVsZHMgYmV5b25kIHRob3NlIHRlc3RlZCBieSB0aGUgVGVzdERhdGUudGVzdF90aW1ldHVwbGUuCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIwMDQsIDEyLCAzMSwgNiwgMjIsIDMzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudGltZXR1cGxlKCksICgyMDA0LCAxMiwgMzEsIDYsIDIyLCAzMywgNCwgMzY2LCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50aW1ldHVwbGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodC55ZWFyLCB0Lm1vbnRoLCB0LmRheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdC5ob3VyLCB0Lm1pbnV0ZSwgdC5zZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHQud2Vla2RheSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRvb3JkaW5hbCgpIC0gZGF0ZSh0LnllYXIsIDEsIDEpLnRvb3JkaW5hbCgpICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpKQorICAgICAgICB0dCA9IHQudGltZXR1cGxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dC50bV95ZWFyLCB0LnllYXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHQudG1fbW9uLCB0Lm1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0LnRtX21kYXksIHQuZGF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0LnRtX2hvdXIsIHQuaG91cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dC50bV9taW4sIHQubWludXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0LnRtX3NlYywgdC5zZWNvbmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHQudG1fd2RheSwgdC53ZWVrZGF5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHQudG1feWRheSwgdC50b29yZGluYWwoKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSh0LnllYXIsIDEsIDEpLnRvb3JkaW5hbCgpICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dC50bV9pc2RzdCwgLTEpCisKKyAgICBkZWYgdGVzdF9tb3JlX3N0cmZ0aW1lKHNlbGYpOgorICAgICAgICAjIFRoaXMgdGVzdHMgZmllbGRzIGJleW9uZCB0aG9zZSB0ZXN0ZWQgYnkgdGhlIFRlc3REYXRlLnRlc3Rfc3RyZnRpbWUuCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIwMDQsIDEyLCAzMSwgNiwgMjIsIDMzLCA0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0cmZ0aW1lKCIlbSAlZCAleSAlZiAlUyAlTSAlSCAlaiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEyIDMxIDA0IDAwMDA0NyAzMyAyMiAwNiAzNjYiKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdChzZWxmKToKKyAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDQsIDE4LCA0NSwgMywgMTIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5kYXRlKCksIGRhdGUoMjAwMiwgMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQudGltZSgpLCB0aW1lKDE4LCA0NSwgMywgMTIzNCkpCisKKyAgICBkZWYgdGVzdF9jb21iaW5lKHNlbGYpOgorICAgICAgICBkID0gZGF0ZSgyMDAyLCAzLCA0KQorICAgICAgICB0ID0gdGltZSgxOCwgNDUsIDMsIDEyMzQpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCA0LCAxOCwgNDUsIDMsIDEyMzQpCisgICAgICAgIGNvbWJpbmUgPSBzZWxmLnRoZWNsYXNzLmNvbWJpbmUKKyAgICAgICAgZHQgPSBjb21iaW5lKGQsIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIGV4cGVjdGVkKQorCisgICAgICAgIGR0ID0gY29tYmluZSh0aW1lPXQsIGRhdGU9ZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdCwgZXhwZWN0ZWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkdC5kYXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgZHQudGltZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCBjb21iaW5lKGR0LmRhdGUoKSwgZHQudGltZSgpKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbWJpbmUpICMgbmVlZCBhbiBhcmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5lLCBkKSAjIG5lZWQgdHdvIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5lLCB0LCBkKSAjIGFyZ3MgcmV2ZXJzZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5lLCBkLCB0LCAxKSAjIHRvbyBtYW55IGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5lLCAiZGF0ZSIsICJ0aW1lIikgIyB3cm9uZyB0eXBlcworCisgICAgZGVmIHRlc3RfcmVwbGFjZShzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworICAgICAgICBhcmdzID0gWzEsIDIsIDMsIDQsIDUsIDYsIDddCisgICAgICAgIGJhc2UgPSBjbHMoKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZSwgYmFzZS5yZXBsYWNlKCkpCisKKyAgICAgICAgaSA9IDAKKyAgICAgICAgZm9yIG5hbWUsIG5ld3ZhbCBpbiAoKCJ5ZWFyIiwgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibW9udGgiLCAzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJkYXkiLCA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJob3VyIiwgNSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibWludXRlIiwgNiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgic2Vjb25kIiwgNyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibWljcm9zZWNvbmQiLCA4KSk6CisgICAgICAgICAgICBuZXdhcmdzID0gYXJnc1s6XQorICAgICAgICAgICAgbmV3YXJnc1tpXSA9IG5ld3ZhbAorICAgICAgICAgICAgZXhwZWN0ZWQgPSBjbHMoKm5ld2FyZ3MpCisgICAgICAgICAgICBnb3QgPSBiYXNlLnJlcGxhY2UoKip7bmFtZTogbmV3dmFsfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKyAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgICMgT3V0IG9mIGJvdW5kcy4KKyAgICAgICAgYmFzZSA9IGNscygyMDAwLCAyLCAyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCB5ZWFyPTIwMDEpCisKKyAgICBkZWYgdGVzdF9hc3RpbWV6b25lKHNlbGYpOgorICAgICAgICAjIFByZXR0eSBib3JpbmchICBUaGUgVFogdGVzdCBpcyBtb3JlIGludGVyZXN0aW5nIGhlcmUuICBhc3RpbWV6b25lKCkKKyAgICAgICAgIyBzaW1wbHkgY2FuJ3QgYmUgYXBwbGllZCB0byBhIG5haXZlIG9iamVjdC4KKyAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzLm5vdygpCisgICAgICAgIGYgPSBGaXhlZE9mZnNldCg0NCwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZHQuYXN0aW1lem9uZSkgIyBub3QgZW5vdWdoIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkdC5hc3RpbWV6b25lLCBmLCBmKSAjIHRvbyBtYW55IGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkdC5hc3RpbWV6b25lLCBkdCkgIyBhcmcgd3JvbmcgdHlwZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkdC5hc3RpbWV6b25lLCBmKSAjIG5haXZlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGR0LmFzdGltZXpvbmUsIHR6PWYpICAjIG5haXZlCisKKyAgICAgICAgY2xhc3MgQm9ndXModHppbmZvKToKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gTm9uZQorICAgICAgICAgICAgZGVmIGRzdChzZWxmLCBkdCk6IHJldHVybiB0aW1lZGVsdGEoMCkKKyAgICAgICAgYm9nID0gQm9ndXMoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkdC5hc3RpbWV6b25lLCBib2cpICAgIyBuYWl2ZQorCisgICAgICAgIGNsYXNzIEFsc29Cb2d1cyh0emluZm8pOgorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6IHJldHVybiB0aW1lZGVsdGEoMCkKKyAgICAgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOiByZXR1cm4gTm9uZQorICAgICAgICBhbHNvYm9nID0gQWxzb0JvZ3VzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZHQuYXN0aW1lem9uZSwgYWxzb2JvZykgIyBhbHNvIG5haXZlCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc19kYXRldGltZShzZWxmKToKKworICAgICAgICBjbGFzcyBDKHNlbGYudGhlY2xhc3MpOgorICAgICAgICAgICAgdGhlQW5zd2VyID0gNDIKKworICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd3MpOgorICAgICAgICAgICAgICAgIHRlbXAgPSBrd3MuY29weSgpCisgICAgICAgICAgICAgICAgZXh0cmEgPSB0ZW1wLnBvcCgnZXh0cmEnKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYudGhlY2xhc3MuX19uZXdfXyhjbHMsICphcmdzLCAqKnRlbXApCisgICAgICAgICAgICAgICAgcmVzdWx0LmV4dHJhID0gZXh0cmEKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgICAgIGRlZiBuZXdtZXRoKHNlbGYsIHN0YXJ0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQgKyBzZWxmLnllYXIgKyBzZWxmLm1vbnRoICsgc2VsZi5zZWNvbmQKKworICAgICAgICBhcmdzID0gMjAwMywgNCwgMTQsIDEyLCAxMywgNDEKKworICAgICAgICBkdDEgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBkdDIgPSBDKCphcmdzLCAqKnsnZXh0cmEnOiA3fSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5fX2NsYXNzX18sIEMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLnRoZUFuc3dlciwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLmV4dHJhLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MS50b29yZGluYWwoKSwgZHQyLnRvb3JkaW5hbCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5uZXdtZXRoKC03KSwgZHQxLnllYXIgKyBkdDEubW9udGggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHQxLnNlY29uZCAtIDcpCisKK2NsYXNzIFN1YmNsYXNzVGltZSh0aW1lKToKKyAgICBzdWJfdmFyID0gMQorCitjbGFzcyBUZXN0VGltZShIYXJtbGVzc01peGVkQ29tcGFyaXNvbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgdGhlY2xhc3MgPSB0aW1lCisKKyAgICBkZWYgdGVzdF9iYXNpY19hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygxMiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmhvdXIsIDEyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWludXRlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2Vjb25kLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWljcm9zZWNvbmQsIDApCisKKyAgICBkZWYgdGVzdF9iYXNpY19hdHRyaWJ1dGVzX25vbnplcm8oc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGFsbCBhdHRyaWJ1dGVzIGFyZSBub24temVybyBzbyBidWdzIGluCisgICAgICAgICMgYml0LXNoaWZ0aW5nIGFjY2VzcyBzaG93IHVwLgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygxMiwgNTksIDU5LCA4MDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaG91ciwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5taW51dGUsIDU5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2Vjb25kLCA1OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm1pY3Jvc2Vjb25kLCA4MDAwKQorCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwKHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0KQorCisgICAgICAgICMgVmVyaWZ5IHQgLT4gc3RyaW5nIC0+IHRpbWUgaWRlbnRpdHkuCisgICAgICAgIHMgPSByZXByKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoJ2RhdGV0aW1lLicpKQorICAgICAgICBzID0gc1s5Ol0KKyAgICAgICAgdDIgPSBldmFsKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdDIpCisKKyAgICAgICAgIyBWZXJpZnkgaWRlbnRpdHkgdmlhIHJlY29uc3RydWN0aW5nIGZyb20gcGllY2VzLgorICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3ModC5ob3VyLCB0Lm1pbnV0ZSwgdC5zZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1pY3Jvc2Vjb25kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHQyKQorCisgICAgZGVmIHRlc3RfY29tcGFyaW5nKHNlbGYpOgorICAgICAgICBhcmdzID0gWzEsIDIsIDMsIDRdCisgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygqYXJncykKKyAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID49IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxICE9IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxIDwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDEsIHQyKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAodDIsIHQxKSwgMCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oYXJncykpOgorICAgICAgICAgICAgbmV3YXJncyA9IGFyZ3NbOl0KKyAgICAgICAgICAgIG5ld2FyZ3NbaV0gPSBhcmdzW2ldICsgMQorICAgICAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKCpuZXdhcmdzKSAgICMgdGhpcyBpcyBsYXJnZXIgdGhhbiB0MQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPiB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSAhPSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiAhPSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPT0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyID09IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPD0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcCh0MSwgdDIpLCAtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHQyLCB0MSksIDEpCisKKyAgICAgICAgZm9yIGJhZGFyZyBpbiBPVEhFUlNUVUZGOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSA9PSBiYWRhcmcsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSAhPSBiYWRhcmcsIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZGFyZyA9PSB0MSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZGFyZyAhPSB0MSwgVHJ1ZSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxIDw9IGJhZGFyZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA8IGJhZGFyZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA+IGJhZGFyZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA+PSBiYWRhcmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnIDw9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGJhZGFyZyA8IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGJhZGFyZyA+IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGJhZGFyZyA+PSB0MSkKKworICAgIGRlZiB0ZXN0X2JhZF9jb25zdHJ1Y3Rvcl9hcmd1bWVudHMoc2VsZik6CisgICAgICAgICMgYmFkIGhvdXJzCisgICAgICAgIHNlbGYudGhlY2xhc3MoMCwgMCkgICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcygyMywgMCkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAtMSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjQsIDApCisgICAgICAgICMgYmFkIG1pbnV0ZXMKKyAgICAgICAgc2VsZi50aGVjbGFzcygyMywgMCkgICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcygyMywgNTkpICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjMsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMywgNjApCisgICAgICAgICMgYmFkIHNlY29uZHMKKyAgICAgICAgc2VsZi50aGVjbGFzcygyMywgNTksIDApICAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjMsIDU5LCA1OSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMywgNTksIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMywgNTksIDYwKQorICAgICAgICAjIGJhZCBtaWNyb3NlY29uZHMKKyAgICAgICAgc2VsZi50aGVjbGFzcygyMywgNTksIDU5LCAwKSAgICAgICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcygyMywgNTksIDU5LCA5OTk5OTkpICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjMsIDU5LCA1OSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIzLCA1OSwgNTksIDEwMDAwMDApCisKKyAgICBkZWYgdGVzdF9oYXNoX2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBkID0gc2VsZi50aGVjbGFzcygyMywgMzAsIDE3KQorICAgICAgICBlID0gc2VsZi50aGVjbGFzcygyMywgMzAsIDE3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChkKSwgaGFzaChlKSkKKworICAgICAgICBkaWMgPSB7ZDogMX0KKyAgICAgICAgZGljW2VdID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tkXSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWNbZV0sIDIpCisKKyAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMCwgIDUsIDE3KQorICAgICAgICBlID0gc2VsZi50aGVjbGFzcygwLCAgNSwgMTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGQpLCBoYXNoKGUpKQorCisgICAgICAgIGRpYyA9IHtkOiAxfQorICAgICAgICBkaWNbZV0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2RdLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tlXSwgMikKKworICAgIGRlZiB0ZXN0X2lzb2Zvcm1hdChzZWxmKToKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoNCwgNSwgMSwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICIwNDowNTowMS4wMDAxMjMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKKworICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoKSwgIjAwOjAwOjAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCBzdHIodCkpCisKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MobWljcm9zZWNvbmQ9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAuMDAwMDAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCBzdHIodCkpCisKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MobWljcm9zZWNvbmQ9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoKSwgIjAwOjAwOjAwLjAwMDAxMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoKSwgc3RyKHQpKQorCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKG1pY3Jvc2Vjb25kPTEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAuMDAwMTAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCBzdHIodCkpCisKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MobWljcm9zZWNvbmQ9MTAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAuMDAxMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCBzdHIodCkpCisKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MobWljcm9zZWNvbmQ9MTAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoKSwgIjAwOjAwOjAwLjAxMDAwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoKSwgc3RyKHQpKQorCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKG1pY3Jvc2Vjb25kPTEwMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAuMTAwMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCBzdHIodCkpCisKKyAgICBkZWYgdGVzdF8xNjUzNzM2KHNlbGYpOgorICAgICAgICAjIHZlcmlmeSBpdCBkb2Vzbid0IGFjY2VwdCBleHRyYSBrZXl3b3JkIGFyZ3VtZW50cworICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyhzZWNvbmQ9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Lmlzb2Zvcm1hdCwgZm9vPTMpCisKKyAgICBkZWYgdGVzdF9zdHJmdGltZShzZWxmKToKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMSwgMiwgMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0cmZ0aW1lKCclSCAlTSAlUyAlZicpLCAiMDEgMDIgMDMgMDAwMDA0IikKKyAgICAgICAgIyBBIG5haXZlIG9iamVjdCByZXBsYWNlcyAleiBhbmQgJVogd2l0aCBlbXB0eSBzdHJpbmdzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc3RyZnRpbWUoIicleicgJyVaJyIpLCAiJycgJyciKQorCisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuX19mb3JtYXRfXygnJyksIHN0cih0KSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgYSBkZXJpdmVkIGNsYXNzJ3MgX19zdHJfXygpIGdldHMgY2FsbGVkCisgICAgICAgIGNsYXNzIEEoc2VsZi50aGVjbGFzcyk6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0EnCisgICAgICAgIGEgPSBBKDEsIDIsIDMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2Zvcm1hdF9fKCcnKSwgJ0EnKQorCisgICAgICAgICMgY2hlY2sgdGhhdCBhIGRlcml2ZWQgY2xhc3MncyBzdHJmdGltZSBnZXRzIGNhbGxlZAorICAgICAgICBjbGFzcyBCKHNlbGYudGhlY2xhc3MpOgorICAgICAgICAgICAgZGVmIHN0cmZ0aW1lKHNlbGYsIGZvcm1hdF9zcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0InCisgICAgICAgIGIgPSBCKDEsIDIsIDMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5fX2Zvcm1hdF9fKCcnKSwgc3RyKHQpKQorCisgICAgICAgIGZvciBmbXQgaW4gWyclSCAlTSAlUycsCisgICAgICAgICAgICAgICAgICAgIF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuX19mb3JtYXRfXyhmbXQpLCB0LnN0cmZ0aW1lKGZtdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19mb3JtYXRfXyhmbXQpLCB0LnN0cmZ0aW1lKGZtdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuX19mb3JtYXRfXyhmbXQpLCAnQicpCisKKyAgICBkZWYgdGVzdF9zdHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNlbGYudGhlY2xhc3MoMSwgMiwgMywgNCkpLCAiMDE6MDI6MDMuMDAwMDA0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi50aGVjbGFzcygxMCwgMiwgMywgNDAwMCkpLCAiMTA6MDI6MDMuMDA0MDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi50aGVjbGFzcygwLCAyLCAzLCA0MDAwMDApKSwgIjAwOjAyOjAzLjQwMDAwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNlbGYudGhlY2xhc3MoMTIsIDIsIDMsIDApKSwgIjEyOjAyOjAzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi50aGVjbGFzcygyMywgMTUsIDAsIDApKSwgIjIzOjE1OjAwIikKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIG5hbWUgPSAnZGF0ZXRpbWUuJyArIHNlbGYudGhlY2xhc3MuX19uYW1lX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNlbGYudGhlY2xhc3MoMSwgMiwgMywgNCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIlcygxLCAyLCAzLCA0KSIgJSBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi50aGVjbGFzcygxMCwgMiwgMywgNDAwMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIlcygxMCwgMiwgMywgNDAwMCkiICUgbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNlbGYudGhlY2xhc3MoMCwgMiwgMywgNDAwMDAwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzKDAsIDIsIDMsIDQwMDAwMCkiICUgbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNlbGYudGhlY2xhc3MoMTIsIDIsIDMsIDApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMoMTIsIDIsIDMpIiAlIG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWxmLnRoZWNsYXNzKDIzLCAxNSwgMCwgMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIlcygyMywgMTUpIiAlIG5hbWUpCisKKyAgICBkZWYgdGVzdF9yZXNvbHV0aW9uX2luZm8oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRoZWNsYXNzLm1pbiwgc2VsZi50aGVjbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYudGhlY2xhc3MubWF4LCBzZWxmLnRoZWNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi50aGVjbGFzcy5yZXNvbHV0aW9uLCB0aW1lZGVsdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRoZWNsYXNzLm1heCA+IHNlbGYudGhlY2xhc3MubWluKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIGFyZ3MgPSAyMCwgNTksIDE2LCA2NCoqMgorICAgICAgICBvcmlnID0gc2VsZi50aGVjbGFzcygqYXJncykKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCisgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmdfc3ViY2xhc3NfdGltZShzZWxmKToKKyAgICAgICAgYXJncyA9IDIwLCA1OSwgMTYsIDY0KioyCisgICAgICAgIG9yaWcgPSBTdWJjbGFzc1RpbWUoKmFyZ3MpCisgICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgorICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQorICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKKworICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CisgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNscygxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNscygwLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNscygwLCAwLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNscygwLCAwLCAwLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjbHMoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY2xzKCkpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgorICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisgICAgICAgIGFyZ3MgPSBbMSwgMiwgMywgNF0KKyAgICAgICAgYmFzZSA9IGNscygqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBiYXNlLnJlcGxhY2UoKSkKKworICAgICAgICBpID0gMAorICAgICAgICBmb3IgbmFtZSwgbmV3dmFsIGluICgoImhvdXIiLCA1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtaW51dGUiLCA2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJzZWNvbmQiLCA3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtaWNyb3NlY29uZCIsIDgpKToKKyAgICAgICAgICAgIG5ld2FyZ3MgPSBhcmdzWzpdCisgICAgICAgICAgICBuZXdhcmdzW2ldID0gbmV3dmFsCisgICAgICAgICAgICBleHBlY3RlZCA9IGNscygqbmV3YXJncykKKyAgICAgICAgICAgIGdvdCA9IGJhc2UucmVwbGFjZSgqKntuYW1lOiBuZXd2YWx9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgIyBPdXQgb2YgYm91bmRzLgorICAgICAgICBiYXNlID0gY2xzKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2UucmVwbGFjZSwgaG91cj0yNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBtaW51dGU9LTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2UucmVwbGFjZSwgc2Vjb25kPTEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBtaWNyb3NlY29uZD0xMDAwMDAwKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfdGltZShzZWxmKToKKworICAgICAgICBjbGFzcyBDKHNlbGYudGhlY2xhc3MpOgorICAgICAgICAgICAgdGhlQW5zd2VyID0gNDIKKworICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd3MpOgorICAgICAgICAgICAgICAgIHRlbXAgPSBrd3MuY29weSgpCisgICAgICAgICAgICAgICAgZXh0cmEgPSB0ZW1wLnBvcCgnZXh0cmEnKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYudGhlY2xhc3MuX19uZXdfXyhjbHMsICphcmdzLCAqKnRlbXApCisgICAgICAgICAgICAgICAgcmVzdWx0LmV4dHJhID0gZXh0cmEKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgICAgIGRlZiBuZXdtZXRoKHNlbGYsIHN0YXJ0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQgKyBzZWxmLmhvdXIgKyBzZWxmLnNlY29uZAorCisgICAgICAgIGFyZ3MgPSA0LCA1LCA2CisKKyAgICAgICAgZHQxID0gc2VsZi50aGVjbGFzcygqYXJncykKKyAgICAgICAgZHQyID0gQygqYXJncywgKip7J2V4dHJhJzogN30pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIuX19jbGFzc19fLCBDKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi50aGVBbnN3ZXIsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5leHRyYSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDEuaXNvZm9ybWF0KCksIGR0Mi5pc29mb3JtYXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIubmV3bWV0aCgtNyksIGR0MS5ob3VyICsgZHQxLnNlY29uZCAtIDcpCisKKyAgICBkZWYgdGVzdF9iYWNrZG9vcl9yZXNpc3RhbmNlKHNlbGYpOgorICAgICAgICAjIHNlZSBUZXN0RGF0ZS50ZXN0X2JhY2tkb29yX3Jlc2lzdGFuY2UoKS4KKyAgICAgICAgYmFzZSA9ICcyOjU5LjAnCisgICAgICAgIGZvciBob3VyX2J5dGUgaW4gJyAnLCAnOScsIGNocigyNCksICdceGZmJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50aGVjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG91cl9ieXRlICsgYmFzZVsxOl0pCisKKyMgQSBtaXhpbiBmb3IgY2xhc3NlcyB3aXRoIGEgdHppbmZvPSBhcmd1bWVudC4gIFN1YmNsYXNzZXMgbXVzdCBkZWZpbmUKKyMgdGhlY2xhc3MgYXMgYSBjbGFzcyBhdHJpYnV0ZSwgYW5kIHRoZWNsYXNzKDEsIDEsIDEsIHR6aW5mbz13aGF0ZXZlcikKKyMgbXVzdCBiZSBsZWdpdCAod2hpY2ggaXMgdHJ1ZSBmb3IgdGltZSBhbmQgZGF0ZXRpbWUpLgorY2xhc3MgVFpJbmZvQmFzZToKKworICAgIGRlZiB0ZXN0X2FyZ3VtZW50X3Bhc3Npbmcoc2VsZik6CisgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKKyAgICAgICAgIyBBIGRhdGV0aW1lIHBhc3NlcyBpdHNlbGYgb24sIGEgdGltZSBwYXNzZXMgTm9uZS4KKyAgICAgICAgY2xhc3MgaW50cm9zcGVjdGl2ZSh0emluZm8pOgorICAgICAgICAgICAgZGVmIHR6bmFtZShzZWxmLCBkdCk6ICAgIHJldHVybiBkdCBhbmQgInJlYWwiIG9yICJub25lIgorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVkZWx0YShtaW51dGVzID0gZHQgYW5kIDQyIG9yIC00MikKKyAgICAgICAgICAgIGRzdCA9IHV0Y29mZnNldAorCisgICAgICAgIG9iaiA9IGNscygxLCAyLCAzLCB0emluZm89aW50cm9zcGVjdGl2ZSgpKQorCisgICAgICAgIGV4cGVjdGVkID0gY2xzIGlzIHRpbWUgYW5kICJub25lIiBvciAicmVhbCIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmoudHpuYW1lKCksIGV4cGVjdGVkKQorCisgICAgICAgIGV4cGVjdGVkID0gdGltZWRlbHRhKG1pbnV0ZXM9KGNscyBpcyB0aW1lIGFuZCAtNDIgb3IgNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai51dGNvZmZzZXQoKSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmRzdCgpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2JhZF90emluZm9fY2xhc3NlcyhzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNscywgMSwgMSwgMSwgdHppbmZvPTEyKQorCisgICAgICAgIGNsYXNzIE5pY2VUcnkob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbHMsIDEsIDEsIDEsIHR6aW5mbz1OaWNlVHJ5KQorCisgICAgICAgIGNsYXNzIEJldHRlclRyeSh0emluZm8pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcGFzcworICAgICAgICBiID0gQmV0dGVyVHJ5KCkKKyAgICAgICAgdCA9IGNscygxLCAxLCAxLCB0emluZm89YikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQudHppbmZvIGlzIGIpCisKKyAgICBkZWYgdGVzdF91dGNfb2Zmc2V0X291dF9vZl9ib3VuZHMoc2VsZik6CisgICAgICAgIGNsYXNzIEVkZ3kodHppbmZvKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvZmZzZXQpOgorICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0ID0gdGltZWRlbHRhKG1pbnV0ZXM9b2Zmc2V0KQorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYub2Zmc2V0CisKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworICAgICAgICBmb3Igb2Zmc2V0LCBsZWdpdCBpbiAoKC0xNDQwLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTE0MzksIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE0MzksIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE0NDAsIEZhbHNlKSk6CisgICAgICAgICAgICBpZiBjbHMgaXMgdGltZToKKyAgICAgICAgICAgICAgICB0ID0gY2xzKDEsIDIsIDMsIHR6aW5mbz1FZGd5KG9mZnNldCkpCisgICAgICAgICAgICBlbGlmIGNscyBpcyBkYXRldGltZToKKyAgICAgICAgICAgICAgICB0ID0gY2xzKDYsIDYsIDYsIDEsIDIsIDMsIHR6aW5mbz1FZGd5KG9mZnNldCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFzc2VydCAwLCAiaW1wb3NzaWJsZSIKKyAgICAgICAgICAgIGlmIGxlZ2l0OgorICAgICAgICAgICAgICAgIGFvZnMgPSBhYnMob2Zmc2V0KQorICAgICAgICAgICAgICAgIGgsIG0gPSBkaXZtb2QoYW9mcywgNjApCisgICAgICAgICAgICAgICAgdGFnID0gIiVjJTAyZDolMDJkIiAlIChvZmZzZXQgPCAwIGFuZCAnLScgb3IgJysnLCBoLCBtKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodCwgZGF0ZXRpbWUpOgorICAgICAgICAgICAgICAgICAgICB0ID0gdC50aW1ldHooKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQpLCAiMDE6MDI6MDMiICsgdGFnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHIsIHQpCisKKyAgICBkZWYgdGVzdF90emluZm9fY2xhc3NlcyhzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworICAgICAgICBjbGFzcyBDMSh0emluZm8pOgorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6IHJldHVybiBOb25lCisgICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KTogcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGRlZiB0em5hbWUoc2VsZiwgZHQpOiByZXR1cm4gTm9uZQorICAgICAgICBmb3IgdCBpbiAoY2xzKDEsIDEsIDEpLAorICAgICAgICAgICAgICAgICAgY2xzKDEsIDEsIDEsIHR6aW5mbz1Ob25lKSwKKyAgICAgICAgICAgICAgICAgIGNscygxLCAxLCAxLCB0emluZm89QzEoKSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQudXRjb2Zmc2V0KCkgaXMgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRzdCgpIGlzIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodC50em5hbWUoKSBpcyBOb25lKQorCisgICAgICAgIGNsYXNzIEMzKHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcmV0dXJuIHRpbWVkZWx0YShtaW51dGVzPS0xNDM5KQorICAgICAgICAgICAgZGVmIGRzdChzZWxmLCBkdCk6IHJldHVybiB0aW1lZGVsdGEobWludXRlcz0xNDM5KQorICAgICAgICAgICAgZGVmIHR6bmFtZShzZWxmLCBkdCk6IHJldHVybiAiYW5hbWUiCisgICAgICAgIHQgPSBjbHMoMSwgMSwgMSwgdHppbmZvPUMzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9LTE0MzkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZHN0KCksIHRpbWVkZWx0YShtaW51dGVzPTE0MzkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudHpuYW1lKCksICJhbmFtZSIpCisKKyAgICAgICAgIyBXcm9uZyB0eXBlcy4KKyAgICAgICAgY2xhc3MgQzQodHppbmZvKToKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gImFuYW1lIgorICAgICAgICAgICAgZGVmIGRzdChzZWxmLCBkdCk6IHJldHVybiA3CisgICAgICAgICAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KTogcmV0dXJuIDAKKyAgICAgICAgdCA9IGNscygxLCAxLCAxLCB0emluZm89QzQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LnV0Y29mZnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LmRzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LnR6bmFtZSkKKworICAgICAgICAjIE9mZnNldCBvdXQgb2YgcmFuZ2UuCisgICAgICAgIGNsYXNzIEM2KHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcmV0dXJuIHRpbWVkZWx0YShob3Vycz0tMjQpCisgICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KTogcmV0dXJuIHRpbWVkZWx0YShob3Vycz0yNCkKKyAgICAgICAgdCA9IGNscygxLCAxLCAxLCB0emluZm89QzYoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC51dGNvZmZzZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuZHN0KQorCisgICAgICAgICMgTm90IGEgd2hvbGUgbnVtYmVyIG9mIG1pbnV0ZXMuCisgICAgICAgIGNsYXNzIEM3KHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcmV0dXJuIHRpbWVkZWx0YShzZWNvbmRzPTYxKQorICAgICAgICAgICAgZGVmIGRzdChzZWxmLCBkdCk6IHJldHVybiB0aW1lZGVsdGEobWljcm9zZWNvbmRzPS04MSkKKyAgICAgICAgdCA9IGNscygxLCAxLCAxLCB0emluZm89QzcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC51dGNvZmZzZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuZHN0KQorCisgICAgZGVmIHRlc3RfYXdhcmVfY29tcGFyZShzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworCisgICAgICAgICMgRW5zdXJlIHRoYXQgdXRjb2Zmc2V0KCkgZ2V0cyBpZ25vcmVkIGlmIHRoZSBjb21wYXJhbmRzIGhhdmUKKyAgICAgICAgIyB0aGUgc2FtZSB0emluZm8gbWVtYmVyLgorICAgICAgICBjbGFzcyBPcGVyYW5kRGVwZW5kZW50T2Zmc2V0KHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIHQpOgorICAgICAgICAgICAgICAgIGlmIHQubWludXRlIDwgMTA6CisgICAgICAgICAgICAgICAgICAgICMgZDAgYW5kIGQxIGVxdWFsIGFmdGVyIGFkanVzdG1lbnQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVkZWx0YShtaW51dGVzPXQubWludXRlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgZDIgb2ZmIGluIHRoZSB3ZWVkcworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKG1pbnV0ZXM9NTkpCisKKyAgICAgICAgYmFzZSA9IGNscyg4LCA5LCAxMCwgdHppbmZvPU9wZXJhbmREZXBlbmRlbnRPZmZzZXQoKSkKKyAgICAgICAgZDAgPSBiYXNlLnJlcGxhY2UobWludXRlPTMpCisgICAgICAgIGQxID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT05KQorICAgICAgICBkMiA9IGJhc2UucmVwbGFjZShtaW51dGU9MTEpCisgICAgICAgIGZvciB4IGluIGQwLCBkMSwgZDI6CisgICAgICAgICAgICBmb3IgeSBpbiBkMCwgZDEsIGQyOgorICAgICAgICAgICAgICAgIGdvdCA9IGNtcCh4LCB5KQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gY21wKHgubWludXRlLCB5Lm1pbnV0ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCisKKyAgICAgICAgIyBIb3dldmVyLCBpZiB0aGV5J3JlIGRpZmZlcmVudCBtZW1iZXJzLCB1Y3RvZmZzZXQgaXMgbm90IGlnbm9yZWQuCisgICAgICAgICMgTm90ZSB0aGF0IGEgdGltZSBjYW4ndCBhY3R1YWxseSBoYXZlIGFuIG9wZXJhbmQtZGVwZWRlbnQgb2Zmc2V0LAorICAgICAgICAjIHRob3VnaCAoYW5kIHRpbWUudXRjb2Zmc2V0KCkgcGFzc2VzIE5vbmUgdG8gdHppbmZvLnV0Y29mZnNldCgpKSwKKyAgICAgICAgIyBzbyBza2lwIHRoaXMgdGVzdCBmb3IgdGltZS4KKyAgICAgICAgaWYgY2xzIGlzIG5vdCB0aW1lOgorICAgICAgICAgICAgZDAgPSBiYXNlLnJlcGxhY2UobWludXRlPTMsIHR6aW5mbz1PcGVyYW5kRGVwZW5kZW50T2Zmc2V0KCkpCisgICAgICAgICAgICBkMSA9IGJhc2UucmVwbGFjZShtaW51dGU9OSwgdHppbmZvPU9wZXJhbmREZXBlbmRlbnRPZmZzZXQoKSkKKyAgICAgICAgICAgIGQyID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT0xMSwgdHppbmZvPU9wZXJhbmREZXBlbmRlbnRPZmZzZXQoKSkKKyAgICAgICAgICAgIGZvciB4IGluIGQwLCBkMSwgZDI6CisgICAgICAgICAgICAgICAgZm9yIHkgaW4gZDAsIGQxLCBkMjoKKyAgICAgICAgICAgICAgICAgICAgZ290ID0gY21wKHgsIHkpCisgICAgICAgICAgICAgICAgICAgIGlmICh4IGlzIGQwIG9yIHggaXMgZDEpIGFuZCAoeSBpcyBkMCBvciB5IGlzIGQxKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gMAorICAgICAgICAgICAgICAgICAgICBlbGlmIHggaXMgeSBpcyBkMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gMAorICAgICAgICAgICAgICAgICAgICBlbGlmIHggaXMgZDI6CisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IC0xCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgeSBpcyBkMgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAxCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKKworCisjIFRlc3RpbmcgdGltZSBvYmplY3RzIHdpdGggYSBub24tTm9uZSB0emluZm8uCitjbGFzcyBUZXN0VGltZVRaKFRlc3RUaW1lLCBUWkluZm9CYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdGhlY2xhc3MgPSB0aW1lCisKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaG91ciwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm1pbnV0ZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnNlY29uZCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm1pY3Jvc2Vjb25kLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC50emluZm8gaXMgTm9uZSkKKworICAgIGRlZiB0ZXN0X3pvbmVzKHNlbGYpOgorICAgICAgICBlc3QgPSBGaXhlZE9mZnNldCgtMzAwLCAiRVNUIiwgMSkKKyAgICAgICAgdXRjID0gRml4ZWRPZmZzZXQoMCwgIlVUQyIsIC0yKQorICAgICAgICBtZXQgPSBGaXhlZE9mZnNldCg2MCwgIk1FVCIsIDMpCisgICAgICAgIHQxID0gdGltZSggNywgNDcsIHR6aW5mbz1lc3QpCisgICAgICAgIHQyID0gdGltZSgxMiwgNDcsIHR6aW5mbz11dGMpCisgICAgICAgIHQzID0gdGltZSgxMywgNDcsIHR6aW5mbz1tZXQpCisgICAgICAgIHQ0ID0gdGltZShtaWNyb3NlY29uZD00MCkKKyAgICAgICAgdDUgPSB0aW1lKG1pY3Jvc2Vjb25kPTQwLCB0emluZm89dXRjKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEudHppbmZvLCBlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIudHppbmZvLCB1dGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMudHppbmZvLCBtZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0NC50emluZm8gaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0NS50emluZm8sIHV0YykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0tMzAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPTYwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQ0LnV0Y29mZnNldCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdDEudXRjb2Zmc2V0LCAibm8gYXJncyIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS50em5hbWUoKSwgIkVTVCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIudHpuYW1lKCksICJVVEMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLnR6bmFtZSgpLCAiTUVUIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQ0LnR6bmFtZSgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdDEudHpuYW1lLCAibm8gYXJncyIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS5kc3QoKSwgdGltZWRlbHRhKG1pbnV0ZXM9MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuZHN0KCksIHRpbWVkZWx0YShtaW51dGVzPS0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My5kc3QoKSwgdGltZWRlbHRhKG1pbnV0ZXM9MykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0NC5kc3QoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQxLmRzdCwgIm5vIGFyZ3MiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0MSksIGhhc2godDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDEpLCBoYXNoKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHQyKSwgaGFzaCh0MykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLCB0MykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQ0ID09IHQ1KSAjIG1peGVkIHR6LWF3YXJlICYgbmFpdmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQ0IDwgdDUpICMgbWl4ZWQgdHotYXdhcmUgJiBuYWl2ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDUgPCB0NCkgIyBtaXhlZCB0ei1hd2FyZSAmIG5haXZlCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodDEpLCAiMDc6NDc6MDAtMDU6MDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0MiksICIxMjo0NzowMCswMDowMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQzKSwgIjEzOjQ3OjAwKzAxOjAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodDQpLCAiMDA6MDA6MDAuMDAwMDQwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodDUpLCAiMDA6MDA6MDAuMDAwMDQwKzAwOjAwIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLmlzb2Zvcm1hdCgpLCAiMDc6NDc6MDAtMDU6MDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLmlzb2Zvcm1hdCgpLCAiMTI6NDc6MDArMDA6MDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLmlzb2Zvcm1hdCgpLCAiMTM6NDc6MDArMDE6MDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQ0Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAuMDAwMDQwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0NS5pc29mb3JtYXQoKSwgIjAwOjAwOjAwLjAwMDA0MCswMDowMCIpCisKKyAgICAgICAgZCA9ICdkYXRldGltZS50aW1lJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodDEpLCBkICsgIig3LCA0NywgdHppbmZvPWVzdCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodDIpLCBkICsgIigxMiwgNDcsIHR6aW5mbz11dGMpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQzKSwgZCArICIoMTMsIDQ3LCB0emluZm89bWV0KSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0NCksIGQgKyAiKDAsIDAsIDAsIDQwKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0NSksIGQgKyAiKDAsIDAsIDAsIDQwLCB0emluZm89dXRjKSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS5zdHJmdGltZSgiJUg6JU06JVMgJSVaPSVaICUlej0leiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwNzo0NzowMCAlWj1FU1QgJXo9LTA1MDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnN0cmZ0aW1lKCIlSDolTTolUyAlWiAleiIpLCAiMTI6NDc6MDAgVVRDICswMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My5zdHJmdGltZSgiJUg6JU06JVMgJVogJXoiKSwgIjEzOjQ3OjAwIE1FVCArMDEwMCIpCisKKyAgICAgICAgeXVjayA9IEZpeGVkT2Zmc2V0KC0xNDM5LCAiJXogJVogJSV6JSVaIikKKyAgICAgICAgdDEgPSB0aW1lKDIzLCA1OSwgdHppbmZvPXl1Y2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEuc3RyZnRpbWUoIiVIOiVNICUlWj0nJVonICUlej0nJXonIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIzOjU5ICVaPScleiAlWiAlJXolJVonICV6PSctMjM1OSciKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCBhbiBpbnZhbGlkIHR6bmFtZSByZXN1bHQgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgY2xhc3MgQmFkdHpuYW1lKHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KTogcmV0dXJuIDQyCisgICAgICAgIHQgPSB0aW1lKDIsIDMsIDQsIHR6aW5mbz1CYWR0em5hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0cmZ0aW1lKCIlSDolTTolUyIpLCAiMDI6MDM6MDQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuc3RyZnRpbWUsICIlWiIpCisKKyAgICBkZWYgdGVzdF9oYXNoX2VkZ2VfY2FzZXMoc2VsZik6CisgICAgICAgICMgT2Zmc2V0cyB0aGF0IG92ZXJmbG93IGEgYmFzaWMgdGltZS4KKyAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDAsIDEsIDIsIDMsIHR6aW5mbz1GaXhlZE9mZnNldCgxNDM5LCAiIikpCisgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygwLCAwLCAyLCAzLCB0emluZm89Rml4ZWRPZmZzZXQoMTQzOCwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDEpLCBoYXNoKHQyKSkKKworICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMjMsIDU4LCA2LCAxMDAsIHR6aW5mbz1GaXhlZE9mZnNldCgtMTAwMCwgIiIpKQorICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoMjMsIDQ4LCA2LCAxMDAsIHR6aW5mbz1GaXhlZE9mZnNldCgtMTAxMCwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDEpLCBoYXNoKHQyKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgorICAgICAgICAjIFRyeSBvbmUgd2l0aG91dCBhIHR6aW5mby4KKyAgICAgICAgYXJncyA9IDIwLCA1OSwgMTYsIDY0KioyCisgICAgICAgIG9yaWcgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKKyAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKKyAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcsIGRlcml2ZWQpCisKKyAgICAgICAgIyBUcnkgb25lIHdpdGggYSB0emluZm8uCisgICAgICAgIHRpbmZvID0gUGlja2xhYmxlRml4ZWRPZmZzZXQoLTMwMCwgJ2Nvb2tpZScpCisgICAgICAgIG9yaWcgPSBzZWxmLnRoZWNsYXNzKDUsIDYsIDcsIHR6aW5mbz10aW5mbykKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCisgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRlcml2ZWQudHppbmZvLCBQaWNrbGFibGVGaXhlZE9mZnNldCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVyaXZlZC51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9LTMwMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcml2ZWQudHpuYW1lKCksICdjb29raWUnKQorCisgICAgZGVmIHRlc3RfbW9yZV9ib29sKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2FzZXMgd2l0aCBub24tTm9uZSB0emluZm8uCisgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKKworICAgICAgICB0ID0gY2xzKDAsIHR6aW5mbz1GaXhlZE9mZnNldCgtMzAwLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0KQorCisgICAgICAgIHQgPSBjbHMoNSwgdHppbmZvPUZpeGVkT2Zmc2V0KC0zMDAsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQpCisKKyAgICAgICAgdCA9IGNscyg1LCB0emluZm89Rml4ZWRPZmZzZXQoMzAwLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdCkKKworICAgICAgICB0ID0gY2xzKDIzLCA1OSwgdHppbmZvPUZpeGVkT2Zmc2V0KDIzKjYwICsgNTksICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0KQorCisgICAgICAgICMgTW9zdGx5IGVuc3VyaW5nIHRoaXMgZG9lc24ndCBvdmVyZmxvdyBpbnRlcm5hbGx5LgorICAgICAgICB0ID0gY2xzKDAsIHR6aW5mbz1GaXhlZE9mZnNldCgyMyo2MCArIDU5LCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0KQorCisgICAgICAgICMgQnV0IHRoaXMgc2hvdWxkIHlpZWxkIGEgdmFsdWUgZXJyb3IgLS0gdGhlIHV0Y29mZnNldCBpcyBib2d1cy4KKyAgICAgICAgdCA9IGNscygwLCB0emluZm89Rml4ZWRPZmZzZXQoMjQqNjAsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBib29sKHQpKQorCisgICAgICAgICMgTGlrZXdpc2UuCisgICAgICAgIHQgPSBjbHMoMCwgdHppbmZvPUZpeGVkT2Zmc2V0KC0yNCo2MCwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IGJvb2wodCkpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgorICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisgICAgICAgIHoxMDAgPSBGaXhlZE9mZnNldCgxMDAsICIrMTAwIikKKyAgICAgICAgem0yMDAgPSBGaXhlZE9mZnNldCh0aW1lZGVsdGEobWludXRlcz0tMjAwKSwgIi0yMDAiKQorICAgICAgICBhcmdzID0gWzEsIDIsIDMsIDQsIHoxMDBdCisgICAgICAgIGJhc2UgPSBjbHMoKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZSwgYmFzZS5yZXBsYWNlKCkpCisKKyAgICAgICAgaSA9IDAKKyAgICAgICAgZm9yIG5hbWUsIG5ld3ZhbCBpbiAoKCJob3VyIiwgNSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibWludXRlIiwgNiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgic2Vjb25kIiwgNyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibWljcm9zZWNvbmQiLCA4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0emluZm8iLCB6bTIwMCkpOgorICAgICAgICAgICAgbmV3YXJncyA9IGFyZ3NbOl0KKyAgICAgICAgICAgIG5ld2FyZ3NbaV0gPSBuZXd2YWwKKyAgICAgICAgICAgIGV4cGVjdGVkID0gY2xzKCpuZXdhcmdzKQorICAgICAgICAgICAgZ290ID0gYmFzZS5yZXBsYWNlKCoqe25hbWU6IG5ld3ZhbH0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisgICAgICAgICAgICBpICs9IDEKKworICAgICAgICAjIEVuc3VyZSB3ZSBjYW4gZ2V0IHJpZCBvZiBhIHR6aW5mby4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnR6bmFtZSgpLCAiKzEwMCIpCisgICAgICAgIGJhc2UyID0gYmFzZS5yZXBsYWNlKHR6aW5mbz1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFzZTIudHppbmZvIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNlMi50em5hbWUoKSBpcyBOb25lKQorCisgICAgICAgICMgRW5zdXJlIHdlIGNhbiBhZGQgb25lLgorICAgICAgICBiYXNlMyA9IGJhc2UyLnJlcGxhY2UodHppbmZvPXoxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZSwgYmFzZTMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNlLnR6aW5mbyBpcyBiYXNlMy50emluZm8pCisKKyAgICAgICAgIyBPdXQgb2YgYm91bmRzLgorICAgICAgICBiYXNlID0gY2xzKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2UucmVwbGFjZSwgaG91cj0yNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBtaW51dGU9LTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2UucmVwbGFjZSwgc2Vjb25kPTEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBtaWNyb3NlY29uZD0xMDAwMDAwKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfY29tcGFyZShzZWxmKToKKyAgICAgICAgdDEgPSB0aW1lKDEsIDIsIDMpCisgICAgICAgIHQyID0gdGltZSgxLCAyLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKKyAgICAgICAgdDIgPSB0Mi5yZXBsYWNlKHR6aW5mbz1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKKyAgICAgICAgdDIgPSB0Mi5yZXBsYWNlKHR6aW5mbz1GaXhlZE9mZnNldChOb25lLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorICAgICAgICB0MiA9IHQyLnJlcGxhY2UodHppbmZvPUZpeGVkT2Zmc2V0KDAsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID09IHQyKQorCisgICAgICAgICMgSW4gdGltZSB3LyBpZGVudGljYWwgdHppbmZvIG9iamVjdHMsIHV0Y29mZnNldCBpcyBpZ25vcmVkLgorICAgICAgICBjbGFzcyBWYXJpZXModHppbmZvKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLm9mZnNldCA9IHRpbWVkZWx0YShtaW51dGVzPTIyKQorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCB0KToKKyAgICAgICAgICAgICAgICBzZWxmLm9mZnNldCArPSB0aW1lZGVsdGEobWludXRlcz0xKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm9mZnNldAorCisgICAgICAgIHYgPSBWYXJpZXMoKQorICAgICAgICB0MSA9IHQyLnJlcGxhY2UodHppbmZvPXYpCisgICAgICAgIHQyID0gdDIucmVwbGFjZSh0emluZm89dikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9MjMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0yNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorCisgICAgICAgICMgQnV0IGlmIHRoZXkncmUgbm90IGlkZW50aWNhbCwgaXQgaXNuJ3QgaWdub3JlZC4KKyAgICAgICAgdDIgPSB0Mi5yZXBsYWNlKHR6aW5mbz1WYXJpZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpICAjIHQxJ3Mgb2Zmc2V0IGNvdW50ZXIgc3RpbGwgZ29pbmcgdXAKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3RpbWV0eihzZWxmKToKKworICAgICAgICBjbGFzcyBDKHNlbGYudGhlY2xhc3MpOgorICAgICAgICAgICAgdGhlQW5zd2VyID0gNDIKKworICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd3MpOgorICAgICAgICAgICAgICAgIHRlbXAgPSBrd3MuY29weSgpCisgICAgICAgICAgICAgICAgZXh0cmEgPSB0ZW1wLnBvcCgnZXh0cmEnKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYudGhlY2xhc3MuX19uZXdfXyhjbHMsICphcmdzLCAqKnRlbXApCisgICAgICAgICAgICAgICAgcmVzdWx0LmV4dHJhID0gZXh0cmEKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgICAgIGRlZiBuZXdtZXRoKHNlbGYsIHN0YXJ0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQgKyBzZWxmLmhvdXIgKyBzZWxmLnNlY29uZAorCisgICAgICAgIGFyZ3MgPSA0LCA1LCA2LCA1MDAsIEZpeGVkT2Zmc2V0KC0zMDAsICJFU1QiLCAxKQorCisgICAgICAgIGR0MSA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCisgICAgICAgIGR0MiA9IEMoKmFyZ3MsICoqeydleHRyYSc6IDd9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLl9fY2xhc3NfXywgQykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIudGhlQW5zd2VyLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIuZXh0cmEsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQxLnV0Y29mZnNldCgpLCBkdDIudXRjb2Zmc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLm5ld21ldGgoLTcpLCBkdDEuaG91ciArIGR0MS5zZWNvbmQgLSA3KQorCisKKyMgVGVzdGluZyBkYXRldGltZSBvYmplY3RzIHdpdGggYSBub24tTm9uZSB0emluZm8uCisKK2NsYXNzIFRlc3REYXRlVGltZVRaKFRlc3REYXRlVGltZSwgVFpJbmZvQmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHRoZWNsYXNzID0gZGF0ZXRpbWUKKworICAgIGRlZiB0ZXN0X3RyaXZpYWwoc2VsZik6CisgICAgICAgIGR0ID0gc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0LCA1LCA2LCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnllYXIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQubW9udGgsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuZGF5LCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmhvdXIsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQubWludXRlLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnNlY29uZCwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5taWNyb3NlY29uZCwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC50emluZm8sIE5vbmUpCisKKyAgICBkZWYgdGVzdF9ldmVuX21vcmVfY29tcGFyZShzZWxmKToKKyAgICAgICAgIyBUaGUgdGVzdF9jb21wYXJlKCkgYW5kIHRlc3RfbW9yZV9jb21wYXJlKCkgaW5oZXJpdGVkIGZyb20gVGVzdERhdGUKKyAgICAgICAgIyBhbmQgVGVzdERhdGVUaW1lIGNvdmVyZWQgbm9uLXR6aW5mbyBjYXNlcy4KKworICAgICAgICAjIFNtYWxsZXN0IHBvc3NpYmxlIGFmdGVyIFVUQyBhZGp1c3RtZW50LgorICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMSwgMSwgMSwgdHppbmZvPUZpeGVkT2Zmc2V0KDE0MzksICIiKSkKKyAgICAgICAgIyBMYXJnZXN0IHBvc3NpYmxlIGFmdGVyIFVUQyBhZGp1c3RtZW50LgorICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoTUFYWUVBUiwgMTIsIDMxLCAyMywgNTksIDU5LCA5OTk5OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0emluZm89Rml4ZWRPZmZzZXQoLTE0MzksICIiKSkKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aG9zZSBjb21wYXJlIGNvcnJlY3RseSwgYW5kIHcvbyBvdmVyZmxvdy4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSAhPSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID4gdDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID09IHQxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPT0gdDIpCisKKyAgICAgICAgIyBFcXVhbCBhZmVyIGFkanVzdG1lbnQuCisgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygxLCAxMiwgMzEsIDIzLCA1OSwgdHppbmZvPUZpeGVkT2Zmc2V0KDEsICIiKSkKKyAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKDIsIDEsIDEsIDMsIDEzLCB0emluZm89Rml4ZWRPZmZzZXQoMyo2MCsxMysyLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorCisgICAgICAgICMgQ2hhbmdlIHQxIG5vdCB0byBzdWJ0cmFjdCBhIG1pbnV0ZSwgYW5kIHQxIHNob3VsZCBiZSBsYXJnZXIuCisgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygxLCAxMiwgMzEsIDIzLCA1OSwgdHppbmZvPUZpeGVkT2Zmc2V0KDAsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID4gdDIpCisKKyAgICAgICAgIyBDaGFuZ2UgdDEgdG8gc3VidHJhY3QgMiBtaW51dGVzLCBhbmQgdDEgc2hvdWxkIGJlIHNtYWxsZXIuCisgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygxLCAxMiwgMzEsIDIzLCA1OSwgdHppbmZvPUZpeGVkT2Zmc2V0KDIsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpCisKKyAgICAgICAgIyBCYWNrIHRvIHRoZSBvcmlnaW5hbCB0MSwgYnV0IG1ha2Ugc2Vjb25kcyByZXNvbHZlIGl0LgorICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMSwgMTIsIDMxLCAyMywgNTksIHR6aW5mbz1GaXhlZE9mZnNldCgxLCAiIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmQ9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID4gdDIpCisKKyAgICAgICAgIyBMaWtld2lzZSwgYnV0IG1ha2UgbWljcm9zZWNvbmRzIHJlc29sdmUgaXQuCisgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygxLCAxMiwgMzEsIDIzLCA1OSwgdHppbmZvPUZpeGVkT2Zmc2V0KDEsICIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pY3Jvc2Vjb25kPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+IHQyKQorCisgICAgICAgICMgTWFrZSB0MiBuYWl2ZSBhbmQgaXQgc2hvdWxkIGZhaWwuCisgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcy5taW4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID09IHQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLCB0MikKKworICAgICAgICAjIEl0J3MgYWxzbyBuYWl2ZSBpZiBpdCBoYXMgdHppbmZvIGJ1dCB0emluZm8udXRjb2Zmc2V0KCkgaXMgTm9uZS4KKyAgICAgICAgY2xhc3MgTmFpdmUodHppbmZvKToKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gTm9uZQorICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoNSwgNiwgNywgdHppbmZvPU5haXZlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA9PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MiwgdDIpCisKKyAgICAgICAgIyBPVE9ILCBpdCdzIE9LIHRvIGNvbXBhcmUgdHdvIG9mIHRoZXNlIG1peGluZyB0aGUgdHdvIHdheXMgb2YgYmVpbmcKKyAgICAgICAgIyBuYWl2ZS4KKyAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDUsIDYsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorCisgICAgICAgICMgVHJ5IGEgYm9ndXMgdWN0b2Zmc2V0LgorICAgICAgICBjbGFzcyBCb2d1cyh0emluZm8pOgorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVkZWx0YShtaW51dGVzPTE0NDApICMgb3V0IG9mIGJvdW5kcworICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMiwgMiwgMiwgdHppbmZvPUJvZ3VzKCkpCisgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygyLCAyLCAyLCB0emluZm89Rml4ZWRPZmZzZXQoMCwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IHQxID09IHQyKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgICMgVHJ5IG9uZSB3aXRob3V0IGEgdHppbmZvLgorICAgICAgICBhcmdzID0gNiwgNywgMjMsIDIwLCA1OSwgMSwgNjQqKjIKKyAgICAgICAgb3JpZyA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCisgICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgorICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQorICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKKworICAgICAgICAjIFRyeSBvbmUgd2l0aCBhIHR6aW5mby4KKyAgICAgICAgdGluZm8gPSBQaWNrbGFibGVGaXhlZE9mZnNldCgtMzAwLCAnY29va2llJykKKyAgICAgICAgb3JpZyA9IHNlbGYudGhlY2xhc3MoKmFyZ3MsICoqeyd0emluZm8nOiB0aW5mb30pCisgICAgICAgIGRlcml2ZWQgPSBzZWxmLnRoZWNsYXNzKDEsIDEsIDEsIHR6aW5mbz1GaXhlZE9mZnNldCgwLCAiIiwgMCkpCisgICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgorICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQorICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkZXJpdmVkLnR6aW5mbywgUGlja2xhYmxlRml4ZWRPZmZzZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcml2ZWQudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPS0zMDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXJpdmVkLnR6bmFtZSgpLCAnY29va2llJykKKworICAgIGRlZiB0ZXN0X2V4dHJlbWVfaGFzaGVzKHNlbGYpOgorICAgICAgICAjIElmIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBoYXNoIHRoZXNlIHZpYSBzdWJ0cmFjdGluZyB0aGUgb2Zmc2V0CisgICAgICAgICMgdGhlbiBoYXNoaW5nIGEgZGF0ZXRpbWUgb2JqZWN0LCBPdmVyZmxvd0Vycm9yIHJlc3VsdHMuICBUaGUKKyAgICAgICAgIyBQeXRob24gaW1wbGVtZW50YXRpb24gdXNlZCB0byBibG93IHVwIGhlcmUuCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDEsIDEsIDEsIHR6aW5mbz1GaXhlZE9mZnNldCgxNDM5LCAiIikpCisgICAgICAgIGhhc2godCkKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoTUFYWUVBUiwgMTIsIDMxLCAyMywgNTksIDU5LCA5OTk5OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbz1GaXhlZE9mZnNldCgtMTQzOSwgIiIpKQorICAgICAgICBoYXNoKHQpCisKKyAgICAgICAgIyBPVE9ILCBhbiBPT0Igb2Zmc2V0IHNob3VsZCBibG93IHVwLgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyg1LCA1LCA1LCB0emluZm89Rml4ZWRPZmZzZXQoLTE0NDAsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaGFzaCwgdCkKKworICAgIGRlZiB0ZXN0X3pvbmVzKHNlbGYpOgorICAgICAgICBlc3QgPSBGaXhlZE9mZnNldCgtMzAwLCAiRVNUIikKKyAgICAgICAgdXRjID0gRml4ZWRPZmZzZXQoMCwgIlVUQyIpCisgICAgICAgIG1ldCA9IEZpeGVkT2Zmc2V0KDYwLCAiTUVUIikKKyAgICAgICAgdDEgPSBkYXRldGltZSgyMDAyLCAzLCAxOSwgIDcsIDQ3LCB0emluZm89ZXN0KQorICAgICAgICB0MiA9IGRhdGV0aW1lKDIwMDIsIDMsIDE5LCAxMiwgNDcsIHR6aW5mbz11dGMpCisgICAgICAgIHQzID0gZGF0ZXRpbWUoMjAwMiwgMywgMTksIDEzLCA0NywgdHppbmZvPW1ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS50emluZm8sIGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi50emluZm8sIHV0YykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My50emluZm8sIG1ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9LTMwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz02MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEudHpuYW1lKCksICJFU1QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnR6bmFtZSgpLCAiVVRDIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My50em5hbWUoKSwgIk1FVCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0MSksIGhhc2godDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDEpLCBoYXNoKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHQyKSwgaGFzaCh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MiwgdDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQxKSwgIjIwMDItMDMtMTkgMDc6NDc6MDAtMDU6MDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0MiksICIyMDAyLTAzLTE5IDEyOjQ3OjAwKzAwOjAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodDMpLCAiMjAwMi0wMy0xOSAxMzo0NzowMCswMTowMCIpCisgICAgICAgIGQgPSAnZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwMiwgMywgMTksICcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQxKSwgZCArICI3LCA0NywgdHppbmZvPWVzdCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodDIpLCBkICsgIjEyLCA0NywgdHppbmZvPXV0YykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodDMpLCBkICsgIjEzLCA0NywgdHppbmZvPW1ldCkiKQorCisgICAgZGVmIHRlc3RfY29tYmluZShzZWxmKToKKyAgICAgICAgbWV0ID0gRml4ZWRPZmZzZXQoNjAsICJNRVQiKQorICAgICAgICBkID0gZGF0ZSgyMDAyLCAzLCA0KQorICAgICAgICB0eiA9IHRpbWUoMTgsIDQ1LCAzLCAxMjM0LCB0emluZm89bWV0KQorICAgICAgICBkdCA9IGRhdGV0aW1lLmNvbWJpbmUoZCwgdHopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIGRhdGV0aW1lKDIwMDIsIDMsIDQsIDE4LCA0NSwgMywgMTIzNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0emluZm89bWV0KSkKKworICAgIGRlZiB0ZXN0X2V4dHJhY3Qoc2VsZik6CisgICAgICAgIG1ldCA9IEZpeGVkT2Zmc2V0KDYwLCAiTUVUIikKKyAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDQsIDE4LCA0NSwgMywgMTIzNCwgdHppbmZvPW1ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5kYXRlKCksIGRhdGUoMjAwMiwgMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQudGltZSgpLCB0aW1lKDE4LCA0NSwgMywgMTIzNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQudGltZXR6KCksIHRpbWUoMTgsIDQ1LCAzLCAxMjM0LCB0emluZm89bWV0KSkKKworICAgIGRlZiB0ZXN0X3R6X2F3YXJlX2FyaXRobWV0aWMoc2VsZik6CisgICAgICAgIGltcG9ydCByYW5kb20KKworICAgICAgICBub3cgPSBzZWxmLnRoZWNsYXNzLm5vdygpCisgICAgICAgIHR6NTUgPSBGaXhlZE9mZnNldCgtMzMwLCAid2VzdCA1OjMwIikKKyAgICAgICAgdGltZWF3YXJlID0gbm93LnRpbWUoKS5yZXBsYWNlKHR6aW5mbz10ejU1KQorICAgICAgICBub3dhd2FyZSA9IHNlbGYudGhlY2xhc3MuY29tYmluZShub3cuZGF0ZSgpLCB0aW1lYXdhcmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3dhd2FyZS50emluZm8gaXMgdHo1NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3dhd2FyZS50aW1ldHooKSwgdGltZWF3YXJlKQorCisgICAgICAgICMgQ2FuJ3QgbWl4IGF3YXJlIGFuZCBub24tYXdhcmUuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBub3cgLSBub3dhd2FyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG5vd2F3YXJlIC0gbm93KQorCisgICAgICAgICMgQW5kIGFkZGluZyBkYXRldGltZSdzIGRvZXNuJ3QgbWFrZSBzZW5zZSwgYXdhcmUgb3Igbm90LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbm93ICsgbm93YXdhcmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBub3dhd2FyZSArIG5vdykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG5vd2F3YXJlICsgbm93YXdhcmUpCisKKyAgICAgICAgIyBTdWJ0cmFjdGluZyBzaG91bGQgeWllbGQgMC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3cgLSBub3csIHRpbWVkZWx0YSgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3dhd2FyZSAtIG5vd2F3YXJlLCB0aW1lZGVsdGEoMCkpCisKKyAgICAgICAgIyBBZGRpbmcgYSBkZWx0YSBzaG91bGQgcHJlc2VydmUgdHppbmZvLgorICAgICAgICBkZWx0YSA9IHRpbWVkZWx0YSh3ZWVrcz0xLCBtaW51dGVzPTEyLCBtaWNyb3NlY29uZHM9NTY3OCkKKyAgICAgICAgbm93YXdhcmVwbHVzID0gbm93YXdhcmUgKyBkZWx0YQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm93YXdhcmUudHppbmZvIGlzIHR6NTUpCisgICAgICAgIG5vd2F3YXJlcGx1czIgPSBkZWx0YSArIG5vd2F3YXJlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3dhd2FyZXBsdXMyLnR6aW5mbyBpcyB0ejU1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vd2F3YXJlcGx1cywgbm93YXdhcmVwbHVzMikKKworICAgICAgICAjIHRoYXQgLSBkZWx0YSBzaG91bGQgYmUgd2hhdCB3ZSBzdGFydGVkIHdpdGgsIGFuZCB0aGF0IC0gd2hhdCB3ZQorICAgICAgICAjIHN0YXJ0ZWQgd2l0aCBzaG91bGQgYmUgZGVsdGEuCisgICAgICAgIGRpZmYgPSBub3dhd2FyZXBsdXMgLSBkZWx0YQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlmZi50emluZm8gaXMgdHo1NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3dhd2FyZSwgZGlmZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGRlbHRhIC0gbm93YXdhcmVwbHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vd2F3YXJlcGx1cyAtIG5vd2F3YXJlLCBkZWx0YSkKKworICAgICAgICAjIE1ha2UgdXAgYSByYW5kb20gdGltZXpvbmUuCisgICAgICAgIHR6ciA9IEZpeGVkT2Zmc2V0KHJhbmRvbS5yYW5kcmFuZ2UoLTE0MzksIDE0NDApLCAicmFuZG9tdGltZXpvbmUiKQorICAgICAgICAjIEF0dGFjaCBpdCB0byBub3dhd2FyZXBsdXMuCisgICAgICAgIG5vd2F3YXJlcGx1cyA9IG5vd2F3YXJlcGx1cy5yZXBsYWNlKHR6aW5mbz10enIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3dhd2FyZXBsdXMudHppbmZvIGlzIHR6cikKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGRpZmZlcmVuY2UgdGFrZXMgdGhlIHRpbWV6b25lIGFkanVzdG1lbnRzIGludG8gYWNjb3VudC4KKyAgICAgICAgZ290ID0gbm93YXdhcmUgLSBub3dhd2FyZXBsdXMKKyAgICAgICAgIyBFeHBlY3RlZDogIChub3dhd2FyZSBiYXNlIC0gbm93YXdhcmUgb2Zmc2V0KSAtCisgICAgICAgICMgICAgICAgICAgICAobm93YXdhcmVwbHVzIGJhc2UgLSBub3dhd2FyZXBsdXMgb2Zmc2V0KSA9CisgICAgICAgICMgICAgICAgICAgICAobm93YXdhcmUgYmFzZSAtIG5vd2F3YXJlcGx1cyBiYXNlKSArCisgICAgICAgICMgICAgICAgICAgICAobm93YXdhcmVwbHVzIG9mZnNldCAtIG5vd2F3YXJlIG9mZnNldCkgPQorICAgICAgICAjICAgICAgICAgICAgLWRlbHRhICsgbm93YXdhcmVwbHVzIG9mZnNldCAtIG5vd2F3YXJlIG9mZnNldAorICAgICAgICBleHBlY3RlZCA9IG5vd2F3YXJlcGx1cy51dGNvZmZzZXQoKSAtIG5vd2F3YXJlLnV0Y29mZnNldCgpIC0gZGVsdGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQorCisgICAgICAgICMgVHJ5IG1heCBwb3NzaWJsZSBkaWZmZXJlbmNlLgorICAgICAgICBtaW4gPSBzZWxmLnRoZWNsYXNzKDEsIDEsIDEsIHR6aW5mbz1GaXhlZE9mZnNldCgxNDM5LCAibWluIikpCisgICAgICAgIG1heCA9IHNlbGYudGhlY2xhc3MoTUFYWUVBUiwgMTIsIDMxLCAyMywgNTksIDU5LCA5OTk5OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvPUZpeGVkT2Zmc2V0KC0xNDM5LCAibWF4IikpCisgICAgICAgIG1heGRpZmYgPSBtYXggLSBtaW4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXhkaWZmLCBzZWxmLnRoZWNsYXNzLm1heCAtIHNlbGYudGhlY2xhc3MubWluICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lZGVsdGEobWludXRlcz0yKjE0MzkpKQorCisgICAgZGVmIHRlc3RfdHppbmZvX25vdyhzZWxmKToKKyAgICAgICAgbWV0aCA9IHNlbGYudGhlY2xhc3Mubm93CisgICAgICAgICMgRW5zdXJlIGl0IGRvZXNuJ3QgcmVxdWlyZSB0emluZm8gKGkuZS4sIHRoYXQgdGhpcyBkb2Vzbid0IGJsb3cgdXApLgorICAgICAgICBiYXNlID0gbWV0aCgpCisgICAgICAgICMgVHJ5IHdpdGggYW5kIHdpdGhvdXQgbmFtaW5nIHRoZSBrZXl3b3JkLgorICAgICAgICBvZmY0MiA9IEZpeGVkT2Zmc2V0KDQyLCAiNDIiKQorICAgICAgICBhbm90aGVyID0gbWV0aChvZmY0MikKKyAgICAgICAgYWdhaW4gPSBtZXRoKHR6PW9mZjQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW5vdGhlci50emluZm8gaXMgYWdhaW4udHppbmZvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFub3RoZXIudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPTQyKSkKKyAgICAgICAgIyBCYWQgYXJndW1lbnQgd2l0aCBhbmQgdy9vIG5hbWluZyB0aGUga2V5d29yZC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCB0emluZm89MTYpCisgICAgICAgICMgQmFkIGtleXdvcmQgbmFtZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCB0aW5mbz1vZmY0MikKKyAgICAgICAgIyBUb28gbWFueSBhcmdzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIG9mZjQyLCBvZmY0MikKKworICAgICAgICAjIFdlIGRvbid0IGtub3cgd2hpY2ggdGltZSB6b25lIHdlJ3JlIGluLCBhbmQgZG9uJ3QgaGF2ZSBhIHR6aW5mbworICAgICAgICAjIGNsYXNzIHRvIHJlcHJlc2VudCBpdCwgc28gc2VlaW5nIHdoZXRoZXIgYSB0eiBhcmd1bWVudCBhY3R1YWxseQorICAgICAgICAjIGRvZXMgYSBjb252ZXJzaW9uIGlzIHRyaWNreS4KKyAgICAgICAgd2VpcmR0eiA9IEZpeGVkT2Zmc2V0KHRpbWVkZWx0YShob3Vycz0xNSwgbWludXRlcz01OCksICJ3ZWlyZHR6IiwgMCkKKyAgICAgICAgdXRjID0gRml4ZWRPZmZzZXQoMCwgInV0YyIsIDApCisgICAgICAgIGZvciBkdW1teSBpbiByYW5nZSgzKToKKyAgICAgICAgICAgIG5vdyA9IGRhdGV0aW1lLm5vdyh3ZWlyZHR6KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdy50emluZm8gaXMgd2VpcmR0eikKKyAgICAgICAgICAgIHV0Y25vdyA9IGRhdGV0aW1lLnV0Y25vdygpLnJlcGxhY2UodHppbmZvPXV0YykKKyAgICAgICAgICAgIG5vdzIgPSB1dGNub3cuYXN0aW1lem9uZSh3ZWlyZHR6KQorICAgICAgICAgICAgaWYgYWJzKG5vdyAtIG5vdzIpIDwgdGltZWRlbHRhKHNlY29uZHM9MzApOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAjIEVsc2UgdGhlIGNvZGUgaXMgYnJva2VuLCBvciBtb3JlIHRoYW4gMzAgc2Vjb25kcyBwYXNzZWQgYmV0d2VlbgorICAgICAgICAgICAgIyBjYWxsczsgYXNzdW1pbmcgdGhlIGxhdHRlciwganVzdCB0cnkgYWdhaW4uCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRocmVlIHN0cmlrZXMgYW5kIHdlJ3JlIG91dC4KKyAgICAgICAgICAgIHNlbGYuZmFpbCgidXRjbm93KCksIG5vdyh0eiksIG9yIGFzdGltZXpvbmUoKSBtYXkgYmUgYnJva2VuIikKKworICAgIGRlZiB0ZXN0X3R6aW5mb19mcm9tdGltZXN0YW1wKHNlbGYpOgorICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICBtZXRoID0gc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wCisgICAgICAgIHRzID0gdGltZS50aW1lKCkKKyAgICAgICAgIyBFbnN1cmUgaXQgZG9lc24ndCByZXF1aXJlIHR6aW5mbyAoaS5lLiwgdGhhdCB0aGlzIGRvZXNuJ3QgYmxvdyB1cCkuCisgICAgICAgIGJhc2UgPSBtZXRoKHRzKQorICAgICAgICAjIFRyeSB3aXRoIGFuZCB3aXRob3V0IG5hbWluZyB0aGUga2V5d29yZC4KKyAgICAgICAgb2ZmNDIgPSBGaXhlZE9mZnNldCg0MiwgIjQyIikKKyAgICAgICAgYW5vdGhlciA9IG1ldGgodHMsIG9mZjQyKQorICAgICAgICBhZ2FpbiA9IG1ldGgodHMsIHR6PW9mZjQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW5vdGhlci50emluZm8gaXMgYWdhaW4udHppbmZvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFub3RoZXIudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPTQyKSkKKyAgICAgICAgIyBCYWQgYXJndW1lbnQgd2l0aCBhbmQgdy9vIG5hbWluZyB0aGUga2V5d29yZC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCB0cywgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdHMsIHR6aW5mbz0xNikKKyAgICAgICAgIyBCYWQga2V5d29yZCBuYW1lLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIHRzLCB0aW5mbz1vZmY0MikKKyAgICAgICAgIyBUb28gbWFueSBhcmdzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIHRzLCBvZmY0Miwgb2ZmNDIpCisgICAgICAgICMgVG9vIGZldyBhcmdzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgpCisKKyAgICAgICAgIyBUcnkgdG8gbWFrZSBzdXJlIHR6PSBhY3R1YWxseSBkb2VzIHNvbWUgY29udmVyc2lvbi4KKyAgICAgICAgdGltZXN0YW1wID0gMTAwMDAwMDAwMAorICAgICAgICB1dGNkYXRldGltZSA9IGRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAodGltZXN0YW1wKQorICAgICAgICAjIEluIFBPU0lYIChlcG9jaCAxOTcwKSwgdGhhdCdzIDIwMDEtMDktMDkgMDE6NDY6NDAgVVRDLCBnaXZlIG9yIHRha2UuCisgICAgICAgICMgQnV0IG9uIHNvbWUgZmxhdm9yIG9mIE1hYywgaXQncyBub3doZXJlIG5lYXIgdGhhdC4gIFNvIHdlIGNhbid0IGhhdmUKKyAgICAgICAgIyBhbnkgaWRlYSBoZXJlIHdoYXQgdGltZSB0aGF0IGFjdHVhbGx5IGlzLCB3ZSBjYW4gb25seSB0ZXN0IHRoYXQKKyAgICAgICAgIyByZWxhdGl2ZSBjaGFuZ2VzIG1hdGNoLgorICAgICAgICB1dGNvZmZzZXQgPSB0aW1lZGVsdGEoaG91cnM9LTE1LCBtaW51dGVzPTM5KSAjIGFyYml0cmFyeSwgYnV0IG5vdCB6ZXJvCisgICAgICAgIHR6ID0gRml4ZWRPZmZzZXQodXRjb2Zmc2V0LCAidHoiLCAwKQorICAgICAgICBleHBlY3RlZCA9IHV0Y2RhdGV0aW1lICsgdXRjb2Zmc2V0CisgICAgICAgIGdvdCA9IGRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZXN0YW1wLCB0eikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290LnJlcGxhY2UodHppbmZvPU5vbmUpKQorCisgICAgZGVmIHRlc3RfdHppbmZvX3V0Y25vdyhzZWxmKToKKyAgICAgICAgbWV0aCA9IHNlbGYudGhlY2xhc3MudXRjbm93CisgICAgICAgICMgRW5zdXJlIGl0IGRvZXNuJ3QgcmVxdWlyZSB0emluZm8gKGkuZS4sIHRoYXQgdGhpcyBkb2Vzbid0IGJsb3cgdXApLgorICAgICAgICBiYXNlID0gbWV0aCgpCisgICAgICAgICMgVHJ5IHdpdGggYW5kIHdpdGhvdXQgbmFtaW5nIHRoZSBrZXl3b3JkOyBmb3Igd2hhdGV2ZXIgcmVhc29uLAorICAgICAgICAjIHV0Y25vdygpIGRvZXNuJ3QgYWNjZXB0IGEgdHppbmZvIGFyZ3VtZW50LgorICAgICAgICBvZmY0MiA9IEZpeGVkT2Zmc2V0KDQyLCAiNDIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIG9mZjQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIHR6aW5mbz1vZmY0MikKKworICAgIGRlZiB0ZXN0X3R6aW5mb191dGNmcm9tdGltZXN0YW1wKHNlbGYpOgorICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICBtZXRoID0gc2VsZi50aGVjbGFzcy51dGNmcm9tdGltZXN0YW1wCisgICAgICAgIHRzID0gdGltZS50aW1lKCkKKyAgICAgICAgIyBFbnN1cmUgaXQgZG9lc24ndCByZXF1aXJlIHR6aW5mbyAoaS5lLiwgdGhhdCB0aGlzIGRvZXNuJ3QgYmxvdyB1cCkuCisgICAgICAgIGJhc2UgPSBtZXRoKHRzKQorICAgICAgICAjIFRyeSB3aXRoIGFuZCB3aXRob3V0IG5hbWluZyB0aGUga2V5d29yZDsgZm9yIHdoYXRldmVyIHJlYXNvbiwKKyAgICAgICAgIyB1dGNmcm9tdGltZXN0YW1wKCkgZG9lc24ndCBhY2NlcHQgYSB0emluZm8gYXJndW1lbnQuCisgICAgICAgIG9mZjQyID0gRml4ZWRPZmZzZXQoNDIsICI0MiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdHMsIG9mZjQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIHRzLCB0emluZm89b2ZmNDIpCisKKyAgICBkZWYgdGVzdF90emluZm9fdGltZXR1cGxlKHNlbGYpOgorICAgICAgICAjIFRlc3REYXRlVGltZSB0ZXN0ZWQgbW9zdCBvZiB0aGlzLiAgZGF0ZXRpbWUgYWRkcyBhIHR3aXN0IHRvIHRoZQorICAgICAgICAjIERTVCBmbGFnLgorICAgICAgICBjbGFzcyBEU1QodHppbmZvKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkc3R2YWx1ZSk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkc3R2YWx1ZSwgaW50KToKKyAgICAgICAgICAgICAgICAgICAgZHN0dmFsdWUgPSB0aW1lZGVsdGEobWludXRlcz1kc3R2YWx1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmRzdHZhbHVlID0gZHN0dmFsdWUKKyAgICAgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmRzdHZhbHVlCisKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworICAgICAgICBmb3IgZHN0dmFsdWUsIGZsYWcgaW4gKC0zMywgMSksICgzMywgMSksICgwLCAwKSwgKE5vbmUsIC0xKToKKyAgICAgICAgICAgIGQgPSBjbHMoMSwgMSwgMSwgMTAsIDIwLCAzMCwgNDAsIHR6aW5mbz1EU1QoZHN0dmFsdWUpKQorICAgICAgICAgICAgdCA9IGQudGltZXR1cGxlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgdC50bV95ZWFyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0LnRtX21vbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgdC50bV9tZGF5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMCwgdC50bV9ob3VyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyMCwgdC50bV9taW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMwLCB0LnRtX3NlYykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgdC50bV93ZGF5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0LnRtX3lkYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsYWcsIHQudG1faXNkc3QpCisKKyAgICAgICAgIyBkc3QoKSByZXR1cm5zIHdyb25nIHR5cGUuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2xzKDEsIDEsIDEsIHR6aW5mbz1EU1QoIngiKSkudGltZXR1cGxlKQorCisgICAgICAgICMgZHN0KCkgYXQgdGhlIGVkZ2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xzKDEsMSwxLCB0emluZm89RFNUKDE0MzkpKS50aW1ldHVwbGUoKS50bV9pc2RzdCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbHMoMSwxLDEsIHR6aW5mbz1EU1QoLTE0MzkpKS50aW1ldHVwbGUoKS50bV9pc2RzdCwgMSkKKworICAgICAgICAjIGRzdCgpIG91dCBvZiByYW5nZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2xzKDEsMSwxLCB0emluZm89RFNUKDE0NDApKS50aW1ldHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNscygxLDEsMSwgdHppbmZvPURTVCgtMTQ0MCkpLnRpbWV0dXBsZSkKKworICAgIGRlZiB0ZXN0X3V0Y3RpbWV0dXBsZShzZWxmKToKKyAgICAgICAgY2xhc3MgRFNUKHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZHN0dmFsdWUpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZHN0dmFsdWUsIGludCk6CisgICAgICAgICAgICAgICAgICAgIGRzdHZhbHVlID0gdGltZWRlbHRhKG1pbnV0ZXM9ZHN0dmFsdWUpCisgICAgICAgICAgICAgICAgc2VsZi5kc3R2YWx1ZSA9IGRzdHZhbHVlCisgICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kc3R2YWx1ZQorCisgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKKyAgICAgICAgIyBUaGlzIGNhbid0IHdvcms6ICBEU1QgZGlkbid0IGltcGxlbWVudCB1dGNvZmZzZXQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNscygxLCAxLCAxLCB0emluZm89RFNUKDApKS51dGNvZmZzZXQpCisKKyAgICAgICAgY2xhc3MgVU9GUyhEU1QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVvZnMsIGRvZnM9Tm9uZSk6CisgICAgICAgICAgICAgICAgRFNULl9faW5pdF9fKHNlbGYsIGRvZnMpCisgICAgICAgICAgICAgICAgc2VsZi51b2ZzID0gdGltZWRlbHRhKG1pbnV0ZXM9dW9mcykKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnVvZnMKKworICAgICAgICAjIEVuc3VyZSB0bV9pc2RzdCBpcyAwIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBkc3QoKSBzYXlzOiAgRFNUIGlzIG5ldmVyCisgICAgICAgICMgaW4gZWZmZWN0IGZvciBhIFVUQyB0aW1lLgorICAgICAgICBmb3IgZHN0dmFsdWUgaW4gLTMzLCAzMywgMCwgTm9uZToKKyAgICAgICAgICAgIGQgPSBjbHMoMSwgMiwgMywgMTAsIDIwLCAzMCwgNDAsIHR6aW5mbz1VT0ZTKC01MywgZHN0dmFsdWUpKQorICAgICAgICAgICAgdCA9IGQudXRjdGltZXR1cGxlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC55ZWFyLCB0LnRtX3llYXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubW9udGgsIHQudG1fbW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmRheSwgdC50bV9tZGF5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMSwgdC50bV9ob3VyKSAjIDIwbW0gKyA1M21tID0gMWhuICsgMTNtbQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMywgdC50bV9taW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuc2Vjb25kLCB0LnRtX3NlYykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC53ZWVrZGF5KCksIHQudG1fd2RheSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC50b29yZGluYWwoKSAtIGRhdGUoMSwgMSwgMSkudG9vcmRpbmFsKCkgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRtX3lkYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHQudG1faXNkc3QpCisKKyAgICAgICAgIyBBdCB0aGUgZWRnZXMsIFVUQyBhZGp1c3RtZW50IGNhbiBub3JtYWxpemUgaW50byB5ZWFycyBvdXQtb2YtcmFuZ2UKKyAgICAgICAgIyBmb3IgYSBkYXRldGltZSBvYmplY3QuICBFbnN1cmUgdGhhdCBhIGNvcnJlY3QgdGltZXR1cGxlIGlzCisgICAgICAgICMgY3JlYXRlZCBhbnl3YXkuCisgICAgICAgIHRpbnkgPSBjbHMoTUlOWUVBUiwgMSwgMSwgMCwgMCwgMzcsIHR6aW5mbz1VT0ZTKDE0MzkpKQorICAgICAgICAjIFRoYXQgZ29lcyBiYWNrIDEgbWludXRlIGxlc3MgdGhhbiBhIGZ1bGwgZGF5LgorICAgICAgICB0ID0gdGlueS51dGN0aW1ldHVwbGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1feWVhciwgTUlOWUVBUi0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1fbW9uLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX21kYXksIDMxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1faG91ciwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX21pbiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX3NlYywgMzcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV95ZGF5LCAzNjYpICAgICMgInllYXIgMCIgaXMgYSBsZWFwIHllYXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX2lzZHN0LCAwKQorCisgICAgICAgIGh1Z2UgPSBjbHMoTUFYWUVBUiwgMTIsIDMxLCAyMywgNTksIDM3LCA5OTk5OTksIHR6aW5mbz1VT0ZTKC0xNDM5KSkKKyAgICAgICAgIyBUaGF0IGdvZXMgZm9yd2FyZCAxIG1pbnV0ZSBsZXNzIHRoYW4gYSBmdWxsIGRheS4KKyAgICAgICAgdCA9IGh1Z2UudXRjdGltZXR1cGxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX3llYXIsIE1BWFlFQVIrMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX21vbiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX21kYXksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV9ob3VyLCAyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX21pbiwgNTgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV9zZWMsIDM3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1feWRheSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX2lzZHN0LCAwKQorCisgICAgZGVmIHRlc3RfdHppbmZvX2lzb2Zvcm1hdChzZWxmKToKKyAgICAgICAgemVybyA9IEZpeGVkT2Zmc2V0KDAsICIrMDA6MDAiKQorICAgICAgICBwbHVzID0gRml4ZWRPZmZzZXQoMjIwLCAiKzAzOjQwIikKKyAgICAgICAgbWludXMgPSBGaXhlZE9mZnNldCgtMjMxLCAiLTAzOjUxIikKKyAgICAgICAgdW5rbm93biA9IEZpeGVkT2Zmc2V0KE5vbmUsICIiKQorCisgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKKyAgICAgICAgZGF0ZXN0ciA9ICcwMDAxLTAyLTAzJworICAgICAgICBmb3Igb2ZzIGluIE5vbmUsIHplcm8sIHBsdXMsIG1pbnVzLCB1bmtub3duOgorICAgICAgICAgICAgZm9yIHVzIGluIDAsIDk4NzAwMToKKyAgICAgICAgICAgICAgICBkID0gY2xzKDEsIDIsIDMsIDQsIDUsIDU5LCB1cywgdHppbmZvPW9mcykKKyAgICAgICAgICAgICAgICB0aW1lc3RyID0gJzA0OjA1OjU5JyArICh1cyBhbmQgJy45ODcwMDEnIG9yICcnKQorICAgICAgICAgICAgICAgIG9mc3N0ciA9IG9mcyBpcyBub3QgTm9uZSBhbmQgZC50em5hbWUoKSBvciAnJworICAgICAgICAgICAgICAgIHRhaWxzdHIgPSB0aW1lc3RyICsgb2Zzc3RyCisgICAgICAgICAgICAgICAgaXNvID0gZC5pc29mb3JtYXQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNvLCBkYXRlc3RyICsgJ1QnICsgdGFpbHN0cikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzbywgZC5pc29mb3JtYXQoJ1QnKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXNvZm9ybWF0KCdrJyksIGRhdGVzdHIgKyAnaycgKyB0YWlsc3RyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQpLCBkYXRlc3RyICsgJyAnICsgdGFpbHN0cikKKworICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6CisgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKKyAgICAgICAgejEwMCA9IEZpeGVkT2Zmc2V0KDEwMCwgIisxMDAiKQorICAgICAgICB6bTIwMCA9IEZpeGVkT2Zmc2V0KHRpbWVkZWx0YShtaW51dGVzPS0yMDApLCAiLTIwMCIpCisgICAgICAgIGFyZ3MgPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgejEwMF0KKyAgICAgICAgYmFzZSA9IGNscygqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBiYXNlLnJlcGxhY2UoKSkKKworICAgICAgICBpID0gMAorICAgICAgICBmb3IgbmFtZSwgbmV3dmFsIGluICgoInllYXIiLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtb250aCIsIDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImRheSIsIDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImhvdXIiLCA1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtaW51dGUiLCA2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJzZWNvbmQiLCA3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtaWNyb3NlY29uZCIsIDgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInR6aW5mbyIsIHptMjAwKSk6CisgICAgICAgICAgICBuZXdhcmdzID0gYXJnc1s6XQorICAgICAgICAgICAgbmV3YXJnc1tpXSA9IG5ld3ZhbAorICAgICAgICAgICAgZXhwZWN0ZWQgPSBjbHMoKm5ld2FyZ3MpCisgICAgICAgICAgICBnb3QgPSBiYXNlLnJlcGxhY2UoKip7bmFtZTogbmV3dmFsfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKyAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgICMgRW5zdXJlIHdlIGNhbiBnZXQgcmlkIG9mIGEgdHppbmZvLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UudHpuYW1lKCksICIrMTAwIikKKyAgICAgICAgYmFzZTIgPSBiYXNlLnJlcGxhY2UodHppbmZvPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNlMi50emluZm8gaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UyLnR6bmFtZSgpIGlzIE5vbmUpCisKKyAgICAgICAgIyBFbnN1cmUgd2UgY2FuIGFkZCBvbmUuCisgICAgICAgIGJhc2UzID0gYmFzZTIucmVwbGFjZSh0emluZm89ejEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBiYXNlMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UudHppbmZvIGlzIGJhc2UzLnR6aW5mbykKKworICAgICAgICAjIE91dCBvZiBib3VuZHMuCisgICAgICAgIGJhc2UgPSBjbHMoMjAwMCwgMiwgMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2UucmVwbGFjZSwgeWVhcj0yMDAxKQorCisgICAgZGVmIHRlc3RfbW9yZV9hc3RpbWV6b25lKHNlbGYpOgorICAgICAgICAjIFRoZSBpbmhlcml0ZWQgdGVzdF9hc3RpbWV6b25lIGNvdmVyZWQgc29tZSB0cml2aWFsIGFuZCBlcnJvciBjYXNlcy4KKyAgICAgICAgZm5vbmUgPSBGaXhlZE9mZnNldChOb25lLCAiTm9uZSIpCisgICAgICAgIGY0NG0gPSBGaXhlZE9mZnNldCg0NCwgIjQ0IikKKyAgICAgICAgZm01aCA9IEZpeGVkT2Zmc2V0KC10aW1lZGVsdGEoaG91cnM9NSksICJtMzAwIikKKworICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3Mubm93KHR6PWY0NG0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdC50emluZm8gaXMgZjQ0bSkKKyAgICAgICAgIyBSZXBsYWNpbmcgd2l0aCBkZWdlbmVyYXRlIHR6aW5mbyByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkdC5hc3RpbWV6b25lLCBmbm9uZSkKKyAgICAgICAgIyBEaXR0byB3aXRoIE5vbmUgdHouCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZHQuYXN0aW1lem9uZSwgTm9uZSkKKyAgICAgICAgIyBSZXBsYWNpbmcgd2l0aCBzYW1lIHR6aW5mbyBtYWtlcyBubyBjaGFuZ2UuCisgICAgICAgIHggPSBkdC5hc3RpbWV6b25lKGR0LnR6aW5mbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHgudHppbmZvIGlzIGY0NG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5kYXRlKCksIGR0LmRhdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnRpbWUoKSwgZHQudGltZSgpKQorCisgICAgICAgICMgUmVwbGFjaW5nIHdpdGggZGlmZmVyZW50IHR6aW5mbyBkb2VzIGFkanVzdC4KKyAgICAgICAgZ290ID0gZHQuYXN0aW1lem9uZShmbTVoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ290LnR6aW5mbyBpcyBmbTVoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdC51dGNvZmZzZXQoKSwgdGltZWRlbHRhKGhvdXJzPS01KSkKKyAgICAgICAgZXhwZWN0ZWQgPSBkdCAtIGR0LnV0Y29mZnNldCgpICAjIGluIGVmZmVjdCwgY29udmVydCB0byBVVEMKKyAgICAgICAgZXhwZWN0ZWQgKz0gZm01aC51dGNvZmZzZXQoZHQpICAjIGFuZCBmcm9tIHRoZXJlIHRvIGxvY2FsIHRpbWUKKyAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZC5yZXBsYWNlKHR6aW5mbz1mbTVoKSAjIGFuZCBhdHRhY2ggbmV3IHR6aW5mbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdC5kYXRlKCksIGV4cGVjdGVkLmRhdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QudGltZSgpLCBleHBlY3RlZC50aW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LnRpbWV0eigpLCBleHBlY3RlZC50aW1ldHooKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdvdC50emluZm8gaXMgZXhwZWN0ZWQudHppbmZvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9hd2FyZV9zdWJ0cmFjdChzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworCisgICAgICAgICMgRW5zdXJlIHRoYXQgdXRjb2Zmc2V0KCkgaXMgaWdub3JlZCB3aGVuIHRoZSBvcGVyYW5kcyBoYXZlIHRoZQorICAgICAgICAjIHNhbWUgdHppbmZvIG1lbWJlci4KKyAgICAgICAgY2xhc3MgT3BlcmFuZERlcGVuZGVudE9mZnNldCh0emluZm8pOgorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCB0KToKKyAgICAgICAgICAgICAgICBpZiB0Lm1pbnV0ZSA8IDEwOgorICAgICAgICAgICAgICAgICAgICAjIGQwIGFuZCBkMSBlcXVhbCBhZnRlciBhZGp1c3RtZW50CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lZGVsdGEobWludXRlcz10Lm1pbnV0ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIGQyIG9mZiBpbiB0aGUgd2VlZHMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVkZWx0YShtaW51dGVzPTU5KQorCisgICAgICAgIGJhc2UgPSBjbHMoOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCB0emluZm89T3BlcmFuZERlcGVuZGVudE9mZnNldCgpKQorICAgICAgICBkMCA9IGJhc2UucmVwbGFjZShtaW51dGU9MykKKyAgICAgICAgZDEgPSBiYXNlLnJlcGxhY2UobWludXRlPTkpCisgICAgICAgIGQyID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT0xMSkKKyAgICAgICAgZm9yIHggaW4gZDAsIGQxLCBkMjoKKyAgICAgICAgICAgIGZvciB5IGluIGQwLCBkMSwgZDI6CisgICAgICAgICAgICAgICAgZ290ID0geCAtIHkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRpbWVkZWx0YShtaW51dGVzPXgubWludXRlIC0geS5taW51dGUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQorCisgICAgICAgICMgT1RPSCwgaWYgdGhlIHR6aW5mbyBtZW1iZXJzIGFyZSBkaXN0aW5jdCwgdXRjb2Zmc2V0cyBhcmVuJ3QKKyAgICAgICAgIyBpZ25vcmVkLgorICAgICAgICBiYXNlID0gY2xzKDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCkKKyAgICAgICAgZDAgPSBiYXNlLnJlcGxhY2UobWludXRlPTMsIHR6aW5mbz1PcGVyYW5kRGVwZW5kZW50T2Zmc2V0KCkpCisgICAgICAgIGQxID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT05LCB0emluZm89T3BlcmFuZERlcGVuZGVudE9mZnNldCgpKQorICAgICAgICBkMiA9IGJhc2UucmVwbGFjZShtaW51dGU9MTEsIHR6aW5mbz1PcGVyYW5kRGVwZW5kZW50T2Zmc2V0KCkpCisgICAgICAgIGZvciB4IGluIGQwLCBkMSwgZDI6CisgICAgICAgICAgICBmb3IgeSBpbiBkMCwgZDEsIGQyOgorICAgICAgICAgICAgICAgIGdvdCA9IHggLSB5CisgICAgICAgICAgICAgICAgaWYgKHggaXMgZDAgb3IgeCBpcyBkMSkgYW5kICh5IGlzIGQwIG9yIHkgaXMgZDEpOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRpbWVkZWx0YSgwKQorICAgICAgICAgICAgICAgIGVsaWYgeCBpcyB5IGlzIGQyOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRpbWVkZWx0YSgwKQorICAgICAgICAgICAgICAgIGVsaWYgeCBpcyBkMjoKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB0aW1lZGVsdGEobWludXRlcz0oMTEtNTkpLTApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHkgaXMgZDIKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB0aW1lZGVsdGEobWludXRlcz0wLSgxMS01OSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfY29tcGFyZShzZWxmKToKKyAgICAgICAgdDEgPSBkYXRldGltZSgxLCAyLCAzLCA0LCA1LCA2LCA3KQorICAgICAgICB0MiA9IGRhdGV0aW1lKDEsIDIsIDMsIDQsIDUsIDYsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorICAgICAgICB0MiA9IHQyLnJlcGxhY2UodHppbmZvPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorICAgICAgICB0MiA9IHQyLnJlcGxhY2UodHppbmZvPUZpeGVkT2Zmc2V0KE5vbmUsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCisgICAgICAgIHQyID0gdDIucmVwbGFjZSh0emluZm89Rml4ZWRPZmZzZXQoMCwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPT0gdDIpCisKKyAgICAgICAgIyBJbiBkYXRldGltZSB3LyBpZGVudGljYWwgdHppbmZvIG9iamVjdHMsIHV0Y29mZnNldCBpcyBpZ25vcmVkLgorICAgICAgICBjbGFzcyBWYXJpZXModHppbmZvKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLm9mZnNldCA9IHRpbWVkZWx0YShtaW51dGVzPTIyKQorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCB0KToKKyAgICAgICAgICAgICAgICBzZWxmLm9mZnNldCArPSB0aW1lZGVsdGEobWludXRlcz0xKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm9mZnNldAorCisgICAgICAgIHYgPSBWYXJpZXMoKQorICAgICAgICB0MSA9IHQyLnJlcGxhY2UodHppbmZvPXYpCisgICAgICAgIHQyID0gdDIucmVwbGFjZSh0emluZm89dikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9MjMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0yNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorCisgICAgICAgICMgQnV0IGlmIHRoZXkncmUgbm90IGlkZW50aWNhbCwgaXQgaXNuJ3QgaWdub3JlZC4KKyAgICAgICAgdDIgPSB0Mi5yZXBsYWNlKHR6aW5mbz1WYXJpZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpICAjIHQxJ3Mgb2Zmc2V0IGNvdW50ZXIgc3RpbGwgZ29pbmcgdXAKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX2RhdGV0aW1ldHooc2VsZik6CisKKyAgICAgICAgY2xhc3MgQyhzZWxmLnRoZWNsYXNzKToKKyAgICAgICAgICAgIHRoZUFuc3dlciA9IDQyCisKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dzKToKKyAgICAgICAgICAgICAgICB0ZW1wID0ga3dzLmNvcHkoKQorICAgICAgICAgICAgICAgIGV4dHJhID0gdGVtcC5wb3AoJ2V4dHJhJykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnRoZWNsYXNzLl9fbmV3X18oY2xzLCAqYXJncywgKip0ZW1wKQorICAgICAgICAgICAgICAgIHJlc3VsdC5leHRyYSA9IGV4dHJhCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgICAgICBkZWYgbmV3bWV0aChzZWxmLCBzdGFydCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0ICsgc2VsZi5ob3VyICsgc2VsZi55ZWFyCisKKyAgICAgICAgYXJncyA9IDIwMDIsIDEyLCAzMSwgNCwgNSwgNiwgNTAwLCBGaXhlZE9mZnNldCgtMzAwLCAiRVNUIiwgMSkKKworICAgICAgICBkdDEgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBkdDIgPSBDKCphcmdzLCAqKnsnZXh0cmEnOiA3fSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5fX2NsYXNzX18sIEMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLnRoZUFuc3dlciwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLmV4dHJhLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MS51dGNvZmZzZXQoKSwgZHQyLnV0Y29mZnNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5uZXdtZXRoKC03KSwgZHQxLmhvdXIgKyBkdDEueWVhciAtIDcpCisKKyMgUGFpbiB0byBzZXQgdXAgRFNULWF3YXJlIHR6aW5mbyBjbGFzc2VzLgorCitkZWYgZmlyc3Rfc3VuZGF5X29uX29yX2FmdGVyKGR0KToKKyAgICBkYXlzX3RvX2dvID0gNiAtIGR0LndlZWtkYXkoKQorICAgIGlmIGRheXNfdG9fZ286CisgICAgICAgIGR0ICs9IHRpbWVkZWx0YShkYXlzX3RvX2dvKQorICAgIHJldHVybiBkdAorCitaRVJPID0gdGltZWRlbHRhKDApCitIT1VSID0gdGltZWRlbHRhKGhvdXJzPTEpCitEQVkgPSB0aW1lZGVsdGEoZGF5cz0xKQorIyBJbiB0aGUgVVMsIERTVCBzdGFydHMgYXQgMmFtIChzdGFuZGFyZCB0aW1lKSBvbiB0aGUgZmlyc3QgU3VuZGF5IGluIEFwcmlsLgorRFNUU1RBUlQgPSBkYXRldGltZSgxLCA0LCAxLCAyKQorIyBhbmQgZW5kcyBhdCAyYW0gKERTVCB0aW1lOyAxYW0gc3RhbmRhcmQgdGltZSkgb24gdGhlIGxhc3QgU3VuZGF5IG9mIE9jdCwKKyMgd2hpY2ggaXMgdGhlIGZpcnN0IFN1bmRheSBvbiBvciBhZnRlciBPY3QgMjUuICBCZWNhdXNlIHdlIHZpZXcgMTpNTSBhcworIyBiZWluZyBzdGFuZGFyZCB0aW1lIG9uIHRoYXQgZGF5LCB0aGVyZSBpcyBubyBzcGVsbGluZyBpbiBsb2NhbCB0aW1lIG9mCisjIHRoZSBsYXN0IGhvdXIgb2YgRFNUICh0aGF0J3MgMTpNTSBEU1QsIGJ1dCAxOk1NIGlzIHRha2VuIGFzIHN0YW5kYXJkIHRpbWUpLgorRFNURU5EID0gZGF0ZXRpbWUoMSwgMTAsIDI1LCAxKQorCitjbGFzcyBVU1RpbWVab25lKHR6aW5mbyk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG91cnMsIHJlcHJuYW1lLCBzdGRuYW1lLCBkc3RuYW1lKToKKyAgICAgICAgc2VsZi5zdGRvZmZzZXQgPSB0aW1lZGVsdGEoaG91cnM9aG91cnMpCisgICAgICAgIHNlbGYucmVwcm5hbWUgPSByZXBybmFtZQorICAgICAgICBzZWxmLnN0ZG5hbWUgPSBzdGRuYW1lCisgICAgICAgIHNlbGYuZHN0bmFtZSA9IGRzdG5hbWUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVwcm5hbWUKKworICAgIGRlZiB0em5hbWUoc2VsZiwgZHQpOgorICAgICAgICBpZiBzZWxmLmRzdChkdCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5kc3RuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdGRuYW1lCisKKyAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuc3Rkb2Zmc2V0ICsgc2VsZi5kc3QoZHQpCisKKyAgICBkZWYgZHN0KHNlbGYsIGR0KToKKyAgICAgICAgaWYgZHQgaXMgTm9uZSBvciBkdC50emluZm8gaXMgTm9uZToKKyAgICAgICAgICAgICMgQW4gZXhjZXB0aW9uIGluc3RlYWQgbWF5IGJlIHNlbnNpYmxlIGhlcmUsIGluIG9uZSBvciBtb3JlIG9mCisgICAgICAgICAgICAjIHRoZSBjYXNlcy4KKyAgICAgICAgICAgIHJldHVybiBaRVJPCisgICAgICAgIGFzc2VydCBkdC50emluZm8gaXMgc2VsZgorCisgICAgICAgICMgRmluZCBmaXJzdCBTdW5kYXkgaW4gQXByaWwuCisgICAgICAgIHN0YXJ0ID0gZmlyc3Rfc3VuZGF5X29uX29yX2FmdGVyKERTVFNUQVJULnJlcGxhY2UoeWVhcj1kdC55ZWFyKSkKKyAgICAgICAgYXNzZXJ0IHN0YXJ0LndlZWtkYXkoKSA9PSA2IGFuZCBzdGFydC5tb250aCA9PSA0IGFuZCBzdGFydC5kYXkgPD0gNworCisgICAgICAgICMgRmluZCBsYXN0IFN1bmRheSBpbiBPY3RvYmVyLgorICAgICAgICBlbmQgPSBmaXJzdF9zdW5kYXlfb25fb3JfYWZ0ZXIoRFNURU5ELnJlcGxhY2UoeWVhcj1kdC55ZWFyKSkKKyAgICAgICAgYXNzZXJ0IGVuZC53ZWVrZGF5KCkgPT0gNiBhbmQgZW5kLm1vbnRoID09IDEwIGFuZCBlbmQuZGF5ID49IDI1CisKKyAgICAgICAgIyBDYW4ndCBjb21wYXJlIG5haXZlIHRvIGF3YXJlIG9iamVjdHMsIHNvIHN0cmlwIHRoZSB0aW1lem9uZSBmcm9tCisgICAgICAgICMgZHQgZmlyc3QuCisgICAgICAgIGlmIHN0YXJ0IDw9IGR0LnJlcGxhY2UodHppbmZvPU5vbmUpIDwgZW5kOgorICAgICAgICAgICAgcmV0dXJuIEhPVVIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBaRVJPCisKK0Vhc3Rlcm4gID0gVVNUaW1lWm9uZSgtNSwgIkVhc3Rlcm4iLCAgIkVTVCIsICJFRFQiKQorQ2VudHJhbCAgPSBVU1RpbWVab25lKC02LCAiQ2VudHJhbCIsICAiQ1NUIiwgIkNEVCIpCitNb3VudGFpbiA9IFVTVGltZVpvbmUoLTcsICJNb3VudGFpbiIsICJNU1QiLCAiTURUIikKK1BhY2lmaWMgID0gVVNUaW1lWm9uZSgtOCwgIlBhY2lmaWMiLCAgIlBTVCIsICJQRFQiKQordXRjX3JlYWwgPSBGaXhlZE9mZnNldCgwLCAiVVRDIiwgMCkKKyMgRm9yIGJldHRlciB0ZXN0IGNvdmVyYWdlLCB3ZSB3YW50IGFub3RoZXIgZmxhdm9yIG9mIFVUQyB0aGF0J3Mgd2VzdCBvZgorIyB0aGUgRWFzdGVybiBhbmQgUGFjaWZpYyB0aW1lem9uZXMuCit1dGNfZmFrZSA9IEZpeGVkT2Zmc2V0KC0xMio2MCwgIlVUQ2Zha2UiLCAwKQorCitjbGFzcyBUZXN0VGltZXpvbmVDb252ZXJzaW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUaGUgRFNUIHN3aXRjaCB0aW1lcyBmb3IgMjAwMiwgaW4gc3RkIHRpbWUuCisgICAgZHN0b24gPSBkYXRldGltZSgyMDAyLCA0LCA3LCAyKQorICAgIGRzdG9mZiA9IGRhdGV0aW1lKDIwMDIsIDEwLCAyNywgMSkKKworICAgIHRoZWNsYXNzID0gZGF0ZXRpbWUKKworICAgICMgQ2hlY2sgYSB0aW1lIHRoYXQncyBpbnNpZGUgRFNULgorICAgIGRlZiBjaGVja2luc2lkZShzZWxmLCBkdCwgdHosIHV0YywgZHN0b24sIGRzdG9mZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuZHN0KCksIEhPVVIpCisKKyAgICAgICAgIyBDb252ZXJzaW9uIHRvIG91ciBvd24gdGltZXpvbmUgaXMgYWx3YXlzIGFuIGlkZW50aXR5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmFzdGltZXpvbmUodHopLCBkdCkKKworICAgICAgICBhc3V0YyA9IGR0LmFzdGltZXpvbmUodXRjKQorICAgICAgICB0aGVyZV9hbmRfYmFjayA9IGFzdXRjLmFzdGltZXpvbmUodHopCisKKyAgICAgICAgIyBDb252ZXJzaW9uIHRvIFVUQyBhbmQgYmFjayBpc24ndCBhbHdheXMgYW4gaWRlbnRpdHkgaGVyZSwKKyAgICAgICAgIyBiZWNhdXNlIHRoZXJlIGFyZSByZWR1bmRhbnQgc3BlbGxpbmdzIChpbiBsb2NhbCB0aW1lKSBvZgorICAgICAgICAjIFVUQyB0aW1lIHdoZW4gRFNUIGJlZ2luczogIHRoZSBjbG9jayBqdW1wcyBmcm9tIDE6NTk6NTkKKyAgICAgICAgIyB0byAzOjAwOjAwLCBhbmQgYSBsb2NhbCB0aW1lIG9mIDI6TU06U1MgZG9lc24ndCByZWFsbHkKKyAgICAgICAgIyBtYWtlIHNlbnNlIHRoZW4uICBUaGUgY2xhc3NlcyBhYm92ZSB0cmVhdCAyOk1NOlNTIGFzCisgICAgICAgICMgZGF5bGlnaHQgdGltZSB0aGVuIChpdCdzICJhZnRlciAyYW0iKSwgcmVhbGx5IGFuIGFsaWFzCisgICAgICAgICMgZm9yIDE6TU06U1Mgc3RhbmRhcmQgdGltZS4gIFRoZSBsYXR0ZXIgZm9ybSBpcyB3aGF0CisgICAgICAgICMgY29udmVyc2lvbiBiYWNrIGZyb20gVVRDIHByb2R1Y2VzLgorICAgICAgICBpZiBkdC5kYXRlKCkgPT0gZHN0b24uZGF0ZSgpIGFuZCBkdC5ob3VyID09IDI6CisgICAgICAgICAgICAjIFdlJ3JlIGluIHRoZSByZWR1bmRhbnQgaG91ciwgYW5kIGNvbWluZyBiYWNrIGZyb20KKyAgICAgICAgICAgICMgVVRDIGdpdmVzIHRoZSAxOk1NOlNTIHN0YW5kYXJkLXRpbWUgc3BlbGxpbmcuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZXJlX2FuZF9iYWNrICsgSE9VUiwgZHQpCisgICAgICAgICAgICAjIEFsdGhvdWdoIGR1cmluZyB3YXMgY29uc2lkZXJlZCB0byBiZSBpbiBkYXlsaWdodAorICAgICAgICAgICAgIyB0aW1lLCB0aGVyZV9hbmRfYmFjayBpcyBub3QuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZXJlX2FuZF9iYWNrLmRzdCgpLCBaRVJPKQorICAgICAgICAgICAgIyBUaGV5J3JlIHRoZSBzYW1lIHRpbWVzIGluIFVUQy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhlcmVfYW5kX2JhY2suYXN0aW1lem9uZSh1dGMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdC5hc3RpbWV6b25lKHV0YykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFdlJ3JlIG5vdCBpbiB0aGUgcmVkdW5kYW50IGhvdXIuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCB0aGVyZV9hbmRfYmFjaykKKworICAgICAgICAjIEJlY2F1c2Ugd2UgaGF2ZSBhIHJlZHVuZGFudCBzcGVsbGluZyB3aGVuIERTVCBiZWdpbnMsIHRoZXJlIGlzCisgICAgICAgICMgKHVuZm9ydHVuYXRlbHkpIGFuIGhvdXIgd2hlbiBEU1QgZW5kcyB0aGF0IGNhbid0IGJlIHNwZWxsZWQgYXQgYWxsIGluCisgICAgICAgICMgbG9jYWwgdGltZS4gIFdoZW4gRFNUIGVuZHMsIHRoZSBjbG9jayBqdW1wcyBmcm9tIDE6NTkgYmFjayB0byAxOjAwCisgICAgICAgICMgYWdhaW4uICBUaGUgaG91ciAxOk1NIERTVCBoYXMgbm8gc3BlbGxpbmcgdGhlbjogIDE6TU0gaXMgdGFrZW4gdG8gYmUKKyAgICAgICAgIyBzdGFuZGFyZCB0aW1lLiAgMTpNTSBEU1QgPT0gMDpNTSBFU1QsIGJ1dCAwOk1NIGlzIHRha2VuIHRvIGJlCisgICAgICAgICMgZGF5bGlnaHQgdGltZS4gIFRoZSBob3VyIDE6TU0gZGF5bGlnaHQgPT0gMDpNTSBzdGFuZGFyZCBjYW4ndCBiZQorICAgICAgICAjIGV4cHJlc3NlZCBpbiBsb2NhbCB0aW1lLiAgTmV2ZXJ0aGVsZXNzLCB3ZSB3YW50IGNvbnZlcnNpb24gYmFjaworICAgICAgICAjIGZyb20gVVRDIHRvIG1pbWljIHRoZSBsb2NhbCBjbG9jaydzICJyZXBlYXQgYW4gaG91ciIgYmVoYXZpb3IuCisgICAgICAgIG5leHRob3VyX3V0YyA9IGFzdXRjICsgSE9VUgorICAgICAgICBuZXh0aG91cl90eiA9IG5leHRob3VyX3V0Yy5hc3RpbWV6b25lKHR6KQorICAgICAgICBpZiBkdC5kYXRlKCkgPT0gZHN0b2ZmLmRhdGUoKSBhbmQgZHQuaG91ciA9PSAwOgorICAgICAgICAgICAgIyBXZSdyZSBpbiB0aGUgaG91ciBiZWZvcmUgdGhlIGxhc3QgRFNUIGhvdXIuICBUaGUgbGFzdCBEU1QgaG91cgorICAgICAgICAgICAgIyBpcyBpbmVmZmFibGUuICBXZSB3YW50IHRoZSBjb252ZXJzaW9uIGJhY2sgdG8gcmVwZWF0IDE6TU0uCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHRob3VyX3R6LCBkdC5yZXBsYWNlKGhvdXI9MSkpCisgICAgICAgICAgICBuZXh0aG91cl91dGMgKz0gSE9VUgorICAgICAgICAgICAgbmV4dGhvdXJfdHogPSBuZXh0aG91cl91dGMuYXN0aW1lem9uZSh0eikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dGhvdXJfdHosIGR0LnJlcGxhY2UoaG91cj0xKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dGhvdXJfdHogLSBkdCwgSE9VUikKKworICAgICMgQ2hlY2sgYSB0aW1lIHRoYXQncyBvdXRzaWRlIERTVC4KKyAgICBkZWYgY2hlY2tvdXRzaWRlKHNlbGYsIGR0LCB0eiwgdXRjKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5kc3QoKSwgWkVSTykKKworICAgICAgICAjIENvbnZlcnNpb24gdG8gb3VyIG93biB0aW1lem9uZSBpcyBhbHdheXMgYW4gaWRlbnRpdHkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuYXN0aW1lem9uZSh0eiksIGR0KQorCisgICAgICAgICMgQ29udmVydGluZyB0byBVVEMgYW5kIGJhY2sgaXMgYW4gaWRlbnRpdHkgdG9vLgorICAgICAgICBhc3V0YyA9IGR0LmFzdGltZXpvbmUodXRjKQorICAgICAgICB0aGVyZV9hbmRfYmFjayA9IGFzdXRjLmFzdGltZXpvbmUodHopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIHRoZXJlX2FuZF9iYWNrKQorCisgICAgZGVmIGNvbnZlcnRfYmV0d2Vlbl90el9hbmRfdXRjKHNlbGYsIHR6LCB1dGMpOgorICAgICAgICBkc3RvbiA9IHNlbGYuZHN0b24ucmVwbGFjZSh0emluZm89dHopCisgICAgICAgICMgQmVjYXVzZSAxOk1NIG9uIHRoZSBkYXkgRFNUIGVuZHMgaXMgdGFrZW4gYXMgYmVpbmcgc3RhbmRhcmQgdGltZSwKKyAgICAgICAgIyB0aGVyZSBpcyBubyBzcGVsbGluZyBpbiB0eiBmb3IgdGhlIGxhc3QgaG91ciBvZiBkYXlsaWdodCB0aW1lLgorICAgICAgICAjIEZvciBwdXJwb3NlcyBvZiB0aGUgdGVzdCwgdGhlIGxhc3QgaG91ciBvZiBEU1QgaXMgMDpNTSwgd2hpY2ggaXMKKyAgICAgICAgIyB0YWtlbiBhcyBiZWluZyBkYXlsaWdodCB0aW1lIChhbmQgMTpNTSBpcyB0YWtlbiBhcyBiZWluZyBzdGFuZGFyZAorICAgICAgICAjIHRpbWUpLgorICAgICAgICBkc3RvZmYgPSBzZWxmLmRzdG9mZi5yZXBsYWNlKHR6aW5mbz10eikKKyAgICAgICAgZm9yIGRlbHRhIGluICh0aW1lZGVsdGEod2Vla3M9MTMpLAorICAgICAgICAgICAgICAgICAgICAgIERBWSwKKyAgICAgICAgICAgICAgICAgICAgICBIT1VSLAorICAgICAgICAgICAgICAgICAgICAgIHRpbWVkZWx0YShtaW51dGVzPTEpLAorICAgICAgICAgICAgICAgICAgICAgIHRpbWVkZWx0YShtaWNyb3NlY29uZHM9MSkpOgorCisgICAgICAgICAgICBzZWxmLmNoZWNraW5zaWRlKGRzdG9uLCB0eiwgdXRjLCBkc3RvbiwgZHN0b2ZmKQorICAgICAgICAgICAgZm9yIGR1cmluZyBpbiBkc3RvbiArIGRlbHRhLCBkc3RvZmYgLSBkZWx0YToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNraW5zaWRlKGR1cmluZywgdHosIHV0YywgZHN0b24sIGRzdG9mZikKKworICAgICAgICAgICAgc2VsZi5jaGVja291dHNpZGUoZHN0b2ZmLCB0eiwgdXRjKQorICAgICAgICAgICAgZm9yIG91dHNpZGUgaW4gZHN0b24gLSBkZWx0YSwgZHN0b2ZmICsgZGVsdGE6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja291dHNpZGUob3V0c2lkZSwgdHosIHV0YykKKworICAgIGRlZiB0ZXN0X2Vhc3koc2VsZik6CisgICAgICAgICMgRGVzcGl0ZSB0aGUgbmFtZSBvZiB0aGlzIHRlc3QsIHRoZSBlbmRjYXNlcyBhcmUgZXhjcnVjaWF0aW5nLgorICAgICAgICBzZWxmLmNvbnZlcnRfYmV0d2Vlbl90el9hbmRfdXRjKEVhc3Rlcm4sIHV0Y19yZWFsKQorICAgICAgICBzZWxmLmNvbnZlcnRfYmV0d2Vlbl90el9hbmRfdXRjKFBhY2lmaWMsIHV0Y19yZWFsKQorICAgICAgICBzZWxmLmNvbnZlcnRfYmV0d2Vlbl90el9hbmRfdXRjKEVhc3Rlcm4sIHV0Y19mYWtlKQorICAgICAgICBzZWxmLmNvbnZlcnRfYmV0d2Vlbl90el9hbmRfdXRjKFBhY2lmaWMsIHV0Y19mYWtlKQorICAgICAgICAjIFRoZSBuZXh0IGlzIHJlYWxseSBkYW5jaW5nIG5lYXIgdGhlIGVkZ2UuICBJdCB3b3JrcyBiZWNhdXNlCisgICAgICAgICMgUGFjaWZpYyBhbmQgRWFzdGVybiBhcmUgZmFyIGVub3VnaCBhcGFydCB0aGF0IHRoZWlyICJwcm9ibGVtCisgICAgICAgICMgaG91cnMiIGRvbid0IG92ZXJsYXAuCisgICAgICAgIHNlbGYuY29udmVydF9iZXR3ZWVuX3R6X2FuZF91dGMoRWFzdGVybiwgUGFjaWZpYykKKyAgICAgICAgc2VsZi5jb252ZXJ0X2JldHdlZW5fdHpfYW5kX3V0YyhQYWNpZmljLCBFYXN0ZXJuKQorICAgICAgICAjIE9UT0gsIHRoZXNlIGZhaWwhICBEb24ndCBlbmFibGUgdGhlbS4gIFRoZSBkaWZmaWN1bHR5IGlzIHRoYXQKKyAgICAgICAgIyB0aGUgZWRnZSBjYXNlIHRlc3RzIGFzc3VtZSB0aGF0IGV2ZXJ5IGhvdXIgaXMgcmVwcmVzZW50YWJsZSBpbgorICAgICAgICAjIHRoZSAidXRjIiBjbGFzcy4gIFRoaXMgaXMgYWx3YXlzIHRydWUgZm9yIGEgZml4ZWQtb2Zmc2V0IHR6aW5mbworICAgICAgICAjIGNsYXNzIChsa2UgdXRjX3JlYWwgYW5kIHV0Y19mYWtlKSwgYnV0IG5vdCBmb3IgRWFzdGVybiBvciBDZW50cmFsLgorICAgICAgICAjIEZvciB0aGVzZSBhZGphY2VudCBEU1QtYXdhcmUgdGltZSB6b25lcywgdGhlIHJhbmdlIG9mIHRpbWUgb2Zmc2V0cworICAgICAgICAjIHRlc3RlZCBlbmRzIHVwIGNyZWF0aW5nIGhvdXJzIGluIHRoZSBvbmUgdGhhdCBhcmVuJ3QgcmVwcmVzZW50YWJsZQorICAgICAgICAjIGluIHRoZSBvdGhlci4gIEZvciB0aGUgc2FtZSByZWFzb24sIHdlIHdvdWxkIHNlZSBmYWlsdXJlcyBpbiB0aGUKKyAgICAgICAgIyBFYXN0ZXJuIHZzIFBhY2lmaWMgdGVzdHMgdG9vIGlmIHdlIGFkZGVkIDMqSE9VUiB0byB0aGUgbGlzdCBvZgorICAgICAgICAjIG9mZnNldCBkZWx0YXMgaW4gY29udmVydF9iZXR3ZWVuX3R6X2FuZF91dGMoKS4KKyAgICAgICAgIworICAgICAgICAjIHNlbGYuY29udmVydF9iZXR3ZWVuX3R6X2FuZF91dGMoRWFzdGVybiwgQ2VudHJhbCkgICMgY2FuJ3Qgd29yaworICAgICAgICAjIHNlbGYuY29udmVydF9iZXR3ZWVuX3R6X2FuZF91dGMoQ2VudHJhbCwgRWFzdGVybikgICMgY2FuJ3Qgd29yaworCisgICAgZGVmIHRlc3RfdHJpY2t5KHNlbGYpOgorICAgICAgICAjIDIyOjAwIG9uIGRheSBiZWZvcmUgZGF5bGlnaHQgc3RhcnRzLgorICAgICAgICBmb3VyYmFjayA9IHNlbGYuZHN0b24gLSB0aW1lZGVsdGEoaG91cnM9NCkKKyAgICAgICAgbmluZXdlc3QgPSBGaXhlZE9mZnNldCgtOSo2MCwgIi0wOTAwIiwgMCkKKyAgICAgICAgZm91cmJhY2sgPSBmb3VyYmFjay5yZXBsYWNlKHR6aW5mbz1uaW5ld2VzdCkKKyAgICAgICAgIyAyMjowMC0wOTAwIGlzIDc6MDAgVVRDID09IDI6MDAgRVNUID09IDM6MDAgRFNULiAgU2luY2UgaXQncyAiYWZ0ZXIKKyAgICAgICAgIyAyIiwgd2Ugc2hvdWxkIGdldCB0aGUgMyBzcGVsbGluZy4KKyAgICAgICAgIyBJZiB3ZSBwbHVnIDIyOjAwIHRoZSBkYXkgYmVmb3JlIGludG8gRWFzdGVybiwgaXQgImxvb2tzIGxpa2Ugc3RkCisgICAgICAgICMgdGltZSIsIHNvIGl0cyBvZmZzZXQgaXMgcmV0dXJuZWQgYXMgLTUsIGFuZCAtNSAtIC05ID0gNC4gIEFkZGluZyA0CisgICAgICAgICMgdG8gMjI6MDAgbGFuZHMgb24gMjowMCwgd2hpY2ggbWFrZXMgbm8gc2Vuc2UgaW4gbG9jYWwgdGltZSAodGhlCisgICAgICAgICMgbG9jYWwgY2xvY2sganVtcHMgZnJvbSAxIHRvIDMpLiAgVGhlIHBvaW50IGhlcmUgaXMgdG8gbWFrZSBzdXJlIHdlCisgICAgICAgICMgZ2V0IHRoZSAzIHNwZWxsaW5nLgorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZHN0b24ucmVwbGFjZShob3VyPTMpCisgICAgICAgIGdvdCA9IGZvdXJiYWNrLmFzdGltZXpvbmUoRWFzdGVybikucmVwbGFjZSh0emluZm89Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorCisgICAgICAgICMgU2ltaWxhciwgYnV0IG1hcCB0byA2OjAwIFVUQyA9PSAxOjAwIEVTVCA9PSAyOjAwIERTVC4gIEluIHRoYXQKKyAgICAgICAgIyBjYXNlIHdlIHdhbnQgdGhlIDE6MDAgc3BlbGxpbmcuCisgICAgICAgIHNpeHV0YyA9IHNlbGYuZHN0b24ucmVwbGFjZShob3VyPTYsIHR6aW5mbz11dGNfcmVhbCkKKyAgICAgICAgIyBOb3cgNjowMCAibG9va3MgbGlrZSBkYXlsaWdodCIsIHNvIHRoZSBvZmZzZXQgd3J0IEVhc3Rlcm4gaXMgLTQsCisgICAgICAgICMgYW5kIGFkZGluZyAtNC0wID09IC00IGdpdmVzIHRoZSAyOjAwIHNwZWxsaW5nLiAgV2Ugd2FudCB0aGUgMTowMCBFU1QKKyAgICAgICAgIyBzcGVsbGluZy4KKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmRzdG9uLnJlcGxhY2UoaG91cj0xKQorICAgICAgICBnb3QgPSBzaXh1dGMuYXN0aW1lem9uZShFYXN0ZXJuKS5yZXBsYWNlKHR6aW5mbz1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisKKyAgICAgICAgIyBOb3cgb24gdGhlIGRheSBEU1QgZW5kcywgd2Ugd2FudCAicmVwZWF0IGFuIGhvdXIiIGJlaGF2aW9yLgorICAgICAgICAjICBVVEMgIDQ6TU0gIDU6TU0gIDY6TU0gIDc6TU0gIGNoZWNraW5nIHRoZXNlCisgICAgICAgICMgIEVTVCAyMzpNTSAgMDpNTSAgMTpNTSAgMjpNTQorICAgICAgICAjICBFRFQgIDA6TU0gIDE6TU0gIDI6TU0gIDM6TU0KKyAgICAgICAgIyB3YWxsICAwOk1NICAxOk1NICAxOk1NICAyOk1NICBhZ2FpbnN0IHRoZXNlCisgICAgICAgIGZvciB1dGMgaW4gdXRjX3JlYWwsIHV0Y19mYWtlOgorICAgICAgICAgICAgZm9yIHR6IGluIEVhc3Rlcm4sIFBhY2lmaWM6CisgICAgICAgICAgICAgICAgZmlyc3Rfc3RkX2hvdXIgPSBzZWxmLmRzdG9mZiAtIHRpbWVkZWx0YShob3Vycz0yKSAjIDIzOk1NCisgICAgICAgICAgICAgICAgIyBDb252ZXJ0IHRoYXQgdG8gVVRDLgorICAgICAgICAgICAgICAgIGZpcnN0X3N0ZF9ob3VyIC09IHR6LnV0Y29mZnNldChOb25lKQorICAgICAgICAgICAgICAgICMgQWRqdXN0IGZvciBwb3NzaWJseSBmYWtlIFVUQy4KKyAgICAgICAgICAgICAgICBhc3V0YyA9IGZpcnN0X3N0ZF9ob3VyICsgdXRjLnV0Y29mZnNldChOb25lKQorICAgICAgICAgICAgICAgICMgRmlyc3QgVVRDIGhvdXIgdG8gY29udmVydDsgdGhpcyBpcyA0OjAwIHdoZW4gdXRjPXV0Y19yZWFsICYKKyAgICAgICAgICAgICAgICAjIHR6PUVhc3Rlcm4uCisgICAgICAgICAgICAgICAgYXN1dGNiYXNlID0gYXN1dGMucmVwbGFjZSh0emluZm89dXRjKQorICAgICAgICAgICAgICAgIGZvciB0emhvdXIgaW4gKDAsIDEsIDEsIDIpOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZGJhc2UgPSBzZWxmLmRzdG9mZi5yZXBsYWNlKGhvdXI9dHpob3VyKQorICAgICAgICAgICAgICAgICAgICBmb3IgbWludXRlIGluIDAsIDMwLCA1OToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWRiYXNlLnJlcGxhY2UobWludXRlPW1pbnV0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzdXRjID0gYXN1dGNiYXNlLnJlcGxhY2UobWludXRlPW1pbnV0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzdHogPSBhc3V0Yy5hc3RpbWV6b25lKHR6KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3R6LnJlcGxhY2UodHppbmZvPU5vbmUpLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICAgICAgYXN1dGNiYXNlICs9IEhPVVIKKworCisgICAgZGVmIHRlc3RfYm9ndXNfZHN0KHNlbGYpOgorICAgICAgICBjbGFzcyBvayh0emluZm8pOgorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6IHJldHVybiBIT1VSCisgICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KTogcmV0dXJuIEhPVVIKKworICAgICAgICBub3cgPSBzZWxmLnRoZWNsYXNzLm5vdygpLnJlcGxhY2UodHppbmZvPXV0Y19yZWFsKQorICAgICAgICAjIERvZXNuJ3QgYmxvdyB1cC4KKyAgICAgICAgbm93LmFzdGltZXpvbmUob2soKSkKKworICAgICAgICAjIERvZXMgYmxvdyB1cC4KKyAgICAgICAgY2xhc3Mgbm90b2sob2spOgorICAgICAgICAgICAgZGVmIGRzdChzZWxmLCBkdCk6IHJldHVybiBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5vdy5hc3RpbWV6b25lLCBub3RvaygpKQorCisgICAgZGVmIHRlc3RfZnJvbXV0YyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBFYXN0ZXJuLmZyb211dGMpICAgIyBub3QgZW5vdWdoIGFyZ3MKKyAgICAgICAgbm93ID0gZGF0ZXRpbWUudXRjbm93KCkucmVwbGFjZSh0emluZm89dXRjX3JlYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEVhc3Rlcm4uZnJvbXV0Yywgbm93KSAjIHdyb25nIHR6aW5mbworICAgICAgICBub3cgPSBub3cucmVwbGFjZSh0emluZm89RWFzdGVybikgICAjIGluc2VydCBjb3JyZWN0IHR6aW5mbworICAgICAgICBlbm93ID0gRWFzdGVybi5mcm9tdXRjKG5vdykgICAgICAgICAjIGRvZXNuJ3QgYmxvdyB1cAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVub3cudHppbmZvLCBFYXN0ZXJuKSAjIGhhcyByaWdodCB0emluZm8gbWVtYmVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRWFzdGVybi5mcm9tdXRjLCBub3csIG5vdykgIyB0b28gbWFueSBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRWFzdGVybi5mcm9tdXRjLCBkYXRlLnRvZGF5KCkpICMgd3JvbmcgdHlwZQorCisgICAgICAgICMgQWx3YXlzIGNvbnZlcnRzIFVUQyB0byBzdGFuZGFyZCB0aW1lLgorICAgICAgICBjbGFzcyBGYXV4VVNUaW1lWm9uZShVU1RpbWVab25lKToKKyAgICAgICAgICAgIGRlZiBmcm9tdXRjKHNlbGYsIGR0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gZHQgKyBzZWxmLnN0ZG9mZnNldAorICAgICAgICBGRWFzdGVybiAgPSBGYXV4VVNUaW1lWm9uZSgtNSwgIkZFYXN0ZXJuIiwgICJGRVNUIiwgIkZFRFQiKQorCisgICAgICAgICMgIFVUQyAgNDpNTSAgNTpNTSAgNjpNTSAgNzpNTSAgODpNTSAgOTpNTQorICAgICAgICAjICBFU1QgMjM6TU0gIDA6TU0gIDE6TU0gIDI6TU0gIDM6TU0gIDQ6TU0KKyAgICAgICAgIyAgRURUICAwOk1NICAxOk1NICAyOk1NICAzOk1NICA0Ok1NICA1Ok1NCisKKyAgICAgICAgIyBDaGVjayBhcm91bmQgRFNUIHN0YXJ0LgorICAgICAgICBzdGFydCA9IHNlbGYuZHN0b24ucmVwbGFjZShob3VyPTQsIHR6aW5mbz1FYXN0ZXJuKQorICAgICAgICBmc3RhcnQgPSBzdGFydC5yZXBsYWNlKHR6aW5mbz1GRWFzdGVybikKKyAgICAgICAgZm9yIHdhbGwgaW4gMjMsIDAsIDEsIDMsIDQsIDU6CisgICAgICAgICAgICBleHBlY3RlZCA9IHN0YXJ0LnJlcGxhY2UoaG91cj13YWxsKQorICAgICAgICAgICAgaWYgd2FsbCA9PSAyMzoKKyAgICAgICAgICAgICAgICBleHBlY3RlZCAtPSB0aW1lZGVsdGEoZGF5cz0xKQorICAgICAgICAgICAgZ290ID0gRWFzdGVybi5mcm9tdXRjKHN0YXJ0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorCisgICAgICAgICAgICBleHBlY3RlZCA9IGZzdGFydCArIEZFYXN0ZXJuLnN0ZG9mZnNldAorICAgICAgICAgICAgZ290ID0gRkVhc3Rlcm4uZnJvbXV0Yyhmc3RhcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisKKyAgICAgICAgICAgICMgRW5zdXJlIGFzdGltZXpvbmUoKSBjYWxscyBmcm9tdXRjKCkgdG9vLgorICAgICAgICAgICAgZ290ID0gZnN0YXJ0LnJlcGxhY2UodHppbmZvPXV0Y19yZWFsKS5hc3RpbWV6b25lKEZFYXN0ZXJuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorCisgICAgICAgICAgICBzdGFydCArPSBIT1VSCisgICAgICAgICAgICBmc3RhcnQgKz0gSE9VUgorCisgICAgICAgICMgQ2hlY2sgYXJvdW5kIERTVCBlbmQuCisgICAgICAgIHN0YXJ0ID0gc2VsZi5kc3RvZmYucmVwbGFjZShob3VyPTQsIHR6aW5mbz1FYXN0ZXJuKQorICAgICAgICBmc3RhcnQgPSBzdGFydC5yZXBsYWNlKHR6aW5mbz1GRWFzdGVybikKKyAgICAgICAgZm9yIHdhbGwgaW4gMCwgMSwgMSwgMiwgMywgNDoKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc3RhcnQucmVwbGFjZShob3VyPXdhbGwpCisgICAgICAgICAgICBnb3QgPSBFYXN0ZXJuLmZyb211dGMoc3RhcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisKKyAgICAgICAgICAgIGV4cGVjdGVkID0gZnN0YXJ0ICsgRkVhc3Rlcm4uc3Rkb2Zmc2V0CisgICAgICAgICAgICBnb3QgPSBGRWFzdGVybi5mcm9tdXRjKGZzdGFydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKworICAgICAgICAgICAgIyBFbnN1cmUgYXN0aW1lem9uZSgpIGNhbGxzIGZyb211dGMoKSB0b28uCisgICAgICAgICAgICBnb3QgPSBmc3RhcnQucmVwbGFjZSh0emluZm89dXRjX3JlYWwpLmFzdGltZXpvbmUoRkVhc3Rlcm4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisKKyAgICAgICAgICAgIHN0YXJ0ICs9IEhPVVIKKyAgICAgICAgICAgIGZzdGFydCArPSBIT1VSCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgb2RkYmFsbHMKKworY2xhc3MgT2RkYmFsbHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYnVnXzEwMjgzMDYoc2VsZik6CisgICAgICAgICMgVHJ5aW5nIHRvIGNvbXBhcmUgYSBkYXRlIHRvIGEgZGF0ZXRpbWUgc2hvdWxkIGFjdCBsaWtlIGEgbWl4ZWQtCisgICAgICAgICMgdHlwZSBjb21wYXJpc29uLCBkZXNwaXRlIHRoYXQgZGF0ZXRpbWUgaXMgYSBzdWJjbGFzcyBvZiBkYXRlLgorICAgICAgICBhc19kYXRlID0gZGF0ZS50b2RheSgpCisgICAgICAgIGFzX2RhdGV0aW1lID0gZGF0ZXRpbWUuY29tYmluZShhc19kYXRlLCB0aW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc19kYXRlICE9IGFzX2RhdGV0aW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXNfZGF0ZXRpbWUgIT0gYXNfZGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBhc19kYXRlID09IGFzX2RhdGV0aW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGFzX2RhdGV0aW1lID09IGFzX2RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhc19kYXRlIDwgYXNfZGF0ZXRpbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhc19kYXRldGltZSA8IGFzX2RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhc19kYXRlIDw9IGFzX2RhdGV0aW1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYXNfZGF0ZXRpbWUgPD0gYXNfZGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGFzX2RhdGUgPiBhc19kYXRldGltZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGFzX2RhdGV0aW1lID4gYXNfZGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGFzX2RhdGUgPj0gYXNfZGF0ZXRpbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhc19kYXRldGltZSA+PSBhc19kYXRlKQorCisgICAgICAgICMgTmV2ZXJ0aGVsc3MsIGNvbXBhcmlzb24gc2hvdWxkIHdvcmsgd2l0aCB0aGUgYmFzZS1jbGFzcyAoZGF0ZSkKKyAgICAgICAgIyBwcm9qZWN0aW9uIGlmIHVzZSBvZiBhIGRhdGUgbWV0aG9kIGlzIGZvcmNlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzX2RhdGUuX19lcV9fKGFzX2RhdGV0aW1lKSkKKyAgICAgICAgZGlmZmVyZW50X2RheSA9IChhc19kYXRlLmRheSArIDEpICUgMjAgKyAxCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYXNfZGF0ZS5fX2VxX18oYXNfZGF0ZXRpbWUucmVwbGFjZShkYXk9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudF9kYXkpKSkKKworICAgICAgICAjIEFuZCBkYXRlIHNob3VsZCBjb21wYXJlIHdpdGggb3RoZXIgc3ViY2xhc3NlcyBvZiBkYXRlLiAgSWYgYQorICAgICAgICAjIHN1YmNsYXNzIHdhbnRzIHRvIHN0b3AgdGhpcywgaXQncyB1cCB0byB0aGUgc3ViY2xhc3MgdG8gZG8gc28uCisgICAgICAgIGRhdGVfc2MgPSBTdWJjbGFzc0RhdGUoYXNfZGF0ZS55ZWFyLCBhc19kYXRlLm1vbnRoLCBhc19kYXRlLmRheSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc19kYXRlLCBkYXRlX3NjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGVfc2MsIGFzX2RhdGUpCisKKyAgICAgICAgIyBEaXR0byBmb3IgZGF0ZXRpbWVzLgorICAgICAgICBkYXRldGltZV9zYyA9IFN1YmNsYXNzRGF0ZXRpbWUoYXNfZGF0ZXRpbWUueWVhciwgYXNfZGF0ZXRpbWUubW9udGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc19kYXRlLmRheSwgMCwgMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc19kYXRldGltZSwgZGF0ZXRpbWVfc2MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0ZXRpbWVfc2MsIGFzX2RhdGV0aW1lKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGJtLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGJtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYjBiNWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kYm0ucHkKQEAgLTAsMCArMSw0MiBAQAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorZGJtID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2RibScpCisKK2NsYXNzIERibVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICAgICAgc2VsZi5kID0gZGJtLm9wZW4oc2VsZi5maWxlbmFtZSwgJ2MnKQorICAgICAgICBzZWxmLmQuY2xvc2UoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igc3VmZml4IGluIFsnJywgJy5wYWcnLCAnLmRpcicsICcuZGInXToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoc2VsZi5maWxlbmFtZSArIHN1ZmZpeCkKKworICAgIGRlZiB0ZXN0X2tleXMoc2VsZik6CisgICAgICAgIHNlbGYuZCA9IGRibS5vcGVuKHNlbGYuZmlsZW5hbWUsICdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmQua2V5cygpLCBbXSkKKyAgICAgICAgYSA9IFsoJ2EnLCAnYicpLCAoJzEyMzQ1Njc4OTEwJywgJzAxOTIzNzQxMDk4MjM0MDkxMjg0MDE5ODI0MicpXQorICAgICAgICBmb3IgaywgdiBpbiBhOgorICAgICAgICAgICAgc2VsZi5kW2tdID0gdgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzZWxmLmQua2V5cygpKSwgc29ydGVkKGsgZm9yIChrLCB2KSBpbiBhKSkKKyAgICAgICAgZm9yIGssIHYgaW4gYToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgc2VsZi5kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRba10sIHYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3h4eCcsIHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5kWyd4eHgnXSkKKyAgICAgICAgc2VsZi5kLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X21vZGVzKHNlbGYpOgorICAgICAgICBmb3IgbW9kZSBpbiBbJ3InLCAncncnLCAndycsICduJ106CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5kID0gZGJtLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkKKyAgICAgICAgICAgICAgICBzZWxmLmQuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IGRibS5lcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChEYm1UZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGVjaW1hbC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RlY2ltYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UxODRlZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RlY2ltYWwucHkKQEAgLTAsMCArMSwyMzUxIEBACisjIENvcHlyaWdodCAoYykgMjAwNCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworIyBXcml0dGVuIGJ5IEVyaWMgUHJpY2UgPGVwcmljZSBhdCB0amhzc3QuZWR1PgorIyAgICBhbmQgRmFjdW5kbyBCYXRpc3RhIDxmYWN1bmRvIGF0IHRhbmlxdWV0aWwuY29tLmFyPgorIyAgICBhbmQgUmF5bW9uZCBIZXR0aW5nZXIgPHB5dGhvbiBhdCByY24uY29tPgorIyAgICBhbmQgQWFoeiAoYWFoeiBhdCBwb2JveC5jb20pCisjICAgIGFuZCBUaW0gUGV0ZXJzCisKKyIiIgorVGhlc2UgYXJlIHRoZSB0ZXN0IGNhc2VzIGZvciB0aGUgRGVjaW1hbCBtb2R1bGUuCisKK1RoZXJlIGFyZSB0d28gZ3JvdXBzIG9mIHRlc3RzLCBBcml0aG1ldGljIGFuZCBCZWhhdmlvdXIuIFRoZSBmb3JtZXIgdGVzdAordGhlIERlY2ltYWwgYXJpdGhtZXRpYyB1c2luZyB0aGUgdGVzdHMgcHJvdmlkZWQgYnkgTWlrZSBDb3dsaXNoYXcuIFRoZSBsYXR0ZXIKK3Rlc3QgdGhlIHB5dGhvbmljIGJlaGF2aW91ciBhY2NvcmRpbmcgdG8gUEVQIDMyNy4KKworQ293bGlzaGF3J3MgdGVzdHMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbToKKworICAgd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbC9kZWN0ZXN0LnppcAorCitUaGlzIHRlc3QgbW9kdWxlIGNhbiBiZSBjYWxsZWQgZnJvbSBjb21tYW5kIGxpbmUgd2l0aCBvbmUgcGFyYW1ldGVyIChBcml0aG1ldGljCitvciBCZWhhdmlvdXIpIHRvIHRlc3QgZWFjaCBwYXJ0LCBvciB3aXRob3V0IHBhcmFtZXRlciB0byB0ZXN0IGJvdGggcGFydHMuIElmCit5b3UncmUgd29ya2luZyB0aHJvdWdoIElETEUsIHlvdSBjYW4gaW1wb3J0IHRoaXMgdGVzdCBtb2R1bGUgYW5kIGNhbGwgdGVzdF9tYWluKCkKK3dpdGggdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuCisiIiIKKworaW1wb3J0IG1hdGgKK2ltcG9ydCBvcywgc3lzCitpbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCBwaWNrbGUsIGNvcHkKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBkZWNpbWFsIGltcG9ydCAqCitpbXBvcnQgbnVtYmVycworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgcnVuX2RvY3Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcmVzb3VyY2VfZW5hYmxlZCwgY2hlY2tfcHkza193YXJuaW5ncykKK2ltcG9ydCByYW5kb20KK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCisjIFVzZWZ1bCBUZXN0IENvbnN0YW50CitTaWduYWxzID0gdHVwbGUoZ2V0Y29udGV4dCgpLmZsYWdzLmtleXMoKSkKKworIyBTaWduYWxzIG9yZGVyZWQgd2l0aCByZXNwZWN0IHRvIHByZWNlZGVuY2U6IHdoZW4gYW4gb3BlcmF0aW9uCisjIHByb2R1Y2VzIG11bHRpcGxlIHNpZ25hbHMsIHNpZ25hbHMgb2NjdXJyaW5nIGxhdGVyIGluIHRoZSBsaXN0CisjIHNob3VsZCBiZSBoYW5kbGVkIGJlZm9yZSB0aG9zZSBvY2N1cnJpbmcgZWFybGllciBpbiB0aGUgbGlzdC4KK09yZGVyZWRTaWduYWxzID0gKENsYW1wZWQsIFJvdW5kZWQsIEluZXhhY3QsIFN1Ym5vcm1hbCwKKyAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdywgT3ZlcmZsb3csIERpdmlzaW9uQnlaZXJvLCBJbnZhbGlkT3BlcmF0aW9uKQorCisjIFRlc3RzIGFyZSBidWlsdCBhcm91bmQgdGhlc2UgYXNzdW1lZCBjb250ZXh0IGRlZmF1bHRzLgorIyB0ZXN0X21haW4oKSByZXN0b3JlcyB0aGUgb3JpZ2luYWwgY29udGV4dC4KK2RlZiBpbml0KCk6CisgICAgZ2xvYmFsIE9SSUdJTkFMX0NPTlRFWFQKKyAgICBPUklHSU5BTF9DT05URVhUID0gZ2V0Y29udGV4dCgpLmNvcHkoKQorICAgIERlZmF1bHRUZXN0Q29udGV4dCA9IENvbnRleHQoCisgICAgICAgIHByZWMgPSA5LAorICAgICAgICByb3VuZGluZyA9IFJPVU5EX0hBTEZfRVZFTiwKKyAgICAgICAgdHJhcHMgPSBkaWN0LmZyb21rZXlzKFNpZ25hbHMsIDApCisgICAgICAgICkKKyAgICBzZXRjb250ZXh0KERlZmF1bHRUZXN0Q29udGV4dCkKKworIyBkZWNvcmF0b3IgZm9yIHNraXBwaW5nIHRlc3RzIG9uIG5vbi1JRUVFIDc1NCBwbGF0Zm9ybXMKK3JlcXVpcmVzX0lFRUVfNzU0ID0gdW5pdHRlc3Quc2tpcFVubGVzcygKKyAgICBmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIiksCisgICAgInRlc3QgcmVxdWlyZXMgSUVFRSA3NTQgZG91YmxlcyIpCisKK1RFU1REQVRBRElSID0gJ2RlY2ltYWx0ZXN0ZGF0YScKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgZmlsZSA9IHN5cy5hcmd2WzBdCitlbHNlOgorICAgIGZpbGUgPSBfX2ZpbGVfXwordGVzdGRpciA9IG9zLnBhdGguZGlybmFtZShmaWxlKSBvciBvcy5jdXJkaXIKK2RpcmVjdG9yeSA9IHRlc3RkaXIgKyBvcy5zZXAgKyBURVNUREFUQURJUiArIG9zLnNlcAorCitza2lwX2V4cGVjdGVkID0gbm90IG9zLnBhdGguaXNkaXIoZGlyZWN0b3J5KQorCisjIGxpc3Qgb2YgaW5kaXZpZHVhbCAuZGVjVGVzdCB0ZXN0IGlkcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGVzdHMgdGhhdAorIyB3ZSdyZSBza2lwcGluZyBmb3Igb25lIHJlYXNvbiBvciBhbm90aGVyLgorc2tpcHBlZF90ZXN0X2lkcyA9IHNldChbCisgICAgIyBTa2lwIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHNjYWxlYiB0ZXN0cy4KKyAgICAnc2NieDE2NCcsCisgICAgJ3NjYngxNjUnLAorCisgICAgIyBGb3Igc29tZSBvcGVyYXRpb25zIChjdXJyZW50bHkgZXhwLCBsbiwgbG9nMTAsIHBvd2VyKSwgdGhlIGRlY051bWJlcgorICAgICMgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGltcG9zZXMgYWRkaXRpb25hbCByZXN0cmljdGlvbnMgb24gdGhlIGNvbnRleHQKKyAgICAjIGFuZCBvcGVyYW5kcy4gIFRoZXNlIHJlc3RyaWN0aW9ucyBhcmUgbm90IHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb247CisgICAgIyBob3dldmVyLCB0aGUgZWZmZWN0IG9mIHRoZXNlIHJlc3RyaWN0aW9ucyBkb2VzIHNob3cgdXAgaW4gc29tZSBvZiB0aGUKKyAgICAjIHRlc3RjYXNlcy4gIFdlIHNraXAgdGVzdGNhc2VzIHRoYXQgdmlvbGF0ZSB0aGVzZSByZXN0cmljdGlvbnMsIHNpbmNlCisgICAgIyBEZWNpbWFsIGJlaGF2ZXMgZGlmZmVyZW50bHkgZnJvbSBkZWNOdW1iZXIgZm9yIHRoZXNlIHRlc3RjYXNlcyBzbyB0aGVzZQorICAgICMgdGVzdGNhc2VzIHdvdWxkIG90aGVyd2lzZSBmYWlsLgorICAgICdleHB4OTAxJywKKyAgICAnZXhweDkwMicsCisgICAgJ2V4cHg5MDMnLAorICAgICdleHB4OTA1JywKKyAgICAnbG54OTAxJywKKyAgICAnbG54OTAyJywKKyAgICAnbG54OTAzJywKKyAgICAnbG54OTA1JywKKyAgICAnbG9neDkwMScsCisgICAgJ2xvZ3g5MDInLAorICAgICdsb2d4OTAzJywKKyAgICAnbG9neDkwNScsCisgICAgJ3Bvd3gxMTgzJywKKyAgICAncG93eDExODQnLAorICAgICdwb3d4NDAwMScsCisgICAgJ3Bvd3g0MDAyJywKKyAgICAncG93eDQwMDMnLAorICAgICdwb3d4NDAwNScsCisgICAgJ3Bvd3g0MDA4JywKKyAgICAncG93eDQwMTAnLAorICAgICdwb3d4NDAxMicsCisgICAgJ3Bvd3g0MDE0JywKKyAgICBdKQorCisjIE1ha2Ugc3VyZSBpdCBhY3R1YWxseSByYWlzZXMgZXJyb3JzIHdoZW4gbm90IGV4cGVjdGVkIGFuZCBjYXVnaHQgaW4gZmxhZ3MKKyMgU2xvd2VyLCBzaW5jZSBpdCBydW5zIHNvbWUgdGhpbmdzIHNldmVyYWwgdGltZXMuCitFWFRFTkRFREVSUk9SVEVTVCA9IEZhbHNlCisKKyNNYXAgdGhlIHRlc3QgY2FzZXMnIGVycm9yIG5hbWVzIHRvIHRoZSBhY3R1YWwgZXJyb3JzCitFcnJvck5hbWVzID0geydjbGFtcGVkJyA6IENsYW1wZWQsCisgICAgICAgICAgICAgICdjb252ZXJzaW9uX3N5bnRheCcgOiBJbnZhbGlkT3BlcmF0aW9uLAorICAgICAgICAgICAgICAnZGl2aXNpb25fYnlfemVybycgOiBEaXZpc2lvbkJ5WmVybywKKyAgICAgICAgICAgICAgJ2RpdmlzaW9uX2ltcG9zc2libGUnIDogSW52YWxpZE9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgJ2RpdmlzaW9uX3VuZGVmaW5lZCcgOiBJbnZhbGlkT3BlcmF0aW9uLAorICAgICAgICAgICAgICAnaW5leGFjdCcgOiBJbmV4YWN0LAorICAgICAgICAgICAgICAnaW52YWxpZF9jb250ZXh0JyA6IEludmFsaWRPcGVyYXRpb24sCisgICAgICAgICAgICAgICdpbnZhbGlkX29wZXJhdGlvbicgOiBJbnZhbGlkT3BlcmF0aW9uLAorICAgICAgICAgICAgICAnb3ZlcmZsb3cnIDogT3ZlcmZsb3csCisgICAgICAgICAgICAgICdyb3VuZGVkJyA6IFJvdW5kZWQsCisgICAgICAgICAgICAgICdzdWJub3JtYWwnIDogU3Vibm9ybWFsLAorICAgICAgICAgICAgICAndW5kZXJmbG93JyA6IFVuZGVyZmxvd30KKworCitkZWYgTm9uZnVuY3Rpb24oKmFyZ3MpOgorICAgICIiIkRvZXNuJ3QgZG8gYW55dGhpbmcuIiIiCisgICAgcmV0dXJuIE5vbmUKKworUm91bmRpbmdEaWN0ID0geydjZWlsaW5nJyA6IFJPVU5EX0NFSUxJTkcsICNNYXBzIHRlc3QtY2FzZSBuYW1lcyB0byByb3VuZGluZ3MuCisgICAgICAgICAgICAgICAgJ2Rvd24nIDogUk9VTkRfRE9XTiwKKyAgICAgICAgICAgICAgICAnZmxvb3InIDogUk9VTkRfRkxPT1IsCisgICAgICAgICAgICAgICAgJ2hhbGZfZG93bicgOiBST1VORF9IQUxGX0RPV04sCisgICAgICAgICAgICAgICAgJ2hhbGZfZXZlbicgOiBST1VORF9IQUxGX0VWRU4sCisgICAgICAgICAgICAgICAgJ2hhbGZfdXAnIDogUk9VTkRfSEFMRl9VUCwKKyAgICAgICAgICAgICAgICAndXAnIDogUk9VTkRfVVAsCisgICAgICAgICAgICAgICAgJzA1dXAnIDogUk9VTkRfMDVVUH0KKworIyBOYW1lIGFkYXB0ZXIgdG8gYmUgYWJsZSB0byBjaGFuZ2UgdGhlIERlY2ltYWwgYW5kIENvbnRleHQKKyMgaW50ZXJmYWNlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHRlc3QgZmlsZXMgZnJvbSBDb3dsaXNoYXcKK25hbWVBZGFwdGVyID0geydhbmQnOidsb2dpY2FsX2FuZCcsCisgICAgICAgICAgICAgICAnYXBwbHknOidfYXBwbHknLAorICAgICAgICAgICAgICAgJ2NsYXNzJzonbnVtYmVyX2NsYXNzJywKKyAgICAgICAgICAgICAgICdjb21wYXJlc2lnJzonY29tcGFyZV9zaWduYWwnLAorICAgICAgICAgICAgICAgJ2NvbXBhcmV0b3RhbCc6J2NvbXBhcmVfdG90YWwnLAorICAgICAgICAgICAgICAgJ2NvbXBhcmV0b3RtYWcnOidjb21wYXJlX3RvdGFsX21hZycsCisgICAgICAgICAgICAgICAnY29weSc6J2NvcHlfZGVjaW1hbCcsCisgICAgICAgICAgICAgICAnY29weWFicyc6J2NvcHlfYWJzJywKKyAgICAgICAgICAgICAgICdjb3B5bmVnYXRlJzonY29weV9uZWdhdGUnLAorICAgICAgICAgICAgICAgJ2NvcHlzaWduJzonY29weV9zaWduJywKKyAgICAgICAgICAgICAgICdkaXZpZGVpbnQnOidkaXZpZGVfaW50JywKKyAgICAgICAgICAgICAgICdpbnZlcnQnOidsb2dpY2FsX2ludmVydCcsCisgICAgICAgICAgICAgICAnaXNjYW5vbmljYWwnOidpc19jYW5vbmljYWwnLAorICAgICAgICAgICAgICAgJ2lzZmluaXRlJzonaXNfZmluaXRlJywKKyAgICAgICAgICAgICAgICdpc2luZmluaXRlJzonaXNfaW5maW5pdGUnLAorICAgICAgICAgICAgICAgJ2lzbmFuJzonaXNfbmFuJywKKyAgICAgICAgICAgICAgICdpc25vcm1hbCc6J2lzX25vcm1hbCcsCisgICAgICAgICAgICAgICAnaXNxbmFuJzonaXNfcW5hbicsCisgICAgICAgICAgICAgICAnaXNzaWduZWQnOidpc19zaWduZWQnLAorICAgICAgICAgICAgICAgJ2lzc25hbic6J2lzX3NuYW4nLAorICAgICAgICAgICAgICAgJ2lzc3Vibm9ybWFsJzonaXNfc3Vibm9ybWFsJywKKyAgICAgICAgICAgICAgICdpc3plcm8nOidpc196ZXJvJywKKyAgICAgICAgICAgICAgICdtYXhtYWcnOidtYXhfbWFnJywKKyAgICAgICAgICAgICAgICdtaW5tYWcnOidtaW5fbWFnJywKKyAgICAgICAgICAgICAgICduZXh0bWludXMnOiduZXh0X21pbnVzJywKKyAgICAgICAgICAgICAgICduZXh0cGx1cyc6J25leHRfcGx1cycsCisgICAgICAgICAgICAgICAnbmV4dHRvd2FyZCc6J25leHRfdG93YXJkJywKKyAgICAgICAgICAgICAgICdvcic6J2xvZ2ljYWxfb3InLAorICAgICAgICAgICAgICAgJ3JlZHVjZSc6J25vcm1hbGl6ZScsCisgICAgICAgICAgICAgICAncmVtYWluZGVybmVhcic6J3JlbWFpbmRlcl9uZWFyJywKKyAgICAgICAgICAgICAgICdzYW1lcXVhbnR1bSc6J3NhbWVfcXVhbnR1bScsCisgICAgICAgICAgICAgICAnc3F1YXJlcm9vdCc6J3NxcnQnLAorICAgICAgICAgICAgICAgJ3RvZW5nJzondG9fZW5nX3N0cmluZycsCisgICAgICAgICAgICAgICAndG9pbnRlZ3JhbCc6J3RvX2ludGVncmFsX3ZhbHVlJywKKyAgICAgICAgICAgICAgICd0b2ludGVncmFseCc6J3RvX2ludGVncmFsX2V4YWN0JywKKyAgICAgICAgICAgICAgICd0b3NjaSc6J3RvX3NjaV9zdHJpbmcnLAorICAgICAgICAgICAgICAgJ3hvcic6J2xvZ2ljYWxfeG9yJywKKyAgICAgICAgICAgICAgfQorCisjIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHJldHVybiBUcnVlL0ZhbHNlIHJhdGhlciB0aGFuIGEgRGVjaW1hbCBpbnN0YW5jZQorCitMT0dJQ0FMX0ZVTkNUSU9OUyA9ICgKKyAgICAnaXNfY2Fub25pY2FsJywKKyAgICAnaXNfZmluaXRlJywKKyAgICAnaXNfaW5maW5pdGUnLAorICAgICdpc19uYW4nLAorICAgICdpc19ub3JtYWwnLAorICAgICdpc19xbmFuJywKKyAgICAnaXNfc2lnbmVkJywKKyAgICAnaXNfc25hbicsCisgICAgJ2lzX3N1Ym5vcm1hbCcsCisgICAgJ2lzX3plcm8nLAorICAgICdzYW1lX3F1YW50dW0nLAorICAgICkKKworY2xhc3MgRGVjaW1hbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkNsYXNzIHdoaWNoIHRlc3RzIHRoZSBEZWNpbWFsIGNsYXNzIGFnYWluc3QgdGhlIHRlc3QgY2FzZXMuCisKKyAgICBDaGFuZ2VkIGZvciB1bml0dGVzdC4KKyAgICAiIiIKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY29udGV4dCA9IENvbnRleHQoKQorICAgICAgICBzZWxmLmlnbm9yZV9saXN0ID0gWycjJ10KKyAgICAgICAgIyBCYXNpY2FsbHksIGEgIyBtZWFucyByZXR1cm4gTmFOIEludmFsaWRPcGVyYXRpb24uCisgICAgICAgICMgRGlmZmVyZW50IGZyb20gYSBzTmFOIGluIHRyaW0KKworICAgICAgICBzZWxmLkNoYW5nZURpY3QgPSB7J3ByZWNpc2lvbicgOiBzZWxmLmNoYW5nZV9wcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgJ3JvdW5kaW5nJyA6IHNlbGYuY2hhbmdlX3JvdW5kaW5nX21ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAnbWF4ZXhwb25lbnQnIDogc2VsZi5jaGFuZ2VfbWF4X2V4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICdtaW5leHBvbmVudCcgOiBzZWxmLmNoYW5nZV9taW5fZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgJ2NsYW1wJyA6IHNlbGYuY2hhbmdlX2NsYW1wfQorCisgICAgZGVmIGV2YWxfZmlsZShzZWxmLCBmaWxlKToKKyAgICAgICAgZ2xvYmFsIHNraXBfZXhwZWN0ZWQKKyAgICAgICAgaWYgc2tpcF9leHBlY3RlZDoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2l0aCBvcGVuKGZpbGUpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoJ1xyXG4nLCAnJykucmVwbGFjZSgnXG4nLCAnJykKKyAgICAgICAgICAgICAgICAjcHJpbnQgbGluZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdCA9IHNlbGYuZXZhbF9saW5lKGxpbmUpCisgICAgICAgICAgICAgICAgZXhjZXB0IERlY2ltYWxFeGNlcHRpb24gYXMgZXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAjRXhjZXB0aW9uIHJhaXNlZCB3aGVyZSB0aGVyZSBzaG91bGRuJ3QgaGF2ZSBiZWVuIG9uZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdFeGNlcHRpb24gIicrZXhjZXB0aW9uLl9fY2xhc3NfXy5fX25hbWVfXyArICciIHJhaXNlZCBvbiBsaW5lICcrbGluZSkKKworICAgICAgICByZXR1cm4KKworICAgIGRlZiBldmFsX2xpbmUoc2VsZiwgcyk6CisgICAgICAgIGlmIHMuZmluZCgnIC0+ICcpID49IDAgYW5kIHNbOjJdICE9ICctLScgYW5kIG5vdCBzLnN0YXJ0c3dpdGgoJyAgLS0nKToKKyAgICAgICAgICAgIHMgPSAocy5zcGxpdCgnLT4nKVswXSArICctPicgKworICAgICAgICAgICAgICAgICBzLnNwbGl0KCctPicpWzFdLnNwbGl0KCctLScpWzBdKS5zdHJpcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzID0gcy5zcGxpdCgnLS0nKVswXS5zdHJpcCgpCisKKyAgICAgICAgZm9yIGlnbm9yZSBpbiBzZWxmLmlnbm9yZV9saXN0OgorICAgICAgICAgICAgaWYgcy5maW5kKGlnbm9yZSkgPj0gMDoKKyAgICAgICAgICAgICAgICAjcHJpbnQgcy5zcGxpdCgpWzBdLCAnTm90SW1wbGVtZW50ZWQtLScsIGlnbm9yZQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbGlmICc6JyBpbiBzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXZhbF9kaXJlY3RpdmUocykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV2YWxfZXF1YXRpb24ocykKKworICAgIGRlZiBldmFsX2RpcmVjdGl2ZShzZWxmLCBzKToKKyAgICAgICAgZnVuY3QsIHZhbHVlID0gbWFwKGxhbWJkYSB4OiB4LnN0cmlwKCkubG93ZXIoKSwgcy5zcGxpdCgnOicpKQorICAgICAgICBpZiBmdW5jdCA9PSAncm91bmRpbmcnOgorICAgICAgICAgICAgdmFsdWUgPSBSb3VuZGluZ0RpY3RbdmFsdWVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnQodmFsdWUpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZnVuY3QgPSBzZWxmLkNoYW5nZURpY3QuZ2V0KGZ1bmN0LCBOb25mdW5jdGlvbikKKyAgICAgICAgZnVuY3QodmFsdWUpCisKKyAgICBkZWYgZXZhbF9lcXVhdGlvbihzZWxmLCBzKToKKyAgICAgICAgI2dsb2JhbCBERUZBVUxUX1BSRUNJU0lPTgorICAgICAgICAjcHJpbnQgREVGQVVMVF9QUkVDSVNJT04KKworICAgICAgICBpZiBub3QgVEVTVF9BTEwgYW5kIHJhbmRvbS5yYW5kb20oKSA8IDAuOTA6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBTaWRlcyA9IHMuc3BsaXQoJy0+JykKKyAgICAgICAgICAgIEwgPSBTaWRlc1swXS5zdHJpcCgpLnNwbGl0KCkKKyAgICAgICAgICAgIGlkID0gTFswXQorICAgICAgICAgICAgaWYgREVCVUc6CisgICAgICAgICAgICAgICAgcHJpbnQgIlRlc3QgIiwgaWQsCisgICAgICAgICAgICBmdW5jdCA9IExbMV0ubG93ZXIoKQorICAgICAgICAgICAgdmFsc3RlbXAgPSBMWzI6XQorICAgICAgICAgICAgTCA9IFNpZGVzWzFdLnN0cmlwKCkuc3BsaXQoKQorICAgICAgICAgICAgYW5zID0gTFswXQorICAgICAgICAgICAgZXhjZXB0aW9ucyA9IExbMTpdCisgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciwgSW5kZXhFcnJvcik6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkT3BlcmF0aW9uCisgICAgICAgIGRlZiBGaXhRdW90ZXModmFsKToKKyAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCInJyIsICdTaW5nbGVRdW90ZScpLnJlcGxhY2UoJyIiJywgJ0RvdWJsZVF1b3RlJykKKyAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCInIiwgJycpLnJlcGxhY2UoJyInLCAnJykKKyAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCdTaW5nbGVRdW90ZScsICInIikucmVwbGFjZSgnRG91YmxlUXVvdGUnLCAnIicpCisgICAgICAgICAgICByZXR1cm4gdmFsCisKKyAgICAgICAgaWYgaWQgaW4gc2tpcHBlZF90ZXN0X2lkczoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZuYW1lID0gbmFtZUFkYXB0ZXIuZ2V0KGZ1bmN0LCBmdW5jdCkKKyAgICAgICAgaWYgZm5hbWUgPT0gJ3Jlc2NhbGUnOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZ1bmN0ID0gZ2V0YXR0cihzZWxmLmNvbnRleHQsIGZuYW1lKQorICAgICAgICB2YWxzID0gW10KKyAgICAgICAgY29uZ2xvbWVyYXRlID0gJycKKyAgICAgICAgcXVvdGUgPSAwCisgICAgICAgIHRoZWlyZXhjZXB0aW9ucyA9IFtFcnJvck5hbWVzW3gubG93ZXIoKV0gZm9yIHggaW4gZXhjZXB0aW9uc10KKworICAgICAgICBmb3IgZXhjZXB0aW9uIGluIFNpZ25hbHM6CisgICAgICAgICAgICBzZWxmLmNvbnRleHQudHJhcHNbZXhjZXB0aW9uXSA9IDEgI0NhdGNoIHRoZXNlIGJ1Z3MuLi4KKyAgICAgICAgZm9yIGV4Y2VwdGlvbiBpbiB0aGVpcmV4Y2VwdGlvbnM6CisgICAgICAgICAgICBzZWxmLmNvbnRleHQudHJhcHNbZXhjZXB0aW9uXSA9IDAKKyAgICAgICAgZm9yIGksIHZhbCBpbiBlbnVtZXJhdGUodmFsc3RlbXApOgorICAgICAgICAgICAgaWYgdmFsLmNvdW50KCInIikgJSAyID09IDE6CisgICAgICAgICAgICAgICAgcXVvdGUgPSAxIC0gcXVvdGUKKyAgICAgICAgICAgIGlmIHF1b3RlOgorICAgICAgICAgICAgICAgIGNvbmdsb21lcmF0ZSA9IGNvbmdsb21lcmF0ZSArICcgJyArIHZhbAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbCA9IGNvbmdsb21lcmF0ZSArIHZhbAorICAgICAgICAgICAgICAgIGNvbmdsb21lcmF0ZSA9ICcnCisgICAgICAgICAgICB2ID0gRml4UXVvdGVzKHZhbCkKKyAgICAgICAgICAgIGlmIGZuYW1lIGluICgndG9fc2NpX3N0cmluZycsICd0b19lbmdfc3RyaW5nJyk6CisgICAgICAgICAgICAgICAgaWYgRVhURU5ERURFUlJPUlRFU1Q6CisgICAgICAgICAgICAgICAgICAgIGZvciBlcnJvciBpbiB0aGVpcmV4Y2VwdGlvbnM6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQudHJhcHNbZXJyb3JdID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0KHNlbGYuY29udGV4dC5jcmVhdGVfZGVjaW1hbCh2KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgU2lnbmFscywgZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlJhaXNlZCAlcyBpbiAlcyB3aGVuICVzIGRpc2FibGVkIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUsIHMsIGVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWQgbm90IHJhaXNlICVzIGluICVzIiAlIChlcnJvciwgcykpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQudHJhcHNbZXJyb3JdID0gMAorICAgICAgICAgICAgICAgIHYgPSBzZWxmLmNvbnRleHQuY3JlYXRlX2RlY2ltYWwodikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdiA9IERlY2ltYWwodiwgc2VsZi5jb250ZXh0KQorICAgICAgICAgICAgdmFscy5hcHBlbmQodikKKworICAgICAgICBhbnMgPSBGaXhRdW90ZXMoYW5zKQorCisgICAgICAgIGlmIEVYVEVOREVERVJST1JURVNUIGFuZCBmbmFtZSBub3QgaW4gKCd0b19zY2lfc3RyaW5nJywgJ3RvX2VuZ19zdHJpbmcnKToKKyAgICAgICAgICAgIGZvciBlcnJvciBpbiB0aGVpcmV4Y2VwdGlvbnM6CisgICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LnRyYXBzW2Vycm9yXSA9IDEKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0KCp2YWxzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGV4Y2VwdCBTaWduYWxzLCBlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlJhaXNlZCAlcyBpbiAlcyB3aGVuICVzIGRpc2FibGVkIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLCBzLCBlcnJvcikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWQgbm90IHJhaXNlICVzIGluICVzIiAlIChlcnJvciwgcykpCisgICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LnRyYXBzW2Vycm9yXSA9IDAKKworICAgICAgICAgICAgIyBhcyBhYm92ZSwgYnV0IGFkZCB0cmFwcyBjdW11bGF0aXZlbHksIHRvIGNoZWNrIHByZWNlZGVuY2UKKyAgICAgICAgICAgIG9yZGVyZWRfZXJyb3JzID0gW2UgZm9yIGUgaW4gT3JkZXJlZFNpZ25hbHMgaWYgZSBpbiB0aGVpcmV4Y2VwdGlvbnNdCisgICAgICAgICAgICBmb3IgZXJyb3IgaW4gb3JkZXJlZF9lcnJvcnM6CisgICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LnRyYXBzW2Vycm9yXSA9IDEKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0KCp2YWxzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGV4Y2VwdCBTaWduYWxzLCBlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlJhaXNlZCAlcyBpbiAlczsgZXhwZWN0ZWQgJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKGUpLCBzLCBlcnJvcikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWQgbm90IHJhaXNlICVzIGluICVzIiAlIChlcnJvciwgcykpCisgICAgICAgICAgICAjIHJlc2V0IHRyYXBzCisgICAgICAgICAgICBmb3IgZXJyb3IgaW4gb3JkZXJlZF9lcnJvcnM6CisgICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LnRyYXBzW2Vycm9yXSA9IDAKKworCisgICAgICAgIGlmIERFQlVHOgorICAgICAgICAgICAgcHJpbnQgIi0tIiwgc2VsZi5jb250ZXh0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0cihmdW5jdCgqdmFscykpCisgICAgICAgICAgICBpZiBmbmFtZSBpbiBMT0dJQ0FMX0ZVTkNUSU9OUzoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHIoaW50KGV2YWwocmVzdWx0KSkpICMgJ1RydWUnLCAnRmFsc2UnIC0+ICcxJywgJzAnCisgICAgICAgIGV4Y2VwdCBTaWduYWxzLCBlcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiUmFpc2VkICVzIGluICVzIiAlIChlcnJvciwgcykpCisgICAgICAgIGV4Y2VwdDogI0NhdGNoIGFueSBlcnJvciBsb25nIGVub3VnaCB0byBzdGF0ZSB0aGUgdGVzdCBjYXNlLgorICAgICAgICAgICAgcHJpbnQgIkVSUk9SOiIsIHMKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgbXlleGNlcHRpb25zID0gc2VsZi5nZXRleGNlcHRpb25zKCkKKyAgICAgICAgc2VsZi5jb250ZXh0LmNsZWFyX2ZsYWdzKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgYW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICdJbmNvcnJlY3QgYW5zd2VyIGZvciAnICsgcyArICcgLS0gZ290ICcgKyByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChteWV4Y2VwdGlvbnMsIHRoZWlyZXhjZXB0aW9ucywKKyAgICAgICAgICAgICAgJ0luY29ycmVjdCBmbGFncyBzZXQgaW4gJyArIHMgKyAnIC0tIGdvdCAnICsgc3RyKG15ZXhjZXB0aW9ucykpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGdldGV4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIHJldHVybiBbZSBmb3IgZSBpbiBTaWduYWxzIGlmIHNlbGYuY29udGV4dC5mbGFnc1tlXV0KKworICAgIGRlZiBjaGFuZ2VfcHJlY2lzaW9uKHNlbGYsIHByZWMpOgorICAgICAgICBzZWxmLmNvbnRleHQucHJlYyA9IHByZWMKKyAgICBkZWYgY2hhbmdlX3JvdW5kaW5nX21ldGhvZChzZWxmLCByb3VuZGluZyk6CisgICAgICAgIHNlbGYuY29udGV4dC5yb3VuZGluZyA9IHJvdW5kaW5nCisgICAgZGVmIGNoYW5nZV9taW5fZXhwb25lbnQoc2VsZiwgZXhwKToKKyAgICAgICAgc2VsZi5jb250ZXh0LkVtaW4gPSBleHAKKyAgICBkZWYgY2hhbmdlX21heF9leHBvbmVudChzZWxmLCBleHApOgorICAgICAgICBzZWxmLmNvbnRleHQuRW1heCA9IGV4cAorICAgIGRlZiBjaGFuZ2VfY2xhbXAoc2VsZiwgY2xhbXApOgorICAgICAgICBzZWxmLmNvbnRleHQuX2NsYW1wID0gY2xhbXAKKworCisKKyMgVGhlIGZvbGxvd2luZyBjbGFzc2VzIHRlc3QgdGhlIGJlaGF2aW91ciBvZiBEZWNpbWFsIGFjY29yZGluZyB0byBQRVAgMzI3CisKK2NsYXNzIERlY2ltYWxFeHBsaWNpdENvbnN0cnVjdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICcnJ1VuaXQgdGVzdHMgZm9yIEV4cGxpY2l0IENvbnN0cnVjdGlvbiBjYXNlcyBvZiBEZWNpbWFsLicnJworCisgICAgZGVmIHRlc3RfZXhwbGljaXRfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbCgpLCBEZWNpbWFsKCIwIikpCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9mcm9tX05vbmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRGVjaW1hbCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2Zyb21faW50KHNlbGYpOgorCisgICAgICAgICNwb3NpdGl2ZQorICAgICAgICBkID0gRGVjaW1hbCg0NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZCksICc0NScpCisKKyAgICAgICAgI3ZlcnkgbGFyZ2UgcG9zaXRpdmUKKyAgICAgICAgZCA9IERlY2ltYWwoNTAwMDAwMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkKSwgJzUwMDAwMDEyMycpCisKKyAgICAgICAgI25lZ2F0aXZlCisgICAgICAgIGQgPSBEZWNpbWFsKC00NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZCksICctNDUnKQorCisgICAgICAgICN6ZXJvCisgICAgICAgIGQgPSBEZWNpbWFsKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQpLCAnMCcpCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9mcm9tX3N0cmluZyhzZWxmKToKKworICAgICAgICAjZW1wdHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRGVjaW1hbCgnJykpLCAnTmFOJykKKworICAgICAgICAjaW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoJzQ1JykpLCAnNDUnKQorCisgICAgICAgICNmbG9hdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKCc0NS4zNCcpKSwgJzQ1LjM0JykKKworICAgICAgICAjZW5naW5lZXIgbm90YXRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRGVjaW1hbCgnNDVlMicpKSwgJzQuNUUrMycpCisKKyAgICAgICAgI2p1c3Qgbm90IGEgbnVtYmVyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoJ3VnbHknKSksICdOYU4nKQorCisgICAgICAgICNsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIHBlcm1pdHRlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKCcxLjNFNCBcbicpKSwgJzEuM0UrNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoJyAgLTcuODknKSksICctNy44OScpCisKKyAgICAgICAgI3VuaWNvZGUgc3RyaW5ncyBzaG91bGQgYmUgcGVybWl0dGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwodScwRS0wMTcnKSksICcwRS0xNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwodSc0NScpKSwgJzQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRGVjaW1hbCh1Jy1JbmYnKSksICctSW5maW5pdHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKHUnTmFOMTIzJykpLCAnTmFOMTIzJykKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2Zyb21fdHVwbGVzKHNlbGYpOgorCisgICAgICAgICN6ZXJvCisgICAgICAgIGQgPSBEZWNpbWFsKCAoMCwgKDAsKSwgMCkgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkKSwgJzAnKQorCisgICAgICAgICNpbnQKKyAgICAgICAgZCA9IERlY2ltYWwoICgxLCAoNCwgNSksIDApICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZCksICctNDUnKQorCisgICAgICAgICNmbG9hdAorICAgICAgICBkID0gRGVjaW1hbCggKDAsICg0LCA1LCAzLCA0KSwgLTIpICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZCksICc0NS4zNCcpCisKKyAgICAgICAgI3dlaXJkCisgICAgICAgIGQgPSBEZWNpbWFsKCAoMSwgKDQsIDMsIDQsIDksIDEsIDMsIDUsIDMsIDQpLCAtMjUpICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZCksICctNC4zNDkxMzUzNEUtMTcnKQorCisgICAgICAgICN3cm9uZyBudW1iZXIgb2YgaXRlbXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRGVjaW1hbCwgKDEsICg0LCAzLCA0LCA5LCAxKSkgKQorCisgICAgICAgICNiYWQgc2lnbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBEZWNpbWFsLCAoOCwgKDQsIDMsIDQsIDksIDEpLCAyKSApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIERlY2ltYWwsICgwLiwgKDQsIDMsIDQsIDksIDEpLCAyKSApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIERlY2ltYWwsIChEZWNpbWFsKDEpLCAoNCwgMywgNCwgOSwgMSksIDIpKQorCisgICAgICAgICNiYWQgZXhwCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIERlY2ltYWwsICgxLCAoNCwgMywgNCwgOSwgMSksICd3cm9uZyEnKSApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIERlY2ltYWwsICgxLCAoNCwgMywgNCwgOSwgMSksIDAuKSApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIERlY2ltYWwsICgxLCAoNCwgMywgNCwgOSwgMSksICcxJykgKQorCisgICAgICAgICNiYWQgY29lZmZpY2llbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIERlY2ltYWwsICgxLCAoNCwgMywgNCwgTm9uZSwgMSksIDIpICkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRGVjaW1hbCwgKDEsICg0LCAtMywgNCwgOSwgMSksIDIpICkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRGVjaW1hbCwgKDEsICg0LCAxMCwgNCwgOSwgMSksIDIpICkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRGVjaW1hbCwgKDEsICg0LCAzLCA0LCAnYScsIDEpLCAyKSApCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9mcm9tX2Jvb2woc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYm9vbChEZWNpbWFsKDApKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYm9vbChEZWNpbWFsKDEpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKEZhbHNlKSwgRGVjaW1hbCgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKFRydWUpLCBEZWNpbWFsKDEpKQorCisgICAgZGVmIHRlc3RfZXhwbGljaXRfZnJvbV9EZWNpbWFsKHNlbGYpOgorCisgICAgICAgICNwb3NpdGl2ZQorICAgICAgICBkID0gRGVjaW1hbCg0NSkKKyAgICAgICAgZSA9IERlY2ltYWwoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICc0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZCksIGlkKGUpKQorCisgICAgICAgICN2ZXJ5IGxhcmdlIHBvc2l0aXZlCisgICAgICAgIGQgPSBEZWNpbWFsKDUwMDAwMDEyMykKKyAgICAgICAgZSA9IERlY2ltYWwoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICc1MDAwMDAxMjMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGQpLCBpZChlKSkKKworICAgICAgICAjbmVnYXRpdmUKKyAgICAgICAgZCA9IERlY2ltYWwoLTQ1KQorICAgICAgICBlID0gRGVjaW1hbChkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJy00NScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZCksIGlkKGUpKQorCisgICAgICAgICN6ZXJvCisgICAgICAgIGQgPSBEZWNpbWFsKDApCisgICAgICAgIGUgPSBEZWNpbWFsKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAnMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZCksIGlkKGUpKQorCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfZXhwbGljaXRfZnJvbV9mbG9hdChzZWxmKToKKyAgICAgICAgciA9IERlY2ltYWwoMC4xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUociksIERlY2ltYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHIpLAorICAgICAgICAgICAgICAgICcwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNTc4MjcwMjExODE1ODM0MDQ1NDEwMTU2MjUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRGVjaW1hbChmbG9hdCgnbmFuJykpLmlzX3FuYW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKERlY2ltYWwoZmxvYXQoJ2luZicpKS5pc19pbmZpbml0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRGVjaW1hbChmbG9hdCgnLWluZicpKS5pc19pbmZpbml0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKGZsb2F0KCduYW4nKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihEZWNpbWFsKCdOYU4nKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoZmxvYXQoJ2luZicpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKERlY2ltYWwoJ0luZmluaXR5JykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKGZsb2F0KCctaW5mJykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoRGVjaW1hbCgnLUluZmluaXR5JykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKGZsb2F0KCctMC4wJykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoRGVjaW1hbCgnLTAnKSkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIwMCk6CisgICAgICAgICAgICB4ID0gcmFuZG9tLmV4cG92YXJpYXRlKDAuMDEpICogKHJhbmRvbS5yYW5kb20oKSAqIDIuMCAtIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgZmxvYXQoRGVjaW1hbCh4KSkpICMgcm91bmR0cmlwCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9jb250ZXh0X2NyZWF0ZV9kZWNpbWFsKHNlbGYpOgorCisgICAgICAgIG5jID0gY29weS5jb3B5KGdldGNvbnRleHQoKSkKKyAgICAgICAgbmMucHJlYyA9IDMKKworICAgICAgICAjIGVtcHR5CisgICAgICAgIGQgPSBEZWNpbWFsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZCksICcwJykKKyAgICAgICAgZCA9IG5jLmNyZWF0ZV9kZWNpbWFsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZCksICcwJykKKworICAgICAgICAjIGZyb20gTm9uZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG5jLmNyZWF0ZV9kZWNpbWFsLCBOb25lKQorCisgICAgICAgICMgZnJvbSBpbnQKKyAgICAgICAgZCA9IG5jLmNyZWF0ZV9kZWNpbWFsKDQ1NikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGQsIERlY2ltYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmMuY3JlYXRlX2RlY2ltYWwoNDU2NzgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5jLmNyZWF0ZV9kZWNpbWFsKCc0NTdFKzInKSkKKworICAgICAgICAjIGZyb20gc3RyaW5nCisgICAgICAgIGQgPSBEZWNpbWFsKCc0NTY3ODknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkKSwgJzQ1Njc4OScpCisgICAgICAgIGQgPSBuYy5jcmVhdGVfZGVjaW1hbCgnNDU2Nzg5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZCksICc0LjU3RSs1JykKKyAgICAgICAgIyBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIHNob3VsZCByZXN1bHQgaW4gYSBOYU47CisgICAgICAgICMgc3BhY2VzIGFyZSBhbHJlYWR5IGNoZWNrZWQgaW4gQ293bGlzaGF3J3MgdGVzdC1zdWl0ZSwgc28KKyAgICAgICAgIyBoZXJlIHdlIGp1c3QgY2hlY2sgdGhhdCBhIHRyYWlsaW5nIG5ld2xpbmUgcmVzdWx0cyBpbiBhIE5hTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihuYy5jcmVhdGVfZGVjaW1hbCgnMy4xNFxuJykpLCAnTmFOJykKKworICAgICAgICAjIGZyb20gdHVwbGVzCisgICAgICAgIGQgPSBEZWNpbWFsKCAoMSwgKDQsIDMsIDQsIDksIDEsIDMsIDUsIDMsIDQpLCAtMjUpICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZCksICctNC4zNDkxMzUzNEUtMTcnKQorICAgICAgICBkID0gbmMuY3JlYXRlX2RlY2ltYWwoICgxLCAoNCwgMywgNCwgOSwgMSwgMywgNSwgMywgNCksIC0yNSkgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkKSwgJy00LjM1RS0xNycpCisKKyAgICAgICAgIyBmcm9tIERlY2ltYWwKKyAgICAgICAgcHJldmRlYyA9IERlY2ltYWwoNTAwMDAwMTIzKQorICAgICAgICBkID0gRGVjaW1hbChwcmV2ZGVjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkKSwgJzUwMDAwMDEyMycpCisgICAgICAgIGQgPSBuYy5jcmVhdGVfZGVjaW1hbChwcmV2ZGVjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkKSwgJzUuMDBFKzgnKQorCisgICAgZGVmIHRlc3RfdW5pY29kZV9kaWdpdHMoc2VsZik6CisgICAgICAgIHRlc3RfdmFsdWVzID0geworICAgICAgICAgICAgdSdcdWZmMTEnOiAnMScsCisgICAgICAgICAgICB1J1x1MDY2MC5cdTA2NjBcdTA2NjNcdTA2NjdcdTA2NjJlLVx1MDY2MycgOiAnMC4wMDAwMzcyJywKKyAgICAgICAgICAgIHUnLW5hblx1MGM2OFx1MGM2YVx1MGM2Nlx1MGM2NicgOiAnLU5hTjI0MDAnLAorICAgICAgICAgICAgfQorICAgICAgICBmb3IgaW5wdXQsIGV4cGVjdGVkIGluIHRlc3RfdmFsdWVzLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKGlucHV0KSksIGV4cGVjdGVkKQorCisKK2NsYXNzIERlY2ltYWxJbXBsaWNpdENvbnN0cnVjdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICcnJ1VuaXQgdGVzdHMgZm9yIEltcGxpY2l0IENvbnN0cnVjdGlvbiBjYXNlcyBvZiBEZWNpbWFsLicnJworCisgICAgZGVmIHRlc3RfaW1wbGljaXRfZnJvbV9Ob25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV2YWwsICdEZWNpbWFsKDUpICsgTm9uZScsIGdsb2JhbHMoKSkKKworICAgIGRlZiB0ZXN0X2ltcGxpY2l0X2Zyb21faW50KHNlbGYpOgorICAgICAgICAjbm9ybWFsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoNSkgKyA0NSksICc1MCcpCisgICAgICAgICNleGNlZWRpbmcgcHJlY2lzaW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbCg1KSArIDEyMzQ1Njc4OTAwMCwgRGVjaW1hbCgxMjM0NTY3ODkwMDApKQorCisgICAgZGVmIHRlc3RfaW1wbGljaXRfZnJvbV9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgJ0RlY2ltYWwoNSkgKyAiMyInLCBnbG9iYWxzKCkpCisKKyAgICBkZWYgdGVzdF9pbXBsaWNpdF9mcm9tX2Zsb2F0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGV2YWwsICdEZWNpbWFsKDUpICsgMi4yJywgZ2xvYmFscygpKQorCisgICAgZGVmIHRlc3RfaW1wbGljaXRfZnJvbV9EZWNpbWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoNSkgKyBEZWNpbWFsKDQ1KSwgRGVjaW1hbCg1MCkpCisKKyAgICBkZWYgdGVzdF9yb3Aoc2VsZik6CisgICAgICAgICMgQWxsb3cgb3RoZXIgY2xhc3NlcyB0byBiZSB0cmFpbmVkIHRvIGludGVyYWN0IHdpdGggRGVjaW1hbHMKKyAgICAgICAgY2xhc3MgRToKKyAgICAgICAgICAgIGRlZiBfX2Rpdm1vZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2Rpdm1vZCAnICsgc3RyKG90aGVyKQorICAgICAgICAgICAgZGVmIF9fcmRpdm1vZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyKG90aGVyKSArICcgcmRpdm1vZCcKKyAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAnbHQgJyArIHN0cihvdGhlcikKKyAgICAgICAgICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAnZ3QgJyArIHN0cihvdGhlcikKKyAgICAgICAgICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAnbGUgJyArIHN0cihvdGhlcikKKyAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAnZ2UgJyArIHN0cihvdGhlcikKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAnZXEgJyArIHN0cihvdGhlcikKKyAgICAgICAgICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAnbmUgJyArIHN0cihvdGhlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZChFKCksIERlY2ltYWwoMTApKSwgJ2Rpdm1vZCAxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2bW9kKERlY2ltYWwoMTApLCBFKCkpLCAnMTAgcmRpdm1vZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgnRGVjaW1hbCgxMCkgPCBFKCknKSwgJ2d0IDEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCdEZWNpbWFsKDEwKSA+IEUoKScpLCAnbHQgMTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ0RlY2ltYWwoMTApIDw9IEUoKScpLCAnZ2UgMTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ0RlY2ltYWwoMTApID49IEUoKScpLCAnbGUgMTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ0RlY2ltYWwoMTApID09IEUoKScpLCAnZXEgMTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ0RlY2ltYWwoMTApICE9IEUoKScpLCAnbmUgMTAnKQorCisgICAgICAgICMgaW5zZXJ0IG9wZXJhdG9yIG1ldGhvZHMgYW5kIHRoZW4gZXhlcmNpc2UgdGhlbQorICAgICAgICBvcGxpc3QgPSBbCisgICAgICAgICAgICAoJysnLCAnX19hZGRfXycsICdfX3JhZGRfXycpLAorICAgICAgICAgICAgKCctJywgJ19fc3ViX18nLCAnX19yc3ViX18nKSwKKyAgICAgICAgICAgICgnKicsICdfX211bF9fJywgJ19fcm11bF9fJyksCisgICAgICAgICAgICAoJyUnLCAnX19tb2RfXycsICdfX3Jtb2RfXycpLAorICAgICAgICAgICAgKCcvLycsICdfX2Zsb29yZGl2X18nLCAnX19yZmxvb3JkaXZfXycpLAorICAgICAgICAgICAgKCcqKicsICdfX3Bvd19fJywgJ19fcnBvd19fJykKKyAgICAgICAgXQorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIGlmIDEgLyAyID09IDA6CisgICAgICAgICAgICAgICAgIyB0ZXN0aW5nIHdpdGggY2xhc3NpYyBkaXZpc2lvbiwgc28gYWRkIF9fZGl2X18KKyAgICAgICAgICAgICAgICBvcGxpc3QuYXBwZW5kKCgnLycsICdfX2Rpdl9fJywgJ19fcmRpdl9fJykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgdGVzdGluZyB3aXRoIC1RbmV3LCBzbyBhZGQgX190cnVlZGl2X18KKyAgICAgICAgICAgICAgICBvcGxpc3QuYXBwZW5kKCgnLycsICdfX3RydWVkaXZfXycsICdfX3J0cnVlZGl2X18nKSkKKworICAgICAgICBmb3Igc3ltLCBsb3AsIHJvcCBpbiBvcGxpc3Q6CisgICAgICAgICAgICBzZXRhdHRyKEUsIGxvcCwgbGFtYmRhIHNlbGYsIG90aGVyOiAnc3RyJyArIGxvcCArIHN0cihvdGhlcikpCisgICAgICAgICAgICBzZXRhdHRyKEUsIHJvcCwgbGFtYmRhIHNlbGYsIG90aGVyOiBzdHIob3RoZXIpICsgcm9wICsgJ3N0cicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ0UoKScgKyBzeW0gKyAnRGVjaW1hbCgxMCknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cicgKyBsb3AgKyAnMTAnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCdEZWNpbWFsKDEwKScgKyBzeW0gKyAnRSgpJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMCcgKyByb3AgKyAnc3RyJykKKworCitjbGFzcyBEZWNpbWFsRm9ybWF0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgJycnVW5pdCB0ZXN0cyBmb3IgdGhlIGZvcm1hdCBmdW5jdGlvbi4nJycKKyAgICBkZWYgdGVzdF9mb3JtYXR0aW5nKHNlbGYpOgorICAgICAgICAjIHRyaXBsZXMgZ2l2aW5nIGEgZm9ybWF0LCBhIERlY2ltYWwsIGFuZCB0aGUgZXhwZWN0ZWQgcmVzdWx0CisgICAgICAgIHRlc3RfdmFsdWVzID0gWworICAgICAgICAgICAgKCdlJywgJzBFLTE1JywgJzBlLTE1JyksCisgICAgICAgICAgICAoJ2UnLCAnMi4zRS0xNScsICcyLjNlLTE1JyksCisgICAgICAgICAgICAoJ2UnLCAnMi4zMEUrMicsICcyLjMwZSsyJyksICMgcHJlc2VydmUgc2lnbmlmaWNhbnQgemVyb3MKKyAgICAgICAgICAgICgnZScsICcyLjMwMDAwRS0xNScsICcyLjMwMDAwZS0xNScpLAorICAgICAgICAgICAgKCdlJywgJzEuMjM0NTY3ODkxMjM0NTY3ODllNDAnLCAnMS4yMzQ1Njc4OTEyMzQ1Njc4OWUrNDAnKSwKKyAgICAgICAgICAgICgnZScsICcxLjUnLCAnMS41ZSswJyksCisgICAgICAgICAgICAoJ2UnLCAnMC4xNScsICcxLjVlLTEnKSwKKyAgICAgICAgICAgICgnZScsICcwLjAxNScsICcxLjVlLTInKSwKKyAgICAgICAgICAgICgnZScsICcwLjAwMDAwMDAwMDAwMTUnLCAnMS41ZS0xMicpLAorICAgICAgICAgICAgKCdlJywgJzE1LjAnLCAnMS41MGUrMScpLAorICAgICAgICAgICAgKCdlJywgJy0xNScsICctMS41ZSsxJyksCisgICAgICAgICAgICAoJ2UnLCAnMCcsICcwZSswJyksCisgICAgICAgICAgICAoJ2UnLCAnMEUxJywgJzBlKzEnKSwKKyAgICAgICAgICAgICgnZScsICcwLjAnLCAnMGUtMScpLAorICAgICAgICAgICAgKCdlJywgJzAuMDAnLCAnMGUtMicpLAorICAgICAgICAgICAgKCcuNmUnLCAnMEUtMTUnLCAnMC4wMDAwMDBlLTknKSwKKyAgICAgICAgICAgICgnLjZlJywgJzAnLCAnMC4wMDAwMDBlKzYnKSwKKyAgICAgICAgICAgICgnLjZlJywgJzkuOTk5OTk5JywgJzkuOTk5OTk5ZSswJyksCisgICAgICAgICAgICAoJy42ZScsICc5Ljk5OTk5OTknLCAnMS4wMDAwMDBlKzEnKSwKKyAgICAgICAgICAgICgnLjZlJywgJy0xLjIzZTUnLCAnLTEuMjMwMDAwZSs1JyksCisgICAgICAgICAgICAoJy42ZScsICcxLjIzNDU2Nzg5ZS0zJywgJzEuMjM0NTY4ZS0zJyksCisgICAgICAgICAgICAoJ2YnLCAnMCcsICcwJyksCisgICAgICAgICAgICAoJ2YnLCAnMC4wJywgJzAuMCcpLAorICAgICAgICAgICAgKCdmJywgJzBFLTInLCAnMC4wMCcpLAorICAgICAgICAgICAgKCdmJywgJzAuMDBFLTgnLCAnMC4wMDAwMDAwMDAwJyksCisgICAgICAgICAgICAoJ2YnLCAnMEUxJywgJzAnKSwgIyBsb3NlcyBleHBvbmVudCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgKCdmJywgJzMuMkUxJywgJzMyJyksCisgICAgICAgICAgICAoJ2YnLCAnMy4yRTInLCAnMzIwJyksCisgICAgICAgICAgICAoJ2YnLCAnMy4yMEUyJywgJzMyMCcpLAorICAgICAgICAgICAgKCdmJywgJzMuMjAwRTInLCAnMzIwLjAnKSwKKyAgICAgICAgICAgICgnZicsICczLjJFLTYnLCAnMC4wMDAwMDMyJyksCisgICAgICAgICAgICAoJy42ZicsICcwRS0xNScsICcwLjAwMDAwMCcpLCAjIGFsbCB6ZXJvcyB0cmVhdGVkIGVxdWFsbHkKKyAgICAgICAgICAgICgnLjZmJywgJzBFMScsICcwLjAwMDAwMCcpLAorICAgICAgICAgICAgKCcuNmYnLCAnMCcsICcwLjAwMDAwMCcpLAorICAgICAgICAgICAgKCcuMGYnLCAnMCcsICcwJyksICMgbm8gZGVjaW1hbCBwb2ludAorICAgICAgICAgICAgKCcuMGYnLCAnMGUtMicsICcwJyksCisgICAgICAgICAgICAoJy4wZicsICczLjE0MTU5MjY1JywgJzMnKSwKKyAgICAgICAgICAgICgnLjFmJywgJzMuMTQxNTkyNjUnLCAnMy4xJyksCisgICAgICAgICAgICAoJy40ZicsICczLjE0MTU5MjY1JywgJzMuMTQxNicpLAorICAgICAgICAgICAgKCcuNmYnLCAnMy4xNDE1OTI2NScsICczLjE0MTU5MycpLAorICAgICAgICAgICAgKCcuN2YnLCAnMy4xNDE1OTI2NScsICczLjE0MTU5MjYnKSwgIyByb3VuZC1oYWxmLWV2ZW4hCisgICAgICAgICAgICAoJy44ZicsICczLjE0MTU5MjY1JywgJzMuMTQxNTkyNjUnKSwKKyAgICAgICAgICAgICgnLjlmJywgJzMuMTQxNTkyNjUnLCAnMy4xNDE1OTI2NTAnKSwKKworICAgICAgICAgICAgKCdnJywgJzAnLCAnMCcpLAorICAgICAgICAgICAgKCdnJywgJzAuMCcsICcwLjAnKSwKKyAgICAgICAgICAgICgnZycsICcwRTEnLCAnMGUrMScpLAorICAgICAgICAgICAgKCdHJywgJzBFMScsICcwRSsxJyksCisgICAgICAgICAgICAoJ2cnLCAnMEUtNScsICcwLjAwMDAwJyksCisgICAgICAgICAgICAoJ2cnLCAnMEUtNicsICcwLjAwMDAwMCcpLAorICAgICAgICAgICAgKCdnJywgJzBFLTcnLCAnMGUtNycpLAorICAgICAgICAgICAgKCdnJywgJy0wRTInLCAnLTBlKzInKSwKKyAgICAgICAgICAgICgnLjBnJywgJzMuMTQxNTkyNjUnLCAnMycpLCAgIyAwIHNpZyBmaWcgLT4gMSBzaWcgZmlnCisgICAgICAgICAgICAoJy4xZycsICczLjE0MTU5MjY1JywgJzMnKSwKKyAgICAgICAgICAgICgnLjJnJywgJzMuMTQxNTkyNjUnLCAnMy4xJyksCisgICAgICAgICAgICAoJy41ZycsICczLjE0MTU5MjY1JywgJzMuMTQxNicpLAorICAgICAgICAgICAgKCcuN2cnLCAnMy4xNDE1OTI2NScsICczLjE0MTU5MycpLAorICAgICAgICAgICAgKCcuOGcnLCAnMy4xNDE1OTI2NScsICczLjE0MTU5MjYnKSwgIyByb3VuZC1oYWxmLWV2ZW4hCisgICAgICAgICAgICAoJy45ZycsICczLjE0MTU5MjY1JywgJzMuMTQxNTkyNjUnKSwKKyAgICAgICAgICAgICgnLjEwZycsICczLjE0MTU5MjY1JywgJzMuMTQxNTkyNjUnKSwgIyBkb24ndCBwYWQKKworICAgICAgICAgICAgKCclJywgJzBFMScsICcwJScpLAorICAgICAgICAgICAgKCclJywgJzBFMCcsICcwJScpLAorICAgICAgICAgICAgKCclJywgJzBFLTEnLCAnMCUnKSwKKyAgICAgICAgICAgICgnJScsICcwRS0yJywgJzAlJyksCisgICAgICAgICAgICAoJyUnLCAnMEUtMycsICcwLjAlJyksCisgICAgICAgICAgICAoJyUnLCAnMEUtNCcsICcwLjAwJScpLAorCisgICAgICAgICAgICAoJy4zJScsICcwJywgJzAuMDAwJScpLCAjIGFsbCB6ZXJvcyB0cmVhdGVkIGVxdWFsbHkKKyAgICAgICAgICAgICgnLjMlJywgJzBFMTAnLCAnMC4wMDAlJyksCisgICAgICAgICAgICAoJy4zJScsICcwRS0xMCcsICcwLjAwMCUnKSwKKyAgICAgICAgICAgICgnLjMlJywgJzIuMzQnLCAnMjM0LjAwMCUnKSwKKyAgICAgICAgICAgICgnLjMlJywgJzEuMjM0NTY3JywgJzEyMy40NTclJyksCisgICAgICAgICAgICAoJy4wJScsICcxLjIzJywgJzEyMyUnKSwKKworICAgICAgICAgICAgKCdlJywgJ05hTicsICdOYU4nKSwKKyAgICAgICAgICAgICgnZicsICctTmFOMTIzJywgJy1OYU4xMjMnKSwKKyAgICAgICAgICAgICgnK2cnLCAnTmFONDU2JywgJytOYU40NTYnKSwKKyAgICAgICAgICAgICgnLjNlJywgJ0luZicsICdJbmZpbml0eScpLAorICAgICAgICAgICAgKCcuMTZmJywgJy1JbmYnLCAnLUluZmluaXR5JyksCisgICAgICAgICAgICAoJy4wZycsICctc05hTicsICctc05hTicpLAorCisgICAgICAgICAgICAoJycsICcxLjAwJywgJzEuMDAnKSwKKworICAgICAgICAgICAgIyB0ZXN0IGFsaWdubWVudCBhbmQgcGFkZGluZworICAgICAgICAgICAgKCc2JywgJzEyMycsICcgICAxMjMnKSwKKyAgICAgICAgICAgICgnPDYnLCAnMTIzJywgJzEyMyAgICcpLAorICAgICAgICAgICAgKCc+NicsICcxMjMnLCAnICAgMTIzJyksCisgICAgICAgICAgICAoJ142JywgJzEyMycsICcgMTIzICAnKSwKKyAgICAgICAgICAgICgnPSs2JywgJzEyMycsICcrICAxMjMnKSwKKyAgICAgICAgICAgICgnIzwxMCcsICdOYU4nLCAnTmFOIyMjIyMjIycpLAorICAgICAgICAgICAgKCcjPDEwJywgJy00LjMnLCAnLTQuMyMjIyMjIycpLAorICAgICAgICAgICAgKCcjPCsxMCcsICcwLjAxMzAnLCAnKzAuMDEzMCMjIycpLAorICAgICAgICAgICAgKCcjPCAxMCcsICcwLjAxMzAnLCAnIDAuMDEzMCMjIycpLAorICAgICAgICAgICAgKCdAPjEwJywgJy1JbmYnLCAnQC1JbmZpbml0eScpLAorICAgICAgICAgICAgKCcjPjUnLCAnLUluZicsICctSW5maW5pdHknKSwKKyAgICAgICAgICAgICgnP141JywgJzEyMycsICc/MTIzPycpLAorICAgICAgICAgICAgKCclXjYnLCAnMTIzJywgJyUxMjMlJScpLAorICAgICAgICAgICAgKCcgXjYnLCAnLTQ1LjYnLCAnLTQ1LjYgJyksCisgICAgICAgICAgICAoJy89MTAnLCAnLTQ1LjYnLCAnLS8vLy8vNDUuNicpLAorICAgICAgICAgICAgKCcvPSsxMCcsICc0NS42JywgJysvLy8vLzQ1LjYnKSwKKyAgICAgICAgICAgICgnLz0gMTAnLCAnNDUuNicsICcgLy8vLy80NS42JyksCisKKyAgICAgICAgICAgICMgdGhvdXNhbmRzIHNlcGFyYXRvcgorICAgICAgICAgICAgKCcsJywgJzEyMzQ1NjcnLCAnMSwyMzQsNTY3JyksCisgICAgICAgICAgICAoJywnLCAnMTIzNDU2JywgJzEyMyw0NTYnKSwKKyAgICAgICAgICAgICgnLCcsICcxMjM0NScsICcxMiwzNDUnKSwKKyAgICAgICAgICAgICgnLCcsICcxMjM0JywgJzEsMjM0JyksCisgICAgICAgICAgICAoJywnLCAnMTIzJywgJzEyMycpLAorICAgICAgICAgICAgKCcsJywgJzEyJywgJzEyJyksCisgICAgICAgICAgICAoJywnLCAnMScsICcxJyksCisgICAgICAgICAgICAoJywnLCAnMCcsICcwJyksCisgICAgICAgICAgICAoJywnLCAnLTEyMzQ1NjcnLCAnLTEsMjM0LDU2NycpLAorICAgICAgICAgICAgKCcsJywgJy0xMjM0NTYnLCAnLTEyMyw0NTYnKSwKKyAgICAgICAgICAgICgnNywnLCAnMTIzNDU2JywgJzEyMyw0NTYnKSwKKyAgICAgICAgICAgICgnOCwnLCAnMTIzNDU2JywgJyAxMjMsNDU2JyksCisgICAgICAgICAgICAoJzA4LCcsICcxMjM0NTYnLCAnMCwxMjMsNDU2JyksICMgc3BlY2lhbCBjYXNlOiBleHRyYSAwIG5lZWRlZAorICAgICAgICAgICAgKCcrMDgsJywgJzEyMzQ1NicsICcrMTIzLDQ1NicpLCAjIGJ1dCBub3QgaWYgdGhlcmUncyBhIHNpZ24KKyAgICAgICAgICAgICgnIDA4LCcsICcxMjM0NTYnLCAnIDEyMyw0NTYnKSwKKyAgICAgICAgICAgICgnMDgsJywgJy0xMjM0NTYnLCAnLTEyMyw0NTYnKSwKKyAgICAgICAgICAgICgnKzA5LCcsICcxMjM0NTYnLCAnKzAsMTIzLDQ1NicpLAorICAgICAgICAgICAgIyAuLi4gd2l0aCBmcmFjdGlvbmFsIHBhcnQuLi4KKyAgICAgICAgICAgICgnMDcsJywgJzEyMzQuNTYnLCAnMSwyMzQuNTYnKSwKKyAgICAgICAgICAgICgnMDgsJywgJzEyMzQuNTYnLCAnMSwyMzQuNTYnKSwKKyAgICAgICAgICAgICgnMDksJywgJzEyMzQuNTYnLCAnMDEsMjM0LjU2JyksCisgICAgICAgICAgICAoJzAxMCwnLCAnMTIzNC41NicsICcwMDEsMjM0LjU2JyksCisgICAgICAgICAgICAoJzAxMSwnLCAnMTIzNC41NicsICcwLDAwMSwyMzQuNTYnKSwKKyAgICAgICAgICAgICgnMDEyLCcsICcxMjM0LjU2JywgJzAsMDAxLDIzNC41NicpLAorICAgICAgICAgICAgKCcwOCwuMWYnLCAnMTIzNC41JywgJzAxLDIzNC41JyksCisgICAgICAgICAgICAjIG5vIHRob3VzYW5kcyBzZXBhcmF0b3JzIGluIGZyYWN0aW9uIHBhcnQKKyAgICAgICAgICAgICgnLCcsICcxLjIzNDU2Nzg5JywgJzEuMjM0NTY3ODknKSwKKyAgICAgICAgICAgICgnLCUnLCAnMTIzLjQ1Njc4OScsICcxMiwzNDUuNjc4OSUnKSwKKyAgICAgICAgICAgICgnLGUnLCAnMTIzNDU2JywgJzEuMjM0NTZlKzUnKSwKKyAgICAgICAgICAgICgnLEUnLCAnMTIzNDU2JywgJzEuMjM0NTZFKzUnKSwKKworICAgICAgICAgICAgIyBpc3N1ZSA2ODUwCisgICAgICAgICAgICAoJ2E9LTcuMCcsICcwLjEyMzQ1JywgJ2FhYWEwLjEnKSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIGZtdCwgZCwgcmVzdWx0IGluIHRlc3RfdmFsdWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoRGVjaW1hbChkKSwgZm10KSwgcmVzdWx0KQorCisgICAgZGVmIHRlc3Rfbl9mb3JtYXQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gbG9jYWxlIGltcG9ydCBDSEFSX01BWAorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIFNldCB1cCBzb21lIGxvY2FsZWNvbnYtbGlrZSBkaWN0aW9uYXJpZXMKKyAgICAgICAgZW5fVVMgPSB7CisgICAgICAgICAgICAnZGVjaW1hbF9wb2ludCcgOiAnLicsCisgICAgICAgICAgICAnZ3JvdXBpbmcnIDogWzMsIDMsIDBdLAorICAgICAgICAgICAgJ3Rob3VzYW5kc19zZXAnOiAnLCcKKyAgICAgICAgICAgIH0KKworICAgICAgICBmcl9GUiA9IHsKKyAgICAgICAgICAgICdkZWNpbWFsX3BvaW50JyA6ICcsJywKKyAgICAgICAgICAgICdncm91cGluZycgOiBbQ0hBUl9NQVhdLAorICAgICAgICAgICAgJ3Rob3VzYW5kc19zZXAnIDogJycKKyAgICAgICAgICAgIH0KKworICAgICAgICBydV9SVSA9IHsKKyAgICAgICAgICAgICdkZWNpbWFsX3BvaW50JyA6ICcsJywKKyAgICAgICAgICAgICdncm91cGluZycgOiBbMywgMywgMF0sCisgICAgICAgICAgICAndGhvdXNhbmRzX3NlcCcgOiAnICcKKyAgICAgICAgICAgIH0KKworICAgICAgICBjcmF6eSA9IHsKKyAgICAgICAgICAgICdkZWNpbWFsX3BvaW50JyA6ICcmJywKKyAgICAgICAgICAgICdncm91cGluZycgOiBbMSwgNCwgMiwgQ0hBUl9NQVhdLAorICAgICAgICAgICAgJ3Rob3VzYW5kc19zZXAnIDogJy0nCisgICAgICAgICAgICB9CisKKworICAgICAgICBkZWYgZ2V0X2ZtdCh4LCBsb2NhbGUsIGZtdD0nbicpOgorICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwuX19mb3JtYXRfXyhEZWNpbWFsKHgpLCBmbXQsIF9sb2NhbGVjb252PWxvY2FsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoRGVjaW1hbCgnMTIuNycpLCBlbl9VUyksICcxMi43JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KERlY2ltYWwoJzEyLjcnKSwgZnJfRlIpLCAnMTIsNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdChEZWNpbWFsKCcxMi43JyksIHJ1X1JVKSwgJzEyLDcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoRGVjaW1hbCgnMTIuNycpLCBjcmF6eSksICcxLTImNycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1Njc4OSwgZW5fVVMpLCAnMTIzLDQ1Niw3ODknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2Nzg5LCBmcl9GUiksICcxMjM0NTY3ODknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2Nzg5LCBydV9SVSksICcxMjMgNDU2IDc4OScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTY3ODkwMTIzLCBjcmF6eSksICcxMjM0NTYtNzgtOTAxMi0zJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2Nzg5LCBlbl9VUywgJy42bicpLCAnMS4yMzQ1N2UrOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTY3ODksIGZyX0ZSLCAnLjZuJyksICcxLDIzNDU3ZSs4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1Njc4OSwgcnVfUlUsICcuNm4nKSwgJzEsMjM0NTdlKzgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2Nzg5LCBjcmF6eSwgJy42bicpLCAnMSYyMzQ1N2UrOCcpCisKKyAgICAgICAgIyB6ZXJvIHBhZGRpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQsIGZyX0ZSLCAnMDNuJyksICcxMjM0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQsIGZyX0ZSLCAnMDRuJyksICcxMjM0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQsIGZyX0ZSLCAnMDVuJyksICcwMTIzNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0LCBmcl9GUiwgJzA2bicpLCAnMDAxMjM0JykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDUsIGVuX1VTLCAnMDVuJyksICcxMiwzNDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDUsIGVuX1VTLCAnMDZuJyksICcxMiwzNDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDUsIGVuX1VTLCAnMDduJyksICcwMTIsMzQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1LCBlbl9VUywgJzA4bicpLCAnMCwwMTIsMzQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1LCBlbl9VUywgJzA5bicpLCAnMCwwMTIsMzQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1LCBlbl9VUywgJzAxMG4nKSwgJzAwLDAxMiwzNDUnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTYsIGNyYXp5LCAnMDZuJyksICcxLTIzNDUtNicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTYsIGNyYXp5LCAnMDduJyksICcxLTIzNDUtNicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTYsIGNyYXp5LCAnMDhuJyksICcxLTIzNDUtNicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTYsIGNyYXp5LCAnMDluJyksICcwMS0yMzQ1LTYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9mbXQoMTIzNDU2LCBjcmF6eSwgJzAxMG4nKSwgJzAtMDEtMjM0NS02JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1NiwgY3JhenksICcwMTFuJyksICcwLTAxLTIzNDUtNicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2ZtdCgxMjM0NTYsIGNyYXp5LCAnMDEybicpLCAnMDAtMDEtMjM0NS02JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZm10KDEyMzQ1NiwgY3JhenksICcwMTNuJyksICcwMDAtMDEtMjM0NS02JykKKworCitjbGFzcyBEZWNpbWFsQXJpdGhtZXRpY09wZXJhdG9yc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICcnJ1VuaXQgdGVzdHMgZm9yIGFsbCBhcml0aG1ldGljIG9wZXJhdG9ycywgYmluYXJ5IGFuZCB1bmFyeS4nJycKKworICAgIGRlZiB0ZXN0X2FkZGl0aW9uKHNlbGYpOgorCisgICAgICAgIGQxID0gRGVjaW1hbCgnLTExLjEnKQorICAgICAgICBkMiA9IERlY2ltYWwoJzIyLjInKQorCisgICAgICAgICN0d28gRGVjaW1hbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMStkMiwgRGVjaW1hbCgnMTEuMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyK2QxLCBEZWNpbWFsKCcxMS4xJykpCisKKyAgICAgICAgI3dpdGggb3RoZXIgdHlwZSwgbGVmdAorICAgICAgICBjID0gZDEgKyA1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgRGVjaW1hbCgnLTYuMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYyksIHR5cGUoZDEpKQorCisgICAgICAgICN3aXRoIG90aGVyIHR5cGUsIHJpZ2h0CisgICAgICAgIGMgPSA1ICsgZDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBEZWNpbWFsKCctNi4xJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShjKSwgdHlwZShkMSkpCisKKyAgICAgICAgI2lubGluZSB3aXRoIGRlY2ltYWwKKyAgICAgICAgZDEgKz0gZDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSwgRGVjaW1hbCgnMTEuMScpKQorCisgICAgICAgICNpbmxpbmUgd2l0aCBvdGhlciB0eXBlCisgICAgICAgIGQxICs9IDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSwgRGVjaW1hbCgnMTYuMScpKQorCisgICAgZGVmIHRlc3Rfc3VidHJhY3Rpb24oc2VsZik6CisKKyAgICAgICAgZDEgPSBEZWNpbWFsKCctMTEuMScpCisgICAgICAgIGQyID0gRGVjaW1hbCgnMjIuMicpCisKKyAgICAgICAgI3R3byBEZWNpbWFscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLWQyLCBEZWNpbWFsKCctMzMuMycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLWQxLCBEZWNpbWFsKCczMy4zJykpCisKKyAgICAgICAgI3dpdGggb3RoZXIgdHlwZSwgbGVmdAorICAgICAgICBjID0gZDEgLSA1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgRGVjaW1hbCgnLTE2LjEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGMpLCB0eXBlKGQxKSkKKworICAgICAgICAjd2l0aCBvdGhlciB0eXBlLCByaWdodAorICAgICAgICBjID0gNSAtIGQxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgRGVjaW1hbCgnMTYuMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYyksIHR5cGUoZDEpKQorCisgICAgICAgICNpbmxpbmUgd2l0aCBkZWNpbWFsCisgICAgICAgIGQxIC09IGQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIERlY2ltYWwoJy0zMy4zJykpCisKKyAgICAgICAgI2lubGluZSB3aXRoIG90aGVyIHR5cGUKKyAgICAgICAgZDEgLT0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLCBEZWNpbWFsKCctMzguMycpKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGljYXRpb24oc2VsZik6CisKKyAgICAgICAgZDEgPSBEZWNpbWFsKCctNScpCisgICAgICAgIGQyID0gRGVjaW1hbCgnMycpCisKKyAgICAgICAgI3R3byBEZWNpbWFscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxKmQyLCBEZWNpbWFsKCctMTUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMipkMSwgRGVjaW1hbCgnLTE1JykpCisKKyAgICAgICAgI3dpdGggb3RoZXIgdHlwZSwgbGVmdAorICAgICAgICBjID0gZDEgKiA1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgRGVjaW1hbCgnLTI1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShjKSwgdHlwZShkMSkpCisKKyAgICAgICAgI3dpdGggb3RoZXIgdHlwZSwgcmlnaHQKKyAgICAgICAgYyA9IDUgKiBkMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIERlY2ltYWwoJy0yNScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYyksIHR5cGUoZDEpKQorCisgICAgICAgICNpbmxpbmUgd2l0aCBkZWNpbWFsCisgICAgICAgIGQxICo9IGQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIERlY2ltYWwoJy0xNScpKQorCisgICAgICAgICNpbmxpbmUgd2l0aCBvdGhlciB0eXBlCisgICAgICAgIGQxICo9IDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSwgRGVjaW1hbCgnLTc1JykpCisKKyAgICBkZWYgdGVzdF9kaXZpc2lvbihzZWxmKToKKworICAgICAgICBkMSA9IERlY2ltYWwoJy01JykKKyAgICAgICAgZDIgPSBEZWNpbWFsKCcyJykKKworICAgICAgICAjdHdvIERlY2ltYWxzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEvZDIsIERlY2ltYWwoJy0yLjUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi9kMSwgRGVjaW1hbCgnLTAuNCcpKQorCisgICAgICAgICN3aXRoIG90aGVyIHR5cGUsIGxlZnQKKyAgICAgICAgYyA9IGQxIC8gNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIERlY2ltYWwoJy0xLjI1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShjKSwgdHlwZShkMSkpCisKKyAgICAgICAgI3dpdGggb3RoZXIgdHlwZSwgcmlnaHQKKyAgICAgICAgYyA9IDQgLyBkMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIERlY2ltYWwoJy0wLjgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGMpLCB0eXBlKGQxKSkKKworICAgICAgICAjaW5saW5lIHdpdGggZGVjaW1hbAorICAgICAgICBkMSAvPSBkMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLCBEZWNpbWFsKCctMi41JykpCisKKyAgICAgICAgI2lubGluZSB3aXRoIG90aGVyIHR5cGUKKyAgICAgICAgZDEgLz0gNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLCBEZWNpbWFsKCctMC42MjUnKSkKKworICAgIGRlZiB0ZXN0X2Zsb29yX2RpdmlzaW9uKHNlbGYpOgorCisgICAgICAgIGQxID0gRGVjaW1hbCgnNScpCisgICAgICAgIGQyID0gRGVjaW1hbCgnMicpCisKKyAgICAgICAgI3R3byBEZWNpbWFscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLy9kMiwgRGVjaW1hbCgnMicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLy9kMSwgRGVjaW1hbCgnMCcpKQorCisgICAgICAgICN3aXRoIG90aGVyIHR5cGUsIGxlZnQKKyAgICAgICAgYyA9IGQxIC8vIDQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBEZWNpbWFsKCcxJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShjKSwgdHlwZShkMSkpCisKKyAgICAgICAgI3dpdGggb3RoZXIgdHlwZSwgcmlnaHQKKyAgICAgICAgYyA9IDcgLy8gZDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBEZWNpbWFsKCcxJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShjKSwgdHlwZShkMSkpCisKKyAgICAgICAgI2lubGluZSB3aXRoIGRlY2ltYWwKKyAgICAgICAgZDEgLy89IGQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIERlY2ltYWwoJzInKSkKKworICAgICAgICAjaW5saW5lIHdpdGggb3RoZXIgdHlwZQorICAgICAgICBkMSAvLz0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLCBEZWNpbWFsKCcxJykpCisKKyAgICBkZWYgdGVzdF9wb3dlcmluZyhzZWxmKToKKworICAgICAgICBkMSA9IERlY2ltYWwoJzUnKQorICAgICAgICBkMiA9IERlY2ltYWwoJzInKQorCisgICAgICAgICN0d28gRGVjaW1hbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSoqZDIsIERlY2ltYWwoJzI1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIqKmQxLCBEZWNpbWFsKCczMicpKQorCisgICAgICAgICN3aXRoIG90aGVyIHR5cGUsIGxlZnQKKyAgICAgICAgYyA9IGQxICoqIDQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBEZWNpbWFsKCc2MjUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGMpLCB0eXBlKGQxKSkKKworICAgICAgICAjd2l0aCBvdGhlciB0eXBlLCByaWdodAorICAgICAgICBjID0gNyAqKiBkMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIERlY2ltYWwoJzE2ODA3JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShjKSwgdHlwZShkMSkpCisKKyAgICAgICAgI2lubGluZSB3aXRoIGRlY2ltYWwKKyAgICAgICAgZDEgKio9IGQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIERlY2ltYWwoJzI1JykpCisKKyAgICAgICAgI2lubGluZSB3aXRoIG90aGVyIHR5cGUKKyAgICAgICAgZDEgKio9IDQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSwgRGVjaW1hbCgnMzkwNjI1JykpCisKKyAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CisKKyAgICAgICAgZDEgPSBEZWNpbWFsKCc1JykKKyAgICAgICAgZDIgPSBEZWNpbWFsKCcyJykKKworICAgICAgICAjdHdvIERlY2ltYWxzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDElZDIsIERlY2ltYWwoJzEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMiVkMSwgRGVjaW1hbCgnMicpKQorCisgICAgICAgICN3aXRoIG90aGVyIHR5cGUsIGxlZnQKKyAgICAgICAgYyA9IGQxICUgNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIERlY2ltYWwoJzEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGMpLCB0eXBlKGQxKSkKKworICAgICAgICAjd2l0aCBvdGhlciB0eXBlLCByaWdodAorICAgICAgICBjID0gNyAlIGQxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgRGVjaW1hbCgnMicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYyksIHR5cGUoZDEpKQorCisgICAgICAgICNpbmxpbmUgd2l0aCBkZWNpbWFsCisgICAgICAgIGQxICU9IGQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIERlY2ltYWwoJzEnKSkKKworICAgICAgICAjaW5saW5lIHdpdGggb3RoZXIgdHlwZQorICAgICAgICBkMSAlPSA0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIERlY2ltYWwoJzEnKSkKKworICAgIGRlZiB0ZXN0X2Zsb29yX2Rpdl9tb2R1bGUoc2VsZik6CisKKyAgICAgICAgZDEgPSBEZWNpbWFsKCc1JykKKyAgICAgICAgZDIgPSBEZWNpbWFsKCcyJykKKworICAgICAgICAjdHdvIERlY2ltYWxzCisgICAgICAgIChwLCBxKSA9IGRpdm1vZChkMSwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgRGVjaW1hbCgnMicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEsIERlY2ltYWwoJzEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHApLCB0eXBlKGQxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHEpLCB0eXBlKGQxKSkKKworICAgICAgICAjd2l0aCBvdGhlciB0eXBlLCBsZWZ0CisgICAgICAgIChwLCBxKSA9IGRpdm1vZChkMSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBEZWNpbWFsKCcxJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocSwgRGVjaW1hbCgnMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocCksIHR5cGUoZDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocSksIHR5cGUoZDEpKQorCisgICAgICAgICN3aXRoIG90aGVyIHR5cGUsIHJpZ2h0CisgICAgICAgIChwLCBxKSA9IGRpdm1vZCg3LCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBEZWNpbWFsKCcxJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocSwgRGVjaW1hbCgnMicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocCksIHR5cGUoZDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocSksIHR5cGUoZDEpKQorCisgICAgZGVmIHRlc3RfdW5hcnlfb3BlcmF0b3JzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCtEZWNpbWFsKDQ1KSwgRGVjaW1hbCgrNDUpKSAgICAgICAgICAgIyAgKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1EZWNpbWFsKDQ1KSwgRGVjaW1hbCgtNDUpKSAgICAgICAgICAgIyAgLQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhEZWNpbWFsKDQ1KSksIGFicyhEZWNpbWFsKC00NSkpKSAgIyBhYnMKKworICAgIGRlZiB0ZXN0X25hbl9jb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgIyBjb21wYXJpc29ucyBpbnZvbHZpbmcgc2lnbmFsaW5nIG5hbnMgc2lnbmFsIEludmFsaWRPcGVyYXRpb24KKworICAgICAgICAjIG9yZGVyIGNvbXBhcmlzb25zICg8LCA8PSwgPiwgPj0pIGludm9sdmluZyBvbmx5IHF1aWV0IG5hbnMKKyAgICAgICAgIyBhbHNvIHNpZ25hbCBJbnZhbGlkT3BlcmF0aW9uCisKKyAgICAgICAgIyBlcXVhbGl0eSBjb21wYXJpc29ucyAoPT0sICE9KSBpbnZvbHZpbmcgb25seSBxdWlldCBuYW5zCisgICAgICAgICMgZG9uJ3Qgc2lnbmFsLCBidXQgcmV0dXJuIEZhbHNlIG9yIFRydWUgcmVzcGVjdGl2ZWx5LgorCisgICAgICAgIG4gPSBEZWNpbWFsKCdOYU4nKQorICAgICAgICBzID0gRGVjaW1hbCgnc05hTicpCisgICAgICAgIGkgPSBEZWNpbWFsKCdJbmYnKQorICAgICAgICBmID0gRGVjaW1hbCgnMicpCisKKyAgICAgICAgcW5hbl9wYWlycyA9IChuLCBuKSwgKG4sIGkpLCAoaSwgbiksIChuLCBmKSwgKGYsIG4pCisgICAgICAgIHNuYW5fcGFpcnMgPSAocywgbiksIChuLCBzKSwgKHMsIGkpLCAoaSwgcyksIChzLCBmKSwgKGYsIHMpLCAocywgcykKKyAgICAgICAgb3JkZXJfb3BzID0gb3BlcmF0b3IubHQsIG9wZXJhdG9yLmxlLCBvcGVyYXRvci5ndCwgb3BlcmF0b3IuZ2UKKyAgICAgICAgZXF1YWxpdHlfb3BzID0gb3BlcmF0b3IuZXEsIG9wZXJhdG9yLm5lCisKKyAgICAgICAgIyByZXN1bHRzIHdoZW4gSW52YWxpZE9wZXJhdGlvbiBpcyBub3QgdHJhcHBlZAorICAgICAgICBmb3IgeCwgeSBpbiBxbmFuX3BhaXJzICsgc25hbl9wYWlyczoKKyAgICAgICAgICAgIGZvciBvcCBpbiBvcmRlcl9vcHMgKyBlcXVhbGl0eV9vcHM6CisgICAgICAgICAgICAgICAgZ290ID0gb3AoeCwgeSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IFRydWUgaWYgb3AgaXMgb3BlcmF0b3IubmUgZWxzZSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhwZWN0ZWQsIGdvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCB7MCFyfSBmb3Igb3BlcmF0b3IuezF9KHsyIXJ9LCB7MyFyfSk7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnb3QgezQhcn0iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLCBvcC5fX25hbWVfXywgeCwgeSwgZ290KSkKKworICAgICAgICAjIHJlcGVhdCB0aGUgYWJvdmUsIGJ1dCB0aGlzIHRpbWUgdHJhcCB0aGUgSW52YWxpZE9wZXJhdGlvbgorICAgICAgICB3aXRoIGxvY2FsY29udGV4dCgpIGFzIGN0eDoKKyAgICAgICAgICAgIGN0eC50cmFwc1tJbnZhbGlkT3BlcmF0aW9uXSA9IDEKKworICAgICAgICAgICAgZm9yIHgsIHkgaW4gcW5hbl9wYWlyczoKKyAgICAgICAgICAgICAgICBmb3Igb3AgaW4gZXF1YWxpdHlfb3BzOgorICAgICAgICAgICAgICAgICAgICBnb3QgPSBvcCh4LCB5KQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IFRydWUgaWYgb3AgaXMgb3BlcmF0b3IubmUgZWxzZSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGV4cGVjdGVkLCBnb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHswIXJ9IGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJhdG9yLnsxfSh7MiFyfSwgezMhcn0pOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdvdCB7NCFyfSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLCBvcC5fX25hbWVfXywgeCwgeSwgZ290KSkKKworICAgICAgICAgICAgZm9yIHgsIHkgaW4gc25hbl9wYWlyczoKKyAgICAgICAgICAgICAgICBmb3Igb3AgaW4gZXF1YWxpdHlfb3BzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbnZhbGlkT3BlcmF0aW9uLCBvcGVyYXRvci5lcSwgeCwgeSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW52YWxpZE9wZXJhdGlvbiwgb3BlcmF0b3IubmUsIHgsIHkpCisKKyAgICAgICAgICAgIGZvciB4LCB5IGluIHFuYW5fcGFpcnMgKyBzbmFuX3BhaXJzOgorICAgICAgICAgICAgICAgIGZvciBvcCBpbiBvcmRlcl9vcHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEludmFsaWRPcGVyYXRpb24sIG9wLCB4LCB5KQorCisgICAgZGVmIHRlc3RfY29weV9zaWduKHNlbGYpOgorICAgICAgICBkID0gRGVjaW1hbCgxKS5jb3B5X3NpZ24oRGVjaW1hbCgtMikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDEpLmNvcHlfc2lnbigtMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRGVjaW1hbCgxKS5jb3B5X3NpZ24sICctMicpCisKKyMgVGhlIGZvbGxvd2luZyBhcmUgdHdvIGZ1bmN0aW9ucyB1c2VkIHRvIHRlc3QgdGhyZWFkaW5nIGluIHRoZSBuZXh0IGNsYXNzCisKK2RlZiB0aGZ1bmMxKGNscyk6CisgICAgZDEgPSBEZWNpbWFsKDEpCisgICAgZDMgPSBEZWNpbWFsKDMpCisgICAgdGVzdDEgPSBkMS9kMworICAgIGNscy5zeW5jaHJvLndhaXQoKQorICAgIHRlc3QyID0gZDEvZDMKKyAgICBjbHMuZmluaXNoMS5zZXQoKQorCisgICAgY2xzLmFzc2VydEVxdWFsKHRlc3QxLCBEZWNpbWFsKCcwLjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMnKSkKKyAgICBjbHMuYXNzZXJ0RXF1YWwodGVzdDIsIERlY2ltYWwoJzAuMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMycpKQorICAgIHJldHVybgorCitkZWYgdGhmdW5jMihjbHMpOgorICAgIGQxID0gRGVjaW1hbCgxKQorICAgIGQzID0gRGVjaW1hbCgzKQorICAgIHRlc3QxID0gZDEvZDMKKyAgICB0aGlzY29udGV4dCA9IGdldGNvbnRleHQoKQorICAgIHRoaXNjb250ZXh0LnByZWMgPSAxOAorICAgIHRlc3QyID0gZDEvZDMKKyAgICBjbHMuc3luY2hyby5zZXQoKQorICAgIGNscy5maW5pc2gyLnNldCgpCisKKyAgICBjbHMuYXNzZXJ0RXF1YWwodGVzdDEsIERlY2ltYWwoJzAuMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMycpKQorICAgIGNscy5hc3NlcnRFcXVhbCh0ZXN0MiwgRGVjaW1hbCgnMC4zMzMzMzMzMzMzMzMzMzMzMzMnKSkKKyAgICByZXR1cm4KKworCitjbGFzcyBEZWNpbWFsVXNlT2ZDb250ZXh0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgJycnVW5pdCB0ZXN0cyBmb3IgVXNlIG9mIENvbnRleHQgY2FzZXMgaW4gRGVjaW1hbC4nJycKKworICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHRocmVhZGluZworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgdGhyZWFkaW5nID0gTm9uZQorCisgICAgIyBUYWtlIGNhcmUgZXhlY3V0aW5nIHRoaXMgdGVzdCBmcm9tIElETEUsIHRoZXJlJ3MgYW4gaXNzdWUgaW4gdGhyZWFkaW5nCisgICAgIyB0aGF0IGhhbmdzIElETEUgYW5kIEkgY291bGRuJ3QgZmluZCBpdAorCisgICAgZGVmIHRlc3RfdGhyZWFkaW5nKHNlbGYpOgorICAgICAgICAjVGVzdCB0aGUgInRocmVhZGluZyBpc29sYXRpb24iIG9mIGEgQ29udGV4dC4KKworICAgICAgICBzZWxmLnN5bmNocm8gPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLmZpbmlzaDEgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLmZpbmlzaDIgPSB0aHJlYWRpbmcuRXZlbnQoKQorCisgICAgICAgIHRoMSA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXRoZnVuYzEsIGFyZ3M9KHNlbGYsKSkKKyAgICAgICAgdGgyID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9dGhmdW5jMiwgYXJncz0oc2VsZiwpKQorCisgICAgICAgIHRoMS5zdGFydCgpCisgICAgICAgIHRoMi5zdGFydCgpCisKKyAgICAgICAgc2VsZi5maW5pc2gxLndhaXQoKQorICAgICAgICBzZWxmLmZpbmlzaDIud2FpdCgpCisgICAgICAgIHJldHVybgorCisgICAgaWYgdGhyZWFkaW5nIGlzIE5vbmU6CisgICAgICAgIGRlbCB0ZXN0X3RocmVhZGluZworCisKK2NsYXNzIERlY2ltYWxVc2FiaWxpdHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAnJydVbml0IHRlc3RzIGZvciBVc2FiaWxpdHkgY2FzZXMgb2YgRGVjaW1hbC4nJycKKworICAgIGRlZiB0ZXN0X2NvbXBhcmlzb25fb3BlcmF0b3JzKHNlbGYpOgorCisgICAgICAgIGRhID0gRGVjaW1hbCgnMjMuNDInKQorICAgICAgICBkYiA9IERlY2ltYWwoJzIzLjQyJykKKyAgICAgICAgZGMgPSBEZWNpbWFsKCc0NScpCisKKyAgICAgICAgI3R3byBEZWNpbWFscworICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoZGMsIGRhKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChkYywgZGEpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhkYSwgZGMpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGRhLCBkYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYSwgZGIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGEsIGRjKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChkYSwgZGIpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGRhLCBkYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoZGMsZGEpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChkYSxkYyksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChkYSxkYiksIDApCisKKyAgICAgICAgI2EgRGVjaW1hbCBhbmQgYW4gaW50CisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihkYywgMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcygyMywgZGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGMsIDQ1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChkYywyMyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKDIzLGRjKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKGRjLDQ1KSwgMCkKKworICAgICAgICAjYSBEZWNpbWFsIGFuZCB1bmNvbXBhcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYSwgJ3VnbHknKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRhLCAzMi43KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRhLCBvYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYSwgb2JqZWN0KQorCisgICAgICAgICMgc29ydGFibGUKKyAgICAgICAgYSA9IG1hcChEZWNpbWFsLCB4cmFuZ2UoMTAwKSkKKyAgICAgICAgYiA9ICBhWzpdCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGEpCisgICAgICAgIGEuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKworICAgICAgICAjIHdpdGggTm9uZQorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRGVjaW1hbCgxKSA8IE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoRGVjaW1hbCgxKSA+IE5vbmUpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX2Zsb2F0X2NvbXBhcmlzb24oc2VsZik6CisgICAgICAgIGRhID0gRGVjaW1hbCgnMC4yNScpCisgICAgICAgIGRiID0gRGVjaW1hbCgnMy4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGRhLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGRhLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihkYiwgMC4yNSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZGIsIDAuMjUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGEsIDEuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYSwgMC4yNSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKDMuMCwgZGEpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKDMuMCwgZGEpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcygwLjI1LCBkYikKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoMC4yNSwgZGIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoMC4yNSwgZGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMy4wLCBkYikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgwLjEsIERlY2ltYWwoJzAuMScpKQorCisgICAgZGVmIHRlc3RfY29weV9hbmRfZGVlcGNvcHlfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgZCA9IERlY2ltYWwoJzQzLjI0JykKKyAgICAgICAgYyA9IGNvcHkuY29weShkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKGMpLCBpZChkKSkKKyAgICAgICAgZGMgPSBjb3B5LmRlZXBjb3B5KGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQoZGMpLCBpZChkKSkKKworICAgIGRlZiB0ZXN0X2hhc2hfbWV0aG9kKHNlbGYpOgorICAgICAgICAjanVzdCB0aGF0IGl0J3MgaGFzaGFibGUKKyAgICAgICAgaGFzaChEZWNpbWFsKDIzKSkKKyAgICAgICAgaGFzaChEZWNpbWFsKCdJbmZpbml0eScpKQorICAgICAgICBoYXNoKERlY2ltYWwoJy1JbmZpbml0eScpKQorICAgICAgICBoYXNoKERlY2ltYWwoJ25hbjEyMycpKQorICAgICAgICBoYXNoKERlY2ltYWwoJy1OYU4nKSkKKworICAgICAgICB0ZXN0X3ZhbHVlcyA9IFtEZWNpbWFsKHNpZ24qKDIqKm0gKyBuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIG0gaW4gWzAsIDE0LCAxNSwgMTYsIDE3LCAzMCwgMzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwgMzMsIDYyLCA2MywgNjQsIDY1LCA2Nl0KKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIG4gaW4gcmFuZ2UoLTEwLCAxMCkKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIHNpZ24gaW4gWy0xLCAxXV0KKyAgICAgICAgdGVzdF92YWx1ZXMuZXh0ZW5kKFsKKyAgICAgICAgICAgICAgICBEZWNpbWFsKCItMCIpLCAjIHplcm9zCisgICAgICAgICAgICAgICAgRGVjaW1hbCgiMC4wMCIpLAorICAgICAgICAgICAgICAgIERlY2ltYWwoIi0wLjAwMCIpLAorICAgICAgICAgICAgICAgIERlY2ltYWwoIjBFMTAiKSwKKyAgICAgICAgICAgICAgICBEZWNpbWFsKCItMEUxMiIpLAorICAgICAgICAgICAgICAgIERlY2ltYWwoIjEwLjAiKSwgIyBuZWdhdGl2ZSBleHBvbmVudAorICAgICAgICAgICAgICAgIERlY2ltYWwoIi0yMy4wMDAwMCIpLAorICAgICAgICAgICAgICAgIERlY2ltYWwoIjEyMzBFMTAwIiksICMgcG9zaXRpdmUgZXhwb25lbnQKKyAgICAgICAgICAgICAgICBEZWNpbWFsKCItNC41Njc4RTUwIiksCisgICAgICAgICAgICAgICAgIyBhIHZhbHVlIGZvciB3aGljaCBoYXNoKG4pICE9IGhhc2gobiAlICgyKio2NC0xKSkKKyAgICAgICAgICAgICAgICAjIGluIFB5dGhvbiBwcmUtMi42CisgICAgICAgICAgICAgICAgRGVjaW1hbCgyKio2NCArIDIqKjMyIC0gMSksCisgICAgICAgICAgICAgICAgIyBzZWxlY3Rpb24gb2YgdmFsdWVzIHdoaWNoIGZhaWwgd2l0aCB0aGUgb2xkIChiZWZvcmUKKyAgICAgICAgICAgICAgICAjIHZlcnNpb24gMi42KSBsb25nLl9faGFzaF9fCisgICAgICAgICAgICAgICAgRGVjaW1hbCgiMS42MzRFMTAwIiksCisgICAgICAgICAgICAgICAgRGVjaW1hbCgiOTAuNjk3RTEwMCIpLAorICAgICAgICAgICAgICAgIERlY2ltYWwoIjE4OC44M0UxMDAiKSwKKyAgICAgICAgICAgICAgICBEZWNpbWFsKCIxNjUyLjlFMTAwIiksCisgICAgICAgICAgICAgICAgRGVjaW1hbCgiNTY1MzFFMTAwIiksCisgICAgICAgICAgICAgICAgXSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgaGFzaChkKSA9PSBoYXNoKGludChkKSkgZm9yIGludGVncmFsIHZhbHVlcworICAgICAgICBmb3IgdmFsdWUgaW4gdGVzdF92YWx1ZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godmFsdWUpLCBoYXNoKGludCh2YWx1ZSkpKQorCisgICAgICAgICN0aGUgc2FtZSBoYXNoIHRoYXQgdG8gYW4gaW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChEZWNpbWFsKDIzKSksIGhhc2goMjMpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIERlY2ltYWwoJ3NOYU4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2goRGVjaW1hbCgnSW5mJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzaChEZWNpbWFsKCctSW5mJykpKQorCisgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgaGFzaGVzIG9mIGEgRGVjaW1hbCBmbG9hdCBtYXRjaCB3aGVuIHRoZXkKKyAgICAgICAgIyByZXByZXNlbnQgZXhhY3RseSB0aGUgc2FtZSB2YWx1ZXMKKyAgICAgICAgdGVzdF9zdHJpbmdzID0gWydpbmYnLCAnLUluZicsICcwLjAnLCAnLS4wZTEnLAorICAgICAgICAgICAgICAgICAgICAgICAgJzM0LjAnLCAnMi41JywgJzExMjM5MC42MjUnLCAnLTAuNTE1NjI1J10KKyAgICAgICAgZm9yIHMgaW4gdGVzdF9zdHJpbmdzOgorICAgICAgICAgICAgZiA9IGZsb2F0KHMpCisgICAgICAgICAgICBkID0gRGVjaW1hbChzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGYpLCBoYXNoKGQpKQorCisgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIGhhc2ggZG9lc24ndCBkZXBlbmQgb24gdGhlCisgICAgICAgICMgY3VycmVudCBjb250ZXh0IChpc3N1ZSAjMTc1NykKKyAgICAgICAgYyA9IGdldGNvbnRleHQoKQorICAgICAgICBvbGRfcHJlY2lzaW9uID0gYy5wcmVjCisgICAgICAgIHggPSBEZWNpbWFsKCIxMjM0NTY3ODkuMSIpCisKKyAgICAgICAgYy5wcmVjID0gNgorICAgICAgICBoMSA9IGhhc2goeCkKKyAgICAgICAgYy5wcmVjID0gMTAKKyAgICAgICAgaDIgPSBoYXNoKHgpCisgICAgICAgIGMucHJlYyA9IDE2CisgICAgICAgIGgzID0gaGFzaCh4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDEsIGgyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgxLCBoMykKKyAgICAgICAgYy5wcmVjID0gb2xkX3ByZWNpc2lvbgorCisgICAgZGVmIHRlc3RfbWluX2FuZF9tYXhfbWV0aG9kcyhzZWxmKToKKworICAgICAgICBkMSA9IERlY2ltYWwoJzE1LjMyJykKKyAgICAgICAgZDIgPSBEZWNpbWFsKCcyOC41JykKKyAgICAgICAgbDEgPSAxNQorICAgICAgICBsMiA9IDI4CisKKyAgICAgICAgI2JldHdlZW4gRGVjaW1hbHMKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtaW4oZDEsZDIpLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtaW4oZDIsZDEpLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtYXgoZDEsZDIpLCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtYXgoZDIsZDEpLCBkMikKKworICAgICAgICAjYmV0d2VlbiBEZWNpbWFsIGFuZCBsb25nCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobWluKGQxLGwyKSwgZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobWluKGwyLGQxKSwgZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobWF4KGwxLGQyKSwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobWF4KGQyLGwxKSwgZDIpCisKKyAgICBkZWYgdGVzdF9hc19ub256ZXJvKHNlbGYpOgorICAgICAgICAjYXMgZmFsc2UKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShEZWNpbWFsKDApKQorICAgICAgICAjYXMgdHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRGVjaW1hbCgnMC4zNzInKSkKKworICAgIGRlZiB0ZXN0X3Rvc3RyaW5nX21ldGhvZHMoc2VsZik6CisgICAgICAgICNUZXN0IHN0ciBhbmQgcmVwciBtZXRob2RzLgorCisgICAgICAgIGQgPSBEZWNpbWFsKCcxNS4zMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQpLCAnMTUuMzInKSAgICAgICAgICAgICAgICMgc3RyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihkKSwgIkRlY2ltYWwoJzE1LjMyJykiKSAgICMgcmVwcgorCisgICAgICAgICMgcmVzdWx0IHR5cGUgb2Ygc3RyaW5nIG1ldGhvZHMgc2hvdWxkIGJlIHN0ciwgbm90IHVuaWNvZGUKKyAgICAgICAgdW5pY29kZV9pbnB1dHMgPSBbdScxMjMuNCcsIHUnMC41RTInLCB1J0luZmluaXR5JywgdSdzTmFOJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdSctMC4wRTEwMCcsIHUnLU5hTjAwMScsIHUnLUluZiddCisKKyAgICAgICAgZm9yIHUgaW4gdW5pY29kZV9pbnB1dHM6CisgICAgICAgICAgICBkID0gRGVjaW1hbCh1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHN0cihkKSksIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXByKGQpKSwgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGQudG9fZW5nX3N0cmluZygpKSwgc3RyKQorCisgICAgZGVmIHRlc3RfdG9udW1fbWV0aG9kcyhzZWxmKToKKyAgICAgICAgI1Rlc3QgZmxvYXQsIGludCBhbmQgbG9uZyBtZXRob2RzLgorCisgICAgICAgIGQxID0gRGVjaW1hbCgnNjYnKQorICAgICAgICBkMiA9IERlY2ltYWwoJzE1LjMyJykKKworICAgICAgICAjaW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGQxKSwgNjYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGQyKSwgMTUpCisKKyAgICAgICAgI2xvbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKGQxKSwgNjYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhkMiksIDE1KQorCisgICAgICAgICNmbG9hdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KGQxKSwgNjYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoZDIpLCAxNS4zMikKKworICAgIGRlZiB0ZXN0X25hbl90b19mbG9hdChzZWxmKToKKyAgICAgICAgIyBUZXN0IGNvbnZlcnNpb25zIG9mIGRlY2ltYWwgTkFOcyB0byBmbG9hdC4KKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE1NTQ0CisgICAgICAgIGZvciBzIGluICgnbmFuJywgJ25hbjEyMzQnLCAnLW5hbicsICctbmFuMjQ2OCcpOgorICAgICAgICAgICAgZiA9IGZsb2F0KERlY2ltYWwocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihmKSkKKworICAgIGRlZiB0ZXN0X3NuYW5fdG9fZmxvYXQoc2VsZik6CisgICAgICAgIGZvciBzIGluICgnc25hbicsICctc25hbicsICdzbmFuMTM1NycsICctc25hbjEyMzQnKToKKyAgICAgICAgICAgIGQgPSBEZWNpbWFsKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgZCkKKworICAgIGRlZiB0ZXN0X2V2YWxfcm91bmRfdHJpcChzZWxmKToKKworICAgICAgICAjd2l0aCB6ZXJvCisgICAgICAgIGQgPSBEZWNpbWFsKCAoMCwgKDAsKSwgMCkgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGV2YWwocmVwcihkKSkpCisKKyAgICAgICAgI2ludAorICAgICAgICBkID0gRGVjaW1hbCggKDEsICg0LCA1KSwgMCkgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGV2YWwocmVwcihkKSkpCisKKyAgICAgICAgI2Zsb2F0CisgICAgICAgIGQgPSBEZWNpbWFsKCAoMCwgKDQsIDUsIDMsIDQpLCAtMikgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGV2YWwocmVwcihkKSkpCisKKyAgICAgICAgI3dlaXJkCisgICAgICAgIGQgPSBEZWNpbWFsKCAoMSwgKDQsIDMsIDQsIDksIDEsIDMsIDUsIDMsIDQpLCAtMjUpICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBldmFsKHJlcHIoZCkpKQorCisgICAgZGVmIHRlc3RfYXNfdHVwbGUoc2VsZik6CisKKyAgICAgICAgI3dpdGggemVybworICAgICAgICBkID0gRGVjaW1hbCgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYXNfdHVwbGUoKSwgKDAsICgwLCksIDApICkKKworICAgICAgICAjaW50CisgICAgICAgIGQgPSBEZWNpbWFsKC00NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmFzX3R1cGxlKCksICgxLCAoNCwgNSksIDApICkKKworICAgICAgICAjY29tcGxpY2F0ZWQgc3RyaW5nCisgICAgICAgIGQgPSBEZWNpbWFsKCItNC4zNDkxMzUzNEUtMTciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYXNfdHVwbGUoKSwgKDEsICg0LCAzLCA0LCA5LCAxLCAzLCA1LCAzLCA0KSwgLTI1KSApCisKKyAgICAgICAgI2luZgorICAgICAgICBkID0gRGVjaW1hbCgiSW5maW5pdHkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYXNfdHVwbGUoKSwgKDAsICgwLCksICdGJykgKQorCisgICAgICAgICNsZWFkaW5nIHplcm9zIGluIGNvZWZmaWNpZW50IHNob3VsZCBiZSBzdHJpcHBlZAorICAgICAgICBkID0gRGVjaW1hbCggKDAsICgwLCAwLCA0LCAwLCA1LCAzLCA0KSwgLTIpICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmFzX3R1cGxlKCksICgwLCAoNCwgMCwgNSwgMywgNCksIC0yKSApCisgICAgICAgIGQgPSBEZWNpbWFsKCAoMSwgKDAsIDAsIDApLCAzNykgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYXNfdHVwbGUoKSwgKDEsICgwLCksIDM3KSkKKyAgICAgICAgZCA9IERlY2ltYWwoICgxLCAoKSwgMzcpICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmFzX3R1cGxlKCksICgxLCAoMCwpLCAzNykpCisKKyAgICAgICAgI2xlYWRpbmcgemVyb3MgaW4gTmFOIGRpYWdub3N0aWMgaW5mbyBzaG91bGQgYmUgc3RyaXBwZWQKKyAgICAgICAgZCA9IERlY2ltYWwoICgwLCAoMCwgMCwgNCwgMCwgNSwgMywgNCksICduJykgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYXNfdHVwbGUoKSwgKDAsICg0LCAwLCA1LCAzLCA0KSwgJ24nKSApCisgICAgICAgIGQgPSBEZWNpbWFsKCAoMSwgKDAsIDAsIDApLCAnTicpICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmFzX3R1cGxlKCksICgxLCAoKSwgJ04nKSApCisgICAgICAgIGQgPSBEZWNpbWFsKCAoMSwgKCksICduJykgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYXNfdHVwbGUoKSwgKDEsICgpLCAnbicpICkKKworICAgICAgICAjY29lZmZpY2llbnQgaW4gaW5maW5pdHkgc2hvdWxkIGJlIGlnbm9yZWQKKyAgICAgICAgZCA9IERlY2ltYWwoICgwLCAoNCwgNSwgMywgNCksICdGJykgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYXNfdHVwbGUoKSwgKDAsICgwLCksICdGJykpCisgICAgICAgIGQgPSBEZWNpbWFsKCAoMSwgKDAsIDIsIDcsIDEpLCAnRicpICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmFzX3R1cGxlKCksICgxLCAoMCwpLCAnRicpKQorCisgICAgZGVmIHRlc3RfaW1tdXRhYmlsaXR5X29wZXJhdGlvbnMoc2VsZik6CisgICAgICAgICMgRG8gb3BlcmF0aW9ucyBhbmQgY2hlY2sgdGhhdCBpdCBkaWRuJ3QgY2hhbmdlIGNoYW5nZSBpbnRlcm5hbCBvYmplY3RzLgorCisgICAgICAgIGQxID0gRGVjaW1hbCgnLTI1ZTU1JykKKyAgICAgICAgYjEgPSBEZWNpbWFsKCctMjVlNTUnKQorICAgICAgICBkMiA9IERlY2ltYWwoJzMzZSszMycpCisgICAgICAgIGIyID0gRGVjaW1hbCgnMzNlKzMzJykKKworICAgICAgICBkZWYgY2hlY2tTYW1lRGVjKG9wZXJhdGlvbiwgdXNlT3RoZXI9RmFsc2UpOgorICAgICAgICAgICAgaWYgdXNlT3RoZXI6CisgICAgICAgICAgICAgICAgZXZhbCgiZDEuIiArIG9wZXJhdGlvbiArICIoZDIpIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLl9zaWduLCBiMS5fc2lnbikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLl9pbnQsIGIxLl9pbnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5fZXhwLCBiMS5fZXhwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIuX3NpZ24sIGIyLl9zaWduKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIuX2ludCwgYjIuX2ludCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLl9leHAsIGIyLl9leHApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGV2YWwoImQxLiIgKyBvcGVyYXRpb24gKyAiKCkiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuX3NpZ24sIGIxLl9zaWduKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuX2ludCwgYjEuX2ludCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLl9leHAsIGIxLl9leHApCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBEZWNpbWFsKGQxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLl9zaWduLCBiMS5fc2lnbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5faW50LCBiMS5faW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLl9leHAsIGIxLl9leHApCisKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX2Fic19fIikKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX2FkZF9fIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX2Rpdl9fIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX2Rpdm1vZF9fIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX2VxX18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fbmVfXyIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19sZV9fIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX2x0X18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fZ2VfXyIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19ndF9fIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX2Zsb2F0X18iKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fZmxvb3JkaXZfXyIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19oYXNoX18iKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9faW50X18iKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fdHJ1bmNfXyIpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19sb25nX18iKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fbW9kX18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fbXVsX18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fbmVnX18iKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fbm9uemVyb19fIikKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX3Bvc19fIikKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX3Bvd19fIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX3JhZGRfXyIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19yZGl2X18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fcmRpdm1vZF9fIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX3JlcHJfXyIpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19yZmxvb3JkaXZfXyIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19ybW9kX18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fcm11bF9fIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJfX3Jwb3dfXyIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygiX19yc3ViX18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fc3RyX18iKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fc3ViX18iLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIl9fdHJ1ZWRpdl9fIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJhZGp1c3RlZCIpCisgICAgICAgIGNoZWNrU2FtZURlYygiYXNfdHVwbGUiKQorICAgICAgICBjaGVja1NhbWVEZWMoImNvbXBhcmUiLCBUcnVlKQorICAgICAgICBjaGVja1NhbWVEZWMoIm1heCIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygibWluIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJub3JtYWxpemUiKQorICAgICAgICBjaGVja1NhbWVEZWMoInF1YW50aXplIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJyZW1haW5kZXJfbmVhciIsIFRydWUpCisgICAgICAgIGNoZWNrU2FtZURlYygic2FtZV9xdWFudHVtIiwgVHJ1ZSkKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJzcXJ0IikKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJ0b19lbmdfc3RyaW5nIikKKyAgICAgICAgY2hlY2tTYW1lRGVjKCJ0b19pbnRlZ3JhbCIpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2luZyhzZWxmKToKKyAgICAgICAgIyBEaWZmZXJlbnQgYmVoYXZpb3VycyB3aGVuIHN1YmNsYXNzaW5nIERlY2ltYWwKKworICAgICAgICBjbGFzcyBNeURlY2ltYWwoRGVjaW1hbCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZDEgPSBNeURlY2ltYWwoMSkKKyAgICAgICAgZDIgPSBNeURlY2ltYWwoMikKKyAgICAgICAgZCA9IGQxICsgZDIKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGQpLCBEZWNpbWFsKQorCisgICAgICAgIGQgPSBkMS5tYXgoZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShkKSwgRGVjaW1hbCkKKworICAgIGRlZiB0ZXN0X2ltcGxpY2l0X2NvbnRleHQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcmVzdWx0cyB3aGVuIGNvbnRleHQgZ2l2ZW4gaW1wbGljaXRseS4gIChJc3N1ZSAyNDc4KQorICAgICAgICBjID0gZ2V0Y29udGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoMCkuc3FydCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoYy5zcXJ0KERlY2ltYWwoMCkpKSkKKworICAgIGRlZiB0ZXN0X2NvbnZlcnNpb25zX2Zyb21faW50KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgbWV0aG9kcyB0YWtpbmcgYSBzZWNvbmQgRGVjaW1hbCBhcmd1bWVudCB3aWxsCisgICAgICAgICMgYWx3YXlzIGFjY2VwdCBhbiBpbnRlZ2VyIGluIHBsYWNlIG9mIGEgRGVjaW1hbC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDQpLmNvbXBhcmUoMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCg0KS5jb21wYXJlKERlY2ltYWwoMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoNCkuY29tcGFyZV9zaWduYWwoMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCg0KS5jb21wYXJlX3NpZ25hbChEZWNpbWFsKDMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDQpLmNvbXBhcmVfdG90YWwoMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCg0KS5jb21wYXJlX3RvdGFsKERlY2ltYWwoMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoNCkuY29tcGFyZV90b3RhbF9tYWcoMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCg0KS5jb21wYXJlX3RvdGFsX21hZyhEZWNpbWFsKDMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDEwMTAxKS5sb2dpY2FsX2FuZCgxMDAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsKDEwMTAxKS5sb2dpY2FsX2FuZChEZWNpbWFsKDEwMDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDEwMTAxKS5sb2dpY2FsX29yKDEwMDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwoMTAxMDEpLmxvZ2ljYWxfb3IoRGVjaW1hbCgxMDAxKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbCgxMDEwMSkubG9naWNhbF94b3IoMTAwMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCgxMDEwMSkubG9naWNhbF94b3IoRGVjaW1hbCgxMDAxKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbCg1NjcpLm1heCgxMjMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwoNTY3KS5tYXgoRGVjaW1hbCgxMjMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDU2NykubWF4X21hZygxMjMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwoNTY3KS5tYXhfbWFnKERlY2ltYWwoMTIzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbCg1NjcpLm1pbigxMjMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwoNTY3KS5taW4oRGVjaW1hbCgxMjMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDU2NykubWluX21hZygxMjMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwoNTY3KS5taW5fbWFnKERlY2ltYWwoMTIzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbCg1NjcpLm5leHRfdG93YXJkKDEyMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCg1NjcpLm5leHRfdG93YXJkKERlY2ltYWwoMTIzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbCgxMjM0KS5xdWFudGl6ZSgxMDApLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwoMTIzNCkucXVhbnRpemUoRGVjaW1hbCgxMDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDc2OCkucmVtYWluZGVyX25lYXIoMTIzNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCg3NjgpLnJlbWFpbmRlcl9uZWFyKERlY2ltYWwoMTIzNCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoMTIzKS5yb3RhdGUoMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCgxMjMpLnJvdGF0ZShEZWNpbWFsKDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDEyMzQpLnNhbWVfcXVhbnR1bSgxMDAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsKDEyMzQpLnNhbWVfcXVhbnR1bShEZWNpbWFsKDEwMDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKCc5LjEyMycpLnNjYWxlYigtMTAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsKCc5LjEyMycpLnNjYWxlYihEZWNpbWFsKC0xMDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKDQ1Nikuc2hpZnQoLTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwoNDU2KS5zaGlmdChEZWNpbWFsKC0xKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEZWNpbWFsKC0xMikuZm1hKERlY2ltYWwoNDUpLCA2NyksCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVjaW1hbCgtMTIpLmZtYShEZWNpbWFsKDQ1KSwgRGVjaW1hbCg2NykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoLTEyKS5mbWEoNDUsIDY3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBEZWNpbWFsKC0xMikuZm1hKERlY2ltYWwoNDUpLCBEZWNpbWFsKDY3KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbCgtMTIpLmZtYSg0NSwgRGVjaW1hbCg2NykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwoLTEyKS5mbWEoRGVjaW1hbCg0NSksIERlY2ltYWwoNjcpKSkKKworCitjbGFzcyBEZWNpbWFsUHl0aG9uQVBJdGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYWJjKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhEZWNpbWFsLCBudW1iZXJzLk51bWJlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhEZWNpbWFsLCBudW1iZXJzLlJlYWwpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoRGVjaW1hbCgwKSwgbnVtYmVycy5OdW1iZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShEZWNpbWFsKDApLCBudW1iZXJzLlJlYWwpCisKKyAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CisgICAgICAgIGQgPSBEZWNpbWFsKCctMy4xNDE1OTAwMDAnKQorICAgICAgICBwID0gcGlja2xlLmR1bXBzKGQpCisgICAgICAgIGUgPSBwaWNrbGUubG9hZHMocCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBlKQorCisgICAgZGVmIHRlc3RfaW50KHNlbGYpOgorICAgICAgICBmb3IgeCBpbiByYW5nZSgtMjUwLCAyNTApOgorICAgICAgICAgICAgcyA9ICclMC4yZicgJSAoeCAvIDEwMC4wKQorICAgICAgICAgICAgIyBzaG91bGQgd29yayB0aGUgc2FtZSBhcyBmb3IgZmxvYXRzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChEZWNpbWFsKHMpKSwgaW50KGZsb2F0KHMpKSkKKyAgICAgICAgICAgICMgc2hvdWxkIHdvcmsgdGhlIHNhbWUgYXMgdG9faW50ZWdyYWwgaW4gdGhlIFJPVU5EX0RPV04gbW9kZQorICAgICAgICAgICAgZCA9IERlY2ltYWwocykKKyAgICAgICAgICAgIHIgPSBkLnRvX2ludGVncmFsKFJPVU5EX0RPV04pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoaW50KGQpKSwgcikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsIERlY2ltYWwoJy1uYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCBEZWNpbWFsKCdzbmFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGludCwgRGVjaW1hbCgnaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGludCwgRGVjaW1hbCgnLWluZicpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvbmcsIERlY2ltYWwoJy1uYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9uZywgRGVjaW1hbCgnc25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBsb25nLCBEZWNpbWFsKCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbG9uZywgRGVjaW1hbCgnLWluZicpKQorCisgICAgZGVmIHRlc3RfdHJ1bmMoc2VsZik6CisgICAgICAgIGZvciB4IGluIHJhbmdlKC0yNTAsIDI1MCk6CisgICAgICAgICAgICBzID0gJyUwLjJmJyAlICh4IC8gMTAwLjApCisgICAgICAgICAgICAjIHNob3VsZCB3b3JrIHRoZSBzYW1lIGFzIGZvciBmbG9hdHMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KERlY2ltYWwocykpLCBpbnQoZmxvYXQocykpKQorICAgICAgICAgICAgIyBzaG91bGQgd29yayB0aGUgc2FtZSBhcyB0b19pbnRlZ3JhbCBpbiB0aGUgUk9VTkRfRE9XTiBtb2RlCisgICAgICAgICAgICBkID0gRGVjaW1hbChzKQorICAgICAgICAgICAgciA9IGQudG9faW50ZWdyYWwoUk9VTkRfRE9XTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGVjaW1hbChtYXRoLnRydW5jKGQpKSwgcikKKworICAgIGRlZiB0ZXN0X2Zyb21fZmxvYXQoc2VsZik6CisKKyAgICAgICAgY2xhc3MgIE15RGVjaW1hbChEZWNpbWFsKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICByID0gTXlEZWNpbWFsLmZyb21fZmxvYXQoMC4xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUociksIE15RGVjaW1hbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIociksCisgICAgICAgICAgICAgICAgJzAuMTAwMDAwMDAwMDAwMDAwMDA1NTUxMTE1MTIzMTI1NzgyNzAyMTE4MTU4MzQwNDU0MTAxNTYyNScpCisgICAgICAgIGJpZ2ludCA9IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTXlEZWNpbWFsLmZyb21fZmxvYXQoYmlnaW50KSwgTXlEZWNpbWFsKGJpZ2ludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShNeURlY2ltYWwuZnJvbV9mbG9hdChmbG9hdCgnbmFuJykpLmlzX3FuYW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKE15RGVjaW1hbC5mcm9tX2Zsb2F0KGZsb2F0KCdpbmYnKSkuaXNfaW5maW5pdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKE15RGVjaW1hbC5mcm9tX2Zsb2F0KGZsb2F0KCctaW5mJykpLmlzX2luZmluaXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKE15RGVjaW1hbC5mcm9tX2Zsb2F0KGZsb2F0KCduYW4nKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihEZWNpbWFsKCdOYU4nKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKE15RGVjaW1hbC5mcm9tX2Zsb2F0KGZsb2F0KCdpbmYnKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihEZWNpbWFsKCdJbmZpbml0eScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoTXlEZWNpbWFsLmZyb21fZmxvYXQoZmxvYXQoJy1pbmYnKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihEZWNpbWFsKCctSW5maW5pdHknKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgTXlEZWNpbWFsLmZyb21fZmxvYXQsICdhYmMnKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyMDApOgorICAgICAgICAgICAgeCA9IHJhbmRvbS5leHBvdmFyaWF0ZSgwLjAxKSAqIChyYW5kb20ucmFuZG9tKCkgKiAyLjAgLSAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIGZsb2F0KE15RGVjaW1hbC5mcm9tX2Zsb2F0KHgpKSkgIyByb3VuZHRyaXAKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQoc2VsZik6CisgICAgICAgIGNvbnRleHQgPSBDb250ZXh0KHByZWM9NSwgcm91bmRpbmc9Uk9VTkRfRE9XTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvbnRleHQuY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdChtYXRoLnBpKSwKKyAgICAgICAgICAgIERlY2ltYWwoJzMuMTQxNScpCisgICAgICAgICkKKyAgICAgICAgY29udGV4dCA9IENvbnRleHQocHJlYz01LCByb3VuZGluZz1ST1VORF9VUCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvbnRleHQuY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdChtYXRoLnBpKSwKKyAgICAgICAgICAgIERlY2ltYWwoJzMuMTQxNicpCisgICAgICAgICkKKyAgICAgICAgY29udGV4dCA9IENvbnRleHQocHJlYz01LCB0cmFwcz1bSW5leGFjdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgSW5leGFjdCwKKyAgICAgICAgICAgIGNvbnRleHQuY3JlYXRlX2RlY2ltYWxfZnJvbV9mbG9hdCwKKyAgICAgICAgICAgIG1hdGgucGkKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29udGV4dC5jcmVhdGVfZGVjaW1hbF9mcm9tX2Zsb2F0KC0wLjApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRGVjaW1hbCgnLTAnKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb250ZXh0LmNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQoMS4wKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRlY2ltYWwoJzEnKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb250ZXh0LmNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQoMTApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRGVjaW1hbCgnMTAnKSIpCisKK2NsYXNzIENvbnRleHRBUEl0ZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoYykpCisgICAgICAgIGZvciBrIGluIHZhcnMoYyk6CisgICAgICAgICAgICB2MSA9IHZhcnMoYylba10KKyAgICAgICAgICAgIHYyID0gdmFycyhlKVtrXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2MSwgdjIpCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eV93aXRoX290aGVyX3R5cGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEluKERlY2ltYWwoMTApLCBbJ2EnLCAxLjAsIERlY2ltYWwoMTApLCAoMSwyKSwge31dKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKERlY2ltYWwoMTApLCBbJ2EnLCAxLjAsICgxLDIpLCB7fV0pCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICAjIEFsbCBjb3BpZXMgc2hvdWxkIGJlIGRlZXAKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5jb3B5KCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChjKSwgaWQoZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYy5mbGFncyksIGlkKGQuZmxhZ3MpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGMudHJhcHMpLCBpZChkLnRyYXBzKSkKKworICAgIGRlZiB0ZXN0X2FicyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5hYnMoRGVjaW1hbCgtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5hYnMoLTEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuYWJzLCAnLTEnKQorCisgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmFkZChEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYWRkKDEsIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYWRkKERlY2ltYWwoMSksIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYWRkKDEsIERlY2ltYWwoMSkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuYWRkLCAnMScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5hZGQsIDEsICcxJykKKworICAgIGRlZiB0ZXN0X2NvbXBhcmUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuY29tcGFyZShEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZSgxLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmUoRGVjaW1hbCgxKSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlKDEsIERlY2ltYWwoMSkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29tcGFyZSwgJzEnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29tcGFyZSwgMSwgJzEnKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV9zaWduYWwoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuY29tcGFyZV9zaWduYWwoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmVfc2lnbmFsKDEsIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZV9zaWduYWwoRGVjaW1hbCgxKSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlX3NpZ25hbCgxLCBEZWNpbWFsKDEpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvbXBhcmVfc2lnbmFsLCAnMScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb21wYXJlX3NpZ25hbCwgMSwgJzEnKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV90b3RhbChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5jb21wYXJlX3RvdGFsKERlY2ltYWwoMSksIERlY2ltYWwoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlX3RvdGFsKDEsIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZV90b3RhbChEZWNpbWFsKDEpLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmVfdG90YWwoMSwgRGVjaW1hbCgxKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb21wYXJlX3RvdGFsLCAnMScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb21wYXJlX3RvdGFsLCAxLCAnMScpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlX3RvdGFsX21hZyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5jb21wYXJlX3RvdGFsX21hZyhEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZV90b3RhbF9tYWcoMSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlX3RvdGFsX21hZyhEZWNpbWFsKDEpLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmVfdG90YWxfbWFnKDEsIERlY2ltYWwoMSkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29tcGFyZV90b3RhbF9tYWcsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvbXBhcmVfdG90YWxfbWFnLCAxLCAnMScpCisKKyAgICBkZWYgdGVzdF9jb3B5X2FicyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5jb3B5X2FicyhEZWNpbWFsKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvcHlfYWJzKC0xKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvcHlfYWJzLCAnLTEnKQorCisgICAgZGVmIHRlc3RfY29weV9kZWNpbWFsKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmNvcHlfZGVjaW1hbChEZWNpbWFsKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvcHlfZGVjaW1hbCgtMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb3B5X2RlY2ltYWwsICctMScpCisKKyAgICBkZWYgdGVzdF9jb3B5X25lZ2F0ZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5jb3B5X25lZ2F0ZShEZWNpbWFsKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvcHlfbmVnYXRlKC0xKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvcHlfbmVnYXRlLCAnLTEnKQorCisgICAgZGVmIHRlc3RfY29weV9zaWduKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmNvcHlfc2lnbihEZWNpbWFsKDEpLCBEZWNpbWFsKC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvcHlfc2lnbigxLCAtMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb3B5X3NpZ24oRGVjaW1hbCgxKSwgLTIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29weV9zaWduKDEsIERlY2ltYWwoLTIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvcHlfc2lnbiwgJzEnLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvcHlfc2lnbiwgMSwgJy0yJykKKworICAgIGRlZiB0ZXN0X2RpdmlkZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5kaXZpZGUoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdmlkZSgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdmlkZShEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdmlkZSgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmRpdmlkZSwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZGl2aWRlLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9kaXZpZGVfaW50KHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmRpdmlkZV9pbnQoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdmlkZV9pbnQoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kaXZpZGVfaW50KERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2aWRlX2ludCgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmRpdmlkZV9pbnQsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmRpdmlkZV9pbnQsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X2Rpdm1vZChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5kaXZtb2QoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdm1vZCgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdm1vZChEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdm1vZCgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmRpdm1vZCwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZGl2bW9kLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9leHAoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuZXhwKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZXhwKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmV4cCwgJzEwJykKKworICAgIGRlZiB0ZXN0X2ZtYShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5mbWEoRGVjaW1hbCgyKSwgRGVjaW1hbCgzKSwgRGVjaW1hbCg0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZtYSgyLCAzLCA0KSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZtYShEZWNpbWFsKDIpLCAzLCA0KSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZtYSgyLCBEZWNpbWFsKDMpLCA0KSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZtYSgyLCAzLCBEZWNpbWFsKDQpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZtYShEZWNpbWFsKDIpLCBEZWNpbWFsKDMpLCA0KSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmZtYSwgJzInLCAzLCA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZm1hLCAyLCAnMycsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5mbWEsIDIsIDMsICc0JykKKworICAgIGRlZiB0ZXN0X2lzX2Zpbml0ZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc19maW5pdGUoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc19maW5pdGUoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuaXNfZmluaXRlLCAnMTAnKQorCisgICAgZGVmIHRlc3RfaXNfaW5maW5pdGUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuaXNfaW5maW5pdGUoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc19pbmZpbml0ZSgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc19pbmZpbml0ZSwgJzEwJykKKworICAgIGRlZiB0ZXN0X2lzX25hbihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc19uYW4oRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc19uYW4oMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuaXNfbmFuLCAnMTAnKQorCisgICAgZGVmIHRlc3RfaXNfbm9ybWFsKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmlzX25vcm1hbChEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX25vcm1hbCgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc19ub3JtYWwsICcxMCcpCisKKyAgICBkZWYgdGVzdF9pc19xbmFuKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmlzX3FuYW4oRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc19xbmFuKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmlzX3FuYW4sICcxMCcpCisKKyAgICBkZWYgdGVzdF9pc19zaWduZWQoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuaXNfc2lnbmVkKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuaXNfc2lnbmVkKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmlzX3NpZ25lZCwgJzEwJykKKworICAgIGRlZiB0ZXN0X2lzX3NuYW4oc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuaXNfc25hbihEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX3NuYW4oMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuaXNfc25hbiwgJzEwJykKKworICAgIGRlZiB0ZXN0X2lzX3N1Ym5vcm1hbChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc19zdWJub3JtYWwoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc19zdWJub3JtYWwoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuaXNfc3Vibm9ybWFsLCAnMTAnKQorCisgICAgZGVmIHRlc3RfaXNfemVybyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc196ZXJvKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuaXNfemVybygxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc196ZXJvLCAnMTAnKQorCisgICAgZGVmIHRlc3RfbG4oc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubG4oRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sbigxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sbiwgJzEwJykKKworICAgIGRlZiB0ZXN0X2xvZzEwKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmxvZzEwKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9nMTAoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG9nMTAsICcxMCcpCisKKyAgICBkZWYgdGVzdF9sb2diKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmxvZ2IoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2diKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxvZ2IsICcxMCcpCisKKyAgICBkZWYgdGVzdF9sb2dpY2FsX2FuZChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5sb2dpY2FsX2FuZChEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF9hbmQoMSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX2FuZChEZWNpbWFsKDEpLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfYW5kKDEsIERlY2ltYWwoMSkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG9naWNhbF9hbmQsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxvZ2ljYWxfYW5kLCAxLCAnMScpCisKKyAgICBkZWYgdGVzdF9sb2dpY2FsX2ludmVydChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5sb2dpY2FsX2ludmVydChEZWNpbWFsKDEwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF9pbnZlcnQoMTAwMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sb2dpY2FsX2ludmVydCwgJzEwMDAnKQorCisgICAgZGVmIHRlc3RfbG9naWNhbF9vcihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5sb2dpY2FsX29yKERlY2ltYWwoMSksIERlY2ltYWwoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX29yKDEsIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF9vcihEZWNpbWFsKDEpLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfb3IoMSwgRGVjaW1hbCgxKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sb2dpY2FsX29yLCAnMScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sb2dpY2FsX29yLCAxLCAnMScpCisKKyAgICBkZWYgdGVzdF9sb2dpY2FsX3hvcihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5sb2dpY2FsX3hvcihEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF94b3IoMSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX3hvcihEZWNpbWFsKDEpLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfeG9yKDEsIERlY2ltYWwoMSkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG9naWNhbF94b3IsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxvZ2ljYWxfeG9yLCAxLCAnMScpCisKKyAgICBkZWYgdGVzdF9tYXgoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubWF4KERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tYXgoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tYXgoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tYXgoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5tYXgsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1heCwgMSwgJzInKQorCisgICAgZGVmIHRlc3RfbWF4X21hZyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5tYXhfbWFnKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tYXhfbWFnKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWF4X21hZyhEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1heF9tYWcoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5tYXhfbWFnLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5tYXhfbWFnLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9taW4oc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubWluKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5taW4oMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5taW4oRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5taW4oMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5taW4sICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1pbiwgMSwgJzInKQorCisgICAgZGVmIHRlc3RfbWluX21hZyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5taW5fbWFnKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5taW5fbWFnKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWluX21hZyhEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1pbl9tYWcoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5taW5fbWFnLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5taW5fbWFnLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9taW51cyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5taW51cyhEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1pbnVzKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm1pbnVzLCAnMTAnKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbHkoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubXVsdGlwbHkoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm11bHRpcGx5KDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubXVsdGlwbHkoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tdWx0aXBseSgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm11bHRpcGx5LCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5tdWx0aXBseSwgMSwgJzInKQorCisgICAgZGVmIHRlc3RfbmV4dF9taW51cyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5uZXh0X21pbnVzKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubmV4dF9taW51cygxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5uZXh0X21pbnVzLCAnMTAnKQorCisgICAgZGVmIHRlc3RfbmV4dF9wbHVzKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm5leHRfcGx1cyhEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm5leHRfcGx1cygxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5uZXh0X3BsdXMsICcxMCcpCisKKyAgICBkZWYgdGVzdF9uZXh0X3Rvd2FyZChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5uZXh0X3Rvd2FyZChEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubmV4dF90b3dhcmQoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5uZXh0X3Rvd2FyZChEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm5leHRfdG93YXJkKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubmV4dF90b3dhcmQsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm5leHRfdG93YXJkLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9ub3JtYWxpemUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubm9ybWFsaXplKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubm9ybWFsaXplKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm5vcm1hbGl6ZSwgJzEwJykKKworICAgIGRlZiB0ZXN0X251bWJlcl9jbGFzcyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubnVtYmVyX2NsYXNzKDEyMyksIGMubnVtYmVyX2NsYXNzKERlY2ltYWwoMTIzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5udW1iZXJfY2xhc3MoMCksIGMubnVtYmVyX2NsYXNzKERlY2ltYWwoMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubnVtYmVyX2NsYXNzKC00NSksIGMubnVtYmVyX2NsYXNzKERlY2ltYWwoLTQ1KSkpCisKKyAgICBkZWYgdGVzdF9wb3dlcihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5wb3dlcihEZWNpbWFsKDEpLCBEZWNpbWFsKDQpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucG93ZXIoMSwgNCwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wb3dlcihEZWNpbWFsKDEpLCA0LCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnBvd2VyKDEsIERlY2ltYWwoNCksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucG93ZXIoMSwgNCwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wb3dlcihEZWNpbWFsKDEpLCBEZWNpbWFsKDQpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnBvd2VyLCAnMScsIDQsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5wb3dlciwgMSwgJzQnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucG93ZXIsIDEsIDQsICcyJykKKworICAgIGRlZiB0ZXN0X3BsdXMoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMucGx1cyhEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnBsdXMoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucGx1cywgJzEwJykKKworICAgIGRlZiB0ZXN0X3F1YW50aXplKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnF1YW50aXplKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5xdWFudGl6ZSgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnF1YW50aXplKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucXVhbnRpemUoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5xdWFudGl6ZSwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucXVhbnRpemUsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X3JlbWFpbmRlcihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5yZW1haW5kZXIoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJlbWFpbmRlcigxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJlbWFpbmRlcihEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJlbWFpbmRlcigxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnJlbWFpbmRlciwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucmVtYWluZGVyLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9yZW1haW5kZXJfbmVhcihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5yZW1haW5kZXJfbmVhcihEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucmVtYWluZGVyX25lYXIoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5yZW1haW5kZXJfbmVhcihEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJlbWFpbmRlcl9uZWFyKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucmVtYWluZGVyX25lYXIsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnJlbWFpbmRlcl9uZWFyLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9yb3RhdGUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMucm90YXRlKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5yb3RhdGUoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5yb3RhdGUoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5yb3RhdGUoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5yb3RhdGUsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnJvdGF0ZSwgMSwgJzInKQorCisgICAgZGVmIHRlc3Rfc3FydChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5zcXJ0KERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc3FydCgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5zcXJ0LCAnMTAnKQorCisgICAgZGVmIHRlc3Rfc2FtZV9xdWFudHVtKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnNhbWVfcXVhbnR1bShEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2FtZV9xdWFudHVtKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2FtZV9xdWFudHVtKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2FtZV9xdWFudHVtKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc2FtZV9xdWFudHVtLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5zYW1lX3F1YW50dW0sIDEsICcyJykKKworICAgIGRlZiB0ZXN0X3NjYWxlYihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5zY2FsZWIoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNjYWxlYigxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNjYWxlYihEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNjYWxlYigxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnNjYWxlYiwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc2NhbGViLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9zaGlmdChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5zaGlmdChEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2hpZnQoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zaGlmdChEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNoaWZ0KDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc2hpZnQsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnNoaWZ0LCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9zdWJ0cmFjdChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5zdWJ0cmFjdChEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc3VidHJhY3QoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zdWJ0cmFjdChEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnN1YnRyYWN0KDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc3VidHJhY3QsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnN1YnRyYWN0LCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF90b19lbmdfc3RyaW5nKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnRvX2VuZ19zdHJpbmcoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy50b19lbmdfc3RyaW5nKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnRvX2VuZ19zdHJpbmcsICcxMCcpCisKKyAgICBkZWYgdGVzdF90b19zY2lfc3RyaW5nKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnRvX3NjaV9zdHJpbmcoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy50b19zY2lfc3RyaW5nKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnRvX3NjaV9zdHJpbmcsICcxMCcpCisKKyAgICBkZWYgdGVzdF90b19pbnRlZ3JhbF9leGFjdChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy50b19pbnRlZ3JhbF9leGFjdChEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnRvX2ludGVncmFsX2V4YWN0KDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnRvX2ludGVncmFsX2V4YWN0LCAnMTAnKQorCisgICAgZGVmIHRlc3RfdG9faW50ZWdyYWxfdmFsdWUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMudG9faW50ZWdyYWxfdmFsdWUoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy50b19pbnRlZ3JhbF92YWx1ZSgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy50b19pbnRlZ3JhbF92YWx1ZSwgJzEwJykKKworY2xhc3MgV2l0aFN0YXRlbWVudFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgQ2FuJ3QgZG8gdGhlc2UgYXMgZG9jc3RyaW5ncyB1bnRpbCBQeXRob24gMi42CisgICAgIyBhcyBkb2N0ZXN0IGNhbid0IGhhbmRsZSBfX2Z1dHVyZV9fIHN0YXRlbWVudHMKKworICAgIGRlZiB0ZXN0X2xvY2FsY29udGV4dChzZWxmKToKKyAgICAgICAgIyBVc2UgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGNvbnRleHQgaW4gdGhlIGJsb2NrCisgICAgICAgIG9yaWdfY3R4ID0gZ2V0Y29udGV4dCgpCisgICAgICAgIHdpdGggbG9jYWxjb250ZXh0KCkgYXMgZW50ZXJfY3R4OgorICAgICAgICAgICAgc2V0X2N0eCA9IGdldGNvbnRleHQoKQorICAgICAgICBmaW5hbF9jdHggPSBnZXRjb250ZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcmlnX2N0eCwgZmluYWxfY3R4LCAnZGlkIG5vdCByZXN0b3JlIGNvbnRleHQgY29ycmVjdGx5JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChvcmlnX2N0eCwgc2V0X2N0eCwgJ2RpZCBub3QgY29weSB0aGUgY29udGV4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2V0X2N0eCwgZW50ZXJfY3R4LCAnX19lbnRlcl9fIHJldHVybmVkIHdyb25nIGNvbnRleHQnKQorCisgICAgZGVmIHRlc3RfbG9jYWxjb250ZXh0YXJnKHNlbGYpOgorICAgICAgICAjIFVzZSBhIGNvcHkgb2YgdGhlIHN1cHBsaWVkIGNvbnRleHQgaW4gdGhlIGJsb2NrCisgICAgICAgIG9yaWdfY3R4ID0gZ2V0Y29udGV4dCgpCisgICAgICAgIG5ld19jdHggPSBDb250ZXh0KHByZWM9NDIpCisgICAgICAgIHdpdGggbG9jYWxjb250ZXh0KG5ld19jdHgpIGFzIGVudGVyX2N0eDoKKyAgICAgICAgICAgIHNldF9jdHggPSBnZXRjb250ZXh0KCkKKyAgICAgICAgZmluYWxfY3R4ID0gZ2V0Y29udGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob3JpZ19jdHgsIGZpbmFsX2N0eCwgJ2RpZCBub3QgcmVzdG9yZSBjb250ZXh0IGNvcnJlY3RseScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0X2N0eC5wcmVjLCBuZXdfY3R4LnByZWMsICdkaWQgbm90IHNldCBjb3JyZWN0IGNvbnRleHQnKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KG5ld19jdHgsIHNldF9jdHgsICdkaWQgbm90IGNvcHkgdGhlIGNvbnRleHQnKQorICAgICAgICBzZWxmLmFzc2VydElzKHNldF9jdHgsIGVudGVyX2N0eCwgJ19fZW50ZXJfXyByZXR1cm5lZCB3cm9uZyBjb250ZXh0JykKKworY2xhc3MgQ29udGV4dEZsYWdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9mbGFnc19pcnJlbGV2YW50KHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIHJlc3VsdCAobnVtZXJpYyByZXN1bHQgKyBmbGFncyByYWlzZWQpIG9mIGFuCisgICAgICAgICMgYXJpdGhtZXRpYyBvcGVyYXRpb24gZG9lc24ndCBkZXBlbmQgb24gdGhlIGN1cnJlbnQgZmxhZ3MKKworICAgICAgICBjb250ZXh0ID0gQ29udGV4dChwcmVjPTksIEVtaW4gPSAtOTk5OTk5OTk5LCBFbWF4ID0gOTk5OTk5OTk5LAorICAgICAgICAgICAgICAgICAgICByb3VuZGluZz1ST1VORF9IQUxGX0VWRU4sIHRyYXBzPVtdLCBmbGFncz1bXSkKKworICAgICAgICAjIG9wZXJhdGlvbnMgdGhhdCByYWlzZSB2YXJpb3VzIGZsYWdzLCBpbiB0aGUgZm9ybSAoZnVuY3Rpb24sIGFyZ2xpc3QpCisgICAgICAgIG9wZXJhdGlvbnMgPSBbCisgICAgICAgICAgICAoY29udGV4dC5fYXBwbHksIFtEZWNpbWFsKCIxMDBFLTEwMDAwMDAwMDkiKV0pLAorICAgICAgICAgICAgKGNvbnRleHQuc3FydCwgW0RlY2ltYWwoMildKSwKKyAgICAgICAgICAgIChjb250ZXh0LmFkZCwgW0RlY2ltYWwoIjEuMjM0NTY3ODkiKSwgRGVjaW1hbCgiOS44NzY1NDMyMSIpXSksCisgICAgICAgICAgICAoY29udGV4dC5tdWx0aXBseSwgW0RlY2ltYWwoIjEuMjM0NTY3ODkiKSwgRGVjaW1hbCgiOS44NzY1NDMyMSIpXSksCisgICAgICAgICAgICAoY29udGV4dC5zdWJ0cmFjdCwgW0RlY2ltYWwoIjEuMjM0NTY3ODkiKSwgRGVjaW1hbCgiOS44NzY1NDMyMSIpXSksCisgICAgICAgICAgICBdCisKKyAgICAgICAgIyB0cnkgdmFyaW91cyBmbGFncyBpbmRpdmlkdWFsbHksIHRoZW4gYSB3aG9sZSBsb3QgYXQgb25jZQorICAgICAgICBmbGFnc2V0cyA9IFtbSW5leGFjdF0sIFtSb3VuZGVkXSwgW1VuZGVyZmxvd10sIFtDbGFtcGVkXSwgW1N1Ym5vcm1hbF0sCisgICAgICAgICAgICAgICAgICAgIFtJbmV4YWN0LCBSb3VuZGVkLCBVbmRlcmZsb3csIENsYW1wZWQsIFN1Ym5vcm1hbF1dCisKKyAgICAgICAgZm9yIGZuLCBhcmdzIGluIG9wZXJhdGlvbnM6CisgICAgICAgICAgICAjIGZpbmQgYW5zd2VyIGFuZCBmbGFncyByYWlzZWQgdXNpbmcgYSBjbGVhbiBjb250ZXh0CisgICAgICAgICAgICBjb250ZXh0LmNsZWFyX2ZsYWdzKCkKKyAgICAgICAgICAgIGFucyA9IGZuKCphcmdzKQorICAgICAgICAgICAgZmxhZ3MgPSBbayBmb3IgaywgdiBpbiBjb250ZXh0LmZsYWdzLml0ZW1zKCkgaWYgdl0KKworICAgICAgICAgICAgZm9yIGV4dHJhX2ZsYWdzIGluIGZsYWdzZXRzOgorICAgICAgICAgICAgICAgICMgc2V0IGZsYWdzLCBiZWZvcmUgY2FsbGluZyBvcGVyYXRpb24KKyAgICAgICAgICAgICAgICBjb250ZXh0LmNsZWFyX2ZsYWdzKCkKKyAgICAgICAgICAgICAgICBmb3IgZmxhZyBpbiBleHRyYV9mbGFnczoKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoZmxhZykKKyAgICAgICAgICAgICAgICBuZXdfYW5zID0gZm4oKmFyZ3MpCisKKyAgICAgICAgICAgICAgICAjIGZsYWdzIHRoYXQgd2UgZXhwZWN0IHRvIGJlIHNldCBhZnRlciB0aGUgb3BlcmF0aW9uCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZmxhZ3MgPSBsaXN0KGZsYWdzKQorICAgICAgICAgICAgICAgIGZvciBmbGFnIGluIGV4dHJhX2ZsYWdzOgorICAgICAgICAgICAgICAgICAgICBpZiBmbGFnIG5vdCBpbiBleHBlY3RlZF9mbGFnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZsYWdzLmFwcGVuZChmbGFnKQorCisgICAgICAgICAgICAgICAgIyBmbGFncyB3ZSBhY3R1YWxseSBnb3QKKyAgICAgICAgICAgICAgICBuZXdfZmxhZ3MgPSBbayBmb3Igayx2IGluIGNvbnRleHQuZmxhZ3MuaXRlbXMoKSBpZiB2XQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbnMsIG5ld19hbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmF0aW9uIHByb2R1Y2VzIGRpZmZlcmVudCBhbnN3ZXJzIGRlcGVuZGluZyBvbiBmbGFncyBzZXQ6ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICVzLCBnb3QgJXMuIiAlIChhbnMsIG5ld19hbnMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChuZXdfZmxhZ3MsIGV4cGVjdGVkX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYXRpb24gcmFpc2VzIGRpZmZlcmVudCBmbGFncyBkZXBlbmRpbmcgb24gZmxhZ3Mgc2V0OiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJXMsIGdvdCAlcyIgJSAoZXhwZWN0ZWRfZmxhZ3MsIG5ld19mbGFncykpCisKK2RlZiB0ZXN0X21haW4oYXJpdGg9RmFsc2UsIHZlcmJvc2U9Tm9uZSwgdG9kb190ZXN0cz1Ob25lLCBkZWJ1Zz1Ob25lKToKKyAgICAiIiIgRXhlY3V0ZSB0aGUgdGVzdHMuCisKKyAgICBSdW5zIGFsbCBhcml0aG1ldGljIHRlc3RzIGlmIGFyaXRoIGlzIFRydWUgb3IgaWYgdGhlICJkZWNpbWFsIiByZXNvdXJjZQorICAgIGlzIGVuYWJsZWQgaW4gcmVncnRlc3QucHkKKyAgICAiIiIKKworICAgIGluaXQoKQorICAgIGdsb2JhbCBURVNUX0FMTCwgREVCVUcKKyAgICBURVNUX0FMTCA9IGFyaXRoIG9yIGlzX3Jlc291cmNlX2VuYWJsZWQoJ2RlY2ltYWwnKQorICAgIERFQlVHID0gZGVidWcKKworICAgIGlmIHRvZG9fdGVzdHMgaXMgTm9uZToKKyAgICAgICAgdGVzdF9jbGFzc2VzID0gWworICAgICAgICAgICAgRGVjaW1hbEV4cGxpY2l0Q29uc3RydWN0aW9uVGVzdCwKKyAgICAgICAgICAgIERlY2ltYWxJbXBsaWNpdENvbnN0cnVjdGlvblRlc3QsCisgICAgICAgICAgICBEZWNpbWFsQXJpdGhtZXRpY09wZXJhdG9yc1Rlc3QsCisgICAgICAgICAgICBEZWNpbWFsRm9ybWF0VGVzdCwKKyAgICAgICAgICAgIERlY2ltYWxVc2VPZkNvbnRleHRUZXN0LAorICAgICAgICAgICAgRGVjaW1hbFVzYWJpbGl0eVRlc3QsCisgICAgICAgICAgICBEZWNpbWFsUHl0aG9uQVBJdGVzdHMsCisgICAgICAgICAgICBDb250ZXh0QVBJdGVzdHMsCisgICAgICAgICAgICBEZWNpbWFsVGVzdCwKKyAgICAgICAgICAgIFdpdGhTdGF0ZW1lbnRUZXN0LAorICAgICAgICAgICAgQ29udGV4dEZsYWdzCisgICAgICAgIF0KKyAgICBlbHNlOgorICAgICAgICB0ZXN0X2NsYXNzZXMgPSBbRGVjaW1hbFRlc3RdCisKKyAgICAjIER5bmFtaWNhbGx5IGJ1aWxkIGN1c3RvbSB0ZXN0IGRlZmluaXRpb24gZm9yIGVhY2ggZmlsZSBpbiB0aGUgdGVzdAorICAgICMgZGlyZWN0b3J5IGFuZCBhZGQgdGhlIGRlZmluaXRpb25zIHRvIHRoZSBEZWNpbWFsVGVzdCBjbGFzcy4gIFRoaXMKKyAgICAjIHByb2NlZHVyZSBpbnN1cmVzIHRoYXQgbmV3IGZpbGVzIGRvIG5vdCBnZXQgc2tpcHBlZC4KKyAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihkaXJlY3RvcnkpOgorICAgICAgICBpZiAnLmRlY1Rlc3QnIG5vdCBpbiBmaWxlbmFtZSBvciBmaWxlbmFtZS5zdGFydHN3aXRoKCIuIik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBoZWFkLCB0YWlsID0gZmlsZW5hbWUuc3BsaXQoJy4nKQorICAgICAgICBpZiB0b2RvX3Rlc3RzIGlzIG5vdCBOb25lIGFuZCBoZWFkIG5vdCBpbiB0b2RvX3Rlc3RzOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdGVzdGVyID0gbGFtYmRhIHNlbGYsIGY9ZmlsZW5hbWU6IHNlbGYuZXZhbF9maWxlKGRpcmVjdG9yeSArIGYpCisgICAgICAgIHNldGF0dHIoRGVjaW1hbFRlc3QsICd0ZXN0XycgKyBoZWFkLCB0ZXN0ZXIpCisgICAgICAgIGRlbCBmaWxlbmFtZSwgaGVhZCwgdGFpbCwgdGVzdGVyCisKKworICAgIHRyeToKKyAgICAgICAgcnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisgICAgICAgIGlmIHRvZG9fdGVzdHMgaXMgTm9uZToKKyAgICAgICAgICAgIGltcG9ydCBkZWNpbWFsIGFzIERlY2ltYWxNb2R1bGUKKyAgICAgICAgICAgIHJ1bl9kb2N0ZXN0KERlY2ltYWxNb2R1bGUsIHZlcmJvc2UpCisgICAgZmluYWxseToKKyAgICAgICAgc2V0Y29udGV4dChPUklHSU5BTF9DT05URVhUKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCBvcHRwYXJzZQorICAgIHAgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoInRlc3RfZGVjaW1hbC5weSBbLS1kZWJ1Z10gW3stLXNraXAgfCB0ZXN0MSBbdGVzdDIgWy4uLl1dfV0iKQorICAgIHAuYWRkX29wdGlvbignLS1kZWJ1ZycsICctZCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J3Nob3dzIHRoZSB0ZXN0IG51bWJlciBhbmQgY29udGV4dCBiZWZvcmUgZWFjaCB0ZXN0JykKKyAgICBwLmFkZF9vcHRpb24oJy0tc2tpcCcsICAnLXMnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdza2lwIG92ZXIgOTAlIG9mIHRoZSBhcml0aG1ldGljIHRlc3RzJykKKyAgICAob3B0LCBhcmdzKSA9IHAucGFyc2VfYXJncygpCisKKyAgICBpZiBvcHQuc2tpcDoKKyAgICAgICAgdGVzdF9tYWluKGFyaXRoPUZhbHNlLCB2ZXJib3NlPVRydWUpCisgICAgZWxpZiBhcmdzOgorICAgICAgICB0ZXN0X21haW4oYXJpdGg9VHJ1ZSwgdmVyYm9zZT1UcnVlLCB0b2RvX3Rlc3RzPWFyZ3MsIGRlYnVnPW9wdC5kZWJ1ZykKKyAgICBlbHNlOgorICAgICAgICB0ZXN0X21haW4oYXJpdGg9VHJ1ZSwgdmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGVjb3JhdG9ycy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RlY29yYXRvcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyYmMzMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RlY29yYXRvcnMucHkKQEAgLTAsMCArMSwzMDkgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworZGVmIGZ1bmNhdHRycygqKmt3ZHMpOgorICAgIGRlZiBkZWNvcmF0ZShmdW5jKToKKyAgICAgICAgZnVuYy5fX2RpY3RfXy51cGRhdGUoa3dkcykKKyAgICAgICAgcmV0dXJuIGZ1bmMKKyAgICByZXR1cm4gZGVjb3JhdGUKKworY2xhc3MgTWlzY0RlY29yYXRvcnMgKG9iamVjdCk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBhdXRob3IobmFtZSk6CisgICAgICAgIGRlZiBkZWNvcmF0ZShmdW5jKToKKyAgICAgICAgICAgIGZ1bmMuX19kaWN0X19bJ2F1dGhvciddID0gbmFtZQorICAgICAgICAgICAgcmV0dXJuIGZ1bmMKKyAgICAgICAgcmV0dXJuIGRlY29yYXRlCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgRGJjaGVja0Vycm9yIChFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHByc3RyLCBmdW5jLCBhcmdzLCBrd2RzKToKKyAgICAgICAgIyBBIHJlYWwgdmVyc2lvbiBvZiB0aGlzIHdvdWxkIHNldCBhdHRyaWJ1dGVzIGhlcmUKKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsICJkYmNoZWNrICVyIGZhaWxlZCAoZnVuYz0lcyBhcmdzPSVzIGt3ZHM9JXMpIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhwcnN0ciwgZnVuYywgYXJncywga3dkcykpCisKKworZGVmIGRiY2hlY2soZXhwcnN0ciwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSk6CisgICAgIkRlY29yYXRvciB0byBpbXBsZW1lbnQgZGVidWdnaW5nIGFzc2VydGlvbnMiCisgICAgZGVmIGRlY29yYXRlKGZ1bmMpOgorICAgICAgICBleHByID0gY29tcGlsZShleHByc3RyLCAiZGJjaGVjay0lcyIgJSBmdW5jLmZ1bmNfbmFtZSwgImV2YWwiKQorICAgICAgICBkZWYgY2hlY2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICBpZiBub3QgZXZhbChleHByLCBnbG9iYWxzLCBsb2NhbHMpOgorICAgICAgICAgICAgICAgIHJhaXNlIERiY2hlY2tFcnJvcihleHByc3RyLCBmdW5jLCBhcmdzLCBrd2RzKQorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3dkcykKKyAgICAgICAgcmV0dXJuIGNoZWNrCisgICAgcmV0dXJuIGRlY29yYXRlCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGNvdW50Y2FsbHMoY291bnRzKToKKyAgICAiRGVjb3JhdG9yIHRvIGNvdW50IGNhbGxzIHRvIGEgZnVuY3Rpb24iCisgICAgZGVmIGRlY29yYXRlKGZ1bmMpOgorICAgICAgICBmdW5jX25hbWUgPSBmdW5jLmZ1bmNfbmFtZQorICAgICAgICBjb3VudHNbZnVuY19uYW1lXSA9IDAKKyAgICAgICAgZGVmIGNhbGwoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICBjb3VudHNbZnVuY19uYW1lXSArPSAxCisgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2RzKQorICAgICAgICBjYWxsLmZ1bmNfbmFtZSA9IGZ1bmNfbmFtZQorICAgICAgICByZXR1cm4gY2FsbAorICAgIHJldHVybiBkZWNvcmF0ZQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBtZW1vaXplKGZ1bmMpOgorICAgIHNhdmVkID0ge30KKyAgICBkZWYgY2FsbCgqYXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzYXZlZFthcmdzXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXMgPSBmdW5jKCphcmdzKQorICAgICAgICAgICAgc2F2ZWRbYXJnc10gPSByZXMKKyAgICAgICAgICAgIHJldHVybiByZXMKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICMgVW5oYXNoYWJsZSBhcmd1bWVudAorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MpCisgICAgY2FsbC5mdW5jX25hbWUgPSBmdW5jLmZ1bmNfbmFtZQorICAgIHJldHVybiBjYWxsCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdERlY29yYXRvcnModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2luZ2xlKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgZm9vKCk6IHJldHVybiA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuZm9vKCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMoKS5mb28oKSwgNDIpCisKKyAgICBkZWYgdGVzdF9zdGF0aWNtZXRob2RfZnVuY3Rpb24oc2VsZik6CisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIG5vdGFtZXRob2QoeCk6CisgICAgICAgICAgICByZXR1cm4geAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG5vdGFtZXRob2QsIDEpCisKKyAgICBkZWYgdGVzdF9kb3R0ZWQoc2VsZik6CisgICAgICAgIGRlY29yYXRvcnMgPSBNaXNjRGVjb3JhdG9ycygpCisgICAgICAgIEBkZWNvcmF0b3JzLmF1dGhvcignQ2xlZXNlJykKKyAgICAgICAgZGVmIGZvbygpOiByZXR1cm4gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28oKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLmF1dGhvciwgJ0NsZWVzZScpCisKKyAgICBkZWYgdGVzdF9hcmdmb3JtcyhzZWxmKToKKyAgICAgICAgIyBBIGZldyB0ZXN0cyBvZiBhcmd1bWVudCBwYXNzaW5nLCBhcyB3ZSB1c2UgcmVzdHJpY3RlZCBmb3JtCisgICAgICAgICMgb2YgZXhwcmVzc2lvbnMgZm9yIGRlY29yYXRvcnMuCisKKyAgICAgICAgZGVmIG5vdGVhcmdzKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgZGVmIGRlY29yYXRlKGZ1bmMpOgorICAgICAgICAgICAgICAgIHNldGF0dHIoZnVuYywgJ2RidmFsJywgKGFyZ3MsIGt3ZHMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jCisgICAgICAgICAgICByZXR1cm4gZGVjb3JhdGUKKworICAgICAgICBhcmdzID0gKCAnTm93JywgJ2lzJywgJ3RoZScsICd0aW1lJyApCisgICAgICAgIGt3ZHMgPSBkaWN0KG9uZT0xLCB0d289MikKKyAgICAgICAgQG5vdGVhcmdzKCphcmdzLCAqKmt3ZHMpCisgICAgICAgIGRlZiBmMSgpOiByZXR1cm4gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMSgpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMS5kYnZhbCwgKGFyZ3MsIGt3ZHMpKQorCisgICAgICAgIEBub3RlYXJncygndGVycnknLCAnZ2lsbGlhbScsIGVyaWM9J2lkbGUnLCBqb2huPSdjbGVlc2UnKQorICAgICAgICBkZWYgZjIoKTogcmV0dXJuIDg0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIoKSwgODQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIuZGJ2YWwsICgoJ3RlcnJ5JywgJ2dpbGxpYW0nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0KGVyaWM9J2lkbGUnLCBqb2huPSdjbGVlc2UnKSkpCisKKyAgICAgICAgQG5vdGVhcmdzKDEsIDIsKQorICAgICAgICBkZWYgZjMoKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYzLmRidmFsLCAoKDEsIDIpLCB7fSkpCisKKyAgICBkZWYgdGVzdF9kYmNoZWNrKHNlbGYpOgorICAgICAgICBAZGJjaGVjaygnYXJnc1sxXSBpcyBub3QgTm9uZScpCisgICAgICAgIGRlZiBmKGEsIGIpOgorICAgICAgICAgICAgcmV0dXJuIGEgKyBiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigxLCAyKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGJjaGVja0Vycm9yLCBmLCAxLCBOb25lKQorCisgICAgZGVmIHRlc3RfbWVtb2l6ZShzZWxmKToKKyAgICAgICAgY291bnRzID0ge30KKworICAgICAgICBAbWVtb2l6ZQorICAgICAgICBAY291bnRjYWxscyhjb3VudHMpCisgICAgICAgIGRlZiBkb3VibGUoeCk6CisgICAgICAgICAgICByZXR1cm4geCAqIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb3VibGUuZnVuY19uYW1lLCAnZG91YmxlJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50cywgZGljdChkb3VibGU9MCkpCisKKyAgICAgICAgIyBPbmx5IHRoZSBmaXJzdCBjYWxsIHdpdGggYSBnaXZlbiBhcmd1bWVudCBidW1wcyB0aGUgY2FsbCBjb3VudDoKKyAgICAgICAgIworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdWJsZSgyKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudHNbJ2RvdWJsZSddLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdWJsZSgyKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudHNbJ2RvdWJsZSddLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdWJsZSgzKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudHNbJ2RvdWJsZSddLCAyKQorCisgICAgICAgICMgVW5oYXNoYWJsZSBhcmd1bWVudHMgZG8gbm90IGdldCBtZW1vaXplZDoKKyAgICAgICAgIworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdWJsZShbMTBdKSwgWzEwLCAxMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRzWydkb3VibGUnXSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb3VibGUoWzEwXSksIFsxMCwgMTBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50c1snZG91YmxlJ10sIDQpCisKKyAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgICMgVGVzdCBzeW50YXggcmVzdHJpY3Rpb25zIC0gdGhlc2UgYXJlIGFsbCBjb21waWxlLXRpbWUgZXJyb3JzOgorICAgICAgICAjCisgICAgICAgIGZvciBleHByIGluIFsgIjErMiIsICJ4WzNdIiwgIigxLCAyKSIgXToKKyAgICAgICAgICAgICMgU2FuaXR5IGNoZWNrOiBpcyBleHByIGlzIGEgdmFsaWQgZXhwcmVzc2lvbiBieSBpdHNlbGY/CisgICAgICAgICAgICBjb21waWxlKGV4cHIsICJ0ZXN0ZXhwciIsICJleGVjIikKKworICAgICAgICAgICAgY29kZXN0ciA9ICJAJXNcbmRlZiBmKCk6IHBhc3MiICUgZXhwcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIGNvZGVzdHIsICJ0ZXN0IiwgImV4ZWMiKQorCisgICAgICAgICMgWW91IGNhbid0IHB1dCBtdWx0aXBsZSBkZWNvcmF0b3JzIG9uIGEgc2luZ2xlIGxpbmU6CisgICAgICAgICMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJAZjEgQGYyXG5kZWYgZigpOiBwYXNzIiwgInRlc3QiLCAiZXhlYyIpCisKKyAgICAgICAgIyBUZXN0IHJ1bnRpbWUgZXJyb3JzCisKKyAgICAgICAgZGVmIHVuaW1wKGZ1bmMpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBjb250ZXh0ID0gZGljdChudWxsdmFsPU5vbmUsIHVuaW1wPXVuaW1wKQorCisgICAgICAgIGZvciBleHByLCBleGMgaW4gWyAoInVuZGVmIiwgTmFtZUVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgibnVsbHZhbCIsIFR5cGVFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm51bGx2YWwuYXR0ciIsIEF0dHJpYnV0ZUVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgidW5pbXAiLCBOb3RJbXBsZW1lbnRlZEVycm9yKV06CisgICAgICAgICAgICBjb2Rlc3RyID0gIkAlc1xuZGVmIGYoKTogcGFzc1xuYXNzZXJ0IGYoKSBpcyBOb25lIiAlIGV4cHIKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGNvZGVzdHIsICJ0ZXN0IiwgImV4ZWMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXhjLCBldmFsLCBjb2RlLCBjb250ZXh0KQorCisgICAgZGVmIHRlc3RfZG91YmxlKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBAZnVuY2F0dHJzKGFiYz0xLCB4eXo9ImhhaGEiKQorICAgICAgICAgICAgQGZ1bmNhdHRycyhib29oPTQyKQorICAgICAgICAgICAgZGVmIGZvbyhzZWxmKTogcmV0dXJuIDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQygpLmZvbygpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmZvby5hYmMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5mb28ueHl6LCAiaGFoYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5mb28uYm9vaCwgNDIpCisKKyAgICBkZWYgdGVzdF9vcmRlcihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpbiB0aGUgcHJvcGVyIG9yZGVyIHRvIHRoZSBmdW5jdGlvbgorICAgICAgICAjIHRoZXkgYXJlIGRlY29yYXRpbmcuCisgICAgICAgIGRlZiBjYWxsbnVtKG51bSk6CisgICAgICAgICAgICAiIiJEZWNvcmF0b3IgZmFjdG9yeSB0aGF0IHJldHVybnMgYSBkZWNvcmF0b3IgdGhhdCByZXBsYWNlcyB0aGUKKyAgICAgICAgICAgIHBhc3NlZC1pbiBmdW5jdGlvbiB3aXRoIG9uZSB0aGF0IHJldHVybnMgdGhlIHZhbHVlIG9mICdudW0nIiIiCisgICAgICAgICAgICBkZWYgZGVjbyhmdW5jKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGFtYmRhOiBudW0KKyAgICAgICAgICAgIHJldHVybiBkZWNvCisgICAgICAgIEBjYWxsbnVtKDIpCisgICAgICAgIEBjYWxsbnVtKDEpCisgICAgICAgIGRlZiBmb28oKTogcmV0dXJuIDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vKCksIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFwcGxpY2F0aW9uIG9yZGVyIG9mIGRlY29yYXRvcnMgaXMgaW5jb3JyZWN0IikKKworICAgIGRlZiB0ZXN0X2V2YWxfb3JkZXIoc2VsZik6CisgICAgICAgICMgRXZhbHVhdGluZyBhIGRlY29yYXRlZCBmdW5jdGlvbiBpbnZvbHZlcyBmb3VyIHN0ZXBzIGZvciBlYWNoCisgICAgICAgICMgZGVjb3JhdG9yLW1ha2VyICh0aGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZGVjb3JhdG9yKToKKyAgICAgICAgIworICAgICAgICAjICAgIDE6IEV2YWx1YXRlIHRoZSBkZWNvcmF0b3ItbWFrZXIgbmFtZQorICAgICAgICAjICAgIDI6IEV2YWx1YXRlIHRoZSBkZWNvcmF0b3ItbWFrZXIgYXJndW1lbnRzIChpZiBhbnkpCisgICAgICAgICMgICAgMzogQ2FsbCB0aGUgZGVjb3JhdG9yLW1ha2VyIHRvIG1ha2UgYSBkZWNvcmF0b3IKKyAgICAgICAgIyAgICA0OiBDYWxsIHRoZSBkZWNvcmF0b3IKKyAgICAgICAgIworICAgICAgICAjIFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGRlY29yYXRvcnMsIHRoZXNlIHN0ZXBzIHNob3VsZCBiZQorICAgICAgICAjIHBlcmZvcm1lZCBpbiB0aGUgYWJvdmUgb3JkZXIgZm9yIGVhY2ggZGVjb3JhdG9yLCBidXQgd2Ugc2hvdWxkCisgICAgICAgICMgaXRlcmF0ZSB0aHJvdWdoIHRoZSBkZWNvcmF0b3JzIGluIHRoZSByZXZlcnNlIG9mIHRoZSBvcmRlciB0aGV5CisgICAgICAgICMgYXBwZWFyIGluIHRoZSBzb3VyY2UuCisKKyAgICAgICAgYWN0aW9ucyA9IFtdCisKKyAgICAgICAgZGVmIG1ha2VfZGVjb3JhdG9yKHRhZyk6CisgICAgICAgICAgICBhY3Rpb25zLmFwcGVuZCgnbWFrZWRlYycgKyB0YWcpCisgICAgICAgICAgICBkZWYgZGVjb3JhdGUoZnVuYyk6CisgICAgICAgICAgICAgICAgYWN0aW9ucy5hcHBlbmQoJ2NhbGxkZWMnICsgdGFnKQorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jCisgICAgICAgICAgICByZXR1cm4gZGVjb3JhdGUKKworICAgICAgICBjbGFzcyBOYW1lTG9va3VwVHJhY2VyIChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICBzZWxmLmluZGV4ID0gaW5kZXgKKworICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGZuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBmbmFtZSA9PSAnbWFrZV9kZWNvcmF0b3InOgorICAgICAgICAgICAgICAgICAgICBvcG5hbWUsIHJlcyA9ICgnZXZhbG5hbWUnLCBtYWtlX2RlY29yYXRvcikKKyAgICAgICAgICAgICAgICBlbGlmIGZuYW1lID09ICdhcmcnOgorICAgICAgICAgICAgICAgICAgICBvcG5hbWUsIHJlcyA9ICgnZXZhbGFyZ3MnLCBzdHIoc2VsZi5pbmRleCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAiVW5rbm93biBhdHRybmFtZSAlcyIgJSBmbmFtZQorICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKCclcyVkJyAlIChvcG5hbWUsIHNlbGYuaW5kZXgpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICBjMSwgYzIsIGMzID0gbWFwKE5hbWVMb29rdXBUcmFjZXIsIFsgMSwgMiwgMyBdKQorCisgICAgICAgIGV4cGVjdGVkX2FjdGlvbnMgPSBbICdldmFsbmFtZTEnLCAnZXZhbGFyZ3MxJywgJ21ha2VkZWMxJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V2YWxuYW1lMicsICdldmFsYXJnczInLCAnbWFrZWRlYzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXZhbG5hbWUzJywgJ2V2YWxhcmdzMycsICdtYWtlZGVjMycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYWxsZGVjMycsICdjYWxsZGVjMicsICdjYWxsZGVjMScgXQorCisgICAgICAgIGFjdGlvbnMgPSBbXQorICAgICAgICBAYzEubWFrZV9kZWNvcmF0b3IoYzEuYXJnKQorICAgICAgICBAYzIubWFrZV9kZWNvcmF0b3IoYzIuYXJnKQorICAgICAgICBAYzMubWFrZV9kZWNvcmF0b3IoYzMuYXJnKQorICAgICAgICBkZWYgZm9vKCk6IHJldHVybiA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbygpLCA0MikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbnMsIGV4cGVjdGVkX2FjdGlvbnMpCisKKyAgICAgICAgIyBUZXN0IHRoZSBlcXVpdmFsZW5jZSBjbGFpbSBpbiBjaGFwdGVyIDcgb2YgdGhlIHJlZmVyZW5jZSBtYW51YWwuCisgICAgICAgICMKKyAgICAgICAgYWN0aW9ucyA9IFtdCisgICAgICAgIGRlZiBiYXIoKTogcmV0dXJuIDQyCisgICAgICAgIGJhciA9IGMxLm1ha2VfZGVjb3JhdG9yKGMxLmFyZykoYzIubWFrZV9kZWNvcmF0b3IoYzIuYXJnKShjMy5tYWtlX2RlY29yYXRvcihjMy5hcmcpKGJhcikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhcigpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb25zLCBleHBlY3RlZF9hY3Rpb25zKQorCitjbGFzcyBUZXN0Q2xhc3NEZWNvcmF0b3JzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgZGVmIHBsYWluKHgpOgorICAgICAgICAgICAgeC5leHRyYSA9ICdIZWxsbycKKyAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgIEBwbGFpbgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmV4dHJhLCAnSGVsbG8nKQorCisgICAgZGVmIHRlc3RfZG91YmxlKHNlbGYpOgorICAgICAgICBkZWYgdGVuKHgpOgorICAgICAgICAgICAgeC5leHRyYSA9IDEwCisgICAgICAgICAgICByZXR1cm4geAorICAgICAgICBkZWYgYWRkX2ZpdmUoeCk6CisgICAgICAgICAgICB4LmV4dHJhICs9IDUKKyAgICAgICAgICAgIHJldHVybiB4CisKKyAgICAgICAgQGFkZF9maXZlCisgICAgICAgIEB0ZW4KKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5leHRyYSwgMTUpCisKKyAgICBkZWYgdGVzdF9vcmRlcihzZWxmKToKKyAgICAgICAgZGVmIGFwcGxpZWRfZmlyc3QoeCk6CisgICAgICAgICAgICB4LmV4dHJhID0gJ2ZpcnN0JworICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgZGVmIGFwcGxpZWRfc2Vjb25kKHgpOgorICAgICAgICAgICAgeC5leHRyYSA9ICdzZWNvbmQnCisgICAgICAgICAgICByZXR1cm4geAorICAgICAgICBAYXBwbGllZF9zZWNvbmQKKyAgICAgICAgQGFwcGxpZWRfZmlyc3QKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5leHRyYSwgJ3NlY29uZCcpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3REZWNvcmF0b3JzKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdENsYXNzRGVjb3JhdG9ycykKKworaWYgX19uYW1lX189PSJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RlZmF1bHRkaWN0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGVmYXVsdGRpY3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q3NjBiOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RlZmF1bHRkaWN0LnB5CkBAIC0wLDAgKzEsMTgxIEBACisiIiJVbml0IHRlc3RzIGZvciBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdC4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgY29weQoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CisKK2RlZiBmb29iYXIoKToKKyAgICByZXR1cm4gbGlzdAorCitjbGFzcyBUZXN0RGVmYXVsdERpY3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIGQxID0gZGVmYXVsdGRpY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLmRlZmF1bHRfZmFjdG9yeSwgTm9uZSkKKyAgICAgICAgZDEuZGVmYXVsdF9mYWN0b3J5ID0gbGlzdAorICAgICAgICBkMVsxMl0uYXBwZW5kKDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLCB7MTI6IFs0Ml19KQorICAgICAgICBkMVsxMl0uYXBwZW5kKDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLCB7MTI6IFs0MiwgMjRdfSkKKyAgICAgICAgZDFbMTNdCisgICAgICAgIGQxWzE0XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLCB7MTI6IFs0MiwgMjRdLCAxMzogW10sIDE0OiBbXX0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMVsxMl0gaXMgbm90IGQxWzEzXSBpcyBub3QgZDFbMTRdKQorICAgICAgICBkMiA9IGRlZmF1bHRkaWN0KGxpc3QsIGZvbz0xLCBiYXI9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi5kZWZhdWx0X2ZhY3RvcnksIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIsIHsiZm9vIjogMSwgImJhciI6IDJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyWyJmb28iXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMlsiYmFyIl0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDJbNDJdLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZm9vIiwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZvbyIsIGQyLmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiYmFyIiwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImJhciIsIGQyLmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbig0MiwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oNDIsIGQyLmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxMiwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTIsIGQyLmtleXMoKSkKKyAgICAgICAgZDIuZGVmYXVsdF9mYWN0b3J5ID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLmRlZmF1bHRfZmFjdG9yeSwgTm9uZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZDJbMTVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJncywgKDE1LCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImQyWzE1XSBkaWRuJ3QgcmFpc2UgS2V5RXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRlZmF1bHRkaWN0LCAxKQorCisgICAgZGVmIHRlc3RfbWlzc2luZyhzZWxmKToKKyAgICAgICAgZDEgPSBkZWZhdWx0ZGljdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkMS5fX21pc3NpbmdfXywgNDIpCisgICAgICAgIGQxLmRlZmF1bHRfZmFjdG9yeSA9IGxpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5fX21pc3NpbmdfXyg0MiksIFtdKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZDEgPSBkZWZhdWx0ZGljdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuZGVmYXVsdF9mYWN0b3J5LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZDEpLCAiZGVmYXVsdGRpY3QoTm9uZSwge30pIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHJlcHIoZDEpKSwgZDEpCisgICAgICAgIGQxWzExXSA9IDQxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihkMSksICJkZWZhdWx0ZGljdChOb25lLCB7MTE6IDQxfSkiKQorICAgICAgICBkMiA9IGRlZmF1bHRkaWN0KGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi5kZWZhdWx0X2ZhY3RvcnksIGludCkKKyAgICAgICAgZDJbMTJdID0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGQyKSwgImRlZmF1bHRkaWN0KDx0eXBlICdpbnQnPiwgezEyOiA0Mn0pIikKKyAgICAgICAgZGVmIGZvbygpOiByZXR1cm4gNDMKKyAgICAgICAgZDMgPSBkZWZhdWx0ZGljdChmb28pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMy5kZWZhdWx0X2ZhY3RvcnkgaXMgZm9vKQorICAgICAgICBkM1sxM10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGQzKSwgImRlZmF1bHRkaWN0KCVzLCB7MTM6IDQzfSkiICUgcmVwcihmb28pKQorCisgICAgZGVmIHRlc3RfcHJpbnQoc2VsZik6CisgICAgICAgIGQxID0gZGVmYXVsdGRpY3QoKQorICAgICAgICBkZWYgZm9vKCk6IHJldHVybiA0MgorICAgICAgICBkMiA9IGRlZmF1bHRkaWN0KGZvbywgezE6IDJ9KQorICAgICAgICAjIE5PVEU6IFdlIGNhbid0IHVzZSB0ZW1wZmlsZS5bTmFtZWRdVGVtcG9yYXJ5RmlsZSBzaW5jZSB0aGlzCisgICAgICAgICMgY29kZSBtdXN0IGV4ZXJjaXNlIHRoZSB0cF9wcmludCBDIGNvZGUsIHdoaWNoIG9ubHkgZ2V0cworICAgICAgICAjIGludm9rZWQgZm9yICpyZWFsKiBmaWxlcy4KKyAgICAgICAgdGZuID0gdGVtcGZpbGUubWt0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IG9wZW4odGZuLCAidysiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHByaW50ID4+ZiwgZDEKKyAgICAgICAgICAgICAgICBwcmludCA+PmYsIGQyCisgICAgICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksIHJlcHIoZDEpICsgIlxuIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgcmVwcihkMikgKyAiXG4iKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0Zm4pCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBkMSA9IGRlZmF1bHRkaWN0KCkKKyAgICAgICAgZDIgPSBkMS5jb3B5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGQyKSwgZGVmYXVsdGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIuZGVmYXVsdF9mYWN0b3J5LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLCB7fSkKKyAgICAgICAgZDEuZGVmYXVsdF9mYWN0b3J5ID0gbGlzdAorICAgICAgICBkMyA9IGQxLmNvcHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZDMpLCBkZWZhdWx0ZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMy5kZWZhdWx0X2ZhY3RvcnksIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDMsIHt9KQorICAgICAgICBkMVs0Ml0KKyAgICAgICAgZDQgPSBkMS5jb3B5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGQ0KSwgZGVmYXVsdGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDQuZGVmYXVsdF9mYWN0b3J5LCBsaXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQ0LCB7NDI6IFtdfSkKKyAgICAgICAgZDRbMTJdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDQsIHs0MjogW10sIDEyOiBbXX0pCisKKyAgICAgICAgIyBJc3N1ZSA2NjM3OiBDb3B5IGZhaWxzIGZvciBlbXB0eSBkZWZhdWx0IGRpY3QKKyAgICAgICAgZCA9IGRlZmF1bHRkaWN0KCkKKyAgICAgICAgZFsnYSddID0gNDIKKyAgICAgICAgZSA9IGQuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZVsnYSddLCA0MikKKworICAgIGRlZiB0ZXN0X3NoYWxsb3dfY29weShzZWxmKToKKyAgICAgICAgZDEgPSBkZWZhdWx0ZGljdChmb29iYXIsIHsxOiAxfSkKKyAgICAgICAgZDIgPSBjb3B5LmNvcHkoZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIuZGVmYXVsdF9mYWN0b3J5LCBmb29iYXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIsIGQxKQorICAgICAgICBkMS5kZWZhdWx0X2ZhY3RvcnkgPSBsaXN0CisgICAgICAgIGQyID0gY29weS5jb3B5KGQxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLmRlZmF1bHRfZmFjdG9yeSwgbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMiwgZDEpCisKKyAgICBkZWYgdGVzdF9kZWVwX2NvcHkoc2VsZik6CisgICAgICAgIGQxID0gZGVmYXVsdGRpY3QoZm9vYmFyLCB7MTogWzFdfSkKKyAgICAgICAgZDIgPSBjb3B5LmRlZXBjb3B5KGQxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLmRlZmF1bHRfZmFjdG9yeSwgZm9vYmFyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxWzFdIGlzIG5vdCBkMlsxXSkKKyAgICAgICAgZDEuZGVmYXVsdF9mYWN0b3J5ID0gbGlzdAorICAgICAgICBkMiA9IGNvcHkuZGVlcGNvcHkoZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIuZGVmYXVsdF9mYWN0b3J5LCBsaXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLCBkMSkKKworICAgIGRlZiB0ZXN0X2tleWVycm9yX3dpdGhvdXRfZmFjdG9yeShzZWxmKToKKyAgICAgICAgZDEgPSBkZWZhdWx0ZGljdCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGQxWygxLCldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJnc1swXSwgKDEsKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgS2V5RXJyb3IiKQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX3JlcHIoc2VsZik6CisgICAgICAgICMgSXNzdWUyMDQ1OiBzdGFjayBvdmVyZmxvdyB3aGVuIGRlZmF1bHRfZmFjdG9yeSBpcyBhIGJvdW5kIG1ldGhvZAorICAgICAgICBjbGFzcyBzdWIoZGVmYXVsdGRpY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZGVmYXVsdF9mYWN0b3J5ID0gc2VsZi5fZmFjdG9yeQorICAgICAgICAgICAgZGVmIF9mYWN0b3J5KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBkID0gc3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoZCkuc3RhcnRzd2l0aCgKKyAgICAgICAgICAgICJkZWZhdWx0ZGljdCg8Ym91bmQgbWV0aG9kIHN1Yi5fZmFjdG9yeSBvZiBkZWZhdWx0ZGljdCguLi4iKSkKKworICAgICAgICAjIE5PVEU6IHByaW50aW5nIGEgc3ViY2xhc3Mgb2YgYSBidWlsdGluIHR5cGUgZG9lcyBub3QgY2FsbCBpdHMKKyAgICAgICAgIyB0cF9wcmludCBzbG90LiBTbyB0aGlzIHBhcnQgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgdGVzdCBhcyBhYm92ZS4KKyAgICAgICAgdGZuID0gdGVtcGZpbGUubWt0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IG9wZW4odGZuLCAidysiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHByaW50ID4+ZiwgZAorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0Zm4pCisKKyAgICBkZWYgdGVzdF9jYWxsYWJsZV9hcmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGVmYXVsdGRpY3QsIHt9KQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0RGVmYXVsdERpY3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RlcXVlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGVxdWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1YTBjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RlcXVlLnB5CkBAIC0wLDAgKzEsODAzIEBACitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCwgc2VxX3Rlc3RzCitpbXBvcnQgZ2MKK2ltcG9ydCB3ZWFrcmVmCitpbXBvcnQgY29weQoraW1wb3J0IGNQaWNrbGUgYXMgcGlja2xlCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3RydWN0CisKK0JJRyA9IDEwMDAwMAorCitkZWYgZmFpbCgpOgorICAgIHJhaXNlIFN5bnRheEVycm9yCisgICAgeWllbGQgMQorCitjbGFzcyBCYWRDbXA6CisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorCitjbGFzcyBNdXRhdGVDbXA6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlcXVlLCByZXN1bHQpOgorICAgICAgICBzZWxmLmRlcXVlID0gZGVxdWUKKyAgICAgICAgc2VsZi5yZXN1bHQgPSByZXN1bHQKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgc2VsZi5kZXF1ZS5jbGVhcigpCisgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdAorCitjbGFzcyBUZXN0QmFzaWModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWNzKHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoeHJhbmdlKC01MTI1LCAtNTAwMCkpCisgICAgICAgIGQuX19pbml0X18oeHJhbmdlKDIwMCkpCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgyMDAsIDQwMCk6CisgICAgICAgICAgICBkLmFwcGVuZChpKQorICAgICAgICBmb3IgaSBpbiByZXZlcnNlZCh4cmFuZ2UoLTIwMCwgMCkpOgorICAgICAgICAgICAgZC5hcHBlbmRsZWZ0KGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgcmFuZ2UoLTIwMCwgNDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDYwMCkKKworICAgICAgICBsZWZ0ID0gW2QucG9wbGVmdCgpIGZvciBpIGluIHhyYW5nZSgyNTApXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlZnQsIHJhbmdlKC0yMDAsIDUwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCByYW5nZSg1MCwgNDAwKSkKKworICAgICAgICByaWdodCA9IFtkLnBvcCgpIGZvciBpIGluIHhyYW5nZSgyNTApXQorICAgICAgICByaWdodC5yZXZlcnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyaWdodCwgcmFuZ2UoMTUwLCA0MDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIHJhbmdlKDUwLCAxNTApKQorCisgICAgZGVmIHRlc3RfbWF4bGVuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXF1ZSwgJ2FiYycsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXF1ZSwgJ2FiYycsIC0yKQorICAgICAgICBpdCA9IGl0ZXIocmFuZ2UoMTApKQorICAgICAgICBkID0gZGVxdWUoaXQsIG1heGxlbj0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGQpLCAnZGVxdWUoWzcsIDgsIDldLCBtYXhsZW49MyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIHJhbmdlKDcsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkZXF1ZShyYW5nZSgxMCksIDMpKQorICAgICAgICBkLmFwcGVuZCgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCByYW5nZSg4LCAxMSkpCisgICAgICAgIGQuYXBwZW5kbGVmdCg3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIHJhbmdlKDcsIDEwKSkKKyAgICAgICAgZC5leHRlbmQoWzEwLCAxMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgcmFuZ2UoOSwgMTIpKQorICAgICAgICBkLmV4dGVuZGxlZnQoWzgsIDddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIHJhbmdlKDcsIDEwKSkKKyAgICAgICAgZCA9IGRlcXVlKHhyYW5nZSgyMDApLCBtYXhsZW49MTApCisgICAgICAgIGQuYXBwZW5kKGQpCisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgZm8gPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaW50ID4+IGZvLCBkLAorICAgICAgICAgICAgZm8uY2xvc2UoKQorICAgICAgICAgICAgZm8gPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWQoKSwgcmVwcihkKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvLmNsb3NlKCkKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgICAgICBkID0gZGVxdWUocmFuZ2UoMTApLCBtYXhsZW49Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGQpLCAnZGVxdWUoWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldKScpCisgICAgICAgIGZvID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmludCA+PiBmbywgZCwKKyAgICAgICAgICAgIGZvLmNsb3NlKCkKKyAgICAgICAgICAgIGZvID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby5yZWFkKCksIHJlcHIoZCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmby5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9tYXhsZW5femVybyhzZWxmKToKKyAgICAgICAgaXQgPSBpdGVyKHJhbmdlKDEwMCkpCisgICAgICAgIGRlcXVlKGl0LCBtYXhsZW49MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgW10pCisKKyAgICAgICAgaXQgPSBpdGVyKHJhbmdlKDEwMCkpCisgICAgICAgIGQgPSBkZXF1ZShtYXhsZW49MCkKKyAgICAgICAgZC5leHRlbmQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKQorCisgICAgICAgIGl0ID0gaXRlcihyYW5nZSgxMDApKQorICAgICAgICBkID0gZGVxdWUobWF4bGVuPTApCisgICAgICAgIGQuZXh0ZW5kbGVmdChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgW10pCisKKyAgICBkZWYgdGVzdF9tYXhsZW5fYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcXVlKCkubWF4bGVuLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcXVlKCdhYmMnKS5tYXhsZW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVxdWUoJ2FiYycsIG1heGxlbj00KS5tYXhsZW4sIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVxdWUoJ2FiYycsIG1heGxlbj0yKS5tYXhsZW4sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVxdWUoJ2FiYycsIG1heGxlbj0wKS5tYXhsZW4sIDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZCA9IGRlcXVlKCdhYmMnKQorICAgICAgICAgICAgZC5tYXhsZW4gPSAxMAorCisgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CisgICAgICAgIGZvciBzIGluICgnJywgJ2FicmFjYWRhYnJhJywgJ3NpbXNhbGFiaW0nKjUwMCsnYWJjJyk6CisgICAgICAgICAgICBzID0gbGlzdChzKQorICAgICAgICAgICAgZCA9IGRlcXVlKHMpCisgICAgICAgICAgICBmb3IgbGV0dGVyIGluICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KGxldHRlciksIGQuY291bnQobGV0dGVyKSwgKHMsIGQsIGxldHRlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5jb3VudCkgICAgICAgIyB0b28gZmV3IGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLmNvdW50LCAxLCAyKSAjIHRvbyBtYW55IGFyZ3MKKyAgICAgICAgY2xhc3MgQmFkQ29tcGFyZToKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJhaXNlIEFyaXRobWV0aWNFcnJvcgorICAgICAgICBkID0gZGVxdWUoWzEsIDIsIEJhZENvbXBhcmUoKSwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyaXRobWV0aWNFcnJvciwgZC5jb3VudCwgMikKKyAgICAgICAgZCA9IGRlcXVlKFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJpdGhtZXRpY0Vycm9yLCBkLmNvdW50LCBCYWRDb21wYXJlKCkpCisgICAgICAgIGNsYXNzIE11dGF0aW5nQ29tcGFyZToKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHNlbGYuZC5wb3AoKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIG0gPSBNdXRhdGluZ0NvbXBhcmUoKQorICAgICAgICBkID0gZGVxdWUoWzEsIDIsIDMsIG0sIDQsIDVdKQorICAgICAgICBtLmQgPSBkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZC5jb3VudCwgMykKKworICAgICAgICAjIHRlc3QgaXNzdWUxMTAwNAorICAgICAgICAjIGJsb2NrIGFkdmFuY2UgZmFpbGVkIGFmdGVyIHJvdGF0aW9uIGFsaWduZWQgZWxlbWVudHMgb24gcmlnaHQgc2lkZSBvZiBibG9jaworICAgICAgICBkID0gZGVxdWUoW05vbmVdKjE2KQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oZCkpOgorICAgICAgICAgICAgZC5yb3RhdGUoLTEpCisgICAgICAgIGQucm90YXRlKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jb3VudCgxKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmNvdW50KE5vbmUpLCAxNikKKworICAgIGRlZiB0ZXN0X2NvbXBhcmlzb25zKHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoJ3hhYmMnKTsgZC5wb3BsZWZ0KCkKKyAgICAgICAgZm9yIGUgaW4gW2QsIGRlcXVlKCdhYmMnKSwgZGVxdWUoJ2FiJyksIGRlcXVlKCksIGxpc3QoZCldOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkPT1lLCB0eXBlKGQpPT10eXBlKGUpIGFuZCBsaXN0KGQpPT1saXN0KGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkIT1lLCBub3QodHlwZShkKT09dHlwZShlKSBhbmQgbGlzdChkKT09bGlzdChlKSkpCisKKyAgICAgICAgYXJncyA9IG1hcChkZXF1ZSwgKCcnLCAnYScsICdiJywgJ2FiJywgJ2JhJywgJ2FiYycsICd4YmEnLCAneGFiYycsICdjYmEnKSkKKyAgICAgICAgZm9yIHggaW4gYXJnczoKKyAgICAgICAgICAgIGZvciB5IGluIGFyZ3M6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4ID09IHksIGxpc3QoeCkgPT0gbGlzdCh5KSwgKHgseSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4ICE9IHksIGxpc3QoeCkgIT0gbGlzdCh5KSwgKHgseSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4IDwgIHksIGxpc3QoeCkgPCAgbGlzdCh5KSwgKHgseSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4IDw9IHksIGxpc3QoeCkgPD0gbGlzdCh5KSwgKHgseSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4ID4gIHksIGxpc3QoeCkgPiAgbGlzdCh5KSwgKHgseSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4ID49IHksIGxpc3QoeCkgPj0gbGlzdCh5KSwgKHgseSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoeCx5KSwgY21wKGxpc3QoeCksbGlzdCh5KSksICh4LHkpKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kKHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuZXh0ZW5kLCAxKQorICAgICAgICBkLmV4dGVuZCgnYmNkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KCdhYmNkJykpCisgICAgICAgIGQuZXh0ZW5kKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdCgnYWJjZGFiY2QnKSkKKworICAgIGRlZiB0ZXN0X2lhZGQoc2VsZik6CisgICAgICAgIGQgPSBkZXF1ZSgnYScpCisgICAgICAgIGQgKz0gJ2JjZCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KCdhYmNkJykpCisgICAgICAgIGQgKz0gZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QoJ2FiY2RhYmNkJykpCisKKyAgICBkZWYgdGVzdF9leHRlbmRsZWZ0KHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuZXh0ZW5kbGVmdCwgMSkKKyAgICAgICAgZC5leHRlbmRsZWZ0KCdiY2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QocmV2ZXJzZWQoJ2FiY2QnKSkpCisgICAgICAgIGQuZXh0ZW5kbGVmdChkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QoJ2FiY2RkY2JhJykpCisgICAgICAgIGQgPSBkZXF1ZSgpCisgICAgICAgIGQuZXh0ZW5kbGVmdChyYW5nZSgxMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KHJldmVyc2VkKHJhbmdlKDEwMDApKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBkLmV4dGVuZGxlZnQsIGZhaWwoKSkKKworICAgIGRlZiB0ZXN0X2dldGl0ZW0oc2VsZik6CisgICAgICAgIG4gPSAyMDAKKyAgICAgICAgZCA9IGRlcXVlKHhyYW5nZShuKSkKKyAgICAgICAgbCA9IHJhbmdlKG4pCisgICAgICAgIGZvciBpIGluIHhyYW5nZShuKToKKyAgICAgICAgICAgIGQucG9wbGVmdCgpCisgICAgICAgICAgICBsLnBvcCgwKQorICAgICAgICAgICAgaWYgcmFuZG9tLnJhbmRvbSgpIDwgMC41OgorICAgICAgICAgICAgICAgIGQuYXBwZW5kKGkpCisgICAgICAgICAgICAgICAgbC5hcHBlbmQoaSkKKyAgICAgICAgICAgIGZvciBqIGluIHhyYW5nZSgxLWxlbihsKSwgbGVuKGwpKToKKyAgICAgICAgICAgICAgICBhc3NlcnQgZFtqXSA9PSBsW2pdCisKKyAgICAgICAgZCA9IGRlcXVlKCdzdXBlcm1hbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFswXSwgJ3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbLTFdLCAnbicpCisgICAgICAgIGQgPSBkZXF1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGQuX19nZXRpdGVtX18sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGQuX19nZXRpdGVtX18sIC0xKQorCisgICAgZGVmIHRlc3Rfc2V0aXRlbShzZWxmKToKKyAgICAgICAgbiA9IDIwMAorICAgICAgICBkID0gZGVxdWUoeHJhbmdlKG4pKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uobik6CisgICAgICAgICAgICBkW2ldID0gMTAgKiBpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgWzEwKmkgZm9yIGkgaW4geHJhbmdlKG4pXSkKKyAgICAgICAgbCA9IGxpc3QoZCkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEtbiwgMCwgLTEpOgorICAgICAgICAgICAgZFtpXSA9IDcqaQorICAgICAgICAgICAgbFtpXSA9IDcqaQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGwpCisKKyAgICBkZWYgdGVzdF9kZWxpdGVtKHNlbGYpOgorICAgICAgICBuID0gNTAwICAgICAgICAgIyBPKG4qKjIpIHRlc3QsIGRvbid0IG1ha2UgdGhpcyB0b28gYmlnCisgICAgICAgIGQgPSBkZXF1ZSh4cmFuZ2UobikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGQuX19kZWxpdGVtX18sIC1uLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGQuX19kZWxpdGVtX18sIG4pCisgICAgICAgIGZvciBpIGluIHhyYW5nZShuKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCBuLWkpCisgICAgICAgICAgICBqID0gcmFuZG9tLnJhbmRyYW5nZSgtbGVuKGQpLCBsZW4oZCkpCisgICAgICAgICAgICB2YWwgPSBkW2pdCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHZhbCwgZCkKKyAgICAgICAgICAgIGRlbCBkW2pdCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHZhbCwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDApCisKKyAgICBkZWYgdGVzdF9yZXZlcnNlKHNlbGYpOgorICAgICAgICBuID0gNTAwICAgICAgICAgIyBPKG4qKjIpIHRlc3QsIGRvbid0IG1ha2UgdGhpcyB0b28gYmlnCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnJhbmRvbSgpIGZvciBpIGluIHJhbmdlKG4pXQorICAgICAgICBmb3IgaSBpbiByYW5nZShuKToKKyAgICAgICAgICAgIGQgPSBkZXF1ZShkYXRhWzppXSkKKyAgICAgICAgICAgIHIgPSBkLnJldmVyc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KHJldmVyc2VkKGRhdGFbOmldKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHIsIE5vbmUpCisgICAgICAgICAgICBkLnJldmVyc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBkYXRhWzppXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLnJldmVyc2UsIDEpICAgICAgICAgICMgQXJpdHkgaXMgemVybworCisgICAgZGVmIHRlc3Rfcm90YXRlKHNlbGYpOgorICAgICAgICBzID0gdHVwbGUoJ2FiY2RlJykKKyAgICAgICAgbiA9IGxlbihzKQorCisgICAgICAgIGQgPSBkZXF1ZShzKQorICAgICAgICBkLnJvdGF0ZSgxKSAgICAgICAgICAgICAjIHZlcmlmeSByb3QoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJy5qb2luKGQpLCAnZWFiY2QnKQorCisgICAgICAgIGQgPSBkZXF1ZShzKQorICAgICAgICBkLnJvdGF0ZSgtMSkgICAgICAgICAgICAjIHZlcmlmeSByb3QoLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihkKSwgJ2JjZGVhJykKKyAgICAgICAgZC5yb3RhdGUoKSAgICAgICAgICAgICAgIyBjaGVjayBkZWZhdWx0IHRvIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShkKSwgcykKKworICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobiozKToKKyAgICAgICAgICAgIGQgPSBkZXF1ZShzKQorICAgICAgICAgICAgZSA9IGRlcXVlKGQpCisgICAgICAgICAgICBkLnJvdGF0ZShpKSAgICAgICAgICMgY2hlY2sgdnMuIHJvdCgxKSBuIHRpbWVzCisgICAgICAgICAgICBmb3IgaiBpbiB4cmFuZ2UoaSk6CisgICAgICAgICAgICAgICAgZS5yb3RhdGUoMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoZCksIHR1cGxlKGUpKQorICAgICAgICAgICAgZC5yb3RhdGUoLWkpICAgICAgICAjIGNoZWNrIHRoYXQgaXQgd29ya3MgaW4gcmV2ZXJzZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShkKSwgcykKKyAgICAgICAgICAgIGUucm90YXRlKG4taSkgICAgICAgIyBjaGVjayB0aGF0IGl0IHdyYXBzIGZvcndhcmQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoZSksIHMpCisKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG4qMyk6CisgICAgICAgICAgICBkID0gZGVxdWUocykKKyAgICAgICAgICAgIGUgPSBkZXF1ZShkKQorICAgICAgICAgICAgZC5yb3RhdGUoLWkpCisgICAgICAgICAgICBmb3IgaiBpbiB4cmFuZ2UoaSk6CisgICAgICAgICAgICAgICAgZS5yb3RhdGUoLTEpICAgICMgY2hlY2sgdnMuIHJvdCgtMSkgbiB0aW1lcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShkKSwgdHVwbGUoZSkpCisgICAgICAgICAgICBkLnJvdGF0ZShpKSAgICAgICAgICMgY2hlY2sgdGhhdCBpdCB3b3JrcyBpbiByZXZlcnNlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKGQpLCBzKQorICAgICAgICAgICAgZS5yb3RhdGUoaS1uKSAgICAgICAjIGNoZWNrIHRoYXQgaXQgd3JhcHMgYmFja2Fyb3VuZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShlKSwgcykKKworICAgICAgICBkID0gZGVxdWUocykKKyAgICAgICAgZSA9IGRlcXVlKHMpCisgICAgICAgIGUucm90YXRlKEJJRysxNykgICAgICAgICMgdmVyaWZ5IG9uIGxvbmcgc2VyaWVzIG9mIHJvdGF0ZXMKKyAgICAgICAgZHIgPSBkLnJvdGF0ZQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoQklHKzE3KToKKyAgICAgICAgICAgIGRyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShkKSwgdHVwbGUoZSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLnJvdGF0ZSwgJ3gnKSAgICMgV3JvbmcgYXJnIHR5cGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLnJvdGF0ZSwgMSwgMTApICMgVG9vIG1hbnkgYXJncworCisgICAgICAgIGQgPSBkZXF1ZSgpCisgICAgICAgIGQucm90YXRlKCkgICAgICAgICAgICAgICMgcm90YXRlIGFuIGVtcHR5IGRlcXVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGVxdWUoKSkKKworICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgZCA9IGRlcXVlKCdhYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAyKQorICAgICAgICBkLnBvcGxlZnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMSkKKyAgICAgICAgZC5wb3AoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgZC5wb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAwKQorICAgICAgICBkLmFwcGVuZCgnYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAxKQorICAgICAgICBkLmFwcGVuZGxlZnQoJ2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMikKKyAgICAgICAgZC5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAwKQorCisgICAgZGVmIHRlc3RfdW5kZXJmbG93KHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBkLnBvcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgZC5wb3BsZWZ0KQorCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIGQgPSBkZXF1ZSh4cmFuZ2UoMTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDEwMCkKKyAgICAgICAgZC5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIFtdKQorICAgICAgICBkLmNsZWFyKCkgICAgICAgICAgICAgICAjIGNsZWFyIGFuIGVtdHB5IGRlcXVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgW10pCisKKyAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6CisgICAgICAgIGQgPSBkZXF1ZSgnYWJjZGVmZ2hjaWonKQorICAgICAgICBkLnJlbW92ZSgnYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGVxdWUoJ2FiZGVmZ2hjaWonKSkKKyAgICAgICAgZC5yZW1vdmUoJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRlcXVlKCdhYmRlZmdoaWonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZC5yZW1vdmUsICdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkZXF1ZSgnYWJkZWZnaGlqJykpCisKKyAgICAgICAgIyBIYW5kbGUgY29tcGFyaXNvbiBlcnJvcnMKKyAgICAgICAgZCA9IGRlcXVlKFsnYScsICdiJywgQmFkQ21wKCksICdjJ10pCisgICAgICAgIGUgPSBkZXF1ZShkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGQucmVtb3ZlLCAnYycpCisgICAgICAgIGZvciB4LCB5IGluIHppcChkLCBlKToKKyAgICAgICAgICAgICMgdmVyaWZ5IHRoYXQgb3JpZ2luYWwgb3JkZXIgYW5kIHZhbHVlcyBhcmUgcmV0YWluZWQuCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyB5KQorCisgICAgICAgICMgSGFuZGxlIGV2aWwgbXV0YXRvcgorICAgICAgICBmb3IgbWF0Y2ggaW4gKFRydWUsIEZhbHNlKToKKyAgICAgICAgICAgIGQgPSBkZXF1ZShbJ2FiJ10pCisgICAgICAgICAgICBkLmV4dGVuZChbTXV0YXRlQ21wKGQsIG1hdGNoKSwgJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGQucmVtb3ZlLCAnYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRlcXVlKCkpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoeHJhbmdlKDIwMCkpCisgICAgICAgIGUgPSBldmFsKHJlcHIoZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKKyAgICAgICAgZC5hcHBlbmQoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignLi4uJywgcmVwcihkKSkKKworICAgIGRlZiB0ZXN0X3ByaW50KHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoeHJhbmdlKDIwMCkpCisgICAgICAgIGQuYXBwZW5kKGQpCisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgZm8gPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaW50ID4+IGZvLCBkLAorICAgICAgICAgICAgZm8uY2xvc2UoKQorICAgICAgICAgICAgZm8gPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWQoKSwgcmVwcihkKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvLmNsb3NlKCkKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGVxdWUsICdhYmMnLCAyLCAzKTsKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkZXF1ZSwgMSk7CisKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGRlcXVlKCdhYmMnKSkKKworICAgIGRlZiB0ZXN0X2xvbmdfc3RlYWR5c3RhdGVfcXVldWVfcG9wbGVmdChzZWxmKToKKyAgICAgICAgZm9yIHNpemUgaW4gKDAsIDEsIDIsIDEwMCwgMTAwMCk6CisgICAgICAgICAgICBkID0gZGVxdWUoeHJhbmdlKHNpemUpKQorICAgICAgICAgICAgYXBwZW5kLCBwb3AgPSBkLmFwcGVuZCwgZC5wb3BsZWZ0CisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2l6ZSwgQklHKToKKyAgICAgICAgICAgICAgICBhcHBlbmQoaSkKKyAgICAgICAgICAgICAgICB4ID0gcG9wKCkKKyAgICAgICAgICAgICAgICBpZiB4ICE9IGkgLSBzaXplOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIGktc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgcmFuZ2UoQklHLXNpemUsIEJJRykpCisKKyAgICBkZWYgdGVzdF9sb25nX3N0ZWFkeXN0YXRlX3F1ZXVlX3BvcHJpZ2h0KHNlbGYpOgorICAgICAgICBmb3Igc2l6ZSBpbiAoMCwgMSwgMiwgMTAwLCAxMDAwKToKKyAgICAgICAgICAgIGQgPSBkZXF1ZShyZXZlcnNlZCh4cmFuZ2Uoc2l6ZSkpKQorICAgICAgICAgICAgYXBwZW5kLCBwb3AgPSBkLmFwcGVuZGxlZnQsIGQucG9wCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2l6ZSwgQklHKToKKyAgICAgICAgICAgICAgICBhcHBlbmQoaSkKKyAgICAgICAgICAgICAgICB4ID0gcG9wKCkKKyAgICAgICAgICAgICAgICBpZiB4ICE9IGkgLSBzaXplOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIGktc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChsaXN0KGQpKSksIHJhbmdlKEJJRy1zaXplLCBCSUcpKQorCisgICAgZGVmIHRlc3RfYmlnX3F1ZXVlX3BvcGxlZnQoc2VsZik6CisgICAgICAgIHBhc3MKKyAgICAgICAgZCA9IGRlcXVlKCkKKyAgICAgICAgYXBwZW5kLCBwb3AgPSBkLmFwcGVuZCwgZC5wb3BsZWZ0CisgICAgICAgIGZvciBpIGluIHhyYW5nZShCSUcpOgorICAgICAgICAgICAgYXBwZW5kKGkpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShCSUcpOgorICAgICAgICAgICAgeCA9IHBvcCgpCisgICAgICAgICAgICBpZiB4ICE9IGk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBpKQorCisgICAgZGVmIHRlc3RfYmlnX3F1ZXVlX3BvcHJpZ2h0KHNlbGYpOgorICAgICAgICBkID0gZGVxdWUoKQorICAgICAgICBhcHBlbmQsIHBvcCA9IGQuYXBwZW5kbGVmdCwgZC5wb3AKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKEJJRyk6CisgICAgICAgICAgICBhcHBlbmQoaSkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKEJJRyk6CisgICAgICAgICAgICB4ID0gcG9wKCkKKyAgICAgICAgICAgIGlmIHggIT0gaToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIGkpCisKKyAgICBkZWYgdGVzdF9iaWdfc3RhY2tfcmlnaHQoc2VsZik6CisgICAgICAgIGQgPSBkZXF1ZSgpCisgICAgICAgIGFwcGVuZCwgcG9wID0gZC5hcHBlbmQsIGQucG9wCisgICAgICAgIGZvciBpIGluIHhyYW5nZShCSUcpOgorICAgICAgICAgICAgYXBwZW5kKGkpCisgICAgICAgIGZvciBpIGluIHJldmVyc2VkKHhyYW5nZShCSUcpKToKKyAgICAgICAgICAgIHggPSBwb3AoKQorICAgICAgICAgICAgaWYgeCAhPSBpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDApCisKKyAgICBkZWYgdGVzdF9iaWdfc3RhY2tfbGVmdChzZWxmKToKKyAgICAgICAgZCA9IGRlcXVlKCkKKyAgICAgICAgYXBwZW5kLCBwb3AgPSBkLmFwcGVuZGxlZnQsIGQucG9wbGVmdAorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoQklHKToKKyAgICAgICAgICAgIGFwcGVuZChpKQorICAgICAgICBmb3IgaSBpbiByZXZlcnNlZCh4cmFuZ2UoQklHKSk6CisgICAgICAgICAgICB4ID0gcG9wKCkKKyAgICAgICAgICAgIGlmIHggIT0gaToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAwKQorCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwX2l0ZXJfaW5pdChzZWxmKToKKyAgICAgICAgZCA9IGRlcXVlKHhyYW5nZSgyMDApKQorICAgICAgICBlID0gZGVxdWUoZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkKSwgaWQoZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgZCA9IGRlcXVlKHhyYW5nZSgyMDApKQorICAgICAgICBmb3IgaSBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhkLCBpKQorICAgICAgICAgICAgZSA9IHBpY2tsZS5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkKSwgaWQoZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QoZSkpCisKKyMjICAgIGRlZiB0ZXN0X3BpY2tsZV9yZWN1cnNpdmUoc2VsZik6CisjIyAgICAgICAgZCA9IGRlcXVlKCdhYmMnKQorIyMgICAgICAgIGQuYXBwZW5kKGQpCisjIyAgICAgICAgZm9yIGkgaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyMjICAgICAgICAgICAgZSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoZCwgaSkpCisjIyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZCksIGlkKGUpKQorIyMgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKGUpLCBpZChlWy0xXSkpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weShzZWxmKToKKyAgICAgICAgbXV0ID0gWzEwXQorICAgICAgICBkID0gZGVxdWUoW211dF0pCisgICAgICAgIGUgPSBjb3B5LmRlZXBjb3B5KGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKKyAgICAgICAgbXV0WzBdID0gMTEKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkKSwgaWQoZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGlzdChkKSwgbGlzdChlKSkKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIG11dCA9IFsxMF0KKyAgICAgICAgZCA9IGRlcXVlKFttdXRdKQorICAgICAgICBlID0gY29weS5jb3B5KGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKKyAgICAgICAgbXV0WzBdID0gMTEKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkKSwgaWQoZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKKworICAgIGRlZiB0ZXN0X3JldmVyc2VkKHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAoJ2FiY2QnLCB4cmFuZ2UoMjAwMCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJldmVyc2VkKGRlcXVlKHMpKSksIGxpc3QocmV2ZXJzZWQocykpKQorCisgICAgZGVmIHRlc3RfZ2NfZG9lc250X2Jsb3d1cChzZWxmKToKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgICMgVGhpcyB1c2VkIHRvIGFzc2VydC1mYWlsIGluIGRlcXVlX3RyYXZlcnNlKCkgdW5kZXIgYSBkZWJ1ZworICAgICAgICAjIGJ1aWxkLCBvciBydW4gd2lsZCB3aXRoIGEgTlVMTCBwb2ludGVyIGluIGEgcmVsZWFzZSBidWlsZC4KKyAgICAgICAgZCA9IGRlcXVlKCkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMCk6CisgICAgICAgICAgICBkLmFwcGVuZCgxKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICBkZWYgdGVzdF9jb250YWluZXJfaXRlcmF0b3Ioc2VsZik6CisgICAgICAgICMgQnVnICMzNjgwOiB0cF90cmF2ZXJzZSB3YXMgbm90IGltcGxlbWVudGVkIGZvciBkZXF1ZSBpdGVyYXRvciBvYmplY3RzCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6CisgICAgICAgICAgICBvYmogPSBDKCkKKyAgICAgICAgICAgIHJlZiA9IHdlYWtyZWYucmVmKG9iaikKKyAgICAgICAgICAgIGlmIGkgPT0gMDoKKyAgICAgICAgICAgICAgICBjb250YWluZXIgPSBkZXF1ZShbb2JqLCAxXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29udGFpbmVyID0gcmV2ZXJzZWQoZGVxdWUoW29iaiwgMV0pKQorICAgICAgICAgICAgb2JqLnggPSBpdGVyKGNvbnRhaW5lcikKKyAgICAgICAgICAgIGRlbCBvYmosIGNvbnRhaW5lcgorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVmKCkgaXMgTm9uZSwgIkN5Y2xlIHdhcyBub3QgY29sbGVjdGVkIikKKworICAgIGNoZWNrX3NpemVvZiA9IHRlc3Rfc3VwcG9ydC5jaGVja19zaXplb2YKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfc2l6ZW9mKHNlbGYpOgorICAgICAgICBCTE9DS0xFTiA9IDYyCisgICAgICAgIGJhc2VzaXplID0gdGVzdF9zdXBwb3J0LmNhbGNvYmpzaXplKCcyUDRQbFAnKQorICAgICAgICBibG9ja3NpemUgPSBzdHJ1Y3QuY2FsY3NpemUoJzJQJWRQJyAlIEJMT0NLTEVOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iamVjdC5fX3NpemVvZl9fKGRlcXVlKCkpLCBiYXNlc2l6ZSkKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX3NpemVvZgorICAgICAgICBjaGVjayhkZXF1ZSgpLCBiYXNlc2l6ZSArIGJsb2Nrc2l6ZSkKKyAgICAgICAgY2hlY2soZGVxdWUoJ2EnKSwgYmFzZXNpemUgKyBibG9ja3NpemUpCisgICAgICAgIGNoZWNrKGRlcXVlKCdhJyAqIChCTE9DS0xFTiAvLyAyKSksIGJhc2VzaXplICsgYmxvY2tzaXplKQorICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiAoQkxPQ0tMRU4gLy8gMiArIDEpKSwgYmFzZXNpemUgKyAyICogYmxvY2tzaXplKQorICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiAoNDIgKiBCTE9DS0xFTikpLCBiYXNlc2l6ZSArIDQzICogYmxvY2tzaXplKQorCitjbGFzcyBUZXN0VmFyaW91c0l0ZXJhdG9yQXJncyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCIxMjMiLCAiIiwgcmFuZ2UoMTAwMCksICgnZG8nLCAxLjIpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgIGZvciBnIGluIChzZXFfdGVzdHMuU2VxdWVuY2UsIHNlcV90ZXN0cy5JdGVyRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICBzZXFfdGVzdHMuSXRlckdlbiwgc2VxX3Rlc3RzLkl0ZXJGdW5jU3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICBzZXFfdGVzdHMuaXRlcm11bHRpLCBzZXFfdGVzdHMuaXRlcmZ1bmMpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkZXF1ZShnKHMpKSksIGxpc3QoZyhzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRlcXVlLCBzZXFfdGVzdHMuSXRlck5leHRPbmx5KHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkZXF1ZSwgc2VxX3Rlc3RzLkl0ZXJOb05leHQocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgZGVxdWUsIHNlcV90ZXN0cy5JdGVyR2VuRXhjKHMpKQorCisgICAgZGVmIHRlc3RfaXRlcl93aXRoX2FsdGVyZWRfZGF0YShzZWxmKToKKyAgICAgICAgZCA9IGRlcXVlKCdhYmNkZWZnJykKKyAgICAgICAgaXQgPSBpdGVyKGQpCisgICAgICAgIGQucG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBpdC5uZXh0KQorCisgICAgZGVmIHRlc3RfcnVudGltZV9lcnJvcl9vbl9lbXB0eV9kZXF1ZShzZWxmKToKKyAgICAgICAgZCA9IGRlcXVlKCkKKyAgICAgICAgaXQgPSBpdGVyKGQpCisgICAgICAgIGQuYXBwZW5kKDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGl0Lm5leHQpCisKK2NsYXNzIERlcXVlKGRlcXVlKToKKyAgICBwYXNzCisKK2NsYXNzIERlcXVlV2l0aEJhZEl0ZXIoZGVxdWUpOgorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yCisKK2NsYXNzIFRlc3RTdWJjbGFzcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CisgICAgICAgIGQgPSBEZXF1ZSh4cmFuZ2UoMjUpKQorICAgICAgICBkLl9faW5pdF9fKHhyYW5nZSgyMDApKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMjAwLCA0MDApOgorICAgICAgICAgICAgZC5hcHBlbmQoaSkKKyAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQoeHJhbmdlKC0yMDAsIDApKToKKyAgICAgICAgICAgIGQuYXBwZW5kbGVmdChpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIHJhbmdlKC0yMDAsIDQwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCA2MDApCisKKyAgICAgICAgbGVmdCA9IFtkLnBvcGxlZnQoKSBmb3IgaSBpbiB4cmFuZ2UoMjUwKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZWZ0LCByYW5nZSgtMjAwLCA1MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgcmFuZ2UoNTAsIDQwMCkpCisKKyAgICAgICAgcmlnaHQgPSBbZC5wb3AoKSBmb3IgaSBpbiB4cmFuZ2UoMjUwKV0KKyAgICAgICAgcmlnaHQucmV2ZXJzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmlnaHQsIHJhbmdlKDE1MCwgNDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCByYW5nZSg1MCwgMTUwKSkKKworICAgICAgICBkLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDApCisKKyAgICBkZWYgdGVzdF9jb3B5X3BpY2tsZShzZWxmKToKKworICAgICAgICBkID0gRGVxdWUoJ2FiYycpCisKKyAgICAgICAgZSA9IGQuX19jb3B5X18oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZCksIHR5cGUoZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKKworICAgICAgICBlID0gRGVxdWUoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGQpLCB0eXBlKGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QoZSkpCisKKyAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhkKQorICAgICAgICBlID0gcGlja2xlLmxvYWRzKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZCksIGlkKGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZCksIHR5cGUoZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKKworICAgICAgICBkID0gRGVxdWUoJ2FiY2RlJywgbWF4bGVuPTQpCisKKyAgICAgICAgZSA9IGQuX19jb3B5X18oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZCksIHR5cGUoZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKKworICAgICAgICBlID0gRGVxdWUoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGQpLCB0eXBlKGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QoZSkpCisKKyAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhkKQorICAgICAgICBlID0gcGlja2xlLmxvYWRzKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZCksIGlkKGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZCksIHR5cGUoZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKKworIyMgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorIyMgICAgICAgIGQgPSBEZXF1ZSgnYWJjJykKKyMjICAgICAgICBkLmFwcGVuZChkKQorIyMKKyMjICAgICAgICBlID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhkKSkKKyMjICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGQpLCBpZChlKSkKKyMjICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZCksIHR5cGUoZSkpCisjIyAgICAgICAgZGQgPSBkLnBvcCgpCisjIyAgICAgICAgZWUgPSBlLnBvcCgpCisjIyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChlKSwgaWQoZWUpKQorIyMgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZSkKKyMjCisjIyAgICAgICAgZC54ID0gZAorIyMgICAgICAgIGUgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGQpKQorIyMgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQoZSksIGlkKGUueCkpCisjIworIyMgICAgICAgIGQgPSBEZXF1ZVdpdGhCYWRJdGVyKCdhYmMnKQorIyMgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGlja2xlLmR1bXBzLCBkKQorCisgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKKyAgICAgICAgZCA9IGRlcXVlKCdnYWxsYWhhZCcpCisgICAgICAgIHAgPSB3ZWFrcmVmLnByb3h5KGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBzdHIoZCkpCisgICAgICAgIGQgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlZmVyZW5jZUVycm9yLCBzdHIsIHApCisKKyAgICBkZWYgdGVzdF9zdHJhbmdlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBYKGRlcXVlKToKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRlcihbXSkKKyAgICAgICAgZDEgPSBYKFsxLDIsM10pCisgICAgICAgIGQyID0gWChbNCw1LDZdKQorICAgICAgICBkMSA9PSBkMiAgICMgbm90IGNsZWFyIGlmIHRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgVHJ1ZSBvciBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAjIGJ1dCBpdCB1c2VkIHRvIGdpdmUgYSBTeXN0ZW1FcnJvcgorCisKK2NsYXNzIFN1YmNsYXNzV2l0aEt3YXJncyhkZXF1ZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5ld2FyZz0xKToKKyAgICAgICAgZGVxdWUuX19pbml0X18oc2VsZikKKworY2xhc3MgVGVzdFN1YmNsYXNzV2l0aEt3YXJncyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nfd2l0aF9rd2FyZ3Moc2VsZik6CisgICAgICAgICMgU0YgYnVnICMxNDg2NjYzIC0tIHRoaXMgdXNlZCB0byBlcnJvbmVvdXNseSByYWlzZSBhIFR5cGVFcnJvcgorICAgICAgICBTdWJjbGFzc1dpdGhLd2FyZ3MobmV3YXJnPTEpCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworbGlicmVmdGVzdCA9ICIiIgorRXhhbXBsZSBmcm9tIHRoZSBMaWJyYXJ5IFJlZmVyZW5jZTogIERvYy9saWIvbGliY29sbGVjdGlvbnMudGV4CisKKz4+PiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQorPj4+IGQgPSBkZXF1ZSgnZ2hpJykgICAgICAgICAgICAgICAgICMgbWFrZSBhIG5ldyBkZXF1ZSB3aXRoIHRocmVlIGl0ZW1zCis+Pj4gZm9yIGVsZW0gaW4gZDogICAgICAgICAgICAgICAgICAgIyBpdGVyYXRlIG92ZXIgdGhlIGRlcXVlJ3MgZWxlbWVudHMKKy4uLiAgICAgcHJpbnQgZWxlbS51cHBlcigpCitHCitICitJCis+Pj4gZC5hcHBlbmQoJ2onKSAgICAgICAgICAgICAgICAgICAgIyBhZGQgYSBuZXcgZW50cnkgdG8gdGhlIHJpZ2h0IHNpZGUKKz4+PiBkLmFwcGVuZGxlZnQoJ2YnKSAgICAgICAgICAgICAgICAjIGFkZCBhIG5ldyBlbnRyeSB0byB0aGUgbGVmdCBzaWRlCis+Pj4gZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzaG93IHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGVxdWUKK2RlcXVlKFsnZicsICdnJywgJ2gnLCAnaScsICdqJ10pCis+Pj4gZC5wb3AoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXR1cm4gYW5kIHJlbW92ZSB0aGUgcmlnaHRtb3N0IGl0ZW0KKydqJworPj4+IGQucG9wbGVmdCgpICAgICAgICAgICAgICAgICAgICAgICMgcmV0dXJuIGFuZCByZW1vdmUgdGhlIGxlZnRtb3N0IGl0ZW0KKydmJworPj4+IGxpc3QoZCkgICAgICAgICAgICAgICAgICAgICAgICAgICMgbGlzdCB0aGUgY29udGVudHMgb2YgdGhlIGRlcXVlCitbJ2cnLCAnaCcsICdpJ10KKz4+PiBkWzBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBlZWsgYXQgbGVmdG1vc3QgaXRlbQorJ2cnCis+Pj4gZFstMV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwZWVrIGF0IHJpZ2h0bW9zdCBpdGVtCisnaScKKz4+PiBsaXN0KHJldmVyc2VkKGQpKSAgICAgICAgICAgICAgICAjIGxpc3QgdGhlIGNvbnRlbnRzIG9mIGEgZGVxdWUgaW4gcmV2ZXJzZQorWydpJywgJ2gnLCAnZyddCis+Pj4gJ2gnIGluIGQgICAgICAgICAgICAgICAgICAgICAgICAgIyBzZWFyY2ggdGhlIGRlcXVlCitUcnVlCis+Pj4gZC5leHRlbmQoJ2prbCcpICAgICAgICAgICAgICAgICAgIyBhZGQgbXVsdGlwbGUgZWxlbWVudHMgYXQgb25jZQorPj4+IGQKK2RlcXVlKFsnZycsICdoJywgJ2knLCAnaicsICdrJywgJ2wnXSkKKz4+PiBkLnJvdGF0ZSgxKSAgICAgICAgICAgICAgICAgICAgICAjIHJpZ2h0IHJvdGF0aW9uCis+Pj4gZAorZGVxdWUoWydsJywgJ2cnLCAnaCcsICdpJywgJ2onLCAnayddKQorPj4+IGQucm90YXRlKC0xKSAgICAgICAgICAgICAgICAgICAgICMgbGVmdCByb3RhdGlvbgorPj4+IGQKK2RlcXVlKFsnZycsICdoJywgJ2knLCAnaicsICdrJywgJ2wnXSkKKz4+PiBkZXF1ZShyZXZlcnNlZChkKSkgICAgICAgICAgICAgICAjIG1ha2UgYSBuZXcgZGVxdWUgaW4gcmV2ZXJzZSBvcmRlcgorZGVxdWUoWydsJywgJ2snLCAnaicsICdpJywgJ2gnLCAnZyddKQorPj4+IGQuY2xlYXIoKSAgICAgICAgICAgICAgICAgICAgICAgICMgZW1wdHkgdGhlIGRlcXVlCis+Pj4gZC5wb3AoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjYW5ub3QgcG9wIGZyb20gYW4gZW1wdHkgZGVxdWUKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPHB5c2hlbGwjNj4iLCBsaW5lIDEsIGluIC10b3BsZXZlbC0KKyAgICBkLnBvcCgpCitJbmRleEVycm9yOiBwb3AgZnJvbSBhbiBlbXB0eSBkZXF1ZQorCis+Pj4gZC5leHRlbmRsZWZ0KCdhYmMnKSAgICAgICAgICAgICAgIyBleHRlbmRsZWZ0KCkgcmV2ZXJzZXMgdGhlIGlucHV0IG9yZGVyCis+Pj4gZAorZGVxdWUoWydjJywgJ2InLCAnYSddKQorCisKKworPj4+IGRlZiBkZWxldGVfbnRoKGQsIG4pOgorLi4uICAgICBkLnJvdGF0ZSgtbikKKy4uLiAgICAgZC5wb3BsZWZ0KCkKKy4uLiAgICAgZC5yb3RhdGUobikKKy4uLgorPj4+IGQgPSBkZXF1ZSgnYWJjZGVmJykKKz4+PiBkZWxldGVfbnRoKGQsIDIpICAgIyByZW1vdmUgdGhlIGVudHJ5IGF0IGRbMl0KKz4+PiBkCitkZXF1ZShbJ2EnLCAnYicsICdkJywgJ2UnLCAnZiddKQorCisKKworPj4+IGRlZiByb3VuZHJvYmluKCppdGVyYWJsZXMpOgorLi4uICAgICBwZW5kaW5nID0gZGVxdWUoaXRlcihpKSBmb3IgaSBpbiBpdGVyYWJsZXMpCisuLi4gICAgIHdoaWxlIHBlbmRpbmc6CisuLi4gICAgICAgICB0YXNrID0gcGVuZGluZy5wb3BsZWZ0KCkKKy4uLiAgICAgICAgIHRyeToKKy4uLiAgICAgICAgICAgICB5aWVsZCB0YXNrLm5leHQoKQorLi4uICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisuLi4gICAgICAgICAgICAgY29udGludWUKKy4uLiAgICAgICAgIHBlbmRpbmcuYXBwZW5kKHRhc2spCisuLi4KKworPj4+IGZvciB2YWx1ZSBpbiByb3VuZHJvYmluKCdhYmMnLCAnZCcsICdlZmdoJyk6CisuLi4gICAgIHByaW50IHZhbHVlCisuLi4KK2EKK2QKK2UKK2IKK2YKK2MKK2cKK2gKKworCis+Pj4gZGVmIG1ha2V0cmVlKGl0ZXJhYmxlKToKKy4uLiAgICAgZCA9IGRlcXVlKGl0ZXJhYmxlKQorLi4uICAgICB3aGlsZSBsZW4oZCkgPiAxOgorLi4uICAgICAgICAgcGFpciA9IFtkLnBvcGxlZnQoKSwgZC5wb3BsZWZ0KCldCisuLi4gICAgICAgICBkLmFwcGVuZChwYWlyKQorLi4uICAgICByZXR1cm4gbGlzdChkKQorLi4uCis+Pj4gcHJpbnQgbWFrZXRyZWUoJ2FiY2RlZmdoJykKK1tbW1snYScsICdiJ10sIFsnYycsICdkJ11dLCBbWydlJywgJ2YnXSwgWydnJywgJ2gnXV1dXQorCisiIiIKKworCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK19fdGVzdF9fID0geydsaWJyZWZ0ZXN0JyA6IGxpYnJlZnRlc3R9CisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICBpbXBvcnQgc3lzCisgICAgdGVzdF9jbGFzc2VzID0gKAorICAgICAgICBUZXN0QmFzaWMsCisgICAgICAgIFRlc3RWYXJpb3VzSXRlcmF0b3JBcmdzLAorICAgICAgICBUZXN0U3ViY2xhc3MsCisgICAgICAgIFRlc3RTdWJjbGFzc1dpdGhLd2FyZ3MsCisgICAgKQorCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQorCisgICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCisgICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6CisgICAgICAgIGltcG9ydCBnYworICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1CisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oY291bnRzKSk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgcHJpbnQgY291bnRzCisKKyAgICAjIGRvY3Rlc3RzCisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2RlcXVlCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfZGVxdWUsIHZlcmJvc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Rlc2NyLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGVzY3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2NjRhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Rlc2NyLnB5CkBAIC0wLDAgKzEsNDcyNyBAQAoraW1wb3J0IF9fYnVpbHRpbl9fCitpbXBvcnQgZ2MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2Vha3JlZgorCitmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK2NsYXNzIE9wZXJhdG9yc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5iaW5vcHMgPSB7CisgICAgICAgICAgICAnYWRkJzogJysnLAorICAgICAgICAgICAgJ3N1Yic6ICctJywKKyAgICAgICAgICAgICdtdWwnOiAnKicsCisgICAgICAgICAgICAnZGl2JzogJy8nLAorICAgICAgICAgICAgJ2Rpdm1vZCc6ICdkaXZtb2QnLAorICAgICAgICAgICAgJ3Bvdyc6ICcqKicsCisgICAgICAgICAgICAnbHNoaWZ0JzogJzw8JywKKyAgICAgICAgICAgICdyc2hpZnQnOiAnPj4nLAorICAgICAgICAgICAgJ2FuZCc6ICcmJywKKyAgICAgICAgICAgICd4b3InOiAnXicsCisgICAgICAgICAgICAnb3InOiAnfCcsCisgICAgICAgICAgICAnY21wJzogJ2NtcCcsCisgICAgICAgICAgICAnbHQnOiAnPCcsCisgICAgICAgICAgICAnbGUnOiAnPD0nLAorICAgICAgICAgICAgJ2VxJzogJz09JywKKyAgICAgICAgICAgICduZSc6ICchPScsCisgICAgICAgICAgICAnZ3QnOiAnPicsCisgICAgICAgICAgICAnZ2UnOiAnPj0nLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIG5hbWUsIGV4cHIgaW4gc2VsZi5iaW5vcHMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGV4cHIuaXNsb3dlcigpOgorICAgICAgICAgICAgICAgIGV4cHIgPSBleHByICsgIihhLCBiKSIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXhwciA9ICdhICVzIGInICUgZXhwcgorICAgICAgICAgICAgc2VsZi5iaW5vcHNbbmFtZV0gPSBleHByCisKKyAgICAgICAgc2VsZi51bm9wcyA9IHsKKyAgICAgICAgICAgICdwb3MnOiAnKycsCisgICAgICAgICAgICAnbmVnJzogJy0nLAorICAgICAgICAgICAgJ2Ficyc6ICdhYnMnLAorICAgICAgICAgICAgJ2ludmVydCc6ICd+JywKKyAgICAgICAgICAgICdpbnQnOiAnaW50JywKKyAgICAgICAgICAgICdsb25nJzogJ2xvbmcnLAorICAgICAgICAgICAgJ2Zsb2F0JzogJ2Zsb2F0JywKKyAgICAgICAgICAgICdvY3QnOiAnb2N0JywKKyAgICAgICAgICAgICdoZXgnOiAnaGV4JywKKyAgICAgICAgfQorCisgICAgICAgIGZvciBuYW1lLCBleHByIGluIHNlbGYudW5vcHMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGV4cHIuaXNsb3dlcigpOgorICAgICAgICAgICAgICAgIGV4cHIgPSBleHByICsgIihhKSIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXhwciA9ICclcyBhJyAlIGV4cHIKKyAgICAgICAgICAgIHNlbGYudW5vcHNbbmFtZV0gPSBleHByCisKKyAgICBkZWYgdW5vcF90ZXN0KHNlbGYsIGEsIHJlcywgZXhwcj0ibGVuKGEpIiwgbWV0aD0iX19sZW5fXyIpOgorICAgICAgICBkID0geydhJzogYX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGV4cHIsIGQpLCByZXMpCisgICAgICAgIHQgPSB0eXBlKGEpCisgICAgICAgIG0gPSBnZXRhdHRyKHQsIG1ldGgpCisKKyAgICAgICAgIyBGaW5kIG1ldGhvZCBpbiBwYXJlbnQgY2xhc3MKKyAgICAgICAgd2hpbGUgbWV0aCBub3QgaW4gdC5fX2RpY3RfXzoKKyAgICAgICAgICAgIHQgPSB0Ll9fYmFzZXNfX1swXQorICAgICAgICAjIGluIHNvbWUgaW1wbGVtZW50YXRpb25zIChlLmcuIFB5UHkpLCAnbScgY2FuIGJlIGEgcmVndWxhciB1bmJvdW5kCisgICAgICAgICMgbWV0aG9kIG9iamVjdDsgdGhlIGdldGF0dHIoKSBiZWxvdyBvYnRhaW5zIGl0cyB1bmRlcmx5aW5nIGZ1bmN0aW9uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobSwgJ2ltX2Z1bmMnLCBtKSwgdC5fX2RpY3RfX1ttZXRoXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtKGEpLCByZXMpCisgICAgICAgIGJtID0gZ2V0YXR0cihhLCBtZXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJtKCksIHJlcykKKworICAgIGRlZiBiaW5vcF90ZXN0KHNlbGYsIGEsIGIsIHJlcywgZXhwcj0iYStiIiwgbWV0aD0iX19hZGRfXyIpOgorICAgICAgICBkID0geydhJzogYSwgJ2InOiBifQorCisgICAgICAgICMgWFhYIEhhY2sgc28gdGhpcyBwYXNzZXMgYmVmb3JlIDIuMyB3aGVuIC1RbmV3IGlzIHNwZWNpZmllZC4KKyAgICAgICAgaWYgbWV0aCA9PSAiX19kaXZfXyIgYW5kIDEvMiA9PSAwLjU6CisgICAgICAgICAgICBtZXRoID0gIl9fdHJ1ZWRpdl9fIgorCisgICAgICAgIGlmIG1ldGggPT0gJ19fZGl2bW9kX18nOiBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGV4cHIsIGQpLCByZXMpCisgICAgICAgIHQgPSB0eXBlKGEpCisgICAgICAgIG0gPSBnZXRhdHRyKHQsIG1ldGgpCisgICAgICAgIHdoaWxlIG1ldGggbm90IGluIHQuX19kaWN0X186CisgICAgICAgICAgICB0ID0gdC5fX2Jhc2VzX19bMF0KKyAgICAgICAgIyBpbiBzb21lIGltcGxlbWVudGF0aW9ucyAoZS5nLiBQeVB5KSwgJ20nIGNhbiBiZSBhIHJlZ3VsYXIgdW5ib3VuZAorICAgICAgICAjIG1ldGhvZCBvYmplY3Q7IHRoZSBnZXRhdHRyKCkgYmVsb3cgb2J0YWlucyBpdHMgdW5kZXJseWluZyBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG0sICdpbV9mdW5jJywgbSksIHQuX19kaWN0X19bbWV0aF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobShhLCBiKSwgcmVzKQorICAgICAgICBibSA9IGdldGF0dHIoYSwgbWV0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChibShiKSwgcmVzKQorCisgICAgZGVmIHRlcm5vcF90ZXN0KHNlbGYsIGEsIGIsIGMsIHJlcywgZXhwcj0iYVtiOmNdIiwgbWV0aD0iX19nZXRzbGljZV9fIik6CisgICAgICAgIGQgPSB7J2EnOiBhLCAnYic6IGIsICdjJzogY30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGV4cHIsIGQpLCByZXMpCisgICAgICAgIHQgPSB0eXBlKGEpCisgICAgICAgIG0gPSBnZXRhdHRyKHQsIG1ldGgpCisgICAgICAgIHdoaWxlIG1ldGggbm90IGluIHQuX19kaWN0X186CisgICAgICAgICAgICB0ID0gdC5fX2Jhc2VzX19bMF0KKyAgICAgICAgIyBpbiBzb21lIGltcGxlbWVudGF0aW9ucyAoZS5nLiBQeVB5KSwgJ20nIGNhbiBiZSBhIHJlZ3VsYXIgdW5ib3VuZAorICAgICAgICAjIG1ldGhvZCBvYmplY3Q7IHRoZSBnZXRhdHRyKCkgYmVsb3cgb2J0YWlucyBpdHMgdW5kZXJseWluZyBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG0sICdpbV9mdW5jJywgbSksIHQuX19kaWN0X19bbWV0aF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobShhLCBiLCBjKSwgcmVzKQorICAgICAgICBibSA9IGdldGF0dHIoYSwgbWV0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChibShiLCBjKSwgcmVzKQorCisgICAgZGVmIHNldG9wX3Rlc3Qoc2VsZiwgYSwgYiwgcmVzLCBzdG10PSJhKz1iIiwgbWV0aD0iX19pYWRkX18iKToKKyAgICAgICAgZCA9IHsnYSc6IGRlZXBjb3B5KGEpLCAnYic6IGJ9CisgICAgICAgIGV4ZWMgc3RtdCBpbiBkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCByZXMpCisgICAgICAgIHQgPSB0eXBlKGEpCisgICAgICAgIG0gPSBnZXRhdHRyKHQsIG1ldGgpCisgICAgICAgIHdoaWxlIG1ldGggbm90IGluIHQuX19kaWN0X186CisgICAgICAgICAgICB0ID0gdC5fX2Jhc2VzX19bMF0KKyAgICAgICAgIyBpbiBzb21lIGltcGxlbWVudGF0aW9ucyAoZS5nLiBQeVB5KSwgJ20nIGNhbiBiZSBhIHJlZ3VsYXIgdW5ib3VuZAorICAgICAgICAjIG1ldGhvZCBvYmplY3Q7IHRoZSBnZXRhdHRyKCkgYmVsb3cgb2J0YWlucyBpdHMgdW5kZXJseWluZyBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG0sICdpbV9mdW5jJywgbSksIHQuX19kaWN0X19bbWV0aF0pCisgICAgICAgIGRbJ2EnXSA9IGRlZXBjb3B5KGEpCisgICAgICAgIG0oZFsnYSddLCBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgcmVzKQorICAgICAgICBkWydhJ10gPSBkZWVwY29weShhKQorICAgICAgICBibSA9IGdldGF0dHIoZFsnYSddLCBtZXRoKQorICAgICAgICBibShiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgcmVzKQorCisgICAgZGVmIHNldDJvcF90ZXN0KHNlbGYsIGEsIGIsIGMsIHJlcywgc3RtdD0iYVtiXT1jIiwgbWV0aD0iX19zZXRpdGVtX18iKToKKyAgICAgICAgZCA9IHsnYSc6IGRlZXBjb3B5KGEpLCAnYic6IGIsICdjJzogY30KKyAgICAgICAgZXhlYyBzdG10IGluIGQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sIHJlcykKKyAgICAgICAgdCA9IHR5cGUoYSkKKyAgICAgICAgbSA9IGdldGF0dHIodCwgbWV0aCkKKyAgICAgICAgd2hpbGUgbWV0aCBub3QgaW4gdC5fX2RpY3RfXzoKKyAgICAgICAgICAgIHQgPSB0Ll9fYmFzZXNfX1swXQorICAgICAgICAjIGluIHNvbWUgaW1wbGVtZW50YXRpb25zIChlLmcuIFB5UHkpLCAnbScgY2FuIGJlIGEgcmVndWxhciB1bmJvdW5kCisgICAgICAgICMgbWV0aG9kIG9iamVjdDsgdGhlIGdldGF0dHIoKSBiZWxvdyBvYnRhaW5zIGl0cyB1bmRlcmx5aW5nIGZ1bmN0aW9uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobSwgJ2ltX2Z1bmMnLCBtKSwgdC5fX2RpY3RfX1ttZXRoXSkKKyAgICAgICAgZFsnYSddID0gZGVlcGNvcHkoYSkKKyAgICAgICAgbShkWydhJ10sIGIsIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCByZXMpCisgICAgICAgIGRbJ2EnXSA9IGRlZXBjb3B5KGEpCisgICAgICAgIGJtID0gZ2V0YXR0cihkWydhJ10sIG1ldGgpCisgICAgICAgIGJtKGIsIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCByZXMpCisKKyAgICBkZWYgc2V0M29wX3Rlc3Qoc2VsZiwgYSwgYiwgYywgZCwgcmVzLCBzdG10PSJhW2I6Y109ZCIsIG1ldGg9Il9fc2V0c2xpY2VfXyIpOgorICAgICAgICBkaWN0aW9uYXJ5ID0geydhJzogZGVlcGNvcHkoYSksICdiJzogYiwgJ2MnOiBjLCAnZCc6IGR9CisgICAgICAgIGV4ZWMgc3RtdCBpbiBkaWN0aW9uYXJ5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdGlvbmFyeVsnYSddLCByZXMpCisgICAgICAgIHQgPSB0eXBlKGEpCisgICAgICAgIHdoaWxlIG1ldGggbm90IGluIHQuX19kaWN0X186CisgICAgICAgICAgICB0ID0gdC5fX2Jhc2VzX19bMF0KKyAgICAgICAgbSA9IGdldGF0dHIodCwgbWV0aCkKKyAgICAgICAgIyBpbiBzb21lIGltcGxlbWVudGF0aW9ucyAoZS5nLiBQeVB5KSwgJ20nIGNhbiBiZSBhIHJlZ3VsYXIgdW5ib3VuZAorICAgICAgICAjIG1ldGhvZCBvYmplY3Q7IHRoZSBnZXRhdHRyKCkgYmVsb3cgb2J0YWlucyBpdHMgdW5kZXJseWluZyBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG0sICdpbV9mdW5jJywgbSksIHQuX19kaWN0X19bbWV0aF0pCisgICAgICAgIGRpY3Rpb25hcnlbJ2EnXSA9IGRlZXBjb3B5KGEpCisgICAgICAgIG0oZGljdGlvbmFyeVsnYSddLCBiLCBjLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3Rpb25hcnlbJ2EnXSwgcmVzKQorICAgICAgICBkaWN0aW9uYXJ5WydhJ10gPSBkZWVwY29weShhKQorICAgICAgICBibSA9IGdldGF0dHIoZGljdGlvbmFyeVsnYSddLCBtZXRoKQorICAgICAgICBibShiLCBjLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3Rpb25hcnlbJ2EnXSwgcmVzKQorCisgICAgZGVmIHRlc3RfbGlzdHMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBsaXN0IG9wZXJhdGlvbnMuLi4KKyAgICAgICAgIyBBc3NlcnRzIGFyZSB3aXRoaW4gaW5kaXZpZHVhbCB0ZXN0IG1ldGhvZHMKKyAgICAgICAgc2VsZi5iaW5vcF90ZXN0KFsxXSwgWzJdLCBbMSwyXSwgImErYiIsICJfX2FkZF9fIikKKyAgICAgICAgc2VsZi5iaW5vcF90ZXN0KFsxLDIsM10sIDIsIDEsICJiIGluIGEiLCAiX19jb250YWluc19fIikKKyAgICAgICAgc2VsZi5iaW5vcF90ZXN0KFsxLDIsM10sIDQsIDAsICJiIGluIGEiLCAiX19jb250YWluc19fIikKKyAgICAgICAgc2VsZi5iaW5vcF90ZXN0KFsxLDIsM10sIDEsIDIsICJhW2JdIiwgIl9fZ2V0aXRlbV9fIikKKyAgICAgICAgc2VsZi50ZXJub3BfdGVzdChbMSwyLDNdLCAwLCAyLCBbMSwyXSwgImFbYjpjXSIsICJfX2dldHNsaWNlX18iKQorICAgICAgICBzZWxmLnNldG9wX3Rlc3QoWzFdLCBbMl0sIFsxLDJdLCAiYSs9YiIsICJfX2lhZGRfXyIpCisgICAgICAgIHNlbGYuc2V0b3BfdGVzdChbMSwyXSwgMywgWzEsMiwxLDIsMSwyXSwgImEqPWIiLCAiX19pbXVsX18iKQorICAgICAgICBzZWxmLnVub3BfdGVzdChbMSwyLDNdLCAzLCAibGVuKGEpIiwgIl9fbGVuX18iKQorICAgICAgICBzZWxmLmJpbm9wX3Rlc3QoWzEsMl0sIDMsIFsxLDIsMSwyLDEsMl0sICJhKmIiLCAiX19tdWxfXyIpCisgICAgICAgIHNlbGYuYmlub3BfdGVzdChbMSwyXSwgMywgWzEsMiwxLDIsMSwyXSwgImIqYSIsICJfX3JtdWxfXyIpCisgICAgICAgIHNlbGYuc2V0Mm9wX3Rlc3QoWzEsMl0sIDEsIDMsIFsxLDNdLCAiYVtiXT1jIiwgIl9fc2V0aXRlbV9fIikKKyAgICAgICAgc2VsZi5zZXQzb3BfdGVzdChbMSwyLDMsNF0sIDEsIDMsIFs1LDZdLCBbMSw1LDYsNF0sICJhW2I6Y109ZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiX19zZXRzbGljZV9fIikKKworICAgIGRlZiB0ZXN0X2RpY3RzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgZGljdCBvcGVyYXRpb25zLi4uCisgICAgICAgIGlmIGhhc2F0dHIoZGljdCwgJ19fY21wX18nKTogICAjIFB5UHkgaGFzIG9ubHkgcmljaCBjb21wYXJpc29uIG9uIGRpY3RzCisgICAgICAgICAgICBzZWxmLmJpbm9wX3Rlc3QoezE6Mn0sIHsyOjF9LCAtMSwgImNtcChhLGIpIiwgIl9fY21wX18iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5iaW5vcF90ZXN0KHsxOjJ9LCB7MjoxfSwgVHJ1ZSwgImEgPCBiIiwgIl9fbHRfXyIpCisgICAgICAgIHNlbGYuYmlub3BfdGVzdCh7MToyLDM6NH0sIDEsIDEsICJiIGluIGEiLCAiX19jb250YWluc19fIikKKyAgICAgICAgc2VsZi5iaW5vcF90ZXN0KHsxOjIsMzo0fSwgMiwgMCwgImIgaW4gYSIsICJfX2NvbnRhaW5zX18iKQorICAgICAgICBzZWxmLmJpbm9wX3Rlc3QoezE6MiwzOjR9LCAxLCAyLCAiYVtiXSIsICJfX2dldGl0ZW1fXyIpCisKKyAgICAgICAgZCA9IHsxOjIsIDM6NH0KKyAgICAgICAgbDEgPSBbXQorICAgICAgICBmb3IgaSBpbiBkLmtleXMoKToKKyAgICAgICAgICAgIGwxLmFwcGVuZChpKQorICAgICAgICBsID0gW10KKyAgICAgICAgZm9yIGkgaW4gaXRlcihkKToKKyAgICAgICAgICAgIGwuYXBwZW5kKGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgbDEpCisgICAgICAgIGwgPSBbXQorICAgICAgICBmb3IgaSBpbiBkLl9faXRlcl9fKCk6CisgICAgICAgICAgICBsLmFwcGVuZChpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIGwxKQorICAgICAgICBsID0gW10KKyAgICAgICAgZm9yIGkgaW4gZGljdC5fX2l0ZXJfXyhkKToKKyAgICAgICAgICAgIGwuYXBwZW5kKGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgbDEpCisgICAgICAgIGQgPSB7MToyLCAzOjR9CisgICAgICAgIHNlbGYudW5vcF90ZXN0KGQsIDIsICJsZW4oYSkiLCAiX19sZW5fXyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChyZXByKGQpLCB7fSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChkLl9fcmVwcl9fKCksIHt9KSwgZCkKKyAgICAgICAgc2VsZi5zZXQyb3BfdGVzdCh7MToyLDM6NH0sIDIsIDMsIHsxOjIsMjozLDM6NH0sICJhW2JdPWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIl9fc2V0aXRlbV9fIikKKworICAgICMgVGVzdHMgZm9yIHVuYXJ5IGFuZCBiaW5hcnkgb3BlcmF0b3JzCisgICAgZGVmIG51bWJlcl9vcGVyYXRvcnMoc2VsZiwgYSwgYiwgc2tpcD1bXSk6CisgICAgICAgIGRpY3QgPSB7J2EnOiBhLCAnYic6IGJ9CisKKyAgICAgICAgZm9yIG5hbWUsIGV4cHIgaW4gc2VsZi5iaW5vcHMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIHNraXA6CisgICAgICAgICAgICAgICAgbmFtZSA9ICJfXyVzX18iICUgbmFtZQorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoYSwgbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IGV2YWwoZXhwciwgZGljdCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5iaW5vcF90ZXN0KGEsIGIsIHJlcywgZXhwciwgbmFtZSkKKworICAgICAgICBmb3IgbmFtZSwgZXhwciBpbiBzZWxmLnVub3BzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiBza2lwOgorICAgICAgICAgICAgICAgIG5hbWUgPSAiX18lc19fIiAlIG5hbWUKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGEsIG5hbWUpOgorICAgICAgICAgICAgICAgICAgICByZXMgPSBldmFsKGV4cHIsIGRpY3QpCisgICAgICAgICAgICAgICAgICAgIHNlbGYudW5vcF90ZXN0KGEsIHJlcywgZXhwciwgbmFtZSkKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBpbnQgb3BlcmF0aW9ucy4uLgorICAgICAgICBzZWxmLm51bWJlcl9vcGVyYXRvcnMoMTAwLCAzKQorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY3Jhc2hlcyBpbiBQeXRob24gMi4yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEpLl9fbm9uemVyb19fKCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDApLl9fbm9uemVyb19fKCksIDApCisgICAgICAgICMgVGhpcyByZXR1cm5zICdOb3RJbXBsZW1lbnRlZCcgaW4gUHl0aG9uIDIuMgorICAgICAgICBjbGFzcyBDKGludCk6CisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQyg1TCksIDUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEMoKSArICIiCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vdEltcGxlbWVudGVkIHNob3VsZCBoYXZlIGNhdXNlZCBUeXBlRXJyb3IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBDKHN5cy5tYXhpbnQrMSkKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBPdmVyZmxvd0Vycm9yIikKKworICAgIGRlZiB0ZXN0X2xvbmdzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgbG9uZyBvcGVyYXRpb25zLi4uCisgICAgICAgIHNlbGYubnVtYmVyX29wZXJhdG9ycygxMDBMLCAzTCkKKworICAgIGRlZiB0ZXN0X2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGZsb2F0IG9wZXJhdGlvbnMuLi4KKyAgICAgICAgc2VsZi5udW1iZXJfb3BlcmF0b3JzKDEwMC4wLCAzLjApCisKKyAgICBkZWYgdGVzdF9jb21wbGV4ZXMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBjb21wbGV4IG9wZXJhdGlvbnMuLi4KKyAgICAgICAgc2VsZi5udW1iZXJfb3BlcmF0b3JzKDEwMC4waiwgMy4waiwgc2tpcD1bJ2x0JywgJ2xlJywgJ2d0JywgJ2dlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludCcsICdsb25nJywgJ2Zsb2F0J10pCisKKyAgICAgICAgY2xhc3MgTnVtYmVyKGNvbXBsZXgpOgorICAgICAgICAgICAgX19zbG90c19fID0gWydwcmVjJ10KKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGxleC5fX25ld19fKGNscywgKmFyZ3MpCisgICAgICAgICAgICAgICAgcmVzdWx0LnByZWMgPSBrd2RzLmdldCgncHJlYycsIDEyKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwcmVjID0gc2VsZi5wcmVjCisgICAgICAgICAgICAgICAgaWYgc2VsZi5pbWFnID09IDAuMDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIlLipnIiAlIChwcmVjLCBzZWxmLnJlYWwpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5yZWFsID09IDAuMDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIlLipnaiIgJSAocHJlYywgc2VsZi5pbWFnKQorICAgICAgICAgICAgICAgIHJldHVybiAiKCUuKmcrJS4qZ2opIiAlIChwcmVjLCBzZWxmLnJlYWwsIHByZWMsIHNlbGYuaW1hZykKKyAgICAgICAgICAgIF9fc3RyX18gPSBfX3JlcHJfXworCisgICAgICAgIGEgPSBOdW1iZXIoMy4xNCwgcHJlYz02KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYSksICIzLjE0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnByZWMsIDYpCisKKyAgICAgICAgYSA9IE51bWJlcihhLCBwcmVjPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihhKSwgIjMuMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5wcmVjLCAyKQorCisgICAgICAgIGEgPSBOdW1iZXIoMjM0LjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihhKSwgIjIzNC41IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnByZWMsIDEyKQorCisgICAgQHRlc3Rfc3VwcG9ydC5pbXBsX2RldGFpbCgidGhlIG1vZHVsZSAneHhzdWJ0eXBlJyBpcyBpbnRlcm5hbCIpCisgICAgZGVmIHRlc3Rfc3BhbV9saXN0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHNwYW1saXN0IG9wZXJhdGlvbnMuLi4KKyAgICAgICAgaW1wb3J0IGNvcHksIHh4c3VidHlwZSBhcyBzcGFtCisKKyAgICAgICAgZGVmIHNwYW1saXN0KGwsIG1lbW89Tm9uZSk6CisgICAgICAgICAgICBpbXBvcnQgeHhzdWJ0eXBlIGFzIHNwYW0KKyAgICAgICAgICAgIHJldHVybiBzcGFtLnNwYW1saXN0KGwpCisKKyAgICAgICAgIyBUaGlzIGlzIGFuIHVnbHkgaGFjazoKKyAgICAgICAgY29weS5fZGVlcGNvcHlfZGlzcGF0Y2hbc3BhbS5zcGFtbGlzdF0gPSBzcGFtbGlzdAorCisgICAgICAgIHNlbGYuYmlub3BfdGVzdChzcGFtbGlzdChbMV0pLCBzcGFtbGlzdChbMl0pLCBzcGFtbGlzdChbMSwyXSksICJhK2IiLAorICAgICAgICAgICAgICAgICAgICAgICAiX19hZGRfXyIpCisgICAgICAgIHNlbGYuYmlub3BfdGVzdChzcGFtbGlzdChbMSwyLDNdKSwgMiwgMSwgImIgaW4gYSIsICJfX2NvbnRhaW5zX18iKQorICAgICAgICBzZWxmLmJpbm9wX3Rlc3Qoc3BhbWxpc3QoWzEsMiwzXSksIDQsIDAsICJiIGluIGEiLCAiX19jb250YWluc19fIikKKyAgICAgICAgc2VsZi5iaW5vcF90ZXN0KHNwYW1saXN0KFsxLDIsM10pLCAxLCAyLCAiYVtiXSIsICJfX2dldGl0ZW1fXyIpCisgICAgICAgIHNlbGYudGVybm9wX3Rlc3Qoc3BhbWxpc3QoWzEsMiwzXSksIDAsIDIsIHNwYW1saXN0KFsxLDJdKSwgImFbYjpjXSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiX19nZXRzbGljZV9fIikKKyAgICAgICAgc2VsZi5zZXRvcF90ZXN0KHNwYW1saXN0KFsxXSksIHNwYW1saXN0KFsyXSksIHNwYW1saXN0KFsxLDJdKSwgImErPWIiLAorICAgICAgICAgICAgICAgICAgICAgICAiX19pYWRkX18iKQorICAgICAgICBzZWxmLnNldG9wX3Rlc3Qoc3BhbWxpc3QoWzEsMl0pLCAzLCBzcGFtbGlzdChbMSwyLDEsMiwxLDJdKSwgImEqPWIiLAorICAgICAgICAgICAgICAgICAgICAgICAiX19pbXVsX18iKQorICAgICAgICBzZWxmLnVub3BfdGVzdChzcGFtbGlzdChbMSwyLDNdKSwgMywgImxlbihhKSIsICJfX2xlbl9fIikKKyAgICAgICAgc2VsZi5iaW5vcF90ZXN0KHNwYW1saXN0KFsxLDJdKSwgMywgc3BhbWxpc3QoWzEsMiwxLDIsMSwyXSksICJhKmIiLAorICAgICAgICAgICAgICAgICAgICAgICAiX19tdWxfXyIpCisgICAgICAgIHNlbGYuYmlub3BfdGVzdChzcGFtbGlzdChbMSwyXSksIDMsIHNwYW1saXN0KFsxLDIsMSwyLDEsMl0pLCAiYiphIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIl9fcm11bF9fIikKKyAgICAgICAgc2VsZi5zZXQyb3BfdGVzdChzcGFtbGlzdChbMSwyXSksIDEsIDMsIHNwYW1saXN0KFsxLDNdKSwgImFbYl09YyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiX19zZXRpdGVtX18iKQorICAgICAgICBzZWxmLnNldDNvcF90ZXN0KHNwYW1saXN0KFsxLDIsMyw0XSksIDEsIDMsIHNwYW1saXN0KFs1LDZdKSwKKyAgICAgICAgICAgICAgICAgICBzcGFtbGlzdChbMSw1LDYsNF0pLCAiYVtiOmNdPWQiLCAiX19zZXRzbGljZV9fIikKKyAgICAgICAgIyBUZXN0IHN1YmNsYXNzaW5nCisgICAgICAgIGNsYXNzIEMoc3BhbS5zcGFtbGlzdCk6CisgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOiByZXR1cm4gMQorICAgICAgICBhID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5mb28oKSwgMSkKKyAgICAgICAgYS5hcHBlbmQoMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIFsxMDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZ2V0c3RhdGUoKSwgMCkKKyAgICAgICAgYS5zZXRzdGF0ZSg0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmdldHN0YXRlKCksIDQyKQorCisgICAgQHRlc3Rfc3VwcG9ydC5pbXBsX2RldGFpbCgidGhlIG1vZHVsZSAneHhzdWJ0eXBlJyBpcyBpbnRlcm5hbCIpCisgICAgZGVmIHRlc3Rfc3BhbV9kaWN0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHNwYW1kaWN0IG9wZXJhdGlvbnMuLi4KKyAgICAgICAgaW1wb3J0IGNvcHksIHh4c3VidHlwZSBhcyBzcGFtCisgICAgICAgIGRlZiBzcGFtZGljdChkLCBtZW1vPU5vbmUpOgorICAgICAgICAgICAgaW1wb3J0IHh4c3VidHlwZSBhcyBzcGFtCisgICAgICAgICAgICBzZCA9IHNwYW0uc3BhbWRpY3QoKQorICAgICAgICAgICAgZm9yIGssIHYgaW4gZC5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNkW2tdID0gdgorICAgICAgICAgICAgcmV0dXJuIHNkCisgICAgICAgICMgVGhpcyBpcyBhbiB1Z2x5IGhhY2s6CisgICAgICAgIGNvcHkuX2RlZXBjb3B5X2Rpc3BhdGNoW3NwYW0uc3BhbWRpY3RdID0gc3BhbWRpY3QKKworICAgICAgICBzZWxmLmJpbm9wX3Rlc3Qoc3BhbWRpY3QoezE6Mn0pLCBzcGFtZGljdCh7MjoxfSksIC0xLCAiY21wKGEsYikiLAorICAgICAgICAgICAgICAgICAgICAgICAiX19jbXBfXyIpCisgICAgICAgIHNlbGYuYmlub3BfdGVzdChzcGFtZGljdCh7MToyLDM6NH0pLCAxLCAxLCAiYiBpbiBhIiwgIl9fY29udGFpbnNfXyIpCisgICAgICAgIHNlbGYuYmlub3BfdGVzdChzcGFtZGljdCh7MToyLDM6NH0pLCAyLCAwLCAiYiBpbiBhIiwgIl9fY29udGFpbnNfXyIpCisgICAgICAgIHNlbGYuYmlub3BfdGVzdChzcGFtZGljdCh7MToyLDM6NH0pLCAxLCAyLCAiYVtiXSIsICJfX2dldGl0ZW1fXyIpCisgICAgICAgIGQgPSBzcGFtZGljdCh7MToyLDM6NH0pCisgICAgICAgIGwxID0gW10KKyAgICAgICAgZm9yIGkgaW4gZC5rZXlzKCk6CisgICAgICAgICAgICBsMS5hcHBlbmQoaSkKKyAgICAgICAgbCA9IFtdCisgICAgICAgIGZvciBpIGluIGl0ZXIoZCk6CisgICAgICAgICAgICBsLmFwcGVuZChpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIGwxKQorICAgICAgICBsID0gW10KKyAgICAgICAgZm9yIGkgaW4gZC5fX2l0ZXJfXygpOgorICAgICAgICAgICAgbC5hcHBlbmQoaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLCBsMSkKKyAgICAgICAgbCA9IFtdCisgICAgICAgIGZvciBpIGluIHR5cGUoc3BhbWRpY3Qoe30pKS5fX2l0ZXJfXyhkKToKKyAgICAgICAgICAgIGwuYXBwZW5kKGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgbDEpCisgICAgICAgIHN0cmFpZ2h0ZCA9IHsxOjIsIDM6NH0KKyAgICAgICAgc3BhbWQgPSBzcGFtZGljdChzdHJhaWdodGQpCisgICAgICAgIHNlbGYudW5vcF90ZXN0KHNwYW1kLCAyLCAibGVuKGEpIiwgIl9fbGVuX18iKQorICAgICAgICBzZWxmLnVub3BfdGVzdChzcGFtZCwgcmVwcihzdHJhaWdodGQpLCAicmVwcihhKSIsICJfX3JlcHJfXyIpCisgICAgICAgIHNlbGYuc2V0Mm9wX3Rlc3Qoc3BhbWRpY3QoezE6MiwzOjR9KSwgMiwgMywgc3BhbWRpY3QoezE6MiwyOjMsMzo0fSksCisgICAgICAgICAgICAgICAgICAgImFbYl09YyIsICJfX3NldGl0ZW1fXyIpCisgICAgICAgICMgVGVzdCBzdWJjbGFzc2luZworICAgICAgICBjbGFzcyBDKHNwYW0uc3BhbWRpY3QpOgorICAgICAgICAgICAgZGVmIGZvbyhzZWxmKTogcmV0dXJuIDEKKyAgICAgICAgYSA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuaXRlbXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5mb28oKSwgMSkKKyAgICAgICAgYVsnZm9vJ10gPSAnYmFyJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuaXRlbXMoKSwgWygnZm9vJywgJ2JhcicpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmdldHN0YXRlKCksIDApCisgICAgICAgIGEuc2V0c3RhdGUoMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZ2V0c3RhdGUoKSwgMTAwKQorCitjbGFzcyBDbGFzc1Byb3BlcnRpZXNBbmRNZXRob2RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9kaWN0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIFB5dGhvbiBzdWJjbGFzcyBvZiBkaWN0Li4uCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGRpY3QsIGRpY3QpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoe30sIGRpY3QpCisgICAgICAgIGQgPSBkaWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuX19jbGFzc19fIGlzIGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkLCBkaWN0KQorICAgICAgICBjbGFzcyBDKGRpY3QpOgorICAgICAgICAgICAgc3RhdGUgPSAtMQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGZfbG9jYWwsICphLCAqKmt3KToKKyAgICAgICAgICAgICAgICBpZiBhOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhKSwgMSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZl9sb2NhbC5zdGF0ZSA9IGFbMF0KKyAgICAgICAgICAgICAgICBpZiBrdzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGssIHYgaW4ga3cuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGZfbG9jYWxbdl0gPSBrCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXQoa2V5LCAwKQorICAgICAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGZfbG9jYWwsIGtleSwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShrZXksIHR5cGUoMCkpCisgICAgICAgICAgICAgICAgZGljdC5fX3NldGl0ZW1fXyhzZWxmX2xvY2FsLCBrZXksIHZhbHVlKQorICAgICAgICAgICAgZGVmIHNldHN0YXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUKKyAgICAgICAgICAgIGRlZiBnZXRzdGF0ZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDLCBkaWN0KSkKKyAgICAgICAgYTEgPSBDKDEyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGExLnN0YXRlLCAxMikKKyAgICAgICAgYTIgPSBDKGZvbz0xLCBiYXI9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhMlsxXSA9PSAnZm9vJyBhbmQgYTJbMl0sICdiYXInKQorICAgICAgICBhID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5zdGF0ZSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5nZXRzdGF0ZSgpLCAtMSkKKyAgICAgICAgYS5zZXRzdGF0ZSgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuc3RhdGUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5nZXRzdGF0ZSgpLCAwKQorICAgICAgICBhLnNldHN0YXRlKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuc3RhdGUsIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZ2V0c3RhdGUoKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs0Ml0sIDApCisgICAgICAgIGFbNDJdID0gMjQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzQyXSwgMjQpCisgICAgICAgIE4gPSA1MAorICAgICAgICBmb3IgaSBpbiByYW5nZShOKToKKyAgICAgICAgICAgIGFbaV0gPSBDKCkKKyAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKE4pOgorICAgICAgICAgICAgICAgIGFbaV1bal0gPSBpKmoKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTik6CisgICAgICAgICAgICBmb3IgaiBpbiByYW5nZShOKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbaV1bal0sIGkqaikKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9saXN0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIFB5dGhvbiBzdWJjbGFzcyBvZiBsaXN0Li4uCisgICAgICAgIGNsYXNzIEMobGlzdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3QuX19nZXRpdGVtX18oc2VsZiwgaSkgKyAxMDAKKyAgICAgICAgICAgIGRlZiBfX2dldHNsaWNlX18oc2VsZiwgaSwgaik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChpLCBqKQorICAgICAgICBhID0gQygpCisgICAgICAgIGEuZXh0ZW5kKFswLDEsMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVswXSwgMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMV0sIDEwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzJdLCAxMDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVsxMDA6MjAwXSwgKDEwMCwyMDApKQorCisgICAgZGVmIHRlc3RfbWV0YWNsYXNzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgX19tZXRhY2xhc3NfXy4uLgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IHR5cGUKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLl9fc3RhdGUgPSAwCisgICAgICAgICAgICBkZWYgZ2V0c3RhdGUoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zdGF0ZQorICAgICAgICAgICAgZGVmIHNldHN0YXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgICAgICAgICBzZWxmLl9fc3RhdGUgPSBzdGF0ZQorICAgICAgICBhID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5nZXRzdGF0ZSgpLCAwKQorICAgICAgICBhLnNldHN0YXRlKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZ2V0c3RhdGUoKSwgMTApCisgICAgICAgIGNsYXNzIEQ6CisgICAgICAgICAgICBjbGFzcyBfX21ldGFjbGFzc19fKHR5cGUpOgorICAgICAgICAgICAgICAgIGRlZiBteXNlbGYoY2xzKTogcmV0dXJuIGNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQubXlzZWxmKCksIEQpCisgICAgICAgIGQgPSBEKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLl9fY2xhc3NfXywgRCkKKyAgICAgICAgY2xhc3MgTTEodHlwZSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBkaWN0KToKKyAgICAgICAgICAgICAgICBkaWN0WydfX3NwYW1fXyddID0gMQorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlLl9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgZGljdCkKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBNMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuX19zcGFtX18sIDEpCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLl9fc3BhbV9fLCAxKQorCisgICAgICAgIGNsYXNzIF9pbnN0YW5jZShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBNMihvYmplY3QpOgorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgZGljdCk6CisgICAgICAgICAgICAgICAgc2VsZiA9IG9iamVjdC5fX25ld19fKGNscykKKyAgICAgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5iYXNlcyA9IGJhc2VzCisgICAgICAgICAgICAgICAgc2VsZi5kaWN0ID0gZGljdAorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZik6CisgICAgICAgICAgICAgICAgaXQgPSBfaW5zdGFuY2UoKQorICAgICAgICAgICAgICAgICMgRWFybHkgYmluZGluZyBvZiBtZXRob2RzCisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBzZWxmLmRpY3Q6CisgICAgICAgICAgICAgICAgICAgIGlmIGtleS5zdGFydHN3aXRoKCJfXyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihpdCwga2V5LCBzZWxmLmRpY3Rba2V5XS5fX2dldF9fKGl0LCBzZWxmKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBNMgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5uYW1lLCAnQycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5iYXNlcywgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3NwYW0nLCBDLmRpY3QpCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNwYW0oKSwgNDIpCisKKyAgICAgICAgIyBNb3JlIG1ldGFjbGFzcyBleGFtcGxlcworCisgICAgICAgIGNsYXNzIGF1dG9zdXBlcih0eXBlKToKKyAgICAgICAgICAgICMgQXV0b21hdGljYWxseSBhZGQgX19zdXBlciB0byB0aGUgY2xhc3MKKyAgICAgICAgICAgICMgVGhpcyB0cmljayBvbmx5IHdvcmtzIGZvciBkeW5hbWljIGNsYXNzZXMKKyAgICAgICAgICAgIGRlZiBfX25ld19fKG1ldGFjbGFzcywgbmFtZSwgYmFzZXMsIGRpY3QpOgorICAgICAgICAgICAgICAgIGNscyA9IHN1cGVyKGF1dG9zdXBlciwgbWV0YWNsYXNzKS5fX25ld19fKG1ldGFjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBiYXNlcywgZGljdCkKKyAgICAgICAgICAgICAgICAjIE5hbWUgbWFuZ2xpbmcgZm9yIF9fc3VwZXIgcmVtb3ZlcyBsZWFkaW5nIHVuZGVyc2NvcmVzCisgICAgICAgICAgICAgICAgd2hpbGUgbmFtZVs6MV0gPT0gIl8iOgorICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZVsxOl0KKyAgICAgICAgICAgICAgICBpZiBuYW1lOgorICAgICAgICAgICAgICAgICAgICBuYW1lID0gIl8lc19fc3VwZXIiICUgbmFtZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiX19zdXBlciIKKyAgICAgICAgICAgICAgICBzZXRhdHRyKGNscywgbmFtZSwgc3VwZXIoY2xzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gYXV0b3N1cGVyCisgICAgICAgICAgICBkZWYgbWV0aChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkEiCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBkZWYgbWV0aChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkIiICsgc2VsZi5fX3N1cGVyLm1ldGgoKQorICAgICAgICBjbGFzcyBDKEEpOgorICAgICAgICAgICAgZGVmIG1ldGgoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDIiArIHNlbGYuX19zdXBlci5tZXRoKCkKKyAgICAgICAgY2xhc3MgRChDLCBCKToKKyAgICAgICAgICAgIGRlZiBtZXRoKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiRCIgKyBzZWxmLl9fc3VwZXIubWV0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRCgpLm1ldGgoKSwgIkRDQkEiKQorICAgICAgICBjbGFzcyBFKEIsIEMpOgorICAgICAgICAgICAgZGVmIG1ldGgoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJFIiArIHNlbGYuX19zdXBlci5tZXRoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFKCkubWV0aCgpLCAiRUJDQSIpCisKKyAgICAgICAgY2xhc3MgYXV0b3Byb3BlcnR5KHR5cGUpOgorICAgICAgICAgICAgIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZSBwcm9wZXJ0eSBhdHRyaWJ1dGVzIHdoZW4gbWV0aG9kcworICAgICAgICAgICAgIyBuYW1lZCBfZ2V0X3ggYW5kL29yIF9zZXRfeCBhcmUgZm91bmQKKyAgICAgICAgICAgIGRlZiBfX25ld19fKG1ldGFjbGFzcywgbmFtZSwgYmFzZXMsIGRpY3QpOgorICAgICAgICAgICAgICAgIGhpdHMgPSB7fQorICAgICAgICAgICAgICAgIGZvciBrZXksIHZhbCBpbiBkaWN0Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBrZXkuc3RhcnRzd2l0aCgiX2dldF8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleVs1Ol0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdldCwgc2V0ID0gaGl0cy5nZXQoa2V5LCAoTm9uZSwgTm9uZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBnZXQgPSB2YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpdHNba2V5XSA9IGdldCwgc2V0CisgICAgICAgICAgICAgICAgICAgIGVsaWYga2V5LnN0YXJ0c3dpdGgoIl9zZXRfIik6CisgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlbNTpdCisgICAgICAgICAgICAgICAgICAgICAgICBnZXQsIHNldCA9IGhpdHMuZ2V0KGtleSwgKE5vbmUsIE5vbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2V0ID0gdmFsCisgICAgICAgICAgICAgICAgICAgICAgICBoaXRzW2tleV0gPSBnZXQsIHNldAorICAgICAgICAgICAgICAgIGZvciBrZXksIChnZXQsIHNldCkgaW4gaGl0cy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgZGljdFtrZXldID0gcHJvcGVydHkoZ2V0LCBzZXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKGF1dG9wcm9wZXJ0eSwgbWV0YWNsYXNzKS5fX25ld19fKG1ldGFjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGJhc2VzLCBkaWN0KQorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGF1dG9wcm9wZXJ0eQorICAgICAgICAgICAgZGVmIF9nZXRfeChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gLXNlbGYuX194CisgICAgICAgICAgICBkZWYgX3NldF94KHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHNlbGYuX194ID0gLXgKKyAgICAgICAgYSA9IEEoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIoYSwgIngiKSkKKyAgICAgICAgYS54ID0gMTIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLngsIDEyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX0FfX3gsIC0xMikKKworICAgICAgICBjbGFzcyBtdWx0aW1ldGFjbGFzcyhhdXRvcHJvcGVydHksIGF1dG9zdXBlcik6CisgICAgICAgICAgICAjIE1lcmdlIG9mIG11bHRpcGxlIGNvb3BlcmF0aW5nIG1ldGFjbGFzc2VzCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gbXVsdGltZXRhY2xhc3MKKyAgICAgICAgICAgIGRlZiBfZ2V0X3goc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJBIgorICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgZGVmIF9nZXRfeChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkIiICsgc2VsZi5fX3N1cGVyLl9nZXRfeCgpCisgICAgICAgIGNsYXNzIEMoQSk6CisgICAgICAgICAgICBkZWYgX2dldF94KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQyIgKyBzZWxmLl9fc3VwZXIuX2dldF94KCkKKyAgICAgICAgY2xhc3MgRChDLCBCKToKKyAgICAgICAgICAgIGRlZiBfZ2V0X3goc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJEIiArIHNlbGYuX19zdXBlci5fZ2V0X3goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQoKS54LCAiRENCQSIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdHlwZSh4KSBkb2Vzbid0IGNhbGwgeC5fX2NsYXNzX18uX19pbml0X18KKyAgICAgICAgY2xhc3MgVCh0eXBlKToKKyAgICAgICAgICAgIGNvdW50ZXIgPSAwCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIFQuY291bnRlciArPSAxCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gVAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFQuY291bnRlciwgMSkKKyAgICAgICAgYSA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYSksIEMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVC5jb3VudGVyLCAxKQorCisgICAgICAgIGNsYXNzIEMob2JqZWN0KTogcGFzcworICAgICAgICBjID0gQygpCisgICAgICAgIHRyeTogYygpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCJjYWxsaW5nIG9iamVjdCB3L28gY2FsbCBtZXRob2Qgc2hvdWxkIHJhaXNlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJUeXBlRXJyb3IiKQorCisgICAgICAgICMgVGVzdGluZyBjb2RlIHRvIGZpbmQgbW9zdCBkZXJpdmVkIGJhc2VjbGFzcworICAgICAgICBjbGFzcyBBKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZS5fX25ld19fKCphcmdzLCAqKmt3YXJncykKKworICAgICAgICBjbGFzcyBCKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IEEKKworICAgICAgICAjIFRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIG9mIEQgaXMgQSByYXRoZXIgdGhhbiB0eXBlLgorICAgICAgICBjbGFzcyBEKEIsIEMpOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfbW9kdWxlX3N1YmNsYXNzZXMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBQeXRob24gc3ViY2xhc3Mgb2YgbW9kdWxlLi4uCisgICAgICAgIGxvZyA9IFtdCisgICAgICAgIE1UID0gdHlwZShzeXMpCisgICAgICAgIGNsYXNzIE1NKE1UKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBNVC5fX2luaXRfXyhzZWxmLCBuYW1lKQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgbG9nLmFwcGVuZCgoImdldGF0dHIiLCBuYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTVQuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKQorICAgICAgICAgICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBsb2cuYXBwZW5kKCgic2V0YXR0ciIsIG5hbWUsIHZhbHVlKSkKKyAgICAgICAgICAgICAgICBNVC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSkKKyAgICAgICAgICAgIGRlZiBfX2RlbGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBsb2cuYXBwZW5kKCgiZGVsYXR0ciIsIG5hbWUpKQorICAgICAgICAgICAgICAgIE1ULl9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpCisgICAgICAgIGEgPSBNTSgiYSIpCisgICAgICAgIGEuZm9vID0gMTIKKyAgICAgICAgeCA9IGEuZm9vCisgICAgICAgIGRlbCBhLmZvbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZywgWygic2V0YXR0ciIsICJmb28iLCAxMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJnZXRhdHRyIiwgImZvbyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZGVsYXR0ciIsICJmb28iKV0pCisKKyAgICAgICAgIyBodHRwOi8vcHl0aG9uLm9yZy9zZi8xMTc0NzEyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNsYXNzIE1vZHVsZSh0eXBlcy5Nb2R1bGVUeXBlLCBzdHIpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiaW5oZXJpdGluZyBmcm9tIE1vZHVsZVR5cGUgYW5kIHN0ciBhdCB0aGUgc2FtZSB0aW1lICIKKyAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGZhaWwiKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfaW5oZXJpdGVuY2Uoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBtdWx0aXBsZSBpbmhlcml0YW5jZS4uLgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5fX3N0YXRlID0gMAorICAgICAgICAgICAgZGVmIGdldHN0YXRlKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc3RhdGUKKyAgICAgICAgICAgIGRlZiBzZXRzdGF0ZShzZWxmLCBzdGF0ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5fX3N0YXRlID0gc3RhdGUKKyAgICAgICAgYSA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZ2V0c3RhdGUoKSwgMCkKKyAgICAgICAgYS5zZXRzdGF0ZSgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmdldHN0YXRlKCksIDEwKQorICAgICAgICBjbGFzcyBEKGRpY3QsIEMpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHR5cGUoe30pLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICAgICAgQy5fX2luaXRfXyhzZWxmKQorICAgICAgICBkID0gRCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5rZXlzKCksIFtdKQorICAgICAgICBkWyJoZWxsbyJdID0gIndvcmxkIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXRlbXMoKSwgWygiaGVsbG8iLCAid29ybGQiKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsiaGVsbG8iXSwgIndvcmxkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldHN0YXRlKCksIDApCisgICAgICAgIGQuc2V0c3RhdGUoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXRzdGF0ZSgpLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChELl9fbXJvX18sIChELCBkaWN0LCBDLCBvYmplY3QpKQorCisgICAgICAgICMgU0YgYnVnICM0NDI4MzMKKyAgICAgICAgY2xhc3MgTm9kZShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChzZWxmLmZvbygpKQorICAgICAgICAgICAgZGVmIGZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIjIzIgorICAgICAgICBjbGFzcyBGcmFnKE5vZGUsIGxpc3QpOgorICAgICAgICAgICAgZGVmIGZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIjQyIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vZGUoKS5fX2ludF9fKCksIDIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChOb2RlKCkpLCAyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGcmFnKCkuX19pbnRfXygpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoRnJhZygpKSwgNDIpCisKKyAgICAgICAgIyBNSSBtaXhpbmcgY2xhc3NpYyBhbmQgbmV3LXN0eWxlIGNsYXNzZXMuCisKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIHggPSAxCisKKyAgICAgICAgY2xhc3MgQihBKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBDKEEpOgorICAgICAgICAgICAgeCA9IDIKKworICAgICAgICBjbGFzcyBEKEIsIEMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQueCwgMSkKKworICAgICAgICAjIENsYXNzaWMgTVJPIGlzIHByZXNlcnZlZCBmb3IgYSBjbGFzc2ljIGJhc2UgY2xhc3MuCisgICAgICAgIGNsYXNzIEUoRCwgb2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFLl9fbXJvX18sIChFLCBELCBCLCBBLCBDLCBvYmplY3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUueCwgMSkKKworICAgICAgICAjIEJ1dCB3aXRoIGEgbWl4IG9mIGNsYXNzaWMgYmFzZXMsIHRoZWlyIE1ST3MgYXJlIGNvbWJpbmVkIHVzaW5nCisgICAgICAgICMgbmV3LXN0eWxlIE1STy4KKyAgICAgICAgY2xhc3MgRihCLCBDLCBvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYuX19tcm9fXywgKEYsIEIsIEMsIEEsIG9iamVjdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRi54LCAyKQorCisgICAgICAgICMgVHJ5IHNvbWV0aGluZyBlbHNlLgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIGNtZXRob2Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDIGEiCisgICAgICAgICAgICBkZWYgYWxsX21ldGhvZChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkMgYiIKKworICAgICAgICBjbGFzcyBNMShDLCBvYmplY3QpOgorICAgICAgICAgICAgZGVmIG0xbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiTTEgYSIKKyAgICAgICAgICAgIGRlZiBhbGxfbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiTTEgYiIKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE0xLl9fbXJvX18sIChNMSwgQywgb2JqZWN0KSkKKyAgICAgICAgbSA9IE0xKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmNtZXRob2QoKSwgIkMgYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5tMW1ldGhvZCgpLCAiTTEgYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5hbGxfbWV0aG9kKCksICJNMSBiIikKKworICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgZGVmIGRtZXRob2Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJEIGEiCisgICAgICAgICAgICBkZWYgYWxsX21ldGhvZChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkQgYiIKKworICAgICAgICBjbGFzcyBNMihELCBvYmplY3QpOgorICAgICAgICAgICAgZGVmIG0ybWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiTTIgYSIKKyAgICAgICAgICAgIGRlZiBhbGxfbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiTTIgYiIKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE0yLl9fbXJvX18sIChNMiwgRCwgQywgb2JqZWN0KSkKKyAgICAgICAgbSA9IE0yKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmNtZXRob2QoKSwgIkMgYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5kbWV0aG9kKCksICJEIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ubTJtZXRob2QoKSwgIk0yIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uYWxsX21ldGhvZCgpLCAiTTIgYiIpCisKKyAgICAgICAgY2xhc3MgTTMoTTEsIE0yLCBvYmplY3QpOgorICAgICAgICAgICAgZGVmIG0zbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiTTMgYSIKKyAgICAgICAgICAgIGRlZiBhbGxfbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiTTMgYiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNMy5fX21yb19fLCAoTTMsIE0xLCBNMiwgRCwgQywgb2JqZWN0KSkKKyAgICAgICAgbSA9IE0zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmNtZXRob2QoKSwgIkMgYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5kbWV0aG9kKCksICJEIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ubTFtZXRob2QoKSwgIk0xIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ubTJtZXRob2QoKSwgIk0yIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ubTNtZXRob2QoKSwgIk0zIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uYWxsX21ldGhvZCgpLCAiTTMgYiIpCisKKyAgICAgICAgY2xhc3MgQ2xhc3NpYzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgTmV3KENsYXNzaWMpOgorICAgICAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSB0eXBlCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIm5ldyBjbGFzcyB3aXRoIG9ubHkgY2xhc3NpYyBiYXNlcyAtIHNob3VsZG4ndCBiZSIpCisKKyAgICBkZWYgdGVzdF9kaWFtb25kX2luaGVyaXRlbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgbXVsdGlwbGUgaW5oZXJpdGFuY2Ugc3BlY2lhbCBjYXNlcy4uLgorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKTogcmV0dXJuICJBIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEEoKS5zcGFtKCksICJBIikKKyAgICAgICAgY2xhc3MgQihBKToKKyAgICAgICAgICAgIGRlZiBib28oc2VsZik6IHJldHVybiAiQiIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOiByZXR1cm4gIkIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQigpLnNwYW0oKSwgIkIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEIoKS5ib28oKSwgIkIiKQorICAgICAgICBjbGFzcyBDKEEpOgorICAgICAgICAgICAgZGVmIGJvbyhzZWxmKTogcmV0dXJuICJDIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMoKS5zcGFtKCksICJBIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDKCkuYm9vKCksICJDIikKKyAgICAgICAgY2xhc3MgRChCLCBDKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQoKS5zcGFtKCksICJCIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEKCkuYm9vKCksICJCIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChELl9fbXJvX18sIChELCBCLCBDLCBBLCBvYmplY3QpKQorICAgICAgICBjbGFzcyBFKEMsIEIpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRSgpLnNwYW0oKSwgIkIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUoKS5ib28oKSwgIkMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUuX19tcm9fXywgKEUsIEMsIEIsIEEsIG9iamVjdCkpCisgICAgICAgICMgTVJPIG9yZGVyIGRpc2FncmVlbWVudAorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBGKEQsIEUpOiBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIE1STyBvcmRlciBkaXNhZ3JlZW1lbnQgKEYpIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgRyhFLCBEKTogcGFzcworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBNUk8gb3JkZXIgZGlzYWdyZWVtZW50IChHKSIpCisKKyAgICAjIHNlZSB0aHJlYWQgcHl0aG9uLWRldi8yMDAyLU9jdG9iZXIvMDI5MDM1Lmh0bWwKKyAgICBkZWYgdGVzdF9leDVfZnJvbV9jM19zd2l0Y2goc2VsZik6CisgICAgICAgICMgVGVzdGluZyBleDUgZnJvbSBDMyBzd2l0Y2ggZGlzY3Vzc2lvbi4uLgorICAgICAgICBjbGFzcyBBKG9iamVjdCk6IHBhc3MKKyAgICAgICAgY2xhc3MgQihvYmplY3QpOiBwYXNzCisgICAgICAgIGNsYXNzIEMob2JqZWN0KTogcGFzcworICAgICAgICBjbGFzcyBYKEEpOiBwYXNzCisgICAgICAgIGNsYXNzIFkoQSk6IHBhc3MKKyAgICAgICAgY2xhc3MgWihYLEIsWSxDKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFouX19tcm9fXywgKFosIFgsIEIsIFksIEEsIEMsIG9iamVjdCkpCisKKyAgICAjIHNlZSAiQSBNb25vdG9uaWMgU3VwZXJjbGFzcyBMaW5lYXJpemF0aW9uIGZvciBEeWxhbiIsCisgICAgIyBieSBLaW0gQmFycmV0dCBldCBhbC4gKE9PUFNMQSAxOTk2KQorICAgIGRlZiB0ZXN0X21vbm90b25pY2l0eShzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIE1STyBtb25vdG9uaWNpdHkuLi4KKyAgICAgICAgY2xhc3MgQm9hdChvYmplY3QpOiBwYXNzCisgICAgICAgIGNsYXNzIERheUJvYXQoQm9hdCk6IHBhc3MKKyAgICAgICAgY2xhc3MgV2hlZWxCb2F0KEJvYXQpOiBwYXNzCisgICAgICAgIGNsYXNzIEVuZ2luZUxlc3MoRGF5Qm9hdCk6IHBhc3MKKyAgICAgICAgY2xhc3MgU21hbGxNdWx0aWh1bGwoRGF5Qm9hdCk6IHBhc3MKKyAgICAgICAgY2xhc3MgUGVkYWxXaGVlbEJvYXQoRW5naW5lTGVzcyxXaGVlbEJvYXQpOiBwYXNzCisgICAgICAgIGNsYXNzIFNtYWxsQ2F0YW1hcmFuKFNtYWxsTXVsdGlodWxsKTogcGFzcworICAgICAgICBjbGFzcyBQZWRhbG8oUGVkYWxXaGVlbEJvYXQsU21hbGxDYXRhbWFyYW4pOiBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQZWRhbFdoZWVsQm9hdC5fX21yb19fLAorICAgICAgICAgICAgICAoUGVkYWxXaGVlbEJvYXQsIEVuZ2luZUxlc3MsIERheUJvYXQsIFdoZWVsQm9hdCwgQm9hdCwgb2JqZWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTbWFsbENhdGFtYXJhbi5fX21yb19fLAorICAgICAgICAgICAgICAoU21hbGxDYXRhbWFyYW4sIFNtYWxsTXVsdGlodWxsLCBEYXlCb2F0LCBCb2F0LCBvYmplY3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBlZGFsby5fX21yb19fLAorICAgICAgICAgICAgICAoUGVkYWxvLCBQZWRhbFdoZWVsQm9hdCwgRW5naW5lTGVzcywgU21hbGxDYXRhbWFyYW4sCisgICAgICAgICAgICAgICBTbWFsbE11bHRpaHVsbCwgRGF5Qm9hdCwgV2hlZWxCb2F0LCBCb2F0LCBvYmplY3QpKQorCisgICAgIyBzZWUgIkEgTW9ub3RvbmljIFN1cGVyY2xhc3MgTGluZWFyaXphdGlvbiBmb3IgRHlsYW4iLAorICAgICMgYnkgS2ltIEJhcnJldHQgZXQgYWwuIChPT1BTTEEgMTk5NikKKyAgICBkZWYgdGVzdF9jb25zaXN0ZW5jeV93aXRoX2VwZyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGNvbnNpc3RlbmN5IHdpdGggRVBHLi4uCisgICAgICAgIGNsYXNzIFBhbmUob2JqZWN0KTogcGFzcworICAgICAgICBjbGFzcyBTY3JvbGxpbmdNaXhpbihvYmplY3QpOiBwYXNzCisgICAgICAgIGNsYXNzIEVkaXRpbmdNaXhpbihvYmplY3QpOiBwYXNzCisgICAgICAgIGNsYXNzIFNjcm9sbGFibGVQYW5lKFBhbmUsU2Nyb2xsaW5nTWl4aW4pOiBwYXNzCisgICAgICAgIGNsYXNzIEVkaXRhYmxlUGFuZShQYW5lLEVkaXRpbmdNaXhpbik6IHBhc3MKKyAgICAgICAgY2xhc3MgRWRpdGFibGVTY3JvbGxhYmxlUGFuZShTY3JvbGxhYmxlUGFuZSxFZGl0YWJsZVBhbmUpOiBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFZGl0YWJsZVNjcm9sbGFibGVQYW5lLl9fbXJvX18sCisgICAgICAgICAgICAgIChFZGl0YWJsZVNjcm9sbGFibGVQYW5lLCBTY3JvbGxhYmxlUGFuZSwgRWRpdGFibGVQYW5lLCBQYW5lLAorICAgICAgICAgICAgICAgIFNjcm9sbGluZ01peGluLCBFZGl0aW5nTWl4aW4sIG9iamVjdCkpCisKKyAgICBkZWYgdGVzdF9tcm9fZGlzYWdyZWVtZW50KHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgZXJyb3IgbWVzc2FnZXMgZm9yIE1STyBkaXNhZ3JlZW1lbnQuLi4KKyAgICAgICAgbXJvX2Vycl9tc2cgPSAiIiJDYW5ub3QgY3JlYXRlIGEgY29uc2lzdGVudCBtZXRob2QgcmVzb2x1dGlvbgorb3JkZXIgKE1STykgZm9yIGJhc2VzICIiIgorCisgICAgICAgIGRlZiByYWlzZXMoZXhjLCBleHBlY3RlZCwgY2FsbGFibGUsICphcmdzKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjYWxsYWJsZSgqYXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBleGMsIG1zZzoKKyAgICAgICAgICAgICAgICAjIHRoZSBleGFjdCBtc2cgaXMgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgYW4gaW1wbCBkZXRhaWwKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuY2hlY2tfaW1wbF9kZXRhaWwoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN0cihtc2cpLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJNZXNzYWdlICVyLCBleHBlY3RlZCAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHIobXNnKSwgZXhwZWN0ZWQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkICVzIiAlIGV4YykKKworICAgICAgICBjbGFzcyBBKG9iamVjdCk6IHBhc3MKKyAgICAgICAgY2xhc3MgQihBKTogcGFzcworICAgICAgICBjbGFzcyBDKG9iamVjdCk6IHBhc3MKKworICAgICAgICAjIFRlc3Qgc29tZSB2ZXJ5IHNpbXBsZSBlcnJvcnMKKyAgICAgICAgcmFpc2VzKFR5cGVFcnJvciwgImR1cGxpY2F0ZSBiYXNlIGNsYXNzIEEiLAorICAgICAgICAgICAgICAgdHlwZSwgIlgiLCAoQSwgQSksIHt9KQorICAgICAgICByYWlzZXMoVHlwZUVycm9yLCBtcm9fZXJyX21zZywKKyAgICAgICAgICAgICAgIHR5cGUsICJYIiwgKEEsIEIpLCB7fSkKKyAgICAgICAgcmFpc2VzKFR5cGVFcnJvciwgbXJvX2Vycl9tc2csCisgICAgICAgICAgICAgICB0eXBlLCAiWCIsIChBLCBDLCBCKSwge30pCisgICAgICAgICMgVGVzdCBhIHNsaWdodGx5IG1vcmUgY29tcGxleCBlcnJvcgorICAgICAgICBjbGFzcyBHcmlkTGF5b3V0KG9iamVjdCk6IHBhc3MKKyAgICAgICAgY2xhc3MgSG9yaXpvbnRhbEdyaWQoR3JpZExheW91dCk6IHBhc3MKKyAgICAgICAgY2xhc3MgVmVydGljYWxHcmlkKEdyaWRMYXlvdXQpOiBwYXNzCisgICAgICAgIGNsYXNzIEhWR3JpZChIb3Jpem9udGFsR3JpZCwgVmVydGljYWxHcmlkKTogcGFzcworICAgICAgICBjbGFzcyBWSEdyaWQoVmVydGljYWxHcmlkLCBIb3Jpem9udGFsR3JpZCk6IHBhc3MKKyAgICAgICAgcmFpc2VzKFR5cGVFcnJvciwgbXJvX2Vycl9tc2csCisgICAgICAgICAgICAgICB0eXBlLCAiQ29uZnVzZWRHcmlkIiwgKEhWR3JpZCwgVkhHcmlkKSwge30pCisKKyAgICBkZWYgdGVzdF9vYmplY3RfY2xhc3Moc2VsZik6CisgICAgICAgICMgVGVzdGluZyBvYmplY3QgY2xhc3MuLi4KKyAgICAgICAgYSA9IG9iamVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2NsYXNzX18sIG9iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGEpLCBvYmplY3QpCisgICAgICAgIGIgPSBvYmplY3QoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihhLCAiZm9vIikpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGEuZm9vID0gMTIKKyAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib2JqZWN0KCkgc2hvdWxkIG5vdCBhbGxvdyBzZXR0aW5nIGEgZm9vIGF0dHJpYnV0ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihvYmplY3QoKSwgIl9fZGljdF9fIikpCisKKyAgICAgICAgY2xhc3MgQ2RpY3Qob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgeCA9IENkaWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB7fSkKKyAgICAgICAgeC5mb28gPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5mb28sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeydmb28nOiAxfSkKKworICAgIGRlZiB0ZXN0X3Nsb3RzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgX19zbG90c19fLi4uCisgICAgICAgIGNsYXNzIEMwKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbXQorICAgICAgICB4ID0gQzAoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoeCwgIl9fZGljdF9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cih4LCAiZm9vIikpCisKKyAgICAgICAgY2xhc3MgQzEob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYSddCisgICAgICAgIHggPSBDMSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cih4LCAiX19kaWN0X18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHgsICJhIikpCisgICAgICAgIHguYSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsIDEpCisgICAgICAgIHguYSA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsIE5vbmUpCisgICAgICAgIGRlbCB4LmEKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHgsICJhIikpCisKKyAgICAgICAgY2xhc3MgQzMob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYScsICdiJywgJ2MnXQorICAgICAgICB4ID0gQzMoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoeCwgIl9fZGljdF9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cih4LCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoeCwgJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHgsICdjJykpCisgICAgICAgIHguYSA9IDEKKyAgICAgICAgeC5iID0gMgorICAgICAgICB4LmMgPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5hLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmMsIDMpCisKKyAgICAgICAgY2xhc3MgQzQob2JqZWN0KToKKyAgICAgICAgICAgICIiIlZhbGlkYXRlIG5hbWUgbWFuZ2xpbmciIiIKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnX19hJ10KKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5fX2EgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2EKKyAgICAgICAgeCA9IEM0KDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cih4LCAnX19kaWN0X18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHgsICdfX2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmdldCgpLCA1KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB4Ll9fYSA9IDYKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJEb3VibGUgdW5kZXJzY29yZWQgbmFtZXMgbm90IG1hbmdsZWQiKQorCisgICAgICAgICMgTWFrZSBzdXJlIHNsb3QgbmFtZXMgYXJlIHByb3BlciBpZGVudGlmaWVycworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICAgICAgX19zbG90c19fID0gW05vbmVdCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIltOb25lXSBzbG90cyBub3QgY2F1Z2h0IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsiZm9vIGJhciJdCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlsnZm9vIGJhciddIHNsb3RzIG5vdCBjYXVnaHQiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICAgICAgX19zbG90c19fID0gWyJmb29cMGJhciJdCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlsnZm9vXFwwYmFyJ10gc2xvdHMgbm90IGNhdWdodCIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbIjEiXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJbJzEnXSBzbG90cyBub3QgY2F1Z2h0IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsiIl0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiWycnXSBzbG90cyBub3QgY2F1Z2h0IikKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gWyJhIiwgImFfYiIsICJfYSIsICJBMDEyMzQ1Njc4OVoiXQorICAgICAgICAjIFhYWChubm9yd2l0eik6IHdhcyB0aGVyZSBzdXBwb3NlZCB0byBiZSBzb21ldGhpbmcgdGVzdGVkCisgICAgICAgICMgZnJvbSB0aGUgY2xhc3MgYWJvdmU/CisKKyAgICAgICAgIyBUZXN0IGEgc2luZ2xlIHN0cmluZyBpcyBub3QgZXhwYW5kZWQgYXMgYSBzZXF1ZW5jZS4KKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gImFiYyIKKyAgICAgICAgYyA9IEMoKQorICAgICAgICBjLmFiYyA9IDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmFiYywgNSkKKworICAgICAgICAjIFRlc3QgdW5pY29kZSBzbG90IG5hbWVzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHVuaWNvZGUKKyAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVGVzdCBhIHNpbmdsZSB1bmljb2RlIHN0cmluZyBpcyBub3QgZXhwYW5kZWQgYXMgYSBzZXF1ZW5jZS4KKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSB1bmljb2RlKCJhYmMiKQorICAgICAgICAgICAgYyA9IEMoKQorICAgICAgICAgICAgYy5hYmMgPSA1CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYWJjLCA1KQorCisgICAgICAgICAgICAjIF91bmljb2RlX3RvX3N0cmluZyB1c2VkIHRvIG1vZGlmeSBzbG90cyBpbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMKKyAgICAgICAgICAgIHNsb3RzID0gKHVuaWNvZGUoImZvbyIpLCB1bmljb2RlKCJiYXIiKSkKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBzbG90cworICAgICAgICAgICAgeCA9IEMoKQorICAgICAgICAgICAgeC5mb28gPSA1CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZm9vLCA1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHNsb3RzWzBdKSwgdW5pY29kZSkKKyAgICAgICAgICAgICMgdGhpcyB1c2VkIHRvIGxlYWsgcmVmZXJlbmNlcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgX19zbG90c19fID0gW3VuaWNocigxMjgpXQorICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIFVuaWNvZGVFbmNvZGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlt1bmljaHIoMTI4KV0gc2xvdHMgbm90IGNhdWdodCIpCisKKyAgICAgICAgIyBUZXN0IGxlYWtzCisgICAgICAgIGNsYXNzIENvdW50ZWQob2JqZWN0KToKKyAgICAgICAgICAgIGNvdW50ZXIgPSAwICAgICMgY291bnRzIHRoZSBudW1iZXIgb2YgaW5zdGFuY2VzIGFsaXZlCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgQ291bnRlZC5jb3VudGVyICs9IDEKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIENvdW50ZWQuY291bnRlciAtPSAxCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYScsICdiJywgJ2MnXQorICAgICAgICB4ID0gQygpCisgICAgICAgIHguYSA9IENvdW50ZWQoKQorICAgICAgICB4LmIgPSBDb3VudGVkKCkKKyAgICAgICAgeC5jID0gQ291bnRlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ291bnRlZC5jb3VudGVyLCAzKQorICAgICAgICBkZWwgeAorICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ291bnRlZC5jb3VudGVyLCAwKQorICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB4ID0gRCgpCisgICAgICAgIHguYSA9IENvdW50ZWQoKQorICAgICAgICB4LnogPSBDb3VudGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb3VudGVkLmNvdW50ZXIsIDIpCisgICAgICAgIGRlbCB4CisgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb3VudGVkLmNvdW50ZXIsIDApCisgICAgICAgIGNsYXNzIEUoRCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2UnXQorICAgICAgICB4ID0gRSgpCisgICAgICAgIHguYSA9IENvdW50ZWQoKQorICAgICAgICB4LnogPSBDb3VudGVkKCkKKyAgICAgICAgeC5lID0gQ291bnRlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ291bnRlZC5jb3VudGVyLCAzKQorICAgICAgICBkZWwgeAorICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ291bnRlZC5jb3VudGVyLCAwKQorCisgICAgICAgICMgVGVzdCBjeWNsaWNhbCBsZWFrcyBbU0YgYnVnIDUxOTYyMV0KKyAgICAgICAgY2xhc3MgRihvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gWydhJywgJ2InXQorICAgICAgICBzID0gRigpCisgICAgICAgIHMuYSA9IFtDb3VudGVkKCksIHNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ291bnRlZC5jb3VudGVyLCAxKQorICAgICAgICBzID0gTm9uZQorICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ291bnRlZC5jb3VudGVyLCAwKQorCisgICAgICAgICMgVGVzdCBsb29rdXAgbGVha3MgW1NGIGJ1ZyA1NzI1NjddCisgICAgICAgIGlmIGhhc2F0dHIoZ2MsICdnZXRfb2JqZWN0cycpOgorICAgICAgICAgICAgY2xhc3MgRyhvYmplY3QpOgorICAgICAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgICAgICAgICAgZyA9IEcoKQorICAgICAgICAgICAgb3JpZ19vYmplY3RzID0gbGVuKGdjLmdldF9vYmplY3RzKCkpCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTApOgorICAgICAgICAgICAgICAgIGc9PWcKKyAgICAgICAgICAgIG5ld19vYmplY3RzID0gbGVuKGdjLmdldF9vYmplY3RzKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWdfb2JqZWN0cywgbmV3X29iamVjdHMpCisKKyAgICAgICAgY2xhc3MgSChvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gWydhJywgJ2InXQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuYSA9IDEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSAyCisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmXyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmXy5hLCAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZl8uYiwgMikKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2FwdHVyZWRfb3V0cHV0KCdzdGRlcnInKSBhcyBzOgorICAgICAgICAgICAgaCA9IEgoKQorICAgICAgICAgICAgZGVsIGgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksICcnKQorCisgICAgICAgIGNsYXNzIFgob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9ICJhIgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBYKCkuYQorCisgICAgZGVmIHRlc3Rfc2xvdHNfc3BlY2lhbChzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIF9fZGljdF9fIGFuZCBfX3dlYWtyZWZfXyBpbiBfX3Nsb3RzX18uLi4KKyAgICAgICAgY2xhc3MgRChvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gWyJfX2RpY3RfXyJdCisgICAgICAgIGEgPSBEKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoYSwgIl9fZGljdF9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihhLCAiX193ZWFrcmVmX18iKSkKKyAgICAgICAgYS5mb28gPSA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19kaWN0X18sIHsiZm9vIjogNDJ9KQorCisgICAgICAgIGNsYXNzIFcob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsiX193ZWFrcmVmX18iXQorICAgICAgICBhID0gVygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGEsICJfX3dlYWtyZWZfXyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYSwgIl9fZGljdF9fIikpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGEuZm9vID0gNDIKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYmUgYWxsb3dlZCB0byBzZXQgYS5mb28iKQorCisgICAgICAgIGNsYXNzIEMxKFcsIEQpOgorICAgICAgICAgICAgX19zbG90c19fID0gW10KKyAgICAgICAgYSA9IEMxKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoYSwgIl9fZGljdF9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGEsICJfX3dlYWtyZWZfXyIpKQorICAgICAgICBhLmZvbyA9IDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2RpY3RfXywgeyJmb28iOiA0Mn0pCisKKyAgICAgICAgY2xhc3MgQzIoRCwgVyk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbXQorICAgICAgICBhID0gQzIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihhLCAiX19kaWN0X18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoYSwgIl9fd2Vha3JlZl9fIikpCisgICAgICAgIGEuZm9vID0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZGljdF9fLCB7ImZvbyI6IDQyfSkKKworICAgIGRlZiB0ZXN0X3Nsb3RzX2Rlc2NyaXB0b3Ioc2VsZik6CisgICAgICAgICMgSXNzdWUyMTE1OiBzbG90IGRlc2NyaXB0b3JzIGRpZCBub3QgY29ycmVjdGx5IGNoZWNrCisgICAgICAgICMgdGhlIHR5cGUgb2YgdGhlIGdpdmVuIG9iamVjdAorICAgICAgICBpbXBvcnQgYWJjCisgICAgICAgIGNsYXNzIE15QUJDOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IGFiYy5BQkNNZXRhCisgICAgICAgICAgICBfX3Nsb3RzX18gPSAiYSIKKworICAgICAgICBjbGFzcyBVbnJlbGF0ZWQob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgTXlBQkMucmVnaXN0ZXIoVW5yZWxhdGVkKQorCisgICAgICAgIHUgPSBVbnJlbGF0ZWQoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodSwgTXlBQkMpCisKKyAgICAgICAgIyBUaGlzIHVzZWQgdG8gY3Jhc2gKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBNeUFCQy5hLl9fc2V0X18sIHUsIDMpCisKKyAgICBkZWYgdGVzdF9tZXRhY2xhc3NfY21wKHNlbGYpOgorICAgICAgICAjIFNlZSBidWcgNzQ5MS4KKyAgICAgICAgY2xhc3MgTSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgY2xhc3MgWChvYmplY3QpOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IE0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFggPCBNKQorCisgICAgZGVmIHRlc3RfZHluYW1pY3Moc2VsZik6CisgICAgICAgICMgVGVzdGluZyBjbGFzcyBhdHRyaWJ1dGUgcHJvcGFnYXRpb24uLi4KKyAgICAgICAgY2xhc3MgRChvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBFKEQpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBGKEQpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBELmZvbyA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChELmZvbywgMSkKKyAgICAgICAgIyBUZXN0IHRoYXQgZHluYW1pYyBhdHRyaWJ1dGVzIGFyZSBpbmhlcml0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFLmZvbywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGLmZvbywgMSkKKyAgICAgICAgIyBUZXN0IGR5bmFtaWMgaW5zdGFuY2VzCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYSA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYSwgImZvb2JhciIpKQorICAgICAgICBDLmZvb2JhciA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmZvb2JhciwgMikKKyAgICAgICAgQy5tZXRob2QgPSBsYW1iZGEgc2VsZjogNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLm1ldGhvZCgpLCA0MikKKyAgICAgICAgQy5fX3JlcHJfXyA9IGxhbWJkYSBzZWxmOiAiQygpIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYSksICJDKCkiKQorICAgICAgICBDLl9faW50X18gPSBsYW1iZGEgc2VsZjogMTAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGEpLCAxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5mb29iYXIsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihhLCAic3BhbSIpKQorICAgICAgICBkZWYgbXlnZXRhdHRyKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgaWYgbmFtZSA9PSAic3BhbSI6CisgICAgICAgICAgICAgICAgcmV0dXJuICJzcGFtIgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKyAgICAgICAgQy5fX2dldGF0dHJfXyA9IG15Z2V0YXR0cgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuc3BhbSwgInNwYW0iKQorICAgICAgICBhLm5ldyA9IDEyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5uZXcsIDEyKQorICAgICAgICBkZWYgbXlzZXRhdHRyKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gInNwYW0iOgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKQorICAgICAgICBDLl9fc2V0YXR0cl9fID0gbXlzZXRhdHRyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGEuc3BhbSA9ICJub3Qgc3BhbSIKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBBdHRyaWJ1dGVFcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5zcGFtLCAic3BhbSIpCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGQgPSBEKCkKKyAgICAgICAgZC5mb28gPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mb28sIDEpCisKKyAgICAgICAgIyBUZXN0IGhhbmRsaW5nIG9mIGludCpzZXEgYW5kIHNlcSppbnQKKyAgICAgICAgY2xhc3MgSShpbnQpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIipJKDIpLCAiYWEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEkoMikqImEiLCAiYWEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIqSSgzKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJKDMpKjIsIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSSgzKSpJKDIpLCA2KQorCisgICAgICAgICMgVGVzdCBoYW5kbGluZyBvZiBsb25nKnNlcSBhbmQgc2VxKmxvbmcKKyAgICAgICAgY2xhc3MgTChsb25nKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIqTCgyTCksICJhYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTCgyTCkqImEiLCAiYWEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIqTCgzKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMKDMpKjIsIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTCgzKSpMKDIpLCA2KQorCisgICAgICAgICMgVGVzdCBjb21wYXJpc29uIG9mIGNsYXNzZXMgd2l0aCBkeW5hbWljIG1ldGFjbGFzc2VzCisgICAgICAgIGNsYXNzIGR5bmFtaWNtZXRhY2xhc3ModHlwZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIHNvbWVjbGFzczoKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBkeW5hbWljbWV0YWNsYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc29tZWNsYXNzLCBvYmplY3QpCisKKyAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBlcnJvcnMuLi4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgQyhsaXN0LCBkaWN0KToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImluaGVyaXRhbmNlIGZyb20gYm90aCBsaXN0IGFuZCBkaWN0IHNob3VsZCBiZSBpbGxlZ2FsIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBDKG9iamVjdCwgTm9uZSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJpbmhlcml0YW5jZSBmcm9tIG5vbi10eXBlIHNob3VsZCBiZSBpbGxlZ2FsIikKKyAgICAgICAgY2xhc3MgQ2xhc3NpYzoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBDKHR5cGUobGVuKSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJpbmhlcml0YW5jZSBmcm9tIENGdW5jdGlvbiBzaG91bGQgYmUgaWxsZWdhbCIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IDEKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiX19zbG90c19fID0gMSBzaG91bGQgYmUgaWxsZWdhbCIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsxXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJfX3Nsb3RzX18gPSBbMV0gc2hvdWxkIGJlIGlsbGVnYWwiKQorCisgICAgICAgIGNsYXNzIE0xKHR5cGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBNMih0eXBlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQTEob2JqZWN0KToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBNMQorICAgICAgICBjbGFzcyBBMihvYmplY3QpOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IE0yCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNsYXNzIEIoQTEsIEEyKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImZpbmRpbmcgdGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3Mgc2hvdWxkIGhhdmUgZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X2NsYXNzbWV0aG9kcyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGNsYXNzIG1ldGhvZHMuLi4KKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIGZvbygqYSk6IHJldHVybiBhCisgICAgICAgICAgICBnb28gPSBjbGFzc21ldGhvZChmb28pCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmdvbygxKSwgKEMsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZ29vKDEpLCAoQywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5mb28oMSksIChjLCAxKSkKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZCA9IEQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuZ29vKDEpLCAoRCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nb28oMSksIChELCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZvbygxKSwgKGQsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuZm9vKGQsIDEpLCAoZCwgMSkpCisgICAgICAgICMgVGVzdCBmb3IgYSBzcGVjaWZpYyBjcmFzaCAoU0YgYnVnIDUyODEzMikKKyAgICAgICAgZGVmIGYoY2xzLCBhcmcpOiByZXR1cm4gKGNscywgYXJnKQorICAgICAgICBmZiA9IGNsYXNzbWV0aG9kKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmYuX19nZXRfXygwLCBpbnQpKDQyKSwgKGludCwgNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZmLl9fZ2V0X18oMCkoNDIpLCAoaW50LCA0MikpCisKKyAgICAgICAgIyBUZXN0IHN1cGVyKCkgd2l0aCBjbGFzc21ldGhvZHMgKFNGIGJ1ZyA1MzU0NDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5nb28uaW1fc2VsZiwgQykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChELmdvby5pbV9zZWxmLCBEKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1cGVyKEQsRCkuZ29vLmltX3NlbGYsIEQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VwZXIoRCxkKS5nb28uaW1fc2VsZiwgRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdXBlcihELEQpLmdvbygpLCAoRCwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1cGVyKEQsZCkuZ29vKCksIChELCkpCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBhIG5vbi1jYWxsYWJsZSB3aWxsIHJhaXNlCisgICAgICAgIG1ldGggPSBjbGFzc21ldGhvZCgxKS5fX2dldF9fKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCkKKworICAgICAgICAjIFZlcmlmeSB0aGF0IGNsYXNzbWV0aG9kKCkgZG9lc24ndCBhbGxvdyBrZXl3b3JkIGFyZ3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3NtZXRob2QoZiwga3c9MSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiY2xhc3NtZXRob2Qgc2hvdWxkbid0IGFjY2VwdCBrZXl3b3JkIGFyZ3MiKQorCisgICAgQHRlc3Rfc3VwcG9ydC5pbXBsX2RldGFpbCgidGhlIG1vZHVsZSAneHhzdWJ0eXBlJyBpcyBpbnRlcm5hbCIpCisgICAgZGVmIHRlc3RfY2xhc3NtZXRob2RzX2luX2Moc2VsZik6CisgICAgICAgICMgVGVzdGluZyBDLWJhc2VkIGNsYXNzIG1ldGhvZHMuLi4KKyAgICAgICAgaW1wb3J0IHh4c3VidHlwZSBhcyBzcGFtCisgICAgICAgIGEgPSAoMSwgMiwgMykKKyAgICAgICAgZCA9IHsnYWJjJzogMTIzfQorICAgICAgICB4LCBhMSwgZDEgPSBzcGFtLnNwYW1saXN0LmNsYXNzbWV0aCgqYSwgKipkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHNwYW0uc3BhbWxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZDEpCisgICAgICAgIHgsIGExLCBkMSA9IHNwYW0uc3BhbWxpc3QoKS5jbGFzc21ldGgoKmEsICoqZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBzcGFtLnNwYW1saXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGQxKQorICAgICAgICBzcGFtX2NtID0gc3BhbS5zcGFtbGlzdC5fX2RpY3RfX1snY2xhc3NtZXRoJ10KKyAgICAgICAgeDIsIGEyLCBkMiA9IHNwYW1fY20oc3BhbS5zcGFtbGlzdCwgKmEsICoqZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Miwgc3BhbS5zcGFtbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhMiwgYTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIsIGQxKQorICAgICAgICBjbGFzcyBTdWJTcGFtKHNwYW0uc3BhbWxpc3QpOiBwYXNzCisgICAgICAgIHgyLCBhMiwgZDIgPSBzcGFtX2NtKFN1YlNwYW0sICphLCAqKmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeDIsIFN1YlNwYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYTIsIGExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLCBkMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc3BhbV9jbSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNwYW1fY20oc3BhbS5zcGFtbGlzdCgpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzcGFtX2NtKGxpc3QpCisKKyAgICBkZWYgdGVzdF9zdGF0aWNtZXRob2RzKHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgc3RhdGljIG1ldGhvZHMuLi4KKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIGZvbygqYSk6IHJldHVybiBhCisgICAgICAgICAgICBnb28gPSBzdGF0aWNtZXRob2QoZm9vKQorICAgICAgICBjID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5nb28oMSksICgxLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5nb28oMSksICgxLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5mb28oMSksIChjLCAxLCkpCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGQgPSBEKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChELmdvbygxKSwgKDEsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdvbygxKSwgKDEsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZvbygxKSwgKGQsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuZm9vKGQsIDEpLCAoZCwgMSkpCisKKyAgICBAdGVzdF9zdXBwb3J0LmltcGxfZGV0YWlsKCJ0aGUgbW9kdWxlICd4eHN1YnR5cGUnIGlzIGludGVybmFsIikKKyAgICBkZWYgdGVzdF9zdGF0aWNtZXRob2RzX2luX2Moc2VsZik6CisgICAgICAgICMgVGVzdGluZyBDLWJhc2VkIHN0YXRpYyBtZXRob2RzLi4uCisgICAgICAgIGltcG9ydCB4eHN1YnR5cGUgYXMgc3BhbQorICAgICAgICBhID0gKDEsIDIsIDMpCisgICAgICAgIGQgPSB7ImFiYyI6IDEyM30KKyAgICAgICAgeCwgYTEsIGQxID0gc3BhbS5zcGFtbGlzdC5zdGF0aWNtZXRoKCphLCAqKmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBhMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkMSkKKyAgICAgICAgeCwgYTEsIGQyID0gc3BhbS5zcGFtbGlzdCgpLnN0YXRpY21ldGgoKmEsICoqZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGQxKQorCisgICAgZGVmIHRlc3RfY2xhc3NpYyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGNsYXNzaWMgY2xhc3Nlcy4uLgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIGZvbygqYSk6IHJldHVybiBhCisgICAgICAgICAgICBnb28gPSBjbGFzc21ldGhvZChmb28pCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmdvbygxKSwgKEMsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZ29vKDEpLCAoQywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5mb28oMSksIChjLCAxKSkKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZCA9IEQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuZ29vKDEpLCAoRCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nb28oMSksIChELCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZvbygxKSwgKGQsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuZm9vKGQsIDEpLCAoZCwgMSkpCisgICAgICAgIGNsYXNzIEU6ICMgKm5vdCogc3ViY2xhc3NpbmcgZnJvbSBDCisgICAgICAgICAgICBmb28gPSBDLmZvbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUoKS5mb28sIEMuZm9vKSAjIGkuZS4sIHVuYm91bmQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoQy5mb28uX19nZXRfXyhDKCkpKS5zdGFydHN3aXRoKCI8Ym91bmQgbWV0aG9kICIpKQorCisgICAgZGVmIHRlc3RfY29tcGF0dHIoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBjb21wdXRlZCBhdHRyaWJ1dGVzLi4uCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGNsYXNzIGNvbXB1dGVkX2F0dHJpYnV0ZShvYmplY3QpOgorICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnZXQsIHNldD1Ob25lLCBkZWxldGU9Tm9uZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19nZXQgPSBnZXQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX3NldCA9IHNldAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9fZGVsZXRlID0gZGVsZXRlCisgICAgICAgICAgICAgICAgZGVmIF9fZ2V0X18oc2VsZiwgb2JqLCB0eXBlPU5vbmUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2dldChvYmopCisgICAgICAgICAgICAgICAgZGVmIF9fc2V0X18oc2VsZiwgb2JqLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc2V0KG9iaiwgdmFsdWUpCisgICAgICAgICAgICAgICAgZGVmIF9fZGVsZXRlX18oc2VsZiwgb2JqKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19kZWxldGUob2JqKQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuX194ID0gMAorICAgICAgICAgICAgZGVmIF9fZ2V0X3goc2VsZik6CisgICAgICAgICAgICAgICAgeCA9IHNlbGYuX194CisgICAgICAgICAgICAgICAgc2VsZi5fX3ggPSB4KzEKKyAgICAgICAgICAgICAgICByZXR1cm4geAorICAgICAgICAgICAgZGVmIF9fc2V0X3goc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi5fX3ggPSB4CisgICAgICAgICAgICBkZWYgX19kZWxldGVfeChzZWxmKToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fX3gKKyAgICAgICAgICAgIHggPSBjb21wdXRlZF9hdHRyaWJ1dGUoX19nZXRfeCwgX19zZXRfeCwgX19kZWxldGVfeCkKKyAgICAgICAgYSA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEueCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLngsIDEpCisgICAgICAgIGEueCA9IDEwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS54LCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLngsIDExKQorICAgICAgICBkZWwgYS54CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzYXR0cihhLCAneCcpLCAwKQorCisgICAgZGVmIHRlc3RfbmV3c2xvdHMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBfX25ld19fIHNsb3Qgb3ZlcnJpZGUuLi4KKyAgICAgICAgY2xhc3MgQyhsaXN0KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CisgICAgICAgICAgICAgICAgc2VsZiA9IGxpc3QuX19uZXdfXyhjbHMpCisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IHNlbGYuZm9vICsgMgorICAgICAgICBhID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5mb28sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2NsYXNzX18sIEMpCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGIgPSBEKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmZvbywgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLl9fY2xhc3NfXywgRCkKKworICAgIGRlZiB0ZXN0X2FsdG1ybyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIG1ybygpIGFuZCBvdmVycmlkaW5nIGl0Li4uCisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBmKHNlbGYpOiByZXR1cm4gIkEiCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEMoQSk6CisgICAgICAgICAgICBkZWYgZihzZWxmKTogcmV0dXJuICJDIgorICAgICAgICBjbGFzcyBEKEIsIEMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQubXJvKCksIFtELCBCLCBDLCBBLCBvYmplY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuX19tcm9fXywgKEQsIEIsIEMsIEEsIG9iamVjdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRCgpLmYoKSwgIkMiKQorCisgICAgICAgIGNsYXNzIFBlcnZlcnNlTWV0YVR5cGUodHlwZSk6CisgICAgICAgICAgICBkZWYgbXJvKGNscyk6CisgICAgICAgICAgICAgICAgTCA9IHR5cGUubXJvKGNscykKKyAgICAgICAgICAgICAgICBMLnJldmVyc2UoKQorICAgICAgICAgICAgICAgIHJldHVybiBMCisgICAgICAgIGNsYXNzIFgoRCxCLEMsQSk6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gUGVydmVyc2VNZXRhVHlwZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguX19tcm9fXywgKG9iamVjdCwgQSwgQywgQiwgRCwgWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWCgpLmYoKSwgIkEiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNsYXNzIFgob2JqZWN0KToKKyAgICAgICAgICAgICAgICBjbGFzcyBfX21ldGFjbGFzc19fKHR5cGUpOgorICAgICAgICAgICAgICAgICAgICBkZWYgbXJvKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzZWxmLCBkaWN0LCBvYmplY3RdCisgICAgICAgICAgICAjIEluIENQeXRob24sIHRoZSBjbGFzcyBjcmVhdGlvbiBhYm92ZSBhbHJlYWR5IHJhaXNlcworICAgICAgICAgICAgIyBUeXBlRXJyb3IsIGFzIGEgcHJvdGVjdGlvbiBhZ2FpbnN0IHRoZSBmYWN0IHRoYXQKKyAgICAgICAgICAgICMgaW5zdGFuY2VzIG9mIFggd291bGQgc2VnZmF1bHQgaXQuICBJbiBvdGhlciBQeXRob24KKyAgICAgICAgICAgICMgaW1wbGVtZW50YXRpb25zIGl0IHdvdWxkIGJlIG9rIHRvIGxldCB0aGUgY2xhc3MgWAorICAgICAgICAgICAgIyBiZSBjcmVhdGVkLCBidXQgaW5zdGVhZCBnZXQgYSBjbGVhbiBUeXBlRXJyb3Igb24gdGhlCisgICAgICAgICAgICAjIF9fc2V0aXRlbV9fIGJlbG93LgorICAgICAgICAgICAgeCA9IG9iamVjdC5fX25ld19fKFgpCisgICAgICAgICAgICB4WzVdID0gNgorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJkZXZpb3VzIG1ybygpIHJldHVybiBub3QgY2F1Z2h0IikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICAgICAgY2xhc3MgX19tZXRhY2xhc3NfXyh0eXBlKToKKyAgICAgICAgICAgICAgICAgICAgZGVmIG1ybyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMV0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibm9uLWNsYXNzIG1ybygpIHJldHVybiBub3QgY2F1Z2h0IikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICAgICAgY2xhc3MgX19tZXRhY2xhc3NfXyh0eXBlKToKKyAgICAgICAgICAgICAgICAgICAgZGVmIG1ybyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIm5vbi1zZXF1ZW5jZSBtcm8oKSByZXR1cm4gbm90IGNhdWdodCIpCisKKyAgICBkZWYgdGVzdF9vdmVybG9hZGluZyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIG9wZXJhdG9yIG92ZXJsb2FkaW5nLi4uCisKKyAgICAgICAgY2xhc3MgQihvYmplY3QpOgorICAgICAgICAgICAgIkludGVybWVkaWF0ZSBjbGFzcyBiZWNhdXNlIG9iamVjdCBkb2Vzbid0IGhhdmUgYSBfX3NldGF0dHJfXyIKKworICAgICAgICBjbGFzcyBDKEIpOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gImZvbyI6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoImdldGF0dHIiLCBuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisgICAgICAgICAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gImZvbyI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0YXR0ciA9IChuYW1lLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQi5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSkKKyAgICAgICAgICAgIGRlZiBfX2RlbGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJmb28iOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGF0dHIgPSBuYW1lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEIuX19kZWxhdHRyX18oc2VsZiwgbmFtZSkKKworICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuICgiZ2V0aXRlbSIsIGtleSkKKyAgICAgICAgICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnNldGl0ZW0gPSAoa2V5LCB2YWx1ZSkKKyAgICAgICAgICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHNlbGYuZGVsaXRlbSA9IGtleQorCisgICAgICAgICAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsIGksIGopOgorICAgICAgICAgICAgICAgIHJldHVybiAoImdldHNsaWNlIiwgaSwgaikKKyAgICAgICAgICAgIGRlZiBfX3NldHNsaWNlX18oc2VsZiwgaSwgaiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0c2xpY2UgPSAoaSwgaiwgdmFsdWUpCisgICAgICAgICAgICBkZWYgX19kZWxzbGljZV9fKHNlbGYsIGksIGopOgorICAgICAgICAgICAgICAgIHNlbGYuZGVsc2xpY2UgPSAoaSwgaikKKworICAgICAgICBhID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5mb28sICgiZ2V0YXR0ciIsICJmb28iKSkKKyAgICAgICAgYS5mb28gPSAxMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuc2V0YXR0ciwgKCJmb28iLCAxMikpCisgICAgICAgIGRlbCBhLmZvbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZGVsYXR0ciwgImZvbyIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzEyXSwgKCJnZXRpdGVtIiwgMTIpKQorICAgICAgICBhWzEyXSA9IDIxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5zZXRpdGVtLCAoMTIsIDIxKSkKKyAgICAgICAgZGVsIGFbMTJdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5kZWxpdGVtLCAxMikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMDoxMF0sICgiZ2V0c2xpY2UiLCAwLCAxMCkpCisgICAgICAgIGFbMDoxMF0gPSAiZm9vIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuc2V0c2xpY2UsICgwLCAxMCwgImZvbyIpKQorICAgICAgICBkZWwgYVswOjEwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZGVsc2xpY2UsICgwLCAxMCkpCisKKyAgICBkZWYgdGVzdF9tZXRob2RzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgbWV0aG9kcy4uLgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICAgICAgZGVmIGZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi54CisgICAgICAgIGMxID0gQygxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMxLmZvbygpLCAxKQorICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgYm9vID0gQy5mb28KKyAgICAgICAgICAgIGdvbyA9IGMxLmZvbworICAgICAgICBkMiA9IEQoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi5mb28oKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi5ib28oKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi5nb28oKSwgMSkKKyAgICAgICAgY2xhc3MgRShvYmplY3QpOgorICAgICAgICAgICAgZm9vID0gQy5mb28KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFKCkuZm9vLCBDLmZvbykgIyBpLmUuLCB1bmJvdW5kCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKEMuZm9vLl9fZ2V0X18oQygxKSkpLnN0YXJ0c3dpdGgoIjxib3VuZCBtZXRob2QgIikpCisKKyAgICBkZWYgdGVzdF9zcGVjaWFsX21ldGhvZF9sb29rdXAoc2VsZik6CisgICAgICAgICMgVGhlIGxvb2t1cCBvZiBzcGVjaWFsIG1ldGhvZHMgYnlwYXNzZXMgX19nZXRhdHRyX18gYW5kCisgICAgICAgICMgX19nZXRhdHRyaWJ1dGVfXywgYnV0IHRoZXkgc3RpbGwgY2FuIGJlIGRlc2NyaXB0b3JzLgorCisgICAgICAgIGRlZiBydW5fY29udGV4dChtYW5hZ2VyKToKKyAgICAgICAgICAgIHdpdGggbWFuYWdlcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBpZGVuKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgZGVmIGhlbGxvKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJoZWxsbyIKKyAgICAgICAgZGVmIGVtcHR5X3NlcShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBkZWYgemVybyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGRlZiBjb21wbGV4X251bShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAxagorICAgICAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgZGVmIHJldHVybl90cnVlKHNlbGYsIHRoaW5nPU5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZGVmIGRvX2lzaW5zdGFuY2Uob2JqKToKKyAgICAgICAgICAgIHJldHVybiBpc2luc3RhbmNlKGludCwgb2JqKQorICAgICAgICBkZWYgZG9faXNzdWJjbGFzcyhvYmopOgorICAgICAgICAgICAgcmV0dXJuIGlzc3ViY2xhc3MoaW50LCBvYmopCisgICAgICAgIGRlZiBzd2FsbG93KCphcmdzKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIGRvX2RpY3RfbWlzc2luZyhjaGVja2VyKToKKyAgICAgICAgICAgIGNsYXNzIERpY3RTdWIoY2hlY2tlci5fX2NsYXNzX18sIGRpY3QpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRGljdFN1YigpWyJoaSJdLCA0KQorICAgICAgICBkZWYgc29tZV9udW1iZXIoc2VsZl8sIGtleSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSwgImhpIikKKyAgICAgICAgICAgIHJldHVybiA0CisgICAgICAgIGRlZiBmb3JtYXRfaW1wbChzZWxmLCBzcGVjKToKKyAgICAgICAgICAgIHJldHVybiAiaGVsbG8iCisKKyAgICAgICAgIyBJdCB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgZXZlcnkgc3BlY2lhbCBtZXRob2QgdGVzdGVkIGhlcmUsIGJ1dCBJJ20KKyAgICAgICAgIyBvbmx5IGxpc3RpbmcgdGhlIG9uZXMgSSBjYW4gcmVtZW1iZXIgb3V0c2lkZSBvZiB0eXBlb2JqZWN0LmMsIHNpbmNlIGl0CisgICAgICAgICMgZG9lcyBpdCByaWdodC4KKyAgICAgICAgc3BlY2lhbHMgPSBbCisgICAgICAgICAgICAoIl9fdW5pY29kZV9fIiwgdW5pY29kZSwgaGVsbG8sIHNldCgpLCB7fSksCisgICAgICAgICAgICAoIl9fcmV2ZXJzZWRfXyIsIHJldmVyc2VkLCBlbXB0eV9zZXEsIHNldCgpLCB7fSksCisgICAgICAgICAgICAoIl9fbGVuZ3RoX2hpbnRfXyIsIGxpc3QsIHplcm8sIHNldCgpLAorICAgICAgICAgICAgIHsiX19pdGVyX18iIDogaWRlbiwgIm5leHQiIDogc3RvcH0pLAorICAgICAgICAgICAgKCJfX3NpemVvZl9fIiwgc3lzLmdldHNpemVvZiwgemVybywgc2V0KCksIHt9KSwKKyAgICAgICAgICAgICgiX19pbnN0YW5jZWNoZWNrX18iLCBkb19pc2luc3RhbmNlLCByZXR1cm5fdHJ1ZSwgc2V0KCksIHt9KSwKKyAgICAgICAgICAgICgiX19taXNzaW5nX18iLCBkb19kaWN0X21pc3NpbmcsIHNvbWVfbnVtYmVyLAorICAgICAgICAgICAgIHNldCgoIl9fY2xhc3NfXyIsKSksIHt9KSwKKyAgICAgICAgICAgICgiX19zdWJjbGFzc2NoZWNrX18iLCBkb19pc3N1YmNsYXNzLCByZXR1cm5fdHJ1ZSwKKyAgICAgICAgICAgICBzZXQoKCJfX2Jhc2VzX18iLCkpLCB7fSksCisgICAgICAgICAgICAoIl9fZW50ZXJfXyIsIHJ1bl9jb250ZXh0LCBpZGVuLCBzZXQoKSwgeyJfX2V4aXRfXyIgOiBzd2FsbG93fSksCisgICAgICAgICAgICAoIl9fZXhpdF9fIiwgcnVuX2NvbnRleHQsIHN3YWxsb3csIHNldCgpLCB7Il9fZW50ZXJfXyIgOiBpZGVufSksCisgICAgICAgICAgICAoIl9fY29tcGxleF9fIiwgY29tcGxleCwgY29tcGxleF9udW0sIHNldCgpLCB7fSksCisgICAgICAgICAgICAoIl9fZm9ybWF0X18iLCBmb3JtYXQsIGZvcm1hdF9pbXBsLCBzZXQoKSwge30pLAorICAgICAgICAgICAgKCJfX2Rpcl9fIiwgZGlyLCBlbXB0eV9zZXEsIHNldCgpLCB7fSksCisgICAgICAgICAgICBdCisKKyAgICAgICAgY2xhc3MgQ2hlY2tlcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIsIHRlc3Q9c2VsZik6CisgICAgICAgICAgICAgICAgdGVzdC5mYWlsKCJfX2dldGF0dHJfXyBjYWxsZWQgd2l0aCB7MH0iLmZvcm1hdChhdHRyKSkKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsIGF0dHIsIHRlc3Q9c2VsZik6CisgICAgICAgICAgICAgICAgaWYgYXR0ciBub3QgaW4gb2s6CisgICAgICAgICAgICAgICAgICAgIHRlc3QuZmFpbCgiX19nZXRhdHRyaWJ1dGVfXyBjYWxsZWQgd2l0aCB7MH0iLmZvcm1hdChhdHRyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgYXR0cikKKyAgICAgICAgY2xhc3MgU3BlY2lhbERlc2NyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaW1wbCk6CisgICAgICAgICAgICAgICAgc2VsZi5pbXBsID0gaW1wbAorICAgICAgICAgICAgZGVmIF9fZ2V0X18oc2VsZiwgb2JqLCBvd25lcik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgxKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmltcGwuX19nZXRfXyhvYmosIG93bmVyKQorICAgICAgICBjbGFzcyBNeUV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBFcnJEZXNjcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0X18oc2VsZiwgb2JqLCBvd25lcik6CisgICAgICAgICAgICAgICAgcmFpc2UgTXlFeGNlcHRpb24KKworICAgICAgICBmb3IgbmFtZSwgcnVubmVyLCBtZXRoX2ltcGwsIG9rLCBlbnYgaW4gc3BlY2lhbHM6CisgICAgICAgICAgICBjbGFzcyBYKENoZWNrZXIpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGZvciBhdHRyLCBvYmogaW4gZW52Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNldGF0dHIoWCwgYXR0ciwgb2JqKQorICAgICAgICAgICAgc2V0YXR0cihYLCBuYW1lLCBtZXRoX2ltcGwpCisgICAgICAgICAgICBydW5uZXIoWCgpKQorCisgICAgICAgICAgICByZWNvcmQgPSBbXQorICAgICAgICAgICAgY2xhc3MgWChDaGVja2VyKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBmb3IgYXR0ciwgb2JqIGluIGVudi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKFgsIGF0dHIsIG9iaikKKyAgICAgICAgICAgIHNldGF0dHIoWCwgbmFtZSwgU3BlY2lhbERlc2NyKG1ldGhfaW1wbCkpCisgICAgICAgICAgICBydW5uZXIoWCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQsIFsxXSwgbmFtZSkKKworICAgICAgICAgICAgY2xhc3MgWChDaGVja2VyKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBmb3IgYXR0ciwgb2JqIGluIGVudi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKFgsIGF0dHIsIG9iaikKKyAgICAgICAgICAgIHNldGF0dHIoWCwgbmFtZSwgRXJyRGVzY3IoKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBydW5uZXIoWCgpKQorICAgICAgICAgICAgZXhjZXB0IE15RXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ7MCFyfSBkaWRuJ3QgcmFpc2UiLmZvcm1hdChuYW1lKSkKKworICAgIGRlZiB0ZXN0X3NwZWNpYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgc3BlY2lhbCBvcGVyYXRvcnMuLi4KKyAgICAgICAgIyBUZXN0IG9wZXJhdG9ycyBsaWtlIF9faGFzaF9fIGZvciB3aGljaCBhIGJ1aWx0LWluIGRlZmF1bHQgZXhpc3RzCisKKyAgICAgICAgIyBUZXN0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBzdGF0aWMgY2xhc3NlcworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgaWYgMCA8PSBpIDwgMTA6IHJldHVybiBpCisgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorICAgICAgICBjMSA9IEMoKQorICAgICAgICBjMiA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG5vdCBjMSkgIyBXaGF0PworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGMxKSwgaWQoYzIpKQorICAgICAgICBoYXNoKGMxKQorICAgICAgICBoYXNoKGMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChjMSwgYzIpLCBjbXAoaWQoYzEpLCBpZChjMikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMxLCBjMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMxICE9IGMyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGMxICE9IGMxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGMxID09IGMyKQorICAgICAgICAjIE5vdGUgdGhhdCB0aGUgbW9kdWxlIG5hbWUgYXBwZWFycyBpbiBzdHIvcmVwciwgYW5kIHRoYXQgdmFyaWVzCisgICAgICAgICMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyB0ZXN0IGlzIHJ1biBzdGFuZGFsb25lIG9yIGZyb20gYSBmcmFtZXdvcmsuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoYzEpLmZpbmQoJ0Mgb2JqZWN0IGF0ICcpID49IDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGMxKSwgcmVwcihjMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oLTEsIGMxKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGksIGMxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEwLCBjMSkKKyAgICAgICAgIyBUZXN0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBkeW5hbWljIGNsYXNzZXMKKyAgICAgICAgY2xhc3MgRChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIGlmIDAgPD0gaSA8IDEwOiByZXR1cm4gaQorICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgZDEgPSBEKCkKKyAgICAgICAgZDIgPSBEKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBub3QgZDEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZDEpLCBpZChkMikpCisgICAgICAgIGhhc2goZDEpCisgICAgICAgIGhhc2goZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKGQxLCBkMiksIGNtcChpZChkMSksIGlkKGQyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIGQxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGQxLCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBkMSAhPSBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBkMSA9PSBkMikKKyAgICAgICAgIyBOb3RlIHRoYXQgdGhlIG1vZHVsZSBuYW1lIGFwcGVhcnMgaW4gc3RyL3JlcHIsIGFuZCB0aGF0IHZhcmllcworICAgICAgICAjIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgdGVzdCBpcyBydW4gc3RhbmRhbG9uZSBvciBmcm9tIGEgZnJhbWV3b3JrLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKGQxKS5maW5kKCdEIG9iamVjdCBhdCAnKSA+PSAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihkMSksIHJlcHIoZDEpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKC0xLCBkMSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxMCwgZDEpCisgICAgICAgICMgVGVzdCBvdmVycmlkZGVuIGJlaGF2aW9yIGZvciBzdGF0aWMgY2xhc3NlcworICAgICAgICBjbGFzcyBQcm94eShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHNlbGYueCA9IHgKKyAgICAgICAgICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbm90IG5vdCBzZWxmLngKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaGFzaChzZWxmLngpCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi54ID09IG90aGVyCisgICAgICAgICAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi54ICE9IG90aGVyCisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmLngsIG90aGVyLngpCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIlByb3h5OiVzIiAlIHNlbGYueAorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiUHJveHkoJXIpIiAlIHNlbGYueAorICAgICAgICAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIGluIHNlbGYueAorICAgICAgICBwMCA9IFByb3h5KDApCisgICAgICAgIHAxID0gUHJveHkoMSkKKyAgICAgICAgcF8xID0gUHJveHkoLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgbm90IHAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2gocDApLCBoYXNoKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAwLCBwMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwMCwgcDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcDAgIT0gcDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm90IHAwLCBwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAocDAsIHAxKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHAwLCBwMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHAwLCBwXzEpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwMCksICJQcm94eTowIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHAwKSwgIlByb3h5KDApIikKKyAgICAgICAgcDEwID0gUHJveHkocmFuZ2UoMTApKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKC0xLCBwMTApCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaSwgcDEwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEwLCBwMTApCisgICAgICAgICMgVGVzdCBvdmVycmlkZGVuIGJlaGF2aW9yIGZvciBkeW5hbWljIGNsYXNzZXMKKyAgICAgICAgY2xhc3MgRFByb3h5KG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICAgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBub3Qgbm90IHNlbGYueAorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYueCkKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnggPT0gb3RoZXIKKyAgICAgICAgICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnggIT0gb3RoZXIKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYueCwgb3RoZXIueCkKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiRFByb3h5OiVzIiAlIHNlbGYueAorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiRFByb3h5KCVyKSIgJSBzZWxmLngKKyAgICAgICAgICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSBpbiBzZWxmLngKKyAgICAgICAgcDAgPSBEUHJveHkoMCkKKyAgICAgICAgcDEgPSBEUHJveHkoMSkKKyAgICAgICAgcF8xID0gRFByb3h5KC0xKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG5vdCBwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHAwKSwgaGFzaCgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMCwgcDApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocDAsIHAxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG5vdCBwMCwgcDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm90IHAwLCBwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAocDAsIHAxKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHAwLCBwMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHAwLCBwXzEpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwMCksICJEUHJveHk6MCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihwMCksICJEUHJveHkoMCkiKQorICAgICAgICBwMTAgPSBEUHJveHkocmFuZ2UoMTApKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKC0xLCBwMTApCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaSwgcDEwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEwLCBwMTApCisKKyAgICAgICAgIyBTYWZldHkgdGVzdCBmb3IgX19jbXBfXworICAgICAgICBkZWYgdW5zYWZlY21wKGEsIGIpOgorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoYSwgJ19fY21wX18nKToKKyAgICAgICAgICAgICAgICByZXR1cm4gICAjIHNvbWUgdHlwZXMgZG9uJ3QgaGF2ZSBhIF9fY21wX18gYW55IG1vcmUgKHNvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICMgdGVzdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgYW55IG1vcmUpLCBvciBtYXliZSB0aGV5CisgICAgICAgICAgICAgICAgICAgICAgICAgIyBuZXZlciBoYWQgYSBfX2NtcF9fIGF0IGFsbCwgZS5nLiBpbiBQeVB5CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYS5fX2NsYXNzX18uX19jbXBfXyhhLCBiKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGFsbG93ICVzLl9fY21wX18oJXIsICVyKSIgJSAoCisgICAgICAgICAgICAgICAgICAgIGEuX19jbGFzc19fLCBhLCBiKSkKKworICAgICAgICB1bnNhZmVjbXAodSIxMjMiLCAiMTIzIikKKyAgICAgICAgdW5zYWZlY21wKCIxMjMiLCB1IjEyMyIpCisgICAgICAgIHVuc2FmZWNtcCgxLCAxLjApCisgICAgICAgIHVuc2FmZWNtcCgxLjAsIDEpCisgICAgICAgIHVuc2FmZWNtcCgxLCAxTCkKKyAgICAgICAgdW5zYWZlY21wKDFMLCAxKQorCisgICAgQHRlc3Rfc3VwcG9ydC5pbXBsX2RldGFpbCgiY3VzdG9tIGxvZ2ljIGZvciBwcmludGluZyB0byByZWFsIGZpbGUgb2JqZWN0cyIpCisgICAgZGVmIHRlc3RfcmVjdXJzaW9uc18xKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgcmVjdXJzaW9uIGNoZWNrcyAuLi4KKyAgICAgICAgY2xhc3MgTGV0dGVyKHN0cik6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGxldHRlcik6CisgICAgICAgICAgICAgICAgaWYgbGV0dGVyID09ICdFUFMnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyLl9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIHJldHVybiBzdHIuX19uZXdfXyhjbHMsIGxldHRlcikKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0VQUycKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAjIHN5cy5zdGRvdXQgbmVlZHMgdG8gYmUgdGhlIG9yaWdpbmFsIHRvIHRyaWdnZXIgdGhlIHJlY3Vyc2lvbiBidWcKKyAgICAgICAgdGVzdF9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHN5cy5zdGRvdXQgPSB0ZXN0X3N1cHBvcnQuZ2V0X29yaWdpbmFsX3N0ZG91dCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgbm90aGluZyBzaG91bGQgYWN0dWFsbHkgYmUgcHJpbnRlZCwgdGhpcyBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uCisgICAgICAgICAgICBwcmludCBMZXR0ZXIoJ3cnKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBhIFJ1bnRpbWVFcnJvciBmb3IgcHJpbnQgcmVjdXJzaW9uIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSB0ZXN0X3N0ZG91dAorCisgICAgZGVmIHRlc3RfcmVjdXJzaW9uc18yKHNlbGYpOgorICAgICAgICAjIEJ1ZyAjMTIwMjUzMy4KKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBBLl9fbXVsX18gPSB0eXBlcy5NZXRob2RUeXBlKGxhbWJkYSBzZWxmLCB4OiBzZWxmICogeCwgTm9uZSwgQSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgQSgpKjIKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgYSBSdW50aW1lRXJyb3IiKQorCisgICAgZGVmIHRlc3Rfd2Vha3JlZnMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyB3ZWFrIHJlZmVyZW5jZXMuLi4KKyAgICAgICAgaW1wb3J0IHdlYWtyZWYKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjID0gQygpCisgICAgICAgIHIgPSB3ZWFrcmVmLnJlZihjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIoKSwgYykKKyAgICAgICAgZGVsIGMKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIoKSwgTm9uZSkKKyAgICAgICAgZGVsIHIKKyAgICAgICAgY2xhc3MgTm9XZWFrKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2ZvbyddCisgICAgICAgIG5vID0gTm9XZWFrKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2Vha3JlZi5yZWYobm8pCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIobXNnKS5maW5kKCJ3ZWFrIHJlZmVyZW5jZSIpID49IDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIndlYWtyZWYucmVmKG5vKSBzaG91bGQgYmUgaWxsZWdhbCIpCisgICAgICAgIGNsYXNzIFdlYWsob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnZm9vJywgJ19fd2Vha3JlZl9fJ10KKyAgICAgICAgeWVzID0gV2VhaygpCisgICAgICAgIHIgPSB3ZWFrcmVmLnJlZih5ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocigpLCB5ZXMpCisgICAgICAgIGRlbCB5ZXMKKyAgICAgICAgdGVzdF9zdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIoKSwgTm9uZSkKKyAgICAgICAgZGVsIHIKKworICAgIGRlZiB0ZXN0X3Byb3BlcnRpZXMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBwcm9wZXJ0eS4uLgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZ2V0eChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3gKKyAgICAgICAgICAgIGRlZiBzZXR4KHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLl9feCA9IHZhbHVlCisgICAgICAgICAgICBkZWYgZGVseChzZWxmKToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fX3gKKyAgICAgICAgICAgIHggPSBwcm9wZXJ0eShnZXR4LCBzZXR4LCBkZWx4LCBkb2M9IkknbSB0aGUgeCBwcm9wZXJ0eS4iKQorICAgICAgICBhID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihhLCAieCIpKQorICAgICAgICBhLnggPSA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX0NfX3gsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEueCwgNDIpCisgICAgICAgIGRlbCBhLngKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGEsICJ4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihhLCAiX0NfX3giKSkKKyAgICAgICAgQy54Ll9fc2V0X18oYSwgMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMueC5fX2dldF9fKGEpLCAxMDApCisgICAgICAgIEMueC5fX2RlbGV0ZV9fKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihhLCAieCIpKQorCisgICAgICAgIHJhdyA9IEMuX19kaWN0X19bJ3gnXQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmF3LCBwcm9wZXJ0eSkKKworICAgICAgICBhdHRycyA9IGRpcihyYXcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9fZG9jX18iLCBhdHRycykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZmdldCIsIGF0dHJzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmc2V0IiwgYXR0cnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZkZWwiLCBhdHRycykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5fX2RvY19fLCAiSSdtIHRoZSB4IHByb3BlcnR5LiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyYXcuZmdldCBpcyBDLl9fZGljdF9fWydnZXR4J10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyYXcuZnNldCBpcyBDLl9fZGljdF9fWydzZXR4J10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyYXcuZmRlbCBpcyBDLl9fZGljdF9fWydkZWx4J10pCisKKyAgICAgICAgZm9yIGF0dHIgaW4gIl9fZG9jX18iLCAiZmdldCIsICJmc2V0IiwgImZkZWwiOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNldGF0dHIocmF3LCBhdHRyLCA0MikKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IsIG1zZzoKKyAgICAgICAgICAgICAgICBpZiBzdHIobXNnKS5maW5kKCdyZWFkb25seScpIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ3aGVuIHNldHRpbmcgcmVhZG9ubHkgYXR0ciAlciBvbiBhIHByb3BlcnR5LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdvdCB1bmV4cGVjdGVkIFR5cGVFcnJvciBtc2cgJXIiICUgKGF0dHIsIHN0cihtc2cpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBUeXBlRXJyb3IgZnJvbSB0cnlpbmcgdG8gc2V0IHJlYWRvbmx5ICVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdHRyIG9uIGEgcHJvcGVydHkiICUgYXR0cikKKworICAgICAgICBjbGFzcyBEKG9iamVjdCk6CisgICAgICAgICAgICBfX2dldGl0ZW1fXyA9IHByb3BlcnR5KGxhbWJkYSBzOiAxLzApCisKKyAgICAgICAgZCA9IEQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiBkOgorICAgICAgICAgICAgICAgIHN0cihpKQorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yIGZyb20gYmFkIHByb3BlcnR5IikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X3Byb3BlcnRpZXNfZG9jX2F0dHJpYihzZWxmKToKKyAgICAgICAgY2xhc3MgRShvYmplY3QpOgorICAgICAgICAgICAgZGVmIGdldHRlcihzZWxmKToKKyAgICAgICAgICAgICAgICAiZ2V0dGVyIG1ldGhvZCIKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgZGVmIHNldHRlcihzZWxmXywgdmFsdWUpOgorICAgICAgICAgICAgICAgICJzZXR0ZXIgbWV0aG9kIgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHByb3AgPSBwcm9wZXJ0eShnZXR0ZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3AuX19kb2NfXywgImdldHRlciBtZXRob2QiKQorICAgICAgICAgICAgcHJvcDIgPSBwcm9wZXJ0eShmc2V0PXNldHRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvcDIuX19kb2NfXywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3Rlc3RjYXBpX25vX3NlZ2ZhdWx0KHNlbGYpOgorICAgICAgICAjIHRoaXMgc2VnZmF1bHRlZCBpbiAyLjViMgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNsYXNzIFgob2JqZWN0KToKKyAgICAgICAgICAgICAgICBwID0gcHJvcGVydHkoX3Rlc3RjYXBpLnRlc3Rfd2l0aF9kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9wcm9wZXJ0aWVzX3BsdXMoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGZvbyA9IHByb3BlcnR5KGRvYz0iaGVsbG8iKQorICAgICAgICAgICAgQGZvby5nZXR0ZXIKKyAgICAgICAgICAgIGRlZiBmb28oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZvbworICAgICAgICAgICAgQGZvby5zZXR0ZXIKKyAgICAgICAgICAgIGRlZiBmb28oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZvbyA9IGFicyh2YWx1ZSkKKyAgICAgICAgICAgIEBmb28uZGVsZXRlcgorICAgICAgICAgICAgZGVmIGZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fZm9vCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmZvby5fX2RvY19fLCAiaGVsbG8iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYywgImZvbyIpKQorICAgICAgICBjLmZvbyA9IC00MgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihjLCAnX2ZvbycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX2ZvbywgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5mb28sIDQyKQorICAgICAgICBkZWwgYy5mb28KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGMsICdfZm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjLCAiZm9vIikpCisKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIEBDLmZvby5kZWxldGVyCisgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2ZvbworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBkID0gRCgpCisgICAgICAgIGQuZm9vID0gMjQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZvbywgMjQpCisgICAgICAgIGRlbCBkLmZvbworICAgICAgICBkZWwgZC5mb28KKworICAgICAgICBjbGFzcyBFKG9iamVjdCk6CisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBmb28oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZvbworICAgICAgICAgICAgQGZvby5zZXR0ZXIKKyAgICAgICAgICAgIGRlZiBmb28oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICAgICAgQGZvby5zZXR0ZXIKKyAgICAgICAgICAgIGRlZiBmb28oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZvbyA9IGFicyh2YWx1ZSkKKyAgICAgICAgICAgIEBmb28uZGVsZXRlcgorICAgICAgICAgICAgZGVmIGZvbyhzZWxmLCB2YWx1ZT1Ob25lKToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fZm9vCisKKyAgICAgICAgZSA9IEUoKQorICAgICAgICBlLmZvbyA9IC00MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZm9vLCA0MikKKyAgICAgICAgZGVsIGUuZm9vCisKKyAgICAgICAgY2xhc3MgRihFKToKKyAgICAgICAgICAgIEBFLmZvby5kZWxldGVyCisgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9mb28KKyAgICAgICAgICAgIEBmb28uc2V0dGVyCisgICAgICAgICAgICBkZWYgZm9vKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLl9mb28gPSBtYXgoMCwgdmFsdWUpCisgICAgICAgIGYgPSBGKCkKKyAgICAgICAgZi5mb28gPSAtMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZvbywgMCkKKyAgICAgICAgZGVsIGYuZm9vCisKKyAgICBkZWYgdGVzdF9kaWN0X2NvbnN0cnVjdG9ycyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGRpY3QgY29uc3RydWN0b3IgLi4uCisgICAgICAgIGQgPSBkaWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7fSkKKyAgICAgICAgZCA9IGRpY3Qoe30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwge30pCisgICAgICAgIGQgPSBkaWN0KHsxOiAyLCAnYSc6ICdiJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgezE6IDIsICdhJzogJ2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkaWN0KGQuaXRlbXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGljdChkLml0ZXJpdGVtcygpKSkKKyAgICAgICAgZCA9IGRpY3QoeydvbmUnOjEsICd0d28nOjJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRpY3Qob25lPTEsIHR3bz0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkaWN0KCoqZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGljdCh7Im9uZSI6IDF9LCB0d289MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGljdChbKCJ0d28iLCAyKV0sIG9uZT0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkaWN0KFsoIm9uZSIsIDEwMCksICgidHdvIiwgMjAwKV0sICoqZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGljdCgqKmQpKQorCisgICAgICAgIGZvciBiYWRhcmcgaW4gMCwgMEwsIDBqLCAiMCIsIFswXSwgKDAsKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkaWN0KGJhZGFyZykKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgYmFkYXJnID09ICIwIjoKKyAgICAgICAgICAgICAgICAgICAgIyBJdCdzIGEgc2VxdWVuY2UsIGFuZCBpdHMgZWxlbWVudHMgYXJlIGFsc28gc2VxdWVuY2VzIChnb3R0YQorICAgICAgICAgICAgICAgICAgICAjIGxvdmUgc3RyaW5ncyA8d2luaz4pLCBidXQgdGhleSBhcmVuJ3Qgb2YgbGVuZ3RoIDIsIHNvIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgIyBvbmUgc2VlbWVkIGJldHRlciBhcyBhIFZhbHVlRXJyb3IgdGhhbiBhIFR5cGVFcnJvci4KKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gVHlwZUVycm9yIGZyb20gZGljdCglcikiICUgYmFkYXJnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIFR5cGVFcnJvciBmcm9tIGRpY3QoJXIpIiAlIGJhZGFyZykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkaWN0KHt9LCB7fSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gVHlwZUVycm9yIGZyb20gZGljdCh7fSwge30pIikKKworICAgICAgICBjbGFzcyBNYXBwaW5nOgorICAgICAgICAgICAgIyBMYWNrcyBhIC5rZXlzKCkgbWV0aG9kOyB3aWxsIGJlIGFkZGVkIGxhdGVyLgorICAgICAgICAgICAgZGljdCA9IHsxOjIsIDM6NCwgJ2EnOjFqfQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRpY3QoTWFwcGluZygpKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBUeXBlRXJyb3IgZnJvbSBkaWN0KGluY29tcGxldGUgbWFwcGluZykiKQorCisgICAgICAgIE1hcHBpbmcua2V5cyA9IGxhbWJkYSBzZWxmOiBzZWxmLmRpY3Qua2V5cygpCisgICAgICAgIE1hcHBpbmcuX19nZXRpdGVtX18gPSBsYW1iZGEgc2VsZiwgaTogc2VsZi5kaWN0W2ldCisgICAgICAgIGQgPSBkaWN0KE1hcHBpbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBNYXBwaW5nLmRpY3QpCisKKyAgICAgICAgIyBJbml0IGZyb20gc2VxdWVuY2Ugb2YgaXRlcmFibGUgb2JqZWN0cywgZWFjaCBwcm9kdWNpbmcgYSAyLXNlcXVlbmNlLgorICAgICAgICBjbGFzcyBBZGRyZXNzQm9va0VudHJ5OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpcnN0LCBsYXN0KToKKyAgICAgICAgICAgICAgICBzZWxmLmZpcnN0ID0gZmlyc3QKKyAgICAgICAgICAgICAgICBzZWxmLmxhc3QgPSBsYXN0CisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXIoW3NlbGYuZmlyc3QsIHNlbGYubGFzdF0pCisKKyAgICAgICAgZCA9IGRpY3QoW0FkZHJlc3NCb29rRW50cnkoJ1RpbScsICdXYXJzYXcnKSwKKyAgICAgICAgICAgICAgICAgIEFkZHJlc3NCb29rRW50cnkoJ0JhcnJ5JywgJ1BldGVycycpLAorICAgICAgICAgICAgICAgICAgQWRkcmVzc0Jvb2tFbnRyeSgnVGltJywgJ1BldGVycycpLAorICAgICAgICAgICAgICAgICAgQWRkcmVzc0Jvb2tFbnRyeSgnQmFycnknLCAnV2Fyc2F3JyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsnQmFycnknOiAnV2Fyc2F3JywgJ1RpbSc6ICdQZXRlcnMnfSkKKworICAgICAgICBkID0gZGljdCh6aXAocmFuZ2UoNCksIHJhbmdlKDEsIDUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkaWN0KFsoaSwgaSsxKSBmb3IgaSBpbiByYW5nZSg0KV0pKQorCisgICAgICAgICMgQmFkIHNlcXVlbmNlIGxlbmd0aHMuCisgICAgICAgIGZvciBiYWQgaW4gWygndG9vc2hvcnQnLCldLCBbKCd0b28nLCAnbG9uZycsICdieSAxJyldOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRpY3QoYmFkKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIFZhbHVlRXJyb3IgZnJvbSBkaWN0KCVyKSIgJSBiYWQpCisKKyAgICBkZWYgdGVzdF9kaXIoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBkaXIoKSAuLi4KKyAgICAgICAganVuayA9IDEyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKCksIFsnanVuaycsICdzZWxmJ10pCisgICAgICAgIGRlbCBqdW5rCisKKyAgICAgICAgIyBKdXN0IG1ha2Ugc3VyZSB0aGVzZSBkb24ndCBibG93IHVwIQorICAgICAgICBmb3IgYXJnIGluIDIsIDJMLCAyaiwgMmUwLCBbMl0sICIyIiwgdSIyIiwgKDIsKSwgezI6Mn0sIHR5cGUsIHNlbGYudGVzdF9kaXI6CisgICAgICAgICAgICBkaXIoYXJnKQorCisgICAgICAgICMgVHJ5IGNsYXNzaWMgY2xhc3Nlcy4KKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIENkYXRhID0gMQorICAgICAgICAgICAgZGVmIENtZXRob2Qoc2VsZik6IHBhc3MKKworICAgICAgICBjc3R1ZmYgPSBbJ0NkYXRhJywgJ0NtZXRob2QnLCAnX19kb2NfXycsICdfX21vZHVsZV9fJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoQyksIGNzdHVmZikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaW1fc2VsZicsIGRpcihDLkNtZXRob2QpKQorCisgICAgICAgIGMgPSBDKCkgICMgYy5fX2RvY19fIGlzIGFuIG9kZCB0aGluZyB0byBzZWUgaGVyZTsgZGl0dG8gYy5fX21vZHVsZV9fLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcihjKSwgY3N0dWZmKQorCisgICAgICAgIGMuY2RhdGEgPSAyCisgICAgICAgIGMuY21ldGhvZCA9IGxhbWJkYSBzZWxmOiAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKGMpLCBjc3R1ZmYgKyBbJ2NkYXRhJywgJ2NtZXRob2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaW1fc2VsZicsIGRpcihjLkNtZXRob2QpKQorCisgICAgICAgIGNsYXNzIEEoQyk6CisgICAgICAgICAgICBBZGF0YSA9IDEKKyAgICAgICAgICAgIGRlZiBBbWV0aG9kKHNlbGYpOiBwYXNzCisKKyAgICAgICAgYXN0dWZmID0gWydBZGF0YScsICdBbWV0aG9kJ10gKyBjc3R1ZmYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoQSksIGFzdHVmZikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaW1fc2VsZicsIGRpcihBLkFtZXRob2QpKQorICAgICAgICBhID0gQSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKGEpLCBhc3R1ZmYpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ltX3NlbGYnLCBkaXIoYS5BbWV0aG9kKSkKKyAgICAgICAgYS5hZGF0YSA9IDQyCisgICAgICAgIGEuYW1ldGhvZCA9IGxhbWJkYSBzZWxmOiAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKGEpLCBhc3R1ZmYgKyBbJ2FkYXRhJywgJ2FtZXRob2QnXSkKKworICAgICAgICAjIFRoZSBzYW1lLCBidXQgd2l0aCBuZXctc3R5bGUgY2xhc3Nlcy4gIFNpbmNlIHRoZXNlIGhhdmUgb2JqZWN0IGFzIGEKKyAgICAgICAgIyBiYXNlIGNsYXNzLCBhIGxvdCBtb3JlIGdldHMgc3Vja2VkIGluLgorICAgICAgICBkZWYgaW50ZXJlc3Rpbmcoc3RyaW5ncyk6CisgICAgICAgICAgICByZXR1cm4gW3MgZm9yIHMgaW4gc3RyaW5ncyBpZiBub3Qgcy5zdGFydHN3aXRoKCdfJyldCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgQ2RhdGEgPSAxCisgICAgICAgICAgICBkZWYgQ21ldGhvZChzZWxmKTogcGFzcworCisgICAgICAgIGNzdHVmZiA9IFsnQ2RhdGEnLCAnQ21ldGhvZCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJlc3RpbmcoZGlyKEMpKSwgY3N0dWZmKQorCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmVzdGluZyhkaXIoYykpLCBjc3R1ZmYpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ltX3NlbGYnLCBkaXIoQy5DbWV0aG9kKSkKKworICAgICAgICBjLmNkYXRhID0gMgorICAgICAgICBjLmNtZXRob2QgPSBsYW1iZGEgc2VsZjogMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyZXN0aW5nKGRpcihjKSksIGNzdHVmZiArIFsnY2RhdGEnLCAnY21ldGhvZCddKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbV9zZWxmJywgZGlyKGMuQ21ldGhvZCkpCisKKyAgICAgICAgY2xhc3MgQShDKToKKyAgICAgICAgICAgIEFkYXRhID0gMQorICAgICAgICAgICAgZGVmIEFtZXRob2Qoc2VsZik6IHBhc3MKKworICAgICAgICBhc3R1ZmYgPSBbJ0FkYXRhJywgJ0FtZXRob2QnXSArIGNzdHVmZgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyZXN0aW5nKGRpcihBKSksIGFzdHVmZikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaW1fc2VsZicsIGRpcihBLkFtZXRob2QpKQorICAgICAgICBhID0gQSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJlc3RpbmcoZGlyKGEpKSwgYXN0dWZmKQorICAgICAgICBhLmFkYXRhID0gNDIKKyAgICAgICAgYS5hbWV0aG9kID0gbGFtYmRhIHNlbGY6IDMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmVzdGluZyhkaXIoYSkpLCBhc3R1ZmYgKyBbJ2FkYXRhJywgJ2FtZXRob2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaW1fc2VsZicsIGRpcihhLkFtZXRob2QpKQorCisgICAgICAgICMgVHJ5IGEgbW9kdWxlIHN1YmNsYXNzLgorICAgICAgICBjbGFzcyBNKHR5cGUoc3lzKSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG1pbnN0YW5jZSA9IE0oIm0iKQorICAgICAgICBtaW5zdGFuY2UuYiA9IDIKKyAgICAgICAgbWluc3RhbmNlLmEgPSAxCisgICAgICAgIG5hbWVzID0gW3ggZm9yIHggaW4gZGlyKG1pbnN0YW5jZSkgaWYgeCBub3QgaW4gWyJfX25hbWVfXyIsICJfX2RvY19fIl1dCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXMsIFsnYScsICdiJ10pCisKKyAgICAgICAgY2xhc3MgTTIoTSk6CisgICAgICAgICAgICBkZWYgZ2V0ZGljdChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5vdCBhIGRpY3QhIgorICAgICAgICAgICAgX19kaWN0X18gPSBwcm9wZXJ0eShnZXRkaWN0KQorCisgICAgICAgIG0yaW5zdGFuY2UgPSBNMigibTIiKQorICAgICAgICBtMmluc3RhbmNlLmIgPSAyCisgICAgICAgIG0yaW5zdGFuY2UuYSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMmluc3RhbmNlLl9fZGljdF9fLCAiTm90IGEgZGljdCEiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkaXIobTJpbnN0YW5jZSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIFR3byBlc3NlbnRpYWxseSBmZWF0dXJlbGVzcyBvYmplY3RzLCBqdXN0IGluaGVyaXRpbmcgc3R1ZmYgZnJvbQorICAgICAgICAjIG9iamVjdC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoTm90SW1wbGVtZW50ZWQpLCBkaXIoRWxsaXBzaXMpKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuY2hlY2tfaW1wbF9kZXRhaWwoKToKKyAgICAgICAgICAgICMgTm9uZSBkaWZmZXJzIGluIFB5UHk6IGl0IGhhcyBhIF9fbm9uemVyb19fCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcihOb25lKSwgZGlyKEVsbGlwc2lzKSkKKworICAgICAgICAjIE5hc3R5IHRlc3QgY2FzZSBmb3IgcHJveGllZCBvYmplY3RzCisgICAgICAgIGNsYXNzIFdyYXBwZXIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmopOgorICAgICAgICAgICAgICAgIHNlbGYuX19vYmogPSBvYmoKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIldyYXBwZXIoJXMpIiAlIHJlcHIoc2VsZi5fX29iaikKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiBXcmFwcGVyKHNlbGYuX19vYmpba2V5XSkKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBsZW4oc2VsZi5fX29iaikKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gV3JhcHBlcihnZXRhdHRyKHNlbGYuX19vYmosIG5hbWUpKQorCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGNsYXNzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBXcmFwcGVyKHR5cGUoc2VsZikpCisgICAgICAgICAgICBfX2NsYXNzX18gPSBwcm9wZXJ0eShfX2dldGNsYXNzKQorCisgICAgICAgIGRpcihDKCkpICMgVGhpcyB1c2VkIHRvIHNlZ2ZhdWx0CisKKyAgICBkZWYgdGVzdF9zdXBlcnMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBzdXBlci4uLgorCisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBtZXRoKHNlbGYsIGEpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQSglcikiICUgYQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQSgpLm1ldGgoMSksICJBKDEpIikKKworICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuX19zdXBlciA9IHN1cGVyKEIsIHNlbGYpCisgICAgICAgICAgICBkZWYgbWV0aChzZWxmLCBhKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkIoJXIpIiAlIGEgKyBzZWxmLl9fc3VwZXIubWV0aChhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQigpLm1ldGgoMiksICJCKDIpQSgyKSIpCisKKyAgICAgICAgY2xhc3MgQyhBKToKKyAgICAgICAgICAgIGRlZiBtZXRoKHNlbGYsIGEpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQyglcikiICUgYSArIHNlbGYuX19zdXBlci5tZXRoKGEpCisgICAgICAgIEMuX0NfX3N1cGVyID0gc3VwZXIoQykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMoKS5tZXRoKDMpLCAiQygzKUEoMykiKQorCisgICAgICAgIGNsYXNzIEQoQywgQik6CisgICAgICAgICAgICBkZWYgbWV0aChzZWxmLCBhKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkQoJXIpIiAlIGEgKyBzdXBlcihELCBzZWxmKS5tZXRoKGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEKCkubWV0aCg0KSwgIkQoNClDKDQpQig0KUEoNCkiKQorCisgICAgICAgICMgVGVzdCBmb3Igc3ViY2xhc3Npbmcgc3VwZXIKKworICAgICAgICBjbGFzcyBteXN1cGVyKHN1cGVyKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKG15c3VwZXIsIHNlbGYpLl9faW5pdF9fKCphcmdzKQorCisgICAgICAgIGNsYXNzIEUoRCk6CisgICAgICAgICAgICBkZWYgbWV0aChzZWxmLCBhKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkUoJXIpIiAlIGEgKyBteXN1cGVyKEUsIHNlbGYpLm1ldGgoYSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUoKS5tZXRoKDUpLCAiRSg1KUQoNSlDKDUpQig1KUEoNSkiKQorCisgICAgICAgIGNsYXNzIEYoRSk6CisgICAgICAgICAgICBkZWYgbWV0aChzZWxmLCBhKToKKyAgICAgICAgICAgICAgICBzID0gc2VsZi5fX3N1cGVyICMgPT0gbXlzdXBlcihGLCBzZWxmKQorICAgICAgICAgICAgICAgIHJldHVybiAiRiglcilbJXNdIiAlIChhLCBzLl9fY2xhc3NfXy5fX25hbWVfXykgKyBzLm1ldGgoYSkKKyAgICAgICAgRi5fRl9fc3VwZXIgPSBteXN1cGVyKEYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKCkubWV0aCg2KSwgIkYoNilbbXlzdXBlcl1FKDYpRCg2KUMoNilCKDYpQSg2KSIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgY2VydGFpbiBlcnJvcnMgYXJlIHJhaXNlZAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1cGVyKEQsIDQyKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYWxsb3cgc3VwZXIoRCwgNDIpIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdXBlcihELCBDKCkpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBhbGxvdyBzdXBlcihELCBDKCkpIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdXBlcihEKS5fX2dldF9fKDEyKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYWxsb3cgc3VwZXIoRCkuX19nZXRfXygxMikiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1cGVyKEQpLl9fZ2V0X18oQygpKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYWxsb3cgc3VwZXIoRCkuX19nZXRfXyhDKCkpIikKKworICAgICAgICAjIE1ha2Ugc3VyZSBkYXRhIGRlc2NyaXB0b3JzIGNhbiBiZSBvdmVycmlkZGVuIGFuZCBhY2Nlc3NlZCB2aWEgc3VwZXIKKyAgICAgICAgIyAobmV3IGZlYXR1cmUgaW4gUHl0aG9uIDIuMykKKworICAgICAgICBjbGFzcyBERGJhc2Uob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBnZXR4KHNlbGYpOiByZXR1cm4gNDIKKyAgICAgICAgICAgIHggPSBwcm9wZXJ0eShnZXR4KQorCisgICAgICAgIGNsYXNzIEREc3ViKEREYmFzZSk6CisgICAgICAgICAgICBkZWYgZ2V0eChzZWxmKTogcmV0dXJuICJoZWxsbyIKKyAgICAgICAgICAgIHggPSBwcm9wZXJ0eShnZXR4KQorCisgICAgICAgIGRkID0gRERzdWIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRkLngsICJoZWxsbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VwZXIoRERzdWIsIGRkKS54LCA0MikKKworICAgICAgICAjIEVuc3VyZSB0aGF0IHN1cGVyKCkgbG9va3VwIG9mIGRlc2NyaXB0b3IgZnJvbSBjbGFzc21ldGhvZAorICAgICAgICAjIHdvcmtzIChTRiBJRCMgNzQzNjI3KQorCisgICAgICAgIGNsYXNzIEJhc2Uob2JqZWN0KToKKyAgICAgICAgICAgIGFQcm9wID0gcHJvcGVydHkobGFtYmRhIHNlbGY6ICJmb28iKQorCisgICAgICAgIGNsYXNzIFN1YihCYXNlKToKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlc3Qoa2xhc3MpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihTdWIsa2xhc3MpLmFQcm9wCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTdWIudGVzdCgpLCBCYXNlLmFQcm9wKQorCisgICAgICAgICMgVmVyaWZ5IHRoYXQgc3VwZXIoKSBkb2Vzbid0IGFsbG93IGtleXdvcmQgYXJncworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdXBlcihCYXNlLCBrdz0xKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgic3VwZXIgc2hvdWxkbid0IGFjY2VwdCBrZXl3b3JkIGFyZ3MiKQorCisgICAgZGVmIHRlc3RfYmFzaWNfaW5oZXJpdGFuY2Uoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBpbmhlcml0YW5jZSBmcm9tIGJhc2ljIHR5cGVzLi4uCisKKyAgICAgICAgY2xhc3MgaGV4aW50KGludCk6CisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGhleChzZWxmKQorICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBoZXhpbnQoaW50Ll9fYWRkX18oc2VsZiwgb3RoZXIpKQorICAgICAgICAgICAgIyAoTm90ZSB0aGF0IG92ZXJyaWRpbmcgX19yYWRkX18gZG9lc24ndCB3b3JrLAorICAgICAgICAgICAgIyBiZWNhdXNlIHRoZSBpbnQgdHlwZSBnZXRzIGZpcnN0IGRpYnMuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoaGV4aW50KDcpICsgOSksICIweDEwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGhleGludCgxMDAwKSArIDcpLCAiMHgzZWYiKQorICAgICAgICBhID0gaGV4aW50KDEyMzQ1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIDEyMzQ1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChhKSwgMTIzNDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQoYSkuX19jbGFzc19fIGlzIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGEpLCBoYXNoKDEyMzQ1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgrYSkuX19jbGFzc19fIGlzIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhID4+IDApLl9fY2xhc3NfXyBpcyBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA8PCAwKS5fX2NsYXNzX18gaXMgaW50KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGhleGludCgwKSA8PCAxMikuX19jbGFzc19fIGlzIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChoZXhpbnQoMCkgPj4gMTIpLl9fY2xhc3NfXyBpcyBpbnQpCisKKyAgICAgICAgY2xhc3Mgb2N0bG9uZyhsb25nKToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFtdCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzID0gb2N0KHNlbGYpCisgICAgICAgICAgICAgICAgaWYgc1stMV0gPT0gJ0wnOgorICAgICAgICAgICAgICAgICAgICBzID0gc1s6LTFdCisgICAgICAgICAgICAgICAgcmV0dXJuIHMKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc3VwZXIob2N0bG9uZywgc2VsZikuX19hZGRfXyhvdGhlcikpCisgICAgICAgICAgICBfX3JhZGRfXyA9IF9fYWRkX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIob2N0bG9uZygzKSArIDUpLCAiMDEwIikKKyAgICAgICAgIyAoTm90ZSB0aGF0IG92ZXJyaWRpbmcgX19yYWRkX18gaGVyZSBvbmx5IHNlZW1zIHRvIHdvcmsKKyAgICAgICAgIyBiZWNhdXNlIHRoZSBleGFtcGxlIHVzZXMgYSBzaG9ydCBpbnQgbGVmdCBhcmd1bWVudC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKDUgKyBvY3Rsb25nKDMwMDApKSwgIjA1Njc1IikKKyAgICAgICAgYSA9IG9jdGxvbmcoMTIzNDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgMTIzNDVMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoYSksIDEyMzQ1TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGEpLCBoYXNoKDEyMzQ1TCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb25nKGEpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKCthKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgtYSkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoLW9jdGxvbmcoMCkpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgPj4gMCkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSA8PCAwKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhIC0gMCkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAqIDEpLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgKiogMSkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAvLyAxKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgxICogYSkuX19jbGFzc19fIGlzIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSB8IDApLl9fY2xhc3NfXyBpcyBsb25nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgXiAwKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICYgLTFMKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChvY3Rsb25nKDApIDw8IDEyKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChvY3Rsb25nKDApID4+IDEyKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFicyhvY3Rsb25nKDApKS5fX2NsYXNzX18gaXMgbG9uZykKKworICAgICAgICAjIEJlY2F1c2Ugb2N0bG9uZyBvdmVycmlkZXMgX19hZGRfXywgd2UgY2FuJ3QgY2hlY2sgdGhlIGFic2VuY2Ugb2YgKzAKKyAgICAgICAgIyBvcHRpbWl6YXRpb25zIHVzaW5nIG9jdGxvbmcuCisgICAgICAgIGNsYXNzIGxvbmdjbG9uZShsb25nKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYSA9IGxvbmdjbG9uZSgxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgKyAwKS5fX2NsYXNzX18gaXMgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgwICsgYSkuX19jbGFzc19fIGlzIGxvbmcpCisKKyAgICAgICAgIyBDaGVjayB0aGF0IG5lZ2F0aXZlIGNsb25lcyBkb24ndCBzZWdmYXVsdAorICAgICAgICBhID0gbG9uZ2Nsb25lKC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19kaWN0X18sIHt9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoYSksIC0xKSAgIyBzZWxmLmFzc2VydFRydWUgUHlOdW1iZXJfTG9uZygpIGNvcGllcyB0aGUgc2lnbiBiaXQKKworICAgICAgICBjbGFzcyBwcmVjZmxvYXQoZmxvYXQpOgorICAgICAgICAgICAgX19zbG90c19fID0gWydwcmVjJ10KKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT0wLjAsIHByZWM9MTIpOgorICAgICAgICAgICAgICAgIHNlbGYucHJlYyA9IGludChwcmVjKQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiJS4qZyIgJSAoc2VsZi5wcmVjLCBzZWxmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocHJlY2Zsb2F0KDEuMSkpLCAiMS4xIikKKyAgICAgICAgYSA9IHByZWNmbG9hdCgxMjM0NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCAxMjM0NS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KGEpLCAxMjM0NS4wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmxvYXQoYSkuX19jbGFzc19fIGlzIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhc2goMTIzNDUuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoK2EpLl9fY2xhc3NfXyBpcyBmbG9hdCkKKworICAgICAgICBjbGFzcyBtYWRjb21wbGV4KGNvbXBsZXgpOgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiJS4xN2dqJSsuMTdnIiAlIChzZWxmLmltYWcsIHNlbGYucmVhbCkKKyAgICAgICAgYSA9IG1hZGNvbXBsZXgoLTMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihhKSwgIjRqLTMiKQorICAgICAgICBiYXNlID0gY29tcGxleCgtMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9fY2xhc3NfXywgY29tcGxleCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXgoYSksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleChhKS5fX2NsYXNzX18sIGNvbXBsZXgpCisgICAgICAgIGEgPSBtYWRjb21wbGV4KGEpICAjIGp1c3QgdHJ5aW5nIGFub3RoZXIgZm9ybSBvZiB0aGUgY29uc3RydWN0b3IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGEpLCAiNGotMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wbGV4KGEpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXgoYSkuX19jbGFzc19fLCBjb21wbGV4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhc2goYmFzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCthKS5fX2NsYXNzX18sIGNvbXBsZXgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgKyAwKS5fX2NsYXNzX18sIGNvbXBsZXgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSArIDAsIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgLSAwKS5fX2NsYXNzX18sIGNvbXBsZXgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIDAsIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgKiAxKS5fX2NsYXNzX18sIGNvbXBsZXgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAqIDEsIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgLyAxKS5fX2NsYXNzX18sIGNvbXBsZXgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAvIDEsIGJhc2UpCisKKyAgICAgICAgY2xhc3MgbWFkdHVwbGUodHVwbGUpOgorICAgICAgICAgICAgX3JldiA9IE5vbmUKKyAgICAgICAgICAgIGRlZiByZXYoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fcmV2IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmV2CisgICAgICAgICAgICAgICAgTCA9IGxpc3Qoc2VsZikKKyAgICAgICAgICAgICAgICBMLnJldmVyc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuX3JldiA9IHNlbGYuX19jbGFzc19fKEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JldgorICAgICAgICBhID0gbWFkdHVwbGUoKDEsMiwzLDQsNSw2LDcsOCw5LDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsICgxLDIsMyw0LDUsNiw3LDgsOSwwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnJldigpLCBtYWR0dXBsZSgoMCw5LDgsNyw2LDUsNCwzLDIsMSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEucmV2KCkucmV2KCksIG1hZHR1cGxlKCgxLDIsMyw0LDUsNiw3LDgsOSwwKSkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUxMik6CisgICAgICAgICAgICB0ID0gbWFkdHVwbGUocmFuZ2UoaSkpCisgICAgICAgICAgICB1ID0gdC5yZXYoKQorICAgICAgICAgICAgdiA9IHUucmV2KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgdCkKKyAgICAgICAgYSA9IG1hZHR1cGxlKCgxLDIsMyw0LDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKGEpLCAoMSwyLDMsNCw1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR1cGxlKGEpLl9fY2xhc3NfXyBpcyB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGEpLCBoYXNoKCgxLDIsMyw0LDUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFbOl0uX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgKiAxKS5fX2NsYXNzX18gaXMgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAqIDApLl9fY2xhc3NfXyBpcyB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICsgKCkpLl9fY2xhc3NfXyBpcyB0dXBsZSkKKyAgICAgICAgYSA9IG1hZHR1cGxlKCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKGEpLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR1cGxlKGEpLl9fY2xhc3NfXyBpcyB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICsgYSkuX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKGEgKiAwKS5fX2NsYXNzX18gaXMgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoYSAqIDEpLl9fY2xhc3NfXyBpcyB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhICogMikuX19jbGFzc19fIGlzIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYVs6XS5fX2NsYXNzX18gaXMgdHVwbGUpCisKKyAgICAgICAgY2xhc3MgbWFkc3RyaW5nKHN0cik6CisgICAgICAgICAgICBfcmV2ID0gTm9uZQorICAgICAgICAgICAgZGVmIHJldihzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9yZXYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZXYKKyAgICAgICAgICAgICAgICBMID0gbGlzdChzZWxmKQorICAgICAgICAgICAgICAgIEwucmV2ZXJzZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fcmV2ID0gc2VsZi5fX2NsYXNzX18oIiIuam9pbihMKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmV2CisgICAgICAgIHMgPSBtYWRzdHJpbmcoImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucmV2KCksIG1hZHN0cmluZygienl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJldigpLnJldigpLCBtYWRzdHJpbmcoImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IikpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDI1Nik6CisgICAgICAgICAgICBzID0gbWFkc3RyaW5nKCIiLmpvaW4obWFwKGNociwgcmFuZ2UoaSkpKSkKKyAgICAgICAgICAgIHQgPSBzLnJldigpCisgICAgICAgICAgICB1ID0gdC5yZXYoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LCBzKQorICAgICAgICBzID0gbWFkc3RyaW5nKCIxMjM0NSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHMpLCAiMTIzNDUiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKHMpLl9fY2xhc3NfXyBpcyBzdHIpCisKKyAgICAgICAgYmFzZSA9ICJceDAwIiAqIDUKKyAgICAgICAgcyA9IG1hZHN0cmluZyhiYXNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHMpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKHMpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChzKSwgaGFzaChiYXNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7czogMX1bYmFzZV0sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2Jhc2U6IDF9W3NdLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKHMgKyAiIikuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICsgIiIsIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoIiIgKyBzKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiICsgcywgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChzICogMCkuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICogMCwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgocyAqIDEpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyAqIDEsIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgocyAqIDIpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyAqIDIsIGJhc2UgKyBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc1s6XS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbOl0sIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzWzA6MF0uX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzA6MF0sICIiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdHJpcCgpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdHJpcCgpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5sc3RyaXAoKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMubHN0cmlwKCksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnJzdHJpcCgpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yc3RyaXAoKSwgYmFzZSkKKyAgICAgICAgaWRlbnRpdHl0YWIgPSAnJy5qb2luKFtjaHIoaSkgZm9yIGkgaW4gcmFuZ2UoMjU2KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnRyYW5zbGF0ZShpZGVudGl0eXRhYikuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnRyYW5zbGF0ZShpZGVudGl0eXRhYiksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnRyYW5zbGF0ZShpZGVudGl0eXRhYiwgIngiKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudHJhbnNsYXRlKGlkZW50aXR5dGFiLCAieCIpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudHJhbnNsYXRlKGlkZW50aXR5dGFiLCAiXHgwMCIpLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMucmVwbGFjZSgieCIsICJ4IikuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJlcGxhY2UoIngiLCAieCIpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5sanVzdChsZW4ocykpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5sanVzdChsZW4ocykpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5yanVzdChsZW4ocykpLl9fY2xhc3NfXyBpcyBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yanVzdChsZW4ocykpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5jZW50ZXIobGVuKHMpKS5fX2NsYXNzX18gaXMgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuY2VudGVyKGxlbihzKSksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmxvd2VyKCkuX19jbGFzc19fIGlzIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmxvd2VyKCksIGJhc2UpCisKKyAgICAgICAgY2xhc3MgbWFkdW5pY29kZSh1bmljb2RlKToKKyAgICAgICAgICAgIF9yZXYgPSBOb25lCisgICAgICAgICAgICBkZWYgcmV2KHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3JldiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JldgorICAgICAgICAgICAgICAgIEwgPSBsaXN0KHNlbGYpCisgICAgICAgICAgICAgICAgTC5yZXZlcnNlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9yZXYgPSBzZWxmLl9fY2xhc3NfXyh1IiIuam9pbihMKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmV2CisgICAgICAgIHUgPSBtYWR1bmljb2RlKCJBQkNERUYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIHUiQUJDREVGIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LnJldigpLCBtYWR1bmljb2RlKHUiRkVEQ0JBIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5yZXYoKS5yZXYoKSwgbWFkdW5pY29kZSh1IkFCQ0RFRiIpKQorICAgICAgICBiYXNlID0gdSIxMjM0NSIKKyAgICAgICAgdSA9IG1hZHVuaWNvZGUoYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKHUpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pY29kZSh1KS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHUpLCBoYXNoKGJhc2UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHt1OiAxfVtiYXNlXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7YmFzZTogMX1bdV0sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LnN0cmlwKCkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5zdHJpcCgpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodS5sc3RyaXAoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmxzdHJpcCgpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodS5yc3RyaXAoKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LnJzdHJpcCgpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodS5yZXBsYWNlKHUieCIsIHUieCIpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUucmVwbGFjZSh1IngiLCB1IngiKSwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUucmVwbGFjZSh1Inh5IiwgdSJ4eSIpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUucmVwbGFjZSh1Inh5IiwgdSJ4eSIpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodS5jZW50ZXIobGVuKHUpKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmNlbnRlcihsZW4odSkpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodS5sanVzdChsZW4odSkpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUubGp1c3QobGVuKHUpKSwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUucmp1c3QobGVuKHUpKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LnJqdXN0KGxlbih1KSksIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1Lmxvd2VyKCkuX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5sb3dlcigpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodS51cHBlcigpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUudXBwZXIoKSwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUuY2FwaXRhbGl6ZSgpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuY2FwaXRhbGl6ZSgpLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodS50aXRsZSgpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUudGl0bGUoKSwgYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCh1ICsgdSIiKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ICsgdSIiLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKHUiIiArIHUpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiIiArIHUsIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgodSAqIDApLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUgKiAwLCB1IiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgodSAqIDEpLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUgKiAxLCBiYXNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKHUgKiAyKS5fX2NsYXNzX18gaXMgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ICogMiwgYmFzZSArIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1WzpdLl9fY2xhc3NfXyBpcyB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVbOl0sIGJhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1WzA6MF0uX19jbGFzc19fIGlzIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVswOjBdLCB1IiIpCisKKyAgICAgICAgY2xhc3Mgc3VibGlzdChsaXN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYSA9IHN1Ymxpc3QocmFuZ2UoNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgcmFuZ2UoNSkpCisgICAgICAgIGEuYXBwZW5kKCJoZWxsbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgcmFuZ2UoNSkgKyBbImhlbGxvIl0pCisgICAgICAgIGFbNV0gPSA1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgcmFuZ2UoNikpCisgICAgICAgIGEuZXh0ZW5kKHJhbmdlKDYsIDIwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCByYW5nZSgyMCkpCisgICAgICAgIGFbLTU6XSA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgcmFuZ2UoMTUpKQorICAgICAgICBkZWwgYVsxMDoxNV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYSksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIHJhbmdlKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGEpLCByYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVswXSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzldLCA5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbLTEwXSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWy0xXSwgOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzo1XSwgcmFuZ2UoNSkpCisKKyAgICAgICAgY2xhc3MgQ291bnRlZElucHV0KGZpbGUpOgorICAgICAgICAgICAgIiIiQ291bnRzIGxpbmVzIHJlYWQgYnkgc2VsZi5yZWFkbGluZSgpLgorCisgICAgICAgICAgICBzZWxmLmxpbmVubyBpcyB0aGUgMC1iYXNlZCBvcmRpbmFsIG9mIHRoZSBsYXN0IGxpbmUgcmVhZCwgdXAgdG8KKyAgICAgICAgICAgIGEgbWF4aW11bSBvZiBvbmUgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGZpbGUuCisKKyAgICAgICAgICAgIHNlbGYuYXRlb2YgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZmluYWwgIiIgbGluZSBoYXMgYmVlbiByZWFkLAorICAgICAgICAgICAgYXQgd2hpY2ggcG9pbnQgc2VsZi5saW5lbm8gc3RvcHMgaW5jcmVtZW50aW5nLCBhbmQgZnVydGhlciBjYWxscworICAgICAgICAgICAgdG8gcmVhZGxpbmUoKSBjb250aW51ZSB0byByZXR1cm4gIiIuCisgICAgICAgICAgICAiIiIKKworICAgICAgICAgICAgbGluZW5vID0gMAorICAgICAgICAgICAgYXRlb2YgPSAwCisgICAgICAgICAgICBkZWYgcmVhZGxpbmUoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5hdGVvZjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgICAgICAgICAgcyA9IGZpbGUucmVhZGxpbmUoc2VsZikKKyAgICAgICAgICAgICAgICAjIE5leHQgbGluZSB3b3JrcyB0b28uCisgICAgICAgICAgICAgICAgIyBzID0gc3VwZXIoQ291bnRlZElucHV0LCBzZWxmKS5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgc2VsZi5saW5lbm8gKz0gMQorICAgICAgICAgICAgICAgIGlmIHMgPT0gIiI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXRlb2YgPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIHMKKworICAgICAgICBmID0gZmlsZShuYW1lPXRlc3Rfc3VwcG9ydC5URVNURk4sIG1vZGU9J3cnKQorICAgICAgICBsaW5lcyA9IFsnYVxuJywgJ2JcbicsICdjXG4nXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlbGluZXMobGluZXMpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGYgPSBDb3VudGVkSW5wdXQodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIGZvciAoaSwgZXhwZWN0ZWQpIGluIHppcChyYW5nZSgxLCA1KSArIFs0XSwgbGluZXMgKyAyICogWyIiXSk6CisgICAgICAgICAgICAgICAgZ290ID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5saW5lbm8sIGkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmF0ZW9mLCAoaSA+IGxlbihsaW5lcykpKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3Rfa2V5d29yZHMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBrZXl3b3JkIGFyZ3MgdG8gYmFzaWMgdHlwZSBjb25zdHJ1Y3RvcnMgLi4uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHg9MSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoeD0yKSwgMi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoeD0zKSwgM0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleChpbWFnPTQyLCByZWFsPTY2NiksIGNvbXBsZXgoNjY2LCA0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG9iamVjdD01MDApLCAnNTAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKHN0cmluZz0nYWJjJywgZXJyb3JzPSdzdHJpY3QnKSwgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKHNlcXVlbmNlPXJhbmdlKDMpKSwgKDAsIDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc2VxdWVuY2U9KDAsIDEsIDIpKSwgcmFuZ2UoMykpCisgICAgICAgICMgbm90ZTogYXMgb2YgUHl0aG9uIDIuMywgZGljdCgpIG5vIGxvbmdlciBoYXMgYW4gIml0ZW1zIiBrZXl3b3JkIGFyZworCisgICAgICAgIGZvciBjb25zdHJ1Y3RvciBpbiAoaW50LCBmbG9hdCwgbG9uZywgY29tcGxleCwgc3RyLCB1bmljb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlLCBsaXN0LCBmaWxlKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvcihib2d1c19rZXl3b3JkX2FyZz0xKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgVHlwZUVycm9yIGZyb20gYm9ndXMga2V5d29yZCBhcmd1bWVudCB0byAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGNvbnN0cnVjdG9yKQorCisgICAgZGVmIHRlc3Rfc3RyX3N1YmNsYXNzX2FzX2RpY3Rfa2V5KHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgYSBzdHIgc3ViY2xhc3MgdXNlZCBhcyBkaWN0IGtleSAuLgorCisgICAgICAgIGNsYXNzIGNpc3RyKHN0cik6CisgICAgICAgICAgICAiIiJTdWJsY2FzcyBvZiBzdHIgdGhhdCBjb21wdXRlcyBfX2VxX18gY2FzZS1pbnNlbnNpdGl2ZWx5LgorCisgICAgICAgICAgICBBbHNvIGNvbXB1dGVzIGEgaGFzaCBjb2RlIG9mIHRoZSBzdHJpbmcgaW4gY2Fub25pY2FsIGZvcm0uCisgICAgICAgICAgICAiIiIKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLmNhbm9uaWNhbCA9IHZhbHVlLmxvd2VyKCkKKyAgICAgICAgICAgICAgICBzZWxmLmhhc2hjb2RlID0gaGFzaChzZWxmLmNhbm9uaWNhbCkKKworICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIGNpc3RyKToKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIgPSBjaXN0cihvdGhlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jYW5vbmljYWwgPT0gb3RoZXIuY2Fub25pY2FsCisKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYXNoY29kZQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2lzdHIoJ0FCQycpLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYUJjJywgY2lzdHIoJ0FCQycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjaXN0cignQUJDJykpLCAnQUJDJykKKworICAgICAgICBkID0ge2Npc3RyKCdvbmUnKTogMSwgY2lzdHIoJ3R3bycpOiAyLCBjaXN0cigndEhyZWUnKTogM30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkW2Npc3RyKCdvbmUnKV0sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtjaXN0cigndFdvJyldLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbY2lzdHIoJ1RIckVFJyldLCAzKQorICAgICAgICBzZWxmLmFzc2VydEluKGNpc3RyKCdPTmUnKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChjaXN0cigndGhyRUUnKSksIDMpCisKKyAgICBkZWYgdGVzdF9jbGFzc2ljX2NvbXBhcmlzb25zKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgY2xhc3NpYyBjb21wYXJpc29ucy4uLgorICAgICAgICBjbGFzcyBjbGFzc2ljOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGZvciBiYXNlIGluIChjbGFzc2ljLCBpbnQsIG9iamVjdCk6CisgICAgICAgICAgICBjbGFzcyBDKGJhc2UpOgorICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSBpbnQodmFsdWUpCisgICAgICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBDKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZi52YWx1ZSwgb3RoZXIudmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGludCkgb3IgaXNpbnN0YW5jZShvdGhlciwgbG9uZyk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYudmFsdWUsIG90aGVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBTaWxlbmNlIFB5M2sgd2FybmluZworCisgICAgICAgICAgICBjMSA9IEMoMSkKKyAgICAgICAgICAgIGMyID0gQygyKQorICAgICAgICAgICAgYzMgPSBDKDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMxLCAxKQorICAgICAgICAgICAgYyA9IHsxOiBjMSwgMjogYzIsIDM6IGMzfQorICAgICAgICAgICAgZm9yIHggaW4gMSwgMiwgMzoKKyAgICAgICAgICAgICAgICBmb3IgeSBpbiAxLCAyLCAzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY21wKGNbeF0sIGNbeV0pID09IGNtcCh4LCB5KSwgIng9JWQsIHk9JWQiICUgKHgsIHkpKQorICAgICAgICAgICAgICAgICAgICBmb3Igb3AgaW4gIjwiLCAiPD0iLCAiPT0iLCAiIT0iLCAiPiIsICI+PSI6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZhbCgiY1t4XSAlcyBjW3ldIiAlIG9wKSA9PSBldmFsKCJ4ICVzIHkiICUgb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4PSVkLCB5PSVkIiAlICh4LCB5KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtcChjW3hdLCB5KSA9PSBjbXAoeCwgeSksICJ4PSVkLCB5PSVkIiAlICh4LCB5KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtcCh4LCBjW3ldKSA9PSBjbXAoeCwgeSksICJ4PSVkLCB5PSVkIiAlICh4LCB5KSkKKworICAgIGRlZiB0ZXN0X3JpY2hfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyByaWNoIGNvbXBhcmlzb25zLi4uCisgICAgICAgIGNsYXNzIFooY29tcGxleCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHogPSBaKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeiwgMSswaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxKzBqLCB6KQorICAgICAgICBjbGFzcyBaWihjb21wbGV4KToKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFicyhzZWxmIC0gb3RoZXIpIDw9IDFlLTYKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKyAgICAgICAgenogPSBaWigxLjAwMDAwMDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoenosIDErMGopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSswaiwgenopCisKKyAgICAgICAgY2xhc3MgY2xhc3NpYzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIGJhc2UgaW4gKGNsYXNzaWMsIGludCwgb2JqZWN0LCBsaXN0KToKKyAgICAgICAgICAgIGNsYXNzIEMoYmFzZSk6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IGludCh2YWx1ZSkKKyAgICAgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmXywgb3RoZXIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBjYWxsIF9fY21wX18iKQorICAgICAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZSAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisgICAgICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgaW50KSBvciBpc2luc3RhbmNlKG90aGVyLCBsb25nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBDKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlICE9IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGludCkgb3IgaXNpbnN0YW5jZShvdGhlciwgbG9uZyk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSAhPSBvdGhlcgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgQyk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGludCkgb3IgaXNpbnN0YW5jZShvdGhlciwgbG9uZyk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8IG90aGVyCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBDKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDw9IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGludCkgb3IgaXNpbnN0YW5jZShvdGhlciwgbG9uZyk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8PSBvdGhlcgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgQyk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA+IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGludCkgb3IgaXNpbnN0YW5jZShvdGhlciwgbG9uZyk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA+IG90aGVyCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBDKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID49IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGludCkgb3IgaXNpbnN0YW5jZShvdGhlciwgbG9uZyk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA+PSBvdGhlcgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgICAgIGMxID0gQygxKQorICAgICAgICAgICAgYzIgPSBDKDIpCisgICAgICAgICAgICBjMyA9IEMoMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYzEsIDEpCisgICAgICAgICAgICBjID0gezE6IGMxLCAyOiBjMiwgMzogYzN9CisgICAgICAgICAgICBmb3IgeCBpbiAxLCAyLCAzOgorICAgICAgICAgICAgICAgIGZvciB5IGluIDEsIDIsIDM6CisgICAgICAgICAgICAgICAgICAgIGZvciBvcCBpbiAiPCIsICI8PSIsICI9PSIsICIhPSIsICI+IiwgIj49IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmFsKCJjW3hdICVzIGNbeV0iICUgb3ApID09IGV2YWwoInggJXMgeSIgJSBvcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIng9JWQsIHk9JWQiICUgKHgsIHkpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV2YWwoImNbeF0gJXMgeSIgJSBvcCkgPT0gZXZhbCgieCAlcyB5IiAlIG9wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieD0lZCwgeT0lZCIgJSAoeCwgeSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZhbCgieCAlcyBjW3ldIiAlIG9wKSA9PSBldmFsKCJ4ICVzIHkiICUgb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4PSVkLCB5PSVkIiAlICh4LCB5KSkKKworICAgIGRlZiB0ZXN0X2NvZXJjaW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGNvZXJjaW9ucy4uLgorICAgICAgICBjbGFzcyBJKGludCk6IHBhc3MKKyAgICAgICAgY29lcmNlKEkoMCksIDApCisgICAgICAgIGNvZXJjZSgwLCBJKDApKQorICAgICAgICBjbGFzcyBMKGxvbmcpOiBwYXNzCisgICAgICAgIGNvZXJjZShMKDApLCAwKQorICAgICAgICBjb2VyY2UoTCgwKSwgMEwpCisgICAgICAgIGNvZXJjZSgwLCBMKDApKQorICAgICAgICBjb2VyY2UoMEwsIEwoMCkpCisgICAgICAgIGNsYXNzIEYoZmxvYXQpOiBwYXNzCisgICAgICAgIGNvZXJjZShGKDApLCAwKQorICAgICAgICBjb2VyY2UoRigwKSwgMEwpCisgICAgICAgIGNvZXJjZShGKDApLCAwLikKKyAgICAgICAgY29lcmNlKDAsIEYoMCkpCisgICAgICAgIGNvZXJjZSgwTCwgRigwKSkKKyAgICAgICAgY29lcmNlKDAuLCBGKDApKQorICAgICAgICBjbGFzcyBDKGNvbXBsZXgpOiBwYXNzCisgICAgICAgIGNvZXJjZShDKDApLCAwKQorICAgICAgICBjb2VyY2UoQygwKSwgMEwpCisgICAgICAgIGNvZXJjZShDKDApLCAwLikKKyAgICAgICAgY29lcmNlKEMoMCksIDBqKQorICAgICAgICBjb2VyY2UoMCwgQygwKSkKKyAgICAgICAgY29lcmNlKDBMLCBDKDApKQorICAgICAgICBjb2VyY2UoMC4sIEMoMCkpCisgICAgICAgIGNvZXJjZSgwaiwgQygwKSkKKworICAgIGRlZiB0ZXN0X2Rlc2NyZG9jKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgZGVzY3JpcHRvciBkb2Mgc3RyaW5ncy4uLgorICAgICAgICBkZWYgY2hlY2soZGVzY3IsIHdoYXQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXNjci5fX2RvY19fLCB3aGF0KQorICAgICAgICBjaGVjayhmaWxlLmNsb3NlZCwgIlRydWUgaWYgdGhlIGZpbGUgaXMgY2xvc2VkIikgIyBnZXRzZXQgZGVzY3JpcHRvcgorICAgICAgICBjaGVjayhmaWxlLm5hbWUsICJmaWxlIG5hbWUiKSAjIG1lbWJlciBkZXNjcmlwdG9yCisKKyAgICBkZWYgdGVzdF9kb2NfZGVzY3JpcHRvcihzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIF9fZG9jX18gZGVzY3JpcHRvci4uLgorICAgICAgICAjIFNGIGJ1ZyA1NDI5ODQKKyAgICAgICAgY2xhc3MgRG9jRGVzY3Iob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldF9fKHNlbGYsIG9iamVjdCwgb3R5cGUpOgorICAgICAgICAgICAgICAgIGlmIG9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gb2JqZWN0Ll9fY2xhc3NfXy5fX25hbWVfXyArICcgaW5zdGFuY2UnCisgICAgICAgICAgICAgICAgaWYgb3R5cGU6CisgICAgICAgICAgICAgICAgICAgIG90eXBlID0gb3R5cGUuX19uYW1lX18KKyAgICAgICAgICAgICAgICByZXR1cm4gJ29iamVjdD0lczsgdHlwZT0lcycgJSAob2JqZWN0LCBvdHlwZSkKKyAgICAgICAgY2xhc3MgT2xkQ2xhc3M6CisgICAgICAgICAgICBfX2RvY19fID0gRG9jRGVzY3IoKQorICAgICAgICBjbGFzcyBOZXdDbGFzcyhvYmplY3QpOgorICAgICAgICAgICAgX19kb2NfXyA9IERvY0Rlc2NyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChPbGRDbGFzcy5fX2RvY19fLCAnb2JqZWN0PU5vbmU7IHR5cGU9T2xkQ2xhc3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE9sZENsYXNzKCkuX19kb2NfXywgJ29iamVjdD1PbGRDbGFzcyBpbnN0YW5jZTsgdHlwZT1PbGRDbGFzcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTmV3Q2xhc3MuX19kb2NfXywgJ29iamVjdD1Ob25lOyB0eXBlPU5ld0NsYXNzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOZXdDbGFzcygpLl9fZG9jX18sICdvYmplY3Q9TmV3Q2xhc3MgaW5zdGFuY2U7IHR5cGU9TmV3Q2xhc3MnKQorCisgICAgZGVmIHRlc3Rfc2V0X2NsYXNzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgX19jbGFzc19fIGFzc2lnbm1lbnQuLi4KKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOiBwYXNzCisgICAgICAgIGNsYXNzIEQob2JqZWN0KTogcGFzcworICAgICAgICBjbGFzcyBFKG9iamVjdCk6IHBhc3MKKyAgICAgICAgY2xhc3MgRihELCBFKTogcGFzcworICAgICAgICBmb3IgY2xzIGluIEMsIEQsIEUsIEY6CisgICAgICAgICAgICBmb3IgY2xzMiBpbiBDLCBELCBFLCBGOgorICAgICAgICAgICAgICAgIHggPSBjbHMoKQorICAgICAgICAgICAgICAgIHguX19jbGFzc19fID0gY2xzMgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4Ll9fY2xhc3NfXyBpcyBjbHMyKQorICAgICAgICAgICAgICAgIHguX19jbGFzc19fID0gY2xzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHguX19jbGFzc19fIGlzIGNscykKKyAgICAgICAgZGVmIGNhbnQoeCwgQyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeC5fX2NsYXNzX18gPSBDCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYWxsb3cgJXIuX19jbGFzc19fID0gJXIiICUgKHgsIEMpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbGF0dHIoeCwgIl9fY2xhc3NfXyIpCisgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYWxsb3cgZGVsICVyLl9fY2xhc3NfXyIgJSB4KQorICAgICAgICBjYW50KEMoKSwgbGlzdCkKKyAgICAgICAgY2FudChsaXN0KCksIEMpCisgICAgICAgIGNhbnQoQygpLCAxKQorICAgICAgICBjYW50KEMoKSwgb2JqZWN0KQorICAgICAgICBjYW50KG9iamVjdCgpLCBsaXN0KQorICAgICAgICBjYW50KGxpc3QoKSwgb2JqZWN0KQorICAgICAgICBjbGFzcyBJbnQoaW50KTogX19zbG90c19fID0gW10KKyAgICAgICAgY2FudCgyLCBJbnQpCisgICAgICAgIGNhbnQoSW50KCksIGludCkKKyAgICAgICAgY2FudChUcnVlLCBpbnQpCisgICAgICAgIGNhbnQoMiwgYm9vbCkKKyAgICAgICAgbyA9IG9iamVjdCgpCisgICAgICAgIGNhbnQobywgdHlwZSgxKSkKKyAgICAgICAgY2FudChvLCB0eXBlKE5vbmUpKQorICAgICAgICBkZWwgbworICAgICAgICBjbGFzcyBHKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbImEiLCAiYiJdCisgICAgICAgIGNsYXNzIEgob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsiYiIsICJhIl0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdW5pY29kZQorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgY2xhc3MgSShvYmplY3QpOgorICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsiYSIsICJiIl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNsYXNzIEkob2JqZWN0KToKKyAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbdW5pY29kZSgiYSIpLCB1bmljb2RlKCJiIildCisgICAgICAgIGNsYXNzIEoob2JqZWN0KToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsiYyIsICJiIl0KKyAgICAgICAgY2xhc3MgSyhvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gWyJhIiwgImIiLCAiZCJdCisgICAgICAgIGNsYXNzIEwoSCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbImUiXQorICAgICAgICBjbGFzcyBNKEkpOgorICAgICAgICAgICAgX19zbG90c19fID0gWyJlIl0KKyAgICAgICAgY2xhc3MgTihKKToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsiX193ZWFrcmVmX18iXQorICAgICAgICBjbGFzcyBQKEopOgorICAgICAgICAgICAgX19zbG90c19fID0gWyJfX2RpY3RfXyJdCisgICAgICAgIGNsYXNzIFEoSik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIFIoSik6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbIl9fZGljdF9fIiwgIl9fd2Vha3JlZl9fIl0KKworICAgICAgICBmb3IgY2xzLCBjbHMyIGluICgoRywgSCksIChHLCBJKSwgKEksIEgpLCAoUSwgUiksIChSLCBRKSk6CisgICAgICAgICAgICB4ID0gY2xzKCkKKyAgICAgICAgICAgIHguYSA9IDEKKyAgICAgICAgICAgIHguX19jbGFzc19fID0gY2xzMgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHguX19jbGFzc19fIGlzIGNsczIsCisgICAgICAgICAgICAgICAgICAgImFzc2lnbmluZyAlciBhcyBfX2NsYXNzX18gZm9yICVyIHNpbGVudGx5IGZhaWxlZCIgJSAoY2xzMiwgeCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYSwgMSkKKyAgICAgICAgICAgIHguX19jbGFzc19fID0gY2xzCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeC5fX2NsYXNzX18gaXMgY2xzLAorICAgICAgICAgICAgICAgICAgICJhc3NpZ25pbmcgJXIgYXMgX19jbGFzc19fIGZvciAlciBzaWxlbnRseSBmYWlsZWQiICUgKGNscywgeCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYSwgMSkKKyAgICAgICAgZm9yIGNscyBpbiBHLCBKLCBLLCBMLCBNLCBOLCBQLCBSLCBsaXN0LCBJbnQ6CisgICAgICAgICAgICBmb3IgY2xzMiBpbiBHLCBKLCBLLCBMLCBNLCBOLCBQLCBSLCBsaXN0LCBJbnQ6CisgICAgICAgICAgICAgICAgaWYgY2xzIGlzIGNsczI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgY2FudChjbHMoKSwgY2xzMikKKworICAgICAgICAjIElzc3VlNTI4Mzogd2hlbiBfX2NsYXNzX18gY2hhbmdlcyBpbiBfX2RlbF9fLCB0aGUgd3JvbmcKKyAgICAgICAgIyB0eXBlIGdldHMgREVDUkVGJ2QuCisgICAgICAgIGNsYXNzIE8ob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18gPSBPCisgICAgICAgIGwgPSBbQSgpIGZvciB4IGluIHJhbmdlKDEwMCldCisgICAgICAgIGRlbCBsCisKKyAgICBkZWYgdGVzdF9zZXRfZGljdChzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIF9fZGljdF9fIGFzc2lnbm1lbnQuLi4KKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOiBwYXNzCisgICAgICAgIGEgPSBDKCkKKyAgICAgICAgYS5fX2RpY3RfXyA9IHsnYic6IDF9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5iLCAxKQorICAgICAgICBkZWYgY2FudCh4LCBkaWN0KToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB4Ll9fZGljdF9fID0gZGljdAorICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGFsbG93ICVyLl9fZGljdF9fID0gJXIiICUgKHgsIGRpY3QpKQorICAgICAgICBjYW50KGEsIE5vbmUpCisgICAgICAgIGNhbnQoYSwgW10pCisgICAgICAgIGNhbnQoYSwgMSkKKyAgICAgICAgZGVsIGEuX19kaWN0X18gIyBEZWxldGluZyBfX2RpY3RfXyBpcyBhbGxvd2VkCisKKyAgICAgICAgY2xhc3MgQmFzZShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgdmVyaWZ5X2RpY3RfcmVhZG9ubHkoeCk6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHggaGFzIHRvIGJlIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgaW5oZXJpdGluZyBmcm9tIEJhc2UuCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGNhbnQoeCwge30pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHguX19kaWN0X18KKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBhbGxvdyBkZWwgJXIuX19kaWN0X18iICUgeCkKKyAgICAgICAgICAgIGRpY3RfZGVzY3IgPSBCYXNlLl9fZGljdF9fWyJfX2RpY3RfXyJdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGljdF9kZXNjci5fX3NldF9fKHgsIHt9KQorICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZGljdF9kZXNjciBhbGxvd2VkIGFjY2VzcyB0byAlcidzIGRpY3QiICUgeCkKKworICAgICAgICAjIENsYXNzZXMgZG9uJ3QgYWxsb3cgX19kaWN0X18gYXNzaWdubWVudCBhbmQgaGF2ZSByZWFkb25seSBkaWN0cworICAgICAgICBjbGFzcyBNZXRhMSh0eXBlLCBCYXNlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgTWV0YTIoQmFzZSwgdHlwZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEQob2JqZWN0KToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBNZXRhMQorICAgICAgICBjbGFzcyBFKG9iamVjdCk6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gTWV0YTIKKyAgICAgICAgZm9yIGNscyBpbiBDLCBELCBFOgorICAgICAgICAgICAgdmVyaWZ5X2RpY3RfcmVhZG9ubHkoY2xzKQorICAgICAgICAgICAgY2xhc3NfZGljdCA9IGNscy5fX2RpY3RfXworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNsYXNzX2RpY3RbInNwYW0iXSA9ICJlZ2dzIgorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXIncyBfX2RpY3RfXyBjYW4gYmUgbW9kaWZpZWQiICUgY2xzKQorCisgICAgICAgICMgTW9kdWxlcyBhbHNvIGRpc2FsbG93IF9fZGljdF9fIGFzc2lnbm1lbnQKKyAgICAgICAgY2xhc3MgTW9kdWxlMSh0eXBlcy5Nb2R1bGVUeXBlLCBCYXNlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgTW9kdWxlMihCYXNlLCB0eXBlcy5Nb2R1bGVUeXBlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIE1vZHVsZVR5cGUgaW4gTW9kdWxlMSwgTW9kdWxlMjoKKyAgICAgICAgICAgIG1vZCA9IE1vZHVsZVR5cGUoInNwYW0iKQorICAgICAgICAgICAgdmVyaWZ5X2RpY3RfcmVhZG9ubHkobW9kKQorICAgICAgICAgICAgbW9kLl9fZGljdF9fWyJzcGFtIl0gPSAiZWdncyIKKworICAgICAgICAjIEV4Y2VwdGlvbidzIF9fZGljdF9fIGNhbiBiZSByZXBsYWNlZCwgYnV0IG5vdCBkZWxldGVkCisgICAgICAgICMgKGF0IGxlYXN0IG5vdCBhbnkgbW9yZSB0aGFuIHJlZ3VsYXIgZXhjZXB0aW9uJ3MgX19kaWN0X18gY2FuCisgICAgICAgICMgYmUgZGVsZXRlZDsgb24gQ1B5dGhvbiBpdCBpcyBub3QgdGhlIGNhc2UsIHdoZXJlYXMgb24gUHlQeSB0aGV5CisgICAgICAgICMgY2FuLCBqdXN0IGxpa2UgYW55IG90aGVyIG5ldy1zdHlsZSBpbnN0YW5jZSdzIF9fZGljdF9fLikKKyAgICAgICAgZGVmIGNhbl9kZWxldGVfZGljdChlKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgZS5fX2RpY3RfXworICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgY2xhc3MgRXhjZXB0aW9uMShFeGNlcHRpb24sIEJhc2UpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBFeGNlcHRpb24yKEJhc2UsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZvciBFeGNlcHRpb25UeXBlIGluIEV4Y2VwdGlvbiwgRXhjZXB0aW9uMSwgRXhjZXB0aW9uMjoKKyAgICAgICAgICAgIGUgPSBFeGNlcHRpb25UeXBlKCkKKyAgICAgICAgICAgIGUuX19kaWN0X18gPSB7ImEiOiAxfQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmEsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbl9kZWxldGVfZGljdChlKSwgY2FuX2RlbGV0ZV9kaWN0KFZhbHVlRXJyb3IoKSkpCisKKyAgICBkZWYgdGVzdF9waWNrbGVzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgcGlja2xpbmcgYW5kIGNvcHlpbmcgbmV3LXN0eWxlIGNsYXNzZXMgYW5kIG9iamVjdHMuLi4KKyAgICAgICAgaW1wb3J0IHBpY2tsZSwgY1BpY2tsZQorCisgICAgICAgIGRlZiBzb3J0ZWRpdGVtcyhkKToKKyAgICAgICAgICAgIEwgPSBkLml0ZW1zKCkKKyAgICAgICAgICAgIEwuc29ydCgpCisgICAgICAgICAgICByZXR1cm4gTAorCisgICAgICAgIGdsb2JhbCBDCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKKyAgICAgICAgICAgICAgICBzdXBlcihDLCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgICAgICAgICAgc2VsZi5hID0gYQorICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkMoJXIsICVyKSIgJSAoc2VsZi5hLCBzZWxmLmIpCisKKyAgICAgICAgZ2xvYmFsIEMxCisgICAgICAgIGNsYXNzIEMxKGxpc3QpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBhLCBiKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoQzEsIGNscykuX19uZXdfXyhjbHMpCisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLmEsIHNlbGYuYikKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQzEoJXIsICVyKTwlcj4iICUgKHNlbGYuYSwgc2VsZi5iLCBsaXN0KHNlbGYpKQorCisgICAgICAgIGdsb2JhbCBDMgorICAgICAgICBjbGFzcyBDMihpbnQpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBhLCBiLCB2YWw9MCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKEMyLCBjbHMpLl9fbmV3X18oY2xzLCB2YWwpCisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLmEsIHNlbGYuYiwgaW50KHNlbGYpKQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIsIHZhbD0wKToKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQzIoJXIsICVyKTwlcj4iICUgKHNlbGYuYSwgc2VsZi5iLCBpbnQoc2VsZikpCisKKyAgICAgICAgZ2xvYmFsIEMzCisgICAgICAgIGNsYXNzIEMzKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9vKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mb28KKyAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgZm9vKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworCisgICAgICAgIGdsb2JhbCBDNGNsYXNzaWMsIEM0CisgICAgICAgIGNsYXNzIEM0Y2xhc3NpYzogIyBjbGFzc2ljCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEM0KEM0Y2xhc3NpYywgb2JqZWN0KTogIyBtaXhlZCBpbmhlcml0YW5jZQorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGZvciBwIGluIHBpY2tsZSwgY1BpY2tsZToKKyAgICAgICAgICAgIGZvciBiaW4gaW4gMCwgMToKKyAgICAgICAgICAgICAgICBmb3IgY2xzIGluIEMsIEMxLCBDMjoKKyAgICAgICAgICAgICAgICAgICAgcyA9IHAuZHVtcHMoY2xzLCBiaW4pCisgICAgICAgICAgICAgICAgICAgIGNsczIgPSBwLmxvYWRzKHMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbHMyIGlzIGNscykKKworICAgICAgICAgICAgICAgIGEgPSBDMSgxLCAyKTsgYS5hcHBlbmQoNDIpOyBhLmFwcGVuZCgyNCkKKyAgICAgICAgICAgICAgICBiID0gQzIoImhlbGxvIiwgIndvcmxkIiwgNDIpCisgICAgICAgICAgICAgICAgcyA9IHAuZHVtcHMoKGEsIGIpLCBiaW4pCisgICAgICAgICAgICAgICAgeCwgeSA9IHAubG9hZHMocykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19jbGFzc19fLCBhLl9fY2xhc3NfXykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZGl0ZW1zKHguX19kaWN0X18pLCBzb3J0ZWRpdGVtcyhhLl9fZGljdF9fKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX19jbGFzc19fLCBiLl9fY2xhc3NfXykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZGl0ZW1zKHkuX19kaWN0X18pLCBzb3J0ZWRpdGVtcyhiLl9fZGljdF9fKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoeCksIHJlcHIoYSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHkpLCByZXByKGIpKQorICAgICAgICAgICAgICAgICMgVGVzdCBmb3IgX19nZXRzdGF0ZV9fIGFuZCBfX3NldHN0YXRlX18gb24gbmV3IHN0eWxlIGNsYXNzCisgICAgICAgICAgICAgICAgdSA9IEMzKDQyKQorICAgICAgICAgICAgICAgIHMgPSBwLmR1bXBzKHUsIGJpbikKKyAgICAgICAgICAgICAgICB2ID0gcC5sb2FkcyhzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5fX2NsYXNzX18sIHYuX19jbGFzc19fKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mb28sIHYuZm9vKQorICAgICAgICAgICAgICAgICMgVGVzdCBmb3IgcGlja2xhYmlsaXR5IG9mIGh5YnJpZCBjbGFzcworICAgICAgICAgICAgICAgIHUgPSBDNCgpCisgICAgICAgICAgICAgICAgdS5mb28gPSA0MgorICAgICAgICAgICAgICAgIHMgPSBwLmR1bXBzKHUsIGJpbikKKyAgICAgICAgICAgICAgICB2ID0gcC5sb2FkcyhzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5fX2NsYXNzX18sIHYuX19jbGFzc19fKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mb28sIHYuZm9vKQorCisgICAgICAgICMgVGVzdGluZyBjb3B5LmRlZXBjb3B5KCkKKyAgICAgICAgaW1wb3J0IGNvcHkKKyAgICAgICAgZm9yIGNscyBpbiBDLCBDMSwgQzI6CisgICAgICAgICAgICBjbHMyID0gY29weS5kZWVwY29weShjbHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzMiBpcyBjbHMpCisKKyAgICAgICAgYSA9IEMxKDEsIDIpOyBhLmFwcGVuZCg0Mik7IGEuYXBwZW5kKDI0KQorICAgICAgICBiID0gQzIoImhlbGxvIiwgIndvcmxkIiwgNDIpCisgICAgICAgIHgsIHkgPSBjb3B5LmRlZXBjb3B5KChhLCBiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fY2xhc3NfXywgYS5fX2NsYXNzX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkaXRlbXMoeC5fX2RpY3RfXyksIHNvcnRlZGl0ZW1zKGEuX19kaWN0X18pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX19jbGFzc19fLCBiLl9fY2xhc3NfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWRpdGVtcyh5Ll9fZGljdF9fKSwgc29ydGVkaXRlbXMoYi5fX2RpY3RfXykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih4KSwgcmVwcihhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHkpLCByZXByKGIpKQorCisgICAgZGVmIHRlc3RfcGlja2xlX3Nsb3RzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgcGlja2xpbmcgb2YgY2xhc3NlcyB3aXRoIF9fc2xvdHNfXyAuLi4KKyAgICAgICAgaW1wb3J0IHBpY2tsZSwgY1BpY2tsZQorICAgICAgICAjIFBpY2tsaW5nIG9mIGNsYXNzZXMgd2l0aCBfX3Nsb3RzX18gYnV0IHdpdGhvdXQgX19nZXRzdGF0ZV9fIHNob3VsZCBmYWlsCisgICAgICAgIGdsb2JhbCBCLCBDLCBELCBFCisgICAgICAgIGNsYXNzIEIob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIGJhc2UgaW4gW29iamVjdCwgQl06CisgICAgICAgICAgICBjbGFzcyBDKGJhc2UpOgorICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYSddCisgICAgICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcHMoQygpKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGZhaWw6IHBpY2tsZSBDIGluc3RhbmNlIC0gJXMiICUgYmFzZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjUGlja2xlLmR1bXBzKEMoKSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBmYWlsOiBjUGlja2xlIEMgaW5zdGFuY2UgLSAlcyIgJSBiYXNlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhDKCkpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgZmFpbDogcGlja2xlIEQgaW5zdGFuY2UgLSAlcyIgJSBiYXNlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNQaWNrbGUuZHVtcHMoRCgpKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGZhaWw6IGNQaWNrbGUgRCBpbnN0YW5jZSAtICVzIiAlIGJhc2UpCisgICAgICAgICAgICAjIEdpdmUgQyBhIG5pY2UgZ2VuZXJpYyBfX2dldHN0YXRlX18gYW5kIF9fc2V0c3RhdGVfXworICAgICAgICAgICAgY2xhc3MgQyhiYXNlKToKKyAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2EnXQorICAgICAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBzZWxmLl9fZGljdF9fLmNvcHkoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBkID0ge30KKyAgICAgICAgICAgICAgICAgICAgZm9yIGNscyBpbiBzZWxmLl9fY2xhc3NfXy5fX21yb19fOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHNuIGluIGNscy5fX2RpY3RfXy5nZXQoJ19fc2xvdHNfXycsICgpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbc25dID0gZ2V0YXR0cihzZWxmLCBzbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQKKyAgICAgICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIGQpOgorICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBkLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGssIHYpCisgICAgICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICMgTm93IGl0IHNob3VsZCB3b3JrCisgICAgICAgICAgICB4ID0gQygpCisgICAgICAgICAgICB5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzYXR0cih5LCAnYScpLCAwKQorICAgICAgICAgICAgeSA9IGNQaWNrbGUubG9hZHMoY1BpY2tsZS5kdW1wcyh4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzYXR0cih5LCAnYScpLCAwKQorICAgICAgICAgICAgeC5hID0gNDIKKyAgICAgICAgICAgIHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmEsIDQyKQorICAgICAgICAgICAgeSA9IGNQaWNrbGUubG9hZHMoY1BpY2tsZS5kdW1wcyh4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5hLCA0MikKKyAgICAgICAgICAgIHggPSBEKCkKKyAgICAgICAgICAgIHguYSA9IDQyCisgICAgICAgICAgICB4LmIgPSAxMDAKKyAgICAgICAgICAgIHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmEgKyB5LmIsIDE0MikKKyAgICAgICAgICAgIHkgPSBjUGlja2xlLmxvYWRzKGNQaWNrbGUuZHVtcHMoeCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYSArIHkuYiwgMTQyKQorICAgICAgICAgICAgIyBBIHN1YmNsYXNzIHRoYXQgYWRkcyBhIHNsb3Qgc2hvdWxkIGFsc28gd29yaworICAgICAgICAgICAgY2xhc3MgRShDKToKKyAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2InXQorICAgICAgICAgICAgeCA9IEUoKQorICAgICAgICAgICAgeC5hID0gNDIKKyAgICAgICAgICAgIHguYiA9ICJmb28iCisgICAgICAgICAgICB5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5hLCB4LmEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYiwgeC5iKQorICAgICAgICAgICAgeSA9IGNQaWNrbGUubG9hZHMoY1BpY2tsZS5kdW1wcyh4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5hLCB4LmEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYiwgeC5iKQorCisgICAgZGVmIHRlc3RfYmluYXJ5X29wZXJhdG9yX292ZXJyaWRlKHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgb3ZlcnJpZGVzIG9mIGJpbmFyeSBvcGVyYXRpb25zLi4uCisgICAgICAgIGNsYXNzIEkoaW50KToKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkkoJXIpIiAlIGludChzZWxmKQorICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBJKGludChzZWxmKSArIGludChvdGhlcikpCisgICAgICAgICAgICBfX3JhZGRfXyA9IF9fYWRkX18KKyAgICAgICAgICAgIGRlZiBfX3Bvd19fKHNlbGYsIG90aGVyLCBtb2Q9Tm9uZSk6CisgICAgICAgICAgICAgICAgaWYgbW9kIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJKHBvdyhpbnQoc2VsZiksIGludChvdGhlcikpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJKHBvdyhpbnQoc2VsZiksIGludChvdGhlciksIGludChtb2QpKSkKKyAgICAgICAgICAgIGRlZiBfX3Jwb3dfXyhzZWxmLCBvdGhlciwgbW9kPU5vbmUpOgorICAgICAgICAgICAgICAgIGlmIG1vZCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSShwb3coaW50KG90aGVyKSwgaW50KHNlbGYpLCBtb2QpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJKHBvdyhpbnQob3RoZXIpLCBpbnQoc2VsZiksIGludChtb2QpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoSSgxKSArIEkoMikpLCAiSSgzKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihJKDEpICsgMiksICJJKDMpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKDEgKyBJKDIpKSwgIkkoMykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoSSgyKSAqKiBJKDMpKSwgIkkoOCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoMiAqKiBJKDMpKSwgIkkoOCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoSSgyKSAqKiAzKSwgIkkoOCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocG93KEkoMiksIEkoMyksIEkoNSkpKSwgIkkoMykiKQorICAgICAgICBjbGFzcyBTKHN0cik6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5sb3dlcigpID09IG90aGVyLmxvd2VyKCkKKyAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZSAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc19wcm9wYWdhdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHByb3BhZ2F0aW9uIG9mIHNsb3QgZnVuY3Rpb25zIHRvIHN1YmNsYXNzZXMuLi4KKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBEKEIsIEMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkID0gRCgpCisgICAgICAgIG9yaWdfaGFzaCA9IGhhc2goZCkgIyByZWxhdGVkIHRvIGlkKGQpIGluIHBsYXRmb3JtLWRlcGVuZGVudCB3YXlzCisgICAgICAgIEEuX19oYXNoX18gPSBsYW1iZGEgc2VsZjogNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGQpLCA0MikKKyAgICAgICAgQy5fX2hhc2hfXyA9IGxhbWJkYSBzZWxmOiAzMTQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGQpLCAzMTQpCisgICAgICAgIEIuX19oYXNoX18gPSBsYW1iZGEgc2VsZjogMTQ0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChkKSwgMTQ0KQorICAgICAgICBELl9faGFzaF9fID0gbGFtYmRhIHNlbGY6IDEwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZCksIDEwMCkKKyAgICAgICAgRC5fX2hhc2hfXyA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNoLCBkKQorICAgICAgICBkZWwgRC5fX2hhc2hfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZCksIDE0NCkKKyAgICAgICAgQi5fX2hhc2hfXyA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNoLCBkKQorICAgICAgICBkZWwgQi5fX2hhc2hfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZCksIDMxNCkKKyAgICAgICAgQy5fX2hhc2hfXyA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNoLCBkKQorICAgICAgICBkZWwgQy5fX2hhc2hfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZCksIDQyKQorICAgICAgICBBLl9faGFzaF9fID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGQpCisgICAgICAgIGRlbCBBLl9faGFzaF9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChkKSwgb3JpZ19oYXNoKQorICAgICAgICBkLmZvbyA9IDQyCisgICAgICAgIGQuYmFyID0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZvbywgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5iYXIsIDQyKQorICAgICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gImZvbyI6CisgICAgICAgICAgICAgICAgcmV0dXJuIDI0CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSkKKyAgICAgICAgQS5fX2dldGF0dHJpYnV0ZV9fID0gX19nZXRhdHRyaWJ1dGVfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZm9vLCAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmJhciwgNDIpCisgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgIGlmIG5hbWUgaW4gKCJzcGFtIiwgImZvbyIsICJiYXIiKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImhlbGxvIgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IsIG5hbWUKKyAgICAgICAgQi5fX2dldGF0dHJfXyA9IF9fZ2V0YXR0cl9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5zcGFtLCAiaGVsbG8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZm9vLCAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmJhciwgNDIpCisgICAgICAgIGRlbCBBLl9fZ2V0YXR0cmlidXRlX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZvbywgNDIpCisgICAgICAgIGRlbCBkLmZvbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZm9vLCAiaGVsbG8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuYmFyLCA0MikKKyAgICAgICAgZGVsIEIuX19nZXRhdHRyX18KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZC5mb28KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJkLmZvbyBzaG91bGQgYmUgdW5kZWZpbmVkIG5vdyIpCisKKyAgICAgICAgIyBUZXN0IGEgbmFzdHkgYnVnIGluIHJlY3Vyc2VfZG93bl9zdWJjbGFzc2VzKCkKKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWwgQgorICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIEEuX19zZXRpdGVtX18gPSBsYW1iZGEgKmE6IE5vbmUgIyBjcmFzaAorCisgICAgZGVmIHRlc3RfYnVmZmVyX2luaGVyaXRhbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgdGhhdCBidWZmZXIgaW50ZXJmYWNlIGlzIGluaGVyaXRlZCAuLi4KKworICAgICAgICBpbXBvcnQgYmluYXNjaWkKKyAgICAgICAgIyBTRiBidWcgWyM0NzAwNDBdIFBhcnNlVHVwbGUgdCMgdnMgc3ViY2xhc3Nlcy4KKworICAgICAgICBjbGFzcyBNeVN0cihzdHIpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBiYXNlID0gJ2FiYycKKyAgICAgICAgbSA9IE15U3RyKGJhc2UpCisgICAgICAgICMgYjJhX2hleCB1c2VzIHRoZSBidWZmZXIgaW50ZXJmYWNlIHRvIGdldCBpdHMgYXJndW1lbnQncyB2YWx1ZSwgdmlhCisgICAgICAgICMgUHlBcmdfUGFyc2VUdXBsZSAndCMnIGNvZGUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYjJhX2hleChtKSwgYmluYXNjaWkuYjJhX2hleChiYXNlKSkKKworICAgICAgICAjIEl0J3Mgbm90IGNsZWFyIHRoYXQgdW5pY29kZSB3aWxsIGNvbnRpbnVlIHRvIHN1cHBvcnQgdGhlIGNoYXJhY3RlcgorICAgICAgICAjIGJ1ZmZlciBpbnRlcmZhY2UsIGFuZCB0aGlzIHRlc3Qgd2lsbCBmYWlsIGlmIHRoYXQncyB0YWtlbiBhd2F5LgorICAgICAgICBjbGFzcyBNeVVuaSh1bmljb2RlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYmFzZSA9IHUnYWJjJworICAgICAgICBtID0gTXlVbmkoYmFzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5iMmFfaGV4KG0pLCBiaW5hc2NpaS5iMmFfaGV4KGJhc2UpKQorCisgICAgICAgIGNsYXNzIE15SW50KGludCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG0gPSBNeUludCg0MikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmluYXNjaWkuYjJhX2hleChtKQorICAgICAgICAgICAgc2VsZi5mYWlsKCdzdWJjbGFzcyBvZiBpbnQgc2hvdWxkIG5vdCBoYXZlIGEgYnVmZmVyIGludGVyZmFjZScpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9zdHJfb2Zfc3RyX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgX19zdHJfXyBkZWZpbmVkIGluIHN1YmNsYXNzIG9mIHN0ciAuLi4KKyAgICAgICAgaW1wb3J0IGJpbmFzY2lpCisgICAgICAgIGltcG9ydCBjU3RyaW5nSU8KKworICAgICAgICBjbGFzcyBvY3RldHN0cmluZyhzdHIpOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJpbmFzY2lpLmIyYV9oZXgoc2VsZikKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZiArICIgcmVwciIKKworICAgICAgICBvID0gb2N0ZXRzdHJpbmcoJ0EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUobyksIG9jdGV0c3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc3RyKG8pKSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVwcihvKSksIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmQobyksIDB4NDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG8pLCAnNDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobyksICdBIHJlcHInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8uX19zdHJfXygpLCAnNDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8uX19yZXByX18oKSwgJ0EgcmVwcicpCisKKyAgICAgICAgY2FwdHVyZSA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICMgQ2FsbGluZyBzdHIoKSBvciBub3QgZXhlcmNpc2VzIGRpZmZlcmVudCBpbnRlcm5hbCBwYXRocy4KKyAgICAgICAgcHJpbnQgPj4gY2FwdHVyZSwgbworICAgICAgICBwcmludCA+PiBjYXB0dXJlLCBzdHIobykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlLmdldHZhbHVlKCksICc0MVxuNDFcbicpCisgICAgICAgIGNhcHR1cmUuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfa2V5d29yZF9hcmd1bWVudHMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBrZXl3b3JkIGFyZ3VtZW50cyB0byBfX2luaXRfXywgX19jYWxsX18uLi4KKyAgICAgICAgZGVmIGYoYSk6IHJldHVybiBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5fX2NhbGxfXyhhPTQyKSwgNDIpCisgICAgICAgIGEgPSBbXQorICAgICAgICBsaXN0Ll9faW5pdF9fKGEsIHNlcXVlbmNlPVswLCAxLCAyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBbMCwgMSwgMl0pCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfY2FsbChzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHJlY3Vyc2l2ZSBfX2NhbGxfXygpIGJ5IHNldHRpbmcgdG8gaW5zdGFuY2Ugb2YgY2xhc3MuLi4KKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIEEuX19jYWxsX18gPSBBKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgQSgpKCkKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiUmVjdXJzaW9uIGxpbWl0IHNob3VsZCBoYXZlIGJlZW4gcmVhY2hlZCBmb3IgX19jYWxsX18oKSIpCisKKyAgICBkZWYgdGVzdF9kZWxldGVfaG9vayhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIF9fZGVsX18gaG9vay4uLgorICAgICAgICBsb2cgPSBbXQorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBsb2cuYXBwZW5kKDEpCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2csIFtdKQorICAgICAgICBkZWwgYworICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nLCBbMV0pCisKKyAgICAgICAgY2xhc3MgRChvYmplY3QpOiBwYXNzCisgICAgICAgIGQgPSBEKCkKKyAgICAgICAgdHJ5OiBkZWwgZFswXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiaW52YWxpZCBkZWwoKSBkaWRuJ3QgcmFpc2UgVHlwZUVycm9yIikKKworICAgIGRlZiB0ZXN0X2hhc2hfaW5oZXJpdGFuY2Uoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBoYXNoIG9mIG11dGFibGUgc3ViY2xhc3Nlcy4uLgorCisgICAgICAgIGNsYXNzIG15ZGljdChkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZCA9IG15ZGljdCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGhhc2goZCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiaGFzaCgpIG9mIGRpY3Qgc3ViY2xhc3Mgc2hvdWxkIGZhaWwiKQorCisgICAgICAgIGNsYXNzIG15bGlzdChsaXN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZCA9IG15bGlzdCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGhhc2goZCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiaGFzaCgpIG9mIGxpc3Qgc3ViY2xhc3Mgc2hvdWxkIGZhaWwiKQorCisgICAgZGVmIHRlc3Rfc3RyX29wZXJhdGlvbnMoc2VsZik6CisgICAgICAgIHRyeTogJ2EnICsgNQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiJycgKyA1IGRvZXNuJ3QgcmFpc2UgVHlwZUVycm9yIikKKworICAgICAgICB0cnk6ICcnLnNwbGl0KCcnKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoIicnLnNwbGl0KCcnKSBkb2Vzbid0IHJhaXNlIFZhbHVlRXJyb3IiKQorCisgICAgICAgIHRyeTogJycuam9pbihbMF0pCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCInJy5qb2luKFswXSkgZG9lc24ndCByYWlzZSBUeXBlRXJyb3IiKQorCisgICAgICAgIHRyeTogJycucmluZGV4KCc1JykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCInJy5yaW5kZXgoJzUnKSBkb2Vzbid0IHJhaXNlIFZhbHVlRXJyb3IiKQorCisgICAgICAgIHRyeTogJyUobilzJyAlIE5vbmUKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoIiclKG4pcycgJSBOb25lIGRvZXNuJ3QgcmFpc2UgVHlwZUVycm9yIikKKworICAgICAgICB0cnk6ICclKG4nICUge30KKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCInJShuJyAlIHt9ICcnIGRvZXNuJ3QgcmFpc2UgVmFsdWVFcnJvciIpCisKKyAgICAgICAgdHJ5OiAnJSpzJyAlICgnYWJjJykKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoIiclKnMnICUgKCdhYmMnKSBkb2Vzbid0IHJhaXNlIFR5cGVFcnJvciIpCisKKyAgICAgICAgdHJ5OiAnJSouKnMnICUgKCdhYmMnLCA1KQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiJyUqLipzJyAlICgnYWJjJywgNSkgZG9lc24ndCByYWlzZSBUeXBlRXJyb3IiKQorCisgICAgICAgIHRyeTogJyVzJyAlICgxLCAyKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiJyVzJyAlICgxLCAyKSBkb2Vzbid0IHJhaXNlIFR5cGVFcnJvciIpCisKKyAgICAgICAgdHJ5OiAnJScgJSBOb25lCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiJyUnICUgTm9uZSBkb2Vzbid0IHJhaXNlIFZhbHVlRXJyb3IiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzUzNDI1MycuaXNkaWdpdCgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCc1MzQyNTN4Jy5pc2RpZ2l0KCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyVjJyAlIDUsICdceDA1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJWMnICUgJzUnLCAnNScpCisKKyAgICBkZWYgdGVzdF9kZWVwY29weV9yZWN1cnNpdmUoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBkZWVwY29weSBvZiByZWN1cnNpdmUgb2JqZWN0cy4uLgorICAgICAgICBjbGFzcyBOb2RlOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhID0gTm9kZSgpCisgICAgICAgIGIgPSBOb2RlKCkKKyAgICAgICAgYS5iID0gYgorICAgICAgICBiLmEgPSBhCisgICAgICAgIHogPSBkZWVwY29weShhKSAjIFRoaXMgYmxldyB1cCBiZWZvcmUKKworICAgIGRlZiB0ZXN0X3VuaW50aWFsaXplZF9tb2R1bGVzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgdW5pbml0aWFsaXplZCBtb2R1bGUgb2JqZWN0cy4uLgorICAgICAgICBmcm9tIHR5cGVzIGltcG9ydCBNb2R1bGVUeXBlIGFzIE0KKyAgICAgICAgbSA9IE0uX19uZXdfXyhNKQorICAgICAgICBzdHIobSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKG0sICJfX25hbWVfXyIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2F0dHIobSwgIl9fZmlsZV9fIiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzYXR0cihtLCAiZm9vIiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5fX2RpY3RfXykgICAjIE5vbmUgb3Ige30gYXJlIGJvdGggcmVhc29uYWJsZSBhbnN3ZXJzCisgICAgICAgIG0uZm9vID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uX19kaWN0X18sIHsiZm9vIjogMX0pCisKKyAgICBkZWYgdGVzdF9mdW5ueV9uZXcoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBfX25ld19fIHJldHVybmluZyBzb21ldGhpbmcgdW5leHBlY3RlZC4uLgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGFyZyk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIHN0cik6IHJldHVybiBbMSwgMiwgM10KKyAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoYXJnLCBpbnQpOiByZXR1cm4gb2JqZWN0Ll9fbmV3X18oRCkKKyAgICAgICAgICAgICAgICBlbHNlOiByZXR1cm4gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZyk6CisgICAgICAgICAgICAgICAgc2VsZi5mb28gPSBhcmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDKCIxIiksIFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEKCIxIiksIFsxLCAyLCAzXSkKKyAgICAgICAgZCA9IEQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZvbywgTm9uZSkKKyAgICAgICAgZCA9IEMoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKGQsIEQpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZm9vLCAxKQorICAgICAgICBkID0gRCgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoZCwgRCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mb28sIDEpCisKKyAgICBkZWYgdGVzdF9pbXVsX2J1ZyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGZvciBfX2ltdWxfXyBwcm9ibGVtcy4uLgorICAgICAgICAjIFNGIGJ1ZyA1NDQ2NDcKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW11bF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYsIG90aGVyKQorICAgICAgICB4ID0gQygpCisgICAgICAgIHkgPSB4CisgICAgICAgIHkgKj0gMS4wCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgKHgsIDEuMCkpCisgICAgICAgIHkgPSB4CisgICAgICAgIHkgKj0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksICh4LCAyKSkKKyAgICAgICAgeSA9IHgKKyAgICAgICAgeSAqPSAzTAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksICh4LCAzTCkpCisgICAgICAgIHkgPSB4CisgICAgICAgIHkgKj0gMUw8PDEwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksICh4LCAxTDw8MTAwKSkKKyAgICAgICAgeSA9IHgKKyAgICAgICAgeSAqPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgKHgsIE5vbmUpKQorICAgICAgICB5ID0geAorICAgICAgICB5ICo9ICJmb28iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgKHgsICJmb28iKSkKKworICAgIGRlZiB0ZXN0X2NvcHlfc2V0c3RhdGUoc2VsZik6CisgICAgICAgICMgVGVzdGluZyB0aGF0IGNvcHkuKmNvcHkoKSBjb3JyZWN0bHkgdXNlcyBfX3NldHN0YXRlX18uLi4KKyAgICAgICAgaW1wb3J0IGNvcHkKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbz1Ob25lKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbworICAgICAgICAgICAgICAgIHNlbGYuX19mb28gPSBmb28KKyAgICAgICAgICAgIGRlZiBzZXRmb28oc2VsZiwgZm9vPU5vbmUpOgorICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCisgICAgICAgICAgICBkZWYgZ2V0Zm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fZm9vCisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBbc2VsZi5mb29dCisgICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGZfLCBsc3QpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIDEpCisgICAgICAgICAgICAgICAgc2VsZl8uX19mb28gPSBzZWxmXy5mb28gPSBsc3RbMF0KKyAgICAgICAgYSA9IEMoNDIpCisgICAgICAgIGEuc2V0Zm9vKDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZm9vLCAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLmdldGZvbygpLCA0MikKKyAgICAgICAgYiA9IGNvcHkuY29weShhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZm9vLCAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdldGZvbygpLCAyNCkKKyAgICAgICAgYiA9IGNvcHkuZGVlcGNvcHkoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmZvbywgMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5nZXRmb28oKSwgMjQpCisKKyAgICBkZWYgdGVzdF9zbGljZXMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBjYXNlcyB3aXRoIHNsaWNlcyBhbmQgb3ZlcnJpZGRlbiBfX2dldGl0ZW1fXyAuLi4KKworICAgICAgICAjIFN0cmluZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiaGVsbG8iWzo0XSwgImhlbGwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJoZWxsbyJbc2xpY2UoNCldLCAiaGVsbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyLl9fZ2V0aXRlbV9fKCJoZWxsbyIsIHNsaWNlKDQpKSwgImhlbGwiKQorICAgICAgICBjbGFzcyBTKHN0cik6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5fX2dldGl0ZW1fXyhzZWxmLCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFMoImhlbGxvIilbOjRdLCAiaGVsbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUygiaGVsbG8iKVtzbGljZSg0KV0sICJoZWxsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTKCJoZWxsbyIpLl9fZ2V0aXRlbV9fKHNsaWNlKDQpKSwgImhlbGwiKQorICAgICAgICAjIFR1cGxlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxLDIsMylbOjJdLCAoMSwyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMSwyLDMpW3NsaWNlKDIpXSwgKDEsMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUuX19nZXRpdGVtX18oKDEsMiwzKSwgc2xpY2UoMikpLCAoMSwyKSkKKyAgICAgICAgY2xhc3MgVCh0dXBsZSk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR1cGxlLl9fZ2V0aXRlbV9fKHNlbGYsIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVCgoMSwyLDMpKVs6Ml0sICgxLDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFQoKDEsMiwzKSlbc2xpY2UoMildLCAoMSwyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUKCgxLDIsMykpLl9fZ2V0aXRlbV9fKHNsaWNlKDIpKSwgKDEsMikpCisgICAgICAgICMgTGlzdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwyLDNdWzoyXSwgWzEsMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsMiwzXVtzbGljZSgyKV0sIFsxLDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QuX19nZXRpdGVtX18oWzEsMiwzXSwgc2xpY2UoMikpLCBbMSwyXSkKKyAgICAgICAgY2xhc3MgTChsaXN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGlzdC5fX2dldGl0ZW1fXyhzZWxmLCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEwoWzEsMiwzXSlbOjJdLCBbMSwyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMKFsxLDIsM10pW3NsaWNlKDIpXSwgWzEsMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTChbMSwyLDNdKS5fX2dldGl0ZW1fXyhzbGljZSgyKSksIFsxLDJdKQorICAgICAgICAjIE5vdyBkbyBsaXN0cyBhbmQgX19zZXRpdGVtX18KKyAgICAgICAgYSA9IEwoWzEsMiwzXSkKKyAgICAgICAgYVtzbGljZSgxLCAzKV0gPSBbMywyXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIFsxLDMsMl0pCisgICAgICAgIGFbc2xpY2UoMCwgMiwgMSldID0gWzMsMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBbMywxLDJdKQorICAgICAgICBhLl9fc2V0aXRlbV9fKHNsaWNlKDEsIDMpLCBbMiwxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBbMywyLDFdKQorICAgICAgICBhLl9fc2V0aXRlbV9fKHNsaWNlKDAsIDIsIDEpLCBbMiwzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBbMiwzLDFdKQorCisgICAgZGVmIHRlc3Rfc3VidHlwZV9yZXN1cnJlY3Rpb24oc2VsZik6CisgICAgICAgICMgVGVzdGluZyByZXN1cnJlY3Rpb24gb2YgbmV3LXN0eWxlIGluc3RhbmNlLi4uCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgY29udGFpbmVyID0gW10KKworICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyByZXN1cnJlY3QgdGhlIGluc3RhbmNlCisgICAgICAgICAgICAgICAgQy5jb250YWluZXIuYXBwZW5kKHNlbGYpCisKKyAgICAgICAgYyA9IEMoKQorICAgICAgICBjLmF0dHIgPSA0MgorCisgICAgICAgICMgVGhlIG1vc3QgaW50ZXJlc3RpbmcgdGhpbmcgaGVyZSBpcyB3aGV0aGVyIHRoaXMgYmxvd3MgdXAsIGR1ZSB0bworICAgICAgICAjIGZsYXdlZCBHQyB0cmFja2luZyBsb2dpYyBpbiB0eXBlb2JqZWN0LmMncyBjYWxsX2ZpbmFsaXplcigpIChhIDIuMi4xCisgICAgICAgICMgYnVnKS4KKyAgICAgICAgZGVsIGMKKworICAgICAgICAjIElmIHRoYXQgZGlkbid0IGJsb3cgdXAsIGl0J3MgYWxzbyBpbnRlcmVzdGluZyB0byBzZWUgd2hldGhlciBjbGVhcmluZworICAgICAgICAjIHRoZSBsYXN0IGNvbnRhaW5lciBzbG90IHdvcmtzOiB0aGF0IHdpbGwgYXR0ZW1wdCB0byBkZWxldGUgYyBhZ2FpbiwKKyAgICAgICAgIyB3aGljaCB3aWxsIGNhdXNlIGMgdG8gZ2V0IGFwcGVuZGVkIGJhY2sgdG8gdGhlIGNvbnRhaW5lciBhZ2FpbgorICAgICAgICAjICJkdXJpbmciIHRoZSBkZWwuICAoT24gbm9uLUNQeXRob24gaW1wbGVtZW50YXRpb25zLCBob3dldmVyLCBfX2RlbF9fCisgICAgICAgICMgaXMgdHlwaWNhbGx5IG5vdCBjYWxsZWQgYWdhaW4uKQorICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEMuY29udGFpbmVyKSwgMSkKKyAgICAgICAgZGVsIEMuY29udGFpbmVyWy0xXQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuY2hlY2tfaW1wbF9kZXRhaWwoKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEMuY29udGFpbmVyKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5jb250YWluZXJbLTFdLmF0dHIsIDQyKQorCisgICAgICAgICMgTWFrZSBjIG1vcnRhbCBhZ2Fpbiwgc28gdGhhdCB0aGUgdGVzdCBmcmFtZXdvcmsgd2l0aCAtbCBkb2Vzbid0IHJlcG9ydAorICAgICAgICAjIGl0IGFzIGEgbGVhay4KKyAgICAgICAgZGVsIEMuX19kZWxfXworCisgICAgZGVmIHRlc3Rfc2xvdHNfdHJhc2goc2VsZik6CisgICAgICAgICMgVGVzdGluZyBzbG90IHRyYXNoLi4uCisgICAgICAgICMgRGVhbGxvY2F0aW5nIGRlZXBseSBuZXN0ZWQgc2xvdHRlZCB0cmFzaCBjYXVzZWQgc3RhY2sgb3ZlcmZsb3dzCisgICAgICAgIGNsYXNzIHRyYXNoKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ3gnXQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHNlbGYueCA9IHgKKyAgICAgICAgbyA9IE5vbmUKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDUwMDAwKToKKyAgICAgICAgICAgIG8gPSB0cmFzaChvKQorICAgICAgICBkZWwgbworCisgICAgZGVmIHRlc3Rfc2xvdHNfbXVsdGlwbGVfaW5oZXJpdGFuY2Uoc2VsZik6CisgICAgICAgICMgU0YgYnVnIDU3NTIyOSwgbXVsdGlwbGUgaW5oZXJpdGFuY2Ugdy8gc2xvdHMgZHVtcHMgY29yZQorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX189KCkKKyAgICAgICAgY2xhc3MgQihvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDKEEsQikgOgorICAgICAgICAgICAgX19zbG90c19fPSgpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5jaGVja19pbXBsX2RldGFpbCgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLl9fYmFzaWNzaXplX18sIEIuX19iYXNpY3NpemVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoQywgJ19fZGljdF9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKEMsICdfX3dlYWtyZWZfXycpKQorICAgICAgICBDKCkueCA9IDIKKworICAgIGRlZiB0ZXN0X3JtdWwoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBjb3JyZWN0IGludm9jYXRpb24gb2YgX19ybXVsX18uLi4KKyAgICAgICAgIyBTRiBwYXRjaCA1OTI2NDYKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fbXVsX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAibXVsIgorICAgICAgICAgICAgZGVmIF9fcm11bF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gInJtdWwiCisgICAgICAgIGEgPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhKjIsICJtdWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEqMi4yLCAibXVsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyKmEsICJybXVsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLjIqYSwgInJtdWwiKQorCisgICAgZGVmIHRlc3RfaXBvdyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGNvcnJlY3QgaW52b2NhdGlvbiBvZiBfX2lwb3dfXy4uLgorICAgICAgICAjIFtTRiBidWcgNjIwMTc5XQorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pcG93X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYSA9IEMoKQorICAgICAgICBhICoqPSAyCisKKyAgICBkZWYgdGVzdF9tdXRhYmxlX2Jhc2VzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgbXV0YWJsZSBiYXNlcy4uLgorCisgICAgICAgICMgc3R1ZmYgdGhhdCBzaG91bGQgd29yazoKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDMihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oc2VsZiwgYXR0cik6CisgICAgICAgICAgICAgICAgaWYgYXR0ciA9PSAnYSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKEMyLCBzZWxmKS5fX2dldGF0dHJpYnV0ZV9fKGF0dHIpCisgICAgICAgICAgICBkZWYgbWV0aChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBFKEQpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkID0gRCgpCisgICAgICAgIGUgPSBFKCkKKyAgICAgICAgRC5fX2Jhc2VzX18gPSAoQywpCisgICAgICAgIEQuX19iYXNlc19fID0gKEMyLCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLm1ldGgoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm1ldGgoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMyLl9fc3ViY2xhc3Nlc19fKCksIFtEXSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgRC5fX2Jhc2VzX18KKyAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGJlIGFibGUgdG8gZGVsZXRlIC5fX2Jhc2VzX18iKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEQuX19iYXNlc19fID0gKCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgbXNnOgorICAgICAgICAgICAgaWYgc3RyKG1zZykgPT0gImEgbmV3LXN0eWxlIGNsYXNzIGNhbid0IGhhdmUgb25seSBjbGFzc2ljIGJhc2VzIjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIndyb25nIGVycm9yIG1lc3NhZ2UgZm9yIC5fX2Jhc2VzX18gPSAoKSIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBiZSBhYmxlIHRvIHNldCAuX19iYXNlc19fIHRvICgpIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBELl9fYmFzZXNfXyA9IChELCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgYWN0dWFsbHksIHdlJ2xsIGhhdmUgY3Jhc2hlZCBieSBoZXJlLi4uCisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBiZSBhYmxlIHRvIGNyZWF0ZSBpbmhlcml0YW5jZSBjeWNsZXMiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEQuX19iYXNlc19fID0gKEMsIEMpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImRpZG4ndCBkZXRlY3QgcmVwZWF0ZWQgYmFzZSBjbGFzc2VzIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBELl9fYmFzZXNfXyA9IChFLCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGJlIGFibGUgdG8gY3JlYXRlIGluaGVyaXRhbmNlIGN5Y2xlcyIpCisKKyAgICAgICAgIyBsZXQncyB0aHJvdyBhIGNsYXNzaWMgY2xhc3MgaW50byB0aGUgbWl4OgorICAgICAgICBjbGFzcyBDbGFzc2ljOgorICAgICAgICAgICAgZGVmIG1ldGgyKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAzCisKKyAgICAgICAgRC5fX2Jhc2VzX18gPSAoQywgQ2xhc3NpYykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubWV0aDIoKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm1ldGgyKCksIDMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGQuYQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImF0dHJpYnV0ZSBzaG91bGQgaGF2ZSB2YW5pc2hlZCIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgRC5fX2Jhc2VzX18gPSAoQ2xhc3NpYywpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIm5ldy1zdHlsZSBjbGFzcyBtdXN0IGhhdmUgYSBuZXctc3R5bGUgYmFzZSIpCisKKyAgICBkZWYgdGVzdF9idWlsdGluX2Jhc2VzKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgdGhlIGJ1aWx0aW4gdHlwZXMgY2FuIGhhdmUgdGhlaXIgYmFzZSBxdWVyaWVkIHdpdGhvdXQKKyAgICAgICAgIyBzZWdmYXVsdGluZy4gU2VlIGlzc3VlICM1Nzg3LgorICAgICAgICBidWlsdGluX3R5cGVzID0gW3RwIGZvciB0cCBpbiBfX2J1aWx0aW5fXy5fX2RpY3RfXy5pdGVydmFsdWVzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRwLCB0eXBlKV0KKyAgICAgICAgZm9yIHRwIGluIGJ1aWx0aW5fdHlwZXM6CisgICAgICAgICAgICBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyh0cCwgIl9fYmFzZXNfXyIpCisgICAgICAgICAgICBpZiB0cCBpcyBub3Qgb2JqZWN0OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRwLl9fYmFzZXNfXyksIDEsIHRwKQorCisgICAgICAgIGNsYXNzIEwobGlzdCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgTC5fX2Jhc2VzX18gPSAoZGljdCwpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCB0dXJuIGxpc3Qgc3ViY2xhc3MgaW50byBkaWN0IHN1YmNsYXNzIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsaXN0Ll9fYmFzZXNfXyA9IChkaWN0LCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGJlIGFibGUgdG8gYXNzaWduIHRvIGxpc3QuX19iYXNlc19fIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBELl9fYmFzZXNfXyA9IChDLCBsaXN0KQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IDAsICJiZXN0X2Jhc2UgY2FsY3VsYXRpb24gZm91bmQgd2FudGluZyIKKworCisgICAgZGVmIHRlc3RfbXV0YWJsZV9iYXNlc193aXRoX2ZhaWxpbmdfbXJvKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgbXV0YWJsZSBiYXNlcyB3aXRoIGZhaWxpbmcgbXJvLi4uCisgICAgICAgIGNsYXNzIFdvcmtPbmNlKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oc2VsZiwgbmFtZSwgYmFzZXMsIG5zKToKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcgPSAwCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFdvcmtPbmNlLCBzZWxmKS5fX25ld19fKFdvcmtPbmNlLCBuYW1lLCBiYXNlcywgbnMpCisgICAgICAgICAgICBkZWYgbXJvKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuZmxhZyA+IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgImJvem8iCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mbGFnICs9IDEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUubXJvKHNlbGYpCisKKyAgICAgICAgY2xhc3MgV29ya0Fsd2F5cyh0eXBlKToKKyAgICAgICAgICAgIGRlZiBtcm8oc2VsZik6CisgICAgICAgICAgICAgICAgIyB0aGlzIGlzIGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgLm1ybygpcyBhcmVuJ3QgY2FsbGVkCisgICAgICAgICAgICAgICAgIyB3aXRoIGFuIGV4Y2VwdGlvbiBzZXQgKHdoaWNoIHdhcyBwb3NzaWJsZSBhdCBvbmUgcG9pbnQpLgorICAgICAgICAgICAgICAgICMgQW4gZXJyb3IgbWVzc2FnZSB3aWxsIGJlIHByaW50ZWQgaW4gYSBkZWJ1ZyBidWlsZC4KKyAgICAgICAgICAgICAgICAjIFdoYXQncyBhIGdvb2Qgd2F5IHRvIHRlc3QgZm9yIHRoaXM/CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUubXJvKHNlbGYpCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEMyKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBFKEQpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEYoRCk6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gV29ya09uY2UKKworICAgICAgICBjbGFzcyBHKEQpOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IFdvcmtBbHdheXMKKworICAgICAgICAjIEltbWVkaWF0ZSBzdWJjbGFzc2VzIGhhdmUgdGhlaXIgbXJvJ3MgYWRqdXN0ZWQgaW4gYWxwaGFiZXRpY2FsCisgICAgICAgICMgb3JkZXIsIHNvIEUncyB3aWxsIGdldCBhZGp1c3RlZCBiZWZvcmUgYWRqdXN0aW5nIEYncyBmYWlscy4gIFdlCisgICAgICAgICMgY2hlY2sgaGVyZSB0aGF0IEUncyBnZXRzIHJlc3RvcmVkLgorCisgICAgICAgIEVfbXJvX2JlZm9yZSA9IEUuX19tcm9fXworICAgICAgICBEX21yb19iZWZvcmUgPSBELl9fbXJvX18KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBELl9fYmFzZXNfXyA9IChDMiwpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUuX19tcm9fXywgRV9tcm9fYmVmb3JlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChELl9fbXJvX18sIERfbXJvX2JlZm9yZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhjZXB0aW9uIG5vdCBwcm9wYWdhdGVkIikKKworICAgIGRlZiB0ZXN0X211dGFibGVfYmFzZXNfY2F0Y2hfbXJvX2NvbmZsaWN0KHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgbXV0YWJsZSBiYXNlcyBjYXRjaCBtcm8gY29uZmxpY3QuLi4KKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEIob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBDKEEsIEIpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEQoQSwgQik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgRShDLCBEKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBDLl9fYmFzZXNfXyA9IChCLCBBKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJkaWRuJ3QgY2F0Y2ggTVJPIGNvbmZsaWN0IikKKworICAgIGRlZiB0ZXN0X211dGFibGVfbmFtZXMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBtdXRhYmxlIG5hbWVzLi4uCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIEMuX19tb2R1bGVfXyBjb3VsZCBiZSAndGVzdF9kZXNjcicgb3IgJ19fbWFpbl9fJworICAgICAgICBtb2QgPSBDLl9fbW9kdWxlX18KKworICAgICAgICBDLl9fbmFtZV9fID0gJ0QnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKEMuX19tb2R1bGVfXywgQy5fX25hbWVfXyksIChtb2QsICdEJykpCisKKyAgICAgICAgQy5fX25hbWVfXyA9ICdELkUnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKEMuX19tb2R1bGVfXywgQy5fX25hbWVfXyksIChtb2QsICdELkUnKSkKKworICAgIGRlZiB0ZXN0X2V2aWxfdHlwZV9uYW1lKHNlbGYpOgorICAgICAgICAjIEEgYmFkbHkgcGxhY2VkIFB5X0RFQ1JFRiBpbiB0eXBlX3NldF9uYW1lIGxlZCB0byBhcmJpdHJhcnkgY29kZQorICAgICAgICAjIGV4ZWN1dGlvbiB3aGlsZSB0aGUgdHlwZSBzdHJ1Y3R1cmUgd2FzIG5vdCBpbiBhIHNhbmUgc3RhdGUsIGFuZCBhCisgICAgICAgICMgcG9zc2libGUgc2VnbWVudGF0aW9uIGZhdWx0IGFzIGEgcmVzdWx0LiAgU2VlIGJ1ZyAjMTY0NDcuCisgICAgICAgIGNsYXNzIE5hc3R5KHN0cik6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBDLl9fbmFtZV9fID0gIm90aGVyIgorCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBDLl9fbmFtZV9fID0gTmFzdHkoImFiYyIpCisgICAgICAgIEMuX19uYW1lX18gPSAibm9ybWFsIgorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfcmlnaHRfb3Aoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBjb3JyZWN0IGRpc3BhdGNoIG9mIHN1YmNsYXNzIG92ZXJsb2FkaW5nIF9fcjxvcD5fXy4uLgorCisgICAgICAgICMgVGhpcyBjb2RlIHRlc3RzIHZhcmlvdXMgY2FzZXMgd2hlcmUgcmlnaHQtZGlzcGF0Y2ggb2YgYSBzdWJjbGFzcworICAgICAgICAjIHNob3VsZCBiZSBwcmVmZXJyZWQgb3ZlciBsZWZ0LWRpc3BhdGNoIG9mIGEgYmFzZSBjbGFzcy4KKworICAgICAgICAjIENhc2UgMTogc3ViY2xhc3Mgb2YgaW50OyB0aGlzIHRlc3RzIGNvZGUgaW4gYWJzdHJhY3QuYzo6YmluYXJ5X29wMSgpCisKKyAgICAgICAgY2xhc3MgQihpbnQpOgorICAgICAgICAgICAgZGVmIF9fZmxvb3JkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJCLl9fZmxvb3JkaXZfXyIKKyAgICAgICAgICAgIGRlZiBfX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkIuX19yZmxvb3JkaXZfXyIKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEIoMSkgLy8gMSwgIkIuX19mbG9vcmRpdl9fIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxIC8vIEIoMSksICJCLl9fcmZsb29yZGl2X18iKQorCisgICAgICAgICMgQ2FzZSAyOiBzdWJjbGFzcyBvZiBvYmplY3Q7IHRoaXMgaXMganVzdCB0aGUgYmFzZWxpbmUgZm9yIGNhc2UgMworCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQy5fX2Zsb29yZGl2X18iCisgICAgICAgICAgICBkZWYgX19yZmxvb3JkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDLl9fcmZsb29yZGl2X18iCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDKCkgLy8gMSwgIkMuX19mbG9vcmRpdl9fIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxIC8vIEMoKSwgIkMuX19yZmxvb3JkaXZfXyIpCisKKyAgICAgICAgIyBDYXNlIDM6IHN1YmNsYXNzIG9mIG5ldy1zdHlsZSBjbGFzczsgaGVyZSBpdCBnZXRzIGludGVyZXN0aW5nCisKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIGRlZiBfX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAiRC5fX2Zsb29yZGl2X18iCisgICAgICAgICAgICBkZWYgX19yZmxvb3JkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJELl9fcmZsb29yZGl2X18iCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEKCkgLy8gQygpLCAiRC5fX2Zsb29yZGl2X18iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMoKSAvLyBEKCksICJELl9fcmZsb29yZGl2X18iKQorCisgICAgICAgICMgQ2FzZSA0OiB0aGlzIGRpZG4ndCB3b3JrIHJpZ2h0IGluIDIuMi4yIGFuZCAyLjNhMQorCisgICAgICAgIGNsYXNzIEUoQyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFLl9fcmZsb29yZGl2X18sIEMuX19yZmxvb3JkaXZfXykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUoKSAvLyAxLCAiQy5fX2Zsb29yZGl2X18iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgLy8gRSgpLCAiQy5fX3JmbG9vcmRpdl9fIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFKCkgLy8gQygpLCAiQy5fX2Zsb29yZGl2X18iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMoKSAvLyBFKCksICJDLl9fZmxvb3JkaXZfXyIpICMgVGhpcyBvbmUgd291bGQgZmFpbAorCisgICAgQHRlc3Rfc3VwcG9ydC5pbXBsX2RldGFpbCgidGVzdGluZyBhbiBpbnRlcm5hbCBraW5kIG9mIG1ldGhvZCBvYmplY3QiKQorICAgIGRlZiB0ZXN0X21ldGhfY2xhc3NfZ2V0KHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgX19nZXRfXyBtZXRob2Qgb2YgTUVUSF9DTEFTUyBDIG1ldGhvZHMuLi4KKyAgICAgICAgIyBGdWxsIGNvdmVyYWdlIG9mIGRlc2Nyb2JqZWN0LmM6OmNsYXNzbWV0aG9kX2dldCgpCisKKyAgICAgICAgIyBCYXNlbGluZQorICAgICAgICBhcmcgPSBbMSwgMiwgM10KKyAgICAgICAgcmVzID0gezE6IE5vbmUsIDI6IE5vbmUsIDM6IE5vbmV9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdC5mcm9ta2V5cyhhcmcpLCByZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe30uZnJvbWtleXMoYXJnKSwgcmVzKQorCisgICAgICAgICMgTm93IGdldCB0aGUgZGVzY3JpcHRvcgorICAgICAgICBkZXNjciA9IGRpY3QuX19kaWN0X19bImZyb21rZXlzIl0KKworICAgICAgICAjIE1vcmUgYmFzZWxpbmUgdXNpbmcgdGhlIGRlc2NyaXB0b3IgZGlyZWN0bHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXNjci5fX2dldF9fKE5vbmUsIGRpY3QpKGFyZyksIHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXNjci5fX2dldF9fKHt9KShhcmcpLCByZXMpCisKKyAgICAgICAgIyBOb3cgY2hlY2sgdmFyaW91cyBlcnJvciBjYXNlcworICAgICAgICB0cnk6CisgICAgICAgICAgICBkZXNjci5fX2dldF9fKE5vbmUsIE5vbmUpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBoYXZlIGFsbG93ZWQgZGVzY3IuX19nZXRfXyhOb25lLCBOb25lKSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlc2NyLl9fZ2V0X18oNDIpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBoYXZlIGFsbG93ZWQgZGVzY3IuX19nZXRfXyg0MikiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZXNjci5fX2dldF9fKE5vbmUsIDQyKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgaGF2ZSBhbGxvd2VkIGRlc2NyLl9fZ2V0X18oTm9uZSwgNDIpIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVzY3IuX19nZXRfXyhOb25lLCBpbnQpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZG4ndCBoYXZlIGFsbG93ZWQgZGVzY3IuX19nZXRfXyhOb25lLCBpbnQpIikKKworICAgIGRlZiB0ZXN0X2lzaW5zdF9pc2NsYXNzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgcHJveHkgaXNpbnN0YW5jZSgpIGFuZCBpc2NsYXNzKCkuLi4KKyAgICAgICAgY2xhc3MgUHJveHkob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmopOgorICAgICAgICAgICAgICAgIHNlbGYuX19vYmogPSBvYmoKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiX1Byb3h5X18iKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fX29iaiwgbmFtZSkKKyAgICAgICAgIyBUZXN0IHdpdGggYSBjbGFzc2ljIGNsYXNzCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGEgPSBDKCkKKyAgICAgICAgcGEgPSBQcm94eShhKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYSwgQykgICMgQmFzZWxpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhLCBDKSAjIFRlc3QKKyAgICAgICAgIyBUZXN0IHdpdGggYSBjbGFzc2ljIHN1YmNsYXNzCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGEgPSBEKCkKKyAgICAgICAgcGEgPSBQcm94eShhKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYSwgQykgICMgQmFzZWxpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhLCBDKSAjIFRlc3QKKyAgICAgICAgIyBUZXN0IHdpdGggYSBuZXctc3R5bGUgY2xhc3MKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhID0gQygpCisgICAgICAgIHBhID0gUHJveHkoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGEsIEMpICAjIEJhc2VsaW5lCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwYSwgQykgIyBUZXN0CisgICAgICAgICMgVGVzdCB3aXRoIGEgbmV3LXN0eWxlIHN1YmNsYXNzCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGEgPSBEKCkKKyAgICAgICAgcGEgPSBQcm94eShhKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYSwgQykgICMgQmFzZWxpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhLCBDKSAjIFRlc3QKKworICAgIGRlZiB0ZXN0X3Byb3h5X3N1cGVyKHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgc3VwZXIoKSBmb3IgYSBwcm94eSBvYmplY3QuLi4KKyAgICAgICAgY2xhc3MgUHJveHkob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmopOgorICAgICAgICAgICAgICAgIHNlbGYuX19vYmogPSBvYmoKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiX1Byb3h5X18iKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fX29iaiwgbmFtZSkKKworICAgICAgICBjbGFzcyBCKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZihzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkIuZiIKKworICAgICAgICBjbGFzcyBDKEIpOgorICAgICAgICAgICAgZGVmIGYoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKEMsIHNlbGYpLmYoKSArICItPkMuZiIKKworICAgICAgICBvYmogPSBDKCkKKyAgICAgICAgcCA9IFByb3h5KG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLl9fZGljdF9fWyJmIl0ocCksICJCLmYtPkMuZiIpCisKKyAgICBkZWYgdGVzdF9jYXJsb3ZlcnJlKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgcHJvaGliaXRpb24gb2YgQ2FybG8gVmVycmUncyBoYWNrLi4uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9iamVjdC5fX3NldGF0dHJfXyhzdHIsICJmb28iLCA0MikKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQ2FybG8gVmVycmUgX19zZXRhdHRyX18gc3VjY2VlZGVkISIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9iamVjdC5fX2RlbGF0dHJfXyhzdHIsICJsb3dlciIpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkNhcmxvIFZlcnJlIF9fZGVsYXR0cl9fIHN1Y2NlZWRlZCEiKQorCisgICAgZGVmIHRlc3Rfd2Vha3JlZl9zZWdmYXVsdChzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHdlYWtyZWYgc2VnZmF1bHQuLi4KKyAgICAgICAgIyBTRiA3NDI5MTEKKyAgICAgICAgaW1wb3J0IHdlYWtyZWYKKworICAgICAgICBjbGFzcyBQcm92b2tlcjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWZlcnJlbnQpOgorICAgICAgICAgICAgICAgIHNlbGYucmVmID0gd2Vha3JlZi5yZWYocmVmZXJyZW50KQorCisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICB4ID0gc2VsZi5yZWYoKQorCisgICAgICAgIGNsYXNzIE9vcHMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBvID0gT29wcygpCisgICAgICAgIG8ud2hhdGV2ZXIgPSBQcm92b2tlcihvKQorICAgICAgICBkZWwgbworCisgICAgZGVmIHRlc3Rfd3JhcHBlcl9zZWdmYXVsdChzZWxmKToKKyAgICAgICAgIyBTRiA5MjcyNDg6IGRlZXBseSBuZXN0ZWQgd3JhcHBlcnMgY291bGQgY2F1c2Ugc3RhY2sgb3ZlcmZsb3cKKyAgICAgICAgZiA9IGxhbWJkYTpOb25lCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDAwMDAwKToKKyAgICAgICAgICAgIGYgPSBmLl9fY2FsbF9fCisgICAgICAgIGYgPSBOb25lCisKKyAgICBkZWYgdGVzdF9maWxlX2ZhdWx0KHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgc3lzLnN0ZG91dCBpcyBjaGFuZ2VkIGluIGdldGF0dHIuLi4KKyAgICAgICAgdGVzdF9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIGNsYXNzIFN0ZG91dEd1YXJkOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzeXMuX19zdGRvdXRfXworICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiUHJlbWF0dXJlIGFjY2VzcyB0byBzeXMuc3Rkb3V0LiVzIiAlIGF0dHIpCisgICAgICAgIHN5cy5zdGRvdXQgPSBTdGRvdXRHdWFyZCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaW50ICJPb3BzISIKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSB0ZXN0X3N0ZG91dAorCisgICAgZGVmIHRlc3RfdmljaW91c19kZXNjcmlwdG9yX25vbnNlbnNlKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgdmljaW91c19kZXNjcmlwdG9yX25vbnNlbnNlLi4uCisKKyAgICAgICAgIyBBIHBvdGVudGlhbCBzZWdmYXVsdCBzcG90dGVkIGJ5IFRob21hcyBXb3V0ZXJzIGluIG1haWwgdG8KKyAgICAgICAgIyBweXRob24tZGV2IDIwMDMtMDQtMTcsIHR1cm5lZCBpbnRvIGFuIGV4YW1wbGUgJiBmaXhlZCBieSBNaWNoYWVsCisgICAgICAgICMgSHVkc29uIGp1c3QgbGVzcyB0aGFuIGZvdXIgbW9udGhzIGxhdGVyLi4uCisKKyAgICAgICAgY2xhc3MgRXZpbChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBoYXNoKCdhdHRyJykKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGRlbCBDLmF0dHIKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorCisgICAgICAgIGNsYXNzIERlc2NyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRfXyhzZWxmLCBvYiwgdHlwZT1Ob25lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGF0dHIgPSBEZXNjcigpCisKKyAgICAgICAgYyA9IEMoKQorICAgICAgICBjLl9fZGljdF9fW0V2aWwoKV0gPSAwCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmF0dHIsIDEpCisgICAgICAgICMgdGhpcyBtYWtlcyBhIGNyYXNoIG1vcmUgbGlrZWx5OgorICAgICAgICB0ZXN0X3N1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzYXR0cihjLCAnYXR0cicpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgICMgU0YgMTE1NTkzOAorICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMTAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgRm9vKCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZGlkIG5vdCB0ZXN0IF9faW5pdF9fKCkgZm9yIE5vbmUgcmV0dXJuIikKKworICAgIGRlZiB0ZXN0X21ldGhvZF93cmFwcGVyKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgbWV0aG9kLXdyYXBwZXIgb2JqZWN0cy4uLgorICAgICAgICAjIDx0eXBlICdtZXRob2Qtd3JhcHBlcic+IGRpZCBub3Qgc3VwcG9ydCBhbnkgcmVmbGVjdGlvbiBiZWZvcmUgMi41CisKKyAgICAgICAgbCA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5fX2FkZF9fLCBsLl9fYWRkX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5fX2FkZF9fLCBbXS5fX2FkZF9fKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobC5fX2FkZF9fICE9IFs1XS5fX2FkZF9fKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobC5fX2FkZF9fICE9IGwuX19tdWxfXykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGwuX19hZGRfXy5fX25hbWVfXyA9PSAnX19hZGRfXycpCisgICAgICAgIGlmIGhhc2F0dHIobC5fX2FkZF9fLCAnX19zZWxmX18nKToKKyAgICAgICAgICAgICMgQ1B5dGhvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGwuX19hZGRfXy5fX3NlbGZfXyBpcyBsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGwuX19hZGRfXy5fX29iamNsYXNzX18gaXMgbGlzdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUHl0aG9uIGltcGxlbWVudGF0aW9ucyB3aGVyZSBbXS5fX2FkZF9fIGlzIGEgbm9ybWFsIGJvdW5kIG1ldGhvZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGwuX19hZGRfXy5pbV9zZWxmIGlzIGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobC5fX2FkZF9fLmltX2NsYXNzIGlzIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobC5fX2FkZF9fLl9fZG9jX18sIGxpc3QuX19hZGRfXy5fX2RvY19fKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBoYXNoKGwuX19hZGRfXykKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gVHlwZUVycm9yIGZyb20gaGFzaChbXS5fX2FkZF9fKSIpCisKKyAgICAgICAgdCA9ICgpCisgICAgICAgIHQgKz0gKDcsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuX19hZGRfXywgKDcsKS5fX2FkZF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godC5fX2FkZF9fKSwgaGFzaCgoNywpLl9fYWRkX18pKQorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgTm90SW1wbGVtZW50ZWQuLi4KKyAgICAgICAgIyBhbGwgYmluYXJ5IG1ldGhvZHMgc2hvdWxkIGJlIGFibGUgdG8gcmV0dXJuIGEgTm90SW1wbGVtZW50ZWQKKyAgICAgICAgaW1wb3J0IG9wZXJhdG9yCisKKyAgICAgICAgZGVmIHNwZWNpYWxtZXRob2Qoc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgZGVmIGNoZWNrKGV4cHIsIHgsIHkpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV4ZWMgZXhwciBpbiB7J3gnOiB4LCAneSc6IHksICdvcGVyYXRvcic6IG9wZXJhdG9yfQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gVHlwZUVycm9yIGZyb20gJXIiICUgKGV4cHIsKSkKKworICAgICAgICBOMSA9IHN5cy5tYXhpbnQgKyAxTCAgICAjIG1pZ2h0IHRyaWdnZXIgT3ZlcmZsb3dFcnJvcnMgaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFR5cGVFcnJvcnMKKyAgICAgICAgTjIgPSBzeXMubWF4aW50ICAgICAgICAgIyBpZiBzaXplb2YoaW50KSA8IHNpemVvZihsb25nKSwgbWlnaHQgdHJpZ2dlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgVmFsdWVFcnJvcnMgaW5zdGVhZCBvZiBUeXBlRXJyb3JzCisgICAgICAgIGZvciBtZXRhY2xhc3MgaW4gW3R5cGUsIHR5cGVzLkNsYXNzVHlwZV06CisgICAgICAgICAgICBmb3IgbmFtZSwgZXhwciwgaWV4cHIgaW4gWworICAgICAgICAgICAgICAgICAgICAoJ19fYWRkX18nLCAgICAgICd4ICsgeScsICAgICAgICAgICAgICAgICAgICd4ICs9IHknKSwKKyAgICAgICAgICAgICAgICAgICAgKCdfX3N1Yl9fJywgICAgICAneCAtIHknLCAgICAgICAgICAgICAgICAgICAneCAtPSB5JyksCisgICAgICAgICAgICAgICAgICAgICgnX19tdWxfXycsICAgICAgJ3ggKiB5JywgICAgICAgICAgICAgICAgICAgJ3ggKj0geScpLAorICAgICAgICAgICAgICAgICAgICAoJ19fdHJ1ZWRpdl9fJywgICdvcGVyYXRvci50cnVlZGl2KHgsIHkpJywgIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAoJ19fZmxvb3JkaXZfXycsICdvcGVyYXRvci5mbG9vcmRpdih4LCB5KScsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAoJ19fZGl2X18nLCAgICAgICd4IC8geScsICAgICAgICAgICAgICAgICAgICd4IC89IHknKSwKKyAgICAgICAgICAgICAgICAgICAgKCdfX21vZF9fJywgICAgICAneCAlIHknLCAgICAgICAgICAgICAgICAgICAneCAlPSB5JyksCisgICAgICAgICAgICAgICAgICAgICgnX19kaXZtb2RfXycsICAgJ2Rpdm1vZCh4LCB5KScsICAgICAgICAgICAgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICgnX19wb3dfXycsICAgICAgJ3ggKiogeScsICAgICAgICAgICAgICAgICAgJ3ggKio9IHknKSwKKyAgICAgICAgICAgICAgICAgICAgKCdfX2xzaGlmdF9fJywgICAneCA8PCB5JywgICAgICAgICAgICAgICAgICAneCA8PD0geScpLAorICAgICAgICAgICAgICAgICAgICAoJ19fcnNoaWZ0X18nLCAgICd4ID4+IHknLCAgICAgICAgICAgICAgICAgICd4ID4+PSB5JyksCisgICAgICAgICAgICAgICAgICAgICgnX19hbmRfXycsICAgICAgJ3ggJiB5JywgICAgICAgICAgICAgICAgICAgJ3ggJj0geScpLAorICAgICAgICAgICAgICAgICAgICAoJ19fb3JfXycsICAgICAgICd4IHwgeScsICAgICAgICAgICAgICAgICAgICd4IHw9IHknKSwKKyAgICAgICAgICAgICAgICAgICAgKCdfX3hvcl9fJywgICAgICAneCBeIHknLCAgICAgICAgICAgICAgICAgICAneCBePSB5JyksCisgICAgICAgICAgICAgICAgICAgICgnX19jb2VyY2VfXycsICAgJ2NvZXJjZSh4LCB5KScsICAgICAgICAgICAgTm9uZSldOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ19fY29lcmNlX18nOgorICAgICAgICAgICAgICAgICAgICBybmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBybmFtZSA9ICdfX3InICsgbmFtZVsyOl0KKyAgICAgICAgICAgICAgICBBID0gbWV0YWNsYXNzKCdBJywgKCksIHtuYW1lOiBzcGVjaWFsbWV0aG9kfSkKKyAgICAgICAgICAgICAgICBCID0gbWV0YWNsYXNzKCdCJywgKCksIHtybmFtZTogc3BlY2lhbG1ldGhvZH0pCisgICAgICAgICAgICAgICAgYSA9IEEoKQorICAgICAgICAgICAgICAgIGIgPSBCKCkKKyAgICAgICAgICAgICAgICBjaGVjayhleHByLCBhLCBhKQorICAgICAgICAgICAgICAgIGNoZWNrKGV4cHIsIGEsIGIpCisgICAgICAgICAgICAgICAgY2hlY2soZXhwciwgYiwgYSkKKyAgICAgICAgICAgICAgICBjaGVjayhleHByLCBiLCBiKQorICAgICAgICAgICAgICAgIGNoZWNrKGV4cHIsIGEsIE4xKQorICAgICAgICAgICAgICAgIGNoZWNrKGV4cHIsIGEsIE4yKQorICAgICAgICAgICAgICAgIGNoZWNrKGV4cHIsIE4xLCBiKQorICAgICAgICAgICAgICAgIGNoZWNrKGV4cHIsIE4yLCBiKQorICAgICAgICAgICAgICAgIGlmIGlleHByOgorICAgICAgICAgICAgICAgICAgICBjaGVjayhpZXhwciwgYSwgYSkKKyAgICAgICAgICAgICAgICAgICAgY2hlY2soaWV4cHIsIGEsIGIpCisgICAgICAgICAgICAgICAgICAgIGNoZWNrKGlleHByLCBiLCBhKQorICAgICAgICAgICAgICAgICAgICBjaGVjayhpZXhwciwgYiwgYikKKyAgICAgICAgICAgICAgICAgICAgY2hlY2soaWV4cHIsIGEsIE4xKQorICAgICAgICAgICAgICAgICAgICBjaGVjayhpZXhwciwgYSwgTjIpCisgICAgICAgICAgICAgICAgICAgIGluYW1lID0gJ19faScgKyBuYW1lWzI6XQorICAgICAgICAgICAgICAgICAgICBDID0gbWV0YWNsYXNzKCdDJywgKCksIHtpbmFtZTogc3BlY2lhbG1ldGhvZH0pCisgICAgICAgICAgICAgICAgICAgIGMgPSBDKCkKKyAgICAgICAgICAgICAgICAgICAgY2hlY2soaWV4cHIsIGMsIGEpCisgICAgICAgICAgICAgICAgICAgIGNoZWNrKGlleHByLCBjLCBiKQorICAgICAgICAgICAgICAgICAgICBjaGVjayhpZXhwciwgYywgTjEpCisgICAgICAgICAgICAgICAgICAgIGNoZWNrKGlleHByLCBjLCBOMikKKworICAgIGRlZiB0ZXN0X2Fzc2lnbl9zbGljZShzZWxmKToKKyAgICAgICAgIyBjZXZhbC5jJ3MgYXNzaWduX3NsaWNlIHVzZWQgdG8gY2hlY2sgZm9yCisgICAgICAgICMgdHAtPnRwX2FzX3NlcXVlbmNlLT5zcV9zbGljZSBpbnN0ZWFkIG9mCisgICAgICAgICMgdHAtPnRwX2FzX3NlcXVlbmNlLT5zcV9hc3Nfc2xpY2UKKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19zZXRzbGljZV9fKHNlbGYsIHN0YXJ0LCBzdG9wLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisKKyAgICAgICAgYyA9IEMoKQorICAgICAgICBjWzE6Ml0gPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy52YWx1ZSwgMykKKworICAgIGRlZiB0ZXN0X3NldF9hbmRfbm9fZ2V0KHNlbGYpOgorICAgICAgICAjIFNlZQorICAgICAgICAjIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAxMC1KYW51YXJ5LzA5NTYzNy5odG1sCisgICAgICAgIGNsYXNzIERlc2NyKG9iamVjdCk6CisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICAgICAgICAgIGRlZiBfX3NldF9fKHNlbGYsIG9iaiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIG9iai5fX2RpY3RfX1tzZWxmLm5hbWVdID0gdmFsdWUKKyAgICAgICAgZGVzY3IgPSBEZXNjcigiYSIpCisKKyAgICAgICAgY2xhc3MgWChvYmplY3QpOgorICAgICAgICAgICAgYSA9IGRlc2NyCisKKyAgICAgICAgeCA9IFgoKQorICAgICAgICBzZWxmLmFzc2VydElzKHguYSwgZGVzY3IpCisgICAgICAgIHguYSA9IDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5hLCA0MikKKworICAgICAgICAjIEFsc28gY2hlY2sgdHlwZV9nZXRhdHRybyBmb3IgY29ycmVjdG5lc3MuCisgICAgICAgIGNsYXNzIE1ldGEodHlwZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIFgob2JqZWN0KToKKyAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBNZXRhCisgICAgICAgIFguYSA9IDQyCisgICAgICAgIE1ldGEuYSA9IERlc2NyKCJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLmEsIDQyKQorCisgICAgZGVmIHRlc3RfZ2V0YXR0cl9ob29rcyhzZWxmKToKKyAgICAgICAgIyBpc3N1ZSA0MjMwCisKKyAgICAgICAgY2xhc3MgRGVzY3JpcHRvcihvYmplY3QpOgorICAgICAgICAgICAgY291bnRlciA9IDAKKyAgICAgICAgICAgIGRlZiBfX2dldF9fKHNlbGYsIG9iaiwgb2JqdHlwZT1Ob25lKToKKyAgICAgICAgICAgICAgICBkZWYgZ2V0dGVyKG5hbWUpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMQorICAgICAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihuYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXIKKworICAgICAgICBkZXNjciA9IERlc2NyaXB0b3IoKQorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBfX2dldGF0dHJpYnV0ZV9fID0gZGVzY3IKKyAgICAgICAgY2xhc3MgQihvYmplY3QpOgorICAgICAgICAgICAgX19nZXRhdHRyX18gPSBkZXNjcgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBfX2dldGF0dHJpYnV0ZV9fID0gZGVzY3IKKyAgICAgICAgICAgIF9fZ2V0YXR0cl9fID0gZGVzY3IKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgQSgpLCAiYXR0ciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzY3IuY291bnRlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIEIoKSwgImF0dHIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc2NyLmNvdW50ZXIsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBDKCksICJhdHRyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXNjci5jb3VudGVyLCA0KQorCisgICAgICAgIGNsYXNzIEV2aWxHZXRhdHRyaWJ1dGUob2JqZWN0KToKKyAgICAgICAgICAgICMgVGhpcyB1c2VkIHRvIHNlZ2ZhdWx0CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IobmFtZSkKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGRlbCBFdmlsR2V0YXR0cmlidXRlLl9fZ2V0YXR0cl9fCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIEV2aWxHZXRhdHRyaWJ1dGUoKSwgImF0dHIiKQorCisgICAgZGVmIHRlc3RfdHlwZV9fX2dldGF0dHJpYnV0ZV9fKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHR5cGUuX19nZXRhdHRyaWJ1dGVfXywgbGlzdCwgdHlwZSkKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0bWV0aG9kcyhzZWxmKToKKyAgICAgICAgIyB0eXBlIHByZXRlbmRzIG5vdCB0byBoYXZlIF9fYWJzdHJhY3RtZXRob2RzX18uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCB0eXBlLCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpCisgICAgICAgIGNsYXNzIG1ldGEodHlwZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBtZXRhLCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpCisgICAgICAgIGNsYXNzIFgob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgWC5fX2Fic3RyYWN0bWV0aG9kc19fCisKKyAgICBkZWYgdGVzdF9wcm94eV9jYWxsKHNlbGYpOgorICAgICAgICBjbGFzcyBGYWtlU3RyKG9iamVjdCk6CisgICAgICAgICAgICBfX2NsYXNzX18gPSBzdHIKKworICAgICAgICBmYWtlX3N0ciA9IEZha2VTdHIoKQorICAgICAgICAjIGlzaW5zdGFuY2UoKSByZWFkcyBfX2NsYXNzX18gb24gbmV3IHN0eWxlIGNsYXNzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZmFrZV9zdHIsIHN0cikpCisKKyAgICAgICAgIyBjYWxsIGEgbWV0aG9kIGRlc2NyaXB0b3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc3RyLnNwbGl0KGZha2Vfc3RyKQorCisgICAgICAgICMgY2FsbCBhIHNsb3Qgd3JhcHBlciBkZXNjcmlwdG9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHN0ci5fX2FkZF9fKGZha2Vfc3RyLCAiYWJjIikKKworICAgIGRlZiB0ZXN0X3JlcHJfYXNfc3RyKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMTYwMzogY3Jhc2ggb3IgaW5maW5pdGUgbG9vcCB3aGVuIHJlYmluZGluZyBfX3N0cl9fIGFzCisgICAgICAgICMgX19yZXByX18uCisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBGb28uX19yZXByX18gPSBGb28uX19zdHJfXworICAgICAgICBmb28gPSBGb28oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHN0ciwgZm9vKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHJlcHIsIGZvbykKKworICAgIGRlZiB0ZXN0X21peGluZ19zbG90X3dyYXBwZXJzKHNlbGYpOgorICAgICAgICBjbGFzcyBYKGRpY3QpOgorICAgICAgICAgICAgX19zZXRhdHRyX18gPSBkaWN0Ll9fc2V0aXRlbV9fCisgICAgICAgIHggPSBYKCkKKyAgICAgICAgeC55ID0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WyJ5Il0sIDQyKQorCisgICAgZGVmIHRlc3RfY3ljbGVfdGhyb3VnaF9kaWN0KHNlbGYpOgorICAgICAgICAjIFNlZSBidWcgIzE0Njk2MjkKKyAgICAgICAgY2xhc3MgWChkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBkaWN0Ll9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5fX2RpY3RfXyA9IHNlbGYKKyAgICAgICAgeCA9IFgoKQorICAgICAgICB4LmF0dHIgPSA0MgorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHgpCisgICAgICAgIGRlbCB4CisgICAgICAgIHRlc3Rfc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3IoKSkKKyAgICAgICAgZm9yIG8gaW4gZ2MuZ2V0X29iamVjdHMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QodHlwZShvKSwgWCkKKworY2xhc3MgRGljdFByb3h5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIG1ldGgoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLkMgPSBDCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEluKCdkaWN0X3Byb3h5KHsnLCByZXByKHZhcnMoc2VsZi5DKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIidtZXRoJzoiLCByZXByKHZhcnMoc2VsZi5DKSkpCisKKyAgICBkZWYgdGVzdF9pdGVyX2tleXMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBkaWN0LXByb3h5IGl0ZXJrZXlzLi4uCisgICAgICAgIGtleXMgPSBbIGtleSBmb3Iga2V5IGluIHNlbGYuQy5fX2RpY3RfXy5pdGVya2V5cygpIF0KKyAgICAgICAga2V5cy5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBbJ19fZGljdF9fJywgJ19fZG9jX18nLCAnX19tb2R1bGVfXycsCisgICAgICAgICAgICAnX193ZWFrcmVmX18nLCAnbWV0aCddKQorCisgICAgZGVmIHRlc3RfaXRlcl92YWx1ZXMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBkaWN0LXByb3h5IGl0ZXJ2YWx1ZXMuLi4KKyAgICAgICAgdmFsdWVzID0gWyB2YWx1ZXMgZm9yIHZhbHVlcyBpbiBzZWxmLkMuX19kaWN0X18uaXRlcnZhbHVlcygpIF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWVzKSwgNSkKKworICAgIGRlZiB0ZXN0X2l0ZXJfaXRlbXMoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBkaWN0LXByb3h5IGl0ZXJpdGVtcy4uLgorICAgICAgICBrZXlzID0gWyBrZXkgZm9yIChrZXksIHZhbHVlKSBpbiBzZWxmLkMuX19kaWN0X18uaXRlcml0ZW1zKCkgXQorICAgICAgICBrZXlzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIFsnX19kaWN0X18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywKKyAgICAgICAgICAgICdfX3dlYWtyZWZfXycsICdtZXRoJ10pCisKKyAgICBkZWYgdGVzdF9kaWN0X3R5cGVfd2l0aF9tZXRhY2xhc3Moc2VsZik6CisgICAgICAgICMgVGVzdGluZyB0eXBlIG9mIF9fZGljdF9fIHdoZW4gX19tZXRhY2xhc3NfXyBzZXQuLi4KKyAgICAgICAgY2xhc3MgQihvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBNKHR5cGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgIyBJbiAyLjNhMSwgQy5fX2RpY3RfXyB3YXMgYSByZWFsIGRpY3QgcmF0aGVyIHRoYW4gYSBkaWN0IHByb3h5CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gTQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoQy5fX2RpY3RfXyksIHR5cGUoQi5fX2RpY3RfXykpCisKKworY2xhc3MgUFR5cGVzTG9uZ0luaXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoaXMgaXMgaW4gaXRzIG93biBUZXN0Q2FzZSBzbyB0aGF0IGl0IGNhbiBiZSBydW4gYmVmb3JlIGFueSBvdGhlciB0ZXN0cy4KKyAgICBkZWYgdGVzdF9weXR5cGVfbG9uZ19yZWFkeShzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIFNGIGJ1ZyA1NTE0MTIgLi4uCisKKyAgICAgICAgIyBUaGlzIGR1bXBzIGNvcmUgd2hlbiBTRiBidWcgNTUxNDEyIGlzbid0IGZpeGVkIC0tCisgICAgICAgICMgYnV0IG9ubHkgd2hlbiB0ZXN0X2Rlc2NyLnB5IGlzIHJ1biBzZXBhcmF0ZWx5LgorICAgICAgICAjIChUaGF0IGNhbid0IGJlIGhlbHBlZCAtLSBhcyBzb29uIGFzIFB5VHlwZV9SZWFkeSgpCisgICAgICAgICMgaXMgY2FsbGVkIGZvciBQeUxvbmdfVHlwZSwgdGhlIGJ1ZyBpcyBnb25lLikKKyAgICAgICAgY2xhc3MgVXNlckxvbmcob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX3Bvd19fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBvdygwTCwgVXNlckxvbmcoKSwgMEwpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIEFub3RoZXIgc2VnZmF1bHQgb25seSB3aGVuIHJ1biBlYXJseQorICAgICAgICAjIChiZWZvcmUgUHlUeXBlX1JlYWR5KHR1cGxlKSBpcyBjYWxsZWQpCisgICAgICAgIHR5cGUubXJvKHR1cGxlKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBkZXByZWNhdGlvbnMgPSBbKHInY29tcGxleCBkaXZtb2RcKFwpLCAvLyBhbmQgJSBhcmUgZGVwcmVjYXRlZCQnLAorICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKV0KKyAgICBpZiBzeXMucHkza3dhcm5pbmc6CisgICAgICAgIGRlcHJlY2F0aW9ucyArPSBbCisgICAgICAgICAgICAoImNsYXNzaWMgKGludHxsb25nKSBkaXZpc2lvbiIsIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICAoImNvZXJjZS4uIG5vdCBzdXBwb3J0ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgKCIuK19fKGdldHxzZXR8ZGVsKXNsaWNlX18gaGFzIGJlZW4gcmVtb3ZlZCIsIERlcHJlY2F0aW9uV2FybmluZyldCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKmRlcHJlY2F0aW9ucyk6CisgICAgICAgICMgUnVuIGFsbCBsb2NhbCB0ZXN0IGNhc2VzLCB3aXRoIFBUeXBlc0xvbmdJbml0VGVzdCBmaXJzdC4KKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChQVHlwZXNMb25nSW5pdFRlc3QsIE9wZXJhdG9yc1Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NQcm9wZXJ0aWVzQW5kTWV0aG9kcywgRGljdFByb3h5VGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Rlc2NydHV0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGVzY3J0dXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmZjBjOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Rlc2NydHV0LnB5CkBAIC0wLDAgKzEsNDk3IEBACisjIFRoaXMgY29udGFpbnMgbW9zdCBvZiB0aGUgZXhlY3V0YWJsZSBleGFtcGxlcyBmcm9tIEd1aWRvJ3MgZGVzY3IKKyMgdHV0b3JpYWwsIG9uY2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjIvZGVzY3JpbnRyby5odG1sCisjCisjIEEgZmV3IGV4YW1wbGVzIGxlZnQgaW1wbGljaXQgaW4gdGhlIHdyaXRldXAgd2VyZSBmbGVzaGVkIG91dCwgYSBmZXcgd2VyZQorIyBza2lwcGVkIGR1ZSB0byBsYWNrIG9mIGludGVyZXN0IChlLmcuLCBmYWtpbmcgc3VwZXIoKSBieSBoYW5kIGlzbid0CisjIG9mIG11Y2ggaW50ZXJlc3QgYW55bW9yZSksIGFuZCBhIGZldyB3ZXJlIGZpZGRsZWQgdG8gbWFrZSB0aGUgb3V0cHV0CisjIGRldGVybWluaXN0aWMuCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHNvcnRkaWN0CitpbXBvcnQgcHByaW50CisKK2NsYXNzIGRlZmF1bHRkaWN0KGRpY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICBkaWN0Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuZGVmYXVsdCA9IGRlZmF1bHQKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZGljdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRlZmF1bHQKKworICAgIGRlZiBnZXQoc2VsZiwga2V5LCAqYXJncyk6CisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgYXJncyA9IChzZWxmLmRlZmF1bHQsKQorICAgICAgICByZXR1cm4gZGljdC5nZXQoc2VsZiwga2V5LCAqYXJncykKKworICAgIGRlZiBtZXJnZShzZWxmLCBvdGhlcik6CisgICAgICAgIGZvciBrZXkgaW4gb3RoZXI6CisgICAgICAgICAgICBpZiBrZXkgbm90IGluIHNlbGY6CisgICAgICAgICAgICAgICAgc2VsZltrZXldID0gb3RoZXJba2V5XQorCit0ZXN0XzEgPSAiIiIKKworSGVyZSdzIHRoZSBuZXcgdHlwZSBhdCB3b3JrOgorCisgICAgPj4+IHByaW50IGRlZmF1bHRkaWN0ICAgICAgICAgICAgICAgIyBzaG93IG91ciB0eXBlCisgICAgPGNsYXNzICd0ZXN0LnRlc3RfZGVzY3J0dXQuZGVmYXVsdGRpY3QnPgorICAgID4+PiBwcmludCB0eXBlKGRlZmF1bHRkaWN0KSAgICAgICAgICMgaXRzIG1ldGF0eXBlCisgICAgPHR5cGUgJ3R5cGUnPgorICAgID4+PiBhID0gZGVmYXVsdGRpY3QoZGVmYXVsdD0wLjApICAgICMgY3JlYXRlIGFuIGluc3RhbmNlCisgICAgPj4+IHByaW50IGEgICAgICAgICAgICAgICAgICAgICAgICAgIyBzaG93IHRoZSBpbnN0YW5jZQorICAgIHt9CisgICAgPj4+IHByaW50IHR5cGUoYSkgICAgICAgICAgICAgICAgICAgIyBzaG93IGl0cyB0eXBlCisgICAgPGNsYXNzICd0ZXN0LnRlc3RfZGVzY3J0dXQuZGVmYXVsdGRpY3QnPgorICAgID4+PiBwcmludCBhLl9fY2xhc3NfXyAgICAgICAgICAgICAgICMgc2hvdyBpdHMgY2xhc3MKKyAgICA8Y2xhc3MgJ3Rlc3QudGVzdF9kZXNjcnR1dC5kZWZhdWx0ZGljdCc+CisgICAgPj4+IHByaW50IHR5cGUoYSkgaXMgYS5fX2NsYXNzX18gICAgIyBpdHMgdHlwZSBpcyBpdHMgY2xhc3MKKyAgICBUcnVlCisgICAgPj4+IGFbMV0gPSAzLjI1ICAgICAgICAgICAgICAgICAgICAgIyBtb2RpZnkgdGhlIGluc3RhbmNlCisgICAgPj4+IHByaW50IGEgICAgICAgICAgICAgICAgICAgICAgICAgIyBzaG93IHRoZSBuZXcgdmFsdWUKKyAgICB7MTogMy4yNX0KKyAgICA+Pj4gcHJpbnQgYVsxXSAgICAgICAgICAgICAgICAgICAgICAjIHNob3cgdGhlIG5ldyBpdGVtCisgICAgMy4yNQorICAgID4+PiBwcmludCBhWzBdICAgICAgICAgICAgICAgICAgICAgICMgYSBub24tZXhpc3RlbnQgaXRlbQorICAgIDAuMAorICAgID4+PiBhLm1lcmdlKHsxOjEwMCwgMjoyMDB9KSAgICAgICAgICMgdXNlIGEgZGljdCBtZXRob2QKKyAgICA+Pj4gcHJpbnQgc29ydGRpY3QoYSkgICAgICAgICAgICAgICAjIHNob3cgdGhlIHJlc3VsdAorICAgIHsxOiAzLjI1LCAyOiAyMDB9CisgICAgPj4+CisKK1dlIGNhbiBhbHNvIHVzZSB0aGUgbmV3IHR5cGUgaW4gY29udGV4dHMgd2hlcmUgY2xhc3NpYyBvbmx5IGFsbG93cyAicmVhbCIKK2RpY3Rpb25hcmllcywgc3VjaCBhcyB0aGUgbG9jYWxzL2dsb2JhbHMgZGljdGlvbmFyaWVzIGZvciB0aGUgZXhlYworc3RhdGVtZW50IG9yIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBldmFsKCk6CisKKyAgICA+Pj4gZGVmIHNvcnRlZChzZXEpOgorICAgIC4uLiAgICAgc2VxLnNvcnQoa2V5PXN0cikKKyAgICAuLi4gICAgIHJldHVybiBzZXEKKyAgICA+Pj4gcHJpbnQgc29ydGVkKGEua2V5cygpKQorICAgIFsxLCAyXQorICAgID4+PiBleGVjICJ4ID0gMzsgcHJpbnQgeCIgaW4gYQorICAgIDMKKyAgICA+Pj4gcHJpbnQgc29ydGVkKGEua2V5cygpKQorICAgIFsxLCAyLCAnX19idWlsdGluc19fJywgJ3gnXQorICAgID4+PiBwcmludCBhWyd4J10KKyAgICAzCisgICAgPj4+CisKK05vdyBJJ2xsIHNob3cgdGhhdCBkZWZhdWx0ZGljdCBpbnN0YW5jZXMgaGF2ZSBkeW5hbWljIGluc3RhbmNlIHZhcmlhYmxlcywKK2p1c3QgbGlrZSBjbGFzc2ljIGNsYXNzZXM6CisKKyAgICA+Pj4gYS5kZWZhdWx0ID0gLTEKKyAgICA+Pj4gcHJpbnQgYVsibm93YXkiXQorICAgIC0xCisgICAgPj4+IGEuZGVmYXVsdCA9IC0xMDAwCisgICAgPj4+IHByaW50IGFbIm5vd2F5Il0KKyAgICAtMTAwMAorICAgID4+PiAnZGVmYXVsdCcgaW4gZGlyKGEpCisgICAgVHJ1ZQorICAgID4+PiBhLngxID0gMTAwCisgICAgPj4+IGEueDIgPSAyMDAKKyAgICA+Pj4gcHJpbnQgYS54MQorICAgIDEwMAorICAgID4+PiBkID0gZGlyKGEpCisgICAgPj4+ICdkZWZhdWx0JyBpbiBkIGFuZCAneDEnIGluIGQgYW5kICd4MicgaW4gZAorICAgIFRydWUKKyAgICA+Pj4gcHJpbnQgc29ydGRpY3QoYS5fX2RpY3RfXykKKyAgICB7J2RlZmF1bHQnOiAtMTAwMCwgJ3gxJzogMTAwLCAneDInOiAyMDB9CisgICAgPj4+CisiIiIKKworY2xhc3MgZGVmYXVsdGRpY3QyKGRpY3QpOgorICAgIF9fc2xvdHNfXyA9IFsnZGVmYXVsdCddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgZGljdC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGRpY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5kZWZhdWx0CisKKyAgICBkZWYgZ2V0KHNlbGYsIGtleSwgKmFyZ3MpOgorICAgICAgICBpZiBub3QgYXJnczoKKyAgICAgICAgICAgIGFyZ3MgPSAoc2VsZi5kZWZhdWx0LCkKKyAgICAgICAgcmV0dXJuIGRpY3QuZ2V0KHNlbGYsIGtleSwgKmFyZ3MpCisKKyAgICBkZWYgbWVyZ2Uoc2VsZiwgb3RoZXIpOgorICAgICAgICBmb3Iga2V5IGluIG90aGVyOgorICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmOgorICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IG90aGVyW2tleV0KKwordGVzdF8yID0gIiIiCisKK1RoZSBfX3Nsb3RzX18gZGVjbGFyYXRpb24gdGFrZXMgYSBsaXN0IG9mIGluc3RhbmNlIHZhcmlhYmxlcywgYW5kIHJlc2VydmVzCitzcGFjZSBmb3IgZXhhY3RseSB0aGVzZSBpbiB0aGUgaW5zdGFuY2UuIFdoZW4gX19zbG90c19fIGlzIHVzZWQsIG90aGVyCitpbnN0YW5jZSB2YXJpYWJsZXMgY2Fubm90IGJlIGFzc2lnbmVkIHRvOgorCisgICAgPj4+IGEgPSBkZWZhdWx0ZGljdDIoZGVmYXVsdD0wLjApCisgICAgPj4+IGFbMV0KKyAgICAwLjAKKyAgICA+Pj4gYS5kZWZhdWx0ID0gLTEKKyAgICA+Pj4gYVsxXQorICAgIC0xCisgICAgPj4+IGEueDEgPSAxCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPworICAgIEF0dHJpYnV0ZUVycm9yOiAnZGVmYXVsdGRpY3QyJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAneDEnCisgICAgPj4+CisKKyIiIgorCit0ZXN0XzMgPSAiIiIKKworSW50cm9zcGVjdGluZyBpbnN0YW5jZXMgb2YgYnVpbHQtaW4gdHlwZXMKKworRm9yIGluc3RhbmNlIG9mIGJ1aWx0LWluIHR5cGVzLCB4Ll9fY2xhc3NfXyBpcyBub3cgdGhlIHNhbWUgYXMgdHlwZSh4KToKKworICAgID4+PiB0eXBlKFtdKQorICAgIDx0eXBlICdsaXN0Jz4KKyAgICA+Pj4gW10uX19jbGFzc19fCisgICAgPHR5cGUgJ2xpc3QnPgorICAgID4+PiBsaXN0CisgICAgPHR5cGUgJ2xpc3QnPgorICAgID4+PiBpc2luc3RhbmNlKFtdLCBsaXN0KQorICAgIFRydWUKKyAgICA+Pj4gaXNpbnN0YW5jZShbXSwgZGljdCkKKyAgICBGYWxzZQorICAgID4+PiBpc2luc3RhbmNlKFtdLCBvYmplY3QpCisgICAgVHJ1ZQorICAgID4+PgorCitVbmRlciB0aGUgbmV3IHByb3Bvc2FsLCB0aGUgX19tZXRob2RzX18gYXR0cmlidXRlIG5vIGxvbmdlciBleGlzdHM6CisKKyAgICA+Pj4gW10uX19tZXRob2RzX18KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CisgICAgQXR0cmlidXRlRXJyb3I6ICdsaXN0JyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnX19tZXRob2RzX18nCisgICAgPj4+CisKK0luc3RlYWQsIHlvdSBjYW4gZ2V0IHRoZSBzYW1lIGluZm9ybWF0aW9uIGZyb20gdGhlIGxpc3QgdHlwZToKKworICAgID4+PiBwcHJpbnQucHByaW50KGRpcihsaXN0KSkgICAgIyBsaWtlIGxpc3QuX19kaWN0X18ua2V5cygpLCBidXQgc29ydGVkCisgICAgWydfX2FkZF9fJywKKyAgICAgJ19fY2xhc3NfXycsCisgICAgICdfX2NvbnRhaW5zX18nLAorICAgICAnX19kZWxhdHRyX18nLAorICAgICAnX19kZWxpdGVtX18nLAorICAgICAnX19kZWxzbGljZV9fJywKKyAgICAgJ19fZG9jX18nLAorICAgICAnX19lcV9fJywKKyAgICAgJ19fZm9ybWF0X18nLAorICAgICAnX19nZV9fJywKKyAgICAgJ19fZ2V0YXR0cmlidXRlX18nLAorICAgICAnX19nZXRpdGVtX18nLAorICAgICAnX19nZXRzbGljZV9fJywKKyAgICAgJ19fZ3RfXycsCisgICAgICdfX2hhc2hfXycsCisgICAgICdfX2lhZGRfXycsCisgICAgICdfX2ltdWxfXycsCisgICAgICdfX2luaXRfXycsCisgICAgICdfX2l0ZXJfXycsCisgICAgICdfX2xlX18nLAorICAgICAnX19sZW5fXycsCisgICAgICdfX2x0X18nLAorICAgICAnX19tdWxfXycsCisgICAgICdfX25lX18nLAorICAgICAnX19uZXdfXycsCisgICAgICdfX3JlZHVjZV9fJywKKyAgICAgJ19fcmVkdWNlX2V4X18nLAorICAgICAnX19yZXByX18nLAorICAgICAnX19yZXZlcnNlZF9fJywKKyAgICAgJ19fcm11bF9fJywKKyAgICAgJ19fc2V0YXR0cl9fJywKKyAgICAgJ19fc2V0aXRlbV9fJywKKyAgICAgJ19fc2V0c2xpY2VfXycsCisgICAgICdfX3NpemVvZl9fJywKKyAgICAgJ19fc3RyX18nLAorICAgICAnX19zdWJjbGFzc2hvb2tfXycsCisgICAgICdhcHBlbmQnLAorICAgICAnY291bnQnLAorICAgICAnZXh0ZW5kJywKKyAgICAgJ2luZGV4JywKKyAgICAgJ2luc2VydCcsCisgICAgICdwb3AnLAorICAgICAncmVtb3ZlJywKKyAgICAgJ3JldmVyc2UnLAorICAgICAnc29ydCddCisKK1RoZSBuZXcgaW50cm9zcGVjdGlvbiBBUEkgZ2l2ZXMgbW9yZSBpbmZvcm1hdGlvbiB0aGFuIHRoZSBvbGQgb25lOiAgaW4KK2FkZGl0aW9uIHRvIHRoZSByZWd1bGFyIG1ldGhvZHMsIGl0IGFsc28gc2hvd3MgdGhlIG1ldGhvZHMgdGhhdCBhcmUKK25vcm1hbGx5IGludm9rZWQgdGhyb3VnaCBzcGVjaWFsIG5vdGF0aW9ucywgZS5nLiBfX2lhZGRfXyAoKz0pLCBfX2xlbl9fCisobGVuKSwgX19uZV9fICghPSkuIFlvdSBjYW4gaW52b2tlIGFueSBtZXRob2QgZnJvbSB0aGlzIGxpc3QgZGlyZWN0bHk6CisKKyAgICA+Pj4gYSA9IFsndGljJywgJ3RhYyddCisgICAgPj4+IGxpc3QuX19sZW5fXyhhKSAgICAgICAgICAjIHNhbWUgYXMgbGVuKGEpCisgICAgMgorICAgID4+PiBhLl9fbGVuX18oKSAgICAgICAgICAgICAgIyBkaXR0bworICAgIDIKKyAgICA+Pj4gbGlzdC5hcHBlbmQoYSwgJ3RvZScpICAgICMgc2FtZSBhcyBhLmFwcGVuZCgndG9lJykKKyAgICA+Pj4gYQorICAgIFsndGljJywgJ3RhYycsICd0b2UnXQorICAgID4+PgorCitUaGlzIGlzIGp1c3QgbGlrZSBpdCBpcyBmb3IgdXNlci1kZWZpbmVkIGNsYXNzZXMuCisiIiIKKwordGVzdF80ID0gIiIiCisKK1N0YXRpYyBtZXRob2RzIGFuZCBjbGFzcyBtZXRob2RzCisKK1RoZSBuZXcgaW50cm9zcGVjdGlvbiBBUEkgbWFrZXMgaXQgcG9zc2libGUgdG8gYWRkIHN0YXRpYyBtZXRob2RzIGFuZCBjbGFzcworbWV0aG9kcy4gU3RhdGljIG1ldGhvZHMgYXJlIGVhc3kgdG8gZGVzY3JpYmU6IHRoZXkgYmVoYXZlIHByZXR0eSBtdWNoIGxpa2UKK3N0YXRpYyBtZXRob2RzIGluIEMrKyBvciBKYXZhLiBIZXJlJ3MgYW4gZXhhbXBsZToKKworICAgID4+PiBjbGFzcyBDOgorICAgIC4uLgorICAgIC4uLiAgICAgQHN0YXRpY21ldGhvZAorICAgIC4uLiAgICAgZGVmIGZvbyh4LCB5KToKKyAgICAuLi4gICAgICAgICBwcmludCAic3RhdGljbWV0aG9kIiwgeCwgeQorCisgICAgPj4+IEMuZm9vKDEsIDIpCisgICAgc3RhdGljbWV0aG9kIDEgMgorICAgID4+PiBjID0gQygpCisgICAgPj4+IGMuZm9vKDEsIDIpCisgICAgc3RhdGljbWV0aG9kIDEgMgorCitDbGFzcyBtZXRob2RzIHVzZSBhIHNpbWlsYXIgcGF0dGVybiB0byBkZWNsYXJlIG1ldGhvZHMgdGhhdCByZWNlaXZlIGFuCitpbXBsaWNpdCBmaXJzdCBhcmd1bWVudCB0aGF0IGlzIHRoZSAqY2xhc3MqIGZvciB3aGljaCB0aGV5IGFyZSBpbnZva2VkLgorCisgICAgPj4+IGNsYXNzIEM6CisgICAgLi4uICAgICBAY2xhc3NtZXRob2QKKyAgICAuLi4gICAgIGRlZiBmb28oY2xzLCB5KToKKyAgICAuLi4gICAgICAgICBwcmludCAiY2xhc3NtZXRob2QiLCBjbHMsIHkKKworICAgID4+PiBDLmZvbygxKQorICAgIGNsYXNzbWV0aG9kIHRlc3QudGVzdF9kZXNjcnR1dC5DIDEKKyAgICA+Pj4gYyA9IEMoKQorICAgID4+PiBjLmZvbygxKQorICAgIGNsYXNzbWV0aG9kIHRlc3QudGVzdF9kZXNjcnR1dC5DIDEKKworICAgID4+PiBjbGFzcyBEKEMpOgorICAgIC4uLiAgICAgcGFzcworCisgICAgPj4+IEQuZm9vKDEpCisgICAgY2xhc3NtZXRob2QgdGVzdC50ZXN0X2Rlc2NydHV0LkQgMQorICAgID4+PiBkID0gRCgpCisgICAgPj4+IGQuZm9vKDEpCisgICAgY2xhc3NtZXRob2QgdGVzdC50ZXN0X2Rlc2NydHV0LkQgMQorCitUaGlzIHByaW50cyAiY2xhc3NtZXRob2QgX19tYWluX18uRCAxIiBib3RoIHRpbWVzOyBpbiBvdGhlciB3b3JkcywgdGhlCitjbGFzcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIGZvbygpIGlzIHRoZSBjbGFzcyBpbnZvbHZlZCBpbiB0aGUKK2NhbGwsIG5vdCB0aGUgY2xhc3MgaW52b2x2ZWQgaW4gdGhlIGRlZmluaXRpb24gb2YgZm9vKCkuCisKK0J1dCBub3RpY2UgdGhpczoKKworICAgID4+PiBjbGFzcyBFKEMpOgorICAgIC4uLiAgICAgQGNsYXNzbWV0aG9kCisgICAgLi4uICAgICBkZWYgZm9vKGNscywgeSk6ICMgb3ZlcnJpZGUgQy5mb28KKyAgICAuLi4gICAgICAgICBwcmludCAiRS5mb28oKSBjYWxsZWQiCisgICAgLi4uICAgICAgICAgQy5mb28oeSkKKworICAgID4+PiBFLmZvbygxKQorICAgIEUuZm9vKCkgY2FsbGVkCisgICAgY2xhc3NtZXRob2QgdGVzdC50ZXN0X2Rlc2NydHV0LkMgMQorICAgID4+PiBlID0gRSgpCisgICAgPj4+IGUuZm9vKDEpCisgICAgRS5mb28oKSBjYWxsZWQKKyAgICBjbGFzc21ldGhvZCB0ZXN0LnRlc3RfZGVzY3J0dXQuQyAxCisKK0luIHRoaXMgZXhhbXBsZSwgdGhlIGNhbGwgdG8gQy5mb28oKSBmcm9tIEUuZm9vKCkgd2lsbCBzZWUgY2xhc3MgQyBhcyBpdHMKK2ZpcnN0IGFyZ3VtZW50LCBub3QgY2xhc3MgRS4gVGhpcyBpcyB0byBiZSBleHBlY3RlZCwgc2luY2UgdGhlIGNhbGwKK3NwZWNpZmllcyB0aGUgY2xhc3MgQy4gQnV0IGl0IHN0cmVzc2VzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlc2UgY2xhc3MKK21ldGhvZHMgYW5kIG1ldGhvZHMgZGVmaW5lZCBpbiBtZXRhY2xhc3NlcyAod2hlcmUgYW4gdXBjYWxsIHRvIGEgbWV0YW1ldGhvZAord291bGQgcGFzcyB0aGUgdGFyZ2V0IGNsYXNzIGFzIGFuIGV4cGxpY2l0IGZpcnN0IGFyZ3VtZW50KS4KKyIiIgorCit0ZXN0XzUgPSAiIiIKKworQXR0cmlidXRlcyBkZWZpbmVkIGJ5IGdldC9zZXQgbWV0aG9kcworCisKKyAgICA+Pj4gY2xhc3MgcHJvcGVydHkob2JqZWN0KToKKyAgICAuLi4KKyAgICAuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnZXQsIHNldD1Ob25lKToKKyAgICAuLi4gICAgICAgICBzZWxmLl9fZ2V0ID0gZ2V0CisgICAgLi4uICAgICAgICAgc2VsZi5fX3NldCA9IHNldAorICAgIC4uLgorICAgIC4uLiAgICAgZGVmIF9fZ2V0X18oc2VsZiwgaW5zdCwgdHlwZT1Ob25lKToKKyAgICAuLi4gICAgICAgICByZXR1cm4gc2VsZi5fX2dldChpbnN0KQorICAgIC4uLgorICAgIC4uLiAgICAgZGVmIF9fc2V0X18oc2VsZiwgaW5zdCwgdmFsdWUpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19zZXQgaXMgTm9uZToKKyAgICAuLi4gICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IsICJ0aGlzIGF0dHJpYnV0ZSBpcyByZWFkLW9ubHkiCisgICAgLi4uICAgICAgICAgcmV0dXJuIHNlbGYuX19zZXQoaW5zdCwgdmFsdWUpCisKK05vdyBsZXQncyBkZWZpbmUgYSBjbGFzcyB3aXRoIGFuIGF0dHJpYnV0ZSB4IGRlZmluZWQgYnkgYSBwYWlyIG9mIG1ldGhvZHMsCitnZXR4KCkgYW5kIHNldHgoKToKKworICAgID4+PiBjbGFzcyBDKG9iamVjdCk6CisgICAgLi4uCisgICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgLi4uICAgICAgICAgc2VsZi5fX3ggPSAwCisgICAgLi4uCisgICAgLi4uICAgICBkZWYgZ2V0eChzZWxmKToKKyAgICAuLi4gICAgICAgICByZXR1cm4gc2VsZi5fX3gKKyAgICAuLi4KKyAgICAuLi4gICAgIGRlZiBzZXR4KHNlbGYsIHgpOgorICAgIC4uLiAgICAgICAgIGlmIHggPCAwOiB4ID0gMAorICAgIC4uLiAgICAgICAgIHNlbGYuX194ID0geAorICAgIC4uLgorICAgIC4uLiAgICAgeCA9IHByb3BlcnR5KGdldHgsIHNldHgpCisKK0hlcmUncyBhIHNtYWxsIGRlbW9uc3RyYXRpb246CisKKyAgICA+Pj4gYSA9IEMoKQorICAgID4+PiBhLnggPSAxMAorICAgID4+PiBwcmludCBhLngKKyAgICAxMAorICAgID4+PiBhLnggPSAtMTAKKyAgICA+Pj4gcHJpbnQgYS54CisgICAgMAorICAgID4+PgorCitIbW0gLS0gcHJvcGVydHkgaXMgYnVpbHRpbiBub3csIHNvIGxldCdzIHRyeSBpdCB0aGF0IHdheSB0b28uCisKKyAgICA+Pj4gZGVsIHByb3BlcnR5ICAjIHVubWFzayB0aGUgYnVpbHRpbgorICAgID4+PiBwcm9wZXJ0eQorICAgIDx0eXBlICdwcm9wZXJ0eSc+CisKKyAgICA+Pj4gY2xhc3MgQyhvYmplY3QpOgorICAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIC4uLiAgICAgICAgIHNlbGYuX194ID0gMAorICAgIC4uLiAgICAgZGVmIGdldHgoc2VsZik6CisgICAgLi4uICAgICAgICAgcmV0dXJuIHNlbGYuX194CisgICAgLi4uICAgICBkZWYgc2V0eChzZWxmLCB4KToKKyAgICAuLi4gICAgICAgICBpZiB4IDwgMDogeCA9IDAKKyAgICAuLi4gICAgICAgICBzZWxmLl9feCA9IHgKKyAgICAuLi4gICAgIHggPSBwcm9wZXJ0eShnZXR4LCBzZXR4KQorCisKKyAgICA+Pj4gYSA9IEMoKQorICAgID4+PiBhLnggPSAxMAorICAgID4+PiBwcmludCBhLngKKyAgICAxMAorICAgID4+PiBhLnggPSAtMTAKKyAgICA+Pj4gcHJpbnQgYS54CisgICAgMAorICAgID4+PgorIiIiCisKK3Rlc3RfNiA9ICIiIgorCitNZXRob2QgcmVzb2x1dGlvbiBvcmRlcgorCitUaGlzIGV4YW1wbGUgaXMgaW1wbGljaXQgaW4gdGhlIHdyaXRldXAuCisKKz4+PiBjbGFzcyBBOiAgICAjIGNsYXNzaWMgY2xhc3MKKy4uLiAgICAgZGVmIHNhdmUoc2VsZik6CisuLi4gICAgICAgICBwcmludCAiY2FsbGVkIEEuc2F2ZSgpIgorPj4+IGNsYXNzIEIoQSk6CisuLi4gICAgIHBhc3MKKz4+PiBjbGFzcyBDKEEpOgorLi4uICAgICBkZWYgc2F2ZShzZWxmKToKKy4uLiAgICAgICAgIHByaW50ICJjYWxsZWQgQy5zYXZlKCkiCis+Pj4gY2xhc3MgRChCLCBDKToKKy4uLiAgICAgcGFzcworCis+Pj4gRCgpLnNhdmUoKQorY2FsbGVkIEEuc2F2ZSgpCisKKz4+PiBjbGFzcyBBKG9iamVjdCk6ICAjIG5ldyBjbGFzcworLi4uICAgICBkZWYgc2F2ZShzZWxmKToKKy4uLiAgICAgICAgIHByaW50ICJjYWxsZWQgQS5zYXZlKCkiCis+Pj4gY2xhc3MgQihBKToKKy4uLiAgICAgcGFzcworPj4+IGNsYXNzIEMoQSk6CisuLi4gICAgIGRlZiBzYXZlKHNlbGYpOgorLi4uICAgICAgICAgcHJpbnQgImNhbGxlZCBDLnNhdmUoKSIKKz4+PiBjbGFzcyBEKEIsIEMpOgorLi4uICAgICBwYXNzCisKKz4+PiBEKCkuc2F2ZSgpCitjYWxsZWQgQy5zYXZlKCkKKyIiIgorCitjbGFzcyBBKG9iamVjdCk6CisgICAgZGVmIG0oc2VsZik6CisgICAgICAgIHJldHVybiAiQSIKKworY2xhc3MgQihBKToKKyAgICBkZWYgbShzZWxmKToKKyAgICAgICAgcmV0dXJuICJCIiArIHN1cGVyKEIsIHNlbGYpLm0oKQorCitjbGFzcyBDKEEpOgorICAgIGRlZiBtKHNlbGYpOgorICAgICAgICByZXR1cm4gIkMiICsgc3VwZXIoQywgc2VsZikubSgpCisKK2NsYXNzIEQoQywgQik6CisgICAgZGVmIG0oc2VsZik6CisgICAgICAgIHJldHVybiAiRCIgKyBzdXBlcihELCBzZWxmKS5tKCkKKworCit0ZXN0XzcgPSAiIiIKKworQ29vcGVyYXRpdmUgbWV0aG9kcyBhbmQgInN1cGVyIgorCis+Pj4gcHJpbnQgRCgpLm0oKSAjICJEQ0JBIgorRENCQQorIiIiCisKK3Rlc3RfOCA9ICIiIgorCitCYWNrd2FyZHMgaW5jb21wYXRpYmlsaXRpZXMKKworPj4+IGNsYXNzIEE6CisuLi4gICAgIGRlZiBmb28oc2VsZik6CisuLi4gICAgICAgICBwcmludCAiY2FsbGVkIEEuZm9vKCkiCisKKz4+PiBjbGFzcyBCKEEpOgorLi4uICAgICBwYXNzCisKKz4+PiBjbGFzcyBDKEEpOgorLi4uICAgICBkZWYgZm9vKHNlbGYpOgorLi4uICAgICAgICAgQi5mb28oc2VsZikKKworPj4+IEMoKS5mb28oKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorIC4uLgorVHlwZUVycm9yOiB1bmJvdW5kIG1ldGhvZCBmb28oKSBtdXN0IGJlIGNhbGxlZCB3aXRoIEIgaW5zdGFuY2UgYXMgZmlyc3QgYXJndW1lbnQgKGdvdCBDIGluc3RhbmNlIGluc3RlYWQpCisKKz4+PiBjbGFzcyBDKEEpOgorLi4uICAgICBkZWYgZm9vKHNlbGYpOgorLi4uICAgICAgICAgQS5mb28oc2VsZikKKz4+PiBDKCkuZm9vKCkKK2NhbGxlZCBBLmZvbygpCisiIiIKKworX190ZXN0X18gPSB7InR1dDEiOiB0ZXN0XzEsCisgICAgICAgICAgICAidHV0MiI6IHRlc3RfMiwKKyAgICAgICAgICAgICJ0dXQzIjogdGVzdF8zLAorICAgICAgICAgICAgInR1dDQiOiB0ZXN0XzQsCisgICAgICAgICAgICAidHV0NSI6IHRlc3RfNSwKKyAgICAgICAgICAgICJ0dXQ2IjogdGVzdF82LAorICAgICAgICAgICAgInR1dDciOiB0ZXN0XzcsCisgICAgICAgICAgICAidHV0OCI6IHRlc3RfOH0KKworIyBNYWdpYyB0ZXN0IG5hbWUgdGhhdCByZWdydGVzdC5weSBpbnZva2VzICphZnRlciogaW1wb3J0aW5nIHRoaXMgbW9kdWxlLgorIyBUaGlzIHdvcm1zIGFyb3VuZCBhIGJvb3RzdHJhcCBwcm9ibGVtLgorIyBOb3RlIHRoYXQgZG9jdGVzdCBhbmQgcmVncnRlc3QgYm90aCBsb29rIGluIHN5cy5hcmd2IGZvciBhICItdiIgYXJndW1lbnQsCisjIHNvIHRoaXMgd29ya3MgYXMgZXhwZWN0ZWQgaW4gYm90aCB3YXlzIG9mIHJ1bm5pbmcgcmVncnRlc3QuCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgIyBPYnNjdXJlOiAgaW1wb3J0IHRoaXMgbW9kdWxlIGFzIHRlc3QudGVzdF9kZXNjcnR1dCBpbnN0ZWFkIG9mIGFzCisgICAgIyBwbGFpbiB0ZXN0X2Rlc2NydHV0IGJlY2F1c2UgdGhlIG5hbWUgb2YgdGhpcyBtb2R1bGUgd29ya3MgaXRzIHdheQorICAgICMgaW50byB0aGUgZG9jdGVzdCBleGFtcGxlcywgYW5kIHVubGVzcyB0aGUgZnVsbCB0ZXN0LnRlc3RfZGVzY3J0dXQKKyAgICAjIGJ1c2luZXNzIGlzIHVzZWQgdGhlIG5hbWUgY2FuIGNoYW5nZSBkZXBlbmRpbmcgb24gaG93IHRoZSB0ZXN0IGlzCisgICAgIyBpbnZva2VkLgorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCB0ZXN0X2Rlc2NydHV0CisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfZGVzY3J0dXQsIHZlcmJvc2UpCisKKyMgVGhpcyBwYXJ0IGlzbid0IG5lZWRlZCBmb3IgcmVncnRlc3QsIGJ1dCBmb3IgcnVubmluZyB0aGUgdGVzdCBkaXJlY3RseS4KK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKDEpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kaWN0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGljdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODQwZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGljdC5weQpAQCAtMCwwICsxLDcwNCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitpbXBvcnQgVXNlckRpY3QsIHJhbmRvbSwgc3RyaW5nCitpbXBvcnQgZ2MsIHdlYWtyZWYKKworCitjbGFzcyBEaWN0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgICMgY2FsbGluZyBidWlsdC1pbiB0eXBlcyB3aXRob3V0IGFyZ3VtZW50IG11c3QgcmV0dXJuIGVtcHR5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdCgpLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkaWN0KCksIHt9KQorCisgICAgZGVmIHRlc3RfbGl0ZXJhbF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgIyBjaGVjayBsaXRlcmFsIGNvbnN0cnVjdG9yIGZvciBkaWZmZXJlbnQgc2l6ZWQgZGljdHMKKyAgICAgICAgIyAodG8gZXhlcmNpc2UgdGhlIEJVSUxEX01BUCBvcGFyZykuCisgICAgICAgIGZvciBuIGluICgwLCAxLCA2LCAyNTYsIDQwMCk6CisgICAgICAgICAgICBpdGVtcyA9IFsoJycuam9pbihyYW5kb20uc2FtcGxlKHN0cmluZy5sZXR0ZXJzLCA4KSksIGkpCisgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShuKV0KKyAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKGl0ZW1zKQorICAgICAgICAgICAgZm9ybWF0dGVkX2l0ZW1zID0gKCd7IXJ9OiB7OmR9Jy5mb3JtYXQoaywgdikgZm9yIGssIHYgaW4gaXRlbXMpCisgICAgICAgICAgICBkaWN0bGl0ZXJhbCA9ICd7JyArICcsICcuam9pbihmb3JtYXR0ZWRfaXRlbXMpICsgJ30nCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoZGljdGxpdGVyYWwpLCBkaWN0KGl0ZW1zKSkKKworICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMobm90IHt9LCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoezE6IDJ9KQorICAgICAgICBzZWxmLmFzc2VydElzKGJvb2woe30pLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKHsxOiAyfSksIFRydWUpCisKKyAgICBkZWYgdGVzdF9rZXlzKHNlbGYpOgorICAgICAgICBkID0ge30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmtleXMoKSwgW10pCisgICAgICAgIGQgPSB7J2EnOiAxLCAnYic6IDJ9CisgICAgICAgIGsgPSBkLmtleXMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5oYXNfa2V5KCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmhhc19rZXkoJ2InKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQua2V5cywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgZCA9IHt9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC52YWx1ZXMoKSwgW10pCisgICAgICAgIGQgPSB7MToyfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQudmFsdWVzKCksIFsyXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQudmFsdWVzLCBOb25lKQorCisgICAgZGVmIHRlc3RfaXRlbXMoc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXRlbXMoKSwgW10pCisKKyAgICAgICAgZCA9IHsxOjJ9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pdGVtcygpLCBbKDEsIDIpXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuaXRlbXMsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9oYXNfa2V5KHNlbGYpOgorICAgICAgICBkID0ge30KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkLmhhc19rZXkoJ2EnKSkKKyAgICAgICAgZCA9IHsnYSc6IDEsICdiJzogMn0KKyAgICAgICAgayA9IGQua2V5cygpCisgICAgICAgIGsuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgWydhJywgJ2InXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuaGFzX2tleSkKKworICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgorICAgICAgICBkID0ge30KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYScsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ2EnIGluIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYScgbm90IGluIGQpCisgICAgICAgIGQgPSB7J2EnOiAxLCAnYic6IDJ9CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCBkKQorICAgICAgICBzZWxmLmFzc2VydEluKCdiJywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYycsIGQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLl9fY29udGFpbnNfXykKKworICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgZCA9IHt9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAwKQorICAgICAgICBkID0geydhJzogMSwgJ2InOiAyfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMikKKworICAgIGRlZiB0ZXN0X2dldGl0ZW0oc2VsZik6CisgICAgICAgIGQgPSB7J2EnOiAxLCAnYic6IDJ9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2InXSwgMikKKyAgICAgICAgZFsnYyddID0gMworICAgICAgICBkWydhJ10gPSA0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYyddLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgNCkKKyAgICAgICAgZGVsIGRbJ2InXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsnYSc6IDQsICdjJzogM30pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLl9fZ2V0aXRlbV9fKQorCisgICAgICAgIGNsYXNzIEJhZEVxKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAyNAorCisgICAgICAgIGQgPSB7fQorICAgICAgICBkW0JhZEVxKCldID0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQuX19nZXRpdGVtX18sIDIzKQorCisgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOiBwYXNzCisKKyAgICAgICAgY2xhc3MgQmFkSGFzaChvYmplY3QpOgorICAgICAgICAgICAgZmFpbCA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5mYWlsOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIHggPSBCYWRIYXNoKCkKKyAgICAgICAgZFt4XSA9IDQyCisgICAgICAgIHguZmFpbCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBkLl9fZ2V0aXRlbV9fLCB4KQorCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIGQgPSB7MToxLCAyOjIsIDM6M30KKyAgICAgICAgZC5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwge30pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLmNsZWFyLCBOb25lKQorCisgICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgorICAgICAgICBkID0ge30KKyAgICAgICAgZC51cGRhdGUoezE6MTAwfSkKKyAgICAgICAgZC51cGRhdGUoezI6MjB9KQorICAgICAgICBkLnVwZGF0ZSh7MToxLCAyOjIsIDM6M30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgezE6MSwgMjoyLCAzOjN9KQorCisgICAgICAgIGQudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7MToxLCAyOjIsIDM6M30pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpLCBkLnVwZGF0ZSwgTm9uZSkKKworICAgICAgICBjbGFzcyBTaW1wbGVVc2VyRGljdDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmQgPSB7MToxLCAyOjIsIDM6M30KKyAgICAgICAgICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmQua2V5cygpCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZFtpXQorICAgICAgICBkLmNsZWFyKCkKKyAgICAgICAgZC51cGRhdGUoU2ltcGxlVXNlckRpY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7MToxLCAyOjIsIDM6M30pCisKKyAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6IHBhc3MKKworICAgICAgICBkLmNsZWFyKCkKKyAgICAgICAgY2xhc3MgRmFpbGluZ1VzZXJEaWN0OgorICAgICAgICAgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgZC51cGRhdGUsIEZhaWxpbmdVc2VyRGljdCgpKQorCisgICAgICAgIGNsYXNzIEZhaWxpbmdVc2VyRGljdDoKKyAgICAgICAgICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICAgICAgICAgIGNsYXNzIEJvZ29uSXRlcjoKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pID0gMQorICAgICAgICAgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgICAgICAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuaToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmkgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdhJworICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjCisgICAgICAgICAgICAgICAgcmV0dXJuIEJvZ29uSXRlcigpCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4ga2V5CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgZC51cGRhdGUsIEZhaWxpbmdVc2VyRGljdCgpKQorCisgICAgICAgIGNsYXNzIEZhaWxpbmdVc2VyRGljdDoKKyAgICAgICAgICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICAgICAgICAgIGNsYXNzIEJvZ29uSXRlcjoKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pID0gb3JkKCdhJykKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgICAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmkgPD0gb3JkKCd6Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRuID0gY2hyKHNlbGYuaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmkgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBydG4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgICAgICByZXR1cm4gQm9nb25JdGVyKCkKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4YworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGQudXBkYXRlLCBGYWlsaW5nVXNlckRpY3QoKSkKKworICAgICAgICBjbGFzcyBiYWRzZXEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIHt9LnVwZGF0ZSwgYmFkc2VxKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwge30udXBkYXRlLCBbKDEsIDIsIDMpXSkKKworICAgIGRlZiB0ZXN0X2Zyb21rZXlzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QuZnJvbWtleXMoJ2FiYycpLCB7J2EnOk5vbmUsICdiJzpOb25lLCAnYyc6Tm9uZX0pCisgICAgICAgIGQgPSB7fQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGQuZnJvbWtleXMoJ2FiYycpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZnJvbWtleXMoJ2FiYycpLCB7J2EnOk5vbmUsICdiJzpOb25lLCAnYyc6Tm9uZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mcm9ta2V5cygoNCw1KSwwKSwgezQ6MCwgNTowfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZyb21rZXlzKFtdKSwge30pCisgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICB5aWVsZCAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mcm9ta2V5cyhnKCkpLCB7MTpOb25lfSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB7fS5mcm9ta2V5cywgMykKKyAgICAgICAgY2xhc3MgZGljdGxpa2UoZGljdCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0bGlrZS5mcm9ta2V5cygnYScpLCB7J2EnOk5vbmV9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3RsaWtlKCkuZnJvbWtleXMoJ2EnKSwgeydhJzpOb25lfSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRpY3RsaWtlLmZyb21rZXlzKCdhJyksIGRpY3RsaWtlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGljdGxpa2UoKS5mcm9ta2V5cygnYScpLCBkaWN0bGlrZSkKKyAgICAgICAgY2xhc3MgbXlkaWN0KGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVXNlckRpY3QuVXNlckRpY3QoKQorICAgICAgICB1ZCA9IG15ZGljdC5mcm9ta2V5cygnYWInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVkLCB7J2EnOk5vbmUsICdiJzpOb25lfSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHVkLCBVc2VyRGljdC5Vc2VyRGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaWN0LmZyb21rZXlzKQorCisgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOiBwYXNzCisKKyAgICAgICAgY2xhc3MgYmFkZGljdDEoZGljdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGJhZGRpY3QxLmZyb21rZXlzLCBbMV0pCisKKyAgICAgICAgY2xhc3MgQmFkU2VxKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4YygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBkaWN0LmZyb21rZXlzLCBCYWRTZXEoKSkKKworICAgICAgICBjbGFzcyBiYWRkaWN0MihkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4YywgYmFkZGljdDIuZnJvbWtleXMsIFsxXSkKKworICAgICAgICAjIHRlc3QgZmFzdCBwYXRoIGZvciBkaWN0aW9uYXJ5IGlucHV0cworICAgICAgICBkID0gZGljdCh6aXAocmFuZ2UoNiksIHJhbmdlKDYpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0LmZyb21rZXlzKGQsIDApLCBkaWN0KHppcChyYW5nZSg2KSwgWzBdKjYpKSkKKworICAgICAgICBjbGFzcyBiYWRkaWN0MyhkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGQKKyAgICAgICAgZCA9IHtpIDogaSBmb3IgaSBpbiByYW5nZSgxMCl9CisgICAgICAgIHJlcyA9IGQuY29weSgpCisgICAgICAgIHJlcy51cGRhdGUoYT1Ob25lLCBiPU5vbmUsIGM9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWRkaWN0My5mcm9ta2V5cyh7ImEiLCAiYiIsICJjIn0pLCByZXMpCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBkID0gezE6MSwgMjoyLCAzOjN9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jb3B5KCksIHsxOjEsIDI6MiwgMzozfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7fS5jb3B5KCksIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuY29weSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2dldChzZWxmKToKKyAgICAgICAgZCA9IHt9CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZC5nZXQoJ2MnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnYycsIDMpLCAzKQorICAgICAgICBkID0geydhJzogMSwgJ2InOiAyfQorICAgICAgICBzZWxmLmFzc2VydElzKGQuZ2V0KCdjJyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ2MnLCAzKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnYScpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdhJywgMyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5nZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5nZXQsIE5vbmUsIE5vbmUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zZXRkZWZhdWx0KHNlbGYpOgorICAgICAgICAjIGRpY3Quc2V0ZGVmYXVsdCgpCisgICAgICAgIGQgPSB7fQorICAgICAgICBzZWxmLmFzc2VydElzKGQuc2V0ZGVmYXVsdCgna2V5MCcpLCBOb25lKQorICAgICAgICBkLnNldGRlZmF1bHQoJ2tleTAnLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkLnNldGRlZmF1bHQoJ2tleTAnKSwgTm9uZSkKKyAgICAgICAgZC5zZXRkZWZhdWx0KCdrZXknLCBbXSkuYXBwZW5kKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsna2V5J11bMF0sIDMpCisgICAgICAgIGQuc2V0ZGVmYXVsdCgna2V5JywgW10pLmFwcGVuZCg0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkWydrZXknXSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5zZXRkZWZhdWx0KQorCisgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOiBwYXNzCisKKyAgICAgICAgY2xhc3MgQmFkSGFzaChvYmplY3QpOgorICAgICAgICAgICAgZmFpbCA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5mYWlsOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIHggPSBCYWRIYXNoKCkKKyAgICAgICAgZFt4XSA9IDQyCisgICAgICAgIHguZmFpbCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBkLnNldGRlZmF1bHQsIHgsIFtdKQorCisgICAgZGVmIHRlc3Rfc2V0ZGVmYXVsdF9hdG9taWMoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEzNTIxOiBzZXRkZWZhdWx0KCkgY2FsbHMgX19oYXNoX18gYW5kIF9fZXFfXyBvbmx5IG9uY2UuCisgICAgICAgIGNsYXNzIEhhc2hlZChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuaGFzaF9jb3VudCA9IDAKKyAgICAgICAgICAgICAgICBzZWxmLmVxX2NvdW50ID0gMAorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuaGFzaF9jb3VudCArPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBzZWxmLmVxX2NvdW50ICs9IDEKKyAgICAgICAgICAgICAgICByZXR1cm4gaWQoc2VsZikgPT0gaWQob3RoZXIpCisgICAgICAgIGhhc2hlZDEgPSBIYXNoZWQoKQorICAgICAgICB5ID0ge2hhc2hlZDE6IDV9CisgICAgICAgIGhhc2hlZDIgPSBIYXNoZWQoKQorICAgICAgICB5LnNldGRlZmF1bHQoaGFzaGVkMiwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaGVkMS5oYXNoX2NvdW50LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2hlZDIuaGFzaF9jb3VudCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoZWQxLmVxX2NvdW50ICsgaGFzaGVkMi5lcV9jb3VudCwgMSkKKworICAgIGRlZiB0ZXN0X3BvcGl0ZW0oc2VsZik6CisgICAgICAgICMgZGljdC5wb3BpdGVtKCkKKyAgICAgICAgZm9yIGNvcHltb2RlIGluIC0xLCArMToKKyAgICAgICAgICAgICMgLTE6IGIgaGFzIHNhbWUgc3RydWN0dXJlIGFzIGEKKyAgICAgICAgICAgICMgKzE6IGIgaXMgYS5jb3B5KCkKKyAgICAgICAgICAgIGZvciBsb2cyc2l6ZSBpbiByYW5nZSgxMik6CisgICAgICAgICAgICAgICAgc2l6ZSA9IDIqKmxvZzJzaXplCisgICAgICAgICAgICAgICAgYSA9IHt9CisgICAgICAgICAgICAgICAgYiA9IHt9CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2l6ZSk6CisgICAgICAgICAgICAgICAgICAgIGFbcmVwcihpKV0gPSBpCisgICAgICAgICAgICAgICAgICAgIGlmIGNvcHltb2RlIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJbcmVwcihpKV0gPSBpCisgICAgICAgICAgICAgICAgaWYgY29weW1vZGUgPiAwOgorICAgICAgICAgICAgICAgICAgICBiID0gYS5jb3B5KCkKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShzaXplKToKKyAgICAgICAgICAgICAgICAgICAga2EsIHZhID0gdGEgPSBhLnBvcGl0ZW0oKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhLCBpbnQoa2EpKQorICAgICAgICAgICAgICAgICAgICBrYiwgdmIgPSB0YiA9IGIucG9waXRlbSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmIsIGludChrYikpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29weW1vZGUgPCAwIGFuZCB0YSAhPSB0YikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiKQorCisgICAgICAgIGQgPSB7fQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5wb3BpdGVtKQorCisgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgorICAgICAgICAjIFRlc3RzIGZvciBwb3Agd2l0aCBzcGVjaWZpZWQga2V5CisgICAgICAgIGQgPSB7fQorICAgICAgICBrLCB2ID0gJ2FiYycsICdkZWYnCisgICAgICAgIGRba10gPSB2CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkLnBvcCwgJ2doaScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBvcChrKSwgdikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9wLCBrKQorCisgICAgICAgICMgdmVyaWZ5IGxvbmdzL2ludHMgZ2V0IHNhbWUgdmFsdWUgd2hlbiBrZXkgPiAzMiBiaXRzCisgICAgICAgICMgKGZvciA2NC1iaXQgYXJjaHMpLiAgU2VlIFNGIGJ1ZyAjNjg5NjU5LgorICAgICAgICB4ID0gNDUwMzU5OTYyNzM3MDQ5NkwKKyAgICAgICAgeSA9IDQ1MDM1OTk2MjczNzA0OTYKKyAgICAgICAgaCA9IHt4OiAnYW55dGhpbmcnLCB5OiAnc29tZXRoaW5nIGVsc2UnfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhbeF0sIGhbeV0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBvcChrLCB2KSwgdikKKyAgICAgICAgZFtrXSA9IHYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBvcChrLCAxKSwgdikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQucG9wKQorCisgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOiBwYXNzCisKKyAgICAgICAgY2xhc3MgQmFkSGFzaChvYmplY3QpOgorICAgICAgICAgICAgZmFpbCA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5mYWlsOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIHggPSBCYWRIYXNoKCkKKyAgICAgICAgZFt4XSA9IDQyCisgICAgICAgIHguZmFpbCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBkLnBvcCwgeCkKKworICAgIGRlZiB0ZXN0X211dGF0aW5naXRlcmF0aW9uKHNlbGYpOgorICAgICAgICAjIGNoYW5naW5nIGRpY3Qgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uCisgICAgICAgIGQgPSB7fQorICAgICAgICBkWzFdID0gMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBmb3IgaSBpbiBkOgorICAgICAgICAgICAgICAgIGRbaSsxXSA9IDEKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZCksICd7fScpCisgICAgICAgIGRbMV0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihkKSwgJ3sxOiAyfScpCisgICAgICAgIGQgPSB7fQorICAgICAgICBkWzFdID0gZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZCksICd7MTogey4uLn19JykKKworICAgICAgICBjbGFzcyBFeGMoRXhjZXB0aW9uKTogcGFzcworCisgICAgICAgIGNsYXNzIEJhZFJlcHIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorCisgICAgICAgIGQgPSB7MTogQmFkUmVwcigpfQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIHJlcHIsIGQpCisKKyAgICBkZWYgdGVzdF9sZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh7fSA8IHt9KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHsxOiAyfSA8IHsxTDogMkx9KQorCisgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOiBwYXNzCisKKyAgICAgICAgY2xhc3MgQmFkQ21wKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMoKQorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIGQxID0ge0JhZENtcCgpOiAxfQorICAgICAgICBkMiA9IHsxOiAxfQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjKToKKyAgICAgICAgICAgIGQxIDwgZDIKKworICAgIGRlZiB0ZXN0X21pc3Npbmcoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGRpY3QgZG9lc24ndCBoYXZlIGEgX19taXNzaW5nX18gbWV0aG9kCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihkaWN0LCAiX19taXNzaW5nX18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHt9LCAiX19taXNzaW5nX18iKSkKKyAgICAgICAgIyBUZXN0IHNldmVyYWwgY2FzZXM6CisgICAgICAgICMgKEQpIHN1YmNsYXNzIGRlZmluZXMgX19taXNzaW5nX18gbWV0aG9kIHJldHVybmluZyBhIHZhbHVlCisgICAgICAgICMgKEUpIHN1YmNsYXNzIGRlZmluZXMgX19taXNzaW5nX18gbWV0aG9kIHJhaXNpbmcgUnVudGltZUVycm9yCisgICAgICAgICMgKEYpIHN1YmNsYXNzIHNldHMgX19taXNzaW5nX18gaW5zdGFuY2UgdmFyaWFibGUgKG5vIGVmZmVjdCkKKyAgICAgICAgIyAoRykgc3ViY2xhc3MgZG9lc24ndCBkZWZpbmUgX19taXNzaW5nX18gYXQgYSBhbGwKKyAgICAgICAgY2xhc3MgRChkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICBkID0gRCh7MTogMiwgMzogNH0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxXSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzNdLCA0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDIsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMiwgZC5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsyXSwgNDIpCisKKyAgICAgICAgY2xhc3MgRShkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihrZXkpCisgICAgICAgIGUgPSBFKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIGM6CisgICAgICAgICAgICBlWzQyXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZXhjZXB0aW9uLmFyZ3MsICg0MiwpKQorCisgICAgICAgIGNsYXNzIEYoZGljdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgIyBBbiBpbnN0YW5jZSB2YXJpYWJsZSBfX21pc3NpbmdfXyBzaG91bGQgaGF2ZSBubyBlZmZlY3QKKyAgICAgICAgICAgICAgICBzZWxmLl9fbWlzc2luZ19fID0gbGFtYmRhIGtleTogTm9uZQorICAgICAgICBmID0gRigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpIGFzIGM6CisgICAgICAgICAgICBmWzQyXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZXhjZXB0aW9uLmFyZ3MsICg0MiwpKQorCisgICAgICAgIGNsYXNzIEcoZGljdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGcgPSBHKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIGdbNDJdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5leGNlcHRpb24uYXJncywgKDQyLCkpCisKKyAgICBkZWYgdGVzdF90dXBsZV9rZXllcnJvcihzZWxmKToKKyAgICAgICAgIyBTRiAjMTU3NjY1NworICAgICAgICBkID0ge30KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIGRbKDEsKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmV4Y2VwdGlvbi5hcmdzLCAoKDEsKSwpKQorCisgICAgZGVmIHRlc3RfYmFkX2tleShzZWxmKToKKyAgICAgICAgIyBEaWN0aW9uYXJ5IGxvb2t1cHMgc2hvdWxkIGZhaWwgaWYgX19jbXBfXygpIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgICAgIGNsYXNzIEN1c3RvbUV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEJhZERpY3RLZXk6CisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fX2NsYXNzX18pCisKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBzZWxmLl9fY2xhc3NfXyk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEN1c3RvbUV4Y2VwdGlvbgorICAgICAgICAgICAgICAgIHJldHVybiBvdGhlcgorCisgICAgICAgIGQgPSB7fQorICAgICAgICB4MSA9IEJhZERpY3RLZXkoKQorICAgICAgICB4MiA9IEJhZERpY3RLZXkoKQorICAgICAgICBkW3gxXSA9IDEKKyAgICAgICAgZm9yIHN0bXQgaW4gWydkW3gyXSA9IDInLAorICAgICAgICAgICAgICAgICAgICAgJ3ogPSBkW3gyXScsCisgICAgICAgICAgICAgICAgICAgICAneDIgaW4gZCcsCisgICAgICAgICAgICAgICAgICAgICAnZC5oYXNfa2V5KHgyKScsCisgICAgICAgICAgICAgICAgICAgICAnZC5nZXQoeDIpJywKKyAgICAgICAgICAgICAgICAgICAgICdkLnNldGRlZmF1bHQoeDIsIDQyKScsCisgICAgICAgICAgICAgICAgICAgICAnZC5wb3AoeDIpJywKKyAgICAgICAgICAgICAgICAgICAgICdkLnVwZGF0ZSh7eDI6IDJ9KSddOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhDdXN0b21FeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIGV4ZWMgc3RtdCBpbiBsb2NhbHMoKQorCisgICAgZGVmIHRlc3RfcmVzaXplMShzZWxmKToKKyAgICAgICAgIyBEaWN0IHJlc2l6aW5nIGJ1ZywgZm91bmQgYnkgSmFjayBKYW5zZW4gaW4gMi4yIENWUyBkZXZlbG9wbWVudC4KKyAgICAgICAgIyBUaGlzIHZlcnNpb24gZ290IGFuIGFzc2VydCBmYWlsdXJlIGluIGRlYnVnIGJ1aWxkLCBpbmZpbml0ZSBsb29wIGluCisgICAgICAgICMgcmVsZWFzZSBidWlsZC4gIFVuZm9ydHVuYXRlbHksIHByb3Zva2luZyB0aGlzIGtpbmQgb2Ygc3R1ZmYgcmVxdWlyZXMKKyAgICAgICAgIyBhIG1peCBvZiBpbnNlcnRzIGFuZCBkZWxldGVzIGhpdHRpbmcgZXhhY3RseSB0aGUgcmlnaHQgaGFzaCBjb2RlcyBpbgorICAgICAgICAjIGV4YWN0bHkgdGhlIHJpZ2h0IG9yZGVyLCBhbmQgSSBjYW4ndCB0aGluayBvZiBhIHJhbmRvbWl6ZWQgYXBwcm9hY2gKKyAgICAgICAgIyB0aGF0IHdvdWxkIGJlICpsaWtlbHkqIHRvIGhpdCBhIGZhaWxpbmcgY2FzZSBpbiByZWFzb25hYmxlIHRpbWUuCisKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgZFtpXSA9IGkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICBkZWwgZFtpXQorICAgICAgICBmb3IgaSBpbiByYW5nZSg1LCA5KTogICMgaT09OCB3YXMgdGhlIHByb2JsZW0KKyAgICAgICAgICAgIGRbaV0gPSBpCisKKyAgICBkZWYgdGVzdF9yZXNpemUyKHNlbGYpOgorICAgICAgICAjIEFub3RoZXIgZGljdCByZXNpemluZyBidWcgKFNGIGJ1ZyAjMTQ1NjIwOSkuCisgICAgICAgICMgVGhpcyBjYXVzZWQgU2VnbWVudGF0aW9uIGZhdWx0cyBvciBJbGxlZ2FsIGluc3RydWN0aW9ucy4KKworICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIHJlc2l6aW5nOgorICAgICAgICAgICAgICAgICAgICBkLmNsZWFyKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZCA9IHt9CisgICAgICAgIHJlc2l6aW5nID0gRmFsc2UKKyAgICAgICAgZFtYKCldID0gMQorICAgICAgICBkW1goKV0gPSAyCisgICAgICAgIGRbWCgpXSA9IDMKKyAgICAgICAgZFtYKCldID0gNAorICAgICAgICBkW1goKV0gPSA1CisgICAgICAgICMgbm93IHRyaWdnZXIgYSByZXNpemUKKyAgICAgICAgcmVzaXppbmcgPSBUcnVlCisgICAgICAgIGRbOV0gPSA2CisKKyAgICBkZWYgdGVzdF9lbXB0eV9wcmVzaXplZF9kaWN0X2luX2ZyZWVsaXN0KHNlbGYpOgorICAgICAgICAjIEJ1ZyAjMzUzNzogaWYgYW4gZW1wdHkgYnV0IHByZXNpemVkIGRpY3Qgd2l0aCBhIHNpemUgbGFyZ2VyCisgICAgICAgICMgdGhhbiA3IHdhcyBpbiB0aGUgZnJlZWxpc3QsIGl0IHRyaWdnZXJlZCBhbiBhc3NlcnRpb24gZmFpbHVyZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgIGQgPSB7J2EnOiAxIC8vIDAsICdiJzogTm9uZSwgJ2MnOiBOb25lLCAnZCc6IE5vbmUsICdlJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgJ2YnOiBOb25lLCAnZyc6IE5vbmUsICdoJzogTm9uZX0KKyAgICAgICAgZCA9IHt9CisKKyAgICBkZWYgdGVzdF9jb250YWluZXJfaXRlcmF0b3Ioc2VsZik6CisgICAgICAgICMgQnVnICMzNjgwOiB0cF90cmF2ZXJzZSB3YXMgbm90IGltcGxlbWVudGVkIGZvciBkaWN0aXRlciBvYmplY3RzCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaXRlcmF0b3JzID0gKGRpY3QuaXRlcml0ZW1zLCBkaWN0Lml0ZXJ2YWx1ZXMsIGRpY3QuaXRlcmtleXMpCisgICAgICAgIGZvciBpIGluIGl0ZXJhdG9yczoKKyAgICAgICAgICAgIG9iaiA9IEMoKQorICAgICAgICAgICAgcmVmID0gd2Vha3JlZi5yZWYob2JqKQorICAgICAgICAgICAgY29udGFpbmVyID0ge29iajogMX0KKyAgICAgICAgICAgIG9iai54ID0gaShjb250YWluZXIpCisgICAgICAgICAgICBkZWwgb2JqLCBjb250YWluZXIKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWYoKSwgTm9uZSwgIkN5Y2xlIHdhcyBub3QgY29sbGVjdGVkIikKKworICAgIGRlZiBfbm90X3RyYWNrZWQoc2VsZiwgdCk6CisgICAgICAgICMgTmVzdGVkIGNvbnRhaW5lcnMgY2FuIHRha2Ugc2V2ZXJhbCBjb2xsZWN0aW9ucyB0byB1bnRyYWNrCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKHQpLCB0KQorCisgICAgZGVmIF90cmFja2VkKHNlbGYsIHQpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZCh0KSwgdCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZCh0KSwgdCkKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfdHJhY2tfbGl0ZXJhbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBHQy1vcHRpbWl6YXRpb24gb2YgZGljdCBsaXRlcmFscworICAgICAgICB4LCB5LCB6LCB3ID0gMS41LCAiYSIsICgxLCBOb25lKSwgW10KKworICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCh7fSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoe3g6KCksIHk6eCwgejoxfSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoezE6ICJhIiwgImIiOiAyfSkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoezE6IDIsIChOb25lLCBUcnVlLCBGYWxzZSwgKCkpOiBpbnR9KQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCh7MTogb2JqZWN0KCl9KQorCisgICAgICAgICMgRGljdHMgd2l0aCBtdXRhYmxlIGVsZW1lbnRzIGFyZSBhbHdheXMgdHJhY2tlZCwgZXZlbiBpZiB0aG9zZQorICAgICAgICAjIGVsZW1lbnRzIGFyZSBub3QgdHJhY2tlZCByaWdodCBub3cuCisgICAgICAgIHNlbGYuX3RyYWNrZWQoezE6IFtdfSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCh7MTogKFtdLCl9KQorICAgICAgICBzZWxmLl90cmFja2VkKHsxOiB7fX0pCisgICAgICAgIHNlbGYuX3RyYWNrZWQoezE6IHNldCgpfSkKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfdHJhY2tfZHluYW1pYyhzZWxmKToKKyAgICAgICAgIyBUZXN0IEdDLW9wdGltaXphdGlvbiBvZiBkeW5hbWljYWxseS1jcmVhdGVkIGRpY3RzCisgICAgICAgIGNsYXNzIE15T2JqZWN0KG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHgsIHksIHosIHcsIG8gPSAxLjUsICJhIiwgKDEsIG9iamVjdCgpKSwgW10sIE15T2JqZWN0KCkKKworICAgICAgICBkID0gZGljdCgpCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGQpCisgICAgICAgIGRbMV0gPSAiYSIKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgZFt5XSA9IDIKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgZFt6XSA9IDMKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZC5jb3B5KCkpCisgICAgICAgIGRbNF0gPSB3CisgICAgICAgIHNlbGYuX3RyYWNrZWQoZCkKKyAgICAgICAgc2VsZi5fdHJhY2tlZChkLmNvcHkoKSkKKyAgICAgICAgZFs0XSA9IE5vbmUKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZCkKKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQoZC5jb3B5KCkpCisKKyAgICAgICAgIyBkZCBpc24ndCB0cmFja2VkIHJpZ2h0IG5vdywgYnV0IGl0IG1heSBtdXRhdGUgYW5kIHRoZXJlZm9yZSBkCisgICAgICAgICMgd2hpY2ggY29udGFpbnMgaXQgbXVzdCBiZSB0cmFja2VkLgorICAgICAgICBkID0gZGljdCgpCisgICAgICAgIGRkID0gZGljdCgpCisgICAgICAgIGRbMV0gPSBkZAorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkZCkKKyAgICAgICAgc2VsZi5fdHJhY2tlZChkKQorICAgICAgICBkZFsxXSA9IGQKKyAgICAgICAgc2VsZi5fdHJhY2tlZChkZCkKKworICAgICAgICBkID0gZGljdC5mcm9ta2V5cyhbeCwgeSwgel0pCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGQpCisgICAgICAgIGRkID0gZGljdCgpCisgICAgICAgIGRkLnVwZGF0ZShkKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkZCkKKyAgICAgICAgZCA9IGRpY3QuZnJvbWtleXMoW3gsIHksIHosIG9dKQorICAgICAgICBzZWxmLl90cmFja2VkKGQpCisgICAgICAgIGRkID0gZGljdCgpCisgICAgICAgIGRkLnVwZGF0ZShkKQorICAgICAgICBzZWxmLl90cmFja2VkKGRkKQorCisgICAgICAgIGQgPSBkaWN0KHg9eCwgeT15LCB6PXopCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGQpCisgICAgICAgIGQgPSBkaWN0KHg9eCwgeT15LCB6PXosIHc9dykKKyAgICAgICAgc2VsZi5fdHJhY2tlZChkKQorICAgICAgICBkID0gZGljdCgpCisgICAgICAgIGQudXBkYXRlKHg9eCwgeT15LCB6PXopCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGQpCisgICAgICAgIGQudXBkYXRlKHc9dykKKyAgICAgICAgc2VsZi5fdHJhY2tlZChkKQorCisgICAgICAgIGQgPSBkaWN0KFsoeCwgeSksICh6LCAxKV0pCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKGQpCisgICAgICAgIGQgPSBkaWN0KFsoeCwgeSksICh6LCB3KV0pCisgICAgICAgIHNlbGYuX3RyYWNrZWQoZCkKKyAgICAgICAgZCA9IGRpY3QoKQorICAgICAgICBkLnVwZGF0ZShbKHgsIHkpLCAoeiwgMSldKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZChkKQorICAgICAgICBkLnVwZGF0ZShbKHgsIHkpLCAoeiwgdyldKQorICAgICAgICBzZWxmLl90cmFja2VkKGQpCisKKyAgICBAdGVzdF9zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3RyYWNrX3N1YnR5cGVzKHNlbGYpOgorICAgICAgICAjIERpY3Qgc3VidHlwZXMgYXJlIGFsd2F5cyB0cmFja2VkCisgICAgICAgIGNsYXNzIE15RGljdChkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5fdHJhY2tlZChNeURpY3QoKSkKKworCitmcm9tIHRlc3QgaW1wb3J0IG1hcHBpbmdfdGVzdHMKKworY2xhc3MgR2VuZXJhbE1hcHBpbmdUZXN0cyhtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6CisgICAgdHlwZTJ0ZXN0ID0gZGljdAorCitjbGFzcyBEaWN0KGRpY3QpOgorICAgIHBhc3MKKworY2xhc3MgU3ViY2xhc3NNYXBwaW5nVGVzdHMobWFwcGluZ190ZXN0cy5CYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wpOgorICAgIHR5cGUydGVzdCA9IERpY3QKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgICAgICgnZGljdCguaGFzX2tleS4ufCBpbmVxdWFsaXR5IGNvbXBhcmlzb25zKSBub3Qgc3VwcG9ydGVkIGluIDMueCcsCisgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgICAgIERpY3RUZXN0LAorICAgICAgICAgICAgR2VuZXJhbE1hcHBpbmdUZXN0cywKKyAgICAgICAgICAgIFN1YmNsYXNzTWFwcGluZ1Rlc3RzLAorICAgICAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RpY3Rjb21wcy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RpY3Rjb21wcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGNiYjJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGljdGNvbXBzLnB5CkBAIC0wLDAgKzEsOTEgQEAKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CisKKyMgRm9yIHNjb3BlIHRlc3RpbmcuCitnID0gIkdsb2JhbCB2YXJpYWJsZSIKKworCitjbGFzcyBEaWN0Q29tcHJlaGVuc2lvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWNzKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IHswOiAxMCwgMTogMTEsIDI6IDEyLCAzOiAxMywgNDogMTQsIDU6IDE1LCA2OiAxNiwgNzogMTcsCisgICAgICAgICAgICAgICAgICAgIDg6IDE4LCA5OiAxOX0KKyAgICAgICAgYWN0dWFsID0ge2s6IGsgKyAxMCBmb3IgayBpbiByYW5nZSgxMCl9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKworICAgICAgICBleHBlY3RlZCA9IHswOiAwLCAxOiAxLCAyOiAyLCAzOiAzLCA0OiA0LCA1OiA1LCA2OiA2LCA3OiA3LCA4OiA4LCA5OiA5fQorICAgICAgICBhY3R1YWwgPSB7azogdiBmb3IgayBpbiByYW5nZSgxMCkgZm9yIHYgaW4gcmFuZ2UoMTApIGlmIGsgPT0gdn0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3Rfc2NvcGVfaXNvbGF0aW9uKHNlbGYpOgorICAgICAgICBrID0gIkxvY2FsIFZhcmlhYmxlIgorCisgICAgICAgIGV4cGVjdGVkID0gezA6IE5vbmUsIDE6IE5vbmUsIDI6IE5vbmUsIDM6IE5vbmUsIDQ6IE5vbmUsIDU6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgIDY6IE5vbmUsIDc6IE5vbmUsIDg6IE5vbmUsIDk6IE5vbmV9CisgICAgICAgIGFjdHVhbCA9IHtrOiBOb25lIGZvciBrIGluIHJhbmdlKDEwKX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssICJMb2NhbCBWYXJpYWJsZSIpCisKKyAgICAgICAgZXhwZWN0ZWQgPSB7OTogMSwgMTg6IDIsIDE5OiAyLCAyNzogMywgMjg6IDMsIDI5OiAzLCAzNjogNCwgMzc6IDQsCisgICAgICAgICAgICAgICAgICAgIDM4OiA0LCAzOTogNCwgNDU6IDUsIDQ2OiA1LCA0NzogNSwgNDg6IDUsIDQ5OiA1LCA1NDogNiwKKyAgICAgICAgICAgICAgICAgICAgNTU6IDYsIDU2OiA2LCA1NzogNiwgNTg6IDYsIDU5OiA2LCA2MzogNywgNjQ6IDcsIDY1OiA3LAorICAgICAgICAgICAgICAgICAgICA2NjogNywgNjc6IDcsIDY4OiA3LCA2OTogNywgNzI6IDgsIDczOiA4LCA3NDogOCwgNzU6IDgsCisgICAgICAgICAgICAgICAgICAgIDc2OiA4LCA3NzogOCwgNzg6IDgsIDc5OiA4LCA4MTogOSwgODI6IDksIDgzOiA5LCA4NDogOSwKKyAgICAgICAgICAgICAgICAgICAgODU6IDksIDg2OiA5LCA4NzogOSwgODg6IDksIDg5OiA5fQorICAgICAgICBhY3R1YWwgPSB7azogdiBmb3IgdiBpbiByYW5nZSgxMCkgZm9yIGsgaW4gcmFuZ2UodiAqIDksIHYgKiAxMCl9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgIkxvY2FsIFZhcmlhYmxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3Rfc2NvcGVfaXNvbGF0aW9uX2Zyb21fZ2xvYmFsKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IHswOiBOb25lLCAxOiBOb25lLCAyOiBOb25lLCAzOiBOb25lLCA0OiBOb25lLCA1OiBOb25lLAorICAgICAgICAgICAgICAgICAgICA2OiBOb25lLCA3OiBOb25lLCA4OiBOb25lLCA5OiBOb25lfQorICAgICAgICBhY3R1YWwgPSB7ZzogTm9uZSBmb3IgZyBpbiByYW5nZSgxMCl9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLCAiR2xvYmFsIHZhcmlhYmxlIikKKworICAgICAgICBleHBlY3RlZCA9IHs5OiAxLCAxODogMiwgMTk6IDIsIDI3OiAzLCAyODogMywgMjk6IDMsIDM2OiA0LCAzNzogNCwKKyAgICAgICAgICAgICAgICAgICAgMzg6IDQsIDM5OiA0LCA0NTogNSwgNDY6IDUsIDQ3OiA1LCA0ODogNSwgNDk6IDUsIDU0OiA2LAorICAgICAgICAgICAgICAgICAgICA1NTogNiwgNTY6IDYsIDU3OiA2LCA1ODogNiwgNTk6IDYsIDYzOiA3LCA2NDogNywgNjU6IDcsCisgICAgICAgICAgICAgICAgICAgIDY2OiA3LCA2NzogNywgNjg6IDcsIDY5OiA3LCA3MjogOCwgNzM6IDgsIDc0OiA4LCA3NTogOCwKKyAgICAgICAgICAgICAgICAgICAgNzY6IDgsIDc3OiA4LCA3ODogOCwgNzk6IDgsIDgxOiA5LCA4MjogOSwgODM6IDksIDg0OiA5LAorICAgICAgICAgICAgICAgICAgICA4NTogOSwgODY6IDksIDg3OiA5LCA4ODogOSwgODk6IDl9CisgICAgICAgIGFjdHVhbCA9IHtnOiB2IGZvciB2IGluIHJhbmdlKDEwKSBmb3IgZyBpbiByYW5nZSh2ICogOSwgdiAqIDEwKX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLCAiR2xvYmFsIHZhcmlhYmxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZ2xvYmFsX3Zpc2liaWxpdHkoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gezA6ICdHbG9iYWwgdmFyaWFibGUnLCAxOiAnR2xvYmFsIHZhcmlhYmxlJywKKyAgICAgICAgICAgICAgICAgICAgMjogJ0dsb2JhbCB2YXJpYWJsZScsIDM6ICdHbG9iYWwgdmFyaWFibGUnLAorICAgICAgICAgICAgICAgICAgICA0OiAnR2xvYmFsIHZhcmlhYmxlJywgNTogJ0dsb2JhbCB2YXJpYWJsZScsCisgICAgICAgICAgICAgICAgICAgIDY6ICdHbG9iYWwgdmFyaWFibGUnLCA3OiAnR2xvYmFsIHZhcmlhYmxlJywKKyAgICAgICAgICAgICAgICAgICAgODogJ0dsb2JhbCB2YXJpYWJsZScsIDk6ICdHbG9iYWwgdmFyaWFibGUnfQorICAgICAgICBhY3R1YWwgPSB7azogZyBmb3IgayBpbiByYW5nZSgxMCl9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2xvY2FsX3Zpc2liaWxpdHkoc2VsZik6CisgICAgICAgIHYgPSAiTG9jYWwgdmFyaWFibGUiCisgICAgICAgIGV4cGVjdGVkID0gezA6ICdMb2NhbCB2YXJpYWJsZScsIDE6ICdMb2NhbCB2YXJpYWJsZScsCisgICAgICAgICAgICAgICAgICAgIDI6ICdMb2NhbCB2YXJpYWJsZScsIDM6ICdMb2NhbCB2YXJpYWJsZScsCisgICAgICAgICAgICAgICAgICAgIDQ6ICdMb2NhbCB2YXJpYWJsZScsIDU6ICdMb2NhbCB2YXJpYWJsZScsCisgICAgICAgICAgICAgICAgICAgIDY6ICdMb2NhbCB2YXJpYWJsZScsIDc6ICdMb2NhbCB2YXJpYWJsZScsCisgICAgICAgICAgICAgICAgICAgIDg6ICdMb2NhbCB2YXJpYWJsZScsIDk6ICdMb2NhbCB2YXJpYWJsZSd9CisgICAgICAgIGFjdHVhbCA9IHtrOiB2IGZvciBrIGluIHJhbmdlKDEwKX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsICJMb2NhbCB2YXJpYWJsZSIpCisKKyAgICBkZWYgdGVzdF9pbGxlZ2FsX2Fzc2lnbm1lbnQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoU3ludGF4RXJyb3IsICJjYW4ndCBhc3NpZ24iKToKKyAgICAgICAgICAgIGNvbXBpbGUoInt4OiB5IGZvciB5LCB4IGluICgoMSwgMiksICgzLCA0KSl9ID0gNSIsICI8dGVzdD4iLAorICAgICAgICAgICAgICAgICAgICAiZXhlYyIpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChTeW50YXhFcnJvciwgImNhbid0IGFzc2lnbiIpOgorICAgICAgICAgICAgY29tcGlsZSgie3g6IHkgZm9yIHksIHggaW4gKCgxLCAyKSwgKDMsIDQpKX0gKz0gNSIsICI8dGVzdD4iLAorICAgICAgICAgICAgICAgICAgICAiZXhlYyIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kaWN0dmlld3MucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kaWN0dmlld3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwMzY3NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RpY3R2aWV3cy5weQpAQCAtMCwwICsxLDE1NCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBEaWN0U2V0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcnNfbm90X2NhbGxhYmxlKHNlbGYpOgorICAgICAgICBrdCA9IHR5cGUoe30udmlld2tleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBrdCwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwga3QpCisgICAgICAgIGl0ID0gdHlwZSh7fS52aWV3aXRlbXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpdCwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXQpCisgICAgICAgIHZ0ID0gdHlwZSh7fS52aWV3dmFsdWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdnQsIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHZ0KQorCisgICAgZGVmIHRlc3RfZGljdF9rZXlzKHNlbGYpOgorICAgICAgICBkID0gezE6IDEwLCAiYSI6ICJBQkMifQorICAgICAgICBrZXlzID0gZC52aWV3a2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChrZXlzKSwgc2V0KFsxLCAiYSJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBzZXQoWzEsICJhIl0pKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleXMsIHNldChbMSwgImEiLCAiYiJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXlzLCBzZXQoWzEsICJiIl0pKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleXMsIHNldChbMV0pKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleXMsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEluKDEsIGtleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImEiLCBrZXlzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEwLCBrZXlzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJaIiwga2V5cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnZpZXdrZXlzKCksIGQudmlld2tleXMoKSkKKyAgICAgICAgZSA9IHsxOiAxMSwgImEiOiAiZGVmIn0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnZpZXdrZXlzKCksIGUudmlld2tleXMoKSkKKyAgICAgICAgZGVsIGVbImEiXQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGQudmlld2tleXMoKSwgZS52aWV3a2V5cygpKQorCisgICAgZGVmIHRlc3RfZGljdF9pdGVtcyhzZWxmKToKKyAgICAgICAgZCA9IHsxOiAxMCwgImEiOiAiQUJDIn0KKyAgICAgICAgaXRlbXMgPSBkLnZpZXdpdGVtcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0ZW1zKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoaXRlbXMpLCBzZXQoWygxLCAxMCksICgiYSIsICJBQkMiKV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBzZXQoWygxLCAxMCksICgiYSIsICJBQkMiKV0pKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGl0ZW1zLCBzZXQoWygxLCAxMCksICgiYSIsICJBQkMiKSwgImp1bmsiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaXRlbXMsIHNldChbKDEsIDEwKSwgKCJhIiwgImRlZiIpXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaXRlbXMsIHNldChbKDEsIDEwKV0pKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGl0ZW1zLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoMSwgMTApLCBpdGVtcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoImEiLCAiQUJDIiksIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgxLCAxMSksIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEsIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgpLCBpdGVtcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoMSwpLCBpdGVtcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoMSwgMiwgMyksIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQudmlld2l0ZW1zKCksIGQudmlld2l0ZW1zKCkpCisgICAgICAgIGUgPSBkLmNvcHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQudmlld2l0ZW1zKCksIGUudmlld2l0ZW1zKCkpCisgICAgICAgIGVbImEiXSA9ICJkZWYiCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZC52aWV3aXRlbXMoKSwgZS52aWV3aXRlbXMoKSkKKworICAgIGRlZiB0ZXN0X2RpY3RfbWl4ZWRfa2V5c19pdGVtcyhzZWxmKToKKyAgICAgICAgZCA9IHsoMSwgMSk6IDExLCAoMiwgMik6IDIyfQorICAgICAgICBlID0gezE6IDEsIDI6IDJ9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC52aWV3a2V5cygpLCBlLnZpZXdpdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGQudmlld2l0ZW1zKCksIGUudmlld2tleXMoKSkKKworICAgIGRlZiB0ZXN0X2RpY3RfdmFsdWVzKHNlbGYpOgorICAgICAgICBkID0gezE6IDEwLCAiYSI6ICJBQkMifQorICAgICAgICB2YWx1ZXMgPSBkLnZpZXd2YWx1ZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldCh2YWx1ZXMpLCBzZXQoWzEwLCAiQUJDIl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2YWx1ZXMpLCAyKQorCisgICAgZGVmIHRlc3RfZGljdF9yZXByKHNlbGYpOgorICAgICAgICBkID0gezE6IDEwLCAiYSI6ICJBQkMifQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVwcihkKSwgc3RyKQorICAgICAgICByID0gcmVwcihkLnZpZXdpdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uociwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUociA9PSAiZGljdF9pdGVtcyhbKCdhJywgJ0FCQycpLCAoMSwgMTApXSkiIG9yCisgICAgICAgICAgICAgICAgICAgICAgICByID09ICJkaWN0X2l0ZW1zKFsoMSwgMTApLCAoJ2EnLCAnQUJDJyldKSIpCisgICAgICAgIHIgPSByZXByKGQudmlld2tleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIgPT0gImRpY3Rfa2V5cyhbJ2EnLCAxXSkiIG9yCisgICAgICAgICAgICAgICAgICAgICAgICByID09ICJkaWN0X2tleXMoWzEsICdhJ10pIikKKyAgICAgICAgciA9IHJlcHIoZC52aWV3dmFsdWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyID09ICJkaWN0X3ZhbHVlcyhbJ0FCQycsIDEwXSkiIG9yCisgICAgICAgICAgICAgICAgICAgICAgICByID09ICJkaWN0X3ZhbHVlcyhbMTAsICdBQkMnXSkiKQorCisgICAgZGVmIHRlc3Rfa2V5c19zZXRfb3BlcmF0aW9ucyhzZWxmKToKKyAgICAgICAgZDEgPSB7J2EnOiAxLCAnYic6IDJ9CisgICAgICAgIGQyID0geydiJzogMywgJ2MnOiAyfQorICAgICAgICBkMyA9IHsnZCc6IDQsICdlJzogNX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpICYgZDEudmlld2tleXMoKSwgeydhJywgJ2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpICYgZDIudmlld2tleXMoKSwgeydiJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSAmIGQzLnZpZXdrZXlzKCksIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgJiBzZXQoZDEudmlld2tleXMoKSksIHsnYScsICdiJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSAmIHNldChkMi52aWV3a2V5cygpKSwgeydiJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSAmIHNldChkMy52aWV3a2V5cygpKSwgc2V0KCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpIHwgZDEudmlld2tleXMoKSwgeydhJywgJ2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpIHwgZDIudmlld2tleXMoKSwgeydhJywgJ2InLCAnYyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgfCBkMy52aWV3a2V5cygpLCB7J2EnLCAnYicsICdkJywgJ2UnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpIHwgc2V0KGQxLnZpZXdrZXlzKCkpLCB7J2EnLCAnYid9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgfCBzZXQoZDIudmlld2tleXMoKSksIHsnYScsICdiJywgJ2MnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpIHwgc2V0KGQzLnZpZXdrZXlzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsnYScsICdiJywgJ2QnLCAnZSd9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2tleXMoKSBeIGQxLnZpZXdrZXlzKCksIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgXiBkMi52aWV3a2V5cygpLCB7J2EnLCAnYyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgXiBkMy52aWV3a2V5cygpLCB7J2EnLCAnYicsICdkJywgJ2UnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpIF4gc2V0KGQxLnZpZXdrZXlzKCkpLCBzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3a2V5cygpIF4gc2V0KGQyLnZpZXdrZXlzKCkpLCB7J2EnLCAnYyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdrZXlzKCkgXiBzZXQoZDMudmlld2tleXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydhJywgJ2InLCAnZCcsICdlJ30pCisKKyAgICBkZWYgdGVzdF9pdGVtc19zZXRfb3BlcmF0aW9ucyhzZWxmKToKKyAgICAgICAgZDEgPSB7J2EnOiAxLCAnYic6IDJ9CisgICAgICAgIGQyID0geydhJzogMiwgJ2InOiAyfQorICAgICAgICBkMyA9IHsnZCc6IDQsICdlJzogNX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGQxLnZpZXdpdGVtcygpICYgZDEudmlld2l0ZW1zKCksIHsoJ2EnLCAxKSwgKCdiJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpICYgZDIudmlld2l0ZW1zKCksIHsoJ2InLCAyKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgJiBkMy52aWV3aXRlbXMoKSwgc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgJiBzZXQoZDEudmlld2l0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdiJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpICYgc2V0KGQyLnZpZXdpdGVtcygpKSwgeygnYicsIDIpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSAmIHNldChkMy52aWV3aXRlbXMoKSksIHNldCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgfCBkMS52aWV3aXRlbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7KCdhJywgMSksICgnYicsIDIpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSB8IGQyLnZpZXdpdGVtcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdhJywgMiksICgnYicsIDIpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSB8IGQzLnZpZXdpdGVtcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdiJywgMiksICgnZCcsIDQpLCAoJ2UnLCA1KX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgfCBzZXQoZDEudmlld2l0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdiJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpIHwgc2V0KGQyLnZpZXdpdGVtcygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7KCdhJywgMSksICgnYScsIDIpLCAoJ2InLCAyKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEudmlld2l0ZW1zKCkgfCBzZXQoZDMudmlld2l0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdiJywgMiksICgnZCcsIDQpLCAoJ2UnLCA1KX0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSBeIGQxLnZpZXdpdGVtcygpLCBzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS52aWV3aXRlbXMoKSBeIGQyLnZpZXdpdGVtcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdhJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLnZpZXdpdGVtcygpIF4gZDMudmlld2l0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2InLCAyKSwgKCdkJywgNCksICgnZScsIDUpfSkKKworCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoRGljdFNldFRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RpZmZsaWIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kaWZmbGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMGJmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kaWZmbGliLnB5CkBAIC0wLDAgKzEsMjcyIEBACitpbXBvcnQgZGlmZmxpYgorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBmaW5kZmlsZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgZG9jdGVzdAoraW1wb3J0IHN5cworCisKK2NsYXNzIFRlc3RXaXRoQXNjaWkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X29uZV9pbnNlcnQoc2VsZik6CisgICAgICAgIHNtID0gZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoTm9uZSwgJ2InICogMTAwLCAnYScgKyAnYicgKiAxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc20ucmF0aW8oKSwgMC45OTUsIHBsYWNlcz0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc20uZ2V0X29wY29kZXMoKSksCisgICAgICAgICAgICBbICAgKCdpbnNlcnQnLCAwLCAwLCAwLCAxKSwKKyAgICAgICAgICAgICAgICAoJ2VxdWFsJywgMCwgMTAwLCAxLCAxMDEpXSkKKyAgICAgICAgc20gPSBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcihOb25lLCAnYicgKiAxMDAsICdiJyAqIDUwICsgJ2EnICsgJ2InICogNTApCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc20ucmF0aW8oKSwgMC45OTUsIHBsYWNlcz0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc20uZ2V0X29wY29kZXMoKSksCisgICAgICAgICAgICBbICAgKCdlcXVhbCcsIDAsIDUwLCAwLCA1MCksCisgICAgICAgICAgICAgICAgKCdpbnNlcnQnLCA1MCwgNTAsIDUwLCA1MSksCisgICAgICAgICAgICAgICAgKCdlcXVhbCcsIDUwLCAxMDAsIDUxLCAxMDEpXSkKKworICAgIGRlZiB0ZXN0X29uZV9kZWxldGUoc2VsZik6CisgICAgICAgIHNtID0gZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoTm9uZSwgJ2EnICogNDAgKyAnYycgKyAnYicgKiA0MCwgJ2EnICogNDAgKyAnYicgKiA0MCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzbS5yYXRpbygpLCAwLjk5NCwgcGxhY2VzPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzbS5nZXRfb3Bjb2RlcygpKSwKKyAgICAgICAgICAgIFsgICAoJ2VxdWFsJywgMCwgNDAsIDAsIDQwKSwKKyAgICAgICAgICAgICAgICAoJ2RlbGV0ZScsIDQwLCA0MSwgNDAsIDQwKSwKKyAgICAgICAgICAgICAgICAoJ2VxdWFsJywgNDEsIDgxLCA0MCwgODApXSkKKworCitjbGFzcyBUZXN0QXV0b2p1bmsodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGZvciB0aGUgYXV0b2p1bmsgcGFyYW1ldGVyIGFkZGVkIGluIDIuNyIiIgorICAgIGRlZiB0ZXN0X29uZV9pbnNlcnRfaG9tb2dlbm91c19zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgIyBCeSBkZWZhdWx0IGF1dG9qdW5rPVRydWUgYW5kIHRoZSBoZXVyaXN0aWMga2lja3MgaW4gZm9yIGEgc2VxdWVuY2UKKyAgICAgICAgIyBvZiBsZW5ndGggMjAwKworICAgICAgICBzZXExID0gJ2InICogMjAwCisgICAgICAgIHNlcTIgPSAnYScgKyAnYicgKiAyMDAKKworICAgICAgICBzbSA9IGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyKE5vbmUsIHNlcTEsIHNlcTIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc20ucmF0aW8oKSwgMCwgcGxhY2VzPTMpCisKKyAgICAgICAgIyBOb3cgdHVybiB0aGUgaGV1cmlzdGljIG9mZgorICAgICAgICBzbSA9IGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyKE5vbmUsIHNlcTEsIHNlcTIsIGF1dG9qdW5rPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNtLnJhdGlvKCksIDAuOTk3NSwgcGxhY2VzPTMpCisKKworY2xhc3MgVGVzdFNGYnVncyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcmF0aW9fZm9yX251bGxfc2VxbihzZWxmKToKKyAgICAgICAgIyBDaGVjayBjbGVhcmluZyBvZiBTRiBidWcgNzYzMDIzCisgICAgICAgIHMgPSBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcihOb25lLCBbXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5yYXRpbygpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMucXVpY2tfcmF0aW8oKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnJlYWxfcXVpY2tfcmF0aW8oKSwgMSkKKworICAgIGRlZiB0ZXN0X2NvbXBhcmluZ19lbXB0eV9saXN0cyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBmaXggZm9yIGJ1ZyAjOTc5Nzk0CisgICAgICAgIGdyb3VwX2dlbiA9IGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyKE5vbmUsIFtdLCBbXSkuZ2V0X2dyb3VwZWRfb3Bjb2RlcygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIGdyb3VwX2dlbi5uZXh0KQorICAgICAgICBkaWZmX2dlbiA9IGRpZmZsaWIudW5pZmllZF9kaWZmKFtdLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgZGlmZl9nZW4ubmV4dCkKKworICAgIGRlZiB0ZXN0X2FkZGVkX3RhYl9oaW50KHNlbGYpOgorICAgICAgICAjIENoZWNrIGZpeCBmb3IgYnVnICMxNDg4OTQzCisgICAgICAgIGRpZmYgPSBsaXN0KGRpZmZsaWIuRGlmZmVyKCkuY29tcGFyZShbIlx0SSBhbSBhIGJ1Z2d5Il0sWyJcdFx0SSBhbSBhIGJ1ZyJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiLSBcdEkgYW0gYSBidWdneSIsIGRpZmZbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIj8gICAgICAgICAgICAtLVxuIiwgZGlmZlsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiKyBcdFx0SSBhbSBhIGJ1ZyIsIGRpZmZbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIj8gK1xuIiwgZGlmZlszXSkKKworcGF0Y2g5MTQ1NzVfZnJvbTEgPSAiIiIKKyAgIDEuIEJlYXV0aWZ1bCBpcyBiZVRUZXIgdGhhbiB1Z2x5LgorICAgMi4gRXhwbGljaXQgaXMgYmV0dGVyIHRoYW4gaW1wbGljaXQuCisgICAzLiBTaW1wbGUgaXMgYmV0dGVyIHRoYW4gY29tcGxleC4KKyAgIDQuIENvbXBsZXggaXMgYmV0dGVyIHRoYW4gY29tcGxpY2F0ZWQuCisiIiIKKworcGF0Y2g5MTQ1NzVfdG8xID0gIiIiCisgICAxLiBCZWF1dGlmdWwgaXMgYmV0dGVyIHRoYW4gdWdseS4KKyAgIDMuICAgU2ltcGxlIGlzIGJldHRlciB0aGFuIGNvbXBsZXguCisgICA0LiBDb21wbGljYXRlZCBpcyBiZXR0ZXIgdGhhbiBjb21wbGV4LgorICAgNS4gRmxhdCBpcyBiZXR0ZXIgdGhhbiBuZXN0ZWQuCisiIiIKKworcGF0Y2g5MTQ1NzVfZnJvbTIgPSAiIiIKK1x0XHRMaW5lIDE6IHByZWNlZWRlZCBieSBmcm9tOlt0dF0gdG86W3Nzc3NdCisgIFx0XHRMaW5lIDI6IHByZWNlZWRlZCBieSBmcm9tOltzc3R0XSB0bzpbc3Nzc3RdCisgIFx0IFx0TGluZSAzOiBwcmVjZWVkZWQgYnkgZnJvbTpbc3N0c3RdIHRvOltzc3Nzc3NdCitMaW5lIDQ6ICBcdGhhcyBmcm9tOltzc3RdIHRvOltzc3NdIGFmdGVyIDoKK0xpbmUgNTogaGFzIGZyb206W3RdIHRvOltzc10gYXQgZW5kXHQKKyIiIgorCitwYXRjaDkxNDU3NV90bzIgPSAiIiIKKyAgICBMaW5lIDE6IHByZWNlZWRlZCBieSBmcm9tOlt0dF0gdG86W3Nzc3NdCisgICAgXHRMaW5lIDI6IHByZWNlZWRlZCBieSBmcm9tOltzc3R0XSB0bzpbc3Nzc3RdCisgICAgICBMaW5lIDM6IHByZWNlZWRlZCBieSBmcm9tOltzc3RzdF0gdG86W3Nzc3Nzc10KK0xpbmUgNDogICBoYXMgZnJvbTpbc3N0XSB0bzpbc3NzXSBhZnRlciA6CitMaW5lIDU6IGhhcyBmcm9tOlt0XSB0bzpbc3NdIGF0IGVuZAorIiIiCisKK3BhdGNoOTE0NTc1X2Zyb20zID0gIiIibGluZSAwCisxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njg5MDEyMzQ1CitsaW5lIDEKK2xpbmUgMgorbGluZSAzCitsaW5lIDQgICBjaGFuZ2VkCitsaW5lIDUgICBjaGFuZ2VkCitsaW5lIDYgICBjaGFuZ2VkCitsaW5lIDcKK2xpbmUgOCAgc3VidHJhY3RlZAorbGluZSA5CisxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njg5MDEyMzQ1CitzaG9ydCBsaW5lCitqdXN0IGZpdHMgaW4hIQoranVzdCBmaXRzIGluIHR3byBsaW5lcyB5dXAhIQordGhlIGVuZCIiIgorCitwYXRjaDkxNDU3NV90bzMgPSAiIiJsaW5lIDAKKzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2ODkwMTIzNDUKK2xpbmUgMQorbGluZSAyICAgIGFkZGVkCitsaW5lIDMKK2xpbmUgNCAgIGNoYW5HRWQKK2xpbmUgNWEgIGNoYW5HZWQKK2xpbmUgNmEgIGNoYW5nRWQKK2xpbmUgNworbGluZSA4CitsaW5lIDkKKzEyMzQ1Njc4OTAKK2Fub3RoZXIgbG9uZyBsaW5lIHRoYXQgbmVlZHMgdG8gYmUgd3JhcHBlZAoranVzdCBmaXRTIGluISEKK2p1c3QgZml0cyBpbiB0d28gbGluZVMgeXVwISEKK3RoZSBlbmQiIiIKKworY2xhc3MgVGVzdFNGcGF0Y2hlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9odG1sX2RpZmYoc2VsZik6CisgICAgICAgICMgQ2hlY2sgU0YgcGF0Y2ggOTE0NTc1IGZvciBnZW5lcmF0aW5nIEhUTUwgZGlmZmVyZW5jZXMKKyAgICAgICAgZjFhID0gKChwYXRjaDkxNDU3NV9mcm9tMSArICcxMjNcbicqMTApKjMpCisgICAgICAgIHQxYSA9IChwYXRjaDkxNDU3NV90bzEgKyAnMTIzXG4nKjEwKSozCisgICAgICAgIGYxYiA9ICc0NTZcbicqMTAgKyBmMWEKKyAgICAgICAgdDFiID0gJzQ1NlxuJyoxMCArIHQxYQorICAgICAgICBmMWEgPSBmMWEuc3BsaXRsaW5lcygpCisgICAgICAgIHQxYSA9IHQxYS5zcGxpdGxpbmVzKCkKKyAgICAgICAgZjFiID0gZjFiLnNwbGl0bGluZXMoKQorICAgICAgICB0MWIgPSB0MWIuc3BsaXRsaW5lcygpCisgICAgICAgIGYyID0gcGF0Y2g5MTQ1NzVfZnJvbTIuc3BsaXRsaW5lcygpCisgICAgICAgIHQyID0gcGF0Y2g5MTQ1NzVfdG8yLnNwbGl0bGluZXMoKQorICAgICAgICBmMyA9IHBhdGNoOTE0NTc1X2Zyb20zCisgICAgICAgIHQzID0gcGF0Y2g5MTQ1NzVfdG8zCisgICAgICAgIGkgPSBkaWZmbGliLkh0bWxEaWZmKCkKKyAgICAgICAgaiA9IGRpZmZsaWIuSHRtbERpZmYodGFic2l6ZT0yKQorICAgICAgICBrID0gZGlmZmxpYi5IdG1sRGlmZih3cmFwY29sdW1uPTE0KQorCisgICAgICAgIGZ1bGwgPSBpLm1ha2VfZmlsZShmMWEsdDFhLCdmcm9tJywndG8nLGNvbnRleHQ9RmFsc2UsbnVtbGluZXM9NSkKKyAgICAgICAgdGFibGVzID0gJ1xuJy5qb2luKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICc8aDI+Q29udGV4dCAoZmlyc3QgZGlmZiB3aXRoaW4gbnVtbGluZXM9NShkZWZhdWx0KSk8L2gyPicsCisgICAgICAgICAgICAgaS5tYWtlX3RhYmxlKGYxYSx0MWEsJ2Zyb20nLCd0bycsY29udGV4dD1UcnVlKSwKKyAgICAgICAgICAgICAnPGgyPkNvbnRleHQgKGZpcnN0IGRpZmYgYWZ0ZXIgbnVtbGluZXM9NShkZWZhdWx0KSk8L2gyPicsCisgICAgICAgICAgICAgaS5tYWtlX3RhYmxlKGYxYix0MWIsJ2Zyb20nLCd0bycsY29udGV4dD1UcnVlKSwKKyAgICAgICAgICAgICAnPGgyPkNvbnRleHQgKG51bWxpbmVzPTYpPC9oMj4nLAorICAgICAgICAgICAgIGkubWFrZV90YWJsZShmMWEsdDFhLCdmcm9tJywndG8nLGNvbnRleHQ9VHJ1ZSxudW1saW5lcz02KSwKKyAgICAgICAgICAgICAnPGgyPkNvbnRleHQgKG51bWxpbmVzPTApPC9oMj4nLAorICAgICAgICAgICAgIGkubWFrZV90YWJsZShmMWEsdDFhLCdmcm9tJywndG8nLGNvbnRleHQ9VHJ1ZSxudW1saW5lcz0wKSwKKyAgICAgICAgICAgICAnPGgyPlNhbWUgQ29udGV4dDwvaDI+JywKKyAgICAgICAgICAgICBpLm1ha2VfdGFibGUoZjFhLGYxYSwnZnJvbScsJ3RvJyxjb250ZXh0PVRydWUpLAorICAgICAgICAgICAgICc8aDI+U2FtZSBGdWxsPC9oMj4nLAorICAgICAgICAgICAgIGkubWFrZV90YWJsZShmMWEsZjFhLCdmcm9tJywndG8nLGNvbnRleHQ9RmFsc2UpLAorICAgICAgICAgICAgICc8aDI+RW1wdHkgQ29udGV4dDwvaDI+JywKKyAgICAgICAgICAgICBpLm1ha2VfdGFibGUoW10sW10sJ2Zyb20nLCd0bycsY29udGV4dD1UcnVlKSwKKyAgICAgICAgICAgICAnPGgyPkVtcHR5IEZ1bGw8L2gyPicsCisgICAgICAgICAgICAgaS5tYWtlX3RhYmxlKFtdLFtdLCdmcm9tJywndG8nLGNvbnRleHQ9RmFsc2UpLAorICAgICAgICAgICAgICc8aDI+dGFic2l6ZT0yPC9oMj4nLAorICAgICAgICAgICAgIGoubWFrZV90YWJsZShmMix0MiksCisgICAgICAgICAgICAgJzxoMj50YWJzaXplPWRlZmF1bHQ8L2gyPicsCisgICAgICAgICAgICAgaS5tYWtlX3RhYmxlKGYyLHQyKSwKKyAgICAgICAgICAgICAnPGgyPkNvbnRleHQgKHdyYXBjb2x1bW49MTQsbnVtbGluZXM9MCk8L2gyPicsCisgICAgICAgICAgICAgay5tYWtlX3RhYmxlKGYzLnNwbGl0bGluZXMoKSx0My5zcGxpdGxpbmVzKCksY29udGV4dD1UcnVlLG51bWxpbmVzPTApLAorICAgICAgICAgICAgICc8aDI+d3JhcGNvbHVtbj0xNCxzcGxpdGxpbmVzKCk8L2gyPicsCisgICAgICAgICAgICAgay5tYWtlX3RhYmxlKGYzLnNwbGl0bGluZXMoKSx0My5zcGxpdGxpbmVzKCkpLAorICAgICAgICAgICAgICc8aDI+d3JhcGNvbHVtbj0xNCxzcGxpdGxpbmVzKFRydWUpPC9oMj4nLAorICAgICAgICAgICAgIGsubWFrZV90YWJsZShmMy5zcGxpdGxpbmVzKFRydWUpLHQzLnNwbGl0bGluZXMoVHJ1ZSkpLAorICAgICAgICAgICAgIF0pCisgICAgICAgIGFjdHVhbCA9IGZ1bGwucmVwbGFjZSgnPC9ib2R5PicsJ1xuJXNcbjwvYm9keT4nICUgdGFibGVzKQorCisgICAgICAgICMgdGVtcG9yYXJpbHkgdW5jb21tZW50IG5leHQgdHdvIGxpbmVzIHRvIGJhc2VsaW5lIHRoaXMgdGVzdAorICAgICAgICAjd2l0aCBvcGVuKCd0ZXN0X2RpZmZsaWJfZXhwZWN0Lmh0bWwnLCd3JykgYXMgZnA6CisgICAgICAgICMgICAgZnAud3JpdGUoYWN0dWFsKQorCisgICAgICAgIHdpdGggb3BlbihmaW5kZmlsZSgndGVzdF9kaWZmbGliX2V4cGVjdC5odG1sJykpIGFzIGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGZwLnJlYWQoKSkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbl9saW1pdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBpZiB0aGUgcHJvYmxlbSBkZXNjcmliZWQgaW4gcGF0Y2ggIzE0MTM3MTEgZXhpc3RzLgorICAgICAgICBsaW1pdCA9IHN5cy5nZXRyZWN1cnNpb25saW1pdCgpCisgICAgICAgIG9sZCA9IFsoaSUyIGFuZCAiSzolZCIgb3IgIlY6QTolZCIpICUgaSBmb3IgaSBpbiByYW5nZShsaW1pdCoyKV0KKyAgICAgICAgbmV3ID0gWyhpJTIgYW5kICJLOiVkIiBvciAiVjpCOiVkIikgJSBpIGZvciBpIGluIHJhbmdlKGxpbWl0KjIpXQorICAgICAgICBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcihOb25lLCBvbGQsIG5ldykuZ2V0X29wY29kZXMoKQorCisKK2NsYXNzIFRlc3RPdXRwdXRGb3JtYXQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3RhYl9kZWxpbWl0ZXIoc2VsZik6CisgICAgICAgIGFyZ3MgPSBbJ29uZScsICd0d28nLCAnT3JpZ2luYWwnLCAnQ3VycmVudCcsCisgICAgICAgICAgICAnMjAwNS0wMS0yNiAyMzozMDo1MCcsICcyMDEwLTA0LTAyIDEwOjIwOjUyJ10KKyAgICAgICAgdWQgPSBkaWZmbGliLnVuaWZpZWRfZGlmZigqYXJncywgbGluZXRlcm09JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh1ZClbMDoyXSwgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tLSBPcmlnaW5hbFx0MjAwNS0wMS0yNiAyMzozMDo1MCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiKysrIEN1cnJlbnRcdDIwMTAtMDQtMDIgMTA6MjA6NTIiXSkKKyAgICAgICAgY2QgPSBkaWZmbGliLmNvbnRleHRfZGlmZigqYXJncywgbGluZXRlcm09JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjZClbMDoyXSwgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIioqKiBPcmlnaW5hbFx0MjAwNS0wMS0yNiAyMzozMDo1MCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tIEN1cnJlbnRcdDIwMTAtMDQtMDIgMTA6MjA6NTIiXSkKKworICAgIGRlZiB0ZXN0X25vX3RyYWlsaW5nX3RhYl9vbl9lbXB0eV9maWxlZGF0ZShzZWxmKToKKyAgICAgICAgYXJncyA9IFsnb25lJywgJ3R3bycsICdPcmlnaW5hbCcsICdDdXJyZW50J10KKyAgICAgICAgdWQgPSBkaWZmbGliLnVuaWZpZWRfZGlmZigqYXJncywgbGluZXRlcm09JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh1ZClbMDoyXSwgWyItLS0gT3JpZ2luYWwiLCAiKysrIEN1cnJlbnQiXSkKKworICAgICAgICBjZCA9IGRpZmZsaWIuY29udGV4dF9kaWZmKCphcmdzLCBsaW5ldGVybT0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNkKVswOjJdLCBbIioqKiBPcmlnaW5hbCIsICItLS0gQ3VycmVudCJdKQorCisgICAgZGVmIHRlc3RfcmFuZ2VfZm9ybWF0X3VuaWZpZWQoc2VsZik6CisgICAgICAgICMgUGVyIHRoZSBkaWZmIHNwZWMgYXQgaHR0cDovL3d3dy51bml4Lm9yZy9zaW5nbGVfdW5peF9zcGVjaWZpY2F0aW9uLworICAgICAgICBzcGVjID0gJycnXAorICAgICAgICAgICBFYWNoIDxyYW5nZT4gZmllbGQgc2hhbGwgYmUgb2YgdGhlIGZvcm06CisgICAgICAgICAgICAgJTFkIiwgPGJlZ2lubmluZyBsaW5lIG51bWJlcj4gIGlmIHRoZSByYW5nZSBjb250YWlucyBleGFjdGx5IG9uZSBsaW5lLAorICAgICAgICAgICBhbmQ6CisgICAgICAgICAgICAiJTFkLCUxZCIsIDxiZWdpbm5pbmcgbGluZSBudW1iZXI+LCA8bnVtYmVyIG9mIGxpbmVzPiBvdGhlcndpc2UuCisgICAgICAgICAgIElmIGEgcmFuZ2UgaXMgZW1wdHksIGl0cyBiZWdpbm5pbmcgbGluZSBudW1iZXIgc2hhbGwgYmUgdGhlIG51bWJlciBvZgorICAgICAgICAgICB0aGUgbGluZSBqdXN0IGJlZm9yZSB0aGUgcmFuZ2UsIG9yIDAgaWYgdGhlIGVtcHR5IHJhbmdlIHN0YXJ0cyB0aGUgZmlsZS4KKyAgICAgICAgJycnCisgICAgICAgIGZtdCA9IGRpZmZsaWIuX2Zvcm1hdF9yYW5nZV91bmlmaWVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10KDMsMyksICczLDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdCgzLDQpLCAnNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10KDMsNSksICc0LDInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdCgzLDYpLCAnNCwzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQoMCwwKSwgJzAsMCcpCisKKyAgICBkZWYgdGVzdF9yYW5nZV9mb3JtYXRfY29udGV4dChzZWxmKToKKyAgICAgICAgIyBQZXIgdGhlIGRpZmYgc3BlYyBhdCBodHRwOi8vd3d3LnVuaXgub3JnL3NpbmdsZV91bml4X3NwZWNpZmljYXRpb24vCisgICAgICAgIHNwZWMgPSAnJydcCisgICAgICAgICAgIFRoZSByYW5nZSBvZiBsaW5lcyBpbiBmaWxlMSBzaGFsbCBiZSB3cml0dGVuIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0CisgICAgICAgICAgIGlmIHRoZSByYW5nZSBjb250YWlucyB0d28gb3IgbW9yZSBsaW5lczoKKyAgICAgICAgICAgICAgICIqKiogJWQsJWQgKioqKlxuIiwgPGJlZ2lubmluZyBsaW5lIG51bWJlcj4sIDxlbmRpbmcgbGluZSBudW1iZXI+CisgICAgICAgICAgIGFuZCB0aGUgZm9sbG93aW5nIGZvcm1hdCBvdGhlcndpc2U6CisgICAgICAgICAgICAgICAiKioqICVkICoqKipcbiIsIDxlbmRpbmcgbGluZSBudW1iZXI+CisgICAgICAgICAgIFRoZSBlbmRpbmcgbGluZSBudW1iZXIgb2YgYW4gZW1wdHkgcmFuZ2Ugc2hhbGwgYmUgdGhlIG51bWJlciBvZiB0aGUgcHJlY2VkaW5nIGxpbmUsCisgICAgICAgICAgIG9yIDAgaWYgdGhlIHJhbmdlIGlzIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZS4KKworICAgICAgICAgICBOZXh0LCB0aGUgcmFuZ2Ugb2YgbGluZXMgaW4gZmlsZTIgc2hhbGwgYmUgd3JpdHRlbiBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdAorICAgICAgICAgICBpZiB0aGUgcmFuZ2UgY29udGFpbnMgdHdvIG9yIG1vcmUgbGluZXM6CisgICAgICAgICAgICAgICAiLS0tICVkLCVkIC0tLS1cbiIsIDxiZWdpbm5pbmcgbGluZSBudW1iZXI+LCA8ZW5kaW5nIGxpbmUgbnVtYmVyPgorICAgICAgICAgICBhbmQgdGhlIGZvbGxvd2luZyBmb3JtYXQgb3RoZXJ3aXNlOgorICAgICAgICAgICAgICAgIi0tLSAlZCAtLS0tXG4iLCA8ZW5kaW5nIGxpbmUgbnVtYmVyPgorICAgICAgICAnJycKKyAgICAgICAgZm10ID0gZGlmZmxpYi5fZm9ybWF0X3JhbmdlX2NvbnRleHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQoMywzKSwgJzMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdCgzLDQpLCAnNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10KDMsNSksICc0LDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdCgzLDYpLCAnNCw2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQoMCwwKSwgJzAnKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBkaWZmbGliLkh0bWxEaWZmLl9kZWZhdWx0X3ByZWZpeCA9IDAKKyAgICBEb2N0ZXN0cyA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKGRpZmZsaWIpCisgICAgcnVuX3VuaXR0ZXN0KAorICAgICAgICBUZXN0V2l0aEFzY2lpLCBUZXN0QXV0b2p1bmssIFRlc3RTRnBhdGNoZXMsIFRlc3RTRmJ1Z3MsCisgICAgICAgIFRlc3RPdXRwdXRGb3JtYXQsIERvY3Rlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kaWZmbGliX2V4cGVjdC5odG1sIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGlmZmxpYl9leHBlY3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWI2ZDdhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGlmZmxpYl9leHBlY3QuaHRtbApAQCAtMCwwICsxLDUyNiBAQAorCis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgorICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKworPGh0bWw+CisKKzxoZWFkPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIKKyAgICAgICAgICBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KKyAgICA8dGl0bGU+PC90aXRsZT4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAgICAgICB0YWJsZS5kaWZmIHtmb250LWZhbWlseTpDb3VyaWVyOyBib3JkZXI6bWVkaXVtO30KKyAgICAgICAgLmRpZmZfaGVhZGVyIHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTB9CisgICAgICAgIHRkLmRpZmZfaGVhZGVyIHt0ZXh0LWFsaWduOnJpZ2h0fQorICAgICAgICAuZGlmZl9uZXh0IHtiYWNrZ3JvdW5kLWNvbG9yOiNjMGMwYzB9CisgICAgICAgIC5kaWZmX2FkZCB7YmFja2dyb3VuZC1jb2xvcjojYWFmZmFhfQorICAgICAgICAuZGlmZl9jaGcge2JhY2tncm91bmQtY29sb3I6I2ZmZmY3N30KKyAgICAgICAgLmRpZmZfc3ViIHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmFhYWF9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHk+CisgICAgCisgICAgPHRhYmxlIGNsYXNzPSJkaWZmIiBpZD0iZGlmZmxpYl9jaGdfdG8wX190b3AiCisgICAgICAgICAgIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgcnVsZXM9Imdyb3VwcyIgPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICA8dGhlYWQ+PHRyPjx0aCBjbGFzcz0iZGlmZl9uZXh0Ij48YnIgLz48L3RoPjx0aCBjb2xzcGFuPSIyIiBjbGFzcz0iZGlmZl9oZWFkZXIiPmZyb208L3RoPjx0aCBjbGFzcz0iZGlmZl9uZXh0Ij48YnIgLz48L3RoPjx0aCBjb2xzcGFuPSIyIiBjbGFzcz0iZGlmZl9oZWFkZXIiPnRvPC90aD48L3RyPjwvdGhlYWQ+CisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvMF9fMCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMF9fMCI+ZjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8xIj4xPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzBfXzAiPmY8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzEiPjE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8wX18xIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzIiPjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5UVDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzBfXzEiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzIiPjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj50dDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMyI+MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzIuJm5ic3A7RXhwbGljaXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtpbXBsaWNpdC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF80Ij40PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuJm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMyI+MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7PC9zcGFuPiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF81Ij41PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGV4Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxpY2F0ZWQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF80Ij40PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGljYXRlZCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzUiPjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs1LiZuYnNwO0ZsYXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtuZXN0ZWQuPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfNiI+NjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfNiI+NjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzciPjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzciPjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF84Ij44PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF84Ij44PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfOSI+OTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfOSI+OTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzEwIj4xMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMTAiPjEwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMTEiPjExPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8xMSI+MTE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8wX18xIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8xMiI+MTI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzEyIj4xMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzEzIj4xMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMTMiPjEzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMTQiPjE0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8xNCI+MTQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8xNSI+MTU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzE1Ij4xNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzE2Ij4xNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMTYiPjE2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMF9fMiI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8xNyI+MTc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5UVDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzBfXzIiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzE3Ij4xNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPnR0PC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8xOCI+MTg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDsyLiZuYnNwO0V4cGxpY2l0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7aW1wbGljaXQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMTkiPjE5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuJm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMTgiPjE4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuPHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDs8L3NwYW4+Jm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzIwIj4yMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxleCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsaWNhdGVkLjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMTkiPjE5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGljYXRlZCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzIwIj4yMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzUuJm5ic3A7RmxhdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO25lc3RlZC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8yMSI+MjE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzIxIj4yMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzIyIj4yMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMjIiPjIyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMjMiPjIzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8yMyI+MjM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8yNCI+MjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzI0Ij4yNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzI1Ij4yNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMjUiPjI1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMjYiPjI2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8yNiI+MjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8wX18yIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8yNyI+Mjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzI3Ij4yNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzI4Ij4yODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMjgiPjI4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMjkiPjI5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8yOSI+Mjk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8zMCI+MzA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzMwIj4zMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzMxIj4zMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMzEiPjMxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMF9fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzMyIj4zMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlRUPC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMF9fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8zMiI+MzI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj50dDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMzMiPjMzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0Ljwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzM0Ij4zNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzMzIj4zMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7PC9zcGFuPiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8zNSI+MzU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsZXgmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGljYXRlZC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzM0Ij4zNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxpY2F0ZWQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4Ljwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8zNSI+MzU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs1LiZuYnNwO0ZsYXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtuZXN0ZWQuPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMzYiPjM2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8zNiI+MzY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF8zNyI+Mzc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzM3Ij4zNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzM4Ij4zODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfMzgiPjM4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfMzkiPjM5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF8zOSI+Mzk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF80MCI+NDA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzQwIj40MDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzQxIj40MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfNDEiPjQxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfNDIiPjQyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF80MiI+NDI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMF80MyI+NDM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8wXzQzIj40MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20wXzQ0Ij40NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzBfNDQiPjQ0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTBfNDUiPjQ1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMF80NSI+NDU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PgorICAgIDwvdGFibGU+CisgICAgPHRhYmxlIGNsYXNzPSJkaWZmIiBzdW1tYXJ5PSJMZWdlbmRzIj4KKyAgICAgICAgPHRyPiA8dGggY29sc3Bhbj0iMiI+IExlZ2VuZHMgPC90aD4gPC90cj4KKyAgICAgICAgPHRyPiA8dGQ+IDx0YWJsZSBib3JkZXI9IiIgc3VtbWFyeT0iQ29sb3JzIj4KKyAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRoPiBDb2xvcnMgPC90aD4gPC90cj4KKyAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7QWRkZWQmbmJzcDs8L3RkPjwvdHI+CisgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9jaGciPkNoYW5nZWQ8L3RkPiA8L3RyPgorICAgICAgICAgICAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfc3ViIj5EZWxldGVkPC90ZD4gPC90cj4KKyAgICAgICAgICAgICAgICAgIDwvdGFibGU+PC90ZD4KKyAgICAgICAgICAgICA8dGQ+IDx0YWJsZSBib3JkZXI9IiIgc3VtbWFyeT0iTGlua3MiPgorICAgICAgICAgICAgICAgICAgICAgIDx0cj48dGggY29sc3Bhbj0iMiI+IExpbmtzIDwvdGg+IDwvdHI+CisgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZD4oZilpcnN0IGNoYW5nZTwvdGQ+IDwvdHI+CisgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZD4obilleHQgY2hhbmdlPC90ZD4gPC90cj4KKyAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPih0KW9wPC90ZD4gPC90cj4KKyAgICAgICAgICAgICAgICAgIDwvdGFibGU+PC90ZD4gPC90cj4KKyAgICA8L3RhYmxlPgorCis8aDI+Q29udGV4dCAoZmlyc3QgZGlmZiB3aXRoaW4gbnVtbGluZXM9NShkZWZhdWx0KSk8L2gyPgorCisgICAgPHRhYmxlIGNsYXNzPSJkaWZmIiBpZD0iZGlmZmxpYl9jaGdfdG8xX190b3AiCisgICAgICAgICAgIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgcnVsZXM9Imdyb3VwcyIgPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICA8dGhlYWQ+PHRyPjx0aCBjbGFzcz0iZGlmZl9uZXh0Ij48YnIgLz48L3RoPjx0aCBjb2xzcGFuPSIyIiBjbGFzcz0iZGlmZl9oZWFkZXIiPmZyb208L3RoPjx0aCBjbGFzcz0iZGlmZl9uZXh0Ij48YnIgLz48L3RoPjx0aCBjb2xzcGFuPSIyIiBjbGFzcz0iZGlmZl9oZWFkZXIiPnRvPC90aD48L3RyPjwvdGhlYWQ+CisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvMV9fMCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMV9fMCI+ZjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8xIj4xPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzFfXzAiPmY8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzEiPjE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xX18xIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzIiPjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5UVDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzFfXzEiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzIiPjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj50dDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMyI+MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzIuJm5ic3A7RXhwbGljaXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtpbXBsaWNpdC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV80Ij40PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuJm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMyI+MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7PC9zcGFuPiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV81Ij41PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGV4Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxpY2F0ZWQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV80Ij40PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGljYXRlZCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzUiPjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs1LiZuYnNwO0ZsYXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtuZXN0ZWQuPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfNiI+NjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfNiI+NjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzciPjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzciPjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV84Ij44PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV84Ij44PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfOSI+OTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfOSI+OTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzEwIj4xMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMTAiPjEwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgPC90Ym9keT4gICAgICAgIAorICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiIGlkPSJkaWZmbGliX2NoZ190bzFfXzEiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzEyIj4xMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMTIiPjEyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMTMiPjEzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8xMyI+MTM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8xNCI+MTQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzE0Ij4xNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzE1Ij4xNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMTUiPjE1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMTYiPjE2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8xNiI+MTY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xX18yIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzE3Ij4xNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlRUPC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMV9fMiI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMTciPjE3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+dHQ8L3NwYW4+ZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzE4Ij4xODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzIuJm5ic3A7RXhwbGljaXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtpbXBsaWNpdC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8xOSI+MTk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8xOCI+MTg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOzwvc3Bhbj4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMjAiPjIwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGV4Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxpY2F0ZWQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8xOSI+MTk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsaWNhdGVkJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMjAiPjIwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NS4mbmJzcDtGbGF0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7bmVzdGVkLjwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzIxIj4yMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMjEiPjIxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMjIiPjIyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8yMiI+MjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8yMyI+MjM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzIzIj4yMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzI0Ij4yNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMjQiPjI0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMjUiPjI1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8yNSI+MjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PiAgICAgICAgCisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvMV9fMiI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMjciPjI3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8yNyI+Mjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8yOCI+Mjg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzI4Ij4yODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzI5Ij4yOTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMjkiPjI5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMzAiPjMwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8zMCI+MzA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8zMSI+MzE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzMxIj4zMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzFfX3RvcCI+dDwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8zMiI+MzI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5UVDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzFfX3RvcCI+dDwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMzIiPjMyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+dHQ8L3NwYW4+ZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzMzIj4zMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzIuJm5ic3A7RXhwbGljaXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtpbXBsaWNpdC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8zNCI+MzQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8zMyI+MzM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOzwvc3Bhbj4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMzUiPjM1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGV4Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxpY2F0ZWQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8zNCI+MzQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsaWNhdGVkJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMzUiPjM1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NS4mbmJzcDtGbGF0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7bmVzdGVkLjwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzM2Ij4zNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMzYiPjM2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfMzciPjM3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV8zNyI+Mzc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMV8zOCI+Mzg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xXzM4Ij4zODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xXzM5Ij4zOTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzFfMzkiPjM5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTFfNDAiPjQwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMV80MCI+NDA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PgorICAgIDwvdGFibGU+Cis8aDI+Q29udGV4dCAoZmlyc3QgZGlmZiBhZnRlciBudW1saW5lcz01KGRlZmF1bHQpKTwvaDI+CisKKyAgICA8dGFibGUgY2xhc3M9ImRpZmYiIGlkPSJkaWZmbGliX2NoZ190bzJfX3RvcCIKKyAgICAgICAgICAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBydWxlcz0iZ3JvdXBzIiA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDx0aGVhZD48dHI+PHRoIGNsYXNzPSJkaWZmX25leHQiPjxiciAvPjwvdGg+PHRoIGNvbHNwYW49IjIiIGNsYXNzPSJkaWZmX2hlYWRlciI+ZnJvbTwvdGg+PHRoIGNsYXNzPSJkaWZmX25leHQiPjxiciAvPjwvdGg+PHRoIGNvbHNwYW49IjIiIGNsYXNzPSJkaWZmX2hlYWRlciI+dG88L3RoPjwvdHI+PC90aGVhZD4KKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8yX18wIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl83Ij43PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjQ1NjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl83Ij43PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjQ1NjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfOCI+ODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj40NTY8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfOCI+ODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj40NTY8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzkiPjk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+NDU2PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzkiPjk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+NDU2PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8xMCI+MTA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+NDU2PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzEwIj4xMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj40NTY8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzExIj4xMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMTEiPjExPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMl9fMSI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8xMiI+MTI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5UVDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzJfXzEiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzEyIj4xMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPnR0PC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8xMyI+MTM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDsyLiZuYnNwO0V4cGxpY2l0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7aW1wbGljaXQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMTQiPjE0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuJm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMTMiPjEzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuPHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDs8L3NwYW4+Jm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzE1Ij4xNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxleCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsaWNhdGVkLjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMTQiPjE0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGljYXRlZCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzE1Ij4xNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzUuJm5ic3A7RmxhdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO25lc3RlZC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8xNiI+MTY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzE2Ij4xNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzE3Ij4xNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMTciPjE3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMTgiPjE4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8xOCI+MTg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8xOSI+MTk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzE5Ij4xOTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzIwIj4yMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMjAiPjIwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgPC90Ym9keT4gICAgICAgIAorICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiIGlkPSJkaWZmbGliX2NoZ190bzJfXzEiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzIyIj4yMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMjIiPjIyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMjMiPjIzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8yMyI+MjM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8yNCI+MjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzI0Ij4yNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzI1Ij4yNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMjUiPjI1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMjYiPjI2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8yNiI+MjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8yX18yIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzI3Ij4yNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlRUPC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMl9fMiI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMjciPjI3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+dHQ8L3NwYW4+ZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzI4Ij4yODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzIuJm5ic3A7RXhwbGljaXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtpbXBsaWNpdC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8yOSI+Mjk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8yOCI+Mjg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOzwvc3Bhbj4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMzAiPjMwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGV4Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxpY2F0ZWQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8yOSI+Mjk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsaWNhdGVkJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMzAiPjMwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NS4mbmJzcDtGbGF0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7bmVzdGVkLjwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzMxIj4zMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMzEiPjMxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMzIiPjMyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8zMiI+MzI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8zMyI+MzM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzMzIj4zMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzM0Ij4zNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMzQiPjM0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMzUiPjM1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8zNSI+MzU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PiAgICAgICAgCisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvMl9fMiI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfMzciPjM3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl8zNyI+Mzc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl8zOCI+Mzg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzM4Ij4zODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzM5Ij4zOTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfMzkiPjM5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfNDAiPjQwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl80MCI+NDA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl80MSI+NDE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzQxIj40MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzJfX3RvcCI+dDwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl80MiI+NDI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5UVDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzJfX3RvcCI+dDwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfNDIiPjQyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzEuJm5ic3A7QmVhdXRpZnVsJm5ic3A7aXMmbmJzcDtiZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+dHQ8L3NwYW4+ZXImbmJzcDt0aGFuJm5ic3A7dWdseS48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzQzIj40MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzIuJm5ic3A7RXhwbGljaXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtpbXBsaWNpdC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl80NCI+NDQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl80MyI+NDM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOzwvc3Bhbj4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfNDUiPjQ1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGV4Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxpY2F0ZWQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl80NCI+NDQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsaWNhdGVkJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfNDUiPjQ1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NS4mbmJzcDtGbGF0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7bmVzdGVkLjwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzQ2Ij40NjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfNDYiPjQ2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfNDciPjQ3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl80NyI+NDc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMl80OCI+NDg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8yXzQ4Ij40ODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20yXzQ5Ij40OTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzJfNDkiPjQ5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTJfNTAiPjUwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMl81MCI+NTA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PgorICAgIDwvdGFibGU+Cis8aDI+Q29udGV4dCAobnVtbGluZXM9Nik8L2gyPgorCisgICAgPHRhYmxlIGNsYXNzPSJkaWZmIiBpZD0iZGlmZmxpYl9jaGdfdG8zX190b3AiCisgICAgICAgICAgIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgcnVsZXM9Imdyb3VwcyIgPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICA8dGhlYWQ+PHRyPjx0aCBjbGFzcz0iZGlmZl9uZXh0Ij48YnIgLz48L3RoPjx0aCBjb2xzcGFuPSIyIiBjbGFzcz0iZGlmZl9oZWFkZXIiPmZyb208L3RoPjx0aCBjbGFzcz0iZGlmZl9uZXh0Ij48YnIgLz48L3RoPjx0aCBjb2xzcGFuPSIyIiBjbGFzcz0iZGlmZl9oZWFkZXIiPnRvPC90aD48L3RyPjwvdGhlYWQ+CisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvM19fMCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvM19fMCI+ZjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18xIj4xPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzNfXzAiPmY8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzEiPjE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8zX18xIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzIiPjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5UVDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzNfXzEiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzIiPjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj50dDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMyI+MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzIuJm5ic3A7RXhwbGljaXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtpbXBsaWNpdC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM180Ij40PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuJm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMyI+MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7PC9zcGFuPiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM181Ij41PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGV4Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxpY2F0ZWQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM180Ij40PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGljYXRlZCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzUiPjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs1LiZuYnNwO0ZsYXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtuZXN0ZWQuPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfNiI+NjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfNiI+NjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzciPjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzciPjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM184Ij44PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM184Ij44PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfOSI+OTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfOSI+OTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzEwIj4xMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMTAiPjEwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvM19fMSI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMTEiPjExPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18xMSI+MTE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18xMiI+MTI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzEyIj4xMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzEzIj4xMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMTMiPjEzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMTQiPjE0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18xNCI+MTQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18xNSI+MTU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzE1Ij4xNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzE2Ij4xNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMTYiPjE2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvM19fMiI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18xNyI+MTc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5UVDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzNfXzIiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzE3Ij4xNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPnR0PC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18xOCI+MTg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDsyLiZuYnNwO0V4cGxpY2l0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7aW1wbGljaXQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMTkiPjE5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuJm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMTgiPjE4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuPHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDs8L3NwYW4+Jm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzIwIj4yMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxleCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsaWNhdGVkLjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMTkiPjE5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGljYXRlZCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzIwIj4yMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzUuJm5ic3A7RmxhdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO25lc3RlZC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18yMSI+MjE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzIxIj4yMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzIyIj4yMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMjIiPjIyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMjMiPjIzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18yMyI+MjM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18yNCI+MjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzI0Ij4yNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzI1Ij4yNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMjUiPjI1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvM19fMiI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMjYiPjI2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18yNiI+MjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18yNyI+Mjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzI3Ij4yNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzI4Ij4yODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMjgiPjI4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMjkiPjI5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18yOSI+Mjk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18zMCI+MzA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzMwIj4zMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzMxIj4zMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMzEiPjMxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvM19fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzMyIj4zMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlRUPC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvM19fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18zMiI+MzI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj50dDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMzMiPjMzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0Ljwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzM0Ij4zNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzMzIj4zMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7PC9zcGFuPiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18zNSI+MzU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsZXgmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGljYXRlZC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzM0Ij4zNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxpY2F0ZWQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4Ljwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18zNSI+MzU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs1LiZuYnNwO0ZsYXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtuZXN0ZWQuPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMzYiPjM2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18zNiI+MzY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM18zNyI+Mzc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzM3Ij4zNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzM4Ij4zODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfMzgiPjM4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTNfMzkiPjM5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvM18zOSI+Mzk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tM180MCI+NDA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8zXzQwIj40MDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20zXzQxIj40MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzNfNDEiPjQxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgPC90Ym9keT4KKyAgICA8L3RhYmxlPgorPGgyPkNvbnRleHQgKG51bWxpbmVzPTApPC9oMj4KKworICAgIDx0YWJsZSBjbGFzcz0iZGlmZiIgaWQ9ImRpZmZsaWJfY2hnX3RvNF9fdG9wIgorICAgICAgICAgICBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHJ1bGVzPSJncm91cHMiID4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgPHRoZWFkPjx0cj48dGggY2xhc3M9ImRpZmZfbmV4dCI+PGJyIC8+PC90aD48dGggY29sc3Bhbj0iMiIgY2xhc3M9ImRpZmZfaGVhZGVyIj5mcm9tPC90aD48dGggY2xhc3M9ImRpZmZfbmV4dCI+PGJyIC8+PC90aD48dGggY29sc3Bhbj0iMiIgY2xhc3M9ImRpZmZfaGVhZGVyIj50bzwvdGg+PC90cj48L3RoZWFkPgorICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiIGlkPSJkaWZmbGliX2NoZ190bzRfXzAiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzRfXzEiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTRfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlRUPC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvNF9fMSI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzRfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPnR0PC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNF8zIj4zPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0Ljwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb200XzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNF8zIj4zPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuPHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDs8L3NwYW4+Jm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb200XzUiPjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsZXgmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGljYXRlZC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG80XzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsaWNhdGVkJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzRfNSI+NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzUuJm5ic3A7RmxhdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO25lc3RlZC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PiAgICAgICAgCisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvNF9fMSI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvNF9fMiI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNF8xNyI+MTc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5UVDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzRfXzIiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG80XzE3Ij4xNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPnR0PC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNF8xOCI+MTg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDsyLiZuYnNwO0V4cGxpY2l0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7aW1wbGljaXQuPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTRfMTkiPjE5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuJm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzRfMTgiPjE4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuPHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDs8L3NwYW4+Jm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb200XzIwIj4yMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxleCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsaWNhdGVkLjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzRfMTkiPjE5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7NC4mbmJzcDtDb21wbGljYXRlZCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG80XzIwIj4yMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzUuJm5ic3A7RmxhdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO25lc3RlZC48L3NwYW4+PC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PiAgICAgICAgCisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvNF9fMiI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvNF9fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb200XzMyIj4zMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlRUPC9zcGFuPmVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvNF9fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNF8zMiI+MzI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj50dDwvc3Bhbj5lciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTRfMzMiPjMzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0Ljwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb200XzM0Ij4zNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG80XzMzIj4zMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7Jm5ic3A7PC9zcGFuPiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNF8zNSI+MzU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsZXgmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGljYXRlZC48L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG80XzM0Ij4zNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxpY2F0ZWQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4Ljwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNF8zNSI+MzU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4mbmJzcDsmbmJzcDsmbmJzcDs1LiZuYnNwO0ZsYXQmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtuZXN0ZWQuPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgPC90Ym9keT4KKyAgICA8L3RhYmxlPgorPGgyPlNhbWUgQ29udGV4dDwvaDI+CisKKyAgICA8dGFibGUgY2xhc3M9ImRpZmYiIGlkPSJkaWZmbGliX2NoZ190bzVfX3RvcCIKKyAgICAgICAgICAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBydWxlcz0iZ3JvdXBzIiA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDx0aGVhZD48dHI+PHRoIGNsYXNzPSJkaWZmX25leHQiPjxiciAvPjwvdGg+PHRoIGNvbHNwYW49IjIiIGNsYXNzPSJkaWZmX2hlYWRlciI+ZnJvbTwvdGg+PHRoIGNsYXNzPSJkaWZmX25leHQiPjxiciAvPjwvdGg+PHRoIGNvbHNwYW49IjIiIGNsYXNzPSJkaWZmX2hlYWRlciI+dG88L3RoPjwvdHI+PC90aGVhZD4KKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG81X190b3AiPnQ8L2E+PC90ZD48dGQ+PC90ZD48dGQ+Jm5ic3A7Tm8gRGlmZmVyZW5jZXMgRm91bmQmbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG81X190b3AiPnQ8L2E+PC90ZD48dGQ+PC90ZD48dGQ+Jm5ic3A7Tm8gRGlmZmVyZW5jZXMgRm91bmQmbmJzcDs8L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKzxoMj5TYW1lIEZ1bGw8L2gyPgorCisgICAgPHRhYmxlIGNsYXNzPSJkaWZmIiBpZD0iZGlmZmxpYl9jaGdfdG82X190b3AiCisgICAgICAgICAgIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgcnVsZXM9Imdyb3VwcyIgPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICA8dGhlYWQ+PHRyPjx0aCBjbGFzcz0iZGlmZl9uZXh0Ij48YnIgLz48L3RoPjx0aCBjb2xzcGFuPSIyIiBjbGFzcz0iZGlmZl9oZWFkZXIiPmZyb208L3RoPjx0aCBjbGFzcz0iZGlmZl9uZXh0Ij48YnIgLz48L3RoPjx0aCBjb2xzcGFuPSIyIiBjbGFzcz0iZGlmZl9oZWFkZXIiPnRvPC90aD48L3RyPjwvdGhlYWQ+CisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvNl9fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzEiPjE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvNl9fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8xIj4xPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmVUVGVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzIiPjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7MS4mbmJzcDtCZWF1dGlmdWwmbmJzcDtpcyZuYnNwO2JlVFRlciZuYnNwO3RoYW4mbmJzcDt1Z2x5LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMyI+MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsyLiZuYnNwO0V4cGxpY2l0Jm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7aW1wbGljaXQuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzMiPjM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfNCI+NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDszLiZuYnNwO1NpbXBsZSZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsZXguPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7My4mbmJzcDtTaW1wbGUmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGV4LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfNSI+NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsZXgmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGljYXRlZC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfNSI+NTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsZXgmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGljYXRlZC48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzYiPjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzYiPjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl83Ij43PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl83Ij43PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfOCI+ODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfOCI+ODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzkiPjk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzkiPjk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8xMCI+MTA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzEwIj4xMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzExIj4xMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMTEiPjExPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMTIiPjEyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8xMiI+MTI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8xMyI+MTM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzEzIj4xMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzE0Ij4xNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMTQiPjE0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMTUiPjE1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8xNSI+MTU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8xNiI+MTY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzE2Ij4xNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzE3Ij4xNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmVUVGVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzE3Ij4xNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmVUVGVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8xOCI+MTg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8xOCI+MTg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMTkiPjE5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuJm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMTkiPjE5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuJm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzIwIj4yMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsZXgmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGljYXRlZC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMjAiPjIwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxleCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsaWNhdGVkLjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMjEiPjIxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8yMSI+MjE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8yMiI+MjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzIyIj4yMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzIzIj4yMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMjMiPjIzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMjQiPjI0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8yNCI+MjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8yNSI+MjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzI1Ij4yNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzI2Ij4yNjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMjYiPjI2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMjciPjI3PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8yNyI+Mjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8yOCI+Mjg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzI4Ij4yODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzI5Ij4yOTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMjkiPjI5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMzAiPjMwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8zMCI+MzA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8zMSI+MzE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzMxIj4zMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzMyIj4zMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmVUVGVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzMyIj4zMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDsxLiZuYnNwO0JlYXV0aWZ1bCZuYnNwO2lzJm5ic3A7YmVUVGVyJm5ic3A7dGhhbiZuYnNwO3VnbHkuPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8zMyI+MzM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0LjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8zMyI+MzM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Mi4mbmJzcDtFeHBsaWNpdCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2ltcGxpY2l0LjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMzQiPjM0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuJm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMzQiPjM0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzMuJm5ic3A7U2ltcGxlJm5ic3A7aXMmbmJzcDtiZXR0ZXImbmJzcDt0aGFuJm5ic3A7Y29tcGxleC48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzM1Ij4zNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDsmbmJzcDsmbmJzcDs0LiZuYnNwO0NvbXBsZXgmbmJzcDtpcyZuYnNwO2JldHRlciZuYnNwO3RoYW4mbmJzcDtjb21wbGljYXRlZC48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMzUiPjM1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOyZuYnNwOzQuJm5ic3A7Q29tcGxleCZuYnNwO2lzJm5ic3A7YmV0dGVyJm5ic3A7dGhhbiZuYnNwO2NvbXBsaWNhdGVkLjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMzYiPjM2PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8zNiI+MzY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl8zNyI+Mzc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzM3Ij4zNzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzM4Ij4zODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfMzgiPjM4PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfMzkiPjM5PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl8zOSI+Mzk8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl80MCI+NDA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzQwIj40MDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzQxIj40MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfNDEiPjQxPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfNDIiPjQyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl80MiI+NDI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tNl80MyI+NDM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG82XzQzIj40MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb202XzQ0Ij40NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4xMjM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzZfNDQiPjQ0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTZfNDUiPjQ1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjEyMzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvNl80NSI+NDU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzPC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PgorICAgIDwvdGFibGU+Cis8aDI+RW1wdHkgQ29udGV4dDwvaDI+CisKKyAgICA8dGFibGUgY2xhc3M9ImRpZmYiIGlkPSJkaWZmbGliX2NoZ190bzdfX3RvcCIKKyAgICAgICAgICAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBydWxlcz0iZ3JvdXBzIiA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDx0aGVhZD48dHI+PHRoIGNsYXNzPSJkaWZmX25leHQiPjxiciAvPjwvdGg+PHRoIGNvbHNwYW49IjIiIGNsYXNzPSJkaWZmX2hlYWRlciI+ZnJvbTwvdGg+PHRoIGNsYXNzPSJkaWZmX25leHQiPjxiciAvPjwvdGg+PHRoIGNvbHNwYW49IjIiIGNsYXNzPSJkaWZmX2hlYWRlciI+dG88L3RoPjwvdHI+PC90aGVhZD4KKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG83X190b3AiPnQ8L2E+PC90ZD48dGQ+PC90ZD48dGQ+Jm5ic3A7Tm8gRGlmZmVyZW5jZXMgRm91bmQmbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG83X190b3AiPnQ8L2E+PC90ZD48dGQ+PC90ZD48dGQ+Jm5ic3A7Tm8gRGlmZmVyZW5jZXMgRm91bmQmbmJzcDs8L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKzxoMj5FbXB0eSBGdWxsPC9oMj4KKworICAgIDx0YWJsZSBjbGFzcz0iZGlmZiIgaWQ9ImRpZmZsaWJfY2hnX3RvOF9fdG9wIgorICAgICAgICAgICBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHJ1bGVzPSJncm91cHMiID4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgPHRoZWFkPjx0cj48dGggY2xhc3M9ImRpZmZfbmV4dCI+PGJyIC8+PC90aD48dGggY29sc3Bhbj0iMiIgY2xhc3M9ImRpZmZfaGVhZGVyIj5mcm9tPC90aD48dGggY2xhc3M9ImRpZmZfbmV4dCI+PGJyIC8+PC90aD48dGggY29sc3Bhbj0iMiIgY2xhc3M9ImRpZmZfaGVhZGVyIj50bzwvdGg+PC90cj48L3RoZWFkPgorICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzhfX3RvcCI+dDwvYT48L3RkPjx0ZD48L3RkPjx0ZD4mbmJzcDtFbXB0eSBGaWxlJm5ic3A7PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvOF9fdG9wIj50PC9hPjwvdGQ+PHRkPjwvdGQ+PHRkPiZuYnNwO0VtcHR5IEZpbGUmbmJzcDs8L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKzxoMj50YWJzaXplPTI8L2gyPgorCisgICAgPHRhYmxlIGNsYXNzPSJkaWZmIiBpZD0iZGlmZmxpYl9jaGdfdG85X190b3AiCisgICAgICAgICAgIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgcnVsZXM9Imdyb3VwcyIgPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgorICAgICAgICAKKyAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG85X18wIj48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG85X18wIj5mPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb205XzEiPjE8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvOV9fMCI+ZjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzlfMSI+MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzlfX3RvcCI+dDwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tOV8yIj4yPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9zcGFuPkxpbmUmbmJzcDsxOiZuYnNwO3ByZWNlZWRlZCZuYnNwO2J5Jm5ic3A7ZnJvbTpbdHRdJm5ic3A7dG86W3Nzc3NdPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvOV9fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvOV8yIj4yPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9zcGFuPkxpbmUmbmJzcDsxOiZuYnNwO3ByZWNlZWRlZCZuYnNwO2J5Jm5ic3A7ZnJvbTpbdHRdJm5ic3A7dG86W3Nzc3NdPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tOV8zIj4zPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Jm5ic3A7Jm5ic3A7PC9zcGFuPiZuYnNwOyZuYnNwO0xpbmUmbmJzcDsyOiZuYnNwO3ByZWNlZWRlZCZuYnNwO2J5Jm5ic3A7ZnJvbTpbc3N0dF0mbmJzcDt0bzpbc3Nzc3RdPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG85XzMiPjM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDsmbmJzcDs8L3NwYW4+Jm5ic3A7Jm5ic3A7TGluZSZuYnNwOzI6Jm5ic3A7cHJlY2VlZGVkJm5ic3A7YnkmbmJzcDtmcm9tOltzc3R0XSZuYnNwO3RvOltzc3NzdF08L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb205XzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+TGluZSZuYnNwOzM6Jm5ic3A7cHJlY2VlZGVkJm5ic3A7YnkmbmJzcDtmcm9tOltzc3RzdF0mbmJzcDt0bzpbc3Nzc3NzXTwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvOV80Ij40PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9zcGFuPkxpbmUmbmJzcDszOiZuYnNwO3ByZWNlZWRlZCZuYnNwO2J5Jm5ic3A7ZnJvbTpbc3N0c3RdJm5ic3A7dG86W3Nzc3Nzc108L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb205XzUiPjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+TGluZSZuYnNwOzQ6Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDs8L3NwYW4+aGFzJm5ic3A7ZnJvbTpbc3N0XSZuYnNwO3RvOltzc3NdJm5ic3A7YWZ0ZXImbmJzcDs6PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG85XzUiPjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+TGluZSZuYnNwOzQ6Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDs8L3NwYW4+aGFzJm5ic3A7ZnJvbTpbc3N0XSZuYnNwO3RvOltzc3NdJm5ic3A7YWZ0ZXImbmJzcDs6PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tOV82Ij42PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPkxpbmUmbmJzcDs1OiZuYnNwO2hhcyZuYnNwO2Zyb206W3RdJm5ic3A7dG86W3NzXSZuYnNwO2F0Jm5ic3A7ZW5kPHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4mbmJzcDs8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG85XzYiPjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+TGluZSZuYnNwOzU6Jm5ic3A7aGFzJm5ic3A7ZnJvbTpbdF0mbmJzcDt0bzpbc3NdJm5ic3A7YXQmbmJzcDtlbmQ8L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKzxoMj50YWJzaXplPWRlZmF1bHQ8L2gyPgorCisgICAgPHRhYmxlIGNsYXNzPSJkaWZmIiBpZD0iZGlmZmxpYl9jaGdfdG8xMF9fdG9wIgorICAgICAgICAgICBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHJ1bGVzPSJncm91cHMiID4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4KKyAgICAgICAgCisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvMTBfXzAiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEwX18wIj5mPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMF8xIj4xPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEwX18wIj5mPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTBfMSI+MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEwX190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEwXzIiPjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+TGluZSZuYnNwOzE6Jm5ic3A7cHJlY2VlZGVkJm5ic3A7YnkmbmJzcDtmcm9tOlt0dF0mbmJzcDt0bzpbc3Nzc108L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xMF9fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTBfMiI+MjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9jaGciPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvc3Bhbj5MaW5lJm5ic3A7MTombmJzcDtwcmVjZWVkZWQmbmJzcDtieSZuYnNwO2Zyb206W3R0XSZuYnNwO3RvOltzc3NzXTwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEwXzMiPjM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TGluZSZuYnNwOzI6Jm5ic3A7cHJlY2VlZGVkJm5ic3A7YnkmbmJzcDtmcm9tOltzc3R0XSZuYnNwO3RvOltzc3NzdF08L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEwXzMiPjM8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDsmbmJzcDs8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TGluZSZuYnNwOzI6Jm5ic3A7cHJlY2VlZGVkJm5ic3A7YnkmbmJzcDtmcm9tOltzc3R0XSZuYnNwO3RvOltzc3NzdF08L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMF80Ij40PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9zcGFuPkxpbmUmbmJzcDszOiZuYnNwO3ByZWNlZWRlZCZuYnNwO2J5Jm5ic3A7ZnJvbTpbc3N0c3RdJm5ic3A7dG86W3Nzc3Nzc108L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEwXzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+TGluZSZuYnNwOzM6Jm5ic3A7cHJlY2VlZGVkJm5ic3A7YnkmbmJzcDtmcm9tOltzc3RzdF0mbmJzcDt0bzpbc3Nzc3NzXTwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEwXzUiPjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+TGluZSZuYnNwOzQ6Jm5ic3A7Jm5ic3A7PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+aGFzJm5ic3A7ZnJvbTpbc3N0XSZuYnNwO3RvOltzc3NdJm5ic3A7YWZ0ZXImbmJzcDs6PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMF81Ij41PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPkxpbmUmbmJzcDs0OiZuYnNwOyZuYnNwOzxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Jm5ic3A7PC9zcGFuPmhhcyZuYnNwO2Zyb206W3NzdF0mbmJzcDt0bzpbc3NzXSZuYnNwO2FmdGVyJm5ic3A7OjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEwXzYiPjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+TGluZSZuYnNwOzU6Jm5ic3A7aGFzJm5ic3A7ZnJvbTpbdF0mbmJzcDt0bzpbc3NdJm5ic3A7YXQmbmJzcDtlbmQ8c3BhbiBjbGFzcz0iZGlmZl9zdWIiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEwXzYiPjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+TGluZSZuYnNwOzU6Jm5ic3A7aGFzJm5ic3A7ZnJvbTpbdF0mbmJzcDt0bzpbc3NdJm5ic3A7YXQmbmJzcDtlbmQ8L3RkPjwvdHI+CisgICAgICAgIDwvdGJvZHk+CisgICAgPC90YWJsZT4KKzxoMj5Db250ZXh0ICh3cmFwY29sdW1uPTE0LG51bWxpbmVzPTApPC9oMj4KKworICAgIDx0YWJsZSBjbGFzcz0iZGlmZiIgaWQ9ImRpZmZsaWJfY2hnX3RvMTFfX3RvcCIKKyAgICAgICAgICAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBydWxlcz0iZ3JvdXBzIiA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIAorICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiIGlkPSJkaWZmbGliX2NoZ190bzExX18wIj48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xMV9fMSI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTFfNCI+NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPmxpbmUmbmJzcDsyPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzExX18xIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTFfNCI+NDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPmxpbmUmbmJzcDsyJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7YWRkZTwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPmQ8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PiAgICAgICAgCisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvMTFfXzEiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzExX18yIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMV82Ij42PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs0Jm5ic3A7Jm5ic3A7Jm5ic3A7Y2hhbjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Zzwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xMV9fMiI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzExXzYiPjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzQmbmJzcDsmbmJzcDsmbmJzcDtjaGFuPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5HPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+ZTwvc3Bhbj5kPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+RTwvc3Bhbj5kPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTFfNyI+NzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7NTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Jm5ic3A7PC9zcGFuPiZuYnNwOyZuYnNwO2NoYW48c3BhbiBjbGFzcz0iZGlmZl9jaGciPmc8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMV83Ij43PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs1PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5hPC9zcGFuPiZuYnNwOyZuYnNwO2NoYW48c3BhbiBjbGFzcz0iZGlmZl9jaGciPkc8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj48L3NwYW4+ZWQ8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj48L3NwYW4+ZWQ8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMV84Ij44PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs2PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj4mbmJzcDs8L3NwYW4+Jm5ic3A7Jm5ic3A7Y2hhbmc8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzExXzgiPjg8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzY8c3BhbiBjbGFzcz0iZGlmZl9jaGciPmE8L3NwYW4+Jm5ic3A7Jm5ic3A7Y2hhbmc8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9jaGciPmU8L3NwYW4+ZDwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9jaGciPkU8L3NwYW4+ZDwvdGQ+PC90cj4KKyAgICAgICAgPC90Ym9keT4gICAgICAgIAorICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiIGlkPSJkaWZmbGliX2NoZ190bzExX18yIj48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xMV9fMyI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTFfMTAiPjEwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+bGluZSZuYnNwOzgmbmJzcDsmbmJzcDtzdWJ0cmE8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTFfXzMiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMV8xMCI+MTA8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj5saW5lJm5ic3A7ODwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPmN0ZWQ8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PiAgICAgICAgCisgICAgICAgIDx0Ym9keT4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvMTFfXzMiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzExX190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTExXzEyIj4xMjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPjEyMzQ1Njc4OTAxMjM0PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzExX190b3AiPnQ8L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMV8xMiI+MTI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj4xMjM0NTY3ODkwPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+NTY3ODkwMTIzNDU2ODk8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4wMTIzNDU8L3NwYW4+PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTFfMTMiPjEzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+c2hvcnQmbmJzcDtsaW5lPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTFfMTMiPjEzPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+YW5vdGhlciZuYnNwO2xvbmcmbmJzcDtsPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+aW5lJm5ic3A7dGhhdCZuYnNwO25lZWRzPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+Jm5ic3A7dG8mbmJzcDtiZSZuYnNwO3dyYXBwZWQ8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTFfMTQiPjE0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmp1c3QmbmJzcDtmaXQ8c3BhbiBjbGFzcz0iZGlmZl9jaGciPnM8L3NwYW4+Jm5ic3A7aW4hITwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTFfMTQiPjE0PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmp1c3QmbmJzcDtmaXQ8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlM8L3NwYW4+Jm5ic3A7aW4hITwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTExXzE1Ij4xNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5qdXN0Jm5ic3A7Zml0cyZuYnNwO2luJm5ic3A7dDwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTFfMTUiPjE1PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmp1c3QmbmJzcDtmaXRzJm5ic3A7aW4mbmJzcDt0PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+d28mbmJzcDtsaW5lPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5zPC9zcGFuPiZuYnNwO3l1cCEhPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPndvJm5ic3A7bGluZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Uzwvc3Bhbj4mbmJzcDt5dXAhITwvdGQ+PC90cj4KKyAgICAgICAgPC90Ym9keT4KKyAgICA8L3RhYmxlPgorPGgyPndyYXBjb2x1bW49MTQsc3BsaXRsaW5lcygpPC9oMj4KKworICAgIDx0YWJsZSBjbGFzcz0iZGlmZiIgaWQ9ImRpZmZsaWJfY2hnX3RvMTJfX3RvcCIKKyAgICAgICAgICAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBydWxlcz0iZ3JvdXBzIiA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIAorICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiIGlkPSJkaWZmbGliX2NoZ190bzEyX18wIj48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xMl9fMCI+ZjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTJfMSI+MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7MDwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEyX18wIj5mPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTJfMSI+MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7MDwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEyXzIiPjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzNDU2Nzg5MDEyMzQ8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEyXzIiPjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzNDU2Nzg5MDEyMzQ8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj41Njc4OTAxMjM0NTY4OTwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj41Njc4OTAxMjM0NTY4OTwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvMTJfXzEiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4wMTIzNDU8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MDEyMzQ1PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTJfMyI+MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7MTwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTJfMyI+MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7MTwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTJfXzEiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEyXzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj5saW5lJm5ic3A7Mjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xMl9fMSI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEyXzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj5saW5lJm5ic3A7MiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2FkZGU8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj5kPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEyXzUiPjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEyXzUiPjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEyX18yIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMl82Ij42PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs0Jm5ic3A7Jm5ic3A7Jm5ic3A7Y2hhbjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Zzwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xMl9fMiI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEyXzYiPjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzQmbmJzcDsmbmJzcDsmbmJzcDtjaGFuPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5HPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+ZTwvc3Bhbj5kPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+RTwvc3Bhbj5kPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8xMl9fMiI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEyXzciPjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPiZuYnNwOzwvc3Bhbj4mbmJzcDsmbmJzcDtjaGFuPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5nPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTJfNyI+NzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7NTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+YTwvc3Bhbj4mbmJzcDsmbmJzcDtjaGFuPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5HPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+PC9zcGFuPmVkPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+PC9zcGFuPmVkPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTJfOCI+ODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7NjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Jm5ic3A7PC9zcGFuPiZuYnNwOyZuYnNwO2NoYW5nPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMl84Ij44PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs2PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5hPC9zcGFuPiZuYnNwOyZuYnNwO2NoYW5nPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8xMl9fMyI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+ZTwvc3Bhbj5kPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+RTwvc3Bhbj5kPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTJfOSI+OTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7NzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTJfOSI+OTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7NzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTJfXzMiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEyXzEwIj4xMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPmxpbmUmbmJzcDs4Jm5ic3A7Jm5ic3A7c3VidHJhPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEyX18zIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTJfMTAiPjEwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+bGluZSZuYnNwOzg8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj5jdGVkPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEyXzExIj4xMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7OTwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTJfMTEiPjExPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs5PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xMl9fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMl8xMiI+MTI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4xMjM0NTY3ODkwMTIzNDwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xMl9fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTJfMTIiPjEyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+MTIzNDU2Nzg5MDwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPjU2Nzg5MDEyMzQ1Njg5PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+MDEyMzQ1PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEyXzEzIj4xMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPnNob3J0Jm5ic3A7bGluZTwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEyXzEzIj4xMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPmFub3RoZXImbmJzcDtsb25nJm5ic3A7bDwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPmluZSZuYnNwO3RoYXQmbmJzcDtuZWVkczwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwO3RvJm5ic3A7YmUmbmJzcDt3cmFwcGVkPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEyXzE0Ij4xNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5qdXN0Jm5ic3A7Zml0PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5zPC9zcGFuPiZuYnNwO2luISE8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEyXzE0Ij4xNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5qdXN0Jm5ic3A7Zml0PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5TPC9zcGFuPiZuYnNwO2luISE8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMl8xNSI+MTU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+anVzdCZuYnNwO2ZpdHMmbmJzcDtpbiZuYnNwO3Q8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEyXzE1Ij4xNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5qdXN0Jm5ic3A7Zml0cyZuYnNwO2luJm5ic3A7dDwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPndvJm5ic3A7bGluZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+czwvc3Bhbj4mbmJzcDt5dXAhITwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj53byZuYnNwO2xpbmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlM8L3NwYW4+Jm5ic3A7eXVwISE8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xMl8xNiI+MTY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+dGhlJm5ic3A7ZW5kPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xMl8xNiI+MTY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+dGhlJm5ic3A7ZW5kPC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PgorICAgIDwvdGFibGU+Cis8aDI+d3JhcGNvbHVtbj0xNCxzcGxpdGxpbmVzKFRydWUpPC9oMj4KKworICAgIDx0YWJsZSBjbGFzcz0iZGlmZiIgaWQ9ImRpZmZsaWJfY2hnX3RvMTNfX3RvcCIKKyAgICAgICAgICAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBydWxlcz0iZ3JvdXBzIiA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CisgICAgICAgIAorICAgICAgICA8dGJvZHk+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiIGlkPSJkaWZmbGliX2NoZ190bzEzX18wIj48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xM19fMCI+ZjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTNfMSI+MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7MDwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEzX18wIj5mPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTNfMSI+MTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7MDwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEzXzIiPjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzNDU2Nzg5MDEyMzQ8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEzXzIiPjI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MTIzNDU2Nzg5MDEyMzQ8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj41Njc4OTAxMjM0NTY4OTwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj41Njc4OTAxMjM0NTY4OTwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCIgaWQ9ImRpZmZsaWJfY2hnX3RvMTNfXzEiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4wMTIzNDU8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+MDEyMzQ1PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTNfMyI+MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7MTwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTNfMyI+MzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7MTwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTNfXzEiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEzXzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj5saW5lJm5ic3A7Mjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xM19fMSI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEzXzQiPjQ8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj5saW5lJm5ic3A7MiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2FkZGU8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfYWRkIj5kPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEzXzUiPjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzM8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEzXzUiPjU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzM8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEzX18yIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xM182Ij42PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs0Jm5ic3A7Jm5ic3A7Jm5ic3A7Y2hhbjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Zzwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xM19fMiI+bjwvYT48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEzXzYiPjY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzQmbmJzcDsmbmJzcDsmbmJzcDtjaGFuPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5HPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+ZTwvc3Bhbj5kPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+RTwvc3Bhbj5kPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8xM19fMiI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEzXzciPjc8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+bGluZSZuYnNwOzU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPiZuYnNwOzwvc3Bhbj4mbmJzcDsmbmJzcDtjaGFuPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5nPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTNfNyI+NzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7NTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+YTwvc3Bhbj4mbmJzcDsmbmJzcDtjaGFuPHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5HPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+PC9zcGFuPmVkPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+PC9zcGFuPmVkPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTNfOCI+ODwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7NjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+Jm5ic3A7PC9zcGFuPiZuYnNwOyZuYnNwO2NoYW5nPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xM184Ij44PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs2PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5hPC9zcGFuPiZuYnNwOyZuYnNwO2NoYW5nPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0IiBpZD0iZGlmZmxpYl9jaGdfdG8xM19fMyI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+ZTwvc3Bhbj5kPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+RTwvc3Bhbj5kPC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJmcm9tMTNfOSI+OTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7NzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTNfOSI+OTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7NzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PGEgaHJlZj0iI2RpZmZsaWJfY2hnX3RvMTNfXzMiPm48L2E+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEzXzEwIj4xMDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPmxpbmUmbmJzcDs4Jm5ic3A7Jm5ic3A7c3VidHJhPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjxhIGhyZWY9IiNkaWZmbGliX2NoZ190bzEzX18zIj5uPC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTNfMTAiPjEwPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+bGluZSZuYnNwOzg8L3NwYW4+PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiPj48L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj5jdGVkPC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEzXzExIj4xMTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5saW5lJm5ic3A7OTwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTNfMTEiPjExPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPmxpbmUmbmJzcDs5PC90ZD48L3RyPgorICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xM19fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xM18xMiI+MTI8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImRpZmZfc3ViIj4xMjM0NTY3ODkwMTIzNDwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48YSBocmVmPSIjZGlmZmxpYl9jaGdfdG8xM19fdG9wIj50PC9hPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9InRvMTNfMTIiPjEyPC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX2FkZCI+MTIzNDU2Nzg5MDwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPjU2Nzg5MDEyMzQ1Njg5PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPjxzcGFuIGNsYXNzPSJkaWZmX3N1YiI+MDEyMzQ1PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOzwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEzXzEzIj4xMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9zdWIiPnNob3J0Jm5ic3A7bGluZTwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEzXzEzIj4xMzwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPmFub3RoZXImbmJzcDtsb25nJm5ic3A7bDwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPmluZSZuYnNwO3RoYXQmbmJzcDtuZWVkczwvc3Bhbj48L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj48c3BhbiBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwO3RvJm5ic3A7YmUmbmJzcDt3cmFwcGVkPC9zcGFuPjwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0iZnJvbTEzXzE0Ij4xNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5qdXN0Jm5ic3A7Zml0PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5zPC9zcGFuPiZuYnNwO2luISE8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEzXzE0Ij4xNDwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5qdXN0Jm5ic3A7Zml0PHNwYW4gY2xhc3M9ImRpZmZfY2hnIj5TPC9zcGFuPiZuYnNwO2luISE8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xM18xNSI+MTU8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+anVzdCZuYnNwO2ZpdHMmbmJzcDtpbiZuYnNwO3Q8L3RkPjx0ZCBjbGFzcz0iZGlmZl9uZXh0Ij48L3RkPjx0ZCBjbGFzcz0iZGlmZl9oZWFkZXIiIGlkPSJ0bzEzXzE1Ij4xNTwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj5qdXN0Jm5ic3A7Zml0cyZuYnNwO2luJm5ic3A7dDwvdGQ+PC90cj4KKyAgICAgICAgICAgIDx0cj48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIj4+PC90ZD48dGQgbm93cmFwPSJub3dyYXAiPndvJm5ic3A7bGluZTxzcGFuIGNsYXNzPSJkaWZmX2NoZyI+czwvc3Bhbj4mbmJzcDt5dXAhITwvdGQ+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciI+PjwvdGQ+PHRkIG5vd3JhcD0ibm93cmFwIj53byZuYnNwO2xpbmU8c3BhbiBjbGFzcz0iZGlmZl9jaGciPlM8L3NwYW4+Jm5ic3A7eXVwISE8L3RkPjwvdHI+CisgICAgICAgICAgICA8dHI+PHRkIGNsYXNzPSJkaWZmX25leHQiPjwvdGQ+PHRkIGNsYXNzPSJkaWZmX2hlYWRlciIgaWQ9ImZyb20xM18xNiI+MTY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+dGhlJm5ic3A7ZW5kPC90ZD48dGQgY2xhc3M9ImRpZmZfbmV4dCI+PC90ZD48dGQgY2xhc3M9ImRpZmZfaGVhZGVyIiBpZD0idG8xM18xNiI+MTY8L3RkPjx0ZCBub3dyYXA9Im5vd3JhcCI+dGhlJm5ic3A7ZW5kPC90ZD48L3RyPgorICAgICAgICA8L3Rib2R5PgorICAgIDwvdGFibGU+Cis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kaXJjYWNoZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RpcmNhY2hlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWQzMWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kaXJjYWNoZS5weQpAQCAtMCwwICsxLDc3IEBACisiIiIKKyAgVGVzdCBjYXNlcyBmb3IgdGhlIGRpcmNhY2hlIG1vZHVsZQorICBOaWNrIE1hdGhld3NvbgorIiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCitkaXJjYWNoZSA9IGltcG9ydF9tb2R1bGUoJ2RpcmNhY2hlJywgZGVwcmVjYXRlZD1UcnVlKQoraW1wb3J0IG9zLCB0aW1lLCBzeXMsIHRlbXBmaWxlCisKKworY2xhc3MgRGlyY2FjaGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIGZuYW1lIGluIG9zLmxpc3RkaXIoc2VsZi50ZW1wZGlyKToKKyAgICAgICAgICAgIHNlbGYuZGVsVGVtcChmbmFtZSkKKyAgICAgICAgb3Mucm1kaXIoc2VsZi50ZW1wZGlyKQorCisgICAgZGVmIHdyaXRlVGVtcChzZWxmLCBmbmFtZSk6CisgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsIGZuYW1lKSwgJ3cnKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiBta2RpclRlbXAoc2VsZiwgZm5hbWUpOgorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCBmbmFtZSkpCisKKyAgICBkZWYgZGVsVGVtcChzZWxmLCBmbmFtZSk6CisgICAgICAgIGZuYW1lID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgZm5hbWUpCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZm5hbWUpOgorICAgICAgICAgICAgb3Mucm1kaXIoZm5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy51bmxpbmsoZm5hbWUpCisKKyAgICBkZWYgdGVzdF9saXN0ZGlyKHNlbGYpOgorICAgICAgICAjIyBTVUNDRVNTRlVMIENBU0VTCisgICAgICAgIGVudHJpZXMgPSBkaXJjYWNoZS5saXN0ZGlyKHNlbGYudGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyaWVzLCBbXSkKKworICAgICAgICAjIENoZWNrIHRoYXQgY2FjaGUgaXMgYWN0dWFsbHkgY2FjaGluZywgbm90IGp1c3QgcGFzc2luZyB0aHJvdWdoLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlyY2FjaGUubGlzdGRpcihzZWxmLnRlbXBkaXIpIGlzIGVudHJpZXMpCisKKyAgICAgICAgIyBEaXJlY3RvcmllcyBhcmVuJ3QgImZpbGVzIiBvbiBXaW5kb3dzLCBhbmQgZGlyZWN0b3J5IG10aW1lIGhhcworICAgICAgICAjIG5vdGhpbmcgdG8gZG8gd2l0aCB3aGVuIGZpbGVzIHVuZGVyIGEgZGlyZWN0b3J5IGdldCBjcmVhdGVkLgorICAgICAgICAjIFRoYXQgaXMsIHRoaXMgdGVzdCBjYW4ndCBwb3NzaWJseSB3b3JrIHVuZGVyIFdpbmRvd3MgLS0gZGlyY2FjaGUKKyAgICAgICAgIyBpcyBvbmx5IGdvb2QgZm9yIGNhcHR1cmluZyBhIG9uZS1zaG90IHNuYXBzaG90IHRoZXJlLgorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gbm90IGluICgnd2luJywgJ29zMicpOgorICAgICAgICAgICAgIyBTYWRseSwgZGlyY2FjaGUgaGFzIHRoZSBzYW1lIGdyYW51bGFyaXR5IGFzIHN0YXQubXRpbWUsIGFuZCBzbworICAgICAgICAgICAgIyBjYW4ndCBub3RpY2UgYW55IGNoYW5nZXMgdGhhdCBvY2N1cnJlZCB3aXRoaW4gMSBzZWMgb2YgdGhlIGxhc3QKKyAgICAgICAgICAgICMgdGltZSBpdCBleGFtaW5lZCBhIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgICAgIHNlbGYud3JpdGVUZW1wKCJ0ZXN0MSIpCisgICAgICAgICAgICBlbnRyaWVzID0gZGlyY2FjaGUubGlzdGRpcihzZWxmLnRlbXBkaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJpZXMsIFsndGVzdDEnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJjYWNoZS5saXN0ZGlyKHNlbGYudGVtcGRpcikgaXMgZW50cmllcykKKworICAgICAgICAjIyBVTlNVQ0NFU1NGVUwgQ0FTRVMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZGlyY2FjaGUubGlzdGRpciwgc2VsZi50ZW1wZGlyKyJfbm9uZXhpc3RlbnQiKQorCisgICAgZGVmIHRlc3RfYW5ub3RhdGUoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVUZW1wKCJ0ZXN0MiIpCisgICAgICAgIHNlbGYubWtkaXJUZW1wKCJBIikKKyAgICAgICAgbHN0ID0gWydBJywgJ3Rlc3QyJywgJ3Rlc3Rfbm9uZXhpc3RlbnQnXQorICAgICAgICBkaXJjYWNoZS5hbm5vdGF0ZShzZWxmLnRlbXBkaXIsIGxzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QsIFsnQS8nLCAndGVzdDInLCAndGVzdF9ub25leGlzdGVudCddKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0cnk6CisgICAgICAgIHJ1bl91bml0dGVzdChEaXJjYWNoZVRlc3RzKQorICAgIGZpbmFsbHk6CisgICAgICAgIGRpcmNhY2hlLnJlc2V0KCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kaXMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kaXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlNGI3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Rpcy5weQpAQCAtMCwwICsxLDE1MSBAQAorIyBNaW5pbWFsIHRlc3RzIGZvciBkaXMgbW9kdWxlCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgZGlzCitpbXBvcnQgU3RyaW5nSU8KKworCitkZWYgX2YoYSk6CisgICAgcHJpbnQgYQorICAgIHJldHVybiAxCisKK2Rpc19mID0gIiIiXAorICUtNGQgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAwIChhKQorICAgICAgICAgICAgICAzIFBSSU5UX0lURU0KKyAgICAgICAgICAgICAgNCBQUklOVF9ORVdMSU5FCisKKyAlLTRkICAgICAgICAgNSBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMSAoMSkKKyAgICAgICAgICAgICAgOCBSRVRVUk5fVkFMVUUKKyIiIiUoX2YuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vICsgMSwKKyAgICAgX2YuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vICsgMikKKworCitkZWYgYnVnNzA4OTAxKCk6CisgICAgZm9yIHJlcyBpbiByYW5nZSgxLAorICAgICAgICAgICAgICAgICAgICAgMTApOgorICAgICAgICBwYXNzCisKK2Rpc19idWc3MDg5MDEgPSAiIiJcCisgJS00ZCAgICAgICAgIDAgU0VUVVBfTE9PUCAgICAgICAgICAgICAgMjMgKHRvIDI2KQorICAgICAgICAgICAgICAzIExPQURfR0xPQkFMICAgICAgICAgICAgICAwIChyYW5nZSkKKyAgICAgICAgICAgICAgNiBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMSAoMSkKKworICUtNGQgICAgICAgICA5IExPQURfQ09OU1QgICAgICAgICAgICAgICAyICgxMCkKKyAgICAgICAgICAgICAxMiBDQUxMX0ZVTkNUSU9OICAgICAgICAgICAgMgorICAgICAgICAgICAgIDE1IEdFVF9JVEVSCisgICAgICAgID4+ICAgMTYgRk9SX0lURVIgICAgICAgICAgICAgICAgIDYgKHRvIDI1KQorICAgICAgICAgICAgIDE5IFNUT1JFX0ZBU1QgICAgICAgICAgICAgICAwIChyZXMpCisKKyAlLTRkICAgICAgICAyMiBKVU1QX0FCU09MVVRFICAgICAgICAgICAxNgorICAgICAgICA+PiAgIDI1IFBPUF9CTE9DSworICAgICAgICA+PiAgIDI2IExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQorICAgICAgICAgICAgIDI5IFJFVFVSTl9WQUxVRQorIiIiJShidWc3MDg5MDEuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vICsgMSwKKyAgICAgYnVnNzA4OTAxLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubyArIDIsCisgICAgIGJ1ZzcwODkwMS5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8gKyAzKQorCisKK2RlZiBidWcxMzMzOTgyKHg9W10pOgorICAgIGFzc2VydCAwLCAoW3MgZm9yIHMgaW4geF0gKworICAgICAgICAgICAgICAxKQorICAgIHBhc3MKKworZGlzX2J1ZzEzMzM5ODIgPSAiIiJcCisgJS00ZCAgICAgICAgIDAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDApCisgICAgICAgICAgICAgIDMgUE9QX0pVTVBfSUZfVFJVRSAgICAgICAgNDEKKyAgICAgICAgICAgICAgNiBMT0FEX0dMT0JBTCAgICAgICAgICAgICAgMCAoQXNzZXJ0aW9uRXJyb3IpCisgICAgICAgICAgICAgIDkgQlVJTERfTElTVCAgICAgICAgICAgICAgIDAKKyAgICAgICAgICAgICAxMiBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoeCkKKyAgICAgICAgICAgICAxNSBHRVRfSVRFUgorICAgICAgICA+PiAgIDE2IEZPUl9JVEVSICAgICAgICAgICAgICAgIDEyICh0byAzMSkKKyAgICAgICAgICAgICAxOSBTVE9SRV9GQVNUICAgICAgICAgICAgICAgMSAocykKKyAgICAgICAgICAgICAyMiBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMSAocykKKyAgICAgICAgICAgICAyNSBMSVNUX0FQUEVORCAgICAgICAgICAgICAgMgorICAgICAgICAgICAgIDI4IEpVTVBfQUJTT0xVVEUgICAgICAgICAgIDE2CisKKyAlLTRkICAgPj4gICAzMSBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMiAoMSkKKyAgICAgICAgICAgICAzNCBCSU5BUllfQURECisgICAgICAgICAgICAgMzUgQ0FMTF9GVU5DVElPTiAgICAgICAgICAgIDEKKyAgICAgICAgICAgICAzOCBSQUlTRV9WQVJBUkdTICAgICAgICAgICAgMQorCisgJS00ZCAgID4+ICAgNDEgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKE5vbmUpCisgICAgICAgICAgICAgNDQgUkVUVVJOX1ZBTFVFCisiIiIlKGJ1ZzEzMzM5ODIuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vICsgMSwKKyAgICAgYnVnMTMzMzk4Mi5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8gKyAyLAorICAgICBidWcxMzMzOTgyLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubyArIDMpCisKK19CSUdfTElORU5PX0ZPUk1BVCA9ICIiIlwKKyUzZCAgICAgICAgICAgMCBMT0FEX0dMT0JBTCAgICAgICAgICAgICAgMCAoc3BhbSkKKyAgICAgICAgICAgICAgMyBQT1BfVE9QCisgICAgICAgICAgICAgIDQgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKE5vbmUpCisgICAgICAgICAgICAgIDcgUkVUVVJOX1ZBTFVFCisiIiIKKworY2xhc3MgRGlzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBkb19kaXNhc3NlbWJseV90ZXN0KHNlbGYsIGZ1bmMsIGV4cGVjdGVkKToKKyAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHN5cy5zdGRvdXQgPSBzCisgICAgICAgIGRpcy5kaXMoZnVuYykKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0CisgICAgICAgIGdvdCA9IHMuZ2V0dmFsdWUoKQorICAgICAgICAjIFRyaW0gdHJhaWxpbmcgYmxhbmtzIChpZiBhbnkpLgorICAgICAgICBsaW5lcyA9IGdvdC5zcGxpdCgnXG4nKQorICAgICAgICBsaW5lcyA9IFtsaW5lLnJzdHJpcCgpIGZvciBsaW5lIGluIGxpbmVzXQorICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkLnNwbGl0KCJcbiIpCisgICAgICAgIGltcG9ydCBkaWZmbGliCisgICAgICAgIGlmIGV4cGVjdGVkICE9IGxpbmVzOgorICAgICAgICAgICAgc2VsZi5mYWlsKAorICAgICAgICAgICAgICAgICJldmVudHMgZGlkIG5vdCBtYXRjaCBleHBlY3RhdGlvbjpcbiIgKworICAgICAgICAgICAgICAgICJcbiIuam9pbihkaWZmbGliLm5kaWZmKGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzKSkpCisKKyAgICBkZWYgdGVzdF9vcG1hcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXMub3BtYXBbIlNUT1BfQ09ERSJdLCAwKQorICAgICAgICBzZWxmLmFzc2VydEluKGRpcy5vcG1hcFsiTE9BRF9DT05TVCJdLCBkaXMuaGFzY29uc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGlzLm9wbWFwWyJTVE9SRV9OQU1FIl0sIGRpcy5oYXNuYW1lKQorCisgICAgZGVmIHRlc3Rfb3BuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcy5vcG5hbWVbZGlzLm9wbWFwWyJMT0FEX0ZBU1QiXV0sICJMT0FEX0ZBU1QiKQorCisgICAgZGVmIHRlc3RfYm91bmRhcmllcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXMub3BtYXBbIkVYVEVOREVEX0FSRyJdLCBkaXMuRVhURU5ERURfQVJHKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcy5vcG1hcFsiU1RPUkVfTkFNRSJdLCBkaXMuSEFWRV9BUkdVTUVOVCkKKworICAgIGRlZiB0ZXN0X2RpcyhzZWxmKToKKyAgICAgICAgc2VsZi5kb19kaXNhc3NlbWJseV90ZXN0KF9mLCBkaXNfZikKKworICAgIGRlZiB0ZXN0X2J1Z183MDg5MDEoc2VsZik6CisgICAgICAgIHNlbGYuZG9fZGlzYXNzZW1ibHlfdGVzdChidWc3MDg5MDEsIGRpc19idWc3MDg5MDEpCisKKyAgICBkZWYgdGVzdF9idWdfMTMzMzk4MihzZWxmKToKKyAgICAgICAgIyBUaGlzIG9uZSBpcyBjaGVja2luZyBieXRlY29kZXMgZ2VuZXJhdGVkIGZvciBhbiBgYXNzZXJ0YCBzdGF0ZW1lbnQsCisgICAgICAgICMgc28gZmFpbHMgaWYgdGhlIHRlc3RzIGFyZSBydW4gd2l0aCAtTy4gIFNraXAgdGhpcyB0ZXN0IHRoZW4uCisgICAgICAgIGlmIF9fZGVidWdfXzoKKyAgICAgICAgICAgIHNlbGYuZG9fZGlzYXNzZW1ibHlfdGVzdChidWcxMzMzOTgyLCBkaXNfYnVnMTMzMzk4MikKKworICAgIGRlZiB0ZXN0X2JpZ19saW5lbm9zKHNlbGYpOgorICAgICAgICBkZWYgZnVuYyhjb3VudCk6CisgICAgICAgICAgICBuYW1lc3BhY2UgPSB7fQorICAgICAgICAgICAgZnVuYyA9ICJkZWYgZm9vKCk6XG4gIiArICIiLmpvaW4oWyJcbiAiXSAqIGNvdW50ICsgWyJzcGFtXG4iXSkKKyAgICAgICAgICAgIGV4ZWMgZnVuYyBpbiBuYW1lc3BhY2UKKyAgICAgICAgICAgIHJldHVybiBuYW1lc3BhY2VbJ2ZvbyddCisKKyAgICAgICAgIyBUZXN0IGFsbCBzbWFsbCByYW5nZXMKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEsIDMwMCk6CisgICAgICAgICAgICBleHBlY3RlZCA9IF9CSUdfTElORU5PX0ZPUk1BVCAlIChpICsgMikKKyAgICAgICAgICAgIHNlbGYuZG9fZGlzYXNzZW1ibHlfdGVzdChmdW5jKGkpLCBleHBlY3RlZCkKKworICAgICAgICAjIFRlc3Qgc29tZSBsYXJnZXIgcmFuZ2VzIHRvbworICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMzAwLCA1MDAwLCAxMCk6CisgICAgICAgICAgICBleHBlY3RlZCA9IF9CSUdfTElORU5PX0ZPUk1BVCAlIChpICsgMikKKyAgICAgICAgICAgIHNlbGYuZG9fZGlzYXNzZW1ibHlfdGVzdChmdW5jKGkpLCBleHBlY3RlZCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChEaXNUZXN0cykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kaXN0dXRpbHMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kaXN0dXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTljYmJiNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Rpc3R1dGlscy5weQpAQCAtMCwwICsxLDE4IEBACisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLgorCitUaGUgdGVzdHMgZm9yIGRpc3R1dGlscyBhcmUgZGVmaW5lZCBpbiB0aGUgZGlzdHV0aWxzLnRlc3RzIHBhY2thZ2U7Cit0aGUgdGVzdF9zdWl0ZSgpIGZ1bmN0aW9uIHRoZXJlIHJldHVybnMgYSB0ZXN0IHN1aXRlIHRoYXQncyByZWFkeSB0bworYmUgcnVuLgorIiIiCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgZGlzdHV0aWxzLnRlc3RzCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoZGlzdHV0aWxzLnRlc3RzLnRlc3Rfc3VpdGUoKSkKKyAgICB0ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGwucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kbC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MDY5YTc3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZGwucHkKQEAgLTAsMCArMSwzOSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIiIiVGVzdCBkbG1vZHVsZS5jCisgICBSb2dlciBFLiBNYXNzZSAgcmV2aXNlZCBzdHJhdGVneSBieSBCYXJyeSBXYXJzYXcKKyIiIgoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBpbXBvcnRfbW9kdWxlCitkbCA9IGltcG9ydF9tb2R1bGUoJ2RsJywgZGVwcmVjYXRlZD1UcnVlKQorCitzaGFyZWRsaWJzID0gWworICAgICgnL3Vzci9saWIvbGliYy5zbycsICdnZXRwaWQnKSwKKyAgICAoJy9saWIvbGliYy5zby42JywgJ2dldHBpZCcpLAorICAgICgnL3Vzci9iaW4vY3lnd2luMS5kbGwnLCAnZ2V0cGlkJyksCisgICAgKCcvdXNyL2xpYi9saWJjLmR5bGliJywgJ2dldHBpZCcpLAorICAgIF0KKworZGVmIHRlc3RfbWFpbigpOgorICAgIGZvciBzLCBmdW5jIGluIHNoYXJlZGxpYnM6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ3RyeWluZyB0byBvcGVuOicsIHMsCisgICAgICAgICAgICBsID0gZGwub3BlbihzKQorICAgICAgICBleGNlcHQgZGwuZXJyb3IsIGVycjoKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ2ZhaWxlZCcsIHJlcHIoc3RyKGVycikpCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICdzdWNjZWVkZWQuLi4nLAorICAgICAgICAgICAgbC5jYWxsKGZ1bmMpCisgICAgICAgICAgICBsLmNsb3NlKCkKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ3dvcmtlZCEnCisgICAgICAgICAgICBicmVhaworICAgIGVsc2U6CisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAnQ291bGQgbm90IG9wZW4gYW55IHNoYXJlZCBsaWJyYXJpZXMnCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZG9jdGVzdC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RvY3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUwNTdjOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RvY3Rlc3QucHkKQEAgLTAsMCArMSwyNzAxIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIiIiCitUZXN0IHNjcmlwdCBmb3IgZG9jdGVzdC4KKyIiIgorCitpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IGRvY3Rlc3QKKworIyBOT1RFOiBUaGVyZSBhcmUgc29tZSBhZGRpdGlvbmFsIHRlc3RzIHJlbGF0aW5nIHRvIGludGVyYWN0aW9uIHdpdGgKKyMgICAgICAgemlwaW1wb3J0IGluIHRoZSB0ZXN0X3ppcGltcG9ydF9zdXBwb3J0IHRlc3QgbW9kdWxlLgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBTYW1wbGUgT2JqZWN0cyAodXNlZCBieSB0ZXN0IGNhc2VzKQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgc2FtcGxlX2Z1bmModik6CisgICAgIiIiCisgICAgQmxhaCBibGFoCisKKyAgICA+Pj4gcHJpbnQgc2FtcGxlX2Z1bmMoMjIpCisgICAgNDQKKworICAgIFllZSBoYSEKKyAgICAiIiIKKyAgICByZXR1cm4gdit2CisKK2NsYXNzIFNhbXBsZUNsYXNzOgorICAgICIiIgorICAgID4+PiBwcmludCAxCisgICAgMQorCisgICAgPj4+ICMgY29tbWVudHMgZ2V0IGlnbm9yZWQuICBzbyBhcmUgZW1wdHkgUFMxIGFuZCBQUzIgcHJvbXB0czoKKyAgICA+Pj4KKyAgICAuLi4KKworICAgIE11bHRpbGluZSBleGFtcGxlOgorICAgID4+PiBzYyA9IFNhbXBsZUNsYXNzKDMpCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAuLi4gICAgIHNjID0gc2MuZG91YmxlKCkKKyAgICAuLi4gICAgIHByaW50IHNjLmdldCgpLAorICAgIDYgMTIgMjQgNDggOTYgMTkyIDM4NCA3NjggMTUzNiAzMDcyCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbCk6CisgICAgICAgICIiIgorICAgICAgICA+Pj4gcHJpbnQgU2FtcGxlQ2xhc3MoMTIpLmdldCgpCisgICAgICAgIDEyCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnZhbCA9IHZhbAorCisgICAgZGVmIGRvdWJsZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgID4+PiBwcmludCBTYW1wbGVDbGFzcygxMikuZG91YmxlKCkuZ2V0KCkKKyAgICAgICAgMjQKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBTYW1wbGVDbGFzcyhzZWxmLnZhbCArIHNlbGYudmFsKQorCisgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgID4+PiBwcmludCBTYW1wbGVDbGFzcygtNSkuZ2V0KCkKKyAgICAgICAgLTUKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLnZhbAorCisgICAgZGVmIGFfc3RhdGljbWV0aG9kKHYpOgorICAgICAgICAiIiIKKyAgICAgICAgPj4+IHByaW50IFNhbXBsZUNsYXNzLmFfc3RhdGljbWV0aG9kKDEwKQorICAgICAgICAxMQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHYrMQorICAgIGFfc3RhdGljbWV0aG9kID0gc3RhdGljbWV0aG9kKGFfc3RhdGljbWV0aG9kKQorCisgICAgZGVmIGFfY2xhc3NtZXRob2QoY2xzLCB2KToKKyAgICAgICAgIiIiCisgICAgICAgID4+PiBwcmludCBTYW1wbGVDbGFzcy5hX2NsYXNzbWV0aG9kKDEwKQorICAgICAgICAxMgorICAgICAgICA+Pj4gcHJpbnQgU2FtcGxlQ2xhc3MoMCkuYV9jbGFzc21ldGhvZCgxMCkKKyAgICAgICAgMTIKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB2KzIKKyAgICBhX2NsYXNzbWV0aG9kID0gY2xhc3NtZXRob2QoYV9jbGFzc21ldGhvZCkKKworICAgIGFfcHJvcGVydHkgPSBwcm9wZXJ0eShnZXQsIGRvYz0iIiIKKyAgICAgICAgPj4+IHByaW50IFNhbXBsZUNsYXNzKDIyKS5hX3Byb3BlcnR5CisgICAgICAgIDIyCisgICAgICAgICIiIikKKworICAgIGNsYXNzIE5lc3RlZENsYXNzOgorICAgICAgICAiIiIKKyAgICAgICAgPj4+IHggPSBTYW1wbGVDbGFzcy5OZXN0ZWRDbGFzcyg1KQorICAgICAgICA+Pj4geSA9IHguc3F1YXJlKCkKKyAgICAgICAgPj4+IHByaW50IHkuZ2V0KCkKKyAgICAgICAgMjUKKyAgICAgICAgIiIiCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWw9MCk6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgID4+PiBwcmludCBTYW1wbGVDbGFzcy5OZXN0ZWRDbGFzcygpLmdldCgpCisgICAgICAgICAgICAwCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHNlbGYudmFsID0gdmFsCisgICAgICAgIGRlZiBzcXVhcmUoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gU2FtcGxlQ2xhc3MuTmVzdGVkQ2xhc3Moc2VsZi52YWwqc2VsZi52YWwpCisgICAgICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi52YWwKKworY2xhc3MgU2FtcGxlTmV3U3R5bGVDbGFzcyhvYmplY3QpOgorICAgIHIiIiIKKyAgICA+Pj4gcHJpbnQgJzFcbjJcbjMnCisgICAgMQorICAgIDIKKyAgICAzCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbCk6CisgICAgICAgICIiIgorICAgICAgICA+Pj4gcHJpbnQgU2FtcGxlTmV3U3R5bGVDbGFzcygxMikuZ2V0KCkKKyAgICAgICAgMTIKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYudmFsID0gdmFsCisKKyAgICBkZWYgZG91YmxlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgPj4+IHByaW50IFNhbXBsZU5ld1N0eWxlQ2xhc3MoMTIpLmRvdWJsZSgpLmdldCgpCisgICAgICAgIDI0CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gU2FtcGxlTmV3U3R5bGVDbGFzcyhzZWxmLnZhbCArIHNlbGYudmFsKQorCisgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgID4+PiBwcmludCBTYW1wbGVOZXdTdHlsZUNsYXNzKC01KS5nZXQoKQorICAgICAgICAtNQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIEZha2Ugc3RkaW4gKGZvciB0ZXN0aW5nIGludGVyYWN0aXZlIGRlYnVnZ2luZykKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgX0Zha2VJbnB1dDoKKyAgICAiIiIKKyAgICBBIGZha2UgaW5wdXQgc3RyZWFtIGZvciBwZGIncyBpbnRlcmFjdGl2ZSBkZWJ1Z2dlci4gIFdoZW5ldmVyIGEKKyAgICBsaW5lIGlzIHJlYWQsIHByaW50IGl0ICh0byBzaW11bGF0ZSB0aGUgdXNlciB0eXBpbmcgaXQpLCBhbmQgdGhlbgorICAgIHJldHVybiBpdC4gIFRoZSBzZXQgb2YgbGluZXMgdG8gcmV0dXJuIGlzIHNwZWNpZmllZCBpbiB0aGUKKyAgICBjb25zdHJ1Y3RvcjsgdGhleSBzaG91bGQgbm90IGhhdmUgdHJhaWxpbmcgbmV3bGluZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmVzKToKKyAgICAgICAgc2VsZi5saW5lcyA9IGxpbmVzCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZik6CisgICAgICAgIGxpbmUgPSBzZWxmLmxpbmVzLnBvcCgwKQorICAgICAgICBwcmludCBsaW5lCisgICAgICAgIHJldHVybiBsaW5lKydcbicKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgVGVzdCBDYXNlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgdGVzdF9FeGFtcGxlKCk6IHIiIiIKK1VuaXQgdGVzdHMgZm9yIHRoZSBgRXhhbXBsZWAgY2xhc3MuCisKK0V4YW1wbGUgaXMgYSBzaW1wbGUgY29udGFpbmVyIGNsYXNzIHRoYXQgaG9sZHM6CisgIC0gYHNvdXJjZWA6IEEgc291cmNlIHN0cmluZy4KKyAgLSBgd2FudGA6IEFuIGV4cGVjdGVkIG91dHB1dCBzdHJpbmcuCisgIC0gYGV4Y19tc2dgOiBBbiBleHBlY3RlZCBleGNlcHRpb24gbWVzc2FnZSBzdHJpbmcgKG9yIE5vbmUgaWYgbm8KKyAgICBleGNlcHRpb24gaXMgZXhwZWN0ZWQpLgorICAtIGBsaW5lbm9gOiBBIGxpbmUgbnVtYmVyICh3aXRoaW4gdGhlIGRvY3N0cmluZykuCisgIC0gYGluZGVudGA6IFRoZSBleGFtcGxlJ3MgaW5kZW50YXRpb24gaW4gdGhlIGlucHV0IHN0cmluZy4KKyAgLSBgb3B0aW9uc2A6IEFuIG9wdGlvbiBkaWN0aW9uYXJ5LCBtYXBwaW5nIG9wdGlvbiBmbGFncyB0byBUcnVlIG9yCisgICAgRmFsc2UuCisKK1RoZXNlIGF0dHJpYnV0ZXMgYXJlIHNldCBieSB0aGUgY29uc3RydWN0b3IuICBgc291cmNlYCBhbmQgYHdhbnRgIGFyZQorcmVxdWlyZWQ7IHRoZSBvdGhlciBhdHRyaWJ1dGVzIGFsbCBoYXZlIGRlZmF1bHQgdmFsdWVzOgorCisgICAgPj4+IGV4YW1wbGUgPSBkb2N0ZXN0LkV4YW1wbGUoJ3ByaW50IDEnLCAnMVxuJykKKyAgICA+Pj4gKGV4YW1wbGUuc291cmNlLCBleGFtcGxlLndhbnQsIGV4YW1wbGUuZXhjX21zZywKKyAgICAuLi4gIGV4YW1wbGUubGluZW5vLCBleGFtcGxlLmluZGVudCwgZXhhbXBsZS5vcHRpb25zKQorICAgICgncHJpbnQgMVxuJywgJzFcbicsIE5vbmUsIDAsIDAsIHt9KQorCitUaGUgZmlyc3QgdGhyZWUgYXR0cmlidXRlcyAoYHNvdXJjZWAsIGB3YW50YCwgYW5kIGBleGNfbXNnYCkgbWF5IGJlCitzcGVjaWZpZWQgcG9zaXRpb25hbGx5OyB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cyBzaG91bGQgYmUgc3BlY2lmaWVkIGFzCitrZXl3b3JkIGFyZ3VtZW50czoKKworICAgID4+PiBleGNfbXNnID0gJ0luZGV4RXJyb3I6IHBvcCBmcm9tIGFuIGVtcHR5IGxpc3QnCisgICAgPj4+IGV4YW1wbGUgPSBkb2N0ZXN0LkV4YW1wbGUoJ1tdLnBvcCgpJywgJycsIGV4Y19tc2csCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vPTUsIGluZGVudD00LAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e2RvY3Rlc3QuRUxMSVBTSVM6IFRydWV9KQorICAgID4+PiAoZXhhbXBsZS5zb3VyY2UsIGV4YW1wbGUud2FudCwgZXhhbXBsZS5leGNfbXNnLAorICAgIC4uLiAgZXhhbXBsZS5saW5lbm8sIGV4YW1wbGUuaW5kZW50LCBleGFtcGxlLm9wdGlvbnMpCisgICAgKCdbXS5wb3AoKVxuJywgJycsICdJbmRleEVycm9yOiBwb3AgZnJvbSBhbiBlbXB0eSBsaXN0XG4nLCA1LCA0LCB7ODogVHJ1ZX0pCisKK1RoZSBjb25zdHJ1Y3RvciBub3JtYWxpemVzIHRoZSBgc291cmNlYCBzdHJpbmcgdG8gZW5kIGluIGEgbmV3bGluZToKKworICAgIFNvdXJjZSBzcGFucyBhIHNpbmdsZSBsaW5lOiBubyB0ZXJtaW5hdGluZyBuZXdsaW5lLgorICAgID4+PiBlID0gZG9jdGVzdC5FeGFtcGxlKCdwcmludCAxJywgJzFcbicpCisgICAgPj4+IGUuc291cmNlLCBlLndhbnQKKyAgICAoJ3ByaW50IDFcbicsICcxXG4nKQorCisgICAgPj4+IGUgPSBkb2N0ZXN0LkV4YW1wbGUoJ3ByaW50IDFcbicsICcxXG4nKQorICAgID4+PiBlLnNvdXJjZSwgZS53YW50CisgICAgKCdwcmludCAxXG4nLCAnMVxuJykKKworICAgIFNvdXJjZSBzcGFucyBtdWx0aXBsZSBsaW5lczogcmVxdWlyZSB0ZXJtaW5hdGluZyBuZXdsaW5lLgorICAgID4+PiBlID0gZG9jdGVzdC5FeGFtcGxlKCdwcmludCAxO1xucHJpbnQgMlxuJywgJzFcbjJcbicpCisgICAgPj4+IGUuc291cmNlLCBlLndhbnQKKyAgICAoJ3ByaW50IDE7XG5wcmludCAyXG4nLCAnMVxuMlxuJykKKworICAgID4+PiBlID0gZG9jdGVzdC5FeGFtcGxlKCdwcmludCAxO1xucHJpbnQgMicsICcxXG4yXG4nKQorICAgID4+PiBlLnNvdXJjZSwgZS53YW50CisgICAgKCdwcmludCAxO1xucHJpbnQgMlxuJywgJzFcbjJcbicpCisKKyAgICBFbXB0eSBzb3VyY2Ugc3RyaW5nICh3aGljaCBzaG91bGQgbmV2ZXIgYXBwZWFyIGluIHJlYWwgZXhhbXBsZXMpCisgICAgPj4+IGUgPSBkb2N0ZXN0LkV4YW1wbGUoJycsICcnKQorICAgID4+PiBlLnNvdXJjZSwgZS53YW50CisgICAgKCdcbicsICcnKQorCitUaGUgY29uc3RydWN0b3Igbm9ybWFsaXplcyB0aGUgYHdhbnRgIHN0cmluZyB0byBlbmQgaW4gYSBuZXdsaW5lLAordW5sZXNzIGl0J3MgdGhlIGVtcHR5IHN0cmluZzoKKworICAgID4+PiBlID0gZG9jdGVzdC5FeGFtcGxlKCdwcmludCAxJywgJzFcbicpCisgICAgPj4+IGUuc291cmNlLCBlLndhbnQKKyAgICAoJ3ByaW50IDFcbicsICcxXG4nKQorCisgICAgPj4+IGUgPSBkb2N0ZXN0LkV4YW1wbGUoJ3ByaW50IDEnLCAnMScpCisgICAgPj4+IGUuc291cmNlLCBlLndhbnQKKyAgICAoJ3ByaW50IDFcbicsICcxXG4nKQorCisgICAgPj4+IGUgPSBkb2N0ZXN0LkV4YW1wbGUoJ3ByaW50JywgJycpCisgICAgPj4+IGUuc291cmNlLCBlLndhbnQKKyAgICAoJ3ByaW50XG4nLCAnJykKKworVGhlIGNvbnN0cnVjdG9yIG5vcm1hbGl6ZXMgdGhlIGBleGNfbXNnYCBzdHJpbmcgdG8gZW5kIGluIGEgbmV3bGluZSwKK3VubGVzcyBpdCdzIGBOb25lYDoKKworICAgIE1lc3NhZ2Ugc3BhbnMgb25lIGxpbmUKKyAgICA+Pj4gZXhjX21zZyA9ICdJbmRleEVycm9yOiBwb3AgZnJvbSBhbiBlbXB0eSBsaXN0JworICAgID4+PiBlID0gZG9jdGVzdC5FeGFtcGxlKCdbXS5wb3AoKScsICcnLCBleGNfbXNnKQorICAgID4+PiBlLmV4Y19tc2cKKyAgICAnSW5kZXhFcnJvcjogcG9wIGZyb20gYW4gZW1wdHkgbGlzdFxuJworCisgICAgPj4+IGV4Y19tc2cgPSAnSW5kZXhFcnJvcjogcG9wIGZyb20gYW4gZW1wdHkgbGlzdFxuJworICAgID4+PiBlID0gZG9jdGVzdC5FeGFtcGxlKCdbXS5wb3AoKScsICcnLCBleGNfbXNnKQorICAgID4+PiBlLmV4Y19tc2cKKyAgICAnSW5kZXhFcnJvcjogcG9wIGZyb20gYW4gZW1wdHkgbGlzdFxuJworCisgICAgTWVzc2FnZSBzcGFucyBtdWx0aXBsZSBsaW5lcworICAgID4+PiBleGNfbXNnID0gJ1ZhbHVlRXJyb3I6IDFcbiAgMicKKyAgICA+Pj4gZSA9IGRvY3Rlc3QuRXhhbXBsZSgncmFpc2UgVmFsdWVFcnJvcigiMVxuICAyIiknLCAnJywgZXhjX21zZykKKyAgICA+Pj4gZS5leGNfbXNnCisgICAgJ1ZhbHVlRXJyb3I6IDFcbiAgMlxuJworCisgICAgPj4+IGV4Y19tc2cgPSAnVmFsdWVFcnJvcjogMVxuICAyXG4nCisgICAgPj4+IGUgPSBkb2N0ZXN0LkV4YW1wbGUoJ3JhaXNlIFZhbHVlRXJyb3IoIjFcbiAgMiIpJywgJycsIGV4Y19tc2cpCisgICAgPj4+IGUuZXhjX21zZworICAgICdWYWx1ZUVycm9yOiAxXG4gIDJcbicKKworICAgIEVtcHR5IChidXQgbm9uLU5vbmUpIGV4Y2VwdGlvbiBtZXNzYWdlICh3aGljaCBzaG91bGQgbmV2ZXIgYXBwZWFyCisgICAgaW4gcmVhbCBleGFtcGxlcykKKyAgICA+Pj4gZXhjX21zZyA9ICcnCisgICAgPj4+IGUgPSBkb2N0ZXN0LkV4YW1wbGUoJ3JhaXNlIFgoKScsICcnLCBleGNfbXNnKQorICAgID4+PiBlLmV4Y19tc2cKKyAgICAnXG4nCisKK0NvbXBhcmUgYEV4YW1wbGVgOgorICAgID4+PiBleGFtcGxlID0gZG9jdGVzdC5FeGFtcGxlKCdwcmludCAxJywgJzFcbicpCisgICAgPj4+IHNhbWVfZXhhbXBsZSA9IGRvY3Rlc3QuRXhhbXBsZSgncHJpbnQgMScsICcxXG4nKQorICAgID4+PiBvdGhlcl9leGFtcGxlID0gZG9jdGVzdC5FeGFtcGxlKCdwcmludCA0MicsICc0MlxuJykKKyAgICA+Pj4gZXhhbXBsZSA9PSBzYW1lX2V4YW1wbGUKKyAgICBUcnVlCisgICAgPj4+IGV4YW1wbGUgIT0gc2FtZV9leGFtcGxlCisgICAgRmFsc2UKKyAgICA+Pj4gaGFzaChleGFtcGxlKSA9PSBoYXNoKHNhbWVfZXhhbXBsZSkKKyAgICBUcnVlCisgICAgPj4+IGV4YW1wbGUgPT0gb3RoZXJfZXhhbXBsZQorICAgIEZhbHNlCisgICAgPj4+IGV4YW1wbGUgIT0gb3RoZXJfZXhhbXBsZQorICAgIFRydWUKKyIiIgorCitkZWYgdGVzdF9Eb2NUZXN0KCk6IHIiIiIKK1VuaXQgdGVzdHMgZm9yIHRoZSBgRG9jVGVzdGAgY2xhc3MuCisKK0RvY1Rlc3QgaXMgYSBjb2xsZWN0aW9uIG9mIGV4YW1wbGVzLCBleHRyYWN0ZWQgZnJvbSBhIGRvY3N0cmluZywgYWxvbmcKK3dpdGggaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdGhlIGRvY3N0cmluZyBjb21lcyBmcm9tIChhIG5hbWUsCitmaWxlbmFtZSwgYW5kIGxpbmUgbnVtYmVyKS4gIFRoZSBkb2NzdHJpbmcgaXMgcGFyc2VkIGJ5IHRoZSBgRG9jVGVzdGAKK2NvbnN0cnVjdG9yOgorCisgICAgPj4+IGRvY3N0cmluZyA9ICcnJworICAgIC4uLiAgICAgPj4+IHByaW50IDEyCisgICAgLi4uICAgICAxMgorICAgIC4uLgorICAgIC4uLiBOb24tZXhhbXBsZSB0ZXh0LgorICAgIC4uLgorICAgIC4uLiAgICAgPj4+IHByaW50ICdhbm90aGVyXGV4YW1wbGUnCisgICAgLi4uICAgICBhbm90aGVyCisgICAgLi4uICAgICBleGFtcGxlCisgICAgLi4uICcnJworICAgID4+PiBnbG9icyA9IHt9ICMgZ2xvYmFscyB0byBydW4gdGhlIHRlc3QgaW4uCisgICAgPj4+IHBhcnNlciA9IGRvY3Rlc3QuRG9jVGVzdFBhcnNlcigpCisgICAgPj4+IHRlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jc3RyaW5nLCBnbG9icywgJ3NvbWVfdGVzdCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvbWVfZmlsZScsIDIwKQorICAgID4+PiBwcmludCB0ZXN0CisgICAgPERvY1Rlc3Qgc29tZV90ZXN0IGZyb20gc29tZV9maWxlOjIwICgyIGV4YW1wbGVzKT4KKyAgICA+Pj4gbGVuKHRlc3QuZXhhbXBsZXMpCisgICAgMgorICAgID4+PiBlMSwgZTIgPSB0ZXN0LmV4YW1wbGVzCisgICAgPj4+IChlMS5zb3VyY2UsIGUxLndhbnQsIGUxLmxpbmVubykKKyAgICAoJ3ByaW50IDEyXG4nLCAnMTJcbicsIDEpCisgICAgPj4+IChlMi5zb3VyY2UsIGUyLndhbnQsIGUyLmxpbmVubykKKyAgICAoInByaW50ICdhbm90aGVyXFxleGFtcGxlJ1xuIiwgJ2Fub3RoZXJcbmV4YW1wbGVcbicsIDYpCisKK1NvdXJjZSBpbmZvcm1hdGlvbiAobmFtZSwgZmlsZW5hbWUsIGFuZCBsaW5lIG51bWJlcikgaXMgYXZhaWxhYmxlIGFzCithdHRyaWJ1dGVzIG9uIHRoZSBkb2N0ZXN0IG9iamVjdDoKKworICAgID4+PiAodGVzdC5uYW1lLCB0ZXN0LmZpbGVuYW1lLCB0ZXN0LmxpbmVubykKKyAgICAoJ3NvbWVfdGVzdCcsICdzb21lX2ZpbGUnLCAyMCkKKworVGhlIGxpbmUgbnVtYmVyIG9mIGFuIGV4YW1wbGUgd2l0aGluIGl0cyBjb250YWluaW5nIGZpbGUgaXMgZm91bmQgYnkKK2FkZGluZyB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGV4YW1wbGUgYW5kIHRoZSBsaW5lIG51bWJlciBvZiBpdHMKK2NvbnRhaW5pbmcgdGVzdDoKKworICAgID4+PiB0ZXN0LmxpbmVubyArIGUxLmxpbmVubworICAgIDIxCisgICAgPj4+IHRlc3QubGluZW5vICsgZTIubGluZW5vCisgICAgMjYKKworSWYgdGhlIGRvY3N0cmluZyBjb250YWlucyBpbmNvbnNpc3RhbnQgbGVhZGluZyB3aGl0ZXNwYWNlIGluIHRoZQorZXhwZWN0ZWQgb3V0cHV0IG9mIGFuIGV4YW1wbGUsIHRoZW4gYERvY1Rlc3RgIHdpbGwgcmFpc2UgYSBWYWx1ZUVycm9yOgorCisgICAgPj4+IGRvY3N0cmluZyA9IHInJycKKyAgICAuLi4gICAgICAgPj4+IHByaW50ICdiYWRcbmluZGVudGF0aW9uJworICAgIC4uLiAgICAgICBiYWQKKyAgICAuLi4gICAgIGluZGVudGF0aW9uCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gcGFyc2VyLmdldF9kb2N0ZXN0KGRvY3N0cmluZywgZ2xvYnMsICdzb21lX3Rlc3QnLCAnZmlsZW5hbWUnLCAwKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBWYWx1ZUVycm9yOiBsaW5lIDQgb2YgdGhlIGRvY3N0cmluZyBmb3Igc29tZV90ZXN0IGhhcyBpbmNvbnNpc3RlbnQgbGVhZGluZyB3aGl0ZXNwYWNlOiAnaW5kZW50YXRpb24nCisKK0lmIHRoZSBkb2NzdHJpbmcgY29udGFpbnMgaW5jb25zaXN0ZW50IGxlYWRpbmcgd2hpdGVzcGFjZSBvbgorY29udGludWF0aW9uIGxpbmVzLCB0aGVuIGBEb2NUZXN0YCB3aWxsIHJhaXNlIGEgVmFsdWVFcnJvcjoKKworICAgID4+PiBkb2NzdHJpbmcgPSByJycnCisgICAgLi4uICAgICAgID4+PiBwcmludCAoJ2JhZCBpbmRlbnRhdGlvbicsCisgICAgLi4uICAgICAuLi4gICAgICAgICAgMikKKyAgICAuLi4gICAgICAgKCdiYWQnLCAnaW5kZW50YXRpb24nKQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHBhcnNlci5nZXRfZG9jdGVzdChkb2NzdHJpbmcsIGdsb2JzLCAnc29tZV90ZXN0JywgJ2ZpbGVuYW1lJywgMCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgVmFsdWVFcnJvcjogbGluZSAyIG9mIHRoZSBkb2NzdHJpbmcgZm9yIHNvbWVfdGVzdCBoYXMgaW5jb25zaXN0ZW50IGxlYWRpbmcgd2hpdGVzcGFjZTogJy4uLiAgICAgICAgICAyKScKKworSWYgdGhlcmUncyBubyBibGFuayBzcGFjZSBhZnRlciBhIFBTMSBwcm9tcHQgKCc+Pj4nKSwgdGhlbiBgRG9jVGVzdGAKK3dpbGwgcmFpc2UgYSBWYWx1ZUVycm9yOgorCisgICAgPj4+IGRvY3N0cmluZyA9ICc+Pj5wcmludCAxXG4xJworICAgID4+PiBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jc3RyaW5nLCBnbG9icywgJ3NvbWVfdGVzdCcsICdmaWxlbmFtZScsIDApCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFZhbHVlRXJyb3I6IGxpbmUgMSBvZiB0aGUgZG9jc3RyaW5nIGZvciBzb21lX3Rlc3QgbGFja3MgYmxhbmsgYWZ0ZXIgPj4+OiAnPj4+cHJpbnQgMScKKworSWYgdGhlcmUncyBubyBibGFuayBzcGFjZSBhZnRlciBhIFBTMiBwcm9tcHQgKCcuLi4nKSwgdGhlbiBgRG9jVGVzdGAKK3dpbGwgcmFpc2UgYSBWYWx1ZUVycm9yOgorCisgICAgPj4+IGRvY3N0cmluZyA9ICc+Pj4gaWYgMTpcbi4uLnByaW50IDFcbjEnCisgICAgPj4+IHBhcnNlci5nZXRfZG9jdGVzdChkb2NzdHJpbmcsIGdsb2JzLCAnc29tZV90ZXN0JywgJ2ZpbGVuYW1lJywgMCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgVmFsdWVFcnJvcjogbGluZSAyIG9mIHRoZSBkb2NzdHJpbmcgZm9yIHNvbWVfdGVzdCBsYWNrcyBibGFuayBhZnRlciAuLi46ICcuLi5wcmludCAxJworCitDb21wYXJlIGBEb2NUZXN0YDoKKworICAgID4+PiBkb2NzdHJpbmcgPSAnJycKKyAgICAuLi4gICAgID4+PiBwcmludCAxMgorICAgIC4uLiAgICAgMTIKKyAgICAuLi4gJycnCisgICAgPj4+IHRlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jc3RyaW5nLCBnbG9icywgJ3NvbWVfdGVzdCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvbWVfdGVzdCcsIDIwKQorICAgID4+PiBzYW1lX3Rlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jc3RyaW5nLCBnbG9icywgJ3NvbWVfdGVzdCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc29tZV90ZXN0JywgMjApCisgICAgPj4+IHRlc3QgPT0gc2FtZV90ZXN0CisgICAgVHJ1ZQorICAgID4+PiB0ZXN0ICE9IHNhbWVfdGVzdAorICAgIEZhbHNlCisgICAgPj4+IGhhc2godGVzdCkgPT0gaGFzaChzYW1lX3Rlc3QpCisgICAgVHJ1ZQorICAgID4+PiBkb2NzdHJpbmcgPSAnJycKKyAgICAuLi4gICAgID4+PiBwcmludCA0MgorICAgIC4uLiAgICAgNDIKKyAgICAuLi4gJycnCisgICAgPj4+IG90aGVyX3Rlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jc3RyaW5nLCBnbG9icywgJ290aGVyX3Rlc3QnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdGhlcl9maWxlJywgMTApCisgICAgPj4+IHRlc3QgPT0gb3RoZXJfdGVzdAorICAgIEZhbHNlCisgICAgPj4+IHRlc3QgIT0gb3RoZXJfdGVzdAorICAgIFRydWUKKworQ29tcGFyZSBgRG9jVGVzdENhc2VgOgorCisgICAgPj4+IERvY1Rlc3RDYXNlID0gZG9jdGVzdC5Eb2NUZXN0Q2FzZQorICAgID4+PiB0ZXN0X2Nhc2UgPSBEb2NUZXN0Q2FzZSh0ZXN0KQorICAgID4+PiBzYW1lX3Rlc3RfY2FzZSA9IERvY1Rlc3RDYXNlKHNhbWVfdGVzdCkKKyAgICA+Pj4gb3RoZXJfdGVzdF9jYXNlID0gRG9jVGVzdENhc2Uob3RoZXJfdGVzdCkKKyAgICA+Pj4gdGVzdF9jYXNlID09IHNhbWVfdGVzdF9jYXNlCisgICAgVHJ1ZQorICAgID4+PiB0ZXN0X2Nhc2UgIT0gc2FtZV90ZXN0X2Nhc2UKKyAgICBGYWxzZQorICAgID4+PiBoYXNoKHRlc3RfY2FzZSkgPT0gaGFzaChzYW1lX3Rlc3RfY2FzZSkKKyAgICBUcnVlCisgICAgPj4+IHRlc3QgPT0gb3RoZXJfdGVzdF9jYXNlCisgICAgRmFsc2UKKyAgICA+Pj4gdGVzdCAhPSBvdGhlcl90ZXN0X2Nhc2UKKyAgICBUcnVlCisKKyIiIgorCitkZWYgdGVzdF9Eb2NUZXN0RmluZGVyKCk6IHIiIiIKK1VuaXQgdGVzdHMgZm9yIHRoZSBgRG9jVGVzdEZpbmRlcmAgY2xhc3MuCisKK0RvY1Rlc3RGaW5kZXIgaXMgdXNlZCB0byBleHRyYWN0IERvY1Rlc3RzIGZyb20gYW4gb2JqZWN0J3MgZG9jc3RyaW5nCithbmQgdGhlIGRvY3N0cmluZ3Mgb2YgaXRzIGNvbnRhaW5lZCBvYmplY3RzLiAgSXQgY2FuIGJlIHVzZWQgd2l0aAorbW9kdWxlcywgZnVuY3Rpb25zLCBjbGFzc2VzLCBtZXRob2RzLCBzdGF0aWNtZXRob2RzLCBjbGFzc21ldGhvZHMsIGFuZAorcHJvcGVydGllcy4KKworRmluZGluZyBUZXN0cyBpbiBGdW5jdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitGb3IgYSBmdW5jdGlvbiB3aG9zZSBkb2NzdHJpbmcgY29udGFpbnMgZXhhbXBsZXMsIERvY1Rlc3RGaW5kZXIuZmluZCgpCit3aWxsIHJldHVybiBhIHNpbmdsZSB0ZXN0IChmb3IgdGhhdCBmdW5jdGlvbidzIGRvY3N0cmluZyk6CisKKyAgICA+Pj4gZmluZGVyID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkKKworV2UnbGwgc2ltdWxhdGUgYSBfX2ZpbGVfXyBhdHRyIHRoYXQgZW5kcyBpbiBweWM6CisKKyAgICA+Pj4gaW1wb3J0IHRlc3QudGVzdF9kb2N0ZXN0CisgICAgPj4+IG9sZCA9IHRlc3QudGVzdF9kb2N0ZXN0Ll9fZmlsZV9fCisgICAgPj4+IHRlc3QudGVzdF9kb2N0ZXN0Ll9fZmlsZV9fID0gJ3Rlc3RfZG9jdGVzdC5weWMnCisKKyAgICA+Pj4gdGVzdHMgPSBmaW5kZXIuZmluZChzYW1wbGVfZnVuYykKKworICAgID4+PiBwcmludCB0ZXN0cyAgIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICBbPERvY1Rlc3Qgc2FtcGxlX2Z1bmMgZnJvbSAuLi46MTcgKDEgZXhhbXBsZSk+XQorCitUaGUgZXhhY3QgbmFtZSBkZXBlbmRzIG9uIGhvdyB0ZXN0X2RvY3Rlc3Qgd2FzIGludm9rZWQsIHNvIGFsbG93IGZvcgorbGVhZGluZyBwYXRoIGNvbXBvbmVudHMuCisKKyAgICA+Pj4gdGVzdHNbMF0uZmlsZW5hbWUgIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAnLi4udGVzdF9kb2N0ZXN0LnB5JworCisgICAgPj4+IHRlc3QudGVzdF9kb2N0ZXN0Ll9fZmlsZV9fID0gb2xkCisKKworICAgID4+PiBlID0gdGVzdHNbMF0uZXhhbXBsZXNbMF0KKyAgICA+Pj4gKGUuc291cmNlLCBlLndhbnQsIGUubGluZW5vKQorICAgICgncHJpbnQgc2FtcGxlX2Z1bmMoMjIpXG4nLCAnNDRcbicsIDMpCisKK0J5IGRlZmF1bHQsIHRlc3RzIGFyZSBjcmVhdGVkIGZvciBvYmplY3RzIHdpdGggbm8gZG9jc3RyaW5nOgorCisgICAgPj4+IGRlZiBub19kb2NzdHJpbmcodik6CisgICAgLi4uICAgICBwYXNzCisgICAgPj4+IGZpbmRlci5maW5kKG5vX2RvY3N0cmluZykKKyAgICBbXQorCitIb3dldmVyLCB0aGUgb3B0aW9uYWwgYXJndW1lbnQgYGV4Y2x1ZGVfZW1wdHlgIHRvIHRoZSBEb2NUZXN0RmluZGVyCitjb25zdHJ1Y3RvciBjYW4gYmUgdXNlZCB0byBleGNsdWRlIHRlc3RzIGZvciBvYmplY3RzIHdpdGggZW1wdHkKK2RvY3N0cmluZ3M6CisKKyAgICA+Pj4gZGVmIG5vX2RvY3N0cmluZyh2KToKKyAgICAuLi4gICAgIHBhc3MKKyAgICA+Pj4gZXhjbF9lbXB0eV9maW5kZXIgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoZXhjbHVkZV9lbXB0eT1UcnVlKQorICAgID4+PiBleGNsX2VtcHR5X2ZpbmRlci5maW5kKG5vX2RvY3N0cmluZykKKyAgICBbXQorCitJZiB0aGUgZnVuY3Rpb24gaGFzIGEgZG9jc3RyaW5nIHdpdGggbm8gZXhhbXBsZXMsIHRoZW4gYSB0ZXN0IHdpdGggbm8KK2V4YW1wbGVzIGlzIHJldHVybmVkLiAgKFRoaXMgbGV0cyBgRG9jVGVzdFJ1bm5lcmAgY29sbGVjdCBzdGF0aXN0aWNzCithYm91dCB3aGljaCBmdW5jdGlvbnMgaGF2ZSBubyB0ZXN0cyAtLSBidXQgaXMgdGhhdCB1c2VmdWw/ICBBbmQgc2hvdWxkCithbiBlbXB0eSB0ZXN0IGFsc28gYmUgY3JlYXRlZCB3aGVuIHRoZXJlJ3Mgbm8gZG9jc3RyaW5nPykKKworICAgID4+PiBkZWYgbm9fZXhhbXBsZXModik6CisgICAgLi4uICAgICAnJycgbm8gZG9jdGVzdCBleGFtcGxlcyAnJycKKyAgICA+Pj4gZmluZGVyLmZpbmQobm9fZXhhbXBsZXMpICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgWzxEb2NUZXN0IG5vX2V4YW1wbGVzIGZyb20gLi4uOjEgKG5vIGV4YW1wbGVzKT5dCisKK0ZpbmRpbmcgVGVzdHMgaW4gQ2xhc3Nlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitGb3IgYSBjbGFzcywgRG9jVGVzdEZpbmRlciB3aWxsIGNyZWF0ZSBhIHRlc3QgZm9yIHRoZSBjbGFzcydzCitkb2NzdHJpbmcsIGFuZCB3aWxsIHJlY3Vyc2l2ZWx5IGV4cGxvcmUgaXRzIGNvbnRlbnRzLCBpbmNsdWRpbmcKK21ldGhvZHMsIGNsYXNzbWV0aG9kcywgc3RhdGljbWV0aG9kcywgcHJvcGVydGllcywgYW5kIG5lc3RlZCBjbGFzc2VzLgorCisgICAgPj4+IGZpbmRlciA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpCisgICAgPj4+IHRlc3RzID0gZmluZGVyLmZpbmQoU2FtcGxlQ2xhc3MpCisgICAgPj4+IGZvciB0IGluIHRlc3RzOgorICAgIC4uLiAgICAgcHJpbnQgJyUycyAgJXMnICUgKGxlbih0LmV4YW1wbGVzKSwgdC5uYW1lKQorICAgICAzICBTYW1wbGVDbGFzcworICAgICAzICBTYW1wbGVDbGFzcy5OZXN0ZWRDbGFzcworICAgICAxICBTYW1wbGVDbGFzcy5OZXN0ZWRDbGFzcy5fX2luaXRfXworICAgICAxICBTYW1wbGVDbGFzcy5fX2luaXRfXworICAgICAyICBTYW1wbGVDbGFzcy5hX2NsYXNzbWV0aG9kCisgICAgIDEgIFNhbXBsZUNsYXNzLmFfcHJvcGVydHkKKyAgICAgMSAgU2FtcGxlQ2xhc3MuYV9zdGF0aWNtZXRob2QKKyAgICAgMSAgU2FtcGxlQ2xhc3MuZG91YmxlCisgICAgIDEgIFNhbXBsZUNsYXNzLmdldAorCitOZXctc3R5bGUgY2xhc3NlcyBhcmUgYWxzbyBzdXBwb3J0ZWQ6CisKKyAgICA+Pj4gdGVzdHMgPSBmaW5kZXIuZmluZChTYW1wbGVOZXdTdHlsZUNsYXNzKQorICAgID4+PiBmb3IgdCBpbiB0ZXN0czoKKyAgICAuLi4gICAgIHByaW50ICclMnMgICVzJyAlIChsZW4odC5leGFtcGxlcyksIHQubmFtZSkKKyAgICAgMSAgU2FtcGxlTmV3U3R5bGVDbGFzcworICAgICAxICBTYW1wbGVOZXdTdHlsZUNsYXNzLl9faW5pdF9fCisgICAgIDEgIFNhbXBsZU5ld1N0eWxlQ2xhc3MuZG91YmxlCisgICAgIDEgIFNhbXBsZU5ld1N0eWxlQ2xhc3MuZ2V0CisKK0ZpbmRpbmcgVGVzdHMgaW4gTW9kdWxlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitGb3IgYSBtb2R1bGUsIERvY1Rlc3RGaW5kZXIgd2lsbCBjcmVhdGUgYSB0ZXN0IGZvciB0aGUgY2xhc3MncworZG9jc3RyaW5nLCBhbmQgd2lsbCByZWN1cnNpdmVseSBleHBsb3JlIGl0cyBjb250ZW50cywgaW5jbHVkaW5nCitmdW5jdGlvbnMsIGNsYXNzZXMsIGFuZCB0aGUgYF9fdGVzdF9fYCBkaWN0aW9uYXJ5LCBpZiBpdCBleGlzdHM6CisKKyAgICA+Pj4gIyBBIG1vZHVsZQorICAgID4+PiBpbXBvcnQgdHlwZXMKKyAgICA+Pj4gbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ3NvbWVfbW9kdWxlJykKKyAgICA+Pj4gZGVmIHRyaXBsZSh2YWwpOgorICAgIC4uLiAgICAgJycnCisgICAgLi4uICAgICA+Pj4gcHJpbnQgdHJpcGxlKDExKQorICAgIC4uLiAgICAgMzMKKyAgICAuLi4gICAgICcnJworICAgIC4uLiAgICAgcmV0dXJuIHZhbCozCisgICAgPj4+IG0uX19kaWN0X18udXBkYXRlKHsKKyAgICAuLi4gICAgICdzYW1wbGVfZnVuYyc6IHNhbXBsZV9mdW5jLAorICAgIC4uLiAgICAgJ1NhbXBsZUNsYXNzJzogU2FtcGxlQ2xhc3MsCisgICAgLi4uICAgICAnX19kb2NfXyc6ICcnJworICAgIC4uLiAgICAgICAgIE1vZHVsZSBkb2NzdHJpbmcuCisgICAgLi4uICAgICAgICAgICAgID4+PiBwcmludCAnbW9kdWxlJworICAgIC4uLiAgICAgICAgICAgICBtb2R1bGUKKyAgICAuLi4gICAgICAgICAnJycsCisgICAgLi4uICAgICAnX190ZXN0X18nOiB7CisgICAgLi4uICAgICAgICAgJ2QnOiAnPj4+IHByaW50IDZcbjZcbj4+PiBwcmludCA3XG43XG4nLAorICAgIC4uLiAgICAgICAgICdjJzogdHJpcGxlfX0pCisKKyAgICA+Pj4gZmluZGVyID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkKKyAgICA+Pj4gIyBVc2UgbW9kdWxlPXRlc3QudGVzdF9kb2N0ZXN0LCB0byBwcmV2ZW50IGRvY3Rlc3QgZnJvbQorICAgID4+PiAjIGlnbm9yaW5nIHRoZSBvYmplY3RzIHNpbmNlIHRoZXkgd2VyZW4ndCBkZWZpbmVkIGluIG0uCisgICAgPj4+IGltcG9ydCB0ZXN0LnRlc3RfZG9jdGVzdAorICAgID4+PiB0ZXN0cyA9IGZpbmRlci5maW5kKG0sIG1vZHVsZT10ZXN0LnRlc3RfZG9jdGVzdCkKKyAgICA+Pj4gZm9yIHQgaW4gdGVzdHM6CisgICAgLi4uICAgICBwcmludCAnJTJzICAlcycgJSAobGVuKHQuZXhhbXBsZXMpLCB0Lm5hbWUpCisgICAgIDEgIHNvbWVfbW9kdWxlCisgICAgIDMgIHNvbWVfbW9kdWxlLlNhbXBsZUNsYXNzCisgICAgIDMgIHNvbWVfbW9kdWxlLlNhbXBsZUNsYXNzLk5lc3RlZENsYXNzCisgICAgIDEgIHNvbWVfbW9kdWxlLlNhbXBsZUNsYXNzLk5lc3RlZENsYXNzLl9faW5pdF9fCisgICAgIDEgIHNvbWVfbW9kdWxlLlNhbXBsZUNsYXNzLl9faW5pdF9fCisgICAgIDIgIHNvbWVfbW9kdWxlLlNhbXBsZUNsYXNzLmFfY2xhc3NtZXRob2QKKyAgICAgMSAgc29tZV9tb2R1bGUuU2FtcGxlQ2xhc3MuYV9wcm9wZXJ0eQorICAgICAxICBzb21lX21vZHVsZS5TYW1wbGVDbGFzcy5hX3N0YXRpY21ldGhvZAorICAgICAxICBzb21lX21vZHVsZS5TYW1wbGVDbGFzcy5kb3VibGUKKyAgICAgMSAgc29tZV9tb2R1bGUuU2FtcGxlQ2xhc3MuZ2V0CisgICAgIDEgIHNvbWVfbW9kdWxlLl9fdGVzdF9fLmMKKyAgICAgMiAgc29tZV9tb2R1bGUuX190ZXN0X18uZAorICAgICAxICBzb21lX21vZHVsZS5zYW1wbGVfZnVuYworCitEdXBsaWNhdGUgUmVtb3ZhbAorfn5+fn5+fn5+fn5+fn5+fn4KK0lmIGEgc2luZ2xlIG9iamVjdCBpcyBsaXN0ZWQgdHdpY2UgKHVuZGVyIGRpZmZlcmVudCBuYW1lcyksIHRoZW4gdGVzdHMKK3dpbGwgb25seSBiZSBnZW5lcmF0ZWQgZm9yIGl0IG9uY2U6CisKKyAgICA+Pj4gZnJvbSB0ZXN0IGltcG9ydCBkb2N0ZXN0X2FsaWFzZXMKKyAgICA+Pj4gYXNzZXJ0IGRvY3Rlc3RfYWxpYXNlcy5Ud29OYW1lcy5mCisgICAgPj4+IGFzc2VydCBkb2N0ZXN0X2FsaWFzZXMuVHdvTmFtZXMuZworICAgID4+PiB0ZXN0cyA9IGV4Y2xfZW1wdHlfZmluZGVyLmZpbmQoZG9jdGVzdF9hbGlhc2VzKQorICAgID4+PiBwcmludCBsZW4odGVzdHMpCisgICAgMgorICAgID4+PiBwcmludCB0ZXN0c1swXS5uYW1lCisgICAgdGVzdC5kb2N0ZXN0X2FsaWFzZXMuVHdvTmFtZXMKKworICAgIFR3b05hbWVzLmYgYW5kIFR3b05hbWVzLmcgYXJlIGJvdW5kIHRvIHRoZSBzYW1lIG9iamVjdC4KKyAgICBXZSBjYW4ndCBndWVzcyB3aGljaCB3aWxsIGJlIGZvdW5kIGluIGRvY3Rlc3QncyB0cmF2ZXJzYWwgb2YKKyAgICBUd29OYW1lcy5fX2RpY3RfXyBmaXJzdCwgc28gd2UgaGF2ZSB0byBhbGxvdyBmb3IgZWl0aGVyLgorCisgICAgPj4+IHRlc3RzWzFdLm5hbWUuc3BsaXQoJy4nKVstMV0gaW4gWydmJywgJ2cnXQorICAgIFRydWUKKworRW1wdHkgVGVzdHMKK35+fn5+fn5+fn5+CitCeSBkZWZhdWx0LCBhbiBvYmplY3Qgd2l0aCBubyBkb2N0ZXN0cyBkb2Vzbid0IGNyZWF0ZSBhbnkgdGVzdHM6CisKKyAgICA+Pj4gdGVzdHMgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKFNhbXBsZUNsYXNzKQorICAgID4+PiBmb3IgdCBpbiB0ZXN0czoKKyAgICAuLi4gICAgIHByaW50ICclMnMgICVzJyAlIChsZW4odC5leGFtcGxlcyksIHQubmFtZSkKKyAgICAgMyAgU2FtcGxlQ2xhc3MKKyAgICAgMyAgU2FtcGxlQ2xhc3MuTmVzdGVkQ2xhc3MKKyAgICAgMSAgU2FtcGxlQ2xhc3MuTmVzdGVkQ2xhc3MuX19pbml0X18KKyAgICAgMSAgU2FtcGxlQ2xhc3MuX19pbml0X18KKyAgICAgMiAgU2FtcGxlQ2xhc3MuYV9jbGFzc21ldGhvZAorICAgICAxICBTYW1wbGVDbGFzcy5hX3Byb3BlcnR5CisgICAgIDEgIFNhbXBsZUNsYXNzLmFfc3RhdGljbWV0aG9kCisgICAgIDEgIFNhbXBsZUNsYXNzLmRvdWJsZQorICAgICAxICBTYW1wbGVDbGFzcy5nZXQKKworQnkgZGVmYXVsdCwgdGhhdCBleGNsdWRlZCBvYmplY3RzIHdpdGggbm8gZG9jdGVzdHMuICBleGNsdWRlX2VtcHR5PUZhbHNlCit0ZWxscyBpdCB0byBpbmNsdWRlIChlbXB0eSkgdGVzdHMgZm9yIG9iamVjdHMgd2l0aCBubyBkb2N0ZXN0cy4gIFRoaXMgZmVhdHVyZQoraXMgcmVhbGx5IHRvIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpbiB3aGF0IGRvY3Rlc3QubWFzdGVyLnN1bW1hcml6ZSgpCitkaXNwbGF5cy4KKworICAgID4+PiB0ZXN0cyA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcihleGNsdWRlX2VtcHR5PUZhbHNlKS5maW5kKFNhbXBsZUNsYXNzKQorICAgID4+PiBmb3IgdCBpbiB0ZXN0czoKKyAgICAuLi4gICAgIHByaW50ICclMnMgICVzJyAlIChsZW4odC5leGFtcGxlcyksIHQubmFtZSkKKyAgICAgMyAgU2FtcGxlQ2xhc3MKKyAgICAgMyAgU2FtcGxlQ2xhc3MuTmVzdGVkQ2xhc3MKKyAgICAgMSAgU2FtcGxlQ2xhc3MuTmVzdGVkQ2xhc3MuX19pbml0X18KKyAgICAgMCAgU2FtcGxlQ2xhc3MuTmVzdGVkQ2xhc3MuZ2V0CisgICAgIDAgIFNhbXBsZUNsYXNzLk5lc3RlZENsYXNzLnNxdWFyZQorICAgICAxICBTYW1wbGVDbGFzcy5fX2luaXRfXworICAgICAyICBTYW1wbGVDbGFzcy5hX2NsYXNzbWV0aG9kCisgICAgIDEgIFNhbXBsZUNsYXNzLmFfcHJvcGVydHkKKyAgICAgMSAgU2FtcGxlQ2xhc3MuYV9zdGF0aWNtZXRob2QKKyAgICAgMSAgU2FtcGxlQ2xhc3MuZG91YmxlCisgICAgIDEgIFNhbXBsZUNsYXNzLmdldAorCitUdXJuaW5nIG9mZiBSZWN1cnNpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorRG9jVGVzdEZpbmRlciBjYW4gYmUgdG9sZCBub3QgdG8gbG9vayBmb3IgdGVzdHMgaW4gY29udGFpbmVkIG9iamVjdHMKK3VzaW5nIHRoZSBgcmVjdXJzZWAgZmxhZzoKKworICAgID4+PiB0ZXN0cyA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcihyZWN1cnNlPUZhbHNlKS5maW5kKFNhbXBsZUNsYXNzKQorICAgID4+PiBmb3IgdCBpbiB0ZXN0czoKKyAgICAuLi4gICAgIHByaW50ICclMnMgICVzJyAlIChsZW4odC5leGFtcGxlcyksIHQubmFtZSkKKyAgICAgMyAgU2FtcGxlQ2xhc3MKKworTGluZSBudW1iZXJzCit+fn5+fn5+fn5+fn4KK0RvY1Rlc3RGaW5kZXIgZmluZHMgdGhlIGxpbmUgbnVtYmVyIG9mIGVhY2ggZXhhbXBsZToKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgICcnJworICAgIC4uLiAgICAgPj4+IHggPSAxMgorICAgIC4uLgorICAgIC4uLiAgICAgc29tZSB0ZXh0CisgICAgLi4uCisgICAgLi4uICAgICA+Pj4gIyBleGFtcGxlcyBhcmUgbm90IGNyZWF0ZWQgZm9yIGNvbW1lbnRzICYgYmFyZSBwcm9tcHRzLgorICAgIC4uLiAgICAgPj4+CisgICAgLi4uICAgICAuLi4KKyAgICAuLi4KKyAgICAuLi4gICAgID4+PiBmb3IgeCBpbiByYW5nZSgxMCk6CisgICAgLi4uICAgICAuLi4gICAgIHByaW50IHgsCisgICAgLi4uICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5CisgICAgLi4uICAgICA+Pj4geC8vMgorICAgIC4uLiAgICAgNgorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IFtlLmxpbmVubyBmb3IgZSBpbiB0ZXN0LmV4YW1wbGVzXQorICAgIFsxLCA5LCAxMl0KKyIiIgorCitkZWYgdGVzdF9Eb2NUZXN0UGFyc2VyKCk6IHIiIiIKK1VuaXQgdGVzdHMgZm9yIHRoZSBgRG9jVGVzdFBhcnNlcmAgY2xhc3MuCisKK0RvY1Rlc3RQYXJzZXIgaXMgdXNlZCB0byBwYXJzZSBkb2NzdHJpbmdzIGNvbnRhaW5pbmcgZG9jdGVzdCBleGFtcGxlcy4KKworVGhlIGBwYXJzZWAgbWV0aG9kIGRpdmlkZXMgYSBkb2NzdHJpbmcgaW50byBleGFtcGxlcyBhbmQgaW50ZXJ2ZW5pbmcKK3RleHQ6CisKKyAgICA+Pj4gcyA9ICcnJworICAgIC4uLiAgICAgPj4+IHgsIHkgPSAyLCAzICAjIG5vIG91dHB1dCBleHBlY3RlZAorICAgIC4uLiAgICAgPj4+IGlmIDE6CisgICAgLi4uICAgICAuLi4gICAgIHByaW50IHgKKyAgICAuLi4gICAgIC4uLiAgICAgcHJpbnQgeQorICAgIC4uLiAgICAgMgorICAgIC4uLiAgICAgMworICAgIC4uLgorICAgIC4uLiAgICAgU29tZSB0ZXh0LgorICAgIC4uLiAgICAgPj4+IHgreQorICAgIC4uLiAgICAgNQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHBhcnNlciA9IGRvY3Rlc3QuRG9jVGVzdFBhcnNlcigpCisgICAgPj4+IGZvciBwaWVjZSBpbiBwYXJzZXIucGFyc2Uocyk6CisgICAgLi4uICAgICBpZiBpc2luc3RhbmNlKHBpZWNlLCBkb2N0ZXN0LkV4YW1wbGUpOgorICAgIC4uLiAgICAgICAgIHByaW50ICdFeGFtcGxlOicsIChwaWVjZS5zb3VyY2UsIHBpZWNlLndhbnQsIHBpZWNlLmxpbmVubykKKyAgICAuLi4gICAgIGVsc2U6CisgICAgLi4uICAgICAgICAgcHJpbnQgJyAgIFRleHQ6JywgYHBpZWNlYAorICAgICAgIFRleHQ6ICdcbicKKyAgICBFeGFtcGxlOiAoJ3gsIHkgPSAyLCAzICAjIG5vIG91dHB1dCBleHBlY3RlZFxuJywgJycsIDEpCisgICAgICAgVGV4dDogJycKKyAgICBFeGFtcGxlOiAoJ2lmIDE6XG4gICAgcHJpbnQgeFxuICAgIHByaW50IHlcbicsICcyXG4zXG4nLCAyKQorICAgICAgIFRleHQ6ICdcblNvbWUgdGV4dC5cbicKKyAgICBFeGFtcGxlOiAoJ3greVxuJywgJzVcbicsIDkpCisgICAgICAgVGV4dDogJycKKworVGhlIGBnZXRfZXhhbXBsZXNgIG1ldGhvZCByZXR1cm5zIGp1c3QgdGhlIGV4YW1wbGVzOgorCisgICAgPj4+IGZvciBwaWVjZSBpbiBwYXJzZXIuZ2V0X2V4YW1wbGVzKHMpOgorICAgIC4uLiAgICAgcHJpbnQgKHBpZWNlLnNvdXJjZSwgcGllY2Uud2FudCwgcGllY2UubGluZW5vKQorICAgICgneCwgeSA9IDIsIDMgICMgbm8gb3V0cHV0IGV4cGVjdGVkXG4nLCAnJywgMSkKKyAgICAoJ2lmIDE6XG4gICAgcHJpbnQgeFxuICAgIHByaW50IHlcbicsICcyXG4zXG4nLCAyKQorICAgICgneCt5XG4nLCAnNVxuJywgOSkKKworVGhlIGBnZXRfZG9jdGVzdGAgbWV0aG9kIGNyZWF0ZXMgYSBUZXN0IGZyb20gdGhlIGV4YW1wbGVzLCBhbG9uZyB3aXRoIHRoZQorZ2l2ZW4gYXJndW1lbnRzOgorCisgICAgPj4+IHRlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3Qocywge30sICduYW1lJywgJ2ZpbGVuYW1lJywgbGluZW5vPTUpCisgICAgPj4+ICh0ZXN0Lm5hbWUsIHRlc3QuZmlsZW5hbWUsIHRlc3QubGluZW5vKQorICAgICgnbmFtZScsICdmaWxlbmFtZScsIDUpCisgICAgPj4+IGZvciBwaWVjZSBpbiB0ZXN0LmV4YW1wbGVzOgorICAgIC4uLiAgICAgcHJpbnQgKHBpZWNlLnNvdXJjZSwgcGllY2Uud2FudCwgcGllY2UubGluZW5vKQorICAgICgneCwgeSA9IDIsIDMgICMgbm8gb3V0cHV0IGV4cGVjdGVkXG4nLCAnJywgMSkKKyAgICAoJ2lmIDE6XG4gICAgcHJpbnQgeFxuICAgIHByaW50IHlcbicsICcyXG4zXG4nLCAyKQorICAgICgneCt5XG4nLCAnNVxuJywgOSkKKyIiIgorCitjbGFzcyB0ZXN0X0RvY1Rlc3RSdW5uZXI6CisgICAgZGVmIGJhc2ljcygpOiByIiIiCitVbml0IHRlc3RzIGZvciB0aGUgYERvY1Rlc3RSdW5uZXJgIGNsYXNzLgorCitEb2NUZXN0UnVubmVyIGlzIHVzZWQgdG8gcnVuIERvY1Rlc3QgdGVzdCBjYXNlcywgYW5kIHRvIGFjY3VtdWxhdGUKK3N0YXRpc3RpY3MuICBIZXJlJ3MgYSBzaW1wbGUgRG9jVGVzdCBjYXNlIHdlIGNhbiB1c2U6CisKKyAgICA+Pj4gZGVmIGYoeCk6CisgICAgLi4uICAgICAnJycKKyAgICAuLi4gICAgID4+PiB4ID0gMTIKKyAgICAuLi4gICAgID4+PiBwcmludCB4CisgICAgLi4uICAgICAxMgorICAgIC4uLiAgICAgPj4+IHgvLzIKKyAgICAuLi4gICAgIDYKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorCitUaGUgbWFpbiBEb2NUZXN0UnVubmVyIGludGVyZmFjZSBpcyB0aGUgYHJ1bmAgbWV0aG9kLCB3aGljaCBydW5zIGEKK2dpdmVuIERvY1Rlc3QgY2FzZSBpbiBhIGdpdmVuIG5hbWVzcGFjZSAoZ2xvYnMpLiAgSXQgcmV0dXJucyBhIHR1cGxlCitgKGYsdClgLCB3aGVyZSBgZmAgaXMgdGhlIG51bWJlciBvZiBmYWlsZWQgdGVzdHMgYW5kIGB0YCBpcyB0aGUgbnVtYmVyCitvZiB0cmllZCB0ZXN0cy4KKworICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0zKQorCitJZiBhbnkgZXhhbXBsZSBwcm9kdWNlcyBpbmNvcnJlY3Qgb3V0cHV0LCB0aGVuIHRoZSB0ZXN0IHJ1bm5lciByZXBvcnRzCit0aGUgZmFpbHVyZSBhbmQgcHJvY2VlZHMgdG8gdGhlIG5leHQgZXhhbXBsZToKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgICcnJworICAgIC4uLiAgICAgPj4+IHggPSAxMgorICAgIC4uLiAgICAgPj4+IHByaW50IHgKKyAgICAuLi4gICAgIDE0CisgICAgLi4uICAgICA+Pj4geC8vMgorICAgIC4uLiAgICAgNgorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPVRydWUpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgIFRyeWluZzoKKyAgICAgICAgeCA9IDEyCisgICAgRXhwZWN0aW5nIG5vdGhpbmcKKyAgICBvaworICAgIFRyeWluZzoKKyAgICAgICAgcHJpbnQgeAorICAgIEV4cGVjdGluZzoKKyAgICAgICAgMTQKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNCwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCB4CisgICAgRXhwZWN0ZWQ6CisgICAgICAgIDE0CisgICAgR290OgorICAgICAgICAxMgorICAgIFRyeWluZzoKKyAgICAgICAgeC8vMgorICAgIEV4cGVjdGluZzoKKyAgICAgICAgNgorICAgIG9rCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0zKQorIiIiCisgICAgZGVmIHZlcmJvc2VfZmxhZygpOiByIiIiCitUaGUgYHZlcmJvc2VgIGZsYWcgbWFrZXMgdGhlIHRlc3QgcnVubmVyIGdlbmVyYXRlIG1vcmUgZGV0YWlsZWQKK291dHB1dDoKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgICcnJworICAgIC4uLiAgICAgPj4+IHggPSAxMgorICAgIC4uLiAgICAgPj4+IHByaW50IHgKKyAgICAuLi4gICAgIDEyCisgICAgLi4uICAgICA+Pj4geC8vMgorICAgIC4uLiAgICAgNgorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9VHJ1ZSkucnVuKHRlc3QpCisgICAgVHJ5aW5nOgorICAgICAgICB4ID0gMTIKKyAgICBFeHBlY3Rpbmcgbm90aGluZworICAgIG9rCisgICAgVHJ5aW5nOgorICAgICAgICBwcmludCB4CisgICAgRXhwZWN0aW5nOgorICAgICAgICAxMgorICAgIG9rCisgICAgVHJ5aW5nOgorICAgICAgICB4Ly8yCisgICAgRXhwZWN0aW5nOgorICAgICAgICA2CisgICAgb2sKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTMpCisKK0lmIHRoZSBgdmVyYm9zZWAgZmxhZyBpcyB1bnNwZWNpZmllZCwgdGhlbiB0aGUgb3V0cHV0IHdpbGwgYmUgdmVyYm9zZQoraWZmIGAtdmAgYXBwZWFycyBpbiBzeXMuYXJndjoKKworICAgID4+PiAjIFNhdmUgdGhlIHJlYWwgc3lzLmFyZ3YgbGlzdC4KKyAgICA+Pj4gb2xkX2FyZ3YgPSBzeXMuYXJndgorCisgICAgPj4+ICMgSWYgLXYgZG9lcyBub3QgYXBwZWFyIGluIHN5cy5hcmd2LCB0aGVuIG91dHB1dCBpc24ndCB2ZXJib3NlLgorICAgID4+PiBzeXMuYXJndiA9IFsndGVzdCddCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcigpLnJ1bih0ZXN0KQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MykKKworICAgID4+PiAjIElmIC12IGRvZXMgYXBwZWFyIGluIHN5cy5hcmd2LCB0aGVuIG91dHB1dCBpcyB2ZXJib3NlLgorICAgID4+PiBzeXMuYXJndiA9IFsndGVzdCcsICctdiddCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcigpLnJ1bih0ZXN0KQorICAgIFRyeWluZzoKKyAgICAgICAgeCA9IDEyCisgICAgRXhwZWN0aW5nIG5vdGhpbmcKKyAgICBvaworICAgIFRyeWluZzoKKyAgICAgICAgcHJpbnQgeAorICAgIEV4cGVjdGluZzoKKyAgICAgICAgMTIKKyAgICBvaworICAgIFRyeWluZzoKKyAgICAgICAgeC8vMgorICAgIEV4cGVjdGluZzoKKyAgICAgICAgNgorICAgIG9rCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0zKQorCisgICAgPj4+ICMgUmVzdG9yZSBzeXMuYXJndgorICAgID4+PiBzeXMuYXJndiA9IG9sZF9hcmd2CisKK0luIHRoZSByZW1haW5pbmcgZXhhbXBsZXMsIHRoZSB0ZXN0IHJ1bm5lcidzIHZlcmJvc2l0eSB3aWxsIGJlCitleHBsaWNpdGx5IHNldCwgdG8gZW5zdXJlIHRoYXQgdGhlIHRlc3QgYmVoYXZpb3IgaXMgY29uc2lzdGVudC4KKyAgICAiIiIKKyAgICBkZWYgZXhjZXB0aW9ucygpOiByIiIiCitUZXN0cyBvZiBgRG9jVGVzdFJ1bm5lcmAncyBleGNlcHRpb24gaGFuZGxpbmcuCisKK0FuIGV4cGVjdGVkIGV4Y2VwdGlvbiBpcyBzcGVjaWZpZWQgd2l0aCBhIHRyYWNlYmFjayBtZXNzYWdlLiAgVGhlCitsaW5lcyBiZXR3ZWVuIHRoZSBmaXJzdCBsaW5lIGFuZCB0aGUgdHlwZS92YWx1ZSBtYXkgYmUgb21pdHRlZCBvcgorcmVwbGFjZWQgd2l0aCBhbnkgb3RoZXIgc3RyaW5nOgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgJycnCisgICAgLi4uICAgICA+Pj4geCA9IDEyCisgICAgLi4uICAgICA+Pj4gcHJpbnQgeC8vMAorICAgIC4uLiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLiAgICAgWmVyb0RpdmlzaW9uRXJyb3I6IGludGVnZXIgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm8KKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQorCitBbiBleGFtcGxlIG1heSBub3QgZ2VuZXJhdGUgb3V0cHV0IGJlZm9yZSBpdCByYWlzZXMgYW4gZXhjZXB0aW9uOyBpZgoraXQgZG9lcywgdGhlbiB0aGUgdHJhY2ViYWNrIG1lc3NhZ2Ugd2lsbCBub3QgYmUgcmVjb2duaXplZCBhcworc2lnbmFsaW5nIGFuIGV4cGVjdGVkIGV4Y2VwdGlvbiwgc28gdGhlIGV4YW1wbGUgd2lsbCBiZSByZXBvcnRlZCBhcyBhbgordW5leHBlY3RlZCBleGNlcHRpb246CisKKyAgICA+Pj4gZGVmIGYoeCk6CisgICAgLi4uICAgICAnJycKKyAgICAuLi4gICAgID4+PiB4ID0gMTIKKyAgICAuLi4gICAgID4+PiBwcmludCAncHJlLWV4Y2VwdGlvbiBvdXRwdXQnLCB4Ly8wCisgICAgLi4uICAgICBwcmUtZXhjZXB0aW9uIG91dHB1dAorICAgIC4uLiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLiAgICAgWmVyb0RpdmlzaW9uRXJyb3I6IGludGVnZXIgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm8KKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDQsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcHJpbnQgJ3ByZS1leGNlcHRpb24gb3V0cHV0JywgeC8vMAorICAgIEV4Y2VwdGlvbiByYWlzZWQ6CisgICAgICAgIC4uLgorICAgICAgICBaZXJvRGl2aXNpb25FcnJvcjogaW50ZWdlciBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVybworICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MikKKworRXhjZXB0aW9uIG1lc3NhZ2VzIG1heSBjb250YWluIG5ld2xpbmVzOgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgcicnJworICAgIC4uLiAgICAgPj4+IHJhaXNlIFZhbHVlRXJyb3IsICdtdWx0aVxubGluZVxubWVzc2FnZScKKyAgICAuLi4gICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4gICAgIFZhbHVlRXJyb3I6IG11bHRpCisgICAgLi4uICAgICBsaW5lCisgICAgLi4uICAgICBtZXNzYWdlCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKKworSWYgYW4gZXhjZXB0aW9uIGlzIGV4cGVjdGVkLCBidXQgYW4gZXhjZXB0aW9uIHdpdGggdGhlIHdyb25nIHR5cGUgb3IKK21lc3NhZ2UgaXMgcmFpc2VkLCB0aGVuIGl0IGlzIHJlcG9ydGVkIGFzIGEgZmFpbHVyZToKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgIHInJycKKyAgICAuLi4gICAgID4+PiByYWlzZSBWYWx1ZUVycm9yLCAnbWVzc2FnZScKKyAgICAuLi4gICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4gICAgIFZhbHVlRXJyb3I6IHdyb25nIG1lc3NhZ2UKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDMsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgJ21lc3NhZ2UnCisgICAgRXhwZWN0ZWQ6CisgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgVmFsdWVFcnJvcjogd3JvbmcgbWVzc2FnZQorICAgIEdvdDoKKyAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAuLi4KKyAgICAgICAgVmFsdWVFcnJvcjogbWVzc2FnZQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MSkKKworSG93ZXZlciwgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwgY2FuIGJlIHVzZWQgdG8gYWxsb3cgYSBtaXNtYXRjaCBpbiB0aGUKK2RldGFpbDoKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgIHInJycKKyAgICAuLi4gICAgID4+PiByYWlzZSBWYWx1ZUVycm9yLCAnbWVzc2FnZScgI2RvY3Rlc3Q6ICtJR05PUkVfRVhDRVBUSU9OX0RFVEFJTAorICAgIC4uLiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLiAgICAgVmFsdWVFcnJvcjogd3JvbmcgbWVzc2FnZQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTEpCisKK0lHTk9SRV9FWENFUFRJT05fREVUQUlMIGFsc28gaWdub3JlcyBkaWZmZXJlbmNlIGluIGV4Y2VwdGlvbiBmb3JtYXR0aW5nCitiZXR3ZWVuIFB5dGhvbiB2ZXJzaW9ucy4gRm9yIGV4YW1wbGUsIGluIFB5dGhvbiAzLngsIHRoZSBtb2R1bGUgcGF0aCBvZgordGhlIGV4Y2VwdGlvbiBpcyBpbiB0aGUgb3V0cHV0LCBidXQgdGhpcyB3aWxsIGZhaWwgdW5kZXIgUHl0aG9uIDI6CisKKyAgICA+Pj4gZGVmIGYoeCk6CisgICAgLi4uICAgICByJycnCisgICAgLi4uICAgICA+Pj4gZnJvbSBodHRwbGliIGltcG9ydCBIVFRQRXhjZXB0aW9uCisgICAgLi4uICAgICA+Pj4gcmFpc2UgSFRUUEV4Y2VwdGlvbignbWVzc2FnZScpCisgICAgLi4uICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uICAgICBodHRwbGliLkhUVFBFeGNlcHRpb246IG1lc3NhZ2UKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDQsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcmFpc2UgSFRUUEV4Y2VwdGlvbignbWVzc2FnZScpCisgICAgRXhwZWN0ZWQ6CisgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgaHR0cGxpYi5IVFRQRXhjZXB0aW9uOiBtZXNzYWdlCisgICAgR290OgorICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIC4uLgorICAgICAgICBIVFRQRXhjZXB0aW9uOiBtZXNzYWdlCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQorCitCdXQgaW4gUHl0aG9uIDIgdGhlIG1vZHVsZSBwYXRoIGlzIG5vdCBpbmNsdWRlZCwgYW4gdGhlcmVmb3JlIGEgdGVzdCBtdXN0IGxvb2sKK2xpa2UgdGhlIGZvbGxvd2luZyB0ZXN0IHRvIHN1Y2NlZWQgaW4gUHl0aG9uIDIuIEJ1dCB0aGF0IHRlc3Qgd2lsbCBmYWlsIHVuZGVyCitQeXRob24gMy4KKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgIHInJycKKyAgICAuLi4gICAgID4+PiBmcm9tIGh0dHBsaWIgaW1wb3J0IEhUVFBFeGNlcHRpb24KKyAgICAuLi4gICAgID4+PiByYWlzZSBIVFRQRXhjZXB0aW9uKCdtZXNzYWdlJykKKyAgICAuLi4gICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4gICAgIEhUVFBFeGNlcHRpb246IG1lc3NhZ2UKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQorCitIb3dldmVyLCB3aXRoIElHTk9SRV9FWENFUFRJT05fREVUQUlMLCB0aGUgbW9kdWxlIG5hbWUgb2YgdGhlIGV4Y2VwdGlvbgorKGlmIGFueSkgd2lsbCBiZSBpZ25vcmVkOgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgcicnJworICAgIC4uLiAgICAgPj4+IGZyb20gaHR0cGxpYiBpbXBvcnQgSFRUUEV4Y2VwdGlvbgorICAgIC4uLiAgICAgPj4+IHJhaXNlIEhUVFBFeGNlcHRpb24oJ21lc3NhZ2UnKSAjZG9jdGVzdDogK0lHTk9SRV9FWENFUFRJT05fREVUQUlMCisgICAgLi4uICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uICAgICBIVFRQRXhjZXB0aW9uOiBtZXNzYWdlCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MikKKworVGhlIG1vZHVsZSBwYXRoIHdpbGwgYmUgY29tcGxldGVseSBpZ25vcmVkLCBzbyB0d28gZGlmZmVyZW50IG1vZHVsZSBwYXRocyB3aWxsCitzdGlsbCBwYXNzIGlmIElHTk9SRV9FWENFUFRJT05fREVUQUlMIGlzIGdpdmVuLiBUaGlzIGlzIGludGVudGlvbmFsLCBzbyBpdCBjYW4KK2JlIHVzZWQgd2hlbiBleGNlcHRpb25zIGhhdmUgY2hhbmdlZCBtb2R1bGUuCisKKyAgICA+Pj4gZGVmIGYoeCk6CisgICAgLi4uICAgICByJycnCisgICAgLi4uICAgICA+Pj4gZnJvbSBodHRwbGliIGltcG9ydCBIVFRQRXhjZXB0aW9uCisgICAgLi4uICAgICA+Pj4gcmFpc2UgSFRUUEV4Y2VwdGlvbignbWVzc2FnZScpICNkb2N0ZXN0OiArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKKyAgICAuLi4gICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4gICAgIGZvby5iYXIuSFRUUEV4Y2VwdGlvbjogbWVzc2FnZQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTIpCisKK0J1dCBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTCBkb2VzIG5vdCBhbGxvdyBhIG1pc21hdGNoIGluIHRoZSBleGNlcHRpb24gdHlwZToKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgIHInJycKKyAgICAuLi4gICAgID4+PiByYWlzZSBWYWx1ZUVycm9yLCAnbWVzc2FnZScgI2RvY3Rlc3Q6ICtJR05PUkVfRVhDRVBUSU9OX0RFVEFJTAorICAgIC4uLiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLiAgICAgVHlwZUVycm9yOiB3cm9uZyB0eXBlCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSAzLCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICdtZXNzYWdlJyAjZG9jdGVzdDogK0lHTk9SRV9FWENFUFRJT05fREVUQUlMCisgICAgRXhwZWN0ZWQ6CisgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgVHlwZUVycm9yOiB3cm9uZyB0eXBlCisgICAgR290OgorICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIC4uLgorICAgICAgICBWYWx1ZUVycm9yOiBtZXNzYWdlCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0xKQorCitJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGJ1dCBub3QgZXhwZWN0ZWQsIHRoZW4gaXQgaXMgcmVwb3J0ZWQgYXMgYW4KK3VuZXhwZWN0ZWQgZXhjZXB0aW9uOgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgcicnJworICAgIC4uLiAgICAgPj4+IDEvLzAKKyAgICAuLi4gICAgIDAKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDMsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgMS8vMAorICAgIEV4Y2VwdGlvbiByYWlzZWQ6CisgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgLi4uCisgICAgICAgIFplcm9EaXZpc2lvbkVycm9yOiBpbnRlZ2VyIGRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0xKQorIiIiCisgICAgZGVmIGRpc3BsYXlob29rKCk6IHIiIiIKK1Rlc3QgdGhhdCBjaGFuZ2luZyBzeXMuZGlzcGxheWhvb2sgZG9lc24ndCBtYXR0ZXIgZm9yIGRvY3Rlc3QuCisKKyAgICA+Pj4gaW1wb3J0IHN5cworICAgID4+PiBvcmlnX2Rpc3BsYXlob29rID0gc3lzLmRpc3BsYXlob29rCisgICAgPj4+IGRlZiBteV9kaXNwbGF5aG9vayh4KToKKyAgICAuLi4gICAgIHByaW50KCdoaSEnKQorICAgID4+PiBzeXMuZGlzcGxheWhvb2sgPSBteV9kaXNwbGF5aG9vaworICAgID4+PiBkZWYgZigpOgorICAgIC4uLiAgICAgJycnCisgICAgLi4uICAgICA+Pj4gMworICAgIC4uLiAgICAgMworICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IHIgPSBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgPj4+IHBvc3RfZGlzcGxheWhvb2sgPSBzeXMuZGlzcGxheWhvb2sKKworICAgIFdlIG5lZWQgdG8gcmVzdG9yZSBzeXMuZGlzcGxheWhvb2sgbm93LCBzbyB0aGF0IHdlJ2xsIGJlIGFibGUgdG8gdGVzdAorICAgIHJlc3VsdHMuCisKKyAgICA+Pj4gc3lzLmRpc3BsYXlob29rID0gb3JpZ19kaXNwbGF5aG9vaworCisgICAgT2ssIG5vdyB3ZSBjYW4gY2hlY2sgdGhhdCBldmVyeXRoaW5nIGlzIG9rLgorCisgICAgPj4+IHIKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTEpCisgICAgPj4+IHBvc3RfZGlzcGxheWhvb2sgaXMgbXlfZGlzcGxheWhvb2sKKyAgICBUcnVlCisiIiIKKyAgICBkZWYgb3B0aW9uZmxhZ3MoKTogciIiIgorVGVzdHMgb2YgYERvY1Rlc3RSdW5uZXJgJ3Mgb3B0aW9uIGZsYWcgaGFuZGxpbmcuCisKK1NldmVyYWwgb3B0aW9uIGZsYWdzIGNhbiBiZSB1c2VkIHRvIGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIHRlc3QKK3J1bm5lci4gIFRoZXNlIGFyZSBkZWZpbmVkIGFzIG1vZHVsZSBjb25zdGFudHMgaW4gZG9jdGVzdCwgYW5kIHBhc3NlZAordG8gdGhlIERvY1Rlc3RSdW5uZXIgY29uc3RydWN0b3IgKG11bHRpcGxlIGNvbnN0YW50cyBzaG91bGQgYmUgT1JlZAordG9nZXRoZXIpLgorCitUaGUgRE9OVF9BQ0NFUFRfVFJVRV9GT1JfMSBmbGFnIGRpc2FibGVzIG1hdGNoZXMgYmV0d2VlbiBUcnVlL0ZhbHNlCithbmQgMS8wOgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgJz4+PiBUcnVlXG4xXG4nCisKKyAgICA+Pj4gIyBXaXRob3V0IHRoZSBmbGFnOgorICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0xKQorCisgICAgPj4+ICMgV2l0aCB0aGUgZmxhZzoKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZmxhZ3MgPSBkb2N0ZXN0LkRPTlRfQUNDRVBUX1RSVUVfRk9SXzEKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgMiwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBUcnVlCisgICAgRXhwZWN0ZWQ6CisgICAgICAgIDEKKyAgICBHb3Q6CisgICAgICAgIFRydWUKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTEpCisKK1RoZSBET05UX0FDQ0VQVF9CTEFOS0xJTkUgZmxhZyBkaXNhYmxlcyB0aGUgbWF0Y2ggYmV0d2VlbiBibGFuayBsaW5lcworYW5kIHRoZSAnPEJMQU5LTElORT4nIG1hcmtlcjoKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgICc+Pj4gcHJpbnQgImFcXG5cXG5iIlxuYVxuPEJMQU5LTElORT5cbmJcbicKKworICAgID4+PiAjIFdpdGhvdXQgdGhlIGZsYWc6CisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTEpCisKKyAgICA+Pj4gIyBXaXRoIHRoZSBmbGFnOgorICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBmbGFncyA9IGRvY3Rlc3QuRE9OVF9BQ0NFUFRfQkxBTktMSU5FCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlLCBvcHRpb25mbGFncz1mbGFncykucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDIsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcHJpbnQgImFcblxuYiIKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgYQorICAgICAgICA8QkxBTktMSU5FPgorICAgICAgICBiCisgICAgR290OgorICAgICAgICBhCisgICAgPEJMQU5LTElORT4KKyAgICAgICAgYgorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MSkKKworVGhlIE5PUk1BTElaRV9XSElURVNQQUNFIGZsYWcgY2F1c2VzIGFsbCBzZXF1ZW5jZXMgb2Ygd2hpdGVzcGFjZSB0byBiZQordHJlYXRlZCBhcyBlcXVhbDoKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgICc+Pj4gcHJpbnQgMSwgMiwgM1xuICAxICAgMlxuIDMnCisKKyAgICA+Pj4gIyBXaXRob3V0IHRoZSBmbGFnOgorICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDIsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcHJpbnQgMSwgMiwgMworICAgIEV4cGVjdGVkOgorICAgICAgICAgIDEgICAyCisgICAgICAgICAzCisgICAgR290OgorICAgICAgICAxIDIgMworICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MSkKKworICAgID4+PiAjIFdpdGggdGhlIGZsYWc6CisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5OT1JNQUxJWkVfV0hJVEVTUEFDRQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKKworICAgIEFuIGV4YW1wbGUgZnJvbSB0aGUgZG9jczoKKyAgICA+Pj4gcHJpbnQgcmFuZ2UoMjApICNkb2N0ZXN0OiArTk9STUFMSVpFX1dISVRFU1BBQ0UKKyAgICBbMCwgICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksCisgICAgMTAsICAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5XQorCitUaGUgRUxMSVBTSVMgZmxhZyBjYXVzZXMgZWxsaXBzaXMgbWFya2VyICgiLi4uIikgaW4gdGhlIGV4cGVjdGVkCitvdXRwdXQgdG8gbWF0Y2ggYW55IHN1YnN0cmluZyBpbiB0aGUgYWN0dWFsIG91dHB1dDoKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgICc+Pj4gcHJpbnQgcmFuZ2UoMTUpXG5bMCwgMSwgMiwgLi4uLCAxNF1cbicKKworICAgID4+PiAjIFdpdGhvdXQgdGhlIGZsYWc6CisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgMiwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCByYW5nZSgxNSkKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgWzAsIDEsIDIsIC4uLiwgMTRdCisgICAgR290OgorICAgICAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0XQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MSkKKworICAgID4+PiAjIFdpdGggdGhlIGZsYWc6CisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5FTExJUFNJUworICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKKworICAgIC4uLiBhbHNvIG1hdGNoZXMgbm90aGluZzoKKworICAgID4+PiBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgIC4uLiAgICAgcHJpbnQgaSoqMiwgI2RvY3Rlc3Q6ICtFTExJUFNJUworICAgIDAgMS4uLjQuLi45IDE2IC4uLiAzNiA0OSA2NCAuLi4gOTgwMQorCisgICAgLi4uIGNhbiBiZSBzdXJwcmlzaW5nOyBlLmcuLCB0aGlzIHRlc3QgcGFzc2VzOgorCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDIxKTogI2RvY3Rlc3Q6ICtFTExJUFNJUworICAgIC4uLiAgICAgcHJpbnQgaSwKKyAgICAwIDEgMiAuLi4xLi4uMi4uLjAKKworICAgIEV4YW1wbGVzIGZyb20gdGhlIGRvY3M6CisKKyAgICA+Pj4gcHJpbnQgcmFuZ2UoMjApICMgZG9jdGVzdDorRUxMSVBTSVMKKyAgICBbMCwgMSwgLi4uLCAxOCwgMTldCisKKyAgICA+Pj4gcHJpbnQgcmFuZ2UoMjApICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgLi4uICAgICAgICAgICAgICAgICAjIGRvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorICAgIFswLCAgICAxLCAuLi4sICAgMTgsICAgIDE5XQorCitUaGUgU0tJUCBmbGFnIGNhdXNlcyBhbiBleGFtcGxlIHRvIGJlIHNraXBwZWQgZW50aXJlbHkuICBJLmUuLCB0aGUKK2V4YW1wbGUgaXMgbm90IHJ1bi4gIEl0IGNhbiBiZSB1c2VmdWwgaW4gY29udGV4dHMgd2hlcmUgZG9jdGVzdAorZXhhbXBsZXMgc2VydmUgYXMgYm90aCBkb2N1bWVudGF0aW9uIGFuZCB0ZXN0IGNhc2VzLCBhbmQgYW4gZXhhbXBsZQorc2hvdWxkIGJlIGluY2x1ZGVkIGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzLCBidXQgc2hvdWxkIG5vdCBiZQorY2hlY2tlZCAoZS5nLiwgYmVjYXVzZSBpdHMgb3V0cHV0IGlzIHJhbmRvbSwgb3IgZGVwZW5kcyBvbiByZXNvdXJjZXMKK3doaWNoIHdvdWxkIGJlIHVuYXZhaWxhYmxlLikgIFRoZSBTS0lQIGZsYWcgY2FuIGFsc28gYmUgdXNlZCBmb3IKKydjb21tZW50aW5nIG91dCcgYnJva2VuIGV4YW1wbGVzLgorCisgICAgPj4+IGltcG9ydCB1bmF2YWlsYWJsZV9yZXNvdXJjZSAgICAgICAgICAgIyBkb2N0ZXN0OiArU0tJUAorICAgID4+PiB1bmF2YWlsYWJsZV9yZXNvdXJjZS5kb19zb21ldGhpbmcoKSAgICMgZG9jdGVzdDogK1NLSVAKKyAgICA+Pj4gdW5hdmFpbGFibGVfcmVzb3VyY2UuYmxvd191cCgpICAgICAgICAjIGRvY3Rlc3Q6ICtTS0lQCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAuLi4KKyAgICBVbmNoZWNrZWRCbG93VXBFcnJvcjogIE5vYm9keSBjaGVja3MgbWUuCisKKyAgICA+Pj4gaW1wb3J0IHJhbmRvbQorICAgID4+PiBwcmludCByYW5kb20ucmFuZG9tKCkgIyBkb2N0ZXN0OiArU0tJUAorICAgIDAuNzIxMjE2OTIzODg5CisKK1RoZSBSRVBPUlRfVURJRkYgZmxhZyBjYXVzZXMgZmFpbHVyZXMgdGhhdCBpbnZvbHZlIG11bHRpLWxpbmUgZXhwZWN0ZWQKK2FuZCBhY3R1YWwgb3V0cHV0cyB0byBiZSBkaXNwbGF5ZWQgdXNpbmcgYSB1bmlmaWVkIGRpZmY6CisKKyAgICA+Pj4gZGVmIGYoeCk6CisgICAgLi4uICAgICByJycnCisgICAgLi4uICAgICA+Pj4gcHJpbnQgJ1xuJy5qb2luKCdhYmNkZWZnJykKKyAgICAuLi4gICAgIGEKKyAgICAuLi4gICAgIEIKKyAgICAuLi4gICAgIGMKKyAgICAuLi4gICAgIGQKKyAgICAuLi4gICAgIGYKKyAgICAuLi4gICAgIGcKKyAgICAuLi4gICAgIGgKKyAgICAuLi4gICAgICcnJworCisgICAgPj4+ICMgV2l0aG91dCB0aGUgZmxhZzoKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSAzLCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50ICdcbicuam9pbignYWJjZGVmZycpCisgICAgRXhwZWN0ZWQ6CisgICAgICAgIGEKKyAgICAgICAgQgorICAgICAgICBjCisgICAgICAgIGQKKyAgICAgICAgZgorICAgICAgICBnCisgICAgICAgIGgKKyAgICBHb3Q6CisgICAgICAgIGEKKyAgICAgICAgYgorICAgICAgICBjCisgICAgICAgIGQKKyAgICAgICAgZQorICAgICAgICBmCisgICAgICAgIGcKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTEpCisKKyAgICA+Pj4gIyBXaXRoIHRoZSBmbGFnOgorICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBmbGFncyA9IGRvY3Rlc3QuUkVQT1JUX1VESUZGCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlLCBvcHRpb25mbGFncz1mbGFncykucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDMsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcHJpbnQgJ1xuJy5qb2luKCdhYmNkZWZnJykKKyAgICBEaWZmZXJlbmNlcyAodW5pZmllZCBkaWZmIHdpdGggLWV4cGVjdGVkICthY3R1YWwpOgorICAgICAgICBAQCAtMSw3ICsxLDcgQEAKKyAgICAgICAgIGEKKyAgICAgICAgLUIKKyAgICAgICAgK2IKKyAgICAgICAgIGMKKyAgICAgICAgIGQKKyAgICAgICAgK2UKKyAgICAgICAgIGYKKyAgICAgICAgIGcKKyAgICAgICAgLWgKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTEpCisKK1RoZSBSRVBPUlRfQ0RJRkYgZmxhZyBjYXVzZXMgZmFpbHVyZXMgdGhhdCBpbnZvbHZlIG11bHRpLWxpbmUgZXhwZWN0ZWQKK2FuZCBhY3R1YWwgb3V0cHV0cyB0byBiZSBkaXNwbGF5ZWQgdXNpbmcgYSBjb250ZXh0IGRpZmY6CisKKyAgICA+Pj4gIyBSZXVzZSBmKCkgZnJvbSB0aGUgUkVQT1JUX1VESUZGIGV4YW1wbGUsIGFib3ZlLgorICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBmbGFncyA9IGRvY3Rlc3QuUkVQT1JUX0NESUZGCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlLCBvcHRpb25mbGFncz1mbGFncykucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDMsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcHJpbnQgJ1xuJy5qb2luKCdhYmNkZWZnJykKKyAgICBEaWZmZXJlbmNlcyAoY29udGV4dCBkaWZmIHdpdGggZXhwZWN0ZWQgZm9sbG93ZWQgYnkgYWN0dWFsKToKKyAgICAgICAgKioqKioqKioqKioqKioqCisgICAgICAgICoqKiAxLDcgKioqKgorICAgICAgICAgIGEKKyAgICAgICAgISBCCisgICAgICAgICAgYworICAgICAgICAgIGQKKyAgICAgICAgICBmCisgICAgICAgICAgZworICAgICAgICAtIGgKKyAgICAgICAgLS0tIDEsNyAtLS0tCisgICAgICAgICAgYQorICAgICAgICAhIGIKKyAgICAgICAgICBjCisgICAgICAgICAgZAorICAgICAgICArIGUKKyAgICAgICAgICBmCisgICAgICAgICAgZworICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MSkKKworCitUaGUgUkVQT1JUX05ESUZGIGZsYWcgY2F1c2VzIGZhaWx1cmVzIHRvIHVzZSB0aGUgZGlmZmxpYi5EaWZmZXIgYWxnb3JpdGhtCit1c2VkIGJ5IHRoZSBwb3B1bGFyIG5kaWZmLnB5IHV0aWxpdHkuICBUaGlzIGRvZXMgaW50cmFsaW5lIGRpZmZlcmVuY2UKK21hcmtpbmcsIGFzIHdlbGwgYXMgaW50ZXJsaW5lIGRpZmZlcmVuY2VzLgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgcicnJworICAgIC4uLiAgICAgPj4+IHByaW50ICJhIGIgIGMgZCBlIGYgZyBoIGkgICBqIGsgbCBtIgorICAgIC4uLiAgICAgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIDEgbQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5SRVBPUlRfTkRJRkYKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgMywgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCAiYSBiICBjIGQgZSBmIGcgaCBpICAgaiBrIGwgbSIKKyAgICBEaWZmZXJlbmNlcyAobmRpZmYgd2l0aCAtZXhwZWN0ZWQgK2FjdHVhbCk6CisgICAgICAgIC0gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIDEgbQorICAgICAgICA/ICAgICAgICAgICAgICAgICAgICAgICBeCisgICAgICAgICsgYSBiICBjIGQgZSBmIGcgaCBpICAgaiBrIGwgbQorICAgICAgICA/ICAgICArICAgICAgICAgICAgICArKyAgICBeCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0xKQorCitUaGUgUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRSBzdXBwcmVzc2VzIHJlc3VsdCBvdXRwdXQgYWZ0ZXIgdGhlIGZpcnN0CitmYWlsaW5nIGV4YW1wbGU6CisKKyAgICA+Pj4gZGVmIGYoeCk6CisgICAgLi4uICAgICByJycnCisgICAgLi4uICAgICA+Pj4gcHJpbnQgMSAjIGZpcnN0IHN1Y2Nlc3MKKyAgICAuLi4gICAgIDEKKyAgICAuLi4gICAgID4+PiBwcmludCAyICMgZmlyc3QgZmFpbHVyZQorICAgIC4uLiAgICAgMjAwCisgICAgLi4uICAgICA+Pj4gcHJpbnQgMyAjIHNlY29uZCBmYWlsdXJlCisgICAgLi4uICAgICAzMDAKKyAgICAuLi4gICAgID4+PiBwcmludCA0ICMgc2Vjb25kIHN1Y2Nlc3MKKyAgICAuLi4gICAgIDQKKyAgICAuLi4gICAgID4+PiBwcmludCA1ICMgdGhpcmQgZmFpbHVyZQorICAgIC4uLiAgICAgNTAwCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZmxhZ3MgPSBkb2N0ZXN0LlJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNSwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCAyICMgZmlyc3QgZmFpbHVyZQorICAgIEV4cGVjdGVkOgorICAgICAgICAyMDAKKyAgICBHb3Q6CisgICAgICAgIDIKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MywgYXR0ZW1wdGVkPTUpCisKK0hvd2V2ZXIsIG91dHB1dCBmcm9tIGByZXBvcnRfc3RhcnRgIGlzIG5vdCBzdXBwcmVzc2VkOgorCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPVRydWUsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICBUcnlpbmc6CisgICAgICAgIHByaW50IDEgIyBmaXJzdCBzdWNjZXNzCisgICAgRXhwZWN0aW5nOgorICAgICAgICAxCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgIHByaW50IDIgIyBmaXJzdCBmYWlsdXJlCisgICAgRXhwZWN0aW5nOgorICAgICAgICAyMDAKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNSwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCAyICMgZmlyc3QgZmFpbHVyZQorICAgIEV4cGVjdGVkOgorICAgICAgICAyMDAKKyAgICBHb3Q6CisgICAgICAgIDIKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MywgYXR0ZW1wdGVkPTUpCisKK0ZvciB0aGUgcHVycG9zZXMgb2YgUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRSwgdW5leHBlY3RlZCBleGNlcHRpb25zCitjb3VudCBhcyBmYWlsdXJlczoKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgIHInJycKKyAgICAuLi4gICAgID4+PiBwcmludCAxICMgZmlyc3Qgc3VjY2VzcworICAgIC4uLiAgICAgMQorICAgIC4uLiAgICAgPj4+IHJhaXNlIFZhbHVlRXJyb3IoMikgIyBmaXJzdCBmYWlsdXJlCisgICAgLi4uICAgICAyMDAKKyAgICAuLi4gICAgID4+PiBwcmludCAzICMgc2Vjb25kIGZhaWx1cmUKKyAgICAuLi4gICAgIDMwMAorICAgIC4uLiAgICAgPj4+IHByaW50IDQgIyBzZWNvbmQgc3VjY2VzcworICAgIC4uLiAgICAgNAorICAgIC4uLiAgICAgPj4+IHByaW50IDUgIyB0aGlyZCBmYWlsdXJlCisgICAgLi4uICAgICA1MDAKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBmbGFncyA9IGRvY3Rlc3QuUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSwgb3B0aW9uZmxhZ3M9ZmxhZ3MpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA1LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoMikgIyBmaXJzdCBmYWlsdXJlCisgICAgRXhjZXB0aW9uIHJhaXNlZDoKKyAgICAgICAgLi4uCisgICAgICAgIFZhbHVlRXJyb3I6IDIKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MywgYXR0ZW1wdGVkPTUpCisKK05ldyBvcHRpb24gZmxhZ3MgY2FuIGFsc28gYmUgcmVnaXN0ZXJlZCwgdmlhIHJlZ2lzdGVyX29wdGlvbmZsYWcoKS4gIEhlcmUKK3dlIHJlYWNoIGludG8gZG9jdGVzdCdzIGludGVybmFscyBhIGJpdC4KKworICAgID4+PiB1bmxpa2VseSA9ICJVTkxJS0VMWV9PUFRJT05fTkFNRSIKKyAgICA+Pj4gdW5saWtlbHkgaW4gZG9jdGVzdC5PUFRJT05GTEFHU19CWV9OQU1FCisgICAgRmFsc2UKKyAgICA+Pj4gbmV3X2ZsYWdfdmFsdWUgPSBkb2N0ZXN0LnJlZ2lzdGVyX29wdGlvbmZsYWcodW5saWtlbHkpCisgICAgPj4+IHVubGlrZWx5IGluIGRvY3Rlc3QuT1BUSU9ORkxBR1NfQllfTkFNRQorICAgIFRydWUKKworQmVmb3JlIDIuNC40LzIuNSwgcmVnaXN0ZXJpbmcgYSBuYW1lIG1vcmUgdGhhbiBvbmNlIGVycm9uZW91c2x5IGNyZWF0ZWQKK21vcmUgdGhhbiBvbmUgZmxhZyB2YWx1ZS4gIEhlcmUgd2UgdmVyaWZ5IHRoYXQncyBmaXhlZDoKKworICAgID4+PiByZWR1bmRhbnRfZmxhZ192YWx1ZSA9IGRvY3Rlc3QucmVnaXN0ZXJfb3B0aW9uZmxhZyh1bmxpa2VseSkKKyAgICA+Pj4gcmVkdW5kYW50X2ZsYWdfdmFsdWUgPT0gbmV3X2ZsYWdfdmFsdWUKKyAgICBUcnVlCisKK0NsZWFuIHVwLgorICAgID4+PiBkZWwgZG9jdGVzdC5PUFRJT05GTEFHU19CWV9OQU1FW3VubGlrZWx5XQorCisgICAgIiIiCisKKyAgICBkZWYgb3B0aW9uX2RpcmVjdGl2ZXMoKTogciIiIgorVGVzdHMgb2YgYERvY1Rlc3RSdW5uZXJgJ3Mgb3B0aW9uIGRpcmVjdGl2ZSBtZWNoYW5pc20uCisKK09wdGlvbiBkaXJlY3RpdmVzIGNhbiBiZSB1c2VkIHRvIHR1cm4gb3B0aW9uIGZsYWdzIG9uIG9yIG9mZiBmb3IgYQorc2luZ2xlIGV4YW1wbGUuICBUbyB0dXJuIGFuIG9wdGlvbiBvbiBmb3IgYW4gZXhhbXBsZSwgZm9sbG93IHRoYXQKK2V4YW1wbGUgd2l0aCBhIGNvbW1lbnQgb2YgdGhlIGZvcm0gYGAjIGRvY3Rlc3Q6ICtPUFRJT05gYDoKKworICAgID4+PiBkZWYgZih4KTogcicnJworICAgIC4uLiAgICAgPj4+IHByaW50IHJhbmdlKDEwKSAgICAgICAjIHNob3VsZCBmYWlsOiBubyBlbGxpcHNpcworICAgIC4uLiAgICAgWzAsIDEsIC4uLiwgOV0KKyAgICAuLi4KKyAgICAuLi4gICAgID4+PiBwcmludCByYW5nZSgxMCkgICAgICAgIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAuLi4gICAgIFswLCAxLCAuLi4sIDldCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSAyLCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50IHJhbmdlKDEwKSAgICAgICAjIHNob3VsZCBmYWlsOiBubyBlbGxpcHNpcworICAgIEV4cGVjdGVkOgorICAgICAgICBbMCwgMSwgLi4uLCA5XQorICAgIEdvdDoKKyAgICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQorCitUbyB0dXJuIGFuIG9wdGlvbiBvZmYgZm9yIGFuIGV4YW1wbGUsIGZvbGxvdyB0aGF0IGV4YW1wbGUgd2l0aCBhCitjb21tZW50IG9mIHRoZSBmb3JtIGBgIyBkb2N0ZXN0OiAtT1BUSU9OYGA6CisKKyAgICA+Pj4gZGVmIGYoeCk6IHInJycKKyAgICAuLi4gICAgID4+PiBwcmludCByYW5nZSgxMCkKKyAgICAuLi4gICAgIFswLCAxLCAuLi4sIDldCisgICAgLi4uCisgICAgLi4uICAgICA+Pj4gIyBzaG91bGQgZmFpbDogbm8gZWxsaXBzaXMKKyAgICAuLi4gICAgID4+PiBwcmludCByYW5nZSgxMCkgICAgICAgIyBkb2N0ZXN0OiAtRUxMSVBTSVMKKyAgICAuLi4gICAgIFswLCAxLCAuLi4sIDldCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25mbGFncz1kb2N0ZXN0LkVMTElQU0lTKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNiwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCByYW5nZSgxMCkgICAgICAgIyBkb2N0ZXN0OiAtRUxMSVBTSVMKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgWzAsIDEsIC4uLiwgOV0KKyAgICBHb3Q6CisgICAgICAgIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MikKKworT3B0aW9uIGRpcmVjdGl2ZXMgYWZmZWN0IG9ubHkgdGhlIGV4YW1wbGUgdGhhdCB0aGV5IGFwcGVhciB3aXRoOyB0aGV5CitkbyBub3QgY2hhbmdlIHRoZSBvcHRpb25zIGZvciBzdXJyb3VuZGluZyBleGFtcGxlczoKKworICAgID4+PiBkZWYgZih4KTogcicnJworICAgIC4uLiAgICAgPj4+IHByaW50IHJhbmdlKDEwKSAgICAgICAjIFNob3VsZCBmYWlsOiBubyBlbGxpcHNpcworICAgIC4uLiAgICAgWzAsIDEsIC4uLiwgOV0KKyAgICAuLi4KKyAgICAuLi4gICAgID4+PiBwcmludCByYW5nZSgxMCkgICAgICAgIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAuLi4gICAgIFswLCAxLCAuLi4sIDldCisgICAgLi4uCisgICAgLi4uICAgICA+Pj4gcHJpbnQgcmFuZ2UoMTApICAgICAgICMgU2hvdWxkIGZhaWw6IG5vIGVsbGlwc2lzCisgICAgLi4uICAgICBbMCwgMSwgLi4uLCA5XQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgMiwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCByYW5nZSgxMCkgICAgICAgIyBTaG91bGQgZmFpbDogbm8gZWxsaXBzaXMKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgWzAsIDEsIC4uLiwgOV0KKyAgICBHb3Q6CisgICAgICAgIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XQorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA4LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHByaW50IHJhbmdlKDEwKSAgICAgICAjIFNob3VsZCBmYWlsOiBubyBlbGxpcHNpcworICAgIEV4cGVjdGVkOgorICAgICAgICBbMCwgMSwgLi4uLCA5XQorICAgIEdvdDoKKyAgICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTIsIGF0dGVtcHRlZD0zKQorCitNdWx0aXBsZSBvcHRpb25zIG1heSBiZSBtb2RpZmllZCBieSBhIHNpbmdsZSBvcHRpb24gZGlyZWN0aXZlLiAgVGhleQorbWF5IGJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLCBjb21tYXMsIG9yIGJvdGg6CisKKyAgICA+Pj4gZGVmIGYoeCk6IHInJycKKyAgICAuLi4gICAgID4+PiBwcmludCByYW5nZSgxMCkgICAgICAgIyBTaG91bGQgZmFpbAorICAgIC4uLiAgICAgWzAsIDEsICAuLi4sICAgOV0KKyAgICAuLi4gICAgID4+PiBwcmludCByYW5nZSgxMCkgICAgICAgIyBTaG91bGQgc3VjY2VlZAorICAgIC4uLiAgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorICAgIC4uLiAgICAgWzAsIDEsICAuLi4sICAgOV0KKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDIsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcHJpbnQgcmFuZ2UoMTApICAgICAgICMgU2hvdWxkIGZhaWwKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgWzAsIDEsICAuLi4sICAgOV0KKyAgICBHb3Q6CisgICAgICAgIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MikKKworICAgID4+PiBkZWYgZih4KTogcicnJworICAgIC4uLiAgICAgPj4+IHByaW50IHJhbmdlKDEwKSAgICAgICAjIFNob3VsZCBmYWlsCisgICAgLi4uICAgICBbMCwgMSwgIC4uLiwgICA5XQorICAgIC4uLiAgICAgPj4+IHByaW50IHJhbmdlKDEwKSAgICAgICAjIFNob3VsZCBzdWNjZWVkCisgICAgLi4uICAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMsK05PUk1BTElaRV9XSElURVNQQUNFCisgICAgLi4uICAgICBbMCwgMSwgIC4uLiwgICA5XQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgMiwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCByYW5nZSgxMCkgICAgICAgIyBTaG91bGQgZmFpbAorICAgIEV4cGVjdGVkOgorICAgICAgICBbMCwgMSwgIC4uLiwgICA5XQorICAgIEdvdDoKKyAgICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQorCisgICAgPj4+IGRlZiBmKHgpOiByJycnCisgICAgLi4uICAgICA+Pj4gcHJpbnQgcmFuZ2UoMTApICAgICAgICMgU2hvdWxkIGZhaWwKKyAgICAuLi4gICAgIFswLCAxLCAgLi4uLCAgIDldCisgICAgLi4uICAgICA+Pj4gcHJpbnQgcmFuZ2UoMTApICAgICAgICMgU2hvdWxkIHN1Y2NlZWQKKyAgICAuLi4gICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUywgK05PUk1BTElaRV9XSElURVNQQUNFCisgICAgLi4uICAgICBbMCwgMSwgIC4uLiwgICA5XQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgMiwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCByYW5nZSgxMCkgICAgICAgIyBTaG91bGQgZmFpbAorICAgIEV4cGVjdGVkOgorICAgICAgICBbMCwgMSwgIC4uLiwgICA5XQorICAgIEdvdDoKKyAgICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQorCitUaGUgb3B0aW9uIGRpcmVjdGl2ZSBtYXkgYmUgcHV0IG9uIHRoZSBsaW5lIGZvbGxvd2luZyB0aGUgc291cmNlLCBhcworbG9uZyBhcyBhIGNvbnRpbnVhdGlvbiBwcm9tcHQgaXMgdXNlZDoKKworICAgID4+PiBkZWYgZih4KTogcicnJworICAgIC4uLiAgICAgPj4+IHByaW50IHJhbmdlKDEwKQorICAgIC4uLiAgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgLi4uICAgICBbMCwgMSwgLi4uLCA5XQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTEpCisKK0ZvciBleGFtcGxlcyB3aXRoIG11bHRpLWxpbmUgc291cmNlLCB0aGUgb3B0aW9uIGRpcmVjdGl2ZSBtYXkgYXBwZWFyCithdCB0aGUgZW5kIG9mIGFueSBsaW5lOgorCisgICAgPj4+IGRlZiBmKHgpOiByJycnCisgICAgLi4uICAgICA+Pj4gZm9yIHggaW4gcmFuZ2UoMTApOiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgIC4uLiAgICAgLi4uICAgICBwcmludCB4LAorICAgIC4uLiAgICAgMCAxIDIgLi4uIDkKKyAgICAuLi4KKyAgICAuLi4gICAgID4+PiBmb3IgeCBpbiByYW5nZSgxMCk6CisgICAgLi4uICAgICAuLi4gICAgIHByaW50IHgsICAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgIC4uLiAgICAgMCAxIDIgLi4uIDkKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQorCitJZiBtb3JlIHRoYW4gb25lIGxpbmUgb2YgYW4gZXhhbXBsZSB3aXRoIG11bHRpLWxpbmUgc291cmNlIGhhcyBhbgorb3B0aW9uIGRpcmVjdGl2ZSwgdGhlbiB0aGV5IGFyZSBjb21iaW5lZDoKKworICAgID4+PiBkZWYgZih4KTogcicnJworICAgIC4uLiAgICAgU2hvdWxkIGZhaWwgKG9wdGlvbiBkaXJlY3RpdmUgbm90IG9uIHRoZSBsYXN0IGxpbmUpOgorICAgIC4uLiAgICAgICAgID4+PiBmb3IgeCBpbiByYW5nZSgxMCk6ICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgLi4uICAgICAgICAgLi4uICAgICBwcmludCB4LCAgICAgICAgIyBkb2N0ZXN0OiArTk9STUFMSVpFX1dISVRFU1BBQ0UKKyAgICAuLi4gICAgICAgICAwICAxICAgIDIuLi45CisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKKworSXQgaXMgYW4gZXJyb3IgdG8gaGF2ZSBhIGNvbW1lbnQgb2YgdGhlIGZvcm0gYGAjIGRvY3Rlc3Q6YGAgdGhhdCBpcworKm5vdCogZm9sbG93ZWQgYnkgd29yZHMgb2YgdGhlIGZvcm0gYGArT1BUSU9OYGAgb3IgYGAtT1BUSU9OYGAsIHdoZXJlCitgYE9QVElPTmBgIGlzIGFuIG9wdGlvbiB0aGF0IGhhcyBiZWVuIHJlZ2lzdGVyZWQgd2l0aAorYHJlZ2lzdGVyX29wdGlvbmA6CisKKyAgICA+Pj4gIyBFcnJvcjogT3B0aW9uIG5vdCByZWdpc3RlcmVkCisgICAgPj4+IHMgPSAnPj4+IHByaW50IDEyICAgI2RvY3Rlc3Q6ICtCQURPUFRJT04nCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RQYXJzZXIoKS5nZXRfZG9jdGVzdChzLCB7fSwgJ3MnLCAncy5weScsIDApCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFZhbHVlRXJyb3I6IGxpbmUgMSBvZiB0aGUgZG9jdGVzdCBmb3IgcyBoYXMgYW4gaW52YWxpZCBvcHRpb246ICcrQkFET1BUSU9OJworCisgICAgPj4+ICMgRXJyb3I6IE5vICsgb3IgLSBwcmVmaXgKKyAgICA+Pj4gcyA9ICc+Pj4gcHJpbnQgMTIgICAjZG9jdGVzdDogRUxMSVBTSVMnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RQYXJzZXIoKS5nZXRfZG9jdGVzdChzLCB7fSwgJ3MnLCAncy5weScsIDApCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFZhbHVlRXJyb3I6IGxpbmUgMSBvZiB0aGUgZG9jdGVzdCBmb3IgcyBoYXMgYW4gaW52YWxpZCBvcHRpb246ICdFTExJUFNJUycKKworSXQgaXMgYW4gZXJyb3IgdG8gdXNlIGFuIG9wdGlvbiBkaXJlY3RpdmUgb24gYSBsaW5lIHRoYXQgY29udGFpbnMgbm8KK3NvdXJjZToKKworICAgID4+PiBzID0gJz4+PiAjIGRvY3Rlc3Q6ICtFTExJUFNJUycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdFBhcnNlcigpLmdldF9kb2N0ZXN0KHMsIHt9LCAncycsICdzLnB5JywgMCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgVmFsdWVFcnJvcjogbGluZSAwIG9mIHRoZSBkb2N0ZXN0IGZvciBzIGhhcyBhbiBvcHRpb24gZGlyZWN0aXZlIG9uIGEgbGluZSB3aXRoIG5vIGV4YW1wbGU6ICcjIGRvY3Rlc3Q6ICtFTExJUFNJUycKKworICAgICIiIgorCisgICAgZGVmIHRlc3RfdW5pY29kZV9vdXRwdXQoc2VsZik6IHIiIiIKKworQ2hlY2sgdGhhdCB1bmljb2RlIG91dHB1dCB3b3JrczoKKworICAgID4+PiB1J1x4ZTknCisgICAgdSdceGU5JworCitJZiB3ZSByZXR1cm4gdW5pY29kZSwgU3Bvb2ZPdXQncyBidWYgdmFyaWFibGUgYmVjb21lcyBhdXRvbWFnaWNhbGx5Citjb252ZXJ0ZWQgdG8gdW5pY29kZS4gVGhpcyBtZWFucyBhbGwgc3Vic2VxdWVudCBvdXRwdXQgYmVjb21lcyBjb252ZXJ0ZWQKK3RvIHVuaWNvZGUsIGFuZCBpZiB0aGUgb3V0cHV0IGNvbnRhaW5zIG5vbi1hc2NpaSBjaGFyYWN0ZXJzIHRoYXQgZmFpbGVkLgorSXQgdXNlZCB0byBiZSB0aGF0IHRoaXMgc3RhdGUgY2hhbmdlIGNhcnJpZWQgb24gYmV0d2VlbiB0ZXN0cywgbWVhbmluZwordGVzdHMgd291bGQgZmFpbCBpZiB1bmljb2RlIGhhcyBiZWVuIG91dHB1dCBwcmV2aW91c2x5IGluIHRoZSB0ZXN0cnVuLgorVGhpcyB0ZXN0IHRlc3RzIHRoYXQgdGhpcyBpcyBubyBsb25nZXIgc286CisKKyAgICA+Pj4gcHJpbnQgdSdhYmMnCisgICAgYWJjCisKK0FuZCB0aGVuIHJldHVybiBhIHN0cmluZyB3aXRoIG5vbi1hc2NpaSBjaGFyYWN0ZXJzOgorCisgICAgPj4+IHByaW50IHUnXHhlOScuZW5jb2RlKCd1dGYtOCcpCisgICAgw6kKKworICAgICIiIgorCisKK2RlZiB0ZXN0X3Rlc3Rzb3VyY2UoKTogciIiIgorVW5pdCB0ZXN0cyBmb3IgYHRlc3Rzb3VyY2UoKWAuCisKK1RoZSB0ZXN0c291cmNlKCkgZnVuY3Rpb24gdGFrZXMgYSBtb2R1bGUgYW5kIGEgbmFtZSwgZmluZHMgdGhlIChmaXJzdCkKK3Rlc3Qgd2l0aCB0aGF0IG5hbWUgaW4gdGhhdCBtb2R1bGUsIGFuZCBjb252ZXJ0cyBpdCB0byBhIHNjcmlwdC4gVGhlCitleGFtcGxlIGNvZGUgaXMgY29udmVydGVkIHRvIHJlZ3VsYXIgUHl0aG9uIGNvZGUuICBUaGUgc3Vycm91bmRpbmcKK3dvcmRzIGFuZCBleHBlY3RlZCBvdXRwdXQgYXJlIGNvbnZlcnRlZCB0byBjb21tZW50czoKKworICAgID4+PiBpbXBvcnQgdGVzdC50ZXN0X2RvY3Rlc3QKKyAgICA+Pj4gbmFtZSA9ICd0ZXN0LnRlc3RfZG9jdGVzdC5zYW1wbGVfZnVuYycKKyAgICA+Pj4gcHJpbnQgZG9jdGVzdC50ZXN0c291cmNlKHRlc3QudGVzdF9kb2N0ZXN0LCBuYW1lKQorICAgICMgQmxhaCBibGFoCisgICAgIworICAgIHByaW50IHNhbXBsZV9mdW5jKDIyKQorICAgICMgRXhwZWN0ZWQ6CisgICAgIyMgNDQKKyAgICAjCisgICAgIyBZZWUgaGEhCisgICAgPEJMQU5LTElORT4KKworICAgID4+PiBuYW1lID0gJ3Rlc3QudGVzdF9kb2N0ZXN0LlNhbXBsZU5ld1N0eWxlQ2xhc3MnCisgICAgPj4+IHByaW50IGRvY3Rlc3QudGVzdHNvdXJjZSh0ZXN0LnRlc3RfZG9jdGVzdCwgbmFtZSkKKyAgICBwcmludCAnMVxuMlxuMycKKyAgICAjIEV4cGVjdGVkOgorICAgICMjIDEKKyAgICAjIyAyCisgICAgIyMgMworICAgIDxCTEFOS0xJTkU+CisKKyAgICA+Pj4gbmFtZSA9ICd0ZXN0LnRlc3RfZG9jdGVzdC5TYW1wbGVDbGFzcy5hX2NsYXNzbWV0aG9kJworICAgID4+PiBwcmludCBkb2N0ZXN0LnRlc3Rzb3VyY2UodGVzdC50ZXN0X2RvY3Rlc3QsIG5hbWUpCisgICAgcHJpbnQgU2FtcGxlQ2xhc3MuYV9jbGFzc21ldGhvZCgxMCkKKyAgICAjIEV4cGVjdGVkOgorICAgICMjIDEyCisgICAgcHJpbnQgU2FtcGxlQ2xhc3MoMCkuYV9jbGFzc21ldGhvZCgxMCkKKyAgICAjIEV4cGVjdGVkOgorICAgICMjIDEyCisgICAgPEJMQU5LTElORT4KKyIiIgorCitkZWYgdGVzdF9kZWJ1ZygpOiByIiIiCisKK0NyZWF0ZSBhIGRvY3N0cmluZyB0aGF0IHdlIHdhbnQgdG8gZGVidWc6CisKKyAgICA+Pj4gcyA9ICcnJworICAgIC4uLiAgICAgPj4+IHggPSAxMgorICAgIC4uLiAgICAgPj4+IHByaW50IHgKKyAgICAuLi4gICAgIDEyCisgICAgLi4uICAgICAnJycKKworQ3JlYXRlIHNvbWUgZmFrZSBzdGRpbiBpbnB1dCwgdG8gZmVlZCB0byB0aGUgZGVidWdnZXI6CisKKyAgICA+Pj4gaW1wb3J0IHRlbXBmaWxlCisgICAgPj4+IHJlYWxfc3RkaW4gPSBzeXMuc3RkaW4KKyAgICA+Pj4gc3lzLnN0ZGluID0gX0Zha2VJbnB1dChbJ25leHQnLCAncHJpbnQgeCcsICdjb250aW51ZSddKQorCitSdW4gdGhlIGRlYnVnZ2VyIG9uIHRoZSBkb2NzdHJpbmcsIGFuZCB0aGVuIHJlc3RvcmUgc3lzLnN0ZGluLgorCisgICAgPj4+IHRyeTogZG9jdGVzdC5kZWJ1Z19zcmMocykKKyAgICAuLi4gZmluYWxseTogc3lzLnN0ZGluID0gcmVhbF9zdGRpbgorICAgID4gPHN0cmluZz4oMSk8bW9kdWxlPigpCisgICAgKFBkYikgbmV4dAorICAgIDEyCisgICAgLS1SZXR1cm4tLQorICAgID4gPHN0cmluZz4oMSk8bW9kdWxlPigpLT5Ob25lCisgICAgKFBkYikgcHJpbnQgeAorICAgIDEyCisgICAgKFBkYikgY29udGludWUKKworIiIiCisKK2RlZiB0ZXN0X3BkYl9zZXRfdHJhY2UoKToKKyAgICAiIiJVc2luZyBwZGIuc2V0X3RyYWNlIGZyb20gYSBkb2N0ZXN0LgorCisgICAgWW91IGNhbiB1c2UgcGRiLnNldF90cmFjZSBmcm9tIGEgZG9jdGVzdC4gIFRvIGRvIHNvLCB5b3UgbXVzdAorICAgIHJldHJpZXZlIHRoZSBzZXRfdHJhY2UgZnVuY3Rpb24gZnJvbSB0aGUgcGRiIG1vZHVsZSBhdCB0aGUgdGltZQorICAgIHlvdSB1c2UgaXQuICBUaGUgZG9jdGVzdCBtb2R1bGUgY2hhbmdlcyBzeXMuc3Rkb3V0IHNvIHRoYXQgaXQgY2FuCisgICAgY2FwdHVyZSBwcm9ncmFtIG91dHB1dC4gIEl0IGFsc28gdGVtcG9yYXJpbHkgcmVwbGFjZXMgcGRiLnNldF90cmFjZQorICAgIHdpdGggYSB2ZXJzaW9uIHRoYXQgcmVzdG9yZXMgc3Rkb3V0LiAgVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHlvdSB0bworICAgIHNlZSBkZWJ1Z2dlciBvdXRwdXQuCisKKyAgICAgID4+PiBkb2MgPSAnJycKKyAgICAgIC4uLiA+Pj4geCA9IDQyCisgICAgICAuLi4gPj4+IHJhaXNlIEV4Y2VwdGlvbignY2zDqScpCisgICAgICAuLi4gVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uIEV4Y2VwdGlvbjogY2zDqQorICAgICAgLi4uID4+PiBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKCkKKyAgICAgIC4uLiAnJycKKyAgICAgID4+PiBwYXJzZXIgPSBkb2N0ZXN0LkRvY1Rlc3RQYXJzZXIoKQorICAgICAgPj4+IHRlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jLCB7fSwgImZvby1iw6RyQGJheiIsICJmb28tYsOkckBiYXoucHkiLCAwKQorICAgICAgPj4+IHJ1bm5lciA9IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKQorCisgICAgVG8gZGVtb25zdHJhdGUgdGhpcywgd2UnbGwgY3JlYXRlIGEgZmFrZSBzdGFuZGFyZCBpbnB1dCB0aGF0CisgICAgY2FwdHVyZXMgb3VyIGRlYnVnZ2VyIGlucHV0OgorCisgICAgICA+Pj4gaW1wb3J0IHRlbXBmaWxlCisgICAgICA+Pj4gcmVhbF9zdGRpbiA9IHN5cy5zdGRpbgorICAgICAgPj4+IHN5cy5zdGRpbiA9IF9GYWtlSW5wdXQoWworICAgICAgLi4uICAgICdwcmludCB4JywgICMgcHJpbnQgZGF0YSBkZWZpbmVkIGJ5IHRoZSBleGFtcGxlCisgICAgICAuLi4gICAgJ2NvbnRpbnVlJywgIyBzdG9wIGRlYnVnZ2luZworICAgICAgLi4uICAgICcnXSkKKworICAgICAgPj4+IHRyeTogcnVubmVyLnJ1bih0ZXN0KQorICAgICAgLi4uIGZpbmFsbHk6IHN5cy5zdGRpbiA9IHJlYWxfc3RkaW4KKyAgICAgIC0tUmV0dXJuLS0KKyAgICAgID4gPGRvY3Rlc3QgZm9vLWLDpHJAYmF6WzJdPigxKTxtb2R1bGU+KCktPk5vbmUKKyAgICAgIC0+IGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKQorICAgICAgKFBkYikgcHJpbnQgeAorICAgICAgNDIKKyAgICAgIChQZGIpIGNvbnRpbnVlCisgICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTMpCisKKyAgICAgIFlvdSBjYW4gYWxzbyBwdXQgcGRiLnNldF90cmFjZSBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGEgdGVzdDoKKworICAgICAgPj4+IGRlZiBjYWxsc19zZXRfdHJhY2UoKToKKyAgICAgIC4uLiAgICB5PTIKKyAgICAgIC4uLiAgICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKCkKKworICAgICAgPj4+IGRvYyA9ICcnJworICAgICAgLi4uID4+PiB4PTEKKyAgICAgIC4uLiA+Pj4gY2FsbHNfc2V0X3RyYWNlKCkKKyAgICAgIC4uLiAnJycKKyAgICAgID4+PiB0ZXN0ID0gcGFyc2VyLmdldF9kb2N0ZXN0KGRvYywgZ2xvYmFscygpLCAiZm9vLWLDpHJAYmF6IiwgImZvby1iw6RyQGJhei5weSIsIDApCisgICAgICA+Pj4gcmVhbF9zdGRpbiA9IHN5cy5zdGRpbgorICAgICAgPj4+IHN5cy5zdGRpbiA9IF9GYWtlSW5wdXQoWworICAgICAgLi4uICAgICdwcmludCB5JywgICMgcHJpbnQgZGF0YSBkZWZpbmVkIGluIHRoZSBmdW5jdGlvbgorICAgICAgLi4uICAgICd1cCcsICAgICAgICMgb3V0IG9mIGZ1bmN0aW9uCisgICAgICAuLi4gICAgJ3ByaW50IHgnLCAgIyBwcmludCBkYXRhIGRlZmluZWQgYnkgdGhlIGV4YW1wbGUKKyAgICAgIC4uLiAgICAnY29udGludWUnLCAjIHN0b3AgZGVidWdnaW5nCisgICAgICAuLi4gICAgJyddKQorCisgICAgICA+Pj4gdHJ5OgorICAgICAgLi4uICAgICBydW5uZXIucnVuKHRlc3QpCisgICAgICAuLi4gZmluYWxseToKKyAgICAgIC4uLiAgICAgc3lzLnN0ZGluID0gcmVhbF9zdGRpbgorICAgICAgLS1SZXR1cm4tLQorICAgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfZG9jdGVzdC50ZXN0X3BkYl9zZXRfdHJhY2VbOF0+KDMpY2FsbHNfc2V0X3RyYWNlKCktPk5vbmUKKyAgICAgIC0+IGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKQorICAgICAgKFBkYikgcHJpbnQgeQorICAgICAgMgorICAgICAgKFBkYikgdXAKKyAgICAgID4gPGRvY3Rlc3QgZm9vLWLDpHJAYmF6WzFdPigxKTxtb2R1bGU+KCkKKyAgICAgIC0+IGNhbGxzX3NldF90cmFjZSgpCisgICAgICAoUGRiKSBwcmludCB4CisgICAgICAxCisgICAgICAoUGRiKSBjb250aW51ZQorICAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQorCisgICAgRHVyaW5nIGludGVyYWN0aXZlIGRlYnVnZ2luZywgc291cmNlIGNvZGUgaXMgc2hvd24sIGV2ZW4gZm9yCisgICAgZG9jdGVzdCBleGFtcGxlczoKKworICAgICAgPj4+IGRvYyA9ICcnJworICAgICAgLi4uID4+PiBkZWYgZih4KToKKyAgICAgIC4uLiAuLi4gICAgIGcoeCoyKQorICAgICAgLi4uID4+PiBkZWYgZyh4KToKKyAgICAgIC4uLiAuLi4gICAgIHByaW50IHgrMworICAgICAgLi4uIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpCisgICAgICAuLi4gPj4+IGYoMykKKyAgICAgIC4uLiAnJycKKyAgICAgID4+PiB0ZXN0ID0gcGFyc2VyLmdldF9kb2N0ZXN0KGRvYywgZ2xvYmFscygpLCAiZm9vLWLDpHJAYmF6IiwgImZvby1iw6RyQGJhei5weSIsIDApCisgICAgICA+Pj4gcmVhbF9zdGRpbiA9IHN5cy5zdGRpbgorICAgICAgPj4+IHN5cy5zdGRpbiA9IF9GYWtlSW5wdXQoWworICAgICAgLi4uICAgICdsaXN0JywgICAgICMgbGlzdCBzb3VyY2UgZnJvbSBleGFtcGxlIDIKKyAgICAgIC4uLiAgICAnbmV4dCcsICAgICAjIHJldHVybiBmcm9tIGcoKQorICAgICAgLi4uICAgICdsaXN0JywgICAgICMgbGlzdCBzb3VyY2UgZnJvbSBleGFtcGxlIDEKKyAgICAgIC4uLiAgICAnbmV4dCcsICAgICAjIHJldHVybiBmcm9tIGYoKQorICAgICAgLi4uICAgICdsaXN0JywgICAgICMgbGlzdCBzb3VyY2UgZnJvbSBleGFtcGxlIDMKKyAgICAgIC4uLiAgICAnY29udGludWUnLCAjIHN0b3AgZGVidWdnaW5nCisgICAgICAuLi4gICAgJyddKQorICAgICAgPj4+IHRyeTogcnVubmVyLnJ1bih0ZXN0KQorICAgICAgLi4uIGZpbmFsbHk6IHN5cy5zdGRpbiA9IHJlYWxfc3RkaW4KKyAgICAgIC4uLiAjIGRvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorICAgICAgLS1SZXR1cm4tLQorICAgICAgPiA8ZG9jdGVzdCBmb28tYsOkckBiYXpbMV0+KDMpZygpLT5Ob25lCisgICAgICAtPiBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKCkKKyAgICAgIChQZGIpIGxpc3QKKyAgICAgICAgMSAgICAgZGVmIGcoeCk6CisgICAgICAgIDIgICAgICAgICBwcmludCB4KzMKKyAgICAgICAgMyAgLT4gICAgIGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKQorICAgICAgW0VPRl0KKyAgICAgIChQZGIpIG5leHQKKyAgICAgIC0tUmV0dXJuLS0KKyAgICAgID4gPGRvY3Rlc3QgZm9vLWLDpHJAYmF6WzBdPigyKWYoKS0+Tm9uZQorICAgICAgLT4gZyh4KjIpCisgICAgICAoUGRiKSBsaXN0CisgICAgICAgIDEgICAgIGRlZiBmKHgpOgorICAgICAgICAyICAtPiAgICAgZyh4KjIpCisgICAgICBbRU9GXQorICAgICAgKFBkYikgbmV4dAorICAgICAgLS1SZXR1cm4tLQorICAgICAgPiA8ZG9jdGVzdCBmb28tYsOkckBiYXpbMl0+KDEpPG1vZHVsZT4oKS0+Tm9uZQorICAgICAgLT4gZigzKQorICAgICAgKFBkYikgbGlzdAorICAgICAgICAxICAtPiBmKDMpCisgICAgICBbRU9GXQorICAgICAgKFBkYikgY29udGludWUKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgIEZpbGUgImZvby1iw6RyQGJhei5weSIsIGxpbmUgNywgaW4gZm9vLWLDpHJAYmF6CisgICAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgICBmKDMpCisgICAgICBFeHBlY3RlZCBub3RoaW5nCisgICAgICBHb3Q6CisgICAgICAgICAgOQorICAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0zKQorICAgICAgIiIiCisKK2RlZiB0ZXN0X3BkYl9zZXRfdHJhY2VfbmVzdGVkKCk6CisgICAgIiIiVGhpcyBpbGx1c3RyYXRlcyBtb3JlLWRlbWFuZGluZyB1c2Ugb2Ygc2V0X3RyYWNlIHdpdGggbmVzdGVkIGZ1bmN0aW9ucy4KKworICAgID4+PiBjbGFzcyBDKG9iamVjdCk6CisgICAgLi4uICAgICBkZWYgY2FsbHNfc2V0X3RyYWNlKHNlbGYpOgorICAgIC4uLiAgICAgICAgIHkgPSAxCisgICAgLi4uICAgICAgICAgaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpCisgICAgLi4uICAgICAgICAgc2VsZi5mMSgpCisgICAgLi4uICAgICAgICAgeSA9IDIKKyAgICAuLi4gICAgIGRlZiBmMShzZWxmKToKKyAgICAuLi4gICAgICAgICB4ID0gMQorICAgIC4uLiAgICAgICAgIHNlbGYuZjIoKQorICAgIC4uLiAgICAgICAgIHggPSAyCisgICAgLi4uICAgICBkZWYgZjIoc2VsZik6CisgICAgLi4uICAgICAgICAgeiA9IDEKKyAgICAuLi4gICAgICAgICB6ID0gMgorCisgICAgPj4+IGNhbGxzX3NldF90cmFjZSA9IEMoKS5jYWxsc19zZXRfdHJhY2UKKworICAgID4+PiBkb2MgPSAnJycKKyAgICAuLi4gPj4+IGEgPSAxCisgICAgLi4uID4+PiBjYWxsc19zZXRfdHJhY2UoKQorICAgIC4uLiAnJycKKyAgICA+Pj4gcGFyc2VyID0gZG9jdGVzdC5Eb2NUZXN0UGFyc2VyKCkKKyAgICA+Pj4gcnVubmVyID0gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpCisgICAgPj4+IHRlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jLCBnbG9iYWxzKCksICJmb28tYsOkckBiYXoiLCAiZm9vLWLDpHJAYmF6LnB5IiwgMCkKKyAgICA+Pj4gcmVhbF9zdGRpbiA9IHN5cy5zdGRpbgorICAgID4+PiBzeXMuc3RkaW4gPSBfRmFrZUlucHV0KFsKKyAgICAuLi4gICAgJ3ByaW50IHknLCAgIyBwcmludCBkYXRhIGRlZmluZWQgaW4gdGhlIGZ1bmN0aW9uCisgICAgLi4uICAgICdzdGVwJywgJ3N0ZXAnLCAnc3RlcCcsICdzdGVwJywgJ3N0ZXAnLCAnc3RlcCcsICdwcmludCB6JywKKyAgICAuLi4gICAgJ3VwJywgJ3ByaW50IHgnLAorICAgIC4uLiAgICAndXAnLCAncHJpbnQgeScsCisgICAgLi4uICAgICd1cCcsICdwcmludCBmb28nLAorICAgIC4uLiAgICAnY29udGludWUnLCAjIHN0b3AgZGVidWdnaW5nCisgICAgLi4uICAgICcnXSkKKworICAgID4+PiB0cnk6CisgICAgLi4uICAgICBydW5uZXIucnVuKHRlc3QpCisgICAgLi4uIGZpbmFsbHk6CisgICAgLi4uICAgICBzeXMuc3RkaW4gPSByZWFsX3N0ZGluCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfZG9jdGVzdC50ZXN0X3BkYl9zZXRfdHJhY2VfbmVzdGVkWzBdPig1KWNhbGxzX3NldF90cmFjZSgpCisgICAgLT4gc2VsZi5mMSgpCisgICAgKFBkYikgcHJpbnQgeQorICAgIDEKKyAgICAoUGRiKSBzdGVwCisgICAgLS1DYWxsLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9kb2N0ZXN0LnRlc3RfcGRiX3NldF90cmFjZV9uZXN0ZWRbMF0+KDcpZjEoKQorICAgIC0+IGRlZiBmMShzZWxmKToKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfZG9jdGVzdC50ZXN0X3BkYl9zZXRfdHJhY2VfbmVzdGVkWzBdPig4KWYxKCkKKyAgICAtPiB4ID0gMQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9kb2N0ZXN0LnRlc3RfcGRiX3NldF90cmFjZV9uZXN0ZWRbMF0+KDkpZjEoKQorICAgIC0+IHNlbGYuZjIoKQorICAgIChQZGIpIHN0ZXAKKyAgICAtLUNhbGwtLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X2RvY3Rlc3QudGVzdF9wZGJfc2V0X3RyYWNlX25lc3RlZFswXT4oMTEpZjIoKQorICAgIC0+IGRlZiBmMihzZWxmKToKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfZG9jdGVzdC50ZXN0X3BkYl9zZXRfdHJhY2VfbmVzdGVkWzBdPigxMilmMigpCisgICAgLT4geiA9IDEKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfZG9jdGVzdC50ZXN0X3BkYl9zZXRfdHJhY2VfbmVzdGVkWzBdPigxMylmMigpCisgICAgLT4geiA9IDIKKyAgICAoUGRiKSBwcmludCB6CisgICAgMQorICAgIChQZGIpIHVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfZG9jdGVzdC50ZXN0X3BkYl9zZXRfdHJhY2VfbmVzdGVkWzBdPig5KWYxKCkKKyAgICAtPiBzZWxmLmYyKCkKKyAgICAoUGRiKSBwcmludCB4CisgICAgMQorICAgIChQZGIpIHVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfZG9jdGVzdC50ZXN0X3BkYl9zZXRfdHJhY2VfbmVzdGVkWzBdPig1KWNhbGxzX3NldF90cmFjZSgpCisgICAgLT4gc2VsZi5mMSgpCisgICAgKFBkYikgcHJpbnQgeQorICAgIDEKKyAgICAoUGRiKSB1cAorICAgID4gPGRvY3Rlc3QgZm9vLWLDpHJAYmF6WzFdPigxKTxtb2R1bGU+KCkKKyAgICAtPiBjYWxsc19zZXRfdHJhY2UoKQorICAgIChQZGIpIHByaW50IGZvbworICAgICoqKiBOYW1lRXJyb3I6IG5hbWUgJ2ZvbycgaXMgbm90IGRlZmluZWQKKyAgICAoUGRiKSBjb250aW51ZQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MikKKyIiIgorCitkZWYgdGVzdF9Eb2NUZXN0U3VpdGUoKToKKyAgICAiIiJEb2NUZXN0U3VpdGUgY3JlYXRlcyBhIHVuaXR0ZXN0IHRlc3Qgc3VpdGUgZnJvbSBhIGRvY3Rlc3QuCisKKyAgICAgICBXZSBjcmVhdGUgYSBTdWl0ZSBieSBwcm92aWRpbmcgYSBtb2R1bGUuICBBIG1vZHVsZSBjYW4gYmUgcHJvdmlkZWQKKyAgICAgICBieSBwYXNzaW5nIGEgbW9kdWxlIG9iamVjdDoKKworICAgICAgICAgPj4+IGltcG9ydCB1bml0dGVzdAorICAgICAgICAgPj4+IGltcG9ydCB0ZXN0LnNhbXBsZV9kb2N0ZXN0CisgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSh0ZXN0LnNhbXBsZV9kb2N0ZXN0KQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9ND4KKworICAgICAgIFdlIGNhbiBhbHNvIHN1cHBseSB0aGUgbW9kdWxlIGJ5IG5hbWU6CisKKyAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0JykKKyAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj05IGVycm9ycz0wIGZhaWx1cmVzPTQ+CisKKyAgICAgICBUaGUgbW9kdWxlIG5lZWQgbm90IGNvbnRhaW4gYW55IGRvY3Rlc3QgZXhhbXBsZXM6CisKKyAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0X25vX2RvY3Rlc3RzJykKKyAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0wIGVycm9ycz0wIGZhaWx1cmVzPTA+CisKKyAgICAgICBIb3dldmVyLCBpZiBEb2NUZXN0U3VpdGUgZmluZHMgbm8gZG9jc3RyaW5ncywgaXQgcmFpc2VzIGFuIGVycm9yOgorCisgICAgICAgICA+Pj4gdHJ5OgorICAgICAgICAgLi4uICAgICBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSgndGVzdC5zYW1wbGVfZG9jdGVzdF9ub19kb2NzdHJpbmdzJykKKyAgICAgICAgIC4uLiBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgLi4uICAgICBlcnJvciA9IGUKKworICAgICAgICAgPj4+IHByaW50KGVycm9yLmFyZ3NbMV0pCisgICAgICAgICBoYXMgbm8gZG9jc3RyaW5ncworCisgICAgICAgWW91IGNhbiBwcmV2ZW50IHRoaXMgZXJyb3IgYnkgcGFzc2luZyBhIERvY1Rlc3RGaW5kZXIgaW5zdGFuY2Ugd2l0aAorICAgICAgIHRoZSBgZXhjbHVkZV9lbXB0eWAga2V5d29yZCBhcmd1bWVudCBzZXQgdG8gRmFsc2U6CisKKyAgICAgICAgID4+PiBmaW5kZXIgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoZXhjbHVkZV9lbXB0eT1GYWxzZSkKKyAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0X25vX2RvY3N0cmluZ3MnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9maW5kZXI9ZmluZGVyKQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTAgZXJyb3JzPTAgZmFpbHVyZXM9MD4KKworICAgICAgIFdlIGNhbiB1c2UgdGhlIGN1cnJlbnQgbW9kdWxlOgorCisgICAgICAgICA+Pj4gc3VpdGUgPSB0ZXN0LnNhbXBsZV9kb2N0ZXN0LnRlc3Rfc3VpdGUoKQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9ND4KKworICAgICAgIFdlIGNhbiBzdXBwbHkgZ2xvYmFsIHZhcmlhYmxlcy4gIElmIHdlIHBhc3MgZ2xvYnMsIHRoZXkgd2lsbCBiZQorICAgICAgIHVzZWQgaW5zdGVhZCBvZiB0aGUgbW9kdWxlIGdsb2JhbHMuICBIZXJlIHdlJ2xsIHBhc3MgYW4gZW1wdHkKKyAgICAgICBnbG9iYWxzLCB0cmlnZ2VyaW5nIGFuIGV4dHJhIGVycm9yOgorCisgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSgndGVzdC5zYW1wbGVfZG9jdGVzdCcsIGdsb2JzPXt9KQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9NT4KKworICAgICAgIEFsdGVybmF0aXZlbHksIHdlIGNhbiBwcm92aWRlIGV4dHJhIGdsb2JhbHMuICBIZXJlIHdlJ2xsIG1ha2UgYW4KKyAgICAgICBlcnJvciBnbyBhd2F5IGJ5IHByb3ZpZGluZyBhbiBleHRyYSBnbG9iYWwgdmFyaWFibGU6CisKKyAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhZ2xvYnM9eyd5JzogMX0pCisgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz0zPgorCisgICAgICAgWW91IGNhbiBwYXNzIG9wdGlvbiBmbGFncy4gIEhlcmUgd2UnbGwgY2F1c2UgYW4gZXh0cmEgZXJyb3IKKyAgICAgICBieSBkaXNhYmxpbmcgdGhlIGJsYW5rLWxpbmUgZmVhdHVyZToKKworICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoJ3Rlc3Quc2FtcGxlX2RvY3Rlc3QnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmZsYWdzPWRvY3Rlc3QuRE9OVF9BQ0NFUFRfQkxBTktMSU5FKQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9NT4KKworICAgICAgIFlvdSBjYW4gc3VwcGx5IHNldFVwIGFuZCB0ZWFyRG93biBmdW5jdGlvbnM6CisKKyAgICAgICAgID4+PiBkZWYgc2V0VXAodCk6CisgICAgICAgICAuLi4gICAgIGltcG9ydCB0ZXN0LnRlc3RfZG9jdGVzdAorICAgICAgICAgLi4uICAgICB0ZXN0LnRlc3RfZG9jdGVzdC5zaWxseVNldHVwID0gVHJ1ZQorCisgICAgICAgICA+Pj4gZGVmIHRlYXJEb3duKHQpOgorICAgICAgICAgLi4uICAgICBpbXBvcnQgdGVzdC50ZXN0X2RvY3Rlc3QKKyAgICAgICAgIC4uLiAgICAgZGVsIHRlc3QudGVzdF9kb2N0ZXN0LnNpbGx5U2V0dXAKKworICAgICAgIEhlcmUsIHdlIGluc3RhbGxlZCBhIHNpbGx5IHZhcmlhYmxlIHRoYXQgdGhlIHRlc3QgZXhwZWN0czoKKworICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoJ3Rlc3Quc2FtcGxlX2RvY3Rlc3QnLAorICAgICAgICAgLi4uICAgICAgc2V0VXA9c2V0VXAsIHRlYXJEb3duPXRlYXJEb3duKQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9Mz4KKworICAgICAgIEJ1dCB0aGUgdGVhckRvd24gcmVzdG9yZXMgc2FuaXR5OgorCisgICAgICAgICA+Pj4gaW1wb3J0IHRlc3QudGVzdF9kb2N0ZXN0CisgICAgICAgICA+Pj4gdGVzdC50ZXN0X2RvY3Rlc3Quc2lsbHlTZXR1cAorICAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAgLi4uCisgICAgICAgICBBdHRyaWJ1dGVFcnJvcjogJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3NpbGx5U2V0dXAnCisKKyAgICAgICBUaGUgc2V0VXAgYW5kIHRlYXJEb3duIGZ1bnRpb25zIGFyZSBwYXNzZWQgdGVzdCBvYmplY3RzLiBIZXJlCisgICAgICAgd2UnbGwgdXNlIHRoZSBzZXRVcCBmdW5jdGlvbiB0byBzdXBwbHkgdGhlIG1pc3NpbmcgdmFyaWFibGUgeToKKworICAgICAgICAgPj4+IGRlZiBzZXRVcCh0ZXN0KToKKyAgICAgICAgIC4uLiAgICAgdGVzdC5nbG9ic1sneSddID0gMQorCisgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSgndGVzdC5zYW1wbGVfZG9jdGVzdCcsIHNldFVwPXNldFVwKQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9Mz4KKworICAgICAgIEhlcmUsIHdlIGRpZG4ndCBuZWVkIHRvIHVzZSBhIHRlYXJEb3duIGZ1bmN0aW9uIGJlY2F1c2Ugd2UKKyAgICAgICBtb2RpZmllZCB0aGUgdGVzdCBnbG9iYWxzLCB3aGljaCBhcmUgYSBjb3B5IG9mIHRoZQorICAgICAgIHNhbXBsZV9kb2N0ZXN0IG1vZHVsZSBkaWN0aW9uYXJ5LiAgVGhlIHRlc3QgZ2xvYmFscyBhcmUKKyAgICAgICBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgZm9yIHVzIGFmdGVyIGEgdGVzdC4KKyAgICAgICAiIiIKKworZGVmIHRlc3RfRG9jRmlsZVN1aXRlKCk6CisgICAgIiIiV2UgY2FuIHRlc3QgdGVzdHMgZm91bmQgaW4gdGV4dCBmaWxlcyB1c2luZyBhIERvY0ZpbGVTdWl0ZS4KKworICAgICAgIFdlIGNyZWF0ZSBhIHN1aXRlIGJ5IHByb3ZpZGluZyB0aGUgbmFtZXMgb2Ygb25lIG9yIG1vcmUgdGV4dAorICAgICAgIGZpbGVzIHRoYXQgaW5jbHVkZSBleGFtcGxlczoKKworICAgICAgICAgPj4+IGltcG9ydCB1bml0dGVzdAorICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUoJ3Rlc3RfZG9jdGVzdC50eHQnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDIudHh0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X2RvY3Rlc3Q0LnR4dCcpCisgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0zPgorCisgICAgICAgVGhlIHRlc3QgZmlsZXMgYXJlIGxvb2tlZCBmb3IgaW4gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZQorICAgICAgIGNhbGxpbmcgbW9kdWxlLiAgQSBwYWNrYWdlIGtleXdvcmQgYXJndW1lbnQgY2FuIGJlIHByb3ZpZGVkIHRvCisgICAgICAgc3BlY2lmeSBhIGRpZmZlcmVudCByZWxhdGl2ZSBsb2NhdGlvbi4KKworICAgICAgICAgPj4+IGltcG9ydCB1bml0dGVzdAorICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUoJ3Rlc3RfZG9jdGVzdC50eHQnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDIudHh0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X2RvY3Rlc3Q0LnR4dCcsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlPSd0ZXN0JykKKyAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTM+CisKKyAgICAgICBTdXBwb3J0IGZvciB1c2luZyBhIHBhY2thZ2UncyBfX2xvYWRlcl9fLmdldF9kYXRhKCkgaXMgYWxzbworICAgICAgIHByb3ZpZGVkLgorCisgICAgICAgICA+Pj4gaW1wb3J0IHVuaXR0ZXN0LCBwa2d1dGlsLCB0ZXN0CisgICAgICAgICA+Pj4gYWRkZWRfbG9hZGVyID0gRmFsc2UKKyAgICAgICAgID4+PiBpZiBub3QgaGFzYXR0cih0ZXN0LCAnX19sb2FkZXJfXycpOgorICAgICAgICAgLi4uICAgICB0ZXN0Ll9fbG9hZGVyX18gPSBwa2d1dGlsLmdldF9sb2FkZXIodGVzdCkKKyAgICAgICAgIC4uLiAgICAgYWRkZWRfbG9hZGVyID0gVHJ1ZQorICAgICAgICAgPj4+IHRyeToKKyAgICAgICAgIC4uLiAgICAgc3VpdGUgPSBkb2N0ZXN0LkRvY0ZpbGVTdWl0ZSgndGVzdF9kb2N0ZXN0LnR4dCcsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDIudHh0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0NC50eHQnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2U9J3Rlc3QnKQorICAgICAgICAgLi4uICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICAgLi4uIGZpbmFsbHk6CisgICAgICAgICAuLi4gICAgIGlmIGFkZGVkX2xvYWRlcjoKKyAgICAgICAgIC4uLiAgICAgICAgIGRlbCB0ZXN0Ll9fbG9hZGVyX18KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0zPgorCisgICAgICAgJy8nIHNob3VsZCBiZSB1c2VkIGFzIGEgcGF0aCBzZXBhcmF0b3IuICBJdCB3aWxsIGJlIGNvbnZlcnRlZAorICAgICAgIHRvIGEgbmF0aXZlIHNlcGFyYXRvciBhdCBydW4gdGltZToKKworICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUoJy4uL3Rlc3QvdGVzdF9kb2N0ZXN0LnR4dCcpCisgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MSBlcnJvcnM9MCBmYWlsdXJlcz0xPgorCisgICAgICAgSWYgRG9jRmlsZVN1aXRlIGlzIHVzZWQgZnJvbSBhbiBpbnRlcmFjdGl2ZSBzZXNzaW9uLCB0aGVuIGZpbGVzCisgICAgICAgYXJlIHJlc29sdmVkIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3Rvcnkgb2Ygc3lzLmFyZ3ZbMF06CisKKyAgICAgICAgID4+PiBpbXBvcnQgdHlwZXMsIG9zLnBhdGgsIHRlc3QudGVzdF9kb2N0ZXN0CisgICAgICAgICA+Pj4gc2F2ZV9hcmd2ID0gc3lzLmFyZ3YKKyAgICAgICAgID4+PiBzeXMuYXJndiA9IFt0ZXN0LnRlc3RfZG9jdGVzdC5fX2ZpbGVfX10KKyAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jRmlsZVN1aXRlKCd0ZXN0X2RvY3Rlc3QudHh0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2U9dHlwZXMuTW9kdWxlVHlwZSgnX19tYWluX18nKSkKKyAgICAgICAgID4+PiBzeXMuYXJndiA9IHNhdmVfYXJndgorCisgICAgICAgQnkgc2V0dGluZyBgbW9kdWxlX3JlbGF0aXZlPUZhbHNlYCwgb3Mtc3BlY2lmaWMgcGF0aHMgbWF5IGJlCisgICAgICAgdXNlZCAoaW5jbHVkaW5nIGFic29sdXRlIHBhdGhzIGFuZCBwYXRocyByZWxhdGl2ZSB0byB0aGUKKyAgICAgICB3b3JraW5nIGRpcmVjdG9yeSk6CisKKyAgICAgICAgID4+PiAjIEdldCB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgdGVzdCBwYWNrYWdlLgorICAgICAgICAgPj4+IHRlc3RfZG9jdGVzdF9wYXRoID0gb3MucGF0aC5hYnNwYXRoKHRlc3QudGVzdF9kb2N0ZXN0Ll9fZmlsZV9fKQorICAgICAgICAgPj4+IHRlc3RfcGtnX3BhdGggPSBvcy5wYXRoLnNwbGl0KHRlc3RfZG9jdGVzdF9wYXRoKVswXQorCisgICAgICAgICA+Pj4gIyBVc2UgaXQgdG8gZmluZCB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0ZXN0X2RvY3Rlc3QudHh0LgorICAgICAgICAgPj4+IHRlc3RfZmlsZSA9IG9zLnBhdGguam9pbih0ZXN0X3BrZ19wYXRoLCAndGVzdF9kb2N0ZXN0LnR4dCcpCisKKyAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jRmlsZVN1aXRlKHRlc3RfZmlsZSwgbW9kdWxlX3JlbGF0aXZlPUZhbHNlKQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTEgZXJyb3JzPTAgZmFpbHVyZXM9MT4KKworICAgICAgIEl0IGlzIGFuIGVycm9yIHRvIHNwZWNpZnkgYHBhY2thZ2VgIHdoZW4gYG1vZHVsZV9yZWxhdGl2ZT1GYWxzZWA6CisKKyAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jRmlsZVN1aXRlKHRlc3RfZmlsZSwgbW9kdWxlX3JlbGF0aXZlPUZhbHNlLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZT0ndGVzdCcpCisgICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgICBWYWx1ZUVycm9yOiBQYWNrYWdlIG1heSBvbmx5IGJlIHNwZWNpZmllZCBmb3IgbW9kdWxlLXJlbGF0aXZlIHBhdGhzLgorCisgICAgICAgWW91IGNhbiBzcGVjaWZ5IGluaXRpYWwgZ2xvYmFsIHZhcmlhYmxlczoKKworICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUoJ3Rlc3RfZG9jdGVzdC50eHQnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDIudHh0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X2RvY3Rlc3Q0LnR4dCcsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9icz17J2Zhdm9yaXRlX2NvbG9yJzogJ2JsdWUnfSkKKyAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTI+CisKKyAgICAgICBJbiB0aGlzIGNhc2UsIHdlIHN1cHBsaWVkIGEgbWlzc2luZyBmYXZvcml0ZSBjb2xvci4gWW91IGNhbgorICAgICAgIHByb3ZpZGUgZG9jdGVzdCBvcHRpb25zOgorCisgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY0ZpbGVTdWl0ZSgndGVzdF9kb2N0ZXN0LnR4dCcsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0Mi50eHQnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDQudHh0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25mbGFncz1kb2N0ZXN0LkRPTlRfQUNDRVBUX0JMQU5LTElORSwKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JzPXsnZmF2b3JpdGVfY29sb3InOiAnYmx1ZSd9KQorICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mz4KKworICAgICAgIEFuZCwgeW91IGNhbiBwcm92aWRlIHNldFVwIGFuZCB0ZWFyRG93biBmdW5jdGlvbnM6CisKKyAgICAgICAgID4+PiBkZWYgc2V0VXAodCk6CisgICAgICAgICAuLi4gICAgIGltcG9ydCB0ZXN0LnRlc3RfZG9jdGVzdAorICAgICAgICAgLi4uICAgICB0ZXN0LnRlc3RfZG9jdGVzdC5zaWxseVNldHVwID0gVHJ1ZQorCisgICAgICAgICA+Pj4gZGVmIHRlYXJEb3duKHQpOgorICAgICAgICAgLi4uICAgICBpbXBvcnQgdGVzdC50ZXN0X2RvY3Rlc3QKKyAgICAgICAgIC4uLiAgICAgZGVsIHRlc3QudGVzdF9kb2N0ZXN0LnNpbGx5U2V0dXAKKworICAgICAgIEhlcmUsIHdlIGluc3RhbGxlZCBhIHNpbGx5IHZhcmlhYmxlIHRoYXQgdGhlIHRlc3QgZXhwZWN0czoKKworICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUoJ3Rlc3RfZG9jdGVzdC50eHQnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZG9jdGVzdDIudHh0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X2RvY3Rlc3Q0LnR4dCcsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRVcD1zZXRVcCwgdGVhckRvd249dGVhckRvd24pCisgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0yPgorCisgICAgICAgQnV0IHRoZSB0ZWFyRG93biByZXN0b3JlcyBzYW5pdHk6CisKKyAgICAgICAgID4+PiBpbXBvcnQgdGVzdC50ZXN0X2RvY3Rlc3QKKyAgICAgICAgID4+PiB0ZXN0LnRlc3RfZG9jdGVzdC5zaWxseVNldHVwCisgICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgICAuLi4KKyAgICAgICAgIEF0dHJpYnV0ZUVycm9yOiAnbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnc2lsbHlTZXR1cCcKKworICAgICAgIFRoZSBzZXRVcCBhbmQgdGVhckRvd24gZnVudGlvbnMgYXJlIHBhc3NlZCB0ZXN0IG9iamVjdHMuCisgICAgICAgSGVyZSwgd2UnbGwgdXNlIGEgc2V0VXAgZnVuY3Rpb24gdG8gc2V0IHRoZSBmYXZvcml0ZSBjb2xvciBpbgorICAgICAgIHRlc3RfZG9jdGVzdC50eHQ6CisKKyAgICAgICAgID4+PiBkZWYgc2V0VXAodGVzdCk6CisgICAgICAgICAuLi4gICAgIHRlc3QuZ2xvYnNbJ2Zhdm9yaXRlX2NvbG9yJ10gPSAnYmx1ZScKKworICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUoJ3Rlc3RfZG9jdGVzdC50eHQnLCBzZXRVcD1zZXRVcCkKKyAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0xIGVycm9ycz0wIGZhaWx1cmVzPTA+CisKKyAgICAgICBIZXJlLCB3ZSBkaWRuJ3QgbmVlZCB0byB1c2UgYSB0ZWFyRG93biBmdW5jdGlvbiBiZWNhdXNlIHdlCisgICAgICAgbW9kaWZpZWQgdGhlIHRlc3QgZ2xvYmFscy4gIFRoZSB0ZXN0IGdsb2JhbHMgYXJlCisgICAgICAgYXV0b21hdGljYWxseSBjbGVhcmVkIGZvciB1cyBhZnRlciBhIHRlc3QuCisKKyAgICAgICBUZXN0cyBpbiBhIGZpbGUgcnVuIHVzaW5nIGBEb2NGaWxlU3VpdGVgIGNhbiBhbHNvIGFjY2VzcyB0aGUKKyAgICAgICBgX19maWxlX19gIGdsb2JhbCwgd2hpY2ggaXMgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSBmaWxlCisgICAgICAgY29udGFpbmluZyB0aGUgdGVzdHM6CisKKyAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jRmlsZVN1aXRlKCd0ZXN0X2RvY3Rlc3QzLnR4dCcpCisgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MSBlcnJvcnM9MCBmYWlsdXJlcz0wPgorCisgICAgICAgSWYgdGhlIHRlc3RzIGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIHdlIGhhdmUgdG8gc3BlY2lmeSB3aGljaAorICAgICAgIGVuY29kaW5nIHRoZSBmaWxlIGlzIGVuY29kZWQgd2l0aC4gV2UgZG8gc28gYnkgdXNpbmcgdGhlIGBlbmNvZGluZ2AKKyAgICAgICBwYXJhbWV0ZXI6CisKKyAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jRmlsZVN1aXRlKCd0ZXN0X2RvY3Rlc3QudHh0JywKKyAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X2RvY3Rlc3QyLnR4dCcsCisgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0NC50eHQnLAorICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9J3V0Zi04JykKKyAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTI+CisKKyAgICAgICAiIiIKKworZGVmIHRlc3RfdHJhaWxpbmdfc3BhY2VfaW5fdGVzdCgpOgorICAgICIiIgorICAgIFRyYWlsaW5nIHNwYWNlcyBpbiBleHBlY3RlZCBvdXRwdXQgYXJlIHNpZ25pZmljYW50OgorCisgICAgICA+Pj4geCwgeSA9ICdmb28nLCAnJworICAgICAgPj4+IHByaW50IHgsIHkKKyAgICAgIGZvbyBcbgorICAgICIiIgorCisKK2RlZiB0ZXN0X3VuaXR0ZXN0X3JlcG9ydGZsYWdzKCk6CisgICAgIiIiRGVmYXVsdCB1bml0dGVzdCByZXBvcnRpbmcgZmxhZ3MgY2FuIGJlIHNldCB0byBjb250cm9sIHJlcG9ydGluZworCisgICAgSGVyZSwgd2UnbGwgc2V0IHRoZSBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFIG9wdGlvbiBzbyB3ZSBzZWUKKyAgICBvbmx5IHRoZSBmaXJzdCBmYWlsdXJlIG9mIGVhY2ggdGVzdC4gIEZpcnN0LCB3ZSdsbCBsb29rIGF0IHRoZQorICAgIG91dHB1dCB3aXRob3V0IHRoZSBmbGFnLiAgVGhlIGZpbGUgdGVzdF9kb2N0ZXN0LnR4dCBmaWxlIGhhcyB0d28KKyAgICB0ZXN0cy4gVGhleSBib3RoIGZhaWwgaWYgYmxhbmsgbGluZXMgYXJlIGRpc2FibGVkOgorCisgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY0ZpbGVTdWl0ZSgndGVzdF9kb2N0ZXN0LnR4dCcsCisgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmZsYWdzPWRvY3Rlc3QuRE9OVF9BQ0NFUFRfQkxBTktMSU5FKQorICAgICAgPj4+IGltcG9ydCB1bml0dGVzdAorICAgICAgPj4+IHJlc3VsdCA9IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICA+Pj4gcHJpbnQgcmVzdWx0LmZhaWx1cmVzWzBdWzFdICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgICBUcmFjZWJhY2sgLi4uCisgICAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgICBmYXZvcml0ZV9jb2xvcgorICAgICAgLi4uCisgICAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgICBpZiAxOgorICAgICAgLi4uCisKKyAgICBOb3RlIHRoYXQgd2Ugc2VlIGJvdGggZmFpbHVyZXMgZGlzcGxheWVkLgorCisgICAgICA+Pj4gb2xkID0gZG9jdGVzdC5zZXRfdW5pdHRlc3RfcmVwb3J0ZmxhZ3MoCisgICAgICAuLi4gICAgZG9jdGVzdC5SRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFKQorCisgICAgTm93LCB3aGVuIHdlIHJ1biB0aGUgdGVzdDoKKworICAgICAgPj4+IHJlc3VsdCA9IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICA+Pj4gcHJpbnQgcmVzdWx0LmZhaWx1cmVzWzBdWzFdICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgICBUcmFjZWJhY2sgLi4uCisgICAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgICBmYXZvcml0ZV9jb2xvcgorICAgICAgRXhjZXB0aW9uIHJhaXNlZDoKKyAgICAgICAgICAuLi4KKyAgICAgICAgICBOYW1lRXJyb3I6IG5hbWUgJ2Zhdm9yaXRlX2NvbG9yJyBpcyBub3QgZGVmaW5lZAorICAgICAgPEJMQU5LTElORT4KKyAgICAgIDxCTEFOS0xJTkU+CisKKyAgICBXZSBnZXQgb25seSB0aGUgZmlyc3QgZmFpbHVyZS4KKworICAgIElmIHdlIGdpdmUgYW55IHJlcG9ydGluZyBvcHRpb25zIHdoZW4gd2Ugc2V0IHVwIHRoZSB0ZXN0cywKKyAgICBob3dldmVyOgorCisgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY0ZpbGVTdWl0ZSgndGVzdF9kb2N0ZXN0LnR4dCcsCisgICAgICAuLi4gICAgIG9wdGlvbmZsYWdzPWRvY3Rlc3QuRE9OVF9BQ0NFUFRfQkxBTktMSU5FIHwgZG9jdGVzdC5SRVBPUlRfTkRJRkYpCisKKyAgICBUaGVuIHRoZSBkZWZhdWx0IGVwb3J0aW5nIG9wdGlvbnMgYXJlIGlnbm9yZWQ6CisKKyAgICAgID4+PiByZXN1bHQgPSBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgPj4+IHByaW50IHJlc3VsdC5mYWlsdXJlc1swXVsxXSAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICAgVHJhY2ViYWNrIC4uLgorICAgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgICAgZmF2b3JpdGVfY29sb3IKKyAgICAgIC4uLgorICAgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgICAgaWYgMToKKyAgICAgICAgICAgICBwcmludCAnYScKKyAgICAgICAgICAgICBwcmludAorICAgICAgICAgICAgIHByaW50ICdiJworICAgICAgRGlmZmVyZW5jZXMgKG5kaWZmIHdpdGggLWV4cGVjdGVkICthY3R1YWwpOgorICAgICAgICAgICAgYQorICAgICAgICAgIC0gPEJMQU5LTElORT4KKyAgICAgICAgICArCisgICAgICAgICAgICBiCisgICAgICA8QkxBTktMSU5FPgorICAgICAgPEJMQU5LTElORT4KKworCisgICAgVGVzdCBydW5uZXJzIGNhbiByZXN0b3JlIHRoZSBmb3JtYXR0aW5nIGZsYWdzIGFmdGVyIHRoZXkgcnVuOgorCisgICAgICA+Pj4gaWdub3JlZCA9IGRvY3Rlc3Quc2V0X3VuaXR0ZXN0X3JlcG9ydGZsYWdzKG9sZCkKKworICAgICIiIgorCitkZWYgdGVzdF90ZXN0ZmlsZSgpOiByIiIiCitUZXN0cyBmb3IgdGhlIGB0ZXN0ZmlsZSgpYCBmdW5jdGlvbi4gIFRoaXMgZnVuY3Rpb24gcnVucyBhbGwgdGhlCitkb2N0ZXN0IGV4YW1wbGVzIGluIGEgZ2l2ZW4gZmlsZS4gIEluIGl0cyBzaW1wbGUgaW52b2thdGlvbiwgaXQgaXMKK2NhbGxlZCB3aXRoIHRoZSBuYW1lIG9mIGEgZmlsZSwgd2hpY2ggaXMgdGFrZW4gdG8gYmUgcmVsYXRpdmUgdG8gdGhlCitjYWxsaW5nIG1vZHVsZS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgKCNmYWlsdXJlcywgI3Rlc3RzKS4KKworV2UgZG9uJ3Qgd2FudCBgLXZgIGluIHN5cy5hcmd2IGZvciB0aGVzZSB0ZXN0cy4KKworICAgID4+PiBzYXZlX2FyZ3YgPSBzeXMuYXJndgorICAgID4+PiBpZiAnLXYnIGluIHN5cy5hcmd2OgorICAgIC4uLiAgICAgc3lzLmFyZ3YgPSBbYXJnIGZvciBhcmcgaW4gc2F2ZV9hcmd2IGlmIGFyZyAhPSAnLXYnXQorCisKKyAgICA+Pj4gZG9jdGVzdC50ZXN0ZmlsZSgndGVzdF9kb2N0ZXN0LnR4dCcpICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgIi4uLiIsIGxpbmUgNiwgaW4gdGVzdF9kb2N0ZXN0LnR4dAorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBmYXZvcml0ZV9jb2xvcgorICAgIEV4Y2VwdGlvbiByYWlzZWQ6CisgICAgICAgIC4uLgorICAgICAgICBOYW1lRXJyb3I6IG5hbWUgJ2Zhdm9yaXRlX2NvbG9yJyBpcyBub3QgZGVmaW5lZAorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAxIGl0ZW1zIGhhZCBmYWlsdXJlczoKKyAgICAgICAxIG9mICAgMiBpbiB0ZXN0X2RvY3Rlc3QudHh0CisgICAgKioqVGVzdCBGYWlsZWQqKiogMSBmYWlsdXJlcy4KKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisgICAgPj4+IGRvY3Rlc3QubWFzdGVyID0gTm9uZSAgIyBSZXNldCBtYXN0ZXIuCisKKyhOb3RlOiB3ZSdsbCBiZSBjbGVhcmluZyBkb2N0ZXN0Lm1hc3RlciBhZnRlciBlYWNoIGNhbGwgdG8KK2Bkb2N0ZXN0LnRlc3RmaWxlYCwgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgbXVsdGlwbGUgdGVzdHMgd2l0aCB0aGUKK3NhbWUgbmFtZS4pCisKK0dsb2JhbHMgbWF5IGJlIHNwZWNpZmllZCB3aXRoIHRoZSBgZ2xvYnNgIGFuZCBgZXh0cmFnbG9ic2AgcGFyYW1ldGVyczoKKworICAgID4+PiBnbG9icyA9IHsnZmF2b3JpdGVfY29sb3InOiAnYmx1ZSd9CisgICAgPj4+IGRvY3Rlc3QudGVzdGZpbGUoJ3Rlc3RfZG9jdGVzdC50eHQnLCBnbG9icz1nbG9icykKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTIpCisgICAgPj4+IGRvY3Rlc3QubWFzdGVyID0gTm9uZSAgIyBSZXNldCBtYXN0ZXIuCisKKyAgICA+Pj4gZXh0cmFnbG9icyA9IHsnZmF2b3JpdGVfY29sb3InOiAncmVkJ30KKyAgICA+Pj4gZG9jdGVzdC50ZXN0ZmlsZSgndGVzdF9kb2N0ZXN0LnR4dCcsIGdsb2JzPWdsb2JzLAorICAgIC4uLiAgICAgICAgICAgICAgICAgIGV4dHJhZ2xvYnM9ZXh0cmFnbG9icykgIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAiLi4uIiwgbGluZSA2LCBpbiB0ZXN0X2RvY3Rlc3QudHh0CisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIGZhdm9yaXRlX2NvbG9yCisgICAgRXhwZWN0ZWQ6CisgICAgICAgICdibHVlJworICAgIEdvdDoKKyAgICAgICAgJ3JlZCcKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgMSBpdGVtcyBoYWQgZmFpbHVyZXM6CisgICAgICAgMSBvZiAgIDIgaW4gdGVzdF9kb2N0ZXN0LnR4dAorICAgICoqKlRlc3QgRmFpbGVkKioqIDEgZmFpbHVyZXMuCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQorICAgID4+PiBkb2N0ZXN0Lm1hc3RlciA9IE5vbmUgICMgUmVzZXQgbWFzdGVyLgorCitUaGUgZmlsZSBtYXkgYmUgbWFkZSByZWxhdGl2ZSB0byBhIGdpdmVuIG1vZHVsZSBvciBwYWNrYWdlLCB1c2luZyB0aGUKK29wdGlvbmFsIGBtb2R1bGVfcmVsYXRpdmVgIHBhcmFtZXRlcjoKKworICAgID4+PiBkb2N0ZXN0LnRlc3RmaWxlKCd0ZXN0X2RvY3Rlc3QudHh0JywgZ2xvYnM9Z2xvYnMsCisgICAgLi4uICAgICAgICAgICAgICAgICAgbW9kdWxlX3JlbGF0aXZlPSd0ZXN0JykKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTIpCisgICAgPj4+IGRvY3Rlc3QubWFzdGVyID0gTm9uZSAgIyBSZXNldCBtYXN0ZXIuCisKK1ZlcmJvc2l0eSBjYW4gYmUgaW5jcmVhc2VkIHdpdGggdGhlIG9wdGlvbmFsIGB2ZXJib3NlYCBwYXJhbWV0ZXI6CisKKyAgICA+Pj4gZG9jdGVzdC50ZXN0ZmlsZSgndGVzdF9kb2N0ZXN0LnR4dCcsIGdsb2JzPWdsb2JzLCB2ZXJib3NlPVRydWUpCisgICAgVHJ5aW5nOgorICAgICAgICBmYXZvcml0ZV9jb2xvcgorICAgIEV4cGVjdGluZzoKKyAgICAgICAgJ2JsdWUnCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgIGlmIDE6CisgICAgICAgICAgIHByaW50ICdhJworICAgICAgICAgICBwcmludAorICAgICAgICAgICBwcmludCAnYicKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgIGEKKyAgICAgICAgPEJMQU5LTElORT4KKyAgICAgICAgYgorICAgIG9rCisgICAgMSBpdGVtcyBwYXNzZWQgYWxsIHRlc3RzOgorICAgICAgIDIgdGVzdHMgaW4gdGVzdF9kb2N0ZXN0LnR4dAorICAgIDIgdGVzdHMgaW4gMSBpdGVtcy4KKyAgICAyIHBhc3NlZCBhbmQgMCBmYWlsZWQuCisgICAgVGVzdCBwYXNzZWQuCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQorICAgID4+PiBkb2N0ZXN0Lm1hc3RlciA9IE5vbmUgICMgUmVzZXQgbWFzdGVyLgorCitUaGUgbmFtZSBvZiB0aGUgdGVzdCBtYXkgYmUgc3BlY2lmaWVkIHdpdGggdGhlIG9wdGlvbmFsIGBuYW1lYAorcGFyYW1ldGVyOgorCisgICAgPj4+IGRvY3Rlc3QudGVzdGZpbGUoJ3Rlc3RfZG9jdGVzdC50eHQnLCBuYW1lPSduZXduYW1lJykKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAiLi4uIiwgbGluZSA2LCBpbiBuZXduYW1lCisgICAgLi4uCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQorICAgID4+PiBkb2N0ZXN0Lm1hc3RlciA9IE5vbmUgICMgUmVzZXQgbWFzdGVyLgorCitUaGUgc3VtbWFyeSByZXBvcnQgbWF5IGJlIHN1cHByZXNzZWQgd2l0aCB0aGUgb3B0aW9uYWwgYHJlcG9ydGAKK3BhcmFtZXRlcjoKKworICAgID4+PiBkb2N0ZXN0LnRlc3RmaWxlKCd0ZXN0X2RvY3Rlc3QudHh0JywgcmVwb3J0PUZhbHNlKQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlICIuLi4iLCBsaW5lIDYsIGluIHRlc3RfZG9jdGVzdC50eHQKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgZmF2b3JpdGVfY29sb3IKKyAgICBFeGNlcHRpb24gcmFpc2VkOgorICAgICAgICAuLi4KKyAgICAgICAgTmFtZUVycm9yOiBuYW1lICdmYXZvcml0ZV9jb2xvcicgaXMgbm90IGRlZmluZWQKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisgICAgPj4+IGRvY3Rlc3QubWFzdGVyID0gTm9uZSAgIyBSZXNldCBtYXN0ZXIuCisKK1RoZSBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50IGByYWlzZV9vbl9lcnJvcmAgY2FuIGJlIHVzZWQgdG8gcmFpc2UgYW4KK2V4Y2VwdGlvbiBvbiB0aGUgZmlyc3QgZXJyb3IgKHdoaWNoIG1heSBiZSB1c2VmdWwgZm9yIHBvc3Rtb3J0ZW0KK2RlYnVnZ2luZyk6CisKKyAgICA+Pj4gZG9jdGVzdC50ZXN0ZmlsZSgndGVzdF9kb2N0ZXN0LnR4dCcsIHJhaXNlX29uX2Vycm9yPVRydWUpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFVuZXhwZWN0ZWRFeGNlcHRpb246IC4uLgorICAgID4+PiBkb2N0ZXN0Lm1hc3RlciA9IE5vbmUgICMgUmVzZXQgbWFzdGVyLgorCitJZiB0aGUgdGVzdHMgY29udGFpbiBub24tQVNDSUkgY2hhcmFjdGVycywgdGhlIHRlc3RzIG1pZ2h0IGZhaWwsIHNpbmNlCitpdCdzIHVua25vd24gd2hpY2ggZW5jb2RpbmcgaXMgdXNlZC4gVGhlIGVuY29kaW5nIGNhbiBiZSBzcGVjaWZpZWQKK3VzaW5nIHRoZSBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50IGBlbmNvZGluZ2A6CisKKyAgICA+Pj4gZG9jdGVzdC50ZXN0ZmlsZSgndGVzdF9kb2N0ZXN0NC50eHQnKSAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlICIuLi4iLCBsaW5lIDcsIGluIHRlc3RfZG9jdGVzdDQudHh0CisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHUnLi4uJworICAgIEV4cGVjdGVkOgorICAgICAgICB1J2ZceGY2XHhmNicKKyAgICBHb3Q6CisgICAgICAgIHUnZlx4YzNceGI2XHhjM1x4YjYnCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIC4uLgorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAxIGl0ZW1zIGhhZCBmYWlsdXJlczoKKyAgICAgICAyIG9mICAgNCBpbiB0ZXN0X2RvY3Rlc3Q0LnR4dAorICAgICoqKlRlc3QgRmFpbGVkKioqIDIgZmFpbHVyZXMuCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTIsIGF0dGVtcHRlZD00KQorICAgID4+PiBkb2N0ZXN0Lm1hc3RlciA9IE5vbmUgICMgUmVzZXQgbWFzdGVyLgorCisgICAgPj4+IGRvY3Rlc3QudGVzdGZpbGUoJ3Rlc3RfZG9jdGVzdDQudHh0JywgZW5jb2Rpbmc9J3V0Zi04JykKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTQpCisgICAgPj4+IGRvY3Rlc3QubWFzdGVyID0gTm9uZSAgIyBSZXNldCBtYXN0ZXIuCisKK1N3aXRjaCB0aGUgbW9kdWxlIGVuY29kaW5nIHRvICd1dGYtOCcgdG8gdGVzdCB0aGUgdmVyYm9zZSBvdXRwdXQgd2l0aG91dAorYm90aGVyaW5nIHdpdGggdGhlIGN1cnJlbnQgc3lzLnN0ZG91dCBlbmNvZGluZy4KKworICAgID4+PiBkb2N0ZXN0Ll9lbmNvZGluZywgc2F2ZWRfZW5jb2RpbmcgPSAndXRmLTgnLCBkb2N0ZXN0Ll9lbmNvZGluZworICAgID4+PiBkb2N0ZXN0LnRlc3RmaWxlKCd0ZXN0X2RvY3Rlc3Q0LnR4dCcsIGVuY29kaW5nPSd1dGYtOCcsIHZlcmJvc2U9VHJ1ZSkKKyAgICBUcnlpbmc6CisgICAgICAgIHUnZsO2w7YnCisgICAgRXhwZWN0aW5nOgorICAgICAgICB1J2ZceGY2XHhmNicKKyAgICBvaworICAgIFRyeWluZzoKKyAgICAgICAgdSdixIVyJworICAgIEV4cGVjdGluZzoKKyAgICAgICAgdSdiXHUwMTA1cicKKyAgICBvaworICAgIFRyeWluZzoKKyAgICAgICAgJ2bDtsO2JworICAgIEV4cGVjdGluZzoKKyAgICAgICAgJ2ZceGMzXHhiNlx4YzNceGI2JworICAgIG9rCisgICAgVHJ5aW5nOgorICAgICAgICAnYsSFcicKKyAgICBFeHBlY3Rpbmc6CisgICAgICAgICdiXHhjNFx4ODVyJworICAgIG9rCisgICAgMSBpdGVtcyBwYXNzZWQgYWxsIHRlc3RzOgorICAgICAgIDQgdGVzdHMgaW4gdGVzdF9kb2N0ZXN0NC50eHQKKyAgICA0IHRlc3RzIGluIDEgaXRlbXMuCisgICAgNCBwYXNzZWQgYW5kIDAgZmFpbGVkLgorICAgIFRlc3QgcGFzc2VkLgorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9NCkKKyAgICA+Pj4gZG9jdGVzdC5fZW5jb2RpbmcgPSBzYXZlZF9lbmNvZGluZworICAgID4+PiBkb2N0ZXN0Lm1hc3RlciA9IE5vbmUgICMgUmVzZXQgbWFzdGVyLgorICAgID4+PiBzeXMuYXJndiA9IHNhdmVfYXJndgorIiIiCisKKyMgb2xkX3Rlc3QxLCAuLi4gdXNlZCB0byBsaXZlIGluIGRvY3Rlc3QucHksIGJ1dCBjbHV0dGVyZWQgaXQuICBOb3RlCisjIHRoYXQgdGhlc2UgdXNlIHRoZSBkZXByZWNhdGVkIGRvY3Rlc3QuVGVzdGVyLCBzbyBzaG91bGQgZ28gYXdheSAob3IKKyMgYmUgcmV3cml0dGVuKSBzb21lZGF5LgorCitkZWYgb2xkX3Rlc3QxKCk6IHIiIiIKKz4+PiBmcm9tIGRvY3Rlc3QgaW1wb3J0IFRlc3RlcgorPj4+IHQgPSBUZXN0ZXIoZ2xvYnM9eyd4JzogNDJ9LCB2ZXJib3NlPTApCis+Pj4gdC5ydW5zdHJpbmcocicnJworLi4uICAgICAgPj4+IHggPSB4ICogMgorLi4uICAgICAgPj4+IHByaW50IHgKKy4uLiAgICAgIDQyCisuLi4gJycnLCAnWFlaJykKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0xpbmUgMywgaW4gWFlaCitGYWlsZWQgZXhhbXBsZToKKyAgICBwcmludCB4CitFeHBlY3RlZDoKKyAgICA0MgorR290OgorICAgIDg0CitUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCis+Pj4gdC5ydW5zdHJpbmcoIj4+PiB4ID0geCAqIDJcbj4+PiBwcmludCB4XG44NFxuIiwgJ2V4YW1wbGUyJykKK1Rlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MikKKz4+PiB0LnN1bW1hcml6ZSgpCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisxIGl0ZW1zIGhhZCBmYWlsdXJlczoKKyAgIDEgb2YgICAyIGluIFhZWgorKioqVGVzdCBGYWlsZWQqKiogMSBmYWlsdXJlcy4KK1Rlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9NCkKKz4+PiB0LnN1bW1hcml6ZSh2ZXJib3NlPTEpCisxIGl0ZW1zIHBhc3NlZCBhbGwgdGVzdHM6CisgICAyIHRlc3RzIGluIGV4YW1wbGUyCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisxIGl0ZW1zIGhhZCBmYWlsdXJlczoKKyAgIDEgb2YgICAyIGluIFhZWgorNCB0ZXN0cyBpbiAyIGl0ZW1zLgorMyBwYXNzZWQgYW5kIDEgZmFpbGVkLgorKioqVGVzdCBGYWlsZWQqKiogMSBmYWlsdXJlcy4KK1Rlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9NCkKKyIiIgorCitkZWYgb2xkX3Rlc3QyKCk6IHIiIiIKKyAgICAgICAgPj4+IGZyb20gZG9jdGVzdCBpbXBvcnQgVGVzdGVyCisgICAgICAgID4+PiB0ID0gVGVzdGVyKGdsb2JzPXt9LCB2ZXJib3NlPTEpCisgICAgICAgID4+PiB0ZXN0ID0gcicnJworICAgICAgICAuLi4gICAgIyBqdXN0IGFuIGV4YW1wbGUKKyAgICAgICAgLi4uICAgID4+PiB4ID0gMSArIDIKKyAgICAgICAgLi4uICAgID4+PiB4CisgICAgICAgIC4uLiAgICAzCisgICAgICAgIC4uLiAnJycKKyAgICAgICAgPj4+IHQucnVuc3RyaW5nKHRlc3QsICJFeGFtcGxlIikKKyAgICAgICAgUnVubmluZyBzdHJpbmcgRXhhbXBsZQorICAgICAgICBUcnlpbmc6CisgICAgICAgICAgICB4ID0gMSArIDIKKyAgICAgICAgRXhwZWN0aW5nIG5vdGhpbmcKKyAgICAgICAgb2sKKyAgICAgICAgVHJ5aW5nOgorICAgICAgICAgICAgeAorICAgICAgICBFeHBlY3Rpbmc6CisgICAgICAgICAgICAzCisgICAgICAgIG9rCisgICAgICAgIDAgb2YgMiBleGFtcGxlcyBmYWlsZWQgaW4gc3RyaW5nIEV4YW1wbGUKKyAgICAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQorIiIiCisKK2RlZiBvbGRfdGVzdDMoKTogciIiIgorICAgICAgICA+Pj4gZnJvbSBkb2N0ZXN0IGltcG9ydCBUZXN0ZXIKKyAgICAgICAgPj4+IHQgPSBUZXN0ZXIoZ2xvYnM9e30sIHZlcmJvc2U9MCkKKyAgICAgICAgPj4+IGRlZiBfZigpOgorICAgICAgICAuLi4gICAgICcnJ1RyaXZpYWwgZG9jc3RyaW5nIGV4YW1wbGUuCisgICAgICAgIC4uLiAgICAgPj4+IGFzc2VydCAyID09IDIKKyAgICAgICAgLi4uICAgICAnJycKKyAgICAgICAgLi4uICAgICByZXR1cm4gMzIKKyAgICAgICAgLi4uCisgICAgICAgID4+PiB0LnJ1bmRvYyhfZikgICMgZXhwZWN0IDAgZmFpbHVyZXMgaW4gMSBleGFtcGxlCisgICAgICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKKyIiIgorCitkZWYgb2xkX3Rlc3Q0KCk6ICIiIgorICAgICAgICA+Pj4gaW1wb3J0IHR5cGVzCisgICAgICAgID4+PiBtMSA9IHR5cGVzLk1vZHVsZVR5cGUoJ19tMScpCisgICAgICAgID4+PiBtMiA9IHR5cGVzLk1vZHVsZVR5cGUoJ19tMicpCisgICAgICAgID4+PiB0ZXN0X2RhdGEgPSBcIiIiCisgICAgICAgIC4uLiBkZWYgX2YoKToKKyAgICAgICAgLi4uICAgICAnJyc+Pj4gYXNzZXJ0IDEgPT0gMQorICAgICAgICAuLi4gICAgICcnJworICAgICAgICAuLi4gZGVmIGcoKToKKyAgICAgICAgLi4uICAgICcnJz4+PiBhc3NlcnQgMiAhPSAxCisgICAgICAgIC4uLiAgICAnJycKKyAgICAgICAgLi4uIGNsYXNzIEg6CisgICAgICAgIC4uLiAgICAnJyc+Pj4gYXNzZXJ0IDIgPiAxCisgICAgICAgIC4uLiAgICAnJycKKyAgICAgICAgLi4uICAgIGRlZiBiYXIoc2VsZik6CisgICAgICAgIC4uLiAgICAgICAgJycnPj4+IGFzc2VydCAxIDwgMgorICAgICAgICAuLi4gICAgICAgICcnJworICAgICAgICAuLi4gXCIiIgorICAgICAgICA+Pj4gZXhlYyB0ZXN0X2RhdGEgaW4gbTEuX19kaWN0X18KKyAgICAgICAgPj4+IGV4ZWMgdGVzdF9kYXRhIGluIG0yLl9fZGljdF9fCisgICAgICAgID4+PiBtMS5fX2RpY3RfXy51cGRhdGUoeyJmMiI6IG0yLl9mLCAiZzIiOiBtMi5nLCAiaDIiOiBtMi5IfSkKKworICAgICAgICBUZXN0cyB0aGF0IG9iamVjdHMgb3V0c2lkZSBtMSBhcmUgZXhjbHVkZWQ6CisKKyAgICAgICAgPj4+IGZyb20gZG9jdGVzdCBpbXBvcnQgVGVzdGVyCisgICAgICAgID4+PiB0ID0gVGVzdGVyKGdsb2JzPXt9LCB2ZXJib3NlPTApCisgICAgICAgID4+PiB0LnJ1bmRpY3QobTEuX19kaWN0X18sICJydW5kaWN0X3Rlc3QiLCBtMSkgICMgZjIgYW5kIGcyIGFuZCBoMiBza2lwcGVkCisgICAgICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9NCkKKworICAgICAgICBPbmNlIG1vcmUsIG5vdCBleGNsdWRpbmcgc3R1ZmYgb3V0c2lkZSBtMToKKworICAgICAgICA+Pj4gdCA9IFRlc3RlcihnbG9icz17fSwgdmVyYm9zZT0wKQorICAgICAgICA+Pj4gdC5ydW5kaWN0KG0xLl9fZGljdF9fLCAicnVuZGljdF90ZXN0X3B2dCIpICAjIE5vbmUgYXJlIHNraXBwZWQuCisgICAgICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9OCkKKworICAgICAgICBUaGUgZXhjbHVzaW9uIG9mIG9iamVjdHMgZnJvbSBvdXRzaWRlIHRoZSBkZXNpZ25hdGVkIG1vZHVsZSBpcworICAgICAgICBtZWFudCB0byBiZSBpbnZva2VkIGF1dG9tYWdpY2FsbHkgYnkgdGVzdG1vZC4KKworICAgICAgICA+Pj4gZG9jdGVzdC50ZXN0bW9kKG0xLCB2ZXJib3NlPUZhbHNlKQorICAgICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTQpCisiIiIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgTWFpbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgdGVzdF9tYWluKCk6CisgICAgIyBDaGVjayB0aGUgZG9jdGVzdCBjYXNlcyBpbiBkb2N0ZXN0IGl0c2VsZjoKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QoZG9jdGVzdCwgdmVyYm9zaXR5PVRydWUpCisKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfZG9jdGVzdAorCisgICAgIyBJZ25vcmUgYWxsIHdhcm5pbmdzIGFib3V0IHRoZSB1c2Ugb2YgY2xhc3MgVGVzdGVyIGluIHRoaXMgbW9kdWxlLgorICAgIGRlcHJlY2F0aW9ucyA9IFtdCisgICAgaWYgX19kZWJ1Z19fOgorICAgICAgICBkZXByZWNhdGlvbnMuYXBwZW5kKCgiY2xhc3MgVGVzdGVyIGlzIGRlcHJlY2F0ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpKQorICAgIGlmIHN5cy5weTNrd2FybmluZzoKKyAgICAgICAgZGVwcmVjYXRpb25zICs9IFsoImJhY2txdW90ZSBub3Qgc3VwcG9ydGVkIiwgU3ludGF4V2FybmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJleGVjZmlsZS4uIG5vdCBzdXBwb3J0ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpXQorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCpkZXByZWNhdGlvbnMpOgorICAgICAgICAjIENoZWNrIHRoZSBkb2N0ZXN0IGNhc2VzIGRlZmluZWQgaGVyZToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfZG9jdGVzdCwgdmVyYm9zaXR5PVRydWUpCisKK2ltcG9ydCBzeXMKK2RlZiB0ZXN0X2NvdmVyYWdlKGNvdmVyZGlyKToKKyAgICB0cmFjZSA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0cmFjZScpCisgICAgdHJhY2VyID0gdHJhY2UuVHJhY2UoaWdub3JlZGlycz1bc3lzLnByZWZpeCwgc3lzLmV4ZWNfcHJlZml4LF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2U9MCwgY291bnQ9MSkKKyAgICB0cmFjZXIucnVuKCdyZWxvYWQoZG9jdGVzdCk7IHRlc3RfbWFpbigpJykKKyAgICByID0gdHJhY2VyLnJlc3VsdHMoKQorICAgIHByaW50ICdXcml0aW5nIGNvdmVyYWdlIHJlc3VsdHMuLi4nCisgICAgci53cml0ZV9yZXN1bHRzKHNob3dfbWlzc2luZz1UcnVlLCBzdW1tYXJ5PVRydWUsCisgICAgICAgICAgICAgICAgICAgIGNvdmVyZGlyPWNvdmVyZGlyKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGlmICctYycgaW4gc3lzLmFyZ3Y6CisgICAgICAgIHRlc3RfY292ZXJhZ2UoJy90bXAvZG9jdGVzdC5jb3ZlcicpCisgICAgZWxzZToKKyAgICAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RvY3Rlc3QudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZG9jdGVzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhlODUxZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RvY3Rlc3QudHh0CkBAIC0wLDAgKzEsMTcgQEAKK1RoaXMgaXMgYSBzYW1wbGUgZG9jdGVzdCBpbiBhIHRleHQgZmlsZS4KKworSW4gdGhpcyBleGFtcGxlLCB3ZSdsbCByZWx5IG9uIGEgZ2xvYmFsIHZhcmlhYmxlIGJlaW5nIHNldCBmb3IgdXMKK2FscmVhZHk6CisKKyAgPj4+IGZhdm9yaXRlX2NvbG9yCisgICdibHVlJworCitXZSBjYW4gbWFrZSB0aGlzIGZhaWwgYnkgZGlzYWJsaW5nIHRoZSBibGFuay1saW5lIGZlYXR1cmUuCisKKyAgPj4+IGlmIDE6CisgIC4uLiAgICBwcmludCAnYScKKyAgLi4uICAgIHByaW50CisgIC4uLiAgICBwcmludCAnYicKKyAgYQorICA8QkxBTktMSU5FPgorICBiCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kb2N0ZXN0Mi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RvY3Rlc3QyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMDQzYmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kb2N0ZXN0Mi5weQpAQCAtMCwwICsxLDEyNCBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK3UiIiJBIG1vZHVsZSB0byB0ZXN0IHdoZXRoZXIgZG9jdGVzdCByZWNvZ25pemVzIHNvbWUgMi4yIGZlYXR1cmVzLAorbGlrZSBzdGF0aWMgYW5kIGNsYXNzIG1ldGhvZHMuCisKKz4+PiBwcmludCAneXVwJyAgIyAxCit5dXAKKworV2UgaW5jbHVkZSBzb21lIChyYW5kb20pIGVuY29kZWQgKHV0Zi04KSB0ZXh0IGluIHRoZSB0ZXh0IHN1cnJvdW5kaW5nCit0aGUgZXhhbXBsZS4gIEl0IHNob3VsZCBiZSBpZ25vcmVkOgorCivQidCK0IjQgdCCCisKKyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpZiBzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMjoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ2Fubm90IHRlc3QgZG9jc3RyaW5ncyB3aXRoIC1PMiIpCisKK2NsYXNzIEMob2JqZWN0KToKKyAgICB1IiIiQ2xhc3MgQy4KKworICAgID4+PiBwcmludCBDKCkgICMgMgorICAgIDQyCisKKworICAgIFdlIGluY2x1ZGUgc29tZSAocmFuZG9tKSBlbmNvZGVkICh1dGYtOCkgdGV4dCBpbiB0aGUgdGV4dCBzdXJyb3VuZGluZworICAgIHRoZSBleGFtcGxlLiAgSXQgc2hvdWxkIGJlIGlnbm9yZWQ6CisKKyAgICAgICAg0InQitCI0IHQggorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICIiIkMuX19pbml0X18uCisKKyAgICAgICAgPj4+IHByaW50IEMoKSAjIDMKKyAgICAgICAgNDIKKyAgICAgICAgIiIiCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgID4+PiBwcmludCBDKCkgIyA0CisgICAgICAgIDQyCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gIjQyIgorCisgICAgY2xhc3MgRChvYmplY3QpOgorICAgICAgICAiIiJBIG5lc3RlZCBEIGNsYXNzLgorCisgICAgICAgID4+PiBwcmludCAiSW4gRCEiICAgIyA1CisgICAgICAgIEluIEQhCisgICAgICAgICIiIgorCisgICAgICAgIGRlZiBuZXN0ZWQoc2VsZik6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgID4+PiBwcmludCAzICMgNgorICAgICAgICAgICAgMworICAgICAgICAgICAgIiIiCisKKyAgICBkZWYgZ2V0eChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgID4+PiBjID0gQygpICAgICMgNworICAgICAgICA+Pj4gYy54ID0gMTIgICAjIDgKKyAgICAgICAgPj4+IHByaW50IGMueCAgIyA5CisgICAgICAgIC0xMgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIC1zZWxmLl94CisKKyAgICBkZWYgc2V0eChzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIgorICAgICAgICA+Pj4gYyA9IEMoKSAgICAgIyAxMAorICAgICAgICA+Pj4gYy54ID0gMTIgICAgIyAxMQorICAgICAgICA+Pj4gcHJpbnQgYy54ICAgIyAxMgorICAgICAgICAtMTIKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3ggPSB2YWx1ZQorCisgICAgeCA9IHByb3BlcnR5KGdldHgsIHNldHgsIGRvYz0iIiJcCisgICAgICAgID4+PiBjID0gQygpICAgICMgMTMKKyAgICAgICAgPj4+IGMueCA9IDEyICAgIyAxNAorICAgICAgICA+Pj4gcHJpbnQgYy54ICAjIDE1CisgICAgICAgIC0xMgorICAgICAgICAiIiIpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHN0YXRtKCk6CisgICAgICAgICIiIgorICAgICAgICBBIHN0YXRpYyBtZXRob2QuCisKKyAgICAgICAgPj4+IHByaW50IEMuc3RhdG0oKSAgICAjIDE2CisgICAgICAgIDY2NgorICAgICAgICA+Pj4gcHJpbnQgQygpLnN0YXRtKCkgICMgMTcKKyAgICAgICAgNjY2CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gNjY2CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY2xzbShjbHMsIHZhbCk6CisgICAgICAgICIiIgorICAgICAgICBBIGNsYXNzIG1ldGhvZC4KKworICAgICAgICA+Pj4gcHJpbnQgQy5jbHNtKDIyKSAgICAjIDE4CisgICAgICAgIDIyCisgICAgICAgID4+PiBwcmludCBDKCkuY2xzbSgyMykgICMgMTkKKyAgICAgICAgMjMKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiB2YWwKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9kb2N0ZXN0MgorICAgIEVYUEVDVEVEID0gMTkKKyAgICBmLCB0ID0gdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfZG9jdGVzdDIpCisgICAgaWYgdCAhPSBFWFBFQ1RFRDoKKyAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQoImV4cGVjdGVkICVkIHRlc3RzIHRvIHJ1biwgbm90ICVkIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChFWFBFQ1RFRCwgdCkpCisKKyMgUG9sbHV0ZSB0aGUgbmFtZXNwYWNlIHdpdGggYSBidW5jaCBvZiBpbXBvcnRlZCBmdW5jdGlvbnMgYW5kIGNsYXNzZXMsCisjIHRvIG1ha2Ugc3VyZSB0aGV5IGRvbid0IGdldCB0ZXN0ZWQuCitmcm9tIGRvY3Rlc3QgaW1wb3J0ICoKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZG9jdGVzdDIudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZG9jdGVzdDIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMTQ4NTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kb2N0ZXN0Mi50eHQKQEAgLTAsMCArMSwxNCBAQAorVGhpcyBpcyBhIHNhbXBsZSBkb2N0ZXN0IGluIGEgdGV4dCBmaWxlLgorCitJbiB0aGlzIGV4YW1wbGUsIHdlJ2xsIHJlbHkgb24gc29tZSBzaWxseSBzZXR1cDoKKworICA+Pj4gaW1wb3J0IHRlc3QudGVzdF9kb2N0ZXN0CisgID4+PiB0ZXN0LnRlc3RfZG9jdGVzdC5zaWxseVNldHVwCisgIFRydWUKKworVGhpcyB0ZXN0IGFsc28gaGFzIHNvbWUgKHJhbmRvbSkgZW5jb2RlZCAodXRmLTgpIHVuaWNvZGUgdGV4dDoKKworICDDr8K7wr/DkMKJw5DCisOQwojDkMKBw5DCggorCitUaGlzIGRvZXNuJ3QgY2F1c2UgYSBwcm9ibGVtIGluIHRoZSB0ZWN0IHN1cnJvdW5kaW5nIHRoZSBleGFtcGxlcywgYnV0Cit3ZSBpbmNsdWRlIGl0IGhlcmUgKGluIHRoaXMgdGVzdCB0ZXh0IGZpbGUpIHRvIG1ha2Ugc3VyZS4gOikKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RvY3Rlc3QzLnR4dCBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RvY3Rlc3QzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGE5NmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZG9jdGVzdDMudHh0CkBAIC0wLDAgKzEsNSBAQAorCitIZXJlIHdlIGNoZWNrIHRoYXQgYF9fZmlsZV9fYCBpcyBwcm92aWRlZDoKKworICA+Pj4gdHlwZShfX2ZpbGVfXykKKyAgPHR5cGUgJ3N0cic+CmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kb2N0ZXN0NC50eHQgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kb2N0ZXN0NC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxOWQxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2RvY3Rlc3Q0LnR4dApAQCAtMCwwICsxLDE3IEBACitUaGlzIGlzIGEgc2FtcGxlIGRvY3Rlc3QgaW4gYSB0ZXh0IGZpbGUgdGhhdCBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVycy4KK1RoaXMgZmlsZSBpcyBlbmNvZGVkIHVzaW5nIFVURi04LgorCitJbiBvcmRlciB0byBnZXQgdGhpcyB0ZXN0IHRvIHBhc3MsIHdlIGhhdmUgdG8gbWFudWFsbHkgc3BlY2lmeSB0aGUKK2VuY29kaW5nLgorCisgID4+PiB1J2bDtsO2JworICB1J2ZceGY2XHhmNicKKworICA+Pj4gdSdixIVyJworICB1J2JcdTAxMDVyJworCisgID4+PiAnZsO2w7YnCisgICdmXHhjM1x4YjZceGMzXHhiNicKKworICA+Pj4gJ2LEhXInCisgICdiXHhjNFx4ODVyJwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZG9jeG1scnBjLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZG9jeG1scnBjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZDE4MDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kb2N4bWxycGMucHkKQEAgLTAsMCArMSwyMDEgQEAKK2Zyb20gRG9jWE1MUlBDU2VydmVyIGltcG9ydCBEb2NYTUxSUENTZXJ2ZXIKK2ltcG9ydCBodHRwbGliCitpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAordGhyZWFkaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCitpbXBvcnQgdGltZQoraW1wb3J0IHNvY2tldAoraW1wb3J0IHVuaXR0ZXN0CisKK1BPUlQgPSBOb25lCisKK2RlZiBtYWtlX3JlcXVlc3RfYW5kX3NraXBJZihjb25kaXRpb24sIHJlYXNvbik6CisgICAgIyBJZiB3ZSBza2lwIHRoZSB0ZXN0LCB3ZSBoYXZlIHRvIG1ha2UgYSByZXF1ZXN0IGJlY2F1c2UgdGhlCisgICAgIyB0aGUgc2VydmVyIGNyZWF0ZWQgaW4gc2V0VXAgYmxvY2tzIGV4cGVjdGluZyBvbmUgdG8gY29tZSBpbi4KKyAgICBpZiBub3QgY29uZGl0aW9uOgorICAgICAgICByZXR1cm4gbGFtYmRhIGZ1bmM6IGZ1bmMKKyAgICBkZWYgZGVjb3JhdG9yKGZ1bmMpOgorICAgICAgICBkZWYgbWFrZV9yZXF1ZXN0X2FuZF9za2lwKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5jbGllbnQucmVxdWVzdCgiR0VUIiwgIi8iKQorICAgICAgICAgICAgc2VsZi5jbGllbnQuZ2V0cmVzcG9uc2UoKQorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QocmVhc29uKQorICAgICAgICByZXR1cm4gbWFrZV9yZXF1ZXN0X2FuZF9za2lwCisgICAgcmV0dXJuIGRlY29yYXRvcgorCisKK2RlZiBzZXJ2ZXIoZXZ0LCBudW1yZXF1ZXN0cyk6CisgICAgc2VydiA9IERvY1hNTFJQQ1NlcnZlcigoImxvY2FsaG9zdCIsIDApLCBsb2dSZXF1ZXN0cz1GYWxzZSkKKworICAgIHRyeToKKyAgICAgICAgZ2xvYmFsIFBPUlQKKyAgICAgICAgUE9SVCA9IHNlcnYuc29ja2V0LmdldHNvY2tuYW1lKClbMV0KKworICAgICAgICAjIEFkZCBzb21lIGRvY3VtZW50YXRpb24KKyAgICAgICAgc2Vydi5zZXRfc2VydmVyX3RpdGxlKCJEb2NYTUxSUENTZXJ2ZXIgVGVzdCBEb2N1bWVudGF0aW9uIikKKyAgICAgICAgc2Vydi5zZXRfc2VydmVyX25hbWUoIkRvY1hNTFJQQ1NlcnZlciBUZXN0IERvY3MiKQorICAgICAgICBzZXJ2LnNldF9zZXJ2ZXJfZG9jdW1lbnRhdGlvbigKKyAgICAgICAgICAgICJUaGlzIGlzIGFuIFhNTC1SUEMgc2VydmVyJ3MgZG9jdW1lbnRhdGlvbiwgYnV0IHRoZSBzZXJ2ZXIgIgorICAgICAgICAgICAgImNhbiBiZSB1c2VkIGJ5IFBPU1RpbmcgdG8gL1JQQzIuIFRyeSBzZWxmLmFkZCwgdG9vLiIpCisKKyAgICAgICAgIyBDcmVhdGUgYW5kIHJlZ2lzdGVyIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucworICAgICAgICBjbGFzcyBUZXN0Q2xhc3Mob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiB0ZXN0X21ldGhvZChzZWxmLCBhcmcpOgorICAgICAgICAgICAgICAgICIiIlRlc3QgbWV0aG9kJ3MgZG9jcy4gVGhpcyBtZXRob2QgdHJ1bHkgZG9lcyB2ZXJ5IGxpdHRsZS4iIiIKKyAgICAgICAgICAgICAgICBzZWxmLmFyZyA9IGFyZworCisgICAgICAgIHNlcnYucmVnaXN0ZXJfaW50cm9zcGVjdGlvbl9mdW5jdGlvbnMoKQorICAgICAgICBzZXJ2LnJlZ2lzdGVyX2luc3RhbmNlKFRlc3RDbGFzcygpKQorCisgICAgICAgIGRlZiBhZGQoeCwgeSk6CisgICAgICAgICAgICAiIiJBZGQgdHdvIGluc3RhbmNlcyB0b2dldGhlci4gVGhpcyBmb2xsb3dzIFBFUDAwOCwgYnV0IGhhcyBub3RoaW5nCisgICAgICAgICAgICB0byBkbyB3aXRoIFJGQzE5NTIuIENhc2Ugc2hvdWxkIG1hdHRlcjogcEVwMDA4IGFuZCByRkMxOTUyLiAgVGhpbmdzCisgICAgICAgICAgICB0aGF0IHN0YXJ0IHdpdGggaHR0cCBhbmQgZnRwIHNob3VsZCBiZSBhdXRvLWxpbmtlZCwgdG9vOgorICAgICAgICAgICAgaHR0cDovL2dvb2dsZS5jb20uCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHJldHVybiB4ICsgeQorCisgICAgICAgIHNlcnYucmVnaXN0ZXJfZnVuY3Rpb24oYWRkKQorICAgICAgICBzZXJ2LnJlZ2lzdGVyX2Z1bmN0aW9uKGxhbWJkYSB4LCB5OiB4LXkpCisKKyAgICAgICAgd2hpbGUgbnVtcmVxdWVzdHMgPiAwOgorICAgICAgICAgICAgc2Vydi5oYW5kbGVfcmVxdWVzdCgpCisgICAgICAgICAgICBudW1yZXF1ZXN0cyAtPSAxCisgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgc2Vydi5zZXJ2ZXJfY2xvc2UoKQorICAgICAgICBQT1JUID0gTm9uZQorICAgICAgICBldnQuc2V0KCkKKworY2xhc3MgRG9jWE1MUlBDSFRUUEdFVFNlcnZlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl90aHJlYWRzID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisgICAgICAgICMgRW5hYmxlIHNlcnZlciBmZWVkYmFjaworICAgICAgICBEb2NYTUxSUENTZXJ2ZXIuX3NlbmRfdHJhY2ViYWNrX2hlYWRlciA9IFRydWUKKworICAgICAgICBzZWxmLmV2dCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlcnZlciwgYXJncz0oc2VsZi5ldnQsIDEpKS5zdGFydCgpCisKKyAgICAgICAgIyB3YWl0IGZvciBwb3J0IHRvIGJlIGFzc2lnbmVkCisgICAgICAgIG4gPSAxMDAwCisgICAgICAgIHdoaWxlIG4gPiAwIGFuZCBQT1JUIGlzIE5vbmU6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDAxKQorICAgICAgICAgICAgbiAtPSAxCisKKyAgICAgICAgc2VsZi5jbGllbnQgPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCJsb2NhbGhvc3Q6JWQiICUgUE9SVCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQuY2xvc2UoKQorCisgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorCisgICAgICAgICMgRGlzYWJsZSBzZXJ2ZXIgZmVlZGJhY2sKKyAgICAgICAgRG9jWE1MUlBDU2VydmVyLl9zZW5kX3RyYWNlYmFja19oZWFkZXIgPSBGYWxzZQorICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCisKKyAgICBkZWYgdGVzdF92YWxpZF9nZXRfcmVzcG9uc2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LnJlcXVlc3QoIkdFVCIsICIvIikKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXRyZXNwb25zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXMsIDIwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5nZXRoZWFkZXIoIkNvbnRlbnQtdHlwZSIpLCAidGV4dC9odG1sIikKKworICAgICAgICAjIFNlcnZlciByYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHdlIGRvbid0IHN0YXJ0IHRvIHJlYWQgdGhlIGRhdGEKKyAgICAgICAgcmVzcG9uc2UucmVhZCgpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2dldF9yZXNwb25zZShzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQucmVxdWVzdCgiR0VUIiwgIi9zcGFtIikKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXRyZXNwb25zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXMsIDQwNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5nZXRoZWFkZXIoIkNvbnRlbnQtdHlwZSIpLCAidGV4dC9wbGFpbiIpCisKKyAgICAgICAgcmVzcG9uc2UucmVhZCgpCisKKyAgICBkZWYgdGVzdF9sYW1iZGEoc2VsZik6CisgICAgICAgICIiIlRlc3QgdGhhdCBsYW1iZGEgZnVuY3Rpb25hbGl0eSBzdGF5cyB0aGUgc2FtZS4gIFRoZSBvdXRwdXQgcHJvZHVjZWQKKyAgICAgICAgY3VycmVudGx5IGlzLCBJIHN1c3BlY3QgaW52YWxpZCBiZWNhdXNlIG9mIHRoZSB1bmVuY29kZWQgYnJhY2tldHMgaW4gdGhlCisgICAgICAgIEhUTUwsICI8bGFtYmRhPiIuCisKKyAgICAgICAgVGhlIHN1YnRyYWN0aW9uIGxhbWJkYSBtZXRob2QgaXMgdGVzdGVkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5jbGllbnQucmVxdWVzdCgiR0VUIiwgIi8iKQorICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldHJlc3BvbnNlKCkKKworICAgICAgICBzZWxmLmFzc2VydEluKCc8ZGw+PGR0PjxhIG5hbWU9Ii0mbHQ7bGFtYmRhJmd0OyI+PHN0cm9uZz4nCisgICAgICAgICAgICAgICAgICAgICAgJyZsdDtsYW1iZGEmZ3Q7PC9zdHJvbmc+PC9hPih4LCB5KTwvZHQ+PC9kbD4nLAorICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlYWQoKSkKKworICAgIEBtYWtlX3JlcXVlc3RfYW5kX3NraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfYXV0b2xpbmtpbmcoc2VsZik6CisgICAgICAgICIiIlRlc3QgdGhhdCB0aGUgc2VydmVyIGNvcnJlY3RseSBhdXRvbWF0aWNhbGx5IHdyYXBzIHJlZmVyZW5jZXMgdG8KKyAgICAgICAgUEVQUyBhbmQgUkZDcyB3aXRoIGxpbmtzLCBhbmQgdGhhdCBpdCBsaW5raWZpZXMgdGV4dCBzdGFydGluZyB3aXRoCisgICAgICAgIGh0dHAgb3IgZnRwIHByb3RvY29sIHByZWZpeGVzLgorCisgICAgICAgIFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgImFkZCIgbWV0aG9kIGNvbnRhaW5zIHRoZSB0ZXN0IG1hdGVyaWFsLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5jbGllbnQucmVxdWVzdCgiR0VUIiwgIi8iKQorICAgICAgICByZXNwb25zZSA9IHNlbGYuY2xpZW50LmdldHJlc3BvbnNlKCkKKworICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgKCc8ZGw+PGR0PjxhIG5hbWU9Ii1hZGQiPjxzdHJvbmc+YWRkPC9zdHJvbmc+PC9hPih4LCB5KTwvZHQ+PGRkPicKKyAgICAgICAgICAgICAnPHR0PkFkZCZuYnNwO3R3byZuYnNwO2luc3RhbmNlcyZuYnNwO3RvZ2V0aGVyLiZuYnNwO1RoaXMmbmJzcDsnCisgICAgICAgICAgICAgJ2ZvbGxvd3MmbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTAwMDgvIj4nCisgICAgICAgICAgICAgJ1BFUDAwODwvYT4sJm5ic3A7YnV0Jm5ic3A7aGFzJm5ic3A7bm90aGluZzxicj5cbnRvJm5ic3A7ZG8mbmJzcDsnCisgICAgICAgICAgICAgJ3dpdGgmbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMxOTUyLnR4dCI+JworICAgICAgICAgICAgICdSRkMxOTUyPC9hPi4mbmJzcDtDYXNlJm5ic3A7c2hvdWxkJm5ic3A7bWF0dGVyOiZuYnNwO3BFcDAwOCZuYnNwOycKKyAgICAgICAgICAgICAnYW5kJm5ic3A7ckZDMTk1Mi4mbmJzcDsmbmJzcDtUaGluZ3M8YnI+XG50aGF0Jm5ic3A7c3RhcnQmbmJzcDsnCisgICAgICAgICAgICAgJ3dpdGgmbmJzcDtodHRwJm5ic3A7YW5kJm5ic3A7ZnRwJm5ic3A7c2hvdWxkJm5ic3A7YmUmbmJzcDsnCisgICAgICAgICAgICAgJ2F1dG8tbGlua2VkLCZuYnNwO3Rvbzo8YnI+XG48YSBocmVmPSJodHRwOi8vZ29vZ2xlLmNvbSI+JworICAgICAgICAgICAgICdodHRwOi8vZ29vZ2xlLmNvbTwvYT4uPC90dD48L2RkPjwvZGw+JyksIHJlc3BvbnNlLnJlYWQoKSkKKworICAgIEBtYWtlX3JlcXVlc3RfYW5kX3NraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3Rfc3lzdGVtX21ldGhvZHMoc2VsZik6CisgICAgICAgICIiIlRlc3QgdGhlIHByZWNlbnNlIG9mIHRocmVlIGNvbnNlY3V0aXZlIHN5c3RlbS4qIG1ldGhvZHMuCisKKyAgICAgICAgVGhpcyBhbHNvIHRlc3RzIHRoZWlyIHVzZSBvZiBwYXJhbWV0ZXIgdHlwZSByZWNvZ25pdGlvbiBhbmQgdGhlCisgICAgICAgIHN5c3RlbXMgcmVsYXRlZCB0byB0aGF0IHByb2Nlc3MuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmNsaWVudC5yZXF1ZXN0KCJHRVQiLCAiLyIpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0cmVzcG9uc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oCisgICAgICAgICAgICAoJzxkbD48ZHQ+PGEgbmFtZT0iLXN5c3RlbS5saXN0TWV0aG9kcyI+PHN0cm9uZz5zeXN0ZW0ubGlzdE1ldGhvZHMnCisgICAgICAgICAgICAgJzwvc3Ryb25nPjwvYT4oKTwvZHQ+PGRkPjx0dD48YSBocmVmPSIjLXN5c3RlbS5saXN0TWV0aG9kcyI+c3lzdGVtJworICAgICAgICAgICAgICcubGlzdE1ldGhvZHM8L2E+KCkmbmJzcDs9Jmd0OyZuYnNwO1tcJ2FkZFwnLCZuYnNwO1wnc3VidHJhY3RcJywnCisgICAgICAgICAgICAgJyZuYnNwO1wnbXVsdGlwbGVcJ108YnI+XG4mbmJzcDs8YnI+XG5SZXR1cm5zJm5ic3A7YSZuYnNwO2xpc3QnCisgICAgICAgICAgICAgJyZuYnNwO29mJm5ic3A7dGhlJm5ic3A7bWV0aG9kcyZuYnNwO3N1cHBvcnRlZCZuYnNwO2J5Jm5ic3A7dGhlJworICAgICAgICAgICAgICcmbmJzcDtzZXJ2ZXIuPC90dD48L2RkPjwvZGw+XG4gPGRsPjxkdD48YSBuYW1lPSItc3lzdGVtLm1ldGhvZEhlbHAiPicKKyAgICAgICAgICAgICAnPHN0cm9uZz5zeXN0ZW0ubWV0aG9kSGVscDwvc3Ryb25nPjwvYT4obWV0aG9kX25hbWUpPC9kdD48ZGQ+PHR0PicKKyAgICAgICAgICAgICAnPGEgaHJlZj0iIy1zeXN0ZW0ubWV0aG9kSGVscCI+c3lzdGVtLm1ldGhvZEhlbHA8L2E+KFwnYWRkXCcpJm5ic3A7JworICAgICAgICAgICAgICc9Jmd0OyZuYnNwOyJBZGRzJm5ic3A7dHdvJm5ic3A7aW50ZWdlcnMmbmJzcDt0b2dldGhlciI8YnI+XG4mbmJzcDsnCisgICAgICAgICAgICAgJzxicj5cblJldHVybnMmbmJzcDthJm5ic3A7c3RyaW5nJm5ic3A7Y29udGFpbmluZyZuYnNwO2RvY3VtZW50YXRpb24nCisgICAgICAgICAgICAgJyZuYnNwO2ZvciZuYnNwO3RoZSZuYnNwO3NwZWNpZmllZCZuYnNwO21ldGhvZC48L3R0PjwvZGQ+PC9kbD5cbiAnCisgICAgICAgICAgICAgJzxkbD48ZHQ+PGEgbmFtZT0iLXN5c3RlbS5tZXRob2RTaWduYXR1cmUiPjxzdHJvbmc+c3lzdGVtLicKKyAgICAgICAgICAgICAnbWV0aG9kU2lnbmF0dXJlPC9zdHJvbmc+PC9hPihtZXRob2RfbmFtZSk8L2R0PjxkZD48dHQ+PGEgaHJlZj0iIy0nCisgICAgICAgICAgICAgJ3N5c3RlbS5tZXRob2RTaWduYXR1cmUiPnN5c3RlbS5tZXRob2RTaWduYXR1cmU8L2E+KFwnYWRkXCcpJm5ic3A7JworICAgICAgICAgICAgICc9Jmd0OyZuYnNwO1tkb3VibGUsJm5ic3A7aW50LCZuYnNwO2ludF08YnI+XG4mbmJzcDs8YnI+XG5SZXR1cm5zJworICAgICAgICAgICAgICcmbmJzcDthJm5ic3A7bGlzdCZuYnNwO2Rlc2NyaWJpbmcmbmJzcDt0aGUmbmJzcDtzaWduYXR1cmUmbmJzcDtvZicKKyAgICAgICAgICAgICAnJm5ic3A7dGhlJm5ic3A7bWV0aG9kLiZuYnNwO0luJm5ic3A7dGhlPGJyPlxuYWJvdmUmbmJzcDtleGFtcGxlLCcKKyAgICAgICAgICAgICAnJm5ic3A7dGhlJm5ic3A7YWRkJm5ic3A7bWV0aG9kJm5ic3A7dGFrZXMmbmJzcDt0d28mbmJzcDtpbnRlZ2VycycKKyAgICAgICAgICAgICAnJm5ic3A7YXMmbmJzcDthcmd1bWVudHM8YnI+XG5hbmQmbmJzcDtyZXR1cm5zJm5ic3A7YSZuYnNwO2RvdWJsZScKKyAgICAgICAgICAgICAnJm5ic3A7cmVzdWx0Ljxicj5cbiZuYnNwOzxicj5cblRoaXMmbmJzcDtzZXJ2ZXImbmJzcDtkb2VzJm5ic3A7JworICAgICAgICAgICAgICdOT1QmbmJzcDtzdXBwb3J0Jm5ic3A7c3lzdGVtLm1ldGhvZFNpZ25hdHVyZS48L3R0PjwvZGQ+PC9kbD4nKSwKKyAgICAgICAgICAgIHJlc3BvbnNlLnJlYWQoKSkKKworICAgIGRlZiB0ZXN0X2F1dG9saW5rX2RvdHRlZF9tZXRob2RzKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHRoYXQgc2VsZmRvdCB2YWx1ZXMgYXJlIG1hZGUgc3Ryb25nIGF1dG9tYXRpY2FsbHkgaW4gdGhlCisgICAgICAgIGRvY3VtZW50YXRpb24uIiIiCisgICAgICAgIHNlbGYuY2xpZW50LnJlcXVlc3QoIkdFVCIsICIvIikKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmNsaWVudC5nZXRyZXNwb25zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiIiJUcnkmbmJzcDtzZWxmLjxzdHJvbmc+YWRkPC9zdHJvbmc+LCZuYnNwO3Rvby4iIiIsCisgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVhZCgpKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChEb2NYTUxSUENIVFRQR0VUU2VydmVyKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kdW1iZGJtLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZHVtYmRibS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDFmYWMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZHVtYmRibS5weQpAQCAtMCwwICsxLDE3OSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIiIiVGVzdCBzY3JpcHQgZm9yIHRoZSBkdW1iZGJtIG1vZHVsZQorICAgT3JpZ2luYWwgYnkgUm9nZXIgRS4gTWFzc2UKKyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGR1bWJkYm0KK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK19mbmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKworZGVmIF9kZWxldGVfZmlsZXMoKToKKyAgICBmb3IgZXh0IGluIFsiLmRpciIsICIuZGF0IiwgIi5iYWsiXToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKF9mbmFtZSArIGV4dCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKK2NsYXNzIER1bWJEQk1UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgX2RpY3QgPSB7JzAnOiAnJywKKyAgICAgICAgICAgICAnYSc6ICdQeXRob246JywKKyAgICAgICAgICAgICAnYic6ICdQcm9ncmFtbWluZycsCisgICAgICAgICAgICAgJ2MnOiAndGhlJywKKyAgICAgICAgICAgICAnZCc6ICd3YXknLAorICAgICAgICAgICAgICdmJzogJ0d1aWRvJywKKyAgICAgICAgICAgICAnZyc6ICdpbnRlbmRlZCcKKyAgICAgICAgICAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5fX2luaXRfXyhzZWxmLCAqYXJncykKKworICAgIGRlZiB0ZXN0X2R1bWJkYm1fY3JlYXRpb24oc2VsZik6CisgICAgICAgIGYgPSBkdW1iZGJtLm9wZW4oX2ZuYW1lLCAnYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5rZXlzKCksIFtdKQorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX2RpY3Q6CisgICAgICAgICAgICBmW2tleV0gPSBzZWxmLl9kaWN0W2tleV0KKyAgICAgICAgc2VsZi5yZWFkX2hlbHBlcihmKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2R1bWJkYm1fY3JlYXRpb25fbW9kZShzZWxmKToKKyAgICAgICAgIyBPbiBwbGF0Zm9ybXMgd2l0aG91dCBjaG1vZCwgZG9uJ3QgZG8gYW55dGhpbmcuCisgICAgICAgIGlmIG5vdCAoaGFzYXR0cihvcywgJ2NobW9kJykgYW5kIGhhc2F0dHIob3MsICd1bWFzaycpKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9sZF91bWFzayA9IG9zLnVtYXNrKDAwMDIpCisgICAgICAgICAgICBmID0gZHVtYmRibS5vcGVuKF9mbmFtZSwgJ2MnLCAwNjM3KQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bWFzayhvbGRfdW1hc2spCisKKyAgICAgICAgZXhwZWN0ZWRfbW9kZSA9IDA2MzUKKyAgICAgICAgaWYgb3MubmFtZSAhPSAncG9zaXgnOgorICAgICAgICAgICAgIyBXaW5kb3dzIG9ubHkgc3VwcG9ydHMgc2V0dGluZyB0aGUgcmVhZC1vbmx5IGF0dHJpYnV0ZS4KKyAgICAgICAgICAgICMgVGhpcyBzaG91bGRuJ3QgZmFpbCwgYnV0IGRvZXNuJ3Qgd29yayBsaWtlIFVuaXggZWl0aGVyLgorICAgICAgICAgICAgZXhwZWN0ZWRfbW9kZSA9IDA2NjYKKworICAgICAgICBpbXBvcnQgc3RhdAorICAgICAgICBzdCA9IG9zLnN0YXQoX2ZuYW1lICsgJy5kYXQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSwgZXhwZWN0ZWRfbW9kZSkKKyAgICAgICAgc3QgPSBvcy5zdGF0KF9mbmFtZSArICcuZGlyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSksIGV4cGVjdGVkX21vZGUpCisKKyAgICBkZWYgdGVzdF9jbG9zZV90d2ljZShzZWxmKToKKyAgICAgICAgZiA9IGR1bWJkYm0ub3BlbihfZm5hbWUpCisgICAgICAgIGZbJ2EnXSA9ICdiJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZbJ2EnXSwgJ2InKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9kdW1iZGJtX21vZGlmaWNhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5pbml0X2RiKCkKKyAgICAgICAgZiA9IGR1bWJkYm0ub3BlbihfZm5hbWUsICd3JykKKyAgICAgICAgc2VsZi5fZGljdFsnZyddID0gZlsnZyddID0gImluZGVudGVkIgorICAgICAgICBzZWxmLnJlYWRfaGVscGVyKGYpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZHVtYmRibV9yZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmluaXRfZGIoKQorICAgICAgICBmID0gZHVtYmRibS5vcGVuKF9mbmFtZSwgJ3InKQorICAgICAgICBzZWxmLnJlYWRfaGVscGVyKGYpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZHVtYmRibV9rZXlzKHNlbGYpOgorICAgICAgICBzZWxmLmluaXRfZGIoKQorICAgICAgICBmID0gZHVtYmRibS5vcGVuKF9mbmFtZSkKKyAgICAgICAga2V5cyA9IHNlbGYua2V5c19oZWxwZXIoZikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93cml0ZV93cml0ZV9yZWFkKHNlbGYpOgorICAgICAgICAjIHRlc3QgZm9yIGJ1ZyAjNDgyNDYwCisgICAgICAgIGYgPSBkdW1iZGJtLm9wZW4oX2ZuYW1lKQorICAgICAgICBmWycxJ10gPSAnaGVsbG8nCisgICAgICAgIGZbJzEnXSA9ICdoZWxsbzInCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmID0gZHVtYmRibS5vcGVuKF9mbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmWycxJ10sICdoZWxsbzInKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2xpbmVfZW5kaW5ncyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IGZvciBidWcgIzExNzI3NjM6IGR1bWJkYm0gd291bGQgZGllIGlmIHRoZSBsaW5lIGVuZGluZ3MKKyAgICAgICAgIyB3ZXJlbid0IHdoYXQgd2FzIGV4cGVjdGVkLgorICAgICAgICBmID0gZHVtYmRibS5vcGVuKF9mbmFtZSkKKyAgICAgICAgZlsnMSddID0gJ2hlbGxvJworICAgICAgICBmWycyJ10gPSAnaGVsbG8yJworICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIE1hbmdsZSB0aGUgZmlsZSBieSBhZGRpbmcgXHIgYmVmb3JlIGVhY2ggbmV3bGluZQorICAgICAgICBkYXRhID0gb3BlbihfZm5hbWUgKyAnLmRpcicpLnJlYWQoKQorICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCdcbicsICdcclxuJykKKyAgICAgICAgb3BlbihfZm5hbWUgKyAnLmRpcicsICd3YicpLndyaXRlKGRhdGEpCisKKyAgICAgICAgZiA9IGR1bWJkYm0ub3BlbihfZm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZlsnMSddLCAnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZbJzInXSwgJ2hlbGxvMicpCisKKworICAgIGRlZiByZWFkX2hlbHBlcihzZWxmLCBmKToKKyAgICAgICAga2V5cyA9IHNlbGYua2V5c19oZWxwZXIoZikKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9kaWN0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kaWN0W2tleV0sIGZba2V5XSkKKworICAgIGRlZiBpbml0X2RiKHNlbGYpOgorICAgICAgICBmID0gZHVtYmRibS5vcGVuKF9mbmFtZSwgJ3cnKQorICAgICAgICBmb3IgayBpbiBzZWxmLl9kaWN0OgorICAgICAgICAgICAgZltrXSA9IHNlbGYuX2RpY3Rba10KKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYga2V5c19oZWxwZXIoc2VsZiwgZik6CisgICAgICAgIGtleXMgPSBmLmtleXMoKQorICAgICAgICBrZXlzLnNvcnQoKQorICAgICAgICBka2V5cyA9IHNlbGYuX2RpY3Qua2V5cygpCisgICAgICAgIGRrZXlzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIGRrZXlzKQorICAgICAgICByZXR1cm4ga2V5cworCisgICAgIyBQZXJmb3JtIHJhbmRvbWl6ZWQgb3BlcmF0aW9ucy4gIFRoaXMgZG9lc24ndCBtYWtlIGFzc3VtcHRpb25zIGFib3V0CisgICAgIyB3aGF0ICptaWdodCogZmFpbC4KKyAgICBkZWYgdGVzdF9yYW5kb20oc2VsZik6CisgICAgICAgIGltcG9ydCByYW5kb20KKyAgICAgICAgZCA9IHt9ICAjIG1pcnJvciB0aGUgZGF0YWJhc2UKKyAgICAgICAgZm9yIGR1bW15IGluIHJhbmdlKDUpOgorICAgICAgICAgICAgZiA9IGR1bWJkYm0ub3BlbihfZm5hbWUpCisgICAgICAgICAgICBmb3IgZHVtbXkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgICAgICBrID0gcmFuZG9tLmNob2ljZSgnYWJjZGVmZ2hpamtsbScpCisgICAgICAgICAgICAgICAgaWYgcmFuZG9tLnJhbmRvbSgpIDwgMC4yOgorICAgICAgICAgICAgICAgICAgICBpZiBrIGluIGQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgZFtrXQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGZba10KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2ID0gcmFuZG9tLmNob2ljZSgnYWJjJykgKiByYW5kb20ucmFuZHJhbmdlKDEwMDAwKQorICAgICAgICAgICAgICAgICAgICBkW2tdID0gdgorICAgICAgICAgICAgICAgICAgICBmW2tdID0gdgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZba10sIHYpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgZiA9IGR1bWJkYm0ub3BlbihfZm5hbWUpCisgICAgICAgICAgICBleHBlY3RlZCA9IGQuaXRlbXMoKQorICAgICAgICAgICAgZXhwZWN0ZWQuc29ydCgpCisgICAgICAgICAgICBnb3QgPSBmLml0ZW1zKCkKKyAgICAgICAgICAgIGdvdC5zb3J0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBfZGVsZXRlX2ZpbGVzKCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgX2RlbGV0ZV9maWxlcygpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0cnk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoRHVtYkRCTVRlc3RDYXNlKQorICAgIGZpbmFsbHk6CisgICAgICAgIF9kZWxldGVfZmlsZXMoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kdW1teV90aHJlYWQucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9kdW1teV90aHJlYWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliZGQzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2R1bW15X3RocmVhZC5weQpAQCAtMCwwICsxLDE4MiBAQAorIiIiR2VuZXJpYyB0aHJlYWQgdGVzdHMuCisKK01lYW50IHRvIGJlIHVzZWQgYnkgZHVtbXlfdGhyZWFkIGFuZCB0aHJlYWQuICBUbyBhbGxvdyBmb3IgZGlmZmVyZW50IG1vZHVsZXMKK3RvIGJlIHVzZWQsIHRlc3RfbWFpbigpIGNhbiBiZSBjYWxsZWQgd2l0aCB0aGUgbW9kdWxlIHRvIHVzZSBhcyB0aGUgdGhyZWFkCitpbXBsZW1lbnRhdGlvbiBhcyBpdHMgc29sZSBhcmd1bWVudC4KKworIiIiCitpbXBvcnQgZHVtbXlfdGhyZWFkIGFzIF90aHJlYWQKK2ltcG9ydCB0aW1lCitpbXBvcnQgUXVldWUKK2ltcG9ydCByYW5kb20KK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworREVMQVkgPSAwICMgU2V0ID4gMCB3aGVuIHRlc3RpbmcgYSBtb2R1bGUgb3RoZXIgdGhhbiBkdW1teV90aHJlYWQsIHN1Y2ggYXMKKyAgICAgICAgICAjIHRoZSAndGhyZWFkJyBtb2R1bGUuCisKK2NsYXNzIExvY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBsb2NrIG9iamVjdHMuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIGEgbG9jaworICAgICAgICBzZWxmLmxvY2sgPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorCisgICAgZGVmIHRlc3RfaW5pdGxvY2soc2VsZik6CisgICAgICAgICNNYWtlIHN1cmUgbG9ja3Mgc3RhcnQgbG9ja2VkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgc2VsZi5sb2NrLmxvY2tlZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2sgb2JqZWN0IGlzIG5vdCBpbml0aWFsaXplZCB1bmxvY2tlZC4iKQorCisgICAgZGVmIHRlc3RfcmVsZWFzZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHNlbGYubG9jay5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoKQorICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgc2VsZi5sb2NrLmxvY2tlZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIkxvY2sgb2JqZWN0IGRpZCBub3QgcmVsZWFzZSBwcm9wZXJseS4iKQorCisgICAgZGVmIHRlc3RfaW1wcm9wZXJfcmVsZWFzZShzZWxmKToKKyAgICAgICAgI01ha2Ugc3VyZSByZWxlYXNlIG9mIGFuIHVubG9ja2VkIHRocmVhZCByYWlzZXMgX3RocmVhZC5lcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhfdGhyZWFkLmVycm9yLCBzZWxmLmxvY2sucmVsZWFzZSkKKworICAgIGRlZiB0ZXN0X2NvbmRfYWNxdWlyZV9zdWNjZXNzKHNlbGYpOgorICAgICAgICAjTWFrZSBzdXJlIHRoZSBjb25kaXRpb25hbCBhY3F1aXJpbmcgb2YgdGhlIGxvY2sgd29ya3MuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvY2suYWNxdWlyZSgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb25kaXRpb25hbCBhY3F1aXJpbmcgb2YgdGhlIGxvY2sgZmFpbGVkLiIpCisKKyAgICBkZWYgdGVzdF9jb25kX2FjcXVpcmVfZmFpbChzZWxmKToKKyAgICAgICAgI1Rlc3QgYWNxdWlyaW5nIGxvY2tlZCBsb2NrIHJldHVybnMgRmFsc2UKKyAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLmxvY2suYWNxdWlyZSgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb25kaXRpb25hbCBhY3F1aXJpbmcgb2YgYSBsb2NrZWQgbG9jayBpbmNvcnJlY3RseSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInN1Y2NlZWRlZC4iKQorCisgICAgZGVmIHRlc3RfdW5jb25kX2FjcXVpcmVfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgI01ha2Ugc3VyZSB1bmNvbmRpdGlvbmFsIGFjcXVpcmluZyBvZiBhIGxvY2sgd29ya3MuCisgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9jay5sb2NrZWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJVbmNvbmRpb25hbCBsb2NraW5nIGZhaWxlZC4iKQorCisgICAgZGVmIHRlc3RfdW5jb25kX2FjcXVpcmVfcmV0dXJuX3ZhbChzZWxmKToKKyAgICAgICAgI01ha2Ugc3VyZSB0aGF0IGFuIHVuY29uZGl0aW9uYWwgbG9ja2luZyByZXR1cm5zIFRydWUuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvY2suYWNxdWlyZSgxKSBpcyBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIlVuY29uZGl0aW9uYWwgbG9ja2luZyBkaWQgbm90IHJldHVybiBUcnVlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvY2suYWNxdWlyZSgpIGlzIFRydWUpCisKKyAgICBkZWYgdGVzdF91bmNvbmRfYWNxdWlyZV9ibG9ja2luZyhzZWxmKToKKyAgICAgICAgI01ha2Ugc3VyZSB0aGF0IHVuY29uZGl0aW9uYWwgYWNxdWlyaW5nIG9mIGEgbG9ja2VkIGxvY2sgYmxvY2tzLgorICAgICAgICBkZWYgZGVsYXlfdW5sb2NrKHRvX3VubG9jaywgZGVsYXkpOgorICAgICAgICAgICAgIiIiSG9sZCBvbiB0byBsb2NrIGZvciBhIHNldCBhbW91bnQgb2YgdGltZSBiZWZvcmUgdW5sb2NraW5nLiIiIgorICAgICAgICAgICAgdGltZS5zbGVlcChkZWxheSkKKyAgICAgICAgICAgIHRvX3VubG9jay5yZWxlYXNlKCkKKworICAgICAgICBzZWxmLmxvY2suYWNxdWlyZSgpCisgICAgICAgIHN0YXJ0X3RpbWUgPSBpbnQodGltZS50aW1lKCkpCisgICAgICAgIF90aHJlYWQuc3RhcnRfbmV3X3RocmVhZChkZWxheV91bmxvY2ssKHNlbGYubG9jaywgREVMQVkpKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICBwcmludCAiKioqIFdhaXRpbmcgZm9yIHRocmVhZCB0byByZWxlYXNlIHRoZSBsb2NrICJcCisgICAgICAgICAgICAiKGFwcHJveC4gJXMgc2VjLikgKioqIiAlIERFTEFZCisgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKCkKKyAgICAgICAgZW5kX3RpbWUgPSBpbnQodGltZS50aW1lKCkpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgImRvbmUiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoZW5kX3RpbWUgLSBzdGFydF90aW1lKSA+PSBERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJCbG9ja2luZyBieSB1bmNvbmRpdGlvbmFsIGFjcXVpcmluZyBmYWlsZWQuIikKKworY2xhc3MgTWlzY1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJNaXNjZWxsYW5lb3VzIHRlc3RzLiIiIgorCisgICAgZGVmIHRlc3RfZXhpdChzZWxmKToKKyAgICAgICAgI01ha2Ugc3VyZSBfdGhyZWFkLmV4aXQoKSByYWlzZXMgU3lzdGVtRXhpdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBfdGhyZWFkLmV4aXQpCisKKyAgICBkZWYgdGVzdF9pZGVudChzZWxmKToKKyAgICAgICAgI1Rlc3Qgc2FuaXR5IG9mIF90aHJlYWQuZ2V0X2lkZW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKF90aHJlYWQuZ2V0X2lkZW50KCksIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfdGhyZWFkLmdldF9pZGVudCgpIHJldHVybmVkIGEgbm9uLWludGVnZXIiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX3RocmVhZC5nZXRfaWRlbnQoKSAhPSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIl90aHJlYWQuZ2V0X2lkZW50KCkgcmV0dXJuZWQgMCIpCisKKyAgICBkZWYgdGVzdF9Mb2NrVHlwZShzZWxmKToKKyAgICAgICAgI01ha2Ugc3VyZSBfdGhyZWFkLkxvY2tUeXBlIGlzIHRoZSBzYW1lIHR5cGUgYXMgX3RocmVhZC5hbGxvY2F0ZV9sb2NrZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShfdGhyZWFkLmFsbG9jYXRlX2xvY2soKSwgX3RocmVhZC5Mb2NrVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfdGhyZWFkLkxvY2tUeXBlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiB3aGF0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpcyByZXR1cm5lZCBieSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKSIpCisKKyAgICBkZWYgdGVzdF9pbnRlcnJ1cHRfbWFpbihzZWxmKToKKyAgICAgICAgI0NhbGxpbmcgc3RhcnRfbmV3X3RocmVhZCB3aXRoIGEgZnVuY3Rpb24gdGhhdCBleGVjdXRlcyBpbnRlcnJ1cHRfbWFpbgorICAgICAgICAjIHNob3VsZCByYWlzZSBLZXlib2FyZEludGVycnVwdCB1cG9uIGNvbXBsZXRpb24uCisgICAgICAgIGRlZiBjYWxsX2ludGVycnVwdCgpOgorICAgICAgICAgICAgX3RocmVhZC5pbnRlcnJ1cHRfbWFpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX2ludGVycnVwdCwgdHVwbGUoKSkKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdF9pbl9tYWluKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGlmIGludGVycnVwdF9tYWluIGlzIGNhbGxlZCBpbiBtYWluIHRocmVhdCB0aGF0CisgICAgICAgICMgS2V5Ym9hcmRJbnRlcnJ1cHQgaXMgcmFpc2VkIGluc3RhbnRseS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQsIF90aHJlYWQuaW50ZXJydXB0X21haW4pCisKK2NsYXNzIFRocmVhZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRocmVhZCBjcmVhdGlvbi4iIiIKKworICAgIGRlZiB0ZXN0X2FyZ19wYXNzaW5nKHNlbGYpOgorICAgICAgICAjTWFrZSBzdXJlIHRoYXQgcGFyYW1ldGVyIHBhc3Npbmcgd29ya3MuCisgICAgICAgIGRlZiBhcmdfdGVzdGVyKHF1ZXVlLCBhcmcxPUZhbHNlLCBhcmcyPUZhbHNlKToKKyAgICAgICAgICAgICIiIlVzZSB0byB0ZXN0IF90aHJlYWQuc3RhcnRfbmV3X3RocmVhZCgpIHBhc3NlcyBhcmdzIHByb3Blcmx5LiIiIgorICAgICAgICAgICAgcXVldWUucHV0KChhcmcxLCBhcmcyKSkKKworICAgICAgICB0ZXN0aW5nX3F1ZXVlID0gUXVldWUuUXVldWUoMSkKKyAgICAgICAgX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkKGFyZ190ZXN0ZXIsICh0ZXN0aW5nX3F1ZXVlLCBUcnVlLCBUcnVlKSkKKyAgICAgICAgcmVzdWx0ID0gdGVzdGluZ19xdWV1ZS5nZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0WzBdIGFuZCByZXN1bHRbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnQgcGFzc2luZyBmb3IgdGhyZWFkIGNyZWF0aW9uIHVzaW5nIHR1cGxlIGZhaWxlZCIpCisgICAgICAgIF90aHJlYWQuc3RhcnRfbmV3X3RocmVhZChhcmdfdGVzdGVyLCB0dXBsZSgpLCB7J3F1ZXVlJzp0ZXN0aW5nX3F1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcmcxJzpUcnVlLCAnYXJnMic6VHJ1ZX0pCisgICAgICAgIHJlc3VsdCA9IHRlc3RpbmdfcXVldWUuZ2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdFswXSBhbmQgcmVzdWx0WzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIkFyZ3VtZW50IHBhc3NpbmcgZm9yIHRocmVhZCBjcmVhdGlvbiB1c2luZyBrd2FyZ3MgZmFpbGVkIikKKyAgICAgICAgX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkKGFyZ190ZXN0ZXIsICh0ZXN0aW5nX3F1ZXVlLCBUcnVlKSwgeydhcmcyJzpUcnVlfSkKKyAgICAgICAgcmVzdWx0ID0gdGVzdGluZ19xdWV1ZS5nZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0WzBdIGFuZCByZXN1bHRbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnQgcGFzc2luZyBmb3IgdGhyZWFkIGNyZWF0aW9uIHVzaW5nIGJvdGggdHVwbGUiCisgICAgICAgICAgICAgICAgICAgICAgICAiIGFuZCBrd2FyZ3MgZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X211bHRpX2NyZWF0aW9uKHNlbGYpOgorICAgICAgICAjTWFrZSBzdXJlIG11bHRpcGxlIHRocmVhZHMgY2FuIGJlIGNyZWF0ZWQuCisgICAgICAgIGRlZiBxdWV1ZV9tYXJrKHF1ZXVlLCBkZWxheSk6CisgICAgICAgICAgICAiIiJXYWl0IGZvciBgYGRlbGF5YGAgc2Vjb25kcyBhbmQgdGhlbiBwdXQgc29tZXRoaW5nIGludG8gYGBxdWV1ZWBgIiIiCisgICAgICAgICAgICB0aW1lLnNsZWVwKGRlbGF5KQorICAgICAgICAgICAgcXVldWUucHV0KF90aHJlYWQuZ2V0X2lkZW50KCkpCisKKyAgICAgICAgdGhyZWFkX2NvdW50ID0gNQorICAgICAgICB0ZXN0aW5nX3F1ZXVlID0gUXVldWUuUXVldWUodGhyZWFkX2NvdW50KQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICBwcmludCAiKioqIFRlc3RpbmcgbXVsdGlwbGUgdGhyZWFkIGNyZWF0aW9uICJcCisgICAgICAgICAgICAiKHdpbGwgdGFrZSBhcHByb3guICVzIHRvICVzIHNlYy4pICoqKiIgJSAoREVMQVksIHRocmVhZF9jb3VudCkKKyAgICAgICAgZm9yIGNvdW50IGluIHhyYW5nZSh0aHJlYWRfY291bnQpOgorICAgICAgICAgICAgaWYgREVMQVk6CisgICAgICAgICAgICAgICAgbG9jYWxfZGVsYXkgPSByb3VuZChyYW5kb20ucmFuZG9tKCksIDEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxvY2FsX2RlbGF5ID0gMAorICAgICAgICAgICAgX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkKHF1ZXVlX21hcmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RpbmdfcXVldWUsIGxvY2FsX2RlbGF5KSkKKyAgICAgICAgdGltZS5zbGVlcChERUxBWSkKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnZG9uZScKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3RpbmdfcXVldWUucXNpemUoKSA9PSB0aHJlYWRfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAiTm90IGFsbCAlcyB0aHJlYWRzIGV4ZWN1dGVkIHByb3Blcmx5IGFmdGVyICVzIHNlYy4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICh0aHJlYWRfY291bnQsIERFTEFZKSkKKworZGVmIHRlc3RfbWFpbihpbXBvcnRlZF9tb2R1bGU9Tm9uZSk6CisgICAgZ2xvYmFsIF90aHJlYWQsIERFTEFZCisgICAgaWYgaW1wb3J0ZWRfbW9kdWxlOgorICAgICAgICBfdGhyZWFkID0gaW1wb3J0ZWRfbW9kdWxlCisgICAgICAgIERFTEFZID0gMgorICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICBwcmludAorICAgICAgICBwcmludCAiKioqIFVzaW5nICVzIGFzIF90aHJlYWQgbW9kdWxlICoqKiIgJSBfdGhyZWFkCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChMb2NrVGVzdHMsIE1pc2NUZXN0cywgVGhyZWFkVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2R1bW15X3RocmVhZGluZy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2R1bW15X3RocmVhZGluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjU5ZDVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZHVtbXlfdGhyZWFkaW5nLnB5CkBAIC0wLDAgKzEsNjMgQEAKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBkdW1teV90aHJlYWRpbmcgYXMgX3RocmVhZGluZworaW1wb3J0IHRpbWUKKworY2xhc3MgRHVtbXlUaHJlYWRpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBUZXN0VGhyZWFkKF90aHJlYWRpbmcuVGhyZWFkKToKKworICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgZ2xvYmFsIHJ1bm5pbmcKKyAgICAgICAgICAgIGdsb2JhbCBzZW1hCisgICAgICAgICAgICBnbG9iYWwgbXV0ZXgKKyAgICAgICAgICAgICMgVW5jb21tZW50IGlmIHRlc3RpbmcgYW5vdGhlciBtb2R1bGUsIHN1Y2ggYXMgdGhlIHJlYWwgJ3RocmVhZGluZycKKyAgICAgICAgICAgICMgbW9kdWxlLgorICAgICAgICAgICAgI2RlbGF5ID0gcmFuZG9tLnJhbmRvbSgpICogMgorICAgICAgICAgICAgZGVsYXkgPSAwCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAndGFzaycsIHNlbGYubmFtZSwgJ3dpbGwgcnVuIGZvcicsIGRlbGF5LCAnc2VjJworICAgICAgICAgICAgc2VtYS5hY3F1aXJlKCkKKyAgICAgICAgICAgIG11dGV4LmFjcXVpcmUoKQorICAgICAgICAgICAgcnVubmluZyArPSAxCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCBydW5uaW5nLCAndGFza3MgYXJlIHJ1bm5pbmcnCisgICAgICAgICAgICBtdXRleC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoZGVsYXkpCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAndGFzaycsIHNlbGYubmFtZSwgJ2RvbmUnCisgICAgICAgICAgICBtdXRleC5hY3F1aXJlKCkKKyAgICAgICAgICAgIHJ1bm5pbmcgLT0gMQorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgc2VsZi5uYW1lLCAnaXMgZmluaXNoZWQuJywgcnVubmluZywgJ3Rhc2tzIGFyZSBydW5uaW5nJworICAgICAgICAgICAgbXV0ZXgucmVsZWFzZSgpCisgICAgICAgICAgICBzZW1hLnJlbGVhc2UoKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm51bXRhc2tzID0gMTAKKyAgICAgICAgZ2xvYmFsIHNlbWEKKyAgICAgICAgc2VtYSA9IF90aHJlYWRpbmcuQm91bmRlZFNlbWFwaG9yZSh2YWx1ZT0zKQorICAgICAgICBnbG9iYWwgbXV0ZXgKKyAgICAgICAgbXV0ZXggPSBfdGhyZWFkaW5nLlJMb2NrKCkKKyAgICAgICAgZ2xvYmFsIHJ1bm5pbmcKKyAgICAgICAgcnVubmluZyA9IDAKKyAgICAgICAgc2VsZi50aHJlYWRzID0gW10KKworICAgIGRlZiB0ZXN0X3Rhc2tzKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLm51bXRhc2tzKToKKyAgICAgICAgICAgIHQgPSBzZWxmLlRlc3RUaHJlYWQobmFtZT0iPHRocmVhZCAlZD4iJWkpCisgICAgICAgICAgICBzZWxmLnRocmVhZHMuYXBwZW5kKHQpCisgICAgICAgICAgICB0LnN0YXJ0KCkKKworICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICd3YWl0aW5nIGZvciBhbGwgdGFza3MgdG8gY29tcGxldGUnCisgICAgICAgIGZvciB0IGluIHNlbGYudGhyZWFkczoKKyAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ2FsbCB0YXNrcyBkb25lJworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChEdW1teVRocmVhZGluZ1Rlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9lbWFpbC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2VtYWlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNmUwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9lbWFpbC5weQpAQCAtMCwwICsxLDE0IEBACisjIENvcHlyaWdodCAoQykgMjAwMSwyMDAyIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGVtYWlsIHBhY2thZ2UgdW5pdCB0ZXN0cworCisjIFRoZSBzcGVjaWZpYyB0ZXN0cyBub3cgbGl2ZSBpbiBMaWIvZW1haWwvdGVzdAorZnJvbSBlbWFpbC50ZXN0LnRlc3RfZW1haWwgaW1wb3J0IHN1aXRlCitmcm9tIGVtYWlsLnRlc3QudGVzdF9lbWFpbF9yZW5hbWVkIGltcG9ydCBzdWl0ZSBhcyBzdWl0ZTIKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KHN1aXRlKCkpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChzdWl0ZTIoKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZW1haWxfY29kZWNzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZW1haWxfY29kZWNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NTFmODEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9lbWFpbF9jb2RlY3MucHkKQEAgLTAsMCArMSwxNSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDIgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZW1haWwgcGFja2FnZSB1bml0IHRlc3RzIGZvciAob3B0aW9uYWwpIEFzaWFuIGNvZGVjcworCisjIFRoZSBzcGVjaWZpYyB0ZXN0cyBub3cgbGl2ZSBpbiBMaWIvZW1haWwvdGVzdAorZnJvbSBlbWFpbC50ZXN0IGltcG9ydCB0ZXN0X2VtYWlsX2NvZGVjcworZnJvbSBlbWFpbC50ZXN0IGltcG9ydCB0ZXN0X2VtYWlsX2NvZGVjc19yZW5hbWVkCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VpdGUgPSB0ZXN0X2VtYWlsX2NvZGVjcy5zdWl0ZSgpCisgICAgc3VpdGUuYWRkVGVzdCh0ZXN0X2VtYWlsX2NvZGVjc19yZW5hbWVkLnN1aXRlKCkpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChzdWl0ZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZW1haWxfcmVuYW1lZC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2VtYWlsX3JlbmFtZWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM4MTRkZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2VtYWlsX3JlbmFtZWQucHkKQEAgLTAsMCArMSwxMiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorIyBlbWFpbCBwYWNrYWdlIHVuaXQgdGVzdHMKKworIyBUaGUgc3BlY2lmaWMgdGVzdHMgbm93IGxpdmUgaW4gTGliL2VtYWlsL3Rlc3QKK2Zyb20gZW1haWwudGVzdC50ZXN0X2VtYWlsX3JlbmFtZWQgaW1wb3J0IHN1aXRlCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChzdWl0ZSgpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI5ZmY3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQpAQCAtMCwwICsxLDI1NSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIEc6CisgICAgJ1NlcXVlbmNlIHVzaW5nIF9fZ2V0aXRlbV9fJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VxbltpXQorCitjbGFzcyBJOgorICAgICdTZXF1ZW5jZSB1c2luZyBpdGVyYXRvciBwcm90b2NvbCcKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pID49IGxlbihzZWxmLnNlcW4pOiByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIHYgPSBzZWxmLnNlcW5bc2VsZi5pXQorICAgICAgICBzZWxmLmkgKz0gMQorICAgICAgICByZXR1cm4gdgorCitjbGFzcyBJZzoKKyAgICAnU2VxdWVuY2UgdXNpbmcgaXRlcmF0b3IgcHJvdG9jb2wgZGVmaW5lZCB3aXRoIGEgZ2VuZXJhdG9yJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBmb3IgdmFsIGluIHNlbGYuc2VxbjoKKyAgICAgICAgICAgIHlpZWxkIHZhbAorCitjbGFzcyBYOgorICAgICdNaXNzaW5nIF9fZ2V0aXRlbV9fIGFuZCBfX2l0ZXJfXycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmkgPj0gbGVuKHNlbGYuc2Vxbik6IHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgdiA9IHNlbGYuc2VxbltzZWxmLmldCisgICAgICAgIHNlbGYuaSArPSAxCisgICAgICAgIHJldHVybiB2CisKK2NsYXNzIEU6CisgICAgJ1Rlc3QgcHJvcGFnYXRpb24gb2YgZXhjZXB0aW9ucycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgMyAvLyAwCisKK2NsYXNzIE46CisgICAgJ0l0ZXJhdG9yIG1pc3NpbmcgbmV4dCgpJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCitjbGFzcyBFbnVtZXJhdGVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBlbnVtID0gZW51bWVyYXRlCisgICAgc2VxLCByZXMgPSAnYWJjJywgWygwLCdhJyksICgxLCdiJyksICgyLCdjJyldCisKKyAgICBkZWYgdGVzdF9iYXNpY2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc2VsZi5lbnVtKHNlbGYuc2VxKSksIHNlbGYuZW51bSkKKyAgICAgICAgZSA9IHNlbGYuZW51bShzZWxmLnNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVyKGUpLCBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc2VsZi5lbnVtKHNlbGYuc2VxKSksIHNlbGYucmVzKQorICAgICAgICBzZWxmLmVudW0uX19kb2NfXworCisgICAgZGVmIHRlc3RfZ2V0aXRlbXNlcW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzZWxmLmVudW0oRyhzZWxmLnNlcSkpKSwgc2VsZi5yZXMpCisgICAgICAgIGUgPSBzZWxmLmVudW0oRygnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIGUubmV4dCkKKworICAgIGRlZiB0ZXN0X2l0ZXJhdG9yc2VxbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHNlbGYuZW51bShJKHNlbGYuc2VxKSkpLCBzZWxmLnJlcykKKyAgICAgICAgZSA9IHNlbGYuZW51bShJKCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgZS5uZXh0KQorCisgICAgZGVmIHRlc3RfaXRlcmF0b3JnZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzZWxmLmVudW0oSWcoc2VsZi5zZXEpKSksIHNlbGYucmVzKQorICAgICAgICBlID0gc2VsZi5lbnVtKElnKCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgZS5uZXh0KQorCisgICAgZGVmIHRlc3Rfbm9uaXRlcmFibGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5lbnVtLCBYKHNlbGYuc2VxKSkKKworICAgIGRlZiB0ZXN0X2lsbGZvcm1lZGl0ZXJhYmxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIHNlbGYuZW51bShOKHNlbGYuc2VxKSkpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fcHJvcGFnYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsaXN0LCBzZWxmLmVudW0oRShzZWxmLnNlcSkpKQorCisgICAgZGVmIHRlc3RfYXJndW1lbnRjaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmVudW0pICMgbm8gYXJndW1lbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5lbnVtLCAxKSAjIHdyb25nIHR5cGUgKG5vdCBpdGVyYWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmVudW0sICdhYmMnLCAnYScpICMgd3JvbmcgdHlwZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZW51bSwgJ2FiYycsIDIsIDMpICMgdG9vIG1hbnkgYXJndW1lbnRzCisKKyAgICBAdGVzdF9zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3R1cGxlX3JldXNlKHNlbGYpOgorICAgICAgICAjIFRlc3RzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCB3aGVyZSB0dXBsZSBpcyByZXVzZWQKKyAgICAgICAgIyB3aGVuZXZlciBub3RoaW5nIGVsc2UgaG9sZHMgYSByZWZlcmVuY2UgdG8gaXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2V0KG1hcChpZCwgbGlzdChlbnVtZXJhdGUoc2VsZi5zZXEpKSkpKSwgbGVuKHNlbGYuc2VxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2V0KG1hcChpZCwgZW51bWVyYXRlKHNlbGYuc2VxKSkpKSwgbWluKDEsbGVuKHNlbGYuc2VxKSkpCisKK2NsYXNzIE15RW51bShlbnVtZXJhdGUpOgorICAgIHBhc3MKKworY2xhc3MgU3ViY2xhc3NUZXN0Q2FzZShFbnVtZXJhdGVUZXN0Q2FzZSk6CisKKyAgICBlbnVtID0gTXlFbnVtCisKK2NsYXNzIFRlc3RFbXB0eShFbnVtZXJhdGVUZXN0Q2FzZSk6CisKKyAgICBzZXEsIHJlcyA9ICcnLCBbXQorCitjbGFzcyBUZXN0QmlnKEVudW1lcmF0ZVRlc3RDYXNlKToKKworICAgIHNlcSA9IHJhbmdlKDEwLDIwMDAwLDIpCisgICAgcmVzID0gemlwKHJhbmdlKDIwMDAwKSwgc2VxKQorCitjbGFzcyBUZXN0UmV2ZXJzZWQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIGlmIGkgPCA1OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyKGkpCisgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDUKKyAgICAgICAgZm9yIGRhdGEgaW4gJ2FiYycsIHJhbmdlKDUpLCB0dXBsZShlbnVtZXJhdGUoJ2FiYycpKSwgQSgpLCB4cmFuZ2UoMSwxNyw1KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkYXRhKVs6Oi0xXSwgbGlzdChyZXZlcnNlZChkYXRhKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmV2ZXJzZWQsIHt9KQorICAgICAgICAjIGRvbid0IGFsbG93IGtleXdvcmQgYXJndW1lbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmV2ZXJzZWQsIFtdLCBhPTEpCisKKyAgICBkZWYgdGVzdF9jbGFzc2ljX2NsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgZGVmIF9fcmV2ZXJzZWRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWzIsIDFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChBKCkpKSwgWzIsIDFdKQorCisgICAgZGVmIHRlc3RfeHJhbmdlX29wdGltaXphdGlvbihzZWxmKToKKyAgICAgICAgeCA9IHhyYW5nZSgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmV2ZXJzZWQoeCkpLCB0eXBlKGl0ZXIoeCkpKQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9sZW4oc2VsZik6CisgICAgICAgICMgVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIG5vdCBhbiBpbnRlcmZhY2UgcmVxdWlyZW1lbnQKKyAgICAgICAgZnJvbSB0ZXN0LnRlc3RfaXRlcmxlbiBpbXBvcnQgbGVuCisgICAgICAgIGZvciBzIGluICgnaGVsbG8nLCB0dXBsZSgnaGVsbG8nKSwgbGlzdCgnaGVsbG8nKSwgeHJhbmdlKDUpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldmVyc2VkKHMpKSwgbGVuKHMpKQorICAgICAgICAgICAgciA9IHJldmVyc2VkKHMpCisgICAgICAgICAgICBsaXN0KHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyKSwgMCkKKyAgICAgICAgY2xhc3MgU2VxV2l0aFdlaXJkTGVuOgorICAgICAgICAgICAgY2FsbGVkID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNhbGxlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxMAorICAgICAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbmRleAorICAgICAgICByID0gcmV2ZXJzZWQoU2VxV2l0aFdlaXJkTGVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsZW4sIHIpCisKKworICAgIGRlZiB0ZXN0X2djKHNlbGYpOgorICAgICAgICBjbGFzcyBTZXE6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMTAKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4CisgICAgICAgIHMgPSBTZXEoKQorICAgICAgICByID0gcmV2ZXJzZWQocykKKyAgICAgICAgcy5yID0gcgorCisgICAgZGVmIHRlc3RfYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZXZlcnNlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZXZlcnNlZCwgW10sICdleHRyYScpCisKKyAgICBkZWYgdGVzdF9idWcxMjI5NDI5KHNlbGYpOgorICAgICAgICAjIHRoaXMgYnVnIHdhcyBuZXZlciBpbiByZXZlcnNlZCwgaXQgd2FzIGluCisgICAgICAgICMgUHlPYmplY3RfQ2FsbE1ldGhvZCwgYW5kIHJldmVyc2VkX25ldyBjYWxscyB0aGF0IHNvbWV0aW1lcy4KKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc3lzLCAiZ2V0cmVmY291bnQiKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICByID0gZi5fX3JldmVyc2VkX18gPSBvYmplY3QoKQorICAgICAgICByYyA9IHN5cy5nZXRyZWZjb3VudChyKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV2ZXJzZWQoZikKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm5vbi1jYWxsYWJsZSBfX3JldmVyc2VkX18gZGlkbid0IHJhaXNlISIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIHN5cy5nZXRyZWZjb3VudChyKSkKKworICAgIGRlZiB0ZXN0X29iam1ldGhvZHMoc2VsZik6CisgICAgICAgICMgT2JqZWN0cyBtdXN0IGhhdmUgX19sZW5fXygpIGFuZCBfX2dldGl0ZW1fXygpIGltcGxlbWVudGVkLgorICAgICAgICBjbGFzcyBOb0xlbihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYpOiByZXR1cm4gMQorICAgICAgICBubCA9IE5vTGVuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZXZlcnNlZCwgbmwpCisKKyAgICAgICAgY2xhc3MgTm9HZXRJdGVtKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKTogcmV0dXJuIDIKKyAgICAgICAgbmdpID0gTm9HZXRJdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZXZlcnNlZCwgbmdpKQorCisKK2NsYXNzIEVudW1lcmF0ZVN0YXJ0VGVzdENhc2UoRW51bWVyYXRlVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWNmdW5jdGlvbihzZWxmKToKKyAgICAgICAgZSA9IHNlbGYuZW51bShzZWxmLnNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVyKGUpLCBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc2VsZi5lbnVtKHNlbGYuc2VxKSksIHNlbGYucmVzKQorCisKK2NsYXNzIFRlc3RTdGFydChFbnVtZXJhdGVTdGFydFRlc3RDYXNlKToKKworICAgIGVudW0gPSBsYW1iZGEgc2VsZiwgaTogZW51bWVyYXRlKGksIHN0YXJ0PTExKQorICAgIHNlcSwgcmVzID0gJ2FiYycsIFsoMTEsICdhJyksICgxMiwgJ2InKSwgKDEzLCAnYycpXQorCisKK2NsYXNzIFRlc3RMb25nU3RhcnQoRW51bWVyYXRlU3RhcnRUZXN0Q2FzZSk6CisKKyAgICBlbnVtID0gbGFtYmRhIHNlbGYsIGk6IGVudW1lcmF0ZShpLCBzdGFydD1zeXMubWF4aW50KzEpCisgICAgc2VxLCByZXMgPSAnYWJjJywgWyhzeXMubWF4aW50KzEsJ2EnKSwgKHN5cy5tYXhpbnQrMiwnYicpLAorICAgICAgICAgICAgICAgICAgICAgICAoc3lzLm1heGludCszLCdjJyldCisKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKKyAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKKyAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICAgICAgY291bnRzID0gW05vbmVdICogNQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKGNvdW50cykpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKyAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgcHJpbnQgY291bnRzCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2VvZi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2VvZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjM5MTdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZW9mLnB5CkBAIC0wLDAgKzEsMzIgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyIiInRlc3Qgc2NyaXB0IGZvciBhIGZldyBuZXcgaW52YWxpZCB0b2tlbiBjYXRjaGVzIiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgRU9GVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X0VPRkMoc2VsZik6CisgICAgICAgIGV4cGVjdCA9ICJFT0wgd2hpbGUgc2Nhbm5pbmcgc3RyaW5nIGxpdGVyYWwgKDxzdHJpbmc+LCBsaW5lIDEpIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmFsKCIiIid0aGlzIGlzIGEgdGVzdFwKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yLCBtc2c6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtc2cpLCBleHBlY3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZAorCisgICAgZGVmIHRlc3RfRU9GUyhzZWxmKToKKyAgICAgICAgZXhwZWN0ID0gKCJFT0Ygd2hpbGUgc2Nhbm5pbmcgdHJpcGxlLXF1b3RlZCBzdHJpbmcgbGl0ZXJhbCAiCisgICAgICAgICAgICAgICAgICAiKDxzdHJpbmc+LCBsaW5lIDEpIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXZhbCgiIiInJyd0aGlzIGlzIGEgdGVzdCIiIikKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yLCBtc2c6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtc2cpLCBleHBlY3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZAorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChFT0ZUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZXBvbGwucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9lcG9sbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjZkOWVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZXBvbGwucHkKQEAgLTAsMCArMSwyMjIgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDAxLTIwMDYgVHdpc3RlZCBNYXRyaXggTGFib3JhdG9yaWVzLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyMgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisjICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyMgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorIyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyMgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisjIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyMKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorIyBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyMgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyMgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorIyBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisjIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorIyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyIiIgorVGVzdHMgZm9yIGVwb2xsIHdyYXBwZXIuCisiIiIKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBlcnJubworaW1wb3J0IHRpbWUKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraWYgbm90IGhhc2F0dHIoc2VsZWN0LCAiZXBvbGwiKToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgidGVzdCB3b3JrcyBvbmx5IG9uIExpbnV4IDIuNiIpCisKK3RyeToKKyAgICBzZWxlY3QuZXBvbGwoKQorZXhjZXB0IElPRXJyb3IsIGU6CisgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TWVM6CisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJrZXJuZWwgZG9lc24ndCBzdXBwb3J0IGVwb2xsKCkiKQorICAgIHJhaXNlCisKK2NsYXNzIFRlc3RFUG9sbCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyU29ja2V0ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHNlbGYuc2VydmVyU29ja2V0LmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgc2VsZi5zZXJ2ZXJTb2NrZXQubGlzdGVuKDEpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbnMgPSBbc2VsZi5zZXJ2ZXJTb2NrZXRdCisKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIHNrdCBpbiBzZWxmLmNvbm5lY3Rpb25zOgorICAgICAgICAgICAgc2t0LmNsb3NlKCkKKworICAgIGRlZiBfY29ubmVjdGVkX3BhaXIoc2VsZik6CisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBjbGllbnQuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgc2VsZi5zZXJ2ZXJTb2NrZXQuZ2V0c29ja25hbWUoKVsxXSkpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgZXJybm8uRUlOUFJPR1JFU1MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiQ29ubmVjdCBzaG91bGQgaGF2ZSByYWlzZWQgRUlOUFJPR1JFU1MiKQorICAgICAgICBzZXJ2ZXIsIGFkZHIgPSBzZWxmLnNlcnZlclNvY2tldC5hY2NlcHQoKQorCisgICAgICAgIHNlbGYuY29ubmVjdGlvbnMuZXh0ZW5kKChjbGllbnQsIHNlcnZlcikpCisgICAgICAgIHJldHVybiBjbGllbnQsIHNlcnZlcgorCisgICAgZGVmIHRlc3RfY3JlYXRlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBlcCA9IHNlbGVjdC5lcG9sbCgxNikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihzdHIoZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcC5maWxlbm8oKSA+IDAsIGVwLmZpbGVubygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGVwLmNsb3NlZCkKKyAgICAgICAgZXAuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXAuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcC5maWxlbm8pCisKKyAgICBkZWYgdGVzdF9iYWRjcmVhdGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LmVwb2xsLCAxLCAyLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGVjdC5lcG9sbCwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LmVwb2xsLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGVjdC5lcG9sbCwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LmVwb2xsLCBbJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGVjdC5lcG9sbCwge30pCisKKyAgICBkZWYgdGVzdF9hZGQoc2VsZik6CisgICAgICAgIHNlcnZlciwgY2xpZW50ID0gc2VsZi5fY29ubmVjdGVkX3BhaXIoKQorCisgICAgICAgIGVwID0gc2VsZWN0LmVwb2xsKDIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVwLnJlZ2lzdGVyKHNlcnZlci5maWxlbm8oKSwgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCisgICAgICAgICAgICBlcC5yZWdpc3RlcihjbGllbnQuZmlsZW5vKCksIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZXAuY2xvc2UoKQorCisgICAgICAgICMgYWRkaW5nIGJ5IG9iamVjdCB3LyBmaWxlbm8gd29ya3MsIHRvby4KKyAgICAgICAgZXAgPSBzZWxlY3QuZXBvbGwoMikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXAucmVnaXN0ZXIoc2VydmVyLCBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKKyAgICAgICAgICAgIGVwLnJlZ2lzdGVyKGNsaWVudCwgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBlcC5jbG9zZSgpCisKKyAgICAgICAgZXAgPSBzZWxlY3QuZXBvbGwoMikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBUeXBlRXJyb3I6IGFyZ3VtZW50IG11c3QgYmUgYW4gaW50LCBvciBoYXZlIGEgZmlsZW5vKCkgbWV0aG9kLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBlcC5yZWdpc3Rlciwgb2JqZWN0KCksCisgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGVwLnJlZ2lzdGVyLCBOb25lLAorICAgICAgICAgICAgICAgIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQorICAgICAgICAgICAgIyBWYWx1ZUVycm9yOiBmaWxlIGRlc2NyaXB0b3IgY2Fubm90IGJlIGEgbmVnYXRpdmUgaW50ZWdlciAoLTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcC5yZWdpc3RlciwgLTEsCisgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCisgICAgICAgICAgICAjIElPRXJyb3I6IFtFcnJubyA5XSBCYWQgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBlcC5yZWdpc3RlciwgMTAwMDAsCisgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCisgICAgICAgICAgICAjIHJlZ2lzdGVyaW5nIHR3aWNlIGFsc28gcmFpc2VzIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgZXAucmVnaXN0ZXIoc2VydmVyLCBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGVwLnJlZ2lzdGVyLCBzZXJ2ZXIsCisgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBlcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9mcm9tZmQoc2VsZik6CisgICAgICAgIHNlcnZlciwgY2xpZW50ID0gc2VsZi5fY29ubmVjdGVkX3BhaXIoKQorCisgICAgICAgIGVwID0gc2VsZWN0LmVwb2xsKDIpCisgICAgICAgIGVwMiA9IHNlbGVjdC5lcG9sbC5mcm9tZmQoZXAuZmlsZW5vKCkpCisKKyAgICAgICAgZXAyLnJlZ2lzdGVyKHNlcnZlci5maWxlbm8oKSwgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCisgICAgICAgIGVwMi5yZWdpc3RlcihjbGllbnQuZmlsZW5vKCksIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQorCisgICAgICAgIGV2ZW50cyA9IGVwLnBvbGwoMSwgNCkKKyAgICAgICAgZXZlbnRzMiA9IGVwMi5wb2xsKDAuOSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXZlbnRzKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXZlbnRzMiksIDIpCisKKyAgICAgICAgZXAuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlcDIucG9sbCgxLCA0KQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCBlcnJuby5FQkFERiwgZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXBvbGwgb24gY2xvc2VkIGZkIGRpZG4ndCByYWlzZSBFQkFERiIpCisKKyAgICBkZWYgdGVzdF9jb250cm9sX2FuZF93YWl0KHNlbGYpOgorICAgICAgICBjbGllbnQsIHNlcnZlciA9IHNlbGYuX2Nvbm5lY3RlZF9wYWlyKCkKKworICAgICAgICBlcCA9IHNlbGVjdC5lcG9sbCgxNikKKyAgICAgICAgZXAucmVnaXN0ZXIoc2VydmVyLmZpbGVubygpLAorICAgICAgICAgICAgICAgICAgIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUIHwgc2VsZWN0LkVQT0xMRVQpCisgICAgICAgIGVwLnJlZ2lzdGVyKGNsaWVudC5maWxlbm8oKSwKKyAgICAgICAgICAgICAgICAgICBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCB8IHNlbGVjdC5FUE9MTEVUKQorCisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIGV2ZW50cyA9IGVwLnBvbGwoMSwgNCkKKyAgICAgICAgdGhlbiA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGhlbiAtIG5vdyA+IDAuMSwgdGhlbiAtIG5vdykKKworICAgICAgICBldmVudHMuc29ydCgpCisgICAgICAgIGV4cGVjdGVkID0gWyhjbGllbnQuZmlsZW5vKCksIHNlbGVjdC5FUE9MTE9VVCksCisgICAgICAgICAgICAgICAgICAgIChzZXJ2ZXIuZmlsZW5vKCksIHNlbGVjdC5FUE9MTE9VVCldCisgICAgICAgIGV4cGVjdGVkLnNvcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4wMSwgdGhlbiAtIG5vdykKKworICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICBldmVudHMgPSBlcC5wb2xsKHRpbWVvdXQ9Mi4xLCBtYXhldmVudHM9NCkKKyAgICAgICAgdGhlbiA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXZlbnRzKQorCisgICAgICAgIGNsaWVudC5zZW5kKCJIZWxsbyEiKQorICAgICAgICBzZXJ2ZXIuc2VuZCgid29ybGQhISEiKQorCisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIGV2ZW50cyA9IGVwLnBvbGwoMSwgNCkKKyAgICAgICAgdGhlbiA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGhlbiAtIG5vdyA+IDAuMDEpCisKKyAgICAgICAgZXZlbnRzLnNvcnQoKQorICAgICAgICBleHBlY3RlZCA9IFsoY2xpZW50LmZpbGVubygpLCBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCksCisgICAgICAgICAgICAgICAgICAgIChzZXJ2ZXIuZmlsZW5vKCksIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKV0KKyAgICAgICAgZXhwZWN0ZWQuc29ydCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgICAgIGVwLnVucmVnaXN0ZXIoY2xpZW50LmZpbGVubygpKQorICAgICAgICBlcC5tb2RpZnkoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuRVBPTExPVVQpCisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIGV2ZW50cyA9IGVwLnBvbGwoMSwgNCkKKyAgICAgICAgdGhlbiA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGhlbiAtIG5vdyA+IDAuMDEpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbKHNlcnZlci5maWxlbm8oKSwgc2VsZWN0LkVQT0xMT1VUKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxlY3QuZXBvbGwsIC0yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxlY3QuZXBvbGwoKS5yZWdpc3RlciwgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5FUE9MTElOKQorCisgICAgZGVmIHRlc3RfdW5yZWdpc3Rlcl9jbG9zZWQoc2VsZik6CisgICAgICAgIHNlcnZlciwgY2xpZW50ID0gc2VsZi5fY29ubmVjdGVkX3BhaXIoKQorICAgICAgICBmZCA9IHNlcnZlci5maWxlbm8oKQorICAgICAgICBlcCA9IHNlbGVjdC5lcG9sbCgxNikKKyAgICAgICAgZXAucmVnaXN0ZXIoc2VydmVyKQorCisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIGV2ZW50cyA9IGVwLnBvbGwoMSwgNCkKKyAgICAgICAgdGhlbiA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGhlbiAtIG5vdyA+IDAuMDEpCisKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKyAgICAgICAgZXAudW5yZWdpc3RlcihmZCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEVQb2xsKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9lcnJuby5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Vycm5vLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJiODkxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9lcnJuby5weQpAQCAtMCwwICsxLDQwIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisiIiJUZXN0IHRoZSBlcnJubyBtb2R1bGUKKyAgIFJvZ2VyIEUuIE1hc3NlCisiIiIKKworaW1wb3J0IGVycm5vCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CisKK3N0ZF9jX2Vycm9ycyA9IGZyb3plbnNldChbJ0VET00nLCAnRVJBTkdFJ10pCisKK2NsYXNzIEVycm5vQXR0cmlidXRlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZm9yX2ltcHJvcGVyX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgICMgTm8gdW5leHBlY3RlZCBhdHRyaWJ1dGVzIHNob3VsZCBiZSBvbiB0aGUgbW9kdWxlLgorICAgICAgICBmb3IgZXJyb3JfY29kZSBpbiBzdGRfY19lcnJvcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihlcnJubywgZXJyb3JfY29kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm5vIGlzIG1pc3NpbmcgJXMiICUgZXJyb3JfY29kZSkKKworICAgIGRlZiB0ZXN0X3VzaW5nX2Vycm9yY29kZShzZWxmKToKKyAgICAgICAgIyBFdmVyeSBrZXkgdmFsdWUgaW4gZXJybm8uZXJyb3Jjb2RlIHNob3VsZCBiZSBvbiB0aGUgbW9kdWxlLgorICAgICAgICBmb3IgdmFsdWUgaW4gZXJybm8uZXJyb3Jjb2RlLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGVycm5vLCB2YWx1ZSksICdubyAlcyBhdHRyIGluIGVycm5vJyAlIHZhbHVlKQorCisKK2NsYXNzIEVycm9yY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfaW5fZXJyb3Jjb2RlKHNlbGYpOgorICAgICAgICBmb3IgYXR0cmlidXRlIGluIGVycm5vLl9fZGljdF9fLml0ZXJrZXlzKCk6CisgICAgICAgICAgICBpZiBhdHRyaWJ1dGUuaXN1cHBlcigpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZ2V0YXR0cihlcnJubywgYXR0cmlidXRlKSwgZXJybm8uZXJyb3Jjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vICVzIGF0dHIgaW4gZXJybm8uZXJyb3Jjb2RlJyAlIGF0dHJpYnV0ZSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChFcnJub0F0dHJpYnV0ZVRlc3RzLCBFcnJvcmNvZGVUZXN0cykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9leGNlcHRpb25fdmFyaWF0aW9ucy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2V4Y2VwdGlvbl92YXJpYXRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZTc1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9leGNlcHRpb25fdmFyaWF0aW9ucy5weQpAQCAtMCwwICsxLDE4MCBAQAorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBFeGNlcHRpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdHJ5X2V4Y2VwdF9lbHNlX2ZpbmFsbHkoc2VsZik6CisgICAgICAgIGhpdF9leGNlcHQgPSBGYWxzZQorICAgICAgICBoaXRfZWxzZSA9IEZhbHNlCisgICAgICAgIGhpdF9maW5hbGx5ID0gRmFsc2UKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24sICdueWFhIScKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaGl0X2V4Y2VwdCA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhpdF9lbHNlID0gVHJ1ZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaGl0X2ZpbmFsbHkgPSBUcnVlCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhpdF9leGNlcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoaXRfZmluYWxseSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoaXRfZWxzZSkKKworICAgIGRlZiB0ZXN0X3RyeV9leGNlcHRfZWxzZV9maW5hbGx5X25vX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgaGl0X2V4Y2VwdCA9IEZhbHNlCisgICAgICAgIGhpdF9lbHNlID0gRmFsc2UKKyAgICAgICAgaGl0X2ZpbmFsbHkgPSBGYWxzZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaGl0X2V4Y2VwdCA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhpdF9lbHNlID0gVHJ1ZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaGl0X2ZpbmFsbHkgPSBUcnVlCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoaXRfZXhjZXB0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGl0X2ZpbmFsbHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoaXRfZWxzZSkKKworICAgIGRlZiB0ZXN0X3RyeV9leGNlcHRfZmluYWxseShzZWxmKToKKyAgICAgICAgaGl0X2V4Y2VwdCA9IEZhbHNlCisgICAgICAgIGhpdF9maW5hbGx5ID0gRmFsc2UKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24sICd5YXJyIScKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaGl0X2V4Y2VwdCA9IFRydWUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGhpdF9maW5hbGx5ID0gVHJ1ZQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoaXRfZXhjZXB0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGl0X2ZpbmFsbHkpCisKKyAgICBkZWYgdGVzdF90cnlfZXhjZXB0X2ZpbmFsbHlfbm9fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBoaXRfZXhjZXB0ID0gRmFsc2UKKyAgICAgICAgaGl0X2ZpbmFsbHkgPSBGYWxzZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaGl0X2V4Y2VwdCA9IFRydWUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGhpdF9maW5hbGx5ID0gVHJ1ZQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGl0X2V4Y2VwdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhpdF9maW5hbGx5KQorCisgICAgZGVmIHRlc3RfdHJ5X2V4Y2VwdChzZWxmKToKKyAgICAgICAgaGl0X2V4Y2VwdCA9IEZhbHNlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uLCAnYWhveSEnCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGhpdF9leGNlcHQgPSBUcnVlCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhpdF9leGNlcHQpCisKKyAgICBkZWYgdGVzdF90cnlfZXhjZXB0X25vX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgaGl0X2V4Y2VwdCA9IEZhbHNlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBoaXRfZXhjZXB0ID0gVHJ1ZQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGl0X2V4Y2VwdCkKKworICAgIGRlZiB0ZXN0X3RyeV9leGNlcHRfZWxzZShzZWxmKToKKyAgICAgICAgaGl0X2V4Y2VwdCA9IEZhbHNlCisgICAgICAgIGhpdF9lbHNlID0gRmFsc2UKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24sICdmb28hJworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBoaXRfZXhjZXB0ID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGl0X2Vsc2UgPSBUcnVlCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoaXRfZWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhpdF9leGNlcHQpCisKKyAgICBkZWYgdGVzdF90cnlfZXhjZXB0X2Vsc2Vfbm9fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBoaXRfZXhjZXB0ID0gRmFsc2UKKyAgICAgICAgaGl0X2Vsc2UgPSBGYWxzZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaGl0X2V4Y2VwdCA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhpdF9lbHNlID0gVHJ1ZQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGl0X2V4Y2VwdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhpdF9lbHNlKQorCisgICAgZGVmIHRlc3RfdHJ5X2ZpbmFsbHlfbm9fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBoaXRfZmluYWxseSA9IEZhbHNlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFzcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaGl0X2ZpbmFsbHkgPSBUcnVlCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhpdF9maW5hbGx5KQorCisgICAgZGVmIHRlc3RfbmVzdGVkKHNlbGYpOgorICAgICAgICBoaXRfZmluYWxseSA9IEZhbHNlCisgICAgICAgIGhpdF9pbm5lcl9leGNlcHQgPSBGYWxzZQorICAgICAgICBoaXRfaW5uZXJfZmluYWxseSA9IEZhbHNlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbiwgJ2lubmVyIGV4Y2VwdGlvbicKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBoaXRfaW5uZXJfZXhjZXB0ID0gVHJ1ZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBoaXRfaW5uZXJfZmluYWxseSA9IFRydWUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGhpdF9maW5hbGx5ID0gVHJ1ZQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoaXRfaW5uZXJfZXhjZXB0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGl0X2lubmVyX2ZpbmFsbHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoaXRfZmluYWxseSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF9lbHNlKHNlbGYpOgorICAgICAgICBoaXRfZWxzZSA9IEZhbHNlCisgICAgICAgIGhpdF9maW5hbGx5ID0gRmFsc2UKKyAgICAgICAgaGl0X2V4Y2VwdCA9IEZhbHNlCisgICAgICAgIGhpdF9pbm5lcl9leGNlcHQgPSBGYWxzZQorICAgICAgICBoaXRfaW5uZXJfZWxzZSA9IEZhbHNlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBoaXRfaW5uZXJfZXhjZXB0ID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBoaXRfaW5uZXJfZWxzZSA9IFRydWUKKworICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uLCAnb3V0ZXIgZXhjZXB0aW9uJworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBoaXRfZXhjZXB0ID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGl0X2Vsc2UgPSBUcnVlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBoaXRfZmluYWxseSA9IFRydWUKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhpdF9pbm5lcl9leGNlcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoaXRfaW5uZXJfZWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoaXRfZWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhpdF9maW5hbGx5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGl0X2V4Y2VwdCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChFeGNlcHRpb25UZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4NWNiYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKQEAgLTAsMCArMSw2NDYgQEAKKyMgUHl0aG9uIHRlc3Qgc2V0IC0tIHBhcnQgNSwgYnVpbHQtaW4gZXhjZXB0aW9ucworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHBpY2tsZSwgY1BpY2tsZQorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCB1bmxpbmssIHJ1bl91bml0dGVzdCwgY2FwdHVyZWRfb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3dhcm5pbmdzLCBjcHl0aG9uX29ubHkpCitmcm9tIHRlc3QudGVzdF9wZXAzNTIgaW1wb3J0IGlnbm9yZV9kZXByZWNhdGlvbl93YXJuaW5ncworCisjIFhYWCBUaGlzIGlzIG5vdCByZWFsbHkgZW5vdWdoLCBlYWNoICpvcGVyYXRpb24qIHNob3VsZCBiZSB0ZXN0ZWQhCisKK2NsYXNzIEV4Y2VwdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0UmVsb2FkKHNlbGYpOgorICAgICAgICAjIFJlbG9hZGluZyB0aGUgYnVpbHQtaW4gZXhjZXB0aW9ucyBtb2R1bGUgZmFpbGVkIHByaW9yIHRvIFB5Mi4yLCB3aGlsZSBpdAorICAgICAgICAjIHNob3VsZCBhY3QgdGhlIHNhbWUgYXMgcmVsb2FkaW5nIGJ1aWx0LWluIHN5cy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSBpbXAgaW1wb3J0IHJlbG9hZAorICAgICAgICAgICAgaW1wb3J0IGV4Y2VwdGlvbnMKKyAgICAgICAgICAgIHJlbG9hZChleGNlcHRpb25zKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmZhaWwoInJlbG9hZGluZyBleGNlcHRpb25zOiAlcyIgJSBlKQorCisgICAgZGVmIHJhaXNlX2NhdGNoKHNlbGYsIGV4YywgZXhjbmFtZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIGV4YywgInNwYW0iCisgICAgICAgIGV4Y2VwdCBleGMsIGVycjoKKyAgICAgICAgICAgIGJ1ZjEgPSBzdHIoZXJyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBleGMoInNwYW0iKQorICAgICAgICBleGNlcHQgZXhjLCBlcnI6CisgICAgICAgICAgICBidWYyID0gc3RyKGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYxLCBidWYyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Yy5fX25hbWVfXywgZXhjbmFtZSkKKworICAgIGRlZiB0ZXN0UmFpc2luZyhzZWxmKToKKyAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChBdHRyaWJ1dGVFcnJvciwgIkF0dHJpYnV0ZUVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIHN5cywgInVuZGVmaW5lZF9hdHRyaWJ1dGUiKQorCisgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goRU9GRXJyb3IsICJFT0ZFcnJvciIpCisgICAgICAgIGZwID0gb3BlbihURVNURk4sICd3JykKKyAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICBmcCA9IG9wZW4oVEVTVEZOLCAncicpCisgICAgICAgIHNhdmVzdGRpbiA9IHN5cy5zdGRpbgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZGluID0gZnAKKyAgICAgICAgICAgICAgICB4ID0gcmF3X2lucHV0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc3RkaW4gPSBzYXZlc3RkaW4KKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHVubGluayhURVNURk4pCisKKyAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChJT0Vycm9yLCAiSU9FcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG9wZW4sICd0aGlzIGZpbGUgZG9lcyBub3QgZXhpc3QnLCAncicpCisKKyAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChJbXBvcnRFcnJvciwgIkltcG9ydEVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIF9faW1wb3J0X18sICJ1bmRlZmluZWRfbW9kdWxlIikKKworICAgICAgICBzZWxmLnJhaXNlX2NhdGNoKEluZGV4RXJyb3IsICJJbmRleEVycm9yIikKKyAgICAgICAgeCA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHguX19nZXRpdGVtX18sIDEwKQorCisgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goS2V5RXJyb3IsICJLZXlFcnJvciIpCisgICAgICAgIHggPSB7fQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgeC5fX2dldGl0ZW1fXywgJ2tleScpCisKKyAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChLZXlib2FyZEludGVycnVwdCwgIktleWJvYXJkSW50ZXJydXB0IikKKworICAgICAgICBzZWxmLnJhaXNlX2NhdGNoKE1lbW9yeUVycm9yLCAiTWVtb3J5RXJyb3IiKQorCisgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goTmFtZUVycm9yLCAiTmFtZUVycm9yIikKKyAgICAgICAgdHJ5OiB4ID0gdW5kZWZpbmVkX3ZhcmlhYmxlCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6IHBhc3MKKworICAgICAgICBzZWxmLnJhaXNlX2NhdGNoKE92ZXJmbG93RXJyb3IsICJPdmVyZmxvd0Vycm9yIikKKyAgICAgICAgeCA9IDEKKyAgICAgICAgZm9yIGR1bW15IGluIHJhbmdlKDEyOCk6CisgICAgICAgICAgICB4ICs9IHggICMgdGhpcyBzaW1wbHkgc2hvdWxkbid0IGJsb3cgdXAKKworICAgICAgICBzZWxmLnJhaXNlX2NhdGNoKFJ1bnRpbWVFcnJvciwgIlJ1bnRpbWVFcnJvciIpCisKKyAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChTeW50YXhFcnJvciwgIlN5bnRheEVycm9yIikKKyAgICAgICAgdHJ5OiBleGVjICcvXG4nCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjogcGFzcworCisgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goSW5kZW50YXRpb25FcnJvciwgIkluZGVudGF0aW9uRXJyb3IiKQorCisgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goVGFiRXJyb3IsICJUYWJFcnJvciIpCisgICAgICAgICMgY2FuIG9ubHkgYmUgdGVzdGVkIHVuZGVyIC10dCwgYW5kIGlzIHRoZSBvbmx5IHRlc3QgZm9yIC10dAorICAgICAgICAjdHJ5OiBjb21waWxlKCJ0cnk6XG5cdDEvMFxuICAgIFx0MS8wXG5maW5hbGx5OlxuIHBhc3NcbiIsICc8c3RyaW5nPicsICdleGVjJykKKyAgICAgICAgI2V4Y2VwdCBUYWJFcnJvcjogcGFzcworICAgICAgICAjZWxzZTogc2VsZi5mYWlsKCJUYWJFcnJvciBub3QgcmFpc2VkIikKKworICAgICAgICBzZWxmLnJhaXNlX2NhdGNoKFN5c3RlbUVycm9yLCAiU3lzdGVtRXJyb3IiKQorCisgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goU3lzdGVtRXhpdCwgIlN5c3RlbUV4aXQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0LCBzeXMuZXhpdCwgMCkKKworICAgICAgICBzZWxmLnJhaXNlX2NhdGNoKFR5cGVFcnJvciwgIlR5cGVFcnJvciIpCisgICAgICAgIHRyeTogW10gKyAoKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOiBwYXNzCisKKyAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChWYWx1ZUVycm9yLCAiVmFsdWVFcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNociwgMTAwMDApCisKKyAgICAgICAgc2VsZi5yYWlzZV9jYXRjaChaZXJvRGl2aXNpb25FcnJvciwgIlplcm9EaXZpc2lvbkVycm9yIikKKyAgICAgICAgdHJ5OiB4ID0gMSAvLyAwCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjogcGFzcworCisgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goRXhjZXB0aW9uLCAiRXhjZXB0aW9uIikKKyAgICAgICAgdHJ5OiB4ID0gMSAvLyAwCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6IHBhc3MKKworICAgIGRlZiB0ZXN0U3ludGF4RXJyb3JNZXNzYWdlKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgcmlnaHQgZXhjZXB0aW9uIG1lc3NhZ2UgaXMgcmFpc2VkIGZvciBlYWNoIG9mCisgICAgICAgICMgdGhlc2UgY29kZSBmcmFnbWVudHMKKworICAgICAgICBkZWYgY2ttc2coc3JjLCBtc2cpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbXBpbGUoc3JjLCAnPGZyYWdtZW50PicsICdleGVjJykKKyAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgZToKKyAgICAgICAgICAgICAgICBpZiBlLm1zZyAhPSBtc2c6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgJXMsIGdvdCAlcyIgJSAobXNnLCBlLm1zZykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZmFpbGVkIHRvIGdldCBleHBlY3RlZCBTeW50YXhFcnJvciIpCisKKyAgICAgICAgcyA9ICcnJ3doaWxlIDE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBjb250aW51ZScnJworCisgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgorICAgICAgICAgICAgY2ttc2cocywgIidjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZSIpCisKKyAgICAgICAgcyA9ICcnJ2lmIDE6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MnJycKKworICAgICAgICBja21zZyhzLCAiJ2NvbnRpbnVlJyBub3QgcHJvcGVybHkgaW4gbG9vcCIpCisgICAgICAgIGNrbXNnKCJjb250aW51ZVxuIiwgIidjb250aW51ZScgbm90IHByb3Blcmx5IGluIGxvb3AiKQorCisgICAgQGNweXRob25fb25seQorICAgIGRlZiB0ZXN0U2V0dGluZ0V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRoYXQgc2V0dGluZyBhbiBleGNlcHRpb24gYXQgdGhlIEMgbGV2ZWwgd29ya3MgZXZlbiBpZiB0aGUKKyAgICAgICAgIyBleGNlcHRpb24gb2JqZWN0IGNhbid0IGJlIGNvbnN0cnVjdGVkLgorCisgICAgICAgIGNsYXNzIEJhZEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmXyk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiY2FuJ3QgaW5zdGFudGlhdGUgQmFkRXhjZXB0aW9uIgorCisgICAgICAgIGRlZiB0ZXN0X2NhcGkxKCk6CisgICAgICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX3Rlc3RjYXBpLnJhaXNlX2V4Y2VwdGlvbihCYWRFeGNlcHRpb24sIDEpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgZXhjLCBlcnIsIHRiID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICBjbyA9IHRiLnRiX2ZyYW1lLmZfY29kZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY28uY29fbmFtZSwgInRlc3RfY2FwaTEiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjby5jb19maWxlbmFtZS5lbmRzd2l0aCgndGVzdF9leGNlcHRpb25zJytvcy5leHRzZXArJ3B5JykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgZXhjZXB0aW9uIikKKworICAgICAgICBkZWYgdGVzdF9jYXBpMigpOgorICAgICAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF90ZXN0Y2FwaS5yYWlzZV9leGNlcHRpb24oQmFkRXhjZXB0aW9uLCAwKQorICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgIGV4YywgZXJyLCB0YiA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgY28gPSB0Yi50Yl9mcmFtZS5mX2NvZGUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvLmNvX25hbWUsICJfX2luaXRfXyIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvLmNvX2ZpbGVuYW1lLmVuZHN3aXRoKCd0ZXN0X2V4Y2VwdGlvbnMnK29zLmV4dHNlcCsncHknKSkKKyAgICAgICAgICAgICAgICBjbzIgPSB0Yi50Yl9mcmFtZS5mX2JhY2suZl9jb2RlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbzIuY29fbmFtZSwgInRlc3RfY2FwaTIiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdqYXZhJyk6CisgICAgICAgICAgICB0ZXN0X2NhcGkxKCkKKyAgICAgICAgICAgIHRlc3RfY2FwaTIoKQorCisgICAgZGVmIHRlc3RfV2luZG93c0Vycm9yKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBXaW5kb3dzRXJyb3IKKyAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFdpbmRvd3NFcnJvcigxMDAxKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTAwMSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihXaW5kb3dzRXJyb3IoMTAwMSwgIm1lc3NhZ2UiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiW0Vycm9yIDEwMDFdIG1lc3NhZ2UiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChXaW5kb3dzRXJyb3IoMTAwMSwgIm1lc3NhZ2UiKS5lcnJubywgMjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFdpbmRvd3NFcnJvcigxMDAxLCAibWVzc2FnZSIpLndpbmVycm9yLCAxMDAxKQorCisgICAgQGlnbm9yZV9kZXByZWNhdGlvbl93YXJuaW5ncworICAgIGRlZiB0ZXN0QXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRoYXQgZXhjZXB0aW9uIGF0dHJpYnV0ZXMgYXJlIGhhcHB5CisKKyAgICAgICAgZXhjZXB0aW9uTGlzdCA9IFsKKyAgICAgICAgICAgIChCYXNlRXhjZXB0aW9uLCAoKSwgeydtZXNzYWdlJyA6ICcnLCAnYXJncycgOiAoKX0pLAorICAgICAgICAgICAgKEJhc2VFeGNlcHRpb24sICgxLCApLCB7J21lc3NhZ2UnIDogMSwgJ2FyZ3MnIDogKDEsKX0pLAorICAgICAgICAgICAgKEJhc2VFeGNlcHRpb24sICgnZm9vJywpLAorICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnZm9vJywgJ2FyZ3MnIDogKCdmb28nLCl9KSwKKyAgICAgICAgICAgIChCYXNlRXhjZXB0aW9uLCAoJ2ZvbycsIDEpLAorICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnJywgJ2FyZ3MnIDogKCdmb28nLCAxKX0pLAorICAgICAgICAgICAgKFN5c3RlbUV4aXQsICgnZm9vJywpLAorICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnZm9vJywgJ2FyZ3MnIDogKCdmb28nLCksICdjb2RlJyA6ICdmb28nfSksCisgICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCksCisgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICdmb28nLCAnYXJncycgOiAoJ2ZvbycsKSwgJ2ZpbGVuYW1lJyA6IE5vbmUsCisgICAgICAgICAgICAgICAgICdlcnJubycgOiBOb25lLCAnc3RyZXJyb3InIDogTm9uZX0pLAorICAgICAgICAgICAgKElPRXJyb3IsICgnZm9vJywgJ2JhcicpLAorICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnJywgJ2FyZ3MnIDogKCdmb28nLCAnYmFyJyksICdmaWxlbmFtZScgOiBOb25lLAorICAgICAgICAgICAgICAgICAnZXJybm8nIDogJ2ZvbycsICdzdHJlcnJvcicgOiAnYmFyJ30pLAorICAgICAgICAgICAgKElPRXJyb3IsICgnZm9vJywgJ2JhcicsICdiYXonKSwKKyAgICAgICAgICAgICAgICB7J21lc3NhZ2UnIDogJycsICdhcmdzJyA6ICgnZm9vJywgJ2JhcicpLCAnZmlsZW5hbWUnIDogJ2JheicsCisgICAgICAgICAgICAgICAgICdlcnJubycgOiAnZm9vJywgJ3N0cmVycm9yJyA6ICdiYXInfSksCisgICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXV4JyksCisgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICcnLCAnYXJncycgOiAoJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1dXgnKX0pLAorICAgICAgICAgICAgKEVudmlyb25tZW50RXJyb3IsICgnZXJybm9TdHInLCAnc3RyRXJyb3JTdHInLCAnZmlsZW5hbWVTdHInKSwKKyAgICAgICAgICAgICAgICB7J21lc3NhZ2UnIDogJycsICdhcmdzJyA6ICgnZXJybm9TdHInLCAnc3RyRXJyb3JTdHInKSwKKyAgICAgICAgICAgICAgICAgJ3N0cmVycm9yJyA6ICdzdHJFcnJvclN0cicsICdlcnJubycgOiAnZXJybm9TdHInLAorICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnIDogJ2ZpbGVuYW1lU3RyJ30pLAorICAgICAgICAgICAgKEVudmlyb25tZW50RXJyb3IsICgxLCAnc3RyRXJyb3JTdHInLCAnZmlsZW5hbWVTdHInKSwKKyAgICAgICAgICAgICAgICB7J21lc3NhZ2UnIDogJycsICdhcmdzJyA6ICgxLCAnc3RyRXJyb3JTdHInKSwgJ2Vycm5vJyA6IDEsCisgICAgICAgICAgICAgICAgICdzdHJlcnJvcicgOiAnc3RyRXJyb3JTdHInLCAnZmlsZW5hbWUnIDogJ2ZpbGVuYW1lU3RyJ30pLAorICAgICAgICAgICAgKFN5bnRheEVycm9yLCAoKSwgeydtZXNzYWdlJyA6ICcnLCAnbXNnJyA6IE5vbmUsICd0ZXh0JyA6IE5vbmUsCisgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJyA6IE5vbmUsICdsaW5lbm8nIDogTm9uZSwgJ29mZnNldCcgOiBOb25lLAorICAgICAgICAgICAgICAgICdwcmludF9maWxlX2FuZF9saW5lJyA6IE5vbmV9KSwKKyAgICAgICAgICAgIChTeW50YXhFcnJvciwgKCdtc2dTdHInLCksCisgICAgICAgICAgICAgICAgeydtZXNzYWdlJyA6ICdtc2dTdHInLCAnYXJncycgOiAoJ21zZ1N0cicsKSwgJ3RleHQnIDogTm9uZSwKKyAgICAgICAgICAgICAgICAgJ3ByaW50X2ZpbGVfYW5kX2xpbmUnIDogTm9uZSwgJ21zZycgOiAnbXNnU3RyJywKKyAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJyA6IE5vbmUsICdsaW5lbm8nIDogTm9uZSwgJ29mZnNldCcgOiBOb25lfSksCisgICAgICAgICAgICAoU3ludGF4RXJyb3IsICgnbXNnU3RyJywgKCdmaWxlbmFtZVN0cicsICdsaW5lbm9TdHInLCAnb2Zmc2V0U3RyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0U3RyJykpLAorICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnJywgJ29mZnNldCcgOiAnb2Zmc2V0U3RyJywgJ3RleHQnIDogJ3RleHRTdHInLAorICAgICAgICAgICAgICAgICAnYXJncycgOiAoJ21zZ1N0cicsICgnZmlsZW5hbWVTdHInLCAnbGluZW5vU3RyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29mZnNldFN0cicsICd0ZXh0U3RyJykpLAorICAgICAgICAgICAgICAgICAncHJpbnRfZmlsZV9hbmRfbGluZScgOiBOb25lLCAnbXNnJyA6ICdtc2dTdHInLAorICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnIDogJ2ZpbGVuYW1lU3RyJywgJ2xpbmVubycgOiAnbGluZW5vU3RyJ30pLAorICAgICAgICAgICAgKFN5bnRheEVycm9yLCAoJ21zZ1N0cicsICdmaWxlbmFtZVN0cicsICdsaW5lbm9TdHInLCAnb2Zmc2V0U3RyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0U3RyJywgJ3ByaW50X2ZpbGVfYW5kX2xpbmVTdHInKSwKKyAgICAgICAgICAgICAgICB7J21lc3NhZ2UnIDogJycsICd0ZXh0JyA6IE5vbmUsCisgICAgICAgICAgICAgICAgICdhcmdzJyA6ICgnbXNnU3RyJywgJ2ZpbGVuYW1lU3RyJywgJ2xpbmVub1N0cicsICdvZmZzZXRTdHInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHRTdHInLCAncHJpbnRfZmlsZV9hbmRfbGluZVN0cicpLAorICAgICAgICAgICAgICAgICAncHJpbnRfZmlsZV9hbmRfbGluZScgOiBOb25lLCAnbXNnJyA6ICdtc2dTdHInLAorICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnIDogTm9uZSwgJ2xpbmVubycgOiBOb25lLCAnb2Zmc2V0JyA6IE5vbmV9KSwKKyAgICAgICAgICAgIChVbmljb2RlRXJyb3IsICgpLCB7J21lc3NhZ2UnIDogJycsICdhcmdzJyA6ICgpLH0pLAorICAgICAgICAgICAgKFVuaWNvZGVFbmNvZGVFcnJvciwgKCdhc2NpaScsIHUnYScsIDAsIDEsICdvcmRpbmFsIG5vdCBpbiByYW5nZScpLAorICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnJywgJ2FyZ3MnIDogKCdhc2NpaScsIHUnYScsIDAsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGluYWwgbm90IGluIHJhbmdlJyksCisgICAgICAgICAgICAgICAgICdlbmNvZGluZycgOiAnYXNjaWknLCAnb2JqZWN0JyA6IHUnYScsCisgICAgICAgICAgICAgICAgICdzdGFydCcgOiAwLCAncmVhc29uJyA6ICdvcmRpbmFsIG5vdCBpbiByYW5nZSd9KSwKKyAgICAgICAgICAgIChVbmljb2RlRGVjb2RlRXJyb3IsICgnYXNjaWknLCAnXHhmZicsIDAsIDEsICdvcmRpbmFsIG5vdCBpbiByYW5nZScpLAorICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnJywgJ2FyZ3MnIDogKCdhc2NpaScsICdceGZmJywgMCwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JkaW5hbCBub3QgaW4gcmFuZ2UnKSwKKyAgICAgICAgICAgICAgICAgJ2VuY29kaW5nJyA6ICdhc2NpaScsICdvYmplY3QnIDogJ1x4ZmYnLAorICAgICAgICAgICAgICAgICAnc3RhcnQnIDogMCwgJ3JlYXNvbicgOiAnb3JkaW5hbCBub3QgaW4gcmFuZ2UnfSksCisgICAgICAgICAgICAoVW5pY29kZVRyYW5zbGF0ZUVycm9yLCAodSJcdTMwNDIiLCAwLCAxLCAib3VjaCIpLAorICAgICAgICAgICAgICAgIHsnbWVzc2FnZScgOiAnJywgJ2FyZ3MnIDogKHUnXHUzMDQyJywgMCwgMSwgJ291Y2gnKSwKKyAgICAgICAgICAgICAgICAgJ29iamVjdCcgOiB1J1x1MzA0MicsICdyZWFzb24nIDogJ291Y2gnLAorICAgICAgICAgICAgICAgICAnc3RhcnQnIDogMCwgJ2VuZCcgOiAxfSksCisgICAgICAgIF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhjZXB0aW9uTGlzdC5hcHBlbmQoCisgICAgICAgICAgICAgICAgKFdpbmRvd3NFcnJvciwgKDEsICdzdHJFcnJvclN0cicsICdmaWxlbmFtZVN0cicpLAorICAgICAgICAgICAgICAgICAgICB7J21lc3NhZ2UnIDogJycsICdhcmdzJyA6ICgxLCAnc3RyRXJyb3JTdHInKSwKKyAgICAgICAgICAgICAgICAgICAgICdzdHJlcnJvcicgOiAnc3RyRXJyb3JTdHInLCAnd2luZXJyb3InIDogMSwKKyAgICAgICAgICAgICAgICAgICAgICdlcnJubycgOiAyMiwgJ2ZpbGVuYW1lJyA6ICdmaWxlbmFtZVN0cid9KQorICAgICAgICAgICAgKQorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGZvciBleGMsIGFyZ3MsIGV4cGVjdGVkIGluIGV4Y2VwdGlvbkxpc3Q6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgZXhjKCphcmdzKQorICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgaWYgdHlwZShlKSBpcyBub3QgZXhjOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICMgVmVyaWZ5IG1vZHVsZSBuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGUpLl9fbW9kdWxlX18sICdleGNlcHRpb25zJykKKyAgICAgICAgICAgICAgICAjIFZlcmlmeSBubyByZWYgbGVha3MgaW4gRXhjX3N0cigpCisgICAgICAgICAgICAgICAgcyA9IHN0cihlKQorICAgICAgICAgICAgICAgIGZvciBjaGVja0FyZ05hbWUgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihnZXRhdHRyKGUsIGNoZWNrQXJnTmFtZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZXhwZWN0ZWRbY2hlY2tBcmdOYW1lXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbiAiJXMiLCBhdHRyaWJ1dGUgIiVzIicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVwcihlKSwgY2hlY2tBcmdOYW1lKSkKKworICAgICAgICAgICAgICAgICMgdGVzdCBmb3IgcGlja2xpbmcgc3VwcG9ydAorICAgICAgICAgICAgICAgIGZvciBwIGluIHBpY2tsZSwgY1BpY2tsZToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHByb3RvY29sIGluIHJhbmdlKHAuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3ID0gcC5sb2FkcyhwLmR1bXBzKGUsIHByb3RvY29sKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjaGVja0FyZ05hbWUgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290ID0gcmVwcihnZXRhdHRyKG5ldywgY2hlY2tBcmdOYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50ID0gcmVwcihleHBlY3RlZFtjaGVja0FyZ05hbWVdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCB3YW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BpY2tsZWQgIiVyIiwgYXR0cmlidXRlICIlcyInICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLCBjaGVja0FyZ05hbWUpKQorCisKKyAgICBkZWYgdGVzdERlcHJlY2F0ZWRNZXNzYWdlQXR0cmlidXRlKHNlbGYpOgorICAgICAgICAjIEFjY2Vzc2luZyBCYXNlRXhjZXB0aW9uLm1lc3NhZ2UgYW5kIHJlbHlpbmcgb24gaXRzIHZhbHVlIHNldCBieQorICAgICAgICAjIEJhc2VFeGNlcHRpb24uX19pbml0X18gdHJpZ2dlcnMgYSBkZXByZWNhdGlvbiB3YXJuaW5nLgorICAgICAgICBleGMgPSBCYXNlRXhjZXB0aW9uKCJmb28iKQorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgiQmFzZUV4Y2VwdGlvbi5tZXNzYWdlIGhhcyBiZWVuIGRlcHJlY2F0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXMgb2YgUHl0aG9uIDIuNiIsIERlcHJlY2F0aW9uV2FybmluZykpIGFzIHc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Yy5tZXNzYWdlLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDEpCisKKyAgICBkZWYgdGVzdFJlZ3VsYXJNZXNzYWdlQXR0cmlidXRlKHNlbGYpOgorICAgICAgICAjIEFjY2Vzc2luZyBCYXNlRXhjZXB0aW9uLm1lc3NhZ2UgYWZ0ZXIgZXhwbGljaXRseSBzZXR0aW5nIGEgdmFsdWUKKyAgICAgICAgIyBmb3IgaXQgZG9lcyBub3QgdHJpZ2dlciBhIGRlcHJlY2F0aW9uIHdhcm5pbmcuCisgICAgICAgIGV4YyA9IEJhc2VFeGNlcHRpb24oImZvbyIpCisgICAgICAgIGV4Yy5tZXNzYWdlID0gImJhciIKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncyhxdWlldD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGMubWVzc2FnZSwgImJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAwKQorICAgICAgICAjIERlbGV0aW5nIHRoZSBtZXNzYWdlIGlzIHN1cHBvcnRlZCwgdG9vLgorICAgICAgICBkZWwgZXhjLm1lc3NhZ2UKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBleGMubWVzc2FnZQorCisgICAgQGlnbm9yZV9kZXByZWNhdGlvbl93YXJuaW5ncworICAgIGRlZiB0ZXN0UGlja2xlTWVzc2FnZUF0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgIyBQaWNrbGluZyB3aXRoIG1lc3NhZ2UgYXR0cmlidXRlIG11c3Qgd29yaywgYXMgd2VsbC4KKyAgICAgICAgZSA9IEV4Y2VwdGlvbigiZm9vIikKKyAgICAgICAgZiA9IEV4Y2VwdGlvbigiZm9vIikKKyAgICAgICAgZi5tZXNzYWdlID0gImJhciIKKyAgICAgICAgZm9yIHAgaW4gcGlja2xlLCBjUGlja2xlOgorICAgICAgICAgICAgZXAgPSBwLmxvYWRzKHAuZHVtcHMoZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVwLm1lc3NhZ2UsICJmb28iKQorICAgICAgICAgICAgZnAgPSBwLmxvYWRzKHAuZHVtcHMoZikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLm1lc3NhZ2UsICJiYXIiKQorCisgICAgQGlnbm9yZV9kZXByZWNhdGlvbl93YXJuaW5ncworICAgIGRlZiB0ZXN0U2xpY2luZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgeW91IGNhbiBzbGljZSBhbiBleGNlcHRpb24gZGlyZWN0bHkgaW5zdGVhZCBvZiByZXF1aXJpbmcKKyAgICAgICAgIyBnb2luZyB0aHJvdWdoIHRoZSAnYXJncycgYXR0cmlidXRlLgorICAgICAgICBhcmdzID0gKDEsIDIsIDMpCisgICAgICAgIGV4YyA9IEJhc2VFeGNlcHRpb24oKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjWzpdLCBhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Yy5hcmdzWzpdLCBhcmdzKQorCisgICAgZGVmIHRlc3RLZXl3b3JkQXJncyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRoYXQgYnVpbHRpbiBleGNlcHRpb24gZG9uJ3QgdGFrZSBrZXl3b3JkIGFyZ3MsCisgICAgICAgICMgYnV0IHVzZXItZGVmaW5lZCBzdWJjbGFzc2VzIGNhbiBpZiB0aGV5IHdhbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBCYXNlRXhjZXB0aW9uLCBhPTEpCisKKyAgICAgICAgY2xhc3MgRGVyaXZlZEV4Y2VwdGlvbihCYXNlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmYW5jeV9hcmcpOgorICAgICAgICAgICAgICAgIEJhc2VFeGNlcHRpb24uX19pbml0X18oc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLmZhbmN5X2FyZyA9IGZhbmN5X2FyZworCisgICAgICAgIHggPSBEZXJpdmVkRXhjZXB0aW9uKGZhbmN5X2FyZz00MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmZhbmN5X2FyZywgNDIpCisKKyAgICBkZWYgdGVzdEluZmluaXRlUmVjdXJzaW9uKHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcmV0dXJuIGYoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGYpCisKKyAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gZygpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gLTEKKworICAgICAgICAjIFRoZSB0ZXN0IHByaW50cyBhbiB1bnJhaXNhYmxlIHJlY3Vyc2lvbiBlcnJvciB3aGVuCisgICAgICAgICMgZG9pbmcgImV4Y2VwdCBWYWx1ZUVycm9yIiwgdGhpcyBpcyBiZWNhdXNlIHN1YmNsYXNzCisgICAgICAgICMgY2hlY2tpbmcgaGFzIHJlY3Vyc2lvbiBjaGVja2luZyB0b28uCisgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBnKCkKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIEtleUVycm9yIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgS2V5RXJyb3IiKQorCisgICAgZGVmIHRlc3RVbmljb2RlU3RyVXNhZ2Uoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGJvdGggaW5zdGFuY2VzIGFuZCBjbGFzc2VzIGhhdmUgYSBzdHIgYW5kIHVuaWNvZGUKKyAgICAgICAgIyByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihFeGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pY29kZShFeGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKEV4Y2VwdGlvbignYScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVuaWNvZGUoRXhjZXB0aW9uKHUnYScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVuaWNvZGUoRXhjZXB0aW9uKHUnXHhlMScpKSkKKworICAgIGRlZiB0ZXN0VW5pY29kZUNoYW5nZUF0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlIDczMDkuIFRoaXMgd2FzIGEgY3Jhc2hlci4KKworICAgICAgICB1ID0gVW5pY29kZUVuY29kZUVycm9yKCdiYXonLCB1J3h4eHh4JywgMSwgNSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHUpLCAiJ2JheicgY29kZWMgY2FuJ3QgZW5jb2RlIGNoYXJhY3RlcnMgaW4gcG9zaXRpb24gMS00OiBmb28iKQorICAgICAgICB1LmVuZCA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodSksICInYmF6JyBjb2RlYyBjYW4ndCBlbmNvZGUgY2hhcmFjdGVyIHUnXFx4NzgnIGluIHBvc2l0aW9uIDE6IGZvbyIpCisgICAgICAgIHUuZW5kID0gNQorICAgICAgICB1LnJlYXNvbiA9IDB4MzQ1MzQ1MzQ1MzQ1MzQ1MzQ1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHUpLCAiJ2JheicgY29kZWMgY2FuJ3QgZW5jb2RlIGNoYXJhY3RlcnMgaW4gcG9zaXRpb24gMS00OiA5NjUyMzA5NTE0NDM2ODU3MjQ5OTciKQorICAgICAgICB1LmVuY29kaW5nID0gNDAwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1KSwgIic0MDAwJyBjb2RlYyBjYW4ndCBlbmNvZGUgY2hhcmFjdGVycyBpbiBwb3NpdGlvbiAxLTQ6IDk2NTIzMDk1MTQ0MzY4NTcyNDk5NyIpCisgICAgICAgIHUuc3RhcnQgPSAxMDAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHUpLCAiJzQwMDAnIGNvZGVjIGNhbid0IGVuY29kZSBjaGFyYWN0ZXJzIGluIHBvc2l0aW9uIDEwMDAtNDogOTY1MjMwOTUxNDQzNjg1NzI0OTk3IikKKworICAgICAgICB1ID0gVW5pY29kZURlY29kZUVycm9yKCdiYXonLCAneHh4eHgnLCAxLCA1LCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodSksICInYmF6JyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZXMgaW4gcG9zaXRpb24gMS00OiBmb28iKQorICAgICAgICB1LmVuZCA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodSksICInYmF6JyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZSAweDc4IGluIHBvc2l0aW9uIDE6IGZvbyIpCisgICAgICAgIHUuZW5kID0gNQorICAgICAgICB1LnJlYXNvbiA9IDB4MzQ1MzQ1MzQ1MzQ1MzQ1MzQ1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHUpLCAiJ2JheicgY29kZWMgY2FuJ3QgZGVjb2RlIGJ5dGVzIGluIHBvc2l0aW9uIDEtNDogOTY1MjMwOTUxNDQzNjg1NzI0OTk3IikKKyAgICAgICAgdS5lbmNvZGluZyA9IDQwMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodSksICInNDAwMCcgY29kZWMgY2FuJ3QgZGVjb2RlIGJ5dGVzIGluIHBvc2l0aW9uIDEtNDogOTY1MjMwOTUxNDQzNjg1NzI0OTk3IikKKyAgICAgICAgdS5zdGFydCA9IDEwMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodSksICInNDAwMCcgY29kZWMgY2FuJ3QgZGVjb2RlIGJ5dGVzIGluIHBvc2l0aW9uIDEwMDAtNDogOTY1MjMwOTUxNDQzNjg1NzI0OTk3IikKKworICAgICAgICB1ID0gVW5pY29kZVRyYW5zbGF0ZUVycm9yKHUneHh4eCcsIDEsIDUsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1KSwgImNhbid0IHRyYW5zbGF0ZSBjaGFyYWN0ZXJzIGluIHBvc2l0aW9uIDEtNDogZm9vIikKKyAgICAgICAgdS5lbmQgPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHUpLCAiY2FuJ3QgdHJhbnNsYXRlIGNoYXJhY3RlciB1J1xceDc4JyBpbiBwb3NpdGlvbiAxOiBmb28iKQorICAgICAgICB1LmVuZCA9IDUKKyAgICAgICAgdS5yZWFzb24gPSAweDM0NTM0NTM0NTM0NTM0NTM0NQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1KSwgImNhbid0IHRyYW5zbGF0ZSBjaGFyYWN0ZXJzIGluIHBvc2l0aW9uIDEtNDogOTY1MjMwOTUxNDQzNjg1NzI0OTk3IikKKyAgICAgICAgdS5zdGFydCA9IDEwMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodSksICJjYW4ndCB0cmFuc2xhdGUgY2hhcmFjdGVycyBpbiBwb3NpdGlvbiAxMDAwLTQ6IDk2NTIzMDk1MTQ0MzY4NTcyNDk5NyIpCisKKyAgICBkZWYgdGVzdF9iYWRpc2luc3RhbmNlKHNlbGYpOgorICAgICAgICAjIEJ1ZyAjMjU0MjogaWYgaXNzdWJjbGFzcyhlLCBNeUV4Y2VwdGlvbikgcmFpc2VzIGFuIGV4Y2VwdGlvbiwKKyAgICAgICAgIyBpdCBzaG91bGQgYmUgaWdub3JlZAorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fc3ViY2xhc3NjaGVja19fKGNscywgc3ViY2xhc3MpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKQorCisgICAgICAgIGNsYXNzIE15RXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gTWV0YQorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBzdGRlcnI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoKQorICAgICAgICAgICAgZXhjZXB0IE15RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhjZXB0aW9uIHNob3VsZCBub3QgYmUgYSBNeUV4Y2VwdGlvbiIpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIEtleUVycm9yIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgS2V5RXJyb3IiKQorCisgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBzdGRlcnI6CisgICAgICAgICAgICBkZWYgZygpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGcoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgZSwgdiwgdGIgPSBnKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlIGlzIFJ1bnRpbWVFcnJvciwgZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIm1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkIiwgc3RyKHYpKQorCisgICAgZGVmIHRlc3RfbmV3X3JldHVybnNfaW52YWxpZF9pbnN0YW5jZShzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgIzExNjI3LgorICAgICAgICBjbGFzcyBNeUV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdCgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcmFpc2UgTXlFeGNlcHRpb24KKworICAgIGRlZiB0ZXN0X2Fzc2VydF93aXRoX3R1cGxlX2FyZyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAoMywpCisgICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICIoMywpIikKKworICAgIGRlZiB0ZXN0X2JhZF9leGNlcHRpb25fY2xlYXJpbmcoc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlIDE2NDQ1OiB1c2Ugb2YgUHlfWERFQ1JFRiBpbnN0ZWFkIG9mIFB5X0NMRUFSIGluCisgICAgICAgICMgQmFzZUV4Y2VwdGlvbl9zZXRfbWVzc2FnZSBnYXZlIGEgcG9zc2libGUgd2F5IHRvIHNlZ2ZhdWx0IHRoZQorICAgICAgICAjIGludGVycHJldGVyLgorICAgICAgICBjbGFzcyBOYXN0eShzdHIpOgorICAgICAgICAgICAgZGVmIF9fZGVsX18obWVzc2FnZSk6CisgICAgICAgICAgICAgICAgZGVsIGUubWVzc2FnZQorCisgICAgICAgIGUgPSBWYWx1ZUVycm9yKE5hc3R5KCJtc2ciKSkKKyAgICAgICAgZS5hcmdzID0gKCkKKyAgICAgICAgZGVsIGUubWVzc2FnZQorCisKKyMgSGVscGVyIGNsYXNzIHVzZWQgYnkgVGVzdFNhbWVTdHJBbmRVbmljb2RlTXNnCitjbGFzcyBFeGNXaXRoT3ZlcnJpZGRlblN0cihFeGNlcHRpb24pOgorICAgICIiIlN1YmNsYXNzIG9mIEV4Y2VwdGlvbiB0aGF0IGFjY2VwdHMgYSBrZXl3b3JkICdtc2cnIGFyZyB0aGF0IGlzCisgICAgcmV0dXJuZWQgYnkgX19zdHJfXy4gJ21zZycgd29uJ3QgYmUgaW5jbHVkZWQgaW4gc2VsZi5hcmdzIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYubXNnID0ga3dhcmdzLnBvcCgnbXNnJykgIyBtc2cgc2hvdWxkIGFsd2F5cyBiZSBwcmVzZW50CisgICAgICAgIHN1cGVyKEV4Y1dpdGhPdmVycmlkZGVuU3RyLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm1zZworCisKK2NsYXNzIFRlc3RTYW1lU3RyQW5kVW5pY29kZU1zZyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIidW5pY29kZShlcnIpIHNob3VsZCByZXR1cm4gdGhlIHNhbWUgbWVzc2FnZSBvZiBzdHIoZXJyKS4gU2VlICM2MTA4IiIiCisKKyAgICBkZWYgY2hlY2tfc2FtZV9tc2coc2VsZiwgZXhjLCBtc2cpOgorICAgICAgICAiIiJIZWxwZXIgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgc3RyKGV4YykgPT0gdW5pY29kZShleGMpID09IG1zZyIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihleGMpLCBtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGV4YyksIHVuaWNvZGUoZXhjKSkKKworICAgIGRlZiB0ZXN0X2J1aWx0aW5fZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgc2FtZSBtc2cgZm9yIGJ1aWx0LWluIGV4Y2VwdGlvbnMiIiIKKyAgICAgICAgIyBUaGVzZSBleGNlcHRpb25zIGltcGxlbWVudCBhIF9fc3RyX18gbWV0aG9kIHRoYXQgdXNlcyB0aGUgYXJncworICAgICAgICAjIHRvIGNyZWF0ZSBhIGJldHRlciBlcnJvciBtZXNzYWdlLiB1bmljb2RlKGUpIHNob3VsZCByZXR1cm4gdGhlIHNhbWUKKyAgICAgICAgIyBtZXNzYWdlLgorICAgICAgICBleGNlcHRpb25zID0gWworICAgICAgICAgICAgU3ludGF4RXJyb3IoJ2ludmFsaWQgc3ludGF4JywgKCc8c3RyaW5nPicsIDEsIDMsICcyKyozJykpLAorICAgICAgICAgICAgSU9FcnJvcigyLCAnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpLAorICAgICAgICAgICAgS2V5RXJyb3IoJ2JvdGggc2hvdWxkIGhhdmUgdGhlIHNhbWUgcXVvdGVzJyksCisgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IoJ2FzY2lpJywgJ1x4YzNceGEwJywgMCwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KScpLAorICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKCdhc2NpaScsIHUnXHUxMjM0JywgMCwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KScpCisgICAgICAgIF0KKyAgICAgICAgZm9yIGV4Y2VwdGlvbiBpbiBleGNlcHRpb25zOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXhjZXB0aW9uKSwgdW5pY29kZShleGNlcHRpb24pKQorCisgICAgZGVmIHRlc3RfMF9hcmdzKHNlbGYpOgorICAgICAgICAiIiJDaGVjayBzYW1lIG1zZyBmb3IgRXhjZXB0aW9uIHdpdGggMCBhcmdzIiIiCisgICAgICAgICMgc3RyKCkgYW5kIHVuaWNvZGUoKSBvbiBhbiBFeGNlcHRpb24gd2l0aCBubyBhcmdzIHNob3VsZCByZXR1cm4gYW4KKyAgICAgICAgIyBlbXB0eSBzdHJpbmcKKyAgICAgICAgc2VsZi5jaGVja19zYW1lX21zZyhFeGNlcHRpb24oKSwgJycpCisKKyAgICBkZWYgdGVzdF8wX2FyZ3Nfd2l0aF9vdmVycmlkZGVuX19fc3RyX18oc2VsZik6CisgICAgICAgICIiIkNoZWNrIHNhbWUgbXNnIGZvciBleGNlcHRpb25zIHdpdGggMCBhcmdzIGFuZCBvdmVycmlkZGVuIF9fc3RyX18iIiIKKyAgICAgICAgIyBzdHIoKSBhbmQgdW5pY29kZSgpIG9uIGFuIGV4Y2VwdGlvbiB3aXRoIG92ZXJyaWRkZW4gX19zdHJfXyB0aGF0CisgICAgICAgICMgcmV0dXJucyBhbiBhc2NpaS1vbmx5IHN0cmluZyBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHN0cmluZworICAgICAgICBmb3IgbXNnIGluICgnZm9vJywgdSdmb28nKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfc2FtZV9tc2coRXhjV2l0aE92ZXJyaWRkZW5TdHIobXNnPW1zZyksIG1zZykKKworICAgICAgICAjIGlmIF9fc3RyX18gcmV0dXJucyBhIG5vbi1hc2NpaSB1bmljb2RlIHN0cmluZyBzdHIoKSBzaG91bGQgZmFpbAorICAgICAgICAjIGJ1dCB1bmljb2RlKCkgc2hvdWxkIHJldHVybiB0aGUgdW5pY29kZSBzdHJpbmcKKyAgICAgICAgZSA9IEV4Y1dpdGhPdmVycmlkZGVuU3RyKG1zZz11J2ZceGY2XHhmNicpICMgbm8gYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsIHN0ciwgZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKGUpLCB1J2ZceGY2XHhmNicpCisKKyAgICBkZWYgdGVzdF8xX2FyZyhzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgc2FtZSBtc2cgZm9yIEV4Y2VwdGlvbnMgd2l0aCAxIGFyZyIiIgorICAgICAgICBmb3IgYXJnIGluICgnZm9vJywgdSdmb28nKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfc2FtZV9tc2coRXhjZXB0aW9uKGFyZyksIGFyZykKKworICAgICAgICAjIGlmIF9fc3RyX18gaXMgbm90IG92ZXJyaWRkZW4gYW5kIHNlbGYuYXJnc1swXSBpcyBhIG5vbi1hc2NpaSB1bmljb2RlCisgICAgICAgICMgc3RyaW5nLCBzdHIoKSBzaG91bGQgdHJ5IHRvIHJldHVybiBzdHIoc2VsZi5hcmdzWzBdKSBhbmQgZmFpbC4KKyAgICAgICAgIyB1bmljb2RlKCkgc2hvdWxkIHJldHVybiB1bmljb2RlKHNlbGYuYXJnc1swXSkgYW5kIHN1Y2NlZWQuCisgICAgICAgIGUgPSBFeGNlcHRpb24odSdmXHhmNlx4ZjYnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsIHN0ciwgZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKGUpLCB1J2ZceGY2XHhmNicpCisKKyAgICBkZWYgdGVzdF8xX2FyZ193aXRoX292ZXJyaWRkZW5fX19zdHJfXyhzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgc2FtZSBtc2cgZm9yIGV4Y2VwdGlvbnMgd2l0aCBvdmVycmlkZGVuIF9fc3RyX18gYW5kIDEgYXJnIiIiCisgICAgICAgICMgd2hlbiBfX3N0cl9fIGlzIG92ZXJyaWRkZW4gYW5kIF9fdW5pY29kZV9fIGlzIG5vdCBpbXBsZW1lbnRlZAorICAgICAgICAjIHVuaWNvZGUoZSkgcmV0dXJucyB0aGUgc2FtZSBhcyB1bmljb2RlKGUuX19zdHJfXygpKS4KKyAgICAgICAgZm9yIG1zZyBpbiAoJ2ZvbycsIHUnZm9vJyk6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3NhbWVfbXNnKEV4Y1dpdGhPdmVycmlkZGVuU3RyKCdhcmcnLCBtc2c9bXNnKSwgbXNnKQorCisgICAgICAgICMgaWYgX19zdHJfXyByZXR1cm5zIGEgbm9uLWFzY2lpIHVuaWNvZGUgc3RyaW5nLCBzdHIoKSBzaG91bGQgZmFpbAorICAgICAgICAjIGJ1dCB1bmljb2RlKCkgc2hvdWxkIHN1Y2NlZWQuCisgICAgICAgIGUgPSBFeGNXaXRoT3ZlcnJpZGRlblN0cignYXJnJywgbXNnPXUnZlx4ZjZceGY2JykgIyAxIGFyZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsIHN0ciwgZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKGUpLCB1J2ZceGY2XHhmNicpCisKKyAgICBkZWYgdGVzdF9tYW55X2FyZ3Moc2VsZik6CisgICAgICAgICIiIkNoZWNrIHNhbWUgbXNnIGZvciBFeGNlcHRpb25zIHdpdGggbWFueSBhcmdzIiIiCisgICAgICAgIGFyZ3NsaXN0ID0gWworICAgICAgICAgICAgKDMsICdmb28nKSwKKyAgICAgICAgICAgICgxLCB1J2ZvbycsICdiYXInKSwKKyAgICAgICAgICAgICg0LCB1J2ZceGY2XHhmNicsIHUnYmFyJywgJ2JheicpCisgICAgICAgIF0KKyAgICAgICAgIyBib3RoIHN0cigpIGFuZCB1bmljb2RlKCkgc2hvdWxkIHJldHVybiBhIHJlcHIoKSBvZiB0aGUgYXJncworICAgICAgICBmb3IgYXJncyBpbiBhcmdzbGlzdDoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfc2FtZV9tc2coRXhjZXB0aW9uKCphcmdzKSwgcmVwcihhcmdzKSkKKworICAgIGRlZiB0ZXN0X21hbnlfYXJnc193aXRoX292ZXJyaWRkZW5fX19zdHJfXyhzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgc2FtZSBtc2cgZm9yIGV4Y2VwdGlvbnMgd2l0aCBvdmVycmlkZGVuIF9fc3RyX18gYW5kIG1hbnkgYXJncyIiIgorICAgICAgICAjIGlmIF9fc3RyX18gcmV0dXJucyBhbiBhc2NpaSBzdHJpbmcgLyBhc2NpaSB1bmljb2RlIHN0cmluZworICAgICAgICAjIGJvdGggc3RyKCkgYW5kIHVuaWNvZGUoKSBzaG91bGQgc3VjY2VlZAorICAgICAgICBmb3IgbXNnIGluICgnZm9vJywgdSdmb28nKToKKyAgICAgICAgICAgIGUgPSBFeGNXaXRoT3ZlcnJpZGRlblN0cignYXJnMScsIHUnYXJnMicsIHUnZlx4ZjZceGY2JywgbXNnPW1zZykKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfc2FtZV9tc2coZSwgbXNnKQorCisgICAgICAgICMgaWYgX19zdHJfXyByZXR1cm5zIGEgbm9uLWFzY2lpIHVuaWNvZGUgc3RyaW5nLCBzdHIoKSBzaG91bGQgZmFpbAorICAgICAgICAjIGJ1dCB1bmljb2RlKCkgc2hvdWxkIHN1Y2NlZWQKKyAgICAgICAgZSA9IEV4Y1dpdGhPdmVycmlkZGVuU3RyKCdhcmcxJywgdSdmXHhmNlx4ZjYnLCB1J2FyZzMnLCAjIDMgYXJncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPXUnZlx4ZjZceGY2JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBzdHIsIGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShlKSwgdSdmXHhmNlx4ZjYnKQorCisgICAgQGNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbl93aXRoX2RvYyhzZWxmKToKKyAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICBkb2MyID0gIlRoaXMgaXMgYSB0ZXN0IGRvY3N0cmluZy4iCisgICAgICAgIGRvYzQgPSAiVGhpcyBpcyBhbm90aGVyIHRlc3QgZG9jc3RyaW5nLiIKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FcnJvciwgX3Rlc3RjYXBpLm1ha2VfZXhjZXB0aW9uX3dpdGhfZG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IxIikKKworICAgICAgICAjIHRlc3QgYmFzaWMgdXNhZ2Ugb2YgUHlFcnJfTmV3RXhjZXB0aW9uCisgICAgICAgIGVycm9yMSA9IF90ZXN0Y2FwaS5tYWtlX2V4Y2VwdGlvbl93aXRoX2RvYygiX3Rlc3RjYXBpLmVycm9yMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlcnJvcjEpLCB0eXBlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhlcnJvcjEsIEV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGVycm9yMS5fX2RvY19fKQorCisgICAgICAgICMgdGVzdCB3aXRoIGdpdmVuIGRvY3N0cmluZworICAgICAgICBlcnJvcjIgPSBfdGVzdGNhcGkubWFrZV9leGNlcHRpb25fd2l0aF9kb2MoIl90ZXN0Y2FwaS5lcnJvcjIiLCBkb2MyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycm9yMi5fX2RvY19fLCBkb2MyKQorCisgICAgICAgICMgdGVzdCB3aXRoIGV4cGxpY2l0IGJhc2UgKHdpdGhvdXQgZG9jc3RyaW5nKQorICAgICAgICBlcnJvcjMgPSBfdGVzdGNhcGkubWFrZV9leGNlcHRpb25fd2l0aF9kb2MoIl90ZXN0Y2FwaS5lcnJvcjMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZT1lcnJvcjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGVycm9yMywgZXJyb3IyKSkKKworICAgICAgICAjIHRlc3Qgd2l0aCBleHBsaWNpdCBiYXNlIHR1cGxlCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXJyb3I0ID0gX3Rlc3RjYXBpLm1ha2VfZXhjZXB0aW9uX3dpdGhfZG9jKCJfdGVzdGNhcGkuZXJyb3I0IiwgZG9jNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcjMsIEMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhlcnJvcjQsIGVycm9yMykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGVycm9yNCwgQykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3I0Ll9fZG9jX18sIGRvYzQpCisKKyAgICAgICAgIyB0ZXN0IHdpdGggZXhwbGljaXQgZGljdGlvbmFyeQorICAgICAgICBlcnJvcjUgPSBfdGVzdGNhcGkubWFrZV9leGNlcHRpb25fd2l0aF9kb2MoIl90ZXN0Y2FwaS5lcnJvcjUiLCAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yNCwgeydhJzogMX0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGVycm9yNSwgZXJyb3I0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvcjUuYSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvcjUuX19kb2NfXywgIiIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChFeGNlcHRpb25UZXN0cywgVGVzdFNhbWVTdHJBbmRVbmljb2RlTXNnKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9leHRjYWxsLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZXh0Y2FsbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGUwOWEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZXh0Y2FsbC5weQpAQCAtMCwwICsxLDMxOSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKworIiIiRG9jdGVzdCBmb3IgbWV0aG9kL2Z1bmN0aW9uIGNhbGxzLgorCitXZSdyZSBnb2luZyB0aGUgdXNlIHRoZXNlIHR5cGVzIGZvciBleHRyYSB0ZXN0aW5nCisKKyAgICA+Pj4gZnJvbSBVc2VyTGlzdCBpbXBvcnQgVXNlckxpc3QKKyAgICA+Pj4gZnJvbSBVc2VyRGljdCBpbXBvcnQgVXNlckRpY3QKKworV2UncmUgZGVmaW5pbmcgZm91ciBoZWxwZXIgZnVuY3Rpb25zCisKKyAgICA+Pj4gZGVmIGUoYSxiKToKKyAgICAuLi4gICAgIHByaW50IGEsIGIKKworICAgID4+PiBkZWYgZigqYSwgKiprKToKKyAgICAuLi4gICAgIHByaW50IGEsIHRlc3Rfc3VwcG9ydC5zb3J0ZGljdChrKQorCisgICAgPj4+IGRlZiBnKHgsICp5LCAqKnopOgorICAgIC4uLiAgICAgcHJpbnQgeCwgeSwgdGVzdF9zdXBwb3J0LnNvcnRkaWN0KHopCisKKyAgICA+Pj4gZGVmIGgoaj0xLCBhPTIsIGg9Myk6CisgICAgLi4uICAgICBwcmludCBqLCBhLCBoCisKK0FyZ3VtZW50IGxpc3QgZXhhbXBsZXMKKworICAgID4+PiBmKCkKKyAgICAoKSB7fQorICAgID4+PiBmKDEpCisgICAgKDEsKSB7fQorICAgID4+PiBmKDEsIDIpCisgICAgKDEsIDIpIHt9CisgICAgPj4+IGYoMSwgMiwgMykKKyAgICAoMSwgMiwgMykge30KKyAgICA+Pj4gZigxLCAyLCAzLCAqKDQsIDUpKQorICAgICgxLCAyLCAzLCA0LCA1KSB7fQorICAgID4+PiBmKDEsIDIsIDMsICpbNCwgNV0pCisgICAgKDEsIDIsIDMsIDQsIDUpIHt9CisgICAgPj4+IGYoMSwgMiwgMywgKlVzZXJMaXN0KFs0LCA1XSkpCisgICAgKDEsIDIsIDMsIDQsIDUpIHt9CisKK0hlcmUgd2UgYWRkIGtleXdvcmQgYXJndW1lbnRzCisKKyAgICA+Pj4gZigxLCAyLCAzLCAqKnsnYSc6NCwgJ2InOjV9KQorICAgICgxLCAyLCAzKSB7J2EnOiA0LCAnYic6IDV9CisgICAgPj4+IGYoMSwgMiwgMywgKls0LCA1XSwgKip7J2EnOjYsICdiJzo3fSkKKyAgICAoMSwgMiwgMywgNCwgNSkgeydhJzogNiwgJ2InOiA3fQorICAgID4+PiBmKDEsIDIsIDMsIHg9NCwgeT01LCAqKDYsIDcpLCAqKnsnYSc6OCwgJ2InOiA5fSkKKyAgICAoMSwgMiwgMywgNiwgNykgeydhJzogOCwgJ2InOiA5LCAneCc6IDQsICd5JzogNX0KKworICAgID4+PiBmKDEsIDIsIDMsICoqVXNlckRpY3QoYT00LCBiPTUpKQorICAgICgxLCAyLCAzKSB7J2EnOiA0LCAnYic6IDV9CisgICAgPj4+IGYoMSwgMiwgMywgKig0LCA1KSwgKipVc2VyRGljdChhPTYsIGI9NykpCisgICAgKDEsIDIsIDMsIDQsIDUpIHsnYSc6IDYsICdiJzogN30KKyAgICA+Pj4gZigxLCAyLCAzLCB4PTQsIHk9NSwgKig2LCA3KSwgKipVc2VyRGljdChhPTgsIGI9OSkpCisgICAgKDEsIDIsIDMsIDYsIDcpIHsnYSc6IDgsICdiJzogOSwgJ3gnOiA0LCAneSc6IDV9CisKK0V4YW1wbGVzIHdpdGggaW52YWxpZCBhcmd1bWVudHMgKFR5cGVFcnJvcnMpLiBXZSdyZSBhbHNvIHRlc3RpbmcgdGhlIGZ1bmN0aW9uCituYW1lcyBpbiB0aGUgZXhjZXB0aW9uIG1lc3NhZ2VzLgorCitWZXJpZnkgY2xlYXJpbmcgb2YgU0YgYnVnICM3MzM2NjcKKworICAgID4+PiBlKGM9NCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGUoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50ICdjJworCisgICAgPj4+IGcoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZygpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pCisKKyAgICA+Pj4gZygqKCkpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBnKCkgdGFrZXMgYXQgbGVhc3QgMSBhcmd1bWVudCAoMCBnaXZlbikKKworICAgID4+PiBnKCooKSwgKip7fSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGcoKSB0YWtlcyBhdCBsZWFzdCAxIGFyZ3VtZW50ICgwIGdpdmVuKQorCisgICAgPj4+IGcoMSkKKyAgICAxICgpIHt9CisgICAgPj4+IGcoMSwgMikKKyAgICAxICgyLCkge30KKyAgICA+Pj4gZygxLCAyLCAzKQorICAgIDEgKDIsIDMpIHt9CisgICAgPj4+IGcoMSwgMiwgMywgKig0LCA1KSkKKyAgICAxICgyLCAzLCA0LCA1KSB7fQorCisgICAgPj4+IGNsYXNzIE5vdGhpbmc6IHBhc3MKKyAgICAuLi4KKyAgICA+Pj4gZygqTm90aGluZygpKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZygpIGFyZ3VtZW50IGFmdGVyICogbXVzdCBiZSBhIHNlcXVlbmNlLCBub3QgaW5zdGFuY2UKKworICAgID4+PiBjbGFzcyBOb3RoaW5nOgorICAgIC4uLiAgICAgZGVmIF9fbGVuX18oc2VsZik6IHJldHVybiA1CisgICAgLi4uCisKKyAgICA+Pj4gZygqTm90aGluZygpKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZygpIGFyZ3VtZW50IGFmdGVyICogbXVzdCBiZSBhIHNlcXVlbmNlLCBub3QgaW5zdGFuY2UKKworICAgID4+PiBjbGFzcyBOb3RoaW5nKCk6CisgICAgLi4uICAgICBkZWYgX19sZW5fXyhzZWxmKTogcmV0dXJuIDUKKyAgICAuLi4gICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAuLi4gICAgICAgICBpZiBpPDM6IHJldHVybiBpCisgICAgLi4uICAgICAgICAgZWxzZTogcmFpc2UgSW5kZXhFcnJvcihpKQorICAgIC4uLgorCisgICAgPj4+IGcoKk5vdGhpbmcoKSkKKyAgICAwICgxLCAyKSB7fQorCisgICAgPj4+IGNsYXNzIE5vdGhpbmc6CisgICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZik6IHNlbGYuYyA9IDAKKyAgICAuLi4gICAgIGRlZiBfX2l0ZXJfXyhzZWxmKTogcmV0dXJuIHNlbGYKKyAgICAuLi4gICAgIGRlZiBuZXh0KHNlbGYpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuYyA9PSA0OgorICAgIC4uLiAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgLi4uICAgICAgICAgYyA9IHNlbGYuYworICAgIC4uLiAgICAgICAgIHNlbGYuYyArPSAxCisgICAgLi4uICAgICAgICAgcmV0dXJuIGMKKyAgICAuLi4KKworICAgID4+PiBnKCpOb3RoaW5nKCkpCisgICAgMCAoMSwgMiwgMykge30KKworTWFrZSBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uIGRvZXNuJ3Qgc3RvbXAgdGhlIGRpY3Rpb25hcnkKKworICAgID4+PiBkID0geydhJzogMSwgJ2InOiAyLCAnYyc6IDN9CisgICAgPj4+IGQyID0gZC5jb3B5KCkKKyAgICA+Pj4gZygxLCBkPTQsICoqZCkKKyAgICAxICgpIHsnYSc6IDEsICdiJzogMiwgJ2MnOiAzLCAnZCc6IDR9CisgICAgPj4+IGQgPT0gZDIKKyAgICBUcnVlCisKK1doYXQgYWJvdXQgd2lsbGZ1bCBtaXNjb25kdWN0PworCisgICAgPj4+IGRlZiBzYWJvdGV1cigqKmt3KToKKyAgICAuLi4gICAgIGt3Wyd4J10gPSAnbScKKyAgICAuLi4gICAgIHJldHVybiBrdworCisgICAgPj4+IGQgPSB7fQorICAgID4+PiBrdyA9IHNhYm90ZXVyKGE9MSwgKipkKQorICAgID4+PiBkCisgICAge30KKworCisgICAgPj4+IGcoMSwgMiwgMywgKip7J3gnOiA0LCAneSc6IDV9KQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZygpIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgJ3gnCisKKyAgICA+Pj4gZigqKnsxOjJ9KQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZigpIGtleXdvcmRzIG11c3QgYmUgc3RyaW5ncworCisgICAgPj4+IGgoKip7J2UnOiAyfSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGgoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50ICdlJworCisgICAgPj4+IGgoKmgpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBoKCkgYXJndW1lbnQgYWZ0ZXIgKiBtdXN0IGJlIGEgc2VxdWVuY2UsIG5vdCBmdW5jdGlvbgorCisgICAgPj4+IGRpcigqaCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGRpcigpIGFyZ3VtZW50IGFmdGVyICogbXVzdCBiZSBhIHNlcXVlbmNlLCBub3QgZnVuY3Rpb24KKworICAgID4+PiBOb25lKCpoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogTm9uZVR5cGUgb2JqZWN0IGFyZ3VtZW50IGFmdGVyICogbXVzdCBiZSBhIHNlcXVlbmNlLCBcCitub3QgZnVuY3Rpb24KKworICAgID4+PiBoKCoqaCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGgoKSBhcmd1bWVudCBhZnRlciAqKiBtdXN0IGJlIGEgbWFwcGluZywgbm90IGZ1bmN0aW9uCisKKyAgICA+Pj4gZGlyKCoqaCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGRpcigpIGFyZ3VtZW50IGFmdGVyICoqIG11c3QgYmUgYSBtYXBwaW5nLCBub3QgZnVuY3Rpb24KKworICAgID4+PiBOb25lKCoqaCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IE5vbmVUeXBlIG9iamVjdCBhcmd1bWVudCBhZnRlciAqKiBtdXN0IGJlIGEgbWFwcGluZywgXAorbm90IGZ1bmN0aW9uCisKKyAgICA+Pj4gZGlyKGI9MSwgKip7J2InOiAxfSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGRpcigpIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgJ2InCisKK0Fub3RoZXIgaGVscGVyIGZ1bmN0aW9uCisKKyAgICA+Pj4gZGVmIGYyKCphLCAqKmIpOgorICAgIC4uLiAgICAgcmV0dXJuIGEsIGIKKworCisgICAgPj4+IGQgPSB7fQorICAgID4+PiBmb3IgaSBpbiB4cmFuZ2UoNTEyKToKKyAgICAuLi4gICAgIGtleSA9ICdrJWQnICUgaQorICAgIC4uLiAgICAgZFtrZXldID0gaQorICAgID4+PiBhLCBiID0gZjIoMSwgKigyLDMpLCAqKmQpCisgICAgPj4+IGxlbihhKSwgbGVuKGIpLCBiID09IGQKKyAgICAoMywgNTEyLCBUcnVlKQorCisgICAgPj4+IGNsYXNzIEZvbzoKKyAgICAuLi4gICAgIGRlZiBtZXRob2Qoc2VsZiwgYXJnMSwgYXJnMik6CisgICAgLi4uICAgICAgICAgcmV0dXJuIGFyZzErYXJnMgorCisgICAgPj4+IHggPSBGb28oKQorICAgID4+PiBGb28ubWV0aG9kKCooeCwgMSwgMikpCisgICAgMworICAgID4+PiBGb28ubWV0aG9kKHgsICooMSwgMikpCisgICAgMworICAgID4+PiBGb28ubWV0aG9kKCooMSwgMiwgMykpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiB1bmJvdW5kIG1ldGhvZCBtZXRob2QoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIEZvbyBpbnN0YW5jZSBhcyBcCitmaXJzdCBhcmd1bWVudCAoZ290IGludCBpbnN0YW5jZSBpbnN0ZWFkKQorCisgICAgPj4+IEZvby5tZXRob2QoMSwgKlsyLCAzXSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IHVuYm91bmQgbWV0aG9kIG1ldGhvZCgpIG11c3QgYmUgY2FsbGVkIHdpdGggRm9vIGluc3RhbmNlIGFzIFwKK2ZpcnN0IGFyZ3VtZW50IChnb3QgaW50IGluc3RhbmNlIGluc3RlYWQpCisKK0EgUHlDRnVuY3Rpb24gdGhhdCB0YWtlcyBvbmx5IHBvc2l0aW9uYWwgcGFyYW1ldGVycyBzaG91bGQgYWxsb3cgYW4KK2VtcHR5IGtleXdvcmQgZGljdGlvbmFyeSB0byBwYXNzIHdpdGhvdXQgYSBjb21wbGFpbnQsIGJ1dCByYWlzZSBhCitUeXBlRXJyb3IgaWYgdGUgZGljdGlvbmFyeSBpcyBub3QgZW1wdHkKKworICAgID4+PiB0cnk6CisgICAgLi4uICAgICBzaWxlbmNlID0gaWQoMSwgKnt9KQorICAgIC4uLiAgICAgVHJ1ZQorICAgIC4uLiBleGNlcHQ6CisgICAgLi4uICAgICBGYWxzZQorICAgIFRydWUKKworICAgID4+PiBpZCgxLCAqKnsnZm9vJzogMX0pCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBpZCgpIHRha2VzIG5vIGtleXdvcmQgYXJndW1lbnRzCisKK0EgY29ybmVyIGNhc2Ugb2Yga2V5d29yZCBkaWN0aW9uYXJ5IGl0ZW1zIGJlaW5nIGRlbGV0ZWQgZHVyaW5nCit0aGUgZnVuY3Rpb24gY2FsbCBzZXR1cC4gU2VlIDxodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjAxNj4uCisKKyAgICA+Pj4gY2xhc3MgTmFtZShzdHIpOgorICAgIC4uLiAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgLi4uICAgICAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgICAgICAgZGVsIHhbc2VsZl0KKyAgICAuLi4gICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgLi4uICAgICAgICAgICAgICBwYXNzCisgICAgLi4uICAgICAgICAgcmV0dXJuIHN0ci5fX2VxX18oc2VsZiwgb3RoZXIpCisgICAgLi4uICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgLi4uICAgICAgICAgcmV0dXJuIHN0ci5fX2hhc2hfXyhzZWxmKQorCisgICAgPj4+IHggPSB7TmFtZSgiYSIpOjEsIE5hbWUoImIiKToyfQorICAgID4+PiBkZWYgZihhLCBiKToKKyAgICAuLi4gICAgIHByaW50IGEsYgorICAgID4+PiBmKCoqeCkKKyAgICAxIDIKKworQSBvYnNjdXJlIG1lc3NhZ2U6CisKKyAgICA+Pj4gZGVmIGYoYSwgYik6CisgICAgLi4uICAgIHBhc3MKKyAgICA+Pj4gZihiPTEpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBmKCkgdGFrZXMgZXhhY3RseSAyIGFyZ3VtZW50cyAoMSBnaXZlbikKKworVGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIGluIGluY2x1ZGVzIGtleXdvcmRzOgorCisgICAgPj4+IGRlZiBmKGEpOgorICAgIC4uLiAgICBwYXNzCisgICAgPj4+IGYoNiwgYT00LCAqKDEsIDIsIDMpKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZigpIHRha2VzIGV4YWN0bHkgMSBhcmd1bWVudCAoNSBnaXZlbikKKyIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKworY2xhc3MgRXh0Q2FsbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdW5pY29kZV9rZXl3b3JkcyhzZWxmKToKKyAgICAgICAgZGVmIGYoYSk6CisgICAgICAgICAgICByZXR1cm4gYQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKip7dSdhJzogNH0pLCA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsICoqe3Unc3TDtnJlbic6IDR9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsICoqe3Unc29tZUxvbmdTdHJpbmcnOjJ9KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmKGE9NCwgKip7dSdhJzogNH0pCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImR1cGxpY2F0ZSBhcmd1bWVudHMgZGlkbid0IHJhaXNlIikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHN5cy5tb2R1bGVzW19fbmFtZV9fXSwgVHJ1ZSkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEV4dENhbGxUZXN0KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9mY250bC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ZjbnRsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMzVmNjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9mY250bC5weQpAQCAtMCwwICsxLDEyNSBAQAorIiIiVGVzdCBwcm9ncmFtIGZvciB0aGUgZmNudGwgQyBtb2R1bGUuCisKK09TLzIrRU1YIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZmlsZSBsb2NraW5nIG9wZXJhdGlvbnMuCisKKyIiIgoraW1wb3J0IG9zCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCitpbXBvcnQgX3Rlc3RjYXBpCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0ICh2ZXJib3NlLCBURVNURk4sIHVubGluaywgcnVuX3VuaXR0ZXN0LAorICAgIGltcG9ydF9tb2R1bGUpCisKKyMgU2tpcCB0ZXN0IGlmIG5vIGZuY3RsIG1vZHVsZS4KK2ZjbnRsID0gaW1wb3J0X21vZHVsZSgnZmNudGwnKQorCisKKyMgVE9ETyAtIFdyaXRlIHRlc3RzIGZvciBmbG9jaygpIGFuZCBsb2NrZigpLgorCitkZWYgZ2V0X2xvY2tkYXRhKCk6CisgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2F0aGVvcycpOgorICAgICAgICBzdGFydF9sZW4gPSAicXEiCisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuT19MQVJHRUZJTEUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc3RhcnRfbGVuID0gImxsIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhcnRfbGVuID0gInFxIgorCisgICAgaWYgKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCgnbmV0YnNkJywgJ2ZyZWVic2QnLCAnb3BlbmJzZCcsICdic2RvcycpKQorICAgICAgICBvciBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicpOgorICAgICAgICBpZiBzdHJ1Y3QuY2FsY3NpemUoJ2wnKSA9PSA4OgorICAgICAgICAgICAgb2ZmX3QgPSAnbCcKKyAgICAgICAgICAgIHBpZF90ID0gJ2knCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvZmZfdCA9ICdseHh4eCcKKyAgICAgICAgICAgIHBpZF90ID0gJ2wnCisgICAgICAgIGxvY2tkYXRhID0gc3RydWN0LnBhY2sob2ZmX3QgKyBvZmZfdCArIHBpZF90ICsgJ2hoJywgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY250bC5GX1dSTENLLCAwKQorICAgIGVsaWYgc3lzLnBsYXRmb3JtIGluIFsnYWl4MycsICdhaXg0JywgJ2hwLXV4QicsICd1bml4d2FyZTcnXToKKyAgICAgICAgbG9ja2RhdGEgPSBzdHJ1Y3QucGFjaygnaGhsbGxpaScsIGZjbnRsLkZfV1JMQ0ssIDAsIDAsIDAsIDAsIDAsIDApCisgICAgZWxpZiBzeXMucGxhdGZvcm0gaW4gWydvczJlbXgnXToKKyAgICAgICAgbG9ja2RhdGEgPSBOb25lCisgICAgZWxzZToKKyAgICAgICAgbG9ja2RhdGEgPSBzdHJ1Y3QucGFjaygnaGgnK3N0YXJ0X2xlbisnaGgnLCBmY250bC5GX1dSTENLLCAwLCAwLCAwLCAwLCAwKQorICAgIGlmIGxvY2tkYXRhOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ3N0cnVjdC5wYWNrOiAnLCByZXByKGxvY2tkYXRhKQorICAgIHJldHVybiBsb2NrZGF0YQorCitsb2NrZGF0YSA9IGdldF9sb2NrZGF0YSgpCisKKworY2xhc3MgVGVzdEZjbnRsKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mID0gTm9uZQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmYgYW5kIG5vdCBzZWxmLmYuY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKworICAgIGRlZiB0ZXN0X2ZjbnRsX2ZpbGVubyhzZWxmKToKKyAgICAgICAgIyB0aGUgZXhhbXBsZSBmcm9tIHRoZSBsaWJyYXJ5IGRvY3MKKyAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sICd3JykKKyAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYuZmlsZW5vKCksIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnU3RhdHVzIGZyb20gZmNudGwgd2l0aCBPX05PTkJMT0NLOiAnLCBydgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gbm90IGluIFsnb3MyZW14J106CisgICAgICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZi5maWxlbm8oKSwgZmNudGwuRl9TRVRMS1csIGxvY2tkYXRhKQorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAnU3RyaW5nIGZyb20gZmNudGwgd2l0aCBGX1NFVExLVzogJywgcmVwcihydikKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2ZjbnRsX2ZpbGVfZGVzY3JpcHRvcihzZWxmKToKKyAgICAgICAgIyBhZ2FpbiwgYnV0IHBhc3MgdGhlIGZpbGUgcmF0aGVyIHRoYW4gbnVtZXJpYyBkZXNjcmlwdG9yCisgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCAndycpCisgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLCBmY250bC5GX1NFVEZMLCBvcy5PX05PTkJMT0NLKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gbm90IGluIFsnb3MyZW14J106CisgICAgICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZiwgZmNudGwuRl9TRVRMS1csIGxvY2tkYXRhKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZmNudGxfYmFkX2ZpbGUoc2VsZik6CisgICAgICAgIGNsYXNzIEY6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm4pOgorICAgICAgICAgICAgICAgIHNlbGYuZm4gPSBmbgorICAgICAgICAgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmY250bC5mY250bCwgLTEsIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZjbnRsLmZjbnRsLCBGKC0xKSwgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmY250bC5mY250bCwgJ3NwYW0nLCBmY250bC5GX1NFVEZMLCBvcy5PX05PTkJMT0NLKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZjbnRsLmZjbnRsLCBGKCdzcGFtJyksIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCisgICAgICAgICMgSXNzdWUgMTU5ODkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmNudGwuZmNudGwsIF90ZXN0Y2FwaS5JTlRfTUFYICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZjbnRsLmZjbnRsLCBGKF90ZXN0Y2FwaS5JTlRfTUFYICsgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY250bC5GX1NFVEZMLCBvcy5PX05PTkJMT0NLKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmY250bC5mY250bCwgX3Rlc3RjYXBpLklOVF9NSU4gLSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmNudGwuZmNudGwsIEYoX3Rlc3RjYXBpLklOVF9NSU4gLSAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCisKKyAgICBkZWYgdGVzdF9mY250bF82NF9iaXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEzMDkzNTI6IGZjbnRsIHNob3VsZG4ndCBmYWlsIHdoZW4gdGhlIHRoaXJkIGFyZyBmaXRzIGluIGEKKyAgICAgICAgIyBDICdsb25nJyBidXQgbm90IGluIGEgQyAnaW50Jy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY21kID0gZmNudGwuRl9OT1RJRlkKKyAgICAgICAgICAgICMgVGhpcyBmbGFnIGlzIGxhcmdlciB0aGFuIDIqKjMxIGluIDY0LWJpdCBidWlsZHMKKyAgICAgICAgICAgIGZsYWdzID0gZmNudGwuRE5fTVVMVElTSE9UCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkZfTk9USUZZIG9yIEROX01VTFRJU0hPVCB1bmF2YWlsYWJsZSIpCisgICAgICAgIGZkID0gb3Mub3Blbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKFRFU1RGTikpLCBvcy5PX1JET05MWSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGNtZCwgZmxhZ3MpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jbG9zZShmZCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFRlc3RGY250bCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZmlsZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZmYTRiNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ZpbGUucHkKQEAgLTAsMCArMSwzNDcgQEAKKyMgTk9URTogdGhpcyBmaWxlIHRlc3RzIHRoZSBuZXcgYGlvYCBsaWJyYXJ5IGJhY2twb3J0ZWQgZnJvbSBQeXRob24gMy54LgorIyBTaW1pbGFyIHRlc3RzIGZvciB0aGUgYnVpbHRpbiBmaWxlIG9iamVjdCBjYW4gYmUgZm91bmQgaW4gdGVzdF9maWxlMmsucHkuCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gYXJyYXkgaW1wb3J0IGFycmF5Citmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CisKK2ltcG9ydCBpbworaW1wb3J0IF9weWlvIGFzIHB5aW8KKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QKK2Zyb20gVXNlckxpc3QgaW1wb3J0IFVzZXJMaXN0CisKK2NsYXNzIEF1dG9GaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgZmlsZSB0ZXN0cyBmb3Igd2hpY2ggYSB0ZXN0IGZpbGUgaXMgYXV0b21hdGljYWxseSBzZXQgdXAKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mID0gc2VsZi5vcGVuKFRFU1RGTiwgJ3diJykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mOgorICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKKworICAgIGRlZiB0ZXN0V2Vha1JlZnMoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHdlYWsgcmVmZXJlbmNlcworICAgICAgICBwID0gcHJveHkoc2VsZi5mKQorICAgICAgICBwLndyaXRlKGIndGVzdHN0cmluZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnRlbGwoKSwgcC50ZWxsKCkpCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIHNlbGYuZiA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVmZXJlbmNlRXJyb3IsIGdldGF0dHIsIHAsICd0ZWxsJykKKworICAgIGRlZiB0ZXN0QXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgZXhwZWN0ZWQgYXR0cmlidXRlcyBleGlzdAorICAgICAgICBmID0gc2VsZi5mCisgICAgICAgIGYubmFtZSAgICAgIyBtZXJlbHkgc2hvdWxkbid0IGJsb3cgdXAKKyAgICAgICAgZi5tb2RlICAgICAjIGRpdHRvCisgICAgICAgIGYuY2xvc2VkICAgIyBkaXR0bworCisgICAgZGVmIHRlc3RSZWFkaW50byhzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgcmVhZGludG8KKyAgICAgICAgc2VsZi5mLndyaXRlKGInMTInKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBhID0gYXJyYXkoJ2InLCBiJ3gnKjEwKQorICAgICAgICBzZWxmLmYgPSBzZWxmLm9wZW4oVEVTVEZOLCAncmInKQorICAgICAgICBuID0gc2VsZi5mLnJlYWRpbnRvKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicxMicsIGEudG9zdHJpbmcoKVs6bl0pCisKKyAgICBkZWYgdGVzdFJlYWRpbnRvX3RleHQoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHJlYWRpbnRvIHJlZnVzZXMgdGV4dCBmaWxlcworICAgICAgICBhID0gYXJyYXkoJ2InLCBiJ3gnKjEwKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmYgPSBzZWxmLm9wZW4oVEVTVEZOLCAncicpCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5mLCAicmVhZGludG8iKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mLnJlYWRpbnRvLCBhKQorCisgICAgZGVmIHRlc3RXcml0ZWxpbmVzVXNlckxpc3Qoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHdyaXRlbGluZXMgd2l0aCBpbnN0YW5jZSBzZXF1ZW5jZQorICAgICAgICBsID0gVXNlckxpc3QoW2InMScsIGInMiddKQorICAgICAgICBzZWxmLmYud3JpdGVsaW5lcyhsKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBzZWxmLmYgPSBzZWxmLm9wZW4oVEVTVEZOLCAncmInKQorICAgICAgICBidWYgPSBzZWxmLmYucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLCBiJzEyJykKKworICAgIGRlZiB0ZXN0V3JpdGVsaW5lc0ludGVnZXJzKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSB3cml0ZWxpbmVzIHdpdGggaW50ZWdlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcywgWzEsIDIsIDNdKQorCisgICAgZGVmIHRlc3RXcml0ZWxpbmVzSW50ZWdlcnNVc2VyTGlzdChzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgd3JpdGVsaW5lcyB3aXRoIGludGVnZXJzIGluIFVzZXJMaXN0CisgICAgICAgIGwgPSBVc2VyTGlzdChbMSwyLDNdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZi53cml0ZWxpbmVzLCBsKQorCisgICAgZGVmIHRlc3RXcml0ZWxpbmVzTm9uU3RyaW5nKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSB3cml0ZWxpbmVzIHdpdGggbm9uLXN0cmluZyBvYmplY3QKKyAgICAgICAgY2xhc3MgTm9uU3RyaW5nOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mLndyaXRlbGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtOb25TdHJpbmcoKSwgTm9uU3RyaW5nKCldKQorCisgICAgZGVmIHRlc3RFcnJvcnMoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm5hbWUsIFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmLmlzYXR0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuY2xvc2VkKQorCisgICAgICAgIGlmIGhhc2F0dHIoZiwgInJlYWRpbnRvIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoSU9FcnJvciwgVHlwZUVycm9yKSwgZi5yZWFkaW50bywgIiIpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCisKKyAgICBkZWYgdGVzdE1ldGhvZHMoc2VsZik6CisgICAgICAgIG1ldGhvZHMgPSBbKCdmaWxlbm8nLCAoKSksCisgICAgICAgICAgICAgICAgICAgKCdmbHVzaCcsICgpKSwKKyAgICAgICAgICAgICAgICAgICAoJ2lzYXR0eScsICgpKSwKKyAgICAgICAgICAgICAgICAgICAoJ25leHQnLCAoKSksCisgICAgICAgICAgICAgICAgICAgKCdyZWFkJywgKCkpLAorICAgICAgICAgICAgICAgICAgICgnd3JpdGUnLCAoYiIiLCkpLAorICAgICAgICAgICAgICAgICAgICgncmVhZGxpbmUnLCAoKSksCisgICAgICAgICAgICAgICAgICAgKCdyZWFkbGluZXMnLCAoKSksCisgICAgICAgICAgICAgICAgICAgKCdzZWVrJywgKDAsKSksCisgICAgICAgICAgICAgICAgICAgKCd0ZWxsJywgKCkpLAorICAgICAgICAgICAgICAgICAgICgnd3JpdGUnLCAoYiIiLCkpLAorICAgICAgICAgICAgICAgICAgICgnd3JpdGVsaW5lcycsIChbXSwpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19faXRlcl9fJywgKCkpLAorICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdhdGhlb3MnKToKKyAgICAgICAgICAgIG1ldGhvZHMuYXBwZW5kKCgndHJ1bmNhdGUnLCAoKSkpCisKKyAgICAgICAgIyBfX2V4aXRfXyBzaG91bGQgY2xvc2UgdGhlIGZpbGUKKyAgICAgICAgc2VsZi5mLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmYuY2xvc2VkKQorCisgICAgICAgIGZvciBtZXRob2RuYW1lLCBhcmdzIGluIG1ldGhvZHM6CisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYuZiwgbWV0aG9kbmFtZSkKKyAgICAgICAgICAgICMgc2hvdWxkIHJhaXNlIG9uIGNsb3NlZCBmaWxlCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZXRob2QsICphcmdzKQorCisgICAgICAgICMgZmlsZSBpcyBjbG9zZWQsIF9fZXhpdF9fIHNob3VsZG4ndCBkbyBhbnl0aGluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKSwgTm9uZSkKKyAgICAgICAgIyBpdCBtdXN0IGFsc28gcmV0dXJuIE5vbmUgaWYgYW4gZXhjZXB0aW9uIHdhcyBnaXZlbgorICAgICAgICB0cnk6CisgICAgICAgICAgICAxIC8vIDAKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuX19leGl0X18oKnN5cy5leGNfaW5mbygpKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0UmVhZFdoZW5Xcml0aW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYucmVhZCkKKworY2xhc3MgQ0F1dG9GaWxlVGVzdHMoQXV0b0ZpbGVUZXN0cyk6CisgICAgb3BlbiA9IGlvLm9wZW4KKworY2xhc3MgUHlBdXRvRmlsZVRlc3RzKEF1dG9GaWxlVGVzdHMpOgorICAgIG9wZW4gPSBzdGF0aWNtZXRob2QocHlpby5vcGVuKQorCisKK2NsYXNzIE90aGVyRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0TW9kZVN0cmluZ3Moc2VsZik6CisgICAgICAgICMgY2hlY2sgaW52YWxpZCBtb2RlIHN0cmluZ3MKKyAgICAgICAgZm9yIG1vZGUgaW4gKCIiLCAiYVUiLCAid1UrIik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IHNlbGYub3BlbihURVNURk4sIG1vZGUpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnJXIgaXMgYW4gaW52YWxpZCBmaWxlIG1vZGUnICUgbW9kZSkKKworICAgIGRlZiB0ZXN0U3RkaW4oc2VsZik6CisgICAgICAgICMgVGhpcyBjYXVzZXMgdGhlIGludGVycHJldGVyIHRvIGV4aXQgb24gT1NGMSB2NS4xLgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ29zZjFWNSc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoSU9FcnJvciwgVmFsdWVFcnJvciksIHN5cy5zdGRpbi5zZWVrLCAtMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCgKKyAgICAgICAgICAgICAgICAnICBTa2lwcGluZyBzeXMuc3RkaW4uc2VlaygtMSksIGl0IG1heSBjcmFzaCB0aGUgaW50ZXJwcmV0ZXIuJworICAgICAgICAgICAgICAgICcgVGVzdCBtYW51YWxseS4nKSwgZmlsZT1zeXMuX19zdGRvdXRfXykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKElPRXJyb3IsIFZhbHVlRXJyb3IpLCBzeXMuc3RkaW4udHJ1bmNhdGUpCisKKyAgICBkZWYgdGVzdEJhZE1vZGVBcmd1bWVudChzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCB3ZSBnZXQgYSBzZW5zaWJsZSBlcnJvciBtZXNzYWdlIGZvciBiYWQgbW9kZSBhcmd1bWVudAorICAgICAgICBiYWRfbW9kZSA9ICJxd2VydHkiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oVEVTVEZOLCBiYWRfbW9kZSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgaWYgbXNnLmFyZ3NbMF0gIT0gMDoKKyAgICAgICAgICAgICAgICBzID0gc3RyKG1zZykKKyAgICAgICAgICAgICAgICBpZiBURVNURk4gaW4gcyBvciBiYWRfbW9kZSBub3QgaW4gczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJiYWQgZXJyb3IgbWVzc2FnZSBmb3IgaW52YWxpZCBtb2RlOiAlcyIgJSBzKQorICAgICAgICAgICAgIyBpZiBtc2cuYXJnc1swXSA9PSAwLCB3ZSdyZSBwcm9iYWJseSBvbiBXaW5kb3dzIHdoZXJlIHRoZXJlIG1heSBiZQorICAgICAgICAgICAgIyBubyBvYnZpb3VzIHdheSB0byBkaXNjb3ZlciB3aHkgb3BlbigpIGZhaWxlZC4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBlcnJvciBmb3IgaW52YWxpZCBtb2RlOiAlcyIgJSBiYWRfbW9kZSkKKworICAgIGRlZiB0ZXN0U2V0QnVmZmVyU2l6ZShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCBleHBsaWNpdGx5IHNldHRpbmcgdGhlIGJ1ZmZlciBzaXplIGRvZXNuJ3QgY2F1c2UKKyAgICAgICAgIyBtaXNiZWhhdmlvdXIgZXNwZWNpYWxseSB3aXRoIHJlcGVhdGVkIGNsb3NlKCkgY2FsbHMKKyAgICAgICAgZm9yIHMgaW4gKC0xLCAwLCAxLCA1MTIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oVEVTVEZOLCAnd2InLCBzKQorICAgICAgICAgICAgICAgIGYud3JpdGUoc3RyKHMpLmVuY29kZSgiYXNjaWkiKSkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBmID0gc2VsZi5vcGVuKFRFU1RGTiwgJ3JiJywgcykKKyAgICAgICAgICAgICAgICBkID0gaW50KGYucmVhZCgpLmRlY29kZSgiYXNjaWkiKSkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Vycm9yIHNldHRpbmcgYnVmZmVyIHNpemUgJWQ6ICVzJyAlIChzLCBzdHIobXNnKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHMpCisKKyAgICBkZWYgdGVzdFRydW5jYXRlT25XaW5kb3dzKHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZyA8aHR0cDovL3d3dy5weXRob24ub3JnL3NmLzgwMTYzMT4KKyAgICAgICAgIyAiZmlsZS50cnVuY2F0ZSBmYXVsdCBvbiB3aW5kb3dzIgorCisgICAgICAgIG9zLnVubGluayhURVNURk4pCisgICAgICAgIGYgPSBzZWxmLm9wZW4oVEVTVEZOLCAnd2InKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoYicxMjM0NTY3ODkwMScpICAgIyAxMSBieXRlcworICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oVEVTVEZOLCdyYisnKQorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCg1KQorICAgICAgICAgICAgaWYgZGF0YSAhPSBiJzEyMzQ1JzoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlJlYWQgb24gZmlsZSBvcGVuZWQgZm9yIHVwZGF0ZSBmYWlsZWQgJXIiICUgZGF0YSkKKyAgICAgICAgICAgIGlmIGYudGVsbCgpICE9IDU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlIHBvcyBhZnRlciByZWFkIHdyb25nICVkIiAlIGYudGVsbCgpKQorCisgICAgICAgICAgICBmLnRydW5jYXRlKCkKKyAgICAgICAgICAgIGlmIGYudGVsbCgpICE9IDU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlIHBvcyBhZnRlciBmdHJ1bmNhdGUgd3JvbmcgJWQiICUgZi50ZWxsKCkpCisKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2l6ZSA9IG9zLnBhdGguZ2V0c2l6ZShURVNURk4pCisgICAgICAgICAgICBpZiBzaXplICE9IDU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlIHNpemUgYWZ0ZXIgZnRydW5jYXRlIHdyb25nICVkIiAlIHNpemUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisKKyAgICBkZWYgdGVzdEl0ZXJhdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBjb21wbGV4IGludGVyYWN0aW9uIHdoZW4gbWl4aW5nIGZpbGUtaXRlcmF0aW9uIGFuZCB0aGUKKyAgICAgICAgIyB2YXJpb3VzIHJlYWQqIG1ldGhvZHMuCisgICAgICAgIGRhdGFvZmZzZXQgPSAxNjM4NAorICAgICAgICBmaWxsZXIgPSBiImhhbVxuIgorICAgICAgICBhc3NlcnQgbm90IGRhdGFvZmZzZXQgJSBsZW4oZmlsbGVyKSwgXAorICAgICAgICAgICAgImRhdGFvZmZzZXQgbXVzdCBiZSBtdWx0aXBsZSBvZiBsZW4oZmlsbGVyKSIKKyAgICAgICAgbmNodW5rcyA9IGRhdGFvZmZzZXQgLy8gbGVuKGZpbGxlcikKKyAgICAgICAgdGVzdGxpbmVzID0gWworICAgICAgICAgICAgYiJzcGFtLCBzcGFtIGFuZCBlZ2dzXG4iLAorICAgICAgICAgICAgYiJlZ2dzLCBzcGFtLCBoYW0gYW5kIHNwYW1cbiIsCisgICAgICAgICAgICBiInNhdXNzYWdlcywgc3BhbSwgc3BhbSBhbmQgZWdnc1xuIiwKKyAgICAgICAgICAgIGIic3BhbSwgaGFtLCBzcGFtIGFuZCBlZ2dzXG4iLAorICAgICAgICAgICAgYiJzcGFtLCBzcGFtLCBzcGFtLCBzcGFtLCBzcGFtLCBoYW0sIHNwYW1cbiIsCisgICAgICAgICAgICBiIndvbmRlcmZ1bCBzcGFhYWFhYW0uXG4iCisgICAgICAgIF0KKyAgICAgICAgbWV0aG9kcyA9IFsoInJlYWRsaW5lIiwgKCkpLCAoInJlYWQiLCAoKSksICgicmVhZGxpbmVzIiwgKCkpLAorICAgICAgICAgICAgICAgICAgICgicmVhZGludG8iLCAoYXJyYXkoImIiLCBiIiAiKjEwMCksKSldCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBQcmVwYXJlIHRoZSB0ZXN0ZmlsZQorICAgICAgICAgICAgYmFnID0gc2VsZi5vcGVuKFRFU1RGTiwgIndiIikKKyAgICAgICAgICAgIGJhZy53cml0ZShmaWxsZXIgKiBuY2h1bmtzKQorICAgICAgICAgICAgYmFnLndyaXRlbGluZXModGVzdGxpbmVzKQorICAgICAgICAgICAgYmFnLmNsb3NlKCkKKyAgICAgICAgICAgICMgVGVzdCBmb3IgYXBwcm9wcmlhdGUgZXJyb3JzIG1peGluZyByZWFkKiBhbmQgaXRlcmF0aW9uCisgICAgICAgICAgICBmb3IgbWV0aG9kbmFtZSwgYXJncyBpbiBtZXRob2RzOgorICAgICAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oVEVTVEZOLCAncmInKQorICAgICAgICAgICAgICAgIGlmIG5leHQoZikgIT0gZmlsbGVyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwsICJCcm9rZW4gdGVzdGZpbGUiCisgICAgICAgICAgICAgICAgbWV0aCA9IGdldGF0dHIoZiwgbWV0aG9kbmFtZSkKKyAgICAgICAgICAgICAgICBtZXRoKCphcmdzKSAgIyBUaGlzIHNpbXBseSBzaG91bGRuJ3QgZmFpbAorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICAjIFRlc3QgdG8gc2VlIGlmIGhhcm1sZXNzIChieSBhY2NpZGVudCkgbWl4aW5nIG9mIHJlYWQqIGFuZAorICAgICAgICAgICAgIyBpdGVyYXRpb24gc3RpbGwgd29ya3MuIFRoaXMgZGVwZW5kcyBvbiB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJuYWwKKyAgICAgICAgICAgICMgaXRlcmF0aW9uIGJ1ZmZlciAoY3VycmVudGx5IDgxOTIsKSBidXQgd2UgY2FuIHRlc3QgaXQgaW4gYQorICAgICAgICAgICAgIyBmbGV4aWJsZSBtYW5uZXIuICBFYWNoIGxpbmUgaW4gdGhlIGJhZyBvJyBoYW0gaXMgNCBieXRlcworICAgICAgICAgICAgIyAoImgiLCAiYSIsICJtIiwgIlxuIiksIHNvIDQwOTYgbGluZXMgb2YgdGhhdCBzaG91bGQgZ2V0IHVzCisgICAgICAgICAgICAjIGV4YWN0bHkgb24gdGhlIGJ1ZmZlciBib3VuZGFyeSBmb3IgYW55IHBvd2VyLW9mLTIgYnVmZmVyc2l6ZQorICAgICAgICAgICAgIyBiZXR3ZWVuIDQgYW5kIDE2Mzg0IChpbmNsdXNpdmUpLgorICAgICAgICAgICAgZiA9IHNlbGYub3BlbihURVNURk4sICdyYicpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShuY2h1bmtzKToKKyAgICAgICAgICAgICAgICBuZXh0KGYpCisgICAgICAgICAgICB0ZXN0bGluZSA9IHRlc3RsaW5lcy5wb3AoMCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRsaW5lKCkgYWZ0ZXIgbmV4dCgpIHdpdGggc3VwcG9zZWRseSBlbXB0eSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpb24tYnVmZmVyIGZhaWxlZCBhbnl3YXkiKQorICAgICAgICAgICAgaWYgbGluZSAhPSB0ZXN0bGluZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRsaW5lKCkgYWZ0ZXIgbmV4dCgpIHdpdGggZW1wdHkgYnVmZmVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZC4gR290ICVyLCBleHBlY3RlZCAlciIgJSAobGluZSwgdGVzdGxpbmUpKQorICAgICAgICAgICAgdGVzdGxpbmUgPSB0ZXN0bGluZXMucG9wKDApCisgICAgICAgICAgICBidWYgPSBhcnJheSgiYiIsIGIiXHgwMCIgKiBsZW4odGVzdGxpbmUpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYucmVhZGludG8oYnVmKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkaW50bygpIGFmdGVyIG5leHQoKSB3aXRoIHN1cHBvc2VkbHkgZW1wdHkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmF0aW9uLWJ1ZmZlciBmYWlsZWQgYW55d2F5IikKKyAgICAgICAgICAgIGxpbmUgPSBidWYudG9zdHJpbmcoKQorICAgICAgICAgICAgaWYgbGluZSAhPSB0ZXN0bGluZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRpbnRvKCkgYWZ0ZXIgbmV4dCgpIHdpdGggZW1wdHkgYnVmZmVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZC4gR290ICVyLCBleHBlY3RlZCAlciIgJSAobGluZSwgdGVzdGxpbmUpKQorCisgICAgICAgICAgICB0ZXN0bGluZSA9IHRlc3RsaW5lcy5wb3AoMCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsaW5lID0gZi5yZWFkKGxlbih0ZXN0bGluZSkpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWQoKSBhZnRlciBuZXh0KCkgd2l0aCBzdXBwb3NlZGx5IGVtcHR5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGlvbi1idWZmZXIgZmFpbGVkIGFueXdheSIpCisgICAgICAgICAgICBpZiBsaW5lICE9IHRlc3RsaW5lOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZCgpIGFmdGVyIG5leHQoKSB3aXRoIGVtcHR5IGJ1ZmZlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQuIEdvdCAlciwgZXhwZWN0ZWQgJXIiICUgKGxpbmUsIHRlc3RsaW5lKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGxpbmVzKCkgYWZ0ZXIgbmV4dCgpIHdpdGggc3VwcG9zZWRseSBlbXB0eSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpb24tYnVmZmVyIGZhaWxlZCBhbnl3YXkiKQorICAgICAgICAgICAgaWYgbGluZXMgIT0gdGVzdGxpbmVzOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGxpbmVzKCkgYWZ0ZXIgbmV4dCgpIHdpdGggZW1wdHkgYnVmZmVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZC4gR290ICVyLCBleHBlY3RlZCAlciIgJSAobGluZSwgdGVzdGxpbmUpKQorICAgICAgICAgICAgIyBSZWFkaW5nIGFmdGVyIGl0ZXJhdGlvbiBoaXQgRU9GIHNob3VsZG4ndCBodXJ0IGVpdGhlcgorICAgICAgICAgICAgZiA9IHNlbGYub3BlbihURVNURk4sICdyYicpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIGYucmVhZGludG8oYnVmKQorICAgICAgICAgICAgICAgICAgICBmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZCogZmFpbGVkIGFmdGVyIG5leHQoKSBjb25zdW1lZCBmaWxlIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorCitjbGFzcyBDT3RoZXJGaWxlVGVzdHMoT3RoZXJGaWxlVGVzdHMpOgorICAgIG9wZW4gPSBpby5vcGVuCisKK2NsYXNzIFB5T3RoZXJGaWxlVGVzdHMoT3RoZXJGaWxlVGVzdHMpOgorICAgIG9wZW4gPSBzdGF0aWNtZXRob2QocHlpby5vcGVuKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICAjIEhpc3RvcmljYWxseSwgdGhlc2UgdGVzdHMgaGF2ZSBiZWVuIHNsb3BweSBhYm91dCByZW1vdmluZyBURVNURk4uCisgICAgIyBTbyBnZXQgcmlkIG9mIGl0IG5vIG1hdHRlciB3aGF0LgorICAgIHRyeToKKyAgICAgICAgcnVuX3VuaXR0ZXN0KENBdXRvRmlsZVRlc3RzLCBQeUF1dG9GaWxlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICBDT3RoZXJGaWxlVGVzdHMsIFB5T3RoZXJGaWxlVGVzdHMpCisgICAgZmluYWxseToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoVEVTVEZOKToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ZpbGUyay5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ZpbGUyay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzYzM2I0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZmlsZTJrLnB5CkBAIC0wLDAgKzEsODMyIEBACitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IHNlbGVjdAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCitmcm9tIGFycmF5IGltcG9ydCBhcnJheQorZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eQordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdAorZnJvbSBVc2VyTGlzdCBpbXBvcnQgVXNlckxpc3QKKworY2xhc3MgQXV0b0ZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBmaWxlIHRlc3RzIGZvciB3aGljaCBhIHRlc3QgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IHNldCB1cAorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3diJykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mOgorICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKKworICAgIGRlZiB0ZXN0V2Vha1JlZnMoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHdlYWsgcmVmZXJlbmNlcworICAgICAgICBwID0gcHJveHkoc2VsZi5mKQorICAgICAgICBwLndyaXRlKCd0ZXN0c3RyaW5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYudGVsbCgpLCBwLnRlbGwoKSkKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgc2VsZi5mID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWZlcmVuY2VFcnJvciwgZ2V0YXR0ciwgcCwgJ3RlbGwnKQorCisgICAgZGVmIHRlc3RBdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSBleHBlY3RlZCBhdHRyaWJ1dGVzIGV4aXN0CisgICAgICAgIGYgPSBzZWxmLmYKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc29mdHNwYWNlID0gZi5zb2Z0c3BhY2UKKyAgICAgICAgZi5uYW1lICAgICAjIG1lcmVseSBzaG91bGRuJ3QgYmxvdyB1cAorICAgICAgICBmLm1vZGUgICAgICMgZGl0dG8KKyAgICAgICAgZi5jbG9zZWQgICAjIGRpdHRvCisKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgIyB2ZXJpZnkgc29mdHNwYWNlIGlzIHdyaXRhYmxlCisgICAgICAgICAgICBmLnNvZnRzcGFjZSA9IHNvZnRzcGFjZSAgICAjIG1lcmVseSBzaG91bGRuJ3QgYmxvdyB1cAorCisgICAgICAgICMgdmVyaWZ5IHRoZSBvdGhlcnMgYXJlbid0CisgICAgICAgIGZvciBhdHRyIGluICduYW1lJywgJ21vZGUnLCAnY2xvc2VkJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKSwgc2V0YXR0ciwgZiwgYXR0ciwgJ29vcHMnKQorCisgICAgZGVmIHRlc3RSZWFkaW50byhzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgcmVhZGludG8KKyAgICAgICAgc2VsZi5mLndyaXRlKCcxMicpCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIGEgPSBhcnJheSgnYycsICd4JyoxMCkKKyAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sICdyYicpCisgICAgICAgIG4gPSBzZWxmLmYucmVhZGludG8oYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTInLCBhLnRvc3RyaW5nKClbOm5dKQorCisgICAgZGVmIHRlc3RXcml0ZWxpbmVzVXNlckxpc3Qoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHdyaXRlbGluZXMgd2l0aCBpbnN0YW5jZSBzZXF1ZW5jZQorICAgICAgICBsID0gVXNlckxpc3QoWycxJywgJzInXSkKKyAgICAgICAgc2VsZi5mLndyaXRlbGluZXMobCkKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sICdyYicpCisgICAgICAgIGJ1ZiA9IHNlbGYuZi5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYsICcxMicpCisKKyAgICBkZWYgdGVzdFdyaXRlbGluZXNJbnRlZ2VycyhzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgd3JpdGVsaW5lcyB3aXRoIGludGVnZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mLndyaXRlbGluZXMsIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0V3JpdGVsaW5lc0ludGVnZXJzVXNlckxpc3Qoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHdyaXRlbGluZXMgd2l0aCBpbnRlZ2VycyBpbiBVc2VyTGlzdAorICAgICAgICBsID0gVXNlckxpc3QoWzEsMiwzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcywgbCkKKworICAgIGRlZiB0ZXN0V3JpdGVsaW5lc05vblN0cmluZyhzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgd3JpdGVsaW5lcyB3aXRoIG5vbi1zdHJpbmcgb2JqZWN0CisgICAgICAgIGNsYXNzIE5vblN0cmluZzoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZi53cml0ZWxpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbTm9uU3RyaW5nKCksIE5vblN0cmluZygpXSkKKworICAgIGRlZiB0ZXN0UmVwcihzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgcmVwciB3b3JrcworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihzZWxmLmYpLnN0YXJ0c3dpdGgoIjxvcGVuIGZpbGUgJyIgKyBURVNURk4pKQorICAgICAgICAjIHNlZSBpc3N1ZSAjMTQxNjEKKyAgICAgICAgIyBXaW5kb3dzIGRvZXNuJ3QgbGlrZSBcclxuXHQiIGluIHRoZSBmaWxlIG5hbWUsIGJ1dCAnIGlzIG9rCisgICAgICAgIGZuYW1lID0gJ3h4XHJ4eFxueHhcJ3h4Inh4JyBpZiBzeXMucGxhdGZvcm0gIT0gIndpbjMyIiBlbHNlICJ4eCd4eCIKKyAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAndycpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MucmVtb3ZlLCBmbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGYpLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICAgICAgICAgICI8b3BlbiBmaWxlICVyLCBtb2RlICd3JyBhdCIgJSBmbmFtZSkpCisKKyAgICBkZWYgdGVzdEVycm9ycyhzZWxmKToKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sICdyYicpCisgICAgICAgIGYgPSBzZWxmLmYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm5hbWUsIFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmLmlzYXR0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuY2xvc2VkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkaW50bywgIiIpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCisKKyAgICBkZWYgdGVzdE1ldGhvZHMoc2VsZik6CisgICAgICAgIG1ldGhvZHMgPSBbJ2ZpbGVubycsICdmbHVzaCcsICdpc2F0dHknLCAnbmV4dCcsICdyZWFkJywgJ3JlYWRpbnRvJywKKyAgICAgICAgICAgICAgICAgICAncmVhZGxpbmUnLCAncmVhZGxpbmVzJywgJ3NlZWsnLCAndGVsbCcsICd0cnVuY2F0ZScsCisgICAgICAgICAgICAgICAgICAgJ3dyaXRlJywgJ19faXRlcl9fJ10KKyAgICAgICAgZGVwcmVjYXRlZF9tZXRob2RzID0gWyd4cmVhZGxpbmVzJ10KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2F0aGVvcycpOgorICAgICAgICAgICAgbWV0aG9kcy5yZW1vdmUoJ3RydW5jYXRlJykKKworICAgICAgICAjIF9fZXhpdF9fIHNob3VsZCBjbG9zZSB0aGUgZmlsZQorICAgICAgICBzZWxmLmYuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZi5jbG9zZWQpCisKKyAgICAgICAgZm9yIG1ldGhvZG5hbWUgaW4gbWV0aG9kczoKKyAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZi5mLCBtZXRob2RuYW1lKQorICAgICAgICAgICAgIyBzaG91bGQgcmFpc2Ugb24gY2xvc2VkIGZpbGUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1ldGhvZCkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgZm9yIG1ldGhvZG5hbWUgaW4gZGVwcmVjYXRlZF9tZXRob2RzOgorICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZi5mLCBtZXRob2RuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1ldGhvZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5mLndyaXRlbGluZXMsIFtdKQorCisgICAgICAgICMgZmlsZSBpcyBjbG9zZWQsIF9fZXhpdF9fIHNob3VsZG4ndCBkbyBhbnl0aGluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKSwgTm9uZSkKKyAgICAgICAgIyBpdCBtdXN0IGFsc28gcmV0dXJuIE5vbmUgaWYgYW4gZXhjZXB0aW9uIHdhcyBnaXZlbgorICAgICAgICB0cnk6CisgICAgICAgICAgICAxIC8vIDAKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuX19leGl0X18oKnN5cy5leGNfaW5mbygpKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0UmVhZFdoZW5Xcml0aW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYucmVhZCkKKworICAgIGRlZiB0ZXN0TmFzdHlXcml0ZWxpbmVzR2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBkZWYgbmFzdHkoKToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgICAgIGlmIGkgPT0gMzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB5aWVsZCBzdHIoaSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5mLndyaXRlbGluZXMsIG5hc3R5KCkpCisKKyAgICBkZWYgdGVzdElzc3VlNTY3NyhzZWxmKToKKyAgICAgICAgIyBSZW1hcms6IERvIG5vdCBwZXJmb3JtIG1vcmUgdGhhbiBvbmUgdGVzdCBwZXIgb3BlbiBmaWxlLAorICAgICAgICAjIHNpbmNlIHRoYXQgZG9lcyBOT1QgY2F0Y2ggdGhlIHJlYWRsaW5lIGVycm9yIG9uIFdpbmRvd3MuCisgICAgICAgIGRhdGEgPSAneHh4JworICAgICAgICBmb3IgbW9kZSBpbiBbJ3cnLCAnd2InLCAnYScsICdhYiddOgorICAgICAgICAgICAgZm9yIGF0dHIgaW4gWydyZWFkJywgJ3JlYWRsaW5lJywgJ3JlYWRsaW5lcyddOgorICAgICAgICAgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCBtb2RlKQorICAgICAgICAgICAgICAgIHNlbGYuZi53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGdldGF0dHIoc2VsZi5mLCBhdHRyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorCisgICAgICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgbW9kZSkKKyAgICAgICAgICAgIHNlbGYuZi53cml0ZShkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbGFtYmRhOiBbbGluZSBmb3IgbGluZSBpbiBzZWxmLmZdKQorICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKworICAgICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sIG1vZGUpCisgICAgICAgICAgICBzZWxmLmYud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuZi5yZWFkaW50bywgYnl0ZWFycmF5KGxlbihkYXRhKSkpCisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorCisgICAgICAgIGZvciBtb2RlIGluIFsncicsICdyYicsICdVJywgJ1ViJywgJ1VyJywgJ3JVJywgJ3JiVScsICdyVWInXToKKyAgICAgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCBtb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5mLndyaXRlLCBkYXRhKQorICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKworICAgICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sIG1vZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYud3JpdGVsaW5lcywgW2RhdGEsIGRhdGFdKQorICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKworICAgICAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sIG1vZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYudHJ1bmNhdGUpCisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorCitjbGFzcyBPdGhlckZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdE9wZW5EaXIoc2VsZik6CisgICAgICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIKKyAgICAgICAgZm9yIG1vZGUgaW4gKE5vbmUsICJ3Iik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbW9kZToKKyAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4odGhpc19kaXIsIG1vZGUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4odGhpc19kaXIpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5maWxlbmFtZSwgdGhpc19kaXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgib3BlbmluZyBhIGRpcmVjdG9yeSBkaWRuJ3QgcmFpc2UgYW4gSU9FcnJvciIpCisKKyAgICBkZWYgdGVzdE1vZGVTdHJpbmdzKHNlbGYpOgorICAgICAgICAjIGNoZWNrIGludmFsaWQgbW9kZSBzdHJpbmdzCisgICAgICAgIGZvciBtb2RlIGluICgiIiwgImFVIiwgIndVKyIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgbW9kZSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCclciBpcyBhbiBpbnZhbGlkIGZpbGUgbW9kZScgJSBtb2RlKQorCisgICAgICAgICMgU29tZSBpbnZhbGlkIG1vZGVzIGZhaWwgb24gV2luZG93cywgYnV0IHBhc3Mgb24gVW5peAorICAgICAgICAjIElzc3VlMzk2NTogYXZvaWQgYSBjcmFzaCBvbiBXaW5kb3dzIHdoZW4gZmlsZW5hbWUgaXMgdW5pY29kZQorICAgICAgICBmb3IgbmFtZSBpbiAoVEVTVEZOLCB1bmljb2RlKFRFU1RGTiksIHVuaWNvZGUoVEVTVEZOICsgJ1x0JykpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKG5hbWUsICJyciIpCisgICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFN0ZGluKHNlbGYpOgorICAgICAgICAjIFRoaXMgY2F1c2VzIHRoZSBpbnRlcnByZXRlciB0byBleGl0IG9uIE9TRjEgdjUuMS4KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdvc2YxVjUnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc3lzLnN0ZGluLnNlZWssIC0xKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgPj5zeXMuX19zdGRvdXRfXywgKAorICAgICAgICAgICAgICAgICcgIFNraXBwaW5nIHN5cy5zdGRpbi5zZWVrKC0xKSwgaXQgbWF5IGNyYXNoIHRoZSBpbnRlcnByZXRlci4nCisgICAgICAgICAgICAgICAgJyBUZXN0IG1hbnVhbGx5LicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHN5cy5zdGRpbi50cnVuY2F0ZSkKKworICAgIGRlZiB0ZXN0VW5pY29kZU9wZW4oc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHJlcHIgd29ya3MgZm9yIHVuaWNvZGUgdG9vCisgICAgICAgIGYgPSBvcGVuKHVuaWNvZGUoVEVTVEZOKSwgInciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihmKS5zdGFydHN3aXRoKCI8b3BlbiBmaWxlIHUnIiArIFRFU1RGTikpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorCisgICAgZGVmIHRlc3RCYWRNb2RlQXJndW1lbnQoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHRoYXQgd2UgZ2V0IGEgc2Vuc2libGUgZXJyb3IgbWVzc2FnZSBmb3IgYmFkIG1vZGUgYXJndW1lbnQKKyAgICAgICAgYmFkX21vZGUgPSAicXdlcnR5IgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3BlbihURVNURk4sIGJhZF9tb2RlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgbXNnOgorICAgICAgICAgICAgaWYgbXNnLmFyZ3NbMF0gIT0gMDoKKyAgICAgICAgICAgICAgICBzID0gc3RyKG1zZykKKyAgICAgICAgICAgICAgICBpZiBURVNURk4gaW4gcyBvciBiYWRfbW9kZSBub3QgaW4gczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJiYWQgZXJyb3IgbWVzc2FnZSBmb3IgaW52YWxpZCBtb2RlOiAlcyIgJSBzKQorICAgICAgICAgICAgIyBpZiBtc2cuYXJnc1swXSA9PSAwLCB3ZSdyZSBwcm9iYWJseSBvbiBXaW5kb3dzIHdoZXJlIHRoZXJlIG1heQorICAgICAgICAgICAgIyBiZSBubyBvYnZpb3VzIHdheSB0byBkaXNjb3ZlciB3aHkgb3BlbigpIGZhaWxlZC4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBlcnJvciBmb3IgaW52YWxpZCBtb2RlOiAlcyIgJSBiYWRfbW9kZSkKKworICAgIGRlZiB0ZXN0U2V0QnVmZmVyU2l6ZShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCBleHBsaWNpdGx5IHNldHRpbmcgdGhlIGJ1ZmZlciBzaXplIGRvZXNuJ3QgY2F1c2UKKyAgICAgICAgIyBtaXNiZWhhdmlvdXIgZXNwZWNpYWxseSB3aXRoIHJlcGVhdGVkIGNsb3NlKCkgY2FsbHMKKyAgICAgICAgZm9yIHMgaW4gKC0xLCAwLCAxLCA1MTIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3cnLCBzKQorICAgICAgICAgICAgICAgIGYud3JpdGUoc3RyKHMpKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3InLCBzKQorICAgICAgICAgICAgICAgIGQgPSBpbnQoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZXJyb3Igc2V0dGluZyBidWZmZXIgc2l6ZSAlZDogJXMnICUgKHMsIHN0cihtc2cpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgcykKKworICAgIGRlZiB0ZXN0VHJ1bmNhdGVPbldpbmRvd3Moc2VsZik6CisgICAgICAgIG9zLnVubGluayhURVNURk4pCisKKyAgICAgICAgZGVmIGJ1ZzgwMTYzMSgpOgorICAgICAgICAgICAgIyBTRiBidWcgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zZi84MDE2MzE+CisgICAgICAgICAgICAjICJmaWxlLnRydW5jYXRlIGZhdWx0IG9uIHdpbmRvd3MiCisgICAgICAgICAgICBmID0gb3BlbihURVNURk4sICd3YicpCisgICAgICAgICAgICBmLndyaXRlKCcxMjM0NTY3ODkwMScpICAgIyAxMSBieXRlcworICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwncmIrJykKKyAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoNSkKKyAgICAgICAgICAgIGlmIGRhdGEgIT0gJzEyMzQ1JzoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlJlYWQgb24gZmlsZSBvcGVuZWQgZm9yIHVwZGF0ZSBmYWlsZWQgJXIiICUgZGF0YSkKKyAgICAgICAgICAgIGlmIGYudGVsbCgpICE9IDU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlIHBvcyBhZnRlciByZWFkIHdyb25nICVkIiAlIGYudGVsbCgpKQorCisgICAgICAgICAgICBmLnRydW5jYXRlKCkKKyAgICAgICAgICAgIGlmIGYudGVsbCgpICE9IDU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlIHBvcyBhZnRlciBmdHJ1bmNhdGUgd3JvbmcgJWQiICUgZi50ZWxsKCkpCisKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2l6ZSA9IG9zLnBhdGguZ2V0c2l6ZShURVNURk4pCisgICAgICAgICAgICBpZiBzaXplICE9IDU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlIHNpemUgYWZ0ZXIgZnRydW5jYXRlIHdyb25nICVkIiAlIHNpemUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYnVnODAxNjMxKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisKKyAgICBkZWYgdGVzdEl0ZXJhdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBjb21wbGV4IGludGVyYWN0aW9uIHdoZW4gbWl4aW5nIGZpbGUtaXRlcmF0aW9uIGFuZCB0aGUKKyAgICAgICAgIyB2YXJpb3VzIHJlYWQqIG1ldGhvZHMuIE9zdGVuc2libHksIHRoZSBtaXh0dXJlIGNvdWxkIGp1c3QgYmUgdGVzdGVkCisgICAgICAgICMgdG8gd29yayB3aGVuIGl0IHNob3VsZCB3b3JrIGFjY29yZGluZyB0byB0aGUgUHl0aG9uIGxhbmd1YWdlLAorICAgICAgICAjIGluc3RlYWQgb2YgZmFpbCB3aGVuIGl0IHNob3VsZCBmYWlsIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBDUHl0aG9uCisgICAgICAgICMgaW1wbGVtZW50YXRpb24uICBQZW9wbGUgZG9uJ3QgYWx3YXlzIHByb2dyYW0gUHl0aG9uIHRoZSB3YXkgdGhleQorICAgICAgICAjIHNob3VsZCwgdGhvdWdoLCBhbmQgdGhlIGltcGxlbWVuYXRpb24gbWlnaHQgY2hhbmdlIGluIHN1YnRsZSB3YXlzLAorICAgICAgICAjIHNvIHdlIGV4cGxpY2l0bHkgdGVzdCBmb3IgZXJyb3JzLCB0b287IHRoZSB0ZXN0IHdpbGwganVzdCBoYXZlIHRvCisgICAgICAgICMgYmUgdXBkYXRlZCB3aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzLgorICAgICAgICBkYXRhb2Zmc2V0ID0gMTYzODQKKyAgICAgICAgZmlsbGVyID0gImhhbVxuIgorICAgICAgICBhc3NlcnQgbm90IGRhdGFvZmZzZXQgJSBsZW4oZmlsbGVyKSwgXAorICAgICAgICAgICAgImRhdGFvZmZzZXQgbXVzdCBiZSBtdWx0aXBsZSBvZiBsZW4oZmlsbGVyKSIKKyAgICAgICAgbmNodW5rcyA9IGRhdGFvZmZzZXQgLy8gbGVuKGZpbGxlcikKKyAgICAgICAgdGVzdGxpbmVzID0gWworICAgICAgICAgICAgInNwYW0sIHNwYW0gYW5kIGVnZ3NcbiIsCisgICAgICAgICAgICAiZWdncywgc3BhbSwgaGFtIGFuZCBzcGFtXG4iLAorICAgICAgICAgICAgInNhdXNzYWdlcywgc3BhbSwgc3BhbSBhbmQgZWdnc1xuIiwKKyAgICAgICAgICAgICJzcGFtLCBoYW0sIHNwYW0gYW5kIGVnZ3NcbiIsCisgICAgICAgICAgICAic3BhbSwgc3BhbSwgc3BhbSwgc3BhbSwgc3BhbSwgaGFtLCBzcGFtXG4iLAorICAgICAgICAgICAgIndvbmRlcmZ1bCBzcGFhYWFhYW0uXG4iCisgICAgICAgIF0KKyAgICAgICAgbWV0aG9kcyA9IFsoInJlYWRsaW5lIiwgKCkpLCAoInJlYWQiLCAoKSksICgicmVhZGxpbmVzIiwgKCkpLAorICAgICAgICAgICAgICAgICAgICgicmVhZGludG8iLCAoYXJyYXkoImMiLCAiICIqMTAwKSwpKV0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFByZXBhcmUgdGhlIHRlc3RmaWxlCisgICAgICAgICAgICBiYWcgPSBvcGVuKFRFU1RGTiwgInciKQorICAgICAgICAgICAgYmFnLndyaXRlKGZpbGxlciAqIG5jaHVua3MpCisgICAgICAgICAgICBiYWcud3JpdGVsaW5lcyh0ZXN0bGluZXMpCisgICAgICAgICAgICBiYWcuY2xvc2UoKQorICAgICAgICAgICAgIyBUZXN0IGZvciBhcHByb3ByaWF0ZSBlcnJvcnMgbWl4aW5nIHJlYWQqIGFuZCBpdGVyYXRpb24KKyAgICAgICAgICAgIGZvciBtZXRob2RuYW1lLCBhcmdzIGluIG1ldGhvZHM6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOKQorICAgICAgICAgICAgICAgIGlmIGYubmV4dCgpICE9IGZpbGxlcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsLCAiQnJva2VuIHRlc3RmaWxlIgorICAgICAgICAgICAgICAgIG1ldGggPSBnZXRhdHRyKGYsIG1ldGhvZG5hbWUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtZXRoKCphcmdzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlcyVyIGFmdGVyIG5leHQoKSBkaWRuJ3QgcmFpc2UgVmFsdWVFcnJvciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXRob2RuYW1lLCBhcmdzKSkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgIyBUZXN0IHRvIHNlZSBpZiBoYXJtbGVzcyAoYnkgYWNjaWRlbnQpIG1peGluZyBvZiByZWFkKiBhbmQKKyAgICAgICAgICAgICMgaXRlcmF0aW9uIHN0aWxsIHdvcmtzLiBUaGlzIGRlcGVuZHMgb24gdGhlIHNpemUgb2YgdGhlIGludGVybmFsCisgICAgICAgICAgICAjIGl0ZXJhdGlvbiBidWZmZXIgKGN1cnJlbnRseSA4MTkyLCkgYnV0IHdlIGNhbiB0ZXN0IGl0IGluIGEKKyAgICAgICAgICAgICMgZmxleGlibGUgbWFubmVyLiAgRWFjaCBsaW5lIGluIHRoZSBiYWcgbycgaGFtIGlzIDQgYnl0ZXMKKyAgICAgICAgICAgICMgKCJoIiwgImEiLCAibSIsICJcbiIpLCBzbyA0MDk2IGxpbmVzIG9mIHRoYXQgc2hvdWxkIGdldCB1cworICAgICAgICAgICAgIyBleGFjdGx5IG9uIHRoZSBidWZmZXIgYm91bmRhcnkgZm9yIGFueSBwb3dlci1vZi0yIGJ1ZmZlcnNpemUKKyAgICAgICAgICAgICMgYmV0d2VlbiA0IGFuZCAxNjM4NCAoaW5jbHVzaXZlKS4KKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTikKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5jaHVua3MpOgorICAgICAgICAgICAgICAgIGYubmV4dCgpCisgICAgICAgICAgICB0ZXN0bGluZSA9IHRlc3RsaW5lcy5wb3AoMCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRsaW5lKCkgYWZ0ZXIgbmV4dCgpIHdpdGggc3VwcG9zZWRseSBlbXB0eSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpb24tYnVmZmVyIGZhaWxlZCBhbnl3YXkiKQorICAgICAgICAgICAgaWYgbGluZSAhPSB0ZXN0bGluZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRsaW5lKCkgYWZ0ZXIgbmV4dCgpIHdpdGggZW1wdHkgYnVmZmVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZC4gR290ICVyLCBleHBlY3RlZCAlciIgJSAobGluZSwgdGVzdGxpbmUpKQorICAgICAgICAgICAgdGVzdGxpbmUgPSB0ZXN0bGluZXMucG9wKDApCisgICAgICAgICAgICBidWYgPSBhcnJheSgiYyIsICJceDAwIiAqIGxlbih0ZXN0bGluZSkpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZi5yZWFkaW50byhidWYpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRpbnRvKCkgYWZ0ZXIgbmV4dCgpIHdpdGggc3VwcG9zZWRseSBlbXB0eSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpb24tYnVmZmVyIGZhaWxlZCBhbnl3YXkiKQorICAgICAgICAgICAgbGluZSA9IGJ1Zi50b3N0cmluZygpCisgICAgICAgICAgICBpZiBsaW5lICE9IHRlc3RsaW5lOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGludG8oKSBhZnRlciBuZXh0KCkgd2l0aCBlbXB0eSBidWZmZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkLiBHb3QgJXIsIGV4cGVjdGVkICVyIiAlIChsaW5lLCB0ZXN0bGluZSkpCisKKyAgICAgICAgICAgIHRlc3RsaW5lID0gdGVzdGxpbmVzLnBvcCgwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWQobGVuKHRlc3RsaW5lKSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZCgpIGFmdGVyIG5leHQoKSB3aXRoIHN1cHBvc2VkbHkgZW1wdHkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiaXRlcmF0aW9uLWJ1ZmZlciBmYWlsZWQgYW55d2F5IikKKyAgICAgICAgICAgIGlmIGxpbmUgIT0gdGVzdGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkKCkgYWZ0ZXIgbmV4dCgpIHdpdGggZW1wdHkgYnVmZmVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZC4gR290ICVyLCBleHBlY3RlZCAlciIgJSAobGluZSwgdGVzdGxpbmUpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkbGluZXMoKSBhZnRlciBuZXh0KCkgd2l0aCBzdXBwb3NlZGx5IGVtcHR5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGlvbi1idWZmZXIgZmFpbGVkIGFueXdheSIpCisgICAgICAgICAgICBpZiBsaW5lcyAhPSB0ZXN0bGluZXM6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWFkbGluZXMoKSBhZnRlciBuZXh0KCkgd2l0aCBlbXB0eSBidWZmZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkLiBHb3QgJXIsIGV4cGVjdGVkICVyIiAlIChsaW5lLCB0ZXN0bGluZSkpCisgICAgICAgICAgICAjIFJlYWRpbmcgYWZ0ZXIgaXRlcmF0aW9uIGhpdCBFT0Ygc2hvdWxkbid0IGh1cnQgZWl0aGVyCisgICAgICAgICAgICBmID0gb3BlbihURVNURk4pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIGYucmVhZGludG8oYnVmKQorICAgICAgICAgICAgICAgICAgICBmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZCogZmFpbGVkIGFmdGVyIG5leHQoKSBjb25zdW1lZCBmaWxlIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorCitjbGFzcyBGaWxlU3ViY2xhc3NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdEV4aXQoc2VsZik6CisgICAgICAgICMgdGVzdCB0aGF0IGV4aXRpbmcgd2l0aCBjb250ZXh0IGNhbGxzIHN1YmNsYXNzJyBjbG9zZQorICAgICAgICBjbGFzcyBDKGZpbGUpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICBzZWxmLnN1YmNsYXNzX2Nsb3NlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZmlsZS5fX2luaXRfXyhzZWxmLCAqYXJncykKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnN1YmNsYXNzX2Nsb3NlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKHNlbGYpCisKKyAgICAgICAgd2l0aCBDKFRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5zdWJjbGFzc19jbG9zZWQpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIEZpbGVUaHJlYWRpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUaGVzZSB0ZXN0cyBjaGVjayB0aGUgYWJpbGl0eSB0byBjYWxsIHZhcmlvdXMgbWV0aG9kcyBvZiBmaWxlIG9iamVjdHMKKyAgICAjIChpbmNsdWRpbmcgY2xvc2UoKSkgY29uY3VycmVudGx5IHdpdGhvdXQgY3Jhc2hpbmcgdGhlIFB5dGhvbiBpbnRlcnByZXRlci4KKyAgICAjIFNlZSAjODE1NjQ2LCAjNTk1NjAxCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3RocmVhZHMgPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKyAgICAgICAgc2VsZi5mID0gTm9uZQorICAgICAgICBzZWxmLmZpbGVuYW1lID0gVEVTVEZOCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJcbiIuam9pbigiMDEyMzQ1Njc4OSIpKQorICAgICAgICBzZWxmLl9jb3VudF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLmNsb3NlX2NvdW50ID0gMAorICAgICAgICBzZWxmLmNsb3NlX3N1Y2Nlc3NfY291bnQgPSAwCisgICAgICAgIHNlbGYudXNlX2J1ZmZlcmluZyA9IEZhbHNlCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IChFbnZpcm9ubWVudEVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLmZpbGVuYW1lKQorICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdGVzdF9zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQorCisgICAgZGVmIF9jcmVhdGVfZmlsZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi51c2VfYnVmZmVyaW5nOgorICAgICAgICAgICAgc2VsZi5mID0gb3BlbihzZWxmLmZpbGVuYW1lLCAidysiLCBidWZmZXJpbmc9MTAyNCoxNikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZiA9IG9wZW4oc2VsZi5maWxlbmFtZSwgIncrIikKKworICAgIGRlZiBfY2xvc2VfZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLl9jb3VudF9sb2NrOgorICAgICAgICAgICAgc2VsZi5jbG9zZV9jb3VudCArPSAxCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIHdpdGggc2VsZi5fY291bnRfbG9jazoKKyAgICAgICAgICAgIHNlbGYuY2xvc2Vfc3VjY2Vzc19jb3VudCArPSAxCisKKyAgICBkZWYgX2Nsb3NlX2FuZF9yZW9wZW5fZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fY2xvc2VfZmlsZSgpCisgICAgICAgICMgaWYgY2xvc2UgcmFpc2VzIGFuIGV4Y2VwdGlvbiB0aGF0cyBmaW5lLCBzZWxmLmYgcmVtYWlucyB2YWxpZCBzbworICAgICAgICAjIHdlIGRvbid0IG5lZWQgdG8gcmVvcGVuLgorICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSgpCisKKyAgICBkZWYgX3J1bl93b3JrZXJzKHNlbGYsIGZ1bmMsIG5iX3dvcmtlcnMsIGR1cmF0aW9uPTAuMik6CisgICAgICAgIHdpdGggc2VsZi5fY291bnRfbG9jazoKKyAgICAgICAgICAgIHNlbGYuY2xvc2VfY291bnQgPSAwCisgICAgICAgICAgICBzZWxmLmNsb3NlX3N1Y2Nlc3NfY291bnQgPSAwCisgICAgICAgIHNlbGYuZG9fY29udGludWUgPSBUcnVlCisgICAgICAgIHRocmVhZHMgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShuYl93b3JrZXJzKToKKyAgICAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZnVuYykKKyAgICAgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQorICAgICAgICAgICAgZm9yIF8gaW4geHJhbmdlKDEwMCk6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcChkdXJhdGlvbi8xMDApCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLl9jb3VudF9sb2NrOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNsb3NlX2NvdW50LXNlbGYuY2xvc2Vfc3VjY2Vzc19jb3VudCA+IG5iX3dvcmtlcnMrMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICdRJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0aW1lLnNsZWVwKGR1cmF0aW9uKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5kb19jb250aW51ZSA9IEZhbHNlCisgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgIHQuam9pbigpCisKKyAgICBkZWYgX3Rlc3RfY2xvc2Vfb3Blbl9pbyhzZWxmLCBpb19mdW5jLCBuYl93b3JrZXJzPTUpOgorICAgICAgICBkZWYgd29ya2VyKCk6CisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSgpCisgICAgICAgICAgICBmdW5jcyA9IGl0ZXJ0b29scy5jeWNsZSgoCisgICAgICAgICAgICAgICAgbGFtYmRhOiBpb19mdW5jKCksCisgICAgICAgICAgICAgICAgbGFtYmRhOiBzZWxmLl9jbG9zZV9hbmRfcmVvcGVuX2ZpbGUoKSwKKyAgICAgICAgICAgICkpCisgICAgICAgICAgICBmb3IgZiBpbiBmdW5jczoKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kb19jb250aW51ZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5fcnVuX3dvcmtlcnMod29ya2VyLCBuYl93b3JrZXJzKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICMgVXNlZnVsIHZlcmJvc2Ugc3RhdGlzdGljcyB3aGVuIHR1bmluZyB0aGlzIHRlc3QgdG8gdGFrZQorICAgICAgICAgICAgIyBsZXNzIHRpbWUgdG8gcnVuIGJ1dCBzdGlsbCBlbnN1cmluZyB0aGF0IGl0cyBzdGlsbCB1c2VmdWwuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIHRoZSBwZXJjZW50IG9mIGNsb3NlIGNhbGxzIHRoYXQgcmFpc2VkIGFuIGVycm9yCisgICAgICAgICAgICBwZXJjZW50ID0gMTAwLiAtIDEwMC4qc2VsZi5jbG9zZV9zdWNjZXNzX2NvdW50L3NlbGYuY2xvc2VfY291bnQKKyAgICAgICAgICAgIHByaW50IHNlbGYuY2xvc2VfY291bnQsICgnJS40ZiAnICUgcGVyY2VudCksCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fZmx1c2goc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYuZmx1c2goKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5faXRlcihzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIGxpc3QoaXRlcihzZWxmLmYpKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5faXNhdHR5KHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgc2VsZi5mLmlzYXR0eSgpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9wcmludChzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHByaW50ID4+IHNlbGYuZiwgJycKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3ByaW50X2J1ZmZlcmVkKHNlbGYpOgorICAgICAgICBzZWxmLnVzZV9idWZmZXJpbmcgPSBUcnVlCisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBwcmludCA+PiBzZWxmLmYsICcnCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9yZWFkKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgc2VsZi5mLnJlYWQoMCkKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3JlYWRpbnRvKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgYSA9IGFycmF5KCdjJywgJ3h4eHh4JykKKyAgICAgICAgICAgIHNlbGYuZi5yZWFkaW50byhhKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fcmVhZGxpbmUoc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYucmVhZGxpbmUoKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlX29wZW5faW8oaW9fZnVuYykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29wZW5fcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgc2VsZi5mLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl9zZWVrKHNlbGYpOgorICAgICAgICBkZWYgaW9fZnVuYygpOgorICAgICAgICAgICAgc2VsZi5mLnNlZWsoMCwgMCkKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3RlbGwoc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYudGVsbCgpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl90cnVuY2F0ZShzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHNlbGYuZi50cnVuY2F0ZSgpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2Vfb3Blbl9pbyhpb19mdW5jKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb3Blbl93cml0ZShzZWxmKToKKyAgICAgICAgZGVmIGlvX2Z1bmMoKToKKyAgICAgICAgICAgIHNlbGYuZi53cml0ZSgnJykKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9vcGVuX3dyaXRlbGluZXMoc2VsZik6CisgICAgICAgIGRlZiBpb19mdW5jKCk6CisgICAgICAgICAgICBzZWxmLmYud3JpdGVsaW5lcygnJykKKyAgICAgICAgc2VsZi5fdGVzdF9jbG9zZV9vcGVuX2lvKGlvX2Z1bmMpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAndGVzdCByZXF1aXJlcyBhIHBvc2l4IHN5c3RlbS4nKQorY2xhc3MgVGVzdEZpbGVTaWduYWxFSU5UUih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIF90ZXN0X3JlYWRpbmcoc2VsZiwgZGF0YV90b193cml0ZSwgcmVhZF9hbmRfdmVyaWZ5X2NvZGUsIG1ldGhvZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSk6CisgICAgICAgICIiIkdlbmVyaWMgYnVmZmVyZWQgcmVhZCBtZXRob2QgdGVzdCBoYXJuZXNzIHRvIHZlcmlmeSBFSU5UUiBiZWhhdmlvci4KKworICAgICAgICBBbHNvIHZhbGlkYXRlcyB0aGF0IFB5dGhvbiBzaWduYWwgaGFuZGxlcnMgYXJlIHJ1biBkdXJpbmcgdGhlIHJlYWQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRhdGFfdG9fd3JpdGU6IFN0cmluZyB0byB3cml0ZSB0byB0aGUgY2hpbGQgcHJvY2VzcyBmb3IgcmVhZGluZworICAgICAgICAgICAgICAgIGJlZm9yZSBzZW5kaW5nIGl0IGEgc2lnbmFsLCBjb25maXJtaW5nIHRoZSBzaWduYWwgd2FzIGhhbmRsZWQsCisgICAgICAgICAgICAgICAgd3JpdGluZyBhIGZpbmFsIG5ld2xpbmUgY2hhciBhbmQgY2xvc2luZyB0aGUgaW5maWxlIHBpcGUuCisgICAgICAgICAgICByZWFkX2FuZF92ZXJpZnlfY29kZTogU2luZ2xlICJsaW5lIiBvZiBjb2RlIHRvIHJlYWQgZnJvbSBhIGZpbGUKKyAgICAgICAgICAgICAgICBvYmplY3QgbmFtZWQgJ2luZmlsZScgYW5kIHZhbGlkYXRlIHRoZSByZXN1bHQuICBUaGlzIHdpbGwgYmUKKyAgICAgICAgICAgICAgICBleGVjdXRlZCBhcyBwYXJ0IG9mIGEgcHl0aG9uIHN1YnByb2Nlc3MgZmVkIGRhdGFfdG9fd3JpdGUuCisgICAgICAgICAgICBtZXRob2RfbmFtZTogVGhlIG5hbWUgb2YgdGhlIHJlYWQgbWV0aG9kIGJlaW5nIHRlc3RlZCwgZm9yIHVzZSBpbgorICAgICAgICAgICAgICAgIGFuIGVycm9yIG1lc3NhZ2Ugb24gZmFpbHVyZS4KKyAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lczogSWYgVHJ1ZSwgaW5maWxlIHdpbGwgYmUgb3BlbmVkIGluIHVuaXZlcnNhbAorICAgICAgICAgICAgICAgIG5ld2xpbmUgbW9kZSBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHVuaXZlcnNhbF9uZXdsaW5lczoKKyAgICAgICAgICAgICMgVGVzdCB0aGUgXHJcbiAtPiBcbiBjb252ZXJzaW9uIHdoaWxlIHdlJ3JlIGF0IGl0LgorICAgICAgICAgICAgZGF0YV90b193cml0ZSA9IGRhdGFfdG9fd3JpdGUucmVwbGFjZSgnXG4nLCAnXHJcbicpCisgICAgICAgICAgICBpbmZpbGVfc2V0dXBfY29kZSA9ICdpbmZpbGUgPSBvcy5mZG9wZW4oc3lzLnN0ZGluLmZpbGVubygpLCAiclUiKScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluZmlsZV9zZXR1cF9jb2RlID0gJ2luZmlsZSA9IHN5cy5zdGRpbicKKyAgICAgICAgIyBUb3RhbCBwaXBlIElPIGluIHRoaXMgZnVuY3Rpb24gaXMgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIHBvc2l4IE9TCisgICAgICAgICMgcGlwZSBidWZmZXIgc2l6ZSBvZiA1MTIgYnl0ZXMuICBObyB3cml0ZXIgc2hvdWxkIGJsb2NrLgorICAgICAgICBhc3NlcnQgbGVuKGRhdGFfdG9fd3JpdGUpIDwgNTEyLCAnZGF0YV90b193cml0ZSBtdXN0IGZpdCBpbiBwaXBlIGJ1Zi4nCisKKyAgICAgICAgY2hpbGRfY29kZSA9ICgKKyAgICAgICAgICAgICAnaW1wb3J0IG9zLCBzaWduYWwsIHN5cyA7JworICAgICAgICAgICAgICdzaWduYWwuc2lnbmFsKCcKKyAgICAgICAgICAgICAgICAgICAgICdzaWduYWwuU0lHSU5ULCBsYW1iZGEgcywgZjogc3lzLnN0ZGVyci53cml0ZSgiJFxcbiIpKSA7JworICAgICAgICAgICAgICsgaW5maWxlX3NldHVwX2NvZGUgKyAnIDsnICsKKyAgICAgICAgICAgICAnYXNzZXJ0IGlzaW5zdGFuY2UoaW5maWxlLCBmaWxlKSA7JworICAgICAgICAgICAgICdzeXMuc3RkZXJyLndyaXRlKCJHby5cXG4iKSA7JworICAgICAgICAgICAgICsgcmVhZF9hbmRfdmVyaWZ5X2NvZGUpCisgICAgICAgIHJlYWRlcl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICctYycsIGNoaWxkX2NvZGVdLAorICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAjIFdhaXQgZm9yIHRoZSBzaWduYWwgaGFuZGxlciB0byBiZSBpbnN0YWxsZWQuCisgICAgICAgIGdvID0gcmVhZGVyX3Byb2Nlc3Muc3RkZXJyLnJlYWQoNCkKKyAgICAgICAgaWYgZ28gIT0gJ0dvLlxuJzoKKyAgICAgICAgICAgIHJlYWRlcl9wcm9jZXNzLmtpbGwoKQorICAgICAgICAgICAgc2VsZi5mYWlsKCdFcnJvciBmcm9tICVzIHByb2Nlc3Mgd2hpbGUgYXdhaXRpbmcgIkdvIjpcbiVzJyAlICgKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kX25hbWUsIGdvK3JlYWRlcl9wcm9jZXNzLnN0ZGVyci5yZWFkKCkpKQorICAgICAgICByZWFkZXJfcHJvY2Vzcy5zdGRpbi53cml0ZShkYXRhX3RvX3dyaXRlKQorICAgICAgICBzaWduYWxzX3NlbnQgPSAwCisgICAgICAgIHJsaXN0ID0gW10KKyAgICAgICAgIyBXZSBkb24ndCBrbm93IHdoZW4gdGhlIHJlYWRfYW5kX3ZlcmlmeV9jb2RlIGluIG91ciBjaGlsZCBpcyBhY3R1YWxseQorICAgICAgICAjIGV4ZWN1dGluZyB3aXRoaW4gdGhlIHJlYWQgc3lzdGVtIGNhbGwgd2Ugd2FudCB0byBpbnRlcnJ1cHQuICBUaGlzCisgICAgICAgICMgbG9vcCB3YWl0cyBmb3IgYSBiaXQgYmVmb3JlIHNlbmRpbmcgdGhlIGZpcnN0IHNpZ25hbCB0byBpbmNyZWFzZQorICAgICAgICAjIHRoZSBsaWtlbGlob29kIG9mIHRoYXQuICBJbXBsZW1lbnRhdGlvbnMgd2l0aG91dCBjb3JyZWN0IEVJTlRSCisgICAgICAgICMgYW5kIHNpZ25hbCBoYW5kbGluZyB1c3VhbGx5IGZhaWwgdGhpcyB0ZXN0LgorICAgICAgICB3aGlsZSBub3Qgcmxpc3Q6CisgICAgICAgICAgICBybGlzdCwgXywgXyA9IHNlbGVjdC5zZWxlY3QoW3JlYWRlcl9wcm9jZXNzLnN0ZGVycl0sICgpLCAoKSwgMC4wNSkKKyAgICAgICAgICAgIHJlYWRlcl9wcm9jZXNzLnNlbmRfc2lnbmFsKHNpZ25hbC5TSUdJTlQpCisgICAgICAgICAgICAjIEdpdmUgdGhlIHN1YnByb2Nlc3MgdGltZSB0byBoYW5kbGUgaXQgYmVmb3JlIHdlIGxvb3AgYXJvdW5kIGFuZAorICAgICAgICAgICAgIyBzZW5kIGFub3RoZXIgb25lLiAgT24gT1NYIHRoZSBzZWNvbmQgc2lnbmFsIGhhcHBlbmluZyBjbG9zZSB0bworICAgICAgICAgICAgIyBpbW1lZGlhdGVseSBhZnRlciB0aGUgZmlyc3Qgd2FzIGNhdXNpbmcgdGhlIHN1YnByb2Nlc3MgdG8gY3Jhc2gKKyAgICAgICAgICAgICMgdmlhIHRoZSBPUydzIGRlZmF1bHQgU0lHSU5UIGhhbmRsZXIuCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgIHNpZ25hbHNfc2VudCArPSAxCisgICAgICAgICAgICBpZiBzaWduYWxzX3NlbnQgPiAyMDA6CisgICAgICAgICAgICAgICAgcmVhZGVyX3Byb2Nlc3Mua2lsbCgpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJmYWlsZWQgdG8gaGFuZGxlIHNpZ25hbCBkdXJpbmcgJXMuIiAlIG1ldGhvZF9uYW1lKQorICAgICAgICAjIFRoaXMgYXNzdW1lcyBhbnl0aGluZyB1bmV4cGVjdGVkIHRoYXQgd3JpdGVzIHRvIHN0ZGVyciB3aWxsIGFsc28KKyAgICAgICAgIyB3cml0ZSBhIG5ld2xpbmUuICBUaGF0IGlzIHRydWUgb2YgdGhlIHRyYWNlYmFjayBwcmludGluZyBjb2RlLgorICAgICAgICBzaWduYWxfbGluZSA9IHJlYWRlcl9wcm9jZXNzLnN0ZGVyci5yZWFkbGluZSgpCisgICAgICAgIGlmIHNpZ25hbF9saW5lICE9ICckXG4nOgorICAgICAgICAgICAgcmVhZGVyX3Byb2Nlc3Mua2lsbCgpCisgICAgICAgICAgICBzZWxmLmZhaWwoJ0Vycm9yIGZyb20gJXMgcHJvY2VzcyB3aGlsZSBhd2FpdGluZyBzaWduYWw6XG4lcycgJSAoCisgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9uYW1lLCBzaWduYWxfbGluZStyZWFkZXJfcHJvY2Vzcy5zdGRlcnIucmVhZCgpKSkKKyAgICAgICAgIyBXZSBhcHBlbmQgYSBuZXdsaW5lIHRvIG91ciBpbnB1dCBzbyB0aGF0IGEgcmVhZGxpbmUgY2FsbCBjYW4KKyAgICAgICAgIyBlbmQgb24gaXRzIG93biBiZWZvcmUgdGhlIEVPRiBpcyBzZWVuLgorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHJlYWRlcl9wcm9jZXNzLmNvbW11bmljYXRlKGlucHV0PSdcbicpCisgICAgICAgIGlmIHJlYWRlcl9wcm9jZXNzLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnJXMoKSBwcm9jZXNzIGV4aXRlZCByYz0lZC5cblNURE9VVDpcbiVzXG5TVERFUlI6XG4lcycgJSAoCisgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9uYW1lLCByZWFkZXJfcHJvY2Vzcy5yZXR1cm5jb2RlLCBzdGRvdXQsIHN0ZGVycikpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UpOgorICAgICAgICAiIiJmaWxlLnJlYWRsaW5lIG11c3QgaGFuZGxlIHNpZ25hbHMgYW5kIG5vdCBsb3NlIGRhdGEuIiIiCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGluZygKKyAgICAgICAgICAgICAgICBkYXRhX3RvX3dyaXRlPSdoZWxsbywgd29ybGQhJywKKyAgICAgICAgICAgICAgICByZWFkX2FuZF92ZXJpZnlfY29kZT0oCisgICAgICAgICAgICAgICAgICAgICAgICAnbGluZSA9IGluZmlsZS5yZWFkbGluZSgpIDsnCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwZWN0ZWRfbGluZSA9ICJoZWxsbywgd29ybGQhXFxuIiA7JworICAgICAgICAgICAgICAgICAgICAgICAgJ2Fzc2VydCBsaW5lID09IGV4cGVjdGVkX2xpbmUsICgnCisgICAgICAgICAgICAgICAgICAgICAgICAnInJlYWQgJXIgZXhwZWN0ZWQgJXIiICUgKGxpbmUsIGV4cGVjdGVkX2xpbmUpKScKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIG1ldGhvZF9uYW1lPSdyZWFkbGluZScsCisgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPXVuaXZlcnNhbF9uZXdsaW5lcykKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX3dpdGhfdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfcmVhZGxpbmUodW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZiwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlKToKKyAgICAgICAgIiIiZmlsZS5yZWFkbGluZXMgbXVzdCBoYW5kbGUgc2lnbmFscyBhbmQgbm90IGxvc2UgZGF0YS4iIiIKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkaW5nKAorICAgICAgICAgICAgICAgIGRhdGFfdG9fd3JpdGU9J2hlbGxvXG53b3JsZCEnLAorICAgICAgICAgICAgICAgIHJlYWRfYW5kX3ZlcmlmeV9jb2RlPSgKKyAgICAgICAgICAgICAgICAgICAgICAgICdsaW5lcyA9IGluZmlsZS5yZWFkbGluZXMoKSA7JworICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGVjdGVkX2xpbmVzID0gWyJoZWxsb1xcbiIsICJ3b3JsZCFcXG4iXSA7JworICAgICAgICAgICAgICAgICAgICAgICAgJ2Fzc2VydCBsaW5lcyA9PSBleHBlY3RlZF9saW5lcywgKCcKKyAgICAgICAgICAgICAgICAgICAgICAgICcicmVhZGxpbmVzIHJldHVybmVkIHdyb25nIGRhdGEuXFxuIiAnCisgICAgICAgICAgICAgICAgICAgICAgICAnImdvdCBsaW5lcyAlclxcbmV4cGVjdGVkICAlciIgJworICAgICAgICAgICAgICAgICAgICAgICAgJyUgKGxpbmVzLCBleHBlY3RlZF9saW5lcykpJworICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgbWV0aG9kX25hbWU9J3JlYWRsaW5lcycsCisgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPXVuaXZlcnNhbF9uZXdsaW5lcykKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lc193aXRoX3VuaXZlcnNhbF9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X3JlYWRsaW5lcyh1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3JlYWRhbGwoc2VsZik6CisgICAgICAgICIiIlVuYm91bmRlZCBmaWxlLnJlYWQoKSBtdXN0IGhhbmRsZSBzaWduYWxzIGFuZCBub3QgbG9zZSBkYXRhLiIiIgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRpbmcoCisgICAgICAgICAgICAgICAgZGF0YV90b193cml0ZT0naGVsbG8sIHdvcmxkIWFiY2RlZmdoaWprbG0nLAorICAgICAgICAgICAgICAgIHJlYWRfYW5kX3ZlcmlmeV9jb2RlPSgKKyAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhID0gaW5maWxlLnJlYWQoKSA7JworICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGVjdGVkX2RhdGEgPSAiaGVsbG8sIHdvcmxkIWFiY2RlZmdoaWprbG1cXG4iOycKKyAgICAgICAgICAgICAgICAgICAgICAgICdhc3NlcnQgZGF0YSA9PSBleHBlY3RlZF9kYXRhLCAoJworICAgICAgICAgICAgICAgICAgICAgICAgJyJyZWFkICVyIGV4cGVjdGVkICVyIiAlIChkYXRhLCBleHBlY3RlZF9kYXRhKSknCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICBtZXRob2RfbmFtZT0ndW5ib3VuZGVkIHJlYWQnKQorCisgICAgZGVmIHRlc3RfcmVhZGludG8oc2VsZik6CisgICAgICAgICIiImZpbGUucmVhZGludG8gbXVzdCBoYW5kbGUgc2lnbmFscyBhbmQgbm90IGxvc2UgZGF0YS4iIiIKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkaW5nKAorICAgICAgICAgICAgICAgIGRhdGFfdG9fd3JpdGU9J2hlbGxvLCB3b3JsZCEnLAorICAgICAgICAgICAgICAgIHJlYWRfYW5kX3ZlcmlmeV9jb2RlPSgKKyAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhID0gYnl0ZWFycmF5KDUwKSA7JworICAgICAgICAgICAgICAgICAgICAgICAgJ251bV9yZWFkID0gaW5maWxlLnJlYWRpbnRvKGRhdGEpIDsnCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwZWN0ZWRfZGF0YSA9ICJoZWxsbywgd29ybGQhXFxuIjsnCisgICAgICAgICAgICAgICAgICAgICAgICAnYXNzZXJ0IGRhdGFbOm51bV9yZWFkXSA9PSBleHBlY3RlZF9kYXRhLCAoJworICAgICAgICAgICAgICAgICAgICAgICAgJyJyZWFkICVyIGV4cGVjdGVkICVyIiAlIChkYXRhLCBleHBlY3RlZF9kYXRhKSknCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICBtZXRob2RfbmFtZT0ncmVhZGludG8nKQorCisKK2NsYXNzIFN0ZG91dFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X21vdmVfc3Rkb3V0X29uX3dyaXRlKHNlbGYpOgorICAgICAgICAjIElzc3VlIDMyNDI6IHN5cy5zdGRvdXQgY2FuIGJlIHJlcGxhY2VkIChhbmQgZnJlZWQpIGR1cmluZyBhCisgICAgICAgICMgcHJpbnQgc3RhdGVtZW50OyBwcmV2ZW50IGEgc2VnZmF1bHQgaW4gdGhpcyBjYXNlCisgICAgICAgIHNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAorCisgICAgICAgIGNsYXNzIEZpbGU6CisgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICAgICAgaWYgJ1xuJyBpbiBkYXRhOgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZV9zdGRvdXQKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gRmlsZSgpCisgICAgICAgICAgICBwcmludCAic29tZSB0ZXh0IgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0CisKKyAgICBkZWYgdGVzdF9kZWxfc3Rkb3V0X2JlZm9yZV9wcmludChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA0NTk3OiAncHJpbnQnIHdpdGggbm8gYXJndW1lbnQgd2Fzbid0IHJlcG9ydGluZyB3aGVuCisgICAgICAgICMgc3lzLnN0ZG91dCB3YXMgZGVsZXRlZC4KKyAgICAgICAgc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIGRlbCBzeXMuc3Rkb3V0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaW50CisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAibG9zdCBzeXMuc3Rkb3V0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgUnVudGltZUVycm9yIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAorCisgICAgZGVmIHRlc3RfdW5pY29kZShzZWxmKToKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgICAgICBkZWYgZ2V0X21lc3NhZ2UoZW5jb2RpbmcsICpjb2RlKToKKyAgICAgICAgICAgIGNvZGUgPSAnXG4nLmpvaW4oY29kZSkKKyAgICAgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgICAgICBlbnZbJ1BZVEhPTklPRU5DT0RJTkcnXSA9IGVuY29kaW5nCisgICAgICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsIGNvZGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgZW52PWVudikKKyAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Nlc3MucmV0dXJuY29kZSwgMCkKKyAgICAgICAgICAgIHJldHVybiBzdGRvdXQKKworICAgICAgICBkZWYgY2hlY2tfbWVzc2FnZSh0ZXh0LCBlbmNvZGluZywgZXhwZWN0ZWQpOgorICAgICAgICAgICAgc3Rkb3V0ID0gZ2V0X21lc3NhZ2UoZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgImltcG9ydCBzeXMiLAorICAgICAgICAgICAgICAgICJzeXMuc3Rkb3V0LndyaXRlKCVyKSIgJSB0ZXh0LAorICAgICAgICAgICAgICAgICJzeXMuc3Rkb3V0LmZsdXNoKCkiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGV4cGVjdGVkKQorCisgICAgICAgICMgdGVzdCB0aGUgZW5jb2RpbmcKKyAgICAgICAgY2hlY2tfbWVzc2FnZSh1JzE1XHUyMGFjJywgImlzby04ODU5LTE1IiwgIjE1XHhhNCIpCisgICAgICAgIGNoZWNrX21lc3NhZ2UodScxNVx1MjBhYycsICJ1dGYtOCIsICcxNVx4ZTJceDgyXHhhYycpCisgICAgICAgIGNoZWNrX21lc3NhZ2UodScxNVx1MjBhYycsICJ1dGYtMTYtbGUiLCAnMVx4MDA1XHgwMFx4YWNceDIwJykKKworICAgICAgICAjIHRlc3QgdGhlIGVycm9yIGhhbmRsZXIKKyAgICAgICAgY2hlY2tfbWVzc2FnZSh1JzE1XHUyMGFjJywgImlzby04ODU5LTE6aWdub3JlIiwgIjE1IikKKyAgICAgICAgY2hlY2tfbWVzc2FnZSh1JzE1XHUyMGFjJywgImlzby04ODU5LTE6cmVwbGFjZSIsICIxNT8iKQorICAgICAgICBjaGVja19tZXNzYWdlKHUnMTVcdTIwYWMnLCAiaXNvLTg4NTktMTpiYWNrc2xhc2hyZXBsYWNlIiwgIjE1XFx1MjBhYyIpCisKKyAgICAgICAgIyB0ZXN0IHRoZSBidWZmZXIgQVBJCisgICAgICAgIGZvciBvYmp0eXBlIGluICgnYnVmZmVyJywgJ2J5dGVhcnJheScpOgorICAgICAgICAgICAgc3Rkb3V0ID0gZ2V0X21lc3NhZ2UoJ2FzY2lpJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cycsCisgICAgICAgICAgICAgICAgcidzeXMuc3Rkb3V0LndyaXRlKCVzKCJceGU5IikpJyAlIG9ianR5cGUsCisgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQuZmx1c2goKScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgIlx4ZTkiKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICAjIEhpc3RvcmljYWxseSwgdGhlc2UgdGVzdHMgaGF2ZSBiZWVuIHNsb3BweSBhYm91dCByZW1vdmluZyBURVNURk4uCisgICAgIyBTbyBnZXQgcmlkIG9mIGl0IG5vIG1hdHRlciB3aGF0LgorICAgIHRyeToKKyAgICAgICAgcnVuX3VuaXR0ZXN0KEF1dG9GaWxlVGVzdHMsIE90aGVyRmlsZVRlc3RzLCBGaWxlU3ViY2xhc3NUZXN0cywKKyAgICAgICAgICAgIEZpbGVUaHJlYWRpbmdUZXN0cywgVGVzdEZpbGVTaWduYWxFSU5UUiwgU3Rkb3V0VGVzdHMpCisgICAgZmluYWxseToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoVEVTVEZOKToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ZpbGVfZWludHIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9maWxlX2VpbnRyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YmZmM2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9maWxlX2VpbnRyLnB5CkBAIC0wLDAgKzEsMjM5IEBACisjIFdyaXR0ZW4gdG8gdGVzdCBpbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbHMgaW50ZXJmZXJpbmcgd2l0aCBvdXIgbWFueSBidWZmZXJlZAorIyBJTyBpbXBsZW1lbnRhdGlvbnMuICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTIyNjgKKyMKKyMgVGhpcyB0ZXN0cyB0aGUgJ19pbycgbW9kdWxlLiAgU2ltaWxhciB0ZXN0cyBmb3IgUHl0aG9uIDIueCdzIG9sZGVyCisjIGRlZmF1bHQgZmlsZSBJL08gaW1wbGVtZW50YXRpb24gZXhpc3Qgd2l0aGluIHRlc3RfZmlsZTJrLnB5LgorIworIyBJdCB3YXMgc3VnZ2VzdGVkIHRoYXQgdGhpcyBjb2RlIGNvdWxkIGJlIG1lcmdlZCBpbnRvIHRlc3RfaW8gYW5kIHRoZSB0ZXN0cworIyBtYWRlIHRvIHdvcmsgdXNpbmcgdGhlIHNhbWUgbWV0aG9kIGFzIHRoZSBleGlzdGluZyBzaWduYWwgdGVzdHMgaW4gdGVzdF9pby4KKyMgSSB3YXMgdW5hYmxlIHRvIGdldCBzaW5nbGUgcHJvY2VzcyB0ZXN0cyB1c2luZyBhbGFybSBvciBzZXRpdGltZXIgdGhhdCB3YXkKKyMgdG8gcmVwcm9kdWNlIHRoZSBFSU5UUiBwcm9ibGVtcy4gIFRoaXMgcHJvY2VzcyBiYXNlZCB0ZXN0IHN1aXRlIHJlcHJvZHVjZXMKKyMgdGhlIHByb2JsZW1zIHByaW9yIHRvIHRoZSBpc3N1ZTEyMjY4IHBhdGNoIHJlbGlhYmx5IG9uIExpbnV4IGFuZCBPU1guCisjICAtIGdyZWdvcnkucC5zbWl0aAorCitpbXBvcnQgb3MKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworIyBUZXN0IGltcG9ydCBhbGwgb2YgdGhlIHRoaW5ncyB3ZSdyZSBhYm91dCB0byB0cnkgdGVzdGluZyB1cCBmcm9udC4KK2Zyb20gX2lvIGltcG9ydCBGaWxlSU8KKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICdwb3NpeCcsICd0ZXN0cyByZXF1aXJlcyBhIHBvc2l4IHN5c3RlbS4nKQorY2xhc3MgVGVzdEZpbGVJT1NpZ25hbEludGVycnVwdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9wcm9jZXNzID0gTm9uZQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9jZXNzIGFuZCBzZWxmLl9wcm9jZXNzLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mua2lsbCgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX2dlbmVyYXRlX2luZmlsZV9zZXR1cF9jb2RlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBpbmZpbGUgPSAuLi4gbGluZSBvZiBjb2RlIGZvciB0aGUgcmVhZGVyIHByb2Nlc3MuCisKKyAgICAgICAgc3ViY2xhc3Nlc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIHRvIHRlc3QgZGlmZmVyZW50IElPIG9iamVjdHMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gKCdpbXBvcnQgX2lvIDsnCisgICAgICAgICAgICAgICAgJ2luZmlsZSA9IF9pby5GaWxlSU8oc3lzLnN0ZGluLmZpbGVubygpLCAicmIiKScpCisKKyAgICBkZWYgZmFpbF93aXRoX3Byb2Nlc3NfaW5mbyhzZWxmLCB3aHksIHN0ZG91dD1iJycsIHN0ZGVycj1iJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbXVuaWNhdGU9VHJ1ZSk6CisgICAgICAgICIiIkEgY29tbW9uIHdheSB0byBjbGVhbnVwIGFuZCBmYWlsIHdpdGggdXNlZnVsIGRlYnVnIG91dHB1dC4KKworICAgICAgICBLaWxscyB0aGUgcHJvY2VzcyBpZiBpdCBpcyBzdGlsbCBydW5uaW5nLCBjb2xsZWN0cyByZW1haW5pbmcgb3V0cHV0CisgICAgICAgIGFuZCBmYWlscyB0aGUgdGVzdCB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSBvdXRwdXQuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHdoeTogVGV4dCB0byBnbyBhZnRlciAiRXJyb3IgZnJvbSBJTyBwcm9jZXNzIiBpbiB0aGUgbWVzc2FnZS4KKyAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyOiBzdGFuZGFyZCBvdXRwdXQgYW5kIGVycm9yIGZyb20gdGhlIHByb2Nlc3Mgc28KKyAgICAgICAgICAgICAgICBmYXIgdG8gaW5jbHVkZSBpbiB0aGUgZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgICAgIGNvbW11bmljYXRlOiBib29sLCB3aGVuIFRydWUgd2UgY2FsbCBjb21tdW5pY2F0ZSgpIG9uIHRoZSBwcm9jZXNzCisgICAgICAgICAgICAgICAgYWZ0ZXIga2lsbGluZyBpdCB0byBnYXRoZXIgYWRkaXRpb25hbCBvdXRwdXQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9wcm9jZXNzLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpICAjIGdpdmUgaXQgdGltZSB0byBmaW5pc2ggcHJpbnRpbmcgdGhlIGVycm9yLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MudGVybWluYXRlKCkgICMgRW5zdXJlIGl0IGRpZXMuCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIGNvbW11bmljYXRlOgorICAgICAgICAgICAgc3Rkb3V0X2VuZCwgc3RkZXJyX2VuZCA9IHNlbGYuX3Byb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgc3Rkb3V0ICs9IHN0ZG91dF9lbmQKKyAgICAgICAgICAgIHN0ZGVyciArPSBzdGRlcnJfZW5kCisgICAgICAgIHNlbGYuZmFpbCgnRXJyb3IgZnJvbSBJTyBwcm9jZXNzICVzOlxuU1RET1VUOlxuJXNTVERFUlI6XG4lc1xuJyAlCisgICAgICAgICAgICAgICAgICAod2h5LCBzdGRvdXQuZGVjb2RlKCksIHN0ZGVyci5kZWNvZGUoKSkpCisKKyAgICBkZWYgX3Rlc3RfcmVhZGluZyhzZWxmLCBkYXRhX3RvX3dyaXRlLCByZWFkX2FuZF92ZXJpZnlfY29kZSk6CisgICAgICAgICIiIkdlbmVyaWMgYnVmZmVyZWQgcmVhZCBtZXRob2QgdGVzdCBoYXJuZXNzIHRvIHZhbGlkYXRlIEVJTlRSIGJlaGF2aW9yLgorCisgICAgICAgIEFsc28gdmFsaWRhdGVzIHRoYXQgUHl0aG9uIHNpZ25hbCBoYW5kbGVycyBhcmUgcnVuIGR1cmluZyB0aGUgcmVhZC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZGF0YV90b193cml0ZTogU3RyaW5nIHRvIHdyaXRlIHRvIHRoZSBjaGlsZCBwcm9jZXNzIGZvciByZWFkaW5nCisgICAgICAgICAgICAgICAgYmVmb3JlIHNlbmRpbmcgaXQgYSBzaWduYWwsIGNvbmZpcm1pbmcgdGhlIHNpZ25hbCB3YXMgaGFuZGxlZCwKKyAgICAgICAgICAgICAgICB3cml0aW5nIGEgZmluYWwgbmV3bGluZSBhbmQgY2xvc2luZyB0aGUgaW5maWxlIHBpcGUuCisgICAgICAgICAgICByZWFkX2FuZF92ZXJpZnlfY29kZTogU2luZ2xlICJsaW5lIiBvZiBjb2RlIHRvIHJlYWQgZnJvbSBhIGZpbGUKKyAgICAgICAgICAgICAgICBvYmplY3QgbmFtZWQgJ2luZmlsZScgYW5kIHZhbGlkYXRlIHRoZSByZXN1bHQuICBUaGlzIHdpbGwgYmUKKyAgICAgICAgICAgICAgICBleGVjdXRlZCBhcyBwYXJ0IG9mIGEgcHl0aG9uIHN1YnByb2Nlc3MgZmVkIGRhdGFfdG9fd3JpdGUuCisgICAgICAgICIiIgorICAgICAgICBpbmZpbGVfc2V0dXBfY29kZSA9IHNlbGYuX2dlbmVyYXRlX2luZmlsZV9zZXR1cF9jb2RlKCkKKyAgICAgICAgIyBUb3RhbCBwaXBlIElPIGluIHRoaXMgZnVuY3Rpb24gaXMgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIHBvc2l4IE9TCisgICAgICAgICMgcGlwZSBidWZmZXIgc2l6ZSBvZiA1MTIgYnl0ZXMuICBObyB3cml0ZXIgc2hvdWxkIGJsb2NrLgorICAgICAgICBhc3NlcnQgbGVuKGRhdGFfdG9fd3JpdGUpIDwgNTEyLCAnZGF0YV90b193cml0ZSBtdXN0IGZpdCBpbiBwaXBlIGJ1Zi4nCisKKyAgICAgICAgIyBTdGFydCBhIHN1YnByb2Nlc3MgdG8gY2FsbCBvdXIgcmVhZCBtZXRob2Qgd2hpbGUgaGFuZGxpbmcgYSBzaWduYWwuCisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgJy11JywgJy1jJywKKyAgICAgICAgICAgICAgICAgJ2ltcG9ydCBpbywgc2lnbmFsLCBzeXMgOycKKyAgICAgICAgICAgICAgICAgJ3NpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYW1iZGEgcywgZjogc3lzLnN0ZGVyci53cml0ZSgiJFxcbiIpKSA7JworICAgICAgICAgICAgICAgICArIGluZmlsZV9zZXR1cF9jb2RlICsgJyA7JyArCisgICAgICAgICAgICAgICAgICdzeXMuc3RkZXJyLndyaXRlKCJXb3JtIFNpZ24hXFxuIikgOycKKyAgICAgICAgICAgICAgICAgKyByZWFkX2FuZF92ZXJpZnlfY29kZSArICcgOycgKworICAgICAgICAgICAgICAgICAnaW5maWxlLmNsb3NlKCknCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKworICAgICAgICAjIFdhaXQgZm9yIHRoZSBzaWduYWwgaGFuZGxlciB0byBiZSBpbnN0YWxsZWQuCisgICAgICAgIHdvcm1fc2lnbiA9IHNlbGYuX3Byb2Nlc3Muc3RkZXJyLnJlYWQobGVuKGInV29ybSBTaWduIVxuJykpCisgICAgICAgIGlmIHdvcm1fc2lnbiAhPSBiJ1dvcm0gU2lnbiFcbic6ICAjIFNlZSBhbHNvLCBEdW5lIGJ5IEZyYW5rIEhlcmJlcnQuCisgICAgICAgICAgICBzZWxmLmZhaWxfd2l0aF9wcm9jZXNzX2luZm8oJ3doaWxlIGF3YWl0aW5nIGEgc2lnbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXdvcm1fc2lnbikKKyAgICAgICAgc2VsZi5fcHJvY2Vzcy5zdGRpbi53cml0ZShkYXRhX3RvX3dyaXRlKQorCisgICAgICAgIHNpZ25hbHNfc2VudCA9IDAKKyAgICAgICAgcmxpc3QgPSBbXQorICAgICAgICAjIFdlIGRvbid0IGtub3cgd2hlbiB0aGUgcmVhZF9hbmRfdmVyaWZ5X2NvZGUgaW4gb3VyIGNoaWxkIGlzIGFjdHVhbGx5CisgICAgICAgICMgZXhlY3V0aW5nIHdpdGhpbiB0aGUgcmVhZCBzeXN0ZW0gY2FsbCB3ZSB3YW50IHRvIGludGVycnVwdC4gIFRoaXMKKyAgICAgICAgIyBsb29wIHdhaXRzIGZvciBhIGJpdCBiZWZvcmUgc2VuZGluZyB0aGUgZmlyc3Qgc2lnbmFsIHRvIGluY3JlYXNlCisgICAgICAgICMgdGhlIGxpa2VsaWhvb2Qgb2YgdGhhdC4gIEltcGxlbWVudGF0aW9ucyB3aXRob3V0IGNvcnJlY3QgRUlOVFIKKyAgICAgICAgIyBhbmQgc2lnbmFsIGhhbmRsaW5nIHVzdWFsbHkgZmFpbCB0aGlzIHRlc3QuCisgICAgICAgIHdoaWxlIG5vdCBybGlzdDoKKyAgICAgICAgICAgIHJsaXN0LCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc2VsZi5fcHJvY2Vzcy5zdGRlcnJdLCAoKSwgKCksIDAuMDUpCisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzLnNlbmRfc2lnbmFsKHNpZ25hbC5TSUdJTlQpCisgICAgICAgICAgICBzaWduYWxzX3NlbnQgKz0gMQorICAgICAgICAgICAgaWYgc2lnbmFsc19zZW50ID4gMjAwOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mua2lsbCgpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdyZWFkZXIgcHJvY2VzcyBmYWlsZWQgdG8gaGFuZGxlIG91ciBzaWduYWxzLicpCisgICAgICAgICMgVGhpcyBhc3N1bWVzIGFueXRoaW5nIHVuZXhwZWN0ZWQgdGhhdCB3cml0ZXMgdG8gc3RkZXJyIHdpbGwgYWxzbworICAgICAgICAjIHdyaXRlIGEgbmV3bGluZS4gIFRoYXQgaXMgdHJ1ZSBvZiB0aGUgdHJhY2ViYWNrIHByaW50aW5nIGNvZGUuCisgICAgICAgIHNpZ25hbF9saW5lID0gc2VsZi5fcHJvY2Vzcy5zdGRlcnIucmVhZGxpbmUoKQorICAgICAgICBpZiBzaWduYWxfbGluZSAhPSBiJyRcbic6CisgICAgICAgICAgICBzZWxmLmZhaWxfd2l0aF9wcm9jZXNzX2luZm8oJ3doaWxlIGF3YWl0aW5nIHNpZ25hbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXNpZ25hbF9saW5lKQorCisgICAgICAgICMgV2UgYXBwZW5kIGEgbmV3bGluZSB0byBvdXIgaW5wdXQgc28gdGhhdCBhIHJlYWRsaW5lIGNhbGwgY2FuCisgICAgICAgICMgZW5kIG9uIGl0cyBvd24gYmVmb3JlIHRoZSBFT0YgaXMgc2VlbiBhbmQgc28gdGhhdCB3ZSdyZSB0ZXN0aW5nCisgICAgICAgICMgdGhlIHJlYWQgY2FsbCB0aGF0IHdhcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCBiZWZvcmUgdGhlIGVuZCBvZgorICAgICAgICAjIHRoZSBkYXRhIHN0cmVhbSBoYXMgYmVlbiByZWFjaGVkLgorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHNlbGYuX3Byb2Nlc3MuY29tbXVuaWNhdGUoaW5wdXQ9YidcbicpCisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3MucmV0dXJuY29kZToKKyAgICAgICAgICAgIHNlbGYuZmFpbF93aXRoX3Byb2Nlc3NfaW5mbygKKyAgICAgICAgICAgICAgICAgICAgJ2V4aXRlZCByYz0lZCcgJSBzZWxmLl9wcm9jZXNzLnJldHVybmNvZGUsCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyLCBjb21tdW5pY2F0ZT1GYWxzZSkKKyAgICAgICAgIyBQQVNTIQorCisgICAgIyBTdHJpbmcgZm9ybWF0IGZvciB0aGUgcmVhZF9hbmRfdmVyaWZ5X2NvZGUgdXNlZCBieSByZWFkIG1ldGhvZHMuCisgICAgX1JFQURJTkdfQ09ERV9URU1QTEFURSA9ICgKKyAgICAgICAgICAgICdnb3QgPSBpbmZpbGUue3JlYWRfbWV0aG9kX25hbWV9KCkgOycKKyAgICAgICAgICAgICdleHBlY3RlZCA9IHtleHBlY3RlZCFyfSA7JworICAgICAgICAgICAgJ2Fzc2VydCBnb3QgPT0gZXhwZWN0ZWQsICgnCisgICAgICAgICAgICAgICAgICAgICcie3JlYWRfbWV0aG9kX25hbWV9IHJldHVybmVkIHdyb25nIGRhdGEuXFxuIicKKyAgICAgICAgICAgICAgICAgICAgJyJnb3QgZGF0YSAlclxcbmV4cGVjdGVkICVyIiAlIChnb3QsIGV4cGVjdGVkKSknCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgIiIicmVhZGxpbmUoKSBtdXN0IGhhbmRsZSBzaWduYWxzIGFuZCBub3QgbG9zZSBkYXRhLiIiIgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRpbmcoCisgICAgICAgICAgICAgICAgZGF0YV90b193cml0ZT1iJ2hlbGxvLCB3b3JsZCEnLAorICAgICAgICAgICAgICAgIHJlYWRfYW5kX3ZlcmlmeV9jb2RlPXNlbGYuX1JFQURJTkdfQ09ERV9URU1QTEFURS5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX21ldGhvZF9uYW1lPSdyZWFkbGluZScsCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD1iJ2hlbGxvLCB3b3JsZCFcbicpKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICAiIiJyZWFkbGluZXMoKSBtdXN0IGhhbmRsZSBzaWduYWxzIGFuZCBub3QgbG9zZSBkYXRhLiIiIgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRpbmcoCisgICAgICAgICAgICAgICAgZGF0YV90b193cml0ZT1iJ2hlbGxvXG53b3JsZCEnLAorICAgICAgICAgICAgICAgIHJlYWRfYW5kX3ZlcmlmeV9jb2RlPXNlbGYuX1JFQURJTkdfQ09ERV9URU1QTEFURS5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX21ldGhvZF9uYW1lPSdyZWFkbGluZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ9W2InaGVsbG9cbicsIGInd29ybGQhXG4nXSkpCisKKyAgICBkZWYgdGVzdF9yZWFkYWxsKHNlbGYpOgorICAgICAgICAiIiJyZWFkYWxsKCkgbXVzdCBoYW5kbGUgc2lnbmFscyBhbmQgbm90IGxvc2UgZGF0YS4iIiIKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkaW5nKAorICAgICAgICAgICAgICAgIGRhdGFfdG9fd3JpdGU9YidoZWxsb1xud29ybGQhJywKKyAgICAgICAgICAgICAgICByZWFkX2FuZF92ZXJpZnlfY29kZT1zZWxmLl9SRUFESU5HX0NPREVfVEVNUExBVEUuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9tZXRob2RfbmFtZT0ncmVhZGFsbCcsCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD1iJ2hlbGxvXG53b3JsZCFcbicpKQorICAgICAgICAjIHJlYWQoKSBpcyB0aGUgc2FtZSB0aGluZyBhcyByZWFkYWxsKCkuCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGluZygKKyAgICAgICAgICAgICAgICBkYXRhX3RvX3dyaXRlPWInaGVsbG9cbndvcmxkIScsCisgICAgICAgICAgICAgICAgcmVhZF9hbmRfdmVyaWZ5X2NvZGU9c2VsZi5fUkVBRElOR19DT0RFX1RFTVBMQVRFLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfbWV0aG9kX25hbWU9J3JlYWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ9YidoZWxsb1xud29ybGQhXG4nKSkKKworCitjbGFzcyBUZXN0QnVmZmVyZWRJT1NpZ25hbEludGVycnVwdChUZXN0RmlsZUlPU2lnbmFsSW50ZXJydXB0KToKKyAgICBkZWYgX2dlbmVyYXRlX2luZmlsZV9zZXR1cF9jb2RlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBpbmZpbGUgPSAuLi4gbGluZSBvZiBjb2RlIHRvIG1ha2UgYSBCdWZmZXJlZFJlYWRlci4iIiIKKyAgICAgICAgcmV0dXJuICgnaW5maWxlID0gaW8ub3BlbihzeXMuc3RkaW4uZmlsZW5vKCksICJyYiIpIDsnCisgICAgICAgICAgICAgICAgJ2ltcG9ydCBfaW8gO2Fzc2VydCBpc2luc3RhbmNlKGluZmlsZSwgX2lvLkJ1ZmZlcmVkUmVhZGVyKScpCisKKyAgICBkZWYgdGVzdF9yZWFkYWxsKHNlbGYpOgorICAgICAgICAiIiJCdWZmZXJlZFJlYWRlci5yZWFkKCkgbXVzdCBoYW5kbGUgc2lnbmFscyBhbmQgbm90IGxvc2UgZGF0YS4iIiIKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkaW5nKAorICAgICAgICAgICAgICAgIGRhdGFfdG9fd3JpdGU9YidoZWxsb1xud29ybGQhJywKKyAgICAgICAgICAgICAgICByZWFkX2FuZF92ZXJpZnlfY29kZT1zZWxmLl9SRUFESU5HX0NPREVfVEVNUExBVEUuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9tZXRob2RfbmFtZT0ncmVhZCcsCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD1iJ2hlbGxvXG53b3JsZCFcbicpKQorCisKK2NsYXNzIFRlc3RUZXh0SU9TaWduYWxJbnRlcnJ1cHQoVGVzdEZpbGVJT1NpZ25hbEludGVycnVwdCk6CisgICAgZGVmIF9nZW5lcmF0ZV9pbmZpbGVfc2V0dXBfY29kZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgaW5maWxlID0gLi4uIGxpbmUgb2YgY29kZSB0byBtYWtlIGEgVGV4dElPV3JhcHBlci4iIiIKKyAgICAgICAgcmV0dXJuICgnaW5maWxlID0gaW8ub3BlbihzeXMuc3RkaW4uZmlsZW5vKCksICJydCIsIG5ld2xpbmU9Tm9uZSkgOycKKyAgICAgICAgICAgICAgICAnaW1wb3J0IF9pbyA7YXNzZXJ0IGlzaW5zdGFuY2UoaW5maWxlLCBfaW8uVGV4dElPV3JhcHBlciknKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CisgICAgICAgICIiInJlYWRsaW5lKCkgbXVzdCBoYW5kbGUgc2lnbmFscyBhbmQgbm90IGxvc2UgZGF0YS4iIiIKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkaW5nKAorICAgICAgICAgICAgICAgIGRhdGFfdG9fd3JpdGU9YidoZWxsbywgd29ybGQhJywKKyAgICAgICAgICAgICAgICByZWFkX2FuZF92ZXJpZnlfY29kZT1zZWxmLl9SRUFESU5HX0NPREVfVEVNUExBVEUuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9tZXRob2RfbmFtZT0ncmVhZGxpbmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ9J2hlbGxvLCB3b3JsZCFcbicpKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICAiIiJyZWFkbGluZXMoKSBtdXN0IGhhbmRsZSBzaWduYWxzIGFuZCBub3QgbG9zZSBkYXRhLiIiIgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRpbmcoCisgICAgICAgICAgICAgICAgZGF0YV90b193cml0ZT1iJ2hlbGxvXHJcbndvcmxkIScsCisgICAgICAgICAgICAgICAgcmVhZF9hbmRfdmVyaWZ5X2NvZGU9c2VsZi5fUkVBRElOR19DT0RFX1RFTVBMQVRFLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfbWV0aG9kX25hbWU9J3JlYWRsaW5lcycsCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD1bJ2hlbGxvXG4nLCAnd29ybGQhXG4nXSkpCisKKyAgICBkZWYgdGVzdF9yZWFkYWxsKHNlbGYpOgorICAgICAgICAiIiJyZWFkKCkgbXVzdCBoYW5kbGUgc2lnbmFscyBhbmQgbm90IGxvc2UgZGF0YS4iIiIKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkaW5nKAorICAgICAgICAgICAgICAgIGRhdGFfdG9fd3JpdGU9YidoZWxsb1xud29ybGQhJywKKyAgICAgICAgICAgICAgICByZWFkX2FuZF92ZXJpZnlfY29kZT1zZWxmLl9SRUFESU5HX0NPREVfVEVNUExBVEUuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9tZXRob2RfbmFtZT0ncmVhZCcsCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD0iaGVsbG9cbndvcmxkIVxuIikpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3RfY2FzZXMgPSBbCisgICAgICAgICAgICB0YyBmb3IgdGMgaW4gZ2xvYmFscygpLnZhbHVlcygpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRjLCB0eXBlKSBhbmQgaXNzdWJjbGFzcyh0YywgdW5pdHRlc3QuVGVzdENhc2UpXQorICAgIHJ1bl91bml0dGVzdCgqdGVzdF9jYXNlcykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9maWxlY21wLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZmlsZWNtcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzM5ZWRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZmlsZWNtcC5weQpAQCAtMCwwICsxLDEzNCBAQAorCitpbXBvcnQgb3MsIGZpbGVjbXAsIHNodXRpbCwgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgRmlsZUNvbXBhcmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgICAgIHNlbGYubmFtZV9zYW1lID0gdGVzdF9zdXBwb3J0LlRFU1RGTiArICctc2FtZScKKyAgICAgICAgc2VsZi5uYW1lX2RpZmYgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgJy1kaWZmJworICAgICAgICBkYXRhID0gJ0NvbnRlbnRzIG9mIGZpbGUgZ28gaGVyZS5cbicKKyAgICAgICAgZm9yIG5hbWUgaW4gW3NlbGYubmFtZSwgc2VsZi5uYW1lX3NhbWUsIHNlbGYubmFtZV9kaWZmXToKKyAgICAgICAgICAgIG91dHB1dCA9IG9wZW4obmFtZSwgJ3cnKQorICAgICAgICAgICAgb3V0cHV0LndyaXRlKGRhdGEpCisgICAgICAgICAgICBvdXRwdXQuY2xvc2UoKQorCisgICAgICAgIG91dHB1dCA9IG9wZW4oc2VsZi5uYW1lX2RpZmYsICdhKycpCisgICAgICAgIG91dHB1dC53cml0ZSgnQW4gZXh0cmEgbGluZS5cbicpCisgICAgICAgIG91dHB1dC5jbG9zZSgpCisgICAgICAgIHNlbGYuZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG9zLnVubGluayhzZWxmLm5hbWUpCisgICAgICAgIG9zLnVubGluayhzZWxmLm5hbWVfc2FtZSkKKyAgICAgICAgb3MudW5saW5rKHNlbGYubmFtZV9kaWZmKQorCisgICAgZGVmIHRlc3RfbWF0Y2hpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZV9zYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpbmcgZmlsZSB0byBpdHNlbGYgZmFpbHMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWVfc2FtZSwgc2hhbGxvdz1GYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGZpbGUgdG8gaXRzZWxmIGZhaWxzIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lLCBzaGFsbG93PUZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpbmcgZmlsZSB0byBpZGVudGljYWwgZmlsZSBmYWlscyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGZpbGUgdG8gaWRlbnRpY2FsIGZpbGUgZmFpbHMiKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX2RpZmYpLAorICAgICAgICAgICAgICAgICAgICAiTWlzbWF0Y2hlZCBmaWxlcyBjb21wYXJlIGFzIGVxdWFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYuZGlyKSwKKyAgICAgICAgICAgICAgICAgICAgIkZpbGUgYW5kIGRpcmVjdG9yeSBjb21wYXJlIGFzIGVxdWFsIikKKworY2xhc3MgRGlyQ29tcGFyZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHRtcGRpciA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQorICAgICAgICBzZWxmLmRpciA9IG9zLnBhdGguam9pbih0bXBkaXIsICdkaXInKQorICAgICAgICBzZWxmLmRpcl9zYW1lID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2Rpci1zYW1lJykKKyAgICAgICAgc2VsZi5kaXJfZGlmZiA9IG9zLnBhdGguam9pbih0bXBkaXIsICdkaXItZGlmZicpCisgICAgICAgIHNlbGYuY2FzZWluc2Vuc2l0aXZlID0gb3MucGF0aC5ub3JtY2FzZSgnQScpID09IG9zLnBhdGgubm9ybWNhc2UoJ2EnKQorICAgICAgICBkYXRhID0gJ0NvbnRlbnRzIG9mIGZpbGUgZ28gaGVyZS5cbicKKyAgICAgICAgZm9yIGRpciBpbiBbc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsIHNlbGYuZGlyX2RpZmZdOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkaXIsIFRydWUpCisgICAgICAgICAgICBvcy5ta2RpcihkaXIpCisgICAgICAgICAgICBpZiBzZWxmLmNhc2VpbnNlbnNpdGl2ZSBhbmQgZGlyIGlzIHNlbGYuZGlyX3NhbWU6CisgICAgICAgICAgICAgICAgZm4gPSAnRmlMZScgICAgICMgVmVyaWZ5IGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmbiA9ICdmaWxlJworICAgICAgICAgICAgb3V0cHV0ID0gb3Blbihvcy5wYXRoLmpvaW4oZGlyLCBmbiksICd3JykKKyAgICAgICAgICAgIG91dHB1dC53cml0ZShkYXRhKQorICAgICAgICAgICAgb3V0cHV0LmNsb3NlKCkKKworICAgICAgICBvdXRwdXQgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLmRpcl9kaWZmLCAnZmlsZTInKSwgJ3cnKQorICAgICAgICBvdXRwdXQud3JpdGUoJ0FuIGV4dHJhIGZpbGUuXG4nKQorICAgICAgICBvdXRwdXQuY2xvc2UoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlyKQorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlyX3NhbWUpCisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXJfZGlmZikKKworICAgIGRlZiB0ZXN0X2NtcGZpbGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXBmaWxlcyhzZWxmLmRpciwgc2VsZi5kaXIsIFsnZmlsZSddKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgKFsnZmlsZSddLCBbXSwgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBkaXJlY3RvcnkgdG8gaXRzZWxmIGZhaWxzIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wZmlsZXMoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsIFsnZmlsZSddKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgKFsnZmlsZSddLCBbXSwgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBkaXJlY3RvcnkgdG8gc2FtZSBmYWlscyIpCisKKyAgICAgICAgIyBUcnkgaXQgd2l0aCBzaGFsbG93PUZhbHNlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpciwgWydmaWxlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWxsb3c9RmFsc2UpID09CisgICAgICAgICAgICAgICAgICAgICAgICAoWydmaWxlJ10sIFtdLCBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGRpcmVjdG9yeSB0byBpdHNlbGYgZmFpbHMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXBmaWxlcyhzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSwgWydmaWxlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWxsb3c9RmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBkaXJlY3RvcnkgdG8gc2FtZSBmYWlscyIpCisKKyAgICAgICAgIyBBZGQgZGlmZmVyZW50IGZpbGUyCisgICAgICAgIG91dHB1dCA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZGlyLCAnZmlsZTInKSwgJ3cnKQorICAgICAgICBvdXRwdXQud3JpdGUoJ0RpZmZlcmVudCBjb250ZW50cy5cbicpCisgICAgICAgIG91dHB1dC5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpcl9zYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnZmlsZScsICdmaWxlMiddKSA9PQorICAgICAgICAgICAgICAgICAgICAoWydmaWxlJ10sIFsnZmlsZTInXSwgW10pLAorICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIG1pc21hdGNoZWQgZGlyZWN0b3JpZXMgZmFpbHMiKQorCisKKyAgICBkZWYgdGVzdF9kaXJjbXAoc2VsZik6CisgICAgICAgICMgQ2hlY2sgYXR0cmlidXRlcyBmb3IgY29tcGFyaXNvbiBvZiB0d28gaWRlbnRpY2FsIGRpcmVjdG9yaWVzCisgICAgICAgIGQgPSBmaWxlY21wLmRpcmNtcChzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSkKKyAgICAgICAgaWYgc2VsZi5jYXNlaW5zZW5zaXRpdmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtkLmxlZnRfbGlzdCwgZC5yaWdodF9saXN0XSxbWydmaWxlJ10sIFsnRmlMZSddXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2QubGVmdF9saXN0LCBkLnJpZ2h0X2xpc3RdLFtbJ2ZpbGUnXSwgWydmaWxlJ11dKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5jb21tb24gPT0gWydmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmxlZnRfb25seSA9PSBkLnJpZ2h0X29ubHkgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLnNhbWVfZmlsZXMgPT0gWydmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmRpZmZfZmlsZXMgPT0gW10pCisKKyAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzIGZvciBjb21wYXJpc29uIG9mIHR3byBkaWZmZXJlbnQgZGlyZWN0b3JpZXMKKyAgICAgICAgZCA9IGZpbGVjbXAuZGlyY21wKHNlbGYuZGlyLCBzZWxmLmRpcl9kaWZmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5sZWZ0X2xpc3QgPT0gWydmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLnJpZ2h0X2xpc3QgPT0gWydmaWxlJywgJ2ZpbGUyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmNvbW1vbiA9PSBbJ2ZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQubGVmdF9vbmx5ID09IFtdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5yaWdodF9vbmx5ID09IFsnZmlsZTInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuc2FtZV9maWxlcyA9PSBbJ2ZpbGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuZGlmZl9maWxlcyA9PSBbXSkKKworICAgICAgICAjIEFkZCBkaWZmZXJlbnQgZmlsZTIKKyAgICAgICAgb3V0cHV0ID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdmaWxlMicpLCAndycpCisgICAgICAgIG91dHB1dC53cml0ZSgnRGlmZmVyZW50IGNvbnRlbnRzLlxuJykKKyAgICAgICAgb3V0cHV0LmNsb3NlKCkKKyAgICAgICAgZCA9IGZpbGVjbXAuZGlyY21wKHNlbGYuZGlyLCBzZWxmLmRpcl9kaWZmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5zYW1lX2ZpbGVzID09IFsnZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5kaWZmX2ZpbGVzID09IFsnZmlsZTInXSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChGaWxlQ29tcGFyZVRlc3RDYXNlLCBEaXJDb21wYXJlVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ZpbGVpbnB1dC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ZpbGVpbnB1dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGFlZDFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5CkBAIC0wLDAgKzEsMjI1IEBACisnJycKK1Rlc3RzIGZvciBmaWxlaW5wdXQgbW9kdWxlLgorTmljayBNYXRoZXdzb24KKycnJworCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRFU1RGTiwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB1bmxpbmsgYXMgc2FmZV91bmxpbmsKK2ltcG9ydCBzeXMsIHJlCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSBmaWxlaW5wdXQgaW1wb3J0IEZpbGVJbnB1dCwgaG9va19lbmNvZGVkCisKKyMgVGhlIGZpbGVpbnB1dCBtb2R1bGUgaGFzIDIgaW50ZXJmYWNlczogdGhlIEZpbGVJbnB1dCBjbGFzcyB3aGljaCBkb2VzCisjIGFsbCB0aGUgd29yaywgYW5kIGEgZmV3IGZ1bmN0aW9ucyAoaW5wdXQsIGV0Yy4pIHRoYXQgdXNlIGEgZ2xvYmFsIF9zdGF0ZQorIyB2YXJpYWJsZS4gIFdlIG9ubHkgdGVzdCB0aGUgRmlsZUlucHV0IGNsYXNzLCBzaW5jZSB0aGUgb3RoZXIgZnVuY3Rpb25zCisjIG9ubHkgcHJvdmlkZSBhIHRoaW4gZmFjYWRlIG92ZXIgRmlsZUlucHV0LgorCisjIFdyaXRlIGxpbmVzIChhIGxpc3Qgb2YgbGluZXMpIHRvIHRlbXAgZmlsZSBudW1iZXIgaSwgYW5kIHJldHVybiB0aGUKKyMgdGVtcCBmaWxlJ3MgbmFtZS4KK2RlZiB3cml0ZVRtcChpLCBsaW5lcywgbW9kZT0ndycpOiAgIyBvcGVuaW5nIGluIHRleHQgbW9kZSBpcyB0aGUgZGVmYXVsdAorICAgIG5hbWUgPSBURVNURk4gKyBzdHIoaSkKKyAgICBmID0gb3BlbihuYW1lLCBtb2RlKQorICAgIGYud3JpdGVsaW5lcyhsaW5lcykKKyAgICBmLmNsb3NlKCkKKyAgICByZXR1cm4gbmFtZQorCitkZWYgcmVtb3ZlX3RlbXBmaWxlcygqbmFtZXMpOgorICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICBzYWZlX3VubGluayhuYW1lKQorCitjbGFzcyBCdWZmZXJTaXplc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9idWZmZXJfc2l6ZXMoc2VsZik6CisgICAgICAgICMgRmlyc3QsIHJ1biB0aGUgdGVzdHMgd2l0aCBkZWZhdWx0IGFuZCB0ZWVueSBidWZmZXIgc2l6ZS4KKyAgICAgICAgZm9yIHJvdW5kLCBicyBpbiAoMCwgMCksICgxLCAzMCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdDEgPSB3cml0ZVRtcCgxLCBbIkxpbmUgJXMgb2YgZmlsZSAxXG4iICUgKGkrMSkgZm9yIGkgaW4gcmFuZ2UoMTUpXSkKKyAgICAgICAgICAgICAgICB0MiA9IHdyaXRlVG1wKDIsIFsiTGluZSAlcyBvZiBmaWxlIDJcbiIgJSAoaSsxKSBmb3IgaSBpbiByYW5nZSgxMCldKQorICAgICAgICAgICAgICAgIHQzID0gd3JpdGVUbXAoMywgWyJMaW5lICVzIG9mIGZpbGUgM1xuIiAlIChpKzEpIGZvciBpIGluIHJhbmdlKDUpXSkKKyAgICAgICAgICAgICAgICB0NCA9IHdyaXRlVG1wKDQsIFsiTGluZSAlcyBvZiBmaWxlIDRcbiIgJSAoaSsxKSBmb3IgaSBpbiByYW5nZSgxKV0pCisgICAgICAgICAgICAgICAgc2VsZi5idWZmZXJfc2l6ZV90ZXN0KHQxLCB0MiwgdDMsIHQ0LCBicywgcm91bmQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJlbW92ZV90ZW1wZmlsZXModDEsIHQyLCB0MywgdDQpCisKKyAgICBkZWYgYnVmZmVyX3NpemVfdGVzdChzZWxmLCB0MSwgdDIsIHQzLCB0NCwgYnM9MCwgcm91bmQ9MCk6CisgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUocidMSU5FIChcZCspIE9GIEZJTEUgKFxkKyknKQorCisgICAgICAgIHN0YXJ0ID0gMSArIHJvdW5kKjYKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICclcy4gU2ltcGxlIGl0ZXJhdGlvbiAoYnM9JXMpJyAlIChzdGFydCswLCBicykKKyAgICAgICAgZmkgPSBGaWxlSW5wdXQoZmlsZXM9KHQxLCB0MiwgdDMsIHQ0KSwgYnVmc2l6ZT1icykKKyAgICAgICAgbGluZXMgPSBsaXN0KGZpKQorICAgICAgICBmaS5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpbmVzKSwgMzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXNbNF0sICdMaW5lIDUgb2YgZmlsZSAxXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzWzMwXSwgJ0xpbmUgMSBvZiBmaWxlIDRcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkubGluZW5vKCksIDMxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmZpbGVuYW1lKCksIHQ0KQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnJXMuIFN0YXR1cyB2YXJpYWJsZXMgKGJzPSVzKScgJSAoc3RhcnQrMSwgYnMpCisgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPSh0MSwgdDIsIHQzLCB0NCksIGJ1ZnNpemU9YnMpCisgICAgICAgIHMgPSAieCIKKyAgICAgICAgd2hpbGUgcyBhbmQgcyAhPSAnTGluZSA2IG9mIGZpbGUgMlxuJzoKKyAgICAgICAgICAgIHMgPSBmaS5yZWFkbGluZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuZmlsZW5hbWUoKSwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkubGluZW5vKCksIDIxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmZpbGVsaW5lbm8oKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaS5pc2ZpcnN0bGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpLmlzc3RkaW4oKSkKKworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJyVzLiBOZXh0ZmlsZSAoYnM9JXMpJyAlIChzdGFydCsyLCBicykKKyAgICAgICAgZmkubmV4dGZpbGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLnJlYWRsaW5lKCksICdMaW5lIDEgb2YgZmlsZSAzXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmxpbmVubygpLCAyMikKKyAgICAgICAgZmkuY2xvc2UoKQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnJXMuIFN0ZGluIChicz0lcyknICUgKHN0YXJ0KzMsIGJzKQorICAgICAgICBmaSA9IEZpbGVJbnB1dChmaWxlcz0odDEsIHQyLCB0MywgdDQsICctJyksIGJ1ZnNpemU9YnMpCisgICAgICAgIHNhdmVzdGRpbiA9IHN5cy5zdGRpbgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuc3RkaW4gPSBTdHJpbmdJTygiTGluZSAxIG9mIHN0ZGluXG5MaW5lIDIgb2Ygc3RkaW5cbiIpCisgICAgICAgICAgICBsaW5lcyA9IGxpc3QoZmkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaW5lcyksIDMzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1szMl0sICdMaW5lIDIgb2Ygc3RkaW5cbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmZpbGVuYW1lKCksICc8c3RkaW4+JykKKyAgICAgICAgICAgIGZpLm5leHRmaWxlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRpbiA9IHNhdmVzdGRpbgorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnJXMuIEJvdW5kYXJ5IGNvbmRpdGlvbnMgKGJzPSVzKScgJSAoc3RhcnQrNCwgYnMpCisgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPSh0MSwgdDIsIHQzLCB0NCksIGJ1ZnNpemU9YnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkubGluZW5vKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuZmlsZW5hbWUoKSwgTm9uZSkKKyAgICAgICAgZmkubmV4dGZpbGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmxpbmVubygpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmZpbGVuYW1lKCksIE5vbmUpCisKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICclcy4gSW5wbGFjZSAoYnM9JXMpJyAlIChzdGFydCs1LCBicykKKyAgICAgICAgc2F2ZXN0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmkgPSBGaWxlSW5wdXQoZmlsZXM9KHQxLCB0MiwgdDMsIHQ0KSwgaW5wbGFjZT0xLCBidWZzaXplPWJzKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmk6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXS51cHBlcigpCisgICAgICAgICAgICAgICAgcHJpbnQgbGluZQorICAgICAgICAgICAgZmkuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVzdGRvdXQKKworICAgICAgICBmaSA9IEZpbGVJbnB1dChmaWxlcz0odDEsIHQyLCB0MywgdDQpLCBidWZzaXplPWJzKQorICAgICAgICBmb3IgbGluZSBpbiBmaToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZVstMV0sICdcbicpCisgICAgICAgICAgICBtID0gcGF0Lm1hdGNoKGxpbmVbOi0xXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KG0uZ3JvdXAoMSkpLCBmaS5maWxlbGluZW5vKCkpCisgICAgICAgIGZpLmNsb3NlKCkKKworY2xhc3MgRmlsZUlucHV0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3plcm9fYnl0ZV9maWxlcyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdDEgPSB3cml0ZVRtcCgxLCBbIiJdKQorICAgICAgICAgICAgdDIgPSB3cml0ZVRtcCgyLCBbIiJdKQorICAgICAgICAgICAgdDMgPSB3cml0ZVRtcCgzLCBbIlRoZSBvbmx5IGxpbmUgdGhlcmUgaXMuXG4iXSkKKyAgICAgICAgICAgIHQ0ID0gd3JpdGVUbXAoNCwgWyIiXSkKKyAgICAgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPSh0MSwgdDIsIHQzLCB0NCkpCisKKyAgICAgICAgICAgIGxpbmUgPSBmaS5yZWFkbGluZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsICdUaGUgb25seSBsaW5lIHRoZXJlIGlzLlxuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkubGluZW5vKCksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmZpbGVsaW5lbm8oKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuZmlsZW5hbWUoKSwgdDMpCisKKyAgICAgICAgICAgIGxpbmUgPSBmaS5yZWFkbGluZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmxpbmVubygpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5maWxlbGluZW5vKCksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmZpbGVuYW1lKCksIHQ0KQorICAgICAgICAgICAgZmkuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcmVtb3ZlX3RlbXBmaWxlcyh0MSwgdDIsIHQzLCB0NCkKKworICAgIGRlZiB0ZXN0X2ZpbGVzX3RoYXRfZG9udF9lbmRfd2l0aF9uZXdsaW5lKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0MSA9IHdyaXRlVG1wKDEsIFsiQVxuQlxuQyJdKQorICAgICAgICAgICAgdDIgPSB3cml0ZVRtcCgyLCBbIkRcbkVcbkYiXSkKKyAgICAgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPSh0MSwgdDIpKQorICAgICAgICAgICAgbGluZXMgPSBsaXN0KGZpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgWyJBXG4iLCAiQlxuIiwgIkMiLCAiRFxuIiwgIkVcbiIsICJGIl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmZpbGVsaW5lbm8oKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkubGluZW5vKCksIDYpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICByZW1vdmVfdGVtcGZpbGVzKHQxLCB0MikKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfZmlsZW5hbWVzKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0MSA9IHdyaXRlVG1wKDEsIFsiQVxuQiJdKQorICAgICAgICAgICAgZW5jb2RpbmcgPSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKKyAgICAgICAgICAgIGlmIGVuY29kaW5nIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSAnYXNjaWknCisgICAgICAgICAgICBmaSA9IEZpbGVJbnB1dChmaWxlcz11bmljb2RlKHQxLCBlbmNvZGluZykpCisgICAgICAgICAgICBsaW5lcyA9IGxpc3QoZmkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbIkFcbiIsICJCIl0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICByZW1vdmVfdGVtcGZpbGVzKHQxKQorCisgICAgZGVmIHRlc3RfZmlsZW5vKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0MSA9IHdyaXRlVG1wKDEsIFsiQVxuQiJdKQorICAgICAgICAgICAgdDIgPSB3cml0ZVRtcCgyLCBbIkNcbkQiXSkKKyAgICAgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPSh0MSwgdDIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5maWxlbm8oKSwgLTEpCisgICAgICAgICAgICBsaW5lID0gZmkubmV4dCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZpLmZpbGVubygpLCAtMSkKKyAgICAgICAgICAgIGZpLm5leHRmaWxlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuZmlsZW5vKCksIC0xKQorICAgICAgICAgICAgbGluZSA9IGxpc3QoZmkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLmZpbGVubygpLCAtMSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJlbW92ZV90ZW1wZmlsZXModDEsIHQyKQorCisgICAgZGVmIHRlc3Rfb3BlbmluZ19tb2RlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGludmFsaWQgbW9kZSwgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgICAgIGZpID0gRmlsZUlucHV0KG1vZGU9InciKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlSW5wdXQgc2hvdWxkIHJlamVjdCBpbnZhbGlkIG1vZGUgYXJndW1lbnQiKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyB0cnkgb3BlbmluZyBpbiB1bml2ZXJzYWwgbmV3bGluZSBtb2RlCisgICAgICAgICAgICB0MSA9IHdyaXRlVG1wKDEsIFsiQVxuQlxyXG5DXHJEIl0sIG1vZGU9IndiIikKKyAgICAgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPXQxLCBtb2RlPSJVIikKKyAgICAgICAgICAgIGxpbmVzID0gbGlzdChmaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFsiQVxuIiwgIkJcbiIsICJDXG4iLCAiRCJdKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcmVtb3ZlX3RlbXBmaWxlcyh0MSkKKworICAgIGRlZiB0ZXN0X2ZpbGVfb3BlbmluZ19ob29rKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIGNhbm5vdCB1c2Ugb3Blbmhvb2sgYW5kIGlucGxhY2UgbW9kZQorICAgICAgICAgICAgZmkgPSBGaWxlSW5wdXQoaW5wbGFjZT0xLCBvcGVuaG9vaz1sYW1iZGEgZixtOiBOb25lKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlSW5wdXQgc2hvdWxkIHJhaXNlIGlmIGJvdGggaW5wbGFjZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmQgb3Blbmhvb2sgYXJndW1lbnRzIGFyZSBnaXZlbiIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBmaSA9IEZpbGVJbnB1dChvcGVuaG9vaz0xKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJGaWxlSW5wdXQgc2hvdWxkIGNoZWNrIG9wZW5ob29rIGZvciBiZWluZyBjYWxsYWJsZSIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICB0MSA9IHdyaXRlVG1wKDEsIFsiQVxuQiJdLCBtb2RlPSJ3YiIpCisgICAgICAgICAgICBmaSA9IEZpbGVJbnB1dChmaWxlcz10MSwgb3Blbmhvb2s9aG9va19lbmNvZGVkKCJyb3QxMyIpKQorICAgICAgICAgICAgbGluZXMgPSBsaXN0KGZpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgWyJOXG4iLCAiTyJdKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcmVtb3ZlX3RlbXBmaWxlcyh0MSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChCdWZmZXJTaXplc1Rlc3RzLCBGaWxlSW5wdXRUZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZmlsZWlvLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZmlsZWlvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGNlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9maWxlaW8ucHkKQEAgLTAsMCArMSw0NzkgQEAKKyMgQWRhcHRlZCBmcm9tIHRlc3RfZmlsZS5weSBieSBEYW5pZWwgU3R1dHpiYWNoCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBlcnJubworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIGFycmF5IGltcG9ydCBhcnJheQorZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eQorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCitmcm9tIFVzZXJMaXN0IGltcG9ydCBVc2VyTGlzdAoraW1wb3J0IF90ZXN0Y2FwaQorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QsIG1ha2VfYmFkX2ZkCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBweTNrX2J5dGVzIGFzIGJ5dGVzCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgcnVuX3B5dGhvbgorCitmcm9tIF9pbyBpbXBvcnQgRmlsZUlPIGFzIF9GaWxlSU8KKworY2xhc3MgQXV0b0ZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBmaWxlIHRlc3RzIGZvciB3aGljaCBhIHRlc3QgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IHNldCB1cAorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmYgPSBfRmlsZUlPKFRFU1RGTiwgJ3cnKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmY6CisgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQorCisgICAgZGVmIHRlc3RXZWFrUmVmcyhzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgd2VhayByZWZlcmVuY2VzCisgICAgICAgIHAgPSBwcm94eShzZWxmLmYpCisgICAgICAgIHAud3JpdGUoYnl0ZXMocmFuZ2UoMTApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYudGVsbCgpLCBwLnRlbGwoKSkKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgc2VsZi5mID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWZlcmVuY2VFcnJvciwgZ2V0YXR0ciwgcCwgJ3RlbGwnKQorCisgICAgZGVmIHRlc3RTZWVrVGVsbChzZWxmKToKKyAgICAgICAgc2VsZi5mLndyaXRlKGJ5dGVzKHJhbmdlKDIwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnRlbGwoKSwgMjApCisgICAgICAgIHNlbGYuZi5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnRlbGwoKSwgMCkKKyAgICAgICAgc2VsZi5mLnNlZWsoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnRlbGwoKSwgMTApCisgICAgICAgIHNlbGYuZi5zZWVrKDUsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnRlbGwoKSwgMTUpCisgICAgICAgIHNlbGYuZi5zZWVrKC01LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi50ZWxsKCksIDEwKQorICAgICAgICBzZWxmLmYuc2VlaygtNSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYudGVsbCgpLCAxNSkKKworICAgIGRlZiB0ZXN0QXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgZXhwZWN0ZWQgYXR0cmlidXRlcyBleGlzdAorICAgICAgICBmID0gc2VsZi5mCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm1vZGUsICJ3YiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5jbG9zZWQsIEZhbHNlKQorCisgICAgICAgICMgdmVyaWZ5IHRoZSBhdHRyaWJ1dGVzIGFyZSByZWFkb25seQorICAgICAgICBmb3IgYXR0ciBpbiAnbW9kZScsICdjbG9zZWQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0YXR0ciwgZiwgYXR0ciwgJ29vcHMnKQorCisgICAgZGVmIHRlc3RSZWFkaW50byhzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgcmVhZGludG8KKyAgICAgICAgc2VsZi5mLndyaXRlKGIiXHgwMVx4MDIiKQorICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICBhID0gYXJyYXkoYidiJywgYid4JyoxMCkKKyAgICAgICAgc2VsZi5mID0gX0ZpbGVJTyhURVNURk4sICdyJykKKyAgICAgICAgbiA9IHNlbGYuZi5yZWFkaW50byhhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFycmF5KGInYicsIFsxLCAyXSksIGFbOm5dKQorCisgICAgZGVmIHRlc3RXcml0ZWxpbmVzTGlzdChzZWxmKToKKyAgICAgICAgbCA9IFtiJzEyMycsIGInNDU2J10KKyAgICAgICAgc2VsZi5mLndyaXRlbGluZXMobCkKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgc2VsZi5mID0gX0ZpbGVJTyhURVNURk4sICdyYicpCisgICAgICAgIGJ1ZiA9IHNlbGYuZi5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYsIGInMTIzNDU2JykKKworICAgIGRlZiB0ZXN0V3JpdGVsaW5lc1VzZXJMaXN0KHNlbGYpOgorICAgICAgICBsID0gVXNlckxpc3QoW2InMTIzJywgYic0NTYnXSkKKyAgICAgICAgc2VsZi5mLndyaXRlbGluZXMobCkKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgc2VsZi5mID0gX0ZpbGVJTyhURVNURk4sICdyYicpCisgICAgICAgIGJ1ZiA9IHNlbGYuZi5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYsIGInMTIzNDU2JykKKworICAgIGRlZiB0ZXN0V3JpdGVsaW5lc0Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZi53cml0ZWxpbmVzLCBbMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mLndyaXRlbGluZXMsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9ub25lX2FyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuZi53cml0ZShiImhpXG5ieWVcbmFiYyIpCisgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIHNlbGYuZiA9IF9GaWxlSU8oVEVTVEZOLCAncicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnJlYWQoTm9uZSksIGIiaGlcbmJ5ZVxuYWJjIikKKyAgICAgICAgc2VsZi5mLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYucmVhZGxpbmUoTm9uZSksIGIiaGlcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnJlYWRsaW5lcyhOb25lKSwgW2IiYnllXG4iLCBiImFiYyJdKQorCisgICAgZGVmIHRlc3RSZXByKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi5mKSwgIjxfaW8uRmlsZUlPIG5hbWU9JXIgbW9kZT0nJXMnPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYuZi5uYW1lLCBzZWxmLmYubW9kZSkpCisgICAgICAgIGRlbCBzZWxmLmYubmFtZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi5mKSwgIjxfaW8uRmlsZUlPIGZkPSVyIG1vZGU9JyVzJz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLmYuZmlsZW5vKCksIHNlbGYuZi5tb2RlKSkKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNlbGYuZiksICI8X2lvLkZpbGVJTyBbY2xvc2VkXT4iKQorCisgICAgZGVmIHRlc3RFcnJvcnMoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmYKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmLmlzYXR0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuY2xvc2VkKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChmLm5hbWUsIFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkLCAxMCkgIyBPcGVuIGZvciByZWFkaW5nCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCisgICAgICAgIGYgPSBfRmlsZUlPKFRFU1RGTiwgJ3InKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYucmVhZGludG8sICIiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuY2xvc2VkKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQorCisgICAgZGVmIHRlc3RNZXRob2RzKHNlbGYpOgorICAgICAgICBtZXRob2RzID0gWydmaWxlbm8nLCAnaXNhdHR5JywgJ3JlYWQnLCAncmVhZGludG8nLAorICAgICAgICAgICAgICAgICAgICdzZWVrJywgJ3RlbGwnLCAndHJ1bmNhdGUnLCAnd3JpdGUnLCAnc2Vla2FibGUnLAorICAgICAgICAgICAgICAgICAgICdyZWFkYWJsZScsICd3cml0YWJsZSddCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdhdGhlb3MnKToKKyAgICAgICAgICAgIG1ldGhvZHMucmVtb3ZlKCd0cnVuY2F0ZScpCisKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZi5jbG9zZWQpCisKKyAgICAgICAgZm9yIG1ldGhvZG5hbWUgaW4gbWV0aG9kczoKKyAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZi5mLCBtZXRob2RuYW1lKQorICAgICAgICAgICAgIyBzaG91bGQgcmFpc2Ugb24gY2xvc2VkIGZpbGUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1ldGhvZCkKKworICAgIGRlZiB0ZXN0T3BlbmRpcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAzNzAzOiBvcGVuaW5nIGEgZGlyZWN0b3J5IHNob3VsZCBmaWxsIHRoZSBlcnJubworICAgICAgICAjIFdpbmRvd3MgYWx3YXlzIHJldHVybnMgIltFcnJubyAxM106IFBlcm1pc3Npb24gZGVuaWVkCisgICAgICAgICMgVW5peCBjYWxscyBkaXJjaGVjaygpIGFuZCByZXR1cm5zICJbRXJybm8gMjFdOiBJcyBhIGRpcmVjdG9yeSIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX0ZpbGVJTygnLicsICdyJykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZS5lcnJubywgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5maWxlbmFtZSwgIi4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgSU9FcnJvciIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gJ250JywgInRlc3Qgb25seSB3b3JrcyBvbiBhIFBPU0lYLWxpa2Ugc3lzdGVtIikKKyAgICBkZWYgdGVzdE9wZW5EaXJGRChzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKCcuJywgb3MuT19SRE9OTFkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgICAgICBfRmlsZUlPKGZkLCAncicpCisgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlTRElSKQorCisgICAgI0Egc2V0IG9mIGZ1bmN0aW9ucyB0ZXN0aW5nIHRoYXQgd2UgZ2V0IGV4cGVjdGVkIGJlaGF2aW91ciBpZiBzb21lb25lIGhhcworICAgICNtYW51YWxseSBjbG9zZWQgdGhlIGludGVybmFsIGZpbGUgZGVzY3JpcHRvci4gIEZpcnN0LCBhIGRlY29yYXRvcjoKKyAgICBkZWYgQ2xvc2VkRkQoZnVuYyk6CisgICAgICAgIEB3cmFwcyhmdW5jKQorICAgICAgICBkZWYgd3JhcHBlcihzZWxmKToKKyAgICAgICAgICAgICNmb3JjaWJseSBjbG9zZSB0aGUgZmQgYmVmb3JlIGludm9raW5nIHRoZSBwcm9ibGVtIGZ1bmN0aW9uCisgICAgICAgICAgICBmID0gc2VsZi5mCisgICAgICAgICAgICBvcy5jbG9zZShmLmZpbGVubygpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZ1bmMoc2VsZiwgZikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiB3cmFwcGVyCisKKyAgICBkZWYgQ2xvc2VkRkRSYWlzZXMoZnVuYyk6CisgICAgICAgIEB3cmFwcyhmdW5jKQorICAgICAgICBkZWYgd3JhcHBlcihzZWxmKToKKyAgICAgICAgICAgICNmb3JjaWJseSBjbG9zZSB0aGUgZmQgYmVmb3JlIGludm9raW5nIHRoZSBwcm9ibGVtIGZ1bmN0aW9uCisgICAgICAgICAgICBmID0gc2VsZi5mCisgICAgICAgICAgICBvcy5jbG9zZShmLmZpbGVubygpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZ1bmMoc2VsZiwgZikKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmVycm5vLCBlcnJuby5FQkFERikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgSU9FcnJvciIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gd3JhcHBlcgorCisgICAgQENsb3NlZEZEUmFpc2VzCisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2Uoc2VsZiwgZik6CisgICAgICAgIGYuY2xvc2UoKQorCisgICAgQENsb3NlZEZEUmFpc2VzCisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkV3JpdGUoc2VsZiwgZik6CisgICAgICAgIGYud3JpdGUoJ2EnKQorCisgICAgQENsb3NlZEZEUmFpc2VzCisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkU2VlayhzZWxmLCBmKToKKyAgICAgICAgZi5zZWVrKDApCisKKyAgICBAQ2xvc2VkRkRSYWlzZXMKKyAgICBkZWYgdGVzdEVycm5vT25DbG9zZWRUZWxsKHNlbGYsIGYpOgorICAgICAgICBmLnRlbGwoKQorCisgICAgQENsb3NlZEZEUmFpc2VzCisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkVHJ1bmNhdGUoc2VsZiwgZik6CisgICAgICAgIGYudHJ1bmNhdGUoMCkKKworICAgIEBDbG9zZWRGRAorICAgIGRlZiB0ZXN0RXJybm9PbkNsb3NlZFNlZWthYmxlKHNlbGYsIGYpOgorICAgICAgICBmLnNlZWthYmxlKCkKKworICAgIEBDbG9zZWRGRAorICAgIGRlZiB0ZXN0RXJybm9PbkNsb3NlZFJlYWRhYmxlKHNlbGYsIGYpOgorICAgICAgICBmLnJlYWRhYmxlKCkKKworICAgIEBDbG9zZWRGRAorICAgIGRlZiB0ZXN0RXJybm9PbkNsb3NlZFdyaXRhYmxlKHNlbGYsIGYpOgorICAgICAgICBmLndyaXRhYmxlKCkKKworICAgIEBDbG9zZWRGRAorICAgIGRlZiB0ZXN0RXJybm9PbkNsb3NlZEZpbGVubyhzZWxmLCBmKToKKyAgICAgICAgZi5maWxlbm8oKQorCisgICAgQENsb3NlZEZECisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkSXNhdHR5KHNlbGYsIGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuaXNhdHR5KCksIEZhbHNlKQorCisgICAgZGVmIFJlb3BlbkZvclJlYWQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmYgPSBfRmlsZUlPKFRFU1RGTiwgJ3InKQorICAgICAgICBvcy5jbG9zZShzZWxmLmYuZmlsZW5vKCkpCisgICAgICAgIHJldHVybiBzZWxmLmYKKworICAgIEBDbG9zZWRGRFJhaXNlcworICAgIGRlZiB0ZXN0RXJybm9PbkNsb3NlZFJlYWQoc2VsZiwgZik6CisgICAgICAgIGYgPSBzZWxmLlJlb3BlbkZvclJlYWQoKQorICAgICAgICBmLnJlYWQoMSkKKworICAgIEBDbG9zZWRGRFJhaXNlcworICAgIGRlZiB0ZXN0RXJybm9PbkNsb3NlZFJlYWRhbGwoc2VsZiwgZik6CisgICAgICAgIGYgPSBzZWxmLlJlb3BlbkZvclJlYWQoKQorICAgICAgICBmLnJlYWRhbGwoKQorCisgICAgQENsb3NlZEZEUmFpc2VzCisgICAgZGVmIHRlc3RFcnJub09uQ2xvc2VkUmVhZGludG8oc2VsZiwgZik6CisgICAgICAgIGYgPSBzZWxmLlJlb3BlbkZvclJlYWQoKQorICAgICAgICBhID0gYXJyYXkoYidiJywgYid4JyoxMCkKKyAgICAgICAgZi5yZWFkaW50byhhKQorCitjbGFzcyBPdGhlckZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdEFibGVzKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gX0ZpbGVJTyhURVNURk4sICJ3IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWthYmxlKCksIFRydWUpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCAiciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgIGYgPSBfRmlsZUlPKFRFU1RGTiwgImErIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRhYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2Vla2FibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5pc2F0dHkoKSwgRmFsc2UpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiI6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmID0gX0ZpbGVJTygiL2Rldi90dHkiLCAiYSIpCisgICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgV2hlbiBydW4gaW4gYSBjcm9uIGpvYiB0aGVyZSBqdXN0IGFyZW4ndCBhbnkKKyAgICAgICAgICAgICAgICAgICAgIyB0dHlzLCBzbyBza2lwIHRoZSB0ZXN0LiAgVGhpcyBhbHNvIGhhbmRsZXMgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgIyBPUydlcyB0aGF0IGRvbid0IHN1cHBvcnQgL2Rldi90dHkuCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gImRhcndpbiIgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2JzZCcgbm90IGluIHN5cy5wbGF0Zm9ybSBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3N1bm9zJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFNvbWVob3cgL2Rldi90dHkgYXBwZWFycyBzZWVrYWJsZSBvbiBzb21lIEJTRHMKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmlzYXR0eSgpLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisKKyAgICBkZWYgdGVzdE1vZGVTdHJpbmdzKHNlbGYpOgorICAgICAgICAjIGNoZWNrIGludmFsaWQgbW9kZSBzdHJpbmdzCisgICAgICAgIGZvciBtb2RlIGluICgiIiwgImFVIiwgIndVKyIsICJydyIsICJydCIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSBfRmlsZUlPKFRFU1RGTiwgbW9kZSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCclciBpcyBhbiBpbnZhbGlkIGZpbGUgbW9kZScgJSBtb2RlKQorCisgICAgZGVmIHRlc3RVbmljb2RlT3BlbihzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgcmVwciB3b3JrcyBmb3IgdW5pY29kZSB0b28KKyAgICAgICAgZiA9IF9GaWxlSU8oc3RyKFRFU1RGTiksICJ3IikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIG9zLnVubGluayhURVNURk4pCisKKyAgICBkZWYgdGVzdEJ5dGVzT3BlbihzZWxmKToKKyAgICAgICAgIyBPcGVuaW5nIGEgYnl0ZXMgZmlsZW5hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm4gPSBURVNURk4uZW5jb2RlKCJhc2NpaSIpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICAjIFNraXAgdGVzdAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGYgPSBfRmlsZUlPKGZuLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoYiJhYmMiKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiYWJjIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisKKyAgICBkZWYgdGVzdEludmFsaWRGZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX0ZpbGVJTywgLTEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBfRmlsZUlPLCBtYWtlX2JhZF9mZCgpKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIGltcG9ydCBtc3ZjcnQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1zdmNydC5nZXRfb3NmaGFuZGxlLCBtYWtlX2JhZF9mZCgpKQorICAgICAgICAjIElzc3VlIDE1OTg5CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgX0ZpbGVJTywgX3Rlc3RjYXBpLklOVF9NQVggKyAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9GaWxlSU8sIF90ZXN0Y2FwaS5JTlRfTUlOIC0gMSkKKworICAgIGRlZiB0ZXN0QmFkTW9kZUFyZ3VtZW50KHNlbGYpOgorICAgICAgICAjIHZlcmlmeSB0aGF0IHdlIGdldCBhIHNlbnNpYmxlIGVycm9yIG1lc3NhZ2UgZm9yIGJhZCBtb2RlIGFyZ3VtZW50CisgICAgICAgIGJhZF9tb2RlID0gInF3ZXJ0eSIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCBiYWRfbW9kZSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgaWYgbXNnLmFyZ3NbMF0gIT0gMDoKKyAgICAgICAgICAgICAgICBzID0gc3RyKG1zZykKKyAgICAgICAgICAgICAgICBpZiBURVNURk4gaW4gcyBvciBiYWRfbW9kZSBub3QgaW4gczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJiYWQgZXJyb3IgbWVzc2FnZSBmb3IgaW52YWxpZCBtb2RlOiAlcyIgJSBzKQorICAgICAgICAgICAgIyBpZiBtc2cuYXJnc1swXSA9PSAwLCB3ZSdyZSBwcm9iYWJseSBvbiBXaW5kb3dzIHdoZXJlIHRoZXJlIG1heSBiZQorICAgICAgICAgICAgIyBubyBvYnZpb3VzIHdheSB0byBkaXNjb3ZlciB3aHkgb3BlbigpIGZhaWxlZC4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBlcnJvciBmb3IgaW52YWxpZCBtb2RlOiAlcyIgJSBiYWRfbW9kZSkKKworICAgIGRlZiB0ZXN0VHJ1bmNhdGUoc2VsZik6CisgICAgICAgIGYgPSBfRmlsZUlPKFRFU1RGTiwgJ3cnKQorICAgICAgICBmLndyaXRlKGJ5dGVzKGJ5dGVhcnJheShyYW5nZSgxMCkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMTApCisgICAgICAgIGYudHJ1bmNhdGUoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKDAsIG9zLlNFRUtfRU5EKSwgNSkKKyAgICAgICAgZi50cnVuY2F0ZSgxNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoMCwgb3MuU0VFS19FTkQpLCAxNSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFRydW5jYXRlT25XaW5kb3dzKHNlbGYpOgorICAgICAgICBkZWYgYnVnODAxNjMxKCk6CisgICAgICAgICAgICAjIFNGIGJ1ZyA8aHR0cDovL3d3dy5weXRob24ub3JnL3NmLzgwMTYzMT4KKyAgICAgICAgICAgICMgImZpbGUudHJ1bmNhdGUgZmF1bHQgb24gd2luZG93cyIKKyAgICAgICAgICAgIGYgPSBfRmlsZUlPKFRFU1RGTiwgJ3cnKQorICAgICAgICAgICAgZi53cml0ZShieXRlcyhyYW5nZSgxMSkpKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgIGYgPSBfRmlsZUlPKFRFU1RGTiwncisnKQorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCg1KQorICAgICAgICAgICAgaWYgZGF0YSAhPSBieXRlcyhyYW5nZSg1KSk6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJSZWFkIG9uIGZpbGUgb3BlbmVkIGZvciB1cGRhdGUgZmFpbGVkICVyIiAlIGRhdGEpCisgICAgICAgICAgICBpZiBmLnRlbGwoKSAhPSA1OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRmlsZSBwb3MgYWZ0ZXIgcmVhZCB3cm9uZyAlZCIgJSBmLnRlbGwoKSkKKworICAgICAgICAgICAgZi50cnVuY2F0ZSgpCisgICAgICAgICAgICBpZiBmLnRlbGwoKSAhPSA1OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRmlsZSBwb3MgYWZ0ZXIgZnRydW5jYXRlIHdyb25nICVkIiAlIGYudGVsbCgpKQorCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNpemUgPSBvcy5wYXRoLmdldHNpemUoVEVTVEZOKQorICAgICAgICAgICAgaWYgc2l6ZSAhPSA1OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRmlsZSBzaXplIGFmdGVyIGZ0cnVuY2F0ZSB3cm9uZyAlZCIgJSBzaXplKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJ1ZzgwMTYzMSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorCisgICAgZGVmIHRlc3RBcHBlbmQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3diJykKKyAgICAgICAgICAgIGYud3JpdGUoYidzcGFtJykKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAnYWInKQorICAgICAgICAgICAgZi53cml0ZShiJ2VnZ3MnKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBmID0gb3BlbihURVNURk4sICdyYicpCisgICAgICAgICAgICBkID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBiJ3NwYW1lZ2dzJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0SW52YWxpZEluaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgX0ZpbGVJTywgIjEiLCAwLCAwKQorCisgICAgZGVmIHRlc3RXYXJuaW5ncyhzZWxmKToKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncyhxdWlldD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Lndhcm5pbmdzLCBbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgX0ZpbGVJTywgW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcud2FybmluZ3MsIFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX0ZpbGVJTywgIi9zb21lL2ludmFsaWQvbmFtZSIsICJydCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcud2FybmluZ3MsIFtdKQorCisgICAgZGVmIHRlc3Rfc3Vycm9nYXRlcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjODQzODogdHJ5IHRvIG9wZW4gYSBmaWxlbmFtZSBjb250YWluaW5nIHN1cnJvZ2F0ZXMuCisgICAgICAgICMgSXQgc2hvdWxkIGVpdGhlciBmYWlsIGJlY2F1c2UgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBvciB0aGUgZmlsZW5hbWUKKyAgICAgICAgIyBjYW4ndCBiZSByZXByZXNlbnRlZCB1c2luZyB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZywgYnV0IG5vdCBiZWNhdXNlCisgICAgICAgICMgb2YgYSBMb29rdXBFcnJvciBmb3IgdGhlIGVycm9yIGhhbmRsZXIgInN1cnJvZ2F0ZWVzY2FwZSIuCisgICAgICAgIGZpbGVuYW1lID0gdSdcdWRjODAudHh0JworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIF9GaWxlSU8oZmlsZW5hbWUpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IChVbmljb2RlRW5jb2RlRXJyb3IsIElPRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICAjIFNwYXduIGEgc2VwYXJhdGUgUHl0aG9uIHByb2Nlc3Mgd2l0aCBhIGRpZmZlcmVudCAiZmlsZSBzeXN0ZW0KKyAgICAgICAgIyBkZWZhdWx0IGVuY29kaW5nIiwgdG8gZXhlcmNpc2UgdGhpcyBmdXJ0aGVyLgorICAgICAgICBlbnYgPSBkaWN0KG9zLmVudmlyb24pCisgICAgICAgIGVudltiJ0xDX0NUWVBFJ10gPSBiJ0MnCisgICAgICAgIF8sIG91dCA9IHJ1bl9weXRob24oJy1jJywgJ2ltcG9ydCBfaW87IF9pby5GaWxlSU8oJXIpJyAlIGZpbGVuYW1lLCBlbnY9ZW52KQorICAgICAgICBpZiAoJ1VuaWNvZGVFbmNvZGVFcnJvcicgbm90IGluIG91dCBhbmQgbm90CisgICAgICAgICAgICAgICAgKCAoJ0lPRXJyb3I6IFtFcnJubyAyXSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JyBpbiBvdXQpIG9yCisgICAgICAgICAgICAgICAgICAoJ0lPRXJyb3I6IFtFcnJubyAyMl0gSW52YWxpZCBhcmd1bWVudCcgaW4gb3V0KSApICk6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0JhZCBvdXRwdXQ6ICVyJyAlIG91dCkKKworICAgIGRlZiB0ZXN0VW5jbG9zZWRGRE9uRXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBjbGFzcyBNeUV4Y2VwdGlvbihFeGNlcHRpb24pOiBwYXNzCisgICAgICAgIGNsYXNzIE15RmlsZUlPKF9GaWxlSU8pOgorICAgICAgICAgICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJuYW1lIjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTXlFeGNlcHRpb24oImJsb2NrZWQgc2V0dGluZyBuYW1lIikKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoTXlGaWxlSU8sIHNlbGYpLl9fc2V0YXR0cl9fKG5hbWUsIHZhbHVlKQorICAgICAgICBmZCA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhNeUV4Y2VwdGlvbiwgTXlGaWxlSU8sIGZkKQorICAgICAgICBvcy5jbG9zZShmZCkgICMgc2hvdWxkIG5vdCByYWlzZSBPU0Vycm9yKEVCQURGKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgIyBIaXN0b3JpY2FsbHksIHRoZXNlIHRlc3RzIGhhdmUgYmVlbiBzbG9wcHkgYWJvdXQgcmVtb3ZpbmcgVEVTVEZOLgorICAgICMgU28gZ2V0IHJpZCBvZiBpdCBubyBtYXR0ZXIgd2hhdC4KKyAgICB0cnk6CisgICAgICAgIHJ1bl91bml0dGVzdChBdXRvRmlsZVRlc3RzLCBPdGhlckZpbGVUZXN0cykKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhURVNURk4pOgorICAgICAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZmxvYXQucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9mbG9hdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjQ2MzcxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZmxvYXQucHkKQEAgLTAsMCArMSwxNDAyIEBACisKK2ltcG9ydCB1bml0dGVzdCwgc3RydWN0CitpbXBvcnQgb3MKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgbWF0aAorZnJvbSBtYXRoIGltcG9ydCBpc2luZiwgaXNuYW4sIGNvcHlzaWduLCBsZGV4cAoraW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgZnJhY3Rpb25zCitpbXBvcnQgc3lzCisKK0lORiA9IGZsb2F0KCJpbmYiKQorTkFOID0gZmxvYXQoIm5hbiIpCisKK2hhdmVfZ2V0Zm9ybWF0ID0gaGFzYXR0cihmbG9hdCwgIl9fZ2V0Zm9ybWF0X18iKQorcmVxdWlyZXNfZ2V0Zm9ybWF0ID0gdW5pdHRlc3Quc2tpcFVubGVzcyhoYXZlX2dldGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVzIF9fZ2V0Zm9ybWF0X18iKQorcmVxdWlyZXNfc2V0Zm9ybWF0ID0gdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGZsb2F0LCAiX19zZXRmb3JtYXRfXyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZXMgX19zZXRmb3JtYXRfXyIpCisjIGRlY29yYXRvciBmb3Igc2tpcHBpbmcgdGVzdHMgb24gbm9uLUlFRUUgNzU0IHBsYXRmb3JtcworcmVxdWlyZXNfSUVFRV83NTQgPSB1bml0dGVzdC5za2lwVW5sZXNzKGhhdmVfZ2V0Zm9ybWF0IGFuZAorICAgIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKworI2xvY2F0ZSBmaWxlIHdpdGggZmxvYXQgZm9ybWF0IHRlc3QgdmFsdWVzCit0ZXN0X2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyCitmb3JtYXRfdGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdF9kaXIsICdmb3JtYXRmbG9hdF90ZXN0Y2FzZXMudHh0JykKKworY2xhc3MgR2VuZXJhbEZsb2F0Q2FzZXModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoMy4xNCksIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoMzE0KSwgMzE0LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoMzE0TCksIDMxNC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KCIgIDMuMTQgICIpLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIiAgMHgzLjEgICIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiICAtMHgzLnAtMSAgIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIgICsweDMucC0xICAiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIisrMy4xNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiKy0zLjE0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICItKzMuMTQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIi0tMy4xNCIpCisgICAgICAgICMgY2hlY2sgdGhhdCB3ZSBkb24ndCBhY2NlcHQgYWx0ZXJuYXRlIGV4cG9uZW50IG1hcmtlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICItMS43ZDI5IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIzRC0xNCIpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHVuaWNvZGUoIiAgMy4xNCAgIikpLCAzLjE0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCh1bmljb2RlKCIgIFx1MDY2My5cdTA2NjFcdTA2NjQgICIsJ3Jhdy11bmljb2RlLWVzY2FwZScpKSwgMy4xNCkKKworICAgICAgICAjIGV4dHJhIGxvbmcgc3RyaW5ncyBzaG91bGQgbm8gbG9uZ2VyIGJlIGEgcHJvYmxlbQorICAgICAgICAjIChpbiAyLjYsIGxvbmcgdW5pY29kZSBpbnB1dHMgdG8gZmxvYXQgcmFpc2VkIFZhbHVlRXJyb3IpCisgICAgICAgIGZsb2F0KCcuJyArICcxJyoxMDAwKQorICAgICAgICBmbG9hdCh1bmljb2RlKCcuJyArICcxJyoxMDAwKSkKKworICAgIGRlZiBjaGVja19jb252ZXJzaW9uX3RvX2ludChzZWxmLCB4KToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBpbnQoeCkgaGFzIHRoZSBjb3JyZWN0IHZhbHVlIGFuZCB0eXBlLCBmb3IgYSBmbG9hdCB4LiIiIgorICAgICAgICBuID0gaW50KHgpCisgICAgICAgIGlmIHggPj0gMC4wOgorICAgICAgICAgICAgIyB4ID49IDAgYW5kIG4gPSBpbnQoeCkgID09PiAgbiA8PSB4IDwgbiArIDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKG4sIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MoeCwgbiArIDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHggPCAwIGFuZCBuID0gaW50KHgpICA9PT4gIG4gPj0geCA+IG4gLSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChuLCB4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHgsIG4gLSAxKQorCisgICAgICAgICMgUmVzdWx0IHNob3VsZCBiZSBhbiBpbnQgaWYgd2l0aGluIHJhbmdlLCBlbHNlIGEgbG9uZy4KKyAgICAgICAgaWYgLXN5cy5tYXhpbnQtMSA8PSBuIDw9IHN5cy5tYXhpbnQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUobiksIGludCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShuKSwgbG9uZykKKworICAgICAgICAjIERvdWJsZSBjaGVjay4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGludChuKSksIHR5cGUobikpCisKKyAgICBkZWYgdGVzdF9jb252ZXJzaW9uX3RvX2ludChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGZsb2F0cyB3aXRoaW4gdGhlIHJhbmdlIG9mIGFuIGludCBjb252ZXJ0IHRvIHR5cGUKKyAgICAgICAgIyBpbnQsIG5vdCBsb25nLiAgKGlzc3VlICMxMTE0NC4pCisgICAgICAgIGJvdW5kYXJ5ID0gZmxvYXQoc3lzLm1heGludCArIDEpCisgICAgICAgIGVwc2lsb24gPSAyKiotc3lzLmZsb2F0X2luZm8ubWFudF9kaWcgKiBib3VuZGFyeQorCisgICAgICAgICMgVGhlc2UgMiBmbG9hdHMgYXJlIGVpdGhlciBzaWRlIG9mIHRoZSBwb3NpdGl2ZSBpbnQvbG9uZyBib3VuZGFyeSBvbgorICAgICAgICAjIGJvdGggMzItYml0IGFuZCA2NC1iaXQgc3lzdGVtcy4KKyAgICAgICAgc2VsZi5jaGVja19jb252ZXJzaW9uX3RvX2ludChib3VuZGFyeSAtIGVwc2lsb24pCisgICAgICAgIHNlbGYuY2hlY2tfY29udmVyc2lvbl90b19pbnQoYm91bmRhcnkpCisKKyAgICAgICAgIyBUaGVzZSBmbG9hdHMgYXJlIGVpdGhlciBzaWRlIG9mIHRoZSBuZWdhdGl2ZSBsb25nL2ludCBib3VuZGFyeSBvbgorICAgICAgICAjIDY0LWJpdCBzeXN0ZW1zLi4uCisgICAgICAgIHNlbGYuY2hlY2tfY29udmVyc2lvbl90b19pbnQoLWJvdW5kYXJ5IC0gMiplcHNpbG9uKQorICAgICAgICBzZWxmLmNoZWNrX2NvbnZlcnNpb25fdG9faW50KC1ib3VuZGFyeSkKKworICAgICAgICAjIC4uLiBhbmQgdGhlc2Ugb25lcyBhcmUgZWl0aGVyIHNpZGUgb2YgdGhlIG5lZ2F0aXZlIGxvbmcvaW50CisgICAgICAgICMgYm91bmRhcnkgb24gMzItYml0IHN5c3RlbXMuCisgICAgICAgIHNlbGYuY2hlY2tfY29udmVyc2lvbl90b19pbnQoLWJvdW5kYXJ5IC0gMS4wKQorICAgICAgICBzZWxmLmNoZWNrX2NvbnZlcnNpb25fdG9faW50KC1ib3VuZGFyeSAtIDEuMCArIDIqZXBzaWxvbikKKworICAgIEB0ZXN0X3N1cHBvcnQucnVuX3dpdGhfbG9jYWxlKCdMQ19OVU1FUklDJywgJ2ZyX0ZSJywgJ2RlX0RFJykKKyAgICBkZWYgdGVzdF9mbG9hdF93aXRoX2NvbW1hKHNlbGYpOgorICAgICAgICAjIHNldCBsb2NhbGUgdG8gc29tZXRoaW5nIHRoYXQgZG9lc24ndCB1c2UgJy4nIGZvciB0aGUgZGVjaW1hbCBwb2ludAorICAgICAgICAjIGZsb2F0IG11c3Qgbm90IGFjY2VwdCB0aGUgbG9jYWxlIHNwZWNpZmljIGRlY2ltYWwgcG9pbnQgYnV0CisgICAgICAgICMgaXQgc3RpbGwgaGFzIHRvIGFjY2VwdCB0aGUgbm9ybWFsIHB5dGhvbiBzeW50YXgKKyAgICAgICAgaW1wb3J0IGxvY2FsZQorICAgICAgICBpZiBub3QgbG9jYWxlLmxvY2FsZWNvbnYoKVsnZGVjaW1hbF9wb2ludCddID09ICcsJzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoIiAgMy4xNCAgIiksIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoIiszLjE0ICAiKSwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCgiLTMuMTQgICIpLCAtMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCgiLjE0ICAiKSwgLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KCIzLiAgIiksIDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCgiMy5lMyAgIiksIDMwMDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCgiMy4yZTMgICIpLCAzMjAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoIjIuNWUtMSAgIiksIDAuMjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoIjVlLTEiKSwgMC41KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIiAgMywxNCAgIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIgICszLDE0ICAiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIiAgLTMsMTQgICIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiICAweDMuMSAgIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIgIC0weDMucC0xICAiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIiAgKzB4My5wLTEgICIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoIiAgMjUuZS0xICAiKSwgMi41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rfc3VwcG9ydC5mY21wKGZsb2F0KCIgIC4yNWUtMSAgIiksIC4wMjUpLCAwKQorCisgICAgZGVmIHRlc3RfZmxvYXRjb252ZXJzaW9uKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGNhbGxzIHRvIF9fZmxvYXRfXygpIHdvcmsgcHJvcGVybHkKKyAgICAgICAgY2xhc3MgRm9vMDoKKyAgICAgICAgICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyLgorCisgICAgICAgIGNsYXNzIEZvbzEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyLgorCisgICAgICAgIGNsYXNzIEZvbzIoZmxvYXQpOgorICAgICAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIuCisKKyAgICAgICAgY2xhc3MgRm9vMyhmbG9hdCk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIHZhbHVlPTAuKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmxvYXQuX19uZXdfXyhjbHMsIDIqdmFsdWUpCisKKyAgICAgICAgICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBjbGFzcyBGb280KGZsb2F0KToKKyAgICAgICAgICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgIyBJc3N1ZSA1NzU5OiBfX2Zsb2F0X18gbm90IGNhbGxlZCBvbiBzdHIgc3ViY2xhc3NlcyAodGhvdWdoIGl0IGlzIG9uCisgICAgICAgICMgdW5pY29kZSBzdWJjbGFzc2VzKS4KKyAgICAgICAgY2xhc3MgRm9vU3RyKHN0cik6CisgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBmbG9hdChzdHIoc2VsZikpICsgMQorCisgICAgICAgIGNsYXNzIEZvb1VuaWNvZGUodW5pY29kZSk6CisgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBmbG9hdCh1bmljb2RlKHNlbGYpKSArIDEKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZsb2F0KEZvbzAoKSksIDQyLikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChmbG9hdChGb28xKCkpLCA0Mi4pCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZmxvYXQoRm9vMigpKSwgNDIuKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZsb2F0KEZvbzMoMjEpKSwgNDIuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZsb2F0LCBGb280KDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChmbG9hdChGb29Vbmljb2RlKCc4JykpLCA5LikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChmbG9hdChGb29TdHIoJzgnKSksIDkuKQorCisgICAgZGVmIHRlc3RfaXNfaW50ZWdlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoMS4xKS5pc19pbnRlZ2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoMS4pLmlzX2ludGVnZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbG9hdCgibmFuIikuaXNfaW50ZWdlcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZsb2F0KCJpbmYiKS5pc19pbnRlZ2VyKCkpCisKKyAgICBkZWYgdGVzdF9mbG9hdGFzcmF0aW8oc2VsZik6CisgICAgICAgIGZvciBmLCByYXRpbyBpbiBbCisgICAgICAgICAgICAgICAgKDAuODc1LCAoNywgOCkpLAorICAgICAgICAgICAgICAgICgtMC44NzUsICgtNywgOCkpLAorICAgICAgICAgICAgICAgICgwLjAsICgwLCAxKSksCisgICAgICAgICAgICAgICAgKDExLjUsICgyMywgMikpLAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hc19pbnRlZ2VyX3JhdGlvKCksIHJhdGlvKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMDAwKToKKyAgICAgICAgICAgIGYgPSByYW5kb20ucmFuZG9tKCkKKyAgICAgICAgICAgIGYgKj0gMTAgKiogcmFuZG9tLnJhbmRpbnQoLTEwMCwgMTAwKQorICAgICAgICAgICAgbiwgZCA9IGYuYXNfaW50ZWdlcl9yYXRpbygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KG4pLl9fdHJ1ZWRpdl9fKGQpLCBmKQorCisgICAgICAgIFIgPSBmcmFjdGlvbnMuRnJhY3Rpb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSKDAsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFIoKmZsb2F0KDAuMCkuYXNfaW50ZWdlcl9yYXRpbygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSKDUsIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFIoKmZsb2F0KDIuNSkuYXNfaW50ZWdlcl9yYXRpbygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSKDEsIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFIoKmZsb2F0KDAuNSkuYXNfaW50ZWdlcl9yYXRpbygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSKDQ3Mjg3Nzk2MDg3MzkwMjEsIDIyNTE3OTk4MTM2ODUyNDgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFIoKmZsb2F0KDIuMSkuYXNfaW50ZWdlcl9yYXRpbygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSKC00NzI4Nzc5NjA4NzM5MDIxLCAyMjUxNzk5ODEzNjg1MjQ4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSKCpmbG9hdCgtMi4xKS5hc19pbnRlZ2VyX3JhdGlvKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFIoLTIxMDAsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFIoKmZsb2F0KC0yMTAwLjApLmFzX2ludGVnZXJfcmF0aW8oKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZmxvYXQoJ2luZicpLmFzX2ludGVnZXJfcmF0aW8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0KCctaW5mJykuYXNfaW50ZWdlcl9yYXRpbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQoJ25hbicpLmFzX2ludGVnZXJfcmF0aW8pCisKKyAgICBkZWYgYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24oc2VsZiwgYSwgYik6CisgICAgICAgICMgZmFpbCB1bmxlc3MgYSA9PSBiIGFuZCBhIGFuZCBiIGhhdmUgdGhlIHNhbWUgc2lnbiBiaXQ7CisgICAgICAgICMgdGhlIG9ubHkgZGlmZmVyZW5jZSBmcm9tIGFzc2VydEVxdWFsIGlzIHRoYXQgdGhpcyB0ZXN0CisgICAgICAgICMgZGlzdGluZ3Vpc2hlcyAtMC4wIGFuZCAwLjAuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEsIGNvcHlzaWduKDEuMCwgYSkpLCAoYiwgY29weXNpZ24oMS4wLCBiKSkpCisKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF9mbG9hdF9tb2Qoc2VsZik6CisgICAgICAgICMgQ2hlY2sgYmVoYXZpb3VyIG9mICUgb3BlcmF0b3IgZm9yIElFRUUgNzU0IHNwZWNpYWwgY2FzZXMuCisgICAgICAgICMgSW4gcGFydGljdWxhciwgY2hlY2sgc2lnbnMgb2YgemVyb3MuCisgICAgICAgIG1vZCA9IG9wZXJhdG9yLm1vZAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24obW9kKC0xLjAsIDEuMCksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoLTFlLTEwMCwgMS4wKSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgtMC4wLCAxLjApLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24obW9kKDAuMCwgMS4wKSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgxZS0xMDAsIDEuMCksIDFlLTEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoMS4wLCAxLjApLCAwLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoLTEuMCwgLTEuMCksIC0wLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24obW9kKC0xZS0xMDAsIC0xLjApLCAtMWUtMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKG1vZCgtMC4wLCAtMS4wKSwgLTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoMC4wLCAtMS4wKSwgLTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoMWUtMTAwLCAtMS4wKSwgLTEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihtb2QoMS4wLCAtMS4wKSwgLTAuMCkKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X2Zsb2F0X3BvdyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IGJ1aWx0aW4gcG93IGFuZCAqKiBvcGVyYXRvciBmb3IgSUVFRSA3NTQgc3BlY2lhbCBjYXNlcy4KKyAgICAgICAgIyBTcGVjaWFsIGNhc2VzIHRha2VuIGZyb20gc2VjdGlvbiBGLjkuNC40IG9mIHRoZSBDOTkgc3BlY2lmaWNhdGlvbgorCisgICAgICAgIGZvciBwb3dfb3AgaW4gcG93LCBvcGVyYXRvci5wb3c6CisgICAgICAgICAgICAjIHgqKk5BTiBpcyBOQU4gZm9yIGFueSB4IGV4Y2VwdCAxCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKC1JTkYsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcCgtMi4wLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoLTEuMCwgTkFOKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKC0wLjUsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcCgtMC4wLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoMC4wLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoMC41LCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoMi4wLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoSU5GLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoTkFOLCBOQU4pKSkKKworICAgICAgICAgICAgIyBOQU4qKnkgaXMgTkFOIGZvciBhbnkgeSBleGNlcHQgKy0wCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgLUlORikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIC0yLjApKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoTkFOLCAtMS4wKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgLTAuNSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIDAuNSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIDEuMCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIDIuMCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIElORikpKQorCisgICAgICAgICAgICAjICgrLTApKip5IHJhaXNlcyBaZXJvRGl2aXNpb25FcnJvciBmb3IgeSBhIG5lZ2F0aXZlIG9kZCBpbnRlZ2VyCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcG93X29wLCAtMC4wLCAtMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHBvd19vcCwgMC4wLCAtMS4wKQorCisgICAgICAgICAgICAjICgrLTApKip5IHJhaXNlcyBaZXJvRGl2aXNpb25FcnJvciBmb3IgeSBmaW5pdGUgYW5kIG5lZ2F0aXZlCisgICAgICAgICAgICAjIGJ1dCBub3QgYW4gb2RkIGludGVnZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBwb3dfb3AsIC0wLjAsIC0yLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcG93X29wLCAtMC4wLCAtMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHBvd19vcCwgMC4wLCAtMi4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHBvd19vcCwgMC4wLCAtMC41KQorCisgICAgICAgICAgICAjICgrLTApKip5IGlzICstMCBmb3IgeSBhIHBvc2l0aXZlIG9kZCBpbnRlZ2VyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC4wLCAxLjApLCAtMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC4wLCAxLjApLCAwLjApCisKKyAgICAgICAgICAgICMgKCstMCkqKnkgaXMgMCBmb3IgeSBmaW5pdGUgYW5kIHBvc2l0aXZlIGJ1dCBub3QgYW4gb2RkIGludGVnZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjAsIDAuNSksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjAsIDIuMCksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuMCwgMC41KSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC4wLCAyLjApLCAwLjApCisKKyAgICAgICAgICAgICMgKC0xKSoqKy1pbmYgaXMgMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgLUlORiksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIElORiksIDEuMCkKKworICAgICAgICAgICAgIyAxKip5IGlzIDEgZm9yIGFueSB5LCBldmVuIGlmIHkgaXMgYW4gaW5maW5pdHkgb3IgbmFuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC1JTkYpLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC0yLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC0xLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC0wLjUpLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC0wLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgMC41KSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCAxLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIDIuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgSU5GKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCBOQU4pLCAxLjApCisKKyAgICAgICAgICAgICMgeCoqKy0wIGlzIDEgZm9yIGFueSB4LCBldmVuIGlmIHggaXMgYSB6ZXJvLCBpbmZpbml0eSwgb3IgbmFuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC41LCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKElORiwgMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoTkFOLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIC0wLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC41LCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKElORiwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKE5BTiwgLTAuMCksIDEuMCkKKworICAgICAgICAgICAgIyB4Kip5IHJhaXNlcyBWYWx1ZUVycm9yIGZvciBmaW5pdGUgbmVnYXRpdmUgeCBhbmQgbm9uLWludGVncmFsIHkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvd19vcCwgLTIuMCwgLTAuNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvd19vcCwgLTIuMCwgMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93X29wLCAtMS4wLCAtMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93X29wLCAtMS4wLCAwLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3dfb3AsIC0wLjUsIC0wLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3dfb3AsIC0wLjUsIDAuNSkKKworICAgICAgICAgICAgIyB4KiotSU5GIGlzIElORiBmb3IgYWJzKHgpIDwgMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuNSwgLUlORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjAsIC1JTkYpLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjAsIC1JTkYpLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjUsIC1JTkYpLCBJTkYpCisKKyAgICAgICAgICAgICMgeCoqLUlORiBpcyAwIGZvciBhYnMoeCkgPiAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCAtSU5GKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgLUlORiksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgLUlORiksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKElORiwgLUlORiksIDAuMCkKKworICAgICAgICAgICAgIyB4KipJTkYgaXMgMCBmb3IgYWJzKHgpIDwgMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuNSwgSU5GKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuMCwgSU5GKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC4wLCBJTkYpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjUsIElORiksIDAuMCkKKworICAgICAgICAgICAgIyB4KipJTkYgaXMgSU5GIGZvciBhYnMoeCkgPiAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCBJTkYpLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCBJTkYpLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIElORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKElORiwgSU5GKSwgSU5GKQorCisgICAgICAgICAgICAjICgtSU5GKSoqeSBpcyAtMC4wIGZvciB5IGEgbmVnYXRpdmUgb2RkIGludGVnZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIC0xLjApLCAtMC4wKQorCisgICAgICAgICAgICAjICgtSU5GKSoqeSBpcyAwLjAgZm9yIHkgbmVnYXRpdmUgYnV0IG5vdCBhbiBvZGQgaW50ZWdlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgLTAuNSksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIC0yLjApLCAwLjApCisKKyAgICAgICAgICAgICMgKC1JTkYpKip5IGlzIC1JTkYgZm9yIHkgYSBwb3NpdGl2ZSBvZGQgaW50ZWdlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgMS4wKSwgLUlORikKKworICAgICAgICAgICAgIyAoLUlORikqKnkgaXMgSU5GIGZvciB5IHBvc2l0aXZlIGJ1dCBub3QgYW4gb2RkIGludGVnZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIDAuNSksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIDIuMCksIElORikKKworICAgICAgICAgICAgIyBJTkYqKnkgaXMgSU5GIGZvciB5IHBvc2l0aXZlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChJTkYsIDAuNSksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKElORiwgMS4wKSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAyLjApLCBJTkYpCisKKyAgICAgICAgICAgICMgSU5GKip5IGlzIDAuMCBmb3IgeSBuZWdhdGl2ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAtMi4wKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAtMS4wKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAtMC41KSwgMC4wKQorCisgICAgICAgICAgICAjIGJhc2ljIGNoZWNrcyBub3QgY292ZXJlZCBieSB0aGUgc3BlY2lhbCBjYXNlcyBhYm92ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgLTIuMCksIDAuMjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAtMS4wKSwgLTAuNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIC0wLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAxLjApLCAtMi4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgMi4wKSwgNC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgLTIuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIC0xLjApLCAtMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIDEuMCksIC0xLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAyLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIC0yLjApLCAwLjI1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAtMS4wKSwgMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIDEuMCksIDIuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgMi4wKSwgNC4wKQorCisgICAgICAgICAgICAjIDEgKiogbGFyZ2UgYW5kIC0xICoqIGxhcmdlOyBzb21lIGxpYm1zIGFwcGFyZW50bHkKKyAgICAgICAgICAgICMgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoZXNlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC0xZTEwMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgMWUxMDApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAtMWUxMDApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAxZTEwMCksIDEuMCkKKworICAgICAgICAgICAgIyBjaGVjayBzaWduIGZvciByZXN1bHRzIHRoYXQgdW5kZXJmbG93IHRvIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIC0yMDAwLjApLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3dfb3AsIC0yLjAsIC0yMDAwLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAtMjAwMS4wKSwgLTAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgLTIwMDAuMCksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgLTIwMDAuNSksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgLTIwMDEuMCksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjUsIDIwMDAuMCksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvd19vcCwgLTAuNSwgMjAwMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuNSwgMjAwMS4wKSwgLTAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgMjAwMC4wKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC41LCAyMDAwLjUpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjUsIDIwMDEuMCksIDAuMCkKKworICAgICAgICAgICAgIyBjaGVjayB3ZSBkb24ndCByYWlzZSBhbiBleGNlcHRpb24gZm9yIHN1Ym5vcm1hbCByZXN1bHRzLAorICAgICAgICAgICAgIyBhbmQgdmFsaWRhdGUgc2lnbnMuICBUZXN0cyBjdXJyZW50bHkgZGlzYWJsZWQsIHNpbmNlCisgICAgICAgICAgICAjIHRoZXkgZmFpbCBvbiBzeXN0ZW1zIHdoZXJlIGEgc3Vibm9ybWFsIHJlc3VsdCBmcm9tIHBvdworICAgICAgICAgICAgIyBpcyBmbHVzaGVkIHRvIHplcm8gKGUuZy4gRGViaWFuL2lhNjQuKQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoMC41LCAxMDQ4KSA8IDFlLTMxNSkKKyAgICAgICAgICAgICNzZWxmLmFzc2VydFRydWUoMC4wIDwgcG93X29wKC0wLjUsIDEwNDgpIDwgMWUtMzE1KQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoMC41LCAxMDQ3KSA8IDFlLTMxNSkKKyAgICAgICAgICAgICNzZWxmLmFzc2VydFRydWUoMC4wID4gcG93X29wKC0wLjUsIDEwNDcpID4gLTFlLTMxNSkKKyAgICAgICAgICAgICNzZWxmLmFzc2VydFRydWUoMC4wIDwgcG93X29wKDIuMCwgLTEwNDgpIDwgMWUtMzE1KQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoLTIuMCwgLTEwNDgpIDwgMWUtMzE1KQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoMi4wLCAtMTA0NykgPCAxZS0zMTUpCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKDAuMCA+IHBvd19vcCgtMi4wLCAtMTA0NykgPiAtMWUtMzE1KQorCisKK0ByZXF1aXJlc19zZXRmb3JtYXQKK2NsYXNzIEZvcm1hdEZ1bmN0aW9uc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zYXZlX2Zvcm1hdHMgPSB7J2RvdWJsZSc6ZmxvYXQuX19nZXRmb3JtYXRfXygnZG91YmxlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmbG9hdCc6ZmxvYXQuX19nZXRmb3JtYXRfXygnZmxvYXQnKX0KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZmxvYXQuX19zZXRmb3JtYXRfXygnZG91YmxlJywgc2VsZi5zYXZlX2Zvcm1hdHNbJ2RvdWJsZSddKQorICAgICAgICBmbG9hdC5fX3NldGZvcm1hdF9fKCdmbG9hdCcsIHNlbGYuc2F2ZV9mb3JtYXRzWydmbG9hdCddKQorCisgICAgZGVmIHRlc3RfZ2V0Zm9ybWF0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEluKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oJ2RvdWJsZScpLAorICAgICAgICAgICAgICAgICAgICAgIFsndW5rbm93bicsICdJRUVFLCBiaWctZW5kaWFuJywgJ0lFRUUsIGxpdHRsZS1lbmRpYW4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihmbG9hdC5fX2dldGZvcm1hdF9fKCdmbG9hdCcpLAorICAgICAgICAgICAgICAgICAgICAgIFsndW5rbm93bicsICdJRUVFLCBiaWctZW5kaWFuJywgJ0lFRUUsIGxpdHRsZS1lbmRpYW4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQuX19nZXRmb3JtYXRfXywgJ2NoaWNrZW4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZsb2F0Ll9fZ2V0Zm9ybWF0X18sIDEpCisKKyAgICBkZWYgdGVzdF9zZXRmb3JtYXQoc2VsZik6CisgICAgICAgIGZvciB0IGluICdkb3VibGUnLCAnZmxvYXQnOgorICAgICAgICAgICAgZmxvYXQuX19zZXRmb3JtYXRfXyh0LCAndW5rbm93bicpCisgICAgICAgICAgICBpZiBzZWxmLnNhdmVfZm9ybWF0c1t0XSA9PSAnSUVFRSwgYmlnLWVuZGlhbic6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQuX19zZXRmb3JtYXRfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LCAnSUVFRSwgbGl0dGxlLWVuZGlhbicpCisgICAgICAgICAgICBlbGlmIHNlbGYuc2F2ZV9mb3JtYXRzW3RdID09ICdJRUVFLCBsaXR0bGUtZW5kaWFuJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdC5fX3NldGZvcm1hdF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQsICdJRUVFLCBiaWctZW5kaWFuJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQuX19zZXRmb3JtYXRfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LCAnSUVFRSwgYmlnLWVuZGlhbicpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQuX19zZXRmb3JtYXRfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LCAnSUVFRSwgbGl0dGxlLWVuZGlhbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdC5fX3NldGZvcm1hdF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCwgJ2NoaWNrZW4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdC5fX3NldGZvcm1hdF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnY2hpY2tlbicsICd1bmtub3duJykKKworQkVfRE9VQkxFX0lORiA9ICdceDdmXHhmMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKK0xFX0RPVUJMRV9JTkYgPSAnJy5qb2luKHJldmVyc2VkKEJFX0RPVUJMRV9JTkYpKQorQkVfRE9VQkxFX05BTiA9ICdceDdmXHhmOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKK0xFX0RPVUJMRV9OQU4gPSAnJy5qb2luKHJldmVyc2VkKEJFX0RPVUJMRV9OQU4pKQorCitCRV9GTE9BVF9JTkYgPSAnXHg3Zlx4ODBceDAwXHgwMCcKK0xFX0ZMT0FUX0lORiA9ICcnLmpvaW4ocmV2ZXJzZWQoQkVfRkxPQVRfSU5GKSkKK0JFX0ZMT0FUX05BTiA9ICdceDdmXHhjMFx4MDBceDAwJworTEVfRkxPQVRfTkFOID0gJycuam9pbihyZXZlcnNlZChCRV9GTE9BVF9OQU4pKQorCisjIG9uIG5vbi1JRUVFIHBsYXRmb3JtcywgYXR0ZW1wdGluZyB0byB1bnBhY2sgYSBiaXQgcGF0dGVybgorIyByZXByZXNlbnRpbmcgYW4gaW5maW5pdHkgb3IgYSBOYU4gc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbi4KKworQHJlcXVpcmVzX3NldGZvcm1hdAorY2xhc3MgVW5rbm93bkZvcm1hdFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2F2ZV9mb3JtYXRzID0geydkb3VibGUnOmZsb2F0Ll9fZ2V0Zm9ybWF0X18oJ2RvdWJsZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmxvYXQnOmZsb2F0Ll9fZ2V0Zm9ybWF0X18oJ2Zsb2F0Jyl9CisgICAgICAgIGZsb2F0Ll9fc2V0Zm9ybWF0X18oJ2RvdWJsZScsICd1bmtub3duJykKKyAgICAgICAgZmxvYXQuX19zZXRmb3JtYXRfXygnZmxvYXQnLCAndW5rbm93bicpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZsb2F0Ll9fc2V0Zm9ybWF0X18oJ2RvdWJsZScsIHNlbGYuc2F2ZV9mb3JtYXRzWydkb3VibGUnXSkKKyAgICAgICAgZmxvYXQuX19zZXRmb3JtYXRfXygnZmxvYXQnLCBzZWxmLnNhdmVfZm9ybWF0c1snZmxvYXQnXSkKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9zcGVjaWFsc19kb250X3VucGFjayhzZWxmKToKKyAgICAgICAgZm9yIGZtdCwgZGF0YSBpbiBbKCc+ZCcsIEJFX0RPVUJMRV9JTkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJz5kJywgQkVfRE9VQkxFX05BTiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPGQnLCBMRV9ET1VCTEVfSU5GKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZCcsIExFX0RPVUJMRV9OQU4pXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cnVjdC51bnBhY2ssIGZtdCwgZGF0YSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0X3NwZWNpYWxzX2RvbnRfdW5wYWNrKHNlbGYpOgorICAgICAgICBmb3IgZm10LCBkYXRhIGluIFsoJz5mJywgQkVfRkxPQVRfSU5GKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc+ZicsIEJFX0ZMT0FUX05BTiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPGYnLCBMRV9GTE9BVF9JTkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJzxmJywgTEVfRkxPQVRfTkFOKV06CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJ1Y3QudW5wYWNrLCBmbXQsIGRhdGEpCisKKworIyBvbiBhbiBJRUVFIHBsYXRmb3JtLCBhbGwgd2UgZ3VhcmFudGVlIGlzIHRoYXQgYml0IHBhdHRlcm5zCisjIHJlcHJlc2VudGluZyBpbmZpbml0aWVzIG9yIE5hTnMgZG8gbm90IHJhaXNlIGFuIGV4Y2VwdGlvbjsgYWxsIGVsc2UKKyMgaXMgYWNjaWRlbnQgKHRvZGF5KS4KKyMgbGV0J3MgYWxzbyB0cnkgdG8gZ3VhcmFudGVlIHRoYXQgLTAuMCBhbmQgMC4wIGRvbid0IGdldCBjb25mdXNlZC4KKworY2xhc3MgSUVFRUZvcm1hdFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X2RvdWJsZV9zcGVjaWFsc19kb191bnBhY2soc2VsZik6CisgICAgICAgIGZvciBmbXQsIGRhdGEgaW4gWygnPmQnLCBCRV9ET1VCTEVfSU5GKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc+ZCcsIEJFX0RPVUJMRV9OQU4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJzxkJywgTEVfRE9VQkxFX0lORiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPGQnLCBMRV9ET1VCTEVfTkFOKV06CisgICAgICAgICAgICBzdHJ1Y3QudW5wYWNrKGZtdCwgZGF0YSkKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X2Zsb2F0X3NwZWNpYWxzX2RvX3VucGFjayhzZWxmKToKKyAgICAgICAgZm9yIGZtdCwgZGF0YSBpbiBbKCc+ZicsIEJFX0ZMT0FUX0lORiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPmYnLCBCRV9GTE9BVF9OQU4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJzxmJywgTEVfRkxPQVRfSU5GKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZicsIExFX0ZMT0FUX05BTildOgorICAgICAgICAgICAgc3RydWN0LnVucGFjayhmbXQsIGRhdGEpCisKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF9uZWdhdGl2ZV96ZXJvKHNlbGYpOgorICAgICAgICBkZWYgcG9zX3BvcygpOgorICAgICAgICAgICAgcmV0dXJuIDAuMCwgbWF0aC5hdGFuMigwLjAsIC0xKQorICAgICAgICBkZWYgcG9zX25lZygpOgorICAgICAgICAgICAgcmV0dXJuIDAuMCwgbWF0aC5hdGFuMigtMC4wLCAtMSkKKyAgICAgICAgZGVmIG5lZ19wb3MoKToKKyAgICAgICAgICAgIHJldHVybiAtMC4wLCBtYXRoLmF0YW4yKDAuMCwgLTEpCisgICAgICAgIGRlZiBuZWdfbmVnKCk6CisgICAgICAgICAgICByZXR1cm4gLTAuMCwgbWF0aC5hdGFuMigtMC4wLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NfcG9zKCksIG5lZ19wb3MoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NfbmVnKCksIG5lZ19uZWcoKSkKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X3VuZGVyZmxvd19zaWduKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgLTFlLTEwMDAgZ2l2ZXMgLTAuMCwgbm90IDAuMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYXRhbjIoLTFlLTEwMDAsIC0xKSwgbWF0aC5hdGFuMigtMC4wLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hdGFuMihmbG9hdCgnLTFlLTEwMDAnKSwgLTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGguYXRhbjIoLTAuMCwgLTEpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICAjIHRoZXNlIHNob3VsZCBiZSByZXdyaXR0ZW4gdG8gdXNlIGJvdGggZm9ybWF0KHgsIHNwZWMpIGFuZAorICAgICAgICAjIHguX19mb3JtYXRfXyhzcGVjKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDAuMCwgJ2YnKSwgJzAuMDAwMDAwJykKKworICAgICAgICAjIHRoZSBkZWZhdWx0IGlzICdnJywgZXhjZXB0IGZvciBlbXB0eSBmb3JtYXQgc3BlYworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgwLjAsICcnKSwgJzAuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDAuMDEsICcnKSwgJzAuMDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgwLjAxLCAnZycpLCAnMC4wMScpCisKKyAgICAgICAgIyBlbXB0eSBwcmVzZW50YXRpb24gdHlwZSBzaG91bGQgZm9ybWF0IGluIHRoZSBzYW1lIHdheSBhcyBzdHIKKyAgICAgICAgIyAoaXNzdWUgNTkyMCkKKyAgICAgICAgeCA9IDEwMC83LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh4LCAnJyksIHN0cih4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoeCwgJy0nKSwgc3RyKHgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh4LCAnPicpLCBzdHIoeCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHgsICcyJyksIHN0cih4KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjAsICdmJyksICcxLjAwMDAwMCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuMCwgJ2YnKSwgJy0xLjAwMDAwMCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoIDEuMCwgJyBmJyksICcgMS4wMDAwMDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgtMS4wLCAnIGYnKSwgJy0xLjAwMDAwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KCAxLjAsICcrZicpLCAnKzEuMDAwMDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoLTEuMCwgJytmJyksICctMS4wMDAwMDAnKQorCisgICAgICAgICMgJSBmb3JtYXR0aW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KC0xLjAsICclJyksICctMTAwLjAwMDAwMCUnKQorCisgICAgICAgICMgY29udmVyc2lvbiB0byBzdHJpbmcgc2hvdWxkIGZhaWwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAzLjAsICJzIikKKworICAgICAgICAjIG90aGVyIGZvcm1hdCBzcGVjaWZpZXJzIHNob3VsZG4ndCB3b3JrIG9uIGZsb2F0cywKKyAgICAgICAgIyAgaW4gcGFydGljdWxhciBpbnQgc3BlY2lmaWVycworICAgICAgICBmb3IgZm9ybWF0X3NwZWMgaW4gKFtjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdhJyksIG9yZCgneicpKzEpXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ0EnKSwgb3JkKCdaJykrMSldKToKKyAgICAgICAgICAgIGlmIG5vdCBmb3JtYXRfc3BlYyBpbiAnZUVmRmdHbiUnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgMC4wLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDEuMCwgZm9ybWF0X3NwZWMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAtMS4wLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDFlMTAwLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIC0xZTEwMCwgZm9ybWF0X3NwZWMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAxZS0xMDAsIGZvcm1hdF9zcGVjKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgLTFlLTEwMCwgZm9ybWF0X3NwZWMpCisKKyAgICAgICAgIyBpc3N1ZSAzMzgyOiAnZicgYW5kICdGJyB3aXRoIGluZidzIGFuZCBuYW4ncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpmfScuZm9ybWF0KElORiksICdpbmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpGfScuZm9ybWF0KElORiksICdJTkYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpmfScuZm9ybWF0KC1JTkYpLCAnLWluZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOkZ9Jy5mb3JtYXQoLUlORiksICctSU5GJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Zn0nLmZvcm1hdChOQU4pLCAnbmFuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Rn0nLmZvcm1hdChOQU4pLCAnTkFOJykKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X2Zvcm1hdF90ZXN0ZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKGZvcm1hdF90ZXN0ZmlsZSkgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBvcGVuKGZvcm1hdF90ZXN0ZmlsZSk6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCctLScpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGxocywgcmhzID0gbWFwKHN0ci5zdHJpcCwgbGluZS5zcGxpdCgnLT4nKSkKKyAgICAgICAgICAgICAgICBmbXQsIGFyZyA9IGxocy5zcGxpdCgpCisgICAgICAgICAgICAgICAgYXJnID0gZmxvYXQoYXJnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10ICUgYXJnLCByaHMpCisgICAgICAgICAgICAgICAgaWYgbm90IG1hdGguaXNuYW4oYXJnKSBhbmQgY29weXNpZ24oMS4wLCBhcmcpID4gMC4wOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdCAlIC1hcmcsICctJyArIHJocykKKworICAgIGRlZiB0ZXN0X2lzc3VlNTg2NChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMTIzLjQ1NiwgJy40JyksICcxMjMuNScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEyMzQuNTYsICcuNCcpLCAnMS4yMzVlKzAzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMTIzNDUuNiwgJy40JyksICcxLjIzNWUrMDQnKQorCitjbGFzcyBSZXByVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGZsb2F0c19maWxlID0gb3Blbihvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmxvYXRpbmdfcG9pbnRzLnR4dCcpKQorICAgICAgICBmb3IgbGluZSBpbiBmbG9hdHNfZmlsZToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lIG9yIGxpbmUuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB2ID0gZXZhbChsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCBldmFsKHJlcHIodikpKQorICAgICAgICBmbG9hdHNfZmlsZS5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhnZXRhdHRyKHN5cywgJ2Zsb2F0X3JlcHJfc3R5bGUnLCAnJykgPT0gJ3Nob3J0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYXBwbGllcyBvbmx5IHdoZW4gdXNpbmcgc2hvcnQgZmxvYXQgcmVwciBzdHlsZSIpCisgICAgZGVmIHRlc3Rfc2hvcnRfcmVwcihzZWxmKToKKyAgICAgICAgIyB0ZXN0IHNob3J0IGZsb2F0IHJlcHIgaW50cm9kdWNlZCBpbiBQeXRob24gMy4xLiAgT25lIGFzcGVjdAorICAgICAgICAjIG9mIHRoaXMgcmVwciBpcyB0aGF0IHdlIGdldCBzb21lIGRlZ3JlZSBvZiBzdHIgLT4gZmxvYXQgLT4KKyAgICAgICAgIyBzdHIgcm91bmR0cmlwcGluZy4gIEluIHBhcnRpY3VsYXIsIGZvciBhbnkgbnVtZXJpYyBzdHJpbmcKKyAgICAgICAgIyBjb250YWluaW5nIDE1IG9yIGZld2VyIHNpZ25pZmljYW50IGRpZ2l0cywgdGhvc2UgZXhhY3Qgc2FtZQorICAgICAgICAjIGRpZ2l0cyAobW9kdWxvIHRyYWlsaW5nIHplcm9zKSBzaG91bGQgYXBwZWFyIGluIHRoZSBvdXRwdXQuCisgICAgICAgICMgTm8gbW9yZSByZXByKDAuMDMpIC0+ICIwLjAyOTk5OTk5OTk5OTk5OTk5OSIhCisKKyAgICAgICAgdGVzdF9zdHJpbmdzID0gWworICAgICAgICAgICAgIyBvdXRwdXQgYWx3YXlzIGluY2x1ZGVzICplaXRoZXIqIGEgZGVjaW1hbCBwb2ludCBhbmQgYXQKKyAgICAgICAgICAgICMgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIHRoYXQgcG9pbnQsIG9yIGFuIGV4cG9uZW50LgorICAgICAgICAgICAgJzAuMCcsCisgICAgICAgICAgICAnMS4wJywKKyAgICAgICAgICAgICcwLjAxJywKKyAgICAgICAgICAgICcwLjAyJywKKyAgICAgICAgICAgICcwLjAzJywKKyAgICAgICAgICAgICcwLjA0JywKKyAgICAgICAgICAgICcwLjA1JywKKyAgICAgICAgICAgICcxLjIzNDU2Nzg5JywKKyAgICAgICAgICAgICcxMC4wJywKKyAgICAgICAgICAgICcxMDAuMCcsCisgICAgICAgICAgICAjIHZhbHVlcyA+PSAxZTE2IGdldCBhbiBleHBvbmVudC4uLgorICAgICAgICAgICAgJzEwMDAwMDAwMDAwMDAwMDAuMCcsCisgICAgICAgICAgICAnOTk5OTk5OTk5OTk5OTk5MC4wJywKKyAgICAgICAgICAgICcxZSsxNicsCisgICAgICAgICAgICAnMWUrMTcnLAorICAgICAgICAgICAgIyAuLi4gYW5kIHNvIGRvIHZhbHVlcyA8IDFlLTQKKyAgICAgICAgICAgICcwLjAwMScsCisgICAgICAgICAgICAnMC4wMDEwMDEnLAorICAgICAgICAgICAgJzAuMDAwMTAwMDAwMDAwMDAwMDEnLAorICAgICAgICAgICAgJzAuMDAwMScsCisgICAgICAgICAgICAnOS45OTk5OTk5OTk5OTllLTA1JywKKyAgICAgICAgICAgICcxZS0wNScsCisgICAgICAgICAgICAjIHZhbHVlcyBkZXNpZ25lZCB0byBwcm92b2tlIGZhaWx1cmUgaWYgdGhlIEZQVSByb3VuZGluZworICAgICAgICAgICAgIyBwcmVjaXNpb24gaXNuJ3Qgc2V0IGNvcnJlY3RseQorICAgICAgICAgICAgJzguNzIyOTM3NzExMTAzNjFlKzI1JywKKyAgICAgICAgICAgICc3LjQ3MDA1MzA3MzQyMzEzZSsyNicsCisgICAgICAgICAgICAnMi44NjQzODAwMDQzOTY5OGUrMjgnLAorICAgICAgICAgICAgJzguODkxNDI5MDUyNDYxNzllKzI4JywKKyAgICAgICAgICAgICczLjA4NTc4MDg3MDc5MjMyZSszNScsCisgICAgICAgICAgICBdCisKKyAgICAgICAgZm9yIHMgaW4gdGVzdF9zdHJpbmdzOgorICAgICAgICAgICAgbmVncyA9ICctJytzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHJlcHIoZmxvYXQocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZWdzLCByZXByKGZsb2F0KG5lZ3MpKSkKKworCitAcmVxdWlyZXNfSUVFRV83NTQKK2NsYXNzIFJvdW5kVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3NlY29uZF9hcmd1bWVudF90eXBlKHNlbGYpOgorICAgICAgICAjIGFueSB0eXBlIHdpdGggYW4gX19pbmRleF9fIG1ldGhvZCBzaG91bGQgYmUgcGVybWl0dGVkIGFzCisgICAgICAgICMgYSBzZWNvbmQgYXJndW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgxMi4zNCwgVHJ1ZSksIDEyLjMpCisKKyAgICAgICAgY2xhc3MgTXlJbmRleChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5kZXhfXyhzZWxmKTogcmV0dXJuIDQKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgtMC4xMjM0NTYsIE15SW5kZXgoKSksIC0wLjEyMzUpCisgICAgICAgICMgYnV0IGZsb2F0cyBzaG91bGQgYmUgaWxsZWdhbAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJvdW5kLCAzLjE0MTU5LCAyLjApCisKKyAgICBkZWYgdGVzdF9pbmZfbmFuKHNlbGYpOgorICAgICAgICAjIHJvdW5kaW5nIGFuIGluZmluaXR5IG9yIG5hbiByZXR1cm5zIHRoZSBzYW1lIG51bWJlcjsKKyAgICAgICAgIyAoaW4gcHkzaywgcm91bmRpbmcgYW4gaW5maW5pdHkgb3IgbmFuIHJhaXNlcyBhbiBlcnJvciwKKyAgICAgICAgIyAgc2luY2UgdGhlIHJlc3VsdCBjYW4ndCBiZSByZXByZXNlbnRlZCBhcyBhIGxvbmcpLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtSU5GKSwgLUlORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4ocm91bmQoTkFOKSkpCisgICAgICAgIGZvciBuIGluIHJhbmdlKC01LCA1KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoSU5GLCBuKSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtSU5GLCBuKSwgLUlORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJvdW5kKE5BTiwgbikpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcm91bmQsIElORiwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJvdW5kLCAtSU5GLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcm91bmQsIE5BTiwgImNlY2kgbidlc3QgcGFzIHVuIGludGVnZXIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJvdW5kLCAtMC4wLCAxaikKKworICAgIGRlZiB0ZXN0X2xhcmdlX24oc2VsZik6CisgICAgICAgIGZvciBuIGluIFszMjQsIDMyNSwgNDAwLCAyKiozMS0xLCAyKiozMSwgMioqMzIsIDIqKjEwMF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDEyMy40NTYsIG4pLCAxMjMuNDU2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtMTIzLjQ1NiwgbiksIC0xMjMuNDU2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxZTMwMCwgbiksIDFlMzAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxZS0zMjAsIG4pLCAxZS0zMjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMWUxNTAsIDMwMCksIDFlMTUwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDFlMzAwLCAzMDcpLCAxZTMwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtMy4xNDE1LCAzMDgpLCAtMy4xNDE1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDFlMTUwLCAzMDkpLCAxZTE1MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxLjRlLTMxNSwgMzE1KSwgMWUtMzE1KQorCisgICAgZGVmIHRlc3Rfc21hbGxfbihzZWxmKToKKyAgICAgICAgZm9yIG4gaW4gWy0zMDgsIC0zMDksIC00MDAsIDEtMioqMzEsIC0yKiozMSwgLTIqKjMxLTEsIC0yKioxMDBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxMjMuNDU2LCBuKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgtMTIzLjQ1NiwgbiksIC0wLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDFlMzAwLCBuKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxZS0zMjAsIG4pLCAwLjApCisKKyAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcm91bmQsIDEuNmUzMDgsIC0zMDgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHJvdW5kLCAtMS43ZTMwOCwgLTMwOCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGdldGF0dHIoc3lzLCAnZmxvYXRfcmVwcl9zdHlsZScsICcnKSA9PSAnc2hvcnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IGFwcGxpZXMgb25seSB3aGVuIHVzaW5nIHNob3J0IGZsb2F0IHJlcHIgc3R5bGUiKQorICAgIGRlZiB0ZXN0X3ByZXZpb3VzX3JvdW5kX2J1Z3Moc2VsZik6CisgICAgICAgICMgcGFydGljdWxhciBjYXNlcyB0aGF0IGhhdmUgb2NjdXJyZWQgaW4gYnVnIHJlcG9ydHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg1NjI5NDk5NTM0MjEzMTIuNSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIDU2Mjk0OTk1MzQyMTMxMi41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDU2Mjk0OTk1MzQyMTMxLjUsIDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIDU2Mjk0OTk1MzQyMTMxLjUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhnZXRhdHRyKHN5cywgJ2Zsb2F0X3JlcHJfc3R5bGUnLCAnJykgPT0gJ3Nob3J0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCBhcHBsaWVzIG9ubHkgd2hlbiB1c2luZyBzaG9ydCBmbG9hdCByZXByIHN0eWxlIikKKyAgICBkZWYgdGVzdF9oYWxmd2F5X2Nhc2VzKHNlbGYpOgorICAgICAgICAjIEhhbGZ3YXkgY2FzZXMgbmVlZCBzcGVjaWFsIGF0dGVudGlvbiwgc2luY2UgdGhlIGN1cnJlbnQKKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbiBoYXMgdG8gZGVhbCB3aXRoIHRoZW0gc3BlY2lhbGx5LiAgTm90ZSB0aGF0CisgICAgICAgICMgMi54IHJvdW5kcyBoYWxmd2F5IHZhbHVlcyB1cCAoaS5lLiwgYXdheSBmcm9tIHplcm8pIHdoaWxlCisgICAgICAgICMgMy54IGRvZXMgcm91bmQtaGFsZi10by1ldmVuLgorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDAuMTI1LCAyKSwgMC4xMykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgwLjM3NSwgMiksIDAuMzgpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMC42MjUsIDIpLCAwLjYzKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDAuODc1LCAyKSwgMC44OCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgtMC4xMjUsIDIpLCAtMC4xMykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgtMC4zNzUsIDIpLCAtMC4zOCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgtMC42MjUsIDIpLCAtMC42MykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgtMC44NzUsIDIpLCAtMC44OCkKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDAuMjUsIDEpLCAwLjMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMC43NSwgMSksIDAuOCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgtMC4yNSwgMSksIC0wLjMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoLTAuNzUsIDEpLCAtMC44KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTYuNSwgMCksIC03LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTUuNSwgMCksIC02LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTEuNSwgMCksIC0yLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoLTAuNSwgMCksIC0xLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMC41LCAwKSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDEuNSwgMCksIDIuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgyLjUsIDApLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMy41LCAwKSwgNC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDQuNSwgMCksIDUuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg1LjUsIDApLCA2LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNi41LCAwKSwgNy4wKQorCisgICAgICAgICMgc2FtZSBidXQgd2l0aG91dCBhbiBleHBsaWNpdCBzZWNvbmQgYXJndW1lbnQ7IGluIDMueCB0aGVzZQorICAgICAgICAjIHdpbGwgZ2l2ZSBpbnRlZ2VycworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC02LjUpLCAtNy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC01LjUpLCAtNi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0xLjUpLCAtMi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0wLjUpLCAtMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDAuNSksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxLjUpLCAyLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMi41KSwgMy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDMuNSksIDQuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg0LjUpLCA1LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNS41KSwgNi4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDYuNSksIDcuMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0yNS4wLCAtMSksIC0zMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC0xNS4wLCAtMSksIC0yMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKC01LjAsIC0xKSwgLTEwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNS4wLCAtMSksIDEwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMTUuMCwgLTEpLCAyMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDI1LjAsIC0xKSwgMzAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgzNS4wLCAtMSksIDQwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNDUuMCwgLTEpLCA1MC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDU1LjAsIC0xKSwgNjAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg2NS4wLCAtMSksIDcwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoNzUuMCwgLTEpLCA4MC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDg1LjAsIC0xKSwgOTAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCg5NS4wLCAtMSksIDEwMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDEyMzI1LjAsIC0xKSwgMTIzMzAuMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDM1MC4wLCAtMiksIDQwMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDQ1MC4wLCAtMiksIDUwMC4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoMC41ZTIxLCAtMjEpLCAxZTIxKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDEuNWUyMSwgLTIxKSwgMmUyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgyLjVlMjEsIC0yMSksIDNlMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocm91bmQoNS41ZTIxLCAtMjEpLCA2ZTIxKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDguNWUyMSwgLTIxKSwgOWUyMSkKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKC0xLjVlMjIsIC0yMiksIC0yZTIyKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKC0wLjVlMjIsIC0yMiksIC0xZTIyKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJvdW5kKDAuNWUyMiwgLTIyKSwgMWUyMikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyb3VuZCgxLjVlMjIsIC0yMiksIDJlMjIpCisKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X2Zvcm1hdF9zcGVjaWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvcm1hdHRpbmcgb2YgbmFucyBhbmQgaW5mcy4KKworICAgICAgICBkZWYgdGVzdChmbXQsIHZhbHVlLCBleHBlY3RlZCk6CisgICAgICAgICAgICAjIFRlc3Qgd2l0aCBib3RoICUgYW5kIGZvcm1hdCgpLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQgJSB2YWx1ZSwgZXhwZWN0ZWQsIGZtdCkKKyAgICAgICAgICAgIGlmIG5vdCAnIycgaW4gZm10OgorICAgICAgICAgICAgICAgICMgVW50aWwgaXNzdWUgNzA5NCBpcyBpbXBsZW1lbnRlZCwgZm9ybWF0KCkgZm9yIGZsb2F0cyBkb2Vzbid0CisgICAgICAgICAgICAgICAgIyAgc3VwcG9ydCAnIycgZm9ybWF0dGluZworICAgICAgICAgICAgICAgIGZtdCA9IGZtdFsxOl0gIyBzdHJpcCBvZmYgdGhlICUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh2YWx1ZSwgZm10KSwgZXhwZWN0ZWQsIGZtdCkKKworICAgICAgICBmb3IgZm10IGluIFsnJWUnLCAnJWYnLCAnJWcnLCAnJS4wZScsICclLjZmJywgJyUuMjBnJywKKyAgICAgICAgICAgICAgICAgICAgJyUjZScsICclI2YnLCAnJSNnJywgJyUjLjIwZScsICclIy4xNWYnLCAnJSMuM2cnXToKKyAgICAgICAgICAgIHBmbXQgPSAnJSsnICsgZm10WzE6XQorICAgICAgICAgICAgc2ZtdCA9ICclICcgKyBmbXRbMTpdCisgICAgICAgICAgICB0ZXN0KGZtdCwgSU5GLCAnaW5mJykKKyAgICAgICAgICAgIHRlc3QoZm10LCAtSU5GLCAnLWluZicpCisgICAgICAgICAgICB0ZXN0KGZtdCwgTkFOLCAnbmFuJykKKyAgICAgICAgICAgIHRlc3QoZm10LCAtTkFOLCAnbmFuJykKKyAgICAgICAgICAgICMgV2hlbiBhc2tpbmcgZm9yIGEgc2lnbiwgaXQncyBhbHdheXMgcHJvdmlkZWQuIG5hbnMgYXJlCisgICAgICAgICAgICAjICBhbHdheXMgcG9zaXRpdmUuCisgICAgICAgICAgICB0ZXN0KHBmbXQsIElORiwgJytpbmYnKQorICAgICAgICAgICAgdGVzdChwZm10LCAtSU5GLCAnLWluZicpCisgICAgICAgICAgICB0ZXN0KHBmbXQsIE5BTiwgJytuYW4nKQorICAgICAgICAgICAgdGVzdChwZm10LCAtTkFOLCAnK25hbicpCisgICAgICAgICAgICAjIFdoZW4gdXNpbmcgJyAnIGZvciBhIHNpZ24gY29kZSwgb25seSBpbmZzIGNhbiBiZSBuZWdhdGl2ZS4KKyAgICAgICAgICAgICMgIE90aGVycyBoYXZlIGEgc3BhY2UuCisgICAgICAgICAgICB0ZXN0KHNmbXQsIElORiwgJyBpbmYnKQorICAgICAgICAgICAgdGVzdChzZm10LCAtSU5GLCAnLWluZicpCisgICAgICAgICAgICB0ZXN0KHNmbXQsIE5BTiwgJyBuYW4nKQorICAgICAgICAgICAgdGVzdChzZm10LCAtTkFOLCAnIG5hbicpCisKKworIyBCZWdpbm5pbmcgd2l0aCBQeXRob24gMi42IGZsb2F0IGhhcyBjcm9zcyBwbGF0Zm9ybSBjb21wYXRpYmxlCisjIHdheXMgdG8gY3JlYXRlIGFuZCByZXByZXNlbnQgaW5mIGFuZCBuYW4KK2NsYXNzIEluZk5hblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2luZl9mcm9tX3N0cihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5mKGZsb2F0KCJpbmYiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luZihmbG9hdCgiK2luZiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5mKGZsb2F0KCItaW5mIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbmYoZmxvYXQoImluZmluaXR5IikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbmYoZmxvYXQoIitpbmZpbml0eSIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5mKGZsb2F0KCItaW5maW5pdHkiKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZsb2F0KCJpbmYiKSksICJpbmYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoIitpbmYiKSksICJpbmYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoIi1pbmYiKSksICItaW5mIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZsb2F0KCJpbmZpbml0eSIpKSwgImluZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmbG9hdCgiK2luZmluaXR5IikpLCAiaW5mIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZsb2F0KCItaW5maW5pdHkiKSksICItaW5mIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoIklORiIpKSwgImluZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmbG9hdCgiK0luZiIpKSwgImluZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmbG9hdCgiLWlORiIpKSwgIi1pbmYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoIkluZmluaXR5IikpLCAiaW5mIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZsb2F0KCIraU5mSW5JdFkiKSksICJpbmYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoIi1JTkZJTklUWSIpKSwgIi1pbmYiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGZsb2F0KCJpbmYiKSksICJpbmYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihmbG9hdCgiK2luZiIpKSwgImluZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGZsb2F0KCItaW5mIikpLCAiLWluZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGZsb2F0KCJpbmZpbml0eSIpKSwgImluZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGZsb2F0KCIraW5maW5pdHkiKSksICJpbmYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihmbG9hdCgiLWluZmluaXR5IikpLCAiLWluZiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICJpbmZvIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIraW5mbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiLWluZm8iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgImluIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIraW4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIi1pbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiaW5maW5pdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiK0luZmluIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICItSU5GSSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiaW5maW5pdHlzIikKKworICAgIGRlZiB0ZXN0X2luZl9hc19zdHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcigxZTMwMCAqIDFlMzAwKSwgImluZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcigtMWUzMDAgKiAxZTMwMCksICItaW5mIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cigxZTMwMCAqIDFlMzAwKSwgImluZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKC0xZTMwMCAqIDFlMzAwKSwgIi1pbmYiKQorCisgICAgZGVmIHRlc3RfbmFuX2Zyb21fc3RyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4oZmxvYXQoIm5hbiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKGZsb2F0KCIrbmFuIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4oZmxvYXQoIi1uYW4iKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZsb2F0KCJuYW4iKSksICJuYW4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoIituYW4iKSksICJuYW4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmxvYXQoIi1uYW4iKSksICJuYW4iKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmbG9hdCgiTkFOIikpLCAibmFuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZsb2F0KCIrTkFuIikpLCAibmFuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZsb2F0KCItTmFOIikpLCAibmFuIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihmbG9hdCgibmFuIikpLCAibmFuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZmxvYXQoIituYW4iKSksICJuYW4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihmbG9hdCgiLW5hbiIpKSwgIm5hbiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICJuYW5hIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIrbmFuYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiLW5hbmEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIm5hIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIrbmEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIi1uYSIpCisKKyAgICBkZWYgdGVzdF9uYW5fYXNfc3RyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoMWUzMDAgKiAxZTMwMCAqIDApLCAibmFuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKC0xZTMwMCAqIDFlMzAwICogMCksICJuYW4iKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKDFlMzAwICogMWUzMDAgKiAwKSwgIm5hbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKC0xZTMwMCAqIDFlMzAwICogMCksICJuYW4iKQorCisgICAgZGVmIG5vdGVzdF9mbG9hdF9uYW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShOQU4uaXNfbmFuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoSU5GLmlzX25hbigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCgwLikuaXNfbmFuKCkpCisKKyAgICBkZWYgbm90ZXN0X2Zsb2F0X2luZihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKElORi5pc19pbmYoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShOQU4uaXNfaW5mKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKDAuKS5pc19pbmYoKSkKKworICAgIGRlZiB0ZXN0X2hhc2hfaW5mKHNlbGYpOgorICAgICAgICAjIHRoZSBhY3R1YWwgdmFsdWVzIGhlcmUgc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIGFuCisgICAgICAgICMgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBidXQgdGhleSBuZWVkIHRvIGJlCisgICAgICAgICMgaWRlbnRpY2FsIHRvIHRob3NlIHVzZWQgaW4gdGhlIERlY2ltYWwgbW9kdWxlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZmxvYXQoJ2luZicpKSwgMzE0MTU5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZmxvYXQoJy1pbmYnKSksIC0yNzE4MjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChmbG9hdCgnbmFuJykpLCAwKQorCisKK2Zyb21IZXggPSBmbG9hdC5mcm9taGV4Cit0b0hleCA9IGZsb2F0LmhleAorY2xhc3MgSGV4RmxvYXRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgTUFYID0gZnJvbUhleCgnMHguZmZmZmZmZmZmZmZmZjhwKzEwMjQnKSAgIyBtYXggbm9ybWFsCisgICAgTUlOID0gZnJvbUhleCgnMHgxcC0xMDIyJykgICAgICAgICAgICAgICAgIyBtaW4gbm9ybWFsCisgICAgVElOWSA9IGZyb21IZXgoJzB4MC4wMDAwMDAwMDAwMDAxcC0xMDIyJykgIyBtaW4gc3Vibm9ybWFsCisgICAgRVBTID0gZnJvbUhleCgnMHgwLjAwMDAwMDAwMDAwMDFwMCcpICMgZGlmZiBiZXR3ZWVuIDEuMCBhbmQgbmV4dCBmbG9hdCB1cAorCisgICAgZGVmIGlkZW50aWNhbChzZWxmLCB4LCB5KToKKyAgICAgICAgIyBjaGVjayB0aGF0IGZsb2F0cyB4IGFuZCB5IGFyZSBpZGVudGljYWwsIG9yIHRoYXQgYm90aAorICAgICAgICAjIGFyZSBOYU5zCisgICAgICAgIGlmIGlzbmFuKHgpIG9yIGlzbmFuKHkpOgorICAgICAgICAgICAgaWYgaXNuYW4oeCkgPT0gaXNuYW4oeSk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsaWYgeCA9PSB5IGFuZCAoeCAhPSAwLjAgb3IgY29weXNpZ24oMS4wLCB4KSA9PSBjb3B5c2lnbigxLjAsIHkpKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmZhaWwoJyVyIG5vdCBpZGVudGljYWwgdG8gJXInICUgKHgsIHkpKQorCisgICAgZGVmIHRlc3RfZW5kcyhzZWxmKToKKyAgICAgICAgc2VsZi5pZGVudGljYWwoc2VsZi5NSU4sIGxkZXhwKDEuMCwgLTEwMjIpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChzZWxmLlRJTlksIGxkZXhwKDEuMCwgLTEwNzQpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChzZWxmLkVQUywgbGRleHAoMS4wLCAtNTIpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChzZWxmLk1BWCwgMi4qKGxkZXhwKDEuMCwgMTAyMykgLSBsZGV4cCgxLjAsIDk3MCkpKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9pbnB1dHMoc2VsZik6CisgICAgICAgIGludmFsaWRfaW5wdXRzID0gWworICAgICAgICAgICAgJ2luZmknLCAgICMgbWlzc3BlbHQgaW5maW5pdGllcyBhbmQgbmFucworICAgICAgICAgICAgJy1JbmZpbml0JywKKyAgICAgICAgICAgICcrK2luZicsCisgICAgICAgICAgICAnLStJbmYnLAorICAgICAgICAgICAgJy0tbmFuJywKKyAgICAgICAgICAgICcrLU5hTicsCisgICAgICAgICAgICAnc25hbicsCisgICAgICAgICAgICAnTmFOcycsCisgICAgICAgICAgICAnbm5hJywKKyAgICAgICAgICAgICdhbicsCisgICAgICAgICAgICAnbmYnLAorICAgICAgICAgICAgJ25maW5pdHknLAorICAgICAgICAgICAgJ2luaXR5JywKKyAgICAgICAgICAgICdpaW5pdHknLAorICAgICAgICAgICAgJzB4bmFuJywKKyAgICAgICAgICAgICcnLAorICAgICAgICAgICAgJyAnLAorICAgICAgICAgICAgJ3gxLjBwMCcsCisgICAgICAgICAgICAnMHhYMS4wcDAnLAorICAgICAgICAgICAgJysgMHgxLjBwMCcsICMgaW50ZXJuYWwgd2hpdGVzcGFjZQorICAgICAgICAgICAgJy0gMHgxLjBwMCcsCisgICAgICAgICAgICAnMCB4MS4wcDAnLAorICAgICAgICAgICAgJzB4IDEuMHAwJywKKyAgICAgICAgICAgICcweDEgMi4wcDAnLAorICAgICAgICAgICAgJysweDEgLjBwMCcsCisgICAgICAgICAgICAnMHgxLiAwcDAnLAorICAgICAgICAgICAgJy0weDEuMCAxcDAnLAorICAgICAgICAgICAgJy0weDEuMCBwMCcsCisgICAgICAgICAgICAnKzB4MS4wcCArMCcsCisgICAgICAgICAgICAnMHgxLjBwIC0wJywKKyAgICAgICAgICAgICcweDEuMHAgMCcsCisgICAgICAgICAgICAnKzB4MS4wcCsgMCcsCisgICAgICAgICAgICAnLTB4MS4wcC0gMCcsCisgICAgICAgICAgICAnKysweDEuMHAtMCcsICMgZG91YmxlIHNpZ25zCisgICAgICAgICAgICAnLS0weDEuMHAwJywKKyAgICAgICAgICAgICcrLTB4MS4wcCswJywKKyAgICAgICAgICAgICctKzB4MS4wcDAnLAorICAgICAgICAgICAgJzB4MS4wcCsrMCcsCisgICAgICAgICAgICAnKzB4MS4wcCstMCcsCisgICAgICAgICAgICAnLTB4MS4wcC0rMCcsCisgICAgICAgICAgICAnMHgxLjBwLS0wJywKKyAgICAgICAgICAgICcweDEuMC5wMCcsCisgICAgICAgICAgICAnMHgucDAnLCAjIG5vIGhleCBkaWdpdHMgYmVmb3JlIG9yIGFmdGVyIHBvaW50CisgICAgICAgICAgICAnMHgxLHAwJywgIyB3cm9uZyBkZWNpbWFsIHBvaW50IGNoYXJhY3RlcgorICAgICAgICAgICAgJzB4MXBhJywKKyAgICAgICAgICAgIHUnMHgxcFx1ZmYxMCcsICAjIGZ1bGx3aWR0aCBVbmljb2RlIGRpZ2l0cworICAgICAgICAgICAgdSdcdWZmMTB4MXAwJywKKyAgICAgICAgICAgIHUnMHhcdWZmMTFwMCcsCisgICAgICAgICAgICB1JzB4MS5cdWZmMTBwMCcsCisgICAgICAgICAgICAnMHgxcDAgXG4gMHgycDAnLAorICAgICAgICAgICAgJzB4MXAwXDAgMHgxcDAnLCAgIyBlbWJlZGRlZCBudWxsIGJ5dGUgaXMgbm90IGVuZCBvZiBzdHJpbmcKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHggaW4gaW52YWxpZF9pbnB1dHM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnJvbUhleCh4KQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0V4cGVjdGVkIGZsb2F0LmZyb21oZXgoJXIpIHRvIHJhaXNlIFZhbHVlRXJyb3I7ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dvdCAlciBpbnN0ZWFkJyAlICh4LCByZXN1bHQpKQorCisKKyAgICBkZWYgdGVzdF93aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICB2YWx1ZV9wYWlycyA9IFsKKyAgICAgICAgICAgICgnaW5mJywgSU5GKSwKKyAgICAgICAgICAgICgnLUluZmluaXR5JywgLUlORiksCisgICAgICAgICAgICAoJ25hbicsIE5BTiksCisgICAgICAgICAgICAoJzEuMCcsIDEuMCksCisgICAgICAgICAgICAoJy0weC4yJywgLTAuMTI1KSwKKyAgICAgICAgICAgICgnLTAuMCcsIC0wLjApCisgICAgICAgICAgICBdCisgICAgICAgIHdoaXRlc3BhY2UgPSBbCisgICAgICAgICAgICAnJywKKyAgICAgICAgICAgICcgJywKKyAgICAgICAgICAgICdcdCcsCisgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgJ1xuIFx0JywKKyAgICAgICAgICAgICdcZicsCisgICAgICAgICAgICAnXHYnLAorICAgICAgICAgICAgJ1xyJworICAgICAgICAgICAgXQorICAgICAgICBmb3IgaW5wLCBleHBlY3RlZCBpbiB2YWx1ZV9wYWlyczoKKyAgICAgICAgICAgIGZvciBsZWFkIGluIHdoaXRlc3BhY2U6CisgICAgICAgICAgICAgICAgZm9yIHRyYWlsIGluIHdoaXRlc3BhY2U6CisgICAgICAgICAgICAgICAgICAgIGdvdCA9IGZyb21IZXgobGVhZCArIGlucCArIHRyYWlsKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmlkZW50aWNhbChnb3QsIGV4cGVjdGVkKQorCisKKyAgICBkZWYgdGVzdF9mcm9tX2hleChzZWxmKToKKyAgICAgICAgTUlOID0gc2VsZi5NSU47CisgICAgICAgIE1BWCA9IHNlbGYuTUFYOworICAgICAgICBUSU5ZID0gc2VsZi5USU5ZOworICAgICAgICBFUFMgPSBzZWxmLkVQUzsKKworICAgICAgICAjIHR3byBzcGVsbGluZ3Mgb2YgaW5maW5pdHksIHdpdGggb3B0aW9uYWwgc2lnbnM7IGNhc2UtaW5zZW5zaXRpdmUKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnaW5mJyksIElORikKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnK0luZicpLCBJTkYpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy1JTkYnKSwgLUlORikKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnaU5mJyksIElORikKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnSW5maW5pdHknKSwgSU5GKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcrSU5GSU5JVFknKSwgSU5GKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctaW5maW5pdHknKSwgLUlORikKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLWlORmlOaXRZJyksIC1JTkYpCisKKyAgICAgICAgIyBuYW5zIHdpdGggb3B0aW9uYWwgc2lnbjsgY2FzZSBpbnNlbnNpdGl2ZQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCduYW4nKSwgTkFOKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcrTmFOJyksIE5BTikKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLU5hTicpLCBOQU4pCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy1uQU4nKSwgTkFOKQorCisgICAgICAgICMgdmFyaWF0aW9ucyBpbiBpbnB1dCBmb3JtYXQKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMScpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJysxJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMS4nKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcxLjAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcxLjBwMCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzAxJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMDEuJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLicpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnKzB4MS4wJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxcDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDFwMCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMVAwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxUDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEucDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMHAwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHguMXA0JyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHguMXAwNCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4LjFwMDA0JyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxcCswJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxUC0wJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnKzB4MXAwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwMXAwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxcDAwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCh1JzB4MXAwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnIDB4MXAwICcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJ1xuIDB4MXAwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxcDAgXHQnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweGFwMCcpLCAxMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweEFwMCcpLCAxMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweGFQMCcpLCAxMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweEFQMCcpLCAxMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweGJlcDAnKSwgMTkwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4QmVwMCcpLCAxOTAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHhiRXAwJyksIDE5MC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWEJFMFAtNCcpLCAxOTAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHhCRXAwJyksIDE5MC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweEIuRXA0JyksIDE5MC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweC5CRXA4JyksIDE5MC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweC4wQkVwMTInKSwgMTkwLjApCisKKyAgICAgICAgIyBtb3ZpbmcgdGhlIHBvaW50IGFyb3VuZAorICAgICAgICBwaSA9IGZyb21IZXgoJzB4MS45MjFmYjU0NDQyZDE4cDEnKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweC4wMDY0ODdlZDUxMTBiNDZwMTEnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4LjAwYzkwZmRhYTIyMTY4Y3AxMCcpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHguMDE5MjFmYjU0NDQyZDE4cDknKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4LjAzMjQzZjZhODg4NWEzcDgnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4LjA2NDg3ZWQ1MTEwYjQ2cDcnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4LjBjOTBmZGFhMjIxNjhjcDYnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4LjE5MjFmYjU0NDQyZDE4cDUnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4LjMyNDNmNmE4ODg1YTNwNCcpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHguNjQ4N2VkNTExMGI0NnAzJyksIHBpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweC5jOTBmZGFhMjIxNjhjcDInKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS45MjFmYjU0NDQyZDE4cDEnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4My4yNDNmNmE4ODg1YTNwMCcpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHg2LjQ4N2VkNTExMGI0NnAtMScpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHhjLjkwZmRhYTIyMTY4Y3AtMicpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxOS4yMWZiNTQ0NDJkMThwLTMnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MzIuNDNmNmE4ODg1YTNwLTQnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4NjQuODdlZDUxMTBiNDZwLTUnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4YzkuMGZkYWEyMjE2OGNwLTYnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MTkyLjFmYjU0NDQyZDE4cC03JyksIHBpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDMyNC4zZjZhODg4NWEzcC04JyksIHBpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDY0OC43ZWQ1MTEwYjQ2cC05JyksIHBpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweGM5MC5mZGFhMjIxNjhjcC0xMCcpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxOTIxLmZiNTQ0NDJkMThwLTExJyksIHBpKQorICAgICAgICAjIC4uLgorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDE5MjFmYjU0NDQyZDEuOHAtNDcnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MzI0M2Y2YTg4ODVhM3AtNDgnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4NjQ4N2VkNTExMGI0NnAtNDknKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4YzkwZmRhYTIyMTY4Y3AtNTAnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MTkyMWZiNTQ0NDJkMThwLTUxJyksIHBpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDMyNDNmNmE4ODg1YTMwcC01MicpLCBwaSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHg2NDg3ZWQ1MTEwYjQ2MHAtNTMnKSwgcGkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4YzkwZmRhYTIyMTY4YzBwLTU0JyksIHBpKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDE5MjFmYjU0NDQyZDE4MHAtNTUnKSwgcGkpCisKKworICAgICAgICAjIHJlc3VsdHMgdGhhdCBzaG91bGQgb3ZlcmZsb3cuLi4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZnJvbUhleCwgJy0weDFwMTAyNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZyb21IZXgsICcweDFwKzEwMjUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmcm9tSGV4LCAnKzBYMXAxMDMwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZnJvbUhleCwgJy0weDFwKzExMDAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmcm9tSGV4LCAnMFgxcDEyMzQ1Njc4OTEyMzQ1Njc4OScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZyb21IZXgsICcrMFguOHArMTAyNScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZyb21IZXgsICcrMHgwLjhwMTAyNScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZyb21IZXgsICctMHgwLjRwMTAyNicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZyb21IZXgsICcwWDJwKzEwMjMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmcm9tSGV4LCAnMHgyLnAxMDIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZnJvbUhleCwgJy0weDIuMHArMTAyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZyb21IZXgsICcrMFg0cCsxMDIyJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZnJvbUhleCwgJzB4MS5mZmZmZmZmZmZmZmZmZnArMTAyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZyb21IZXgsICctMFgxLmZmZmZmZmZmZmZmZmY5cDEwMjMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmcm9tSGV4LCAnMFgxLmZmZmZmZmZmZmZmZmY4cDEwMjMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmcm9tSGV4LCAnKzB4My5mZmZmZmZmZmZmZmZmcDEwMjInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmcm9tSGV4LCAnMHgzZmZmZmZmZmZmZmZmZnArOTcwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZnJvbUhleCwgJzB4MTAwMDAwMDAwMDAwMDAwMDBwOTYwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZnJvbUhleCwgJy0wWGZmZmZmZmZmZmZmZmZmZmZwOTYwJykKKworICAgICAgICAjIC4uLmFuZCB0aG9zZSB0aGF0IHJvdW5kIHRvICstbWF4IGZsb2F0CisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJysweDEuZmZmZmZmZmZmZmZmZnArMTAyMycpLCBNQVgpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0wWDEuZmZmZmZmZmZmZmZmZjdwMTAyMycpLCAtTUFYKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDEuZmZmZmZmZmZmZmZmZjdmZmZmZmZmZmZmZmZmcDEwMjMnKSwgTUFYKQorCisgICAgICAgICMgemVyb3MKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwcDAnKSwgMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDBwMTAwMCcpLCAwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0weDBwMTAyMycpLCAtMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDBwMTAyNCcpLCAwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0weDBwMTAyNScpLCAtMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDBwMjAwMCcpLCAwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MHAxMjM0NTY3ODkxMjM0NTY3ODknKSwgMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMFgwcC0wJyksIC0wLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0wWDBwLTEwMDAnKSwgLTAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwcC0xMDIzJyksIDAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTBYMHAtMTAyNCcpLCAtMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMHgwcC0xMDI1JyksIC0wLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0weDBwLTEwNzInKSwgLTAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgwcC0xMDczJyksIDAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTB4MHAtMTA3NCcpLCAtMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDBwLTEwNzUnKSwgMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDBwLTEwNzYnKSwgMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMFgwcC0yMDAwJyksIC0wLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0weDBwLTEyMzQ1Njc4OTEyMzQ1Njc4OScpLCAtMC4wKQorCisgICAgICAgICMgdmFsdWVzIHRoYXQgc2hvdWxkIHVuZGVyZmxvdyB0byAwCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMXAtMTA3NScpLCAwLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0wWDFwLTEwNzUnKSwgLTAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTB4MXAtMTIzNDU2Nzg5MTIzNDU2Nzg5JyksIC0wLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAwMDAwMXAtMTA3NScpLCBUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMHgxLjFwLTEwNzUnKSwgLVRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS5mZmZmZmZmZmZmZmZmZmZmZnAtMTA3NScpLCBUSU5ZKQorCisgICAgICAgICMgY2hlY2sgcm91bmQtaGFsZi1ldmVuIGlzIHdvcmtpbmcgY29ycmVjdGx5IG5lYXIgMCAuLi4KKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxcC0xMDc2JyksIDAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgycC0xMDc2JyksIDAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgzcC0xMDc2JyksIFRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4NHAtMTA3NicpLCBUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDVwLTEwNzYnKSwgVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFg2cC0xMDc2JyksIDIqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHg3cC0xMDc2JyksIDIqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFg4cC0xMDc2JyksIDIqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFg5cC0xMDc2JyksIDIqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHhhcC0xMDc2JyksIDIqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFhicC0xMDc2JyksIDMqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHhjcC0xMDc2JyksIDMqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFhkcC0xMDc2JyksIDMqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFhlcC0xMDc2JyksIDQqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHhmcC0xMDc2JyksIDQqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxMHAtMTA3NicpLCA0KlRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0weDFwLTEwNzYnKSwgLTAuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTBYMnAtMTA3NicpLCAtMC4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMHgzcC0xMDc2JyksIC1USU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMFg0cC0xMDc2JyksIC1USU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMHg1cC0xMDc2JyksIC1USU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMHg2cC0xMDc2JyksIC0yKlRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0wWDdwLTEwNzYnKSwgLTIqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTBYOHAtMTA3NicpLCAtMipUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMFg5cC0xMDc2JyksIC0yKlRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0wWGFwLTEwNzYnKSwgLTIqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTB4YnAtMTA3NicpLCAtMypUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMHhjcC0xMDc2JyksIC0zKlRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0wWGRwLTEwNzYnKSwgLTMqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnLTB4ZXAtMTA3NicpLCAtNCpUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCctMFhmcC0xMDc2JyksIC00KlRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJy0wWDEwcC0xMDc2JyksIC00KlRJTlkpCisKKyAgICAgICAgIyAuLi4gYW5kIG5lYXIgTUlOIC4uLgorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZDZwLTEwMjInKSwgTUlOLTMqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmQ4cC0xMDIyJyksIE1JTi0yKlRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZkYXAtMTAyMicpLCBNSU4tMipUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZGNwLTEwMjInKSwgTUlOLTIqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmRlcC0xMDIyJyksIE1JTi0yKlRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZlMHAtMTAyMicpLCBNSU4tMipUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZTJwLTEwMjInKSwgTUlOLTIqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmU0cC0xMDIyJyksIE1JTi0yKlRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZlNnAtMTAyMicpLCBNSU4tMipUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZThwLTEwMjInKSwgTUlOLTIqVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmVhcC0xMDIyJyksIE1JTi1USU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZWNwLTEwMjInKSwgTUlOLVRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZlZXAtMTAyMicpLCBNSU4tVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmYwcC0xMDIyJyksIE1JTi1USU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZjJwLTEwMjInKSwgTUlOLVRJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZmNHAtMTAyMicpLCBNSU4tVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmY2cC0xMDIyJyksIE1JTi1USU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZjhwLTEwMjInKSwgTUlOKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZmFwLTEwMjInKSwgTUlOKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZmNwLTEwMjInKSwgTUlOKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZmVwLTEwMjInKSwgTUlOKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMDBwLTEwMjInKSwgTUlOKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMDJwLTEwMjInKSwgTUlOKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMDRwLTEwMjInKSwgTUlOKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMDZwLTEwMjInKSwgTUlOKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMDhwLTEwMjInKSwgTUlOKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMGFwLTEwMjInKSwgTUlOK1RJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAwY3AtMTAyMicpLCBNSU4rVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDBlcC0xMDIyJyksIE1JTitUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMTBwLTEwMjInKSwgTUlOK1RJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAxMnAtMTAyMicpLCBNSU4rVElOWSkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDE0cC0xMDIyJyksIE1JTitUSU5ZKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMTZwLTEwMjInKSwgTUlOK1RJTlkpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAxOHAtMTAyMicpLCBNSU4rMipUSU5ZKQorCisgICAgICAgICMgLi4uIGFuZCBuZWFyIDEuMC4KKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmYwcDAnKSwgMS4wLUVQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmYxcDAnKSwgMS4wLUVQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgwLmZmZmZmZmZmZmZmZmYycDAnKSwgMS4wLUVQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmYzcDAnKSwgMS4wLUVQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgwLmZmZmZmZmZmZmZmZmY0cDAnKSwgMS4wLUVQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgwLmZmZmZmZmZmZmZmZmY1cDAnKSwgMS4wLUVQUy8yKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDAuZmZmZmZmZmZmZmZmZjZwMCcpLCAxLjAtRVBTLzIpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZmN3AwJyksIDEuMC1FUFMvMikKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmY4cDAnKSwgMS4wLUVQUy8yKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDAuZmZmZmZmZmZmZmZmZjlwMCcpLCAxLjAtRVBTLzIpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMC5mZmZmZmZmZmZmZmZmYXAwJyksIDEuMC1FUFMvMikKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgwLmZmZmZmZmZmZmZmZmZicDAnKSwgMS4wLUVQUy8yKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDAuZmZmZmZmZmZmZmZmZmNwMCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MC5mZmZmZmZmZmZmZmZmZHAwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgwLmZmZmZmZmZmZmZmZmZlcDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDAuZmZmZmZmZmZmZmZmZmZwMCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMS4wMDAwMDAwMDAwMDAwMHAwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxLjAwMDAwMDAwMDAwMDAxcDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMDJwMCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMS4wMDAwMDAwMDAwMDAwM3AwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDA0cDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDEuMDAwMDAwMDAwMDAwMDVwMCcpLCAxLjApCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMS4wMDAwMDAwMDAwMDAwNnAwJyksIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxLjAwMDAwMDAwMDAwMDA3cDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMDdmZmZmZmZmZmZmZmZmZmZmZmZmZnAwJyksCisgICAgICAgICAgICAgICAgICAgICAgIDEuMCkKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDA4cDAnKSwgMS4wKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDFwMCcpLAorICAgICAgICAgICAgICAgICAgICAgICAxK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxLjAwMDAwMDAwMDAwMDA5cDAnKSwgMS4wK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDBhcDAnKSwgMS4wK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDBicDAnKSwgMS4wK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxLjAwMDAwMDAwMDAwMDBjcDAnKSwgMS4wK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDBkcDAnKSwgMS4wK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDBlcDAnKSwgMS4wK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxLjAwMDAwMDAwMDAwMDBmcDAnKSwgMS4wK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDEwcDAnKSwgMS4wK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxLjAwMDAwMDAwMDAwMDExcDAnKSwgMS4wK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDEycDAnKSwgMS4wK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxLjAwMDAwMDAwMDAwMDEzcDAnKSwgMS4wK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxLjAwMDAwMDAwMDAwMDE0cDAnKSwgMS4wK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDE1cDAnKSwgMS4wK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDE2cDAnKSwgMS4wK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxLjAwMDAwMDAwMDAwMDE3cDAnKSwgMS4wK0VQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDE3ZmZmZmZmZmZmZmZmZmZmZmZmZmZwMCcpLAorICAgICAgICAgICAgICAgICAgICAgICAxLjArRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMThwMCcpLCAxLjArMipFUFMpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMS4wMDAwMDAwMDAwMDAxODAwMDAwMDAwMDAwMDAwMDAwMXAwJyksCisgICAgICAgICAgICAgICAgICAgICAgIDEuMCsyKkVQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDE5cDAnKSwgMS4wKzIqRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcwWDEuMDAwMDAwMDAwMDAwMWFwMCcpLCAxLjArMipFUFMpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzBYMS4wMDAwMDAwMDAwMDAxYnAwJyksIDEuMCsyKkVQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMHgxLjAwMDAwMDAwMDAwMDFjcDAnKSwgMS4wKzIqRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMWRwMCcpLCAxLjArMipFUFMpCisgICAgICAgIHNlbGYuaWRlbnRpY2FsKGZyb21IZXgoJzB4MS4wMDAwMDAwMDAwMDAxZXAwJyksIDEuMCsyKkVQUykKKyAgICAgICAgc2VsZi5pZGVudGljYWwoZnJvbUhleCgnMFgxLjAwMDAwMDAwMDAwMDFmcDAnKSwgMS4wKzIqRVBTKQorICAgICAgICBzZWxmLmlkZW50aWNhbChmcm9tSGV4KCcweDEuMDAwMDAwMDAwMDAwMjBwMCcpLCAxLjArMipFUFMpCisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXAoc2VsZik6CisgICAgICAgIGRlZiByb3VuZHRyaXAoeCk6CisgICAgICAgICAgICByZXR1cm4gZnJvbUhleCh0b0hleCh4KSkKKworICAgICAgICBmb3IgeCBpbiBbTkFOLCBJTkYsIHNlbGYuTUFYLCBzZWxmLk1JTiwgc2VsZi5NSU4tc2VsZi5USU5ZLCBzZWxmLlRJTlksIDAuMF06CisgICAgICAgICAgICBzZWxmLmlkZW50aWNhbCh4LCByb3VuZHRyaXAoeCkpCisgICAgICAgICAgICBzZWxmLmlkZW50aWNhbCgteCwgcm91bmR0cmlwKC14KSkKKworICAgICAgICAjIGZyb21IZXgodG9IZXgoeCkpIHNob3VsZCBleGFjdGx5IHJlY292ZXIgeCwgZm9yIGFueSBub24tTmFOIGZsb2F0IHguCisgICAgICAgIGltcG9ydCByYW5kb20KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMDAwKToKKyAgICAgICAgICAgIGUgPSByYW5kb20ucmFuZHJhbmdlKC0xMjAwLCAxMjAwKQorICAgICAgICAgICAgbSA9IHJhbmRvbS5yYW5kb20oKQorICAgICAgICAgICAgcyA9IHJhbmRvbS5jaG9pY2UoWzEuMCwgLTEuMF0pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeCA9IHMqbGRleHAobSwgZSkKKyAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5pZGVudGljYWwoeCwgZnJvbUhleCh0b0hleCh4KSkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIEdlbmVyYWxGbG9hdENhc2VzLAorICAgICAgICBGb3JtYXRGdW5jdGlvbnNUZXN0Q2FzZSwKKyAgICAgICAgVW5rbm93bkZvcm1hdFRlc3RDYXNlLAorICAgICAgICBJRUVFRm9ybWF0VGVzdENhc2UsCisgICAgICAgIFJlcHJUZXN0Q2FzZSwKKyAgICAgICAgUm91bmRUZXN0Q2FzZSwKKyAgICAgICAgSW5mTmFuVGVzdCwKKyAgICAgICAgSGV4RmxvYXRUZXN0Q2FzZSwKKyAgICAgICAgKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9mbm1hdGNoLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZm5tYXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2VjNTBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZm5tYXRjaC5weQpAQCAtMCwwICsxLDcyIEBACisiIiJUZXN0IGNhc2VzIGZvciB0aGUgZm5tYXRjaCBtb2R1bGUuIiIiCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNoLCBmbm1hdGNoY2FzZSwgX01BWENBQ0hFLCBfY2FjaGUKK2Zyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRjaCwgZm5tYXRjaGNhc2UsIF9NQVhDQUNIRSwgX2NhY2hlLCBfcHVyZ2UKKworCitjbGFzcyBGbm1hdGNoVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBfcHVyZ2UoKQorCisgICAgZGVmIGNoZWNrX21hdGNoKHNlbGYsIGZpbGVuYW1lLCBwYXR0ZXJuLCBzaG91bGRfbWF0Y2g9MSwgZm49Zm5tYXRjaCk6CisgICAgICAgIGlmIHNob3VsZF9tYXRjaDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbihmaWxlbmFtZSwgcGF0dGVybiksCisgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICVyIHRvIG1hdGNoIHBhdHRlcm4gJXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZmlsZW5hbWUsIHBhdHRlcm4pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmbihmaWxlbmFtZSwgcGF0dGVybiksCisgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICVyIG5vdCB0byBtYXRjaCBwYXR0ZXJuICVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpbGVuYW1lLCBwYXR0ZXJuKSkKKworICAgIGRlZiB0ZXN0X2ZubWF0Y2goc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19tYXRjaAorICAgICAgICBjaGVjaygnYWJjJywgJ2FiYycpCisgICAgICAgIGNoZWNrKCdhYmMnLCAnPyo/JykKKyAgICAgICAgY2hlY2soJ2FiYycsICc/Pz8qJykKKyAgICAgICAgY2hlY2soJ2FiYycsICcqPz8/JykKKyAgICAgICAgY2hlY2soJ2FiYycsICc/Pz8nKQorICAgICAgICBjaGVjaygnYWJjJywgJyonKQorICAgICAgICBjaGVjaygnYWJjJywgJ2FiW2NkXScpCisgICAgICAgIGNoZWNrKCdhYmMnLCAnYWJbIWRlXScpCisgICAgICAgIGNoZWNrKCdhYmMnLCAnYWJbZGVdJywgMCkKKyAgICAgICAgY2hlY2soJ2EnLCAnPz8nLCAwKQorICAgICAgICBjaGVjaygnYScsICdiJywgMCkKKworICAgICAgICAjIHRoZXNlIHRlc3QgdGhhdCAnXCcgaXMgaGFuZGxlZCBjb3JyZWN0bHkgaW4gY2hhcmFjdGVyIHNldHM7CisgICAgICAgICMgc2VlIFNGIGJ1ZyAjNDA5NjUxCisgICAgICAgIGNoZWNrKCdcXCcsIHInW1xdJykKKyAgICAgICAgY2hlY2soJ2EnLCByJ1shXF0nKQorICAgICAgICBjaGVjaygnXFwnLCByJ1shXF0nLCAwKQorCisgICAgICAgICMgdGVzdCB0aGF0IGZpbGVuYW1lcyB3aXRoIG5ld2xpbmVzIGluIHRoZW0gYXJlIGhhbmRsZWQgY29ycmVjdGx5LgorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2NjY1CisgICAgICAgIGNoZWNrKCdmb29cbmJhcicsICdmb28qJykKKyAgICAgICAgY2hlY2soJ2Zvb1xuYmFyXG4nLCAnZm9vKicpCisgICAgICAgIGNoZWNrKCdcbmZvbycsICdmb28qJywgRmFsc2UpCisgICAgICAgIGNoZWNrKCdcbicsICcqJykKKworICAgIGRlZiB0ZXN0X2ZubWF0Y2hjYXNlKHNlbGYpOgorICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfbWF0Y2gKKyAgICAgICAgY2hlY2soJ0FiQycsICdhYmMnLCAwLCBmbm1hdGNoY2FzZSkKKyAgICAgICAgY2hlY2soJ2FiYycsICdBYkMnLCAwLCBmbm1hdGNoY2FzZSkKKworICAgIGRlZiB0ZXN0X2NhY2hlX2NsZWFyaW5nKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgY2FjaGVzIGRvIG5vdCBncm93IHRvbyBsYXJnZQorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU3ODQ2CisKKyAgICAgICAgIyBzdHJpbmcgcGF0dGVybiBjYWNoZQorICAgICAgICBmb3IgaSBpbiByYW5nZShfTUFYQ0FDSEUgKyAxKToKKyAgICAgICAgICAgIGZubWF0Y2goJ2ZvbycsICc/JyAqIGkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobGVuKF9jYWNoZSksIF9NQVhDQUNIRSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoRm5tYXRjaFRlc3RDYXNlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ZvcmsxLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZm9yazEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkzMDY2NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ZvcmsxLnB5CkBAIC0wLDAgKzEsNzEgQEAKKyIiIlRoaXMgdGVzdCBjaGVja3MgZm9yIGNvcnJlY3QgZm9yaygpIGJlaGF2aW9yLgorIiIiCisKK2ltcG9ydCBpbXAKK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworZnJvbSB0ZXN0LmZvcmtfd2FpdCBpbXBvcnQgRm9ya1dhaXQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbiwgZ2V0X2F0dHJpYnV0ZSwgaW1wb3J0X21vZHVsZQordGhyZWFkaW5nID0gaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKKworI1NraXAgdGVzdCBpZiBmb3JrIGRvZXMgbm90IGV4aXN0LgorZ2V0X2F0dHJpYnV0ZShvcywgJ2ZvcmsnKQorCisKK2NsYXNzIEZvcmtUZXN0KEZvcmtXYWl0KToKKyAgICBkZWYgd2FpdF9pbXBsKHNlbGYsIGNwaWQpOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAjIHdhaXRwaWQoKSBzaG91bGRuJ3QgaGFuZywgYnV0IHNvbWUgb2YgdGhlIGJ1aWxkYm90cyBzZWVtIHRvIGhhbmcKKyAgICAgICAgICAgICMgaW4gdGhlIGZvcmtpbmcgdGVzdHMuICBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gZml4IHRoZSBwcm9ibGVtLgorICAgICAgICAgICAgc3BpZCwgc3RhdHVzID0gb3Mud2FpdHBpZChjcGlkLCBvcy5XTk9IQU5HKQorICAgICAgICAgICAgaWYgc3BpZCA9PSBjcGlkOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEuMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwaWQsIGNwaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAiY2F1c2UgPSAlZCwgZXhpdCA9ICVkIiAlIChzdGF0dXMmMHhmZiwgc3RhdHVzPj44KSkKKworICAgIGRlZiB0ZXN0X2ltcG9ydF9sb2NrX2Zvcmsoc2VsZik6CisgICAgICAgIGltcG9ydF9zdGFydGVkID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgZmFrZV9tb2R1bGVfbmFtZSA9ICJmYWtlIHRlc3QgbW9kdWxlIgorICAgICAgICBwYXJ0aWFsX21vZHVsZSA9ICJwYXJ0aWFsIgorICAgICAgICBjb21wbGV0ZV9tb2R1bGUgPSAiY29tcGxldGUiCisgICAgICAgIGRlZiBpbXBvcnRlcigpOgorICAgICAgICAgICAgaW1wLmFjcXVpcmVfbG9jaygpCisgICAgICAgICAgICBzeXMubW9kdWxlc1tmYWtlX21vZHVsZV9uYW1lXSA9IHBhcnRpYWxfbW9kdWxlCisgICAgICAgICAgICBpbXBvcnRfc3RhcnRlZC5zZXQoKQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKSAjIEdpdmUgdGhlIG90aGVyIHRocmVhZCB0aW1lIHRvIHRyeSBhbmQgYWNxdWlyZS4KKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW2Zha2VfbW9kdWxlX25hbWVdID0gY29tcGxldGVfbW9kdWxlCisgICAgICAgICAgICBpbXAucmVsZWFzZV9sb2NrKCkKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWltcG9ydGVyKQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgaW1wb3J0X3N0YXJ0ZWQud2FpdCgpCisgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3QgcGlkOgorICAgICAgICAgICAgICAgIG0gPSBfX2ltcG9ydF9fKGZha2VfbW9kdWxlX25hbWUpCisgICAgICAgICAgICAgICAgaWYgbSA9PSBjb21wbGV0ZV9tb2R1bGU6CisgICAgICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb3MuX2V4aXQoMSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgICAgICAgICAjIEV4aXRjb2RlIDEgbWVhbnMgdGhlIGNoaWxkIGdvdCBhIHBhcnRpYWwgbW9kdWxlIChiYWQuKSBObworICAgICAgICAgICAgICAgICMgZXhpdGNvZGUgKGJ1dCBhIGhhbmcsIHdoaWNoIG1hbmlmZXN0cyBhcyAnZ290IHBpZCAwJykKKyAgICAgICAgICAgICAgICAjIG1lYW5zIHRoZSBjaGlsZCBkZWFkbG9ja2VkIChhbHNvIGJhZC4pCisgICAgICAgICAgICAgICAgc2VsZi53YWl0X2ltcGwocGlkKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lMTCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChGb3JrVGVzdCkKKyAgICByZWFwX2NoaWxkcmVuKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZm9ybWF0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZm9ybWF0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMzBlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9mb3JtYXQucHkKQEAgLTAsMCArMSwzMDcgQEAKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGhhdmVfdW5pY29kZSwgVGVzdEZhaWxlZAoraW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0IGFzIHRlc3Rfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CisKK21heHNpemUgPSB0ZXN0X3N1cHBvcnQuTUFYX1B5X3NzaXplX3QKKworIyB0ZXN0IHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdG9yIChJIGFtIG5vdCBzdXJlIGlmIHRoaXMgaXMgYmVpbmcgdGVzdGVkCisjIGVsc2V3aGVyZSBidXQsIHN1cmVseSwgc29tZSBvZiB0aGUgZ2l2ZW4gY2FzZXMgYXJlICpub3QqIHRlc3RlZCBiZWNhdXNlCisjIHRoZXkgY3Jhc2ggcHl0aG9uKQorIyB0ZXN0IG9uIHVuaWNvZGUgc3RyaW5ncyBhcyB3ZWxsCisKK2RlZiB0ZXN0Zm9ybWF0KGZvcm1hdHN0ciwgYXJncywgb3V0cHV0PU5vbmUsIGxpbWl0PU5vbmUsIG92ZXJmbG93b2s9RmFsc2UpOgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgIHByaW50ICIlcyAlJSAlcyA9PyAlcyAuLi4iICVcCisgICAgICAgICAgICAgICAgKHJlcHIoZm9ybWF0c3RyKSwgcmVwcihhcmdzKSwgcmVwcihvdXRwdXQpKSwKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICIlcyAlJSAlcyB3b3Jrcz8gLi4uIiAlIChyZXByKGZvcm1hdHN0ciksIHJlcHIoYXJncykpLAorICAgIHRyeToKKyAgICAgICAgcmVzdWx0ID0gZm9ybWF0c3RyICUgYXJncworICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICBpZiBub3Qgb3ZlcmZsb3dvazoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnb3ZlcmZsb3cgKHRoaXMgaXMgZmluZSknCisgICAgZWxzZToKKyAgICAgICAgaWYgb3V0cHV0IGFuZCBsaW1pdCBpcyBOb25lIGFuZCByZXN1bHQgIT0gb3V0cHV0OgorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAnbm8nCisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiJXIgJSUgJXIgPT0gJXIgIT0gJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdHN0ciwgYXJncywgcmVzdWx0LCBvdXRwdXQpKQorICAgICAgICAjIHdoZW4gJ2xpbWl0JyBpcyBzcGVjaWZpZWQsIGl0IGRldGVybWluZXMgaG93IG1hbnkgY2hhcmFjdGVycworICAgICAgICAjIG11c3QgbWF0Y2ggZXhhY3RseTsgbGVuZ3RocyBtdXN0IGFsd2F5cyBtYXRjaC4KKyAgICAgICAgIyBleDogbGltaXQ9NSwgJzEyMzQ1Njc4JyBtYXRjaGVzICcxMjM0NV9fXycKKyAgICAgICAgIyAobWFpbmx5IGZvciBmbG9hdGluZyBwb2ludCBmb3JtYXQgdGVzdHMgZm9yIHdoaWNoIGFuIGV4YWN0IG1hdGNoCisgICAgICAgICMgY2FuJ3QgYmUgZ3VhcmFudGVlZCBkdWUgdG8gcm91bmRpbmcgYW5kIHJlcHJlc2VudGF0aW9uIGVycm9ycykKKyAgICAgICAgZWxpZiBvdXRwdXQgYW5kIGxpbWl0IGlzIG5vdCBOb25lIGFuZCAoCisgICAgICAgICAgICAgICAgbGVuKHJlc3VsdCkhPWxlbihvdXRwdXQpIG9yIHJlc3VsdFs6bGltaXRdIT1vdXRwdXRbOmxpbWl0XSk6CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICdubycKKyAgICAgICAgICAgIHByaW50ICIlcyAlJSAlcyA9PSAlcyAhPSAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAocmVwcihmb3JtYXRzdHIpLCByZXByKGFyZ3MpLCByZXByKHJlc3VsdCksIHJlcHIob3V0cHV0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ3llcycKKworCitkZWYgdGVzdGJvdGgoZm9ybWF0c3RyLCAqYXJncywgKiprd2FyZ3MpOgorICAgIHRlc3Rmb3JtYXQoZm9ybWF0c3RyLCAqYXJncywgKiprd2FyZ3MpCisgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICB0ZXN0Zm9ybWF0KHVuaWNvZGUoZm9ybWF0c3RyKSwgKmFyZ3MsICoqa3dhcmdzKQorCisKK2NsYXNzIEZvcm1hdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgdGVzdGJvdGgoIiUuMWQiLCAoMSwpLCAiMSIpCisgICAgICAgIHRlc3Rib3RoKCIlLipkIiwgKHN5cy5tYXhpbnQsMSksIG92ZXJmbG93b2s9VHJ1ZSkgICMgZXhwZWN0IG92ZXJmbG93CisgICAgICAgIHRlc3Rib3RoKCIlLjEwMGQiLCAoMSwpLCAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCisgICAgICAgICAgICAgICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCisgICAgICAgICAgICAgICAgICcwMDAwMDAwMScsIG92ZXJmbG93b2s9VHJ1ZSkKKyAgICAgICAgdGVzdGJvdGgoIiUjLjExN3giLCAoMSwpLCAnMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKKyAgICAgICAgICAgICAgICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKKyAgICAgICAgICAgICAgICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnLAorICAgICAgICAgICAgICAgICBvdmVyZmxvd29rPVRydWUpCisgICAgICAgIHRlc3Rib3RoKCIlIy4xMTh4IiwgKDEsKSwgJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCisgICAgICAgICAgICAgICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCisgICAgICAgICAgICAgICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScsCisgICAgICAgICAgICAgICAgIG92ZXJmbG93b2s9VHJ1ZSkKKworICAgICAgICB0ZXN0Ym90aCgiJWYiLCAoMS4wLCksICIxLjAwMDAwMCIpCisgICAgICAgICMgdGhlc2UgYXJlIHRyeWluZyB0byB0ZXN0IHRoZSBsaW1pdHMgb2YgdGhlIGludGVybmFsIG1hZ2ljLW51bWJlci1sZW5ndGgKKyAgICAgICAgIyBmb3JtYXR0aW5nIGJ1ZmZlciwgaWYgdGhhdCBudW1iZXIgY2hhbmdlcyB0aGVuIHRoZXNlIHRlc3RzIGFyZSBsZXNzCisgICAgICAgICMgZWZmZWN0aXZlCisgICAgICAgIHRlc3Rib3RoKCIlIy4qZyIsICgxMDksIC0xLmUrNDkvMy4pKQorICAgICAgICB0ZXN0Ym90aCgiJSMuKmciLCAoMTEwLCAtMS5lKzQ5LzMuKSkKKyAgICAgICAgdGVzdGJvdGgoIiUjLipnIiwgKDExMCwgLTEuZSsxMDAvMy4pKQorCisgICAgICAgICMgdGVzdCBzb21lIHJpZGljdWxvdXNseSBsYXJnZSBwcmVjaXNpb24sIGV4cGVjdCBvdmVyZmxvdworICAgICAgICB0ZXN0Ym90aCgnJTEyLipmJywgKDEyMzQ1NiwgMS4wKSkKKworICAgICAgICAjIGNoZWNrIGZvciBpbnRlcm5hbCBvdmVyZmxvdyB2YWxpZGF0aW9uIG9uIGxlbmd0aCBvZiBwcmVjaXNpb24KKyAgICAgICAgIyB0aGVzZSB0ZXN0cyBzaG91bGQgbm8gbG9uZ2VyIGNhdXNlIG92ZXJmbG93IGluIFB5dGhvbgorICAgICAgICAjIDIuNy8zLjEgYW5kIGxhdGVyLgorICAgICAgICB0ZXN0Ym90aCgiJSMuKmciLCAoMTEwLCAtMS5lKzEwMC8zLikpCisgICAgICAgIHRlc3Rib3RoKCIlIy4qRyIsICgxMTAsIC0xLmUrMTAwLzMuKSkKKyAgICAgICAgdGVzdGJvdGgoIiUjLipmIiwgKDExMCwgLTEuZSsxMDAvMy4pKQorICAgICAgICB0ZXN0Ym90aCgiJSMuKkYiLCAoMTEwLCAtMS5lKzEwMC8zLikpCisKKyAgICAgICAgIyBGb3JtYXR0aW5nIG9mIGxvbmcgaW50ZWdlcnMuIE92ZXJmbG93IGlzIG5vdCBvaworICAgICAgICB0ZXN0Ym90aCgiJXgiLCAxMEwsICJhIikKKyAgICAgICAgdGVzdGJvdGgoIiV4IiwgMTAwMDAwMDAwMDAwTCwgIjE3NDg3NmU4MDAiKQorICAgICAgICB0ZXN0Ym90aCgiJW8iLCAxMEwsICIxMiIpCisgICAgICAgIHRlc3Rib3RoKCIlbyIsIDEwMDAwMDAwMDAwMEwsICIxMzUxMDM1NTY0MDAwIikKKyAgICAgICAgdGVzdGJvdGgoIiVkIiwgMTBMLCAiMTAiKQorICAgICAgICB0ZXN0Ym90aCgiJWQiLCAxMDAwMDAwMDAwMDBMLCAiMTAwMDAwMDAwMDAwIikKKworICAgICAgICBiaWcgPSAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTBMCisgICAgICAgIHRlc3Rib3RoKCIlZCIsIGJpZywgIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpCisgICAgICAgIHRlc3Rib3RoKCIlZCIsIC1iaWcsICItMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGJvdGgoIiU1ZCIsIC1iaWcsICItMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGJvdGgoIiUzMWQiLCAtYmlnLCAiLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpCisgICAgICAgIHRlc3Rib3RoKCIlMzJkIiwgLWJpZywgIiAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGJvdGgoIiUtMzJkIiwgLWJpZywgIi0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAgIikKKyAgICAgICAgdGVzdGJvdGgoIiUwMzJkIiwgLWJpZywgIi0wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGJvdGgoIiUtMDMyZCIsIC1iaWcsICItMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwICIpCisgICAgICAgIHRlc3Rib3RoKCIlMDM0ZCIsIC1iaWcsICItMDAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGJvdGgoIiUwMzRkIiwgYmlnLCAiMDAwMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpCisgICAgICAgIHRlc3Rib3RoKCIlMCszNGQiLCBiaWcsICIrMDAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGJvdGgoIiUrMzRkIiwgYmlnLCAiICAgKzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpCisgICAgICAgIHRlc3Rib3RoKCIlMzRkIiwgYmlnLCAiICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpCisgICAgICAgIHRlc3Rib3RoKCIlLjJkIiwgYmlnLCAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGJvdGgoIiUuMzBkIiwgYmlnLCAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIikKKyAgICAgICAgdGVzdGJvdGgoIiUuMzFkIiwgYmlnLCAiMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIpCisgICAgICAgIHRlc3Rib3RoKCIlMzIuMzFkIiwgYmlnLCAiIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKQorICAgICAgICB0ZXN0Ym90aCgiJWQiLCBmbG9hdChiaWcpLCAiMTIzNDU2X19fX19fX19fX19fX19fX19fX19fX19fIiwgNikKKworICAgICAgICBiaWcgPSAweDEyMzQ1Njc4OTBhYmNkZWYxMjM0NUwgICMgMjEgaGV4IGRpZ2l0cworICAgICAgICB0ZXN0Ym90aCgiJXgiLCBiaWcsICIxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQorICAgICAgICB0ZXN0Ym90aCgiJXgiLCAtYmlnLCAiLTEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlNXgiLCAtYmlnLCAiLTEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlMjJ4IiwgLWJpZywgIi0xMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQorICAgICAgICB0ZXN0Ym90aCgiJTIzeCIsIC1iaWcsICIgLTEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlLTIzeCIsIC1iaWcsICItMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1ICIpCisgICAgICAgIHRlc3Rib3RoKCIlMDIzeCIsIC1iaWcsICItMDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlLTAyM3giLCAtYmlnLCAiLTEyMzQ1Njc4OTBhYmNkZWYxMjM0NSAiKQorICAgICAgICB0ZXN0Ym90aCgiJTAyNXgiLCAtYmlnLCAiLTAwMDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlMDI1eCIsIGJpZywgIjAwMDAxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQorICAgICAgICB0ZXN0Ym90aCgiJTArMjV4IiwgYmlnLCAiKzAwMDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlKzI1eCIsIGJpZywgIiAgICsxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQorICAgICAgICB0ZXN0Ym90aCgiJTI1eCIsIGJpZywgIiAgICAxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQorICAgICAgICB0ZXN0Ym90aCgiJS4yeCIsIGJpZywgIjEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlLjIxeCIsIGJpZywgIjEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlLjIyeCIsIGJpZywgIjAxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQorICAgICAgICB0ZXN0Ym90aCgiJTIzLjIyeCIsIGJpZywgIiAwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGJvdGgoIiUtMjMuMjJ4IiwgYmlnLCAiMDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSAiKQorICAgICAgICB0ZXN0Ym90aCgiJVgiLCBiaWcsICIxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQorICAgICAgICB0ZXN0Ym90aCgiJSNYIiwgYmlnLCAiMFgxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQorICAgICAgICB0ZXN0Ym90aCgiJSN4IiwgYmlnLCAiMHgxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQorICAgICAgICB0ZXN0Ym90aCgiJSN4IiwgLWJpZywgIi0weDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlIy4yM3giLCAtYmlnLCAiLTB4MDAxMjM0NTY3ODkwYWJjZGVmMTIzNDUiKQorICAgICAgICB0ZXN0Ym90aCgiJSMrLjIzeCIsIGJpZywgIisweDAwMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1IikKKyAgICAgICAgdGVzdGJvdGgoIiUjIC4yM3giLCBiaWcsICIgMHgwMDEyMzQ1Njc4OTBhYmNkZWYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlIysuMjNYIiwgYmlnLCAiKzBYMDAxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQorICAgICAgICB0ZXN0Ym90aCgiJSMtKy4yM1giLCBiaWcsICIrMFgwMDEyMzQ1Njc4OTBBQkNERUYxMjM0NSIpCisgICAgICAgIHRlc3Rib3RoKCIlIy0rMjYuMjNYIiwgYmlnLCAiKzBYMDAxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQorICAgICAgICB0ZXN0Ym90aCgiJSMtKzI3LjIzWCIsIGJpZywgIiswWDAwMTIzNDU2Nzg5MEFCQ0RFRjEyMzQ1ICIpCisgICAgICAgIHRlc3Rib3RoKCIlIysyNy4yM1giLCBiaWcsICIgKzBYMDAxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQorICAgICAgICAjIG5leHQgb25lIGdldHMgdHdvIGxlYWRpbmcgemVyb2VzIGZyb20gcHJlY2lzaW9uLCBhbmQgYW5vdGhlciBmcm9tIHRoZQorICAgICAgICAjIDAgZmxhZyBhbmQgdGhlIHdpZHRoCisgICAgICAgIHRlc3Rib3RoKCIlIyswMjcuMjNYIiwgYmlnLCAiKzBYMDAwMTIzNDU2Nzg5MEFCQ0RFRjEyMzQ1IikKKyAgICAgICAgIyBzYW1lLCBleGNlcHQgbm8gMCBmbGFnCisgICAgICAgIHRlc3Rib3RoKCIlIysyNy4yM1giLCBiaWcsICIgKzBYMDAxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQorICAgICAgICB0ZXN0Ym90aCgiJXgiLCBmbG9hdChiaWcpLCAiMTIzNDU2X19fX19fX19fX19fX19fIiwgNikKKworICAgICAgICBiaWcgPSAwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzBMICAjIDMyIG9jdGFsIGRpZ2l0cworICAgICAgICB0ZXN0Ym90aCgiJW8iLCBiaWcsICIxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlbyIsIC1iaWcsICItMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Ym90aCgiJTVvIiwgLWJpZywgIi0xMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlMzNvIiwgLWJpZywgIi0xMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlMzRvIiwgLWJpZywgIiAtMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Ym90aCgiJS0zNG8iLCAtYmlnLCAiLTEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwICIpCisgICAgICAgIHRlc3Rib3RoKCIlMDM0byIsIC1iaWcsICItMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGJvdGgoIiUtMDM0byIsIC1iaWcsICItMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAgIikKKyAgICAgICAgdGVzdGJvdGgoIiUwMzZvIiwgLWJpZywgIi0wMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlMDM2byIsIGJpZywgIjAwMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlMCszNm8iLCBiaWcsICIrMDAwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Ym90aCgiJSszNm8iLCBiaWcsICIgICArMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Ym90aCgiJTM2byIsIGJpZywgIiAgICAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlLjJvIiwgYmlnLCAiMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Ym90aCgiJS4zMm8iLCBiaWcsICIxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlLjMzbyIsIGJpZywgIjAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlMzQuMzNvIiwgYmlnLCAiIDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlLTM0LjMzbyIsIGJpZywgIjAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCAiKQorICAgICAgICB0ZXN0Ym90aCgiJW8iLCBiaWcsICIxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlI28iLCBiaWcsICIwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Ym90aCgiJSNvIiwgLWJpZywgIi0wMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Ym90aCgiJSMuMzRvIiwgLWJpZywgIi0wMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGJvdGgoIiUjKy4zNG8iLCBiaWcsICIrMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlIyAuMzRvIiwgYmlnLCAiIDAwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Ym90aCgiJSMrLjM0byIsIGJpZywgIiswMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKKyAgICAgICAgdGVzdGJvdGgoIiUjLSsuMzRvIiwgYmlnLCAiKzAwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICB0ZXN0Ym90aCgiJSMtKzM3LjM0byIsIGJpZywgIiswMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwICAiKQorICAgICAgICB0ZXN0Ym90aCgiJSMrMzcuMzRvIiwgYmlnLCAiICArMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgICMgbmV4dCBvbmUgZ2V0cyBvbmUgbGVhZGluZyB6ZXJvIGZyb20gcHJlY2lzaW9uCisgICAgICAgIHRlc3Rib3RoKCIlLjMzbyIsIGJpZywgIjAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgICMgYmFzZSBtYXJrZXIgc2hvdWxkbid0IGNoYW5nZSB0aGF0LCBzaW5jZSAiMCIgaXMgcmVkdW5kYW50CisgICAgICAgIHRlc3Rib3RoKCIlIy4zM28iLCBiaWcsICIwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICAjIGJ1dCByZWR1Y2UgcHJlY2lzaW9uLCBhbmQgYmFzZSBtYXJrZXIgc2hvdWxkIGFkZCBhIHplcm8KKyAgICAgICAgdGVzdGJvdGgoIiUjLjMybyIsIGJpZywgIjAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgICMgb25lIGxlYWRpbmcgemVybyBmcm9tIHByZWNpc2lvbiwgYW5kIGFub3RoZXIgZnJvbSAiMCIgZmxhZyAmIHdpZHRoCisgICAgICAgIHRlc3Rib3RoKCIlMDM0LjMzbyIsIGJpZywgIjAwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQorICAgICAgICAjIGJhc2UgbWFya2VyIHNob3VsZG4ndCBjaGFuZ2UgdGhhdAorICAgICAgICB0ZXN0Ym90aCgiJTAjMzQuMzNvIiwgYmlnLCAiMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCisgICAgICAgIHRlc3Rib3RoKCIlbyIsIGZsb2F0KGJpZyksICIxMjM0NTZfX19fX19fX19fX19fX19fX19fX19fX19fXyIsIDYpCisKKyAgICAgICAgIyBTb21lIHNtYWxsIGludHMsIGluIGJvdGggUHl0aG9uIGludCBhbmQgbG9uZyBmbGF2b3JzKS4KKyAgICAgICAgdGVzdGJvdGgoIiVkIiwgNDIsICI0MiIpCisgICAgICAgIHRlc3Rib3RoKCIlZCIsIC00MiwgIi00MiIpCisgICAgICAgIHRlc3Rib3RoKCIlZCIsIDQyTCwgIjQyIikKKyAgICAgICAgdGVzdGJvdGgoIiVkIiwgLTQyTCwgIi00MiIpCisgICAgICAgIHRlc3Rib3RoKCIlZCIsIDQyLjAsICI0MiIpCisgICAgICAgIHRlc3Rib3RoKCIlI3giLCAxLCAiMHgxIikKKyAgICAgICAgdGVzdGJvdGgoIiUjeCIsIDFMLCAiMHgxIikKKyAgICAgICAgdGVzdGJvdGgoIiUjWCIsIDEsICIwWDEiKQorICAgICAgICB0ZXN0Ym90aCgiJSNYIiwgMUwsICIwWDEiKQorICAgICAgICB0ZXN0Ym90aCgiJSN4IiwgMS4wLCAiMHgxIikKKyAgICAgICAgdGVzdGJvdGgoIiUjbyIsIDEsICIwMSIpCisgICAgICAgIHRlc3Rib3RoKCIlI28iLCAxTCwgIjAxIikKKyAgICAgICAgdGVzdGJvdGgoIiUjbyIsIDAsICIwIikKKyAgICAgICAgdGVzdGJvdGgoIiUjbyIsIDBMLCAiMCIpCisgICAgICAgIHRlc3Rib3RoKCIlbyIsIDAsICIwIikKKyAgICAgICAgdGVzdGJvdGgoIiVvIiwgMEwsICIwIikKKyAgICAgICAgdGVzdGJvdGgoIiVkIiwgMCwgIjAiKQorICAgICAgICB0ZXN0Ym90aCgiJWQiLCAwTCwgIjAiKQorICAgICAgICB0ZXN0Ym90aCgiJSN4IiwgMCwgIjB4MCIpCisgICAgICAgIHRlc3Rib3RoKCIlI3giLCAwTCwgIjB4MCIpCisgICAgICAgIHRlc3Rib3RoKCIlI1giLCAwLCAiMFgwIikKKyAgICAgICAgdGVzdGJvdGgoIiUjWCIsIDBMLCAiMFgwIikKKworICAgICAgICB0ZXN0Ym90aCgiJXgiLCAweDQyLCAiNDIiKQorICAgICAgICB0ZXN0Ym90aCgiJXgiLCAtMHg0MiwgIi00MiIpCisgICAgICAgIHRlc3Rib3RoKCIleCIsIDB4NDJMLCAiNDIiKQorICAgICAgICB0ZXN0Ym90aCgiJXgiLCAtMHg0MkwsICItNDIiKQorICAgICAgICB0ZXN0Ym90aCgiJXgiLCBmbG9hdCgweDQyKSwgIjQyIikKKworICAgICAgICB0ZXN0Ym90aCgiJW8iLCAwNDIsICI0MiIpCisgICAgICAgIHRlc3Rib3RoKCIlbyIsIC0wNDIsICItNDIiKQorICAgICAgICB0ZXN0Ym90aCgiJW8iLCAwNDJMLCAiNDIiKQorICAgICAgICB0ZXN0Ym90aCgiJW8iLCAtMDQyTCwgIi00MiIpCisgICAgICAgIHRlc3Rib3RoKCIlbyIsIGZsb2F0KDA0MiksICI0MiIpCisKKyAgICAgICAgIyBhbHRlcm5hdGUgZmxvYXQgZm9ybWF0dGluZworICAgICAgICB0ZXN0Zm9ybWF0KCclZycsIDEuMSwgJzEuMScpCisgICAgICAgIHRlc3Rmb3JtYXQoJyUjZycsIDEuMSwgJzEuMTAwMDAnKQorCisgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTU1MTYuCisgICAgICAgIGNsYXNzIEludEZhaWxzKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBUZXN0RmFpbGVkCisgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKworICAgICAgICBmc3QgPSBJbnRGYWlscygpCisgICAgICAgIHRlc3Rmb3JtYXQoIiV4IiwgZnN0LCAnMCcpCisKKyAgICAgICAgIyBUZXN0IGV4Y2VwdGlvbiBmb3IgdW5rbm93biBmb3JtYXQgY2hhcmFjdGVycworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1Rlc3RpbmcgZXhjZXB0aW9ucycKKworICAgICAgICBkZWYgdGVzdF9leGMoZm9ybWF0c3RyLCBhcmdzLCBleGNlcHRpb24sIGV4Y21zZyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGVzdGZvcm1hdChmb3JtYXRzdHIsIGFyZ3MpCisgICAgICAgICAgICBleGNlcHQgZXhjZXB0aW9uLCBleGM6CisgICAgICAgICAgICAgICAgaWYgc3RyKGV4YykgPT0gZXhjbXNnOgorICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgInllcyIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAnbm8nCisgICAgICAgICAgICAgICAgICAgIHByaW50ICdVbmV4cGVjdGVkICcsIGV4Y2VwdGlvbiwgJzonLCByZXByKHN0cihleGMpKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICdubycKKyAgICAgICAgICAgICAgICBwcmludCAnVW5leHBlY3RlZCBleGNlcHRpb24nCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCwgJ2RpZCBub3QgZ2V0IGV4cGVjdGVkIGV4Y2VwdGlvbjogJXMnICUgZXhjbXNnCisKKyAgICAgICAgdGVzdF9leGMoJ2FiYyAlYScsIDEsIFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVyICdhJyAoMHg2MSkgYXQgaW5kZXggNSIpCisgICAgICAgIGlmIGhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIHRlc3RfZXhjKHVuaWNvZGUoJ2FiYyAlXHUzMDAwJywncmF3LXVuaWNvZGUtZXNjYXBlJyksIDEsIFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgZm9ybWF0IGNoYXJhY3RlciAnPycgKDB4MzAwMCkgYXQgaW5kZXggNSIpCisKKyAgICAgICAgdGVzdF9leGMoJyVkJywgJzEnLCBUeXBlRXJyb3IsICIlZCBmb3JtYXQ6IGEgbnVtYmVyIGlzIHJlcXVpcmVkLCBub3Qgc3RyIikKKyAgICAgICAgdGVzdF9leGMoJyVnJywgJzEnLCBUeXBlRXJyb3IsICJmbG9hdCBhcmd1bWVudCByZXF1aXJlZCwgbm90IHN0ciIpCisgICAgICAgIHRlc3RfZXhjKCdubyBmb3JtYXQnLCAnMScsIFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgc3RyaW5nIGZvcm1hdHRpbmciKQorICAgICAgICB0ZXN0X2V4Yygnbm8gZm9ybWF0JywgdScxJywgVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAibm90IGFsbCBhcmd1bWVudHMgY29udmVydGVkIGR1cmluZyBzdHJpbmcgZm9ybWF0dGluZyIpCisgICAgICAgIHRlc3RfZXhjKHUnbm8gZm9ybWF0JywgJzEnLCBUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICJub3QgYWxsIGFyZ3VtZW50cyBjb252ZXJ0ZWQgZHVyaW5nIHN0cmluZyBmb3JtYXR0aW5nIikKKyAgICAgICAgdGVzdF9leGModSdubyBmb3JtYXQnLCB1JzEnLCBUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICJub3QgYWxsIGFyZ3VtZW50cyBjb252ZXJ0ZWQgZHVyaW5nIHN0cmluZyBmb3JtYXR0aW5nIikKKworICAgICAgICBjbGFzcyBGb29iYXIobG9uZyk6CisgICAgICAgICAgICBkZWYgX19vY3RfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIFJldHVybmluZyBhIG5vbi1zdHJpbmcgc2hvdWxkIG5vdCBibG93IHVwLgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmICsgMQorCisgICAgICAgIHRlc3RfZXhjKCclbycsIEZvb2JhcigpLCBUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICJleHBlY3RlZCBzdHJpbmcgb3IgVW5pY29kZSBvYmplY3QsIGxvbmcgZm91bmQiKQorCisgICAgICAgIGlmIG1heHNpemUgPT0gMioqMzEtMToKKyAgICAgICAgICAgICMgY3Jhc2hlcyAyLjIuMSBhbmQgZWFybGllcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAiJSpkIiUobWF4c2l6ZSwgLTEyNykKKyAgICAgICAgICAgIGV4Y2VwdCBNZW1vcnlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQsICciJSpkIiUobWF4c2l6ZSwgLTEyNykgc2hvdWxkIGZhaWwnCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEZvcm1hdFRlc3QpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ZwZm9ybWF0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZnBmb3JtYXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkZTNiMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ZwZm9ybWF0LnB5CkBAIC0wLDAgKzEsNzYgQEAKKycnJworICAgVGVzdHMgZm9yIGZwZm9ybWF0IG1vZHVsZQorICAgTmljayBNYXRoZXdzb24KKycnJworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCitpbXBvcnQgdW5pdHRlc3QKK2ZwZm9ybWF0ID0gaW1wb3J0X21vZHVsZSgnZnBmb3JtYXQnLCBkZXByZWNhdGVkPVRydWUpCitmaXgsIHNjaSwgTm90QU51bWJlciA9IGZwZm9ybWF0LmZpeCwgZnBmb3JtYXQuc2NpLCBmcGZvcm1hdC5Ob3RBTnVtYmVyCisKK1N0cmluZ1R5cGUgPSB0eXBlKCcnKQorCisjIFRlc3QgdGhlIG9sZCBhbmQgb2Jzb2xlc2NlbnQgZnBmb3JtYXQgbW9kdWxlLgorIworIyAoSXQncyBvYnNvbGVzY2VudCBiZWNhdXNlIGZpeChuLGQpID09ICIlLipmIiUoZCxuKSBhbmQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2kobixkKSA9PSAiJS4qZSIlKGQsbikKKyMgIGZvciBhbGwgcmVhc29uYWJsZSBudW1lcmljIG4gYW5kIGQsIGV4Y2VwdCB0aGF0IHNjaSBnaXZlcyAzIGV4cG9uZW50CisjICBkaWdpdHMgaW5zdGVhZCBvZiAyLgorIworIyBEaWZmZXJlbmNlcyBvbmx5IG9jY3VyIGZvciB1bnJlYXNvbmFibGUgbiBhbmQgZC4gICAgPC4yIHdpbms+KQorCitjbGFzcyBGcGZvcm1hdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrRml4KHNlbGYsIG4sIGRpZ2l0cyk6CisgICAgICAgIHJlc3VsdCA9IGZpeChuLCBkaWdpdHMpCisgICAgICAgIGlmIGlzaW5zdGFuY2UobiwgU3RyaW5nVHlwZSk6CisgICAgICAgICAgICBuID0gcmVwcihuKQorICAgICAgICBleHBlY3RlZCA9ICIlLipmIiAlIChkaWdpdHMsIGZsb2F0KG4pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKworICAgIGRlZiBjaGVja1NjaShzZWxmLCBuLCBkaWdpdHMpOgorICAgICAgICByZXN1bHQgPSBzY2kobiwgZGlnaXRzKQorICAgICAgICBpZiBpc2luc3RhbmNlKG4sIFN0cmluZ1R5cGUpOgorICAgICAgICAgICAgbiA9IHJlcHIobikKKyAgICAgICAgZXhwZWN0ZWQgPSAiJS4qZSIgJSAoZGlnaXRzLCBmbG9hdChuKSkKKyAgICAgICAgIyBhZGQgdGhlIGV4dHJhIDAgaWYgbmVlZGVkCisgICAgICAgIG51bSwgZXhwID0gZXhwZWN0ZWQuc3BsaXQoImUiKQorICAgICAgICBpZiBsZW4oZXhwKSA8IDQ6CisgICAgICAgICAgICBleHAgPSBleHBbMF0gKyAiMCIgKyBleHBbMTpdCisgICAgICAgIGV4cGVjdGVkID0gIiVzZSVzIiAlIChudW0sIGV4cCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9iYXNpY19jYXNlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXgoMTAwLjAvMywgMyksICczMy4zMzMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjaSgxMDAuMC8zLCAzKSwgJzMuMzMzZSswMDEnKQorCisgICAgZGVmIHRlc3RfcmVhc29uYWJsZV92YWx1ZXMoc2VsZik6CisgICAgICAgIGZvciBkIGluIHJhbmdlKDcpOgorICAgICAgICAgICAgZm9yIHZhbCBpbiAoMTAwMC4wLzMsIDEwMDAsIDEwMDAuMCwgLjAwMiwgMS4wLzMsIDFlMTApOgorICAgICAgICAgICAgICAgIGZvciByZWFsVmFsIGluICh2YWwsIDEuMC92YWwsIC12YWwsIC0xLjAvdmFsKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja0ZpeChyZWFsVmFsLCBkKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrU2NpKHJlYWxWYWwsIGQpCisKKyAgICBkZWYgdGVzdF9mYWlsaW5nX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIyBOb3cgZm9yICd1bnJlYXNvbmFibGUgbiBhbmQgZCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXgoMS4wLCAxMDAwKSwgJzEuJysoJzAnKjEwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjaSgiMSIrKCcwJyoxMDAwKSwgMCksICcxZSsxMDAwJykKKworICAgICAgICAjIFRoaXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50LiAgc2NpIHJhaXNlcyBhbiBleGNlcHRpb247IGZpeCBkb2Vzbid0LgorICAgICAgICB5YWNodCA9ICJUaHJvYXR3b2JibGVyIE1hbmdyb3ZlIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeCh5YWNodCwgMTApLCB5YWNodCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2NpKHlhY2h0LCAxMCkKKyAgICAgICAgZXhjZXB0IE5vdEFOdW1iZXI6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiBvbiBub24tbnVtZXJpYyBzY2kiKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoRnBmb3JtYXRUZXN0KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTA5YmIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5CkBAIC0wLDAgKzEsNjA1IEBACisiIiJUZXN0cyBmb3IgTGliL2ZyYWN0aW9ucy5weS4iIiIKKworZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKK2ltcG9ydCBtYXRoCitpbXBvcnQgbnVtYmVycworaW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgZnJhY3Rpb25zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY29weSBpbXBvcnQgY29weSwgZGVlcGNvcHkKK2Zyb20gY1BpY2tsZSBpbXBvcnQgZHVtcHMsIGxvYWRzCitGID0gZnJhY3Rpb25zLkZyYWN0aW9uCitnY2QgPSBmcmFjdGlvbnMuZ2NkCisKKyMgZGVjb3JhdG9yIGZvciBza2lwcGluZyB0ZXN0cyBvbiBub24tSUVFRSA3NTQgcGxhdGZvcm1zCityZXF1aXJlc19JRUVFXzc1NCA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoCisgICAgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpLAorICAgICJ0ZXN0IHJlcXVpcmVzIElFRUUgNzU0IGRvdWJsZXMiKQorCitjbGFzcyBEdW1teUZsb2F0KG9iamVjdCk6CisgICAgIiIiRHVtbXkgZmxvYXQgY2xhc3MgZm9yIHRlc3RpbmcgY29tcGFyaXNvbnMgd2l0aCBGcmFjdGlvbnMiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkR1bW15RmxvYXQgY2FuIG9ubHkgYmUgaW5pdGlhbGl6ZWQgZnJvbSBmbG9hdCIpCisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorCisgICAgZGVmIF9yaWNoY21wKHNlbGYsIG90aGVyLCBvcCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIG51bWJlcnMuUmF0aW9uYWwpOgorICAgICAgICAgICAgcmV0dXJuIG9wKEYuZnJvbV9mbG9hdChzZWxmLnZhbHVlKSwgb3RoZXIpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvdGhlciwgRHVtbXlGbG9hdCk6CisgICAgICAgICAgICByZXR1cm4gb3Aoc2VsZi52YWx1ZSwgb3RoZXIudmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOiByZXR1cm4gc2VsZi5fcmljaGNtcChvdGhlciwgb3BlcmF0b3IuZXEpCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6IHJldHVybiBzZWxmLl9yaWNoY21wKG90aGVyLCBvcGVyYXRvci5sZSkKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKTogcmV0dXJuIHNlbGYuX3JpY2hjbXAob3RoZXIsIG9wZXJhdG9yLmx0KQorICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOiByZXR1cm4gc2VsZi5fcmljaGNtcChvdGhlciwgb3BlcmF0b3IuZ2UpCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6IHJldHVybiBzZWxmLl9yaWNoY21wKG90aGVyLCBvcGVyYXRvci5ndCkKKworICAgICMgc2hvdWxkbid0IGJlIGNhbGxpbmcgX19mbG9hdF9fIGF0IGFsbCB3aGVuIGRvaW5nIGNvbXBhcmlzb25zCisgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCAiX19mbG9hdF9fIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcGFyaXNvbnMiCisKKyAgICAjIHNhbWUgZ29lcyBmb3Igc3VidHJhY3Rpb24KKyAgICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGFzc2VydCBGYWxzZSwgIl9fc3ViX18gc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wYXJpc29ucyIKKyAgICBfX3JzdWJfXyA9IF9fc3ViX18KKworICAgICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKyAgICBfX2hhc2hfXyA9IE5vbmUKKworCitjbGFzcyBEdW1teVJhdGlvbmFsKG9iamVjdCk6CisgICAgIiIiVGVzdCBjb21wYXJpc29uIG9mIEZyYWN0aW9uIHdpdGggYSBuYWl2ZSByYXRpb25hbCBpbXBsZW1lbnRhdGlvbi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBudW0sIGRlbik6CisgICAgICAgIGcgPSBnY2QobnVtLCBkZW4pCisgICAgICAgIHNlbGYubnVtID0gbnVtIC8vIGcKKyAgICAgICAgc2VsZi5kZW4gPSBkZW4gLy8gZworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGZyYWN0aW9ucy5GcmFjdGlvbik6CisgICAgICAgICAgICByZXR1cm4gKHNlbGYubnVtID09IG90aGVyLl9udW1lcmF0b3IgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVuID09IG90aGVyLl9kZW5vbWluYXRvcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybihzZWxmLm51bSAqIG90aGVyLl9kZW5vbWluYXRvciA8IHNlbGYuZGVuICogb3RoZXIuX251bWVyYXRvcikKKworICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4oc2VsZi5udW0gKiBvdGhlci5fZGVub21pbmF0b3IgPiBzZWxmLmRlbiAqIG90aGVyLl9udW1lcmF0b3IpCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuKHNlbGYubnVtICogb3RoZXIuX2Rlbm9taW5hdG9yIDw9IHNlbGYuZGVuICogb3RoZXIuX251bWVyYXRvcikKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4oc2VsZi5udW0gKiBvdGhlci5fZGVub21pbmF0b3IgPj0gc2VsZi5kZW4gKiBvdGhlci5fbnVtZXJhdG9yKQorCisgICAgIyB0aGlzIGNsYXNzIGlzIGZvciB0ZXN0aW5nIGNvbXBhcmlzb25zOyBjb252ZXJzaW9uIHRvIGZsb2F0CisgICAgIyBzaG91bGQgbmV2ZXIgYmUgdXNlZCBmb3IgYSBjb21wYXJpc29uLCBzaW5jZSBpdCBsb3NlcyBhY2N1cmFjeQorICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgIGFzc2VydCBGYWxzZSwgIl9fZmxvYXRfXyBzaG91bGQgbm90IGJlIGludm9rZWQiCisKKyAgICAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisgICAgX19oYXNoX18gPSBOb25lCisKKworY2xhc3MgRHVtbXlGcmFjdGlvbihmcmFjdGlvbnMuRnJhY3Rpb24pOgorICAgICIiIkR1bW15IEZyYWN0aW9uIHN1YmNsYXNzIGZvciBjb3B5IGFuZCBkZWVwY29weSB0ZXN0aW5nLiIiIgorCitjbGFzcyBHY2RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0TWlzYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnY2QoMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2NkKDEsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBnY2QoLTEsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdjZCgwLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgZ2NkKDAsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnY2QoNywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTEsIGdjZCg3LCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2NkKC0yMywgMTUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEyLCBnY2QoMTIwLCA4NCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTEyLCBnY2QoODQsIC0xMjApKQorCisKK2RlZiBfY29tcG9uZW50cyhyKToKKyAgICByZXR1cm4gKHIubnVtZXJhdG9yLCByLmRlbm9taW5hdG9yKQorCisKK2NsYXNzIEZyYWN0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgYXNzZXJ0VHlwZWRFcXVhbHMoc2VsZiwgZXhwZWN0ZWQsIGFjdHVhbCk6CisgICAgICAgICIiIkFzc2VydHMgdGhhdCBib3RoIHRoZSB0eXBlcyBhbmQgdmFsdWVzIGFyZSB0aGUgc2FtZS4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGV4cGVjdGVkKSwgdHlwZShhY3R1YWwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpCisKKyAgICBkZWYgYXNzZXJ0UmFpc2VzTWVzc2FnZShzZWxmLCBleGNfdHlwZSwgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYWJsZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQXNzZXJ0cyB0aGF0IGNhbGxhYmxlKCphcmdzLCAqKmt3YXJncykgcmFpc2VzIGV4Y190eXBlKG1lc3NhZ2UpLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWxsYWJsZSgqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGV4Y2VwdCBleGNfdHlwZSwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZSwgc3RyKGUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCIlcyBub3QgcmFpc2VkIiAlIGV4Y190eXBlLl9fbmFtZV9fKQorCisgICAgZGVmIHRlc3RJbml0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwgX2NvbXBvbmVudHMoRigpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNywgMSksIF9jb21wb25lbnRzKEYoNykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg3LCAzKSwgX2NvbXBvbmVudHMoRihGKDcsIDMpKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTEsIDEpLCBfY29tcG9uZW50cyhGKC0xLCAxKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0xLCAxKSwgX2NvbXBvbmVudHMoRigxLCAtMSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxLCAxKSwgX2NvbXBvbmVudHMoRigtMiwgLTIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMSwgMiksIF9jb21wb25lbnRzKEYoNSwgMTApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNywgMTUpLCBfY29tcG9uZW50cyhGKDcsIDE1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwKioyMywgMSksIF9jb21wb25lbnRzKEYoMTAqKjIzKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMywgNzcpLCBfY29tcG9uZW50cyhGKEYoMywgNyksIDExKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC05LCA1KSwgX2NvbXBvbmVudHMoRigyLCBGKC0xMCwgOSkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMjQ4NiwgMjQ4NSksIF9jb21wb25lbnRzKEYoRigyMiwgNyksIEYoMzU1LCAxMTMpKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKFplcm9EaXZpc2lvbkVycm9yLCAiRnJhY3Rpb24oMTIsIDApIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYsIDEyLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIDEuNSArIDNqKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgIjMvMiIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgMywgMGopCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgMywgMWopCisKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdEluaXRGcm9tRmxvYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDUsIDIpLCBfY29tcG9uZW50cyhGKDIuNSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwgX2NvbXBvbmVudHMoRigtMC4wKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDM2MDI4Nzk3MDE4OTYzOTcsIDM2MDI4Nzk3MDE4OTYzOTY4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGKDAuMSkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIGZsb2F0KCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBmbG9hdCgnaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgZmxvYXQoJy1pbmYnKSkKKworICAgIGRlZiB0ZXN0SW5pdEZyb21EZWNpbWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMSwgMTApLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoRGVjaW1hbCgnMS4xJykpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNywgMjAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGKERlY2ltYWwoJzMuNWUtMicpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoRGVjaW1hbCgnLjAwMGUyMCcpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnbmFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnc25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIERlY2ltYWwoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIERlY2ltYWwoJy1pbmYnKSkKKworICAgIGRlZiB0ZXN0RnJvbVN0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNSwgMSksIF9jb21wb25lbnRzKEYoIjUiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDMsIDIpLCBfY29tcG9uZW50cyhGKCIzLzIiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDMsIDIpLCBfY29tcG9uZW50cyhGKCIgXG4gICszLzIiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0zLCAyKSwgX2NvbXBvbmVudHMoRigiLTMvMiAgIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMywgMiksIF9jb21wb25lbnRzKEYoIiAgICAwMTMvMDIgXG4gICIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTMsIDIpLCBfY29tcG9uZW50cyhGKHUiICAgIDAxMy8wMiBcbiAgIikpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDE2LCA1KSwgX2NvbXBvbmVudHMoRigiIDMuMiAiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0xNiwgNSksIF9jb21wb25lbnRzKEYodSIgLTMuMiAiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0zLCAxKSwgX2NvbXBvbmVudHMoRih1IiAtMy4gIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgzLCA1KSwgX2NvbXBvbmVudHMoRih1IiAuNiAiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEsIDMxMjUpLCBfY29tcG9uZW50cyhGKCIzMi5lLTUiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwMDAwMDAsIDEpLCBfY29tcG9uZW50cyhGKCIxRSswNiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTEyMzAwLCAxKSwgX2NvbXBvbmVudHMoRigiLTEuMjNlNCIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgMSksIF9jb21wb25lbnRzKEYoIiAuMGUrMFx0IikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwgX2NvbXBvbmVudHMoRigiLTAuMDAwZTAiKSkpCisKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCisgICAgICAgICAgICBaZXJvRGl2aXNpb25FcnJvciwgIkZyYWN0aW9uKDMsIDApIiwKKyAgICAgICAgICAgIEYsICIzLzAiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiSW52YWxpZCBsaXRlcmFsIGZvciBGcmFjdGlvbjogJzMvJyIsCisgICAgICAgICAgICBGLCAiMy8iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiSW52YWxpZCBsaXRlcmFsIGZvciBGcmFjdGlvbjogJy8yJyIsCisgICAgICAgICAgICBGLCAiLzIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiSW52YWxpZCBsaXRlcmFsIGZvciBGcmFjdGlvbjogJzMgLzInIiwKKyAgICAgICAgICAgIEYsICIzIC8yIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAorICAgICAgICAgICAgIyBEZW5vbWluYXRvcnMgZG9uJ3QgbmVlZCBhIHNpZ24uCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiSW52YWxpZCBsaXRlcmFsIGZvciBGcmFjdGlvbjogJzMvKzInIiwKKyAgICAgICAgICAgIEYsICIzLysyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAorICAgICAgICAgICAgIyBJbWl0YXRlIGZsb2F0J3MgcGFyc2luZy4KKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJJbnZhbGlkIGxpdGVyYWwgZm9yIEZyYWN0aW9uOiAnKyAzLzInIiwKKyAgICAgICAgICAgIEYsICIrIDMvMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKKyAgICAgICAgICAgICMgQXZvaWQgdHJlYXRpbmcgJy4nIGFzIGEgcmVnZXggc3BlY2lhbCBjaGFyYWN0ZXIuCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiSW52YWxpZCBsaXRlcmFsIGZvciBGcmFjdGlvbjogJzNhMiciLAorICAgICAgICAgICAgRiwgIjNhMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKKyAgICAgICAgICAgICMgRG9uJ3QgYWNjZXB0IGNvbWJpbmF0aW9ucyBvZiBkZWNpbWFscyBhbmQgZnJhY3Rpb25zLgorICAgICAgICAgICAgVmFsdWVFcnJvciwgIkludmFsaWQgbGl0ZXJhbCBmb3IgRnJhY3Rpb246ICczLzcuMiciLAorICAgICAgICAgICAgRiwgIjMvNy4yIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAorICAgICAgICAgICAgIyBEb24ndCBhY2NlcHQgY29tYmluYXRpb25zIG9mIGRlY2ltYWxzIGFuZCBmcmFjdGlvbnMuCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiSW52YWxpZCBsaXRlcmFsIGZvciBGcmFjdGlvbjogJzMuMi83JyIsCisgICAgICAgICAgICBGLCAiMy4yLzciKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCisgICAgICAgICAgICAjIEFsbG93IDMuIGFuZCAuMywgYnV0IG5vdCAuCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiSW52YWxpZCBsaXRlcmFsIGZvciBGcmFjdGlvbjogJy4nIiwKKyAgICAgICAgICAgIEYsICIuIikKKworICAgIGRlZiB0ZXN0SW1tdXRhYmxlKHNlbGYpOgorICAgICAgICByID0gRig3LCAzKQorICAgICAgICByLl9faW5pdF9fKDIsIDE1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg3LCAzKSwgX2NvbXBvbmVudHMocikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHIsICdudW1lcmF0b3InLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHIsICdkZW5vbWluYXRvcicsIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDcsIDMpLCBfY29tcG9uZW50cyhyKSkKKworICAgICAgICAjIEJ1dCBpZiB5b3UgX3JlYWxseV8gbmVlZCB0bzoKKyAgICAgICAgci5fbnVtZXJhdG9yID0gNAorICAgICAgICByLl9kZW5vbWluYXRvciA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNCwgMiksIF9jb21wb25lbnRzKHIpKQorICAgICAgICAjIFdoaWNoIGJyZWFrcyBzb21lIGltcG9ydGFudCBvcGVyYXRpb25zOgorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKEYoNCwgMiksIHIpCisKKyAgICBkZWYgdGVzdEZyb21GbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLmZyb21fZmxvYXQsIDMrNGopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwLCAxKSwgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KDEwKSkpCisgICAgICAgIGJpZ2ludCA9IDEyMzQ1Njc4OTAxMjM0NTY3ODkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYmlnaW50LCAxKSwgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KGJpZ2ludCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KC0wLjApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsIDEpLCBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoMTAuMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtNSwgMiksIF9jb21wb25lbnRzKEYuZnJvbV9mbG9hdCgtMi41KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDk5OTk5OTk5OTk5OTk5OTkxNjExMzkyLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoMWUyMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KDEwKioyMyksIGZsb2F0KEYuZnJvbV9mbG9hdCgxZTIzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDM2MDI4Nzk3MDE4OTYzOTcsIDExMjU4OTk5MDY4NDI2MjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYuZnJvbV9mbG9hdCgzLjIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLjIsIGZsb2F0KEYuZnJvbV9mbG9hdCgzLjIpKSkKKworICAgICAgICBpbmYgPSAxZTEwMDAKKyAgICAgICAgbmFuID0gaW5mIC0gaW5mCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKKyAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IGluZiB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgRi5mcm9tX2Zsb2F0LCBpbmYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKKyAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1pbmYgdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIEYuZnJvbV9mbG9hdCwgLWluZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAorICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgbmFuIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBGLmZyb21fZmxvYXQsIG5hbikKKworICAgIGRlZiB0ZXN0RnJvbURlY2ltYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRi5mcm9tX2RlY2ltYWwsIDMrNGopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRigxMCwgMSksIEYuZnJvbV9kZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKDApLCBGLmZyb21fZGVjaW1hbChEZWNpbWFsKCItMCIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKDUsIDEwKSwgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiMC41IikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoNSwgMTAwMCksIEYuZnJvbV9kZWNpbWFsKERlY2ltYWwoIjVlLTMiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRig1MDAwKSwgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiNWUzIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgLSBGKDEsIDEwKiozMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiMC4iICsgIjkiICogMzApKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCisgICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCBJbmZpbml0eSB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwsIERlY2ltYWwoImluZiIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCisgICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCAtSW5maW5pdHkgdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIEYuZnJvbV9kZWNpbWFsLCBEZWNpbWFsKCItaW5mIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKKyAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IE5hTiB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwsIERlY2ltYWwoIm5hbiIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCisgICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCBzTmFOIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgic25hbiIpKQorCisgICAgZGVmIHRlc3RMaW1pdERlbm9taW5hdG9yKHNlbGYpOgorICAgICAgICBycGkgPSBGKCczLjE0MTU5MjY1MzU4OTc5MzInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJwaS5saW1pdF9kZW5vbWluYXRvcigxMDAwMCksIEYoMzU1LCAxMTMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1ycGkubGltaXRfZGVub21pbmF0b3IoMTAwMDApLCBGKC0zNTUsIDExMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnBpLmxpbWl0X2Rlbm9taW5hdG9yKDExMyksIEYoMzU1LCAxMTMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJwaS5saW1pdF9kZW5vbWluYXRvcigxMTIpLCBGKDMzMywgMTA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKDIwMSwgMjAwKS5saW1pdF9kZW5vbWluYXRvcigxMDApLCBGKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoMjAxLCAyMDApLmxpbWl0X2Rlbm9taW5hdG9yKDEwMSksIEYoMTAyLCAxMDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoMCkubGltaXRfZGVub21pbmF0b3IoMTAwMDApLCBGKDApKQorICAgICAgICBmb3IgaSBpbiAoMCwgLTEpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAorICAgICAgICAgICAgICAgIFZhbHVlRXJyb3IsICJtYXhfZGVub21pbmF0b3Igc2hvdWxkIGJlIGF0IGxlYXN0IDEiLAorICAgICAgICAgICAgICAgIEYoMSkubGltaXRfZGVub21pbmF0b3IsIGkpCisKKyAgICBkZWYgdGVzdENvbnZlcnNpb25zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKC0xLCBtYXRoLnRydW5jKEYoLTExLCAxMCkpKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKC0xLCBpbnQoRigtMTEsIDEwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMSwgbWF0aC50cnVuYyhGKDExLCAxMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBib29sKEYoMCwgMSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGJvb2woRigzLCAyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMC4xLCBmbG9hdChGKDEsIDEwKSkpCisKKyAgICAgICAgIyBDaGVjayB0aGF0IF9fZmxvYXRfXyBpc24ndCBpbXBsZW1lbnRlZCBieSBjb252ZXJ0aW5nIHRoZQorICAgICAgICAjIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IgdG8gZmxvYXQgYmVmb3JlIGRpdmlkaW5nLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmbG9hdCwgbG9uZygnMicqNDAwKyc3JykpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMi4wLzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KEYobG9uZygnMicqNDAwKyc3JyksIGxvbmcoJzMnKjQwMCsnMScpKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjErMGosIGNvbXBsZXgoRigxLDEwKSkpCisKKworICAgIGRlZiB0ZXN0QXJpdGhtZXRpYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKDEsIDIpLCBGKDEsIDEwKSArIEYoMiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRigtMywgMTApLCBGKDEsIDEwKSAtIEYoMiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRigxLCAyNSksIEYoMSwgMTApICogRigyLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKDEsIDQpLCBGKDEsIDEwKSAvIEYoMiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMiwgRig5LCAxMCkgLy8gRigyLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygxMCoqMjMsIEYoMTAqKjIzLCAxKSAvLyBGKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoMiwgMyksIEYoLTcsIDMpICUgRigzLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGKDgsIDI3KSwgRigyLCAzKSAqKiBGKDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoMjcsIDgpLCBGKDIsIDMpICoqIEYoLTMpKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDIuMCwgRig0KSAqKiBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEYoMSwgMSksICtGKDEsIDEpKQorICAgICAgICAjIFdpbGwgcmV0dXJuIDFqIGluIDMuMDoKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93LCBGKC0xKSwgRigxLCAyKSkKKworICAgIGRlZiB0ZXN0TWl4ZWRBcml0aG1ldGljKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKEYoMTEsIDEwKSwgRigxLCAxMCkgKyAxKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDEuMSwgRigxLCAxMCkgKyAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMS4xICsgMGosIEYoMSwgMTApICsgKDEuMCArIDBqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscyhGKDExLCAxMCksIDEgKyBGKDEsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygxLjEsIDEuMCArIEYoMSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDEuMSArIDBqLCAoMS4wICsgMGopICsgRigxLCAxMCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscyhGKC05LCAxMCksIEYoMSwgMTApIC0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygtMC45LCBGKDEsIDEwKSAtIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygtMC45ICsgMGosIEYoMSwgMTApIC0gKDEuMCArIDBqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscyhGKDksIDEwKSwgMSAtIEYoMSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDAuOSwgMS4wIC0gRigxLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMC45ICsgMGosICgxLjAgKyAwaikgLSBGKDEsIDEwKSkKKworICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKEYoMSwgMTApLCBGKDEsIDEwKSAqIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMC4xLCBGKDEsIDEwKSAqIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjEgKyAwaiwgRigxLCAxMCkgKiAoMS4wICsgMGopKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKEYoMSwgMTApLCAxICogRigxLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMC4xLCAxLjAgKiBGKDEsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjEgKyAwaiwgKDEuMCArIDBqKSAqIEYoMSwgMTApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoRigxLCAxMCksIEYoMSwgMTApIC8gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjEsIEYoMSwgMTApIC8gMS4wKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDAuMSArIDBqLCBGKDEsIDEwKSAvICgxLjAgKyAwaikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoRigxMCwgMSksIDEgLyBGKDEsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygxMC4wLCAxLjAgLyBGKDEsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygxMC4wICsgMGosICgxLjAgKyAwaikgLyBGKDEsIDEwKSkKKworICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDAsIEYoMSwgMTApIC8vIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMC4wLCBGKDEsIDEwKSAvLyAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMTAsIDEgLy8gRigxLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMTAqKjIzLCAxMCoqMjIgLy8gRigxLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMTAuMCwgMS4wIC8vIEYoMSwgMTApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoRigxLCAxMCksIEYoMSwgMTApICUgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjEsIEYoMSwgMTApICUgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKEYoMCwgMSksIDEgJSBGKDEsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjAsIDEuMCAlIEYoMSwgMTApKQorCisgICAgICAgICMgTm8gbmVlZCBmb3IgZGl2bW9kIHNpbmNlIHdlIGRvbid0IG92ZXJyaWRlIGl0LgorCisgICAgICAgICMgKiogaGFzIG1vcmUgaW50ZXJlc3RpbmcgY29udmVyc2lvbiBydWxlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscyhGKDEwMCwgMSksIEYoMSwgMTApICoqIC0yKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKEYoMTAwLCAxKSwgRigxMCwgMSkgKiogMikKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjEsIEYoMSwgMTApICoqIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjEgKyAwaiwgRigxLCAxMCkgKiogKDEuMCArIDBqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscyg0ICwgMiAqKiBGKDIsIDEpKQorICAgICAgICAjIFdpbGwgcmV0dXJuIDFqIGluIDMuMDoKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93LCAoLTEpLCBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKEYoMSwgNCkgLCAyICoqIEYoLTIsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKDIuMCAsIDQgKiogRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygwLjI1LCAyLjAgKiogRigtMiwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoMS4wICsgMGosICgxLjAgKyAwaikgKiogRigxLCAxMCkpCisKKyAgICBkZWYgdGVzdE1peGluZ1dpdGhEZWNpbWFsKHNlbGYpOgorICAgICAgICAjIERlY2ltYWwgcmVmdXNlcyBtaXhlZCBjb21wYXJpc29ucy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAorICAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICAgInVuc3VwcG9ydGVkIG9wZXJhbmQgdHlwZShzKSBmb3IgKzogJ0ZyYWN0aW9uJyBhbmQgJ0RlY2ltYWwnIiwKKyAgICAgICAgICAgIG9wZXJhdG9yLmFkZCwgRigzLDExKSwgRGVjaW1hbCgnMy4xNDE1OTI2JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKKyAgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBvcGVyYW5kIHR5cGUocykgZm9yICs6ICdEZWNpbWFsJyBhbmQgJ0ZyYWN0aW9uJyIsCisgICAgICAgICAgICBvcGVyYXRvci5hZGQsIERlY2ltYWwoJzMuMTQxNTkyNicpLCBGKDMsMTEpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKEYoNSwgMiksIERlY2ltYWwoJzIuNScpKQorCisgICAgZGVmIHRlc3RDb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMSwgMikgPCBGKDIsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoMSwgMikgPCBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA8PSBGKDIsIDMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA8PSBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoMiwgMykgPD0gRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMSwgMikgPT0gRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpID09IEYoMSwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSAhPSBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSAhPSBGKDEsIDMpKQorCisgICAgZGVmIHRlc3RDb21wYXJpc29uc0R1bW15UmF0aW9uYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpID09IER1bW15UmF0aW9uYWwoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEdW1teVJhdGlvbmFsKDEsIDIpID09IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSA9PSBEdW1teVJhdGlvbmFsKDMsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKER1bW15UmF0aW9uYWwoMywgNCkgPT0gRigxLCAyKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA8IER1bW15UmF0aW9uYWwoMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSA8IER1bW15UmF0aW9uYWwoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSA8IER1bW15UmF0aW9uYWwoMSwgNykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSA+IER1bW15UmF0aW9uYWwoMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSA+IER1bW15UmF0aW9uYWwoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpID4gRHVtbXlSYXRpb25hbCgxLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMSwgMikgPD0gRHVtbXlSYXRpb25hbCgzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMSwgMikgPD0gRHVtbXlSYXRpb25hbCgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpIDw9IER1bW15UmF0aW9uYWwoMSwgNykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSA+PSBEdW1teVJhdGlvbmFsKDMsIDQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA+PSBEdW1teVJhdGlvbmFsKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA+PSBEdW1teVJhdGlvbmFsKDEsIDcpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEdW1teVJhdGlvbmFsKDEsIDIpIDwgRigzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShEdW1teVJhdGlvbmFsKDEsIDIpIDwgRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShEdW1teVJhdGlvbmFsKDEsIDIpIDwgRigxLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShEdW1teVJhdGlvbmFsKDEsIDIpID4gRigzLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShEdW1teVJhdGlvbmFsKDEsIDIpID4gRigxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKER1bW15UmF0aW9uYWwoMSwgMikgPiBGKDEsIDcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRHVtbXlSYXRpb25hbCgxLCAyKSA8PSBGKDMsIDQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRHVtbXlSYXRpb25hbCgxLCAyKSA8PSBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKER1bW15UmF0aW9uYWwoMSwgMikgPD0gRigxLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShEdW1teVJhdGlvbmFsKDEsIDIpID49IEYoMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEdW1teVJhdGlvbmFsKDEsIDIpID49IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEdW1teVJhdGlvbmFsKDEsIDIpID49IEYoMSwgNykpCisKKyAgICBkZWYgdGVzdENvbXBhcmlzb25zRHVtbXlGbG9hdChzZWxmKToKKyAgICAgICAgeCA9IER1bW15RmxvYXQoMS4vMy4pCisgICAgICAgIHkgPSBGKDEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4ICE9IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IDwgeSBvciB4ID4geSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh4ID09IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeCA8PSB5IGFuZCB4ID49IHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5ICE9IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IDwgeCBvciB5ID4geCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh5ID09IHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeSA8PSB4IGFuZCB5ID49IHgpCisKKyAgICBkZWYgdGVzdE1peGVkTGVzcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIgPCBGKDUsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDIgPCBGKDQsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRig1LCAyKSA8IDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRig0LCAyKSA8IDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMSwgMikgPCAwLjYpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSA8IDAuNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuNCA8IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoMC41IDwgRigxLCAyKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZsb2F0KCdpbmYnKSA8IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbG9hdCgnLWluZicpIDwgRigwLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmxvYXQoJ25hbicpIDwgRigtMywgNykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpIDwgZmxvYXQoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoMTcsIDEyKSA8IGZsb2F0KCctaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxNDQsIC04OSkgPCBmbG9hdCgnbmFuJykpCisKKyAgICBkZWYgdGVzdE1peGVkTGVzc0VxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoMC41IDw9IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoMC42IDw9IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpIDw9IDAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDEsIDIpIDw9IDAuNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIgPD0gRig0LCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgyIDw9IEYoMywgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDQsIDIpIDw9IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRig1LCAyKSA8PSAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmxvYXQoJ2luZicpIDw9IEYoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbG9hdCgnLWluZicpIDw9IEYoMCwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZsb2F0KCduYW4nKSA8PSBGKC0zLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEYoMSwgMikgPD0gZmxvYXQoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoMTcsIDEyKSA8PSBmbG9hdCgnLWluZicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoMTQ0LCAtODkpIDw9IGZsb2F0KCduYW4nKSkKKworICAgIGRlZiB0ZXN0QmlnRmxvYXRDb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgIyBCZWNhdXNlIDEwKioyMyBjYW4ndCBiZSByZXByZXNlbnRlZCBleGFjdGx5IGFzIGEgZmxvYXQ6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxMCoqMjMpID09IGZsb2F0KDEwKioyMykpCisgICAgICAgICMgVGhlIGZpcnN0IHRlc3QgZGVtb25zdHJhdGVzIHdoeSB0aGVzZSBhcmUgaW1wb3J0YW50LgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDFlMjMgPCBmbG9hdChGKG1hdGgudHJ1bmMoMWUyMykgKyAxKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgxZTIzIDwgRihtYXRoLnRydW5jKDFlMjMpICsgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoMWUyMyA8PSBGKG1hdGgudHJ1bmMoMWUyMykgLSAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDFlMjMgPiBGKG1hdGgudHJ1bmMoMWUyMykgLSAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgxZTIzID49IEYobWF0aC50cnVuYygxZTIzKSArIDEpKQorCisgICAgZGVmIHRlc3RCaWdDb21wbGV4Q29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxMCoqMjMpID09IGNvbXBsZXgoMTAqKjIzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCwgRigxMCoqMjMpLCBjb21wbGV4KDEwKioyMykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubGUsIEYoMTAqKjIzKSwgY29tcGxleCgxMCoqMjMpKQorCisgICAgICAgIHggPSBGKDMsIDgpCisgICAgICAgIHogPSBjb21wbGV4KDAuMzc1LCAwLjApCisgICAgICAgIHcgPSBjb21wbGV4KDAuMzc1LCAwLjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4ID09IHopCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeCAhPSB6KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHggPT0gdykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggIT0gdykKKyAgICAgICAgZm9yIG9wIGluIG9wZXJhdG9yLmx0LCBvcGVyYXRvci5sZSwgb3BlcmF0b3IuZ3QsIG9wZXJhdG9yLmdlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcCwgeCwgeikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3AsIHosIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wLCB4LCB3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcCwgdywgeCkKKworICAgIGRlZiB0ZXN0TWl4ZWRFcXVhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuNSA9PSBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDAuNiA9PSBGKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRigxLCAyKSA9PSAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxLCAyKSA9PSAwLjQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyID09IEYoNCwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoMiA9PSBGKDMsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRig0LCAyKSA9PSAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoNSwgMikgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDUsIDIpID09IGZsb2F0KCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbG9hdCgnbmFuJykgPT0gRigzLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGKDUsIDIpID09IGZsb2F0KCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbG9hdCgnLWluZicpID09IEYoMiwgNSkpCisKKyAgICBkZWYgdGVzdFN0cmluZ2lmaWNhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRnJhY3Rpb24oNywgMykiLCByZXByKEYoNywgMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGcmFjdGlvbig2MjgzMTg1MzA3LCAyMDAwMDAwMDAwKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihGKCczLjE0MTU5MjY1MzUnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZyYWN0aW9uKC0xLCAxMDAwMDAwMDAwMDAwMDAwMDAwMDApIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXByKEYoMSwgLTEwKioyMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI3LzMiLCBzdHIoRig3LCAzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjciLCBzdHIoRig3LCAxKSkpCisKKyAgICBkZWYgdGVzdEhhc2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCgyLjUpLCBoYXNoKEYoNSwgMikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goMTAqKjUwKSwgaGFzaChGKDEwKio1MCkpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGhhc2goZmxvYXQoMTAqKjIzKSksIGhhc2goRigxMCoqMjMpKSkKKworICAgIGRlZiB0ZXN0QXBwcm94aW1hdGVQaShzZWxmKToKKyAgICAgICAgIyBBbGdvcml0aG0gYm9ycm93ZWQgZnJvbQorICAgICAgICAjIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGliL2RlY2ltYWwtcmVjaXBlcy5odG1sCisgICAgICAgIHRocmVlID0gRigzKQorICAgICAgICBsYXN0cywgdCwgcywgbiwgbmEsIGQsIGRhID0gMCwgdGhyZWUsIDMsIDEsIDAsIDAsIDI0CisgICAgICAgIHdoaWxlIGFicyhzIC0gbGFzdHMpID4gRigxLCAxMCoqOSk6CisgICAgICAgICAgICBsYXN0cyA9IHMKKyAgICAgICAgICAgIG4sIG5hID0gbituYSwgbmErOAorICAgICAgICAgICAgZCwgZGEgPSBkK2RhLCBkYSszMgorICAgICAgICAgICAgdCA9ICh0ICogbikgLyBkCisgICAgICAgICAgICBzICs9IHQKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChtYXRoLnBpLCBzKQorCisgICAgZGVmIHRlc3RBcHByb3hpbWF0ZUNvczEoc2VsZik6CisgICAgICAgICMgQWxnb3JpdGhtIGJvcnJvd2VkIGZyb20KKyAgICAgICAgIyBodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYi9kZWNpbWFsLXJlY2lwZXMuaHRtbAorICAgICAgICB4ID0gRigxKQorICAgICAgICBpLCBsYXN0cywgcywgZmFjdCwgbnVtLCBzaWduID0gMCwgMCwgRigxKSwgMSwgMSwgMQorICAgICAgICB3aGlsZSBhYnMocyAtIGxhc3RzKSA+IEYoMSwgMTAqKjkpOgorICAgICAgICAgICAgbGFzdHMgPSBzCisgICAgICAgICAgICBpICs9IDIKKyAgICAgICAgICAgIGZhY3QgKj0gaSAqIChpLTEpCisgICAgICAgICAgICBudW0gKj0geCAqIHgKKyAgICAgICAgICAgIHNpZ24gKj0gLTEKKyAgICAgICAgICAgIHMgKz0gbnVtIC8gZmFjdCAqIHNpZ24KKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChtYXRoLmNvcygxKSwgcykKKworICAgIGRlZiB0ZXN0X2NvcHlfZGVlcGNvcHlfcGlja2xlKHNlbGYpOgorICAgICAgICByID0gRigxMywgNykKKyAgICAgICAgZHIgPSBEdW1teUZyYWN0aW9uKDEzLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIGxvYWRzKGR1bXBzKHIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChyKSwgaWQoY29weShyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQociksIGlkKGRlZXBjb3B5KHIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkciksIGlkKGNvcHkoZHIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkciksIGlkKGRlZXBjb3B5KGRyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbHMoZHIsIGNvcHkoZHIpKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWxzKGRyLCBkZWVwY29weShkcikpCisKKyAgICBkZWYgdGVzdF9zbG90cyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA0OTk4CisgICAgICAgIHIgPSBGKDEzLCA3KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgciwgJ2EnLCAxMCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChGcmFjdGlvblRlc3QsIEdjZFRlc3QpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Zyb3plbi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Zyb3plbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzFmNTk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZnJvemVuLnB5CkBAIC0wLDAgKzEsNDcgQEAKKyMgVGVzdCB0aGUgZnJvemVuIG1vZHVsZSBkZWZpbmVkIGluIGZyb3plbi5jLgorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl91bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCisKK2NsYXNzIEZyb3plblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9mcm96ZW4oc2VsZik6CisKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IF9faGVsbG9fXworICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCB4OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9faGVsbG9fXyBmYWlsZWQ6IiArIHN0cih4KSkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBfX3BoZWxsb19fCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIHg6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgX19waGVsbG9fXyBmYWlsZWQ6IiArIHN0cih4KSkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBfX3BoZWxsb19fLnNwYW0KKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgeDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBfX3BoZWxsb19fLnNwYW0gZmFpbGVkOiIgKyBzdHIoeCkpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5mb28KKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uZm9vIHNob3VsZCBoYXZlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnSGVsbG8gd29ybGQuLi5cbkhlbGxvIHdvcmxkLi4uXG5IZWxsbyB3b3JsZC4uLlxuJykKKworICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19faGVsbG9fXyddCisgICAgICAgIGRlbCBzeXMubW9kdWxlc1snX19waGVsbG9fXyddCisgICAgICAgIGRlbCBzeXMubW9kdWxlc1snX19waGVsbG9fXy5zcGFtJ10KKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEZyb3plblRlc3RzKQorCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZnRwbGliLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZnRwbGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MmU4YTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9mdHBsaWIucHkKQEAgLTAsMCArMSw3NzggQEAKKyIiIlRlc3Qgc2NyaXB0IGZvciBmdHBsaWIgbW9kdWxlLiIiIgorCisjIE1vZGlmaWVkIGJ5IEdpYW1wYW9sbyBSb2RvbGEnIHRvIHRlc3QgRlRQIGNsYXNzLCBJUHY2IGFuZCBUTFMKKyMgZW52aXJvbm1lbnQKKworaW1wb3J0IGZ0cGxpYgoraW1wb3J0IGFzeW5jb3JlCitpbXBvcnQgYXN5bmNoYXQKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQorCitmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IEhPU1QKK3RocmVhZGluZyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQorCisKKyMgdGhlIGR1bW15IGRhdGEgcmV0dXJuZWQgYnkgc2VydmVyIG92ZXIgdGhlIGRhdGEgY2hhbm5lbCB3aGVuCisjIFJFVFIsIExJU1QgYW5kIE5MU1QgY29tbWFuZHMgYXJlIGlzc3VlZAorUkVUUl9EQVRBID0gJ2FiY2RlMTIzNDVcclxuJyAqIDEwMDAKK0xJU1RfREFUQSA9ICdmb29cclxuYmFyXHJcbicKK05MU1RfREFUQSA9ICdmb29cclxuYmFyXHJcbicKKworCitjbGFzcyBEdW1teURUUEhhbmRsZXIoYXN5bmNoYXQuYXN5bmNfY2hhdCk6CisgICAgZHRwX2Nvbm5fY2xvc2VkID0gRmFsc2UKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uLCBiYXNlY2xhc3MpOgorICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgICAgIHNlbGYuYmFzZWNsYXNzID0gYmFzZWNsYXNzCisgICAgICAgIHNlbGYuYmFzZWNsYXNzLmxhc3RfcmVjZWl2ZWRfZGF0YSA9ICcnCisKKyAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgIHNlbGYuYmFzZWNsYXNzLmxhc3RfcmVjZWl2ZWRfZGF0YSArPSBzZWxmLnJlY3YoMTAyNCkKKworICAgIGRlZiBoYW5kbGVfY2xvc2Uoc2VsZik6CisgICAgICAgICMgWFhYOiB0aGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIG1hbnkgdGltZXMgaW4gYSByb3cgZm9yIGEgc2luZ2xlCisgICAgICAgICMgY29ubmVjdGlvbiwgaW5jbHVkaW5nIGluIGNsZWFyLXRleHQgKG5vbi1UTFMpIG1vZGUuCisgICAgICAgICMgKGJlaGF2aW91ciB3aXRuZXNzZWQgd2l0aCB0ZXN0X2RhdGFfY29ubmVjdGlvbikKKyAgICAgICAgaWYgbm90IHNlbGYuZHRwX2Nvbm5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5iYXNlY2xhc3MucHVzaCgnMjI2IHRyYW5zZmVyIGNvbXBsZXRlJykKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5kdHBfY29ubl9jbG9zZWQgPSBUcnVlCisKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICByYWlzZQorCisKK2NsYXNzIER1bW15RlRQSGFuZGxlcihhc3luY2hhdC5hc3luY19jaGF0KToKKworICAgIGR0cF9oYW5kbGVyID0gRHVtbXlEVFBIYW5kbGVyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubik6CisgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubikKKyAgICAgICAgc2VsZi5zZXRfdGVybWluYXRvcigiXHJcbiIpCisgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gW10KKyAgICAgICAgc2VsZi5kdHAgPSBOb25lCisgICAgICAgIHNlbGYubGFzdF9yZWNlaXZlZF9jbWQgPSBOb25lCisgICAgICAgIHNlbGYubGFzdF9yZWNlaXZlZF9kYXRhID0gJycKKyAgICAgICAgc2VsZi5uZXh0X3Jlc3BvbnNlID0gJycKKyAgICAgICAgc2VsZi5yZXN0ID0gTm9uZQorICAgICAgICBzZWxmLnB1c2goJzIyMCB3ZWxjb21lJykKKworICAgIGRlZiBjb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuaW5fYnVmZmVyLmFwcGVuZChkYXRhKQorCisgICAgZGVmIGZvdW5kX3Rlcm1pbmF0b3Ioc2VsZik6CisgICAgICAgIGxpbmUgPSAnJy5qb2luKHNlbGYuaW5fYnVmZmVyKQorICAgICAgICBzZWxmLmluX2J1ZmZlciA9IFtdCisgICAgICAgIGlmIHNlbGYubmV4dF9yZXNwb25zZToKKyAgICAgICAgICAgIHNlbGYucHVzaChzZWxmLm5leHRfcmVzcG9uc2UpCisgICAgICAgICAgICBzZWxmLm5leHRfcmVzcG9uc2UgPSAnJworICAgICAgICBjbWQgPSBsaW5lLnNwbGl0KCcgJylbMF0ubG93ZXIoKQorICAgICAgICBzZWxmLmxhc3RfcmVjZWl2ZWRfY21kID0gY21kCisgICAgICAgIHNwYWNlID0gbGluZS5maW5kKCcgJykKKyAgICAgICAgaWYgc3BhY2UgIT0gLTE6CisgICAgICAgICAgICBhcmcgPSBsaW5lW3NwYWNlICsgMTpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmcgPSAiIgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdjbWRfJyArIGNtZCk6CisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYsICdjbWRfJyArIGNtZCkKKyAgICAgICAgICAgIG1ldGhvZChhcmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnB1c2goJzU1MCBjb21tYW5kICIlcyIgbm90IHVuZGVyc3Rvb2QuJyAlY21kKQorCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgcmFpc2UKKworICAgIGRlZiBwdXNoKHNlbGYsIGRhdGEpOgorICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0LnB1c2goc2VsZiwgZGF0YSArICdcclxuJykKKworICAgIGRlZiBjbWRfcG9ydChzZWxmLCBhcmcpOgorICAgICAgICBhZGRyID0gbWFwKGludCwgYXJnLnNwbGl0KCcsJykpCisgICAgICAgIGlwID0gJyVkLiVkLiVkLiVkJyAldHVwbGUoYWRkcls6NF0pCisgICAgICAgIHBvcnQgPSAoYWRkcls0XSAqIDI1NikgKyBhZGRyWzVdCisgICAgICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGlwLCBwb3J0KSwgdGltZW91dD0xMCkKKyAgICAgICAgc2VsZi5kdHAgPSBzZWxmLmR0cF9oYW5kbGVyKHMsIGJhc2VjbGFzcz1zZWxmKQorICAgICAgICBzZWxmLnB1c2goJzIwMCBhY3RpdmUgZGF0YSBjb25uZWN0aW9uIGVzdGFibGlzaGVkJykKKworICAgIGRlZiBjbWRfcGFzdihzZWxmLCBhcmcpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHNvY2suYmluZCgoc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVswXSwgMCkpCisgICAgICAgIHNvY2subGlzdGVuKDUpCisgICAgICAgIHNvY2suc2V0dGltZW91dCgxMCkKKyAgICAgICAgaXAsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbOjJdCisgICAgICAgIGlwID0gaXAucmVwbGFjZSgnLicsICcsJykKKyAgICAgICAgcDEsIHAyID0gZGl2bW9kKHBvcnQsIDI1NikKKyAgICAgICAgc2VsZi5wdXNoKCcyMjcgZW50ZXJpbmcgcGFzc2l2ZSBtb2RlICglcywlZCwlZCknICUoaXAsIHAxLCBwMikpCisgICAgICAgIGNvbm4sIGFkZHIgPSBzb2NrLmFjY2VwdCgpCisgICAgICAgIHNlbGYuZHRwID0gc2VsZi5kdHBfaGFuZGxlcihjb25uLCBiYXNlY2xhc3M9c2VsZikKKworICAgIGRlZiBjbWRfZXBydChzZWxmLCBhcmcpOgorICAgICAgICBhZiwgaXAsIHBvcnQgPSBhcmcuc3BsaXQoYXJnWzBdKVsxOi0xXQorICAgICAgICBwb3J0ID0gaW50KHBvcnQpCisgICAgICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGlwLCBwb3J0KSwgdGltZW91dD0xMCkKKyAgICAgICAgc2VsZi5kdHAgPSBzZWxmLmR0cF9oYW5kbGVyKHMsIGJhc2VjbGFzcz1zZWxmKQorICAgICAgICBzZWxmLnB1c2goJzIwMCBhY3RpdmUgZGF0YSBjb25uZWN0aW9uIGVzdGFibGlzaGVkJykKKworICAgIGRlZiBjbWRfZXBzdihzZWxmLCBhcmcpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYpCisgICAgICAgIHNvY2suYmluZCgoc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVswXSwgMCkpCisgICAgICAgIHNvY2subGlzdGVuKDUpCisgICAgICAgIHNvY2suc2V0dGltZW91dCgxMCkKKyAgICAgICAgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXQorICAgICAgICBzZWxmLnB1c2goJzIyOSBlbnRlcmluZyBleHRlbmRlZCBwYXNzaXZlIG1vZGUgKHx8fCVkfCknICVwb3J0KQorICAgICAgICBjb25uLCBhZGRyID0gc29jay5hY2NlcHQoKQorICAgICAgICBzZWxmLmR0cCA9IHNlbGYuZHRwX2hhbmRsZXIoY29ubiwgYmFzZWNsYXNzPXNlbGYpCisKKyAgICBkZWYgY21kX2VjaG8oc2VsZiwgYXJnKToKKyAgICAgICAgIyBzZW5kcyBiYWNrIHRoZSByZWNlaXZlZCBzdHJpbmcgKHVzZWQgYnkgdGhlIHRlc3Qgc3VpdGUpCisgICAgICAgIHNlbGYucHVzaChhcmcpCisKKyAgICBkZWYgY21kX3VzZXIoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCczMzEgdXNlcm5hbWUgb2snKQorCisgICAgZGVmIGNtZF9wYXNzKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnMjMwIHBhc3N3b3JkIG9rJykKKworICAgIGRlZiBjbWRfYWNjdChzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJzIzMCBhY2N0IG9rJykKKworICAgIGRlZiBjbWRfcm5mcihzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJzM1MCBybmZyIG9rJykKKworICAgIGRlZiBjbWRfcm50byhzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJzI1MCBybnRvIG9rJykKKworICAgIGRlZiBjbWRfZGVsZShzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJzI1MCBkZWxlIG9rJykKKworICAgIGRlZiBjbWRfY3dkKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnMjUwIGN3ZCBvaycpCisKKyAgICBkZWYgY21kX3NpemUoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcyNTAgMTAwMCcpCisKKyAgICBkZWYgY21kX21rZChzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJzI1NyAiJXMiJyAlYXJnKQorCisgICAgZGVmIGNtZF9ybWQoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcyNTAgcm1kIG9rJykKKworICAgIGRlZiBjbWRfcHdkKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnMjU3ICJwd2Qgb2siJykKKworICAgIGRlZiBjbWRfdHlwZShzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJzIwMCB0eXBlIG9rJykKKworICAgIGRlZiBjbWRfcXVpdChzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJzIyMSBxdWl0IG9rJykKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgY21kX3N0b3Ioc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcxMjUgc3RvciBvaycpCisKKyAgICBkZWYgY21kX3Jlc3Qoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5yZXN0ID0gYXJnCisgICAgICAgIHNlbGYucHVzaCgnMzUwIHJlc3Qgb2snKQorCisgICAgZGVmIGNtZF9yZXRyKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnMTI1IHJldHIgb2snKQorICAgICAgICBpZiBzZWxmLnJlc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvZmZzZXQgPSBpbnQoc2VsZi5yZXN0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2Zmc2V0ID0gMAorICAgICAgICBzZWxmLmR0cC5wdXNoKFJFVFJfREFUQVtvZmZzZXQ6XSkKKyAgICAgICAgc2VsZi5kdHAuY2xvc2Vfd2hlbl9kb25lKCkKKyAgICAgICAgc2VsZi5yZXN0ID0gTm9uZQorCisgICAgZGVmIGNtZF9saXN0KHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnMTI1IGxpc3Qgb2snKQorICAgICAgICBzZWxmLmR0cC5wdXNoKExJU1RfREFUQSkKKyAgICAgICAgc2VsZi5kdHAuY2xvc2Vfd2hlbl9kb25lKCkKKworICAgIGRlZiBjbWRfbmxzdChzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJzEyNSBubHN0IG9rJykKKyAgICAgICAgc2VsZi5kdHAucHVzaChOTFNUX0RBVEEpCisgICAgICAgIHNlbGYuZHRwLmNsb3NlX3doZW5fZG9uZSgpCisKKworY2xhc3MgRHVtbXlGVFBTZXJ2ZXIoYXN5bmNvcmUuZGlzcGF0Y2hlciwgdGhyZWFkaW5nLlRocmVhZCk6CisKKyAgICBoYW5kbGVyID0gRHVtbXlGVFBIYW5kbGVyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcywgYWY9c29ja2V0LkFGX0lORVQpOgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KGFmLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuYmluZChhZGRyZXNzKQorICAgICAgICBzZWxmLmxpc3Rlbig1KQorICAgICAgICBzZWxmLmFjdGl2ZSA9IEZhbHNlCisgICAgICAgIHNlbGYuYWN0aXZlX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuaG9zdCwgc2VsZi5wb3J0ID0gc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVs6Ml0KKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmFjdGl2ZQorICAgICAgICBzZWxmLl9fZmxhZyA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuc3RhcnQoc2VsZikKKyAgICAgICAgc2VsZi5fX2ZsYWcud2FpdCgpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLmFjdGl2ZSA9IFRydWUKKyAgICAgICAgc2VsZi5fX2ZsYWcuc2V0KCkKKyAgICAgICAgd2hpbGUgc2VsZi5hY3RpdmUgYW5kIGFzeW5jb3JlLnNvY2tldF9tYXA6CisgICAgICAgICAgICBzZWxmLmFjdGl2ZV9sb2NrLmFjcXVpcmUoKQorICAgICAgICAgICAgYXN5bmNvcmUubG9vcCh0aW1lb3V0PTAuMSwgY291bnQ9MSkKKyAgICAgICAgICAgIHNlbGYuYWN0aXZlX2xvY2sucmVsZWFzZSgpCisgICAgICAgIGFzeW5jb3JlLmNsb3NlX2FsbChpZ25vcmVfYWxsPVRydWUpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuYWN0aXZlCisgICAgICAgIHNlbGYuYWN0aXZlID0gRmFsc2UKKyAgICAgICAgc2VsZi5qb2luKCkKKworICAgIGRlZiBoYW5kbGVfYWNjZXB0KHNlbGYpOgorICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5hY2NlcHQoKQorICAgICAgICBzZWxmLmhhbmRsZXIgPSBzZWxmLmhhbmRsZXIoY29ubikKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgaGFuZGxlX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2UoKQorICAgIGhhbmRsZV9yZWFkID0gaGFuZGxlX2Nvbm5lY3QKKworICAgIGRlZiB3cml0YWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHJhaXNlCisKKworaWYgc3NsIGlzIG5vdCBOb25lOgorCisgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgImtleWNlcnQucGVtIikKKworICAgIGNsYXNzIFNTTENvbm5lY3Rpb24ob2JqZWN0LCBhc3luY29yZS5kaXNwYXRjaGVyKToKKyAgICAgICAgIiIiQW4gYXN5bmNvcmUuZGlzcGF0Y2hlciBzdWJjbGFzcyBzdXBwb3J0aW5nIFRMUy9TU0wuIiIiCisKKyAgICAgICAgX3NzbF9hY2NlcHRpbmcgPSBGYWxzZQorICAgICAgICBfc3NsX2Nsb3NpbmcgPSBGYWxzZQorCisgICAgICAgIGRlZiBzZWN1cmVfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc29ja2V0ID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29ja2V0LCBzdXBwcmVzc19yYWdnZWRfZW9mcz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLCBzZXJ2ZXJfc2lkZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgc2VsZi5fc3NsX2FjY2VwdGluZyA9IFRydWUKKworICAgICAgICBkZWYgX2RvX3NzbF9oYW5kc2hha2Uoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9FT0Y6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBlcnJuby5FQ09OTkFCT1JURUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NzbF9hY2NlcHRpbmcgPSBGYWxzZQorCisgICAgICAgIGRlZiBfZG9fc3NsX3NodXRkb3duKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fc3NsX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQgPSBzZWxmLnNvY2tldC51bndyYXAoKQorICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgIyBBbnkgInNvY2tldCBlcnJvciIgY29ycmVzcG9uZHMgdG8gYSBTU0xfRVJST1JfU1lTQ0FMTCByZXR1cm4KKyAgICAgICAgICAgICAgICAjIGZyb20gT3BlblNTTCdzIFNTTF9zaHV0ZG93bigpLCBjb3JyZXNwb25kaW5nIHRvIGEKKyAgICAgICAgICAgICAgICAjIGNsb3NlZCBzb2NrZXQgY29uZGl0aW9uLiBTZWUgYWxzbzoKKyAgICAgICAgICAgICAgICAjIGh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9vcGVuc3NsLXVzZXJzQG9wZW5zc2wub3JnL21zZzYwNzEwLmh0bWwKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLl9zc2xfY2xvc2luZyA9IEZhbHNlCisgICAgICAgICAgICBzdXBlcihTU0xDb25uZWN0aW9uLCBzZWxmKS5jbG9zZSgpCisKKyAgICAgICAgZGVmIGhhbmRsZV9yZWFkX2V2ZW50KHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5fc3NsX2FjY2VwdGluZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9kb19zc2xfaGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fc3NsX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fc3NsX3NodXRkb3duKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3VwZXIoU1NMQ29ubmVjdGlvbiwgc2VsZikuaGFuZGxlX3JlYWRfZXZlbnQoKQorCisgICAgICAgIGRlZiBoYW5kbGVfd3JpdGVfZXZlbnQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLl9zc2xfYWNjZXB0aW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9oYW5kc2hha2UoKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zc2xfY2xvc2luZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9kb19zc2xfc2h1dGRvd24oKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdXBlcihTU0xDb25uZWN0aW9uLCBzZWxmKS5oYW5kbGVfd3JpdGVfZXZlbnQoKQorCisgICAgICAgIGRlZiBzZW5kKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihTU0xDb25uZWN0aW9uLCBzZWxmKS5zZW5kKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfRU9GLCBzc2wuU1NMX0VSUk9SX1pFUk9fUkVUVVJOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIGRlZiByZWN2KHNlbGYsIGJ1ZmZlcl9zaXplKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoU1NMQ29ubmVjdGlvbiwgc2VsZikucmVjdihidWZmZXJfc2l6ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX0VPRiwgc3NsLlNTTF9FUlJPUl9aRVJPX1JFVFVSTik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICBpZiAoaXNpbnN0YW5jZShzZWxmLnNvY2tldCwgc3NsLlNTTFNvY2tldCkgYW5kCisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuX3NzbG9iaiBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fc3NsX3NodXRkb3duKCkKKworCisgICAgY2xhc3MgRHVtbXlUTFNfRFRQSGFuZGxlcihTU0xDb25uZWN0aW9uLCBEdW1teURUUEhhbmRsZXIpOgorICAgICAgICAiIiJBIER1bW15RFRQSGFuZGxlciBzdWJjbGFzcyBzdXBwb3J0aW5nIFRMUy9TU0wuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4sIGJhc2VjbGFzcyk6CisgICAgICAgICAgICBEdW1teURUUEhhbmRsZXIuX19pbml0X18oc2VsZiwgY29ubiwgYmFzZWNsYXNzKQorICAgICAgICAgICAgaWYgc2VsZi5iYXNlY2xhc3Muc2VjdXJlX2RhdGFfY2hhbm5lbDoKKyAgICAgICAgICAgICAgICBzZWxmLnNlY3VyZV9jb25uZWN0aW9uKCkKKworCisgICAgY2xhc3MgRHVtbXlUTFNfRlRQSGFuZGxlcihTU0xDb25uZWN0aW9uLCBEdW1teUZUUEhhbmRsZXIpOgorICAgICAgICAiIiJBIER1bW15RlRQSGFuZGxlciBzdWJjbGFzcyBzdXBwb3J0aW5nIFRMUy9TU0wuIiIiCisKKyAgICAgICAgZHRwX2hhbmRsZXIgPSBEdW1teVRMU19EVFBIYW5kbGVyCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgorICAgICAgICAgICAgRHVtbXlGVFBIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgICAgICAgICBzZWxmLnNlY3VyZV9kYXRhX2NoYW5uZWwgPSBGYWxzZQorCisgICAgICAgIGRlZiBjbWRfYXV0aChzZWxmLCBsaW5lKToKKyAgICAgICAgICAgICIiIlNldCB1cCBzZWN1cmUgY29udHJvbCBjaGFubmVsLiIiIgorICAgICAgICAgICAgc2VsZi5wdXNoKCcyMzQgQVVUSCBUTFMgc3VjY2Vzc2Z1bCcpCisgICAgICAgICAgICBzZWxmLnNlY3VyZV9jb25uZWN0aW9uKCkKKworICAgICAgICBkZWYgY21kX3Bic3ooc2VsZiwgbGluZSk6CisgICAgICAgICAgICAiIiJOZWdvdGlhdGUgc2l6ZSBvZiBidWZmZXIgZm9yIHNlY3VyZSBkYXRhIHRyYW5zZmVyLgorICAgICAgICAgICAgRm9yIFRMUy9TU0wgdGhlIG9ubHkgdmFsaWQgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIgaXMgJzAnLgorICAgICAgICAgICAgQW55IG90aGVyIHZhbHVlIGlzIGFjY2VwdGVkIGJ1dCBpZ25vcmVkLgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBzZWxmLnB1c2goJzIwMCBQQlNaPTAgc3VjY2Vzc2Z1bC4nKQorCisgICAgICAgIGRlZiBjbWRfcHJvdChzZWxmLCBsaW5lKToKKyAgICAgICAgICAgICIiIlNldHVwIHVuL3NlY3VyZSBkYXRhIGNoYW5uZWwuIiIiCisgICAgICAgICAgICBhcmcgPSBsaW5lLnVwcGVyKCkKKyAgICAgICAgICAgIGlmIGFyZyA9PSAnQyc6CisgICAgICAgICAgICAgICAgc2VsZi5wdXNoKCcyMDAgUHJvdGVjdGlvbiBzZXQgdG8gQ2xlYXInKQorICAgICAgICAgICAgICAgIHNlbGYuc2VjdXJlX2RhdGFfY2hhbm5lbCA9IEZhbHNlCisgICAgICAgICAgICBlbGlmIGFyZyA9PSAnUCc6CisgICAgICAgICAgICAgICAgc2VsZi5wdXNoKCcyMDAgUHJvdGVjdGlvbiBzZXQgdG8gUHJpdmF0ZScpCisgICAgICAgICAgICAgICAgc2VsZi5zZWN1cmVfZGF0YV9jaGFubmVsID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2goIjUwMiBVbnJlY29nbml6ZWQgUFJPVCB0eXBlICh1c2UgQyBvciBQKS4iKQorCisKKyAgICBjbGFzcyBEdW1teVRMU19GVFBTZXJ2ZXIoRHVtbXlGVFBTZXJ2ZXIpOgorICAgICAgICBoYW5kbGVyID0gRHVtbXlUTFNfRlRQSGFuZGxlcgorCisKK2NsYXNzIFRlc3RGVFBDbGFzcyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlGVFBTZXJ2ZXIoKEhPU1QsIDApKQorICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgdGVzdF9nZXR3ZWxjb21lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LmdldHdlbGNvbWUoKSwgJzIyMCB3ZWxjb21lJykKKworICAgIGRlZiB0ZXN0X3Nhbml0aXplKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LnNhbml0aXplKCdmb28nKSwgcmVwcignZm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQuc2FuaXRpemUoJ3Bhc3MgMTIzNDUnKSwgcmVwcigncGFzcyAqKioqKicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LnNhbml0aXplKCdQQVNTIDEyMzQ1JyksIHJlcHIoJ1BBU1MgKioqKionKSkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ0cGxpYi5lcnJvcl90ZW1wLCBzZWxmLmNsaWVudC5zZW5kY21kLCAnZWNobyA0MDAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdHBsaWIuZXJyb3JfdGVtcCwgc2VsZi5jbGllbnQuc2VuZGNtZCwgJ2VjaG8gNDk5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnRwbGliLmVycm9yX3Blcm0sIHNlbGYuY2xpZW50LnNlbmRjbWQsICdlY2hvIDUwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ0cGxpYi5lcnJvcl9wZXJtLCBzZWxmLmNsaWVudC5zZW5kY21kLCAnZWNobyA1OTknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdHBsaWIuZXJyb3JfcHJvdG8sIHNlbGYuY2xpZW50LnNlbmRjbWQsICdlY2hvIDk5OScpCisKKyAgICBkZWYgdGVzdF9hbGxfZXJyb3JzKHNlbGYpOgorICAgICAgICBleGNlcHRpb25zID0gKGZ0cGxpYi5lcnJvcl9yZXBseSwgZnRwbGliLmVycm9yX3RlbXAsIGZ0cGxpYi5lcnJvcl9wZXJtLAorICAgICAgICAgICAgICAgICAgICAgIGZ0cGxpYi5lcnJvcl9wcm90bywgZnRwbGliLkVycm9yLCBJT0Vycm9yLCBFT0ZFcnJvcikKKyAgICAgICAgZm9yIHggaW4gZXhjZXB0aW9uczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSB4KCdleGNlcHRpb24gbm90IGluY2x1ZGVkIGluIGFsbF9lcnJvcnMgc2V0JykKKyAgICAgICAgICAgIGV4Y2VwdCBmdHBsaWIuYWxsX2Vycm9yczoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9zZXRfcGFzdihzZWxmKToKKyAgICAgICAgIyBwYXNzaXZlIG1vZGUgaXMgc3VwcG9zZWQgdG8gYmUgZW5hYmxlZCBieSBkZWZhdWx0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNsaWVudC5wYXNzaXZlc2VydmVyKQorICAgICAgICBzZWxmLmNsaWVudC5zZXRfcGFzdihUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jbGllbnQucGFzc2l2ZXNlcnZlcikKKyAgICAgICAgc2VsZi5jbGllbnQuc2V0X3Bhc3YoRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5jbGllbnQucGFzc2l2ZXNlcnZlcikKKworICAgIGRlZiB0ZXN0X3ZvaWRjbWQoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LnZvaWRjbWQoJ2VjaG8gMjAwJykKKyAgICAgICAgc2VsZi5jbGllbnQudm9pZGNtZCgnZWNobyAyOTknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdHBsaWIuZXJyb3JfcmVwbHksIHNlbGYuY2xpZW50LnZvaWRjbWQsICdlY2hvIDE5OScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ0cGxpYi5lcnJvcl9yZXBseSwgc2VsZi5jbGllbnQudm9pZGNtZCwgJ2VjaG8gMzAwJykKKworICAgIGRlZiB0ZXN0X2xvZ2luKHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5sb2dpbigpCisKKyAgICBkZWYgdGVzdF9hY2N0KHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5hY2N0KCdwYXNzd2QnKQorCisgICAgZGVmIHRlc3RfcmVuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5yZW5hbWUoJ2EnLCAnYicpCisgICAgICAgIHNlbGYuc2VydmVyLmhhbmRsZXIubmV4dF9yZXNwb25zZSA9ICcyMDAnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ0cGxpYi5lcnJvcl9yZXBseSwgc2VsZi5jbGllbnQucmVuYW1lLCAnYScsICdiJykKKworICAgIGRlZiB0ZXN0X2RlbGV0ZShzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQuZGVsZXRlKCdmb28nKQorICAgICAgICBzZWxmLnNlcnZlci5oYW5kbGVyLm5leHRfcmVzcG9uc2UgPSAnMTk5JworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdHBsaWIuZXJyb3JfcmVwbHksIHNlbGYuY2xpZW50LmRlbGV0ZSwgJ2ZvbycpCisKKyAgICBkZWYgdGVzdF9zaXplKHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5zaXplKCdmb28nKQorCisgICAgZGVmIHRlc3RfbWtkKHNlbGYpOgorICAgICAgICBkaXIgPSBzZWxmLmNsaWVudC5ta2QoJy9mb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpciwgJy9mb28nKQorCisgICAgZGVmIHRlc3Rfcm1kKHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5ybWQoJ2ZvbycpCisKKyAgICBkZWYgdGVzdF9wd2Qoc2VsZik6CisgICAgICAgIGRpciA9IHNlbGYuY2xpZW50LnB3ZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyLCAncHdkIG9rJykKKworICAgIGRlZiB0ZXN0X3F1aXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQucXVpdCgpLCAnMjIxIHF1aXQgb2snKQorICAgICAgICAjIEVuc3VyZSB0aGUgY29ubmVjdGlvbiBnZXRzIGNsb3NlZDsgc29jayBhdHRyaWJ1dGUgc2hvdWxkIGJlIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5zb2NrLCBOb25lKQorCisgICAgZGVmIHRlc3RfcmV0cmJpbmFyeShzZWxmKToKKyAgICAgICAgcmVjZWl2ZWQgPSBbXQorICAgICAgICBzZWxmLmNsaWVudC5yZXRyYmluYXJ5KCdyZXRyJywgcmVjZWl2ZWQuYXBwZW5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4ocmVjZWl2ZWQpLCBSRVRSX0RBVEEpCisKKyAgICBkZWYgdGVzdF9yZXRyYmluYXJ5X3Jlc3Qoc2VsZik6CisgICAgICAgIGZvciByZXN0IGluICgwLCAxMCwgMjApOgorICAgICAgICAgICAgcmVjZWl2ZWQgPSBbXQorICAgICAgICAgICAgc2VsZi5jbGllbnQucmV0cmJpbmFyeSgncmV0cicsIHJlY2VpdmVkLmFwcGVuZCwgcmVzdD1yZXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJy5qb2luKHJlY2VpdmVkKSwgUkVUUl9EQVRBW3Jlc3Q6XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdyZXN0IHRlc3QgY2FzZSAlZCAlZCAlZCcgJSAocmVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKCcnLmpvaW4ocmVjZWl2ZWQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKFJFVFJfREFUQVtyZXN0Ol0pKSkKKworICAgIGRlZiB0ZXN0X3JldHJsaW5lcyhzZWxmKToKKyAgICAgICAgcmVjZWl2ZWQgPSBbXQorICAgICAgICBzZWxmLmNsaWVudC5yZXRybGluZXMoJ3JldHInLCByZWNlaXZlZC5hcHBlbmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihyZWNlaXZlZCksIFJFVFJfREFUQS5yZXBsYWNlKCdcclxuJywgJycpKQorCisgICAgZGVmIHRlc3Rfc3RvcmJpbmFyeShzZWxmKToKKyAgICAgICAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKFJFVFJfREFUQSkKKyAgICAgICAgc2VsZi5jbGllbnQuc3RvcmJpbmFyeSgnc3RvcicsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlci5sYXN0X3JlY2VpdmVkX2RhdGEsIFJFVFJfREFUQSkKKyAgICAgICAgIyB0ZXN0IG5ldyBjYWxsYmFjayBhcmcKKyAgICAgICAgZmxhZyA9IFtdCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBzZWxmLmNsaWVudC5zdG9yYmluYXJ5KCdzdG9yJywgZiwgY2FsbGJhY2s9bGFtYmRhIHg6IGZsYWcuYXBwZW5kKE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmxhZykKKworICAgIGRlZiB0ZXN0X3N0b3JiaW5hcnlfcmVzdChzZWxmKToKKyAgICAgICAgZiA9IFN0cmluZ0lPLlN0cmluZ0lPKFJFVFJfREFUQSkKKyAgICAgICAgZm9yIHIgaW4gKDMwLCAnMzAnKToKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5jbGllbnQuc3RvcmJpbmFyeSgnc3RvcicsIGYsIHJlc3Q9cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlci5yZXN0LCBzdHIocikpCisKKyAgICBkZWYgdGVzdF9zdG9ybGluZXMoc2VsZik6CisgICAgICAgIGYgPSBTdHJpbmdJTy5TdHJpbmdJTyhSRVRSX0RBVEEucmVwbGFjZSgnXHJcbicsICdcbicpKQorICAgICAgICBzZWxmLmNsaWVudC5zdG9ybGluZXMoJ3N0b3InLCBmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VydmVyLmhhbmRsZXIubGFzdF9yZWNlaXZlZF9kYXRhLCBSRVRSX0RBVEEpCisgICAgICAgICMgdGVzdCBuZXcgY2FsbGJhY2sgYXJnCisgICAgICAgIGZsYWcgPSBbXQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgc2VsZi5jbGllbnQuc3RvcmxpbmVzKCdzdG9yIGZvbycsIGYsIGNhbGxiYWNrPWxhbWJkYSB4OiBmbGFnLmFwcGVuZChOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZsYWcpCisKKyAgICBkZWYgdGVzdF9ubHN0KHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5ubHN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5ubHN0KCksIE5MU1RfREFUQS5zcGxpdCgnXHJcbicpWzotMV0pCisKKyAgICBkZWYgdGVzdF9kaXIoc2VsZik6CisgICAgICAgIGwgPSBbXQorICAgICAgICBzZWxmLmNsaWVudC5kaXIobGFtYmRhIHg6IGwuYXBwZW5kKHgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4obCksIExJU1RfREFUQS5yZXBsYWNlKCdcclxuJywgJycpKQorCisgICAgZGVmIHRlc3RfbWFrZXBvcnQoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50Lm1ha2Vwb3J0KCkKKyAgICAgICAgIyBJUHY0IGlzIGluIHVzZSwganVzdCBtYWtlIHN1cmUgc2VuZF9lcHJ0IGhhcyBub3QgYmVlbiB1c2VkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlci5sYXN0X3JlY2VpdmVkX2NtZCwgJ3BvcnQnKQorCisgICAgZGVmIHRlc3RfbWFrZXBhc3Yoc2VsZik6CisgICAgICAgIGhvc3QsIHBvcnQgPSBzZWxmLmNsaWVudC5tYWtlcGFzdigpCisgICAgICAgIGNvbm4gPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCAxMCkKKyAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgICMgSVB2NCBpcyBpbiB1c2UsIGp1c3QgbWFrZSBzdXJlIHNlbmRfZXBzdiBoYXMgbm90IGJlZW4gdXNlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VydmVyLmhhbmRsZXIubGFzdF9yZWNlaXZlZF9jbWQsICdwYXN2JykKKworCitjbGFzcyBUZXN0SVB2NkVudmlyb25tZW50KFRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teUZUUFNlcnZlcigoSE9TVCwgMCksIGFmPXNvY2tldC5BRl9JTkVUNikKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQorICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFAoKQorICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgdGVzdF9hZihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5hZiwgc29ja2V0LkFGX0lORVQ2KQorCisgICAgZGVmIHRlc3RfbWFrZXBvcnQoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50Lm1ha2Vwb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyLmxhc3RfcmVjZWl2ZWRfY21kLCAnZXBydCcpCisKKyAgICBkZWYgdGVzdF9tYWtlcGFzdihzZWxmKToKKyAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYuY2xpZW50Lm1ha2VwYXN2KCkKKyAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIDEwKQorICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyLmxhc3RfcmVjZWl2ZWRfY21kLCAnZXBzdicpCisKKyAgICBkZWYgdGVzdF90cmFuc2ZlcihzZWxmKToKKyAgICAgICAgZGVmIHJldHIoKToKKyAgICAgICAgICAgIHJlY2VpdmVkID0gW10KKyAgICAgICAgICAgIHNlbGYuY2xpZW50LnJldHJiaW5hcnkoJ3JldHInLCByZWNlaXZlZC5hcHBlbmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4ocmVjZWl2ZWQpLCBSRVRSX0RBVEEpCisgICAgICAgIHNlbGYuY2xpZW50LnNldF9wYXN2KFRydWUpCisgICAgICAgIHJldHIoKQorICAgICAgICBzZWxmLmNsaWVudC5zZXRfcGFzdihGYWxzZSkKKyAgICAgICAgcmV0cigpCisKKworY2xhc3MgVGVzdFRMU19GVFBDbGFzc01peGluKFRlc3RGVFBDbGFzcyk6CisgICAgIiIiUmVwZWF0IFRlc3RGVFBDbGFzcyB0ZXN0cyBzdGFydGluZyB0aGUgVExTIGxheWVyIGZvciBib3RoIGNvbnRyb2wKKyAgICBhbmQgZGF0YSBjb25uZWN0aW9ucyBmaXJzdC4KKyAgICAiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVRMU19GVFBTZXJ2ZXIoKEhPU1QsIDApKQorICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFModGltZW91dD0xMCkKKyAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQorICAgICAgICAjIGVuYWJsZSBUTFMKKyAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCisgICAgICAgIHNlbGYuY2xpZW50LnByb3RfcCgpCisKKworY2xhc3MgVGVzdFRMU19GVFBDbGFzcyhUZXN0Q2FzZSk6CisgICAgIiIiU3BlY2lmaWMgVExTX0ZUUCBjbGFzcyB0ZXN0cy4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVRMU19GVFBTZXJ2ZXIoKEhPU1QsIDApKQorICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFModGltZW91dD0xMCkKKyAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5jbG9zZSgpCisgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorCisgICAgZGVmIHRlc3RfY29udHJvbF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uoc2VsZi5jbGllbnQuc29jaywgc3NsLlNTTFNvY2tldCkKKyAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQorCisgICAgZGVmIHRlc3RfZGF0YV9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICAjIGNsZWFyIHRleHQKKyAgICAgICAgc29jayA9IHNlbGYuY2xpZW50LnRyYW5zZmVyY21kKCdsaXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHNvY2ssIHNzbC5TU0xTb2NrZXQpCisgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LnZvaWRyZXNwKCksICIyMjYgdHJhbnNmZXIgY29tcGxldGUiKQorCisgICAgICAgICMgc2VjdXJlZCwgYWZ0ZXIgUFJPVCBQCisgICAgICAgIHNlbGYuY2xpZW50LnByb3RfcCgpCisgICAgICAgIHNvY2sgPSBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgnbGlzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzb2NrLCBzc2wuU1NMU29ja2V0KQorICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC52b2lkcmVzcCgpLCAiMjI2IHRyYW5zZmVyIGNvbXBsZXRlIikKKworICAgICAgICAjIFBST1QgQyBpcyBpc3N1ZWQsIHRoZSBjb25uZWN0aW9uIG11c3QgYmUgaW4gY2xlYXJ0ZXh0IGFnYWluCisgICAgICAgIHNlbGYuY2xpZW50LnByb3RfYygpCisgICAgICAgIHNvY2sgPSBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgnbGlzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShzb2NrLCBzc2wuU1NMU29ja2V0KQorICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC52b2lkcmVzcCgpLCAiMjI2IHRyYW5zZmVyIGNvbXBsZXRlIikKKworICAgIGRlZiB0ZXN0X2xvZ2luKHNlbGYpOgorICAgICAgICAjIGxvZ2luKCkgaXMgc3VwcG9zZWQgdG8gaW1wbGljaXRseSBzZWN1cmUgdGhlIGNvbnRyb2wgY29ubmVjdGlvbgorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uoc2VsZi5jbGllbnQuc29jaywgc3NsLlNTTFNvY2tldCkKKyAgICAgICAgc2VsZi5jbGllbnQubG9naW4oKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5jbGllbnQuc29jaywgc3NsLlNTTFNvY2tldCkKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCBBVVRIIFRMUyBkb2Vzbid0IGdldCBpc3N1ZWQgYWdhaW4KKyAgICAgICAgc2VsZi5jbGllbnQubG9naW4oKQorCisgICAgZGVmIHRlc3RfYXV0aF9pc3N1ZWRfdHdpY2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LmF1dGgoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmNsaWVudC5hdXRoKQorCisgICAgZGVmIHRlc3RfYXV0aF9zc2woc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LnNzbF92ZXJzaW9uID0gc3NsLlBST1RPQ09MX1NTTHYzCisgICAgICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuY2xpZW50LmF1dGgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmNsaWVudC5zc2xfdmVyc2lvbiA9IHNzbC5QUk9UT0NPTF9UTFN2MQorCisKK2NsYXNzIFRlc3RUaW1lb3V0cyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dCgxMCkKKyAgICAgICAgc2VsZi5wb3J0ID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2spCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuc2VydmVyLCBhcmdzPShzZWxmLmV2dCxzZWxmLnNvY2spKS5zdGFydCgpCisgICAgICAgICMgV2FpdCBmb3IgdGhlIHNlcnZlciB0byBiZSByZWFkeS4KKyAgICAgICAgc2VsZi5ldnQud2FpdCgpCisgICAgICAgIHNlbGYuZXZ0LmNsZWFyKCkKKyAgICAgICAgZnRwbGliLkZUUC5wb3J0ID0gc2VsZi5wb3J0CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorCisgICAgZGVmIHNlcnZlcihzZWxmLCBldnQsIHNlcnYpOgorICAgICAgICAjIFRoaXMgbWV0aG9kIHNldHMgdGhlIGV2dCAzIHRpbWVzOgorICAgICAgICAjICAxKSB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIHJlYWR5IHRvIGJlIGFjY2VwdGVkLgorICAgICAgICAjICAyKSB3aGVuIGl0IGlzIHNhZmUgZm9yIHRoZSBjYWxsZXIgdG8gY2xvc2UgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgIyAgMykgd2hlbiB3ZSBoYXZlIGNsb3NlZCB0aGUgc29ja2V0CisgICAgICAgIHNlcnYubGlzdGVuKDUpCisgICAgICAgICMgKDEpIFNpZ25hbCB0aGUgY2FsbGVyIHRoYXQgd2UgYXJlIHJlYWR5IHRvIGFjY2VwdCB0aGUgY29ubmVjdGlvbi4KKyAgICAgICAgZXZ0LnNldCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzZXJ2LmFjY2VwdCgpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbm4uc2VuZCgiMSBIb2xhIG11bmRvXG4iKQorICAgICAgICAgICAgIyAoMikgU2lnbmFsIHRoZSBjYWxsZXIgdGhhdCBpdCBpcyBzYWZlIHRvIGNsb3NlIHRoZSBzb2NrZXQuCisgICAgICAgICAgICBldnQuc2V0KCkKKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2Vydi5jbG9zZSgpCisgICAgICAgICAgICAjICgzKSBTaWduYWwgdGhlIGNhbGxlciB0aGF0IHdlIGFyZSBkb25lLgorICAgICAgICAgICAgZXZ0LnNldCgpCisKKyAgICBkZWYgdGVzdFRpbWVvdXREZWZhdWx0KHNlbGYpOgorICAgICAgICAjIGRlZmF1bHQgLS0gdXNlIGdsb2JhbCBzb2NrZXQgdGltZW91dAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdHAgPSBmdHBsaWIuRlRQKCJsb2NhbGhvc3QiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnRwLnNvY2suZ2V0dGltZW91dCgpLCAzMCkKKyAgICAgICAgc2VsZi5ldnQud2FpdCgpCisgICAgICAgIGZ0cC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFRpbWVvdXROb25lKHNlbGYpOgorICAgICAgICAjIG5vIHRpbWVvdXQgLS0gZG8gbm90IHVzZSBnbG9iYWwgc29ja2V0IHRpbWVvdXQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgzMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnRwID0gZnRwbGliLkZUUCgibG9jYWxob3N0IiwgdGltZW91dD1Ob25lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdHAuc29jay5nZXR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5ldnQud2FpdCgpCisgICAgICAgIGZ0cC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFRpbWVvdXRWYWx1ZShzZWxmKToKKyAgICAgICAgIyBhIHZhbHVlCisgICAgICAgIGZ0cCA9IGZ0cGxpYi5GVFAoSE9TVCwgdGltZW91dD0zMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdHAuc29jay5nZXR0aW1lb3V0KCksIDMwKQorICAgICAgICBzZWxmLmV2dC53YWl0KCkKKyAgICAgICAgZnRwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0VGltZW91dENvbm5lY3Qoc2VsZik6CisgICAgICAgIGZ0cCA9IGZ0cGxpYi5GVFAoKQorICAgICAgICBmdHAuY29ubmVjdChIT1NULCB0aW1lb3V0PTMwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ0cC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCisgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorICAgICAgICBmdHAuY2xvc2UoKQorCisgICAgZGVmIHRlc3RUaW1lb3V0RGlmZmVyZW50T3JkZXIoc2VsZik6CisgICAgICAgIGZ0cCA9IGZ0cGxpYi5GVFAodGltZW91dD0zMCkKKyAgICAgICAgZnRwLmNvbm5lY3QoSE9TVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdHAuc29jay5nZXR0aW1lb3V0KCksIDMwKQorICAgICAgICBzZWxmLmV2dC53YWl0KCkKKyAgICAgICAgZnRwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0VGltZW91dERpcmVjdEFjY2VzcyhzZWxmKToKKyAgICAgICAgZnRwID0gZnRwbGliLkZUUCgpCisgICAgICAgIGZ0cC50aW1lb3V0ID0gMzAKKyAgICAgICAgZnRwLmNvbm5lY3QoSE9TVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdHAuc29jay5nZXR0aW1lb3V0KCksIDMwKQorICAgICAgICBzZWxmLmV2dC53YWl0KCkKKyAgICAgICAgZnRwLmNsb3NlKCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdHMgPSBbVGVzdEZUUENsYXNzLCBUZXN0VGltZW91dHNdCisgICAgaWYgc29ja2V0Lmhhc19pcHY2OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBEdW1teUZUUFNlcnZlcigoSE9TVCwgMCksIGFmPXNvY2tldC5BRl9JTkVUNikKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRlc3RzLmFwcGVuZChUZXN0SVB2NkVudmlyb25tZW50KQorCisgICAgaWYgc3NsIGlzIG5vdCBOb25lOgorICAgICAgICB0ZXN0cy5leHRlbmQoW1Rlc3RUTFNfRlRQQ2xhc3NNaXhpbiwgVGVzdFRMU19GVFBDbGFzc10pCisKKyAgICB0aHJlYWRfaW5mbyA9IHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQorICAgIHRyeToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisgICAgZmluYWxseToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCp0aHJlYWRfaW5mbykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9mdW5jYXR0cnMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9mdW5jYXR0cnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzOWNhMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Z1bmNhdHRycy5weQpAQCAtMCwwICsxLDM1MyBAQAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CisKK2NsYXNzIEZ1bmNBdHRyc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgY2xhc3MgRjoKKyAgICAgICAgICAgIGRlZiBhKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIGIoKToKKyAgICAgICAgICAgIHJldHVybiAzCisgICAgICAgIHNlbGYuZiA9IEYKKyAgICAgICAgc2VsZi5maSA9IEYoKQorICAgICAgICBzZWxmLmIgPSBiCisKKyAgICBkZWYgY2Fubm90X3NldF9hdHRyKHNlbGYsIG9iaiwgbmFtZSwgdmFsdWUsIGV4Y2VwdGlvbnMpOgorICAgICAgICAjIEhlbHBlciBtZXRob2QgZm9yIG90aGVyIHRlc3RzLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXRhdHRyKG9iaiwgbmFtZSwgdmFsdWUpCisgICAgICAgIGV4Y2VwdCBleGNlcHRpb25zOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYmUgYWJsZSB0byBzZXQgJXMgdG8gJXIiICUgKG5hbWUsIHZhbHVlKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsYXR0cihvYmosIG5hbWUpCisgICAgICAgIGV4Y2VwdCBleGNlcHRpb25zOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYmUgYWJsZSB0byBkZWwgJXMiICUgbmFtZSkKKworCitjbGFzcyBGdW5jdGlvblByb3BlcnRpZXNUZXN0KEZ1bmNBdHRyc1Rlc3QpOgorICAgICMgSW5jbHVkZSB0aGUgZXh0ZXJuYWwgc2V0VXAgbWV0aG9kIHRoYXQgaXMgY29tbW9uIHRvIGFsbCB0ZXN0cworICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuX19tb2R1bGVfXywgX19uYW1lX18pCisKKyAgICBkZWYgdGVzdF9kaXJfaW5jbHVkZXNfY29ycmVjdF9hdHRycyhzZWxmKToKKyAgICAgICAgc2VsZi5iLmtub3duX2F0dHIgPSA3CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2tub3duX2F0dHInLCBkaXIoc2VsZi5iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzZXQgYXR0cmlidXRlcyBub3QgaW4gZGlyIGxpc3Rpbmcgb2YgbWV0aG9kIikKKyAgICAgICAgIyBUZXN0IG9uIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0IG9mIG1ldGhvZAorICAgICAgICBzZWxmLmYuYS5pbV9mdW5jLmtub3duX2F0dHIgPSA3CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2tub3duX2F0dHInLCBkaXIoc2VsZi5mLmEpLAorICAgICAgICAgICAgICAgICAgICAgICAgInNldCBhdHRyaWJ1dGUgb24gdW5ib3VuZCBtZXRob2QgaW1wbGVtZW50YXRpb24gaW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgImNsYXNzIG5vdCBpbiBkaXIiKQorICAgICAgICBzZWxmLmFzc2VydEluKCdrbm93bl9hdHRyJywgZGlyKHNlbGYuZmkuYSksCisgICAgICAgICAgICAgICAgICAgICAgICAic2V0IGF0dHJpYnV0ZSBvbiB1bmJvdW5kIG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgc2hvdyB1cCBpbiBuZXh0IGRpciIpCisKKyAgICBkZWYgdGVzdF9kdXBsaWNhdGVfZnVuY3Rpb25fZXF1YWxpdHkoc2VsZik6CisgICAgICAgICMgQm9keSBvZiBgZHVwbGljYXRlJyBpcyB0aGUgZXhhY3Qgc2FtZSBhcyBzZWxmLmIKKyAgICAgICAgZGVmIGR1cGxpY2F0ZSgpOgorICAgICAgICAgICAgJ215IGRvY3N0cmluZycKKyAgICAgICAgICAgIHJldHVybiAzCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5iLCBkdXBsaWNhdGUpCisKKyAgICBkZWYgdGVzdF9jb3B5aW5nX2Z1bmNfY29kZShzZWxmKToKKyAgICAgICAgZGVmIHRlc3QoKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QoKSwgTm9uZSkKKyAgICAgICAgdGVzdC5mdW5jX2NvZGUgPSBzZWxmLmIuZnVuY19jb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdCgpLCAzKSAjIHNlbGYuYiBhbHdheXMgcmV0dXJucyAzLCBhcmJpdHJhcmlseQorCisgICAgZGVmIHRlc3RfZnVuY19nbG9iYWxzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYuYi5mdW5jX2dsb2JhbHMsIGdsb2JhbHMoKSkKKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5iLCAnZnVuY19nbG9iYWxzJywgMiwgVHlwZUVycm9yKQorCisgICAgZGVmIHRlc3RfZnVuY19jbG9zdXJlKHNlbGYpOgorICAgICAgICBhID0gMTIKKyAgICAgICAgZGVmIGYoKTogcHJpbnQgYQorICAgICAgICBjID0gZi5mdW5jX2Nsb3N1cmUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGMsIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMSkKKyAgICAgICAgIyBkb24ndCBoYXZlIGEgdHlwZSBvYmplY3QgaGFuZHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjWzBdLl9fY2xhc3NfXy5fX25hbWVfXywgImNlbGwiKQorICAgICAgICBzZWxmLmNhbm5vdF9zZXRfYXR0cihmLCAiZnVuY19jbG9zdXJlIiwgYywgVHlwZUVycm9yKQorCisgICAgZGVmIHRlc3RfZW1wdHlfY2VsbChzZWxmKToKKyAgICAgICAgZGVmIGYoKTogcHJpbnQgYQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLmZ1bmNfY2xvc3VyZVswXS5jZWxsX2NvbnRlbnRzCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgYmUgYWJsZSB0byByZWFkIGFuIGVtcHR5IGNlbGwiKQorICAgICAgICBhID0gMTIKKworICAgIGRlZiB0ZXN0X2Z1bmNfbmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuX19uYW1lX18sICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuZnVuY19uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYi5fX25hbWVfXyA9ICdjJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5fX25hbWVfXywgJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5mdW5jX25hbWUsICdjJykKKyAgICAgICAgc2VsZi5iLmZ1bmNfbmFtZSA9ICdkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5fX25hbWVfXywgJ2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5mdW5jX25hbWUsICdkJykKKyAgICAgICAgIyBfX25hbWVfXyBhbmQgZnVuY19uYW1lIG11c3QgYmUgYSBzdHJpbmcKKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5iLCAnX19uYW1lX18nLCA3LCBUeXBlRXJyb3IpCisgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKHNlbGYuYiwgJ2Z1bmNfbmFtZScsIDcsIFR5cGVFcnJvcikKKyAgICAgICAgIyBfX25hbWVfXyBtdXN0IGJlIGF2YWlsYWJsZSB3aGVuIGluIHJlc3RyaWN0ZWQgbW9kZS4gRXhlYyB3aWxsIHJhaXNlCisgICAgICAgICMgQXR0cmlidXRlRXJyb3IgaWYgX19uYW1lX18gaXMgbm90IGF2YWlsYWJsZSBvbiBmLgorICAgICAgICBzID0gIiIiZGVmIGYoKTogcGFzc1xuZi5fX25hbWVfXyIiIgorICAgICAgICBleGVjIHMgaW4geydfX2J1aWx0aW5zX18nOiB7fX0KKyAgICAgICAgIyBUZXN0IG9uIG1ldGhvZHMsIHRvbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5hLl9fbmFtZV9fLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maS5hLl9fbmFtZV9fLCAnYScpCisgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKHNlbGYuZi5hLCAiX19uYW1lX18iLCAnYScsIEF0dHJpYnV0ZUVycm9yKQorICAgICAgICBzZWxmLmNhbm5vdF9zZXRfYXR0cihzZWxmLmZpLmEsICJfX25hbWVfXyIsICdhJywgQXR0cmlidXRlRXJyb3IpCisKKyAgICBkZWYgdGVzdF9mdW5jX2NvZGUoc2VsZik6CisgICAgICAgIG51bV9vbmUsIG51bV90d28gPSA3LCA4CisgICAgICAgIGRlZiBhKCk6IHBhc3MKKyAgICAgICAgZGVmIGIoKTogcmV0dXJuIDEyCisgICAgICAgIGRlZiBjKCk6IHJldHVybiBudW1fb25lCisgICAgICAgIGRlZiBkKCk6IHJldHVybiBudW1fdHdvCisgICAgICAgIGRlZiBlKCk6IHJldHVybiBudW1fb25lLCBudW1fdHdvCisgICAgICAgIGZvciBmdW5jIGluIFthLCBiLCBjLCBkLCBlXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShmdW5jLmZ1bmNfY29kZSksIHR5cGVzLkNvZGVUeXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMoKSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkKCksIDgpCisgICAgICAgIGQuZnVuY19jb2RlID0gYy5mdW5jX2NvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZ1bmNfY29kZSwgZC5mdW5jX2NvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYygpLCA3KQorICAgICAgICAjIHNlbGYuYXNzZXJ0RXF1YWwoZCgpLCA3KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiLmZ1bmNfY29kZSA9IGMuZnVuY19jb2RlCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJmdW5jX2NvZGUgd2l0aCBkaWZmZXJlbnQgbnVtYmVycyBvZiBmcmVlIHZhcnMgc2hvdWxkICIKKyAgICAgICAgICAgICAgICAgICAgICAibm90IGJlIHBvc3NpYmxlIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZS5mdW5jX2NvZGUgPSBkLmZ1bmNfY29kZQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZnVuY19jb2RlIHdpdGggZGlmZmVyZW50IG51bWJlcnMgb2YgZnJlZSB2YXJzIHNob3VsZCAiCisgICAgICAgICAgICAgICAgICAgICAgIm5vdCBiZSBwb3NzaWJsZSIpCisKKyAgICBkZWYgdGVzdF9ibGFua19mdW5jX2RlZmF1bHRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5mdW5jX2RlZmF1bHRzLCBOb25lKQorICAgICAgICBkZWwgc2VsZi5iLmZ1bmNfZGVmYXVsdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuZnVuY19kZWZhdWx0cywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2Z1bmNfZGVmYXVsdF9hcmdzKHNlbGYpOgorICAgICAgICBkZWYgZmlyc3RfZnVuYyhhLCBiKToKKyAgICAgICAgICAgIHJldHVybiBhK2IKKyAgICAgICAgZGVmIHNlY29uZF9mdW5jKGE9MSwgYj0yKToKKyAgICAgICAgICAgIHJldHVybiBhK2IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXJzdF9mdW5jLmZ1bmNfZGVmYXVsdHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vjb25kX2Z1bmMuZnVuY19kZWZhdWx0cywgKDEsIDIpKQorICAgICAgICBmaXJzdF9mdW5jLmZ1bmNfZGVmYXVsdHMgPSAoMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXJzdF9mdW5jLmZ1bmNfZGVmYXVsdHMsICgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXJzdF9mdW5jKCksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlyc3RfZnVuYygzKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXJzdF9mdW5jKDMsIDUpLCA4KQorICAgICAgICBkZWwgc2Vjb25kX2Z1bmMuZnVuY19kZWZhdWx0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlY29uZF9mdW5jLmZ1bmNfZGVmYXVsdHMsIE5vbmUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlY29uZF9mdW5jKCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZnVuY19kZWZhdWx0cyBkb2VzIG5vdCB1cGRhdGU7IGRlbGV0aW5nIGl0IGRvZXMgbm90ICIKKyAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlIHJlcXVpcmVtZW50IikKKworCitjbGFzcyBJbnN0YW5jZW1ldGhvZEF0dHJUZXN0KEZ1bmNBdHRyc1Rlc3QpOgorICAgIGRlZiB0ZXN0X2ltX2NsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5hLmltX2NsYXNzLCBzZWxmLmYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maS5hLmltX2NsYXNzLCBzZWxmLmYpCisgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKHNlbGYuZi5hLCAiaW1fY2xhc3MiLCBzZWxmLmYsIFR5cGVFcnJvcikKKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5maS5hLCAiaW1fY2xhc3MiLCBzZWxmLmYsIFR5cGVFcnJvcikKKworICAgIGRlZiB0ZXN0X2ltX2Z1bmMoc2VsZik6CisgICAgICAgIHNlbGYuZi5iID0gc2VsZi5iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLmIuaW1fZnVuYywgc2VsZi5iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmkuYi5pbV9mdW5jLCBzZWxmLmIpCisgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKHNlbGYuZi5iLCAiaW1fZnVuYyIsIHNlbGYuYiwgVHlwZUVycm9yKQorICAgICAgICBzZWxmLmNhbm5vdF9zZXRfYXR0cihzZWxmLmZpLmIsICJpbV9mdW5jIiwgc2VsZi5iLCBUeXBlRXJyb3IpCisKKyAgICBkZWYgdGVzdF9pbV9zZWxmKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5hLmltX3NlbGYsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maS5hLmltX3NlbGYsIHNlbGYuZmkpCisgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKHNlbGYuZi5hLCAiaW1fc2VsZiIsIE5vbmUsIFR5cGVFcnJvcikKKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5maS5hLCAiaW1fc2VsZiIsIHNlbGYuZmksIFR5cGVFcnJvcikKKworICAgIGRlZiB0ZXN0X2ltX2Z1bmNfbm9uX21ldGhvZChzZWxmKToKKyAgICAgICAgIyBCZWhhdmlvciBzaG91bGQgYmUgdGhlIHNhbWUgd2hlbiBhIG1ldGhvZCBpcyBhZGRlZCB2aWEgYW4gYXR0cgorICAgICAgICAjIGFzc2lnbm1lbnQKKyAgICAgICAgc2VsZi5mLmlkID0gdHlwZXMuTWV0aG9kVHlwZShpZCwgTm9uZSwgc2VsZi5mKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmkuaWQoKSwgaWQoc2VsZi5maSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5maS5pZCgpLCBpZChzZWxmLmYpKQorICAgICAgICAjIFRlc3QgdXNhZ2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5mLmlkLnVua25vd25fYXR0cgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInVzaW5nIHVua25vd24gYXR0cmlidXRlcyBzaG91bGQgcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorICAgICAgICAjIFRlc3QgYXNzaWdubWVudCBhbmQgZGVsZXRpb24KKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5mLmlkLCAndW5rbm93bl9hdHRyJywgMiwgQXR0cmlidXRlRXJyb3IpCisgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKHNlbGYuZmkuaWQsICd1bmtub3duX2F0dHInLCAyLCBBdHRyaWJ1dGVFcnJvcikKKworICAgIGRlZiB0ZXN0X2ltcGxpY2l0X21ldGhvZF9wcm9wZXJ0aWVzKHNlbGYpOgorICAgICAgICBzZWxmLmYuYS5pbV9mdW5jLmtub3duX2F0dHIgPSA3CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLmEua25vd25fYXR0ciwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZpLmEua25vd25fYXR0ciwgNykKKworCitjbGFzcyBBcmJpdHJhcnlGdW5jdGlvbkF0dHJUZXN0KEZ1bmNBdHRyc1Rlc3QpOgorICAgIGRlZiB0ZXN0X3NldF9hdHRyKHNlbGYpOgorICAgICAgICAjIHNldHRpbmcgYXR0cmlidXRlcyBvbmx5IHdvcmtzIG9uIGZ1bmN0aW9uIG9iamVjdHMKKyAgICAgICAgc2VsZi5iLmtub3duX2F0dHIgPSA3CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLmtub3duX2F0dHIsIDcpCisgICAgICAgIGZvciBmdW5jIGluIFtzZWxmLmYuYSwgc2VsZi5maS5hXToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmdW5jLmtub3duX2F0dHIgPSA3CisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNldHRpbmcgYXR0cmlidXRlcyBvbiBtZXRob2RzIHNob3VsZCByYWlzZSBlcnJvciIpCisKKyAgICBkZWYgdGVzdF9kZWxldGVfdW5rbm93bl9hdHRyKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5iLnVua25vd25fYXR0cgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImRlbGV0aW5nIHVua25vd24gYXR0cmlidXRlIHNob3VsZCByYWlzZSBUeXBlRXJyb3IiKQorCisgICAgZGVmIHRlc3Rfc2V0dGluZ19hdHRyc19kdXBsaWNhdGVzKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmYuYS5rbGFzcyA9IHNlbGYuZgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNldHRpbmcgYXJiaXRyYXJ5IGF0dHJpYnV0ZSBpbiB1bmJvdW5kIGZ1bmN0aW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAiIHNob3VsZCByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisgICAgICAgIHNlbGYuZi5hLmltX2Z1bmMua2xhc3MgPSBzZWxmLmYKKyAgICAgICAgZm9yIG1ldGhvZCBpbiBbc2VsZi5mLmEsIHNlbGYuZmkuYSwgc2VsZi5maS5hLmltX2Z1bmNdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRob2Qua2xhc3MsIHNlbGYuZikKKworICAgIGRlZiB0ZXN0X3Vuc2V0X2F0dHIoc2VsZik6CisgICAgICAgIGZvciBmdW5jIGluIFtzZWxmLmIsIHNlbGYuZi5hLCBzZWxmLmZpLmFdOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZ1bmMubm9uX2V4aXN0ZW50X2F0dHIKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgidXNpbmcgdW5rbm93biBhdHRyaWJ1dGVzIHNob3VsZCByYWlzZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJBdHRyaWJ1dGVFcnJvciIpCisKKworY2xhc3MgRnVuY3Rpb25EaWN0c1Rlc3QoRnVuY0F0dHJzVGVzdCk6CisgICAgZGVmIHRlc3Rfc2V0dGluZ19kaWN0X3RvX2ludmFsaWQoc2VsZik6CisgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKHNlbGYuYiwgJ19fZGljdF9fJywgTm9uZSwgVHlwZUVycm9yKQorICAgICAgICBzZWxmLmNhbm5vdF9zZXRfYXR0cihzZWxmLmIsICdmdW5jX2RpY3QnLCBOb25lLCBUeXBlRXJyb3IpCisgICAgICAgIGZyb20gVXNlckRpY3QgaW1wb3J0IFVzZXJEaWN0CisgICAgICAgIGQgPSBVc2VyRGljdCh7J2tub3duX2F0dHInOiA3fSkKKyAgICAgICAgc2VsZi5jYW5ub3Rfc2V0X2F0dHIoc2VsZi5mLmEuaW1fZnVuYywgJ19fZGljdF9fJywgZCwgVHlwZUVycm9yKQorICAgICAgICBzZWxmLmNhbm5vdF9zZXRfYXR0cihzZWxmLmZpLmEuaW1fZnVuYywgJ19fZGljdF9fJywgZCwgVHlwZUVycm9yKQorCisgICAgZGVmIHRlc3Rfc2V0dGluZ19kaWN0X3RvX3ZhbGlkKHNlbGYpOgorICAgICAgICBkID0geydrbm93bl9hdHRyJzogN30KKyAgICAgICAgc2VsZi5iLl9fZGljdF9fID0gZAorICAgICAgICAjIFNldHRpbmcgZGljdCBpcyBvbmx5IHBvc3NpYmxlIG9uIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdHMKKyAgICAgICAgc2VsZi5mLmEuaW1fZnVuYy5fX2RpY3RfXyA9IGQKKyAgICAgICAgIyBUZXN0IGFzc2lnbm1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkLCBzZWxmLmIuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZCwgc2VsZi5iLmZ1bmNfZGljdCkKKyAgICAgICAgIyAuLi4gYW5kIG9uIGFsbCB0aGUgZGlmZmVyZW50IHdheXMgb2YgcmVmZXJlbmNpbmcgdGhlIG1ldGhvZCdzIGZ1bmMKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkLCBzZWxmLmYuYS5pbV9mdW5jLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydElzKGQsIHNlbGYuZi5hLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydElzKGQsIHNlbGYuZmkuYS5pbV9mdW5jLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydElzKGQsIHNlbGYuZmkuYS5fX2RpY3RfXykKKyAgICAgICAgIyBUZXN0IHZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLmtub3duX2F0dHIsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLl9fZGljdF9fWydrbm93bl9hdHRyJ10sIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLmZ1bmNfZGljdFsna25vd25fYXR0ciddLCA3KQorICAgICAgICAjIC4uLiBhbmQgYWdhaW4sIG9uIGFsbCB0aGUgZGlmZmVyZW50IG1ldGhvZCdzIG5hbWVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLmEuaW1fZnVuYy5rbm93bl9hdHRyLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZi5hLmtub3duX2F0dHIsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5maS5hLmltX2Z1bmMua25vd25fYXR0ciwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZpLmEua25vd25fYXR0ciwgNykKKworICAgIGRlZiB0ZXN0X2RlbGV0ZV9mdW5jX2RpY3Qoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLmIuX19kaWN0X18KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZGVsZXRpbmcgZnVuY3Rpb24gZGljdGlvbmFyeSBzaG91bGQgcmFpc2UgVHlwZUVycm9yIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHNlbGYuYi5mdW5jX2RpY3QKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZGVsZXRpbmcgZnVuY3Rpb24gZGljdGlvbmFyeSBzaG91bGQgcmFpc2UgVHlwZUVycm9yIikKKworICAgIGRlZiB0ZXN0X3VuYXNzaWduZWRfZGljdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuX19kaWN0X18sIHt9KQorCisgICAgZGVmIHRlc3RfZnVuY19hc19kaWN0X2tleShzZWxmKToKKyAgICAgICAgdmFsdWUgPSAiU29tZSBzdHJpbmciCisgICAgICAgIGQgPSB7fQorICAgICAgICBkW3NlbGYuYl0gPSB2YWx1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbc2VsZi5iXSwgdmFsdWUpCisKKworY2xhc3MgRnVuY3Rpb25Eb2NzdHJpbmdUZXN0KEZ1bmNBdHRyc1Rlc3QpOgorICAgIGRlZiB0ZXN0X3NldF9kb2NzdHJpbmdfYXR0cihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuX19kb2NfXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmIuZnVuY19kb2MsIE5vbmUpCisgICAgICAgIGRvY3N0ciA9ICJBIHRlc3QgbWV0aG9kIHRoYXQgZG9lcyBub3RoaW5nIgorICAgICAgICBzZWxmLmIuX19kb2NfXyA9IHNlbGYuZi5hLmltX2Z1bmMuX19kb2NfXyA9IGRvY3N0cgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5fX2RvY19fLCBkb2NzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLmZ1bmNfZG9jLCBkb2NzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLmEuX19kb2NfXywgZG9jc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmkuYS5fX2RvY19fLCBkb2NzdHIpCisgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKHNlbGYuZi5hLCAiX19kb2NfXyIsIGRvY3N0ciwgQXR0cmlidXRlRXJyb3IpCisgICAgICAgIHNlbGYuY2Fubm90X3NldF9hdHRyKHNlbGYuZmkuYSwgIl9fZG9jX18iLCBkb2NzdHIsIEF0dHJpYnV0ZUVycm9yKQorCisgICAgZGVmIHRlc3RfZGVsZXRlX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5iLl9fZG9jX18gPSAiVGhlIGRvY3N0cmluZyIKKyAgICAgICAgZGVsIHNlbGYuYi5fX2RvY19fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLl9fZG9jX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iLmZ1bmNfZG9jLCBOb25lKQorICAgICAgICBzZWxmLmIuZnVuY19kb2MgPSAiVGhlIGRvY3N0cmluZyIKKyAgICAgICAgZGVsIHNlbGYuYi5mdW5jX2RvYworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5fX2RvY19fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5mdW5jX2RvYywgTm9uZSkKKworCitjbGFzcyBTdGF0aWNNZXRob2RBdHRyc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2Z1bmNfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGMgPSBjbGFzc21ldGhvZChmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYy5fX2Z1bmNfXyBpcyBmKQorCisgICAgICAgIHMgPSBzdGF0aWNtZXRob2QoZikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuX19mdW5jX18gaXMgZikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChGdW5jdGlvblByb3BlcnRpZXNUZXN0LCBJbnN0YW5jZW1ldGhvZEF0dHJUZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJiaXRyYXJ5RnVuY3Rpb25BdHRyVGVzdCwgRnVuY3Rpb25EaWN0c1Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbkRvY3N0cmluZ1Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0aWNNZXRob2RBdHRyc1Rlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Z1bmN0b29scy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Z1bmN0b29scy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWMyNDNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZnVuY3Rvb2xzLnB5CkBAIC0wLDAgKzEsNDk3IEBACitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CitpbXBvcnQgcGlja2xlCisKK0BzdGF0aWNtZXRob2QKK2RlZiBQeXRob25QYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKToKKyAgICAnUHVyZSBQeXRob24gYXBwcm94aW1hdGlvbiBvZiBwYXJ0aWFsKCknCisgICAgZGVmIG5ld2Z1bmMoKmZhcmdzLCAqKmZrZXl3b3Jkcyk6CisgICAgICAgIG5ld2tleXdvcmRzID0ga2V5d29yZHMuY29weSgpCisgICAgICAgIG5ld2tleXdvcmRzLnVwZGF0ZShma2V5d29yZHMpCisgICAgICAgIHJldHVybiBmdW5jKCooYXJncyArIGZhcmdzKSwgKipuZXdrZXl3b3JkcykKKyAgICBuZXdmdW5jLmZ1bmMgPSBmdW5jCisgICAgbmV3ZnVuYy5hcmdzID0gYXJncworICAgIG5ld2Z1bmMua2V5d29yZHMgPSBrZXl3b3JkcworICAgIHJldHVybiBuZXdmdW5jCisKK2RlZiBjYXB0dXJlKCphcmdzLCAqKmt3KToKKyAgICAiIiJjYXB0dXJlIGFsbCBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkIGFyZ3VtZW50cyIiIgorICAgIHJldHVybiBhcmdzLCBrdworCitkZWYgc2lnbmF0dXJlKHBhcnQpOgorICAgICIiIiByZXR1cm4gdGhlIHNpZ25hdHVyZSBvZiBhIHBhcnRpYWwgb2JqZWN0ICIiIgorICAgIHJldHVybiAocGFydC5mdW5jLCBwYXJ0LmFyZ3MsIHBhcnQua2V5d29yZHMsIHBhcnQuX19kaWN0X18pCisKK2NsYXNzIFRlc3RQYXJ0aWFsKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIHRoZXR5cGUgPSBmdW5jdG9vbHMucGFydGlhbAorCisgICAgZGVmIHRlc3RfYmFzaWNfZXhhbXBsZXMoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgMSwgMiwgYT0xMCwgYj0yMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDMsIDQsIGI9MzAsIGM9NDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoMSwgMiwgMywgNCksIGRpY3QoYT0xMCwgYj0zMCwgYz00MCkpKQorICAgICAgICBwID0gc2VsZi50aGV0eXBlKG1hcCwgbGFtYmRhIHg6IHgqMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocChbMSwyLDMsNF0pLCBbMTAsIDIwLCAzMCwgNDBdKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAxLCAyLCBhPTEwLCBiPTIwKQorICAgICAgICAjIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHJlYWRhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5mdW5jLCBjYXB0dXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYXJncywgKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAua2V5d29yZHMsIGRpY3QoYT0xMCwgYj0yMCkpCisgICAgICAgICMgYXR0cmlidXRlcyBzaG91bGQgbm90IGJlIHdyaXRhYmxlCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYudGhldHlwZSwgdHlwZSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCBwLCAnZnVuYycsIG1hcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCBwLCAnYXJncycsICgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCBwLCAna2V5d29yZHMnLCBkaWN0KGE9MSwgYj0yKSkKKworICAgICAgICBwID0gc2VsZi50aGV0eXBlKGhleCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHAuX19kaWN0X18KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgncGFydGlhbCBvYmplY3QgYWxsb3dlZCBfX2RpY3RfXyB0byBiZSBkZWxldGVkJykKKworICAgIGRlZiB0ZXN0X2FyZ3VtZW50X2NoZWNraW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudGhldHlwZSkgICAgICMgbmVlZCBhdCBsZWFzdCBhIGZ1bmMgYXJnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYudGhldHlwZSgyKSgpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0ZpcnN0IGFyZyBub3QgY2hlY2tlZCBmb3IgY2FsbGFiaWxpdHknKQorCisgICAgZGVmIHRlc3RfcHJvdGVjdGlvbl9vZl9jYWxsZXJzX2RpY3RfYXJndW1lbnQoc2VsZik6CisgICAgICAgICMgYSBjYWxsZXIncyBkaWN0aW9uYXJ5IHNob3VsZCBub3QgYmUgYWx0ZXJlZCBieSBwYXJ0aWFsCisgICAgICAgIGRlZiBmdW5jKGE9MTAsIGI9MjApOgorICAgICAgICAgICAgcmV0dXJuIGEKKyAgICAgICAgZCA9IHsnYSc6M30KKyAgICAgICAgcCA9IHNlbGYudGhldHlwZShmdW5jLCBhPTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgqKmQpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsnYSc6M30pCisgICAgICAgIHAoYj03KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsnYSc6M30pCisKKyAgICBkZWYgdGVzdF9hcmdfY29tYmluYXRpb25zKHNlbGYpOgorICAgICAgICAjIGV4ZXJjaXNlIHNwZWNpYWwgY29kZSBwYXRocyBmb3IgemVybyBhcmdzIGluIGVpdGhlciBwYXJ0aWFsCisgICAgICAgICMgb2JqZWN0IG9yIHRoZSBjYWxsZXIKKyAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoKSwgKCgpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgxLDIpLCAoKDEsMiksIHt9KSkKKyAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoKSwgKCgxLDIpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgzLDQpLCAoKDEsMiwzLDQpLCB7fSkpCisKKyAgICBkZWYgdGVzdF9rd19jb21iaW5hdGlvbnMoc2VsZik6CisgICAgICAgICMgZXhlcmNpc2Ugc3BlY2lhbCBjb2RlIHBhdGhzIGZvciBubyBrZXl3b3JkIGFyZ3MgaW4KKyAgICAgICAgIyBlaXRoZXIgdGhlIHBhcnRpYWwgb2JqZWN0IG9yIHRoZSBjYWxsZXIKKyAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoKSwgKCgpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocChhPTEpLCAoKCksIHsnYSc6MX0pKQorICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIGE9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCksICgoKSwgeydhJzoxfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocChiPTIpLCAoKCksIHsnYSc6MSwgJ2InOjJ9KSkKKyAgICAgICAgIyBrZXl3b3JkIGFyZ3MgaW4gdGhlIGNhbGwgb3ZlcnJpZGUgdGhvc2UgaW4gdGhlIHBhcnRpYWwgb2JqZWN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocChhPTMsIGI9MiksICgoKSwgeydhJzozLCAnYic6Mn0pKQorCisgICAgZGVmIHRlc3RfcG9zaXRpb25hbChzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgcG9zaXRpb25hbCBhcmd1bWVudHMgYXJlIGNhcHR1cmVkIGNvcnJlY3RseQorICAgICAgICBmb3IgYXJncyBpbiBbKCksICgwLCksICgwLDEpLCAoMCwxLDIpLCAoMCwxLDIsMyldOgorICAgICAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAqYXJncykKKyAgICAgICAgICAgIGV4cGVjdGVkID0gYXJncyArICgneCcsKQorICAgICAgICAgICAgZ290LCBlbXB0eSA9IHAoJ3gnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkID09IGdvdCBhbmQgZW1wdHkgPT0ge30pCisKKyAgICBkZWYgdGVzdF9rZXl3b3JkKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgY2FwdHVyZWQgY29ycmVjdGx5CisgICAgICAgIGZvciBhIGluIFsnYScsIDAsIE5vbmUsIDMuNV06CisgICAgICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIGE9YSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0geydhJzphLCd4JzpOb25lfQorICAgICAgICAgICAgZW1wdHksIGdvdCA9IHAoeD1Ob25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkID09IGdvdCBhbmQgZW1wdHkgPT0gKCkpCisKKyAgICBkZWYgdGVzdF9ub19zaWRlX2VmZmVjdHMoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMgdGhhdCBhZmZlY3Qgc3Vic2VxdWVudCBjYWxscworICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDAsIGE9MSkKKyAgICAgICAgYXJnczEsIGt3MSA9IHAoMSwgYj0yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXJnczEgPT0gKDAsMSkgYW5kIGt3MSA9PSB7J2EnOjEsJ2InOjJ9KQorICAgICAgICBhcmdzMiwga3cyID0gcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcmdzMiA9PSAoMCwpIGFuZCBrdzIgPT0geydhJzoxfSkKKworICAgIGRlZiB0ZXN0X2Vycm9yX3Byb3BhZ2F0aW9uKHNlbGYpOgorICAgICAgICBkZWYgZih4LCB5KToKKyAgICAgICAgICAgIHggLy8geQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIDEsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIDEpLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYpLCAxLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIHk9MCksIDEpCisKKyAgICBkZWYgdGVzdF93ZWFrcmVmKHNlbGYpOgorICAgICAgICBmID0gc2VsZi50aGV0eXBlKGludCwgYmFzZT0xNikKKyAgICAgICAgcCA9IHByb3h5KGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5mdW5jLCBwLmZ1bmMpCisgICAgICAgIGYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlZmVyZW5jZUVycm9yLCBnZXRhdHRyLCBwLCAnZnVuYycpCisKKyAgICBkZWYgdGVzdF93aXRoX2JvdW5kX2FuZF91bmJvdW5kX21ldGhvZHMoc2VsZik6CisgICAgICAgIGRhdGEgPSBtYXAoc3RyLCByYW5nZSgxMCkpCisgICAgICAgIGpvaW4gPSBzZWxmLnRoZXR5cGUoc3RyLmpvaW4sICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oZGF0YSksICcwMTIzNDU2Nzg5JykKKyAgICAgICAgam9pbiA9IHNlbGYudGhldHlwZSgnJy5qb2luKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oZGF0YSksICcwMTIzNDU2Nzg5JykKKworICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgZiA9IHNlbGYudGhldHlwZShzaWduYXR1cmUsICdhc2RmJywgYmFyPVRydWUpCisgICAgICAgIGYuYWRkX3NvbWV0aGluZ190b19fZGljdF9fID0gVHJ1ZQorICAgICAgICBmX2NvcHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShmKSwgc2lnbmF0dXJlKGZfY29weSkpCisKKyAgICAjIElzc3VlIDYwODM6IFJlZmVyZW5jZSBjb3VudGluZyBidWcKKyAgICBkZWYgdGVzdF9zZXRzdGF0ZV9yZWZjb3VudChzZWxmKToKKyAgICAgICAgY2xhc3MgQmFkU2VxdWVuY2U6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNAorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgaWYga2V5ID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXgKKyAgICAgICAgICAgICAgICBlbGlmIGtleSA9PSAxOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUocmFuZ2UoMTAwMDAwMCkpCisgICAgICAgICAgICAgICAgZWxpZiBrZXkgaW4gKDIsIDMpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4ge30KKyAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yCisKKyAgICAgICAgZiA9IHNlbGYudGhldHlwZShvYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUVycm9yLCBmLl9fc2V0c3RhdGVfXywgQmFkU2VxdWVuY2UoKSkKKworY2xhc3MgUGFydGlhbFN1YmNsYXNzKGZ1bmN0b29scy5wYXJ0aWFsKToKKyAgICBwYXNzCisKK2NsYXNzIFRlc3RQYXJ0aWFsU3ViY2xhc3MoVGVzdFBhcnRpYWwpOgorCisgICAgdGhldHlwZSA9IFBhcnRpYWxTdWJjbGFzcworCitjbGFzcyBUZXN0UHl0aG9uUGFydGlhbChUZXN0UGFydGlhbCk6CisKKyAgICB0aGV0eXBlID0gUHl0aG9uUGFydGlhbAorCisgICAgIyB0aGUgcHl0aG9uIHZlcnNpb24gaXNuJ3QgcGlja2xhYmxlCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOiBwYXNzCisgICAgZGVmIHRlc3Rfc2V0c3RhdGVfcmVmY291bnQoc2VsZik6IHBhc3MKKworY2xhc3MgVGVzdFVwZGF0ZVdyYXBwZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrX3dyYXBwZXIoc2VsZiwgd3JhcHBlciwgd3JhcHBlZCwKKyAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25lZD1mdW5jdG9vbHMuV1JBUFBFUl9BU1NJR05NRU5UUywKKyAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkPWZ1bmN0b29scy5XUkFQUEVSX1VQREFURVMpOgorICAgICAgICAjIENoZWNrIGF0dHJpYnV0ZXMgd2VyZSBhc3NpZ25lZAorICAgICAgICBmb3IgbmFtZSBpbiBhc3NpZ25lZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnZXRhdHRyKHdyYXBwZXIsIG5hbWUpIGlzIGdldGF0dHIod3JhcHBlZCwgbmFtZSkpCisgICAgICAgICMgQ2hlY2sgYXR0cmlidXRlcyB3ZXJlIHVwZGF0ZWQKKyAgICAgICAgZm9yIG5hbWUgaW4gdXBkYXRlZDoKKyAgICAgICAgICAgIHdyYXBwZXJfYXR0ciA9IGdldGF0dHIod3JhcHBlciwgbmFtZSkKKyAgICAgICAgICAgIHdyYXBwZWRfYXR0ciA9IGdldGF0dHIod3JhcHBlZCwgbmFtZSkKKyAgICAgICAgICAgIGZvciBrZXkgaW4gd3JhcHBlZF9hdHRyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cmFwcGVkX2F0dHJba2V5XSBpcyB3cmFwcGVyX2F0dHJba2V5XSkKKworICAgIGRlZiBfZGVmYXVsdF91cGRhdGUoc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAiIiJUaGlzIGlzIGEgdGVzdCIiIgorICAgICAgICAgICAgcGFzcworICAgICAgICBmLmF0dHIgPSAnVGhpcyBpcyBhbHNvIGEgdGVzdCcKKyAgICAgICAgZGVmIHdyYXBwZXIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVyKHdyYXBwZXIsIGYpCisgICAgICAgIHJldHVybiB3cmFwcGVyLCBmCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgd3JhcHBlciwgZiA9IHNlbGYuX2RlZmF1bHRfdXBkYXRlKCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVyKHdyYXBwZXIsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX25hbWVfXywgJ2YnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuYXR0ciwgJ1RoaXMgaXMgYWxzbyBhIHRlc3QnKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfZGVmYXVsdF91cGRhdGVfZG9jKHNlbGYpOgorICAgICAgICB3cmFwcGVyLCBmID0gc2VsZi5fZGVmYXVsdF91cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19kb2NfXywgJ1RoaXMgaXMgYSB0ZXN0JykKKworICAgIGRlZiB0ZXN0X25vX3VwZGF0ZShzZWxmKToKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICIiIlRoaXMgaXMgYSB0ZXN0IiIiCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGYuYXR0ciA9ICdUaGlzIGlzIGFsc28gYSB0ZXN0JworICAgICAgICBkZWYgd3JhcHBlcigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXIod3JhcHBlciwgZiwgKCksICgpKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZXIod3JhcHBlciwgZiwgKCksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19uYW1lX18sICd3cmFwcGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fZG9jX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cih3cmFwcGVyLCAnYXR0cicpKQorCisgICAgZGVmIHRlc3Rfc2VsZWN0aXZlX3VwZGF0ZShzZWxmKToKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZi5hdHRyID0gJ1RoaXMgaXMgYSBkaWZmZXJlbnQgdGVzdCcKKyAgICAgICAgZi5kaWN0X2F0dHIgPSBkaWN0KGE9MSwgYj0yLCBjPTMpCisgICAgICAgIGRlZiB3cmFwcGVyKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdyYXBwZXIuZGljdF9hdHRyID0ge30KKyAgICAgICAgYXNzaWduID0gKCdhdHRyJywpCisgICAgICAgIHVwZGF0ZSA9ICgnZGljdF9hdHRyJywpCisgICAgICAgIGZ1bmN0b29scy51cGRhdGVfd3JhcHBlcih3cmFwcGVyLCBmLCBhc3NpZ24sIHVwZGF0ZSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVyKHdyYXBwZXIsIGYsIGFzc2lnbiwgdXBkYXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19uYW1lX18sICd3cmFwcGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fZG9jX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5hdHRyLCAnVGhpcyBpcyBhIGRpZmZlcmVudCB0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmRpY3RfYXR0ciwgZi5kaWN0X2F0dHIpCisKKyAgICBAdGVzdF9zdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9idWlsdGluX3VwZGF0ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBidWcgIzE1NzYyNDEKKyAgICAgICAgZGVmIHdyYXBwZXIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVyKHdyYXBwZXIsIG1heCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fbmFtZV9fLCAnbWF4JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyYXBwZXIuX19kb2NfXy5zdGFydHN3aXRoKCdtYXgoJykpCisKK2NsYXNzIFRlc3RXcmFwcyhUZXN0VXBkYXRlV3JhcHBlcik6CisKKyAgICBkZWYgX2RlZmF1bHRfdXBkYXRlKHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgIiIiVGhpcyBpcyBhIHRlc3QiIiIKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZi5hdHRyID0gJ1RoaXMgaXMgYWxzbyBhIHRlc3QnCisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZikKKyAgICAgICAgZGVmIHdyYXBwZXIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVyKHdyYXBwZXIsIGYpCisgICAgICAgIHJldHVybiB3cmFwcGVyCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgd3JhcHBlciA9IHNlbGYuX2RlZmF1bHRfdXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fbmFtZV9fLCAnZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5hdHRyLCAnVGhpcyBpcyBhbHNvIGEgdGVzdCcpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3VwZGF0ZV9kb2Moc2VsZik6CisgICAgICAgIHdyYXBwZXIgPSBzZWxmLl9kZWZhdWx0X3VwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX2RvY19fLCAnVGhpcyBpcyBhIHRlc3QnKQorCisgICAgZGVmIHRlc3Rfbm9fdXBkYXRlKHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgIiIiVGhpcyBpcyBhIHRlc3QiIiIKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZi5hdHRyID0gJ1RoaXMgaXMgYWxzbyBhIHRlc3QnCisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZiwgKCksICgpKQorICAgICAgICBkZWYgd3JhcHBlcigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZXIod3JhcHBlciwgZiwgKCksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19uYW1lX18sICd3cmFwcGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fZG9jX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cih3cmFwcGVyLCAnYXR0cicpKQorCisgICAgZGVmIHRlc3Rfc2VsZWN0aXZlX3VwZGF0ZShzZWxmKToKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZi5hdHRyID0gJ1RoaXMgaXMgYSBkaWZmZXJlbnQgdGVzdCcKKyAgICAgICAgZi5kaWN0X2F0dHIgPSBkaWN0KGE9MSwgYj0yLCBjPTMpCisgICAgICAgIGRlZiBhZGRfZGljdF9hdHRyKGYpOgorICAgICAgICAgICAgZi5kaWN0X2F0dHIgPSB7fQorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgYXNzaWduID0gKCdhdHRyJywpCisgICAgICAgIHVwZGF0ZSA9ICgnZGljdF9hdHRyJywpCisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZiwgYXNzaWduLCB1cGRhdGUpCisgICAgICAgIEBhZGRfZGljdF9hdHRyCisgICAgICAgIGRlZiB3cmFwcGVyKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlcih3cmFwcGVyLCBmLCBhc3NpZ24sIHVwZGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fbmFtZV9fLCAnd3JhcHBlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX2RvY19fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuYXR0ciwgJ1RoaXMgaXMgYSBkaWZmZXJlbnQgdGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5kaWN0X2F0dHIsIGYuZGljdF9hdHRyKQorCisKK2NsYXNzIFRlc3RSZWR1Y2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcmVkdWNlKHNlbGYpOgorICAgICAgICBjbGFzcyBTcXVhcmVzOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4KToKKyAgICAgICAgICAgICAgICBzZWxmLm1heCA9IG1heAorICAgICAgICAgICAgICAgIHNlbGYuc29mYXIgPSBbXQorCisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKTogcmV0dXJuIGxlbihzZWxmLnNvZmFyKQorCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgaWYgbm90IDAgPD0gaSA8IHNlbGYubWF4OiByYWlzZSBJbmRleEVycm9yCisgICAgICAgICAgICAgICAgbiA9IGxlbihzZWxmLnNvZmFyKQorICAgICAgICAgICAgICAgIHdoaWxlIG4gPD0gaToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2Zhci5hcHBlbmQobipuKQorICAgICAgICAgICAgICAgICAgICBuICs9IDEKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb2ZhcltpXQorCisgICAgICAgIHJlZHVjZSA9IGZ1bmN0b29scy5yZWR1Y2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UobGFtYmRhIHgsIHk6IHgreSwgWydhJywgJ2InLCAnYyddLCAnJyksICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmVkdWNlKGxhbWJkYSB4LCB5OiB4K3ksIFtbJ2EnLCAnYyddLCBbXSwgWydkJywgJ3cnXV0sIFtdKSwKKyAgICAgICAgICAgIFsnYScsJ2MnLCdkJywndyddCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UobGFtYmRhIHgsIHk6IHgqeSwgcmFuZ2UoMiw4KSwgMSksIDUwNDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICByZWR1Y2UobGFtYmRhIHgsIHk6IHgqeSwgcmFuZ2UoMiwyMSksIDFMKSwKKyAgICAgICAgICAgIDI0MzI5MDIwMDgxNzY2NDAwMDBMCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UobGFtYmRhIHgsIHk6IHgreSwgU3F1YXJlcygxMCkpLCAyODUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGxhbWJkYSB4LCB5OiB4K3ksIFNxdWFyZXMoMTApLCAwKSwgMjg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShsYW1iZGEgeCwgeTogeCt5LCBTcXVhcmVzKDApLCAwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCA0MiwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVkdWNlLCA0MiwgNDIsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZSg0MiwgIjEiKSwgIjEiKSAjIGZ1bmMgaXMgbmV2ZXIgY2FsbGVkIHdpdGggb25lIGl0ZW0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoNDIsICIiLCAiMSIpLCAiMSIpICMgZnVuYyBpcyBuZXZlciBjYWxsZWQgd2l0aCBvbmUgaXRlbQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZHVjZSwgNDIsICg0MiwgNDIpKQorCitjbGFzcyBUZXN0Q21wVG9LZXkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2NtcF90b19rZXkoc2VsZik6CisgICAgICAgIGRlZiBteWNtcCh4LCB5KToKKyAgICAgICAgICAgIHJldHVybiB5IC0geAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChyYW5nZSg1KSwga2V5PWZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWzQsIDMsIDIsIDEsIDBdKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgZGVmIG15Y21wKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIHkgLSB4CisgICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wKQorICAgICAgICBrID0ga2V5KDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2goaykpCisKK2NsYXNzIFRlc3RUb3RhbE9yZGVyaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2x0KHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPCBvdGhlci52YWx1ZQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMSkgPCBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+IEEoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDEpIDw9IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpIDw9IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMikpCisKKyAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19sZShzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDw9IG90aGVyLnZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID4gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMSkgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKworICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2d0KHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPiBvdGhlci52YWx1ZQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMSkgPCBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+IEEoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDEpIDw9IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpIDw9IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMikpCisKKyAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19nZShzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID49IG90aGVyLnZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID4gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMSkgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKworICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX25vX292ZXJ3cml0ZShzZWxmKToKKyAgICAgICAgIyBuZXcgbWV0aG9kcyBzaG91bGQgbm90IG92ZXJ3cml0ZSBleGlzdGluZworICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEEoc3RyKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoImEiKSA8IEEoImIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoImIiKSA+IEEoImEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoImEiKSA8PSBBKCJiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKCJiIikgPj0gQSgiYSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgiYiIpIDw9IEEoImIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoImIiKSA+PSBBKCJiIikpCisKKyAgICBkZWYgdGVzdF9ub19vcGVyYXRpb25zX2RlZmluZWQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2J1Z18xMDA0MihzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBUZXN0VE86CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgVGVzdFRPKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFRlc3RUTyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDwgb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgVGVzdFRPKDgpIDw9ICgpCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICB0ZXN0X2NsYXNzZXMgPSAoCisgICAgICAgIFRlc3RQYXJ0aWFsLAorICAgICAgICBUZXN0UGFydGlhbFN1YmNsYXNzLAorICAgICAgICBUZXN0UHl0aG9uUGFydGlhbCwKKyAgICAgICAgVGVzdFVwZGF0ZVdyYXBwZXIsCisgICAgICAgIFRlc3RUb3RhbE9yZGVyaW5nLAorICAgICAgICBUZXN0V3JhcHMsCisgICAgICAgIFRlc3RSZWR1Y2UsCisgICAgKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKworICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZworICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgY291bnRzID0gW05vbmVdICogNQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKGNvdW50cykpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgIHByaW50IGNvdW50cworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9mdXR1cmUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9mdXR1cmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRmOWM0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Z1dHVyZS5weQpAQCAtMCwwICsxLDExOSBAQAorIyBUZXN0IHZhcmlvdXMgZmxhdm9ycyBvZiBsZWdhbCBhbmQgaWxsZWdhbCBmdXR1cmUgc3RhdGVtZW50cworCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgcmUKKworcnggPSByZS5jb21waWxlKCdcKChcUyspLnB5LCBsaW5lIChcZCspJykKKworZGVmIGdldF9lcnJvcl9sb2NhdGlvbihtc2cpOgorICAgIG1vID0gcnguc2VhcmNoKHN0cihtc2cpKQorICAgIHJldHVybiBtby5ncm91cCgxLCAyKQorCitjbGFzcyBGdXR1cmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Z1dHVyZTEoc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxvYWQoJ3Rlc3RfZnV0dXJlMScpCisgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9mdXR1cmUxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9mdXR1cmUxLnJlc3VsdCwgNikKKworICAgIGRlZiB0ZXN0X2Z1dHVyZTIoc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxvYWQoJ3Rlc3RfZnV0dXJlMicpCisgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9mdXR1cmUyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9mdXR1cmUyLnJlc3VsdCwgNikKKworICAgIGRlZiB0ZXN0X2Z1dHVyZTMoc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxvYWQoJ3Rlc3RfZnV0dXJlMycpCisgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9mdXR1cmUzCisKKyAgICBkZWYgdGVzdF9iYWRmdXR1cmUzKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IGJhZHN5bnRheF9mdXR1cmUzCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgbXNnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJyb3JfbG9jYXRpb24obXNnKSwgKCJiYWRzeW50YXhfZnV0dXJlMyIsICczJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQorCisgICAgZGVmIHRlc3RfYmFkZnV0dXJlNChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCBiYWRzeW50YXhfZnV0dXJlNAorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IsIG1zZzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2Vycm9yX2xvY2F0aW9uKG1zZyksICgiYmFkc3ludGF4X2Z1dHVyZTQiLCAnMycpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24gZGlkbid0IG9jY3VyIikKKworICAgIGRlZiB0ZXN0X2JhZGZ1dHVyZTUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgYmFkc3ludGF4X2Z1dHVyZTUKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yLCBtc2c6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJvcl9sb2NhdGlvbihtc2cpLCAoImJhZHN5bnRheF9mdXR1cmU1IiwgJzQnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIGRpZG4ndCBvY2N1ciIpCisKKyAgICBkZWYgdGVzdF9iYWRmdXR1cmU2KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IGJhZHN5bnRheF9mdXR1cmU2CisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgbXNnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJyb3JfbG9jYXRpb24obXNnKSwgKCJiYWRzeW50YXhfZnV0dXJlNiIsICczJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQorCisgICAgZGVmIHRlc3RfYmFkZnV0dXJlNyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCBiYWRzeW50YXhfZnV0dXJlNworICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IsIG1zZzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2Vycm9yX2xvY2F0aW9uKG1zZyksICgiYmFkc3ludGF4X2Z1dHVyZTciLCAnMycpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBleGNlcHRpb24gZGlkbid0IG9jY3VyIikKKworICAgIGRlZiB0ZXN0X2JhZGZ1dHVyZTgoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgYmFkc3ludGF4X2Z1dHVyZTgKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yLCBtc2c6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJvcl9sb2NhdGlvbihtc2cpLCAoImJhZHN5bnRheF9mdXR1cmU4IiwgJzMnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIGRpZG4ndCBvY2N1ciIpCisKKyAgICBkZWYgdGVzdF9iYWRmdXR1cmU5KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IGJhZHN5bnRheF9mdXR1cmU5CisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciwgbXNnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJyb3JfbG9jYXRpb24obXNnKSwgKCJiYWRzeW50YXhfZnV0dXJlOSIsICczJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQorCisgICAgZGVmIHRlc3RfcGFyc2VyaGFjayhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRoYXQgdGhlIHBhcnNlci5jOjpmdXR1cmVfaGFjayBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZAorICAgICAgICAjIE5vdGU6IGFsdGhvdWdoIHRoaXMgdGVzdCBtdXN0IHBhc3MsIGl0J3Mgbm90IHRlc3RpbmcgdGhlIG9yaWdpbmFsCisgICAgICAgICMgICAgICAgYnVnIGFzIG9mIDIuNiBzaW5jZSB0aGUgd2l0aCBzdGF0ZW1lbnQgaXMgbm90IG9wdGlvbmFsIGFuZAorICAgICAgICAjICAgICAgIHRoZSBwYXJzZXIgaGFjayBkaXNhYmxlZC4gSWYgYSBuZXcga2V5d29yZCBpcyBpbnRyb2R1Y2VkIGluCisgICAgICAgICMgICAgICAgMi42LCBjaGFuZ2UgdGhpcyB0byByZWZlciB0byB0aGUgbmV3IGZ1dHVyZSBpbXBvcnQuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4ZWMgImZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb247IHByaW50IDAiCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic3ludGF4IGVycm9yIGRpZG4ndCBvY2N1ciIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlYyAiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCAocHJpbnRfZnVuY3Rpb24pOyBwcmludCAwIgorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInN5bnRheCBlcnJvciBkaWRuJ3Qgb2NjdXIiKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfZmVhdHVyZXMoc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxvYWQoInRlc3QudGVzdF9mdXR1cmU1IikKKyAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2Z1dHVyZTUKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfbGl0ZXJhbHNfZXhlYyhzZWxmKToKKyAgICAgICAgc2NvcGUgPSB7fQorICAgICAgICBleGVjICJmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHM7IHggPSAnJyIgaW4gc2NvcGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNjb3BlWyJ4Il0sIHVuaWNvZGUpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoRnV0dXJlVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZnV0dXJlMS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Z1dHVyZTEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3YzJlMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Z1dHVyZTEucHkKQEAgLTAsMCArMSwxMSBAQAorIiIiVGhpcyBpcyBhIHRlc3QiIiIKKworIyBJbXBvcnQgdGhlIG5hbWUgbmVzdGVkX3Njb3BlcyB0d2ljZSB0byB0cmlnZ2VyIFNGIGJ1ZyAjNDA3Mzk0IChyZWdyZXNzaW9uKS4KK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgbmVzdGVkX3Njb3BlcywgbmVzdGVkX3Njb3BlcworCitkZWYgZih4KToKKyAgICBkZWYgZyh5KToKKyAgICAgICAgcmV0dXJuIHggKyB5CisgICAgcmV0dXJuIGcKKworcmVzdWx0ID0gZigyKSg0KQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZnV0dXJlMi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Z1dHVyZTIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllYjczMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Z1dHVyZTIucHkKQEAgLTAsMCArMSwxMCBAQAorIiIiVGhpcyBpcyBhIHRlc3QiIiIKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBuZXN0ZWRfc2NvcGVzOyBpbXBvcnQgc3RyaW5nCisKK2RlZiBmKHgpOgorICAgIGRlZiBnKHkpOgorICAgICAgICByZXR1cm4geCArIHkKKyAgICByZXR1cm4gZworCityZXN1bHQgPSBmKDIpKDQpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9mdXR1cmUzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZnV0dXJlMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDIzNTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZnV0dXJlMy5weQpAQCAtMCwwICsxLDMwIEBACitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IG5lc3RlZF9zY29wZXMKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCit4ID0gMgorZGVmIG5lc3RlcigpOgorICAgIHggPSAzCisgICAgZGVmIGlubmVyKCk6CisgICAgICAgIHJldHVybiB4CisgICAgcmV0dXJuIGlubmVyKCkKKworCitjbGFzcyBUZXN0RnV0dXJlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Zsb29yX2Rpdl9vcGVyYXRvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3IC8vIDIsIDMpCisKKyAgICBkZWYgdGVzdF90cnVlX2Rpdl9hc19kZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDcgLyAyLCAzLjUpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfc2NvcGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5lc3RlcigpLCAzKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0RnV0dXJlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9mdXR1cmU0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZnV0dXJlNC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Y4YWRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZnV0dXJlNC5weQpAQCAtMCwwICsxLDQ3IEBACitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBUZXN0RnV0dXJlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgYXNzZXJ0VHlwZShzZWxmLCBvYmosIHR5cCk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKG9iaikgaXMgdHlwLAorICAgICAgICAgICAgInR5cGUoJXIpIGlzICVyLCBub3QgJXIiICUgKG9iaiwgdHlwZShvYmopLCB0eXApKQorCisgICAgZGVmIHRlc3RfdW5pY29kZV9zdHJpbmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFR5cGUoIiIsIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZSgnJywgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKHIiIiwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKHInJywgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKCIiIiAiIiIsIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZSgnJycgJycnLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFR5cGUociIiIiAiIiIsIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZShyJycnICcnJywgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKHUiIiwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKHUnJywgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKHVyIiIsIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZSh1cicnLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydFR5cGUodSIiIiAiIiIsIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZSh1JycnICcnJywgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKHVyIiIiICIiIiwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKHVyJycnICcnJywgdW5pY29kZSkKKworICAgICAgICBzZWxmLmFzc2VydFR5cGUoYiIiLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZShiJycsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKGJyIiIsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKGJyJycsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlKGIiIiIgIiIiLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZShiJycnICcnJywgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFR5cGUoYnIiIiIgIiIiLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZShicicnJyAnJycsIHN0cikKKworICAgICAgICBzZWxmLmFzc2VydFR5cGUoJycgJycsIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZSgnJyB1JycsIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZSh1JycgJycsIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZSh1JycgdScnLCB1bmljb2RlKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0RnV0dXJlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9mdXR1cmU1LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZnV0dXJlNS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTg0MDcwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZnV0dXJlNS5weQpAQCAtMCwwICsxLDIxIEBACisjIENoZWNrIHRoYXQgbXVsdGlwbGUgZmVhdHVyZXMgY2FuIGJlIGVuYWJsZWQuCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMsIHByaW50X2Z1bmN0aW9uCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSAuIGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCitjbGFzcyBUZXN0TXVsdGlwbGVGZWF0dXJlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91bmljb2RlX2xpdGVyYWxzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoIiIsIHVuaWNvZGUpCisKKyAgICBkZWYgdGVzdF9wcmludF9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBzOgorICAgICAgICAgICAgcHJpbnQoImZvbyIsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksICJmb29cbiIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdE11bHRpcGxlRmVhdHVyZXMpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9mdXR1cmVfYnVpbHRpbnMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9mdXR1cmVfYnVpbHRpbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZjMzc4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2Z1dHVyZV9idWlsdGlucy5weQpAQCAtMCwwICsxLDM4IEBACitpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQsIHVuaXR0ZXN0CisKKyMgd2UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3Igb2YgdGhlc2UgZnV0dXJlIGJ1aWx0aW5zOgorZnJvbSBmdXR1cmVfYnVpbHRpbnMgaW1wb3J0IGhleCwgb2N0LCBtYXAsIHppcCwgZmlsdGVyCisKK2NsYXNzIEJ1aWx0aW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9oZXgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGV4KDApLCAnMHgwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXgoMTYpLCAnMHgxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGV4KDE2TCksICcweDEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXgoLTE2KSwgJy0weDEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXgoLTE2TCksICctMHgxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGV4LCB7fSkKKworICAgIGRlZiB0ZXN0X29jdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvY3QoMCksICcwbzAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9jdCgxMDApLCAnMG8xNDQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9jdCgxMDBMKSwgJzBvMTQ0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvY3QoLTEwMCksICctMG8xNDQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9jdCgtMTAwTCksICctMG8xNDQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9jdCwgKCkpCisKKyAgICBkZWYgdGVzdF9pdGVydG9vbHMoc2VsZik6CisgICAgICAgIGZyb20gaXRlcnRvb2xzIGltcG9ydCBpbWFwLCBpemlwLCBpZmlsdGVyCisgICAgICAgICMgV2Ugd2lsbCBhc3N1bWUgdGhhdCB0aGUgaXRlcnRvb2xzIGZ1bmN0aW9ucyB3b3JrLCBzbyBwcm92aWRlZAorICAgICAgICAjIHRoYXQgd2UndmUgZ290IGlkZW50aWNhbCBjb3BwaWVzLCB3ZSB3aWxsIHdvcmshCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwLCBpbWFwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCwgaXppcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWx0ZXIsIGlmaWx0ZXIpCisgICAgICAgICMgVGVzdGluZyB0aGF0IGZpbHRlcihOb25lLCBzdHVmZikgcmFpc2VzIGEgd2FybmluZyBsaXZlcyBpbgorICAgICAgICAjIHRlc3RfcHkza3dhcm4ucHkKKworCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEJ1aWx0aW5UZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nYy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2djLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkODc0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nYy5weQpAQCAtMCwwICsxLDcwOCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgZ2MKK2ltcG9ydCB3ZWFrcmVmCisKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCisjIyMgU3VwcG9ydCBjb2RlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQnVnIDEwNTU4MjAgaGFzIHNldmVyYWwgdGVzdHMgb2YgbG9uZ3N0YW5kaW5nIGJ1Z3MgaW52b2x2aW5nIHdlYWtyZWZzIGFuZAorIyBjeWNsaWMgZ2MuCisKKyMgQW4gaW5zdGFuY2Ugb2YgQzEwNTU4MjAgaGFzIGEgc2VsZi1sb29wLCBzbyBiZWNvbWVzIGN5Y2xpYyB0cmFzaCB3aGVuCisjIHVucmVhY2hhYmxlLgorY2xhc3MgQzEwNTU4MjAob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaSk6CisgICAgICAgIHNlbGYuaSA9IGkKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZgorCitjbGFzcyBHQ19EZXRlY3RvcihvYmplY3QpOgorICAgICMgQ3JlYXRlIGFuIGluc3RhbmNlIEkuICBUaGVuIGdjIGhhc24ndCBoYXBwZW5lZCBhZ2FpbiBzbyBsb25nIGFzCisgICAgIyBJLmdjX2hhcHBlbmVkIGlzIGZhbHNlLgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmdjX2hhcHBlbmVkID0gRmFsc2UKKworICAgICAgICBkZWYgaXRfaGFwcGVuZWQoaWdub3JlZCk6CisgICAgICAgICAgICBzZWxmLmdjX2hhcHBlbmVkID0gVHJ1ZQorCisgICAgICAgICMgQ3JlYXRlIGEgcGllY2Ugb2YgY3ljbGljIHRyYXNoIHRoYXQgdHJpZ2dlcnMgaXRfaGFwcGVuZWQgd2hlbgorICAgICAgICAjIGdjIGNvbGxlY3RzIGl0LgorICAgICAgICBzZWxmLndyID0gd2Vha3JlZi5yZWYoQzEwNTU4MjAoNjY2KSwgaXRfaGFwcGVuZWQpCisKKworIyMjIFRlc3RzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIEdDVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2xpc3Qoc2VsZik6CisgICAgICAgIGwgPSBbXQorICAgICAgICBsLmFwcGVuZChsKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZGVsIGwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnYy5jb2xsZWN0KCksIDEpCisKKyAgICBkZWYgdGVzdF9kaWN0KHNlbGYpOgorICAgICAgICBkID0ge30KKyAgICAgICAgZFsxXSA9IGQKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGRlbCBkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuY29sbGVjdCgpLCAxKQorCisgICAgZGVmIHRlc3RfdHVwbGUoc2VsZik6CisgICAgICAgICMgc2luY2UgdHVwbGVzIGFyZSBpbW11dGFibGUgd2UgY2xvc2UgdGhlIGxvb3Agd2l0aCBhIGxpc3QKKyAgICAgICAgbCA9IFtdCisgICAgICAgIHQgPSAobCwpCisgICAgICAgIGwuYXBwZW5kKHQpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBkZWwgdAorICAgICAgICBkZWwgbAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmNvbGxlY3QoKSwgMikKKworICAgIGRlZiB0ZXN0X2NsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgcGFzcworICAgICAgICBBLmEgPSBBCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBkZWwgQQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGdjLmNvbGxlY3QoKSwgMCkKKworICAgIGRlZiB0ZXN0X25ld3N0eWxlY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGRlbCBBCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZ2MuY29sbGVjdCgpLCAwKQorCisgICAgZGVmIHRlc3RfaW5zdGFuY2Uoc2VsZik6CisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGEgPSBBKCkKKyAgICAgICAgYS5hID0gYQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChnYy5jb2xsZWN0KCksIDApCisKKyAgICBkZWYgdGVzdF9uZXdpbnN0YW5jZShzZWxmKToKKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhID0gQSgpCisgICAgICAgIGEuYSA9IGEKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGRlbCBhCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZ2MuY29sbGVjdCgpLCAwKQorICAgICAgICBjbGFzcyBCKGxpc3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDKEIsIEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhID0gQygpCisgICAgICAgIGEuYSA9IGEKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGRlbCBhCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZ2MuY29sbGVjdCgpLCAwKQorICAgICAgICBkZWwgQiwgQworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGdjLmNvbGxlY3QoKSwgMCkKKyAgICAgICAgQS5hID0gQSgpCisgICAgICAgIGRlbCBBCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZ2MuY29sbGVjdCgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmNvbGxlY3QoKSwgMCkKKworICAgIGRlZiB0ZXN0X21ldGhvZChzZWxmKToKKyAgICAgICAgIyBUcmlja3k6IHNlbGYuX19pbml0X18gaXMgYSBib3VuZCBtZXRob2QsIGl0IHJlZmVyZW5jZXMgdGhlIGluc3RhbmNlLgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuaW5pdCA9IHNlbGYuX19pbml0X18KKyAgICAgICAgYSA9IEEoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChnYy5jb2xsZWN0KCksIDApCisKKyAgICBkZWYgdGVzdF9maW5hbGl6ZXIoc2VsZik6CisgICAgICAgICMgQSgpIGlzIHVuY29sbGVjdGFibGUgaWYgaXQgaXMgcGFydCBvZiBhIGN5Y2xlLCBtYWtlIHN1cmUgaXQgc2hvd3MgdXAKKyAgICAgICAgIyBpbiBnYy5nYXJiYWdlLgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6IHBhc3MKKyAgICAgICAgY2xhc3MgQjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYSA9IEEoKQorICAgICAgICBhLmEgPSBhCisgICAgICAgIGlkX2EgPSBpZChhKQorICAgICAgICBiID0gQigpCisgICAgICAgIGIuYiA9IGIKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGRlbCBhCisgICAgICAgIGRlbCBiCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZ2MuY29sbGVjdCgpLCAwKQorICAgICAgICBmb3Igb2JqIGluIGdjLmdhcmJhZ2U6CisgICAgICAgICAgICBpZiBpZChvYmopID09IGlkX2E6CisgICAgICAgICAgICAgICAgZGVsIG9iai5hCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZGlkbid0IGZpbmQgb2JqIGluIGdhcmJhZ2UgKGZpbmFsaXplcikiKQorICAgICAgICBnYy5nYXJiYWdlLnJlbW92ZShvYmopCisKKyAgICBkZWYgdGVzdF9maW5hbGl6ZXJfbmV3Y2xhc3Moc2VsZik6CisgICAgICAgICMgQSgpIGlzIHVuY29sbGVjdGFibGUgaWYgaXQgaXMgcGFydCBvZiBhIGN5Y2xlLCBtYWtlIHN1cmUgaXQgc2hvd3MgdXAKKyAgICAgICAgIyBpbiBnYy5nYXJiYWdlLgorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKTogcGFzcworICAgICAgICBjbGFzcyBCKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGEgPSBBKCkKKyAgICAgICAgYS5hID0gYQorICAgICAgICBpZF9hID0gaWQoYSkKKyAgICAgICAgYiA9IEIoKQorICAgICAgICBiLmIgPSBiCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBkZWwgYQorICAgICAgICBkZWwgYgorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGdjLmNvbGxlY3QoKSwgMCkKKyAgICAgICAgZm9yIG9iaiBpbiBnYy5nYXJiYWdlOgorICAgICAgICAgICAgaWYgaWQob2JqKSA9PSBpZF9hOgorICAgICAgICAgICAgICAgIGRlbCBvYmouYQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImRpZG4ndCBmaW5kIG9iaiBpbiBnYXJiYWdlIChmaW5hbGl6ZXIpIikKKyAgICAgICAgZ2MuZ2FyYmFnZS5yZW1vdmUob2JqKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb24oc2VsZik6CisgICAgICAgICMgVHJpY2t5OiBmIC0+IGQgLT4gZiwgY29kZSBzaG91bGQgY2FsbCBkLmNsZWFyKCkgYWZ0ZXIgdGhlIGV4ZWMgdG8KKyAgICAgICAgIyBicmVhayB0aGUgY3ljbGUuCisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKCJkZWYgZigpOiBwYXNzXG4iKSBpbiBkCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBkZWwgZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmNvbGxlY3QoKSwgMikKKworICAgIGRlZiB0ZXN0X2ZyYW1lKHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgZnJhbWUgPSBzeXMuX2dldGZyYW1lKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGYoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmNvbGxlY3QoKSwgMSkKKworICAgIGRlZiB0ZXN0X3NhdmVhbGwoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgY3ljbGljIGdhcmJhZ2UgbGlrZSBsaXN0cyBzaG93IHVwIGluIGdjLmdhcmJhZ2UgaWYgdGhlCisgICAgICAgICMgU0FWRUFMTCBvcHRpb24gaXMgZW5hYmxlZC4KKworICAgICAgICAjIEZpcnN0IG1ha2Ugc3VyZSB3ZSBkb24ndCBzYXZlIGF3YXkgb3RoZXIgc3R1ZmYgdGhhdCBqdXN0IGhhcHBlbnMgdG8KKyAgICAgICAgIyBiZSB3YWl0aW5nIGZvciBjb2xsZWN0aW9uLgorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgIyBpZiB0aGlzIGZhaWxzLCBzb21lb25lIGVsc2UgY3JlYXRlZCBpbW1vcnRhbCB0cmFzaAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmdhcmJhZ2UsIFtdKQorCisgICAgICAgIEwgPSBbXQorICAgICAgICBMLmFwcGVuZChMKQorICAgICAgICBpZF9MID0gaWQoTCkKKworICAgICAgICBkZWJ1ZyA9IGdjLmdldF9kZWJ1ZygpCisgICAgICAgIGdjLnNldF9kZWJ1ZyhkZWJ1ZyB8IGdjLkRFQlVHX1NBVkVBTEwpCisgICAgICAgIGRlbCBMCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBnYy5zZXRfZGVidWcoZGVidWcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZ2MuZ2FyYmFnZSksIDEpCisgICAgICAgIG9iaiA9IGdjLmdhcmJhZ2UucG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChvYmopLCBpZF9MKQorCisgICAgZGVmIHRlc3RfZGVsKHNlbGYpOgorICAgICAgICAjIF9fZGVsX18gbWV0aG9kcyBjYW4gdHJpZ2dlciBjb2xsZWN0aW9uLCBtYWtlIHRoaXMgdG8gaGFwcGVuCisgICAgICAgIHRocmVzaG9sZHMgPSBnYy5nZXRfdGhyZXNob2xkKCkKKyAgICAgICAgZ2MuZW5hYmxlKCkKKyAgICAgICAgZ2Muc2V0X3RocmVzaG9sZCgxKQorCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBkaXIoc2VsZikKKyAgICAgICAgYSA9IEEoKQorICAgICAgICBkZWwgYQorCisgICAgICAgIGdjLmRpc2FibGUoKQorICAgICAgICBnYy5zZXRfdGhyZXNob2xkKCp0aHJlc2hvbGRzKQorCisgICAgZGVmIHRlc3RfZGVsX25ld2NsYXNzKHNlbGYpOgorICAgICAgICAjIF9fZGVsX18gbWV0aG9kcyBjYW4gdHJpZ2dlciBjb2xsZWN0aW9uLCBtYWtlIHRoaXMgdG8gaGFwcGVuCisgICAgICAgIHRocmVzaG9sZHMgPSBnYy5nZXRfdGhyZXNob2xkKCkKKyAgICAgICAgZ2MuZW5hYmxlKCkKKyAgICAgICAgZ2Muc2V0X3RocmVzaG9sZCgxKQorCisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGRpcihzZWxmKQorICAgICAgICBhID0gQSgpCisgICAgICAgIGRlbCBhCisKKyAgICAgICAgZ2MuZGlzYWJsZSgpCisgICAgICAgIGdjLnNldF90aHJlc2hvbGQoKnRocmVzaG9sZHMpCisKKyAgICAjIFRoZSBmb2xsb3dpbmcgdHdvIHRlc3RzIGFyZSBmcmFnaWxlOgorICAgICMgVGhleSBwcmVjaXNlbHkgY291bnQgdGhlIG51bWJlciBvZiBhbGxvY2F0aW9ucywKKyAgICAjIHdoaWNoIGlzIGhpZ2hseSBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuCisgICAgIyBGb3IgZXhhbXBsZToKKyAgICAjIC0gZGlzcG9zZWQgdHVwbGVzIGFyZSBub3QgZnJlZWQsIGJ1dCByZXVzZWQKKyAgICAjIC0gdGhlIGNhbGwgdG8gYXNzZXJ0RXF1YWwgc29tZWhvdyBhdm9pZHMgYnVpbGRpbmcgaXRzIGFyZ3MgdHVwbGUKKyAgICBkZWYgdGVzdF9nZXRfY291bnQoc2VsZik6CisgICAgICAgICMgQXZvaWQgZnV0dXJlIGFsbG9jYXRpb24gb2YgbWV0aG9kIG9iamVjdAorICAgICAgICBhc3NlcnRFcXVhbCA9IHNlbGYuX2Jhc2VBc3NlcnRFcXVhbAorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgYXNzZXJ0RXF1YWwoZ2MuZ2V0X2NvdW50KCksICgwLCAwLCAwKSkKKyAgICAgICAgYSA9IGRpY3QoKQorICAgICAgICAjIHNpbmNlIGdjLmNvbGxlY3QoKSwgd2UgY3JlYXRlZCB0d28gb2JqZWN0czoKKyAgICAgICAgIyB0aGUgZGljdCwgYW5kIHRoZSB0dXBsZSByZXR1cm5lZCBieSBnZXRfY291bnQoKQorICAgICAgICBhc3NlcnRFcXVhbChnYy5nZXRfY291bnQoKSwgKDIsIDAsIDApKQorCisgICAgZGVmIHRlc3RfY29sbGVjdF9nZW5lcmF0aW9ucyhzZWxmKToKKyAgICAgICAgIyBBdm9pZCBmdXR1cmUgYWxsb2NhdGlvbiBvZiBtZXRob2Qgb2JqZWN0CisgICAgICAgIGFzc2VydEVxdWFsID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgYSA9IGRpY3QoKQorICAgICAgICBnYy5jb2xsZWN0KDApCisgICAgICAgIGFzc2VydEVxdWFsKGdjLmdldF9jb3VudCgpLCAoMCwgMSwgMCkpCisgICAgICAgIGdjLmNvbGxlY3QoMSkKKyAgICAgICAgYXNzZXJ0RXF1YWwoZ2MuZ2V0X2NvdW50KCksICgwLCAwLCAxKSkKKyAgICAgICAgZ2MuY29sbGVjdCgyKQorICAgICAgICBhc3NlcnRFcXVhbChnYy5nZXRfY291bnQoKSwgKDAsIDAsIDApKQorCisgICAgZGVmIHRlc3RfdHJhc2hjYW4oc2VsZik6CisgICAgICAgIGNsYXNzIE91Y2g6CisgICAgICAgICAgICBuID0gMAorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgT3VjaC5uID0gT3VjaC5uICsgMQorICAgICAgICAgICAgICAgIGlmIE91Y2gubiAlIDE3ID09IDA6CisgICAgICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgICAgICMgInRyYXNoY2FuIiBpcyBhIGhhY2sgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdyB3aGVuIGRlYWxsb2NhdGluZworICAgICAgICAjIHZlcnkgZGVlcGx5IG5lc3RlZCB0dXBsZXMgZXRjLiAgSXQgd29ya3MgaW4gcGFydCBieSBhYnVzaW5nIHRoZQorICAgICAgICAjIHR5cGUgcG9pbnRlciBhbmQgcmVmY291bnQgZmllbGRzLCBhbmQgdGhhdCBjYW4geWllbGQgaG9ycmlibGUKKyAgICAgICAgIyBwcm9ibGVtcyB3aGVuIGdjIHRyaWVzIHRvIHRyYXZlcnNlIHRoZSBzdHJ1Y3R1cmVzLgorICAgICAgICAjIElmIHRoaXMgdGVzdCBmYWlscyAoYXMgaXQgZG9lcyBpbiAyLjAsIDIuMSBhbmQgMi4yKSwgaXQgd2lsbAorICAgICAgICAjIG1vc3QgbGlrZWx5IGRpZSB2aWEgc2VnZmF1bHQuCisKKyAgICAgICAgIyBOb3RlOiAgSW4gMi4zIHRoZSBwb3NzaWJpbGl0eSBmb3IgY29tcGlsaW5nIHdpdGhvdXQgY3ljbGljIGdjIHdhcworICAgICAgICAjIHJlbW92ZWQsIGFuZCB0aGF0IGluIHR1cm4gYWxsb3dzIHRoZSB0cmFzaGNhbiBtZWNoYW5pc20gdG8gd29yaworICAgICAgICAjIHZpYSBtdWNoIHNpbXBsZXIgbWVhbnMgKGUuZy4sIGl0IG5ldmVyIGFidXNlcyB0aGUgdHlwZSBwb2ludGVyIG9yCisgICAgICAgICMgcmVmY291bnQgZmllbGRzIGFueW1vcmUpLiAgU2luY2UgaXQncyBtdWNoIGxlc3MgbGlrZWx5IHRvIGNhdXNlIGEKKyAgICAgICAgIyBwcm9ibGVtIG5vdywgdGhlIHZhcmlvdXMgY29uc3RhbnRzIGluIHRoaXMgZXhwZW5zaXZlICh3ZSBmb3JjZSBhIGxvdAorICAgICAgICAjIG9mIGZ1bGwgY29sbGVjdGlvbnMpIHRlc3QgYXJlIGN1dCBiYWNrIGZyb20gdGhlIDIuMiB2ZXJzaW9uLgorICAgICAgICBnYy5lbmFibGUoKQorICAgICAgICBOID0gMTUwCisgICAgICAgIGZvciBjb3VudCBpbiByYW5nZSgyKToKKyAgICAgICAgICAgIHQgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTik6CisgICAgICAgICAgICAgICAgdCA9IFt0LCBPdWNoKCldCisgICAgICAgICAgICB1ID0gW10KKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE4pOgorICAgICAgICAgICAgICAgIHUgPSBbdSwgT3VjaCgpXQorICAgICAgICAgICAgdiA9IHt9CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShOKToKKyAgICAgICAgICAgICAgICB2ID0gezE6IHYsIDI6IE91Y2goKX0KKyAgICAgICAgZ2MuZGlzYWJsZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICJ0ZXN0IG1lYW5pbmdsZXNzIG9uIGJ1aWxkcyB3aXRob3V0IHRocmVhZHMiKQorICAgIGRlZiB0ZXN0X3RyYXNoY2FuX3RocmVhZHMoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEzOTkyOiB0cmFzaGNhbiBtZWNoYW5pc20gc2hvdWxkIGJlIHRocmVhZC1zYWZlCisgICAgICAgIE5FU1RJTkcgPSA2MAorICAgICAgICBOX1RIUkVBRFMgPSAyCisKKyAgICAgICAgZGVmIHNsZWVwZXJfZ2VuKCk6CisgICAgICAgICAgICAiIiJBIGdlbmVyYXRvciB0aGF0IHJlbGVhc2VzIHRoZSBHSUwgd2hlbiBjbG9zZWQgb3IgZGVhbGxvYydlZC4iIiIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDAwMDAxKQorCisgICAgICAgIGNsYXNzIEMobGlzdCk6CisgICAgICAgICAgICAjIEFwcGVuZGluZyB0byBhIGxpc3QgaXMgYXRvbWljLCB3aGljaCBhdm9pZHMgdGhlIHVzZSBvZiBhIGxvY2suCisgICAgICAgICAgICBpbml0cyA9IFtdCisgICAgICAgICAgICBkZWxzID0gW10KKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhbGlzdCk6CisgICAgICAgICAgICAgICAgc2VsZls6XSA9IGFsaXN0CisgICAgICAgICAgICAgICAgQy5pbml0cy5hcHBlbmQoTm9uZSkKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgVGhpcyBfX2RlbF9fIGlzIGNhbGxlZCBieSBzdWJ0eXBlX2RlYWxsb2MoKS4KKyAgICAgICAgICAgICAgICBDLmRlbHMuYXBwZW5kKE5vbmUpCisgICAgICAgICAgICAgICAgIyBgZ2Agd2lsbCByZWxlYXNlIHRoZSBHSUwgd2hlbiBnYXJiYWdlLWNvbGxlY3RlZC4gIFRoaXMKKyAgICAgICAgICAgICAgICAjIGhlbHBzIGFzc2VydCBzdWJ0eXBlX2RlYWxsb2MncyBiZWhhdmlvdXIgd2hlbiB0aHJlYWRzCisgICAgICAgICAgICAgICAgIyBzd2l0Y2ggaW4gdGhlIG1pZGRsZSBvZiBpdC4KKyAgICAgICAgICAgICAgICBnID0gc2xlZXBlcl9nZW4oKQorICAgICAgICAgICAgICAgIG5leHQoZykKKyAgICAgICAgICAgICAgICAjIE5vdyB0aGF0IF9fZGVsX18gaXMgZmluaXNoZWQsIHN1YnR5cGVfZGVhbGxvYyB3aWxsIHByb2NlZWQKKyAgICAgICAgICAgICAgICAjIHRvIGNhbGwgbGlzdF9kZWFsbG9jLCB3aGljaCBhbHNvIHVzZXMgdGhlIHRyYXNoY2FuIG1lY2hhbmlzbS4KKworICAgICAgICBkZWYgbWFrZV9uZXN0ZWQoKToKKyAgICAgICAgICAgICIiIkNyZWF0ZSBhIHN1ZmZpY2llbnRseSBuZXN0ZWQgY29udGFpbmVyIG9iamVjdCBzbyB0aGF0IHRoZQorICAgICAgICAgICAgdHJhc2hjYW4gbWVjaGFuaXNtIGlzIGludm9rZWQgd2hlbiBkZWFsbG9jYXRpbmcgaXQuIiIiCisgICAgICAgICAgICB4ID0gQyhbXSkKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE5FU1RJTkcpOgorICAgICAgICAgICAgICAgIHggPSBbQyhbeF0pXQorICAgICAgICAgICAgZGVsIHgKKworICAgICAgICBkZWYgcnVuX3RocmVhZCgpOgorICAgICAgICAgICAgIiIiRXhlcmNpc2UgbWFrZV9uZXN0ZWQoKSBpbiBhIGxvb3AuIiIiCisgICAgICAgICAgICB3aGlsZSBub3QgZXhpdDoKKyAgICAgICAgICAgICAgICBtYWtlX25lc3RlZCgpCisKKyAgICAgICAgb2xkX2NoZWNraW50ZXJ2YWwgPSBzeXMuZ2V0Y2hlY2tpbnRlcnZhbCgpCisgICAgICAgIHN5cy5zZXRjaGVja2ludGVydmFsKDMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4aXQgPSBGYWxzZQorICAgICAgICAgICAgdGhyZWFkcyA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShOX1RIUkVBRFMpOgorICAgICAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ydW5fdGhyZWFkKQorICAgICAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHQpCisgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgdGltZS5zbGVlcCgxLjApCisgICAgICAgICAgICBleGl0ID0gVHJ1ZQorICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnNldGNoZWNraW50ZXJ2YWwob2xkX2NoZWNraW50ZXJ2YWwpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihDLmluaXRzKSwgbGVuKEMuZGVscykpCisKKyAgICBkZWYgdGVzdF9ib29tKHNlbGYpOgorICAgICAgICBjbGFzcyBCb29tOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIHNvbWVhdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLmF0dHIKKyAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorCisgICAgICAgIGEgPSBCb29tKCkKKyAgICAgICAgYiA9IEJvb20oKQorICAgICAgICBhLmF0dHIgPSBiCisgICAgICAgIGIuYXR0ciA9IGEKKworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZ2FyYmFnZWxlbiA9IGxlbihnYy5nYXJiYWdlKQorICAgICAgICBkZWwgYSwgYgorICAgICAgICAjIGE8LT5iIGFyZSBpbiBhIHRyYXNoIGN5Y2xlIG5vdy4gIENvbGxlY3Rpb24gd2lsbCBpbnZva2UKKyAgICAgICAgIyBCb29tLl9fZ2V0YXR0cl9fICh0byBzZWUgd2hldGhlciBhIGFuZCBiIGhhdmUgX19kZWxfXyBtZXRob2RzKSwgYW5kCisgICAgICAgICMgX19nZXRhdHRyX18gZGVsZXRlcyB0aGUgaW50ZXJuYWwgImF0dHIiIGF0dHJpYnV0ZXMgYXMgYSBzaWRlIGVmZmVjdC4KKyAgICAgICAgIyBUaGF0IGNhdXNlcyB0aGUgdHJhc2ggY3ljbGUgdG8gZ2V0IHJlY2xhaW1lZCB2aWEgcmVmY291bnRzIGZhbGxpbmcgdG8KKyAgICAgICAgIyAwLCB0aHVzIG11dGF0aW5nIHRoZSB0cmFzaCBncmFwaCBhcyBhIHNpZGUgZWZmZWN0IG9mIG1lcmVseSBhc2tpbmcKKyAgICAgICAgIyB3aGV0aGVyIF9fZGVsX18gZXhpc3RzLiAgVGhpcyB1c2VkIHRvIChiZWZvcmUgMi4zYjEpIGNyYXNoIFB5dGhvbi4KKyAgICAgICAgIyBOb3cgX19nZXRhdHRyX18gaXNuJ3QgY2FsbGVkLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmNvbGxlY3QoKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZ2MuZ2FyYmFnZSksIGdhcmJhZ2VsZW4pCisKKyAgICBkZWYgdGVzdF9ib29tMihzZWxmKToKKyAgICAgICAgY2xhc3MgQm9vbTI6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi54ID0gMAorCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgc29tZWF0dHJpYnV0ZSk6CisgICAgICAgICAgICAgICAgc2VsZi54ICs9IDEKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnggPiAxOgorICAgICAgICAgICAgICAgICAgICBkZWwgc2VsZi5hdHRyCisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKworICAgICAgICBhID0gQm9vbTIoKQorICAgICAgICBiID0gQm9vbTIoKQorICAgICAgICBhLmF0dHIgPSBiCisgICAgICAgIGIuYXR0ciA9IGEKKworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZ2FyYmFnZWxlbiA9IGxlbihnYy5nYXJiYWdlKQorICAgICAgICBkZWwgYSwgYgorICAgICAgICAjIE11Y2ggbGlrZSB0ZXN0X2Jvb20oKSwgZXhjZXB0IHRoYXQgX19nZXRhdHRyX18gZG9lc24ndCBicmVhayB0aGUKKyAgICAgICAgIyBjeWNsZSB1bnRpbCB0aGUgc2Vjb25kIHRpbWUgZ2MgY2hlY2tzIGZvciBfX2RlbF9fLiAgQXMgb2YgMi4zYjEsCisgICAgICAgICMgdGhlcmUgaXNuJ3QgYSBzZWNvbmQgdGltZSwgc28gdGhpcyBzaW1wbHkgY2xlYW5zIHVwIHRoZSB0cmFzaCBjeWNsZS4KKyAgICAgICAgIyBXZSBleHBlY3QgYSwgYiwgYS5fX2RpY3RfXyBhbmQgYi5fX2RpY3RfXyAoNCBvYmplY3RzKSB0byBnZXQKKyAgICAgICAgIyByZWNsYWltZWQgdGhpcyB3YXkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuY29sbGVjdCgpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnYy5nYXJiYWdlKSwgZ2FyYmFnZWxlbikKKworICAgIGRlZiB0ZXN0X2Jvb21fbmV3KHNlbGYpOgorICAgICAgICAjIGJvb21fX25ldyBhbmQgYm9vbTJfbmV3IGFyZSBleGFjdGx5IGxpa2UgYm9vbSBhbmQgYm9vbTIsIGV4Y2VwdCB1c2UKKyAgICAgICAgIyBuZXctc3R5bGUgY2xhc3Nlcy4KKworICAgICAgICBjbGFzcyBCb29tX05ldyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIHNvbWVhdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLmF0dHIKKyAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorCisgICAgICAgIGEgPSBCb29tX05ldygpCisgICAgICAgIGIgPSBCb29tX05ldygpCisgICAgICAgIGEuYXR0ciA9IGIKKyAgICAgICAgYi5hdHRyID0gYQorCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBnYXJiYWdlbGVuID0gbGVuKGdjLmdhcmJhZ2UpCisgICAgICAgIGRlbCBhLCBiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuY29sbGVjdCgpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnYy5nYXJiYWdlKSwgZ2FyYmFnZWxlbikKKworICAgIGRlZiB0ZXN0X2Jvb20yX25ldyhzZWxmKToKKyAgICAgICAgY2xhc3MgQm9vbTJfTmV3KG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi54ID0gMAorCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgc29tZWF0dHJpYnV0ZSk6CisgICAgICAgICAgICAgICAgc2VsZi54ICs9IDEKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnggPiAxOgorICAgICAgICAgICAgICAgICAgICBkZWwgc2VsZi5hdHRyCisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKworICAgICAgICBhID0gQm9vbTJfTmV3KCkKKyAgICAgICAgYiA9IEJvb20yX05ldygpCisgICAgICAgIGEuYXR0ciA9IGIKKyAgICAgICAgYi5hdHRyID0gYQorCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBnYXJiYWdlbGVuID0gbGVuKGdjLmdhcmJhZ2UpCisgICAgICAgIGRlbCBhLCBiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuY29sbGVjdCgpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnYy5nYXJiYWdlKSwgZ2FyYmFnZWxlbikKKworICAgIGRlZiB0ZXN0X2dldF9yZWZlcmVudHMoc2VsZik6CisgICAgICAgIGFsaXN0ID0gWzEsIDMsIDVdCisgICAgICAgIGdvdCA9IGdjLmdldF9yZWZlcmVudHMoYWxpc3QpCisgICAgICAgIGdvdC5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGFsaXN0KQorCisgICAgICAgIGF0dXBsZSA9IHR1cGxlKGFsaXN0KQorICAgICAgICBnb3QgPSBnYy5nZXRfcmVmZXJlbnRzKGF0dXBsZSkKKyAgICAgICAgZ290LnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgYWxpc3QpCisKKyAgICAgICAgYWRpY3QgPSB7MTogMywgNTogN30KKyAgICAgICAgZXhwZWN0ZWQgPSBbMSwgMywgNSwgN10KKyAgICAgICAgZ290ID0gZ2MuZ2V0X3JlZmVyZW50cyhhZGljdCkKKyAgICAgICAgZ290LnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCisKKyAgICAgICAgZ290ID0gZ2MuZ2V0X3JlZmVyZW50cyhbMSwgMl0sIHszOiA0fSwgKDAsIDAsIDApKQorICAgICAgICBnb3Quc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBbMCwgMF0gKyByYW5nZSg1KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmdldF9yZWZlcmVudHMoMSwgJ2EnLCA0aiksIFtdKQorCisgICAgZGVmIHRlc3RfaXNfdHJhY2tlZChzZWxmKToKKyAgICAgICAgIyBBdG9taWMgYnVpbHQtaW4gdHlwZXMgYXJlIG5vdCB0cmFja2VkLCB1c2VyLWRlZmluZWQgb2JqZWN0cyBhbmQKKyAgICAgICAgIyBtdXRhYmxlIGNvbnRhaW5lcnMgYXJlLgorICAgICAgICAjIE5PVEU6IHR5cGVzIHdpdGggc3BlY2lhbCBvcHRpbWl6YXRpb25zIChlLmcuIHR1cGxlKSBoYXZlIHRlc3RzCisgICAgICAgICMgaW4gdGhlaXIgb3duIHRlc3QgZmlsZXMgaW5zdGVhZC4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZCgxLjApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQoMS4wICsgNS4waikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChUcnVlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKEZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKCJhIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZCh1ImEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKGJ5dGVhcnJheSgiYSIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKHR5cGUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQoaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKG9iamVjdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChvYmplY3QoKSkpCisKKyAgICAgICAgY2xhc3MgT2xkU3R5bGU6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIE5ld1N0eWxlKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc190cmFja2VkKGdjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQoT2xkU3R5bGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZChPbGRTdHlsZSgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQoTmV3U3R5bGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZChOZXdTdHlsZSgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQoW10pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZChzZXQoKSkpCisKKyAgICBkZWYgdGVzdF9idWcxMDU1ODIwYihzZWxmKToKKyAgICAgICAgIyBDb3JyZXNwb25kcyB0byB0ZW1wMmIucHkgaW4gdGhlIGJ1ZyByZXBvcnQuCisKKyAgICAgICAgb3VjaCA9IFtdCisgICAgICAgIGRlZiBjYWxsYmFjayhpZ25vcmVkKToKKyAgICAgICAgICAgIG91Y2hbOl0gPSBbd3IoKSBmb3Igd3IgaW4gV1JzXQorCisgICAgICAgIENzID0gW0MxMDU1ODIwKGkpIGZvciBpIGluIHJhbmdlKDIpXQorICAgICAgICBXUnMgPSBbd2Vha3JlZi5yZWYoYywgY2FsbGJhY2spIGZvciBjIGluIENzXQorICAgICAgICBjID0gTm9uZQorCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdWNoKSwgMCkKKyAgICAgICAgIyBNYWtlIHRoZSB0d28gaW5zdGFuY2VzIHRyYXNoLCBhbmQgY29sbGVjdCBhZ2Fpbi4gIFRoZSBidWcgd2FzIHRoYXQKKyAgICAgICAgIyB0aGUgY2FsbGJhY2sgbWF0ZXJpYWxpemVkIGEgc3Ryb25nIHJlZmVyZW5jZSB0byBhbiBpbnN0YW5jZSwgYnV0IGdjCisgICAgICAgICMgY2xlYXJlZCB0aGUgaW5zdGFuY2UncyBkaWN0IGFueXdheS4KKyAgICAgICAgQ3MgPSBOb25lCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdWNoKSwgMikgICMgZWxzZSB0aGUgY2FsbGJhY2tzIGRpZG4ndCBydW4KKyAgICAgICAgZm9yIHggaW4gb3VjaDoKKyAgICAgICAgICAgICMgSWYgdGhlIGNhbGxiYWNrIHJlc3VycmVjdGVkIG9uZSBvZiB0aGVzZSBndXlzLCB0aGUgaW5zdGFuY2UKKyAgICAgICAgICAgICMgd291bGQgYmUgZGFtYWdlZCwgd2l0aCBhbiBlbXB0eSBfX2RpY3RfXy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgTm9uZSkKKworY2xhc3MgR0NUb2dnbGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGdjLmVuYWJsZSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGdjLmRpc2FibGUoKQorCisgICAgZGVmIHRlc3RfYnVnMTA1NTgyMGMoc2VsZik6CisgICAgICAgICMgQ29ycmVzcG9uZHMgdG8gdGVtcDJjLnB5IGluIHRoZSBidWcgcmVwb3J0LiAgVGhpcyBpcyBwcmV0dHkKKyAgICAgICAgIyBlbGFib3JhdGUuCisKKyAgICAgICAgYzAgPSBDMTA1NTgyMCgwKQorICAgICAgICAjIE1vdmUgYzAgaW50byBnZW5lcmF0aW9uIDIuCisgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgICAgIGMxID0gQzEwNTU4MjAoMSkKKyAgICAgICAgYzEua2VlcF9jMF9hbGl2ZSA9IGMwCisgICAgICAgIGRlbCBjMC5sb29wICMgbm93IG9ubHkgYzEga2VlcHMgYzAgYWxpdmUKKworICAgICAgICBjMiA9IEMxMDU1ODIwKDIpCisgICAgICAgIGMyd3IgPSB3ZWFrcmVmLnJlZihjMikgIyBubyBjYWxsYmFjayEKKworICAgICAgICBvdWNoID0gW10KKyAgICAgICAgZGVmIGNhbGxiYWNrKGlnbm9yZWQpOgorICAgICAgICAgICAgb3VjaFs6XSA9IFtjMndyKCldCisKKyAgICAgICAgIyBUaGUgY2FsbGJhY2sgZ2V0cyBhc3NvY2lhdGVkIHdpdGggYSB3ciBvbiBhbiBvYmplY3QgaW4gZ2VuZXJhdGlvbiAyLgorICAgICAgICBjMHdyID0gd2Vha3JlZi5yZWYoYzAsIGNhbGxiYWNrKQorCisgICAgICAgIGMwID0gYzEgPSBjMiA9IE5vbmUKKworICAgICAgICAjIFdoYXQgd2UndmUgc2V0IHVwOiAgYzAsIGMxLCBhbmQgYzIgYXJlIGFsbCB0cmFzaCBub3cuICBjMCBpcyBpbgorICAgICAgICAjIGdlbmVyYXRpb24gMi4gIFRoZSBvbmx5IHRoaW5nIGtlZXBpbmcgaXQgYWxpdmUgaXMgdGhhdCBjMSBwb2ludHMgdG8KKyAgICAgICAgIyBpdC4gYzEgYW5kIGMyIGFyZSBpbiBnZW5lcmF0aW9uIDAsIGFuZCBhcmUgaW4gc2VsZi1sb29wcy4gIFRoZXJlJ3MgYQorICAgICAgICAjIGdsb2JhbCB3ZWFrcmVmIHRvIGMyIChjMndyKSwgYnV0IHRoYXQgd2Vha3JlZiBoYXMgbm8gY2FsbGJhY2suCisgICAgICAgICMgVGhlcmUncyBhbHNvIGEgZ2xvYmFsIHdlYWtyZWYgdG8gYzAgKGMwd3IpLCBhbmQgdGhhdCBkb2VzIGhhdmUgYQorICAgICAgICAjIGNhbGxiYWNrLCBhbmQgdGhhdCBjYWxsYmFjayByZWZlcmVuY2VzIGMyIHZpYSBjMndyKCkuCisgICAgICAgICMKKyAgICAgICAgIyAgICAgICAgICAgICAgIGMwIGhhcyBhIHdyIHdpdGggY2FsbGJhY2ssIHdoaWNoIHJlZmVyZW5jZXMgYzJ3cgorICAgICAgICAjICAgICAgICAgICAgICAgXgorICAgICAgICAjICAgICAgICAgICAgICAgfAorICAgICAgICAjICAgICAgICAgICAgICAgfCAgICAgR2VuZXJhdGlvbiAyIGFib3ZlIGRvdHMKKyAgICAgICAgIy4gLiAuIC4gLiAuIC4gLnwuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLgorICAgICAgICAjICAgICAgICAgICAgICAgfCAgICAgR2VuZXJhdGlvbiAwIGJlbG93IGRvdHMKKyAgICAgICAgIyAgICAgICAgICAgICAgIHwKKyAgICAgICAgIyAgICAgICAgICAgICAgIHwKKyAgICAgICAgIyAgICAgICAgICAgIF4tPmMxICAgXi0+YzIgaGFzIGEgd3IgYnV0IG5vIGNhbGxiYWNrCisgICAgICAgICMgICAgICAgICAgICB8ICB8ICAgIHwgIHwKKyAgICAgICAgIyAgICAgICAgICAgIDwtLXYgICAgPC0tdgorICAgICAgICAjCisgICAgICAgICMgU28gdGhpcyBpcyB0aGUgbmlnaHRtYXJlOiAgd2hlbiBnZW5lcmF0aW9uIDAgZ2V0cyBjb2xsZWN0ZWQsIHdlIHNlZQorICAgICAgICAjIHRoYXQgYzIgaGFzIGEgY2FsbGJhY2stZnJlZSB3ZWFrcmVmLCBhbmQgYzEgZG9lc24ndCBldmVuIGhhdmUgYQorICAgICAgICAjIHdlYWtyZWYuICBDb2xsZWN0aW5nIGdlbmVyYXRpb24gMCBkb2Vzbid0IHNlZSBjMCBhdCBhbGwsIGFuZCBjMCBpcworICAgICAgICAjIHRoZSBvbmx5IG9iamVjdCB0aGF0IGhhcyBhIHdlYWtyZWYgd2l0aCBhIGNhbGxiYWNrLiAgZ2MgY2xlYXJzIGMxCisgICAgICAgICMgYW5kIGMyLiAgQ2xlYXJpbmcgYzEgaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBkcm9wcGluZyB0aGUgcmVmY291bnQgb24KKyAgICAgICAgIyBjMCB0byAwLCBzbyBjMCBnb2VzIGF3YXkgKGRlc3BpdGUgdGhhdCBpdCdzIGluIGFuIG9sZGVyIGdlbmVyYXRpb24pCisgICAgICAgICMgYW5kIGMwJ3Mgd3IgY2FsbGJhY2sgdHJpZ2dlcnMuICBUaGF0IGluIHR1cm4gbWF0ZXJpYWxpemVzIGEgcmVmZXJlbmNlCisgICAgICAgICMgdG8gYzIgdmlhIGMyd3IoKSwgYnV0IGMyIGdldHMgY2xlYXJlZCBhbnl3YXkgYnkgZ2MuCisKKyAgICAgICAgIyBXZSB3YW50IHRvIGxldCBnYyBoYXBwZW4gIm5hdHVyYWxseSIsIHRvIHByZXNlcnZlIHRoZSBkaXN0aW5jdGlvbgorICAgICAgICAjIGJldHdlZW4gZ2VuZXJhdGlvbnMuCisgICAgICAgIGp1bmsgPSBbXQorICAgICAgICBpID0gMAorICAgICAgICBkZXRlY3RvciA9IEdDX0RldGVjdG9yKCkKKyAgICAgICAgd2hpbGUgbm90IGRldGVjdG9yLmdjX2hhcHBlbmVkOgorICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICBpZiBpID4gMTAwMDA6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJnYyBkaWRuJ3QgaGFwcGVuIGFmdGVyIDEwMDAwIGl0ZXJhdGlvbnMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3VjaCksIDApCisgICAgICAgICAgICBqdW5rLmFwcGVuZChbXSkgICMgdGhpcyB3aWxsIGV2ZW50dWFsbHkgdHJpZ2dlciBnYworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG91Y2gpLCAxKSAgIyBlbHNlIHRoZSBjYWxsYmFjayB3YXNuJ3QgaW52b2tlZAorICAgICAgICBmb3IgeCBpbiBvdWNoOgorICAgICAgICAgICAgIyBJZiB0aGUgY2FsbGJhY2sgcmVzdXJyZWN0ZWQgYzIsIHRoZSBpbnN0YW5jZSB3b3VsZCBiZSBkYW1hZ2VkLAorICAgICAgICAgICAgIyB3aXRoIGFuIGVtcHR5IF9fZGljdF9fLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBOb25lKQorCisgICAgZGVmIHRlc3RfYnVnMTA1NTgyMGQoc2VsZik6CisgICAgICAgICMgQ29ycmVzcG9uZHMgdG8gdGVtcDJkLnB5IGluIHRoZSBidWcgcmVwb3J0LiAgVGhpcyBpcyB2ZXJ5IG11Y2ggbGlrZQorICAgICAgICAjIHRlc3RfYnVnMTA1NTgyMGMsIGJ1dCB1c2VzIGEgX19kZWxfXyBtZXRob2QgaW5zdGVhZCBvZiBhIHdlYWtyZWYKKyAgICAgICAgIyBjYWxsYmFjayB0byBzbmVhayBpbiBhIHJlc3VycmVjdGlvbiBvZiBjeWNsaWMgdHJhc2guCisKKyAgICAgICAgb3VjaCA9IFtdCisgICAgICAgIGNsYXNzIEQoQzEwNTU4MjApOgorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgb3VjaFs6XSA9IFtjMndyKCldCisKKyAgICAgICAgZDAgPSBEKDApCisgICAgICAgICMgTW92ZSBhbGwgdGhlIGFib3ZlIGludG8gZ2VuZXJhdGlvbiAyLgorICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgICAgICBjMSA9IEMxMDU1ODIwKDEpCisgICAgICAgIGMxLmtlZXBfZDBfYWxpdmUgPSBkMAorICAgICAgICBkZWwgZDAubG9vcCAjIG5vdyBvbmx5IGMxIGtlZXBzIGQwIGFsaXZlCisKKyAgICAgICAgYzIgPSBDMTA1NTgyMCgyKQorICAgICAgICBjMndyID0gd2Vha3JlZi5yZWYoYzIpICMgbm8gY2FsbGJhY2shCisKKyAgICAgICAgZDAgPSBjMSA9IGMyID0gTm9uZQorCisgICAgICAgICMgV2hhdCB3ZSd2ZSBzZXQgdXA6ICBkMCwgYzEsIGFuZCBjMiBhcmUgYWxsIHRyYXNoIG5vdy4gIGQwIGlzIGluCisgICAgICAgICMgZ2VuZXJhdGlvbiAyLiAgVGhlIG9ubHkgdGhpbmcga2VlcGluZyBpdCBhbGl2ZSBpcyB0aGF0IGMxIHBvaW50cyB0bworICAgICAgICAjIGl0LiAgYzEgYW5kIGMyIGFyZSBpbiBnZW5lcmF0aW9uIDAsIGFuZCBhcmUgaW4gc2VsZi1sb29wcy4gIFRoZXJlJ3MKKyAgICAgICAgIyBhIGdsb2JhbCB3ZWFrcmVmIHRvIGMyIChjMndyKSwgYnV0IHRoYXQgd2Vha3JlZiBoYXMgbm8gY2FsbGJhY2suCisgICAgICAgICMgVGhlcmUgYXJlIG5vIG90aGVyIHdlYWtyZWZzLgorICAgICAgICAjCisgICAgICAgICMgICAgICAgICAgICAgICBkMCBoYXMgYSBfX2RlbF9fIG1ldGhvZCB0aGF0IHJlZmVyZW5jZXMgYzJ3cgorICAgICAgICAjICAgICAgICAgICAgICAgXgorICAgICAgICAjICAgICAgICAgICAgICAgfAorICAgICAgICAjICAgICAgICAgICAgICAgfCAgICAgR2VuZXJhdGlvbiAyIGFib3ZlIGRvdHMKKyAgICAgICAgIy4gLiAuIC4gLiAuIC4gLnwuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLgorICAgICAgICAjICAgICAgICAgICAgICAgfCAgICAgR2VuZXJhdGlvbiAwIGJlbG93IGRvdHMKKyAgICAgICAgIyAgICAgICAgICAgICAgIHwKKyAgICAgICAgIyAgICAgICAgICAgICAgIHwKKyAgICAgICAgIyAgICAgICAgICAgIF4tPmMxICAgXi0+YzIgaGFzIGEgd3IgYnV0IG5vIGNhbGxiYWNrCisgICAgICAgICMgICAgICAgICAgICB8ICB8ICAgIHwgIHwKKyAgICAgICAgIyAgICAgICAgICAgIDwtLXYgICAgPC0tdgorICAgICAgICAjCisgICAgICAgICMgU28gdGhpcyBpcyB0aGUgbmlnaHRtYXJlOiAgd2hlbiBnZW5lcmF0aW9uIDAgZ2V0cyBjb2xsZWN0ZWQsIHdlIHNlZQorICAgICAgICAjIHRoYXQgYzIgaGFzIGEgY2FsbGJhY2stZnJlZSB3ZWFrcmVmLCBhbmQgYzEgZG9lc24ndCBldmVuIGhhdmUgYQorICAgICAgICAjIHdlYWtyZWYuICBDb2xsZWN0aW5nIGdlbmVyYXRpb24gMCBkb2Vzbid0IHNlZSBkMCBhdCBhbGwuICBnYyBjbGVhcnMKKyAgICAgICAgIyBjMSBhbmQgYzIuICBDbGVhcmluZyBjMSBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIGRyb3BwaW5nIHRoZSByZWZjb3VudAorICAgICAgICAjIG9uIGQwIHRvIDAsIHNvIGQwIGdvZXMgYXdheSAoZGVzcGl0ZSB0aGF0IGl0J3MgaW4gYW4gb2xkZXIKKyAgICAgICAgIyBnZW5lcmF0aW9uKSBhbmQgZDAncyBfX2RlbF9fIHRyaWdnZXJzLiAgVGhhdCBpbiB0dXJuIG1hdGVyaWFsaXplcworICAgICAgICAjIGEgcmVmZXJlbmNlIHRvIGMyIHZpYSBjMndyKCksIGJ1dCBjMiBnZXRzIGNsZWFyZWQgYW55d2F5IGJ5IGdjLgorCisgICAgICAgICMgV2Ugd2FudCB0byBsZXQgZ2MgaGFwcGVuICJuYXR1cmFsbHkiLCB0byBwcmVzZXJ2ZSB0aGUgZGlzdGluY3Rpb24KKyAgICAgICAgIyBiZXR3ZWVuIGdlbmVyYXRpb25zLgorICAgICAgICBkZXRlY3RvciA9IEdDX0RldGVjdG9yKCkKKyAgICAgICAganVuayA9IFtdCisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIG5vdCBkZXRlY3Rvci5nY19oYXBwZW5lZDoKKyAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgaWYgaSA+IDEwMDAwOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZ2MgZGlkbid0IGhhcHBlbiBhZnRlciAxMDAwMCBpdGVyYXRpb25zIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG91Y2gpLCAwKQorICAgICAgICAgICAganVuay5hcHBlbmQoW10pICAjIHRoaXMgd2lsbCBldmVudHVhbGx5IHRyaWdnZXIgZ2MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdWNoKSwgMSkgICMgZWxzZSBfX2RlbF9fIHdhc24ndCBpbnZva2VkCisgICAgICAgIGZvciB4IGluIG91Y2g6CisgICAgICAgICAgICAjIElmIF9fZGVsX18gcmVzdXJyZWN0ZWQgYzIsIHRoZSBpbnN0YW5jZSB3b3VsZCBiZSBkYW1hZ2VkLCB3aXRoIGFuCisgICAgICAgICAgICAjIGVtcHR5IF9fZGljdF9fLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBOb25lKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgZW5hYmxlZCA9IGdjLmlzZW5hYmxlZCgpCisgICAgZ2MuZGlzYWJsZSgpCisgICAgYXNzZXJ0IG5vdCBnYy5pc2VuYWJsZWQoKQorICAgIGRlYnVnID0gZ2MuZ2V0X2RlYnVnKCkKKyAgICBnYy5zZXRfZGVidWcoZGVidWcgJiB+Z2MuREVCVUdfTEVBSykgIyB0aGlzIHRlc3QgaXMgc3VwcG9zZWQgdG8gbGVhaworCisgICAgdHJ5OgorICAgICAgICBnYy5jb2xsZWN0KCkgIyBEZWxldGUgMm5kIGdlbmVyYXRpb24gZ2FyYmFnZQorICAgICAgICBydW5fdW5pdHRlc3QoR0NUZXN0cywgR0NUb2dnbGluZ1Rlc3RzKQorICAgIGZpbmFsbHk6CisgICAgICAgIGdjLnNldF9kZWJ1ZyhkZWJ1ZykKKyAgICAgICAgIyB0ZXN0IGdjLmVuYWJsZSgpIGV2ZW4gaWYgR0MgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdAorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgInJlc3RvcmluZyBhdXRvbWF0aWMgY29sbGVjdGlvbiIKKyAgICAgICAgIyBtYWtlIHN1cmUgdG8gYWx3YXlzIHRlc3QgZ2MuZW5hYmxlKCkKKyAgICAgICAgZ2MuZW5hYmxlKCkKKyAgICAgICAgYXNzZXJ0IGdjLmlzZW5hYmxlZCgpCisgICAgICAgIGlmIG5vdCBlbmFibGVkOgorICAgICAgICAgICAgZ2MuZGlzYWJsZSgpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2dkYi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2dkYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzAyYjVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZ2RiLnB5CkBAIC0wLDAgKzEsNzYxIEBACisjIFZlcmlmeSB0aGF0IGdkYiBjYW4gcHJldHR5LXByaW50IHRoZSB2YXJpb3VzIFB5T2JqZWN0KiB0eXBlcworIworIyBUaGUgY29kZSBmb3IgdGVzdGluZyBnZGIgd2FzIGFkYXB0ZWQgZnJvbSBzaW1pbGFyIHdvcmsgaW4gVW5sYWRlbiBTd2FsbG93J3MKKyMgTGliL3Rlc3QvdGVzdF9qaXRfZ2RiLnB5CisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzY29uZmlnCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgZmluZGZpbGUKKwordHJ5OgorICAgIGdkYl92ZXJzaW9uLCBfID0gc3VicHJvY2Vzcy5Qb3BlbihbImdkYiIsICItLXZlcnNpb24iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKQorZXhjZXB0IE9TRXJyb3I6CisgICAgIyBUaGlzIGlzIHdoYXQgIm5vIGdkYiIgbG9va3MgbGlrZS4gIFRoZXJlIG1heSwgaG93ZXZlciwgYmUgb3RoZXIKKyAgICAjIGVycm9ycyB0aGF0IG1hbmlmZXN0IHRoaXMgd2F5IHRvby4KKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ291bGRuJ3QgZmluZCBnZGIgb24gdGhlIHBhdGgiKQorZ2RiX3ZlcnNpb25fbnVtYmVyID0gcmUuc2VhcmNoKCJeR05VIGdkYiBbXlxkXSooXGQrKVwuKFxkKSIsIGdkYl92ZXJzaW9uKQorZ2RiX21ham9yX3ZlcnNpb24gPSBpbnQoZ2RiX3ZlcnNpb25fbnVtYmVyLmdyb3VwKDEpKQorZ2RiX21pbm9yX3ZlcnNpb24gPSBpbnQoZ2RiX3ZlcnNpb25fbnVtYmVyLmdyb3VwKDIpKQoraWYgZ2RiX21ham9yX3ZlcnNpb24gPCA3OgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJnZGIgdmVyc2lvbnMgYmVmb3JlIDcuMCBkaWRuJ3Qgc3VwcG9ydCBweXRob24gZW1iZWRkaW5nIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgU2F3OlxuIiArIGdkYl92ZXJzaW9uKQorCisjIExvY2F0aW9uIG9mIGN1c3RvbSBob29rcyBmaWxlIGluIGEgcmVwb3NpdG9yeSBjaGVja291dC4KK2NoZWNrb3V0X2hvb2tfcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmV4ZWN1dGFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweXRob24tZ2RiLnB5JykKKworZGVmIHJ1bl9nZGIoKmFyZ3MsICoqZW52X3ZhcnMpOgorICAgICIiIlJ1bnMgZ2RiIGluIC0tYmF0Y2ggbW9kZSB3aXRoIHRoZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBnaXZlbiBieSAqYXJncy4KKworICAgIFJldHVybnMgaXRzIChzdGRvdXQsIHN0ZGVycikKKyAgICAiIiIKKyAgICBpZiBlbnZfdmFyczoKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52LnVwZGF0ZShlbnZfdmFycykKKyAgICBlbHNlOgorICAgICAgICBlbnYgPSBOb25lCisgICAgYmFzZV9jbWQgPSAoJ2dkYicsICctLWJhdGNoJykKKyAgICBpZiAoZ2RiX21ham9yX3ZlcnNpb24sIGdkYl9taW5vcl92ZXJzaW9uKSA+PSAoNywgNCk6CisgICAgICAgIGJhc2VfY21kICs9ICgnLWlleCcsICdhZGQtYXV0by1sb2FkLXNhZmUtcGF0aCAnICsgY2hlY2tvdXRfaG9va19wYXRoKQorICAgIG91dCwgZXJyID0gc3VicHJvY2Vzcy5Qb3BlbihiYXNlX2NtZCArIGFyZ3MsCisgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIGVudj1lbnYsCisgICAgICAgICkuY29tbXVuaWNhdGUoKQorICAgIHJldHVybiBvdXQsIGVycgorCisjIFZlcmlmeSB0aGF0ICJnZGIiIHdhcyBidWlsdCB3aXRoIHRoZSBlbWJlZGRlZCBweXRob24gc3VwcG9ydCBlbmFibGVkOgorZ2RicHlfdmVyc2lvbiwgXyA9IHJ1bl9nZGIoIi0tZXZhbC1jb21tYW5kPXB5dGhvbiBpbXBvcnQgc3lzOyBwcmludCBzeXMudmVyc2lvbl9pbmZvIikKK2lmIG5vdCBnZGJweV92ZXJzaW9uOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJnZGIgbm90IGJ1aWx0IHdpdGggZW1iZWRkZWQgcHl0aG9uIHN1cHBvcnQiKQorCisjIFZlcmlmeSB0aGF0ICJnZGIiIGNhbiBsb2FkIG91ciBjdXN0b20gaG9va3MuICBJbiB0aGVvcnkgdGhpcyBzaG91bGQgbmV2ZXIKKyMgZmFpbCwgYnV0IHdlIGRvbid0IGhhbmRsZSB0aGUgY2FzZSBvZiB0aGUgaG9va3MgZmlsZSBub3QgZXhpc3RpbmcgaWYgdGhlCisjIHRlc3RzIGFyZSBydW4gZnJvbSBhbiBpbnN0YWxsZWQgUHl0aG9uICh3ZSdsbCBwcm9kdWNlIGZhaWx1cmVzIGluIHRoYXQgY2FzZSkuCitjbWQgPSBbJy0tYXJncycsIHN5cy5leGVjdXRhYmxlXQorXywgZ2RicHlfZXJyb3JzID0gcnVuX2dkYignLS1hcmdzJywgc3lzLmV4ZWN1dGFibGUpCitpZiAiYXV0by1sb2FkaW5nIGhhcyBiZWVuIGRlY2xpbmVkIiBpbiBnZGJweV9lcnJvcnM6CisgICAgbXNnID0gImdkYiBzZWN1cml0eSBzZXR0aW5ncyBwcmV2ZW50IHVzZSBvZiBjdXN0b20gaG9va3M6ICIKKworZGVmIHB5dGhvbl9pc19vcHRpbWl6ZWQoKToKKyAgICBjZmxhZ3MgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKClbJ1BZX0NGTEFHUyddCisgICAgZmluYWxfb3B0ID0gIiIKKyAgICBmb3Igb3B0IGluIGNmbGFncy5zcGxpdCgpOgorICAgICAgICBpZiBvcHQuc3RhcnRzd2l0aCgnLU8nKToKKyAgICAgICAgICAgIGZpbmFsX29wdCA9IG9wdAorICAgIHJldHVybiAoZmluYWxfb3B0IGFuZCBmaW5hbF9vcHQgIT0gJy1PMCcpCisKK2RlZiBnZGJfaGFzX2ZyYW1lX3NlbGVjdCgpOgorICAgICMgRG9lcyB0aGlzIGJ1aWxkIG9mIGdkYiBoYXZlIGdkYi5GcmFtZS5zZWxlY3QgPworICAgIHN0ZG91dCwgXyA9IHJ1bl9nZGIoIi0tZXZhbC1jb21tYW5kPXB5dGhvbiBwcmludChkaXIoZ2RiLkZyYW1lKSkiKQorICAgIG0gPSByZS5tYXRjaChyJy4qXFsoLiopXF0uKicsIHN0ZG91dCkKKyAgICBpZiBub3QgbToKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlVuYWJsZSB0byBwYXJzZSBvdXRwdXQgZnJvbSBnZGIuRnJhbWUuc2VsZWN0IHRlc3QiKQorICAgIGdkYl9mcmFtZV9kaXIgPSBtLmdyb3VwKDEpLnNwbGl0KCcsICcpCisgICAgcmV0dXJuICInc2VsZWN0JyIgaW4gZ2RiX2ZyYW1lX2RpcgorCitIQVNfUFlVUF9QWURPV04gPSBnZGJfaGFzX2ZyYW1lX3NlbGVjdCgpCisKK2NsYXNzIERlYnVnZ2VyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVGVzdCB0aGF0IHRoZSBkZWJ1Z2dlciBjYW4gZGVidWcgUHl0aG9uLiIiIgorCisgICAgZGVmIGdldF9zdGFja190cmFjZShzZWxmLCBzb3VyY2U9Tm9uZSwgc2NyaXB0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50PSdQeU9iamVjdF9QcmludCcsCisgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydF9zaXRlPUZhbHNlKToKKyAgICAgICAgJycnCisgICAgICAgIFJ1biAncHl0aG9uIC1jIFNPVVJDRScgdW5kZXIgZ2RiIHdpdGggYSBicmVha3BvaW50LgorCisgICAgICAgIFN1cHBvcnQgaW5qZWN0aW5nIGNvbW1hbmRzIGFmdGVyIHRoZSBicmVha3BvaW50IGlzIHJlYWNoZWQKKworICAgICAgICBSZXR1cm5zIHRoZSBzdGRvdXQgZnJvbSBnZGIKKworICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ6IGlmIHByb3ZpZGVkLCBhIGxpc3Qgb2Ygc3RyaW5nczogZ2RiIGNvbW1hbmRzCisgICAgICAgICcnJworICAgICAgICAjIFdlIHVzZSAic2V0IGJyZWFrcG9pbnQgcGVuZGluZyB5ZXMiIHRvIGF2b2lkIGJsb2NraW5nIHdpdGggYToKKyAgICAgICAgIyAgIEZ1bmN0aW9uICJmb28iIG5vdCBkZWZpbmVkLgorICAgICAgICAjICAgTWFrZSBicmVha3BvaW50IHBlbmRpbmcgb24gZnV0dXJlIHNoYXJlZCBsaWJyYXJ5IGxvYWQ/ICh5IG9yIFtuXSkKKyAgICAgICAgIyBlcnJvciwgd2hpY2ggdHlwaWNhbGx5IGhhcHBlbnMgcHl0aG9uIGlzIGR5bmFtaWNhbGx5IGxpbmtlZCAodGhlCisgICAgICAgICMgYnJlYWtwb2ludHMgb2YgaW50ZXJlc3QgYXJlIHRvIGJlIGZvdW5kIGluIHRoZSBzaGFyZWQgbGlicmFyeSkKKyAgICAgICAgIyBXaGVuIHRoaXMgaGFwcGVucywgd2Ugc3RpbGwgZ2V0OgorICAgICAgICAjICAgRnVuY3Rpb24gIlB5T2JqZWN0X1ByaW50IiBub3QgZGVmaW5lZC4KKyAgICAgICAgIyBlbWl0dGVkIHRvIHN0ZGVyciBlYWNoIHRpbWUsIGFsYXMuCisKKyAgICAgICAgIyBJbml0aWFsbHkgSSBoYWQgIi0tZXZhbC1jb21tYW5kPWNvbnRpbnVlIiBoZXJlLCBidXQgcmVtb3ZlZCBpdCB0bworICAgICAgICAjIGF2b2lkIHJlcGVhdGVkIHByaW50IGJyZWFrcG9pbnRzIHdoZW4gdHJhdmVyc2luZyBoaWVyYXJjaGljYWwgZGF0YQorICAgICAgICAjIHN0cnVjdHVyZXMKKworICAgICAgICAjIEdlbmVyYXRlIGEgbGlzdCBvZiBjb21tYW5kcyBpbiBnZGIncyBsYW5ndWFnZToKKyAgICAgICAgY29tbWFuZHMgPSBbJ3NldCBicmVha3BvaW50IHBlbmRpbmcgeWVzJywKKyAgICAgICAgICAgICAgICAgICAgJ2JyZWFrICVzJyAlIGJyZWFrcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICdydW4nXQorICAgICAgICBpZiBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ6CisgICAgICAgICAgICBjb21tYW5kcyArPSBjbWRzX2FmdGVyX2JyZWFrcG9pbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbW1hbmRzICs9IFsnYmFja3RyYWNlJ10KKworICAgICAgICAjIHByaW50IGNvbW1hbmRzCisKKyAgICAgICAgIyBVc2UgImNvbW1hbmRzIiB0byBnZW5lcmF0ZSB0aGUgYXJndW1lbnRzIHdpdGggd2hpY2ggdG8gaW52b2tlICJnZGIiOgorICAgICAgICBhcmdzID0gWyJnZGIiLCAiLS1iYXRjaCJdCisgICAgICAgIGFyZ3MgKz0gWyctLWV2YWwtY29tbWFuZD0lcycgJSBjbWQgZm9yIGNtZCBpbiBjb21tYW5kc10KKyAgICAgICAgYXJncyArPSBbIi0tYXJncyIsCisgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlXQorCisgICAgICAgIGlmIG5vdCBpbXBvcnRfc2l0ZToKKyAgICAgICAgICAgICMgLVMgc3VwcHJlc3NlcyB0aGUgZGVmYXVsdCAnaW1wb3J0IHNpdGUnCisgICAgICAgICAgICBhcmdzICs9IFsiLVMiXQorCisgICAgICAgIGlmIHNvdXJjZToKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItYyIsIHNvdXJjZV0KKyAgICAgICAgZWxpZiBzY3JpcHQ6CisgICAgICAgICAgICBhcmdzICs9IFtzY3JpcHRdCisKKyAgICAgICAgIyBwcmludCBhcmdzCisgICAgICAgICMgcHJpbnQgJyAnLmpvaW4oYXJncykKKworICAgICAgICAjIFVzZSAiYXJncyIgdG8gaW52b2tlIGdkYiwgY2FwdHVyaW5nIHN0ZG91dCwgc3RkZXJyOgorICAgICAgICBvdXQsIGVyciA9IHJ1bl9nZGIoKmFyZ3MsIFBZVEhPTkhBU0hTRUVEPScwJykKKworICAgICAgICBlcnJsaW5lcyA9IGVyci5zcGxpdGxpbmVzKCkKKyAgICAgICAgdW5leHBlY3RlZF9lcnJsaW5lcyA9IFtdCisKKyAgICAgICAgIyBJZ25vcmUgc29tZSBiZW5pZ24gbWVzc2FnZXMgb24gc3RkZXJyLgorICAgICAgICBpZ25vcmVfcGF0dGVybnMgPSAoCisgICAgICAgICAgICAnRnVuY3Rpb24gIiVzIiBub3QgZGVmaW5lZC4nICUgYnJlYWtwb2ludCwKKyAgICAgICAgICAgICJ3YXJuaW5nOiBubyBsb2FkYWJsZSBzZWN0aW9ucyBmb3VuZCBpbiBhZGRlZCBzeW1ib2wtZmlsZSIKKyAgICAgICAgICAgICIgc3lzdGVtLXN1cHBsaWVkIERTTyIsCisgICAgICAgICAgICAid2FybmluZzogVW5hYmxlIHRvIGZpbmQgbGlidGhyZWFkX2RiIG1hdGNoaW5nIgorICAgICAgICAgICAgIiBpbmZlcmlvcidzIHRocmVhZCBsaWJyYXJ5LCB0aHJlYWQgZGVidWdnaW5nIHdpbGwiCisgICAgICAgICAgICAiIG5vdCBiZSBhdmFpbGFibGUuIiwKKyAgICAgICAgICAgICJ3YXJuaW5nOiBDYW5ub3QgaW5pdGlhbGl6ZSB0aHJlYWQgZGVidWdnaW5nIgorICAgICAgICAgICAgIiBsaWJyYXJ5OiBEZWJ1Z2dlciBzZXJ2aWNlIGZhaWxlZCIsCisgICAgICAgICAgICAnd2FybmluZzogQ291bGQgbm90IGxvYWQgc2hhcmVkIGxpYnJhcnkgc3ltYm9scyBmb3IgJworICAgICAgICAgICAgJ2xpbnV4LXZkc28uc28nLAorICAgICAgICAgICAgJ3dhcm5pbmc6IENvdWxkIG5vdCBsb2FkIHNoYXJlZCBsaWJyYXJ5IHN5bWJvbHMgZm9yICcKKyAgICAgICAgICAgICdsaW51eC1nYXRlLnNvJywKKyAgICAgICAgICAgICdEbyB5b3UgbmVlZCAic2V0IHNvbGliLXNlYXJjaC1wYXRoIiBvciAnCisgICAgICAgICAgICAnInNldCBzeXNyb290Ij8nLAorICAgICAgICAgICAgKQorICAgICAgICBmb3IgbGluZSBpbiBlcnJsaW5lczoKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoaWdub3JlX3BhdHRlcm5zKToKKyAgICAgICAgICAgICAgICB1bmV4cGVjdGVkX2VycmxpbmVzLmFwcGVuZChsaW5lKQorCisgICAgICAgICMgRW5zdXJlIG5vIHVuZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZXM6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5leHBlY3RlZF9lcnJsaW5lcywgW10pCisgICAgICAgIHJldHVybiBvdXQKKworICAgIGRlZiBnZXRfZ2RiX3JlcHIoc2VsZiwgc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBpbXBvcnRfc2l0ZT1GYWxzZSk6CisgICAgICAgICMgR2l2ZW4gYW4gaW5wdXQgcHl0aG9uIHNvdXJjZSByZXByZXNlbnRhdGlvbiBvZiBkYXRhLAorICAgICAgICAjIHJ1biAicHl0aG9uIC1jJ3ByaW50IERBVEEnIiB1bmRlciBnZGIgd2l0aCBhIGJyZWFrcG9pbnQgb24KKyAgICAgICAgIyBQeU9iamVjdF9QcmludCBhbmQgc2NyYXBlIG91dCBnZGIncyByZXByZXNlbnRhdGlvbiBvZiB0aGUgIm9wIgorICAgICAgICAjIHBhcmFtZXRlciwgYW5kIHZlcmlmeSB0aGF0IHRoZSBnZGIgZGlzcGxheXMgdGhlIHNhbWUgc3RyaW5nCisgICAgICAgICMKKyAgICAgICAgIyBGb3IgYSBuZXN0ZWQgc3RydWN0dXJlLCB0aGUgZmlyc3QgdGltZSB3ZSBoaXQgdGhlIGJyZWFrcG9pbnQgd2lsbAorICAgICAgICAjIGdpdmUgdXMgdGhlIHRvcC1sZXZlbCBzdHJ1Y3R1cmUKKyAgICAgICAgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNvdXJjZSwgYnJlYWtwb2ludD0nUHlPYmplY3RfUHJpbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PWNtZHNfYWZ0ZXJfYnJlYWtwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydF9zaXRlPWltcG9ydF9zaXRlKQorICAgICAgICAjIGdkYiBjYW4gaW5zZXJ0IGFkZGl0aW9uYWwgJ1xuJyBhbmQgc3BhY2UgY2hhcmFjdGVycyBpbiB2YXJpb3VzIHBsYWNlcworICAgICAgICAjIGluIGl0cyBvdXRwdXQsIGRlcGVuZGluZyBvbiB0aGUgd2lkdGggb2YgdGhlIHRlcm1pbmFsIGl0J3MgY29ubmVjdGVkCisgICAgICAgICMgdG8gKHVzaW5nIGl0cyAid3JhcF9oZXJlIiBmdW5jdGlvbikKKyAgICAgICAgbSA9IHJlLm1hdGNoKCcuKiMwXHMrUHlPYmplY3RfUHJpbnRccytcKFxzKm9wXD1ccyooLio/KSxccytmcD0uKlwpLionLAorICAgICAgICAgICAgICAgICAgICAgZ2RiX291dHB1dCwgcmUuRE9UQUxMKQorICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCBnZGIgb3V0cHV0OiAlclxuJXMnICUgKGdkYl9vdXRwdXQsIGdkYl9vdXRwdXQpKQorICAgICAgICByZXR1cm4gbS5ncm91cCgxKSwgZ2RiX291dHB1dAorCisgICAgZGVmIGFzc2VydEVuZHNXaXRoKHNlbGYsIGFjdHVhbCwgZXhwX2VuZCk6CisgICAgICAgICcnJ0Vuc3VyZSB0aGF0IHRoZSBnaXZlbiAiYWN0dWFsIiBzdHJpbmcgZW5kcyB3aXRoICJleHBfZW5kIicnJworICAgICAgICBzZWxmLmFzc2VydFRydWUoYWN0dWFsLmVuZHN3aXRoKGV4cF9lbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSclciBkaWQgbm90IGVuZCB3aXRoICVyJyAlIChhY3R1YWwsIGV4cF9lbmQpKQorCisgICAgZGVmIGFzc2VydE11bHRpbGluZU1hdGNoZXMoc2VsZiwgYWN0dWFsLCBwYXR0ZXJuKToKKyAgICAgICAgbSA9IHJlLm1hdGNoKHBhdHRlcm4sIGFjdHVhbCwgcmUuRE9UQUxMKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobSwgbXNnPSclciBkaWQgbm90IG1hdGNoICVyJyAlIChhY3R1YWwsIHBhdHRlcm4pKQorCisgICAgZGVmIGdldF9zYW1wbGVfc2NyaXB0KHNlbGYpOgorICAgICAgICByZXR1cm4gZmluZGZpbGUoJ2dkYl9zYW1wbGUucHknKQorCitjbGFzcyBQcmV0dHlQcmludFRlc3RzKERlYnVnZ2VyVGVzdHMpOgorICAgIGRlZiB0ZXN0X2dldHRpbmdfYmFja3RyYWNlKHNlbGYpOgorICAgICAgICBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2UoJ3ByaW50IDQyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdQeU9iamVjdF9QcmludCcgaW4gZ2RiX291dHB1dCkKKworICAgIGRlZiBhc3NlcnRHZGJSZXByKHNlbGYsIHZhbCwgY21kc19hZnRlcl9icmVha3BvaW50PU5vbmUpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IGdkYidzIHJlbmRlcmluZyBvZiB0aGUgdmFsdWUgaW4gYSBkZWJ1Z2dlZCBwcm9jZXNzCisgICAgICAgICMgbWF0Y2hlcyByZXByKHZhbHVlKSBpbiB0aGlzIHByb2Nlc3M6CisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJ3ByaW50ICcgKyByZXByKHZhbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLCByZXByKHZhbCksIGdkYl9vdXRwdXQpCisKKyAgICBkZWYgdGVzdF9pbnQoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiB2YXJpb3VzICJpbnQiIHZhbHVlcycKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKDQyKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKC03KQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoc3lzLm1heGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKC1zeXMubWF4aW50KQorCisgICAgZGVmIHRlc3RfbG9uZyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHZhcmlvdXMgImxvbmciIHZhbHVlcycKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKDBMKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoMTAwMDAwMDAwMDAwMEwpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigtMUwpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigtMTAwMDAwMDAwMDAwMDAwMEwpCisKKyAgICBkZWYgdGVzdF9zaW5nbGV0b25zKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgVHJ1ZSwgRmFsc2UgYW5kIE5vbmUnCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihOb25lKQorCisgICAgZGVmIHRlc3RfZGljdHMoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBkaWN0aW9uYXJpZXMnCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHsnZm9vJzogJ2Jhcid9KQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoInsnZm9vJzogJ2JhcicsICdkb3VnbGFzJzo0Mn0iKQorCisgICAgZGVmIHRlc3RfbGlzdHMoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBsaXN0cycKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKFtdKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIocmFuZ2UoNSkpCisKKyAgICBkZWYgdGVzdF9zdHJpbmdzKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2Ygc3RyaW5ncycKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKCcnKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoJ0FuZCBub3cgZm9yIHNvbWV0aGluZyBob3BlZnVsbHkgdGhlIHNhbWUnKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoJ3N0cmluZyB3aXRoIGVtYmVkZGVkIE5VTCBoZXJlIFwwIGFuZCB0aGVuIHNvbWUgbW9yZSB0ZXh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKCd0aGlzIGlzIGJ5dGUgMjU1Olx4ZmYgYW5kIGJ5dGUgMTI4Olx4ODAnKQorCisgICAgZGVmIHRlc3RfdHVwbGVzKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgdHVwbGVzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIodHVwbGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKCgxLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigoJ2ZvbycsICdiYXInLCAnYmF6JykpCisKKyAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgdW5pY29kZSB2YWx1ZXMnCisgICAgICAgICMgVGVzdCB0aGUgZW1wdHkgdW5pY29kZSBzdHJpbmc6CisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih1JycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHUnaGVsbG8gd29ybGQnKQorCisgICAgICAgICMgVGVzdCBwcmludGluZyBhIHNpbmdsZSBjaGFyYWN0ZXI6CisgICAgICAgICMgICAgVSsyNjIwIFNLVUxMIEFORCBDUk9TU0JPTkVTCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih1J1x1MjYyMCcpCisKKyAgICAgICAgIyBUZXN0IHByaW50aW5nIGEgSmFwYW5lc2UgdW5pY29kZSBzdHJpbmcKKyAgICAgICAgIyAoSSBiZWxpZXZlIHRoaXMgcmVhZHMgIm1vamliYWtlIiwgdXNpbmcgMyBjaGFyYWN0ZXJzIGZyb20gdGhlIENKSworICAgICAgICAjIFVuaWZpZWQgSWRlb2dyYXBocyBhcmVhLCBmb2xsb3dlZCBieSBVKzMwNTEgSElSQUdBTkEgTEVUVEVSIEtFKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIodSdcdTY1ODdcdTViNTdcdTUzMTZcdTMwNTEnKQorCisgICAgICAgICMgVGVzdCBhIGNoYXJhY3RlciBvdXRzaWRlIHRoZSBCTVA6CisgICAgICAgICMgICAgVSsxRDEyMSBNVVNJQ0FMIFNZTUJPTCBDIENMRUYKKyAgICAgICAgIyBUaGlzIGlzOgorICAgICAgICAjIFVURi04OiAweEYwIDB4OUQgMHg4NCAweEExCisgICAgICAgICMgVVRGLTE2OiAweEQ4MzQgMHhERDIxCisgICAgICAgICMgVGhpcyB3aWxsIG9ubHkgd29yayBvbiB3aWRlLXVuaWNvZGUgYnVpbGRzOgorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIodSJcVTAwMDFEMTIxIikKKworICAgIGRlZiB0ZXN0X3NldHMoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBzZXRzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoc2V0KCkpCisgICAgICAgIHJlcCA9IHNlbGYuZ2V0X2dkYl9yZXByKCJwcmludCBzZXQoWydhJywgJ2InXSkiKVswXQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwLnN0YXJ0c3dpdGgoInNldChbIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXAuZW5kc3dpdGgoIl0pIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChyZXApLCB7J2EnLCAnYid9KQorICAgICAgICByZXAgPSBzZWxmLmdldF9nZGJfcmVwcigicHJpbnQgc2V0KFs0LCA1XSkiKVswXQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwLnN0YXJ0c3dpdGgoInNldChbIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXAuZW5kc3dpdGgoIl0pIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChyZXApLCB7NCwgNX0pCisKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB3ZSBoYW5kbGVkIHNldHMgY29udGFpbmluZyB0aGUgImR1bW15IiBrZXkgdmFsdWUsCisgICAgICAgICMgd2hpY2ggaGFwcGVucyBvbiBkZWxldGlvbjoKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcignJydzID0gc2V0KFsnYScsJ2InXSkKK3MucG9wKCkKK3ByaW50IHMnJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsICJzZXQoWydiJ10pIikKKworICAgIGRlZiB0ZXN0X2Zyb3plbnNldHMoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBmcm96ZW5zZXRzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KCkpCisgICAgICAgIHJlcCA9IHNlbGYuZ2V0X2dkYl9yZXByKCJwcmludCBmcm96ZW5zZXQoWydhJywgJ2InXSkiKVswXQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwLnN0YXJ0c3dpdGgoImZyb3plbnNldChbIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXAuZW5kc3dpdGgoIl0pIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChyZXApLCB7J2EnLCAnYid9KQorICAgICAgICByZXAgPSBzZWxmLmdldF9nZGJfcmVwcigicHJpbnQgZnJvemVuc2V0KFs0LCA1XSkiKVswXQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwLnN0YXJ0c3dpdGgoImZyb3plbnNldChbIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXAuZW5kc3dpdGgoIl0pIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChyZXApLCB7NCwgNX0pCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgYSBSdW50aW1lRXJyb3IKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcignJycKK3RyeToKKyAgICByYWlzZSBSdW50aW1lRXJyb3IoIkkgYW0gYW4gZXJyb3IiKQorZXhjZXB0IFJ1bnRpbWVFcnJvciwgZToKKyAgICBwcmludCBlCisnJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbnMuUnVudGltZUVycm9yKCdJIGFtIGFuIGVycm9yJywpIikKKworCisgICAgICAgICMgVGVzdCBkaXZpc2lvbiBieSB6ZXJvOgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJwordHJ5OgorICAgIGEgPSAxIC8gMAorZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yLCBlOgorICAgIHByaW50IGUKKycnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9ucy5aZXJvRGl2aXNpb25FcnJvcignaW50ZWdlciBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVybycsKSIpCisKKyAgICBkZWYgdGVzdF9jbGFzc2ljX2NsYXNzKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgY2xhc3NpYyBjbGFzcyBpbnN0YW5jZXMnCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJycnCitjbGFzcyBGb286CisgICAgcGFzcworZm9vID0gRm9vKCkKK2Zvby5hbl9pbnQgPSA0MgorcHJpbnQgZm9vJycnKQorICAgICAgICBtID0gcmUubWF0Y2gocic8Rm9vXChhbl9pbnQ9NDJcKSBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywgZ2RiX3JlcHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdVbmV4cGVjdGVkIGNsYXNzaWMtY2xhc3MgcmVuZGVyaW5nICVyJyAlIGdkYl9yZXByKQorCisgICAgZGVmIHRlc3RfbW9kZXJuX2NsYXNzKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgbmV3LXN0eWxlIGNsYXNzIGluc3RhbmNlcycKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcignJycKK2NsYXNzIEZvbyhvYmplY3QpOgorICAgIHBhc3MKK2ZvbyA9IEZvbygpCitmb28uYW5faW50ID0gNDIKK3ByaW50IGZvbycnJykKKyAgICAgICAgbSA9IHJlLm1hdGNoKHInPEZvb1woYW5faW50PTQyXCkgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicsIGdkYl9yZXByKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nVW5leHBlY3RlZCBuZXctc3R5bGUgY2xhc3MgcmVuZGVyaW5nICVyJyAlIGdkYl9yZXByKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NpbmdfbGlzdChzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGFuIGluc3RhbmNlIG9mIGEgbGlzdCBzdWJjbGFzcycKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcignJycKK2NsYXNzIEZvbyhsaXN0KToKKyAgICBwYXNzCitmb28gPSBGb28oKQorZm9vICs9IFsxLCAyLCAzXQorZm9vLmFuX2ludCA9IDQyCitwcmludCBmb28nJycpCisgICAgICAgIG0gPSByZS5tYXRjaChyJzxGb29cKGFuX2ludD00MlwpIGF0IHJlbW90ZSAweFswLTlhLWZdKz4nLCBnZGJfcmVwcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0sCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J1VuZXhwZWN0ZWQgbmV3LXN0eWxlIGNsYXNzIHJlbmRlcmluZyAlcicgJSBnZGJfcmVwcikKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzaW5nX3R1cGxlKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgYW4gaW5zdGFuY2Ugb2YgYSB0dXBsZSBzdWJjbGFzcycKKyAgICAgICAgIyBUaGlzIHNob3VsZCBleGVyY2lzZSB0aGUgbmVnYXRpdmUgdHBfZGljdG9mZnNldCBjb2RlIGluIHRoZQorICAgICAgICAjIG5ldy1zdHlsZSBjbGFzcyBzdXBwb3J0CisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJycnCitjbGFzcyBGb28odHVwbGUpOgorICAgIHBhc3MKK2ZvbyA9IEZvbygoMSwgMiwgMykpCitmb28uYW5faW50ID0gNDIKK3ByaW50IGZvbycnJykKKyAgICAgICAgbSA9IHJlLm1hdGNoKHInPEZvb1woYW5faW50PTQyXCkgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicsIGdkYl9yZXByKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nVW5leHBlY3RlZCBuZXctc3R5bGUgY2xhc3MgcmVuZGVyaW5nICVyJyAlIGdkYl9yZXByKQorCisgICAgZGVmIGFzc2VydFNhbmUoc2VsZiwgc291cmNlLCBjb3JydXB0aW9uLCBleHB2YWx1ZT1Ob25lLCBleHB0eXBlPU5vbmUpOgorICAgICAgICAnJydSdW4gUHl0aG9uIHVuZGVyIGdkYiwgY29ycnVwdGluZyB2YXJpYWJsZXMgaW4gdGhlIGluZmVyaW9yIHByb2Nlc3MKKyAgICAgICAgaW1tZWRpYXRlbHkgYmVmb3JlIHRha2luZyBhIGJhY2t0cmFjZS4KKworICAgICAgICBWZXJpZnkgdGhhdCB0aGUgdmFyaWFibGUncyByZXByZXNlbnRhdGlvbiBpcyB0aGUgZXhwZWN0ZWQgZmFpbHNhZmUKKyAgICAgICAgcmVwcmVzZW50YXRpb24nJycKKyAgICAgICAgaWYgY29ycnVwdGlvbjoKKyAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bY29ycnVwdGlvbiwgJ2JhY2t0cmFjZSddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydiYWNrdHJhY2UnXQorCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gXAorICAgICAgICAgICAgc2VsZi5nZXRfZ2RiX3JlcHIoc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PWNtZHNfYWZ0ZXJfYnJlYWtwb2ludCkKKworICAgICAgICBpZiBleHB2YWx1ZToKKyAgICAgICAgICAgIGlmIGdkYl9yZXByID09IHJlcHIoZXhwdmFsdWUpOgorICAgICAgICAgICAgICAgICMgZ2RiIG1hbmFnZWQgdG8gcHJpbnQgdGhlIHZhbHVlIGluIHNwaXRlIG9mIHRoZSBjb3JydXB0aW9uOworICAgICAgICAgICAgICAgICMgdGhpcyBpcyBnb29kIChzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTgzMzApCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgZXhwdHlwZToKKyAgICAgICAgICAgIHBhdHRlcm4gPSAnPCcgKyBleHB0eXBlICsgJyBhdCByZW1vdGUgMHhbMC05YS1mXSs+JworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBNYXRjaCBhbnl0aGluZyBmb3IgdGhlIHR5cGUgbmFtZTsgMHhERUFEQkVFRiBjb3VsZCBwb2ludCB0bworICAgICAgICAgICAgIyBzb21ldGhpbmcgYXJiaXRyYXJ5IChzZWUgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4MzMwKQorICAgICAgICAgICAgcGF0dGVybiA9ICc8LiogYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicKKworICAgICAgICBtID0gcmUubWF0Y2gocGF0dGVybiwgZ2RiX3JlcHIpCisgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIGdkYiByZXByZXNlbnRhdGlvbjogJXJcbiVzJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGdkYl9yZXByLCBnZGJfb3V0cHV0KSkKKworICAgIGRlZiB0ZXN0X05VTExfcHRyKHNlbGYpOgorICAgICAgICAnRW5zdXJlIHRoYXQgYSBOVUxMIFB5T2JqZWN0KiBpcyBoYW5kbGVkIGdyYWNlZnVsbHknCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gKAorICAgICAgICAgICAgc2VsZi5nZXRfZ2RiX3JlcHIoJ3ByaW50IDQyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3NldCB2YXJpYWJsZSBvcD0wJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2t0cmFjZSddKQorICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsICcweDAnKQorCisgICAgZGVmIHRlc3RfTlVMTF9vYl90eXBlKHNlbGYpOgorICAgICAgICAnRW5zdXJlIHRoYXQgYSBQeU9iamVjdCogd2l0aCBOVUxMIG9iX3R5cGUgaXMgaGFuZGxlZCBncmFjZWZ1bGx5JworICAgICAgICBzZWxmLmFzc2VydFNhbmUoJ3ByaW50IDQyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdzZXQgb3AtPm9iX3R5cGU9MCcpCisKKyAgICBkZWYgdGVzdF9jb3JydXB0X29iX3R5cGUoc2VsZik6CisgICAgICAgICdFbnN1cmUgdGhhdCBhIFB5T2JqZWN0KiB3aXRoIGEgY29ycnVwdCBvYl90eXBlIGlzIGhhbmRsZWQgZ3JhY2VmdWxseScKKyAgICAgICAgc2VsZi5hc3NlcnRTYW5lKCdwcmludCA0MicsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2V0IG9wLT5vYl90eXBlPTB4REVBREJFRUYnLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwdmFsdWU9NDIpCisKKyAgICBkZWYgdGVzdF9jb3JydXB0X3RwX2ZsYWdzKHNlbGYpOgorICAgICAgICAnRW5zdXJlIHRoYXQgYSBQeU9iamVjdCogd2l0aCBhIHR5cGUgd2l0aCBjb3JydXB0IHRwX2ZsYWdzIGlzIGhhbmRsZWQnCisgICAgICAgIHNlbGYuYXNzZXJ0U2FuZSgncHJpbnQgNDInLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NldCBvcC0+b2JfdHlwZS0+dHBfZmxhZ3M9MHgwJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHZhbHVlPTQyKQorCisgICAgZGVmIHRlc3RfY29ycnVwdF90cF9uYW1lKHNlbGYpOgorICAgICAgICAnRW5zdXJlIHRoYXQgYSBQeU9iamVjdCogd2l0aCBhIHR5cGUgd2l0aCBjb3JydXB0IHRwX25hbWUgaXMgaGFuZGxlZCcKKyAgICAgICAgc2VsZi5hc3NlcnRTYW5lKCdwcmludCA0MicsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2V0IG9wLT5vYl90eXBlLT50cF9uYW1lPTB4REVBREJFRUYnLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwdmFsdWU9NDIpCisKKyAgICBkZWYgdGVzdF9OVUxMX2luc3RhbmNlX2RpY3Qoc2VsZik6CisgICAgICAgICdFbnN1cmUgdGhhdCBhIFB5SW5zdGFuY2VPYmplY3Qgd2l0aCB3aXRoIGEgTlVMTCBpbl9kaWN0IGlzIGhhbmRsZWQnCisgICAgICAgIHNlbGYuYXNzZXJ0U2FuZSgnJycKK2NsYXNzIEZvbzoKKyAgICBwYXNzCitmb28gPSBGb28oKQorZm9vLmFuX2ludCA9IDQyCitwcmludCBmb28nJycsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2V0ICgoUHlJbnN0YW5jZU9iamVjdCopb3ApLT5pbl9kaWN0ID0gMCcsCisgICAgICAgICAgICAgICAgICAgICAgICBleHB0eXBlPSdGb28nKQorCisgICAgZGVmIHRlc3RfYnVpbHRpbnNfaGVscChzZWxmKToKKyAgICAgICAgJ0Vuc3VyZSB0aGF0IHRoZSBuZXctc3R5bGUgY2xhc3MgX0hlbHBlciBpbiBzaXRlLnB5IGNhbiBiZSBoYW5kbGVkJworICAgICAgICAjICh0aGlzIHdhcyB0aGUgaXNzdWUgY2F1c2luZyB0cmFjZWJhY2tzIGluCisgICAgICAgICMgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4MDMyI21zZzEwMDUzNyApCisKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcigncHJpbnQgX19idWlsdGluc19fLmhlbHAnLCBpbXBvcnRfc2l0ZT1UcnVlKQorICAgICAgICBtID0gcmUubWF0Y2gocic8X0hlbHBlciBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywgZ2RiX3JlcHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdVbmV4cGVjdGVkIHJlbmRlcmluZyAlcicgJSBnZGJfcmVwcikKKworICAgIGRlZiB0ZXN0X3NlbGZyZWZlcmVudGlhbF9saXN0KHNlbGYpOgorICAgICAgICAnJydFbnN1cmUgdGhhdCBhIHJlZmVyZW5jZSBsb29wIGludm9sdmluZyBhIGxpc3QgZG9lc24ndCBsZWFkIHByb3h5dmFsCisgICAgICAgIGludG8gYW4gaW5maW5pdGUgbG9vcDonJycKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBcCisgICAgICAgICAgICBzZWxmLmdldF9nZGJfcmVwcigiYSA9IFszLCA0LCA1XSA7IGEuYXBwZW5kKGEpIDsgcHJpbnQgYSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwgJ1szLCA0LCA1LCBbLi4uXV0nKQorCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gXAorICAgICAgICAgICAgc2VsZi5nZXRfZ2RiX3JlcHIoImEgPSBbMywgNCwgNV0gOyBiID0gW2FdIDsgYS5hcHBlbmQoYikgOyBwcmludCBhIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLCAnWzMsIDQsIDUsIFtbLi4uXV1dJykKKworICAgIGRlZiB0ZXN0X3NlbGZyZWZlcmVudGlhbF9kaWN0KHNlbGYpOgorICAgICAgICAnJydFbnN1cmUgdGhhdCBhIHJlZmVyZW5jZSBsb29wIGludm9sdmluZyBhIGRpY3QgZG9lc24ndCBsZWFkIHByb3h5dmFsCisgICAgICAgIGludG8gYW4gaW5maW5pdGUgbG9vcDonJycKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBcCisgICAgICAgICAgICBzZWxmLmdldF9nZGJfcmVwcigiYSA9IHt9IDsgYiA9IHsnYmFyJzphfSA7IGFbJ2ZvbyddID0gYiA7IHByaW50IGEiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsICJ7J2Zvbyc6IHsnYmFyJzogey4uLn19fSIpCisKKyAgICBkZWYgdGVzdF9zZWxmcmVmZXJlbnRpYWxfb2xkX3N0eWxlX2luc3RhbmNlKHNlbGYpOgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IFwKKyAgICAgICAgICAgIHNlbGYuZ2V0X2dkYl9yZXByKCcnJworY2xhc3MgRm9vOgorICAgIHBhc3MKK2ZvbyA9IEZvbygpCitmb28uYW5fYXR0ciA9IGZvbworcHJpbnQgZm9vJycnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goJzxGb29cKGFuX2F0dHI9PFwuXC5cLj5cKSBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYl9yZXByKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIGdkYiByZXByZXNlbnRhdGlvbjogJXJcbiVzJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2RiX3JlcHIsIGdkYl9vdXRwdXQpKQorCisgICAgZGVmIHRlc3Rfc2VsZnJlZmVyZW50aWFsX25ld19zdHlsZV9pbnN0YW5jZShzZWxmKToKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBcCisgICAgICAgICAgICBzZWxmLmdldF9nZGJfcmVwcignJycKK2NsYXNzIEZvbyhvYmplY3QpOgorICAgIHBhc3MKK2ZvbyA9IEZvbygpCitmb28uYW5fYXR0ciA9IGZvbworcHJpbnQgZm9vJycnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goJzxGb29cKGFuX2F0dHI9PFwuXC5cLj5cKSBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYl9yZXByKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIGdkYiByZXByZXNlbnRhdGlvbjogJXJcbiVzJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2RiX3JlcHIsIGdkYl9vdXRwdXQpKQorCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gXAorICAgICAgICAgICAgc2VsZi5nZXRfZ2RiX3JlcHIoJycnCitjbGFzcyBGb28ob2JqZWN0KToKKyAgICBwYXNzCithID0gRm9vKCkKK2IgPSBGb28oKQorYS5hbl9hdHRyID0gYgorYi5hbl9hdHRyID0gYQorcHJpbnQgYScnJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCc8Rm9vXChhbl9hdHRyPTxGb29cKGFuX2F0dHI9PFwuXC5cLj5cKSBhdCByZW1vdGUgMHhbMC05YS1mXSs+XCkgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGJfcmVwciksCisgICAgICAgICAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBnZGIgcmVwcmVzZW50YXRpb246ICVyXG4lcycgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdkYl9yZXByLCBnZGJfb3V0cHV0KSkKKworICAgIGRlZiB0ZXN0X3RydW5jYXRpb24oc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhhdCB2ZXJ5IGxvbmcgb3V0cHV0IGlzIHRydW5jYXRlZCcKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcigncHJpbnQgcmFuZ2UoMTAwMCknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiOTIsIDkzLCA5NCwgOTUsIDk2LCA5NywgOTgsIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxNTQsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LCAxNjAsIDE2MSwgMTYyLCAxNjMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTczLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAyMjMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMjI0LCAyMjUsIDIyNi4uLih0cnVuY2F0ZWQpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZ2RiX3JlcHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQgKyBsZW4oJy4uLih0cnVuY2F0ZWQpJykpCisKKyAgICBkZWYgdGVzdF9idWlsdGluX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCdwcmludCBsZW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLCAnPGJ1aWx0LWluIGZ1bmN0aW9uIGxlbj4nKQorCisgICAgZGVmIHRlc3RfYnVpbHRpbl9tZXRob2Qoc2VsZik6CisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJ2ltcG9ydCBzeXM7IHByaW50IHN5cy5zdGRvdXQucmVhZGxpbmVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCc8YnVpbHQtaW4gbWV0aG9kIHJlYWRsaW5lcyBvZiBmaWxlIG9iamVjdCBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYl9yZXByKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIGdkYiByZXByZXNlbnRhdGlvbjogJXJcbiVzJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2RiX3JlcHIsIGdkYl9vdXRwdXQpKQorCisgICAgZGVmIHRlc3RfZnJhbWVzKHNlbGYpOgorICAgICAgICBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2UoJycnCitkZWYgZm9vKGEsIGIsIGMpOgorICAgIHBhc3MKKworZm9vKDMsIDQsIDUpCitwcmludCBmb28uX19jb2RlX18nJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50PSdQeU9iamVjdF9QcmludCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydwcmludCAoUHlGcmFtZU9iamVjdCopKCgoUHlDb2RlT2JqZWN0KilvcCktPmNvX3pvbWJpZWZyYW1lKSddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJy4qXHMrXCQxID1ccytGcmFtZSAweFswLTlhLWZdKywgZm9yIGZpbGUgPHN0cmluZz4sIGxpbmUgMywgaW4gZm9vIFwoXClccysuKicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGJfb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUuRE9UQUxMKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIGdkYiByZXByZXNlbnRhdGlvbjogJXJcbiVzJyAlIChnZGJfb3V0cHV0LCBnZGJfb3V0cHV0KSkKKworQHVuaXR0ZXN0LnNraXBJZihweXRob25faXNfb3B0aW1pemVkKCksCisgICAgICAgICAgICAgICAgICJQeXRob24gd2FzIGNvbXBpbGVkIHdpdGggb3B0aW1pemF0aW9ucyIpCitjbGFzcyBQeUxpc3RUZXN0cyhEZWJ1Z2dlclRlc3RzKToKKyAgICBkZWYgYXNzZXJ0TGlzdGluZyhzZWxmLCBleHBlY3RlZCwgYWN0dWFsKToKKyAgICAgICAgc2VsZi5hc3NlcnRFbmRzV2l0aChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfYmFzaWNfY29tbWFuZChzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGF0IHRoZSAicHktbGlzdCIgY29tbWFuZCB3b3JrcycKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LWxpc3QnXSkKKworICAgICAgICBzZWxmLmFzc2VydExpc3RpbmcoJyAgIDUgICAgXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgNiAgICBkZWYgYmFyKGEsIGIsIGMpOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgIDcgICAgICAgIGJheihhLCBiLCBjKVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgIDggICAgXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgOSAgICBkZWYgYmF6KCphcmdzKTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgPjEwICAgICAgICBwcmludCg0MilcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIDExICAgIFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgMTIgICAgZm9vKDEsIDIsIDMpXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnQpCisKKyAgICBkZWYgdGVzdF9vbmVfYWJzX2FyZyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgInB5LWxpc3QiIGNvbW1hbmQgd2l0aCBvbmUgYWJzb2x1dGUgYXJndW1lbnQnCisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS1saXN0IDknXSkKKworICAgICAgICBzZWxmLmFzc2VydExpc3RpbmcoJyAgIDkgICAgZGVmIGJheigqYXJncyk6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnID4xMCAgICAgICAgcHJpbnQoNDIpXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAxMSAgICBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIDEyICAgIGZvbygxLCAyLCAzKVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0KQorCisgICAgZGVmIHRlc3RfdHdvX2Fic19hcmdzKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSAicHktbGlzdCIgY29tbWFuZCB3aXRoIHR3byBhYnNvbHV0ZSBhcmd1bWVudHMnCisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS1saXN0IDEsMyddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdGluZygnICAgMSAgICAjIFNhbXBsZSBzY3JpcHQgZm9yIHVzZSBieSB0ZXN0X2dkYi5weVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgIDIgICAgXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgMyAgICBkZWYgZm9vKGEsIGIsIGMpOlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0KQorCitjbGFzcyBTdGFja05hdmlnYXRpb25UZXN0cyhEZWJ1Z2dlclRlc3RzKToKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfUFlVUF9QWURPV04sICJ0ZXN0IHJlcXVpcmVzIHB5LXVwL3B5LWRvd24gY29tbWFuZHMiKQorICAgIEB1bml0dGVzdC5za2lwSWYocHl0aG9uX2lzX29wdGltaXplZCgpLAorICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiB3YXMgY29tcGlsZWQgd2l0aCBvcHRpbWl6YXRpb25zIikKKyAgICBkZWYgdGVzdF9weXVwX2NvbW1hbmQoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhhdCB0aGUgInB5LXVwIiBjb21tYW5kIHdvcmtzJworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktdXAnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aWxpbmVNYXRjaGVzKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcicnJ14uKgorI1swLTldKyBGcmFtZSAweFswLTlhLWZdKywgZm9yIGZpbGUgLipnZGJfc2FtcGxlLnB5LCBsaW5lIDcsIGluIGJhciBcKGE9MSwgYj0yLCBjPTNcKQorICAgIGJhelwoYSwgYiwgY1wpCiskJycnKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1BZVVBfUFlET1dOLCAidGVzdCByZXF1aXJlcyBweS11cC9weS1kb3duIGNvbW1hbmRzIikKKyAgICBkZWYgdGVzdF9kb3duX2F0X2JvdHRvbShzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSBoYW5kbGluZyBvZiAicHktZG93biIgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2snCisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS1kb3duJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RW5kc1dpdGgoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VuYWJsZSB0byBmaW5kIGEgbmV3ZXIgcHl0aG9uIGZyYW1lXG4nKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1BZVVBfUFlET1dOLCAidGVzdCByZXF1aXJlcyBweS11cC9weS1kb3duIGNvbW1hbmRzIikKKyAgICBkZWYgdGVzdF91cF9hdF90b3Aoc2VsZik6CisgICAgICAgICdWZXJpZnkgaGFuZGxpbmcgb2YgInB5LXVwIiBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjaycKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXVwJ10gKiA0KQorICAgICAgICBzZWxmLmFzc2VydEVuZHNXaXRoKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gZmluZCBhbiBvbGRlciBweXRob24gZnJhbWVcbicpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfUFlVUF9QWURPV04sICJ0ZXN0IHJlcXVpcmVzIHB5LXVwL3B5LWRvd24gY29tbWFuZHMiKQorICAgIEB1bml0dGVzdC5za2lwSWYocHl0aG9uX2lzX29wdGltaXplZCgpLAorICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiB3YXMgY29tcGlsZWQgd2l0aCBvcHRpbWl6YXRpb25zIikKKyAgICBkZWYgdGVzdF91cF90aGVuX2Rvd24oc2VsZik6CisgICAgICAgICdWZXJpZnkgInB5LXVwIiBmb2xsb3dlZCBieSAicHktZG93biInCisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS11cCcsICdweS1kb3duJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInJydeLioKKyNbMC05XSsgRnJhbWUgMHhbMC05YS1mXSssIGZvciBmaWxlIC4qZ2RiX3NhbXBsZS5weSwgbGluZSA3LCBpbiBiYXIgXChhPTEsIGI9MiwgYz0zXCkKKyAgICBiYXpcKGEsIGIsIGNcKQorI1swLTldKyBGcmFtZSAweFswLTlhLWZdKywgZm9yIGZpbGUgLipnZGJfc2FtcGxlLnB5LCBsaW5lIDEwLCBpbiBiYXogXChhcmdzPVwoMSwgMiwgM1wpXCkKKyAgICBwcmludFwoNDJcKQorJCcnJykKKworY2xhc3MgUHlCdFRlc3RzKERlYnVnZ2VyVGVzdHMpOgorICAgIEB1bml0dGVzdC5za2lwSWYocHl0aG9uX2lzX29wdGltaXplZCgpLAorICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiB3YXMgY29tcGlsZWQgd2l0aCBvcHRpbWl6YXRpb25zIikKKyAgICBkZWYgdGVzdF9iYXNpY19jb21tYW5kKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoYXQgdGhlICJweS1idCIgY29tbWFuZCB3b3JrcycKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LWJ0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInJydeLioKKyNbMC05XSsgRnJhbWUgMHhbMC05YS1mXSssIGZvciBmaWxlIC4qZ2RiX3NhbXBsZS5weSwgbGluZSA3LCBpbiBiYXIgXChhPTEsIGI9MiwgYz0zXCkKKyAgICBiYXpcKGEsIGIsIGNcKQorI1swLTldKyBGcmFtZSAweFswLTlhLWZdKywgZm9yIGZpbGUgLipnZGJfc2FtcGxlLnB5LCBsaW5lIDQsIGluIGZvbyBcKGE9MSwgYj0yLCBjPTNcKQorICAgIGJhclwoYSwgYiwgY1wpCisjWzAtOV0rIEZyYW1lIDB4WzAtOWEtZl0rLCBmb3IgZmlsZSAuKmdkYl9zYW1wbGUucHksIGxpbmUgMTIsIGluIDxtb2R1bGU+IFwoXCkKKyAgICBmb29cKDEsIDIsIDNcKQorJycnKQorCitjbGFzcyBQeVByaW50VGVzdHMoRGVidWdnZXJUZXN0cyk6CisgICAgQHVuaXR0ZXN0LnNraXBJZihweXRob25faXNfb3B0aW1pemVkKCksCisgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIHdhcyBjb21waWxlZCB3aXRoIG9wdGltaXphdGlvbnMiKQorICAgIGRlZiB0ZXN0X2Jhc2ljX2NvbW1hbmQoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhhdCB0aGUgInB5LXByaW50IiBjb21tYW5kIHdvcmtzJworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktcHJpbnQgYXJncyddKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpbGluZU1hdGNoZXMoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIi4qXG5sb2NhbCAnYXJncycgPSBcKDEsIDIsIDNcKVxuLioiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1BZVVBfUFlET1dOLCAidGVzdCByZXF1aXJlcyBweS11cC9weS1kb3duIGNvbW1hbmRzIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKHB5dGhvbl9pc19vcHRpbWl6ZWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICJQeXRob24gd2FzIGNvbXBpbGVkIHdpdGggb3B0aW1pemF0aW9ucyIpCisgICAgZGVmIHRlc3RfcHJpbnRfYWZ0ZXJfdXAoc2VsZik6CisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS11cCcsICdweS1wcmludCBjJywgJ3B5LXByaW50IGInLCAncHktcHJpbnQgYSddKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpbGluZU1hdGNoZXMoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIi4qXG5sb2NhbCAnYycgPSAzXG5sb2NhbCAnYicgPSAyXG5sb2NhbCAnYScgPSAxXG4uKiIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHB5dGhvbl9pc19vcHRpbWl6ZWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICJQeXRob24gd2FzIGNvbXBpbGVkIHdpdGggb3B0aW1pemF0aW9ucyIpCisgICAgZGVmIHRlc3RfcHJpbnRpbmdfZ2xvYmFsKHNlbGYpOgorICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktcHJpbnQgX19uYW1lX18nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aWxpbmVNYXRjaGVzKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciIuKlxuZ2xvYmFsICdfX25hbWVfXycgPSAnX19tYWluX18nXG4uKiIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHB5dGhvbl9pc19vcHRpbWl6ZWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICJQeXRob24gd2FzIGNvbXBpbGVkIHdpdGggb3B0aW1pemF0aW9ucyIpCisgICAgZGVmIHRlc3RfcHJpbnRpbmdfYnVpbHRpbihzZWxmKToKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXByaW50IGxlbiddKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpbGluZU1hdGNoZXMoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIi4qXG5idWlsdGluICdsZW4nID0gPGJ1aWx0LWluIGZ1bmN0aW9uIGxlbj5cbi4qIikKKworY2xhc3MgUHlMb2NhbHNUZXN0cyhEZWJ1Z2dlclRlc3RzKToKKyAgICBAdW5pdHRlc3Quc2tpcElmKHB5dGhvbl9pc19vcHRpbWl6ZWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICJQeXRob24gd2FzIGNvbXBpbGVkIHdpdGggb3B0aW1pemF0aW9ucyIpCisgICAgZGVmIHRlc3RfYmFzaWNfY29tbWFuZChzZWxmKToKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LWxvY2FscyddKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpbGluZU1hdGNoZXMoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIi4qXG5hcmdzID0gXCgxLCAyLCAzXClcbi4qIikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19QWVVQX1BZRE9XTiwgInRlc3QgcmVxdWlyZXMgcHktdXAvcHktZG93biBjb21tYW5kcyIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihweXRob25faXNfb3B0aW1pemVkKCksCisgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIHdhcyBjb21waWxlZCB3aXRoIG9wdGltaXphdGlvbnMiKQorICAgIGRlZiB0ZXN0X2xvY2Fsc19hZnRlcl91cChzZWxmKToKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXVwJywgJ3B5LWxvY2FscyddKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpbGluZU1hdGNoZXMoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIi4qXG5hID0gMVxuYiA9IDJcbmMgPSAzXG4uKiIpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoUHJldHR5UHJpbnRUZXN0cywKKyAgICAgICAgICAgICAgICAgUHlMaXN0VGVzdHMsCisgICAgICAgICAgICAgICAgIFN0YWNrTmF2aWdhdGlvblRlc3RzLAorICAgICAgICAgICAgICAgICBQeUJ0VGVzdHMsCisgICAgICAgICAgICAgICAgIFB5UHJpbnRUZXN0cywKKyAgICAgICAgICAgICAgICAgUHlMb2NhbHNUZXN0cworICAgICAgICAgICAgICAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2dkYm0ucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nZGJtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTY5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nZGJtLnB5CkBAIC0wLDAgKzEsODIgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgdW5saW5rLCBpbXBvcnRfbW9kdWxlCitnZGJtID0gaW1wb3J0X21vZHVsZSgnZ2RibScpCisKKworZmlsZW5hbWUgPSBURVNURk4KKworY2xhc3MgVGVzdEdkYm0odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmcgPSBOb25lCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZy5jbG9zZSgpCisgICAgICAgIHVubGluayhmaWxlbmFtZSkKKworICAgIGRlZiB0ZXN0X2tleV9tZXRob2RzKHNlbGYpOgorICAgICAgICBzZWxmLmcgPSBnZGJtLm9wZW4oZmlsZW5hbWUsICdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmcua2V5cygpLCBbXSkKKyAgICAgICAgc2VsZi5nWydhJ10gPSAnYicKKyAgICAgICAgc2VsZi5nWycxMjM0NTY3ODkxMCddID0gJzAxOTIzNzQxMDk4MjM0MDkxMjg0MDE5ODI0MicKKyAgICAgICAga2V5X3NldCA9IHNldChzZWxmLmcua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleV9zZXQsIGZyb3plbnNldChbJ2EnLCAnMTIzNDU2Nzg5MTAnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmcuaGFzX2tleSgnYScpKQorICAgICAgICBrZXkgPSBzZWxmLmcuZmlyc3RrZXkoKQorICAgICAgICB3aGlsZSBrZXk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGtleSwga2V5X3NldCkKKyAgICAgICAgICAgIGtleV9zZXQucmVtb3ZlKGtleSkKKyAgICAgICAgICAgIGtleSA9IHNlbGYuZy5uZXh0a2V5KGtleSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5nWyd4eHgnXSkKKworICAgIGRlZiB0ZXN0X2Vycm9yX2NvbmRpdGlvbnMoc2VsZik6CisgICAgICAgICMgVHJ5IHRvIG9wZW4gYSBub24tZXhpc3RlbnQgZGF0YWJhc2UuCisgICAgICAgIHVubGluayhmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZ2RibS5lcnJvciwgZ2RibS5vcGVuLCBmaWxlbmFtZSwgJ3InKQorICAgICAgICAjIFRyeSB0byBhY2Nlc3MgYSBjbG9zZWQgZGF0YWJhc2UuCisgICAgICAgIHNlbGYuZyA9IGdkYm0ub3BlbihmaWxlbmFtZSwgJ2MnKQorICAgICAgICBzZWxmLmcuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhnZGJtLmVycm9yLCBsYW1iZGE6IHNlbGYuZ1snYSddKQorICAgICAgICAjIHRyeSBwYXNzIGFuIGludmFsaWQgb3BlbiBmbGFnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGdkYm0uZXJyb3IsIGxhbWJkYTogZ2RibS5vcGVuKGZpbGVuYW1lLCAncngnKS5jbG9zZSgpKQorCisgICAgZGVmIHRlc3RfZmxhZ3Moc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgZmxhZyBwYXJhbWV0ZXIgb3BlbigpIGJ5IHRyeWluZyBhbGwgc3VwcG9ydGVkIGZsYWcgbW9kZXMuCisgICAgICAgIGFsbCA9IHNldChnZGJtLm9wZW5fZmxhZ3MpCisgICAgICAgICMgVGVzdCBzdGFuZGFyZCBmbGFncyAocHJlc3VtYWJseSAiY3J3biIpLgorICAgICAgICBtb2RlcyA9IGFsbCAtIHNldCgnZnN1JykKKyAgICAgICAgZm9yIG1vZGUgaW4gc29ydGVkKG1vZGVzKToKKyAgICAgICAgICAgIHNlbGYuZyA9IGdkYm0ub3BlbihmaWxlbmFtZSwgbW9kZSkKKyAgICAgICAgICAgIHNlbGYuZy5jbG9zZSgpCisKKyAgICAgICAgIyBUZXN0IGFkZGl0aW9uYWwgZmxhZ3MgKHByZXN1bWFibHkgImZzdSIpLgorICAgICAgICBmbGFncyA9IGFsbCAtIHNldCgnY3J3bicpCisgICAgICAgIGZvciBtb2RlIGluIG1vZGVzOgorICAgICAgICAgICAgZm9yIGZsYWcgaW4gZmxhZ3M6CisgICAgICAgICAgICAgICAgc2VsZi5nID0gZ2RibS5vcGVuKGZpbGVuYW1lLCBtb2RlICsgZmxhZykKKyAgICAgICAgICAgICAgICBzZWxmLmcuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcmVvcmdhbml6ZShzZWxmKToKKyAgICAgICAgc2VsZi5nID0gZ2RibS5vcGVuKGZpbGVuYW1lLCAnYycpCisgICAgICAgIHNpemUwID0gb3MucGF0aC5nZXRzaXplKGZpbGVuYW1lKQorCisgICAgICAgIHNlbGYuZ1sneCddID0gJ3gnICogMTAwMDAKKyAgICAgICAgc2l6ZTEgPSBvcy5wYXRoLmdldHNpemUoZmlsZW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaXplMCA8IHNpemUxKQorCisgICAgICAgIGRlbCBzZWxmLmdbJ3gnXQorICAgICAgICAjICdzaXplJyBpcyBzdXBwb3NlZCB0byBiZSB0aGUgc2FtZSBldmVuIGFmdGVyIGRlbGV0aW5nIGFuIGVudHJ5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguZ2V0c2l6ZShmaWxlbmFtZSksIHNpemUxKQorCisgICAgICAgIHNlbGYuZy5yZW9yZ2FuaXplKCkKKyAgICAgICAgc2l6ZTIgPSBvcy5wYXRoLmdldHNpemUoZmlsZW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaXplMSA+IHNpemUyID49IHNpemUwKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoVGVzdEdkYm0pCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3Mzk5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5CkBAIC0wLDAgKzEsMTkwNyBAQAordHV0b3JpYWxfdGVzdHMgPSAiIiIKK0xldCdzIHRyeSBhIHNpbXBsZSBnZW5lcmF0b3I6CisKKyAgICA+Pj4gZGVmIGYoKToKKyAgICAuLi4gICAgeWllbGQgMQorICAgIC4uLiAgICB5aWVsZCAyCisKKyAgICA+Pj4gZm9yIGkgaW4gZigpOgorICAgIC4uLiAgICAgcHJpbnQgaQorICAgIDEKKyAgICAyCisgICAgPj4+IGcgPSBmKCkKKyAgICA+Pj4gZy5uZXh0KCkKKyAgICAxCisgICAgPj4+IGcubmV4dCgpCisgICAgMgorCisiRmFsbGluZyBvZmYgdGhlIGVuZCIgc3RvcHMgdGhlIGdlbmVyYXRvcjoKKworICAgID4+PiBnLm5leHQoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDIsIGluIGcKKyAgICBTdG9wSXRlcmF0aW9uCisKKyJyZXR1cm4iIGFsc28gc3RvcHMgdGhlIGdlbmVyYXRvcjoKKworICAgID4+PiBkZWYgZigpOgorICAgIC4uLiAgICAgeWllbGQgMQorICAgIC4uLiAgICAgcmV0dXJuCisgICAgLi4uICAgICB5aWVsZCAyICMgbmV2ZXIgcmVhY2hlZAorICAgIC4uLgorICAgID4+PiBnID0gZigpCisgICAgPj4+IGcubmV4dCgpCisgICAgMQorICAgID4+PiBnLm5leHQoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDMsIGluIGYKKyAgICBTdG9wSXRlcmF0aW9uCisgICAgPj4+IGcubmV4dCgpICMgb25jZSBzdG9wcGVkLCBjYW4ndCBiZSByZXN1bWVkCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPworICAgIFN0b3BJdGVyYXRpb24KKworInJhaXNlIFN0b3BJdGVyYXRpb24iIHN0b3BzIHRoZSBnZW5lcmF0b3IgdG9vOgorCisgICAgPj4+IGRlZiBmKCk6CisgICAgLi4uICAgICB5aWVsZCAxCisgICAgLi4uICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgLi4uICAgICB5aWVsZCAyICMgbmV2ZXIgcmVhY2hlZAorICAgIC4uLgorICAgID4+PiBnID0gZigpCisgICAgPj4+IGcubmV4dCgpCisgICAgMQorICAgID4+PiBnLm5leHQoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KKyAgICBTdG9wSXRlcmF0aW9uCisgICAgPj4+IGcubmV4dCgpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPworICAgIFN0b3BJdGVyYXRpb24KKworSG93ZXZlciwgdGhleSBhcmUgbm90IGV4YWN0bHkgZXF1aXZhbGVudDoKKworICAgID4+PiBkZWYgZzEoKToKKyAgICAuLi4gICAgIHRyeToKKyAgICAuLi4gICAgICAgICByZXR1cm4KKyAgICAuLi4gICAgIGV4Y2VwdDoKKyAgICAuLi4gICAgICAgICB5aWVsZCAxCisgICAgLi4uCisgICAgPj4+IGxpc3QoZzEoKSkKKyAgICBbXQorCisgICAgPj4+IGRlZiBnMigpOgorICAgIC4uLiAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAuLi4gICAgIGV4Y2VwdDoKKyAgICAuLi4gICAgICAgICB5aWVsZCA0MgorICAgID4+PiBwcmludCBsaXN0KGcyKCkpCisgICAgWzQyXQorCitUaGlzIG1heSBiZSBzdXJwcmlzaW5nIGF0IGZpcnN0OgorCisgICAgPj4+IGRlZiBnMygpOgorICAgIC4uLiAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgIHJldHVybgorICAgIC4uLiAgICAgZmluYWxseToKKyAgICAuLi4gICAgICAgICB5aWVsZCAxCisgICAgLi4uCisgICAgPj4+IGxpc3QoZzMoKSkKKyAgICBbMV0KKworTGV0J3MgY3JlYXRlIGFuIGFsdGVybmF0ZSByYW5nZSgpIGZ1bmN0aW9uIGltcGxlbWVudGVkIGFzIGEgZ2VuZXJhdG9yOgorCisgICAgPj4+IGRlZiB5cmFuZ2Uobik6CisgICAgLi4uICAgICBmb3IgaSBpbiByYW5nZShuKToKKyAgICAuLi4gICAgICAgICB5aWVsZCBpCisgICAgLi4uCisgICAgPj4+IGxpc3QoeXJhbmdlKDUpKQorICAgIFswLCAxLCAyLCAzLCA0XQorCitHZW5lcmF0b3JzIGFsd2F5cyByZXR1cm4gdG8gdGhlIG1vc3QgcmVjZW50IGNhbGxlcjoKKworICAgID4+PiBkZWYgY3JlYXRvcigpOgorICAgIC4uLiAgICAgciA9IHlyYW5nZSg1KQorICAgIC4uLiAgICAgcHJpbnQgImNyZWF0b3IiLCByLm5leHQoKQorICAgIC4uLiAgICAgcmV0dXJuIHIKKyAgICAuLi4KKyAgICA+Pj4gZGVmIGNhbGxlcigpOgorICAgIC4uLiAgICAgciA9IGNyZWF0b3IoKQorICAgIC4uLiAgICAgZm9yIGkgaW4gcjoKKyAgICAuLi4gICAgICAgICAgICAgcHJpbnQgImNhbGxlciIsIGkKKyAgICAuLi4KKyAgICA+Pj4gY2FsbGVyKCkKKyAgICBjcmVhdG9yIDAKKyAgICBjYWxsZXIgMQorICAgIGNhbGxlciAyCisgICAgY2FsbGVyIDMKKyAgICBjYWxsZXIgNAorCitHZW5lcmF0b3JzIGNhbiBjYWxsIG90aGVyIGdlbmVyYXRvcnM6CisKKyAgICA+Pj4gZGVmIHpyYW5nZShuKToKKyAgICAuLi4gICAgIGZvciBpIGluIHlyYW5nZShuKToKKyAgICAuLi4gICAgICAgICB5aWVsZCBpCisgICAgLi4uCisgICAgPj4+IGxpc3QoenJhbmdlKDUpKQorICAgIFswLCAxLCAyLCAzLCA0XQorCisiIiIKKworIyBUaGUgZXhhbXBsZXMgZnJvbSBQRVAgMjU1LgorCitwZXBfdGVzdHMgPSAiIiIKKworU3BlY2lmaWNhdGlvbjogIFlpZWxkCisKKyAgICBSZXN0cmljdGlvbjogIEEgZ2VuZXJhdG9yIGNhbm5vdCBiZSByZXN1bWVkIHdoaWxlIGl0IGlzIGFjdGl2ZWx5CisgICAgcnVubmluZzoKKworICAgID4+PiBkZWYgZygpOgorICAgIC4uLiAgICAgaSA9IG1lLm5leHQoKQorICAgIC4uLiAgICAgeWllbGQgaQorICAgID4+PiBtZSA9IGcoKQorICAgID4+PiBtZS5uZXh0KCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIC4uLgorICAgICAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDIsIGluIGcKKyAgICBWYWx1ZUVycm9yOiBnZW5lcmF0b3IgYWxyZWFkeSBleGVjdXRpbmcKKworU3BlY2lmaWNhdGlvbjogUmV0dXJuCisKKyAgICBOb3RlIHRoYXQgcmV0dXJuIGlzbid0IGFsd2F5cyBlcXVpdmFsZW50IHRvIHJhaXNpbmcgU3RvcEl0ZXJhdGlvbjogIHRoZQorICAgIGRpZmZlcmVuY2UgbGllcyBpbiBob3cgZW5jbG9zaW5nIHRyeS9leGNlcHQgY29uc3RydWN0cyBhcmUgdHJlYXRlZC4KKyAgICBGb3IgZXhhbXBsZSwKKworICAgICAgICA+Pj4gZGVmIGYxKCk6CisgICAgICAgIC4uLiAgICAgdHJ5OgorICAgICAgICAuLi4gICAgICAgICByZXR1cm4KKyAgICAgICAgLi4uICAgICBleGNlcHQ6CisgICAgICAgIC4uLiAgICAgICAgeWllbGQgMQorICAgICAgICA+Pj4gcHJpbnQgbGlzdChmMSgpKQorICAgICAgICBbXQorCisgICAgYmVjYXVzZSwgYXMgaW4gYW55IGZ1bmN0aW9uLCByZXR1cm4gc2ltcGx5IGV4aXRzLCBidXQKKworICAgICAgICA+Pj4gZGVmIGYyKCk6CisgICAgICAgIC4uLiAgICAgdHJ5OgorICAgICAgICAuLi4gICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIC4uLiAgICAgZXhjZXB0OgorICAgICAgICAuLi4gICAgICAgICB5aWVsZCA0MgorICAgICAgICA+Pj4gcHJpbnQgbGlzdChmMigpKQorICAgICAgICBbNDJdCisKKyAgICBiZWNhdXNlIFN0b3BJdGVyYXRpb24gaXMgY2FwdHVyZWQgYnkgYSBiYXJlICJleGNlcHQiLCBhcyBpcyBhbnkKKyAgICBleGNlcHRpb24uCisKK1NwZWNpZmljYXRpb246IEdlbmVyYXRvcnMgYW5kIEV4Y2VwdGlvbiBQcm9wYWdhdGlvbgorCisgICAgPj4+IGRlZiBmKCk6CisgICAgLi4uICAgICByZXR1cm4gMS8vMAorICAgID4+PiBkZWYgZygpOgorICAgIC4uLiAgICAgeWllbGQgZigpICAjIHRoZSB6ZXJvIGRpdmlzaW9uIGV4Y2VwdGlvbiBwcm9wYWdhdGVzCisgICAgLi4uICAgICB5aWVsZCA0MiAgICMgYW5kIHdlJ2xsIG5ldmVyIGdldCBoZXJlCisgICAgPj4+IGsgPSBnKCkKKyAgICA+Pj4gay5uZXh0KCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAyLCBpbiBnCisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAyLCBpbiBmCisgICAgWmVyb0RpdmlzaW9uRXJyb3I6IGludGVnZXIgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm8KKyAgICA+Pj4gay5uZXh0KCkgICMgYW5kIHRoZSBnZW5lcmF0b3IgY2Fubm90IGJlIHJlc3VtZWQKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/CisgICAgU3RvcEl0ZXJhdGlvbgorICAgID4+PgorCitTcGVjaWZpY2F0aW9uOiBUcnkvRXhjZXB0L0ZpbmFsbHkKKworICAgID4+PiBkZWYgZigpOgorICAgIC4uLiAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgIHlpZWxkIDEKKyAgICAuLi4gICAgICAgICB0cnk6CisgICAgLi4uICAgICAgICAgICAgIHlpZWxkIDIKKyAgICAuLi4gICAgICAgICAgICAgMS8vMAorICAgIC4uLiAgICAgICAgICAgICB5aWVsZCAzICAjIG5ldmVyIGdldCBoZXJlCisgICAgLi4uICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgIC4uLiAgICAgICAgICAgICB5aWVsZCA0CisgICAgLi4uICAgICAgICAgICAgIHlpZWxkIDUKKyAgICAuLi4gICAgICAgICAgICAgcmFpc2UKKyAgICAuLi4gICAgICAgICBleGNlcHQ6CisgICAgLi4uICAgICAgICAgICAgIHlpZWxkIDYKKyAgICAuLi4gICAgICAgICB5aWVsZCA3ICAgICAjIHRoZSAicmFpc2UiIGFib3ZlIHN0b3BzIHRoaXMKKyAgICAuLi4gICAgIGV4Y2VwdDoKKyAgICAuLi4gICAgICAgICB5aWVsZCA4CisgICAgLi4uICAgICB5aWVsZCA5CisgICAgLi4uICAgICB0cnk6CisgICAgLi4uICAgICAgICAgeCA9IDEyCisgICAgLi4uICAgICBmaW5hbGx5OgorICAgIC4uLiAgICAgICAgIHlpZWxkIDEwCisgICAgLi4uICAgICB5aWVsZCAxMQorICAgID4+PiBwcmludCBsaXN0KGYoKSkKKyAgICBbMSwgMiwgNCwgNSwgOCwgOSwgMTAsIDExXQorICAgID4+PgorCitHdWlkbydzIGJpbmFyeSB0cmVlIGV4YW1wbGUuCisKKyAgICA+Pj4gIyBBIGJpbmFyeSB0cmVlIGNsYXNzLgorICAgID4+PiBjbGFzcyBUcmVlOgorICAgIC4uLgorICAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxhYmVsLCBsZWZ0PU5vbmUsIHJpZ2h0PU5vbmUpOgorICAgIC4uLiAgICAgICAgIHNlbGYubGFiZWwgPSBsYWJlbAorICAgIC4uLiAgICAgICAgIHNlbGYubGVmdCA9IGxlZnQKKyAgICAuLi4gICAgICAgICBzZWxmLnJpZ2h0ID0gcmlnaHQKKyAgICAuLi4KKyAgICAuLi4gICAgIGRlZiBfX3JlcHJfXyhzZWxmLCBsZXZlbD0wLCBpbmRlbnQ9IiAgICAiKToKKyAgICAuLi4gICAgICAgICBzID0gbGV2ZWwqaW5kZW50ICsgcmVwcihzZWxmLmxhYmVsKQorICAgIC4uLiAgICAgICAgIGlmIHNlbGYubGVmdDoKKyAgICAuLi4gICAgICAgICAgICAgcyA9IHMgKyAiXFxuIiArIHNlbGYubGVmdC5fX3JlcHJfXyhsZXZlbCsxLCBpbmRlbnQpCisgICAgLi4uICAgICAgICAgaWYgc2VsZi5yaWdodDoKKyAgICAuLi4gICAgICAgICAgICAgcyA9IHMgKyAiXFxuIiArIHNlbGYucmlnaHQuX19yZXByX18obGV2ZWwrMSwgaW5kZW50KQorICAgIC4uLiAgICAgICAgIHJldHVybiBzCisgICAgLi4uCisgICAgLi4uICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgLi4uICAgICAgICAgcmV0dXJuIGlub3JkZXIoc2VsZikKKworICAgID4+PiAjIENyZWF0ZSBhIFRyZWUgZnJvbSBhIGxpc3QuCisgICAgPj4+IGRlZiB0cmVlKGxpc3QpOgorICAgIC4uLiAgICAgbiA9IGxlbihsaXN0KQorICAgIC4uLiAgICAgaWYgbiA9PSAwOgorICAgIC4uLiAgICAgICAgIHJldHVybiBbXQorICAgIC4uLiAgICAgaSA9IG4gLy8gMgorICAgIC4uLiAgICAgcmV0dXJuIFRyZWUobGlzdFtpXSwgdHJlZShsaXN0WzppXSksIHRyZWUobGlzdFtpKzE6XSkpCisKKyAgICA+Pj4gIyBTaG93IGl0IG9mZjogY3JlYXRlIGEgdHJlZS4KKyAgICA+Pj4gdCA9IHRyZWUoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIikKKworICAgID4+PiAjIEEgcmVjdXJzaXZlIGdlbmVyYXRvciB0aGF0IGdlbmVyYXRlcyBUcmVlIGxhYmVscyBpbiBpbi1vcmRlci4KKyAgICA+Pj4gZGVmIGlub3JkZXIodCk6CisgICAgLi4uICAgICBpZiB0OgorICAgIC4uLiAgICAgICAgIGZvciB4IGluIGlub3JkZXIodC5sZWZ0KToKKyAgICAuLi4gICAgICAgICAgICAgeWllbGQgeAorICAgIC4uLiAgICAgICAgIHlpZWxkIHQubGFiZWwKKyAgICAuLi4gICAgICAgICBmb3IgeCBpbiBpbm9yZGVyKHQucmlnaHQpOgorICAgIC4uLiAgICAgICAgICAgICB5aWVsZCB4CisKKyAgICA+Pj4gIyBTaG93IGl0IG9mZjogY3JlYXRlIGEgdHJlZS4KKyAgICA+Pj4gdCA9IHRyZWUoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIikKKyAgICA+Pj4gIyBQcmludCB0aGUgbm9kZXMgb2YgdGhlIHRyZWUgaW4gaW4tb3JkZXIuCisgICAgPj4+IGZvciB4IGluIHQ6CisgICAgLi4uICAgICBwcmludCB4LAorICAgIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWgorCisgICAgPj4+ICMgQSBub24tcmVjdXJzaXZlIGdlbmVyYXRvci4KKyAgICA+Pj4gZGVmIGlub3JkZXIobm9kZSk6CisgICAgLi4uICAgICBzdGFjayA9IFtdCisgICAgLi4uICAgICB3aGlsZSBub2RlOgorICAgIC4uLiAgICAgICAgIHdoaWxlIG5vZGUubGVmdDoKKyAgICAuLi4gICAgICAgICAgICAgc3RhY2suYXBwZW5kKG5vZGUpCisgICAgLi4uICAgICAgICAgICAgIG5vZGUgPSBub2RlLmxlZnQKKyAgICAuLi4gICAgICAgICB5aWVsZCBub2RlLmxhYmVsCisgICAgLi4uICAgICAgICAgd2hpbGUgbm90IG5vZGUucmlnaHQ6CisgICAgLi4uICAgICAgICAgICAgIHRyeToKKyAgICAuLi4gICAgICAgICAgICAgICAgIG5vZGUgPSBzdGFjay5wb3AoKQorICAgIC4uLiAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAuLi4gICAgICAgICAgICAgICAgIHJldHVybgorICAgIC4uLiAgICAgICAgICAgICB5aWVsZCBub2RlLmxhYmVsCisgICAgLi4uICAgICAgICAgbm9kZSA9IG5vZGUucmlnaHQKKworICAgID4+PiAjIEV4ZXJjaXNlIHRoZSBub24tcmVjdXJzaXZlIGdlbmVyYXRvci4KKyAgICA+Pj4gZm9yIHggaW4gdDoKKyAgICAuLi4gICAgIHByaW50IHgsCisgICAgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgUyBUIFUgViBXIFggWSBaCisKKyIiIgorCisjIEV4YW1wbGVzIGZyb20gSXRlcmF0b3ItTGlzdCBhbmQgUHl0aG9uLURldiBhbmQgYy5sLnB5LgorCitlbWFpbF90ZXN0cyA9ICIiIgorCitUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHlpZWxkaW5nIE5vbmUgYW5kIHJldHVybmluZyBpdC4KKworPj4+IGRlZiBnKCk6CisuLi4gICAgIGZvciBpIGluIHJhbmdlKDMpOgorLi4uICAgICAgICAgeWllbGQgTm9uZQorLi4uICAgICB5aWVsZCBOb25lCisuLi4gICAgIHJldHVybgorPj4+IGxpc3QoZygpKQorW05vbmUsIE5vbmUsIE5vbmUsIE5vbmVdCisKK0Vuc3VyZSB0aGF0IGV4cGxpY2l0bHkgcmFpc2luZyBTdG9wSXRlcmF0aW9uIGFjdHMgbGlrZSBhbnkgb3RoZXIgZXhjZXB0aW9uCitpbiB0cnkvZXhjZXB0LCBub3QgbGlrZSBhIHJldHVybi4KKworPj4+IGRlZiBnKCk6CisuLi4gICAgIHlpZWxkIDEKKy4uLiAgICAgdHJ5OgorLi4uICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorLi4uICAgICBleGNlcHQ6CisuLi4gICAgICAgICB5aWVsZCAyCisuLi4gICAgIHlpZWxkIDMKKz4+PiBsaXN0KGcoKSkKK1sxLCAyLCAzXQorCitOZXh0IG9uZSB3YXMgcG9zdGVkIHRvIGMubC5weS4KKworPj4+IGRlZiBnY29tYih4LCBrKToKKy4uLiAgICAgIkdlbmVyYXRlIGFsbCBjb21iaW5hdGlvbnMgb2YgayBlbGVtZW50cyBmcm9tIGxpc3QgeC4iCisuLi4KKy4uLiAgICAgaWYgayA+IGxlbih4KToKKy4uLiAgICAgICAgIHJldHVybgorLi4uICAgICBpZiBrID09IDA6CisuLi4gICAgICAgICB5aWVsZCBbXQorLi4uICAgICBlbHNlOgorLi4uICAgICAgICAgZmlyc3QsIHJlc3QgPSB4WzBdLCB4WzE6XQorLi4uICAgICAgICAgIyBBIGNvbWJpbmF0aW9uIGRvZXMgb3IgZG9lc24ndCBjb250YWluIGZpcnN0LgorLi4uICAgICAgICAgIyBJZiBpdCBkb2VzLCB0aGUgcmVtYWluZGVyIGlzIGEgay0xIGNvbWIgb2YgcmVzdC4KKy4uLiAgICAgICAgIGZvciBjIGluIGdjb21iKHJlc3QsIGstMSk6CisuLi4gICAgICAgICAgICAgYy5pbnNlcnQoMCwgZmlyc3QpCisuLi4gICAgICAgICAgICAgeWllbGQgYworLi4uICAgICAgICAgIyBJZiBpdCBkb2Vzbid0IGNvbnRhaW4gZmlyc3QsIGl0J3MgYSBrIGNvbWIgb2YgcmVzdC4KKy4uLiAgICAgICAgIGZvciBjIGluIGdjb21iKHJlc3QsIGspOgorLi4uICAgICAgICAgICAgIHlpZWxkIGMKKworPj4+IHNlcSA9IHJhbmdlKDEsIDUpCis+Pj4gZm9yIGsgaW4gcmFuZ2UobGVuKHNlcSkgKyAyKToKKy4uLiAgICAgcHJpbnQgIiVkLWNvbWJzIG9mICVzOiIgJSAoaywgc2VxKQorLi4uICAgICBmb3IgYyBpbiBnY29tYihzZXEsIGspOgorLi4uICAgICAgICAgcHJpbnQgIiAgICIsIGMKKzAtY29tYnMgb2YgWzEsIDIsIDMsIDRdOgorICAgIFtdCisxLWNvbWJzIG9mIFsxLCAyLCAzLCA0XToKKyAgICBbMV0KKyAgICBbMl0KKyAgICBbM10KKyAgICBbNF0KKzItY29tYnMgb2YgWzEsIDIsIDMsIDRdOgorICAgIFsxLCAyXQorICAgIFsxLCAzXQorICAgIFsxLCA0XQorICAgIFsyLCAzXQorICAgIFsyLCA0XQorICAgIFszLCA0XQorMy1jb21icyBvZiBbMSwgMiwgMywgNF06CisgICAgWzEsIDIsIDNdCisgICAgWzEsIDIsIDRdCisgICAgWzEsIDMsIDRdCisgICAgWzIsIDMsIDRdCis0LWNvbWJzIG9mIFsxLCAyLCAzLCA0XToKKyAgICBbMSwgMiwgMywgNF0KKzUtY29tYnMgb2YgWzEsIDIsIDMsIDRdOgorCitGcm9tIHRoZSBJdGVyYXRvcnMgbGlzdCwgYWJvdXQgdGhlIHR5cGVzIG9mIHRoZXNlIHRoaW5ncy4KKworPj4+IGRlZiBnKCk6CisuLi4gICAgIHlpZWxkIDEKKy4uLgorPj4+IHR5cGUoZykKKzx0eXBlICdmdW5jdGlvbic+Cis+Pj4gaSA9IGcoKQorPj4+IHR5cGUoaSkKKzx0eXBlICdnZW5lcmF0b3InPgorPj4+IFtzIGZvciBzIGluIGRpcihpKSBpZiBub3Qgcy5zdGFydHN3aXRoKCdfJyldCitbJ2Nsb3NlJywgJ2dpX2NvZGUnLCAnZ2lfZnJhbWUnLCAnZ2lfcnVubmluZycsICduZXh0JywgJ3NlbmQnLCAndGhyb3cnXQorPj4+IGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IEhBVkVfRE9DU1RSSU5HUworPj4+IHByaW50KGkubmV4dC5fX2RvY19fIGlmIEhBVkVfRE9DU1RSSU5HUyBlbHNlICd4Lm5leHQoKSAtPiB0aGUgbmV4dCB2YWx1ZSwgb3IgcmFpc2UgU3RvcEl0ZXJhdGlvbicpCit4Lm5leHQoKSAtPiB0aGUgbmV4dCB2YWx1ZSwgb3IgcmFpc2UgU3RvcEl0ZXJhdGlvbgorPj4+IGl0ZXIoaSkgaXMgaQorVHJ1ZQorPj4+IGltcG9ydCB0eXBlcworPj4+IGlzaW5zdGFuY2UoaSwgdHlwZXMuR2VuZXJhdG9yVHlwZSkKK1RydWUKKworQW5kIG1vcmUsIGFkZGVkIGxhdGVyLgorCis+Pj4gaS5naV9ydW5uaW5nCiswCis+Pj4gdHlwZShpLmdpX2ZyYW1lKQorPHR5cGUgJ2ZyYW1lJz4KKz4+PiBpLmdpX3J1bm5pbmcgPSA0MgorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAuLi4KK1R5cGVFcnJvcjogcmVhZG9ubHkgYXR0cmlidXRlCis+Pj4gZGVmIGcoKToKKy4uLiAgICAgeWllbGQgbWUuZ2lfcnVubmluZworPj4+IG1lID0gZygpCis+Pj4gbWUuZ2lfcnVubmluZworMAorPj4+IG1lLm5leHQoKQorMQorPj4+IG1lLmdpX3J1bm5pbmcKKzAKKworQSBjbGV2ZXIgdW5pb24tZmluZCBpbXBsZW1lbnRhdGlvbiBmcm9tIGMubC5weSwgZHVlIHRvIERhdmlkIEVwcHN0ZWluLgorU2VudDogRnJpZGF5LCBKdW5lIDI5LCAyMDAxIDEyOjE2IFBNCitUbzogcHl0aG9uLWxpc3RAcHl0aG9uLm9yZworU3ViamVjdDogUmU6IFBFUCAyNTU6IFNpbXBsZSBHZW5lcmF0b3JzCisKKz4+PiBjbGFzcyBkaXNqb2ludFNldDoKKy4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorLi4uICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorLi4uICAgICAgICAgc2VsZi5wYXJlbnQgPSBOb25lCisuLi4gICAgICAgICBzZWxmLmdlbmVyYXRvciA9IHNlbGYuZ2VuZXJhdGUoKQorLi4uCisuLi4gICAgIGRlZiBnZW5lcmF0ZShzZWxmKToKKy4uLiAgICAgICAgIHdoaWxlIG5vdCBzZWxmLnBhcmVudDoKKy4uLiAgICAgICAgICAgICB5aWVsZCBzZWxmCisuLi4gICAgICAgICBmb3IgeCBpbiBzZWxmLnBhcmVudC5nZW5lcmF0b3I6CisuLi4gICAgICAgICAgICAgeWllbGQgeAorLi4uCisuLi4gICAgIGRlZiBmaW5kKHNlbGYpOgorLi4uICAgICAgICAgcmV0dXJuIHNlbGYuZ2VuZXJhdG9yLm5leHQoKQorLi4uCisuLi4gICAgIGRlZiB1bmlvbihzZWxmLCBwYXJlbnQpOgorLi4uICAgICAgICAgaWYgc2VsZi5wYXJlbnQ6CisuLi4gICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiU29ycnksIEknbSBub3QgYSByb290ISIpCisuLi4gICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAorLi4uCisuLi4gICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorLi4uICAgICAgICAgcmV0dXJuIHNlbGYubmFtZQorCis+Pj4gbmFtZXMgPSAiQUJDREVGR0hJSktMTSIKKz4+PiBzZXRzID0gW2Rpc2pvaW50U2V0KG5hbWUpIGZvciBuYW1lIGluIG5hbWVzXQorPj4+IHJvb3RzID0gc2V0c1s6XQorCis+Pj4gaW1wb3J0IHJhbmRvbQorPj4+IGdlbiA9IHJhbmRvbS5XaWNobWFubkhpbGwoNDIpCis+Pj4gd2hpbGUgMToKKy4uLiAgICAgZm9yIHMgaW4gc2V0czoKKy4uLiAgICAgICAgIHByaW50ICIlcy0+JXMiICUgKHMsIHMuZmluZCgpKSwKKy4uLiAgICAgcHJpbnQKKy4uLiAgICAgaWYgbGVuKHJvb3RzKSA+IDE6CisuLi4gICAgICAgICBzMSA9IGdlbi5jaG9pY2Uocm9vdHMpCisuLi4gICAgICAgICByb290cy5yZW1vdmUoczEpCisuLi4gICAgICAgICBzMiA9IGdlbi5jaG9pY2Uocm9vdHMpCisuLi4gICAgICAgICBzMS51bmlvbihzMikKKy4uLiAgICAgICAgIHByaW50ICJtZXJnZWQiLCBzMSwgImludG8iLCBzMgorLi4uICAgICBlbHNlOgorLi4uICAgICAgICAgYnJlYWsKK0EtPkEgQi0+QiBDLT5DIEQtPkQgRS0+RSBGLT5GIEctPkcgSC0+SCBJLT5JIEotPkogSy0+SyBMLT5MIE0tPk0KK21lcmdlZCBEIGludG8gRworQS0+QSBCLT5CIEMtPkMgRC0+RyBFLT5FIEYtPkYgRy0+RyBILT5IIEktPkkgSi0+SiBLLT5LIEwtPkwgTS0+TQorbWVyZ2VkIEMgaW50byBGCitBLT5BIEItPkIgQy0+RiBELT5HIEUtPkUgRi0+RiBHLT5HIEgtPkggSS0+SSBKLT5KIEstPksgTC0+TCBNLT5NCittZXJnZWQgTCBpbnRvIEEKK0EtPkEgQi0+QiBDLT5GIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+SCBJLT5JIEotPkogSy0+SyBMLT5BIE0tPk0KK21lcmdlZCBIIGludG8gRQorQS0+QSBCLT5CIEMtPkYgRC0+RyBFLT5FIEYtPkYgRy0+RyBILT5FIEktPkkgSi0+SiBLLT5LIEwtPkEgTS0+TQorbWVyZ2VkIEIgaW50byBFCitBLT5BIEItPkUgQy0+RiBELT5HIEUtPkUgRi0+RiBHLT5HIEgtPkUgSS0+SSBKLT5KIEstPksgTC0+QSBNLT5NCittZXJnZWQgSiBpbnRvIEcKK0EtPkEgQi0+RSBDLT5GIEQtPkcgRS0+RSBGLT5GIEctPkcgSC0+RSBJLT5JIEotPkcgSy0+SyBMLT5BIE0tPk0KK21lcmdlZCBFIGludG8gRworQS0+QSBCLT5HIEMtPkYgRC0+RyBFLT5HIEYtPkYgRy0+RyBILT5HIEktPkkgSi0+RyBLLT5LIEwtPkEgTS0+TQorbWVyZ2VkIE0gaW50byBHCitBLT5BIEItPkcgQy0+RiBELT5HIEUtPkcgRi0+RiBHLT5HIEgtPkcgSS0+SSBKLT5HIEstPksgTC0+QSBNLT5HCittZXJnZWQgSSBpbnRvIEsKK0EtPkEgQi0+RyBDLT5GIEQtPkcgRS0+RyBGLT5GIEctPkcgSC0+RyBJLT5LIEotPkcgSy0+SyBMLT5BIE0tPkcKK21lcmdlZCBLIGludG8gQQorQS0+QSBCLT5HIEMtPkYgRC0+RyBFLT5HIEYtPkYgRy0+RyBILT5HIEktPkEgSi0+RyBLLT5BIEwtPkEgTS0+RworbWVyZ2VkIEYgaW50byBBCitBLT5BIEItPkcgQy0+QSBELT5HIEUtPkcgRi0+QSBHLT5HIEgtPkcgSS0+QSBKLT5HIEstPkEgTC0+QSBNLT5HCittZXJnZWQgQSBpbnRvIEcKK0EtPkcgQi0+RyBDLT5HIEQtPkcgRS0+RyBGLT5HIEctPkcgSC0+RyBJLT5HIEotPkcgSy0+RyBMLT5HIE0tPkcKKworIiIiCisjIEVtYWNzIHR1cmQgJworCisjIEZ1biB0ZXN0cyAoZm9yIHN1ZmZpY2llbnRseSB3YXJwZWQgbm90aW9ucyBvZiAiZnVuIikuCisKK2Z1bl90ZXN0cyA9ICIiIgorCitCdWlsZCB1cCB0byBhIHJlY3Vyc2l2ZSBTaWV2ZSBvZiBFcmF0b3N0aGVuZXMgZ2VuZXJhdG9yLgorCis+Pj4gZGVmIGZpcnN0bihnLCBuKToKKy4uLiAgICAgcmV0dXJuIFtnLm5leHQoKSBmb3IgaSBpbiByYW5nZShuKV0KKworPj4+IGRlZiBpbnRzZnJvbShpKToKKy4uLiAgICAgd2hpbGUgMToKKy4uLiAgICAgICAgIHlpZWxkIGkKKy4uLiAgICAgICAgIGkgKz0gMQorCis+Pj4gZmlyc3RuKGludHNmcm9tKDUpLCA3KQorWzUsIDYsIDcsIDgsIDksIDEwLCAxMV0KKworPj4+IGRlZiBleGNsdWRlX211bHRpcGxlcyhuLCBpbnRzKToKKy4uLiAgICAgZm9yIGkgaW4gaW50czoKKy4uLiAgICAgICAgIGlmIGkgJSBuOgorLi4uICAgICAgICAgICAgIHlpZWxkIGkKKworPj4+IGZpcnN0bihleGNsdWRlX211bHRpcGxlcygzLCBpbnRzZnJvbSgxKSksIDYpCitbMSwgMiwgNCwgNSwgNywgOF0KKworPj4+IGRlZiBzaWV2ZShpbnRzKToKKy4uLiAgICAgcHJpbWUgPSBpbnRzLm5leHQoKQorLi4uICAgICB5aWVsZCBwcmltZQorLi4uICAgICBub3RfZGl2aXNpYmxlX2J5X3ByaW1lID0gZXhjbHVkZV9tdWx0aXBsZXMocHJpbWUsIGludHMpCisuLi4gICAgIGZvciBwIGluIHNpZXZlKG5vdF9kaXZpc2libGVfYnlfcHJpbWUpOgorLi4uICAgICAgICAgeWllbGQgcAorCis+Pj4gcHJpbWVzID0gc2lldmUoaW50c2Zyb20oMikpCis+Pj4gZmlyc3RuKHByaW1lcywgMjApCitbMiwgMywgNSwgNywgMTEsIDEzLCAxNywgMTksIDIzLCAyOSwgMzEsIDM3LCA0MSwgNDMsIDQ3LCA1MywgNTksIDYxLCA2NywgNzFdCisKKworQW5vdGhlciBmYW1vdXMgcHJvYmxlbTogIGdlbmVyYXRlIGFsbCBpbnRlZ2VycyBvZiB0aGUgZm9ybQorICAgIDIqKmkgKiAzKipqICAqIDUqKmsKK2luIGluY3JlYXNpbmcgb3JkZXIsIHdoZXJlIGksaixrID49IDAuICBUcmlja2llciB0aGFuIGl0IG1heSBsb29rIGF0IGZpcnN0IQorVHJ5IHdyaXRpbmcgaXQgd2l0aG91dCBnZW5lcmF0b3JzLCBhbmQgY29ycmVjdGx5LCBhbmQgd2l0aG91dCBnZW5lcmF0aW5nCiszIGludGVybmFsIHJlc3VsdHMgZm9yIGVhY2ggcmVzdWx0IG91dHB1dC4KKworPj4+IGRlZiB0aW1lcyhuLCBnKToKKy4uLiAgICAgZm9yIGkgaW4gZzoKKy4uLiAgICAgICAgIHlpZWxkIG4gKiBpCis+Pj4gZmlyc3RuKHRpbWVzKDEwLCBpbnRzZnJvbSgxKSksIDEwKQorWzEwLCAyMCwgMzAsIDQwLCA1MCwgNjAsIDcwLCA4MCwgOTAsIDEwMF0KKworPj4+IGRlZiBtZXJnZShnLCBoKToKKy4uLiAgICAgbmcgPSBnLm5leHQoKQorLi4uICAgICBuaCA9IGgubmV4dCgpCisuLi4gICAgIHdoaWxlIDE6CisuLi4gICAgICAgICBpZiBuZyA8IG5oOgorLi4uICAgICAgICAgICAgIHlpZWxkIG5nCisuLi4gICAgICAgICAgICAgbmcgPSBnLm5leHQoKQorLi4uICAgICAgICAgZWxpZiBuZyA+IG5oOgorLi4uICAgICAgICAgICAgIHlpZWxkIG5oCisuLi4gICAgICAgICAgICAgbmggPSBoLm5leHQoKQorLi4uICAgICAgICAgZWxzZToKKy4uLiAgICAgICAgICAgICB5aWVsZCBuZworLi4uICAgICAgICAgICAgIG5nID0gZy5uZXh0KCkKKy4uLiAgICAgICAgICAgICBuaCA9IGgubmV4dCgpCisKK1RoZSBmb2xsb3dpbmcgd29ya3MsIGJ1dCBpcyBkb2luZyBhIHdoYWxlIG9mIGEgbG90IG9mIHJlZHVuZGFudCB3b3JrIC0tCitpdCdzIG5vdCBjbGVhciBob3cgdG8gZ2V0IHRoZSBpbnRlcm5hbCB1c2VzIG9mIG0yMzUgdG8gc2hhcmUgYSBzaW5nbGUKK2dlbmVyYXRvci4gIE5vdGUgdGhhdCBtZV90aW1lczIgKGV0YykgZWFjaCBuZWVkIHRvIHNlZSBldmVyeSBlbGVtZW50IGluIHRoZQorcmVzdWx0IHNlcXVlbmNlLiAgU28gdGhpcyBpcyBhbiBleGFtcGxlIHdoZXJlIGxhenkgbGlzdHMgYXJlIG1vcmUgbmF0dXJhbAorKHlvdSBjYW4gbG9vayBhdCB0aGUgaGVhZCBvZiBhIGxhenkgbGlzdCBhbnkgbnVtYmVyIG9mIHRpbWVzKS4KKworPj4+IGRlZiBtMjM1KCk6CisuLi4gICAgIHlpZWxkIDEKKy4uLiAgICAgbWVfdGltZXMyID0gdGltZXMoMiwgbTIzNSgpKQorLi4uICAgICBtZV90aW1lczMgPSB0aW1lcygzLCBtMjM1KCkpCisuLi4gICAgIG1lX3RpbWVzNSA9IHRpbWVzKDUsIG0yMzUoKSkKKy4uLiAgICAgZm9yIGkgaW4gbWVyZ2UobWVyZ2UobWVfdGltZXMyLAorLi4uICAgICAgICAgICAgICAgICAgICAgICAgICBtZV90aW1lczMpLAorLi4uICAgICAgICAgICAgICAgICAgICBtZV90aW1lczUpOgorLi4uICAgICAgICAgeWllbGQgaQorCitEb24ndCBwcmludCAidG9vIG1hbnkiIG9mIHRoZXNlIC0tIHRoZSBpbXBsZW1lbnRhdGlvbiBhYm92ZSBpcyBleHRyZW1lbHkKK2luZWZmaWNpZW50OiAgZWFjaCBjYWxsIG9mIG0yMzUoKSBsZWFkcyB0byAzIHJlY3Vyc2l2ZSBjYWxscywgYW5kIGluCit0dXJuIGVhY2ggb2YgdGhvc2UgMyBtb3JlLCBhbmQgc28gb24sIGFuZCBzbyBvbiwgdW50aWwgd2UndmUgZGVzY2VuZGVkCitlbm91Z2ggbGV2ZWxzIHRvIHNhdGlzZnkgdGhlIHByaW50IHN0bXRzLiAgVmVyeSBvZGQ6ICB3aGVuIEkgcHJpbnRlZCA1CitsaW5lcyBvZiByZXN1bHRzIGJlbG93LCB0aGlzIG1hbmFnZWQgdG8gc2NyZXcgdXAgV2luOTgncyBtYWxsb2MgaW4gInRoZQordXN1YWwiIHdheSwgaS5lLiB0aGUgaGVhcCBncmV3IG92ZXIgNE1iIHNvIFdpbjk4IHN0YXJ0ZWQgZnJhZ21lbnRpbmcKK2FkZHJlc3Mgc3BhY2UsIGFuZCBpdCAqbG9va2VkKiBsaWtlIGEgdmVyeSBzbG93IGxlYWsuCisKKz4+PiByZXN1bHQgPSBtMjM1KCkKKz4+PiBmb3IgaSBpbiByYW5nZSgzKToKKy4uLiAgICAgcHJpbnQgZmlyc3RuKHJlc3VsdCwgMTUpCitbMSwgMiwgMywgNCwgNSwgNiwgOCwgOSwgMTAsIDEyLCAxNSwgMTYsIDE4LCAyMCwgMjRdCitbMjUsIDI3LCAzMCwgMzIsIDM2LCA0MCwgNDUsIDQ4LCA1MCwgNTQsIDYwLCA2NCwgNzIsIDc1LCA4MF0KK1s4MSwgOTAsIDk2LCAxMDAsIDEwOCwgMTIwLCAxMjUsIDEyOCwgMTM1LCAxNDQsIDE1MCwgMTYwLCAxNjIsIDE4MCwgMTkyXQorCitIZWguICBIZXJlJ3Mgb25lIHdheSB0byBnZXQgYSBzaGFyZWQgbGlzdCwgY29tcGxldGUgd2l0aCBhbiBleGNydWNpYXRpbmcKK25hbWVzcGFjZSByZW5hbWluZyB0cmljay4gIFRoZSAqcHJldHR5KiBwYXJ0IGlzIHRoYXQgdGhlIHRpbWVzKCkgYW5kIG1lcmdlKCkKK2Z1bmN0aW9ucyBjYW4gYmUgcmV1c2VkIGFzLWlzLCBiZWNhdXNlIHRoZXkgb25seSBhc3N1bWUgdGhlaXIgc3RyZWFtCithcmd1bWVudHMgYXJlIGl0ZXJhYmxlIC0tIGEgTGF6eUxpc3QgaXMgdGhlIHNhbWUgYXMgYSBnZW5lcmF0b3IgdG8gdGltZXMoKS4KKworPj4+IGNsYXNzIExhenlMaXN0OgorLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgZyk6CisuLi4gICAgICAgICBzZWxmLnNvZmFyID0gW10KKy4uLiAgICAgICAgIHNlbGYuZmV0Y2ggPSBnLm5leHQKKy4uLgorLi4uICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisuLi4gICAgICAgICBzb2ZhciwgZmV0Y2ggPSBzZWxmLnNvZmFyLCBzZWxmLmZldGNoCisuLi4gICAgICAgICB3aGlsZSBpID49IGxlbihzb2Zhcik6CisuLi4gICAgICAgICAgICAgc29mYXIuYXBwZW5kKGZldGNoKCkpCisuLi4gICAgICAgICByZXR1cm4gc29mYXJbaV0KKworPj4+IGRlZiBtMjM1KCk6CisuLi4gICAgIHlpZWxkIDEKKy4uLiAgICAgIyBHYWNrOiAgbTIzNSBiZWxvdyBhY3R1YWxseSByZWZlcnMgdG8gYSBMYXp5TGlzdC4KKy4uLiAgICAgbWVfdGltZXMyID0gdGltZXMoMiwgbTIzNSkKKy4uLiAgICAgbWVfdGltZXMzID0gdGltZXMoMywgbTIzNSkKKy4uLiAgICAgbWVfdGltZXM1ID0gdGltZXMoNSwgbTIzNSkKKy4uLiAgICAgZm9yIGkgaW4gbWVyZ2UobWVyZ2UobWVfdGltZXMyLAorLi4uICAgICAgICAgICAgICAgICAgICAgICAgICBtZV90aW1lczMpLAorLi4uICAgICAgICAgICAgICAgICAgICBtZV90aW1lczUpOgorLi4uICAgICAgICAgeWllbGQgaQorCitQcmludCBhcyBtYW55IG9mIHRoZXNlIGFzIHlvdSBsaWtlIC0tICp0aGlzKiBpbXBsZW1lbnRhdGlvbiBpcyBtZW1vcnktCitlZmZpY2llbnQuCisKKz4+PiBtMjM1ID0gTGF6eUxpc3QobTIzNSgpKQorPj4+IGZvciBpIGluIHJhbmdlKDUpOgorLi4uICAgICBwcmludCBbbTIzNVtqXSBmb3IgaiBpbiByYW5nZSgxNSppLCAxNSooaSsxKSldCitbMSwgMiwgMywgNCwgNSwgNiwgOCwgOSwgMTAsIDEyLCAxNSwgMTYsIDE4LCAyMCwgMjRdCitbMjUsIDI3LCAzMCwgMzIsIDM2LCA0MCwgNDUsIDQ4LCA1MCwgNTQsIDYwLCA2NCwgNzIsIDc1LCA4MF0KK1s4MSwgOTAsIDk2LCAxMDAsIDEwOCwgMTIwLCAxMjUsIDEyOCwgMTM1LCAxNDQsIDE1MCwgMTYwLCAxNjIsIDE4MCwgMTkyXQorWzIwMCwgMjE2LCAyMjUsIDI0MCwgMjQzLCAyNTAsIDI1NiwgMjcwLCAyODgsIDMwMCwgMzIwLCAzMjQsIDM2MCwgMzc1LCAzODRdCitbNDAwLCA0MDUsIDQzMiwgNDUwLCA0ODAsIDQ4NiwgNTAwLCA1MTIsIDU0MCwgNTc2LCA2MDAsIDYyNSwgNjQwLCA2NDgsIDY3NV0KKworWWUgb2xkZSBGaWJvbmFjY2kgZ2VuZXJhdG9yLCBMYXp5TGlzdCBzdHlsZS4KKworPj4+IGRlZiBmaWJnZW4oYSwgYik6CisuLi4KKy4uLiAgICAgZGVmIHN1bShnLCBoKToKKy4uLiAgICAgICAgIHdoaWxlIDE6CisuLi4gICAgICAgICAgICAgeWllbGQgZy5uZXh0KCkgKyBoLm5leHQoKQorLi4uCisuLi4gICAgIGRlZiB0YWlsKGcpOgorLi4uICAgICAgICAgZy5uZXh0KCkgICAgIyB0aHJvdyBmaXJzdCBhd2F5CisuLi4gICAgICAgICBmb3IgeCBpbiBnOgorLi4uICAgICAgICAgICAgIHlpZWxkIHgKKy4uLgorLi4uICAgICB5aWVsZCBhCisuLi4gICAgIHlpZWxkIGIKKy4uLiAgICAgZm9yIHMgaW4gc3VtKGl0ZXIoZmliKSwKKy4uLiAgICAgICAgICAgICAgICAgIHRhaWwoaXRlcihmaWIpKSk6CisuLi4gICAgICAgICB5aWVsZCBzCisKKz4+PiBmaWIgPSBMYXp5TGlzdChmaWJnZW4oMSwgMikpCis+Pj4gZmlyc3RuKGl0ZXIoZmliKSwgMTcpCitbMSwgMiwgMywgNSwgOCwgMTMsIDIxLCAzNCwgNTUsIDg5LCAxNDQsIDIzMywgMzc3LCA2MTAsIDk4NywgMTU5NywgMjU4NF0KKworCitSdW5uaW5nIGFmdGVyIHlvdXIgdGFpbCB3aXRoIGl0ZXJ0b29scy50ZWUgKG5ldyBpbiB2ZXJzaW9uIDIuNCkKKworVGhlIGFsZ29yaXRobXMgIm0yMzUiIChIYW1taW5nKSBhbmQgRmlib25hY2NpIHByZXNlbnRlZCBhYm92ZSBhcmUgYm90aAorZXhhbXBsZXMgb2YgYSB3aG9sZSBmYW1pbHkgb2YgRlAgKGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcpIGFsZ29yaXRobXMKK3doZXJlIGEgZnVuY3Rpb24gcHJvZHVjZXMgYW5kIHJldHVybnMgYSBsaXN0IHdoaWxlIHRoZSBwcm9kdWN0aW9uIGFsZ29yaXRobQorc3VwcG9zZSB0aGUgbGlzdCBhcyBhbHJlYWR5IHByb2R1Y2VkIGJ5IHJlY3Vyc2l2ZWx5IGNhbGxpbmcgaXRzZWxmLgorRm9yIHRoZXNlIGFsZ29yaXRobXMgdG8gd29yaywgdGhleSBtdXN0OgorCistIHByb2R1Y2UgYXQgbGVhc3QgYSBmaXJzdCBlbGVtZW50IHdpdGhvdXQgcHJlc3VwcG9zaW5nIHRoZSBleGlzdGVuY2Ugb2YKKyAgdGhlIHJlc3Qgb2YgdGhlIGxpc3QKKy0gcHJvZHVjZSB0aGVpciBlbGVtZW50cyBpbiBhIGxhenkgbWFubmVyCisKK1RvIHdvcmsgZWZmaWNpZW50bHksIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgbXVzdCBub3QgYmUgcmVjb21wdXRlZCBvdmVyCithbmQgb3ZlciBhZ2Fpbi4gVGhpcyBpcyBlbnN1cmVkIGluIG1vc3QgRlAgbGFuZ3VhZ2VzIGFzIGEgYnVpbHQtaW4gZmVhdHVyZS4KK0luIHB5dGhvbiwgd2UgaGF2ZSB0byBleHBsaWNpdGx5IG1haW50YWluIGEgbGlzdCBvZiBhbHJlYWR5IGNvbXB1dGVkIHJlc3VsdHMKK2FuZCBhYmFuZG9uIGdlbnVpbmUgcmVjdXJzaXZpdHkuCisKK1RoaXMgaXMgd2hhdCBoYWQgYmVlbiBhdHRlbXB0ZWQgYWJvdmUgd2l0aCB0aGUgTGF6eUxpc3QgY2xhc3MuIE9uZSBwcm9ibGVtCit3aXRoIHRoYXQgY2xhc3MgaXMgdGhhdCBpdCBrZWVwcyBhIGxpc3Qgb2YgYWxsIG9mIHRoZSBnZW5lcmF0ZWQgcmVzdWx0cyBhbmQKK3RoZXJlZm9yZSBjb250aW51YWxseSBncm93cy4gVGhpcyBwYXJ0aWFsbHkgZGVmZWF0cyB0aGUgZ29hbCBvZiB0aGUgZ2VuZXJhdG9yCitjb25jZXB0LCB2aXouIHByb2R1Y2UgdGhlIHJlc3VsdHMgb25seSBhcyBuZWVkZWQgaW5zdGVhZCBvZiBwcm9kdWNpbmcgdGhlbQorYWxsIGFuZCB0aGVyZWJ5IHdhc3RpbmcgbWVtb3J5LgorCitUaGFua3MgdG8gaXRlcnRvb2xzLnRlZSwgaXQgaXMgbm93IGNsZWFyICJob3cgdG8gZ2V0IHRoZSBpbnRlcm5hbCB1c2VzIG9mCittMjM1IHRvIHNoYXJlIGEgc2luZ2xlIGdlbmVyYXRvciIuCisKKz4+PiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgdGVlCis+Pj4gZGVmIG0yMzUoKToKKy4uLiAgICAgZGVmIF9tMjM1KCk6CisuLi4gICAgICAgICB5aWVsZCAxCisuLi4gICAgICAgICBmb3IgbiBpbiBtZXJnZSh0aW1lcygyLCBtMiksCisuLi4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZSh0aW1lcygzLCBtMyksCisuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcyg1LCBtNSkpKToKKy4uLiAgICAgICAgICAgICB5aWVsZCBuCisuLi4gICAgIG0xID0gX20yMzUoKQorLi4uICAgICBtMiwgbTMsIG01LCBtUmVzID0gdGVlKG0xLCA0KQorLi4uICAgICByZXR1cm4gbVJlcworCis+Pj4gaXQgPSBtMjM1KCkKKz4+PiBmb3IgaSBpbiByYW5nZSg1KToKKy4uLiAgICAgcHJpbnQgZmlyc3RuKGl0LCAxNSkKK1sxLCAyLCAzLCA0LCA1LCA2LCA4LCA5LCAxMCwgMTIsIDE1LCAxNiwgMTgsIDIwLCAyNF0KK1syNSwgMjcsIDMwLCAzMiwgMzYsIDQwLCA0NSwgNDgsIDUwLCA1NCwgNjAsIDY0LCA3MiwgNzUsIDgwXQorWzgxLCA5MCwgOTYsIDEwMCwgMTA4LCAxMjAsIDEyNSwgMTI4LCAxMzUsIDE0NCwgMTUwLCAxNjAsIDE2MiwgMTgwLCAxOTJdCitbMjAwLCAyMTYsIDIyNSwgMjQwLCAyNDMsIDI1MCwgMjU2LCAyNzAsIDI4OCwgMzAwLCAzMjAsIDMyNCwgMzYwLCAzNzUsIDM4NF0KK1s0MDAsIDQwNSwgNDMyLCA0NTAsIDQ4MCwgNDg2LCA1MDAsIDUxMiwgNTQwLCA1NzYsIDYwMCwgNjI1LCA2NDAsIDY0OCwgNjc1XQorCitUaGUgInRlZSIgZnVuY3Rpb24gZG9lcyBqdXN0IHdoYXQgd2Ugd2FudC4gSXQgaW50ZXJuYWxseSBrZWVwcyBhIGdlbmVyYXRlZAorcmVzdWx0IGZvciBhcyBsb25nIGFzIGl0IGhhcyBub3QgYmVlbiAiY29uc3VtZWQiIGZyb20gYWxsIG9mIHRoZSBkdXBsaWNhdGVkCitpdGVyYXRvcnMsIHdoZXJldXBvbiBpdCBpcyBkZWxldGVkLiBZb3UgY2FuIHRoZXJlZm9yZSBwcmludCB0aGUgaGFtbWluZworc2VxdWVuY2UgZHVyaW5nIGhvdXJzIHdpdGhvdXQgaW5jcmVhc2luZyBtZW1vcnkgdXNhZ2UsIG9yIHZlcnkgbGl0dGxlLgorCitUaGUgYmVhdXR5IG9mIGl0IGlzIHRoYXQgcmVjdXJzaXZlIHJ1bm5pbmctYWZ0ZXItdGhlaXItdGFpbCBGUCBhbGdvcml0aG1zCithcmUgcXVpdGUgc3RyYWlnaHRmb3J3YXJkbHkgZXhwcmVzc2VkIHdpdGggdGhpcyBQeXRob24gaWRpb20uCisKK1llIG9sZGUgRmlib25hY2NpIGdlbmVyYXRvciwgdGVlIHN0eWxlLgorCis+Pj4gZGVmIGZpYigpOgorLi4uCisuLi4gICAgIGRlZiBfaXN1bShnLCBoKToKKy4uLiAgICAgICAgIHdoaWxlIDE6CisuLi4gICAgICAgICAgICAgeWllbGQgZy5uZXh0KCkgKyBoLm5leHQoKQorLi4uCisuLi4gICAgIGRlZiBfZmliKCk6CisuLi4gICAgICAgICB5aWVsZCAxCisuLi4gICAgICAgICB5aWVsZCAyCisuLi4gICAgICAgICBmaWJUYWlsLm5leHQoKSAjIHRocm93IGZpcnN0IGF3YXkKKy4uLiAgICAgICAgIGZvciByZXMgaW4gX2lzdW0oZmliSGVhZCwgZmliVGFpbCk6CisuLi4gICAgICAgICAgICAgeWllbGQgcmVzCisuLi4KKy4uLiAgICAgcmVhbGZpYiA9IF9maWIoKQorLi4uICAgICBmaWJIZWFkLCBmaWJUYWlsLCBmaWJSZXMgPSB0ZWUocmVhbGZpYiwgMykKKy4uLiAgICAgcmV0dXJuIGZpYlJlcworCis+Pj4gZmlyc3RuKGZpYigpLCAxNykKK1sxLCAyLCAzLCA1LCA4LCAxMywgMjEsIDM0LCA1NSwgODksIDE0NCwgMjMzLCAzNzcsIDYxMCwgOTg3LCAxNTk3LCAyNTg0XQorCisiIiIKKworIyBzeW50YXhfdGVzdHMgbW9zdGx5IHByb3Zva2VzIFN5bnRheEVycm9ycy4gIEFsc28gZmlkZGxpbmcgd2l0aCAjaWYgMAorIyBoYWNrZXJ5LgorCitzeW50YXhfdGVzdHMgPSAiIiIKKworPj4+IGRlZiBmKCk6CisuLi4gICAgIHJldHVybiAyMgorLi4uICAgICB5aWVsZCAxCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIC4uCitTeW50YXhFcnJvcjogJ3JldHVybicgd2l0aCBhcmd1bWVudCBpbnNpZGUgZ2VuZXJhdG9yICg8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5zeW50YXhbMF0+LCBsaW5lIDMpCisKKz4+PiBkZWYgZigpOgorLi4uICAgICB5aWVsZCAxCisuLi4gICAgIHJldHVybiAyMgorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAuLgorU3ludGF4RXJyb3I6ICdyZXR1cm4nIHdpdGggYXJndW1lbnQgaW5zaWRlIGdlbmVyYXRvciAoPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uc3ludGF4WzFdPiwgbGluZSAzKQorCisicmV0dXJuIE5vbmUiIGlzIG5vdCB0aGUgc2FtZSBhcyAicmV0dXJuIiBpbiBhIGdlbmVyYXRvcjoKKworPj4+IGRlZiBmKCk6CisuLi4gICAgIHlpZWxkIDEKKy4uLiAgICAgcmV0dXJuIE5vbmUKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgLi4KK1N5bnRheEVycm9yOiAncmV0dXJuJyB3aXRoIGFyZ3VtZW50IGluc2lkZSBnZW5lcmF0b3IgKDxkb2N0ZXN0IHRlc3QudGVzdF9nZW5lcmF0b3JzLl9fdGVzdF9fLnN5bnRheFsyXT4sIGxpbmUgMykKKworVGhlc2UgYXJlIGZpbmU6CisKKz4+PiBkZWYgZigpOgorLi4uICAgICB5aWVsZCAxCisuLi4gICAgIHJldHVybgorCis+Pj4gZGVmIGYoKToKKy4uLiAgICAgdHJ5OgorLi4uICAgICAgICAgeWllbGQgMQorLi4uICAgICBmaW5hbGx5OgorLi4uICAgICAgICAgcGFzcworCis+Pj4gZGVmIGYoKToKKy4uLiAgICAgdHJ5OgorLi4uICAgICAgICAgdHJ5OgorLi4uICAgICAgICAgICAgIDEvLzAKKy4uLiAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKy4uLiAgICAgICAgICAgICB5aWVsZCA2NjYKKy4uLiAgICAgICAgIGV4Y2VwdDoKKy4uLiAgICAgICAgICAgICBwYXNzCisuLi4gICAgIGZpbmFsbHk6CisuLi4gICAgICAgICBwYXNzCisKKz4+PiBkZWYgZigpOgorLi4uICAgICB0cnk6CisuLi4gICAgICAgICB0cnk6CisuLi4gICAgICAgICAgICAgeWllbGQgMTIKKy4uLiAgICAgICAgICAgICAxLy8wCisuLi4gICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisuLi4gICAgICAgICAgICAgeWllbGQgNjY2CisuLi4gICAgICAgICBleGNlcHQ6CisuLi4gICAgICAgICAgICAgdHJ5OgorLi4uICAgICAgICAgICAgICAgICB4ID0gMTIKKy4uLiAgICAgICAgICAgICBmaW5hbGx5OgorLi4uICAgICAgICAgICAgICAgICB5aWVsZCAxMgorLi4uICAgICBleGNlcHQ6CisuLi4gICAgICAgICByZXR1cm4KKz4+PiBsaXN0KGYoKSkKK1sxMiwgNjY2XQorCis+Pj4gZGVmIGYoKToKKy4uLiAgICB5aWVsZAorPj4+IHR5cGUoZigpKQorPHR5cGUgJ2dlbmVyYXRvcic+CisKKworPj4+IGRlZiBmKCk6CisuLi4gICAgaWYgMDoKKy4uLiAgICAgICAgeWllbGQKKz4+PiB0eXBlKGYoKSkKKzx0eXBlICdnZW5lcmF0b3InPgorCisKKz4+PiBkZWYgZigpOgorLi4uICAgICBpZiAwOgorLi4uICAgICAgICAgeWllbGQgMQorPj4+IHR5cGUoZigpKQorPHR5cGUgJ2dlbmVyYXRvcic+CisKKz4+PiBkZWYgZigpOgorLi4uICAgIGlmICIiOgorLi4uICAgICAgICB5aWVsZCBOb25lCis+Pj4gdHlwZShmKCkpCis8dHlwZSAnZ2VuZXJhdG9yJz4KKworPj4+IGRlZiBmKCk6CisuLi4gICAgIHJldHVybgorLi4uICAgICB0cnk6CisuLi4gICAgICAgICBpZiB4PT00OgorLi4uICAgICAgICAgICAgIHBhc3MKKy4uLiAgICAgICAgIGVsaWYgMDoKKy4uLiAgICAgICAgICAgICB0cnk6CisuLi4gICAgICAgICAgICAgICAgIDEvLzAKKy4uLiAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisuLi4gICAgICAgICAgICAgICAgIHBhc3MKKy4uLiAgICAgICAgICAgICBlbHNlOgorLi4uICAgICAgICAgICAgICAgICBpZiAwOgorLi4uICAgICAgICAgICAgICAgICAgICAgd2hpbGUgMTI6CisuLi4gICAgICAgICAgICAgICAgICAgICAgICAgeCArPSAxCisuLi4gICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgMiAjIGRvbid0IGJsaW5rCisuLi4gICAgICAgICAgICAgICAgICAgICAgICAgZihhLCBiLCBjLCBkLCBlKQorLi4uICAgICAgICAgZWxzZToKKy4uLiAgICAgICAgICAgICBwYXNzCisuLi4gICAgIGV4Y2VwdDoKKy4uLiAgICAgICAgIHggPSAxCisuLi4gICAgIHJldHVybgorPj4+IHR5cGUoZigpKQorPHR5cGUgJ2dlbmVyYXRvcic+CisKKz4+PiBkZWYgZigpOgorLi4uICAgICBpZiAwOgorLi4uICAgICAgICAgZGVmIGcoKToKKy4uLiAgICAgICAgICAgICB5aWVsZCAxCisuLi4KKz4+PiB0eXBlKGYoKSkKKzx0eXBlICdOb25lVHlwZSc+CisKKz4+PiBkZWYgZigpOgorLi4uICAgICBpZiAwOgorLi4uICAgICAgICAgY2xhc3MgQzoKKy4uLiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisuLi4gICAgICAgICAgICAgICAgIHlpZWxkIDEKKy4uLiAgICAgICAgICAgICBkZWYgZihzZWxmKToKKy4uLiAgICAgICAgICAgICAgICAgeWllbGQgMgorPj4+IHR5cGUoZigpKQorPHR5cGUgJ05vbmVUeXBlJz4KKworPj4+IGRlZiBmKCk6CisuLi4gICAgIGlmIDA6CisuLi4gICAgICAgICByZXR1cm4KKy4uLiAgICAgaWYgMDoKKy4uLiAgICAgICAgIHlpZWxkIDIKKz4+PiB0eXBlKGYoKSkKKzx0eXBlICdnZW5lcmF0b3InPgorCisKKz4+PiBkZWYgZigpOgorLi4uICAgICBpZiAwOgorLi4uICAgICAgICAgbGFtYmRhIHg6ICB4ICAgICAgICAjIHNob3VsZG4ndCB0cmlnZ2VyIGhlcmUKKy4uLiAgICAgICAgIHJldHVybiAgICAgICAgICAgICAgIyBvciBoZXJlCisuLi4gICAgICAgICBkZWYgZihpKToKKy4uLiAgICAgICAgICAgICByZXR1cm4gMippICAgICAgIyBvciBoZXJlCisuLi4gICAgICAgICBpZiAwOgorLi4uICAgICAgICAgICAgIHJldHVybiAzICAgICAgICAjIGJ1dCAqdGhpcyogc3Vja3MgKGxpbmUgOCkKKy4uLiAgICAgaWYgMDoKKy4uLiAgICAgICAgIHlpZWxkIDIgICAgICAgICAgICAgIyBiZWNhdXNlIGl0J3MgYSBnZW5lcmF0b3IgKGxpbmUgMTApCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CitTeW50YXhFcnJvcjogJ3JldHVybicgd2l0aCBhcmd1bWVudCBpbnNpZGUgZ2VuZXJhdG9yICg8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5zeW50YXhbMjRdPiwgbGluZSAxMCkKKworVGhpcyBvbmUgY2F1c2VkIGEgY3Jhc2ggKHNlZSBTRiBidWcgNTY3NTM4KToKKworPj4+IGRlZiBmKCk6CisuLi4gICAgIGZvciBpIGluIHJhbmdlKDMpOgorLi4uICAgICAgICAgdHJ5OgorLi4uICAgICAgICAgICAgIGNvbnRpbnVlCisuLi4gICAgICAgICBmaW5hbGx5OgorLi4uICAgICAgICAgICAgIHlpZWxkIGkKKy4uLgorPj4+IGcgPSBmKCkKKz4+PiBwcmludCBnLm5leHQoKQorMAorPj4+IHByaW50IGcubmV4dCgpCisxCis+Pj4gcHJpbnQgZy5uZXh0KCkKKzIKKz4+PiBwcmludCBnLm5leHQoKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorU3RvcEl0ZXJhdGlvbgorCisKK1Rlc3QgdGhlIGdpX2NvZGUgYXR0cmlidXRlCisKKz4+PiBkZWYgZigpOgorLi4uICAgICB5aWVsZCA1CisuLi4KKz4+PiBnID0gZigpCis+Pj4gZy5naV9jb2RlIGlzIGYuZnVuY19jb2RlCitUcnVlCis+Pj4gZy5uZXh0KCkKKzUKKz4+PiBnLm5leHQoKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorU3RvcEl0ZXJhdGlvbgorPj4+IGcuZ2lfY29kZSBpcyBmLmZ1bmNfY29kZQorVHJ1ZQorCisKK1Rlc3QgdGhlIF9fbmFtZV9fIGF0dHJpYnV0ZSBhbmQgdGhlIHJlcHIoKQorCis+Pj4gZGVmIGYoKToKKy4uLiAgICB5aWVsZCA1CisuLi4KKz4+PiBnID0gZigpCis+Pj4gZy5fX25hbWVfXworJ2YnCis+Pj4gcmVwcihnKSAgIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyc8Z2VuZXJhdG9yIG9iamVjdCBmIGF0IC4uLj4nCisKK0xhbWJkYXMgc2hvdWxkbid0IGhhdmUgdGhlaXIgdXN1YWwgcmV0dXJuIGJlaGF2aW9yLgorCis+Pj4geCA9IGxhbWJkYTogKHlpZWxkIDEpCis+Pj4gbGlzdCh4KCkpCitbMV0KKworPj4+IHggPSBsYW1iZGE6ICgoeWllbGQgMSksICh5aWVsZCAyKSkKKz4+PiBsaXN0KHgoKSkKK1sxLCAyXQorIiIiCisKKyMgY29uam9pbiBpcyBhIHNpbXBsZSBiYWNrdHJhY2tpbmcgZ2VuZXJhdG9yLCBuYW1lZCBpbiBob25vciBvZiBJY29uJ3MKKyMgImNvbmp1bmN0aW9uIiBjb250cm9sIHN0cnVjdHVyZS4gIFBhc3MgYSBsaXN0IG9mIG5vLWFyZ3VtZW50IGZ1bmN0aW9ucworIyB0aGF0IHJldHVybiBpdGVyYWJsZSBvYmplY3RzLiAgRWFzaWVzdCB0byBleHBsYWluIGJ5IGV4YW1wbGU6ICBhc3N1bWUgdGhlCisjIGZ1bmN0aW9uIGxpc3QgW3gsIHksIHpdIGlzIHBhc3NlZC4gIFRoZW4gY29uam9pbiBhY3RzIGxpa2U6CisjCisjIGRlZiBnKCk6CisjICAgICB2YWx1ZXMgPSBbTm9uZV0gKiAzCisjICAgICBmb3IgdmFsdWVzWzBdIGluIHgoKToKKyMgICAgICAgICBmb3IgdmFsdWVzWzFdIGluIHkoKToKKyMgICAgICAgICAgICAgZm9yIHZhbHVlc1syXSBpbiB6KCk6CisjICAgICAgICAgICAgICAgICB5aWVsZCB2YWx1ZXMKKyMKKyMgU28gc29tZSAzLWxpc3RzIG9mIHZhbHVlcyAqbWF5KiBiZSBnZW5lcmF0ZWQsIGVhY2ggdGltZSB3ZSBzdWNjZXNzZnVsbHkKKyMgZ2V0IGludG8gdGhlIGlubmVybW9zdCBsb29wLiAgSWYgYW4gaXRlcmF0b3IgZmFpbHMgKGlzIGV4aGF1c3RlZCkgYmVmb3JlCisjIHRoZW4sIGl0ICJiYWNrdHJhY2tzIiB0byBnZXQgdGhlIG5leHQgdmFsdWUgZnJvbSB0aGUgbmVhcmVzdCBlbmNsb3NpbmcKKyMgaXRlcmF0b3IgKHRoZSBvbmUgInRvIHRoZSBsZWZ0IiksIGFuZCBzdGFydHMgYWxsIG92ZXIgYWdhaW4gYXQgdGhlIG5leHQKKyMgc2xvdCAocHVtcHMgYSBmcmVzaCBpdGVyYXRvcikuICBPZiBjb3Vyc2UgdGhpcyBpcyBtb3N0IHVzZWZ1bCB3aGVuIHRoZQorIyBpdGVyYXRvcnMgaGF2ZSBzaWRlLWVmZmVjdHMsIHNvIHRoYXQgd2hpY2ggdmFsdWVzICpjYW4qIGJlIGdlbmVyYXRlZCBhdAorIyBlYWNoIHNsb3QgZGVwZW5kIG9uIHRoZSB2YWx1ZXMgaXRlcmF0ZWQgYXQgcHJldmlvdXMgc2xvdHMuCisKK2RlZiBzaW1wbGVfY29uam9pbihncyk6CisKKyAgICB2YWx1ZXMgPSBbTm9uZV0gKiBsZW4oZ3MpCisKKyAgICBkZWYgZ2VuKGkpOgorICAgICAgICBpZiBpID49IGxlbihncyk6CisgICAgICAgICAgICB5aWVsZCB2YWx1ZXMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciB2YWx1ZXNbaV0gaW4gZ3NbaV0oKToKKyAgICAgICAgICAgICAgICBmb3IgeCBpbiBnZW4oaSsxKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgeAorCisgICAgZm9yIHggaW4gZ2VuKDApOgorICAgICAgICB5aWVsZCB4CisKKyMgVGhhdCB3b3JrcyBmaW5lLCBidXQgcmVjdXJzaW5nIGEgbGV2ZWwgYW5kIGNoZWNraW5nIGkgYWdhaW5zdCBsZW4oZ3MpIGZvcgorIyBlYWNoIGl0ZW0gcHJvZHVjZWQgaXMgaW5lZmZpY2llbnQuICBCeSBkb2luZyBtYW51YWwgbG9vcCB1bnJvbGxpbmcgYWNyb3NzCisjIGdlbmVyYXRvciBib3VuZGFyaWVzLCBpdCdzIHBvc3NpYmxlIHRvIGVsaW1pbmF0ZSBtb3N0IG9mIHRoYXQgb3ZlcmhlYWQuCisjIFRoaXMgaXNuJ3Qgd29ydGggdGhlIGJvdGhlciAqaW4gZ2VuZXJhbCogZm9yIGdlbmVyYXRvcnMsIGJ1dCBjb25qb2luKCkgaXMKKyMgYSBjb3JlIGJ1aWxkaW5nIGJsb2NrIGZvciBzb21lIENQVS1pbnRlbnNpdmUgZ2VuZXJhdG9yIGFwcGxpY2F0aW9ucy4KKworZGVmIGNvbmpvaW4oZ3MpOgorCisgICAgbiA9IGxlbihncykKKyAgICB2YWx1ZXMgPSBbTm9uZV0gKiBuCisKKyAgICAjIERvIG9uZSBsb29wIG5lc3QgYXQgdGltZSByZWN1cnNpdmVseSwgdW50aWwgdGhlICMgb2YgbG9vcCBuZXN0cworICAgICMgcmVtYWluaW5nIGlzIGRpdmlzaWJsZSBieSAzLgorCisgICAgZGVmIGdlbihpKToKKyAgICAgICAgaWYgaSA+PSBuOgorICAgICAgICAgICAgeWllbGQgdmFsdWVzCisKKyAgICAgICAgZWxpZiAobi1pKSAlIDM6CisgICAgICAgICAgICBpcDEgPSBpKzEKKyAgICAgICAgICAgIGZvciB2YWx1ZXNbaV0gaW4gZ3NbaV0oKToKKyAgICAgICAgICAgICAgICBmb3IgeCBpbiBnZW4oaXAxKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgeAorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgeCBpbiBfZ2VuMyhpKToKKyAgICAgICAgICAgICAgICB5aWVsZCB4CisKKyAgICAjIERvIHRocmVlIGxvb3AgbmVzdHMgYXQgYSB0aW1lLCByZWN1cnNpbmcgb25seSBpZiBhdCBsZWFzdCB0aHJlZSBtb3JlCisgICAgIyByZW1haW4uICBEb24ndCBjYWxsIGRpcmVjdGx5OiAgdGhpcyBpcyBhbiBpbnRlcm5hbCBvcHRpbWl6YXRpb24gZm9yCisgICAgIyBnZW4ncyB1c2UuCisKKyAgICBkZWYgX2dlbjMoaSk6CisgICAgICAgIGFzc2VydCBpIDwgbiBhbmQgKG4taSkgJSAzID09IDAKKyAgICAgICAgaXAxLCBpcDIsIGlwMyA9IGkrMSwgaSsyLCBpKzMKKyAgICAgICAgZywgZzEsIGcyID0gZ3NbaSA6IGlwM10KKworICAgICAgICBpZiBpcDMgPj0gbjoKKyAgICAgICAgICAgICMgVGhlc2UgYXJlIHRoZSBsYXN0IHRocmVlLCBzbyB3ZSBjYW4geWllbGQgdmFsdWVzIGRpcmVjdGx5LgorICAgICAgICAgICAgZm9yIHZhbHVlc1tpXSBpbiBnKCk6CisgICAgICAgICAgICAgICAgZm9yIHZhbHVlc1tpcDFdIGluIGcxKCk6CisgICAgICAgICAgICAgICAgICAgIGZvciB2YWx1ZXNbaXAyXSBpbiBnMigpOgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgdmFsdWVzCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgQXQgbGVhc3QgNiBsb29wIG5lc3RzIHJlbWFpbjsgcGVlbCBvZmYgMyBhbmQgcmVjdXJzZSBmb3IgdGhlCisgICAgICAgICAgICAjIHJlc3QuCisgICAgICAgICAgICBmb3IgdmFsdWVzW2ldIGluIGcoKToKKyAgICAgICAgICAgICAgICBmb3IgdmFsdWVzW2lwMV0gaW4gZzEoKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHZhbHVlc1tpcDJdIGluIGcyKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiBfZ2VuMyhpcDMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHgKKworICAgIGZvciB4IGluIGdlbigwKToKKyAgICAgICAgeWllbGQgeAorCisjIEFuZCBvbmUgbW9yZSBhcHByb2FjaDogIEZvciBiYWNrdHJhY2tpbmcgYXBwcyBsaWtlIHRoZSBLbmlnaHQncyBUb3VyCisjIHNvbHZlciBiZWxvdywgdGhlIG51bWJlciBvZiBiYWNrdHJhY2tpbmcgbGV2ZWxzIGNhbiBiZSBlbm9ybW91cyAob25lCisjIGxldmVsIHBlciBzcXVhcmUsIGZvciB0aGUgS25pZ2h0J3MgVG91ciwgc28gdGhhdCBlLmcuIGEgMTAweDEwMCBib2FyZAorIyBuZWVkcyAxMCwwMDAgbGV2ZWxzKS4gIEluIHN1Y2ggY2FzZXMgUHl0aG9uIGlzIGxpa2VseSB0byBydW4gb3V0IG9mCisjIHN0YWNrIHNwYWNlIGR1ZSB0byByZWN1cnNpb24uICBTbyBoZXJlJ3MgYSByZWN1cnNpb24tZnJlZSB2ZXJzaW9uIG9mCisjIGNvbmpvaW4gdG9vLgorIyBOT1RFIFdFTEw6ICBUaGlzIGFsbG93cyBsYXJnZSBwcm9ibGVtcyB0byBiZSBzb2x2ZWQgd2l0aCBvbmx5IHRyaXZpYWwKKyMgZGVtYW5kcyBvbiBzdGFjayBzcGFjZS4gIFdpdGhvdXQgZXhwbGljaXRseSByZXN1bWFibGUgZ2VuZXJhdG9ycywgdGhpcyBpcworIyBtdWNoIGhhcmRlciB0byBhY2hpZXZlLiAgT1RPSCwgdGhpcyBpcyBtdWNoIHNsb3dlciAodXAgdG8gYSBmYWN0b3Igb2YgMikKKyMgdGhhbiB0aGUgZmFuY3kgdW5yb2xsZWQgcmVjdXJzaXZlIGNvbmpvaW4uCisKK2RlZiBmbGF0X2NvbmpvaW4oZ3MpOiAgIyByZW5hbWUgdG8gY29uam9pbiB0byBydW4gdGVzdHMgd2l0aCB0aGlzIGluc3RlYWQKKyAgICBuID0gbGVuKGdzKQorICAgIHZhbHVlcyA9IFtOb25lXSAqIG4KKyAgICBpdGVycyAgPSBbTm9uZV0gKiBuCisgICAgX1N0b3BJdGVyYXRpb24gPSBTdG9wSXRlcmF0aW9uICAjIG1ha2UgbG9jYWwgYmVjYXVzZSBjYXVnaHQgYSAqbG90KgorICAgIGkgPSAwCisgICAgd2hpbGUgMToKKyAgICAgICAgIyBEZXNjZW5kLgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBpIDwgbjoKKyAgICAgICAgICAgICAgICBpdCA9IGl0ZXJzW2ldID0gZ3NbaV0oKS5uZXh0CisgICAgICAgICAgICAgICAgdmFsdWVzW2ldID0gaXQoKQorICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICBleGNlcHQgX1N0b3BJdGVyYXRpb246CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgaSA9PSBuCisgICAgICAgICAgICB5aWVsZCB2YWx1ZXMKKworICAgICAgICAjIEJhY2t0cmFjayB1bnRpbCBhbiBvbGRlciBpdGVyYXRvciBjYW4gYmUgcmVzdW1lZC4KKyAgICAgICAgaSAtPSAxCisgICAgICAgIHdoaWxlIGkgPj0gMDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSBpdGVyc1tpXSgpCisgICAgICAgICAgICAgICAgIyBTdWNjZXNzISAgU3RhcnQgZnJlc2ggYXQgbmV4dCBsZXZlbC4KKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IF9TdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgICMgQ29udGludWUgYmFja3RyYWNraW5nLgorICAgICAgICAgICAgICAgIGkgLT0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IGkgPCAwCisgICAgICAgICAgICBicmVhaworCisjIEEgY29uam9pbi1iYXNlZCBOLVF1ZWVucyBzb2x2ZXIuCisKK2NsYXNzIFF1ZWVuczoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbik6CisgICAgICAgIHNlbGYubiA9IG4KKyAgICAgICAgcmFuZ2VuID0gcmFuZ2UobikKKworICAgICAgICAjIEFzc2lnbiBhIHVuaXF1ZSBpbnQgdG8gZWFjaCBjb2x1bW4gYW5kIGRpYWdvbmFsLgorICAgICAgICAjIGNvbHVtbnM6ICBuIG9mIHRob3NlLCByYW5nZShuKS4KKyAgICAgICAgIyBOVy1TRSBkaWFnb25hbHM6IDJuLTEgb2YgdGhlc2UsIGktaiB1bmlxdWUgYW5kIGludmFyaWFudCBhbG9uZworICAgICAgICAjIGVhY2gsIHNtYWxsZXN0IGktaiBpcyAwLShuLTEpID0gMS1uLCBzbyBhZGQgbi0xIHRvIHNoaWZ0IHRvIDAtCisgICAgICAgICMgYmFzZWQuCisgICAgICAgICMgTkUtU1cgZGlhZ29uYWxzOiAybi0xIG9mIHRoZXNlLCBpK2ogdW5pcXVlIGFuZCBpbnZhcmlhbnQgYWxvbmcKKyAgICAgICAgIyBlYWNoLCBzbWFsbGVzdCBpK2ogaXMgMCwgbGFyZ2VzdCBpcyAybi0yLgorCisgICAgICAgICMgRm9yIGVhY2ggc3F1YXJlLCBjb21wdXRlIGEgYml0IHZlY3RvciBvZiB0aGUgY29sdW1ucyBhbmQKKyAgICAgICAgIyBkaWFnb25hbHMgaXQgY292ZXJzLCBhbmQgZm9yIGVhY2ggcm93IGNvbXB1dGUgYSBmdW5jdGlvbiB0aGF0CisgICAgICAgICMgZ2VuZXJhdGVzIHRoZSBwb3NzaWJsaXRpZXMgZm9yIHRoZSBjb2x1bW5zIGluIHRoYXQgcm93LgorICAgICAgICBzZWxmLnJvd2dlbmVyYXRvcnMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZW46CisgICAgICAgICAgICByb3d1c2VzID0gWygxTCA8PCBqKSB8ICAgICAgICAgICAgICAgICAgIyBjb2x1bW4gb3JkaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgKG4gKyBpLWogKyBuLTEpKSB8ICAgICMgTlctU0Ugb3JkaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgKG4gKyAyKm4tMSArIGkraikpICAgICMgTkUtU1cgb3JkaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBqIGluIHJhbmdlbl0KKworICAgICAgICAgICAgZGVmIHJvd2dlbihyb3d1c2VzPXJvd3VzZXMpOgorICAgICAgICAgICAgICAgIGZvciBqIGluIHJhbmdlbjoKKyAgICAgICAgICAgICAgICAgICAgdXNlcyA9IHJvd3VzZXNbal0KKyAgICAgICAgICAgICAgICAgICAgaWYgdXNlcyAmIHNlbGYudXNlZCA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51c2VkIHw9IHVzZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXNlZCAmPSB+dXNlcworCisgICAgICAgICAgICBzZWxmLnJvd2dlbmVyYXRvcnMuYXBwZW5kKHJvd2dlbikKKworICAgICMgR2VuZXJhdGUgc29sdXRpb25zLgorICAgIGRlZiBzb2x2ZShzZWxmKToKKyAgICAgICAgc2VsZi51c2VkID0gMAorICAgICAgICBmb3Igcm93MmNvbCBpbiBjb25qb2luKHNlbGYucm93Z2VuZXJhdG9ycyk6CisgICAgICAgICAgICB5aWVsZCByb3cyY29sCisKKyAgICBkZWYgcHJpbnRzb2x1dGlvbihzZWxmLCByb3cyY29sKToKKyAgICAgICAgbiA9IHNlbGYubgorICAgICAgICBhc3NlcnQgbiA9PSBsZW4ocm93MmNvbCkKKyAgICAgICAgc2VwID0gIisiICsgIi0rIiAqIG4KKyAgICAgICAgcHJpbnQgc2VwCisgICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgorICAgICAgICAgICAgc3F1YXJlcyA9IFsiICIgZm9yIGogaW4gcmFuZ2UobildCisgICAgICAgICAgICBzcXVhcmVzW3JvdzJjb2xbaV1dID0gIlEiCisgICAgICAgICAgICBwcmludCAifCIgKyAifCIuam9pbihzcXVhcmVzKSArICJ8IgorICAgICAgICAgICAgcHJpbnQgc2VwCisKKyMgQSBjb25qb2luLWJhc2VkIEtuaWdodCdzIFRvdXIgc29sdmVyLiAgVGhpcyBpcyBwcmV0dHkgc29waGlzdGljYXRlZAorIyAoZS5nLiwgd2hlbiB1c2VkIHdpdGggZmxhdF9jb25qb2luIGFib3ZlLCBhbmQgcGFzc2luZyBoYXJkPTEgdG8gdGhlCisjIGNvbnN0cnVjdG9yLCBhIDIwMHgyMDAgS25pZ2h0J3MgVG91ciB3YXMgZm91bmQgcXVpY2tseSAtLSBub3RlIHRoYXQgd2UncmUKKyMgY3JlYXRpbmcgMTBzIG9mIHRob3VzYW5kcyBvZiBnZW5lcmF0b3JzIHRoZW4hKSwgYW5kIGlzIGxlbmd0aHkuCisKK2NsYXNzIEtuaWdodHM6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG0sIG4sIGhhcmQ9MCk6CisgICAgICAgIHNlbGYubSwgc2VsZi5uID0gbSwgbgorCisgICAgICAgICMgc29sdmUoKSB3aWxsIHNldCB1cCBzdWNjc1tpXSB0byBiZSBhIGxpc3Qgb2Ygc3F1YXJlICNpJ3MKKyAgICAgICAgIyBzdWNjZXNzb3JzLgorICAgICAgICBzdWNjcyA9IHNlbGYuc3VjY3MgPSBbXQorCisgICAgICAgICMgUmVtb3ZlIGkwIGZyb20gZWFjaCBvZiBpdHMgc3VjY2Vzc29yJ3Mgc3VjY2Vzc29yIGxpc3RzLCBpLmUuCisgICAgICAgICMgc3VjY2Vzc29ycyBjYW4ndCBnbyBiYWNrIHRvIGkwIGFnYWluLiAgUmV0dXJuIDAgaWYgd2UgY2FuCisgICAgICAgICMgZGV0ZWN0IHRoaXMgbWFrZXMgYSBzb2x1dGlvbiBpbXBvc3NpYmxlLCBlbHNlIHJldHVybiAxLgorCisgICAgICAgIGRlZiByZW1vdmVfZnJvbV9zdWNjZXNzb3JzKGkwLCBsZW49bGVuKToKKyAgICAgICAgICAgICMgSWYgd2UgcmVtb3ZlIGFsbCBleGl0cyBmcm9tIGEgZnJlZSBzcXVhcmUsIHdlJ3JlIGRlYWQ6CisgICAgICAgICAgICAjIGV2ZW4gaWYgd2UgbW92ZSB0byBpdCBuZXh0LCB3ZSBjYW4ndCBsZWF2ZSBpdCBhZ2Fpbi4KKyAgICAgICAgICAgICMgSWYgd2UgY3JlYXRlIGEgc3F1YXJlIHdpdGggb25lIGV4aXQsIHdlIG11c3QgdmlzaXQgaXQgbmV4dDsKKyAgICAgICAgICAgICMgZWxzZSBzb21lYm9keSBlbHNlIHdpbGwgaGF2ZSB0byB2aXNpdCBpdCwgYW5kIHNpbmNlIHRoZXJlJ3MKKyAgICAgICAgICAgICMgb25seSBvbmUgYWRqYWNlbnQsIHRoZXJlIHdvbid0IGJlIGEgd2F5IHRvIGxlYXZlIGl0IGFnYWluLgorICAgICAgICAgICAgIyBGaW5lbGx5LCBpZiB3ZSBjcmVhdGUgbW9yZSB0aGFuIG9uZSBmcmVlIHNxdWFyZSB3aXRoIGEKKyAgICAgICAgICAgICMgc2luZ2xlIGV4aXQsIHdlIGNhbiBvbmx5IG1vdmUgdG8gb25lIG9mIHRoZW0gbmV4dCwgbGVhdmluZworICAgICAgICAgICAgIyB0aGUgb3RoZXIgb25lIGEgZGVhZCBlbmQuCisgICAgICAgICAgICBuZTAgPSBuZTEgPSAwCisgICAgICAgICAgICBmb3IgaSBpbiBzdWNjc1tpMF06CisgICAgICAgICAgICAgICAgcyA9IHN1Y2NzW2ldCisgICAgICAgICAgICAgICAgcy5yZW1vdmUoaTApCisgICAgICAgICAgICAgICAgZSA9IGxlbihzKQorICAgICAgICAgICAgICAgIGlmIGUgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgbmUwICs9IDEKKyAgICAgICAgICAgICAgICBlbGlmIGUgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgbmUxICs9IDEKKyAgICAgICAgICAgIHJldHVybiBuZTAgPT0gMCBhbmQgbmUxIDwgMgorCisgICAgICAgICMgUHV0IGkwIGJhY2sgaW4gZWFjaCBvZiBpdHMgc3VjY2Vzc29yJ3Mgc3VjY2Vzc29yIGxpc3RzLgorCisgICAgICAgIGRlZiBhZGRfdG9fc3VjY2Vzc29ycyhpMCk6CisgICAgICAgICAgICBmb3IgaSBpbiBzdWNjc1tpMF06CisgICAgICAgICAgICAgICAgc3VjY3NbaV0uYXBwZW5kKGkwKQorCisgICAgICAgICMgR2VuZXJhdGUgdGhlIGZpcnN0IG1vdmUuCisgICAgICAgIGRlZiBmaXJzdCgpOgorICAgICAgICAgICAgaWYgbSA8IDEgb3IgbiA8IDE6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICMgU2luY2Ugd2UncmUgbG9va2luZyBmb3IgYSBjeWNsZSwgaXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgd2UKKyAgICAgICAgICAgICMgc3RhcnQuICBTdGFydGluZyBpbiBhIGNvcm5lciBtYWtlcyB0aGUgMm5kIG1vdmUgZWFzeS4KKyAgICAgICAgICAgIGNvcm5lciA9IHNlbGYuY29vcmRzMmluZGV4KDAsIDApCisgICAgICAgICAgICByZW1vdmVfZnJvbV9zdWNjZXNzb3JzKGNvcm5lcikKKyAgICAgICAgICAgIHNlbGYubGFzdGlqID0gY29ybmVyCisgICAgICAgICAgICB5aWVsZCBjb3JuZXIKKyAgICAgICAgICAgIGFkZF90b19zdWNjZXNzb3JzKGNvcm5lcikKKworICAgICAgICAjIEdlbmVyYXRlIHRoZSBzZWNvbmQgbW92ZXMuCisgICAgICAgIGRlZiBzZWNvbmQoKToKKyAgICAgICAgICAgIGNvcm5lciA9IHNlbGYuY29vcmRzMmluZGV4KDAsIDApCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5sYXN0aWogPT0gY29ybmVyICAjIGkuZS4sIHdlIHN0YXJ0ZWQgaW4gdGhlIGNvcm5lcgorICAgICAgICAgICAgaWYgbSA8IDMgb3IgbiA8IDM6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBhc3NlcnQgbGVuKHN1Y2NzW2Nvcm5lcl0pID09IDIKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmNvb3JkczJpbmRleCgxLCAyKSBpbiBzdWNjc1tjb3JuZXJdCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5jb29yZHMyaW5kZXgoMiwgMSkgaW4gc3VjY3NbY29ybmVyXQorICAgICAgICAgICAgIyBPbmx5IHR3byBjaG9pY2VzLiAgV2hpY2hldmVyIHdlIHBpY2ssIHRoZSBvdGhlciBtdXN0IGJlIHRoZQorICAgICAgICAgICAgIyBzcXVhcmUgcGlja2VkIG9uIG1vdmUgbSpuLCBhcyBpdCdzIHRoZSBvbmx5IHdheSB0byBnZXQgYmFjaworICAgICAgICAgICAgIyB0byAoMCwgMCkuICBTYXZlIGl0cyBpbmRleCBpbiBzZWxmLmZpbmFsIHNvIHRoYXQgbW92ZXMgYmVmb3JlCisgICAgICAgICAgICAjIHRoZSBsYXN0IGtub3cgaXQgbXVzdCBiZSBrZXB0IGZyZWUuCisgICAgICAgICAgICBmb3IgaSwgaiBpbiAoMSwgMiksICgyLCAxKToKKyAgICAgICAgICAgICAgICB0aGlzICA9IHNlbGYuY29vcmRzMmluZGV4KGksIGopCisgICAgICAgICAgICAgICAgZmluYWwgPSBzZWxmLmNvb3JkczJpbmRleCgzLWksIDMtaikKKyAgICAgICAgICAgICAgICBzZWxmLmZpbmFsID0gZmluYWwKKworICAgICAgICAgICAgICAgIHJlbW92ZV9mcm9tX3N1Y2Nlc3NvcnModGhpcykKKyAgICAgICAgICAgICAgICBzdWNjc1tmaW5hbF0uYXBwZW5kKGNvcm5lcikKKyAgICAgICAgICAgICAgICBzZWxmLmxhc3RpaiA9IHRoaXMKKyAgICAgICAgICAgICAgICB5aWVsZCB0aGlzCisgICAgICAgICAgICAgICAgc3VjY3NbZmluYWxdLnJlbW92ZShjb3JuZXIpCisgICAgICAgICAgICAgICAgYWRkX3RvX3N1Y2Nlc3NvcnModGhpcykKKworICAgICAgICAjIEdlbmVyYXRlIG1vdmVzIDMgdGhydSBtKm4tMS4KKyAgICAgICAgZGVmIGFkdmFuY2UobGVuPWxlbik6CisgICAgICAgICAgICAjIElmIHNvbWUgc3VjY2Vzc29yIGhhcyBvbmx5IG9uZSBleGl0LCBtdXN0IHRha2UgaXQuCisgICAgICAgICAgICAjIEVsc2UgZmF2b3Igc3VjY2Vzc29ycyB3aXRoIGZld2VyIGV4aXRzLgorICAgICAgICAgICAgY2FuZGlkYXRlcyA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiBzdWNjc1tzZWxmLmxhc3Rpal06CisgICAgICAgICAgICAgICAgZSA9IGxlbihzdWNjc1tpXSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgZSA+IDAsICJlbHNlIHJlbW92ZV9mcm9tX3N1Y2Nlc3NvcnMoKSBwcnVuaW5nIGZsYXdlZCIKKyAgICAgICAgICAgICAgICBpZiBlID09IDE6CisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSBbKGUsIGkpXQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKChlLCBpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5zb3J0KCkKKworICAgICAgICAgICAgZm9yIGUsIGkgaW4gY2FuZGlkYXRlczoKKyAgICAgICAgICAgICAgICBpZiBpICE9IHNlbGYuZmluYWw6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlbW92ZV9mcm9tX3N1Y2Nlc3NvcnMoaSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxhc3RpaiA9IGkKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGkKKyAgICAgICAgICAgICAgICAgICAgYWRkX3RvX3N1Y2Nlc3NvcnMoaSkKKworICAgICAgICAjIEdlbmVyYXRlIG1vdmVzIDMgdGhydSBtKm4tMS4gIEFsdGVybmF0aXZlIHZlcnNpb24gdXNpbmcgYQorICAgICAgICAjIHN0cm9uZ2VyIChidXQgbW9yZSBleHBlbnNpdmUpIGhldXJpc3RpYyB0byBvcmRlciBzdWNjZXNzb3JzLgorICAgICAgICAjIFNpbmNlIHRoZSAjIG9mIGJhY2t0cmFja2luZyBsZXZlbHMgaXMgbSpuLCBhIHBvb3IgbW92ZSBlYXJseSBvbgorICAgICAgICAjIGNhbiB0YWtlIGVvbnMgdG8gdW5kby4gIFNtYWxsZXN0IHNxdWFyZSBib2FyZCBmb3Igd2hpY2ggdGhpcworICAgICAgICAjIG1hdHRlcnMgYSBsb3QgaXMgNTJ4NTIuCisgICAgICAgIGRlZiBhZHZhbmNlX2hhcmQodm1pZD0obS0xKS8yLjAsIGhtaWQ9KG4tMSkvMi4wLCBsZW49bGVuKToKKyAgICAgICAgICAgICMgSWYgc29tZSBzdWNjZXNzb3IgaGFzIG9ubHkgb25lIGV4aXQsIG11c3QgdGFrZSBpdC4KKyAgICAgICAgICAgICMgRWxzZSBmYXZvciBzdWNjZXNzb3JzIHdpdGggZmV3ZXIgZXhpdHMuCisgICAgICAgICAgICAjIEJyZWFrIHRpZXMgdmlhIG1heCBkaXN0YW5jZSBmcm9tIGJvYXJkIGNlbnRlcnBvaW50IChmYXZvcgorICAgICAgICAgICAgIyBjb3JuZXJzIGFuZCBlZGdlcyB3aGVuZXZlciBwb3NzaWJsZSkuCisgICAgICAgICAgICBjYW5kaWRhdGVzID0gW10KKyAgICAgICAgICAgIGZvciBpIGluIHN1Y2NzW3NlbGYubGFzdGlqXToKKyAgICAgICAgICAgICAgICBlID0gbGVuKHN1Y2NzW2ldKQorICAgICAgICAgICAgICAgIGFzc2VydCBlID4gMCwgImVsc2UgcmVtb3ZlX2Zyb21fc3VjY2Vzc29ycygpIHBydW5pbmcgZmxhd2VkIgorICAgICAgICAgICAgICAgIGlmIGUgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcyA9IFsoZSwgMCwgaSldCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaTEsIGoxID0gc2VsZi5pbmRleDJjb29yZHMoaSkKKyAgICAgICAgICAgICAgICBkID0gKGkxIC0gdm1pZCkqKjIgKyAoajEgLSBobWlkKSoqMgorICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKChlLCAtZCwgaSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuc29ydCgpCisKKyAgICAgICAgICAgIGZvciBlLCBkLCBpIGluIGNhbmRpZGF0ZXM6CisgICAgICAgICAgICAgICAgaWYgaSAhPSBzZWxmLmZpbmFsOgorICAgICAgICAgICAgICAgICAgICBpZiByZW1vdmVfZnJvbV9zdWNjZXNzb3JzKGkpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sYXN0aWogPSBpCisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBpCisgICAgICAgICAgICAgICAgICAgIGFkZF90b19zdWNjZXNzb3JzKGkpCisKKyAgICAgICAgIyBHZW5lcmF0ZSB0aGUgbGFzdCBtb3ZlLgorICAgICAgICBkZWYgbGFzdCgpOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuZmluYWwgaW4gc3VjY3Nbc2VsZi5sYXN0aWpdCisgICAgICAgICAgICB5aWVsZCBzZWxmLmZpbmFsCisKKyAgICAgICAgaWYgbSpuIDwgNDoKKyAgICAgICAgICAgIHNlbGYuc3F1YXJlZ2VuZXJhdG9ycyA9IFtmaXJzdF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3F1YXJlZ2VuZXJhdG9ycyA9IFtmaXJzdCwgc2Vjb25kXSArIFwKKyAgICAgICAgICAgICAgICBbaGFyZCBhbmQgYWR2YW5jZV9oYXJkIG9yIGFkdmFuY2VdICogKG0qbiAtIDMpICsgXAorICAgICAgICAgICAgICAgIFtsYXN0XQorCisgICAgZGVmIGNvb3JkczJpbmRleChzZWxmLCBpLCBqKToKKyAgICAgICAgYXNzZXJ0IDAgPD0gaSA8IHNlbGYubQorICAgICAgICBhc3NlcnQgMCA8PSBqIDwgc2VsZi5uCisgICAgICAgIHJldHVybiBpICogc2VsZi5uICsgagorCisgICAgZGVmIGluZGV4MmNvb3JkcyhzZWxmLCBpbmRleCk6CisgICAgICAgIGFzc2VydCAwIDw9IGluZGV4IDwgc2VsZi5tICogc2VsZi5uCisgICAgICAgIHJldHVybiBkaXZtb2QoaW5kZXgsIHNlbGYubikKKworICAgIGRlZiBfaW5pdF9ib2FyZChzZWxmKToKKyAgICAgICAgc3VjY3MgPSBzZWxmLnN1Y2NzCisgICAgICAgIGRlbCBzdWNjc1s6XQorICAgICAgICBtLCBuID0gc2VsZi5tLCBzZWxmLm4KKyAgICAgICAgYzJpID0gc2VsZi5jb29yZHMyaW5kZXgKKworICAgICAgICBvZmZzZXRzID0gWyggMSwgIDIpLCAoIDIsICAxKSwgKCAyLCAtMSksICggMSwgLTIpLAorICAgICAgICAgICAgICAgICAgICgtMSwgLTIpLCAoLTIsIC0xKSwgKC0yLCAgMSksICgtMSwgIDIpXQorICAgICAgICByYW5nZW4gPSByYW5nZShuKQorICAgICAgICBmb3IgaSBpbiByYW5nZShtKToKKyAgICAgICAgICAgIGZvciBqIGluIHJhbmdlbjoKKyAgICAgICAgICAgICAgICBzID0gW2MyaShpK2lvLCBqK2pvKSBmb3IgaW8sIGpvIGluIG9mZnNldHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAwIDw9IGkraW8gPCBtIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPD0gaitqbyA8IG5dCisgICAgICAgICAgICAgICAgc3VjY3MuYXBwZW5kKHMpCisKKyAgICAjIEdlbmVyYXRlIHNvbHV0aW9ucy4KKyAgICBkZWYgc29sdmUoc2VsZik6CisgICAgICAgIHNlbGYuX2luaXRfYm9hcmQoKQorICAgICAgICBmb3IgeCBpbiBjb25qb2luKHNlbGYuc3F1YXJlZ2VuZXJhdG9ycyk6CisgICAgICAgICAgICB5aWVsZCB4CisKKyAgICBkZWYgcHJpbnRzb2x1dGlvbihzZWxmLCB4KToKKyAgICAgICAgbSwgbiA9IHNlbGYubSwgc2VsZi5uCisgICAgICAgIGFzc2VydCBsZW4oeCkgPT0gbSpuCisgICAgICAgIHcgPSBsZW4oc3RyKG0qbikpCisgICAgICAgIGZvcm1hdCA9ICIlIiArIHN0cih3KSArICJkIgorCisgICAgICAgIHNxdWFyZXMgPSBbW05vbmVdICogbiBmb3IgaSBpbiByYW5nZShtKV0KKyAgICAgICAgayA9IDEKKyAgICAgICAgZm9yIGkgaW4geDoKKyAgICAgICAgICAgIGkxLCBqMSA9IHNlbGYuaW5kZXgyY29vcmRzKGkpCisgICAgICAgICAgICBzcXVhcmVzW2kxXVtqMV0gPSBmb3JtYXQgJSBrCisgICAgICAgICAgICBrICs9IDEKKworICAgICAgICBzZXAgPSAiKyIgKyAoIi0iICogdyArICIrIikgKiBuCisgICAgICAgIHByaW50IHNlcAorICAgICAgICBmb3IgaSBpbiByYW5nZShtKToKKyAgICAgICAgICAgIHJvdyA9IHNxdWFyZXNbaV0KKyAgICAgICAgICAgIHByaW50ICJ8IiArICJ8Ii5qb2luKHJvdykgKyAifCIKKyAgICAgICAgICAgIHByaW50IHNlcAorCitjb25qb2luX3Rlc3RzID0gIiIiCisKK0dlbmVyYXRlIHRoZSAzLWJpdCBiaW5hcnkgbnVtYmVycyBpbiBvcmRlci4gIFRoaXMgaWxsdXN0cmF0ZXMgZHVtYmVzdC0KK3Bvc3NpYmxlIHVzZSBvZiBjb25qb2luLCBqdXN0IHRvIGdlbmVyYXRlIHRoZSBmdWxsIGNyb3NzLXByb2R1Y3QuCisKKz4+PiBmb3IgYyBpbiBjb25qb2luKFtsYW1iZGE6IGl0ZXIoKDAsIDEpKV0gKiAzKToKKy4uLiAgICAgcHJpbnQgYworWzAsIDAsIDBdCitbMCwgMCwgMV0KK1swLCAxLCAwXQorWzAsIDEsIDFdCitbMSwgMCwgMF0KK1sxLCAwLCAxXQorWzEsIDEsIDBdCitbMSwgMSwgMV0KKworRm9yIGVmZmljaWVuY3kgaW4gdHlwaWNhbCBiYWNrdHJhY2tpbmcgYXBwcywgY29uam9pbigpIHlpZWxkcyB0aGUgc2FtZSBsaXN0CitvYmplY3QgZWFjaCB0aW1lLiAgU28gaWYgeW91IHdhbnQgdG8gc2F2ZSBhd2F5IGEgZnVsbCBhY2NvdW50IG9mIGl0cworZ2VuZXJhdGVkIHNlcXVlbmNlLCB5b3UgbmVlZCB0byBjb3B5IGl0cyByZXN1bHRzLgorCis+Pj4gZGVmIGdlbmNvcHkoaXRlcmF0b3IpOgorLi4uICAgICBmb3IgeCBpbiBpdGVyYXRvcjoKKy4uLiAgICAgICAgIHlpZWxkIHhbOl0KKworPj4+IGZvciBuIGluIHJhbmdlKDEwKToKKy4uLiAgICAgYWxsID0gbGlzdChnZW5jb3B5KGNvbmpvaW4oW2xhbWJkYTogaXRlcigoMCwgMSkpXSAqIG4pKSkKKy4uLiAgICAgcHJpbnQgbiwgbGVuKGFsbCksIGFsbFswXSA9PSBbMF0gKiBuLCBhbGxbLTFdID09IFsxXSAqIG4KKzAgMSBUcnVlIFRydWUKKzEgMiBUcnVlIFRydWUKKzIgNCBUcnVlIFRydWUKKzMgOCBUcnVlIFRydWUKKzQgMTYgVHJ1ZSBUcnVlCis1IDMyIFRydWUgVHJ1ZQorNiA2NCBUcnVlIFRydWUKKzcgMTI4IFRydWUgVHJ1ZQorOCAyNTYgVHJ1ZSBUcnVlCis5IDUxMiBUcnVlIFRydWUKKworQW5kIHJ1biBhbiA4LXF1ZWVucyBzb2x2ZXIuCisKKz4+PiBxID0gUXVlZW5zKDgpCis+Pj4gTElNSVQgPSAyCis+Pj4gY291bnQgPSAwCis+Pj4gZm9yIHJvdzJjb2wgaW4gcS5zb2x2ZSgpOgorLi4uICAgICBjb3VudCArPSAxCisuLi4gICAgIGlmIGNvdW50IDw9IExJTUlUOgorLi4uICAgICAgICAgcHJpbnQgIlNvbHV0aW9uIiwgY291bnQKKy4uLiAgICAgICAgIHEucHJpbnRzb2x1dGlvbihyb3cyY29sKQorU29sdXRpb24gMQorKy0rLSstKy0rLSstKy0rLSsKK3xRfCB8IHwgfCB8IHwgfCB8CisrLSstKy0rLSstKy0rLSstKworfCB8IHwgfCB8UXwgfCB8IHwKKystKy0rLSstKy0rLSstKy0rCit8IHwgfCB8IHwgfCB8IHxRfAorKy0rLSstKy0rLSstKy0rLSsKK3wgfCB8IHwgfCB8UXwgfCB8CisrLSstKy0rLSstKy0rLSstKworfCB8IHxRfCB8IHwgfCB8IHwKKystKy0rLSstKy0rLSstKy0rCit8IHwgfCB8IHwgfCB8UXwgfAorKy0rLSstKy0rLSstKy0rLSsKK3wgfFF8IHwgfCB8IHwgfCB8CisrLSstKy0rLSstKy0rLSstKworfCB8IHwgfFF8IHwgfCB8IHwKKystKy0rLSstKy0rLSstKy0rCitTb2x1dGlvbiAyCisrLSstKy0rLSstKy0rLSstKworfFF8IHwgfCB8IHwgfCB8IHwKKystKy0rLSstKy0rLSstKy0rCit8IHwgfCB8IHwgfFF8IHwgfAorKy0rLSstKy0rLSstKy0rLSsKK3wgfCB8IHwgfCB8IHwgfFF8CisrLSstKy0rLSstKy0rLSstKworfCB8IHxRfCB8IHwgfCB8IHwKKystKy0rLSstKy0rLSstKy0rCit8IHwgfCB8IHwgfCB8UXwgfAorKy0rLSstKy0rLSstKy0rLSsKK3wgfCB8IHxRfCB8IHwgfCB8CisrLSstKy0rLSstKy0rLSstKworfCB8UXwgfCB8IHwgfCB8IHwKKystKy0rLSstKy0rLSstKy0rCit8IHwgfCB8IHxRfCB8IHwgfAorKy0rLSstKy0rLSstKy0rLSsKKworPj4+IHByaW50IGNvdW50LCAic29sdXRpb25zIGluIGFsbC4iCis5MiBzb2x1dGlvbnMgaW4gYWxsLgorCitBbmQgcnVuIGEgS25pZ2h0J3MgVG91ciBvbiBhIDEweDEwIGJvYXJkLiAgTm90ZSB0aGF0IHRoZXJlIGFyZSBhYm91dAorMjAsMDAwIHNvbHV0aW9ucyBldmVuIG9uIGEgNng2IGJvYXJkLCBzbyBkb24ndCBkYXJlIHJ1biB0aGlzIHRvIGV4aGF1c3Rpb24uCisKKz4+PiBrID0gS25pZ2h0cygxMCwgMTApCis+Pj4gTElNSVQgPSAyCis+Pj4gY291bnQgPSAwCis+Pj4gZm9yIHggaW4gay5zb2x2ZSgpOgorLi4uICAgICBjb3VudCArPSAxCisuLi4gICAgIGlmIGNvdW50IDw9IExJTUlUOgorLi4uICAgICAgICAgcHJpbnQgIlNvbHV0aW9uIiwgY291bnQKKy4uLiAgICAgICAgIGsucHJpbnRzb2x1dGlvbih4KQorLi4uICAgICBlbHNlOgorLi4uICAgICAgICAgYnJlYWsKK1NvbHV0aW9uIDEKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8ICAxfCA1OHwgMjd8IDM0fCAgM3wgNDB8IDI5fCAxMHwgIDV8ICA4fAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgMjZ8IDM1fCAgMnwgNTd8IDI4fCAzM3wgIDR8ICA3fCAzMHwgMTF8CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworfCA1OXwxMDB8IDczfCAzNnwgNDF8IDU2fCAzOXwgMzJ8ICA5fCAgNnwKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8IDc0fCAyNXwgNjB8IDU1fCA3MnwgMzd8IDQyfCA0OXwgMTJ8IDMxfAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgNjF8IDg2fCA5OXwgNzZ8IDYzfCA1MnwgNDd8IDM4fCA0M3wgNTB8CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworfCAyNHwgNzV8IDYyfCA4NXwgNTR8IDcxfCA2NHwgNTF8IDQ4fCAxM3wKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8IDg3fCA5OHwgOTF8IDgwfCA3N3wgODR8IDUzfCA0NnwgNjV8IDQ0fAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgOTB8IDIzfCA4OHwgOTV8IDcwfCA3OXwgNjh8IDgzfCAxNHwgMTd8CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworfCA5N3wgOTJ8IDIxfCA3OHwgODF8IDk0fCAxOXwgMTZ8IDQ1fCA2NnwKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8IDIyfCA4OXwgOTZ8IDkzfCAyMHwgNjl8IDgyfCA2N3wgMTh8IDE1fAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK1NvbHV0aW9uIDIKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8ICAxfCA1OHwgMjd8IDM0fCAgM3wgNDB8IDI5fCAxMHwgIDV8ICA4fAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgMjZ8IDM1fCAgMnwgNTd8IDI4fCAzM3wgIDR8ICA3fCAzMHwgMTF8CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworfCA1OXwxMDB8IDczfCAzNnwgNDF8IDU2fCAzOXwgMzJ8ICA5fCAgNnwKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8IDc0fCAyNXwgNjB8IDU1fCA3MnwgMzd8IDQyfCA0OXwgMTJ8IDMxfAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgNjF8IDg2fCA5OXwgNzZ8IDYzfCA1MnwgNDd8IDM4fCA0M3wgNTB8CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworfCAyNHwgNzV8IDYyfCA4NXwgNTR8IDcxfCA2NHwgNTF8IDQ4fCAxM3wKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8IDg3fCA5OHwgODl8IDgwfCA3N3wgODR8IDUzfCA0NnwgNjV8IDQ0fAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKK3wgOTB8IDIzfCA5MnwgOTV8IDcwfCA3OXwgNjh8IDgzfCAxNHwgMTd8CisrLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKworfCA5N3wgODh8IDIxfCA3OHwgODF8IDk0fCAxOXwgMTZ8IDQ1fCA2NnwKKystLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rCit8IDIyfCA5MXwgOTZ8IDkzfCAyMHwgNjl8IDgyfCA2N3wgMTh8IDE1fAorKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsKKyIiIgorCit3ZWFrcmVmX3Rlc3RzID0gIiIiXAorR2VuZXJhdG9ycyBhcmUgd2Vha2x5IHJlZmVyZW5jYWJsZToKKworPj4+IGltcG9ydCB3ZWFrcmVmCis+Pj4gZGVmIGdlbigpOgorLi4uICAgICB5aWVsZCAnZm9vIScKKy4uLgorPj4+IHdyID0gd2Vha3JlZi5yZWYoZ2VuKQorPj4+IHdyKCkgaXMgZ2VuCitUcnVlCis+Pj4gcCA9IHdlYWtyZWYucHJveHkoZ2VuKQorCitHZW5lcmF0b3ItaXRlcmF0b3JzIGFyZSB3ZWFrbHkgcmVmZXJlbmNhYmxlIGFzIHdlbGw6CisKKz4+PiBnaSA9IGdlbigpCis+Pj4gd3IgPSB3ZWFrcmVmLnJlZihnaSkKKz4+PiB3cigpIGlzIGdpCitUcnVlCis+Pj4gcCA9IHdlYWtyZWYucHJveHkoZ2kpCis+Pj4gbGlzdChwKQorWydmb28hJ10KKworIiIiCisKK2Nvcm91dGluZV90ZXN0cyA9ICIiIlwKK1NlbmRpbmcgYSB2YWx1ZSBpbnRvIGEgc3RhcnRlZCBnZW5lcmF0b3I6CisKKz4+PiBkZWYgZigpOgorLi4uICAgICBwcmludCAoeWllbGQgMSkKKy4uLiAgICAgeWllbGQgMgorPj4+IGcgPSBmKCkKKz4+PiBnLm5leHQoKQorMQorPj4+IGcuc2VuZCg0MikKKzQyCisyCisKK1NlbmRpbmcgYSB2YWx1ZSBpbnRvIGEgbmV3IGdlbmVyYXRvciBwcm9kdWNlcyBhIFR5cGVFcnJvcjoKKworPj4+IGYoKS5zZW5kKCJmb28iKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorLi4uCitUeXBlRXJyb3I6IGNhbid0IHNlbmQgbm9uLU5vbmUgdmFsdWUgdG8gYSBqdXN0LXN0YXJ0ZWQgZ2VuZXJhdG9yCisKKworWWllbGQgYnkgaXRzZWxmIHlpZWxkcyBOb25lOgorCis+Pj4gZGVmIGYoKTogeWllbGQKKz4+PiBsaXN0KGYoKSkKK1tOb25lXQorCisKKworQW4gb2JzY2VuZSBhYnVzZSBvZiBhIHlpZWxkIGV4cHJlc3Npb24gd2l0aGluIGEgZ2VuZXJhdG9yIGV4cHJlc3Npb246CisKKz4+PiBsaXN0KCh5aWVsZCAyMSkgZm9yIGkgaW4gcmFuZ2UoNCkpCitbMjEsIE5vbmUsIDIxLCBOb25lLCAyMSwgTm9uZSwgMjEsIE5vbmVdCisKK0FuZCBhIG1vcmUgc2FuZSwgYnV0IHN0aWxsIHdlaXJkIHVzYWdlOgorCis+Pj4gZGVmIGYoKTogbGlzdChpIGZvciBpIGluIFsoeWllbGQgMjYpXSkKKz4+PiB0eXBlKGYoKSkKKzx0eXBlICdnZW5lcmF0b3InPgorCisKK0EgeWllbGQgZXhwcmVzc2lvbiB3aXRoIGF1Z21lbnRlZCBhc3NpZ25tZW50LgorCis+Pj4gZGVmIGNvcm91dGluZShzZXEpOgorLi4uICAgICBjb3VudCA9IDAKKy4uLiAgICAgd2hpbGUgY291bnQgPCAyMDA6CisuLi4gICAgICAgICBjb3VudCArPSB5aWVsZAorLi4uICAgICAgICAgc2VxLmFwcGVuZChjb3VudCkKKz4+PiBzZXEgPSBbXQorPj4+IGMgPSBjb3JvdXRpbmUoc2VxKQorPj4+IGMubmV4dCgpCis+Pj4gcHJpbnQgc2VxCitbXQorPj4+IGMuc2VuZCgxMCkKKz4+PiBwcmludCBzZXEKK1sxMF0KKz4+PiBjLnNlbmQoMTApCis+Pj4gcHJpbnQgc2VxCitbMTAsIDIwXQorPj4+IGMuc2VuZCgxMCkKKz4+PiBwcmludCBzZXEKK1sxMCwgMjAsIDMwXQorCisKK0NoZWNrIHNvbWUgc3ludGF4IGVycm9ycyBmb3IgeWllbGQgZXhwcmVzc2lvbnM6CisKKz4+PiBmPWxhbWJkYTogKHlpZWxkIDEpLCh5aWVsZCAyKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAuLi4KKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uY29yb3V0aW5lWzIxXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiAneWllbGQnIG91dHNpZGUgZnVuY3Rpb24KKworPj4+IGRlZiBmKCk6IHJldHVybiBsYW1iZGEgeD0oeWllbGQpOiAxCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIC4uLgorU3ludGF4RXJyb3I6ICdyZXR1cm4nIHdpdGggYXJndW1lbnQgaW5zaWRlIGdlbmVyYXRvciAoPGRvY3Rlc3QgdGVzdC50ZXN0X2dlbmVyYXRvcnMuX190ZXN0X18uY29yb3V0aW5lWzIyXT4sIGxpbmUgMSkKKworPj4+IGRlZiBmKCk6IHggPSB5aWVsZCA9IHkKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgLi4uCisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9nZW5lcmF0b3JzLl9fdGVzdF9fLmNvcm91dGluZVsyM10+IiwgbGluZSAxCitTeW50YXhFcnJvcjogYXNzaWdubWVudCB0byB5aWVsZCBleHByZXNzaW9uIG5vdCBwb3NzaWJsZQorCis+Pj4gZGVmIGYoKTogKHlpZWxkIGJhcikgPSB5CitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIC4uLgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjRdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byB5aWVsZCBleHByZXNzaW9uCisKKz4+PiBkZWYgZigpOiAoeWllbGQgYmFyKSArPSB5CitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIC4uLgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXJhdG9ycy5fX3Rlc3RfXy5jb3JvdXRpbmVbMjVdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byB5aWVsZCBleHByZXNzaW9uCisKKworTm93IGNoZWNrIHNvbWUgdGhyb3coKSBjb25kaXRpb25zOgorCis+Pj4gZGVmIGYoKToKKy4uLiAgICAgd2hpbGUgVHJ1ZToKKy4uLiAgICAgICAgIHRyeToKKy4uLiAgICAgICAgICAgICBwcmludCAoeWllbGQpCisuLi4gICAgICAgICBleGNlcHQgVmFsdWVFcnJvcix2OgorLi4uICAgICAgICAgICAgIHByaW50ICJjYXVnaHQgVmFsdWVFcnJvciAoJXMpIiAlICh2KSwKKz4+PiBpbXBvcnQgc3lzCis+Pj4gZyA9IGYoKQorPj4+IGcubmV4dCgpCisKKz4+PiBnLnRocm93KFZhbHVlRXJyb3IpICMgdHlwZSBvbmx5CitjYXVnaHQgVmFsdWVFcnJvciAoKQorCis+Pj4gZy50aHJvdyhWYWx1ZUVycm9yKCJ4eXoiKSkgICMgdmFsdWUgb25seQorY2F1Z2h0IFZhbHVlRXJyb3IgKHh5eikKKworPj4+IGcudGhyb3coVmFsdWVFcnJvciwgVmFsdWVFcnJvcigxKSkgICAjIHZhbHVlK21hdGNoaW5nIHR5cGUKK2NhdWdodCBWYWx1ZUVycm9yICgxKQorCis+Pj4gZy50aHJvdyhWYWx1ZUVycm9yLCBUeXBlRXJyb3IoMSkpICAjIG1pc21hdGNoZWQgdHlwZSwgcmV3cmFwcGVkCitjYXVnaHQgVmFsdWVFcnJvciAoMSkKKworPj4+IGcudGhyb3coVmFsdWVFcnJvciwgVmFsdWVFcnJvcigxKSwgTm9uZSkgICAjIGV4cGxpY2l0IE5vbmUgdHJhY2ViYWNrCitjYXVnaHQgVmFsdWVFcnJvciAoMSkKKworPj4+IGcudGhyb3coVmFsdWVFcnJvcigxKSwgImZvbyIpICAgICAgICMgYmFkIGFyZ3MKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgLi4uCitUeXBlRXJyb3I6IGluc3RhbmNlIGV4Y2VwdGlvbiBtYXkgbm90IGhhdmUgYSBzZXBhcmF0ZSB2YWx1ZQorCis+Pj4gZy50aHJvdyhWYWx1ZUVycm9yLCAiZm9vIiwgMjMpICAgICAgIyBiYWQgYXJncworVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAuLi4KK1R5cGVFcnJvcjogdGhyb3coKSB0aGlyZCBhcmd1bWVudCBtdXN0IGJlIGEgdHJhY2ViYWNrIG9iamVjdAorCis+Pj4gZGVmIHRocm93KGcsZXhjKToKKy4uLiAgICAgdHJ5OgorLi4uICAgICAgICAgcmFpc2UgZXhjCisuLi4gICAgIGV4Y2VwdDoKKy4uLiAgICAgICAgIGcudGhyb3coKnN5cy5leGNfaW5mbygpKQorPj4+IHRocm93KGcsVmFsdWVFcnJvcikgIyBkbyBpdCB3aXRoIHRyYWNlYmFjayBpbmNsdWRlZAorY2F1Z2h0IFZhbHVlRXJyb3IgKCkKKworPj4+IGcuc2VuZCgxKQorMQorCis+Pj4gdGhyb3coZyxUeXBlRXJyb3IpICAjIHRlcm1pbmF0ZSB0aGUgZ2VuZXJhdG9yCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIC4uLgorVHlwZUVycm9yCisKKz4+PiBwcmludCBnLmdpX2ZyYW1lCitOb25lCisKKz4+PiBnLnNlbmQoMikKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgLi4uCitTdG9wSXRlcmF0aW9uCisKKz4+PiBnLnRocm93KFZhbHVlRXJyb3IsNikgICAgICAgIyB0aHJvdyBvbiBjbG9zZWQgZ2VuZXJhdG9yCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIC4uLgorVmFsdWVFcnJvcjogNgorCis+Pj4gZigpLnRocm93KFZhbHVlRXJyb3IsNykgICAgICMgdGhyb3cgb24ganVzdC1vcGVuZWQgZ2VuZXJhdG9yCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIC4uLgorVmFsdWVFcnJvcjogNworCis+Pj4gZigpLnRocm93KCJhYmMiKSAgICAgIyB0aHJvdyBvbiBqdXN0LW9wZW5lZCBnZW5lcmF0b3IKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgLi4uCitUeXBlRXJyb3I6IGV4Y2VwdGlvbnMgbXVzdCBiZSBjbGFzc2VzLCBvciBpbnN0YW5jZXMsIG5vdCBzdHIKKworTm93IGxldCdzIHRyeSBjbG9zaW5nIGEgZ2VuZXJhdG9yOgorCis+Pj4gZGVmIGYoKToKKy4uLiAgICAgdHJ5OiB5aWVsZAorLi4uICAgICBleGNlcHQgR2VuZXJhdG9yRXhpdDoKKy4uLiAgICAgICAgIHByaW50ICJleGl0aW5nIgorCis+Pj4gZyA9IGYoKQorPj4+IGcubmV4dCgpCis+Pj4gZy5jbG9zZSgpCitleGl0aW5nCis+Pj4gZy5jbG9zZSgpICAjIHNob3VsZCBiZSBuby1vcCBub3cKKworPj4+IGYoKS5jbG9zZSgpICAjIGNsb3NlIG9uIGp1c3Qtb3BlbmVkIGdlbmVyYXRvciBzaG91bGQgYmUgZmluZQorCis+Pj4gZGVmIGYoKTogeWllbGQgICAgICAjIGFuIGV2ZW4gc2ltcGxlciBnZW5lcmF0b3IKKz4+PiBmKCkuY2xvc2UoKSAgICAgICAgICMgY2xvc2UgYmVmb3JlIG9wZW5pbmcKKz4+PiBnID0gZigpCis+Pj4gZy5uZXh0KCkKKz4+PiBnLmNsb3NlKCkgICAgICAgICAgICMgY2xvc2Ugbm9ybWFsbHkKKworQW5kIGZpbmFsaXphdGlvbjoKKworPj4+IGRlZiBmKCk6CisuLi4gICAgIHRyeTogeWllbGQKKy4uLiAgICAgZmluYWxseToKKy4uLiAgICAgICAgIHByaW50ICJleGl0aW5nIgorCis+Pj4gZyA9IGYoKQorPj4+IGcubmV4dCgpCis+Pj4gZGVsIGcKK2V4aXRpbmcKKworPj4+IGNsYXNzIGNvbnRleHQob2JqZWN0KToKKy4uLiAgICBkZWYgX19lbnRlcl9fKHNlbGYpOiBwYXNzCisuLi4gICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKTogcHJpbnQgJ2V4aXRpbmcnCis+Pj4gZGVmIGYoKToKKy4uLiAgICAgd2l0aCBjb250ZXh0KCk6CisuLi4gICAgICAgICAgeWllbGQKKz4+PiBnID0gZigpCis+Pj4gZy5uZXh0KCkKKz4+PiBkZWwgZworZXhpdGluZworCisKK0dlbmVyYXRvckV4aXQgaXMgbm90IGNhdWdodCBieSBleGNlcHQgRXhjZXB0aW9uOgorCis+Pj4gZGVmIGYoKToKKy4uLiAgICAgdHJ5OiB5aWVsZAorLi4uICAgICBleGNlcHQgRXhjZXB0aW9uOiBwcmludCAnZXhjZXB0JworLi4uICAgICBmaW5hbGx5OiBwcmludCAnZmluYWxseScKKworPj4+IGcgPSBmKCkKKz4+PiBnLm5leHQoKQorPj4+IGRlbCBnCitmaW5hbGx5CisKKworTm93IGxldCdzIHRyeSBzb21lIGlsbC1iZWhhdmVkIGdlbmVyYXRvcnM6CisKKz4+PiBkZWYgZigpOgorLi4uICAgICB0cnk6IHlpZWxkCisuLi4gICAgIGV4Y2VwdCBHZW5lcmF0b3JFeGl0OgorLi4uICAgICAgICAgeWllbGQgImZvbyEiCis+Pj4gZyA9IGYoKQorPj4+IGcubmV4dCgpCis+Pj4gZy5jbG9zZSgpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIC4uLgorUnVudGltZUVycm9yOiBnZW5lcmF0b3IgaWdub3JlZCBHZW5lcmF0b3JFeGl0Cis+Pj4gZy5jbG9zZSgpCisKKworT3VyIGlsbC1iZWhhdmVkIGNvZGUgc2hvdWxkIGJlIGludm9rZWQgZHVyaW5nIEdDOgorCis+Pj4gaW1wb3J0IHN5cywgU3RyaW5nSU8KKz4+PiBvbGQsIHN5cy5zdGRlcnIgPSBzeXMuc3RkZXJyLCBTdHJpbmdJTy5TdHJpbmdJTygpCis+Pj4gZyA9IGYoKQorPj4+IGcubmV4dCgpCis+Pj4gZGVsIGcKKz4+PiBzeXMuc3RkZXJyLmdldHZhbHVlKCkuc3RhcnRzd2l0aCgKKy4uLiAgICAgIkV4Y2VwdGlvbiBSdW50aW1lRXJyb3I6ICdnZW5lcmF0b3IgaWdub3JlZCBHZW5lcmF0b3JFeGl0JyBpbiAiCisuLi4gKQorVHJ1ZQorPj4+IHN5cy5zdGRlcnIgPSBvbGQKKworCitBbmQgZXJyb3JzIHRocm93biBkdXJpbmcgY2xvc2luZyBzaG91bGQgcHJvcGFnYXRlOgorCis+Pj4gZGVmIGYoKToKKy4uLiAgICAgdHJ5OiB5aWVsZAorLi4uICAgICBleGNlcHQgR2VuZXJhdG9yRXhpdDoKKy4uLiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZmllISIpCis+Pj4gZyA9IGYoKQorPj4+IGcubmV4dCgpCis+Pj4gZy5jbG9zZSgpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIC4uLgorVHlwZUVycm9yOiBmaWUhCisKKworRW5zdXJlIHRoYXQgdmFyaW91cyB5aWVsZCBleHByZXNzaW9uIGNvbnN0cnVjdHMgbWFrZSB0aGVpcgorZW5jbG9zaW5nIGZ1bmN0aW9uIGEgZ2VuZXJhdG9yOgorCis+Pj4gZGVmIGYoKTogeCArPSB5aWVsZAorPj4+IHR5cGUoZigpKQorPHR5cGUgJ2dlbmVyYXRvcic+CisKKz4+PiBkZWYgZigpOiB4ID0geWllbGQKKz4+PiB0eXBlKGYoKSkKKzx0eXBlICdnZW5lcmF0b3InPgorCis+Pj4gZGVmIGYoKTogbGFtYmRhIHg9KHlpZWxkKTogMQorPj4+IHR5cGUoZigpKQorPHR5cGUgJ2dlbmVyYXRvcic+CisKKz4+PiBkZWYgZigpOiB4PShpIGZvciBpIGluICh5aWVsZCkgaWYgKHlpZWxkKSkKKz4+PiB0eXBlKGYoKSkKKzx0eXBlICdnZW5lcmF0b3InPgorCis+Pj4gZGVmIGYoZCk6IGRbKHlpZWxkICJhIildID0gZFsoeWllbGQgImIiKV0gPSAyNworPj4+IGRhdGEgPSBbMSwyXQorPj4+IGcgPSBmKGRhdGEpCis+Pj4gdHlwZShnKQorPHR5cGUgJ2dlbmVyYXRvcic+Cis+Pj4gZy5zZW5kKE5vbmUpCisnYScKKz4+PiBkYXRhCitbMSwgMl0KKz4+PiBnLnNlbmQoMCkKKydiJworPj4+IGRhdGEKK1syNywgMl0KKz4+PiB0cnk6IGcuc2VuZCgxKQorLi4uIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOiBwYXNzCis+Pj4gZGF0YQorWzI3LCAyN10KKworIiIiCisKK3JlZmxlYWtzX3Rlc3RzID0gIiIiCitQcmlvciB0byBhZGRpbmcgY3ljbGUtR0Mgc3VwcG9ydCB0byBpdGVydG9vbHMudGVlLCB0aGlzIGNvZGUgd291bGQgbGVhaworcmVmZXJlbmNlcy4gV2UgYWRkIGl0IHRvIHRoZSBzdGFuZGFyZCBzdWl0ZSBzbyB0aGUgcm91dGluZSByZWZsZWFrLXRlc3RzCit3b3VsZCB0cmlnZ2VyIGlmIGl0IHN0YXJ0cyBiZWluZyB1bmNsZWFuYWJsZSBhZ2Fpbi4KKworPj4+IGltcG9ydCBpdGVydG9vbHMKKz4+PiBkZWYgbGVhaygpOgorLi4uICAgICBjbGFzcyBnZW46CisuLi4gICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYKKy4uLiAgICAgICAgIGRlZiBuZXh0KHNlbGYpOgorLi4uICAgICAgICAgICAgIHJldHVybiBzZWxmLml0ZW0KKy4uLiAgICAgZyA9IGdlbigpCisuLi4gICAgIGhlYWQsIHRhaWwgPSBpdGVydG9vbHMudGVlKGcpCisuLi4gICAgIGcuaXRlbSA9IGhlYWQKKy4uLiAgICAgcmV0dXJuIGhlYWQKKz4+PiBpdCA9IGxlYWsoKQorCitNYWtlIHN1cmUgdG8gYWxzbyB0ZXN0IHRoZSBpbnZvbHZlbWVudCBvZiB0aGUgdGVlLWludGVybmFsIHRlZWRhdGFvYmplY3QsCit3aGljaCBzdG9yZXMgcmV0dXJuZWQgaXRlbXMuCisKKz4+PiBpdGVtID0gaXQubmV4dCgpCisKKworCitUaGlzIHRlc3QgbGVha2VkIGF0IG9uZSBwb2ludCBkdWUgdG8gZ2VuZXJhdG9yIGZpbmFsaXphdGlvbi9kZXN0cnVjdGlvbi4KK0l0IHdhcyBjb3BpZWQgZnJvbSBMaWIvdGVzdC9sZWFrZXJzL3Rlc3RfZ2VuZXJhdG9yX2N5Y2xlLnB5IGJlZm9yZSB0aGUgZmlsZQord2FzIHJlbW92ZWQuCisKKz4+PiBkZWYgbGVhaygpOgorLi4uICAgIGRlZiBnZW4oKToKKy4uLiAgICAgICAgd2hpbGUgVHJ1ZToKKy4uLiAgICAgICAgICAgIHlpZWxkIGcKKy4uLiAgICBnID0gZ2VuKCkKKworPj4+IGxlYWsoKQorCisKKworVGhpcyB0ZXN0IGlzbid0IHJlYWxseSBnZW5lcmF0b3IgcmVsYXRlZCwgYnV0IHJhdGhlciBleGNlcHRpb24taW4tY2xlYW51cAorcmVsYXRlZC4gVGhlIGNvcm91dGluZSB0ZXN0cyAoYWJvdmUpIGp1c3QgaGFwcGVuIHRvIGNhdXNlIGFuIGV4Y2VwdGlvbiBpbgordGhlIGdlbmVyYXRvcidzIF9fZGVsX18gKHRwX2RlbCkgbWV0aG9kLiBXZSBjYW4gYWxzbyB0ZXN0IGZvciB0aGlzCitleHBsaWNpdGx5LCB3aXRob3V0IGdlbmVyYXRvcnMuIFdlIGRvIGhhdmUgdG8gcmVkaXJlY3Qgc3RkZXJyIHRvIGF2b2lkCitwcmludGluZyB3YXJuaW5ncyBhbmQgdG8gZG91YmxlY2hlY2sgdGhhdCB3ZSBhY3R1YWxseSB0ZXN0ZWQgd2hhdCB3ZSB3YW50ZWQKK3RvIHRlc3QuCisKKz4+PiBpbXBvcnQgc3lzLCBTdHJpbmdJTworPj4+IG9sZCA9IHN5cy5zdGRlcnIKKz4+PiB0cnk6CisuLi4gICAgIHN5cy5zdGRlcnIgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisuLi4gICAgIGNsYXNzIExlYWtlcjoKKy4uLiAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorLi4uICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorLi4uCisuLi4gICAgIGwgPSBMZWFrZXIoKQorLi4uICAgICBkZWwgbAorLi4uICAgICBlcnIgPSBzeXMuc3RkZXJyLmdldHZhbHVlKCkuc3RyaXAoKQorLi4uICAgICBlcnIuc3RhcnRzd2l0aCgKKy4uLiAgICAgICAgICJFeGNlcHRpb24gUnVudGltZUVycm9yOiBSdW50aW1lRXJyb3IoKSBpbiA8IgorLi4uICAgICApCisuLi4gICAgIGVyci5lbmRzd2l0aCgiPiBpZ25vcmVkIikKKy4uLiAgICAgbGVuKGVyci5zcGxpdGxpbmVzKCkpCisuLi4gZmluYWxseToKKy4uLiAgICAgc3lzLnN0ZGVyciA9IG9sZAorVHJ1ZQorVHJ1ZQorMQorCisKKworVGhlc2UgcmVmbGVhayB0ZXN0cyBzaG91bGQgcGVyaGFwcyBiZSBpbiBhIHRlc3RmaWxlIG9mIHRoZWlyIG93biwKK3Rlc3RfZ2VuZXJhdG9ycyBqdXN0IGhhcHBlbmVkIHRvIGJlIHRoZSB0ZXN0IHRoYXQgZHJldyB0aGVzZSBvdXQuCisKKyIiIgorCitfX3Rlc3RfXyA9IHsidHV0IjogICAgICB0dXRvcmlhbF90ZXN0cywKKyAgICAgICAgICAgICJwZXAiOiAgICAgIHBlcF90ZXN0cywKKyAgICAgICAgICAgICJlbWFpbCI6ICAgIGVtYWlsX3Rlc3RzLAorICAgICAgICAgICAgImZ1biI6ICAgICAgZnVuX3Rlc3RzLAorICAgICAgICAgICAgInN5bnRheCI6ICAgc3ludGF4X3Rlc3RzLAorICAgICAgICAgICAgImNvbmpvaW4iOiAgY29uam9pbl90ZXN0cywKKyAgICAgICAgICAgICJ3ZWFrcmVmIjogIHdlYWtyZWZfdGVzdHMsCisgICAgICAgICAgICAiY29yb3V0aW5lIjogIGNvcm91dGluZV90ZXN0cywKKyAgICAgICAgICAgICJyZWZsZWFrcyI6IHJlZmxlYWtzX3Rlc3RzLAorICAgICAgICAgICAgfQorCisjIE1hZ2ljIHRlc3QgbmFtZSB0aGF0IHJlZ3J0ZXN0LnB5IGludm9rZXMgKmFmdGVyKiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUuCisjIFRoaXMgd29ybXMgYXJvdW5kIGEgYm9vdHN0cmFwIHByb2JsZW0uCisjIE5vdGUgdGhhdCBkb2N0ZXN0IGFuZCByZWdydGVzdCBib3RoIGxvb2sgaW4gc3lzLmFyZ3YgZm9yIGEgIi12IiBhcmd1bWVudCwKKyMgc28gdGhpcyB3b3JrcyBhcyBleHBlY3RlZCBpbiBib3RoIHdheXMgb2YgcnVubmluZyByZWdydGVzdC4KK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCwgdGVzdF9nZW5lcmF0b3JzCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfZ2VuZXJhdG9ycywgdmVyYm9zZSkKKworIyBUaGlzIHBhcnQgaXNuJ3QgbmVlZGVkIGZvciByZWdydGVzdCwgYnV0IGZvciBydW5uaW5nIHRoZSB0ZXN0IGRpcmVjdGx5LgoraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oMSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3NWI1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5CkBAIC0wLDAgKzEsMjU2IEBACisiIiIKK1Rlc3RzIGNvbW1vbiB0byBnZW5lcmljcGF0aCwgbWFjcGF0aCwgbnRwYXRoIGFuZCBwb3NpeHBhdGgKKyIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgb3MKK2ltcG9ydCBnZW5lcmljcGF0aAoraW1wb3J0IHN5cworCisKK2RlZiBzYWZlX3JtZGlyKGRpcm5hbWUpOgorICAgIHRyeToKKyAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcGFzcworCisKK2NsYXNzIEdlbmVyaWNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoZSBwYXRoIG1vZHVsZSB0byBiZSB0ZXN0ZWQKKyAgICBwYXRobW9kdWxlID0gZ2VuZXJpY3BhdGgKKyAgICBjb21tb25fYXR0cmlidXRlcyA9IFsnY29tbW9ucHJlZml4JywgJ2dldHNpemUnLCAnZ2V0YXRpbWUnLCAnZ2V0Y3RpbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRtdGltZScsICdleGlzdHMnLCAnaXNkaXInLCAnaXNmaWxlJ10KKyAgICBhdHRyaWJ1dGVzID0gW10KKworICAgIGRlZiB0ZXN0X25vX2FyZ3VtZW50KHNlbGYpOgorICAgICAgICBmb3IgYXR0ciBpbiBzZWxmLmNvbW1vbl9hdHRyaWJ1dGVzICsgc2VsZi5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIGdldGF0dHIoc2VsZi5wYXRobW9kdWxlLCBhdHRyKSgpCisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsKCJ7fS57fSgpIGRpZCBub3QgcmFpc2UgYSBUeXBlRXJyb3IiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5wYXRobW9kdWxlLl9fbmFtZV9fLCBhdHRyKSkKKworICAgIGRlZiB0ZXN0X2NvbW1vbnByZWZpeChzZWxmKToKKyAgICAgICAgY29tbW9ucHJlZml4ID0gc2VsZi5wYXRobW9kdWxlLmNvbW1vbnByZWZpeAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFtdKSwKKyAgICAgICAgICAgICIiCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvbW1vbnByZWZpeChbIi9ob21lL3N3ZW5zb24vc3BhbSIsICIvaG9tZS9zd2VuL3NwYW0iXSksCisgICAgICAgICAgICAiL2hvbWUvc3dlbiIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFsiL2hvbWUvc3dlbi9zcGFtIiwgIi9ob21lL3N3ZW4vZWdncyJdKSwKKyAgICAgICAgICAgICIvaG9tZS9zd2VuLyIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFsiL2hvbWUvc3dlbi9zcGFtIiwgIi9ob21lL3N3ZW4vc3BhbSJdKSwKKyAgICAgICAgICAgICIvaG9tZS9zd2VuL3NwYW0iCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvbW1vbnByZWZpeChbImhvbWU6c3dlbnNvbjpzcGFtIiwgImhvbWU6c3dlbjpzcGFtIl0pLAorICAgICAgICAgICAgImhvbWU6c3dlbiIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFsiOmhvbWU6c3dlbjpzcGFtIiwgIjpob21lOnN3ZW46ZWdncyJdKSwKKyAgICAgICAgICAgICI6aG9tZTpzd2VuOiIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFsiOmhvbWU6c3dlbjpzcGFtIiwgIjpob21lOnN3ZW46c3BhbSJdKSwKKyAgICAgICAgICAgICI6aG9tZTpzd2VuOnNwYW0iCisgICAgICAgICkKKworICAgICAgICB0ZXN0bGlzdCA9IFsnJywgJ2FiYycsICdYYmNkJywgJ1hiJywgJ1hZJywgJ2FiY2QnLAorICAgICAgICAgICAgICAgICAgICAnYVhjJywgJ2FiZCcsICdhYicsICdhWCcsICdhYmNYJ10KKyAgICAgICAgZm9yIHMxIGluIHRlc3RsaXN0OgorICAgICAgICAgICAgZm9yIHMyIGluIHRlc3RsaXN0OgorICAgICAgICAgICAgICAgIHAgPSBjb21tb25wcmVmaXgoW3MxLCBzMl0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxLnN0YXJ0c3dpdGgocCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMyLnN0YXJ0c3dpdGgocCkpCisgICAgICAgICAgICAgICAgaWYgczEgIT0gczI6CisgICAgICAgICAgICAgICAgICAgIG4gPSBsZW4ocCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzMVtuOm4rMV0sIHMyW246bisxXSkKKworICAgIGRlZiB0ZXN0X2dldHNpemUoc2VsZik6CisgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoImZvbyIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXRobW9kdWxlLmdldHNpemUodGVzdF9zdXBwb3J0LlRFU1RGTiksIDMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3QgZi5jbG9zZWQ6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF90aW1lKHNlbGYpOgorICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKCJmb28iKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiYWIiKQorICAgICAgICAgICAgZi53cml0ZSgiYmFyIikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikKKyAgICAgICAgICAgIGQgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsICJmb29iYXIiKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhtb2R1bGUuZ2V0Y3RpbWUodGVzdF9zdXBwb3J0LlRFU1RGTiksCisgICAgICAgICAgICAgICAgc2VsZi5wYXRobW9kdWxlLmdldG10aW1lKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3QgZi5jbG9zZWQ6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9leGlzdHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXRobW9kdWxlLmV4aXN0cyh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCisgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoImZvbyIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXRobW9kdWxlLmV4aXN0cyh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnBhdGhtb2R1bGUgPT0gZ2VuZXJpY3BhdGg6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUubGV4aXN0cyh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3QgZi5jbG9zZSgpOgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfaXNkaXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXRobW9kdWxlLmlzZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKKyAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgiZm9vIikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUuaXNkaXIodGVzdF9zdXBwb3J0LlRFU1RGTiksIEZhbHNlKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBvcy5ta2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUuaXNkaXIodGVzdF9zdXBwb3J0LlRFU1RGTiksIFRydWUpCisgICAgICAgICAgICBvcy5ybWRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHNhZmVfcm1kaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2lzZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUuaXNmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKKyAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgiZm9vIikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUuaXNmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBUcnVlKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBvcy5ta2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUuaXNmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKKyAgICAgICAgICAgIG9zLnJtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3QgZi5jbG9zZSgpOgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2FmZV9ybWRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisKKyMgRm9sbG93aW5nIFRlc3RDYXNlIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBydW4gZnJvbSB0ZXN0X2dlbmVyaWNwYXRoLgorIyBJdCBpcyBpbmhlcml0ZWQgYnkgb3RoZXIgdGVzdCBtb2R1bGVzIChtYWNwYXRoLCBudHBhdGgsIHBvc2l4cGF0aCkuCisKK2NsYXNzIENvbW1vblRlc3QoR2VuZXJpY1Rlc3QpOgorICAgICMgVGhlIHBhdGggbW9kdWxlIHRvIGJlIHRlc3RlZAorICAgIHBhdGhtb2R1bGUgPSBOb25lCisgICAgY29tbW9uX2F0dHJpYnV0ZXMgPSBHZW5lcmljVGVzdC5jb21tb25fYXR0cmlidXRlcyArIFsKKyAgICAgICAgIyBQcm9wZXJ0aWVzCisgICAgICAgICdjdXJkaXInLCAncGFyZGlyJywgJ2V4dHNlcCcsICdzZXAnLAorICAgICAgICAncGF0aHNlcCcsICdkZWZwYXRoJywgJ2FsdHNlcCcsICdkZXZudWxsJywKKyAgICAgICAgIyBNZXRob2RzCisgICAgICAgICdub3JtY2FzZScsICdzcGxpdGRyaXZlJywgJ2V4cGFuZHZhcnMnLCAnbm9ybXBhdGgnLCAnYWJzcGF0aCcsCisgICAgICAgICdqb2luJywgJ3NwbGl0JywgJ3NwbGl0ZXh0JywgJ2lzYWJzJywgJ2Jhc2VuYW1lJywgJ2Rpcm5hbWUnLAorICAgICAgICAnbGV4aXN0cycsICdpc2xpbmsnLCAnaXNtb3VudCcsICdleHBhbmR1c2VyJywgJ25vcm1wYXRoJywgJ3JlYWxwYXRoJywKKyAgICBdCisKKyAgICBkZWYgdGVzdF9ub3JtY2FzZShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IG5vcm1jYXNlKCkgaXMgaWRlbXBvdGVudAorICAgICAgICBwID0gIkZvTy8uL0JhUiIKKyAgICAgICAgcCA9IHNlbGYucGF0aG1vZHVsZS5ub3JtY2FzZShwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIHNlbGYucGF0aG1vZHVsZS5ub3JtY2FzZShwKSkKKworICAgIGRlZiB0ZXN0X3NwbGl0ZHJpdmUoc2VsZik6CisgICAgICAgICMgc3BsaXRkcml2ZSBmb3Igbm9uLU5UIHBhdGhzCisgICAgICAgIHNwbGl0ZHJpdmUgPSBzZWxmLnBhdGhtb2R1bGUuc3BsaXRkcml2ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZHJpdmUoIi9mb28vYmFyIiksICgiIiwgIi9mb28vYmFyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRkcml2ZSgiZm9vOmJhciIpLCAoIiIsICJmb286YmFyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRkcml2ZSgiOmZvbzpiYXIiKSwgKCIiLCAiOmZvbzpiYXIiKSkKKworICAgIGRlZiB0ZXN0X2V4cGFuZHZhcnMoc2VsZik6CisgICAgICAgIGlmIHNlbGYucGF0aG1vZHVsZS5fX25hbWVfXyA9PSAnbWFjcGF0aCc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdtYWNwYXRoLmV4cGFuZHZhcnMgaXMgYSBzdHViJykKKyAgICAgICAgZXhwYW5kdmFycyA9IHNlbGYucGF0aG1vZHVsZS5leHBhbmR2YXJzCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBlbnYuY2xlYXIoKQorICAgICAgICAgICAgZW52WyJmb28iXSA9ICJiYXIiCisgICAgICAgICAgICBlbnZbIntmb28iXSA9ICJiYXoxIgorICAgICAgICAgICAgZW52WyJ7Zm9vfSJdID0gImJhejIiCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoImZvbyIpLCAiZm9vIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJGZvbyBiYXIiKSwgImJhciBiYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIke2Zvb31iYXIiKSwgImJhcmJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiRbZm9vXWJhciIpLCAiJFtmb29dYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJGJhciBiYXIiKSwgIiRiYXIgYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJD9iYXIiKSwgIiQ/YmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJHtmb299YmFyIiksICJiYXJiYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIkZm9vfWJhciIpLCAiYmFyfWJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiR7Zm9vIiksICIke2ZvbyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiR7e2Zvb319IiksICJiYXoxfSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiRmb28kZm9vIiksICJiYXJiYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIkYmFyJGJhciIpLCAiJGJhciRiYXIiKQorCisgICAgZGVmIHRlc3RfYWJzcGF0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZm9vIiwgc2VsZi5wYXRobW9kdWxlLmFic3BhdGgoImZvbyIpKQorCisgICAgICAgICMgQWJzcGF0aCByZXR1cm5zIGJ5dGVzIHdoZW4gdGhlIGFyZyBpcyBieXRlcworICAgICAgICBmb3IgcGF0aCBpbiAoJycsICdmb28nLCAnZlx4ZjJceGYyJywgJy9mb28nLCAnQzpcXCcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYucGF0aG1vZHVsZS5hYnNwYXRoKHBhdGgpLCBzdHIpCisKKyAgICBkZWYgdGVzdF9yZWFscGF0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZm9vIiwgc2VsZi5wYXRobW9kdWxlLnJlYWxwYXRoKCJmb28iKSkKKworICAgIGRlZiB0ZXN0X25vcm1wYXRoX2lzc3VlNTgyNyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgbm9ybXBhdGggcHJlc2VydmVzIHVuaWNvZGUKKyAgICAgICAgZm9yIHBhdGggaW4gKHUnJywgdScuJywgdScvJywgdSdcXCcsIHUnLy8vZm9vLy4vL2Jhci8vJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5wYXRobW9kdWxlLm5vcm1wYXRoKHBhdGgpLCB1bmljb2RlKQorCisgICAgZGVmIHRlc3RfYWJzcGF0aF9pc3N1ZTM0MjYoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBhYnNwYXRoIHJldHVybnMgdW5pY29kZSB3aGVuIHRoZSBhcmcgaXMgdW5pY29kZQorICAgICAgICAjIHdpdGggYm90aCBBU0NJSSBhbmQgbm9uLUFTQ0lJIGN3ZHMuCisgICAgICAgIGFic3BhdGggPSBzZWxmLnBhdGhtb2R1bGUuYWJzcGF0aAorICAgICAgICBmb3IgcGF0aCBpbiAodScnLCB1J2Z1dScsIHUnZlx4ZjlceGY5JywgdScvZnV1JywgdSdVOlxcJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYWJzcGF0aChwYXRoKSwgdW5pY29kZSkKKworICAgICAgICB1bmljd2QgPSB1J1x4ZTd3XHhmMCcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnNlbmNvZGluZyA9IHRlc3Rfc3VwcG9ydC5URVNURk5fRU5DT0RJTkcgb3IgImFzY2lpIgorICAgICAgICAgICAgdW5pY3dkLmVuY29kZShmc2VuY29kaW5nKQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBVbmljb2RlRW5jb2RlRXJyb3IpOgorICAgICAgICAgICAgIyBGUyBlbmNvZGluZyBpcyBwcm9iYWJseSBBU0NJSQorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudGVtcF9jd2QodW5pY3dkKToKKyAgICAgICAgICAgICAgICBmb3IgcGF0aCBpbiAodScnLCB1J2Z1dScsIHUnZlx4ZjlceGY5JywgdScvZnV1JywgdSdVOlxcJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhYnNwYXRoKHBhdGgpLCB1bmljb2RlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicsCisgICAgICAgICJNYWMgT1MgWCBkZW5pZXMgdGhlIGNyZWF0aW9uIG9mIGEgZGlyZWN0b3J5IHdpdGggYW4gaW52YWxpZCB1dGY4IG5hbWUiKQorICAgIGRlZiB0ZXN0X25vbmFzY2lpX2Fic3BhdGgoc2VsZik6CisgICAgICAgICMgVGVzdCBub24tQVNDSUksIG5vbi1VVEY4IGJ5dGVzIGluIHRoZSBwYXRoLgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50ZW1wX2N3ZCgnXHhlN3dceGYwJyk6CisgICAgICAgICAgICBzZWxmLnRlc3RfYWJzcGF0aCgpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoR2VuZXJpY1Rlc3QpCisKKworaWYgX19uYW1lX189PSJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2dlbmV4cHMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nZW5leHBzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNTkzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nZW5leHBzLnB5CkBAIC0wLDAgKzEsMjgzIEBACitkb2N0ZXN0cyA9ICIiIgorCitUZXN0IHNpbXBsZSBsb29wIHdpdGggY29uZGl0aW9uYWwKKworICAgID4+PiBzdW0oaSppIGZvciBpIGluIHJhbmdlKDEwMCkgaWYgaSYxID09IDEpCisgICAgMTY2NjUwCisKK1Rlc3Qgc2ltcGxlIG5lc3RpbmcKKworICAgID4+PiBsaXN0KChpLGopIGZvciBpIGluIHJhbmdlKDMpIGZvciBqIGluIHJhbmdlKDQpICkKKyAgICBbKDAsIDApLCAoMCwgMSksICgwLCAyKSwgKDAsIDMpLCAoMSwgMCksICgxLCAxKSwgKDEsIDIpLCAoMSwgMyksICgyLCAwKSwgKDIsIDEpLCAoMiwgMiksICgyLCAzKV0KKworVGVzdCBuZXN0aW5nIHdpdGggdGhlIGlubmVyIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIHRoZSBvdXRlcgorCisgICAgPj4+IGxpc3QoKGksaikgZm9yIGkgaW4gcmFuZ2UoNCkgZm9yIGogaW4gcmFuZ2UoaSkgKQorICAgIFsoMSwgMCksICgyLCAwKSwgKDIsIDEpLCAoMywgMCksICgzLCAxKSwgKDMsIDIpXQorCitNYWtlIHN1cmUgdGhlIGluZHVjdGlvbiB2YXJpYWJsZSBpcyBub3QgZXhwb3NlZAorCisgICAgPj4+IGkgPSAyMAorICAgID4+PiBzdW0oaSppIGZvciBpIGluIHJhbmdlKDEwMCkpCisgICAgMzI4MzUwCisgICAgPj4+IGkKKyAgICAyMAorCitUZXN0IGZpcnN0IGNsYXNzCisKKyAgICA+Pj4gZyA9IChpKmkgZm9yIGkgaW4gcmFuZ2UoNCkpCisgICAgPj4+IHR5cGUoZykKKyAgICA8dHlwZSAnZ2VuZXJhdG9yJz4KKyAgICA+Pj4gbGlzdChnKQorICAgIFswLCAxLCA0LCA5XQorCitUZXN0IGRpcmVjdCBjYWxscyB0byBuZXh0KCkKKworICAgID4+PiBnID0gKGkqaSBmb3IgaSBpbiByYW5nZSgzKSkKKyAgICA+Pj4gZy5uZXh0KCkKKyAgICAwCisgICAgPj4+IGcubmV4dCgpCisgICAgMQorICAgID4+PiBnLm5leHQoKQorICAgIDQKKyAgICA+Pj4gZy5uZXh0KCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8cHlzaGVsbCMyMT4iLCBsaW5lIDEsIGluIC10b3BsZXZlbC0KKyAgICAgICAgZy5uZXh0KCkKKyAgICBTdG9wSXRlcmF0aW9uCisKK0RvZXMgaXQgc3RheSBzdG9wcGVkPworCisgICAgPj4+IGcubmV4dCgpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHB5c2hlbGwjMjE+IiwgbGluZSAxLCBpbiAtdG9wbGV2ZWwtCisgICAgICAgIGcubmV4dCgpCisgICAgU3RvcEl0ZXJhdGlvbgorICAgID4+PiBsaXN0KGcpCisgICAgW10KKworVGVzdCBydW5uaW5nIGdlbiB3aGVuIGRlZmluaW5nIGZ1bmN0aW9uIGlzIG91dCBvZiBzY29wZQorCisgICAgPj4+IGRlZiBmKG4pOgorICAgIC4uLiAgICAgcmV0dXJuIChpKmkgZm9yIGkgaW4geHJhbmdlKG4pKQorICAgID4+PiBsaXN0KGYoMTApKQorICAgIFswLCAxLCA0LCA5LCAxNiwgMjUsIDM2LCA0OSwgNjQsIDgxXQorCisgICAgPj4+IGRlZiBmKG4pOgorICAgIC4uLiAgICAgcmV0dXJuICgoaSxqKSBmb3IgaSBpbiB4cmFuZ2UoMykgZm9yIGogaW4geHJhbmdlKG4pKQorICAgID4+PiBsaXN0KGYoNCkpCisgICAgWygwLCAwKSwgKDAsIDEpLCAoMCwgMiksICgwLCAzKSwgKDEsIDApLCAoMSwgMSksICgxLCAyKSwgKDEsIDMpLCAoMiwgMCksICgyLCAxKSwgKDIsIDIpLCAoMiwgMyldCisgICAgPj4+IGRlZiBmKG4pOgorICAgIC4uLiAgICAgcmV0dXJuICgoaSxqKSBmb3IgaSBpbiB4cmFuZ2UoMykgZm9yIGogaW4geHJhbmdlKDQpIGlmIGogaW4geHJhbmdlKG4pKQorICAgID4+PiBsaXN0KGYoNCkpCisgICAgWygwLCAwKSwgKDAsIDEpLCAoMCwgMiksICgwLCAzKSwgKDEsIDApLCAoMSwgMSksICgxLCAyKSwgKDEsIDMpLCAoMiwgMCksICgyLCAxKSwgKDIsIDIpLCAoMiwgMyldCisgICAgPj4+IGxpc3QoZigyKSkKKyAgICBbKDAsIDApLCAoMCwgMSksICgxLCAwKSwgKDEsIDEpLCAoMiwgMCksICgyLCAxKV0KKworVmVyaWZ5IHRoYXQgcGFyZW50aGVzaXMgYXJlIHJlcXVpcmVkIGluIGEgc3RhdGVtZW50CisKKyAgICA+Pj4gZGVmIGYobik6CisgICAgLi4uICAgICByZXR1cm4gaSppIGZvciBpIGluIHhyYW5nZShuKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAuLi4KKyAgICBTeW50YXhFcnJvcjogaW52YWxpZCBzeW50YXgKKworVmVyaWZ5IHRoYXQgcGFyZW50aGVzaXMgYXJlIHJlcXVpcmVkIHdoZW4gdXNlZCBhcyBhIGtleXdvcmQgYXJndW1lbnQgdmFsdWUKKworICAgID4+PiBkaWN0KGEgPSBpIGZvciBpIGluIHhyYW5nZSgxMCkpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgIC4uLgorICAgIFN5bnRheEVycm9yOiBpbnZhbGlkIHN5bnRheAorCitWZXJpZnkgdGhhdCBwYXJlbnRoZXNpcyBhcmUgcmVxdWlyZWQgd2hlbiB1c2VkIGFzIGEga2V5d29yZCBhcmd1bWVudCB2YWx1ZQorCisgICAgPj4+IGRpY3QoYSA9IChpIGZvciBpIGluIHhyYW5nZSgxMCkpKSAjZG9jdGVzdDogK0VMTElQU0lTCisgICAgeydhJzogPGdlbmVyYXRvciBvYmplY3QgPGdlbmV4cHI+IGF0IC4uLj59CisKK1ZlcmlmeSBlYXJseSBiaW5kaW5nIGZvciB0aGUgb3V0ZXJtb3N0IGZvci1leHByZXNzaW9uCisKKyAgICA+Pj4geD0xMAorICAgID4+PiBnID0gKGkqaSBmb3IgaSBpbiByYW5nZSh4KSkKKyAgICA+Pj4geCA9IDUKKyAgICA+Pj4gbGlzdChnKQorICAgIFswLCAxLCA0LCA5LCAxNiwgMjUsIDM2LCA0OSwgNjQsIDgxXQorCitWZXJpZnkgdGhhdCB0aGUgb3V0ZXJtb3N0IGZvci1leHByZXNzaW9uIG1ha2VzIGFuIGltbWVkaWF0ZSBjaGVjaworZm9yIGl0ZXJhYmlsaXR5CisKKyAgICA+Pj4gKGkgZm9yIGkgaW4gNikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8cHlzaGVsbCM0PiIsIGxpbmUgMSwgaW4gLXRvcGxldmVsLQorICAgICAgICAoaSBmb3IgaSBpbiA2KQorICAgIFR5cGVFcnJvcjogJ2ludCcgb2JqZWN0IGlzIG5vdCBpdGVyYWJsZQorCitWZXJpZnkgbGF0ZSBiaW5kaW5nIGZvciB0aGUgb3V0ZXJtb3N0IGlmLWV4cHJlc3Npb24KKworICAgID4+PiBpbmNsdWRlID0gKDIsNCw2LDgpCisgICAgPj4+IGcgPSAoaSppIGZvciBpIGluIHJhbmdlKDEwKSBpZiBpIGluIGluY2x1ZGUpCisgICAgPj4+IGluY2x1ZGUgPSAoMSwzLDUsNyw5KQorICAgID4+PiBsaXN0KGcpCisgICAgWzEsIDksIDI1LCA0OSwgODFdCisKK1ZlcmlmeSBsYXRlIGJpbmRpbmcgZm9yIHRoZSBpbm5lcm1vc3QgZm9yLWV4cHJlc3Npb24KKworICAgID4+PiBnID0gKChpLGopIGZvciBpIGluIHJhbmdlKDMpIGZvciBqIGluIHJhbmdlKHgpKQorICAgID4+PiB4ID0gNAorICAgID4+PiBsaXN0KGcpCisgICAgWygwLCAwKSwgKDAsIDEpLCAoMCwgMiksICgwLCAzKSwgKDEsIDApLCAoMSwgMSksICgxLCAyKSwgKDEsIDMpLCAoMiwgMCksICgyLCAxKSwgKDIsIDIpLCAoMiwgMyldCisKK1ZlcmlmeSByZS11c2Ugb2YgdHVwbGVzIChhIHNpZGUgYmVuZWZpdCBvZiB1c2luZyBnZW5leHBzIG92ZXIgbGlzdGNvbXBzKQorCisgICAgPj4+IHR1cGxlaWRzID0gbWFwKGlkLCAoKGksaSkgZm9yIGkgaW4geHJhbmdlKDEwKSkpCisgICAgPj4+IGludChtYXgodHVwbGVpZHMpIC0gbWluKHR1cGxlaWRzKSkKKyAgICAwCisKK1ZlcmlmeSB0aGF0IHN5bnRheCBlcnJvcidzIGFyZSByYWlzZWQgZm9yIGdlbmV4cHMgdXNlZCBhcyBsdmFsdWVzCisKKyAgICA+Pj4gKHkgZm9yIHkgaW4gKDEsMikpID0gMTAKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgLi4uCisgICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3RfZ2VuZXhwcy5fX3Rlc3RfXy5kb2N0ZXN0c1s0MF0+IiwgbGluZSAxCisgICAgU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBnZW5lcmF0b3IgZXhwcmVzc2lvbgorCisgICAgPj4+ICh5IGZvciB5IGluICgxLDIpKSArPSAxMAorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAuLi4KKyAgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9nZW5leHBzLl9fdGVzdF9fLmRvY3Rlc3RzWzQxXT4iLCBsaW5lIDEKKyAgICBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGdlbmVyYXRvciBleHByZXNzaW9uCisKKworIyMjIyMjIyMjIyMgVGVzdHMgYm9ycm93ZWQgZnJvbSBvciBpbnNwaXJlZCBieSB0ZXN0X2dlbmVyYXRvcnMucHkgIyMjIyMjIyMjIyMjCisKK01ha2UgYSBnZW5lcmF0b3IgdGhhdCBhY3RzIGxpa2UgcmFuZ2UoKQorCisgICAgPj4+IHlyYW5nZSA9IGxhbWJkYSBuOiAgKGkgZm9yIGkgaW4geHJhbmdlKG4pKQorICAgID4+PiBsaXN0KHlyYW5nZSgxMCkpCisgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCisKK0dlbmVyYXRvcnMgYWx3YXlzIHJldHVybiB0byB0aGUgbW9zdCByZWNlbnQgY2FsbGVyOgorCisgICAgPj4+IGRlZiBjcmVhdG9yKCk6CisgICAgLi4uICAgICByID0geXJhbmdlKDUpCisgICAgLi4uICAgICBwcmludCAiY3JlYXRvciIsIHIubmV4dCgpCisgICAgLi4uICAgICByZXR1cm4gcgorICAgID4+PiBkZWYgY2FsbGVyKCk6CisgICAgLi4uICAgICByID0gY3JlYXRvcigpCisgICAgLi4uICAgICBmb3IgaSBpbiByOgorICAgIC4uLiAgICAgICAgICAgICBwcmludCAiY2FsbGVyIiwgaQorICAgID4+PiBjYWxsZXIoKQorICAgIGNyZWF0b3IgMAorICAgIGNhbGxlciAxCisgICAgY2FsbGVyIDIKKyAgICBjYWxsZXIgMworICAgIGNhbGxlciA0CisKK0dlbmVyYXRvcnMgY2FuIGNhbGwgb3RoZXIgZ2VuZXJhdG9yczoKKworICAgID4+PiBkZWYgenJhbmdlKG4pOgorICAgIC4uLiAgICAgZm9yIGkgaW4geXJhbmdlKG4pOgorICAgIC4uLiAgICAgICAgIHlpZWxkIGkKKyAgICA+Pj4gbGlzdCh6cmFuZ2UoNSkpCisgICAgWzAsIDEsIDIsIDMsIDRdCisKKworVmVyaWZ5IHRoYXQgYSBnZW4gZXhwIGNhbm5vdCBiZSByZXN1bWVkIHdoaWxlIGl0IGlzIGFjdGl2ZWx5IHJ1bm5pbmc6CisKKyAgICA+Pj4gZyA9IChtZS5uZXh0KCkgZm9yIGkgaW4geHJhbmdlKDEwKSkKKyAgICA+Pj4gbWUgPSBnCisgICAgPj4+IG1lLm5leHQoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxweXNoZWxsIzMwPiIsIGxpbmUgMSwgaW4gLXRvcGxldmVsLQorICAgICAgICBtZS5uZXh0KCkKKyAgICAgIEZpbGUgIjxweXNoZWxsIzI4PiIsIGxpbmUgMSwgaW4gPGdlbmVyYXRvciBleHByZXNzaW9uPgorICAgICAgICBnID0gKG1lLm5leHQoKSBmb3IgaSBpbiB4cmFuZ2UoMTApKQorICAgIFZhbHVlRXJyb3I6IGdlbmVyYXRvciBhbHJlYWR5IGV4ZWN1dGluZworCitWZXJpZnkgZXhjZXB0aW9uIHByb3BhZ2F0aW9uCisKKyAgICA+Pj4gZyA9ICgxMCAvLyBpIGZvciBpIGluICg1LCAwLCAyKSkKKyAgICA+Pj4gZy5uZXh0KCkKKyAgICAyCisgICAgPj4+IGcubmV4dCgpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHB5c2hlbGwjMzc+IiwgbGluZSAxLCBpbiAtdG9wbGV2ZWwtCisgICAgICAgIGcubmV4dCgpCisgICAgICBGaWxlICI8cHlzaGVsbCMzNT4iLCBsaW5lIDEsIGluIDxnZW5lcmF0b3IgZXhwcmVzc2lvbj4KKyAgICAgICAgZyA9ICgxMCAvLyBpIGZvciBpIGluICg1LCAwLCAyKSkKKyAgICBaZXJvRGl2aXNpb25FcnJvcjogaW50ZWdlciBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVybworICAgID4+PiBnLm5leHQoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxweXNoZWxsIzM4PiIsIGxpbmUgMSwgaW4gLXRvcGxldmVsLQorICAgICAgICBnLm5leHQoKQorICAgIFN0b3BJdGVyYXRpb24KKworTWFrZSBzdXJlIHRoYXQgTm9uZSBpcyBhIHZhbGlkIHJldHVybiB2YWx1ZQorCisgICAgPj4+IGxpc3QoTm9uZSBmb3IgaSBpbiB4cmFuZ2UoMTApKQorICAgIFtOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lXQorCitDaGVjayB0aGF0IGdlbmVyYXRvciBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50CisKKyAgICA+Pj4gZyA9IChpKmkgZm9yIGkgaW4gcmFuZ2UoMykpCisgICAgPj4+IGV4cGVjdGVkID0gc2V0KFsnZ2lfZnJhbWUnLCAnZ2lfcnVubmluZycsICduZXh0J10pCisgICAgPj4+IHNldChhdHRyIGZvciBhdHRyIGluIGRpcihnKSBpZiBub3QgYXR0ci5zdGFydHN3aXRoKCdfXycpKSA+PSBleHBlY3RlZAorICAgIFRydWUKKworICAgID4+PiBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBIQVZFX0RPQ1NUUklOR1MKKyAgICA+Pj4gcHJpbnQoZy5uZXh0Ll9fZG9jX18gaWYgSEFWRV9ET0NTVFJJTkdTIGVsc2UgJ3gubmV4dCgpIC0+IHRoZSBuZXh0IHZhbHVlLCBvciByYWlzZSBTdG9wSXRlcmF0aW9uJykKKyAgICB4Lm5leHQoKSAtPiB0aGUgbmV4dCB2YWx1ZSwgb3IgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgID4+PiBpbXBvcnQgdHlwZXMKKyAgICA+Pj4gaXNpbnN0YW5jZShnLCB0eXBlcy5HZW5lcmF0b3JUeXBlKQorICAgIFRydWUKKworQ2hlY2sgdGhlIF9faXRlcl9fIHNsb3QgaXMgZGVmaW5lZCB0byByZXR1cm4gc2VsZgorCisgICAgPj4+IGl0ZXIoZykgaXMgZworICAgIFRydWUKKworVmVyaWZ5IHRoYXQgdGhlIHJ1bm5pbmcgZmxhZyBpcyBzZXQgcHJvcGVybHkKKworICAgID4+PiBnID0gKG1lLmdpX3J1bm5pbmcgZm9yIGkgaW4gKDAsMSkpCisgICAgPj4+IG1lID0gZworICAgID4+PiBtZS5naV9ydW5uaW5nCisgICAgMAorICAgID4+PiBtZS5uZXh0KCkKKyAgICAxCisgICAgPj4+IG1lLmdpX3J1bm5pbmcKKyAgICAwCisKK1ZlcmlmeSB0aGF0IGdlbmV4cHMgYXJlIHdlYWtseSByZWZlcmVuY2FibGUKKworICAgID4+PiBpbXBvcnQgd2Vha3JlZgorICAgID4+PiBnID0gKGkqaSBmb3IgaSBpbiByYW5nZSg0KSkKKyAgICA+Pj4gd3IgPSB3ZWFrcmVmLnJlZihnKQorICAgID4+PiB3cigpIGlzIGcKKyAgICBUcnVlCisgICAgPj4+IHAgPSB3ZWFrcmVmLnByb3h5KGcpCisgICAgPj4+IGxpc3QocCkKKyAgICBbMCwgMSwgNCwgOV0KKworCisiIiIKKworCitfX3Rlc3RfXyA9IHsnZG9jdGVzdHMnIDogZG9jdGVzdHN9CisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICBpbXBvcnQgc3lzCisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfZ2VuZXhwcworICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X2dlbmV4cHMsIHZlcmJvc2UpCisKKyAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKKyAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihjb3VudHMpKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X2dlbmV4cHMsIHZlcmJvc2UpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgcHJpbnQgY291bnRzCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2dldGFyZ3MucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nZXRhcmdzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzVhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nZXRhcmdzLnB5CkBAIC0wLDAgKzEsMzEgQEAKKyIiIgorVGVzdCB0aGUgaW50ZXJuYWwgZ2V0YXJncy5jIGltcGxlbWVudGF0aW9uCisKKyBQeUFyZ19QYXJzZVR1cGxlKCkgaXMgZGVmaW5lZCBoZXJlLgorCitUaGUgdGVzdCBoZXJlIGlzIG5vdCBpbnRlbmRlZCB0byB0ZXN0IGFsbCBvZiB0aGUgbW9kdWxlLCBqdXN0IHRoZQorc2luZ2xlIGNhc2UgdGhhdCBmYWlsZWQgYmV0d2VlbiAyLjEgYW5kIDIuMmEyLgorIiIiCisKKyMgbWFyc2hhbC5sb2FkcygpIHVzZXMgUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6bG9hZHMiKQorIyBUaGUgcyBjb2RlIHdpbGwgY2F1c2UgYSBVbmljb2RlIGNvbnZlcnNpb24gdG8gb2NjdXIuICBUaGlzIHRlc3QKKyMgdmVyaWZ5IHRoYXQgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQgcHJvcGVybHkgZnJvbSB0aGUgQyBjb2RlIGJhY2sgdG8KKyMgUHl0aG9uLgorCitpbXBvcnQgbWFyc2hhbAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBHZXRBcmdzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBJZiB0aGUgZW5jb2Rpbmcgc3VjY2VlZHMgdXNpbmcgdGhlIGN1cnJlbnQgZGVmYXVsdCBlbmNvZGluZywKKyAgICAjIHRoaXMgdGVzdCB3aWxsIGZhaWwgYmVjYXVzZSBpdCBkb2VzIG5vdCB0ZXN0IHRoZSByaWdodCBwYXJ0IG9mIHRoZQorICAgICMgUHlBcmdfUGFyc2VUdXBsZSgpIGltcGxlbWVudGF0aW9uLgorICAgIGRlZiB0ZXN0X3dpdGhfbWFyc2hhbChzZWxmKToKKyAgICAgICAgYXJnID0gdW5pY29kZShyJ1wyMjInLCAndW5pY29kZS1lc2NhcGUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIG1hcnNoYWwubG9hZHMsIGFyZykKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoR2V0QXJnc1Rlc3QpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2dldGFyZ3MyLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZ2V0YXJnczIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA2Mjk2YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2dldGFyZ3MyLnB5CkBAIC0wLDAgKzEsMzM1IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19rZXl3b3JkcworaW1wb3J0IHdhcm5pbmdzCisKKyIiIgorPiBIb3cgYWJvdXQgdGhlIGZvbGxvd2luZyBjb3VudGVycHJvcG9zYWwuIFRoaXMgYWxzbyBjaGFuZ2VzIHNvbWUgb2YKKz4gdGhlIG90aGVyIGZvcm1hdCBjb2RlcyB0byBiZSBhIGxpdHRsZSBtb3JlIHJlZ3VsYXIuCis+Cis+IENvZGUgQyB0eXBlIFJhbmdlIGNoZWNrCis+Cis+IGIgdW5zaWduZWQgY2hhciAwLi5VQ0hBUl9NQVgKKz4gaCBzaWduZWQgc2hvcnQgU0hSVF9NSU4uLlNIUlRfTUFYCis+IEIgdW5zaWduZWQgY2hhciBub25lICoqCis+IEggdW5zaWduZWQgc2hvcnQgbm9uZSAqKgorPiBrICogdW5zaWduZWQgbG9uZyBub25lCis+IEkgKiB1bnNpZ25lZCBpbnQgMC4uVUlOVF9NQVgKKworCis+IGkgaW50IElOVF9NSU4uLklOVF9NQVgKKz4gbCBsb25nIExPTkdfTUlOLi5MT05HX01BWAorCis+IEsgKiB1bnNpZ25lZCBsb25nIGxvbmcgbm9uZQorPiBMIGxvbmcgbG9uZyBMTE9OR19NSU4uLkxMT05HX01BWAorCis+IE5vdGVzOgorPgorPiAqIE5ldyBmb3JtYXQgY29kZXMuCis+Cis+ICoqIENoYW5nZWQgZnJvbSBwcmV2aW91cyAicmFuZ2UtYW5kLWEtaGFsZiIgdG8gIm5vbmUiOyB0aGUKKz4gcmFuZ2UtYW5kLWEtaGFsZiBjaGVja2luZyB3YXNuJ3QgcGFydGljdWxhcmx5IHVzZWZ1bC4KKworUGx1cyBhIEMgQVBJIG9yIHR3bywgZS5nLiBQeUludF9Bc0xvbmdNYXNrKCkgLT4KK3Vuc2lnbmVkIGxvbmcgYW5kIFB5SW50X0FzTG9uZ0xvbmdNYXNrKCkgLT4gdW5zaWduZWQKK2xvbmcgbG9uZyAoaWYgdGhhdCBleGlzdHMpLgorIiIiCisKK0xBUkdFID0gMHg3RkZGRkZGRgorVkVSWV9MQVJHRSA9IDB4RkYwMDAwMTIxMjEyMTIxMjEyMTIxMjQyTAorCitmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgVUNIQVJfTUFYLCBVU0hSVF9NQVgsIFVJTlRfTUFYLCBVTE9OR19NQVgsIElOVF9NQVgsIFwKKyAgICAgSU5UX01JTiwgTE9OR19NSU4sIExPTkdfTUFYLCBQWV9TU0laRV9UX01JTiwgUFlfU1NJWkVfVF9NQVgsIFwKKyAgICAgU0hSVF9NSU4sIFNIUlRfTUFYCisKKyMgZmFrZSwgdGhleSBhcmUgbm90IGRlZmluZWQgaW4gUHl0aG9uJ3MgaGVhZGVyIGZpbGVzCitMTE9OR19NQVggPSAyKio2My0xCitMTE9OR19NSU4gPSAtMioqNjMKK1VMTE9OR19NQVggPSAyKio2NC0xCisKK2NsYXNzIExvbmc6CisgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgIHJldHVybiA5OUwKKworY2xhc3MgSW50OgorICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gOTkKKworY2xhc3MgVW5zaWduZWRfVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2Ioc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX2IKKyAgICAgICAgIyBiIHJldHVybnMgJ3Vuc2lnbmVkIGNoYXInLCBhbmQgZG9lcyByYW5nZSBjaGVja2luZyAoMCAuLi4gVUNIQVJfTUFYKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfYiwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19iKExvbmcoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfYihJbnQoKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19iLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX2IoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUNIQVJfTUFYLCBnZXRhcmdzX2IoVUNIQVJfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19iLCBVQ0hBUl9NQVggKyAxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfYig0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfYig0MkwpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2IsIFZFUllfTEFSR0UpCisKKyAgICBkZWYgdGVzdF9CKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19CCisgICAgICAgICMgQiByZXR1cm5zICd1bnNpZ25lZCBjaGFyJywgbm8gcmFuZ2UgY2hlY2tpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0IsIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfQihMb25nKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0IoSW50KCkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUNIQVJfTUFYLCBnZXRhcmdzX0IoLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVDSEFSX01BWCwgZ2V0YXJnc19CKC0xTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19CKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVDSEFSX01BWCwgZ2V0YXJnc19CKFVDSEFSX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19CKFVDSEFSX01BWCsxKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX0IoNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX0IoNDJMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVQ0hBUl9NQVggJiBWRVJZX0xBUkdFLCBnZXRhcmdzX0IoVkVSWV9MQVJHRSkpCisKKyAgICBkZWYgdGVzdF9IKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19ICisgICAgICAgICMgSCByZXR1cm5zICd1bnNpZ25lZCBzaG9ydCcsIG5vIHJhbmdlIGNoZWNraW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19ILCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0goTG9uZygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19IKEludCgpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVTSFJUX01BWCwgZ2V0YXJnc19IKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0goMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVVNIUlRfTUFYLCBnZXRhcmdzX0goVVNIUlRfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0goVVNIUlRfTUFYKzEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfSCg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfSCg0MkwpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVkVSWV9MQVJHRSAmIFVTSFJUX01BWCwgZ2V0YXJnc19IKFZFUllfTEFSR0UpKQorCisgICAgZGVmIHRlc3RfSShzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfSQorICAgICAgICAjIEkgcmV0dXJucyAndW5zaWduZWQgaW50Jywgbm8gcmFuZ2UgY2hlY2tpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0ksIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfSShMb25nKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0koSW50KCkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUlOVF9NQVgsIGdldGFyZ3NfSSgtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19JKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVJTlRfTUFYLCBnZXRhcmdzX0koVUlOVF9NQVgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfSShVSU5UX01BWCsxKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX0koNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX0koNDJMKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFZFUllfTEFSR0UgJiBVSU5UX01BWCwgZ2V0YXJnc19JKFZFUllfTEFSR0UpKQorCisgICAgZGVmIHRlc3RfayhzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfaworICAgICAgICAjIGsgcmV0dXJucyAndW5zaWduZWQgbG9uZycsIG5vIHJhbmdlIGNoZWNraW5nCisgICAgICAgICMgaXQgZG9lcyBub3QgYWNjZXB0IGZsb2F0LCBvciBpbnN0YW5jZXMgd2l0aCBfX2ludF9fCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19rLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfaywgTG9uZygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfaywgSW50KCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVTE9OR19NQVgsIGdldGFyZ3NfaygtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19rKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVMT05HX01BWCwgZ2V0YXJnc19rKFVMT05HX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19rKFVMT05HX01BWCsxKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2soNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2soNDJMKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFZFUllfTEFSR0UgJiBVTE9OR19NQVgsIGdldGFyZ3NfayhWRVJZX0xBUkdFKSkKKworY2xhc3MgU2lnbmVkX1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9oKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19oCisgICAgICAgICMgaCByZXR1cm5zICdzaG9ydCcsIGFuZCBkb2VzIHJhbmdlIGNoZWNraW5nIChTSFJUX01JTiAuLi4gU0hSVF9NQVgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19oLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2goTG9uZygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19oKEludCgpKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2gsIFNIUlRfTUlOLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU0hSVF9NSU4sIGdldGFyZ3NfaChTSFJUX01JTikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU0hSVF9NQVgsIGdldGFyZ3NfaChTSFJUX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfaCwgU0hSVF9NQVgrMSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2goNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2goNDJMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19oLCBWRVJZX0xBUkdFKQorCisgICAgZGVmIHRlc3RfaShzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfaQorICAgICAgICAjIGkgcmV0dXJucyAnaW50JywgYW5kIGRvZXMgcmFuZ2UgY2hlY2tpbmcgKElOVF9NSU4gLi4uIElOVF9NQVgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19pLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2koTG9uZygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19pKEludCgpKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2ksIElOVF9NSU4tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJTlRfTUlOLCBnZXRhcmdzX2koSU5UX01JTikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSU5UX01BWCwgZ2V0YXJnc19pKElOVF9NQVgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2ksIElOVF9NQVgrMSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2koNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2koNDJMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19pLCBWRVJZX0xBUkdFKQorCisgICAgZGVmIHRlc3RfbChzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfbAorICAgICAgICAjIGwgcmV0dXJucyAnbG9uZycsIGFuZCBkb2VzIHJhbmdlIGNoZWNraW5nIChMT05HX01JTiAuLi4gTE9OR19NQVgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19sLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2woTG9uZygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19sKEludCgpKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2wsIExPTkdfTUlOLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTE9OR19NSU4sIGdldGFyZ3NfbChMT05HX01JTikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTE9OR19NQVgsIGdldGFyZ3NfbChMT05HX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfbCwgTE9OR19NQVgrMSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2woNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2woNDJMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19sLCBWRVJZX0xBUkdFKQorCisgICAgZGVmIHRlc3RfbihzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfbgorICAgICAgICAjIG4gcmV0dXJucyAnUHlfc3NpemVfdCcsIGFuZCBkb2VzIHJhbmdlIGNoZWNraW5nCisgICAgICAgICMgKFBZX1NTSVpFX1RfTUlOIC4uLiBQWV9TU0laRV9UX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX24sIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfbihMb25nKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX24oSW50KCkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfbiwgUFlfU1NJWkVfVF9NSU4tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQWV9TU0laRV9UX01JTiwgZ2V0YXJnc19uKFBZX1NTSVpFX1RfTUlOKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQWV9TU0laRV9UX01BWCwgZ2V0YXJnc19uKFBZX1NTSVpFX1RfTUFYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19uLCBQWV9TU0laRV9UX01BWCsxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3Nfbig0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3Nfbig0MkwpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX24sIFZFUllfTEFSR0UpCisKKworY2xhc3MgTG9uZ0xvbmdfVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X0woc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0wKKyAgICAgICAgIyBMIHJldHVybnMgJ2xvbmcgbG9uZycsIGFuZCBkb2VzIHJhbmdlIGNoZWNraW5nIChMTE9OR19NSU4KKyAgICAgICAgIyAuLi4gTExPTkdfTUFYKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygKKyAgICAgICAgICAgICAgICAiaWdub3JlIiwKKyAgICAgICAgICAgICAgICBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0iLippbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkLCBnb3QgZmxvYXQiLAorICAgICAgICAgICAgICAgIG1vZHVsZT1fX25hbWVfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgZ2V0YXJnc19MKDMuMTQpKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygKKyAgICAgICAgICAgICAgICAiZXJyb3IiLAorICAgICAgICAgICAgICAgIGNhdGVnb3J5PURlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSIuKmludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIsCisgICAgICAgICAgICAgICAgbW9kdWxlPSJ1bml0dGVzdCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEZXByZWNhdGlvbldhcm5pbmcsIGdldGFyZ3NfTCwgMy4xNCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfTCwgIkhlbGxvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19MKExvbmcoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfTChJbnQoKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19MLCBMTE9OR19NSU4tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMTE9OR19NSU4sIGdldGFyZ3NfTChMTE9OR19NSU4pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExMT05HX01BWCwgZ2V0YXJnc19MKExMT05HX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfTCwgTExPTkdfTUFYKzEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19MKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19MKDQyTCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfTCwgVkVSWV9MQVJHRSkKKworICAgIGRlZiB0ZXN0X0soc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0sKKyAgICAgICAgIyBLIHJldHVybiAndW5zaWduZWQgbG9uZyBsb25nJywgbm8gcmFuZ2UgY2hlY2tpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0ssIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19LLCBMb25nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19LLCBJbnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVTExPTkdfTUFYLCBnZXRhcmdzX0soVUxMT05HX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19LKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfSyhVTExPTkdfTUFYKzEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfSyg0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfSyg0MkwpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVkVSWV9MQVJHRSAmIFVMTE9OR19NQVgsIGdldGFyZ3NfSyhWRVJZX0xBUkdFKSkKKworCitjbGFzcyBUdXBsZV9UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdHVwbGUoc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX3R1cGxlCisKKyAgICAgICAgcmV0ID0gZ2V0YXJnc190dXBsZSgxLCAoMiwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LCAoMSwyLDMpKQorCisgICAgICAgICMgbWFrZSBzdXJlIGludmFsaWQgdHVwbGUgYXJndW1lbnRzIGFyZSBoYW5kbGVkIGNvcnJlY3RseQorICAgICAgICBjbGFzcyBzZXE6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG4pOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3R1cGxlLCAxLCBzZXEoKSkKKworY2xhc3MgS2V5d29yZHNfVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3Bvc2l0aW9uYWxfYXJncyhzZWxmKToKKyAgICAgICAgIyB1c2luZyBhbGwgcG9zaXRpb25hbCBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBnZXRhcmdzX2tleXdvcmRzKCgxLDIpLCAzLCAoNCwoNSw2KSksICg3LDgsOSksIDEwKSwKKyAgICAgICAgICAgICgxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCkKKyAgICAgICAgICAgICkKKyAgICBkZWYgdGVzdF9taXhlZF9hcmdzKHNlbGYpOgorICAgICAgICAjIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZ2V0YXJnc19rZXl3b3JkcygoMSwyKSwgMywgKDQsKDUsNikpLCBhcmc0PSg3LDgsOSksIGFyZzU9MTApLAorICAgICAgICAgICAgKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKQorICAgICAgICAgICAgKQorICAgIGRlZiB0ZXN0X2tleXdvcmRfYXJncyhzZWxmKToKKyAgICAgICAgIyBhbGwga2V5d29yZHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGdldGFyZ3Nfa2V5d29yZHMoYXJnMT0oMSwyKSwgYXJnMj0zLCBhcmczPSg0LCg1LDYpKSwgYXJnND0oNyw4LDkpLCBhcmc1PTEwKSwKKyAgICAgICAgICAgICgxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCkKKyAgICAgICAgICAgICkKKyAgICBkZWYgdGVzdF9vcHRpb25hbF9hcmdzKHNlbGYpOgorICAgICAgICAjIG1pc3Npbmcgb3B0aW9uYWwga2V5d29yZCBhcmdzLCBza2lwcGluZyB0dXBsZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGdldGFyZ3Nfa2V5d29yZHMoYXJnMT0oMSwyKSwgYXJnMj0zLCBhcmc1PTEwKSwKKyAgICAgICAgICAgICgxLCAyLCAzLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxMCkKKyAgICAgICAgICAgICkKKyAgICBkZWYgdGVzdF9yZXF1aXJlZF9hcmdzKHNlbGYpOgorICAgICAgICAjIHJlcXVpcmVkIGFyZyBtaXNzaW5nCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdldGFyZ3Nfa2V5d29yZHMoYXJnMT0oMSwyKSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyKSwgIlJlcXVpcmVkIGFyZ3VtZW50ICdhcmcyJyAocG9zIDIpIG5vdCBmb3VuZCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1R5cGVFcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCcpCisgICAgZGVmIHRlc3RfdG9vX21hbnlfYXJncyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZ2V0YXJnc19rZXl3b3JkcygoMSwyKSwzLCg0LCg1LDYpKSwoNyw4LDkpLDEwLDExMSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyKSwgImZ1bmN0aW9uIHRha2VzIGF0IG1vc3QgNSBhcmd1bWVudHMgKDYgZ2l2ZW4pIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnVHlwZUVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkJykKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CisgICAgICAgICMgZXh0cmFuZW91cyBrZXl3b3JkIGFyZworICAgICAgICB0cnk6CisgICAgICAgICAgICBnZXRhcmdzX2tleXdvcmRzKCgxLDIpLDMsYXJnNT0xMCxhcmc2NjY9NjY2KQorICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIpLCAiJ2FyZzY2NicgaXMgYW4gaW52YWxpZCBrZXl3b3JkIGFyZ3VtZW50IGZvciB0aGlzIGZ1bmN0aW9uIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnVHlwZUVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkJykKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3RzID0gW1NpZ25lZF9UZXN0Q2FzZSwgVW5zaWduZWRfVGVzdENhc2UsIFR1cGxlX1Rlc3RDYXNlLCBLZXl3b3Jkc19UZXN0Q2FzZV0KKyAgICB0cnk6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0wsIGdldGFyZ3NfSworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcGFzcyAjIFBZX0xPTkdfTE9ORyBub3QgYXZhaWxhYmxlCisgICAgZWxzZToKKyAgICAgICAgdGVzdHMuYXBwZW5kKExvbmdMb25nX1Rlc3RDYXNlKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nZXRvcHQucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nZXRvcHQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyNDI4NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2dldG9wdC5weQpAQCAtMCwwICsxLDE4NyBAQAorIyB0ZXN0X2dldG9wdC5weQorIyBEYXZpZCBHb29kZ2VyIDxkZ29vZGdlckBiaWdmb290LmNvbT4gMjAwMC0wOC0xOQorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fZG9jdGVzdCwgcnVuX3VuaXR0ZXN0LCBFbnZpcm9ubWVudFZhckd1YXJkCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGdldG9wdAorCitzZW50aW5lbCA9IG9iamVjdCgpCisKK2NsYXNzIEdldG9wdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZW52ID0gRW52aXJvbm1lbnRWYXJHdWFyZCgpCisgICAgICAgIGlmICJQT1NJWExZX0NPUlJFQ1QiIGluIHNlbGYuZW52OgorICAgICAgICAgICAgZGVsIHNlbGYuZW52WyJQT1NJWExZX0NPUlJFQ1QiXQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmVudi5fX2V4aXRfXygpCisgICAgICAgIGRlbCBzZWxmLmVudgorCisgICAgZGVmIGFzc2VydEVycm9yKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGdldG9wdC5HZXRvcHRFcnJvciwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIHRlc3Rfc2hvcnRfaGFzX2FyZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldG9wdC5zaG9ydF9oYXNfYXJnKCdhJywgJ2E6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2V0b3B0LnNob3J0X2hhc19hcmcoJ2EnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVycm9yKGdldG9wdC5zaG9ydF9oYXNfYXJnLCAnYScsICdiJykKKworICAgIGRlZiB0ZXN0X2xvbmdfaGFzX2FyZ3Moc2VsZik6CisgICAgICAgIGhhc19hcmcsIG9wdGlvbiA9IGdldG9wdC5sb25nX2hhc19hcmdzKCdhYmMnLCBbJ2FiYz0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc19hcmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9uLCAnYWJjJykKKworICAgICAgICBoYXNfYXJnLCBvcHRpb24gPSBnZXRvcHQubG9uZ19oYXNfYXJncygnYWJjJywgWydhYmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNfYXJnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbiwgJ2FiYycpCisKKyAgICAgICAgaGFzX2FyZywgb3B0aW9uID0gZ2V0b3B0LmxvbmdfaGFzX2FyZ3MoJ2FiYycsIFsnYWJjZCddKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc19hcmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9uLCAnYWJjZCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcnJvcihnZXRvcHQubG9uZ19oYXNfYXJncywgJ2FiYycsIFsnZGVmJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXJyb3IoZ2V0b3B0LmxvbmdfaGFzX2FyZ3MsICdhYmMnLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcnJvcihnZXRvcHQubG9uZ19oYXNfYXJncywgJ2FiYycsIFsnYWJjZCcsJ2FiY2RlJ10pCisKKyAgICBkZWYgdGVzdF9kb19zaG9ydHMoc2VsZik6CisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZG9fc2hvcnRzKFtdLCAnYScsICdhJywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywgWygnLWEnLCAnJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtdKQorCisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZG9fc2hvcnRzKFtdLCAnYTEnLCAnYTonLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctYScsICcxJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtdKQorCisgICAgICAgICNvcHRzLCBhcmdzID0gZ2V0b3B0LmRvX3Nob3J0cyhbXSwgJ2E9MScsICdhOicsIFtdKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctYScsICcxJyldKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbXSkKKworICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmRvX3Nob3J0cyhbXSwgJ2EnLCAnYTonLCBbJzEnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctYScsICcxJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtdKQorCisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZG9fc2hvcnRzKFtdLCAnYScsICdhOicsIFsnMScsICcyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywgWygnLWEnLCAnMScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbJzInXSkKKworICAgICAgICBzZWxmLmFzc2VydEVycm9yKGdldG9wdC5kb19zaG9ydHMsIFtdLCAnYTEnLCAnYScsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVycm9yKGdldG9wdC5kb19zaG9ydHMsIFtdLCAnYScsICdhOicsIFtdKQorCisgICAgZGVmIHRlc3RfZG9fbG9uZ3Moc2VsZik6CisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZG9fbG9uZ3MoW10sICdhYmMnLCBbJ2FiYyddLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctLWFiYycsICcnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW10pCisKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5kb19sb25ncyhbXSwgJ2FiYz0xJywgWydhYmM9J10sIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdHMsIFsoJy0tYWJjJywgJzEnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW10pCisKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5kb19sb25ncyhbXSwgJ2FiYz0xJywgWydhYmNkPSddLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctLWFiY2QnLCAnMScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbXSkKKworICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmRvX2xvbmdzKFtdLCAnYWJjJywgWydhYicsICdhYmMnLCAnYWJjZCddLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctLWFiYycsICcnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW10pCisKKyAgICAgICAgIyBNdWNoIGxpa2UgdGhlIHByZWNlZGluZywgZXhjZXB0IHdpdGggYSBub24tYWxwaGEgY2hhcmFjdGVyICgiLSIpIGluCisgICAgICAgICMgb3B0aW9uIG5hbWUgdGhhdCBwcmVjZWRlcyAiPSI7IGZhaWxlZCBpbgorICAgICAgICAjIGh0dHA6Ly9weXRob24ub3JnL3NmLzEyNjg2MworICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmRvX2xvbmdzKFtdLCAnZm9vPTQyJywgWydmb28tYmFyJywgJ2Zvbz0nLF0sIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdHMsIFsoJy0tZm9vJywgJzQyJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXJyb3IoZ2V0b3B0LmRvX2xvbmdzLCBbXSwgJ2FiYz0xJywgWydhYmMnXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXJyb3IoZ2V0b3B0LmRvX2xvbmdzLCBbXSwgJ2FiYycsIFsnYWJjPSddLCBbXSkKKworICAgIGRlZiB0ZXN0X2dldG9wdChzZWxmKToKKyAgICAgICAgIyBub3RlOiB0aGUgZW1wdHkgc3RyaW5nIGJldHdlZW4gJy1hJyBhbmQgJy0tYmV0YScgaXMgc2lnbmlmaWNhbnQ6CisgICAgICAgICMgaXQgc2ltdWxhdGVzIGFuIGVtcHR5IHN0cmluZyBvcHRpb24gYXJndW1lbnQgKCctYSAiIicpIG9uIHRoZQorICAgICAgICAjIGNvbW1hbmQgbGluZS4KKyAgICAgICAgY21kbGluZSA9IFsnLWEnLCAnMScsICctYicsICctLWFscGhhPTInLCAnLS1iZXRhJywgJy1hJywgJzMnLCAnLWEnLAorICAgICAgICAgICAgICAgICAgICcnLCAnLS1iZXRhJywgJ2FyZzEnLCAnYXJnMiddCisKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoY21kbGluZSwgJ2E6YicsIFsnYWxwaGE9JywgJ2JldGEnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctYScsICcxJyksICgnLWInLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnLS1hbHBoYScsICcyJyksICgnLS1iZXRhJywgJycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJy1hJywgJzMnKSwgKCctYScsICcnKSwgKCctLWJldGEnLCAnJyldKQorICAgICAgICAjIE5vdGUgYW1iaWd1aXR5IG9mICgnLWInLCAnJykgYW5kICgnLWEnLCAnJykgYWJvdmUuIFRoaXMgbXVzdCBiZQorICAgICAgICAjIGFjY291bnRlZCBmb3IgaW4gdGhlIGNvZGUgdGhhdCBjYWxscyBnZXRvcHQoKS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbJ2FyZzEnLCAnYXJnMiddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXJyb3IoZ2V0b3B0LmdldG9wdCwgY21kbGluZSwgJ2E6YicsIFsnYWxwaGEnLCAnYmV0YSddKQorCisgICAgZGVmIHRlc3RfZ251X2dldG9wdChzZWxmKToKKyAgICAgICAgIyBUZXN0IGhhbmRsaW5nIG9mIEdOVSBzdHlsZSBzY2FubmluZyBtb2RlLgorICAgICAgICBjbWRsaW5lID0gWyctYScsICdhcmcxJywgJy1iJywgJzEnLCAnLS1hbHBoYScsICctLWJldGE9MiddCisKKyAgICAgICAgIyBHTlUgc3R5bGUKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nbnVfZ2V0b3B0KGNtZGxpbmUsICdhYjonLCBbJ2FscGhhJywgJ2JldGE9J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgWydhcmcxJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywgWygnLWEnLCAnJyksICgnLWInLCAnMScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJy0tYWxwaGEnLCAnJyksICgnLS1iZXRhJywgJzInKV0pCisKKyAgICAgICAgIyByZWNvZ25pemUgIi0iIGFzIGFuIGFyZ3VtZW50CisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ251X2dldG9wdChbJy1hJywgJy0nLCAnLWInLCAnLSddLCAnYWI6JywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgWyctJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywgWygnLWEnLCAnJyksICgnLWInLCAnLScpXSkKKworICAgICAgICAjIFBvc2l4IHN0eWxlIHZpYSArCisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ251X2dldG9wdChjbWRsaW5lLCAnK2FiOicsIFsnYWxwaGEnLCAnYmV0YT0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCBbKCctYScsICcnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgWydhcmcxJywgJy1iJywgJzEnLCAnLS1hbHBoYScsICctLWJldGE9MiddKQorCisgICAgICAgICMgUG9zaXggc3R5bGUgdmlhIFBPU0lYTFlfQ09SUkVDVAorICAgICAgICBzZWxmLmVudlsiUE9TSVhMWV9DT1JSRUNUIl0gPSAiMSIKKyAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nbnVfZ2V0b3B0KGNtZGxpbmUsICdhYjonLCBbJ2FscGhhJywgJ2JldGE9J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywgWygnLWEnLCAnJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFsnYXJnMScsICctYicsICcxJywgJy0tYWxwaGEnLCAnLS1iZXRhPTInXSkKKworICAgIGRlZiB0ZXN0X2xpYnJlZl9leGFtcGxlcyhzZWxmKToKKyAgICAgICAgcyA9ICIiIgorICAgICAgICBFeGFtcGxlcyBmcm9tIHRoZSBMaWJyYXJ5IFJlZmVyZW5jZTogIERvYy9saWIvbGliZ2V0b3B0LnRleAorCisgICAgICAgIEFuIGV4YW1wbGUgdXNpbmcgb25seSBVbml4IHN0eWxlIG9wdGlvbnM6CisKKworICAgICAgICA+Pj4gaW1wb3J0IGdldG9wdAorICAgICAgICA+Pj4gYXJncyA9ICctYSAtYiAtY2ZvbyAtZCBiYXIgYTEgYTInLnNwbGl0KCkKKyAgICAgICAgPj4+IGFyZ3MKKyAgICAgICAgWyctYScsICctYicsICctY2ZvbycsICctZCcsICdiYXInLCAnYTEnLCAnYTInXQorICAgICAgICA+Pj4gb3B0bGlzdCwgYXJncyA9IGdldG9wdC5nZXRvcHQoYXJncywgJ2FiYzpkOicpCisgICAgICAgID4+PiBvcHRsaXN0CisgICAgICAgIFsoJy1hJywgJycpLCAoJy1iJywgJycpLCAoJy1jJywgJ2ZvbycpLCAoJy1kJywgJ2JhcicpXQorICAgICAgICA+Pj4gYXJncworICAgICAgICBbJ2ExJywgJ2EyJ10KKworICAgICAgICBVc2luZyBsb25nIG9wdGlvbiBuYW1lcyBpcyBlcXVhbGx5IGVhc3k6CisKKworICAgICAgICA+Pj4gcyA9ICctLWNvbmRpdGlvbj1mb28gLS10ZXN0aW5nIC0tb3V0cHV0LWZpbGUgYWJjLmRlZiAteCBhMSBhMicKKyAgICAgICAgPj4+IGFyZ3MgPSBzLnNwbGl0KCkKKyAgICAgICAgPj4+IGFyZ3MKKyAgICAgICAgWyctLWNvbmRpdGlvbj1mb28nLCAnLS10ZXN0aW5nJywgJy0tb3V0cHV0LWZpbGUnLCAnYWJjLmRlZicsICcteCcsICdhMScsICdhMiddCisgICAgICAgID4+PiBvcHRsaXN0LCBhcmdzID0gZ2V0b3B0LmdldG9wdChhcmdzLCAneCcsIFsKKyAgICAgICAgLi4uICAgICAnY29uZGl0aW9uPScsICdvdXRwdXQtZmlsZT0nLCAndGVzdGluZyddKQorICAgICAgICA+Pj4gb3B0bGlzdAorICAgICAgICBbKCctLWNvbmRpdGlvbicsICdmb28nKSwgKCctLXRlc3RpbmcnLCAnJyksICgnLS1vdXRwdXQtZmlsZScsICdhYmMuZGVmJyksICgnLXgnLCAnJyldCisgICAgICAgID4+PiBhcmdzCisgICAgICAgIFsnYTEnLCAnYTInXQorICAgICAgICAiIiIKKworICAgICAgICBpbXBvcnQgdHlwZXMKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoImxpYnJlZnRlc3QiLCBzKQorICAgICAgICBydW5fZG9jdGVzdChtLCB2ZXJib3NlKQorCisgICAgZGVmIHRlc3RfaXNzdWU0NjI5KHNlbGYpOgorICAgICAgICBsb25nb3B0cywgc2hvcnRvcHRzID0gZ2V0b3B0LmdldG9wdChbJy0taGVscD0nXSwgJycsIFsnaGVscD0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nb3B0cywgWygnLS1oZWxwJywgJycpXSkKKyAgICAgICAgbG9uZ29wdHMsIHNob3J0b3B0cyA9IGdldG9wdC5nZXRvcHQoWyctLWhlbHA9eCddLCAnJywgWydoZWxwPSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmdvcHRzLCBbKCctLWhlbHAnLCAneCcpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZ2V0b3B0LkdldG9wdEVycm9yLCBnZXRvcHQuZ2V0b3B0LCBbJy0taGVscD0nXSwgJycsIFsnaGVscCddKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEdldG9wdFRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nZXR0ZXh0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZ2V0dGV4dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDM2OTU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZ2V0dGV4dC5weQpAQCAtMCwwICsxLDQ2NyBAQAoraW1wb3J0IG9zCitpbXBvcnQgYmFzZTY0CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgZ2V0dGV4dAoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKworIyBUT0RPOgorIyAgLSBBZGQgbmV3IHRlc3RzLCBmb3IgZXhhbXBsZSBmb3IgImRnZXR0ZXh0IgorIyAgLSBSZW1vdmUgZHVtbXkgdGVzdHMsIGZvciBleGFtcGxlIHRlc3RpbmcgZm9yIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlcworIyAgICBoYXMgbm8gc2Vuc2UsIGl0IHdvdWxkIGhhdmUgaWYgd2Ugd2VyZSB0ZXN0aW5nIGEgcGFyc2VyIChpLmUuIHB5Z2V0dGV4dCkKKyMgIC0gVGVzdHMgc2hvdWxkIGhhdmUgb25seSBvbmUgYXNzZXJ0LgorCitHTlVfTU9fREFUQSA9ICcnJ1wKKzNoSUVsUUFBQUFBR0FBQUFIQUFBQUV3QUFBQUxBQUFBZkFBQUFBQUFBQUNvQUFBQUZRQUFBS2tBQUFBakFBQUF2d0FBQUtFQUFBRGoKK0FBQUFCd0FBQUlVQkFBQUxBQUFBalFFQUFFVUJBQUNaQVFBQUZnQUFBTjhDQUFBZUFBQUE5Z0lBQUtFQUFBQVZBd0FBQlFBQUFMY0QKK0FBQUpBQUFBdlFNQUFBRUFBQUFEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQlFBQUFBWUFBQUFDQUFBQUFGSmgKK2VXMXZibVFnVEhWNGRYSjVJRmxoWTJndGRBQlVhR1Z5WlNCcGN5QWxjeUJtYVd4bEFGUm9aWEpsSUdGeVpTQWxjeUJtYVd4bGN3QlUKK2FHbHpJRzF2WkhWc1pTQndjbTkyYVdSbGN5QnBiblJsY201aGRHbHZibUZzYVhwaGRHbHZiaUJoYm1RZ2JHOWpZV3hwZW1GMGFXOXUKK0NuTjFjSEJ2Y25RZ1ptOXlJSGx2ZFhJZ1VIbDBhRzl1SUhCeWIyZHlZVzF6SUdKNUlIQnliM1pwWkdsdVp5QmhiaUJwYm5SbGNtWmgKK1kyVWdkRzhnZEdobElFZE9WUXBuWlhSMFpYaDBJRzFsYzNOaFoyVWdZMkYwWVd4dlp5QnNhV0p5WVhKNUxnQnRkV3hzZFhOckFHNTEKK1pHZGxJRzUxWkdkbEFGQnliMnBsWTNRdFNXUXRWbVZ5YzJsdmJqb2dNaTR3Q2xCUExWSmxkbWx6YVc5dUxVUmhkR1U2SURJd01EQXQKK01EZ3RNamtnTVRJNk1Ua3RNRFE2TURBS1RHRnpkQzFVY21GdWMyeGhkRzl5T2lCS0xpQkVZWFpwWkNCSllzT2h3N0ZsZWlBOGFpMWsKK1lYWnBaRUJ1YjI5ekxtWnlQZ3BNWVc1bmRXRm5aUzFVWldGdE9pQllXQ0E4Y0hsMGFHOXVMV1JsZGtCd2VYUm9iMjR1YjNKblBncE4KK1NVMUZMVlpsY25OcGIyNDZJREV1TUFwRGIyNTBaVzUwTFZSNWNHVTZJSFJsZUhRdmNHeGhhVzQ3SUdOb1lYSnpaWFE5YVhOdkxUZzQKK05Ua3RNUXBEYjI1MFpXNTBMVlJ5WVc1elptVnlMVVZ1WTI5a2FXNW5PaUJ1YjI1bENrZGxibVZ5WVhSbFpDMUNlVG9nY0hsblpYUjAKK1pYaDBMbkI1SURFdU1RcFFiSFZ5WVd3dFJtOXliWE02SUc1d2JIVnlZV3h6UFRJN0lIQnNkWEpoYkQxdUlUMHhPd29BVkdoeWIyRjAKK2QyOWlZbXhsY2lCTllXNW5jbTkyWlFCSVlYa2dKWE1nWm1samFHVnlid0JJWVhrZ0pYTWdabWxqYUdWeWIzTUFSM1YyWmlCNlluRm8KK2VYSWdZMlZpYVhaeGNtWWdkbUZuY21WaGJtZDJZbUZ1ZVhadGJtZDJZbUVnYm1GeElIbGljRzU1ZG0xdVozWmlZUXBtYUdOalltVm4KK0lITmlaU0JzWW1obElFTnNaM1ZpWVNCalpXSjBaVzU2WmlCdmJDQmpaV0pwZG5GMllYUWdibUVnZG1GbmNtVnpibkJ5SUdkaUlHZDEKK2NpQlVRVWdLZEhKblozSnJaeUI2Y21abWJuUnlJSEJ1WjI1NVluUWdlWFp2Wlc1bGJDNEFZbUZqYjI0QWQybHVheUIzYVc1ckFBPT0KKycnJworCitVTU9fREFUQSA9ICcnJ1wKKzNoSUVsUUFBQUFBQ0FBQUFIQUFBQUN3QUFBQUZBQUFBUEFBQUFBQUFBQUJRQUFBQUJBQUFBRkVBQUFBUEFRQUFWZ0FBQUFRQUFBQm0KK0FRQUFBUUFBQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBWVdMRG5nQlFjbTlxWldOMExVbGtMVlpsY25OcGIyNDZJREl1TUFwUVR5MVMKK1pYWnBjMmx2YmkxRVlYUmxPaUF5TURBekxUQTBMVEV4SURFeU9qUXlMVEEwTURBS1RHRnpkQzFVY21GdWMyeGhkRzl5T2lCQ1lYSnkKK2VTQkJMaUJYUVhKellYY2dQR0poY25KNVFIQjVkR2h2Ymk1dmNtYytDa3hoYm1kMVlXZGxMVlJsWVcwNklGaFlJRHh3ZVhSb2IyNHQKK1pHVjJRSEI1ZEdodmJpNXZjbWMrQ2sxSlRVVXRWbVZ5YzJsdmJqb2dNUzR3Q2tOdmJuUmxiblF0Vkhsd1pUb2dkR1Y0ZEM5d2JHRnAKK2Jqc2dZMmhoY25ObGREMTFkR1l0T0FwRGIyNTBaVzUwTFZSeVlXNXpabVZ5TFVWdVkyOWthVzVuT2lBM1ltbDBDa2RsYm1WeVlYUmwKK1pDMUNlVG9nYldGdWRXRnNiSGtLQU1La2VYb0EKKycnJworCitNTU9fREFUQSA9ICcnJ1wKKzNoSUVsUUFBQUFBQkFBQUFIQUFBQUNRQUFBQURBQUFBTEFBQUFBQUFBQUE0QUFBQWVBRUFBRGtBQUFBQkFBQUFBQUFBQUFBQUFBQUEKK1VISnZhbVZqZEMxSlpDMVdaWEp6YVc5dU9pQk9ieUJRY205cVpXTjBJREF1TUFwUVQxUXRRM0psWVhScGIyNHRSR0YwWlRvZ1YyVmsKK0lFUmxZeUF4TVNBd056bzBORG94TlNBeU1EQXlDbEJQTFZKbGRtbHphVzl1TFVSaGRHVTZJREl3TURJdE1EZ3RNVFFnTURFNk1UZzYKK05UZ3JNREE2TURBS1RHRnpkQzFVY21GdWMyeGhkRzl5T2lCS2IyaHVJRVJ2WlNBOGFtUnZaVUJsZUdGdGNHeGxMbU52YlQ0S1NtRnUKK1pTQkdiMjlpWVhJZ1BHcG1iMjlpWVhKQVpYaGhiWEJzWlM1amIyMCtDa3hoYm1kMVlXZGxMVlJsWVcwNklIaDRJRHg0ZUVCbGVHRnQKK2NHeGxMbU52YlQ0S1RVbE5SUzFXWlhKemFXOXVPaUF4TGpBS1EyOXVkR1Z1ZEMxVWVYQmxPaUIwWlhoMEwzQnNZV2x1T3lCamFHRnkKK2MyVjBQV2x6YnkwNE9EVTVMVEUxQ2tOdmJuUmxiblF0VkhKaGJuTm1aWEl0Ulc1amIyUnBibWM2SUhGMWIzUmxaQzF3Y21sdWRHRmkKK2JHVUtSMlZ1WlhKaGRHVmtMVUo1T2lCd2VXZGxkSFJsZUhRdWNIa2dNUzR6Q2dBPQorJycnCisKK0xPQ0FMRURJUiA9IG9zLnBhdGguam9pbigneHgnLCAnTENfTUVTU0FHRVMnKQorTU9GSUxFID0gb3MucGF0aC5qb2luKExPQ0FMRURJUiwgJ2dldHRleHQubW8nKQorVU1PRklMRSA9IG9zLnBhdGguam9pbihMT0NBTEVESVIsICd1Z2V0dGV4dC5tbycpCitNTU9GSUxFID0gb3MucGF0aC5qb2luKExPQ0FMRURJUiwgJ21ldGFkYXRhLm1vJykKKworCitjbGFzcyBHZXR0ZXh0QmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoTE9DQUxFRElSKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKExPQ0FMRURJUikKKyAgICAgICAgd2l0aCBvcGVuKE1PRklMRSwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShiYXNlNjQuZGVjb2Rlc3RyaW5nKEdOVV9NT19EQVRBKSkKKyAgICAgICAgd2l0aCBvcGVuKFVNT0ZJTEUsICd3YicpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoYmFzZTY0LmRlY29kZXN0cmluZyhVTU9fREFUQSkpCisgICAgICAgIHdpdGggb3BlbihNTU9GSUxFLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKGJhc2U2NC5kZWNvZGVzdHJpbmcoTU1PX0RBVEEpKQorCisgICAgICAgIHNlbGYuZW52ID0gdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKQorICAgICAgICBzZWxmLmVudlsnTEFOR1VBR0UnXSA9ICd4eCcKKyAgICAgICAgZ2V0dGV4dC5fdHJhbnNsYXRpb25zLmNsZWFyKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5lbnYuX19leGl0X18oKQorICAgICAgICBkZWwgc2VsZi5lbnYKKyAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLnNwbGl0KExPQ0FMRURJUilbMF0pCisKKworY2xhc3MgR2V0dGV4dFRlc3RDYXNlMShHZXR0ZXh0QmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgR2V0dGV4dEJhc2VUZXN0LnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYubG9jYWxlZGlyID0gb3MuY3VyZGlyCisgICAgICAgIHNlbGYubW9maWxlID0gTU9GSUxFCisgICAgICAgIGdldHRleHQuaW5zdGFsbCgnZ2V0dGV4dCcsIHNlbGYubG9jYWxlZGlyKQorCisgICAgZGVmIHRlc3Rfc29tZV90cmFuc2xhdGlvbnMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIHRlc3Qgc29tZSB0cmFuc2xhdGlvbnMKKyAgICAgICAgZXEoXygnYWxiYXRyb3NzJyksICdhbGJhdHJvc3MnKQorICAgICAgICBlcShfKHUnbXVsbHVzaycpLCAnYmFjb24nKQorICAgICAgICBlcShfKHInUmF5bW9uZCBMdXh1cnkgWWFjaC10JyksICdUaHJvYXR3b2JibGVyIE1hbmdyb3ZlJykKKyAgICAgICAgZXEoXyh1cidudWRnZSBudWRnZScpLCAnd2luayB3aW5rJykKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9xdW90ZXMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIGRvdWJsZSBxdW90ZXMKKyAgICAgICAgZXEoXygiYWxiYXRyb3NzIiksICdhbGJhdHJvc3MnKQorICAgICAgICBlcShfKHUibXVsbHVzayIpLCAnYmFjb24nKQorICAgICAgICBlcShfKHIiUmF5bW9uZCBMdXh1cnkgWWFjaC10IiksICdUaHJvYXR3b2JibGVyIE1hbmdyb3ZlJykKKyAgICAgICAgZXEoXyh1ciJudWRnZSBudWRnZSIpLCAnd2luayB3aW5rJykKKworICAgIGRlZiB0ZXN0X3RyaXBsZV9zaW5nbGVfcXVvdGVzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgIyB0cmlwbGUgc2luZ2xlIHF1b3RlcworICAgICAgICBlcShfKCcnJ2FsYmF0cm9zcycnJyksICdhbGJhdHJvc3MnKQorICAgICAgICBlcShfKHUnJydtdWxsdXNrJycnKSwgJ2JhY29uJykKKyAgICAgICAgZXEoXyhyJycnUmF5bW9uZCBMdXh1cnkgWWFjaC10JycnKSwgJ1Rocm9hdHdvYmJsZXIgTWFuZ3JvdmUnKQorICAgICAgICBlcShfKHVyJycnbnVkZ2UgbnVkZ2UnJycpLCAnd2luayB3aW5rJykKKworICAgIGRlZiB0ZXN0X3RyaXBsZV9kb3VibGVfcXVvdGVzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgIyB0cmlwbGUgZG91YmxlIHF1b3RlcworICAgICAgICBlcShfKCIiImFsYmF0cm9zcyIiIiksICdhbGJhdHJvc3MnKQorICAgICAgICBlcShfKHUiIiJtdWxsdXNrIiIiKSwgJ2JhY29uJykKKyAgICAgICAgZXEoXyhyIiIiUmF5bW9uZCBMdXh1cnkgWWFjaC10IiIiKSwgJ1Rocm9hdHdvYmJsZXIgTWFuZ3JvdmUnKQorICAgICAgICBlcShfKHVyIiIibnVkZ2UgbnVkZ2UiIiIpLCAnd2luayB3aW5rJykKKworICAgIGRlZiB0ZXN0X211bHRpbGluZV9zdHJpbmdzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgIyBtdWx0aWxpbmUgc3RyaW5ncworICAgICAgICBlcShfKCcnJ1RoaXMgbW9kdWxlIHByb3ZpZGVzIGludGVybmF0aW9uYWxpemF0aW9uIGFuZCBsb2NhbGl6YXRpb24KK3N1cHBvcnQgZm9yIHlvdXIgUHl0aG9uIHByb2dyYW1zIGJ5IHByb3ZpZGluZyBhbiBpbnRlcmZhY2UgdG8gdGhlIEdOVQorZ2V0dGV4dCBtZXNzYWdlIGNhdGFsb2cgbGlicmFyeS4nJycpLAorICAgICAgICAgICAnJydHdXZmIHpicWh5ciBjZWJpdnFyZiB2YWdyZWFuZ3ZiYW55dm1uZ3ZiYSBuYXEgeWJwbnl2bW5ndmJhCitmaGNjYmVnIHNiZSBsYmhlIENsZ3ViYSBjZWJ0ZW56ZiBvbCBjZWJpdnF2YXQgbmEgdmFncmVzbnByIGdiIGd1ciBUQUgKK3RyZ2dya2cgenJmZm50ciBwbmdueWJ0IHl2b2VuZWwuJycnKQorCisgICAgZGVmIHRlc3RfdGhlX2FsdGVybmF0aXZlX2ludGVyZmFjZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgdGVzdCB0aGUgYWx0ZXJuYXRpdmUgaW50ZXJmYWNlCisgICAgICAgIHdpdGggb3BlbihzZWxmLm1vZmlsZSwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICB0ID0gZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMoZnApCisgICAgICAgICMgSW5zdGFsbCB0aGUgdHJhbnNsYXRpb24gb2JqZWN0CisgICAgICAgIHQuaW5zdGFsbCgpCisgICAgICAgIGVxKF8oJ251ZGdlIG51ZGdlJyksICd3aW5rIHdpbmsnKQorICAgICAgICAjIFRyeSB1bmljb2RlIHJldHVybiB0eXBlCisgICAgICAgIHQuaW5zdGFsbCh1bmljb2RlPVRydWUpCisgICAgICAgIGVxKF8oJ211bGx1c2snKSwgJ2JhY29uJykKKyAgICAgICAgIyBUZXN0IGluc3RhbGxhdGlvbiBvZiBvdGhlciBtZXRob2RzCisgICAgICAgIGltcG9ydCBfX2J1aWx0aW5fXworICAgICAgICB0Lmluc3RhbGwodW5pY29kZT1UcnVlLCBuYW1lcz1bImdldHRleHQiLCAibGdldHRleHQiXSkKKyAgICAgICAgZXEoXywgdC51Z2V0dGV4dCkKKyAgICAgICAgZXEoX19idWlsdGluX18uZ2V0dGV4dCwgdC51Z2V0dGV4dCkKKyAgICAgICAgZXEobGdldHRleHQsIHQubGdldHRleHQpCisgICAgICAgIGRlbCBfX2J1aWx0aW5fXy5nZXR0ZXh0CisgICAgICAgIGRlbCBfX2J1aWx0aW5fXy5sZ2V0dGV4dAorCisKK2NsYXNzIEdldHRleHRUZXN0Q2FzZTIoR2V0dGV4dEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIEdldHRleHRCYXNlVGVzdC5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLmxvY2FsZWRpciA9IG9zLmN1cmRpcgorICAgICAgICAjIFNldCB1cCB0aGUgYmluZGluZ3MKKyAgICAgICAgZ2V0dGV4dC5iaW5kdGV4dGRvbWFpbignZ2V0dGV4dCcsIHNlbGYubG9jYWxlZGlyKQorICAgICAgICBnZXR0ZXh0LnRleHRkb21haW4oJ2dldHRleHQnKQorICAgICAgICAjIEZvciBjb252ZW5pZW5jZQorICAgICAgICBzZWxmLl8gPSBnZXR0ZXh0LmdldHRleHQKKworICAgIGRlZiB0ZXN0X2JpbmR0ZXh0ZG9tYWluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldHRleHQuYmluZHRleHRkb21haW4oJ2dldHRleHQnKSwgc2VsZi5sb2NhbGVkaXIpCisKKyAgICBkZWYgdGVzdF90ZXh0ZG9tYWluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldHRleHQudGV4dGRvbWFpbigpLCAnZ2V0dGV4dCcpCisKKyAgICBkZWYgdGVzdF9zb21lX3RyYW5zbGF0aW9ucyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgdGVzdCBzb21lIHRyYW5zbGF0aW9ucworICAgICAgICBlcShzZWxmLl8oJ2FsYmF0cm9zcycpLCAnYWxiYXRyb3NzJykKKyAgICAgICAgZXEoc2VsZi5fKHUnbXVsbHVzaycpLCAnYmFjb24nKQorICAgICAgICBlcShzZWxmLl8ocidSYXltb25kIEx1eHVyeSBZYWNoLXQnKSwgJ1Rocm9hdHdvYmJsZXIgTWFuZ3JvdmUnKQorICAgICAgICBlcShzZWxmLl8odXInbnVkZ2UgbnVkZ2UnKSwgJ3dpbmsgd2luaycpCisKKyAgICBkZWYgdGVzdF9kb3VibGVfcXVvdGVzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgIyBkb3VibGUgcXVvdGVzCisgICAgICAgIGVxKHNlbGYuXygiYWxiYXRyb3NzIiksICdhbGJhdHJvc3MnKQorICAgICAgICBlcShzZWxmLl8odSJtdWxsdXNrIiksICdiYWNvbicpCisgICAgICAgIGVxKHNlbGYuXyhyIlJheW1vbmQgTHV4dXJ5IFlhY2gtdCIpLCAnVGhyb2F0d29iYmxlciBNYW5ncm92ZScpCisgICAgICAgIGVxKHNlbGYuXyh1ciJudWRnZSBudWRnZSIpLCAnd2luayB3aW5rJykKKworICAgIGRlZiB0ZXN0X3RyaXBsZV9zaW5nbGVfcXVvdGVzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgIyB0cmlwbGUgc2luZ2xlIHF1b3RlcworICAgICAgICBlcShzZWxmLl8oJycnYWxiYXRyb3NzJycnKSwgJ2FsYmF0cm9zcycpCisgICAgICAgIGVxKHNlbGYuXyh1JycnbXVsbHVzaycnJyksICdiYWNvbicpCisgICAgICAgIGVxKHNlbGYuXyhyJycnUmF5bW9uZCBMdXh1cnkgWWFjaC10JycnKSwgJ1Rocm9hdHdvYmJsZXIgTWFuZ3JvdmUnKQorICAgICAgICBlcShzZWxmLl8odXInJydudWRnZSBudWRnZScnJyksICd3aW5rIHdpbmsnKQorCisgICAgZGVmIHRlc3RfdHJpcGxlX2RvdWJsZV9xdW90ZXMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIHRyaXBsZSBkb3VibGUgcXVvdGVzCisgICAgICAgIGVxKHNlbGYuXygiIiJhbGJhdHJvc3MiIiIpLCAnYWxiYXRyb3NzJykKKyAgICAgICAgZXEoc2VsZi5fKHUiIiJtdWxsdXNrIiIiKSwgJ2JhY29uJykKKyAgICAgICAgZXEoc2VsZi5fKHIiIiJSYXltb25kIEx1eHVyeSBZYWNoLXQiIiIpLCAnVGhyb2F0d29iYmxlciBNYW5ncm92ZScpCisgICAgICAgIGVxKHNlbGYuXyh1ciIiIm51ZGdlIG51ZGdlIiIiKSwgJ3dpbmsgd2luaycpCisKKyAgICBkZWYgdGVzdF9tdWx0aWxpbmVfc3RyaW5ncyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgbXVsdGlsaW5lIHN0cmluZ3MKKyAgICAgICAgZXEoc2VsZi5fKCcnJ1RoaXMgbW9kdWxlIHByb3ZpZGVzIGludGVybmF0aW9uYWxpemF0aW9uIGFuZCBsb2NhbGl6YXRpb24KK3N1cHBvcnQgZm9yIHlvdXIgUHl0aG9uIHByb2dyYW1zIGJ5IHByb3ZpZGluZyBhbiBpbnRlcmZhY2UgdG8gdGhlIEdOVQorZ2V0dGV4dCBtZXNzYWdlIGNhdGFsb2cgbGlicmFyeS4nJycpLAorICAgICAgICAgICAnJydHdXZmIHpicWh5ciBjZWJpdnFyZiB2YWdyZWFuZ3ZiYW55dm1uZ3ZiYSBuYXEgeWJwbnl2bW5ndmJhCitmaGNjYmVnIHNiZSBsYmhlIENsZ3ViYSBjZWJ0ZW56ZiBvbCBjZWJpdnF2YXQgbmEgdmFncmVzbnByIGdiIGd1ciBUQUgKK3RyZ2dya2cgenJmZm50ciBwbmdueWJ0IHl2b2VuZWwuJycnKQorCisKK2NsYXNzIFBsdXJhbEZvcm1zVGVzdENhc2UoR2V0dGV4dEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIEdldHRleHRCYXNlVGVzdC5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLm1vZmlsZSA9IE1PRklMRQorCisgICAgZGVmIHRlc3RfcGx1cmFsX2Zvcm1zMShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHggPSBnZXR0ZXh0Lm5nZXR0ZXh0KCdUaGVyZSBpcyAlcyBmaWxlJywgJ1RoZXJlIGFyZSAlcyBmaWxlcycsIDEpCisgICAgICAgIGVxKHgsICdIYXkgJXMgZmljaGVybycpCisgICAgICAgIHggPSBnZXR0ZXh0Lm5nZXR0ZXh0KCdUaGVyZSBpcyAlcyBmaWxlJywgJ1RoZXJlIGFyZSAlcyBmaWxlcycsIDIpCisgICAgICAgIGVxKHgsICdIYXkgJXMgZmljaGVyb3MnKQorCisgICAgZGVmIHRlc3RfcGx1cmFsX2Zvcm1zMihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHdpdGggb3BlbihzZWxmLm1vZmlsZSwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICB0ID0gZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMoZnApCisgICAgICAgIHggPSB0Lm5nZXR0ZXh0KCdUaGVyZSBpcyAlcyBmaWxlJywgJ1RoZXJlIGFyZSAlcyBmaWxlcycsIDEpCisgICAgICAgIGVxKHgsICdIYXkgJXMgZmljaGVybycpCisgICAgICAgIHggPSB0Lm5nZXR0ZXh0KCdUaGVyZSBpcyAlcyBmaWxlJywgJ1RoZXJlIGFyZSAlcyBmaWxlcycsIDIpCisgICAgICAgIGVxKHgsICdIYXkgJXMgZmljaGVyb3MnKQorCisgICAgZGVmIHRlc3RfaHUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBmID0gZ2V0dGV4dC5jMnB5KCcwJykKKyAgICAgICAgcyA9ICcnLmpvaW4oWyBzdHIoZih4KSkgZm9yIHggaW4gcmFuZ2UoMjAwKSBdKQorICAgICAgICBlcShzLCAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKQorCisgICAgZGVmIHRlc3RfZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBmID0gZ2V0dGV4dC5jMnB5KCduICE9IDEnKQorICAgICAgICBzID0gJycuam9pbihbIHN0cihmKHgpKSBmb3IgeCBpbiByYW5nZSgyMDApIF0pCisgICAgICAgIGVxKHMsICIxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSIpCisKKyAgICBkZWYgdGVzdF9mcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGYgPSBnZXR0ZXh0LmMycHkoJ24+MScpCisgICAgICAgIHMgPSAnJy5qb2luKFsgc3RyKGYoeCkpIGZvciB4IGluIHJhbmdlKDIwMCkgXSkKKyAgICAgICAgZXEocywgIjAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIikKKworICAgIGRlZiB0ZXN0X2dkKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZiA9IGdldHRleHQuYzJweSgnbj09MSA/IDAgOiBuPT0yID8gMSA6IDInKQorICAgICAgICBzID0gJycuam9pbihbIHN0cihmKHgpKSBmb3IgeCBpbiByYW5nZSgyMDApIF0pCisgICAgICAgIGVxKHMsICIyMDEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiIpCisKKyAgICBkZWYgdGVzdF9nZDIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIFRlc3RzIHRoZSBjb21iaW5hdGlvbiBvZiBwYXJlbnRoZXNlcyBhbmQgIj86IgorICAgICAgICBmID0gZ2V0dGV4dC5jMnB5KCduPT0xID8gMCA6IChuPT0yID8gMSA6IDIpJykKKyAgICAgICAgcyA9ICcnLmpvaW4oWyBzdHIoZih4KSkgZm9yIHggaW4gcmFuZ2UoMjAwKSBdKQorICAgICAgICBlcShzLCAiMjAxMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIiKQorCisgICAgZGVmIHRlc3RfbHQoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBmID0gZ2V0dGV4dC5jMnB5KCduJTEwPT0xICYmIG4lMTAwIT0xMSA/IDAgOiBuJTEwPj0yICYmIChuJTEwMDwxMCB8fCBuJTEwMD49MjApID8gMSA6IDInKQorICAgICAgICBzID0gJycuam9pbihbIHN0cihmKHgpKSBmb3IgeCBpbiByYW5nZSgyMDApIF0pCisgICAgICAgIGVxKHMsICIyMDExMTExMTExMjIyMjIyMjIyMjIwMTExMTExMTEyMDExMTExMTExMjAxMTExMTExMTIwMTExMTExMTEyMDExMTExMTExMjAxMTExMTExMTIwMTExMTExMTEyMDExMTExMTExMjAxMTExMTExMTIyMjIyMjIyMjIyMDExMTExMTExMjAxMTExMTExMTIwMTExMTExMTEyMDExMTExMTExMjAxMTExMTExMTIwMTExMTExMTEyMDExMTExMTExMjAxMTExMTExMSIpCisKKyAgICBkZWYgdGVzdF9ydShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGYgPSBnZXR0ZXh0LmMycHkoJ24lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgbiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyJykKKyAgICAgICAgcyA9ICcnLmpvaW4oWyBzdHIoZih4KSkgZm9yIHggaW4gcmFuZ2UoMjAwKSBdKQorICAgICAgICBlcShzLCAiMjAxMTEyMjIyMjIyMjIyMjIyMjIyMDExMTIyMjIyMjAxMTEyMjIyMjIwMTExMjIyMjIyMDExMTIyMjIyMjAxMTEyMjIyMjIwMTExMjIyMjIyMDExMTIyMjIyMjAxMTEyMjIyMjIwMTExMjIyMjIyMjIyMjIyMjIyMjAxMTEyMjIyMjIwMTExMjIyMjIyMDExMTIyMjIyMjAxMTEyMjIyMjIwMTExMjIyMjIyMDExMTIyMjIyMjAxMTEyMjIyMjIwMTExMjIyMjIiKQorCisgICAgZGVmIHRlc3RfcGwoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBmID0gZ2V0dGV4dC5jMnB5KCduPT0xID8gMCA6IG4lMTA+PTIgJiYgbiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyJykKKyAgICAgICAgcyA9ICcnLmpvaW4oWyBzdHIoZih4KSkgZm9yIHggaW4gcmFuZ2UoMjAwKSBdKQorICAgICAgICBlcShzLCAiMjAxMTEyMjIyMjIyMjIyMjIyMjIyMjExMTIyMjIyMjIxMTEyMjIyMjIyMTExMjIyMjIyMjExMTIyMjIyMjIxMTEyMjIyMjIyMTExMjIyMjIyMjExMTIyMjIyMjIxMTEyMjIyMjIyMTExMjIyMjIyMjIyMjIyMjIyMjIxMTEyMjIyMjIyMTExMjIyMjIyMjExMTIyMjIyMjIxMTEyMjIyMjIyMTExMjIyMjIyMjExMTIyMjIyMjIxMTEyMjIyMjIyMTExMjIyMjIiKQorCisgICAgZGVmIHRlc3Rfc2woc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBmID0gZ2V0dGV4dC5jMnB5KCduJTEwMD09MSA/IDAgOiBuJTEwMD09MiA/IDEgOiBuJTEwMD09MyB8fCBuJTEwMD09NCA/IDIgOiAzJykKKyAgICAgICAgcyA9ICcnLmpvaW4oWyBzdHIoZih4KSkgZm9yIHggaW4gcmFuZ2UoMjAwKSBdKQorICAgICAgICBlcShzLCAiMzAxMjIzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMwMTIyMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiKQorCisgICAgZGVmIHRlc3Rfc2VjdXJpdHkoc2VsZik6CisgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCisgICAgICAgICMgVGVzdCBmb3IgYSBkYW5nZXJvdXMgZXhwcmVzc2lvbgorICAgICAgICByYWlzZXMoVmFsdWVFcnJvciwgZ2V0dGV4dC5jMnB5LCAib3MuY2htb2QoJy9ldGMvcGFzc3dkJywwNzc3KSIpCisKKworY2xhc3MgVW5pY29kZVRyYW5zbGF0aW9uc1Rlc3QoR2V0dGV4dEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIEdldHRleHRCYXNlVGVzdC5zZXRVcChzZWxmKQorICAgICAgICB3aXRoIG9wZW4oVU1PRklMRSwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBzZWxmLnQgPSBnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucyhmcCkKKyAgICAgICAgc2VsZi5fID0gc2VsZi50LnVnZXR0ZXh0CisKKyAgICBkZWYgdGVzdF91bmljb2RlX21zZ2lkKHNlbGYpOgorICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKKyAgICAgICAgdW5sZXNzKGlzaW5zdGFuY2Uoc2VsZi5fKCcnKSwgdW5pY29kZSkpCisgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKHNlbGYuXyh1JycpLCB1bmljb2RlKSkKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfbXNnc3RyKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoc2VsZi5fKHUnYWJceGRlJyksIHUnXHhhNHl6JykKKworCitjbGFzcyBXZWlyZE1ldGFkYXRhVGVzdChHZXR0ZXh0QmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgR2V0dGV4dEJhc2VUZXN0LnNldFVwKHNlbGYpCisgICAgICAgIHdpdGggb3BlbihNTU9GSUxFLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnQgPSBnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucyhmcCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBzZWxmLnRlYXJEb3duKCkKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHRlc3Rfd2VpcmRfbWV0YWRhdGEoc2VsZik6CisgICAgICAgIGluZm8gPSBzZWxmLnQuaW5mbygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snbGFzdC10cmFuc2xhdG9yJ10sCisgICAgICAgICAgICdKb2huIERvZSA8amRvZUBleGFtcGxlLmNvbT5cbkphbmUgRm9vYmFyIDxqZm9vYmFyQGV4YW1wbGUuY29tPicpCisKKworY2xhc3MgRHVtbXlHTlVUcmFuc2xhdGlvbnMoZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMpOgorICAgIGRlZiBmb28oc2VsZik6CisgICAgICAgIHJldHVybiAnZm9vJworCisKK2NsYXNzIEdldHRleHRDYWNoZVRlc3RDYXNlKEdldHRleHRCYXNlVGVzdCk6CisgICAgZGVmIHRlc3RfY2FjaGUoc2VsZik6CisgICAgICAgIHNlbGYubG9jYWxlZGlyID0gb3MuY3VyZGlyCisgICAgICAgIHNlbGYubW9maWxlID0gTU9GSUxFCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZ2V0dGV4dC5fdHJhbnNsYXRpb25zKSwgMCkKKworICAgICAgICB0ID0gZ2V0dGV4dC50cmFuc2xhdGlvbignZ2V0dGV4dCcsIHNlbGYubG9jYWxlZGlyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdldHRleHQuX3RyYW5zbGF0aW9ucyksIDEpCisKKyAgICAgICAgdCA9IGdldHRleHQudHJhbnNsYXRpb24oJ2dldHRleHQnLCBzZWxmLmxvY2FsZWRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfPUR1bW15R05VVHJhbnNsYXRpb25zKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdldHRleHQuX3RyYW5zbGF0aW9ucyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5fX2NsYXNzX18sIER1bW15R05VVHJhbnNsYXRpb25zKQorCisgICAgICAgICMgQ2FsbGluZyBpdCBhZ2FpbiBkb2Vzbid0IGFkZCB0byB0aGUgY2FjaGUKKworICAgICAgICB0ID0gZ2V0dGV4dC50cmFuc2xhdGlvbignZ2V0dGV4dCcsIHNlbGYubG9jYWxlZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc189RHVtbXlHTlVUcmFuc2xhdGlvbnMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZ2V0dGV4dC5fdHJhbnNsYXRpb25zKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Ll9fY2xhc3NfXywgRHVtbXlHTlVUcmFuc2xhdGlvbnMpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKKworCisjIEZvciByZWZlcmVuY2UsIGhlcmUncyB0aGUgLnBvIGZpbGUgdXNlZCB0byBjcmVhdGVkIHRoZSBHTlVfTU9fREFUQSBhYm92ZS4KKyMKKyMgVGhlIG9yaWdpbmFsIHZlcnNpb24gd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdGhlIHNvdXJjZXMgd2l0aAorIyBweWdldHRleHQuIExhdGVyIGl0IHdhcyBtYW51YWxseSBtb2RpZmllZCB0byBhZGQgcGx1cmFsIGZvcm1zIHN1cHBvcnQuCisKKycnJworIyBEdW1teSB0cmFuc2xhdGlvbiBmb3IgdGhlIFB5dGhvbiB0ZXN0X2dldHRleHQucHkgbW9kdWxlLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgQmFycnkgV2Fyc2F3IDxiYXJyeUBweXRob24ub3JnPiwgMjAwMC4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IDIuMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDMtMDQtMTEgMTQ6MzItMDQwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSi4gRGF2aWQgSWJhbmV6IDxqLWRhdmlkQG5vb3MuZnI+XG4iCisiTGFuZ3VhZ2UtVGVhbTogWFggPHB5dGhvbi1kZXZAcHl0aG9uLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIkdlbmVyYXRlZC1CeTogcHlnZXR0ZXh0LnB5IDEuMVxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPW4hPTE7XG4iCisKKyM6IHRlc3RfZ2V0dGV4dC5weToxOSB0ZXN0X2dldHRleHQucHk6MjUgdGVzdF9nZXR0ZXh0LnB5OjMxIHRlc3RfZ2V0dGV4dC5weTozNworIzogdGVzdF9nZXR0ZXh0LnB5OjUxIHRlc3RfZ2V0dGV4dC5weTo4MCB0ZXN0X2dldHRleHQucHk6ODYgdGVzdF9nZXR0ZXh0LnB5OjkyCisjOiB0ZXN0X2dldHRleHQucHk6OTgKK21zZ2lkICJudWRnZSBudWRnZSIKK21zZ3N0ciAid2luayB3aW5rIgorCisjOiB0ZXN0X2dldHRleHQucHk6MTYgdGVzdF9nZXR0ZXh0LnB5OjIyIHRlc3RfZ2V0dGV4dC5weToyOCB0ZXN0X2dldHRleHQucHk6MzQKKyM6IHRlc3RfZ2V0dGV4dC5weTo3NyB0ZXN0X2dldHRleHQucHk6ODMgdGVzdF9nZXR0ZXh0LnB5Ojg5IHRlc3RfZ2V0dGV4dC5weTo5NQorbXNnaWQgImFsYmF0cm9zcyIKK21zZ3N0ciAiIgorCisjOiB0ZXN0X2dldHRleHQucHk6MTggdGVzdF9nZXR0ZXh0LnB5OjI0IHRlc3RfZ2V0dGV4dC5weTozMCB0ZXN0X2dldHRleHQucHk6MzYKKyM6IHRlc3RfZ2V0dGV4dC5weTo3OSB0ZXN0X2dldHRleHQucHk6ODUgdGVzdF9nZXR0ZXh0LnB5OjkxIHRlc3RfZ2V0dGV4dC5weTo5NworbXNnaWQgIlJheW1vbmQgTHV4dXJ5IFlhY2gtdCIKK21zZ3N0ciAiVGhyb2F0d29iYmxlciBNYW5ncm92ZSIKKworIzogdGVzdF9nZXR0ZXh0LnB5OjE3IHRlc3RfZ2V0dGV4dC5weToyMyB0ZXN0X2dldHRleHQucHk6MjkgdGVzdF9nZXR0ZXh0LnB5OjM1CisjOiB0ZXN0X2dldHRleHQucHk6NTYgdGVzdF9nZXR0ZXh0LnB5Ojc4IHRlc3RfZ2V0dGV4dC5weTo4NCB0ZXN0X2dldHRleHQucHk6OTAKKyM6IHRlc3RfZ2V0dGV4dC5weTo5NgorbXNnaWQgIm11bGx1c2siCittc2dzdHIgImJhY29uIgorCisjOiB0ZXN0X2dldHRleHQucHk6NDAgdGVzdF9nZXR0ZXh0LnB5OjEwMQorbXNnaWQgIiIKKyJUaGlzIG1vZHVsZSBwcm92aWRlcyBpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgbG9jYWxpemF0aW9uXG4iCisic3VwcG9ydCBmb3IgeW91ciBQeXRob24gcHJvZ3JhbXMgYnkgcHJvdmlkaW5nIGFuIGludGVyZmFjZSB0byB0aGUgR05VXG4iCisiZ2V0dGV4dCBtZXNzYWdlIGNhdGFsb2cgbGlicmFyeS4iCittc2dzdHIgIiIKKyJHdXZmIHpicWh5ciBjZWJpdnFyZiB2YWdyZWFuZ3ZiYW55dm1uZ3ZiYSBuYXEgeWJwbnl2bW5ndmJhXG4iCisiZmhjY2JlZyBzYmUgbGJoZSBDbGd1YmEgY2VidGVuemYgb2wgY2ViaXZxdmF0IG5hIHZhZ3Jlc25wciBnYiBndXIgVEFIXG4iCisidHJnZ3JrZyB6cmZmbnRyIHBuZ255YnQgeXZvZW5lbC4iCisKKyMgTWFudWFsbHkgYWRkZWQsIGFzIG5laXRoZXIgcHlnZXR0ZXh0IG5vciB4Z2V0dGV4dCBzdXBwb3J0IHBsdXJhbCBmb3JtcworIyBpbiBQeXRob24uCittc2dpZCAiVGhlcmUgaXMgJXMgZmlsZSIKK21zZ2lkX3BsdXJhbCAiVGhlcmUgYXJlICVzIGZpbGVzIgorbXNnc3RyWzBdICJIYXkgJXMgZmljaGVybyIKK21zZ3N0clsxXSAiSGF5ICVzIGZpY2hlcm9zIgorJycnCisKKyMgSGVyZSdzIHRoZSBzZWNvbmQgZXhhbXBsZSBwbyBmaWxlIGV4YW1wbGUsIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIFVNT19EQVRBCisjIGNvbnRhaW5pbmcgdXRmLTggZW5jb2RlZCBVbmljb2RlIHN0cmluZ3MKKworJycnCisjIER1bW15IHRyYW5zbGF0aW9uIGZvciB0aGUgUHl0aG9uIHRlc3RfZ2V0dGV4dC5weSBtb2R1bGUuCisjIENvcHlyaWdodCAoQykgMjAwMSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorIyBCYXJyeSBXYXJzYXcgPGJhcnJ5QHB5dGhvbi5vcmc+LCAyMDAwLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogMi4wXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwMy0wNC0xMSAxMjo0Mi0wNDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBCYXJyeSBBLiBXQXJzYXcgPGJhcnJ5QHB5dGhvbi5vcmc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogWFggPHB5dGhvbi1kZXZAcHl0aG9uLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXRcbiIKKyJHZW5lcmF0ZWQtQnk6IG1hbnVhbGx5XG4iCisKKyM6IG5vZmlsZTowCittc2dpZCAiYWJceGMzXHg5ZSIKK21zZ3N0ciAiXHhjMlx4YTR5eiIKKycnJworCisjIEhlcmUncyB0aGUgdGhpcmQgZXhhbXBsZSBwbyBmaWxlLCB1c2VkIHRvIGdlbmVyYXRlIE1NT19EQVRBCisKKycnJworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogTm8gUHJvamVjdCAwLjBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogV2VkIERlYyAxMSAwNzo0NDoxNSAyMDAyXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwMi0wOC0xNCAwMToxODo1OCswMDowMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSm9obiBEb2UgPGpkb2VAZXhhbXBsZS5jb20+XG4iCisiSmFuZSBGb29iYXIgPGpmb29iYXJAZXhhbXBsZS5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogeHggPHh4QGV4YW1wbGUuY29tPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTE1XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZVxuIgorIkdlbmVyYXRlZC1CeTogcHlnZXR0ZXh0LnB5IDEuM1xuIgorJycnCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nbC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2dsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM5MjY0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nbC5weQpAQCAtMCwwICsxLDE1NSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIiIiVmVyeSBzaW1wbGUgdGVzdCBzY3JpcHQgZm9yIHRoZSBTR0kgZ2wgbGlicmFyeSBleHRlbnNpb24gbW9kdWxlCisgICAgdGFrZW4gbW9zdGx5IGZyb20gdGhlIGRvY3VtZW50YXRpb24uCisgICAgUm9nZXIgRS4gTWFzc2UKKyIiIgoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBpbXBvcnRfbW9kdWxlCitpbXBvcnQgdGltZQorZ2wgPSBpbXBvcnRfbW9kdWxlKCdnbCcpCitHTCA9IGltcG9ydF9tb2R1bGUoJ0dMJykKKworZ2xhdHRycyA9IFsnUkdCY29sb3InLCAnUkdCY3Vyc29yJywgJ1JHQm1vZGUnLCAnUkdCcmFuZ2UnLCAnUkdCd3JpdGVtYXNrJywKKydfX2RvY19fJywgJ19fbmFtZV9fJywgJ2FkZHRvcHVwJywgJ2FsdGdldG1hdHJpeCcsICdhcmMnLCAnYXJjZicsCisnYXJjZmknLCAnYXJjZnMnLCAnYXJjaScsICdhcmNzJywgJ2F0dGFjaGN1cnNvcicsICdiYWNrYnVmZmVyJywKKydiYWNrZmFjZScsICdiYm94MicsICdiYm94MmknLCAnYmJveDJzJywgJ2JnbmNsb3NlZGxpbmUnLCAnYmdubGluZScsCisnYmducG9pbnQnLCAnYmducG9seWdvbicsICdiZ25zdXJmYWNlJywgJ2JnbnRtZXNoJywgJ2JnbnRyaW0nLAorJ2JsYW5rc2NyZWVuJywgJ2JsYW5rdGltZScsICdibGVuZGZ1bmN0aW9uJywgJ2JsaW5rJywgJ2MzZicsICdjM2knLAorJ2MzcycsICdjNGYnLCAnYzRpJywgJ2M0cycsICdjYWxsb2JqJywgJ2NoYXJzdHInLCAnY2h1bmtzaXplJywgJ2NpcmMnLAorJ2NpcmNmJywgJ2NpcmNmaScsICdjaXJjZnMnLCAnY2lyY2knLCAnY2lyY3MnLCAnY2xlYXInLAorJ2NsZWFyaGl0Y29kZScsICdjbGtvZmYnLCAnY2xrb24nLCAnY2xvc2VvYmonLCAnY21vZGUnLCAnY21vdicsCisnY21vdjInLCAnY21vdjJpJywgJ2Ntb3YycycsICdjbW92aScsICdjbW92cycsICdjb2xvcicsICdjb2xvcmYnLAorJ2NvbXBhY3RpZnknLCAnY29uY2F2ZScsICdjcGFjaycsICdjcnYnLCAnY3J2bicsICdjdXJvcmlnaW4nLAorJ2N1cnNvZmYnLCAnY3Vyc29uJywgJ2N1cnN0eXBlJywgJ2N1cnZlYmFzaXMnLCAnY3VydmVpdCcsCisnY3VydmVwcmVjaXNpb24nLCAnY3ljbGVtYXAnLCAnY3pjbGVhcicsICdkZWZiYXNpcycsICdkZWZjdXJzb3InLAorJ2RlZmxpbmVzdHlsZScsICdkZWxvYmonLCAnZGVsdGFnJywgJ2RlcHRoY3VlJywgJ2RldnBvcnQnLCAnZGdsY2xvc2UnLAorJ2RnbG9wZW4nLCAnZGl0aGVyJywgJ2RvcHVwJywgJ2RvdWJsZWJ1ZmZlcicsICdkcmF3JywgJ2RyYXcyJywKKydkcmF3MmknLCAnZHJhdzJzJywgJ2RyYXdpJywgJ2RyYXdtb2RlJywgJ2RyYXdzJywgJ2VkaXRvYmonLAorJ2VuZGNsb3NlZGxpbmUnLCAnZW5kZnVsbHNjcm4nLCAnZW5kbGluZScsICdlbmRwaWNrJywgJ2VuZHBvaW50JywKKydlbmRwb2x5Z29uJywgJ2VuZHB1cG1vZGUnLCAnZW5kc2VsZWN0JywgJ2VuZHN1cmZhY2UnLCAnZW5kdG1lc2gnLAorJ2VuZHRyaW0nLCAnZmluaXNoJywgJ2ZvbnQnLCAnZm9yZWdyb3VuZCcsICdmcmVlcHVwJywgJ2Zyb250YnVmZmVyJywKKydmdWRnZScsICdmdWxsc2NybicsICdnUkdCY29sb3InLCAnZ1JHQm1hc2snLCAnZ2FtbWFyYW1wJywgJ2diZWdpbicsCisnZ2NvbmZpZycsICdnZW5vYmonLCAnZ2VudGFnJywgJ2dldGJhY2tmYWNlJywgJ2dldGJ1ZmZlcicsCisnZ2V0YnV0dG9uJywgJ2dldGNtbW9kZScsICdnZXRjb2xvcicsICdnZXRjcG9zJywgJ2dldGN1cnNvcicsCisnZ2V0ZGNtJywgJ2dldGRlcHRoJywgJ2dldGRlc2NlbmRlcicsICdnZXRkaXNwbGF5bW9kZScsICdnZXRkcmF3bW9kZScsCisnZ2V0Zm9udCcsICdnZXRnZGVzYycsICdnZXRncG9zJywgJ2dldGhlaWdodCcsICdnZXRoaXRjb2RlJywKKydnZXRsc2JhY2t1cCcsICdnZXRsc3JlcGVhdCcsICdnZXRsc3R5bGUnLCAnZ2V0bHdpZHRoJywgJ2dldG1hcCcsCisnZ2V0bWF0cml4JywgJ2dldG1jb2xvcicsICdnZXRtbW9kZScsICdnZXRtb25pdG9yJywKKydnZXRudXJic3Byb3BlcnR5JywgJ2dldG9wZW5vYmonLCAnZ2V0b3JpZ2luJywgJ2dldG90aGVybW9uaXRvcicsCisnZ2V0cGF0dGVybicsICdnZXRwbGFuZXMnLCAnZ2V0cG9ydCcsICdnZXRyZXNldGxzJywgJ2dldHNjcm1hc2snLAorJ2dldHNoYWRlJywgJ2dldHNpemUnLCAnZ2V0c20nLCAnZ2V0dHAnLCAnZ2V0dmFsdWF0b3InLCAnZ2V0dmlkZW8nLAorJ2dldHZpZXdwb3J0JywgJ2dldHdyaXRlbWFzaycsICdnZXR6YnVmZmVyJywgJ2dld3JpdGUnLCAnZ2ZsdXNoJywKKydnaW5pdCcsICdnbGNvbXBhdCcsICdncmVzZXQnLCAnZ3NlbGVjdCcsICdnc3luYycsICdndmVyc2lvbicsCisnaWNvbnNpemUnLCAnaWNvbnRpdGxlJywgJ2ltYWtlYmFja2dyb3VuZCcsICdpbml0bmFtZXMnLCAnaXNtZXgnLAorJ2lzb2JqJywgJ2lzcXVldWVkJywgJ2lzdGFnJywgJ2tlZXBhc3BlY3QnLCAnbFJHQnJhbmdlJywgJ2xhbXBvZmYnLAorJ2xhbXBvbicsICdsaW5lc21vb3RoJywgJ2xpbmV3aWR0aCcsICdsbWJpbmQnLCAnbG1jb2xvcicsICdsbWRlZicsCisnbG9hZG1hdHJpeCcsICdsb2FkbmFtZScsICdsb2dpY29wJywgJ2xvb2thdCcsICdscmVjdHJlYWQnLAorJ2xyZWN0d3JpdGUnLCAnbHNiYWNrdXAnLCAnbHNldGRlcHRoJywgJ2xzaGFkZXJhbmdlJywgJ2xzcmVwZWF0JywKKydtYWtlb2JqJywgJ21ha2V0YWcnLCAnbWFwY29sb3InLCAnbWFwdycsICdtYXB3MicsICdtYXhzaXplJywKKydtaW5zaXplJywgJ21tb2RlJywgJ21vdmUnLCAnbW92ZTInLCAnbW92ZTJpJywgJ21vdmUycycsICdtb3ZlaScsCisnbW92ZXMnLCAnbXVsdGltYXAnLCAnbXVsdG1hdHJpeCcsICduM2YnLCAnbmV3cHVwJywgJ25ld3RhZycsCisnbm9ib3JkZXInLCAnbm9pc2UnLCAnbm9wb3J0JywgJ25vcm1hbCcsICdudXJic2N1cnZlJywgJ251cmJzc3VyZmFjZScsCisnbnZhcnJheScsICdvYmpkZWxldGUnLCAnb2JqaW5zZXJ0JywgJ29ianJlcGxhY2UnLCAnb25lbWFwJywgJ29ydGhvJywKKydvcnRobzInLCAnb3ZlcmxheScsICdwYWNrcmVjdCcsICdwYWdlY29sb3InLCAncGFnZXdyaXRlbWFzaycsCisncGFzc3Rocm91Z2gnLCAncGF0Y2gnLCAncGF0Y2hiYXNpcycsICdwYXRjaGN1cnZlcycsICdwYXRjaHByZWNpc2lvbicsCisncGNsb3MnLCAncGRyJywgJ3BkcjInLCAncGRyMmknLCAncGRyMnMnLCAncGRyaScsICdwZHJzJywKKydwZXJzcGVjdGl2ZScsICdwaWNrJywgJ3BpY2tzaXplJywgJ3BpeG1vZGUnLCAncG12JywgJ3BtdjInLCAncG12MmknLAorJ3BtdjJzJywgJ3BtdmknLCAncG12cycsICdwbnQnLCAncG50MicsICdwbnQyaScsICdwbnQycycsICdwbnRpJywKKydwbnRzJywgJ3BudHNtb290aCcsICdwb2xhcnZpZXcnLCAncG9sZicsICdwb2xmMicsICdwb2xmMmknLCAncG9sZjJzJywKKydwb2xmaScsICdwb2xmcycsICdwb2x5JywgJ3BvbHkyJywgJ3BvbHkyaScsICdwb2x5MnMnLCAncG9seWknLAorJ3BvbHlzJywgJ3BvcGF0dHJpYnV0ZXMnLCAncG9wbWF0cml4JywgJ3BvcG5hbWUnLCAncG9wdmlld3BvcnQnLAorJ3ByZWZwb3NpdGlvbicsICdwcmVmc2l6ZScsICdwdXBtb2RlJywgJ3B1c2hhdHRyaWJ1dGVzJywgJ3B1c2htYXRyaXgnLAorJ3B1c2huYW1lJywgJ3B1c2h2aWV3cG9ydCcsICdwd2xjdXJ2ZScsICdxZGV2aWNlJywgJ3FlbnRlcicsICdxZ2V0ZmQnLAorJ3FyZWFkJywgJ3FyZXNldCcsICdxdGVzdCcsICdyY3J2JywgJ3JjcnZuJywgJ3JkcicsICdyZHIyJywgJ3JkcjJpJywKKydyZHIycycsICdyZHJpJywgJ3JkcnMnLCAncmVhZGRpc3BsYXknLCAncmVhZHNvdXJjZScsICdyZWN0JywKKydyZWN0Y29weScsICdyZWN0ZicsICdyZWN0ZmknLCAncmVjdGZzJywgJ3JlY3RpJywgJ3JlY3RzJywgJ3JlY3R6b29tJywKKydyZXNldGxzJywgJ3Jlc2hhcGV2aWV3cG9ydCcsICdyaW5nYmVsbCcsICdybXYnLCAncm12MicsICdybXYyaScsCisncm12MnMnLCAncm12aScsICdybXZzJywgJ3JvdCcsICdyb3RhdGUnLCAncnBhdGNoJywgJ3JwZHInLCAncnBkcjInLAorJ3JwZHIyaScsICdycGRyMnMnLCAncnBkcmknLCAncnBkcnMnLCAncnBtdicsICdycG12MicsICdycG12MmknLAorJ3JwbXYycycsICdycG12aScsICdycG12cycsICdzYm94JywgJ3Nib3hmJywgJ3Nib3hmaScsICdzYm94ZnMnLAorJ3Nib3hpJywgJ3Nib3hzJywgJ3NjYWxlJywgJ3NjcmVlbnNwYWNlJywgJ3Njcm1hc2snLCAnc2V0YmVsbCcsCisnc2V0Y3Vyc29yJywgJ3NldGRlcHRoJywgJ3NldGxpbmVzdHlsZScsICdzZXRtYXAnLCAnc2V0bW9uaXRvcicsCisnc2V0bnVyYnNwcm9wZXJ0eScsICdzZXRwYXR0ZXJuJywgJ3NldHB1cCcsICdzZXRzaGFkZScsICdzZXR2YWx1YXRvcicsCisnc2V0dmlkZW8nLCAnc2hhZGVtb2RlbCcsICdzaGFkZXJhbmdlJywgJ3NpbmdsZWJ1ZmZlcicsICdzbW9vdGhsaW5lJywKKydzcGNsb3MnLCAnc3BsZicsICdzcGxmMicsICdzcGxmMmknLCAnc3BsZjJzJywgJ3NwbGZpJywgJ3NwbGZzJywKKydzdGVwdW5pdCcsICdzdHJ3aWR0aCcsICdzdWJwaXhlbCcsICdzd2FwYnVmZmVycycsICdzd2FwaW50ZXJ2YWwnLAorJ3N3YXB0bWVzaCcsICdzd2lub3BlbicsICd0ZXh0Y29sb3InLCAndGV4dGluaXQnLCAndGV4dHBvcnQnLAorJ3RleHR3cml0ZW1hc2snLCAndGllJywgJ3Rwb2ZmJywgJ3Rwb24nLCAndHJhbnNsYXRlJywgJ3VuZGVybGF5JywKKyd1bnBhY2tyZWN0JywgJ3VucWRldmljZScsICd2MmQnLCAndjJmJywgJ3YyaScsICd2MnMnLCAndjNkJywgJ3YzZicsCisndjNpJywgJ3YzcycsICd2NGQnLCAndjRmJywgJ3Y0aScsICd2NHMnLCAndmFycmF5JywgJ3ZpZGVvY21kJywKKyd2aWV3cG9ydCcsICd2bmFycmF5JywgJ3dpbmF0dGFjaCcsICd3aW5jbG9zZScsICd3aW5jb25zdHJhaW50cycsCisnd2luZGVwdGgnLCAnd2luZG93JywgJ3dpbmdldCcsICd3aW5tb3ZlJywgJ3dpbm9wZW4nLCAnd2lucG9wJywKKyd3aW5wb3NpdGlvbicsICd3aW5wdXNoJywgJ3dpbnNldCcsICd3aW50aXRsZScsICd3bXBhY2snLCAnd3JpdGVtYXNrJywKKyd3cml0ZXBpeGVscycsICd4ZnB0JywgJ3hmcHQyJywgJ3hmcHQyaScsICd4ZnB0MnMnLCAneGZwdDQnLCAneGZwdDRpJywKKyd4ZnB0NHMnLCAneGZwdGknLCAneGZwdHMnLCAnemJ1ZmZlcicsICd6Y2xlYXInLCAnemRyYXcnLCAnemZ1bmN0aW9uJywKKyd6c291cmNlJywgJ3p3cml0ZW1hc2snXQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgIyBpbnN1cmUgdGhhdCB3ZSBhdCBsZWFzdCBoYXZlIGFuIFggZGlzcGxheSBiZWZvcmUgY29udGludWluZy4KKyAgICBpbXBvcnQgb3MKKyAgICB0cnk6CisgICAgICAgIGRpc3BsYXkgPSBvcy5lbnZpcm9uWydESVNQTEFZJ10KKyAgICBleGNlcHQ6CisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAiTm8gJERJU1BMQVkgLS0gc2tpcHBpbmcgZ2wgdGVzdCIKKworICAgICMgdG91Y2ggYWxsIHRoZSBhdHRyaWJ1dGVzIG9mIGdsIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnVG91Y2hpbmcgZ2wgbW9kdWxlIGF0dHJpYnV0ZXMuLi4nCisgICAgZm9yIGF0dHIgaW4gZ2xhdHRyczoKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICd0b3VjaGluZzogJywgYXR0cgorICAgICAgICBnZXRhdHRyKGdsLCBhdHRyKQorCisgICAgIyBjcmVhdGUgYSBzbWFsbCAnQ3Jpc3Njcm9zcycgd2luZG93CisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ0NyZWF0aW5nIGEgc21hbGwgIkNyaXNzQ3Jvc3MiIHdpbmRvdy4uLicKKyAgICAgICAgcHJpbnQgJ2ZvcmVncm91bmQnCisgICAgZ2wuZm9yZWdyb3VuZCgpCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ3ByZWZwb3NpdGlvbicKKyAgICBnbC5wcmVmcG9zaXRpb24oNTAwLCA5MDAsIDUwMCwgOTAwKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICd3aW5vcGVuICJDcmlzc0Nyb3NzIicKKyAgICB3ID0gZ2wud2lub3BlbignQ3Jpc3NDcm9zcycpCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ2NsZWFyJworICAgIGdsLmNsZWFyKCkKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnb3J0aG8yJworICAgIGdsLm9ydGhvMigwLjAsIDQwMC4wLCAwLjAsIDQwMC4wKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdjb2xvciBXSElURScKKyAgICBnbC5jb2xvcihHTC5XSElURSkKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnY29sb3IgUkVEJworICAgIGdsLmNvbG9yKEdMLlJFRCkKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnYmdubGluZScKKyAgICBnbC5iZ25saW5lKCkKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAndjJmJworICAgIGdsLnYyZigwLjAsIDAuMCkKKyAgICBnbC52MmYoNDAwLjAsIDQwMC4wKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdlbmRsaW5lJworICAgIGdsLmVuZGxpbmUoKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdiZ25saW5lJworICAgIGdsLmJnbmxpbmUoKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICd2MmknCisgICAgZ2wudjJpKDQwMCwgMCkKKyAgICBnbC52MmkoMCwgNDAwKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdlbmRsaW5lJworICAgIGdsLmVuZGxpbmUoKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdEaXNwbGF5aW5nIHdpbmRvdyBmb3IgMiBzZWNvbmRzLi4uJworICAgIHRpbWUuc2xlZXAoMikKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnd2luY2xvc2UnCisgICAgZ2wud2luY2xvc2UodykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nbG9iLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZ2xvYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzYwZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZ2xvYi5weQpAQCAtMCwwICsxLDE4MSBAQAoraW1wb3J0IGdsb2IKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOCisKKworZGVmIGZzZGVjb2RlKHMpOgorICAgIHJldHVybiB1bmljb2RlKHMsIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKKworCitjbGFzcyBHbG9iVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIG5vcm0oc2VsZiwgKnBhcnRzKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgKnBhcnRzKSkKKworICAgIGRlZiBta3RlbXAoc2VsZiwgKnBhcnRzKToKKyAgICAgICAgZmlsZW5hbWUgPSBzZWxmLm5vcm0oKnBhcnRzKQorICAgICAgICBiYXNlLCBmaWxlID0gb3MucGF0aC5zcGxpdChmaWxlbmFtZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGJhc2UpOgorICAgICAgICAgICAgb3MubWFrZWRpcnMoYmFzZSkKKyAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICd3JykKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudGVtcGRpciA9IFRFU1RGTiArICJfZGlyIgorICAgICAgICBzZWxmLm1rdGVtcCgnYScsICdEJykKKyAgICAgICAgc2VsZi5ta3RlbXAoJ2FhYicsICdGJykKKyAgICAgICAgc2VsZi5ta3RlbXAoJy5hYScsICdHJykKKyAgICAgICAgc2VsZi5ta3RlbXAoJy5iYicsICdIJykKKyAgICAgICAgc2VsZi5ta3RlbXAoJ2FhYScsICd6enpGJykKKyAgICAgICAgc2VsZi5ta3RlbXAoJ1paWicpCisgICAgICAgIHNlbGYubWt0ZW1wKCdhJywgJ2JjZCcsICdFRicpCisgICAgICAgIHNlbGYubWt0ZW1wKCdhJywgJ2JjZCcsICdlZmcnLCAnaGEnKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAnc3ltbGluaycpOgorICAgICAgICAgICAgb3Muc3ltbGluayhzZWxmLm5vcm0oJ2Jyb2tlbicpLCBzZWxmLm5vcm0oJ3N5bTEnKSkKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoJ2Jyb2tlbicsIHNlbGYubm9ybSgnc3ltMicpKQorICAgICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmpvaW4oJ2EnLCAnYmNkJyksIHNlbGYubm9ybSgnc3ltMycpKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudGVtcGRpcikKKworICAgIGRlZiBnbG9iKHNlbGYsICpwYXJ0cyk6CisgICAgICAgIGlmIGxlbihwYXJ0cykgPT0gMToKKyAgICAgICAgICAgIHBhdHRlcm4gPSBwYXJ0c1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGF0dGVybiA9IG9zLnBhdGguam9pbigqcGFydHMpCisgICAgICAgIHAgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCBwYXR0ZXJuKQorICAgICAgICByZXMgPSBnbG9iLmdsb2IocCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGdsb2IuaWdsb2IocCkpLCByZXMpCisgICAgICAgIHVyZXMgPSBbZnNkZWNvZGUoeCkgZm9yIHggaW4gcmVzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2IuZ2xvYihmc2RlY29kZShwKSksIHVyZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChnbG9iLmlnbG9iKGZzZGVjb2RlKHApKSksIHVyZXMpCisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiBhc3NlcnRTZXF1ZW5jZXNFcXVhbF9ub29yZGVyKHNlbGYsIGwxLCBsMik6CisgICAgICAgIGwxID0gbGlzdChsMSkKKyAgICAgICAgbDIgPSBsaXN0KGwyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChsMSksIHNldChsMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGwxKSwgc29ydGVkKGwyKSkKKworICAgIGRlZiB0ZXN0X2dsb2JfbGl0ZXJhbChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydFNlcXVlbmNlc0VxdWFsX25vb3JkZXIKKyAgICAgICAgZXEoc2VsZi5nbG9iKCdhJyksIFtzZWxmLm5vcm0oJ2EnKV0pCisgICAgICAgIGVxKHNlbGYuZ2xvYignYScsICdEJyksIFtzZWxmLm5vcm0oJ2EnLCAnRCcpXSkKKyAgICAgICAgZXEoc2VsZi5nbG9iKCdhYWInKSwgW3NlbGYubm9ybSgnYWFiJyldKQorICAgICAgICBlcShzZWxmLmdsb2IoJ3p5bXVyZ3knKSwgW10pCisKKyAgICAgICAgcmVzID0gZ2xvYi5nbG9iKCcqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7dHlwZShyKSBmb3IgciBpbiByZXN9LCB7c3RyfSkKKyAgICAgICAgcmVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihvcy5jdXJkaXIsICcqJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe3R5cGUocikgZm9yIHIgaW4gcmVzfSwge3N0cn0pCisKKyAgICAgICAgIyB0ZXN0IHJldHVybiB0eXBlcyBhcmUgdW5pY29kZSwgYnV0IG9ubHkgaWYgb3MubGlzdGRpcgorICAgICAgICAjIHJldHVybnMgdW5pY29kZSBmaWxlbmFtZXMKKyAgICAgICAgdG1wID0gb3MubGlzdGRpcihmc2RlY29kZShvcy5jdXJkaXIpKQorICAgICAgICBpZiB7dHlwZSh4KSBmb3IgeCBpbiB0bXB9ID09IHt1bmljb2RlfToKKyAgICAgICAgICAgIHJlcyA9IGdsb2IuZ2xvYih1JyonKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7dHlwZShyKSBmb3IgciBpbiByZXN9LCB7dW5pY29kZX0pCisgICAgICAgICAgICByZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKGZzZGVjb2RlKG9zLmN1cmRpciksIHUnKicpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7dHlwZShyKSBmb3IgciBpbiByZXN9LCB7dW5pY29kZX0pCisKKyAgICBkZWYgdGVzdF9nbG9iX29uZV9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRTZXF1ZW5jZXNFcXVhbF9ub29yZGVyCisgICAgICAgIGVxKHNlbGYuZ2xvYignYSonKSwgbWFwKHNlbGYubm9ybSwgWydhJywgJ2FhYicsICdhYWEnXSkpCisgICAgICAgIGVxKHNlbGYuZ2xvYignKmEnKSwgbWFwKHNlbGYubm9ybSwgWydhJywgJ2FhYSddKSkKKyAgICAgICAgZXEoc2VsZi5nbG9iKCcuKicpLCBtYXAoc2VsZi5ub3JtLCBbJy5hYScsICcuYmInXSkpCisgICAgICAgIGVxKHNlbGYuZ2xvYignP2FhJyksIG1hcChzZWxmLm5vcm0sIFsnYWFhJ10pKQorICAgICAgICBlcShzZWxmLmdsb2IoJ2FhPycpLCBtYXAoc2VsZi5ub3JtLCBbJ2FhYScsICdhYWInXSkpCisgICAgICAgIGVxKHNlbGYuZ2xvYignYWFbYWJdJyksIG1hcChzZWxmLm5vcm0sIFsnYWFhJywgJ2FhYiddKSkKKyAgICAgICAgZXEoc2VsZi5nbG9iKCcqcScpLCBbXSkKKworICAgIGRlZiB0ZXN0X2dsb2JfbmVzdGVkX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydFNlcXVlbmNlc0VxdWFsX25vb3JkZXIKKyAgICAgICAgaWYgb3MucGF0aC5ub3JtY2FzZSgiYWJDRCIpID09ICJhYkNEIjoKKyAgICAgICAgICAgICMgY2FzZS1zZW5zaXRpdmUgZmlsZXN5c3RlbQorICAgICAgICAgICAgZXEoc2VsZi5nbG9iKCdhJywgJ2JjZCcsICdFKicpLCBbc2VsZi5ub3JtKCdhJywgJ2JjZCcsICdFRicpXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtCisgICAgICAgICAgICBlcShzZWxmLmdsb2IoJ2EnLCAnYmNkJywgJ0UqJyksIFtzZWxmLm5vcm0oJ2EnLCAnYmNkJywgJ0VGJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5vcm0oJ2EnLCAnYmNkJywgJ2VmZycpXSkKKyAgICAgICAgZXEoc2VsZi5nbG9iKCdhJywgJ2JjZCcsICcqZycpLCBbc2VsZi5ub3JtKCdhJywgJ2JjZCcsICdlZmcnKV0pCisKKyAgICBkZWYgdGVzdF9nbG9iX2RpcmVjdG9yeV9uYW1lcyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydFNlcXVlbmNlc0VxdWFsX25vb3JkZXIKKyAgICAgICAgZXEoc2VsZi5nbG9iKCcqJywgJ0QnKSwgW3NlbGYubm9ybSgnYScsICdEJyldKQorICAgICAgICBlcShzZWxmLmdsb2IoJyonLCAnKmEnKSwgW10pCisgICAgICAgIGVxKHNlbGYuZ2xvYignYScsICcqJywgJyonLCAnKmEnKSwKKyAgICAgICAgICAgW3NlbGYubm9ybSgnYScsICdiY2QnLCAnZWZnJywgJ2hhJyldKQorICAgICAgICBlcShzZWxmLmdsb2IoJz9hPycsICcqRicpLCBbc2VsZi5ub3JtKCdhYWEnLCAnenp6RicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ub3JtKCdhYWInLCAnRicpXSkKKworICAgIGRlZiB0ZXN0X2dsb2JfZGlyZWN0b3J5X3dpdGhfdHJhaWxpbmdfc2xhc2goc2VsZik6CisgICAgICAgICMgUGF0dGVybnMgZW5kaW5nIHdpdGggYSBzbGFzaCBzaG91bGRuJ3QgbWF0Y2ggbm9uLWRpcnMKKyAgICAgICAgcmVzID0gZ2xvYi5nbG9iKHNlbGYubm9ybSgnWipaJykgKyBvcy5zZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbXSkKKyAgICAgICAgcmVzID0gZ2xvYi5nbG9iKHNlbGYubm9ybSgnWlpaJykgKyBvcy5zZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbXSkKKyAgICAgICAgIyBXaGVuIHRoZXJlIGlzIGEgd2lsZGNhcmQgcGF0dGVybiB3aGljaCBlbmRzIHdpdGggb3Muc2VwLCBnbG9iKCkKKyAgICAgICAgIyBkb2Vzbid0IGJsb3cgdXAuCisgICAgICAgIHJlcyA9IGdsb2IuZ2xvYihzZWxmLm5vcm0oJ2FhKicpICsgb3Muc2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAyKQorICAgICAgICAjIGVpdGhlciBvZiB0aGVzZSByZXN1bHRzIGlzIHJlYXNvbmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZXQocmVzKSwgWworICAgICAgICAgICAgICAgICAgICAgIHtzZWxmLm5vcm0oJ2FhYScpLCBzZWxmLm5vcm0oJ2FhYicpfSwKKyAgICAgICAgICAgICAgICAgICAgICB7c2VsZi5ub3JtKCdhYWEnKSArIG9zLnNlcCwgc2VsZi5ub3JtKCdhYWInKSArIG9zLnNlcH0sCisgICAgICAgICAgICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2dsb2JfdW5pY29kZV9kaXJlY3Rvcnlfd2l0aF90cmFpbGluZ19zbGFzaChzZWxmKToKKyAgICAgICAgIyBTYW1lIGFzIHRlc3RfZ2xvYl9kaXJlY3Rvcnlfd2l0aF90cmFpbGluZ19zbGFzaCwgYnV0IHdpdGggYW4KKyAgICAgICAgIyB1bmljb2RlIGFyZ3VtZW50LgorICAgICAgICByZXMgPSBnbG9iLmdsb2IoZnNkZWNvZGUoc2VsZi5ub3JtKCdaKlonKSArIG9zLnNlcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbXSkKKyAgICAgICAgcmVzID0gZ2xvYi5nbG9iKGZzZGVjb2RlKHNlbGYubm9ybSgnWlpaJykgKyBvcy5zZXApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgW10pCisgICAgICAgIHJlcyA9IGdsb2IuZ2xvYihmc2RlY29kZShzZWxmLm5vcm0oJ2FhKicpICsgb3Muc2VwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMikKKyAgICAgICAgIyBlaXRoZXIgb2YgdGhlc2UgcmVzdWx0cyBpcyByZWFzb25hYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2V0KHJlcyksIFsKKyAgICAgICAgICAgICAgICAgICAgICB7ZnNkZWNvZGUoc2VsZi5ub3JtKCdhYWEnKSksIGZzZGVjb2RlKHNlbGYubm9ybSgnYWFiJykpfSwKKyAgICAgICAgICAgICAgICAgICAgICB7ZnNkZWNvZGUoc2VsZi5ub3JtKCdhYWEnKSArIG9zLnNlcCksCisgICAgICAgICAgICAgICAgICAgICAgIGZzZGVjb2RlKHNlbGYubm9ybSgnYWFiJykgKyBvcy5zZXApfSwKKyAgICAgICAgICAgICAgICAgICAgICBdKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3N5bWxpbmsnKSwgIlJlcXVpcmVzIHN5bWxpbmsgc3VwcG9ydCIpCisgICAgZGVmIHRlc3RfZ2xvYl9zeW1saW5rcyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydFNlcXVlbmNlc0VxdWFsX25vb3JkZXIKKyAgICAgICAgZXEoc2VsZi5nbG9iKCdzeW0zJyksIFtzZWxmLm5vcm0oJ3N5bTMnKV0pCisgICAgICAgIGVxKHNlbGYuZ2xvYignc3ltMycsICcqJyksIFtzZWxmLm5vcm0oJ3N5bTMnLCAnRUYnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubm9ybSgnc3ltMycsICdlZmcnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5nbG9iKCdzeW0zJyArIG9zLnNlcCksCisgICAgICAgICAgICAgICAgICAgICAgW1tzZWxmLm5vcm0oJ3N5bTMnKV0sIFtzZWxmLm5vcm0oJ3N5bTMnKSArIG9zLnNlcF1dKQorICAgICAgICBlcShzZWxmLmdsb2IoJyonLCAnKkYnKSwKKyAgICAgICAgICAgW3NlbGYubm9ybSgnYWFhJywgJ3p6ekYnKSwgc2VsZi5ub3JtKCdhYWInLCAnRicpLAorICAgICAgICAgICAgc2VsZi5ub3JtKCdzeW0zJywgJ0VGJyldKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3N5bWxpbmsnKSwgIlJlcXVpcmVzIHN5bWxpbmsgc3VwcG9ydCIpCisgICAgZGVmIHRlc3RfZ2xvYl9icm9rZW5fc3ltbGlua3Moc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRTZXF1ZW5jZXNFcXVhbF9ub29yZGVyCisgICAgICAgIGVxKHNlbGYuZ2xvYignc3ltKicpLCBbc2VsZi5ub3JtKCdzeW0xJyksIHNlbGYubm9ybSgnc3ltMicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubm9ybSgnc3ltMycpXSkKKyAgICAgICAgZXEoc2VsZi5nbG9iKCdzeW0xJyksIFtzZWxmLm5vcm0oJ3N5bTEnKV0pCisgICAgICAgIGVxKHNlbGYuZ2xvYignc3ltMicpLCBbc2VsZi5ub3JtKCdzeW0yJyldKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0IikKKyAgICBkZWYgdGVzdF9nbG9iX21hZ2ljX2luX2RyaXZlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0U2VxdWVuY2VzRXF1YWxfbm9vcmRlcgorICAgICAgICBlcShnbG9iLmdsb2IoJyo6JyksIFtdKQorICAgICAgICBlcShnbG9iLmdsb2IodScqOicpLCBbXSkKKyAgICAgICAgZXEoZ2xvYi5nbG9iKCc/OicpLCBbXSkKKyAgICAgICAgZXEoZ2xvYi5nbG9iKHUnPzonKSwgW10pCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChHbG9iVGVzdHMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZ2xvYmFsLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZ2xvYmFsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiY2IxOTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nbG9iYWwucHkKQEAgLTAsMCArMSw1MiBAQAorIiIiVmVyaWZ5IHRoYXQgd2FybmluZ3MgYXJlIGlzc3VlZCBmb3IgZ2xvYmFsIHN0YXRlbWVudHMgZm9sbG93aW5nIHVzZS4iIiIKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjaGVja19zeW50YXhfZXJyb3IKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCisKKworY2xhc3MgR2xvYmFsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3QxKHNlbGYpOgorICAgICAgICBwcm9nX3RleHRfMSA9ICIiIlwKK2RlZiB3cm9uZzEoKToKKyAgICBhID0gMQorICAgIGIgPSAyCisgICAgZ2xvYmFsIGEKKyAgICBnbG9iYWwgYgorIiIiCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCBwcm9nX3RleHRfMSkKKworICAgIGRlZiB0ZXN0MihzZWxmKToKKyAgICAgICAgcHJvZ190ZXh0XzIgPSAiIiJcCitkZWYgd3JvbmcyKCk6CisgICAgcHJpbnQgeAorICAgIGdsb2JhbCB4CisiIiIKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsIHByb2dfdGV4dF8yKQorCisgICAgZGVmIHRlc3QzKHNlbGYpOgorICAgICAgICBwcm9nX3RleHRfMyA9ICIiIlwKK2RlZiB3cm9uZzMoKToKKyAgICBwcmludCB4CisgICAgeCA9IDIKKyAgICBnbG9iYWwgeAorIiIiCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCBwcm9nX3RleHRfMykKKworICAgIGRlZiB0ZXN0NChzZWxmKToKKyAgICAgICAgcHJvZ190ZXh0XzQgPSAiIiJcCitnbG9iYWwgeAoreCA9IDIKKyIiIgorICAgICAgICAjIHRoaXMgc2hvdWxkIHdvcmsKKyAgICAgICAgY29tcGlsZShwcm9nX3RleHRfNCwgIjx0ZXN0IHN0cmluZz4iLCAiZXhlYyIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgbW9kdWxlPSI8dGVzdCBzdHJpbmc+IikKKyAgICAgICAgcnVuX3VuaXR0ZXN0KEdsb2JhbFRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9ncmFtbWFyLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZ3JhbW1hci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmNjMDg0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZ3JhbW1hci5weQpAQCAtMCwwICsxLDEwMjEgQEAKKyMgUHl0aG9uIHRlc3Qgc2V0IC0tIHBhcnQgMSwgZ3JhbW1hci4KKyMgVGhpcyBqdXN0IHRlc3RzIHdoZXRoZXIgdGhlIHBhcnNlciBhY2NlcHRzIHRoZW0gYWxsLgorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3N5bnRheF9lcnJvciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfcHkza193YXJuaW5ncworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCisjIHRlc3RpbmcgaW1wb3J0ICoKK2Zyb20gc3lzIGltcG9ydCAqCisKKworY2xhc3MgVG9rZW5UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdEJhY2tzbGFzaChzZWxmKToKKyAgICAgICAgIyBCYWNrc2xhc2ggbWVhbnMgbGluZSBjb250aW51YXRpb246CisgICAgICAgIHggPSAxIFwKKyAgICAgICAgKyAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgMiwgJ2JhY2tzbGFzaCBmb3IgbGluZSBjb250aW51YXRpb24nKQorCisgICAgICAgICMgQmFja3NsYXNoIGRvZXMgbm90IG1lYW5zIGNvbnRpbnVhdGlvbiBpbiBjb21tZW50cyA6XAorICAgICAgICB4ID0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDAsICdiYWNrc2xhc2ggZW5kaW5nIGNvbW1lbnQnKQorCisgICAgZGVmIHRlc3RQbGFpbkludGVnZXJzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDB4ZmYsIDI1NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwMzc3LCAyNTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjE0NzQ4MzY0NywgMDE3Nzc3Nzc3Nzc3KQorICAgICAgICAjICIweCIgaXMgbm90IGEgdmFsaWQgbGl0ZXJhbAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgIjB4IikKKyAgICAgICAgZnJvbSBzeXMgaW1wb3J0IG1heGludAorICAgICAgICBpZiBtYXhpbnQgPT0gMjE0NzQ4MzY0NzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTIxNDc0ODM2NDctMSwgLTAyMDAwMDAwMDAwMCkKKyAgICAgICAgICAgICMgWFhYIC0yMTQ3NDgzNjQ4CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMDM3Nzc3Nzc3Nzc3ID4gMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgweGZmZmZmZmZmID4gMCkKKyAgICAgICAgICAgIGZvciBzIGluICcyMTQ3NDgzNjQ4JywgJzA0MDAwMDAwMDAwMCcsICcweDEwMDAwMDAwMCc6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB4ID0gZXZhbChzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk92ZXJmbG93RXJyb3Igb24gaHVnZSBpbnRlZ2VyIGxpdGVyYWwgJXIiICUgcykKKyAgICAgICAgZWxpZiBtYXhpbnQgPT0gOTIyMzM3MjAzNjg1NDc3NTgwNzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTkyMjMzNzIwMzY4NTQ3NzU4MDctMSwgLTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAxNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3ID4gMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgweGZmZmZmZmZmZmZmZmZmZmYgPiAwKQorICAgICAgICAgICAgZm9yIHMgaW4gJzkyMjMzNzIwMzY4NTQ3NzU4MDgnLCAnMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLCBcCisgICAgICAgICAgICAgICAgICAgICAnMHgxMDAwMDAwMDAwMDAwMDAwMCc6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB4ID0gZXZhbChzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk92ZXJmbG93RXJyb3Igb24gaHVnZSBpbnRlZ2VyIGxpdGVyYWwgJXIiICUgcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnV2VpcmQgbWF4aW50IHZhbHVlICVyJyAlIG1heGludCkKKworICAgIGRlZiB0ZXN0TG9uZ0ludGVnZXJzKHNlbGYpOgorICAgICAgICB4ID0gMEwKKyAgICAgICAgeCA9IDBsCisgICAgICAgIHggPSAweGZmZmZmZmZmZmZmZmZmZmZMCisgICAgICAgIHggPSAweGZmZmZmZmZmZmZmZmZmZmZsCisgICAgICAgIHggPSAwNzc3Nzc3Nzc3Nzc3Nzc3NzdMCisgICAgICAgIHggPSAwNzc3Nzc3Nzc3Nzc3Nzc3NzdsCisgICAgICAgIHggPSAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTBMCisgICAgICAgIHggPSAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTBsCisKKyAgICBkZWYgdGVzdEZsb2F0cyhzZWxmKToKKyAgICAgICAgeCA9IDMuMTQKKyAgICAgICAgeCA9IDMxNC4KKyAgICAgICAgeCA9IDAuMzE0CisgICAgICAgICMgWFhYIHggPSAwMDAuMzE0CisgICAgICAgIHggPSAuMzE0CisgICAgICAgIHggPSAzZTE0CisgICAgICAgIHggPSAzRTE0CisgICAgICAgIHggPSAzZS0xNAorICAgICAgICB4ID0gM2UrMTQKKyAgICAgICAgeCA9IDMuZTE0CisgICAgICAgIHggPSAuM2UxNAorICAgICAgICB4ID0gMy4xZTQKKworICAgIGRlZiB0ZXN0U3RyaW5nTGl0ZXJhbHMoc2VsZik6CisgICAgICAgIHggPSAnJzsgeSA9ICIiOyBzZWxmLmFzc2VydFRydWUobGVuKHgpID09IDAgYW5kIHggPT0geSkKKyAgICAgICAgeCA9ICdcJyc7IHkgPSAiJyI7IHNlbGYuYXNzZXJ0VHJ1ZShsZW4oeCkgPT0gMSBhbmQgeCA9PSB5IGFuZCBvcmQoeCkgPT0gMzkpCisgICAgICAgIHggPSAnIic7IHkgPSAiXCIiOyBzZWxmLmFzc2VydFRydWUobGVuKHgpID09IDEgYW5kIHggPT0geSBhbmQgb3JkKHgpID09IDM0KQorICAgICAgICB4ID0gImRvZXNuJ3QgXCJzaHJpbmtcIiBkb2VzIGl0IgorICAgICAgICB5ID0gJ2RvZXNuXCd0ICJzaHJpbmsiIGRvZXMgaXQnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oeCkgPT0gMjQgYW5kIHggPT0geSkKKyAgICAgICAgeCA9ICJkb2VzIFwic2hyaW5rXCIgZG9lc24ndCBpdCIKKyAgICAgICAgeSA9ICdkb2VzICJzaHJpbmsiIGRvZXNuXCd0IGl0JworICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHgpID09IDI0IGFuZCB4ID09IHkpCisgICAgICAgIHggPSAiIiIKK1RoZSAicXVpY2siCiticm93biBmb3gKK2p1bXBzIG92ZXIKK3RoZSAnbGF6eScgZG9nLgorIiIiCisgICAgICAgIHkgPSAnXG5UaGUgInF1aWNrIlxuYnJvd24gZm94XG5qdW1wcyBvdmVyXG50aGUgXCdsYXp5XCcgZG9nLlxuJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgIHkgPSAnJycKK1RoZSAicXVpY2siCiticm93biBmb3gKK2p1bXBzIG92ZXIKK3RoZSAnbGF6eScgZG9nLgorJycnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgeSA9ICJcblwKK1RoZSBcInF1aWNrXCJcblwKK2Jyb3duIGZveFxuXAoranVtcHMgb3ZlclxuXAordGhlICdsYXp5JyBkb2cuXG5cCisiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgeSA9ICdcblwKK1RoZSBcInF1aWNrXCJcblwKK2Jyb3duIGZveFxuXAoranVtcHMgb3ZlclxuXAordGhlIFwnbGF6eVwnIGRvZy5cblwKKycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorCisKK2NsYXNzIEdyYW1tYXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIHNpbmdsZV9pbnB1dDogTkVXTElORSB8IHNpbXBsZV9zdG10IHwgY29tcG91bmRfc3RtdCBORVdMSU5FCisgICAgIyBYWFggY2FuJ3QgdGVzdCBpbiBhIHNjcmlwdCAtLSB0aGlzIHJ1bGUgaXMgb25seSB1c2VkIHdoZW4gaW50ZXJhY3RpdmUKKworICAgICMgZmlsZV9pbnB1dDogKE5FV0xJTkUgfCBzdG10KSogRU5ETUFSS0VSCisgICAgIyBCZWluZyB0ZXN0ZWQgYXMgdGhpcyB2ZXJ5IG1vbWVudCB0aGlzIHZlcnkgbW9kdWxlCisKKyAgICAjIGV4cHJfaW5wdXQ6IHRlc3RsaXN0IE5FV0xJTkUKKyAgICAjIFhYWCBIYXJkIHRvIHRlc3QgLS0gdXNlZCBvbmx5IGluIGNhbGxzIHRvIGlucHV0KCkKKworICAgIGRlZiB0ZXN0RXZhbElucHV0KHNlbGYpOgorICAgICAgICAjIHRlc3RsaXN0IEVORE1BUktFUgorICAgICAgICB4ID0gZXZhbCgnMSwgMCBvciAxJykKKworICAgIGRlZiB0ZXN0RnVuY2RlZihzZWxmKToKKyAgICAgICAgIyMjICdkZWYnIE5BTUUgcGFyYW1ldGVycyAnOicgc3VpdGUKKyAgICAgICAgIyMjIHBhcmFtZXRlcnM6ICcoJyBbdmFyYXJnc2xpc3RdICcpJworICAgICAgICAjIyMgdmFyYXJnc2xpc3Q6IChmcGRlZiBbJz0nIHRlc3RdICcsJykqICgnKicgTkFNRSBbJywnICgnKionfCcqJyAnKicpIE5BTUVdCisgICAgICAgICMjIyAgICAgICAgICAgIHwgKCcqKid8JyonICcqJykgTkFNRSkKKyAgICAgICAgIyMjICAgICAgICAgICAgfCBmcGRlZiBbJz0nIHRlc3RdICgnLCcgZnBkZWYgWyc9JyB0ZXN0XSkqIFsnLCddCisgICAgICAgICMjIyBmcGRlZjogTkFNRSB8ICcoJyBmcGxpc3QgJyknCisgICAgICAgICMjIyBmcGxpc3Q6IGZwZGVmICgnLCcgZnBkZWYpKiBbJywnXQorICAgICAgICAjIyMgYXJnbGlzdDogKGFyZ3VtZW50ICcsJykqIChhcmd1bWVudCB8IConIHRlc3QgWycsJyAnKionIHRlc3RdIHwgJyoqJyB0ZXN0KQorICAgICAgICAjIyMgYXJndW1lbnQ6IFt0ZXN0ICc9J10gdGVzdCAgICMgUmVhbGx5IFtrZXl3b3JkICc9J10gdGVzdAorICAgICAgICBkZWYgZjEoKTogcGFzcworICAgICAgICBmMSgpCisgICAgICAgIGYxKCooKSkKKyAgICAgICAgZjEoKigpLCAqKnt9KQorICAgICAgICBkZWYgZjIob25lX2FyZ3VtZW50KTogcGFzcworICAgICAgICBkZWYgZjModHdvLCBhcmd1bWVudHMpOiBwYXNzCisgICAgICAgICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKyAgICAgICAgZXhlYygnZGVmIGY0KHR3bywgKGNvbXBvdW5kLCAoYXJndW1lbnQsIGxpc3QpKSk6IHBhc3MnKQorICAgICAgICBleGVjKCdkZWYgZjUoKGNvbXBvdW5kLCBmaXJzdCksIHR3byk6IHBhc3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLmZ1bmNfY29kZS5jb192YXJuYW1lcywgKCdvbmVfYXJndW1lbnQnLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjMuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLCAoJ3R3bycsICdhcmd1bWVudHMnKSkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjQuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLAorICAgICAgICAgICAgICAgICAgICgndHdvJywgJyhjb21wb3VuZCwgKGFyZ3VtZW50LCBsaXN0KSknLCAnY29tcG91bmQnLCAnYXJndW1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGlzdCcsKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjUuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLAorICAgICAgICAgICAgICAgICAgICgnKGNvbXBvdW5kLCBmaXJzdCknLCAndHdvJywgJ2NvbXBvdW5kJywgJ2ZpcnN0JykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGY0LmZ1bmNfY29kZS5jb192YXJuYW1lcywKKyAgICAgICAgICAgICAgICAgICgndHdvJywgJy4xJywgJ2NvbXBvdW5kJywgJ2FyZ3VtZW50JywgICdsaXN0JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGY1LmZ1bmNfY29kZS5jb192YXJuYW1lcywKKyAgICAgICAgICAgICAgICAgICgnLjAnLCAndHdvJywgJ2NvbXBvdW5kJywgJ2ZpcnN0JykpCisgICAgICAgIGRlZiBhMShvbmVfYXJnLCk6IHBhc3MKKyAgICAgICAgZGVmIGEyKHR3bywgYXJncywpOiBwYXNzCisgICAgICAgIGRlZiB2MCgqcmVzdCk6IHBhc3MKKyAgICAgICAgZGVmIHYxKGEsICpyZXN0KTogcGFzcworICAgICAgICBkZWYgdjIoYSwgYiwgKnJlc3QpOiBwYXNzCisgICAgICAgICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKyAgICAgICAgZXhlYygnZGVmIHYzKGEsIChiLCBjKSwgKnJlc3QpOiByZXR1cm4gYSwgYiwgYywgcmVzdCcpCisKKyAgICAgICAgZjEoKQorICAgICAgICBmMigxKQorICAgICAgICBmMigxLCkKKyAgICAgICAgZjMoMSwgMikKKyAgICAgICAgZjMoMSwgMiwpCisgICAgICAgIGY0KDEsICgyLCAoMywgNCkpKQorICAgICAgICB2MCgpCisgICAgICAgIHYwKDEpCisgICAgICAgIHYwKDEsKQorICAgICAgICB2MCgxLDIpCisgICAgICAgIHYwKDEsMiwzLDQsNSw2LDcsOCw5LDApCisgICAgICAgIHYxKDEpCisgICAgICAgIHYxKDEsKQorICAgICAgICB2MSgxLDIpCisgICAgICAgIHYxKDEsMiwzKQorICAgICAgICB2MSgxLDIsMyw0LDUsNiw3LDgsOSwwKQorICAgICAgICB2MigxLDIpCisgICAgICAgIHYyKDEsMiwzKQorICAgICAgICB2MigxLDIsMyw0KQorICAgICAgICB2MigxLDIsMyw0LDUsNiw3LDgsOSwwKQorICAgICAgICB2MygxLCgyLDMpKQorICAgICAgICB2MygxLCgyLDMpLDQpCisgICAgICAgIHYzKDEsKDIsMyksNCw1LDYsNyw4LDksMCkKKworICAgICAgICAjIGNldmFsIHVucGFja3MgdGhlIGZvcm1hbCBhcmd1bWVudHMgaW50byB0aGUgZmlyc3QgYXJnY291bnQgbmFtZXM7CisgICAgICAgICMgdGh1cywgdGhlIG5hbWVzIG5lc3RlZCBpbnNpZGUgdHVwbGVzIG11c3QgYXBwZWFyIGFmdGVyIHRoZXNlIG5hbWVzLgorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2My5mdW5jX2NvZGUuY29fdmFybmFtZXMsICgnYScsICcoYiwgYyknLCAncmVzdCcsICdiJywgJ2MnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodjMuZnVuY19jb2RlLmNvX3Zhcm5hbWVzLCAoJ2EnLCAnLjEnLCAncmVzdCcsICdiJywgJ2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2MygxLCAoMiwgMyksIDQpLCAoMSwgMiwgMywgKDQsKSkpCisgICAgICAgIGRlZiBkMDEoYT0xKTogcGFzcworICAgICAgICBkMDEoKQorICAgICAgICBkMDEoMSkKKyAgICAgICAgZDAxKCooMSwpKQorICAgICAgICBkMDEoKip7J2EnOjJ9KQorICAgICAgICBkZWYgZDExKGEsIGI9MSk6IHBhc3MKKyAgICAgICAgZDExKDEpCisgICAgICAgIGQxMSgxLCAyKQorICAgICAgICBkMTEoMSwgKip7J2InOjJ9KQorICAgICAgICBkZWYgZDIxKGEsIGIsIGM9MSk6IHBhc3MKKyAgICAgICAgZDIxKDEsIDIpCisgICAgICAgIGQyMSgxLCAyLCAzKQorICAgICAgICBkMjEoKigxLCAyLCAzKSkKKyAgICAgICAgZDIxKDEsICooMiwgMykpCisgICAgICAgIGQyMSgxLCAyLCAqKDMsKSkKKyAgICAgICAgZDIxKDEsIDIsICoqeydjJzozfSkKKyAgICAgICAgZGVmIGQwMihhPTEsIGI9Mik6IHBhc3MKKyAgICAgICAgZDAyKCkKKyAgICAgICAgZDAyKDEpCisgICAgICAgIGQwMigxLCAyKQorICAgICAgICBkMDIoKigxLCAyKSkKKyAgICAgICAgZDAyKDEsICooMiwpKQorICAgICAgICBkMDIoMSwgKip7J2InOjJ9KQorICAgICAgICBkMDIoKip7J2EnOiAxLCAnYic6IDJ9KQorICAgICAgICBkZWYgZDEyKGEsIGI9MSwgYz0yKTogcGFzcworICAgICAgICBkMTIoMSkKKyAgICAgICAgZDEyKDEsIDIpCisgICAgICAgIGQxMigxLCAyLCAzKQorICAgICAgICBkZWYgZDIyKGEsIGIsIGM9MSwgZD0yKTogcGFzcworICAgICAgICBkMjIoMSwgMikKKyAgICAgICAgZDIyKDEsIDIsIDMpCisgICAgICAgIGQyMigxLCAyLCAzLCA0KQorICAgICAgICBkZWYgZDAxdihhPTEsICpyZXN0KTogcGFzcworICAgICAgICBkMDF2KCkKKyAgICAgICAgZDAxdigxKQorICAgICAgICBkMDF2KDEsIDIpCisgICAgICAgIGQwMXYoKigxLCAyLCAzLCA0KSkKKyAgICAgICAgZDAxdigqKDEsKSkKKyAgICAgICAgZDAxdigqKnsnYSc6Mn0pCisgICAgICAgIGRlZiBkMTF2KGEsIGI9MSwgKnJlc3QpOiBwYXNzCisgICAgICAgIGQxMXYoMSkKKyAgICAgICAgZDExdigxLCAyKQorICAgICAgICBkMTF2KDEsIDIsIDMpCisgICAgICAgIGRlZiBkMjF2KGEsIGIsIGM9MSwgKnJlc3QpOiBwYXNzCisgICAgICAgIGQyMXYoMSwgMikKKyAgICAgICAgZDIxdigxLCAyLCAzKQorICAgICAgICBkMjF2KDEsIDIsIDMsIDQpCisgICAgICAgIGQyMXYoKigxLCAyLCAzLCA0KSkKKyAgICAgICAgZDIxdigxLCAyLCAqKnsnYyc6IDN9KQorICAgICAgICBkZWYgZDAydihhPTEsIGI9MiwgKnJlc3QpOiBwYXNzCisgICAgICAgIGQwMnYoKQorICAgICAgICBkMDJ2KDEpCisgICAgICAgIGQwMnYoMSwgMikKKyAgICAgICAgZDAydigxLCAyLCAzKQorICAgICAgICBkMDJ2KDEsICooMiwgMywgNCkpCisgICAgICAgIGQwMnYoKip7J2EnOiAxLCAnYic6IDJ9KQorICAgICAgICBkZWYgZDEydihhLCBiPTEsIGM9MiwgKnJlc3QpOiBwYXNzCisgICAgICAgIGQxMnYoMSkKKyAgICAgICAgZDEydigxLCAyKQorICAgICAgICBkMTJ2KDEsIDIsIDMpCisgICAgICAgIGQxMnYoMSwgMiwgMywgNCkKKyAgICAgICAgZDEydigqKDEsIDIsIDMsIDQpKQorICAgICAgICBkMTJ2KDEsIDIsICooMywgNCwgNSkpCisgICAgICAgIGQxMnYoMSwgKigyLCksICoqeydjJzogM30pCisgICAgICAgIGRlZiBkMjJ2KGEsIGIsIGM9MSwgZD0yLCAqcmVzdCk6IHBhc3MKKyAgICAgICAgZDIydigxLCAyKQorICAgICAgICBkMjJ2KDEsIDIsIDMpCisgICAgICAgIGQyMnYoMSwgMiwgMywgNCkKKyAgICAgICAgZDIydigxLCAyLCAzLCA0LCA1KQorICAgICAgICBkMjJ2KCooMSwgMiwgMywgNCkpCisgICAgICAgIGQyMnYoMSwgMiwgKigzLCA0LCA1KSkKKyAgICAgICAgZDIydigxLCAqKDIsIDMpLCAqKnsnZCc6IDR9KQorICAgICAgICAjIFNpbGVuY2UgUHkzayB3YXJuaW5nCisgICAgICAgIGV4ZWMoJ2RlZiBkMzF2KCh4KSk6IHBhc3MnKQorICAgICAgICBleGVjKCdkZWYgZDMydigoeCwpKTogcGFzcycpCisgICAgICAgIGQzMXYoMSkKKyAgICAgICAgZDMydigoMSwpKQorCisgICAgICAgICMga2V5d29yZCBhcmd1bWVudHMgYWZ0ZXIgKmFyZ2xpc3QKKyAgICAgICAgZGVmIGYoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHJldHVybiBhcmdzLCBrd2FyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKDEsIHg9MiwgKlszLCA0XSwgeT01KSwgKCgxLCAzLCA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3gnOjIsICd5Jzo1fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAiZigxLCAqKDIsMyksIDQpIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsICJmKDEsIHg9MiwgKigzLDQpLCB4PTUpIikKKworICAgICAgICAjIENoZWNrIGFzdCBlcnJvcnMgaW4gKmFyZ3MgYW5kICprd2FyZ3MKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJmKCpnKDE9MikpIikKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJmKCoqZygxPTIpKSIpCisKKyAgICBkZWYgdGVzdExhbWJkZWYoc2VsZik6CisgICAgICAgICMjIyBsYW1iZGVmOiAnbGFtYmRhJyBbdmFyYXJnc2xpc3RdICc6JyB0ZXN0CisgICAgICAgIGwxID0gbGFtYmRhIDogMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwxKCksIDApCisgICAgICAgIGwyID0gbGFtYmRhIDogYVtkXSAjIFhYWCBqdXN0IHRlc3RpbmcgdGhlIGV4cHJlc3Npb24KKyAgICAgICAgbDMgPSBsYW1iZGEgOiBbMiA8IHggZm9yIHggaW4gWy0xLCAzLCAwTF1dCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDMoKSwgWzAsIDEsIDBdKQorICAgICAgICBsNCA9IGxhbWJkYSB4ID0gbGFtYmRhIHkgPSBsYW1iZGEgej0xIDogeiA6IHkoKSA6IHgoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGw0KCksIDEpCisgICAgICAgIGw1ID0gbGFtYmRhIHgsIHksIHo9MjogeCArIHkgKyB6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDUoMSwgMiksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobDUoMSwgMiwgMyksIDYpCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAibGFtYmRhIHg6IHggPSAyIikKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJsYW1iZGEgKE5vbmUsKTogTm9uZSIpCisKKyAgICAjIyMgc3RtdDogc2ltcGxlX3N0bXQgfCBjb21wb3VuZF9zdG10CisgICAgIyBUZXN0ZWQgYmVsb3cKKworICAgIGRlZiB0ZXN0U2ltcGxlU3RtdChzZWxmKToKKyAgICAgICAgIyMjIHNpbXBsZV9zdG10OiBzbWFsbF9zdG10ICgnOycgc21hbGxfc3RtdCkqIFsnOyddCisgICAgICAgIHggPSAxOyBwYXNzOyBkZWwgeAorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICAjIHZlcmlmeSBzdGF0ZW1lbnRzIHRoYXQgZW5kIHdpdGggc2VtaS1jb2xvbnMKKyAgICAgICAgICAgIHggPSAxOyBwYXNzOyBkZWwgeDsKKyAgICAgICAgZm9vKCkKKworICAgICMjIyBzbWFsbF9zdG10OiBleHByX3N0bXQgfCBwcmludF9zdG10ICB8IHBhc3Nfc3RtdCB8IGRlbF9zdG10IHwgZmxvd19zdG10IHwgaW1wb3J0X3N0bXQgfCBnbG9iYWxfc3RtdCB8IGFjY2Vzc19zdG10IHwgZXhlY19zdG10CisgICAgIyBUZXN0ZWQgYmVsb3cKKworICAgIGRlZiB0ZXN0RXhwclN0bXQoc2VsZik6CisgICAgICAgICMgKGV4cHJsaXN0ICc9JykqIGV4cHJsaXN0CisgICAgICAgIDEKKyAgICAgICAgMSwgMiwgMworICAgICAgICB4ID0gMQorICAgICAgICB4ID0gMSwgMiwgMworICAgICAgICB4ID0geSA9IHogPSAxLCAyLCAzCisgICAgICAgIHgsIHksIHogPSAxLCAyLCAzCisgICAgICAgIGFiYyA9IGEsIGIsIGMgPSB4LCB5LCB6ID0geHl6ID0gMSwgMiwgKDMsIDQpCisKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJ4ICsgMSA9IDEiKQorICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImEgKyAxID0gYiArIDIiKQorCisgICAgZGVmIHRlc3RQcmludFN0bXQoc2VsZik6CisgICAgICAgICMgJ3ByaW50JyAodGVzdCAnLCcpKiBbdGVzdF0KKyAgICAgICAgaW1wb3J0IFN0cmluZ0lPCisKKyAgICAgICAgIyBDYW4ndCB0ZXN0IHByaW50aW5nIHRvIHJlYWwgc3Rkb3V0IHdpdGhvdXQgY29tcGFyaW5nIG91dHB1dAorICAgICAgICAjIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgaW4gdW5pdHRlc3QuCisgICAgICAgIHNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICBzeXMuc3Rkb3V0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorCisgICAgICAgIHByaW50IDEsIDIsIDMKKyAgICAgICAgcHJpbnQgMSwgMiwgMywKKyAgICAgICAgcHJpbnQKKyAgICAgICAgcHJpbnQgMCBvciAxLCAwIG9yIDEsCisgICAgICAgIHByaW50IDAgb3IgMQorCisgICAgICAgICMgJ3ByaW50JyAnPj4nIHRlc3QgJywnCisgICAgICAgIHByaW50ID4+IHN5cy5zdGRvdXQsIDEsIDIsIDMKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZG91dCwgMSwgMiwgMywKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZG91dAorICAgICAgICBwcmludCA+PiBzeXMuc3Rkb3V0LCAwIG9yIDEsIDAgb3IgMSwKKyAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZG91dCwgMCBvciAxCisKKyAgICAgICAgIyB0ZXN0IHByaW50aW5nIHRvIGFuIGluc3RhbmNlCisgICAgICAgIGNsYXNzIEd1bHA6CisgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgbXNnKTogcGFzcworCisgICAgICAgIGd1bHAgPSBHdWxwKCkKKyAgICAgICAgcHJpbnQgPj4gZ3VscCwgMSwgMiwgMworICAgICAgICBwcmludCA+PiBndWxwLCAxLCAyLCAzLAorICAgICAgICBwcmludCA+PiBndWxwCisgICAgICAgIHByaW50ID4+IGd1bHAsIDAgb3IgMSwgMCBvciAxLAorICAgICAgICBwcmludCA+PiBndWxwLCAwIG9yIDEKKworICAgICAgICAjIHRlc3QgcHJpbnQgPj4gTm9uZQorICAgICAgICBkZWYgZHJpdmVyKCk6CisgICAgICAgICAgICBvbGRzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gR3VscCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGVsbG1lKEd1bHAoKSkKKyAgICAgICAgICAgICAgICB0ZWxsbWUoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gb2xkc3Rkb3V0CisKKyAgICAgICAgIyB3ZSBzaG91bGQgc2VlIHRoaXMgb25jZQorICAgICAgICBkZWYgdGVsbG1lKGZpbGU9c3lzLnN0ZG91dCk6CisgICAgICAgICAgICBwcmludCA+PiBmaWxlLCAnaGVsbG8gd29ybGQnCisKKyAgICAgICAgZHJpdmVyKCkKKworICAgICAgICAjIHdlIHNob3VsZCBub3Qgc2VlIHRoaXMgYXQgYWxsCisgICAgICAgIGRlZiB0ZWxsbWUoZmlsZT1Ob25lKToKKyAgICAgICAgICAgIHByaW50ID4+IGZpbGUsICdnb29kYnllIHVuaXZlcnNlJworCisgICAgICAgIGRyaXZlcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuc3Rkb3V0LmdldHZhbHVlKCksICcnJ1wKKzEgMiAzCisxIDIgMworMSAxIDEKKzEgMiAzCisxIDIgMworMSAxIDEKK2hlbGxvIHdvcmxkCisnJycpCisgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAorCisgICAgICAgICMgc3ludGF4IGVycm9ycworICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgJ3ByaW50ICwnKQorICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgJ3ByaW50ID4+IHgsJykKKworICAgIGRlZiB0ZXN0RGVsU3RtdChzZWxmKToKKyAgICAgICAgIyAnZGVsJyBleHBybGlzdAorICAgICAgICBhYmMgPSBbMSwyLDNdCisgICAgICAgIHgsIHksIHogPSBhYmMKKyAgICAgICAgeHl6ID0geCwgeSwgegorCisgICAgICAgIGRlbCBhYmMKKyAgICAgICAgZGVsIHgsIHksICh6LCB4eXopCisKKyAgICBkZWYgdGVzdFBhc3NTdG10KHNlbGYpOgorICAgICAgICAjICdwYXNzJworICAgICAgICBwYXNzCisKKyAgICAjIGZsb3dfc3RtdDogYnJlYWtfc3RtdCB8IGNvbnRpbnVlX3N0bXQgfCByZXR1cm5fc3RtdCB8IHJhaXNlX3N0bXQKKyAgICAjIFRlc3RlZCBiZWxvdworCisgICAgZGVmIHRlc3RCcmVha1N0bXQoc2VsZik6CisgICAgICAgICMgJ2JyZWFrJworICAgICAgICB3aGlsZSAxOiBicmVhaworCisgICAgZGVmIHRlc3RDb250aW51ZVN0bXQoc2VsZik6CisgICAgICAgICMgJ2NvbnRpbnVlJworICAgICAgICBpID0gMQorICAgICAgICB3aGlsZSBpOiBpID0gMDsgY29udGludWUKKworICAgICAgICBtc2cgPSAiIgorICAgICAgICB3aGlsZSBub3QgbXNnOgorICAgICAgICAgICAgbXNnID0gIm9rIgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbXNnID0gImNvbnRpbnVlIGZhaWxlZCB0byBjb250aW51ZSBpbnNpZGUgdHJ5IgorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIG1zZyA9ICJjb250aW51ZSBpbnNpZGUgdHJ5IGNhbGxlZCBleGNlcHQgYmxvY2siCisgICAgICAgIGlmIG1zZyAhPSAib2siOgorICAgICAgICAgICAgc2VsZi5mYWlsKG1zZykKKworICAgICAgICBtc2cgPSAiIgorICAgICAgICB3aGlsZSBub3QgbXNnOgorICAgICAgICAgICAgbXNnID0gImZpbmFsbHkgYmxvY2sgbm90IGNhbGxlZCIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBtc2cgPSAib2siCisgICAgICAgIGlmIG1zZyAhPSAib2siOgorICAgICAgICAgICAgc2VsZi5mYWlsKG1zZykKKworICAgIGRlZiB0ZXN0X2JyZWFrX2NvbnRpbnVlX2xvb3Aoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IHdhcnJhbnRzIGFuIGV4cGxhbmF0aW9uLiBJdCBpcyBhIHRlc3Qgc3BlY2lmaWNhbGx5IGZvciBTRiBidWdzCisgICAgICAgICMgIzQ2MzM1OSBhbmQgIzQ2MjkzNy4gVGhlIGJ1ZyBpcyB0aGF0IGEgJ2JyZWFrJyBzdGF0ZW1lbnQgZXhlY3V0ZWQgb3IKKyAgICAgICAgIyBleGNlcHRpb24gcmFpc2VkIGluc2lkZSBhIHRyeS9leGNlcHQgaW5zaWRlIGEgbG9vcCwgKmFmdGVyKiBhIGNvbnRpbnVlCisgICAgICAgICMgc3RhdGVtZW50IGhhcyBiZWVuIGV4ZWN1dGVkIGluIHRoYXQgbG9vcCwgd2lsbCBjYXVzZSB0aGUgd3JvbmcgbnVtYmVyIG9mCisgICAgICAgICMgYXJndW1lbnRzIHRvIGJlIHBvcHBlZCBvZmYgdGhlIHN0YWNrIGFuZCB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciByZXNldCB0bworICAgICAgICAjIGEgdmVyeSBzbWFsbCBudW1iZXIgKHVzdWFsbHkgMC4pIEJlY2F1c2Ugb2YgdGhpcywgdGhlIGZvbGxvd2luZyB0ZXN0CisgICAgICAgICMgKm11c3QqIHdyaXR0ZW4gYXMgYSBmdW5jdGlvbiwgYW5kIHRoZSB0cmFja2luZyB2YXJzICptdXN0KiBiZSBmdW5jdGlvbgorICAgICAgICAjIGFyZ3VtZW50cyB3aXRoIGRlZmF1bHQgdmFsdWVzLiBPdGhlcndpc2UsIHRoZSB0ZXN0IHdpbGwgbG9vcCBhbmQgbG9vcC4KKworICAgICAgICBkZWYgdGVzdF9pbm5lcihleHRyYV9idXJuaW5nX29pbCA9IDEsIGNvdW50PTApOgorICAgICAgICAgICAgYmlnX2hpcHBvID0gMgorICAgICAgICAgICAgd2hpbGUgYmlnX2hpcHBvOgorICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGlmIGV4dHJhX2J1cm5pbmdfb2lsIGFuZCBiaWdfaGlwcG8gPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2J1cm5pbmdfb2lsIC09IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGJpZ19oaXBwbyAtPSAxCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgaWYgY291bnQgPiAyIG9yIGJpZ19oaXBwbyAhPSAxOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiY29udGludWUgdGhlbiBicmVhayBpbiB0cnkvZXhjZXB0IGluIGxvb3AgYnJva2VuISIpCisgICAgICAgIHRlc3RfaW5uZXIoKQorCisgICAgZGVmIHRlc3RSZXR1cm4oc2VsZik6CisgICAgICAgICMgJ3JldHVybicgW3Rlc3RsaXN0XQorICAgICAgICBkZWYgZzEoKTogcmV0dXJuCisgICAgICAgIGRlZiBnMigpOiByZXR1cm4gMQorICAgICAgICBnMSgpCisgICAgICAgIHggPSBnMigpCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiY2xhc3MgZm9vOnJldHVybiAxIikKKworICAgIGRlZiB0ZXN0WWllbGQoc2VsZik6CisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiY2xhc3MgZm9vOnlpZWxkIDEiKQorCisgICAgZGVmIHRlc3RSYWlzZShzZWxmKToKKyAgICAgICAgIyAncmFpc2UnIHRlc3QgWycsJyB0ZXN0XQorICAgICAgICB0cnk6IHJhaXNlIFJ1bnRpbWVFcnJvciwgJ2p1c3QgdGVzdGluZycKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjogcGFzcworICAgICAgICB0cnk6IHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDogcGFzcworCisgICAgZGVmIHRlc3RJbXBvcnQoc2VsZik6CisgICAgICAgICMgJ2ltcG9ydCcgZG90dGVkX2FzX25hbWVzCisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgaW1wb3J0IHRpbWUsIHN5cworICAgICAgICAjICdmcm9tJyBkb3R0ZWRfbmFtZSAnaW1wb3J0JyAoJyonIHwgJygnIGltcG9ydF9hc19uYW1lcyAnKScgfCBpbXBvcnRfYXNfbmFtZXMpCisgICAgICAgIGZyb20gdGltZSBpbXBvcnQgdGltZQorICAgICAgICBmcm9tIHRpbWUgaW1wb3J0ICh0aW1lKQorICAgICAgICAjIG5vdCB0ZXN0YWJsZSBpbnNpZGUgYSBmdW5jdGlvbiwgYnV0IGFscmVhZHkgZG9uZSBhdCB0b3Agb2YgdGhlIG1vZHVsZQorICAgICAgICAjIGZyb20gc3lzIGltcG9ydCAqCisgICAgICAgIGZyb20gc3lzIGltcG9ydCBwYXRoLCBhcmd2CisgICAgICAgIGZyb20gc3lzIGltcG9ydCAocGF0aCwgYXJndikKKyAgICAgICAgZnJvbSBzeXMgaW1wb3J0IChwYXRoLCBhcmd2LCkKKworICAgIGRlZiB0ZXN0R2xvYmFsKHNlbGYpOgorICAgICAgICAjICdnbG9iYWwnIE5BTUUgKCcsJyBOQU1FKSoKKyAgICAgICAgZ2xvYmFsIGEKKyAgICAgICAgZ2xvYmFsIGEsIGIKKyAgICAgICAgZ2xvYmFsIG9uZSwgdHdvLCB0aHJlZSwgZm91ciwgZml2ZSwgc2l4LCBzZXZlbiwgZWlnaHQsIG5pbmUsIHRlbgorCisgICAgZGVmIHRlc3RFeGVjKHNlbGYpOgorICAgICAgICAjICdleGVjJyBleHByIFsnaW4nIGV4cHIgWycsJyBleHByXV0KKyAgICAgICAgeiA9IE5vbmUKKyAgICAgICAgZGVsIHoKKyAgICAgICAgZXhlYyAnej0xKzFcbicKKyAgICAgICAgaWYgeiAhPSAyOiBzZWxmLmZhaWwoJ2V4ZWMgXCd6PTErMVwnXFxuJykKKyAgICAgICAgZGVsIHoKKyAgICAgICAgZXhlYyAnej0xKzEnCisgICAgICAgIGlmIHogIT0gMjogc2VsZi5mYWlsKCdleGVjIFwnej0xKzFcJycpCisgICAgICAgIHogPSBOb25lCisgICAgICAgIGRlbCB6CisgICAgICAgIGltcG9ydCB0eXBlcworICAgICAgICBpZiBoYXNhdHRyKHR5cGVzLCAiVW5pY29kZVR5cGUiKToKKyAgICAgICAgICAgIGV4ZWMgciIiImlmIDE6CisgICAgICAgICAgICBleGVjIHUnej0xKzFcbicKKyAgICAgICAgICAgIGlmIHogIT0gMjogc2VsZi5mYWlsKCdleGVjIHVcJ3o9MSsxXCdcXG4nKQorICAgICAgICAgICAgZGVsIHoKKyAgICAgICAgICAgIGV4ZWMgdSd6PTErMScKKyAgICAgICAgICAgIGlmIHogIT0gMjogc2VsZi5mYWlsKCdleGVjIHVcJ3o9MSsxXCcnKSIiIgorICAgICAgICBnID0ge30KKyAgICAgICAgZXhlYyAneiA9IDEnIGluIGcKKyAgICAgICAgaWYgJ19fYnVpbHRpbnNfXycgaW4gZzogZGVsIGdbJ19fYnVpbHRpbnNfXyddCisgICAgICAgIGlmIGcgIT0geyd6JzogMX06IHNlbGYuZmFpbCgnZXhlYyBcJ3ogPSAxXCcgaW4gZycpCisgICAgICAgIGcgPSB7fQorICAgICAgICBsID0ge30KKworICAgICAgICBleGVjICdnbG9iYWwgYTsgYSA9IDE7IGIgPSAyJyBpbiBnLCBsCisgICAgICAgIGlmICdfX2J1aWx0aW5zX18nIGluIGc6IGRlbCBnWydfX2J1aWx0aW5zX18nXQorICAgICAgICBpZiAnX19idWlsdGluc19fJyBpbiBsOiBkZWwgbFsnX19idWlsdGluc19fJ10KKyAgICAgICAgaWYgKGcsIGwpICE9ICh7J2EnOjF9LCB7J2InOjJ9KToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnZXhlYyAuLi4gaW4gZyAoJXMpLCBsICglcyknICUoZyxsKSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0KHNlbGYpOgorICAgICAgICAjIGFzc2VydFRydWVzdG10OiAnYXNzZXJ0JyB0ZXN0IFsnLCcgdGVzdF0KKyAgICAgICAgYXNzZXJ0IDEKKyAgICAgICAgYXNzZXJ0IDEsIDEKKyAgICAgICAgYXNzZXJ0IGxhbWJkYSB4OngKKyAgICAgICAgYXNzZXJ0IDEsIGxhbWJkYSB4OngrMQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFzc2VydCBUcnVlCisgICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCInYXNzZXJ0IFRydWUnIHNob3VsZCBub3QgaGF2ZSByYWlzZWQgYW4gQXNzZXJ0aW9uRXJyb3IiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFzc2VydCBUcnVlLCAndGhpcyBzaG91bGQgYWx3YXlzIHBhc3MnCisgICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCInYXNzZXJ0IFRydWUsIG1zZycgc2hvdWxkIG5vdCBoYXZlICIKKyAgICAgICAgICAgICAgICAgICAgICAicmFpc2VkIGFuIEFzc2VydGlvbkVycm9yIikKKworICAgICMgdGhlc2UgdGVzdHMgZmFpbCBpZiBweXRob24gaXMgcnVuIHdpdGggLU8sIHNvIGNoZWNrIF9fZGVidWdfXworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKF9fZGVidWdfXywgIldvbid0IHdvcmsgaWYgX19kZWJ1Z19fIGlzIEZhbHNlIikKKyAgICBkZWYgdGVzdEFzc2VydDIoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFzc2VydCAwLCAibXNnIgorICAgICAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgIm1zZyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkFzc2VydGlvbkVycm9yIG5vdCByYWlzZWQgYnkgYXNzZXJ0IDAiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFzc2VydCBGYWxzZQorICAgICAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGUuYXJncyksIDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkFzc2VydGlvbkVycm9yIG5vdCByYWlzZWQgYnkgJ2Fzc2VydCBGYWxzZSciKQorCisKKyAgICAjIyMgY29tcG91bmRfc3RtdDogaWZfc3RtdCB8IHdoaWxlX3N0bXQgfCBmb3Jfc3RtdCB8IHRyeV9zdG10IHwgZnVuY2RlZiB8IGNsYXNzZGVmCisgICAgIyBUZXN0ZWQgYmVsb3cKKworICAgIGRlZiB0ZXN0SWYoc2VsZik6CisgICAgICAgICMgJ2lmJyB0ZXN0ICc6JyBzdWl0ZSAoJ2VsaWYnIHRlc3QgJzonIHN1aXRlKSogWydlbHNlJyAnOicgc3VpdGVdCisgICAgICAgIGlmIDE6IHBhc3MKKyAgICAgICAgaWYgMTogcGFzcworICAgICAgICBlbHNlOiBwYXNzCisgICAgICAgIGlmIDA6IHBhc3MKKyAgICAgICAgZWxpZiAwOiBwYXNzCisgICAgICAgIGlmIDA6IHBhc3MKKyAgICAgICAgZWxpZiAwOiBwYXNzCisgICAgICAgIGVsaWYgMDogcGFzcworICAgICAgICBlbGlmIDA6IHBhc3MKKyAgICAgICAgZWxzZTogcGFzcworCisgICAgZGVmIHRlc3RXaGlsZShzZWxmKToKKyAgICAgICAgIyAnd2hpbGUnIHRlc3QgJzonIHN1aXRlIFsnZWxzZScgJzonIHN1aXRlXQorICAgICAgICB3aGlsZSAwOiBwYXNzCisgICAgICAgIHdoaWxlIDA6IHBhc3MKKyAgICAgICAgZWxzZTogcGFzcworCisgICAgICAgICMgSXNzdWUxOTIwOiAid2hpbGUgMCIgaXMgb3B0aW1pemVkIGF3YXksCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlICJlbHNlIiBjbGF1c2UgaXMgc3RpbGwgcHJlc2VudC4KKyAgICAgICAgeCA9IDAKKyAgICAgICAgd2hpbGUgMDoKKyAgICAgICAgICAgIHggPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB4ID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDIpCisKKyAgICBkZWYgdGVzdEZvcihzZWxmKToKKyAgICAgICAgIyAnZm9yJyBleHBybGlzdCAnaW4nIGV4cHJsaXN0ICc6JyBzdWl0ZSBbJ2Vsc2UnICc6JyBzdWl0ZV0KKyAgICAgICAgZm9yIGkgaW4gMSwgMiwgMzogcGFzcworICAgICAgICBmb3IgaSwgaiwgayBpbiAoKTogcGFzcworICAgICAgICBlbHNlOiBwYXNzCisgICAgICAgIGNsYXNzIFNxdWFyZXM6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4KToKKyAgICAgICAgICAgICAgICBzZWxmLm1heCA9IG1heAorICAgICAgICAgICAgICAgIHNlbGYuc29mYXIgPSBbXQorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6IHJldHVybiBsZW4oc2VsZi5zb2ZhcikKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICBpZiBub3QgMCA8PSBpIDwgc2VsZi5tYXg6IHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgICAgICAgICBuID0gbGVuKHNlbGYuc29mYXIpCisgICAgICAgICAgICAgICAgd2hpbGUgbiA8PSBpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNvZmFyLmFwcGVuZChuKm4pCisgICAgICAgICAgICAgICAgICAgIG4gPSBuKzEKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb2ZhcltpXQorICAgICAgICBuID0gMAorICAgICAgICBmb3IgeCBpbiBTcXVhcmVzKDEwKTogbiA9IG4reAorICAgICAgICBpZiBuICE9IDI4NToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnZm9yIG92ZXIgZ3Jvd2luZyBzZXF1ZW5jZScpCisKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZm9yIHgsIGluIFsoMSwpLCAoMiwpLCAoMywpXToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0VHJ5KHNlbGYpOgorICAgICAgICAjIyMgdHJ5X3N0bXQ6ICd0cnknICc6JyBzdWl0ZSAoZXhjZXB0X2NsYXVzZSAnOicgc3VpdGUpKyBbJ2Vsc2UnICc6JyBzdWl0ZV0KKyAgICAgICAgIyMjICAgICAgICAgfCAndHJ5JyAnOicgc3VpdGUgJ2ZpbmFsbHknICc6JyBzdWl0ZQorICAgICAgICAjIyMgZXhjZXB0X2NsYXVzZTogJ2V4Y2VwdCcgW2V4cHIgWygnYXMnIHwgJywnKSBleHByXV0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgMS8wCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OiAxLzAKKyAgICAgICAgZXhjZXB0IEVPRkVycm9yOiBwYXNzCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgbXNnOiBwYXNzCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IsIG1zZzogcGFzcworICAgICAgICBleGNlcHQ6IHBhc3MKKyAgICAgICAgZWxzZTogcGFzcworICAgICAgICB0cnk6IDEvMAorICAgICAgICBleGNlcHQgKEVPRkVycm9yLCBUeXBlRXJyb3IsIFplcm9EaXZpc2lvbkVycm9yKTogcGFzcworICAgICAgICB0cnk6IDEvMAorICAgICAgICBleGNlcHQgKEVPRkVycm9yLCBUeXBlRXJyb3IsIFplcm9EaXZpc2lvbkVycm9yKSwgbXNnOiBwYXNzCisgICAgICAgIHRyeTogcGFzcworICAgICAgICBmaW5hbGx5OiBwYXNzCisKKyAgICBkZWYgdGVzdFN1aXRlKHNlbGYpOgorICAgICAgICAjIHNpbXBsZV9zdG10IHwgTkVXTElORSBJTkRFTlQgTkVXTElORSogKHN0bXQgTkVXTElORSopKyBERURFTlQKKyAgICAgICAgaWYgMTogcGFzcworICAgICAgICBpZiAxOgorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiAxOgorICAgICAgICAgICAgIworICAgICAgICAgICAgIworICAgICAgICAgICAgIworICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIworICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIworCisgICAgZGVmIHRlc3RUZXN0KHNlbGYpOgorICAgICAgICAjIyMgYW5kX3Rlc3QgKCdvcicgYW5kX3Rlc3QpKgorICAgICAgICAjIyMgYW5kX3Rlc3Q6IG5vdF90ZXN0ICgnYW5kJyBub3RfdGVzdCkqCisgICAgICAgICMjIyBub3RfdGVzdDogJ25vdCcgbm90X3Rlc3QgfCBjb21wYXJpc29uCisgICAgICAgIGlmIG5vdCAxOiBwYXNzCisgICAgICAgIGlmIDEgYW5kIDE6IHBhc3MKKyAgICAgICAgaWYgMSBvciAxOiBwYXNzCisgICAgICAgIGlmIG5vdCBub3Qgbm90IDE6IHBhc3MKKyAgICAgICAgaWYgbm90IDEgYW5kIDEgYW5kIDE6IHBhc3MKKyAgICAgICAgaWYgMSBhbmQgMSBvciAxIGFuZCAxIGFuZCAxIG9yIG5vdCAxIGFuZCAxOiBwYXNzCisKKyAgICBkZWYgdGVzdENvbXBhcmlzb24oc2VsZik6CisgICAgICAgICMjIyBjb21wYXJpc29uOiBleHByIChjb21wX29wIGV4cHIpKgorICAgICAgICAjIyMgY29tcF9vcDogJzwnfCc+J3wnPT0nfCc+PSd8Jzw9J3wnPD4nfCchPSd8J2luJ3wnbm90JyAnaW4nfCdpcyd8J2lzJyAnbm90JworICAgICAgICBpZiAxOiBwYXNzCisgICAgICAgIHggPSAoMSA9PSAxKQorICAgICAgICBpZiAxID09IDE6IHBhc3MKKyAgICAgICAgaWYgMSAhPSAxOiBwYXNzCisgICAgICAgIGlmIDEgPCAxOiBwYXNzCisgICAgICAgIGlmIDEgPiAxOiBwYXNzCisgICAgICAgIGlmIDEgPD0gMTogcGFzcworICAgICAgICBpZiAxID49IDE6IHBhc3MKKyAgICAgICAgaWYgMSBpcyAxOiBwYXNzCisgICAgICAgIGlmIDEgaXMgbm90IDE6IHBhc3MKKyAgICAgICAgaWYgMSBpbiAoKTogcGFzcworICAgICAgICBpZiAxIG5vdCBpbiAoKTogcGFzcworICAgICAgICBpZiAxIDwgMSA+IDEgPT0gMSA+PSAxIDw9IDEgIT0gMSBpbiAxIG5vdCBpbiAxIGlzIDEgaXMgbm90IDE6IHBhc3MKKyAgICAgICAgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgICAgICBpZiBldmFsKCcxIDw+IDEnKTogcGFzcworICAgICAgICBpZiBldmFsKCcxIDwgMSA+IDEgPT0gMSA+PSAxIDw9IDEgPD4gMSAhPSAxIGluIDEgbm90IGluIDEgaXMgMSBpcyBub3QgMScpOiBwYXNzCisKKyAgICBkZWYgdGVzdEJpbmFyeU1hc2tPcHMoc2VsZik6CisgICAgICAgIHggPSAxICYgMQorICAgICAgICB4ID0gMSBeIDEKKyAgICAgICAgeCA9IDEgfCAxCisKKyAgICBkZWYgdGVzdFNoaWZ0T3BzKHNlbGYpOgorICAgICAgICB4ID0gMSA8PCAxCisgICAgICAgIHggPSAxID4+IDEKKyAgICAgICAgeCA9IDEgPDwgMSA+PiAxCisKKyAgICBkZWYgdGVzdEFkZGl0aXZlT3BzKHNlbGYpOgorICAgICAgICB4ID0gMQorICAgICAgICB4ID0gMSArIDEKKyAgICAgICAgeCA9IDEgLSAxIC0gMQorICAgICAgICB4ID0gMSAtIDEgKyAxIC0gMSArIDEKKworICAgIGRlZiB0ZXN0TXVsdGlwbGljYXRpdmVPcHMoc2VsZik6CisgICAgICAgIHggPSAxICogMQorICAgICAgICB4ID0gMSAvIDEKKyAgICAgICAgeCA9IDEgJSAxCisgICAgICAgIHggPSAxIC8gMSAqIDEgJSAxCisKKyAgICBkZWYgdGVzdFVuYXJ5T3BzKHNlbGYpOgorICAgICAgICB4ID0gKzEKKyAgICAgICAgeCA9IC0xCisgICAgICAgIHggPSB+MQorICAgICAgICB4ID0gfjEgXiAxICYgMSB8IDEgJiAxIF4gLTEKKyAgICAgICAgeCA9IC0xKjEvMSArIDEqMSAtIC0tLTEqMQorCisgICAgZGVmIHRlc3RTZWxlY3RvcnMoc2VsZik6CisgICAgICAgICMjIyB0cmFpbGVyOiAnKCcgW3Rlc3RsaXN0XSAnKScgfCAnWycgc3Vic2NyaXB0ICddJyB8ICcuJyBOQU1FCisgICAgICAgICMjIyBzdWJzY3JpcHQ6IGV4cHIgfCBbZXhwcl0gJzonIFtleHByXQorCisgICAgICAgIGltcG9ydCBzeXMsIHRpbWUKKyAgICAgICAgYyA9IHN5cy5wYXRoWzBdCisgICAgICAgIHggPSB0aW1lLnRpbWUoKQorICAgICAgICB4ID0gc3lzLm1vZHVsZXNbJ3RpbWUnXS50aW1lKCkKKyAgICAgICAgYSA9ICcwMTIzNCcKKyAgICAgICAgYyA9IGFbMF0KKyAgICAgICAgYyA9IGFbLTFdCisgICAgICAgIHMgPSBhWzA6NV0KKyAgICAgICAgcyA9IGFbOjVdCisgICAgICAgIHMgPSBhWzA6XQorICAgICAgICBzID0gYVs6XQorICAgICAgICBzID0gYVstNTpdCisgICAgICAgIHMgPSBhWzotMV0KKyAgICAgICAgcyA9IGFbLTQ6LTNdCisgICAgICAgICMgQSByb3VnaCB0ZXN0IG9mIFNGIGJ1ZyAxMzMzOTgyLiAgaHR0cDovL3B5dGhvbi5vcmcvc2YvMTMzMzk4MgorICAgICAgICAjIFRoZSB0ZXN0aW5nIGhlcmUgaXMgZmFpcmx5IGluY29tcGxldGUuCisgICAgICAgICMgVGVzdCBjYXNlcyBzaG91bGQgaW5jbHVkZTogY29tbWFzIHdpdGggMSBhbmQgMiBjb2xvbnMKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGRbMV0gPSAxCisgICAgICAgIGRbMSxdID0gMgorICAgICAgICBkWzEsMl0gPSAzCisgICAgICAgIGRbMSwyLDNdID0gNAorICAgICAgICBMID0gbGlzdChkKQorICAgICAgICBMLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihMKSwgJ1sxLCAoMSwpLCAoMSwgMiksICgxLCAyLCAzKV0nKQorCisgICAgZGVmIHRlc3RBdG9tcyhzZWxmKToKKyAgICAgICAgIyMjIGF0b206ICcoJyBbdGVzdGxpc3RdICcpJyB8ICdbJyBbdGVzdGxpc3RdICddJyB8ICd7JyBbZGljdG1ha2VyXSAnfScgfCAnYCcgdGVzdGxpc3QgJ2AnIHwgTkFNRSB8IE5VTUJFUiB8IFNUUklORworICAgICAgICAjIyMgZGljdG9yc2V0bWFrZXI6ICh0ZXN0ICc6JyB0ZXN0ICgnLCcgdGVzdCAnOicgdGVzdCkqIFsnLCddKSB8ICh0ZXN0ICgnLCcgdGVzdCkqIFsnLCddKQorCisgICAgICAgIHggPSAoMSkKKyAgICAgICAgeCA9ICgxIG9yIDIgb3IgMykKKyAgICAgICAgeCA9ICgxIG9yIDIgb3IgMywgMiwgMykKKworICAgICAgICB4ID0gW10KKyAgICAgICAgeCA9IFsxXQorICAgICAgICB4ID0gWzEgb3IgMiBvciAzXQorICAgICAgICB4ID0gWzEgb3IgMiBvciAzLCAyLCAzXQorICAgICAgICB4ID0gW10KKworICAgICAgICB4ID0ge30KKyAgICAgICAgeCA9IHsnb25lJzogMX0KKyAgICAgICAgeCA9IHsnb25lJzogMSx9CisgICAgICAgIHggPSB7J29uZScgb3IgJ3R3byc6IDEgb3IgMn0KKyAgICAgICAgeCA9IHsnb25lJzogMSwgJ3R3byc6IDJ9CisgICAgICAgIHggPSB7J29uZSc6IDEsICd0d28nOiAyLH0KKyAgICAgICAgeCA9IHsnb25lJzogMSwgJ3R3byc6IDIsICd0aHJlZSc6IDMsICdmb3VyJzogNCwgJ2ZpdmUnOiA1LCAnc2l4JzogNn0KKworICAgICAgICB4ID0geydvbmUnfQorICAgICAgICB4ID0geydvbmUnLCAxLH0KKyAgICAgICAgeCA9IHsnb25lJywgJ3R3bycsICd0aHJlZSd9CisgICAgICAgIHggPSB7MiwgMywgNCx9CisKKyAgICAgICAgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgICAgICB4ID0gZXZhbCgnYHhgJykKKyAgICAgICAgeCA9IGV2YWwoJ2AxIG9yIDIgb3IgM2AnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoJ2AxLDJgJyksICcoMSwgMiknKQorCisgICAgICAgIHggPSB4CisgICAgICAgIHggPSAneCcKKyAgICAgICAgeCA9IDEyMworCisgICAgIyMjIGV4cHJsaXN0OiBleHByICgnLCcgZXhwcikqIFsnLCddCisgICAgIyMjIHRlc3RsaXN0OiB0ZXN0ICgnLCcgdGVzdCkqIFsnLCddCisgICAgIyBUaGVzZSBoYXZlIGJlZW4gZXhlcmNpc2VkIGVub3VnaCBhYm92ZQorCisgICAgZGVmIHRlc3RDbGFzc2RlZihzZWxmKToKKyAgICAgICAgIyAnY2xhc3MnIE5BTUUgWycoJyBbdGVzdGxpc3RdICcpJ10gJzonIHN1aXRlCisgICAgICAgIGNsYXNzIEI6IHBhc3MKKyAgICAgICAgY2xhc3MgQjIoKTogcGFzcworICAgICAgICBjbGFzcyBDMShCKTogcGFzcworICAgICAgICBjbGFzcyBDMihCKTogcGFzcworICAgICAgICBjbGFzcyBEKEMxLCBDMiwgQik6IHBhc3MKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBtZXRoMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIG1ldGgyKHNlbGYsIGFyZyk6IHBhc3MKKyAgICAgICAgICAgIGRlZiBtZXRoMyhzZWxmLCBhMSwgYTIpOiBwYXNzCisgICAgICAgICMgZGVjb3JhdG9yOiAnQCcgZG90dGVkX25hbWUgWyAnKCcgW2FyZ2xpc3RdICcpJyBdIE5FV0xJTkUKKyAgICAgICAgIyBkZWNvcmF0b3JzOiBkZWNvcmF0b3IrCisgICAgICAgICMgZGVjb3JhdGVkOiBkZWNvcmF0b3JzIChjbGFzc2RlZiB8IGZ1bmNkZWYpCisgICAgICAgIGRlZiBjbGFzc19kZWNvcmF0b3IoeCk6CisgICAgICAgICAgICB4LmRlY29yYXRlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgIEBjbGFzc19kZWNvcmF0b3IKKyAgICAgICAgY2xhc3MgRzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChHLmRlY29yYXRlZCwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0RGljdGNvbXBzKHNlbGYpOgorICAgICAgICAjIGRpY3RvcnNldG1ha2VyOiAoICh0ZXN0ICc6JyB0ZXN0IChjb21wX2ZvciB8CisgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnLCcgdGVzdCAnOicgdGVzdCkqIFsnLCddKSkgfAorICAgICAgICAjICAgICAgICAgICAgICAgICAgICh0ZXN0IChjb21wX2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddKSkgKQorICAgICAgICBudW1zID0gWzEsIDIsIDNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2k6aSsxIGZvciBpIGluIG51bXN9LCB7MTogMiwgMjogMywgMzogNH0pCisKKyAgICBkZWYgdGVzdExpc3Rjb21wcyhzZWxmKToKKyAgICAgICAgIyBsaXN0IGNvbXByZWhlbnNpb24gdGVzdHMKKyAgICAgICAgbnVtcyA9IFsxLCAyLCAzLCA0LCA1XQorICAgICAgICBzdHJzID0gWyJBcHBsZSIsICJCYW5hbmEiLCAiQ29jb251dCJdCisgICAgICAgIHNwY3MgPSBbIiAgQXBwbGUiLCAiIEJhbmFuYSAiLCAiQ29jbyAgbnV0ICAiXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3Muc3RyaXAoKSBmb3IgcyBpbiBzcGNzXSwgWydBcHBsZScsICdCYW5hbmEnLCAnQ29jbyAgbnV0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzMgKiB4IGZvciB4IGluIG51bXNdLCBbMywgNiwgOSwgMTIsIDE1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbeCBmb3IgeCBpbiBudW1zIGlmIHggPiAyXSwgWzMsIDQsIDVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoaSwgcykgZm9yIGkgaW4gbnVtcyBmb3IgcyBpbiBzdHJzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKDEsICdBcHBsZScpLCAoMSwgJ0JhbmFuYScpLCAoMSwgJ0NvY29udXQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdBcHBsZScpLCAoMiwgJ0JhbmFuYScpLCAoMiwgJ0NvY29udXQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdBcHBsZScpLCAoMywgJ0JhbmFuYScpLCAoMywgJ0NvY29udXQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdBcHBsZScpLCAoNCwgJ0JhbmFuYScpLCAoNCwgJ0NvY29udXQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdBcHBsZScpLCAoNSwgJ0JhbmFuYScpLCAoNSwgJ0NvY29udXQnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyhpLCBzKSBmb3IgaSBpbiBudW1zIGZvciBzIGluIFtmIGZvciBmIGluIHN0cnMgaWYgIm4iIGluIGZdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKDEsICdCYW5hbmEnKSwgKDEsICdDb2NvbnV0JyksICgyLCAnQmFuYW5hJyksICgyLCAnQ29jb251dCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ0JhbmFuYScpLCAoMywgJ0NvY29udXQnKSwgKDQsICdCYW5hbmEnKSwgKDQsICdDb2NvbnV0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnQmFuYW5hJyksICg1LCAnQ29jb251dCcpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKGxhbWJkYSBhOlthKippIGZvciBpIGluIHJhbmdlKGErMSldKShqKSBmb3IgaiBpbiByYW5nZSg1KV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgW1sxXSwgWzEsIDFdLCBbMSwgMiwgNF0sIFsxLCAzLCA5LCAyN10sIFsxLCA0LCAxNiwgNjQsIDI1Nl1dKQorCisgICAgICAgIGRlZiB0ZXN0X2luX2Z1bmMobCk6CisgICAgICAgICAgICByZXR1cm4gW05vbmUgPCB4IDwgMyBmb3IgeCBpbiBsIGlmIHggPiAyXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9pbl9mdW5jKG51bXMpLCBbRmFsc2UsIEZhbHNlLCBGYWxzZV0pCisKKyAgICAgICAgZGVmIHRlc3RfbmVzdGVkX2Zyb250KCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtbeSBmb3IgeSBpbiBbeCwgeCArIDFdXSBmb3IgeCBpbiBbMSwzLDVdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1sxLCAyXSwgWzMsIDRdLCBbNSwgNl1dKQorCisgICAgICAgIHRlc3RfbmVzdGVkX2Zyb250KCkKKworICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgIltpLCBzIGZvciBpIGluIG51bXMgZm9yIHMgaW4gc3Ryc10iKQorICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgIlt4IGlmIHldIikKKworICAgICAgICBzdXBwbGllcnMgPSBbCisgICAgICAgICAgKDEsICJCb2VpbmciKSwKKyAgICAgICAgICAoMiwgIkZvcmQiKSwKKyAgICAgICAgICAoMywgIk1hY2RvbmFsZHMiKQorICAgICAgICBdCisKKyAgICAgICAgcGFydHMgPSBbCisgICAgICAgICAgKDEwLCAiQWlybGluZXIiKSwKKyAgICAgICAgICAoMjAsICJFbmdpbmUiKSwKKyAgICAgICAgICAoMzAsICJDaGVlc2VidXJnZXIiKQorICAgICAgICBdCisKKyAgICAgICAgc3VwcGFydCA9IFsKKyAgICAgICAgICAoMSwgMTApLCAoMSwgMjApLCAoMiwgMjApLCAoMywgMzApCisgICAgICAgIF0KKworICAgICAgICB4ID0gWworICAgICAgICAgIChzbmFtZSwgcG5hbWUpCisgICAgICAgICAgICBmb3IgKHNubywgc25hbWUpIGluIHN1cHBsaWVycworICAgICAgICAgICAgICBmb3IgKHBubywgcG5hbWUpIGluIHBhcnRzCisgICAgICAgICAgICAgICAgZm9yIChzcF9zbm8sIHNwX3BubykgaW4gc3VwcGFydAorICAgICAgICAgICAgICAgICAgaWYgc25vID09IHNwX3NubyBhbmQgcG5vID09IHNwX3BubworICAgICAgICBdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBbKCdCb2VpbmcnLCAnQWlybGluZXInKSwgKCdCb2VpbmcnLCAnRW5naW5lJyksICgnRm9yZCcsICdFbmdpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdNYWNkb25hbGRzJywgJ0NoZWVzZWJ1cmdlcicpXSkKKworICAgIGRlZiB0ZXN0R2VuZXhwcyhzZWxmKToKKyAgICAgICAgIyBnZW5lcmF0b3IgZXhwcmVzc2lvbiB0ZXN0cworICAgICAgICBnID0gKFt4IGZvciB4IGluIHJhbmdlKDEwKV0gZm9yIHggaW4gcmFuZ2UoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZy5uZXh0KCksIFt4IGZvciB4IGluIHJhbmdlKDEwKV0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGcubmV4dCgpCisgICAgICAgICAgICBzZWxmLmZhaWwoJ3Nob3VsZCBwcm9kdWNlIFN0b3BJdGVyYXRpb24gZXhjZXB0aW9uJykKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYSA9IDEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZyA9IChhIGZvciBkIGluIGEpCisgICAgICAgICAgICBnLm5leHQoKQorICAgICAgICAgICAgc2VsZi5mYWlsKCdzaG91bGQgcHJvZHVjZSBUeXBlRXJyb3InKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCgoeCwgeSkgZm9yIHggaW4gJ2FiY2QnIGZvciB5IGluICdhYmNkJyksIFsoeCwgeSkgZm9yIHggaW4gJ2FiY2QnIGZvciB5IGluICdhYmNkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCgoeCwgeSkgZm9yIHggaW4gJ2FiJyBmb3IgeSBpbiAneHknKSwgWyh4LCB5KSBmb3IgeCBpbiAnYWInIGZvciB5IGluICd4eSddKQorCisgICAgICAgIGEgPSBbeCBmb3IgeCBpbiByYW5nZSgxMCldCisgICAgICAgIGIgPSAoeCBmb3IgeCBpbiAoeSBmb3IgeSBpbiBhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oYiksIHN1bShbeCBmb3IgeCBpbiByYW5nZSgxMCldKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bSh4KioyIGZvciB4IGluIHJhbmdlKDEwKSksIHN1bShbeCoqMiBmb3IgeCBpbiByYW5nZSgxMCldKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oeCp4IGZvciB4IGluIHJhbmdlKDEwKSBpZiB4JTIpLCBzdW0oW3gqeCBmb3IgeCBpbiByYW5nZSgxMCkgaWYgeCUyXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHggZm9yIHggaW4gKHkgZm9yIHkgaW4gcmFuZ2UoMTApKSksIHN1bShbeCBmb3IgeCBpbiByYW5nZSgxMCldKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oeCBmb3IgeCBpbiAoeSBmb3IgeSBpbiAoeiBmb3IgeiBpbiByYW5nZSgxMCkpKSksIHN1bShbeCBmb3IgeCBpbiByYW5nZSgxMCldKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oeCBmb3IgeCBpbiBbeSBmb3IgeSBpbiAoeiBmb3IgeiBpbiByYW5nZSgxMCkpXSksIHN1bShbeCBmb3IgeCBpbiByYW5nZSgxMCldKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oeCBmb3IgeCBpbiAoeSBmb3IgeSBpbiAoeiBmb3IgeiBpbiByYW5nZSgxMCkgaWYgVHJ1ZSkpIGlmIFRydWUpLCBzdW0oW3ggZm9yIHggaW4gcmFuZ2UoMTApXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKHggZm9yIHggaW4gKHkgZm9yIHkgaW4gKHogZm9yIHogaW4gcmFuZ2UoMTApIGlmIFRydWUpIGlmIEZhbHNlKSBpZiBUcnVlKSwgMCkKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJmb28oeCBmb3IgeCBpbiByYW5nZSgxMCksIDEwMCkiKQorICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImZvbygxMDAsIHggZm9yIHggaW4gcmFuZ2UoMTApKSIpCisKKyAgICBkZWYgdGVzdENvbXByZWhlbnNpb25TcGVjaWFscyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IGZvciBvdXRtb3N0IGl0ZXJhYmxlIHByZWNvbXB1dGF0aW9uCisgICAgICAgIHggPSAxMDsgZyA9IChpIGZvciBpIGluIHJhbmdlKHgpKTsgeCA9IDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGlzdChnKSksIDEwKQorCisgICAgICAgICMgVGhpcyBzaG91bGQgaG9sZCwgc2luY2Ugd2UncmUgb25seSBwcmVjb21wdXRpbmcgb3V0bW9zdCBpdGVyYWJsZS4KKyAgICAgICAgeCA9IDEwOyB0ID0gRmFsc2U7IGcgPSAoKGksaikgZm9yIGkgaW4gcmFuZ2UoeCkgaWYgdCBmb3IgaiBpbiByYW5nZSh4KSkKKyAgICAgICAgeCA9IDU7IHQgPSBUcnVlOworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoaSxqKSBmb3IgaSBpbiByYW5nZSgxMCkgZm9yIGogaW4gcmFuZ2UoNSldLCBsaXN0KGcpKQorCisgICAgICAgICMgR3JhbW1hciBhbGxvd3MgbXVsdGlwbGUgYWRqYWNlbnQgJ2lmJ3MgaW4gbGlzdGNvbXBzIGFuZCBnZW5leHBzLAorICAgICAgICAjIGV2ZW4gdGhvdWdoIGl0J3Mgc2lsbHkuIE1ha2Ugc3VyZSBpdCB3b3JrcyAoaWZlbHNlIGJyb2tlIHRoaXMuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsgeCBmb3IgeCBpbiByYW5nZSgxMCkgaWYgeCAlIDIgaWYgeCAlIDMgXSwgWzEsIDUsIDddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCBmb3IgeCBpbiByYW5nZSgxMCkgaWYgeCAlIDIgaWYgeCAlIDMpLCBbMSwgNSwgN10pCisKKyAgICAgICAgIyB2ZXJpZnkgdW5wYWNraW5nIHNpbmdsZSBlbGVtZW50IHR1cGxlcyBpbiBsaXN0Y29tcC9nZW5leHAuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3ggZm9yIHgsIGluIFsoNCwpLCAoNSwpLCAoNiwpXV0sIFs0LCA1LCA2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHggZm9yIHgsIGluIFsoNywpLCAoOCwpLCAoOSwpXSksIFs3LCA4LCA5XSkKKworICAgIGRlZiB0ZXN0X3dpdGhfc3RhdGVtZW50KHNlbGYpOgorICAgICAgICBjbGFzcyBtYW5hZ2VyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoMSwgMikKKyAgICAgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggbWFuYWdlcigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG1hbmFnZXIoKSBhcyB4OgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG1hbmFnZXIoKSBhcyAoeCwgeSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggbWFuYWdlcigpLCBtYW5hZ2VyKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggbWFuYWdlcigpIGFzIHgsIG1hbmFnZXIoKSBhcyB5OgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG1hbmFnZXIoKSBhcyB4LCBtYW5hZ2VyKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdElmRWxzZUV4cHIoc2VsZik6CisgICAgICAgICMgVGVzdCBpZmVsc2UgZXhwcmVzc2lvbnMgaW4gdmFyaW91cyBjYXNlcworICAgICAgICBkZWYgX2NoZWNrZXZhbChtc2csIHJldCk6CisgICAgICAgICAgICAiaGVscGVyIHRvIGNoZWNrIHRoYXQgZXZhbHVhdGlvbiBvZiBleHByZXNzaW9ucyBpcyBkb25lIGNvcnJlY3RseSIKKyAgICAgICAgICAgIHByaW50IHgKKyAgICAgICAgICAgIHJldHVybiByZXQKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsgeCgpIGZvciB4IGluIGxhbWJkYTogVHJ1ZSwgbGFtYmRhOiBGYWxzZSBpZiB4KCkgXSwgW1RydWVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsgeCgpIGZvciB4IGluIChsYW1iZGE6IFRydWUsIGxhbWJkYTogRmFsc2UpIGlmIHgoKSBdLCBbVHJ1ZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyB4KEZhbHNlKSBmb3IgeCBpbiAobGFtYmRhIHg6IEZhbHNlIGlmIHggZWxzZSBUcnVlLCBsYW1iZGEgeDogVHJ1ZSBpZiB4IGVsc2UgRmFsc2UpIGlmIHgoRmFsc2UpIF0sIFtUcnVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNSBpZiAxIGVsc2UgX2NoZWNrZXZhbCgiY2hlY2sgMSIsIDApKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoX2NoZWNrZXZhbCgiY2hlY2sgMiIsIDApIGlmIDAgZWxzZSA1KSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNSBhbmQgNiBpZiAwIGVsc2UgMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCg1IGFuZCA2KSBpZiAwIGVsc2UgMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDUgYW5kICg2IGlmIDEgZWxzZSAxKSksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAgb3IgX2NoZWNrZXZhbCgiY2hlY2sgMyIsIDIpIGlmIDAgZWxzZSAzKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMSBvciBfY2hlY2tldmFsKCJjaGVjayA0IiwgMikgaWYgMSBlbHNlIF9jaGVja2V2YWwoImNoZWNrIDUiLCAzKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAgb3IgNSBpZiAxIGVsc2UgX2NoZWNrZXZhbCgiY2hlY2sgNiIsIDMpKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobm90IDUgaWYgMSBlbHNlIDEpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobm90IDUgaWYgMCBlbHNlIDEpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg2ICsgMSBpZiAxIGVsc2UgMiksIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDYgLSAxIGlmIDEgZWxzZSAyKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNiAqIDIgaWYgMSBlbHNlIDQpLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNiAvIDIgaWYgMSBlbHNlIDMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg2IDwgNCBpZiAwIGVsc2UgMiksIDIpCisKKyAgICBkZWYgdGVzdF9wYXJlbl9ldmFsdWF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE2IC8vICg0IC8vIDIpLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxNiAvLyA0KSAvLyAyLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE2IC8vIDQgLy8gMiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEZhbHNlIGlzICgyIGlzIDMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChGYWxzZSBpcyAyKSBpcyAzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEZhbHNlIGlzIDIgaXMgMykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICAgICAgKCJiYWNrcXVvdGUgbm90IHN1cHBvcnRlZCIsIFN5bnRheFdhcm5pbmcpLAorICAgICAgICAgICAgKCJ0dXBsZSBwYXJhbWV0ZXIgdW5wYWNraW5nIGhhcyBiZWVuIHJlbW92ZWQiLCBTeW50YXhXYXJuaW5nKSwKKyAgICAgICAgICAgICgicGFyZW50aGVzaXplZCBhcmd1bWVudCBuYW1lcyBhcmUgaW52YWxpZCIsIFN5bnRheFdhcm5pbmcpLAorICAgICAgICAgICAgKCJjbGFzc2ljIGludCBkaXZpc2lvbiIsIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICAoIi4rIG5vdCBzdXBwb3J0ZWQgaW4gMy54IiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHJ1bl91bml0dGVzdChUb2tlblRlc3RzLCBHcmFtbWFyVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2dycC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2dycC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmQyYmFmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfZ3JwLnB5CkBAIC0wLDAgKzEsOTcgQEAKKyIiIlRlc3Qgc2NyaXB0IGZvciB0aGUgZ3JwIG1vZHVsZS4iIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitncnAgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnZ3JwJykKKworY2xhc3MgR3JvdXBEYXRhYmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBjaGVja192YWx1ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgICMgY2hlY2sgdGhhdCBhIGdycCB0dXBsZSBoYXMgdGhlIGVudHJpZXMgYW5kCisgICAgICAgICMgYXR0cmlidXRlcyBwcm9taXNlZCBieSB0aGUgZG9jcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2YWx1ZSksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbMF0sIHZhbHVlLmdyX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2YWx1ZS5ncl9uYW1lLCBiYXNlc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlWzFdLCB2YWx1ZS5ncl9wYXNzd2QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2YWx1ZS5ncl9wYXNzd2QsIGJhc2VzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbMl0sIHZhbHVlLmdyX2dpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbHVlLmdyX2dpZCwgKGxvbmcsIGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbM10sIHZhbHVlLmdyX21lbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbHVlLmdyX21lbSwgbGlzdCkKKworICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgZW50cmllcyA9IGdycC5nZXRncmFsbCgpCisKKyAgICAgICAgZm9yIGUgaW4gZW50cmllczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdmFsdWUoZSkKKworICAgICAgICBpZiBsZW4oZW50cmllcykgPiAxMDAwOiAgIyBIdWdlIGdyb3VwIGZpbGUgKE5JUz8pIC0tIHNraXAgdGhlIHJlc3QKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZvciBlIGluIGVudHJpZXM6CisgICAgICAgICAgICBlMiA9IGdycC5nZXRncmdpZChlLmdyX2dpZCkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdmFsdWUoZTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUyLmdyX2dpZCwgZS5ncl9naWQpCisgICAgICAgICAgICBuYW1lID0gZS5ncl9uYW1lCisgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJysnKSBvciBuYW1lLnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgICAgICAjIE5JUy1yZWxhdGVkIGVudHJ5CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGUyID0gZ3JwLmdldGdybmFtKG5hbWUpCisgICAgICAgICAgICBzZWxmLmNoZWNrX3ZhbHVlKGUyKQorICAgICAgICAgICAgIyBUaGVyZSBhcmUgaW5zdGFuY2VzIHdoZXJlIGdldGdyYWxsKCkgcmV0dXJucyBncm91cCBuYW1lcyBpbgorICAgICAgICAgICAgIyBsb3dlcmNhc2Ugd2hpbGUgZ2V0Z3JnaWQoKSByZXR1cm5zIHByb3BlciBjYXNpbmcuCisgICAgICAgICAgICAjIERpc2NvdmVyZWQgb24gVWJ1bnR1IDUuMDQgKGN1c3RvbSkuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUyLmdyX25hbWUubG93ZXIoKSwgbmFtZS5sb3dlcigpKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdycC5nZXRncmdpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBncnAuZ2V0Z3JuYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ3JwLmdldGdyYWxsLCA0MikKKworICAgICAgICAjIHRyeSB0byBnZXQgc29tZSBlcnJvcnMKKyAgICAgICAgYnluYW1lcyA9IHt9CisgICAgICAgIGJ5Z2lkcyA9IHt9CisgICAgICAgIGZvciAobiwgcCwgZywgbWVtKSBpbiBncnAuZ2V0Z3JhbGwoKToKKyAgICAgICAgICAgIGlmIG5vdCBuIG9yIG4gPT0gJysnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlICMgc2tpcCBOSVMgZW50cmllcyBldGMuCisgICAgICAgICAgICBieW5hbWVzW25dID0gZworICAgICAgICAgICAgYnlnaWRzW2ddID0gbgorCisgICAgICAgIGFsbG5hbWVzID0gYnluYW1lcy5rZXlzKCkKKyAgICAgICAgbmFtZWkgPSAwCisgICAgICAgIGZha2VuYW1lID0gYWxsbmFtZXNbbmFtZWldCisgICAgICAgIHdoaWxlIGZha2VuYW1lIGluIGJ5bmFtZXM6CisgICAgICAgICAgICBjaGFycyA9IGxpc3QoZmFrZW5hbWUpCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKGNoYXJzKSk6CisgICAgICAgICAgICAgICAgaWYgY2hhcnNbaV0gPT0gJ3onOgorICAgICAgICAgICAgICAgICAgICBjaGFyc1tpXSA9ICdBJworICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsaWYgY2hhcnNbaV0gPT0gJ1onOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNoYXJzW2ldID0gY2hyKG9yZChjaGFyc1tpXSkgKyAxKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuYW1laSA9IG5hbWVpICsgMQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZmFrZW5hbWUgPSBhbGxuYW1lc1tuYW1laV0KKyAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBzaG91bGQgbmV2ZXIgaGFwcGVuLi4uIGlmIHNvLCBqdXN0IGZvcmdldCBpdAorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmFrZW5hbWUgPSAnJy5qb2luKGNoYXJzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBncnAuZ2V0Z3JuYW0sIGZha2VuYW1lKQorCisgICAgICAgICMgQ2hvb3NlIGEgbm9uLWV4aXN0ZW50IGdpZC4KKyAgICAgICAgZmFrZWdpZCA9IDQxMjcKKyAgICAgICAgd2hpbGUgZmFrZWdpZCBpbiBieWdpZHM6CisgICAgICAgICAgICBmYWtlZ2lkID0gKGZha2VnaWQgKiAzKSAlIDB4MTAwMDAKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZ3JwLmdldGdyZ2lkLCBmYWtlZ2lkKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChHcm91cERhdGFiYXNlVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2d6aXAucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nemlwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MmM1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9nemlwLnB5CkBAIC0wLDAgKzEsMzA0IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisiIiJUZXN0IHNjcmlwdCBmb3IgdGhlIGd6aXAgbW9kdWxlLgorIiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBvcworaW1wb3J0IGlvCitpbXBvcnQgc3RydWN0CitnemlwID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2d6aXAnKQorCitkYXRhMSA9ICIiIiAgaW50IGxlbmd0aD1ERUZBVUxUQUxMT0MsIGVyciA9IFpfT0s7CisgIFB5T2JqZWN0ICpSZXRWYWw7CisgIGludCBmbHVzaG1vZGUgPSBaX0ZJTklTSDsKKyAgdW5zaWduZWQgbG9uZyBzdGFydF90b3RhbF9vdXQ7CisKKyIiIgorCitkYXRhMiA9ICIiIi8qIHpsaWJtb2R1bGUuYyAtLSBnemlwLWNvbXBhdGlibGUgZGF0YSBjb21wcmVzc2lvbiAqLworLyogU2VlIGh0dHA6Ly93d3cuZ3ppcC5vcmcvemxpYi8KKy8qIFNlZSBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsIGZvciBXaW5kb3dzICovCisiIiIKKworCitjbGFzcyBUZXN0R3ppcCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZmlsZW5hbWUgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoc2VsZi5maWxlbmFtZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhzZWxmLmZpbGVuYW1lKQorCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGExICogNTApCisKKyAgICAgICAgICAgICMgVHJ5IGZsdXNoIGFuZCBmaWxlbm8uCisgICAgICAgICAgICBmLmZsdXNoKCkKKyAgICAgICAgICAgIGYuZmlsZW5vKCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICdmc3luYycpOgorICAgICAgICAgICAgICAgIG9zLmZzeW5jKGYuZmlsZW5vKCkpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIFRlc3QgbXVsdGlwbGUgY2xvc2UoKSBjYWxscy4KKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQorICAgICAgICAjIFRyeSByZWFkaW5nLgorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZCA9IGYucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGF0YTEqNTApCisKKyAgICBkZWYgdGVzdF9yZWFkX3VuaXZlcnNhbF9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNTE0ODogUmVhZGluZyBicmVha3Mgd2hlbiBtb2RlIGNvbnRhaW5zICdVJy4KKyAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyVScpIGFzIGY6CisgICAgICAgICAgICBkID0gZi5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkYXRhMSo1MCkKKworICAgIGRlZiB0ZXN0X2lvX29uX2Nsb3NlZF9vYmplY3Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IEkvTyBvcGVyYXRpb25zIG9uIGNsb3NlZCBHemlwRmlsZSBvYmplY3RzIHJhaXNlIGEKKyAgICAgICAgIyBWYWx1ZUVycm9yLCBqdXN0IGxpa2UgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25zIG9uIGZpbGUgb2JqZWN0cy4KKworICAgICAgICAjIFdyaXRlIHRvIGEgZmlsZSwgb3BlbiBpdCBmb3IgcmVhZGluZywgdGhlbiBjbG9zZSBpdC4KKyAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKKyAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3InKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGYucmVhZCgxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBmLnRlbGwoKQorICAgICAgICAjIE9wZW4gdGhlIGZpbGUgZm9yIHdyaXRpbmcsIHRoZW4gY2xvc2UgaXQuCisgICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd3JykKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBmLndyaXRlKCcnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZi5mbHVzaCgpCisKKyAgICBkZWYgdGVzdF9hcHBlbmQoc2VsZik6CisgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCisgICAgICAgICMgQXBwZW5kIHRvIHRoZSBwcmV2aW91cyBmaWxlCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAnYWInKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkYXRhMiAqIDE1KQorCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgZCA9IGYucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgKGRhdGExKjUwKSArIChkYXRhMioxNSkpCisKKyAgICBkZWYgdGVzdF9tYW55X2FwcGVuZChzZWxmKToKKyAgICAgICAgIyBCdWcgIzEwNzQyNjEgd2FzIHRyaWdnZXJlZCB3aGVuIHJlYWRpbmcgYSBmaWxlIHRoYXQgY29udGFpbmVkCisgICAgICAgICMgbWFueSwgbWFueSBtZW1iZXJzLiAgQ3JlYXRlIHN1Y2ggYSBmaWxlIGFuZCB2ZXJpZnkgdGhhdCByZWFkaW5nIGl0CisgICAgICAgICMgd29ya3MuCisgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICd3YicsIDkpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdhJykKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgMjAwKToKKyAgICAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJhYiIsIDkpIGFzIGY6ICMgYXBwZW5kCisgICAgICAgICAgICAgICAgZi53cml0ZSgnYScpCisKKyAgICAgICAgIyBUcnkgcmVhZGluZyB0aGUgZmlsZQorICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyB6Z2ZpbGU6CisgICAgICAgICAgICBjb250ZW50cyA9ICIiCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHp0eHQgPSB6Z2ZpbGUucmVhZCg4MTkyKQorICAgICAgICAgICAgICAgIGNvbnRlbnRzICs9IHp0eHQKKyAgICAgICAgICAgICAgICBpZiBub3QgenR4dDogYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywgJ2EnKjIwMSkKKworICAgIGRlZiB0ZXN0X2J1ZmZlcmVkX3JlYWRlcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzQ3MTogYSBHemlwRmlsZSBjYW4gYmUgd3JhcHBlZCBpbiBhIEJ1ZmZlcmVkUmVhZGVyIGZvcgorICAgICAgICAjIHBlcmZvcm1hbmNlLgorICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQorCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBpby5CdWZmZXJlZFJlYWRlcihmKSBhcyByOgorICAgICAgICAgICAgICAgIGxpbmVzID0gW2xpbmUgZm9yIGxpbmUgaW4gcl0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCA1MCAqIGRhdGExLnNwbGl0bGluZXMoVHJ1ZSkpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKKyAgICAgICAgIyBUcnkgLnJlYWRsaW5lKCkgd2l0aCB2YXJ5aW5nIGxpbmUgbGVuZ3RocworCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgbGluZV9sZW5ndGggPSAwCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIEwgPSBmLnJlYWRsaW5lKGxpbmVfbGVuZ3RoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBMIGFuZCBsaW5lX2xlbmd0aCAhPSAwOiBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oTCkgPD0gbGluZV9sZW5ndGgpCisgICAgICAgICAgICAgICAgbGluZV9sZW5ndGggPSAobGluZV9sZW5ndGggKyAxKSAlIDUwCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CisgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCisgICAgICAgICMgVHJ5IC5yZWFkbGluZXMoKQorCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgTCA9IGYucmVhZGxpbmVzKCkKKworICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgTCA9IGYucmVhZGxpbmVzKDE1MCkKKyAgICAgICAgICAgICAgICBpZiBMID09IFtdOiBicmVhaworCisgICAgZGVmIHRlc3Rfc2Vla19yZWFkKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQorICAgICAgICAjIFRyeSBzZWVrLCByZWFkIHRlc3QKKworICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSkgYXMgZjoKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgb2xkcG9zID0gZi50ZWxsKCkKKyAgICAgICAgICAgICAgICBsaW5lMSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lMTogYnJlYWsKKyAgICAgICAgICAgICAgICBuZXdwb3MgPSBmLnRlbGwoKQorICAgICAgICAgICAgICAgIGYuc2VlayhvbGRwb3MpICAjIG5lZ2F0aXZlIHNlZWsKKyAgICAgICAgICAgICAgICBpZiBsZW4obGluZTEpPjEwOgorICAgICAgICAgICAgICAgICAgICBhbW91bnQgPSAxMAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGFtb3VudCA9IGxlbihsaW5lMSkKKyAgICAgICAgICAgICAgICBsaW5lMiA9IGYucmVhZChhbW91bnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMVs6YW1vdW50XSwgbGluZTIpCisgICAgICAgICAgICAgICAgZi5zZWVrKG5ld3BvcykgICMgcG9zaXRpdmUgc2VlaworCisgICAgZGVmIHRlc3Rfc2Vla193aGVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCisgICAgICAgICMgVHJ5IHNlZWsod2hlbmNlPTEpLCByZWFkIHRlc3QKKworICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSkgYXMgZjoKKyAgICAgICAgICAgIGYucmVhZCgxMCkKKyAgICAgICAgICAgIGYuc2VlaygxMCwgd2hlbmNlPTEpCisgICAgICAgICAgICB5ID0gZi5yZWFkKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIGRhdGExWzIwOjMwXSkKKworICAgIGRlZiB0ZXN0X3NlZWtfd3JpdGUoc2VsZik6CisgICAgICAgICMgVHJ5IHNlZWssIHdyaXRlIHRlc3QKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGZvciBwb3MgaW4gcmFuZ2UoMCwgMjU2LCAxNik6CisgICAgICAgICAgICAgICAgZi5zZWVrKHBvcykKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdHWlxuJykKKworICAgIGRlZiB0ZXN0X21vZGUoc2VsZik6CisgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubXlmaWxlb2JqLm1vZGUsICdyYicpCisKKyAgICBkZWYgdGVzdF8xNjQ3NDg0KHNlbGYpOgorICAgICAgICBmb3IgbW9kZSBpbiAoJ3diJywgJ3JiJyk6CisgICAgICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihmLCAibmFtZSIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5uYW1lLCBzZWxmLmZpbGVuYW1lKQorCisgICAgZGVmIHRlc3RfbXRpbWUoc2VsZik6CisgICAgICAgIG10aW1lID0gMTIzNDU2Nzg5CisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAndycsIG10aW1lID0gbXRpbWUpIGFzIGZXcml0ZToKKyAgICAgICAgICAgIGZXcml0ZS53cml0ZShkYXRhMSkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGZSZWFkOgorICAgICAgICAgICAgZGF0YVJlYWQgPSBmUmVhZC5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YVJlYWQsIGRhdGExKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZlJlYWQsICdtdGltZScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmUmVhZC5tdGltZSwgbXRpbWUpCisKKyAgICBkZWYgdGVzdF9tZXRhZGF0YShzZWxmKToKKyAgICAgICAgbXRpbWUgPSAxMjM0NTY3ODkKKworICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3cnLCBtdGltZSA9IG10aW1lKSBhcyBmV3JpdGU6CisgICAgICAgICAgICBmV3JpdGUud3JpdGUoZGF0YTEpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGZSZWFkOgorICAgICAgICAgICAgIyBzZWUgUkZDIDE5NTI6IGh0dHA6Ly93d3cuZmFxcy5vcmcvcmZjcy9yZmMxOTUyLmh0bWwKKworICAgICAgICAgICAgaWRCeXRlcyA9IGZSZWFkLnJlYWQoMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWRCeXRlcywgJ1x4MWZceDhiJykgIyBnemlwIElECisKKyAgICAgICAgICAgIGNtQnl0ZSA9IGZSZWFkLnJlYWQoMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21CeXRlLCAnXHgwOCcpICMgZGVmbGF0ZQorCisgICAgICAgICAgICBmbGFnc0J5dGUgPSBmUmVhZC5yZWFkKDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsYWdzQnl0ZSwgJ1x4MDgnKSAjIG9ubHkgdGhlIEZOQU1FIGZsYWcgaXMgc2V0CisKKyAgICAgICAgICAgIG10aW1lQnl0ZXMgPSBmUmVhZC5yZWFkKDQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG10aW1lQnl0ZXMsIHN0cnVjdC5wYWNrKCc8aScsIG10aW1lKSkgIyBsaXR0bGUtZW5kaWFuCisKKyAgICAgICAgICAgIHhmbEJ5dGUgPSBmUmVhZC5yZWFkKDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhmbEJ5dGUsICdceDAyJykgIyBtYXhpbXVtIGNvbXByZXNzaW9uCisKKyAgICAgICAgICAgIG9zQnl0ZSA9IGZSZWFkLnJlYWQoMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3NCeXRlLCAnXHhmZicpICMgT1MgInVua25vd24iIChPUy1pbmRlcGVuZGVudCkKKworICAgICAgICAgICAgIyBTaW5jZSB0aGUgRk5BTUUgZmxhZyBpcyBzZXQsIHRoZSB6ZXJvLXRlcm1pbmF0ZWQgZmlsZW5hbWUgZm9sbG93cy4KKyAgICAgICAgICAgICMgUkZDIDE5NTIgc3BlY2lmaWVzIHRoYXQgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgaW5wdXQgZmlsZSwgaWYgYW55LgorICAgICAgICAgICAgIyBIb3dldmVyLCB0aGUgZ3ppcCBtb2R1bGUgZGVmYXVsdHMgdG8gc3RvcmluZyB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0CisgICAgICAgICAgICAjIGZpbGUgaW4gdGhpcyBmaWVsZC4KKyAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5maWxlbmFtZS5lbmNvZGUoJ0xhdGluLTEnKSArICdceDAwJworICAgICAgICAgICAgbmFtZUJ5dGVzID0gZlJlYWQucmVhZChsZW4oZXhwZWN0ZWQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lQnl0ZXMsIGV4cGVjdGVkKQorCisgICAgICAgICAgICAjIFNpbmNlIG5vIG90aGVyIGZsYWdzIHdlcmUgc2V0LCB0aGUgaGVhZGVyIGVuZHMgaGVyZS4KKyAgICAgICAgICAgICMgUmF0aGVyIHRoYW4gcHJvY2VzcyB0aGUgY29tcHJlc3NlZCBkYXRhLCBsZXQncyBzZWVrIHRvIHRoZSB0cmFpbGVyLgorICAgICAgICAgICAgZlJlYWQuc2Vlayhvcy5zdGF0KHNlbGYuZmlsZW5hbWUpLnN0X3NpemUgLSA4KQorCisgICAgICAgICAgICBjcmMzMkJ5dGVzID0gZlJlYWQucmVhZCg0KSAjIENSQzMyIG9mIHVuY29tcHJlc3NlZCBkYXRhIFtkYXRhMV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JjMzJCeXRlcywgJ1x4YWZceGQ3ZFx4ODMnKQorCisgICAgICAgICAgICBpc2l6ZUJ5dGVzID0gZlJlYWQucmVhZCg0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2l6ZUJ5dGVzLCBzdHJ1Y3QucGFjaygnPGknLCBsZW4oZGF0YTEpKSkKKworICAgIGRlZiB0ZXN0X3dpdGhfb3BlbihzZWxmKToKKyAgICAgICAgIyBHemlwRmlsZSBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInh4eCIpCisgICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICJyYiIpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGY6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiX19lbnRlcl9fIG9uIGEgY2xvc2VkIGZpbGUgZGlkbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgICAgIDEgLy8gMAorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIjEgLy8gMCBkaWRuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIikKKworICAgIGRlZiB0ZXN0X3plcm9fcGFkZGVkX2ZpbGUoc2VsZik6CisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkYXRhMSAqIDUwKQorCisgICAgICAgICMgUGFkIHRoZSBmaWxlIHdpdGggemVyb2VzCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiXHgwMCIgKiA1MCkKKworICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIGQgPSBmLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkYXRhMSAqIDUwLCAiSW5jb3JyZWN0IGRhdGEgaW4gZmlsZSIpCisKKyAgICBkZWYgdGVzdF9maWxlb2JqX2Zyb21fZmRvcGVuKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMzc4MTogQ3JlYXRpbmcgYSBHemlwRmlsZSB1c2luZyBhIGZpbGVvYmogZnJvbSBvcy5mZG9wZW4oKQorICAgICAgICAjIHNob3VsZCBub3QgZW1iZWQgdGhlIGZha2UgZmlsZW5hbWUgIjxmZG9wZW4+IiBpbiB0aGUgb3V0cHV0IGZpbGUuCisgICAgICAgIGZkID0gb3Mub3BlbihzZWxmLmZpbGVuYW1lLCBvcy5PX1dST05MWSB8IG9zLk9fQ1JFQVQpCisgICAgICAgIHdpdGggb3MuZmRvcGVuKGZkLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKGZpbGVvYmo9ZiwgbW9kZT0idyIpIGFzIGc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLm5hbWUsICIiKQorCisgICAgZGVmIHRlc3RfcmVhZF93aXRoX2V4dHJhKHNlbGYpOgorICAgICAgICAjIEd6aXAgZGF0YSB3aXRoIGFuIGV4dHJhIGZpZWxkCisgICAgICAgIGd6ZGF0YSA9IChiJ1x4MWZceDhiXHgwOFx4MDRceGIyXHgxN2NRXHgwMlx4ZmYnCisgICAgICAgICAgICAgICAgICBiJ1x4MDVceDAwRXh0cmEnCisgICAgICAgICAgICAgICAgICBiJ1x4MGJJLS5ceDAxXHgwMDJceGQxTXhceDA0XHgwMFx4MDBceDAwJykKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKGZpbGVvYmo9aW8uQnl0ZXNJTyhnemRhdGEpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYidUZXN0JykKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEd6aXApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2hhc2gucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9oYXNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYzdkY2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9oYXNoLnB5CkBAIC0wLDAgKzEsMjQ4IEBACisjIHRlc3QgdGhlIGludmFyaWFudCB0aGF0CisjICAgaWZmIGE9PWIgdGhlbiBoYXNoKGEpPT1oYXNoKGIpCisjCisjIEFsc28gdGVzdCB0aGF0IGhhc2ggaW1wbGVtZW50YXRpb25zIGFyZSBpbmhlcml0ZWQgYXMgZXhwZWN0ZWQKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3RydWN0CitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IEhhc2hhYmxlCisKK0lTXzY0QklUID0gKHN0cnVjdC5jYWxjc2l6ZSgnbCcpID09IDgpCisKKworY2xhc3MgSGFzaEVxdWFsaXR5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNhbWVfaGFzaChzZWxmLCAqb2JqbGlzdCk6CisgICAgICAgICMgSGFzaCBlYWNoIG9iamVjdCBnaXZlbiBhbmQgZmFpbCBpZgorICAgICAgICAjIHRoZSBoYXNoIHZhbHVlcyBhcmUgbm90IGFsbCB0aGUgc2FtZS4KKyAgICAgICAgaGFzaGVkID0gbWFwKGhhc2gsIG9iamxpc3QpCisgICAgICAgIGZvciBoIGluIGhhc2hlZFsxOl06CisgICAgICAgICAgICBpZiBoICE9IGhhc2hlZFswXToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImhhc2hlZCB2YWx1ZXMgZGlmZmVyOiAlciIgJSAob2JqbGlzdCwpKQorCisgICAgZGVmIHRlc3RfbnVtZXJpY19saXRlcmFscyhzZWxmKToKKyAgICAgICAgc2VsZi5zYW1lX2hhc2goMSwgMUwsIDEuMCwgMS4wKzAuMGopCisgICAgICAgIHNlbGYuc2FtZV9oYXNoKDAsIDBMLCAwLjAsIDAuMCswLjBqKQorICAgICAgICBzZWxmLnNhbWVfaGFzaCgtMSwgLTFMLCAtMS4wLCAtMS4wKzAuMGopCisgICAgICAgIHNlbGYuc2FtZV9oYXNoKC0yLCAtMkwsIC0yLjAsIC0yLjArMC4waikKKworICAgIGRlZiB0ZXN0X2NvZXJjZWRfaW50ZWdlcnMoc2VsZik6CisgICAgICAgIHNlbGYuc2FtZV9oYXNoKGludCgxKSwgbG9uZygxKSwgZmxvYXQoMSksIGNvbXBsZXgoMSksCisgICAgICAgICAgICAgICAgICAgICAgIGludCgnMScpLCBmbG9hdCgnMS4wJykpCisgICAgICAgIHNlbGYuc2FtZV9oYXNoKGludCgtMioqMzEpLCBsb25nKC0yKiozMSksIGZsb2F0KC0yKiozMSkpCisgICAgICAgIHNlbGYuc2FtZV9oYXNoKGludCgxLTIqKjMxKSwgbG9uZygxLTIqKjMxKSwgZmxvYXQoMS0yKiozMSkpCisgICAgICAgIHNlbGYuc2FtZV9oYXNoKGludCgyKiozMS0xKSwgbG9uZygyKiozMS0xKSwgZmxvYXQoMioqMzEtMSkpCisgICAgICAgICMgZm9yIDY0LWJpdCBwbGF0Zm9ybXMKKyAgICAgICAgc2VsZi5zYW1lX2hhc2goaW50KDIqKjMxKSwgbG9uZygyKiozMSksIGZsb2F0KDIqKjMxKSkKKyAgICAgICAgc2VsZi5zYW1lX2hhc2goaW50KC0yKio2MyksIGxvbmcoLTIqKjYzKSwgZmxvYXQoLTIqKjYzKSkKKyAgICAgICAgc2VsZi5zYW1lX2hhc2goaW50KDEtMioqNjMpLCBsb25nKDEtMioqNjMpKQorICAgICAgICBzZWxmLnNhbWVfaGFzaChpbnQoMioqNjMtMSksIGxvbmcoMioqNjMtMSkpCisgICAgICAgIHNlbGYuc2FtZV9oYXNoKGxvbmcoMioqNjMpLCBmbG9hdCgyKio2MykpCisKKyAgICBkZWYgdGVzdF9jb2VyY2VkX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgc2VsZi5zYW1lX2hhc2gobG9uZygxLjIzZTMwMCksIGZsb2F0KDEuMjNlMzAwKSkKKyAgICAgICAgc2VsZi5zYW1lX2hhc2goZmxvYXQoMC41KSwgY29tcGxleCgwLjUsIDAuMCkpCisKKworX2RlZmF1bHRfaGFzaCA9IG9iamVjdC5fX2hhc2hfXworY2xhc3MgRGVmYXVsdEhhc2gob2JqZWN0KTogcGFzcworCitfRklYRURfSEFTSF9WQUxVRSA9IDQyCitjbGFzcyBGaXhlZEhhc2gob2JqZWN0KToKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBfRklYRURfSEFTSF9WQUxVRQorCitjbGFzcyBPbmx5RXF1YWxpdHkob2JqZWN0KToKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIKKyAgICAjIFRyaWNrIHRvIHN1cHByZXNzIFB5M2sgd2FybmluZyBpbiAyLngKKyAgICBfX2hhc2hfXyA9IE5vbmUKK2RlbCBPbmx5RXF1YWxpdHkuX19oYXNoX18KKworY2xhc3MgT25seUluZXF1YWxpdHkob2JqZWN0KToKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYgaXMgbm90IG90aGVyCisKK2NsYXNzIE9ubHlDbXAob2JqZWN0KToKKyAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBjbXAoaWQoc2VsZiksIGlkKG90aGVyKSkKKyAgICAjIFRyaWNrIHRvIHN1cHByZXNzIFB5M2sgd2FybmluZyBpbiAyLngKKyAgICBfX2hhc2hfXyA9IE5vbmUKK2RlbCBPbmx5Q21wLl9faGFzaF9fCisKK2NsYXNzIEluaGVyaXRlZEhhc2hXaXRoRXF1YWxpdHkoRml4ZWRIYXNoLCBPbmx5RXF1YWxpdHkpOiBwYXNzCitjbGFzcyBJbmhlcml0ZWRIYXNoV2l0aEluZXF1YWxpdHkoRml4ZWRIYXNoLCBPbmx5SW5lcXVhbGl0eSk6IHBhc3MKK2NsYXNzIEluaGVyaXRlZEhhc2hXaXRoQ21wKEZpeGVkSGFzaCwgT25seUNtcCk6IHBhc3MKKworY2xhc3MgTm9IYXNoKG9iamVjdCk6CisgICAgX19oYXNoX18gPSBOb25lCisKK2NsYXNzIEhhc2hJbmhlcml0YW5jZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWZhdWx0X2V4cGVjdGVkID0gW29iamVjdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdEhhc2goKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9ubHlFcXVhbGl0eSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgT25seUluZXF1YWxpdHkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9ubHlDbXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgXQorICAgIGZpeGVkX2V4cGVjdGVkID0gW0ZpeGVkSGFzaCgpLAorICAgICAgICAgICAgICAgICAgICAgIEluaGVyaXRlZEhhc2hXaXRoRXF1YWxpdHkoKSwKKyAgICAgICAgICAgICAgICAgICAgICBJbmhlcml0ZWRIYXNoV2l0aEluZXF1YWxpdHkoKSwKKyAgICAgICAgICAgICAgICAgICAgICBJbmhlcml0ZWRIYXNoV2l0aENtcCgpLAorICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICBlcnJvcl9leHBlY3RlZCA9IFtOb0hhc2goKV0KKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfaGFzaChzZWxmKToKKyAgICAgICAgZm9yIG9iaiBpbiBzZWxmLmRlZmF1bHRfZXhwZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2gob2JqKSwgX2RlZmF1bHRfaGFzaChvYmopKQorCisgICAgZGVmIHRlc3RfZml4ZWRfaGFzaChzZWxmKToKKyAgICAgICAgZm9yIG9iaiBpbiBzZWxmLmZpeGVkX2V4cGVjdGVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKG9iaiksIF9GSVhFRF9IQVNIX1ZBTFVFKQorCisgICAgZGVmIHRlc3RfZXJyb3JfaGFzaChzZWxmKToKKyAgICAgICAgZm9yIG9iaiBpbiBzZWxmLmVycm9yX2V4cGVjdGVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNoLCBvYmopCisKKyAgICBkZWYgdGVzdF9oYXNoYWJsZShzZWxmKToKKyAgICAgICAgb2JqZWN0cyA9IChzZWxmLmRlZmF1bHRfZXhwZWN0ZWQgKworICAgICAgICAgICAgICAgICAgIHNlbGYuZml4ZWRfZXhwZWN0ZWQpCisgICAgICAgIGZvciBvYmogaW4gb2JqZWN0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvYmosIEhhc2hhYmxlKQorCisgICAgZGVmIHRlc3Rfbm90X2hhc2hhYmxlKHNlbGYpOgorICAgICAgICBmb3Igb2JqIGluIHNlbGYuZXJyb3JfZXhwZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uob2JqLCBIYXNoYWJsZSkKKworCisjIElzc3VlICM0NzAxOiBDaGVjayB0aGF0IHNvbWUgYnVpbHRpbiB0eXBlcyBhcmUgY29ycmVjdGx5IGhhc2hhYmxlCisjICAoVGhpcyB0ZXN0IG9ubHkgdXNlZCB0byBmYWlsIGluIFB5dGhvbiAzLjAsIGJ1dCBoYXMgYmVlbiBpbmNsdWRlZAorIyAgIGluIDIueCBhbG9uZyB3aXRoIHRoZSBsYXp5IGNhbGwgdG8gUHlUeXBlX1JlYWR5IGluIFB5T2JqZWN0X0hhc2gpCitjbGFzcyBEZWZhdWx0SXRlclNlcShvYmplY3QpOgorICAgIHNlcSA9IHJhbmdlKDEwKQorICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuc2VxKQorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJldHVybiBzZWxmLnNlcVtpbmRleF0KKworY2xhc3MgSGFzaEJ1aWx0aW5zVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGhhc2hlc190b19jaGVjayA9IFt4cmFuZ2UoMTApLAorICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhdGUoeHJhbmdlKDEwKSksCisgICAgICAgICAgICAgICAgICAgICAgIGl0ZXIoRGVmYXVsdEl0ZXJTZXEoKSksCisgICAgICAgICAgICAgICAgICAgICAgIGl0ZXIobGFtYmRhOiAwLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICBdCisKKyAgICBkZWYgdGVzdF9oYXNoZXMoc2VsZik6CisgICAgICAgIF9kZWZhdWx0X2hhc2ggPSBvYmplY3QuX19oYXNoX18KKyAgICAgICAgZm9yIG9iaiBpbiBzZWxmLmhhc2hlc190b19jaGVjazoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChvYmopLCBfZGVmYXVsdF9oYXNoKG9iaikpCisKK2NsYXNzIEhhc2hSYW5kb21pemF0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBFYWNoIHN1YmNsYXNzIHNob3VsZCBkZWZpbmUgYSBmaWVsZCAicmVwcl8iLCBjb250YWluaW5nIHRoZSByZXByKCkgb2YKKyAgICAjIGFuIG9iamVjdCB0byBiZSB0ZXN0ZWQKKworICAgIGRlZiBnZXRfaGFzaF9jb21tYW5kKHNlbGYsIHJlcHJfKToKKyAgICAgICAgcmV0dXJuICdwcmludChoYXNoKCVzKSknICUgcmVwcl8KKworICAgIGRlZiBnZXRfaGFzaChzZWxmLCByZXByXywgc2VlZD1Ob25lKToKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgaWYgc2VlZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGVudlsnUFlUSE9OSEFTSFNFRUQnXSA9IHN0cihzZWVkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW52LnBvcCgnUFlUSE9OSEFTSFNFRUQnLCBOb25lKQorICAgICAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgc2VsZi5nZXRfaGFzaF9jb21tYW5kKHJlcHJfKV0KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kX2xpbmUsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBvdXQgPSB0ZXN0X3N1cHBvcnQuc3RyaXBfcHl0aG9uX3N0ZGVycihvdXQpCisgICAgICAgIHJldHVybiBpbnQob3V0LnN0cmlwKCkpCisKKyAgICBkZWYgdGVzdF9yYW5kb21pemVkX2hhc2goc2VsZik6CisgICAgICAgICMgdHdvIHJ1bnMgc2hvdWxkIHJldHVybiBkaWZmZXJlbnQgaGFzaGVzCisgICAgICAgIHJ1bjEgPSBzZWxmLmdldF9oYXNoKHNlbGYucmVwcl8sIHNlZWQ9J3JhbmRvbScpCisgICAgICAgIHJ1bjIgPSBzZWxmLmdldF9oYXNoKHNlbGYucmVwcl8sIHNlZWQ9J3JhbmRvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocnVuMSwgcnVuMikKKworY2xhc3MgU3RyaW5nbGlrZUhhc2hSYW5kb21pemF0aW9uVGVzdHMoSGFzaFJhbmRvbWl6YXRpb25UZXN0cyk6CisgICAgZGVmIHRlc3RfbnVsbF9oYXNoKHNlbGYpOgorICAgICAgICAjIFBZVEhPTkhBU0hTRUVEPTAgZGlzYWJsZXMgdGhlIHJhbmRvbWl6ZWQgaGFzaAorICAgICAgICBpZiBJU182NEJJVDoKKyAgICAgICAgICAgIGtub3duX2hhc2hfb2Zfb2JqID0gMTQ1MzA3OTcyOTE4ODA5ODIxMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAga25vd25faGFzaF9vZl9vYmogPSAtMTYwMDkyNTUzMworCisgICAgICAgICMgUmFuZG9taXphdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0OgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByXyksIGtub3duX2hhc2hfb2Zfb2JqKQorCisgICAgICAgICMgSXQgY2FuIGFsc28gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGUgc2VlZCB0byAwOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByXywgc2VlZD0wKSwga25vd25faGFzaF9vZl9vYmopCisKKyAgICBkZWYgdGVzdF9maXhlZF9oYXNoKHNlbGYpOgorICAgICAgICAjIHRlc3QgYSBmaXhlZCBzZWVkIGZvciB0aGUgcmFuZG9taXplZCBoYXNoCisgICAgICAgICMgTm90ZSB0aGF0IGFsbCB0eXBlcyBzaGFyZSB0aGUgc2FtZSB2YWx1ZXM6CisgICAgICAgIGlmIElTXzY0QklUOgorICAgICAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKKyAgICAgICAgICAgICAgICBoID0gLTQ0MTA5MTE1MDIzMDM4Nzg1MDkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaCA9IC0zNTcwMTUwOTY5NDc5OTk0MTMwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgorICAgICAgICAgICAgICAgIGggPSAtMjA2MDc2Nzk5CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGggPSAtMTAyNDAxNDQ1NworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByXywgc2VlZD00MiksIGgpCisKK2NsYXNzIFN0ckhhc2hSYW5kb21pemF0aW9uVGVzdHMoU3RyaW5nbGlrZUhhc2hSYW5kb21pemF0aW9uVGVzdHMpOgorICAgIHJlcHJfID0gcmVwcignYWJjJykKKworICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKCIiKSwgMCkKKworY2xhc3MgVW5pY29kZUhhc2hSYW5kb21pemF0aW9uVGVzdHMoU3RyaW5nbGlrZUhhc2hSYW5kb21pemF0aW9uVGVzdHMpOgorICAgIHJlcHJfID0gcmVwcih1J2FiYycpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh1IiIpLCAwKQorCitjbGFzcyBCdWZmZXJIYXNoUmFuZG9taXphdGlvblRlc3RzKFN0cmluZ2xpa2VIYXNoUmFuZG9taXphdGlvblRlc3RzKToKKyAgICByZXByXyA9ICdidWZmZXIoImFiYyIpJworCisgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYnVmZmVyKCIiKSksIDApCisKK2NsYXNzIERhdGV0aW1lVGVzdHMoSGFzaFJhbmRvbWl6YXRpb25UZXN0cyk6CisgICAgZGVmIGdldF9oYXNoX2NvbW1hbmQoc2VsZiwgcmVwcl8pOgorICAgICAgICByZXR1cm4gJ2ltcG9ydCBkYXRldGltZTsgcHJpbnQoaGFzaCglcykpJyAlIHJlcHJfCisKK2NsYXNzIERhdGV0aW1lRGF0ZVRlc3RzKERhdGV0aW1lVGVzdHMpOgorICAgIHJlcHJfID0gcmVwcihkYXRldGltZS5kYXRlKDEwNjYsIDEwLCAxNCkpCisKK2NsYXNzIERhdGV0aW1lRGF0ZXRpbWVUZXN0cyhEYXRldGltZVRlc3RzKToKKyAgICByZXByXyA9IHJlcHIoZGF0ZXRpbWUuZGF0ZXRpbWUoMSwgMiwgMywgNCwgNSwgNiwgNykpCisKK2NsYXNzIERhdGV0aW1lVGltZVRlc3RzKERhdGV0aW1lVGVzdHMpOgorICAgIHJlcHJfID0gcmVwcihkYXRldGltZS50aW1lKDApKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEhhc2hFcXVhbGl0eVRlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaEluaGVyaXRhbmNlVGVzdENhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoQnVpbHRpbnNUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ckhhc2hSYW5kb21pemF0aW9uVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmljb2RlSGFzaFJhbmRvbWl6YXRpb25UZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlckhhc2hSYW5kb21pemF0aW9uVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRldGltZURhdGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGV0aW1lRGF0ZXRpbWVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGV0aW1lVGltZVRlc3RzKQorCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaGFzaGxpYi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2hhc2hsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYzNjVjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2hhc2hsaWIucHkKQEAgLTAsMCArMSwzOTkgQEAKKyMgVGVzdCBoYXNobGliIG1vZHVsZQorIworIyAkSWQkCisjCisjICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCAgIEdyZWdvcnkgUC4gU21pdGggKGdyZWdAa3J5cHRvLm9yZykKKyMgIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKyMKKworaW1wb3J0IGFycmF5CitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IHN5cwordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IF80RywgcHJlY2lzaW9uYmlnbWVtdGVzdAorCisjIFdlcmUgd2UgY29tcGlsZWQgLS13aXRoLXB5ZGVidWcgb3Igd2l0aCAjZGVmaW5lIFB5X0RFQlVHPworQ09NUElMRURfV0lUSF9QWURFQlVHID0gaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50JykKKworCitkZWYgaGV4c3RyKHMpOgorICAgIGltcG9ydCBzdHJpbmcKKyAgICBoID0gc3RyaW5nLmhleGRpZ2l0cworICAgIHIgPSAnJworICAgIGZvciBjIGluIHM6CisgICAgICAgIGkgPSBvcmQoYykKKyAgICAgICAgciA9IHIgKyBoWyhpID4+IDQpICYgMHhGXSArIGhbaSAmIDB4Rl0KKyAgICByZXR1cm4gcgorCisKK2NsYXNzIEhhc2hMaWJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgc3VwcG9ydGVkX2hhc2hfbmFtZXMgPSAoICdtZDUnLCAnTUQ1JywgJ3NoYTEnLCAnU0hBMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGEyMjQnLCAnU0hBMjI0JywgJ3NoYTI1NicsICdTSEEyNTYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhMzg0JywgJ1NIQTM4NCcsICdzaGE1MTInLCAnU0hBNTEyJyApCisKKyAgICBfd2Fybl9vbl9leHRlbnNpb25faW1wb3J0ID0gQ09NUElMRURfV0lUSF9QWURFQlVHCisKKyAgICBkZWYgX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoc2VsZiwgbW9kdWxlX25hbWUpOgorICAgICAgICAiIiJJbXBvcnQgYSBtb2R1bGUgYW5kIHJldHVybiBhIHJlZmVyZW5jZSB0byBpdCBvciBOb25lIG9uIGZhaWx1cmUuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4ZWMoJ2ltcG9ydCAnK21vZHVsZV9uYW1lKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGVycm9yOgorICAgICAgICAgICAgaWYgc2VsZi5fd2Fybl9vbl9leHRlbnNpb25faW1wb3J0OgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJ0RpZCBhIEMgZXh0ZW5zaW9uIGZhaWwgdG8gY29tcGlsZT8gJXMnICUgZXJyb3IpCisgICAgICAgIHJldHVybiBsb2NhbHMoKS5nZXQobW9kdWxlX25hbWUpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgYWxnb3JpdGhtcyA9IHNldCgpCisgICAgICAgIGZvciBhbGdvcml0aG0gaW4gc2VsZi5zdXBwb3J0ZWRfaGFzaF9uYW1lczoKKyAgICAgICAgICAgIGFsZ29yaXRobXMuYWRkKGFsZ29yaXRobS5sb3dlcigpKQorICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0ID0ge30KKyAgICAgICAgZm9yIGFsZ29yaXRobSBpbiBhbGdvcml0aG1zOgorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFthbGdvcml0aG1dID0gc2V0KCkKKworICAgICAgICAjIEZvciBlYWNoIGFsZ29yaXRobSwgdGVzdCB0aGUgZGlyZWN0IGNvbnN0cnVjdG9yIGFuZCB0aGUgdXNlCisgICAgICAgICMgb2YgaGFzaGxpYi5uZXcgZ2l2ZW4gdGhlIGFsZ29yaXRobSBuYW1lLgorICAgICAgICBmb3IgYWxnb3JpdGhtLCBjb25zdHJ1Y3RvcnMgaW4gc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdC5pdGVtcygpOgorICAgICAgICAgICAgY29uc3RydWN0b3JzLmFkZChnZXRhdHRyKGhhc2hsaWIsIGFsZ29yaXRobSkpCisgICAgICAgICAgICBkZWYgX3Rlc3RfYWxnb3JpdGhtX3ZpYV9oYXNobGliX25ldyhkYXRhPU5vbmUsIF9hbGc9YWxnb3JpdGhtKToKKyAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNobGliLm5ldyhfYWxnKQorICAgICAgICAgICAgICAgIHJldHVybiBoYXNobGliLm5ldyhfYWxnLCBkYXRhKQorICAgICAgICAgICAgY29uc3RydWN0b3JzLmFkZChfdGVzdF9hbGdvcml0aG1fdmlhX2hhc2hsaWJfbmV3KQorCisgICAgICAgIF9oYXNobGliID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX2hhc2hsaWInKQorICAgICAgICBpZiBfaGFzaGxpYjoKKyAgICAgICAgICAgICMgVGhlc2UgdHdvIGFsZ29yaXRobXMgc2hvdWxkIGFsd2F5cyBiZSBwcmVzZW50IHdoZW4gdGhpcyBtb2R1bGUKKyAgICAgICAgICAgICMgaXMgY29tcGlsZWQuICBJZiBub3QsIHNvbWV0aGluZyB3YXMgY29tcGlsZWQgd3JvbmcuCisgICAgICAgICAgICBhc3NlcnQgaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfbWQ1JykKKyAgICAgICAgICAgIGFzc2VydCBoYXNhdHRyKF9oYXNobGliLCAnb3BlbnNzbF9zaGExJykKKyAgICAgICAgICAgIGZvciBhbGdvcml0aG0sIGNvbnN0cnVjdG9ycyBpbiBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0Lml0ZW1zKCk6CisgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgPSBnZXRhdHRyKF9oYXNobGliLCAnb3BlbnNzbF8nK2FsZ29yaXRobSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBjb25zdHJ1Y3RvcjoKKyAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3JzLmFkZChjb25zdHJ1Y3RvcikKKworICAgICAgICBfbWQ1ID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX21kNScpCisgICAgICAgIGlmIF9tZDU6CisgICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydtZDUnXS5hZGQoX21kNS5uZXcpCisgICAgICAgIF9zaGEgPSBzZWxmLl9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKCdfc2hhJykKKyAgICAgICAgaWYgX3NoYToKKyAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTEnXS5hZGQoX3NoYS5uZXcpCisgICAgICAgIF9zaGEyNTYgPSBzZWxmLl9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKCdfc2hhMjU2JykKKyAgICAgICAgaWYgX3NoYTI1NjoKKyAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTIyNCddLmFkZChfc2hhMjU2LnNoYTIyNCkKKyAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTI1NiddLmFkZChfc2hhMjU2LnNoYTI1NikKKyAgICAgICAgX3NoYTUxMiA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19zaGE1MTInKQorICAgICAgICBpZiBfc2hhNTEyOgorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMzg0J10uYWRkKF9zaGE1MTIuc2hhMzg0KQorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhNTEyJ10uYWRkKF9zaGE1MTIuc2hhNTEyKQorCisgICAgICAgIHN1cGVyKEhhc2hMaWJUZXN0Q2FzZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIHRlc3RfaGFzaF9hcnJheShzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KCJiIiwgcmFuZ2UoMTApKQorICAgICAgICBjb25zdHJ1Y3RvcnMgPSBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0Lml0ZXJ2YWx1ZXMoKQorICAgICAgICBmb3IgY29ucyBpbiBpdGVydG9vbHMuY2hhaW4uZnJvbV9pdGVyYWJsZShjb25zdHJ1Y3RvcnMpOgorICAgICAgICAgICAgYyA9IGNvbnMoYSkKKyAgICAgICAgICAgIGMuaGV4ZGlnZXN0KCkKKworICAgIGRlZiB0ZXN0X2FsZ29yaXRobXNfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2hsaWIuYWxnb3JpdGhtcywKKyAgICAgICAgICAgIHR1cGxlKFtfYWxnbyBmb3IgX2FsZ28gaW4gc2VsZi5zdXBwb3J0ZWRfaGFzaF9uYW1lcyBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2FsZ28uaXNsb3dlcigpXSkpCisKKyAgICBkZWYgdGVzdF91bmtub3duX2hhc2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGhhc2hsaWIubmV3LCAnc3BhbSBzcGFtIHNwYW0gc3BhbSBzcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNobGliLm5ldywgMSkKKworICAgIGRlZiB0ZXN0X2dldF9idWlsdGluX2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciA9IGhhc2hsaWIuX19kaWN0X19bCisgICAgICAgICAgICAgICAgJ19fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3InXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciwgJ3Rlc3QnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgX21kNQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgVGhpcyBmb3JjZXMgYW4gSW1wb3J0RXJyb3IgZm9yICJpbXBvcnQgX21kNSIgc3RhdGVtZW50cworICAgICAgICBzeXMubW9kdWxlc1snX21kNSddID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciwgJ21kNScpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiAnX21kNScgaW4gbG9jYWxzKCk6CisgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ19tZDUnXSA9IF9tZDUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfbWQ1J10KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciwgMykKKworICAgIGRlZiB0ZXN0X2hleGRpZ2VzdChzZWxmKToKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5zdXBwb3J0ZWRfaGFzaF9uYW1lczoKKyAgICAgICAgICAgIGggPSBoYXNobGliLm5ldyhuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhleHN0cihoLmRpZ2VzdCgpKSA9PSBoLmhleGRpZ2VzdCgpKQorCisgICAgZGVmIHRlc3RfbGFyZ2VfdXBkYXRlKHNlbGYpOgorICAgICAgICBhYXMgPSAnYScgKiAxMjgKKyAgICAgICAgYmVlcyA9ICdiJyAqIDEyNworICAgICAgICBjZWVzID0gJ2MnICogMTI2CisgICAgICAgIGFiY3MgPSBhYXMgKyBiZWVzICsgY2VlcworCisgICAgICAgIGZvciBuYW1lIGluIHNlbGYuc3VwcG9ydGVkX2hhc2hfbmFtZXM6CisgICAgICAgICAgICBtMSA9IGhhc2hsaWIubmV3KG5hbWUpCisgICAgICAgICAgICBtMS51cGRhdGUoYWFzKQorICAgICAgICAgICAgbTEudXBkYXRlKGJlZXMpCisgICAgICAgICAgICBtMS51cGRhdGUoY2VlcykKKworICAgICAgICAgICAgbTIgPSBoYXNobGliLm5ldyhuYW1lKQorICAgICAgICAgICAgbTIudXBkYXRlKGFiY3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0xLmRpZ2VzdCgpLCBtMi5kaWdlc3QoKSwgbmFtZSsnIHVwZGF0ZSBwcm9ibGVtLicpCisKKyAgICAgICAgICAgIG0zID0gaGFzaGxpYi5uZXcobmFtZSwgYWJjcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTEuZGlnZXN0KCksIG0zLmRpZ2VzdCgpLCBuYW1lKycgbmV3IHByb2JsZW0uJykKKworICAgIGRlZiBjaGVjayhzZWxmLCBuYW1lLCBkYXRhLCBkaWdlc3QpOgorICAgICAgICBjb25zdHJ1Y3RvcnMgPSBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0W25hbWVdCisgICAgICAgICMgMiBpcyBmb3IgaGFzaGxpYi5uYW1lKC4uLikgYW5kIGhhc2hsaWIubmV3KG5hbWUsIC4uLikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobGVuKGNvbnN0cnVjdG9ycyksIDIpCisgICAgICAgIGZvciBoYXNoX29iamVjdF9jb25zdHJ1Y3RvciBpbiBjb25zdHJ1Y3RvcnM6CisgICAgICAgICAgICBjb21wdXRlZCA9IGhhc2hfb2JqZWN0X2NvbnN0cnVjdG9yKGRhdGEpLmhleGRpZ2VzdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBjb21wdXRlZCwgZGlnZXN0LAorICAgICAgICAgICAgICAgICAgICAiSGFzaCBhbGdvcml0aG0gJXMgY29uc3RydWN0ZWQgdXNpbmcgJXMgcmV0dXJuZWQgaGV4ZGlnZXN0IgorICAgICAgICAgICAgICAgICAgICAiICVyIGZvciAlZCBieXRlIGlucHV0IGRhdGEgdGhhdCBzaG91bGQgaGF2ZSBoYXNoZWQgdG8gJXIuIgorICAgICAgICAgICAgICAgICAgICAlIChuYW1lLCBoYXNoX29iamVjdF9jb25zdHJ1Y3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQsIGxlbihkYXRhKSwgZGlnZXN0KSkKKworICAgIGRlZiBjaGVja191cGRhdGUoc2VsZiwgbmFtZSwgZGF0YSwgZGlnZXN0KToKKyAgICAgICAgY29uc3RydWN0b3JzID0gc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFtuYW1lXQorICAgICAgICAjIDIgaXMgZm9yIGhhc2hsaWIubmFtZSguLi4pIGFuZCBoYXNobGliLm5ldyhuYW1lLCAuLi4pCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihjb25zdHJ1Y3RvcnMpLCAyKQorICAgICAgICBmb3IgaGFzaF9vYmplY3RfY29uc3RydWN0b3IgaW4gY29uc3RydWN0b3JzOgorICAgICAgICAgICAgaCA9IGhhc2hfb2JqZWN0X2NvbnN0cnVjdG9yKCkKKyAgICAgICAgICAgIGgudXBkYXRlKGRhdGEpCisgICAgICAgICAgICBjb21wdXRlZCA9IGguaGV4ZGlnZXN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkLCBkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICJIYXNoIGFsZ29yaXRobSAlcyB1c2luZyAlcyB3aGVuIHVwZGF0ZWQgcmV0dXJuZWQgaGV4ZGlnZXN0IgorICAgICAgICAgICAgICAgICAgICAiICVyIGZvciAlZCBieXRlIGlucHV0IGRhdGEgdGhhdCBzaG91bGQgaGF2ZSBoYXNoZWQgdG8gJXIuIgorICAgICAgICAgICAgICAgICAgICAlIChuYW1lLCBoYXNoX29iamVjdF9jb25zdHJ1Y3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQsIGxlbihkYXRhKSwgZGlnZXN0KSkKKworICAgIGRlZiBjaGVja191bmljb2RlKHNlbGYsIGFsZ29yaXRobV9uYW1lKToKKyAgICAgICAgIyBVbmljb2RlIG9iamVjdHMgYXJlIG5vdCBhbGxvd2VkIGFzIGlucHV0LgorICAgICAgICBleHBlY3RlZCA9IGhhc2hsaWIubmV3KGFsZ29yaXRobV9uYW1lLCBzdHIodSdzcGFtJykpLmhleGRpZ2VzdCgpCisgICAgICAgIHNlbGYuY2hlY2soYWxnb3JpdGhtX25hbWUsIHUnc3BhbScsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfdW5pY29kZShzZWxmKToKKyAgICAgICAgIyBJbiBweXRob24gMi54IHVuaWNvZGUgaXMgYXV0by1lbmNvZGVkIHRvIHRoZSBzeXN0ZW0gZGVmYXVsdCBlbmNvZGluZworICAgICAgICAjIHdoZW4gcGFzc2VkIHRvIGhhc2hsaWIgZnVuY3Rpb25zLgorICAgICAgICBzZWxmLmNoZWNrX3VuaWNvZGUoJ21kNScpCisgICAgICAgIHNlbGYuY2hlY2tfdW5pY29kZSgnc2hhMScpCisgICAgICAgIHNlbGYuY2hlY2tfdW5pY29kZSgnc2hhMjI0JykKKyAgICAgICAgc2VsZi5jaGVja191bmljb2RlKCdzaGEyNTYnKQorICAgICAgICBzZWxmLmNoZWNrX3VuaWNvZGUoJ3NoYTM4NCcpCisgICAgICAgIHNlbGYuY2hlY2tfdW5pY29kZSgnc2hhNTEyJykKKworICAgIGRlZiB0ZXN0X2Nhc2VfbWQ1XzAoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ21kNScsICcnLCAnZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UnKQorCisgICAgZGVmIHRlc3RfY2FzZV9tZDVfMShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnbWQ1JywgJ2FiYycsICc5MDAxNTA5ODNjZDI0ZmIwZDY5NjNmN2QyOGUxN2Y3MicpCisKKyAgICBkZWYgdGVzdF9jYXNlX21kNV8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdtZDUnLCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknLAorICAgICAgICAgICAgICAgICAgICdkMTc0YWI5OGQyNzdkOWY1YTU2MTFjMmM5ZjQxOWQ5ZicpCisKKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV80RyArIDUsIG1lbXVzZT0xKQorICAgIGRlZiB0ZXN0X2Nhc2VfbWQ1X2h1Z2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIGlmIHNpemUgPT0gXzRHICsgNToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrKCdtZDUnLCAnQScqc2l6ZSwgJ2M5YWYyZGZmMzc0NjhjZTVkZmVlOGYyY2ZjMGE5YzZkJykKKyAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MgIyAzMi1iaXQgYXJjaAorCisgICAgQHByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1fNEcgKyA1LCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9jYXNlX21kNV9odWdlX3VwZGF0ZShzZWxmLCBzaXplKToKKyAgICAgICAgaWYgc2l6ZSA9PSBfNEcgKyA1OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdXBkYXRlKCdtZDUnLCAnQScqc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdjOWFmMmRmZjM3NDY4Y2U1ZGZlZThmMmNmYzBhOWM2ZCcpCisgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzICMgMzItYml0IGFyY2gKKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzRHIC0gMSwgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfY2FzZV9tZDVfdWludG1heChzZWxmLCBzaXplKToKKyAgICAgICAgaWYgc2l6ZSA9PSBfNEcgLSAxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2soJ21kNScsICdBJypzaXplLCAnMjgxMzhkMzA2ZmYxYjgyODFmMWE5MDY3ZTFhMWEyYjMnKQorICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcyAjIDMyLWJpdCBhcmNoCisKKyAgICAjIHVzZSB0aGUgdGhyZWUgZXhhbXBsZXMgZnJvbSBGZWRlcmFsIEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgU3RhbmRhcmRzCisgICAgIyBQdWJsaWNhdGlvbiAxODAtMSwgU2VjdXJlIEhhc2ggU3RhbmRhcmQsICAxOTk1IEFwcmlsIDE3CisgICAgIyBodHRwOi8vd3d3Lml0bC5uaXN0Lmdvdi9kaXY4OTcvcHVicy9maXAxODAtMS5odG0KKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhMV8wKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGExJywgIiIsCisgICAgICAgICAgICAgICAgICAgImRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDkiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGExXzEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTEnLCAiYWJjIiwKKyAgICAgICAgICAgICAgICAgICAiYTk5OTNlMzY0NzA2ODE2YWJhM2UyNTcxNzg1MGMyNmM5Y2QwZDg5ZCIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTFfMihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhMScsICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIsCisgICAgICAgICAgICAgICAgICAgIjg0OTgzZTQ0MWMzYmQyNmViYWFlNGFhMWY5NTEyOWU1ZTU0NjcwZjEiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGExXzMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTEnLCAiYSIgKiAxMDAwMDAwLAorICAgICAgICAgICAgICAgICAgICIzNGFhOTczY2Q0YzRkYWE0ZjYxZWViMmJkYmFkMjczMTY1MzQwMTZmIikKKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzRHICsgNSwgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfY2FzZV9zaGExX2h1Z2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIGlmIHNpemUgPT0gXzRHICsgNToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrKCdzaGExJywgJ0EnKnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAnODdkNzQ1YzUwZTZiMjg3OWZmYTBmYjJjOTMwZTlmYmZlMGRjOWE1YicpCisgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzICMgMzItYml0IGFyY2gKKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzRHICsgNSwgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfY2FzZV9zaGExX2h1Z2VfdXBkYXRlKHNlbGYsIHNpemUpOgorICAgICAgICBpZiBzaXplID09IF80RyArIDU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja191cGRhdGUoJ3NoYTEnLCAnQScqc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICc4N2Q3NDVjNTBlNmIyODc5ZmZhMGZiMmM5MzBlOWZiZmUwZGM5YTViJykKKyAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MgIyAzMi1iaXQgYXJjaAorCisgICAgIyB1c2UgdGhlIGV4YW1wbGVzIGZyb20gRmVkZXJhbCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIFN0YW5kYXJkcworICAgICMgUHVibGljYXRpb24gMTgwLTIsIFNlY3VyZSBIYXNoIFN0YW5kYXJkLCAgMjAwMiBBdWd1c3QgMQorICAgICMgaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE4MC0yL2ZpcHMxODAtMi5wZGYKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhMjI0XzAoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTIyNCcsICIiLAorICAgICAgICAgICJkMTRhMDI4YzJhM2EyYmM5NDc2MTAyYmIyODgyMzRjNDE1YTJiMDFmODI4ZWE2MmFjNWIzZTQyZiIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTIyNF8xKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEyMjQnLCAiYWJjIiwKKyAgICAgICAgICAiMjMwOTdkMjIzNDA1ZDgyMjg2NDJhNDc3YmRhMjU1YjMyYWFkYmNlNGJkYTBiM2Y3ZTM2YzlkYTciKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEyMjRfMihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhMjI0JywKKyAgICAgICAgICAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiLAorICAgICAgICAgICI3NTM4OGIxNjUxMjc3NmNjNWRiYTVkYTFmZDg5MDE1MGIwYzY0NTVjYjRmNThiMTk1MjUyMjUyNSIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTIyNF8zKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEyMjQnLCAiYSIgKiAxMDAwMDAwLAorICAgICAgICAgICIyMDc5NDY1NTk4MGM5MWQ4YmJiNGMxZWE5NzYxOGE0YmYwM2Y0MjU4MTk0OGIyZWU0ZWU3YWQ2NyIpCisKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhMjU2XzAoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTI1NicsICIiLAorICAgICAgICAgICJlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1IikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhMjU2XzEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTI1NicsICJhYmMiLAorICAgICAgICAgICJiYTc4MTZiZjhmMDFjZmVhNDE0MTQwZGU1ZGFlMjIyM2IwMDM2MWEzOTYxNzdhOWNiNDEwZmY2MWYyMDAxNWFkIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhMjU2XzIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTI1NicsCisgICAgICAgICAgImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIiwKKyAgICAgICAgICAiMjQ4ZDZhNjFkMjA2MzhiOGU1YzAyNjkzMGMzZTYwMzlhMzNjZTQ1OTY0ZmYyMTY3ZjZlY2VkZDQxOWRiMDZjMSIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTI1Nl8zKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEyNTYnLCAiYSIgKiAxMDAwMDAwLAorICAgICAgICAgICJjZGM3NmU1Yzk5MTRmYjkyODFhMWM3ZTI4NGQ3M2U2N2YxODA5YTQ4YTQ5NzIwMGUwNDZkMzljY2M3MTEyY2QwIikKKworCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzODRfMChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhMzg0JywgIiIsCisgICAgICAgICAgIjM4YjA2MGE3NTFhYzk2Mzg0Y2Q5MzI3ZWIxYjFlMzZhMjFmZGI3MTExNGJlMDc0MzRjMGNjN2JmNjNmNmUxZGEiKworICAgICAgICAgICIyNzRlZGViZmU3NmY2NWZiZDUxYWQyZjE0ODk4Yjk1YiIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTM4NF8xKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzODQnLCAiYWJjIiwKKyAgICAgICAgICAiY2IwMDc1M2Y0NWEzNWU4YmI1YTAzZDY5OWFjNjUwMDcyNzJjMzJhYjBlZGVkMTYzMWE4YjYwNWE0M2ZmNWJlZCIrCisgICAgICAgICAgIjgwODYwNzJiYTFlN2NjMjM1OGJhZWNhMTM0YzgyNWE3IikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhMzg0XzIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTM4NCcsCisgICAgICAgICAgICAgICAgICAgImFiY2RlZmdoYmNkZWZnaGljZGVmZ2hpamRlZmdoaWprZWZnaGlqa2xmZ2hpamtsbWdoaWprbG1uIisKKyAgICAgICAgICAgICAgICAgICAiaGlqa2xtbm9pamtsbW5vcGprbG1ub3Bxa2xtbm9wcXJsbW5vcHFyc21ub3BxcnN0bm9wcXJzdHUiLAorICAgICAgICAgICIwOTMzMGMzM2Y3MTE0N2U4M2QxOTJmYzc4MmNkMWI0NzUzMTExYjE3M2IzYjA1ZDIyZmEwODA4NmUzYjBmNzEyIisKKyAgICAgICAgICAiZmNjN2M3MWE1NTdlMmRiOTY2YzNlOWZhOTE3NDYwMzkiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzODRfMyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhMzg0JywgImEiICogMTAwMDAwMCwKKyAgICAgICAgICAiOWQwZTE4MDk3MTY0NzRjYjA4NmU4MzRlMzEwYTRhMWNlZDE0OWU5YzAwZjI0ODUyNzk3MmNlYzU3MDRjMmE1YiIrCisgICAgICAgICAgIjA3YjhiM2RjMzhlY2M0ZWJhZTk3ZGRkODdmM2Q4OTg1IikKKworCisgICAgZGVmIHRlc3RfY2FzZV9zaGE1MTJfMChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhNTEyJywgIiIsCisgICAgICAgICAgImNmODNlMTM1N2VlZmI4YmRmMTU0Mjg1MGQ2NmQ4MDA3ZDYyMGU0MDUwYjU3MTVkYzgzZjRhOTIxZDM2Y2U5Y2UiKworICAgICAgICAgICI0N2QwZDEzYzVkODVmMmIwZmY4MzE4ZDI4NzdlZWMyZjYzYjkzMWJkNDc0MTdhODFhNTM4MzI3YWY5MjdkYTNlIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhNTEyXzEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTUxMicsICJhYmMiLAorICAgICAgICAgICJkZGFmMzVhMTkzNjE3YWJhY2M0MTczNDlhZTIwNDEzMTEyZTZmYTRlODlhOTdlYTIwYTllZWVlNjRiNTVkMzlhIisKKyAgICAgICAgICAiMjE5Mjk5MmEyNzRmYzFhODM2YmEzYzIzYTNmZWViYmQ0NTRkNDQyMzY0M2NlODBlMmE5YWM5NGZhNTRjYTQ5ZiIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTUxMl8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGE1MTInLAorICAgICAgICAgICAgICAgICAgICJhYmNkZWZnaGJjZGVmZ2hpY2RlZmdoaWpkZWZnaGlqa2VmZ2hpamtsZmdoaWprbG1naGlqa2xtbiIrCisgICAgICAgICAgICAgICAgICAgImhpamtsbW5vaWprbG1ub3Bqa2xtbm9wcWtsbW5vcHFybG1ub3BxcnNtbm9wcXJzdG5vcHFyc3R1IiwKKyAgICAgICAgICAiOGU5NTliNzVkYWUzMTNkYThjZjRmNzI4MTRmYzE0M2Y4Zjc3NzljNmViOWY3ZmExNzI5OWFlYWRiNjg4OTAxOCIrCisgICAgICAgICAgIjUwMWQyODllNDkwMGY3ZTQzMzFiOTlkZWM0YjU0MzNhYzdkMzI5ZWViNmRkMjY1NDVlOTZlNTViODc0YmU5MDkiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGE1MTJfMyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhNTEyJywgImEiICogMTAwMDAwMCwKKyAgICAgICAgICAiZTcxODQ4M2QwY2U3Njk2NDRlMmU0MmM3YmMxNWI0NjM4ZTFmOThiMTNiMjA0NDI4NTYzMmE4MDNhZmE5NzNlYiIrCisgICAgICAgICAgImRlMGZmMjQ0ODc3ZWE2MGE0Y2IwNDMyY2U1NzdjMzFiZWIwMDljNWMyYzQ5YWEyZTRlYWRiMjE3YWQ4Y2MwOWIiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBAdGVzdF9zdXBwb3J0LnJlYXBfdGhyZWFkcworICAgIGRlZiB0ZXN0X3RocmVhZGVkX2hhc2hpbmcoc2VsZik6CisgICAgICAgICMgVXBkYXRpbmcgdGhlIHNhbWUgaGFzaCBvYmplY3QgZnJvbSBzZXZlcmFsIHRocmVhZHMgYXQgb25jZQorICAgICAgICAjIHVzaW5nIGRhdGEgY2h1bmsgc2l6ZXMgY29udGFpbmluZyB0aGUgc2FtZSBieXRlIHNlcXVlbmNlcy4KKyAgICAgICAgIworICAgICAgICAjIElmIHRoZSBpbnRlcm5hbCBsb2NrcyBhcmUgd29ya2luZyB0byBwcmV2ZW50IG11bHRpcGxlCisgICAgICAgICMgdXBkYXRlcyBvbiB0aGUgc2FtZSBvYmplY3QgZnJvbSBydW5uaW5nIGF0IG9uY2UsIHRoZSByZXN1bHRpbmcKKyAgICAgICAgIyBoYXNoIHdpbGwgYmUgdGhlIHNhbWUgYXMgZG9pbmcgaXQgc2luZ2xlIHRocmVhZGVkIHVwZnJvbnQuCisgICAgICAgIGhhc2hlciA9IGhhc2hsaWIuc2hhMSgpCisgICAgICAgIG51bV90aHJlYWRzID0gNQorICAgICAgICBzbWFsbGVzdF9kYXRhID0gJ3N3aW5lZmx1JworICAgICAgICBkYXRhID0gc21hbGxlc3RfZGF0YSoyMDAwMDAKKyAgICAgICAgZXhwZWN0ZWRfaGFzaCA9IGhhc2hsaWIuc2hhMShkYXRhKm51bV90aHJlYWRzKS5oZXhkaWdlc3QoKQorCisgICAgICAgIGRlZiBoYXNoX2luX2NodW5rcyhjaHVua19zaXplLCBldmVudCk6CisgICAgICAgICAgICBpbmRleCA9IDAKKyAgICAgICAgICAgIHdoaWxlIGluZGV4IDwgbGVuKGRhdGEpOgorICAgICAgICAgICAgICAgIGhhc2hlci51cGRhdGUoZGF0YVtpbmRleDppbmRleCtjaHVua19zaXplXSkKKyAgICAgICAgICAgICAgICBpbmRleCArPSBjaHVua19zaXplCisgICAgICAgICAgICBldmVudC5zZXQoKQorCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIGZvciB0aHJlYWRudW0gaW4geHJhbmdlKG51bV90aHJlYWRzKToKKyAgICAgICAgICAgIGNodW5rX3NpemUgPSBsZW4oZGF0YSkgLy8gKDEwKip0aHJlYWRudW0pCisgICAgICAgICAgICBhc3NlcnQgY2h1bmtfc2l6ZSA+IDAKKyAgICAgICAgICAgIGFzc2VydCBjaHVua19zaXplICUgbGVuKHNtYWxsZXN0X2RhdGEpID09IDAKKyAgICAgICAgICAgIGV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoZXZlbnQpCisgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1oYXNoX2luX2NodW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oY2h1bmtfc2l6ZSwgZXZlbnQpKS5zdGFydCgpCisKKyAgICAgICAgZm9yIGV2ZW50IGluIGV2ZW50czoKKyAgICAgICAgICAgIGV2ZW50LndhaXQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaGFzaCwgaGFzaGVyLmhleGRpZ2VzdCgpKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChIYXNoTGliVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2hlYXBxLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaGVhcHEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNiODhmMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2hlYXBxLnB5CkBAIC0wLDAgKzEsNDE5IEBACisiIiJVbml0dGVzdHMgZm9yIGhlYXBxLiIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgcmFuZG9tCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZSwgc2tpcFVubGVzcworCitweV9oZWFwcSA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdoZWFwcScsIGJsb2NrZWQ9WydfaGVhcHEnXSkKK2NfaGVhcHEgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnaGVhcHEnLCBmcmVzaD1bJ19oZWFwcSddKQorCisjIF9oZWFwcS5ubGFyZ2VzdC9uc21hbGxlc3QgYXJlIHNhdmVkIGluIGhlYXBxLl9ubGFyZ2VzdC9fc21hbGxlc3Qgd2hlbgorIyBfaGVhcHEgaXMgaW1wb3J0ZWQsIHNvIGNoZWNrIHRoZW0gdGhlcmUKK2Z1bmNfbmFtZXMgPSBbJ2hlYXBpZnknLCAnaGVhcHBvcCcsICdoZWFwcHVzaCcsICdoZWFwcHVzaHBvcCcsCisgICAgICAgICAgICAgICdoZWFwcmVwbGFjZScsICdfbmxhcmdlc3QnLCAnX25zbWFsbGVzdCddCisKK2NsYXNzIFRlc3RNb2R1bGVzKFRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9weV9mdW5jdGlvbnMoc2VsZik6CisgICAgICAgIGZvciBmbmFtZSBpbiBmdW5jX25hbWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHB5X2hlYXBxLCBmbmFtZSkuX19tb2R1bGVfXywgJ2hlYXBxJykKKworICAgIEBza2lwVW5sZXNzKGNfaGVhcHEsICdyZXF1aXJlcyBfaGVhcHEnKQorICAgIGRlZiB0ZXN0X2NfZnVuY3Rpb25zKHNlbGYpOgorICAgICAgICBmb3IgZm5hbWUgaW4gZnVuY19uYW1lczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihjX2hlYXBxLCBmbmFtZSkuX19tb2R1bGVfXywgJ19oZWFwcScpCisKKworY2xhc3MgVGVzdEhlYXAoVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IE5vbmUKKworICAgIGRlZiB0ZXN0X3B1c2hfcG9wKHNlbGYpOgorICAgICAgICAjIDEpIFB1c2ggMjU2IHJhbmRvbSBudW1iZXJzIGFuZCBwb3AgdGhlbSBvZmYsIHZlcmlmeWluZyBhbGwncyBPSy4KKyAgICAgICAgaGVhcCA9IFtdCisgICAgICAgIGRhdGEgPSBbXQorICAgICAgICBzZWxmLmNoZWNrX2ludmFyaWFudChoZWFwKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyNTYpOgorICAgICAgICAgICAgaXRlbSA9IHJhbmRvbS5yYW5kb20oKQorICAgICAgICAgICAgZGF0YS5hcHBlbmQoaXRlbSkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmhlYXBwdXNoKGhlYXAsIGl0ZW0pCisgICAgICAgICAgICBzZWxmLmNoZWNrX2ludmFyaWFudChoZWFwKQorICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgd2hpbGUgaGVhcDoKKyAgICAgICAgICAgIGl0ZW0gPSBzZWxmLm1vZHVsZS5oZWFwcG9wKGhlYXApCisgICAgICAgICAgICBzZWxmLmNoZWNrX2ludmFyaWFudChoZWFwKQorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoaXRlbSkKKyAgICAgICAgZGF0YV9zb3J0ZWQgPSBkYXRhWzpdCisgICAgICAgIGRhdGFfc29ydGVkLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFfc29ydGVkLCByZXN1bHRzKQorICAgICAgICAjIDIpIENoZWNrIHRoYXQgdGhlIGludmFyaWFudCBob2xkcyBmb3IgYSBzb3J0ZWQgYXJyYXkKKyAgICAgICAgc2VsZi5jaGVja19pbnZhcmlhbnQocmVzdWx0cykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubW9kdWxlLmhlYXBwdXNoLCBbXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1vZHVsZS5oZWFwcHVzaCwgTm9uZSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tb2R1bGUuaGVhcHBvcCwgTm9uZSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIGNoZWNrX2ludmFyaWFudChzZWxmLCBoZWFwKToKKyAgICAgICAgIyBDaGVjayB0aGUgaGVhcCBpbnZhcmlhbnQuCisgICAgICAgIGZvciBwb3MsIGl0ZW0gaW4gZW51bWVyYXRlKGhlYXApOgorICAgICAgICAgICAgaWYgcG9zOiAjIHBvcyAwIGhhcyBubyBwYXJlbnQKKyAgICAgICAgICAgICAgICBwYXJlbnRwb3MgPSAocG9zLTEpID4+IDEKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGVhcFtwYXJlbnRwb3NdIDw9IGl0ZW0pCisKKyAgICBkZWYgdGVzdF9oZWFwaWZ5KHNlbGYpOgorICAgICAgICBmb3Igc2l6ZSBpbiByYW5nZSgzMCk6CisgICAgICAgICAgICBoZWFwID0gW3JhbmRvbS5yYW5kb20oKSBmb3IgZHVtbXkgaW4gcmFuZ2Uoc2l6ZSldCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5oZWFwaWZ5KGhlYXApCisgICAgICAgICAgICBzZWxmLmNoZWNrX2ludmFyaWFudChoZWFwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tb2R1bGUuaGVhcGlmeSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X25haXZlX25iZXN0KHNlbGYpOgorICAgICAgICBkYXRhID0gW3JhbmRvbS5yYW5kcmFuZ2UoMjAwMCkgZm9yIGkgaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIGhlYXAgPSBbXQorICAgICAgICBmb3IgaXRlbSBpbiBkYXRhOgorICAgICAgICAgICAgc2VsZi5tb2R1bGUuaGVhcHB1c2goaGVhcCwgaXRlbSkKKyAgICAgICAgICAgIGlmIGxlbihoZWFwKSA+IDEwOgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLmhlYXBwb3AoaGVhcCkKKyAgICAgICAgaGVhcC5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFwLCBzb3J0ZWQoZGF0YSlbLTEwOl0pCisKKyAgICBkZWYgaGVhcGl0ZXIoc2VsZiwgaGVhcCk6CisgICAgICAgICMgQW4gaXRlcmF0b3IgcmV0dXJuaW5nIGEgaGVhcCdzIGVsZW1lbnRzLCBzbWFsbGVzdC1maXJzdC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLm1vZHVsZS5oZWFwcG9wKGhlYXApCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfbmJlc3Qoc2VsZik6CisgICAgICAgICMgTGVzcy1uYWl2ZSAiTi1iZXN0IiBhbGdvcml0aG0sIG11Y2ggZmFzdGVyIChpZiBsZW4oZGF0YSkgaXMgYmlnCisgICAgICAgICMgZW5vdWdoIDx3aW5rPikgdGhhbiBzb3J0aW5nIGFsbCBvZiBkYXRhLiAgSG93ZXZlciwgaWYgd2UgaGFkIGEgbWF4CisgICAgICAgICMgaGVhcCBpbnN0ZWFkIG9mIGEgbWluIGhlYXAsIGl0IGNvdWxkIGdvIGZhc3RlciBzdGlsbCB2aWEKKyAgICAgICAgIyBoZWFwaWZ5J2luZyBhbGwgb2YgZGF0YSAobGluZWFyIHRpbWUpLCB0aGVuIGRvaW5nIDEwIGhlYXBwb3BzCisgICAgICAgICMgKDEwIGxvZy10aW1lIHN0ZXBzKS4KKyAgICAgICAgZGF0YSA9IFtyYW5kb20ucmFuZHJhbmdlKDIwMDApIGZvciBpIGluIHJhbmdlKDEwMDApXQorICAgICAgICBoZWFwID0gZGF0YVs6MTBdCisgICAgICAgIHNlbGYubW9kdWxlLmhlYXBpZnkoaGVhcCkKKyAgICAgICAgZm9yIGl0ZW0gaW4gZGF0YVsxMDpdOgorICAgICAgICAgICAgaWYgaXRlbSA+IGhlYXBbMF06ICAjIHRoaXMgZ2V0cyByYXJlciB0aGUgbG9uZ2VyIHdlIHJ1bgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLmhlYXByZXBsYWNlKGhlYXAsIGl0ZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzZWxmLmhlYXBpdGVyKGhlYXApKSwgc29ydGVkKGRhdGEpWy0xMDpdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tb2R1bGUuaGVhcHJlcGxhY2UsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tb2R1bGUuaGVhcHJlcGxhY2UsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHNlbGYubW9kdWxlLmhlYXByZXBsYWNlLCBbXSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X25iZXN0X3dpdGhfcHVzaHBvcChzZWxmKToKKyAgICAgICAgZGF0YSA9IFtyYW5kb20ucmFuZHJhbmdlKDIwMDApIGZvciBpIGluIHJhbmdlKDEwMDApXQorICAgICAgICBoZWFwID0gZGF0YVs6MTBdCisgICAgICAgIHNlbGYubW9kdWxlLmhlYXBpZnkoaGVhcCkKKyAgICAgICAgZm9yIGl0ZW0gaW4gZGF0YVsxMDpdOgorICAgICAgICAgICAgc2VsZi5tb2R1bGUuaGVhcHB1c2hwb3AoaGVhcCwgaXRlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHNlbGYuaGVhcGl0ZXIoaGVhcCkpLCBzb3J0ZWQoZGF0YSlbLTEwOl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tb2R1bGUuaGVhcHB1c2hwb3AoW10sICd4JyksICd4JykKKworICAgIGRlZiB0ZXN0X2hlYXBwdXNocG9wKHNlbGYpOgorICAgICAgICBoID0gW10KKyAgICAgICAgeCA9IHNlbGYubW9kdWxlLmhlYXBwdXNocG9wKGgsIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChoLCB4KSwgKFtdLCAxMCkpCisKKyAgICAgICAgaCA9IFsxMF0KKyAgICAgICAgeCA9IHNlbGYubW9kdWxlLmhlYXBwdXNocG9wKGgsIDEwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGgsIHgpLCAoWzEwXSwgMTAuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShoWzBdKSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoeCksIGZsb2F0KQorCisgICAgICAgIGggPSBbMTBdOworICAgICAgICB4ID0gc2VsZi5tb2R1bGUuaGVhcHB1c2hwb3AoaCwgOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoaCwgeCksIChbMTBdLCA5KSkKKworICAgICAgICBoID0gWzEwXTsKKyAgICAgICAgeCA9IHNlbGYubW9kdWxlLmhlYXBwdXNocG9wKGgsIDExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChoLCB4KSwgKFsxMV0sIDEwKSkKKworICAgIGRlZiB0ZXN0X2hlYXBzb3J0KHNlbGYpOgorICAgICAgICAjIEV4ZXJjaXNlIGV2ZXJ5dGhpbmcgd2l0aCByZXBlYXRlZCBoZWFwc29ydCBjaGVja3MKKyAgICAgICAgZm9yIHRyaWFsIGluIHhyYW5nZSgxMDApOgorICAgICAgICAgICAgc2l6ZSA9IHJhbmRvbS5yYW5kcmFuZ2UoNTApCisgICAgICAgICAgICBkYXRhID0gW3JhbmRvbS5yYW5kcmFuZ2UoMjUpIGZvciBpIGluIHJhbmdlKHNpemUpXQorICAgICAgICAgICAgaWYgdHJpYWwgJiAxOiAgICAgIyBIYWxmIG9mIHRoZSB0aW1lLCB1c2UgaGVhcGlmeQorICAgICAgICAgICAgICAgIGhlYXAgPSBkYXRhWzpdCisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuaGVhcGlmeShoZWFwKQorICAgICAgICAgICAgZWxzZTogICAgICAgICAgICAgIyBUaGUgcmVzdCBvZiB0aGUgdGltZSwgdXNlIGhlYXBwdXNoCisgICAgICAgICAgICAgICAgaGVhcCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gZGF0YToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuaGVhcHB1c2goaGVhcCwgaXRlbSkKKyAgICAgICAgICAgIGhlYXBfc29ydGVkID0gW3NlbGYubW9kdWxlLmhlYXBwb3AoaGVhcCkgZm9yIGkgaW4gcmFuZ2Uoc2l6ZSldCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYXBfc29ydGVkLCBzb3J0ZWQoZGF0YSkpCisKKyAgICBkZWYgdGVzdF9tZXJnZShzZWxmKToKKyAgICAgICAgaW5wdXRzID0gW10KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHJhbmRvbS5yYW5kcmFuZ2UoNSkpOgorICAgICAgICAgICAgcm93ID0gc29ydGVkKHJhbmRvbS5yYW5kcmFuZ2UoMTAwMCkgZm9yIGogaW4gcmFuZ2UocmFuZG9tLnJhbmRyYW5nZSgxMCkpKQorICAgICAgICAgICAgaW5wdXRzLmFwcGVuZChyb3cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGNoYWluKCppbnB1dHMpKSwgbGlzdChzZWxmLm1vZHVsZS5tZXJnZSgqaW5wdXRzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzZWxmLm1vZHVsZS5tZXJnZSgpKSwgW10pCisKKyAgICBkZWYgdGVzdF9tZXJnZV9zdGFiaWxpdHkoc2VsZik6CisgICAgICAgIGNsYXNzIEludChpbnQpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBpbnB1dHMgPSBbW10sIFtdLCBbXSwgW11dCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIwMDAwKToKKyAgICAgICAgICAgIHN0cmVhbSA9IHJhbmRvbS5yYW5kcmFuZ2UoNCkKKyAgICAgICAgICAgIHggPSByYW5kb20ucmFuZHJhbmdlKDUwMCkKKyAgICAgICAgICAgIG9iaiA9IEludCh4KQorICAgICAgICAgICAgb2JqLnBhaXIgPSAoeCwgc3RyZWFtKQorICAgICAgICAgICAgaW5wdXRzW3N0cmVhbV0uYXBwZW5kKG9iaikKKyAgICAgICAgZm9yIHN0cmVhbSBpbiBpbnB1dHM6CisgICAgICAgICAgICBzdHJlYW0uc29ydCgpCisgICAgICAgIHJlc3VsdCA9IFtpLnBhaXIgZm9yIGkgaW4gc2VsZi5tb2R1bGUubWVyZ2UoKmlucHV0cyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzb3J0ZWQocmVzdWx0KSkKKworICAgIGRlZiB0ZXN0X25zbWFsbGVzdChzZWxmKToKKyAgICAgICAgZGF0YSA9IFsocmFuZG9tLnJhbmRyYW5nZSgyMDAwKSwgaSkgZm9yIGkgaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIGZvciBmIGluIChOb25lLCBsYW1iZGEgeDogIHhbMF0gKiA1NDcgJSAyMDAwKToKKyAgICAgICAgICAgIGZvciBuIGluICgwLCAxLCAyLCAxMCwgMTAwLCA0MDAsIDk5OSwgMTAwMCwgMTEwMCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1vZHVsZS5uc21hbGxlc3QobiwgZGF0YSksIHNvcnRlZChkYXRhKVs6bl0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1vZHVsZS5uc21hbGxlc3QobiwgZGF0YSwga2V5PWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkKGRhdGEsIGtleT1mKVs6bl0pCisKKyAgICBkZWYgdGVzdF9ubGFyZ2VzdChzZWxmKToKKyAgICAgICAgZGF0YSA9IFsocmFuZG9tLnJhbmRyYW5nZSgyMDAwKSwgaSkgZm9yIGkgaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIGZvciBmIGluIChOb25lLCBsYW1iZGEgeDogIHhbMF0gKiA1NDcgJSAyMDAwKToKKyAgICAgICAgICAgIGZvciBuIGluICgwLCAxLCAyLCAxMCwgMTAwLCA0MDAsIDk5OSwgMTAwMCwgMTEwMCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1vZHVsZS5ubGFyZ2VzdChuLCBkYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZChkYXRhLCByZXZlcnNlPVRydWUpWzpuXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubW9kdWxlLm5sYXJnZXN0KG4sIGRhdGEsIGtleT1mKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZChkYXRhLCBrZXk9ZiwgcmV2ZXJzZT1UcnVlKVs6bl0pCisKKyAgICBkZWYgdGVzdF9jb21wYXJpc29uX29wZXJhdG9yKHNlbGYpOgorICAgICAgICAjIElzc3VlIDMwNTE6IE1ha2Ugc3VyZSBoZWFwcSB3b3JrcyB3aXRoIGJvdGggX19sdF9fIGFuZCBfX2xlX18KKyAgICAgICAgZGVmIGhzb3J0KGRhdGEsIGNvbXApOgorICAgICAgICAgICAgZGF0YSA9IG1hcChjb21wLCBkYXRhKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuaGVhcGlmeShkYXRhKQorICAgICAgICAgICAgcmV0dXJuIFtzZWxmLm1vZHVsZS5oZWFwcG9wKGRhdGEpLnggZm9yIGkgaW4gcmFuZ2UobGVuKGRhdGEpKV0KKyAgICAgICAgY2xhc3MgTFQ6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYueCA+IG90aGVyLngKKyAgICAgICAgY2xhc3MgTEU6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYueCA+PSBvdGhlci54CisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnJhbmRvbSgpIGZvciBpIGluIHJhbmdlKDEwMCldCisgICAgICAgIHRhcmdldCA9IHNvcnRlZChkYXRhLCByZXZlcnNlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHNvcnQoZGF0YSwgTFQpLCB0YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHNvcnQoZGF0YSwgTEUpLCB0YXJnZXQpCisKKworY2xhc3MgVGVzdEhlYXBQeXRob24oVGVzdEhlYXApOgorICAgIG1vZHVsZSA9IHB5X2hlYXBxCisKKworQHNraXBVbmxlc3MoY19oZWFwcSwgJ3JlcXVpcmVzIF9oZWFwcScpCitjbGFzcyBUZXN0SGVhcEMoVGVzdEhlYXApOgorICAgIG1vZHVsZSA9IGNfaGVhcHEKKworCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIExlbk9ubHk6CisgICAgIkR1bW15IHNlcXVlbmNlIGNsYXNzIGRlZmluaW5nIF9fbGVuX18gYnV0IG5vdCBfX2dldGl0ZW1fXy4iCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiAxMAorCitjbGFzcyBHZXRPbmx5OgorICAgICJEdW1teSBzZXF1ZW5jZSBjbGFzcyBkZWZpbmluZyBfX2dldGl0ZW1fXyBidXQgbm90IF9fbGVuX18uIgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBuZHgpOgorICAgICAgICByZXR1cm4gMTAKKworY2xhc3MgQ21wRXJyOgorICAgICJEdW1teSBlbGVtZW50IHRoYXQgYWx3YXlzIHJhaXNlcyBhbiBlcnJvciBkdXJpbmcgY29tcGFyaXNvbiIKKyAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCisKK2RlZiBSKHNlcW4pOgorICAgICdSZWd1bGFyIGdlbmVyYXRvcicKKyAgICBmb3IgaSBpbiBzZXFuOgorICAgICAgICB5aWVsZCBpCisKK2NsYXNzIEc6CisgICAgJ1NlcXVlbmNlIHVzaW5nIF9fZ2V0aXRlbV9fJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VxbltpXQorCitjbGFzcyBJOgorICAgICdTZXF1ZW5jZSB1c2luZyBpdGVyYXRvciBwcm90b2NvbCcKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pID49IGxlbihzZWxmLnNlcW4pOiByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIHYgPSBzZWxmLnNlcW5bc2VsZi5pXQorICAgICAgICBzZWxmLmkgKz0gMQorICAgICAgICByZXR1cm4gdgorCitjbGFzcyBJZzoKKyAgICAnU2VxdWVuY2UgdXNpbmcgaXRlcmF0b3IgcHJvdG9jb2wgZGVmaW5lZCB3aXRoIGEgZ2VuZXJhdG9yJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBmb3IgdmFsIGluIHNlbGYuc2VxbjoKKyAgICAgICAgICAgIHlpZWxkIHZhbAorCitjbGFzcyBYOgorICAgICdNaXNzaW5nIF9fZ2V0aXRlbV9fIGFuZCBfX2l0ZXJfXycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmkgPj0gbGVuKHNlbGYuc2Vxbik6IHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgdiA9IHNlbGYuc2VxbltzZWxmLmldCisgICAgICAgIHNlbGYuaSArPSAxCisgICAgICAgIHJldHVybiB2CisKK2NsYXNzIE46CisgICAgJ0l0ZXJhdG9yIG1pc3NpbmcgbmV4dCgpJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCitjbGFzcyBFOgorICAgICdUZXN0IHByb3BhZ2F0aW9uIG9mIGV4Y2VwdGlvbnMnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgICAgIHNlbGYuaSA9IDAKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIDMgLy8gMAorCitjbGFzcyBTOgorICAgICdUZXN0IGltbWVkaWF0ZSBzdG9wJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgcGFzcworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorCitmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY2hhaW4sIGltYXAKK2RlZiBMKHNlcW4pOgorICAgICdUZXN0IG11bHRpcGxlIHRpZXJzIG9mIGl0ZXJhdG9ycycKKyAgICByZXR1cm4gY2hhaW4oaW1hcChsYW1iZGEgeDp4LCBSKElnKEcoc2VxbikpKSkpCisKK2NsYXNzIFNpZGVFZmZlY3RMVDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUsIGhlYXApOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgc2VsZi5oZWFwID0gaGVhcAorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHNlbGYuaGVhcFs6XSA9IFtdCisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDwgb3RoZXIudmFsdWUKKworCitjbGFzcyBUZXN0RXJyb3JIYW5kbGluZyhUZXN0Q2FzZSk6CisgICAgbW9kdWxlID0gTm9uZQorCisgICAgZGVmIHRlc3Rfbm9uX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoc2VsZi5tb2R1bGUuaGVhcGlmeSwgc2VsZi5tb2R1bGUuaGVhcHBvcCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciksIGYsIDEwKQorICAgICAgICBmb3IgZiBpbiAoc2VsZi5tb2R1bGUuaGVhcHB1c2gsIHNlbGYubW9kdWxlLmhlYXByZXBsYWNlLAorICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUubmxhcmdlc3QsIHNlbGYubW9kdWxlLm5zbWFsbGVzdCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciksIGYsIDEwLCAxMCkKKworICAgIGRlZiB0ZXN0X2xlbl9vbmx5KHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoc2VsZi5tb2R1bGUuaGVhcGlmeSwgc2VsZi5tb2R1bGUuaGVhcHBvcCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciksIGYsIExlbk9ubHkoKSkKKyAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLmhlYXBwdXNoLCBzZWxmLm1vZHVsZS5oZWFwcmVwbGFjZSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciksIGYsIExlbk9ubHkoKSwgMTApCisgICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5ubGFyZ2VzdCwgc2VsZi5tb2R1bGUubnNtYWxsZXN0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgMiwgTGVuT25seSgpKQorCisgICAgZGVmIHRlc3RfZ2V0X29ubHkoc2VsZik6CisgICAgICAgIHNlcSA9IFtDbXBFcnIoKSwgQ21wRXJyKCksIENtcEVycigpXQorICAgICAgICBmb3IgZiBpbiAoc2VsZi5tb2R1bGUuaGVhcGlmeSwgc2VsZi5tb2R1bGUuaGVhcHBvcCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgZiwgc2VxKQorICAgICAgICBmb3IgZiBpbiAoc2VsZi5tb2R1bGUuaGVhcHB1c2gsIHNlbGYubW9kdWxlLmhlYXByZXBsYWNlKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBmLCBzZXEsIDEwKQorICAgICAgICBmb3IgZiBpbiAoc2VsZi5tb2R1bGUubmxhcmdlc3QsIHNlbGYubW9kdWxlLm5zbWFsbGVzdCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgZiwgMiwgc2VxKQorCisgICAgZGVmIHRlc3RfYXJnX3BhcnNpbmcoc2VsZik6CisgICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5oZWFwaWZ5LCBzZWxmLm1vZHVsZS5oZWFwcG9wLAorICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuaGVhcHB1c2gsIHNlbGYubW9kdWxlLmhlYXByZXBsYWNlLAorICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUubmxhcmdlc3QsIHNlbGYubW9kdWxlLm5zbWFsbGVzdCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciksIGYsIDEwKQorCisgICAgZGVmIHRlc3RfaXRlcmFibGVfYXJncyhzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLm5sYXJnZXN0LCBzZWxmLm1vZHVsZS5uc21hbGxlc3QpOgorICAgICAgICAgICAgZm9yIHMgaW4gKCIxMjMiLCAiIiwgcmFuZ2UoMTAwMCksICgnZG8nLCAxLjIpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIEwsIFIpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiY29tcGFyaW5nIHVuZXF1YWwgdHlwZXMgbm90IHN1cHBvcnRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZyksIHF1aWV0PVRydWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKDIsIGcocykpLCBmKDIscykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKDIsIFMocykpLCBbXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIDIsIFgocykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCAyLCBOKHMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBmLCAyLCBFKHMpKQorCisgICAgIyBJc3N1ZSAjMTcyNzg6IHRoZSBoZWFwIG1heSBjaGFuZ2Ugc2l6ZSB3aGlsZSBpdCdzIGJlaW5nIHdhbGtlZC4KKworICAgIGRlZiB0ZXN0X2hlYXBwdXNoX211dGF0aW5nX2hlYXAoc2VsZik6CisgICAgICAgIGhlYXAgPSBbXQorICAgICAgICBoZWFwLmV4dGVuZChTaWRlRWZmZWN0TFQoaSwgaGVhcCkgZm9yIGkgaW4gcmFuZ2UoMjAwKSkKKyAgICAgICAgIyBQeXRob24gdmVyc2lvbiByYWlzZXMgSW5kZXhFcnJvciwgQyB2ZXJzaW9uIFJ1bnRpbWVFcnJvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChJbmRleEVycm9yLCBSdW50aW1lRXJyb3IpKToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmhlYXBwdXNoKGhlYXAsIFNpZGVFZmZlY3RMVCg1LCBoZWFwKSkKKworICAgIGRlZiB0ZXN0X2hlYXBwb3BfbXV0YXRpbmdfaGVhcChzZWxmKToKKyAgICAgICAgaGVhcCA9IFtdCisgICAgICAgIGhlYXAuZXh0ZW5kKFNpZGVFZmZlY3RMVChpLCBoZWFwKSBmb3IgaSBpbiByYW5nZSgyMDApKQorICAgICAgICAjIFB5dGhvbiB2ZXJzaW9uIHJhaXNlcyBJbmRleEVycm9yLCBDIHZlcnNpb24gUnVudGltZUVycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKEluZGV4RXJyb3IsIFJ1bnRpbWVFcnJvcikpOgorICAgICAgICAgICAgc2VsZi5tb2R1bGUuaGVhcHBvcChoZWFwKQorCisKK2NsYXNzIFRlc3RFcnJvckhhbmRsaW5nUHl0aG9uKFRlc3RFcnJvckhhbmRsaW5nKToKKyAgICBtb2R1bGUgPSBweV9oZWFwcQorCisKK0Bza2lwVW5sZXNzKGNfaGVhcHEsICdyZXF1aXJlcyBfaGVhcHEnKQorY2xhc3MgVGVzdEVycm9ySGFuZGxpbmdDKFRlc3RFcnJvckhhbmRsaW5nKToKKyAgICBtb2R1bGUgPSBjX2hlYXBxCisKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICB0ZXN0X2NsYXNzZXMgPSBbVGVzdE1vZHVsZXMsIFRlc3RIZWFwUHl0aG9uLCBUZXN0SGVhcEMsCisgICAgICAgICAgICAgICAgICAgIFRlc3RFcnJvckhhbmRsaW5nUHl0aG9uLCBUZXN0RXJyb3JIYW5kbGluZ0NdCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQorCisgICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCisgICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6CisgICAgICAgIGltcG9ydCBnYworICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1CisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oY291bnRzKSk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgcHJpbnQgY291bnRzCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2htYWMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9obWFjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMTQ4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9obWFjLnB5CkBAIC0wLDAgKzEsMzE0IEBACitpbXBvcnQgaG1hYworaW1wb3J0IGhhc2hsaWIKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBUZXN0VmVjdG9yc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X21kNV92ZWN0b3JzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIEhNQUMgbW9kdWxlIGFnYWluc3QgdGVzdCB2ZWN0b3JzIGZyb20gdGhlIFJGQy4KKworICAgICAgICBkZWYgbWQ1dGVzdChrZXksIGRhdGEsIGRpZ2VzdCk6CisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS51cHBlcigpLCBkaWdlc3QudXBwZXIoKSkKKworICAgICAgICBtZDV0ZXN0KGNocigweDBiKSAqIDE2LAorICAgICAgICAgICAgICAgICJIaSBUaGVyZSIsCisgICAgICAgICAgICAgICAgIjkyOTQ3MjdBMzYzOEJCMUMxM0Y0OEVGODE1OEJGQzlEIikKKworICAgICAgICBtZDV0ZXN0KCJKZWZlIiwKKyAgICAgICAgICAgICAgICAid2hhdCBkbyB5YSB3YW50IGZvciBub3RoaW5nPyIsCisgICAgICAgICAgICAgICAgIjc1MGM3ODNlNmFiMGI1MDNlYWE4NmUzMTBhNWRiNzM4IikKKworICAgICAgICBtZDV0ZXN0KGNocigweEFBKSoxNiwKKyAgICAgICAgICAgICAgICBjaHIoMHhERCkqNTAsCisgICAgICAgICAgICAgICAgIjU2YmUzNDUyMWQxNDRjODhkYmI4YzczM2YwZThiM2Y2IikKKworICAgICAgICBtZDV0ZXN0KCIiLmpvaW4oW2NocihpKSBmb3IgaSBpbiByYW5nZSgxLCAyNildKSwKKyAgICAgICAgICAgICAgICBjaHIoMHhDRCkgKiA1MCwKKyAgICAgICAgICAgICAgICAiNjk3ZWFmMGFjYTNhM2FlYTNhNzUxNjQ3NDZmZmFhNzkiKQorCisgICAgICAgIG1kNXRlc3QoY2hyKDB4MEMpICogMTYsCisgICAgICAgICAgICAgICAgIlRlc3QgV2l0aCBUcnVuY2F0aW9uIiwKKyAgICAgICAgICAgICAgICAiNTY0NjFlZjIzNDJlZGMwMGY5YmFiOTk1NjkwZWZkNGMiKQorCisgICAgICAgIG1kNXRlc3QoY2hyKDB4QUEpICogODAsCisgICAgICAgICAgICAgICAgIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6ZSBLZXkgLSBIYXNoIEtleSBGaXJzdCIsCisgICAgICAgICAgICAgICAgIjZiMWFiN2ZlNGJkN2JmOGYwYjYyZTZjZTYxYjlkMGNkIikKKworICAgICAgICBtZDV0ZXN0KGNocigweEFBKSAqIDgwLAorICAgICAgICAgICAgICAgICgiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAiCisgICAgICAgICAgICAgICAgICJhbmQgTGFyZ2VyIFRoYW4gT25lIEJsb2NrLVNpemUgRGF0YSIpLAorICAgICAgICAgICAgICAgICI2ZjYzMGZhZDY3Y2RhMGVlMWZiMWY1NjJkYjNhYTUzZSIpCisKKyAgICBkZWYgdGVzdF9zaGFfdmVjdG9ycyhzZWxmKToKKyAgICAgICAgZGVmIHNoYXRlc3Qoa2V5LCBkYXRhLCBkaWdlc3QpOgorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD1oYXNobGliLnNoYTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkudXBwZXIoKSwgZGlnZXN0LnVwcGVyKCkpCisKKyAgICAgICAgc2hhdGVzdChjaHIoMHgwYikgKiAyMCwKKyAgICAgICAgICAgICAgICAiSGkgVGhlcmUiLAorICAgICAgICAgICAgICAgICJiNjE3MzE4NjU1MDU3MjY0ZTI4YmMwYjZmYjM3OGM4ZWYxNDZiZTAwIikKKworICAgICAgICBzaGF0ZXN0KCJKZWZlIiwKKyAgICAgICAgICAgICAgICAid2hhdCBkbyB5YSB3YW50IGZvciBub3RoaW5nPyIsCisgICAgICAgICAgICAgICAgImVmZmNkZjZhZTVlYjJmYTJkMjc0MTZkNWYxODRkZjljMjU5YTdjNzkiKQorCisgICAgICAgIHNoYXRlc3QoY2hyKDB4QUEpKjIwLAorICAgICAgICAgICAgICAgIGNocigweEREKSo1MCwKKyAgICAgICAgICAgICAgICAiMTI1ZDczNDJiOWFjMTFjZDkxYTM5YWY0OGFhMTdiNGY2M2YxNzVkMyIpCisKKyAgICAgICAgc2hhdGVzdCgiIi5qb2luKFtjaHIoaSkgZm9yIGkgaW4gcmFuZ2UoMSwgMjYpXSksCisgICAgICAgICAgICAgICAgY2hyKDB4Q0QpICogNTAsCisgICAgICAgICAgICAgICAgIjRjOTAwN2Y0MDI2MjUwYzZiYzg0MTRmOWJmNTBjODZjMmQ3MjM1ZGEiKQorCisgICAgICAgIHNoYXRlc3QoY2hyKDB4MEMpICogMjAsCisgICAgICAgICAgICAgICAgIlRlc3QgV2l0aCBUcnVuY2F0aW9uIiwKKyAgICAgICAgICAgICAgICAiNGMxYTAzNDI0YjU1ZTA3ZmU3ZjI3YmUxZDU4YmI5MzI0YTlhNWEwNCIpCisKKyAgICAgICAgc2hhdGVzdChjaHIoMHhBQSkgKiA4MCwKKyAgICAgICAgICAgICAgICAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IiwKKyAgICAgICAgICAgICAgICAiYWE0YWU1ZTE1MjcyZDAwZTk1NzA1NjM3Y2U4YTNiNTVlZDQwMjExMiIpCisKKyAgICAgICAgc2hhdGVzdChjaHIoMHhBQSkgKiA4MCwKKyAgICAgICAgICAgICAgICAoIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6ZSBLZXkgIgorICAgICAgICAgICAgICAgICAiYW5kIExhcmdlciBUaGFuIE9uZSBCbG9jay1TaXplIERhdGEiKSwKKyAgICAgICAgICAgICAgICAiZThlOTlkMGY0NTIzN2Q3ODZkNmJiYWE3OTY1Yzc4MDhiYmZmMWE5MSIpCisKKyAgICBkZWYgX3JmYzQyMzFfdGVzdF9jYXNlcyhzZWxmLCBoYXNoZnVuYyk6CisgICAgICAgIGRlZiBobWFjdGVzdChrZXksIGRhdGEsIGhleGRpZ2VzdHMpOgorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD1oYXNoZnVuYykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS5sb3dlcigpLCBoZXhkaWdlc3RzW2hhc2hmdW5jXSkKKworICAgICAgICAjIDQuMi4gIFRlc3QgQ2FzZSAxCisgICAgICAgIGhtYWN0ZXN0KGtleSA9ICdceDBiJyoyMCwKKyAgICAgICAgICAgICAgICAgZGF0YSA9ICdIaSBUaGVyZScsCisgICAgICAgICAgICAgICAgIGhleGRpZ2VzdHMgPSB7CisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGEyMjQ6ICc4OTZmYjExMjhhYmJkZjE5NjgzMjEwN2NkNDlkZjMzZicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzQ3YjRiMTE2OTkxMmJhNGY1MzY4NGIyMicsCisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGEyNTY6ICdiMDM0NGM2MWQ4ZGIzODUzNWNhOGFmY2VhZjBiZjEyYicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzg4MWRjMjAwYzk4MzNkYTcyNmU5Mzc2YzJlMzJjZmY3JywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTM4NDogJ2FmZDAzOTQ0ZDg0ODk1NjI2YjA4MjVmNGFiNDY5MDdmJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTVmOWRhZGJlNDEwMWVjNjgyYWEwMzRjN2NlYmM1OWMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWVhOWVhOTA3NmVkZTdmNGFmMTUyZThiMmZhOWNiNicsCisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGE1MTI6ICc4N2FhN2NkZWE1ZWY2MTlkNGZmMGI0MjQxYTFkNmNiMCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzIzNzlmNGUyY2U0ZWMyNzg3YWQwYjMwNTQ1ZTE3Y2RlJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGFhODMzYjdkNmI4YTcwMjAzOGIyNzRlYWVhM2Y0ZTQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZTlkOTE0ZWViNjFmMTcwMmU2OTZjMjAzYTEyNjg1NCcsCisgICAgICAgICAgICAgICAgIH0pCisKKyAgICAgICAgIyA0LjMuICBUZXN0IENhc2UgMgorICAgICAgICBobWFjdGVzdChrZXkgPSAnSmVmZScsCisgICAgICAgICAgICAgICAgIGRhdGEgPSAnd2hhdCBkbyB5YSB3YW50IGZvciBub3RoaW5nPycsCisgICAgICAgICAgICAgICAgIGhleGRpZ2VzdHMgPSB7CisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGEyMjQ6ICdhMzBlMDEwOThiYzZkYmJmNDU2OTBmM2E3ZTllNmQwZicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzhiYmVhMmEzOWU2MTQ4MDA4ZmQwNWU0NCcsCisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGEyNTY6ICc1YmRjYzE0NmJmNjA3NTRlNmEwNDI0MjYwODk1NzVjNycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzVhMDAzZjA4OWQyNzM5ODM5ZGVjNThiOTY0ZWMzODQzJywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTM4NDogJ2FmNDVkMmUzNzY0ODQwMzE2MTdmNzhkMmI1OGE2YjFiJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOWM3ZWY0NjRmNWEwMWI0N2U0MmVjMzczNjMyMjQ0NWUnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc4ZTIyNDBjYTVlNjllMmM3OGIzMjM5ZWNmYWIyMTY0OScsCisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGE1MTI6ICcxNjRiN2E3YmZjZjgxOWUyZTM5NWZiZTczYjU2ZTBhMycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzg3YmQ2NDIyMmU4MzFmZDYxMDI3MGNkN2VhMjUwNTU0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOTc1OGJmNzVjMDVhOTk0YTZkMDM0ZjY1ZjhmMGU2ZmQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYWVhYjFhMzRkNGE2YjRiNjM2ZTA3MGEzOGJjZTczNycsCisgICAgICAgICAgICAgICAgIH0pCisKKyAgICAgICAgIyA0LjQuICBUZXN0IENhc2UgMworICAgICAgICBobWFjdGVzdChrZXkgPSAnXHhhYScqMjAsCisgICAgICAgICAgICAgICAgIGRhdGEgPSAnXHhkZCcqNTAsCisgICAgICAgICAgICAgICAgIGhleGRpZ2VzdHMgPSB7CisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGEyMjQ6ICc3ZmIzY2IzNTg4YzZjMWY2ZmZhOTY5NGQ3ZDZhZDI2NCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzkzNjViMGMxZjY1ZDY5ZDFlYzgzMzNlYScsCisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGEyNTY6ICc3NzNlYTkxZTM2ODAwZTQ2ODU0ZGI4ZWJkMDkxODFhNycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzI5NTkwOThiM2VmOGMxMjJkOTYzNTUxNGNlZDU2NWZlJywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTM4NDogJzg4MDYyNjA4ZDNlNmFkOGEwYWEyYWNlMDE0YzhhODZmJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMGFhNjM1ZDk0N2FjOWZlYmU4M2VmNGU1NTk2NjE0NGInCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcyYTVhYjM5ZGMxMzgxNGI5NGUzYWI2ZTEwMWEzNGYyNycsCisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGE1MTI6ICdmYTczYjAwODlkNTZhMjg0ZWZiMGYwNzU2Yzg5MGJlOScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2IxYjVkYmRkOGVlODFhMzY1NWY4M2UzM2IyMjc5ZDM5JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmYzZTg0ODI3OWE3MjJjODA2YjQ4NWE0N2U2N2M4MDcnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiOTQ2YTMzN2JlZTg5NDI2NzQyNzg4NTllMTMyOTJmYicsCisgICAgICAgICAgICAgICAgIH0pCisKKyAgICAgICAgIyA0LjUuICBUZXN0IENhc2UgNAorICAgICAgICBobWFjdGVzdChrZXkgPSAnJy5qb2luKFtjaHIoeCkgZm9yIHggaW4geHJhbmdlKDB4MDEsIDB4MTkrMSldKSwKKyAgICAgICAgICAgICAgICAgZGF0YSA9ICdceGNkJyo1MCwKKyAgICAgICAgICAgICAgICAgaGV4ZGlnZXN0cyA9IHsKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTIyNDogJzZjMTE1MDY4NzQwMTNjYWM2YTJhYmMxYmIzODI2MjdjJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWM2YTkwZDg2ZWZjMDEyZGU3YWZlYzVhJywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTI1NjogJzgyNTU4YTM4OWE0NDNjMGVhNGNjODE5ODk5ZjIwODNhJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnODVmMGZhYTNlNTc4ZjgwNzdhMmUzZmY0NjcyOTY2NWInLAorICAgICAgICAgICAgICAgICAgIGhhc2hsaWIuc2hhMzg0OiAnM2U4YTY5Yjc3ODNjMjU4NTE5MzNhYjYyOTBhZjZjYTcnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc3YTk5ODE0ODA4NTAwMDljYzU1NzdjNmUxZjU3M2I0ZScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzY4MDFkZDIzYzRhN2Q2NzljY2Y4YTM4NmM2NzRjZmZiJywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTUxMjogJ2IwYmE0NjU2Mzc0NThjNjk5MGU1YThjNWY2MWQ0YWY3JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZTU3NmQ5N2ZmOTRiODcyZGU3NmY4MDUwMzYxZWUzZGInCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhOTFjYTVjMTFhYTI1ZWI0ZDY3OTI3NWNjNTc4ODA2MycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2E1ZjE5NzQxMTIwYzRmMmRlMmFkZWJlYjEwYTI5OGRkJywKKyAgICAgICAgICAgICAgICAgfSkKKworICAgICAgICAjIDQuNy4gIFRlc3QgQ2FzZSA2CisgICAgICAgIGhtYWN0ZXN0KGtleSA9ICdceGFhJyoxMzEsCisgICAgICAgICAgICAgICAgIGRhdGEgPSAnVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXonCisgICAgICAgICAgICAgICAgICAgICAgICAnZSBLZXkgLSBIYXNoIEtleSBGaXJzdCcsCisgICAgICAgICAgICAgICAgIGhleGRpZ2VzdHMgPSB7CisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGEyMjQ6ICc5NWU5YTBkYjk2MjA5NWFkYWViZTliMmQ2ZjBkYmNlMicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Q0OTlmMTEyZjJkMmI3MjczZmE2ODcwZScsCisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGEyNTY6ICc2MGU0MzE1OTFlZTBiNjdmMGQ4YTI2YWFjYmY1Yjc3ZicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzhlMGJjNjIxMzcyOGM1MTQwNTQ2MDQwZjBlZTM3ZjU0JywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTM4NDogJzRlY2UwODQ0ODU4MTNlOTA4OGQyYzYzYTA0MWJjNWI0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNGY5ZWYxMDEyYTJiNTg4ZjNjZDExZjA1MDMzYWM0YzYnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwYzJlZjZhYjQwMzBmZTgyOTYyNDhkZjE2M2Y0NDk1MicsCisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGE1MTI6ICc4MGIyNDI2M2M3YzFhM2ViYjcxNDkzYzFkZDdiZThiNCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzliNDZkMWY0MWI0YWVlYzExMjFiMDEzNzgzZjhmMzUyJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNmI1NmQwMzdlMDVmMjU5OGJkMGZkMjIxNWQ2YTFlNTInCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc5NWU2NGY3M2Y2M2YwYWVjOGI5MTVhOTg1ZDc4NjU5OCcsCisgICAgICAgICAgICAgICAgIH0pCisKKyAgICAgICAgIyA0LjguICBUZXN0IENhc2UgNworICAgICAgICBobWFjdGVzdChrZXkgPSAnXHhhYScqMTMxLAorICAgICAgICAgICAgICAgICBkYXRhID0gJ1RoaXMgaXMgYSB0ZXN0IHVzaW5nIGEgbGFyZ2VyIHRoJworICAgICAgICAgICAgICAgICAgICAgICAgJ2FuIGJsb2NrLXNpemUga2V5IGFuZCBhIGxhcmdlciB0JworICAgICAgICAgICAgICAgICAgICAgICAgJ2hhbiBibG9jay1zaXplIGRhdGEuIFRoZSBrZXkgbmVlJworICAgICAgICAgICAgICAgICAgICAgICAgJ2RzIHRvIGJlIGhhc2hlZCBiZWZvcmUgYmVpbmcgdXNlJworICAgICAgICAgICAgICAgICAgICAgICAgJ2QgYnkgdGhlIEhNQUMgYWxnb3JpdGhtLicsCisgICAgICAgICAgICAgICAgIGhleGRpZ2VzdHMgPSB7CisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGEyMjQ6ICczYTg1NDE2NmFjNWQ5ZjAyM2Y1NGQ1MTdkMGIzOWRiZCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzk0Njc3MGRiOWMyYjk1YzlmNmY1NjVkMScsCisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGEyNTY6ICc5YjA5ZmZhNzFiOTQyZmNiMjc2MzVmYmNkNWIwZTk0NCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JmZGM2MzY0NGYwNzEzOTM4YTdmNTE1MzVjM2EzNWUyJywKKyAgICAgICAgICAgICAgICAgICBoYXNobGliLnNoYTM4NDogJzY2MTcxNzhlOTQxZjAyMGQzNTFlMmYyNTRlOGZkMzJjJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNjAyNDIwZmViMGI4ZmI5YWRjY2ViYjgyNDYxZTk5YzUnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhNjc4Y2MzMWU3OTkxNzZkMzg2MGU2MTEwYzQ2NTIzZScsCisgICAgICAgICAgICAgICAgICAgaGFzaGxpYi5zaGE1MTI6ICdlMzdiNmE3NzVkYzg3ZGJhYTRkZmE5Zjk2ZTVlM2ZmZCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlYmQ3MWY4ODY3Mjg5ODY1ZGY1YTMyZDIwY2RjOTQ0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYjYwMjJjYWMzYzQ5ODJiMTBkNWVlYjU1YzNlNGRlMTUnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMzQ2NzZmYjZkZTA0NDYwNjVjOTc0NDBmYThjNmE1OCcsCisgICAgICAgICAgICAgICAgIH0pCisKKyAgICBkZWYgdGVzdF9zaGEyMjRfcmZjNDIzMShzZWxmKToKKyAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMjI0KQorCisgICAgZGVmIHRlc3Rfc2hhMjU2X3JmYzQyMzEoc2VsZik6CisgICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTI1NikKKworICAgIGRlZiB0ZXN0X3NoYTM4NF9yZmM0MjMxKHNlbGYpOgorICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEzODQpCisKKyAgICBkZWYgdGVzdF9zaGE1MTJfcmZjNDIzMShzZWxmKToKKyAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhNTEyKQorCisgICAgZGVmIHRlc3RfbGVnYWN5X2Jsb2NrX3NpemVfd2FybmluZ3Moc2VsZik6CisgICAgICAgIGNsYXNzIE1vY2tDcmF6eUhhc2gob2JqZWN0KToKKyAgICAgICAgICAgICIiIkFpbid0IG5vIGJsb2NrX3NpemUgYXR0cmlidXRlIGhlcmUuIiIiCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHNlbGYuX3ggPSBoYXNobGliLnNoYTEoKmFyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5kaWdlc3Rfc2l6ZSA9IHNlbGYuX3guZGlnZXN0X3NpemUKKyAgICAgICAgICAgIGRlZiB1cGRhdGUoc2VsZiwgdik6CisgICAgICAgICAgICAgICAgc2VsZi5feC51cGRhdGUodikKKyAgICAgICAgICAgIGRlZiBkaWdlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3guZGlnZXN0KCkKKworICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Vycm9yJywgUnVudGltZVdhcm5pbmcpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVXYXJuaW5nKToKKyAgICAgICAgICAgICAgICBobWFjLkhNQUMoJ2EnLCAnYicsIGRpZ2VzdG1vZD1Nb2NrQ3JhenlIYXNoKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnRXhwZWN0ZWQgd2FybmluZyBhYm91dCBtaXNzaW5nIGJsb2NrX3NpemUnKQorCisgICAgICAgICAgICBNb2NrQ3JhenlIYXNoLmJsb2NrX3NpemUgPSAxCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVXYXJuaW5nKToKKyAgICAgICAgICAgICAgICBobWFjLkhNQUMoJ2EnLCAnYicsIGRpZ2VzdG1vZD1Nb2NrQ3JhenlIYXNoKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnRXhwZWN0ZWQgd2FybmluZyBhYm91dCBzbWFsbCBibG9ja19zaXplJykKKworCisKK2NsYXNzIENvbnN0cnVjdG9yVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfbm9ybWFsKHNlbGYpOgorICAgICAgICAjIFN0YW5kYXJkIGNvbnN0cnVjdG9yIGNhbGwuCisgICAgICAgIGZhaWxlZCA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQygia2V5IikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTdGFuZGFyZCBjb25zdHJ1Y3RvciBjYWxsIHJhaXNlZCBleGNlcHRpb24uIikKKworICAgIGRlZiB0ZXN0X3dpdGh0ZXh0KHNlbGYpOgorICAgICAgICAjIENvbnN0cnVjdG9yIGNhbGwgd2l0aCB0ZXh0LgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKCJrZXkiLCAiaGFzaCB0aGlzISIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQ29uc3RydWN0b3IgY2FsbCB3aXRoIHRleHQgYXJndW1lbnQgcmFpc2VkIGV4Y2VwdGlvbi4iKQorCisgICAgZGVmIHRlc3Rfd2l0aG1vZHVsZShzZWxmKToKKyAgICAgICAgIyBDb25zdHJ1Y3RvciBjYWxsIHdpdGggdGV4dCBhbmQgZGlnZXN0IG1vZHVsZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQygia2V5IiwgIiIsIGhhc2hsaWIuc2hhMSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJDb25zdHJ1Y3RvciBjYWxsIHdpdGggaGFzaGxpYi5zaGExIHJhaXNlZCBleGNlcHRpb24uIikKKworY2xhc3MgU2FuaXR5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9pc19tZDUoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBpZiBITUFDIGRlZmF1bHRzIHRvIE1ENSBhbGdvcml0aG0uCisgICAgICAgICMgTk9URTogdGhpcyB3aGl0ZWJveCB0ZXN0IGRlcGVuZHMgb24gdGhlIGhtYWMgY2xhc3MgaW50ZXJuYWxzCisgICAgICAgIGggPSBobWFjLkhNQUMoImtleSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoLmRpZ2VzdF9jb25zID09IGhhc2hsaWIubWQ1KQorCisgICAgZGVmIHRlc3RfZXhlcmNpc2VfYWxsX21ldGhvZHMoc2VsZik6CisgICAgICAgICMgRXhlcmNpc2luZyBhbGwgbWV0aG9kcyBvbmNlLgorICAgICAgICAjIFRoaXMgbXVzdCBub3QgcmFpc2UgYW55IGV4Y2VwdGlvbnMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQygibXkgc2VjcmV0IGtleSIpCisgICAgICAgICAgICBoLnVwZGF0ZSgiY29tcHV0ZSB0aGUgaGFzaCBvZiB0aGlzIHRleHQhIikKKyAgICAgICAgICAgIGRpZyA9IGguZGlnZXN0KCkKKyAgICAgICAgICAgIGRpZyA9IGguaGV4ZGlnZXN0KCkKKyAgICAgICAgICAgIGgyID0gaC5jb3B5KCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeGNlcHRpb24gcmFpc2VkIGR1cmluZyBub3JtYWwgdXNhZ2Ugb2YgSE1BQyBjbGFzcy4iKQorCitjbGFzcyBDb3B5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGlmIGF0dHJpYnV0ZXMgYXJlIG9mIHNhbWUgdHlwZS4KKyAgICAgICAgaDEgPSBobWFjLkhNQUMoImtleSIpCisgICAgICAgIGgyID0gaDEuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMS5kaWdlc3RfY29ucyA9PSBoMi5kaWdlc3RfY29ucywKKyAgICAgICAgICAgICJkaWdlc3QgY29uc3RydWN0b3JzIGRvbid0IG1hdGNoLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGgxLmlubmVyKSA9PSB0eXBlKGgyLmlubmVyKSwKKyAgICAgICAgICAgICJUeXBlcyBvZiBpbm5lciBkb24ndCBtYXRjaC4iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShoMS5vdXRlcikgPT0gdHlwZShoMi5vdXRlciksCisgICAgICAgICAgICAiVHlwZXMgb2Ygb3V0ZXIgZG9uJ3QgbWF0Y2guIikKKworICAgIGRlZiB0ZXN0X3JlYWxjb3B5KHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgaWYgdGhlIGNvcHkgbWV0aG9kIGNyZWF0ZWQgYSByZWFsIGNvcHkuCisgICAgICAgIGgxID0gaG1hYy5ITUFDKCJrZXkiKQorICAgICAgICBoMiA9IGgxLmNvcHkoKQorICAgICAgICAjIFVzaW5nIGlkKCkgaW4gY2FzZSBzb21lYm9keSBoYXMgb3ZlcnJpZGRlbiBfX2NtcF9fLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaWQoaDEpICE9IGlkKGgyKSwgIk5vIHJlYWwgY29weSBvZiB0aGUgSE1BQyBpbnN0YW5jZS4iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaWQoaDEuaW5uZXIpICE9IGlkKGgyLmlubmVyKSwKKyAgICAgICAgICAgICJObyByZWFsIGNvcHkgb2YgdGhlIGF0dHJpYnV0ZSAnaW5uZXInLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpZChoMS5vdXRlcikgIT0gaWQoaDIub3V0ZXIpLAorICAgICAgICAgICAgIk5vIHJlYWwgY29weSBvZiB0aGUgYXR0cmlidXRlICdvdXRlcicuIikKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgaWYgdGhlIGNvcHkgaGFzIHRoZSBzYW1lIGRpZ2VzdHMuCisgICAgICAgIGgxID0gaG1hYy5ITUFDKCJrZXkiKQorICAgICAgICBoMS51cGRhdGUoInNvbWUgcmFuZG9tIHRleHQiKQorICAgICAgICBoMiA9IGgxLmNvcHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEuZGlnZXN0KCkgPT0gaDIuZGlnZXN0KCksCisgICAgICAgICAgICAiRGlnZXN0IG9mIGNvcHkgZG9lc24ndCBtYXRjaCBvcmlnaW5hbCBkaWdlc3QuIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxLmhleGRpZ2VzdCgpID09IGgyLmhleGRpZ2VzdCgpLAorICAgICAgICAgICAgIkhleGRpZ2VzdCBvZiBjb3B5IGRvZXNuJ3QgbWF0Y2ggb3JpZ2luYWwgaGV4ZGlnZXN0LiIpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBUZXN0VmVjdG9yc1Rlc3RDYXNlLAorICAgICAgICBDb25zdHJ1Y3RvclRlc3RDYXNlLAorICAgICAgICBTYW5pdHlUZXN0Q2FzZSwKKyAgICAgICAgQ29weVRlc3RDYXNlCisgICAgKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9ob3RzaG90LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaG90c2hvdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGE5NzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaG90c2hvdC5weQpAQCAtMCwwICsxLDE1OCBAQAoraW1wb3J0IG9zCitpbXBvcnQgcHByaW50CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IF9ob3RzaG90CitpbXBvcnQgZ2MKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBTaWxlbmNlIFB5M2sgd2FybmluZworaG90c2hvdCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdob3RzaG90JywgZGVwcmVjYXRlZD1UcnVlKQorZnJvbSBob3RzaG90LmxvZyBpbXBvcnQgRU5URVIsIEVYSVQsIExJTkUKK2Zyb20gaG90c2hvdCBpbXBvcnQgc3RhdHMKKworCitkZWYgc2hvcnRmaWxlbmFtZShmbik6CisgICAgIyBXZSB1c2UgYSByZWFsbHkgc2hvcnRlbmVkIGZpbGVuYW1lIHNpbmNlIGFuIGV4YWN0IG1hdGNoIGlzIG1hZGUsCisgICAgIyBhbmQgdGhlIHNvdXJjZSBtYXkgYmUgZWl0aGVyIGEgUHl0aG9uIHNvdXJjZSBmaWxlIG9yIGEKKyAgICAjIHByZS1jb21waWxlZCBieXRlY29kZSBmaWxlLgorICAgIGlmIGZuOgorICAgICAgICByZXR1cm4gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGZuKSlbMF0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gZm4KKworCitjbGFzcyBVbmxpbmtpbmdMb2dSZWFkZXIoaG90c2hvdC5sb2cuTG9nUmVhZGVyKToKKyAgICAiIiJFeHRlbmQgdGhlIExvZ1JlYWRlciBzbyB0aGUgbG9nIGZpbGUgaXMgdW5saW5rZWQgd2hlbiB3ZSdyZQorICAgIGRvbmUgd2l0aCBpdC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dmbik6CisgICAgICAgIHNlbGYuX19sb2dmbiA9IGxvZ2ZuCisgICAgICAgIGhvdHNob3QubG9nLkxvZ1JlYWRlci5fX2luaXRfXyhzZWxmLCBsb2dmbikKKworICAgIGRlZiBuZXh0KHNlbGYsIGluZGV4PU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gaG90c2hvdC5sb2cuTG9nUmVhZGVyLm5leHQoc2VsZikKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9fbG9nZm4pCisgICAgICAgICAgICByYWlzZQorCisKK2NsYXNzIEhvdFNob3RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIG5ld19wcm9maWxlcihzZWxmLCBsaW5lZXZlbnRzPTAsIGxpbmV0aW1pbmdzPTEpOgorICAgICAgICBzZWxmLmxvZ2ZuID0gdGVzdF9zdXBwb3J0LlRFU1RGTgorICAgICAgICByZXR1cm4gaG90c2hvdC5Qcm9maWxlKHNlbGYubG9nZm4sIGxpbmVldmVudHMsIGxpbmV0aW1pbmdzKQorCisgICAgZGVmIGdldF9sb2dyZWFkZXIoc2VsZik6CisgICAgICAgIHJldHVybiBVbmxpbmtpbmdMb2dSZWFkZXIoc2VsZi5sb2dmbikKKworICAgIGRlZiBnZXRfZXZlbnRzX3dvdGltZShzZWxmKToKKyAgICAgICAgTCA9IFtdCisgICAgICAgIGZvciBldmVudCBpbiBzZWxmLmdldF9sb2dyZWFkZXIoKToKKyAgICAgICAgICAgIHdoYXQsIChmaWxlbmFtZSwgbGluZW5vLCBmdW5jbmFtZSksIHRkZWx0YSA9IGV2ZW50CisgICAgICAgICAgICBMLmFwcGVuZCgod2hhdCwgKHNob3J0ZmlsZW5hbWUoZmlsZW5hbWUpLCBsaW5lbm8sIGZ1bmNuYW1lKSkpCisgICAgICAgIHJldHVybiBMCisKKyAgICBkZWYgY2hlY2tfZXZlbnRzKHNlbGYsIGV4cGVjdGVkKToKKyAgICAgICAgZXZlbnRzID0gc2VsZi5nZXRfZXZlbnRzX3dvdGltZSgpCisgICAgICAgIGlmIGV2ZW50cyAhPSBleHBlY3RlZDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgKKyAgICAgICAgICAgICAgICAiZXZlbnRzIGRpZCBub3QgbWF0Y2ggZXhwZWN0YXRpb247IGdvdDpcbiVzXG5leHBlY3RlZDpcbiVzIgorICAgICAgICAgICAgICAgICUgKHBwcmludC5wZm9ybWF0KGV2ZW50cyksIHBwcmludC5wZm9ybWF0KGV4cGVjdGVkKSkpCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgY2FsbGFibGUsIGV2ZW50cywgcHJvZmlsZXI9Tm9uZSk6CisgICAgICAgIGlmIHByb2ZpbGVyIGlzIE5vbmU6CisgICAgICAgICAgICBwcm9maWxlciA9IHNlbGYubmV3X3Byb2ZpbGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBwcm9maWxlci5fcHJvZi5jbG9zZWQpCisgICAgICAgIHByb2ZpbGVyLnJ1bmNhbGwoY2FsbGFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcHJvZmlsZXIuX3Byb2YuY2xvc2VkKQorICAgICAgICBwcm9maWxlci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9maWxlci5fcHJvZi5jbG9zZWQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKGV2ZW50cykKKworICAgIGRlZiB0ZXN0X2FkZGluZm8oc2VsZik6CisgICAgICAgIGRlZiBmKHApOgorICAgICAgICAgICAgcC5hZGRpbmZvKCJ0ZXN0LWtleSIsICJ0ZXN0LXZhbHVlIikKKyAgICAgICAgcHJvZmlsZXIgPSBzZWxmLm5ld19wcm9maWxlcigpCisgICAgICAgIHByb2ZpbGVyLnJ1bmNhbGwoZiwgcHJvZmlsZXIpCisgICAgICAgIHByb2ZpbGVyLmNsb3NlKCkKKyAgICAgICAgbG9nID0gc2VsZi5nZXRfbG9ncmVhZGVyKCkKKyAgICAgICAgaW5mbyA9IGxvZy5faW5mbworICAgICAgICBsaXN0KGxvZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluZm9bInRlc3Qta2V5Il0gPT0gWyJ0ZXN0LXZhbHVlIl0pCisKKyAgICBkZWYgdGVzdF9saW5lX251bWJlcnMoc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICB5ID0gMgorICAgICAgICAgICAgeCA9IDEKKyAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgIGYoKQorICAgICAgICBmX2xpbmVubyA9IGYuZnVuY19jb2RlLmNvX2ZpcnN0bGluZW5vCisgICAgICAgIGdfbGluZW5vID0gZy5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgZXZlbnRzID0gWyhFTlRFUiwgKCJ0ZXN0X2hvdHNob3QiLCBnX2xpbmVubywgImciKSksCisgICAgICAgICAgICAgICAgICAoTElORSwgICgidGVzdF9ob3RzaG90IiwgZ19saW5lbm8rMSwgImciKSksCisgICAgICAgICAgICAgICAgICAoRU5URVIsICgidGVzdF9ob3RzaG90IiwgZl9saW5lbm8sICJmIikpLAorICAgICAgICAgICAgICAgICAgKExJTkUsICAoInRlc3RfaG90c2hvdCIsIGZfbGluZW5vKzEsICJmIikpLAorICAgICAgICAgICAgICAgICAgKExJTkUsICAoInRlc3RfaG90c2hvdCIsIGZfbGluZW5vKzIsICJmIikpLAorICAgICAgICAgICAgICAgICAgKEVYSVQsICAoInRlc3RfaG90c2hvdCIsIGZfbGluZW5vLCAiZiIpKSwKKyAgICAgICAgICAgICAgICAgIChFWElULCAgKCJ0ZXN0X2hvdHNob3QiLCBnX2xpbmVubywgImciKSksCisgICAgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYucnVuX3Rlc3QoZywgZXZlbnRzLCBzZWxmLm5ld19wcm9maWxlcihsaW5lZXZlbnRzPTEpKQorCisgICAgZGVmIHRlc3Rfc3RhcnRfc3RvcChzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgd2UgZG9uJ3QgcmV0dXJuIE5VTEwgaW4gdGhlIHN0YXJ0KCkgYW5kIHN0b3AoKQorICAgICAgICAjIG1ldGhvZHMgd2hlbiB0aGVyZSBpc24ndCBhbiBlcnJvci4gIEJ1ZyBpbiAyLjIgbm90ZWQgYnkKKyAgICAgICAgIyBBbnRob255IEJheHRlci4KKyAgICAgICAgcHJvZmlsZXIgPSBzZWxmLm5ld19wcm9maWxlcigpCisgICAgICAgIHByb2ZpbGVyLnN0YXJ0KCkKKyAgICAgICAgcHJvZmlsZXIuc3RvcCgpCisgICAgICAgIHByb2ZpbGVyLmNsb3NlKCkKKyAgICAgICAgb3MudW5saW5rKHNlbGYubG9nZm4pCisKKyAgICBkZWYgdGVzdF9iYWRfc3lzX3BhdGgoc2VsZik6CisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIG9yaWdfcGF0aCA9IHN5cy5wYXRoCisgICAgICAgIGNvdmVyYWdlID0gaG90c2hvdC5faG90c2hvdC5jb3ZlcmFnZQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHZlcmlmeSB3ZSByZXF1aXJlIGEgbGlzdCBmb3Igc3lzLnBhdGgKKyAgICAgICAgICAgIHN5cy5wYXRoID0gJ2FiYycKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY292ZXJhZ2UsIHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICAjIHZlcmlmeSB0aGF0IHdlIHJlcXVpcmUgc3lzLnBhdGggZXhpc3RzCisgICAgICAgICAgICBkZWwgc3lzLnBhdGgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY292ZXJhZ2UsIHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMucGF0aCA9IG9yaWdfcGF0aAorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGVzdF9zdXBwb3J0LlRFU1RGTik6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9sb2dyZWFkZXJfZW9mX2Vycm9yKHNlbGYpOgorICAgICAgICBlbXB0eWZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoSU9FcnJvciwgRU9GRXJyb3IpLCBfaG90c2hvdC5sb2dyZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eWZpbGUubmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGVtcHR5ZmlsZS5jbG9zZSgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfbG9hZF9zdGF0cyhzZWxmKToKKyAgICAgICAgZGVmIHN0YXJ0KHByb2YpOgorICAgICAgICAgICAgcHJvZi5zdGFydCgpCisgICAgICAgICMgTWFrZSBzdXJlIHN0YXRzIGNhbiBiZSBsb2FkZWQgd2hlbiBzdGFydCBhbmQgc3RvcCBvZiBwcm9maWxlcgorICAgICAgICAjIGFyZSBub3QgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgc3RhY2sgZnJhbWUuCisgICAgICAgIHByb2ZpbGVyID0gc2VsZi5uZXdfcHJvZmlsZXIoKQorICAgICAgICBzdGFydChwcm9maWxlcikKKyAgICAgICAgcHJvZmlsZXIuc3RvcCgpCisgICAgICAgIHByb2ZpbGVyLmNsb3NlKCkKKyAgICAgICAgc3RhdHMubG9hZChzZWxmLmxvZ2ZuKQorICAgICAgICBvcy51bmxpbmsoc2VsZi5sb2dmbikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChIb3RTaG90VGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaHRtbGxpYi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2h0bWxsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4MTNiMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2h0bWxsaWIucHkKQEAgLTAsMCArMSw2OSBAQAoraW1wb3J0IGZvcm1hdHRlcgoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitodG1sbGliID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2h0bWxsaWInLCBkZXByZWNhdGVkPVRydWUpCisKKworY2xhc3MgQW5jaG9yQ29sbGVjdG9yKGh0bWxsaWIuSFRNTFBhcnNlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgc2VsZi5fX2FuY2hvcnMgPSBbXQorICAgICAgICBodG1sbGliLkhUTUxQYXJzZXIuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpCisKKyAgICBkZWYgZ2V0X2FuY2hvcl9pbmZvKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2FuY2hvcnMKKworICAgIGRlZiBhbmNob3JfYmduKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5fX2FuY2hvcnMuYXBwZW5kKGFyZ3MpCisKK2NsYXNzIERlY2xDb2xsZWN0b3IoaHRtbGxpYi5IVE1MUGFyc2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzZWxmLl9fZGVjbHMgPSBbXQorICAgICAgICBodG1sbGliLkhUTUxQYXJzZXIuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpCisKKyAgICBkZWYgZ2V0X2RlY2xfaW5mbyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19kZWNscworCisgICAgZGVmIHVua25vd25fZGVjbChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fX2RlY2xzLmFwcGVuZChkYXRhKQorCisKK2NsYXNzIEhUTUxQYXJzZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYW5jaG9yX2NvbGxlY3Rpb24oc2VsZik6CisgICAgICAgICMgU2VlIFNGIGJ1ZyAjNDY3MDU5LgorICAgICAgICBwYXJzZXIgPSBBbmNob3JDb2xsZWN0b3IoZm9ybWF0dGVyLk51bGxGb3JtYXR0ZXIoKSwgdmVyYm9zZT0xKQorICAgICAgICBwYXJzZXIuZmVlZCgKKyAgICAgICAgICAgICIiIjxhIGhyZWY9J2h0dHA6Ly9mb28ub3JnLycgbmFtZT0nc3BsYXQnPiA8L2E+CisgICAgICAgICAgICA8YSBocmVmPSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvJz4gPC9hPgorICAgICAgICAgICAgPGEgbmFtZT0nZnJvYic+IDwvYT4KKyAgICAgICAgICAgICIiIikKKyAgICAgICAgcGFyc2VyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0X2FuY2hvcl9pbmZvKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygnaHR0cDovL2Zvby5vcmcvJywgJ3NwbGF0JywgJycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy8nLCAnJywgJycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJycsICdmcm9iJywgJycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfZGVjbF9jb2xsZWN0aW9uKHNlbGYpOgorICAgICAgICAjIFNlZSBTRiBwYXRjaCAjNTQ1MzAwCisgICAgICAgIHBhcnNlciA9IERlY2xDb2xsZWN0b3IoZm9ybWF0dGVyLk51bGxGb3JtYXR0ZXIoKSwgdmVyYm9zZT0xKQorICAgICAgICBwYXJzZXIuZmVlZCgKKyAgICAgICAgICAgICIiIjxodG1sPgorICAgICAgICAgICAgPGJvZHk+CisgICAgICAgICAgICBoYWxsbworICAgICAgICAgICAgPCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+CisgICAgICAgICAgICA8L2JvZHk+CisgICAgICAgICAgICA8L2h0bWw+CisgICAgICAgICAgICAiIiIpCisgICAgICAgIHBhcnNlci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmdldF9kZWNsX2luZm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbImlmICFzdXBwb3J0RW1wdHlQYXJhcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmRpZiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoSFRNTFBhcnNlclRlc3RDYXNlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9odG1scGFyc2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYzQ2MWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9odG1scGFyc2VyLnB5CkBAIC0wLDAgKzEsNjEwIEBACisiIiJUZXN0cyBmb3IgSFRNTFBhcnNlci5weS4iIiIKKworaW1wb3J0IEhUTUxQYXJzZXIKK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCitjbGFzcyBFdmVudENvbGxlY3RvcihIVE1MUGFyc2VyLkhUTUxQYXJzZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmV2ZW50cyA9IFtdCisgICAgICAgIHNlbGYuYXBwZW5kID0gc2VsZi5ldmVudHMuYXBwZW5kCisgICAgICAgIEhUTUxQYXJzZXIuSFRNTFBhcnNlci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIGdldF9ldmVudHMoc2VsZik6CisgICAgICAgICMgTm9ybWFsaXplIHRoZSBsaXN0IG9mIGV2ZW50cyBzbyB0aGF0IGJ1ZmZlciBhcnRlZmFjdHMgZG9uJ3QKKyAgICAgICAgIyBzZXBhcmF0ZSBydW5zIG9mIGNvbnRpZ3VvdXMgY2hhcmFjdGVycy4KKyAgICAgICAgTCA9IFtdCisgICAgICAgIHByZXZ0eXBlID0gTm9uZQorICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi5ldmVudHM6CisgICAgICAgICAgICB0eXBlID0gZXZlbnRbMF0KKyAgICAgICAgICAgIGlmIHR5cGUgPT0gcHJldnR5cGUgPT0gImRhdGEiOgorICAgICAgICAgICAgICAgIExbLTFdID0gKCJkYXRhIiwgTFstMV1bMV0gKyBldmVudFsxXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgTC5hcHBlbmQoZXZlbnQpCisgICAgICAgICAgICBwcmV2dHlwZSA9IHR5cGUKKyAgICAgICAgc2VsZi5ldmVudHMgPSBMCisgICAgICAgIHJldHVybiBMCisKKyAgICAjIHN0cnVjdHVyZSBtYXJrdXAKKworICAgIGRlZiBoYW5kbGVfc3RhcnR0YWcoc2VsZiwgdGFnLCBhdHRycyk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgic3RhcnR0YWciLCB0YWcsIGF0dHJzKSkKKworICAgIGRlZiBoYW5kbGVfc3RhcnRlbmR0YWcoc2VsZiwgdGFnLCBhdHRycyk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgic3RhcnRlbmR0YWciLCB0YWcsIGF0dHJzKSkKKworICAgIGRlZiBoYW5kbGVfZW5kdGFnKHNlbGYsIHRhZyk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgiZW5kdGFnIiwgdGFnKSkKKworICAgICMgYWxsIG90aGVyIG1hcmt1cAorCisgICAgZGVmIGhhbmRsZV9jb21tZW50KHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFwcGVuZCgoImNvbW1lbnQiLCBkYXRhKSkKKworICAgIGRlZiBoYW5kbGVfY2hhcnJlZihzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJjaGFycmVmIiwgZGF0YSkpCisKKyAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgiZGF0YSIsIGRhdGEpKQorCisgICAgZGVmIGhhbmRsZV9kZWNsKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFwcGVuZCgoImRlY2wiLCBkYXRhKSkKKworICAgIGRlZiBoYW5kbGVfZW50aXR5cmVmKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFwcGVuZCgoImVudGl0eXJlZiIsIGRhdGEpKQorCisgICAgZGVmIGhhbmRsZV9waShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJwaSIsIGRhdGEpKQorCisgICAgZGVmIHVua25vd25fZGVjbChzZWxmLCBkZWNsKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJ1bmtub3duIGRlY2wiLCBkZWNsKSkKKworCitjbGFzcyBFdmVudENvbGxlY3RvckV4dHJhKEV2ZW50Q29sbGVjdG9yKToKKworICAgIGRlZiBoYW5kbGVfc3RhcnR0YWcoc2VsZiwgdGFnLCBhdHRycyk6CisgICAgICAgIEV2ZW50Q29sbGVjdG9yLmhhbmRsZV9zdGFydHRhZyhzZWxmLCB0YWcsIGF0dHJzKQorICAgICAgICBzZWxmLmFwcGVuZCgoInN0YXJ0dGFnX3RleHQiLCBzZWxmLmdldF9zdGFydHRhZ190ZXh0KCkpKQorCisKK2NsYXNzIFRlc3RDYXNlQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX3J1bl9jaGVjayhzZWxmLCBzb3VyY2UsIGV4cGVjdGVkX2V2ZW50cywgY29sbGVjdG9yPUV2ZW50Q29sbGVjdG9yKToKKyAgICAgICAgcGFyc2VyID0gY29sbGVjdG9yKCkKKyAgICAgICAgZm9yIHMgaW4gc291cmNlOgorICAgICAgICAgICAgcGFyc2VyLmZlZWQocykKKyAgICAgICAgcGFyc2VyLmNsb3NlKCkKKyAgICAgICAgZXZlbnRzID0gcGFyc2VyLmdldF9ldmVudHMoKQorICAgICAgICBpZiBldmVudHMgIT0gZXhwZWN0ZWRfZXZlbnRzOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWNlaXZlZCBldmVudHMgZGlkIG5vdCBtYXRjaCBleHBlY3RlZCBldmVudHNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQ6XG4iICsgcHByaW50LnBmb3JtYXQoZXhwZWN0ZWRfZXZlbnRzKSArCisgICAgICAgICAgICAgICAgICAgICAgIlxuUmVjZWl2ZWQ6XG4iICsgcHByaW50LnBmb3JtYXQoZXZlbnRzKSkKKworICAgIGRlZiBfcnVuX2NoZWNrX2V4dHJhKHNlbGYsIHNvdXJjZSwgZXZlbnRzKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKHNvdXJjZSwgZXZlbnRzLCBFdmVudENvbGxlY3RvckV4dHJhKQorCisgICAgZGVmIF9wYXJzZV9lcnJvcihzZWxmLCBzb3VyY2UpOgorICAgICAgICBkZWYgcGFyc2Uoc291cmNlPXNvdXJjZSk6CisgICAgICAgICAgICBwYXJzZXIgPSBIVE1MUGFyc2VyLkhUTUxQYXJzZXIoKQorICAgICAgICAgICAgcGFyc2VyLmZlZWQoc291cmNlKQorICAgICAgICAgICAgcGFyc2VyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSFRNTFBhcnNlci5IVE1MUGFyc2VFcnJvciwgcGFyc2UpCisKKworY2xhc3MgSFRNTFBhcnNlclRlc3RDYXNlKFRlc3RDYXNlQmFzZSk6CisKKyAgICBkZWYgdGVzdF9wcm9jZXNzaW5nX2luc3RydWN0aW9uX29ubHkoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPD9wcm9jZXNzaW5nIGluc3RydWN0aW9uPiIsIFsKKyAgICAgICAgICAgICgicGkiLCAicHJvY2Vzc2luZyBpbnN0cnVjdGlvbiIpLAorICAgICAgICAgICAgXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8P3Byb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gPz4iLCBbCisgICAgICAgICAgICAoInBpIiwgInByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gPyIpLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9odG1sKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIiIiCis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgJ2Zvbyc+Cis8SFRNTD4mZW50aXR5OyYjMzI7Cis8IS0tY29tbWVudDFhCistPjwvZm9vPjxiYXI+Jmx0Ozw/cGk/PjwvZm9vPGJhcgorY29tbWVudDFiLS0+Cis8SW1nIHNSYz0nQmFyJyBpc01BUD5zYW1wbGUKK3RleHQKKyYjeDIwMUM7Cis8IS0tY29tbWVudDJhLS0gLS1jb21tZW50MmItLT4KKzwvSHRtbD4KKyIiIiwgWworICAgICgiZGF0YSIsICJcbiIpLAorICAgICgiZGVjbCIsICJET0NUWVBFIGh0bWwgUFVCTElDICdmb28nIiksCisgICAgKCJkYXRhIiwgIlxuIiksCisgICAgKCJzdGFydHRhZyIsICJodG1sIiwgW10pLAorICAgICgiZW50aXR5cmVmIiwgImVudGl0eSIpLAorICAgICgiY2hhcnJlZiIsICIzMiIpLAorICAgICgiZGF0YSIsICJcbiIpLAorICAgICgiY29tbWVudCIsICJjb21tZW50MWFcbi0+PC9mb28+PGJhcj4mbHQ7PD9waT8+PC9mb288YmFyXG5jb21tZW50MWIiKSwKKyAgICAoImRhdGEiLCAiXG4iKSwKKyAgICAoInN0YXJ0dGFnIiwgImltZyIsIFsoInNyYyIsICJCYXIiKSwgKCJpc21hcCIsIE5vbmUpXSksCisgICAgKCJkYXRhIiwgInNhbXBsZVxudGV4dFxuIiksCisgICAgKCJjaGFycmVmIiwgIngyMDFDIiksCisgICAgKCJkYXRhIiwgIlxuIiksCisgICAgKCJjb21tZW50IiwgImNvbW1lbnQyYS0tIC0tY29tbWVudDJiIiksCisgICAgKCJkYXRhIiwgIlxuIiksCisgICAgKCJlbmR0YWciLCAiaHRtbCIpLAorICAgICgiZGF0YSIsICJcbiIpLAorICAgIF0pCisKKyAgICBkZWYgdGVzdF91bmNsb3NlZF9lbnRpdHlyZWYoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiJmVudGl0eXJlZiBmb28iLCBbCisgICAgICAgICAgICAoImVudGl0eXJlZiIsICJlbnRpdHlyZWYiKSwKKyAgICAgICAgICAgICgiZGF0YSIsICIgZm9vIiksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfYmFkX25lc3Rpbmcoc2VsZik6CisgICAgICAgICMgU3RyYW5nZWx5LCB0aGlzICppcyogc3VwcG9zZWQgdG8gdGVzdCB0aGF0IG92ZXJsYXBwaW5nCisgICAgICAgICMgZWxlbWVudHMgYXJlIGFsbG93ZWQuICBIVE1MUGFyc2VyIGlzIG1vcmUgZ2VhcmVkIHRvd2FyZAorICAgICAgICAjIGxleGluZyB0aGUgaW5wdXQgdGhhdCBwYXJzaW5nIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPGE+PGI+PC9hPjwvYj4iLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImEiLCBbXSksCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImIiLCBbXSksCisgICAgICAgICAgICAoImVuZHRhZyIsICJhIiksCisgICAgICAgICAgICAoImVuZHRhZyIsICJiIiksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfYmFyZV9hbXBlcnNhbmRzKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fY2hlY2soInRoaXMgdGV4dCAmIGNvbnRhaW5zICYgYW1wZXJzYW5kcyAmIiwgWworICAgICAgICAgICAgKCJkYXRhIiwgInRoaXMgdGV4dCAmIGNvbnRhaW5zICYgYW1wZXJzYW5kcyAmIiksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfYmFyZV9wb2ludHlfYnJhY2tldHMoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygidGhpcyA8IHRleHQgPiBjb250YWlucyA8IGJhcmU+cG9pbnR5PCBicmFja2V0cyIsIFsKKyAgICAgICAgICAgICgiZGF0YSIsICJ0aGlzIDwgdGV4dCA+IGNvbnRhaW5zIDwgYmFyZT5wb2ludHk8IGJyYWNrZXRzIiksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfaWxsZWdhbF9kZWNsYXJhdGlvbnMoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnPCFzcGFjZXIgdHlwZT0iYmxvY2siIGhlaWdodD0iMjUiPicsCisgICAgICAgICAgICAgICAgICAgICAgICBbKCdjb21tZW50JywgJ3NwYWNlciB0eXBlPSJibG9jayIgaGVpZ2h0PSIyNSInKV0pCisKKyAgICBkZWYgdGVzdF9zdGFydHRhZ19lbmRfYm91bmRhcnkoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiIiI8YSBiPSc8Jz4iIiIsIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJiIiwgIjwiKV0pXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCIiIjxhIGI9Jz4nPiIiIiwgWygic3RhcnR0YWciLCAiYSIsIFsoImIiLCAiPiIpXSldKQorCisgICAgZGVmIHRlc3RfYnVmZmVyX2FydGVmYWN0cyhzZWxmKToKKyAgICAgICAgb3V0cHV0ID0gWygic3RhcnR0YWciLCAiYSIsIFsoImIiLCAiPCIpXSldCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhbIjxhIGI9JzwnPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhbIjxhICIsICJiPSc8Jz4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soWyI8YSBiIiwgIj0nPCc+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPGEgYj0iLCAiJzwnPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhbIjxhIGI9JzwiLCAiJz4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soWyI8YSBiPSc8JyIsICI+Il0sIG91dHB1dCkKKworICAgICAgICBvdXRwdXQgPSBbKCJzdGFydHRhZyIsICJhIiwgWygiYiIsICI+IildKV0KKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPGEgYj0nPic+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPGEgIiwgImI9Jz4nPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhbIjxhIGIiLCAiPSc+Jz4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soWyI8YSBiPSIsICInPic+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPGEgYj0nPiIsICInPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhbIjxhIGI9Jz4nIiwgIj4iXSwgb3V0cHV0KQorCisgICAgICAgIG91dHB1dCA9IFsoImNvbW1lbnQiLCAiYWJjIildCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhbIiIsICI8IS0tYWJjLS0+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPCIsICIhLS1hYmMtLT4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soWyI8ISIsICItLWFiYy0tPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhbIjwhLSIsICItYWJjLS0+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPCEtLSIsICJhYmMtLT4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soWyI8IS0tYSIsICJiYy0tPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhbIjwhLS1hYiIsICJjLS0+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPCEtLWFiYyIsICItLT4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soWyI8IS0tYWJjLSIsICItPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhbIjwhLS1hYmMtLSIsICI+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKFsiPCEtLWFiYy0tPiIsICIiXSwgb3V0cHV0KQorCisgICAgZGVmIHRlc3Rfc3RhcnR0YWdfanVua19jaGFycyhzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8Lz4iLCBbXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8LyQ+IiwgWygnY29tbWVudCcsICckJyldKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjwvIiwgWygnZGF0YScsICc8LycpXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8L2EiLCBbKCdkYXRhJywgJzwvYScpXSkKKyAgICAgICAgIyBYWFggdGhpcyBtaWdodCBiZSB3cm9uZworICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjxhPGE+IiwgWygnZGF0YScsICc8YScpLCAoJ3N0YXJ0dGFnJywgJ2EnLCBbXSldKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjwvYTxhPiIsIFsoJ2VuZHRhZycsICdhPGEnKV0pCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPCEiLCBbKCdkYXRhJywgJzwhJyldKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjxhIiwgWygnZGF0YScsICc8YScpXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8YSBmb289J2JhciciLCBbKCdkYXRhJywgIjxhIGZvbz0nYmFyJyIpXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8YSBmb289J2JhciIsIFsoJ2RhdGEnLCAiPGEgZm9vPSdiYXIiKV0pCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPGEgZm9vPSc+JyIsIFsoJ2RhdGEnLCAiPGEgZm9vPSc+JyIpXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8YSBmb289Jz4iLCBbKCdkYXRhJywgIjxhIGZvbz0nPiIpXSkKKworICAgIGRlZiB0ZXN0X3ZhbGlkX2RvY3R5cGVzKHNlbGYpOgorICAgICAgICAjIGZyb20gaHR0cDovL3d3dy53My5vcmcvUUEvMjAwMi8wNC92YWxpZC1kdGQtbGlzdC5odG1sCisgICAgICAgIGR0ZHMgPSBbJ0hUTUwnLCAgIyBIVE1MNSBkb2N0eXBlCisgICAgICAgICAgICAgICAgKCdIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTiIgJworICAgICAgICAgICAgICAgICAnImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L3N0cmljdC5kdGQiJyksCisgICAgICAgICAgICAgICAgKCdIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICcKKyAgICAgICAgICAgICAgICAgJyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiJyksCisgICAgICAgICAgICAgICAgKCdodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICcKKyAgICAgICAgICAgICAgICAgJyJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIicpLAorICAgICAgICAgICAgICAgICgnaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBGcmFtZXNldC8vRU4iICcKKyAgICAgICAgICAgICAgICAgJyJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1mcmFtZXNldC5kdGQiJyksCisgICAgICAgICAgICAgICAgKCdtYXRoIFBVQkxJQyAiLS8vVzNDLy9EVEQgTWF0aE1MIDIuMC8vRU4iICcKKyAgICAgICAgICAgICAgICAgJyJodHRwOi8vd3d3LnczLm9yZy9NYXRoL0RURC9tYXRobWwyL21hdGhtbDIuZHRkIicpLAorICAgICAgICAgICAgICAgICgnaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREICcKKyAgICAgICAgICAgICAgICAgJ1hIVE1MIDEuMSBwbHVzIE1hdGhNTCAyLjAgcGx1cyBTVkcgMS4xLy9FTiIgJworICAgICAgICAgICAgICAgICAnImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMDQveGh0bWwtbWF0aC1zdmcveGh0bWwtbWF0aC1zdmcuZHRkIicpLAorICAgICAgICAgICAgICAgICgnc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICcKKyAgICAgICAgICAgICAgICAgJyJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiJyksCisgICAgICAgICAgICAgICAgJ2h0bWwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTCAyLjAvL0VOIicsCisgICAgICAgICAgICAgICAgJ2h0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iJ10KKyAgICAgICAgZm9yIGR0ZCBpbiBkdGRzOgorICAgICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8IURPQ1RZUEUgJXM+IiAlIGR0ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKCdkZWNsJywgJ0RPQ1RZUEUgJyArIGR0ZCldKQorCisgICAgZGVmIHRlc3Rfc2xhc2hlc19pbl9zdGFydHRhZyhzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCc8YSBmb289InZhciIvPicsIFsoJ3N0YXJ0ZW5kdGFnJywgJ2EnLCBbKCdmb28nLCAndmFyJyldKV0pCisgICAgICAgIGh0bWwgPSAoJzxpbWcgd2lkdGg9OTAyIGhlaWdodD0yNTBweCAnCisgICAgICAgICAgICAgICAgJ3NyYz0iL3NpdGVzL2RlZmF1bHQvZmlsZXMvaW1hZ2VzL2hvbWVwYWdlL2Zvby5qcGciICcKKyAgICAgICAgICAgICAgICAnLyp3aGF0IGFtIEkgZG9pbmcgaGVyZSovIC8+JykKKyAgICAgICAgZXhwZWN0ZWQgPSBbKAorICAgICAgICAgICAgJ3N0YXJ0ZW5kdGFnJywgJ2ltZycsCisgICAgICAgICAgICBbKCd3aWR0aCcsICc5MDInKSwgKCdoZWlnaHQnLCAnMjUwcHgnKSwKKyAgICAgICAgICAgICAoJ3NyYycsICcvc2l0ZXMvZGVmYXVsdC9maWxlcy9pbWFnZXMvaG9tZXBhZ2UvZm9vLmpwZycpLAorICAgICAgICAgICAgICgnKndoYXQnLCBOb25lKSwgKCdhbScsIE5vbmUpLCAoJ2knLCBOb25lKSwKKyAgICAgICAgICAgICAoJ2RvaW5nJywgTm9uZSksICgnaGVyZSonLCBOb25lKV0KKyAgICAgICAgKV0KKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKGh0bWwsIGV4cGVjdGVkKQorICAgICAgICBodG1sID0gKCc8YSAvIC9mb28vIC8gLz0vIC8gL2Jhci8gLyAvPicKKyAgICAgICAgICAgICAgICAnPGEgLyAvZm9vLyAvIC89LyAvIC9iYXIvIC8gPicpCisgICAgICAgIGV4cGVjdGVkID0gWworICAgICAgICAgICAgKCdzdGFydGVuZHRhZycsICdhJywgWygnZm9vJywgTm9uZSksICgnPScsIE5vbmUpLCAoJ2JhcicsIE5vbmUpXSksCisgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ2EnLCBbKCdmb28nLCBOb25lKSwgKCc9JywgTm9uZSksICgnYmFyJywgTm9uZSldKQorICAgICAgICBdCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhodG1sLCBleHBlY3RlZCkKKyAgICAgICAgI3NlZSBpc3N1ZSAjMTQ1MzgKKyAgICAgICAgaHRtbCA9ICgnPG1ldGE+PG1ldGEgLyA+PG1ldGEgLy8gPjxtZXRhIC8gLyA+JworICAgICAgICAgICAgICAgICc8bWV0YS8+PG1ldGEgLz48bWV0YSAvLz48bWV0YS8vPicpCisgICAgICAgIGV4cGVjdGVkID0gWworICAgICAgICAgICAgKCdzdGFydHRhZycsICdtZXRhJywgW10pLCAoJ3N0YXJ0dGFnJywgJ21ldGEnLCBbXSksCisgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ21ldGEnLCBbXSksICgnc3RhcnR0YWcnLCAnbWV0YScsIFtdKSwKKyAgICAgICAgICAgICgnc3RhcnRlbmR0YWcnLCAnbWV0YScsIFtdKSwgKCdzdGFydGVuZHRhZycsICdtZXRhJywgW10pLAorICAgICAgICAgICAgKCdzdGFydGVuZHRhZycsICdtZXRhJywgW10pLCAoJ3N0YXJ0ZW5kdGFnJywgJ21ldGEnLCBbXSksCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKGh0bWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZGVjbGFyYXRpb25fanVua19jaGFycyhzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8IURPQ1RZUEUgZm9vICQgPiIsIFsoJ2RlY2wnLCAnRE9DVFlQRSBmb28gJCAnKV0pCisKKyAgICBkZWYgdGVzdF9zdGFydGVuZHRhZyhzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8cC8+IiwgWworICAgICAgICAgICAgKCJzdGFydGVuZHRhZyIsICJwIiwgW10pLAorICAgICAgICAgICAgXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8cD48L3A+IiwgWworICAgICAgICAgICAgKCJzdGFydHRhZyIsICJwIiwgW10pLAorICAgICAgICAgICAgKCJlbmR0YWciLCAicCIpLAorICAgICAgICAgICAgXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8cD48aW1nIHNyYz0nZm9vJyAvPjwvcD4iLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgInAiLCBbXSksCisgICAgICAgICAgICAoInN0YXJ0ZW5kdGFnIiwgImltZyIsIFsoInNyYyIsICJmb28iKV0pLAorICAgICAgICAgICAgKCJlbmR0YWciLCAicCIpLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfZW5kX3RhZ3Moc2VsZik6CisgICAgICAgICMgQSBjb2xsZWN0aW9uIG9mIGJyb2tlbiBlbmQgdGFncy4gPGJyPiBpcyB1c2VkIGFzIHNlcGFyYXRvci4KKyAgICAgICAgIyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvdG9rZW5pemF0aW9uLmh0bWwjZW5kLXRhZy1vcGVuLXN0YXRlCisgICAgICAgICMgYW5kICMxMzk5MworICAgICAgICBodG1sID0gKCc8YnI+PC9sYWJlbDwvcD48YnI+PC9kaXYgZW5kIHRtQWQtbGVhZGVyQm9hcmQ+PGJyPjwvPGg0Pjxicj4nCisgICAgICAgICAgICAgICAgJzwvbGkgY2xhc3M9InVuaXQiPjxicj48L2xpXHJcblx0XHRcdFx0XHRcdDwvdWw+PGJyPjwvPjxicj4nKQorICAgICAgICBleHBlY3RlZCA9IFsoJ3N0YXJ0dGFnJywgJ2JyJywgW10pLAorICAgICAgICAgICAgICAgICAgICAjIDwgaXMgcGFydCBvZiB0aGUgbmFtZSwgLyBpcyBkaXNjYXJkZWQsIHAgaXMgYW4gYXR0cmlidXRlCisgICAgICAgICAgICAgICAgICAgICgnZW5kdGFnJywgJ2xhYmVsPCcpLAorICAgICAgICAgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ2JyJywgW10pLAorICAgICAgICAgICAgICAgICAgICAjIHRleHQgYW5kIGF0dHJpYnV0ZXMgYXJlIGRpc2NhcmRlZAorICAgICAgICAgICAgICAgICAgICAoJ2VuZHRhZycsICdkaXYnKSwKKyAgICAgICAgICAgICAgICAgICAgKCdzdGFydHRhZycsICdicicsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgIyBjb21tZW50IGJlY2F1c2UgdGhlIGZpcnN0IGNoYXIgYWZ0ZXIgPC8gaXMgbm90IGEtekEtWgorICAgICAgICAgICAgICAgICAgICAoJ2NvbW1lbnQnLCAnPGg0JyksCisgICAgICAgICAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnYnInLCBbXSksCisgICAgICAgICAgICAgICAgICAgICMgYXR0cmlidXRlcyBhcmUgZGlzY2FyZGVkCisgICAgICAgICAgICAgICAgICAgICgnZW5kdGFnJywgJ2xpJyksCisgICAgICAgICAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnYnInLCBbXSksCisgICAgICAgICAgICAgICAgICAgICMgZXZlcnl0aGluZyB0aWxsIHVsIChpbmNsdWRlZCkgaXMgZGlzY2FyZGVkCisgICAgICAgICAgICAgICAgICAgICgnZW5kdGFnJywgJ2xpJyksCisgICAgICAgICAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnYnInLCBbXSksCisgICAgICAgICAgICAgICAgICAgICMgPC8+IGlzIGlnbm9yZWQKKyAgICAgICAgICAgICAgICAgICAgKCdzdGFydHRhZycsICdicicsIFtdKV0KKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKGh0bWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfYnJva2VuX2ludmFsaWRfZW5kX3RhZyhzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIHRlY2huaWNhbGx5IHdyb25nICh0aGUgIj4gc2hvdWxkbid0IGJlIGluY2x1ZGVkIGluIHRoZSAnZGF0YScpCisgICAgICAgICMgYnV0IGlzIHByb2JhYmx5IG5vdCB3b3J0aCBmaXhpbmcgaXQgKGluIGFkZGl0aW9uIHRvIGFsbCB0aGUgY2FzZXMgb2YKKyAgICAgICAgIyB0aGUgcHJldmlvdXMgdGVzdCwgaXQgd291bGQgcmVxdWlyZSBhIGZ1bGwgYXR0cmlidXRlIHBhcnNpbmcpLgorICAgICAgICAjIHNlZSAjMTM5OTMKKyAgICAgICAgaHRtbCA9ICc8Yj5UaGlzPC9iIGF0dHI9Ij4iPiBjb25mdXNlcyB0aGUgcGFyc2VyJworICAgICAgICBleHBlY3RlZCA9IFsoJ3N0YXJ0dGFnJywgJ2InLCBbXSksCisgICAgICAgICAgICAgICAgICAgICgnZGF0YScsICdUaGlzJyksCisgICAgICAgICAgICAgICAgICAgICgnZW5kdGFnJywgJ2InKSwKKyAgICAgICAgICAgICAgICAgICAgKCdkYXRhJywgJyI+IGNvbmZ1c2VzIHRoZSBwYXJzZXInKV0KKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKGh0bWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZ2V0X3N0YXJ0dGFnX3RleHQoc2VsZik6CisgICAgICAgIHMgPSAiIiI8Zm9vOmJhciAgIFxuICAgb25lPSIxIlx0dHdvPTIgICA+IiIiCisgICAgICAgIHNlbGYuX3J1bl9jaGVja19leHRyYShzLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImZvbzpiYXIiLCBbKCJvbmUiLCAiMSIpLCAoInR3byIsICIyIildKSwKKyAgICAgICAgICAgICgic3RhcnR0YWdfdGV4dCIsIHMpXSkKKworICAgIGRlZiB0ZXN0X2NkYXRhX2NvbnRlbnQoc2VsZik6CisgICAgICAgIGNvbnRlbnRzID0gWworICAgICAgICAgICAgJzwhLS0gbm90IGEgY29tbWVudCAtLT4gJm5vdC1hbi1lbnRpdHktcmVmOycsCisgICAgICAgICAgICAiPG5vdCBhPSdzdGFydCB0YWcnPiIsCisgICAgICAgICAgICAnPGEgaHJlZj0iIiAvPiA8cD4gPHNwYW4+PC9zcGFuPicsCisgICAgICAgICAgICAnZm9vID0gIjwvc2NyIiArICJpcHQ+IjsnLAorICAgICAgICAgICAgJ2ZvbyA9ICI8L1NDUklQVCIgKyAiPiI7JywKKyAgICAgICAgICAgICdmb28gPSA8XG4vc2NyaXB0PiAnLAorICAgICAgICAgICAgJzwhLS0gZG9jdW1lbnQud3JpdGUoIjwvc2NyIiArICJpcHQ+Iik7IC0tPicsCisgICAgICAgICAgICAoJ1xuLy88IVtDREFUQVtcbicKKyAgICAgICAgICAgICAnZG9jdW1lbnQud3JpdGUoXCc8c1wnK1wnY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiAnCisgICAgICAgICAgICAgJ3NyYz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9yPVwnK25ldyAnCisgICAgICAgICAgICAgJ0RhdGUoKS5nZXRUaW1lKCkrXCciPjxcXC9zXCcrXCdjcmlwdD5cJyk7XG4vL11dPicpLAorICAgICAgICAgICAgJ1xuPCEtLSAvL1xudmFyIGZvbyA9IDMuMTQ7XG4vLyAtLT5cbicsCisgICAgICAgICAgICAnZm9vID0gIjwvc3R5IiArICJsZT4iOycsCisgICAgICAgICAgICB1JzwhLS0gXHUyNjAzIC0tPicsCisgICAgICAgICAgICAjIHRoZXNlIHR3byBzaG91bGQgYmUgaW52YWxpZCBhY2NvcmRpbmcgdG8gdGhlIEhUTUwgNSBzcGVjLAorICAgICAgICAgICAgIyBzZWN0aW9uIDguMS4yLjIKKyAgICAgICAgICAgICMnZm9vID0gPC9cbnNjcmlwdD4nLAorICAgICAgICAgICAgIydmb28gPSA8LyBzY3JpcHQ+JywKKyAgICAgICAgXQorICAgICAgICBlbGVtZW50cyA9IFsnc2NyaXB0JywgJ3N0eWxlJywgJ1NDUklQVCcsICdTVFlMRScsICdTY3JpcHQnLCAnU3R5bGUnXQorICAgICAgICBmb3IgY29udGVudCBpbiBjb250ZW50czoKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIGVsZW1lbnRzOgorICAgICAgICAgICAgICAgIGVsZW1lbnRfbG93ZXIgPSBlbGVtZW50Lmxvd2VyKCkKKyAgICAgICAgICAgICAgICBzID0gdSc8e2VsZW1lbnR9Pntjb250ZW50fTwve2VsZW1lbnR9PicuZm9ybWF0KGVsZW1lbnQ9ZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9Y29udGVudCkKKyAgICAgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2socywgWygic3RhcnR0YWciLCBlbGVtZW50X2xvd2VyLCBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImRhdGEiLCBjb250ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZW5kdGFnIiwgZWxlbWVudF9sb3dlcildKQorCisgICAgZGVmIHRlc3RfY2RhdGFfd2l0aF9jbG9zaW5nX3RhZ3Moc2VsZik6CisgICAgICAgICMgc2VlIGlzc3VlICMxMzM1OAorICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IEhUTUxQYXJzZXIgY2FsbHMgaGFuZGxlX2RhdGEgb25seSBvbmNlIGZvciBlYWNoIENEQVRBLgorICAgICAgICAjIFRoZSBub3JtYWwgZXZlbnQgY29sbGVjdG9yIG5vcm1hbGl6ZXMgdGhlIGV2ZW50cyBpbiBnZXRfZXZlbnRzLAorICAgICAgICAjIHNvIHdlIG92ZXJyaWRlIGl0IHRvIHJldHVybiB0aGUgb3JpZ2luYWwgbGlzdCBvZiBldmVudHMuCisgICAgICAgIGNsYXNzIENvbGxlY3RvcihFdmVudENvbGxlY3Rvcik6CisgICAgICAgICAgICBkZWYgZ2V0X2V2ZW50cyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5ldmVudHMKKworICAgICAgICBjb250ZW50ID0gIiIiPCEtLSBub3QgYSBjb21tZW50IC0tPiAmbm90LWFuLWVudGl0eS1yZWY7CisgICAgICAgICAgICAgICAgICA8YSBocmVmPSIiIC8+IDwvcD48cD4gJmFtcDsgPHNwYW4+PC9zcGFuPjwvc3R5bGU+CisgICAgICAgICAgICAgICAgICAnPC9zY3JpcHQnICsgJz4nIDwvaHRtbD4gPC9oZWFkPiA8L3NjcmlwdGVyPiEiIiIKKyAgICAgICAgZm9yIGVsZW1lbnQgaW4gWycgc2NyaXB0JywgJ3NjcmlwdCAnLCAnIHNjcmlwdCAnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1xuc2NyaXB0JywgJ3NjcmlwdFxuJywgJ1xuc2NyaXB0XG4nXToKKyAgICAgICAgICAgIHMgPSB1JzxzY3JpcHQ+e2NvbnRlbnR9PC97ZWxlbWVudH0+Jy5mb3JtYXQoZWxlbWVudD1lbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50PWNvbnRlbnQpCisgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2socywgWygic3RhcnR0YWciLCAic2NyaXB0IiwgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImRhdGEiLCBjb250ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJlbmR0YWciLCAic2NyaXB0IildLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rvcj1Db2xsZWN0b3IpCisKKyAgICBkZWYgdGVzdF9tYWxmb3JtYXR0ZWRfY2hhcnJlZihzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8cD4mI2JhZDs8L3A+IiwgWworICAgICAgICAgICAgKCJzdGFydHRhZyIsICJwIiwgW10pLAorICAgICAgICAgICAgKCJkYXRhIiwgIiYjYmFkOyIpLAorICAgICAgICAgICAgKCJlbmR0YWciLCAicCIpLAorICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfdW5lc2NhcGVfZnVuY3Rpb24oc2VsZik6CisgICAgICAgIHBhcnNlciA9IEhUTUxQYXJzZXIuSFRNTFBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnVuZXNjYXBlKCcmI2JhZDsnKSwnJiNiYWQ7JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIudW5lc2NhcGUoJyYjMDAzODsnKSwnJicpCisKKworCitjbGFzcyBBdHRyaWJ1dGVzVGVzdENhc2UoVGVzdENhc2VCYXNlKToKKworICAgIGRlZiB0ZXN0X2F0dHJfc3ludGF4KHNlbGYpOgorICAgICAgICBvdXRwdXQgPSBbCisgICAgICAgICAgKCJzdGFydHRhZyIsICJhIiwgWygiYiIsICJ2IiksICgiYyIsICJ2IiksICgiZCIsICJ2IiksICgiZSIsIE5vbmUpXSkKKyAgICAgICAgXQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIiIiPGEgYj0ndicgYz0idiIgZD12IGU+IiIiLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiIiI8YSAgYiA9ICd2JyBjID0gInYiIGQgPSB2IGU+IiIiLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiIiI8YVxuYlxuPVxuJ3YnXG5jXG49XG4idiJcbmRcbj1cbnZcbmU+IiIiLCBvdXRwdXQpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiIiI8YVx0Ylx0PVx0J3YnXHRjXHQ9XHQidiJcdGRcdD1cdHZcdGU+IiIiLCBvdXRwdXQpCisKKyAgICBkZWYgdGVzdF9hdHRyX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCIiIjxhIGI9J3h4eFxuXHR4eHgnIGM9Inl5eVx0XG55eXkiIGQ9J1x0eHl6XG4nPiIiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJiIiwgInh4eFxuXHR4eHgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgInl5eVx0XG55eXkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJkIiwgIlx0eHl6XG4iKV0pXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCIiIjxhIGI9JycgYz0iIj4iIiIsCisgICAgICAgICAgICAgICAgICAgICAgICBbKCJzdGFydHRhZyIsICJhIiwgWygiYiIsICIiKSwgKCJjIiwgIiIpXSldKQorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgU0YgcGF0Y2ggIzY2OTY4My4KKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8ZSBhPXJnYigxLDIsMyk+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImUiLCBbKCJhIiwgInJnYigxLDIsMykiKV0pXSkKKyAgICAgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIFNGIGJ1ZyAjOTIxNjU3LgorICAgICAgICBzZWxmLl9ydW5fY2hlY2soCisgICAgICAgICAgICAiPGEgaHJlZj1tYWlsdG86eHl6QGV4YW1wbGUuY29tPiIsCisgICAgICAgICAgICBbKCJzdGFydHRhZyIsICJhIiwgWygiaHJlZiIsICJtYWlsdG86eHl6QGV4YW1wbGUuY29tIildKV0pCisKKyAgICBkZWYgdGVzdF9hdHRyX25vbmFzY2lpKHNlbGYpOgorICAgICAgICAjIHNlZSBpc3N1ZSA3MzExCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygKKyAgICAgICAgICAgIHUiPGltZyBzcmM9L2Zvby9iYXIucG5nIGFsdD1cdTRlMmRcdTY1ODc+IiwKKyAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImltZyIsIFsoInNyYyIsICIvZm9vL2Jhci5wbmciKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImFsdCIsIHUiXHU0ZTJkXHU2NTg3IildKV0pCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygKKyAgICAgICAgICAgIHUiPGEgdGl0bGU9J1x1MzBjNlx1MzBiOVx1MzBjOCcgaHJlZj0nXHUzMGM2XHUzMGI5XHUzMGM4Lmh0bWwnPiIsCisgICAgICAgICAgICBbKCJzdGFydHRhZyIsICJhIiwgWygidGl0bGUiLCB1Ilx1MzBjNlx1MzBiOVx1MzBjOCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImhyZWYiLCB1Ilx1MzBjNlx1MzBiOVx1MzBjOC5odG1sIildKV0pCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygKKyAgICAgICAgICAgIHUnPGEgdGl0bGU9Ilx1MzBjNlx1MzBiOVx1MzBjOCIgaHJlZj0iXHUzMGM2XHUzMGI5XHUzMGM4Lmh0bWwiPicsCisgICAgICAgICAgICBbKCJzdGFydHRhZyIsICJhIiwgWygidGl0bGUiLCB1Ilx1MzBjNlx1MzBiOVx1MzBjOCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImhyZWYiLCB1Ilx1MzBjNlx1MzBiOVx1MzBjOC5odG1sIildKV0pCisKKyAgICBkZWYgdGVzdF9hdHRyX2VudGl0eV9yZXBsYWNlbWVudChzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKAorICAgICAgICAgICAgIjxhIGI9JyZhbXA7Jmd0OyZsdDsmcXVvdDsmYXBvczsnPiIsCisgICAgICAgICAgICBbKCJzdGFydHRhZyIsICJhIiwgWygiYiIsICImPjxcIiciKV0pXSkKKworICAgIGRlZiB0ZXN0X2F0dHJfZnVua3lfbmFtZXMoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygKKyAgICAgICAgICAgICI8YSBhLmI9J3YnIGM6ZD12IGUtZj12PiIsCisgICAgICAgICAgICBbKCJzdGFydHRhZyIsICJhIiwgWygiYS5iIiwgInYiKSwgKCJjOmQiLCAidiIpLCAoImUtZiIsICJ2IildKV0pCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygKKyAgICAgICAgICAgICI8YSAkPjxiICQ9JT48YyBcPS8+IiwKKyAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLCBbKCIkIiwgTm9uZSldKSwKKyAgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImIiLCBbKCIkIiwgIiUiKV0pLAorICAgICAgICAgICAgICgic3RhcnR0YWciLCAiYyIsIFsoIlxcIiwgIi8iKV0pXSkKKworICAgIGRlZiB0ZXN0X2VudGl0eXJlZnNfaW5fYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKAorICAgICAgICAgICAgIjxodG1sIGZvbz0nJmV1cm87JmFtcDsmIzk3OyYjeDYxOyZ1bnN1cHBvcnRlZDsnPiIsCisgICAgICAgICAgICBbKCJzdGFydHRhZyIsICJodG1sIiwgWygiZm9vIiwgdSJcdTIwQUMmYWEmdW5zdXBwb3J0ZWQ7IildKV0pCisKKyAgICBkZWYgdGVzdF9lbnRpdGllc19pbl9hdHRyaWJ1dGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgc2VlICMxMjAwMzEzCisgICAgICAgIGZvciBlbnRpdHkgaW4gWycmJywgJyZhbXA7JywgJyYjMzg7JywgJyYjeDI2OyddOgorICAgICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCc8YSBocmVmPSIlcyI+JyAlIGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKCJzdGFydHRhZyIsICJhIiwgWygiaHJlZiIsICImIildKV0pCisgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjxhIGhyZWY9JyVzJz4iICUgZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJocmVmIiwgIiYiKV0pXSkKKyAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPGEgaHJlZj0lcz4iICUgZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJocmVmIiwgIiYiKV0pXSkKKworICAgIGRlZiB0ZXN0X21hbGZvcm1lZF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTMzNTcKKyAgICAgICAgaHRtbCA9ICgKKyAgICAgICAgICAgICI8YSBocmVmPXRlc3Qnc3R5bGU9J2NvbG9yOnJlZDtiYWQxJz50ZXN0IC0gYmFkMTwvYT4iCisgICAgICAgICAgICAiPGEgaHJlZj10ZXN0JytzdHlsZT0nY29sb3I6cmVkO2JhMic+dGVzdCAtIGJhZDI8L2E+IgorICAgICAgICAgICAgIjxhIGhyZWY9dGVzdCcmbmJzcDtzdHlsZT0nY29sb3I6cmVkO2JhZDMnPnRlc3QgLSBiYWQzPC9hPiIKKyAgICAgICAgICAgICI8YSBocmVmID0gdGVzdCcmbmJzcDtzdHlsZT0nY29sb3I6cmVkO2JhZDQnICA+dGVzdCAtIGJhZDQ8L2E+IgorICAgICAgICApCisgICAgICAgIGV4cGVjdGVkID0gWworICAgICAgICAgICAgKCdzdGFydHRhZycsICdhJywgWygnaHJlZicsICJ0ZXN0J3N0eWxlPSdjb2xvcjpyZWQ7YmFkMSciKV0pLAorICAgICAgICAgICAgKCdkYXRhJywgJ3Rlc3QgLSBiYWQxJyksICgnZW5kdGFnJywgJ2EnKSwKKyAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnYScsIFsoJ2hyZWYnLCAidGVzdCcrc3R5bGU9J2NvbG9yOnJlZDtiYTInIildKSwKKyAgICAgICAgICAgICgnZGF0YScsICd0ZXN0IC0gYmFkMicpLCAoJ2VuZHRhZycsICdhJyksCisgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ2EnLCBbKCdocmVmJywgdSJ0ZXN0J1x4YTBzdHlsZT0nY29sb3I6cmVkO2JhZDMnIildKSwKKyAgICAgICAgICAgICgnZGF0YScsICd0ZXN0IC0gYmFkMycpLCAoJ2VuZHRhZycsICdhJyksCisgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ2EnLCBbKCdocmVmJywgdSJ0ZXN0J1x4YTBzdHlsZT0nY29sb3I6cmVkO2JhZDQnIildKSwKKyAgICAgICAgICAgICgnZGF0YScsICd0ZXN0IC0gYmFkNCcpLCAoJ2VuZHRhZycsICdhJykKKyAgICAgICAgXQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9tYWxmb3JtZWRfYWRqYWNlbnRfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgIyBzZWUgIzEyNjI5CisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnPHg+PHkgej0iIm8iIiAvPjwveD4nLAorICAgICAgICAgICAgICAgICAgICAgICAgWygnc3RhcnR0YWcnLCAneCcsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3N0YXJ0ZW5kdGFnJywgJ3knLCBbKCd6JywgJycpLCAoJ28iIicsIE5vbmUpXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdlbmR0YWcnLCAneCcpXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCc8eD48eSB6PSIiIiIgLz48L3g+JywKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoJ3N0YXJ0dGFnJywgJ3gnLCBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdzdGFydGVuZHRhZycsICd5JywgWygneicsICcnKSwgKCciIicsIE5vbmUpXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdlbmR0YWcnLCAneCcpXSkKKworICAgICMgc2VlICM3NTU2NzAgZm9yIHRoZSBmb2xsb3dpbmcgMyB0ZXN0cworICAgIGRlZiB0ZXN0X2FkamFjZW50X2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnPGEgd2lkdGg9IjEwMCUiY2VsbHNwYWNpbmc9MD4nLAorICAgICAgICAgICAgICAgICAgICAgICAgWygic3RhcnR0YWciLCAiYSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsoIndpZHRoIiwgIjEwMCUiKSwgKCJjZWxsc3BhY2luZyIsIjAiKV0pXSkKKworICAgICAgICBzZWxmLl9ydW5fY2hlY2soJzxhIGlkPSJmb28iY2xhc3M9ImJhciI+JywKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbKCJpZCIsICJmb28iKSwgKCJjbGFzcyIsImJhciIpXSldKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19hdHRyaWJ1dGVfdmFsdWUoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnPGEgdj0+JywKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJ2IiwgIiIpXSldKQorCisgICAgZGVmIHRlc3RfamF2YXNjcmlwdF9hdHRyaWJ1dGVfdmFsdWUoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPGEgaHJlZj1qYXZhc2NyaXB0OnBvcHVwKCcvcG9wdXAvaGVscC5odG1sJyk+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbKCJocmVmIiwgImphdmFzY3JpcHQ6cG9wdXAoJy9wb3B1cC9oZWxwLmh0bWwnKSIpXSldKQorCisgICAgZGVmIHRlc3RfZW5kX3RhZ19pbl9hdHRyaWJ1dGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgc2VlICMxNzQ1NzYxCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPGEgaHJlZj0naHR0cDovL3d3dy5leGFtcGxlLm9yZy9cIj47Jz5zcGFtPC9hPiIsCisgICAgICAgICAgICAgICAgICAgICAgICBbKCJzdGFydHRhZyIsICJhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWygiaHJlZiIsICJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1wiPjsiKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICgiZGF0YSIsICJzcGFtIiksICgiZW5kdGFnIiwgImEiKV0pCisKKyAgICBkZWYgdGVzdF9jb21tZW50cyhzZWxmKToKKyAgICAgICAgaHRtbCA9ICgiPCEtLSBJJ20gYSB2YWxpZCBjb21tZW50IC0tPiIKKyAgICAgICAgICAgICAgICAnPCEtLW1lIHRvbyEtLT4nCisgICAgICAgICAgICAgICAgJzwhLS0tLS0tPicKKyAgICAgICAgICAgICAgICAnPCEtLS0tPicKKyAgICAgICAgICAgICAgICAnPCEtLS0tSSBoYXZlIG1hbnkgaHlwaGVucy0tLS0+JworICAgICAgICAgICAgICAgICc8IS0tIEkgaGF2ZSBhID4gaW4gdGhlIG1pZGRsZSAtLT4nCisgICAgICAgICAgICAgICAgJzwhLS0gYW5kIEkgaGF2ZSAtLSBpbiB0aGUgbWlkZGxlISAtLT4nKQorICAgICAgICBleHBlY3RlZCA9IFsoJ2NvbW1lbnQnLCAiIEknbSBhIHZhbGlkIGNvbW1lbnQgIiksCisgICAgICAgICAgICAgICAgICAgICgnY29tbWVudCcsICdtZSB0b28hJyksCisgICAgICAgICAgICAgICAgICAgICgnY29tbWVudCcsICctLScpLAorICAgICAgICAgICAgICAgICAgICAoJ2NvbW1lbnQnLCAnJyksCisgICAgICAgICAgICAgICAgICAgICgnY29tbWVudCcsICctLUkgaGF2ZSBtYW55IGh5cGhlbnMtLScpLAorICAgICAgICAgICAgICAgICAgICAoJ2NvbW1lbnQnLCAnIEkgaGF2ZSBhID4gaW4gdGhlIG1pZGRsZSAnKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjb21tZW50JywgJyBhbmQgSSBoYXZlIC0tIGluIHRoZSBtaWRkbGUhICcpXQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9icm9rZW5fY29tbWVudHMoc2VsZik6CisgICAgICAgIGh0bWwgPSAoJzwhIG5vdCByZWFsbHkgYSBjb21tZW50ID4nCisgICAgICAgICAgICAgICAgJzwhIG5vdCBhIGNvbW1lbnQgZWl0aGVyIC0tPicKKyAgICAgICAgICAgICAgICAnPCEgLS0gY2xvc2UgZW5vdWdoIC0tPicKKyAgICAgICAgICAgICAgICAnPCE+PCE8LS0gdGhpcyB3YXMgYW4gZW1wdHkgY29tbWVudD4nCisgICAgICAgICAgICAgICAgJzwhISEgYW5vdGhlciBib2d1cyBjb21tZW50ICEhIT4nKQorICAgICAgICBleHBlY3RlZCA9IFsKKyAgICAgICAgICAgICgnY29tbWVudCcsICcgbm90IHJlYWxseSBhIGNvbW1lbnQgJyksCisgICAgICAgICAgICAoJ2NvbW1lbnQnLCAnIG5vdCBhIGNvbW1lbnQgZWl0aGVyIC0tJyksCisgICAgICAgICAgICAoJ2NvbW1lbnQnLCAnIC0tIGNsb3NlIGVub3VnaCAtLScpLAorICAgICAgICAgICAgKCdjb21tZW50JywgJycpLAorICAgICAgICAgICAgKCdjb21tZW50JywgJzwtLSB0aGlzIHdhcyBhbiBlbXB0eSBjb21tZW50JyksCisgICAgICAgICAgICAoJ2NvbW1lbnQnLCAnISEgYW5vdGhlciBib2d1cyBjb21tZW50ICEhIScpLAorICAgICAgICBdCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhodG1sLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2NvbmRjb21zKHNlbGYpOgorICAgICAgICBodG1sID0gKCc8IS0tW2lmIElFICYgIShsdGUgSUUgOCldPmFyZW5cJ3Q8IVtlbmRpZl0tLT4nCisgICAgICAgICAgICAgICAgJzwhLS1baWYgSUUgOF0+Y29uZGNvbXM8IVtlbmRpZl0tLT4nCisgICAgICAgICAgICAgICAgJzwhLS1baWYgbHRlIElFIDddPnByZXR0eT88IVtlbmRpZl0tLT4nKQorICAgICAgICBleHBlY3RlZCA9IFsoJ2NvbW1lbnQnLCAiW2lmIElFICYgIShsdGUgSUUgOCldPmFyZW4ndDwhW2VuZGlmXSIpLAorICAgICAgICAgICAgICAgICAgICAoJ2NvbW1lbnQnLCAnW2lmIElFIDhdPmNvbmRjb21zPCFbZW5kaWZdJyksCisgICAgICAgICAgICAgICAgICAgICgnY29tbWVudCcsICdbaWYgbHRlIElFIDddPnByZXR0eT88IVtlbmRpZl0nKV0KKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKGh0bWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfYnJva2VuX2NvbmRjb21zKHNlbGYpOgorICAgICAgICAjIHRoZXNlIGNvbmRjb21zIGFyZSBtaXNzaW5nIHRoZSAnLS0nIGFmdGVyICc8IScgYW5kIGJlZm9yZSB0aGUgJz4nCisgICAgICAgIGh0bWwgPSAoJzwhW2lmICEoSUUpXT5icm9rZW4gY29uZGNvbTwhW2VuZGlmXT4nCisgICAgICAgICAgICAgICAgJzwhW2lmICEgSUVdPjxsaW5rIGhyZWY9ImZhdmljb24udGlmZiIvPjwhW2VuZGlmXT4nCisgICAgICAgICAgICAgICAgJzwhW2lmICFJRSA2XT48aW1nIHNyYz0iZmlyZWZveC5wbmciIC8+PCFbZW5kaWZdPicKKyAgICAgICAgICAgICAgICAnPCFbaWYgIWllIDZdPjxiPmZvbzwvYj48IVtlbmRpZl0+JworICAgICAgICAgICAgICAgICc8IVtpZiAoIUlFKXwobHQgSUUgOSldPjxpbWcgc3JjPSJtYW1tb3RoLmJtcCIgLz48IVtlbmRpZl0+JykKKyAgICAgICAgIyBBY2NvcmRpbmcgdG8gdGhlIEhUTUw1IHNwZWNzIHNlY3Rpb25zICI4LjIuNC40NCBCb2d1cyBjb21tZW50IHN0YXRlIgorICAgICAgICAjIGFuZCAiOC4yLjQuNDUgTWFya3VwIGRlY2xhcmF0aW9uIG9wZW4gc3RhdGUiLCBjb21tZW50IHRva2VucyBzaG91bGQKKyAgICAgICAgIyBiZSBlbWl0dGVkIGluc3RlYWQgb2YgJ3Vua25vd24gZGVjbCcsIGJ1dCBjYWxsaW5nIHVua25vd25fZGVjbAorICAgICAgICAjIHByb3ZpZGVzIG1vcmUgZmxleGliaWxpdHkuCisgICAgICAgICMgU2VlIGFsc28gTGliL19tYXJrdXBiYXNlLnB5OnBhcnNlX2RlY2xhcmF0aW9uCisgICAgICAgIGV4cGVjdGVkID0gWworICAgICAgICAgICAgKCd1bmtub3duIGRlY2wnLCAnaWYgIShJRSknKSwKKyAgICAgICAgICAgICgnZGF0YScsICdicm9rZW4gY29uZGNvbScpLAorICAgICAgICAgICAgKCd1bmtub3duIGRlY2wnLCAnZW5kaWYnKSwKKyAgICAgICAgICAgICgndW5rbm93biBkZWNsJywgJ2lmICEgSUUnKSwKKyAgICAgICAgICAgICgnc3RhcnRlbmR0YWcnLCAnbGluaycsIFsoJ2hyZWYnLCAnZmF2aWNvbi50aWZmJyldKSwKKyAgICAgICAgICAgICgndW5rbm93biBkZWNsJywgJ2VuZGlmJyksCisgICAgICAgICAgICAoJ3Vua25vd24gZGVjbCcsICdpZiAhSUUgNicpLAorICAgICAgICAgICAgKCdzdGFydGVuZHRhZycsICdpbWcnLCBbKCdzcmMnLCAnZmlyZWZveC5wbmcnKV0pLAorICAgICAgICAgICAgKCd1bmtub3duIGRlY2wnLCAnZW5kaWYnKSwKKyAgICAgICAgICAgICgndW5rbm93biBkZWNsJywgJ2lmICFpZSA2JyksCisgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ2InLCBbXSksCisgICAgICAgICAgICAoJ2RhdGEnLCAnZm9vJyksCisgICAgICAgICAgICAoJ2VuZHRhZycsICdiJyksCisgICAgICAgICAgICAoJ3Vua25vd24gZGVjbCcsICdlbmRpZicpLAorICAgICAgICAgICAgKCd1bmtub3duIGRlY2wnLCAnaWYgKCFJRSl8KGx0IElFIDkpJyksCisgICAgICAgICAgICAoJ3N0YXJ0ZW5kdGFnJywgJ2ltZycsIFsoJ3NyYycsICdtYW1tb3RoLmJtcCcpXSksCisgICAgICAgICAgICAoJ3Vua25vd24gZGVjbCcsICdlbmRpZicpCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKGh0bWwsIGV4cGVjdGVkKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEhUTUxQYXJzZXJUZXN0Q2FzZSwgQXR0cmlidXRlc1Rlc3RDYXNlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2h0dHBsaWIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9odHRwbGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlODFhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9odHRwbGliLnB5CkBAIC0wLDAgKzEsNTMyIEBACitpbXBvcnQgaHR0cGxpYgoraW1wb3J0IGFycmF5CitpbXBvcnQgaHR0cGxpYgoraW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgc29ja2V0CitpbXBvcnQgZXJybm8KKworaW1wb3J0IHVuaXR0ZXN0CitUZXN0Q2FzZSA9IHVuaXR0ZXN0LlRlc3RDYXNlCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK0hPU1QgPSB0ZXN0X3N1cHBvcnQuSE9TVAorCitjbGFzcyBGYWtlU29ja2V0OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0LCBmaWxlY2xhc3M9U3RyaW5nSU8uU3RyaW5nSU8pOgorICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CisgICAgICAgIHNlbGYuZmlsZWNsYXNzID0gZmlsZWNsYXNzCisgICAgICAgIHNlbGYuZGF0YSA9ICcnCisKKyAgICBkZWYgc2VuZGFsbChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5kYXRhICs9ICcnLmpvaW4oZGF0YSkKKworICAgIGRlZiBtYWtlZmlsZShzZWxmLCBtb2RlLCBidWZzaXplPU5vbmUpOgorICAgICAgICBpZiBtb2RlICE9ICdyJyBhbmQgbW9kZSAhPSAncmInOgorICAgICAgICAgICAgcmFpc2UgaHR0cGxpYi5VbmltcGxlbWVudGVkRmlsZU1vZGUoKQorICAgICAgICByZXR1cm4gc2VsZi5maWxlY2xhc3Moc2VsZi50ZXh0KQorCitjbGFzcyBFUGlwZVNvY2tldChGYWtlU29ja2V0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0LCBwaXBlX3RyaWdnZXIpOgorICAgICAgICAjIFdoZW4gc2VuZGFsbCgpIGlzIGNhbGxlZCB3aXRoIHBpcGVfdHJpZ2dlciwgcmFpc2UgRVBJUEUuCisgICAgICAgIEZha2VTb2NrZXQuX19pbml0X18oc2VsZiwgdGV4dCkKKyAgICAgICAgc2VsZi5waXBlX3RyaWdnZXIgPSBwaXBlX3RyaWdnZXIKKworICAgIGRlZiBzZW5kYWxsKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBzZWxmLnBpcGVfdHJpZ2dlciBpbiBkYXRhOgorICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKGVycm5vLkVQSVBFLCAiZ290Y2hhIikKKyAgICAgICAgc2VsZi5kYXRhICs9IGRhdGEKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgcGFzcworCitjbGFzcyBOb0VPRlN0cmluZ0lPKFN0cmluZ0lPLlN0cmluZ0lPKToKKyAgICAiIiJMaWtlIFN0cmluZ0lPLCBidXQgcmFpc2VzIEFzc2VydGlvbkVycm9yIG9uIEVPRi4KKworICAgIFRoaXMgaXMgdXNlZCBiZWxvdyB0byB0ZXN0IHRoYXQgaHR0cGxpYiBkb2Vzbid0IHRyeSB0byByZWFkCisgICAgbW9yZSBmcm9tIHRoZSB1bmRlcmx5aW5nIGZpbGUgdGhhbiBpdCBzaG91bGQuCisgICAgIiIiCisgICAgZGVmIHJlYWQoc2VsZiwgbj0tMSk6CisgICAgICAgIGRhdGEgPSBTdHJpbmdJTy5TdHJpbmdJTy5yZWFkKHNlbGYsIG4pCisgICAgICAgIGlmIGRhdGEgPT0gJyc6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignY2FsbGVyIHRyaWVkIHRvIHJlYWQgcGFzdCBFT0YnKQorICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHJlYWRsaW5lKHNlbGYsIGxlbmd0aD1Ob25lKToKKyAgICAgICAgZGF0YSA9IFN0cmluZ0lPLlN0cmluZ0lPLnJlYWRsaW5lKHNlbGYsIGxlbmd0aCkKKyAgICAgICAgaWYgZGF0YSA9PSAnJzoKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdjYWxsZXIgdHJpZWQgdG8gcmVhZCBwYXN0IEVPRicpCisgICAgICAgIHJldHVybiBkYXRhCisKKworY2xhc3MgSGVhZGVyVGVzdHMoVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2F1dG9faGVhZGVycyhzZWxmKToKKyAgICAgICAgIyBTb21lIGhlYWRlcnMgYXJlIGFkZGVkIGF1dG9tYXRpY2FsbHksIGJ1dCBzaG91bGQgbm90IGJlIGFkZGVkIGJ5CisgICAgICAgICMgLnJlcXVlc3QoKSBpZiB0aGV5IGFyZSBleHBsaWNpdGx5IHNldC4KKworICAgICAgICBjbGFzcyBIZWFkZXJDb3VudGluZ0J1ZmZlcihsaXN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmNvdW50ID0ge30KKyAgICAgICAgICAgIGRlZiBhcHBlbmQoc2VsZiwgaXRlbSk6CisgICAgICAgICAgICAgICAga3YgPSBpdGVtLnNwbGl0KCc6JykKKyAgICAgICAgICAgICAgICBpZiBsZW4oa3YpID4gMToKKyAgICAgICAgICAgICAgICAgICAgIyBpdGVtIGlzIGEgJ0tleTogVmFsdWUnIGhlYWRlciBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgbGNLZXkgPSBrdlswXS5sb3dlcigpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnQuc2V0ZGVmYXVsdChsY0tleSwgMCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudFtsY0tleV0gKz0gMQorICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kKHNlbGYsIGl0ZW0pCisKKyAgICAgICAgZm9yIGV4cGxpY2l0X2hlYWRlciBpbiBUcnVlLCBGYWxzZToKKyAgICAgICAgICAgIGZvciBoZWFkZXIgaW4gJ0NvbnRlbnQtbGVuZ3RoJywgJ0hvc3QnLCAnQWNjZXB0LWVuY29kaW5nJzoKKyAgICAgICAgICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICAgICAgICAgIGNvbm4uc29jayA9IEZha2VTb2NrZXQoJ2JsYWhibGFoYmxhaCcpCisgICAgICAgICAgICAgICAgY29ubi5fYnVmZmVyID0gSGVhZGVyQ291bnRpbmdCdWZmZXIoKQorCisgICAgICAgICAgICAgICAgYm9keSA9ICdzcGFtc3BhbXNwYW0nCisgICAgICAgICAgICAgICAgaGVhZGVycyA9IHt9CisgICAgICAgICAgICAgICAgaWYgZXhwbGljaXRfaGVhZGVyOgorICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW2hlYWRlcl0gPSBzdHIobGVuKGJvZHkpKQorICAgICAgICAgICAgICAgIGNvbm4ucmVxdWVzdCgnUE9TVCcsICcvJywgYm9keSwgaGVhZGVycykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4uX2J1ZmZlci5jb3VudFtoZWFkZXIubG93ZXIoKV0sIDEpCisKKyAgICBkZWYgdGVzdF9jb250ZW50X2xlbmd0aF8wKHNlbGYpOgorCisgICAgICAgIGNsYXNzIENvbnRlbnRMZW5ndGhDaGVja2VyKGxpc3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGxpc3QuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRlbnRfbGVuZ3RoID0gTm9uZQorICAgICAgICAgICAgZGVmIGFwcGVuZChzZWxmLCBpdGVtKToKKyAgICAgICAgICAgICAgICBrdiA9IGl0ZW0uc3BsaXQoJzonLCAxKQorICAgICAgICAgICAgICAgIGlmIGxlbihrdikgPiAxIGFuZCBrdlswXS5sb3dlcigpID09ICdjb250ZW50LWxlbmd0aCc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGVudF9sZW5ndGggPSBrdlsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoc2VsZiwgaXRlbSkKKworICAgICAgICAjIFBPU1Qgd2l0aCBlbXB0eSBib2R5CisgICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgIGNvbm4uc29jayA9IEZha2VTb2NrZXQoTm9uZSkKKyAgICAgICAgY29ubi5fYnVmZmVyID0gQ29udGVudExlbmd0aENoZWNrZXIoKQorICAgICAgICBjb25uLnJlcXVlc3QoJ1BPU1QnLCAnLycsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4uX2J1ZmZlci5jb250ZW50X2xlbmd0aCwgJzAnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ0hlYWRlciBDb250ZW50LUxlbmd0aCBub3Qgc2V0JykKKworICAgICAgICAjIFBVVCByZXF1ZXN0IHdpdGggZW1wdHkgYm9keQorICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICBjb25uLnNvY2sgPSBGYWtlU29ja2V0KE5vbmUpCisgICAgICAgIGNvbm4uX2J1ZmZlciA9IENvbnRlbnRMZW5ndGhDaGVja2VyKCkKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdQVVQnLCAnLycsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4uX2J1ZmZlci5jb250ZW50X2xlbmd0aCwgJzAnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ0hlYWRlciBDb250ZW50LUxlbmd0aCBub3Qgc2V0JykKKworICAgIGRlZiB0ZXN0X3B1dGhlYWRlcihzZWxmKToKKyAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oJ2V4YW1wbGUuY29tJykKKyAgICAgICAgY29ubi5zb2NrID0gRmFrZVNvY2tldChOb25lKQorICAgICAgICBjb25uLnB1dHJlcXVlc3QoJ0dFVCcsJy8nKQorICAgICAgICBjb25uLnB1dGhlYWRlcignQ29udGVudC1sZW5ndGgnLDQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0NvbnRlbnQtbGVuZ3RoOiA0MicgaW4gY29ubi5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfaXB2Nmhvc3RfaGVhZGVyKHNlbGYpOgorICAgICAgICAjIERlZmF1bHQgaG9zdCBoZWFkZXIgb24gSVB2NiB0cmFuc2FjdGlvbiBzaG91bGQgd3JhcHBlZCBieSBbXSBpZgorICAgICAgICAjIGl0cyBhY3R1YWwgSVB2NiBhZGRyZXNzCisgICAgICAgIGV4cGVjdGVkID0gJ0dFVCAvZm9vIEhUVFAvMS4xXHJcbkhvc3Q6IFsyMDAxOjpdOjgxXHJcbicgXAorICAgICAgICAgICAgICAgICAgICdBY2NlcHQtRW5jb2Rpbmc6IGlkZW50aXR5XHJcblxyXG4nCisgICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCdbMjAwMTo6XTo4MScpCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KCcnKQorICAgICAgICBjb25uLnNvY2sgPSBzb2NrCisgICAgICAgIGNvbm4ucmVxdWVzdCgnR0VUJywgJy9mb28nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5kYXRhLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpKQorCisgICAgICAgIGV4cGVjdGVkID0gJ0dFVCAvZm9vIEhUVFAvMS4xXHJcbkhvc3Q6IFsyMDAxOjEwMkE6Ol1cclxuJyBcCisgICAgICAgICAgICAgICAgICAgJ0FjY2VwdC1FbmNvZGluZzogaWRlbnRpdHlcclxuXHJcbicKKyAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oJ1syMDAxOjEwMkE6Ol0nKQorICAgICAgICBzb2NrID0gRmFrZVNvY2tldCgnJykKKyAgICAgICAgY29ubi5zb2NrID0gc29jaworICAgICAgICBjb25uLnJlcXVlc3QoJ0dFVCcsICcvZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suZGF0YS5zdGFydHN3aXRoKGV4cGVjdGVkKSkKKworCitjbGFzcyBCYXNpY1Rlc3QoVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3N0YXR1c19saW5lcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IEhUVFAgc3RhdHVzIGxpbmVzCisKKyAgICAgICAgYm9keSA9ICJIVFRQLzEuMSAyMDAgT2tcclxuXHJcblRleHQiCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGJvZHkpCisgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShzb2NrKQorICAgICAgICByZXNwLmJlZ2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQoKSwgJ1RleHQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5pc2Nsb3NlZCgpKQorCisgICAgICAgIGJvZHkgPSAiSFRUUC8xLjEgNDAwLjEwMCBOb3QgT2tcclxuXHJcblRleHQiCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGJvZHkpCisgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShzb2NrKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhodHRwbGliLkJhZFN0YXR1c0xpbmUsIHJlc3AuYmVnaW4pCisKKyAgICBkZWYgdGVzdF9iYWRfc3RhdHVzX3JlcHIoc2VsZik6CisgICAgICAgIGV4YyA9IGh0dHBsaWIuQmFkU3RhdHVzTGluZSgnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGV4YyksICcnJ0JhZFN0YXR1c0xpbmUoIlwnXCciLCknJycpCisKKyAgICBkZWYgdGVzdF9wYXJ0aWFsX3JlYWRzKHNlbGYpOgorICAgICAgICAjIGlmIHdlIGhhdmUgYSBsZW5ndGgsIHRoZSBzeXN0ZW0ga25vd3Mgd2hlbiB0byBjbG9zZSBpdHNlbGYKKyAgICAgICAgIyBzYW1lIGJlaGF2aW91ciB0aGFuIHdoZW4gd2UgcmVhZCB0aGUgd2hvbGUgdGhpbmcgd2l0aCByZWFkKCkKKyAgICAgICAgYm9keSA9ICJIVFRQLzEuMSAyMDAgT2tcclxuQ29udGVudC1MZW5ndGg6IDRcclxuXHJcblRleHQiCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGJvZHkpCisgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShzb2NrKQorICAgICAgICByZXNwLmJlZ2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQoMiksICdUZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzcC5pc2Nsb3NlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZCgyKSwgJ3h0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3AuaXNjbG9zZWQoKSkKKworICAgIGRlZiB0ZXN0X3BhcnRpYWxfcmVhZHNfbm9fY29udGVudF9sZW5ndGgoc2VsZik6CisgICAgICAgICMgd2hlbiBubyBsZW5ndGggaXMgcHJlc2VudCwgdGhlIHNvY2tldCBzaG91bGQgYmUgZ3JhY2VmdWxseSBjbG9zZWQgd2hlbgorICAgICAgICAjIGFsbCBkYXRhIHdhcyByZWFkCisgICAgICAgIGJvZHkgPSAiSFRUUC8xLjEgMjAwIE9rXHJcblxyXG5UZXh0IgorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChib2R5KQorICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2Uoc29jaykKKyAgICAgICAgcmVzcC5iZWdpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkKDIpLCAnVGUnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3AuaXNjbG9zZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQoMiksICd4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkKDEpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3AuaXNjbG9zZWQoKSkKKworICAgIGRlZiB0ZXN0X3BhcnRpYWxfcmVhZHNfaW5jb21wbGV0ZV9ib2R5KHNlbGYpOgorICAgICAgICAjIGlmIHRoZSBzZXJ2ZXIgc2h1dHMgZG93biB0aGUgY29ubmVjdGlvbiBiZWZvcmUgdGhlIHdob2xlCisgICAgICAgICMgY29udGVudC1sZW5ndGggaXMgZGVsaXZlcmVkLCB0aGUgc29ja2V0IGlzIGdyYWNlZnVsbHkgY2xvc2VkCisgICAgICAgIGJvZHkgPSAiSFRUUC8xLjEgMjAwIE9rXHJcbkNvbnRlbnQtTGVuZ3RoOiAxMFxyXG5cclxuVGV4dCIKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYm9keSkKKyAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2spCisgICAgICAgIHJlc3AuYmVnaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZCgyKSwgJ1RlJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXNwLmlzY2xvc2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkKDIpLCAneHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZCgxKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwLmlzY2xvc2VkKCkpCisKKyAgICBkZWYgdGVzdF9ob3N0X3BvcnQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgaW52YWxpZCBob3N0X3BvcnQKKworICAgICAgICAjIE5vdGUgdGhhdCBodHRwbGliIGRvZXMgbm90IGFjY2VwdCB1c2VyOnBhc3N3b3JkQCBpbiB0aGUgaG9zdC1wb3J0LgorICAgICAgICBmb3IgaHAgaW4gKCJ3d3cucHl0aG9uLm9yZzphYmMiLCAidXNlcjpwYXNzd29yZEB3d3cucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaHR0cGxpYi5JbnZhbGlkVVJMLCBodHRwbGliLkhUVFAsIGhwKQorCisgICAgICAgIGZvciBocCwgaCwgcCBpbiAoKCJbZmU4MDo6MjA3OmU5ZmY6ZmU5Yl06ODAwMCIsICJmZTgwOjoyMDc6ZTlmZjpmZTliIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgODAwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJ3d3cucHl0aG9uLm9yZzo4MCIsICJ3d3cucHl0aG9uLm9yZyIsIDgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoInd3dy5weXRob24ub3JnIiwgInd3dy5weXRob24ub3JnIiwgODApLAorICAgICAgICAgICAgICAgICAgICAgICAgICgid3d3LnB5dGhvbi5vcmc6IiwgInd3dy5weXRob24ub3JnIiwgODApLAorICAgICAgICAgICAgICAgICAgICAgICAgICgiW2ZlODA6OjIwNzplOWZmOmZlOWJdIiwgImZlODA6OjIwNzplOWZmOmZlOWIiLCA4MCkpOgorICAgICAgICAgICAgaHR0cCA9IGh0dHBsaWIuSFRUUChocCkKKyAgICAgICAgICAgIGMgPSBodHRwLl9jb25uCisgICAgICAgICAgICBpZiBoICE9IGMuaG9zdDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkhvc3QgaW5jb3JyZWN0bHkgcGFyc2VkOiAlcyAhPSAlcyIgJSAoaCwgYy5ob3N0KSkKKyAgICAgICAgICAgIGlmIHAgIT0gYy5wb3J0OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUG9ydCBpbmNvcnJlY3RseSBwYXJzZWQ6ICVzICE9ICVzIiAlIChwLCBjLmhvc3QpKQorCisgICAgZGVmIHRlc3RfcmVzcG9uc2VfaGVhZGVycyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHJlc3BvbnNlIHdpdGggbXVsdGlwbGUgbWVzc2FnZSBoZWFkZXJzIHdpdGggdGhlIHNhbWUgZmllbGQgbmFtZS4KKyAgICAgICAgdGV4dCA9ICgnSFRUUC8xLjEgMjAwIE9LXHJcbicKKyAgICAgICAgICAgICAgICAnU2V0LUNvb2tpZTogQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOycKKyAgICAgICAgICAgICAgICAnIFZlcnNpb249IjEiOyBQYXRoPSIvYWNtZSJcclxuJworICAgICAgICAgICAgICAgICdTZXQtQ29va2llOiBQYXJ0X051bWJlcj0iUm9ja2V0X0xhdW5jaGVyXzAwMDEiOyBWZXJzaW9uPSIxIjsnCisgICAgICAgICAgICAgICAgJyBQYXRoPSIvYWNtZSJcclxuJworICAgICAgICAgICAgICAgICdcclxuJworICAgICAgICAgICAgICAgICdObyBib2R5XHJcbicpCisgICAgICAgIGhkciA9ICgnQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOyBWZXJzaW9uPSIxIjsgUGF0aD0iL2FjbWUiJworICAgICAgICAgICAgICAgJywgJworICAgICAgICAgICAgICAgJ1BhcnRfTnVtYmVyPSJSb2NrZXRfTGF1bmNoZXJfMDAwMSI7IFZlcnNpb249IjEiOyBQYXRoPSIvYWNtZSInKQorICAgICAgICBzID0gRmFrZVNvY2tldCh0ZXh0KQorICAgICAgICByID0gaHR0cGxpYi5IVFRQUmVzcG9uc2UocykKKyAgICAgICAgci5iZWdpbigpCisgICAgICAgIGNvb2tpZXMgPSByLmdldGhlYWRlcigiU2V0LUNvb2tpZSIpCisgICAgICAgIGlmIGNvb2tpZXMgIT0gaGRyOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJtdWx0aXBsZSBoZWFkZXJzIG5vdCBjb21iaW5lZCBwcm9wZXJseSIpCisKKyAgICBkZWYgdGVzdF9yZWFkX2hlYWQoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBsaWJyYXJ5IGRvZXNuJ3QgYXR0ZW1wdCB0byByZWFkIGFueSBkYXRhCisgICAgICAgICMgZnJvbSBhIEhFQUQgcmVxdWVzdC4gIChUaWNrbGVzIFNGIGJ1ZyAjNjIyMDQyLikKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoCisgICAgICAgICAgICAnSFRUUC8xLjEgMjAwIE9LXHJcbicKKyAgICAgICAgICAgICdDb250ZW50LUxlbmd0aDogMTQ0MzJcclxuJworICAgICAgICAgICAgJ1xyXG4nLAorICAgICAgICAgICAgTm9FT0ZTdHJpbmdJTykKKyAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iSEVBRCIpCisgICAgICAgIHJlc3AuYmVnaW4oKQorICAgICAgICBpZiByZXNwLnJlYWQoKSAhPSAiIjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkIG5vdCBleHBlY3QgcmVzcG9uc2UgZnJvbSBIRUFEIHJlcXVlc3QiKQorCisgICAgZGVmIHRlc3Rfc2VuZF9maWxlKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICdHRVQgL2ZvbyBIVFRQLzEuMVxyXG5Ib3N0OiBleGFtcGxlLmNvbVxyXG4nIFwKKyAgICAgICAgICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nOiBpZGVudGl0eVxyXG5Db250ZW50LUxlbmd0aDonCisKKyAgICAgICAgYm9keSA9IG9wZW4oX19maWxlX18sICdyYicpCisgICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGJvZHkpCisgICAgICAgIGNvbm4uc29jayA9IHNvY2sKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdHRVQnLCAnL2ZvbycsIGJvZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLmRhdGEuc3RhcnRzd2l0aChleHBlY3RlZCkpCisKKyAgICBkZWYgdGVzdF9zZW5kKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICd0aGlzIGlzIGEgdGVzdCB0aGlzIGlzIG9ubHkgYSB0ZXN0JworICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChOb25lKQorICAgICAgICBjb25uLnNvY2sgPSBzb2NrCisgICAgICAgIGNvbm4uc2VuZChleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgc29jay5kYXRhKQorICAgICAgICBzb2NrLmRhdGEgPSAnJworICAgICAgICBjb25uLnNlbmQoYXJyYXkuYXJyYXkoJ2MnLCBleHBlY3RlZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHNvY2suZGF0YSkKKyAgICAgICAgc29jay5kYXRhID0gJycKKyAgICAgICAgY29ubi5zZW5kKFN0cmluZ0lPLlN0cmluZ0lPKGV4cGVjdGVkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgc29jay5kYXRhKQorCisgICAgZGVmIHRlc3RfY2h1bmtlZChzZWxmKToKKyAgICAgICAgY2h1bmtlZF9zdGFydCA9ICgKKyAgICAgICAgICAgICdIVFRQLzEuMSAyMDAgT0tcclxuJworICAgICAgICAgICAgJ1RyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXHJcblxyXG4nCisgICAgICAgICAgICAnYVxyXG4nCisgICAgICAgICAgICAnaGVsbG8gd29ybFxyXG4nCisgICAgICAgICAgICAnMVxyXG4nCisgICAgICAgICAgICAnZFxyXG4nCisgICAgICAgICkKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoY2h1bmtlZF9zdGFydCArICcwXHJcbicpCisgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShzb2NrLCBtZXRob2Q9IkdFVCIpCisgICAgICAgIHJlc3AuYmVnaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AucmVhZCgpLCAnaGVsbG8gd29ybGQnKQorICAgICAgICByZXNwLmNsb3NlKCkKKworICAgICAgICBmb3IgeCBpbiAoJycsICdmb29cclxuJyk6CisgICAgICAgICAgICBzb2NrID0gRmFrZVNvY2tldChjaHVua2VkX3N0YXJ0ICsgeCkKKyAgICAgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShzb2NrLCBtZXRob2Q9IkdFVCIpCisgICAgICAgICAgICByZXNwLmJlZ2luKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXNwLnJlYWQoKQorICAgICAgICAgICAgZXhjZXB0IGh0dHBsaWIuSW5jb21wbGV0ZVJlYWQsIGk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLnBhcnRpYWwsICdoZWxsbyB3b3JsZCcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGkpLCdJbmNvbXBsZXRlUmVhZCgxMSBieXRlcyByZWFkKScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaSksJ0luY29tcGxldGVSZWFkKDExIGJ5dGVzIHJlYWQpJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdJbmNvbXBsZXRlUmVhZCBleHBlY3RlZCcpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJlc3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY2h1bmtlZF9oZWFkKHNlbGYpOgorICAgICAgICBjaHVua2VkX3N0YXJ0ID0gKAorICAgICAgICAgICAgJ0hUVFAvMS4xIDIwMCBPS1xyXG4nCisgICAgICAgICAgICAnVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcclxuXHJcbicKKyAgICAgICAgICAgICdhXHJcbicKKyAgICAgICAgICAgICdoZWxsbyB3b3JsZFxyXG4nCisgICAgICAgICAgICAnMVxyXG4nCisgICAgICAgICAgICAnZFxyXG4nCisgICAgICAgICkKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoY2h1bmtlZF9zdGFydCArICcwXHJcbicpCisgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShzb2NrLCBtZXRob2Q9IkhFQUQiKQorICAgICAgICByZXNwLmJlZ2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYWQoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5zdGF0dXMsIDIwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnJlYXNvbiwgJ09LJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3AuaXNjbG9zZWQoKSkKKworICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2NvbnRlbnRfbGVuZ3RoKHNlbGYpOgorICAgICAgICBzb2NrID0gRmFrZVNvY2tldCgnSFRUUC8xLjEgMjAwIE9LXHJcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoOiAtMVxyXG5cclxuSGVsbG9cclxuJykKKyAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iR0VUIikKKyAgICAgICAgcmVzcC5iZWdpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkKCksICdIZWxsb1xyXG4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5pc2Nsb3NlZCgpKQorCisgICAgZGVmIHRlc3RfaW5jb21wbGV0ZV9yZWFkKHNlbGYpOgorICAgICAgICBzb2NrID0gRmFrZVNvY2tldCgnSFRUUC8xLjEgMjAwIE9LXHJcbkNvbnRlbnQtTGVuZ3RoOiAxMFxyXG5cclxuSGVsbG9cclxuJykKKyAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2ssIG1ldGhvZD0iR0VUIikKKyAgICAgICAgcmVzcC5iZWdpbigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3AucmVhZCgpCisgICAgICAgIGV4Y2VwdCBodHRwbGliLkluY29tcGxldGVSZWFkIGFzIGk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkucGFydGlhbCwgJ0hlbGxvXHJcbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmNvbXBsZXRlUmVhZCg3IGJ5dGVzIHJlYWQsIDMgbW9yZSBleHBlY3RlZCkiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmNvbXBsZXRlUmVhZCg3IGJ5dGVzIHJlYWQsIDMgbW9yZSBleHBlY3RlZCkiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3AuaXNjbG9zZWQoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnSW5jb21wbGV0ZVJlYWQgZXhwZWN0ZWQnKQorCisgICAgZGVmIHRlc3RfZXBpcGUoc2VsZik6CisgICAgICAgIHNvY2sgPSBFUGlwZVNvY2tldCgKKyAgICAgICAgICAgICJIVFRQLzEuMCA0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZFxyXG4iCisgICAgICAgICAgICAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcclxuIgorICAgICAgICAgICAgIldXVy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPVwiZXhhbXBsZVwiXHJcbiIsCisgICAgICAgICAgICBiIkNvbnRlbnQtTGVuZ3RoIikKKyAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oImV4YW1wbGUuY29tIikKKyAgICAgICAgY29ubi5zb2NrID0gc29jaworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogY29ubi5yZXF1ZXN0KCJQVVQiLCAiL3VybCIsICJib2R5IikpCisgICAgICAgIHJlc3AgPSBjb25uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MDEsIHJlc3Auc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJCYXNpYyByZWFsbT1cImV4YW1wbGVcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcC5nZXRoZWFkZXIoInd3dy1hdXRoZW50aWNhdGUiKSkKKworICAgIGRlZiB0ZXN0X2ZpbGVub2F0dHIoc2VsZik6CisgICAgICAgICMgSnVzdCB0ZXN0IHRoZSBmaWxlbm8gYXR0cmlidXRlIGluIHRoZSBIVFRQUmVzcG9uc2UgT2JqZWN0LgorICAgICAgICBib2R5ID0gIkhUVFAvMS4xIDIwMCBPa1xyXG5cclxuVGV4dCIKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYm9keSkKKyAgICAgICAgcmVzcCA9IGh0dHBsaWIuSFRUUFJlc3BvbnNlKHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHJlc3AsJ2ZpbGVubycpLAorICAgICAgICAgICAgICAgICdIVFRQUmVzcG9uc2Ugc2hvdWxkIGV4cG9zZSBhIGZpbGVubyBhdHRyaWJ1dGUnKQorCisgICAgIyBUZXN0IGxpbmVzIG92ZXJmbG93aW5nIHRoZSBtYXggbGluZSBzaXplIChfTUFYTElORSBpbiBodHRwLmNsaWVudCkKKworICAgIGRlZiB0ZXN0X292ZXJmbG93aW5nX3N0YXR1c19saW5lKHNlbGYpOgorICAgICAgICBzZWxmLnNraXBUZXN0KCJkaXNhYmxlZCBmb3IgSFRUUCAwLjkgc3VwcG9ydCIpCisgICAgICAgIGJvZHkgPSAiSFRUUC8xLjEgMjAwIE9rIiArICJrIiAqIDY1NTM2ICsgIlxyXG4iCisgICAgICAgIHJlc3AgPSBodHRwbGliLkhUVFBSZXNwb25zZShGYWtlU29ja2V0KGJvZHkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoaHR0cGxpYi5MaW5lVG9vTG9uZywgaHR0cGxpYi5CYWRTdGF0dXNMaW5lKSwgcmVzcC5iZWdpbikKKworICAgIGRlZiB0ZXN0X292ZXJmbG93aW5nX2hlYWRlcl9saW5lKHNlbGYpOgorICAgICAgICBib2R5ID0gKAorICAgICAgICAgICAgJ0hUVFAvMS4xIDIwMCBPS1xyXG4nCisgICAgICAgICAgICAnWC1Gb286IGJhcicgKyAncicgKiA2NTUzNiArICdcclxuXHJcbicKKyAgICAgICAgKQorICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2UoRmFrZVNvY2tldChib2R5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaHR0cGxpYi5MaW5lVG9vTG9uZywgcmVzcC5iZWdpbikKKworICAgIGRlZiB0ZXN0X292ZXJmbG93aW5nX2NodW5rZWRfbGluZShzZWxmKToKKyAgICAgICAgYm9keSA9ICgKKyAgICAgICAgICAgICdIVFRQLzEuMSAyMDAgT0tcclxuJworICAgICAgICAgICAgJ1RyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXHJcblxyXG4nCisgICAgICAgICAgICArICcwJyAqIDY1NTM2ICsgJ2FcclxuJworICAgICAgICAgICAgJ2hlbGxvIHdvcmxkXHJcbicKKyAgICAgICAgICAgICcwXHJcbicKKyAgICAgICAgKQorICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2UoRmFrZVNvY2tldChib2R5KSkKKyAgICAgICAgcmVzcC5iZWdpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGh0dHBsaWIuTGluZVRvb0xvbmcsIHJlc3AucmVhZCkKKworICAgIGRlZiB0ZXN0X2Vhcmx5X2VvZihzZWxmKToKKyAgICAgICAgIyBUZXN0IGh0dHByZXNwb25zZSB3aXRoIG5vIFxyXG4gdGVybWluYXRpb24sCisgICAgICAgIGJvZHkgPSAiSFRUUC8xLjEgMjAwIE9rIgorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChib2R5KQorICAgICAgICByZXNwID0gaHR0cGxpYi5IVFRQUmVzcG9uc2Uoc29jaykKKyAgICAgICAgcmVzcC5iZWdpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5yZWFkKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5pc2Nsb3NlZCgpKQorCitjbGFzcyBPZmZsaW5lVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcmVzcG9uc2VzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0dHBsaWIucmVzcG9uc2VzW2h0dHBsaWIuTk9UX0ZPVU5EXSwgIk5vdCBGb3VuZCIpCisKKworY2xhc3MgU291cmNlQWRkcmVzc1Rlc3QoVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc2VydikKKyAgICAgICAgc2VsZi5zb3VyY2VfcG9ydCA9IHRlc3Rfc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKKyAgICAgICAgc2VsZi5zZXJ2Lmxpc3Rlbig1KQorICAgICAgICBzZWxmLmNvbm4gPSBOb25lCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuY29ubjoKKyAgICAgICAgICAgIHNlbGYuY29ubi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmNvbm4gPSBOb25lCisgICAgICAgIHNlbGYuc2Vydi5jbG9zZSgpCisgICAgICAgIHNlbGYuc2VydiA9IE5vbmUKKworICAgIGRlZiB0ZXN0SFRUUENvbm5lY3Rpb25Tb3VyY2VBZGRyZXNzKHNlbGYpOgorICAgICAgICBzZWxmLmNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKEhPU1QsIHNlbGYucG9ydCwKKyAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz0oJycsIHNlbGYuc291cmNlX3BvcnQpKQorICAgICAgICBzZWxmLmNvbm4uY29ubmVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb25uLnNvY2suZ2V0c29ja25hbWUoKVsxXSwgc2VsZi5zb3VyY2VfcG9ydCkKKworICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoaHR0cGxpYiwgJ0hUVFBTQ29ubmVjdGlvbicpLAorICAgICAgICAgICAgICAgICAgICAgJ2h0dHBsaWIuSFRUUFNDb25uZWN0aW9uIG5vdCBkZWZpbmVkJykKKyAgICBkZWYgdGVzdEhUVFBTQ29ubmVjdGlvblNvdXJjZUFkZHJlc3Moc2VsZik6CisgICAgICAgIHNlbGYuY29ubiA9IGh0dHBsaWIuSFRUUFNDb25uZWN0aW9uKEhPU1QsIHNlbGYucG9ydCwKKyAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz0oJycsIHNlbGYuc291cmNlX3BvcnQpKQorICAgICAgICAjIFdlIGRvbid0IHRlc3QgYW55dGhpbmcgaGVyZSBvdGhlciB0aGUgY29uc3RydWN0b3Igbm90IGJhcmZpbmcgYXMKKyAgICAgICAgIyB0aGlzIGNvZGUgZG9lc24ndCBkZWFsIHdpdGggc2V0dGluZyB1cCBhbiBhY3RpdmUgcnVubmluZyBTU0wgc2VydmVyCisgICAgICAgICMgZm9yIGFuIHNzbF93cmFwcGVkIGNvbm5lY3QoKSB0byBhY3R1YWxseSByZXR1cm4gZnJvbS4KKworCitjbGFzcyBUaW1lb3V0VGVzdChUZXN0Q2FzZSk6CisgICAgUE9SVCA9IE5vbmUKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBUaW1lb3V0VGVzdC5QT1JUID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNlcnYpCisgICAgICAgIHNlbGYuc2Vydi5saXN0ZW4oNSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2LmNsb3NlKCkKKyAgICAgICAgc2VsZi5zZXJ2ID0gTm9uZQorCisgICAgZGVmIHRlc3RUaW1lb3V0QXR0cmlidXRlKHNlbGYpOgorICAgICAgICAnJydUaGlzIHdpbGwgcHJvdmUgdGhhdCB0aGUgdGltZW91dCBnZXRzIHRocm91Z2gKKyAgICAgICAgSFRUUENvbm5lY3Rpb24gYW5kIGludG8gdGhlIHNvY2tldC4KKyAgICAgICAgJycnCisgICAgICAgICMgZGVmYXVsdCAtLSB1c2UgZ2xvYmFsIHNvY2tldCB0aW1lb3V0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoMzApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGh0dHBDb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihIT1NULCBUaW1lb3V0VGVzdC5QT1JUKQorICAgICAgICAgICAgaHR0cENvbm4uY29ubmVjdCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodHRwQ29ubi5zb2NrLmdldHRpbWVvdXQoKSwgMzApCisgICAgICAgIGh0dHBDb25uLmNsb3NlKCkKKworICAgICAgICAjIG5vIHRpbWVvdXQgLS0gZG8gbm90IHVzZSBnbG9iYWwgc29ja2V0IGRlZmF1bHQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgzMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaHR0cENvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKEhPU1QsIFRpbWVvdXRUZXN0LlBPUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1Ob25lKQorICAgICAgICAgICAgaHR0cENvbm4uY29ubmVjdCgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodHRwQ29ubi5zb2NrLmdldHRpbWVvdXQoKSwgTm9uZSkKKyAgICAgICAgaHR0cENvbm4uY2xvc2UoKQorCisgICAgICAgICMgYSB2YWx1ZQorICAgICAgICBodHRwQ29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oSE9TVCwgVGltZW91dFRlc3QuUE9SVCwgdGltZW91dD0zMCkKKyAgICAgICAgaHR0cENvbm4uY29ubmVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHR0cENvbm4uc29jay5nZXR0aW1lb3V0KCksIDMwKQorICAgICAgICBodHRwQ29ubi5jbG9zZSgpCisKKworY2xhc3MgSFRUUFNUaW1lb3V0VGVzdChUZXN0Q2FzZSk6CisjIFhYWCBIZXJlIHNob3VsZCBiZSB0ZXN0cyBmb3IgSFRUUFMsIHRoZXJlIGlzbid0IGFueSByaWdodCBub3chCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICAjIHNpbXBsZSB0ZXN0IHRvIGNoZWNrIGl0J3Mgc3RvcmluZyBpdAorICAgICAgICBpZiBoYXNhdHRyKGh0dHBsaWIsICdIVFRQU0Nvbm5lY3Rpb24nKToKKyAgICAgICAgICAgIGggPSBodHRwbGliLkhUVFBTQ29ubmVjdGlvbihIT1NULCBUaW1lb3V0VGVzdC5QT1JULCB0aW1lb3V0PTMwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnRpbWVvdXQsIDMwKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3QgaGFzYXR0cihodHRwbGliLCAnSFRUUFMnKSwgJ2h0dHBsaWIuSFRUUFMgbm90IGF2YWlsYWJsZScpCisgICAgZGVmIHRlc3RfaG9zdF9wb3J0KHNlbGYpOgorICAgICAgICAjIENoZWNrIGludmFsaWQgaG9zdF9wb3J0CisKKyAgICAgICAgIyBOb3RlIHRoYXQgaHR0cGxpYiBkb2VzIG5vdCBhY2NlcHQgdXNlcjpwYXNzd29yZEAgaW4gdGhlIGhvc3QtcG9ydC4KKyAgICAgICAgZm9yIGhwIGluICgid3d3LnB5dGhvbi5vcmc6YWJjIiwgInVzZXI6cGFzc3dvcmRAd3d3LnB5dGhvbi5vcmciKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGh0dHBsaWIuSW52YWxpZFVSTCwgaHR0cGxpYi5IVFRQLCBocCkKKworICAgICAgICBmb3IgaHAsIGgsIHAgaW4gKCgiW2ZlODA6OjIwNzplOWZmOmZlOWJdOjgwMDAiLCAiZmU4MDo6MjA3OmU5ZmY6ZmU5YiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDgwMDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICgicHlwaS5weXRob24ub3JnOjQ0MyIsICJweXBpLnB5dGhvbi5vcmciLCA0NDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgicHlwaS5weXRob24ub3JnIiwgInB5cGkucHl0aG9uLm9yZyIsIDQ0MyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJweXBpLnB5dGhvbi5vcmc6IiwgInB5cGkucHl0aG9uLm9yZyIsIDQ0MyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJbZmU4MDo6MjA3OmU5ZmY6ZmU5Yl0iLCAiZmU4MDo6MjA3OmU5ZmY6ZmU5YiIsIDQ0MykpOgorICAgICAgICAgICAgaHR0cCA9IGh0dHBsaWIuSFRUUFMoaHApCisgICAgICAgICAgICBjID0gaHR0cC5fY29ubgorICAgICAgICAgICAgaWYgaCAhPSBjLmhvc3Q6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJIb3N0IGluY29ycmVjdGx5IHBhcnNlZDogJXMgIT0gJXMiICUgKGgsIGMuaG9zdCkpCisgICAgICAgICAgICBpZiBwICE9IGMucG9ydDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlBvcnQgaW5jb3JyZWN0bHkgcGFyc2VkOiAlcyAhPSAlcyIgJSAocCwgYy5ob3N0KSkKKworCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChIZWFkZXJUZXN0cywgT2ZmbGluZVRlc3QsIEJhc2ljVGVzdCwgVGltZW91dFRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQU1RpbWVvdXRUZXN0LCBTb3VyY2VBZGRyZXNzVGVzdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9odHRwc2VydmVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGNlZGMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkKQEAgLTAsMCArMSw1MzcgQEAKKyIiIlVuaXR0ZXN0cyBmb3IgdGhlIHZhcmlvdXMgSFRUUFNlcnZlciBtb2R1bGVzLgorCitXcml0dGVuIGJ5IENvZHkgQS5XLiBTb21lcnZpbGxlIDxjb2R5LXNvbWVydmlsbGVAdWJ1bnR1LmNvbT4sCitKb3NpcCBEem9sb25nYSwgYW5kIE1pY2hhZWwgT3R0ZW5lZGVyIGZvciB0aGUgMjAwNy8wOCBHSE9QIGNvbnRlc3QuCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2ltcG9ydCBiYXNlNjQKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCBodHRwbGliCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IENHSUhUVFBTZXJ2ZXIKKworCitmcm9tIEJhc2VIVFRQU2VydmVyIGltcG9ydCBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLCBIVFRQU2VydmVyCitmcm9tIFNpbXBsZUhUVFBTZXJ2ZXIgaW1wb3J0IFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcgorZnJvbSBDR0lIVFRQU2VydmVyIGltcG9ydCBDR0lIVFRQUmVxdWVzdEhhbmRsZXIKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK3RocmVhZGluZyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQorCisKK2NsYXNzIE5vTG9nUmVxdWVzdEhhbmRsZXI6CisgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsICphcmdzKToKKyAgICAgICAgIyBkb24ndCB3cml0ZSBsb2cgbWVzc2FnZXMgdG8gc3RkZXJyCisgICAgICAgIHBhc3MKKworY2xhc3MgU29ja2V0bGVzc1JlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmdldF9jYWxsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnByb3RvY29sX3ZlcnNpb24gPSAiSFRUUC8xLjEiCisKKyAgICBkZWYgZG9fR0VUKHNlbGYpOgorICAgICAgICBzZWxmLmdldF9jYWxsZWQgPSBUcnVlCisgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKQorICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgc2VsZi53ZmlsZS53cml0ZShiJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQorCisgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZtdCwgKmFyZ3MpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgVGVzdFNlcnZlclRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9vYmplY3QsIHJlcXVlc3RfaGFuZGxlcik6CisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5yZXF1ZXN0X2hhbmRsZXIgPSByZXF1ZXN0X2hhbmRsZXIKKyAgICAgICAgc2VsZi50ZXN0X29iamVjdCA9IHRlc3Rfb2JqZWN0CisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlciA9IEhUVFBTZXJ2ZXIoKCcnLCAwKSwgc2VsZi5yZXF1ZXN0X2hhbmRsZXIpCisgICAgICAgIHNlbGYudGVzdF9vYmplY3QuUE9SVCA9IHNlbGYuc2VydmVyLnNvY2tldC5nZXRzb2NrbmFtZSgpWzFdCisgICAgICAgIHNlbGYudGVzdF9vYmplY3Quc2VydmVyX3N0YXJ0ZWQuc2V0KCkKKyAgICAgICAgc2VsZi50ZXN0X29iamVjdCA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc2VydmVfZm9yZXZlcigwLjA1KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc2VydmVyX2Nsb3NlKCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlci5zaHV0ZG93bigpCisKKworY2xhc3MgQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3RocmVhZHMgPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKyAgICAgICAgb3MuZW52aXJvbiA9IHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXJfc3RhcnRlZCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHNlbGYudGhyZWFkID0gVGVzdFNlcnZlclRocmVhZChzZWxmLCBzZWxmLnJlcXVlc3RfaGFuZGxlcikKKyAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQorICAgICAgICBzZWxmLnNlcnZlcl9zdGFydGVkLndhaXQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRocmVhZC5zdG9wKCkKKyAgICAgICAgb3MuZW52aXJvbi5fX2V4aXRfXygpCisgICAgICAgIHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKKworICAgIGRlZiByZXF1ZXN0KHNlbGYsIHVyaSwgbWV0aG9kPSdHRVQnLCBib2R5PU5vbmUsIGhlYWRlcnM9e30pOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCdsb2NhbGhvc3QnLCBzZWxmLlBPUlQpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbi5yZXF1ZXN0KG1ldGhvZCwgdXJpLCBib2R5LCBoZWFkZXJzKQorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmdldHJlc3BvbnNlKCkKKworY2xhc3MgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBCYXNlSFRUUFNlcnZlciBmb2N1c3Npbmcgb24KKyAgICBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLgorICAgICIiIgorCisgICAgSFRUUFJlc3BvbnNlTWF0Y2ggPSByZS5jb21waWxlKCdIVFRQLzEuWzAtOV0rIDIwMCBPSycpCisKKyAgICBkZWYgc2V0VXAgKHNlbGYpOgorICAgICAgICBzZWxmLmhhbmRsZXIgPSBTb2NrZXRsZXNzUmVxdWVzdEhhbmRsZXIoKQorCisgICAgZGVmIHNlbmRfdHlwaWNhbF9yZXF1ZXN0KHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICBpbnB1dF9tc2cgPSBTdHJpbmdJTyhtZXNzYWdlKQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIHNlbGYuaGFuZGxlci5yZmlsZSA9IGlucHV0X21zZworICAgICAgICBzZWxmLmhhbmRsZXIud2ZpbGUgPSBvdXRwdXQKKyAgICAgICAgc2VsZi5oYW5kbGVyLmhhbmRsZV9vbmVfcmVxdWVzdCgpCisgICAgICAgIG91dHB1dC5zZWVrKDApCisgICAgICAgIHJldHVybiBvdXRwdXQucmVhZGxpbmVzKCkKKworICAgIGRlZiB2ZXJpZnlfZ2V0X2NhbGxlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaGFuZGxlci5nZXRfY2FsbGVkKQorCisgICAgZGVmIHZlcmlmeV9leHBlY3RlZF9oZWFkZXJzKHNlbGYsIGhlYWRlcnMpOgorICAgICAgICBmb3IgZmllbGROYW1lIGluICdTZXJ2ZXI6ICcsICdEYXRlOiAnLCAnQ29udGVudC1UeXBlOiAnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oaC5zdGFydHN3aXRoKGZpZWxkTmFtZSkgZm9yIGggaW4gaGVhZGVycyksIDEpCisKKyAgICBkZWYgdmVyaWZ5X2h0dHBfc2VydmVyX3Jlc3BvbnNlKHNlbGYsIHJlc3BvbnNlKToKKyAgICAgICAgbWF0Y2ggPSBzZWxmLkhUVFBSZXNwb25zZU1hdGNoLnNlYXJjaChyZXNwb25zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoIGlzIG5vdCBOb25lKQorCisgICAgZGVmIHRlc3RfaHR0cF8xXzEoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2VuZF90eXBpY2FsX3JlcXVlc3QoJ0dFVCAvIEhUVFAvMS4xXHJcblxyXG4nKQorICAgICAgICBzZWxmLnZlcmlmeV9odHRwX3NlcnZlcl9yZXNwb25zZShyZXN1bHRbMF0pCisgICAgICAgIHNlbGYudmVyaWZ5X2V4cGVjdGVkX2hlYWRlcnMocmVzdWx0WzE6LTFdKQorICAgICAgICBzZWxmLnZlcmlmeV9nZXRfY2FsbGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbLTFdLCAnPGh0bWw+PGJvZHk+RGF0YTwvYm9keT48L2h0bWw+XHJcbicpCisKKyAgICBkZWYgdGVzdF9odHRwXzFfMChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZW5kX3R5cGljYWxfcmVxdWVzdCgnR0VUIC8gSFRUUC8xLjBcclxuXHJcbicpCisgICAgICAgIHNlbGYudmVyaWZ5X2h0dHBfc2VydmVyX3Jlc3BvbnNlKHJlc3VsdFswXSkKKyAgICAgICAgc2VsZi52ZXJpZnlfZXhwZWN0ZWRfaGVhZGVycyhyZXN1bHRbMTotMV0pCisgICAgICAgIHNlbGYudmVyaWZ5X2dldF9jYWxsZWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstMV0sICc8aHRtbD48Ym9keT5EYXRhPC9ib2R5PjwvaHRtbD5cclxuJykKKworICAgIGRlZiB0ZXN0X2h0dHBfMF85KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KCdHRVQgLyBIVFRQLzAuOVxyXG5cclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbMF0sICc8aHRtbD48Ym9keT5EYXRhPC9ib2R5PjwvaHRtbD5cclxuJykKKyAgICAgICAgc2VsZi52ZXJpZnlfZ2V0X2NhbGxlZCgpCisKKyAgICBkZWYgdGVzdF93aXRoX2NvbnRpbnVlXzFfMChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZW5kX3R5cGljYWxfcmVxdWVzdCgnR0VUIC8gSFRUUC8xLjBcclxuRXhwZWN0OiAxMDAtY29udGludWVcclxuXHJcbicpCisgICAgICAgIHNlbGYudmVyaWZ5X2h0dHBfc2VydmVyX3Jlc3BvbnNlKHJlc3VsdFswXSkKKyAgICAgICAgc2VsZi52ZXJpZnlfZXhwZWN0ZWRfaGVhZGVycyhyZXN1bHRbMTotMV0pCisgICAgICAgIHNlbGYudmVyaWZ5X2dldF9jYWxsZWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstMV0sICc8aHRtbD48Ym9keT5EYXRhPC9ib2R5PjwvaHRtbD5cclxuJykKKworICAgIGRlZiB0ZXN0X3JlcXVlc3RfbGVuZ3RoKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMDcxNDogaHVnZSByZXF1ZXN0IGxpbmVzIGFyZSBkaXNjYXJkZWQsIHRvIGF2b2lkIERlbmlhbAorICAgICAgICAjIG9mIFNlcnZpY2UgYXR0YWNrcy4KKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZW5kX3R5cGljYWxfcmVxdWVzdChiJ0dFVCAnICsgYid4JyAqIDY1NTM3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFswXSwgYidIVFRQLzEuMSA0MTQgUmVxdWVzdC1VUkkgVG9vIExvbmdcclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmhhbmRsZXIuZ2V0X2NhbGxlZCkKKworCitjbGFzcyBCYXNlSFRUUFNlcnZlclRlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CisgICAgY2xhc3MgcmVxdWVzdF9oYW5kbGVyKE5vTG9nUmVxdWVzdEhhbmRsZXIsIEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIpOgorICAgICAgICBwcm90b2NvbF92ZXJzaW9uID0gJ0hUVFAvMS4xJworICAgICAgICBkZWZhdWx0X3JlcXVlc3RfdmVyc2lvbiA9ICdIVFRQLzEuMScKKworICAgICAgICBkZWYgZG9fVEVTVChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDQpCisgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sJykKKyAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKQorICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisKKyAgICAgICAgZGVmIGRvX0tFRVAoc2VsZik6CisgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjA0KQorICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpCisgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb25uZWN0aW9uJywgJ2tlZXAtYWxpdmUnKQorICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisKKyAgICAgICAgZGVmIGRvX0tFWUVSUk9SKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDk5OSkKKworICAgICAgICBkZWYgZG9fQ1VTVE9NKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDk5OSkKKyAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKQorICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29ubmVjdGlvbicsICdjbG9zZScpCisgICAgICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgQmFzZVRlc3RDYXNlLnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYuY29uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbignbG9jYWxob3N0Jywgc2VsZi5QT1JUKQorICAgICAgICBzZWxmLmNvbi5jb25uZWN0KCkKKworICAgIGRlZiB0ZXN0X2NvbW1hbmQoc2VsZik6CisgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ0dFVCcsICcvJykKKyAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDUwMSkKKworICAgIGRlZiB0ZXN0X3JlcXVlc3RfbGluZV90cmltbWluZyhzZWxmKToKKyAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuX3N0ciA9ICdIVFRQLzEuMVxuJworICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdHRVQnLCAnLycpCisgICAgICAgIHNlbGYuY29uLmVuZGhlYWRlcnMoKQorICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNTAxKQorCisgICAgZGVmIHRlc3RfdmVyc2lvbl9ib2d1cyhzZWxmKToKKyAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuX3N0ciA9ICdGVUJBUicKKyAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnR0VUJywgJy8nKQorICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKKyAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwMCkKKworICAgIGRlZiB0ZXN0X3ZlcnNpb25fZGlnaXRzKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5faHR0cF92c25fc3RyID0gJ0hUVFAvOS45LjknCisgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ0dFVCcsICcvJykKKyAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA0MDApCisKKyAgICBkZWYgdGVzdF92ZXJzaW9uX25vbmVfZ2V0KHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5faHR0cF92c25fc3RyID0gJycKKyAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnR0VUJywgJy8nKQorICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKKyAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDUwMSkKKworICAgIGRlZiB0ZXN0X3ZlcnNpb25fbm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuX3N0ciA9ICcnCisgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ1BVVCcsICcvJykKKyAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA0MDApCisKKyAgICBkZWYgdGVzdF92ZXJzaW9uX2ludmFsaWQoc2VsZik6CisgICAgICAgIHNlbGYuY29uLl9odHRwX3ZzbiA9IDk5CisgICAgICAgIHNlbGYuY29uLl9odHRwX3Zzbl9zdHIgPSAnSFRUUC85LjknCisgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ0dFVCcsICcvJykKKyAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA1MDUpCisKKyAgICBkZWYgdGVzdF9zZW5kX2JsYW5rKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5faHR0cF92c25fc3RyID0gJycKKyAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnJywgJycpCisgICAgICAgIHNlbGYuY29uLmVuZGhlYWRlcnMoKQorICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNDAwKQorCisgICAgZGVmIHRlc3RfaGVhZGVyX2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdHRVQnLCAnLycpCisgICAgICAgIHNlbGYuY29uLnB1dGhlYWRlcignQ29ubmVjdGlvbicsICdjbG9zZScpCisgICAgICAgIHNlbGYuY29uLmVuZGhlYWRlcnMoKQorICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgNTAxKQorCisgICAgZGVmIHRlc3RfaGVhZF9rZWVwX2FsaXZlKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5faHR0cF92c25fc3RyID0gJ0hUVFAvMS4xJworICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdHRVQnLCAnLycpCisgICAgICAgIHNlbGYuY29uLnB1dGhlYWRlcignQ29ubmVjdGlvbicsICdrZWVwLWFsaXZlJykKKyAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA1MDEpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVyKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdURVNUJywgJy8nKQorICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMjA0KQorCisgICAgZGVmIHRlc3RfcmV0dXJuX2hlYWRlcl9rZWVwX2FsaXZlKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdLRUVQJywgJy8nKQorICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLmdldGhlYWRlcignQ29ubmVjdGlvbicpLCAna2VlcC1hbGl2ZScpCisgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ1RFU1QnLCAnLycpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLmNvbi5jbG9zZSkKKworICAgIGRlZiB0ZXN0X2ludGVybmFsX2tleV9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnS0VZRVJST1InLCAnLycpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA5OTkpCisKKyAgICBkZWYgdGVzdF9yZXR1cm5fY3VzdG9tX3N0YXR1cyhzZWxmKToKKyAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnQ1VTVE9NJywgJy8nKQorICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgOTk5KQorCisKK2NsYXNzIFNpbXBsZUhUVFBTZXJ2ZXJUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgorICAgIGNsYXNzIHJlcXVlc3RfaGFuZGxlcihOb0xvZ1JlcXVlc3RIYW5kbGVyLCBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIEJhc2VUZXN0Q2FzZS5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLmN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGJhc2V0ZW1wZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCisgICAgICAgIG9zLmNoZGlyKGJhc2V0ZW1wZGlyKQorICAgICAgICBzZWxmLmRhdGEgPSAnV2UgYXJlIHRoZSBrbmlnaHRzIHdobyBzYXkgTmkhJworICAgICAgICBzZWxmLnRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj1iYXNldGVtcGRpcikKKyAgICAgICAgc2VsZi50ZW1wZGlyX25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYudGVtcGRpcikKKyAgICAgICAgdGVtcCA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3Rlc3QnKSwgJ3diJykKKyAgICAgICAgdGVtcC53cml0ZShzZWxmLmRhdGEpCisgICAgICAgIHRlbXAuY2xvc2UoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5jaGRpcihzZWxmLmN3ZCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudGVtcGRpcikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIEJhc2VUZXN0Q2FzZS50ZWFyRG93bihzZWxmKQorCisgICAgZGVmIGNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHNlbGYsIHJlc3BvbnNlLCBzdGF0dXMsIGRhdGE9Tm9uZSk6CisgICAgICAgIGJvZHkgPSByZXNwb25zZS5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BvbnNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1cywgc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZXNwb25zZS5yZWFzb24pCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGJvZHkpCisKKyAgICBkZWYgdGVzdF9nZXQoc2VsZik6CisgICAgICAgICNjb25zdHJ1Y3RzIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgSFRUUFNlcnZlcgorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSArICcvdGVzdCcpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDIwMCwgZGF0YT1zZWxmLmRhdGEpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHNlbGYudGVtcGRpcl9uYW1lICsgJy8nKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCAyMDApCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHNlbGYudGVtcGRpcl9uYW1lKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCAzMDEpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCcvVGhpc0RvZXNOb3RFeGlzdCcpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDQwNCkKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJy8nICsgJ1RoaXNEb2VzTm90RXhpc3QnICsgJy8nKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCA0MDQpCisgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXJfbmFtZSwgJ2luZGV4Lmh0bWwnKSwgJ3cnKQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdCgnLycgKyBzZWxmLnRlbXBkaXJfbmFtZSArICcvJykKKyAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgMjAwKQorCisgICAgICAgICMgY2htb2QoKSBkb2Vzbid0IHdvcmsgYXMgZXhwZWN0ZWQgb24gV2luZG93cywgYW5kIGZpbGVzeXN0ZW0KKyAgICAgICAgIyBwZXJtaXNzaW9ucyBhcmUgaWdub3JlZCBieSByb290IG9uIFVuaXguCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JyBhbmQgb3MuZ2V0ZXVpZCgpICE9IDA6CisgICAgICAgICAgICBvcy5jaG1vZChzZWxmLnRlbXBkaXIsIDApCisgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSArICcvJykKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDQwNCkKKyAgICAgICAgICAgIG9zLmNobW9kKHNlbGYudGVtcGRpciwgMDc1NSkKKworICAgIGRlZiB0ZXN0X2hlYWQoc2VsZik6CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KAorICAgICAgICAgICAgc2VsZi50ZW1wZGlyX25hbWUgKyAnL3Rlc3QnLCBtZXRob2Q9J0hFQUQnKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCAyMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2UuZ2V0aGVhZGVyKCdjb250ZW50LWxlbmd0aCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihsZW4oc2VsZi5kYXRhKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2UuZ2V0aGVhZGVyKCdjb250ZW50LXR5cGUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJykKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfcmVxdWVzdHMoc2VsZik6CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCcvJywgbWV0aG9kPSdGT08nKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCA1MDEpCisgICAgICAgICMgcmVxdWVzdHMgbXVzdCBiZSBjYXNlIHNlbnNpdGl2ZSxzbyB0aGlzIHNob3VsZCBmYWlsIHRvbworICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdCgnLycsIG1ldGhvZD0nZ2V0JykKKyAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgNTAxKQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdCgnLycsIG1ldGhvZD0nR0VUcycpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDUwMSkKKworCitjZ2lfZmlsZTEgPSAiIiJcCisjISVzCisKK3ByaW50ICJDb250ZW50LXR5cGU6IHRleHQvaHRtbCIKK3ByaW50CitwcmludCAiSGVsbG8gV29ybGQiCisiIiIKKworY2dpX2ZpbGUyID0gIiIiXAorIyElcworaW1wb3J0IGNnaQorCitwcmludCAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWwiCitwcmludAorCitmb3JtID0gY2dpLkZpZWxkU3RvcmFnZSgpCitwcmludCAiJSVzLCAlJXMsICUlcyIgJSUgKGZvcm0uZ2V0Zmlyc3QoInNwYW0iKSwgZm9ybS5nZXRmaXJzdCgiZWdncyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmdldGZpcnN0KCJiYWNvbiIpKQorIiIiCisKKworQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKG9zLCAnZ2V0ZXVpZCcpIGFuZCBvcy5nZXRldWlkKCkgPT0gMCwKKyAgICAgICAgIlRoaXMgdGVzdCBjYW4ndCBiZSBydW4gcmVsaWFibHkgYXMgcm9vdCAoaXNzdWUgIzEzMzA4KS4iKQorY2xhc3MgQ0dJSFRUUFNlcnZlclRlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CisgICAgY2xhc3MgcmVxdWVzdF9oYW5kbGVyKE5vTG9nUmVxdWVzdEhhbmRsZXIsIENHSUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgQmFzZVRlc3RDYXNlLnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYucGFyZW50X2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBzZWxmLmNnaV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5wYXJlbnRfZGlyLCAnY2dpLWJpbicpCisgICAgICAgIG9zLm1rZGlyKHNlbGYuY2dpX2RpcikKKworICAgICAgICAjIFRoZSBzaGViYW5nIGxpbmUgc2hvdWxkIGJlIHB1cmUgQVNDSUk6IHVzZSBzeW1saW5rIGlmIHBvc3NpYmxlLgorICAgICAgICAjIFNlZSBpc3N1ZSAjNzY2OC4KKyAgICAgICAgaWYgaGFzYXR0cihvcywgJ3N5bWxpbmsnKToKKyAgICAgICAgICAgIHNlbGYucHl0aG9uZXhlID0gb3MucGF0aC5qb2luKHNlbGYucGFyZW50X2RpciwgJ3B5dGhvbicpCisgICAgICAgICAgICBvcy5zeW1saW5rKHN5cy5leGVjdXRhYmxlLCBzZWxmLnB5dGhvbmV4ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucHl0aG9uZXhlID0gc3lzLmV4ZWN1dGFibGUKKworICAgICAgICBzZWxmLmZpbGUxX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5jZ2lfZGlyLCAnZmlsZTEucHknKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlMV9wYXRoLCAndycpIGFzIGZpbGUxOgorICAgICAgICAgICAgZmlsZTEud3JpdGUoY2dpX2ZpbGUxICUgc2VsZi5weXRob25leGUpCisgICAgICAgIG9zLmNobW9kKHNlbGYuZmlsZTFfcGF0aCwgMDc3NykKKworICAgICAgICBzZWxmLmZpbGUyX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5jZ2lfZGlyLCAnZmlsZTIucHknKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlMl9wYXRoLCAndycpIGFzIGZpbGUyOgorICAgICAgICAgICAgZmlsZTIud3JpdGUoY2dpX2ZpbGUyICUgc2VsZi5weXRob25leGUpCisgICAgICAgIG9zLmNobW9kKHNlbGYuZmlsZTJfcGF0aCwgMDc3NykKKworICAgICAgICBzZWxmLmN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHNlbGYucGFyZW50X2RpcikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuY2hkaXIoc2VsZi5jd2QpCisgICAgICAgICAgICBpZiBzZWxmLnB5dGhvbmV4ZSAhPSBzeXMuZXhlY3V0YWJsZToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5weXRob25leGUpCisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5maWxlMV9wYXRoKQorICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuZmlsZTJfcGF0aCkKKyAgICAgICAgICAgIG9zLnJtZGlyKHNlbGYuY2dpX2RpcikKKyAgICAgICAgICAgIG9zLnJtZGlyKHNlbGYucGFyZW50X2RpcikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIEJhc2VUZXN0Q2FzZS50ZWFyRG93bihzZWxmKQorCisgICAgZGVmIHRlc3RfdXJsX2NvbGxhcHNlX3BhdGgoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IHRhaWwgaXMgdGhlIGxhc3QgcG9ydGlvbiBhbmQgaGVhZCBpcyB0aGUgcmVzdCBvbiBwcm9wZXIgdXJscworICAgICAgICB0ZXN0X3ZlY3RvcnMgPSB7CisgICAgICAgICAgICAnJzogJy8vJywKKyAgICAgICAgICAgICcuLic6IEluZGV4RXJyb3IsCisgICAgICAgICAgICAnLy4vLy4uJzogSW5kZXhFcnJvciwKKyAgICAgICAgICAgICcvJzogJy8vJywKKyAgICAgICAgICAgICcvLyc6ICcvLycsCisgICAgICAgICAgICAnL1xcJzogJy8vXFwnLAorICAgICAgICAgICAgJy8uLy8nOiAnLy8nLAorICAgICAgICAgICAgJ2NnaS1iaW4vZmlsZTEucHknOiAnL2NnaS1iaW4vZmlsZTEucHknLAorICAgICAgICAgICAgJy9jZ2ktYmluL2ZpbGUxLnB5JzogJy9jZ2ktYmluL2ZpbGUxLnB5JywKKyAgICAgICAgICAgICdhJzogJy8vYScsCisgICAgICAgICAgICAnL2EnOiAnLy9hJywKKyAgICAgICAgICAgICcvL2EnOiAnLy9hJywKKyAgICAgICAgICAgICcuL2EnOiAnLy9hJywKKyAgICAgICAgICAgICcuL0M6Lyc6ICcvQzovJywKKyAgICAgICAgICAgICcvYS9iJzogJy9hL2InLAorICAgICAgICAgICAgJy9hL2IvJzogJy9hL2IvJywKKyAgICAgICAgICAgICcvYS9iLy4nOiAnL2EvYi8nLAorICAgICAgICAgICAgJy9hL2IvYy8uLic6ICcvYS9iLycsCisgICAgICAgICAgICAnL2EvYi9jLy4uL2QnOiAnL2EvYi9kJywKKyAgICAgICAgICAgICcvYS9iL2MvLi4vZC9lLy4uL2YnOiAnL2EvYi9kL2YnLAorICAgICAgICAgICAgJy9hL2IvYy8uLi9kL2UvLi4vLi4vZic6ICcvYS9iL2YnLAorICAgICAgICAgICAgJy9hL2IvYy8uLi9kL2UvLi4vLi8uLy4vLi4vL2YnOiAnL2EvYi9mJywKKyAgICAgICAgICAgICcuLi9hL2IvYy8uLi9kL2UvLi4vLi8uLy4vLi4vL2YnOiBJbmRleEVycm9yLAorICAgICAgICAgICAgJy9hL2IvYy8uLi9kL2UvLi4vLi4vLi4vZic6ICcvYS9mJywKKyAgICAgICAgICAgICcvYS9iL2MvLi4vZC9lLy4uLy4uLy4uLy4uL2YnOiAnLy9mJywKKyAgICAgICAgICAgICcvYS9iL2MvLi4vZC9lLy4uLy4uLy4uLy4uLy4uL2YnOiBJbmRleEVycm9yLAorICAgICAgICAgICAgJy9hL2IvYy8uLi9kL2UvLi4vLi4vLi4vLi4vZi8uLic6ICcvLycsCisgICAgICAgICAgICAnL2EvYi9jLy4uL2QvZS8uLi8uLi8uLi8uLi9mLy4uLy4nOiAnLy8nLAorICAgICAgICB9CisgICAgICAgIGZvciBwYXRoLCBleHBlY3RlZCBpbiB0ZXN0X3ZlY3RvcnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4cGVjdGVkLCB0eXBlKSBhbmQgaXNzdWJjbGFzcyhleHBlY3RlZCwgRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR0lIVFRQU2VydmVyLl91cmxfY29sbGFwc2VfcGF0aCwgcGF0aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWN0dWFsID0gQ0dJSFRUUFNlcnZlci5fdXJsX2NvbGxhcHNlX3BhdGgocGF0aCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBhY3R1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J3BhdGggPSAlclxuR290OiAgICAlclxuV2FudGVkOiAlcicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGgsIGFjdHVhbCwgZXhwZWN0ZWQpKQorCisgICAgZGVmIHRlc3RfaGVhZGVyc19hbmRfY29udGVudChzZWxmKToKKyAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCcvY2dpLWJpbi9maWxlMS5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCdIZWxsbyBXb3JsZFxuJywgJ3RleHQvaHRtbCcsIDIwMCksCisgICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQorCisgICAgZGVmIHRlc3RfcG9zdChzZWxmKToKKyAgICAgICAgcGFyYW1zID0gdXJsbGliLnVybGVuY29kZSh7J3NwYW0nIDogMSwgJ2VnZ3MnIDogJ3B5dGhvbicsICdiYWNvbicgOiAxMjM0NTZ9KQorICAgICAgICBoZWFkZXJzID0geydDb250ZW50LXR5cGUnIDogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCd9CisgICAgICAgIHJlcyA9IHNlbGYucmVxdWVzdCgnL2NnaS1iaW4vZmlsZTIucHknLCAnUE9TVCcsIHBhcmFtcywgaGVhZGVycykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5yZWFkKCksICcxLCBweXRob24sIDEyMzQ1NlxuJykKKworICAgIGRlZiB0ZXN0X2ludmFsaWR1cmkoc2VsZik6CisgICAgICAgIHJlcyA9IHNlbGYucmVxdWVzdCgnL2NnaS1iaW4vaW52YWxpZCcpCisgICAgICAgIHJlcy5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA0MDQpCisKKyAgICBkZWYgdGVzdF9hdXRob3JpemF0aW9uKHNlbGYpOgorICAgICAgICBoZWFkZXJzID0geydBdXRob3JpemF0aW9uJyA6ICdCYXNpYyAlcycgJQorICAgICAgICAgICAgICAgICAgIGJhc2U2NC5iNjRlbmNvZGUoJ3VzZXJuYW1lOnBhc3MnKX0KKyAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCcvY2dpLWJpbi9maWxlMS5weScsICdHRVQnLCBoZWFkZXJzPWhlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCdIZWxsbyBXb3JsZFxuJywgJ3RleHQvaHRtbCcsIDIwMCksCisgICAgICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSkKKworICAgIGRlZiB0ZXN0X25vX2xlYWRpbmdfc2xhc2goc2VsZik6CisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIyNTQKKyAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCdjZ2ktYmluL2ZpbGUxLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ0hlbGxvIFdvcmxkXG4nLCAndGV4dC9odG1sJywgMjAwKSwKKyAgICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQorCisgICAgZGVmIHRlc3Rfb3NfZW52aXJvbl9pc19ub3RfYWx0ZXJlZChzZWxmKToKKyAgICAgICAgc2lnbmF0dXJlID0gIlRlc3QgQ0dJIFNlcnZlciIKKyAgICAgICAgb3MuZW52aXJvblsnU0VSVkVSX1NPRlRXQVJFJ10gPSBzaWduYXR1cmUKKyAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCcvY2dpLWJpbi9maWxlMS5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGInSGVsbG8gV29ybGRcbicsICd0ZXh0L2h0bWwnLCAyMDApLAorICAgICAgICAgICAgICAgIChyZXMucmVhZCgpLCByZXMuZ2V0aGVhZGVyKCdDb250ZW50LXR5cGUnKSwgcmVzLnN0YXR1cykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZW52aXJvblsnU0VSVkVSX1NPRlRXQVJFJ10sIHNpZ25hdHVyZSkKKworCitjbGFzcyBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiIFRlc3QgdXJsIHBhcnNpbmcgIiIiCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRyYW5zbGF0ZWQgPSBvcy5nZXRjd2QoKQorICAgICAgICBzZWxmLnRyYW5zbGF0ZWQgPSBvcy5wYXRoLmpvaW4oc2VsZi50cmFuc2xhdGVkLCAnZmlsZW5hbWUnKQorICAgICAgICBzZWxmLmhhbmRsZXIgPSBTb2NrZXRsZXNzUmVxdWVzdEhhbmRsZXIoKQorCisgICAgZGVmIHRlc3RfcXVlcnlfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoKCcvZmlsZW5hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKKyAgICAgICAgcGF0aCA9IHNlbGYuaGFuZGxlci50cmFuc2xhdGVfcGF0aCgnL2ZpbGVuYW1lP2Zvbz1iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKKyAgICAgICAgcGF0aCA9IHNlbGYuaGFuZGxlci50cmFuc2xhdGVfcGF0aCgnL2ZpbGVuYW1lP2E9YiZzcGFtPWVnZ3Mjem90JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCisKKyAgICBkZWYgdGVzdF9zdGFydF93aXRoX2RvdWJsZV9zbGFzaChzZWxmKToKKyAgICAgICAgcGF0aCA9IHNlbGYuaGFuZGxlci50cmFuc2xhdGVfcGF0aCgnLy9maWxlbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgc2VsZi50cmFuc2xhdGVkKQorICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoKCcvL2ZpbGVuYW1lP2Zvbz1iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKKworCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdHJ5OgorICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KEJhc2VIVFRQUmVxdWVzdEhhbmRsZXJUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlSFRUUFNlcnZlclRlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbXBsZUhUVFBTZXJ2ZXJUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR0lIVFRQU2VydmVyVGVzdENhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jaGRpcihjd2QpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ltYWdlb3AucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9pbWFnZW9wLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2MzIwZmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9pbWFnZW9wLnB5CkBAIC0wLDAgKzEsMjExIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyIiIlRlc3Qgc2NyaXB0IGZvciB0aGUgaW1hZ2VvcCBtb2R1bGUuICBUaGlzIGhhcyB0aGUgc2lkZQorICAgZWZmZWN0IG9mIHBhcnRpYWxseSB0ZXN0aW5nIHRoZSBpbWdmaWxlIG1vZHVsZSBhcyB3ZWxsLgorICAgUm9nZXIgRS4gTWFzc2UKKyIiIgorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCB1bmxpbmssIGltcG9ydF9tb2R1bGUsIHJ1bl91bml0dGVzdAorCitpbWFnZW9wID0gaW1wb3J0X21vZHVsZSgnaW1hZ2VvcCcsIGRlcHJlY2F0ZWQ9VHJ1ZSkKK2ltcG9ydCB1dSwgb3MsIHVuaXR0ZXN0CisKKworU0laRVMgPSAoMSwgMiwgMywgNCkKK19WQUxVRVMgPSAoMSwgMiwgMioqMTAsIDIqKjE1LTEsIDIqKjE1LCAyKioxNSsxLCAyKiozMS0yLCAyKiozMS0xKQorVkFMVUVTID0gdHVwbGUoIC14IGZvciB4IGluIHJldmVyc2VkKF9WQUxVRVMpICkgKyAoMCwpICsgX1ZBTFVFUworQUFBQUEgPSAiQSIgKiAxMDI0CitNQVhfTEVOID0gMioqMjAKKworCitjbGFzcyBJbnB1dFZhbGlkYXRpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2NoZWNrKHNlbGYsIG5hbWUsIHNpemU9Tm9uZSwgKmV4dHJhKToKKyAgICAgICAgZnVuYyA9IGdldGF0dHIoaW1hZ2VvcCwgbmFtZSkKKyAgICAgICAgZm9yIGhlaWdodCBpbiBWQUxVRVM6CisgICAgICAgICAgICBmb3Igd2lkdGggaW4gVkFMVUVTOgorICAgICAgICAgICAgICAgIHN0cmxlbiA9IGFicyh3aWR0aCAqIGhlaWdodCkKKyAgICAgICAgICAgICAgICBpZiBzaXplOgorICAgICAgICAgICAgICAgICAgICBzdHJsZW4gKj0gc2l6ZQorICAgICAgICAgICAgICAgIGlmIHN0cmxlbiA8IE1BWF9MRU46CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAiQSIgKiBzdHJsZW4KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gQUFBQUEKKyAgICAgICAgICAgICAgICBpZiBzaXplOgorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMgPSAoZGF0YSwgc2l6ZSwgd2lkdGgsIGhlaWdodCkgKyBleHRyYQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyA9IChkYXRhLCB3aWR0aCwgaGVpZ2h0KSArIGV4dHJhCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmdW5jKCphcmd1bWVudHMpCisgICAgICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBpbWFnZW9wLmVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIGNoZWNrX3NpemUoc2VsZiwgbmFtZSwgKmV4dHJhKToKKyAgICAgICAgZm9yIHNpemUgaW4gU0laRVM6CisgICAgICAgICAgICBzZWxmLl9jaGVjayhuYW1lLCBzaXplLCAqZXh0cmEpCisKKyAgICBkZWYgY2hlY2soc2VsZiwgbmFtZSwgKmV4dHJhKToKKyAgICAgICAgc2VsZi5fY2hlY2sobmFtZSwgTm9uZSwgKmV4dHJhKQorCisgICAgZGVmIHRlc3RfaW5wdXRfdmFsaWRhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zaXplKCJjcm9wIiwgMCwgMCwgMCwgMCkKKyAgICAgICAgc2VsZi5jaGVja19zaXplKCJzY2FsZSIsIDEsIDApCisgICAgICAgIHNlbGYuY2hlY2tfc2l6ZSgic2NhbGUiLCAtMSwgLTEpCisgICAgICAgIHNlbGYuY2hlY2tfc2l6ZSgidG92aWRlbyIpCisgICAgICAgIHNlbGYuY2hlY2soImdyZXkybW9ubyIsIDEyOCkKKyAgICAgICAgc2VsZi5jaGVjaygiZ3JleTJncmV5NCIpCisgICAgICAgIHNlbGYuY2hlY2soImdyZXkyZ3JleTIiKQorICAgICAgICBzZWxmLmNoZWNrKCJkaXRoZXIybW9ubyIpCisgICAgICAgIHNlbGYuY2hlY2soImRpdGhlcjJncmV5MiIpCisgICAgICAgIHNlbGYuY2hlY2soIm1vbm8yZ3JleSIsIDAsIDApCisgICAgICAgIHNlbGYuY2hlY2soImdyZXkyMmdyZXkiKQorICAgICAgICBzZWxmLmNoZWNrKCJyZ2IycmdiOCIpICMgbmxlbio0ID09IGxlbgorICAgICAgICBzZWxmLmNoZWNrKCJyZ2I4MnJnYiIpCisgICAgICAgIHNlbGYuY2hlY2soInJnYjJncmV5IikKKyAgICAgICAgc2VsZi5jaGVjaygiZ3JleTJyZ2IiKQorCisKK2RlZiB0ZXN0X21haW4oKToKKworICAgIHJ1bl91bml0dGVzdChJbnB1dFZhbGlkYXRpb25UZXN0cykKKworICAgIHRyeToKKyAgICAgICAgaW1wb3J0IGltZ2ZpbGUKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHJldHVybgorCisgICAgIyBDcmVhdGUgYmluYXJ5IHRlc3QgZmlsZXMKKyAgICB1dS5kZWNvZGUoZ2V0X3F1YWxpZmllZF9wYXRoKCd0ZXN0cmdiJytvcy5leHRzZXArJ3V1ZScpLCAndGVzdCcrb3MuZXh0c2VwKydyZ2InKQorCisgICAgaW1hZ2UsIHdpZHRoLCBoZWlnaHQgPSBnZXRpbWFnZSgndGVzdCcrb3MuZXh0c2VwKydyZ2InKQorCisgICAgIyBSZXR1cm4gdGhlIHNlbGVjdGVkIHBhcnQgb2YgaW1hZ2UsIHdoaWNoIHNob3VsZCBieSB3aWR0aCBieSBoZWlnaHQKKyAgICAjIGluIHNpemUgYW5kIGNvbnNpc3Qgb2YgcGl4ZWxzIG9mIHBzaXplIGJ5dGVzLgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdjcm9wJworICAgIG5ld2ltYWdlID0gaW1hZ2VvcC5jcm9wIChpbWFnZSwgNCwgd2lkdGgsIGhlaWdodCwgMCwgMCwgMSwgMSkKKworICAgICMgUmV0dXJuIGltYWdlIHNjYWxlZCB0byBzaXplIG5ld3dpZHRoIGJ5IG5ld2hlaWdodC4gTm8gaW50ZXJwb2xhdGlvbgorICAgICMgaXMgZG9uZSwgc2NhbGluZyBpcyBkb25lIGJ5IHNpbXBsZS1taW5kZWQgcGl4ZWwgZHVwbGljYXRpb24gb3IgcmVtb3ZhbC4KKyAgICAjIFRoZXJlZm9yZSwgY29tcHV0ZXItZ2VuZXJhdGVkIGltYWdlcyBvciBkaXRoZXJlZCBpbWFnZXMgd2lsbAorICAgICMgbm90IGxvb2sgbmljZSBhZnRlciBzY2FsaW5nLgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdzY2FsZScKKyAgICBzY2FsZWltYWdlID0gaW1hZ2VvcC5zY2FsZShpbWFnZSwgNCwgd2lkdGgsIGhlaWdodCwgMSwgMSkKKworICAgICMgUnVuIGEgdmVydGljYWwgbG93LXBhc3MgZmlsdGVyIG92ZXIgYW4gaW1hZ2UuIEl0IGRvZXMgc28gYnkgY29tcHV0aW5nCisgICAgIyBlYWNoIGRlc3RpbmF0aW9uIHBpeGVsIGFzIHRoZSBhdmVyYWdlIG9mIHR3byB2ZXJ0aWNhbGx5LWFsaWduZWQgc291cmNlCisgICAgIyBwaXhlbHMuIFRoZSBtYWluIHVzZSBvZiB0aGlzIHJvdXRpbmUgaXMgdG8gZm9yZXN0YWxsIGV4Y2Vzc2l2ZSBmbGlja2VyCisgICAgIyBpZiB0aGUgaW1hZ2UgdHdvIHZlcnRpY2FsbHktYWxpZ25lZCBzb3VyY2UgcGl4ZWxzLCAgaGVuY2UgdGhlIG5hbWUuCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ3RvdmlkZW8nCisgICAgdmlkZW9pbWFnZSA9IGltYWdlb3AudG92aWRlbyAoaW1hZ2UsIDQsIHdpZHRoLCBoZWlnaHQpCisKKyAgICAjIENvbnZlcnQgYW4gcmdiIGltYWdlIHRvIGFuIDggYml0IHJnYgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdyZ2IycmdiOCcKKyAgICBncmV5aW1hZ2UgPSBpbWFnZW9wLnJnYjJyZ2I4KGltYWdlLCB3aWR0aCwgaGVpZ2h0KQorCisgICAgIyBDb252ZXJ0IGFuIDggYml0IHJnYiBpbWFnZSB0byBhIDI0IGJpdCByZ2IgaW1hZ2UKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAncmdiODJyZ2InCisgICAgaW1hZ2UgPSBpbWFnZW9wLnJnYjgycmdiKGdyZXlpbWFnZSwgd2lkdGgsIGhlaWdodCkKKworICAgICMgQ29udmVydCBhbiByZ2IgaW1hZ2UgdG8gYW4gOCBiaXQgZ3JleXNjYWxlIGltYWdlCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ3JnYjJncmV5JworICAgIGdyZXlpbWFnZSA9IGltYWdlb3AucmdiMmdyZXkoaW1hZ2UsIHdpZHRoLCBoZWlnaHQpCisKKyAgICAjIENvbnZlcnQgYW4gOCBiaXQgZ3JleXNjYWxlIGltYWdlIHRvIGEgMjQgYml0IHJnYiBpbWFnZQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdncmV5MnJnYicKKyAgICBpbWFnZSA9IGltYWdlb3AuZ3JleTJyZ2IoZ3JleWltYWdlLCB3aWR0aCwgaGVpZ2h0KQorCisgICAgIyBDb252ZXJ0IGEgOC1iaXQgZGVlcCBncmV5c2NhbGUgaW1hZ2UgdG8gYSAxLWJpdCBkZWVwIGltYWdlIGJ5CisgICAgIyB0aHJlc2hvbGRpbmcgYWxsIHRoZSBwaXhlbHMuIFRoZSByZXN1bHRpbmcgaW1hZ2UgaXMgdGlnaHRseSBwYWNrZWQKKyAgICAjIGFuZCBpcyBwcm9iYWJseSBvbmx5IHVzZWZ1bCBhcyBhbiBhcmd1bWVudCB0byBtb25vMmdyZXkuCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ2dyZXkybW9ubycKKyAgICBtb25vaW1hZ2UgPSBpbWFnZW9wLmdyZXkybW9ubyAoZ3JleWltYWdlLCB3aWR0aCwgaGVpZ2h0LCAwKQorCisgICAgIyBtb25vaW1hZ2UsIHdpZHRoLCBoZWlnaHQgPSBnZXRpbWFnZSgnbW9ub3Rlc3QucmdiJykKKyAgICAjIENvbnZlcnQgYSAxLWJpdCBtb25vY2hyb21lIGltYWdlIHRvIGFuIDggYml0IGdyZXlzY2FsZSBvciBjb2xvciBpbWFnZS4KKyAgICAjIEFsbCBwaXhlbHMgdGhhdCBhcmUgemVyby12YWx1ZWQgb24gaW5wdXQgZ2V0IHZhbHVlIHAwIG9uIG91dHB1dCBhbmQKKyAgICAjIGFsbCBvbmUtdmFsdWUgaW5wdXQgcGl4ZWxzIGdldCB2YWx1ZSBwMSBvbiBvdXRwdXQuIFRvIGNvbnZlcnQgYQorICAgICMgbW9ub2Nocm9tZSAgYmxhY2stYW5kLXdoaXRlIGltYWdlIHRvIGdyZXlzY2FsZSBwYXNzIHRoZSB2YWx1ZXMgMCBhbmQKKyAgICAjIDI1NSByZXNwZWN0aXZlbHkuCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ21vbm8yZ3JleScKKyAgICBncmV5aW1hZ2UgPSBpbWFnZW9wLm1vbm8yZ3JleSAobW9ub2ltYWdlLCB3aWR0aCwgaGVpZ2h0LCAwLCAyNTUpCisKKyAgICAjIENvbnZlcnQgYW4gOC1iaXQgZ3JleXNjYWxlIGltYWdlIHRvIGEgMS1iaXQgbW9ub2Nocm9tZSBpbWFnZSB1c2luZyBhCisgICAgIyAoc2ltcGxlLW1pbmRlZCkgZGl0aGVyaW5nIGFsZ29yaXRobS4KKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnZGl0aGVyMm1vbm8nCisgICAgbW9ub2ltYWdlID0gaW1hZ2VvcC5kaXRoZXIybW9ubyAoZ3JleWltYWdlLCB3aWR0aCwgaGVpZ2h0KQorCisgICAgIyBDb252ZXJ0IGFuIDgtYml0IGdyZXlzY2FsZSBpbWFnZSB0byBhIDQtYml0IGdyZXlzY2FsZSBpbWFnZSB3aXRob3V0CisgICAgIyBkaXRoZXJpbmcuCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ2dyZXkyZ3JleTQnCisgICAgZ3JleTRpbWFnZSA9IGltYWdlb3AuZ3JleTJncmV5NCAoZ3JleWltYWdlLCB3aWR0aCwgaGVpZ2h0KQorCisgICAgIyBDb252ZXJ0IGFuIDgtYml0IGdyZXlzY2FsZSBpbWFnZSB0byBhIDItYml0IGdyZXlzY2FsZSBpbWFnZSB3aXRob3V0CisgICAgIyBkaXRoZXJpbmcuCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ2dyZXkyZ3JleTInCisgICAgZ3JleTJpbWFnZSA9IGltYWdlb3AuZ3JleTJncmV5MiAoZ3JleWltYWdlLCB3aWR0aCwgaGVpZ2h0KQorCisgICAgIyBDb252ZXJ0IGFuIDgtYml0IGdyZXlzY2FsZSBpbWFnZSB0byBhIDItYml0IGdyZXlzY2FsZSBpbWFnZSB3aXRoCisgICAgIyBkaXRoZXJpbmcuIEFzIGZvciBkaXRoZXIybW9ubywgdGhlIGRpdGhlcmluZyBhbGdvcml0aG0gaXMgY3VycmVudGx5CisgICAgIyB2ZXJ5IHNpbXBsZS4KKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnZGl0aGVyMmdyZXkyJworICAgIGdyZXkyaW1hZ2UgPSBpbWFnZW9wLmRpdGhlcjJncmV5MiAoZ3JleWltYWdlLCB3aWR0aCwgaGVpZ2h0KQorCisgICAgIyBDb252ZXJ0IGEgNC1iaXQgZ3JleXNjYWxlIGltYWdlIHRvIGFuIDgtYml0IGdyZXlzY2FsZSBpbWFnZS4KKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnZ3JleTQyZ3JleScKKyAgICBncmV5aW1hZ2UgPSBpbWFnZW9wLmdyZXk0MmdyZXkgKGdyZXk0aW1hZ2UsIHdpZHRoLCBoZWlnaHQpCisKKyAgICAjIENvbnZlcnQgYSAyLWJpdCBncmV5c2NhbGUgaW1hZ2UgdG8gYW4gOC1iaXQgZ3JleXNjYWxlIGltYWdlLgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdncmV5MjJncmV5JworICAgIGltYWdlID0gaW1hZ2VvcC5ncmV5MjJncmV5IChncmV5MmltYWdlLCB3aWR0aCwgaGVpZ2h0KQorCisgICAgIyBDbGVhbnVwCisgICAgdW5saW5rKCd0ZXN0Jytvcy5leHRzZXArJ3JnYicpCisKK2RlZiBnZXRpbWFnZShuYW1lKToKKyAgICAiIiJyZXR1cm4gYSB0dXBsZSBjb25zaXN0aW5nIG9mCisgICAgICAgaW1hZ2UgKGluICdpbWdmaWxlJyBmb3JtYXQpIHdpZHRoIGFuZCBoZWlnaHQKKyAgICAiIiIKKyAgICBpbXBvcnQgaW1nZmlsZQorICAgIHRyeToKKyAgICAgICAgc2l6ZXMgPSBpbWdmaWxlLmdldHNpemVzKG5hbWUpCisgICAgZXhjZXB0IGltZ2ZpbGUuZXJyb3I6CisgICAgICAgIG5hbWUgPSBnZXRfcXVhbGlmaWVkX3BhdGgobmFtZSkKKyAgICAgICAgc2l6ZXMgPSBpbWdmaWxlLmdldHNpemVzKG5hbWUpCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ2ltZ2ZpbGUgb3BlbmluZyB0ZXN0IGltYWdlOiAlcywgc2l6ZXM6ICVzJyAlIChuYW1lLCBzdHIoc2l6ZXMpKQorCisgICAgaW1hZ2UgPSBpbWdmaWxlLnJlYWQobmFtZSkKKyAgICByZXR1cm4gKGltYWdlLCBzaXplc1swXSwgc2l6ZXNbMV0pCisKK2RlZiBnZXRfcXVhbGlmaWVkX3BhdGgobmFtZSk6CisgICAgIiIiIHJldHVybiBhIG1vcmUgcXVhbGlmaWVkIHBhdGggdG8gbmFtZSIiIgorICAgIGltcG9ydCBzeXMKKyAgICBpbXBvcnQgb3MKKyAgICBwYXRoID0gc3lzLnBhdGgKKyAgICB0cnk6CisgICAgICAgIHBhdGggPSBbb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKV0gKyBwYXRoCisgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGZvciBkaXIgaW4gcGF0aDoKKyAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyLCBuYW1lKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmdWxsbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gZnVsbG5hbWUKKyAgICByZXR1cm4gbmFtZQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9pbWFwbGliLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaW1hcGxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjIyMTNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaW1hcGxpYi5weQpAQCAtMCwwICsxLDI0MCBAQAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAorIyBJZiB3ZSBlbmQgdXAgd2l0aCBhIHNpZ25pZmljYW50IG51bWJlciBvZiB0ZXN0cyB0aGF0IGRvbid0IHJlcXVpcmUKKyMgdGhyZWFkaW5nLCB0aGlzIHRlc3QgbW9kdWxlIHNob3VsZCBiZSBzcGxpdC4gIFJpZ2h0IG5vdyB3ZSBza2lwCisjIHRoZW0gYWxsIGlmIHdlIGRvbid0IGhhdmUgdGhyZWFkaW5nLgordGhyZWFkaW5nID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQorCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCitpbXBvcnQgaW1hcGxpYgoraW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBTb2NrZXRTZXJ2ZXIKK2ltcG9ydCB0aW1lCisKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCByZWFwX3RocmVhZHMsIHZlcmJvc2UsIHRyYW5zaWVudF9pbnRlcm5ldAoraW1wb3J0IHVuaXR0ZXN0CisKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQorCitDRVJURklMRSA9IE5vbmUKKworCitjbGFzcyBUZXN0SW1hcGxpYih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90aGF0X1RpbWUySW50ZXJuYWxkYXRlX3JldHVybnNfYV9yZXN1bHQoc2VsZik6CisgICAgICAgICMgV2UgY2FuIGNoZWNrIG9ubHkgdGhhdCBpdCBzdWNjZXNzZnVsbHkgcHJvZHVjZXMgYSByZXN1bHQsCisgICAgICAgICMgbm90IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgcmVzdWx0IGl0c2VsZiwgc2luY2UgdGhlIHJlc3VsdAorICAgICAgICAjIGRlcGVuZHMgb24gdGhlIHRpbWV6b25lIHRoZSBtYWNoaW5lIGlzIGluLgorICAgICAgICB0aW1ldmFsdWVzID0gWzIwMDAwMDAwMDAsIDIwMDAwMDAwMDAuMCwgdGltZS5sb2NhbHRpbWUoMjAwMDAwMDAwMCksCisgICAgICAgICAgICAgICAgICAgICAgJyIxOC1NYXktMjAzMyAwNTozMzoyMCArMDIwMCInXQorCisgICAgICAgIGZvciB0IGluIHRpbWV2YWx1ZXM6CisgICAgICAgICAgICBpbWFwbGliLlRpbWUySW50ZXJuYWxkYXRlKHQpCisKKworaWYgc3NsOgorCisgICAgY2xhc3MgU2VjdXJlVENQU2VydmVyKFNvY2tldFNlcnZlci5UQ1BTZXJ2ZXIpOgorCisgICAgICAgIGRlZiBnZXRfcmVxdWVzdChzZWxmKToKKyAgICAgICAgICAgIG5ld3NvY2tldCwgZnJvbWFkZHIgPSBzZWxmLnNvY2tldC5hY2NlcHQoKQorICAgICAgICAgICAgY29ubnN0cmVhbSA9IHNzbC53cmFwX3NvY2tldChuZXdzb2NrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFKQorICAgICAgICAgICAgcmV0dXJuIGNvbm5zdHJlYW0sIGZyb21hZGRyCisKKyAgICBJTUFQNF9TU0wgPSBpbWFwbGliLklNQVA0X1NTTAorCitlbHNlOgorCisgICAgY2xhc3MgU2VjdXJlVENQU2VydmVyOgorICAgICAgICBwYXNzCisKKyAgICBJTUFQNF9TU0wgPSBOb25lCisKKworY2xhc3MgU2ltcGxlSU1BUEhhbmRsZXIoU29ja2V0U2VydmVyLlN0cmVhbVJlcXVlc3RIYW5kbGVyKToKKworICAgIHRpbWVvdXQgPSAxCisKKyAgICBkZWYgX3NlbmQoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJTRU5UOiIsIG1lc3NhZ2Uuc3RyaXAoKQorICAgICAgICBzZWxmLndmaWxlLndyaXRlKG1lc3NhZ2UpCisKKyAgICBkZWYgaGFuZGxlKHNlbGYpOgorICAgICAgICAjIFNlbmQgYSB3ZWxjb21lIG1lc3NhZ2UuCisgICAgICAgIHNlbGYuX3NlbmQoJyogT0sgSU1BUDRyZXYxXHJcbicpCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAjIEdhdGhlciB1cCBpbnB1dCB1bnRpbCB3ZSByZWNlaXZlIGEgbGluZSB0ZXJtaW5hdG9yIG9yIHdlIHRpbWVvdXQuCisgICAgICAgICAgICAjIEFjY3VtdWxhdGUgcmVhZCgxKSBiZWNhdXNlIGl0J3Mgc2ltcGxlciB0byBoYW5kbGUgdGhlIGRpZmZlcmVuY2VzCisgICAgICAgICAgICAjIGJldHdlZW4gbmFrZWQgc29ja2V0cyBhbmQgU1NMIHNvY2tldHMuCisgICAgICAgICAgICBsaW5lID0gJycKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gc2VsZi5yZmlsZS5yZWFkKDEpCisgICAgICAgICAgICAgICAgICAgIGlmIHBhcnQgPT0gJyc6CisgICAgICAgICAgICAgICAgICAgICAgICAjIE5ha2VkIHNvY2tldHMgcmV0dXJuIGVtcHR5IHN0cmluZ3MuLgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgIGxpbmUgKz0gcGFydAorICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAjIC4uYnV0IFNTTFNvY2tldHMgcmFpc2UgZXhjZXB0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgaWYgbGluZS5lbmRzd2l0aCgnXHJcbicpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAnR09UOicsIGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICB0YWcgPSBzcGxpdGxpbmVbMF0KKyAgICAgICAgICAgIGNtZCA9IHNwbGl0bGluZVsxXQorICAgICAgICAgICAgYXJncyA9IHNwbGl0bGluZVsyOl0KKworICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnY21kXyVzJyAlIChjbWQsKSk6CisgICAgICAgICAgICAgICAgZ2V0YXR0cihzZWxmLCAnY21kXyVzJyAlIChjbWQsKSkodGFnLCBhcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zZW5kKCclcyBCQUQgJXMgdW5rbm93blxyXG4nICUgKHRhZywgY21kKSkKKworICAgIGRlZiBjbWRfQ0FQQUJJTElUWShzZWxmLCB0YWcsIGFyZ3MpOgorICAgICAgICBzZWxmLl9zZW5kKCcqIENBUEFCSUxJVFkgSU1BUDRyZXYxXHJcbicpCisgICAgICAgIHNlbGYuX3NlbmQoJyVzIE9LIENBUEFCSUxJVFkgY29tcGxldGVkXHJcbicgJSAodGFnLCkpCisKKworY2xhc3MgQmFzZVRocmVhZGVkTmV0d29ya2VkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIG1ha2Vfc2VydmVyKHNlbGYsIGFkZHIsIGhkbHIpOgorCisgICAgICAgIGNsYXNzIE15U2VydmVyKHNlbGYuc2VydmVyX2NsYXNzKToKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VfcmVxdWVzdChyZXF1ZXN0KQorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX2Nsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJjcmVhdGluZyBzZXJ2ZXIiCisgICAgICAgIHNlcnZlciA9IE15U2VydmVyKGFkZHIsIGhkbHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCBzZXJ2ZXIuc29ja2V0LmdldHNvY2tuYW1lKCkpCisKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJzZXJ2ZXIgY3JlYXRlZCIKKyAgICAgICAgICAgIHByaW50ICJBRERSID0iLCBhZGRyCisgICAgICAgICAgICBwcmludCAiQ0xBU1MgPSIsIHNlbGYuc2VydmVyX2NsYXNzCisgICAgICAgICAgICBwcmludCAiSERMUiA9Iiwgc2VydmVyLlJlcXVlc3RIYW5kbGVyQ2xhc3MKKworICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCgKKyAgICAgICAgICAgIG5hbWU9JyVzIHNlcnZpbmcnICUgc2VsZi5zZXJ2ZXJfY2xhc3MsCisgICAgICAgICAgICB0YXJnZXQ9c2VydmVyLnNlcnZlX2ZvcmV2ZXIsCisgICAgICAgICAgICAjIFNob3J0IHBvbGwgaW50ZXJ2YWwgdG8gbWFrZSB0aGUgdGVzdCBmaW5pc2ggcXVpY2tseS4KKyAgICAgICAgICAgICMgVGltZSBiZXR3ZWVuIHJlcXVlc3RzIGlzIHNob3J0IGVub3VnaCB0aGF0IHdlIHdvbid0IHdha2UKKyAgICAgICAgICAgICMgdXAgc3B1cmlvdXNseSB0b28gbWFueSB0aW1lcy4KKyAgICAgICAgICAgIGt3YXJncz17J3BvbGxfaW50ZXJ2YWwnOjAuMDF9KQorICAgICAgICB0LmRhZW1vbiA9IFRydWUgICMgSW4gY2FzZSB0aGlzIGZ1bmN0aW9uIHJhaXNlcy4KKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJzZXJ2ZXIgcnVubmluZyIKKyAgICAgICAgcmV0dXJuIHNlcnZlciwgdAorCisgICAgZGVmIHJlYXBfc2VydmVyKHNlbGYsIHNlcnZlciwgdGhyZWFkKToKKyAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIndhaXRpbmcgZm9yIHNlcnZlciIKKyAgICAgICAgc2VydmVyLnNodXRkb3duKCkKKyAgICAgICAgdGhyZWFkLmpvaW4oKQorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiZG9uZSIKKworICAgIEBjb250ZXh0bWFuYWdlcgorICAgIGRlZiByZWFwZWRfc2VydmVyKHNlbGYsIGhkbHIpOgorICAgICAgICBzZXJ2ZXIsIHRocmVhZCA9IHNlbGYubWFrZV9zZXJ2ZXIoKHN1cHBvcnQuSE9TVCwgMCksIGhkbHIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIHNlcnZlcgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5yZWFwX3NlcnZlcihzZXJ2ZXIsIHRocmVhZCkKKworICAgIEByZWFwX3RocmVhZHMKKyAgICBkZWYgdGVzdF9jb25uZWN0KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYucmVhcGVkX3NlcnZlcihTaW1wbGVJTUFQSGFuZGxlcikgYXMgc2VydmVyOgorICAgICAgICAgICAgY2xpZW50ID0gc2VsZi5pbWFwX2NsYXNzKCpzZXJ2ZXIuc2VydmVyX2FkZHJlc3MpCisgICAgICAgICAgICBjbGllbnQuc2h1dGRvd24oKQorCisgICAgQHJlYXBfdGhyZWFkcworICAgIGRlZiB0ZXN0X2lzc3VlNTk0OShzZWxmKToKKworICAgICAgICBjbGFzcyBFT0ZIYW5kbGVyKFNvY2tldFNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlcik6CisgICAgICAgICAgICBkZWYgaGFuZGxlKHNlbGYpOgorICAgICAgICAgICAgICAgICMgRU9GIHdpdGhvdXQgc2VuZGluZyBhIGNvbXBsZXRlIHdlbGNvbWUgbWVzc2FnZS4KKyAgICAgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKCcqIE9LJykKKworICAgICAgICB3aXRoIHNlbGYucmVhcGVkX3NlcnZlcihFT0ZIYW5kbGVyKSBhcyBzZXJ2ZXI6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhpbWFwbGliLklNQVA0LmFib3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWFwX2NsYXNzLCAqc2VydmVyLnNlcnZlcl9hZGRyZXNzKQorCisKK2NsYXNzIFRocmVhZGVkTmV0d29ya2VkVGVzdHMoQmFzZVRocmVhZGVkTmV0d29ya2VkVGVzdHMpOgorCisgICAgc2VydmVyX2NsYXNzID0gU29ja2V0U2VydmVyLlRDUFNlcnZlcgorICAgIGltYXBfY2xhc3MgPSBpbWFwbGliLklNQVA0CisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3NsLCAiU1NMIG5vdCBhdmFpbGFibGUiKQorY2xhc3MgVGhyZWFkZWROZXR3b3JrZWRUZXN0c1NTTChCYXNlVGhyZWFkZWROZXR3b3JrZWRUZXN0cyk6CisKKyAgICBzZXJ2ZXJfY2xhc3MgPSBTZWN1cmVUQ1BTZXJ2ZXIKKyAgICBpbWFwX2NsYXNzID0gSU1BUDRfU1NMCisKKworY2xhc3MgUmVtb3RlSU1BUFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGhvc3QgPSAnY3lydXMuYW5kcmV3LmNtdS5lZHUnCisgICAgcG9ydCA9IDE0MworICAgIHVzZXJuYW1lID0gJ2Fub255bW91cycKKyAgICBwYXNzd29yZCA9ICdwYXNzJworICAgIGltYXBfY2xhc3MgPSBpbWFwbGliLklNQVA0CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHdpdGggdHJhbnNpZW50X2ludGVybmV0KHNlbGYuaG9zdCk6CisgICAgICAgICAgICBzZWxmLnNlcnZlciA9IHNlbGYuaW1hcF9jbGFzcyhzZWxmLmhvc3QsIHNlbGYucG9ydCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5sb2dvdXQoKQorCisgICAgZGVmIHRlc3RfbG9naW5jYXBhKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0xPR0lORElTQUJMRUQnIGluIHNlbGYuc2VydmVyLmNhcGFiaWxpdGllcykKKworICAgIGRlZiB0ZXN0X2Fub25sb2dpbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdBVVRIPUFOT05ZTU9VUycgaW4gc2VsZi5zZXJ2ZXIuY2FwYWJpbGl0aWVzKQorICAgICAgICBycyA9IHNlbGYuc2VydmVyLmxvZ2luKHNlbGYudXNlcm5hbWUsIHNlbGYucGFzc3dvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnNbMF0sICdPSycpCisKKyAgICBkZWYgdGVzdF9sb2dvdXQoc2VsZik6CisgICAgICAgIHJzID0gc2VsZi5zZXJ2ZXIubG9nb3V0KCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnNbMF0sICdCWUUnKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHNzbCwgIlNTTCBub3QgYXZhaWxhYmxlIikKK2NsYXNzIFJlbW90ZUlNQVBfU1NMVGVzdChSZW1vdGVJTUFQVGVzdCk6CisgICAgcG9ydCA9IDk5MworICAgIGltYXBfY2xhc3MgPSBJTUFQNF9TU0wKKworICAgIGRlZiB0ZXN0X2xvZ2luY2FwYShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnTE9HSU5ESVNBQkxFRCcgaW4gc2VsZi5zZXJ2ZXIuY2FwYWJpbGl0aWVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0FVVEg9UExBSU4nIGluIHNlbGYuc2VydmVyLmNhcGFiaWxpdGllcykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdHMgPSBbVGVzdEltYXBsaWJdCisKKyAgICBpZiBzdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoJ25ldHdvcmsnKToKKyAgICAgICAgaWYgc3NsOgorICAgICAgICAgICAgZ2xvYmFsIENFUlRGSUxFCisgICAgICAgICAgICBDRVJURklMRSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXljZXJ0LnBlbSIpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoQ0VSVEZJTEUpOgorICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgiQ2FuJ3QgcmVhZCBjZXJ0aWZpY2F0ZSBmaWxlcyEiKQorICAgICAgICB0ZXN0cy5leHRlbmQoWworICAgICAgICAgICAgVGhyZWFkZWROZXR3b3JrZWRUZXN0cywgVGhyZWFkZWROZXR3b3JrZWRUZXN0c1NTTCwKKyAgICAgICAgICAgIFJlbW90ZUlNQVBUZXN0LCBSZW1vdGVJTUFQX1NTTFRlc3QsCisgICAgICAgIF0pCisKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ25ldHdvcmsnXQorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9pbWdmaWxlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaW1nZmlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOWU4OTE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaW1nZmlsZS5weQpAQCAtMCwwICsxLDExOSBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorCisiIiJTaW1wbGUgdGVzdCBzY3JpcHQgZm9yIGltZ2ZpbGUuYworICAgUm9nZXIgRS4gTWFzc2UKKyIiIgorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCB1bmxpbmssIGZpbmRmaWxlLCBpbXBvcnRfbW9kdWxlCisKK2ltZ2ZpbGUgPSBpbXBvcnRfbW9kdWxlKCdpbWdmaWxlJywgZGVwcmVjYXRlZD1UcnVlKQoraW1wb3J0IHV1CisKKworZGVmIHRlc3RpbWFnZShuYW1lKToKKyAgICAiIiJSdW4gdGhyb3VnaCB0aGUgaW1nZmlsZSdzIGJhdHRlcnkgb2YgcG9zc2libGUgbWV0aG9kcworICAgICAgIG9uIHRoZSBpbWFnZSBwYXNzZWQgaW4gbmFtZS4KKyAgICAiIiIKKworICAgIGltcG9ydCBzeXMKKyAgICBpbXBvcnQgb3MKKworICAgIG91dHB1dGZpbGUgPSAnL3RtcC9kZWxldGVtZScKKworICAgICMgdHJ5IG9wZW5pbmcgdGhlIG5hbWUgZGlyZWN0bHkKKyAgICB0cnk6CisgICAgICAgICMgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdHVwbGUgKHgsIHksIHopIHdoZXJlIHggYW5kIHkgYXJlIHRoZSBzaXplCisgICAgICAgICMgb2YgdGhlIGltYWdlIGluIHBpeGVscyBhbmQgeiBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBlciBwaXhlbC4gT25seQorICAgICAgICAjIDMgYnl0ZSBSR0IgcGl4ZWxzIGFuZCAxIGJ5dGUgZ3JleXNjYWxlIHBpeGVscyBhcmUgc3VwcG9ydGVkLgorICAgICAgICBzaXplcyA9IGltZ2ZpbGUuZ2V0c2l6ZXMobmFtZSkKKyAgICBleGNlcHQgaW1nZmlsZS5lcnJvcjoKKyAgICAgICAgIyBnZXQgYSBtb3JlIHF1YWxpZmllZCBwYXRoIGNvbXBvbmVudCBvZiB0aGUgc2NyaXB0Li4uCisgICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgICAgICBvdXJuYW1lID0gc3lzLmFyZ3ZbMF0KKyAgICAgICAgZWxzZTogIyAuLi5vciB0aGUgZnVsbCBwYXRoIG9mIHRoZSBtb2R1bGUKKyAgICAgICAgICAgIG91cm5hbWUgPSBzeXMubW9kdWxlc1tfX25hbWVfX10uX19maWxlX18KKworICAgICAgICBwYXJ0cyA9IG91cm5hbWUuc3BsaXQob3Muc2VwKQorICAgICAgICBwYXJ0c1stMV0gPSBuYW1lCisgICAgICAgIG5hbWUgPSBvcy5zZXAuam9pbihwYXJ0cykKKyAgICAgICAgc2l6ZXMgPSBpbWdmaWxlLmdldHNpemVzKG5hbWUpCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ09wZW5pbmcgdGVzdCBpbWFnZTogJXMsIHNpemVzOiAlcycgJSAobmFtZSwgc3RyKHNpemVzKSkKKyAgICAjIFRoaXMgZnVuY3Rpb24gcmVhZHMgYW5kIGRlY29kZXMgdGhlIGltYWdlIG9uIHRoZSBzcGVjaWZpZWQgZmlsZSwKKyAgICAjIGFuZCByZXR1cm5zIGl0IGFzIGEgcHl0aG9uIHN0cmluZy4gVGhlIHN0cmluZyBoYXMgZWl0aGVyIDEgYnl0ZQorICAgICMgZ3JleXNjYWxlIHBpeGVscyBvciA0IGJ5dGUgUkdCQSBwaXhlbHMuIFRoZSBib3R0b20gbGVmdCBwaXhlbAorICAgICMgaXMgdGhlIGZpcnN0IGluIHRoZSBzdHJpbmcuIFRoaXMgZm9ybWF0IGlzIHN1aXRhYmxlIHRvIHBhc3MKKyAgICAjIHRvIGdsLmxyZWN0d3JpdGUsIGZvciBpbnN0YW5jZS4KKyAgICBpbWFnZSA9IGltZ2ZpbGUucmVhZChuYW1lKQorCisgICAgIyBUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgUkdCIG9yIGdyZXlzY2FsZSBkYXRhIGluIGRhdGEgdG8KKyAgICAjIGltYWdlIGZpbGUgZmlsZS4geCBhbmQgeSBnaXZlIHRoZSBzaXplIG9mIHRoZSBpbWFnZSwgeiBpcworICAgICMgMSBmb3IgMSBieXRlIGdyZXlzY2FsZSBpbWFnZXMgb3IgMyBmb3IgUkdCIGltYWdlcyAod2hpY2gKKyAgICAjIGFyZSBzdG9yZWQgYXMgNCBieXRlIHZhbHVlcyBvZiB3aGljaCBvbmx5IHRoZSBsb3dlciB0aHJlZQorICAgICMgYnl0ZXMgYXJlIHVzZWQpLiBUaGVzZSBhcmUgdGhlIGZvcm1hdHMgcmV0dXJuZWQgYnkgZ2wubHJlY3RyZWFkLgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdXcml0aW5nIG91dHB1dCBmaWxlJworICAgIGltZ2ZpbGUud3JpdGUgKG91dHB1dGZpbGUsIGltYWdlLCBzaXplc1swXSwgc2l6ZXNbMV0sIHNpemVzWzJdKQorCisKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnT3BlbmluZyBzY2FsZWQgdGVzdCBpbWFnZTogJXMsIHNpemVzOiAlcycgJSAobmFtZSwgc3RyKHNpemVzKSkKKyAgICAjIFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHJlYWQgYnV0IGl0IHJldHVybnMgYW4gaW1hZ2UgdGhhdAorICAgICMgaXMgc2NhbGVkIHRvIHRoZSBnaXZlbiB4IGFuZCB5IHNpemVzLiBJZiB0aGUgZmlsdGVyIGFuZCBibHVyCisgICAgIyBwYXJhbWV0ZXJzIGFyZSBvbWl0dGVkIHNjYWxpbmcgaXMgZG9uZSBieSBzaW1wbHkgZHJvcHBpbmcKKyAgICAjIG9yIGR1cGxpY2F0aW5nIHBpeGVscywgc28gdGhlIHJlc3VsdCB3aWxsIGJlIGxlc3MgdGhhbiBwZXJmZWN0LAorICAgICMgZXNwZWNpYWxseSBmb3IgY29tcHV0ZXItZ2VuZXJhdGVkIGltYWdlcy4gIEFsdGVybmF0aXZlbHksCisgICAgIyB5b3UgY2FuIHNwZWNpZnkgYSBmaWx0ZXIgdG8gdXNlIHRvIHNtb290aGVuIHRoZSBpbWFnZSBhZnRlcgorICAgICMgc2NhbGluZy4gVGhlIGZpbHRlciBmb3JtcyBzdXBwb3J0ZWQgYXJlICdpbXB1bHNlJywgJ2JveCcsCisgICAgIyAndHJpYW5nbGUnLCAncXVhZHJhdGljJyBhbmQgJ2dhdXNzaWFuJy4gSWYgYSBmaWx0ZXIgaXMKKyAgICAjIHNwZWNpZmllZCBibHVyIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciBzcGVjaWZ5aW5nIHRoZQorICAgICMgYmx1cnJpbmVzcyBvZiB0aGUgZmlsdGVyLiBJdCBkZWZhdWx0cyB0byAxLjAuICByZWFkc2NhbGVkCisgICAgIyBtYWtlcyBubyBhdHRlbXB0IHRvIGtlZXAgdGhlIGFzcGVjdCByYXRpbyBjb3JyZWN0LCBzbyB0aGF0CisgICAgIyBpcyB0aGUgdXNlcnMnIHJlc3BvbnNpYmlsaXR5LgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdGaWx0ZXJpbmcgd2l0aCAiaW1wdWxzZSInCisgICAgc2ltYWdlID0gaW1nZmlsZS5yZWFkc2NhbGVkIChuYW1lLCBzaXplc1swXS8yLCBzaXplc1sxXS8yLCAnaW1wdWxzZScsIDIuMCkKKworICAgICMgVGhpcyBmdW5jdGlvbiBzZXRzIGEgZ2xvYmFsIGZsYWcgd2hpY2ggZGVmaW5lcyB3aGV0aGVyIHRoZQorICAgICMgc2NhbiBsaW5lcyBvZiB0aGUgaW1hZ2UgYXJlIHJlYWQgb3Igd3JpdHRlbiBmcm9tIGJvdHRvbSB0bworICAgICMgdG9wIChmbGFnIGlzIHplcm8sIGNvbXBhdGlibGUgd2l0aCBTR0kgR0wpIG9yIGZyb20gdG9wIHRvCisgICAgIyBib3R0b20oZmxhZyBpcyBvbmUsIGNvbXBhdGlibGUgd2l0aCBYKS4gVGhlIGRlZmF1bHQgaXMgemVyby4KKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnU3dpdGNoaW5nIHRvIFggY29tcGF0aWJpbGl0eScKKyAgICBpbWdmaWxlLnR0b2IgKDEpCisKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnRmlsdGVyaW5nIHdpdGggInRyaWFuZ2xlIicKKyAgICBzaW1hZ2UgPSBpbWdmaWxlLnJlYWRzY2FsZWQgKG5hbWUsIHNpemVzWzBdLzIsIHNpemVzWzFdLzIsICd0cmlhbmdsZScsIDMuMCkKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnU3dpdGNoaW5nIGJhY2sgdG8gU0dJIGNvbXBhdGliaWxpdHknCisgICAgaW1nZmlsZS50dG9iICgwKQorCisgICAgaWYgdmVyYm9zZTogcHJpbnQgJ0ZpbHRlcmluZyB3aXRoICJxdWFkcmF0aWMiJworICAgIHNpbWFnZSA9IGltZ2ZpbGUucmVhZHNjYWxlZCAobmFtZSwgc2l6ZXNbMF0vMiwgc2l6ZXNbMV0vMiwgJ3F1YWRyYXRpYycpCisgICAgaWYgdmVyYm9zZTogcHJpbnQgJ0ZpbHRlcmluZyB3aXRoICJnYXVzc2lhbiInCisgICAgc2ltYWdlID0gaW1nZmlsZS5yZWFkc2NhbGVkIChuYW1lLCBzaXplc1swXS8yLCBzaXplc1sxXS8yLCAnZ2F1c3NpYW4nLCAxLjApCisKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnV3JpdGluZyBvdXRwdXQgZmlsZScKKyAgICBpbWdmaWxlLndyaXRlIChvdXRwdXRmaWxlLCBzaW1hZ2UsIHNpemVzWzBdLzIsIHNpemVzWzFdLzIsIHNpemVzWzJdKQorCisgICAgb3MudW5saW5rKG91dHB1dGZpbGUpCisKKworZGVmIHRlc3RfbWFpbigpOgorCisgICAgdXUuZGVjb2RlKGZpbmRmaWxlKCd0ZXN0cmdiLnV1ZScpLCAndGVzdC5yZ2InKQorICAgIHV1LmRlY29kZShmaW5kZmlsZSgnZ3JleXJnYi51dWUnKSwgJ2dyZXl0ZXN0LnJnYicpCisKKyAgICAjIFRlc3QgYSAzIGJ5dGUgY29sb3IgaW1hZ2UKKyAgICB0ZXN0aW1hZ2UoJ3Rlc3QucmdiJykKKworICAgICMgVGVzdCBhIDEgYnl0ZSBncmV5c2NhbGUgaW1hZ2UKKyAgICB0ZXN0aW1hZ2UoJ2dyZXl0ZXN0LnJnYicpCisKKyAgICB1bmxpbmsoJ3Rlc3QucmdiJykKKyAgICB1bmxpbmsoJ2dyZXl0ZXN0LnJnYicpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ltcC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ltcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2U0NGJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaW1wLnB5CkBAIC0wLDAgKzEsODEgQEAKK2ltcG9ydCBpbXAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCitjbGFzcyBMb2NrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVmVyeSBiYXNpYyB0ZXN0IG9mIGltcG9ydCBsb2NrIGZ1bmN0aW9ucy4iIiIKKworICAgIGRlZiB2ZXJpZnlfbG9ja19zdGF0ZShzZWxmLCBleHBlY3RlZCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wLmxvY2tfaGVsZCgpLCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGltcC5sb2NrX2hlbGQoKSB0byBiZSAlciIgJSBleHBlY3RlZCkKKyAgICBkZWYgdGVzdExvY2soc2VsZik6CisgICAgICAgIExPT1BTID0gNTAKKworICAgICAgICAjIFRoZSBpbXBvcnQgbG9jayBtYXkgYWxyZWFkeSBiZSBoZWxkLCBlLmcuIGlmIHRoZSB0ZXN0IHN1aXRlIGlzIHJ1bgorICAgICAgICAjIHZpYSAiaW1wb3J0IHRlc3QuYXV0b3Rlc3QiLgorICAgICAgICBsb2NrX2hlbGRfYXRfc3RhcnQgPSBpbXAubG9ja19oZWxkKCkKKyAgICAgICAgc2VsZi52ZXJpZnlfbG9ja19zdGF0ZShsb2NrX2hlbGRfYXRfc3RhcnQpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTE9PUFMpOgorICAgICAgICAgICAgaW1wLmFjcXVpcmVfbG9jaygpCisgICAgICAgICAgICBzZWxmLnZlcmlmeV9sb2NrX3N0YXRlKFRydWUpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTE9PUFMpOgorICAgICAgICAgICAgaW1wLnJlbGVhc2VfbG9jaygpCisKKyAgICAgICAgIyBUaGUgb3JpZ2luYWwgc3RhdGUgc2hvdWxkIGJlIHJlc3RvcmVkIG5vdy4KKyAgICAgICAgc2VsZi52ZXJpZnlfbG9ja19zdGF0ZShsb2NrX2hlbGRfYXRfc3RhcnQpCisKKyAgICAgICAgaWYgbm90IGxvY2tfaGVsZF9hdF9zdGFydDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXAucmVsZWFzZV9sb2NrKCkKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlbGVhc2VfbG9jaygpIHdpdGhvdXQgbG9jayBzaG91bGQgcmFpc2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSdW50aW1lRXJyb3IiKQorCitjbGFzcyBSZWxvYWRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJWZXJ5IGJhc2ljIHRlc3RzIHRvIG1ha2Ugc3VyZSB0aGF0IGltcC5yZWxvYWQoKSBvcGVyYXRlcyBqdXN0IGxpa2UKKyAgICByZWxvYWQoKS4iIiIKKworICAgIGRlZiB0ZXN0X3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBYWFggKG5jb2dobGFuKTogSXQgd291bGQgYmUgbmljZSB0byB1c2UgdGVzdF9zdXBwb3J0LkNsZWFuSW1wb3J0CisgICAgICAgICMgaGVyZSwgYnV0IHRoYXQgYnJlYWtzIGJlY2F1c2UgdGhlIG9zIG1vZHVsZSByZWdpc3RlcnMgc29tZQorICAgICAgICAjIGhhbmRsZXJzIGluIGNvcHlfcmVnIG9uIGltcG9ydC4gU2luY2UgQ2xlYW5JbXBvcnQgZG9lc24ndAorICAgICAgICAjIHJldmVydCB0aGF0IHJlZ2lzdHJhdGlvbiwgdGhlIG1vZHVsZSBpcyBsZWZ0IGluIGEgYnJva2VuCisgICAgICAgICMgc3RhdGUgYWZ0ZXIgcmV2ZXJzaW9uLiBSZWluaXRpYWxpc2luZyB0aGUgbW9kdWxlIGNvbnRlbnRzCisgICAgICAgICMgYW5kIGp1c3QgcmV2ZXJ0aW5nIG9zLmVudmlyb24gdG8gaXRzIHByZXZpb3VzIHN0YXRlIGlzIGFuIE9LCisgICAgICAgICMgd29ya2Fyb3VuZAorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCk6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcC5yZWxvYWQob3MpCisKKyAgICBkZWYgdGVzdF9leHRlbnNpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkNsZWFuSW1wb3J0KCd0aW1lJyk6CisgICAgICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICAgICAgaW1wLnJlbG9hZCh0aW1lKQorCisgICAgZGVmIHRlc3RfYnVpbHRpbihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuQ2xlYW5JbXBvcnQoJ21hcnNoYWwnKToKKyAgICAgICAgICAgIGltcG9ydCBtYXJzaGFsCisgICAgICAgICAgICBpbXAucmVsb2FkKG1hcnNoYWwpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3RzID0gWworICAgICAgICBSZWxvYWRUZXN0cywKKyAgICBdCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgdGhyZWFkCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgdGVzdHMuYXBwZW5kKExvY2tUZXN0cykKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaW1wb3J0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaW1wb3J0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxN2RhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9pbXBvcnQucHkKQEAgLTAsMCArMSw2NTAgQEAKK2ltcG9ydCBlcnJubworaW1wb3J0IGltcAoraW1wb3J0IG1hcnNoYWwKK2ltcG9ydCBvcworaW1wb3J0IHB5X2NvbXBpbGUKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzdGF0CitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZXh0d3JhcAoraW1wb3J0IHNodXRpbAorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCAodW5saW5rLCBURVNURk4sIHVubG9hZCwgcnVuX3VuaXR0ZXN0LCBybXRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfanl0aG9uLCBjaGVja193YXJuaW5ncywgRW52aXJvbm1lbnRWYXJHdWFyZCkKK2Zyb20gdGVzdCBpbXBvcnQgc3ltbGlua19zdXBwb3J0Citmcm9tIHRlc3QgaW1wb3J0IHNjcmlwdF9oZWxwZXIKKworZGVmIF9maWxlcyhuYW1lKToKKyAgICByZXR1cm4gKG5hbWUgKyBvcy5leHRzZXAgKyAicHkiLAorICAgICAgICAgICAgbmFtZSArIG9zLmV4dHNlcCArICJweWMiLAorICAgICAgICAgICAgbmFtZSArIG9zLmV4dHNlcCArICJweW8iLAorICAgICAgICAgICAgbmFtZSArIG9zLmV4dHNlcCArICJweXciLAorICAgICAgICAgICAgbmFtZSArICIkcHkuY2xhc3MiKQorCitkZWYgY2htb2RfZmlsZXMobmFtZSk6CisgICAgZm9yIGYgaW4gX2ZpbGVzKG5hbWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5jaG1vZChmLCAwNjAwKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBpZiBleGMuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisKK2RlZiByZW1vdmVfZmlsZXMobmFtZSk6CisgICAgZm9yIGYgaW4gX2ZpbGVzKG5hbWUpOgorICAgICAgICB1bmxpbmsoZikKKworCitjbGFzcyBJbXBvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHVubG9hZChURVNURk4pCisgICAgc2V0VXAgPSB0ZWFyRG93bgorCisgICAgZGVmIHRlc3RfY2FzZV9zZW5zaXRpdml0eShzZWxmKToKKyAgICAgICAgIyBCcmllZiBkaWdyZXNzaW9uIHRvIHRlc3QgdGhhdCBpbXBvcnQgaXMgY2FzZS1zZW5zaXRpdmU6ICBpZiB3ZSBnb3QKKyAgICAgICAgIyB0aGlzIGZhciwgd2Uga25vdyBmb3Igc3VyZSB0aGF0ICJyYW5kb20iIGV4aXN0cy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IFJBbkRvTQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBvZiBSQW5Eb00gc2hvdWxkIGhhdmUgZmFpbGVkIChjYXNlIG1pc21hdGNoKSIpCisKKyAgICBkZWYgdGVzdF9kb3VibGVfY29uc3Qoc2VsZik6CisgICAgICAgICMgQW5vdGhlciBicmllZiBkaWdyZXNzaW9uIHRvIHRlc3QgdGhlIGFjY3VyYWN5IG9mIG1hbmlmZXN0IGZsb2F0CisgICAgICAgICMgY29uc3RhbnRzLgorICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IGRvdWJsZV9jb25zdCAgIyBkb24ndCBibGluayAtLSB0aGF0ICp3YXMqIHRoZSB0ZXN0CisKKyAgICBkZWYgdGVzdF9pbXBvcnQoc2VsZik6CisgICAgICAgIGRlZiB0ZXN0X3dpdGhfZXh0ZW5zaW9uKGV4dCk6CisgICAgICAgICAgICAjIFRoZSBleHRlbnNpb24gaXMgbm9ybWFsbHkgIi5weSIsIHBlcmhhcHMgIi5weXciLgorICAgICAgICAgICAgc291cmNlID0gVEVTVEZOICsgZXh0CisgICAgICAgICAgICBweW8gPSBURVNURk4gKyBvcy5leHRzZXAgKyAicHlvIgorICAgICAgICAgICAgaWYgaXNfanl0aG9uOgorICAgICAgICAgICAgICAgIHB5YyA9IFRFU1RGTiArICIkcHkuY2xhc3MiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHB5YyA9IFRFU1RGTiArIG9zLmV4dHNlcCArICJweWMiCisKKyAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2UsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBwcmludCA+PiBmLCAoIiMgVGhpcyB0ZXN0cyBQeXRob24ncyBhYmlsaXR5IHRvIGltcG9ydCBhIiwgZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZS4iKQorICAgICAgICAgICAgICAgIGEgPSByYW5kb20ucmFuZHJhbmdlKDEwMDApCisgICAgICAgICAgICAgICAgYiA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMCkKKyAgICAgICAgICAgICAgICBwcmludCA+PiBmLCAiYSA9IiwgYQorICAgICAgICAgICAgICAgIHByaW50ID4+IGYsICJiID0iLCBiCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2QgPSBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IGZyb20gJXMgZmFpbGVkOiAlcyIgJSAoZXh0LCBlcnIpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5hLCBhLAorICAgICAgICAgICAgICAgICAgICAibW9kdWxlIGxvYWRlZCAoJXMpIGJ1dCBjb250ZW50cyBpbnZhbGlkIiAlIG1vZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5iLCBiLAorICAgICAgICAgICAgICAgICAgICAibW9kdWxlIGxvYWRlZCAoJXMpIGJ1dCBjb250ZW50cyBpbnZhbGlkIiAlIG1vZCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdW5saW5rKHNvdXJjZSkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG5vdCBzeXMuZG9udF93cml0ZV9ieXRlY29kZToKKyAgICAgICAgICAgICAgICAgICAgaW1wLnJlbG9hZChtb2QpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBmcm9tIC5weWMvLnB5byBmYWlsZWQ6ICVzIiAlIGVycikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdW5saW5rKHB5YykKKyAgICAgICAgICAgICAgICB1bmxpbmsocHlvKQorICAgICAgICAgICAgICAgIHVubG9hZChURVNURk4pCisKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF93aXRoX2V4dGVuc2lvbihvcy5leHRzZXAgKyAicHkiKQorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgorICAgICAgICAgICAgICAgIGZvciBleHQgaW4gWyIuUFkiLCAiLlB5IiwgIi5wWSIsICIucHl3IiwgIi5QWVciLCAiLnBZdyJdOgorICAgICAgICAgICAgICAgICAgICB0ZXN0X3dpdGhfZXh0ZW5zaW9uKGV4dCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLAorICAgICAgICAidGVzdCBtZWFuaW5nZnVsIG9ubHkgb24gcG9zaXggc3lzdGVtcyIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZG9udF93cml0ZV9ieXRlY29kZSwKKyAgICAgICAgInRlc3QgbWVhbmluZ2Z1bCBvbmx5IHdoZW4gd3JpdGluZyBieXRlY29kZSIpCisgICAgZGVmIHRlc3RfZXhlY3V0ZV9iaXRfbm90X2NvcGllZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA2MDcwOiB1bmRlciBwb3NpeCAucHljIGZpbGVzIGdvdCB0aGVpciBleGVjdXRlIGJpdCBzZXQgaWYKKyAgICAgICAgIyB0aGUgLnB5IGZpbGUgaGFkIHRoZSBleGVjdXRlIGJpdCBzZXQsIGJ1dCB0aGV5IGFyZW4ndCBleGVjdXRhYmxlLgorICAgICAgICBvbGRtYXNrID0gb3MudW1hc2soMDIyKQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmbmFtZSA9IFRFU1RGTiArIG9zLmV4dHNlcCArICJweSIKKyAgICAgICAgICAgIGYgPSBvcGVuKGZuYW1lLCAndycpLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLmNobW9kKGZuYW1lLCAoc3RhdC5TX0lSVVNSIHwgc3RhdC5TX0lSR1JQIHwgc3RhdC5TX0lST1RIIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lYVVNSIHwgc3RhdC5TX0lYR1JQIHwgc3RhdC5TX0lYT1RIKSkKKyAgICAgICAgICAgIF9faW1wb3J0X18oVEVTVEZOKQorICAgICAgICAgICAgZm4gPSBmbmFtZSArICdjJworICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZuKToKKyAgICAgICAgICAgICAgICBmbiA9IGZuYW1lICsgJ28nCisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZuKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJfX2ltcG9ydF9fIGRpZCBub3QgcmVzdWx0IGluIGNyZWF0aW9uIG9mICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlaXRoZXIgYSAucHljIG9yIC5weW8gZmlsZSIpCisgICAgICAgICAgICBzID0gb3Muc3RhdChmbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHMuc3RfbW9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JUlVTUiB8IHN0YXQuU19JUkdSUCB8IHN0YXQuU19JUk9USCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVtYXNrKG9sZG1hc2spCisgICAgICAgICAgICByZW1vdmVfZmlsZXMoVEVTVEZOKQorICAgICAgICAgICAgdW5sb2FkKFRFU1RGTikKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZG9udF93cml0ZV9ieXRlY29kZSwKKyAgICAgICAgInRlc3QgbWVhbmluZ2Z1bCBvbmx5IHdoZW4gd3JpdGluZyBieXRlY29kZSIpCisgICAgZGVmIHRlc3RfcmV3cml0ZV9weWNfd2l0aF9yZWFkX29ubHlfc291cmNlKHNlbGYpOgorICAgICAgICAjIElzc3VlIDYwNzQ6IGEgbG9uZyB0aW1lIGFnbyBvbiBwb3NpeCwgYW5kIG1vcmUgcmVjZW50bHkgb24gV2luZG93cywKKyAgICAgICAgIyBhIHJlYWQgb25seSBzb3VyY2UgZmlsZSByZXN1bHRlZCBpbiBhIHJlYWQgb25seSBweWMgZmlsZSwgd2hpY2gKKyAgICAgICAgIyBsZWQgdG8gcHJvYmxlbXMgd2l0aCB1cGRhdGluZyBpdCBsYXRlcgorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQorICAgICAgICBmbmFtZSA9IFRFU1RGTiArIG9zLmV4dHNlcCArICJweSIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBXcml0ZSBhIFB5dGhvbiBmaWxlLCBtYWtlIGl0IHJlYWQtb25seSBhbmQgaW1wb3J0IGl0CisgICAgICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJ4ID0gJ29yaWdpbmFsJ1xuIikKKyAgICAgICAgICAgICMgVHdlYWsgdGhlIG10aW1lIG9mIHRoZSBzb3VyY2UgdG8gZW5zdXJlIHB5YyBnZXRzIHVwZGF0ZWQgbGF0ZXIKKyAgICAgICAgICAgIHMgPSBvcy5zdGF0KGZuYW1lKQorICAgICAgICAgICAgb3MudXRpbWUoZm5hbWUsIChzLnN0X2F0aW1lLCBzLnN0X210aW1lLTEwMDAwMDAwMCkpCisgICAgICAgICAgICBvcy5jaG1vZChmbmFtZSwgMDQwMCkKKyAgICAgICAgICAgIG0xID0gX19pbXBvcnRfXyhURVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0xLngsICdvcmlnaW5hbCcpCisgICAgICAgICAgICAjIENoYW5nZSB0aGUgZmlsZSBhbmQgdGhlbiByZWltcG9ydCBpdAorICAgICAgICAgICAgb3MuY2htb2QoZm5hbWUsIDA2MDApCisgICAgICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJ4ID0gJ3Jld3JpdHRlbidcbiIpCisgICAgICAgICAgICB1bmxvYWQoVEVTVEZOKQorICAgICAgICAgICAgbTIgPSBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTIueCwgJ3Jld3JpdHRlbicpCisgICAgICAgICAgICAjIE5vdyBkZWxldGUgdGhlIHNvdXJjZSBmaWxlIGFuZCBjaGVjayB0aGUgcHljIHdhcyByZXdyaXR0ZW4KKyAgICAgICAgICAgIHVubGluayhmbmFtZSkKKyAgICAgICAgICAgIHVubG9hZChURVNURk4pCisgICAgICAgICAgICBtMyA9IF9faW1wb3J0X18oVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMy54LCAncmV3cml0dGVuJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNobW9kX2ZpbGVzKFRFU1RGTikKKyAgICAgICAgICAgIHJlbW92ZV9maWxlcyhURVNURk4pCisgICAgICAgICAgICB1bmxvYWQoVEVTVEZOKQorICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisKKyAgICBkZWYgdGVzdF9pbXBfbW9kdWxlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBpbXAgbW9kdWxlIGNhbiBjb3JyZWN0bHkgbG9hZCBhbmQgZmluZCAucHkgZmlsZXMKKworICAgICAgICAjIFhYWCAobmNvZ2hsYW4pOiBJdCB3b3VsZCBiZSBuaWNlIHRvIHVzZSB0ZXN0X3N1cHBvcnQuQ2xlYW5JbXBvcnQKKyAgICAgICAgIyBoZXJlLCBidXQgdGhhdCBicmVha3MgYmVjYXVzZSB0aGUgb3MgbW9kdWxlIHJlZ2lzdGVycyBzb21lCisgICAgICAgICMgaGFuZGxlcnMgaW4gY29weV9yZWcgb24gaW1wb3J0LiBTaW5jZSBDbGVhbkltcG9ydCBkb2Vzbid0CisgICAgICAgICMgcmV2ZXJ0IHRoYXQgcmVnaXN0cmF0aW9uLCB0aGUgbW9kdWxlIGlzIGxlZnQgaW4gYSBicm9rZW4KKyAgICAgICAgIyBzdGF0ZSBhZnRlciByZXZlcnNpb24uIFJlaW5pdGlhbGlzaW5nIHRoZSBtb2R1bGUgY29udGVudHMKKyAgICAgICAgIyBhbmQganVzdCByZXZlcnRpbmcgb3MuZW52aXJvbiB0byBpdHMgcHJldmlvdXMgc3RhdGUgaXMgYW4gT0sKKyAgICAgICAgIyB3b3JrYXJvdW5kCisgICAgICAgIG9yaWdfcGF0aCA9IG9zLnBhdGgKKyAgICAgICAgb3JpZ19nZXRlbnYgPSBvcy5nZXRlbnYKKyAgICAgICAgd2l0aCBFbnZpcm9ubWVudFZhckd1YXJkKCk6CisgICAgICAgICAgICB4ID0gaW1wLmZpbmRfbW9kdWxlKCJvcyIpCisgICAgICAgICAgICBuZXdfb3MgPSBpbXAubG9hZF9tb2R1bGUoIm9zIiwgKngpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKG9zLCBuZXdfb3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKG9yaWdfcGF0aCwgbmV3X29zLnBhdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG9yaWdfZ2V0ZW52LCBuZXdfb3MuZ2V0ZW52KQorCisgICAgZGVmIHRlc3RfbW9kdWxlX3dpdGhfbGFyZ2Vfc3RhY2soc2VsZiwgbW9kdWxlPSdsb25nbGlzdCcpOgorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTU2MTg1OC4KKyAgICAgICAgZmlsZW5hbWUgPSBtb2R1bGUgKyBvcy5leHRzZXAgKyAncHknCisKKyAgICAgICAgIyBDcmVhdGUgYSBmaWxlIHdpdGggYSBsaXN0IG9mIDY1MDAwIGVsZW1lbnRzLgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3KycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdkID0gW1xuJykKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDY1MDAwKToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCciIixcbicpCisgICAgICAgICAgICBmLndyaXRlKCddJykKKworICAgICAgICAjIENvbXBpbGUgJiByZW1vdmUgLnB5IGZpbGUsIHdlIG9ubHkgbmVlZCAucHljIChvciAucHlvKS4KKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIGY6CisgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZW5hbWUpCisgICAgICAgIHVubGluayhmaWxlbmFtZSkKKworICAgICAgICAjIE5lZWQgdG8gYmUgYWJsZSB0byBsb2FkIGZyb20gY3VycmVudCBkaXIuCisgICAgICAgIHN5cy5wYXRoLmFwcGVuZCgnJykKKworICAgICAgICAjIFRoaXMgdXNlZCB0byBjcmFzaC4KKyAgICAgICAgZXhlYyAnaW1wb3J0ICcgKyBtb2R1bGUKKworICAgICAgICAjIENsZWFudXAuCisgICAgICAgIGRlbCBzeXMucGF0aFstMV0KKyAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgJ2MnKQorICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAnbycpCisKKyAgICBkZWYgdGVzdF9mYWlsaW5nX2ltcG9ydF9zdGlja3Moc2VsZik6CisgICAgICAgIHNvdXJjZSA9IFRFU1RGTiArIG9zLmV4dHNlcCArICJweSIKKyAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgInciKSBhcyBmOgorICAgICAgICAgICAgcHJpbnQgPj4gZiwgImEgPSAxIC8vIDAiCisKKyAgICAgICAgIyBOZXcgaW4gMi40LCB3ZSBzaG91bGRuJ3QgYmUgYWJsZSB0byBpbXBvcnQgdGhhdCBubyBtYXR0ZXIgaG93IG9mdGVuCisgICAgICAgICMgd2UgdHJ5LgorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiBbMSwgMiwgM106CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIF9faW1wb3J0X18sIFRFU1RGTikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKFRFU1RGTiwgc3lzLm1vZHVsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFtYWdlZCBtb2R1bGUgaW4gc3lzLm1vZHVsZXMgb24gJWkgdHJ5IiAlIGkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KKyAgICAgICAgICAgIHJlbW92ZV9maWxlcyhURVNURk4pCisKKyAgICBkZWYgdGVzdF9mYWlsaW5nX3JlbG9hZChzZWxmKToKKyAgICAgICAgIyBBIGZhaWxpbmcgcmVsb2FkIHNob3VsZCBsZWF2ZSB0aGUgbW9kdWxlIG9iamVjdCBpbiBzeXMubW9kdWxlcy4KKyAgICAgICAgc291cmNlID0gVEVTVEZOICsgb3MuZXh0c2VwICsgInB5IgorICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAidyIpIGFzIGY6CisgICAgICAgICAgICBwcmludCA+PiBmLCAiYSA9IDEiCisgICAgICAgICAgICBwcmludCA+PiBmLCAiYiA9IDIiCisKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kID0gX19pbXBvcnRfXyhURVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKFRFU1RGTiwgc3lzLm1vZHVsZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5hLCAxLCAibW9kdWxlIGhhcyB3cm9uZyBhdHRyaWJ1dGUgdmFsdWVzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmIsIDIsICJtb2R1bGUgaGFzIHdyb25nIGF0dHJpYnV0ZSB2YWx1ZXMiKQorCisgICAgICAgICAgICAjIE9uIFdpblhQLCBqdXN0IHJlcGxhY2luZyB0aGUgLnB5IGZpbGUgd2Fzbid0IGVub3VnaCB0bworICAgICAgICAgICAgIyBjb252aW5jZSByZWxvYWQoKSB0byByZXBhcnNlIGl0LiAgTWF5YmUgdGhlIHRpbWVzdGFtcCBkaWRuJ3QKKyAgICAgICAgICAgICMgbW92ZSBlbm91Z2guICBXZSBmb3JjZSBpdCB0byBnZXQgcmVwYXJzZWQgYnkgcmVtb3ZpbmcgdGhlCisgICAgICAgICAgICAjIGNvbXBpbGVkIGZpbGUgdG9vLgorICAgICAgICAgICAgcmVtb3ZlX2ZpbGVzKFRFU1RGTikKKworICAgICAgICAgICAgIyBOb3cgZGFtYWdlIHRoZSBtb2R1bGUuCisgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gZiwgImEgPSAxMCIKKyAgICAgICAgICAgICAgICBwcmludCA+PiBmLCAiYiA9IDIwLy8wIgorCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgaW1wLnJlbG9hZCwgbW9kKQorCisgICAgICAgICAgICAjIEJ1dCB3ZSBzdGlsbCBleHBlY3QgdGhlIG1vZHVsZSB0byBiZSBpbiBzeXMubW9kdWxlcy4KKyAgICAgICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzLmdldChURVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG1vZCwgTm9uZSwgImV4cGVjdGVkIG1vZHVsZSB0byBiZSBpbiBzeXMubW9kdWxlcyIpCisKKyAgICAgICAgICAgICMgV2Ugc2hvdWxkIGhhdmUgcmVwbGFjZWQgYSB3LyAxMCwgYnV0IHRoZSBvbGQgYiB2YWx1ZSBzaG91bGQKKyAgICAgICAgICAgICMgc3RpY2suCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5hLCAxMCwgIm1vZHVsZSBoYXMgd3JvbmcgYXR0cmlidXRlIHZhbHVlcyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5iLCAyLCAibW9kdWxlIGhhcyB3cm9uZyBhdHRyaWJ1dGUgdmFsdWVzIikKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisgICAgICAgICAgICByZW1vdmVfZmlsZXMoVEVTVEZOKQorICAgICAgICAgICAgdW5sb2FkKFRFU1RGTikKKworICAgIGRlZiB0ZXN0X2luZmluaXRlX3JlbG9hZChzZWxmKToKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNzQyMzQyIHJlcG9ydHMgdGhhdCBQeXRob24gc2VnZmF1bHRzCisgICAgICAgICMgKGluZmluaXRlIHJlY3Vyc2lvbiBpbiBDKSB3aGVuIGZhY2VkIHdpdGggc2VsZi1yZWN1cnNpdmUgcmVsb2FkKClpbmcuCisKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBpbmZpbml0ZV9yZWxvYWQKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQorCisgICAgZGVmIHRlc3RfaW1wb3J0X25hbWVfYmluZGluZyhzZWxmKToKKyAgICAgICAgIyBpbXBvcnQgeC55LnogYmluZHMgeCBpbiB0aGUgY3VycmVudCBuYW1lc3BhY2UuCisgICAgICAgIGltcG9ydCB0ZXN0IGFzIHgKKyAgICAgICAgaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeCwgdGVzdCwgeC5fX25hbWVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIodGVzdC50ZXN0X3N1cHBvcnQsICJfX2ZpbGVfXyIpKQorCisgICAgICAgICMgaW1wb3J0IHgueS56IGFzIHcgYmluZHMgeiBhcyB3LgorICAgICAgICBpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQgYXMgeQorICAgICAgICBzZWxmLmFzc2VydElzKHksIHRlc3QudGVzdF9zdXBwb3J0LCB5Ll9fbmFtZV9fKQorCisgICAgZGVmIHRlc3RfaW1wb3J0X2luaXRsZXNzX2RpcmVjdG9yeV93YXJuaW5nKHNlbGYpOgorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgSW1wb3J0V2FybmluZykpOgorICAgICAgICAgICAgIyBKdXN0IGEgcmFuZG9tIG5vbi1wYWNrYWdlIGRpcmVjdG9yeSB3ZSBhbHdheXMgZXhwZWN0IHRvIGJlCisgICAgICAgICAgICAjIHNvbWV3aGVyZSBpbiBzeXMucGF0aC4uLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIF9faW1wb3J0X18sICJzaXRlLXBhY2thZ2VzIikKKworICAgIGRlZiB0ZXN0X2ltcG9ydF9ieV9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aChURVNURk4pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGM6CisgICAgICAgICAgICBfX2ltcG9ydF9fKHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkltcG9ydCBieSBmaWxlbmFtZSBpcyBub3Qgc3VwcG9ydGVkLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgYy5leGNlcHRpb24uYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X2ltcG9ydF9pbl9kZWxfZG9lc19ub3RfY3Jhc2goc2VsZik6CisgICAgICAgICMgSXNzdWUgNDIzNgorICAgICAgICB0ZXN0Zm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KCcnLCBURVNURk4sIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICBpbXBvcnQgaW1wCisgICAgICAgICAgICBzeXMuYXJndi5pbnNlcnQoMCwgQygpKQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKHRlc3RmbikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHVubGluayh0ZXN0Zm4pCisKKyAgICBkZWYgdGVzdF9idWc3NzMyKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSBURVNURk4gKyAnLnB5JworICAgICAgICBvcy5ta2Rpcihzb3VyY2UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChJbXBvcnRFcnJvciwgSU9FcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXAuZmluZF9tb2R1bGUsIFRFU1RGTiwgWyIuIl0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5ybWRpcihzb3VyY2UpCisKKyAgICBkZWYgdGVzdF90aW1lc3RhbXBfb3ZlcmZsb3coc2VsZik6CisgICAgICAgICMgQSBtb2RpZmljYXRpb24gdGltZXN0YW1wIGxhcmdlciB0aGFuIDIqKjMyIHNob3VsZCBub3QgYmUgYSBwcm9ibGVtCisgICAgICAgICMgd2hlbiBpbXBvcnRpbmcgYSBtb2R1bGUgKGlzc3VlICMxMTIzNSkuCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvdXJjZSA9IFRFU1RGTiArICIucHkiCisgICAgICAgICAgICBjb21waWxlZCA9IHNvdXJjZSArICgnYycgaWYgX19kZWJ1Z19fIGVsc2UgJ28nKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy51dGltZShzb3VyY2UsICgyICoqIDMzIC0gNSwgMiAqKiAzMyAtIDUpKQorICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY2Fubm90IHNldCBtb2RpZmljYXRpb24gdGltZSB0byBsYXJnZSBpbnRlZ2VyIikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBnZXRhdHRyKGVycm5vLCAnRU9WRVJGTE9XJywgTm9uZSk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY2Fubm90IHNldCBtb2RpZmljYXRpb24gdGltZSB0byBsYXJnZSBpbnRlZ2VyICh7fSkiLmZvcm1hdChlKSkKKyAgICAgICAgICAgIF9faW1wb3J0X18oVEVTVEZOKQorICAgICAgICAgICAgIyBUaGUgcHljIGZpbGUgd2FzIGNyZWF0ZWQuCisgICAgICAgICAgICBvcy5zdGF0KGNvbXBpbGVkKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisgICAgICAgICAgICByZW1vdmVfZmlsZXMoVEVTVEZOKQorCisgICAgZGVmIHRlc3RfcHljX210aW1lKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIGlzc3VlICMxMzg2MzogLnB5YyB0aW1lc3RhbXAgc29tZXRpbWVzIGluY29ycmVjdCBvbiBXaW5kb3dzLgorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIEphbiAxLCAyMDEyOyBKdWwgMSwgMjAxMi4KKyAgICAgICAgICAgIG10aW1lcyA9IDEzMjUzNzYwMDAsIDEzNDExMDA4MDAKKworICAgICAgICAgICAgIyBEaWZmZXJlbnQgbmFtZXMgdG8gYXZvaWQgcnVubmluZyBpbnRvIGltcG9ydCBjYWNoaW5nLgorICAgICAgICAgICAgdGFpbHMgPSAic3BhbSIsICJlZ2dzIgorICAgICAgICAgICAgZm9yIG10aW1lLCB0YWlsIGluIHppcChtdGltZXMsIHRhaWxzKToKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBURVNURk4gKyB0YWlsCisgICAgICAgICAgICAgICAgc291cmNlID0gbW9kdWxlICsgIi5weSIKKyAgICAgICAgICAgICAgICBjb21waWxlZCA9IHNvdXJjZSArICgnYycgaWYgX19kZWJ1Z19fIGVsc2UgJ28nKQorCisgICAgICAgICAgICAgICAgIyBDcmVhdGUgYSBuZXcgUHl0aG9uIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gbXRpbWUuCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCIjIEp1c3QgdGVzdGluZ1xueD0xLCAyLCAzXG4iKQorICAgICAgICAgICAgICAgIG9zLnV0aW1lKHNvdXJjZSwgKG10aW1lLCBtdGltZSkpCisKKyAgICAgICAgICAgICAgICAjIEdlbmVyYXRlIHRoZSAucHljL28gZmlsZTsgaWYgaXQgY291bGRuJ3QgYmUgY3JlYXRlZAorICAgICAgICAgICAgICAgICMgZm9yIHNvbWUgcmVhc29uLCBza2lwIHRoZSB0ZXN0LgorICAgICAgICAgICAgICAgIG0gPSBfX2ltcG9ydF9fKG1vZHVsZSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY29tcGlsZWQpOgorICAgICAgICAgICAgICAgICAgICB1bmxpbmsoc291cmNlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDb3VsZG4ndCBjcmVhdGUgLnB5Yy8ucHlvIGZpbGUuIikKKworICAgICAgICAgICAgICAgICMgQWN0dWFsIG1vZGlmaWNhdGlvbiB0aW1lIG9mIC5weSBmaWxlLgorICAgICAgICAgICAgICAgIG10aW1lMSA9IGludChvcy5zdGF0KHNvdXJjZSkuc3RfbXRpbWUpICYgMHhmZmZmZmZmZgorCisgICAgICAgICAgICAgICAgIyBtdGltZSB0aGF0IHdhcyBlbmNvZGVkIGluIHRoZSAucHljIGZpbGUuCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNvbXBpbGVkLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBtdGltZTIgPSBzdHJ1Y3QudW5wYWNrKCc8TCcsIGYucmVhZCg4KVs0Ol0pWzBdCisKKyAgICAgICAgICAgICAgICB1bmxpbmsoY29tcGlsZWQpCisgICAgICAgICAgICAgICAgdW5saW5rKHNvdXJjZSkKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXRpbWUxLCBtdGltZTIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMucGF0aC5wb3AoMCkKKworCitjbGFzcyBQeWNSZXdyaXRpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IHRoYXQgdGhlIGBjb19maWxlbmFtZWAgYXR0cmlidXRlIG9uIGNvZGUgb2JqZWN0cyBhbHdheXMgcG9pbnRzCisgICAgIyB0byB0aGUgcmlnaHQgZmlsZSwgZXZlbiB3aGVuIHZhcmlvdXMgdGhpbmdzIGhhcHBlbiAoZS5nLiBib3RoIHRoZSAucHkKKyAgICAjIGFuZCB0aGUgLnB5YyBmaWxlIGFyZSByZW5hbWVkKS4KKworICAgIG1vZHVsZV9uYW1lID0gInVubGlrZWx5X21vZHVsZV9uYW1lIgorICAgIG1vZHVsZV9zb3VyY2UgPSAiIiIKK2ltcG9ydCBzeXMKK2NvZGVfZmlsZW5hbWUgPSBzeXMuX2dldGZyYW1lKCkuZl9jb2RlLmNvX2ZpbGVuYW1lCittb2R1bGVfZmlsZW5hbWUgPSBfX2ZpbGVfXworY29uc3RhbnQgPSAxCitkZWYgZnVuYygpOgorICAgIHBhc3MKK2Z1bmNfZmlsZW5hbWUgPSBmdW5jLmZ1bmNfY29kZS5jb19maWxlbmFtZQorIiIiCisgICAgZGlyX25hbWUgPSBvcy5wYXRoLmFic3BhdGgoVEVTVEZOKQorICAgIGZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihkaXJfbmFtZSwgbW9kdWxlX25hbWUpICsgb3MuZXh0c2VwICsgInB5IgorICAgIGNvbXBpbGVkX25hbWUgPSBmaWxlX25hbWUgKyAoImMiIGlmIF9fZGVidWdfXyBlbHNlICJvIikKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCisgICAgICAgIHNlbGYub3JpZ19tb2R1bGUgPSBzeXMubW9kdWxlcy5wb3Aoc2VsZi5tb2R1bGVfbmFtZSwgTm9uZSkKKyAgICAgICAgb3MubWtkaXIoc2VsZi5kaXJfbmFtZSkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZV9uYW1lLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHNlbGYubW9kdWxlX3NvdXJjZSkKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHNlbGYuZGlyX25hbWUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5zeXNfcGF0aAorICAgICAgICBpZiBzZWxmLm9yaWdfbW9kdWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbc2VsZi5tb2R1bGVfbmFtZV0gPSBzZWxmLm9yaWdfbW9kdWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1bmxvYWQoc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgdW5saW5rKHNlbGYuZmlsZV9uYW1lKQorICAgICAgICB1bmxpbmsoc2VsZi5jb21waWxlZF9uYW1lKQorICAgICAgICBybXRyZWUoc2VsZi5kaXJfbmFtZSkKKworICAgIGRlZiBpbXBvcnRfbW9kdWxlKHNlbGYpOgorICAgICAgICBucyA9IGdsb2JhbHMoKQorICAgICAgICBfX2ltcG9ydF9fKHNlbGYubW9kdWxlX25hbWUsIG5zLCBucykKKyAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW3NlbGYubW9kdWxlX25hbWVdCisKKyAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CisgICAgICAgIG1vZCA9IHNlbGYuaW1wb3J0X21vZHVsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLm1vZHVsZV9maWxlbmFtZSwgc2VsZi5maWxlX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmNvZGVfZmlsZW5hbWUsIHNlbGYuZmlsZV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5mdW5jX2ZpbGVuYW1lLCBzZWxmLmZpbGVfbmFtZSkKKyAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3NlbGYubW9kdWxlX25hbWVdCisgICAgICAgIG1vZCA9IHNlbGYuaW1wb3J0X21vZHVsZSgpCisgICAgICAgIGlmIG5vdCBzeXMuZG9udF93cml0ZV9ieXRlY29kZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLm1vZHVsZV9maWxlbmFtZSwgc2VsZi5jb21waWxlZF9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5jb2RlX2ZpbGVuYW1lLCBzZWxmLmZpbGVfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuZnVuY19maWxlbmFtZSwgc2VsZi5maWxlX25hbWUpCisKKyAgICBkZWYgdGVzdF9pbmNvcnJlY3RfY29kZV9uYW1lKHNlbGYpOgorICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5maWxlX25hbWUsIGRmaWxlPSJhbm90aGVyX21vZHVsZS5weSIpCisgICAgICAgIG1vZCA9IHNlbGYuaW1wb3J0X21vZHVsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLm1vZHVsZV9maWxlbmFtZSwgc2VsZi5jb21waWxlZF9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5jb2RlX2ZpbGVuYW1lLCBzZWxmLmZpbGVfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuZnVuY19maWxlbmFtZSwgc2VsZi5maWxlX25hbWUpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfd2l0aG91dF9zb3VyY2Uoc2VsZik6CisgICAgICAgIHRhcmdldCA9ICJhbm90aGVyX21vZHVsZS5weSIKKyAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNlbGYuZmlsZV9uYW1lLCBkZmlsZT10YXJnZXQpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmZpbGVfbmFtZSkKKyAgICAgICAgbW9kID0gc2VsZi5pbXBvcnRfbW9kdWxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QubW9kdWxlX2ZpbGVuYW1lLCBzZWxmLmNvbXBpbGVkX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmNvZGVfZmlsZW5hbWUsIHRhcmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuZnVuY19maWxlbmFtZSwgdGFyZ2V0KQorCisgICAgZGVmIHRlc3RfZm9yZWlnbl9jb2RlKHNlbGYpOgorICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5maWxlX25hbWUpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmNvbXBpbGVkX25hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBoZWFkZXIgPSBmLnJlYWQoOCkKKyAgICAgICAgICAgIGNvZGUgPSBtYXJzaGFsLmxvYWQoZikKKyAgICAgICAgY29uc3RhbnRzID0gbGlzdChjb2RlLmNvX2NvbnN0cykKKyAgICAgICAgZm9yZWlnbl9jb2RlID0gdGVzdF9tYWluLmZ1bmNfY29kZQorICAgICAgICBwb3MgPSBjb25zdGFudHMuaW5kZXgoMSkKKyAgICAgICAgY29uc3RhbnRzW3Bvc10gPSBmb3JlaWduX2NvZGUKKyAgICAgICAgY29kZSA9IHR5cGUoY29kZSkoY29kZS5jb19hcmdjb3VudCwgY29kZS5jb19ubG9jYWxzLCBjb2RlLmNvX3N0YWNrc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZS5jb19mbGFncywgY29kZS5jb19jb2RlLCB0dXBsZShjb25zdGFudHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLmNvX25hbWVzLCBjb2RlLmNvX3Zhcm5hbWVzLCBjb2RlLmNvX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLmNvX25hbWUsIGNvZGUuY29fZmlyc3RsaW5lbm8sIGNvZGUuY29fbG5vdGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLmNvX2ZyZWV2YXJzLCBjb2RlLmNvX2NlbGx2YXJzKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5jb21waWxlZF9uYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShoZWFkZXIpCisgICAgICAgICAgICBtYXJzaGFsLmR1bXAoY29kZSwgZikKKyAgICAgICAgbW9kID0gc2VsZi5pbXBvcnRfbW9kdWxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuY29uc3RhbnQuY29fZmlsZW5hbWUsIGZvcmVpZ25fY29kZS5jb19maWxlbmFtZSkKKworCitjbGFzcyBQYXRoc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBwYXRoID0gVEVTVEZOCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIG9zLm1rZGlyKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5zeXNwYXRoID0gc3lzLnBhdGhbOl0KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgcm10cmVlKHNlbGYucGF0aCkKKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnN5c3BhdGgKKworICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTI5My4KKyAgICBkZWYgdGVzdF90cmFpbGluZ19zbGFzaChzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLnBhdGgsICd0ZXN0X3RyYWlsaW5nX3NsYXNoLnB5JyksICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoInRlc3RkYXRhID0gJ3Rlc3RfdHJhaWxpbmdfc2xhc2gnIikKKyAgICAgICAgc3lzLnBhdGguYXBwZW5kKHNlbGYucGF0aCsnLycpCisgICAgICAgIG1vZCA9IF9faW1wb3J0X18oInRlc3RfdHJhaWxpbmdfc2xhc2giKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC50ZXN0ZGF0YSwgJ3Rlc3RfdHJhaWxpbmdfc2xhc2gnKQorICAgICAgICB1bmxvYWQoInRlc3RfdHJhaWxpbmdfc2xhc2giKQorCisgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzNjc3LgorICAgIGRlZiBfdGVzdF9VTkNfcGF0aChzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLnBhdGgsICd0ZXN0X3RyYWlsaW5nX3NsYXNoLnB5JyksICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoInRlc3RkYXRhID0gJ3Rlc3RfdHJhaWxpbmdfc2xhc2gnIikKKyAgICAgICAgIyBDcmVhdGUgdGhlIFVOQyBwYXRoLCBsaWtlIFxcbXlob3N0XGMkXGZvb1xiYXIuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmFic3BhdGgoc2VsZi5wYXRoKQorICAgICAgICBpbXBvcnQgc29ja2V0CisgICAgICAgIGhuID0gc29ja2V0LmdldGhvc3RuYW1lKCkKKyAgICAgICAgZHJpdmUgPSBwYXRoWzBdCisgICAgICAgIHVuYyA9ICJcXFxcJXNcXCVzJCIlKGhuLCBkcml2ZSkKKyAgICAgICAgdW5jICs9IHBhdGhbMjpdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmxpc3RkaXIodW5jKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRVBFUk0sIGVycm5vLkVBQ0NFUyk6CisgICAgICAgICAgICAgICAgIyBTZWUgaXNzdWUgIzE1MzM4CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY2Fubm90IGFjY2VzcyBhZG1pbmlzdHJhdGl2ZSBzaGFyZSAlciIgJSAodW5jLCkpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBzeXMucGF0aC5hcHBlbmQocGF0aCkKKyAgICAgICAgbW9kID0gX19pbXBvcnRfXygidGVzdF90cmFpbGluZ19zbGFzaCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLnRlc3RkYXRhLCAndGVzdF90cmFpbGluZ19zbGFzaCcpCisgICAgICAgIHVubG9hZCgidGVzdF90cmFpbGluZ19zbGFzaCIpCisKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgdGVzdF9VTkNfcGF0aCA9IF90ZXN0X1VOQ19wYXRoCisKKworY2xhc3MgUmVsYXRpdmVJbXBvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHVubG9hZCgidGVzdC5yZWxpbXBvcnQiKQorICAgIHNldFVwID0gdGVhckRvd24KKworICAgIGRlZiB0ZXN0X3JlbGltcG9ydF9zdGFyKHNlbGYpOgorICAgICAgICAjIFRoaXMgd2lsbCBpbXBvcnQgKiBmcm9tIC50ZXN0X2ltcG9ydC4KKyAgICAgICAgZnJvbSAuIGltcG9ydCByZWxpbXBvcnQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIocmVsaW1wb3J0LCAiUmVsYXRpdmVJbXBvcnRUZXN0cyIpKQorCisgICAgZGVmIHRlc3RfaXNzdWUzMjIxKHNlbGYpOgorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTMyMjEuCisgICAgICAgIGRlZiBjaGVja19hYnNvbHV0ZSgpOgorICAgICAgICAgICAgZXhlYyAiZnJvbSBvcyBpbXBvcnQgcGF0aCIgaW4gbnMKKyAgICAgICAgZGVmIGNoZWNrX3JlbGF0aXZlKCk6CisgICAgICAgICAgICBleGVjICJmcm9tIC4gaW1wb3J0IHJlbGltcG9ydCIgaW4gbnMKKworICAgICAgICAjIENoZWNrIGJvdGggT0sgd2l0aCBfX3BhY2thZ2VfXyBhbmQgX19uYW1lX18gY29ycmVjdAorICAgICAgICBucyA9IGRpY3QoX19wYWNrYWdlX189J3Rlc3QnLCBfX25hbWVfXz0ndGVzdC5ub3RhcmVhbG1vZHVsZScpCisgICAgICAgIGNoZWNrX2Fic29sdXRlKCkKKyAgICAgICAgY2hlY2tfcmVsYXRpdmUoKQorCisgICAgICAgICMgQ2hlY2sgYm90aCBPSyB3aXRoIG9ubHkgX19uYW1lX18gd3JvbmcKKyAgICAgICAgbnMgPSBkaWN0KF9fcGFja2FnZV9fPSd0ZXN0JywgX19uYW1lX189J25vdGFyZWFscGtnLm5vdGFyZWFsbW9kdWxlJykKKyAgICAgICAgY2hlY2tfYWJzb2x1dGUoKQorICAgICAgICBjaGVja19yZWxhdGl2ZSgpCisKKyAgICAgICAgIyBDaGVjayByZWxhdGl2ZSBmYWlscyB3aXRoIG9ubHkgX19wYWNrYWdlX18gd3JvbmcKKyAgICAgICAgbnMgPSBkaWN0KF9fcGFja2FnZV9fPSdmb28nLCBfX25hbWVfXz0ndGVzdC5ub3RhcmVhbG1vZHVsZScpCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcuK2ZvbycsIFJ1bnRpbWVXYXJuaW5nKSk6CisgICAgICAgICAgICBjaGVja19hYnNvbHV0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUVycm9yLCBjaGVja19yZWxhdGl2ZSkKKworICAgICAgICAjIENoZWNrIHJlbGF0aXZlIGZhaWxzIHdpdGggX19wYWNrYWdlX18gYW5kIF9fbmFtZV9fIHdyb25nCisgICAgICAgIG5zID0gZGljdChfX3BhY2thZ2VfXz0nZm9vJywgX19uYW1lX189J25vdGFyZWFscGtnLm5vdGFyZWFsbW9kdWxlJykKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJy4rZm9vJywgUnVudGltZVdhcm5pbmcpKToKKyAgICAgICAgICAgIGNoZWNrX2Fic29sdXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IsIGNoZWNrX3JlbGF0aXZlKQorCisgICAgICAgICMgQ2hlY2sgYm90aCBmYWlsIHdpdGggcGFja2FnZSBzZXQgdG8gYSBub24tc3RyaW5nCisgICAgICAgIG5zID0gZGljdChfX3BhY2thZ2VfXz1vYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2hlY2tfYWJzb2x1dGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNoZWNrX3JlbGF0aXZlKQorCisgICAgZGVmIHRlc3RfYWJzb2x1dGVfaW1wb3J0X3dpdGhvdXRfZnV0dXJlKHNlbGYpOgorICAgICAgICAjIElmIGV4cGxpY2l0IHJlbGF0aXZlIGltcG9ydCBzeW50YXggaXMgdXNlZCwgdGhlbiBkbyBub3QgdHJ5CisgICAgICAgICMgdG8gcGVyZm9ybSBhbiBhYnNvbHV0ZSBpbXBvcnQgaW4gdGhlIGZhY2Ugb2YgZmFpbHVyZS4KKyAgICAgICAgIyBJc3N1ZSAjNzkwMi4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBmcm9tIC5vcyBpbXBvcnQgc2VwCisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGxpY2l0IHJlbGF0aXZlIGltcG9ydCB0cmlnZ2VyZWQgYW4gIgorICAgICAgICAgICAgICAgICAgICAgICJpbXBsaWNpdCBhYnNvbHV0ZSBpbXBvcnQiKQorCisKK2NsYXNzIFRlc3RTeW1ib2xpY2FsbHlMaW5rZWRQYWNrYWdlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBwYWNrYWdlX25hbWUgPSAnc2FtcGxlJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnRhZ2dlZCk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudGFnZ2VkKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnBhY2thZ2VfbmFtZSk6CisgICAgICAgICAgICBzeW1saW5rX3N1cHBvcnQucmVtb3ZlX3N5bWxpbmsoc2VsZi5wYWNrYWdlX25hbWUpCisgICAgICAgIHNlbGYub3JpZ19zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCisKKyAgICAgICAgIyBjcmVhdGUgYSBzYW1wbGUgcGFja2FnZTsgaW1hZ2luZSB5b3UgaGF2ZSBhIHBhY2thZ2Ugd2l0aCBhIHRhZyBhbmQKKyAgICAgICAgIyAgeW91IHdhbnQgdG8gc3ltYm9saWNhbGx5IGxpbmsgaXQgZnJvbSBpdHMgdW50YWdnZWQgbmFtZS4KKyAgICAgICAgb3MubWtkaXIoc2VsZi50YWdnZWQpCisgICAgICAgIGluaXRfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRhZ2dlZCwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgb3Blbihpbml0X2ZpbGUsICd3JykuY2xvc2UoKQorICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMoaW5pdF9maWxlKQorCisgICAgICAgICMgbm93IGNyZWF0ZSBhIHN5bWxpbmsgdG8gdGhlIHRhZ2dlZCBwYWNrYWdlCisgICAgICAgICMgc2FtcGxlIC0+IHNhbXBsZS10YWdnZWQKKyAgICAgICAgc3ltbGlua19zdXBwb3J0LnN5bWxpbmsoc2VsZi50YWdnZWQsIHNlbGYucGFja2FnZV9uYW1lKQorCisgICAgICAgIGFzc2VydCBvcy5wYXRoLmlzZGlyKHNlbGYucGFja2FnZV9uYW1lKQorICAgICAgICBhc3NlcnQgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNlbGYucGFja2FnZV9uYW1lLCAnX19pbml0X18ucHknKSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0YWdnZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnBhY2thZ2VfbmFtZSArICctdGFnZ2VkJworCisgICAgIyByZWdyZXNzaW9uIHRlc3QgZm9yIGlzc3VlNjcyNworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKAorICAgICAgICBub3QgaGFzYXR0cihzeXMsICdnZXR3aW5kb3dzdmVyc2lvbicpCisgICAgICAgIG9yIHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpID49ICg2LCAwKSwKKyAgICAgICAgIldpbmRvd3MgVmlzdGEgb3IgbGF0ZXIgcmVxdWlyZWQiKQorICAgIEBzeW1saW5rX3N1cHBvcnQuc2tpcF91bmxlc3Nfc3ltbGluaworICAgIGRlZiB0ZXN0X3N5bWxpbmtlZF9kaXJfaW1wb3J0YWJsZShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgc2FtcGxlIGNhbiBvbmx5IGJlIGltcG9ydGVkIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgICAgICBzeXMucGF0aFs6XSA9IFsnLiddCisKKyAgICAgICAgIyBhbmQgdHJ5IHRvIGltcG9ydCB0aGUgcGFja2FnZQorICAgICAgICBfX2ltcG9ydF9fKHNlbGYucGFja2FnZV9uYW1lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIG5vdyBjbGVhbnVwCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYucGFja2FnZV9uYW1lKToKKyAgICAgICAgICAgIHN5bWxpbmtfc3VwcG9ydC5yZW1vdmVfc3ltbGluayhzZWxmLnBhY2thZ2VfbmFtZSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi50YWdnZWQpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnRhZ2dlZCkKKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLm9yaWdfc3lzX3BhdGgKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIHJ1bl91bml0dGVzdChJbXBvcnRUZXN0cywgUHljUmV3cml0aW5nVGVzdHMsIFBhdGhzVGVzdHMsCisgICAgICAgIFJlbGF0aXZlSW1wb3J0VGVzdHMsIFRlc3RTeW1ib2xpY2FsbHlMaW5rZWRQYWNrYWdlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICMgVGVzdCBuZWVkcyB0byBiZSBhIHBhY2thZ2UsIHNvIHdlIGNhbiBkbyByZWxhdGl2ZSBpbXBvcnRzLgorICAgIGZyb20gdGVzdC50ZXN0X2ltcG9ydCBpbXBvcnQgdGVzdF9tYWluCisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ltcG9ydGhvb2tzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZhYjFmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ltcG9ydGhvb2tzLnB5CkBAIC0wLDAgKzEsMjU1IEBACitpbXBvcnQgc3lzCitpbXBvcnQgaW1wCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCit0ZXN0X3NyYyA9ICIiIlwKK2RlZiBnZXRfbmFtZSgpOgorICAgIHJldHVybiBfX25hbWVfXworZGVmIGdldF9maWxlKCk6CisgICAgcmV0dXJuIF9fZmlsZV9fCisiIiIKKworYWJzaW1wID0gImltcG9ydCBzdWJcbiIKK3JlbGltcCA9ICJmcm9tIC4gaW1wb3J0IHN1YlxuIgorZGVlcHJlbGltcCA9ICJmcm9tIC4uLi4gaW1wb3J0IHN1YlxuIgorZnV0aW1wID0gImZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0XG4iCisKK3JlbG9hZF9zcmMgPSB0ZXN0X3NyYysiIiJcCityZWxvYWRlZCA9IFRydWUKKyIiIgorCit0ZXN0X2NvID0gY29tcGlsZSh0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQorcmVsb2FkX2NvID0gY29tcGlsZShyZWxvYWRfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCisKK3Rlc3QyX29sZGFic19jbyA9IGNvbXBpbGUoYWJzaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKK3Rlc3QyX25ld2Fic19jbyA9IGNvbXBpbGUoZnV0aW1wICsgYWJzaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKK3Rlc3QyX25ld3JlbF9jbyA9IGNvbXBpbGUocmVsaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKK3Rlc3QyX2RlZXByZWxfY28gPSBjb21waWxlKGRlZXByZWxpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQordGVzdDJfZnV0cmVsX2NvID0gY29tcGlsZShmdXRpbXAgKyByZWxpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQorCit0ZXN0X3BhdGggPSAiISEhX3Rlc3RfISEhIgorCisKK2NsYXNzIFRlc3RJbXBvcnRlcjoKKworICAgIG1vZHVsZXMgPSB7CisgICAgICAgICJob29rdGVzdG1vZHVsZSI6IChGYWxzZSwgdGVzdF9jbyksCisgICAgICAgICJob29rdGVzdHBhY2thZ2UiOiAoVHJ1ZSwgdGVzdF9jbyksCisgICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViIjogKFRydWUsIHRlc3RfY28pLAorICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIiOiAoVHJ1ZSwgdGVzdF9jbyksCisgICAgICAgICJob29rdGVzdHBhY2thZ2Uub2xkYWJzIjogKEZhbHNlLCB0ZXN0Ml9vbGRhYnNfY28pLAorICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm5ld2FicyI6IChGYWxzZSwgdGVzdDJfbmV3YWJzX2NvKSwKKyAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5uZXdyZWwiOiAoRmFsc2UsIHRlc3QyX25ld3JlbF9jbyksCisgICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5zdWJlc3QiOiAoVHJ1ZSwgdGVzdDJfZGVlcHJlbF9jbyksCisgICAgICAgICJob29rdGVzdHBhY2thZ2UuZnV0cmVsIjogKEZhbHNlLCB0ZXN0Ml9mdXRyZWxfY28pLAorICAgICAgICAic3ViIjogKEZhbHNlLCB0ZXN0X2NvKSwKKyAgICAgICAgInJlbG9hZG1vZHVsZSI6IChGYWxzZSwgdGVzdF9jbyksCisgICAgfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGg9dGVzdF9wYXRoKToKKyAgICAgICAgaWYgcGF0aCAhPSB0ZXN0X3BhdGg6CisgICAgICAgICAgICAjIGlmIG91dCBjbGFzcyBpcyBvbiBzeXMucGF0aF9ob29rcywgd2UgbXVzdCByYWlzZQorICAgICAgICAgICAgIyBJbXBvcnRFcnJvciBmb3IgYW55IHBhdGggaXRlbSB0aGF0IHdlIGNhbid0IGhhbmRsZS4KKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKworICAgIGRlZiBfZ2V0X19wYXRoX18oc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgaWYgZnVsbG5hbWUgaW4gc2VsZi5tb2R1bGVzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICBpc3BrZywgY29kZSA9IHNlbGYubW9kdWxlc1tmdWxsbmFtZV0KKyAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuc2V0ZGVmYXVsdChmdWxsbmFtZSxpbXAubmV3X21vZHVsZShmdWxsbmFtZSkpCisgICAgICAgIG1vZC5fX2ZpbGVfXyA9ICI8JXM+IiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgIG1vZC5fX2xvYWRlcl9fID0gc2VsZgorICAgICAgICBpZiBpc3BrZzoKKyAgICAgICAgICAgIG1vZC5fX3BhdGhfXyA9IHNlbGYuX2dldF9fcGF0aF9fKCkKKyAgICAgICAgZXhlYyBjb2RlIGluIG1vZC5fX2RpY3RfXworICAgICAgICByZXR1cm4gbW9kCisKKworY2xhc3MgTWV0YUltcG9ydGVyKFRlc3RJbXBvcnRlcik6CisgICAgZGVmIF9nZXRfX3BhdGhfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFtdCisKK2NsYXNzIFBhdGhJbXBvcnRlcihUZXN0SW1wb3J0ZXIpOgorICAgIGRlZiBfZ2V0X19wYXRoX18oc2VsZik6CisgICAgICAgIHJldHVybiBbc2VsZi5wYXRoXQorCisKK2NsYXNzIEltcG9ydEJsb2NrZXI6CisgICAgIiIiUGxhY2UgYW4gSW1wb3J0QmxvY2tlciBpbnN0YW5jZSBvbiBzeXMubWV0YV9wYXRoIGFuZCB5b3UKKyAgICBjYW4gYmUgc3VyZSB0aGUgbW9kdWxlcyB5b3Ugc3BlY2lmaWVkIGNhbid0IGJlIGltcG9ydGVkLCBldmVuCisgICAgaWYgaXQncyBhIGJ1aWx0aW4uIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICpuYW1lc3RvYmxvY2spOgorICAgICAgICBzZWxmLm5hbWVzdG9ibG9jayA9IGRpY3QuZnJvbWtleXMobmFtZXN0b2Jsb2NrKQorICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgaWYgZnVsbG5hbWUgaW4gc2VsZi5uYW1lc3RvYmxvY2s6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yLCAiSSBkYXJlIHlvdSIKKworCitjbGFzcyBJbXBXcmFwcGVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGg9Tm9uZSk6CisgICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmUgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorCisgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICBzdWJuYW1lID0gZnVsbG5hbWUuc3BsaXQoIi4iKVstMV0KKyAgICAgICAgaWYgc3VibmFtZSAhPSBmdWxsbmFtZSBhbmQgc2VsZi5wYXRoIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBzZWxmLnBhdGggaXMgTm9uZToKKyAgICAgICAgICAgIHBhdGggPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXRoID0gW3NlbGYucGF0aF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZSwgZmlsZW5hbWUsIHN0dWZmID0gaW1wLmZpbmRfbW9kdWxlKHN1Ym5hbWUsIHBhdGgpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBJbXBMb2FkZXIoZmlsZSwgZmlsZW5hbWUsIHN0dWZmKQorCisKK2NsYXNzIEltcExvYWRlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBmaWxlbmFtZSwgc3R1ZmYpOgorICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLnN0dWZmID0gc3R1ZmYKKworICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIG1vZCA9IGltcC5sb2FkX21vZHVsZShmdWxsbmFtZSwgc2VsZi5maWxlLCBzZWxmLmZpbGVuYW1lLCBzZWxmLnN0dWZmKQorICAgICAgICBpZiBzZWxmLmZpbGU6CisgICAgICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQorICAgICAgICBtb2QuX19sb2FkZXJfXyA9IHNlbGYgICMgZm9yIGludHJvc3BlY3Rpb24KKyAgICAgICAgcmV0dXJuIG1vZAorCisKK2NsYXNzIEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc2VsZi5tZXRhX3BhdGggPSBzeXMubWV0YV9wYXRoWzpdCisgICAgICAgIHNlbGYucGF0aF9ob29rcyA9IHN5cy5wYXRoX2hvb2tzWzpdCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKKyAgICAgICAgc2VsZi5tb2R1bGVzX2JlZm9yZSA9IHN5cy5tb2R1bGVzLmNvcHkoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYucGF0aAorICAgICAgICBzeXMubWV0YV9wYXRoWzpdID0gc2VsZi5tZXRhX3BhdGgKKyAgICAgICAgc3lzLnBhdGhfaG9va3NbOl0gPSBzZWxmLnBhdGhfaG9va3MKKyAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY2xlYXIoKQorICAgICAgICBzeXMubW9kdWxlcy5jbGVhcigpCisgICAgICAgIHN5cy5tb2R1bGVzLnVwZGF0ZShzZWxmLm1vZHVsZXNfYmVmb3JlKQorCisKK2NsYXNzIEltcG9ydEhvb2tzVGVzdENhc2UoSW1wb3J0SG9va3NCYXNlVGVzdENhc2UpOgorCisgICAgZGVmIGRvVGVzdEltcG9ydHMoc2VsZiwgaW1wb3J0ZXI9Tm9uZSk6CisgICAgICAgIGltcG9ydCBob29rdGVzdG1vZHVsZQorICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlCisgICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2Uuc3ViCisgICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0bW9kdWxlLmdldF9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0bW9kdWxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UuZ2V0X25hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uuc3ViLmdldF9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLmdldF9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyIikKKyAgICAgICAgaWYgaW1wb3J0ZXI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0bW9kdWxlLl9fbG9hZGVyX18sIGltcG9ydGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UuX19sb2FkZXJfXywgaW1wb3J0ZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5zdWIuX19sb2FkZXJfXywgaW1wb3J0ZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLl9fbG9hZGVyX18sIGltcG9ydGVyKQorCisgICAgICAgIFRlc3RJbXBvcnRlci5tb2R1bGVzWydyZWxvYWRtb2R1bGUnXSA9IChGYWxzZSwgdGVzdF9jbykKKyAgICAgICAgaW1wb3J0IHJlbG9hZG1vZHVsZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIocmVsb2FkbW9kdWxlLCdyZWxvYWRlZCcpKQorCisgICAgICAgIFRlc3RJbXBvcnRlci5tb2R1bGVzWydyZWxvYWRtb2R1bGUnXSA9IChGYWxzZSwgcmVsb2FkX2NvKQorICAgICAgICBpbXAucmVsb2FkKHJlbG9hZG1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIocmVsb2FkbW9kdWxlLCdyZWxvYWRlZCcpKQorCisgICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2Uub2xkYWJzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm9sZGFicy5nZXRfbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2Uub2xkYWJzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uub2xkYWJzLnN1YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBob29rdGVzdHBhY2thZ2Uuc3ViKQorCisgICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2UubmV3cmVsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm5ld3JlbC5nZXRfbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2UubmV3cmVsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UubmV3cmVsLnN1YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBob29rdGVzdHBhY2thZ2Uuc3ViKQorCisgICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5zdWJlc3QgYXMgc3ViZXN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViZXN0LmdldF9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLnN1YmVzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViZXN0LnN1YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBob29rdGVzdHBhY2thZ2Uuc3ViKQorCisgICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2UuZnV0cmVsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLmZ1dHJlbC5nZXRfbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2UuZnV0cmVsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UuZnV0cmVsLnN1YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBob29rdGVzdHBhY2thZ2Uuc3ViKQorCisgICAgICAgIGltcG9ydCBzdWIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWIuZ2V0X25hbWUoKSwgInN1YiIpCisKKyAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5uZXdhYnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UubmV3YWJzLmdldF9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5uZXdhYnMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5uZXdhYnMuc3ViLCBzdWIpCisKKyAgICBkZWYgdGVzdE1ldGFQYXRoKHNlbGYpOgorICAgICAgICBpID0gTWV0YUltcG9ydGVyKCkKKyAgICAgICAgc3lzLm1ldGFfcGF0aC5hcHBlbmQoaSkKKyAgICAgICAgc2VsZi5kb1Rlc3RJbXBvcnRzKGkpCisKKyAgICBkZWYgdGVzdFBhdGhIb29rKHNlbGYpOgorICAgICAgICBzeXMucGF0aF9ob29rcy5hcHBlbmQoUGF0aEltcG9ydGVyKQorICAgICAgICBzeXMucGF0aC5hcHBlbmQodGVzdF9wYXRoKQorICAgICAgICBzZWxmLmRvVGVzdEltcG9ydHMoKQorCisgICAgZGVmIHRlc3RCbG9ja2VyKHNlbGYpOgorICAgICAgICBtbmFtZSA9ICJleGNlcHRpb25zIiAgIyBhbiBhcmJpdHJhcnkgaGFybWxlc3MgYnVpbHRpbiBtb2R1bGUKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubG9hZChtbmFtZSkKKyAgICAgICAgc3lzLm1ldGFfcGF0aC5hcHBlbmQoSW1wb3J0QmxvY2tlcihtbmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBfX2ltcG9ydF9fLCBtbmFtZSkKKworICAgIGRlZiB0ZXN0SW1wV3JhcHBlcihzZWxmKToKKyAgICAgICAgaSA9IEltcFdyYXBwZXIoKQorICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChpKQorICAgICAgICBzeXMucGF0aF9ob29rcy5hcHBlbmQoSW1wV3JhcHBlcikKKyAgICAgICAgbW5hbWVzID0gKCJjb2xvcnN5cyIsICJ1cmxwYXJzZSIsICJkaXN0dXRpbHMuY29yZSIsICJjb21waWxlci5taXNjIikKKyAgICAgICAgZm9yIG1uYW1lIGluIG1uYW1lczoKKyAgICAgICAgICAgIHBhcmVudCA9IG1uYW1lLnNwbGl0KCIuIilbMF0KKyAgICAgICAgICAgIGZvciBuIGluIHN5cy5tb2R1bGVzLmtleXMoKToKKyAgICAgICAgICAgICAgICBpZiBuLnN0YXJ0c3dpdGgocGFyZW50KToKKyAgICAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25dCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgiVGhlIGNvbXBpbGVyIHBhY2thZ2UgaXMgZGVwcmVjYXRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5kIHJlbW92ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIGZvciBtbmFtZSBpbiBtbmFtZXM6CisgICAgICAgICAgICAgICAgbSA9IF9faW1wb3J0X18obW5hbWUsIGdsb2JhbHMoKSwgbG9jYWxzKCksIFsiX19kdW1teV9fIl0pCisgICAgICAgICAgICAgICAgbS5fX2xvYWRlcl9fICAjIHRvIG1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBoYW5kbGVkIHRoZSBpbXBvcnQKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChJbXBvcnRIb29rc1Rlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9pbXBvcnRsaWIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9pbXBvcnRsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFkOGRhNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ltcG9ydGxpYi5weQpAQCAtMCwwICsxLDE3NiBAQAoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgdW5jYWNoZSgqbmFtZXMpOgorICAgICIiIlVuY2FjaGUgYSBtb2R1bGUgZnJvbSBzeXMubW9kdWxlcy4KKworICAgIEEgYmFzaWMgc2FuaXR5IGNoZWNrIGlzIHBlcmZvcm1lZCB0byBwcmV2ZW50IHVuY2FjaGluZyBtb2R1bGVzIHRoYXQgZWl0aGVyCisgICAgY2Fubm90L3Nob3VsZG4ndCBiZSB1bmNhY2hlZC4KKworICAgICIiIgorICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICBpZiBuYW1lIGluICgnc3lzJywgJ21hcnNoYWwnLCAnaW1wJyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICJjYW5ub3QgdW5jYWNoZSB7MH0gYXMgaXQgd2lsbCBicmVhayBfaW1wb3J0bGliIi5mb3JtYXQobmFtZSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgdHJ5OgorICAgICAgICB5aWVsZAorICAgIGZpbmFsbHk6CisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIGltcG9ydF9zdGF0ZSgqKmt3YXJncyk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIG1hbmFnZSB0aGUgdmFyaW91cyBpbXBvcnRlcnMgYW5kIHN0b3JlZCBzdGF0ZSBpbiB0aGUKKyAgICBzeXMgbW9kdWxlLgorCisgICAgVGhlICdtb2R1bGVzJyBhdHRyaWJ1dGUgaXMgbm90IHN1cHBvcnRlZCBhcyB0aGUgaW50ZXJwcmV0ZXIgc3RhdGUgc3RvcmVzIGEKKyAgICBwb2ludGVyIHRvIHRoZSBkaWN0IHRoYXQgdGhlIGludGVycHJldGVyIHVzZXMgaW50ZXJuYWxseTsKKyAgICByZWFzc2lnbmluZyB0byBzeXMubW9kdWxlcyBkb2VzIG5vdCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdC4KKworICAgICIiIgorICAgIG9yaWdpbmFscyA9IHt9CisgICAgdHJ5OgorICAgICAgICBmb3IgYXR0ciwgZGVmYXVsdCBpbiAoKCdtZXRhX3BhdGgnLCBbXSksICgncGF0aCcsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncGF0aF9ob29rcycsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncGF0aF9pbXBvcnRlcl9jYWNoZScsIHt9KSk6CisgICAgICAgICAgICBvcmlnaW5hbHNbYXR0cl0gPSBnZXRhdHRyKHN5cywgYXR0cikKKyAgICAgICAgICAgIGlmIGF0dHIgaW4ga3dhcmdzOgorICAgICAgICAgICAgICAgIG5ld192YWx1ZSA9IGt3YXJnc1thdHRyXQorICAgICAgICAgICAgICAgIGRlbCBrd2FyZ3NbYXR0cl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3X3ZhbHVlID0gZGVmYXVsdAorICAgICAgICAgICAgc2V0YXR0cihzeXMsIGF0dHIsIG5ld192YWx1ZSkKKyAgICAgICAgaWYgbGVuKGt3YXJncyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAndW5yZWNvZ25pemVkIGFyZ3VtZW50czogezB9Jy5mb3JtYXQoa3dhcmdzLmtleXMoKSkpCisgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIG9yaWdpbmFscy5pdGVtcygpOgorICAgICAgICAgICAgc2V0YXR0cihzeXMsIGF0dHIsIHZhbHVlKQorCisKK2NsYXNzIG1vY2tfbW9kdWxlcyhvYmplY3QpOgorCisgICAgIiIiQSBtb2NrIGltcG9ydGVyL2xvYWRlci4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqbmFtZXMpOgorICAgICAgICBzZWxmLm1vZHVsZXMgPSB7fQorICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIGlmIG5vdCBuYW1lLmVuZHN3aXRoKCcuX19pbml0X18nKToKKyAgICAgICAgICAgICAgICBpbXBvcnRfbmFtZSA9IG5hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW1wb3J0X25hbWUgPSBuYW1lWzotbGVuKCcuX19pbml0X18nKV0KKyAgICAgICAgICAgIGlmICcuJyBub3QgaW4gbmFtZToKKyAgICAgICAgICAgICAgICBwYWNrYWdlID0gTm9uZQorICAgICAgICAgICAgZWxpZiBpbXBvcnRfbmFtZSA9PSBuYW1lOgorICAgICAgICAgICAgICAgIHBhY2thZ2UgPSBuYW1lLnJzcGxpdCgnLicsIDEpWzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhY2thZ2UgPSBpbXBvcnRfbmFtZQorICAgICAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoaW1wb3J0X25hbWUpCisgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKKyAgICAgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9ICc8bW9jayBfX2ZpbGVfXz4nCisgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBwYWNrYWdlCisgICAgICAgICAgICBtb2R1bGUuYXR0ciA9IG5hbWUKKyAgICAgICAgICAgIGlmIGltcG9ydF9uYW1lICE9IG5hbWU6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gWyc8bW9jayBfX3BhdGhfXz4nXQorICAgICAgICAgICAgc2VsZi5tb2R1bGVzW2ltcG9ydF9uYW1lXSA9IG1vZHVsZQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGVzW25hbWVdCisKKyAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgICAgIGlmIGZ1bGxuYW1lIG5vdCBpbiBzZWxmLm1vZHVsZXM6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIGlmIGZ1bGxuYW1lIG5vdCBpbiBzZWxmLm1vZHVsZXM6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbZnVsbG5hbWVdID0gc2VsZi5tb2R1bGVzW2Z1bGxuYW1lXQorICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlc1tmdWxsbmFtZV0KKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuX3VuY2FjaGUgPSB1bmNhY2hlKCpzZWxmLm1vZHVsZXMua2V5cygpKQorICAgICAgICBzZWxmLl91bmNhY2hlLl9fZW50ZXJfXygpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKToKKyAgICAgICAgc2VsZi5fdW5jYWNoZS5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKQorCisKKworY2xhc3MgSW1wb3J0TW9kdWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVGVzdCBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZS4iIiIKKworICAgIGRlZiB0ZXN0X21vZHVsZV9pbXBvcnQoc2VsZik6CisgICAgICAgICMgVGVzdCBpbXBvcnRpbmcgYSB0b3AtbGV2ZWwgbW9kdWxlLgorICAgICAgICB3aXRoIG1vY2tfbW9kdWxlcygndG9wX2xldmVsJykgYXMgbW9jazoKKyAgICAgICAgICAgIHdpdGggaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAndG9wX2xldmVsJykKKworICAgIGRlZiB0ZXN0X2Fic29sdXRlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgorICAgICAgICAjIFRlc3QgaW1wb3J0aW5nIGEgbW9kdWxlIGZyb20gYSBwYWNrYWdlIHdpdGggYW4gYWJzb2x1dGUgbmFtZS4KKyAgICAgICAgcGtnX25hbWUgPSAncGtnJworICAgICAgICBwa2dfbG9uZ19uYW1lID0gJ3swfS5fX2luaXRfXycuZm9ybWF0KHBrZ19uYW1lKQorICAgICAgICBuYW1lID0gJ3swfS5tb2QnLmZvcm1hdChwa2dfbmFtZSkKKyAgICAgICAgd2l0aCBtb2NrX21vZHVsZXMocGtnX2xvbmdfbmFtZSwgbmFtZSkgYXMgbW9jazoKKyAgICAgICAgICAgIHdpdGggaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG5hbWUpCisKKyAgICBkZWYgdGVzdF9zaGFsbG93X3JlbGF0aXZlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgorICAgICAgICBtb2R1bGVzID0gWydhLl9faW5pdF9fJywgJ2EuYi5fX2luaXRfXycsICdhLmIuYy5fX2luaXRfXycsICdhLmIuYy5kJ10KKyAgICAgICAgd2l0aCBtb2NrX21vZHVsZXMoKm1vZHVsZXMpIGFzIG1vY2s6CisgICAgICAgICAgICB3aXRoIGltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnLmQnLCAnYS5iLmMnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAnYS5iLmMuZCcpCisKKyAgICBkZWYgdGVzdF9kZWVwX3JlbGF0aXZlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgorICAgICAgICAjIFRlc3QgaW1wb3J0aW5nIGEgbW9kdWxlIGZyb20gYSBwYWNrYWdlIHRocm91Z2ggYSByZWxhdHZlIGltcG9ydC4KKyAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmIuX19pbml0X18nLCAnYS5jJ10KKyAgICAgICAgd2l0aCBtb2NrX21vZHVsZXMoKm1vZHVsZXMpIGFzIG1vY2s6CisgICAgICAgICAgICB3aXRoIGltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnLi5jJywgJ2EuYicpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdhLmMnKQorCisgICAgZGVmIHRlc3RfYWJzb2x1dGVfaW1wb3J0X3dpdGhfcGFja2FnZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGltcG9ydGluZyBhIG1vZHVsZSBmcm9tIGEgcGFja2FnZSB3aXRoIGFuIGFic29sdXRlIG5hbWUgd2l0aAorICAgICAgICAjIHRoZSAncGFja2FnZScgYXJndW1lbnQgZ2l2ZW4uCisgICAgICAgIHBrZ19uYW1lID0gJ3BrZycKKyAgICAgICAgcGtnX2xvbmdfbmFtZSA9ICd7MH0uX19pbml0X18nLmZvcm1hdChwa2dfbmFtZSkKKyAgICAgICAgbmFtZSA9ICd7MH0ubW9kJy5mb3JtYXQocGtnX25hbWUpCisgICAgICAgIHdpdGggbW9ja19tb2R1bGVzKHBrZ19sb25nX25hbWUsIG5hbWUpIGFzIG1vY2s6CisgICAgICAgICAgICB3aXRoIGltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lLCBwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgbmFtZSkKKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX2ltcG9ydF93b19wYWNrYWdlKHNlbGYpOgorICAgICAgICAjIFJlbGF0aXZlIGltcG9ydHMgY2Fubm90IGhhcHBlbiB3aXRob3V0IHRoZSAncGFja2FnZScgYXJndW1lbnQgYmVpbmcKKyAgICAgICAgIyBzZXQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUsICcuc3VwcG9ydCcpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorICAgIHJ1bl91bml0dGVzdChJbXBvcnRNb2R1bGVUZXN0cykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9pbmRleC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2luZGV4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MmI0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9pbmRleC5weQpAQCAtMCwwICsxLDMyMyBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IG9wZXJhdG9yCitmcm9tIHN5cyBpbXBvcnQgbWF4aW50CittYXhzaXplID0gdGVzdF9zdXBwb3J0Lk1BWF9QeV9zc2l6ZV90CittaW5zaXplID0gLW1heHNpemUtMQorCitjbGFzcyBvbGRzdHlsZToKKyAgICBkZWYgX19pbmRleF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbmQKKworY2xhc3MgbmV3c3R5bGUob2JqZWN0KToKKyAgICBkZWYgX19pbmRleF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5pbmQKKworY2xhc3MgVHJhcEludChpbnQpOgorICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKK2NsYXNzIFRyYXBMb25nKGxvbmcpOgorICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKK2NsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm8gPSBvbGRzdHlsZSgpCisgICAgICAgIHNlbGYubiA9IG5ld3N0eWxlKCkKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLm8uaW5kID0gLTIKKyAgICAgICAgc2VsZi5uLmluZCA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pbmRleChzZWxmLm8pLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pbmRleChzZWxmLm4pLCAyKQorCisgICAgZGVmIHRlc3Rfc2xpY2Uoc2VsZik6CisgICAgICAgIHNlbGYuby5pbmQgPSAxCisgICAgICAgIHNlbGYubi5pbmQgPSAyCisgICAgICAgIHNsYyA9IHNsaWNlKHNlbGYubywgc2VsZi5vLCBzZWxmLm8pCisgICAgICAgIGNoZWNrX3NsYyA9IHNsaWNlKDEsIDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xjLmluZGljZXMoc2VsZi5vKSwgY2hlY2tfc2xjLmluZGljZXMoMSkpCisgICAgICAgIHNsYyA9IHNsaWNlKHNlbGYubiwgc2VsZi5uLCBzZWxmLm4pCisgICAgICAgIGNoZWNrX3NsYyA9IHNsaWNlKDIsIDIsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xjLmluZGljZXMoc2VsZi5uKSwgY2hlY2tfc2xjLmluZGljZXMoMikpCisKKyAgICBkZWYgdGVzdF93cmFwcGVycyhzZWxmKToKKyAgICAgICAgc2VsZi5vLmluZCA9IDQKKyAgICAgICAgc2VsZi5uLmluZCA9IDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg2IC5fX2luZGV4X18oKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtN0wuX19pbmRleF9fKCksIC03KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuby5fX2luZGV4X18oKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm4uX19pbmRleF9fKCksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZS5fX2luZGV4X18oKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZS5fX2luZGV4X18oKSwgMCkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzZXMoc2VsZik6CisgICAgICAgIHIgPSByYW5nZSgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyW1RyYXBJbnQoNSk6VHJhcEludCgxMCldLCByWzU6MTBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbVHJhcExvbmcoNSk6VHJhcExvbmcoMTApXSwgcls1OjEwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShUcmFwSW50KCkpLmluZGljZXMoMCksICgwLDAsMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoVHJhcExvbmcoMCkpLmluZGljZXMoMCksICgwLDAsMSkpCisKKyAgICBkZWYgdGVzdF9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5vLmluZCA9ICdkdW1iJworICAgICAgICBzZWxmLm4uaW5kID0gJ2JhZCcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbmRleCwgc2VsZi5vKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmluZGV4LCBzZWxmLm4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2xpY2Uoc2VsZi5vKS5pbmRpY2VzLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNsaWNlKHNlbGYubikuaW5kaWNlcywgMCkKKworCitjbGFzcyBTZXFUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUaGlzIHRlc3QgY2FzZSBpc24ndCBydW4gZGlyZWN0bHkuIEl0IGp1c3QgZGVmaW5lcyBjb21tb24gdGVzdHMKKyAgICAjIHRvIHRoZSBkaWZmZXJlbnQgc2VxdWVuY2UgdHlwZXMgYmVsb3cKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubyA9IG9sZHN0eWxlKCkKKyAgICAgICAgc2VsZi5uID0gbmV3c3R5bGUoKQorICAgICAgICBzZWxmLm8yID0gb2xkc3R5bGUoKQorICAgICAgICBzZWxmLm4yID0gbmV3c3R5bGUoKQorCisgICAgZGVmIHRlc3RfaW5kZXgoc2VsZik6CisgICAgICAgIHNlbGYuby5pbmQgPSAtMgorICAgICAgICBzZWxmLm4uaW5kID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxW3NlbGYubl0sIHNlbGYuc2VxWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxW3NlbGYub10sIHNlbGYuc2VxWy0yXSkKKworICAgIGRlZiB0ZXN0X3NsaWNlKHNlbGYpOgorICAgICAgICBzZWxmLm8uaW5kID0gMQorICAgICAgICBzZWxmLm8yLmluZCA9IDMKKyAgICAgICAgc2VsZi5uLmluZCA9IDIKKyAgICAgICAgc2VsZi5uMi5pbmQgPSA0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5vOnNlbGYubzJdLCBzZWxmLnNlcVsxOjNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxW3NlbGYubjpzZWxmLm4yXSwgc2VsZi5zZXFbMjo0XSkKKworICAgIGRlZiB0ZXN0X3NsaWNlX2J1Zzc1MzIoc2VsZik6CisgICAgICAgIHNlcWxlbiA9IGxlbihzZWxmLnNlcSkKKyAgICAgICAgc2VsZi5vLmluZCA9IGludChzZXFsZW4gKiAxLjUpCisgICAgICAgIHNlbGYubi5pbmQgPSBzZXFsZW4gKyAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5vOl0sIHNlbGYuc2VxWzA6MF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbOnNlbGYub10sIHNlbGYuc2VxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxW3NlbGYubjpdLCBzZWxmLnNlcVswOjBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxWzpzZWxmLm5dLCBzZWxmLnNlcSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnNlcSwgQ2xhc3NpY1NlcSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBUaGVzZSB0ZXN0cyBmYWlsIGZvciBDbGFzc2ljU2VxIChzZWUgYnVnICM3NTMyKQorICAgICAgICBzZWxmLm8yLmluZCA9IC1zZXFsZW4gLSAyCisgICAgICAgIHNlbGYubjIuaW5kID0gLWludChzZXFsZW4gKiAxLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5vMjpdLCBzZWxmLnNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVs6c2VsZi5vMl0sIHNlbGYuc2VxWzA6MF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5uMjpdLCBzZWxmLnNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVs6c2VsZi5uMl0sIHNlbGYuc2VxWzA6MF0pCisKKyAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6CisgICAgICAgIHNlbGYuby5pbmQgPSAzCisgICAgICAgIHNlbGYubi5pbmQgPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXEgKiBzZWxmLm8sIHNlbGYuc2VxICogMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcSAqIHNlbGYubiwgc2VsZi5zZXEgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubyAqIHNlbGYuc2VxLCBzZWxmLnNlcSAqIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uICogc2VsZi5zZXEsIHNlbGYuc2VxICogMikKKworICAgIGRlZiB0ZXN0X3dyYXBwZXJzKHNlbGYpOgorICAgICAgICBzZWxmLm8uaW5kID0gNAorICAgICAgICBzZWxmLm4uaW5kID0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxLl9fZ2V0aXRlbV9fKHNlbGYubyksIHNlbGYuc2VxWzRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxLl9fbXVsX18oc2VsZi5vKSwgc2VsZi5zZXEgKiA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxLl9fcm11bF9fKHNlbGYubyksIHNlbGYuc2VxICogNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcS5fX2dldGl0ZW1fXyhzZWxmLm4pLCBzZWxmLnNlcVs1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcS5fX211bF9fKHNlbGYubiksIHNlbGYuc2VxICogNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcS5fX3JtdWxfXyhzZWxmLm4pLCBzZWxmLnNlcSAqIDUpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2VzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxW1RyYXBJbnQoKV0sIHNlbGYuc2VxWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VxW1RyYXBMb25nKCldLCBzZWxmLnNlcVswXSkKKworICAgIGRlZiB0ZXN0X2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLm8uaW5kID0gJ2R1bWInCisgICAgICAgIHNlbGYubi5pbmQgPSAnYmFkJworICAgICAgICBpbmRleG9iaiA9IGxhbWJkYSB4LCBvYmo6IG9iai5zZXFbeF0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbmRleG9iaiwgc2VsZi5vLCBzZWxmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGluZGV4b2JqLCBzZWxmLm4sIHNlbGYpCisgICAgICAgIHNsaWNlb2JqID0gbGFtYmRhIHgsIG9iajogb2JqLnNlcVt4Ol0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzbGljZW9iaiwgc2VsZi5vLCBzZWxmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNsaWNlb2JqLCBzZWxmLm4sIHNlbGYpCisKKworY2xhc3MgTGlzdFRlc3RDYXNlKFNlcVRlc3RDYXNlKToKKyAgICBzZXEgPSBbMCwxMCwyMCwzMCw0MCw1MF0KKworICAgIGRlZiB0ZXN0X3NldGRlbGl0ZW0oc2VsZik6CisgICAgICAgIHNlbGYuby5pbmQgPSAtMgorICAgICAgICBzZWxmLm4uaW5kID0gMgorICAgICAgICBsc3QgPSBsaXN0KCdhYiFjZGVmZ2hpIWonKQorICAgICAgICBkZWwgbHN0W3NlbGYub10KKyAgICAgICAgZGVsIGxzdFtzZWxmLm5dCisgICAgICAgIGxzdFtzZWxmLm9dID0gJ1gnCisgICAgICAgIGxzdFtzZWxmLm5dID0gJ1knCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0LCBsaXN0KCdhYllkZWZnaFhqJykpCisKKyAgICAgICAgbHN0ID0gWzUsIDYsIDcsIDgsIDksIDEwLCAxMV0KKyAgICAgICAgbHN0Ll9fc2V0aXRlbV9fKHNlbGYubiwgImhlcmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdCwgWzUsIDYsICJoZXJlIiwgOCwgOSwgMTAsIDExXSkKKyAgICAgICAgbHN0Ll9fZGVsaXRlbV9fKHNlbGYubikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QsIFs1LCA2LCA4LCA5LCAxMCwgMTFdKQorCisgICAgZGVmIHRlc3RfaW5wbGFjZV9yZXBlYXQoc2VsZik6CisgICAgICAgIHNlbGYuby5pbmQgPSAyCisgICAgICAgIHNlbGYubi5pbmQgPSAzCisgICAgICAgIGxzdCA9IFs2LCA0XQorICAgICAgICBsc3QgKj0gc2VsZi5vCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0LCBbNiwgNCwgNiwgNF0pCisgICAgICAgIGxzdCAqPSBzZWxmLm4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QsIFs2LCA0LCA2LCA0XSAqIDMpCisKKyAgICAgICAgbHN0ID0gWzUsIDYsIDcsIDgsIDksIDExXQorICAgICAgICBsMiA9IGxzdC5fX2ltdWxfXyhzZWxmLm4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobDIsIGxzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QsIFs1LCA2LCA3LCA4LCA5LCAxMV0gKiAzKQorCisKK2NsYXNzIF9CYXNlU2VxOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZXJhYmxlKToKKyAgICAgICAgc2VsZi5fbGlzdCA9IGxpc3QoaXRlcmFibGUpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiByZXByKHNlbGYuX2xpc3QpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3QgPT0gb3RoZXIKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2xpc3QpCisKKyAgICBkZWYgX19tdWxfXyhzZWxmLCBuKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYuX2xpc3QqbikKKyAgICBfX3JtdWxfXyA9IF9fbXVsX18KKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJldHVybiBzZWxmLl9saXN0W2luZGV4XQorCisKK2NsYXNzIF9HZXRTbGljZU1peGluOgorCisgICAgZGVmIF9fZ2V0c2xpY2VfXyhzZWxmLCBpLCBqKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3QuX19nZXRzbGljZV9fKGksIGopCisKKworY2xhc3MgQ2xhc3NpY1NlcShfQmFzZVNlcSk6IHBhc3MKK2NsYXNzIE5ld1NlcShfQmFzZVNlcSwgb2JqZWN0KTogcGFzcworY2xhc3MgQ2xhc3NpY1NlcURlcHJlY2F0ZWQoX0dldFNsaWNlTWl4aW4sIENsYXNzaWNTZXEpOiBwYXNzCitjbGFzcyBOZXdTZXFEZXByZWNhdGVkKF9HZXRTbGljZU1peGluLCBOZXdTZXEpOiBwYXNzCisKKworY2xhc3MgVHVwbGVUZXN0Q2FzZShTZXFUZXN0Q2FzZSk6CisgICAgc2VxID0gKDAsMTAsMjAsMzAsNDAsNTApCisKK2NsYXNzIFN0cmluZ1Rlc3RDYXNlKFNlcVRlc3RDYXNlKToKKyAgICBzZXEgPSAidGhpcyBpcyBhIHRlc3QiCisKK2NsYXNzIEJ5dGVBcnJheVRlc3RDYXNlKFNlcVRlc3RDYXNlKToKKyAgICBzZXEgPSBieXRlYXJyYXkoInRoaXMgaXMgYSB0ZXN0IikKKworY2xhc3MgVW5pY29kZVRlc3RDYXNlKFNlcVRlc3RDYXNlKToKKyAgICBzZXEgPSB1InRoaXMgaXMgYSB0ZXN0IgorCitjbGFzcyBDbGFzc2ljU2VxVGVzdENhc2UoU2VxVGVzdENhc2UpOgorICAgIHNlcSA9IENsYXNzaWNTZXEoKDAsMTAsMjAsMzAsNDAsNTApKQorCitjbGFzcyBOZXdTZXFUZXN0Q2FzZShTZXFUZXN0Q2FzZSk6CisgICAgc2VxID0gTmV3U2VxKCgwLDEwLDIwLDMwLDQwLDUwKSkKKworY2xhc3MgQ2xhc3NpY1NlcURlcHJlY2F0ZWRUZXN0Q2FzZShTZXFUZXN0Q2FzZSk6CisgICAgc2VxID0gQ2xhc3NpY1NlcURlcHJlY2F0ZWQoKDAsMTAsMjAsMzAsNDAsNTApKQorCitjbGFzcyBOZXdTZXFEZXByZWNhdGVkVGVzdENhc2UoU2VxVGVzdENhc2UpOgorICAgIHNlcSA9IE5ld1NlcURlcHJlY2F0ZWQoKDAsMTAsMjAsMzAsNDAsNTApKQorCisKK2NsYXNzIFhSYW5nZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3hyYW5nZShzZWxmKToKKyAgICAgICAgbiA9IG5ld3N0eWxlKCkKKyAgICAgICAgbi5pbmQgPSA1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeHJhbmdlKDEsIDIwKVtuXSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4cmFuZ2UoMSwgMjApLl9fZ2V0aXRlbV9fKG4pLCA2KQorCitjbGFzcyBPdmVyZmxvd1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wb3MgPSAyKioxMDAKKyAgICAgICAgc2VsZi5uZWcgPSAtc2VsZi5wb3MKKworICAgIGRlZiB0ZXN0X2xhcmdlX2xvbmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucG9zLl9faW5kZXhfXygpLCBzZWxmLnBvcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5lZy5fX2luZGV4X18oKSwgc2VsZi5uZWcpCisKKyAgICBkZWYgX2dldGl0ZW1faGVscGVyKHNlbGYsIGJhc2UpOgorICAgICAgICBjbGFzcyBHZXRJdGVtKGJhc2UpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1heGludCAjIGNhbm5vdCByZXR1cm4gbG9uZyBoZXJlCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4ga2V5CisgICAgICAgIHggPSBHZXRJdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4W3NlbGYucG9zXSwgc2VsZi5wb3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLm5lZ10sIHNlbGYubmVnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbc2VsZi5uZWc6c2VsZi5wb3NdLmluZGljZXMobWF4c2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIG1heHNpemUsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbc2VsZi5uZWc6c2VsZi5wb3M6MV0uaW5kaWNlcyhtYXhzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgbWF4c2l6ZSwgMSkpCisKKyAgICBkZWYgX2dldHNsaWNlX2hlbHBlcl9kZXByZWNhdGVkKHNlbGYsIGJhc2UpOgorICAgICAgICBjbGFzcyBHZXRJdGVtKGJhc2UpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1heGludCAjIGNhbm5vdCByZXR1cm4gbG9uZyBoZXJlCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4ga2V5CisgICAgICAgICAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsIGksIGopOgorICAgICAgICAgICAgICAgIHJldHVybiBpLCBqCisgICAgICAgIHggPSBHZXRJdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4W3NlbGYucG9zXSwgc2VsZi5wb3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLm5lZ10sIHNlbGYubmVnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbc2VsZi5uZWc6c2VsZi5wb3NdLCAobWF4aW50K21pbnNpemUsIG1heHNpemUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbc2VsZi5uZWc6c2VsZi5wb3M6MV0uaW5kaWNlcyhtYXhzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgbWF4c2l6ZSwgMSkpCisKKyAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgorICAgICAgICBzZWxmLl9nZXRpdGVtX2hlbHBlcihvYmplY3QpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYuX2dldHNsaWNlX2hlbHBlcl9kZXByZWNhdGVkKG9iamVjdCkKKworICAgIGRlZiB0ZXN0X2dldGl0ZW1fY2xhc3NpYyhzZWxmKToKKyAgICAgICAgY2xhc3MgRW1wdHk6IHBhc3MKKyAgICAgICAgIyBYWFggVGhpcyB0ZXN0IGZhaWxzIChzZWUgYnVnICM3NTMyKQorICAgICAgICAjc2VsZi5fZ2V0aXRlbV9oZWxwZXIoRW1wdHkpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYuX2dldHNsaWNlX2hlbHBlcl9kZXByZWNhdGVkKEVtcHR5KQorCisgICAgZGVmIHRlc3Rfc2VxdWVuY2VfcmVwZWF0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBsYW1iZGE6ICJhIiAqIHNlbGYucG9zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBsYW1iZGE6ICJhIiAqIHNlbGYubmVnKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBCYXNlVGVzdENhc2UsCisgICAgICAgIExpc3RUZXN0Q2FzZSwKKyAgICAgICAgVHVwbGVUZXN0Q2FzZSwKKyAgICAgICAgQnl0ZUFycmF5VGVzdENhc2UsCisgICAgICAgIFN0cmluZ1Rlc3RDYXNlLAorICAgICAgICBVbmljb2RlVGVzdENhc2UsCisgICAgICAgIENsYXNzaWNTZXFUZXN0Q2FzZSwKKyAgICAgICAgTmV3U2VxVGVzdENhc2UsCisgICAgICAgIFhSYW5nZVRlc3RDYXNlLAorICAgICAgICBPdmVyZmxvd1Rlc3RDYXNlLAorICAgICkKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgICAgICBDbGFzc2ljU2VxRGVwcmVjYXRlZFRlc3RDYXNlLAorICAgICAgICAgICAgTmV3U2VxRGVwcmVjYXRlZFRlc3RDYXNlLAorICAgICAgICApCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaW5zcGVjdC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2luc3BlY3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRkY2ZlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2luc3BlY3QucHkKQEAgLTAsMCArMSw4NDUgQEAKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgbGluZWNhY2hlCitpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gVXNlckxpc3QgaW1wb3J0IFVzZXJMaXN0Citmcm9tIFVzZXJEaWN0IGltcG9ydCBVc2VyRGljdAorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3B5M2tfd2FybmluZ3MKKword2l0aCBjaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICAoInR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcgaGFzIGJlZW4gcmVtb3ZlZCIsIFN5bnRheFdhcm5pbmcpLAorICAgICAgICBxdWlldD1UcnVlKToKKyAgICBmcm9tIHRlc3QgaW1wb3J0IGluc3BlY3RfZm9kZGVyIGFzIG1vZAorICAgIGZyb20gdGVzdCBpbXBvcnQgaW5zcGVjdF9mb2RkZXIyIGFzIG1vZDIKKworIyBDIG1vZHVsZSBmb3IgdGVzdF9maW5kc291cmNlX2JpbmFyeQoraW1wb3J0IHVuaWNvZGVkYXRhCisKKyMgRnVuY3Rpb25zIHRlc3RlZCBpbiB0aGlzIHN1aXRlOgorIyBpc21vZHVsZSwgaXNjbGFzcywgaXNtZXRob2QsIGlzZnVuY3Rpb24sIGlzdHJhY2ViYWNrLCBpc2ZyYW1lLCBpc2NvZGUsCisjIGlzYnVpbHRpbiwgaXNyb3V0aW5lLCBpc2dlbmVyYXRvciwgaXNnZW5lcmF0b3JmdW5jdGlvbiwgZ2V0bWVtYmVycywKKyMgZ2V0ZG9jLCBnZXRmaWxlLCBnZXRtb2R1bGUsIGdldHNvdXJjZWZpbGUsIGdldGNvbW1lbnRzLCBnZXRzb3VyY2UsCisjIGdldGNsYXNzdHJlZSwgZ2V0YXJnc3BlYywgZ2V0YXJndmFsdWVzLCBmb3JtYXRhcmdzcGVjLCBmb3JtYXRhcmd2YWx1ZXMsCisjIGN1cnJlbnRmcmFtZSwgc3RhY2ssIHRyYWNlLCBpc2RhdGFkZXNjcmlwdG9yCisKKyMgTk9URTogVGhlcmUgYXJlIHNvbWUgYWRkaXRpb25hbCB0ZXN0cyByZWxhdGluZyB0byBpbnRlcmFjdGlvbiB3aXRoCisjICAgICAgIHppcGltcG9ydCBpbiB0aGUgdGVzdF96aXBpbXBvcnRfc3VwcG9ydCB0ZXN0IG1vZHVsZS4KKworbW9kZmlsZSA9IG1vZC5fX2ZpbGVfXworaWYgbW9kZmlsZS5lbmRzd2l0aCgoJ2MnLCAnbycpKToKKyAgICBtb2RmaWxlID0gbW9kZmlsZVs6LTFdCisKK2ltcG9ydCBfX2J1aWx0aW5fXworCit0cnk6CisgICAgMSAvLyAwCitleGNlcHQ6CisgICAgdGIgPSBzeXMuZXhjX3RyYWNlYmFjaworCitnaXQgPSBtb2QuU3R1cGlkR2l0KCkKKworY2xhc3MgSXNUZXN0QmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcHJlZGljYXRlcyA9IHNldChbaW5zcGVjdC5pc2J1aWx0aW4sIGluc3BlY3QuaXNjbGFzcywgaW5zcGVjdC5pc2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgaW5zcGVjdC5pc2ZyYW1lLCBpbnNwZWN0LmlzZnVuY3Rpb24sIGluc3BlY3QuaXNtZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgaW5zcGVjdC5pc21vZHVsZSwgaW5zcGVjdC5pc3RyYWNlYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICBpbnNwZWN0LmlzZ2VuZXJhdG9yLCBpbnNwZWN0LmlzZ2VuZXJhdG9yZnVuY3Rpb25dKQorCisgICAgZGVmIGlzdGVzdChzZWxmLCBwcmVkaWNhdGUsIGV4cCk6CisgICAgICAgIG9iaiA9IGV2YWwoZXhwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJlZGljYXRlKG9iaiksICclcyglcyknICUgKHByZWRpY2F0ZS5fX25hbWVfXywgZXhwKSkKKworICAgICAgICBmb3Igb3RoZXIgaW4gc2VsZi5wcmVkaWNhdGVzIC0gc2V0KFtwcmVkaWNhdGVdKToKKyAgICAgICAgICAgIGlmIHByZWRpY2F0ZSA9PSBpbnNwZWN0LmlzZ2VuZXJhdG9yZnVuY3Rpb24gYW5kXAorICAgICAgICAgICAgICAgb3RoZXIgPT0gaW5zcGVjdC5pc2Z1bmN0aW9uOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG90aGVyKG9iaiksICdub3QgJXMoJXMpJyAlIChvdGhlci5fX25hbWVfXywgZXhwKSkKKworZGVmIGdlbmVyYXRvcl9mdW5jdGlvbl9leGFtcGxlKHNlbGYpOgorICAgIGZvciBpIGluIHhyYW5nZSgyKToKKyAgICAgICAgeWllbGQgaQorCitjbGFzcyBUZXN0UHJlZGljYXRlcyhJc1Rlc3RCYXNlKToKKyAgICBkZWYgdGVzdF9zaXh0ZWVuKHNlbGYpOgorICAgICAgICBjb3VudCA9IGxlbihmaWx0ZXIobGFtYmRhIHg6eC5zdGFydHN3aXRoKCdpcycpLCBkaXIoaW5zcGVjdCkpKQorICAgICAgICAjIFRoaXMgdGVzdCBpcyBoZXJlIGZvciByZW1lbWJlciB5b3UgdG8gdXBkYXRlIERvYy9saWJyYXJ5L2luc3BlY3QucnN0CisgICAgICAgICMgd2hpY2ggY2xhaW1zIHRoZXJlIGFyZSAxNiBzdWNoIGZ1bmN0aW9ucworICAgICAgICBleHBlY3RlZCA9IDE2CisgICAgICAgIGVycl9tc2cgPSAiVGhlcmUgYXJlICVkIChub3QgJWQpIGlzKiBmdW5jdGlvbnMiICUgKGNvdW50LCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgZXhwZWN0ZWQsIGVycl9tc2cpCisKKworICAgIGRlZiB0ZXN0X2V4Y2x1ZGluZ19wcmVkaWNhdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzYnVpbHRpbiwgJ3N5cy5leGl0JykKKyAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2J1aWx0aW4sICdbXS5hcHBlbmQnKQorICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzY29kZSwgJ21vZC5zcGFtLmZ1bmNfY29kZScpCisgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNmcmFtZSwgJ3RiLnRiX2ZyYW1lJykKKyAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2Z1bmN0aW9uLCAnbW9kLnNwYW0nKQorICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzbWV0aG9kLCAnbW9kLlN0dXBpZEdpdC5hYnVzZScpCisgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNtZXRob2QsICdnaXQuYXJndWUnKQorICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzbW9kdWxlLCAnbW9kJykKKyAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc3RyYWNlYmFjaywgJ3RiJykKKyAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2RhdGFkZXNjcmlwdG9yLCAnX19idWlsdGluX18uZmlsZS5jbG9zZWQnKQorICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzZGF0YWRlc2NyaXB0b3IsICdfX2J1aWx0aW5fXy5maWxlLnNvZnRzcGFjZScpCisgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNnZW5lcmF0b3IsICcoeCBmb3IgeCBpbiB4cmFuZ2UoMikpJykKKyAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2dlbmVyYXRvcmZ1bmN0aW9uLCAnZ2VuZXJhdG9yX2Z1bmN0aW9uX2V4YW1wbGUnKQorICAgICAgICBpZiBoYXNhdHRyKHR5cGVzLCAnR2V0U2V0RGVzY3JpcHRvclR5cGUnKToKKyAgICAgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNnZXRzZXRkZXNjcmlwdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUodGIudGJfZnJhbWUpLmZfbG9jYWxzJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5pc2dldHNldGRlc2NyaXB0b3IodHlwZSh0Yi50Yl9mcmFtZSkuZl9sb2NhbHMpKQorICAgICAgICBpZiBoYXNhdHRyKHR5cGVzLCAnTWVtYmVyRGVzY3JpcHRvclR5cGUnKToKKyAgICAgICAgICAgIHNlbGYuaXN0ZXN0KGluc3BlY3QuaXNtZW1iZXJkZXNjcmlwdG9yLCAnZGF0ZXRpbWUudGltZWRlbHRhLmRheXMnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LmlzbWVtYmVyZGVzY3JpcHRvcihkYXRldGltZS50aW1lZGVsdGEuZGF5cykpCisKKyAgICBkZWYgdGVzdF9pc3JvdXRpbmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0Lmlzcm91dGluZShtb2Quc3BhbSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0Lmlzcm91dGluZShbXS5jb3VudCkpCisKKyAgICBkZWYgdGVzdF9pc2NsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzY2xhc3MsICdtb2QuU3R1cGlkR2l0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3QuaXNjbGFzcyhsaXN0KSkKKworICAgICAgICBjbGFzcyBuZXdzdHlsZShvYmplY3QpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LmlzY2xhc3MobmV3c3R5bGUpKQorCisgICAgICAgIGNsYXNzIEN1c3RvbUdldGF0dHIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3QuaXNjbGFzcyhDdXN0b21HZXRhdHRyKCkpKQorCisgICAgZGVmIHRlc3RfZ2V0X3Nsb3RfbWVtYmVycyhzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgX19zbG90c19fID0gKCJhIiwgImIiKQorCisgICAgICAgIHggPSBDKCkKKyAgICAgICAgeC5hID0gNDIKKyAgICAgICAgbWVtYmVycyA9IGRpY3QoaW5zcGVjdC5nZXRtZW1iZXJzKHgpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgbWVtYmVycykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYicsIG1lbWJlcnMpCisKKyAgICBkZWYgdGVzdF9pc2Fic3RyYWN0KHNlbGYpOgorICAgICAgICBmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKKworICAgICAgICBjbGFzcyBBYnN0cmFjdENsYXNzRXhhbXBsZShvYmplY3QpOgorICAgICAgICAgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgICAgICAgICAgQGFic3RyYWN0bWV0aG9kCisgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBDbGFzc0V4YW1wbGUoQWJzdHJhY3RDbGFzc0V4YW1wbGUpOgorICAgICAgICAgICAgZGVmIGZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYSA9IENsYXNzRXhhbXBsZSgpCisKKyAgICAgICAgIyBUZXN0IGdlbmVyYWwgYmVoYXZpb3VyLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5pc2Fic3RyYWN0KEFic3RyYWN0Q2xhc3NFeGFtcGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LmlzYWJzdHJhY3QoQ2xhc3NFeGFtcGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LmlzYWJzdHJhY3QoYSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5pc2Fic3RyYWN0KGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5pc2Fic3RyYWN0KDUpKQorCisKK2NsYXNzIFRlc3RJbnRlcnByZXRlclN0YWNrKElzVGVzdEJhc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgZ2l0LmFidXNlKDcsIDgsIDkpCisKKyAgICBkZWYgdGVzdF9hYnVzZV9kb25lKHNlbGYpOgorICAgICAgICBzZWxmLmlzdGVzdChpbnNwZWN0LmlzdHJhY2ViYWNrLCAnZ2l0LmV4WzJdJykKKyAgICAgICAgc2VsZi5pc3Rlc3QoaW5zcGVjdC5pc2ZyYW1lLCAnbW9kLmZyJykKKworICAgIGRlZiB0ZXN0X3N0YWNrKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG1vZC5zdCkgPj0gNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Quc3RbMF1bMTpdLAorICAgICAgICAgICAgIChtb2RmaWxlLCAxNiwgJ2VnZ3MnLCBbJyAgICBzdCA9IGluc3BlY3Quc3RhY2soKVxuJ10sIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5zdFsxXVsxOl0sCisgICAgICAgICAgICAgKG1vZGZpbGUsIDksICdzcGFtJywgWycgICAgZWdncyhiICsgZCwgYyArIGYpXG4nXSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLnN0WzJdWzE6XSwKKyAgICAgICAgICAgICAobW9kZmlsZSwgNDMsICdhcmd1ZScsIFsnICAgICAgICAgICAgc3BhbShhLCBiLCBjKVxuJ10sIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5zdFszXVsxOl0sCisgICAgICAgICAgICAgKG1vZGZpbGUsIDM5LCAnYWJ1c2UnLCBbJyAgICAgICAgc2VsZi5hcmd1ZShhLCBiLCBjKVxuJ10sIDApKQorCisgICAgZGVmIHRlc3RfdHJhY2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdpdC50ciksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2l0LnRyWzBdWzE6XSwgKG1vZGZpbGUsIDQzLCAnYXJndWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyAgICAgICAgICAgIHNwYW0oYSwgYiwgYylcbiddLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnaXQudHJbMV1bMTpdLCAobW9kZmlsZSwgOSwgJ3NwYW0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyAgICBlZ2dzKGIgKyBkLCBjICsgZilcbiddLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnaXQudHJbMl1bMTpdLCAobW9kZmlsZSwgMTgsICdlZ2dzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycgICAgcSA9IHkgLy8gMFxuJ10sIDApKQorCisgICAgZGVmIHRlc3RfZnJhbWUoc2VsZik6CisgICAgICAgIGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBsb2NhbHMgPSBpbnNwZWN0LmdldGFyZ3ZhbHVlcyhtb2QuZnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgWyd4JywgJ3knXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJhcmdzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcmt3LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2Fscywgeyd4JzogMTEsICdwJzogMTEsICd5JzogMTR9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZm9ybWF0YXJndmFsdWVzKGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBsb2NhbHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICcoeD0xMSwgeT0xNCknKQorCisgICAgZGVmIHRlc3RfcHJldmlvdXNfZnJhbWUoc2VsZik6CisgICAgICAgIGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBsb2NhbHMgPSBpbnNwZWN0LmdldGFyZ3ZhbHVlcyhtb2QuZnIuZl9iYWNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFsnYScsICdiJywgJ2MnLCAnZCcsIFsnZScsIFsnZiddXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyYXJncywgJ2cnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcmt3LCAnaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5mb3JtYXRhcmd2YWx1ZXMoYXJncywgdmFyYXJncywgdmFya3csIGxvY2FscyksCisgICAgICAgICAgICAgJyhhPTcsIGI9OCwgYz05LCBkPTMsIChlPTQsIChmPTUsKSksICpnPSgpLCAqKmg9e30pJykKKworY2xhc3MgR2V0U291cmNlQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBTdWJjbGFzc2VzIG11c3Qgb3ZlcnJpZGUuCisgICAgZm9kZGVyRmlsZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgd2l0aCBvcGVuKGluc3BlY3QuZ2V0c291cmNlZmlsZShzZWxmLmZvZGRlckZpbGUpKSBhcyBmcDoKKyAgICAgICAgICAgIHNlbGYuc291cmNlID0gZnAucmVhZCgpCisKKyAgICBkZWYgc291cmNlcmFuZ2Uoc2VsZiwgdG9wLCBib3R0b20pOgorICAgICAgICBsaW5lcyA9IHNlbGYuc291cmNlLnNwbGl0KCJcbiIpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXNbdG9wLTE6Ym90dG9tXSkgKyAiXG4iCisKKyAgICBkZWYgYXNzZXJ0U291cmNlRXF1YWwoc2VsZiwgb2JqLCB0b3AsIGJvdHRvbSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRzb3VyY2Uob2JqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZXJhbmdlKHRvcCwgYm90dG9tKSkKKworY2xhc3MgVGVzdFJldHJpZXZpbmdTb3VyY2VDb2RlKEdldFNvdXJjZUJhc2UpOgorICAgIGZvZGRlckZpbGUgPSBtb2QKKworICAgIGRlZiB0ZXN0X2dldGNsYXNzZXMoc2VsZik6CisgICAgICAgIGNsYXNzZXMgPSBpbnNwZWN0LmdldG1lbWJlcnMobW9kLCBpbnNwZWN0LmlzY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xhc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdGZXN0ZXJpbmdHb2InLCBtb2QuRmVzdGVyaW5nR29iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCdNYWxvZG9yb3VzUGVydmVydCcsIG1vZC5NYWxvZG9yb3VzUGVydmVydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnUGFycm90RHJvcHBpbmdzJywgbW9kLlBhcnJvdERyb3BwaW5ncyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnU3R1cGlkR2l0JywgbW9kLlN0dXBpZEdpdCldKQorICAgICAgICB0cmVlID0gaW5zcGVjdC5nZXRjbGFzc3RyZWUoW2Nsc1sxXSBmb3IgY2xzIGluIGNsYXNzZXNdLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyhtb2QuUGFycm90RHJvcHBpbmdzLCAoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2QuU3R1cGlkR2l0LCAoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsobW9kLk1hbG9kb3JvdXNQZXJ2ZXJ0LCAobW9kLlN0dXBpZEdpdCwpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobW9kLkZlc3RlcmluZ0dvYiwgKG1vZC5NYWxvZG9yb3VzUGVydmVydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5QYXJyb3REcm9wcGluZ3MpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2dldGZ1bmN0aW9ucyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb25zID0gaW5zcGVjdC5nZXRtZW1iZXJzKG1vZCwgaW5zcGVjdC5pc2Z1bmN0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmN0aW9ucywgWygnZWdncycsIG1vZC5lZ2dzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3NwYW0nLCBtb2Quc3BhbSldKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfZ2V0ZG9jKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0ZG9jKG1vZCksICdBIG1vZHVsZSBkb2NzdHJpbmcuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGRvYyhtb2QuU3R1cGlkR2l0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQSBsb25nZXIsXG5cbmluZGVudGVkXG5cbmRvY3N0cmluZy4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0ZG9jKGdpdC5hYnVzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0Fub3RoZXJcblxuZG9jc3RyaW5nXG5cbmNvbnRhaW5pbmdcblxudGFicycpCisKKyAgICBkZWYgdGVzdF9jbGVhbmRvYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmNsZWFuZG9jKCdBblxuICAgIGluZGVudGVkXG4gICAgZG9jc3RyaW5nLicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdBblxuaW5kZW50ZWRcbmRvY3N0cmluZy4nKQorCisgICAgZGVmIHRlc3RfZ2V0Y29tbWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRjb21tZW50cyhtb2QpLCAnIyBsaW5lIDFcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRjb21tZW50cyhtb2QuU3R1cGlkR2l0KSwgJyMgbGluZSAyMFxuJykKKworICAgIGRlZiB0ZXN0X2dldG1vZHVsZShzZWxmKToKKyAgICAgICAgIyBDaGVjayBhY3R1YWwgbW9kdWxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRtb2R1bGUobW9kKSwgbW9kKQorICAgICAgICAjIENoZWNrIGNsYXNzICh1c2VzIF9fbW9kdWxlX18gYXR0cmlidXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0bW9kdWxlKG1vZC5TdHVwaWRHaXQpLCBtb2QpCisgICAgICAgICMgQ2hlY2sgYSBtZXRob2QgKG5vIF9fbW9kdWxlX18gYXR0cmlidXRlLCBmYWxscyBiYWNrIHRvIGZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0bW9kdWxlKG1vZC5TdHVwaWRHaXQuYWJ1c2UpLCBtb2QpCisgICAgICAgICMgRG8gaXQgYWdhaW4gKGNoZWNrIHRoZSBjYWNoaW5nIGlzbid0IGJyb2tlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldG1vZHVsZShtb2QuU3R1cGlkR2l0LmFidXNlKSwgbW9kKQorICAgICAgICAjIENoZWNrIGEgYnVpbHRpbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0bW9kdWxlKHN0ciksIHN5cy5tb2R1bGVzWyJfX2J1aWx0aW5fXyJdKQorICAgICAgICAjIENoZWNrIGZpbGVuYW1lIG92ZXJyaWRlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRtb2R1bGUoTm9uZSwgbW9kZmlsZSksIG1vZCkKKworICAgIGRlZiB0ZXN0X2dldHNvdXJjZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChnaXQuYWJ1c2UsIDI5LCAzOSkKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QuU3R1cGlkR2l0LCAyMSwgNDYpCisKKyAgICBkZWYgdGVzdF9nZXRzb3VyY2VmaWxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0c291cmNlZmlsZShtb2Quc3BhbSksIG1vZGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRzb3VyY2VmaWxlKGdpdC5hYnVzZSksIG1vZGZpbGUpCisgICAgICAgIGZuID0gIl9ub25fZXhpc3RpbmdfZmlsZW5hbWVfdXNlZF9mb3Jfc291cmNlZmlsZV90ZXN0LnB5IgorICAgICAgICBjbyA9IGNvbXBpbGUoIk5vbmUiLCBmbiwgImV4ZWMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0c291cmNlZmlsZShjbyksIE5vbmUpCisgICAgICAgIGxpbmVjYWNoZS5jYWNoZVtjby5jb19maWxlbmFtZV0gPSAoMSwgTm9uZSwgIk5vbmUiLCBjby5jb19maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldHNvdXJjZWZpbGUoY28pLCBmbikKKworICAgIGRlZiB0ZXN0X2dldGZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRmaWxlKG1vZC5TdHVwaWRHaXQpLCBtb2QuX19maWxlX18pCisKKyAgICBkZWYgdGVzdF9nZXRtb2R1bGVfcmVjdXJzaW9uKHNlbGYpOgorICAgICAgICBmcm9tIHR5cGVzIGltcG9ydCBNb2R1bGVUeXBlCisgICAgICAgIG5hbWUgPSAnX19pbnNwZWN0X2R1bW15JworICAgICAgICBtID0gc3lzLm1vZHVsZXNbbmFtZV0gPSBNb2R1bGVUeXBlKG5hbWUpCisgICAgICAgIG0uX19maWxlX18gPSAiPHN0cmluZz4iICMgaG9wZWZ1bGx5IG5vdCBhIHJlYWwgZmlsZW5hbWUuLi4KKyAgICAgICAgbS5fX2xvYWRlcl9fID0gImR1bW15IiAgIyBwcmV0ZW5kIHRoZSBmaWxlbmFtZSBpcyB1bmRlcnN0b29kIGJ5IGEgbG9hZGVyCisgICAgICAgIGV4ZWMgImRlZiB4KCk6IHBhc3MiIGluIG0uX19kaWN0X18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldHNvdXJjZWZpbGUobS54LmZ1bmNfY29kZSksICc8c3RyaW5nPicpCisgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICBpbnNwZWN0LmdldG1vZHVsZShjb21waWxlKCdhPTEwJywnJywnc2luZ2xlJykpCisKKyAgICBkZWYgdGVzdF9wcm9jZWVkX3dpdGhfZmFrZV9maWxlbmFtZShzZWxmKToKKyAgICAgICAgJycnZG9jdGVzdCBtb25rZXlwYXRjaGVzIGxpbmVjYWNoZSB0byBlbmFibGUgaW5zcGVjdGlvbicnJworICAgICAgICBmbiwgc291cmNlID0gJzx0ZXN0PicsICdkZWYgeCgpOiBwYXNzXG4nCisgICAgICAgIGdldGxpbmVzID0gbGluZWNhY2hlLmdldGxpbmVzCisgICAgICAgIGRlZiBtb25rZXkoZmlsZW5hbWUsIG1vZHVsZV9nbG9iYWxzPU5vbmUpOgorICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gZm46CisgICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5zcGxpdGxpbmVzKFRydWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBnZXRsaW5lcyhmaWxlbmFtZSwgbW9kdWxlX2dsb2JhbHMpCisgICAgICAgIGxpbmVjYWNoZS5nZXRsaW5lcyA9IG1vbmtleQorICAgICAgICB0cnk6CisgICAgICAgICAgICBucyA9IHt9CisgICAgICAgICAgICBleGVjIGNvbXBpbGUoc291cmNlLCBmbiwgJ3NpbmdsZScpIGluIG5zCisgICAgICAgICAgICBpbnNwZWN0LmdldHNvdXJjZShuc1sieCJdKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbGluZWNhY2hlLmdldGxpbmVzID0gZ2V0bGluZXMKKworY2xhc3MgVGVzdERlY29yYXRvcnMoR2V0U291cmNlQmFzZSk6CisgICAgZm9kZGVyRmlsZSA9IG1vZDIKKworICAgIGRlZiB0ZXN0X3dyYXBwZWRfZGVjb3JhdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIud3JhcHBlZCwgMTQsIDE3KQorCisgICAgZGVmIHRlc3RfcmVwbGFjaW5nX2RlY29yYXRvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLmdvbmUsIDksIDEwKQorCitjbGFzcyBUZXN0T25lbGluZXJzKEdldFNvdXJjZUJhc2UpOgorICAgIGZvZGRlckZpbGUgPSBtb2QyCisgICAgZGVmIHRlc3Rfb25lbGluZV9sYW1iZGEoc2VsZik6CisgICAgICAgICMgVGVzdCBpbnNwZWN0LmdldHNvdXJjZSB3aXRoIGEgb25lLWxpbmUgbGFtYmRhIGZ1bmN0aW9uLgorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIub2xsLCAyNSwgMjUpCisKKyAgICBkZWYgdGVzdF90aHJlZWxpbmVfbGFtYmRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgaW5zcGVjdC5nZXRzb3VyY2Ugd2l0aCBhIHRocmVlLWxpbmUgbGFtYmRhIGZ1bmN0aW9uLAorICAgICAgICAjIHdoZXJlIHRoZSBzZWNvbmQgYW5kIHRoaXJkIGxpbmVzIGFyZSBfbm90XyBpbmRlbnRlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLnRsbCwgMjgsIDMwKQorCisgICAgZGVmIHRlc3RfdHdvbGluZV9pbmRlbnRlZF9sYW1iZGEoc2VsZik6CisgICAgICAgICMgVGVzdCBpbnNwZWN0LmdldHNvdXJjZSB3aXRoIGEgdHdvLWxpbmUgbGFtYmRhIGZ1bmN0aW9uLAorICAgICAgICAjIHdoZXJlIHRoZSBzZWNvbmQgbGluZSBfaXNfIGluZGVudGVkLgorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIudGxsaSwgMzMsIDM0KQorCisgICAgZGVmIHRlc3Rfb25lbGluZWZ1bmMoc2VsZik6CisgICAgICAgICMgVGVzdCBpbnNwZWN0LmdldHNvdXJjZSB3aXRoIGEgcmVndWxhciBvbmUtbGluZSBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLm9uZWxpbmVmdW5jLCAzNywgMzcpCisKKyAgICBkZWYgdGVzdF9tYW55YXJncyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGluc3BlY3QuZ2V0c291cmNlIHdpdGggYSByZWd1bGFyIGZ1bmN0aW9uIHdoZXJlCisgICAgICAgICMgdGhlIGFyZ3VtZW50cyBhcmUgb24gdHdvIGxpbmVzIGFuZCBfbm90XyBpbmRlbnRlZCBhbmQKKyAgICAgICAgIyB0aGUgYm9keSBvbiB0aGUgc2Vjb25kIGxpbmUgd2l0aCB0aGUgbGFzdCBhcmd1bWVudHMuCisgICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwobW9kMi5tYW55YXJncywgNDAsIDQxKQorCisgICAgZGVmIHRlc3RfdHdvbGluZWZ1bmMoc2VsZik6CisgICAgICAgICMgVGVzdCBpbnNwZWN0LmdldHNvdXJjZSB3aXRoIGEgcmVndWxhciBmdW5jdGlvbiB3aGVyZQorICAgICAgICAjIHRoZSBib2R5IGlzIG9uIHR3byBsaW5lcywgZm9sbG93aW5nIHRoZSBhcmd1bWVudCBsaXN0IGFuZAorICAgICAgICAjIGNvbnRpbnVlZCBvbiB0aGUgbmV4dCBsaW5lIGJ5IGEgXFwuCisgICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwobW9kMi50d29saW5lZnVuYywgNDQsIDQ1KQorCisgICAgZGVmIHRlc3RfbGFtYmRhX2luX2xpc3Qoc2VsZik6CisgICAgICAgICMgVGVzdCBpbnNwZWN0LmdldHNvdXJjZSB3aXRoIGEgb25lLWxpbmUgbGFtYmRhIGZ1bmN0aW9uCisgICAgICAgICMgZGVmaW5lZCBpbiBhIGxpc3QsIGluZGVudGVkLgorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIuYVsxXSwgNDksIDQ5KQorCisgICAgZGVmIHRlc3RfYW5vbnltb3VzKHNlbGYpOgorICAgICAgICAjIFRlc3QgaW5zcGVjdC5nZXRzb3VyY2Ugd2l0aCBhIGxhbWJkYSBmdW5jdGlvbiBkZWZpbmVkCisgICAgICAgICMgYXMgYXJndW1lbnQgdG8gYW5vdGhlciBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLmFub255bW91cywgNTUsIDU1KQorCitjbGFzcyBUZXN0QnVnZ3lDYXNlcyhHZXRTb3VyY2VCYXNlKToKKyAgICBmb2RkZXJGaWxlID0gbW9kMgorCisgICAgZGVmIHRlc3Rfd2l0aF9jb21tZW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIud2l0aF9jb21tZW50LCA1OCwgNTkpCisKKyAgICBkZWYgdGVzdF9tdWx0aWxpbmVfc2lnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIubXVsdGlsaW5lX3NpZ1swXSwgNjMsIDY0KQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2NsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIuZnVuYzY5KCkuZnVuYzcxLCA3MSwgNzIpCisKKyAgICBkZWYgdGVzdF9vbmVfbGluZXJfZm9sbG93ZWRfYnlfbm9uX25hbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwobW9kMi5mdW5jNzcsIDc3LCA3NykKKworICAgIGRlZiB0ZXN0X29uZV9saW5lcl9kZWRlbnRfbm9uX25hbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwobW9kMi5jbHM4Mi5mdW5jODMsIDgzLCA4MykKKworICAgIGRlZiB0ZXN0X3dpdGhfY29tbWVudF9pbnN0ZWFkX29mX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLmZ1bmM4OCwgODgsIDkwKQorCisgICAgZGVmIHRlc3RfbWV0aG9kX2luX2R5bmFtaWNfY2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0U291cmNlRXF1YWwobW9kMi5tZXRob2RfaW5fZHluYW1pY19jbGFzcywgOTUsIDk3KQorCisgICAgQHVuaXR0ZXN0LnNraXBJZigKKyAgICAgICAgbm90IGhhc2F0dHIodW5pY29kZWRhdGEsICdfX2ZpbGVfXycpIG9yCisgICAgICAgICAgICB1bmljb2RlZGF0YS5fX2ZpbGVfX1stNDpdIGluICgiLnB5YyIsICIucHlvIiksCisgICAgICAgICJ1bmljb2RlZGF0YSBpcyBub3QgYW4gZXh0ZXJuYWwgYmluYXJ5IG1vZHVsZSIpCisgICAgZGVmIHRlc3RfZmluZHNvdXJjZV9iaW5hcnkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCB1bmljb2RlZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5maW5kc291cmNlLCB1bmljb2RlZGF0YSkKKworICAgIGRlZiB0ZXN0X2ZpbmRzb3VyY2VfY29kZV9pbl9saW5lY2FjaGUoc2VsZik6CisgICAgICAgIGxpbmVzID0gWyJ4PTEiXQorICAgICAgICBjbyA9IGNvbXBpbGUobGluZXNbMF0sICJfZHluYW1pY2FsbHlfY3JlYXRlZF9maWxlIiwgImV4ZWMiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmZpbmRzb3VyY2UsIGNvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmdldHNvdXJjZSwgY28pCisgICAgICAgIGxpbmVjYWNoZS5jYWNoZVtjby5jb19maWxlbmFtZV0gPSAoMSwgTm9uZSwgbGluZXMsIGNvLmNvX2ZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZmluZHNvdXJjZShjbyksIChsaW5lcywwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldHNvdXJjZShjbyksIGxpbmVzWzBdKQorCisgICAgZGVmIHRlc3RfZmluZHNvdXJjZV93aXRob3V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBmb3IgZm5hbWUgaW4gWycnLCAnPHN0cmluZz4nXToKKyAgICAgICAgICAgIGNvID0gY29tcGlsZSgneD0xJywgZm5hbWUsICJleGVjIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZmluZHNvdXJjZSwgY28pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmdldHNvdXJjZSwgY28pCisKKworY2xhc3MgX0Jyb2tlbkRhdGFEZXNjcmlwdG9yKG9iamVjdCk6CisgICAgIiIiCisgICAgQSBicm9rZW4gZGF0YSBkZXNjcmlwdG9yLiBTZWUgYnVnICMxNzg1LgorICAgICIiIgorICAgIGRlZiBfX2dldF9fKCphcmdzKToKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInNob3VsZCBub3QgX19nZXRfXyBkYXRhIGRlc2NyaXB0b3JzIikKKworICAgIGRlZiBfX3NldF9fKCphcmdzKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisKKyAgICBkZWYgX19nZXRhdHRyX18oKmFyZ3MpOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigic2hvdWxkIG5vdCBfX2dldGF0dHJfXyBkYXRhIGRlc2NyaXB0b3JzIikKKworCitjbGFzcyBfQnJva2VuTWV0aG9kRGVzY3JpcHRvcihvYmplY3QpOgorICAgICIiIgorICAgIEEgYnJva2VuIG1ldGhvZCBkZXNjcmlwdG9yLiBTZWUgYnVnICMxNzg1LgorICAgICIiIgorICAgIGRlZiBfX2dldF9fKCphcmdzKToKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInNob3VsZCBub3QgX19nZXRfXyBtZXRob2QgZGVzY3JpcHRvcnMiKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKCphcmdzKToKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInNob3VsZCBub3QgX19nZXRhdHRyX18gbWV0aG9kIGRlc2NyaXB0b3JzIikKKworCisjIEhlbHBlciBmb3IgdGVzdGluZyBjbGFzc2lmeV9jbGFzc19hdHRycy4KK2RlZiBhdHRyc193b19vYmpzKGNscyk6CisgICAgcmV0dXJuIFt0WzozXSBmb3IgdCBpbiBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKGNscyldCisKKworY2xhc3MgVGVzdENsYXNzZXNBbmRGdW5jdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2NsYXNzaWNfbXJvKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2xhc3NpYy1jbGFzcyBtZXRob2QgcmVzb2x1dGlvbiBvcmRlci4KKyAgICAgICAgY2xhc3MgQTogICAgcGFzcworICAgICAgICBjbGFzcyBCKEEpOiBwYXNzCisgICAgICAgIGNsYXNzIEMoQSk6IHBhc3MKKyAgICAgICAgY2xhc3MgRChCLCBDKTogcGFzcworCisgICAgICAgIGV4cGVjdGVkID0gKEQsIEIsIEEsIEMpCisgICAgICAgIGdvdCA9IGluc3BlY3QuZ2V0bXJvKEQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKworICAgIGRlZiB0ZXN0X25ld3N0eWxlX21ybyhzZWxmKToKKyAgICAgICAgIyBUaGUgc2FtZSB3LyBuZXctY2xhc3MgTVJPLgorICAgICAgICBjbGFzcyBBKG9iamVjdCk6ICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQihBKTogcGFzcworICAgICAgICBjbGFzcyBDKEEpOiBwYXNzCisgICAgICAgIGNsYXNzIEQoQiwgQyk6IHBhc3MKKworICAgICAgICBleHBlY3RlZCA9IChELCBCLCBDLCBBLCBvYmplY3QpCisgICAgICAgIGdvdCA9IGluc3BlY3QuZ2V0bXJvKEQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKworICAgIGRlZiBhc3NlcnRBcmdTcGVjRXF1YWxzKHNlbGYsIHJvdXRpbmUsIGFyZ3NfZSwgdmFyYXJnc19lID0gTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJrd19lID0gTm9uZSwgZGVmYXVsdHNfZSA9IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkID0gTm9uZSk6CisgICAgICAgIGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cyA9IGluc3BlY3QuZ2V0YXJnc3BlYyhyb3V0aW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIGFyZ3NfZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJhcmdzLCB2YXJhcmdzX2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFya3csIHZhcmt3X2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVmYXVsdHMsIGRlZmF1bHRzX2UpCisgICAgICAgIGlmIGZvcm1hdHRlZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5mb3JtYXRhcmdzcGVjKGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZCkKKworICAgIGRlZiB0ZXN0X2dldGFyZ3NwZWMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0QXJnU3BlY0VxdWFscyhtb2QuZWdncywgWyd4JywgJ3knXSwgZm9ybWF0dGVkID0gJyh4LCB5KScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRBcmdTcGVjRXF1YWxzKG1vZC5zcGFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydhJywgJ2InLCAnYycsICdkJywgWydlJywgWydmJ11dXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnJywgJ2gnLCAoMywgKDQsICg1LCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoYSwgYiwgYywgZD0zLCAoZSwgKGYsKSk9KDQsICg1LCkpLCAqZywgKipoKScpCisKKyAgICBkZWYgdGVzdF9nZXRhcmdzcGVjX21ldGhvZChzZWxmKToKKyAgICAgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICAgICAgZGVmIG0oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEFyZ1NwZWNFcXVhbHMoQS5tLCBbJ3NlbGYnXSkKKworICAgIGRlZiB0ZXN0X2dldGFyZ3NwZWNfc3VibGlzdG9mb25lKHNlbGYpOgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgICAgICAgICAgICAgKCJ0dXBsZSBwYXJhbWV0ZXIgdW5wYWNraW5nIGhhcyBiZWVuIHJlbW92ZWQiLCBTeW50YXhXYXJuaW5nKSwKKyAgICAgICAgICAgICAgICAoInBhcmVudGhlc2l6ZWQgYXJndW1lbnQgbmFtZXMgYXJlIGludmFsaWQiLCBTeW50YXhXYXJuaW5nKSk6CisgICAgICAgICAgICBleGVjICdkZWYgc3VibGlzdE9mT25lKChmb28sKSk6IHJldHVybiAxJworICAgICAgICAgICAgc2VsZi5hc3NlcnRBcmdTcGVjRXF1YWxzKHN1Ymxpc3RPZk9uZSwgW1snZm9vJ11dKQorCisgICAgICAgICAgICBleGVjICdkZWYgZmFrZVN1Ymxpc3RPZk9uZSgoZm9vKSk6IHJldHVybiAxJworICAgICAgICAgICAgc2VsZi5hc3NlcnRBcmdTcGVjRXF1YWxzKGZha2VTdWJsaXN0T2ZPbmUsIFsnZm9vJ10pCisKKworICAgIGRlZiBfY2xhc3NpZnlfdGVzdChzZWxmLCBuZXdzdHlsZSk6CisgICAgICAgICIiIkhlbHBlciBmb3IgdGVzdGluZyB0aGF0IGNsYXNzaWZ5X2NsYXNzX2F0dHJzIGZpbmRzIGEgYnVuY2ggb2YKKyAgICAgICAgZGlmZmVyZW50IGtpbmRzIG9mIGF0dHJpYnV0ZXMgb24gYSBnaXZlbiBjbGFzcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5ld3N0eWxlOgorICAgICAgICAgICAgYmFzZSA9IG9iamVjdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xhc3MgYmFzZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQShiYXNlKToKKyAgICAgICAgICAgIGRlZiBzKCk6IHBhc3MKKyAgICAgICAgICAgIHMgPSBzdGF0aWNtZXRob2QocykKKworICAgICAgICAgICAgZGVmIGMoY2xzKTogcGFzcworICAgICAgICAgICAgYyA9IGNsYXNzbWV0aG9kKGMpCisKKyAgICAgICAgICAgIGRlZiBnZXRwKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBwID0gcHJvcGVydHkoZ2V0cCkKKworICAgICAgICAgICAgZGVmIG0oc2VsZik6IHBhc3MKKworICAgICAgICAgICAgZGVmIG0xKHNlbGYpOiBwYXNzCisKKyAgICAgICAgICAgIGRhdGFibG9iID0gJzEnCisKKyAgICAgICAgICAgIGRkID0gX0Jyb2tlbkRhdGFEZXNjcmlwdG9yKCkKKyAgICAgICAgICAgIG1kID0gX0Jyb2tlbk1ldGhvZERlc2NyaXB0b3IoKQorCisgICAgICAgIGF0dHJzID0gYXR0cnNfd29fb2JqcyhBKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2MnLCAnY2xhc3MgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBjbGFzcyBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncCcsICdwcm9wZXJ0eScsIEEpLCBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbScsICdtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtMScsICdtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdkYXRhYmxvYicsICdkYXRhJywgQSksIGF0dHJzLCAnbWlzc2luZyBkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ21kJywgJ21ldGhvZCcsIEEpLCBhdHRycywgJ21pc3NpbmcgbWV0aG9kIGRlc2NyaXB0b3InKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnZGQnLCAnZGF0YScsIEEpLCBhdHRycywgJ21pc3NpbmcgZGF0YSBkZXNjcmlwdG9yJykKKworICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgZGVmIG0oc2VsZik6IHBhc3MKKworICAgICAgICBhdHRycyA9IGF0dHJzX3dvX29ianMoQikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpLCBhdHRycywgJ21pc3Npbmcgc3RhdGljIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdjJywgJ2NsYXNzIG1ldGhvZCcsIEEpLCBhdHRycywgJ21pc3NpbmcgY2xhc3MgbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ3AnLCAncHJvcGVydHknLCBBKSwgYXR0cnMsICdtaXNzaW5nIHByb3BlcnR5JykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ20nLCAnbWV0aG9kJywgQiksIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbTEnLCAnbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnZGF0YWJsb2InLCAnZGF0YScsIEEpLCBhdHRycywgJ21pc3NpbmcgZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtZCcsICdtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIG1ldGhvZCBkZXNjcmlwdG9yJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2RkJywgJ2RhdGEnLCBBKSwgYXR0cnMsICdtaXNzaW5nIGRhdGEgZGVzY3JpcHRvcicpCisKKworICAgICAgICBjbGFzcyBDKEEpOgorICAgICAgICAgICAgZGVmIG0oc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBjKHNlbGYpOiBwYXNzCisKKyAgICAgICAgYXR0cnMgPSBhdHRyc193b19vYmpzKEMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdzJywgJ3N0YXRpYyBtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIHN0YXRpYyBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnYycsICdtZXRob2QnLCBDKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdwJywgJ3Byb3BlcnR5JywgQSksIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtJywgJ21ldGhvZCcsIEMpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ20xJywgJ21ldGhvZCcsIEEpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2RhdGFibG9iJywgJ2RhdGEnLCBBKSwgYXR0cnMsICdtaXNzaW5nIGRhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbWQnLCAnbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBtZXRob2QgZGVzY3JpcHRvcicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdkZCcsICdkYXRhJywgQSksIGF0dHJzLCAnbWlzc2luZyBkYXRhIGRlc2NyaXB0b3InKQorCisgICAgICAgIGNsYXNzIEQoQiwgQyk6CisgICAgICAgICAgICBkZWYgbTEoc2VsZik6IHBhc3MKKworICAgICAgICBhdHRycyA9IGF0dHJzX3dvX29ianMoRCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpLCBhdHRycywgJ21pc3Npbmcgc3RhdGljIG1ldGhvZCcpCisgICAgICAgIGlmIG5ld3N0eWxlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2MnLCAnbWV0aG9kJywgQyksIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2MnLCAnY2xhc3MgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBjbGFzcyBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncCcsICdwcm9wZXJ0eScsIEEpLCBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbScsICdtZXRob2QnLCBCKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtMScsICdtZXRob2QnLCBEKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdkYXRhYmxvYicsICdkYXRhJywgQSksIGF0dHJzLCAnbWlzc2luZyBkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ21kJywgJ21ldGhvZCcsIEEpLCBhdHRycywgJ21pc3NpbmcgbWV0aG9kIGRlc2NyaXB0b3InKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnZGQnLCAnZGF0YScsIEEpLCBhdHRycywgJ21pc3NpbmcgZGF0YSBkZXNjcmlwdG9yJykKKworCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfb2xkc3R5bGUoc2VsZik6CisgICAgICAgICIiImNsYXNzaWZ5X2NsYXNzX2F0dHJzIGZpbmRzIHN0YXRpYyBtZXRob2RzLCBjbGFzcyBtZXRob2RzLAorICAgICAgICBwcm9wZXJ0aWVzLCBub3JtYWwgbWV0aG9kcywgYW5kIGRhdGEgYXR0cmlidXRlcyBvbiBhbiBvbGQtc3R5bGUKKyAgICAgICAgY2xhc3MuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jbGFzc2lmeV90ZXN0KEZhbHNlKQorCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9uZXdzdHlsZShzZWxmKToKKyAgICAgICAgIiIiSnVzdCBsaWtlIHRlc3RfY2xhc3NpZnlfb2xkc3R5bGUsIGJ1dCBmb3IgYSBuZXctc3R5bGUgY2xhc3MuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jbGFzc2lmeV90ZXN0KFRydWUpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9idWlsdGluX3R5cGVzKHNlbGYpOgorICAgICAgICAjIFNpbXBsZSBzYW5pdHkgY2hlY2sgdGhhdCBhbGwgYnVpbHQtaW4gdHlwZXMgY2FuIGhhdmUgdGhlaXIKKyAgICAgICAgIyBhdHRyaWJ1dGVzIGNsYXNzaWZpZWQuCisgICAgICAgIGZvciBuYW1lIGluIGRpcihfX2J1aWx0aW5fXyk6CisgICAgICAgICAgICBidWlsdGluID0gZ2V0YXR0cihfX2J1aWx0aW5fXywgbmFtZSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYnVpbHRpbiwgdHlwZSk6CisgICAgICAgICAgICAgICAgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhidWlsdGluKQorCisgICAgZGVmIHRlc3RfZ2V0bWVtYmVyc19tZXRob2Qoc2VsZik6CisgICAgICAgICMgT2xkLXN0eWxlIGNsYXNzZXMKKyAgICAgICAgY2xhc3MgQjoKKyAgICAgICAgICAgIGRlZiBmKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEluKCgnZicsIEIuZiksIGluc3BlY3QuZ2V0bWVtYmVycyhCKSkKKyAgICAgICAgIyBjb250cmFyeSB0byBzcGVjLCBpc21ldGhvZCgpIGlzIGFsc28gVHJ1ZSBmb3IgdW5ib3VuZCBtZXRob2RzCisgICAgICAgICMgKHNlZSAjMTc4NSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2YnLCBCLmYpLCBpbnNwZWN0LmdldG1lbWJlcnMoQiwgaW5zcGVjdC5pc21ldGhvZCkpCisgICAgICAgIGIgPSBCKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2YnLCBiLmYpLCBpbnNwZWN0LmdldG1lbWJlcnMoYikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdmJywgYi5mKSwgaW5zcGVjdC5nZXRtZW1iZXJzKGIsIGluc3BlY3QuaXNtZXRob2QpKQorCisgICAgICAgICMgTmV3LXN0eWxlIGNsYXNzZXMKKyAgICAgICAgY2xhc3MgQihvYmplY3QpOgorICAgICAgICAgICAgZGVmIGYoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdmJywgQi5mKSwgaW5zcGVjdC5nZXRtZW1iZXJzKEIpKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnZicsIEIuZiksIGluc3BlY3QuZ2V0bWVtYmVycyhCLCBpbnNwZWN0LmlzbWV0aG9kKSkKKyAgICAgICAgYiA9IEIoKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnZicsIGIuZiksIGluc3BlY3QuZ2V0bWVtYmVycyhiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2YnLCBiLmYpLCBpbnNwZWN0LmdldG1lbWJlcnMoYiwgaW5zcGVjdC5pc21ldGhvZCkpCisKKworY2xhc3MgVGVzdEdldGNhbGxhcmdzRnVuY3Rpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgdHVwbGUgcGFyYW1ldGVycyBhcmUgbmFtZWQgJy4xJywgJy4yJywgZXRjLgorICAgIGlzX3R1cGxlbmFtZSA9IHJlLmNvbXBpbGUocideXC5cZCskJykubWF0Y2gKKworICAgIGRlZiBhc3NlcnRFcXVhbENhbGxBcmdzKHNlbGYsIGZ1bmMsIGNhbGxfcGFyYW1zX3N0cmluZywgbG9jcz1Ob25lKToKKyAgICAgICAgbG9jcyA9IGRpY3QobG9jcyBvciB7fSwgZnVuYz1mdW5jKQorICAgICAgICByMSA9IGV2YWwoJ2Z1bmMoJXMpJyAlIGNhbGxfcGFyYW1zX3N0cmluZywgTm9uZSwgbG9jcykKKyAgICAgICAgcjIgPSBldmFsKCdpbnNwZWN0LmdldGNhbGxhcmdzKGZ1bmMsICVzKScgJSBjYWxsX3BhcmFtc19zdHJpbmcsIE5vbmUsCisgICAgICAgICAgICAgICAgICBsb2NzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIxLCByMikKKworICAgIGRlZiBhc3NlcnRFcXVhbEV4Y2VwdGlvbihzZWxmLCBmdW5jLCBjYWxsX3BhcmFtX3N0cmluZywgbG9jcz1Ob25lKToKKyAgICAgICAgbG9jcyA9IGRpY3QobG9jcyBvciB7fSwgZnVuYz1mdW5jKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmFsKCdmdW5jKCVzKScgJSBjYWxsX3BhcmFtX3N0cmluZywgTm9uZSwgbG9jcykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXgxOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdFeGNlcHRpb24gbm90IHJhaXNlZCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2YWwoJ2luc3BlY3QuZ2V0Y2FsbGFyZ3MoZnVuYywgJXMpJyAlIGNhbGxfcGFyYW1fc3RyaW5nLCBOb25lLAorICAgICAgICAgICAgICAgICBsb2NzKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBleDI6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0V4Y2VwdGlvbiBub3QgcmFpc2VkJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGV4MSksIHR5cGUoZXgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXgxKSwgc3RyKGV4MikpCisKKyAgICBkZWYgbWFrZUNhbGxhYmxlKHNlbGYsIHNpZ25hdHVyZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBpdHMgbG9jYWxzKCksIGV4Y2x1ZGluZyB0aGUKKyAgICAgICAgYXV0b2dlbmVyYXRlZCAnLjEnLCAnLjInLCBldGMuIHR1cGxlIHBhcmFtIG5hbWVzIChpZiBhbnkpLiIiIgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgICAgICAgICAoInR1cGxlIHBhcmFtZXRlciB1bnBhY2tpbmcgaGFzIGJlZW4gcmVtb3ZlZCIsIFN5bnRheFdhcm5pbmcpLAorICAgICAgICAgICAgcXVpZXQ9VHJ1ZSk6CisgICAgICAgICAgICBjb2RlID0gKCJsYW1iZGEgJXM6IGRpY3QoaSBmb3IgaSBpbiBsb2NhbHMoKS5pdGVtcygpICIKKyAgICAgICAgICAgICAgICAgICAgImlmIG5vdCBpc190dXBsZW5hbWUoaVswXSkpIikKKyAgICAgICAgICAgIHJldHVybiBldmFsKGNvZGUgJSBzaWduYXR1cmUsIHsnaXNfdHVwbGVuYW1lJyA6IHNlbGYuaXNfdHVwbGVuYW1lfSkKKworICAgIGRlZiB0ZXN0X3BsYWluKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5tYWtlQ2FsbGFibGUoJ2EsIGI9MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYT0yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdiPTMsIGE9MicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgYj0zJykKKyAgICAgICAgIyBleHBhbmQgKml0ZXJhYmxlIC8gKiptYXBwaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKigyLCknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJypbMl0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyooMiwgMyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJypbMiwgM10nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyoqeyJhIjoyfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYj0zLCAqKnsiYSI6Mn0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsICoqeyJiIjozfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKip7ImIiOjMsICJhIjoyfScpCisgICAgICAgICMgZXhwYW5kIFVzZXJMaXN0IC8gVXNlckRpY3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqVXNlckxpc3QoWzJdKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKlVzZXJMaXN0KFsyLCAzXSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyoqVXNlckRpY3QoYT0yKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgKipVc2VyRGljdChiPTMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdiPTIsICoqVXNlckRpY3QoYT0zKScpCisgICAgICAgICMgdW5pY29kZSBrZXl3b3JkIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqKnt1ImEiOjJ9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdiPTMsICoqe3UiYSI6Mn0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsICoqe3UiYiI6M30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyoqe3UiYiI6MywgdSJhIjoyfScpCisKKyAgICBkZWYgdGVzdF92YXJhcmdzKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5tYWtlQ2FsbGFibGUoJ2EsIGI9MSwgKmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIDMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIDMsIDQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyooMiwzLDQpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAqWzMsNF0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIDMsICpVc2VyTGlzdChbNF0pJykKKworICAgIGRlZiB0ZXN0X3Zhcmt3KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5tYWtlQ2FsbGFibGUoJ2EsIGI9MSwgKipjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdhPTInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIGI9MywgYz00JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdiPTMsIGE9MiwgYz00JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdjPTQsICoqeyJhIjoyLCAiYiI6M30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIGM9NCwgKip7ImIiOjN9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdiPTIsICoqeyJhIjozLCAiYyI6NH0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyoqVXNlckRpY3QoYT0yLCBiPTMsIGM9NCknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIGM9NCwgKipVc2VyRGljdChiPTMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdiPTIsICoqVXNlckRpY3QoYT0zLCBjPTQpJykKKyAgICAgICAgIyB1bmljb2RlIGtleXdvcmQgYXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2M9NCwgKip7dSJhIjoyLCB1ImIiOjN9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCBjPTQsICoqe3UiYiI6M30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2I9MiwgKip7dSJhIjozLCB1ImMiOjR9JykKKworICAgIGRlZiB0ZXN0X3Zhcmt3X29ubHkoc2VsZik6CisgICAgICAgICMgaXNzdWUxMTI1NjoKKyAgICAgICAgZiA9IHNlbGYubWFrZUNhbGxhYmxlKCcqKmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYT0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdhPTEsIGI9MicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYz0zLCAqKnsiYSI6IDEsICJiIjogMn0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJyoqVXNlckRpY3QoYT0xLCBiPTIpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdjPTMsICoqVXNlckRpY3QoYT0xLCBiPTIpJykKKworICAgIGRlZiB0ZXN0X3R1cGxlYXJncyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYubWFrZUNhbGxhYmxlKCcoYixjKSwgKGQsKGUsZikpPSgwLFsxLDJdKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKDIsMyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ1syLDNdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdVc2VyTGlzdChbMiwzXSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJygyLDMpLCAoNCwoNSw2KSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJygyLDMpLCAoNCxbNSw2XSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJygyLDMpLCBbNCxVc2VyTGlzdChbNSw2XSldJykKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2ZlYXR1cmVzKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5tYWtlQ2FsbGFibGUoJ2EsIGI9MiwgKGMsKGQsZSkpPSgzLFs0LDVdKSwgKmYsICoqZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgMywgKDQsWzUsNl0pLCA3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAzLCAqWyg0LFs1LDZdKSwgN10sIHg9OCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgMywgeD04LCAqWyg0LFs1LDZdKSwgN10nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIHg9OCwgKlszLCAoNCxbNSw2XSksIDddLCB5PTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ3g9OCwgKlsyLCAzLCAoNCxbNSw2XSldLCB5PTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ3g9OCwgKlVzZXJMaXN0KFsyLCAzLCAoNCxbNSw2XSldKSwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyoqeyJ5Ijo5LCAieiI6MTB9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCB4PTgsICpVc2VyTGlzdChbMywgKDQsWzUsNl0pXSksICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqKlVzZXJEaWN0KHk9OSwgej0xMCknKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICBmMCA9IHNlbGYubWFrZUNhbGxhYmxlKCcnKQorICAgICAgICBmMSA9IHNlbGYubWFrZUNhbGxhYmxlKCdhLCBiJykKKyAgICAgICAgZjIgPSBzZWxmLm1ha2VDYWxsYWJsZSgnYSwgYj0xJykKKyAgICAgICAgIyBmMCB0YWtlcyBubyBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMCwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYwLCAneD0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMCwgJzEseD0xJykKKyAgICAgICAgIyBmMSB0YWtlcyBleGFjdGx5IDIgYXJndW1lbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjEsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYxLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjEsICdhPTInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYxLCAnYj0zJykKKyAgICAgICAgIyBmMiB0YWtlcyBhdCBsZWFzdCAxIGFyZ3VtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjIsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYyLCAnYj0zJykKKyAgICAgICAgZm9yIGYgaW4gZjEsIGYyOgorICAgICAgICAgICAgIyBmMS9mMiB0YWtlcyBleGFjdGx5L2F0IG1vc3QgMiBhcmd1bWVudHMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzIsIDMsIDQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMSwgMiwgMywgYT0xJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzIsIDMsIDQsIGM9NScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcyLCAzLCA0LCBhPTEsIGM9NScpCisgICAgICAgICAgICAjIGYgZ290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnYz0yJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzIsIGM9MycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcyLCAzLCBjPTQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMiwgYz00LCBiPTMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnKip7dSJcdTAzYzBcdTAzYjkiOiA0fScpCisgICAgICAgICAgICAjIGYgZ290IG11bHRpcGxlIHZhbHVlcyBmb3Iga2V5d29yZCBhcmd1bWVudAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMSwgYT0yJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzEsICoqeyJhIjoyfScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcxLCAyLCBiPTMnKQorICAgICAgICAgICAgIyBYWFg6IFB5dGhvbiBpbmNvbnNpc3RlbmN5CisgICAgICAgICAgICAjIC0gZm9yIGZ1bmN0aW9ucyBhbmQgYm91bmQgbWV0aG9kczogdW5leHBlY3RlZCBrZXl3b3JkICdjJworICAgICAgICAgICAgIyAtIGZvciB1bmJvdW5kIG1ldGhvZHM6IG11bHRpcGxlIHZhbHVlcyBmb3Iga2V5d29yZCAnYScKKyAgICAgICAgICAgICNzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcxLCBjPTMsIGE9MicpCisgICAgICAgIGYgPSBzZWxmLm1ha2VDYWxsYWJsZSgnKGEsYik9KDAsMSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnWzFdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnKDEsMiwzKScpCisgICAgICAgICMgaXNzdWUxMTI1NjoKKyAgICAgICAgZjMgPSBzZWxmLm1ha2VDYWxsYWJsZSgnKipjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMywgJzEsIDInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYzLCAnMSwgMiwgYT0xLCBiPTInKQorCitjbGFzcyBUZXN0R2V0Y2FsbGFyZ3NNZXRob2RzKFRlc3RHZXRjYWxsYXJnc0Z1bmN0aW9ucyk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmNscyA9IEZvbworICAgICAgICBzZWxmLmluc3QgPSBGb28oKQorCisgICAgZGVmIG1ha2VDYWxsYWJsZShzZWxmLCBzaWduYXR1cmUpOgorICAgICAgICBhc3NlcnQgJ3NlbGYnIG5vdCBpbiBzaWduYXR1cmUKKyAgICAgICAgbWsgPSBzdXBlcihUZXN0R2V0Y2FsbGFyZ3NNZXRob2RzLCBzZWxmKS5tYWtlQ2FsbGFibGUKKyAgICAgICAgc2VsZi5jbHMubWV0aG9kID0gbWsoJ3NlbGYsICcgKyBzaWduYXR1cmUpCisgICAgICAgIHJldHVybiBzZWxmLmluc3QubWV0aG9kCisKK2NsYXNzIFRlc3RHZXRjYWxsYXJnc1VuYm91bmRNZXRob2RzKFRlc3RHZXRjYWxsYXJnc01ldGhvZHMpOgorCisgICAgZGVmIG1ha2VDYWxsYWJsZShzZWxmLCBzaWduYXR1cmUpOgorICAgICAgICBzdXBlcihUZXN0R2V0Y2FsbGFyZ3NVbmJvdW5kTWV0aG9kcywgc2VsZikubWFrZUNhbGxhYmxlKHNpZ25hdHVyZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuY2xzLm1ldGhvZAorCisgICAgZGVmIGFzc2VydEVxdWFsQ2FsbEFyZ3Moc2VsZiwgZnVuYywgY2FsbF9wYXJhbXNfc3RyaW5nLCBsb2NzPU5vbmUpOgorICAgICAgICByZXR1cm4gc3VwZXIoVGVzdEdldGNhbGxhcmdzVW5ib3VuZE1ldGhvZHMsIHNlbGYpLmFzc2VydEVxdWFsQ2FsbEFyZ3MoCisgICAgICAgICAgICAqc2VsZi5fZ2V0QXNzZXJ0RXF1YWxQYXJhbXMoZnVuYywgY2FsbF9wYXJhbXNfc3RyaW5nLCBsb2NzKSkKKworICAgIGRlZiBhc3NlcnRFcXVhbEV4Y2VwdGlvbihzZWxmLCBmdW5jLCBjYWxsX3BhcmFtc19zdHJpbmcsIGxvY3M9Tm9uZSk6CisgICAgICAgIHJldHVybiBzdXBlcihUZXN0R2V0Y2FsbGFyZ3NVbmJvdW5kTWV0aG9kcywgc2VsZikuYXNzZXJ0RXF1YWxFeGNlcHRpb24oCisgICAgICAgICAgICAqc2VsZi5fZ2V0QXNzZXJ0RXF1YWxQYXJhbXMoZnVuYywgY2FsbF9wYXJhbXNfc3RyaW5nLCBsb2NzKSkKKworICAgIGRlZiBfZ2V0QXNzZXJ0RXF1YWxQYXJhbXMoc2VsZiwgZnVuYywgY2FsbF9wYXJhbXNfc3RyaW5nLCBsb2NzPU5vbmUpOgorICAgICAgICBhc3NlcnQgJ2luc3QnIG5vdCBpbiBjYWxsX3BhcmFtc19zdHJpbmcKKyAgICAgICAgbG9jcyA9IGRpY3QobG9jcyBvciB7fSwgaW5zdD1zZWxmLmluc3QpCisgICAgICAgIHJldHVybiAoZnVuYywgJ2luc3QsJyArIGNhbGxfcGFyYW1zX3N0cmluZywgbG9jcykKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdCgKKyAgICAgICAgVGVzdERlY29yYXRvcnMsIFRlc3RSZXRyaWV2aW5nU291cmNlQ29kZSwgVGVzdE9uZWxpbmVycywgVGVzdEJ1Z2d5Q2FzZXMsCisgICAgICAgIFRlc3RJbnRlcnByZXRlclN0YWNrLCBUZXN0Q2xhc3Nlc0FuZEZ1bmN0aW9ucywgVGVzdFByZWRpY2F0ZXMsCisgICAgICAgIFRlc3RHZXRjYWxsYXJnc0Z1bmN0aW9ucywgVGVzdEdldGNhbGxhcmdzTWV0aG9kcywKKyAgICAgICAgVGVzdEdldGNhbGxhcmdzVW5ib3VuZE1ldGhvZHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ludC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ludC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjVmOWEyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaW50LnB5CkBAIC0wLDAgKzEsNDY3IEBACitpbXBvcnQgc3lzCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaGF2ZV91bmljb2RlCitpbXBvcnQgbWF0aAorCitMID0gWworICAgICAgICAoJzAnLCAwKSwKKyAgICAgICAgKCcxJywgMSksCisgICAgICAgICgnOScsIDkpLAorICAgICAgICAoJzEwJywgMTApLAorICAgICAgICAoJzk5JywgOTkpLAorICAgICAgICAoJzEwMCcsIDEwMCksCisgICAgICAgICgnMzE0JywgMzE0KSwKKyAgICAgICAgKCcgMzE0JywgMzE0KSwKKyAgICAgICAgKCczMTQgJywgMzE0KSwKKyAgICAgICAgKCcgIFx0XHQgIDMxNCAgXHRcdCAgJywgMzE0KSwKKyAgICAgICAgKHJlcHIoc3lzLm1heGludCksIHN5cy5tYXhpbnQpLAorICAgICAgICAoJyAgMXgnLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgKCcgIDEgICcsIDEpLAorICAgICAgICAoJyAgMVwwMiAgJywgVmFsdWVFcnJvciksCisgICAgICAgICgnJywgVmFsdWVFcnJvciksCisgICAgICAgICgnICcsIFZhbHVlRXJyb3IpLAorICAgICAgICAoJyAgXHRcdCAgJywgVmFsdWVFcnJvcikKK10KK2lmIGhhdmVfdW5pY29kZToKKyAgICBMICs9IFsKKyAgICAgICAgKHVuaWNvZGUoJzAnKSwgMCksCisgICAgICAgICh1bmljb2RlKCcxJyksIDEpLAorICAgICAgICAodW5pY29kZSgnOScpLCA5KSwKKyAgICAgICAgKHVuaWNvZGUoJzEwJyksIDEwKSwKKyAgICAgICAgKHVuaWNvZGUoJzk5JyksIDk5KSwKKyAgICAgICAgKHVuaWNvZGUoJzEwMCcpLCAxMDApLAorICAgICAgICAodW5pY29kZSgnMzE0JyksIDMxNCksCisgICAgICAgICh1bmljb2RlKCcgMzE0JyksIDMxNCksCisgICAgICAgICh1bmljb2RlKCdcdTA2NjNcdTA2NjFcdTA2NjQgJywncmF3LXVuaWNvZGUtZXNjYXBlJyksIDMxNCksCisgICAgICAgICh1bmljb2RlKCcgIFx0XHQgIDMxNCAgXHRcdCAgJyksIDMxNCksCisgICAgICAgICh1bmljb2RlKCcgIDF4JyksIFZhbHVlRXJyb3IpLAorICAgICAgICAodW5pY29kZSgnICAxICAnKSwgMSksCisgICAgICAgICh1bmljb2RlKCcgIDFcMDIgICcpLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgKHVuaWNvZGUoJycpLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgKHVuaWNvZGUoJyAnKSwgVmFsdWVFcnJvciksCisgICAgICAgICh1bmljb2RlKCcgIFx0XHQgICcpLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgKHVuaWNocigweDIwMCksIFZhbHVlRXJyb3IpLAorXQorCitjbGFzcyBJbnRMb25nQ29tbW9uVGVzdHMob2JqZWN0KToKKworICAgICIiIk1peGluIG9mIHRlc3QgY2FzZXMgdG8gc2hhcmUgYmV0d2VlbiBib3RoIHRlc3RfaW50IGFuZCB0ZXN0X2xvbmcuIiIiCisKKyAgICAjIENoYW5nZSB0byBpbnQgb3IgbG9uZyBpbiB0aGUgVGVzdENhc2Ugc3ViY2xhc3MuCisgICAgbnR5cGUgPSBOb25lCisKKyAgICBkZWYgdGVzdF9ub19hcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubnR5cGUoKSwgMCkKKworICAgIGRlZiB0ZXN0X2tleXdvcmRfYXJncyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGludm9raW5nIGNvbnN0cnVjdG9yIHVzaW5nIGtleXdvcmQgYXJndW1lbnRzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubnR5cGUoeD0xLjIpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubnR5cGUoJzEwMCcsIGJhc2U9MiksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5udHlwZSh4PScxMDAnLCBiYXNlPTIpLCA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubnR5cGUsIGJhc2U9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5udHlwZSwgYmFzZT0wKQorCitjbGFzcyBJbnRUZXN0Q2FzZXMoSW50TG9uZ0NvbW1vblRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBudHlwZSA9IGludAorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KDMxNCksIDMxNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoMy4xNCksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KDMxNEwpLCAzMTQpCisgICAgICAgICMgQ2hlY2sgdGhhdCBjb252ZXJzaW9uIGZyb20gZmxvYXQgdHJ1bmNhdGVzIHRvd2FyZHMgemVybworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgtMy4xNCksIC0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgzLjkpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgtMy45KSwgLTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KDMuNSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KC0zLjUpLCAtMykKKyAgICAgICAgIyBEaWZmZXJlbnQgYmFzZToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoIjEwIiwxNiksIDE2TCkKKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQodW5pY29kZSgiMTAiKSwxNiksIDE2TCkKKyAgICAgICAgIyBUZXN0IGNvbnZlcnNpb24gZnJvbSBzdHJpbmdzIGFuZCB2YXJpb3VzIGFub21hbGllcworICAgICAgICBmb3IgcywgdiBpbiBMOgorICAgICAgICAgICAgZm9yIHNpZ24gaW4gIiIsICIrIiwgIi0iOgorICAgICAgICAgICAgICAgIGZvciBwcmVmaXggaW4gIiIsICIgIiwgIlx0IiwgIiAgXHRcdCAgIjoKKyAgICAgICAgICAgICAgICAgICAgc3MgPSBwcmVmaXggKyBzaWduICsgcworICAgICAgICAgICAgICAgICAgICB2diA9IHYKKyAgICAgICAgICAgICAgICAgICAgaWYgc2lnbiA9PSAiLSIgYW5kIHYgaXMgbm90IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICB2diA9IC12CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHNzKSwgdnYpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCB2OgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHMgPSByZXByKC0xLXN5cy5tYXhpbnQpCisgICAgICAgIHggPSBpbnQocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4KzEsIC1zeXMubWF4aW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgaW50KQorICAgICAgICAjIHNob3VsZCByZXR1cm4gbG9uZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChzWzE6XSksIHN5cy5tYXhpbnQrMSkKKworICAgICAgICAjIHNob3VsZCByZXR1cm4gbG9uZworICAgICAgICB4ID0gaW50KDFlMTAwKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgbG9uZykKKyAgICAgICAgeCA9IGludCgtMWUxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBsb25nKQorCisKKyAgICAgICAgIyBTRiBidWcgNDM0MTg2OiAgMHg4MDAwMDAwMC8yICE9IDB4ODAwMDAwMDA+PjEuCisgICAgICAgICMgV29ya2VkIGJ5IGFjY2lkZW50IGluIFdpbmRvd3MgcmVsZWFzZSBidWlsZCwgYnV0IGZhaWxlZCBpbiBkZWJ1ZyBidWlsZC4KKyAgICAgICAgIyBGYWlsZWQgaW4gYWxsIExpbnV4IGJ1aWxkcy4KKyAgICAgICAgeCA9IC0xLXN5cy5tYXhpbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4ID4+IDEsIHgvLzIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMTIzXDAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICc1MycsIDQwKQorCisgICAgICAgICMgU0YgYnVnIDE1NDU0OTc6IGVtYmVkZGVkIE5VTHMgd2VyZSBub3QgZGV0ZWN0ZWQgd2l0aAorICAgICAgICAjIGV4cGxpY2l0IGJhc2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMTIzXDAnLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMTIzXHgwMCAyNDUnLCAyMCkKKworICAgICAgICB4ID0gaW50KCcxJyAqIDYwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGxvbmcpCisKKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgeCA9IGludCh1bmljaHIoMHg2NjEpICogNjAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGxvbmcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnQsIDEsIDEyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcwMTIzJywgMCksIDgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMHgxMjMnLCAxNiksIDI5MSkKKworICAgICAgICAjIEJ1ZyAxNjc5OiAiMHgiIGlzIG5vdCBhIHZhbGlkIGhleCBsaXRlcmFsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgIjB4IiwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgIjB4IiwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICIwbyIsIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgIjBvIiwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICIwYiIsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgIjBiIiwgMCkKKworCisgICAgICAgICMgU0YgYnVnIDEzMzQ2NjI6IGludChzdHJpbmcsIGJhc2UpIHdyb25nIGFuc3dlcnMKKyAgICAgICAgIyBWYXJpb3VzIHJlcHJlc2VudGF0aW9ucyBvZiAyKiozMiBldmFsdWF0ZWQgdG8gMAorICAgICAgICAjIHJhdGhlciB0aGFuIDIqKjMyIGluIHByZXZpb3VzIHZlcnNpb25zCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsIDIpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEwMjAwMjAyMjIwMTIyMTExMTIxMScsIDMpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEwMDAwMDAwMDAwMDAwMDAwJywgNCksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMzIyNDQwMDI0MjMxNDEnLCA1KSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxNTUwMTA0MDE1NTA0JywgNiksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMjExMzAxNDIyMzU0JywgNyksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNDAwMDAwMDAwMDAnLCA4KSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMjA2ODY1NzQ1NCcsIDkpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzQyOTQ5NjcyOTYnLCAxMCksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTkwNDQ0MDU1NCcsIDExKSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc5YmE0NjE1OTQnLCAxMiksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNTM1YTc5ODg5JywgMTMpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzJjYTViNzQ2NCcsIDE0KSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxYTIwZGNkODEnLCAxNSksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAwMDAwMDAwJywgMTYpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJ2E3ZmZkYTkxJywgMTcpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzcwNGhlN2c0JywgMTgpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzRmNWFmZjY2JywgMTkpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzM3MjNhaTRnJywgMjApLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzI4MWQ1NWk0JywgMjEpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzFmajhiMTg0JywgMjIpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzE2MDZrN2ljJywgMjMpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJ21iOTk0YWcnLCAyNCksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnaGVrMm1nbCcsIDI1KSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCdkbmNoYm5tJywgMjYpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJ2IyOGpwZG0nLCAyNyksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnOHBmZ2loNCcsIDI4KSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc3NmJlaWdnJywgMjkpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzVxbWNwcWcnLCAzMCksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNHEwanRvNCcsIDMxKSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc0MDAwMDAwJywgMzIpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzNhb2txOTQnLCAzMyksIDQyOTQ5NjcyOTZMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMnFoeGpsaScsIDM0KSwgNDI5NDk2NzI5NkwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcyYnI0NXFiJywgMzUpLCA0Mjk0OTY3Mjk2TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzF6MTQxejQnLCAzNiksIDQyOTQ5NjcyOTZMKQorCisgICAgICAgICMgdGVzdHMgd2l0aCBiYXNlIDAKKyAgICAgICAgIyB0aGlzIGZhaWxzIG9uIDMuMCwgYnV0IGluIDIueCB0aGUgb2xkIG9jdGFsIHN5bnRheCBpcyBhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcgMDEyMyAgJywgMCksIDgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnIDAxMjMgICcsIDApLCA4MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzAwMCcsIDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMG8xMjMnLCAwKSwgODMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcweDEyMycsIDApLCAyOTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcwYjEwMCcsIDApLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnIDBPMTIzICAgJywgMCksIDgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnIDBYMTIzICAnLCAwKSwgMjkxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnIDBCMTAwICcsIDApLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMCcsIDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnKzAnLCAwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJy0wJywgMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcwMCcsIDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICcwOCcsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJy0wMTIzOTUnLCAwKQorCisgICAgICAgICMgd2l0aG91dCBiYXNlIHN0aWxsIGJhc2UgMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzAxMjMnKSwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMDEyMycsIDEwKSwgMTIzKQorCisgICAgICAgICMgdGVzdHMgd2l0aCBwcmVmaXggYW5kIGJhc2UgIT0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMHgxMjMnLCAxNiksIDI5MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzBvMTIzJywgOCksIDgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMGIxMDAnLCAyKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzBYMTIzJywgMTYpLCAyOTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcwTzEyMycsIDgpLCA4MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzBCMTAwJywgMiksIDQpCisKKyAgICAgICAgIyB0aGUgY29kZSBoYXMgc3BlY2lhbCBjaGVja3MgZm9yIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlCisgICAgICAgICMgIHR5cGUgcHJlZml4CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzBiMicsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzBiMDInLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICcwQjInLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICcwQjAyJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMG84JywgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMG8wOCcsIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzBPOCcsIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzBPMDgnLCA4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICcweGcnLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMHgwZycsIDE2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICcwWGcnLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMFgwZycsIDE2KQorCisgICAgICAgICMgU0YgYnVnIDEzMzQ2NjI6IGludChzdHJpbmcsIGJhc2UpIHdyb25nIGFuc3dlcnMKKyAgICAgICAgIyBDaGVja3MgZm9yIHByb3BlciBldmFsdWF0aW9uIG9mIDIqKjMyICsgMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJywgMiksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAyMDAyMDIyMjAxMjIxMTExMjEyJywgMyksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAwMDAwMDAwMDAwMDAwMDEnLCA0KSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCczMjI0NDAwMjQyMzE0MicsIDUpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzE1NTAxMDQwMTU1MDUnLCA2KSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcyMTEzMDE0MjIzNTUnLCA3KSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc0MDAwMDAwMDAwMScsIDgpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEyMDY4NjU3NDU1JywgOSksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNDI5NDk2NzI5NycsIDEwKSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxOTA0NDQwNTU1JywgMTEpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzliYTQ2MTU5NScsIDEyKSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc1MzVhNzk4OGEnLCAxMyksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMmNhNWI3NDY1JywgMTQpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzFhMjBkY2Q4MicsIDE1KSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDAwMDAwMDEnLCAxNiksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnYTdmZmRhOTInLCAxNyksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNzA0aGU3ZzUnLCAxOCksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNGY1YWZmNjcnLCAxOSksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMzcyM2FpNGgnLCAyMCksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMjgxZDU1aTUnLCAyMSksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMWZqOGIxODUnLCAyMiksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTYwNms3aWQnLCAyMyksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnbWI5OTRhaCcsIDI0KSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCdoZWsybWdtJywgMjUpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJ2RuY2hibm4nLCAyNiksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnYjI4anBkbicsIDI3KSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc4cGZnaWg1JywgMjgpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzc2YmVpZ2gnLCAyOSksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNXFtY3BxaCcsIDMwKSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc0cTBqdG81JywgMzEpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzQwMDAwMDEnLCAzMiksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnM2Fva3E5NScsIDMzKSwgNDI5NDk2NzI5N0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcycWh4amxqJywgMzQpLCA0Mjk0OTY3Mjk3TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzJicjQ1cWMnLCAzNSksIDQyOTQ5NjcyOTdMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMXoxNDF6NScsIDM2KSwgNDI5NDk2NzI5N0wpCisKKyAgICBkZWYgdGVzdF9iaXRfbGVuZ3RoKHNlbGYpOgorICAgICAgICB0aW55ID0gMWUtMTAKKyAgICAgICAgZm9yIHggaW4geHJhbmdlKC02NTAwMCwgNjUwMDApOgorICAgICAgICAgICAgayA9IHguYml0X2xlbmd0aCgpCisgICAgICAgICAgICAjIENoZWNrIGVxdWl2YWxlbmNlIHdpdGggUHl0aG9uIHZlcnNpb24KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgbGVuKGJpbih4KS5sc3RyaXAoJy0wYicpKSkKKyAgICAgICAgICAgICMgQmVoYXZpb3VyIGFzIHNwZWNpZmllZCBpbiB0aGUgZG9jcworICAgICAgICAgICAgaWYgeCAhPSAwOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiooay0xKSA8PSBhYnMoeCkgPCAyKiprKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIDApCisgICAgICAgICAgICAjIEFsdGVybmF0aXZlIGRlZmluaXRpb246IHguYml0X2xlbmd0aCgpID09IDEgKyBmbG9vcihsb2dfMih4KSkKKyAgICAgICAgICAgIGlmIHggIT0gMDoKKyAgICAgICAgICAgICAgICAjIFdoZW4geCBpcyBhbiBleGFjdCBwb3dlciBvZiAyLCBudW1lcmljIGVycm9ycyBjYW4KKyAgICAgICAgICAgICAgICAjIGNhdXNlIGZsb29yKGxvZyh4KS9sb2coMikpIHRvIGJlIG9uZSB0b28gc21hbGw7IGZvcgorICAgICAgICAgICAgICAgICMgc21hbGwgeCB0aGlzIGNhbiBiZSBmaXhlZCBieSBhZGRpbmcgYSBzbWFsbCBxdWFudGl0eQorICAgICAgICAgICAgICAgICMgdG8gdGhlIHF1b3RpZW50IGJlZm9yZSB0YWtpbmcgdGhlIGZsb29yLgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgMSArIG1hdGguZmxvb3IoCisgICAgICAgICAgICAgICAgICAgICAgICBtYXRoLmxvZyhhYnMoeCkpL21hdGgubG9nKDIpICsgdGlueSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCkuYml0X2xlbmd0aCgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxKS5iaXRfbGVuZ3RoKCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0xKS5iaXRfbGVuZ3RoKCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDIpLmJpdF9sZW5ndGgoKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTIpLmJpdF9sZW5ndGgoKSwgMikKKyAgICAgICAgZm9yIGkgaW4gWzIsIDMsIDE1LCAxNiwgMTcsIDMxLCAzMiwgMzMsIDYzLCA2NF06CisgICAgICAgICAgICBhID0gMioqaQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYS0xKS5iaXRfbGVuZ3RoKCksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxLWEpLmJpdF9sZW5ndGgoKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEpLmJpdF9sZW5ndGgoKSwgaSsxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLWEpLmJpdF9sZW5ndGgoKSwgaSsxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSsxKS5iaXRfbGVuZ3RoKCksIGkrMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC1hLTEpLmJpdF9sZW5ndGgoKSwgaSsxKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IHJlcXVpcmVzIElFRUUgNzU0IGRvdWJsZXMiKQorICAgIGRlZiB0ZXN0X2Zsb2F0X2NvbnZlcnNpb24oc2VsZik6CisgICAgICAgICMgdmFsdWVzIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhcyBmbG9hdHMKKyAgICAgICAgZXhhY3RfdmFsdWVzID0gWy0yLCAtMSwgMCwgMSwgMiwgMioqNTIsIDIqKjUzLTEsIDIqKjUzLCAyKio1MysyLAorICAgICAgICAgICAgICAgICAgICAgICAgIDIqKjUzKzQsIDIqKjU0LTQsIDIqKjU0LTIsIDIqKjYzLCAtMioqNjMsIDIqKjY0LAorICAgICAgICAgICAgICAgICAgICAgICAgIC0yKio2NCwgMTAqKjIwLCAxMCoqMjEsIDEwKioyMl0KKyAgICAgICAgZm9yIHZhbHVlIGluIGV4YWN0X3ZhbHVlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KGludCh2YWx1ZSkpKSwgdmFsdWUpCisKKyAgICAgICAgIyB0ZXN0IHJvdW5kLWhhbGYtdG8tZXZlbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgyKio1MysxKSksIDIqKjUzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgyKio1MysyKSksIDIqKjUzKzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjUzKzMpKSwgMioqNTMrNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTMrNSkpLCAyKio1Mys0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgyKio1Mys2KSksIDIqKjUzKzYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjUzKzcpKSwgMioqNTMrOCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgtMioqNTMtMSkpLCAtMioqNTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KC0yKio1My0yKSksIC0yKio1My0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgtMioqNTMtMykpLCAtMioqNTMtNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoLTIqKjUzLTUpKSwgLTIqKjUzLTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KC0yKio1My02KSksIC0yKio1My02KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgtMioqNTMtNykpLCAtMioqNTMtOCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgyKio1NC0yKSksIDIqKjU0LTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjU0LTEpKSwgMioqNTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjU0KzIpKSwgMioqNTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjU0KzMpKSwgMioqNTQrNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZmxvYXQoMioqNTQrNSkpLCAyKio1NCs0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCgyKio1NCs2KSksIDIqKjU0KzgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjU0KzEwKSksIDIqKjU0KzgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGZsb2F0KDIqKjU0KzExKSksIDIqKjU0KzEyKQorCisgICAgZGVmIHRlc3RfdmFsaWRfbm9uX251bWVyaWNfaW5wdXRfdHlwZXNfZm9yX3goc2VsZik6CisgICAgICAgICMgVGVzdCBwb3NzaWJsZSB2YWxpZCBub24tbnVtZXJpYyB0eXBlcyBmb3IgeCwgaW5jbHVkaW5nIHN1YmNsYXNzZXMKKyAgICAgICAgIyBvZiB0aGUgYWxsb3dlZCBidWlsdC1pbiB0eXBlcy4KKyAgICAgICAgY2xhc3MgQ3VzdG9tU3RyKHN0cik6IHBhc3MKKyAgICAgICAgdmFsdWVzID0gWycxMDAnLCBDdXN0b21TdHIoJzEwMCcpXQorCisgICAgICAgIGlmIGhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIGNsYXNzIEN1c3RvbVVuaWNvZGUodW5pY29kZSk6IHBhc3MKKyAgICAgICAgICAgIHZhbHVlcyArPSBbdW5pY29kZSgnMTAwJyksIEN1c3RvbVVuaWNvZGUodW5pY29kZSgnMTAwJykpXQorCisgICAgICAgIGZvciB4IGluIHZhbHVlczoKKyAgICAgICAgICAgIG1zZyA9ICd4IGhhcyB2YWx1ZSAlcyBhbmQgdHlwZSAlcycgJSAoeCwgdHlwZSh4KS5fX25hbWVfXykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCh4KSwgMTAwLCBtc2c9bXNnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHgsIDIpLCA0LCBtc2c9bXNnKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdGb3IgJXMgZ290IFR5cGVFcnJvcjogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZSh4KS5fX25hbWVfXywgZXJyKSkKKworICAgIGRlZiB0ZXN0X2Vycm9yX29uX3N0cmluZ19mbG9hdF9mb3JfeChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMS4yJykKKworICAgIGRlZiB0ZXN0X2Vycm9yX29uX2J5dGVhcnJheV9mb3JfeChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnQsIGJ5dGVhcnJheSgnMTAwJyksIDIpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9vbl9pbnZhbGlkX2ludF9iYXNlcyhzZWxmKToKKyAgICAgICAgZm9yIGJhc2UgaW4gWy0xLCAxLCAxMDAwXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzEwMCcsIGJhc2UpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9vbl9zdHJpbmdfYmFzZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnQsIDEwMCwgYmFzZT0nZm9vJykKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfc21hbGxfaW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnQoJzEwJyksIDEwKQorICAgICAgICBzZWxmLmFzc2VydElzKGludCgnLTEnKSwgLTEpCisgICAgICAgIGlmIGhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoaW50KHUnMTAnKSwgMTApCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGludCh1Jy0xJyksIC0xKQorCisgICAgZGVmIHRlc3RfaW50Y29udmVyc2lvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IF9faW50X18oKQorICAgICAgICBjbGFzcyBDbGFzc2ljTWlzc2luZ01ldGhvZHM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBpbnQsIENsYXNzaWNNaXNzaW5nTWV0aG9kcygpKQorCisgICAgICAgIGNsYXNzIE1pc3NpbmdNZXRob2RzKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LCBNaXNzaW5nTWV0aG9kcygpKQorCisgICAgICAgIGNsYXNzIEZvbzA6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICBjbGFzcyBGb28xKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICBjbGFzcyBGb28yKGludCk6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICBjbGFzcyBGb28zKGludCk6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIGNsYXNzIEZvbzQoaW50KToKKyAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MkwKKworICAgICAgICBjbGFzcyBGb281KGludCk6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIuCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoRm9vMCgpKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KEZvbzEoKSksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChGb28yKCkpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoRm9vMygpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoRm9vNCgpKSwgNDJMKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludCwgRm9vNSgpKQorCisgICAgICAgIGNsYXNzIENsYXNzaWM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZvciBiYXNlIGluIChvYmplY3QsIENsYXNzaWMpOgorICAgICAgICAgICAgY2xhc3MgSW50T3ZlcnJpZGVzVHJ1bmMoYmFzZSk6CisgICAgICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICAgICAgICAgIGRlZiBfX3RydW5jX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KEludE92ZXJyaWRlc1RydW5jKCkpLCA0MikKKworICAgICAgICAgICAgY2xhc3MgSnVzdFRydW5jKGJhc2UpOgorICAgICAgICAgICAgICAgIGRlZiBfX3RydW5jX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoSnVzdFRydW5jKCkpLCA0MikKKworICAgICAgICAgICAgZm9yIHRydW5jX3Jlc3VsdF9iYXNlIGluIChvYmplY3QsIENsYXNzaWMpOgorICAgICAgICAgICAgICAgIGNsYXNzIEludGVncmFsKHRydW5jX3Jlc3VsdF9iYXNlKToKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICAgICAgICAgIGNsYXNzIFRydW5jUmV0dXJuc05vbkludChiYXNlKToKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9fdHJ1bmNfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ3JhbCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoVHJ1bmNSZXR1cm5zTm9uSW50KCkpLCA0MikKKworICAgICAgICAgICAgICAgIGNsYXNzIE5vbkludGVncmFsKHRydW5jX3Jlc3VsdF9iYXNlKToKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9fdHJ1bmNfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB3ZSBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24uCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uSW50ZWdyYWwoKQorCisgICAgICAgICAgICAgICAgY2xhc3MgVHJ1bmNSZXR1cm5zTm9uSW50ZWdyYWwoYmFzZSk6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX3RydW5jX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uSW50ZWdyYWwoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaW50KFRydW5jUmV0dXJuc05vbkludGVncmFsKCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fdHJ1bmNfXyByZXR1cm5lZCBub24tSW50ZWdyYWwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKHR5cGUgTm9uSW50ZWdyYWwpIikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBUeXBlRXJyb3Igd2l0aCAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChiYXNlLCB0cnVuY19yZXN1bHRfYmFzZSksKSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChJbnRUZXN0Q2FzZXMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ludF9saXRlcmFsLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaW50X2xpdGVyYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY1Y2M3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2ludF9saXRlcmFsLnB5CkBAIC0wLDAgKzEsMTg4IEBACisiIiJUZXN0IGNvcnJlY3QgdHJlYXRtZW50IG9mIGhleC9vY3QgY29uc3RhbnRzLgorCitUaGlzIGlzIGNvbXBsZXggYmVjYXVzZSBvZiBjaGFuZ2VzIGR1ZSB0byBQRVAgMjM3LgorIiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCitjbGFzcyBUZXN0SGV4T2N0QmluKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2hleF9iYXNlbGluZShzZWxmKToKKyAgICAgICAgIyBBIGZldyB1cHBlci9sb3dlcmNhc2UgdGVzdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDAsIDBYMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDEsIDBYMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDEyMzQ1Njc4OWFiY2RlZiwgMFgxMjM0NTY3ODlhYmNkZWYpCisgICAgICAgICMgQmFzZWxpbmUgdGVzdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHgxMCwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHg3ZmZmZmZmZiwgMjE0NzQ4MzY0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweDdmZmZmZmZmZmZmZmZmZmYsIDkyMjMzNzIwMzY4NTQ3NzU4MDcpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIHBhcmVudGhlc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgweDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMHgxMCksIC0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDB4N2ZmZmZmZmYpLCAtMjE0NzQ4MzY0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDB4N2ZmZmZmZmZmZmZmZmZmZiksIC05MjIzMzcyMDM2ODU0Nzc1ODA3KQorICAgICAgICAjIERpdHRvIHdpdGggYSBtaW51cyBzaWduIGFuZCBOTyBwYXJlbnRoZXNlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0weDAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTB4MTAsIC0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMHg3ZmZmZmZmZiwgLTIxNDc0ODM2NDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTB4N2ZmZmZmZmZmZmZmZmZmZiwgLTkyMjMzNzIwMzY4NTQ3NzU4MDcpCisKKyAgICBkZWYgdGVzdF9oZXhfdW5zaWduZWQoc2VsZik6CisgICAgICAgICMgUG9zaXRpdmUgY29uc3RhbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHg4MDAwMDAwMCwgMjE0NzQ4MzY0OEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHhmZmZmZmZmZiwgNDI5NDk2NzI5NUwpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIHBhcmVudGhlc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgweDgwMDAwMDAwKSwgLTIxNDc0ODM2NDhMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMHhmZmZmZmZmZiksIC00Mjk0OTY3Mjk1TCkKKyAgICAgICAgIyBEaXR0byB3aXRoIGEgbWludXMgc2lnbiBhbmQgTk8gcGFyZW50aGVzZXMKKyAgICAgICAgIyBUaGlzIGZhaWxlZCBpbiBQeXRob24gMi4yIHRocm91Z2ggMi4yLjIgYW5kIGluIDIuM2ExCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTB4ODAwMDAwMDAsIC0yMTQ3NDgzNjQ4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMHhmZmZmZmZmZiwgLTQyOTQ5NjcyOTVMKQorCisgICAgICAgICMgUG9zaXRpdmUgY29uc3RhbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMHg4MDAwMDAwMDAwMDAwMDAwLCA5MjIzMzcyMDM2ODU0Nzc1ODA4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgweGZmZmZmZmZmZmZmZmZmZmYsIDE4NDQ2NzQ0MDczNzA5NTUxNjE1TCkKKyAgICAgICAgIyBEaXR0byB3aXRoIGEgbWludXMgc2lnbiBhbmQgcGFyZW50aGVzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDB4ODAwMDAwMDAwMDAwMDAwMCksIC05MjIzMzcyMDM2ODU0Nzc1ODA4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDB4ZmZmZmZmZmZmZmZmZmZmZiksIC0xODQ0Njc0NDA3MzcwOTU1MTYxNUwpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIE5PIHBhcmVudGhlc2VzCisgICAgICAgICMgVGhpcyBmYWlsZWQgaW4gUHl0aG9uIDIuMiB0aHJvdWdoIDIuMi4yIGFuZCBpbiAyLjNhMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0weDgwMDAwMDAwMDAwMDAwMDAsIC05MjIzMzcyMDM2ODU0Nzc1ODA4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMHhmZmZmZmZmZmZmZmZmZmZmLCAtMTg0NDY3NDQwNzM3MDk1NTE2MTVMKQorCisgICAgZGVmIHRlc3Rfb2N0X2Jhc2VsaW5lKHNlbGYpOgorICAgICAgICAjIEJhc2VsaW5lIHRlc3RzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMDAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMDIwLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwMTc3Nzc3Nzc3NzcsIDIxNDc0ODM2NDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMDc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NywgOTIyMzM3MjAzNjg1NDc3NTgwNykKKyAgICAgICAgIyBEaXR0byB3aXRoIGEgbWludXMgc2lnbiBhbmQgcGFyZW50aGVzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDAwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDAyMCksIC0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDAxNzc3Nzc3Nzc3NyksIC0yMTQ3NDgzNjQ3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMDc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NyksIC05MjIzMzcyMDM2ODU0Nzc1ODA3KQorICAgICAgICAjIERpdHRvIHdpdGggYSBtaW51cyBzaWduIGFuZCBOTyBwYXJlbnRoZXNlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0wMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMDIwLCAtMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTAxNzc3Nzc3Nzc3NywgLTIxNDc0ODM2NDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTA3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcsIC05MjIzMzcyMDM2ODU0Nzc1ODA3KQorCisgICAgZGVmIHRlc3Rfb2N0X2Jhc2VsaW5lX25ldyhzZWxmKToKKyAgICAgICAgIyBBIGZldyB1cHBlci9sb3dlcmNhc2UgdGVzdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwbzAsIDBPMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwbzEsIDBPMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwbzEyMzQ1NjcsIDBPMTIzNDU2NykKKyAgICAgICAgIyBCYXNlbGluZSB0ZXN0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBvMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwbzIwLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwbzE3Nzc3Nzc3Nzc3LCAyMTQ3NDgzNjQ3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBvNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3LCA5MjIzMzcyMDM2ODU0Nzc1ODA3KQorICAgICAgICAjIERpdHRvIHdpdGggYSBtaW51cyBzaWduIGFuZCBwYXJlbnRoZXNlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMG8wKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDBvMjApLCAtMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwbzE3Nzc3Nzc3Nzc3KSwgLTIxNDc0ODM2NDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwbzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NyksIC05MjIzMzcyMDM2ODU0Nzc1ODA3KQorICAgICAgICAjIERpdHRvIHdpdGggYSBtaW51cyBzaWduIGFuZCBOTyBwYXJlbnRoZXNlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0wbzAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTBvMjAsIC0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMG8xNzc3Nzc3Nzc3NywgLTIxNDc0ODM2NDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTBvNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3LCAtOTIyMzM3MjAzNjg1NDc3NTgwNykKKworICAgIGRlZiB0ZXN0X29jdF91bnNpZ25lZChzZWxmKToKKyAgICAgICAgIyBQb3NpdGl2ZSBjb25zdGFudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwMjAwMDAwMDAwMDAsIDIxNDc0ODM2NDhMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAzNzc3Nzc3Nzc3NywgNDI5NDk2NzI5NUwpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIHBhcmVudGhlc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwMjAwMDAwMDAwMDApLCAtMjE0NzQ4MzY0OEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwMzc3Nzc3Nzc3NzcpLCAtNDI5NDk2NzI5NUwpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIE5PIHBhcmVudGhlc2VzCisgICAgICAgICMgVGhpcyBmYWlsZWQgaW4gUHl0aG9uIDIuMiB0aHJvdWdoIDIuMi4yIGFuZCBpbiAyLjNhMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0wMjAwMDAwMDAwMDAsIC0yMTQ3NDgzNjQ4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMDM3Nzc3Nzc3Nzc3LCAtNDI5NDk2NzI5NUwpCisKKyAgICAgICAgIyBQb3NpdGl2ZSBjb25zdGFudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgOTIyMzM3MjAzNjg1NDc3NTgwOEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMDE3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcsIDE4NDQ2NzQ0MDczNzA5NTUxNjE1TCkKKyAgICAgICAgIyBEaXR0byB3aXRoIGEgbWludXMgc2lnbiBhbmQgcGFyZW50aGVzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwKSwgLTkyMjMzNzIwMzY4NTQ3NzU4MDhMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMDE3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcpLCAtMTg0NDY3NDQwNzM3MDk1NTE2MTVMKQorICAgICAgICAjIERpdHRvIHdpdGggYSBtaW51cyBzaWduIGFuZCBOTyBwYXJlbnRoZXNlcworICAgICAgICAjIFRoaXMgZmFpbGVkIGluIFB5dGhvbiAyLjIgdGhyb3VnaCAyLjIuMiBhbmQgaW4gMi4zYTEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAsIC05MjIzMzcyMDM2ODU0Nzc1ODA4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMDE3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcsIC0xODQ0Njc0NDA3MzcwOTU1MTYxNUwpCisKKyAgICBkZWYgdGVzdF9vY3RfdW5zaWduZWRfbmV3KHNlbGYpOgorICAgICAgICAjIFBvc2l0aXZlIGNvbnN0YW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBvMjAwMDAwMDAwMDAsIDIxNDc0ODM2NDhMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBvMzc3Nzc3Nzc3NzcsIDQyOTQ5NjcyOTVMKQorICAgICAgICAjIERpdHRvIHdpdGggYSBtaW51cyBzaWduIGFuZCBwYXJlbnRoZXNlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMG8yMDAwMDAwMDAwMCksIC0yMTQ3NDgzNjQ4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDBvMzc3Nzc3Nzc3NzcpLCAtNDI5NDk2NzI5NUwpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIE5PIHBhcmVudGhlc2VzCisgICAgICAgICMgVGhpcyBmYWlsZWQgaW4gUHl0aG9uIDIuMiB0aHJvdWdoIDIuMi4yIGFuZCBpbiAyLjNhMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0wbzIwMDAwMDAwMDAwLCAtMjE0NzQ4MzY0OEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTBvMzc3Nzc3Nzc3NzcsIC00Mjk0OTY3Mjk1TCkKKworICAgICAgICAjIFBvc2l0aXZlIGNvbnN0YW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBvMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgOTIyMzM3MjAzNjg1NDc3NTgwOEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMG8xNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3LCAxODQ0Njc0NDA3MzcwOTU1MTYxNUwpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIHBhcmVudGhlc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwbzEwMDAwMDAwMDAwMDAwMDAwMDAwMDApLCAtOTIyMzM3MjAzNjg1NDc3NTgwOEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwbzE3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcpLCAtMTg0NDY3NDQwNzM3MDk1NTE2MTVMKQorICAgICAgICAjIERpdHRvIHdpdGggYSBtaW51cyBzaWduIGFuZCBOTyBwYXJlbnRoZXNlcworICAgICAgICAjIFRoaXMgZmFpbGVkIGluIFB5dGhvbiAyLjIgdGhyb3VnaCAyLjIuMiBhbmQgaW4gMi4zYTEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMG8xMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCAtOTIyMzM3MjAzNjg1NDc3NTgwOEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTBvMTc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NywgLTE4NDQ2NzQ0MDczNzA5NTUxNjE1TCkKKworICAgIGRlZiB0ZXN0X2Jpbl9iYXNlbGluZShzZWxmKToKKyAgICAgICAgIyBBIGZldyB1cHBlci9sb3dlcmNhc2UgdGVzdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwYjAsIDBCMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwYjEsIDBCMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwYjEwMTAxMDEwMTAxLCAwQjEwMTAxMDEwMTAxKQorICAgICAgICAjIEJhc2VsaW5lIHRlc3RzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMGIwLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBiMTAwMDAsIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSwgMjE0NzQ4MzY0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSwgOTIyMzM3MjAzNjg1NDc3NTgwNykKKyAgICAgICAgIyBEaXR0byB3aXRoIGEgbWludXMgc2lnbiBhbmQgcGFyZW50aGVzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDBiMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwYjEwMDAwKSwgLTE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExKSwgLTIxNDc0ODM2NDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSksIC05MjIzMzcyMDM2ODU0Nzc1ODA3KQorICAgICAgICAjIERpdHRvIHdpdGggYSBtaW51cyBzaWduIGFuZCBOTyBwYXJlbnRoZXNlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0wYjAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTBiMTAwMDAsIC0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExLCAtMjE0NzQ4MzY0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEsIC05MjIzMzcyMDM2ODU0Nzc1ODA3KQorCisgICAgZGVmIHRlc3RfYmluX3Vuc2lnbmVkKHNlbGYpOgorICAgICAgICAjIFBvc2l0aXZlIGNvbnN0YW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsIDIxNDc0ODM2NDhMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEsIDQyOTQ5NjcyOTVMKQorICAgICAgICAjIERpdHRvIHdpdGggYSBtaW51cyBzaWduIGFuZCBwYXJlbnRoZXNlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMGIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCksIC0yMTQ3NDgzNjQ4TCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtKDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEpLCAtNDI5NDk2NzI5NUwpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIE5PIHBhcmVudGhlc2VzCisgICAgICAgICMgVGhpcyBmYWlsZWQgaW4gUHl0aG9uIDIuMiB0aHJvdWdoIDIuMi4yIGFuZCBpbiAyLjNhMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0wYjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCAtMjE0NzQ4MzY0OEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEsIC00Mjk0OTY3Mjk1TCkKKworICAgICAgICAjIFBvc2l0aXZlIGNvbnN0YW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDBiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgOTIyMzM3MjAzNjg1NDc3NTgwOEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExLCAxODQ0Njc0NDA3MzcwOTU1MTYxNUwpCisgICAgICAgICMgRGl0dG8gd2l0aCBhIG1pbnVzIHNpZ24gYW5kIHBhcmVudGhlc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwYjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDApLCAtOTIyMzM3MjAzNjg1NDc3NTgwOEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLSgwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEpLCAtMTg0NDY3NDQwNzM3MDk1NTE2MTVMKQorICAgICAgICAjIERpdHRvIHdpdGggYSBtaW51cyBzaWduIGFuZCBOTyBwYXJlbnRoZXNlcworICAgICAgICAjIFRoaXMgZmFpbGVkIGluIFB5dGhvbiAyLjIgdGhyb3VnaCAyLjIuMiBhbmQgaW4gMi4zYTEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMGIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCAtOTIyMzM3MjAzNjg1NDc3NTgwOEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSwgLTE4NDQ2NzQ0MDczNzA5NTUxNjE1TCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEhleE9jdEJpbikKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaW8ucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9pby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2EwNTA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaW8ucHkKQEAgLTAsMCArMSwzMDgzIEBACisiIiJVbml0IHRlc3RzIGZvciB0aGUgaW8gbW9kdWxlLiIiIgorCisjIFRlc3RzIG9mIGlvIGFyZSBzY2F0dGVyZWQgb3ZlciB0aGUgdGVzdCBzdWl0ZToKKyMgKiB0ZXN0X2J1ZmlvIC0gdGVzdHMgZmlsZSBidWZmZXJpbmcKKyMgKiB0ZXN0X21lbW9yeWlvIC0gdGVzdHMgQnl0ZXNJTyBhbmQgU3RyaW5nSU8KKyMgKiB0ZXN0X2ZpbGVpbyAtIHRlc3RzIEZpbGVJTworIyAqIHRlc3RfZmlsZSAtIHRlc3RzIHRoZSBmaWxlIGludGVyZmFjZQorIyAqIHRlc3RfaW8gLSB0ZXN0cyBldmVyeXRoaW5nIGVsc2UgaW4gdGhlIGlvIG1vZHVsZQorIyAqIHRlc3RfdW5pdm5ld2xpbmVzIC0gdGVzdHMgdW5pdmVyc2FsIG5ld2xpbmUgc3VwcG9ydAorIyAqIHRlc3RfbGFyZ2VmaWxlIC0gdGVzdHMgb3BlcmF0aW9ucyBvbiBhIGZpbGUgZ3JlYXRlciB0aGFuIDIqKjMyIGJ5dGVzCisjICAgICAob25seSBlbmFibGVkIHdpdGggLXVsYXJnZWZpbGUpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFUVEVOVElPTiBURVNUIFdSSVRFUlMhISEKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFdoZW4gd3JpdGluZyB0ZXN0cyBmb3IgaW8sIGl0J3MgaW1wb3J0YW50IHRvIHRlc3QgYm90aCB0aGUgQyBhbmQgUHl0aG9uCisjIGltcGxlbWVudGF0aW9ucy4gVGhpcyBpcyB1c3VhbGx5IGRvbmUgYnkgd3JpdGluZyBhIGJhc2UgdGVzdCB0aGF0IHJlZmVycyB0bworIyB0aGUgdHlwZSBpdCBpcyB0ZXN0aW5nIGFzIGEgYXR0cmlidXRlLiBUaGVuIGl0IHByb3ZpZGVzIGN1c3RvbSBzdWJjbGFzc2VzIHRvCisjIHRlc3QgYm90aCBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgZmlsZSBoYXMgbG90cyBvZiBleGFtcGxlcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgYXJyYXkKK2ltcG9ydCByYW5kb20KK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdlYWtyZWYKK2ltcG9ydCBhYmMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBlcnJubworZnJvbSBpdGVydG9vbHMgaW1wb3J0IGN5Y2xlLCBjb3VudAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKK2Zyb20gVXNlckxpc3QgaW1wb3J0IFVzZXJMaXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CitpbXBvcnQgY29udGV4dGxpYgorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgaW8gICMgQyBpbXBsZW1lbnRhdGlvbiBvZiBpbworaW1wb3J0IF9weWlvIGFzIHB5aW8gIyBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgaW8KK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQordHJ5OgorICAgIGltcG9ydCBmY250bAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZjbnRsID0gTm9uZQorCitfX21ldGFjbGFzc19fID0gdHlwZQorYnl0ZXMgPSBzdXBwb3J0LnB5M2tfYnl0ZXMKKworZGVmIF9kZWZhdWx0X2NodW5rX3NpemUoKToKKyAgICAiIiJHZXQgdGhlIGRlZmF1bHQgVGV4dElPV3JhcHBlciBjaHVuayBzaXplIiIiCisgICAgd2l0aCBpby5vcGVuKF9fZmlsZV9fLCAiciIsIGVuY29kaW5nPSJsYXRpbjEiKSBhcyBmOgorICAgICAgICByZXR1cm4gZi5fQ0hVTktfU0laRQorCisKK2NsYXNzIE1vY2tSYXdJT1dpdGhvdXRSZWFkOgorICAgICIiIkEgUmF3SU8gaW1wbGVtZW50YXRpb24gd2l0aG91dCByZWFkKCksIHNvIGFzIHRvIGV4ZXJjaXNlIHRoZSBkZWZhdWx0CisgICAgUmF3SU8ucmVhZCgpIHdoaWNoIGNhbGxzIHJlYWRpbnRvKCkuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVhZF9zdGFjaz0oKSk6CisgICAgICAgIHNlbGYuX3JlYWRfc3RhY2sgPSBsaXN0KHJlYWRfc3RhY2spCisgICAgICAgIHNlbGYuX3dyaXRlX3N0YWNrID0gW10KKyAgICAgICAgc2VsZi5fcmVhZHMgPSAwCisgICAgICAgIHNlbGYuX2V4dHJhbmVvdXNfcmVhZHMgPSAwCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgYik6CisgICAgICAgIHNlbGYuX3dyaXRlX3N0YWNrLmFwcGVuZChieXRlcyhiKSkKKyAgICAgICAgcmV0dXJuIGxlbihiKQorCisgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDQyCisKKyAgICBkZWYgcmVhZGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc2Vla2FibGUoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc2VlayhzZWxmLCBwb3MsIHdoZW5jZSk6CisgICAgICAgIHJldHVybiAwICAgIyB3cm9uZyBidXQgd2UgZ290dGEgcmV0dXJuIHNvbWV0aGluZworCisgICAgZGVmIHRlbGwoc2VsZik6CisgICAgICAgIHJldHVybiAwICAgIyBzYW1lIGNvbW1lbnQgYXMgYWJvdmUKKworICAgIGRlZiByZWFkaW50byhzZWxmLCBidWYpOgorICAgICAgICBzZWxmLl9yZWFkcyArPSAxCisgICAgICAgIG1heF9sZW4gPSBsZW4oYnVmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fcmVhZF9zdGFja1swXQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX2V4dHJhbmVvdXNfcmVhZHMgKz0gMQorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgaWYgZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgZGVsIHNlbGYuX3JlYWRfc3RhY2tbMF0KKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIG4gPSBsZW4oZGF0YSkKKyAgICAgICAgaWYgbGVuKGRhdGEpIDw9IG1heF9sZW46CisgICAgICAgICAgICBkZWwgc2VsZi5fcmVhZF9zdGFja1swXQorICAgICAgICAgICAgYnVmWzpuXSA9IGRhdGEKKyAgICAgICAgICAgIHJldHVybiBuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBidWZbOl0gPSBkYXRhWzptYXhfbGVuXQorICAgICAgICAgICAgc2VsZi5fcmVhZF9zdGFja1swXSA9IGRhdGFbbWF4X2xlbjpdCisgICAgICAgICAgICByZXR1cm4gbWF4X2xlbgorCisgICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcz1Ob25lKToKKyAgICAgICAgcmV0dXJuIHBvcworCitjbGFzcyBDTW9ja1Jhd0lPV2l0aG91dFJlYWQoTW9ja1Jhd0lPV2l0aG91dFJlYWQsIGlvLlJhd0lPQmFzZSk6CisgICAgcGFzcworCitjbGFzcyBQeU1vY2tSYXdJT1dpdGhvdXRSZWFkKE1vY2tSYXdJT1dpdGhvdXRSZWFkLCBweWlvLlJhd0lPQmFzZSk6CisgICAgcGFzcworCisKK2NsYXNzIE1vY2tSYXdJTyhNb2NrUmF3SU9XaXRob3V0UmVhZCk6CisKKyAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgorICAgICAgICBzZWxmLl9yZWFkcyArPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3N0YWNrLnBvcCgwKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLl9leHRyYW5lb3VzX3JlYWRzICs9IDEKKyAgICAgICAgICAgIHJldHVybiBiIiIKKworY2xhc3MgQ01vY2tSYXdJTyhNb2NrUmF3SU8sIGlvLlJhd0lPQmFzZSk6CisgICAgcGFzcworCitjbGFzcyBQeU1vY2tSYXdJTyhNb2NrUmF3SU8sIHB5aW8uUmF3SU9CYXNlKToKKyAgICBwYXNzCisKKworY2xhc3MgTWlzYmVoYXZlZFJhd0lPKE1vY2tSYXdJTyk6CisgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgorICAgICAgICByZXR1cm4gTW9ja1Jhd0lPLndyaXRlKHNlbGYsIGIpICogMgorCisgICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKKyAgICAgICAgcmV0dXJuIE1vY2tSYXdJTy5yZWFkKHNlbGYsIG4pICogMgorCisgICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2UpOgorICAgICAgICByZXR1cm4gLTEyMworCisgICAgZGVmIHRlbGwoc2VsZik6CisgICAgICAgIHJldHVybiAtNDU2CisKKyAgICBkZWYgcmVhZGludG8oc2VsZiwgYnVmKToKKyAgICAgICAgTW9ja1Jhd0lPLnJlYWRpbnRvKHNlbGYsIGJ1ZikKKyAgICAgICAgcmV0dXJuIGxlbihidWYpICogNQorCitjbGFzcyBDTWlzYmVoYXZlZFJhd0lPKE1pc2JlaGF2ZWRSYXdJTywgaW8uUmF3SU9CYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFB5TWlzYmVoYXZlZFJhd0lPKE1pc2JlaGF2ZWRSYXdJTywgcHlpby5SYXdJT0Jhc2UpOgorICAgIHBhc3MKKworCitjbGFzcyBDbG9zZUZhaWx1cmVJTyhNb2NrUmF3SU8pOgorICAgIGNsb3NlZCA9IDAKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5jbG9zZWQgPSAxCisgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisKK2NsYXNzIENDbG9zZUZhaWx1cmVJTyhDbG9zZUZhaWx1cmVJTywgaW8uUmF3SU9CYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFB5Q2xvc2VGYWlsdXJlSU8oQ2xvc2VGYWlsdXJlSU8sIHB5aW8uUmF3SU9CYXNlKToKKyAgICBwYXNzCisKKworY2xhc3MgTW9ja0ZpbGVJTzoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5yZWFkX2hpc3RvcnkgPSBbXQorICAgICAgICBzdXBlcihNb2NrRmlsZUlPLCBzZWxmKS5fX2luaXRfXyhkYXRhKQorCisgICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKKyAgICAgICAgcmVzID0gc3VwZXIoTW9ja0ZpbGVJTywgc2VsZikucmVhZChuKQorICAgICAgICBzZWxmLnJlYWRfaGlzdG9yeS5hcHBlbmQoTm9uZSBpZiByZXMgaXMgTm9uZSBlbHNlIGxlbihyZXMpKQorICAgICAgICByZXR1cm4gcmVzCisKKyAgICBkZWYgcmVhZGludG8oc2VsZiwgYik6CisgICAgICAgIHJlcyA9IHN1cGVyKE1vY2tGaWxlSU8sIHNlbGYpLnJlYWRpbnRvKGIpCisgICAgICAgIHNlbGYucmVhZF9oaXN0b3J5LmFwcGVuZChyZXMpCisgICAgICAgIHJldHVybiByZXMKKworY2xhc3MgQ01vY2tGaWxlSU8oTW9ja0ZpbGVJTywgaW8uQnl0ZXNJTyk6CisgICAgcGFzcworCitjbGFzcyBQeU1vY2tGaWxlSU8oTW9ja0ZpbGVJTywgcHlpby5CeXRlc0lPKToKKyAgICBwYXNzCisKKworY2xhc3MgTW9ja05vbkJsb2NrV3JpdGVySU86CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX3dyaXRlX3N0YWNrID0gW10KKyAgICAgICAgc2VsZi5fYmxvY2tlcl9jaGFyID0gTm9uZQorCisgICAgZGVmIHBvcF93cml0dGVuKHNlbGYpOgorICAgICAgICBzID0gYiIiLmpvaW4oc2VsZi5fd3JpdGVfc3RhY2spCisgICAgICAgIHNlbGYuX3dyaXRlX3N0YWNrWzpdID0gW10KKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBibG9ja19vbihzZWxmLCBjaGFyKToKKyAgICAgICAgIiIiQmxvY2sgd2hlbiBhIGdpdmVuIGNoYXIgaXMgZW5jb3VudGVyZWQuIiIiCisgICAgICAgIHNlbGYuX2Jsb2NrZXJfY2hhciA9IGNoYXIKKworICAgIGRlZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzZWVrYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB3cml0YWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB3cml0ZShzZWxmLCBiKToKKyAgICAgICAgYiA9IGJ5dGVzKGIpCisgICAgICAgIG4gPSAtMQorICAgICAgICBpZiBzZWxmLl9ibG9ja2VyX2NoYXI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbiA9IGIuaW5kZXgoc2VsZi5fYmxvY2tlcl9jaGFyKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBuID4gMDoKKyAgICAgICAgICAgICAgICAgICAgIyB3cml0ZSBkYXRhIHVwIHRvIHRoZSBmaXJzdCBibG9ja2VyCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3N0YWNrLmFwcGVuZChiWzpuXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIGNhbmNlbCBibG9ja2VyIGFuZCBpbmRpY2F0ZSB3b3VsZCBibG9jaworICAgICAgICAgICAgICAgICAgICBzZWxmLl9ibG9ja2VyX2NoYXIgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHNlbGYuX3dyaXRlX3N0YWNrLmFwcGVuZChiKQorICAgICAgICByZXR1cm4gbGVuKGIpCisKK2NsYXNzIENNb2NrTm9uQmxvY2tXcml0ZXJJTyhNb2NrTm9uQmxvY2tXcml0ZXJJTywgaW8uUmF3SU9CYXNlKToKKyAgICBCbG9ja2luZ0lPRXJyb3IgPSBpby5CbG9ja2luZ0lPRXJyb3IKKworY2xhc3MgUHlNb2NrTm9uQmxvY2tXcml0ZXJJTyhNb2NrTm9uQmxvY2tXcml0ZXJJTywgcHlpby5SYXdJT0Jhc2UpOgorICAgIEJsb2NraW5nSU9FcnJvciA9IHB5aW8uQmxvY2tpbmdJT0Vycm9yCisKKworY2xhc3MgSU9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHdyaXRlX29wcyhzZWxmLCBmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKGIiYmxhaC4iKSwgNSkKKyAgICAgICAgZi50cnVuY2F0ZSgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCA1KQorICAgICAgICBmLnNlZWsoMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoYiJibGFoLiIpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKGIiSGVsbG8uIiksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKC0xLCAxKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKGJ5dGVhcnJheShiIiB3b3JsZFxuXG5cbiIpKSwgOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0ZShiImgiKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoLTEsIDIpLCAxMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMTMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRydW5jYXRlKDEyKSwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDEzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYuc2VlaywgMC4wKQorCisgICAgZGVmIHJlYWRfb3BzKHNlbGYsIGYsIGJ1ZmZlcmVkPUZhbHNlKToKKyAgICAgICAgZGF0YSA9IGYucmVhZCg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGIiaGVsbG8iKQorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkaW50byhkYXRhKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiIiB3b3JsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRpbnRvKGRhdGEpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkYXRhKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhWzoyXSwgYiJkXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMjApLCBiImhlbGxvIHdvcmxkXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxKSwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGludG8oYnl0ZWFycmF5KGIieCIpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoLTYsIDIpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCg1KSwgYiJ3b3JsZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDApLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkaW50byhieXRlYXJyYXkoKSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKC02LCAxKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoNSksIGIiIHdvcmwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnNlZWssIDAuMCkKKyAgICAgICAgaWYgYnVmZmVyZWQ6CisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiaGVsbG8gd29ybGRcbiIpCisgICAgICAgICAgICBmLnNlZWsoNikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIid29ybGRcbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiIiIpCisKKyAgICBMQVJHRSA9IDIqKjMxCisKKyAgICBkZWYgbGFyZ2VfZmlsZV9vcHMoc2VsZiwgZik6CisgICAgICAgIGFzc2VydCBmLnJlYWRhYmxlKCkKKyAgICAgICAgYXNzZXJ0IGYud3JpdGFibGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlayhzZWxmLkxBUkdFKSwgc2VsZi5MQVJHRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgc2VsZi5MQVJHRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKGIieHh4IiksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHNlbGYuTEFSR0UgKyAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygtMSwgMSksIHNlbGYuTEFSR0UgKyAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudHJ1bmNhdGUoKSwgc2VsZi5MQVJHRSArIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHNlbGYuTEFSR0UgKyAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygwLCAyKSwgc2VsZi5MQVJHRSArIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50cnVuY2F0ZShzZWxmLkxBUkdFICsgMSksIHNlbGYuTEFSR0UgKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBzZWxmLkxBUkdFICsgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoMCwgMiksIHNlbGYuTEFSR0UgKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygtMSwgMiksIHNlbGYuTEFSR0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDIpLCBiIngiKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9vcGVyYXRpb25zKHNlbGYpOgorICAgICAgICAjIFRyeSB3cml0aW5nIG9uIGEgZmlsZSBvcGVuZWQgaW4gcmVhZCBtb2RlIGFuZCB2aWNlLXZlcnNhLgorICAgICAgICBmb3IgbW9kZSBpbiAoInciLCAid2IiKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCBtb2RlKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmcC5yZWFkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGZwLnJlYWRsaW5lKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmcC53cml0ZSwgYiJibGFoIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGZwLndyaXRlbGluZXMsIFtiImJsYWhcbiJdKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInIiKSBhcyBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGZwLndyaXRlLCAiYmxhaCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmcC53cml0ZWxpbmVzLCBbImJsYWhcbiJdKQorCisgICAgZGVmIHRlc3RfcmF3X2ZpbGVfaW8oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkYWJsZSgpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWthYmxlKCksIFRydWUpCisgICAgICAgICAgICBzZWxmLndyaXRlX29wcyhmKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIiwgYnVmZmVyaW5nPTApIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5yZWFkX29wcyhmKQorCisgICAgZGVmIHRlc3RfYnVmZmVyZWRfZmlsZV9pbyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGFibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi53cml0ZV9vcHMoZikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGFibGUoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0YWJsZSgpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrYWJsZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5yZWFkX29wcyhmLCBUcnVlKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiImFiY1xuZGVmXG54eXp6eVxuZm9vXHgwMGJhclxuYW5vdGhlciBsaW5lIikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgYiJhYmNcbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoMTApLCBiImRlZlxuIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgyKSwgYiJ4eSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoNCksIGIienp5XG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksIGIiZm9vXHgwMGJhclxuIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZShOb25lKSwgYiJhbm90aGVyIGxpbmUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWRsaW5lLCA1LjMpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiciIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYucmVhZGxpbmUsIDUuMykKKworICAgIGRlZiB0ZXN0X3Jhd19ieXRlc19pbyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIHNlbGYud3JpdGVfb3BzKGYpCisgICAgICAgIGRhdGEgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiImhlbGxvIHdvcmxkXG4iKQorICAgICAgICBmID0gc2VsZi5CeXRlc0lPKGRhdGEpCisgICAgICAgIHNlbGYucmVhZF9vcHMoZiwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2xhcmdlX2ZpbGVfb3BzKHNlbGYpOgorICAgICAgICAjIE9uIFdpbmRvd3MgYW5kIE1hYyBPU1ggdGhpcyB0ZXN0IGNvbXN1bWVzIGxhcmdlIHJlc291cmNlczsgSXQgdGFrZXMKKyAgICAgICAgIyBhIGxvbmcgdGltZSB0byBidWlsZCB0aGUgPjJHQiBmaWxlIGFuZCB0YWtlcyA+MkdCIG9mIGRpc2sgc3BhY2UKKyAgICAgICAgIyB0aGVyZWZvcmUgdGhlIHJlc291cmNlIG11c3QgYmUgZW5hYmxlZCB0byBydW4gdGhpcyB0ZXN0LgorICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nIG9yIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgIGlmIG5vdCBzdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoImxhcmdlZmlsZSIpOgorICAgICAgICAgICAgICAgIHByaW50KCJcblRlc3RpbmcgbGFyZ2UgZmlsZSBvcHMgc2tpcHBlZCBvbiAlcy4iICUgc3lzLnBsYXRmb3JtLAorICAgICAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICBwcmludCgiSXQgcmVxdWlyZXMgJWQgYnl0ZXMgYW5kIGEgbG9uZyB0aW1lLiIgJSBzZWxmLkxBUkdFLAorICAgICAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICBwcmludCgiVXNlICdyZWdydGVzdC5weSAtdSBsYXJnZWZpbGUgdGVzdF9pbycgdG8gcnVuIGl0LiIsCisgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIncrYiIsIDApIGFzIGY6CisgICAgICAgICAgICBzZWxmLmxhcmdlX2ZpbGVfb3BzKGYpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAidytiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYubGFyZ2VfZmlsZV9vcHMoZikKKworICAgIGRlZiB0ZXN0X3dpdGhfb3BlbihzZWxmKToKKyAgICAgICAgZm9yIGJ1ZnNpemUgaW4gKDAsIDEsIDEwMCk6CisgICAgICAgICAgICBmID0gTm9uZQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZnNpemUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShiInh4eCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuY2xvc2VkLCBUcnVlKQorICAgICAgICAgICAgZiA9IE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmc2l6ZSkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgMSAvLyAwCisgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmNsb3NlZCwgVHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIxIC8vIDAgZGlkbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiIpCisKKyAgICAjIGlzc3VlIDUwMDgKKyAgICBkZWYgdGVzdF9hcHBlbmRfbW9kZV90ZWxsKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYiJ4eHgiKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgImFiIiwgYnVmZmVyaW5nPTApIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAzKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgImFiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDMpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZi50ZWxsKCkgPiAwKQorCisgICAgZGVmIHRlc3RfZGVzdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgcmVjb3JkID0gW10KKyAgICAgICAgY2xhc3MgTXlGaWxlSU8oc2VsZi5GaWxlSU8pOgorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgxKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZiA9IHN1cGVyKE15RmlsZUlPLCBzZWxmKS5fX2RlbF9fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZigpCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgyKQorICAgICAgICAgICAgICAgIHN1cGVyKE15RmlsZUlPLCBzZWxmKS5jbG9zZSgpCisgICAgICAgICAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgzKQorICAgICAgICAgICAgICAgIHN1cGVyKE15RmlsZUlPLCBzZWxmKS5mbHVzaCgpCisgICAgICAgIGYgPSBNeUZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgZi53cml0ZShiInh4eCIpCisgICAgICAgIGRlbCBmCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjb3JkLCBbMSwgMiwgM10pCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJ4eHgiKQorCisgICAgZGVmIF9jaGVja19iYXNlX2Rlc3RydWN0b3Ioc2VsZiwgYmFzZSk6CisgICAgICAgIHJlY29yZCA9IFtdCisgICAgICAgIGNsYXNzIE15SU8oYmFzZSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgIyBUaGlzIGV4ZXJjaXNlcyB0aGUgYXZhaWxhYmlsaXR5IG9mIGF0dHJpYnV0ZXMgb24gb2JqZWN0CisgICAgICAgICAgICAgICAgIyBkZXN0cnVjdGlvbi4KKyAgICAgICAgICAgICAgICAjIChpbiB0aGUgQyB2ZXJzaW9uLCBjbG9zZSgpIGlzIGNhbGxlZCBieSB0aGUgdHBfZGVhbGxvYworICAgICAgICAgICAgICAgICMgZnVuY3Rpb24sIG5vdCBieSBfX2RlbF9fKQorICAgICAgICAgICAgICAgIHNlbGYub25fZGVsID0gMQorICAgICAgICAgICAgICAgIHNlbGYub25fY2xvc2UgPSAyCisgICAgICAgICAgICAgICAgc2VsZi5vbl9mbHVzaCA9IDMKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoc2VsZi5vbl9kZWwpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmID0gc3VwZXIoTXlJTywgc2VsZikuX19kZWxfXworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoc2VsZi5vbl9jbG9zZSkKKyAgICAgICAgICAgICAgICBzdXBlcihNeUlPLCBzZWxmKS5jbG9zZSgpCisgICAgICAgICAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZChzZWxmLm9uX2ZsdXNoKQorICAgICAgICAgICAgICAgIHN1cGVyKE15SU8sIHNlbGYpLmZsdXNoKCkKKyAgICAgICAgZiA9IE15SU8oKQorICAgICAgICBkZWwgZgorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZCwgWzEsIDIsIDNdKQorCisgICAgZGVmIHRlc3RfSU9CYXNlX2Rlc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2Jhc2VfZGVzdHJ1Y3RvcihzZWxmLklPQmFzZSkKKworICAgIGRlZiB0ZXN0X1Jhd0lPQmFzZV9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19iYXNlX2Rlc3RydWN0b3Ioc2VsZi5SYXdJT0Jhc2UpCisKKyAgICBkZWYgdGVzdF9CdWZmZXJlZElPQmFzZV9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19iYXNlX2Rlc3RydWN0b3Ioc2VsZi5CdWZmZXJlZElPQmFzZSkKKworICAgIGRlZiB0ZXN0X1RleHRJT0Jhc2VfZGVzdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfYmFzZV9kZXN0cnVjdG9yKHNlbGYuVGV4dElPQmFzZSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2ZsdXNoZXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInh4eCIpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJ4eHgiKQorCisgICAgZGVmIHRlc3RfYXJyYXlfd3JpdGVzKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoYidpJywgcmFuZ2UoMTApKQorICAgICAgICBuID0gbGVuKGEudG9zdHJpbmcoKSkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIDApIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUoYSksIG4pCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKGEpLCBuKQorCisgICAgZGVmIHRlc3RfY2xvc2VmZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5vcGVuLCBzdXBwb3J0LlRFU1RGTiwgJ3cnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWZkPUZhbHNlKQorCisgICAgZGVmIHRlc3RfcmVhZF9jbG9zZWQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJlZ2dcbiIpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiciIpIGFzIGY6CisgICAgICAgICAgICBmaWxlID0gc2VsZi5vcGVuKGYuZmlsZW5vKCksICJyIiwgY2xvc2VmZD1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZS5yZWFkKCksICJlZ2dcbiIpCisgICAgICAgICAgICBmaWxlLnNlZWsoMCkKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmlsZS5yZWFkKQorCisgICAgZGVmIHRlc3Rfbm9fY2xvc2VmZF93aXRoX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICAjIGNhbid0IHVzZSBjbG9zZWZkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBmaWxlIG5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5vcGVuLCBzdXBwb3J0LlRFU1RGTiwgInIiLCBjbG9zZWZkPUZhbHNlKQorCisgICAgZGVmIHRlc3RfY2xvc2VmZF9hdHRyKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYiJlZ2dcbiIpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiciIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYnVmZmVyLnJhdy5jbG9zZWZkLCBUcnVlKQorICAgICAgICAgICAgZmlsZSA9IHNlbGYub3BlbihmLmZpbGVubygpLCAiciIsIGNsb3NlZmQ9RmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGUuYnVmZmVyLnJhdy5jbG9zZWZkLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbihzZWxmKToKKyAgICAgICAgIyBGaWxlSU8gb2JqZWN0cyBhcmUgY29sbGVjdGVkLCBhbmQgY29sbGVjdGluZyB0aGVtIGZsdXNoZXMKKyAgICAgICAgIyBhbGwgZGF0YSB0byBkaXNrLgorICAgICAgICBmID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIGYud3JpdGUoYiJhYmN4eHgiKQorICAgICAgICBmLmYgPSBmCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZikKKyAgICAgICAgZGVsIGYKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJhYmN4eHgiKQorCisgICAgZGVmIHRlc3RfdW5ib3VuZGVkX2ZpbGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExNzQ2MDY6IHJlYWRpbmcgZnJvbSBhbiB1bmJvdW5kZWQgc3RyZWFtIHN1Y2ggYXMgL2Rldi96ZXJvLgorICAgICAgICB6ZXJvID0gIi9kZXYvemVybyIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHplcm8pOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiezB9IGRvZXMgbm90IGV4aXN0Ii5mb3JtYXQoemVybykpCisgICAgICAgIGlmIHN5cy5tYXhzaXplID4gMHg3RkZGRkZGRjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInRlc3QgY2FuIG9ubHkgcnVuIGluIGEgMzItYml0IGFkZHJlc3Mgc3BhY2UiKQorICAgICAgICBpZiBzdXBwb3J0LnJlYWxfbWF4X21lbXVzZSA8IHN1cHBvcnQuXzJHOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdCByZXF1aXJlcyBhdCBsZWFzdCAyR0Igb2YgbWVtb3J5IikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oemVybywgInJiIiwgYnVmZmVyaW5nPTApIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmLnJlYWQpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHplcm8sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmLnJlYWQpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHplcm8sICJyIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGYucmVhZCkKKworICAgIGRlZiB0ZXN0X2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkKKyAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCisgICAgICAgIGYuZmx1c2ggPSBiYWRfZmx1c2gKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9tdWx0aV9jbG9zZShzZWxmKToKKyAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmZmVyaW5nPTApCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYuZmx1c2gpCisKKyAgICBkZWYgdGVzdF9SYXdJT0Jhc2VfcmVhZChzZWxmKToKKyAgICAgICAgIyBFeGVyY2lzZSB0aGUgZGVmYXVsdCBSYXdJT0Jhc2UucmVhZCgpIGltcGxlbWVudGF0aW9uICh3aGljaCBjYWxscworICAgICAgICAjIHJlYWRpbnRvKCkgaW50ZXJuYWxseSkuCisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU9XaXRob3V0UmVhZCgoYiJhYmMiLCBiImQiLCBOb25lLCBiImVmZyIsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLnJlYWQoMiksIGIiYWIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLnJlYWQoMiksIGIiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8ucmVhZCgyKSwgYiJkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5yZWFkKDIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLnJlYWQoMiksIGIiZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLnJlYWQoMiksIGIiZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8ucmVhZCgyKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5yZWFkKDIpLCBiIiIpCisKKyAgICBkZWYgdGVzdF9maWxlaW9fY2xvc2VmZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNDg0MQorICAgICAgICB3aXRoIHNlbGYub3BlbihfX2ZpbGVfXywgJ3JiJykgYXMgZjEsIFwKKyAgICAgICAgICAgICBzZWxmLm9wZW4oX19maWxlX18sICdyYicpIGFzIGYyOgorICAgICAgICAgICAgZmlsZWlvID0gc2VsZi5GaWxlSU8oZjEuZmlsZW5vKCksIGNsb3NlZmQ9RmFsc2UpCisgICAgICAgICAgICAjIC5fX2luaXRfXygpIG11c3Qgbm90IGNsb3NlIGYxCisgICAgICAgICAgICBmaWxlaW8uX19pbml0X18oZjIuZmlsZW5vKCksIGNsb3NlZmQ9RmFsc2UpCisgICAgICAgICAgICBmMS5yZWFkbGluZSgpCisgICAgICAgICAgICAjIC5jbG9zZSgpIG11c3Qgbm90IGNsb3NlIGYyCisgICAgICAgICAgICBmaWxlaW8uY2xvc2UoKQorICAgICAgICAgICAgZjIucmVhZGxpbmUoKQorCisKK2NsYXNzIENJT1Rlc3QoSU9UZXN0KToKKworICAgIGRlZiB0ZXN0X0lPQmFzZV9maW5hbGl6ZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTIxNDk6IHNlZ21lbnRhdGlvbiBmYXVsdCBvbiBfUHlJT0Jhc2VfZmluYWxpemUgd2hlbiBib3RoIGEKKyAgICAgICAgIyBjbGFzcyB3aGljaCBpbmhlcml0cyBJT0Jhc2UgYW5kIGFuIG9iamVjdCBvZiB0aGlzIGNsYXNzIGFyZSBjYXVnaHQKKyAgICAgICAgIyBpbiBhIHJlZmVyZW5jZSBjeWNsZSBhbmQgY2xvc2UoKSBpcyBhbHJlYWR5IGluIHRoZSBtZXRob2QgY2FjaGUuCisgICAgICAgIGNsYXNzIE15SU8oc2VsZi5JT0Jhc2UpOgorICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIGNyZWF0ZSBhbiBpbnN0YW5jZSB0byBwb3B1bGF0ZSB0aGUgbWV0aG9kIGNhY2hlCisgICAgICAgIE15SU8oKQorICAgICAgICBvYmogPSBNeUlPKCkKKyAgICAgICAgb2JqLm9iaiA9IG9iagorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKG9iaikKKyAgICAgICAgZGVsIE15SU8KKyAgICAgICAgZGVsIG9iagorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKKworY2xhc3MgUHlJT1Rlc3QoSU9UZXN0KToKKyAgICB0ZXN0X2FycmF5X3dyaXRlcyA9IHVuaXR0ZXN0LnNraXAoCisgICAgICAgICJsZW4oYXJyYXkuYXJyYXkpIHJldHVybnMgbnVtYmVyIG9mIGVsZW1lbnRzIHJhdGhlciB0aGFuIGJ5dGVsZW5ndGgiCisgICAgKShJT1Rlc3QudGVzdF9hcnJheV93cml0ZXMpCisKKworY2xhc3MgQ29tbW9uQnVmZmVyZWRUZXN0czoKKyAgICAjIFRlc3RzIGNvbW1vbiB0byBCdWZmZXJlZFJlYWRlciwgQnVmZmVyZWRXcml0ZXIgYW5kIEJ1ZmZlcmVkUmFuZG9tCisKKyAgICBkZWYgdGVzdF9kZXRhY2goc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmID0gc2VsZi50cChyYXcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYnVmLmRldGFjaCgpLCByYXcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1Zi5kZXRhY2gpCisKKyAgICBkZWYgdGVzdF9maWxlbm8oc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgYnVmaW8uZmlsZW5vKCkpCisKKyAgICBkZWYgdGVzdF9ub19maWxlbm8oc2VsZik6CisgICAgICAgICMgWFhYIHdpbGwgd2UgYWx3YXlzIGhhdmUgZmlsZW5vKCkgZnVuY3Rpb24/IElmIHNvLCBraWxsCisgICAgICAgICMgdGhpcyB0ZXN0LiBFbHNlLCB3cml0ZSBpdC4KKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICAjIEludmFsaWQgd2hlbmNlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLnNlZWssIDAsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5zZWVrLCAwLCAzKQorCisgICAgZGVmIHRlc3Rfb3ZlcnJpZGVfZGVzdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgdHAgPSBzZWxmLnRwCisgICAgICAgIHJlY29yZCA9IFtdCisgICAgICAgIGNsYXNzIE15QnVmZmVyZWRJTyh0cCk6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKDEpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmID0gc3VwZXIoTXlCdWZmZXJlZElPLCBzZWxmKS5fX2RlbF9fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZigpCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgyKQorICAgICAgICAgICAgICAgIHN1cGVyKE15QnVmZmVyZWRJTywgc2VsZikuY2xvc2UoKQorICAgICAgICAgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoMykKKyAgICAgICAgICAgICAgICBzdXBlcihNeUJ1ZmZlcmVkSU8sIHNlbGYpLmZsdXNoKCkKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gTXlCdWZmZXJlZElPKHJhd2lvKQorICAgICAgICB3cml0YWJsZSA9IGJ1ZmlvLndyaXRhYmxlKCkKKyAgICAgICAgZGVsIGJ1ZmlvCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIGlmIHdyaXRhYmxlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQsIFsxLCAyLCAzXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjb3JkLCBbMSwgMl0pCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgICMgVGVzdCB1c2FiaWxpdHkgYXMgYSBjb250ZXh0IG1hbmFnZXIKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgZGVmIF93aXRoKCk6CisgICAgICAgICAgICB3aXRoIGJ1ZmlvOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgX3dpdGgoKQorICAgICAgICAjIGJ1ZmlvIHNob3VsZCBub3cgYmUgY2xvc2VkLCBhbmQgdXNpbmcgaXQgYSBzZWNvbmQgdGltZSBzaG91bGQgcmFpc2UKKyAgICAgICAgIyBhIFZhbHVlRXJyb3IuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF93aXRoKQorCisgICAgZGVmIHRlc3RfZXJyb3JfdGhyb3VnaF9kZXN0cnVjdG9yKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgZXhjZXB0aW9uIHN0YXRlIGlzIG5vdCBtb2RpZmllZCBieSBhIGRlc3RydWN0b3IsCisgICAgICAgICMgZXZlbiBpZiBjbG9zZSgpIGZhaWxzLgorICAgICAgICByYXdpbyA9IHNlbGYuQ2xvc2VGYWlsdXJlSU8oKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgc2VsZi50cChyYXdpbykueHl6enkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBmKQorICAgICAgICBzID0gcy5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgczoKKyAgICAgICAgICAgICMgVGhlIGRlc3RydWN0b3IgKm1heSogaGF2ZSBwcmludGVkIGFuIHVucmFpc2FibGUgZXJyb3IsIGNoZWNrIGl0CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzLnNwbGl0bGluZXMoKSksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gSU9FcnJvcjogIiksIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aCgiIGlnbm9yZWQiKSwgcykKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYiA9IHNlbGYudHAocmF3KQorICAgICAgICBjbHNuYW1lID0gIiVzLiVzIiAlIChzZWxmLnRwLl9fbW9kdWxlX18sIHNlbGYudHAuX19uYW1lX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihiKSwgIjwlcz4iICUgY2xzbmFtZSkKKyAgICAgICAgcmF3Lm5hbWUgPSAiZHVtbXkiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihiKSwgIjwlcyBuYW1lPXUnZHVtbXknPiIgJSBjbHNuYW1lKQorICAgICAgICByYXcubmFtZSA9IGIiZHVtbXkiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihiKSwgIjwlcyBuYW1lPSdkdW1teSc+IiAlIGNsc25hbWUpCisKKyAgICBkZWYgdGVzdF9mbHVzaF9lcnJvcl9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgcmF3LmZsdXNoID0gYmFkX2ZsdXNoCisgICAgICAgIGIgPSBzZWxmLnRwKHJhdykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9lcnJvcl9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdmbHVzaCcpCisgICAgICAgIGRlZiBiYWRfY2xvc2UoKToKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2Nsb3NlJykKKyAgICAgICAgcmF3LmNsb3NlID0gYmFkX2Nsb3NlCisgICAgICAgIGIgPSBzZWxmLnRwKHJhdykKKyAgICAgICAgYi5mbHVzaCA9IGJhZF9mbHVzaAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGVycjogIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICAgICAgYi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmV4Y2VwdGlvbi5hcmdzLCAoJ2Nsb3NlJywpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIuY2xvc2VkKQorCisgICAgZGVmIHRlc3RfbXVsdGlfY2xvc2Uoc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYiA9IHNlbGYudHAocmF3KQorICAgICAgICBiLmNsb3NlKCkKKyAgICAgICAgYi5jbG9zZSgpCisgICAgICAgIGIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiLmZsdXNoKQorCisgICAgZGVmIHRlc3RfcmVhZG9ubHlfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWYgPSBzZWxmLnRwKHJhdykKKyAgICAgICAgeCA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvcikpOgorICAgICAgICAgICAgYnVmLnJhdyA9IHgKKworCitjbGFzcyBTaXplb2ZUZXN0OgorCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfc2l6ZW9mKHNlbGYpOgorICAgICAgICBidWZzaXplMSA9IDQwOTYKKyAgICAgICAgYnVmc2l6ZTIgPSA4MTkyCisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIGJ1ZmZlcl9zaXplPWJ1ZnNpemUxKQorICAgICAgICBzaXplID0gc3lzLmdldHNpemVvZihidWZpbykgLSBidWZzaXplMQorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvLCBidWZmZXJfc2l6ZT1idWZzaXplMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0c2l6ZW9mKGJ1ZmlvKSwgc2l6ZSArIGJ1ZnNpemUyKQorCisKK2NsYXNzIEJ1ZmZlcmVkUmVhZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgQ29tbW9uQnVmZmVyZWRUZXN0cyk6CisgICAgcmVhZF9tb2RlID0gInJiIgorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oW2IiYWJjIl0pCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgYnVmaW8uX19pbml0X18ocmF3aW8pCisgICAgICAgIGJ1ZmlvLl9faW5pdF9fKHJhd2lvLCBidWZmZXJfc2l6ZT0xMDI0KQorICAgICAgICBidWZpby5fX2luaXRfXyhyYXdpbywgYnVmZmVyX3NpemU9MTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmMiLCBidWZpby5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0tMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9LTEpCisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oW2IiYWJjIl0pCisgICAgICAgIGJ1ZmlvLl9faW5pdF9fKHJhd2lvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjIiwgYnVmaW8ucmVhZCgpKQorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgZm9yIGFyZyBpbiAoTm9uZSwgNyk6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjZGVmZyIsIGJ1ZmlvLnJlYWQoYXJnKSkKKyAgICAgICAgIyBJbnZhbGlkIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8ucmVhZCwgLTIpCisKKyAgICBkZWYgdGVzdF9yZWFkMShzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygoYiJhYmMiLCBiImQiLCBiImVmZyIpKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhIiwgYnVmaW8ucmVhZCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImIiLCBidWZpby5yZWFkMSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5fcmVhZHMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJjIiwgYnVmaW8ucmVhZDEoMTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5fcmVhZHMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJkIiwgYnVmaW8ucmVhZDEoMTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5fcmVhZHMsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJlZmciLCBidWZpby5yZWFkMSgxMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLl9yZWFkcywgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIiIsIGJ1ZmlvLnJlYWQxKDEwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3aW8uX3JlYWRzLCA0KQorICAgICAgICAjIEludmFsaWQgYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5yZWFkMSwgLTEpCisKKyAgICBkZWYgdGVzdF9yZWFkaW50byhzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygoYiJhYmMiLCBiImQiLCBiImVmZyIpKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgIGIgPSBieXRlYXJyYXkoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby5yZWFkaW50byhiKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiImFiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby5yZWFkaW50byhiKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiImNkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby5yZWFkaW50byhiKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiImVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby5yZWFkaW50byhiKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiImdmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby5yZWFkaW50byhiKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiImdmIikKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lcyhzZWxmKToKKyAgICAgICAgZGVmIGJ1ZmlvKCk6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKChiImFiY1xuIiwgYiJkXG4iLCBiImVmIikpCisgICAgICAgICAgICByZXR1cm4gc2VsZi50cChyYXdpbykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpbygpLnJlYWRsaW5lcygpLCBbYiJhYmNcbiIsIGIiZFxuIiwgYiJlZiJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvKCkucmVhZGxpbmVzKDUpLCBbYiJhYmNcbiIsIGIiZFxuIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8oKS5yZWFkbGluZXMoTm9uZSksIFtiImFiY1xuIiwgYiJkXG4iLCBiImVmIl0pCisKKyAgICBkZWYgdGVzdF9idWZmZXJpbmcoc2VsZik6CisgICAgICAgIGRhdGEgPSBiImFiY2RlZmdoaSIKKyAgICAgICAgZGxlbiA9IGxlbihkYXRhKQorCisgICAgICAgIHRlc3RzID0gWworICAgICAgICAgICAgWyAxMDAsIFsgMywgMSwgNCwgOCBdLCBbIGRsZW4sIDAgXSBdLAorICAgICAgICAgICAgWyAxMDAsIFsgMywgMywgM10sICAgICBbIGRsZW4gXSAgICBdLAorICAgICAgICAgICAgWyAgIDQsIFsgMSwgMiwgNCwgMiBdLCBbIDQsIDQsIDEgXSBdLAorICAgICAgICBdCisKKyAgICAgICAgZm9yIGJ1ZnNpemUsIGJ1Zl9yZWFkX3NpemVzLCByYXdfcmVhZF9zaXplcyBpbiB0ZXN0czoKKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrRmlsZUlPKGRhdGEpCisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIGJ1ZmZlcl9zaXplPWJ1ZnNpemUpCisgICAgICAgICAgICBwb3MgPSAwCisgICAgICAgICAgICBmb3IgbmJ5dGVzIGluIGJ1Zl9yZWFkX3NpemVzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZChuYnl0ZXMpLCBkYXRhW3Bvczpwb3MrbmJ5dGVzXSkKKyAgICAgICAgICAgICAgICBwb3MgKz0gbmJ5dGVzCisgICAgICAgICAgICAjIHRoaXMgaXMgbWlsZGx5IGltcGxlbWVudGF0aW9uLWRlcGVuZGVudAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5yZWFkX2hpc3RvcnksIHJhd19yZWFkX3NpemVzKQorCisgICAgZGVmIHRlc3RfcmVhZF9ub25fYmxvY2tpbmcoc2VsZik6CisgICAgICAgICMgSW5qZWN0IHNvbWUgTm9uZSdzIGluIHRoZXJlIHRvIHNpbXVsYXRlIEVXT1VMREJMT0NLCisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKGIiYWJjIiwgYiJkIiwgTm9uZSwgYiJlZmciLCBOb25lLCBOb25lLCBOb25lKSkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjZCIsIGJ1ZmlvLnJlYWQoNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJlIiwgYnVmaW8ucmVhZCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImZnIiwgYnVmaW8ucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiIiwgYnVmaW8ucGVlaygxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoYnVmaW8ucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiIiwgYnVmaW8ucmVhZCgpKQorCisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKGIiYSIsIE5vbmUsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYSIsIHJhd2lvLnJlYWRhbGwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmF3aW8ucmVhZGFsbCgpKQorCisgICAgZGVmIHRlc3RfcmVhZF9wYXN0X2VvZihzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygoYiJhYmMiLCBiImQiLCBiImVmZyIpKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiY2RlZmciLCBidWZpby5yZWFkKDkwMDApKQorCisgICAgZGVmIHRlc3RfcmVhZF9hbGwoc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKGIiYWJjIiwgYiJkIiwgYiJlZmciKSkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJhYmNkZWZnIiwgYnVmaW8ucmVhZCgpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19yZXNvdXJjZSgnY3B1JykKKyAgICBkZWYgdGVzdF90aHJlYWRzKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFdyaXRlIG91dCBtYW55IGJ5dGVzIHdpdGggZXhhY3RseSB0aGUgc2FtZSBudW1iZXIgb2YgMCdzLAorICAgICAgICAgICAgIyAxJ3MuLi4gMjU1J3MuIFRoaXMgd2lsbCBoZWxwIHVzIGNoZWNrIHRoYXQgY29uY3VycmVudCByZWFkaW5nCisgICAgICAgICAgICAjIGRvZXNuJ3QgZHVwbGljYXRlIG9yIGZvcmdldCBjb250ZW50cy4KKyAgICAgICAgICAgIE4gPSAxMDAwCisgICAgICAgICAgICBsID0gbGlzdChyYW5nZSgyNTYpKSAqIE4KKyAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKGwpCisgICAgICAgICAgICBzID0gYnl0ZXMoYnl0ZWFycmF5KGwpKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sIHNlbGYucmVhZF9tb2RlLCBidWZmZXJpbmc9MCkgYXMgcmF3OgorICAgICAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXcsIDgpCisgICAgICAgICAgICAgICAgZXJyb3JzID0gW10KKyAgICAgICAgICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEludHJhLWJ1ZmZlciByZWFkIHRoZW4gYnVmZmVyLWZsdXNoaW5nIHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuIGluIGN5Y2xlKFsxLCAxOV0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBidWZpby5yZWFkKG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsaXN0LmFwcGVuZCgpIGlzIGF0b21pYworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHMpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgdGhyZWFkcyA9IFt0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKSBmb3IgeCBpbiByYW5nZSgyMCldCisgICAgICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAyKSAjIHlpZWxkCisgICAgICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVycm9ycywKKyAgICAgICAgICAgICAgICAgICAgInRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyB3ZXJlIGNhdWdodDogJXIiICUgZXJyb3JzKQorICAgICAgICAgICAgICAgIHMgPSBiJycuam9pbihyZXN1bHRzKQorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDI1Nik6CisgICAgICAgICAgICAgICAgICAgIGMgPSBieXRlcyhieXRlYXJyYXkoW2ldKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KGMpLCBOKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9taXNiZWhhdmVkX2lvKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTWlzYmVoYXZlZFJhd0lPKChiImFiYyIsIGIiZCIsIGIiZWZnIikpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8uc2VlaywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8udGVsbCkKKworICAgIGRlZiB0ZXN0X25vX2V4dHJhbmVvdXNfcmVhZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjOTU1MDsgd2hlbiB0aGUgcmF3IElPIG9iamVjdCBoYXMgc2F0aXNmaWVkIHRoZSByZWFkIHJlcXVlc3QsCisgICAgICAgICMgd2Ugc2hvdWxkIG5vdCBpc3N1ZSBhbnkgYWRkaXRpb25hbCByZWFkcywgb3RoZXJ3aXNlIGl0IG1heSBibG9jaworICAgICAgICAjIChlLmcuIHNvY2tldCkuCisgICAgICAgIGJ1ZnNpemUgPSAxNgorICAgICAgICBmb3IgbiBpbiAoMiwgYnVmc2l6ZSAtIDEsIGJ1ZnNpemUsIGJ1ZnNpemUgKyAxLCBidWZzaXplICogMik6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKFtiIngiICogbl0pCisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIGJ1ZnNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnJlYWQobiksIGIieCIgKiBuKQorICAgICAgICAgICAgIyBTaW1wbGUgY2FzZTogb25lIHJhdyByZWFkIGlzIGVub3VnaCB0byBzYXRpc2Z5IHRoZSByZXF1ZXN0LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5fZXh0cmFuZW91c19yZWFkcywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCBmb3Ige306IHt9ICE9IDAiLmZvcm1hdChuLCByYXdpby5fZXh0cmFuZW91c19yZWFkcykpCisgICAgICAgICAgICAjIEEgbW9yZSBjb21wbGV4IGNhc2Ugd2hlcmUgdHdvIHJhdyByZWFkcyBhcmUgbmVlZGVkIHRvIHNhdGlzZnkKKyAgICAgICAgICAgICMgdGhlIHJlcXVlc3QuCisgICAgICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKFtiIngiICogKG4gLSAxKSwgYiJ4Il0pCisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIGJ1ZnNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnJlYWQobiksIGIieCIgKiBuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5fZXh0cmFuZW91c19yZWFkcywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCBmb3Ige306IHt9ICE9IDAiLmZvcm1hdChuLCByYXdpby5fZXh0cmFuZW91c19yZWFkcykpCisKKworY2xhc3MgQ0J1ZmZlcmVkUmVhZGVyVGVzdChCdWZmZXJlZFJlYWRlclRlc3QsIFNpemVvZlRlc3QpOgorICAgIHRwID0gaW8uQnVmZmVyZWRSZWFkZXIKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBCdWZmZXJlZFJlYWRlclRlc3QudGVzdF9jb25zdHJ1Y3RvcihzZWxmKQorICAgICAgICAjIFRoZSBhbGxvY2F0aW9uIGNhbiBzdWNjZWVkIG9uIDMyLWJpdCBidWlsZHMsIGUuZy4gd2l0aCBtb3JlCisgICAgICAgICMgdGhhbiAyR0IgUkFNIGFuZCBhIDY0LWJpdCBrZXJuZWwuCisgICAgICAgIGlmIHN5cy5tYXhzaXplID4gMHg3RkZGRkZGRjoKKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE92ZXJmbG93RXJyb3IsIE1lbW9yeUVycm9yLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgICAgICAgICBidWZpby5fX2luaXRfXywgcmF3aW8sIHN5cy5tYXhzaXplKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oW2IiYWJjIl0pCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5yZWFkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5fX2luaXRfXywgcmF3aW8sIGJ1ZmZlcl9zaXplPS0xNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8ucmVhZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8uX19pbml0X18sIHJhd2lvLCBidWZmZXJfc2l6ZT0tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8ucmVhZCkKKworICAgIGRlZiB0ZXN0X21pc2JlaGF2ZWRfaW9fcmVhZChzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1pc2JlaGF2ZWRSYXdJTygoYiJhYmMiLCBiImQiLCBiImVmZyIpKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgICMgX3B5aW8uQnVmZmVyZWRSZWFkZXIgc2VlbXMgdG8gaW1wbGVtZW50IHJlYWRpbmcgZGlmZmVyZW50LCBzbyB0aGF0CisgICAgICAgICMgY2hlY2tpbmcgdGhpcyBpcyBub3Qgc28gZWFzeS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8ucmVhZCwgMTApCisKKyAgICBkZWYgdGVzdF9nYXJiYWdlX2NvbGxlY3Rpb24oc2VsZik6CisgICAgICAgICMgQyBCdWZmZXJlZFJlYWRlciBvYmplY3RzIGFyZSBjb2xsZWN0ZWQuCisgICAgICAgICMgVGhlIFB5dGhvbiB2ZXJzaW9uIGhhcyBfX2RlbF9fLCBzbyBpdCBlbmRzIGludG8gZ2MuZ2FyYmFnZSBpbnN0ZWFkCisgICAgICAgIHJhd2lvID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3K2IiKQorICAgICAgICBmID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgZi5mID0gZgorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCisgICAgICAgIGRlbCBmCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQorCisgICAgZGVmIHRlc3RfYXJnc19lcnJvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTcyNzUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsICJCdWZmZXJlZFJlYWRlciIpOgorICAgICAgICAgICAgc2VsZi50cChpby5CeXRlc0lPKCksIDEwMjQsIDEwMjQsIDEwMjQpCisKKworY2xhc3MgUHlCdWZmZXJlZFJlYWRlclRlc3QoQnVmZmVyZWRSZWFkZXJUZXN0KToKKyAgICB0cCA9IHB5aW8uQnVmZmVyZWRSZWFkZXIKKworCitjbGFzcyBCdWZmZXJlZFdyaXRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UsIENvbW1vbkJ1ZmZlcmVkVGVzdHMpOgorICAgIHdyaXRlX21vZGUgPSAid2IiCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgYnVmaW8uX19pbml0X18ocmF3aW8pCisgICAgICAgIGJ1ZmlvLl9faW5pdF9fKHJhd2lvLCBidWZmZXJfc2l6ZT0xMDI0KQorICAgICAgICBidWZpby5fX2luaXRfXyhyYXdpbywgYnVmZmVyX3NpemU9MTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgYnVmaW8ud3JpdGUoYiJhYmMiKSkKKyAgICAgICAgYnVmaW8uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5fX2luaXRfXywgcmF3aW8sIGJ1ZmZlcl9zaXplPTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9LTE2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5fX2luaXRfXywgcmF3aW8sIGJ1ZmZlcl9zaXplPS0xKQorICAgICAgICBidWZpby5fX2luaXRfXyhyYXdpbykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBidWZpby53cml0ZShiImdoaSIpKQorICAgICAgICBidWZpby5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIiLmpvaW4ocmF3aW8uX3dyaXRlX3N0YWNrKSwgYiJhYmNnaGkiKQorCisgICAgZGVmIHRlc3RfZGV0YWNoX2ZsdXNoKHNlbGYpOgorICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZiA9IHNlbGYudHAocmF3KQorICAgICAgICBidWYud3JpdGUoYiJob3dkeSEiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJhdy5fd3JpdGVfc3RhY2spCisgICAgICAgIGJ1Zi5kZXRhY2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5fd3JpdGVfc3RhY2ssIFtiImhvd2R5ISJdKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgICMgV3JpdGUgdG8gdGhlIGJ1ZmZlcmVkIElPIGJ1dCBkb24ndCBvdmVyZmxvdyB0aGUgYnVmZmVyLgorICAgICAgICB3cml0ZXIgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cCh3cml0ZXIsIDgpCisgICAgICAgIGJ1ZmlvLndyaXRlKGIiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3cml0ZXIuX3dyaXRlX3N0YWNrKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfb3ZlcmZsb3coc2VsZik6CisgICAgICAgIHdyaXRlciA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHdyaXRlciwgOCkKKyAgICAgICAgY29udGVudHMgPSBiImFiY2RlZmdoaWprbG1ub3AiCisgICAgICAgIGZvciBuIGluIHJhbmdlKDAsIGxlbihjb250ZW50cyksIDMpOgorICAgICAgICAgICAgYnVmaW8ud3JpdGUoY29udGVudHNbbjpuKzNdKQorICAgICAgICBmbHVzaGVkID0gYiIiLmpvaW4od3JpdGVyLl93cml0ZV9zdGFjaykKKyAgICAgICAgIyBBdCBsZWFzdCAodG90YWwgLSA4KSBieXRlcyB3ZXJlIGltcGxpY2l0bHkgZmx1c2hlZCwgcGVyaGFwcyBtb3JlCisgICAgICAgICMgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZsdXNoZWQuc3RhcnRzd2l0aChjb250ZW50c1s6LThdKSwgZmx1c2hlZCkKKworICAgIGRlZiBjaGVja193cml0ZXMoc2VsZiwgaW50ZXJtZWRpYXRlX2Z1bmMpOgorICAgICAgICAjIExvdHMgb2Ygd3JpdGVzLCB0ZXN0IHRoZSBmbHVzaGVkIG91dHB1dCBpcyBhcyBleHBlY3RlZC4KKyAgICAgICAgY29udGVudHMgPSBieXRlcyhyYW5nZSgyNTYpKSAqIDEwMDAKKyAgICAgICAgbiA9IDAKKyAgICAgICAgd3JpdGVyID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAod3JpdGVyLCAxMykKKyAgICAgICAgIyBHZW5lcmF0b3Igb2Ygd3JpdGUgc2l6ZXM6IHJlcGVhdCBlYWNoIE4gMTUgdGltZXMgdGhlbiBwcm9jZWVkIHRvIE4rMQorICAgICAgICBkZWYgZ2VuX3NpemVzKCk6CisgICAgICAgICAgICBmb3Igc2l6ZSBpbiBjb3VudCgxKToKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxNSk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHNpemUKKyAgICAgICAgc2l6ZXMgPSBnZW5fc2l6ZXMoKQorICAgICAgICB3aGlsZSBuIDwgbGVuKGNvbnRlbnRzKToKKyAgICAgICAgICAgIHNpemUgPSBtaW4obmV4dChzaXplcyksIGxlbihjb250ZW50cykgLSBuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby53cml0ZShjb250ZW50c1tuOm4rc2l6ZV0pLCBzaXplKQorICAgICAgICAgICAgaW50ZXJtZWRpYXRlX2Z1bmMoYnVmaW8pCisgICAgICAgICAgICBuICs9IHNpemUKKyAgICAgICAgYnVmaW8uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLAorICAgICAgICAgICAgYiIiLmpvaW4od3JpdGVyLl93cml0ZV9zdGFjaykpCisKKyAgICBkZWYgdGVzdF93cml0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfd3JpdGVzKGxhbWJkYSBidWZpbzogTm9uZSkKKworICAgIGRlZiB0ZXN0X3dyaXRlc19hbmRfZmx1c2hlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMobGFtYmRhIGJ1ZmlvOiBidWZpby5mbHVzaCgpKQorCisgICAgZGVmIHRlc3Rfd3JpdGVzX2FuZF9zZWVrcyhzZWxmKToKKyAgICAgICAgZGVmIF9zZWVrYWJzKGJ1ZmlvKToKKyAgICAgICAgICAgIHBvcyA9IGJ1ZmlvLnRlbGwoKQorICAgICAgICAgICAgYnVmaW8uc2Vlayhwb3MgKyAxLCAwKQorICAgICAgICAgICAgYnVmaW8uc2Vlayhwb3MgLSAxLCAwKQorICAgICAgICAgICAgYnVmaW8uc2Vlayhwb3MsIDApCisgICAgICAgIHNlbGYuY2hlY2tfd3JpdGVzKF9zZWVrYWJzKQorICAgICAgICBkZWYgX3NlZWtyZWwoYnVmaW8pOgorICAgICAgICAgICAgcG9zID0gYnVmaW8uc2VlaygwLCAxKQorICAgICAgICAgICAgYnVmaW8uc2VlaygrMSwgMSkKKyAgICAgICAgICAgIGJ1ZmlvLnNlZWsoLTEsIDEpCisgICAgICAgICAgICBidWZpby5zZWVrKHBvcywgMCkKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMoX3NlZWtyZWwpCisKKyAgICBkZWYgdGVzdF93cml0ZXNfYW5kX3RydW5jYXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMobGFtYmRhIGJ1ZmlvOiBidWZpby50cnVuY2F0ZShidWZpby50ZWxsKCkpKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbm9uX2Jsb2NraW5nKHNlbGYpOgorICAgICAgICByYXcgPSBzZWxmLk1vY2tOb25CbG9ja1dyaXRlcklPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhdywgOCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLndyaXRlKGIiYWJjZCIpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLndyaXRlKGIiZWZnaGkiKSwgNSkKKyAgICAgICAgIyAxIGJ5dGUgd2lsbCBiZSB3cml0dGVuLCB0aGUgcmVzdCB3aWxsIGJlIGJ1ZmZlcmVkCisgICAgICAgIHJhdy5ibG9ja19vbihiImsiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLndyaXRlKGIiamtsbW4iKSwgNSkKKworICAgICAgICAjIDggYnl0ZXMgd2lsbCBiZSB3cml0dGVuLCA4IHdpbGwgYmUgYnVmZmVyZWQgYW5kIHRoZSByZXN0IHdpbGwgYmUgbG9zdAorICAgICAgICByYXcuYmxvY2tfb24oYiIwIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYnVmaW8ud3JpdGUoYiJvcHFyd3h5ejAxMjM0NTY3ODkiKQorICAgICAgICBleGNlcHQgc2VsZi5CbG9ja2luZ0lPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHdyaXR0ZW4gPSBlLmNoYXJhY3RlcnNfd3JpdHRlbgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJCbG9ja2luZ0lPRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByYWlzZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXR0ZW4sIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5wb3Bfd3JpdHRlbigpLAorICAgICAgICAgICAgYiJhYmNkZWZnaGlqa2xtbm9wcXJ3eHl6IikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLndyaXRlKGIiQUJDREVGR0hJIiksIDkpCisgICAgICAgIHMgPSByYXcucG9wX3dyaXR0ZW4oKQorICAgICAgICAjIFByZXZpb3VzbHkgYnVmZmVyZWQgYnl0ZXMgd2VyZSBmbHVzaGVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoYiIwMTIzNDU2N0EiKSwgcykKKworICAgIGRlZiB0ZXN0X3dyaXRlX2FuZF9yZXdpbmQoc2VsZik6CisgICAgICAgIHJhdyA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3LCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLndyaXRlKGIiYWJjZGVmIiksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8udGVsbCgpLCA2KQorICAgICAgICBidWZpby5zZWVrKDAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ud3JpdGUoYiJYWSIpLCAyKQorICAgICAgICBidWZpby5zZWVrKDYsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3LmdldHZhbHVlKCksIGIiWFljZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZpby53cml0ZShiIjEyMzQ1NiIpLCA2KQorICAgICAgICBidWZpby5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3LmdldHZhbHVlKCksIGIiWFljZGVmMTIzNDU2IikKKworICAgIGRlZiB0ZXN0X2ZsdXNoKHNlbGYpOgorICAgICAgICB3cml0ZXIgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cCh3cml0ZXIsIDgpCisgICAgICAgIGJ1ZmlvLndyaXRlKGIiYWJjIikKKyAgICAgICAgYnVmaW8uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjIiwgd3JpdGVyLl93cml0ZV9zdGFja1swXSkKKworICAgIGRlZiB0ZXN0X3dyaXRlbGluZXMoc2VsZik6CisgICAgICAgIGwgPSBbYidhYicsIGInY2QnLCBiJ2VmJ10KKyAgICAgICAgd3JpdGVyID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAod3JpdGVyLCA4KQorICAgICAgICBidWZpby53cml0ZWxpbmVzKGwpCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycuam9pbih3cml0ZXIuX3dyaXRlX3N0YWNrKSwgYidhYmNkZWYnKQorCisgICAgZGVmIHRlc3Rfd3JpdGVsaW5lc191c2VybGlzdChzZWxmKToKKyAgICAgICAgbCA9IFVzZXJMaXN0KFtiJ2FiJywgYidjZCcsIGInZWYnXSkKKyAgICAgICAgd3JpdGVyID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAod3JpdGVyLCA4KQorICAgICAgICBidWZpby53cml0ZWxpbmVzKGwpCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycuam9pbih3cml0ZXIuX3dyaXRlX3N0YWNrKSwgYidhYmNkZWYnKQorCisgICAgZGVmIHRlc3Rfd3JpdGVsaW5lc19lcnJvcihzZWxmKToKKyAgICAgICAgd3JpdGVyID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAod3JpdGVyLCA4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ1ZmlvLndyaXRlbGluZXMsIFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBidWZpby53cml0ZWxpbmVzLCBOb25lKQorCisgICAgZGVmIHRlc3RfZGVzdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgd3JpdGVyID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAod3JpdGVyLCA4KQorICAgICAgICBidWZpby53cml0ZShiImFiYyIpCisgICAgICAgIGRlbCBidWZpbworICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWJjIiwgd3JpdGVyLl93cml0ZV9zdGFja1swXSkKKworICAgIGRlZiB0ZXN0X3RydW5jYXRlKHNlbGYpOgorICAgICAgICAjIFRydW5jYXRlIGltcGxpY2l0bHkgZmx1c2hlcyB0aGUgYnVmZmVyLgorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi53cml0ZV9tb2RlLCBidWZmZXJpbmc9MCkgYXMgcmF3OgorICAgICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhdywgOCkKKyAgICAgICAgICAgIGJ1ZmlvLndyaXRlKGIiYWJjZGVmIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8udHJ1bmNhdGUoMyksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnRlbGwoKSwgNikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIsIGJ1ZmZlcmluZz0wKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJhYmMiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19yZXNvdXJjZSgnY3B1JykKKyAgICBkZWYgdGVzdF90aHJlYWRzKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFdyaXRlIG91dCBtYW55IGJ5dGVzIGZyb20gbWFueSB0aHJlYWRzIGFuZCB0ZXN0IHRoZXkgd2VyZQorICAgICAgICAgICAgIyBhbGwgZmx1c2hlZC4KKyAgICAgICAgICAgIE4gPSAxMDAwCisgICAgICAgICAgICBjb250ZW50cyA9IGJ5dGVzKHJhbmdlKDI1NikpICogTgorICAgICAgICAgICAgc2l6ZXMgPSBjeWNsZShbMSwgMTldKQorICAgICAgICAgICAgbiA9IDAKKyAgICAgICAgICAgIHF1ZXVlID0gZGVxdWUoKQorICAgICAgICAgICAgd2hpbGUgbiA8IGxlbihjb250ZW50cyk6CisgICAgICAgICAgICAgICAgc2l6ZSA9IG5leHQoc2l6ZXMpCisgICAgICAgICAgICAgICAgcXVldWUuYXBwZW5kKGNvbnRlbnRzW246bitzaXplXSkKKyAgICAgICAgICAgICAgICBuICs9IHNpemUKKyAgICAgICAgICAgIGRlbCBjb250ZW50cworICAgICAgICAgICAgIyBXZSB1c2UgYSByZWFsIGZpbGUgb2JqZWN0IGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRvCisgICAgICAgICAgICAjIGV4ZXJjaXNlIHNpdHVhdGlvbnMgd2hlcmUgdGhlIEdJTCBpcyByZWxlYXNlZCBiZWZvcmUKKyAgICAgICAgICAgICMgd3JpdGluZyB0aGUgYnVmZmVyIHRvIHRoZSByYXcgc3RyZWFtcy4gVGhpcyBpcyBpbiBhZGRpdGlvbgorICAgICAgICAgICAgIyB0byBjb25jdXJyZW5jeSBpc3N1ZXMgZHVlIHRvIHN3aXRjaGluZyB0aHJlYWRzIGluIHRoZSBtaWRkbGUKKyAgICAgICAgICAgICMgb2YgUHl0aG9uIGNvZGUuCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi53cml0ZV9tb2RlLCBidWZmZXJpbmc9MCkgYXMgcmF3OgorICAgICAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXcsIDgpCisgICAgICAgICAgICAgICAgZXJyb3JzID0gW10KKyAgICAgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHF1ZXVlLnBvcGxlZnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZpby53cml0ZShzKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKGUpCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIHRocmVhZHMgPSBbdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikgZm9yIHggaW4gcmFuZ2UoMjApXQorICAgICAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMikgIyB5aWVsZAorICAgICAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnJvcnMsCisgICAgICAgICAgICAgICAgICAgICJ0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMgd2VyZSBjYXVnaHQ6ICVyIiAlIGVycm9ycykKKyAgICAgICAgICAgICAgICBidWZpby5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDI1Nik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KGJ5dGVzKFtpXSkpLCBOKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9taXNiZWhhdmVkX2lvKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTWlzYmVoYXZlZFJhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvLCA1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby5zZWVrLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby50ZWxsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby53cml0ZSwgYiJhYmNkZWYiKQorCisgICAgZGVmIHRlc3RfbWF4X2J1ZmZlcl9zaXplX2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCJtYXhfYnVmZmVyX3NpemUgaXMgZGVwcmVjYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLnRwKHNlbGYuTW9ja1Jhd0lPKCksIDgsIDEyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgZGVmIGJhZF93cml0ZShiKToKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQorICAgICAgICByYXcud3JpdGUgPSBiYWRfd3JpdGUKKyAgICAgICAgYiA9IHNlbGYudHAocmF3KQorICAgICAgICBiLndyaXRlKGInc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGIuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuY2xvc2VkKQorCisKK2NsYXNzIENCdWZmZXJlZFdyaXRlclRlc3QoQnVmZmVyZWRXcml0ZXJUZXN0LCBTaXplb2ZUZXN0KToKKyAgICB0cCA9IGlvLkJ1ZmZlcmVkV3JpdGVyCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgQnVmZmVyZWRXcml0ZXJUZXN0LnRlc3RfY29uc3RydWN0b3Ioc2VsZikKKyAgICAgICAgIyBUaGUgYWxsb2NhdGlvbiBjYW4gc3VjY2VlZCBvbiAzMi1iaXQgYnVpbGRzLCBlLmcuIHdpdGggbW9yZQorICAgICAgICAjIHRoYW4gMkdCIFJBTSBhbmQgYSA2NC1iaXQga2VybmVsLgorICAgICAgICBpZiBzeXMubWF4c2l6ZSA+IDB4N0ZGRkZGRkY6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvciwgVmFsdWVFcnJvciksCisgICAgICAgICAgICAgICAgYnVmaW8uX19pbml0X18sIHJhd2lvLCBzeXMubWF4c2l6ZSkKKworICAgIGRlZiB0ZXN0X2luaXRpYWxpemF0aW9uKHNlbGYpOgorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5fX2luaXRfXywgcmF3aW8sIGJ1ZmZlcl9zaXplPTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLndyaXRlLCBiImRlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgYnVmZmVyX3NpemU9LTE2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby53cml0ZSwgYiJkZWYiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby5fX2luaXRfXywgcmF3aW8sIGJ1ZmZlcl9zaXplPS0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBidWZpby53cml0ZSwgYiJkZWYiKQorCisgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0aW9uKHNlbGYpOgorICAgICAgICAjIEMgQnVmZmVyZWRXcml0ZXIgb2JqZWN0cyBhcmUgY29sbGVjdGVkLCBhbmQgY29sbGVjdGluZyB0aGVtIGZsdXNoZXMKKyAgICAgICAgIyBhbGwgZGF0YSB0byBkaXNrLgorICAgICAgICAjIFRoZSBQeXRob24gdmVyc2lvbiBoYXMgX19kZWxfXywgc28gaXQgZW5kcyBpbnRvIGdjLmdhcmJhZ2UgaW5zdGVhZAorICAgICAgICByYXdpbyA9IHNlbGYuRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAidytiIikKKyAgICAgICAgZiA9IHNlbGYudHAocmF3aW8pCisgICAgICAgIGYud3JpdGUoYiIxMjN4eHgiKQorICAgICAgICBmLnggPSBmCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZikKKyAgICAgICAgZGVsIGYKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiIxMjN4eHgiKQorCisgICAgZGVmIHRlc3RfYXJnc19lcnJvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTcyNzUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsICJCdWZmZXJlZFdyaXRlciIpOgorICAgICAgICAgICAgc2VsZi50cChpby5CeXRlc0lPKCksIDEwMjQsIDEwMjQsIDEwMjQpCisKKworY2xhc3MgUHlCdWZmZXJlZFdyaXRlclRlc3QoQnVmZmVyZWRXcml0ZXJUZXN0KToKKyAgICB0cCA9IHB5aW8uQnVmZmVyZWRXcml0ZXIKKworY2xhc3MgQnVmZmVyZWRSV1BhaXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLk1vY2tSYXdJTygpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBhaXIuY2xvc2VkKQorCisgICAgZGVmIHRlc3RfZGV0YWNoKHNlbGYpOgorICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLk1vY2tSYXdJTygpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLlVuc3VwcG9ydGVkT3BlcmF0aW9uLCBwYWlyLmRldGFjaCkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX21heF9idWZmZXJfc2l6ZV9kZXByZWNhdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgibWF4X2J1ZmZlcl9zaXplIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi50cChzZWxmLk1vY2tSYXdJTygpLCBzZWxmLk1vY2tSYXdJTygpLCA4LCAxMikKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX3dpdGhfbm90X3JlYWRhYmxlKHNlbGYpOgorICAgICAgICBjbGFzcyBOb3RSZWFkYWJsZShNb2NrUmF3SU8pOgorICAgICAgICAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYudHAsIE5vdFJlYWRhYmxlKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl93aXRoX25vdF93cml0ZWFibGUoc2VsZik6CisgICAgICAgIGNsYXNzIE5vdFdyaXRlYWJsZShNb2NrUmF3SU8pOgorICAgICAgICAgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYudHAsIHNlbGYuTW9ja1Jhd0lPKCksIE5vdFdyaXRlYWJsZSgpKQorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5CeXRlc0lPKGIiYWJjZGVmIiksIHNlbGYuTW9ja1Jhd0lPKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyLnJlYWQoMyksIGIiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyLnJlYWQoMSksIGIiZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFpci5yZWFkKCksIGIiZWYiKQorICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLkJ5dGVzSU8oYiJhYmMiKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyLnJlYWQoTm9uZSksIGIiYWJjIikKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lcyhzZWxmKToKKyAgICAgICAgcGFpciA9IGxhbWJkYTogc2VsZi50cChzZWxmLkJ5dGVzSU8oYiJhYmNcbmRlZlxuaCIpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhaXIoKS5yZWFkbGluZXMoKSwgW2IiYWJjXG4iLCBiImRlZlxuIiwgYiJoIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFpcigpLnJlYWRsaW5lcygpLCBbYiJhYmNcbiIsIGIiZGVmXG4iLCBiImgiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyKCkucmVhZGxpbmVzKDUpLCBbYiJhYmNcbiIsIGIiZGVmXG4iXSkKKworICAgIGRlZiB0ZXN0X3JlYWQxKHNlbGYpOgorICAgICAgICAjIC5yZWFkMSgpIGlzIGRlbGVnYXRlZCB0byB0aGUgdW5kZXJseWluZyByZWFkZXIgb2JqZWN0LCBzbyB0aGlzIHRlc3QKKyAgICAgICAgIyBjYW4gYmUgc2hhbGxvdy4KKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5CeXRlc0lPKGIiYWJjZGVmIiksIHNlbGYuTW9ja1Jhd0lPKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWlyLnJlYWQxKDMpLCBiImFiYyIpCisKKyAgICBkZWYgdGVzdF9yZWFkaW50byhzZWxmKToKKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5CeXRlc0lPKGIiYWJjZGVmIiksIHNlbGYuTW9ja1Jhd0lPKCkpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheSg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhaXIucmVhZGludG8oZGF0YSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYiJhYmNkZSIpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgdyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5Nb2NrUmF3SU8oKSwgdykKKworICAgICAgICBwYWlyLndyaXRlKGIiYWJjIikKKyAgICAgICAgcGFpci5mbHVzaCgpCisgICAgICAgIHBhaXIud3JpdGUoYiJkZWYiKQorICAgICAgICBwYWlyLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Ll93cml0ZV9zdGFjaywgW2IiYWJjIiwgYiJkZWYiXSkKKworICAgIGRlZiB0ZXN0X3BlZWsoc2VsZik6CisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuQnl0ZXNJTyhiImFiY2RlZiIpLCBzZWxmLk1vY2tSYXdJTygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYWlyLnBlZWsoMykuc3RhcnRzd2l0aChiImFiYyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhaXIucmVhZCgzKSwgYiJhYmMiKQorCisgICAgZGVmIHRlc3RfcmVhZGFibGUoc2VsZik6CisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuTW9ja1Jhd0lPKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYWlyLnJlYWRhYmxlKCkpCisKKyAgICBkZWYgdGVzdF93cml0ZWFibGUoc2VsZik6CisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuTW9ja1Jhd0lPKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYWlyLndyaXRhYmxlKCkpCisKKyAgICBkZWYgdGVzdF9zZWVrYWJsZShzZWxmKToKKyAgICAgICAgIyBCdWZmZXJlZFJXUGFpcnMgYXJlIG5ldmVyIHNlZWthYmxlLCBldmVuIGlmIHRoZWlyIHJlYWRlcnMgYW5kIHdyaXRlcnMKKyAgICAgICAgIyBhcmUuCisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHNlbGYuTW9ja1Jhd0lPKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocGFpci5zZWVrYWJsZSgpKQorCisgICAgIyAuZmx1c2goKSBpcyBkZWxlZ2F0ZWQgdG8gdGhlIHVuZGVybHlpbmcgd3JpdGVyIG9iamVjdCBhbmQgaGFzIGJlZW4KKyAgICAjIHRlc3RlZCBpbiB0aGUgdGVzdF93cml0ZSBtZXRob2QuCisKKyAgICBkZWYgdGVzdF9jbG9zZV9hbmRfY2xvc2VkKHNlbGYpOgorICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLk1vY2tSYXdJTygpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBhaXIuY2xvc2VkKQorICAgICAgICBwYWlyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhaXIuY2xvc2VkKQorCisgICAgZGVmIHRlc3RfaXNhdHR5KHNlbGYpOgorICAgICAgICBjbGFzcyBTZWxlY3RhYmxlSXNBdHR5KE1vY2tSYXdJTyk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaXNhdHR5KToKKyAgICAgICAgICAgICAgICBNb2NrUmF3SU8uX19pbml0X18oc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLl9pc2F0dHkgPSBpc2F0dHkKKworICAgICAgICAgICAgZGVmIGlzYXR0eShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faXNhdHR5CisKKyAgICAgICAgcGFpciA9IHNlbGYudHAoU2VsZWN0YWJsZUlzQXR0eShGYWxzZSksIFNlbGVjdGFibGVJc0F0dHkoRmFsc2UpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBhaXIuaXNhdHR5KCkpCisKKyAgICAgICAgcGFpciA9IHNlbGYudHAoU2VsZWN0YWJsZUlzQXR0eShUcnVlKSwgU2VsZWN0YWJsZUlzQXR0eShGYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYWlyLmlzYXR0eSgpKQorCisgICAgICAgIHBhaXIgPSBzZWxmLnRwKFNlbGVjdGFibGVJc0F0dHkoRmFsc2UpLCBTZWxlY3RhYmxlSXNBdHR5KFRydWUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFpci5pc2F0dHkoKSkKKworICAgICAgICBwYWlyID0gc2VsZi50cChTZWxlY3RhYmxlSXNBdHR5KFRydWUpLCBTZWxlY3RhYmxlSXNBdHR5KFRydWUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFpci5pc2F0dHkoKSkKKworY2xhc3MgQ0J1ZmZlcmVkUldQYWlyVGVzdChCdWZmZXJlZFJXUGFpclRlc3QpOgorICAgIHRwID0gaW8uQnVmZmVyZWRSV1BhaXIKKworY2xhc3MgUHlCdWZmZXJlZFJXUGFpclRlc3QoQnVmZmVyZWRSV1BhaXJUZXN0KToKKyAgICB0cCA9IHB5aW8uQnVmZmVyZWRSV1BhaXIKKworCitjbGFzcyBCdWZmZXJlZFJhbmRvbVRlc3QoQnVmZmVyZWRSZWFkZXJUZXN0LCBCdWZmZXJlZFdyaXRlclRlc3QpOgorICAgIHJlYWRfbW9kZSA9ICJyYisiCisgICAgd3JpdGVfbW9kZSA9ICJ3YisiCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgQnVmZmVyZWRSZWFkZXJUZXN0LnRlc3RfY29uc3RydWN0b3Ioc2VsZikKKyAgICAgICAgQnVmZmVyZWRXcml0ZXJUZXN0LnRlc3RfY29uc3RydWN0b3Ioc2VsZikKKworICAgIGRlZiB0ZXN0X3JlYWRfYW5kX3dyaXRlKHNlbGYpOgorICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygoYiJhc2RmIiwgYiJnaGprIikpCisgICAgICAgIHJ3ID0gc2VsZi50cChyYXcsIDgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFzIiwgcncucmVhZCgyKSkKKyAgICAgICAgcncud3JpdGUoYiJkZGQiKQorICAgICAgICBydy53cml0ZShiImVlZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmF3Ll93cml0ZV9zdGFjaykgIyBCdWZmZXIgd3JpdGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJnaGprIiwgcncucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiZGRkZWVlIiwgcmF3Ll93cml0ZV9zdGFja1swXSkKKworICAgIGRlZiB0ZXN0X3NlZWtfYW5kX3RlbGwoc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuQnl0ZXNJTyhiImFzZGZnaGprbCIpCisgICAgICAgIHJ3ID0gc2VsZi50cChyYXcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFzIiwgcncucmVhZCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBydy50ZWxsKCkpCisgICAgICAgIHJ3LnNlZWsoMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFzZGYiLCBydy5yZWFkKDQpKQorCisgICAgICAgIHJ3LndyaXRlKGIiMTIzZiIpCisgICAgICAgIHJ3LnNlZWsoMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFzZGYxMjNmbCIsIHJ3LnJlYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5LCBydy50ZWxsKCkpCisgICAgICAgIHJ3LnNlZWsoLTQsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgcncudGVsbCgpKQorICAgICAgICBydy5zZWVrKDIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgcncudGVsbCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiZmwiLCBydy5yZWFkKDExKSkKKyAgICAgICAgcncuZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYXNkZjEyM2ZsIiwgcmF3LmdldHZhbHVlKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBydy5zZWVrLCAwLjApCisKKyAgICBkZWYgY2hlY2tfZmx1c2hfYW5kX3JlYWQoc2VsZiwgcmVhZF9mdW5jKToKKyAgICAgICAgcmF3ID0gc2VsZi5CeXRlc0lPKGIiYWJjZGVmZ2hpIikKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhdykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiYWIiLCByZWFkX2Z1bmMoYnVmaW8sIDIpKQorICAgICAgICBidWZpby53cml0ZShiIjEyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImVmIiwgcmVhZF9mdW5jKGJ1ZmlvLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg2LCBidWZpby50ZWxsKCkpCisgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg2LCBidWZpby50ZWxsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiJnaGkiLCByZWFkX2Z1bmMoYnVmaW8pKQorICAgICAgICByYXcuc2VlaygwLCAwKQorICAgICAgICByYXcud3JpdGUoYiJYWVoiKQorICAgICAgICAjIGZsdXNoKCkgcmVzZXRzIHRoZSByZWFkIGJ1ZmZlcgorICAgICAgICBidWZpby5mbHVzaCgpCisgICAgICAgIGJ1ZmlvLnNlZWsoMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIlhZWiIsIHJlYWRfZnVuYyhidWZpbywgMykpCisKKyAgICBkZWYgdGVzdF9mbHVzaF9hbmRfcmVhZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mbHVzaF9hbmRfcmVhZChsYW1iZGEgYnVmaW8sICphcmdzOiBidWZpby5yZWFkKCphcmdzKSkKKworICAgIGRlZiB0ZXN0X2ZsdXNoX2FuZF9yZWFkaW50byhzZWxmKToKKyAgICAgICAgZGVmIF9yZWFkaW50byhidWZpbywgbj0tMSk6CisgICAgICAgICAgICBiID0gYnl0ZWFycmF5KG4gaWYgbiA+PSAwIGVsc2UgOTk5OSkKKyAgICAgICAgICAgIG4gPSBidWZpby5yZWFkaW50byhiKQorICAgICAgICAgICAgcmV0dXJuIGJ5dGVzKGJbOm5dKQorICAgICAgICBzZWxmLmNoZWNrX2ZsdXNoX2FuZF9yZWFkKF9yZWFkaW50bykKKworICAgIGRlZiB0ZXN0X2ZsdXNoX2FuZF9wZWVrKHNlbGYpOgorICAgICAgICBkZWYgX3BlZWsoYnVmaW8sIG49LTEpOgorICAgICAgICAgICAgIyBUaGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IHRoZSBidWZmZXIgY2FuIGNvbnRhaW4gdGhlIHdob2xlCisgICAgICAgICAgICAjIHJhdyBzdHJlYW0sIG90aGVyd2lzZSBwZWVrKCkgY2FuIHJldHVybiBsZXNzLgorICAgICAgICAgICAgYiA9IGJ1ZmlvLnBlZWsobikKKyAgICAgICAgICAgIGlmIG4gIT0gLTE6CisgICAgICAgICAgICAgICAgYiA9IGJbOm5dCisgICAgICAgICAgICBidWZpby5zZWVrKGxlbihiKSwgMSkKKyAgICAgICAgICAgIHJldHVybiBiCisgICAgICAgIHNlbGYuY2hlY2tfZmx1c2hfYW5kX3JlYWQoX3BlZWspCisKKyAgICBkZWYgdGVzdF9mbHVzaF9hbmRfd3JpdGUoc2VsZik6CisgICAgICAgIHJhdyA9IHNlbGYuQnl0ZXNJTyhiImFiY2RlZmdoaSIpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXcpCisKKyAgICAgICAgYnVmaW8ud3JpdGUoYiIxMjMiKQorICAgICAgICBidWZpby5mbHVzaCgpCisgICAgICAgIGJ1ZmlvLndyaXRlKGIiNDUiKQorICAgICAgICBidWZpby5mbHVzaCgpCisgICAgICAgIGJ1ZmlvLnNlZWsoMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjEyMzQ1ZmdoaSIsIHJhdy5nZXR2YWx1ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiMTIzNDVmZ2hpIiwgYnVmaW8ucmVhZCgpKQorCisgICAgZGVmIHRlc3RfdGhyZWFkcyhzZWxmKToKKyAgICAgICAgQnVmZmVyZWRSZWFkZXJUZXN0LnRlc3RfdGhyZWFkcyhzZWxmKQorICAgICAgICBCdWZmZXJlZFdyaXRlclRlc3QudGVzdF90aHJlYWRzKHNlbGYpCisKKyAgICBkZWYgdGVzdF93cml0ZXNfYW5kX3BlZWsoc2VsZik6CisgICAgICAgIGRlZiBfcGVlayhidWZpbyk6CisgICAgICAgICAgICBidWZpby5wZWVrKDEpCisgICAgICAgIHNlbGYuY2hlY2tfd3JpdGVzKF9wZWVrKQorICAgICAgICBkZWYgX3BlZWsoYnVmaW8pOgorICAgICAgICAgICAgcG9zID0gYnVmaW8udGVsbCgpCisgICAgICAgICAgICBidWZpby5zZWVrKC0xLCAxKQorICAgICAgICAgICAgYnVmaW8ucGVlaygxKQorICAgICAgICAgICAgYnVmaW8uc2Vlayhwb3MsIDApCisgICAgICAgIHNlbGYuY2hlY2tfd3JpdGVzKF9wZWVrKQorCisgICAgZGVmIHRlc3Rfd3JpdGVzX2FuZF9yZWFkcyhzZWxmKToKKyAgICAgICAgZGVmIF9yZWFkKGJ1ZmlvKToKKyAgICAgICAgICAgIGJ1ZmlvLnNlZWsoLTEsIDEpCisgICAgICAgICAgICBidWZpby5yZWFkKDEpCisgICAgICAgIHNlbGYuY2hlY2tfd3JpdGVzKF9yZWFkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVzX2FuZF9yZWFkMXMoc2VsZik6CisgICAgICAgIGRlZiBfcmVhZDEoYnVmaW8pOgorICAgICAgICAgICAgYnVmaW8uc2VlaygtMSwgMSkKKyAgICAgICAgICAgIGJ1ZmlvLnJlYWQxKDEpCisgICAgICAgIHNlbGYuY2hlY2tfd3JpdGVzKF9yZWFkMSkKKworICAgIGRlZiB0ZXN0X3dyaXRlc19hbmRfcmVhZGludG9zKHNlbGYpOgorICAgICAgICBkZWYgX3JlYWQoYnVmaW8pOgorICAgICAgICAgICAgYnVmaW8uc2VlaygtMSwgMSkKKyAgICAgICAgICAgIGJ1ZmlvLnJlYWRpbnRvKGJ5dGVhcnJheSgxKSkKKyAgICAgICAgc2VsZi5jaGVja193cml0ZXMoX3JlYWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9hZnRlcl9yZWFkYWhlYWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzY2Mjk6IHdyaXRpbmcgYWZ0ZXIgdGhlIGJ1ZmZlciB3YXMgZmlsbGVkIGJ5IHJlYWRhaGVhZCBzaG91bGQKKyAgICAgICAgIyBmaXJzdCByZXdpbmQgdGhlIHJhdyBzdHJlYW0uCisgICAgICAgIGZvciBvdmVyd3JpdGVfc2l6ZSBpbiBbMSwgNV06CisgICAgICAgICAgICByYXcgPSBzZWxmLkJ5dGVzSU8oYiJBIiAqIDEwKQorICAgICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhdywgNCkKKyAgICAgICAgICAgICMgVHJpZ2dlciByZWFkYWhlYWQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ucmVhZCgxKSwgYiJBIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8udGVsbCgpLCAxKQorICAgICAgICAgICAgIyBPdmVyd3JpdGluZyBzaG91bGQgcmV3aW5kIHRoZSByYXcgc3RyZWFtIGlmIGl0IG5lZWRzIHNvCisgICAgICAgICAgICBidWZpby53cml0ZShiIkIiICogb3ZlcndyaXRlX3NpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnRlbGwoKSwgb3ZlcndyaXRlX3NpemUgKyAxKQorICAgICAgICAgICAgIyBJZiB0aGUgd3JpdGUgc2l6ZSB3YXMgc21hbGxlciB0aGFuIHRoZSBidWZmZXIgc2l6ZSwgZmx1c2goKSBhbmQKKyAgICAgICAgICAgICMgY2hlY2sgdGhhdCByZXdpbmQgaGFwcGVucy4KKyAgICAgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8udGVsbCgpLCBvdmVyd3JpdGVfc2l6ZSArIDEpCisgICAgICAgICAgICBzID0gcmF3LmdldHZhbHVlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywKKyAgICAgICAgICAgICAgICBiIkEiICsgYiJCIiAqIG92ZXJ3cml0ZV9zaXplICsgYiJBIiAqICg5IC0gb3ZlcndyaXRlX3NpemUpKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmV3aW5kX3dyaXRlKHNlbGYpOgorICAgICAgICAjIFZhcmlvdXMgY29tYmluYXRpb25zIG9mIHJlYWRpbmcgLyB3cml0aW5nIC8gc2Vla2luZyBiYWNrd2FyZHMgLyB3cml0aW5nIGFnYWluCisgICAgICAgIGRlZiBtdXRhdGUoYnVmaW8sIHBvczEsIHBvczIpOgorICAgICAgICAgICAgYXNzZXJ0IHBvczIgPj0gcG9zMQorICAgICAgICAgICAgIyBGaWxsIHRoZSBidWZmZXIKKyAgICAgICAgICAgIGJ1ZmlvLnNlZWsocG9zMSkKKyAgICAgICAgICAgIGJ1ZmlvLnJlYWQocG9zMiAtIHBvczEpCisgICAgICAgICAgICBidWZpby53cml0ZShiJ1x4MDInKQorICAgICAgICAgICAgIyBUaGlzIHdyaXRlcyBlYXJsaWVyIHRoYW4gdGhlIHByZXZpb3VzIHdyaXRlLCBidXQgc3RpbGwgaW5zaWRlCisgICAgICAgICAgICAjIHRoZSBidWZmZXIuCisgICAgICAgICAgICBidWZpby5zZWVrKHBvczEpCisgICAgICAgICAgICBidWZpby53cml0ZShiJ1x4MDEnKQorCisgICAgICAgIGIgPSBiIlx4ODBceDgxXHg4Mlx4ODNceDg0IgorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oYikpOgorICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoaSwgbGVuKGIpKToKKyAgICAgICAgICAgICAgICByYXcgPSBzZWxmLkJ5dGVzSU8oYikKKyAgICAgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3LCAxMDApCisgICAgICAgICAgICAgICAgbXV0YXRlKGJ1ZmlvLCBpLCBqKQorICAgICAgICAgICAgICAgIGJ1ZmlvLmZsdXNoKCkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGJ5dGVhcnJheShiKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkW2pdID0gMgorICAgICAgICAgICAgICAgIGV4cGVjdGVkW2ldID0gMQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3LmdldHZhbHVlKCksIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCByZXN1bHQgZm9yIGk9JWQsIGo9JWQiICUgKGksIGopKQorCisgICAgZGVmIHRlc3RfdHJ1bmNhdGVfYWZ0ZXJfcmVhZF9vcl93cml0ZShzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5CeXRlc0lPKGIiQSIgKiAxMCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhdywgMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnJlYWQoMiksIGIiQUEiKSAjIHRoZSByZWFkIGJ1ZmZlciBnZXRzIGZpbGxlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmlvLnRydW5jYXRlKCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8ud3JpdGUoYiJCQiIpLCAyKSAjIHRoZSB3cml0ZSBidWZmZXIgaW5jcmVhc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmaW8udHJ1bmNhdGUoKSwgNCkKKworICAgIGRlZiB0ZXN0X21pc2JlaGF2ZWRfaW8oc2VsZik6CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyVGVzdC50ZXN0X21pc2JlaGF2ZWRfaW8oc2VsZikKKyAgICAgICAgQnVmZmVyZWRXcml0ZXJUZXN0LnRlc3RfbWlzYmVoYXZlZF9pbyhzZWxmKQorCisgICAgZGVmIHRlc3RfaW50ZXJsZWF2ZWRfcmVhZF93cml0ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBpc3N1ZSAjMTIyMTMKKyAgICAgICAgd2l0aCBzZWxmLkJ5dGVzSU8oYidhYmNkZWZnaCcpIGFzIHJhdzoKKyAgICAgICAgICAgIHdpdGggc2VsZi50cChyYXcsIDEwMCkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGIiMSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMSksIGInYicpCisgICAgICAgICAgICAgICAgZi53cml0ZShiJzInKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkMSgxKSwgYidkJykKKyAgICAgICAgICAgICAgICBmLndyaXRlKGInMycpCisgICAgICAgICAgICAgICAgYnVmID0gYnl0ZWFycmF5KDEpCisgICAgICAgICAgICAgICAgZi5yZWFkaW50byhidWYpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYsIGInZicpCisgICAgICAgICAgICAgICAgZi53cml0ZShiJzQnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wZWVrKDEpLCBiJ2gnKQorICAgICAgICAgICAgICAgIGYuZmx1c2goKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3LmdldHZhbHVlKCksIGInMWIyZDNmNGgnKQorCisgICAgICAgIHdpdGggc2VsZi5CeXRlc0lPKGInYWJjJykgYXMgcmF3OgorICAgICAgICAgICAgd2l0aCBzZWxmLnRwKHJhdywgMTAwKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDEpLCBiJ2EnKQorICAgICAgICAgICAgICAgIGYud3JpdGUoYiIyIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxKSwgYidjJykKKyAgICAgICAgICAgICAgICBmLmZsdXNoKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5nZXR2YWx1ZSgpLCBiJ2EyYycpCisKKyAgICBkZWYgdGVzdF9pbnRlcmxlYXZlZF9yZWFkbGluZV93cml0ZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLkJ5dGVzSU8oYidhYlxuY2RlZlxuZ1xuJykgYXMgcmF3OgorICAgICAgICAgICAgd2l0aCBzZWxmLnRwKHJhdykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGInMScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksIGInYlxuJykKKyAgICAgICAgICAgICAgICBmLndyaXRlKGInMicpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksIGInZGVmXG4nKQorICAgICAgICAgICAgICAgIGYud3JpdGUoYiczJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgYidcbicpCisgICAgICAgICAgICAgICAgZi5mbHVzaCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXcuZ2V0dmFsdWUoKSwgYicxYlxuMmRlZlxuM1xuJykKKworCitjbGFzcyBDQnVmZmVyZWRSYW5kb21UZXN0KENCdWZmZXJlZFJlYWRlclRlc3QsIENCdWZmZXJlZFdyaXRlclRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcmVkUmFuZG9tVGVzdCwgU2l6ZW9mVGVzdCk6CisgICAgdHAgPSBpby5CdWZmZXJlZFJhbmRvbQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIEJ1ZmZlcmVkUmFuZG9tVGVzdC50ZXN0X2NvbnN0cnVjdG9yKHNlbGYpCisgICAgICAgICMgVGhlIGFsbG9jYXRpb24gY2FuIHN1Y2NlZWQgb24gMzItYml0IGJ1aWxkcywgZS5nLiB3aXRoIG1vcmUKKyAgICAgICAgIyB0aGFuIDJHQiBSQU0gYW5kIGEgNjQtYml0IGtlcm5lbC4KKyAgICAgICAgaWYgc3lzLm1heHNpemUgPiAweDdGRkZGRkZGOgorICAgICAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoT3ZlcmZsb3dFcnJvciwgTWVtb3J5RXJyb3IsIFZhbHVlRXJyb3IpLAorICAgICAgICAgICAgICAgIGJ1ZmlvLl9faW5pdF9fLCByYXdpbywgc3lzLm1heHNpemUpCisKKyAgICBkZWYgdGVzdF9nYXJiYWdlX2NvbGxlY3Rpb24oc2VsZik6CisgICAgICAgIENCdWZmZXJlZFJlYWRlclRlc3QudGVzdF9nYXJiYWdlX2NvbGxlY3Rpb24oc2VsZikKKyAgICAgICAgQ0J1ZmZlcmVkV3JpdGVyVGVzdC50ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbihzZWxmKQorCisgICAgZGVmIHRlc3RfYXJnc19lcnJvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTcyNzUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsICJCdWZmZXJlZFJhbmRvbSIpOgorICAgICAgICAgICAgc2VsZi50cChpby5CeXRlc0lPKCksIDEwMjQsIDEwMjQsIDEwMjQpCisKKworY2xhc3MgUHlCdWZmZXJlZFJhbmRvbVRlc3QoQnVmZmVyZWRSYW5kb21UZXN0KToKKyAgICB0cCA9IHB5aW8uQnVmZmVyZWRSYW5kb20KKworCisjIFRvIGZ1bGx5IGV4ZXJjaXNlIHNlZWsvdGVsbCwgdGhlIFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyIGhhcyB0aGVzZQorIyBwcm9wZXJ0aWVzOgorIyAgIC0gQSBzaW5nbGUgb3V0cHV0IGNoYXJhY3RlciBjYW4gY29ycmVzcG9uZCB0byBtYW55IGJ5dGVzIG9mIGlucHV0LgorIyAgIC0gVGhlIG51bWJlciBvZiBpbnB1dCBieXRlcyB0byBjb21wbGV0ZSB0aGUgY2hhcmFjdGVyIGNhbiBiZQorIyAgICAgdW5kZXRlcm1pbmVkIHVudGlsIHRoZSBsYXN0IGlucHV0IGJ5dGUgaXMgcmVjZWl2ZWQuCisjICAgLSBUaGUgbnVtYmVyIG9mIGlucHV0IGJ5dGVzIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiBwcmV2aW91cyBpbnB1dC4KKyMgICAtIEEgc2luZ2xlIGlucHV0IGJ5dGUgY2FuIGNvcnJlc3BvbmQgdG8gbWFueSBjaGFyYWN0ZXJzIG9mIG91dHB1dC4KKyMgICAtIFRoZSBudW1iZXIgb2Ygb3V0cHV0IGNoYXJhY3RlcnMgY2FuIGJlIHVuZGV0ZXJtaW5lZCB1bnRpbCB0aGUKKyMgICAgIGxhc3QgaW5wdXQgYnl0ZSBpcyByZWNlaXZlZC4KKyMgICAtIFRoZSBudW1iZXIgb2Ygb3V0cHV0IGNoYXJhY3RlcnMgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIHByZXZpb3VzIGlucHV0LgorCitjbGFzcyBTdGF0ZWZ1bEluY3JlbWVudGFsRGVjb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyKToKKyAgICAiIiIKKyAgICBGb3IgdGVzdGluZyBzZWVrL3RlbGwgYmVoYXZpb3Igd2l0aCBhIHN0YXRlZnVsLCBidWZmZXJpbmcgZGVjb2Rlci4KKworICAgIElucHV0IGlzIGEgc2VxdWVuY2Ugb2Ygd29yZHMuICBXb3JkcyBtYXkgYmUgZml4ZWQtbGVuZ3RoIChsZW5ndGggc2V0CisgICAgYnkgaW5wdXQpIG9yIHZhcmlhYmxlLWxlbmd0aCAocGVyaW9kLXRlcm1pbmF0ZWQpLiAgSW4gdmFyaWFibGUtbGVuZ3RoCisgICAgbW9kZSwgZXh0cmEgcGVyaW9kcyBhcmUgaWdub3JlZC4gIFBvc3NpYmxlIHdvcmRzIGFyZToKKyAgICAgIC0gJ2knIGZvbGxvd2VkIGJ5IGEgbnVtYmVyIHNldHMgdGhlIGlucHV0IGxlbmd0aCwgSSAobWF4aW11bSA5OSkuCisgICAgICAgIFdoZW4gSSBpcyBzZXQgdG8gMCwgd29yZHMgYXJlIHNwYWNlLXRlcm1pbmF0ZWQuCisgICAgICAtICdvJyBmb2xsb3dlZCBieSBhIG51bWJlciBzZXRzIHRoZSBvdXRwdXQgbGVuZ3RoLCBPIChtYXhpbXVtIDk5KS4KKyAgICAgIC0gQW55IG90aGVyIHdvcmQgaXMgY29udmVydGVkIGludG8gYSB3b3JkIGZvbGxvd2VkIGJ5IGEgcGVyaW9kIG9uCisgICAgICAgIHRoZSBvdXRwdXQuICBUaGUgb3V0cHV0IHdvcmQgY29uc2lzdHMgb2YgdGhlIGlucHV0IHdvcmQgdHJ1bmNhdGVkCisgICAgICAgIG9yIHBhZGRlZCBvdXQgd2l0aCBoeXBoZW5zIHRvIG1ha2UgaXRzIGxlbmd0aCBlcXVhbCB0byBPLiAgSWYgTworICAgICAgICBpcyAwLCB0aGUgd29yZCBpcyBvdXRwdXQgdmVyYmF0aW0gd2l0aG91dCB0cnVuY2F0aW5nIG9yIHBhZGRpbmcuCisgICAgSSBhbmQgTyBhcmUgaW5pdGlhbGx5IHNldCB0byAxLiAgV2hlbiBJIGNoYW5nZXMsIGFueSBidWZmZXJlZCBpbnB1dCBpcworICAgIHJlLXNjYW5uZWQgYWNjb3JkaW5nIHRvIHRoZSBuZXcgSS4gIEVPRiBhbHNvIHRlcm1pbmF0ZXMgdGhlIGxhc3Qgd29yZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICBjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyLl9faW5pdF9fKHNlbGYsIGVycm9ycykKKyAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPFNJRCAleD4nICUgaWQoc2VsZikKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5pID0gMQorICAgICAgICBzZWxmLm8gPSAxCisgICAgICAgIHNlbGYuYnVmZmVyID0gYnl0ZWFycmF5KCkKKworICAgIGRlZiBnZXRzdGF0ZShzZWxmKToKKyAgICAgICAgaSwgbyA9IHNlbGYuaSBeIDEsIHNlbGYubyBeIDEgIyBzbyB0aGF0IGZsYWdzID0gMCBhZnRlciByZXNldCgpCisgICAgICAgIHJldHVybiBieXRlcyhzZWxmLmJ1ZmZlciksIGkqMTAwICsgbworCisgICAgZGVmIHNldHN0YXRlKHNlbGYsIHN0YXRlKToKKyAgICAgICAgYnVmZmVyLCBpbyA9IHN0YXRlCisgICAgICAgIHNlbGYuYnVmZmVyID0gYnl0ZWFycmF5KGJ1ZmZlcikKKyAgICAgICAgaSwgbyA9IGRpdm1vZChpbywgMTAwKQorICAgICAgICBzZWxmLmksIHNlbGYubyA9IGkgXiAxLCBvIF4gMQorCisgICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICBvdXRwdXQgPSAnJworICAgICAgICBmb3IgYiBpbiBpbnB1dDoKKyAgICAgICAgICAgIGlmIHNlbGYuaSA9PSAwOiAjIHZhcmlhYmxlLWxlbmd0aCwgdGVybWluYXRlZCB3aXRoIHBlcmlvZAorICAgICAgICAgICAgICAgIGlmIGIgPT0gJy4nOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmJ1ZmZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBzZWxmLnByb2Nlc3Nfd29yZCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5idWZmZXIuYXBwZW5kKGIpCisgICAgICAgICAgICBlbHNlOiAjIGZpeGVkLWxlbmd0aCwgdGVybWluYXRlIGFmdGVyIHNlbGYuaSBieXRlcworICAgICAgICAgICAgICAgIHNlbGYuYnVmZmVyLmFwcGVuZChiKQorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLmJ1ZmZlcikgPT0gc2VsZi5pOgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gc2VsZi5wcm9jZXNzX3dvcmQoKQorICAgICAgICBpZiBmaW5hbCBhbmQgc2VsZi5idWZmZXI6ICMgRU9GIHRlcm1pbmF0ZXMgdGhlIGxhc3Qgd29yZAorICAgICAgICAgICAgb3V0cHV0ICs9IHNlbGYucHJvY2Vzc193b3JkKCkKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZGVmIHByb2Nlc3Nfd29yZChzZWxmKToKKyAgICAgICAgb3V0cHV0ID0gJycKKyAgICAgICAgaWYgc2VsZi5idWZmZXJbMF0gPT0gb3JkKCdpJyk6CisgICAgICAgICAgICBzZWxmLmkgPSBtaW4oOTksIGludChzZWxmLmJ1ZmZlclsxOl0gb3IgMCkpICMgc2V0IGlucHV0IGxlbmd0aAorICAgICAgICBlbGlmIHNlbGYuYnVmZmVyWzBdID09IG9yZCgnbycpOgorICAgICAgICAgICAgc2VsZi5vID0gbWluKDk5LCBpbnQoc2VsZi5idWZmZXJbMTpdIG9yIDApKSAjIHNldCBvdXRwdXQgbGVuZ3RoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLmJ1ZmZlci5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgIGlmIGxlbihvdXRwdXQpIDwgc2VsZi5vOgorICAgICAgICAgICAgICAgIG91dHB1dCArPSAnLScqc2VsZi5vICMgcGFkIG91dCB3aXRoIGh5cGhlbnMKKyAgICAgICAgICAgIGlmIHNlbGYubzoKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXRbOnNlbGYub10gIyB0cnVuY2F0ZSB0byBvdXRwdXQgbGVuZ3RoCisgICAgICAgICAgICBvdXRwdXQgKz0gJy4nCisgICAgICAgIHNlbGYuYnVmZmVyID0gYnl0ZWFycmF5KCkKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgY29kZWNFbmFibGVkID0gRmFsc2UKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBsb29rdXBUZXN0RGVjb2RlcihjbHMsIG5hbWUpOgorICAgICAgICBpZiBjbHMuY29kZWNFbmFibGVkIGFuZCBuYW1lID09ICd0ZXN0X2RlY29kZXInOgorICAgICAgICAgICAgbGF0aW4xID0gY29kZWNzLmxvb2t1cCgnbGF0aW4tMScpCisgICAgICAgICAgICByZXR1cm4gY29kZWNzLkNvZGVjSW5mbygKKyAgICAgICAgICAgICAgICBuYW1lPSd0ZXN0X2RlY29kZXInLCBlbmNvZGU9bGF0aW4xLmVuY29kZSwgZGVjb2RlPU5vbmUsCisgICAgICAgICAgICAgICAgaW5jcmVtZW50YWxlbmNvZGVyPU5vbmUsCisgICAgICAgICAgICAgICAgc3RyZWFtcmVhZGVyPU5vbmUsIHN0cmVhbXdyaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1jbHMpCisKKyMgUmVnaXN0ZXIgdGhlIHByZXZpb3VzIGRlY29kZXIgZm9yIHRlc3RpbmcuCisjIERpc2FibGVkIGJ5IGRlZmF1bHQsIHRlc3RzIHdpbGwgZW5hYmxlIGl0LgorY29kZWNzLnJlZ2lzdGVyKFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyLmxvb2t1cFRlc3REZWNvZGVyKQorCisKK2NsYXNzIFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiCisgICAgTWFrZSBzdXJlIHRoZSBTdGF0ZWZ1bEluY3JlbWVudGFsRGVjb2RlciBhY3R1YWxseSB3b3Jrcy4KKyAgICAiIiIKKworICAgIHRlc3RfY2FzZXMgPSBbCisgICAgICAgICMgST0xLCBPPTEgKGZpeGVkLWxlbmd0aCBpbnB1dCA9PSBmaXhlZC1sZW5ndGggb3V0cHV0KQorICAgICAgICAoYidhYmNkJywgRmFsc2UsICdhLmIuYy5kLicpLAorICAgICAgICAjIEk9MCwgTz0wICh2YXJpYWJsZS1sZW5ndGggaW5wdXQsIHZhcmlhYmxlLWxlbmd0aCBvdXRwdXQpCisgICAgICAgIChiJ29pYWJjZCcsIFRydWUsICdhYmNkLicpLAorICAgICAgICAjIEk9MCwgTz0wIChzaG91bGQgaWdub3JlIGV4dHJhIHBlcmlvZHMpCisgICAgICAgIChiJ29pLi4uYWJjZC4uLicsIFRydWUsICdhYmNkLicpLAorICAgICAgICAjIEk9MCwgTz02ICh2YXJpYWJsZS1sZW5ndGggaW5wdXQsIGZpeGVkLWxlbmd0aCBvdXRwdXQpCisgICAgICAgIChiJ2kubzYueC54eXoudG9vbG9uZ3RvZml0LicsIEZhbHNlLCAneC0tLS0tLnh5ei0tLS50b29sb24uJyksCisgICAgICAgICMgST0yLCBPPTYgKGZpeGVkLWxlbmd0aCBpbnB1dCA8IGZpeGVkLWxlbmd0aCBvdXRwdXQpCisgICAgICAgIChiJ2kuaTIubzZ4eXonLCBUcnVlLCAneHktLS0tLnotLS0tLS4nKSwKKyAgICAgICAgIyBJPTYsIE89MyAoZml4ZWQtbGVuZ3RoIGlucHV0ID4gZml4ZWQtbGVuZ3RoIG91dHB1dCkKKyAgICAgICAgKGInaS5vMy5pNi5hYmNkZWZnaGlqa2xtbm9wJywgVHJ1ZSwgJ2FiYy5naGkubW5vLicpLAorICAgICAgICAjIEk9MCwgdGhlbiAzOyBPPTI5LCB0aGVuIDE1ICh3aXRoIGxvbmdlciBvdXRwdXQpCisgICAgICAgIChiJ2kubzI5LmEuYi5jZGUubzE1LmFiY2RlZmdoaWphYmNkZWZnaGlqLmkzLmEuYi5jLmQuZWkwMGsubC5tJywgVHJ1ZSwKKyAgICAgICAgICdhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4nICsKKyAgICAgICAgICdiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4nICsKKyAgICAgICAgICdjZGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4nICsKKyAgICAgICAgICdhYmNkZWZnaGlqYWJjZGUuJyArCisgICAgICAgICAnYS5iLS0tLS0tLS0tLS0tLicgKworICAgICAgICAgJy5jLi0tLS0tLS0tLS0tLS4nICsKKyAgICAgICAgICdkLmUtLS0tLS0tLS0tLS0uJyArCisgICAgICAgICAnay0tLS0tLS0tLS0tLS0tLicgKworICAgICAgICAgJ2wtLS0tLS0tLS0tLS0tLS4nICsKKyAgICAgICAgICdtLS0tLS0tLS0tLS0tLS0uJykKKyAgICBdCisKKyAgICBkZWYgdGVzdF9kZWNvZGVyKHNlbGYpOgorICAgICAgICAjIFRyeSBhIGZldyBvbmUtc2hvdCB0ZXN0IGNhc2VzLgorICAgICAgICBmb3IgaW5wdXQsIGVvZiwgb3V0cHV0IGluIHNlbGYudGVzdF9jYXNlczoKKyAgICAgICAgICAgIGQgPSBTdGF0ZWZ1bEluY3JlbWVudGFsRGVjb2RlcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGVjb2RlKGlucHV0LCBlb2YpLCBvdXRwdXQpCisKKyAgICAgICAgIyBBbHNvIHRlc3QgYW4gdW5maW5pc2hlZCBkZWNvZGUsIGZvbGxvd2VkIGJ5IGZvcmNpbmcgRU9GLgorICAgICAgICBkID0gU3RhdGVmdWxJbmNyZW1lbnRhbERlY29kZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGVjb2RlKGInb2lhYmNkJyksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGVjb2RlKGInJywgMSksICdhYmNkLicpCisKK2NsYXNzIFRleHRJT1dyYXBwZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0ZGF0YSA9IGIiQUFBXHJcbkJCQlxyQ0NDXHJcbkRERFxuRUVFXHJcbiIKKyAgICAgICAgc2VsZi5ub3JtYWxpemVkID0gYiJBQUFcbkJCQlxuQ0NDXG5ERERcbkVFRVxuIi5kZWNvZGUoImFzY2lpIikKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHIgPSBzZWxmLkJ5dGVzSU8oYiJceGMzXHhhOVxuXG4iKQorICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFJlYWRlcihyLCAxMDAwKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIpCisgICAgICAgIHQuX19pbml0X18oYiwgZW5jb2Rpbmc9ImxhdGluMSIsIG5ld2xpbmU9IlxyXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZW5jb2RpbmcsICJsYXRpbjEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubGluZV9idWZmZXJpbmcsIEZhbHNlKQorICAgICAgICB0Ll9faW5pdF9fKGIsIGVuY29kaW5nPSJ1dGY4IiwgbGluZV9idWZmZXJpbmc9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmVuY29kaW5nLCAidXRmOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5saW5lX2J1ZmZlcmluZywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiXHhlOVxuIiwgdC5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuX19pbml0X18sIGIsIG5ld2xpbmU9NDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuX19pbml0X18sIGIsIG5ld2xpbmU9J3h5enp5JykKKworICAgIGRlZiB0ZXN0X2RldGFjaChzZWxmKToKKyAgICAgICAgciA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkV3JpdGVyKHIpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0LmRldGFjaCgpLCBiKQorCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgdC53cml0ZSgiaG93ZHkiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHIuZ2V0dmFsdWUoKSkKKyAgICAgICAgdC5kZXRhY2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZ2V0dmFsdWUoKSwgYiJob3dkeSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuZGV0YWNoKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgcmF3ID0gc2VsZi5CeXRlc0lPKCJoZWxsbyIuZW5jb2RlKCJ1dGYtOCIpKQorICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFJlYWRlcihyYXcpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAgICAgbW9kbmFtZSA9IHNlbGYuVGV4dElPV3JhcHBlci5fX21vZHVsZV9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPCVzLlRleHRJT1dyYXBwZXIgZW5jb2Rpbmc9J3V0Zi04Jz4iICUgbW9kbmFtZSkKKyAgICAgICAgcmF3Lm5hbWUgPSAiZHVtbXkiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPCVzLlRleHRJT1dyYXBwZXIgbmFtZT11J2R1bW15JyBlbmNvZGluZz0ndXRmLTgnPiIgJSBtb2RuYW1lKQorICAgICAgICByYXcubmFtZSA9IGIiZHVtbXkiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPCVzLlRleHRJT1dyYXBwZXIgbmFtZT0nZHVtbXknIGVuY29kaW5nPSd1dGYtOCc+IiAlIG1vZG5hbWUpCisKKyAgICBkZWYgdGVzdF9saW5lX2J1ZmZlcmluZyhzZWxmKToKKyAgICAgICAgciA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkV3JpdGVyKHIsIDEwMDApCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgbmV3bGluZT0iXG4iLCBsaW5lX2J1ZmZlcmluZz1UcnVlKQorICAgICAgICB0LndyaXRlKCJYIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmdldHZhbHVlKCksIGIiIikgICMgTm8gZmx1c2ggaGFwcGVuZWQKKyAgICAgICAgdC53cml0ZSgiWVxuWiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5nZXR2YWx1ZSgpLCBiIlhZXG5aIikgICMgQWxsIGdvdCBmbHVzaGVkCisgICAgICAgIHQud3JpdGUoIkFcckIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZ2V0dmFsdWUoKSwgYiJYWVxuWkFcckIiKQorCisgICAgZGVmIHRlc3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhlIGVuY29kaW5nIGF0dHJpYnV0ZSBpcyBhbHdheXMgc2V0LCBhbmQgdmFsaWQKKyAgICAgICAgYiA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9InV0ZjgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZW5jb2RpbmcsICJ1dGY4IikKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5lbmNvZGluZyBpcyBub3QgTm9uZSkKKyAgICAgICAgY29kZWNzLmxvb2t1cCh0LmVuY29kaW5nKQorCisgICAgZGVmIHRlc3RfZW5jb2RpbmdfZXJyb3JzX3JlYWRpbmcoc2VsZik6CisgICAgICAgICMgKDEpIGRlZmF1bHQKKyAgICAgICAgYiA9IHNlbGYuQnl0ZXNJTyhiImFiY1xuXHhmZlxuIikKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHQucmVhZCkKKyAgICAgICAgIyAoMikgZXhwbGljaXQgc3RyaWN0CisgICAgICAgIGIgPSBzZWxmLkJ5dGVzSU8oYiJhYmNcblx4ZmZcbiIpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJzdHJpY3QiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHQucmVhZCkKKyAgICAgICAgIyAoMykgaWdub3JlCisgICAgICAgIGIgPSBzZWxmLkJ5dGVzSU8oYiJhYmNcblx4ZmZcbiIpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJpZ25vcmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVhZCgpLCAiYWJjXG5cbiIpCisgICAgICAgICMgKDQpIHJlcGxhY2UKKyAgICAgICAgYiA9IHNlbGYuQnl0ZXNJTyhiImFiY1xuXHhmZlxuIikKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9InJlcGxhY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVhZCgpLCAiYWJjXG5cdWZmZmRcbiIpCisKKyAgICBkZWYgdGVzdF9lbmNvZGluZ19lcnJvcnNfd3JpdGluZyhzZWxmKToKKyAgICAgICAgIyAoMSkgZGVmYXVsdAorICAgICAgICBiID0gc2VsZi5CeXRlc0lPKCkKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHQud3JpdGUsICJceGZmIikKKyAgICAgICAgIyAoMikgZXhwbGljaXQgc3RyaWN0CisgICAgICAgIGIgPSBzZWxmLkJ5dGVzSU8oKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0ic3RyaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB0LndyaXRlLCAiXHhmZiIpCisgICAgICAgICMgKDMpIGlnbm9yZQorICAgICAgICBiID0gc2VsZi5CeXRlc0lPKCkKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9Imlnbm9yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmU9IlxuIikKKyAgICAgICAgdC53cml0ZSgiYWJjXHhmZmRlZlxuIikKKyAgICAgICAgdC5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5nZXR2YWx1ZSgpLCBiImFiY2RlZlxuIikKKyAgICAgICAgIyAoNCkgcmVwbGFjZQorICAgICAgICBiID0gc2VsZi5CeXRlc0lPKCkKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9InJlcGxhY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lPSJcbiIpCisgICAgICAgIHQud3JpdGUoImFiY1x4ZmZkZWZcbiIpCisgICAgICAgIHQuZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ2V0dmFsdWUoKSwgYiJhYmM/ZGVmXG4iKQorCisgICAgZGVmIHRlc3RfbmV3bGluZXMoc2VsZik6CisgICAgICAgIGlucHV0X2xpbmVzID0gWyAidW5peFxuIiwgIndpbmRvd3NcclxuIiwgIm9zOVxyIiwgImxhc3RcbiIsICJub25sIiBdCisKKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICBbIE5vbmUsIFsgJ3VuaXhcbicsICd3aW5kb3dzXG4nLCAnb3M5XG4nLCAnbGFzdFxuJywgJ25vbmwnIF0gXSwKKyAgICAgICAgICAgIFsgJycsIGlucHV0X2xpbmVzIF0sCisgICAgICAgICAgICBbICdcbicsIFsgInVuaXhcbiIsICJ3aW5kb3dzXHJcbiIsICJvczlccmxhc3RcbiIsICJub25sIiBdIF0sCisgICAgICAgICAgICBbICdcclxuJywgWyAidW5peFxud2luZG93c1xyXG4iLCAib3M5XHJsYXN0XG5ub25sIiBdIF0sCisgICAgICAgICAgICBbICdccicsIFsgInVuaXhcbndpbmRvd3NcciIsICJcbm9zOVxyIiwgImxhc3Rcbm5vbmwiIF0gXSwKKyAgICAgICAgXQorICAgICAgICBlbmNvZGluZ3MgPSAoCisgICAgICAgICAgICAndXRmLTgnLCAnbGF0aW4tMScsCisgICAgICAgICAgICAndXRmLTE2JywgJ3V0Zi0xNi1sZScsICd1dGYtMTYtYmUnLAorICAgICAgICAgICAgJ3V0Zi0zMicsICd1dGYtMzItbGUnLCAndXRmLTMyLWJlJywKKyAgICAgICAgKQorCisgICAgICAgICMgVHJ5IGEgcmFuZ2Ugb2YgYnVmZmVyIHNpemVzIHRvIHRlc3QgdGhlIGNhc2Ugd2hlcmUgXHIgaXMgdGhlIGxhc3QKKyAgICAgICAgIyBjaGFyYWN0ZXIgaW4gVGV4dElPV3JhcHBlci5fcGVuZGluZ19saW5lLgorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gZW5jb2RpbmdzOgorICAgICAgICAgICAgIyBYWFg6IHN0ci5lbmNvZGUoKSBzaG91bGQgcmV0dXJuIGJ5dGVzCisgICAgICAgICAgICBkYXRhID0gYnl0ZXMoJycuam9pbihpbnB1dF9saW5lcykuZW5jb2RlKGVuY29kaW5nKSkKKyAgICAgICAgICAgIGZvciBkb19yZWFkcyBpbiAoRmFsc2UsIFRydWUpOgorICAgICAgICAgICAgICAgIGZvciBidWZzaXplIGluIHJhbmdlKDEsIDEwKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIG5ld2xpbmUsIGV4cF9saW5lcyBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmlvID0gc2VsZi5CdWZmZXJlZFJlYWRlcihzZWxmLkJ5dGVzSU8oZGF0YSksIGJ1ZnNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0aW8gPSBzZWxmLlRleHRJT1dyYXBwZXIoYnVmaW8sIG5ld2xpbmU9bmV3bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkb19yZWFkczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RfbGluZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyID0gdGV4dGlvLnJlYWQoMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYzIgPT0gJyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjMiksIDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdF9saW5lcy5hcHBlbmQoYzIgKyB0ZXh0aW8ucmVhZGxpbmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290X2xpbmVzID0gbGlzdCh0ZXh0aW8pCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBnb3RfbGluZSwgZXhwX2xpbmUgaW4gemlwKGdvdF9saW5lcywgZXhwX2xpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdF9saW5lLCBleHBfbGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdvdF9saW5lcyksIGxlbihleHBfbGluZXMpKQorCisgICAgZGVmIHRlc3RfbmV3bGluZXNfaW5wdXQoc2VsZik6CisgICAgICAgIHRlc3RkYXRhID0gYiJBQUFcbkJCXHgwMEJcbkNDQ1xyREREXHJFRUVcclxuRkZGXHJcbkdHRyIKKyAgICAgICAgbm9ybWFsaXplZCA9IHRlc3RkYXRhLnJlcGxhY2UoYiJcclxuIiwgYiJcbiIpLnJlcGxhY2UoYiJcciIsIGIiXG4iKQorICAgICAgICBmb3IgbmV3bGluZSwgZXhwZWN0ZWQgaW4gWworICAgICAgICAgICAgKE5vbmUsIG5vcm1hbGl6ZWQuZGVjb2RlKCJhc2NpaSIpLnNwbGl0bGluZXMoVHJ1ZSkpLAorICAgICAgICAgICAgKCIiLCB0ZXN0ZGF0YS5kZWNvZGUoImFzY2lpIikuc3BsaXRsaW5lcyhUcnVlKSksCisgICAgICAgICAgICAoIlxuIiwgWyJBQUFcbiIsICJCQlx4MDBCXG4iLCAiQ0NDXHJERERcckVFRVxyXG4iLCAiRkZGXHJcbiIsICJHR0ciXSksCisgICAgICAgICAgICAoIlxyXG4iLCBbIkFBQVxuQkJceDAwQlxuQ0NDXHJERERcckVFRVxyXG4iLCAiRkZGXHJcbiIsICJHR0ciXSksCisgICAgICAgICAgICAoIlxyIiwgIFsiQUFBXG5CQlx4MDBCXG5DQ0NcciIsICJERERcciIsICJFRUVcciIsICJcbkZGRlxyIiwgIlxuR0dHIl0pLAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIGJ1ZiA9IHNlbGYuQnl0ZXNJTyh0ZXN0ZGF0YSkKKyAgICAgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihidWYsIGVuY29kaW5nPSJhc2NpaSIsIG5ld2xpbmU9bmV3bGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHh0LnJlYWRsaW5lcygpLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHR4dC5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4dC5yZWFkKCksICIiLmpvaW4oZXhwZWN0ZWQpKQorCisgICAgZGVmIHRlc3RfbmV3bGluZXNfb3V0cHV0KHNlbGYpOgorICAgICAgICB0ZXN0ZGljdCA9IHsKKyAgICAgICAgICAgICIiOiBiIkFBQVxuQkJCXG5DQ0NcblhccllcclxuWiIsCisgICAgICAgICAgICAiXG4iOiBiIkFBQVxuQkJCXG5DQ0NcblhccllcclxuWiIsCisgICAgICAgICAgICAiXHIiOiBiIkFBQVxyQkJCXHJDQ0NcclhccllcclxyWiIsCisgICAgICAgICAgICAiXHJcbiI6IGIiQUFBXHJcbkJCQlxyXG5DQ0NcclxuWFxyWVxyXHJcbloiLAorICAgICAgICAgICAgfQorICAgICAgICB0ZXN0cyA9IFsoTm9uZSwgdGVzdGRpY3Rbb3MubGluZXNlcF0pXSArIHNvcnRlZCh0ZXN0ZGljdC5pdGVtcygpKQorICAgICAgICBmb3IgbmV3bGluZSwgZXhwZWN0ZWQgaW4gdGVzdHM6CisgICAgICAgICAgICBidWYgPSBzZWxmLkJ5dGVzSU8oKQorICAgICAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGJ1ZiwgZW5jb2Rpbmc9ImFzY2lpIiwgbmV3bGluZT1uZXdsaW5lKQorICAgICAgICAgICAgdHh0LndyaXRlKCJBQUFcbkIiKQorICAgICAgICAgICAgdHh0LndyaXRlKCJCQlxuQ0NDXG4iKQorICAgICAgICAgICAgdHh0LndyaXRlKCJYXHJZXHJcbloiKQorICAgICAgICAgICAgdHh0LmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLmNsb3NlZCwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi5nZXR2YWx1ZSgpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2Rlc3RydWN0b3Ioc2VsZik6CisgICAgICAgIGwgPSBbXQorICAgICAgICBiYXNlID0gc2VsZi5CeXRlc0lPCisgICAgICAgIGNsYXNzIE15Qnl0ZXNJTyhiYXNlKToKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBsLmFwcGVuZChzZWxmLmdldHZhbHVlKCkpCisgICAgICAgICAgICAgICAgYmFzZS5jbG9zZShzZWxmKQorICAgICAgICBiID0gTXlCeXRlc0lPKCkKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0LndyaXRlKCJhYmMiKQorICAgICAgICBkZWwgdAorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiImFiYyJdLCBsKQorCisgICAgZGVmIHRlc3Rfb3ZlcnJpZGVfZGVzdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgcmVjb3JkID0gW10KKyAgICAgICAgY2xhc3MgTXlUZXh0SU8oc2VsZi5UZXh0SU9XcmFwcGVyKToKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoMSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGYgPSBzdXBlcihNeVRleHRJTywgc2VsZikuX19kZWxfXworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoMikKKyAgICAgICAgICAgICAgICBzdXBlcihNeVRleHRJTywgc2VsZikuY2xvc2UoKQorICAgICAgICAgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoMykKKyAgICAgICAgICAgICAgICBzdXBlcihNeVRleHRJTywgc2VsZikuZmx1c2goKQorICAgICAgICBiID0gc2VsZi5CeXRlc0lPKCkKKyAgICAgICAgdCA9IE15VGV4dElPKGIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIGRlbCB0CisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjb3JkLCBbMSwgMiwgM10pCisKKyAgICBkZWYgdGVzdF9lcnJvcl90aHJvdWdoX2Rlc3RydWN0b3Ioc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBleGNlcHRpb24gc3RhdGUgaXMgbm90IG1vZGlmaWVkIGJ5IGEgZGVzdHJ1Y3RvciwKKyAgICAgICAgIyBldmVuIGlmIGNsb3NlKCkgZmFpbHMuCisgICAgICAgIHJhd2lvID0gc2VsZi5DbG9zZUZhaWx1cmVJTygpCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBzZWxmLlRleHRJT1dyYXBwZXIocmF3aW8pLnh5enp5CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZikKKyAgICAgICAgcyA9IHMuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIGlmIHM6CisgICAgICAgICAgICAjIFRoZSBkZXN0cnVjdG9yICptYXkqIGhhdmUgcHJpbnRlZCBhbiB1bnJhaXNhYmxlIGVycm9yLCBjaGVjayBpdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocy5zcGxpdGxpbmVzKCkpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgiRXhjZXB0aW9uIElPRXJyb3I6ICIpLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZW5kc3dpdGgoIiBpZ25vcmVkIiksIHMpCisKKyAgICAjIFN5c3RlbWF0aWMgdGVzdHMgb2YgdGhlIHRleHQgSS9PIEFQSQorCisgICAgZGVmIHRlc3RfYmFzaWNfaW8oc2VsZik6CisgICAgICAgIGZvciBjaHVua3NpemUgaW4gKDEsIDIsIDMsIDQsIDUsIDE1LCAxNiwgMTcsIDMxLCAzMiwgMzMsIDYzLCA2NCwgNjUpOgorICAgICAgICAgICAgZm9yIGVuYyBpbiAiYXNjaWkiLCAibGF0aW4xIiwgInV0ZjgiIDojICwgInV0Zi0xNi1iZSIsICJ1dGYtMTYtbGUiOgorICAgICAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3KyIsIGVuY29kaW5nPWVuYykKKyAgICAgICAgICAgICAgICBmLl9DSFVOS19TSVpFID0gY2h1bmtzaXplCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKCJhYmMiKSwgMykKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicisiLCBlbmNvZGluZz1lbmMpCisgICAgICAgICAgICAgICAgZi5fQ0hVTktfU0laRSA9IGNodW5rc2l6ZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgImFiYyIpCisgICAgICAgICAgICAgICAgY29va2llID0gZi50ZWxsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2VlaygwKSwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChOb25lKSwgImFiYyIpCisgICAgICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMiksICJhYiIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMSksICJjIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxKSwgIiIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgIiIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgY29va2llKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKDApLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKDAsIDIpLCBjb29raWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKCJkZWYiKSwgMykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2Vlayhjb29raWUpLCBjb29raWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgImRlZiIpCisgICAgICAgICAgICAgICAgaWYgZW5jLnN0YXJ0c3dpdGgoInV0ZiIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm11bHRpX2xpbmVfdGVzdChmLCBlbmMpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgbXVsdGlfbGluZV90ZXN0KHNlbGYsIGYsIGVuYyk6CisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBmLnRydW5jYXRlKCkKKyAgICAgICAgc2FtcGxlID0gInNceGZmXHUwZmZmXHVmZmZmIgorICAgICAgICB3bGluZXMgPSBbXQorICAgICAgICBmb3Igc2l6ZSBpbiAoMCwgMSwgMiwgMywgNCwgNSwgMzAsIDMxLCAzMiwgMzMsIDYyLCA2MywgNjQsIDY1LCAxMDAwKToKKyAgICAgICAgICAgIGNoYXJzID0gW10KKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNpemUpOgorICAgICAgICAgICAgICAgIGNoYXJzLmFwcGVuZChzYW1wbGVbaSAlIGxlbihzYW1wbGUpXSkKKyAgICAgICAgICAgIGxpbmUgPSAiIi5qb2luKGNoYXJzKSArICJcbiIKKyAgICAgICAgICAgIHdsaW5lcy5hcHBlbmQoKGYudGVsbCgpLCBsaW5lKSkKKyAgICAgICAgICAgIGYud3JpdGUobGluZSkKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIHJsaW5lcyA9IFtdCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBwb3MgPSBmLnRlbGwoKQorICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHJsaW5lcy5hcHBlbmQoKHBvcywgbGluZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmxpbmVzLCB3bGluZXMpCisKKyAgICBkZWYgdGVzdF90ZWxsaW5nKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAidysiLCBlbmNvZGluZz0idXRmOCIpCisgICAgICAgIHAwID0gZi50ZWxsKCkKKyAgICAgICAgZi53cml0ZSgiXHhmZlxuIikKKyAgICAgICAgcDEgPSBmLnRlbGwoKQorICAgICAgICBmLndyaXRlKCJceGZmXG4iKQorICAgICAgICBwMiA9IGYudGVsbCgpCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksICJceGZmXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksICJceGZmXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwMikKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsICJceGZmXG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZi50ZWxsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwMikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zZWVraW5nKHNlbGYpOgorICAgICAgICBjaHVua19zaXplID0gX2RlZmF1bHRfY2h1bmtfc2l6ZSgpCisgICAgICAgIHByZWZpeF9zaXplID0gY2h1bmtfc2l6ZSAtIDIKKyAgICAgICAgdV9wcmVmaXggPSAiYSIgKiBwcmVmaXhfc2l6ZQorICAgICAgICBwcmVmaXggPSBieXRlcyh1X3ByZWZpeC5lbmNvZGUoInV0Zi04IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHVfcHJlZml4KSwgbGVuKHByZWZpeCkpCisgICAgICAgIHVfc3VmZml4ID0gIlx1ODg4OFxuIgorICAgICAgICBzdWZmaXggPSBieXRlcyh1X3N1ZmZpeC5lbmNvZGUoInV0Zi04IikpCisgICAgICAgIGxpbmUgPSBwcmVmaXggKyBzdWZmaXgKKyAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgZi53cml0ZShsaW5lKjIpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiciIsIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgICAgIHMgPSBmLnJlYWQocHJlZml4X3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgcHJlZml4LmRlY29kZSgiYXNjaWkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgcHJlZml4X3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgpLCB1X3N1ZmZpeCkKKworICAgIGRlZiB0ZXN0X3NlZWtpbmdfdG9vKHNlbGYpOgorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBzcGVjaWZpYyBidWcKKyAgICAgICAgZGF0YSA9IGInXHhlMFx4YmZceGJmXG4nCisgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyIiwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAgICAgZi5fQ0hVTktfU0laRSAgIyBKdXN0IHRlc3QgdGhhdCBpdCBleGlzdHMKKyAgICAgICAgZi5fQ0hVTktfU0laRSA9IDIKKyAgICAgICAgZi5yZWFkbGluZSgpCisgICAgICAgIGYudGVsbCgpCisKKyAgICBkZWYgdGVzdF9zZWVrX2FuZF90ZWxsKHNlbGYpOgorICAgICAgICAjVGVzdCBzZWVrL3RlbGwgdXNpbmcgdGhlIFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyLgorICAgICAgICAjIE1ha2UgdGVzdCBmYXN0ZXIgYnkgZG9pbmcgc21hbGxlciBzZWVrcworICAgICAgICBDSFVOS19TSVpFID0gMTI4CisKKyAgICAgICAgZGVmIHRlc3Rfc2Vla19hbmRfdGVsbF93aXRoX2RhdGEoZGF0YSwgbWluX3Bvcz0wKToKKyAgICAgICAgICAgICIiIlRlbGwvc2VlayB0byB2YXJpb3VzIHBvaW50cyB3aXRoaW4gYSBkYXRhIHN0cmVhbSBhbmQgZW5zdXJlCisgICAgICAgICAgICB0aGF0IHRoZSBkZWNvZGVkIGRhdGEgcmV0dXJuZWQgYnkgcmVhZCgpIGlzIGNvbnNpc3RlbnQuIiIiCisgICAgICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKQorICAgICAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCBlbmNvZGluZz0ndGVzdF9kZWNvZGVyJykKKyAgICAgICAgICAgIGYuX0NIVU5LX1NJWkUgPSBDSFVOS19TSVpFCisgICAgICAgICAgICBkZWNvZGVkID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShtaW5fcG9zLCBsZW4oZGVjb2RlZCkgKyAxKTogIyBzZWVrIHBvc2l0aW9ucworICAgICAgICAgICAgICAgIGZvciBqIGluIFsxLCA1LCBsZW4oZGVjb2RlZCkgLSBpXTogIyByZWFkIGxlbmd0aHMKKyAgICAgICAgICAgICAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgZW5jb2Rpbmc9J3Rlc3RfZGVjb2RlcicpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKGkpLCBkZWNvZGVkWzppXSkKKyAgICAgICAgICAgICAgICAgICAgY29va2llID0gZi50ZWxsKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoaiksIGRlY29kZWRbaTppICsgal0pCisgICAgICAgICAgICAgICAgICAgIGYuc2Vlayhjb29raWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRlY29kZWRbaTpdKQorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAjIEVuYWJsZSB0aGUgdGVzdCBkZWNvZGVyLgorICAgICAgICBTdGF0ZWZ1bEluY3JlbWVudGFsRGVjb2Rlci5jb2RlY0VuYWJsZWQgPSAxCisKKyAgICAgICAgIyBSdW4gdGhlIHRlc3RzLgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFRyeSBlYWNoIHRlc3QgY2FzZS4KKyAgICAgICAgICAgIGZvciBpbnB1dCwgXywgXyBpbiBTdGF0ZWZ1bEluY3JlbWVudGFsRGVjb2RlclRlc3QudGVzdF9jYXNlczoKKyAgICAgICAgICAgICAgICB0ZXN0X3NlZWtfYW5kX3RlbGxfd2l0aF9kYXRhKGlucHV0KQorCisgICAgICAgICAgICAjIFBvc2l0aW9uIGVhY2ggdGVzdCBjYXNlIHNvIHRoYXQgaXQgY3Jvc3NlcyBhIGNodW5rIGJvdW5kYXJ5LgorICAgICAgICAgICAgZm9yIGlucHV0LCBfLCBfIGluIFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyVGVzdC50ZXN0X2Nhc2VzOgorICAgICAgICAgICAgICAgIG9mZnNldCA9IENIVU5LX1NJWkUgLSBsZW4oaW5wdXQpLy8yCisgICAgICAgICAgICAgICAgcHJlZml4ID0gYicuJypvZmZzZXQKKyAgICAgICAgICAgICAgICAjIERvbid0IGJvdGhlciBzZWVraW5nIGludG8gdGhlIHByZWZpeCAodGFrZXMgdG9vIGxvbmcpLgorICAgICAgICAgICAgICAgIG1pbl9wb3MgPSBvZmZzZXQqMgorICAgICAgICAgICAgICAgIHRlc3Rfc2Vla19hbmRfdGVsbF93aXRoX2RhdGEocHJlZml4ICsgaW5wdXQsIG1pbl9wb3MpCisKKyAgICAgICAgIyBFbnN1cmUgb3VyIHRlc3QgZGVjb2RlciB3b24ndCBpbnRlcmZlcmUgd2l0aCBzdWJzZXF1ZW50IHRlc3RzLgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgU3RhdGVmdWxJbmNyZW1lbnRhbERlY29kZXIuY29kZWNFbmFibGVkID0gMAorCisgICAgZGVmIHRlc3RfZW5jb2RlZF93cml0ZXMoc2VsZik6CisgICAgICAgIGRhdGEgPSAiMTIzNDU2Nzg5MCIKKyAgICAgICAgdGVzdHMgPSAoInV0Zi0xNiIsCisgICAgICAgICAgICAgICAgICJ1dGYtMTYtbGUiLAorICAgICAgICAgICAgICAgICAidXRmLTE2LWJlIiwKKyAgICAgICAgICAgICAgICAgInV0Zi0zMiIsCisgICAgICAgICAgICAgICAgICJ1dGYtMzItbGUiLAorICAgICAgICAgICAgICAgICAidXRmLTMyLWJlIikKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIHRlc3RzOgorICAgICAgICAgICAgYnVmID0gc2VsZi5CeXRlc0lPKCkKKyAgICAgICAgICAgIGYgPSBzZWxmLlRleHRJT1dyYXBwZXIoYnVmLCBlbmNvZGluZz1lbmNvZGluZykKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlIEJPTSBpcyB3cml0dGVuIG9ubHkgb25jZSAoc2VlIGlzc3VlMTc1MykuCisgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGEgKiAyKQorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBkYXRhICogMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLmdldHZhbHVlKCksIChkYXRhICogMikuZW5jb2RlKGVuY29kaW5nKSkKKworICAgIGRlZiB0ZXN0X3VucmVhZGFibGUoc2VsZik6CisgICAgICAgIGNsYXNzIFVuUmVhZGFibGUoc2VsZi5CeXRlc0lPKToKKyAgICAgICAgICAgIGRlZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKFVuUmVhZGFibGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdHh0LnJlYWQpCisKKyAgICBkZWYgdGVzdF9yZWFkX29uZV9ieV9vbmUoc2VsZik6CisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oYiJBQVxyXG5CQiIpKQorICAgICAgICByZWFkcyA9ICIiCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBjID0gdHh0LnJlYWQoMSkKKyAgICAgICAgICAgIGlmIG5vdCBjOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZWFkcyArPSBjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZHMsICJBQVxuQkIiKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKGIiQUFcbkJCXG5DQyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4dC5yZWFkbGluZXMoKSwgWyJBQVxuIiwgIkJCXG4iLCAiQ0MiXSkKKyAgICAgICAgdHh0LnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eHQucmVhZGxpbmVzKE5vbmUpLCBbIkFBXG4iLCAiQkJcbiIsICJDQyJdKQorICAgICAgICB0eHQuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4dC5yZWFkbGluZXMoNSksIFsiQUFcbiIsICJCQlxuIl0pCisKKyAgICAjIHJlYWQgaW4gYW1vdW50cyBlcXVhbCB0byBUZXh0SU9XcmFwcGVyLl9DSFVOS19TSVpFIHdoaWNoIGlzIDEyOC4KKyAgICBkZWYgdGVzdF9yZWFkX2J5X2NodW5rKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSAiXHJcbiIgc3RyYWRkbGVzIDEyOCBjaGFyIGJvdW5kYXJ5LgorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKGIiQSIgKiAxMjcgKyBiIlxyXG5CIikpCisgICAgICAgIHJlYWRzID0gIiIKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGMgPSB0eHQucmVhZCgxMjgpCisgICAgICAgICAgICBpZiBub3QgYzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmVhZHMgKz0gYworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRzLCAiQSIqMTI3KyJcbkIiKQorCisgICAgZGVmIHRlc3Rfd3JpdGVsaW5lcyhzZWxmKToKKyAgICAgICAgbCA9IFsnYWInLCAnY2QnLCAnZWYnXQorICAgICAgICBidWYgPSBzZWxmLkJ5dGVzSU8oKQorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYnVmKQorICAgICAgICB0eHQud3JpdGVsaW5lcyhsKQorICAgICAgICB0eHQuZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi5nZXR2YWx1ZSgpLCBiJ2FiY2RlZicpCisKKyAgICBkZWYgdGVzdF93cml0ZWxpbmVzX3VzZXJsaXN0KHNlbGYpOgorICAgICAgICBsID0gVXNlckxpc3QoWydhYicsICdjZCcsICdlZiddKQorICAgICAgICBidWYgPSBzZWxmLkJ5dGVzSU8oKQorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYnVmKQorICAgICAgICB0eHQud3JpdGVsaW5lcyhsKQorICAgICAgICB0eHQuZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi5nZXR2YWx1ZSgpLCBiJ2FiY2RlZicpCisKKyAgICBkZWYgdGVzdF93cml0ZWxpbmVzX2Vycm9yKHNlbGYpOgorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHh0LndyaXRlbGluZXMsIFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eHQud3JpdGVsaW5lcywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eHQud3JpdGVsaW5lcywgYidhYmMnKQorCisgICAgZGVmIHRlc3RfaXNzdWUxMzk1XzEoc2VsZik6CisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCisKKyAgICAgICAgIyByZWFkIG9uZSBjaGFyIGF0IGEgdGltZQorICAgICAgICByZWFkcyA9ICIiCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBjID0gdHh0LnJlYWQoMSkKKyAgICAgICAgICAgIGlmIG5vdCBjOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZWFkcyArPSBjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZHMsIHNlbGYubm9ybWFsaXplZCkKKworICAgIGRlZiB0ZXN0X2lzc3VlMTM5NV8yKHNlbGYpOgorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0eHQuX0NIVU5LX1NJWkUgPSA0CisKKyAgICAgICAgcmVhZHMgPSAiIgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYyA9IHR4dC5yZWFkKDQpCisgICAgICAgICAgICBpZiBub3QgYzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmVhZHMgKz0gYworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRzLCBzZWxmLm5vcm1hbGl6ZWQpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTEzOTVfMyhzZWxmKToKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgdHh0Ll9DSFVOS19TSVpFID0gNAorCisgICAgICAgIHJlYWRzID0gdHh0LnJlYWQoNCkKKyAgICAgICAgcmVhZHMgKz0gdHh0LnJlYWQoNCkKKyAgICAgICAgcmVhZHMgKz0gdHh0LnJlYWRsaW5lKCkKKyAgICAgICAgcmVhZHMgKz0gdHh0LnJlYWRsaW5lKCkKKyAgICAgICAgcmVhZHMgKz0gdHh0LnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkcywgc2VsZi5ub3JtYWxpemVkKQorCisgICAgZGVmIHRlc3RfaXNzdWUxMzk1XzQoc2VsZik6CisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHR4dC5fQ0hVTktfU0laRSA9IDQKKworICAgICAgICByZWFkcyA9IHR4dC5yZWFkKDQpCisgICAgICAgIHJlYWRzICs9IHR4dC5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkcywgc2VsZi5ub3JtYWxpemVkKQorCisgICAgZGVmIHRlc3RfaXNzdWUxMzk1XzUoc2VsZik6CisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHR4dC5fQ0hVTktfU0laRSA9IDQKKworICAgICAgICByZWFkcyA9IHR4dC5yZWFkKDQpCisgICAgICAgIHBvcyA9IHR4dC50ZWxsKCkKKyAgICAgICAgdHh0LnNlZWsoMCkKKyAgICAgICAgdHh0LnNlZWsocG9zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4dC5yZWFkKDQpLCAiQkJCXG4iKQorCisgICAgZGVmIHRlc3RfaXNzdWUyMjgyKHNlbGYpOgorICAgICAgICBidWZmZXIgPSBzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSkKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGJ1ZmZlciwgZW5jb2Rpbmc9ImFzY2lpIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZmZlci5zZWVrYWJsZSgpLCB0eHQuc2Vla2FibGUoKSkKKworICAgIGRlZiB0ZXN0X2FwcGVuZF9ib20oc2VsZik6CisgICAgICAgICMgVGhlIEJPTSBpcyBub3Qgd3JpdHRlbiBhZ2FpbiB3aGVuIGFwcGVuZGluZyB0byBhIG5vbi1lbXB0eSBmaWxlCisgICAgICAgIGZpbGVuYW1lID0gc3VwcG9ydC5URVNURk4KKyAgICAgICAgZm9yIGNoYXJzZXQgaW4gKCd1dGYtOC1zaWcnLCAndXRmLTE2JywgJ3V0Zi0zMicpOgorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oZmlsZW5hbWUsICd3JywgZW5jb2Rpbmc9Y2hhcnNldCkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdhYWEnKQorICAgICAgICAgICAgICAgIHBvcyA9IGYudGVsbCgpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnYWFhJy5lbmNvZGUoY2hhcnNldCkpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKGZpbGVuYW1lLCAnYScsIGVuY29kaW5nPWNoYXJzZXQpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgneHh4JykKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKGZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdhYWF4eHgnLmVuY29kZShjaGFyc2V0KSkKKworICAgIGRlZiB0ZXN0X3NlZWtfYm9tKHNlbGYpOgorICAgICAgICAjIFNhbWUgdGVzdCwgYnV0IHdoZW4gc2Vla2luZyBtYW51YWxseQorICAgICAgICBmaWxlbmFtZSA9IHN1cHBvcnQuVEVTVEZOCisgICAgICAgIGZvciBjaGFyc2V0IGluICgndXRmLTgtc2lnJywgJ3V0Zi0xNicsICd1dGYtMzInKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKGZpbGVuYW1lLCAndycsIGVuY29kaW5nPWNoYXJzZXQpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnYWFhJykKKyAgICAgICAgICAgICAgICBwb3MgPSBmLnRlbGwoKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oZmlsZW5hbWUsICdyKycsIGVuY29kaW5nPWNoYXJzZXQpIGFzIGY6CisgICAgICAgICAgICAgICAgZi5zZWVrKHBvcykKKyAgICAgICAgICAgICAgICBmLndyaXRlKCd6enonKQorICAgICAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJ2JiYicpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnYmJienp6Jy5lbmNvZGUoY2hhcnNldCkpCisKKyAgICBkZWYgdGVzdF9lcnJvcnNfcHJvcGVydHkoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAidyIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZXJyb3JzLCAic3RyaWN0IikKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3IiwgZXJyb3JzPSJyZXBsYWNlIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5lcnJvcnMsICJyZXBsYWNlIikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RfdGhyZWFkc193cml0ZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZTY3NTA6IGNvbmN1cnJlbnQgd3JpdGVzIGNvdWxkIGR1cGxpY2F0ZSBkYXRhCisgICAgICAgIGV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3IiwgYnVmZmVyaW5nPTEpIGFzIGY6CisgICAgICAgICAgICBkZWYgcnVuKG4pOgorICAgICAgICAgICAgICAgIHRleHQgPSAiVGhyZWFkJTAzZFxuIiAlIG4KKyAgICAgICAgICAgICAgICBldmVudC53YWl0KCkKKyAgICAgICAgICAgICAgICBmLndyaXRlKHRleHQpCisgICAgICAgICAgICB0aHJlYWRzID0gW3RocmVhZGluZy5UaHJlYWQodGFyZ2V0PWxhbWJkYSBuPXg6IHJ1bihuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoMjApXQorICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMikKKyAgICAgICAgICAgIGV2ZW50LnNldCgpCisgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOKSBhcyBmOgorICAgICAgICAgICAgY29udGVudCA9IGYucmVhZCgpCisgICAgICAgICAgICBmb3IgbiBpbiByYW5nZSgyMCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50LmNvdW50KCJUaHJlYWQlMDNkXG4iICUgbiksIDEpCisKKyAgICBkZWYgdGVzdF9mbHVzaF9lcnJvcl9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCisgICAgICAgIHR4dC5mbHVzaCA9IGJhZF9mbHVzaAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB0eHQuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR4dC5jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9tdWx0aV9jbG9zZShzZWxmKToKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgdHh0LmNsb3NlKCkKKyAgICAgICAgdHh0LmNsb3NlKCkKKyAgICAgICAgdHh0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHh0LmZsdXNoKQorCisgICAgZGVmIHRlc3RfcmVhZG9ubHlfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgYnVmID0gc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IpKToKKyAgICAgICAgICAgIHR4dC5idWZmZXIgPSBidWYKKworICAgIGRlZiB0ZXN0X3JlYWRfbm9uYnl0ZXMoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE3MTA2CisgICAgICAgICMgQ3Jhc2ggd2hlbiB1bmRlcmx5aW5nIHJlYWQoKSByZXR1cm5zIG5vbi1ieXRlcworICAgICAgICBjbGFzcyBOb25ieXRlc1N0cmVhbShzZWxmLlN0cmluZ0lPKToKKyAgICAgICAgICAgIHJlYWQxID0gc2VsZi5TdHJpbmdJTy5yZWFkCisgICAgICAgIGNsYXNzIE5vbmJ5dGVzU3RyZWFtKHNlbGYuU3RyaW5nSU8pOgorICAgICAgICAgICAgcmVhZDEgPSBzZWxmLlN0cmluZ0lPLnJlYWQKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihOb25ieXRlc1N0cmVhbSgnYScpKQorICAgICAgICB3aXRoIHNlbGYubWF5YmVSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHQucmVhZCgxKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKE5vbmJ5dGVzU3RyZWFtKCdhJykpCisgICAgICAgIHdpdGggc2VsZi5tYXliZVJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdC5yZWFkbGluZSgpCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoTm9uYnl0ZXNTdHJlYW0oJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlYWQoKSwgdSdhJykKKworICAgIGRlZiB0ZXN0X2lsbGVnYWxfZGVjb2RlcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTcxMDYKKyAgICAgICAgIyBDcmFzaCB3aGVuIGRlY29kZXIgcmV0dXJucyBub24tc3RyaW5nCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKGInYWFhYWFhJyksIG5ld2xpbmU9J1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0ncXVvcHJpX2NvZGVjJykKKyAgICAgICAgd2l0aCBzZWxmLm1heWJlUmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB0LnJlYWQoMSkKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oYidhYWFhYWEnKSwgbmV3bGluZT0nXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSdxdW9wcmlfY29kZWMnKQorICAgICAgICB3aXRoIHNlbGYubWF5YmVSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHQucmVhZGxpbmUoKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhiJ2FhYWFhYScpLCBuZXdsaW5lPSdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9J3F1b3ByaV9jb2RlYycpCisgICAgICAgIHdpdGggc2VsZi5tYXliZVJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdC5yZWFkKCkKKworCitjbGFzcyBDVGV4dElPV3JhcHBlclRlc3QoVGV4dElPV3JhcHBlclRlc3QpOgorCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CisgICAgICAgIHIgPSBzZWxmLkJ5dGVzSU8oYiJceGMzXHhhOVxuXG4iKQorICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFJlYWRlcihyLCAxMDAwKQorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdC5fX2luaXRfXywgYiwgbmV3bGluZT00MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5yZWFkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0Ll9faW5pdF9fLCBiLCBuZXdsaW5lPSd4eXp6eScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQucmVhZCkKKworICAgIGRlZiB0ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbihzZWxmKToKKyAgICAgICAgIyBDIFRleHRJT1dyYXBwZXIgb2JqZWN0cyBhcmUgY29sbGVjdGVkLCBhbmQgY29sbGVjdGluZyB0aGVtIGZsdXNoZXMKKyAgICAgICAgIyBhbGwgZGF0YSB0byBkaXNrLgorICAgICAgICAjIFRoZSBQeXRob24gdmVyc2lvbiBoYXMgX19kZWxfXywgc28gaXQgZW5kcyBpbiBnYy5nYXJiYWdlIGluc3RlYWQuCisgICAgICAgIHJhd2lvID0gaW8uRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFdyaXRlcihyYXdpbykKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0LndyaXRlKCI0NTZkZWYiKQorICAgICAgICB0LnggPSB0CisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYodCkKKyAgICAgICAgZGVsIHQKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiI0NTZkZWYiKQorCisgICAgZGVmIHRlc3RfcndwYWlyX2NsZWFyZWRfYmVmb3JlX3RleHRpbyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxMzA3MDogVGV4dElPV3JhcHBlcidzIGZpbmFsaXphdGlvbiB3b3VsZCBjcmFzaCB3aGVuIGNhbGxlZAorICAgICAgICAjIGFmdGVyIHRoZSByZWZlcmVuY2UgdG8gdGhlIHVuZGVybHlpbmcgQnVmZmVyZWRSV1BhaXIncyB3cml0ZXIgZ290CisgICAgICAgICMgY2xlYXJlZCBieSB0aGUgR0MuCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMDApOgorICAgICAgICAgICAgYjEgPSBzZWxmLkJ1ZmZlcmVkUldQYWlyKHNlbGYuTW9ja1Jhd0lPKCksIHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgICAgICB0MSA9IHNlbGYuVGV4dElPV3JhcHBlcihiMSwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgICAgIGIyID0gc2VsZi5CdWZmZXJlZFJXUGFpcihzZWxmLk1vY2tSYXdJTygpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICAgICAgdDIgPSBzZWxmLlRleHRJT1dyYXBwZXIoYjIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgICAgICAjIGNpcmN1bGFyIHJlZmVyZW5jZXMKKyAgICAgICAgICAgIHQxLmJ1ZGR5ID0gdDIKKyAgICAgICAgICAgIHQyLmJ1ZGR5ID0gdDEKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKworICAgIG1heWJlUmFpc2VzID0gdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0UmFpc2VzCisKKworY2xhc3MgUHlUZXh0SU9XcmFwcGVyVGVzdChUZXh0SU9XcmFwcGVyVGVzdCk6CisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgbWF5YmVSYWlzZXMoc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHlpZWxkCisKKworY2xhc3MgSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrX25ld2xpbmVfZGVjb2RpbmdfdXRmOChzZWxmLCBkZWNvZGVyKToKKyAgICAgICAgIyBVVEYtOCBzcGVjaWZpYyB0ZXN0cyBmb3IgYSBuZXdsaW5lIGRlY29kZXIKKyAgICAgICAgZGVmIF9jaGVja19kZWNvZGUoYiwgcywgKiprd2FyZ3MpOgorICAgICAgICAgICAgIyBXZSBleGVyY2lzZSBnZXRzdGF0ZSgpIC8gc2V0c3RhdGUoKSBhcyB3ZWxsIGFzIGRlY29kZSgpCisgICAgICAgICAgICBzdGF0ZSA9IGRlY29kZXIuZ2V0c3RhdGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZShiLCAqKmt3YXJncyksIHMpCisgICAgICAgICAgICBkZWNvZGVyLnNldHN0YXRlKHN0YXRlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZShiLCAqKmt3YXJncyksIHMpCisKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ1x4ZThceGEyXHg4OCcsICJcdTg4ODgiKQorCisgICAgICAgIF9jaGVja19kZWNvZGUoYidceGU4JywgIiIpCisgICAgICAgIF9jaGVja19kZWNvZGUoYidceGEyJywgIiIpCisgICAgICAgIF9jaGVja19kZWNvZGUoYidceDg4JywgIlx1ODg4OCIpCisKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ1x4ZTgnLCAiIikKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ1x4YTInLCAiIikKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ1x4ODgnLCAiXHU4ODg4IikKKworICAgICAgICBfY2hlY2tfZGVjb2RlKGInXHhlOCcsICIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGRlY29kZXIuZGVjb2RlLCBiJycsIGZpbmFsPVRydWUpCisKKyAgICAgICAgZGVjb2Rlci5yZXNldCgpCisgICAgICAgIF9jaGVja19kZWNvZGUoYidcbicsICJcbiIpCisgICAgICAgIF9jaGVja19kZWNvZGUoYidccicsICIiKQorICAgICAgICBfY2hlY2tfZGVjb2RlKGInJywgIlxuIiwgZmluYWw9VHJ1ZSkKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ1xyJywgIlxuIiwgZmluYWw9VHJ1ZSkKKworICAgICAgICBfY2hlY2tfZGVjb2RlKGInXHInLCAiIikKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ2EnLCAiXG5hIikKKworICAgICAgICBfY2hlY2tfZGVjb2RlKGInXHJcclxuJywgIlxuXG4iKQorICAgICAgICBfY2hlY2tfZGVjb2RlKGInXHInLCAiIikKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ1xyJywgIlxuIikKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ1xuYScsICJcbmEiKQorCisgICAgICAgIF9jaGVja19kZWNvZGUoYidceGU4XHhhMlx4ODhcclxuJywgIlx1ODg4OFxuIikKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ1x4ZThceGEyXHg4OCcsICJcdTg4ODgiKQorICAgICAgICBfY2hlY2tfZGVjb2RlKGInXG4nLCAiXG4iKQorICAgICAgICBfY2hlY2tfZGVjb2RlKGInXHhlOFx4YTJceDg4XHInLCAiXHU4ODg4IikKKyAgICAgICAgX2NoZWNrX2RlY29kZShiJ1xuJywgIlxuIikKKworICAgIGRlZiBjaGVja19uZXdsaW5lX2RlY29kaW5nKHNlbGYsIGRlY29kZXIsIGVuY29kaW5nKToKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgaWYgZW5jb2RpbmcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcihlbmNvZGluZykoKQorICAgICAgICAgICAgZGVmIF9kZWNvZGVfYnl0ZXdpc2Uocyk6CisgICAgICAgICAgICAgICAgIyBEZWNvZGUgb25lIGJ5dGUgYXQgYSB0aW1lCisgICAgICAgICAgICAgICAgZm9yIGIgaW4gZW5jb2Rlci5lbmNvZGUocyk6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVjb2Rlci5kZWNvZGUoYikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbmNvZGVyID0gTm9uZQorICAgICAgICAgICAgZGVmIF9kZWNvZGVfYnl0ZXdpc2Uocyk6CisgICAgICAgICAgICAgICAgIyBEZWNvZGUgb25lIGNoYXIgYXQgYSB0aW1lCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gczoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkZWNvZGVyLmRlY29kZShjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLm5ld2xpbmVzLCBOb25lKQorICAgICAgICBfZGVjb2RlX2J5dGV3aXNlKCJhYmNcblxyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLm5ld2xpbmVzLCAnXG4nKQorICAgICAgICBfZGVjb2RlX2J5dGV3aXNlKCJcbmFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5uZXdsaW5lcywgKCdcbicsICdcclxuJykpCisgICAgICAgIF9kZWNvZGVfYnl0ZXdpc2UoImFiY1xyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLm5ld2xpbmVzLCAoJ1xuJywgJ1xyXG4nKSkKKyAgICAgICAgX2RlY29kZV9ieXRld2lzZSgiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLm5ld2xpbmVzLCAoJ1xyJywgJ1xuJywgJ1xyXG4nKSkKKyAgICAgICAgX2RlY29kZV9ieXRld2lzZSgiYWJjXHIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiLmpvaW4ocmVzdWx0KSwgImFiY1xuXG5hYmNhYmNcbmFiY2FiYyIpCisgICAgICAgIGRlY29kZXIucmVzZXQoKQorICAgICAgICBpbnB1dCA9ICJhYmMiCisgICAgICAgIGlmIGVuY29kZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBlbmNvZGVyLnJlc2V0KCkKKyAgICAgICAgICAgIGlucHV0ID0gZW5jb2Rlci5lbmNvZGUoaW5wdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoaW5wdXQpLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLm5ld2xpbmVzLCBOb25lKQorCisgICAgZGVmIHRlc3RfbmV3bGluZV9kZWNvZGVyKHNlbGYpOgorICAgICAgICBlbmNvZGluZ3MgPSAoCisgICAgICAgICAgICAjIE5vbmUgbWVhbmluZyB0aGUgSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciB0YWtlcyB1bmljb2RlIGlucHV0CisgICAgICAgICAgICAjIHJhdGhlciB0aGFuIGJ5dGVzIGlucHV0CisgICAgICAgICAgICBOb25lLCAndXRmLTgnLCAnbGF0aW4tMScsCisgICAgICAgICAgICAndXRmLTE2JywgJ3V0Zi0xNi1sZScsICd1dGYtMTYtYmUnLAorICAgICAgICAgICAgJ3V0Zi0zMicsICd1dGYtMzItbGUnLCAndXRmLTMyLWJlJywKKyAgICAgICAgKQorICAgICAgICBmb3IgZW5jIGluIGVuY29kaW5nczoKKyAgICAgICAgICAgIGRlY29kZXIgPSBlbmMgYW5kIGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXIoZW5jKSgpCisgICAgICAgICAgICBkZWNvZGVyID0gc2VsZi5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKGRlY29kZXIsIHRyYW5zbGF0ZT1UcnVlKQorICAgICAgICAgICAgc2VsZi5jaGVja19uZXdsaW5lX2RlY29kaW5nKGRlY29kZXIsIGVuYykKKyAgICAgICAgZGVjb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXIoInV0Zi04IikoKQorICAgICAgICBkZWNvZGVyID0gc2VsZi5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKGRlY29kZXIsIHRyYW5zbGF0ZT1UcnVlKQorICAgICAgICBzZWxmLmNoZWNrX25ld2xpbmVfZGVjb2RpbmdfdXRmOChkZWNvZGVyKQorCisgICAgZGVmIHRlc3RfbmV3bGluZV9ieXRlcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA1NDMzOiBFeGNlc3NpdmUgb3B0aW1pemF0aW9uIGluIEluY3JlbWVudGFsTmV3bGluZURlY29kZXIKKyAgICAgICAgZGVmIF9jaGVjayhkZWMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWMubmV3bGluZXMsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlYy5kZWNvZGUoIlx1MEQwMCIpLCAiXHUwRDAwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjLm5ld2xpbmVzLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWMuZGVjb2RlKCJcdTBBMDAiKSwgIlx1MEEwMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlYy5uZXdsaW5lcywgTm9uZSkKKyAgICAgICAgZGVjID0gc2VsZi5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKE5vbmUsIHRyYW5zbGF0ZT1GYWxzZSkKKyAgICAgICAgX2NoZWNrKGRlYykKKyAgICAgICAgZGVjID0gc2VsZi5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKE5vbmUsIHRyYW5zbGF0ZT1UcnVlKQorICAgICAgICBfY2hlY2soZGVjKQorCitjbGFzcyBDSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlclRlc3QoSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlclRlc3QpOgorICAgIHBhc3MKKworY2xhc3MgUHlJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyVGVzdChJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyVGVzdCk6CisgICAgcGFzcworCisKKyMgWFhYIFRlc3RzIGZvciBvcGVuKCkKKworY2xhc3MgTWlzY0lPVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfX19hbGxfXyhzZWxmKToKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5pby5fX2FsbF9fOgorICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihzZWxmLmlvLCBuYW1lLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9iaiBpcyBub3QgTm9uZSwgbmFtZSkKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gIm9wZW4iOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmICJlcnJvciIgaW4gbmFtZS5sb3dlcigpIG9yIG5hbWUgPT0gIlVuc3VwcG9ydGVkT3BlcmF0aW9uIjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhvYmosIEV4Y2VwdGlvbiksIG5hbWUpCisgICAgICAgICAgICBlbGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoIlNFRUtfIik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Mob2JqLCBzZWxmLklPQmFzZSkpCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm1vZGUsICJ3YiIpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJVIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm5hbWUsICAgICAgICAgICAgc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIubmFtZSwgICAgIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYnVmZmVyLnJhdy5uYW1lLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm1vZGUsICAgICAgICAgICAgIlUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYnVmZmVyLm1vZGUsICAgICAicmIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYnVmZmVyLnJhdy5tb2RlLCAicmIiKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAidysiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubW9kZSwgICAgICAgICAgICAidysiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYnVmZmVyLm1vZGUsICAgICAicmIrIikgIyBEb2VzIGl0IHJlYWxseSBtYXR0ZXI/CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIucmF3Lm1vZGUsICJyYisiKQorCisgICAgICAgIGcgPSBzZWxmLm9wZW4oZi5maWxlbm8oKSwgIndiIiwgY2xvc2VmZD1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLm1vZGUsICAgICAid2IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcucmF3Lm1vZGUsICJ3YiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZy5uYW1lLCAgICAgZi5maWxlbm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLnJhdy5uYW1lLCBmLmZpbGVubygpKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZy5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9pb19hZnRlcl9jbG9zZShzZWxmKToKKyAgICAgICAgZm9yIGt3YXJncyBpbiBbCisgICAgICAgICAgICAgICAgeyJtb2RlIjogIncifSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAid2IifSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidyIsICJidWZmZXJpbmciOiAxfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidyIsICJidWZmZXJpbmciOiAyfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAid2IiLCAiYnVmZmVyaW5nIjogMH0sCisgICAgICAgICAgICAgICAgeyJtb2RlIjogInIifSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAicmIifSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAiciIsICJidWZmZXJpbmciOiAxfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAiciIsICJidWZmZXJpbmciOiAyfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAicmIiLCAiYnVmZmVyaW5nIjogMH0sCisgICAgICAgICAgICAgICAgeyJtb2RlIjogIncrIn0sCisgICAgICAgICAgICAgICAgeyJtb2RlIjogIncrYiJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJ3KyIsICJidWZmZXJpbmciOiAxfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidysiLCAiYnVmZmVyaW5nIjogMn0sCisgICAgICAgICAgICAgICAgeyJtb2RlIjogIncrYiIsICJidWZmZXJpbmciOiAwfSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAqKmt3YXJncykKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5mbHVzaCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYuZmlsZW5vKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5pc2F0dHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLl9faXRlcl9fKQorICAgICAgICAgICAgaWYgaGFzYXR0cihmLCAicGVlayIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucGVlaywgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoZiwgInJlYWQxIik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkMSwgMTAyNCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoZiwgInJlYWRhbGwiKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnJlYWRhbGwpCisgICAgICAgICAgICBpZiBoYXNhdHRyKGYsICJyZWFkaW50byIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZGludG8sIGJ5dGVhcnJheSgxMDI0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnJlYWRsaW5lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYuc2VlaywgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYudGVsbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYudHJ1bmNhdGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLndyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIiIGlmICJiIiBpbiBrd2FyZ3NbJ21vZGUnXSBlbHNlICIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi53cml0ZWxpbmVzLCBbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5leHQsIGYpCisKKyAgICBkZWYgdGVzdF9ibG9ja2luZ2lvZXJyb3Ioc2VsZik6CisgICAgICAgICMgVmFyaW91cyBCbG9ja2luZ0lPRXJyb3IgaXNzdWVzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5CbG9ja2luZ0lPRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5CbG9ja2luZ0lPRXJyb3IsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5CbG9ja2luZ0lPRXJyb3IsIDEsIDIsIDMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5CbG9ja2luZ0lPRXJyb3IsIDEsICIiLCBOb25lKQorICAgICAgICBiID0gc2VsZi5CbG9ja2luZ0lPRXJyb3IoMSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5jaGFyYWN0ZXJzX3dyaXR0ZW4sIDApCisgICAgICAgIGNsYXNzIEModW5pY29kZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGMgPSBDKCIiKQorICAgICAgICBiID0gc2VsZi5CbG9ja2luZ0lPRXJyb3IoMSwgYykKKyAgICAgICAgYy5iID0gYgorICAgICAgICBiLmMgPSBjCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoYykKKyAgICAgICAgZGVsIGMsIGIKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCisKKyAgICBkZWYgdGVzdF9hYmNzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIHZpc2libGUgYmFzZSBjbGFzc2VzIGFyZSBBQkNzLgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5JT0Jhc2UsIGFiYy5BQkNNZXRhKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5SYXdJT0Jhc2UsIGFiYy5BQkNNZXRhKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5CdWZmZXJlZElPQmFzZSwgYWJjLkFCQ01ldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLlRleHRJT0Jhc2UsIGFiYy5BQkNNZXRhKQorCisgICAgZGVmIF9jaGVja19hYmNfaW5oZXJpdGFuY2Uoc2VsZiwgYWJjbW9kdWxlKToKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5JT0Jhc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLlJhd0lPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuQnVmZmVyZWRJT0Jhc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLlRleHRJT0Jhc2UpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5JT0Jhc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLlJhd0lPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuQnVmZmVyZWRJT0Jhc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLlRleHRJT0Jhc2UpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAidyIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLklPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuUmF3SU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5CdWZmZXJlZElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuVGV4dElPQmFzZSkKKworICAgIGRlZiB0ZXN0X2FiY19pbmhlcml0YW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGltcGxlbWVudGF0aW9ucyBpbmhlcml0IGZyb20gdGhlaXIgcmVzcGVjdGl2ZSBBQkNzCisgICAgICAgIHNlbGYuX2NoZWNrX2FiY19pbmhlcml0YW5jZShzZWxmKQorCisgICAgZGVmIHRlc3RfYWJjX2luaGVyaXRhbmNlX29mZmljaWFsKHNlbGYpOgorICAgICAgICAjIFRlc3QgaW1wbGVtZW50YXRpb25zIGluaGVyaXQgZnJvbSB0aGUgb2ZmaWNpYWwgQUJDcyBvZiB0aGUKKyAgICAgICAgIyBiYXNlbGluZSAiaW8iIG1vZHVsZS4KKyAgICAgICAgc2VsZi5fY2hlY2tfYWJjX2luaGVyaXRhbmNlKGlvKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmNudGwsICdmY250bCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKKyAgICBkZWYgdGVzdF9ub25ibG9ja19waXBlX3dyaXRlX2JpZ2J1ZihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9ub25ibG9ja19waXBlX3dyaXRlKDE2KjEwMjQpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmY250bCwgJ2ZjbnRsIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X25vbmJsb2NrX3BpcGVfd3JpdGVfc21hbGxidWYoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfbm9uYmxvY2tfcGlwZV93cml0ZSgxMDI0KQorCisgICAgZGVmIF9zZXRfbm9uX2Jsb2NraW5nKHNlbGYsIGZkKToKKyAgICAgICAgZmxhZ3MgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmbGFncywgLTEpCisgICAgICAgIHJlcyA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbGFncyB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAwKQorCisgICAgZGVmIF90ZXN0X25vbmJsb2NrX3BpcGVfd3JpdGUoc2VsZiwgYnVmc2l6ZSk6CisgICAgICAgIHNlbnQgPSBbXQorICAgICAgICByZWNlaXZlZCA9IFtdCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5fc2V0X25vbl9ibG9ja2luZyhyKQorICAgICAgICBzZWxmLl9zZXRfbm9uX2Jsb2NraW5nKHcpCisKKyAgICAgICAgIyBUbyBleGVyY2lzZSBhbGwgY29kZSBwYXRocyBpbiB0aGUgQyBpbXBsZW1lbnRhdGlvbiB3ZSBuZWVkCisgICAgICAgICMgdG8gcGxheSB3aXRoIGJ1ZmZlciBzaXplcy4gIEZvciBpbnN0YW5jZSwgaWYgd2UgY2hvb3NlIGEKKyAgICAgICAgIyBidWZmZXIgc2l6ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gX1BJUEVfQlVGICg0MDk2IG9uIExpbnV4KQorICAgICAgICAjIHRoZW4gd2Ugd2lsbCBuZXZlciBnZXQgYSBwYXJ0aWFsIHdyaXRlIG9mIHRoZSBidWZmZXIuCisgICAgICAgIHJmID0gc2VsZi5vcGVuKHIsIG1vZGU9J3JiJywgY2xvc2VmZD1UcnVlLCBidWZmZXJpbmc9YnVmc2l6ZSkKKyAgICAgICAgd2YgPSBzZWxmLm9wZW4odywgbW9kZT0nd2InLCBjbG9zZWZkPVRydWUsIGJ1ZmZlcmluZz1idWZzaXplKQorCisgICAgICAgIHdpdGggcmYsIHdmOgorICAgICAgICAgICAgZm9yIE4gaW4gOTk5OSwgNzMsIDc1NzQ6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpID0gMAorICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gYnl0ZXMoW2kgJSAyNiArIDk3XSkgKiBOCisgICAgICAgICAgICAgICAgICAgICAgICBzZW50LmFwcGVuZChtc2cpCisgICAgICAgICAgICAgICAgICAgICAgICB3Zi53cml0ZShtc2cpCisgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDEKKworICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxmLkJsb2NraW5nSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgZXJybm8uRUFHQUlOKQorICAgICAgICAgICAgICAgICAgICBzZW50Wy0xXSA9IHNlbnRbLTFdWzplLmNoYXJhY3RlcnNfd3JpdHRlbl0KKyAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWQuYXBwZW5kKHJmLnJlYWQoKSkKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gYidCTE9DS0VEJworICAgICAgICAgICAgICAgICAgICB3Zi53cml0ZShtc2cpCisgICAgICAgICAgICAgICAgICAgIHNlbnQuYXBwZW5kKG1zZykKKworICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdmLmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBleGNlcHQgc2VsZi5CbG9ja2luZ0lPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVBR0FJTikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmNoYXJhY3RlcnNfd3JpdHRlbiwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWQuYXBwZW5kKHJmLnJlYWQoKSkKKworICAgICAgICAgICAgcmVjZWl2ZWQgKz0gaXRlcihyZi5yZWFkLCBOb25lKQorCisgICAgICAgIHNlbnQsIHJlY2VpdmVkID0gYicnLmpvaW4oc2VudCksIGInJy5qb2luKHJlY2VpdmVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VudCA9PSByZWNlaXZlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdmLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJmLmNsb3NlZCkKKworY2xhc3MgQ01pc2NJT1Rlc3QoTWlzY0lPVGVzdCk6CisgICAgaW8gPSBpbworCitjbGFzcyBQeU1pc2NJT1Rlc3QoTWlzY0lPVGVzdCk6CisgICAgaW8gPSBweWlvCisKKworQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICdudCcsICdQT1NJWCBzaWduYWxzIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFNpZ25hbHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vbGRhbHJtID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgc2VsZi5hbGFybV9pbnRlcnJ1cHQpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIHNlbGYub2xkYWxybSkKKworICAgIGRlZiBhbGFybV9pbnRlcnJ1cHQoc2VsZiwgc2lnLCBmcmFtZSk6CisgICAgICAgIDEgLy8gMAorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSBpbiAoJ2ZyZWVic2Q1JywgJ2ZyZWVic2Q2JywgJ2ZyZWVic2Q3JyksCisgICAgICAgICAgICAgICAgICAgICAnaXNzdWUgIzEyNDI5OiBza2lwIHRlc3Qgb24gRnJlZUJTRCA8PSA3JykKKyAgICBkZWYgY2hlY2tfaW50ZXJydXB0ZWRfd3JpdGUoc2VsZiwgaXRlbSwgYnl0ZXMsICoqZmRvcGVuX2t3YXJncyk6CisgICAgICAgICIiIkNoZWNrIHRoYXQgYSBwYXJ0aWFsIHdyaXRlLCB3aGVuIGl0IGdldHMgaW50ZXJydXB0ZWQsIHByb3Blcmx5CisgICAgICAgIGludm9rZXMgdGhlIHNpZ25hbCBoYW5kbGVyLCBhbmQgYnViYmxlcyB1cCB0aGUgZXhjZXB0aW9uIHJhaXNlZAorICAgICAgICBpbiB0aGUgbGF0dGVyLiIiIgorICAgICAgICByZWFkX3Jlc3VsdHMgPSBbXQorICAgICAgICBkZWYgX3JlYWQoKToKKyAgICAgICAgICAgIHMgPSBvcy5yZWFkKHIsIDEpCisgICAgICAgICAgICByZWFkX3Jlc3VsdHMuYXBwZW5kKHMpCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1fcmVhZCkKKyAgICAgICAgdC5kYWVtb24gPSBUcnVlCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2lvID0gc2VsZi5pby5vcGVuKHcsICoqZmRvcGVuX2t3YXJncykKKyAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICAjIEZpbGwgdGhlIHBpcGUgZW5vdWdoIHRoYXQgdGhlIHdyaXRlIHdpbGwgYmUgYmxvY2tpbmcuCisgICAgICAgICAgICAjIEl0IHdpbGwgYmUgaW50ZXJydXB0ZWQgYnkgdGhlIHRpbWVyIGFybWVkIGFib3ZlLiAgU2luY2UgdGhlCisgICAgICAgICAgICAjIG90aGVyIHRocmVhZCBoYXMgcmVhZCBvbmUgYnl0ZSwgdGhlIGxvdy1sZXZlbCB3cml0ZSB3aWxsCisgICAgICAgICAgICAjIHJldHVybiB3aXRoIGEgc3VjY2Vzc2Z1bCAocGFydGlhbCkgcmVzdWx0IHJhdGhlciB0aGFuIGFuIEVJTlRSLgorICAgICAgICAgICAgIyBUaGUgYnVmZmVyZWQgSU8gbGF5ZXIgbXVzdCBjaGVjayBmb3IgcGVuZGluZyBzaWduYWwKKyAgICAgICAgICAgICMgaGFuZGxlcnMsIHdoaWNoIGluIHRoaXMgY2FzZSB3aWxsIGludm9rZSBhbGFybV9pbnRlcnJ1cHQoKS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgd2lvLndyaXRlLCBpdGVtICogKHN1cHBvcnQuUElQRV9NQVhfU0laRSAvLyBsZW4oaXRlbSkgKyAxKSkKKyAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICAjIFdlIGdvdCBvbmUgYnl0ZSwgZ2V0IGFub3RoZXIgb25lIGFuZCBjaGVjayB0aGF0IGl0IGlzbid0IGEKKyAgICAgICAgICAgICMgcmVwZWF0IG9mIHRoZSBmaXJzdCBvbmUuCisgICAgICAgICAgICByZWFkX3Jlc3VsdHMuYXBwZW5kKG9zLnJlYWQociwgMSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRfcmVzdWx0cywgW2J5dGVzWzA6MV0sIGJ5dGVzWzE6Ml1dKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2xvc2UodykKKyAgICAgICAgICAgIG9zLmNsb3NlKHIpCisgICAgICAgICAgICAjIFRoaXMgaXMgZGVsaWJlcmF0ZS4gSWYgd2UgZGlkbid0IGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgICAgICMgYmVmb3JlIGNsb3Npbmcgd2lvLCB3aW8gd291bGQgdHJ5IHRvIGZsdXNoIGl0cyBpbnRlcm5hbAorICAgICAgICAgICAgIyBidWZmZXIsIGFuZCBibG9jayBhZ2Fpbi4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aW8uY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVCQURGOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHRlc3RfaW50ZXJydXB0ZWRfd3JpdGVfdW5idWZmZXJlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pbnRlcnJ1cHRlZF93cml0ZShiInh5IiwgYiJ4eSIsIG1vZGU9IndiIiwgYnVmZmVyaW5nPTApCisKKyAgICBkZWYgdGVzdF9pbnRlcnJ1cHRlZF93cml0ZV9idWZmZXJlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pbnRlcnJ1cHRlZF93cml0ZShiInh5IiwgYiJ4eSIsIG1vZGU9IndiIikKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdGVkX3dyaXRlX3RleHQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaW50ZXJydXB0ZWRfd3JpdGUoInh5IiwgYiJ4eSIsIG1vZGU9InciLCBlbmNvZGluZz0iYXNjaWkiKQorCisgICAgZGVmIGNoZWNrX3JlZW50cmFudF93cml0ZShzZWxmLCBkYXRhLCAqKmZkb3Blbl9rd2FyZ3MpOgorICAgICAgICBkZWYgb25fYWxhcm0oKmFyZ3MpOgorICAgICAgICAgICAgIyBXaWxsIGJlIGNhbGxlZCByZWVudHJhbnRseSBmcm9tIHRoZSBzYW1lIHRocmVhZAorICAgICAgICAgICAgd2lvLndyaXRlKGRhdGEpCisgICAgICAgICAgICAxLy8wCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIG9uX2FsYXJtKQorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHdpbyA9IHNlbGYuaW8ub3Blbih3LCAqKmZkb3Blbl9rd2FyZ3MpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICAgICAgIyBFaXRoZXIgdGhlIHJlZW50cmFudCBjYWxsIHRvIHdpby53cml0ZSgpIGZhaWxzIHdpdGggUnVudGltZUVycm9yLAorICAgICAgICAgICAgIyBvciB0aGUgc2lnbmFsIGhhbmRsZXIgcmFpc2VzIFplcm9EaXZpc2lvbkVycm9yLgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoWmVyb0RpdmlzaW9uRXJyb3IsIFJ1bnRpbWVFcnJvcikpIGFzIGNtOgorICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICAgICAgICAgICAgICB3aW8ud3JpdGUoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpby5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBidWZmZXIgZG9lc24ndCBmaWxsIHVwIGFuZCBibG9jayBmdXJ0aGVyIHdyaXRlcworICAgICAgICAgICAgICAgICAgICBvcy5yZWFkKHIsIGxlbihkYXRhKSAqIDEwMCkKKyAgICAgICAgICAgIGV4YyA9IGNtLmV4Y2VwdGlvbgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihleGMpLnN0YXJ0c3dpdGgoInJlZW50cmFudCBjYWxsIiksIHN0cihleGMpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgd2lvLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLmNsb3NlKHIpCisKKyAgICBkZWYgdGVzdF9yZWVudHJhbnRfd3JpdGVfYnVmZmVyZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVlbnRyYW50X3dyaXRlKGIieHkiLCBtb2RlPSJ3YiIpCisKKyAgICBkZWYgdGVzdF9yZWVudHJhbnRfd3JpdGVfdGV4dChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWVudHJhbnRfd3JpdGUoInh5IiwgbW9kZT0idyIsIGVuY29kaW5nPSJhc2NpaSIpCisKKyAgICBkZWYgY2hlY2tfaW50ZXJydXB0ZWRfcmVhZF9yZXRyeShzZWxmLCBkZWNvZGUsICoqZmRvcGVuX2t3YXJncyk6CisgICAgICAgICIiIkNoZWNrIHRoYXQgYSBidWZmZXJlZCByZWFkLCB3aGVuIGl0IGdldHMgaW50ZXJydXB0ZWQgKGVpdGhlcgorICAgICAgICByZXR1cm5pbmcgYSBwYXJ0aWFsIHJlc3VsdCBvciBFSU5UUiksIHByb3Blcmx5IGludm9rZXMgdGhlIHNpZ25hbAorICAgICAgICBoYW5kbGVyIGFuZCByZXRyaWVzIGlmIHRoZSBsYXR0ZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LiIiIgorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIGZkb3Blbl9rd2FyZ3NbImNsb3NlZmQiXSA9IEZhbHNlCisgICAgICAgIGRlZiBhbGFybV9oYW5kbGVyKHNpZywgZnJhbWUpOgorICAgICAgICAgICAgb3Mud3JpdGUodywgYiJiYXIiKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBhbGFybV9oYW5kbGVyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByaW8gPSBzZWxmLmlvLm9wZW4ociwgKipmZG9wZW5fa3dhcmdzKQorICAgICAgICAgICAgb3Mud3JpdGUodywgYiJmb28iKQorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICAjIEV4cGVjdGVkIGJlaGF2aW91cjoKKyAgICAgICAgICAgICMgLSBmaXJzdCByYXcgcmVhZCgpIHJldHVybnMgcGFydGlhbCBiImZvbyIKKyAgICAgICAgICAgICMgLSBzZWNvbmQgcmF3IHJlYWQoKSByZXR1cm5zIEVJTlRSCisgICAgICAgICAgICAjIC0gdGhpcmQgcmF3IHJlYWQoKSByZXR1cm5zIGIiYmFyIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGUocmlvLnJlYWQoNikpLCAiZm9vYmFyIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJpby5jbG9zZSgpCisgICAgICAgICAgICBvcy5jbG9zZSh3KQorICAgICAgICAgICAgb3MuY2xvc2UocikKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdGVyZF9yZWFkX3JldHJ5X2J1ZmZlcmVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ludGVycnVwdGVkX3JlYWRfcmV0cnkobGFtYmRhIHg6IHguZGVjb2RlKCdsYXRpbjEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9InJiIikKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdGVyZF9yZWFkX3JldHJ5X3RleHQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaW50ZXJydXB0ZWRfcmVhZF9yZXRyeShsYW1iZGEgeDogeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9InIiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgY2hlY2tfaW50ZXJydXB0ZWRfd3JpdGVfcmV0cnkoc2VsZiwgaXRlbSwgKipmZG9wZW5fa3dhcmdzKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBhIGJ1ZmZlcmVkIHdyaXRlLCB3aGVuIGl0IGdldHMgaW50ZXJydXB0ZWQgKGVpdGhlcgorICAgICAgICByZXR1cm5pbmcgYSBwYXJ0aWFsIHJlc3VsdCBvciBFSU5UUiksIHByb3Blcmx5IGludm9rZXMgdGhlIHNpZ25hbAorICAgICAgICBoYW5kbGVyIGFuZCByZXRyaWVzIGlmIHRoZSBsYXR0ZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LiIiIgorICAgICAgICBzZWxlY3QgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoInNlbGVjdCIpCisgICAgICAgICMgQSBxdWFudGl0eSB0aGF0IGV4Y2VlZHMgdGhlIGJ1ZmZlciBzaXplIG9mIGFuIGFub255bW91cyBwaXBlJ3MKKyAgICAgICAgIyB3cml0ZSBlbmQuCisgICAgICAgIE4gPSBzdXBwb3J0LlBJUEVfTUFYX1NJWkUKKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICBmZG9wZW5fa3dhcmdzWyJjbG9zZWZkIl0gPSBGYWxzZQorICAgICAgICAjIFdlIG5lZWQgYSBzZXBhcmF0ZSB0aHJlYWQgdG8gcmVhZCBmcm9tIHRoZSBwaXBlIGFuZCBhbGxvdyB0aGUKKyAgICAgICAgIyB3cml0ZSgpIHRvIGZpbmlzaC4gIFRoaXMgdGhyZWFkIGlzIHN0YXJ0ZWQgYWZ0ZXIgdGhlIFNJR0FMUk0gaXMKKyAgICAgICAgIyByZWNlaXZlZCAoZm9yY2luZyBhIGZpcnN0IEVJTlRSIGluIHdyaXRlKCkpLgorICAgICAgICByZWFkX3Jlc3VsdHMgPSBbXQorICAgICAgICB3cml0ZV9maW5pc2hlZCA9IEZhbHNlCisgICAgICAgIGRlZiBfcmVhZCgpOgorICAgICAgICAgICAgd2hpbGUgbm90IHdyaXRlX2ZpbmlzaGVkOgorICAgICAgICAgICAgICAgIHdoaWxlIHIgaW4gc2VsZWN0LnNlbGVjdChbcl0sIFtdLCBbXSwgMS4wKVswXToKKyAgICAgICAgICAgICAgICAgICAgcyA9IG9zLnJlYWQociwgMTAyNCkKKyAgICAgICAgICAgICAgICAgICAgcmVhZF9yZXN1bHRzLmFwcGVuZChzKQorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9X3JlYWQpCisgICAgICAgIHQuZGFlbW9uID0gVHJ1ZQorICAgICAgICBkZWYgYWxhcm0xKHNpZywgZnJhbWUpOgorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgYWxhcm0yKQorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgIGRlZiBhbGFybTIoc2lnLCBmcmFtZSk6CisgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgYWxhcm0xKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aW8gPSBzZWxmLmlvLm9wZW4odywgKipmZG9wZW5fa3dhcmdzKQorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICAjIEV4cGVjdGVkIGJlaGF2aW91cjoKKyAgICAgICAgICAgICMgLSBmaXJzdCByYXcgd3JpdGUoKSBpcyBwYXJ0aWFsIChiZWNhdXNlIG9mIHRoZSBsaW1pdGVkIHBpcGUgYnVmZmVyCisgICAgICAgICAgICAjICAgYW5kIHRoZSBmaXJzdCBhbGFybSkKKyAgICAgICAgICAgICMgLSBzZWNvbmQgcmF3IHdyaXRlKCkgcmV0dXJucyBFSU5UUiAoYmVjYXVzZSBvZiB0aGUgc2Vjb25kIGFsYXJtKQorICAgICAgICAgICAgIyAtIHN1YnNlcXVlbnQgd3JpdGUoKXMgYXJlIHN1Y2Nlc3NmdWwgKGVpdGhlciBwYXJ0aWFsIG9yIGNvbXBsZXRlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOLCB3aW8ud3JpdGUoaXRlbSAqIE4pKQorICAgICAgICAgICAgd2lvLmZsdXNoKCkKKyAgICAgICAgICAgIHdyaXRlX2ZpbmlzaGVkID0gVHJ1ZQorICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTiwgc3VtKGxlbih4KSBmb3IgeCBpbiByZWFkX3Jlc3VsdHMpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgd3JpdGVfZmluaXNoZWQgPSBUcnVlCisgICAgICAgICAgICBvcy5jbG9zZSh3KQorICAgICAgICAgICAgb3MuY2xvc2UocikKKyAgICAgICAgICAgICMgVGhpcyBpcyBkZWxpYmVyYXRlLiBJZiB3ZSBkaWRuJ3QgY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICAgICAgIyBiZWZvcmUgY2xvc2luZyB3aW8sIHdpbyB3b3VsZCB0cnkgdG8gZmx1c2ggaXRzIGludGVybmFsCisgICAgICAgICAgICAjIGJ1ZmZlciwgYW5kIGNvdWxkIGJsb2NrIChpbiBjYXNlIG9mIGZhaWx1cmUpLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpby5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUJBREY6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgdGVzdF9pbnRlcnJ1cHRlcmRfd3JpdGVfcmV0cnlfYnVmZmVyZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaW50ZXJydXB0ZWRfd3JpdGVfcmV0cnkoYiJ4IiwgbW9kZT0id2IiKQorCisgICAgZGVmIHRlc3RfaW50ZXJydXB0ZXJkX3dyaXRlX3JldHJ5X3RleHQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaW50ZXJydXB0ZWRfd3JpdGVfcmV0cnkoIngiLCBtb2RlPSJ3IiwgZW5jb2Rpbmc9ImxhdGluMSIpCisKKworY2xhc3MgQ1NpZ25hbHNUZXN0KFNpZ25hbHNUZXN0KToKKyAgICBpbyA9IGlvCisKK2NsYXNzIFB5U2lnbmFsc1Rlc3QoU2lnbmFsc1Rlc3QpOgorICAgIGlvID0gcHlpbworCisgICAgIyBIYW5kbGluZyByZWVudHJhbmN5IGlzc3VlcyB3b3VsZCBzbG93IGRvd24gX3B5aW8gZXZlbiBtb3JlLCBzbyB0aGUKKyAgICAjIHRlc3RzIGFyZSBkaXNhYmxlZC4KKyAgICB0ZXN0X3JlZW50cmFudF93cml0ZV9idWZmZXJlZCA9IE5vbmUKKyAgICB0ZXN0X3JlZW50cmFudF93cml0ZV90ZXh0ID0gTm9uZQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0cyA9IChDSU9UZXN0LCBQeUlPVGVzdCwKKyAgICAgICAgICAgICBDQnVmZmVyZWRSZWFkZXJUZXN0LCBQeUJ1ZmZlcmVkUmVhZGVyVGVzdCwKKyAgICAgICAgICAgICBDQnVmZmVyZWRXcml0ZXJUZXN0LCBQeUJ1ZmZlcmVkV3JpdGVyVGVzdCwKKyAgICAgICAgICAgICBDQnVmZmVyZWRSV1BhaXJUZXN0LCBQeUJ1ZmZlcmVkUldQYWlyVGVzdCwKKyAgICAgICAgICAgICBDQnVmZmVyZWRSYW5kb21UZXN0LCBQeUJ1ZmZlcmVkUmFuZG9tVGVzdCwKKyAgICAgICAgICAgICBTdGF0ZWZ1bEluY3JlbWVudGFsRGVjb2RlclRlc3QsCisgICAgICAgICAgICAgQ0luY3JlbWVudGFsTmV3bGluZURlY29kZXJUZXN0LCBQeUluY3JlbWVudGFsTmV3bGluZURlY29kZXJUZXN0LAorICAgICAgICAgICAgIENUZXh0SU9XcmFwcGVyVGVzdCwgUHlUZXh0SU9XcmFwcGVyVGVzdCwKKyAgICAgICAgICAgICBDTWlzY0lPVGVzdCwgUHlNaXNjSU9UZXN0LAorICAgICAgICAgICAgIENTaWduYWxzVGVzdCwgUHlTaWduYWxzVGVzdCwKKyAgICAgICAgICAgICApCisKKyAgICAjIFB1dCB0aGUgbmFtZXNwYWNlcyBvZiB0aGUgSU8gbW9kdWxlIHdlIGFyZSB0ZXN0aW5nIGFuZCBzb21lIHVzZWZ1bCBtb2NrCisgICAgIyBjbGFzc2VzIGluIHRoZSBfX2RpY3RfXyBvZiBlYWNoIHRlc3QuCisgICAgbW9ja3MgPSAoTW9ja1Jhd0lPLCBNaXNiZWhhdmVkUmF3SU8sIE1vY2tGaWxlSU8sIENsb3NlRmFpbHVyZUlPLAorICAgICAgICAgICAgIE1vY2tOb25CbG9ja1dyaXRlcklPLCBNb2NrUmF3SU9XaXRob3V0UmVhZCkKKyAgICBhbGxfbWVtYmVycyA9IGlvLl9fYWxsX18gKyBbIkluY3JlbWVudGFsTmV3bGluZURlY29kZXIiXQorICAgIGNfaW9fbnMgPSBkaWN0KChuYW1lLCBnZXRhdHRyKGlvLCBuYW1lKSkgZm9yIG5hbWUgaW4gYWxsX21lbWJlcnMpCisgICAgcHlfaW9fbnMgPSBkaWN0KChuYW1lLCBnZXRhdHRyKHB5aW8sIG5hbWUpKSBmb3IgbmFtZSBpbiBhbGxfbWVtYmVycykKKyAgICBnbG9icyA9IGdsb2JhbHMoKQorICAgIGNfaW9fbnMudXBkYXRlKCh4Ll9fbmFtZV9fLCBnbG9ic1siQyIgKyB4Ll9fbmFtZV9fXSkgZm9yIHggaW4gbW9ja3MpCisgICAgcHlfaW9fbnMudXBkYXRlKCh4Ll9fbmFtZV9fLCBnbG9ic1siUHkiICsgeC5fX25hbWVfX10pIGZvciB4IGluIG1vY2tzKQorICAgICMgQXZvaWQgdHVybmluZyBvcGVuIGludG8gYSBib3VuZCBtZXRob2QuCisgICAgcHlfaW9fbnNbIm9wZW4iXSA9IHB5aW8uT3BlbldyYXBwZXIKKyAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgaWYgdGVzdC5fX25hbWVfXy5zdGFydHN3aXRoKCJDIik6CisgICAgICAgICAgICBmb3IgbmFtZSwgb2JqIGluIGNfaW9fbnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHRlc3QsIG5hbWUsIG9iaikKKyAgICAgICAgZWxpZiB0ZXN0Ll9fbmFtZV9fLnN0YXJ0c3dpdGgoIlB5Iik6CisgICAgICAgICAgICBmb3IgbmFtZSwgb2JqIGluIHB5X2lvX25zLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2V0YXR0cih0ZXN0LCBuYW1lLCBvYmopCisKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2lvY3RsLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaW9jdGwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5NjVkOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2lvY3RsLnB5CkBAIC0wLDAgKzEsOTMgQEAKK2ltcG9ydCBhcnJheQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUsIGdldF9hdHRyaWJ1dGUKK2ltcG9ydCBvcywgc3RydWN0CitmY250bCA9IGltcG9ydF9tb2R1bGUoJ2ZjbnRsJykKK3Rlcm1pb3MgPSBpbXBvcnRfbW9kdWxlKCd0ZXJtaW9zJykKK2dldF9hdHRyaWJ1dGUodGVybWlvcywgJ1RJT0NHUEdSUCcpICNDYW4ndCBydW4gdGVzdHMgd2l0aG91dCB0aGlzIGZlYXR1cmUKKwordHJ5OgorICAgIHR0eSA9IG9wZW4oIi9kZXYvdHR5IiwgInIiKQorZXhjZXB0IElPRXJyb3I6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlVuYWJsZSB0byBvcGVuIC9kZXYvdHR5IikKK2Vsc2U6CisgICAgIyBTa2lwIGlmIGFub3RoZXIgcHJvY2VzcyBpcyBpbiBmb3JlZ3JvdW5kCisgICAgciA9IGZjbnRsLmlvY3RsKHR0eSwgdGVybWlvcy5USU9DR1BHUlAsICIgICAgIikKKyAgICB0dHkuY2xvc2UoKQorICAgIHJwZ3JwID0gc3RydWN0LnVucGFjaygiaSIsIHIpWzBdCisgICAgaWYgcnBncnAgbm90IGluIChvcy5nZXRwZ3JwKCksIG9zLmdldHNpZCgwKSk6CisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJOZWl0aGVyIHRoZSBwcm9jZXNzIGdyb3VwIG5vciB0aGUgc2Vzc2lvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmUgYXR0YWNoZWQgdG8gL2Rldi90dHkiKQorICAgIGRlbCB0dHksIHIsIHJwZ3JwCisKK3RyeToKKyAgICBpbXBvcnQgcHR5CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcHR5ID0gTm9uZQorCitjbGFzcyBJb2N0bFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pb2N0bChzZWxmKToKKyAgICAgICAgIyBJZiB0aGlzIHByb2Nlc3MgaGFzIGJlZW4gcHV0IGludG8gdGhlIGJhY2tncm91bmQsIFRJT0NHUEdSUCByZXR1cm5zCisgICAgICAgICMgdGhlIHNlc3Npb24gSUQgaW5zdGVhZCBvZiB0aGUgcHJvY2VzcyBncm91cCBpZC4KKyAgICAgICAgaWRzID0gKG9zLmdldHBncnAoKSwgb3MuZ2V0c2lkKDApKQorICAgICAgICB0dHkgPSBvcGVuKCIvZGV2L3R0eSIsICJyIikKKyAgICAgICAgciA9IGZjbnRsLmlvY3RsKHR0eSwgdGVybWlvcy5USU9DR1BHUlAsICIgICAgIikKKyAgICAgICAgcnBncnAgPSBzdHJ1Y3QudW5wYWNrKCJpIiwgcilbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJbihycGdycCwgaWRzKQorCisgICAgZGVmIF9jaGVja19pb2N0bF9tdXRhdGVfbGVuKHNlbGYsIG5ieXRlcz1Ob25lKToKKyAgICAgICAgYnVmID0gYXJyYXkuYXJyYXkoJ2knKQorICAgICAgICBpbnRzaXplID0gYnVmLml0ZW1zaXplCisgICAgICAgIGlkcyA9IChvcy5nZXRwZ3JwKCksIG9zLmdldHNpZCgwKSkKKyAgICAgICAgIyBBIGZpbGwgdmFsdWUgdW5saWtlbHkgdG8gYmUgaW4gYGlkc2AKKyAgICAgICAgZmlsbCA9IC0xMjM0NQorICAgICAgICBpZiBuYnl0ZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIEV4dGVuZCB0aGUgYnVmZmVyIHNvIHRoYXQgaXQgaXMgZXhhY3RseSBgbmJ5dGVzYCBieXRlcyBsb25nCisgICAgICAgICAgICBidWYuZXh0ZW5kKFtmaWxsXSAqIChuYnl0ZXMgLy8gaW50c2l6ZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpICogaW50c2l6ZSwgbmJ5dGVzKSAgICMgc2FuaXR5IGNoZWNrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBidWYuYXBwZW5kKGZpbGwpCisgICAgICAgIHdpdGggb3BlbigiL2Rldi90dHkiLCAiciIpIGFzIHR0eToKKyAgICAgICAgICAgIHIgPSBmY250bC5pb2N0bCh0dHksIHRlcm1pb3MuVElPQ0dQR1JQLCBidWYsIDEpCisgICAgICAgIHJwZ3JwID0gYnVmWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihycGdycCwgaWRzKQorCisgICAgZGVmIHRlc3RfaW9jdGxfbXV0YXRlKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19pb2N0bF9tdXRhdGVfbGVuKCkKKworICAgIGRlZiB0ZXN0X2lvY3RsX211dGF0ZV8xMDI0KHNlbGYpOgorICAgICAgICAjIElzc3VlICM5NzU4OiBhIG11dGFibGUgYnVmZmVyIG9mIGV4YWN0bHkgMTAyNCBieXRlcyB3b3VsZG4ndCBiZQorICAgICAgICAjIGNvcGllZCBiYWNrIGFmdGVyIHRoZSBzeXN0ZW0gY2FsbC4KKyAgICAgICAgc2VsZi5fY2hlY2tfaW9jdGxfbXV0YXRlX2xlbigxMDI0KQorCisgICAgZGVmIHRlc3RfaW9jdGxfbXV0YXRlXzIwNDgoc2VsZik6CisgICAgICAgICMgVGVzdCB3aXRoIGEgbGFyZ2VyIGJ1ZmZlciwganVzdCBmb3IgdGhlIHJlY29yZC4KKyAgICAgICAgc2VsZi5fY2hlY2tfaW9jdGxfbXV0YXRlX2xlbigyMDQ4KQorCisgICAgZGVmIHRlc3RfaW9jdGxfc2lnbmVkX3Vuc2lnbmVkX2NvZGVfcGFyYW0oc2VsZik6CisgICAgICAgIGlmIG5vdCBwdHk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgncHR5IG1vZHVsZSByZXF1aXJlZCcpCisgICAgICAgIG1mZCwgc2ZkID0gcHR5Lm9wZW5wdHkoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB0ZXJtaW9zLlRJT0NTV0lOU1ogPCAwOgorICAgICAgICAgICAgICAgIHNldF93aW5zel9vcGNvZGVfbWF5YmVfbmVnID0gdGVybWlvcy5USU9DU1dJTlNaCisgICAgICAgICAgICAgICAgc2V0X3dpbnN6X29wY29kZV9wb3MgPSB0ZXJtaW9zLlRJT0NTV0lOU1ogJiAweGZmZmZmZmZmTAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZXRfd2luc3pfb3Bjb2RlX3BvcyA9IHRlcm1pb3MuVElPQ1NXSU5TWgorICAgICAgICAgICAgICAgIHNldF93aW5zel9vcGNvZGVfbWF5YmVfbmVnLCA9IHN0cnVjdC51bnBhY2soImkiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soIkkiLCB0ZXJtaW9zLlRJT0NTV0lOU1opKQorCisgICAgICAgICAgICBvdXJfd2luc3ogPSBzdHJ1Y3QucGFjaygiSEhISCIsODAsMjUsMCwwKQorICAgICAgICAgICAgIyB0ZXN0IGJvdGggd2l0aCBhIHBvc2l0aXZlIGFuZCBwb3RlbnRpYWxseSBuZWdhdGl2ZSBpb2N0bCBjb2RlCisgICAgICAgICAgICBuZXdfd2luc3ogPSBmY250bC5pb2N0bChtZmQsIHNldF93aW5zel9vcGNvZGVfcG9zLCBvdXJfd2luc3opCisgICAgICAgICAgICBuZXdfd2luc3ogPSBmY250bC5pb2N0bChtZmQsIHNldF93aW5zel9vcGNvZGVfbWF5YmVfbmVnLCBvdXJfd2luc3opCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jbG9zZShtZmQpCisgICAgICAgICAgICBvcy5jbG9zZShzZmQpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoSW9jdGxUZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaXNpbnN0YW5jZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2lzaW5zdGFuY2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViMDgxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2lzaW5zdGFuY2UucHkKQEAgLTAsMCArMSwyNzcgQEAKKyMgVGVzdHMgc29tZSBjb3JuZXIgY2FzZXMgd2l0aCBpc2luc3RhbmNlKCkgYW5kIGlzc3ViY2xhc3MoKS4gIFdoaWxlIHRoZXNlCisjIHRlc3RzIHVzZSBuZXcgc3R5bGUgY2xhc3NlcyBhbmQgcHJvcGVydGllcywgdGhleSBhY3R1YWxseSBkbyB3aGl0ZWJveAorIyB0ZXN0aW5nIG9mIGVycm9yIGNvbmRpdGlvbnMgdW5jb3ZlcmVkIHdoZW4gdXNpbmcgZXh0ZW5zaW9uIHR5cGVzLgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgc3lzCisKKworDAorY2xhc3MgVGVzdElzSW5zdGFuY2VFeGNlcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgYW4gQXR0cmlidXRlRXJyb3Igd2hlbiBhY2Nlc3NpbmcgdGhlIGluc3RhbmNlJ3MKKyAgICAjIGNsYXNzJ3MgYmFzZXMgaXMgbWFza2VkLiAgVGhpcyB3YXMgYWN0dWFsbHkgYSBidWcgaW4gUHl0aG9uIDIuMiBhbmQKKyAgICAjIDIuMi4xIHdoZXJlIHRoZSBleGNlcHRpb24gd2Fzbid0IGNhdWdodCBidXQgaXQgYWxzbyB3YXNuJ3QgYmVpbmcgY2xlYXJlZAorICAgICMgKGxlYWRpbmcgdG8gYW4gInVuZGV0ZWN0ZWQgZXJyb3IiIGluIHRoZSBkZWJ1ZyBidWlsZCkuICBTZXQgdXAgaXMsCisgICAgIyBpc2luc3RhbmNlKGluc3QsIGNscykgd2hlcmU6CisgICAgIworICAgICMgLSBpbnN0IGlzbid0IGFuIEluc3RhbmNlVHlwZQorICAgICMgLSBjbHMgaXNuJ3QgYSBDbGFzc1R5cGUsIGEgVHlwZVR5cGUsIG9yIGEgVHVwbGVUeXBlCisgICAgIyAtIGNscyBoYXMgYSBfX2Jhc2VzX18gYXR0cmlidXRlCisgICAgIyAtIGluc3QgaGFzIGEgX19jbGFzc19fIGF0dHJpYnV0ZQorICAgICMgLSBpbnN0Ll9fY2xhc3NfXyBhcyBubyBfX2Jhc2VzX18gYXR0cmlidXRlCisgICAgIworICAgICMgU291bmRzIGNvbXBsaWNhdGVkLCBJIGtub3csIGJ1dCB0aGlzIG1pbWljcyBhIHNpdHVhdGlvbiB3aGVyZSBhbgorICAgICMgZXh0ZW5zaW9uIHR5cGUgcmFpc2VzIGFuIEF0dHJpYnV0ZUVycm9yIHdoZW4gaXRzIF9fYmFzZXNfXyBhdHRyaWJ1dGUgaXMKKyAgICAjIGdvdHRlbi4gIEluIHRoYXQgY2FzZSwgaXNpbnN0YW5jZSgpIHNob3VsZCByZXR1cm4gRmFsc2UuCisgICAgZGVmIHRlc3RfY2xhc3NfaGFzX25vX2Jhc2VzKHNlbGYpOgorICAgICAgICBjbGFzcyBJKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZ2V0Y2xhc3Moc2VsZik6CisgICAgICAgICAgICAgICAgIyBUaGlzIG11c3QgcmV0dXJuIGFuIG9iamVjdCB0aGF0IGhhcyBubyBfX2Jhc2VzX18gYXR0cmlidXRlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIF9fY2xhc3NfXyA9IHByb3BlcnR5KGdldGNsYXNzKQorCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBnZXRiYXNlcyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCkKKyAgICAgICAgICAgIF9fYmFzZXNfXyA9IHByb3BlcnR5KGdldGJhc2VzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlzaW5zdGFuY2UoSSgpLCBDKCkpKQorCisgICAgIyBMaWtlIGFib3ZlIGV4Y2VwdCB0aGF0IGluc3QuX19jbGFzc19fLl9fYmFzZXNfXyByYWlzZXMgYW4gZXhjZXB0aW9uCisgICAgIyBvdGhlciB0aGFuIEF0dHJpYnV0ZUVycm9yCisgICAgZGVmIHRlc3RfYmFzZXNfcmFpc2VzX290aGVyX3RoYW5fYXR0cmlidXRlX2Vycm9yKHNlbGYpOgorICAgICAgICBjbGFzcyBFKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZ2V0YmFzZXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgICAgICBfX2Jhc2VzX18gPSBwcm9wZXJ0eShnZXRiYXNlcykKKworICAgICAgICBjbGFzcyBJKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZ2V0Y2xhc3Moc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIEUoKQorICAgICAgICAgICAgX19jbGFzc19fID0gcHJvcGVydHkoZ2V0Y2xhc3MpCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIGdldGJhc2VzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoKQorICAgICAgICAgICAgX19iYXNlc19fID0gcHJvcGVydHkoZ2V0YmFzZXMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBpc2luc3RhbmNlLCBJKCksIEMoKSkKKworICAgICMgSGVyZSdzIGEgc2l0dWF0aW9uIHdoZXJlIGdldGF0dHIoY2xzLCAnX19iYXNlc19fJykgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKyAgICAjIElmIHRoYXQgZXhjZXB0aW9uIGlzIG5vdCBBdHRyaWJ1dGVFcnJvciwgaXQgc2hvdWxkIG5vdCBnZXQgbWFza2VkCisgICAgZGVmIHRlc3RfZG9udF9tYXNrX25vbl9hdHRyaWJ1dGVfZXJyb3Ioc2VsZik6CisgICAgICAgIGNsYXNzIEk6IHBhc3MKKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZ2V0YmFzZXMoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgICAgICBfX2Jhc2VzX18gPSBwcm9wZXJ0eShnZXRiYXNlcykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGlzaW5zdGFuY2UsIEkoKSwgQygpKQorCisgICAgIyBMaWtlIGFib3ZlLCBleGNlcHQgdGhhdCBnZXRhdHRyKGNscywgJ19fYmFzZXNfXycpIHJhaXNlcyBhbgorICAgICMgQXR0cmlidXRlRXJyb3IsIHdoaWNoIC9zaG91bGQvIGdldCBtYXNrZWQgYXMgYSBUeXBlRXJyb3IKKyAgICBkZWYgdGVzdF9tYXNrX2F0dHJpYnV0ZV9lcnJvcihzZWxmKToKKyAgICAgICAgY2xhc3MgSTogcGFzcworCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBnZXRiYXNlcyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorICAgICAgICAgICAgX19iYXNlc19fID0gcHJvcGVydHkoZ2V0YmFzZXMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpc2luc3RhbmNlLCBJKCksIEMoKSkKKworCisMCisjIFRoZXNlIHRlc3RzIGFyZSBzaW1pbGFyIHRvIGFib3ZlLCBidXQgdGlja2xlIGNlcnRhaW4gY29kZSBwYXRocyBpbgorIyBpc3N1YmNsYXNzKCkgaW5zdGVhZCBvZiBpc2luc3RhbmNlKCkgLS0gcmVhbGx5IFB5T2JqZWN0X0lzU3ViY2xhc3MoKQorIyB2cy4gUHlPYmplY3RfSXNJbnN0YW5jZSgpLgorY2xhc3MgVGVzdElzU3ViY2xhc3NFeGNlcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9kb250X21hc2tfbm9uX2F0dHJpYnV0ZV9lcnJvcihzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIGdldGJhc2VzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICAgICAgX19iYXNlc19fID0gcHJvcGVydHkoZ2V0YmFzZXMpCisKKyAgICAgICAgY2xhc3MgUyhDKTogcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgaXNzdWJjbGFzcywgQygpLCBTKCkpCisKKyAgICBkZWYgdGVzdF9tYXNrX2F0dHJpYnV0ZV9lcnJvcihzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIGdldGJhc2VzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisgICAgICAgICAgICBfX2Jhc2VzX18gPSBwcm9wZXJ0eShnZXRiYXNlcykKKworICAgICAgICBjbGFzcyBTKEMpOiBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpc3N1YmNsYXNzLCBDKCksIFMoKSkKKworICAgICMgTGlrZSBhYm92ZSwgYnV0IHRlc3QgdGhlIHNlY29uZCBicmFuY2gsIHdoZXJlIHRoZSBfX2Jhc2VzX18gb2YgdGhlCisgICAgIyBzZWNvbmQgYXJnICh0aGUgY2xzIGFyZykgaXMgdGVzdGVkLiAgVGhpcyBtZWFucyB0aGUgZmlyc3QgYXJnIG11c3QKKyAgICAjIHJldHVybiBhIHZhbGlkIF9fYmFzZXNfXywgYW5kIGl0J3Mgb2theSBmb3IgaXQgdG8gYmUgYSBub3JtYWwgLS0KKyAgICAjIHVucmVsYXRlZCBieSBpbmhlcml0YW5jZSAtLSBjbGFzcy4KKyAgICBkZWYgdGVzdF9kb250X21hc2tfbm9uX2F0dHJpYnV0ZV9lcnJvcl9pbl9jbHNfYXJnKHNlbGYpOgorICAgICAgICBjbGFzcyBCOiBwYXNzCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIGdldGJhc2VzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICAgICAgX19iYXNlc19fID0gcHJvcGVydHkoZ2V0YmFzZXMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBpc3N1YmNsYXNzLCBCLCBDKCkpCisKKyAgICBkZWYgdGVzdF9tYXNrX2F0dHJpYnV0ZV9lcnJvcl9pbl9jbHNfYXJnKHNlbGYpOgorICAgICAgICBjbGFzcyBCOiBwYXNzCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIGdldGJhc2VzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisgICAgICAgICAgICBfX2Jhc2VzX18gPSBwcm9wZXJ0eShnZXRiYXNlcykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlzc3ViY2xhc3MsIEIsIEMoKSkKKworCisMCisjIG1ldGEgY2xhc3NlcyBmb3IgY3JlYXRpbmcgYWJzdHJhY3QgY2xhc3NlcyBhbmQgaW5zdGFuY2VzCitjbGFzcyBBYnN0cmFjdENsYXNzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJhc2VzKToKKyAgICAgICAgc2VsZi5iYXNlcyA9IGJhc2VzCisKKyAgICBkZWYgZ2V0YmFzZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmJhc2VzCisgICAgX19iYXNlc19fID0gcHJvcGVydHkoZ2V0YmFzZXMpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZik6CisgICAgICAgIHJldHVybiBBYnN0cmFjdEluc3RhbmNlKHNlbGYpCisKK2NsYXNzIEFic3RyYWN0SW5zdGFuY2Uob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwga2xhc3MpOgorICAgICAgICBzZWxmLmtsYXNzID0ga2xhc3MKKworICAgIGRlZiBnZXRjbGFzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYua2xhc3MKKyAgICBfX2NsYXNzX18gPSBwcm9wZXJ0eShnZXRjbGFzcykKKworIyBhYnN0cmFjdCBjbGFzc2VzCitBYnN0cmFjdFN1cGVyID0gQWJzdHJhY3RDbGFzcyhiYXNlcz0oKSkKKworQWJzdHJhY3RDaGlsZCA9IEFic3RyYWN0Q2xhc3MoYmFzZXM9KEFic3RyYWN0U3VwZXIsKSkKKworIyBub3JtYWwgY2xhc3NlcworY2xhc3MgU3VwZXI6CisgICAgcGFzcworCitjbGFzcyBDaGlsZChTdXBlcik6CisgICAgcGFzcworCisjIG5ldy1zdHlsZSBjbGFzc2VzCitjbGFzcyBOZXdTdXBlcihvYmplY3QpOgorICAgIHBhc3MKKworY2xhc3MgTmV3Q2hpbGQoTmV3U3VwZXIpOgorICAgIHBhc3MKKworCisMCitjbGFzcyBUZXN0SXNJbnN0YW5jZUlzU3ViY2xhc3ModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdHMgdG8gZW5zdXJlIHRoYXQgaXNpbnN0YW5jZSBhbmQgaXNzdWJjbGFzcyB3b3JrIG9uIGFic3RyYWN0CisgICAgIyBjbGFzc2VzIGFuZCBpbnN0YW5jZXMuICBCZWZvcmUgdGhlIDIuMiByZWxlYXNlLCBUeXBlRXJyb3JzIHdlcmUKKyAgICAjIHJhaXNlZCB3aGVuIGJvb2xlYW4gdmFsdWVzIHNob3VsZCBoYXZlIGJlZW4gcmV0dXJuZWQuICBUaGUgYnVnIHdhcworICAgICMgdHJpZ2dlcmVkIGJ5IG1peGluZyAnbm9ybWFsJyBjbGFzc2VzIGFuZCBpbnN0YW5jZXMgd2VyZSB3aXRoCisgICAgIyAnYWJzdHJhY3QnIGNsYXNzZXMgYW5kIGluc3RhbmNlcy4gIFRoaXMgY2FzZSB0cmllcyB0byB0ZXN0IGFsbAorICAgICMgY29tYmluYXRpb25zLgorCisgICAgZGVmIHRlc3RfaXNpbnN0YW5jZV9ub3JtYWwoc2VsZik6CisgICAgICAgICMgbm9ybWFsIGluc3RhbmNlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzaW5zdGFuY2UoU3VwZXIoKSwgU3VwZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpc2luc3RhbmNlKFN1cGVyKCksIENoaWxkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXNpbnN0YW5jZShTdXBlcigpLCBBYnN0cmFjdFN1cGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXNpbnN0YW5jZShTdXBlcigpLCBBYnN0cmFjdENoaWxkKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzaW5zdGFuY2UoQ2hpbGQoKSwgU3VwZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpc2luc3RhbmNlKENoaWxkKCksIEFic3RyYWN0U3VwZXIpKQorCisgICAgZGVmIHRlc3RfaXNpbnN0YW5jZV9hYnN0cmFjdChzZWxmKToKKyAgICAgICAgIyBhYnN0cmFjdCBpbnN0YW5jZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpc2luc3RhbmNlKEFic3RyYWN0U3VwZXIoKSwgQWJzdHJhY3RTdXBlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlzaW5zdGFuY2UoQWJzdHJhY3RTdXBlcigpLCBBYnN0cmFjdENoaWxkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXNpbnN0YW5jZShBYnN0cmFjdFN1cGVyKCksIFN1cGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXNpbnN0YW5jZShBYnN0cmFjdFN1cGVyKCksIENoaWxkKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzaW5zdGFuY2UoQWJzdHJhY3RDaGlsZCgpLCBBYnN0cmFjdENoaWxkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpc2luc3RhbmNlKEFic3RyYWN0Q2hpbGQoKSwgQWJzdHJhY3RTdXBlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlzaW5zdGFuY2UoQWJzdHJhY3RDaGlsZCgpLCBTdXBlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlzaW5zdGFuY2UoQWJzdHJhY3RDaGlsZCgpLCBDaGlsZCkpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc19ub3JtYWwoc2VsZik6CisgICAgICAgICMgbm9ybWFsIGNsYXNzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpc3N1YmNsYXNzKFN1cGVyLCBTdXBlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlzc3ViY2xhc3MoU3VwZXIsIEFic3RyYWN0U3VwZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpc3N1YmNsYXNzKFN1cGVyLCBDaGlsZCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpc3N1YmNsYXNzKENoaWxkLCBDaGlsZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXNzdWJjbGFzcyhDaGlsZCwgU3VwZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpc3N1YmNsYXNzKENoaWxkLCBBYnN0cmFjdFN1cGVyKSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX2Fic3RyYWN0KHNlbGYpOgorICAgICAgICAjIGFic3RyYWN0IGNsYXNzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpc3N1YmNsYXNzKEFic3RyYWN0U3VwZXIsIEFic3RyYWN0U3VwZXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpc3N1YmNsYXNzKEFic3RyYWN0U3VwZXIsIEFic3RyYWN0Q2hpbGQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpc3N1YmNsYXNzKEFic3RyYWN0U3VwZXIsIENoaWxkKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzc3ViY2xhc3MoQWJzdHJhY3RDaGlsZCwgQWJzdHJhY3RDaGlsZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXNzdWJjbGFzcyhBYnN0cmFjdENoaWxkLCBBYnN0cmFjdFN1cGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXNzdWJjbGFzcyhBYnN0cmFjdENoaWxkLCBTdXBlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlzc3ViY2xhc3MoQWJzdHJhY3RDaGlsZCwgQ2hpbGQpKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfdHVwbGUoc2VsZik6CisgICAgICAgICMgdGVzdCB3aXRoIGEgdHVwbGUgYXMgdGhlIHNlY29uZCBhcmd1bWVudCBjbGFzc2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXNzdWJjbGFzcyhDaGlsZCwgKENoaWxkLCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzc3ViY2xhc3MoQ2hpbGQsIChTdXBlciwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXNzdWJjbGFzcyhTdXBlciwgKENoaWxkLCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzc3ViY2xhc3MoU3VwZXIsIChDaGlsZCwgU3VwZXIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXNzdWJjbGFzcyhDaGlsZCwgKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzc3ViY2xhc3MoU3VwZXIsIChDaGlsZCwgKFN1cGVyLCkpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlzc3ViY2xhc3MoTmV3Q2hpbGQsIChOZXdDaGlsZCwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpc3N1YmNsYXNzKE5ld0NoaWxkLCAoTmV3U3VwZXIsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlzc3ViY2xhc3MoTmV3U3VwZXIsIChOZXdDaGlsZCwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpc3N1YmNsYXNzKE5ld1N1cGVyLCAoTmV3Q2hpbGQsIE5ld1N1cGVyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlzc3ViY2xhc3MoTmV3Q2hpbGQsICgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpc3N1YmNsYXNzKE5ld1N1cGVyLCAoTmV3Q2hpbGQsIChOZXdTdXBlciwpKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpc3N1YmNsYXNzKGludCwgKGxvbmcsIChmbG9hdCwgaW50KSkpKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpc3N1YmNsYXNzKHN0ciwgKHVuaWNvZGUsIChDaGlsZCwgTmV3Q2hpbGQsIGJhc2VzdHJpbmcpKSkpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc19yZWN1cnNpb25fbGltaXQoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgaXNzdWJjbGFzcyByYWlzZXMgUnVudGltZUVycm9yIGJlZm9yZSB0aGUgQyBzdGFjayBpcworICAgICAgICAjIGJsb3duCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgYmxvd3N0YWNrLCBpc3N1YmNsYXNzLCBzdHIsIHN0cikKKworICAgIGRlZiB0ZXN0X2lzaW5zdGFuY2VfcmVjdXJzaW9uX2xpbWl0KHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IGlzc3ViY2xhc3MgcmFpc2VzIFJ1bnRpbWVFcnJvciBiZWZvcmUgdGhlIEMgc3RhY2sgaXMKKyAgICAgICAgIyBibG93bgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGJsb3dzdGFjaywgaXNpbnN0YW5jZSwgJycsIHN0cikKKworZGVmIGJsb3dzdGFjayhmeG4sIGFyZywgY29tcGFyZV90byk6CisgICAgIyBNYWtlIHN1cmUgdGhhdCBjYWxsaW5nIGlzaW5zdGFuY2Ugd2l0aCBhIGRlZXBseSBuZXN0ZWQgdHVwbGUgZm9yIGl0cworICAgICMgYXJndW1lbnQgd2lsbCByYWlzZSBSdW50aW1lRXJyb3IgZXZlbnR1YWxseS4KKyAgICB0dXBsZV9hcmcgPSAoY29tcGFyZV90bywpCisgICAgZm9yIGNudCBpbiB4cmFuZ2Uoc3lzLmdldHJlY3Vyc2lvbmxpbWl0KCkrNSk6CisgICAgICAgIHR1cGxlX2FyZyA9ICh0dXBsZV9hcmcsKQorICAgICAgICBmeG4oYXJnLCB0dXBsZV9hcmcpCisKKwwKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBUZXN0SXNJbnN0YW5jZUV4Y2VwdGlvbnMsCisgICAgICAgIFRlc3RJc1N1YmNsYXNzRXhjZXB0aW9ucywKKyAgICAgICAgVGVzdElzSW5zdGFuY2VJc1N1YmNsYXNzCisgICAgKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2l0ZXIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9pdGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYzM5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9pdGVyLnB5CkBAIC0wLDAgKzEsOTMyIEBACisjIFRlc3QgaXRlcmF0b3JzLgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCB1bmxpbmssIGhhdmVfdW5pY29kZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfcHkza193YXJuaW5ncywgY3B5dGhvbl9vbmx5CisKKyMgVGVzdCByZXN1bHQgb2YgdHJpcGxlIGxvb3AgKHRvbyBiaWcgdG8gaW5saW5lKQorVFJJUExFVFMgPSBbKDAsIDAsIDApLCAoMCwgMCwgMSksICgwLCAwLCAyKSwKKyAgICAgICAgICAgICgwLCAxLCAwKSwgKDAsIDEsIDEpLCAoMCwgMSwgMiksCisgICAgICAgICAgICAoMCwgMiwgMCksICgwLCAyLCAxKSwgKDAsIDIsIDIpLAorCisgICAgICAgICAgICAoMSwgMCwgMCksICgxLCAwLCAxKSwgKDEsIDAsIDIpLAorICAgICAgICAgICAgKDEsIDEsIDApLCAoMSwgMSwgMSksICgxLCAxLCAyKSwKKyAgICAgICAgICAgICgxLCAyLCAwKSwgKDEsIDIsIDEpLCAoMSwgMiwgMiksCisKKyAgICAgICAgICAgICgyLCAwLCAwKSwgKDIsIDAsIDEpLCAoMiwgMCwgMiksCisgICAgICAgICAgICAoMiwgMSwgMCksICgyLCAxLCAxKSwgKDIsIDEsIDIpLAorICAgICAgICAgICAgKDIsIDIsIDApLCAoMiwgMiwgMSksICgyLCAyLCAyKV0KKworIyBIZWxwZXIgY2xhc3NlcworCitjbGFzcyBCYXNpY0l0ZXJDbGFzczoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbik6CisgICAgICAgIHNlbGYubiA9IG4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICByZXMgPSBzZWxmLmkKKyAgICAgICAgaWYgcmVzID49IHNlbGYubjoKKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgc2VsZi5pID0gcmVzICsgMQorICAgICAgICByZXR1cm4gcmVzCisKK2NsYXNzIEl0ZXJhdGluZ1NlcXVlbmNlQ2xhc3M6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgorICAgICAgICBzZWxmLm4gPSBuCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gQmFzaWNJdGVyQ2xhc3Moc2VsZi5uKQorCitjbGFzcyBTZXF1ZW5jZUNsYXNzOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuKToKKyAgICAgICAgc2VsZi5uID0gbgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgaWYgMCA8PSBpIDwgc2VsZi5uOgorICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKworIyBNYWluIHRlc3Qgc3VpdGUKKworY2xhc3MgVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBIZWxwZXIgdG8gY2hlY2sgdGhhdCBhbiBpdGVyYXRvciByZXR1cm5zIGEgZ2l2ZW4gc2VxdWVuY2UKKyAgICBkZWYgY2hlY2tfaXRlcmF0b3Ioc2VsZiwgaXQsIHNlcSk6CisgICAgICAgIHJlcyA9IFtdCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdmFsID0gaXQubmV4dCgpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmVzLmFwcGVuZCh2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZXEpCisKKyAgICAjIEhlbHBlciB0byBjaGVjayB0aGF0IGEgZm9yIGxvb3AgZ2VuZXJhdGVzIGEgZ2l2ZW4gc2VxdWVuY2UKKyAgICBkZWYgY2hlY2tfZm9yX2xvb3Aoc2VsZiwgZXhwciwgc2VxKToKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZm9yIHZhbCBpbiBleHByOgorICAgICAgICAgICAgcmVzLmFwcGVuZCh2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZXEpCisKKyAgICAjIFRlc3QgYmFzaWMgdXNlIG9mIGl0ZXIoKSBmdW5jdGlvbgorICAgIGRlZiB0ZXN0X2l0ZXJfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaXRlcmF0b3IoaXRlcihyYW5nZSgxMCkpLCByYW5nZSgxMCkpCisKKyAgICAjIFRlc3QgdGhhdCBpdGVyKGl0ZXIoeCkpIGlzIHRoZSBzYW1lIGFzIGl0ZXIoeCkKKyAgICBkZWYgdGVzdF9pdGVyX2lkZW1wb3RlbmN5KHNlbGYpOgorICAgICAgICBzZXEgPSByYW5nZSgxMCkKKyAgICAgICAgaXQgPSBpdGVyKHNlcSkKKyAgICAgICAgaXQyID0gaXRlcihpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGl0IGlzIGl0MikKKworICAgICMgVGVzdCB0aGF0IGZvciBsb29wcyBvdmVyIGl0ZXJhdG9ycyB3b3JrCisgICAgZGVmIHRlc3RfaXRlcl9mb3JfbG9vcChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mb3JfbG9vcChpdGVyKHJhbmdlKDEwKSksIHJhbmdlKDEwKSkKKworICAgICMgVGVzdCBzZXZlcmFsIGluZGVwZW5kZW50IGl0ZXJhdG9ycyBvdmVyIHRoZSBzYW1lIGxpc3QKKyAgICBkZWYgdGVzdF9pdGVyX2luZGVwZW5kZW5jZShzZWxmKToKKyAgICAgICAgc2VxID0gcmFuZ2UoMykKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZm9yIGkgaW4gaXRlcihzZXEpOgorICAgICAgICAgICAgZm9yIGogaW4gaXRlcihzZXEpOgorICAgICAgICAgICAgICAgIGZvciBrIGluIGl0ZXIoc2VxKToKKyAgICAgICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgoaSwgaiwgaykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBUUklQTEVUUykKKworICAgICMgVGVzdCB0cmlwbGUgbGlzdCBjb21wcmVoZW5zaW9uIHVzaW5nIGl0ZXJhdG9ycworICAgIGRlZiB0ZXN0X25lc3RlZF9jb21wcmVoZW5zaW9uc19pdGVyKHNlbGYpOgorICAgICAgICBzZXEgPSByYW5nZSgzKQorICAgICAgICByZXMgPSBbKGksIGosIGspCisgICAgICAgICAgICAgICBmb3IgaSBpbiBpdGVyKHNlcSkgZm9yIGogaW4gaXRlcihzZXEpIGZvciBrIGluIGl0ZXIoc2VxKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFRSSVBMRVRTKQorCisgICAgIyBUZXN0IHRyaXBsZSBsaXN0IGNvbXByZWhlbnNpb24gd2l0aG91dCBpdGVyYXRvcnMKKyAgICBkZWYgdGVzdF9uZXN0ZWRfY29tcHJlaGVuc2lvbnNfZm9yKHNlbGYpOgorICAgICAgICBzZXEgPSByYW5nZSgzKQorICAgICAgICByZXMgPSBbKGksIGosIGspIGZvciBpIGluIHNlcSBmb3IgaiBpbiBzZXEgZm9yIGsgaW4gc2VxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgVFJJUExFVFMpCisKKyAgICAjIFRlc3QgYSBjbGFzcyB3aXRoIF9faXRlcl9fIGluIGEgZm9yIGxvb3AKKyAgICBkZWYgdGVzdF9pdGVyX2NsYXNzX2ZvcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mb3JfbG9vcChJdGVyYXRpbmdTZXF1ZW5jZUNsYXNzKDEwKSwgcmFuZ2UoMTApKQorCisgICAgIyBUZXN0IGEgY2xhc3Mgd2l0aCBfX2l0ZXJfXyB3aXRoIGV4cGxpY2l0IGl0ZXIoKQorICAgIGRlZiB0ZXN0X2l0ZXJfY2xhc3NfaXRlcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pdGVyYXRvcihpdGVyKEl0ZXJhdGluZ1NlcXVlbmNlQ2xhc3MoMTApKSwgcmFuZ2UoMTApKQorCisgICAgIyBUZXN0IGZvciBsb29wIG9uIGEgc2VxdWVuY2UgY2xhc3Mgd2l0aG91dCBfX2l0ZXJfXworICAgIGRlZiB0ZXN0X3NlcV9jbGFzc19mb3Ioc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZm9yX2xvb3AoU2VxdWVuY2VDbGFzcygxMCksIHJhbmdlKDEwKSkKKworICAgICMgVGVzdCBpdGVyKCkgb24gYSBzZXF1ZW5jZSBjbGFzcyB3aXRob3V0IF9faXRlcl9fCisgICAgZGVmIHRlc3Rfc2VxX2NsYXNzX2l0ZXIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaXRlcmF0b3IoaXRlcihTZXF1ZW5jZUNsYXNzKDEwKSksIHJhbmdlKDEwKSkKKworICAgICMgVGVzdCBhIG5ld19zdHlsZSBjbGFzcyB3aXRoIF9faXRlcl9fIGJ1dCBubyBuZXh0KCkgbWV0aG9kCisgICAgZGVmIHRlc3RfbmV3X3N0eWxlX2l0ZXJfY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEl0ZXJDbGFzcyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXRlciwgSXRlckNsYXNzKCkpCisKKyAgICAjIFRlc3QgdHdvLWFyZ3VtZW50IGl0ZXIoKSB3aXRoIGNhbGxhYmxlIGluc3RhbmNlCisgICAgZGVmIHRlc3RfaXRlcl9jYWxsYWJsZShzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmkgPSAwCisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZik6CisgICAgICAgICAgICAgICAgaSA9IHNlbGYuaQorICAgICAgICAgICAgICAgIHNlbGYuaSA9IGkgKyAxCisgICAgICAgICAgICAgICAgaWYgaSA+IDEwMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvciAjIEVtZXJnZW5jeSBzdG9wCisgICAgICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAgICAgc2VsZi5jaGVja19pdGVyYXRvcihpdGVyKEMoKSwgMTApLCByYW5nZSgxMCkpCisKKyAgICAjIFRlc3QgdHdvLWFyZ3VtZW50IGl0ZXIoKSB3aXRoIGZ1bmN0aW9uCisgICAgZGVmIHRlc3RfaXRlcl9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgZGVmIHNwYW0oc3RhdGU9WzBdKToKKyAgICAgICAgICAgIGkgPSBzdGF0ZVswXQorICAgICAgICAgICAgc3RhdGVbMF0gPSBpKzEKKyAgICAgICAgICAgIHJldHVybiBpCisgICAgICAgIHNlbGYuY2hlY2tfaXRlcmF0b3IoaXRlcihzcGFtLCAxMCksIHJhbmdlKDEwKSkKKworICAgICMgVGVzdCB0d28tYXJndW1lbnQgaXRlcigpIHdpdGggZnVuY3Rpb24gdGhhdCByYWlzZXMgU3RvcEl0ZXJhdGlvbgorICAgIGRlZiB0ZXN0X2l0ZXJfZnVuY3Rpb25fc3RvcChzZWxmKToKKyAgICAgICAgZGVmIHNwYW0oc3RhdGU9WzBdKToKKyAgICAgICAgICAgIGkgPSBzdGF0ZVswXQorICAgICAgICAgICAgaWYgaSA9PSAxMDoKKyAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICBzdGF0ZVswXSA9IGkrMQorICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAgICAgc2VsZi5jaGVja19pdGVyYXRvcihpdGVyKHNwYW0sIDIwKSwgcmFuZ2UoMTApKQorCisgICAgIyBUZXN0IGV4Y2VwdGlvbiBwcm9wYWdhdGlvbiB0aHJvdWdoIGZ1bmN0aW9uIGl0ZXJhdG9yCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBkZWYgc3BhbShzdGF0ZT1bMF0pOgorICAgICAgICAgICAgaSA9IHN0YXRlWzBdCisgICAgICAgICAgICBzdGF0ZVswXSA9IGkrMQorICAgICAgICAgICAgaWYgaSA9PSAxMDoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgICAgIHJldHVybiBpCisgICAgICAgIHJlcyA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciB4IGluIGl0ZXIoc3BhbSwgMjApOgorICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoeCkKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCByYW5nZSgxMCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBSdW50aW1lRXJyb3IiKQorCisgICAgIyBUZXN0IGV4Y2VwdGlvbiBwcm9wYWdhdGlvbiB0aHJvdWdoIHNlcXVlbmNlIGl0ZXJhdG9yCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICBjbGFzcyBNeVNlcXVlbmNlQ2xhc3MoU2VxdWVuY2VDbGFzcyk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgaWYgaSA9PSAxMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgICAgICAgICAgcmV0dXJuIFNlcXVlbmNlQ2xhc3MuX19nZXRpdGVtX18oc2VsZiwgaSkKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIHggaW4gTXlTZXF1ZW5jZUNsYXNzKDIwKToKKyAgICAgICAgICAgICAgICByZXMuYXBwZW5kKHgpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgcmFuZ2UoMTApKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgUnVudGltZUVycm9yIikKKworICAgICMgVGVzdCBmb3IgU3RvcEl0ZXJhdGlvbiBmcm9tIF9fZ2V0aXRlbV9fCisgICAgZGVmIHRlc3Rfc3RvcF9zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgY2xhc3MgTXlTZXF1ZW5jZUNsYXNzKFNlcXVlbmNlQ2xhc3MpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIGlmIGkgPT0gMTA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgICAgICByZXR1cm4gU2VxdWVuY2VDbGFzcy5fX2dldGl0ZW1fXyhzZWxmLCBpKQorICAgICAgICBzZWxmLmNoZWNrX2Zvcl9sb29wKE15U2VxdWVuY2VDbGFzcygyMCksIHJhbmdlKDEwKSkKKworICAgICMgVGVzdCBhIGJpZyByYW5nZQorICAgIGRlZiB0ZXN0X2l0ZXJfYmlnX3JhbmdlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl9sb29wKGl0ZXIocmFuZ2UoMTAwMDApKSwgcmFuZ2UoMTAwMDApKQorCisgICAgIyBUZXN0IGFuIGVtcHR5IGxpc3QKKyAgICBkZWYgdGVzdF9pdGVyX2VtcHR5KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl9sb29wKGl0ZXIoW10pLCBbXSkKKworICAgICMgVGVzdCBhIHR1cGxlCisgICAgZGVmIHRlc3RfaXRlcl90dXBsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mb3JfbG9vcChpdGVyKCgwLDEsMiwzLDQsNSw2LDcsOCw5KSksIHJhbmdlKDEwKSkKKworICAgICMgVGVzdCBhbiB4cmFuZ2UKKyAgICBkZWYgdGVzdF9pdGVyX3hyYW5nZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mb3JfbG9vcChpdGVyKHhyYW5nZSgxMCkpLCByYW5nZSgxMCkpCisKKyAgICAjIFRlc3QgYSBzdHJpbmcKKyAgICBkZWYgdGVzdF9pdGVyX3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mb3JfbG9vcChpdGVyKCJhYmNkZSIpLCBbImEiLCAiYiIsICJjIiwgImQiLCAiZSJdKQorCisgICAgIyBUZXN0IGEgVW5pY29kZSBzdHJpbmcKKyAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgIGRlZiB0ZXN0X2l0ZXJfdW5pY29kZShzZWxmKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZm9yX2xvb3AoaXRlcih1bmljb2RlKCJhYmNkZSIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VuaWNvZGUoImEiKSwgdW5pY29kZSgiYiIpLCB1bmljb2RlKCJjIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlKCJkIiksIHVuaWNvZGUoImUiKV0pCisKKyAgICAjIFRlc3QgYSBkaXJlY3RvcnkKKyAgICBkZWYgdGVzdF9pdGVyX2RpY3Qoc2VsZik6CisgICAgICAgIGRpY3QgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBkaWN0W2ldID0gTm9uZQorICAgICAgICBzZWxmLmNoZWNrX2Zvcl9sb29wKGRpY3QsIGRpY3Qua2V5cygpKQorCisgICAgIyBUZXN0IGEgZmlsZQorICAgIGRlZiB0ZXN0X2l0ZXJfZmlsZShzZWxmKToKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiVkXG4iICUgaSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmID0gb3BlbihURVNURk4sICJyIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jaGVja19mb3JfbG9vcChmLCBbIjBcbiIsICIxXG4iLCAiMlxuIiwgIjNcbiIsICI0XG4iXSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZm9yX2xvb3AoZiwgW10pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgIyBUZXN0IGxpc3QoKSdzIHVzZSBvZiBpdGVyYXRvcnMuCisgICAgZGVmIHRlc3RfYnVpbHRpbl9saXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoU2VxdWVuY2VDbGFzcyg1KSksIHJhbmdlKDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoU2VxdWVuY2VDbGFzcygwKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoKCkpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJhbmdlKDEwLCAtMSwgLTEpKSwgcmFuZ2UoMTAsIC0xLCAtMSkpCisKKyAgICAgICAgZCA9IHsib25lIjogMSwgInR3byI6IDIsICJ0aHJlZSI6IDN9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgZC5rZXlzKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBsaXN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIDQyKQorCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIlZFxuIiAlIGkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAiciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChmKSwgWyIwXG4iLCAiMVxuIiwgIjJcbiIsICIzXG4iLCAiNFxuIl0pCisgICAgICAgICAgICBmLnNlZWsoMCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyIwXG4iLCAiMVxuIiwgIjJcbiIsICIzXG4iLCAiNFxuIl0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgIyBUZXN0IHR1cGxlcygpJ3MgdXNlIG9mIGl0ZXJhdG9ycy4KKyAgICBkZWYgdGVzdF9idWlsdGluX3R1cGxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKFNlcXVlbmNlQ2xhc3MoNSkpLCAoMCwgMSwgMiwgMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoU2VxdWVuY2VDbGFzcygwKSksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKFtdKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoKCkpLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZSgiYWJjIiksICgiYSIsICJiIiwgImMiKSkKKworICAgICAgICBkID0geyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShkKSwgdHVwbGUoZC5rZXlzKCkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHVwbGUsIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHVwbGUsIDQyKQorCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIlZFxuIiAlIGkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAiciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoZiksICgiMFxuIiwgIjFcbiIsICIyXG4iLCAiM1xuIiwgIjRcbiIpKQorICAgICAgICAgICAgZi5zZWVrKDAsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKGYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIjBcbiIsICIxXG4iLCAiMlxuIiwgIjNcbiIsICI0XG4iKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAjIFRlc3QgZmlsdGVyKCkncyB1c2Ugb2YgaXRlcmF0b3JzLgorICAgIGRlZiB0ZXN0X2J1aWx0aW5fZmlsdGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihOb25lLCBTZXF1ZW5jZUNsYXNzKDUpKSwgcmFuZ2UoMSwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsdGVyKE5vbmUsIFNlcXVlbmNlQ2xhc3MoMCkpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWx0ZXIoTm9uZSwgKCkpLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWx0ZXIoTm9uZSwgImFiYyIpLCAiYWJjIikKKworICAgICAgICBkID0geyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWx0ZXIoTm9uZSwgZCksIGQua2V5cygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmlsdGVyLCBOb25lLCBsaXN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZpbHRlciwgTm9uZSwgNDIpCisKKyAgICAgICAgY2xhc3MgQm9vbGVhbjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cnV0aCk6CisgICAgICAgICAgICAgICAgc2VsZi50cnV0aCA9IHRydXRoCisgICAgICAgICAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudHJ1dGgKKyAgICAgICAgYlRydWUgPSBCb29sZWFuKDEpCisgICAgICAgIGJGYWxzZSA9IEJvb2xlYW4oMCkKKworICAgICAgICBjbGFzcyBTZXE6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHNlbGYudmFscyA9IGFyZ3MKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBjbGFzcyBTZXFJdGVyOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFscyk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZhbHMgPSB2YWxzCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmkgPSAwCisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHNlbGYuaQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pID0gaSArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkgPCBsZW4oc2VsZi52YWxzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWxzW2ldCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgICAgICByZXR1cm4gU2VxSXRlcihzZWxmLnZhbHMpCisKKyAgICAgICAgc2VxID0gU2VxKCooW2JUcnVlLCBiRmFsc2VdICogMjUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihsYW1iZGEgeDogbm90IHgsIHNlcSksIFtiRmFsc2VdKjI1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbHRlcihsYW1iZGEgeDogbm90IHgsIGl0ZXIoc2VxKSksIFtiRmFsc2VdKjI1KQorCisgICAgIyBUZXN0IG1heCgpIGFuZCBtaW4oKSdzIHVzZSBvZiBpdGVyYXRvcnMuCisgICAgZGVmIHRlc3RfYnVpbHRpbl9tYXhfbWluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heChTZXF1ZW5jZUNsYXNzKDUpKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oU2VxdWVuY2VDbGFzcyg1KSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDgsIC0xKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oOCwgLTEpLCAtMSkKKworICAgICAgICBkID0geyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoZCksICJ0d28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbihkKSwgIm9uZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KGQuaXRlcnZhbHVlcygpKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oaXRlcihkLml0ZXJ2YWx1ZXMoKSkpLCAxKQorCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKCJtZWRpdW0gbGluZVxuIikKKyAgICAgICAgICAgIGYud3JpdGUoInh0cmEgbGFyZ2UgbGluZVxuIikKKyAgICAgICAgICAgIGYud3JpdGUoIml0dHktYml0dHkgbGluZVxuIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmID0gb3BlbihURVNURk4sICJyIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oZiksICJpdHR5LWJpdHR5IGxpbmVcbiIpCisgICAgICAgICAgICBmLnNlZWsoMCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KGYpLCAieHRyYSBsYXJnZSBsaW5lXG4iKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICMgVGVzdCBtYXAoKSdzIHVzZSBvZiBpdGVyYXRvcnMuCisgICAgZGVmIHRlc3RfYnVpbHRpbl9tYXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwKGxhbWJkYSB4OiB4KzEsIFNlcXVlbmNlQ2xhc3MoNSkpLCByYW5nZSgxLCA2KSkKKworICAgICAgICBkID0geyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXAobGFtYmRhIGssIGQ9ZDogKGssIGRba10pLCBkKSwgZC5pdGVtcygpKQorICAgICAgICBka2V5cyA9IGQua2V5cygpCisgICAgICAgIGV4cGVjdGVkID0gWyhpIDwgbGVuKGQpIGFuZCBka2V5c1tpXSBvciBOb25lLAorICAgICAgICAgICAgICAgICAgICAgaSwKKyAgICAgICAgICAgICAgICAgICAgIGkgPCBsZW4oZCkgYW5kIGRrZXlzW2ldIG9yIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpXQorCisgICAgICAgICMgRGVwcmVjYXRlZCBtYXAoTm9uZSwgLi4uKQorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwKE5vbmUsIFNlcXVlbmNlQ2xhc3MoNSkpLCByYW5nZSg1KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwKE5vbmUsIGQpLCBkLmtleXMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwKE5vbmUsIGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXF1ZW5jZUNsYXNzKDUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcihkLml0ZXJrZXlzKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJ4eSIgKiBpICsgIlxuIikgIyBsaW5lIGkgaGFzIGxlbiAyKmkrMQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInIiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcChsZW4sIGYpLCByYW5nZSgxLCAyMSwgMikpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgIyBUZXN0IHppcCgpJ3MgdXNlIG9mIGl0ZXJhdG9ycy4KKyAgICBkZWYgdGVzdF9idWlsdGluX3ppcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKCpbXSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCgqWygxLCAyKSwgJ2FiJ10pLCBbKDEsICdhJyksICgyLCAnYicpXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHppcCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB6aXAsIHJhbmdlKDEwKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgemlwLCByYW5nZSgxMCksIHppcCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcChJdGVyYXRpbmdTZXF1ZW5jZUNsYXNzKDMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKDAsKSwgKDEsKSwgKDIsKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKFNlcXVlbmNlQ2xhc3MoMykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoMCwpLCAoMSwpLCAoMiwpXSkKKworICAgICAgICBkID0geyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLml0ZW1zKCksIHppcChkLCBkLml0ZXJ2YWx1ZXMoKSkpCisKKyAgICAgICAgIyBHZW5lcmF0ZSBhbGwgaW50cyBzdGFydGluZyBhdCBjb25zdHJ1Y3RvciBhcmcuCisgICAgICAgIGNsYXNzIEludHNGcm9tOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0KToKKyAgICAgICAgICAgICAgICBzZWxmLmkgPSBzdGFydAorCisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICAgICAgaSA9IHNlbGYuaQorICAgICAgICAgICAgICAgIHNlbGYuaSA9IGkrMQorICAgICAgICAgICAgICAgIHJldHVybiBpCisKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoImFcbiIgImJiYlxuIiAiY2NcbiIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAiciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKEludHNGcm9tKDApLCBmLCBJbnRzRnJvbSgtMTAwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoMCwgImFcbiIsIC0xMDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICJiYmJcbiIsIC05OSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgImNjXG4iLCAtOTgpXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoeHJhbmdlKDUpKSwgWyhpLCkgZm9yIGkgaW4gcmFuZ2UoNSldKQorCisgICAgICAgICMgQ2xhc3NlcyB0aGF0IGxpZSBhYm91dCB0aGVpciBsZW5ndGhzLgorICAgICAgICBjbGFzcyBOb0d1ZXNzTGVuNToKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICBpZiBpID49IDU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgICAgICAgICByZXR1cm4gaQorCisgICAgICAgIGNsYXNzIEd1ZXNzM0xlbjUoTm9HdWVzc0xlbjUpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDMKKworICAgICAgICBjbGFzcyBHdWVzczMwTGVuNShOb0d1ZXNzTGVuNSk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMzAKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihHdWVzczNMZW41KCkpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihHdWVzczMwTGVuNSgpKSwgMzApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKE5vR3Vlc3NMZW41KCkpLCB6aXAocmFuZ2UoNSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcChHdWVzczNMZW41KCkpLCB6aXAocmFuZ2UoNSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcChHdWVzczMwTGVuNSgpKSwgemlwKHJhbmdlKDUpKSkKKworICAgICAgICBleHBlY3RlZCA9IFsoaSwgaSkgZm9yIGkgaW4gcmFuZ2UoNSldCisgICAgICAgIGZvciB4IGluIE5vR3Vlc3NMZW41KCksIEd1ZXNzM0xlbjUoKSwgR3Vlc3MzMExlbjUoKToKKyAgICAgICAgICAgIGZvciB5IGluIE5vR3Vlc3NMZW41KCksIEd1ZXNzM0xlbjUoKSwgR3Vlc3MzMExlbjUoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCh4LCB5KSwgZXhwZWN0ZWQpCisKKyAgICAjIFRlc3QgcmVkdWNlcygpJ3MgdXNlIG9mIGl0ZXJhdG9ycy4KKyAgICBkZWYgdGVzdF9kZXByZWNhdGVkX2J1aWx0aW5fcmVkdWNlKHNlbGYpOgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfYnVpbHRpbl9yZWR1Y2UoKQorCisgICAgZGVmIF90ZXN0X2J1aWx0aW5fcmVkdWNlKHNlbGYpOgorICAgICAgICBmcm9tIG9wZXJhdG9yIGltcG9ydCBhZGQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoYWRkLCBTZXF1ZW5jZUNsYXNzKDUpKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGFkZCwgU2VxdWVuY2VDbGFzcyg1KSwgNDIpLCA1MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWR1Y2UsIGFkZCwgU2VxdWVuY2VDbGFzcygwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2UoYWRkLCBTZXF1ZW5jZUNsYXNzKDApLCA0MiksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShhZGQsIFNlcXVlbmNlQ2xhc3MoMSkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZShhZGQsIFNlcXVlbmNlQ2xhc3MoMSksIDQyKSwgNDIpCisKKyAgICAgICAgZCA9IHsib25lIjogMSwgInR3byI6IDIsICJ0aHJlZSI6IDN9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVkdWNlKGFkZCwgZCksICIiLmpvaW4oZC5rZXlzKCkpKQorCisgICAgIyBUaGlzIHRlc3QgY2FzZSB3aWxsIGJlIHJlbW92ZWQgaWYgd2UgZG9uJ3QgaGF2ZSBVbmljb2RlCisgICAgZGVmIHRlc3RfdW5pY29kZV9qb2luX2VuZGNhc2Uoc2VsZik6CisKKyAgICAgICAgIyBUaGlzIGNsYXNzIGluc2VydHMgYSBVbmljb2RlIG9iamVjdCBpbnRvIGl0cyBhcmd1bWVudCdzIG5hdHVyYWwKKyAgICAgICAgIyBpdGVyYXRpb24sIGluIHRoZSAzcmQgcG9zaXRpb24uCisgICAgICAgIGNsYXNzIE9oUGhvb2V5OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcSk6CisgICAgICAgICAgICAgICAgc2VsZi5pdCA9IGl0ZXIoc2VxKQorICAgICAgICAgICAgICAgIHNlbGYuaSA9IDAKKworICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAgICAgICAgIGkgPSBzZWxmLmkKKyAgICAgICAgICAgICAgICBzZWxmLmkgPSBpKzEKKyAgICAgICAgICAgICAgICBpZiBpID09IDI6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmljb2RlKCJmb29sZWQgeW91ISIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaXQubmV4dCgpCisKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoImFcbiIgKyAiYlxuIiArICJjXG4iKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAiciIpCisgICAgICAgICMgTmFzdHk6ICBzdHJpbmcuam9pbihzKSBjYW4ndCBrbm93IHdoZXRoZXIgdW5pY29kZS5qb2luKCkgaXMgbmVlZGVkCisgICAgICAgICMgdW50aWwgaXQncyBzZWVuIGFsbCBvZiBzJ3MgZWxlbWVudHMuICBCdXQgaW4gdGhpcyBjYXNlLCBmJ3MKKyAgICAgICAgIyBpdGVyYXRvciBjYW5ub3QgYmUgcmVzdGFydGVkLiAgU28gd2hhdCB3ZSdyZSB0ZXN0aW5nIGhlcmUgaXMKKyAgICAgICAgIyB3aGV0aGVyIHN0cmluZy5qb2luKCkgY2FuIG1hbmFnZSB0byByZW1lbWJlciBldmVyeXRoaW5nIGl0J3Mgc2VlbgorICAgICAgICAjIGFuZCBwYXNzIHRoYXQgb24gdG8gdW5pY29kZS5qb2luKCkuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdvdCA9ICIgLSAiLmpvaW4oT2hQaG9vZXkoZikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgdW5pY29kZSgiYVxuIC0gYlxuIC0gZm9vbGVkIHlvdSEgLSBjXG4iKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgaWYgbm90IGhhdmVfdW5pY29kZToKKyAgICAgICAgZGVmIHRlc3RfdW5pY29kZV9qb2luX2VuZGNhc2Uoc2VsZik6IHBhc3MKKworICAgICMgVGVzdCBpdGVyYXRvcnMgd2l0aCAneCBpbiB5JyBhbmQgJ3ggbm90IGluIHknLgorICAgIGRlZiB0ZXN0X2luX2FuZF9ub3RfaW4oc2VsZik6CisgICAgICAgIGZvciBzYzUgaW4gSXRlcmF0aW5nU2VxdWVuY2VDbGFzcyg1KSwgU2VxdWVuY2VDbGFzcyg1KToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaSwgc2M1KQorICAgICAgICAgICAgZm9yIGkgaW4gImFiYyIsIC0xLCA1LCA0Mi40MiwgKDMsIDQpLCBbXSwgezE6IDF9LCAzLTEyaiwgc2M1OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oaSwgc2M1KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiAzIGluIDEyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogMyBub3QgaW4gbWFwKQorCisgICAgICAgIGQgPSB7Im9uZSI6IDEsICJ0d28iOiAyLCAidGhyZWUiOiAzLCAxajogMmp9CisgICAgICAgIGZvciBrIGluIGQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGssIGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGssIGQuaXRlcnZhbHVlcygpKQorICAgICAgICBmb3IgdiBpbiBkLnZhbHVlcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2LCBkLml0ZXJ2YWx1ZXMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odiwgZCkKKyAgICAgICAgZm9yIGssIHYgaW4gZC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKGssIHYpLCBkLml0ZXJpdGVtcygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigodiwgayksIGQuaXRlcml0ZW1zKCkpCisKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoImFcbiIgImJcbiIgImNcbiIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAiciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBjaHVuayBpbiAiYWJjIjoKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGNodW5rLCBmKQorICAgICAgICAgICAgICAgIGYuc2VlaygwLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKGNodW5rICsgIlxuIiksIGYpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgIyBUZXN0IGl0ZXJhdG9ycyB3aXRoIG9wZXJhdG9yLmNvdW50T2YgKFB5U2VxdWVuY2VfQ291bnQpLgorICAgIGRlZiB0ZXN0X2NvdW50T2Yoc2VsZik6CisgICAgICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IGNvdW50T2YKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudE9mKFsxLDIsMiwzLDIsNV0sIDIpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50T2YoKDEsMiwyLDMsMiw1KSwgMiksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRPZigiMTIyMzI1IiwgIjIiKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudE9mKCIxMjIzMjUiLCAiNiIpLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY291bnRPZiwgNDIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY291bnRPZiwgY291bnRPZiwgY291bnRPZikKKworICAgICAgICBkID0geyJvbmUiOiAzLCAidHdvIjogMywgInRocmVlIjogMywgMWo6IDJqfQorICAgICAgICBmb3IgayBpbiBkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudE9mKGQsIGspLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50T2YoZC5pdGVydmFsdWVzKCksIDMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50T2YoZC5pdGVydmFsdWVzKCksIDJqKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudE9mKGQuaXRlcnZhbHVlcygpLCAxaiksIDApCisKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoImFcbiIgImJcbiIgImNcbiIgImJcbiIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAiciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBsZXR0ZXIsIGNvdW50IGluICgiYSIsIDEpLCAoImIiLCAyKSwgKCJjIiwgMSksICgiZCIsIDApOgorICAgICAgICAgICAgICAgIGYuc2VlaygwLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRPZihmLCBsZXR0ZXIgKyAiXG4iKSwgY291bnQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgIyBUZXN0IGl0ZXJhdG9ycyB3aXRoIG9wZXJhdG9yLmluZGV4T2YgKFB5U2VxdWVuY2VfSW5kZXgpLgorICAgIGRlZiB0ZXN0X2luZGV4T2Yoc2VsZik6CisgICAgICAgIGZyb20gb3BlcmF0b3IgaW1wb3J0IGluZGV4T2YKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRleE9mKFsxLDIsMiwzLDIsNV0sIDEpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGV4T2YoKDEsMiwyLDMsMiw1KSwgMiksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5kZXhPZigoMSwyLDIsMywyLDUpLCAzKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRleE9mKCgxLDIsMiwzLDIsNSksIDUpLCA1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbmRleE9mLCAoMSwyLDIsMywyLDUpLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbmRleE9mLCAoMSwyLDIsMywyLDUpLCA2KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5kZXhPZigiMTIyMzI1IiwgIjIiKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRleE9mKCIxMjIzMjUiLCAiNSIpLCA1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbmRleE9mLCAiMTIyMzI1IiwgIjYiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW5kZXhPZiwgNDIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW5kZXhPZiwgaW5kZXhPZiwgaW5kZXhPZikKKworICAgICAgICBmID0gb3BlbihURVNURk4sICJ3IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgiYVxuIiAiYlxuIiAiY1xuIiAiZFxuIiAiZVxuIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmID0gb3BlbihURVNURk4sICJyIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZml0ZXIgPSBpdGVyKGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGV4T2YoZml0ZXIsICJiXG4iKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5kZXhPZihmaXRlciwgImRcbiIpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRleE9mKGZpdGVyLCAiZVxuIiksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbmRleE9mLCBmaXRlciwgImFcbiIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGljbGFzcyA9IEl0ZXJhdGluZ1NlcXVlbmNlQ2xhc3MoMykKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGV4T2YoaWNsYXNzLCBpKSwgaSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW5kZXhPZiwgaWNsYXNzLCAtMSkKKworICAgICMgVGVzdCBpdGVyYXRvcnMgd2l0aCBmaWxlLndyaXRlbGluZXMoKS4KKyAgICBkZWYgdGVzdF93cml0ZWxpbmVzKHNlbGYpOgorICAgICAgICBmID0gZmlsZShURVNURk4sICJ3IikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYud3JpdGVsaW5lcywgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi53cml0ZWxpbmVzLCA0MikKKworICAgICAgICAgICAgZi53cml0ZWxpbmVzKFsiMVxuIiwgIjJcbiJdKQorICAgICAgICAgICAgZi53cml0ZWxpbmVzKCgiM1xuIiwgIjRcbiIpKQorICAgICAgICAgICAgZi53cml0ZWxpbmVzKHsnNVxuJzogTm9uZX0pCisgICAgICAgICAgICBmLndyaXRlbGluZXMoe30pCisKKyAgICAgICAgICAgICMgVHJ5IGEgYmlnIGNodW5rIHRvby4KKyAgICAgICAgICAgIGNsYXNzIEl0ZXJhdG9yOgorICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydCwgZmluaXNoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGFydCA9IHN0YXJ0CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmluaXNoID0gZmluaXNoCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaSA9IHNlbGYuc3RhcnQKKworICAgICAgICAgICAgICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmkgPj0gc2VsZi5maW5pc2g6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0cihzZWxmLmkpICsgJ1xuJworICAgICAgICAgICAgICAgICAgICBzZWxmLmkgKz0gMQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgICAgIGNsYXNzIFdoYXRldmVyOgorICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydCwgZmluaXNoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGFydCA9IHN0YXJ0CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmluaXNoID0gZmluaXNoCisKKyAgICAgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRvcihzZWxmLnN0YXJ0LCBzZWxmLmZpbmlzaCkKKworICAgICAgICAgICAgZi53cml0ZWxpbmVzKFdoYXRldmVyKDYsIDYrMjAwMCkpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgZiA9IGZpbGUoVEVTVEZOKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBbc3RyKGkpICsgIlxuIiBmb3IgaSBpbiByYW5nZSgxLCAyMDA2KV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChmKSwgZXhwZWN0ZWQpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKworICAgICMgVGVzdCBpdGVyYXRvcnMgb24gUkhTIG9mIHVucGFja2luZyBhc3NpZ25tZW50cy4KKyAgICBkZWYgdGVzdF91bnBhY2tfaXRlcihzZWxmKToKKyAgICAgICAgYSwgYiA9IDEsIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSwgYiksICgxLCAyKSkKKworICAgICAgICBhLCBiLCBjID0gSXRlcmF0aW5nU2VxdWVuY2VDbGFzcygzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLCBiLCBjKSwgKDAsIDEsIDIpKQorCisgICAgICAgIHRyeTogICAgIyB0b28gbWFueSB2YWx1ZXMKKyAgICAgICAgICAgIGEsIGIgPSBJdGVyYXRpbmdTZXF1ZW5jZUNsYXNzKDMpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgVmFsdWVFcnJvciIpCisKKyAgICAgICAgdHJ5OiAgICAjIG5vdCBlbm91Z2ggdmFsdWVzCisgICAgICAgICAgICBhLCBiLCBjID0gSXRlcmF0aW5nU2VxdWVuY2VDbGFzcygyKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFZhbHVlRXJyb3IiKQorCisgICAgICAgIHRyeTogICAgIyBub3QgaXRlcmFibGUKKyAgICAgICAgICAgIGEsIGIsIGMgPSBsZW4KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFR5cGVFcnJvciIpCisKKyAgICAgICAgYSwgYiwgYyA9IHsxOiA0MiwgMjogNDIsIDM6IDQyfS5pdGVydmFsdWVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSwgYiwgYyksICg0MiwgNDIsIDQyKSkKKworICAgICAgICBmID0gb3BlbihURVNURk4sICJ3IikKKyAgICAgICAgbGluZXMgPSAoImFcbiIsICJiYlxuIiwgImNjY1xuIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgZi53cml0ZShsaW5lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInIiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhLCBiLCBjID0gZgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSwgYiwgYyksIGxpbmVzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAoYSwgYiksIChjLCkgPSBJdGVyYXRpbmdTZXF1ZW5jZUNsYXNzKDIpLCB7NDI6IDI0fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLCBiLCBjKSwgKDAsIDEsIDQyKSkKKworCisgICAgQGNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3JlZl9jb3VudGluZ19iZWhhdmlvcihzZWxmKToKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgY291bnQgPSAwCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIGNscy5jb3VudCArPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX25ld19fKGNscykKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGNscyA9IHNlbGYuX19jbGFzc19fCisgICAgICAgICAgICAgICAgYXNzZXJ0IGNscy5jb3VudCA+IDAKKyAgICAgICAgICAgICAgICBjbHMuY291bnQgLT0gMQorICAgICAgICB4ID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5jb3VudCwgMSkKKyAgICAgICAgZGVsIHgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmNvdW50LCAwKQorICAgICAgICBsID0gW0MoKSwgQygpLCBDKCldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5jb3VudCwgMykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYSwgYiA9IGl0ZXIobCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlbCBsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5jb3VudCwgMCkKKworCisgICAgIyBNYWtlIHN1cmUgU3RvcEl0ZXJhdGlvbiBpcyBhICJzaW5rIHN0YXRlIi4KKyAgICAjIFRoaXMgdGVzdHMgdmFyaW91cyB0aGluZ3MgdGhhdCB3ZXJlbid0IHNpbmsgc3RhdGVzIGluIFB5dGhvbiAyLjIuMSwKKyAgICAjIHBsdXMgdmFyaW91cyB0aGluZ3MgdGhhdCBhbHdheXMgd2VyZSBmaW5lLgorCisgICAgZGVmIHRlc3Rfc2lua3N0YXRlX2xpc3Qoc2VsZik6CisgICAgICAgICMgVGhpcyB1c2VkIHRvIGZhaWwKKyAgICAgICAgYSA9IHJhbmdlKDUpCisgICAgICAgIGIgPSBpdGVyKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgcmFuZ2UoNSkpCisgICAgICAgIGEuZXh0ZW5kKHJhbmdlKDUsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBbXSkKKworICAgIGRlZiB0ZXN0X3NpbmtzdGF0ZV90dXBsZShzZWxmKToKKyAgICAgICAgYSA9ICgwLCAxLCAyLCAzLCA0KQorICAgICAgICBiID0gaXRlcihhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIHJhbmdlKDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIFtdKQorCisgICAgZGVmIHRlc3Rfc2lua3N0YXRlX3N0cmluZyhzZWxmKToKKyAgICAgICAgYSA9ICJhYmNkZSIKKyAgICAgICAgYiA9IGl0ZXIoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBbJ2EnLCAnYicsICdjJywgJ2QnLCAnZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIFtdKQorCisgICAgZGVmIHRlc3Rfc2lua3N0YXRlX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIFRoaXMgdXNlZCB0byBmYWlsCisgICAgICAgIGEgPSBTZXF1ZW5jZUNsYXNzKDUpCisgICAgICAgIGIgPSBpdGVyKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgcmFuZ2UoNSkpCisgICAgICAgIGEubiA9IDEwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgW10pCisKKyAgICBkZWYgdGVzdF9zaW5rc3RhdGVfY2FsbGFibGUoc2VsZik6CisgICAgICAgICMgVGhpcyB1c2VkIHRvIGZhaWwKKyAgICAgICAgZGVmIHNwYW0oc3RhdGU9WzBdKToKKyAgICAgICAgICAgIGkgPSBzdGF0ZVswXQorICAgICAgICAgICAgc3RhdGVbMF0gPSBpKzEKKyAgICAgICAgICAgIGlmIGkgPT0gMTA6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IsICJzaG91bGRuJ3QgaGF2ZSBnb3R0ZW4gdGhpcyBmYXIiCisgICAgICAgICAgICByZXR1cm4gaQorICAgICAgICBiID0gaXRlcihzcGFtLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIHJhbmdlKDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIFtdKQorCisgICAgZGVmIHRlc3Rfc2lua3N0YXRlX2RpY3Qoc2VsZik6CisgICAgICAgICMgWFhYIEZvciBhIG1vcmUgdGhvcm91Z2ggdGVzdCwgc2VlIHRvd2FyZHMgdGhlIGVuZCBvZjoKKyAgICAgICAgIyBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDItSnVseS8wMjY1MTIuaHRtbAorICAgICAgICBhID0gezE6MSwgMjoyLCAwOjAsIDQ6NCwgMzozfQorICAgICAgICBmb3IgYiBpbiBpdGVyKGEpLCBhLml0ZXJrZXlzKCksIGEuaXRlcml0ZW1zKCksIGEuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgYiA9IGl0ZXIoYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpc3QoYikpLCA1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBbXSkKKworICAgIGRlZiB0ZXN0X3NpbmtzdGF0ZV95aWVsZChzZWxmKToKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICAgICAgeWllbGQgaQorICAgICAgICBiID0gZ2VuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCByYW5nZSg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBbXSkKKworICAgIGRlZiB0ZXN0X3NpbmtzdGF0ZV9yYW5nZShzZWxmKToKKyAgICAgICAgYSA9IHhyYW5nZSg1KQorICAgICAgICBiID0gaXRlcihhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIHJhbmdlKDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIFtdKQorCisgICAgZGVmIHRlc3Rfc2lua3N0YXRlX2VudW1lcmF0ZShzZWxmKToKKyAgICAgICAgYSA9IHJhbmdlKDUpCisgICAgICAgIGUgPSBlbnVtZXJhdGUoYSkKKyAgICAgICAgYiA9IGl0ZXIoZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCB6aXAocmFuZ2UoNSksIHJhbmdlKDUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBbXSkKKworICAgIGRlZiB0ZXN0XzM3MjAoc2VsZik6CisgICAgICAgICMgQXZvaWQgYSBjcmFzaCwgd2hlbiBhbiBpdGVyYXRvciBkZWxldGVzIGl0cyBuZXh0KCkgbWV0aG9kLgorICAgICAgICBjbGFzcyBCYWRJdGVyYXRvcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgICAgICAgICBkZWwgQmFkSXRlcmF0b3IubmV4dAorICAgICAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGkgaW4gQmFkSXRlcmF0b3IoKSA6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZXh0ZW5kaW5nX2xpc3Rfd2l0aF9pdGVyYXRvcl9kb2VzX25vdF9zZWdmYXVsdChzZWxmKToKKyAgICAgICAgIyBUaGUgY29kZSB0byBleHRlbmQgYSBsaXN0IHdpdGggYW4gaXRlcmF0b3IgaGFzIGEgZmFpcgorICAgICAgICAjIGFtb3VudCBvZiBub250cml2aWFsIGxvZ2ljIGluIHRlcm1zIG9mIGd1ZXNzaW5nIGhvdworICAgICAgICAjIG11Y2ggbWVtb3J5IHRvIGFsbG9jYXRlIGluIGFkdmFuY2UsICJzdGVhbGluZyIgcmVmcywKKyAgICAgICAgIyBhbmQgdGhlbiBzaHJpbmtpbmcgYXQgdGhlIGVuZC4gIFRoaXMgaXMgYSBiYXNpYyBzbW9rZQorICAgICAgICAjIHRlc3QgZm9yIHRoYXQgc2NlbmFyaW8uCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUwMCk6CisgICAgICAgICAgICAgICAgeWllbGQgaQorICAgICAgICBsc3QgPSBbMF0gKiA1MDAKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMjQwKToKKyAgICAgICAgICAgIGxzdC5wb3AoMCkKKyAgICAgICAgbHN0LmV4dGVuZChnZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgNzYwKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoVGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaXRlcmxlbi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2l0ZXJsZW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhmNDNjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2l0ZXJsZW4ucHkKQEAgLTAsMCArMSwyNTcgQEAKKyIiIiBUZXN0IEl0ZXJhdG9yIExlbmd0aCBUcmFuc3BhcmVuY3kKKworU29tZSBmdW5jdGlvbnMgb3IgbWV0aG9kcyB3aGljaCBhY2NlcHQgZ2VuZXJhbCBpdGVyYWJsZSBhcmd1bWVudHMgaGF2ZQorb3B0aW9uYWwsIG1vcmUgZWZmaWNpZW50IGNvZGUgcGF0aHMgaWYgdGhleSBrbm93IGhvdyBtYW55IGl0ZW1zIHRvIGV4cGVjdC4KK0ZvciBpbnN0YW5jZSwgbWFwKGZ1bmMsIGl0ZXJhYmxlKSwgd2lsbCBwcmUtYWxsb2NhdGUgdGhlIGV4YWN0IGFtb3VudCBvZgorc3BhY2UgcmVxdWlyZWQgd2hlbmV2ZXIgdGhlIGl0ZXJhYmxlIGNhbiByZXBvcnQgaXRzIGxlbmd0aC4KKworVGhlIGRlc2lyZWQgaW52YXJpYW50IGlzOiAgbGVuKGl0KT09bGVuKGxpc3QoaXQpKS4KKworQSBjb21wbGljYXRpb24gaXMgdGhhdCBhbiBpdGVyYWJsZSBhbmQgaXRlcmF0b3IgY2FuIGJlIHRoZSBzYW1lIG9iamVjdC4gVG8KK21haW50YWluIHRoZSBpbnZhcmlhbnQsIGFuIGl0ZXJhdG9yIG5lZWRzIHRvIGR5bmFtaWNhbGx5IHVwZGF0ZSBpdHMgbGVuZ3RoLgorRm9yIGluc3RhbmNlLCBhbiBpdGVyYWJsZSBzdWNoIGFzIHhyYW5nZSgxMCkgYWx3YXlzIHJlcG9ydHMgaXRzIGxlbmd0aCBhcyB0ZW4sCitidXQgaXQ9aXRlcih4cmFuZ2UoMTApKSBzdGFydHMgYXQgdGVuLCBhbmQgdGhlbiBnb2VzIHRvIG5pbmUgYWZ0ZXIgaXQubmV4dCgpLgorSGF2aW5nIHRoaXMgY2FwYWJpbGl0eSBtZWFucyB0aGF0IG1hcCgpIGNhbiBpZ25vcmUgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4KK21hcChmdW5jLCBpdGVyYWJsZSkgYW5kIG1hcChmdW5jLCBpdGVyKGl0ZXJhYmxlKSkuCisKK1doZW4gdGhlIGl0ZXJhYmxlIGlzIGltbXV0YWJsZSwgdGhlIGltcGxlbWVudGF0aW9uIGNhbiBzdHJhaWdodC1mb3J3YXJkbHkKK3JlcG9ydCB0aGUgb3JpZ2luYWwgbGVuZ3RoIG1pbnVzIHRoZSBjdW11bGF0aXZlIG51bWJlciBvZiBjYWxscyB0byBuZXh0KCkuCitUaGlzIGlzIHRoZSBjYXNlIGZvciB0dXBsZXMsIHhyYW5nZSBvYmplY3RzLCBhbmQgaXRlcnRvb2xzLnJlcGVhdCgpLgorCitTb21lIGNvbnRhaW5lcnMgYmVjb21lIHRlbXBvcmFyaWx5IGltbXV0YWJsZSBkdXJpbmcgaXRlcmF0aW9uLiAgVGhpcyBpbmNsdWRlcworZGljdHMsIHNldHMsIGFuZCBjb2xsZWN0aW9ucy5kZXF1ZS4gIFRoZWlyIGltcGxlbWVudGF0aW9uIGlzIGVxdWFsbHkgc2ltcGxlCit0aG91Z2ggdGhleSBuZWVkIHRvIHBlcm1hbmVudGx5IHNldCB0aGVpciBsZW5ndGggdG8gemVybyB3aGVuZXZlciB0aGVyZSBpcworYW4gYXR0ZW1wdCB0byBpdGVyYXRlIGFmdGVyIGEgbGVuZ3RoIG11dGF0aW9uLgorCitUaGUgc2l0dWF0aW9uIHNsaWdodGx5IG1vcmUgaW52b2x2ZWQgd2hlbmV2ZXIgYW4gb2JqZWN0IGFsbG93cyBsZW5ndGggbXV0YXRpb24KK2R1cmluZyBpdGVyYXRpb24uICBMaXN0cyBhbmQgc2VxdWVuY2UgaXRlcmF0b3JzIGFyZSBkeW5hbWljYWxseSB1cGRhdGFibGUuCitTbywgaWYgYSBsaXN0IGlzIGV4dGVuZGVkIGR1cmluZyBpdGVyYXRpb24sIHRoZSBpdGVyYXRvciB3aWxsIGNvbnRpbnVlIHRocm91Z2gKK3RoZSBuZXcgaXRlbXMuICBJZiBpdCBzaHJpbmtzIHRvIGEgcG9pbnQgYmVmb3JlIHRoZSBtb3N0IHJlY2VudCBpdGVyYXRpb24sCit0aGVuIG5vIGZ1cnRoZXIgaXRlbXMgYXJlIGF2YWlsYWJsZSBhbmQgdGhlIGxlbmd0aCBpcyByZXBvcnRlZCBhdCB6ZXJvLgorCitSZXZlcnNlZCBvYmplY3RzIGNhbiBhbHNvIGJlIHdyYXBwZWQgYXJvdW5kIG11dGFibGUgb2JqZWN0czsgaG93ZXZlciwgYW55CithcHBlbmRzIGFmdGVyIHRoZSBjdXJyZW50IHBvc2l0aW9uIGFyZSBpZ25vcmVkLiAgQW55IG90aGVyIGFwcHJvYWNoIGxlYWRzCit0byBjb25mdXNpb24gYW5kIHBvc3NpYmx5IHJldHVybmluZyB0aGUgc2FtZSBpdGVtIG1vcmUgdGhhbiBvbmNlLgorCitUaGUgaXRlcmF0b3JzIG5vdCBsaXN0ZWQgYWJvdmUsIHN1Y2ggYXMgZW51bWVyYXRlIGFuZCB0aGUgb3RoZXIgaXRlcnRvb2xzLAorYXJlIG5vdCBsZW5ndGggdHJhbnNwYXJlbnQgYmVjYXVzZSB0aGV5IGhhdmUgbm8gd2F5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4KK2l0ZXJhYmxlcyB0aGF0IHJlcG9ydCBzdGF0aWMgbGVuZ3RoIGFuZCBpdGVyYXRvcnMgd2hvc2UgbGVuZ3RoIGNoYW5nZXMgd2l0aAorZWFjaCBjYWxsIChpLmUuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gZW51bWVyYXRlKCdhYmMnKSBhbmQKK2VudW1lcmF0ZShpdGVyKCdhYmMnKSkuCisKKyIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcmVwZWF0Citmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQorZnJvbSBfX2J1aWx0aW5fXyBpbXBvcnQgbGVuIGFzIF9sZW4KKworbiA9IDEwCisKK2RlZiBsZW4ob2JqKToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBfbGVuKG9iaikKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIG5vdGU6IHRoaXMgaXMgYW4gaW50ZXJuYWwgdW5kb2N1bWVudGVkIEFQSSwKKyAgICAgICAgICAgICMgZG9uJ3QgcmVseSBvbiBpdCBpbiB5b3VyIG93biBwcm9ncmFtcworICAgICAgICAgICAgcmV0dXJuIG9iai5fX2xlbmd0aF9oaW50X18oKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKworY2xhc3MgVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaW52YXJpYW50KHNlbGYpOgorICAgICAgICBpdCA9IHNlbGYuaXQKKyAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQoeHJhbmdlKDEsIG4rMSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBpKQorICAgICAgICAgICAgaXQubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgaXQubmV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorCitjbGFzcyBUZXN0VGVtcG9yYXJpbHlJbW11dGFibGUoVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnMpOgorCisgICAgZGVmIHRlc3RfaW1tdXRhYmxlX2R1cmluZ19pdGVyYXRpb24oc2VsZik6CisgICAgICAgICMgb2JqZWN0cyBzdWNoIGFzIGRlcXVlcywgc2V0cywgYW5kIGRpY3Rpb25hcmllcyBlbmZvcmNlCisgICAgICAgICMgbGVuZ3RoIGltbXV0YWJpbGl0eSAgZHVyaW5nIGl0ZXJhdGlvbgorCisgICAgICAgIGl0ID0gc2VsZi5pdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4pCisgICAgICAgIGl0Lm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMSkKKyAgICAgICAgc2VsZi5tdXRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGl0Lm5leHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKworIyMgLS0tLS0tLSBDb25jcmV0ZSBUeXBlIFRlc3RzIC0tLS0tLS0KKworY2xhc3MgVGVzdFJlcGVhdChUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucyk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuaXQgPSByZXBlYXQoTm9uZSwgbikKKworICAgIGRlZiB0ZXN0X25vX2xlbl9mb3JfaW5maW5pdGVfcmVwZWF0KHNlbGYpOgorICAgICAgICAjIFRoZSByZXBlYXQoKSBvYmplY3QgY2FuIGFsc28gYmUgaW5maW5pdGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsZW4sIHJlcGVhdChOb25lKSkKKworY2xhc3MgVGVzdFhyYW5nZShUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucyk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuaXQgPSBpdGVyKHhyYW5nZShuKSkKKworY2xhc3MgVGVzdFhyYW5nZUN1c3RvbVJldmVyc2VkKFRlc3RJbnZhcmlhbnRXaXRob3V0TXV0YXRpb25zKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5pdCA9IHJldmVyc2VkKHhyYW5nZShuKSkKKworY2xhc3MgVGVzdFR1cGxlKFRlc3RJbnZhcmlhbnRXaXRob3V0TXV0YXRpb25zKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5pdCA9IGl0ZXIodHVwbGUoeHJhbmdlKG4pKSkKKworIyMgLS0tLS0tLSBUeXBlcyB0aGF0IHNob3VsZCBub3QgYmUgbXV0YXRlZCBkdXJpbmcgaXRlcmF0aW9uIC0tLS0tLS0KKworY2xhc3MgVGVzdERlcXVlKFRlc3RUZW1wb3JhcmlseUltbXV0YWJsZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGQgPSBkZXF1ZSh4cmFuZ2UobikpCisgICAgICAgIHNlbGYuaXQgPSBpdGVyKGQpCisgICAgICAgIHNlbGYubXV0YXRlID0gZC5wb3AKKworY2xhc3MgVGVzdERlcXVlUmV2ZXJzZWQoVGVzdFRlbXBvcmFyaWx5SW1tdXRhYmxlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZCA9IGRlcXVlKHhyYW5nZShuKSkKKyAgICAgICAgc2VsZi5pdCA9IHJldmVyc2VkKGQpCisgICAgICAgIHNlbGYubXV0YXRlID0gZC5wb3AKKworY2xhc3MgVGVzdERpY3RLZXlzKFRlc3RUZW1wb3JhcmlseUltbXV0YWJsZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGQgPSBkaWN0LmZyb21rZXlzKHhyYW5nZShuKSkKKyAgICAgICAgc2VsZi5pdCA9IGl0ZXIoZCkKKyAgICAgICAgc2VsZi5tdXRhdGUgPSBkLnBvcGl0ZW0KKworY2xhc3MgVGVzdERpY3RJdGVtcyhUZXN0VGVtcG9yYXJpbHlJbW11dGFibGUpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBkID0gZGljdC5mcm9ta2V5cyh4cmFuZ2UobikpCisgICAgICAgIHNlbGYuaXQgPSBkLml0ZXJpdGVtcygpCisgICAgICAgIHNlbGYubXV0YXRlID0gZC5wb3BpdGVtCisKK2NsYXNzIFRlc3REaWN0VmFsdWVzKFRlc3RUZW1wb3JhcmlseUltbXV0YWJsZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGQgPSBkaWN0LmZyb21rZXlzKHhyYW5nZShuKSkKKyAgICAgICAgc2VsZi5pdCA9IGQuaXRlcnZhbHVlcygpCisgICAgICAgIHNlbGYubXV0YXRlID0gZC5wb3BpdGVtCisKK2NsYXNzIFRlc3RTZXQoVGVzdFRlbXBvcmFyaWx5SW1tdXRhYmxlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZCA9IHNldCh4cmFuZ2UobikpCisgICAgICAgIHNlbGYuaXQgPSBpdGVyKGQpCisgICAgICAgIHNlbGYubXV0YXRlID0gZC5wb3AKKworIyMgLS0tLS0tLSBUeXBlcyB0aGF0IGNhbiBtdXRhdGUgZHVyaW5nIGl0ZXJhdGlvbiAtLS0tLS0tCisKK2NsYXNzIFRlc3RMaXN0KFRlc3RJbnZhcmlhbnRXaXRob3V0TXV0YXRpb25zKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5pdCA9IGl0ZXIocmFuZ2UobikpCisKKyAgICBkZWYgdGVzdF9tdXRhdGlvbihzZWxmKToKKyAgICAgICAgZCA9IHJhbmdlKG4pCisgICAgICAgIGl0ID0gaXRlcihkKQorICAgICAgICBpdC5uZXh0KCkKKyAgICAgICAgaXQubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0yKQorICAgICAgICBkLmFwcGVuZChuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMSkgICMgZ3JvdyB3aXRoIGFwcGVuZAorICAgICAgICBkWzE6XSA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgW10pCisgICAgICAgIGQuZXh0ZW5kKHhyYW5nZSgyMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKworY2xhc3MgVGVzdExpc3RSZXZlcnNlZChUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucyk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuaXQgPSByZXZlcnNlZChyYW5nZShuKSkKKworICAgIGRlZiB0ZXN0X211dGF0aW9uKHNlbGYpOgorICAgICAgICBkID0gcmFuZ2UobikKKyAgICAgICAgaXQgPSByZXZlcnNlZChkKQorICAgICAgICBpdC5uZXh0KCkKKyAgICAgICAgaXQubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0yKQorICAgICAgICBkLmFwcGVuZChuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMikgICMgaWdub3JlIGFwcGVuZAorICAgICAgICBkWzE6XSA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgW10pICAjIGNvbmZpcm0gaW52YXJpYW50CisgICAgICAgIGQuZXh0ZW5kKHhyYW5nZSgyMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKworIyMgLS0gQ2hlY2sgdG8gbWFrZSBzdXJlIGV4Y2VwdGlvbnMgYXJlIG5vdCBzdXBwcmVzc2VkIGJ5IF9fbGVuZ3RoX2hpbnRfXygpCisKKworY2xhc3MgQmFkTGVuKG9iamVjdCk6CisgICAgZGVmIF9faXRlcl9fKHNlbGYpOiByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignaGVsbG8nKQorCitjbGFzcyBCYWRMZW5ndGhIaW50KG9iamVjdCk6CisgICAgZGVmIF9faXRlcl9fKHNlbGYpOiByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisgICAgZGVmIF9fbGVuZ3RoX2hpbnRfXyhzZWxmKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdoZWxsbycpCisKK2NsYXNzIE5vbmVMZW5ndGhIaW50KG9iamVjdCk6CisgICAgZGVmIF9faXRlcl9fKHNlbGYpOiByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisgICAgZGVmIF9fbGVuZ3RoX2hpbnRfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworY2xhc3MgVGVzdExlbmd0aEhpbnRFeGNlcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2lzc3VlMTI0MjY1NyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBsaXN0LCBCYWRMZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBsaXN0LCBCYWRMZW5ndGhIaW50KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgW10uZXh0ZW5kLCBCYWRMZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBbXS5leHRlbmQsIEJhZExlbmd0aEhpbnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXAsIEJhZExlbigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcCwgQmFkTGVuZ3RoSGludCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGZpbHRlciwgTm9uZSwgQmFkTGVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZmlsdGVyLCBOb25lLCBCYWRMZW5ndGhIaW50KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbWFwLCBjaHIsIEJhZExlbigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG1hcCwgY2hyLCBCYWRMZW5ndGhIaW50KCkpCisgICAgICAgIGIgPSBieXRlYXJyYXkocmFuZ2UoMTApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGIuZXh0ZW5kLCBCYWRMZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBiLmV4dGVuZCwgQmFkTGVuZ3RoSGludCgpKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9oaW50KHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBhbiBpbnZhbGlkIHJlc3VsdCBkb2Vzbid0IG11Y2stdXAgdGhlIHdvcmtzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChOb25lTGVuZ3RoSGludCgpKSwgbGlzdChyYW5nZSgxMCkpKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB1bml0dGVzdHMgPSBbCisgICAgICAgIFRlc3RSZXBlYXQsCisgICAgICAgIFRlc3RYcmFuZ2UsCisgICAgICAgIFRlc3RYcmFuZ2VDdXN0b21SZXZlcnNlZCwKKyAgICAgICAgVGVzdFR1cGxlLAorICAgICAgICBUZXN0RGVxdWUsCisgICAgICAgIFRlc3REZXF1ZVJldmVyc2VkLAorICAgICAgICBUZXN0RGljdEtleXMsCisgICAgICAgIFRlc3REaWN0SXRlbXMsCisgICAgICAgIFRlc3REaWN0VmFsdWVzLAorICAgICAgICBUZXN0U2V0LAorICAgICAgICBUZXN0TGlzdCwKKyAgICAgICAgVGVzdExpc3RSZXZlcnNlZCwKKyAgICAgICAgVGVzdExlbmd0aEhpbnRFeGNlcHRpb25zLAorICAgIF0KKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp1bml0dGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2l0ZXJ0b29scy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2l0ZXJ0b29scy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjlmNDM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CkBAIC0wLDAgKzEsMTY2NSBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSBpdGVydG9vbHMgaW1wb3J0ICoKK2Zyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKK2Zyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAorZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uCitpbXBvcnQgc3lzCitpbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBjb3B5CitpbXBvcnQgcGlja2xlCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCittYXhzaXplID0gdGVzdF9zdXBwb3J0Lk1BWF9QeV9zc2l6ZV90CittaW5zaXplID0gLW1heHNpemUtMQorCitkZWYgb25lYXJnKHgpOgorICAgICdUZXN0IGZ1bmN0aW9uIG9mIG9uZSBhcmd1bWVudCcKKyAgICByZXR1cm4gMip4CisKK2RlZiBlcnJmdW5jKCphcmdzKToKKyAgICAnVGVzdCBmdW5jdGlvbiB0aGF0IHJhaXNlcyBhbiBlcnJvcicKKyAgICByYWlzZSBWYWx1ZUVycm9yCisKK2RlZiBnZW4zKCk6CisgICAgJ05vbi1yZXN0YXJ0YWJsZSBzb3VyY2Ugc2VxdWVuY2UnCisgICAgZm9yIGkgaW4gKDAsIDEsIDIpOgorICAgICAgICB5aWVsZCBpCisKK2RlZiBpc0V2ZW4oeCk6CisgICAgJ1Rlc3QgcHJlZGljYXRlJworICAgIHJldHVybiB4JTI9PTAKKworZGVmIGlzT2RkKHgpOgorICAgICdUZXN0IHByZWRpY2F0ZScKKyAgICByZXR1cm4geCUyPT0xCisKK2NsYXNzIFN0b3BOb3c6CisgICAgJ0NsYXNzIGVtdWxhdGluZyBhbiBlbXB0eSBpdGVyYWJsZS4nCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKK2RlZiB0YWtlKG4sIHNlcSk6CisgICAgJ0NvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBwYXJ0aWFsbHkgY29uc3VtaW5nIGEgbG9uZyBvZiBpbmZpbml0ZSBpdGVyYWJsZScKKyAgICByZXR1cm4gbGlzdChpc2xpY2Uoc2VxLCBuKSkKKworZGVmIHByb2QoaXRlcmFibGUpOgorICAgIHJldHVybiByZWR1Y2Uob3BlcmF0b3IubXVsLCBpdGVyYWJsZSwgMSkKKworZGVmIGZhY3Qobik6CisgICAgJ0ZhY3RvcmlhbCcKKyAgICByZXR1cm4gcHJvZChyYW5nZSgxLCBuKzEpKQorCitjbGFzcyBUZXN0QmFzaWNPcHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2NoYWluKHNlbGYpOgorCisgICAgICAgIGRlZiBjaGFpbjIoKml0ZXJhYmxlcyk6CisgICAgICAgICAgICAnUHVyZSBweXRob24gdmVyc2lvbiBpbiB0aGUgZG9jcycKKyAgICAgICAgICAgIGZvciBpdCBpbiBpdGVyYWJsZXM6CisgICAgICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gaXQ6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW1lbnQKKworICAgICAgICBmb3IgYyBpbiAoY2hhaW4sIGNoYWluMik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYygnYWJjJywgJ2RlZicpKSwgbGlzdCgnYWJjZGVmJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYygnYWJjJykpLCBsaXN0KCdhYmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjKCcnKSksIFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDQsIGMoJ2FiYycsICdkZWYnKSksIGxpc3QoJ2FiY2QnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCxjKDIsIDMpKQorCisgICAgZGVmIHRlc3RfY2hhaW5fZnJvbV9pdGVyYWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNoYWluLmZyb21faXRlcmFibGUoWydhYmMnLCAnZGVmJ10pKSwgbGlzdCgnYWJjZGVmJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjaGFpbi5mcm9tX2l0ZXJhYmxlKFsnYWJjJ10pKSwgbGlzdCgnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjaGFpbi5mcm9tX2l0ZXJhYmxlKFsnJ10pKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSg0LCBjaGFpbi5mcm9tX2l0ZXJhYmxlKFsnYWJjJywgJ2RlZiddKSksIGxpc3QoJ2FiY2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBjaGFpbi5mcm9tX2l0ZXJhYmxlKFsyLCAzXSkpCisKKyAgICBkZWYgdGVzdF9jb21iaW5hdGlvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tYmluYXRpb25zLCAnYWJjJykgICAgICAgIyBtaXNzaW5nIHIgYXJndW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5hdGlvbnMsICdhYmMnLCAyLCAxKSAjIHRvbyBtYW55IGFyZ3VtZW50cworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbWJpbmF0aW9ucywgTm9uZSkgICAgICAgICMgcG9vbCBpcyBub3QgaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tYmluYXRpb25zLCAnYWJjJywgLTIpICAjIHIgaXMgbmVnYXRpdmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbWJpbmF0aW9ucygnYWJjJywgMzIpKSwgW10pICAgICAjIHIgPiBuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21iaW5hdGlvbnMocmFuZ2UoNCksIDMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKDAsMSwyKSwgKDAsMSwzKSwgKDAsMiwzKSwgKDEsMiwzKV0pCisKKyAgICAgICAgZGVmIGNvbWJpbmF0aW9uczEoaXRlcmFibGUsIHIpOgorICAgICAgICAgICAgJ1B1cmUgcHl0aG9uIHZlcnNpb24gc2hvd24gaW4gdGhlIGRvY3MnCisgICAgICAgICAgICBwb29sID0gdHVwbGUoaXRlcmFibGUpCisgICAgICAgICAgICBuID0gbGVuKHBvb2wpCisgICAgICAgICAgICBpZiByID4gbjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGluZGljZXMgPSByYW5nZShyKQorICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZShyKSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGluZGljZXNbaV0gIT0gaSArIG4gLSByOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBpbmRpY2VzW2ldICs9IDEKKyAgICAgICAgICAgICAgICBmb3IgaiBpbiByYW5nZShpKzEsIHIpOgorICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2pdID0gaW5kaWNlc1tqLTFdICsgMQorICAgICAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKKworICAgICAgICBkZWYgY29tYmluYXRpb25zMihpdGVyYWJsZSwgcik6CisgICAgICAgICAgICAnUHVyZSBweXRob24gdmVyc2lvbiBzaG93biBpbiB0aGUgZG9jcycKKyAgICAgICAgICAgIHBvb2wgPSB0dXBsZShpdGVyYWJsZSkKKyAgICAgICAgICAgIG4gPSBsZW4ocG9vbCkKKyAgICAgICAgICAgIGZvciBpbmRpY2VzIGluIHBlcm11dGF0aW9ucyhyYW5nZShuKSwgcik6CisgICAgICAgICAgICAgICAgaWYgc29ydGVkKGluZGljZXMpID09IGxpc3QoaW5kaWNlcyk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKKworICAgICAgICBkZWYgY29tYmluYXRpb25zMyhpdGVyYWJsZSwgcik6CisgICAgICAgICAgICAnUHVyZSBweXRob24gdmVyc2lvbiBmcm9tIGN3cigpJworICAgICAgICAgICAgcG9vbCA9IHR1cGxlKGl0ZXJhYmxlKQorICAgICAgICAgICAgbiA9IGxlbihwb29sKQorICAgICAgICAgICAgZm9yIGluZGljZXMgaW4gY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQocmFuZ2UobiksIHIpOgorICAgICAgICAgICAgICAgIGlmIGxlbihzZXQoaW5kaWNlcykpID09IHI6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKKworICAgICAgICBmb3IgbiBpbiByYW5nZSg3KToKKyAgICAgICAgICAgIHZhbHVlcyA9IFs1KngtMTIgZm9yIHggaW4gcmFuZ2UobildCisgICAgICAgICAgICBmb3IgciBpbiByYW5nZShuKzIpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxpc3QoY29tYmluYXRpb25zKHZhbHVlcywgcikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgMCBpZiByPm4gZWxzZSBmYWN0KG4pIC8vIGZhY3QocikgLy8gZmFjdChuLXIpKSAjIHJpZ2h0IG51bWJlciBvZiBjb21icworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdCksIGxlbihzZXQocmVzdWx0KSkpICAgICAgICAgIyBubyByZXBlYXRzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNvcnRlZChyZXN1bHQpKSAgICAgICAgICAgICAgICAjIGxleGljb2dyYXBoaWMgb3JkZXIKKyAgICAgICAgICAgICAgICBmb3IgYyBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCByKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHItbGVuZ3RoIGNvbWJpbmF0aW9ucworICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXQoYykpLCByKSAgICAgICAgICAgICAgICAgICAgIyBubyBkdXBsaWNhdGUgZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGMpLCBzb3J0ZWQoYykpICAgICAgICAgICAgICAgICMga2VlcCBvcmlnaW5hbCBvcmRlcmluZworICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsKGUgaW4gdmFsdWVzIGZvciBlIGluIGMpKSAgICAgICAgICAgIyBlbGVtZW50cyB0YWtlbiBmcm9tIGlucHV0IGl0ZXJhYmxlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZSBmb3IgZSBpbiB2YWx1ZXMgaWYgZSBpbiBjXSkgICAgICAjIGNvbWIgaXMgYSBzdWJzZXF1ZW5jZSBvZiB0aGUgaW5wdXQgaXRlcmFibGUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgbGlzdChjb21iaW5hdGlvbnMxKHZhbHVlcywgcikpKSAjIG1hdGNoZXMgZmlyc3QgcHVyZSBweXRob24gdmVyc2lvbgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KGNvbWJpbmF0aW9uczIodmFsdWVzLCByKSkpICMgbWF0Y2hlcyBzZWNvbmQgcHVyZSBweXRob24gdmVyc2lvbgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KGNvbWJpbmF0aW9uczModmFsdWVzLCByKSkpICMgbWF0Y2hlcyBzZWNvbmQgcHVyZSBweXRob24gdmVyc2lvbgorCisgICAgQHRlc3Rfc3VwcG9ydC5pbXBsX2RldGFpbCgidHVwbGUgcmV1c2UgaXMgc3BlY2lmaWMgdG8gQ1B5dGhvbiIpCisgICAgZGVmIHRlc3RfY29tYmluYXRpb25zX3R1cGxlX3JldXNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXQobWFwKGlkLCBjb21iaW5hdGlvbnMoJ2FiY2RlJywgMykpKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGVuKHNldChtYXAoaWQsIGxpc3QoY29tYmluYXRpb25zKCdhYmNkZScsIDMpKSkpKSwgMSkKKworICAgIGRlZiB0ZXN0X2NvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KHNlbGYpOgorICAgICAgICBjd3IgPSBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN3ciwgJ2FiYycpICAgICAgICMgbWlzc2luZyByIGFyZ3VtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3dyLCAnYWJjJywgMiwgMSkgIyB0b28gbWFueSBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjd3IsIE5vbmUpICAgICAgICAjIHBvb2wgaXMgbm90IGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN3ciwgJ2FiYycsIC0yKSAgIyByIGlzIG5lZ2F0aXZlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjd3IoJ0FCQycsIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdBJywnQScpLCAoJ0EnLCdCJyksICgnQScsJ0MnKSwgKCdCJywnQicpLCAoJ0InLCdDJyksICgnQycsJ0MnKV0pCisKKyAgICAgICAgZGVmIGN3cjEoaXRlcmFibGUsIHIpOgorICAgICAgICAgICAgJ1B1cmUgcHl0aG9uIHZlcnNpb24gc2hvd24gaW4gdGhlIGRvY3MnCisgICAgICAgICAgICAjIG51bWJlciBpdGVtcyByZXR1cm5lZDogIChuK3ItMSkhIC8gciEgLyAobi0xKSEgd2hlbiBuPjAKKyAgICAgICAgICAgIHBvb2wgPSB0dXBsZShpdGVyYWJsZSkKKyAgICAgICAgICAgIG4gPSBsZW4ocG9vbCkKKyAgICAgICAgICAgIGlmIG5vdCBuIGFuZCByOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaW5kaWNlcyA9IFswXSAqIHIKKyAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UocikpOgorICAgICAgICAgICAgICAgICAgICBpZiBpbmRpY2VzW2ldICE9IG4gLSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBpbmRpY2VzW2k6XSA9IFtpbmRpY2VzW2ldICsgMV0gKiAociAtIGkpCisgICAgICAgICAgICAgICAgeWllbGQgdHVwbGUocG9vbFtpXSBmb3IgaSBpbiBpbmRpY2VzKQorCisgICAgICAgIGRlZiBjd3IyKGl0ZXJhYmxlLCByKToKKyAgICAgICAgICAgICdQdXJlIHB5dGhvbiB2ZXJzaW9uIHNob3duIGluIHRoZSBkb2NzJworICAgICAgICAgICAgcG9vbCA9IHR1cGxlKGl0ZXJhYmxlKQorICAgICAgICAgICAgbiA9IGxlbihwb29sKQorICAgICAgICAgICAgZm9yIGluZGljZXMgaW4gcHJvZHVjdChyYW5nZShuKSwgcmVwZWF0PXIpOgorICAgICAgICAgICAgICAgIGlmIHNvcnRlZChpbmRpY2VzKSA9PSBsaXN0KGluZGljZXMpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXMpCisKKyAgICAgICAgZGVmIG51bWNvbWJzKG4sIHIpOgorICAgICAgICAgICAgaWYgbm90IG46CisgICAgICAgICAgICAgICAgcmV0dXJuIDAgaWYgciBlbHNlIDEKKyAgICAgICAgICAgIHJldHVybiBmYWN0KG4rci0xKSAvLyBmYWN0KHIpIC8vIGZhY3Qobi0xKQorCisgICAgICAgIGZvciBuIGluIHJhbmdlKDcpOgorICAgICAgICAgICAgdmFsdWVzID0gWzUqeC0xMiBmb3IgeCBpbiByYW5nZShuKV0KKyAgICAgICAgICAgIGZvciByIGluIHJhbmdlKG4rMik6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbGlzdChjd3IodmFsdWVzLCByKSkKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdCksIG51bWNvbWJzKG4sIHIpKSAgICAgICAgICAgIyByaWdodCBudW1iZXIgb2YgY29tYnMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCBsZW4oc2V0KHJlc3VsdCkpKSAgICAgICAgICMgbm8gcmVwZWF0cworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzb3J0ZWQocmVzdWx0KSkgICAgICAgICAgICAgICAgIyBsZXhpY29ncmFwaGljIG9yZGVyCisKKyAgICAgICAgICAgICAgICByZWd1bGFyX2NvbWJzID0gbGlzdChjb21iaW5hdGlvbnModmFsdWVzLCByKSkgICAgICAgICAgICMgY29tcGFyZSB0byBjb21icyB3aXRob3V0IHJlcGxhY2VtZW50CisgICAgICAgICAgICAgICAgaWYgbiA9PSAwIG9yIHIgPD0gMToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHJlZ3VsYXJfY29tYnMpICAgICAgICAgICAgIyBjYXNlcyB0aGF0IHNob3VsZCBiZSBpZGVudGljYWwKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2V0KHJlc3VsdCkgPj0gc2V0KHJlZ3VsYXJfY29tYnMpKSAgICAgIyByZXN0IHNob3VsZCBiZSBzdXBlcnNldHMgb2YgcmVndWxhciBjb21icworCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgcikgICAgICAgICAgICAgICAgICAgICAgICAgIyByLWxlbmd0aCBjb21iaW5hdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgbm9ydW5zID0gW2sgZm9yIGssdiBpbiBncm91cGJ5KGMpXSAgICAgICAgICAgICAgICAgICMgY29tYm8gd2l0aG91dCBjb25zZWN1dGl2ZSByZXBlYXRzCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5vcnVucyksIGxlbihzZXQobm9ydW5zKSkpICAgICAjIG5vIHJlcGVhdHMgb3RoZXIgdGhhbiBjb25zZWN1dGl2ZQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYyksIHNvcnRlZChjKSkgICAgICAgICAgICAgICAgIyBrZWVwIG9yaWdpbmFsIG9yZGVyaW5nCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGwoZSBpbiB2YWx1ZXMgZm9yIGUgaW4gYykpICAgICAgICAgICAjIGVsZW1lbnRzIHRha2VuIGZyb20gaW5wdXQgaXRlcmFibGUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3J1bnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UgZm9yIGUgaW4gdmFsdWVzIGlmIGUgaW4gY10pICAgICAjIGNvbWIgaXMgYSBzdWJzZXF1ZW5jZSBvZiB0aGUgaW5wdXQgaXRlcmFibGUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgbGlzdChjd3IxKHZhbHVlcywgcikpKSAgICAgICAgICMgbWF0Y2hlcyBmaXJzdCBwdXJlIHB5dGhvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGxpc3QoY3dyMih2YWx1ZXMsIHIpKSkgICAgICAgICAjIG1hdGNoZXMgc2Vjb25kIHB1cmUgcHl0aG9uIHZlcnNpb24KKworICAgIEB0ZXN0X3N1cHBvcnQuaW1wbF9kZXRhaWwoInR1cGxlIHJldXNlIGlzIHNwZWNpZmljIHRvIENQeXRob24iKQorICAgIGRlZiB0ZXN0X2NvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50X3R1cGxlX3JldXNlKHNlbGYpOgorICAgICAgICBjd3IgPSBjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXQobWFwKGlkLCBjd3IoJ2FiY2RlJywgMykpKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGVuKHNldChtYXAoaWQsIGxpc3QoY3dyKCdhYmNkZScsIDMpKSkpKSwgMSkKKworICAgIGRlZiB0ZXN0X3Blcm11dGF0aW9ucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwZXJtdXRhdGlvbnMpICAgICAgICAgICAgICAjIHRvbyBmZXcgYXJndW1lbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGVybXV0YXRpb25zLCAnYWJjJywgMiwgMSkgIyB0b28gbWFueSBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwZXJtdXRhdGlvbnMsIE5vbmUpICAgICAgICAjIHBvb2wgaXMgbm90IGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBlcm11dGF0aW9ucywgJ2FiYycsIC0yKSAgIyByIGlzIG5lZ2F0aXZlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwZXJtdXRhdGlvbnMoJ2FiYycsIDMyKSksIFtdKSAgICAgIyByID4gbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBlcm11dGF0aW9ucywgJ2FiYycsICdzJykgICMgciBpcyBub3QgYW4gaW50IG9yIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBlcm11dGF0aW9ucyhyYW5nZSgzKSwgMikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoMCwxKSwgKDAsMiksICgxLDApLCAoMSwyKSwgKDIsMCksICgyLDEpXSkKKworICAgICAgICBkZWYgcGVybXV0YXRpb25zMShpdGVyYWJsZSwgcj1Ob25lKToKKyAgICAgICAgICAgICdQdXJlIHB5dGhvbiB2ZXJzaW9uIHNob3duIGluIHRoZSBkb2NzJworICAgICAgICAgICAgcG9vbCA9IHR1cGxlKGl0ZXJhYmxlKQorICAgICAgICAgICAgbiA9IGxlbihwb29sKQorICAgICAgICAgICAgciA9IG4gaWYgciBpcyBOb25lIGVsc2UgcgorICAgICAgICAgICAgaWYgciA+IG46CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpbmRpY2VzID0gcmFuZ2UobikKKyAgICAgICAgICAgIGN5Y2xlcyA9IHJhbmdlKG4sIG4tciwgLTEpCisgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXNbOnJdKQorICAgICAgICAgICAgd2hpbGUgbjoKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZShyKSk6CisgICAgICAgICAgICAgICAgICAgIGN5Y2xlc1tpXSAtPSAxCisgICAgICAgICAgICAgICAgICAgIGlmIGN5Y2xlc1tpXSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpOl0gPSBpbmRpY2VzW2krMTpdICsgaW5kaWNlc1tpOmkrMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlc1tpXSA9IG4gLSBpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBqID0gY3ljbGVzW2ldCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2ldLCBpbmRpY2VzWy1qXSA9IGluZGljZXNbLWpdLCBpbmRpY2VzW2ldCisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXNbOnJdKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBkZWYgcGVybXV0YXRpb25zMihpdGVyYWJsZSwgcj1Ob25lKToKKyAgICAgICAgICAgICdQdXJlIHB5dGhvbiB2ZXJzaW9uIHNob3duIGluIHRoZSBkb2NzJworICAgICAgICAgICAgcG9vbCA9IHR1cGxlKGl0ZXJhYmxlKQorICAgICAgICAgICAgbiA9IGxlbihwb29sKQorICAgICAgICAgICAgciA9IG4gaWYgciBpcyBOb25lIGVsc2UgcgorICAgICAgICAgICAgZm9yIGluZGljZXMgaW4gcHJvZHVjdChyYW5nZShuKSwgcmVwZWF0PXIpOgorICAgICAgICAgICAgICAgIGlmIGxlbihzZXQoaW5kaWNlcykpID09IHI6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlcykKKworICAgICAgICBmb3IgbiBpbiByYW5nZSg3KToKKyAgICAgICAgICAgIHZhbHVlcyA9IFs1KngtMTIgZm9yIHggaW4gcmFuZ2UobildCisgICAgICAgICAgICBmb3IgciBpbiByYW5nZShuKzIpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxpc3QocGVybXV0YXRpb25zKHZhbHVlcywgcikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgMCBpZiByPm4gZWxzZSBmYWN0KG4pIC8vIGZhY3Qobi1yKSkgICAgICAjIHJpZ2h0IG51bWJlciBvZiBwZXJtcworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdCksIGxlbihzZXQocmVzdWx0KSkpICAgICAgICAgIyBubyByZXBlYXRzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNvcnRlZChyZXN1bHQpKSAgICAgICAgICAgICAgICAjIGxleGljb2dyYXBoaWMgb3JkZXIKKyAgICAgICAgICAgICAgICBmb3IgcCBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHApLCByKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHItbGVuZ3RoIHBlcm11dGF0aW9ucworICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXQocCkpLCByKSAgICAgICAgICAgICAgICAgICAgIyBubyBkdXBsaWNhdGUgZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFsbChlIGluIHZhbHVlcyBmb3IgZSBpbiBwKSkgICAgICAgICAgICMgZWxlbWVudHMgdGFrZW4gZnJvbSBpbnB1dCBpdGVyYWJsZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KHBlcm11dGF0aW9uczEodmFsdWVzLCByKSkpICMgbWF0Y2hlcyBmaXJzdCBwdXJlIHB5dGhvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGxpc3QocGVybXV0YXRpb25zMih2YWx1ZXMsIHIpKSkgIyBtYXRjaGVzIHNlY29uZCBwdXJlIHB5dGhvbiB2ZXJzaW9uCisgICAgICAgICAgICAgICAgaWYgciA9PSBuOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgbGlzdChwZXJtdXRhdGlvbnModmFsdWVzLCBOb25lKSkpICMgdGVzdCByIGFzIE5vbmUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGxpc3QocGVybXV0YXRpb25zKHZhbHVlcykpKSAgICAgICAjIHRlc3QgZGVmYXVsdCByCisKKyAgICBAdGVzdF9zdXBwb3J0LmltcGxfZGV0YWlsKCJ0dXBsZSByZXN1c2UgaXMgQ1B5dGhvbiBzcGVjaWZpYyIpCisgICAgZGVmIHRlc3RfcGVybXV0YXRpb25zX3R1cGxlX3JldXNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXQobWFwKGlkLCBwZXJtdXRhdGlvbnMoJ2FiY2RlJywgMykpKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGVuKHNldChtYXAoaWQsIGxpc3QocGVybXV0YXRpb25zKCdhYmNkZScsIDMpKSkpKSwgMSkKKworICAgIGRlZiB0ZXN0X2NvbWJpbmF0b3JpY3Moc2VsZik6CisgICAgICAgICMgVGVzdCByZWxhdGlvbnNoaXBzIGJldHdlZW4gcHJvZHVjdCgpLCBwZXJtdXRhdGlvbnMoKSwKKyAgICAgICAgIyBjb21iaW5hdGlvbnMoKSBhbmQgY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoKS4KKworICAgICAgICBmb3IgbiBpbiByYW5nZSg2KToKKyAgICAgICAgICAgIHMgPSAnQUJDREVGRydbOm5dCisgICAgICAgICAgICBmb3IgciBpbiByYW5nZSg4KToKKyAgICAgICAgICAgICAgICBwcm9kID0gbGlzdChwcm9kdWN0KHMsIHJlcGVhdD1yKSkKKyAgICAgICAgICAgICAgICBjd3IgPSBsaXN0KGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KHMsIHIpKQorICAgICAgICAgICAgICAgIHBlcm0gPSBsaXN0KHBlcm11dGF0aW9ucyhzLCByKSkKKyAgICAgICAgICAgICAgICBjb21iID0gbGlzdChjb21iaW5hdGlvbnMocywgcikpCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIHNpemUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwcm9kKSwgbioqcikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjd3IpLCAoZmFjdChuK3ItMSkgLy8gZmFjdChyKSAvLyBmYWN0KG4tMSkpIGlmIG4gZWxzZSAobm90IHIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBlcm0pLCAwIGlmIHI+biBlbHNlIGZhY3QobikgLy8gZmFjdChuLXIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNvbWIpLCAwIGlmIHI+biBlbHNlIGZhY3QobikgLy8gZmFjdChyKSAvLyBmYWN0KG4tcikpCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIGxleGljb2dyYXBoaWMgb3JkZXIgd2l0aG91dCByZXBlYXRlZCB0dXBsZXMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2QsIHNvcnRlZChzZXQocHJvZCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3dyLCBzb3J0ZWQoc2V0KGN3cikpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVybSwgc29ydGVkKHNldChwZXJtKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21iLCBzb3J0ZWQoc2V0KGNvbWIpKSkKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgaW50ZXJyZWxhdGlvbnNoaXBzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjd3IsIFt0IGZvciB0IGluIHByb2QgaWYgc29ydGVkKHQpPT1saXN0KHQpXSkgIyBjd3I6IHByb2RzIHdoaWNoIGFyZSBzb3J0ZWQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlcm0sIFt0IGZvciB0IGluIHByb2QgaWYgbGVuKHNldCh0KSk9PXJdKSAgICAjIHBlcm06IHByb2RzIHdpdGggbm8gZHVwcworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tYiwgW3QgZm9yIHQgaW4gcGVybSBpZiBzb3J0ZWQodCk9PWxpc3QodCldKSAjIGNvbWI6IHBlcm1zIHRoYXQgYXJlIHNvcnRlZAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tYiwgW3QgZm9yIHQgaW4gY3dyIGlmIGxlbihzZXQodCkpPT1yXSkgICAgICAjIGNvbWI6IGN3cnMgd2l0aG91dCBkdXBzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21iLCBmaWx0ZXIoc2V0KGN3cikuX19jb250YWluc19fLCBwZXJtKSkgICAgICMgY29tYjogcGVybSB0aGF0IGlzIGEgY3dyCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21iLCBmaWx0ZXIoc2V0KHBlcm0pLl9fY29udGFpbnNfXywgY3dyKSkgICAgICMgY29tYjogY3dyIHRoYXQgaXMgYSBwZXJtCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21iLCBzb3J0ZWQoc2V0KGN3cikgJiBzZXQocGVybSkpKSAgICAgICAgICAgICMgY29tYjogYm90aCBhIGN3ciBhbmQgYSBwZXJtCisKKyAgICBkZWYgdGVzdF9jb21wcmVzcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXByZXNzKGRhdGE9J0FCQ0RFRicsIHNlbGVjdG9ycz1bMSwwLDEsMCwxLDFdKSksIGxpc3QoJ0FDRUYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXByZXNzKCdBQkNERUYnLCBbMSwwLDEsMCwxLDFdKSksIGxpc3QoJ0FDRUYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXByZXNzKCdBQkNERUYnLCBbMCwwLDAsMCwwLDBdKSksIGxpc3QoJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tcHJlc3MoJ0FCQ0RFRicsIFsxLDEsMSwxLDEsMV0pKSwgbGlzdCgnQUJDREVGJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21wcmVzcygnQUJDREVGJywgWzEsMCwxXSkpLCBsaXN0KCdBQycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tcHJlc3MoJ0FCQycsIFswLDEsMSwxLDEsMV0pKSwgbGlzdCgnQkMnKSkKKyAgICAgICAgbiA9IDEwMDAwCisgICAgICAgIGRhdGEgPSBjaGFpbi5mcm9tX2l0ZXJhYmxlKHJlcGVhdChyYW5nZSg2KSwgbikpCisgICAgICAgIHNlbGVjdG9ycyA9IGNoYWluLmZyb21faXRlcmFibGUocmVwZWF0KCgwLCAxKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21wcmVzcyhkYXRhLCBzZWxlY3RvcnMpKSwgWzEsMyw1XSAqIG4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcHJlc3MsIE5vbmUsIHJhbmdlKDYpKSAgICAgICMgMXN0IGFyZyBub3QgaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wcmVzcywgcmFuZ2UoNiksIE5vbmUpICAgICAgIyAybmQgYXJnIG5vdCBpdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXByZXNzLCByYW5nZSg2KSkgICAgICAgICAgICAjIHRvbyBmZXcgYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXByZXNzLCByYW5nZSg2KSwgTm9uZSkgICAgICAjIHRvbyBtYW55IGFyZ3MKKworICAgIGRlZiB0ZXN0X2NvdW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCgnYWJjJyxjb3VudCgpKSwgWygnYScsIDApLCAoJ2InLCAxKSwgKCdjJywgMildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCgnYWJjJyxjb3VudCgzKSksIFsoJ2EnLCAzKSwgKCdiJywgNCksICgnYycsIDUpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDIsIHppcCgnYWJjJyxjb3VudCgzKSkpLCBbKCdhJywgMyksICgnYicsIDQpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDIsIHppcCgnYWJjJyxjb3VudCgtMSkpKSwgWygnYScsIC0xKSwgKCdiJywgMCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMiwgemlwKCdhYmMnLGNvdW50KC0zKSkpLCBbKCdhJywgLTMpLCAoJ2InLCAtMildKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvdW50LCAyLCAzLCA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvdW50LCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoY291bnQobWF4c2l6ZS01KSwgMTApKSwgcmFuZ2UobWF4c2l6ZS01LCBtYXhzaXplKzUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXNsaWNlKGNvdW50KC1tYXhzaXplLTUpLCAxMCkpLCByYW5nZSgtbWF4c2l6ZS01LCAtbWF4c2l6ZSs1KSkKKyAgICAgICAgYyA9IGNvdW50KDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KDMpJykKKyAgICAgICAgYy5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoNCknKQorICAgICAgICBjID0gY291bnQoLTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KC05KScpCisgICAgICAgIGMubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb3VudCgxMC4yNSkpLCAnY291bnQoMTAuMjUpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm5leHQoKSwgLTgpCisgICAgICAgIGZvciBpIGluICgtc3lzLm1heGludC01LCAtc3lzLm1heGludCs1ICwtMTAsIC0xLCAwLCAxMCwgc3lzLm1heGludC01LCBzeXMubWF4aW50KzUpOgorICAgICAgICAgICAgIyBUZXN0IHJlcHIgKGlnbm9yaW5nIHRoZSBMIGluIGxvbmdzKQorICAgICAgICAgICAgcjEgPSByZXByKGNvdW50KGkpKS5yZXBsYWNlKCdMJywgJycpCisgICAgICAgICAgICByMiA9ICdjb3VudCglciknLl9fbW9kX18oaSkucmVwbGFjZSgnTCcsICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyMSwgcjIpCisKKyAgICAgICAgIyBjaGVjayBjb3B5LCBkZWVwY29weSwgcGlja2xlCisgICAgICAgIGZvciB2YWx1ZSBpbiAtMywgMywgc3lzLm1heGludC01LCBzeXMubWF4aW50KzU6CisgICAgICAgICAgICBjID0gY291bnQodmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoY29weS5jb3B5KGMpKSwgdmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoY29weS5kZWVwY29weShjKSksIHZhbHVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoYykpKSwgdmFsdWUpCisKKyAgICBkZWYgdGVzdF9jb3VudF93aXRoX3N0cmlkZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoJ2FiYycsY291bnQoMiwzKSksIFsoJ2EnLCAyKSwgKCdiJywgNSksICgnYycsIDgpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoJ2FiYycsY291bnQoc3RhcnQ9MixzdGVwPTMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdhJywgMiksICgnYicsIDUpLCAoJ2MnLCA4KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKCdhYmMnLGNvdW50KHN0ZXA9LTEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdhJywgMCksICgnYicsIC0xKSwgKCdjJywgLTIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoJ2FiYycsY291bnQoMiwwKSksIFsoJ2EnLCAyKSwgKCdiJywgMiksICgnYycsIDIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXAoJ2FiYycsY291bnQoMiwxKSksIFsoJ2EnLCAyKSwgKCdiJywgMyksICgnYycsIDQpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDIwLCBjb3VudChtYXhzaXplLTE1LCAzKSksIHRha2UoMjAsIHJhbmdlKG1heHNpemUtMTUsIG1heHNpemUrMTAwLCAzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgyMCwgY291bnQoLW1heHNpemUtMTUsIDMpKSwgdGFrZSgyMCwgcmFuZ2UoLW1heHNpemUtMTUsLW1heHNpemUrMTAwLCAzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgzLCBjb3VudCgyLCAzLjI1LTRqKSksIFsyLCA1LjI1LTRqLCA4LjUtOGpdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMywgY291bnQoRGVjaW1hbCgnMS4xJyksIERlY2ltYWwoJy4xJykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbRGVjaW1hbCgnMS4xJyksIERlY2ltYWwoJzEuMicpLCBEZWNpbWFsKCcxLjMnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgzLCBjb3VudChGcmFjdGlvbigyLDMpLCBGcmFjdGlvbigxLDcpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgW0ZyYWN0aW9uKDIsMyksIEZyYWN0aW9uKDE3LDIxKSwgRnJhY3Rpb24oMjAsMjEpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHRha2UoMywgY291bnQoMTAsIDIuNSkpKSwgcmVwcihbMTAsIDEyLjUsIDE1LjBdKSkKKyAgICAgICAgYyA9IGNvdW50KDMsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KDMsIDUpJykKKyAgICAgICAgYy5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGMpLCAnY291bnQoOCwgNSknKQorICAgICAgICBjID0gY291bnQoLTksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KC05LCAwKScpCisgICAgICAgIGMubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KC05LCAwKScpCisgICAgICAgIGMgPSBjb3VudCgtOSwgLTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KC05LCAtMyknKQorICAgICAgICBjLm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYyksICdjb3VudCgtMTIsIC0zKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjKSwgJ2NvdW50KC0xMiwgLTMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvdW50KDEwLjUsIDEuMjUpKSwgJ2NvdW50KDEwLjUsIDEuMjUpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvdW50KDEwLjUsIDEpKSwgJ2NvdW50KDEwLjUpJykgICAgICAgICAgICMgc3VwcHJlc3Mgc3RlcD0xIHdoZW4gaXQncyBhbiBpbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvdW50KDEwLjUsIDEuMDApKSwgJ2NvdW50KDEwLjUsIDEuMCknKSAgICMgZG8gc2hvdyBmbG9hdCB2YWx1ZXMgbGlsa2UgMS4wCisgICAgICAgIGZvciBpIGluICgtc3lzLm1heGludC01LCAtc3lzLm1heGludCs1ICwtMTAsIC0xLCAwLCAxMCwgc3lzLm1heGludC01LCBzeXMubWF4aW50KzUpOgorICAgICAgICAgICAgZm9yIGogaW4gICgtc3lzLm1heGludC01LCAtc3lzLm1heGludCs1ICwtMTAsIC0xLCAwLCAxLCAxMCwgc3lzLm1heGludC01LCBzeXMubWF4aW50KzUpOgorICAgICAgICAgICAgICAgICMgVGVzdCByZXByIChpZ25vcmluZyB0aGUgTCBpbiBsb25ncykKKyAgICAgICAgICAgICAgICByMSA9IHJlcHIoY291bnQoaSwgaikpLnJlcGxhY2UoJ0wnLCAnJykKKyAgICAgICAgICAgICAgICBpZiBqID09IDE6CisgICAgICAgICAgICAgICAgICAgIHIyID0gKCdjb3VudCglciknICUgaSkucmVwbGFjZSgnTCcsICcnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHIyID0gKCdjb3VudCglciwgJXIpJyAlIChpLCBqKSkucmVwbGFjZSgnTCcsICcnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocjEsIHIyKQorCisgICAgZGVmIHRlc3RfY3ljbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgxMCwgY3ljbGUoJ2FiYycpKSwgbGlzdCgnYWJjYWJjYWJjYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY3ljbGUoJycpKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3ljbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3ljbGUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoY3ljbGUoZ2VuMygpKSwxMCkpLCBbMCwxLDIsMCwxLDIsMCwxLDIsMF0pCisKKyAgICBkZWYgdGVzdF9ncm91cGJ5KHNlbGYpOgorICAgICAgICAjIENoZWNrIHdoZXRoZXIgaXQgYWNjZXB0cyBhcmd1bWVudHMgY29ycmVjdGx5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIGxpc3QoZ3JvdXBieShbXSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBsaXN0KGdyb3VwYnkoW10sIGtleT1pZCkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGdyb3VwYnkoJ2FiYycsIFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBncm91cGJ5LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdyb3VwYnksICdhYmMnLCBsYW1iZGEgeDp4LCAxMCkKKworICAgICAgICAjIENoZWNrIG5vcm1hbCBpbnB1dAorICAgICAgICBzID0gWygwLCAxMCwgMjApLCAoMCwgMTEsMjEpLCAoMCwxMiwyMSksICgxLDEzLDIxKSwgKDEsMTQsMjIpLAorICAgICAgICAgICAgICgyLDE1LDIyKSwgKDMsMTYsMjMpLCAoMywxNywyMyldCisgICAgICAgIGR1cCA9IFtdCisgICAgICAgIGZvciBrLCBnIGluIGdyb3VwYnkocywgbGFtYmRhIHI6clswXSk6CisgICAgICAgICAgICBmb3IgZWxlbSBpbiBnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgZWxlbVswXSkKKyAgICAgICAgICAgICAgICBkdXAuYXBwZW5kKGVsZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgZHVwKQorCisgICAgICAgICMgQ2hlY2sgbmVzdGVkIGNhc2UKKyAgICAgICAgZHVwID0gW10KKyAgICAgICAgZm9yIGssIGcgaW4gZ3JvdXBieShzLCBsYW1iZGEgcjpyWzBdKToKKyAgICAgICAgICAgIGZvciBpaywgaWcgaW4gZ3JvdXBieShnLCBsYW1iZGEgcjpyWzJdKToKKyAgICAgICAgICAgICAgICBmb3IgZWxlbSBpbiBpZzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBlbGVtWzBdKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlrLCBlbGVtWzJdKQorICAgICAgICAgICAgICAgICAgICBkdXAuYXBwZW5kKGVsZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgZHVwKQorCisgICAgICAgICMgQ2hlY2sgY2FzZSB3aGVyZSBpbm5lciBpdGVyYXRvciBpcyBub3QgdXNlZAorICAgICAgICBrZXlzID0gW2sgZm9yIGssIGcgaW4gZ3JvdXBieShzLCBsYW1iZGEgcjpyWzBdKV0KKyAgICAgICAgZXhwZWN0ZWRrZXlzID0gc2V0KFtyWzBdIGZvciByIGluIHNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChrZXlzKSwgZXhwZWN0ZWRrZXlzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihrZXlzKSwgbGVuKGV4cGVjdGVka2V5cykpCisKKyAgICAgICAgIyBFeGVyY2lzZSBwaXBlcyBhbmQgZmlsdGVycyBzdHlsZQorICAgICAgICBzID0gJ2FicmFjYWRhYnJhJworICAgICAgICAjIHNvcnQgcyB8IHVuaXEKKyAgICAgICAgciA9IFtrIGZvciBrLCBnIGluIGdyb3VwYnkoc29ydGVkKHMpKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCBbJ2EnLCAnYicsICdjJywgJ2QnLCAnciddKQorICAgICAgICAjIHNvcnQgcyB8IHVuaXEgLWQKKyAgICAgICAgciA9IFtrIGZvciBrLCBnIGluIGdyb3VwYnkoc29ydGVkKHMpKSBpZiBsaXN0KGlzbGljZShnLDEsMikpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIFsnYScsICdiJywgJ3InXSkKKyAgICAgICAgIyBzb3J0IHMgfCB1bmlxIC1jCisgICAgICAgIHIgPSBbKGxlbihsaXN0KGcpKSwgaykgZm9yIGssIGcgaW4gZ3JvdXBieShzb3J0ZWQocykpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIFsoNSwgJ2EnKSwgKDIsICdiJyksICgxLCAnYycpLCAoMSwgJ2QnKSwgKDIsICdyJyldKQorICAgICAgICAjIHNvcnQgcyB8IHVuaXEgLWMgfCBzb3J0IC1ybiB8IGhlYWQgLTMKKyAgICAgICAgciA9IHNvcnRlZChbKGxlbihsaXN0KGcpKSAsIGspIGZvciBrLCBnIGluIGdyb3VwYnkoc29ydGVkKHMpKV0sIHJldmVyc2U9VHJ1ZSlbOjNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgWyg1LCAnYScpLCAoMiwgJ3InKSwgKDIsICdiJyldKQorCisgICAgICAgICMgaXRlci5uZXh0IGZhaWx1cmUKKyAgICAgICAgY2xhc3MgRXhwZWN0ZWRFcnJvcihFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgZGVsYXllZF9yYWlzZShuPTApOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CisgICAgICAgICAgICAgICAgeWllbGQgJ3lvJworICAgICAgICAgICAgcmFpc2UgRXhwZWN0ZWRFcnJvcgorICAgICAgICBkZWYgZ3VscChpdGVyYWJsZSwga2V5cD1Ob25lLCBmdW5jPWxpc3QpOgorICAgICAgICAgICAgcmV0dXJuIFtmdW5jKGcpIGZvciBrLCBnIGluIGdyb3VwYnkoaXRlcmFibGUsIGtleXApXQorCisgICAgICAgICMgaXRlci5uZXh0IGZhaWx1cmUgb24gb3V0ZXIgb2JqZWN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4cGVjdGVkRXJyb3IsIGd1bHAsIGRlbGF5ZWRfcmFpc2UoMCkpCisgICAgICAgICMgaXRlci5uZXh0IGZhaWx1cmUgb24gaW5uZXIgb2JqZWN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4cGVjdGVkRXJyb3IsIGd1bHAsIGRlbGF5ZWRfcmFpc2UoMSkpCisKKyAgICAgICAgIyBfX2NtcF9fIGZhaWx1cmUKKyAgICAgICAgY2xhc3MgRHVtbXlDbXA6CisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBkc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4cGVjdGVkRXJyb3IKKyAgICAgICAgcyA9IFtEdW1teUNtcCgpLCBEdW1teUNtcCgpLCBOb25lXQorCisgICAgICAgICMgX19jbXBfXyBmYWlsdXJlIG9uIG91dGVyIG9iamVjdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeHBlY3RlZEVycm9yLCBndWxwLCBzLCBmdW5jPWlkKQorICAgICAgICAjIF9fY21wX18gZmFpbHVyZSBvbiBpbm5lciBvYmplY3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhwZWN0ZWRFcnJvciwgZ3VscCwgcykKKworICAgICAgICAjIGtleWZ1bmMgZmFpbHVyZQorICAgICAgICBkZWYga2V5ZnVuYyhvYmopOgorICAgICAgICAgICAgaWYga2V5ZnVuYy5za2lwID4gMDoKKyAgICAgICAgICAgICAgICBrZXlmdW5jLnNraXAgLT0gMQorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhwZWN0ZWRFcnJvcgorCisgICAgICAgICMga2V5ZnVuYyBmYWlsdXJlIG9uIG91dGVyIG9iamVjdAorICAgICAgICBrZXlmdW5jLnNraXAgPSAwCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4cGVjdGVkRXJyb3IsIGd1bHAsIFtOb25lXSwga2V5ZnVuYykKKyAgICAgICAga2V5ZnVuYy5za2lwID0gMQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeHBlY3RlZEVycm9yLCBndWxwLCBbTm9uZSwgTm9uZV0sIGtleWZ1bmMpCisKKyAgICBkZWYgdGVzdF9pZmlsdGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaWZpbHRlcihpc0V2ZW4sIHJhbmdlKDYpKSksIFswLDIsNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpZmlsdGVyKE5vbmUsIFswLDEsMCwyLDBdKSksIFsxLDJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaWZpbHRlcihib29sLCBbMCwxLDAsMiwwXSkpLCBbMSwyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDQsIGlmaWx0ZXIoaXNFdmVuLCBjb3VudCgpKSksIFswLDIsNCw2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpZmlsdGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlmaWx0ZXIsIGxhbWJkYSB4OngpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaWZpbHRlciwgbGFtYmRhIHg6eCwgcmFuZ2UoNiksIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaWZpbHRlciwgaXNFdmVuLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlmaWx0ZXIocmFuZ2UoNiksIHJhbmdlKDYpKS5uZXh0KQorCisgICAgZGVmIHRlc3RfaWZpbHRlcmZhbHNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaWZpbHRlcmZhbHNlKGlzRXZlbiwgcmFuZ2UoNikpKSwgWzEsMyw1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlmaWx0ZXJmYWxzZShOb25lLCBbMCwxLDAsMiwwXSkpLCBbMCwwLDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaWZpbHRlcmZhbHNlKGJvb2wsIFswLDEsMCwyLDBdKSksIFswLDAsMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSg0LCBpZmlsdGVyZmFsc2UoaXNFdmVuLCBjb3VudCgpKSksIFsxLDMsNSw3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpZmlsdGVyZmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaWZpbHRlcmZhbHNlLCBsYW1iZGEgeDp4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlmaWx0ZXJmYWxzZSwgbGFtYmRhIHg6eCwgcmFuZ2UoNiksIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaWZpbHRlcmZhbHNlLCBpc0V2ZW4sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaWZpbHRlcmZhbHNlKHJhbmdlKDYpLCByYW5nZSg2KSkubmV4dCkKKworICAgIGRlZiB0ZXN0X2l6aXAoc2VsZik6CisgICAgICAgIGFucyA9IFsoeCx5KSBmb3IgeCwgeSBpbiBpemlwKCdhYmMnLGNvdW50KCkpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFucywgWygnYScsIDApLCAoJ2InLCAxKSwgKCdjJywgMildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXppcCgnYWJjJywgcmFuZ2UoNikpKSwgemlwKCdhYmMnLCByYW5nZSg2KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpemlwKCdhYmNkZWYnLCByYW5nZSgzKSkpLCB6aXAoJ2FiY2RlZicsIHJhbmdlKDMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDMsaXppcCgnYWJjZGVmJywgY291bnQoKSkpLCB6aXAoJ2FiY2RlZicsIHJhbmdlKDMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl6aXAoJ2FiY2RlZicpKSwgemlwKCdhYmNkZWYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl6aXAoKSksIHppcCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGl6aXAsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXppcCwgcmFuZ2UoMyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3R1cGxlKGxpc3QocGFpcikpIGZvciBwYWlyIGluIGl6aXAoJ2FiYycsICdkZWYnKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgemlwKCdhYmMnLCAnZGVmJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3BhaXIgZm9yIHBhaXIgaW4gaXppcCgnYWJjJywgJ2RlZicpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB6aXAoJ2FiYycsICdkZWYnKSkKKworICAgIEB0ZXN0X3N1cHBvcnQuaW1wbF9kZXRhaWwoInR1cGxlIHJldXNlIGlzIHNwZWNpZmljIHRvIENQeXRob24iKQorICAgIGRlZiB0ZXN0X2l6aXBfdHVwbGVfcmVzdXNlKHNlbGYpOgorICAgICAgICBpZHMgPSBtYXAoaWQsIGl6aXAoJ2FiYycsICdkZWYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oaWRzKSwgbWF4KGlkcykpCisgICAgICAgIGlkcyA9IG1hcChpZCwgbGlzdChpemlwKCdhYmMnLCAnZGVmJykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWN0LmZyb21rZXlzKGlkcykpLCBsZW4oaWRzKSkKKworICAgIGRlZiB0ZXN0X2l6aXBsb25nZXN0KHNlbGYpOgorICAgICAgICBmb3IgYXJncyBpbiBbCisgICAgICAgICAgICAgICAgWydhYmMnLCByYW5nZSg2KV0sCisgICAgICAgICAgICAgICAgW3JhbmdlKDYpLCAnYWJjJ10sCisgICAgICAgICAgICAgICAgW3JhbmdlKDEwMDApLCByYW5nZSgyMDAwLDIxMDApLCByYW5nZSgzMDAwLDMwNTApXSwKKyAgICAgICAgICAgICAgICBbcmFuZ2UoMTAwMCksIHJhbmdlKDApLCByYW5nZSgzMDAwLDMwNTApLCByYW5nZSgxMjAwKSwgcmFuZ2UoMTUwMCldLAorICAgICAgICAgICAgICAgIFtyYW5nZSgxMDAwKSwgcmFuZ2UoMCksIHJhbmdlKDMwMDAsMzA1MCksIHJhbmdlKDEyMDApLCByYW5nZSgxNTAwKSwgcmFuZ2UoMCldLAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgICMgdGFyZ2V0ID0gbWFwKE5vbmUsICphcmdzKSA8LSB0aGlzIHJhaXNlcyBhIHB5M2sgd2FybmluZworICAgICAgICAgICAgIyB0aGlzIGlzIHRoZSByZXBsYWNlbWVudDoKKyAgICAgICAgICAgIHRhcmdldCA9IFt0dXBsZShbYXJnW2ldIGlmIGkgPCBsZW4oYXJnKSBlbHNlIE5vbmUgZm9yIGFyZyBpbiBhcmdzXSkKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShtYXgobWFwKGxlbiwgYXJncykpKV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpemlwX2xvbmdlc3QoKmFyZ3MpKSwgdGFyZ2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl6aXBfbG9uZ2VzdCgqYXJncywgKip7fSkpLCB0YXJnZXQpCisgICAgICAgICAgICB0YXJnZXQgPSBbdHVwbGUoKGUgaXMgTm9uZSBhbmQgJ1gnIG9yIGUpIGZvciBlIGluIHQpIGZvciB0IGluIHRhcmdldF0gICAjIFJlcGxhY2UgTm9uZSBmaWxscyB3aXRoICdYJworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl6aXBfbG9uZ2VzdCgqYXJncywgKipkaWN0KGZpbGx2YWx1ZT0nWCcpKSksIHRhcmdldCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMyxpemlwX2xvbmdlc3QoJ2FiY2RlZicsIGNvdW50KCkpKSwgemlwKCdhYmNkZWYnLCByYW5nZSgzKSkpICMgdGFrZSAzIGZyb20gaW5maW5pdGUgaW5wdXQKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXppcF9sb25nZXN0KCkpLCB6aXAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl6aXBfbG9uZ2VzdChbXSkpLCB6aXAoW10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXppcF9sb25nZXN0KCdhYmNkZWYnKSksIHppcCgnYWJjZGVmJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl6aXBfbG9uZ2VzdCgnYWJjJywgJ2RlZmcnLCAqKnt9KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgemlwKGxpc3QoJ2FiYycpICsgW05vbmVdLCAnZGVmZycpKSAgIyBlbXB0eSBrZXl3b3JkIGRpY3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpemlwX2xvbmdlc3QsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXppcF9sb25nZXN0LCByYW5nZSgzKSwgMykKKworICAgICAgICBmb3Igc3RtdCBpbiBbCisgICAgICAgICAgICAiaXppcF9sb25nZXN0KCdhYmMnLCBmdj0xKSIsCisgICAgICAgICAgICAiaXppcF9sb25nZXN0KCdhYmMnLCBmaWxsdmFsdWU9MSwgYm9ndXNfa2V5d29yZD1Ob25lKSIsCisgICAgICAgIF06CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXZhbChzdG10LCBnbG9iYWxzKCksIGxvY2FscygpKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnRGlkIG5vdCByYWlzZSBUeXBlIGluOiAgJyArIHN0bXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbdHVwbGUobGlzdChwYWlyKSkgZm9yIHBhaXIgaW4gaXppcF9sb25nZXN0KCdhYmMnLCAnZGVmJyldLAorICAgICAgICAgICAgICAgICAgICAgICAgIHppcCgnYWJjJywgJ2RlZicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtwYWlyIGZvciBwYWlyIGluIGl6aXBfbG9uZ2VzdCgnYWJjJywgJ2RlZicpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB6aXAoJ2FiYycsICdkZWYnKSkKKworICAgIEB0ZXN0X3N1cHBvcnQuaW1wbF9kZXRhaWwoInR1cGxlIHJldXNlIGlzIHNwZWNpZmljIHRvIENQeXRob24iKQorICAgIGRlZiB0ZXN0X2l6aXBfbG9uZ2VzdF90dXBsZV9yZXVzZShzZWxmKToKKyAgICAgICAgaWRzID0gbWFwKGlkLCBpemlwX2xvbmdlc3QoJ2FiYycsICdkZWYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oaWRzKSwgbWF4KGlkcykpCisgICAgICAgIGlkcyA9IG1hcChpZCwgbGlzdChpemlwX2xvbmdlc3QoJ2FiYycsICdkZWYnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpY3QuZnJvbWtleXMoaWRzKSksIGxlbihpZHMpKQorCisgICAgZGVmIHRlc3RfYnVnXzcyNDQoc2VsZik6CisKKyAgICAgICAgY2xhc3MgUmVwZWF0ZXIob2JqZWN0KToKKyAgICAgICAgICAgICMgdGhpcyBjbGFzcyBpcyBzaW1pbGFyIHRvIGl0ZXJ0b29scy5yZXBlYXQKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvLCB0LCBlKToKKyAgICAgICAgICAgICAgICBzZWxmLm8gPSBvCisgICAgICAgICAgICAgICAgc2VsZi50ID0gaW50KHQpCisgICAgICAgICAgICAgICAgc2VsZi5lID0gZQorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOiAjIGl0cyBpdGVyYXRvciBpcyBpdHNlbGYKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi50ID4gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50IC09IDEKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuZQorCisgICAgICAgICMgRm9ybWVybHkgdGhpcyBjb2RlIGluIHdvdWxkIGZhaWwgaW4gZGVidWcgbW9kZQorICAgICAgICAjIHdpdGggVW5kZXRlY3RlZCBFcnJvciBhbmQgU3RvcCBJdGVyYXRpb24KKyAgICAgICAgcjEgPSBSZXBlYXRlcigxLCAzLCBTdG9wSXRlcmF0aW9uKQorICAgICAgICByMiA9IFJlcGVhdGVyKDIsIDQsIFN0b3BJdGVyYXRpb24pCisgICAgICAgIGRlZiBydW4ocjEsIHIyKToKKyAgICAgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgICAgICBmb3IgaSwgaiBpbiBpemlwX2xvbmdlc3QocjEsIHIyLCBmaWxsdmFsdWU9MCk6CisgICAgICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2FwdHVyZWRfb3V0cHV0KCdzdGRvdXQnKToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgKGksIGopCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgoaSwgaikpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVuKHIxLCByMiksIFsoMSwyKSwgKDEsMiksICgxLDIpLCAoMCwyKV0pCisKKyAgICAgICAgIyBGb3JtZXJseSwgdGhlIFJ1bnRpbWVFcnJvciB3b3VsZCBiZSBsb3N0CisgICAgICAgICMgYW5kIFN0b3BJdGVyYXRpb24gd291bGQgc3RvcCBhcyBleHBlY3RlZAorICAgICAgICByMSA9IFJlcGVhdGVyKDEsIDMsIFJ1bnRpbWVFcnJvcikKKyAgICAgICAgcjIgPSBSZXBlYXRlcigyLCA0LCBTdG9wSXRlcmF0aW9uKQorICAgICAgICBpdCA9IGl6aXBfbG9uZ2VzdChyMSwgcjIsIGZpbGx2YWx1ZT0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG5leHQsIGl0KQorCisgICAgZGVmIHRlc3RfcHJvZHVjdChzZWxmKToKKyAgICAgICAgZm9yIGFyZ3MsIHJlc3VsdCBpbiBbCisgICAgICAgICAgICAoW10sIFsoKV0pLCAgICAgICAgICAgICAgICAgICAgICMgemVybyBpdGVyYWJsZXMKKyAgICAgICAgICAgIChbJ2FiJ10sIFsoJ2EnLCksICgnYicsKV0pLCAgICAgIyBvbmUgaXRlcmFibGUKKyAgICAgICAgICAgIChbcmFuZ2UoMiksIHJhbmdlKDMpXSwgWygwLDApLCAoMCwxKSwgKDAsMiksICgxLDApLCAoMSwxKSwgKDEsMildKSwgICAgICMgdHdvIGl0ZXJhYmxlcworICAgICAgICAgICAgKFtyYW5nZSgwKSwgcmFuZ2UoMiksIHJhbmdlKDMpXSwgW10pLCAgICAgICAgICAgIyBmaXJzdCBpdGVyYWJsZSB3aXRoIHplcm8gbGVuZ3RoCisgICAgICAgICAgICAoW3JhbmdlKDIpLCByYW5nZSgwKSwgcmFuZ2UoMyldLCBbXSksICAgICAgICAgICAjIG1pZGRsZSBpdGVyYWJsZSB3aXRoIHplcm8gbGVuZ3RoCisgICAgICAgICAgICAoW3JhbmdlKDIpLCByYW5nZSgzKSwgcmFuZ2UoMCldLCBbXSksICAgICAgICAgICAjIGxhc3QgaXRlcmFibGUgd2l0aCB6ZXJvIGxlbmd0aAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwcm9kdWN0KCphcmdzKSksIHJlc3VsdCkKKyAgICAgICAgICAgIGZvciByIGluIHJhbmdlKDQpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwcm9kdWN0KCooYXJncypyKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChwcm9kdWN0KCphcmdzLCAqKmRpY3QocmVwZWF0PXIpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpc3QocHJvZHVjdCgqW3JhbmdlKDcpXSo2KSkpLCA3Kio2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHByb2R1Y3QsIHJhbmdlKDYpLCBOb25lKQorCisgICAgICAgIGRlZiBwcm9kdWN0MSgqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHBvb2xzID0gbWFwKHR1cGxlLCBhcmdzKSAqIGt3ZHMuZ2V0KCdyZXBlYXQnLCAxKQorICAgICAgICAgICAgbiA9IGxlbihwb29scykKKyAgICAgICAgICAgIGlmIG4gPT0gMDoKKyAgICAgICAgICAgICAgICB5aWVsZCAoKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgYW55KGxlbihwb29sKSA9PSAwIGZvciBwb29sIGluIHBvb2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGluZGljZXMgPSBbMF0gKiBuCisgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBwb29sLCBpIGluIHppcChwb29scywgaW5kaWNlcykpCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJldmVyc2VkKHJhbmdlKG4pKTogICMgcmlnaHQgdG8gbGVmdAorICAgICAgICAgICAgICAgICAgICBpZiBpbmRpY2VzW2ldID09IGxlbihwb29sc1tpXSkgLSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpXSArPSAxCisgICAgICAgICAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKGkrMSwgbik6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2pdID0gMAorICAgICAgICAgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBwb29sLCBpIGluIHppcChwb29scywgaW5kaWNlcykpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZGVmIHByb2R1Y3QyKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgJ1B1cmUgcHl0aG9uIHZlcnNpb24gdXNlZCBpbiBkb2NzJworICAgICAgICAgICAgcG9vbHMgPSBtYXAodHVwbGUsIGFyZ3MpICoga3dkcy5nZXQoJ3JlcGVhdCcsIDEpCisgICAgICAgICAgICByZXN1bHQgPSBbW11dCisgICAgICAgICAgICBmb3IgcG9vbCBpbiBwb29sczoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBbeCtbeV0gZm9yIHggaW4gcmVzdWx0IGZvciB5IGluIHBvb2xdCisgICAgICAgICAgICBmb3IgcHJvZCBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgeWllbGQgdHVwbGUocHJvZCkKKworICAgICAgICBhcmd0eXBlcyA9IFsnJywgJ2FiYycsICcnLCB4cmFuZ2UoMCksIHhyYW5nZSg0KSwgZGljdChhPTEsIGI9MiwgYz0zKSwKKyAgICAgICAgICAgICAgICAgICAgc2V0KCdhYmNkZWZnJyksIHJhbmdlKDExKSwgdHVwbGUocmFuZ2UoMTMpKV0KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIGFyZ3MgPSBbcmFuZG9tLmNob2ljZShhcmd0eXBlcykgZm9yIGogaW4gcmFuZ2UocmFuZG9tLnJhbmRyYW5nZSg1KSldCisgICAgICAgICAgICBleHBlY3RlZF9sZW4gPSBwcm9kKG1hcChsZW4sIGFyZ3MpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGlzdChwcm9kdWN0KCphcmdzKSkpLCBleHBlY3RlZF9sZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocHJvZHVjdCgqYXJncykpLCBsaXN0KHByb2R1Y3QxKCphcmdzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocHJvZHVjdCgqYXJncykpLCBsaXN0KHByb2R1Y3QyKCphcmdzKSkpCisgICAgICAgICAgICBhcmdzID0gbWFwKGl0ZXIsIGFyZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaXN0KHByb2R1Y3QoKmFyZ3MpKSksIGV4cGVjdGVkX2xlbikKKworICAgIEB0ZXN0X3N1cHBvcnQuaW1wbF9kZXRhaWwoInR1cGxlIHJldXNlIGlzIHNwZWNpZmljIHRvIENQeXRob24iKQorICAgIGRlZiB0ZXN0X3Byb2R1Y3RfdHVwbGVfcmV1c2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNldChtYXAoaWQsIHByb2R1Y3QoJ2FiYycsICdkZWYnKSkpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsZW4oc2V0KG1hcChpZCwgbGlzdChwcm9kdWN0KCdhYmMnLCAnZGVmJykpKSkpLCAxKQorCisgICAgZGVmIHRlc3RfcmVwZWF0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmVwZWF0KG9iamVjdD0nYScsIHRpbWVzPTMpKSwgWydhJywgJ2EnLCAnYSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcCh4cmFuZ2UoMykscmVwZWF0KCdhJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoMCwgJ2EnKSwgKDEsICdhJyksICgyLCAnYScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJlcGVhdCgnYScsIDMpKSwgWydhJywgJ2EnLCAnYSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMywgcmVwZWF0KCdhJykpLCBbJ2EnLCAnYScsICdhJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXBlYXQoJ2EnLCAwKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmVwZWF0KCdhJywgLTMpKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVwZWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlcGVhdCwgTm9uZSwgMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZXBlYXQsIE5vbmUsICdhJykKKyAgICAgICAgciA9IHJlcGVhdCgxKzBqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIociksICdyZXBlYXQoKDErMGopKScpCisgICAgICAgIHIgPSByZXBlYXQoMSswaiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHIpLCAncmVwZWF0KCgxKzBqKSwgNSknKQorICAgICAgICBsaXN0KHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihyKSwgJ3JlcGVhdCgoMSswaiksIDApJykKKworICAgIGRlZiB0ZXN0X2ltYXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpbWFwKG9wZXJhdG9yLnBvdywgcmFuZ2UoMyksIHJhbmdlKDEsNykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbMCoqMSwgMSoqMiwgMioqM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpbWFwKE5vbmUsICdhYmMnLCByYW5nZSg1KSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2EnLDApLCgnYicsMSksKCdjJywyKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpbWFwKE5vbmUsICdhYmMnLCBjb3VudCgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygnYScsMCksKCdiJywxKSwoJ2MnLDIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDIsaW1hcChOb25lLCAnYWJjJywgY291bnQoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2EnLDApLCgnYicsMSldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaW1hcChvcGVyYXRvci5wb3csIFtdKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGltYXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW1hcCwgb3BlcmF0b3IubmVnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGltYXAoMTAsIHJhbmdlKDUpKS5uZXh0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbWFwKGVycmZ1bmMsIFs0XSwgWzVdKS5uZXh0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGltYXAob25lYXJnLCBbNF0sIFs1XSkubmV4dCkKKworICAgIGRlZiB0ZXN0X3N0YXJtYXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdGFybWFwKG9wZXJhdG9yLnBvdywgemlwKHJhbmdlKDMpLCByYW5nZSgxLDcpKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFswKioxLCAxKioyLCAyKiozXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDMsIHN0YXJtYXAob3BlcmF0b3IucG93LCBpemlwKGNvdW50KCksIGNvdW50KDEpKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFswKioxLCAxKioyLCAyKiozXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN0YXJtYXAob3BlcmF0b3IucG93LCBbXSkpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN0YXJtYXAob3BlcmF0b3IucG93LCBbaXRlcihbNCw1XSldKSksIFs0Kio1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBzdGFybWFwKG9wZXJhdG9yLnBvdywgW05vbmVdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdGFybWFwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN0YXJtYXAsIG9wZXJhdG9yLnBvdywgWyg0LDUpXSwgJ2V4dHJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdGFybWFwKDEwLCBbKDQsNSldKS5uZXh0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdGFybWFwKGVycmZ1bmMsIFsoNCw1KV0pLm5leHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3Rhcm1hcChvbmVhcmcsIFsoNCw1KV0pLm5leHQpCisKKyAgICBkZWYgdGVzdF9pc2xpY2Uoc2VsZik6CisgICAgICAgIGZvciBhcmdzIGluIFsgICAgICAgICAgIyBpc2xpY2UoYXJncykgc2hvdWxkIGFncmVlIHdpdGggcmFuZ2UoYXJncykKKyAgICAgICAgICAgICAgICAoMTAsIDIwLCAzKSwKKyAgICAgICAgICAgICAgICAoMTAsIDMsIDIwKSwKKyAgICAgICAgICAgICAgICAoMTAsIDIwKSwKKyAgICAgICAgICAgICAgICAoMTAsIDMpLAorICAgICAgICAgICAgICAgICgyMCwpCisgICAgICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoeHJhbmdlKDEwMCksICphcmdzKSksIHJhbmdlKCphcmdzKSkKKworICAgICAgICBmb3IgYXJncywgdGd0YXJncyBpbiBbICAjIFN0b3Agd2hlbiBzZXFuIGlzIGV4aGF1c3RlZAorICAgICAgICAgICAgICAgICgoMTAsIDExMCwgMyksICgoMTAsIDEwMCwgMykpKSwKKyAgICAgICAgICAgICAgICAoKDEwLCAxMTApLCAoKDEwLCAxMDApKSksCisgICAgICAgICAgICAgICAgKCgxMTAsKSwgKDEwMCwpKQorICAgICAgICAgICAgICAgIF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXNsaWNlKHhyYW5nZSgxMDApLCAqYXJncykpLCByYW5nZSgqdGd0YXJncykpCisKKyAgICAgICAgIyBUZXN0IHN0b3A9Tm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXNsaWNlKHhyYW5nZSgxMCksIE5vbmUpKSwgcmFuZ2UoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXNsaWNlKHhyYW5nZSgxMCksIE5vbmUsIE5vbmUpKSwgcmFuZ2UoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXNsaWNlKHhyYW5nZSgxMCksIE5vbmUsIE5vbmUsIE5vbmUpKSwgcmFuZ2UoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXNsaWNlKHhyYW5nZSgxMCksIDIsIE5vbmUpKSwgcmFuZ2UoMiwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXNsaWNlKHhyYW5nZSgxMCksIDEsIE5vbmUsIDIpKSwgcmFuZ2UoMSwgMTAsIDIpKQorCisgICAgICAgICMgVGVzdCBudW1iZXIgb2YgaXRlbXMgY29uc3VtZWQgICAgIFNGICMxMTcxNDE3CisgICAgICAgIGl0ID0gaXRlcihyYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoaXQsIDMpKSwgcmFuZ2UoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIHJhbmdlKDMsIDEwKSkKKworICAgICAgICAjIFRlc3QgaW52YWxpZCBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpc2xpY2UsIHhyYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXNsaWNlLCB4cmFuZ2UoMTApLCAxLCAyLCAzLCA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpc2xpY2UsIHhyYW5nZSgxMCksIC01LCAxMCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaXNsaWNlLCB4cmFuZ2UoMTApLCAxLCAtNSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGlzbGljZSwgeHJhbmdlKDEwKSwgMSwgMTAsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpc2xpY2UsIHhyYW5nZSgxMCksIDEsIDEwLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpc2xpY2UsIHhyYW5nZSgxMCksICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaXNsaWNlLCB4cmFuZ2UoMTApLCAnYScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGlzbGljZSwgeHJhbmdlKDEwKSwgMSwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpc2xpY2UsIHhyYW5nZSgxMCksICdhJywgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaXNsaWNlLCB4cmFuZ2UoMTApLCAxLCAnYScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpc3QoaXNsaWNlKGNvdW50KCksIDEsIDEwLCBtYXhzaXplKSkpLCAxKQorCisgICAgICAgICMgSXNzdWUgIzEwMzIzOiAgTGVzcyBpc2xpY2UgaW4gYSBwcmVkaWN0YWJsZSBzdGF0ZQorICAgICAgICBjID0gY291bnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXNsaWNlKGMsIDEsIDMsIDUwKSksIFsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGMpLCAzKQorCisgICAgZGVmIHRlc3RfdGFrZXdoaWxlKHNlbGYpOgorICAgICAgICBkYXRhID0gWzEsIDMsIDUsIDIwLCAyLCA0LCA2LCA4XQorICAgICAgICB1bmRlcnRlbiA9IGxhbWJkYSB4OiB4PDEwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh0YWtld2hpbGUodW5kZXJ0ZW4sIGRhdGEpKSwgWzEsIDMsIDVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QodGFrZXdoaWxlKHVuZGVydGVuLCBbXSkpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0YWtld2hpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGFrZXdoaWxlLCBvcGVyYXRvci5wb3cpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGFrZXdoaWxlLCBvcGVyYXRvci5wb3csIFsoNCw1KV0sICdleHRyYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGFrZXdoaWxlKDEwLCBbKDQsNSldKS5uZXh0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0YWtld2hpbGUoZXJyZnVuYywgWyg0LDUpXSkubmV4dCkKKyAgICAgICAgdCA9IHRha2V3aGlsZShib29sLCBbMSwgMSwgMSwgMCwgMCwgMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh0KSwgWzEsIDEsIDFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCB0Lm5leHQpCisKKyAgICBkZWYgdGVzdF9kcm9wd2hpbGUoc2VsZik6CisgICAgICAgIGRhdGEgPSBbMSwgMywgNSwgMjAsIDIsIDQsIDYsIDhdCisgICAgICAgIHVuZGVydGVuID0gbGFtYmRhIHg6IHg8MTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGRyb3B3aGlsZSh1bmRlcnRlbiwgZGF0YSkpLCBbMjAsIDIsIDQsIDYsIDhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZHJvcHdoaWxlKHVuZGVydGVuLCBbXSkpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkcm9wd2hpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZHJvcHdoaWxlLCBvcGVyYXRvci5wb3cpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZHJvcHdoaWxlLCBvcGVyYXRvci5wb3csIFsoNCw1KV0sICdleHRyYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZHJvcHdoaWxlKDEwLCBbKDQsNSldKS5uZXh0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkcm9wd2hpbGUoZXJyZnVuYywgWyg0LDUpXSkubmV4dCkKKworICAgIGRlZiB0ZXN0X3RlZShzZWxmKToKKyAgICAgICAgbiA9IDIwMAorICAgICAgICBkZWYgaXJhbmdlKG4pOgorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKG4pOgorICAgICAgICAgICAgICAgIHlpZWxkIGkKKworICAgICAgICBhLCBiID0gdGVlKFtdKSAgICAgICAgIyB0ZXN0IGVtcHR5IGl0ZXJhdG9yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgW10pCisKKyAgICAgICAgYSwgYiA9IHRlZShpcmFuZ2UobikpICMgdGVzdCAxMDAlIGludGVybGVhdmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwKGEsYiksIHppcChyYW5nZShuKSxyYW5nZShuKSkpCisKKyAgICAgICAgYSwgYiA9IHRlZShpcmFuZ2UobikpICMgdGVzdCAwJSBpbnRlcmxlYXZlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYSksIHJhbmdlKG4pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIHJhbmdlKG4pKQorCisgICAgICAgIGEsIGIgPSB0ZWUoaXJhbmdlKG4pKSAjIHRlc3QgZGVhbGxvYyBvZiBsZWFkaW5nIGl0ZXJhdG9yCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLm5leHQoKSwgaSkKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCByYW5nZShuKSkKKworICAgICAgICBhLCBiID0gdGVlKGlyYW5nZShuKSkgIyB0ZXN0IGRlYWxsb2Mgb2YgdHJhaWxpbmcgaXRlcmF0b3IKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEubmV4dCgpLCBpKQorICAgICAgICBkZWwgYgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYSksIHJhbmdlKDEwMCwgbikpCisKKyAgICAgICAgZm9yIGogaW4geHJhbmdlKDUpOiAgICMgdGVzdCByYW5kb21seSBpbnRlcmxlYXZlZAorICAgICAgICAgICAgb3JkZXIgPSBbMF0qbiArIFsxXSpuCisgICAgICAgICAgICByYW5kb20uc2h1ZmZsZShvcmRlcikKKyAgICAgICAgICAgIGxpc3RzID0gKFtdLCBbXSkKKyAgICAgICAgICAgIGl0cyA9IHRlZShpcmFuZ2UobikpCisgICAgICAgICAgICBmb3IgaSBpbiBvcmRlcjoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0c1tpXS5uZXh0KCkKKyAgICAgICAgICAgICAgICBsaXN0c1tpXS5hcHBlbmQodmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RzWzBdLCByYW5nZShuKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdHNbMV0sIHJhbmdlKG4pKQorCisgICAgICAgICMgdGVzdCBhcmd1bWVudCBmb3JtYXQgY2hlY2tpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0ZWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGVlLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRlZSwgWzEsMl0sICd4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0ZWUsIFsxLDJdLCAzLCAneCcpCisKKyAgICAgICAgIyB0ZWUgb2JqZWN0IHNob3VsZCBiZSBpbnN0YW50aWFibGUKKyAgICAgICAgYSwgYiA9IHRlZSgnYWJjJykKKyAgICAgICAgYyA9IHR5cGUoYSkoJ2RlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjKSwgbGlzdCgnZGVmJykpCisKKyAgICAgICAgIyB0ZXN0IGxvbmctbGFnZ2VkIGFuZCBtdWx0aS13YXkgc3BsaXQKKyAgICAgICAgYSwgYiwgYyA9IHRlZSh4cmFuZ2UoMjAwMCksIDMpCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLm5leHQoKSwgaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCByYW5nZSgyMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYy5uZXh0KCksIGMubmV4dCgpXSwgcmFuZ2UoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhKSwgcmFuZ2UoMTAwLDIwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYyksIHJhbmdlKDIsMjAwMCkpCisKKyAgICAgICAgIyB0ZXN0IHZhbHVlcyBvZiBuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGVlLCAnYWJjJywgJ2ludmFsaWQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0ZWUsIFtdLCAtMSkKKyAgICAgICAgZm9yIG4gaW4geHJhbmdlKDUpOgorICAgICAgICAgICAgcmVzdWx0ID0gdGVlKCdhYmMnLCBuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJlc3VsdCksIHR1cGxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwKGxpc3QsIHJlc3VsdCksIFtsaXN0KCdhYmMnKV0qbikKKworICAgICAgICAjIHRlZSBwYXNzLXRocm91Z2ggdG8gY29weWFibGUgaXRlcmF0b3IKKyAgICAgICAgYSwgYiA9IHRlZSgnYWJjJykKKyAgICAgICAgYywgZCA9IHRlZShhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSBpcyBjKQorCisgICAgICAgICMgdGVzdCB0ZWVfbmV3CisgICAgICAgIHQxLCB0MiA9IHRlZSgnYWJjJykKKyAgICAgICAgdG5ldyA9IHR5cGUodDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdG5ldykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0bmV3LCAxMCkKKyAgICAgICAgdDMgPSB0bmV3KHQxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGlzdCh0MSkgPT0gbGlzdCh0MikgPT0gbGlzdCh0MykgPT0gbGlzdCgnYWJjJykpCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgdGVlIG9iamVjdHMgYXJlIHdlYWsgcmVmZXJlbmNhYmxlCisgICAgICAgIGEsIGIgPSB0ZWUoeHJhbmdlKDEwKSkKKyAgICAgICAgcCA9IHByb3h5KGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihwLCAnX19jbGFzc19fJyksIHR5cGUoYikpCisgICAgICAgIGRlbCBhCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlZmVyZW5jZUVycm9yLCBnZXRhdHRyLCBwLCAnX19jbGFzc19fJykKKworICAgICMgSXNzdWUgMTM0NTQ6IENyYXNoIHdoZW4gZGVsZXRpbmcgYmFja3dhcmQgaXRlcmF0b3IgZnJvbSB0ZWUoKQorICAgIGRlZiB0ZXN0X3RlZV9kZWxfYmFja3dhcmQoc2VsZik6CisgICAgICAgIGZvcndhcmQsIGJhY2t3YXJkID0gdGVlKHJlcGVhdChOb25lLCAyMDAwMDAwMCkpCisgICAgICAgIGFueShmb3J3YXJkKSAgIyBleGhhdXN0IHRoZSBpdGVyYXRvcgorICAgICAgICBkZWwgYmFja3dhcmQKKworICAgIGRlZiB0ZXN0X1N0b3BJdGVyYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIGl6aXAoKS5uZXh0KQorCisgICAgICAgIGZvciBmIGluIChjaGFpbiwgY3ljbGUsIGl6aXAsIGdyb3VwYnkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgZihbXSkubmV4dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIGYoU3RvcE5vdygpKS5uZXh0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIGlzbGljZShbXSwgTm9uZSkubmV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgaXNsaWNlKFN0b3BOb3coKSwgTm9uZSkubmV4dCkKKworICAgICAgICBwLCBxID0gdGVlKFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBwLm5leHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIHEubmV4dCkKKyAgICAgICAgcCwgcSA9IHRlZShTdG9wTm93KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIHAubmV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgcS5uZXh0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIHJlcGVhdChOb25lLCAwKS5uZXh0KQorCisgICAgICAgIGZvciBmIGluIChpZmlsdGVyLCBpZmlsdGVyZmFsc2UsIGltYXAsIHRha2V3aGlsZSwgZHJvcHdoaWxlLCBzdGFybWFwKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIGYobGFtYmRhIHg6eCwgW10pLm5leHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBmKGxhbWJkYSB4OngsIFN0b3BOb3coKSkubmV4dCkKKworY2xhc3MgVGVzdEV4YW1wbGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NoYWluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4oY2hhaW4oJ0FCQycsICdERUYnKSksICdBQkNERUYnKQorCisgICAgZGVmIHRlc3RfY2hhaW5fZnJvbV9pdGVyYWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJy5qb2luKGNoYWluLmZyb21faXRlcmFibGUoWydBQkMnLCAnREVGJ10pKSwgJ0FCQ0RFRicpCisKKyAgICBkZWYgdGVzdF9jb21iaW5hdGlvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21iaW5hdGlvbnMoJ0FCQ0QnLCAyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygnQScsJ0InKSwgKCdBJywnQycpLCAoJ0EnLCdEJyksICgnQicsJ0MnKSwgKCdCJywnRCcpLCAoJ0MnLCdEJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tYmluYXRpb25zKHJhbmdlKDQpLCAzKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygwLDEsMiksICgwLDEsMyksICgwLDIsMyksICgxLDIsMyldKQorCisgICAgZGVmIHRlc3RfY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgnQUJDJywgMikpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ0EnLCdBJyksICgnQScsJ0InKSwgKCdBJywnQycpLCAoJ0InLCdCJyksICgnQicsJ0MnKSwgKCdDJywnQycpXSkKKworICAgIGRlZiB0ZXN0X2NvbXByZXNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29tcHJlc3MoJ0FCQ0RFRicsIFsxLDAsMSwwLDEsMV0pKSwgbGlzdCgnQUNFRicpKQorCisgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoY291bnQoMTApLCA1KSksIFsxMCwgMTEsIDEyLCAxMywgMTRdKQorCisgICAgZGVmIHRlc3RfY3ljbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoY3ljbGUoJ0FCQ0QnKSwgMTIpKSwgbGlzdCgnQUJDREFCQ0RBQkNEJykpCisKKyAgICBkZWYgdGVzdF9kcm9wd2hpbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkcm9wd2hpbGUobGFtYmRhIHg6IHg8NSwgWzEsNCw2LDQsMV0pKSwgWzYsNCwxXSkKKworICAgIGRlZiB0ZXN0X2dyb3VwYnkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2sgZm9yIGssIGcgaW4gZ3JvdXBieSgnQUFBQUJCQkNDREFBQkJCJyldLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoJ0FCQ0RBQicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsobGlzdChnKSkgZm9yIGssIGcgaW4gZ3JvdXBieSgnQUFBQUJCQkNDRCcpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdCgnQUFBQScpLCBsaXN0KCdCQkInKSwgbGlzdCgnQ0MnKSwgbGlzdCgnRCcpXSkKKworICAgIGRlZiB0ZXN0X2lmaWx0ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpZmlsdGVyKGxhbWJkYSB4OiB4JTIsIHJhbmdlKDEwKSkpLCBbMSwzLDUsNyw5XSkKKworICAgIGRlZiB0ZXN0X2lmaWx0ZXJmYWxzZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlmaWx0ZXJmYWxzZShsYW1iZGEgeDogeCUyLCByYW5nZSgxMCkpKSwgWzAsMiw0LDYsOF0pCisKKyAgICBkZWYgdGVzdF9pbWFwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaW1hcChwb3csICgyLDMsMTApLCAoNSwyLDMpKSksIFszMiwgOSwgMTAwMF0pCisKKyAgICBkZWYgdGVzdF9pc2xpY2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoJ0FCQ0RFRkcnLCAyKSksIGxpc3QoJ0FCJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoJ0FCQ0RFRkcnLCAyLCA0KSksIGxpc3QoJ0NEJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoJ0FCQ0RFRkcnLCAyLCBOb25lKSksIGxpc3QoJ0NERUZHJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpc2xpY2UoJ0FCQ0RFRkcnLCAwLCBOb25lLCAyKSksIGxpc3QoJ0FDRUcnKSkKKworICAgIGRlZiB0ZXN0X2l6aXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpemlwKCdBQkNEJywgJ3h5JykpLCBbKCdBJywgJ3gnKSwgKCdCJywgJ3knKV0pCisKKyAgICBkZWYgdGVzdF9pemlwX2xvbmdlc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpemlwX2xvbmdlc3QoJ0FCQ0QnLCAneHknLCBmaWxsdmFsdWU9Jy0nKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygnQScsICd4JyksICgnQicsICd5JyksICgnQycsICctJyksICgnRCcsICctJyldKQorCisgICAgZGVmIHRlc3RfcGVybXV0YXRpb25zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGVybXV0YXRpb25zKCdBQkNEJywgMikpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCh0dXBsZSwgJ0FCIEFDIEFEIEJBIEJDIEJEIENBIENCIENEIERBIERCIERDJy5zcGxpdCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBlcm11dGF0aW9ucyhyYW5nZSgzKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoMCwxLDIpLCAoMCwyLDEpLCAoMSwwLDIpLCAoMSwyLDApLCAoMiwwLDEpLCAoMiwxLDApXSkKKworICAgIGRlZiB0ZXN0X3Byb2R1Y3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwcm9kdWN0KCdBQkNEJywgJ3h5JykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCh0dXBsZSwgJ0F4IEF5IEJ4IEJ5IEN4IEN5IER4IER5Jy5zcGxpdCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHByb2R1Y3QocmFuZ2UoMiksIHJlcGVhdD0zKSksCisgICAgICAgICAgICAgICAgICAgICAgICBbKDAsMCwwKSwgKDAsMCwxKSwgKDAsMSwwKSwgKDAsMSwxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMSwwLDApLCAoMSwwLDEpLCAoMSwxLDApLCAoMSwxLDEpXSkKKworICAgIGRlZiB0ZXN0X3JlcGVhdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJlcGVhdCgxMCwgMykpLCBbMTAsIDEwLCAxMF0pCisKKyAgICBkZWYgdGVzdF9zdGFwbWFwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3Rhcm1hcChwb3csIFsoMiw1KSwgKDMsMiksICgxMCwzKV0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbMzIsIDksIDEwMDBdKQorCisgICAgZGVmIHRlc3RfdGFrZXdoaWxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QodGFrZXdoaWxlKGxhbWJkYSB4OiB4PDUsIFsxLDQsNiw0LDFdKSksIFsxLDRdKQorCisKK2NsYXNzIFRlc3RHQyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgbWFrZWN5Y2xlKHNlbGYsIGl0ZXJhdG9yLCBjb250YWluZXIpOgorICAgICAgICBjb250YWluZXIuYXBwZW5kKGl0ZXJhdG9yKQorICAgICAgICBpdGVyYXRvci5uZXh0KCkKKyAgICAgICAgZGVsIGNvbnRhaW5lciwgaXRlcmF0b3IKKworICAgIGRlZiB0ZXN0X2NoYWluKHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoY2hhaW4oYSksIGEpCisKKyAgICBkZWYgdGVzdF9jaGFpbl9mcm9tX2l0ZXJhYmxlKHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoY2hhaW4uZnJvbV9pdGVyYWJsZShbYV0pLCBhKQorCisgICAgZGVmIHRlc3RfY29tYmluYXRpb25zKHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoY29tYmluYXRpb25zKFsxLDIsYSwzXSwgMyksIGEpCisKKyAgICBkZWYgdGVzdF9jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChzZWxmKToKKyAgICAgICAgYSA9IFtdCisgICAgICAgIHNlbGYubWFrZWN5Y2xlKGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KFsxLDIsYSwzXSwgMyksIGEpCisKKyAgICBkZWYgdGVzdF9jb21wcmVzcyhzZWxmKToKKyAgICAgICAgYSA9IFtdCisgICAgICAgIHNlbGYubWFrZWN5Y2xlKGNvbXByZXNzKCdBQkNERUYnLCBbMSwwLDEsMCwxLDBdKSwgYSkKKworICAgIGRlZiB0ZXN0X2NvdW50KHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgSW50ID0gdHlwZSgnSW50JywgKGludCwpLCBkaWN0KHg9YSkpCisgICAgICAgIHNlbGYubWFrZWN5Y2xlKGNvdW50KEludCgwKSwgSW50KDEpKSwgYSkKKworICAgIGRlZiB0ZXN0X2N5Y2xlKHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoY3ljbGUoW2FdKjIpLCBhKQorCisgICAgZGVmIHRlc3RfZHJvcHdoaWxlKHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoZHJvcHdoaWxlKGJvb2wsIFswLCBhLCBhXSksIGEpCisKKyAgICBkZWYgdGVzdF9ncm91cGJ5KHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoZ3JvdXBieShbYV0qMiwgbGFtYmRhIHg6eCksIGEpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTIyNDYoc2VsZik6CisgICAgICAgICMgSXNzdWUgMjI0NiAtLSB0aGUgX2dyb3VwZXIgaXRlcmF0b3Igd2FzIG5vdCBpbmNsdWRlZCBpbiBHQworICAgICAgICBuID0gMTAKKyAgICAgICAga2V5ZnVuYyA9IGxhbWJkYSB4OiB4CisgICAgICAgIGZvciBpLCBqIGluIGdyb3VwYnkoeHJhbmdlKG4pLCBrZXk9a2V5ZnVuYyk6CisgICAgICAgICAgICBrZXlmdW5jLl9fZGljdF9fLnNldGRlZmF1bHQoJ3gnLFtdKS5hcHBlbmQoaikKKworICAgIGRlZiB0ZXN0X2lmaWx0ZXIoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShpZmlsdGVyKGxhbWJkYSB4OlRydWUsIFthXSoyKSwgYSkKKworICAgIGRlZiB0ZXN0X2lmaWx0ZXJmYWxzZShzZWxmKToKKyAgICAgICAgYSA9IFtdCisgICAgICAgIHNlbGYubWFrZWN5Y2xlKGlmaWx0ZXJmYWxzZShsYW1iZGEgeDpGYWxzZSwgYSksIGEpCisKKyAgICBkZWYgdGVzdF9pemlwKHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoaXppcChbYV0qMiwgW2FdKjMpLCBhKQorCisgICAgZGVmIHRlc3RfaXppcF9sb25nZXN0KHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoaXppcF9sb25nZXN0KFthXSoyLCBbYV0qMyksIGEpCisgICAgICAgIGIgPSBbYSwgTm9uZV0KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoaXppcF9sb25nZXN0KFthXSoyLCBbYV0qMywgZmlsbHZhbHVlPWIpLCBhKQorCisgICAgZGVmIHRlc3RfaW1hcChzZWxmKToKKyAgICAgICAgYSA9IFtdCisgICAgICAgIHNlbGYubWFrZWN5Y2xlKGltYXAobGFtYmRhIHg6eCwgW2FdKjIpLCBhKQorCisgICAgZGVmIHRlc3RfaXNsaWNlKHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoaXNsaWNlKFthXSoyLCBOb25lKSwgYSkKKworICAgIGRlZiB0ZXN0X3Blcm11dGF0aW9ucyhzZWxmKToKKyAgICAgICAgYSA9IFtdCisgICAgICAgIHNlbGYubWFrZWN5Y2xlKHBlcm11dGF0aW9ucyhbMSwyLGEsM10sIDMpLCBhKQorCisgICAgZGVmIHRlc3RfcHJvZHVjdChzZWxmKToKKyAgICAgICAgYSA9IFtdCisgICAgICAgIHNlbGYubWFrZWN5Y2xlKHByb2R1Y3QoWzEsMixhLDNdLCByZXBlYXQ9MyksIGEpCisKKyAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShyZXBlYXQoYSksIGEpCisKKyAgICBkZWYgdGVzdF9zdGFybWFwKHNlbGYpOgorICAgICAgICBhID0gW10KKyAgICAgICAgc2VsZi5tYWtlY3ljbGUoc3Rhcm1hcChsYW1iZGEgKnQ6IHQsIFsoYSxhKV0qMiksIGEpCisKKyAgICBkZWYgdGVzdF90YWtld2hpbGUoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZSh0YWtld2hpbGUoYm9vbCwgWzEsIDAsIGEsIGFdKSwgYSkKKworZGVmIFIoc2Vxbik6CisgICAgJ1JlZ3VsYXIgZ2VuZXJhdG9yJworICAgIGZvciBpIGluIHNlcW46CisgICAgICAgIHlpZWxkIGkKKworY2xhc3MgRzoKKyAgICAnU2VxdWVuY2UgdXNpbmcgX19nZXRpdGVtX18nCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXFuW2ldCisKK2NsYXNzIEk6CisgICAgJ1NlcXVlbmNlIHVzaW5nIGl0ZXJhdG9yIHByb3RvY29sJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmkgPj0gbGVuKHNlbGYuc2Vxbik6IHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgdiA9IHNlbGYuc2VxbltzZWxmLmldCisgICAgICAgIHNlbGYuaSArPSAxCisgICAgICAgIHJldHVybiB2CisKK2NsYXNzIElnOgorICAgICdTZXF1ZW5jZSB1c2luZyBpdGVyYXRvciBwcm90b2NvbCBkZWZpbmVkIHdpdGggYSBnZW5lcmF0b3InCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgICAgIHNlbGYuaSA9IDAKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGZvciB2YWwgaW4gc2VsZi5zZXFuOgorICAgICAgICAgICAgeWllbGQgdmFsCisKK2NsYXNzIFg6CisgICAgJ01pc3NpbmcgX19nZXRpdGVtX18gYW5kIF9faXRlcl9fJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaSA+PSBsZW4oc2VsZi5zZXFuKTogcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICB2ID0gc2VsZi5zZXFuW3NlbGYuaV0KKyAgICAgICAgc2VsZi5pICs9IDEKKyAgICAgICAgcmV0dXJuIHYKKworY2xhc3MgTjoKKyAgICAnSXRlcmF0b3IgbWlzc2luZyBuZXh0KCknCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgICAgIHNlbGYuaSA9IDAKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKK2NsYXNzIEU6CisgICAgJ1Rlc3QgcHJvcGFnYXRpb24gb2YgZXhjZXB0aW9ucycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgMyAvLyAwCisKK2NsYXNzIFM6CisgICAgJ1Rlc3QgaW1tZWRpYXRlIHN0b3AnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBwYXNzCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKK2RlZiBMKHNlcW4pOgorICAgICdUZXN0IG11bHRpcGxlIHRpZXJzIG9mIGl0ZXJhdG9ycycKKyAgICByZXR1cm4gY2hhaW4oaW1hcChsYW1iZGEgeDp4LCBSKElnKEcoc2VxbikpKSkpCisKKworY2xhc3MgVGVzdFZhcmlvdXNJdGVyYXRvckFyZ3ModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY2hhaW4oc2VsZik6CisgICAgICAgIGZvciBzIGluICgiMTIzIiwgIiIsIHJhbmdlKDEwMDApLCAoJ2RvJywgMS4yKSwgeHJhbmdlKDIwMDAsMjIwMCw1KSk6CisgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjaGFpbihnKHMpKSksIGxpc3QoZyhzKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNoYWluKGcocyksIGcocykpKSwgbGlzdChnKHMpKStsaXN0KGcocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBjaGFpbihYKHMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgY2hhaW4oTihzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbGlzdCwgY2hhaW4oRShzKSkpCisKKyAgICBkZWYgdGVzdF9jb21wcmVzcyhzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCIxMjMiLCAiIiwgcmFuZ2UoMTAwMCksICgnZG8nLCAxLjIpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgIG4gPSBsZW4ocykKKyAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgUywgTCwgUik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbXByZXNzKGcocyksIHJlcGVhdCgxKSkpLCBsaXN0KGcocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wcmVzcywgWChzKSwgcmVwZWF0KDEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBjb21wcmVzcyhOKHMpLCByZXBlYXQoMSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxpc3QsIGNvbXByZXNzKEUocyksIHJlcGVhdCgxKSkpCisKKyAgICBkZWYgdGVzdF9wcm9kdWN0KHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAoIjEyMyIsICIiLCByYW5nZSgxMDAwKSwgKCdkbycsIDEuMiksIHhyYW5nZSgyMDAwLDIyMDAsNSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwcm9kdWN0LCBYKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwcm9kdWN0LCBOKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHByb2R1Y3QsIEUocykpCisKKyAgICBkZWYgdGVzdF9jeWNsZShzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCIxMjMiLCAiIiwgcmFuZ2UoMTAwMCksICgnZG8nLCAxLjIpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgUywgTCwgUik6CisgICAgICAgICAgICAgICAgdGd0bGVuID0gbGVuKHMpICogMworICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbGlzdChnKHMpKSozCisgICAgICAgICAgICAgICAgYWN0dWFsID0gbGlzdChpc2xpY2UoY3ljbGUoZyhzKSksIHRndGxlbikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjeWNsZSwgWChzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgY3ljbGUoTihzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbGlzdCwgY3ljbGUoRShzKSkpCisKKyAgICBkZWYgdGVzdF9ncm91cGJ5KHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAocmFuZ2UoMTApLCByYW5nZSgwKSwgcmFuZ2UoMTAwMCksICg3LDExKSwgeHJhbmdlKDIwMDAsMjIwMCw1KSk6CisgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2sgZm9yIGssIHNiIGluIGdyb3VwYnkoZyhzKSldLCBsaXN0KGcocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBncm91cGJ5LCBYKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBncm91cGJ5KE4ocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxpc3QsIGdyb3VwYnkoRShzKSkpCisKKyAgICBkZWYgdGVzdF9pZmlsdGVyKHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAocmFuZ2UoMTApLCByYW5nZSgwKSwgcmFuZ2UoMTAwMCksICg3LDExKSwgeHJhbmdlKDIwMDAsMjIwMCw1KSk6CisgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpZmlsdGVyKGlzRXZlbiwgZyhzKSkpLCBmaWx0ZXIoaXNFdmVuLCBnKHMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaWZpbHRlciwgaXNFdmVuLCBYKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBpZmlsdGVyKGlzRXZlbiwgTihzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbGlzdCwgaWZpbHRlcihpc0V2ZW4sIEUocykpKQorCisgICAgZGVmIHRlc3RfaWZpbHRlcmZhbHNlKHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAocmFuZ2UoMTApLCByYW5nZSgwKSwgcmFuZ2UoMTAwMCksICg3LDExKSwgeHJhbmdlKDIwMDAsMjIwMCw1KSk6CisgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpZmlsdGVyZmFsc2UoaXNFdmVuLCBnKHMpKSksIGZpbHRlcihpc09kZCwgZyhzKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlmaWx0ZXJmYWxzZSwgaXNFdmVuLCBYKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBpZmlsdGVyZmFsc2UoaXNFdmVuLCBOKHMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsaXN0LCBpZmlsdGVyZmFsc2UoaXNFdmVuLCBFKHMpKSkKKworICAgIGRlZiB0ZXN0X2l6aXAoc2VsZik6CisgICAgICAgIGZvciBzIGluICgiMTIzIiwgIiIsIHJhbmdlKDEwMDApLCAoJ2RvJywgMS4yKSwgeHJhbmdlKDIwMDAsMjIwMCw1KSk6CisgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpemlwKGcocykpKSwgemlwKGcocykpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpemlwKGcocyksIGcocykpKSwgemlwKGcocyksIGcocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpemlwLCBYKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBpemlwKE4ocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxpc3QsIGl6aXAoRShzKSkpCisKKyAgICBkZWYgdGVzdF9pemlwbG9uZ2VzdChzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCIxMjMiLCAiIiwgcmFuZ2UoMTAwMCksICgnZG8nLCAxLjIpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgUywgTCwgUik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl6aXBfbG9uZ2VzdChnKHMpKSksIHppcChnKHMpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXppcF9sb25nZXN0KGcocyksIGcocykpKSwgemlwKGcocyksIGcocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpemlwX2xvbmdlc3QsIFgocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGl6aXBfbG9uZ2VzdChOKHMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsaXN0LCBpemlwX2xvbmdlc3QoRShzKSkpCisKKyAgICBkZWYgdGVzdF9pbWFwKHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAocmFuZ2UoMTApLCByYW5nZSgwKSwgcmFuZ2UoMTAwKSwgKDcsMTEpLCB4cmFuZ2UoMjAsNTAsNSkpOgorICAgICAgICAgICAgZm9yIGcgaW4gKEcsIEksIElnLCBTLCBMLCBSKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaW1hcChvbmVhcmcsIGcocykpKSwgbWFwKG9uZWFyZywgZyhzKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGltYXAob3BlcmF0b3IucG93LCBnKHMpLCBnKHMpKSksIG1hcChvcGVyYXRvci5wb3csIGcocyksIGcocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbWFwLCBvbmVhcmcsIFgocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGltYXAob25lYXJnLCBOKHMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsaXN0LCBpbWFwKG9uZWFyZywgRShzKSkpCisKKyAgICBkZWYgdGVzdF9pc2xpY2Uoc2VsZik6CisgICAgICAgIGZvciBzIGluICgiMTIzNDUiLCAiIiwgcmFuZ2UoMTAwMCksICgnZG8nLCAxLjIpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgUywgTCwgUik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGlzbGljZShnKHMpLDEsTm9uZSwyKSksIGxpc3QoZyhzKSlbMTo6Ml0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlzbGljZSwgWChzKSwgMTApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGlzbGljZShOKHMpLCAxMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbGlzdCwgaXNsaWNlKEUocyksIDEwKSkKKworICAgIGRlZiB0ZXN0X3N0YXJtYXAoc2VsZik6CisgICAgICAgIGZvciBzIGluIChyYW5nZSgxMCksIHJhbmdlKDApLCByYW5nZSgxMDApLCAoNywxMSksIHhyYW5nZSgyMCw1MCw1KSk6CisgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgorICAgICAgICAgICAgICAgIHNzID0gemlwKHMsIHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN0YXJtYXAob3BlcmF0b3IucG93LCBnKHNzKSkpLCBtYXAob3BlcmF0b3IucG93LCBnKHMpLCBnKHMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3Rhcm1hcCwgb3BlcmF0b3IucG93LCBYKHNzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgc3Rhcm1hcChvcGVyYXRvci5wb3csIE4oc3MpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsaXN0LCBzdGFybWFwKG9wZXJhdG9yLnBvdywgRShzcykpKQorCisgICAgZGVmIHRlc3RfdGFrZXdoaWxlKHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAocmFuZ2UoMTApLCByYW5nZSgwKSwgcmFuZ2UoMTAwMCksICg3LDExKSwgeHJhbmdlKDIwMDAsMjIwMCw1KSk6CisgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgorICAgICAgICAgICAgICAgIHRndCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGVsZW0gaW4gZyhzKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzRXZlbihlbGVtKTogYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgdGd0LmFwcGVuZChlbGVtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh0YWtld2hpbGUoaXNFdmVuLCBnKHMpKSksIHRndCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGFrZXdoaWxlLCBpc0V2ZW4sIFgocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIHRha2V3aGlsZShpc0V2ZW4sIE4ocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxpc3QsIHRha2V3aGlsZShpc0V2ZW4sIEUocykpKQorCisgICAgZGVmIHRlc3RfZHJvcHdoaWxlKHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAocmFuZ2UoMTApLCByYW5nZSgwKSwgcmFuZ2UoMTAwMCksICg3LDExKSwgeHJhbmdlKDIwMDAsMjIwMCw1KSk6CisgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgorICAgICAgICAgICAgICAgIHRndCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGVsZW0gaW4gZyhzKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHRndCBhbmQgaXNPZGQoZWxlbSk6IGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHRndC5hcHBlbmQoZWxlbSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZHJvcHdoaWxlKGlzT2RkLCBnKHMpKSksIHRndCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZHJvcHdoaWxlLCBpc09kZCwgWChzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgZHJvcHdoaWxlKGlzT2RkLCBOKHMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsaXN0LCBkcm9wd2hpbGUoaXNPZGQsIEUocykpKQorCisgICAgZGVmIHRlc3RfdGVlKHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAoIjEyMyIsICIiLCByYW5nZSgxMDAwKSwgKCdkbycsIDEuMiksIHhyYW5nZSgyMDAwLDIyMDAsNSkpOgorICAgICAgICAgICAgZm9yIGcgaW4gKEcsIEksIElnLCBTLCBMLCBSKToKKyAgICAgICAgICAgICAgICBpdDEsIGl0MiA9IHRlZShnKHMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdDEpLCBsaXN0KGcocykpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdDIpLCBsaXN0KGcocykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0ZWUsIFgocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIHRlZShOKHMpKVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsaXN0LCB0ZWUoRShzKSlbMF0pCisKK2NsYXNzIExlbmd0aFRyYW5zcGFyZW5jeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6CisgICAgICAgIGZyb20gdGVzdC50ZXN0X2l0ZXJsZW4gaW1wb3J0IGxlbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXBlYXQoTm9uZSwgNTApKSwgNTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGVuLCByZXBlYXQoTm9uZSkpCisKK2NsYXNzIFJlZ3Jlc3Npb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zZl83OTM4MjYoc2VsZik6CisgICAgICAgICMgRml4IEFybWluIFJpZ28ncyBzdWNjZXNzZnVsIGVmZm9ydHMgdG8gd3JlYWsgaGF2b2MKKworICAgICAgICBkZWYgbXV0YXRpbmd0dXBsZSh0dXBsZTEsIGYsIHR1cGxlMik6CisgICAgICAgICAgICAjIHRoaXMgYnVpbGRzIGEgdHVwbGUgdCB3aGljaCBpcyBhIGNvcHkgb2YgdHVwbGUxLAorICAgICAgICAgICAgIyB0aGVuIGNhbGxzIGYodCksIHRoZW4gbXV0YXRlcyB0IHRvIGJlIGVxdWFsIHRvIHR1cGxlMgorICAgICAgICAgICAgIyAobmVlZHMgbGVuKHR1cGxlMSkgPT0gbGVuKHR1cGxlMikpLgorICAgICAgICAgICAgZGVmIGcodmFsdWUsIGZpcnN0PVsxXSk6CisgICAgICAgICAgICAgICAgaWYgZmlyc3Q6CisgICAgICAgICAgICAgICAgICAgIGRlbCBmaXJzdFs6XQorICAgICAgICAgICAgICAgICAgICBmKHoubmV4dCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZQorICAgICAgICAgICAgaXRlbXMgPSBsaXN0KHR1cGxlMikKKyAgICAgICAgICAgIGl0ZW1zWzE6MV0gPSBsaXN0KHR1cGxlMSkKKyAgICAgICAgICAgIGdlbiA9IGltYXAoZywgaXRlbXMpCisgICAgICAgICAgICB6ID0gaXppcCgqW2dlbl0qbGVuKHR1cGxlMSkpCisgICAgICAgICAgICB6Lm5leHQoKQorCisgICAgICAgIGRlZiBmKHQpOgorICAgICAgICAgICAgZ2xvYmFsIFQKKyAgICAgICAgICAgIFQgPSB0CisgICAgICAgICAgICBmaXJzdFs6XSA9IGxpc3QoVCkKKworICAgICAgICBmaXJzdCA9IFtdCisgICAgICAgIG11dGF0aW5ndHVwbGUoKDEsMiwzKSwgZiwgKDQsNSw2KSkKKyAgICAgICAgc2Vjb25kID0gbGlzdChUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpcnN0LCBzZWNvbmQpCisKKworICAgIGRlZiB0ZXN0X3NmXzk1MDA1NyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBjaGFpbigpIGFuZCBjeWNsZSgpIGNhdGNoIGV4Y2VwdGlvbnMgaW1tZWRpYXRlbHkKKyAgICAgICAgIyByYXRoZXIgdGhhbiB3aGVuIHNoaWZ0aW5nIGJldHdlZW4gaW5wdXQgc291cmNlcworCisgICAgICAgIGRlZiBnZW4xKCk6CisgICAgICAgICAgICBoaXN0LmFwcGVuZCgwKQorICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgaGlzdC5hcHBlbmQoMSkKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yCisgICAgICAgICAgICBoaXN0LmFwcGVuZCgyKQorCisgICAgICAgIGRlZiBnZW4yKHgpOgorICAgICAgICAgICAgaGlzdC5hcHBlbmQoMykKKyAgICAgICAgICAgIHlpZWxkIDIKKyAgICAgICAgICAgIGhpc3QuYXBwZW5kKDQpCisgICAgICAgICAgICBpZiB4OgorICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKworICAgICAgICBoaXN0ID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIGxpc3QsIGNoYWluKGdlbjEoKSwgZ2VuMihGYWxzZSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhpc3QsIFswLDFdKQorCisgICAgICAgIGhpc3QgPSBbXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbGlzdCwgY2hhaW4oZ2VuMSgpLCBnZW4yKFRydWUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoaXN0LCBbMCwxXSkKKworICAgICAgICBoaXN0ID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIGxpc3QsIGN5Y2xlKGdlbjEoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGlzdCwgWzAsMV0pCisKK2NsYXNzIFN1YmNsYXNzV2l0aEt3YXJnc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2tleXdvcmRzX2luX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAjIGNvdW50IGlzIG5vdCBzdWJjbGFzc2FibGUuLi4KKyAgICAgICAgZm9yIGNscyBpbiAocmVwZWF0LCBpemlwLCBpZmlsdGVyLCBpZmlsdGVyZmFsc2UsIGNoYWluLCBpbWFwLAorICAgICAgICAgICAgICAgICAgICBzdGFybWFwLCBpc2xpY2UsIHRha2V3aGlsZSwgZHJvcHdoaWxlLCBjeWNsZSwgY29tcHJlc3MpOgorICAgICAgICAgICAgY2xhc3MgU3ViY2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmV3YXJnPU5vbmUsICphcmdzKToKKyAgICAgICAgICAgICAgICAgICAgY2xzLl9faW5pdF9fKHNlbGYsICphcmdzKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIFN1YmNsYXNzKG5ld2FyZz0xKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgICMgd2UgZXhwZWN0IHR5cGUgZXJyb3JzIGJlY2F1c2Ugb2Ygd3JvbmcgYXJndW1lbnQgY291bnQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJkb2VzIG5vdCB0YWtlIGtleXdvcmQgYXJndW1lbnRzIiwgZXJyLmFyZ3NbMF0pCisKKworbGlicmVmdGVzdCA9ICIiIiBEb2N0ZXN0IGZvciBleGFtcGxlcyBpbiB0aGUgbGlicmFyeSByZWZlcmVuY2U6IGxpYml0ZXJ0b29scy50ZXgKKworCis+Pj4gYW1vdW50cyA9IFsxMjAuMTUsIDc2NC4wNSwgODIzLjE0XQorPj4+IGZvciBjaGVja251bSwgYW1vdW50IGluIGl6aXAoY291bnQoMTIwMCksIGFtb3VudHMpOgorLi4uICAgICBwcmludCAnQ2hlY2sgJWQgaXMgZm9yICQlLjJmJyAlIChjaGVja251bSwgYW1vdW50KQorLi4uCitDaGVjayAxMjAwIGlzIGZvciAkMTIwLjE1CitDaGVjayAxMjAxIGlzIGZvciAkNzY0LjA1CitDaGVjayAxMjAyIGlzIGZvciAkODIzLjE0CisKKz4+PiBpbXBvcnQgb3BlcmF0b3IKKz4+PiBmb3IgY3ViZSBpbiBpbWFwKG9wZXJhdG9yLnBvdywgeHJhbmdlKDEsNCksIHJlcGVhdCgzKSk6CisuLi4gICAgcHJpbnQgY3ViZQorLi4uCisxCis4CisyNworCis+Pj4gcmVwb3J0bGluZXMgPSBbJ0V1cm9QeXRob24nLCAnUm9zdGVyJywgJycsICdhbGV4JywgJycsICdsYXVyYScsICcnLCAnbWFydGluJywgJycsICd3YWx0ZXInLCAnJywgJ3NhbXVlbGUnXQorPj4+IGZvciBuYW1lIGluIGlzbGljZShyZXBvcnRsaW5lcywgMywgTm9uZSwgMik6CisuLi4gICAgcHJpbnQgbmFtZS50aXRsZSgpCisuLi4KK0FsZXgKK0xhdXJhCitNYXJ0aW4KK1dhbHRlcgorU2FtdWVsZQorCis+Pj4gZnJvbSBvcGVyYXRvciBpbXBvcnQgaXRlbWdldHRlcgorPj4+IGQgPSBkaWN0KGE9MSwgYj0yLCBjPTEsIGQ9MiwgZT0xLCBmPTIsIGc9MykKKz4+PiBkaSA9IHNvcnRlZChzb3J0ZWQoZC5pdGVyaXRlbXMoKSksIGtleT1pdGVtZ2V0dGVyKDEpKQorPj4+IGZvciBrLCBnIGluIGdyb3VwYnkoZGksIGl0ZW1nZXR0ZXIoMSkpOgorLi4uICAgICBwcmludCBrLCBtYXAoaXRlbWdldHRlcigwKSwgZykKKy4uLgorMSBbJ2EnLCAnYycsICdlJ10KKzIgWydiJywgJ2QnLCAnZiddCiszIFsnZyddCisKKyMgRmluZCBydW5zIG9mIGNvbnNlY3V0aXZlIG51bWJlcnMgdXNpbmcgZ3JvdXBieS4gIFRoZSBrZXkgdG8gdGhlIHNvbHV0aW9uCisjIGlzIGRpZmZlcmVuY2luZyB3aXRoIGEgcmFuZ2Ugc28gdGhhdCBjb25zZWN1dGl2ZSBudW1iZXJzIGFsbCBhcHBlYXIgaW4KKyMgc2FtZSBncm91cC4KKz4+PiBkYXRhID0gWyAxLCAgNCw1LDYsIDEwLCAxNSwxNiwxNywxOCwgMjIsIDI1LDI2LDI3LDI4XQorPj4+IGZvciBrLCBnIGluIGdyb3VwYnkoZW51bWVyYXRlKGRhdGEpLCBsYW1iZGEgdDp0WzBdLXRbMV0pOgorLi4uICAgICBwcmludCBtYXAob3BlcmF0b3IuaXRlbWdldHRlcigxKSwgZykKKy4uLgorWzFdCitbNCwgNSwgNl0KK1sxMF0KK1sxNSwgMTYsIDE3LCAxOF0KK1syMl0KK1syNSwgMjYsIDI3LCAyOF0KKworPj4+IGRlZiB0YWtlKG4sIGl0ZXJhYmxlKToKKy4uLiAgICAgIlJldHVybiBmaXJzdCBuIGl0ZW1zIG9mIHRoZSBpdGVyYWJsZSBhcyBhIGxpc3QiCisuLi4gICAgIHJldHVybiBsaXN0KGlzbGljZShpdGVyYWJsZSwgbikpCisKKz4+PiBkZWYgZW51bWVyYXRlKGl0ZXJhYmxlLCBzdGFydD0wKToKKy4uLiAgICAgcmV0dXJuIGl6aXAoY291bnQoc3RhcnQpLCBpdGVyYWJsZSkKKworPj4+IGRlZiB0YWJ1bGF0ZShmdW5jdGlvbiwgc3RhcnQ9MCk6CisuLi4gICAgICJSZXR1cm4gZnVuY3Rpb24oMCksIGZ1bmN0aW9uKDEpLCAuLi4iCisuLi4gICAgIHJldHVybiBpbWFwKGZ1bmN0aW9uLCBjb3VudChzdGFydCkpCisKKz4+PiBkZWYgbnRoKGl0ZXJhYmxlLCBuLCBkZWZhdWx0PU5vbmUpOgorLi4uICAgICAiUmV0dXJucyB0aGUgbnRoIGl0ZW0gb3IgYSBkZWZhdWx0IHZhbHVlIgorLi4uICAgICByZXR1cm4gbmV4dChpc2xpY2UoaXRlcmFibGUsIG4sIE5vbmUpLCBkZWZhdWx0KQorCis+Pj4gZGVmIHF1YW50aWZ5KGl0ZXJhYmxlLCBwcmVkPWJvb2wpOgorLi4uICAgICAiQ291bnQgaG93IG1hbnkgdGltZXMgdGhlIHByZWRpY2F0ZSBpcyB0cnVlIgorLi4uICAgICByZXR1cm4gc3VtKGltYXAocHJlZCwgaXRlcmFibGUpKQorCis+Pj4gZGVmIHBhZG5vbmUoaXRlcmFibGUpOgorLi4uICAgICAiUmV0dXJucyB0aGUgc2VxdWVuY2UgZWxlbWVudHMgYW5kIHRoZW4gcmV0dXJucyBOb25lIGluZGVmaW5pdGVseSIKKy4uLiAgICAgcmV0dXJuIGNoYWluKGl0ZXJhYmxlLCByZXBlYXQoTm9uZSkpCisKKz4+PiBkZWYgbmN5Y2xlcyhpdGVyYWJsZSwgbik6CisuLi4gICAgICJSZXR1cm5zIHRoZSBzZXF1ZW5jZSBlbGVtZW50cyBuIHRpbWVzIgorLi4uICAgICByZXR1cm4gY2hhaW4oKnJlcGVhdChpdGVyYWJsZSwgbikpCisKKz4+PiBkZWYgZG90cHJvZHVjdCh2ZWMxLCB2ZWMyKToKKy4uLiAgICAgcmV0dXJuIHN1bShpbWFwKG9wZXJhdG9yLm11bCwgdmVjMSwgdmVjMikpCisKKz4+PiBkZWYgZmxhdHRlbihsaXN0T2ZMaXN0cyk6CisuLi4gICAgIHJldHVybiBsaXN0KGNoYWluLmZyb21faXRlcmFibGUobGlzdE9mTGlzdHMpKQorCis+Pj4gZGVmIHJlcGVhdGZ1bmMoZnVuYywgdGltZXM9Tm9uZSwgKmFyZ3MpOgorLi4uICAgICAiUmVwZWF0IGNhbGxzIHRvIGZ1bmMgd2l0aCBzcGVjaWZpZWQgYXJndW1lbnRzLiIKKy4uLiAgICAgIiAgIEV4YW1wbGU6ICByZXBlYXRmdW5jKHJhbmRvbS5yYW5kb20pIgorLi4uICAgICBpZiB0aW1lcyBpcyBOb25lOgorLi4uICAgICAgICAgcmV0dXJuIHN0YXJtYXAoZnVuYywgcmVwZWF0KGFyZ3MpKQorLi4uICAgICBlbHNlOgorLi4uICAgICAgICAgcmV0dXJuIHN0YXJtYXAoZnVuYywgcmVwZWF0KGFyZ3MsIHRpbWVzKSkKKworPj4+IGRlZiBwYWlyd2lzZShpdGVyYWJsZSk6CisuLi4gICAgICJzIC0+IChzMCxzMSksIChzMSxzMiksIChzMiwgczMpLCAuLi4iCisuLi4gICAgIGEsIGIgPSB0ZWUoaXRlcmFibGUpCisuLi4gICAgIGZvciBlbGVtIGluIGI6CisuLi4gICAgICAgICBicmVhaworLi4uICAgICByZXR1cm4gaXppcChhLCBiKQorCis+Pj4gZGVmIGdyb3VwZXIobiwgaXRlcmFibGUsIGZpbGx2YWx1ZT1Ob25lKToKKy4uLiAgICAgImdyb3VwZXIoMywgJ0FCQ0RFRkcnLCAneCcpIC0tPiBBQkMgREVGIEd4eCIKKy4uLiAgICAgYXJncyA9IFtpdGVyKGl0ZXJhYmxlKV0gKiBuCisuLi4gICAgIHJldHVybiBpemlwX2xvbmdlc3QoZmlsbHZhbHVlPWZpbGx2YWx1ZSwgKmFyZ3MpCisKKz4+PiBkZWYgcm91bmRyb2JpbigqaXRlcmFibGVzKToKKy4uLiAgICAgInJvdW5kcm9iaW4oJ0FCQycsICdEJywgJ0VGJykgLS0+IEEgRCBFIEIgRiBDIgorLi4uICAgICAjIFJlY2lwZSBjcmVkaXRlZCB0byBHZW9yZ2UgU2Fra2lzCisuLi4gICAgIHBlbmRpbmcgPSBsZW4oaXRlcmFibGVzKQorLi4uICAgICBuZXh0cyA9IGN5Y2xlKGl0ZXIoaXQpLm5leHQgZm9yIGl0IGluIGl0ZXJhYmxlcykKKy4uLiAgICAgd2hpbGUgcGVuZGluZzoKKy4uLiAgICAgICAgIHRyeToKKy4uLiAgICAgICAgICAgICBmb3IgbmV4dCBpbiBuZXh0czoKKy4uLiAgICAgICAgICAgICAgICAgeWllbGQgbmV4dCgpCisuLi4gICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKy4uLiAgICAgICAgICAgICBwZW5kaW5nIC09IDEKKy4uLiAgICAgICAgICAgICBuZXh0cyA9IGN5Y2xlKGlzbGljZShuZXh0cywgcGVuZGluZykpCisKKz4+PiBkZWYgcG93ZXJzZXQoaXRlcmFibGUpOgorLi4uICAgICAicG93ZXJzZXQoWzEsMiwzXSkgLS0+ICgpICgxLCkgKDIsKSAoMywpICgxLDIpICgxLDMpICgyLDMpICgxLDIsMykiCisuLi4gICAgIHMgPSBsaXN0KGl0ZXJhYmxlKQorLi4uICAgICByZXR1cm4gY2hhaW4uZnJvbV9pdGVyYWJsZShjb21iaW5hdGlvbnMocywgcikgZm9yIHIgaW4gcmFuZ2UobGVuKHMpKzEpKQorCis+Pj4gZGVmIHVuaXF1ZV9ldmVyc2VlbihpdGVyYWJsZSwga2V5PU5vbmUpOgorLi4uICAgICAiTGlzdCB1bmlxdWUgZWxlbWVudHMsIHByZXNlcnZpbmcgb3JkZXIuIFJlbWVtYmVyIGFsbCBlbGVtZW50cyBldmVyIHNlZW4uIgorLi4uICAgICAjIHVuaXF1ZV9ldmVyc2VlbignQUFBQUJCQkNDREFBQkJCJykgLS0+IEEgQiBDIEQKKy4uLiAgICAgIyB1bmlxdWVfZXZlcnNlZW4oJ0FCQkNjQUQnLCBzdHIubG93ZXIpIC0tPiBBIEIgQyBECisuLi4gICAgIHNlZW4gPSBzZXQoKQorLi4uICAgICBzZWVuX2FkZCA9IHNlZW4uYWRkCisuLi4gICAgIGlmIGtleSBpcyBOb25lOgorLi4uICAgICAgICAgZm9yIGVsZW1lbnQgaW4gaXRlcmFibGU6CisuLi4gICAgICAgICAgICAgaWYgZWxlbWVudCBub3QgaW4gc2VlbjoKKy4uLiAgICAgICAgICAgICAgICAgc2Vlbl9hZGQoZWxlbWVudCkKKy4uLiAgICAgICAgICAgICAgICAgeWllbGQgZWxlbWVudAorLi4uICAgICBlbHNlOgorLi4uICAgICAgICAgZm9yIGVsZW1lbnQgaW4gaXRlcmFibGU6CisuLi4gICAgICAgICAgICAgayA9IGtleShlbGVtZW50KQorLi4uICAgICAgICAgICAgIGlmIGsgbm90IGluIHNlZW46CisuLi4gICAgICAgICAgICAgICAgIHNlZW5fYWRkKGspCisuLi4gICAgICAgICAgICAgICAgIHlpZWxkIGVsZW1lbnQKKworPj4+IGRlZiB1bmlxdWVfanVzdHNlZW4oaXRlcmFibGUsIGtleT1Ob25lKToKKy4uLiAgICAgIkxpc3QgdW5pcXVlIGVsZW1lbnRzLCBwcmVzZXJ2aW5nIG9yZGVyLiBSZW1lbWJlciBvbmx5IHRoZSBlbGVtZW50IGp1c3Qgc2Vlbi4iCisuLi4gICAgICMgdW5pcXVlX2p1c3RzZWVuKCdBQUFBQkJCQ0NEQUFCQkInKSAtLT4gQSBCIEMgRCBBIEIKKy4uLiAgICAgIyB1bmlxdWVfanVzdHNlZW4oJ0FCQkNjQUQnLCBzdHIubG93ZXIpIC0tPiBBIEIgQyBBIEQKKy4uLiAgICAgcmV0dXJuIGltYXAobmV4dCwgaW1hcChpdGVtZ2V0dGVyKDEpLCBncm91cGJ5KGl0ZXJhYmxlLCBrZXkpKSkKKworVGhpcyBpcyBub3QgcGFydCBvZiB0aGUgZXhhbXBsZXMgYnV0IGl0IHRlc3RzIHRvIG1ha2Ugc3VyZSB0aGUgZGVmaW5pdGlvbnMKK3BlcmZvcm0gYXMgcHVycG9ydGVkLgorCis+Pj4gdGFrZSgxMCwgY291bnQoKSkKK1swLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XQorCis+Pj4gbGlzdChlbnVtZXJhdGUoJ2FiYycpKQorWygwLCAnYScpLCAoMSwgJ2InKSwgKDIsICdjJyldCisKKz4+PiBsaXN0KGlzbGljZSh0YWJ1bGF0ZShsYW1iZGEgeDogMip4KSwgNCkpCitbMCwgMiwgNCwgNl0KKworPj4+IG50aCgnYWJjZGUnLCAzKQorJ2QnCisKKz4+PiBudGgoJ2FiY2RlJywgOSkgaXMgTm9uZQorVHJ1ZQorCis+Pj4gcXVhbnRpZnkoeHJhbmdlKDk5KSwgbGFtYmRhIHg6IHglMj09MCkKKzUwCisKKz4+PiBhID0gW1sxLCAyLCAzXSwgWzQsIDUsIDZdXQorPj4+IGZsYXR0ZW4oYSkKK1sxLCAyLCAzLCA0LCA1LCA2XQorCis+Pj4gbGlzdChyZXBlYXRmdW5jKHBvdywgNSwgMiwgMykpCitbOCwgOCwgOCwgOCwgOF0KKworPj4+IGltcG9ydCByYW5kb20KKz4+PiB0YWtlKDUsIGltYXAoaW50LCByZXBlYXRmdW5jKHJhbmRvbS5yYW5kb20pKSkKK1swLCAwLCAwLCAwLCAwXQorCis+Pj4gbGlzdChwYWlyd2lzZSgnYWJjZCcpKQorWygnYScsICdiJyksICgnYicsICdjJyksICgnYycsICdkJyldCisKKz4+PiBsaXN0KHBhaXJ3aXNlKFtdKSkKK1tdCisKKz4+PiBsaXN0KHBhaXJ3aXNlKCdhJykpCitbXQorCis+Pj4gbGlzdChpc2xpY2UocGFkbm9uZSgnYWJjJyksIDAsIDYpKQorWydhJywgJ2InLCAnYycsIE5vbmUsIE5vbmUsIE5vbmVdCisKKz4+PiBsaXN0KG5jeWNsZXMoJ2FiYycsIDMpKQorWydhJywgJ2InLCAnYycsICdhJywgJ2InLCAnYycsICdhJywgJ2InLCAnYyddCisKKz4+PiBkb3Rwcm9kdWN0KFsxLDIsM10sIFs0LDUsNl0pCiszMgorCis+Pj4gbGlzdChncm91cGVyKDMsICdhYmNkZWZnJywgJ3gnKSkKK1soJ2EnLCAnYicsICdjJyksICgnZCcsICdlJywgJ2YnKSwgKCdnJywgJ3gnLCAneCcpXQorCis+Pj4gbGlzdChyb3VuZHJvYmluKCdhYmMnLCAnZCcsICdlZicpKQorWydhJywgJ2QnLCAnZScsICdiJywgJ2YnLCAnYyddCisKKz4+PiBsaXN0KHBvd2Vyc2V0KFsxLDIsM10pKQorWygpLCAoMSwpLCAoMiwpLCAoMywpLCAoMSwgMiksICgxLCAzKSwgKDIsIDMpLCAoMSwgMiwgMyldCisKKz4+PiBhbGwobGVuKGxpc3QocG93ZXJzZXQocmFuZ2UobikpKSkgPT0gMioqbiBmb3IgbiBpbiByYW5nZSgxOCkpCitUcnVlCisKKz4+PiBsaXN0KHBvd2Vyc2V0KCdhYmNkZScpKSA9PSBzb3J0ZWQoc29ydGVkKHNldChwb3dlcnNldCgnYWJjZGUnKSkpLCBrZXk9bGVuKQorVHJ1ZQorCis+Pj4gbGlzdCh1bmlxdWVfZXZlcnNlZW4oJ0FBQUFCQkJDQ0RBQUJCQicpKQorWydBJywgJ0InLCAnQycsICdEJ10KKworPj4+IGxpc3QodW5pcXVlX2V2ZXJzZWVuKCdBQkJDY0FEJywgc3RyLmxvd2VyKSkKK1snQScsICdCJywgJ0MnLCAnRCddCisKKz4+PiBsaXN0KHVuaXF1ZV9qdXN0c2VlbignQUFBQUJCQkNDREFBQkJCJykpCitbJ0EnLCAnQicsICdDJywgJ0QnLCAnQScsICdCJ10KKworPj4+IGxpc3QodW5pcXVlX2p1c3RzZWVuKCdBQkJDY0FEJywgc3RyLmxvd2VyKSkKK1snQScsICdCJywgJ0MnLCAnQScsICdEJ10KKworIiIiCisKK19fdGVzdF9fID0geydsaWJyZWZ0ZXN0JyA6IGxpYnJlZnRlc3R9CisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICB0ZXN0X2NsYXNzZXMgPSAoVGVzdEJhc2ljT3BzLCBUZXN0VmFyaW91c0l0ZXJhdG9yQXJncywgVGVzdEdDLAorICAgICAgICAgICAgICAgICAgICBSZWdyZXNzaW9uVGVzdHMsIExlbmd0aFRyYW5zcGFyZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgU3ViY2xhc3NXaXRoS3dhcmdzVGVzdCwgVGVzdEV4YW1wbGVzKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKworICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZworICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgY291bnRzID0gW05vbmVdICogNQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKGNvdW50cykpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgIHByaW50IGNvdW50cworCisgICAgIyBkb2N0ZXN0IHRoZSBleGFtcGxlcyBpbiB0aGUgbGlicmFyeSByZWZlcmVuY2UKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3Qoc3lzLm1vZHVsZXNbX19uYW1lX19dLCB2ZXJib3NlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9qc29uLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfanNvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjhmM2RlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfanNvbi5weQpAQCAtMCwwICsxLDE3IEBACisiIiJUZXN0cyBmb3IganNvbi4KKworVGhlIHRlc3RzIGZvciBqc29uIGFyZSBkZWZpbmVkIGluIHRoZSBqc29uLnRlc3RzIHBhY2thZ2U7Cit0aGUgdGVzdF9zdWl0ZSgpIGZ1bmN0aW9uIHRoZXJlIHJldHVybnMgYSB0ZXN0IHN1aXRlIHRoYXQncyByZWFkeSB0bworYmUgcnVuLgorIiIiCisKK2ltcG9ydCBqc29uLnRlc3RzCitpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KGpzb24udGVzdHMudGVzdF9zdWl0ZSgpKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2txdWV1ZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2txdWV1ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjhmZjJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfa3F1ZXVlLnB5CkBAIC0wLDAgKzEsMTg3IEBACisiIiIKK1Rlc3RzIGZvciBrcXVldWUgd3JhcHBlci4KKyIiIgoraW1wb3J0IHNvY2tldAoraW1wb3J0IGVycm5vCitpbXBvcnQgdGltZQoraW1wb3J0IHNlbGVjdAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpZiBub3QgaGFzYXR0cihzZWxlY3QsICJrcXVldWUiKToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgidGVzdCB3b3JrcyBvbmx5IG9uIEJTRCIpCisKK2NsYXNzIFRlc3RLUXVldWUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2NyZWF0ZV9xdWV1ZShzZWxmKToKKyAgICAgICAga3EgPSBzZWxlY3Qua3F1ZXVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGtxLmZpbGVubygpID4gMCwga3EuZmlsZW5vKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qga3EuY2xvc2VkKQorICAgICAgICBrcS5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrcS5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGtxLmZpbGVubykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9ldmVudChzZWxmKToKKyAgICAgICAgZmQgPSBzeXMuc3RkZXJyLmZpbGVubygpCisgICAgICAgIGV2ID0gc2VsZWN0LmtldmVudChmZCkKKyAgICAgICAgb3RoZXIgPSBzZWxlY3Qua2V2ZW50KDEwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuaWRlbnQsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZpbHRlciwgc2VsZWN0LktRX0ZJTFRFUl9SRUFEKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZsYWdzLCBzZWxlY3QuS1FfRVZfQUREKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZmbGFncywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5kYXRhLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LnVkYXRhLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LCBldikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChldiwgb3RoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKGV2LCBvdGhlciksIC0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXYgPCBvdGhlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG90aGVyID49IGV2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCwgZXYsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY21wLCBldiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbXAsIGV2LCAiZXYiKQorCisgICAgICAgIGV2ID0gc2VsZWN0LmtldmVudChmZCwgc2VsZWN0LktRX0ZJTFRFUl9XUklURSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5pZGVudCwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmlsdGVyLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZsYWdzLCBzZWxlY3QuS1FfRVZfQUREKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZmbGFncywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5kYXRhLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LnVkYXRhLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LCBldikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChldiwgb3RoZXIpCisKKyAgICAgICAgZXYgPSBzZWxlY3Qua2V2ZW50KGZkLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFLCBzZWxlY3QuS1FfRVZfT05FU0hPVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5pZGVudCwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmlsdGVyLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZsYWdzLCBzZWxlY3QuS1FfRVZfT05FU0hPVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5mZmxhZ3MsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZGF0YSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi51ZGF0YSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldiwgZXYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZXYsIG90aGVyKQorCisgICAgICAgIGV2ID0gc2VsZWN0LmtldmVudCgxLCAyLCAzLCA0LCA1LCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmlkZW50LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZpbHRlciwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5mbGFncywgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5mZmxhZ3MsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZGF0YSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi51ZGF0YSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldiwgZXYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZXYsIG90aGVyKQorCisgICAgICAgIGJpZ251bSA9IHN5cy5tYXhzaXplICogMiArIDEKKyAgICAgICAgZXYgPSBzZWxlY3Qua2V2ZW50KGJpZ251bSwgMSwgMiwgMywgc3lzLm1heHNpemUsIGJpZ251bSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5pZGVudCwgYmlnbnVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZpbHRlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5mbGFncywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5mZmxhZ3MsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZGF0YSwgc3lzLm1heHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYudWRhdGEsIGJpZ251bSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldiwgZXYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZXYsIG90aGVyKQorCisgICAgZGVmIHRlc3RfcXVldWVfZXZlbnQoc2VsZik6CisgICAgICAgIHNlcnZlclNvY2tldCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzZXJ2ZXJTb2NrZXQuYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICBzZXJ2ZXJTb2NrZXQubGlzdGVuKDEpCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBjbGllbnQuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgc2VydmVyU29ja2V0LmdldHNvY2tuYW1lKClbMV0pKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVJTlBST0dSRVNTKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI3JhaXNlIEFzc2VydGlvbkVycm9yKCJDb25uZWN0IHNob3VsZCBoYXZlIHJhaXNlZCBFSU5QUk9HUkVTUyIpCisgICAgICAgICAgICBwYXNzICMgRnJlZUJTRCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBoZXJlCisgICAgICAgIHNlcnZlciwgYWRkciA9IHNlcnZlclNvY2tldC5hY2NlcHQoKQorCisgICAgICAgIGtxID0gc2VsZWN0LmtxdWV1ZSgpCisgICAgICAgIGtxMiA9IHNlbGVjdC5rcXVldWUuZnJvbWZkKGtxLmZpbGVubygpKQorCisgICAgICAgIGV2ID0gc2VsZWN0LmtldmVudChzZXJ2ZXIuZmlsZW5vKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRklMVEVSX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0FERCB8IHNlbGVjdC5LUV9FVl9FTkFCTEUpCisgICAgICAgIGtxLmNvbnRyb2woW2V2XSwgMCkKKyAgICAgICAgZXYgPSBzZWxlY3Qua2V2ZW50KHNlcnZlci5maWxlbm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9GSUxURVJfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9BREQgfCBzZWxlY3QuS1FfRVZfRU5BQkxFKQorICAgICAgICBrcS5jb250cm9sKFtldl0sIDApCisgICAgICAgIGV2ID0gc2VsZWN0LmtldmVudChjbGllbnQuZmlsZW5vKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRklMVEVSX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0FERCB8IHNlbGVjdC5LUV9FVl9FTkFCTEUpCisgICAgICAgIGtxMi5jb250cm9sKFtldl0sIDApCisgICAgICAgIGV2ID0gc2VsZWN0LmtldmVudChjbGllbnQuZmlsZW5vKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRklMVEVSX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRVZfQUREIHwgc2VsZWN0LktRX0VWX0VOQUJMRSkKKyAgICAgICAga3EyLmNvbnRyb2woW2V2XSwgMCkKKworICAgICAgICBldmVudHMgPSBrcS5jb250cm9sKE5vbmUsIDQsIDEpCisgICAgICAgIGV2ZW50cyA9IHNldCgoZS5pZGVudCwgZS5maWx0ZXIpIGZvciBlIGluIGV2ZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIHNldChbCisgICAgICAgICAgICAoY2xpZW50LmZpbGVubygpLCBzZWxlY3QuS1FfRklMVEVSX1dSSVRFKSwKKyAgICAgICAgICAgIChzZXJ2ZXIuZmlsZW5vKCksIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUpXSkpCisKKyAgICAgICAgY2xpZW50LnNlbmQoIkhlbGxvISIpCisgICAgICAgIHNlcnZlci5zZW5kKCJ3b3JsZCEhISIpCisKKyAgICAgICAgIyBXZSBtYXkgbmVlZCB0byBjYWxsIGl0IHNldmVyYWwgdGltZXMKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgZXZlbnRzID0ga3EuY29udHJvbChOb25lLCA0LCAxKQorICAgICAgICAgICAgaWYgbGVuKGV2ZW50cykgPT0gNDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdGltZS5zbGVlcCgxLjApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ3RpbWVvdXQgd2FpdGluZyBmb3IgZXZlbnQgbm90aWZpY2F0aW9ucycpCisKKyAgICAgICAgZXZlbnRzID0gc2V0KChlLmlkZW50LCBlLmZpbHRlcikgZm9yIGUgaW4gZXZlbnRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgc2V0KFsKKyAgICAgICAgICAgIChjbGllbnQuZmlsZW5vKCksIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUpLAorICAgICAgICAgICAgKGNsaWVudC5maWxlbm8oKSwgc2VsZWN0LktRX0ZJTFRFUl9SRUFEKSwKKyAgICAgICAgICAgIChzZXJ2ZXIuZmlsZW5vKCksIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUpLAorICAgICAgICAgICAgKHNlcnZlci5maWxlbm8oKSwgc2VsZWN0LktRX0ZJTFRFUl9SRUFEKV0pKQorCisgICAgICAgICMgUmVtb3ZlIGNvbXBsZXRlbHkgY2xpZW50LCBhbmQgc2VydmVyIHJlYWQgcGFydAorICAgICAgICBldiA9IHNlbGVjdC5rZXZlbnQoY2xpZW50LmZpbGVubygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0ZJTFRFUl9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9ERUxFVEUpCisgICAgICAgIGtxLmNvbnRyb2woW2V2XSwgMCkKKyAgICAgICAgZXYgPSBzZWxlY3Qua2V2ZW50KGNsaWVudC5maWxlbm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9GSUxURVJfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9ERUxFVEUpCisgICAgICAgIGtxLmNvbnRyb2woW2V2XSwgMCkKKyAgICAgICAgZXYgPSBzZWxlY3Qua2V2ZW50KHNlcnZlci5maWxlbm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9GSUxURVJfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9ERUxFVEUpCisgICAgICAgIGtxLmNvbnRyb2woW2V2XSwgMCwgMCkKKworICAgICAgICBldmVudHMgPSBrcS5jb250cm9sKFtdLCA0LCAwLjk5KQorICAgICAgICBldmVudHMgPSBzZXQoKGUuaWRlbnQsIGUuZmlsdGVyKSBmb3IgZSBpbiBldmVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBzZXQoWworICAgICAgICAgICAgKHNlcnZlci5maWxlbm8oKSwgc2VsZWN0LktRX0ZJTFRFUl9XUklURSldKSkKKworICAgICAgICBjbGllbnQuY2xvc2UoKQorICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorICAgICAgICBzZXJ2ZXJTb2NrZXQuY2xvc2UoKQorCisgICAgZGVmIHRlc3RQYWlyKHNlbGYpOgorICAgICAgICBrcSA9IHNlbGVjdC5rcXVldWUoKQorICAgICAgICBhLCBiID0gc29ja2V0LnNvY2tldHBhaXIoKQorCisgICAgICAgIGEuc2VuZChiJ2ZvbycpCisgICAgICAgIGV2ZW50MSA9IHNlbGVjdC5rZXZlbnQoYSwgc2VsZWN0LktRX0ZJTFRFUl9SRUFELCBzZWxlY3QuS1FfRVZfQUREIHwgc2VsZWN0LktRX0VWX0VOQUJMRSkKKyAgICAgICAgZXZlbnQyID0gc2VsZWN0LmtldmVudChiLCBzZWxlY3QuS1FfRklMVEVSX1JFQUQsIHNlbGVjdC5LUV9FVl9BREQgfCBzZWxlY3QuS1FfRVZfRU5BQkxFKQorICAgICAgICByID0ga3EuY29udHJvbChbZXZlbnQxLCBldmVudDJdLCAxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyWzBdLmZsYWdzICYgc2VsZWN0LktRX0VWX0VSUk9SKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucmVjdihyWzBdLmRhdGEpLCBiJ2ZvbycpCisKKyAgICAgICAgYS5jbG9zZSgpCisgICAgICAgIGIuY2xvc2UoKQorICAgICAgICBrcS5jbG9zZSgpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RLUXVldWUpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2xhcmdlZmlsZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2xhcmdlZmlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmRhOGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5CkBAIC0wLDAgKzEsMjAwIEBACisiIiJUZXN0IGxhcmdlZmlsZSBzdXBwb3J0IG9uIHN5c3RlbSB3aGVyZSB0aGlzIG1ha2VzIHNlbnNlLgorIiIiCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KKworaW1wb3J0IG9zCitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgdmVyYm9zZSwgcmVxdWlyZXMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubGluaworaW1wb3J0IGlvICAjIEMgaW1wbGVtZW50YXRpb24gb2YgaW8KK2ltcG9ydCBfcHlpbyBhcyBweWlvICMgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGlvCisKK3RyeToKKyAgICBpbXBvcnQgc2lnbmFsCisgICAgIyBUaGUgZGVmYXVsdCBoYW5kbGVyIGZvciBTSUdYRlNaIGlzIHRvIGFib3J0IHRoZSBwcm9jZXNzLgorICAgICMgQnkgaWdub3JpbmcgaXQsIHN5c3RlbSBjYWxscyBleGNlZWRpbmcgdGhlIGZpbGUgc2l6ZSByZXNvdXJjZQorICAgICMgbGltaXQgd2lsbCByYWlzZSBJT0Vycm9yIGluc3RlYWQgb2YgY3Jhc2hpbmcgdGhlIGludGVycHJldGVyLgorICAgIG9sZGhhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdYRlNaLCBzaWduYWwuU0lHX0lHTikKK2V4Y2VwdCAoSW1wb3J0RXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICBwYXNzCisKKyMgY3JlYXRlID4yR0IgZmlsZSAoMkdCID0gMjE0NzQ4MzY0OCBieXRlcykKK3NpemUgPSAyNTAwMDAwMDAwCisKKworY2xhc3MgTGFyZ2VGaWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IGVhY2ggZmlsZSBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZCBmb3IgYSBsYXJnZQorICAgIChpLmUuID4gMkdCLCBkbyAgd2UgaGF2ZSB0byBjaGVjayA+IDRHQikgZmlsZXMuCisKKyAgICBOT1RFOiB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uIG9mIHRoZSB0ZXN0IG1ldGhvZHMgaXMgaW1wb3J0YW50ISB0ZXN0X3NlZWsKKyAgICBtdXN0IHJ1biBmaXJzdCB0byBjcmVhdGUgdGhlIHRlc3QgZmlsZS4gRmlsZSBjbGVhbnVwIG11c3QgYWxzbyBiZSBoYW5kbGVkCisgICAgb3V0c2lkZSB0aGUgdGVzdCBpbnN0YW5jZXMgYmVjYXVzZSBvZiB0aGlzLgorCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9zZWVrKHNlbGYpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoJ2NyZWF0ZSBsYXJnZSBmaWxlIHZpYSBzZWVrIChtYXkgYmUgc3BhcnNlIGZpbGUpIC4uLicpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKFRFU1RGTiwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYid6JykKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgZi5zZWVrKHNpemUpCisgICAgICAgICAgICBmLndyaXRlKGInYScpCisgICAgICAgICAgICBmLmZsdXNoKCkKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoJ2NoZWNrIGZpbGUgc2l6ZSB3aXRoIG9zLmZzdGF0JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZnN0YXQoZi5maWxlbm8oKSlbc3RhdC5TVF9TSVpFXSwgc2l6ZSsxKQorCisgICAgZGVmIHRlc3Rfb3NzdGF0KHNlbGYpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoJ2NoZWNrIGZpbGUgc2l6ZSB3aXRoIG9zLnN0YXQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQoVEVTVEZOKVtzdGF0LlNUX1NJWkVdLCBzaXplKzEpCisKKyAgICBkZWYgdGVzdF9zZWVrX3JlYWQoc2VsZik6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgncGxheSBhcm91bmQgd2l0aCBzZWVrKCkgYW5kIHJlYWQoKSB3aXRoIHRoZSBidWlsdCBsYXJnZWZpbGUnKQorICAgICAgICB3aXRoIHNlbGYub3BlbihURVNURk4sICdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMSksIGIneicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAxKQorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAwKQorICAgICAgICAgICAgZi5zZWVrKDAsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCAwKQorICAgICAgICAgICAgZi5zZWVrKDQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgNDIpCisgICAgICAgICAgICBmLnNlZWsoNDIsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCA0MikKKyAgICAgICAgICAgIGYuc2Vlayg0MiwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDg0KQorICAgICAgICAgICAgZi5zZWVrKDAsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCA4NCkKKyAgICAgICAgICAgIGYuc2VlaygwLCAyKSAgIyBzZWVrIGZyb20gdGhlIGVuZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgc2l6ZSArIDEgKyAwKQorICAgICAgICAgICAgZi5zZWVrKC0xMCwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHNpemUgKyAxIC0gMTApCisgICAgICAgICAgICBmLnNlZWsoLXNpemUtMSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDApCisgICAgICAgICAgICBmLnNlZWsoc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHNpemUpCisgICAgICAgICAgICAjIHRoZSAnYScgdGhhdCB3YXMgd3JpdHRlbiBhdCB0aGUgZW5kIG9mIGZpbGUgYWJvdmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDEpLCBiJ2EnKQorICAgICAgICAgICAgZi5zZWVrKC1zaXplLTEsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxKSwgYid6JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDEpCisKKyAgICBkZWYgdGVzdF9sc2VlayhzZWxmKToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCdwbGF5IGFyb3VuZCB3aXRoIG9zLmxzZWVrKCkgd2l0aCB0aGUgYnVpbHQgbGFyZ2VmaWxlJykKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5sc2VlayhmLmZpbGVubygpLCAwLCAwKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubHNlZWsoZi5maWxlbm8oKSwgNDIsIDApLCA0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubHNlZWsoZi5maWxlbm8oKSwgNDIsIDEpLCA4NCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubHNlZWsoZi5maWxlbm8oKSwgMCwgMSksIDg0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5sc2VlayhmLmZpbGVubygpLCAwLCAyKSwgc2l6ZSsxKzApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmxzZWVrKGYuZmlsZW5vKCksIC0xMCwgMiksIHNpemUrMS0xMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubHNlZWsoZi5maWxlbm8oKSwgLXNpemUtMSwgMiksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmxzZWVrKGYuZmlsZW5vKCksIHNpemUsIDApLCBzaXplKQorICAgICAgICAgICAgIyB0aGUgJ2EnIHRoYXQgd2FzIHdyaXR0ZW4gYXQgdGhlIGVuZCBvZiBmaWxlIGFib3ZlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxKSwgYidhJykKKworICAgIGRlZiB0ZXN0X3RydW5jYXRlKHNlbGYpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoJ3RyeSB0cnVuY2F0ZScpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKFRFU1RGTiwgJ3IrYicpIGFzIGY6CisgICAgICAgICAgICAjIHRoaXMgaXMgYWxyZWFkeSBkZWNpZGVkIGJlZm9yZSBzdGFydCBydW5uaW5nIHRoZSB0ZXN0IHN1aXRlCisgICAgICAgICAgICAjIGJ1dCB3ZSBkbyBpdCBhbnl3YXkgZm9yIGV4dHJhIHByb3RlY3Rpb24KKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGYsICd0cnVuY2F0ZScpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvcGVuKCkudHJ1bmNhdGUoKSBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIikKKyAgICAgICAgICAgIGYuc2VlaygwLCAyKQorICAgICAgICAgICAgIyBlbHNlIHdlJ3ZlIGxvc3QgdHJhY2sgb2YgdGhlIHRydWUgc2l6ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgc2l6ZSsxKQorICAgICAgICAgICAgIyBDdXQgaXQgYmFjayB2aWEgc2VlayArIHRydW5jYXRlIHdpdGggbm8gYXJndW1lbnQuCisgICAgICAgICAgICBuZXdzaXplID0gc2l6ZSAtIDEwCisgICAgICAgICAgICBmLnNlZWsobmV3c2l6ZSkKKyAgICAgICAgICAgIGYudHJ1bmNhdGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgbmV3c2l6ZSkgICMgZWxzZSBwb2ludGVyIG1vdmVkCisgICAgICAgICAgICBmLnNlZWsoMCwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIG5ld3NpemUpICAjIGVsc2Ugd2Fzbid0IHRydW5jYXRlZAorICAgICAgICAgICAgIyBFbnN1cmUgdGhhdCB0cnVuY2F0ZShzbWFsbGVyIHRoYW4gdHJ1ZSBzaXplKSBzaHJpbmtzCisgICAgICAgICAgICAjIHRoZSBmaWxlLgorICAgICAgICAgICAgbmV3c2l6ZSAtPSAxCisgICAgICAgICAgICBmLnNlZWsoNDIpCisgICAgICAgICAgICBmLnRydW5jYXRlKG5ld3NpemUpCisgICAgICAgICAgICBpZiBzZWxmLm5ld19pbzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCA0MikKKyAgICAgICAgICAgIGYuc2VlaygwLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgbmV3c2l6ZSkKKyAgICAgICAgICAgICMgWFhYIHRydW5jYXRlKGxhcmdlciB0aGFuIHRydWUgc2l6ZSkgaXMgaWxsLWRlZmluZWQKKyAgICAgICAgICAgICMgYWNyb3NzIHBsYXRmb3JtOyBjdXQgaXQgd2FhYWFheSBiYWNrCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIGYudHJ1bmNhdGUoMSkKKyAgICAgICAgICAgIGlmIHNlbGYubmV3X2lvOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDApICAgICAgICMgZWxzZSBwb2ludGVyIG1vdmVkCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGYucmVhZCgpKSwgMSkgICMgZWxzZSB3YXNuJ3QgdHJ1bmNhdGVkCisKKyAgICBkZWYgdGVzdF9zZWVrYWJsZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNTAxNjsgc2Vla2FibGUoKSBjYW4gcmV0dXJuIEZhbHNlIHdoZW4gdGhlIGN1cnJlbnQgcG9zaXRpb24KKyAgICAgICAgIyBpcyBuZWdhdGl2ZSB3aGVuIHRydW5jYXRlZCB0byBhbiBpbnQuCisgICAgICAgIGlmIG5vdCBzZWxmLm5ld19pbzoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImJ1aWx0aW4gZmlsZSBkb2Vzbid0IGhhdmUgc2Vla2FibGUoKSIpCisgICAgICAgIGZvciBwb3MgaW4gKDIqKjMxLTEsIDIqKjMxLCAyKiozMSsxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKFRFU1RGTiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLnNlZWsocG9zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLnNlZWthYmxlKCkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgICMgT24gV2luZG93cyBhbmQgTWFjIE9TWCB0aGlzIHRlc3QgY29tc3VtZXMgbGFyZ2UgcmVzb3VyY2VzOyBJdAorICAgICMgdGFrZXMgYSBsb25nIHRpbWUgdG8gYnVpbGQgdGhlID4yR0IgZmlsZSBhbmQgdGFrZXMgPjJHQiBvZiBkaXNrCisgICAgIyBzcGFjZSB0aGVyZWZvcmUgdGhlIHJlc291cmNlIG11c3QgYmUgZW5hYmxlZCB0byBydW4gdGhpcyB0ZXN0LgorICAgICMgSWYgbm90LCBub3RoaW5nIGFmdGVyIHRoaXMgbGluZSBzdGFuemEgd2lsbCBiZSBleGVjdXRlZC4KKyAgICBpZiBzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nIG9yIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgcmVxdWlyZXMoJ2xhcmdlZmlsZScsCisgICAgICAgICAgICAgICAgICd0ZXN0IHJlcXVpcmVzICVzIGJ5dGVzIGFuZCBhIGxvbmcgdGltZSB0byBydW4nICUgc3RyKHNpemUpKQorICAgIGVsc2U6CisgICAgICAgICMgT25seSBydW4gaWYgdGhlIGN1cnJlbnQgZmlsZXN5c3RlbSBzdXBwb3J0cyBsYXJnZSBmaWxlcy4KKyAgICAgICAgIyAoU2tpcCB0aGlzIHRlc3Qgb24gV2luZG93cywgc2luY2Ugd2Ugbm93IGFsd2F5cyBzdXBwb3J0CisgICAgICAgICMgbGFyZ2UgZmlsZXMuKQorICAgICAgICBmID0gb3BlbihURVNURk4sICd3YicsIGJ1ZmZlcmluZz0wKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIDIqKjMxID09IDIxNDc0ODM2NDgKKyAgICAgICAgICAgIGYuc2VlaygyMTQ3NDgzNjQ5KQorICAgICAgICAgICAgIyBTZWVraW5nIGlzIG5vdCBlbm91Z2ggb2YgYSB0ZXN0OiB5b3UgbXVzdCB3cml0ZSBhbmQKKyAgICAgICAgICAgICMgZmx1c2gsIHRvbyEKKyAgICAgICAgICAgIGYud3JpdGUoYid4JykKKyAgICAgICAgICAgIGYuZmx1c2goKQorICAgICAgICBleGNlcHQgKElPRXJyb3IsIE92ZXJmbG93RXJyb3IpOgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSBsYXJnZWZpbGUgc3VwcG9ydCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgZm9yIF9vcGVuLCBwcmVmaXggaW4gWyhpby5vcGVuLCAnQycpLCAocHlpby5vcGVuLCAnUHknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW4sICdCdWlsdGluJyldOgorICAgICAgICBjbGFzcyBUZXN0Q2FzZShMYXJnZUZpbGVUZXN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgVGVzdENhc2Uub3BlbiA9IHN0YXRpY21ldGhvZChfb3BlbikKKyAgICAgICAgVGVzdENhc2UubmV3X2lvID0gX29wZW4gaXMgbm90IG9wZW4KKyAgICAgICAgVGVzdENhc2UuX19uYW1lX18gPSBwcmVmaXggKyBMYXJnZUZpbGVUZXN0Ll9fbmFtZV9fCisgICAgICAgIHN1aXRlLmFkZFRlc3QoVGVzdENhc2UoJ3Rlc3Rfc2VlaycpKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KFRlc3RDYXNlKCd0ZXN0X29zc3RhdCcpKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KFRlc3RDYXNlKCd0ZXN0X3NlZWtfcmVhZCcpKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KFRlc3RDYXNlKCd0ZXN0X2xzZWVrJykpCisgICAgICAgIHdpdGggX29wZW4oVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgaWYgaGFzYXR0cihmLCAndHJ1bmNhdGUnKToKKyAgICAgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KFRlc3RDYXNlKCd0ZXN0X3RydW5jYXRlJykpCisgICAgICAgIHN1aXRlLmFkZFRlc3QoVGVzdENhc2UoJ3Rlc3Rfc2Vla2FibGUnKSkKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICB0cnk6CisgICAgICAgIHJ1bl91bml0dGVzdChzdWl0ZSkKKyAgICBmaW5hbGx5OgorICAgICAgICB1bmxpbmsoVEVTVEZOKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9saWIydG8zLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbGliMnRvMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDlhMjZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbGliMnRvMy5weQpAQCAtMCwwICsxLDIxIEBACisjIFNraXBwaW5nIHRlc3RfcGFyc2VyIGFuZCB0ZXN0X2FsbF9maXhlcnMKKyMgYmVjYXVzZSBvZiBydW5uaW5nCitmcm9tIGxpYjJ0bzMudGVzdHMgaW1wb3J0ICh0ZXN0X2ZpeGVycywgdGVzdF9weXRyZWUsIHRlc3RfdXRpbCwgdGVzdF9yZWZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGFyc2VyLCB0ZXN0X21haW4gYXMgdGVzdF9tYWluXykKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2RlZiBzdWl0ZSgpOgorICAgIHRlc3RzID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICBmb3IgbSBpbiAodGVzdF9maXhlcnMsIHRlc3RfcHl0cmVlLHRlc3RfdXRpbCwgdGVzdF9yZWZhY3RvciwgdGVzdF9wYXJzZXIsCisgICAgICAgICAgICAgIHRlc3RfbWFpbl8pOgorICAgICAgICB0ZXN0cy5hZGRUZXN0cyhsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKSkKKyAgICByZXR1cm4gdGVzdHMKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChzdWl0ZSgpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2xpbmVjYWNoZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2xpbmVjYWNoZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWY4MGE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbGluZWNhY2hlLnB5CkBAIC0wLDAgKzEsMTMxIEBACisiIiIgVGVzdHMgZm9yIHRoZSBsaW5lY2FjaGUgbW9kdWxlICIiIgorCitpbXBvcnQgbGluZWNhY2hlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcy5wYXRoCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CisKKworRklMRU5BTUUgPSBsaW5lY2FjaGUuX19maWxlX18KK0lOVkFMSURfTkFNRSA9ICchQCQpKCFAI18xJworRU1QVFkgPSAnJworVEVTVFMgPSAnaW5zcGVjdF9mb2RkZXIgaW5zcGVjdF9mb2RkZXIyIG1hcHBpbmdfdGVzdHMnCitURVNUUyA9IFRFU1RTLnNwbGl0KCkKK1RFU1RfUEFUSCA9IG9zLnBhdGguZGlybmFtZShzdXBwb3J0Ll9fZmlsZV9fKQorTU9EVUxFUyA9ICJsaW5lY2FjaGUgYWJjIi5zcGxpdCgpCitNT0RVTEVfUEFUSCA9IG9zLnBhdGguZGlybmFtZShGSUxFTkFNRSkKKworU09VUkNFXzEgPSAnJycKKyIgRG9jc3RyaW5nICIKKworZGVmIGZ1bmN0aW9uKCk6CisgICAgcmV0dXJuIHJlc3VsdAorCisnJycKKworU09VUkNFXzIgPSAnJycKK2RlZiBmKCk6CisgICAgcmV0dXJuIDEgKyAxCisKK2EgPSBmKCkKKworJycnCisKK1NPVVJDRV8zID0gJycnCitkZWYgZigpOgorICAgIHJldHVybiAzJycnICMgTm8gZW5kaW5nIG5ld2xpbmUKKworCitjbGFzcyBMaW5lQ2FjaGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9nZXRsaW5lKHNlbGYpOgorICAgICAgICBnZXRsaW5lID0gbGluZWNhY2hlLmdldGxpbmUKKworICAgICAgICAjIEJhZCB2YWx1ZXMgZm9yIGxpbmUgbnVtYmVyIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0bGluZShGSUxFTkFNRSwgMioqMTUpLCBFTVBUWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRsaW5lKEZJTEVOQU1FLCAtMSksIEVNUFRZKQorCisgICAgICAgICMgRmxvYXQgdmFsdWVzIGN1cnJlbnRseSByYWlzZSBUeXBlRXJyb3IsIHNob3VsZCBpdD8KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRsaW5lLCBGSUxFTkFNRSwgMS4xKQorCisgICAgICAgICMgQmFkIGZpbGVuYW1lcyBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGxpbmUoRU1QVFksIDEpLCBFTVBUWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRsaW5lKElOVkFMSURfTkFNRSwgMSksIEVNUFRZKQorCisgICAgICAgICMgQ2hlY2sgd2hldGhlciBsaW5lcyBjb3JyZXNwb25kIHRvIHRob3NlIGZyb20gZmlsZSBpdGVyYXRpb24KKyAgICAgICAgZm9yIGVudHJ5IGluIFRFU1RTOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oVEVTVF9QQVRILCBlbnRyeSkgKyAnLnB5JworICAgICAgICAgICAgZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShvcGVuKGZpbGVuYW1lKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBnZXRsaW5lKGZpbGVuYW1lLCBpbmRleCArIDEpKQorCisgICAgICAgICMgQ2hlY2sgbW9kdWxlIGxvYWRpbmcKKyAgICAgICAgZm9yIGVudHJ5IGluIE1PRFVMRVM6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihNT0RVTEVfUEFUSCwgZW50cnkpICsgJy5weScKKyAgICAgICAgICAgIGZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUob3BlbihmaWxlbmFtZSkpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgZ2V0bGluZShmaWxlbmFtZSwgaW5kZXggKyAxKSkKKworICAgICAgICAjIENoZWNrIHRoYXQgYm9ndXMgZGF0YSBpc24ndCByZXR1cm5lZCAoaXNzdWUgIzEzMDk1NjcpCisgICAgICAgIGVtcHR5ID0gbGluZWNhY2hlLmdldGxpbmVzKCdhL2IvYy9fX2luaXRfXy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW1wdHksIFtdKQorCisgICAgZGVmIHRlc3Rfbm9fZW5kaW5nX25ld2xpbmUoc2VsZik6CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgInciKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKFNPVVJDRV8zKQorICAgICAgICBsaW5lcyA9IGxpbmVjYWNoZS5nZXRsaW5lcyhzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgWyJcbiIsICJkZWYgZigpOlxuIiwgIiAgICByZXR1cm4gM1xuIl0pCisKKyAgICBkZWYgdGVzdF9jbGVhcmNhY2hlKHNlbGYpOgorICAgICAgICBjYWNoZWQgPSBbXQorICAgICAgICBmb3IgZW50cnkgaW4gVEVTVFM6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihURVNUX1BBVEgsIGVudHJ5KSArICcucHknCisgICAgICAgICAgICBjYWNoZWQuYXBwZW5kKGZpbGVuYW1lKQorICAgICAgICAgICAgbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIDEpCisKKyAgICAgICAgIyBBcmUgYWxsIGZpbGVzIGNhY2hlZD8KKyAgICAgICAgY2FjaGVkX2VtcHR5ID0gW2ZuIGZvciBmbiBpbiBjYWNoZWQgaWYgZm4gbm90IGluIGxpbmVjYWNoZS5jYWNoZV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWNoZWRfZW1wdHksIFtdKQorCisgICAgICAgICMgQ2FuIHdlIGNsZWFyIHRoZSBjYWNoZT8KKyAgICAgICAgbGluZWNhY2hlLmNsZWFyY2FjaGUoKQorICAgICAgICBjYWNoZWRfZW1wdHkgPSBbZm4gZm9yIGZuIGluIGNhY2hlZCBpZiBmbiBpbiBsaW5lY2FjaGUuY2FjaGVdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FjaGVkX2VtcHR5LCBbXSkKKworICAgIGRlZiB0ZXN0X2NoZWNrY2FjaGUoc2VsZik6CisgICAgICAgIGdldGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZQorICAgICAgICAjIENyZWF0ZSBhIHNvdXJjZSBmaWxlIGFuZCBjYWNoZSBpdHMgY29udGVudHMKKyAgICAgICAgc291cmNlX25hbWUgPSBzdXBwb3J0LlRFU1RGTiArICcucHknCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc291cmNlX25hbWUpCisgICAgICAgIHdpdGggb3Blbihzb3VyY2VfbmFtZSwgJ3cnKSBhcyBzb3VyY2U6CisgICAgICAgICAgICBzb3VyY2Uud3JpdGUoU09VUkNFXzEpCisgICAgICAgIGdldGxpbmUoc291cmNlX25hbWUsIDEpCisKKyAgICAgICAgIyBLZWVwIGEgY29weSBvZiB0aGUgb2xkIGNvbnRlbnRzCisgICAgICAgIHNvdXJjZV9saXN0ID0gW10KKyAgICAgICAgd2l0aCBvcGVuKHNvdXJjZV9uYW1lKSBhcyBzb3VyY2U6CisgICAgICAgICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKHNvdXJjZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBnZXRsaW5lKHNvdXJjZV9uYW1lLCBpbmRleCArIDEpKQorICAgICAgICAgICAgICAgIHNvdXJjZV9saXN0LmFwcGVuZChsaW5lKQorCisgICAgICAgIHdpdGggb3Blbihzb3VyY2VfbmFtZSwgJ3cnKSBhcyBzb3VyY2U6CisgICAgICAgICAgICBzb3VyY2Uud3JpdGUoU09VUkNFXzIpCisKKyAgICAgICAgIyBUcnkgdG8gdXBkYXRlIGEgYm9ndXMgY2FjaGUgZW50cnkKKyAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoJ2R1bW15JykKKworICAgICAgICAjIENoZWNrIHRoYXQgdGhlIGNhY2hlIG1hdGNoZXMgdGhlIG9sZCBjb250ZW50cworICAgICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKHNvdXJjZV9saXN0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgZ2V0bGluZShzb3VyY2VfbmFtZSwgaW5kZXggKyAxKSkKKworICAgICAgICAjIFVwZGF0ZSB0aGUgY2FjaGUgYW5kIGNoZWNrIHdoZXRoZXIgaXQgbWF0Y2hlcyB0aGUgbmV3IHNvdXJjZSBmaWxlCisgICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKHNvdXJjZV9uYW1lKQorICAgICAgICB3aXRoIG9wZW4oc291cmNlX25hbWUpIGFzIHNvdXJjZToKKyAgICAgICAgICAgIGZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUoc291cmNlKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGdldGxpbmUoc291cmNlX25hbWUsIGluZGV4ICsgMSkpCisgICAgICAgICAgICAgICAgc291cmNlX2xpc3QuYXBwZW5kKGxpbmUpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChMaW5lQ2FjaGVUZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbGludXhhdWRpb2Rldi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2xpbnV4YXVkaW9kZXYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmNDZiNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2xpbnV4YXVkaW9kZXYucHkKQEAgLTAsMCArMSw5OSBAQAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK3Rlc3Rfc3VwcG9ydC5yZXF1aXJlcygnYXVkaW8nKQorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBmaW5kZmlsZSwgcnVuX3VuaXR0ZXN0CisKK2ltcG9ydCBlcnJubworaW1wb3J0IHN5cworaW1wb3J0IGF1ZGlvb3AKK2ltcG9ydCB1bml0dGVzdAorCitsaW51eGF1ZGlvZGV2ID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2xpbnV4YXVkaW9kZXYnLCBkZXByZWNhdGVkPVRydWUpCitzdW5hdWRpbyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdzdW5hdWRpbycsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKworU05EX0ZPUk1BVF9NVUxBV184ID0gMQorCitjbGFzcyBMaW51eEF1ZGlvRGV2VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmRldiA9IGxpbnV4YXVkaW9kZXYub3BlbigndycpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZGV2LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X21ldGhvZHMoc2VsZik6CisgICAgICAgICMgYXQgbGVhc3QgY2hlY2sgdGhhdCB0aGVzZSBtZXRob2RzIGNhbiBiZSBpbnZva2VkCisgICAgICAgIHNlbGYuZGV2LmJ1ZnNpemUoKQorICAgICAgICBzZWxmLmRldi5vYnVmY291bnQoKQorICAgICAgICBzZWxmLmRldi5vYnVmZnJlZSgpCisgICAgICAgIHNlbGYuZGV2LmdldHB0cigpCisgICAgICAgIHNlbGYuZGV2LmZpbGVubygpCisKKyAgICBkZWYgdGVzdF9wbGF5X3NvdW5kX2ZpbGUoc2VsZik6CisgICAgICAgIHBhdGggPSBmaW5kZmlsZSgiYXVkaW90ZXN0LmF1IikKKyAgICAgICAgZnAgPSBvcGVuKHBhdGgsICdyJykKKyAgICAgICAgc2l6ZSwgZW5jLCByYXRlLCBuY2hhbm5lbHMsIGV4dHJhID0gc3VuYXVkaW8uZ2V0aGRyKGZwKQorICAgICAgICBkYXRhID0gZnAucmVhZCgpCisgICAgICAgIGZwLmNsb3NlKCkKKworICAgICAgICBpZiBlbmMgIT0gU05EX0ZPUk1BVF9NVUxBV184OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3QgLmF1IGZpbGUgd2l0aCA4LWJpdCBtdS1sYXcgc2FtcGxlcyIpCisKKyAgICAgICAgIyBjb252ZXJ0IHRoZSBkYXRhIHRvIDE2LWJpdCBzaWduZWQKKyAgICAgICAgZGF0YSA9IGF1ZGlvb3AudWxhdzJsaW4oZGF0YSwgMikKKworICAgICAgICAjIHNldCB0aGUgZGF0YSBmb3JtYXQKKyAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKKyAgICAgICAgICAgIGZtdCA9IGxpbnV4YXVkaW9kZXYuQUZNVF9TMTZfTEUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZtdCA9IGxpbnV4YXVkaW9kZXYuQUZNVF9TMTZfQkUKKworICAgICAgICAjIHNldCBwYXJhbWV0ZXJzIGJhc2VkIG9uIC5hdSBmaWxlIGhlYWRlcnMKKyAgICAgICAgc2VsZi5kZXYuc2V0cGFyYW1ldGVycyhyYXRlLCAxNiwgbmNoYW5uZWxzLCBmbXQpCisgICAgICAgIHNlbGYuZGV2LndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuZGV2LmZsdXNoKCkKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgc2l6ZSA9IDgKKyAgICAgICAgZm10ID0gbGludXhhdWRpb2Rldi5BRk1UX1U4CisgICAgICAgIHJhdGUgPSA4MDAwCisgICAgICAgIG5jaGFubmVscyA9IDEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5kZXYuc2V0cGFyYW1ldGVycygtMSwgc2l6ZSwgbmNoYW5uZWxzLCBmbXQpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5hcmdzWzBdLCAiZXhwZWN0ZWQgcmF0ZSA+PSAwLCBub3QgLTEiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRldi5zZXRwYXJhbWV0ZXJzKHJhdGUsIC0yLCBuY2hhbm5lbHMsIGZtdCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3NbMF0sICJleHBlY3RlZCBzYW1wbGUgc2l6ZSA+PSAwLCBub3QgLTIiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRldi5zZXRwYXJhbWV0ZXJzKHJhdGUsIHNpemUsIDMsIGZtdCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3NbMF0sICJuY2hhbm5lbHMgbXVzdCBiZSAxIG9yIDIsIG5vdCAzIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5kZXYuc2V0cGFyYW1ldGVycyhyYXRlLCBzaXplLCBuY2hhbm5lbHMsIDE3NykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3NbMF0sICJ1bmtub3duIGF1ZGlvIGVuY29kaW5nOiAxNzciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRldi5zZXRwYXJhbWV0ZXJzKHJhdGUsIHNpemUsIG5jaGFubmVscywgbGludXhhdWRpb2Rldi5BRk1UX1UxNl9MRSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3NbMF0sICJmb3IgbGluZWFyIHVuc2lnbmVkIDE2LWJpdCBsaXR0bGUtZW5kaWFuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1ZGlvLCBleHBlY3RlZCBzYW1wbGUgc2l6ZSAxNiwgbm90IDgiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRldi5zZXRwYXJhbWV0ZXJzKHJhdGUsIDE2LCBuY2hhbm5lbHMsIGZtdCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3NbMF0sICJmb3IgbGluZWFyIHVuc2lnbmVkIDgtYml0IGF1ZGlvLCBleHBlY3RlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzYW1wbGUgc2l6ZSA4LCBub3QgMTYiKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdHJ5OgorICAgICAgICBkc3AgPSBsaW51eGF1ZGlvZGV2Lm9wZW4oJ3cnKQorICAgIGV4Y2VwdCBsaW51eGF1ZGlvZGV2LmVycm9yLCBtc2c6CisgICAgICAgIGlmIG1zZy5hcmdzWzBdIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVOT0VOVCwgZXJybm8uRU5PREVWLCBlcnJuby5FQlVTWSk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChtc2cpCisgICAgICAgIHJhaXNlCisgICAgZHNwLmNsb3NlKCkKKyAgICBydW5fdW5pdHRlc3QoTGludXhBdWRpb0RldlRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9saXN0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbGlzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTA4MGRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbGlzdC5weQpAQCAtMCwwICsxLDc4IEBACitpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCwgbGlzdF90ZXN0cworCitjbGFzcyBMaXN0VGVzdChsaXN0X3Rlc3RzLkNvbW1vblRlc3QpOgorICAgIHR5cGUydGVzdCA9IGxpc3QKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoW10pLCBbXSkKKyAgICAgICAgbDBfMyA9IFswLCAxLCAyLCAzXQorICAgICAgICBsMF8zX2JpcyA9IGxpc3QobDBfMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsMF8zLCBsMF8zX2JpcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGwwXzMgaXMgbm90IGwwXzNfYmlzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoKCkpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KCgwLCAxLCAyLCAzKSksIFswLCAxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KCcnKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCgnc3BhbScpLCBbJ3MnLCAncCcsICdhJywgJ20nXSkKKworICAgICAgICBpZiBzeXMubWF4c2l6ZSA9PSAweDdmZmZmZmZmOgorICAgICAgICAgICAgIyBUaGlzIHRlc3QgY2FuIGN1cnJlbnRseSBvbmx5IHdvcmsgb24gMzItYml0IG1hY2hpbmVzLgorICAgICAgICAgICAgIyBYWFggSWYvd2hlbiBQeVNlcXVlbmNlX0xlbmd0aCgpIHJldHVybnMgYSBzc2l6ZV90LCBpdCBzaG91bGQgYmUKKyAgICAgICAgICAgICMgWFhYIHJlLWVuYWJsZWQuCisgICAgICAgICAgICAjIFZlcmlmeSBjbGVhcmluZyBvZiBidWcgIzU1NjAyNS4KKyAgICAgICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIG1heCBkYXRhIHNpemUgKHN5cy5tYXhpbnQpID09IG1heAorICAgICAgICAgICAgIyBhZGRyZXNzIHNpemUgdGhpcyBhbHNvIGFzc3VtZXMgdGhhdCB0aGUgYWRkcmVzcyBzaXplIGlzIGF0CisgICAgICAgICAgICAjIGxlYXN0IDQgYnl0ZXMgd2l0aCA4IGJ5dGUgYWRkcmVzc2VzLCB0aGUgYnVnIGlzIG5vdCB3ZWxsCisgICAgICAgICAgICAjIHRlc3RlZAorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBOb3RlOiBUaGlzIHRlc3QgaXMgZXhwZWN0ZWQgdG8gU0VHViB1bmRlciBDeWd3aW4gMS4zLjEyIG9yCisgICAgICAgICAgICAjIGVhcmxpZXIgZHVlIHRvIGEgbmV3bGliIGJ1Zy4gIFNlZSB0aGUgZm9sbG93aW5nIG1haWxpbmcgbGlzdAorICAgICAgICAgICAgIyB0aHJlYWQgZm9yIHRoZSBkZXRhaWxzOgorCisgICAgICAgICAgICAjICAgICBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL21sL25ld2xpYi8yMDAyL21zZzAwMzY5Lmh0bWwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE1lbW9yeUVycm9yLCBsaXN0LCB4cmFuZ2Uoc3lzLm1heGludCAvLyAyKSkKKworICAgICAgICAjIFRoaXMgY29kZSB1c2VkIHRvIHNlZ2ZhdWx0IGluIFB5Mi40YTMKKyAgICAgICAgeCA9IFtdCisgICAgICAgIHguZXh0ZW5kKC15IGZvciB5IGluIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgW10pCisKKyAgICBkZWYgdGVzdF90cnV0aChzZWxmKToKKyAgICAgICAgc3VwZXIoTGlzdFRlc3QsIHNlbGYpLnRlc3RfdHJ1dGgoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IFtdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoWzQyXSkKKworICAgIGRlZiB0ZXN0X2lkZW50aXR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoW10gaXMgbm90IFtdKQorCisgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgorICAgICAgICBzdXBlcihMaXN0VGVzdCwgc2VsZikudGVzdF9sZW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihbXSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFswXSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFswLCAxLCAyXSksIDMpCisKKyAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgbHN0ID0gWzQsIDUsIDYsIDddCisgICAgICAgIG4gPSBpbnQoKHN5cy5tYXhpbnQqMisyKSAvLyBsZW4obHN0KSkKKyAgICAgICAgZGVmIG11bChhLCBiKTogcmV0dXJuIGEgKiBiCisgICAgICAgIGRlZiBpbXVsKGEsIGIpOiBhICo9IGIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE1lbW9yeUVycm9yLCBPdmVyZmxvd0Vycm9yKSwgbXVsLCBsc3QsIG4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChNZW1vcnlFcnJvciwgT3ZlcmZsb3dFcnJvciksIGltdWwsIGxzdCwgbikKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTGlzdFRlc3QpCisKKyAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKKyAgICBpbXBvcnQgc3lzCisgICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6CisgICAgICAgIGltcG9ydCBnYworICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1CisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oY291bnRzKSk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KExpc3RUZXN0KQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgIHByaW50IGNvdW50cworCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2xvY2FsZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2xvY2FsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTc1NTkyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbG9jYWxlLnB5CkBAIC0wLDAgKzEsNDM4IEBACitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHZlcmJvc2UKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGxvY2FsZQoraW1wb3J0IHN5cworaW1wb3J0IGNvZGVjcworCisKK2VuVVNfbG9jYWxlID0gTm9uZQorCitkZWYgZ2V0X2VuVVNfbG9jYWxlKCk6CisgICAgZ2xvYmFsIGVuVVNfbG9jYWxlCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgdGxvY3MgPSAoImVuX1VTLlVURi04IiwgImVuX1VTLklTTzg4NTktMSIsICJlbl9VUyIpCisgICAgICAgIGlmIGludChvcy51bmFtZSgpWzJdLnNwbGl0KCcuJylbMF0pIDwgMTA6CisgICAgICAgICAgICAjIFRoZSBsb2NhbGUgdGVzdCB3b3JrIGZpbmUgb24gT1NYIDEwLjYsIEkgKHJvbmFsZG91c3NvcmVuKQorICAgICAgICAgICAgIyBoYXZlbid0IGhhZCB0aW1lIHlldCB0byB2ZXJpZnkgaWYgdGVzdHMgd29yayBvbiBPU1ggMTAuNQorICAgICAgICAgICAgIyAoMTAuNCBpcyBrbm93biB0byBiZSBiYWQpCisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiTG9jYWxlIHN1cHBvcnQgb24gTWFjT1NYIGlzIG1pbmltYWwiKQorICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJ3aW4iKToKKyAgICAgICAgdGxvY3MgPSAoIkVuIiwgIkVuZ2xpc2giKQorICAgIGVsc2U6CisgICAgICAgIHRsb2NzID0gKCJlbl9VUy5VVEYtOCIsICJlbl9VUy5VUy1BU0NJSSIsICJlbl9VUyIpCisgICAgb2xkbG9jYWxlID0gbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfTlVNRVJJQykKKyAgICBmb3IgdGxvYyBpbiB0bG9jczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfTlVNRVJJQywgdGxvYykKKyAgICAgICAgZXhjZXB0IGxvY2FsZS5FcnJvcjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGJyZWFrCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoCisgICAgICAgICAgICAiVGVzdCBsb2NhbGUgbm90IHN1cHBvcnRlZCAodHJpZWQgJXMpIiAlICgnLCAnLmpvaW4odGxvY3MpKSkKKyAgICBlblVTX2xvY2FsZSA9IHRsb2MKKyAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19OVU1FUklDLCBvbGRsb2NhbGUpCisKKworY2xhc3MgQmFzZUxvY2FsaXplZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMKKyAgICAjIEJhc2UgY2xhc3MgZm9yIHRlc3RzIHVzaW5nIGEgcmVhbCBsb2NhbGUKKyAgICAjCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYub2xkbG9jYWxlID0gbG9jYWxlLnNldGxvY2FsZShzZWxmLmxvY2FsZV90eXBlKQorICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKHNlbGYubG9jYWxlX3R5cGUsIGVuVVNfbG9jYWxlKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgInRlc3Rpbmcgd2l0aCBcIiVzXCIuLi4iICUgZW5VU19sb2NhbGUsCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUoc2VsZi5sb2NhbGVfdHlwZSwgc2VsZi5vbGRsb2NhbGUpCisKKworY2xhc3MgQmFzZUNvb2tlZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMKKyAgICAjIEJhc2UgY2xhc3MgZm9yIHRlc3RzIHVzaW5nIGNvb2tlZCBsb2NhbGVjb252KCkgdmFsdWVzCisgICAgIworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBsb2NhbGUuX292ZXJyaWRlX2xvY2FsZWNvbnYgPSBzZWxmLmNvb2tlZF92YWx1ZXMKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgbG9jYWxlLl9vdmVycmlkZV9sb2NhbGVjb252ID0ge30KKworCitjbGFzcyBDQ29va2VkVGVzdChCYXNlQ29va2VkVGVzdCk6CisgICAgIyBBIGNvb2tlZCAiQyIgbG9jYWxlCisKKyAgICBjb29rZWRfdmFsdWVzID0geworICAgICAgICAnY3VycmVuY3lfc3ltYm9sJzogJycsCisgICAgICAgICdkZWNpbWFsX3BvaW50JzogJy4nLAorICAgICAgICAnZnJhY19kaWdpdHMnOiAxMjcsCisgICAgICAgICdncm91cGluZyc6IFtdLAorICAgICAgICAnaW50X2N1cnJfc3ltYm9sJzogJycsCisgICAgICAgICdpbnRfZnJhY19kaWdpdHMnOiAxMjcsCisgICAgICAgICdtb25fZGVjaW1hbF9wb2ludCc6ICcnLAorICAgICAgICAnbW9uX2dyb3VwaW5nJzogW10sCisgICAgICAgICdtb25fdGhvdXNhbmRzX3NlcCc6ICcnLAorICAgICAgICAnbl9jc19wcmVjZWRlcyc6IDEyNywKKyAgICAgICAgJ25fc2VwX2J5X3NwYWNlJzogMTI3LAorICAgICAgICAnbl9zaWduX3Bvc24nOiAxMjcsCisgICAgICAgICduZWdhdGl2ZV9zaWduJzogJycsCisgICAgICAgICdwX2NzX3ByZWNlZGVzJzogMTI3LAorICAgICAgICAncF9zZXBfYnlfc3BhY2UnOiAxMjcsCisgICAgICAgICdwX3NpZ25fcG9zbic6IDEyNywKKyAgICAgICAgJ3Bvc2l0aXZlX3NpZ24nOiAnJywKKyAgICAgICAgJ3Rob3VzYW5kc19zZXAnOiAnJworICAgIH0KKworY2xhc3MgRW5VU0Nvb2tlZFRlc3QoQmFzZUNvb2tlZFRlc3QpOgorICAgICMgQSBjb29rZWQgImVuX1VTIiBsb2NhbGUKKworICAgIGNvb2tlZF92YWx1ZXMgPSB7CisgICAgICAgICdjdXJyZW5jeV9zeW1ib2wnOiAnJCcsCisgICAgICAgICdkZWNpbWFsX3BvaW50JzogJy4nLAorICAgICAgICAnZnJhY19kaWdpdHMnOiAyLAorICAgICAgICAnZ3JvdXBpbmcnOiBbMywgMywgMF0sCisgICAgICAgICdpbnRfY3Vycl9zeW1ib2wnOiAnVVNEICcsCisgICAgICAgICdpbnRfZnJhY19kaWdpdHMnOiAyLAorICAgICAgICAnbW9uX2RlY2ltYWxfcG9pbnQnOiAnLicsCisgICAgICAgICdtb25fZ3JvdXBpbmcnOiBbMywgMywgMF0sCisgICAgICAgICdtb25fdGhvdXNhbmRzX3NlcCc6ICcsJywKKyAgICAgICAgJ25fY3NfcHJlY2VkZXMnOiAxLAorICAgICAgICAnbl9zZXBfYnlfc3BhY2UnOiAwLAorICAgICAgICAnbl9zaWduX3Bvc24nOiAxLAorICAgICAgICAnbmVnYXRpdmVfc2lnbic6ICctJywKKyAgICAgICAgJ3BfY3NfcHJlY2VkZXMnOiAxLAorICAgICAgICAncF9zZXBfYnlfc3BhY2UnOiAwLAorICAgICAgICAncF9zaWduX3Bvc24nOiAxLAorICAgICAgICAncG9zaXRpdmVfc2lnbic6ICcnLAorICAgICAgICAndGhvdXNhbmRzX3NlcCc6ICcsJworICAgIH0KKworCitjbGFzcyBGckZSQ29va2VkVGVzdChCYXNlQ29va2VkVGVzdCk6CisgICAgIyBBIGNvb2tlZCAiZnJfRlIiIGxvY2FsZSB3aXRoIGEgc3BhY2UgY2hhcmFjdGVyIGFzIGRlY2ltYWwgc2VwYXJhdG9yCisgICAgIyBhbmQgYSBub24tQVNDSUkgY3VycmVuY3kgc3ltYm9sLgorCisgICAgY29va2VkX3ZhbHVlcyA9IHsKKyAgICAgICAgJ2N1cnJlbmN5X3N5bWJvbCc6ICdceGUyXHg4Mlx4YWMnLAorICAgICAgICAnZGVjaW1hbF9wb2ludCc6ICcsJywKKyAgICAgICAgJ2ZyYWNfZGlnaXRzJzogMiwKKyAgICAgICAgJ2dyb3VwaW5nJzogWzMsIDMsIDBdLAorICAgICAgICAnaW50X2N1cnJfc3ltYm9sJzogJ0VVUiAnLAorICAgICAgICAnaW50X2ZyYWNfZGlnaXRzJzogMiwKKyAgICAgICAgJ21vbl9kZWNpbWFsX3BvaW50JzogJywnLAorICAgICAgICAnbW9uX2dyb3VwaW5nJzogWzMsIDMsIDBdLAorICAgICAgICAnbW9uX3Rob3VzYW5kc19zZXAnOiAnICcsCisgICAgICAgICduX2NzX3ByZWNlZGVzJzogMCwKKyAgICAgICAgJ25fc2VwX2J5X3NwYWNlJzogMSwKKyAgICAgICAgJ25fc2lnbl9wb3NuJzogMSwKKyAgICAgICAgJ25lZ2F0aXZlX3NpZ24nOiAnLScsCisgICAgICAgICdwX2NzX3ByZWNlZGVzJzogMCwKKyAgICAgICAgJ3Bfc2VwX2J5X3NwYWNlJzogMSwKKyAgICAgICAgJ3Bfc2lnbl9wb3NuJzogMSwKKyAgICAgICAgJ3Bvc2l0aXZlX3NpZ24nOiAnJywKKyAgICAgICAgJ3Rob3VzYW5kc19zZXAnOiAnICcKKyAgICB9CisKKworY2xhc3MgQmFzZUZvcm1hdHRpbmdUZXN0KG9iamVjdCk6CisgICAgIworICAgICMgVXRpbGl0eSBmdW5jdGlvbnMgZm9yIGZvcm1hdHRpbmcgdGVzdHMKKyAgICAjCisKKyAgICBkZWYgX3Rlc3RfZm9ybWF0ZnVuYyhzZWxmLCBmb3JtYXQsIHZhbHVlLCBvdXQsIGZ1bmMsICoqZm9ybWF0X29wdHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZnVuYyhmb3JtYXQsIHZhbHVlLCAqKmZvcm1hdF9vcHRzKSwgb3V0KQorCisgICAgZGVmIF90ZXN0X2Zvcm1hdChzZWxmLCBmb3JtYXQsIHZhbHVlLCBvdXQsICoqZm9ybWF0X29wdHMpOgorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdGZ1bmMoZm9ybWF0LCB2YWx1ZSwgb3V0LAorICAgICAgICAgICAgZnVuYz1sb2NhbGUuZm9ybWF0LCAqKmZvcm1hdF9vcHRzKQorCisgICAgZGVmIF90ZXN0X2Zvcm1hdF9zdHJpbmcoc2VsZiwgZm9ybWF0LCB2YWx1ZSwgb3V0LCAqKmZvcm1hdF9vcHRzKToKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXRmdW5jKGZvcm1hdCwgdmFsdWUsIG91dCwKKyAgICAgICAgICAgIGZ1bmM9bG9jYWxlLmZvcm1hdF9zdHJpbmcsICoqZm9ybWF0X29wdHMpCisKKyAgICBkZWYgX3Rlc3RfY3VycmVuY3koc2VsZiwgdmFsdWUsIG91dCwgKipmb3JtYXRfb3B0cyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWxlLmN1cnJlbmN5KHZhbHVlLCAqKmZvcm1hdF9vcHRzKSwgb3V0KQorCisKK2NsYXNzIEVuVVNOdW1iZXJGb3JtYXR0aW5nKEJhc2VGb3JtYXR0aW5nVGVzdCk6CisgICAgIyBYWFggdGhlcmUgaXMgYSBncm91cGluZyArIHBhZGRpbmcgYnVnIHdoZW4gdGhlIHRob3VzYW5kcyBzZXBhcmF0b3IKKyAgICAjIGlzIGVtcHR5IGJ1dCB0aGUgZ3JvdXBpbmcgYXJyYXkgY29udGFpbnMgdmFsdWVzIChlLmcuIFNvbGFyaXMgMTApCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VwID0gbG9jYWxlLmxvY2FsZWNvbnYoKVsndGhvdXNhbmRzX3NlcCddCisKKyAgICBkZWYgdGVzdF9ncm91cGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiVmIiwgMTAyNCwgZ3JvdXBpbmc9MSwgb3V0PScxJXMwMjQuMDAwMDAwJyAlIHNlbGYuc2VwKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJWYiLCAxMDIsIGdyb3VwaW5nPTEsIG91dD0nMTAyLjAwMDAwMCcpCisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlZiIsIC00MiwgZ3JvdXBpbmc9MSwgb3V0PSctNDIuMDAwMDAwJykKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUrZiIsIC00MiwgZ3JvdXBpbmc9MSwgb3V0PSctNDIuMDAwMDAwJykKKworICAgIGRlZiB0ZXN0X2dyb3VwaW5nX2FuZF9wYWRkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJTIwLmYiLCAtNDIsIGdyb3VwaW5nPTEsIG91dD0nLTQyJy5yanVzdCgyMCkpCisgICAgICAgIGlmIHNlbGYuc2VwOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUrMTAuZiIsIC00MjAwLCBncm91cGluZz0xLAorICAgICAgICAgICAgICAgIG91dD0oJy00JXMyMDAnICUgc2VsZi5zZXApLnJqdXN0KDEwKSkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlLTEwLmYiLCAtNDIwMCwgZ3JvdXBpbmc9MSwKKyAgICAgICAgICAgICAgICBvdXQ9KCctNCVzMjAwJyAlIHNlbGYuc2VwKS5sanVzdCgxMCkpCisKKyAgICBkZWYgdGVzdF9pbnRlZ2VyX2dyb3VwaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJWQiLCA0MjAwLCBncm91cGluZz1UcnVlLCBvdXQ9JzQlczIwMCcgJSBzZWxmLnNlcCkKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUrZCIsIDQyMDAsIGdyb3VwaW5nPVRydWUsIG91dD0nKzQlczIwMCcgJSBzZWxmLnNlcCkKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUrZCIsIC00MjAwLCBncm91cGluZz1UcnVlLCBvdXQ9Jy00JXMyMDAnICUgc2VsZi5zZXApCisKKyAgICBkZWYgdGVzdF9pbnRlZ2VyX2dyb3VwaW5nX2FuZF9wYWRkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJTEwZCIsIDQyMDAsIGdyb3VwaW5nPVRydWUsCisgICAgICAgICAgICBvdXQ9KCc0JXMyMDAnICUgc2VsZi5zZXApLnJqdXN0KDEwKSkKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUtMTBkIiwgLTQyMDAsIGdyb3VwaW5nPVRydWUsCisgICAgICAgICAgICBvdXQ9KCctNCVzMjAwJyAlIHNlbGYuc2VwKS5sanVzdCgxMCkpCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlZiIsIDEwMjQsIGdyb3VwaW5nPTAsIG91dD0nMTAyNC4wMDAwMDAnKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJWYiLCAxMDIsIGdyb3VwaW5nPTAsIG91dD0nMTAyLjAwMDAwMCcpCisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlZiIsIC00MiwgZ3JvdXBpbmc9MCwgb3V0PSctNDIuMDAwMDAwJykKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUrZiIsIC00MiwgZ3JvdXBpbmc9MCwgb3V0PSctNDIuMDAwMDAwJykKKworICAgIGRlZiB0ZXN0X3BhZGRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlMjAuZiIsIC00MiwgZ3JvdXBpbmc9MCwgb3V0PSctNDInLnJqdXN0KDIwKSkKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUrMTAuZiIsIC00MjAwLCBncm91cGluZz0wLCBvdXQ9Jy00MjAwJy5yanVzdCgxMCkpCisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlLTEwLmYiLCA0MjAwLCBncm91cGluZz0wLCBvdXQ9JzQyMDAnLmxqdXN0KDEwKSkKKworICAgIGRlZiB0ZXN0X2NvbXBsZXhfZm9ybWF0dGluZyhzZWxmKToKKyAgICAgICAgIyBTcGFjZXMgaW4gZm9ybWF0dGluZyBzdHJpbmcKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXRfc3RyaW5nKCJPbmUgbWlsbGlvbiBpcyAlaSIsIDEwMDAwMDAsIGdyb3VwaW5nPTEsCisgICAgICAgICAgICBvdXQ9J09uZSBtaWxsaW9uIGlzIDElczAwMCVzMDAwJyAlIChzZWxmLnNlcCwgc2VsZi5zZXApKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdF9zdHJpbmcoIk9uZSAgbWlsbGlvbiBpcyAlaSIsIDEwMDAwMDAsIGdyb3VwaW5nPTEsCisgICAgICAgICAgICBvdXQ9J09uZSAgbWlsbGlvbiBpcyAxJXMwMDAlczAwMCcgJSAoc2VsZi5zZXAsIHNlbGYuc2VwKSkKKyAgICAgICAgIyBEb3RzIGluIGZvcm1hdHRpbmcgc3RyaW5nCisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0X3N0cmluZygiLiVmLiIsIDEwMDAuMCwgb3V0PScuMTAwMC4wMDAwMDAuJykKKyAgICAgICAgIyBQYWRkaW5nCisgICAgICAgIGlmIHNlbGYuc2VwOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXRfc3RyaW5nKCItLT4gICUxMC4yZiIsIDQyMDAsIGdyb3VwaW5nPTEsCisgICAgICAgICAgICAgICAgb3V0PSctLT4gICcgKyAoJzQlczIwMC4wMCcgJSBzZWxmLnNlcCkucmp1c3QoMTApKQorICAgICAgICAjIEFzdGVyaXNrIGZvcm1hdHMKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXRfc3RyaW5nKCIlMTAuKmYiLCAoMiwgMTAwMCksIGdyb3VwaW5nPTAsCisgICAgICAgICAgICBvdXQ9JzEwMDAuMDAnLnJqdXN0KDEwKSkKKyAgICAgICAgaWYgc2VsZi5zZXA6CisgICAgICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdF9zdHJpbmcoIiUqLipmIiwgKDEwLCAyLCAxMDAwKSwgZ3JvdXBpbmc9MSwKKyAgICAgICAgICAgICAgICBvdXQ9KCcxJXMwMDAuMDAnICUgc2VsZi5zZXApLnJqdXN0KDEwKSkKKyAgICAgICAgIyBUZXN0IG1vcmUtaW4tb25lCisgICAgICAgIGlmIHNlbGYuc2VwOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXRfc3RyaW5nKCJpbnQgJWkgZmxvYXQgJS4yZiBzdHIgJXMiLAorICAgICAgICAgICAgICAgICgxMDAwLCAxMDAwLjAsICdzdHInKSwgZ3JvdXBpbmc9MSwKKyAgICAgICAgICAgICAgICBvdXQ9J2ludCAxJXMwMDAgZmxvYXQgMSVzMDAwLjAwIHN0ciBzdHInICUKKyAgICAgICAgICAgICAgICAoc2VsZi5zZXAsIHNlbGYuc2VwKSkKKworCitjbGFzcyBUZXN0Rm9ybWF0UGF0dGVybkFyZyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IGhhbmRsaW5nIG9mIHBhdHRlcm4gYXJndW1lbnQgb2YgZm9ybWF0CisKKyAgICBkZWYgdGVzdF9vbmx5T25lUGF0dGVybihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAyNTIyOiBhY2NlcHQgZXhhY3RseSBvbmUgJSBwYXR0ZXJuLCBhbmQgbm8gZXh0cmEgY2hhcnMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvY2FsZS5mb3JtYXQsICIlZlxuIiwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvY2FsZS5mb3JtYXQsICIlZlxyIiwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvY2FsZS5mb3JtYXQsICIlZlxyXG4iLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9jYWxlLmZvcm1hdCwgIiAlZiIsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2NhbGUuZm9ybWF0LCAiJWZnIiwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvY2FsZS5mb3JtYXQsICIlXmciLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9jYWxlLmZvcm1hdCwgIiVmJSUiLCAnZm9vJykKKworCitjbGFzcyBUZXN0TG9jYWxlRm9ybWF0U3RyaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJHZW5lcmFsIHRlc3RzIG9uIGxvY2FsZS5mb3JtYXRfc3RyaW5nIiIiCisKKyAgICBkZWYgdGVzdF9wZXJjZW50X2VzY2FwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbGUuZm9ybWF0X3N0cmluZygnJWYlJScsIDEuMCksICclZiUlJyAlIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbGUuZm9ybWF0X3N0cmluZygnJWQgJWYlJWQnLCAoMSwgMS4wKSksCisgICAgICAgICAgICAnJWQgJWYlJWQnICUgKDEsIDEuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWxlLmZvcm1hdF9zdHJpbmcoJyUoZm9vKXMgJSVkJywgeydmb28nOiAnYmFyJ30pLAorICAgICAgICAgICAgKCclKGZvbylzICUlZCcgJSB7J2Zvbyc6ICdiYXInfSkpCisKKyAgICBkZWYgdGVzdF9tYXBwaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsZS5mb3JtYXRfc3RyaW5nKCclKGZvbylzIGJpbmcuJywgeydmb28nOiAnYmFyJ30pLAorICAgICAgICAgICAgKCclKGZvbylzIGJpbmcuJyAlIHsnZm9vJzogJ2Jhcid9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbGUuZm9ybWF0X3N0cmluZygnJShmb28pcycsIHsnZm9vJzogJ2Jhcid9KSwKKyAgICAgICAgICAgICgnJShmb28pcycgJSB7J2Zvbyc6ICdiYXInfSkpCisKKworCitjbGFzcyBUZXN0TnVtYmVyRm9ybWF0dGluZyhCYXNlTG9jYWxpemVkVGVzdCwgRW5VU051bWJlckZvcm1hdHRpbmcpOgorICAgICMgVGVzdCBudW1iZXIgZm9ybWF0dGluZyB3aXRoIGEgcmVhbCBFbmdsaXNoIGxvY2FsZS4KKworICAgIGxvY2FsZV90eXBlID0gbG9jYWxlLkxDX05VTUVSSUMKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgQmFzZUxvY2FsaXplZFRlc3Quc2V0VXAoc2VsZikKKyAgICAgICAgRW5VU051bWJlckZvcm1hdHRpbmcuc2V0VXAoc2VsZikKKworCitjbGFzcyBUZXN0RW5VU051bWJlckZvcm1hdHRpbmcoRW5VU0Nvb2tlZFRlc3QsIEVuVVNOdW1iZXJGb3JtYXR0aW5nKToKKyAgICAjIFRlc3QgbnVtYmVyIGZvcm1hdHRpbmcgd2l0aCBhIGNvb2tlZCAiZW5fVVMiIGxvY2FsZS4KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgRW5VU0Nvb2tlZFRlc3Quc2V0VXAoc2VsZikKKyAgICAgICAgRW5VU051bWJlckZvcm1hdHRpbmcuc2V0VXAoc2VsZikKKworICAgIGRlZiB0ZXN0X2N1cnJlbmN5KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2N1cnJlbmN5KDUwMDAwLCAiJDUwMDAwLjAwIikKKyAgICAgICAgc2VsZi5fdGVzdF9jdXJyZW5jeSg1MDAwMCwgIiQ1MCwwMDAuMDAiLCBncm91cGluZz1UcnVlKQorICAgICAgICBzZWxmLl90ZXN0X2N1cnJlbmN5KDUwMDAwLCAiVVNEIDUwLDAwMC4wMCIsCisgICAgICAgICAgICBncm91cGluZz1UcnVlLCBpbnRlcm5hdGlvbmFsPVRydWUpCisKKworY2xhc3MgVGVzdENOdW1iZXJGb3JtYXR0aW5nKENDb29rZWRUZXN0LCBCYXNlRm9ybWF0dGluZ1Rlc3QpOgorICAgICMgVGVzdCBudW1iZXIgZm9ybWF0dGluZyB3aXRoIGEgY29va2VkICJDIiBsb2NhbGUuCisKKyAgICBkZWYgdGVzdF9ncm91cGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUuMmYiLCAxMjM0NS42NywgZ3JvdXBpbmc9VHJ1ZSwgb3V0PScxMjM0NS42NycpCisKKyAgICBkZWYgdGVzdF9ncm91cGluZ19hbmRfcGFkZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiU5LjJmIiwgMTIzNDUuNjcsIGdyb3VwaW5nPVRydWUsIG91dD0nIDEyMzQ1LjY3JykKKworCitjbGFzcyBUZXN0RnJGUk51bWJlckZvcm1hdHRpbmcoRnJGUkNvb2tlZFRlc3QsIEJhc2VGb3JtYXR0aW5nVGVzdCk6CisgICAgIyBUZXN0IG51bWJlciBmb3JtYXR0aW5nIHdpdGggYSBjb29rZWQgImZyX0ZSIiBsb2NhbGUuCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX3BvaW50KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJS4yZiIsIDEyMzQ1LjY3LCBvdXQ9JzEyMzQ1LDY3JykKKworICAgIGRlZiB0ZXN0X2dyb3VwaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJS4yZiIsIDM0NS42NywgZ3JvdXBpbmc9VHJ1ZSwgb3V0PSczNDUsNjcnKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJS4yZiIsIDEyMzQ1LjY3LCBncm91cGluZz1UcnVlLCBvdXQ9JzEyIDM0NSw2NycpCisKKyAgICBkZWYgdGVzdF9ncm91cGluZ19hbmRfcGFkZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiU2LjJmIiwgMzQ1LjY3LCBncm91cGluZz1UcnVlLCBvdXQ9JzM0NSw2NycpCisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlNy4yZiIsIDM0NS42NywgZ3JvdXBpbmc9VHJ1ZSwgb3V0PScgMzQ1LDY3JykKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiU4LjJmIiwgMTIzNDUuNjcsIGdyb3VwaW5nPVRydWUsIG91dD0nMTIgMzQ1LDY3JykKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiU5LjJmIiwgMTIzNDUuNjcsIGdyb3VwaW5nPVRydWUsIG91dD0nMTIgMzQ1LDY3JykKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUxMC4yZiIsIDEyMzQ1LjY3LCBncm91cGluZz1UcnVlLCBvdXQ9JyAxMiAzNDUsNjcnKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJS02LjJmIiwgMzQ1LjY3LCBncm91cGluZz1UcnVlLCBvdXQ9JzM0NSw2NycpCisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlLTcuMmYiLCAzNDUuNjcsIGdyb3VwaW5nPVRydWUsIG91dD0nMzQ1LDY3ICcpCisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlLTguMmYiLCAxMjM0NS42NywgZ3JvdXBpbmc9VHJ1ZSwgb3V0PScxMiAzNDUsNjcnKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJS05LjJmIiwgMTIzNDUuNjcsIGdyb3VwaW5nPVRydWUsIG91dD0nMTIgMzQ1LDY3JykKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUtMTAuMmYiLCAxMjM0NS42NywgZ3JvdXBpbmc9VHJ1ZSwgb3V0PScxMiAzNDUsNjcgJykKKworICAgIGRlZiB0ZXN0X2ludGVnZXJfZ3JvdXBpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlZCIsIDIwMCwgZ3JvdXBpbmc9VHJ1ZSwgb3V0PScyMDAnKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJWQiLCA0MjAwLCBncm91cGluZz1UcnVlLCBvdXQ9JzQgMjAwJykKKworICAgIGRlZiB0ZXN0X2ludGVnZXJfZ3JvdXBpbmdfYW5kX3BhZGRpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZm9ybWF0KCIlNGQiLCA0MjAwLCBncm91cGluZz1UcnVlLCBvdXQ9JzQgMjAwJykKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiU1ZCIsIDQyMDAsIGdyb3VwaW5nPVRydWUsIG91dD0nNCAyMDAnKQorICAgICAgICBzZWxmLl90ZXN0X2Zvcm1hdCgiJTEwZCIsIDQyMDAsIGdyb3VwaW5nPVRydWUsIG91dD0nNCAyMDAnLnJqdXN0KDEwKSkKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUtNGQiLCA0MjAwLCBncm91cGluZz1UcnVlLCBvdXQ9JzQgMjAwJykKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUtNWQiLCA0MjAwLCBncm91cGluZz1UcnVlLCBvdXQ9JzQgMjAwJykKKyAgICAgICAgc2VsZi5fdGVzdF9mb3JtYXQoIiUtMTBkIiwgNDIwMCwgZ3JvdXBpbmc9VHJ1ZSwgb3V0PSc0IDIwMCcubGp1c3QoMTApKQorCisgICAgZGVmIHRlc3RfY3VycmVuY3koc2VsZik6CisgICAgICAgIGV1cm8gPSB1J1x1MjBhYycuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYuX3Rlc3RfY3VycmVuY3koNTAwMDAsICI1MDAwMCwwMCAiICsgZXVybykKKyAgICAgICAgc2VsZi5fdGVzdF9jdXJyZW5jeSg1MDAwMCwgIjUwIDAwMCwwMCAiICsgZXVybywgZ3JvdXBpbmc9VHJ1ZSkKKyAgICAgICAgIyBYWFggaXMgdGhlIHRyYWlsaW5nIHNwYWNlIGEgYnVnPworICAgICAgICBzZWxmLl90ZXN0X2N1cnJlbmN5KDUwMDAwLCAiNTAgMDAwLDAwIEVVUiAiLAorICAgICAgICAgICAgZ3JvdXBpbmc9VHJ1ZSwgaW50ZXJuYXRpb25hbD1UcnVlKQorCisKK2NsYXNzIFRlc3RTdHJpbmdNZXRob2RzKEJhc2VMb2NhbGl6ZWRUZXN0KToKKyAgICBsb2NhbGVfdHlwZSA9IGxvY2FsZS5MQ19DVFlQRQorCisgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdzdW5vczUnIGFuZCBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgorICAgICAgICAjIFRlc3QgQlNEIFJ1bmUgbG9jYWxlJ3MgYnVnIGZvciBpc2N0eXBlIGZ1bmN0aW9ucy4KKworICAgICAgICBkZWYgdGVzdF9pc3NwYWNlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgyMCcuaXNzcGFjZSgpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhhMCcuaXNzcGFjZSgpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4YTEnLmlzc3BhY2UoKSwgRmFsc2UpCisKKyAgICAgICAgZGVmIHRlc3RfaXNhbHBoYShzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4YzAnLmlzYWxwaGEoKSwgRmFsc2UpCisKKyAgICAgICAgZGVmIHRlc3RfaXNhbG51bShzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4YzAnLmlzYWxudW0oKSwgRmFsc2UpCisKKyAgICAgICAgZGVmIHRlc3RfaXN1cHBlcihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4YzAnLmlzdXBwZXIoKSwgRmFsc2UpCisKKyAgICAgICAgZGVmIHRlc3RfaXNsb3dlcihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4YzAnLmlzbG93ZXIoKSwgRmFsc2UpCisKKyAgICAgICAgZGVmIHRlc3RfbG93ZXIoc2VsZik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceGNjXHg4NScubG93ZXIoKSwgJ1x4Y2NceDg1JykKKworICAgICAgICBkZWYgdGVzdF91cHBlcihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ZWRceDk1XHhhMCcudXBwZXIoKSwgJ1x4ZWRceDk1XHhhMCcpCisKKyAgICAgICAgZGVmIHRlc3Rfc3RyaXAoc2VsZik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceGVkXHg5NVx4YTAnLnN0cmlwKCksICdceGVkXHg5NVx4YTAnKQorCisgICAgICAgIGRlZiB0ZXN0X3NwbGl0KHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhlY1x4YTBceGJjJy5zcGxpdCgpLCBbJ1x4ZWNceGEwXHhiYyddKQorCisKK2NsYXNzIFRlc3RNaXNjZWxsYW5lb3VzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9nZXRwcmVmZXJyZWRlbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBJbnZva2UgZ2V0cHJlZmVycmVkZW5jb2RpbmcgdG8gbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIGV4Y2VwdGlvbnMuCisgICAgICAgIGVuYyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZygpCisgICAgICAgIGlmIGVuYzoKKyAgICAgICAgICAgICMgSWYgZW5jb2Rpbmcgbm9uLWVtcHR5LCBtYWtlIHN1cmUgaXQgaXMgdmFsaWQKKyAgICAgICAgICAgIGNvZGVjcy5sb29rdXAoZW5jKQorCisgICAgaWYgaGFzYXR0cihsb2NhbGUsICJzdHJjb2xsIik6CisgICAgICAgIGRlZiB0ZXN0X3N0cmNvbGxfMzMwMyhzZWxmKToKKyAgICAgICAgICAgICMgdGVzdCBjcmFzaGVyIGZyb20gYnVnICMzMzAzCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxvY2FsZS5zdHJjb2xsLCB1ImEiLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc2V0bG9jYWxlX2NhdGVnb3J5KHNlbGYpOgorICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19BTEwpCisgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX1RJTUUpCisgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0NUWVBFKQorICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19DT0xMQVRFKQorICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19NT05FVEFSWSkKKyAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfTlVNRVJJQykKKworICAgICAgICAjIGNyYXNoZXIgZnJvbSBidWcgIzc0MTkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobG9jYWxlLkVycm9yLCBsb2NhbGUuc2V0bG9jYWxlLCAxMjM0NSkKKworICAgIGRlZiB0ZXN0X2dldHNldGxvY2FsZV9pc3N1ZTE4MTMoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE4MTM6IHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIGxvY2FsZSB1bmRlciBhIFR1cmtpc2ggbG9jYWxlCisgICAgICAgIG9sZGxvY2FsZSA9IGxvY2FsZS5nZXRsb2NhbGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9jYWxlLnNldGxvY2FsZSwgbG9jYWxlLkxDX0NUWVBFLCBvbGRsb2NhbGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0NUWVBFLCAndHJfVFInKQorICAgICAgICBleGNlcHQgbG9jYWxlLkVycm9yOgorICAgICAgICAgICAgIyBVbnN1cHBvcnRlZCBsb2NhbGUgb24gdGhpcyBzeXN0ZW0KKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3Rlc3QgbmVlZHMgVHVya2lzaCBsb2NhbGUnKQorICAgICAgICBsb2MgPSBsb2NhbGUuZ2V0bG9jYWxlKCkKKyAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfQ1RZUEUsIGxvYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2MsIGxvY2FsZS5nZXRsb2NhbGUoKSkKKworICAgIGRlZiB0ZXN0X25vcm1hbGl6ZV9pc3N1ZTEyNzUyKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxODEzIGNhdXNlZCBhIHJlZ3Jlc3Npb24gd2hlcmUgbG9jYWxlLm5vcm1hbGl6ZSgpIHdvdWxkIG5vCisgICAgICAgICMgbG9uZ2VyIGFjY2VwdCB1bmljb2RlIHN0cmluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWxlLm5vcm1hbGl6ZSh1J2VuX1VTJyksICdlbl9VUy5JU084ODU5LTEnKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0cyA9IFsKKyAgICAgICAgVGVzdE1pc2NlbGxhbmVvdXMsCisgICAgICAgIFRlc3RGb3JtYXRQYXR0ZXJuQXJnLAorICAgICAgICBUZXN0TG9jYWxlRm9ybWF0U3RyaW5nLAorICAgICAgICBUZXN0RW5VU051bWJlckZvcm1hdHRpbmcsCisgICAgICAgIFRlc3RDTnVtYmVyRm9ybWF0dGluZywKKyAgICAgICAgVGVzdEZyRlJOdW1iZXJGb3JtYXR0aW5nLAorICAgIF0KKyAgICAjIFNraXBUZXN0IGNhbid0IGJlIHJhaXNlZCBpbnNpZGUgdW5pdHRlc3RzLCBoYW5kbGUgaXQgbWFudWFsbHkgaW5zdGVhZAorICAgIHRyeToKKyAgICAgICAgZ2V0X2VuVVNfbG9jYWxlKCkKKyAgICBleGNlcHQgdW5pdHRlc3QuU2tpcFRlc3QgYXMgZToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJTb21lIHRlc3RzIHdpbGwgYmUgZGlzYWJsZWQ6ICVzIiAlIGUKKyAgICBlbHNlOgorICAgICAgICB0ZXN0cyArPSBbVGVzdE51bWJlckZvcm1hdHRpbmcsIFRlc3RTdHJpbmdNZXRob2RzXQorICAgIHJ1bl91bml0dGVzdCgqdGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2xvZ2dpbmcucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9sb2dnaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYmM0OGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9sb2dnaW5nLnB5CkBAIC0wLDAgKzEsMTk5NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDAxLTIwMTMgYnkgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCisjIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKKyMgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCisjIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgVmluYXkgU2FqaXAKKyMgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uCisjIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisjIFZJTkFZIFNBSklQIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcKKyMgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMCisjIFZJTkFZIFNBSklQIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUgorIyBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKKyMgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyMgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworIiIiVGVzdCBoYXJuZXNzIGZvciB0aGUgbG9nZ2luZyBtb2R1bGUuIFJ1biBhbGwgdGVzdHMuCisKK0NvcHlyaWdodCAoQykgMjAwMS0yMDEzIFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbG9nZ2luZy5oYW5kbGVycworaW1wb3J0IGxvZ2dpbmcuY29uZmlnCisKK2ltcG9ydCBjb2RlY3MKK2ltcG9ydCBjUGlja2xlCitpbXBvcnQgY1N0cmluZ0lPCitpbXBvcnQgZ2MKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKK2ltcG9ydCByYW5kb20KK2ltcG9ydCByZQoraW1wb3J0IHNlbGVjdAoraW1wb3J0IHNvY2tldAorZnJvbSBTb2NrZXRTZXJ2ZXIgaW1wb3J0IFRocmVhZGluZ1RDUFNlcnZlciwgU3RyZWFtUmVxdWVzdEhhbmRsZXIKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0LCBydW5fd2l0aF9sb2NhbGUsIHJ1bl91bml0dGVzdAoraW1wb3J0IHRleHR3cmFwCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCB3ZWFrcmVmCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKworY2xhc3MgQmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiQmFzZSBjbGFzcyBmb3IgbG9nZ2luZyB0ZXN0cy4iIiIKKworICAgIGxvZ19mb3JtYXQgPSAiJShuYW1lKXMgLT4gJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihbXHcuXSspIC0+IChbXHddKyk6IChbXGRdKykkIgorICAgIG1lc3NhZ2VfbnVtID0gMAorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiJTZXR1cCB0aGUgZGVmYXVsdCBsb2dnaW5nIHN0cmVhbSB0byBhbiBpbnRlcm5hbCBTdHJpbmdJTyBpbnN0YW5jZSwKKyAgICAgICAgc28gdGhhdCB3ZSBjYW4gZXhhbWluZSBsb2cgb3V0cHV0IGFzIHdlIHdhbnQuIiIiCisgICAgICAgIGxvZ2dlcl9kaWN0ID0gbG9nZ2luZy5nZXRMb2dnZXIoKS5tYW5hZ2VyLmxvZ2dlckRpY3QKKyAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNhdmVkX2hhbmRsZXJzID0gbG9nZ2luZy5faGFuZGxlcnMuY29weSgpCisgICAgICAgICAgICBzZWxmLnNhdmVkX2hhbmRsZXJfbGlzdCA9IGxvZ2dpbmcuX2hhbmRsZXJMaXN0WzpdCisgICAgICAgICAgICBzZWxmLnNhdmVkX2xvZ2dlcnMgPSBsb2dnZXJfZGljdC5jb3B5KCkKKyAgICAgICAgICAgIHNlbGYuc2F2ZWRfbGV2ZWxfbmFtZXMgPSBsb2dnaW5nLl9sZXZlbE5hbWVzLmNvcHkoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbG9nZ2luZy5fcmVsZWFzZUxvY2soKQorCisgICAgICAgICMgU2V0IHR3byB1bnVzZWQgbG9nZ2Vyczogb25lIG5vbi1BU0NJSSBhbmQgb25lIFVuaWNvZGUuCisgICAgICAgICMgVGhpcyBpcyB0byB0ZXN0IGNvcnJlY3Qgb3BlcmF0aW9uIHdoZW4gc29ydGluZyBleGlzdGluZworICAgICAgICAjIGxvZ2dlcnMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gY29kZS4gU2VlIGlzc3VlIDgyMDEuCisgICAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCJceGFiXHhkN1x4YmIiKQorICAgICAgICBsb2dnaW5nLmdldExvZ2dlcih1Ilx1MDEzZlx1MDBkNlx1MDA0NyIpCisKKyAgICAgICAgc2VsZi5yb290X2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCIiKQorICAgICAgICBzZWxmLm9yaWdpbmFsX2xvZ2dpbmdfbGV2ZWwgPSBzZWxmLnJvb3RfbG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkKKworICAgICAgICBzZWxmLnN0cmVhbSA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICAgICAgc2VsZi5yb290X2hkbHIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc2VsZi5zdHJlYW0pCisgICAgICAgIHNlbGYucm9vdF9mb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcihzZWxmLmxvZ19mb3JtYXQpCisgICAgICAgIHNlbGYucm9vdF9oZGxyLnNldEZvcm1hdHRlcihzZWxmLnJvb3RfZm9ybWF0dGVyKQorICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5yb290X2hkbHIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICIiIlJlbW92ZSBvdXIgbG9nZ2luZyBzdHJlYW0sIGFuZCByZXN0b3JlIHRoZSBvcmlnaW5hbCBsb2dnaW5nCisgICAgICAgIGxldmVsLiIiIgorICAgICAgICBzZWxmLnN0cmVhbS5jbG9zZSgpCisgICAgICAgIHNlbGYucm9vdF9sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLnJvb3RfaGRscikKKyAgICAgICAgd2hpbGUgc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyczoKKyAgICAgICAgICAgIGggPSBzZWxmLnJvb3RfbG9nZ2VyLmhhbmRsZXJzWzBdCisgICAgICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnJlbW92ZUhhbmRsZXIoaCkKKyAgICAgICAgICAgIGguY2xvc2UoKQorICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnNldExldmVsKHNlbGYub3JpZ2luYWxfbG9nZ2luZ19sZXZlbCkKKyAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2dnaW5nLl9sZXZlbE5hbWVzLmNsZWFyKCkKKyAgICAgICAgICAgIGxvZ2dpbmcuX2xldmVsTmFtZXMudXBkYXRlKHNlbGYuc2F2ZWRfbGV2ZWxfbmFtZXMpCisgICAgICAgICAgICBsb2dnaW5nLl9oYW5kbGVycy5jbGVhcigpCisgICAgICAgICAgICBsb2dnaW5nLl9oYW5kbGVycy51cGRhdGUoc2VsZi5zYXZlZF9oYW5kbGVycykKKyAgICAgICAgICAgIGxvZ2dpbmcuX2hhbmRsZXJMaXN0WzpdID0gc2VsZi5zYXZlZF9oYW5kbGVyX2xpc3QKKyAgICAgICAgICAgIGxvZ2dlckRpY3QgPSBsb2dnaW5nLmdldExvZ2dlcigpLm1hbmFnZXIubG9nZ2VyRGljdAorICAgICAgICAgICAgbG9nZ2VyRGljdC5jbGVhcigpCisgICAgICAgICAgICBsb2dnZXJEaWN0LnVwZGF0ZShzZWxmLnNhdmVkX2xvZ2dlcnMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCisKKyAgICBkZWYgYXNzZXJ0X2xvZ19saW5lcyhzZWxmLCBleHBlY3RlZF92YWx1ZXMsIHN0cmVhbT1Ob25lKToKKyAgICAgICAgIiIiTWF0Y2ggdGhlIGNvbGxlY3RlZCBsb2cgbGluZXMgYWdhaW5zdCB0aGUgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgIHNlbGYuZXhwZWN0ZWRfbG9nX3BhdCwgYW5kIGNvbXBhcmUgdGhlIGV4dHJhY3RlZCBncm91cCB2YWx1ZXMgdG8KKyAgICAgICAgdGhlIGV4cGVjdGVkX3ZhbHVlcyBsaXN0IG9mIHR1cGxlcy4iIiIKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtIG9yIHNlbGYuc3RyZWFtCisgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoc2VsZi5leHBlY3RlZF9sb2dfcGF0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdHJlYW0ucmVzZXQoKQorICAgICAgICAgICAgYWN0dWFsX2xpbmVzID0gc3RyZWFtLnJlYWRsaW5lcygpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICMgU3RyaW5nSU8uU3RyaW5nSU8gbGFja3MgYSByZXNldCgpIG1ldGhvZC4KKyAgICAgICAgICAgIGFjdHVhbF9saW5lcyA9IHN0cmVhbS5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhY3R1YWxfbGluZXMpLCBsZW4oZXhwZWN0ZWRfdmFsdWVzKSkKKyAgICAgICAgZm9yIGFjdHVhbCwgZXhwZWN0ZWQgaW4gemlwKGFjdHVhbF9saW5lcywgZXhwZWN0ZWRfdmFsdWVzKToKKyAgICAgICAgICAgIG1hdGNoID0gcGF0LnNlYXJjaChhY3R1YWwpCisgICAgICAgICAgICBpZiBub3QgbWF0Y2g6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJMb2cgbGluZSBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBwYXR0ZXJuOlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShtYXRjaC5ncm91cHMoKSksIGV4cGVjdGVkKQorICAgICAgICBzID0gc3RyZWFtLnJlYWQoKQorICAgICAgICBpZiBzOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJSZW1haW5pbmcgb3V0cHV0IGF0IGVuZCBvZiBsb2cgc3RyZWFtOlxuIiArIHMpCisKKyAgICBkZWYgbmV4dF9tZXNzYWdlKHNlbGYpOgorICAgICAgICAiIiJHZW5lcmF0ZSBhIG1lc3NhZ2UgY29uc2lzdGluZyBzb2xlbHkgb2YgYW4gYXV0by1pbmNyZW1lbnRpbmcKKyAgICAgICAgaW50ZWdlci4iIiIKKyAgICAgICAgc2VsZi5tZXNzYWdlX251bSArPSAxCisgICAgICAgIHJldHVybiAiJWQiICUgc2VsZi5tZXNzYWdlX251bQorCisKK2NsYXNzIEJ1aWx0aW5MZXZlbHNUZXN0KEJhc2VUZXN0KToKKyAgICAiIiJUZXN0IGJ1aWx0aW4gbGV2ZWxzIGFuZCB0aGVpciBpbmhlcml0YW5jZS4iIiIKKworICAgIGRlZiB0ZXN0X2ZsYXQoc2VsZik6CisgICAgICAgICNMb2dnaW5nIGxldmVscyBpbiBhIGZsYXQgbG9nZ2VyIG5hbWVzcGFjZS4KKyAgICAgICAgbSA9IHNlbGYubmV4dF9tZXNzYWdlCisKKyAgICAgICAgRVJSID0gbG9nZ2luZy5nZXRMb2dnZXIoIkVSUiIpCisgICAgICAgIEVSUi5zZXRMZXZlbChsb2dnaW5nLkVSUk9SKQorICAgICAgICBJTkYgPSBsb2dnaW5nLmdldExvZ2dlcigiSU5GIikKKyAgICAgICAgSU5GLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICAgICAgREVCID0gbG9nZ2luZy5nZXRMb2dnZXIoIkRFQiIpCisgICAgICAgIERFQi5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisgICAgICAgICMgVGhlc2Ugc2hvdWxkIGxvZy4KKyAgICAgICAgRVJSLmxvZyhsb2dnaW5nLkNSSVRJQ0FMLCBtKCkpCisgICAgICAgIEVSUi5lcnJvcihtKCkpCisKKyAgICAgICAgSU5GLmxvZyhsb2dnaW5nLkNSSVRJQ0FMLCBtKCkpCisgICAgICAgIElORi5lcnJvcihtKCkpCisgICAgICAgIElORi53YXJuKG0oKSkKKyAgICAgICAgSU5GLmluZm8obSgpKQorCisgICAgICAgIERFQi5sb2cobG9nZ2luZy5DUklUSUNBTCwgbSgpKQorICAgICAgICBERUIuZXJyb3IobSgpKQorICAgICAgICBERUIud2FybiAobSgpKQorICAgICAgICBERUIuaW5mbyAobSgpKQorICAgICAgICBERUIuZGVidWcobSgpKQorCisgICAgICAgICMgVGhlc2Ugc2hvdWxkIG5vdCBsb2cuCisgICAgICAgIEVSUi53YXJuKG0oKSkKKyAgICAgICAgRVJSLmluZm8obSgpKQorICAgICAgICBFUlIuZGVidWcobSgpKQorCisgICAgICAgIElORi5kZWJ1ZyhtKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnRVJSJywgJ0NSSVRJQ0FMJywgJzEnKSwKKyAgICAgICAgICAgICgnRVJSJywgJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgICgnSU5GJywgJ0NSSVRJQ0FMJywgJzMnKSwKKyAgICAgICAgICAgICgnSU5GJywgJ0VSUk9SJywgJzQnKSwKKyAgICAgICAgICAgICgnSU5GJywgJ1dBUk5JTkcnLCAnNScpLAorICAgICAgICAgICAgKCdJTkYnLCAnSU5GTycsICc2JyksCisgICAgICAgICAgICAoJ0RFQicsICdDUklUSUNBTCcsICc3JyksCisgICAgICAgICAgICAoJ0RFQicsICdFUlJPUicsICc4JyksCisgICAgICAgICAgICAoJ0RFQicsICdXQVJOSU5HJywgJzknKSwKKyAgICAgICAgICAgICgnREVCJywgJ0lORk8nLCAnMTAnKSwKKyAgICAgICAgICAgICgnREVCJywgJ0RFQlVHJywgJzExJyksCisgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfZXhwbGljaXQoc2VsZik6CisgICAgICAgICMgTG9nZ2luZyBsZXZlbHMgaW4gYSBuZXN0ZWQgbmFtZXNwYWNlLCBhbGwgZXhwbGljaXRseSBzZXQuCisgICAgICAgIG0gPSBzZWxmLm5leHRfbWVzc2FnZQorCisgICAgICAgIElORiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJJTkYiKQorICAgICAgICBJTkYuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgICAgICBJTkZfRVJSICA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJJTkYuRVJSIikKKyAgICAgICAgSU5GX0VSUi5zZXRMZXZlbChsb2dnaW5nLkVSUk9SKQorCisgICAgICAgICMgVGhlc2Ugc2hvdWxkIGxvZy4KKyAgICAgICAgSU5GX0VSUi5sb2cobG9nZ2luZy5DUklUSUNBTCwgbSgpKQorICAgICAgICBJTkZfRVJSLmVycm9yKG0oKSkKKworICAgICAgICAjIFRoZXNlIHNob3VsZCBub3QgbG9nLgorICAgICAgICBJTkZfRVJSLndhcm4obSgpKQorICAgICAgICBJTkZfRVJSLmluZm8obSgpKQorICAgICAgICBJTkZfRVJSLmRlYnVnKG0oKSkKKworICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkYuRVJSJywgJ0NSSVRJQ0FMJywgJzEnKSwKKyAgICAgICAgICAgICgnSU5GLkVSUicsICdFUlJPUicsICcyJyksCisgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfaW5oZXJpdGVkKHNlbGYpOgorICAgICAgICAjTG9nZ2luZyBsZXZlbHMgaW4gYSBuZXN0ZWQgbmFtZXNwYWNlLCBpbmhlcml0ZWQgZnJvbSBwYXJlbnQgbG9nZ2Vycy4KKyAgICAgICAgbSA9IHNlbGYubmV4dF9tZXNzYWdlCisKKyAgICAgICAgSU5GID0gbG9nZ2luZy5nZXRMb2dnZXIoIklORiIpCisgICAgICAgIElORi5zZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgICAgIElORl9FUlIgID0gbG9nZ2luZy5nZXRMb2dnZXIoIklORi5FUlIiKQorICAgICAgICBJTkZfRVJSLnNldExldmVsKGxvZ2dpbmcuRVJST1IpCisgICAgICAgIElORl9VTkRFRiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJJTkYuVU5ERUYiKQorICAgICAgICBJTkZfRVJSX1VOREVGID0gbG9nZ2luZy5nZXRMb2dnZXIoIklORi5FUlIuVU5ERUYiKQorICAgICAgICBVTkRFRiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJVTkRFRiIpCisKKyAgICAgICAgIyBUaGVzZSBzaG91bGQgbG9nLgorICAgICAgICBJTkZfVU5ERUYubG9nKGxvZ2dpbmcuQ1JJVElDQUwsIG0oKSkKKyAgICAgICAgSU5GX1VOREVGLmVycm9yKG0oKSkKKyAgICAgICAgSU5GX1VOREVGLndhcm4obSgpKQorICAgICAgICBJTkZfVU5ERUYuaW5mbyhtKCkpCisgICAgICAgIElORl9FUlJfVU5ERUYubG9nKGxvZ2dpbmcuQ1JJVElDQUwsIG0oKSkKKyAgICAgICAgSU5GX0VSUl9VTkRFRi5lcnJvcihtKCkpCisKKyAgICAgICAgIyBUaGVzZSBzaG91bGQgbm90IGxvZy4KKyAgICAgICAgSU5GX1VOREVGLmRlYnVnKG0oKSkKKyAgICAgICAgSU5GX0VSUl9VTkRFRi53YXJuKG0oKSkKKyAgICAgICAgSU5GX0VSUl9VTkRFRi5pbmZvKG0oKSkKKyAgICAgICAgSU5GX0VSUl9VTkRFRi5kZWJ1ZyhtKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnSU5GLlVOREVGJywgJ0NSSVRJQ0FMJywgJzEnKSwKKyAgICAgICAgICAgICgnSU5GLlVOREVGJywgJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgICgnSU5GLlVOREVGJywgJ1dBUk5JTkcnLCAnMycpLAorICAgICAgICAgICAgKCdJTkYuVU5ERUYnLCAnSU5GTycsICc0JyksCisgICAgICAgICAgICAoJ0lORi5FUlIuVU5ERUYnLCAnQ1JJVElDQUwnLCAnNScpLAorICAgICAgICAgICAgKCdJTkYuRVJSLlVOREVGJywgJ0VSUk9SJywgJzYnKSwKKyAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF93aXRoX3ZpcnR1YWxfcGFyZW50KHNlbGYpOgorICAgICAgICAjIExvZ2dpbmcgbGV2ZWxzIHdoZW4gc29tZSBwYXJlbnQgZG9lcyBub3QgZXhpc3QgeWV0LgorICAgICAgICBtID0gc2VsZi5uZXh0X21lc3NhZ2UKKworICAgICAgICBJTkYgPSBsb2dnaW5nLmdldExvZ2dlcigiSU5GIikKKyAgICAgICAgR1JBTkRDSElMRCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJJTkYuQkFEUEFSRU5ULlVOREVGIikKKyAgICAgICAgQ0hJTEQgPSBsb2dnaW5nLmdldExvZ2dlcigiSU5GLkJBRFBBUkVOVCIpCisgICAgICAgIElORi5zZXRMZXZlbChsb2dnaW5nLklORk8pCisKKyAgICAgICAgIyBUaGVzZSBzaG91bGQgbG9nLgorICAgICAgICBHUkFORENISUxELmxvZyhsb2dnaW5nLkZBVEFMLCBtKCkpCisgICAgICAgIEdSQU5EQ0hJTEQuaW5mbyhtKCkpCisgICAgICAgIENISUxELmxvZyhsb2dnaW5nLkZBVEFMLCBtKCkpCisgICAgICAgIENISUxELmluZm8obSgpKQorCisgICAgICAgICMgVGhlc2Ugc2hvdWxkIG5vdCBsb2cuCisgICAgICAgIEdSQU5EQ0hJTEQuZGVidWcobSgpKQorICAgICAgICBDSElMRC5kZWJ1ZyhtKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnSU5GLkJBRFBBUkVOVC5VTkRFRicsICdDUklUSUNBTCcsICcxJyksCisgICAgICAgICAgICAoJ0lORi5CQURQQVJFTlQuVU5ERUYnLCAnSU5GTycsICcyJyksCisgICAgICAgICAgICAoJ0lORi5CQURQQVJFTlQnLCAnQ1JJVElDQUwnLCAnMycpLAorICAgICAgICAgICAgKCdJTkYuQkFEUEFSRU5UJywgJ0lORk8nLCAnNCcpLAorICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9uYW1lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxvZ2dpbmcuZ2V0TG9nZ2VyLCBhbnkpCisKK2NsYXNzIEJhc2ljRmlsdGVyVGVzdChCYXNlVGVzdCk6CisKKyAgICAiIiJUZXN0IHRoZSBidW5kbGVkIEZpbHRlciBjbGFzcy4iIiIKKworICAgIGRlZiB0ZXN0X2ZpbHRlcihzZWxmKToKKyAgICAgICAgIyBPbmx5IG1lc3NhZ2VzIHNhdGlzZnlpbmcgdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBwYXNzIHRocm91Z2ggdGhlCisgICAgICAgICMgIGZpbHRlci4KKyAgICAgICAgZmlsdGVyXyA9IGxvZ2dpbmcuRmlsdGVyKCJzcGFtLmVnZ3MiKQorICAgICAgICBoYW5kbGVyID0gc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyc1swXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBoYW5kbGVyLmFkZEZpbHRlcihmaWx0ZXJfKQorICAgICAgICAgICAgc3BhbSA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzcGFtIikKKyAgICAgICAgICAgIHNwYW1fZWdncyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzcGFtLmVnZ3MiKQorICAgICAgICAgICAgc3BhbV9lZ2dzX2Zpc2ggPSBsb2dnaW5nLmdldExvZ2dlcigic3BhbS5lZ2dzLmZpc2giKQorICAgICAgICAgICAgc3BhbV9iYWtlZGJlYW5zID0gbG9nZ2luZy5nZXRMb2dnZXIoInNwYW0uYmFrZWRiZWFucyIpCisKKyAgICAgICAgICAgIHNwYW0uaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc3BhbV9lZ2dzLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkgICMgR29vZC4KKyAgICAgICAgICAgIHNwYW1fZWdnc19maXNoLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkgICMgR29vZC4KKyAgICAgICAgICAgIHNwYW1fYmFrZWRiZWFucy5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdzcGFtLmVnZ3MnLCAnSU5GTycsICcyJyksCisgICAgICAgICAgICAgICAgKCdzcGFtLmVnZ3MuZmlzaCcsICdJTkZPJywgJzMnKSwKKyAgICAgICAgICAgIF0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBoYW5kbGVyLnJlbW92ZUZpbHRlcihmaWx0ZXJfKQorCisKKyMKKyMgICBGaXJzdCwgd2UgZGVmaW5lIG91ciBsZXZlbHMuIFRoZXJlIGNhbiBiZSBhcyBtYW55IGFzIHlvdSB3YW50IC0gdGhlIG9ubHkKKyMgICAgIGxpbWl0YXRpb25zIGFyZSB0aGF0IHRoZXkgc2hvdWxkIGJlIGludGVnZXJzLCB0aGUgbG93ZXN0IHNob3VsZCBiZSA+IDAgYW5kCisjICAgbGFyZ2VyIHZhbHVlcyBtZWFuIGxlc3MgaW5mb3JtYXRpb24gYmVpbmcgbG9nZ2VkLiBJZiB5b3UgbmVlZCBzcGVjaWZpYworIyAgIGxldmVsIHZhbHVlcyB3aGljaCBkbyBub3QgZml0IGludG8gdGhlc2UgbGltaXRhdGlvbnMsIHlvdSBjYW4gdXNlIGEKKyMgICBtYXBwaW5nIGRpY3Rpb25hcnkgdG8gY29udmVydCBiZXR3ZWVuIHlvdXIgYXBwbGljYXRpb24gbGV2ZWxzIGFuZCB0aGUKKyMgICBsb2dnaW5nIHN5c3RlbS4KKyMKK1NJTEVOVCAgICAgID0gMTIwCitUQUNJVFVSTiAgICA9IDExOQorVEVSU0UgICAgICAgPSAxMTgKK0VGRlVTSVZFICAgID0gMTE3CitTT0NJQUJMRSAgICA9IDExNgorVkVSQk9TRSAgICAgPSAxMTUKK1RBTEtBVElWRSAgID0gMTE0CitHQVJSVUxPVVMgICA9IDExMworQ0hBVFRFUkJPWCAgPSAxMTIKK0JPUklORyAgICAgID0gMTExCisKK0xFVkVMX1JBTkdFID0gcmFuZ2UoQk9SSU5HLCBTSUxFTlQgKyAxKQorCisjCisjICAgTmV4dCwgd2UgZGVmaW5lIG5hbWVzIGZvciBvdXIgbGV2ZWxzLiBZb3UgZG9uJ3QgbmVlZCB0byBkbyB0aGlzIC0gaW4gd2hpY2gKKyMgICBjYXNlIHRoZSBzeXN0ZW0gd2lsbCB1c2UgIkxldmVsIG4iIHRvIGRlbm90ZSB0aGUgdGV4dCBmb3IgdGhlIGxldmVsLgorIworbXlfbG9nZ2luZ19sZXZlbHMgPSB7CisgICAgU0lMRU5UICAgICAgOiAnU2lsZW50JywKKyAgICBUQUNJVFVSTiAgICA6ICdUYWNpdHVybicsCisgICAgVEVSU0UgICAgICAgOiAnVGVyc2UnLAorICAgIEVGRlVTSVZFICAgIDogJ0VmZnVzaXZlJywKKyAgICBTT0NJQUJMRSAgICA6ICdTb2NpYWJsZScsCisgICAgVkVSQk9TRSAgICAgOiAnVmVyYm9zZScsCisgICAgVEFMS0FUSVZFICAgOiAnVGFsa2F0aXZlJywKKyAgICBHQVJSVUxPVVMgICA6ICdHYXJydWxvdXMnLAorICAgIENIQVRURVJCT1ggIDogJ0NoYXR0ZXJib3gnLAorICAgIEJPUklORyAgICAgIDogJ0JvcmluZycsCit9CisKK2NsYXNzIEdhcnJ1bG91c0ZpbHRlcihsb2dnaW5nLkZpbHRlcik6CisKKyAgICAiIiJBIGZpbHRlciB3aGljaCBibG9ja3MgZ2FycnVsb3VzIG1lc3NhZ2VzLiIiIgorCisgICAgZGVmIGZpbHRlcihzZWxmLCByZWNvcmQpOgorICAgICAgICByZXR1cm4gcmVjb3JkLmxldmVsbm8gIT0gR0FSUlVMT1VTCisKK2NsYXNzIFZlcnlTcGVjaWZpY0ZpbHRlcihsb2dnaW5nLkZpbHRlcik6CisKKyAgICAiIiJBIGZpbHRlciB3aGljaCBibG9ja3Mgc29jaWFibGUgYW5kIHRhY2l0dXJuIG1lc3NhZ2VzLiIiIgorCisgICAgZGVmIGZpbHRlcihzZWxmLCByZWNvcmQpOgorICAgICAgICByZXR1cm4gcmVjb3JkLmxldmVsbm8gbm90IGluIFtTT0NJQUJMRSwgVEFDSVRVUk5dCisKKworY2xhc3MgQ3VzdG9tTGV2ZWxzQW5kRmlsdGVyc1Rlc3QoQmFzZVRlc3QpOgorCisgICAgIiIiVGVzdCB2YXJpb3VzIGZpbHRlcmluZyBwb3NzaWJpbGl0aWVzIHdpdGggY3VzdG9tIGxvZ2dpbmcgbGV2ZWxzLiIiIgorCisgICAgIyBTa2lwIHRoZSBsb2dnZXIgbmFtZSBncm91cC4KKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChbXHddKyk6IChbXGRdKykkIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQorICAgICAgICBmb3IgaywgdiBpbiBteV9sb2dnaW5nX2xldmVscy5pdGVtcygpOgorICAgICAgICAgICAgbG9nZ2luZy5hZGRMZXZlbE5hbWUoaywgdikKKworICAgIGRlZiBsb2dfYXRfYWxsX2xldmVscyhzZWxmLCBsb2dnZXIpOgorICAgICAgICBmb3IgbHZsIGluIExFVkVMX1JBTkdFOgorICAgICAgICAgICAgbG9nZ2VyLmxvZyhsdmwsIHNlbGYubmV4dF9tZXNzYWdlKCkpCisKKyAgICBkZWYgdGVzdF9sb2dnZXJfZmlsdGVyKHNlbGYpOgorICAgICAgICAjIEZpbHRlciBhdCBsb2dnZXIgbGV2ZWwuCisgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuc2V0TGV2ZWwoVkVSQk9TRSkKKyAgICAgICAgIyBMZXZlbHMgPj0gJ1ZlcmJvc2UnIGFyZSBnb29kLgorICAgICAgICBzZWxmLmxvZ19hdF9hbGxfbGV2ZWxzKHNlbGYucm9vdF9sb2dnZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ1ZlcmJvc2UnLCAnNScpLAorICAgICAgICAgICAgKCdTb2NpYWJsZScsICc2JyksCisgICAgICAgICAgICAoJ0VmZnVzaXZlJywgJzcnKSwKKyAgICAgICAgICAgICgnVGVyc2UnLCAnOCcpLAorICAgICAgICAgICAgKCdUYWNpdHVybicsICc5JyksCisgICAgICAgICAgICAoJ1NpbGVudCcsICcxMCcpLAorICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfaGFuZGxlcl9maWx0ZXIoc2VsZik6CisgICAgICAgICMgRmlsdGVyIGF0IGhhbmRsZXIgbGV2ZWwuCisgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuaGFuZGxlcnNbMF0uc2V0TGV2ZWwoU09DSUFCTEUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgTGV2ZWxzID49ICdTb2NpYWJsZScgYXJlIGdvb2QuCisgICAgICAgICAgICBzZWxmLmxvZ19hdF9hbGxfbGV2ZWxzKHNlbGYucm9vdF9sb2dnZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnU29jaWFibGUnLCAnNicpLAorICAgICAgICAgICAgICAgICgnRWZmdXNpdmUnLCAnNycpLAorICAgICAgICAgICAgICAgICgnVGVyc2UnLCAnOCcpLAorICAgICAgICAgICAgICAgICgnVGFjaXR1cm4nLCAnOScpLAorICAgICAgICAgICAgICAgICgnU2lsZW50JywgJzEwJyksCisgICAgICAgICAgICBdKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyc1swXS5zZXRMZXZlbChsb2dnaW5nLk5PVFNFVCkKKworICAgIGRlZiB0ZXN0X3NwZWNpZmljX2ZpbHRlcnMoc2VsZik6CisgICAgICAgICMgU2V0IGEgc3BlY2lmaWMgZmlsdGVyIG9iamVjdCBvbiB0aGUgaGFuZGxlciwgYW5kIHRoZW4gYWRkIGFub3RoZXIKKyAgICAgICAgIyAgZmlsdGVyIG9iamVjdCBvbiB0aGUgbG9nZ2VyIGl0c2VsZi4KKyAgICAgICAgaGFuZGxlciA9IHNlbGYucm9vdF9sb2dnZXIuaGFuZGxlcnNbMF0KKyAgICAgICAgc3BlY2lmaWNfZmlsdGVyID0gTm9uZQorICAgICAgICBnYXJyID0gR2FycnVsb3VzRmlsdGVyKCkKKyAgICAgICAgaGFuZGxlci5hZGRGaWx0ZXIoZ2FycikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5sb2dfYXRfYWxsX2xldmVscyhzZWxmLnJvb3RfbG9nZ2VyKQorICAgICAgICAgICAgZmlyc3RfbGluZXMgPSBbCisgICAgICAgICAgICAgICAgIyBOb3RpY2UgaG93ICdHYXJydWxvdXMnIGlzIG1pc3NpbmcKKyAgICAgICAgICAgICAgICAoJ0JvcmluZycsICcxJyksCisgICAgICAgICAgICAgICAgKCdDaGF0dGVyYm94JywgJzInKSwKKyAgICAgICAgICAgICAgICAoJ1RhbGthdGl2ZScsICc0JyksCisgICAgICAgICAgICAgICAgKCdWZXJib3NlJywgJzUnKSwKKyAgICAgICAgICAgICAgICAoJ1NvY2lhYmxlJywgJzYnKSwKKyAgICAgICAgICAgICAgICAoJ0VmZnVzaXZlJywgJzcnKSwKKyAgICAgICAgICAgICAgICAoJ1RlcnNlJywgJzgnKSwKKyAgICAgICAgICAgICAgICAoJ1RhY2l0dXJuJywgJzknKSwKKyAgICAgICAgICAgICAgICAoJ1NpbGVudCcsICcxMCcpLAorICAgICAgICAgICAgXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKGZpcnN0X2xpbmVzKQorCisgICAgICAgICAgICBzcGVjaWZpY19maWx0ZXIgPSBWZXJ5U3BlY2lmaWNGaWx0ZXIoKQorICAgICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5hZGRGaWx0ZXIoc3BlY2lmaWNfZmlsdGVyKQorICAgICAgICAgICAgc2VsZi5sb2dfYXRfYWxsX2xldmVscyhzZWxmLnJvb3RfbG9nZ2VyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKGZpcnN0X2xpbmVzICsgWworICAgICAgICAgICAgICAgICMgTm90IG9ubHkgJ0dhcnJ1bG91cycgaXMgc3RpbGwgbWlzc2luZywgYnV0IGFsc28gJ1NvY2lhYmxlJworICAgICAgICAgICAgICAgICMgYW5kICdUYWNpdHVybicKKyAgICAgICAgICAgICAgICAoJ0JvcmluZycsICcxMScpLAorICAgICAgICAgICAgICAgICgnQ2hhdHRlcmJveCcsICcxMicpLAorICAgICAgICAgICAgICAgICgnVGFsa2F0aXZlJywgJzE0JyksCisgICAgICAgICAgICAgICAgKCdWZXJib3NlJywgJzE1JyksCisgICAgICAgICAgICAgICAgKCdFZmZ1c2l2ZScsICcxNycpLAorICAgICAgICAgICAgICAgICgnVGVyc2UnLCAnMTgnKSwKKyAgICAgICAgICAgICAgICAoJ1NpbGVudCcsICcyMCcpLAorICAgICAgICBdKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgc3BlY2lmaWNfZmlsdGVyOgorICAgICAgICAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIucmVtb3ZlRmlsdGVyKHNwZWNpZmljX2ZpbHRlcikKKyAgICAgICAgICAgIGhhbmRsZXIucmVtb3ZlRmlsdGVyKGdhcnIpCisKKworY2xhc3MgTWVtb3J5SGFuZGxlclRlc3QoQmFzZVRlc3QpOgorCisgICAgIiIiVGVzdHMgZm9yIHRoZSBNZW1vcnlIYW5kbGVyLiIiIgorCisgICAgIyBEbyBub3QgYm90aGVyIHdpdGggYSBsb2dnZXIgbmFtZSBncm91cC4KKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChbXHddKyk6IChbXGRdKykkIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLm1lbV9oZGxyID0gbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyKDEwLCBsb2dnaW5nLldBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucm9vdF9oZGxyKQorICAgICAgICBzZWxmLm1lbV9sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignbWVtJykKKyAgICAgICAgc2VsZi5tZW1fbG9nZ2VyLnByb3BhZ2F0ZSA9IDAKKyAgICAgICAgc2VsZi5tZW1fbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5tZW1faGRscikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5tZW1faGRsci5jbG9zZSgpCisgICAgICAgIEJhc2VUZXN0LnRlYXJEb3duKHNlbGYpCisKKyAgICBkZWYgdGVzdF9mbHVzaChzZWxmKToKKyAgICAgICAgIyBUaGUgbWVtb3J5IGhhbmRsZXIgZmx1c2hlcyB0byBpdHMgdGFyZ2V0IGhhbmRsZXIgYmFzZWQgb24gc3BlY2lmaWMKKyAgICAgICAgIyAgY3JpdGVyaWEgKG1lc3NhZ2UgY291bnQgYW5kIG1lc3NhZ2UgbGV2ZWwpLgorICAgICAgICBzZWxmLm1lbV9sb2dnZXIuZGVidWcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorICAgICAgICBzZWxmLm1lbV9sb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisgICAgICAgICMgVGhpcyB3aWxsIGZsdXNoIGJlY2F1c2UgdGhlIGxldmVsIGlzID49IGxvZ2dpbmcuV0FSTklORworICAgICAgICBzZWxmLm1lbV9sb2dnZXIud2FybihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICBsaW5lcyA9IFsKKyAgICAgICAgICAgICgnREVCVUcnLCAnMScpLAorICAgICAgICAgICAgKCdJTkZPJywgJzInKSwKKyAgICAgICAgICAgICgnV0FSTklORycsICczJyksCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKGxpbmVzKQorICAgICAgICBmb3IgbiBpbiAoNCwgMTQpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoOSk6CisgICAgICAgICAgICAgICAgc2VsZi5tZW1fbG9nZ2VyLmRlYnVnKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMobGluZXMpCisgICAgICAgICAgICAjIFRoaXMgd2lsbCBmbHVzaCBiZWNhdXNlIGl0J3MgdGhlIDEwdGggbWVzc2FnZSBzaW5jZSB0aGUgbGFzdAorICAgICAgICAgICAgIyAgZmx1c2guCisgICAgICAgICAgICBzZWxmLm1lbV9sb2dnZXIuZGVidWcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxpbmVzID0gbGluZXMgKyBbKCdERUJVRycsIHN0cihpKSkgZm9yIGkgaW4gcmFuZ2UobiwgbiArIDEwKV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhsaW5lcykKKworICAgICAgICBzZWxmLm1lbV9sb2dnZXIuZGVidWcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKGxpbmVzKQorCisKK2NsYXNzIEV4Y2VwdGlvbkZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcik6CisgICAgIiIiQSBzcGVjaWFsIGV4Y2VwdGlvbiBmb3JtYXR0ZXIuIiIiCisgICAgZGVmIGZvcm1hdEV4Y2VwdGlvbihzZWxmLCBlaSk6CisgICAgICAgIHJldHVybiAiR290IGEgWyVzXSIgJSBlaVswXS5fX25hbWVfXworCisKK2NsYXNzIENvbmZpZ0ZpbGVUZXN0KEJhc2VUZXN0KToKKworICAgICIiIlJlYWRpbmcgbG9nZ2luZyBjb25maWcgZnJvbSBhIC5pbmktc3R5bGUgY29uZmlnIGZpbGUuIiIiCisKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFtcd10rKSBcK1wrIChbXHddKykkIgorCisgICAgIyBjb25maWcwIGlzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4KKyAgICBjb25maWcwID0gIiIiCisgICAgW2xvZ2dlcnNdCisgICAga2V5cz1yb290CisKKyAgICBbaGFuZGxlcnNdCisgICAga2V5cz1oYW5kMQorCisgICAgW2Zvcm1hdHRlcnNdCisgICAga2V5cz1mb3JtMQorCisgICAgW2xvZ2dlcl9yb290XQorICAgIGxldmVsPVdBUk5JTkcKKyAgICBoYW5kbGVycz1oYW5kMQorCisgICAgW2hhbmRsZXJfaGFuZDFdCisgICAgY2xhc3M9U3RyZWFtSGFuZGxlcgorICAgIGxldmVsPU5PVFNFVAorICAgIGZvcm1hdHRlcj1mb3JtMQorICAgIGFyZ3M9KHN5cy5zdGRvdXQsKQorCisgICAgW2Zvcm1hdHRlcl9mb3JtMV0KKyAgICBmb3JtYXQ9JShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcworICAgIGRhdGVmbXQ9CisgICAgIiIiCisKKyAgICAjIGNvbmZpZzEgYWRkcyBhIGxpdHRsZSB0byB0aGUgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4KKyAgICBjb25maWcxID0gIiIiCisgICAgW2xvZ2dlcnNdCisgICAga2V5cz1yb290LHBhcnNlcgorCisgICAgW2hhbmRsZXJzXQorICAgIGtleXM9aGFuZDEKKworICAgIFtmb3JtYXR0ZXJzXQorICAgIGtleXM9Zm9ybTEKKworICAgIFtsb2dnZXJfcm9vdF0KKyAgICBsZXZlbD1XQVJOSU5HCisgICAgaGFuZGxlcnM9CisKKyAgICBbbG9nZ2VyX3BhcnNlcl0KKyAgICBsZXZlbD1ERUJVRworICAgIGhhbmRsZXJzPWhhbmQxCisgICAgcHJvcGFnYXRlPTEKKyAgICBxdWFsbmFtZT1jb21waWxlci5wYXJzZXIKKworICAgIFtoYW5kbGVyX2hhbmQxXQorICAgIGNsYXNzPVN0cmVhbUhhbmRsZXIKKyAgICBsZXZlbD1OT1RTRVQKKyAgICBmb3JtYXR0ZXI9Zm9ybTEKKyAgICBhcmdzPShzeXMuc3Rkb3V0LCkKKworICAgIFtmb3JtYXR0ZXJfZm9ybTFdCisgICAgZm9ybWF0PSUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMKKyAgICBkYXRlZm10PQorICAgICIiIgorCisgICAgIyBjb25maWcxYSBtb3ZlcyB0aGUgaGFuZGxlciB0byB0aGUgcm9vdC4KKyAgICBjb25maWcxYSA9ICIiIgorICAgIFtsb2dnZXJzXQorICAgIGtleXM9cm9vdCxwYXJzZXIKKworICAgIFtoYW5kbGVyc10KKyAgICBrZXlzPWhhbmQxCisKKyAgICBbZm9ybWF0dGVyc10KKyAgICBrZXlzPWZvcm0xCisKKyAgICBbbG9nZ2VyX3Jvb3RdCisgICAgbGV2ZWw9V0FSTklORworICAgIGhhbmRsZXJzPWhhbmQxCisKKyAgICBbbG9nZ2VyX3BhcnNlcl0KKyAgICBsZXZlbD1ERUJVRworICAgIGhhbmRsZXJzPQorICAgIHByb3BhZ2F0ZT0xCisgICAgcXVhbG5hbWU9Y29tcGlsZXIucGFyc2VyCisKKyAgICBbaGFuZGxlcl9oYW5kMV0KKyAgICBjbGFzcz1TdHJlYW1IYW5kbGVyCisgICAgbGV2ZWw9Tk9UU0VUCisgICAgZm9ybWF0dGVyPWZvcm0xCisgICAgYXJncz0oc3lzLnN0ZG91dCwpCisKKyAgICBbZm9ybWF0dGVyX2Zvcm0xXQorICAgIGZvcm1hdD0lKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzCisgICAgZGF0ZWZtdD0KKyAgICAiIiIKKworICAgICMgY29uZmlnMiBoYXMgYSBzdWJ0bGUgY29uZmlndXJhdGlvbiBlcnJvciB0aGF0IHNob3VsZCBiZSByZXBvcnRlZAorICAgIGNvbmZpZzIgPSBjb25maWcxLnJlcGxhY2UoInN5cy5zdGRvdXQiLCAic3lzLnN0Ym91dCIpCisKKyAgICAjIGNvbmZpZzMgaGFzIGEgbGVzcyBzdWJ0bGUgY29uZmlndXJhdGlvbiBlcnJvcgorICAgIGNvbmZpZzMgPSBjb25maWcxLnJlcGxhY2UoImZvcm1hdHRlcj1mb3JtMSIsICJmb3JtYXR0ZXI9bWlzc3BlbGxlZF9uYW1lIikKKworICAgICMgY29uZmlnNCBzcGVjaWZpZXMgYSBjdXN0b20gZm9ybWF0dGVyIGNsYXNzIHRvIGJlIGxvYWRlZAorICAgIGNvbmZpZzQgPSAiIiIKKyAgICBbbG9nZ2Vyc10KKyAgICBrZXlzPXJvb3QKKworICAgIFtoYW5kbGVyc10KKyAgICBrZXlzPWhhbmQxCisKKyAgICBbZm9ybWF0dGVyc10KKyAgICBrZXlzPWZvcm0xCisKKyAgICBbbG9nZ2VyX3Jvb3RdCisgICAgbGV2ZWw9Tk9UU0VUCisgICAgaGFuZGxlcnM9aGFuZDEKKworICAgIFtoYW5kbGVyX2hhbmQxXQorICAgIGNsYXNzPVN0cmVhbUhhbmRsZXIKKyAgICBsZXZlbD1OT1RTRVQKKyAgICBmb3JtYXR0ZXI9Zm9ybTEKKyAgICBhcmdzPShzeXMuc3Rkb3V0LCkKKworICAgIFtmb3JtYXR0ZXJfZm9ybTFdCisgICAgY2xhc3M9IiIiICsgX19uYW1lX18gKyAiIiIuRXhjZXB0aW9uRm9ybWF0dGVyCisgICAgZm9ybWF0PSUobGV2ZWxuYW1lKXM6JShuYW1lKXM6JShtZXNzYWdlKXMKKyAgICBkYXRlZm10PQorICAgICIiIgorCisgICAgIyBjb25maWc1IHNwZWNpZmllcyBhIGN1c3RvbSBoYW5kbGVyIGNsYXNzIHRvIGJlIGxvYWRlZAorICAgIGNvbmZpZzUgPSBjb25maWcxLnJlcGxhY2UoJ2NsYXNzPVN0cmVhbUhhbmRsZXInLCAnY2xhc3M9bG9nZ2luZy5TdHJlYW1IYW5kbGVyJykKKworICAgICMgY29uZmlnNiB1c2VzICcsICcgZGVsaW1pdGVycyBpbiB0aGUgaGFuZGxlcnMgYW5kIGZvcm1hdHRlcnMgc2VjdGlvbnMKKyAgICBjb25maWc2ID0gIiIiCisgICAgW2xvZ2dlcnNdCisgICAga2V5cz1yb290LHBhcnNlcgorCisgICAgW2hhbmRsZXJzXQorICAgIGtleXM9aGFuZDEsIGhhbmQyCisKKyAgICBbZm9ybWF0dGVyc10KKyAgICBrZXlzPWZvcm0xLCBmb3JtMgorCisgICAgW2xvZ2dlcl9yb290XQorICAgIGxldmVsPVdBUk5JTkcKKyAgICBoYW5kbGVycz0KKworICAgIFtsb2dnZXJfcGFyc2VyXQorICAgIGxldmVsPURFQlVHCisgICAgaGFuZGxlcnM9aGFuZDEKKyAgICBwcm9wYWdhdGU9MQorICAgIHF1YWxuYW1lPWNvbXBpbGVyLnBhcnNlcgorCisgICAgW2hhbmRsZXJfaGFuZDFdCisgICAgY2xhc3M9U3RyZWFtSGFuZGxlcgorICAgIGxldmVsPU5PVFNFVAorICAgIGZvcm1hdHRlcj1mb3JtMQorICAgIGFyZ3M9KHN5cy5zdGRvdXQsKQorCisgICAgW2hhbmRsZXJfaGFuZDJdCisgICAgY2xhc3M9U3RyZWFtSGFuZGxlcgorICAgIGxldmVsPU5PVFNFVAorICAgIGZvcm1hdHRlcj1mb3JtMQorICAgIGFyZ3M9KHN5cy5zdGRlcnIsKQorCisgICAgW2Zvcm1hdHRlcl9mb3JtMV0KKyAgICBmb3JtYXQ9JShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcworICAgIGRhdGVmbXQ9CisKKyAgICBbZm9ybWF0dGVyX2Zvcm0yXQorICAgIGZvcm1hdD0lKG1lc3NhZ2UpcworICAgIGRhdGVmbXQ9CisgICAgIiIiCisKKyAgICAjIGNvbmZpZzcgYWRkcyBhIGNvbXBpbGVyIGxvZ2dlci4KKyAgICBjb25maWc3ID0gIiIiCisgICAgW2xvZ2dlcnNdCisgICAga2V5cz1yb290LHBhcnNlcixjb21waWxlcgorCisgICAgW2hhbmRsZXJzXQorICAgIGtleXM9aGFuZDEKKworICAgIFtmb3JtYXR0ZXJzXQorICAgIGtleXM9Zm9ybTEKKworICAgIFtsb2dnZXJfcm9vdF0KKyAgICBsZXZlbD1XQVJOSU5HCisgICAgaGFuZGxlcnM9aGFuZDEKKworICAgIFtsb2dnZXJfY29tcGlsZXJdCisgICAgbGV2ZWw9REVCVUcKKyAgICBoYW5kbGVycz0KKyAgICBwcm9wYWdhdGU9MQorICAgIHF1YWxuYW1lPWNvbXBpbGVyCisKKyAgICBbbG9nZ2VyX3BhcnNlcl0KKyAgICBsZXZlbD1ERUJVRworICAgIGhhbmRsZXJzPQorICAgIHByb3BhZ2F0ZT0xCisgICAgcXVhbG5hbWU9Y29tcGlsZXIucGFyc2VyCisKKyAgICBbaGFuZGxlcl9oYW5kMV0KKyAgICBjbGFzcz1TdHJlYW1IYW5kbGVyCisgICAgbGV2ZWw9Tk9UU0VUCisgICAgZm9ybWF0dGVyPWZvcm0xCisgICAgYXJncz0oc3lzLnN0ZG91dCwpCisKKyAgICBbZm9ybWF0dGVyX2Zvcm0xXQorICAgIGZvcm1hdD0lKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzCisgICAgZGF0ZWZtdD0KKyAgICAiIiIKKworICAgIGRpc2FibGVfdGVzdCA9ICIiIgorICAgIFtsb2dnZXJzXQorICAgIGtleXM9cm9vdAorCisgICAgW2hhbmRsZXJzXQorICAgIGtleXM9c2NyZWVuCisKKyAgICBbZm9ybWF0dGVyc10KKyAgICBrZXlzPQorCisgICAgW2xvZ2dlcl9yb290XQorICAgIGxldmVsPURFQlVHCisgICAgaGFuZGxlcnM9c2NyZWVuCisKKyAgICBbaGFuZGxlcl9zY3JlZW5dCisgICAgbGV2ZWw9REVCVUcKKyAgICBjbGFzcz1TdHJlYW1IYW5kbGVyCisgICAgYXJncz0oc3lzLnN0ZG91dCwpCisgICAgZm9ybWF0dGVyPQorICAgICIiIgorCisgICAgZGVmIGFwcGx5X2NvbmZpZyhzZWxmLCBjb25mLCAqKmt3YXJncyk6CisgICAgICAgIGZpbGUgPSBjU3RyaW5nSU8uU3RyaW5nSU8odGV4dHdyYXAuZGVkZW50KGNvbmYpKQorICAgICAgICBsb2dnaW5nLmNvbmZpZy5maWxlQ29uZmlnKGZpbGUsICoqa3dhcmdzKQorCisgICAgZGVmIHRlc3RfY29uZmlnMF9vayhzZWxmKToKKyAgICAgICAgIyBBIHNpbXBsZSBjb25maWcgZmlsZSB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWcwKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgICAgICAgICAgIyBXb24ndCBvdXRwdXQgYW55dGhpbmcKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICAjIE91dHB1dHMgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCisgICAgZGVmIHRlc3RfY29uZmlnMV9vayhzZWxmLCBjb25maWc9Y29uZmlnMSk6CisgICAgICAgICMgQSBjb25maWcgZmlsZSBkZWZpbmluZyBhIHN1Yi1wYXJzZXIgYXMgd2VsbC4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhjb25maWcpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWcyX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIGZpbGUgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdGFuZGFyZEVycm9yLCBzZWxmLmFwcGx5X2NvbmZpZywgc2VsZi5jb25maWcyKQorCisgICAgZGVmIHRlc3RfY29uZmlnM19mYWlsdXJlKHNlbGYpOgorICAgICAgICAjIEEgc2ltcGxlIGNvbmZpZyBmaWxlIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RhbmRhcmRFcnJvciwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnMykKKworICAgIGRlZiB0ZXN0X2NvbmZpZzRfb2soc2VsZik6CisgICAgICAgICMgQSBjb25maWcgZmlsZSBzcGVjaWZ5aW5nIGEgY3VzdG9tIGZvcm1hdHRlciBjbGFzcy4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzQpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oImp1c3QgdGVzdGluZyIpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgIkVSUk9SOnJvb3Q6anVzdCB0ZXN0aW5nXG5Hb3QgYSBbUnVudGltZUVycm9yXVxuIikKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCisgICAgZGVmIHRlc3RfY29uZmlnNV9vayhzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X2NvbmZpZzFfb2soY29uZmlnPXNlbGYuY29uZmlnNSkKKworICAgIGRlZiB0ZXN0X2NvbmZpZzZfb2soc2VsZik6CisgICAgICAgIHNlbGYudGVzdF9jb25maWcxX29rKGNvbmZpZz1zZWxmLmNvbmZpZzYpCisKKyAgICBkZWYgdGVzdF9jb25maWc3X29rKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnMWEpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICMgU2VlIGlzc3VlICMxMTQyNC4gY29tcGlsZXItaHlwaGVuYXRlZCBzb3J0cworICAgICAgICAgICAgIyBiZXR3ZWVuIGNvbXBpbGVyIGFuZCBjb21waWxlci54eXogYW5kIHRoaXMKKyAgICAgICAgICAgICMgd2FzIHByZXZlbnRpbmcgY29tcGlsZXIueHl6IGZyb20gYmVpbmcgaW5jbHVkZWQKKyAgICAgICAgICAgICMgaW4gdGhlIGNoaWxkIGxvZ2dlcnMgb2YgY29tcGlsZXIgYmVjYXVzZSBvZiBhbgorICAgICAgICAgICAgIyBvdmVyemVhbG91cyBsb29wIHRlcm1pbmF0aW9uIGNvbmRpdGlvbi4KKyAgICAgICAgICAgIGh5cGhlbmF0ZWQgPSBsb2dnaW5nLmdldExvZ2dlcignY29tcGlsZXItaHlwaGVuYXRlZCcpCisgICAgICAgICAgICAjIEFsbCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGh5cGhlbmF0ZWQuY3JpdGljYWwoc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgICAgICAoJ0NSSVRJQ0FMJywgJzMnKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc3KQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvZ2dlci5kaXNhYmxlZCkKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5sZXhlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICAjIFdpbGwgbm90IGFwcGVhcgorICAgICAgICAgICAgaHlwaGVuYXRlZC5jcml0aWNhbChzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnNCcpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnNScpLAorICAgICAgICAgICAgICAgICgnSU5GTycsICc2JyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICc3JyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCisgICAgZGVmIHRlc3RfbG9nZ2VyX2Rpc2FibGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5kaXNhYmxlX3Rlc3QpCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvZ2dlci5kaXNhYmxlZCkKKyAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5kaXNhYmxlX3Rlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2dnZXIuZGlzYWJsZWQpCisgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuZGlzYWJsZV90ZXN0LCBkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnM9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9nZ2VyLmRpc2FibGVkKQorCitjbGFzcyBMb2dSZWNvcmRTdHJlYW1IYW5kbGVyKFN0cmVhbVJlcXVlc3RIYW5kbGVyKToKKworICAgICIiIkhhbmRsZXIgZm9yIGEgc3RyZWFtaW5nIGxvZ2dpbmcgcmVxdWVzdC4gSXQgc2F2ZXMgdGhlIGxvZyBtZXNzYWdlIGluIHRoZQorICAgIFRDUCBzZXJ2ZXIncyAnbG9nX291dHB1dCcgYXR0cmlidXRlLiIiIgorCisgICAgVENQX0xPR19FTkQgPSAiISEhRU5EISEhIgorCisgICAgZGVmIGhhbmRsZShzZWxmKToKKyAgICAgICAgIiIiSGFuZGxlIG11bHRpcGxlIHJlcXVlc3RzIC0gZWFjaCBleHBlY3RlZCB0byBiZSBvZiA0LWJ5dGUgbGVuZ3RoLAorICAgICAgICBmb2xsb3dlZCBieSB0aGUgTG9nUmVjb3JkIGluIHBpY2tsZSBmb3JtYXQuIExvZ3MgdGhlIHJlY29yZAorICAgICAgICBhY2NvcmRpbmcgdG8gd2hhdGV2ZXIgcG9saWN5IGlzIGNvbmZpZ3VyZWQgbG9jYWxseS4iIiIKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGNodW5rID0gc2VsZi5jb25uZWN0aW9uLnJlY3YoNCkKKyAgICAgICAgICAgIGlmIGxlbihjaHVuaykgPCA0OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBzbGVuID0gc3RydWN0LnVucGFjaygiPkwiLCBjaHVuaylbMF0KKyAgICAgICAgICAgIGNodW5rID0gc2VsZi5jb25uZWN0aW9uLnJlY3Yoc2xlbikKKyAgICAgICAgICAgIHdoaWxlIGxlbihjaHVuaykgPCBzbGVuOgorICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsgKyBzZWxmLmNvbm5lY3Rpb24ucmVjdihzbGVuIC0gbGVuKGNodW5rKSkKKyAgICAgICAgICAgIG9iaiA9IHNlbGYudW5waWNrbGUoY2h1bmspCisgICAgICAgICAgICByZWNvcmQgPSBsb2dnaW5nLm1ha2VMb2dSZWNvcmQob2JqKQorICAgICAgICAgICAgc2VsZi5oYW5kbGVfbG9nX3JlY29yZChyZWNvcmQpCisKKyAgICBkZWYgdW5waWNrbGUoc2VsZiwgZGF0YSk6CisgICAgICAgIHJldHVybiBjUGlja2xlLmxvYWRzKGRhdGEpCisKKyAgICBkZWYgaGFuZGxlX2xvZ19yZWNvcmQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgIyBJZiB0aGUgZW5kLW9mLW1lc3NhZ2VzIHNlbnRpbmVsIGlzIHNlZW4sIHRlbGwgdGhlIHNlcnZlciB0bworICAgICAgICAjICB0ZXJtaW5hdGUuCisgICAgICAgIGlmIHNlbGYuVENQX0xPR19FTkQgaW4gcmVjb3JkLm1zZzoKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLmFib3J0ID0gMQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuc2VydmVyLmxvZ19vdXRwdXQgKz0gcmVjb3JkLm1zZyArICJcbiIKKworCitjbGFzcyBMb2dSZWNvcmRTb2NrZXRSZWNlaXZlcihUaHJlYWRpbmdUQ1BTZXJ2ZXIpOgorCisgICAgIiIiQSBzaW1wbGUtbWluZGVkIFRDUCBzb2NrZXQtYmFzZWQgbG9nZ2luZyByZWNlaXZlciBzdWl0YWJsZSBmb3IgdGVzdAorICAgIHB1cnBvc2VzLiIiIgorCisgICAgYWxsb3dfcmV1c2VfYWRkcmVzcyA9IDEKKyAgICBsb2dfb3V0cHV0ID0gIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0PSdsb2NhbGhvc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0PWxvZ2dpbmcuaGFuZGxlcnMuREVGQVVMVF9UQ1BfTE9HR0lOR19QT1JULAorICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcj1Mb2dSZWNvcmRTdHJlYW1IYW5kbGVyKToKKyAgICAgICAgVGhyZWFkaW5nVENQU2VydmVyLl9faW5pdF9fKHNlbGYsIChob3N0LCBwb3J0KSwgaGFuZGxlcikKKyAgICAgICAgc2VsZi5hYm9ydCA9IEZhbHNlCisgICAgICAgIHNlbGYudGltZW91dCA9IDAuMQorICAgICAgICBzZWxmLmZpbmlzaGVkID0gdGhyZWFkaW5nLkV2ZW50KCkKKworICAgIGRlZiBzZXJ2ZV91bnRpbF9zdG9wcGVkKHNlbGYpOgorICAgICAgICB3aGlsZSBub3Qgc2VsZi5hYm9ydDoKKyAgICAgICAgICAgIHJkLCB3ciwgZXggPSBzZWxlY3Quc2VsZWN0KFtzZWxmLnNvY2tldC5maWxlbm8oKV0sIFtdLCBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZW91dCkKKyAgICAgICAgICAgIGlmIHJkOgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX3JlcXVlc3QoKQorICAgICAgICAjIE5vdGlmeSB0aGUgbWFpbiB0aHJlYWQgdGhhdCB3ZSdyZSBhYm91dCB0byBleGl0CisgICAgICAgIHNlbGYuZmluaXNoZWQuc2V0KCkKKyAgICAgICAgIyBjbG9zZSB0aGUgbGlzdGVuIHNvY2tldAorICAgICAgICBzZWxmLnNlcnZlcl9jbG9zZSgpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFNvY2tldEhhbmRsZXJUZXN0KEJhc2VUZXN0KToKKworICAgICIiIlRlc3QgZm9yIFNvY2tldEhhbmRsZXIgb2JqZWN0cy4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiU2V0IHVwIGEgVENQIHNlcnZlciB0byByZWNlaXZlIGxvZyBtZXNzYWdlcywgYW5kIGEgU29ja2V0SGFuZGxlcgorICAgICAgICBwb2ludGluZyB0byB0aGF0IHNlcnZlcidzIGFkZHJlc3MgYW5kIHBvcnQuIiIiCisgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYudGNwc2VydmVyID0gTG9nUmVjb3JkU29ja2V0UmVjZWl2ZXIocG9ydD0wKQorICAgICAgICBzZWxmLnBvcnQgPSBzZWxmLnRjcHNlcnZlci5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQorICAgICAgICBzZWxmLnRocmVhZHMgPSBbCisgICAgICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi50Y3BzZXJ2ZXIuc2VydmVfdW50aWxfc3RvcHBlZCldCisgICAgICAgIGZvciB0aHJlYWQgaW4gc2VsZi50aHJlYWRzOgorICAgICAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKworICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGxvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlcignbG9jYWxob3N0Jywgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLnNvY2tfaGRsci5zZXRGb3JtYXR0ZXIoc2VsZi5yb290X2Zvcm1hdHRlcikKKyAgICAgICAgc2VsZi5yb290X2xvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYucm9vdF9sb2dnZXIuaGFuZGxlcnNbMF0pCisgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuYWRkSGFuZGxlcihzZWxmLnNvY2tfaGRscikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIiIiU2h1dGRvd24gdGhlIFRDUCBzZXJ2ZXIuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYudGNwc2VydmVyLmFib3J0ID0gVHJ1ZQorICAgICAgICAgICAgZGVsIHNlbGYudGNwc2VydmVyCisgICAgICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5zb2NrX2hkbHIpCisgICAgICAgICAgICBzZWxmLnNvY2tfaGRsci5jbG9zZSgpCisgICAgICAgICAgICBmb3IgdGhyZWFkIGluIHNlbGYudGhyZWFkczoKKyAgICAgICAgICAgICAgICB0aHJlYWQuam9pbigyLjApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBCYXNlVGVzdC50ZWFyRG93bihzZWxmKQorCisgICAgZGVmIGdldF9vdXRwdXQoc2VsZik6CisgICAgICAgICIiIkdldCB0aGUgbG9nIG91dHB1dCBhcyByZWNlaXZlZCBieSB0aGUgVENQIHNlcnZlci4iIiIKKyAgICAgICAgIyBTaWduYWwgdGhlIFRDUCByZWNlaXZlciBhbmQgd2FpdCBmb3IgaXQgdG8gdGVybWluYXRlLgorICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmNyaXRpY2FsKExvZ1JlY29yZFN0cmVhbUhhbmRsZXIuVENQX0xPR19FTkQpCisgICAgICAgIHNlbGYudGNwc2VydmVyLmZpbmlzaGVkLndhaXQoMi4wKQorICAgICAgICByZXR1cm4gc2VsZi50Y3BzZXJ2ZXIubG9nX291dHB1dAorCisgICAgZGVmIHRlc3Rfb3V0cHV0KHNlbGYpOgorICAgICAgICAjIFRoZSBsb2cgbWVzc2FnZSBzZW50IHRvIHRoZSBTb2NrZXRIYW5kbGVyIGlzIHByb3Blcmx5IHJlY2VpdmVkLgorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigidGNwIikKKyAgICAgICAgbG9nZ2VyLmVycm9yKCJzcGFtIikKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJlZ2dzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdldF9vdXRwdXQoKSwgInNwYW1cbmVnZ3NcbiIpCisKKworY2xhc3MgTWVtb3J5VGVzdChCYXNlVGVzdCk6CisKKyAgICAiIiJUZXN0IG1lbW9yeSBwZXJzaXN0ZW5jZSBvZiBsb2dnZXIgb2JqZWN0cy4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgZGljdCB0byByZW1lbWJlciBwb3RlbnRpYWxseSBkZXN0cm95ZWQgb2JqZWN0cy4iIiIKKyAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5fc3Vydml2b3JzID0ge30KKworICAgIGRlZiBfd2F0Y2hfZm9yX3N1cnZpdmFsKHNlbGYsICphcmdzKToKKyAgICAgICAgIiIiV2F0Y2ggdGhlIGdpdmVuIG9iamVjdHMgZm9yIHN1cnZpdmFsLCBieSBjcmVhdGluZyB3ZWFrcmVmcyB0bworICAgICAgICB0aGVtLiIiIgorICAgICAgICBmb3Igb2JqIGluIGFyZ3M6CisgICAgICAgICAgICBrZXkgPSBpZChvYmopLCByZXByKG9iaikKKyAgICAgICAgICAgIHNlbGYuX3N1cnZpdm9yc1trZXldID0gd2Vha3JlZi5yZWYob2JqKQorCisgICAgZGVmIF9hc3NlcnRUcnVlc3Vydml2YWwoc2VsZik6CisgICAgICAgICIiIkFzc2VydCB0aGF0IGFsbCBvYmplY3RzIHdhdGNoZWQgZm9yIHN1cnZpdmFsIGhhdmUgc3Vydml2ZWQuIiIiCisgICAgICAgICMgVHJpZ2dlciBjeWNsZSBicmVha2luZy4KKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGRlYWQgPSBbXQorICAgICAgICBmb3IgKGlkXywgcmVwcl8pLCByZWYgaW4gc2VsZi5fc3Vydml2b3JzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiByZWYoKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGRlYWQuYXBwZW5kKHJlcHJfKQorICAgICAgICBpZiBkZWFkOgorICAgICAgICAgICAgc2VsZi5mYWlsKCIlZCBvYmplY3RzIHNob3VsZCBoYXZlIHN1cnZpdmVkICIKKyAgICAgICAgICAgICAgICAiYnV0IGhhdmUgYmVlbiBkZXN0cm95ZWQ6ICVzIiAlIChsZW4oZGVhZCksICIsICIuam9pbihkZWFkKSkpCisKKyAgICBkZWYgdGVzdF9wZXJzaXN0ZW50X2xvZ2dlcnMoc2VsZik6CisgICAgICAgICMgTG9nZ2VyIG9iamVjdHMgYXJlIHBlcnNpc3RlbnQgYW5kIHJldGFpbiB0aGVpciBjb25maWd1cmF0aW9uLCBldmVuCisgICAgICAgICMgIGlmIHZpc2libGUgcmVmZXJlbmNlcyBhcmUgZGVzdHJveWVkLgorICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAgICAgICAgZm9vID0gbG9nZ2luZy5nZXRMb2dnZXIoImZvbyIpCisgICAgICAgIHNlbGYuX3dhdGNoX2Zvcl9zdXJ2aXZhbChmb28pCisgICAgICAgIGZvby5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmRlYnVnKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgIGZvby5kZWJ1ZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdmb28nLCAnREVCVUcnLCAnMicpLAorICAgICAgICBdKQorICAgICAgICBkZWwgZm9vCisgICAgICAgICMgZm9vIGhhcyBzdXJ2aXZlZC4KKyAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZXN1cnZpdmFsKCkKKyAgICAgICAgIyBmb28gaGFzIHJldGFpbmVkIGl0cyBzZXR0aW5ncy4KKyAgICAgICAgYmFyID0gbG9nZ2luZy5nZXRMb2dnZXIoImZvbyIpCisgICAgICAgIGJhci5kZWJ1ZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdmb28nLCAnREVCVUcnLCAnMicpLAorICAgICAgICAgICAgKCdmb28nLCAnREVCVUcnLCAnMycpLAorICAgICAgICBdKQorCisKK2NsYXNzIEVuY29kaW5nVGVzdChCYXNlVGVzdCk6CisgICAgZGVmIHRlc3RfZW5jb2RpbmdfcGxhaW5fZmlsZShzZWxmKToKKyAgICAgICAgIyBJbiBQeXRob24gMi54LCBhIHBsYWluIGZpbGUgb2JqZWN0IGlzIHRyZWF0ZWQgYXMgaGF2aW5nIG5vIGVuY29kaW5nLgorICAgICAgICBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcigidGVzdCIpCisgICAgICAgIGZuID0gdGVtcGZpbGUubWt0ZW1wKCIubG9nIikKKyAgICAgICAgIyB0aGUgbm9uLWFzY2lpIGRhdGEgd2Ugd3JpdGUgdG8gdGhlIGxvZy4KKyAgICAgICAgZGF0YSA9ICJmb29ceDgwIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5GaWxlSGFuZGxlcihmbikKKyAgICAgICAgICAgIGxvZy5hZGRIYW5kbGVyKGhhbmRsZXIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyB3cml0ZSBub24tYXNjaWkgZGF0YSB0byB0aGUgbG9nLgorICAgICAgICAgICAgICAgIGxvZy53YXJuaW5nKGRhdGEpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGxvZy5yZW1vdmVIYW5kbGVyKGhhbmRsZXIpCisgICAgICAgICAgICAgICAgaGFuZGxlci5jbG9zZSgpCisgICAgICAgICAgICAjIGNoZWNrIHdlIHdyb3RlIGV4YWN0bHkgdGhvc2UgYnl0ZXMsIGlnbm9yaW5nIHRyYWlsaW5nIFxuIGV0YworICAgICAgICAgICAgZiA9IG9wZW4oZm4pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKS5yc3RyaXAoKSwgZGF0YSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbik6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQorCisgICAgZGVmIHRlc3RfZW5jb2RpbmdfY3lyaWxsaWNfdW5pY29kZShzZWxmKToKKyAgICAgICAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoInRlc3QiKQorICAgICAgICAjR2V0IGEgbWVzc2FnZSBpbiBVbmljb2RlOiBEbyBzdmlkYW55YSBpbiBDeXJpbGxpYyAobWVhbmluZyBnb29kYnllKQorICAgICAgICBtZXNzYWdlID0gdSdcdTA0MzRcdTA0M2UgXHUwNDQxXHUwNDMyXHUwNDM4XHUwNDM0XHUwNDMwXHUwNDNkXHUwNDM4XHUwNDRmJworICAgICAgICAjRW5zdXJlIGl0J3Mgd3JpdHRlbiBpbiBhIEN5cmlsbGljIGVuY29kaW5nCisgICAgICAgIHdyaXRlcl9jbGFzcyA9IGNvZGVjcy5nZXR3cml0ZXIoJ2NwMTI1MScpCisgICAgICAgIHdyaXRlcl9jbGFzcy5lbmNvZGluZyA9ICdjcDEyNTEnCisgICAgICAgIHN0cmVhbSA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHdyaXRlciA9IHdyaXRlcl9jbGFzcyhzdHJlYW0sICdzdHJpY3QnKQorICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHdyaXRlcikKKyAgICAgICAgbG9nLmFkZEhhbmRsZXIoaGFuZGxlcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9nLndhcm5pbmcobWVzc2FnZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGxvZy5yZW1vdmVIYW5kbGVyKGhhbmRsZXIpCisgICAgICAgICAgICBoYW5kbGVyLmNsb3NlKCkKKyAgICAgICAgIyBjaGVjayB3ZSB3cm90ZSBleGFjdGx5IHRob3NlIGJ5dGVzLCBpZ25vcmluZyB0cmFpbGluZyBcbiBldGMKKyAgICAgICAgcyA9IHN0cmVhbS5nZXR2YWx1ZSgpCisgICAgICAgICNDb21wYXJlIGFnYWluc3Qgd2hhdCB0aGUgZGF0YSBzaG91bGQgYmUgd2hlbiBlbmNvZGVkIGluIENQLTEyNTEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAnXHhlNFx4ZWUgXHhmMVx4ZTJceGU4XHhlNFx4ZTBceGVkXHhlOFx4ZmZcbicpCisKKworY2xhc3MgV2FybmluZ3NUZXN0KEJhc2VUZXN0KToKKworICAgIGRlZiB0ZXN0X3dhcm5pbmdzKHNlbGYpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBsb2dnaW5nLmNhcHR1cmVXYXJuaW5ncyhUcnVlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgICAgICBmaWxlID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAgICAgICBoID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKGZpbGUpCisgICAgICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInB5Lndhcm5pbmdzIikKKyAgICAgICAgICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihoKQorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIkknbSB3YXJuaW5nIHlvdS4uLiIpCisgICAgICAgICAgICAgICAgbG9nZ2VyLnJlbW92ZUhhbmRsZXIoaCkKKyAgICAgICAgICAgICAgICBzID0gZmlsZS5nZXR2YWx1ZSgpCisgICAgICAgICAgICAgICAgaC5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZmluZCgiVXNlcldhcm5pbmc6IEknbSB3YXJuaW5nIHlvdS4uLlxuIikgPiAwKQorCisgICAgICAgICAgICAgICAgI1NlZSBpZiBhbiBleHBsaWNpdCBmaWxlIHVzZXMgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uCisgICAgICAgICAgICAgICAgZmlsZSA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2hvd3dhcm5pbmcoIkV4cGxpY2l0IiwgVXNlcldhcm5pbmcsICJkdW1teS5weSIsIDQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsICJEdW1teSBsaW5lIikKKyAgICAgICAgICAgICAgICBzID0gZmlsZS5nZXR2YWx1ZSgpCisgICAgICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLAorICAgICAgICAgICAgICAgICAgICAgICAgImR1bW15LnB5OjQyOiBVc2VyV2FybmluZzogRXhwbGljaXRcbiAgRHVtbXkgbGluZVxuIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgbG9nZ2luZy5jYXB0dXJlV2FybmluZ3MoRmFsc2UpCisKKworZGVmIGZvcm1hdEZ1bmMoZm9ybWF0LCBkYXRlZm10PU5vbmUpOgorICAgIHJldHVybiBsb2dnaW5nLkZvcm1hdHRlcihmb3JtYXQsIGRhdGVmbXQpCisKK2RlZiBoYW5kbGVyRnVuYygpOgorICAgIHJldHVybiBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorCitjbGFzcyBDdXN0b21IYW5kbGVyKGxvZ2dpbmcuU3RyZWFtSGFuZGxlcik6CisgICAgcGFzcworCitjbGFzcyBDb25maWdEaWN0VGVzdChCYXNlVGVzdCk6CisKKyAgICAiIiJSZWFkaW5nIGxvZ2dpbmcgY29uZmlnIGZyb20gYSBkaWN0aW9uYXJ5LiIiIgorCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihbXHddKykgXCtcKyAoW1x3XSspJCIKKworICAgICMgY29uZmlnMCBpcyBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24uCisgICAgY29uZmlnMCA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjIGNvbmZpZzEgYWRkcyBhIGxpdHRsZSB0byB0aGUgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4KKyAgICBjb25maWcxID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgICMgY29uZmlnMiBoYXMgYSBzdWJ0bGUgY29uZmlndXJhdGlvbiBlcnJvciB0aGF0IHNob3VsZCBiZSByZXBvcnRlZAorICAgIGNvbmZpZzIgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRib3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgICNBcyBjb25maWcxIGJ1dCB3aXRoIGEgbWlzc3BlbHQgbGV2ZWwgb24gYSBoYW5kbGVyCisgICAgY29uZmlnMmEgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05UT1NFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisKKyAgICAjQXMgY29uZmlnMSBidXQgd2l0aCBhIG1pc3NwZWx0IGxldmVsIG9uIGEgbG9nZ2VyCisgICAgY29uZmlnMmIgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV1JBTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgIyBjb25maWczIGhhcyBhIGxlc3Mgc3VidGxlIGNvbmZpZ3VyYXRpb24gZXJyb3IKKyAgICBjb25maWczID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdtaXNzcGVsbGVkX25hbWUnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjIGNvbmZpZzQgc3BlY2lmaWVzIGEgY3VzdG9tIGZvcm1hdHRlciBjbGFzcyB0byBiZSBsb2FkZWQKKyAgICBjb25maWc0ID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnKCknIDogX19uYW1lX18gKyAnLkV4Y2VwdGlvbkZvcm1hdHRlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpczolKG5hbWUpczolKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjIEFzIGNvbmZpZzQgYnV0IHVzaW5nIGFuIGFjdHVhbCBjYWxsYWJsZSByYXRoZXIgdGhhbiBhIHN0cmluZworICAgIGNvbmZpZzRhID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnKCknIDogRXhjZXB0aW9uRm9ybWF0dGVyLAorICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXM6JShuYW1lKXM6JShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdmb3JtMicgOiB7CisgICAgICAgICAgICAgICAgJygpJyA6IF9fbmFtZV9fICsgJy5mb3JtYXRGdW5jJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzOiUobmFtZSlzOiUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnZm9ybTMnIDogeworICAgICAgICAgICAgICAgICcoKScgOiBmb3JtYXRGdW5jLAorICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXM6JShuYW1lKXM6JShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdoYW5kMicgOiB7CisgICAgICAgICAgICAgICAgJygpJyA6IGhhbmRsZXJGdW5jLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgIH0sCisgICAgfQorCisgICAgIyBjb25maWc1IHNwZWNpZmllcyBhIGN1c3RvbSBoYW5kbGVyIGNsYXNzIHRvIGJlIGxvYWRlZAorICAgIGNvbmZpZzUgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6IF9fbmFtZV9fICsgJy5DdXN0b21IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgICMgY29uZmlnNiBzcGVjaWZpZXMgYSBjdXN0b20gaGFuZGxlciBjbGFzcyB0byBiZSBsb2FkZWQKKyAgICAjIGJ1dCBoYXMgYmFkIGFyZ3VtZW50cworICAgIGNvbmZpZzYgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6IF9fbmFtZV9fICsgJy5DdXN0b21IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgICAgICAnOScgOiAnaW52YWxpZCBwYXJhbWV0ZXIgbmFtZScsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjY29uZmlnIDcgZG9lcyBub3QgZGVmaW5lIGNvbXBpbGVyLnBhcnNlciBidXQgZGVmaW5lcyBjb21waWxlci5sZXhlcgorICAgICNzbyBjb21waWxlci5wYXJzZXIgc2hvdWxkIGJlIGRpc2FibGVkIGFmdGVyIGFwcGx5aW5nIGl0CisgICAgY29uZmlnNyA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIubGV4ZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgIGNvbmZpZzggPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Rpc2FibGVfZXhpc3RpbmdfbG9nZ2VycycgOiBGYWxzZSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdjb21waWxlci5sZXhlcicgOiB7CisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgIGNvbmZpZzkgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICBjb25maWc5YSA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnaW5jcmVtZW50YWwnIDogVHJ1ZSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnSU5GTycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgIH0KKworICAgIGNvbmZpZzliID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdpbmNyZW1lbnRhbCcgOiBUcnVlLAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0lORk8nLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdJTkZPJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgfQorCisgICAgI0FzIGNvbmZpZzEgYnV0IHdpdGggYSBmaWx0ZXIgYWRkZWQKKyAgICBjb25maWcxMCA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnZmlsdGVycycgOiB7CisgICAgICAgICAgICAnZmlsdDEnIDogeworICAgICAgICAgICAgICAgICduYW1lJyA6ICdjb21waWxlci5wYXJzZXInLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgICAgICdmaWx0ZXJzJyA6IFsnZmlsdDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdmaWx0ZXJzJyA6IFsnZmlsdDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICB9LAorICAgIH0KKworICAgICNBcyBjb25maWcxIGJ1dCB1c2luZyBjZmc6Ly8gcmVmZXJlbmNlcworICAgIGNvbmZpZzExID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICd0cnVlX2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJfY29uZmlncyc6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnIDogJ2NmZzovL3RydWVfZm9ybWF0dGVycycsCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogJ2NmZzovL2hhbmRsZXJfY29uZmlnc1toYW5kMV0nLAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjQXMgY29uZmlnMTEgYnV0IG1pc3NpbmcgdGhlIHZlcnNpb24ga2V5CisgICAgY29uZmlnMTIgPSB7CisgICAgICAgICd0cnVlX2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJfY29uZmlncyc6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnIDogJ2NmZzovL3RydWVfZm9ybWF0dGVycycsCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogJ2NmZzovL2hhbmRsZXJfY29uZmlnc1toYW5kMV0nLAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjQXMgY29uZmlnMTEgYnV0IHVzaW5nIGFuIHVuc3VwcG9ydGVkIHZlcnNpb24KKyAgICBjb25maWcxMyA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAyLAorICAgICAgICAndHJ1ZV9mb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVyX2NvbmZpZ3MnOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdmb3JtYXR0ZXJzJyA6ICdjZmc6Ly90cnVlX2Zvcm1hdHRlcnMnLAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6ICdjZmc6Ly9oYW5kbGVyX2NvbmZpZ3NbaGFuZDFdJywKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgb3V0X29mX29yZGVyID0geworICAgICAgICAidmVyc2lvbiI6IDEsCisgICAgICAgICJmb3JtYXR0ZXJzIjogeworICAgICAgICAgICAgIm15U2ltcGxlRm9ybWF0dGVyIjogeworICAgICAgICAgICAgICAgICJmb3JtYXQiOiAiJShhc2N0aW1lKXMgKCUobmFtZSlzKSAlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgImhhbmRsZXJzIjogeworICAgICAgICAgICAgImZpbGVHbG9iYWwiOiB7CisgICAgICAgICAgICAgICAgImNsYXNzIjogImxvZ2dpbmcuU3RyZWFtSGFuZGxlciIsCisgICAgICAgICAgICAgICAgImxldmVsIjogIkRFQlVHIiwKKyAgICAgICAgICAgICAgICAiZm9ybWF0dGVyIjogIm15U2ltcGxlRm9ybWF0dGVyIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJidWZmZXJHbG9iYWwiOiB7CisgICAgICAgICAgICAgICAgImNsYXNzIjogImxvZ2dpbmcuaGFuZGxlcnMuTWVtb3J5SGFuZGxlciIsCisgICAgICAgICAgICAgICAgImNhcGFjaXR5IjogNSwKKyAgICAgICAgICAgICAgICAiZm9ybWF0dGVyIjogIm15U2ltcGxlRm9ybWF0dGVyIiwKKyAgICAgICAgICAgICAgICAidGFyZ2V0IjogImZpbGVHbG9iYWwiLAorICAgICAgICAgICAgICAgICJsZXZlbCI6ICJERUJVRyIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJsb2dnZXJzIjogeworICAgICAgICAgICAgIm15bW9kdWxlIjogeworICAgICAgICAgICAgICAgICJsZXZlbCI6ICJERUJVRyIsCisgICAgICAgICAgICAgICAgImhhbmRsZXJzIjogWyJidWZmZXJHbG9iYWwiXSwKKyAgICAgICAgICAgICAgICAicHJvcGFnYXRlIjogInRydWUiCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkZWYgYXBwbHlfY29uZmlnKHNlbGYsIGNvbmYpOgorICAgICAgICBsb2dnaW5nLmNvbmZpZy5kaWN0Q29uZmlnKGNvbmYpCisKKyAgICBkZWYgdGVzdF9jb25maWcwX29rKHNlbGYpOgorICAgICAgICAjIEEgc2ltcGxlIGNvbmZpZyB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWcwKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgICAgICAgICAgIyBXb24ndCBvdXRwdXQgYW55dGhpbmcKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICAjIE91dHB1dHMgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCisgICAgZGVmIHRlc3RfY29uZmlnMV9vayhzZWxmLCBjb25maWc9Y29uZmlnMSk6CisgICAgICAgICMgQSBjb25maWcgZGVmaW5pbmcgYSBzdWItcGFyc2VyIGFzIHdlbGwuCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoY29uZmlnKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnSU5GTycsICcxJyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCisgICAgZGVmIHRlc3RfY29uZmlnMl9mYWlsdXJlKHNlbGYpOgorICAgICAgICAjIEEgc2ltcGxlIGNvbmZpZyB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0YW5kYXJkRXJyb3IsIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzIpCisKKyAgICBkZWYgdGVzdF9jb25maWcyYV9mYWlsdXJlKHNlbGYpOgorICAgICAgICAjIEEgc2ltcGxlIGNvbmZpZyB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0YW5kYXJkRXJyb3IsIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzJhKQorCisgICAgZGVmIHRlc3RfY29uZmlnMmJfZmFpbHVyZShzZWxmKToKKyAgICAgICAgIyBBIHNpbXBsZSBjb25maWcgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdGFuZGFyZEVycm9yLCBzZWxmLmFwcGx5X2NvbmZpZywgc2VsZi5jb25maWcyYikKKworICAgIGRlZiB0ZXN0X2NvbmZpZzNfZmFpbHVyZShzZWxmKToKKyAgICAgICAgIyBBIHNpbXBsZSBjb25maWcgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdGFuZGFyZEVycm9yLCBzZWxmLmFwcGx5X2NvbmZpZywgc2VsZi5jb25maWczKQorCisgICAgZGVmIHRlc3RfY29uZmlnNF9vayhzZWxmKToKKyAgICAgICAgIyBBIGNvbmZpZyBzcGVjaWZ5aW5nIGEgY3VzdG9tIGZvcm1hdHRlciBjbGFzcy4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzQpCisgICAgICAgICAgICAjbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigpCisgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCJqdXN0IHRlc3RpbmciKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgICJFUlJPUjpyb290Omp1c3QgdGVzdGluZ1xuR290IGEgW1J1bnRpbWVFcnJvcl1cbiIpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKworICAgIGRlZiB0ZXN0X2NvbmZpZzRhX29rKHNlbGYpOgorICAgICAgICAjIEEgY29uZmlnIHNwZWNpZnlpbmcgYSBjdXN0b20gZm9ybWF0dGVyIGNsYXNzLgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnNGEpCisgICAgICAgICAgICAjbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigpCisgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCJqdXN0IHRlc3RpbmciKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgICJFUlJPUjpyb290Omp1c3QgdGVzdGluZ1xuR290IGEgW1J1bnRpbWVFcnJvcl1cbiIpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKworICAgIGRlZiB0ZXN0X2NvbmZpZzVfb2soc2VsZik6CisgICAgICAgIHNlbGYudGVzdF9jb25maWcxX29rKGNvbmZpZz1zZWxmLmNvbmZpZzUpCisKKyAgICBkZWYgdGVzdF9jb25maWc2X2ZhaWx1cmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0YW5kYXJkRXJyb3IsIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzYpCisKKyAgICBkZWYgdGVzdF9jb25maWc3X29rKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnMSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzcpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2dnZXIuZGlzYWJsZWQpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIubGV4ZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnMycpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnNCcpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKworICAgICNTYW1lIGFzIHRlc3RfY29uZmlnXzdfb2sgYnV0IGRvbid0IGRpc2FibGUgb2xkIGxvZ2dlcnMuCisgICAgZGVmIHRlc3RfY29uZmlnXzhfb2soc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWcxKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnSU5GTycsICcxJyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnOCkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2dnZXIuZGlzYWJsZWQpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIubGV4ZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnMycpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnNCcpLAorICAgICAgICAgICAgICAgICgnSU5GTycsICc1JyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICc2JyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCisgICAgZGVmIHRlc3RfY29uZmlnXzlfb2soc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc5KQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICAjTm90aGluZyB3aWxsIGJlIG91dHB1dCBzaW5jZSBib3RoIGhhbmRsZXIgYW5kIGxvZ2dlciBhcmUgc2V0IHRvIFdBUk5JTkcKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzlhKQorICAgICAgICAgICAgI05vdGhpbmcgd2lsbCBiZSBvdXRwdXQgc2luY2UgYm90aCBoYW5kbGVyIGlzIHN0aWxsIHNldCB0byBXQVJOSU5HCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc5YikKKyAgICAgICAgICAgICNNZXNzYWdlIHNob3VsZCBub3cgYmUgb3V0cHV0CisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnMycpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKworICAgIGRlZiB0ZXN0X2NvbmZpZ18xMF9vayhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzEwKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2NvbXBpbGVyJykKKyAgICAgICAgICAgICNOb3Qgb3V0cHV0LCBiZWNhdXNlIGZpbHRlcmVkCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2NvbXBpbGVyLmxleGVyJykKKyAgICAgICAgICAgICNOb3Qgb3V0cHV0LCBiZWNhdXNlIGZpbHRlcmVkCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlci5jb2RlZ2VuIikKKyAgICAgICAgICAgICNPdXRwdXQsIGFzIG5vdCBmaWx0ZXJlZAorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnV0FSTklORycsICcxJyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICc0JyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorCisgICAgZGVmIHRlc3RfY29uZmlnMTFfb2soc2VsZik6CisgICAgICAgIHNlbGYudGVzdF9jb25maWcxX29rKHNlbGYuY29uZmlnMTEpCisKKyAgICBkZWYgdGVzdF9jb25maWcxMl9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdGFuZGFyZEVycm9yLCBzZWxmLmFwcGx5X2NvbmZpZywgc2VsZi5jb25maWcxMikKKworICAgIGRlZiB0ZXN0X2NvbmZpZzEzX2ZhaWx1cmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0YW5kYXJkRXJyb3IsIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzEzKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnbGlzdGVuKCkgbmVlZHMgdGhyZWFkaW5nIHRvIHdvcmsnKQorICAgIGRlZiBzZXR1cF92aWFfbGlzdGVuZXIoc2VsZiwgdGV4dCk6CisgICAgICAgICMgQXNrIGZvciBhIHJhbmRvbWx5IGFzc2lnbmVkIHBvcnQgKGJ5IHVzaW5nIHBvcnQgMCkKKyAgICAgICAgdCA9IGxvZ2dpbmcuY29uZmlnLmxpc3RlbigwKQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgdC5yZWFkeS53YWl0KCkKKyAgICAgICAgIyBOb3cgZ2V0IHRoZSBwb3J0IGFsbG9jYXRlZAorICAgICAgICBwb3J0ID0gdC5wb3J0CisgICAgICAgIHQucmVhZHkuY2xlYXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KDIuMCkKKyAgICAgICAgICAgIHNvY2suY29ubmVjdCgoJ2xvY2FsaG9zdCcsIHBvcnQpKQorCisgICAgICAgICAgICBzbGVuID0gc3RydWN0LnBhY2soJz5MJywgbGVuKHRleHQpKQorICAgICAgICAgICAgcyA9IHNsZW4gKyB0ZXh0CisgICAgICAgICAgICBzZW50c29mYXIgPSAwCisgICAgICAgICAgICBsZWZ0ID0gbGVuKHMpCisgICAgICAgICAgICB3aGlsZSBsZWZ0ID4gMDoKKyAgICAgICAgICAgICAgICBzZW50ID0gc29jay5zZW5kKHNbc2VudHNvZmFyOl0pCisgICAgICAgICAgICAgICAgc2VudHNvZmFyICs9IHNlbnQKKyAgICAgICAgICAgICAgICBsZWZ0IC09IHNlbnQKKyAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdC5yZWFkeS53YWl0KDIuMCkKKyAgICAgICAgICAgIGxvZ2dpbmcuY29uZmlnLnN0b3BMaXN0ZW5pbmcoKQorICAgICAgICAgICAgdC5qb2luKDIuMCkKKworICAgIGRlZiB0ZXN0X2xpc3Rlbl9jb25maWdfMTBfb2soc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5zZXR1cF92aWFfbGlzdGVuZXIoanNvbi5kdW1wcyhzZWxmLmNvbmZpZzEwKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdjb21waWxlcicpCisgICAgICAgICAgICAjTm90IG91dHB1dCwgYmVjYXVzZSBmaWx0ZXJlZAorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdjb21waWxlci5sZXhlcicpCisgICAgICAgICAgICAjTm90IG91dHB1dCwgYmVjYXVzZSBmaWx0ZXJlZAorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIuY29kZWdlbiIpCisgICAgICAgICAgICAjT3V0cHV0LCBhcyBub3QgZmlsdGVyZWQKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ1dBUk5JTkcnLCAnMScpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnNCcpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKworICAgIGRlZiB0ZXN0X2xpc3Rlbl9jb25maWdfMV9vayhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLnNldHVwX3ZpYV9saXN0ZW5lcih0ZXh0d3JhcC5kZWRlbnQoQ29uZmlnRmlsZVRlc3QuY29uZmlnMSkpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9vdXRfb2Zfb3JkZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYub3V0X29mX29yZGVyKQorICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ215bW9kdWxlJykuaGFuZGxlcnNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGhhbmRsZXIudGFyZ2V0LCBsb2dnaW5nLkhhbmRsZXIpCisKK2NsYXNzIE1hbmFnZXJUZXN0KEJhc2VUZXN0KToKKyAgICBkZWYgdGVzdF9tYW5hZ2VyX2xvZ2dlcmNsYXNzKHNlbGYpOgorICAgICAgICBsb2dnZWQgPSBbXQorCisgICAgICAgIGNsYXNzIE15TG9nZ2VyKGxvZ2dpbmcuTG9nZ2VyKToKKyAgICAgICAgICAgIGRlZiBfbG9nKHNlbGYsIGxldmVsLCBtc2csIGFyZ3MsIGV4Y19pbmZvPU5vbmUsIGV4dHJhPU5vbmUpOgorICAgICAgICAgICAgICAgIGxvZ2dlZC5hcHBlbmQobXNnKQorCisgICAgICAgIG1hbiA9IGxvZ2dpbmcuTWFuYWdlcihOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hbi5zZXRMb2dnZXJDbGFzcywgaW50KQorICAgICAgICBtYW4uc2V0TG9nZ2VyQ2xhc3MoTXlMb2dnZXIpCisgICAgICAgIGxvZ2dlciA9IG1hbi5nZXRMb2dnZXIoJ3Rlc3QnKQorICAgICAgICBsb2dnZXIud2FybmluZygnc2hvdWxkIGFwcGVhciBpbiBsb2dnZWQnKQorICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ3Nob3VsZCBub3QgYXBwZWFyIGluIGxvZ2dlZCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dnZWQsIFsnc2hvdWxkIGFwcGVhciBpbiBsb2dnZWQnXSkKKworCitjbGFzcyBDaGlsZExvZ2dlclRlc3QoQmFzZVRlc3QpOgorICAgIGRlZiB0ZXN0X2NoaWxkX2xvZ2dlcnMoc2VsZik6CisgICAgICAgIHIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgIGwxID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYycpCisgICAgICAgIGwyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RlZi5naGknKQorICAgICAgICBjMSA9IHIuZ2V0Q2hpbGQoJ3h5eicpCisgICAgICAgIGMyID0gci5nZXRDaGlsZCgndXZ3Lnh5eicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMSBpcyBsb2dnaW5nLmdldExvZ2dlcigneHl6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMiBpcyBsb2dnaW5nLmdldExvZ2dlcigndXZ3Lnh5eicpKQorICAgICAgICBjMSA9IGwxLmdldENoaWxkKCdkZWYnKQorICAgICAgICBjMiA9IGMxLmdldENoaWxkKCdnaGknKQorICAgICAgICBjMyA9IGwxLmdldENoaWxkKCdkZWYuZ2hpJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMxIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMuZGVmJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMiBpcyBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZi5naGknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMyIGlzIGMzKQorCisKK2NsYXNzIEhhbmRsZXJUZXN0KEJhc2VUZXN0KToKKworICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLCAnV2F0Y2hlZEZpbGVIYW5kbGVyIG5vdCBhcHByb3ByaWF0ZSBmb3IgV2luZG93cy4nKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RfcmFjZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTQ2MzIgcmVmZXJzLgorICAgICAgICBkZWYgcmVtb3ZlX2xvb3AoZm5hbWUsIHRyaWVzKToKKyAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKHRyaWVzKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmbmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMDQgKiByYW5kb20ucmFuZGludCgwLCA0KSkKKworICAgICAgICBkZWxfY291bnQgPSA1MDAKKyAgICAgICAgbG9nX2NvdW50ID0gNTAwCisKKyAgICAgICAgZm9yIGRlbGF5IGluIChGYWxzZSwgVHJ1ZSk6CisgICAgICAgICAgICBmZCwgZm4gPSB0ZW1wZmlsZS5ta3N0ZW1wKCcubG9nJywgJ3Rlc3RfbG9nZ2luZy0zLScpCisgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgICAgIHJlbW92ZXIgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1yZW1vdmVfbG9vcCwgYXJncz0oZm4sIGRlbF9jb3VudCkpCisgICAgICAgICAgICByZW1vdmVyLmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHJlbW92ZXIuc3RhcnQoKQorICAgICAgICAgICAgaCA9IGxvZ2dpbmcuaGFuZGxlcnMuV2F0Y2hlZEZpbGVIYW5kbGVyKGZuLCBkZWxheT1kZWxheSkKKyAgICAgICAgICAgIGYgPSBsb2dnaW5nLkZvcm1hdHRlcignJShhc2N0aW1lKXM6ICUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzJykKKyAgICAgICAgICAgIGguc2V0Rm9ybWF0dGVyKGYpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2UobG9nX2NvdW50KToKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAwNSkKKyAgICAgICAgICAgICAgICAgICAgciA9IGxvZ2dpbmcubWFrZUxvZ1JlY29yZCh7J21zZyc6ICd0ZXN0aW5nJyB9KQorICAgICAgICAgICAgICAgICAgICBoLmhhbmRsZShyKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICByZW1vdmVyLmpvaW4oKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaC5jbG9zZSgpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmbik6CisgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmbikKKworCisjIFNldCB0aGUgbG9jYWxlIHRvIHRoZSBwbGF0Zm9ybS1kZXBlbmRlbnQgZGVmYXVsdC4gIEkgaGF2ZSBubyBpZGVhCisjIHdoeSB0aGUgdGVzdCBkb2VzIHRoaXMsIGJ1dCBpbiBhbnkgY2FzZSB3ZSBzYXZlIHRoZSBjdXJyZW50IGxvY2FsZQorIyBmaXJzdCBhbmQgcmVzdG9yZSBpdCBhdCB0aGUgZW5kLgorQHJ1bl93aXRoX2xvY2FsZSgnTENfQUxMJywgJycpCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEJ1aWx0aW5MZXZlbHNUZXN0LCBCYXNpY0ZpbHRlclRlc3QsCisgICAgICAgICAgICAgICAgIEN1c3RvbUxldmVsc0FuZEZpbHRlcnNUZXN0LCBNZW1vcnlIYW5kbGVyVGVzdCwKKyAgICAgICAgICAgICAgICAgQ29uZmlnRmlsZVRlc3QsIFNvY2tldEhhbmRsZXJUZXN0LCBNZW1vcnlUZXN0LAorICAgICAgICAgICAgICAgICBFbmNvZGluZ1Rlc3QsIFdhcm5pbmdzVGVzdCwgQ29uZmlnRGljdFRlc3QsIE1hbmFnZXJUZXN0LAorICAgICAgICAgICAgICAgICBDaGlsZExvZ2dlclRlc3QsIEhhbmRsZXJUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9sb25nLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbG9uZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDg0N2U3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbG9uZy5weQpAQCAtMCwwICsxLDkxNiBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCisKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBtYXRoCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9pbnQsIHRlc3Rfc3VwcG9ydAorCisjIFVzZWQgZm9yIGxhenkgZm9ybWF0dGluZyBvZiBmYWlsdXJlIG1lc3NhZ2VzCitjbGFzcyBGcm0ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgIHNlbGYuZm9ybWF0ID0gZm9ybWF0CisgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5mb3JtYXQgJSBzZWxmLmFyZ3MKKworIyBTSElGVCBzaG91bGQgbWF0Y2ggdGhlIHZhbHVlIGluIGxvbmdpbnRyZXByLmggZm9yIGJlc3QgdGVzdGluZy4KK1NISUZUID0gc3lzLmxvbmdfaW5mby5iaXRzX3Blcl9kaWdpdAorQkFTRSA9IDIgKiogU0hJRlQKK01BU0sgPSBCQVNFIC0gMQorS0FSQVRTVUJBX0NVVE9GRiA9IDcwICAgIyBmcm9tIGxvbmdvYmplY3QuYworCisjIE1heCBudW1iZXIgb2YgYmFzZSBCQVNFIGRpZ2l0cyB0byB1c2UgaW4gdGVzdCBjYXNlcy4gIERvdWJsaW5nCisjIHRoaXMgd2lsbCBtb3JlIHRoYW4gZG91YmxlIHRoZSBydW50aW1lLgorTUFYRElHSVRTID0gMTUKKworIyBidWlsZCBzb21lIHNwZWNpYWwgdmFsdWVzCitzcGVjaWFsID0gbWFwKGxvbmcsIFswLCAxLCAyLCBCQVNFLCBCQVNFID4+IDFdKQorc3BlY2lhbC5hcHBlbmQoMHg1NTU1NTU1NTU1NTU1NTU1TCkKK3NwZWNpYWwuYXBwZW5kKDB4YWFhYWFhYWFhYWFhYWFhYUwpCisjICBzb21lIHNvbGlkIHN0cmluZ3Mgb2Ygb25lIGJpdHMKK3AyID0gNEwgICMgMCBhbmQgMSBhbHJlYWR5IGFkZGVkCitmb3IgaSBpbiByYW5nZSgyKlNISUZUKToKKyAgICBzcGVjaWFsLmFwcGVuZChwMiAtIDEpCisgICAgcDIgPSBwMiA8PCAxCitkZWwgcDIKKyMgYWRkIGNvbXBsZW1lbnRzICYgbmVnYXRpb25zCitzcGVjaWFsID0gc3BlY2lhbCArIG1hcChsYW1iZGEgeDogfngsIHNwZWNpYWwpICsgXAorICAgICAgICAgICAgICAgICAgICBtYXAobGFtYmRhIHg6IC14LCBzcGVjaWFsKQorCitMID0gWworICAgICAgICAoJzAnLCAwKSwKKyAgICAgICAgKCcxJywgMSksCisgICAgICAgICgnOScsIDkpLAorICAgICAgICAoJzEwJywgMTApLAorICAgICAgICAoJzk5JywgOTkpLAorICAgICAgICAoJzEwMCcsIDEwMCksCisgICAgICAgICgnMzE0JywgMzE0KSwKKyAgICAgICAgKCcgMzE0JywgMzE0KSwKKyAgICAgICAgKCczMTQgJywgMzE0KSwKKyAgICAgICAgKCcgIFx0XHQgIDMxNCAgXHRcdCAgJywgMzE0KSwKKyAgICAgICAgKHJlcHIoc3lzLm1heGludCksIHN5cy5tYXhpbnQpLAorICAgICAgICAoJyAgMXgnLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgKCcgIDEgICcsIDEpLAorICAgICAgICAoJyAgMVwwMiAgJywgVmFsdWVFcnJvciksCisgICAgICAgICgnJywgVmFsdWVFcnJvciksCisgICAgICAgICgnICcsIFZhbHVlRXJyb3IpLAorICAgICAgICAoJyAgXHRcdCAgJywgVmFsdWVFcnJvcikKK10KK2lmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgTCArPSBbCisgICAgICAgICh1bmljb2RlKCcwJyksIDApLAorICAgICAgICAodW5pY29kZSgnMScpLCAxKSwKKyAgICAgICAgKHVuaWNvZGUoJzknKSwgOSksCisgICAgICAgICh1bmljb2RlKCcxMCcpLCAxMCksCisgICAgICAgICh1bmljb2RlKCc5OScpLCA5OSksCisgICAgICAgICh1bmljb2RlKCcxMDAnKSwgMTAwKSwKKyAgICAgICAgKHVuaWNvZGUoJzMxNCcpLCAzMTQpLAorICAgICAgICAodW5pY29kZSgnIDMxNCcpLCAzMTQpLAorICAgICAgICAodW5pY29kZSgnXHUwNjYzXHUwNjYxXHUwNjY0ICcsJ3Jhdy11bmljb2RlLWVzY2FwZScpLCAzMTQpLAorICAgICAgICAodW5pY29kZSgnICBcdFx0ICAzMTQgIFx0XHQgICcpLCAzMTQpLAorICAgICAgICAodW5pY29kZSgnICAxeCcpLCBWYWx1ZUVycm9yKSwKKyAgICAgICAgKHVuaWNvZGUoJyAgMSAgJyksIDEpLAorICAgICAgICAodW5pY29kZSgnICAxXDAyICAnKSwgVmFsdWVFcnJvciksCisgICAgICAgICh1bmljb2RlKCcnKSwgVmFsdWVFcnJvciksCisgICAgICAgICh1bmljb2RlKCcgJyksIFZhbHVlRXJyb3IpLAorICAgICAgICAodW5pY29kZSgnICBcdFx0ICAnKSwgVmFsdWVFcnJvciksCisgICAgICAgICh1bmljaHIoMHgyMDApLCBWYWx1ZUVycm9yKSwKK10KKworY2xhc3MgTG9uZ1Rlc3QodGVzdF9pbnQuSW50TG9uZ0NvbW1vblRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBudHlwZSA9IGxvbmcKKworICAgICMgR2V0IHF1YXNpLXJhbmRvbSBsb25nIGNvbnNpc3Rpbmcgb2YgbmRpZ2l0cyBkaWdpdHMgKGluIGJhc2UgQkFTRSkuCisgICAgIyBxdWFzaSA9PSB0aGUgbW9zdC1zaWduaWZpY2FudCBkaWdpdCB3aWxsIG5vdCBiZSAwLCBhbmQgdGhlIG51bWJlcgorICAgICMgaXMgY29uc3RydWN0ZWQgdG8gY29udGFpbiBsb25nIHN0cmluZ3Mgb2YgMCBhbmQgMSBiaXRzLiAgVGhlc2UgYXJlCisgICAgIyBtb3JlIGxpa2VseSB0aGFuIHJhbmRvbSBiaXRzIHRvIHByb3Zva2UgZGlnaXQtYm91bmRhcnkgZXJyb3JzLgorICAgICMgVGhlIHNpZ24gb2YgdGhlIG51bWJlciBpcyBhbHNvIHJhbmRvbS4KKworICAgIGRlZiBnZXRyYW4oc2VsZiwgbmRpZ2l0cyk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZGlnaXRzID4gMCkKKyAgICAgICAgbmJpdHNfaGkgPSBuZGlnaXRzICogU0hJRlQKKyAgICAgICAgbmJpdHNfbG8gPSBuYml0c19oaSAtIFNISUZUICsgMQorICAgICAgICBhbnN3ZXIgPSAwTAorICAgICAgICBuYml0cyA9IDAKKyAgICAgICAgciA9IGludChyYW5kb20ucmFuZG9tKCkgKiAoU0hJRlQgKiAyKSkgfCAxICAjIGZvcmNlIDEgYml0cyB0byBzdGFydAorICAgICAgICB3aGlsZSBuYml0cyA8IG5iaXRzX2xvOgorICAgICAgICAgICAgYml0cyA9IChyID4+IDEpICsgMQorICAgICAgICAgICAgYml0cyA9IG1pbihiaXRzLCBuYml0c19oaSAtIG5iaXRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDEgPD0gYml0cyA8PSBTSElGVCkKKyAgICAgICAgICAgIG5iaXRzID0gbmJpdHMgKyBiaXRzCisgICAgICAgICAgICBhbnN3ZXIgPSBhbnN3ZXIgPDwgYml0cworICAgICAgICAgICAgaWYgciAmIDE6CisgICAgICAgICAgICAgICAgYW5zd2VyID0gYW5zd2VyIHwgKCgxIDw8IGJpdHMpIC0gMSkKKyAgICAgICAgICAgIHIgPSBpbnQocmFuZG9tLnJhbmRvbSgpICogKFNISUZUICogMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuYml0c19sbyA8PSBuYml0cyA8PSBuYml0c19oaSkKKyAgICAgICAgaWYgcmFuZG9tLnJhbmRvbSgpIDwgMC41OgorICAgICAgICAgICAgYW5zd2VyID0gLWFuc3dlcgorICAgICAgICByZXR1cm4gYW5zd2VyCisKKyAgICAjIEdldCByYW5kb20gbG9uZyBjb25zaXN0aW5nIG9mIG5kaWdpdHMgcmFuZG9tIGRpZ2l0cyAocmVsYXRpdmUgdG8gYmFzZQorICAgICMgQkFTRSkuICBUaGUgc2lnbiBiaXQgaXMgYWxzbyByYW5kb20uCisKKyAgICBkZWYgZ2V0cmFuMihuZGlnaXRzKToKKyAgICAgICAgYW5zd2VyID0gMEwKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG5kaWdpdHMpOgorICAgICAgICAgICAgYW5zd2VyID0gKGFuc3dlciA8PCBTSElGVCkgfCByYW5kb20ucmFuZGludCgwLCBNQVNLKQorICAgICAgICBpZiByYW5kb20ucmFuZG9tKCkgPCAwLjU6CisgICAgICAgICAgICBhbnN3ZXIgPSAtYW5zd2VyCisgICAgICAgIHJldHVybiBhbnN3ZXIKKworICAgIGRlZiBjaGVja19kaXZpc2lvbihzZWxmLCB4LCB5KToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHEsIHIgPSBkaXZtb2QoeCwgeSkKKyAgICAgICAgcTIsIHIyID0geC8veSwgeCV5CisgICAgICAgIHBhYiwgcGJhID0geCp5LCB5KngKKyAgICAgICAgZXEocGFiLCBwYmEsIEZybSgibXVsdGlwbGljYXRpb24gZG9lcyBub3QgY29tbXV0ZSBmb3IgJXIgYW5kICVyIiwgeCwgeSkpCisgICAgICAgIGVxKHEsIHEyLCBGcm0oImRpdm1vZCByZXR1cm5zIGRpZmZlcmVudCBxdW90aWVudCB0aGFuIC8gZm9yICVyIGFuZCAlciIsIHgsIHkpKQorICAgICAgICBlcShyLCByMiwgRnJtKCJkaXZtb2QgcmV0dXJucyBkaWZmZXJlbnQgbW9kIHRoYW4gJSUgZm9yICVyIGFuZCAlciIsIHgsIHkpKQorICAgICAgICBlcSh4LCBxKnkgKyByLCBGcm0oInggIT0gcSp5ICsgciBhZnRlciBkaXZtb2Qgb24geD0lciwgeT0lciIsIHgsIHkpKQorICAgICAgICBpZiB5ID4gMDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9IHIgPCB5LCBGcm0oImJhZCBtb2QgZnJvbSBkaXZtb2Qgb24gJXIgYW5kICVyIiwgeCwgeSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeSA8IHIgPD0gMCwgRnJtKCJiYWQgbW9kIGZyb20gZGl2bW9kIG9uICVyIGFuZCAlciIsIHgsIHkpKQorCisgICAgZGVmIHRlc3RfZGl2aXNpb24oc2VsZik6CisgICAgICAgIGRpZ2l0cyA9IHJhbmdlKDEsIE1BWERJR0lUUysxKSArIHJhbmdlKEtBUkFUU1VCQV9DVVRPRkYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtBUkFUU1VCQV9DVVRPRkYgKyAxNCkKKyAgICAgICAgZGlnaXRzLmFwcGVuZChLQVJBVFNVQkFfQ1VUT0ZGICogMykKKyAgICAgICAgZm9yIGxlbnggaW4gZGlnaXRzOgorICAgICAgICAgICAgeCA9IHNlbGYuZ2V0cmFuKGxlbngpCisgICAgICAgICAgICBmb3IgbGVueSBpbiBkaWdpdHM6CisgICAgICAgICAgICAgICAgeSA9IHNlbGYuZ2V0cmFuKGxlbnkpIG9yIDFMCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19kaXZpc2lvbih4LCB5KQorCisgICAgICAgICMgc3BlY2lmaWMgbnVtYmVycyBjaG9zZW4gdG8gZXhlcmNpc2UgY29ybmVyIGNhc2VzIG9mIHRoZQorICAgICAgICAjIGN1cnJlbnQgbG9uZyBkaXZpc2lvbiBpbXBsZW1lbnRhdGlvbgorCisgICAgICAgICMgMzAtYml0IGNhc2VzIGludm9sdmluZyBhIHF1b3RpZW50IGRpZ2l0IGVzdGltYXRlIG9mIEJBU0UrMQorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDEyMzE5NDg0MTIyOTA4NzkzOTU5NjY3MDI4ODFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNDczNDEzNjcxMzE0Mjg2OThMKQorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDgxNTQyNzc1NjQ4MTI3NTQzMDM0MjMxMjAyMTUxNTU4Nzg4M0wsCisgICAgICAgICAgICAgICAgICAgICAgIDcwNzI3MDgzNjA2OTAyNzc0NUwpCisgICAgICAgIHNlbGYuY2hlY2tfZGl2aXNpb24oNjI3OTc2MDczNjk3MDEyODIwODQ5NDQzMzYzNTYzNTk5MDQxTCwKKyAgICAgICAgICAgICAgICAgICAgICAgNjQzNTg4Nzk4NDk2MDU3MDIwTCkKKyAgICAgICAgc2VsZi5jaGVja19kaXZpc2lvbigxMTE1MTQxMzczNjUzNzUyMzAzNzEwOTMyNzU2MzI1NTc4MDY1TCwKKyAgICAgICAgICAgICAgICAgICAgICAgMTAzODU1NjMzNTE3MTQ1MzkzNzcyNjg4MjYyN0wpCisgICAgICAgICMgMzAtYml0IGNhc2VzIHRoYXQgcmVxdWlyZSB0aGUgcG9zdC1zdWJ0cmFjdGlvbiBjb3JyZWN0aW9uIHN0ZXAKKyAgICAgICAgc2VsZi5jaGVja19kaXZpc2lvbig5MjI0OTg5MDU0MDU0MzY3NTE5NDA5ODkzMjA5MzAzNjg0OTRMLAorICAgICAgICAgICAgICAgICAgICAgICA5NDk5ODU4NzA2ODY3ODYxMzU2MjY5NDMzOTZMKQorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDc2ODIzNTg1MzMyODA5MTE2NzIwNDAwOTY1MjE3NDAzMTg0NEwsCisgICAgICAgICAgICAgICAgICAgICAgIDEwOTE1NTU1NDExODAzNzE1NTQ0MjY1NDUyNjZMKQorCisgICAgICAgICMgMTUtYml0IGNhc2VzIGludm9sdmluZyBhIHF1b3RpZW50IGRpZ2l0IGVzdGltYXRlIG9mIEJBU0UrMQorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDIwMTcyMTg4OTQ3NDQzTCwgNjE1NjExMzk3TCkKKyAgICAgICAgc2VsZi5jaGVja19kaXZpc2lvbigxMDIwOTA4NTMwMjcwMTU1MDI1TCwgOTUwNzk1NzEwTCkKKyAgICAgICAgc2VsZi5jaGVja19kaXZpc2lvbigxMjg1ODk1NjU3MjMxMTI0MDhMLCA3MzYzOTM3MThMKQorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDYwOTkxOTc4MDI4NTc2MTU3NUwsIDE4NjEzMjc0NTQ2Nzg0TCkKKyAgICAgICAgIyAxNS1iaXQgY2FzZXMgdGhhdCByZXF1aXJlIHRoZSBwb3N0LXN1YnRyYWN0aW9uIGNvcnJlY3Rpb24gc3RlcAorICAgICAgICBzZWxmLmNoZWNrX2RpdmlzaW9uKDcxMDAzMTY4MTU3NjM4ODAzMkwsIDI2NzY5NDA0MzkxMzA4TCkKKyAgICAgICAgc2VsZi5jaGVja19kaXZpc2lvbigxOTMzNjIyNjE0MjY4MjIxTCwgMzAyMTI4NTMzNDg4MzZMKQorCisKKworICAgIGRlZiB0ZXN0X2thcmF0c3ViYShzZWxmKToKKyAgICAgICAgZGlnaXRzID0gcmFuZ2UoMSwgNSkgKyByYW5nZShLQVJBVFNVQkFfQ1VUT0ZGLCBLQVJBVFNVQkFfQ1VUT0ZGICsgMTApCisgICAgICAgIGRpZ2l0cy5leHRlbmQoW0tBUkFUU1VCQV9DVVRPRkYgKiAxMCwgS0FSQVRTVUJBX0NVVE9GRiAqIDEwMF0pCisKKyAgICAgICAgYml0cyA9IFtkaWdpdCAqIFNISUZUIGZvciBkaWdpdCBpbiBkaWdpdHNdCisKKyAgICAgICAgIyBUZXN0IHByb2R1Y3RzIG9mIGxvbmcgc3RyaW5ncyBvZiAxIGJpdHMgLS0gKDIqKngtMSkqKDIqKnktMSkgPT0KKyAgICAgICAgIyAyKiooeCt5KSAtIDIqKnggLSAyKip5ICsgMSwgc28gdGhlIHByb3BlciByZXN1bHQgaXMgZWFzeSB0byBjaGVjay4KKyAgICAgICAgZm9yIGFiaXRzIGluIGJpdHM6CisgICAgICAgICAgICBhID0gKDFMIDw8IGFiaXRzKSAtIDEKKyAgICAgICAgICAgIGZvciBiYml0cyBpbiBiaXRzOgorICAgICAgICAgICAgICAgIGlmIGJiaXRzIDwgYWJpdHM6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgYiA9ICgxTCA8PCBiYml0cykgLSAxCisgICAgICAgICAgICAgICAgeCA9IGEgKiBiCisgICAgICAgICAgICAgICAgeSA9ICgoMUwgPDwgKGFiaXRzICsgYmJpdHMpKSAtCisgICAgICAgICAgICAgICAgICAgICAoMUwgPDwgYWJpdHMpIC0KKyAgICAgICAgICAgICAgICAgICAgICgxTCA8PCBiYml0cykgKworICAgICAgICAgICAgICAgICAgICAgMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHksCisgICAgICAgICAgICAgICAgICAgIEZybSgiYmFkIHJlc3VsdCBmb3IgYSpiOiBhPSVyLCBiPSVyLCB4PSVyLCB5PSVyIiwgYSwgYiwgeCwgeSkpCisKKyAgICBkZWYgY2hlY2tfYml0b3BfaWRlbnRpdGllc18xKHNlbGYsIHgpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoeCAmIDAsIDAsIEZybSgieCAmIDAgIT0gMCBmb3IgeD0lciIsIHgpKQorICAgICAgICBlcSh4IHwgMCwgeCwgRnJtKCJ4IHwgMCAhPSB4IGZvciB4PSVyIiwgeCkpCisgICAgICAgIGVxKHggXiAwLCB4LCBGcm0oInggXiAwICE9IHggZm9yIHg9JXIiLCB4KSkKKyAgICAgICAgZXEoeCAmIC0xLCB4LCBGcm0oInggJiAtMSAhPSB4IGZvciB4PSVyIiwgeCkpCisgICAgICAgIGVxKHggfCAtMSwgLTEsIEZybSgieCB8IC0xICE9IC0xIGZvciB4PSVyIiwgeCkpCisgICAgICAgIGVxKHggXiAtMSwgfngsIEZybSgieCBeIC0xICE9IH54IGZvciB4PSVyIiwgeCkpCisgICAgICAgIGVxKHgsIH5+eCwgRnJtKCJ4ICE9IH5+eCBmb3IgeD0lciIsIHgpKQorICAgICAgICBlcSh4ICYgeCwgeCwgRnJtKCJ4ICYgeCAhPSB4IGZvciB4PSVyIiwgeCkpCisgICAgICAgIGVxKHggfCB4LCB4LCBGcm0oInggfCB4ICE9IHggZm9yIHg9JXIiLCB4KSkKKyAgICAgICAgZXEoeCBeIHgsIDAsIEZybSgieCBeIHggIT0gMCBmb3IgeD0lciIsIHgpKQorICAgICAgICBlcSh4ICYgfngsIDAsIEZybSgieCAmIH54ICE9IDAgZm9yIHg9JXIiLCB4KSkKKyAgICAgICAgZXEoeCB8IH54LCAtMSwgRnJtKCJ4IHwgfnggIT0gLTEgZm9yIHg9JXIiLCB4KSkKKyAgICAgICAgZXEoeCBeIH54LCAtMSwgRnJtKCJ4IF4gfnggIT0gLTEgZm9yIHg9JXIiLCB4KSkKKyAgICAgICAgZXEoLXgsIDEgKyB+eCwgRnJtKCJub3QgLXggPT0gMSArIH54IGZvciB4PSVyIiwgeCkpCisgICAgICAgIGVxKC14LCB+KHgtMSksIEZybSgibm90IC14ID09IH4oeC0xKSBmb3J4ID0lciIsIHgpKQorICAgICAgICBmb3IgbiBpbiB4cmFuZ2UoMipTSElGVCk6CisgICAgICAgICAgICBwMiA9IDJMICoqIG4KKyAgICAgICAgICAgIGVxKHggPDwgbiA+PiBuLCB4LAorICAgICAgICAgICAgICAgIEZybSgieCA8PCBuID4+IG4gIT0geCBmb3IgeD0lciwgbj0lciIsICh4LCBuKSkpCisgICAgICAgICAgICBlcSh4IC8vIHAyLCB4ID4+IG4sCisgICAgICAgICAgICAgICAgRnJtKCJ4IC8vIHAyICE9IHggPj4gbiBmb3IgeD0lciBuPSVyIHAyPSVyIiwgKHgsIG4sIHAyKSkpCisgICAgICAgICAgICBlcSh4ICogcDIsIHggPDwgbiwKKyAgICAgICAgICAgICAgICBGcm0oInggKiBwMiAhPSB4IDw8IG4gZm9yIHg9JXIgbj0lciBwMj0lciIsICh4LCBuLCBwMikpKQorICAgICAgICAgICAgZXEoeCAmIC1wMiwgeCA+PiBuIDw8IG4sCisgICAgICAgICAgICAgICAgRnJtKCJub3QgeCAmIC1wMiA9PSB4ID4+IG4gPDwgbiBmb3IgeD0lciBuPSVyIHAyPSVyIiwgKHgsIG4sIHAyKSkpCisgICAgICAgICAgICBlcSh4ICYgLXAyLCB4ICYgfihwMiAtIDEpLAorICAgICAgICAgICAgICAgIEZybSgibm90IHggJiAtcDIgPT0geCAmIH4ocDIgLSAxKSBmb3IgeD0lciBuPSVyIHAyPSVyIiwgKHgsIG4sIHAyKSkpCisKKyAgICBkZWYgY2hlY2tfYml0b3BfaWRlbnRpdGllc18yKHNlbGYsIHgsIHkpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoeCAmIHksIHkgJiB4LCBGcm0oInggJiB5ICE9IHkgJiB4IGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKKyAgICAgICAgZXEoeCB8IHksIHkgfCB4LCBGcm0oInggfCB5ICE9IHkgfCB4IGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKKyAgICAgICAgZXEoeCBeIHksIHkgXiB4LCBGcm0oInggXiB5ICE9IHkgXiB4IGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKKyAgICAgICAgZXEoeCBeIHkgXiB4LCB5LCBGcm0oInggXiB5IF4geCAhPSB5IGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKKyAgICAgICAgZXEoeCAmIHksIH4ofnggfCB+eSksIEZybSgieCAmIHkgIT0gfih+eCB8IH55KSBmb3IgeD0lciwgeT0lciIsICh4LCB5KSkpCisgICAgICAgIGVxKHggfCB5LCB+KH54ICYgfnkpLCBGcm0oInggfCB5ICE9IH4ofnggJiB+eSkgZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQorICAgICAgICBlcSh4IF4geSwgKHggfCB5KSAmIH4oeCAmIHkpLAorICAgICAgICAgICAgIEZybSgieCBeIHkgIT0gKHggfCB5KSAmIH4oeCAmIHkpIGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKKyAgICAgICAgZXEoeCBeIHksICh4ICYgfnkpIHwgKH54ICYgeSksCisgICAgICAgICAgICAgRnJtKCJ4IF4geSA9PSAoeCAmIH55KSB8ICh+eCAmIHkpIGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKKyAgICAgICAgZXEoeCBeIHksICh4IHwgeSkgJiAofnggfCB+eSksCisgICAgICAgICAgICAgRnJtKCJ4IF4geSA9PSAoeCB8IHkpICYgKH54IHwgfnkpIGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKKworICAgIGRlZiBjaGVja19iaXRvcF9pZGVudGl0aWVzXzMoc2VsZiwgeCwgeSwgeik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcSgoeCAmIHkpICYgeiwgeCAmICh5ICYgeiksCisgICAgICAgICAgICAgRnJtKCIoeCAmIHkpICYgeiAhPSB4ICYgKHkgJiB6KSBmb3IgeD0lciwgeT0lciwgej0lciIsICh4LCB5LCB6KSkpCisgICAgICAgIGVxKCh4IHwgeSkgfCB6LCB4IHwgKHkgfCB6KSwKKyAgICAgICAgICAgICBGcm0oIih4IHwgeSkgfCB6ICE9IHggfCAoeSB8IHopIGZvciB4PSVyLCB5PSVyLCB6PSVyIiwgKHgsIHksIHopKSkKKyAgICAgICAgZXEoKHggXiB5KSBeIHosIHggXiAoeSBeIHopLAorICAgICAgICAgICAgIEZybSgiKHggXiB5KSBeIHogIT0geCBeICh5IF4geikgZm9yIHg9JXIsIHk9JXIsIHo9JXIiLCAoeCwgeSwgeikpKQorICAgICAgICBlcSh4ICYgKHkgfCB6KSwgKHggJiB5KSB8ICh4ICYgeiksCisgICAgICAgICAgICAgRnJtKCJ4ICYgKHkgfCB6KSAhPSAoeCAmIHkpIHwgKHggJiB6KSBmb3IgeD0lciwgeT0lciwgej0lciIsICh4LCB5LCB6KSkpCisgICAgICAgIGVxKHggfCAoeSAmIHopLCAoeCB8IHkpICYgKHggfCB6KSwKKyAgICAgICAgICAgICBGcm0oInggfCAoeSAmIHopICE9ICh4IHwgeSkgJiAoeCB8IHopIGZvciB4PSVyLCB5PSVyLCB6PSVyIiwgKHgsIHksIHopKSkKKworICAgIGRlZiB0ZXN0X2JpdG9wX2lkZW50aXRpZXMoc2VsZik6CisgICAgICAgIGZvciB4IGluIHNwZWNpYWw6CisgICAgICAgICAgICBzZWxmLmNoZWNrX2JpdG9wX2lkZW50aXRpZXNfMSh4KQorICAgICAgICBkaWdpdHMgPSB4cmFuZ2UoMSwgTUFYRElHSVRTKzEpCisgICAgICAgIGZvciBsZW54IGluIGRpZ2l0czoKKyAgICAgICAgICAgIHggPSBzZWxmLmdldHJhbihsZW54KQorICAgICAgICAgICAgc2VsZi5jaGVja19iaXRvcF9pZGVudGl0aWVzXzEoeCkKKyAgICAgICAgICAgIGZvciBsZW55IGluIGRpZ2l0czoKKyAgICAgICAgICAgICAgICB5ID0gc2VsZi5nZXRyYW4obGVueSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2JpdG9wX2lkZW50aXRpZXNfMih4LCB5KQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfYml0b3BfaWRlbnRpdGllc18zKHgsIHksIHNlbGYuZ2V0cmFuKChsZW54ICsgbGVueSkvLzIpKQorCisgICAgZGVmIHNsb3dfZm9ybWF0KHNlbGYsIHgsIGJhc2UpOgorICAgICAgICBpZiAoeCwgYmFzZSkgPT0gKDAsIDgpOgorICAgICAgICAgICAgIyB0aGlzIGlzIGFuIG9kZGJhbGwhCisgICAgICAgICAgICByZXR1cm4gIjBMIgorICAgICAgICBkaWdpdHMgPSBbXQorICAgICAgICBzaWduID0gMAorICAgICAgICBpZiB4IDwgMDoKKyAgICAgICAgICAgIHNpZ24sIHggPSAxLCAteAorICAgICAgICB3aGlsZSB4OgorICAgICAgICAgICAgeCwgciA9IGRpdm1vZCh4LCBiYXNlKQorICAgICAgICAgICAgZGlnaXRzLmFwcGVuZChpbnQocikpCisgICAgICAgIGRpZ2l0cy5yZXZlcnNlKCkKKyAgICAgICAgZGlnaXRzID0gZGlnaXRzIG9yIFswXQorICAgICAgICByZXR1cm4gJy0nWzpzaWduXSArIFwKKyAgICAgICAgICAgICAgIHs4OiAnMCcsIDEwOiAnJywgMTY6ICcweCd9W2Jhc2VdICsgXAorICAgICAgICAgICAgICAgIiIuam9pbihtYXAobGFtYmRhIGk6ICIwMTIzNDU2Nzg5YWJjZGVmIltpXSwgZGlnaXRzKSkgKyAiTCIKKworICAgIGRlZiBjaGVja19mb3JtYXRfMShzZWxmLCB4KToKKyAgICAgICAgZm9yIGJhc2UsIG1hcHBlciBpbiAoOCwgb2N0KSwgKDEwLCByZXByKSwgKDE2LCBoZXgpOgorICAgICAgICAgICAgZ290ID0gbWFwcGVyKHgpCisgICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuc2xvd19mb3JtYXQoeCwgYmFzZSkKKyAgICAgICAgICAgIG1zZyA9IEZybSgiJXMgcmV0dXJuZWQgJXIgYnV0IGV4cGVjdGVkICVyIGZvciAlciIsCisgICAgICAgICAgICAgICAgbWFwcGVyLl9fbmFtZV9fLCBnb3QsIGV4cGVjdGVkLCB4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkLCBtc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoZ290LCAwKSwgeCwgRnJtKCdsb25nKCIlcyIsIDApICE9ICVyJywgZ290LCB4KSkKKyAgICAgICAgIyBzdHIoKSBoYXMgdG8gYmUgY2hlY2tlZCBhIGxpdHRsZSBkaWZmZXJlbnRseSBzaW5jZSB0aGVyZSdzIG5vCisgICAgICAgICMgdHJhaWxpbmcgIkwiCisgICAgICAgIGdvdCA9IHN0cih4KQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuc2xvd19mb3JtYXQoeCwgMTApWzotMV0KKyAgICAgICAgbXNnID0gRnJtKCIlcyByZXR1cm5lZCAlciBidXQgZXhwZWN0ZWQgJXIgZm9yICVyIiwKKyAgICAgICAgICAgIG1hcHBlci5fX25hbWVfXywgZ290LCBleHBlY3RlZCwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkLCBtc2cpCisKKyAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6CisgICAgICAgIGZvciB4IGluIHNwZWNpYWw6CisgICAgICAgICAgICBzZWxmLmNoZWNrX2Zvcm1hdF8xKHgpCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMCk6CisgICAgICAgICAgICBmb3IgbGVueCBpbiB4cmFuZ2UoMSwgTUFYRElHSVRTKzEpOgorICAgICAgICAgICAgICAgIHggPSBzZWxmLmdldHJhbihsZW54KQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfZm9ybWF0XzEoeCkKKworICAgIGRlZiB0ZXN0X2xvbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygzMTQpLCAzMTRMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoMy4xNCksIDNMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoMzE0TCksIDMxNEwpCisgICAgICAgICMgQ2hlY2sgdGhhdCBsb25nKCkgb2YgYmFzaWMgdHlwZXMgYWN0dWFsbHkgcmV0dXJucyBhIGxvbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGxvbmcoMzE0KSksIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShsb25nKDMuMTQpKSwgbG9uZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGxvbmcoMzE0TCkpLCBsb25nKQorICAgICAgICAjIENoZWNrIHRoYXQgY29udmVyc2lvbiBmcm9tIGZsb2F0IHRydW5jYXRlcyB0b3dhcmRzIHplcm8KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKC0zLjE0KSwgLTNMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoMy45KSwgM0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygtMy45KSwgLTNMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoMy41KSwgM0wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygtMy41KSwgLTNMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoIi0zIiksIC0zTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCIwYjEwIiwgMiksIDJMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoIjBvMTAiLCA4KSwgOEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygiMHgxMCIsIDE2KSwgMTZMKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKHVuaWNvZGUoIi0zIikpLCAtM0wpCisgICAgICAgICMgRGlmZmVyZW50IGJhc2U6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygiMTAiLDE2KSwgMTZMKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKHVuaWNvZGUoIjEwIiksMTYpLCAxNkwpCisgICAgICAgICMgQ2hlY2sgY29udmVyc2lvbnMgZnJvbSBzdHJpbmcgKHNhbWUgdGVzdCBzZXQgYXMgZm9yIGludCgpLCBhbmQgdGhlbiBzb21lKQorICAgICAgICBMTCA9IFsKKyAgICAgICAgICAgICAgICAoJzEnICsgJzAnKjIwLCAxMEwqKjIwKSwKKyAgICAgICAgICAgICAgICAoJzEnICsgJzAnKjEwMCwgMTBMKioxMDApCisgICAgICAgIF0KKyAgICAgICAgTDIgPSBMWzpdCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBMMiArPSBbCisgICAgICAgICAgICAgICAgKHVuaWNvZGUoJzEnKSArIHVuaWNvZGUoJzAnKSoyMCwgMTBMKioyMCksCisgICAgICAgICAgICAgICAgKHVuaWNvZGUoJzEnKSArIHVuaWNvZGUoJzAnKSoxMDAsIDEwTCoqMTAwKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgcywgdiBpbiBMMiArIExMOgorICAgICAgICAgICAgZm9yIHNpZ24gaW4gIiIsICIrIiwgIi0iOgorICAgICAgICAgICAgICAgIGZvciBwcmVmaXggaW4gIiIsICIgIiwgIlx0IiwgIiAgXHRcdCAgIjoKKyAgICAgICAgICAgICAgICAgICAgc3MgPSBwcmVmaXggKyBzaWduICsgcworICAgICAgICAgICAgICAgICAgICB2diA9IHYKKyAgICAgICAgICAgICAgICAgICAgaWYgc2lnbiA9PSAiLSIgYW5kIHYgaXMgbm90IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICB2diA9IC12CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhzcyksIGxvbmcodnYpKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgdjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb25nLCAnMTIzXDAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb25nLCAnNTMnLCA0MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsb25nLCAxLCAxMikKKworICAgICAgICAjIHRlc3RzIHdpdGggYmFzZSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnIDAxMjMgICcsIDApLCA4MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcgMDEyMyAgJywgMCksIDgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzAwMCcsIDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzBvMTIzJywgMCksIDgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzB4MTIzJywgMCksIDI5MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcwYjEwMCcsIDApLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJyAwTzEyMyAgICcsIDApLCA4MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcgMFgxMjMgICcsIDApLCAyOTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnIDBCMTAwICcsIDApLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzAnLCAwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcrMCcsIDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJy0wJywgMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMDAnLCAwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9uZywgJzA4JywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9uZywgJy0wMTIzOTUnLCAwKQorCisgICAgICAgICMgU0YgcGF0Y2ggIzE2Mzg4Nzk6IGVtYmVkZGVkIE5VTHMgd2VyZSBub3QgZGV0ZWN0ZWQgd2l0aAorICAgICAgICAjIGV4cGxpY2l0IGJhc2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9uZywgJzEyM1wwJywgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvbmcsICcxMjNceDAwIDI0NScsIDIwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJywgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxMDIwMDIwMjIyMDEyMjExMTEyMTEnLCAzKSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxMDAwMDAwMDAwMDAwMDAwMCcsIDQpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzMyMjQ0MDAyNDIzMTQxJywgNSksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMTU1MDEwNDAxNTUwNCcsIDYpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzIxMTMwMTQyMjM1NCcsIDcpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzQwMDAwMDAwMDAwJywgOCksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMTIwNjg2NTc0NTQnLCA5KSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCc0Mjk0OTY3Mjk2JywgMTApLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzE5MDQ0NDA1NTQnLCAxMSksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnOWJhNDYxNTk0JywgMTIpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzUzNWE3OTg4OScsIDEzKSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcyY2E1Yjc0NjQnLCAxNCksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMWEyMGRjZDgxJywgMTUpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzEwMDAwMDAwMCcsIDE2KSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCdhN2ZmZGE5MScsIDE3KSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCc3MDRoZTdnNCcsIDE4KSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCc0ZjVhZmY2NicsIDE5KSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCczNzIzYWk0ZycsIDIwKSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcyODFkNTVpNCcsIDIxKSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxZmo4YjE4NCcsIDIyKSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxNjA2azdpYycsIDIzKSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCdtYjk5NGFnJywgMjQpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJ2hlazJtZ2wnLCAyNSksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnZG5jaGJubScsIDI2KSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCdiMjhqcGRtJywgMjcpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzhwZmdpaDQnLCAyOCksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnNzZiZWlnZycsIDI5KSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCc1cW1jcHFnJywgMzApLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzRxMGp0bzQnLCAzMSksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnNDAwMDAwMCcsIDMyKSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCczYW9rcTk0JywgMzMpLCA0Mjk0OTY3Mjk2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzJxaHhqbGknLCAzNCksIDQyOTQ5NjcyOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMmJyNDVxYicsIDM1KSwgNDI5NDk2NzI5NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxejE0MXo0JywgMzYpLCA0Mjk0OTY3Mjk2KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJywgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxMDIwMDIwMjIyMDEyMjExMTEyMTInLCAzKSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxMDAwMDAwMDAwMDAwMDAwMScsIDQpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzMyMjQ0MDAyNDIzMTQyJywgNSksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMTU1MDEwNDAxNTUwNScsIDYpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzIxMTMwMTQyMjM1NScsIDcpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzQwMDAwMDAwMDAxJywgOCksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMTIwNjg2NTc0NTUnLCA5KSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCc0Mjk0OTY3Mjk3JywgMTApLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzE5MDQ0NDA1NTUnLCAxMSksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnOWJhNDYxNTk1JywgMTIpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzUzNWE3OTg4YScsIDEzKSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcyY2E1Yjc0NjUnLCAxNCksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMWEyMGRjZDgyJywgMTUpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzEwMDAwMDAwMScsIDE2KSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCdhN2ZmZGE5MicsIDE3KSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCc3MDRoZTdnNScsIDE4KSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCc0ZjVhZmY2NycsIDE5KSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCczNzIzYWk0aCcsIDIwKSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcyODFkNTVpNScsIDIxKSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxZmo4YjE4NScsIDIyKSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxNjA2azdpZCcsIDIzKSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCdtYjk5NGFoJywgMjQpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJ2hlazJtZ20nLCAyNSksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnZG5jaGJubicsIDI2KSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCdiMjhqcGRuJywgMjcpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzhwZmdpaDUnLCAyOCksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnNzZiZWlnaCcsIDI5KSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCc1cW1jcHFoJywgMzApLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzRxMGp0bzUnLCAzMSksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnNDAwMDAwMScsIDMyKSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCczYW9rcTk1JywgMzMpLCA0Mjk0OTY3Mjk3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoJzJxaHhqbGonLCAzNCksIDQyOTQ5NjcyOTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZygnMmJyNDVxYycsIDM1KSwgNDI5NDk2NzI5NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKCcxejE0MXo1JywgMzYpLCA0Mjk0OTY3Mjk3KQorCisKKyAgICBkZWYgdGVzdF9jb252ZXJzaW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgX19sb25nX18oKQorICAgICAgICBjbGFzcyBDbGFzc2ljTWlzc2luZ01ldGhvZHM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBsb25nLCBDbGFzc2ljTWlzc2luZ01ldGhvZHMoKSkKKworICAgICAgICBjbGFzcyBNaXNzaW5nTWV0aG9kcyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxvbmcsIE1pc3NpbmdNZXRob2RzKCkpCisKKyAgICAgICAgY2xhc3MgRm9vMDoKKyAgICAgICAgICAgIGRlZiBfX2xvbmdfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDJMCisKKyAgICAgICAgY2xhc3MgRm9vMShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MkwKKworICAgICAgICBjbGFzcyBGb28yKGxvbmcpOgorICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MkwKKworICAgICAgICBjbGFzcyBGb28zKGxvbmcpOgorICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgY2xhc3MgRm9vNChsb25nKToKKyAgICAgICAgICAgIGRlZiBfX2xvbmdfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICBjbGFzcyBGb281KGxvbmcpOgorICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA0Mi4KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoRm9vMCgpKSwgNDJMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoRm9vMSgpKSwgNDJMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoRm9vMigpKSwgNDJMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoRm9vMygpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKEZvbzQoKSksIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxvbmcsIEZvbzUoKSkKKworICAgICAgICBjbGFzcyBDbGFzc2ljOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgYmFzZSBpbiAob2JqZWN0LCBDbGFzc2ljKToKKyAgICAgICAgICAgIGNsYXNzIExvbmdPdmVycmlkZXNUcnVuYyhiYXNlKToKKyAgICAgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICAgICAgICAgIGRlZiBfX3RydW5jX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhMb25nT3ZlcnJpZGVzVHJ1bmMoKSksIDQyKQorCisgICAgICAgICAgICBjbGFzcyBKdXN0VHJ1bmMoYmFzZSk6CisgICAgICAgICAgICAgICAgZGVmIF9fdHJ1bmNfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoSnVzdFRydW5jKCkpLCA0MikKKworICAgICAgICAgICAgZm9yIHRydW5jX3Jlc3VsdF9iYXNlIGluIChvYmplY3QsIENsYXNzaWMpOgorICAgICAgICAgICAgICAgIGNsYXNzIEludGVncmFsKHRydW5jX3Jlc3VsdF9iYXNlKToKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICAgICAgICAgIGNsYXNzIFRydW5jUmV0dXJuc05vbkxvbmcoYmFzZSk6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX3RydW5jX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW50ZWdyYWwoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhUcnVuY1JldHVybnNOb25Mb25nKCkpLCA0MikKKworICAgICAgICAgICAgICAgIGNsYXNzIE5vbkludGVncmFsKHRydW5jX3Jlc3VsdF9iYXNlKToKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9fdHJ1bmNfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB3ZSBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24uCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uSW50ZWdyYWwoKQorCisgICAgICAgICAgICAgICAgY2xhc3MgVHJ1bmNSZXR1cm5zTm9uSW50ZWdyYWwoYmFzZSk6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX3RydW5jX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uSW50ZWdyYWwoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbG9uZyhUcnVuY1JldHVybnNOb25JbnRlZ3JhbCgpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fdHJ1bmNfXyByZXR1cm5lZCBub24tSW50ZWdyYWwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAodHlwZSBOb25JbnRlZ3JhbCkiKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIFR5cGVFcnJvciB3aXRoICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGJhc2UsIHRydW5jX3Jlc3VsdF9iYXNlKSwpKQorCisgICAgZGVmIHRlc3RfbWlzYyhzZWxmKToKKworICAgICAgICAjIGNoZWNrIHRoZSBleHRyZW1lcyBpbiBpbnQ8LT5sb25nIGNvbnZlcnNpb24KKyAgICAgICAgaHVnZXBvcyA9IHN5cy5tYXhpbnQKKyAgICAgICAgaHVnZW5lZyA9IC1odWdlcG9zIC0gMQorICAgICAgICBodWdlcG9zX2FzbG9uZyA9IGxvbmcoaHVnZXBvcykKKyAgICAgICAgaHVnZW5lZ19hc2xvbmcgPSBsb25nKGh1Z2VuZWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHVnZXBvcywgaHVnZXBvc19hc2xvbmcsICJsb25nKHN5cy5tYXhpbnQpICE9IHN5cy5tYXhpbnQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh1Z2VuZWcsIGh1Z2VuZWdfYXNsb25nLAorICAgICAgICAgICAgImxvbmcoLXN5cy5tYXhpbnQtMSkgIT0gLXN5cy5tYXhpbnQtMSIpCisKKyAgICAgICAgIyBsb25nIC0+IGludCBzaG91bGQgbm90IGZhaWwgZm9yIGh1Z2Vwb3NfYXNsb25nIG9yIGh1Z2VuZWdfYXNsb25nCisgICAgICAgIHggPSBpbnQoaHVnZXBvc19hc2xvbmcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgaHVnZXBvcywKKyAgICAgICAgICAgICAgICAgICJjb252ZXJ0aW5nIHN5cy5tYXhpbnQgdG8gbG9uZyBhbmQgYmFjayB0byBpbnQgZmFpbHMiKQorICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiaW50KGxvbmcoc3lzLm1heGludCkpIG92ZXJmbG93ZWQhIikKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoeCwgaW50KToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiaW50KGxvbmcoc3lzLm1heGludCkpIHNob3VsZCBoYXZlIHJldHVybmVkIGludCIpCisgICAgICAgIHggPSBpbnQoaHVnZW5lZ19hc2xvbmcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgaHVnZW5lZywKKyAgICAgICAgICAgICAgICAgICJjb252ZXJ0aW5nIC1zeXMubWF4aW50LTEgdG8gbG9uZyBhbmQgYmFjayB0byBpbnQgZmFpbHMiKQorICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiaW50KGxvbmcoLXN5cy5tYXhpbnQtMSkpIG92ZXJmbG93ZWQhIikKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoeCwgaW50KToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiaW50KGxvbmcoLXN5cy5tYXhpbnQtMSkpIHNob3VsZCBoYXZlIHJldHVybmVkIGludCIpCisgICAgICAgICMgYnV0IGxvbmcgLT4gaW50IHNob3VsZCBvdmVyZmxvdyBmb3IgaHVnZXBvcysxIGFuZCBodWdlbmVnLTEKKyAgICAgICAgeCA9IGh1Z2Vwb3NfYXNsb25nICsgMQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5ID0gaW50KHgpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJpbnQobG9uZyhzeXMubWF4aW50KSArIDEpIG11c3RuJ3Qgb3ZlcmZsb3ciKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeSwgbG9uZywKKyAgICAgICAgICAgICJpbnQobG9uZyhzeXMubWF4aW50KSArIDEpIHNob3VsZCBoYXZlIHJldHVybmVkIGxvbmciKQorCisgICAgICAgIHggPSBodWdlbmVnX2FzbG9uZyAtIDEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeSA9IGludCh4KQorICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiaW50KGxvbmcoLXN5cy5tYXhpbnQtMSkgLSAxKSBtdXN0bid0IG92ZXJmbG93IikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHksIGxvbmcsCisgICAgICAgICAgICAgICAiaW50KGxvbmcoLXN5cy5tYXhpbnQtMSkgLSAxKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBsb25nIikKKworICAgICAgICBjbGFzcyBsb25nMihsb25nKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgeCA9IGxvbmcyKDFMPDwxMDApCisgICAgICAgIHkgPSBpbnQoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoeSkgaXMgbG9uZywKKyAgICAgICAgICAgICJvdmVyZmxvd2luZyBpbnQgY29udmVyc2lvbiBtdXN0IHJldHVybiBsb25nIG5vdCBsb25nIHN1YnR5cGUiKQorCisgICAgICAgICMgbG9uZyAtPiBQeV9zc2l6ZV90IGNvbnZlcnNpb24KKyAgICAgICAgY2xhc3MgWChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0c2xpY2VfXyhzZWxmLCBpLCBqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSwgagorCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWCgpWy01TDo3TF0sICgtNSwgNykpCisgICAgICAgICAgICAjIHVzZSB0aGUgY2xhbXBpbmcgZWZmZWN0IHRvIHRlc3QgdGhlIHNtYWxsZXN0IGFuZCBsYXJnZXN0IGxvbmdzCisgICAgICAgICAgICAjIHRoYXQgZml0IGEgUHlfc3NpemVfdAorICAgICAgICAgICAgc2xpY2VtaW4sIHNsaWNlbWF4ID0gWCgpWy0yTCoqMTAwOjJMKioxMDBdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKVtzbGljZW1pbjpzbGljZW1heF0sIChzbGljZW1pbiwgc2xpY2VtYXgpKQorCisgICAgZGVmIHRlc3RfaXNzdWU5ODY5KHNlbGYpOgorICAgICAgICAjIElzc3VlIDk4Njk6IEludGVycHJldGVyIGNyYXNoIHdoZW4gaW5pdGlhbGl6aW5nIGFuIGluc3RhbmNlCisgICAgICAgICMgb2YgYSBsb25nIHN1YmNsYXNzIGZyb20gYW4gb2JqZWN0IHdob3NlIF9fbG9uZ19fIG1ldGhvZCByZXR1cm5zCisgICAgICAgICMgYSBwbGFpbiBpbnQuCisgICAgICAgIGNsYXNzIEJhZExvbmcob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2xvbmdfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMTAwMDAwMAorCisgICAgICAgIGNsYXNzIE15TG9uZyhsb25nKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB4ID0gTXlMb25nKEJhZExvbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGxvbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgMTAwMDAwMCkKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHRlc3RzIG9mIGF1dG8gaW50LT5sb25nIGNvbnZlcnNpb24KKworICAgIGRlZiB0ZXN0X2F1dG9fb3ZlcmZsb3coc2VsZik6CisgICAgICAgIHNwZWNpYWwgPSBbMCwgMSwgMiwgMywgc3lzLm1heGludC0xLCBzeXMubWF4aW50LCBzeXMubWF4aW50KzFdCisgICAgICAgIHNxcnQgPSBpbnQobWF0aC5zcXJ0KHN5cy5tYXhpbnQpKQorICAgICAgICBzcGVjaWFsLmV4dGVuZChbc3FydC0xLCBzcXJ0LCBzcXJ0KzFdKQorICAgICAgICBzcGVjaWFsLmV4dGVuZChbLWkgZm9yIGkgaW4gc3BlY2lhbF0pCisKKyAgICAgICAgZGVmIGNoZWNraXQoKmFyZ3MpOgorICAgICAgICAgICAgIyBIZWF2eSB1c2Ugb2YgbmVzdGVkIHNjb3BlcyBoZXJlIQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgIEZybSgiZm9yICVyIGV4cGVjdGVkICVyIGdvdCAlciIsIGFyZ3MsIGV4cGVjdGVkLCBnb3QpKQorCisgICAgICAgIGZvciB4IGluIHNwZWNpYWw6CisgICAgICAgICAgICBsb25neCA9IGxvbmcoeCkKKworICAgICAgICAgICAgZXhwZWN0ZWQgPSAtbG9uZ3gKKyAgICAgICAgICAgIGdvdCA9IC14CisgICAgICAgICAgICBjaGVja2l0KCctJywgeCkKKworICAgICAgICAgICAgZm9yIHkgaW4gc3BlY2lhbDoKKyAgICAgICAgICAgICAgICBsb25neSA9IGxvbmcoeSkKKworICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbG9uZ3ggKyBsb25neQorICAgICAgICAgICAgICAgIGdvdCA9IHggKyB5CisgICAgICAgICAgICAgICAgY2hlY2tpdCh4LCAnKycsIHkpCisKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGxvbmd4IC0gbG9uZ3kKKyAgICAgICAgICAgICAgICBnb3QgPSB4IC0geQorICAgICAgICAgICAgICAgIGNoZWNraXQoeCwgJy0nLCB5KQorCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBsb25neCAqIGxvbmd5CisgICAgICAgICAgICAgICAgZ290ID0geCAqIHkKKyAgICAgICAgICAgICAgICBjaGVja2l0KHgsICcqJywgeSkKKworICAgICAgICAgICAgICAgIGlmIHk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbG9uZ3ggLyBsb25neQorICAgICAgICAgICAgICAgICAgICAgICAgZ290ID0geCAvIHkKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tpdCh4LCAnLycsIHkpCisKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBsb25neCAvLyBsb25neQorICAgICAgICAgICAgICAgICAgICBnb3QgPSB4IC8vIHkKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tpdCh4LCAnLy8nLCB5KQorCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZGl2bW9kKGxvbmd4LCBsb25neSkKKyAgICAgICAgICAgICAgICAgICAgZ290ID0gZGl2bW9kKGxvbmd4LCBsb25neSkKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tpdCh4LCAnZGl2bW9kJywgeSkKKworICAgICAgICAgICAgICAgIGlmIGFicyh5KSA8IDUgYW5kIG5vdCAoeCA9PSAwIGFuZCB5IDwgMCk6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbG9uZ3ggKiogbG9uZ3kKKyAgICAgICAgICAgICAgICAgICAgZ290ID0geCAqKiB5CisgICAgICAgICAgICAgICAgICAgIGNoZWNraXQoeCwgJyoqJywgeSkKKworICAgICAgICAgICAgICAgICAgICBmb3IgeiBpbiBzcGVjaWFsOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgeiAhPSAwIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB5ID49IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gcG93KGxvbmd4LCBsb25neSwgbG9uZyh6KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290ID0gcG93KHgsIHksIHopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNraXQoJ3BvdycsIHgsIHksICclJywgeikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvdyxsb25neCwgbG9uZ3ksIGxvbmcoeikpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgcmVxdWlyZXMgSUVFRSA3NTQgZG91YmxlcyIpCisgICAgZGVmIHRlc3RfZmxvYXRfY29udmVyc2lvbihzZWxmKToKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBEQkxfTUFYID0gc3lzLmZsb2F0X2luZm8ubWF4CisgICAgICAgIERCTF9NQVhfRVhQID0gc3lzLmZsb2F0X2luZm8ubWF4X2V4cAorICAgICAgICBEQkxfTUFOVF9ESUcgPSBzeXMuZmxvYXRfaW5mby5tYW50X2RpZworCisgICAgICAgIGV4YWN0X3ZhbHVlcyA9IFswTCwgMUwsIDJMLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcoMioqNTMtMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZygyKio1My0yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb25nKDIqKjUzLTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcoMioqNTMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcoMioqNTMrMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZygyKio1NC00KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb25nKDIqKjU0LTIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcoMioqNTQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcoMioqNTQrNCldCisgICAgICAgIGZvciB4IGluIGV4YWN0X3ZhbHVlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhmbG9hdCh4KSksIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoZmxvYXQoLXgpKSwgLXgpCisKKyAgICAgICAgIyB0ZXN0IHJvdW5kLWhhbGYtZXZlbgorICAgICAgICBmb3IgeCwgeSBpbiBbKDEsIDApLCAoMiwgMiksICgzLCA0KSwgKDQsIDQpLCAoNSwgNCksICg2LCA2KSwgKDcsIDgpXToKKyAgICAgICAgICAgIGZvciBwIGluIHhyYW5nZSgxNSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKGZsb2F0KDJMKipwKigyKio1Myt4KSkpLCAyTCoqcCooMioqNTMreSkpCisKKyAgICAgICAgZm9yIHgsIHkgaW4gWygwLCAwKSwgKDEsIDApLCAoMiwgMCksICgzLCA0KSwgKDQsIDQpLCAoNSwgNCksICg2LCA4KSwKKyAgICAgICAgICAgICAgICAgICAgICg3LCA4KSwgKDgsIDgpLCAoOSwgOCksICgxMCwgOCksICgxMSwgMTIpLCAoMTIsIDEyKSwKKyAgICAgICAgICAgICAgICAgICAgICgxMywgMTIpLCAoMTQsIDE2KSwgKDE1LCAxNildOgorICAgICAgICAgICAgZm9yIHAgaW4geHJhbmdlKDE1KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvbmcoZmxvYXQoMkwqKnAqKDIqKjU0K3gpKSksIDJMKipwKigyKio1NCt5KSkKKworICAgICAgICAjIGJlaGF2aW91ciBuZWFyIGV4dHJlbWVzIG9mIGZsb2F0aW5nLXBvaW50IHJhbmdlCisgICAgICAgIGxvbmdfZGJsX21heCA9IGxvbmcoREJMX01BWCkKKyAgICAgICAgdG9wX3Bvd2VyID0gMioqREJMX01BWF9FWFAKKyAgICAgICAgaGFsZndheSA9IChsb25nX2RibF9tYXggKyB0b3BfcG93ZXIpLy8yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQobG9uZ19kYmxfbWF4KSwgREJMX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChsb25nX2RibF9tYXgrMSksIERCTF9NQVgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoaGFsZndheS0xKSwgREJMX01BWCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZmxvYXQsIGhhbGZ3YXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoMS1oYWxmd2F5KSwgLURCTF9NQVgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0LCAtaGFsZndheSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZmxvYXQsIHRvcF9wb3dlci0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmbG9hdCwgdG9wX3Bvd2VyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmbG9hdCwgdG9wX3Bvd2VyKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0LCAyKnRvcF9wb3dlci0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmbG9hdCwgMip0b3BfcG93ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZsb2F0LCB0b3BfcG93ZXIqdG9wX3Bvd2VyKQorCisgICAgICAgIGZvciBwIGluIHhyYW5nZSgxMDApOgorICAgICAgICAgICAgeCA9IGxvbmcoMioqcCAqICgyKio1MyArIDEpICsgMSkKKyAgICAgICAgICAgIHkgPSBsb25nKDIqKnAgKiAoMioqNTMrIDIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKGZsb2F0KHgpKSwgeSkKKworICAgICAgICAgICAgeCA9IGxvbmcoMioqcCAqICgyKio1MyArIDEpKQorICAgICAgICAgICAgeSA9IGxvbmcoMioqcCAqIDIqKjUzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb25nKGZsb2F0KHgpKSwgeSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0X292ZXJmbG93KHNlbGYpOgorICAgICAgICBmb3IgeCBpbiAtMi4wLCAtMS4wLCAwLjAsIDEuMCwgMi4wOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChsb25nKHgpKSwgeCkKKworICAgICAgICBzaHVnZSA9ICcxMjM0NScgKiAxMjAKKyAgICAgICAgaHVnZSA9IDFMIDw8IDMwMDAwCisgICAgICAgIG1odWdlID0gLWh1Z2UKKyAgICAgICAgbmFtZXNwYWNlID0geydodWdlJzogaHVnZSwgJ21odWdlJzogbWh1Z2UsICdzaHVnZSc6IHNodWdlLCAnbWF0aCc6IG1hdGh9CisgICAgICAgIGZvciB0ZXN0IGluIFsiZmxvYXQoaHVnZSkiLCAiZmxvYXQobWh1Z2UpIiwKKyAgICAgICAgICAgICAgICAgICAgICJjb21wbGV4KGh1Z2UpIiwgImNvbXBsZXgobWh1Z2UpIiwKKyAgICAgICAgICAgICAgICAgICAgICJjb21wbGV4KGh1Z2UsIDEpIiwgImNvbXBsZXgobWh1Z2UsIDEpIiwKKyAgICAgICAgICAgICAgICAgICAgICJjb21wbGV4KDEsIGh1Z2UpIiwgImNvbXBsZXgoMSwgbWh1Z2UpIiwKKyAgICAgICAgICAgICAgICAgICAgICIxLiArIGh1Z2UiLCAiaHVnZSArIDEuIiwgIjEuICsgbWh1Z2UiLCAibWh1Z2UgKyAxLiIsCisgICAgICAgICAgICAgICAgICAgICAiMS4gLSBodWdlIiwgImh1Z2UgLSAxLiIsICIxLiAtIG1odWdlIiwgIm1odWdlIC0gMS4iLAorICAgICAgICAgICAgICAgICAgICAgIjEuICogaHVnZSIsICJodWdlICogMS4iLCAiMS4gKiBtaHVnZSIsICJtaHVnZSAqIDEuIiwKKyAgICAgICAgICAgICAgICAgICAgICIxLiAvLyBodWdlIiwgImh1Z2UgLy8gMS4iLCAiMS4gLy8gbWh1Z2UiLCAibWh1Z2UgLy8gMS4iLAorICAgICAgICAgICAgICAgICAgICAgIjEuIC8gaHVnZSIsICJodWdlIC8gMS4iLCAiMS4gLyBtaHVnZSIsICJtaHVnZSAvIDEuIiwKKyAgICAgICAgICAgICAgICAgICAgICIxLiAqKiBodWdlIiwgImh1Z2UgKiogMS4iLCAiMS4gKiogbWh1Z2UiLCAibWh1Z2UgKiogMS4iLAorICAgICAgICAgICAgICAgICAgICAgIm1hdGguc2luKGh1Z2UpIiwgIm1hdGguc2luKG1odWdlKSIsCisgICAgICAgICAgICAgICAgICAgICAibWF0aC5zcXJ0KGh1Z2UpIiwgIm1hdGguc3FydChtaHVnZSkiLCAjIHNob3VsZCBkbyBiZXR0ZXIKKyAgICAgICAgICAgICAgICAgICAgICJtYXRoLmZsb29yKGh1Z2UpIiwgIm1hdGguZmxvb3IobWh1Z2UpIl06CisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGV2YWwsIHRlc3QsIG5hbWVzcGFjZSkKKworICAgICAgICAgICAgIyBYWFggUGVyaGFwcyBmbG9hdChzaHVnZSkgY2FuIHJhaXNlIE92ZXJmbG93RXJyb3Igb24gc29tZSBib3g/CisgICAgICAgICAgICAjIFRoZSBjb21wYXJpc29uIHNob3VsZCBub3QuCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZsb2F0KHNodWdlKSwgaW50KHNodWdlKSwKKyAgICAgICAgICAgICAgICAiZmxvYXQoc2h1Z2UpIHNob3VsZCBub3QgZXF1YWwgaW50KHNodWdlKSIpCisKKyAgICBkZWYgdGVzdF9sb2dzKHNlbGYpOgorICAgICAgICBMT0cxMEUgPSBtYXRoLmxvZzEwKG1hdGguZSkKKworICAgICAgICBmb3IgZXhwIGluIHJhbmdlKDEwKSArIFsxMDAsIDEwMDAsIDEwMDAwXToKKyAgICAgICAgICAgIHZhbHVlID0gMTAgKiogZXhwCisgICAgICAgICAgICBsb2cxMCA9IG1hdGgubG9nMTAodmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGxvZzEwLCBleHApCisKKyAgICAgICAgICAgICMgbG9nMTAodmFsdWUpID09IGV4cCwgc28gbG9nKHZhbHVlKSA9PSBsb2cxMCh2YWx1ZSkvbG9nMTAoZSkgPT0KKyAgICAgICAgICAgICMgZXhwL0xPRzEwRQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBleHAgLyBMT0cxMEUKKyAgICAgICAgICAgIGxvZyA9IG1hdGgubG9nKHZhbHVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChsb2csIGV4cGVjdGVkKQorCisgICAgICAgIGZvciBiYWQgaW4gLSgxTCA8PCAxMDAwMCksIC0yTCwgMEw6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmxvZywgYmFkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5sb2cxMCwgYmFkKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfY29tcGFyZXMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgICMgV2UncmUgbW9zdGx5IGNvbmNlcm5lZCB3aXRoIHRoYXQgbWl4aW5nIGZsb2F0cyBhbmQgbG9uZ3MgZG9lcyB0aGUKKyAgICAgICAgIyByaWdodCBzdHVmZiwgZXZlbiB3aGVuIGxvbmdzIGFyZSB0b28gbGFyZ2UgdG8gZml0IGluIGEgZmxvYXQuCisgICAgICAgICMgVGhlIHNhZmVzdCB3YXkgdG8gY2hlY2sgdGhlIHJlc3VsdHMgaXMgdG8gdXNlIGFuIGVudGlyZWx5IGRpZmZlcmVudAorICAgICAgICAjIG1ldGhvZCwgd2hpY2ggd2UgZG8gaGVyZSB2aWEgYSBza2VsZXRhbCByYXRpb25hbCBjbGFzcyAod2hpY2gKKyAgICAgICAgIyByZXByZXNlbnRzIGFsbCBQeXRob24gaW50cywgbG9uZ3MgYW5kIGZsb2F0cyBleGFjdGx5KS4KKyAgICAgICAgY2xhc3MgUmF0OgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAoaW50LCBsb25nKSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubiA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZCA9IDEKKyAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKyAgICAgICAgICAgICAgICAgICAgIyBDb252ZXJ0IHRvIGV4YWN0IHJhdGlvbmFsIGVxdWl2YWxlbnQuCisgICAgICAgICAgICAgICAgICAgIGYsIGUgPSBtYXRoLmZyZXhwKGFicyh2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmID09IDAgb3IgMC41IDw9IGYgPCAxLjAKKyAgICAgICAgICAgICAgICAgICAgIyB8dmFsdWV8ID0gZiAqIDIqKmUgZXhhY3RseQorCisgICAgICAgICAgICAgICAgICAgICMgU3VjayB1cCBDSFVOSyBiaXRzIGF0IGEgdGltZTsgMjggaXMgZW5vdWdoIHNvIHRoYXQgd2Ugc3VjaworICAgICAgICAgICAgICAgICAgICAjIHVwIGFsbCBiaXRzIGluIDIgaXRlcmF0aW9ucyBmb3IgYWxsIGtub3duIGJpbmFyeSBkb3VibGUtCisgICAgICAgICAgICAgICAgICAgICMgcHJlY2lzaW9uIGZvcm1hdHMsIGFuZCBzbWFsbCBlbm91Z2ggdG8gZml0IGluIGFuIGludC4KKyAgICAgICAgICAgICAgICAgICAgQ0hVTksgPSAyOAorICAgICAgICAgICAgICAgICAgICB0b3AgPSAwCisgICAgICAgICAgICAgICAgICAgICMgaW52YXJpYW50OiB8dmFsdWV8ID0gKHRvcCArIGYpICogMioqZSBleGFjdGx5CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmID0gbWF0aC5sZGV4cChmLCBDSFVOSykKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0ID0gaW50KGYpCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZGlnaXQgPj4gQ0hVTksgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gKHRvcCA8PCBDSFVOSykgfCBkaWdpdAorICAgICAgICAgICAgICAgICAgICAgICAgZiAtPSBkaWdpdAorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IDAuMCA8PSBmIDwgMS4wCisgICAgICAgICAgICAgICAgICAgICAgICBlIC09IENIVU5LCisKKyAgICAgICAgICAgICAgICAgICAgIyBOb3cgfHZhbHVlfCA9IHRvcCAqIDIqKmUgZXhhY3RseS4KKyAgICAgICAgICAgICAgICAgICAgaWYgZSA+PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHRvcCA8PCBlCisgICAgICAgICAgICAgICAgICAgICAgICBkID0gMQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHRvcAorICAgICAgICAgICAgICAgICAgICAgICAgZCA9IDEgPDwgLWUKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgbiA9IC1uCisgICAgICAgICAgICAgICAgICAgIHNlbGYubiA9IG4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kID0gZAorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZmxvYXQobikgLyBmbG9hdChkKSA9PSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY2FuJ3QgZGVhbCB3aXRoICVyIiAlIHZhbHVlKQorCisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFJhdCk6CisgICAgICAgICAgICAgICAgICAgIG90aGVyID0gUmF0KG90aGVyKQorICAgICAgICAgICAgICAgIHJldHVybiBjbXAoc2VsZi5uICogb3RoZXIuZCwgc2VsZi5kICogb3RoZXIubikKKworICAgICAgICBjYXNlcyA9IFswLCAwLjAwMSwgMC45OSwgMS4wLCAxLjUsIDFlMjAsIDFlMjAwXQorICAgICAgICAjIDIqKjQ4IGlzIGFuIGltcG9ydGFudCBib3VuZGFyeSBpbiB0aGUgaW50ZXJuYWxzLiAgMioqNTMgaXMgYW4KKyAgICAgICAgIyBpbXBvcnRhbnQgYm91bmRhcnkgZm9yIElFRUUgZG91YmxlIHByZWNpc2lvbi4KKyAgICAgICAgZm9yIHQgaW4gMi4wKio0OCwgMi4wKio1MCwgMi4wKio1MzoKKyAgICAgICAgICAgIGNhc2VzLmV4dGVuZChbdCAtIDEuMCwgdCAtIDAuMywgdCwgdCArIDAuMywgdCArIDEuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyh0LTEpLCBsb25nKHQpLCBsb25nKHQrMSldKQorICAgICAgICBjYXNlcy5leHRlbmQoWzAsIDEsIDIsIHN5cy5tYXhpbnQsIGZsb2F0KHN5cy5tYXhpbnQpXSkKKyAgICAgICAgIyAxTDw8MjAwMDAgc2hvdWxkIGV4Y2VlZCBhbGwgZG91YmxlIGZvcm1hdHMuICBsb25nKDFlMjAwKSBpcyB0bworICAgICAgICAjIGNoZWNrIHRoYXQgd2UgZ2V0IGVxdWFsaXR5IHdpdGggMWUyMDAgYWJvdmUuCisgICAgICAgIHQgPSBsb25nKDFlMjAwKQorICAgICAgICBjYXNlcy5leHRlbmQoWzBMLCAxTCwgMkwsIDFMIDw8IDIwMDAwLCB0LTEsIHQsIHQrMV0pCisgICAgICAgIGNhc2VzLmV4dGVuZChbLXggZm9yIHggaW4gY2FzZXNdKQorICAgICAgICBmb3IgeCBpbiBjYXNlczoKKyAgICAgICAgICAgIFJ4ID0gUmF0KHgpCisgICAgICAgICAgICBmb3IgeSBpbiBjYXNlczoKKyAgICAgICAgICAgICAgICBSeSA9IFJhdCh5KQorICAgICAgICAgICAgICAgIFJjbXAgPSBjbXAoUngsIFJ5KQorICAgICAgICAgICAgICAgIHh5Y21wID0gY21wKHgsIHkpCisgICAgICAgICAgICAgICAgZXEoUmNtcCwgeHljbXAsIEZybSgiJXIgJXIgJWQgJWQiLCB4LCB5LCBSY21wLCB4eWNtcCkpCisgICAgICAgICAgICAgICAgZXEoeCA9PSB5LCBSY21wID09IDAsIEZybSgiJXIgPT0gJXIgJWQiLCB4LCB5LCBSY21wKSkKKyAgICAgICAgICAgICAgICBlcSh4ICE9IHksIFJjbXAgIT0gMCwgRnJtKCIlciAhPSAlciAlZCIsIHgsIHksIFJjbXApKQorICAgICAgICAgICAgICAgIGVxKHggPCB5LCBSY21wIDwgMCwgRnJtKCIlciA8ICVyICVkIiwgeCwgeSwgUmNtcCkpCisgICAgICAgICAgICAgICAgZXEoeCA8PSB5LCBSY21wIDw9IDAsIEZybSgiJXIgPD0gJXIgJWQiLCB4LCB5LCBSY21wKSkKKyAgICAgICAgICAgICAgICBlcSh4ID4geSwgUmNtcCA+IDAsIEZybSgiJXIgPiAlciAlZCIsIHgsIHksIFJjbXApKQorICAgICAgICAgICAgICAgIGVxKHggPj0geSwgUmNtcCA+PSAwLCBGcm0oIiVyID49ICVyICVkIiwgeCwgeSwgUmNtcCkpCisKKyAgICBkZWYgdGVzdF9uYW5faW5mKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBsb25nLCBmbG9hdCgnaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGxvbmcsIGZsb2F0KCctaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvbmcsIGZsb2F0KCduYW4nKSkKKworICAgIGRlZiB0ZXN0X2JpdF9sZW5ndGgoc2VsZik6CisgICAgICAgIHRpbnkgPSAxZS0xMAorICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoLTY1MDAwLCA2NTAwMCk6CisgICAgICAgICAgICB4ID0gbG9uZyh4KQorICAgICAgICAgICAgayA9IHguYml0X2xlbmd0aCgpCisgICAgICAgICAgICAjIENoZWNrIGVxdWl2YWxlbmNlIHdpdGggUHl0aG9uIHZlcnNpb24KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgbGVuKGJpbih4KS5sc3RyaXAoJy0wYicpKSkKKyAgICAgICAgICAgICMgQmVoYXZpb3VyIGFzIHNwZWNpZmllZCBpbiB0aGUgZG9jcworICAgICAgICAgICAgaWYgeCAhPSAwOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiooay0xKSA8PSBhYnMoeCkgPCAyKiprKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIDApCisgICAgICAgICAgICAjIEFsdGVybmF0aXZlIGRlZmluaXRpb246IHguYml0X2xlbmd0aCgpID09IDEgKyBmbG9vcihsb2dfMih4KSkKKyAgICAgICAgICAgIGlmIHggIT0gMDoKKyAgICAgICAgICAgICAgICAjIFdoZW4geCBpcyBhbiBleGFjdCBwb3dlciBvZiAyLCBudW1lcmljIGVycm9ycyBjYW4KKyAgICAgICAgICAgICAgICAjIGNhdXNlIGZsb29yKGxvZyh4KS9sb2coMikpIHRvIGJlIG9uZSB0b28gc21hbGw7IGZvcgorICAgICAgICAgICAgICAgICMgc21hbGwgeCB0aGlzIGNhbiBiZSBmaXhlZCBieSBhZGRpbmcgYSBzbWFsbCBxdWFudGl0eQorICAgICAgICAgICAgICAgICMgdG8gdGhlIHF1b3RpZW50IGJlZm9yZSB0YWtpbmcgdGhlIGZsb29yLgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgMSArIG1hdGguZmxvb3IoCisgICAgICAgICAgICAgICAgICAgICAgICBtYXRoLmxvZyhhYnMoeCkpL21hdGgubG9nKDIpICsgdGlueSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMEwpLmJpdF9sZW5ndGgoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMUwpLmJpdF9sZW5ndGgoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTFMKS5iaXRfbGVuZ3RoKCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDJMKS5iaXRfbGVuZ3RoKCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0yTCkuYml0X2xlbmd0aCgpLCAyKQorICAgICAgICBmb3IgaSBpbiBbMiwgMywgMTUsIDE2LCAxNywgMzEsIDMyLCAzMywgNjMsIDY0LCAyMzRdOgorICAgICAgICAgICAgYSA9IDJMKippCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLTEpLmJpdF9sZW5ndGgoKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEtYSkuYml0X2xlbmd0aCgpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSkuYml0X2xlbmd0aCgpLCBpKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtYSkuYml0X2xlbmd0aCgpLCBpKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhKzEpLmJpdF9sZW5ndGgoKSwgaSsxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLWEtMSkuYml0X2xlbmd0aCgpLCBpKzEpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTG9uZ1Rlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2xvbmdfZnV0dXJlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbG9uZ19mdXR1cmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZjM2JmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2xvbmdfZnV0dXJlLnB5CkBAIC0wLDAgKzEsMjIxIEBACitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCisjIFdoZW4gdHJ1ZSBkaXZpc2lvbiBpcyB0aGUgZGVmYXVsdCwgZ2V0IHJpZCBvZiB0aGlzIGFuZCBhZGQgaXQgdG8KKyMgdGVzdF9sb25nLnB5IGluc3RlYWQuICBJbiB0aGUgbWVhbnRpbWUsIGl0J3MgdG9vIG9ic2N1cmUgdG8gdHJ5IHRvCisjIHRyaWNrIGp1c3QgcGFydCBvZiB0ZXN0X2xvbmcgaW50byB1c2luZyBmdXR1cmUgZGl2aXNpb24uCisKK2ltcG9ydCBzeXMKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBtYXRoCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCisjIGRlY29yYXRvciBmb3Igc2tpcHBpbmcgdGVzdHMgb24gbm9uLUlFRUUgNzU0IHBsYXRmb3JtcworcmVxdWlyZXNfSUVFRV83NTQgPSB1bml0dGVzdC5za2lwVW5sZXNzKAorICAgIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKworREJMX01BWCA9IHN5cy5mbG9hdF9pbmZvLm1heAorREJMX01BWF9FWFAgPSBzeXMuZmxvYXRfaW5mby5tYXhfZXhwCitEQkxfTUlOX0VYUCA9IHN5cy5mbG9hdF9pbmZvLm1pbl9leHAKK0RCTF9NQU5UX0RJRyA9IHN5cy5mbG9hdF9pbmZvLm1hbnRfZGlnCitEQkxfTUlOX09WRVJGTE9XID0gMioqREJMX01BWF9FWFAgLSAyKiooREJMX01BWF9FWFAgLSBEQkxfTUFOVF9ESUcgLSAxKQorCisjIHB1cmUgUHl0aG9uIHZlcnNpb24gb2YgY29ycmVjdGx5LXJvdW5kZWQgdHJ1ZSBkaXZpc2lvbgorZGVmIHRydWVkaXYoYSwgYik6CisgICAgIiIiQ29ycmVjdGx5LXJvdW5kZWQgdHJ1ZSBkaXZpc2lvbiBmb3IgaW50ZWdlcnMuIiIiCisgICAgbmVnYXRpdmUgPSBhXmIgPCAwCisgICAgYSwgYiA9IGFicyhhKSwgYWJzKGIpCisKKyAgICAjIGV4Y2VwdGlvbnM6ICBkaXZpc2lvbiBieSB6ZXJvLCBvdmVyZmxvdworICAgIGlmIG5vdCBiOgorICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcigiZGl2aXNpb24gYnkgemVybyIpCisgICAgaWYgYSA+PSBEQkxfTUlOX09WRVJGTE9XICogYjoKKyAgICAgICAgcmFpc2UgT3ZlcmZsb3dFcnJvcigiaW50L2ludCB0b28gbGFyZ2UgdG8gcmVwcmVzZW50IGFzIGEgZmxvYXQiKQorCisgICAjIGZpbmQgaW50ZWdlciBkIHNhdGlzZnlpbmcgMioqKGQgLSAxKSA8PSBhL2IgPCAyKipkCisgICAgZCA9IGEuYml0X2xlbmd0aCgpIC0gYi5iaXRfbGVuZ3RoKCkKKyAgICBpZiBkID49IDAgYW5kIGEgPj0gMioqZCAqIGIgb3IgZCA8IDAgYW5kIGEgKiAyKiotZCA+PSBiOgorICAgICAgICBkICs9IDEKKworICAgICMgY29tcHV0ZSAyKiotZXhwICogYSAvIGIgZm9yIHN1aXRhYmxlIGV4cAorICAgIGV4cCA9IG1heChkLCBEQkxfTUlOX0VYUCkgLSBEQkxfTUFOVF9ESUcKKyAgICBhLCBiID0gYSA8PCBtYXgoLWV4cCwgMCksIGIgPDwgbWF4KGV4cCwgMCkKKyAgICBxLCByID0gZGl2bW9kKGEsIGIpCisKKyAgICAjIHJvdW5kLWhhbGYtdG8tZXZlbjogZnJhY3Rpb25hbCBwYXJ0IGlzIHIvYiwgd2hpY2ggaXMgPiAwLjUgaWZmCisgICAgIyAyKnIgPiBiLCBhbmQgPT0gMC41IGlmZiAyKnIgPT0gYi4KKyAgICBpZiAyKnIgPiBiIG9yIDIqciA9PSBiIGFuZCBxICUgMiA9PSAxOgorICAgICAgICBxICs9IDEKKworICAgIHJlc3VsdCA9IG1hdGgubGRleHAoZmxvYXQocSksIGV4cCkKKyAgICByZXR1cm4gLXJlc3VsdCBpZiBuZWdhdGl2ZSBlbHNlIHJlc3VsdAorCitjbGFzcyBUcnVlRGl2aXNpb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIGh1Z2UgPSAxTCA8PCA0MDAwMAorICAgICAgICBtaHVnZSA9IC1odWdlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHVnZSAvIGh1Z2UsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaHVnZSAvIG1odWdlLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHVnZSAvIG1odWdlLCAtMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1odWdlIC8gaHVnZSwgLTEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxIC8gaHVnZSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDFMIC8gaHVnZSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgLyBtaHVnZSwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDFMIC8gbWh1Z2UsIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNjY2ICogaHVnZSArIChodWdlID4+IDEpKSAvIGh1Z2UsIDY2Ni41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg2NjYgKiBtaHVnZSArIChtaHVnZSA+PiAxKSkgLyBtaHVnZSwgNjY2LjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDY2NiAqIGh1Z2UgKyAoaHVnZSA+PiAxKSkgLyBtaHVnZSwgLTY2Ni41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg2NjYgKiBtaHVnZSArIChtaHVnZSA+PiAxKSkgLyBodWdlLCAtNjY2LjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHVnZSAvIChodWdlIDw8IDEpLCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwMDAwMDAgKiBodWdlKSAvIGh1Z2UsIDEwMDAwMDApCisKKyAgICAgICAgbmFtZXNwYWNlID0geydodWdlJzogaHVnZSwgJ21odWdlJzogbWh1Z2V9CisKKyAgICAgICAgZm9yIG92ZXJmbG93IGluIFsiZmxvYXQoaHVnZSkiLCAiZmxvYXQobWh1Z2UpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaHVnZSAvIDEiLCAiaHVnZSAvIDJMIiwgImh1Z2UgLyAtMSIsICJodWdlIC8gLTJMIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAibWh1Z2UgLyAxMDAiLCAibWh1Z2UgLyAxMDBMIl06CisgICAgICAgICAgICAjIElmIHRoZSAiZXZhbCIgZG9lcyBub3QgaGFwcGVuIGluIHRoaXMgbW9kdWxlLAorICAgICAgICAgICAgIyB0cnVlIGRpdmlzaW9uIGlzIG5vdCBlbmFibGVkCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IpOgorICAgICAgICAgICAgICAgIGV2YWwob3ZlcmZsb3csIG5hbWVzcGFjZSkKKworICAgICAgICBmb3IgdW5kZXJmbG93IGluIFsiMSAvIGh1Z2UiLCAiMkwgLyBodWdlIiwgIi0xIC8gaHVnZSIsICItMkwgLyBodWdlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTAwIC8gbWh1Z2UiLCAiMTAwTCAvIG1odWdlIl06CisgICAgICAgICAgICByZXN1bHQgPSBldmFsKHVuZGVyZmxvdywgbmFtZXNwYWNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDAuMCwgJ2V4cGVjdGVkIHVuZGVyZmxvdyB0byAwICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zyb20geyFyfScuZm9ybWF0KHVuZGVyZmxvdykpCisKKyAgICAgICAgZm9yIHplcm8gaW4gWyJodWdlIC8gMCIsICJodWdlIC8gMEwiLCAibWh1Z2UgLyAwIiwgIm1odWdlIC8gMEwiXToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgICAgIGV2YWwoemVybywgbmFtZXNwYWNlKQorCisgICAgZGVmIGNoZWNrX3RydWVkaXYoc2VsZiwgYSwgYiwgc2tpcF9zbWFsbD1UcnVlKToKKyAgICAgICAgIiIiVmVyaWZ5IHRoYXQgdGhlIHJlc3VsdCBvZiBhL2IgaXMgY29ycmVjdGx5IHJvdW5kZWQsIGJ5CisgICAgICAgIGNvbXBhcmluZyBpdCB3aXRoIGEgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgY29ycmVjdGx5CisgICAgICAgIHJvdW5kZWQgZGl2aXNpb24uICBiIHNob3VsZCBiZSBub256ZXJvLiIiIgorCisgICAgICAgIGEsIGIgPSBsb25nKGEpLCBsb25nKGIpCisKKyAgICAgICAgIyBza2lwIGNoZWNrIGZvciBzbWFsbCBhIGFuZCBiOiBpbiB0aGlzIGNhc2UsIHRoZSBjdXJyZW50CisgICAgICAgICMgaW1wbGVtZW50YXRpb24gY29udmVydHMgdGhlIGFyZ3VtZW50cyB0byBmbG9hdCBkaXJlY3RseSBhbmQKKyAgICAgICAgIyB0aGVuIGFwcGxpZXMgYSBmbG9hdCBkaXZpc2lvbi4gIFRoaXMgY2FuIGdpdmUgZG91Ymx5LXJvdW5kZWQKKyAgICAgICAgIyByZXN1bHRzIG9uIHg4Ny11c2luZyBtYWNoaW5lcyAocGFydGljdWxhcmx5IDMyLWJpdCBMaW51eCkuCisgICAgICAgIGlmIHNraXBfc21hbGwgYW5kIG1heChhYnMoYSksIGFicyhiKSkgPCAyKipEQkxfTUFOVF9ESUc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHVzZSByZXByIHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gLTAuMCBhbmQgMC4wCisgICAgICAgICAgICBleHBlY3RlZCA9IHJlcHIodHJ1ZWRpdihhLCBiKSkKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBleHBlY3RlZCA9ICdvdmVyZmxvdycKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSAnemVyb2RpdmlzaW9uJworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdvdCA9IHJlcHIoYSAvIGIpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgZ290ID0gJ292ZXJmbG93JworICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBnb3QgPSAnemVyb2RpdmlzaW9uJworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCwgIkluY29ycmVjdGx5IHJvdW5kZWQgZGl2aXNpb24ge30ve306ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQge30sIGdvdCB7fSIuZm9ybWF0KGEsIGIsIGV4cGVjdGVkLCBnb3QpKQorCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfY29ycmVjdGx5X3JvdW5kZWRfdHJ1ZV9kaXZpc2lvbihzZWxmKToKKyAgICAgICAgIyBtb3JlIHN0cmluZ2VudCB0ZXN0cyB0aGFuIHRob3NlIGFib3ZlLCBjaGVja2luZyB0aGF0IHRoZQorICAgICAgICAjIHJlc3VsdCBvZiB0cnVlIGRpdmlzaW9uIG9mIGludHMgaXMgYWx3YXlzIGNvcnJlY3RseSByb3VuZGVkLgorICAgICAgICAjIFRoaXMgdGVzdCBzaG91bGQgcHJvYmFibHkgYmUgY29uc2lkZXJlZCBDUHl0aG9uLXNwZWNpZmljLgorCisgICAgICAgICMgRXhlcmNpc2UgYWxsIHRoZSBjb2RlIHBhdGhzIG5vdCBpbnZvbHZpbmcgR2Itc2l6ZWQgaW50cy4KKyAgICAgICAgIyAuLi4gZGl2aXNpb25zIGludm9sdmluZyB6ZXJvCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigxMjMsIDApCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigtNDU2LCAwKQorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMCwgMykKKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDAsIC0zKQorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMCwgMCkKKyAgICAgICAgIyAuLi4gb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGJ5IGxhcmdlIG1hcmdpbgorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoNjcxICogMTIzNDUgKiAyKipEQkxfTUFYX0VYUCwgMTIzNDUpCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigxMjM0NSwgMzQ1Njc4ICogMioqKERCTF9NQU5UX0RJRyAtIERCTF9NSU5fRVhQKSkKKyAgICAgICAgIyAuLi4gYSBtdWNoIGxhcmdlciBvciBzbWFsbGVyIHRoYW4gYgorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMTIzNDUqMioqMTAwLCA5ODc2NSkKKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDEyMzQ1KjIqKjMwLCA5ODc2NSo3Kio4MSkKKyAgICAgICAgIyAuLi4gYSAvIGIgbmVhciBhIGJvdW5kYXJ5OiBvbmUgb2YgMSwgMioqREJMX01BTlRfRElHLCAyKipEQkxfTUlOX0VYUCwKKyAgICAgICAgIyAgICAgICAgICAgICAgICAgMioqREJMX01BWF9FWFAsIDIqKihEQkxfTUlOX0VYUC1EQkxfTUFOVF9ESUcpCisgICAgICAgIGJhc2VzID0gKDAsIERCTF9NQU5UX0RJRywgREJMX01JTl9FWFAsCisgICAgICAgICAgICAgICAgIERCTF9NQVhfRVhQLCBEQkxfTUlOX0VYUCAtIERCTF9NQU5UX0RJRykKKyAgICAgICAgZm9yIGJhc2UgaW4gYmFzZXM6CisgICAgICAgICAgICBmb3IgZXhwIGluIHJhbmdlKGJhc2UgLSAxNSwgYmFzZSArIDE1KToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoNzUzMTIqMioqbWF4KGV4cCwgMCksIDY5MTg3KjIqKm1heCgtZXhwLCAwKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoNjkxODcqMioqbWF4KGV4cCwgMCksIDc1MzEyKjIqKm1heCgtZXhwLCAwKSkKKworICAgICAgICAjIG92ZXJmbG93IGNvcm5lciBjYXNlCisgICAgICAgIGZvciBtIGluIFsxLCAyLCA3LCAxNywgMTIzNDUsIDcqKjEwMCwKKyAgICAgICAgICAgICAgICAgIC0xLCAtMiwgLTUsIC0yMywgLTY3ODkxLCAtNDEqKjUwXToKKyAgICAgICAgICAgIGZvciBuIGluIHJhbmdlKC0xMCwgMTApOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdihtKkRCTF9NSU5fT1ZFUkZMT1cgKyBuLCBtKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdihtKkRCTF9NSU5fT1ZFUkZMT1cgKyBuLCAtbSkKKworICAgICAgICAjIGNoZWNrIGRldGVjdGlvbiBvZiBpbmV4YWN0bmVzcyBpbiBzaGlmdGluZyBzdGFnZQorICAgICAgICBmb3IgbiBpbiByYW5nZSgyNTApOgorICAgICAgICAgICAgIyAoMioqREJMX01BTlRfRElHKzEpLygyKipEQkxfTUFOVF9ESUcpIGxpZXMgaGFsZndheQorICAgICAgICAgICAgIyBiZXR3ZWVuIHR3byByZXByZXNlbnRhYmxlIGZsb2F0cywgYW5kIHdvdWxkIHVzdWFsbHkgYmUKKyAgICAgICAgICAgICMgcm91bmRlZCBkb3duIHVuZGVyIHJvdW5kLWhhbGYtdG8tZXZlbi4gIFRoZSB0aW5pZXN0IG9mCisgICAgICAgICAgICAjIGFkZGl0aW9ucyB0byB0aGUgbnVtZXJhdG9yIHNob3VsZCBjYXVzZSBpdCB0byBiZSByb3VuZGVkCisgICAgICAgICAgICAjIHVwIGluc3RlYWQuCisgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoKDIqKkRCTF9NQU5UX0RJRyArIDEpKjEyMzQ1KjIqKjIwMCArIDIqKm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAyKipEQkxfTUFOVF9ESUcqMTIzNDUpCisKKyAgICAgICAgIyAxLzI3MzEgaXMgb25lIG9mIHRoZSBzbWFsbGVzdCBkaXZpc2lvbiBjYXNlcyB0aGF0J3Mgc3ViamVjdAorICAgICAgICAjIHRvIGRvdWJsZSByb3VuZGluZyBvbiBJRUVFIDc1NCBtYWNoaW5lcyB3b3JraW5nIGludGVybmFsbHkgd2l0aAorICAgICAgICAjIDY0LWJpdCBwcmVjaXNpb24uICBPbiBzdWNoIG1hY2hpbmVzLCB0aGUgbmV4dCBjaGVjayB3b3VsZCBmYWlsLAorICAgICAgICAjIHdlcmUgaXQgbm90IGV4cGxpY2l0bHkgc2tpcHBlZCBpbiBjaGVja190cnVlZGl2LgorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMSwgMjczMSkKKworICAgICAgICAjIGEgcGFydGljdWxhcmx5IGJhZCBjYXNlIGZvciB0aGUgb2xkIGFsZ29yaXRobTogIGdpdmVzIGFuCisgICAgICAgICMgZXJyb3Igb2YgY2xvc2UgdG8gMy41IHVscHMuCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigyOTUxNDc5MzEzNzI1ODIyNzMwMjMsIDI5NTE0NzkzMjI2NTExNjMwMzM2MCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMTAqKihpKzEpLCAxMCoqaSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigxMCoqaSwgMTAqKihpKzEpKQorCisgICAgICAgICMgdGVzdCByb3VuZC1oYWxmLXRvLWV2ZW4gYmVoYXZpb3VyLCBub3JtYWwgcmVzdWx0CisgICAgICAgIGZvciBtIGluIFsxLCAyLCA0LCA3LCA4LCAxNiwgMTcsIDMyLCAxMjM0NSwgNyoqMTAwLAorICAgICAgICAgICAgICAgICAgLTEsIC0yLCAtNSwgLTIzLCAtNjc4OTEsIC00MSoqNTBdOgorICAgICAgICAgICAgZm9yIG4gaW4gcmFuZ2UoLTEwLCAxMCk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDIqKkRCTF9NQU5UX0RJRyptICsgbiwgbSkKKworICAgICAgICAjIHRlc3Qgcm91bmQtaGFsZi10by1ldmVuLCBzdWJub3JtYWwgcmVzdWx0CisgICAgICAgIGZvciBuIGluIHJhbmdlKC0yMCwgMjApOgorICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KG4sIDIqKjEwNzYpCisKKyAgICAgICAgIyBsYXJnZWlzaCByYW5kb20gZGl2aXNpb25zOiBhL2Igd2hlcmUgfGF8IDw9IHxifCA8PQorICAgICAgICAjIDIqfGF8OyB8YW5zfCBpcyBiZXR3ZWVuIDAuNSBhbmQgMS4wLCBzbyBlcnJvciBzaG91bGQKKyAgICAgICAgIyBhbHdheXMgYmUgYm91bmRlZCBieSAyKiotNTQgd2l0aCBlcXVhbGl0eSBwb3NzaWJsZSBvbmx5CisgICAgICAgICMgaWYgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiBxPWFucyoyKio1MyBpcyB6ZXJvLgorICAgICAgICBmb3IgTSBpbiBbMTAqKjEwLCAxMCoqMTAwLCAxMCoqMTAwMF06CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDAwKToKKyAgICAgICAgICAgICAgICBhID0gcmFuZG9tLnJhbmRyYW5nZSgxLCBNKQorICAgICAgICAgICAgICAgIGIgPSByYW5kb20ucmFuZHJhbmdlKGEsIDIqYSsxKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdihhLCBiKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigtYSwgYikKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoYSwgLWIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KC1hLCAtYikKKworICAgICAgICAjIGFuZCBzb21lIChnZW51aW5lbHkpIHJhbmRvbSB0ZXN0cworICAgICAgICBmb3IgXyBpbiByYW5nZSgxMDAwMCk6CisgICAgICAgICAgICBhX2JpdHMgPSByYW5kb20ucmFuZHJhbmdlKDEwMDApCisgICAgICAgICAgICBiX2JpdHMgPSByYW5kb20ucmFuZHJhbmdlKDEsIDEwMDApCisgICAgICAgICAgICB4ID0gcmFuZG9tLnJhbmRyYW5nZSgyKiphX2JpdHMpCisgICAgICAgICAgICB5ID0gcmFuZG9tLnJhbmRyYW5nZSgxLCAyKipiX2JpdHMpCisgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdih4LCAteSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigteCwgeSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigteCwgLXkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChUcnVlRGl2aXNpb25UZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbG9uZ2V4cC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2xvbmdleHAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQyMjJhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X2xvbmdleHAucHkKQEAgLTAsMCArMSwxNCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBMb25nRXhwVGV4dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbG9uZ2V4cChzZWxmKToKKyAgICAgICAgUkVQUyA9IDY1NTgwCisgICAgICAgIGwgPSBldmFsKCJbIiArICIyLCIgKiBSRVBTICsgIl0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgUkVQUykKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTG9uZ0V4cFRleHQpCisKK2lmIF9fbmFtZV9fPT0iX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tYWNvcy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21hY29zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZjUxMDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tYWNvcy5weQpAQCAtMCwwICsxLDk4IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCisKK01hY09TID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ01hY09TJykKKworVEVTVEZOMiA9IHRlc3Rfc3VwcG9ydC5URVNURk4gKyAnMicKKworY2xhc3MgVGVzdE1hY09TKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0R2V0Q3JlYXRvckFuZFR5cGUoc2VsZik6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygnL0RldmVsb3Blci9Ub29scy9TZXRGaWxlJyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3cnKQorICAgICAgICAgICAgZnAud3JpdGUoJ1xuJykKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKworICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKAorICAgICAgICAgICAgICAgICAgICBbJy9EZXZlbG9wZXIvVG9vbHMvU2V0RmlsZScsICctdCcsICdBQkNEJywgJy1jJywgJ0VGR0gnLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTl0pCisKKyAgICAgICAgICAgIGNyLCB0cCA9IE1hY09TLkdldENyZWF0b3JBbmRUeXBlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRwLCAnQUJDRCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyLCAnRUZHSCcpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RTZXRDcmVhdG9yQW5kVHlwZShzZWxmKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCcvRGV2ZWxvcGVyL1Rvb2xzL0dldEZpbGVJbmZvJyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3cnKQorICAgICAgICAgICAgZnAud3JpdGUoJ1xuJykKKyAgICAgICAgICAgIGZwLmNsb3NlKCkKKworICAgICAgICAgICAgTWFjT1MuU2V0Q3JlYXRvckFuZFR5cGUodGVzdF9zdXBwb3J0LlRFU1RGTiwKKyAgICAgICAgICAgICAgICAgICAgJ0FCQ0QnLCAnRUZHSCcpCisKKyAgICAgICAgICAgIGNyLCB0cCA9IE1hY09TLkdldENyZWF0b3JBbmRUeXBlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyLCAnQUJDRCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRwLCAnRUZHSCcpCisKKyAgICAgICAgICAgIGRhdGEgPSBzdWJwcm9jZXNzLlBvcGVuKFsiL0RldmVsb3Blci9Ub29scy9HZXRGaWxlSW5mbyIsIHRlc3Rfc3VwcG9ydC5URVNURk5dLAorICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisKKyAgICAgICAgICAgIHRwID0gTm9uZQorICAgICAgICAgICAgY3IgPSBOb25lCisgICAgICAgICAgICBmb3IgIGxuIGluIGRhdGEuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgIGlmIGxuLnN0YXJ0c3dpdGgoJ3R5cGU6Jyk6CisgICAgICAgICAgICAgICAgICAgIHRwID0gbG4uc3BsaXQoKVstMV1bMTotMV0KKyAgICAgICAgICAgICAgICBpZiBsbi5zdGFydHN3aXRoKCdjcmVhdG9yOicpOgorICAgICAgICAgICAgICAgICAgICBjciA9IGxuLnNwbGl0KClbLTFdWzE6LTFdCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3IsICdBQkNEJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHAsICdFRkdIJykKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKworICAgIGRlZiB0ZXN0T3BlblJGKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3cnKQorICAgICAgICAgICAgZnAud3JpdGUoJ2hlbGxvIHdvcmxkXG4nKQorICAgICAgICAgICAgZnAuY2xvc2UoKQorCisgICAgICAgICAgICByZnAgPSBNYWNPUy5vcGVucmYodGVzdF9zdXBwb3J0LlRFU1RGTiwgJyp3YicpCisgICAgICAgICAgICByZnAud3JpdGUoJ2dvb2RieWUgd29ybGRcbicpCisgICAgICAgICAgICByZnAuY2xvc2UoKQorCisKKyAgICAgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAncicpCisgICAgICAgICAgICBkYXRhID0gZnAucmVhZCgpCisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICdoZWxsbyB3b3JsZFxuJykKKworICAgICAgICAgICAgcmZwID0gTWFjT1Mub3BlbnJmKHRlc3Rfc3VwcG9ydC5URVNURk4sICcqcmInKQorICAgICAgICAgICAgZGF0YSA9IHJmcC5yZWFkKDEwMCkKKyAgICAgICAgICAgIGRhdGEyID0gcmZwLnJlYWQoMTAwKQorICAgICAgICAgICAgcmZwLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgJ2dvb2RieWUgd29ybGRcbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEyLCAnJykKKworCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdE1hY09TKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21hY29zdG9vbHMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tYWNvc3Rvb2xzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMTU5ODIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tYWNvc3Rvb2xzLnB5CkBAIC0wLDAgKzEsODggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitNYWNPUyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdNYWNPUycpCisjVGhlIGZvbGxvd2luZyBtb2R1bGVzIHNob3VsZCBleGlzdCBpZiBNYWNPUyBleGlzdHMuCitpbXBvcnQgQ2FyYm9uLkZpbGUKK2ltcG9ydCBtYWNvc3Rvb2xzCisKK1RFU1RGTjIgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgJzInCisKK2NsYXNzIFRlc3RNYWNvc3Rvb2xzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZnAgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3JykKKyAgICAgICAgZnAud3JpdGUoJ2hlbGxvIHdvcmxkXG4nKQorICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHJmcCA9IE1hY09TLm9wZW5yZih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAnKndiJykKKyAgICAgICAgcmZwLndyaXRlKCdnb29kYnllIHdvcmxkXG4nKQorICAgICAgICByZnAuY2xvc2UoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoVEVTVEZOMikKKworICAgIGRlZiBjb21wYXJlRGF0YShzZWxmKToKKyAgICAgICAgZnAgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICdyJykKKyAgICAgICAgZGF0YTEgPSBmcC5yZWFkKCkKKyAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICBmcCA9IG9wZW4oVEVTVEZOMiwgJ3InKQorICAgICAgICBkYXRhMiA9IGZwLnJlYWQoKQorICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIGlmIGRhdGExICE9IGRhdGEyOgorICAgICAgICAgICAgcmV0dXJuICdEYXRhIGZvcmtzIGRpZmZlcicKKyAgICAgICAgcmZwID0gTWFjT1Mub3BlbnJmKHRlc3Rfc3VwcG9ydC5URVNURk4sICcqcmInKQorICAgICAgICBkYXRhMSA9IHJmcC5yZWFkKDEwMDApCisgICAgICAgIHJmcC5jbG9zZSgpCisgICAgICAgIHJmcCA9IE1hY09TLm9wZW5yZihURVNURk4yLCAnKnJiJykKKyAgICAgICAgZGF0YTIgPSByZnAucmVhZCgxMDAwKQorICAgICAgICByZnAuY2xvc2UoKQorICAgICAgICBpZiBkYXRhMSAhPSBkYXRhMjoKKyAgICAgICAgICAgIHJldHVybiAnUmVzb3VyY2UgZm9ya3MgZGlmZmVyJworICAgICAgICByZXR1cm4gJycKKworICAgIGRlZiB0ZXN0X3RvdWNoZWQoc2VsZik6CisgICAgICAgICMgVGhpcyByZWFsbHkgb25seSB0ZXN0cyB0aGF0IG5vdGhpbmcgdW5mb3Jlc2VlbiBoYXBwZW5zLgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJ21hY29zdG9vbHMudG91Y2hlZConLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSwgcXVpZXQ9VHJ1ZSk6CisgICAgICAgICAgICBtYWNvc3Rvb2xzLnRvdWNoZWQodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGlmIHN5cy5tYXhpbnQgPCAyKiozMjoKKyAgICAgICAgZGVmIHRlc3RfY29weShzZWxmKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoVEVTVEZOMikKKyAgICAgICAgICAgIG1hY29zdG9vbHMuY29weSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCBURVNURk4yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbXBhcmVEYXRhKCksICcnKQorCisgICAgaWYgc3lzLm1heGludCA8IDIqKjMyOgorICAgICAgICBkZWYgdGVzdF9ta2FsaWFzKHNlbGYpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhURVNURk4yKQorICAgICAgICAgICAgbWFjb3N0b29scy5ta2FsaWFzKHRlc3Rfc3VwcG9ydC5URVNURk4sIFRFU1RGTjIpCisgICAgICAgICAgICBmc3MsIF8sIF8gPSBDYXJib24uRmlsZS5SZXNvbHZlQWxpYXNGaWxlKFRFU1RGTjIsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZzcy5hc19wYXRobmFtZSgpLCBvcy5wYXRoLnJlYWxwYXRoKHRlc3Rfc3VwcG9ydC5URVNURk4pKQorCisgICAgICAgIGRlZiB0ZXN0X21rYWxpYXNfcmVsYXRpdmUoc2VsZik6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKFRFU1RGTjIpCisgICAgICAgICAgICAjIElmIHRoZSBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCwgdGhlbiBjaGFuY2VzIGFyZSB0aGlzIGlzIGEgbmV3CisgICAgICAgICAgICAjIGluc3RhbGwgb2YgUHl0aG9uIHNvIGRvbid0IGNyZWF0ZSBpdCBzaW5jZSB0aGUgdXNlciBtaWdodCBlbmQgdXAKKyAgICAgICAgICAgICMgcnVubmluZyBgYHN1ZG8gbWFrZSBpbnN0YWxsYGAgYW5kIGNyZWF0aW5nIHRoZSBkaXJlY3RvcnkgaGVyZSB3b24ndAorICAgICAgICAgICAgIyBsZWF2ZSBpdCB3aXRoIHRoZSBwcm9wZXIgcGVybWlzc2lvbnMuCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3lzLnByZWZpeCk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBtYWNvc3Rvb2xzLm1rYWxpYXModGVzdF9zdXBwb3J0LlRFU1RGTiwgVEVTVEZOMiwgc3lzLnByZWZpeCkKKyAgICAgICAgICAgIGZzcywgXywgXyA9IENhcmJvbi5GaWxlLlJlc29sdmVBbGlhc0ZpbGUoVEVTVEZOMiwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnNzLmFzX3BhdGhuYW1lKCksIG9zLnBhdGgucmVhbHBhdGgodGVzdF9zdXBwb3J0LlRFU1RGTikpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgICMgU2tpcCBvbiB3aWRlIHVuaWNvZGUKKyAgICBpZiBsZW4odSdcMCcuZW5jb2RlKCd1bmljb2RlLWludGVybmFsJykpID09IDQ6CisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJ0ZXN0X21hY29zdG9vbHMgaXMgYnJva2VuIGluIFVTQzQiKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdE1hY29zdG9vbHMpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbWFjcGF0aC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21hY3BhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM4NmM1MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21hY3BhdGgucHkKQEAgLTAsMCArMSw1NyBAQAoraW1wb3J0IG1hY3BhdGgKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCB0ZXN0X2dlbmVyaWNwYXRoCitpbXBvcnQgdW5pdHRlc3QKKworCitjbGFzcyBNYWNQYXRoVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYWJzcGF0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWNwYXRoLmFic3BhdGgoInh4Onl5IiksICJ4eDp5eSIpCisKKyAgICBkZWYgdGVzdF9pc2FicyhzZWxmKToKKyAgICAgICAgaXNhYnMgPSBtYWNwYXRoLmlzYWJzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2FicygieHg6eXkiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzYWJzKCJ4eDp5eToiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzYWJzKCJ4eDoiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2FicygiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNhYnMoIjpmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2FicygiOmZvbzpiYXIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2FicygiOmZvbzpiYXI6IikpCisKKyAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKKyAgICAgICAgc3BsaXQgPSBtYWNwYXRoLnNwbGl0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXQoImZvbzpiYXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCdmb286JywgJ2JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KCJjb25reTptb3VudHBvaW50OmZvbzpiYXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjb25reTptb3VudHBvaW50OmZvbycsICdiYXInKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KCI6IiksICgnJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KCI6Y29ua3k6bW91bnRwb2ludDoiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc6Y29ua3k6bW91bnRwb2ludCcsICcnKSkKKworICAgIGRlZiB0ZXN0X3NwbGl0ZXh0KHNlbGYpOgorICAgICAgICBzcGxpdGV4dCA9IG1hY3BhdGguc3BsaXRleHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGV4dCgiOmZvby5leHQiKSwgKCc6Zm9vJywgJy5leHQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGV4dCgiZm9vOmZvby5leHQiKSwgKCdmb286Zm9vJywgJy5leHQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGV4dCgiLmV4dCIpLCAoJy5leHQnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRleHQoImZvby5leHQ6Zm9vIiksICgnZm9vLmV4dDpmb28nLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRleHQoIjpmb28uZXh0OiIpLCAoJzpmb28uZXh0OicsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGV4dCgiIiksICgnJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZXh0KCJmb28uYmFyLmV4dCIpLCAoJ2Zvby5iYXInLCAnLmV4dCcpKQorCisgICAgZGVmIHRlc3Rfbm9ybXBhdGgoc2VsZik6CisgICAgICAgICMgSXNzdWUgNTgyNzogTWFrZSBzdXJlIG5vcm1wYXRoIHByZXNlcnZlcyB1bmljb2RlCisgICAgICAgIGZvciBwYXRoIGluICh1JycsIHUnLicsIHUnLycsIHUnXFwnLCB1JzonLCB1Jy8vL2Zvby8uLy9iYXIvLycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1hY3BhdGgubm9ybXBhdGgocGF0aCksIHVuaWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vcm1wYXRoKCkgcmV0dXJuZWQgc3RyIGluc3RlYWQgb2YgdW5pY29kZScpCisKK2NsYXNzIE1hY0NvbW1vblRlc3QodGVzdF9nZW5lcmljcGF0aC5Db21tb25UZXN0KToKKyAgICBwYXRobW9kdWxlID0gbWFjcGF0aAorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KE1hY1BhdGhUZXN0Q2FzZSwgTWFjQ29tbW9uVGVzdCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tYWlsYm94LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbWFpbGJveC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZThlM2MxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbWFpbGJveC5weQpAQCAtMCwwICsxLDIxMjIgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCBzdGF0CitpbXBvcnQgc29ja2V0CitpbXBvcnQgZW1haWwKK2ltcG9ydCBlbWFpbC5tZXNzYWdlCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IHRlbXBmaWxlCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgbWFpbGJveAoraW1wb3J0IGdsb2IKK3RyeToKKyAgICBpbXBvcnQgZmNudGwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCisKKyMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKK3JmYzgyMiA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdyZmM4MjInLCBkZXByZWNhdGVkPVRydWUpCisKK2NsYXNzIFRlc3RCYXNlOgorCisgICAgZGVmIF9jaGVja19zYW1wbGUoc2VsZiwgbXNnKToKKyAgICAgICAgIyBJbnNwZWN0IGEgbWFpbGJveC5NZXNzYWdlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzYW1wbGUgbWVzc2FnZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXNnLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2csIG1haWxib3guTWVzc2FnZSkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gX3NhbXBsZV9oZWFkZXJzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2YWx1ZSwgbXNnLmdldF9hbGwoa2V5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obXNnLmdldF9wYXlsb2FkKCkpLCBsZW4oX3NhbXBsZV9wYXlsb2FkcykpCisgICAgICAgIGZvciBpLCBwYXlsb2FkIGluIGVudW1lcmF0ZShfc2FtcGxlX3BheWxvYWRzKToKKyAgICAgICAgICAgIHBhcnQgPSBtc2cuZ2V0X3BheWxvYWQoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwYXJ0LCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UocGFydCwgbWFpbGJveC5NZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0LmdldF9wYXlsb2FkKCksIHBheWxvYWQpCisKKyAgICBkZWYgX2RlbGV0ZV9yZWN1cnNpdmVseShzZWxmLCB0YXJnZXQpOgorICAgICAgICAjIERlbGV0ZSBhIGZpbGUgb3IgZGVsZXRlIGEgZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5CisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIodGFyZ2V0KToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUodGFyZ2V0KQorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHRhcmdldCk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRhcmdldCkKKworCitjbGFzcyBUZXN0TWFpbGJveChUZXN0QmFzZSk6CisKKyAgICBfZmFjdG9yeSA9IE5vbmUgICAgICMgT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIHRvIHJldXNlIHRlc3RzCisgICAgX3RlbXBsYXRlID0gJ0Zyb206IGZvb1xuXG4lc1xuJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9wYXRoID0gdGVzdF9zdXBwb3J0LlRFU1RGTgorICAgICAgICBzZWxmLl9kZWxldGVfcmVjdXJzaXZlbHkoc2VsZi5fcGF0aCkKKyAgICAgICAgc2VsZi5fYm94ID0gc2VsZi5fZmFjdG9yeShzZWxmLl9wYXRoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQorICAgICAgICBzZWxmLl9kZWxldGVfcmVjdXJzaXZlbHkoc2VsZi5fcGF0aCkKKworICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgIyBBZGQgY29waWVzIG9mIGEgc2FtcGxlIG1lc3NhZ2UKKyAgICAgICAga2V5cyA9IFtdCisgICAgICAgIGtleXMuYXBwZW5kKHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMSkKKyAgICAgICAga2V5cy5hcHBlbmQoc2VsZi5fYm94LmFkZChtYWlsYm94Lk1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDIpCisgICAgICAgIGtleXMuYXBwZW5kKHNlbGYuX2JveC5hZGQoZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhfc2FtcGxlX21lc3NhZ2UpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMykKKyAgICAgICAga2V5cy5hcHBlbmQoc2VsZi5fYm94LmFkZChTdHJpbmdJTy5TdHJpbmdJTyhfc2FtcGxlX21lc3NhZ2UpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgNCkKKyAgICAgICAga2V5cy5hcHBlbmQoc2VsZi5fYm94LmFkZChfc2FtcGxlX21lc3NhZ2UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleXNbMF0pLCBzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIGZvciBpIGluICgxLCAyLCAzLCA0KToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShzZWxmLl9ib3hba2V5c1tpXV0pCisKKyAgICBkZWYgdGVzdF9hZGRfZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCd3KycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAga2V5ID0gc2VsZi5fYm94LmFkZChmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleSkuc3BsaXQoJ1xuJyksCisgICAgICAgICAgICBfc2FtcGxlX21lc3NhZ2Uuc3BsaXQoJ1xuJykpCisKKyAgICBkZWYgdGVzdF9hZGRfU3RyaW5nSU8oc2VsZik6CisgICAgICAgIGtleSA9IHNlbGYuX2JveC5hZGQoU3RyaW5nSU8uU3RyaW5nSU8oc2VsZi5fdGVtcGxhdGUgJSAiMCIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleSksIHNlbGYuX3RlbXBsYXRlICUgIjAiKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgorICAgICAgICAjIFJlbW92ZSBtZXNzYWdlcyB1c2luZyByZW1vdmUoKQorICAgICAgICBzZWxmLl90ZXN0X3JlbW92ZV9vcl9kZWxpdGVtKHNlbGYuX2JveC5yZW1vdmUpCisKKyAgICBkZWYgdGVzdF9kZWxpdGVtKHNlbGYpOgorICAgICAgICAjIFJlbW92ZSBtZXNzYWdlcyB1c2luZyBfX2RlbGl0ZW1fXygpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVtb3ZlX29yX2RlbGl0ZW0oc2VsZi5fYm94Ll9fZGVsaXRlbV9fKQorCisgICAgZGVmIF90ZXN0X3JlbW92ZV9vcl9kZWxpdGVtKHNlbGYsIG1ldGhvZCk6CisgICAgICAgICMgKFVzZWQgYnkgdGVzdF9yZW1vdmUoKSBhbmQgdGVzdF9kZWxpdGVtKCkuKQorICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMikKKyAgICAgICAgbWV0aG9kKGtleTApCisgICAgICAgIGwgPSBsZW4oc2VsZi5fYm94KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IHNlbGYuX2JveFtrZXkwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogbWV0aG9kKGtleTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpLCBzZWxmLl90ZW1wbGF0ZSAlIDEpCisgICAgICAgIGtleTIgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMikKKyAgICAgICAgbWV0aG9kKGtleTIpCisgICAgICAgIGwgPSBsZW4oc2VsZi5fYm94KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IHNlbGYuX2JveFtrZXkyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogbWV0aG9kKGtleTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpLCBzZWxmLl90ZW1wbGF0ZSAlIDEpCisgICAgICAgIG1ldGhvZChrZXkxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3hba2V5MV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IG1ldGhvZChrZXkxKSkKKworICAgIGRlZiB0ZXN0X2Rpc2NhcmQoc2VsZiwgcmVwZXRpdGlvbnM9MTApOgorICAgICAgICAjIERpc2NhcmQgbWVzc2FnZXMKKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDIpCisgICAgICAgIHNlbGYuX2JveC5kaXNjYXJkKGtleTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IHNlbGYuX2JveFtrZXkwXSkKKyAgICAgICAgc2VsZi5fYm94LmRpc2NhcmQoa2V5MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5fYm94W2tleTBdKQorCisgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgorICAgICAgICAjIFJldHJpZXZlIG1lc3NhZ2VzIHVzaW5nIGdldCgpCisgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAgbXNnID0gc2VsZi5fYm94LmdldChrZXkwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ1snZnJvbSddLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BheWxvYWQoKSwgJzBcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5fYm94LmdldCgnZm9vJyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5fYm94LmdldCgnZm9vJywgRmFsc2UpKQorICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQorICAgICAgICBzZWxmLl9ib3ggPSBzZWxmLl9mYWN0b3J5KHNlbGYuX3BhdGgsIGZhY3Rvcnk9cmZjODIyLk1lc3NhZ2UpCisgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMSkKKyAgICAgICAgbXNnID0gc2VsZi5fYm94LmdldChrZXkxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ1snZnJvbSddLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZnAucmVhZCgpLCAnMScgKyBvcy5saW5lc2VwKQorICAgICAgICBtc2cuZnAuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgIyBSZXRyaWV2ZSBtZXNzYWdlIHVzaW5nIF9fZ2V0aXRlbV9fKCkKKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBtc2cgPSBzZWxmLl9ib3hba2V5MF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dbJ2Zyb20nXSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKCksICcwXG4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3hbJ2ZvbyddKQorICAgICAgICBzZWxmLl9ib3guZGlzY2FyZChrZXkwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3hba2V5MF0pCisKKyAgICBkZWYgdGVzdF9nZXRfbWVzc2FnZShzZWxmKToKKyAgICAgICAgIyBHZXQgTWVzc2FnZSByZXByZXNlbnRhdGlvbnMgb2YgbWVzc2FnZXMKKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIG1zZzAgPSBzZWxmLl9ib3guZ2V0X21lc3NhZ2Uoa2V5MCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZzAsIG1haWxib3guTWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cwWydmcm9tJ10sICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZzAuZ2V0X3BheWxvYWQoKSwgJzBcbicpCisgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShzZWxmLl9ib3guZ2V0X21lc3NhZ2Uoa2V5MSkpCisKKyAgICBkZWYgdGVzdF9nZXRfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25zIG9mIG1lc3NhZ2VzCisgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApLCBzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MSksIF9zYW1wbGVfbWVzc2FnZSkKKworICAgIGRlZiB0ZXN0X2dldF9maWxlKHNlbGYpOgorICAgICAgICAjIEdldCBmaWxlIHJlcHJlc2VudGF0aW9ucyBvZiBtZXNzYWdlcworICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgbXNnMCA9IHNlbGYuX2JveC5nZXRfZmlsZShrZXkwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZzAucmVhZCgpLnJlcGxhY2Uob3MubGluZXNlcCwgJ1xuJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBtc2cxID0gc2VsZi5fYm94LmdldF9maWxlKGtleTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnMS5yZWFkKCkucmVwbGFjZShvcy5saW5lc2VwLCAnXG4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIG1zZzAuY2xvc2UoKQorICAgICAgICBtc2cxLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2dldF9maWxlX2Nhbl9iZV9jbG9zZWRfdHdpY2Uoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTE3MDAKKyAgICAgICAga2V5ID0gc2VsZi5fYm94LmFkZChfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIGYgPSBzZWxmLl9ib3guZ2V0X2ZpbGUoa2V5KQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9pdGVya2V5cyhzZWxmKToKKyAgICAgICAgIyBHZXQga2V5cyB1c2luZyBpdGVya2V5cygpCisgICAgICAgIHNlbGYuX2NoZWNrX2l0ZXJhdGlvbihzZWxmLl9ib3guaXRlcmtleXMsIGRvX2tleXM9VHJ1ZSwgZG9fdmFsdWVzPUZhbHNlKQorCisgICAgZGVmIHRlc3Rfa2V5cyhzZWxmKToKKyAgICAgICAgIyBHZXQga2V5cyB1c2luZyBrZXlzKCkKKyAgICAgICAgc2VsZi5fY2hlY2tfaXRlcmF0aW9uKHNlbGYuX2JveC5rZXlzLCBkb19rZXlzPVRydWUsIGRvX3ZhbHVlcz1GYWxzZSkKKworICAgIGRlZiB0ZXN0X2l0ZXJ2YWx1ZXMoc2VsZik6CisgICAgICAgICMgR2V0IHZhbHVlcyB1c2luZyBpdGVydmFsdWVzKCkKKyAgICAgICAgc2VsZi5fY2hlY2tfaXRlcmF0aW9uKHNlbGYuX2JveC5pdGVydmFsdWVzLCBkb19rZXlzPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fdmFsdWVzPVRydWUpCisKKyAgICBkZWYgdGVzdF9pdGVyKHNlbGYpOgorICAgICAgICAjIEdldCB2YWx1ZXMgdXNpbmcgX19pdGVyX18oKQorICAgICAgICBzZWxmLl9jaGVja19pdGVyYXRpb24oc2VsZi5fYm94Ll9faXRlcl9fLCBkb19rZXlzPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fdmFsdWVzPVRydWUpCisKKyAgICBkZWYgdGVzdF92YWx1ZXMoc2VsZik6CisgICAgICAgICMgR2V0IHZhbHVlcyB1c2luZyB2YWx1ZXMoKQorICAgICAgICBzZWxmLl9jaGVja19pdGVyYXRpb24oc2VsZi5fYm94LnZhbHVlcywgZG9fa2V5cz1GYWxzZSwgZG9fdmFsdWVzPVRydWUpCisKKyAgICBkZWYgdGVzdF9pdGVyaXRlbXMoc2VsZik6CisgICAgICAgICMgR2V0IGtleXMgYW5kIHZhbHVlcyB1c2luZyBpdGVyaXRlbXMoKQorICAgICAgICBzZWxmLl9jaGVja19pdGVyYXRpb24oc2VsZi5fYm94Lml0ZXJpdGVtcywgZG9fa2V5cz1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fdmFsdWVzPVRydWUpCisKKyAgICBkZWYgdGVzdF9pdGVtcyhzZWxmKToKKyAgICAgICAgIyBHZXQga2V5cyBhbmQgdmFsdWVzIHVzaW5nIGl0ZW1zKCkKKyAgICAgICAgc2VsZi5fY2hlY2tfaXRlcmF0aW9uKHNlbGYuX2JveC5pdGVtcywgZG9fa2V5cz1UcnVlLCBkb192YWx1ZXM9VHJ1ZSkKKworICAgIGRlZiBfY2hlY2tfaXRlcmF0aW9uKHNlbGYsIG1ldGhvZCwgZG9fa2V5cywgZG9fdmFsdWVzLCByZXBldGl0aW9ucz0xMCk6CisgICAgICAgIGZvciB2YWx1ZSBpbiBtZXRob2QoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiTm90IGVtcHR5IikKKyAgICAgICAga2V5cywgdmFsdWVzID0gW10sIFtdCisgICAgICAgIGZvciBpIGluIHhyYW5nZShyZXBldGl0aW9ucyk6CisgICAgICAgICAgICBrZXlzLmFwcGVuZChzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgaSkpCisgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKHNlbGYuX3RlbXBsYXRlICUgaSkKKyAgICAgICAgaWYgZG9fa2V5cyBhbmQgbm90IGRvX3ZhbHVlczoKKyAgICAgICAgICAgIHJldHVybmVkX2tleXMgPSBsaXN0KG1ldGhvZCgpKQorICAgICAgICBlbGlmIGRvX3ZhbHVlcyBhbmQgbm90IGRvX2tleXM6CisgICAgICAgICAgICByZXR1cm5lZF92YWx1ZXMgPSBsaXN0KG1ldGhvZCgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuZWRfa2V5cywgcmV0dXJuZWRfdmFsdWVzID0gW10sIFtdCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBtZXRob2QoKToKKyAgICAgICAgICAgICAgICByZXR1cm5lZF9rZXlzLmFwcGVuZChrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuZWRfdmFsdWVzLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgaWYgZG9fa2V5czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXMpLCBsZW4ocmV0dXJuZWRfa2V5cykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChrZXlzKSwgc2V0KHJldHVybmVkX2tleXMpKQorICAgICAgICBpZiBkb192YWx1ZXM6CisgICAgICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiByZXR1cm5lZF92YWx1ZXM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZVsnZnJvbSddLCAnZm9vJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50KHZhbHVlLmdldF9wYXlsb2FkKCkpIDwgcmVwZXRpdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZS5nZXRfcGF5bG9hZCgpLCByZXBldGl0aW9ucykpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWVzKSwgY291bnQpCisKKyAgICBkZWYgdGVzdF9oYXNfa2V5KHNlbGYpOgorICAgICAgICAjIENoZWNrIGV4aXN0ZW5jZSBvZiBrZXlzIHVzaW5nIGhhc19rZXkoKQorICAgICAgICBzZWxmLl90ZXN0X2hhc19rZXlfb3JfY29udGFpbnMoc2VsZi5fYm94Lmhhc19rZXkpCisKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBleGlzdGVuY2Ugb2Yga2V5cyB1c2luZyBfX2NvbnRhaW5zX18oKQorICAgICAgICBzZWxmLl90ZXN0X2hhc19rZXlfb3JfY29udGFpbnMoc2VsZi5fYm94Ll9fY29udGFpbnNfXykKKworICAgIGRlZiBfdGVzdF9oYXNfa2V5X29yX2NvbnRhaW5zKHNlbGYsIG1ldGhvZCk6CisgICAgICAgICMgKFVzZWQgYnkgdGVzdF9oYXNfa2V5KCkgYW5kIHRlc3RfY29udGFpbnMoKS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWV0aG9kKCdmb28nKSkKKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0aG9kKGtleTApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1ldGhvZCgnZm9vJykpCisgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ldGhvZChrZXkxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1ldGhvZChrZXkwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZXRob2QoJ2ZvbycpKQorICAgICAgICBzZWxmLl9ib3gucmVtb3ZlKGtleTApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWV0aG9kKGtleTApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0aG9kKGtleTEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1ldGhvZCgnZm9vJykpCisgICAgICAgIHNlbGYuX2JveC5yZW1vdmUoa2V5MSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZXRob2Qoa2V5MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWV0aG9kKGtleTApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1ldGhvZCgnZm9vJykpCisKKyAgICBkZWYgdGVzdF9sZW4oc2VsZiwgcmVwZXRpdGlvbnM9MTApOgorICAgICAgICAjIEdldCBtZXNzYWdlIGNvdW50CisgICAgICAgIGtleXMgPSBbXQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UocmVwZXRpdGlvbnMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgaSkKKyAgICAgICAgICAgIGtleXMuYXBwZW5kKHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSBpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksICBpICsgMSkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHJlcGV0aXRpb25zKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIHJlcGV0aXRpb25zIC0gaSkKKyAgICAgICAgICAgIHNlbGYuX2JveC5yZW1vdmUoa2V5c1tpXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIHJlcGV0aXRpb25zIC0gaSAtIDEpCisKKyAgICBkZWYgdGVzdF9zZXRfaXRlbShzZWxmKToKKyAgICAgICAgIyBNb2RpZnkgbWVzc2FnZXMgdXNpbmcgX19zZXRpdGVtX18oKQorICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAwJykKKyAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMScpCisgICAgICAgIHNlbGYuX2JveFtrZXkwXSA9IHNlbGYuX3RlbXBsYXRlICUgJ2NoYW5nZWQgMCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDAnKQorICAgICAgICBzZWxmLl9ib3hba2V5MV0gPSBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDEnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnY2hhbmdlZCAxJykKKyAgICAgICAgc2VsZi5fYm94W2tleTBdID0gX3NhbXBsZV9tZXNzYWdlCisgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShzZWxmLl9ib3hba2V5MF0pCisgICAgICAgIHNlbGYuX2JveFtrZXkxXSA9IHNlbGYuX2JveFtrZXkwXQorICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUoc2VsZi5fYm94W2tleTFdKQorICAgICAgICBzZWxmLl9ib3hba2V5MF0gPSBzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAwJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDAnKQorICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUoc2VsZi5fYm94W2tleTFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBzZWxmLl9ib3guX19zZXRpdGVtX18oJ2ZvbycsICdiYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5fYm94Wydmb28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMikKKworICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYsIGl0ZXJhdGlvbnM9MTApOgorICAgICAgICAjIFJlbW92ZSBhbGwgbWVzc2FnZXMgdXNpbmcgY2xlYXIoKQorICAgICAgICBrZXlzID0gW10KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGl0ZXJhdGlvbnMpOgorICAgICAgICAgICAgc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIGkpCisgICAgICAgIGZvciBpLCBrZXkgaW4gZW51bWVyYXRlKGtleXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkpLCBzZWxmLl90ZW1wbGF0ZSAlIGkpCisgICAgICAgIHNlbGYuX2JveC5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDApCisgICAgICAgIGZvciBpLCBrZXkgaW4gZW51bWVyYXRlKGtleXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5KSkKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgIyBHZXQgYW5kIHJlbW92ZSBhIG1lc3NhZ2UgdXNpbmcgcG9wKCkKKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBzZWxmLmFzc2VydEluKGtleTAsIHNlbGYuX2JveCkKKyAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAxKQorICAgICAgICBzZWxmLmFzc2VydEluKGtleTEsIHNlbGYuX2JveCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3gucG9wKGtleTApLmdldF9wYXlsb2FkKCksICcwXG4nKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGtleTAsIHNlbGYuX2JveCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihrZXkxLCBzZWxmLl9ib3gpCisgICAgICAgIGtleTIgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihrZXkyLCBzZWxmLl9ib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LnBvcChrZXkyKS5nZXRfcGF5bG9hZCgpLCAnMlxuJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrZXkyLCBzZWxmLl9ib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5MSwgc2VsZi5fYm94KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5wb3Aoa2V5MSkuZ2V0X3BheWxvYWQoKSwgJzFcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oa2V5MSwgc2VsZi5fYm94KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAwKQorCisgICAgZGVmIHRlc3RfcG9waXRlbShzZWxmLCBpdGVyYXRpb25zPTEwKToKKyAgICAgICAgIyBHZXQgYW5kIHJlbW92ZSBhbiBhcmJpdHJhcnkgKGtleSwgbWVzc2FnZSkgdXNpbmcgcG9waXRlbSgpCisgICAgICAgIGtleXMgPSBbXQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTApOgorICAgICAgICAgICAga2V5cy5hcHBlbmQoc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIGkpKQorICAgICAgICBzZWVuID0gW10KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwKToKKyAgICAgICAgICAgIGtleSwgbXNnID0gc2VsZi5fYm94LnBvcGl0ZW0oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIGtleXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGtleSwgc2VlbikKKyAgICAgICAgICAgIHNlZW4uYXBwZW5kKGtleSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KG1zZy5nZXRfcGF5bG9hZCgpKSwga2V5cy5pbmRleChrZXkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAwKQorICAgICAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3hba2V5XSkKKworICAgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgIyBNb2RpZnkgbXVsdGlwbGUgbWVzc2FnZXMgdXNpbmcgdXBkYXRlKCkKKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMCcpCisgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDEnKQorICAgICAgICBrZXkyID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlICdvcmlnaW5hbCAyJykKKyAgICAgICAgc2VsZi5fYm94LnVwZGF0ZSh7a2V5MDogc2VsZi5fdGVtcGxhdGUgJSAnY2hhbmdlZCAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAga2V5MjogX3NhbXBsZV9tZXNzYWdlfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDEnKQorICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUoc2VsZi5fYm94W2tleTJdKQorICAgICAgICBzZWxmLl9ib3gudXBkYXRlKFsoa2V5Miwgc2VsZi5fdGVtcGxhdGUgJSAnY2hhbmdlZCAyJyksCisgICAgICAgICAgICAgICAgICAgIChrZXkxLCBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDEnKSwKKyAgICAgICAgICAgICAgICAgICAgKGtleTAsIHNlbGYuX3RlbXBsYXRlICUgJ29yaWdpbmFsIDAnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnb3JpZ2luYWwgMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnY2hhbmdlZCAxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICdjaGFuZ2VkIDInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBzZWxmLl9ib3gudXBkYXRlKHsnZm9vJzogJ2JhcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkwOiBzZWxmLl90ZW1wbGF0ZSAlICJjaGFuZ2VkIDAifSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAiY2hhbmdlZCAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZW1wbGF0ZSAlICJjaGFuZ2VkIDEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgImNoYW5nZWQgMiIpCisKKyAgICBkZWYgdGVzdF9mbHVzaChzZWxmKToKKyAgICAgICAgIyBXcml0ZSBjaGFuZ2VzIHRvIGRpc2sKKyAgICAgICAgc2VsZi5fdGVzdF9mbHVzaF9vcl9jbG9zZShzZWxmLl9ib3guZmx1c2gsIFRydWUpCisKKyAgICBkZWYgdGVzdF9wb3BpdGVtX2FuZF9mbHVzaF90d2ljZShzZWxmKToKKyAgICAgICAgIyBTZWUgIzE1MDM2LgorICAgICAgICBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAgc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDEpCisgICAgICAgIHNlbGYuX2JveC5mbHVzaCgpCisKKyAgICAgICAgc2VsZi5fYm94LnBvcGl0ZW0oKQorICAgICAgICBzZWxmLl9ib3guZmx1c2goKQorICAgICAgICBzZWxmLl9ib3gucG9waXRlbSgpCisgICAgICAgIHNlbGYuX2JveC5mbHVzaCgpCisKKyAgICBkZWYgdGVzdF9sb2NrX3VubG9jayhzZWxmKToKKyAgICAgICAgIyBMb2NrIGFuZCB1bmxvY2sgdGhlIG1haWxib3gKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzZWxmLl9nZXRfbG9ja19wYXRoKCkpKQorICAgICAgICBzZWxmLl9ib3gubG9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLl9nZXRfbG9ja19wYXRoKCkpKQorICAgICAgICBzZWxmLl9ib3gudW5sb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzZWxmLl9nZXRfbG9ja19wYXRoKCkpKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgICMgQ2xvc2UgbWFpbGJveCBhbmQgZmx1c2ggY2hhbmdlcyB0byBkaXNrCisgICAgICAgIHNlbGYuX3Rlc3RfZmx1c2hfb3JfY2xvc2Uoc2VsZi5fYm94LmNsb3NlLCBGYWxzZSkKKworICAgIGRlZiBfdGVzdF9mbHVzaF9vcl9jbG9zZShzZWxmLCBtZXRob2QsIHNob3VsZF9jYWxsX2Nsb3NlKToKKyAgICAgICAgY29udGVudHMgPSBbc2VsZi5fdGVtcGxhdGUgJSBpIGZvciBpIGluIHhyYW5nZSgzKV0KKyAgICAgICAgc2VsZi5fYm94LmFkZChjb250ZW50c1swXSkKKyAgICAgICAgc2VsZi5fYm94LmFkZChjb250ZW50c1sxXSkKKyAgICAgICAgc2VsZi5fYm94LmFkZChjb250ZW50c1syXSkKKyAgICAgICAgb2xkYm94ID0gc2VsZi5fYm94CisgICAgICAgIG1ldGhvZCgpCisgICAgICAgIGlmIHNob3VsZF9jYWxsX2Nsb3NlOgorICAgICAgICAgICAgc2VsZi5fYm94LmNsb3NlKCkKKyAgICAgICAgc2VsZi5fYm94ID0gc2VsZi5fZmFjdG9yeShzZWxmLl9wYXRoKQorICAgICAgICBrZXlzID0gc2VsZi5fYm94LmtleXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihrZXlzKSwgMykKKyAgICAgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkpLCBjb250ZW50cykKKyAgICAgICAgb2xkYm94LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2R1bXBfbWVzc2FnZShzZWxmKToKKyAgICAgICAgIyBXcml0ZSBtZXNzYWdlIHJlcHJlc2VudGF0aW9ucyB0byBkaXNrCisgICAgICAgIGZvciBpbnB1dCBpbiAoZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhfc2FtcGxlX21lc3NhZ2UpLAorICAgICAgICAgICAgICAgICAgICAgIF9zYW1wbGVfbWVzc2FnZSwgU3RyaW5nSU8uU3RyaW5nSU8oX3NhbXBsZV9tZXNzYWdlKSk6CisgICAgICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICBzZWxmLl9ib3guX2R1bXBfbWVzc2FnZShpbnB1dCwgb3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NhbXBsZV9tZXNzYWdlLnJlcGxhY2UoJ1xuJywgb3MubGluZXNlcCkpCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IHNlbGYuX2JveC5fZHVtcF9tZXNzYWdlKE5vbmUsIG91dHB1dCkpCisKKyAgICBkZWYgX2dldF9sb2NrX3BhdGgoc2VsZik6CisgICAgICAgICMgUmV0dXJuIHRoZSBwYXRoIG9mIHRoZSBkb3QgbG9jayBmaWxlLiBNYXkgYmUgb3ZlcnJpZGRlbi4KKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGggKyAnLmxvY2snCisKKworY2xhc3MgVGVzdE1haWxib3hTdXBlcmNsYXNzKFRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ub3RpbXBsZW1lbnRlZChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYWxsIE1haWxib3ggbWV0aG9kcyByYWlzZSBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbi4KKyAgICAgICAgYm94ID0gbWFpbGJveC5NYWlsYm94KCdwYXRoJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guYWRkKCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3gucmVtb3ZlKCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guX19kZWxpdGVtX18oJycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5kaXNjYXJkKCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guX19zZXRpdGVtX18oJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guaXRlcmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3gua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5pdGVydmFsdWVzKCkubmV4dCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5fX2l0ZXJfXygpLm5leHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3gudmFsdWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94Lml0ZXJpdGVtcygpLm5leHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guaXRlbXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guZ2V0KCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guX19nZXRpdGVtX18oJycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5nZXRfbWVzc2FnZSgnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94LmdldF9zdHJpbmcoJycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5nZXRfZmlsZSgnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94Lmhhc19rZXkoJycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5fX2NvbnRhaW5zX18oJycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5fX2xlbl9fKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94LmNsZWFyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94LnBvcCgnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94LnBvcGl0ZW0oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3gudXBkYXRlKCgoJycsICcnKSwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guZmx1c2goKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3gubG9jaygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC51bmxvY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guY2xvc2UoKSkKKworCitjbGFzcyBUZXN0TWFpbGRpcihUZXN0TWFpbGJveCwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgX2ZhY3RvcnkgPSBsYW1iZGEgc2VsZiwgcGF0aCwgZmFjdG9yeT1Ob25lOiBtYWlsYm94Lk1haWxkaXIocGF0aCwgZmFjdG9yeSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgVGVzdE1haWxib3guc2V0VXAoc2VsZikKKyAgICAgICAgaWYgb3MubmFtZSBpbiAoJ250JywgJ29zMicpIG9yIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKKyAgICAgICAgICAgIHNlbGYuX2JveC5jb2xvbiA9ICchJworCisgICAgZGVmIHRlc3RfYWRkX01NKHNlbGYpOgorICAgICAgICAjIEFkZCBhIE1haWxkaXJNZXNzYWdlIGluc3RhbmNlCisgICAgICAgIG1zZyA9IG1haWxib3guTWFpbGRpck1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBtc2cuc2V0X3N1YmRpcignY3VyJykKKyAgICAgICAgbXNnLnNldF9pbmZvKCdmb28nKQorICAgICAgICBrZXkgPSBzZWxmLl9ib3guYWRkKG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAnY3VyJywgJyVzJXNmb28nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5LCBzZWxmLl9ib3guY29sb24pKSkpCisKKyAgICBkZWYgdGVzdF9nZXRfTU0oc2VsZik6CisgICAgICAgICMgR2V0IGEgTWFpbGRpck1lc3NhZ2UgaW5zdGFuY2UKKyAgICAgICAgbXNnID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIG1zZy5zZXRfc3ViZGlyKCdjdXInKQorICAgICAgICBtc2cuc2V0X2ZsYWdzKCdSRicpCisgICAgICAgIGtleSA9IHNlbGYuX2JveC5hZGQobXNnKQorICAgICAgICBtc2dfcmV0dXJuZWQgPSBzZWxmLl9ib3guZ2V0X21lc3NhZ2Uoa2V5KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXNnX3JldHVybmVkLCBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfc3ViZGlyKCksICdjdXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfZmxhZ3MoKSwgJ0ZSJykKKworICAgIGRlZiB0ZXN0X3NldF9NTShzZWxmKToKKyAgICAgICAgIyBTZXQgd2l0aCBhIE1haWxkaXJNZXNzYWdlIGluc3RhbmNlCisgICAgICAgIG1zZzAgPSBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAgbXNnMC5zZXRfZmxhZ3MoJ1RQJykKKyAgICAgICAga2V5ID0gc2VsZi5fYm94LmFkZChtc2cwKQorICAgICAgICBtc2dfcmV0dXJuZWQgPSBzZWxmLl9ib3guZ2V0X21lc3NhZ2Uoa2V5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfc3ViZGlyKCksICduZXcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfZmxhZ3MoKSwgJ1BUJykKKyAgICAgICAgbXNnMSA9IG1haWxib3guTWFpbGRpck1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAxKQorICAgICAgICBzZWxmLl9ib3hba2V5XSA9IG1zZzEKKyAgICAgICAgbXNnX3JldHVybmVkID0gc2VsZi5fYm94LmdldF9tZXNzYWdlKGtleSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dfcmV0dXJuZWQuZ2V0X3N1YmRpcigpLCAnbmV3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dfcmV0dXJuZWQuZ2V0X2ZsYWdzKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ19yZXR1cm5lZC5nZXRfcGF5bG9hZCgpLCAnMVxuJykKKyAgICAgICAgbXNnMiA9IG1haWxib3guTWFpbGRpck1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAyKQorICAgICAgICBtc2cyLnNldF9pbmZvKCcyLFMnKQorICAgICAgICBzZWxmLl9ib3hba2V5XSA9IG1zZzIKKyAgICAgICAgc2VsZi5fYm94W2tleV0gPSBzZWxmLl90ZW1wbGF0ZSAlIDMKKyAgICAgICAgbXNnX3JldHVybmVkID0gc2VsZi5fYm94LmdldF9tZXNzYWdlKGtleSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dfcmV0dXJuZWQuZ2V0X3N1YmRpcigpLCAnbmV3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dfcmV0dXJuZWQuZ2V0X2ZsYWdzKCksICdTJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dfcmV0dXJuZWQuZ2V0X3BheWxvYWQoKSwgJzNcbicpCisKKyAgICBkZWYgdGVzdF9jb25zaXN0ZW50X2ZhY3Rvcnkoc2VsZik6CisgICAgICAgICMgQWRkIGEgbWVzc2FnZS4KKyAgICAgICAgbXNnID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIG1zZy5zZXRfc3ViZGlyKCdjdXInKQorICAgICAgICBtc2cuc2V0X2ZsYWdzKCdSRicpCisgICAgICAgIGtleSA9IHNlbGYuX2JveC5hZGQobXNnKQorCisgICAgICAgICMgQ3JlYXRlIG5ldyBtYWlsYm94IHdpdGgKKyAgICAgICAgY2xhc3MgRmFrZU1lc3NhZ2UobWFpbGJveC5NYWlsZGlyTWVzc2FnZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGJveCA9IG1haWxib3guTWFpbGRpcihzZWxmLl9wYXRoLCBmYWN0b3J5PUZha2VNZXNzYWdlKQorICAgICAgICBib3guY29sb24gPSBzZWxmLl9ib3guY29sb24KKyAgICAgICAgbXNnMiA9IGJveC5nZXRfbWVzc2FnZShrZXkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2cyLCBGYWtlTWVzc2FnZSkKKworICAgIGRlZiB0ZXN0X2luaXRpYWxpemVfbmV3KHNlbGYpOgorICAgICAgICAjIEluaXRpYWxpemUgYSBub24tZXhpc3RlbnQgbWFpbGJveAorICAgICAgICBzZWxmLnRlYXJEb3duKCkKKyAgICAgICAgc2VsZi5fYm94ID0gbWFpbGJveC5NYWlsZGlyKHNlbGYuX3BhdGgpCisgICAgICAgIHNlbGYuX2NoZWNrX2Jhc2ljcyhmYWN0b3J5PXJmYzgyMi5NZXNzYWdlKQorICAgICAgICBzZWxmLl9kZWxldGVfcmVjdXJzaXZlbHkoc2VsZi5fcGF0aCkKKyAgICAgICAgc2VsZi5fYm94ID0gc2VsZi5fZmFjdG9yeShzZWxmLl9wYXRoLCBmYWN0b3J5PU5vbmUpCisgICAgICAgIHNlbGYuX2NoZWNrX2Jhc2ljcygpCisKKyAgICBkZWYgdGVzdF9pbml0aWFsaXplX2V4aXN0aW5nKHNlbGYpOgorICAgICAgICAjIEluaXRpYWxpemUgYW4gZXhpc3RpbmcgbWFpbGJveAorICAgICAgICBzZWxmLnRlYXJEb3duKCkKKyAgICAgICAgZm9yIHN1YmRpciBpbiAnJywgJ3RtcCcsICduZXcnLCAnY3VyJzoKKyAgICAgICAgICAgIG9zLm1rZGlyKG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN1YmRpcikpKQorICAgICAgICBzZWxmLl9ib3ggPSBtYWlsYm94Lk1haWxkaXIoc2VsZi5fcGF0aCkKKyAgICAgICAgc2VsZi5fY2hlY2tfYmFzaWNzKGZhY3Rvcnk9cmZjODIyLk1lc3NhZ2UpCisgICAgICAgIHNlbGYuX2JveCA9IG1haWxib3guTWFpbGRpcihzZWxmLl9wYXRoLCBmYWN0b3J5PU5vbmUpCisgICAgICAgIHNlbGYuX2NoZWNrX2Jhc2ljcygpCisKKyAgICBkZWYgX2NoZWNrX2Jhc2ljcyhzZWxmLCBmYWN0b3J5PU5vbmUpOgorICAgICAgICAjIChVc2VkIGJ5IHRlc3Rfb3Blbl9uZXcoKSBhbmQgdGVzdF9vcGVuX2V4aXN0aW5nKCkuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5fcGF0aCwgb3MucGF0aC5hYnNwYXRoKHNlbGYuX3BhdGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5fZmFjdG9yeSwgZmFjdG9yeSkKKyAgICAgICAgZm9yIHN1YmRpciBpbiAnJywgJ3RtcCcsICduZXcnLCAnY3VyJzoKKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3ViZGlyKQorICAgICAgICAgICAgbW9kZSA9IG9zLnN0YXQocGF0aClbc3RhdC5TVF9NT0RFXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YXQuU19JU0RJUihtb2RlKSwgIk5vdCBhIGRpcmVjdG9yeTogJyVzJyIgJSBwYXRoKQorCisgICAgZGVmIHRlc3RfbGlzdF9mb2xkZXJzKHNlbGYpOgorICAgICAgICAjIExpc3QgZm9sZGVycworICAgICAgICBzZWxmLl9ib3guYWRkX2ZvbGRlcignb25lJykKKyAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ3R3bycpCisgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCd0aHJlZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KCgnb25lJywgJ3R3bycsICd0aHJlZScpKSkKKworICAgIGRlZiB0ZXN0X2dldF9mb2xkZXIoc2VsZik6CisgICAgICAgICMgT3BlbiBmb2xkZXJzCisgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCdmb28uYmFyJykKKyAgICAgICAgZm9sZGVyMCA9IHNlbGYuX2JveC5nZXRfZm9sZGVyKCdmb28uYmFyJykKKyAgICAgICAgZm9sZGVyMC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICcuZm9vLmJhcicpKSkKKyAgICAgICAgZm9sZGVyMSA9IHNlbGYuX2JveC5nZXRfZm9sZGVyKCdmb28uYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb2xkZXIxLmdldF9zdHJpbmcoZm9sZGVyMS5rZXlzKClbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RlbXBsYXRlICUgJ2JhcicpCisKKyAgICBkZWYgdGVzdF9hZGRfYW5kX3JlbW92ZV9mb2xkZXJzKHNlbGYpOgorICAgICAgICAjIERlbGV0ZSBmb2xkZXJzCisgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCdvbmUnKQorICAgICAgICBzZWxmLl9ib3guYWRkX2ZvbGRlcigndHdvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgc2V0KCgnb25lJywgJ3R3bycpKSkKKyAgICAgICAgc2VsZi5fYm94LnJlbW92ZV9mb2xkZXIoJ29uZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIHNldCgoJ3R3bycsKSkpCisgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCd0aHJlZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIHNldCgoJ3R3bycsICd0aHJlZScpKSkKKyAgICAgICAgc2VsZi5fYm94LnJlbW92ZV9mb2xkZXIoJ3RocmVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgc2V0KCgndHdvJywpKSkKKyAgICAgICAgc2VsZi5fYm94LnJlbW92ZV9mb2xkZXIoJ3R3bycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpLCBbXSkKKworICAgIGRlZiB0ZXN0X2NsZWFuKHNlbGYpOgorICAgICAgICAjIFJlbW92ZSBvbGQgZmlsZXMgZnJvbSAndG1wJworICAgICAgICBmb29fcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAndG1wJywgJ2ZvbycpCisgICAgICAgIGJhcl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICd0bXAnLCAnYmFyJykKKyAgICAgICAgd2l0aCBvcGVuKGZvb19wYXRoLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJAIikKKyAgICAgICAgd2l0aCBvcGVuKGJhcl9wYXRoLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJAIikKKyAgICAgICAgc2VsZi5fYm94LmNsZWFuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZvb19wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGJhcl9wYXRoKSkKKyAgICAgICAgZm9vX3N0YXQgPSBvcy5zdGF0KGZvb19wYXRoKQorICAgICAgICBvcy51dGltZShmb29fcGF0aCwgKHRpbWUudGltZSgpIC0gMTI5NjAwIC0gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb29fc3RhdC5zdF9tdGltZSkpCisgICAgICAgIHNlbGYuX2JveC5jbGVhbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoZm9vX3BhdGgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoYmFyX3BhdGgpKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3RtcChzZWxmLCByZXBldGl0aW9ucz0xMCk6CisgICAgICAgICMgQ3JlYXRlIGZpbGVzIGluIHRtcCBkaXJlY3RvcnkKKyAgICAgICAgaG9zdG5hbWUgPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKQorICAgICAgICBpZiAnLycgaW4gaG9zdG5hbWU6CisgICAgICAgICAgICBob3N0bmFtZSA9IGhvc3RuYW1lLnJlcGxhY2UoJy8nLCByJ1wwNTcnKQorICAgICAgICBpZiAnOicgaW4gaG9zdG5hbWU6CisgICAgICAgICAgICBob3N0bmFtZSA9IGhvc3RuYW1lLnJlcGxhY2UoJzonLCByJ1wwNzInKQorICAgICAgICBwaWQgPSBvcy5nZXRwaWQoKQorICAgICAgICBwYXR0ZXJuID0gcmUuY29tcGlsZShyIig/UDx0aW1lPlxkKylcLk0oP1A8TT5cZHsxLDZ9KVAoP1A8UD5cZCspIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlEoP1A8UT5cZCspXC4oP1A8aG9zdD5bXjovXSspIikKKyAgICAgICAgcHJldmlvdXNfZ3JvdXBzID0gTm9uZQorICAgICAgICBmb3IgeCBpbiB4cmFuZ2UocmVwZXRpdGlvbnMpOgorICAgICAgICAgICAgdG1wX2ZpbGUgPSBzZWxmLl9ib3guX2NyZWF0ZV90bXAoKQorICAgICAgICAgICAgaGVhZCwgdGFpbCA9IG9zLnBhdGguc3BsaXQodG1wX2ZpbGUubmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGVhZCwgb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0bXAiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWxlIGluIHdyb25nIGxvY2F0aW9uOiAnJXMnIiAlIGhlYWQpCisgICAgICAgICAgICBtYXRjaCA9IHBhdHRlcm4ubWF0Y2godGFpbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaCBpcyBub3QgTm9uZSwgIkludmFsaWQgZmlsZSBuYW1lOiAnJXMnIiAlIHRhaWwpCisgICAgICAgICAgICBncm91cHMgPSBtYXRjaC5ncm91cHMoKQorICAgICAgICAgICAgaWYgcHJldmlvdXNfZ3JvdXBzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGludChncm91cHNbMF0pLCBpbnQocHJldmlvdXNfZ3JvdXBzWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbi1tb25vdG9uaWMgc2Vjb25kczogJyVzJyBiZWZvcmUgJyVzJyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJldmlvdXNfZ3JvdXBzWzBdLCBncm91cHNbMF0pKQorICAgICAgICAgICAgICAgIGlmIGludChncm91cHNbMF0pID09IGludChwcmV2aW91c19ncm91cHNbMF0pOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChpbnQoZ3JvdXBzWzFdKSwgaW50KHByZXZpb3VzX2dyb3Vwc1sxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb24tbW9ub3RvbmljIG1pbGxpc2Vjb25kczogJyVzJyBiZWZvcmUgJyVzJyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJldmlvdXNfZ3JvdXBzWzFdLCBncm91cHNbMV0pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQoZ3JvdXBzWzJdKSA9PSBwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9jZXNzIElEIG1pc21hdGNoOiAnJXMnIHNob3VsZCBiZSAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChncm91cHNbMl0sIHBpZCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludChncm91cHNbM10pID09IGludChwcmV2aW91c19ncm91cHNbM10pICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbi1zZXF1ZW50aWFsIGNvdW50ZXI6ICclcycgYmVmb3JlICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByZXZpb3VzX2dyb3Vwc1szXSwgZ3JvdXBzWzNdKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ3JvdXBzWzRdID09IGhvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSG9zdCBuYW1lIG1pc21hdGNoOiAnJXMnIHNob3VsZCBiZSAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChncm91cHNbNF0sIGhvc3RuYW1lKSkKKyAgICAgICAgICAgIHByZXZpb3VzX2dyb3VwcyA9IGdyb3VwcworICAgICAgICAgICAgdG1wX2ZpbGUud3JpdGUoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgdG1wX2ZpbGUuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRtcF9maWxlLnJlYWQoKSA9PSBfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICB0bXBfZmlsZS5jbG9zZSgpCisgICAgICAgIGZpbGVfY291bnQgPSBsZW4ob3MubGlzdGRpcihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgInRtcCIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVfY291bnQgPT0gcmVwZXRpdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAiV3JvbmcgZmlsZSBjb3VudDogJyVzJyBzaG91bGQgYmUgJyVzJyIgJQorICAgICAgICAgICAgICAgICAgICAgKGZpbGVfY291bnQsIHJlcGV0aXRpb25zKSkKKworICAgIGRlZiB0ZXN0X3JlZnJlc2goc2VsZik6CisgICAgICAgICMgVXBkYXRlIHRoZSB0YWJsZSBvZiBjb250ZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5fdG9jLCB7fSkKKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Ll90b2MsIHt9KQorICAgICAgICBzZWxmLl9ib3guX3JlZnJlc2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5fdG9jLCB7a2V5MDogb3MucGF0aC5qb2luKCduZXcnLCBrZXkwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTE6IG9zLnBhdGguam9pbignbmV3Jywga2V5MSl9KQorICAgICAgICBrZXkyID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Ll90b2MsIHtrZXkwOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5MTogb3MucGF0aC5qb2luKCduZXcnLCBrZXkxKX0pCisgICAgICAgIHNlbGYuX2JveC5fcmVmcmVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Ll90b2MsIHtrZXkwOiBvcy5wYXRoLmpvaW4oJ25ldycsIGtleTApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5MTogb3MucGF0aC5qb2luKCduZXcnLCBrZXkxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTI6IG9zLnBhdGguam9pbignbmV3Jywga2V5Mil9KQorCisgICAgZGVmIHRlc3RfcmVmcmVzaF9hZnRlcl9zYWZldHlfcGVyaW9kKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMzI1NDogQ2FsbCBfcmVmcmVzaCBhZnRlciB0aGUgImZpbGUgc3lzdGVtIHNhZmV0eQorICAgICAgICAjIHBlcmlvZCIgb2YgMiBzZWNvbmRzIGhhcyBwYXNzZWQ7IF90b2Mgc2hvdWxkIHN0aWxsIGJlCisgICAgICAgICMgdXBkYXRlZCBiZWNhdXNlIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgdG8gX3JlZnJlc2guCisgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAxKQorCisgICAgICAgIHNlbGYuX2JveCA9IHNlbGYuX2ZhY3Rvcnkoc2VsZi5fcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guX3RvYywge30pCisKKyAgICAgICAgIyBFbXVsYXRlIHNsZWVwaW5nLiBJbnN0ZWFkIG9mIHNsZWVwaW5nIGZvciAyIHNlY29uZHMsIHVzZSB0aGUKKyAgICAgICAgIyBza2V3IGZhY3RvciB0byBtYWtlIF9yZWZyZXNoIHRoaW5rIHRoYXQgdGhlIGZpbGVzeXN0ZW0KKyAgICAgICAgIyBzYWZldHkgcGVyaW9kIGhhcyBwYXNzZWQgYW5kIHJlLXJlYWRpbmcgdGhlIF90b2MgaXMgb25seQorICAgICAgICAjIHJlcXVpcmVkIGlmIG10aW1lcyBkaWZmZXIuCisgICAgICAgIHNlbGYuX2JveC5fc2tld2ZhY3RvciA9IC0zCisKKyAgICAgICAgc2VsZi5fYm94Ll9yZWZyZXNoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoc2VsZi5fYm94Ll90b2Mua2V5cygpKSwgc29ydGVkKFtrZXkwLCBrZXkxXSkpCisKKyAgICBkZWYgdGVzdF9sb29rdXAoc2VsZik6CisgICAgICAgICMgTG9vayB1cCBtZXNzYWdlIHN1YnBhdGhzIGluIHRoZSBUT0MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5fYm94Ll9sb29rdXAoJ2ZvbycpKQorICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94Ll9sb29rdXAoa2V5MCksIG9zLnBhdGguam9pbignbmV3Jywga2V5MCkpCisgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ25ldycsIGtleTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5fdG9jLCB7a2V5MDogb3MucGF0aC5qb2luKCduZXcnLCBrZXkwKX0pCisgICAgICAgICMgQmUgc3VyZSB0aGF0IHRoZSBUT0MgaXMgcmVhZCBiYWNrIGZyb20gZGlzayAoc2VlIGlzc3VlICM2ODk2CisgICAgICAgICMgYWJvdXQgYmFkIG10aW1lIGJlaGF2aW91ciBvbiBzb21lIHN5c3RlbXMpLgorICAgICAgICBzZWxmLl9ib3guZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbGFtYmRhOiBzZWxmLl9ib3guX2xvb2t1cChrZXkwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guX3RvYywge30pCisKKyAgICBkZWYgdGVzdF9sb2NrX3VubG9jayhzZWxmKToKKyAgICAgICAgIyBMb2NrIGFuZCB1bmxvY2sgdGhlIG1haWxib3guIEZvciBNYWlsZGlyLCB0aGlzIGRvZXMgbm90aGluZy4KKyAgICAgICAgc2VsZi5fYm94LmxvY2soKQorICAgICAgICBzZWxmLl9ib3gudW5sb2NrKCkKKworICAgIGRlZiB0ZXN0X2ZvbGRlciAoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgYnVnICMxNTY5NzkwOiB2ZXJpZnkgdGhhdCBmb2xkZXJzIHJldHVybmVkIGJ5IC5nZXRfZm9sZGVyKCkKKyAgICAgICAgIyB1c2UgdGhlIHNhbWUgZmFjdG9yeSBmdW5jdGlvbi4KKyAgICAgICAgZGVmIGR1bW15X2ZhY3RvcnkgKHMpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgYm94ID0gc2VsZi5fZmFjdG9yeShzZWxmLl9wYXRoLCBmYWN0b3J5PWR1bW15X2ZhY3RvcnkpCisgICAgICAgIGZvbGRlciA9IGJveC5hZGRfZm9sZGVyKCdmb2xkZXIxJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmb2xkZXIuX2ZhY3RvcnksIGR1bW15X2ZhY3RvcnkpCisKKyAgICAgICAgZm9sZGVyMV9hbGlhcyA9IGJveC5nZXRfZm9sZGVyKCdmb2xkZXIxJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmb2xkZXIxX2FsaWFzLl9mYWN0b3J5LCBkdW1teV9mYWN0b3J5KQorCisgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2luX2ZvbGRlciAoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IG1haWxib3hlcyBzdGlsbCB3b3JrIGlmIHRoZXJlJ3MgYSBzdHJheSBleHRyYSBkaXJlY3RvcnkKKyAgICAgICAgIyBpbiBhIGZvbGRlci4KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgc2VsZi5fYm94LmFkZChtYWlsYm94Lk1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKSkKKworICAgICAgICAjIENyZWF0ZSBhIHN0cmF5IGRpcmVjdG9yeQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ2N1cicsICdzdHJheS1kaXInKSkKKworICAgICAgICAjIENoZWNrIHRoYXQgbG9vcGluZyBzdGlsbCB3b3JrcyB3aXRoIHRoZSBkaXJlY3RvcnkgcHJlc2VudC4KKyAgICAgICAgZm9yIG1zZyBpbiBzZWxmLl9ib3g6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9maWxlX3Blcm1pc3Npb25zKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IG1lc3NhZ2UgZmlsZXMgYXJlIGNyZWF0ZWQgd2l0aG91dCBleGVjdXRlIHBlcm1pc3Npb25zCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9zLCAic3RhdCIpIG9yIG5vdCBoYXNhdHRyKG9zLCAidW1hc2siKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBtc2cgPSBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAgb3JpZ191bWFzayA9IG9zLnVtYXNrKDApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX2JveC5hZGQobXNnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW1hc2sob3JpZ191bWFzaykKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzZWxmLl9ib3guX2xvb2t1cChrZXkpKQorICAgICAgICBtb2RlID0gb3Muc3RhdChwYXRoKS5zdF9tb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZSAmIDAxMTEsIDApCisKKyAgICBkZWYgdGVzdF9mb2xkZXJfZmlsZV9wZXJtcyhzZWxmKToKKyAgICAgICAgIyBGcm9tIGJ1ZyAjMzIyOCwgd2Ugd2FudCB0byB2ZXJpZnkgdGhhdCB0aGUgZmlsZSBjcmVhdGVkIGluc2lkZSBhIE1haWxkaXIKKyAgICAgICAgIyBzdWJmb2xkZXIgaXNuJ3QgbWFya2VkIGFzIGV4ZWN1dGFibGUuCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9zLCAic3RhdCIpIG9yIG5vdCBoYXNhdHRyKG9zLCAidW1hc2siKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG9yaWdfdW1hc2sgPSBvcy51bWFzaygwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJmb2xkZXIgPSBzZWxmLl9ib3guYWRkX2ZvbGRlcignc3ViZm9sZGVyJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVtYXNrKG9yaWdfdW1hc2spCisKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzdWJmb2xkZXIuX3BhdGgsICdtYWlsZGlyZm9sZGVyJykKKyAgICAgICAgc3QgPSBvcy5zdGF0KHBhdGgpCisgICAgICAgIHBlcm1zID0gc3Quc3RfbW9kZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChwZXJtcyAmIDAxMTEpKSAjIEV4ZWN1dGUgYml0cyBzaG91bGQgYWxsIGJlIG9mZi4KKworICAgIGRlZiB0ZXN0X3JlcmVhZChzZWxmKToKKyAgICAgICAgIyBEbyBhbiBpbml0aWFsIHVuY29uZGl0aW9uYWwgcmVmcmVzaAorICAgICAgICBzZWxmLl9ib3guX3JlZnJlc2goKQorCisgICAgICAgICMgUHV0IHRoZSBsYXN0IG1vZGlmaWVkIHRpbWVzIG1vcmUgdGhhbiB0d28gc2Vjb25kcyBpbnRvIHRoZSBwYXN0CisgICAgICAgICMgKGJlY2F1c2UgbXRpbWUgbWF5IGhhdmUgb25seSBhIHR3byBzZWNvbmQgZ3JhbnVsYXJpdHkpLgorICAgICAgICBmb3Igc3ViZGlyIGluICgnY3VyJywgJ25ldycpOgorICAgICAgICAgICAgb3MudXRpbWUob3MucGF0aC5qb2luKHNlbGYuX2JveC5fcGF0aCwgc3ViZGlyKSwKKyAgICAgICAgICAgICAgICAgICAgICh0aW1lLnRpbWUoKS01LCkqMikKKworICAgICAgICAjIEJlY2F1c2UgbXRpbWUgaGFzIGEgdHdvIHNlY29uZCBncmFudWxhcml0eSBpbiB3b3JzdCBjYXNlIChGQVQpLCBhCisgICAgICAgICMgcmVmcmVzaCBpcyBkb25lIHVuY29uZGl0aW9uYWxseSBpZiBjYWxsZWQgZm9yIHdpdGhpbgorICAgICAgICAjIHR3by1zZWNvbmQtcGx1cy1hLWJpdCBvZiB0aGUgbGFzdCBvbmUsIGp1c3QgaW4gY2FzZSB0aGUgbWJveCBoYXMKKyAgICAgICAgIyBjaGFuZ2VkOyBzbyBub3cgd2UgaGF2ZSB0byB3YWl0IGZvciB0aGF0IGludGVydmFsIHRvIGV4cGlyZS4KKyAgICAgICAgIworICAgICAgICAjIEJlY2F1c2UgdGhpcyBpcyBhIHRlc3QsIGVtdWxhdGUgc2xlZXBpbmcuIEluc3RlYWQgb2YKKyAgICAgICAgIyBzbGVlcGluZyBmb3IgMiBzZWNvbmRzLCB1c2UgdGhlIHNrZXcgZmFjdG9yIHRvIG1ha2UgX3JlZnJlc2gKKyAgICAgICAgIyB0aGluayB0aGF0IDIgc2Vjb25kcyBoYXZlIHBhc3NlZCBhbmQgcmUtcmVhZGluZyB0aGUgX3RvYyBpcworICAgICAgICAjIG9ubHkgcmVxdWlyZWQgaWYgbXRpbWVzIGRpZmZlci4KKyAgICAgICAgc2VsZi5fYm94Ll9za2V3ZmFjdG9yID0gLTMKKworICAgICAgICAjIFJlLXJlYWRpbmcgY2F1c2VzIHRoZSAuX3RvYyBhdHRyaWJ1dGUgdG8gYmUgYXNzaWduZWQgYSBuZXcgZGljdGlvbmFyeQorICAgICAgICAjIG9iamVjdCwgc28gd2UnbGwgY2hlY2sgdGhhdCB0aGUgLl90b2MgYXR0cmlidXRlIGlzbid0IGEgZGlmZmVyZW50CisgICAgICAgICMgb2JqZWN0LgorICAgICAgICBvcmlnX3RvYyA9IHNlbGYuX2JveC5fdG9jCisgICAgICAgIGRlZiByZWZyZXNoZWQoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9ib3guX3RvYyBpcyBub3Qgb3JpZ190b2MKKworICAgICAgICBzZWxmLl9ib3guX3JlZnJlc2goKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlZnJlc2hlZCgpKQorCisgICAgICAgICMgTm93LCB3cml0ZSBzb21ldGhpbmcgaW50byBjdXIgYW5kIHJlbW92ZSBpdC4gIFRoaXMgY2hhbmdlcworICAgICAgICAjIHRoZSBtdGltZSBhbmQgc2hvdWxkIGNhdXNlIGEgcmUtcmVhZC4gTm90ZSB0aGF0ICJzbGVlcAorICAgICAgICAjIGVtdWxhdGlvbiIgaXMgc3RpbGwgaW4gZWZmZWN0LCBhcyBza2V3ZmFjdG9yIGlzIC0zLgorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAnY3VyJywgJ3N0cmF5LWZpbGUnKQorICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgJ3cnKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lKQorICAgICAgICBzZWxmLl9ib3guX3JlZnJlc2goKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVmcmVzaGVkKCkpCisKKworY2xhc3MgX1Rlc3RTaW5nbGVGaWxlKFRlc3RNYWlsYm94KToKKyAgICAnJydDb21tb24gdGVzdHMgZm9yIHNpbmdsZS1maWxlIG1haWxib3hlcycnJworCisgICAgZGVmIHRlc3RfYWRkX2RvZXNudF9yZXdyaXRlKHNlbGYpOgorICAgICAgICAjIFdoZW4gb25seSBhZGRpbmcgbWVzc2FnZXMsIGZsdXNoKCkgc2hvdWxkIG5vdCByZXdyaXRlIHRoZQorICAgICAgICAjIG1haWxib3ggZmlsZS4gU2VlIGlzc3VlICM5NTU5LgorCisgICAgICAgICMgSW5vZGUgbnVtYmVyIGNoYW5nZXMgaWYgdGhlIGNvbnRlbnRzIGFyZSB3cml0dGVuIHRvIGFub3RoZXIKKyAgICAgICAgIyBmaWxlIHdoaWNoIGlzIHRoZW4gcmVuYW1lZCBvdmVyIHRoZSBvcmlnaW5hbCBmaWxlLiBTbyB3ZQorICAgICAgICAjIG11c3QgY2hlY2sgdGhhdCB0aGUgaW5vZGUgbnVtYmVyIGRvZXNuJ3QgY2hhbmdlLgorICAgICAgICBpbm9kZV9iZWZvcmUgPSBvcy5zdGF0KHNlbGYuX3BhdGgpLnN0X2lubworCisgICAgICAgIHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBzZWxmLl9ib3guZmx1c2goKQorCisgICAgICAgIGlub2RlX2FmdGVyID0gb3Muc3RhdChzZWxmLl9wYXRoKS5zdF9pbm8KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm9kZV9iZWZvcmUsIGlub2RlX2FmdGVyKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSBtZXNzYWdlIHdhcyByZWFsbHkgYWRkZWQKKyAgICAgICAgc2VsZi5fYm94LmNsb3NlKCkKKyAgICAgICAgc2VsZi5fYm94ID0gc2VsZi5fZmFjdG9yeShzZWxmLl9wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAxKQorCisgICAgZGVmIHRlc3RfcGVybWlzc2lvbnNfYWZ0ZXJfZmx1c2goc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlICM1MzQ2CisKKyAgICAgICAgIyBNYWtlIHRoZSBtYWlsYm94IHdvcmxkIHdyaXRhYmxlLiBJdCdzIHVubGlrZWx5IHRoYXQgdGhlIG5ldworICAgICAgICAjIG1haWxib3ggZmlsZSB3b3VsZCBoYXZlIHRoZXNlIHBlcm1pc3Npb25zIGFmdGVyIGZsdXNoKCksCisgICAgICAgICMgYmVjYXVzZSB1bWFzayB1c3VhbGx5IHByZXZlbnRzIGl0LgorICAgICAgICBtb2RlID0gb3Muc3RhdChzZWxmLl9wYXRoKS5zdF9tb2RlIHwgMG82NjYKKyAgICAgICAgb3MuY2htb2Qoc2VsZi5fcGF0aCwgbW9kZSkKKworICAgICAgICBzZWxmLl9ib3guYWRkKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAgaSA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAxKQorICAgICAgICAjIE5lZWQgdG8gcmVtb3ZlIG9uZSBtZXNzYWdlIHRvIG1ha2UgZmx1c2goKSBjcmVhdGUgYSBuZXcgZmlsZQorICAgICAgICBzZWxmLl9ib3gucmVtb3ZlKGkpCisgICAgICAgIHNlbGYuX2JveC5mbHVzaCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KHNlbGYuX3BhdGgpLnN0X21vZGUsIG1vZGUpCisKKworY2xhc3MgX1Rlc3RNYm94TU1ERihfVGVzdFNpbmdsZUZpbGUpOgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQorICAgICAgICBzZWxmLl9kZWxldGVfcmVjdXJzaXZlbHkoc2VsZi5fcGF0aCkKKyAgICAgICAgZm9yIGxvY2tfcmVtbmFudCBpbiBnbG9iLmdsb2Ioc2VsZi5fcGF0aCArICcuKicpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhsb2NrX3JlbW5hbnQpCisKKyAgICBkZWYgdGVzdF9hZGRfZnJvbV9zdHJpbmcoc2VsZik6CisgICAgICAgICMgQWRkIGEgc3RyaW5nIHN0YXJ0aW5nIHdpdGggJ0Zyb20gJyB0byB0aGUgbWFpbGJveAorICAgICAgICBrZXkgPSBzZWxmLl9ib3guYWRkKCdGcm9tIGZvb0BiYXIgYmxhaFxuRnJvbTogZm9vXG5cbjBcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94W2tleV0uZ2V0X2Zyb20oKSwgJ2Zvb0BiYXIgYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94W2tleV0uZ2V0X3BheWxvYWQoKSwgJzBcbicpCisKKyAgICBkZWYgdGVzdF9hZGRfbWJveF9vcl9tbWRmX21lc3NhZ2Uoc2VsZik6CisgICAgICAgICMgQWRkIGFuIG1ib3hNZXNzYWdlIG9yIE1NREZNZXNzYWdlCisgICAgICAgIGZvciBjbGFzc18gaW4gKG1haWxib3gubWJveE1lc3NhZ2UsIG1haWxib3guTU1ERk1lc3NhZ2UpOgorICAgICAgICAgICAgbXNnID0gY2xhc3NfKCdGcm9tIGZvb0BiYXIgYmxhaFxuRnJvbTogZm9vXG5cbjBcbicpCisgICAgICAgICAgICBrZXkgPSBzZWxmLl9ib3guYWRkKG1zZykKKworICAgIGRlZiB0ZXN0X29wZW5fY2xvc2Vfb3BlbihzZWxmKToKKyAgICAgICAgIyBPcGVuIGFuZCBpbnNwZWN0IHByZXZpb3VzbHktY3JlYXRlZCBtYWlsYm94CisgICAgICAgIHZhbHVlcyA9IFtzZWxmLl90ZW1wbGF0ZSAlIGkgZm9yIGkgaW4geHJhbmdlKDMpXQorICAgICAgICBmb3IgdmFsdWUgaW4gdmFsdWVzOgorICAgICAgICAgICAgc2VsZi5fYm94LmFkZCh2YWx1ZSkKKyAgICAgICAgc2VsZi5fYm94LmNsb3NlKCkKKyAgICAgICAgbXRpbWUgPSBvcy5wYXRoLmdldG10aW1lKHNlbGYuX3BhdGgpCisgICAgICAgIHNlbGYuX2JveCA9IHNlbGYuX2ZhY3Rvcnkoc2VsZi5fcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMykKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9ib3guaXRlcmtleXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5KSwgdmFsdWVzKQorICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG10aW1lLCBvcy5wYXRoLmdldG10aW1lKHNlbGYuX3BhdGgpKQorCisgICAgZGVmIHRlc3RfYWRkX2FuZF9jbG9zZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnlpbmcgdGhhdCBjbG9zaW5nIGEgbWFpbGJveCBkb2Vzbid0IGNoYW5nZSBhZGRlZCBpdGVtcworICAgICAgICBzZWxmLl9ib3guYWRkKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDMpOgorICAgICAgICAgICAgc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIGkpCisgICAgICAgIHNlbGYuX2JveC5hZGQoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBzZWxmLl9ib3guX2ZpbGUuZmx1c2goKQorICAgICAgICBzZWxmLl9ib3guX2ZpbGUuc2VlaygwKQorICAgICAgICBjb250ZW50cyA9IHNlbGYuX2JveC5fZmlsZS5yZWFkKCkKKyAgICAgICAgc2VsZi5fYm94LmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuX3BhdGgsICdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCBmLnJlYWQoKSkKKyAgICAgICAgc2VsZi5fYm94ID0gc2VsZi5fZmFjdG9yeShzZWxmLl9wYXRoKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIlRlc3QgbmVlZHMgZm9yaygpLiIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdzb2NrZXRwYWlyJyksICJUZXN0IG5lZWRzIHNvY2tldHBhaXIoKS4iKQorICAgIGRlZiB0ZXN0X2xvY2tfY29uZmxpY3Qoc2VsZik6CisgICAgICAgICMgRm9yayBvZmYgYSBjaGlsZCBwcm9jZXNzIHRoYXQgd2lsbCBsb2NrIHRoZSBtYWlsYm94IHRlbXBvcmFyaWx5LAorICAgICAgICAjIHVubG9jayBpdCBhbmQgZXhpdC4KKyAgICAgICAgYywgcCA9IHNvY2tldC5zb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGMuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLmNsb3NlKQorCisgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICMgY2hpbGQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIGxvY2sgdGhlIG1haWxib3gsIGFuZCBzaWduYWwgdGhlIHBhcmVudCBpdCBjYW4gcHJvY2VlZAorICAgICAgICAgICAgICAgIHNlbGYuX2JveC5sb2NrKCkKKyAgICAgICAgICAgICAgICBjLnNlbmQoYidjJykKKworICAgICAgICAgICAgICAgICMgd2FpdCB1bnRpbCB0aGUgcGFyZW50IGlzIGRvbmUsIGFuZCB1bmxvY2sgdGhlIG1haWxib3gKKyAgICAgICAgICAgICAgICBjLnJlY3YoMSkKKyAgICAgICAgICAgICAgICBzZWxmLl9ib3gudW5sb2NrKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuX2V4aXQoMCkKKworICAgICAgICAjIEluIHRoZSBwYXJlbnQsIHdhaXQgdW50aWwgdGhlIGNoaWxkIHNpZ25hbHMgaXQgbG9ja2VkIHRoZSBtYWlsYm94LgorICAgICAgICBwLnJlY3YoMSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobWFpbGJveC5FeHRlcm5hbENsYXNoRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9ib3gubG9jaykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICMgU2lnbmFsIHRoZSBjaGlsZCBpdCBjYW4gbm93IHJlbGVhc2UgdGhlIGxvY2sgYW5kIGV4aXQuCisgICAgICAgICAgICBwLnNlbmQoYidwJykKKyAgICAgICAgICAgICMgV2FpdCBmb3IgY2hpbGQgdG8gZXhpdC4gIExvY2tpbmcgc2hvdWxkIG5vdyBzdWNjZWVkLgorICAgICAgICAgICAgZXhpdGVkX3BpZCwgc3RhdHVzID0gb3Mud2FpdHBpZChwaWQsIDApCisKKyAgICAgICAgc2VsZi5fYm94LmxvY2soKQorICAgICAgICBzZWxmLl9ib3gudW5sb2NrKCkKKworICAgIGRlZiB0ZXN0X3JlbG9jayhzZWxmKToKKyAgICAgICAgIyBUZXN0IGNhc2UgZm9yIGJ1ZyAjMTU3NTUwNjogdGhlIG1haWxib3ggY2xhc3Mgd2FzIGxvY2tpbmcgdGhlCisgICAgICAgICMgd3JvbmcgZmlsZSBvYmplY3QgaW4gaXRzIGZsdXNoKCkgbWV0aG9kLgorICAgICAgICBtc2cgPSAiU3ViamVjdDogc3ViXG5cbmJvZHlcbiIKKyAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQobXNnKQorICAgICAgICBzZWxmLl9ib3guZmx1c2goKQorICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQorCisgICAgICAgIHNlbGYuX2JveCA9IHNlbGYuX2ZhY3Rvcnkoc2VsZi5fcGF0aCkKKyAgICAgICAgc2VsZi5fYm94LmxvY2soKQorICAgICAgICBrZXkyID0gc2VsZi5fYm94LmFkZChtc2cpCisgICAgICAgIHNlbGYuX2JveC5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLl9ib3guX2xvY2tlZCkKKyAgICAgICAgc2VsZi5fYm94LmNsb3NlKCkKKworCitjbGFzcyBUZXN0TWJveChfVGVzdE1ib3hNTURGLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBfZmFjdG9yeSA9IGxhbWJkYSBzZWxmLCBwYXRoLCBmYWN0b3J5PU5vbmU6IG1haWxib3gubWJveChwYXRoLCBmYWN0b3J5KQorCisgICAgZGVmIHRlc3RfZmlsZV9wZXJtcyhzZWxmKToKKyAgICAgICAgIyBGcm9tIGJ1ZyAjMzIyOCwgd2Ugd2FudCB0byB2ZXJpZnkgdGhhdCB0aGUgbWFpbGJveCBmaWxlIGlzbid0IGV4ZWN1dGFibGUsCisgICAgICAgICMgZXZlbiBpZiB0aGUgdW1hc2sgaXMgc2V0IHRvIHNvbWV0aGluZyB0aGF0IHdvdWxkIGxlYXZlIGV4ZWN1dGFibGUgYml0cyBzZXQuCisgICAgICAgICMgV2Ugb25seSBydW4gdGhpcyB0ZXN0IG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdW1hc2suCisgICAgICAgIGlmIGhhc2F0dHIob3MsICd1bWFzaycpIGFuZCBoYXNhdHRyKG9zLCAnc3RhdCcpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9sZF91bWFzayA9IG9zLnVtYXNrKDAwNzcpCisgICAgICAgICAgICAgICAgc2VsZi5fYm94LmNsb3NlKCkKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fcGF0aCkKKyAgICAgICAgICAgICAgICBzZWxmLl9ib3ggPSBtYWlsYm94Lm1ib3goc2VsZi5fcGF0aCwgY3JlYXRlPVRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5fYm94LmFkZCgnJykKKyAgICAgICAgICAgICAgICBzZWxmLl9ib3guY2xvc2UoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy51bWFzayhvbGRfdW1hc2spCisKKyAgICAgICAgICAgIHN0ID0gb3Muc3RhdChzZWxmLl9wYXRoKQorICAgICAgICAgICAgcGVybXMgPSBzdC5zdF9tb2RlCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChwZXJtcyAmIDAxMTEpKSAjIEV4ZWN1dGUgYml0cyBzaG91bGQgYWxsIGJlIG9mZi4KKworICAgIGRlZiB0ZXN0X3Rlcm1pbmF0aW5nX25ld2xpbmUoc2VsZik6CisgICAgICAgIG1lc3NhZ2UgPSBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UoKQorICAgICAgICBtZXNzYWdlWydGcm9tJ10gPSAnam9obkBleGFtcGxlLmNvbScKKyAgICAgICAgbWVzc2FnZS5zZXRfcGF5bG9hZCgnTm8gbmV3bGluZSBhdCB0aGUgZW5kJykKKyAgICAgICAgaSA9IHNlbGYuX2JveC5hZGQobWVzc2FnZSkKKworICAgICAgICAjIEEgbmV3bGluZSBzaG91bGQgaGF2ZSBiZWVuIGFwcGVuZGVkIHRvIHRoZSBwYXlsb2FkCisgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl9ib3guZ2V0KGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZS5nZXRfcGF5bG9hZCgpLCAnTm8gbmV3bGluZSBhdCB0aGUgZW5kXG4nKQorCisgICAgZGVmIHRlc3RfbWVzc2FnZV9zZXBhcmF0b3Ioc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhlcmUncyBhbHdheXMgYSBzaW5nbGUgYmxhbmsgbGluZSBhZnRlciBlYWNoIG1lc3NhZ2UKKyAgICAgICAgc2VsZi5fYm94LmFkZCgnRnJvbTogZm9vXG5cbjAnKSAgIyBObyBuZXdsaW5lIGF0IHRoZSBlbmQKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuX3BhdGgpIGFzIGY6CisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YVstMzpdLCAnMFxuXG4nKQorCisgICAgICAgIHNlbGYuX2JveC5hZGQoJ0Zyb206IGZvb1xuXG4wXG4nKSAgIyBOZXdsaW5lIGF0IHRoZSBlbmQKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuX3BhdGgpIGFzIGY6CisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YVstMzpdLCAnMFxuXG4nKQorCisKK2NsYXNzIFRlc3RNTURGKF9UZXN0TWJveE1NREYsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIF9mYWN0b3J5ID0gbGFtYmRhIHNlbGYsIHBhdGgsIGZhY3Rvcnk9Tm9uZTogbWFpbGJveC5NTURGKHBhdGgsIGZhY3RvcnkpCisKKworY2xhc3MgVGVzdE1IKFRlc3RNYWlsYm94LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBfZmFjdG9yeSA9IGxhbWJkYSBzZWxmLCBwYXRoLCBmYWN0b3J5PU5vbmU6IG1haWxib3guTUgocGF0aCwgZmFjdG9yeSkKKworICAgIGRlZiB0ZXN0X2xpc3RfZm9sZGVycyhzZWxmKToKKyAgICAgICAgIyBMaXN0IGZvbGRlcnMKKyAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ29uZScpCisgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCd0d28nKQorICAgICAgICBzZWxmLl9ib3guYWRkX2ZvbGRlcigndGhyZWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNldCgoJ29uZScsICd0d28nLCAndGhyZWUnKSkpCisKKyAgICBkZWYgdGVzdF9nZXRfZm9sZGVyKHNlbGYpOgorICAgICAgICAjIE9wZW4gZm9sZGVycworICAgICAgICBkZWYgZHVtbXlfZmFjdG9yeSAocyk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxmLl9ib3ggPSBzZWxmLl9mYWN0b3J5KHNlbGYuX3BhdGgsIGR1bW15X2ZhY3RvcnkpCisKKyAgICAgICAgbmV3X2ZvbGRlciA9IHNlbGYuX2JveC5hZGRfZm9sZGVyKCdmb28uYmFyJykKKyAgICAgICAgZm9sZGVyMCA9IHNlbGYuX2JveC5nZXRfZm9sZGVyKCdmb28uYmFyJykKKyAgICAgICAgZm9sZGVyMC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICdmb28uYmFyJykpKQorICAgICAgICBmb2xkZXIxID0gc2VsZi5fYm94LmdldF9mb2xkZXIoJ2Zvby5iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbGRlcjEuZ2V0X3N0cmluZyhmb2xkZXIxLmtleXMoKVswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAnYmFyJykKKworICAgICAgICAjIFRlc3QgZm9yIGJ1ZyAjMTU2OTc5MDogdmVyaWZ5IHRoYXQgZm9sZGVycyByZXR1cm5lZCBieSAuZ2V0X2ZvbGRlcigpCisgICAgICAgICMgdXNlIHRoZSBzYW1lIGZhY3RvcnkgZnVuY3Rpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobmV3X2ZvbGRlci5fZmFjdG9yeSwgc2VsZi5fYm94Ll9mYWN0b3J5KQorICAgICAgICBzZWxmLmFzc2VydElzKGZvbGRlcjAuX2ZhY3RvcnksIHNlbGYuX2JveC5fZmFjdG9yeSkKKworICAgIGRlZiB0ZXN0X2FkZF9hbmRfcmVtb3ZlX2ZvbGRlcnMoc2VsZik6CisgICAgICAgICMgRGVsZXRlIGZvbGRlcnMKKyAgICAgICAgc2VsZi5fYm94LmFkZF9mb2xkZXIoJ29uZScpCisgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCd0d28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCBzZXQoKCdvbmUnLCAndHdvJykpKQorICAgICAgICBzZWxmLl9ib3gucmVtb3ZlX2ZvbGRlcignb25lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgc2V0KCgndHdvJywgKSkpCisgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCd0aHJlZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSksIHNldCgoJ3R3bycsICd0aHJlZScpKSkKKyAgICAgICAgc2VsZi5fYm94LnJlbW92ZV9mb2xkZXIoJ3RocmVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94Lmxpc3RfZm9sZGVycygpKSwgc2V0KCgndHdvJywgKSkpCisgICAgICAgIHNlbGYuX2JveC5yZW1vdmVfZm9sZGVyKCd0d28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gubGlzdF9mb2xkZXJzKCkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5saXN0X2ZvbGRlcnMoKSwgW10pCisKKyAgICBkZWYgdGVzdF9zZXF1ZW5jZXMoc2VsZik6CisgICAgICAgICMgR2V0IGFuZCBzZXQgc2VxdWVuY2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zZXF1ZW5jZXMoKSwge30pCisgICAgICAgIG1zZzAgPSBtYWlsYm94Lk1ITWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIG1zZzAuYWRkX3NlcXVlbmNlKCdmb28nKQorICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChtc2cwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCksIHsnZm9vJzpba2V5MF19KQorICAgICAgICBtc2cxID0gbWFpbGJveC5NSE1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAxKQorICAgICAgICBtc2cxLnNldF9zZXF1ZW5jZXMoWydiYXInLCAncmVwbGllZCcsICdmb28nXSkKKyAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQobXNnMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsnZm9vJzpba2V5MCwga2V5MV0sICdiYXInOltrZXkxXSwgJ3JlcGxpZWQnOltrZXkxXX0pCisgICAgICAgIG1zZzAuc2V0X3NlcXVlbmNlcyhbJ2ZsYWdnZWQnXSkKKyAgICAgICAgc2VsZi5fYm94W2tleTBdID0gbXNnMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydmb28nOltrZXkxXSwgJ2Jhcic6W2tleTFdLCAncmVwbGllZCc6W2tleTFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnZmxhZ2dlZCc6W2tleTBdfSkKKyAgICAgICAgc2VsZi5fYm94LnJlbW92ZShrZXkxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCksIHsnZmxhZ2dlZCc6W2tleTBdfSkKKworICAgIGRlZiB0ZXN0X2lzc3VlMjYyNShzZWxmKToKKyAgICAgICAgbXNnMCA9IG1haWxib3guTUhNZXNzYWdlKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAgbXNnMC5hZGRfc2VxdWVuY2UoJ2ZvbycpCisgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKG1zZzApCisgICAgICAgIHJlZm1zZzAgPSBzZWxmLl9ib3guZ2V0X21lc3NhZ2Uoa2V5MCkKKworICAgIGRlZiB0ZXN0X2lzc3VlNzYyNyhzZWxmKToKKyAgICAgICAgbXNnMCA9IG1haWxib3guTUhNZXNzYWdlKHNlbGYuX3RlbXBsYXRlICUgMCkKKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQobXNnMCkKKyAgICAgICAgc2VsZi5fYm94LmxvY2soKQorICAgICAgICBzZWxmLl9ib3gucmVtb3ZlKGtleTApCisgICAgICAgIHNlbGYuX2JveC51bmxvY2soKQorCisgICAgZGVmIHRlc3RfcGFjayhzZWxmKToKKyAgICAgICAgIyBQYWNrIHRoZSBjb250ZW50cyBvZiB0aGUgbWFpbGJveAorICAgICAgICBtc2cwID0gbWFpbGJveC5NSE1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBtc2cxID0gbWFpbGJveC5NSE1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAxKQorICAgICAgICBtc2cyID0gbWFpbGJveC5NSE1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAyKQorICAgICAgICBtc2czID0gbWFpbGJveC5NSE1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAzKQorICAgICAgICBtc2cwLnNldF9zZXF1ZW5jZXMoWydmb28nLCAndW5zZWVuJ10pCisgICAgICAgIG1zZzEuc2V0X3NlcXVlbmNlcyhbJ2ZvbyddKQorICAgICAgICBtc2cyLnNldF9zZXF1ZW5jZXMoWydmb28nLCAnZmxhZ2dlZCddKQorICAgICAgICBtc2czLnNldF9zZXF1ZW5jZXMoWydmb28nLCAnYmFyJywgJ3JlcGxpZWQnXSkKKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQobXNnMCkKKyAgICAgICAga2V5MSA9IHNlbGYuX2JveC5hZGQobXNnMSkKKyAgICAgICAga2V5MiA9IHNlbGYuX2JveC5hZGQobXNnMikKKyAgICAgICAga2V5MyA9IHNlbGYuX2JveC5hZGQobXNnMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsnZm9vJzpba2V5MCxrZXkxLGtleTIsa2V5M10sICd1bnNlZW4nOltrZXkwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZsYWdnZWQnOltrZXkyXSwgJ2Jhcic6W2tleTNdLCAncmVwbGllZCc6W2tleTNdfSkKKyAgICAgICAgc2VsZi5fYm94LnJlbW92ZShrZXkyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydmb28nOltrZXkwLGtleTEsa2V5M10sICd1bnNlZW4nOltrZXkwXSwgJ2Jhcic6W2tleTNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAncmVwbGllZCc6W2tleTNdfSkKKyAgICAgICAgc2VsZi5fYm94LnBhY2soKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5rZXlzKCksIFsxLCAyLCAzXSkKKyAgICAgICAga2V5MCA9IGtleTAKKyAgICAgICAga2V5MSA9IGtleTAgKyAxCisgICAgICAgIGtleTIgPSBrZXkxICsgMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc2VxdWVuY2VzKCksCisgICAgICAgICAgICAgICAgICAgICB7J2Zvbyc6WzEsIDIsIDNdLCAndW5zZWVuJzpbMV0sICdiYXInOlszXSwgJ3JlcGxpZWQnOlszXX0pCisKKyAgICAgICAgIyBUZXN0IGNhc2UgZm9yIHBhY2tpbmcgd2hpbGUgaG9sZGluZyB0aGUgbWFpbGJveCBsb2NrZWQuCisgICAgICAgIGtleTAgPSBzZWxmLl9ib3guYWRkKG1zZzEpCisgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKG1zZzEpCisgICAgICAgIGtleTIgPSBzZWxmLl9ib3guYWRkKG1zZzEpCisgICAgICAgIGtleTMgPSBzZWxmLl9ib3guYWRkKG1zZzEpCisKKyAgICAgICAgc2VsZi5fYm94LnJlbW92ZShrZXkwKQorICAgICAgICBzZWxmLl9ib3gucmVtb3ZlKGtleTIpCisgICAgICAgIHNlbGYuX2JveC5sb2NrKCkKKyAgICAgICAgc2VsZi5fYm94LnBhY2soKQorICAgICAgICBzZWxmLl9ib3gudW5sb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3NlcXVlbmNlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsnZm9vJzpbMSwgMiwgMywgNCwgNV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICd1bnNlZW4nOlsxXSwgJ2Jhcic6WzNdLCAncmVwbGllZCc6WzNdfSkKKworICAgIGRlZiBfZ2V0X2xvY2tfcGF0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAnLm1oX3NlcXVlbmNlcy5sb2NrJykKKworCitjbGFzcyBUZXN0QmFieWwoX1Rlc3RTaW5nbGVGaWxlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBfZmFjdG9yeSA9IGxhbWJkYSBzZWxmLCBwYXRoLCBmYWN0b3J5PU5vbmU6IG1haWxib3guQmFieWwocGF0aCwgZmFjdG9yeSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5fYm94LmNsb3NlKCkKKyAgICAgICAgc2VsZi5fZGVsZXRlX3JlY3Vyc2l2ZWx5KHNlbGYuX3BhdGgpCisgICAgICAgIGZvciBsb2NrX3JlbW5hbnQgaW4gZ2xvYi5nbG9iKHNlbGYuX3BhdGggKyAnLionKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsobG9ja19yZW1uYW50KQorCisgICAgZGVmIHRlc3RfbGFiZWxzKHNlbGYpOgorICAgICAgICAjIEdldCBsYWJlbHMgZnJvbSB0aGUgbWFpbGJveAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfbGFiZWxzKCksIFtdKQorICAgICAgICBtc2cwID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBtc2cwLmFkZF9sYWJlbCgnZm9vJykKKyAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQobXNnMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X2xhYmVscygpLCBbJ2ZvbyddKQorICAgICAgICBtc2cxID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAxKQorICAgICAgICBtc2cxLnNldF9sYWJlbHMoWydiYXInLCAnYW5zd2VyZWQnLCAnZm9vJ10pCisgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKG1zZzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5nZXRfbGFiZWxzKCkpLCBzZXQoWydmb28nLCAnYmFyJ10pKQorICAgICAgICBtc2cwLnNldF9sYWJlbHMoWydibGFoJywgJ2ZpbGVkJ10pCisgICAgICAgIHNlbGYuX2JveFtrZXkwXSA9IG1zZzAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VsZi5fYm94LmdldF9sYWJlbHMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFsnZm9vJywgJ2JhcicsICdibGFoJ10pKQorICAgICAgICBzZWxmLl9ib3gucmVtb3ZlKGtleTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlbGYuX2JveC5nZXRfbGFiZWxzKCkpLCBzZXQoWydibGFoJ10pKQorCisKK2NsYXNzIFRlc3RNZXNzYWdlKFRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBfZmFjdG9yeSA9IG1haWxib3guTWVzc2FnZSAgICAgICMgT3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIHRvIHJldXNlIHRlc3RzCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3BhdGggPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuX2RlbGV0ZV9yZWN1cnNpdmVseShzZWxmLl9wYXRoKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZV93aXRoX2VNTShzZWxmKToKKyAgICAgICAgIyBJbml0aWFsaXplIGJhc2VkIG9uIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSBpbnN0YW5jZQorICAgICAgICBlTU0gPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgbXNnID0gc2VsZi5fZmFjdG9yeShlTU0pCisgICAgICAgIHNlbGYuX3Bvc3RfaW5pdGlhbGl6ZV9ob29rKG1zZykKKyAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKG1zZykKKworICAgIGRlZiB0ZXN0X2luaXRpYWxpemVfd2l0aF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgSW5pdGlhbGl6ZSBiYXNlZCBvbiBzdHJpbmcKKyAgICAgICAgbXNnID0gc2VsZi5fZmFjdG9yeShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIHNlbGYuX3Bvc3RfaW5pdGlhbGl6ZV9ob29rKG1zZykKKyAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKG1zZykKKworICAgIGRlZiB0ZXN0X2luaXRpYWxpemVfd2l0aF9maWxlKHNlbGYpOgorICAgICAgICAjIEluaXRpYWxpemUgYmFzZWQgb24gY29udGVudHMgb2YgZmlsZQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5fcGF0aCwgJ3crJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBtc2cgPSBzZWxmLl9mYWN0b3J5KGYpCisgICAgICAgICAgICBzZWxmLl9wb3N0X2luaXRpYWxpemVfaG9vayhtc2cpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZV93aXRoX25vdGhpbmcoc2VsZik6CisgICAgICAgICMgSW5pdGlhbGl6ZSB3aXRob3V0IGFyZ3VtZW50cworICAgICAgICBtc2cgPSBzZWxmLl9mYWN0b3J5KCkKKyAgICAgICAgc2VsZi5fcG9zdF9pbml0aWFsaXplX2hvb2sobXNnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXNnLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2csIG1haWxib3guTWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZywgc2VsZi5fZmFjdG9yeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cua2V5cygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtc2cuaXNfbXVsdGlwYXJ0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9pbml0aWFsaXplX2luY29ycmVjdGx5KHNlbGYpOgorICAgICAgICAjIEluaXRpYWxpemUgd2l0aCBpbnZhbGlkIGFyZ3VtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLl9mYWN0b3J5KG9iamVjdCgpKSkKKworICAgIGRlZiB0ZXN0X2JlY29tZV9tZXNzYWdlKHNlbGYpOgorICAgICAgICAjIFRha2Ugb24gdGhlIHN0YXRlIG9mIGFub3RoZXIgbWVzc2FnZQorICAgICAgICBlTU0gPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgbXNnID0gc2VsZi5fZmFjdG9yeSgpCisgICAgICAgIG1zZy5fYmVjb21lX21lc3NhZ2UoZU1NKQorICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnKQorCisgICAgZGVmIHRlc3RfZXhwbGFpbl90byhzZWxmKToKKyAgICAgICAgIyBDb3B5IHNlbGYncyBmb3JtYXQtc3BlY2lmaWMgZGF0YSB0byBvdGhlciBtZXNzYWdlIGZvcm1hdHMuCisgICAgICAgICMgVGhpcyB0ZXN0IGlzIHN1cGVyZmljaWFsOyBiZXR0ZXIgb25lcyBhcmUgaW4gVGVzdE1lc3NhZ2VDb252ZXJzaW9uLgorICAgICAgICBtc2cgPSBzZWxmLl9mYWN0b3J5KCkKKyAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5NZXNzYWdlLCBtYWlsYm94Lk1haWxkaXJNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICBtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1ITWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFpbGJveC5CYWJ5bE1lc3NhZ2UsIG1haWxib3guTU1ERk1lc3NhZ2UpOgorICAgICAgICAgICAgb3RoZXJfbXNnID0gY2xhc3NfKCkKKyAgICAgICAgICAgIG1zZy5fZXhwbGFpbl90byhvdGhlcl9tc2cpCisgICAgICAgIG90aGVyX21zZyA9IGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBtc2cuX2V4cGxhaW5fdG8ob3RoZXJfbXNnKSkKKworICAgIGRlZiBfcG9zdF9pbml0aWFsaXplX2hvb2soc2VsZiwgbXNnKToKKyAgICAgICAgIyBPdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMgdG8gY2hlY2sgZXh0cmEgdGhpbmdzIGFmdGVyIGluaXRpYWxpemF0aW9uCisgICAgICAgIHBhc3MKKworCitjbGFzcyBUZXN0TWFpbGRpck1lc3NhZ2UoVGVzdE1lc3NhZ2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIF9mYWN0b3J5ID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZQorCisgICAgZGVmIF9wb3N0X2luaXRpYWxpemVfaG9vayhzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5fc3ViZGlyLCAnbmV3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuX2luZm8sJycpCisKKyAgICBkZWYgdGVzdF9zdWJkaXIoc2VsZik6CisgICAgICAgICMgVXNlIGdldF9zdWJkaXIoKSBhbmQgc2V0X3N1YmRpcigpCisgICAgICAgIG1zZyA9IG1haWxib3guTWFpbGRpck1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc3ViZGlyKCksICduZXcnKQorICAgICAgICBtc2cuc2V0X3N1YmRpcignY3VyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3N1YmRpcigpLCAnY3VyJykKKyAgICAgICAgbXNnLnNldF9zdWJkaXIoJ25ldycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zdWJkaXIoKSwgJ25ldycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogbXNnLnNldF9zdWJkaXIoJ3RtcCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc3ViZGlyKCksICduZXcnKQorICAgICAgICBtc2cuc2V0X3N1YmRpcignbmV3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3N1YmRpcigpLCAnbmV3JykKKyAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKG1zZykKKworICAgIGRlZiB0ZXN0X2ZsYWdzKHNlbGYpOgorICAgICAgICAjIFVzZSBnZXRfZmxhZ3MoKSwgc2V0X2ZsYWdzKCksIGFkZF9mbGFnKCksIHJlbW92ZV9mbGFnKCkKKyAgICAgICAgbXNnID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3N1YmRpcigpLCAnbmV3JykKKyAgICAgICAgbXNnLnNldF9mbGFncygnRicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9zdWJkaXIoKSwgJ25ldycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnRicpCisgICAgICAgIG1zZy5zZXRfZmxhZ3MoJ1NEVFAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJ0RQU1QnKQorICAgICAgICBtc2cuYWRkX2ZsYWcoJ0ZUJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICdERlBTVCcpCisgICAgICAgIG1zZy5yZW1vdmVfZmxhZygnVERSUCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnRlMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc3ViZGlyKCksICduZXcnKQorICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnKQorCisgICAgZGVmIHRlc3RfZGF0ZShzZWxmKToKKyAgICAgICAgIyBVc2UgZ2V0X2RhdGUoKSBhbmQgc2V0X2RhdGUoKQorICAgICAgICBtc2cgPSBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgZGlmZiA9IG1zZy5nZXRfZGF0ZSgpIC0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFicyhkaWZmKSA8IDYwLCBkaWZmKQorICAgICAgICBtc2cuc2V0X2RhdGUoMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZGF0ZSgpLCAwLjApCisKKyAgICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICAgICAjIFVzZSBnZXRfaW5mbygpIGFuZCBzZXRfaW5mbygpCisgICAgICAgIG1zZyA9IG1haWxib3guTWFpbGRpck1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfaW5mbygpLCAnJykKKyAgICAgICAgbXNnLnNldF9pbmZvKCcxLGZvbz1iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfaW5mbygpLCAnMSxmb289YmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG1zZy5zZXRfaW5mbyhOb25lKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKG1zZykKKworICAgIGRlZiB0ZXN0X2luZm9fYW5kX2ZsYWdzKHNlbGYpOgorICAgICAgICAjIFRlc3QgaW50ZXJhY3Rpb24gb2YgaW5mbyBhbmQgZmxhZyBtZXRob2RzCisgICAgICAgIG1zZyA9IG1haWxib3guTWFpbGRpck1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfaW5mbygpLCAnJykKKyAgICAgICAgbXNnLnNldF9mbGFncygnU0YnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJ0ZTJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2luZm8oKSwgJzIsRlMnKQorICAgICAgICBtc2cuc2V0X2luZm8oJzEsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfaW5mbygpLCAnMSwnKQorICAgICAgICBtc2cucmVtb3ZlX2ZsYWcoJ1JQVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2luZm8oKSwgJzEsJykKKyAgICAgICAgbXNnLmFkZF9mbGFnKCdEJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICdEJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2luZm8oKSwgJzIsRCcpCisgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2cpCisKKworY2xhc3MgX1Rlc3RNYm94TU1ERk1lc3NhZ2U6CisKKyAgICBfZmFjdG9yeSA9IG1haWxib3guX21ib3hNTURGTWVzc2FnZQorCisgICAgZGVmIF9wb3N0X2luaXRpYWxpemVfaG9vayhzZWxmLCBtc2cpOgorICAgICAgICBzZWxmLl9jaGVja19mcm9tKG1zZykKKworICAgIGRlZiB0ZXN0X2luaXRpYWxpemVfd2l0aF91bml4ZnJvbShzZWxmKToKKyAgICAgICAgIyBJbml0aWFsaXplIHdpdGggYSBtZXNzYWdlIHRoYXQgYWxyZWFkeSBoYXMgYSBfdW5peGZyb20gYXR0cmlidXRlCisgICAgICAgIG1zZyA9IG1haWxib3guTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIG1zZy5zZXRfdW5peGZyb20oJ0Zyb20gZm9vQGJhciBibGFoJykKKyAgICAgICAgbXNnID0gbWFpbGJveC5tYm94TWVzc2FnZShtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mcm9tKCksICdmb29AYmFyIGJsYWgnKQorCisgICAgZGVmIHRlc3RfZnJvbShzZWxmKToKKyAgICAgICAgIyBHZXQgYW5kIHNldCAiRnJvbSAiIGxpbmUKKyAgICAgICAgbXNnID0gbWFpbGJveC5tYm94TWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIHNlbGYuX2NoZWNrX2Zyb20obXNnKQorICAgICAgICBtc2cuc2V0X2Zyb20oJ2ZvbyBiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZnJvbSgpLCAnZm9vIGJhcicpCisgICAgICAgIG1zZy5zZXRfZnJvbSgnZm9vQGJhcicsIFRydWUpCisgICAgICAgIHNlbGYuX2NoZWNrX2Zyb20obXNnLCAnZm9vQGJhcicpCisgICAgICAgIG1zZy5zZXRfZnJvbSgnYmxhaEB0ZW1wJywgdGltZS5sb2NhbHRpbWUoKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfZnJvbShtc2csICdibGFoQHRlbXAnKQorCisgICAgZGVmIHRlc3RfZmxhZ3Moc2VsZik6CisgICAgICAgICMgVXNlIGdldF9mbGFncygpLCBzZXRfZmxhZ3MoKSwgYWRkX2ZsYWcoKSwgcmVtb3ZlX2ZsYWcoKQorICAgICAgICBtc2cgPSBtYWlsYm94Lm1ib3hNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICcnKQorICAgICAgICBtc2cuc2V0X2ZsYWdzKCdGJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksICdGJykKKyAgICAgICAgbXNnLnNldF9mbGFncygnWE9EUicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnUk9EWCcpCisgICAgICAgIG1zZy5hZGRfZmxhZygnRkEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZmxhZ3MoKSwgJ1JPREZBWCcpCisgICAgICAgIG1zZy5yZW1vdmVfZmxhZygnRkRYQScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnUk8nKQorICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnKQorCisgICAgZGVmIF9jaGVja19mcm9tKHNlbGYsIG1zZywgc2VuZGVyPU5vbmUpOgorICAgICAgICAjIENoZWNrIGNvbnRlbnRzIG9mICJGcm9tICIgbGluZQorICAgICAgICBpZiBzZW5kZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbmRlciA9ICJNQUlMRVItREFFTU9OIgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goc2VuZGVyICsgciIgXHd7M30gXHd7M30gW1xkIF1cZCBbXGQgXVxkOlxkezJ9OiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiXGR7Mn0gXGR7NH0iLCBtc2cuZ2V0X2Zyb20oKSkpCisKKworY2xhc3MgVGVzdE1ib3hNZXNzYWdlKF9UZXN0TWJveE1NREZNZXNzYWdlLCBUZXN0TWVzc2FnZSk6CisKKyAgICBfZmFjdG9yeSA9IG1haWxib3gubWJveE1lc3NhZ2UKKworCitjbGFzcyBUZXN0TUhNZXNzYWdlKFRlc3RNZXNzYWdlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBfZmFjdG9yeSA9IG1haWxib3guTUhNZXNzYWdlCisKKyAgICBkZWYgX3Bvc3RfaW5pdGlhbGl6ZV9ob29rKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLl9zZXF1ZW5jZXMsIFtdKQorCisgICAgZGVmIHRlc3Rfc2VxdWVuY2VzKHNlbGYpOgorICAgICAgICAjIEdldCwgc2V0LCBqb2luLCBhbmQgbGVhdmUgc2VxdWVuY2VzCisgICAgICAgIG1zZyA9IG1haWxib3guTUhNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3NlcXVlbmNlcygpLCBbXSkKKyAgICAgICAgbXNnLnNldF9zZXF1ZW5jZXMoWydmb29iYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3NlcXVlbmNlcygpLCBbJ2Zvb2JhciddKQorICAgICAgICBtc2cuc2V0X3NlcXVlbmNlcyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3NlcXVlbmNlcygpLCBbXSkKKyAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgndW5zZWVuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3NlcXVlbmNlcygpLCBbJ3Vuc2VlbiddKQorICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCdmbGFnZ2VkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3NlcXVlbmNlcygpLCBbJ3Vuc2VlbicsICdmbGFnZ2VkJ10pCisgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ2ZsYWdnZWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc2VxdWVuY2VzKCksIFsndW5zZWVuJywgJ2ZsYWdnZWQnXSkKKyAgICAgICAgbXNnLnJlbW92ZV9zZXF1ZW5jZSgndW5zZWVuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3NlcXVlbmNlcygpLCBbJ2ZsYWdnZWQnXSkKKyAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgnZm9vYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3NlcXVlbmNlcygpLCBbJ2ZsYWdnZWQnLCAnZm9vYmFyJ10pCisgICAgICAgIG1zZy5yZW1vdmVfc2VxdWVuY2UoJ3JlcGxpZWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc2VxdWVuY2VzKCksIFsnZmxhZ2dlZCcsICdmb29iYXInXSkKKyAgICAgICAgbXNnLnNldF9zZXF1ZW5jZXMoWydmb29iYXInLCAncmVwbGllZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfc2VxdWVuY2VzKCksIFsnZm9vYmFyJywgJ3JlcGxpZWQnXSkKKworCitjbGFzcyBUZXN0QmFieWxNZXNzYWdlKFRlc3RNZXNzYWdlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBfZmFjdG9yeSA9IG1haWxib3guQmFieWxNZXNzYWdlCisKKyAgICBkZWYgX3Bvc3RfaW5pdGlhbGl6ZV9ob29rKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLl9sYWJlbHMsIFtdKQorCisgICAgZGVmIHRlc3RfbGFiZWxzKHNlbGYpOgorICAgICAgICAjIEdldCwgc2V0LCBqb2luLCBhbmQgbGVhdmUgbGFiZWxzCisgICAgICAgIG1zZyA9IG1haWxib3guQmFieWxNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2xhYmVscygpLCBbXSkKKyAgICAgICAgbXNnLnNldF9sYWJlbHMoWydmb29iYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2xhYmVscygpLCBbJ2Zvb2JhciddKQorICAgICAgICBtc2cuc2V0X2xhYmVscyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2xhYmVscygpLCBbXSkKKyAgICAgICAgbXNnLmFkZF9sYWJlbCgnZmlsZWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfbGFiZWxzKCksIFsnZmlsZWQnXSkKKyAgICAgICAgbXNnLmFkZF9sYWJlbCgncmVzZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2xhYmVscygpLCBbJ2ZpbGVkJywgJ3Jlc2VudCddKQorICAgICAgICBtc2cuYWRkX2xhYmVsKCdyZXNlbnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfbGFiZWxzKCksIFsnZmlsZWQnLCAncmVzZW50J10pCisgICAgICAgIG1zZy5yZW1vdmVfbGFiZWwoJ2ZpbGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2xhYmVscygpLCBbJ3Jlc2VudCddKQorICAgICAgICBtc2cuYWRkX2xhYmVsKCdmb29iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfbGFiZWxzKCksIFsncmVzZW50JywgJ2Zvb2JhciddKQorICAgICAgICBtc2cucmVtb3ZlX2xhYmVsKCd1bnNlZW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfbGFiZWxzKCksIFsncmVzZW50JywgJ2Zvb2JhciddKQorICAgICAgICBtc2cuc2V0X2xhYmVscyhbJ2Zvb2JhcicsICdhbnN3ZXJlZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfbGFiZWxzKCksIFsnZm9vYmFyJywgJ2Fuc3dlcmVkJ10pCisKKyAgICBkZWYgdGVzdF92aXNpYmxlKHNlbGYpOgorICAgICAgICAjIEdldCwgc2V0LCBhbmQgdXBkYXRlIHZpc2libGUgaGVhZGVycworICAgICAgICBtc2cgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIHZpc2libGUgPSBtc2cuZ2V0X3Zpc2libGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpc2libGUua2V5cygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh2aXNpYmxlLmdldF9wYXlsb2FkKCksIE5vbmUpCisgICAgICAgIHZpc2libGVbJ1VzZXItQWdlbnQnXSA9ICdGb29CYXIgMS4wJworICAgICAgICB2aXNpYmxlWydYLVdoYXRldmVyJ10gPSAnQmxhaCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3Zpc2libGUoKS5rZXlzKCksIFtdKQorICAgICAgICBtc2cuc2V0X3Zpc2libGUodmlzaWJsZSkKKyAgICAgICAgdmlzaWJsZSA9IG1zZy5nZXRfdmlzaWJsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlzaWJsZS5rZXlzKCksIFsnVXNlci1BZ2VudCcsICdYLVdoYXRldmVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlzaWJsZVsnVXNlci1BZ2VudCddLCAnRm9vQmFyIDEuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlzaWJsZVsnWC1XaGF0ZXZlciddLCAnQmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModmlzaWJsZS5nZXRfcGF5bG9hZCgpLCBOb25lKQorICAgICAgICBtc2cudXBkYXRlX3Zpc2libGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpc2libGUua2V5cygpLCBbJ1VzZXItQWdlbnQnLCAnWC1XaGF0ZXZlciddKQorICAgICAgICBzZWxmLmFzc2VydElzKHZpc2libGUuZ2V0X3BheWxvYWQoKSwgTm9uZSkKKyAgICAgICAgdmlzaWJsZSA9IG1zZy5nZXRfdmlzaWJsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlzaWJsZS5rZXlzKCksIFsnVXNlci1BZ2VudCcsICdEYXRlJywgJ0Zyb20nLCAnVG8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1N1YmplY3QnXSkKKyAgICAgICAgZm9yIGhlYWRlciBpbiAoJ1VzZXItQWdlbnQnLCAnRGF0ZScsICdGcm9tJywgJ1RvJywgJ1N1YmplY3QnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlzaWJsZVtoZWFkZXJdLCBtc2dbaGVhZGVyXSkKKworCitjbGFzcyBUZXN0TU1ERk1lc3NhZ2UoX1Rlc3RNYm94TU1ERk1lc3NhZ2UsIFRlc3RNZXNzYWdlKToKKworICAgIF9mYWN0b3J5ID0gbWFpbGJveC5NTURGTWVzc2FnZQorCisKK2NsYXNzIFRlc3RNZXNzYWdlQ29udmVyc2lvbihUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcGxhaW5fdG9feChzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IE1lc3NhZ2UgdG8gYWxsIGZvcm1hdHMKKyAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5NZXNzYWdlLCBtYWlsYm94Lk1haWxkaXJNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICBtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1ITWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFpbGJveC5CYWJ5bE1lc3NhZ2UsIG1haWxib3guTU1ERk1lc3NhZ2UpOgorICAgICAgICAgICAgbXNnX3BsYWluID0gbWFpbGJveC5NZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgICAgIG1zZyA9IGNsYXNzXyhtc2dfcGxhaW4pCisgICAgICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnKQorCisgICAgZGVmIHRlc3RfeF90b19wbGFpbihzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IGFsbCBmb3JtYXRzIHRvIE1lc3NhZ2UKKyAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5NZXNzYWdlLCBtYWlsYm94Lk1haWxkaXJNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICBtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1ITWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFpbGJveC5CYWJ5bE1lc3NhZ2UsIG1haWxib3guTU1ERk1lc3NhZ2UpOgorICAgICAgICAgICAgbXNnID0gY2xhc3NfKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgICAgIG1zZ19wbGFpbiA9IG1haWxib3guTWVzc2FnZShtc2cpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnX3BsYWluKQorCisgICAgZGVmIHRlc3RfeF90b19pbnZhbGlkKHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgYWxsIGZvcm1hdHMgdG8gYW4gaW52YWxpZCBmb3JtYXQKKyAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5NZXNzYWdlLCBtYWlsYm94Lk1haWxkaXJNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICBtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1ITWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFpbGJveC5CYWJ5bE1lc3NhZ2UsIG1haWxib3guTU1ERk1lc3NhZ2UpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGNsYXNzXyhGYWxzZSkpCisKKyAgICBkZWYgdGVzdF9tYWlsZGlyX3RvX21haWxkaXIoc2VsZik6CisgICAgICAgICMgQ29udmVydCBNYWlsZGlyTWVzc2FnZSB0byBNYWlsZGlyTWVzc2FnZQorICAgICAgICBtc2dfbWFpbGRpciA9IG1haWxib3guTWFpbGRpck1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBtc2dfbWFpbGRpci5zZXRfZmxhZ3MoJ0RGUFJTVCcpCisgICAgICAgIG1zZ19tYWlsZGlyLnNldF9zdWJkaXIoJ2N1cicpCisgICAgICAgIGRhdGUgPSBtc2dfbWFpbGRpci5nZXRfZGF0ZSgpCisgICAgICAgIG1zZyA9IG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnX21haWxkaXIpCisgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9mbGFncygpLCAnREZQUlNUJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3N1YmRpcigpLCAnY3VyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2RhdGUoKSwgZGF0ZSkKKworICAgIGRlZiB0ZXN0X21haWxkaXJfdG9fbWJveG1tZGYoc2VsZik6CisgICAgICAgICMgQ29udmVydCBNYWlsZGlyTWVzc2FnZSB0byBtYm94bWVzc2FnZSBhbmQgTU1ERk1lc3NhZ2UKKyAgICAgICAgcGFpcnMgPSAoKCdEJywgJycpLCAoJ0YnLCAnRicpLCAoJ1AnLCAnJyksICgnUicsICdBJyksICgnUycsICdSJyksCisgICAgICAgICAgICAgICAgICgnVCcsICdEJyksICgnREZQUlNUJywgJ1JERkEnKSkKKyAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5tYm94TWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6CisgICAgICAgICAgICBtc2dfbWFpbGRpciA9IG1haWxib3guTWFpbGRpck1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgbXNnX21haWxkaXIuc2V0X2RhdGUoMC4wKQorICAgICAgICAgICAgZm9yIHNldHRpbmcsIHJlc3VsdCBpbiBwYWlyczoKKyAgICAgICAgICAgICAgICBtc2dfbWFpbGRpci5zZXRfZmxhZ3Moc2V0dGluZykKKyAgICAgICAgICAgICAgICBtc2cgPSBjbGFzc18obXNnX21haWxkaXIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksIHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZnJvbSgpLCAnTUFJTEVSLURBRU1PTiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5hc2N0aW1lKHRpbWUuZ210aW1lKDAuMCkpKQorICAgICAgICAgICAgbXNnX21haWxkaXIuc2V0X3N1YmRpcignY3VyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xhc3NfKG1zZ19tYWlsZGlyKS5nZXRfZmxhZ3MoKSwgJ1JPREZBJykKKworICAgIGRlZiB0ZXN0X21haWxkaXJfdG9fbWgoc2VsZik6CisgICAgICAgICMgQ29udmVydCBNYWlsZGlyTWVzc2FnZSB0byBNSE1lc3NhZ2UKKyAgICAgICAgbXNnX21haWxkaXIgPSBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgcGFpcnMgPSAoKCdEJywgWyd1bnNlZW4nXSksICgnRicsIFsndW5zZWVuJywgJ2ZsYWdnZWQnXSksCisgICAgICAgICAgICAgICAgICgnUCcsIFsndW5zZWVuJ10pLCAoJ1InLCBbJ3Vuc2VlbicsICdyZXBsaWVkJ10pLCAoJ1MnLCBbXSksCisgICAgICAgICAgICAgICAgICgnVCcsIFsndW5zZWVuJ10pLCAoJ0RGUFJTVCcsIFsncmVwbGllZCcsICdmbGFnZ2VkJ10pKQorICAgICAgICBmb3Igc2V0dGluZywgcmVzdWx0IGluIHBhaXJzOgorICAgICAgICAgICAgbXNnX21haWxkaXIuc2V0X2ZsYWdzKHNldHRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTUhNZXNzYWdlKG1zZ19tYWlsZGlyKS5nZXRfc2VxdWVuY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X21haWxkaXJfdG9fYmFieWwoc2VsZik6CisgICAgICAgICMgQ29udmVydCBNYWlsZGlyTWVzc2FnZSB0byBCYWJ5bAorICAgICAgICBtc2dfbWFpbGRpciA9IG1haWxib3guTWFpbGRpck1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBwYWlycyA9ICgoJ0QnLCBbJ3Vuc2VlbiddKSwgKCdGJywgWyd1bnNlZW4nXSksCisgICAgICAgICAgICAgICAgICgnUCcsIFsndW5zZWVuJywgJ2ZvcndhcmRlZCddKSwgKCdSJywgWyd1bnNlZW4nLCAnYW5zd2VyZWQnXSksCisgICAgICAgICAgICAgICAgICgnUycsIFtdKSwgKCdUJywgWyd1bnNlZW4nLCAnZGVsZXRlZCddKSwKKyAgICAgICAgICAgICAgICAgKCdERlBSU1QnLCBbJ2RlbGV0ZWQnLCAnYW5zd2VyZWQnLCAnZm9yd2FyZGVkJ10pKQorICAgICAgICBmb3Igc2V0dGluZywgcmVzdWx0IGluIHBhaXJzOgorICAgICAgICAgICAgbXNnX21haWxkaXIuc2V0X2ZsYWdzKHNldHRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guQmFieWxNZXNzYWdlKG1zZ19tYWlsZGlyKS5nZXRfbGFiZWxzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X21ib3htbWRmX3RvX21haWxkaXIoc2VsZik6CisgICAgICAgICMgQ29udmVydCBtYm94TWVzc2FnZSBhbmQgTU1ERk1lc3NhZ2UgdG8gTWFpbGRpck1lc3NhZ2UKKyAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5tYm94TWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6CisgICAgICAgICAgICBtc2dfbWJveE1NREYgPSBjbGFzc18oX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgbXNnX21ib3hNTURGLnNldF9mcm9tKCdmb29AYmFyJywgdGltZS5nbXRpbWUoMC4wKSkKKyAgICAgICAgICAgIHBhaXJzID0gKCgnUicsICdTJyksICgnTycsICcnKSwgKCdEJywgJ1QnKSwgKCdGJywgJ0YnKSwgKCdBJywgJ1InKSwKKyAgICAgICAgICAgICAgICAgICAgICgnUk9ERkEnLCAnRlJTVCcpKQorICAgICAgICAgICAgZm9yIHNldHRpbmcsIHJlc3VsdCBpbiBwYWlyczoKKyAgICAgICAgICAgICAgICBtc2dfbWJveE1NREYuc2V0X2ZsYWdzKHNldHRpbmcpCisgICAgICAgICAgICAgICAgbXNnID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2dfbWJveE1NREYpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2ZsYWdzKCksIHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfZGF0ZSgpLCAwLjApCisgICAgICAgICAgICBtc2dfbWJveE1NREYuc2V0X2ZsYWdzKCdPJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2dfbWJveE1NREYpLmdldF9zdWJkaXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cicpCisKKyAgICBkZWYgdGVzdF9tYm94bW1kZl90b19tYm94bW1kZihzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IG1ib3hNZXNzYWdlIGFuZCBNTURGTWVzc2FnZSB0byBtYm94TWVzc2FnZSBhbmQgTU1ERk1lc3NhZ2UKKyAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5tYm94TWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6CisgICAgICAgICAgICBtc2dfbWJveE1NREYgPSBjbGFzc18oX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgbXNnX21ib3hNTURGLnNldF9mbGFncygnUk9ERkEnKQorICAgICAgICAgICAgbXNnX21ib3hNTURGLnNldF9mcm9tKCdmb29AYmFyJykKKyAgICAgICAgICAgIGZvciBjbGFzczJfIGluIChtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1NREZNZXNzYWdlKToKKyAgICAgICAgICAgICAgICBtc2cyID0gY2xhc3MyXyhtc2dfbWJveE1NREYpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cyLmdldF9mbGFncygpLCAnUk9ERkEnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnMi5nZXRfZnJvbSgpLCAnZm9vQGJhcicpCisKKyAgICBkZWYgdGVzdF9tYm94bW1kZl90b19taChzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IG1ib3hNZXNzYWdlIGFuZCBNTURGTWVzc2FnZSB0byBNSE1lc3NhZ2UKKyAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5tYm94TWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6CisgICAgICAgICAgICBtc2dfbWJveE1NREYgPSBjbGFzc18oX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgcGFpcnMgPSAoKCdSJywgW10pLCAoJ08nLCBbJ3Vuc2VlbiddKSwgKCdEJywgWyd1bnNlZW4nXSksCisgICAgICAgICAgICAgICAgICAgICAoJ0YnLCBbJ3Vuc2VlbicsICdmbGFnZ2VkJ10pLAorICAgICAgICAgICAgICAgICAgICAgKCdBJywgWyd1bnNlZW4nLCAncmVwbGllZCddKSwKKyAgICAgICAgICAgICAgICAgICAgICgnUk9ERkEnLCBbJ3JlcGxpZWQnLCAnZmxhZ2dlZCddKSkKKyAgICAgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CisgICAgICAgICAgICAgICAgbXNnX21ib3hNTURGLnNldF9mbGFncyhzZXR0aW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NSE1lc3NhZ2UobXNnX21ib3hNTURGKS5nZXRfc2VxdWVuY2VzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9tYm94bW1kZl90b19iYWJ5bChzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IG1ib3hNZXNzYWdlIGFuZCBNTURGTWVzc2FnZSB0byBCYWJ5bE1lc3NhZ2UKKyAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5tYm94TWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6CisgICAgICAgICAgICBtc2cgPSBjbGFzc18oX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgcGFpcnMgPSAoKCdSJywgW10pLCAoJ08nLCBbJ3Vuc2VlbiddKSwKKyAgICAgICAgICAgICAgICAgICAgICgnRCcsIFsndW5zZWVuJywgJ2RlbGV0ZWQnXSksICgnRicsIFsndW5zZWVuJ10pLAorICAgICAgICAgICAgICAgICAgICAgKCdBJywgWyd1bnNlZW4nLCAnYW5zd2VyZWQnXSksCisgICAgICAgICAgICAgICAgICAgICAoJ1JPREZBJywgWydkZWxldGVkJywgJ2Fuc3dlcmVkJ10pKQorICAgICAgICAgICAgZm9yIHNldHRpbmcsIHJlc3VsdCBpbiBwYWlyczoKKyAgICAgICAgICAgICAgICBtc2cuc2V0X2ZsYWdzKHNldHRpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94LkJhYnlsTWVzc2FnZShtc2cpLmdldF9sYWJlbHMoKSwgcmVzdWx0KQorCisgICAgZGVmIHRlc3RfbWhfdG9fbWFpbGRpcihzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IE1ITWVzc2FnZSB0byBNYWlsZGlyTWVzc2FnZQorICAgICAgICBwYWlycyA9ICgoJ3Vuc2VlbicsICcnKSwgKCdyZXBsaWVkJywgJ1JTJyksICgnZmxhZ2dlZCcsICdGUycpKQorICAgICAgICBmb3Igc2V0dGluZywgcmVzdWx0IGluIHBhaXJzOgorICAgICAgICAgICAgbXNnID0gbWFpbGJveC5NSE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZShzZXR0aW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X2ZsYWdzKCksIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9zdWJkaXIoKSwgJ2N1cicpCisgICAgICAgIG1zZyA9IG1haWxib3guTUhNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgndW5zZWVuJykKKyAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgncmVwbGllZCcpCisgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ2ZsYWdnZWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnKS5nZXRfZmxhZ3MoKSwgJ0ZSJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X3N1YmRpcigpLCAnY3VyJykKKworICAgIGRlZiB0ZXN0X21oX3RvX21ib3htbWRmKHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgTUhNZXNzYWdlIHRvIG1ib3hNZXNzYWdlIGFuZCBNTURGTWVzc2FnZQorICAgICAgICBwYWlycyA9ICgoJ3Vuc2VlbicsICdPJyksICgncmVwbGllZCcsICdST0EnKSwgKCdmbGFnZ2VkJywgJ1JPRicpKQorICAgICAgICBmb3Igc2V0dGluZywgcmVzdWx0IGluIHBhaXJzOgorICAgICAgICAgICAgbXNnID0gbWFpbGJveC5NSE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZShzZXR0aW5nKQorICAgICAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5tYm94TWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGFzc18obXNnKS5nZXRfZmxhZ3MoKSwgcmVzdWx0KQorICAgICAgICBtc2cgPSBtYWlsYm94Lk1ITWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ3Vuc2VlbicpCisgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ3JlcGxpZWQnKQorICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCdmbGFnZ2VkJykKKyAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5tYm94TWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsYXNzXyhtc2cpLmdldF9mbGFncygpLCAnT0ZBJykKKworICAgIGRlZiB0ZXN0X21oX3RvX21oKHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgTUhNZXNzYWdlIHRvIE1ITWVzc2FnZQorICAgICAgICBtc2cgPSBtYWlsYm94Lk1ITWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ3Vuc2VlbicpCisgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ3JlcGxpZWQnKQorICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKCdmbGFnZ2VkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1ITWVzc2FnZShtc2cpLmdldF9zZXF1ZW5jZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3Vuc2VlbicsICdyZXBsaWVkJywgJ2ZsYWdnZWQnXSkKKworICAgIGRlZiB0ZXN0X21oX3RvX2JhYnlsKHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgTUhNZXNzYWdlIHRvIEJhYnlsTWVzc2FnZQorICAgICAgICBwYWlycyA9ICgoJ3Vuc2VlbicsIFsndW5zZWVuJ10pLCAoJ3JlcGxpZWQnLCBbJ2Fuc3dlcmVkJ10pLAorICAgICAgICAgICAgICAgICAoJ2ZsYWdnZWQnLCBbXSkpCisgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CisgICAgICAgICAgICBtc2cgPSBtYWlsYm94Lk1ITWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKHNldHRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guQmFieWxNZXNzYWdlKG1zZykuZ2V0X2xhYmVscygpLCByZXN1bHQpCisgICAgICAgIG1zZyA9IG1haWxib3guTUhNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgndW5zZWVuJykKKyAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZSgncmVwbGllZCcpCisgICAgICAgIG1zZy5hZGRfc2VxdWVuY2UoJ2ZsYWdnZWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guQmFieWxNZXNzYWdlKG1zZykuZ2V0X2xhYmVscygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsndW5zZWVuJywgJ2Fuc3dlcmVkJ10pCisKKyAgICBkZWYgdGVzdF9iYWJ5bF90b19tYWlsZGlyKHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgQmFieWxNZXNzYWdlIHRvIE1haWxkaXJNZXNzYWdlCisgICAgICAgIHBhaXJzID0gKCgndW5zZWVuJywgJycpLCAoJ2RlbGV0ZWQnLCAnU1QnKSwgKCdmaWxlZCcsICdTJyksCisgICAgICAgICAgICAgICAgICgnYW5zd2VyZWQnLCAnUlMnKSwgKCdmb3J3YXJkZWQnLCAnUFMnKSwgKCdlZGl0ZWQnLCAnUycpLAorICAgICAgICAgICAgICAgICAoJ3Jlc2VudCcsICdQUycpKQorICAgICAgICBmb3Igc2V0dGluZywgcmVzdWx0IGluIHBhaXJzOgorICAgICAgICAgICAgbXNnID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgbXNnLmFkZF9sYWJlbChzZXR0aW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X2ZsYWdzKCksIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NYWlsZGlyTWVzc2FnZShtc2cpLmdldF9zdWJkaXIoKSwgJ2N1cicpCisgICAgICAgIG1zZyA9IG1haWxib3guQmFieWxNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgZm9yIGxhYmVsIGluICgndW5zZWVuJywgJ2RlbGV0ZWQnLCAnZmlsZWQnLCAnYW5zd2VyZWQnLCAnZm9yd2FyZGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAnZWRpdGVkJywgJ3Jlc2VudCcpOgorICAgICAgICAgICAgbXNnLmFkZF9sYWJlbChsYWJlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWlsYm94Lk1haWxkaXJNZXNzYWdlKG1zZykuZ2V0X2ZsYWdzKCksICdQUlQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTWFpbGRpck1lc3NhZ2UobXNnKS5nZXRfc3ViZGlyKCksICdjdXInKQorCisgICAgZGVmIHRlc3RfYmFieWxfdG9fbWJveG1tZGYoc2VsZik6CisgICAgICAgICMgQ29udmVydCBCYWJ5bE1lc3NhZ2UgdG8gbWJveE1lc3NhZ2UgYW5kIE1NREZNZXNzYWdlCisgICAgICAgIHBhaXJzID0gKCgndW5zZWVuJywgJ08nKSwgKCdkZWxldGVkJywgJ1JPRCcpLCAoJ2ZpbGVkJywgJ1JPJyksCisgICAgICAgICAgICAgICAgICgnYW5zd2VyZWQnLCAnUk9BJyksICgnZm9yd2FyZGVkJywgJ1JPJyksICgnZWRpdGVkJywgJ1JPJyksCisgICAgICAgICAgICAgICAgICgncmVzZW50JywgJ1JPJykpCisgICAgICAgIGZvciBzZXR0aW5nLCByZXN1bHQgaW4gcGFpcnM6CisgICAgICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1NREZNZXNzYWdlKToKKyAgICAgICAgICAgICAgICBtc2cgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICAgICAgbXNnLmFkZF9sYWJlbChzZXR0aW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xhc3NfKG1zZykuZ2V0X2ZsYWdzKCksIHJlc3VsdCkKKyAgICAgICAgbXNnID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBmb3IgbGFiZWwgaW4gKCd1bnNlZW4nLCAnZGVsZXRlZCcsICdmaWxlZCcsICdhbnN3ZXJlZCcsICdmb3J3YXJkZWQnLAorICAgICAgICAgICAgICAgICAgICAgICdlZGl0ZWQnLCAncmVzZW50Jyk6CisgICAgICAgICAgICBtc2cuYWRkX2xhYmVsKGxhYmVsKQorICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1NREZNZXNzYWdlKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xhc3NfKG1zZykuZ2V0X2ZsYWdzKCksICdPREEnKQorCisgICAgZGVmIHRlc3RfYmFieWxfdG9fbWgoc2VsZik6CisgICAgICAgICMgQ29udmVydCBCYWJ5bE1lc3NhZ2UgdG8gTUhNZXNzYWdlCisgICAgICAgIHBhaXJzID0gKCgndW5zZWVuJywgWyd1bnNlZW4nXSksICgnZGVsZXRlZCcsIFtdKSwgKCdmaWxlZCcsIFtdKSwKKyAgICAgICAgICAgICAgICAgKCdhbnN3ZXJlZCcsIFsncmVwbGllZCddKSwgKCdmb3J3YXJkZWQnLCBbXSksICgnZWRpdGVkJywgW10pLAorICAgICAgICAgICAgICAgICAoJ3Jlc2VudCcsIFtdKSkKKyAgICAgICAgZm9yIHNldHRpbmcsIHJlc3VsdCBpbiBwYWlyczoKKyAgICAgICAgICAgIG1zZyA9IG1haWxib3guQmFieWxNZXNzYWdlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgICAgIG1zZy5hZGRfbGFiZWwoc2V0dGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGJveC5NSE1lc3NhZ2UobXNnKS5nZXRfc2VxdWVuY2VzKCksIHJlc3VsdCkKKyAgICAgICAgbXNnID0gbWFpbGJveC5CYWJ5bE1lc3NhZ2UoX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBmb3IgbGFiZWwgaW4gKCd1bnNlZW4nLCAnZGVsZXRlZCcsICdmaWxlZCcsICdhbnN3ZXJlZCcsICdmb3J3YXJkZWQnLAorICAgICAgICAgICAgICAgICAgICAgICdlZGl0ZWQnLCAncmVzZW50Jyk6CisgICAgICAgICAgICBtc2cuYWRkX2xhYmVsKGxhYmVsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxib3guTUhNZXNzYWdlKG1zZykuZ2V0X3NlcXVlbmNlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsndW5zZWVuJywgJ3JlcGxpZWQnXSkKKworICAgIGRlZiB0ZXN0X2JhYnlsX3RvX2JhYnlsKHNlbGYpOgorICAgICAgICAjIENvbnZlcnQgQmFieWxNZXNzYWdlIHRvIEJhYnlsTWVzc2FnZQorICAgICAgICBtc2cgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgIG1zZy51cGRhdGVfdmlzaWJsZSgpCisgICAgICAgIGZvciBsYWJlbCBpbiAoJ3Vuc2VlbicsICdkZWxldGVkJywgJ2ZpbGVkJywgJ2Fuc3dlcmVkJywgJ2ZvcndhcmRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgJ2VkaXRlZCcsICdyZXNlbnQnKToKKyAgICAgICAgICAgIG1zZy5hZGRfbGFiZWwobGFiZWwpCisgICAgICAgIG1zZzIgPSBtYWlsYm94LkJhYnlsTWVzc2FnZShtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnMi5nZXRfbGFiZWxzKCksIFsndW5zZWVuJywgJ2RlbGV0ZWQnLCAnZmlsZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fuc3dlcmVkJywgJ2ZvcndhcmRlZCcsICdlZGl0ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc2VudCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfdmlzaWJsZSgpLmtleXMoKSwgbXNnMi5nZXRfdmlzaWJsZSgpLmtleXMoKSkKKyAgICAgICAgZm9yIGtleSBpbiBtc2cuZ2V0X3Zpc2libGUoKS5rZXlzKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfdmlzaWJsZSgpW2tleV0sIG1zZzIuZ2V0X3Zpc2libGUoKVtrZXldKQorCisKK2NsYXNzIFRlc3RQcm94eUZpbGVCYXNlKFRlc3RCYXNlKToKKworICAgIGRlZiBfdGVzdF9yZWFkKHNlbGYsIHByb3h5KToKKyAgICAgICAgIyBSZWFkIGJ5IGJ5dGUKKyAgICAgICAgcHJveHkuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoKSwgJ2JhcicpCisgICAgICAgIHByb3h5LnNlZWsoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkKCksICdhcicpCisgICAgICAgIHByb3h5LnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkKDIpLCAnYmEnKQorICAgICAgICBwcm94eS5zZWVrKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZCgtMSksICdhcicpCisgICAgICAgIHByb3h5LnNlZWsoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkKDEwMDApLCAncicpCisKKyAgICBkZWYgX3Rlc3RfcmVhZGxpbmUoc2VsZiwgcHJveHkpOgorICAgICAgICAjIFJlYWQgYnkgbGluZQorICAgICAgICBwcm94eS5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmUoKSwgJ2ZvbycgKyBvcy5saW5lc2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lKCksICdiYXInICsgb3MubGluZXNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkbGluZSgpLCAnZnJlZCcgKyBvcy5saW5lc2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lKCksICdib2InKQorICAgICAgICBwcm94eS5zZWVrKDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmUoKSwgJ28nICsgb3MubGluZXNlcCkKKyAgICAgICAgcHJveHkuc2Vlayg2ICsgMiAqIGxlbihvcy5saW5lc2VwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkbGluZSgpLCAnZnJlZCcgKyBvcy5saW5lc2VwKQorICAgICAgICBwcm94eS5zZWVrKDYgKyAyICogbGVuKG9zLmxpbmVzZXApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lKDIpLCAnZnInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lKC0xMCksICdlZCcgKyBvcy5saW5lc2VwKQorCisgICAgZGVmIF90ZXN0X3JlYWRsaW5lcyhzZWxmLCBwcm94eSk6CisgICAgICAgICMgUmVhZCBtdWx0aXBsZSBsaW5lcworICAgICAgICBwcm94eS5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmVzKCksIFsnZm9vJyArIG9zLmxpbmVzZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXInICsgb3MubGluZXNlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyZWQnICsgb3MubGluZXNlcCwgJ2JvYiddKQorICAgICAgICBwcm94eS5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZGxpbmVzKDIpLCBbJ2ZvbycgKyBvcy5saW5lc2VwXSkKKyAgICAgICAgcHJveHkuc2VlaygzICsgbGVuKG9zLmxpbmVzZXApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lcyg0ICsgbGVuKG9zLmxpbmVzZXApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ2JhcicgKyBvcy5saW5lc2VwLCAnZnJlZCcgKyBvcy5saW5lc2VwXSkKKyAgICAgICAgcHJveHkuc2VlaygzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWRsaW5lcygxMDAwKSwgW29zLmxpbmVzZXAsICdiYXInICsgb3MubGluZXNlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJlZCcgKyBvcy5saW5lc2VwLCAnYm9iJ10pCisKKyAgICBkZWYgX3Rlc3RfaXRlcmF0aW9uKHNlbGYsIHByb3h5KToKKyAgICAgICAgIyBJdGVyYXRlIGJ5IGxpbmUKKyAgICAgICAgcHJveHkuc2VlaygwKQorICAgICAgICBpdGVyYXRvciA9IGl0ZXIocHJveHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdGVyYXRvciksCisgICAgICAgICAgICBbJ2ZvbycgKyBvcy5saW5lc2VwLCAnYmFyJyArIG9zLmxpbmVzZXAsICdmcmVkJyArIG9zLmxpbmVzZXAsICdib2InXSkKKworICAgIGRlZiBfdGVzdF9zZWVrX2FuZF90ZWxsKHNlbGYsIHByb3h5KToKKyAgICAgICAgIyBTZWVrIGFuZCB1c2UgdGVsbCB0byBjaGVjayBwb3NpdGlvbgorICAgICAgICBwcm94eS5zZWVrKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkudGVsbCgpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQobGVuKG9zLmxpbmVzZXApKSwgb3MubGluZXNlcCkKKyAgICAgICAgcHJveHkuc2VlaygyLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoMSArIGxlbihvcy5saW5lc2VwKSksICdyJyArIG9zLmxpbmVzZXApCisgICAgICAgIHByb3h5LnNlZWsoLTMgLSBsZW4ob3MubGluZXNlcCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkucmVhZCgzKSwgJ2JhcicpCisgICAgICAgIHByb3h5LnNlZWsoMiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm94eS5yZWFkKCksICdvJyArIG9zLmxpbmVzZXAgKyAnYmFyJyArIG9zLmxpbmVzZXApCisgICAgICAgIHByb3h5LnNlZWsoMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5LnJlYWQoKSwgJycpCisKKyAgICBkZWYgX3Rlc3RfY2xvc2Uoc2VsZiwgcHJveHkpOgorICAgICAgICAjIENsb3NlIGEgZmlsZQorICAgICAgICBwcm94eS5jbG9zZSgpCisgICAgICAgICMgSXNzdWUgMTE3MDAgc3Vic2VxdWVudCBjbG9zZXMgc2hvdWxkIGJlIGEgbm8tb3AsIG5vdCBhbiBlcnJvci4KKyAgICAgICAgcHJveHkuY2xvc2UoKQorCisKK2NsYXNzIFRlc3RQcm94eUZpbGUoVGVzdFByb3h5RmlsZUJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fcGF0aCA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICAgICAgc2VsZi5fZmlsZSA9IG9wZW4oc2VsZi5fcGF0aCwgJ3diKycpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQorICAgICAgICBzZWxmLl9kZWxldGVfcmVjdXJzaXZlbHkoc2VsZi5fcGF0aCkKKworICAgIGRlZiB0ZXN0X2luaXRpYWxpemUoc2VsZik6CisgICAgICAgICMgSW5pdGlhbGl6ZSBhbmQgY2hlY2sgcG9zaXRpb24KKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnZm9vJykKKyAgICAgICAgcG9zID0gc2VsZi5fZmlsZS50ZWxsKCkKKyAgICAgICAgcHJveHkwID0gbWFpbGJveC5fUHJveHlGaWxlKHNlbGYuX2ZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkwLnRlbGwoKSwgcG9zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2ZpbGUudGVsbCgpLCBwb3MpCisgICAgICAgIHByb3h5MSA9IG1haWxib3guX1Byb3h5RmlsZShzZWxmLl9maWxlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3h5MS50ZWxsKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZmlsZS50ZWxsKCksIHBvcykKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJ2JhcicpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZChtYWlsYm94Ll9Qcm94eUZpbGUoc2VsZi5fZmlsZSkpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnZm9vJXNiYXIlc2ZyZWQlc2JvYicgJSAob3MubGluZXNlcCwgb3MubGluZXNlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MubGluZXNlcCkpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGxpbmUobWFpbGJveC5fUHJveHlGaWxlKHNlbGYuX2ZpbGUpKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCdmb28lc2JhciVzZnJlZCVzYm9iJyAlIChvcy5saW5lc2VwLCBvcy5saW5lc2VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saW5lc2VwKSkKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkbGluZXMobWFpbGJveC5fUHJveHlGaWxlKHNlbGYuX2ZpbGUpKQorCisgICAgZGVmIHRlc3RfaXRlcmF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCdmb28lc2JhciVzZnJlZCVzYm9iJyAlIChvcy5saW5lc2VwLCBvcy5saW5lc2VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saW5lc2VwKSkKKyAgICAgICAgc2VsZi5fdGVzdF9pdGVyYXRpb24obWFpbGJveC5fUHJveHlGaWxlKHNlbGYuX2ZpbGUpKQorCisgICAgZGVmIHRlc3Rfc2Vla19hbmRfdGVsbChzZWxmKToKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnZm9vJXNiYXIlcycgJSAob3MubGluZXNlcCwgb3MubGluZXNlcCkpCisgICAgICAgIHNlbGYuX3Rlc3Rfc2Vla19hbmRfdGVsbChtYWlsYm94Ll9Qcm94eUZpbGUoc2VsZi5fZmlsZSkpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnZm9vJXNiYXIlcycgJSAob3MubGluZXNlcCwgb3MubGluZXNlcCkpCisgICAgICAgIHNlbGYuX3Rlc3RfY2xvc2UobWFpbGJveC5fUHJveHlGaWxlKHNlbGYuX2ZpbGUpKQorCisKK2NsYXNzIFRlc3RQYXJ0aWFsRmlsZShUZXN0UHJveHlGaWxlQmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9wYXRoID0gdGVzdF9zdXBwb3J0LlRFU1RGTgorICAgICAgICBzZWxmLl9maWxlID0gb3BlbihzZWxmLl9wYXRoLCAnd2IrJykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpCisgICAgICAgIHNlbGYuX2RlbGV0ZV9yZWN1cnNpdmVseShzZWxmLl9wYXRoKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZShzZWxmKToKKyAgICAgICAgIyBJbml0aWFsaXplIGFuZCBjaGVjayBwb3NpdGlvbgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCdmb28nICsgb3MubGluZXNlcCArICdiYXInKQorICAgICAgICBwb3MgPSBzZWxmLl9maWxlLnRlbGwoKQorICAgICAgICBwcm94eSA9IG1haWxib3guX1BhcnRpYWxGaWxlKHNlbGYuX2ZpbGUsIDIsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJveHkudGVsbCgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2ZpbGUudGVsbCgpLCBwb3MpCisKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCcqKipiYXIqKionKQorICAgICAgICBzZWxmLl90ZXN0X3JlYWQobWFpbGJveC5fUGFydGlhbEZpbGUoc2VsZi5fZmlsZSwgMywgNikpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnISEhISFmb28lc2JhciVzZnJlZCVzYm9iISEhISEnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAob3MubGluZXNlcCwgb3MubGluZXNlcCwgb3MubGluZXNlcCkpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGxpbmUobWFpbGJveC5fUGFydGlhbEZpbGUoc2VsZi5fZmlsZSwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOCArIDMgKiBsZW4ob3MubGluZXNlcCkpKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCdmb28lc2JhciVzZnJlZCVzYm9iPz8/Pz8nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAob3MubGluZXNlcCwgb3MubGluZXNlcCwgb3MubGluZXNlcCkpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGxpbmVzKG1haWxib3guX1BhcnRpYWxGaWxlKHNlbGYuX2ZpbGUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzICsgMyAqIGxlbihvcy5saW5lc2VwKSkpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJ19fX19mb28lc2JhciVzZnJlZCVzYm9iIyMjIycgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChvcy5saW5lc2VwLCBvcy5saW5lc2VwLCBvcy5saW5lc2VwKSkKKyAgICAgICAgc2VsZi5fdGVzdF9pdGVyYXRpb24obWFpbGJveC5fUGFydGlhbEZpbGUoc2VsZi5fZmlsZSwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcgKyAzICogbGVuKG9zLmxpbmVzZXApKSkKKworICAgIGRlZiB0ZXN0X3NlZWtfYW5kX3RlbGwoc2VsZik6CisgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJygoKGZvbyVzYmFyJXMkJCQnICUgKG9zLmxpbmVzZXAsIG9zLmxpbmVzZXApKQorICAgICAgICBzZWxmLl90ZXN0X3NlZWtfYW5kX3RlbGwobWFpbGJveC5fUGFydGlhbEZpbGUoc2VsZi5fZmlsZSwgMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkgKyAyICogbGVuKG9zLmxpbmVzZXApKSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLl9maWxlLndyaXRlKCcmZm9vJXNiYXIlc14nICUgKG9zLmxpbmVzZXAsIG9zLmxpbmVzZXApKQorICAgICAgICBzZWxmLl90ZXN0X2Nsb3NlKG1haWxib3guX1BhcnRpYWxGaWxlKHNlbGYuX2ZpbGUsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiArIDMgKiBsZW4ob3MubGluZXNlcCkpKQorCisKKyMjIFN0YXJ0OiB0ZXN0cyBmcm9tIHRoZSBvcmlnaW5hbCBtb2R1bGUgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KS4KKworRlJPTV8gPSAiRnJvbSBzb21lLmJvZHlAZHVtbXkuZG9tYWluICBTYXQgSnVsIDI0IDEzOjQzOjM1IDIwMDRcbiIKK0RVTU1ZX01FU1NBR0UgPSAiIiJcCitGcm9tOiBzb21lLmJvZHlAZHVtbXkuZG9tYWluCitUbzogbWVAbXkuZG9tYWluCitTdWJqZWN0OiBTaW1wbGUgVGVzdAorCitUaGlzIGlzIGEgZHVtbXkgbWVzc2FnZS4KKyIiIgorCitjbGFzcyBNYWlsZGlyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIGNyZWF0ZSBhIG5ldyBtYWlsZGlyIG1haWxib3ggdG8gd29yayB3aXRoOgorICAgICAgICBzZWxmLl9kaXIgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2VsZi5fZGlyKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ybXRyZWUoc2VsZi5fZGlyKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzZWxmLl9kaXIpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhzZWxmLl9kaXIpCisgICAgICAgIG9zLm1rZGlyKHNlbGYuX2RpcikKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNlbGYuX2RpciwgImN1ciIpKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCAidG1wIikpCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihzZWxmLl9kaXIsICJuZXciKSkKKyAgICAgICAgc2VsZi5fY291bnRlciA9IDEKKyAgICAgICAgc2VsZi5fbXNnZmlsZXMgPSBbXQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBtYXAob3MudW5saW5rLCBzZWxmLl9tc2dmaWxlcykKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJtZGlyKG9zLnBhdGguam9pbihzZWxmLl9kaXIsICJjdXIiKSkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJtZGlyKG9zLnBhdGguam9pbihzZWxmLl9kaXIsICJ0bXAiKSkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJtZGlyKG9zLnBhdGguam9pbihzZWxmLl9kaXIsICJuZXciKSkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJtZGlyKHNlbGYuX2RpcikKKworICAgIGRlZiBjcmVhdGVNZXNzYWdlKHNlbGYsIGRpciwgbWJveD1GYWxzZSk6CisgICAgICAgIHQgPSBpbnQodGltZS50aW1lKCkgJSAxMDAwMDAwKQorICAgICAgICBwaWQgPSBzZWxmLl9jb3VudGVyCisgICAgICAgIHNlbGYuX2NvdW50ZXIgKz0gMQorICAgICAgICBmaWxlbmFtZSA9IG9zLmV4dHNlcC5qb2luKChzdHIodCksIHN0cihwaWQpLCAibXlob3N0bmFtZSIsICJteWRvbWFpbiIpKQorICAgICAgICB0bXBuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX2RpciwgInRtcCIsIGZpbGVuYW1lKQorICAgICAgICBuZXduYW1lID0gb3MucGF0aC5qb2luKHNlbGYuX2RpciwgZGlyLCBmaWxlbmFtZSkKKyAgICAgICAgd2l0aCBvcGVuKHRtcG5hbWUsICJ3IikgYXMgZnA6CisgICAgICAgICAgICBzZWxmLl9tc2dmaWxlcy5hcHBlbmQodG1wbmFtZSkKKyAgICAgICAgICAgIGlmIG1ib3g6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoRlJPTV8pCisgICAgICAgICAgICBmcC53cml0ZShEVU1NWV9NRVNTQUdFKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGluayIpOgorICAgICAgICAgICAgb3MubGluayh0bXBuYW1lLCBuZXduYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2l0aCBvcGVuKG5ld25hbWUsICJ3IikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoRFVNTVlfTUVTU0FHRSkKKyAgICAgICAgc2VsZi5fbXNnZmlsZXMuYXBwZW5kKG5ld25hbWUpCisgICAgICAgIHJldHVybiB0bXBuYW1lCisKKyAgICBkZWYgdGVzdF9lbXB0eV9tYWlsZGlyKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGFuIGVtcHR5IG1haWxkaXIgbWFpbGJveCIiIgorICAgICAgICAjIFRlc3QgZm9yIHJlZ3Jlc3Npb24gb24gYnVnICMxMTc0OTA6CisgICAgICAgICMgTWFrZSBzdXJlIHRoZSBib3hlcyBhdHRyaWJ1dGUgYWN0dWFsbHkgZ2V0cyBzZXQuCisgICAgICAgIHNlbGYubWJveCA9IG1haWxib3guTWFpbGRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2VsZi5tYm94LCAiYm94ZXMiKSkKKyAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZShsZW4oc2VsZi5tYm94LmJveGVzKSA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubWJveC5uZXh0KCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5tYm94Lm5leHQoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X25vbmVtcHR5X21haWxkaXJfY3VyKHNlbGYpOgorICAgICAgICBzZWxmLmNyZWF0ZU1lc3NhZ2UoImN1ciIpCisgICAgICAgIHNlbGYubWJveCA9IG1haWxib3guTWFpbGRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLm1ib3guYm94ZXMpID09IDEpCisgICAgICAgIG1zZyA9IHNlbGYubWJveC5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtc2csIE5vbmUpCisgICAgICAgIG1zZy5mcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5tYm94Lm5leHQoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLm1ib3gubmV4dCgpLCBOb25lKQorCisgICAgZGVmIHRlc3Rfbm9uZW1wdHlfbWFpbGRpcl9uZXcoc2VsZik6CisgICAgICAgIHNlbGYuY3JlYXRlTWVzc2FnZSgibmV3IikKKyAgICAgICAgc2VsZi5tYm94ID0gbWFpbGJveC5NYWlsZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICNzZWxmLmFzc2VydFRydWUobGVuKHNlbGYubWJveC5ib3hlcykgPT0gMSkKKyAgICAgICAgbXNnID0gc2VsZi5tYm94Lm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KG1zZywgTm9uZSkKKyAgICAgICAgbXNnLmZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLm1ib3gubmV4dCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubWJveC5uZXh0KCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9ub25lbXB0eV9tYWlsZGlyX2JvdGgoc2VsZik6CisgICAgICAgIHNlbGYuY3JlYXRlTWVzc2FnZSgiY3VyIikKKyAgICAgICAgc2VsZi5jcmVhdGVNZXNzYWdlKCJuZXciKQorICAgICAgICBzZWxmLm1ib3ggPSBtYWlsYm94Lk1haWxkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZShsZW4oc2VsZi5tYm94LmJveGVzKSA9PSAyKQorICAgICAgICBtc2cgPSBzZWxmLm1ib3gubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobXNnLCBOb25lKQorICAgICAgICBtc2cuZnAuY2xvc2UoKQorICAgICAgICBtc2cgPSBzZWxmLm1ib3gubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobXNnLCBOb25lKQorICAgICAgICBtc2cuZnAuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubWJveC5uZXh0KCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5tYm94Lm5leHQoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3VuaXhfbWJveChzZWxmKToKKyAgICAgICAgIyMjIHNob3VsZCBiZSBiZXR0ZXIhCisgICAgICAgIGltcG9ydCBlbWFpbC5wYXJzZXIKKyAgICAgICAgZm5hbWUgPSBzZWxmLmNyZWF0ZU1lc3NhZ2UoImN1ciIsIFRydWUpCisgICAgICAgIG4gPSAwCisgICAgICAgIGZpZCA9IG9wZW4oZm5hbWUpCisgICAgICAgIGZvciBtc2cgaW4gbWFpbGJveC5Qb3J0YWJsZVVuaXhNYWlsYm94KGZpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWwucGFyc2VyLlBhcnNlcigpLnBhcnNlKToKKyAgICAgICAgICAgIG4gKz0gMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dbInN1YmplY3QiXSwgIlNpbXBsZSBUZXN0IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN0cihtc2cpKSwgbGVuKEZST01fKStsZW4oRFVNTVlfTUVTU0FHRSkpCisgICAgICAgIGZpZC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgMSkKKworIyMgRW5kOiBjbGFzc2VzIGZyb20gdGhlIG9yaWdpbmFsIG1vZHVsZSAoZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpLgorCisKK19zYW1wbGVfbWVzc2FnZSA9ICIiIlwKK1JldHVybi1QYXRoOiA8Z2tqQGdyZWdvcnlram9obnNvbi5jb20+CitYLU9yaWdpbmFsLVRvOiBna2orcGVyc29uQGxvY2FsaG9zdAorRGVsaXZlcmVkLVRvOiBna2orcGVyc29uQGxvY2FsaG9zdAorUmVjZWl2ZWQ6IGZyb20gbG9jYWxob3N0IChsb2NhbGhvc3QgWzEyNy4wLjAuMV0pCisgICAgICAgIGJ5IGFuZHkuZ3JlZ29yeWtqb2huc29uLmNvbSAoUG9zdGZpeCkgd2l0aCBFU01UUCBpZCAzNTZFRDlERDE3CisgICAgICAgIGZvciA8Z2tqK3BlcnNvbkBsb2NhbGhvc3Q+OyBXZWQsIDEzIEp1bCAyMDA1IDE3OjIzOjE2IC0wNDAwIChFRFQpCitEZWxpdmVyZWQtVG86IGdrakBzdW5kYW5jZS5ncmVnb3J5a2pvaG5zb24uY29tCitSZWNlaXZlZDogZnJvbSBsb2NhbGhvc3QgWzEyNy4wLjAuMV0KKyAgICAgICAgYnkgbG9jYWxob3N0IHdpdGggUE9QMyAoZmV0Y2htYWlsLTYuMi41KQorICAgICAgICBmb3IgZ2tqK3BlcnNvbkBsb2NhbGhvc3QgKHNpbmdsZS1kcm9wKTsgV2VkLCAxMyBKdWwgMjAwNSAxNzoyMzoxNiAtMDQwMCAoRURUKQorUmVjZWl2ZWQ6IGZyb20gYW5keS5ncmVnb3J5a2pvaG5zb24uY29tIChhbmR5LmdyZWdvcnlram9obnNvbi5jb20gWzY0LjMyLjIzNS4yMjhdKQorICAgICAgICBieSBzdW5kYW5jZS5ncmVnb3J5a2pvaG5zb24uY29tIChQb3N0Zml4KSB3aXRoIEVTTVRQIGlkIDVCMDU2MzE2NzQ2CisgICAgICAgIGZvciA8Z2tqQGdyZWdvcnlram9obnNvbi5jb20+OyBXZWQsIDEzIEp1bCAyMDA1IDE3OjIzOjExIC0wNDAwIChFRFQpCitSZWNlaXZlZDogYnkgYW5keS5ncmVnb3J5a2pvaG5zb24uY29tIChQb3N0Zml4LCBmcm9tIHVzZXJpZCAxMDAwKQorICAgICAgICBpZCA0OTBDRDlERDE3OyBXZWQsIDEzIEp1bCAyMDA1IDE3OjIzOjExIC0wNDAwIChFRFQpCitEYXRlOiBXZWQsIDEzIEp1bCAyMDA1IDE3OjIzOjExIC0wNDAwCitGcm9tOiAiR3JlZ29yeSBLLiBKb2huc29uIiA8Z2tqQGdyZWdvcnlram9obnNvbi5jb20+CitUbzogZ2tqQGdyZWdvcnlram9obnNvbi5jb20KK1N1YmplY3Q6IFNhbXBsZSBtZXNzYWdlCitNZXNzYWdlLUlEOiA8MjAwNTA3MTMyMTIzMTEuR0M0NzAxQGFuZHkuZ3JlZ29yeWtqb2huc29uLmNvbT4KK01pbWUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ik5NdU16OW50MDV3ODBkNCsiCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKK1VzZXItQWdlbnQ6IE11dHQvMS41LjlpCisKKworLS1OTXVNejludDA1dzgwZDQrCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWkKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorCitUaGlzIGlzIGEgc2FtcGxlIG1lc3NhZ2UuCisKKy0tCitHcmVnb3J5IEsuIEpvaG5zb24KKworLS1OTXVNejludDA1dzgwZDQrCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9InRleHQuZ3oiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworSDRzSUNNMkQxVUlBQTNSbGVIUUFDOG5JTEZZQW9rU0ZrdFNLRW9XMHpKeFVQYTd3ekpJTWhaTHlmSVdjekx6VVlqMHVBSFRzCiszRllsQUFBQQorCistLU5NdU16OW50MDV3ODBkNCstLQorIiIiCisKK19zYW1wbGVfaGVhZGVycyA9IHsKKyAgICAiUmV0dXJuLVBhdGgiOiI8Z2tqQGdyZWdvcnlram9obnNvbi5jb20+IiwKKyAgICAiWC1PcmlnaW5hbC1UbyI6ImdraitwZXJzb25AbG9jYWxob3N0IiwKKyAgICAiRGVsaXZlcmVkLVRvIjoiZ2tqK3BlcnNvbkBsb2NhbGhvc3QiLAorICAgICJSZWNlaXZlZCI6IiIiZnJvbSBsb2NhbGhvc3QgKGxvY2FsaG9zdCBbMTI3LjAuMC4xXSkKKyAgICAgICAgYnkgYW5keS5ncmVnb3J5a2pvaG5zb24uY29tIChQb3N0Zml4KSB3aXRoIEVTTVRQIGlkIDM1NkVEOUREMTcKKyAgICAgICAgZm9yIDxna2orcGVyc29uQGxvY2FsaG9zdD47IFdlZCwgMTMgSnVsIDIwMDUgMTc6MjM6MTYgLTA0MDAgKEVEVCkiIiIsCisgICAgIkRlbGl2ZXJlZC1UbyI6ImdrakBzdW5kYW5jZS5ncmVnb3J5a2pvaG5zb24uY29tIiwKKyAgICAiUmVjZWl2ZWQiOiIiImZyb20gbG9jYWxob3N0IFsxMjcuMC4wLjFdCisgICAgICAgIGJ5IGxvY2FsaG9zdCB3aXRoIFBPUDMgKGZldGNobWFpbC02LjIuNSkKKyAgICAgICAgZm9yIGdraitwZXJzb25AbG9jYWxob3N0IChzaW5nbGUtZHJvcCk7IFdlZCwgMTMgSnVsIDIwMDUgMTc6MjM6MTYgLTA0MDAgKEVEVCkiIiIsCisgICAgIlJlY2VpdmVkIjoiIiJmcm9tIGFuZHkuZ3JlZ29yeWtqb2huc29uLmNvbSAoYW5keS5ncmVnb3J5a2pvaG5zb24uY29tIFs2NC4zMi4yMzUuMjI4XSkKKyAgICAgICAgYnkgc3VuZGFuY2UuZ3JlZ29yeWtqb2huc29uLmNvbSAoUG9zdGZpeCkgd2l0aCBFU01UUCBpZCA1QjA1NjMxNjc0NgorICAgICAgICBmb3IgPGdrakBncmVnb3J5a2pvaG5zb24uY29tPjsgV2VkLCAxMyBKdWwgMjAwNSAxNzoyMzoxMSAtMDQwMCAoRURUKSIiIiwKKyAgICAiUmVjZWl2ZWQiOiIiImJ5IGFuZHkuZ3JlZ29yeWtqb2huc29uLmNvbSAoUG9zdGZpeCwgZnJvbSB1c2VyaWQgMTAwMCkKKyAgICAgICAgaWQgNDkwQ0Q5REQxNzsgV2VkLCAxMyBKdWwgMjAwNSAxNzoyMzoxMSAtMDQwMCAoRURUKSIiIiwKKyAgICAiRGF0ZSI6IldlZCwgMTMgSnVsIDIwMDUgMTc6MjM6MTEgLTA0MDAiLAorICAgICJGcm9tIjoiIiIiR3JlZ29yeSBLLiBKb2huc29uIiA8Z2tqQGdyZWdvcnlram9obnNvbi5jb20+IiIiLAorICAgICJUbyI6ImdrakBncmVnb3J5a2pvaG5zb24uY29tIiwKKyAgICAiU3ViamVjdCI6IlNhbXBsZSBtZXNzYWdlIiwKKyAgICAiTWltZS1WZXJzaW9uIjoiMS4wIiwKKyAgICAiQ29udGVudC1UeXBlIjoiIiJtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSJOTXVNejludDA1dzgwZDQrXCIiIiIsCisgICAgIkNvbnRlbnQtRGlzcG9zaXRpb24iOiJpbmxpbmUiLAorICAgICJVc2VyLUFnZW50IjogIk11dHQvMS41LjlpIiB9CisKK19zYW1wbGVfcGF5bG9hZHMgPSAoIiIiVGhpcyBpcyBhIHNhbXBsZSBtZXNzYWdlLgorCistLQorR3JlZ29yeSBLLiBKb2huc29uCisiIiIsCisiIiJINHNJQ00yRDFVSUFBM1JsZUhRQUM4bklMRllBb2tTRmt0U0tFb1cwekp4VVBhN3d6SklNaFpMeWZJV2N6THpVWWowdUFIVHMKKzNGWWxBQUFBCisiIiIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3RzID0gKFRlc3RNYWlsYm94U3VwZXJjbGFzcywgVGVzdE1haWxkaXIsIFRlc3RNYm94LCBUZXN0TU1ERiwgVGVzdE1ILAorICAgICAgICAgICAgIFRlc3RCYWJ5bCwgVGVzdE1lc3NhZ2UsIFRlc3RNYWlsZGlyTWVzc2FnZSwgVGVzdE1ib3hNZXNzYWdlLAorICAgICAgICAgICAgIFRlc3RNSE1lc3NhZ2UsIFRlc3RCYWJ5bE1lc3NhZ2UsIFRlc3RNTURGTWVzc2FnZSwKKyAgICAgICAgICAgICBUZXN0TWVzc2FnZUNvbnZlcnNpb24sIFRlc3RQcm94eUZpbGUsIFRlc3RQYXJ0aWFsRmlsZSwKKyAgICAgICAgICAgICBNYWlsZGlyVGVzdENhc2UpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisgICAgdGVzdF9zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21hcnNoYWwucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tYXJzaGFsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZThlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tYXJzaGFsLnB5CkBAIC0wLDAgKzEsMzMyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgLSotIGNvZGluZzogaXNvLTg4NTktMSAtKi0KKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBtYXJzaGFsCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworCitjbGFzcyBJbnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBmdWxsIHJhbmdlIG9mIFB5dGhvbiBpbnRzLgorICAgICAgICBuID0gc3lzLm1heGludAorICAgICAgICB3aGlsZSBuOgorICAgICAgICAgICAgZm9yIGV4cGVjdGVkIGluICgtbiwgbik6CisgICAgICAgICAgICAgICAgcyA9IG1hcnNoYWwuZHVtcHMoZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgZ290ID0gbWFyc2hhbC5sb2FkcyhzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKyAgICAgICAgICAgICAgICBtYXJzaGFsLmR1bXAoZXhwZWN0ZWQsIGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikpCisgICAgICAgICAgICAgICAgZ290ID0gbWFyc2hhbC5sb2FkKGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorICAgICAgICAgICAgbiA9IG4gPj4gMQorICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2ludDY0KHNlbGYpOgorICAgICAgICAjIFNpbXVsYXRlIGludCBtYXJzaGFsaW5nIG9uIGEgNjQtYml0IGJveC4gIFRoaXMgaXMgbW9zdCBpbnRlcmVzdGluZyBpZgorICAgICAgICAjIHdlJ3JlIHJ1bm5pbmcgdGhlIHRlc3Qgb24gYSAzMi1iaXQgYm94LCBvZiBjb3Vyc2UuCisKKyAgICAgICAgZGVmIHRvX2xpdHRsZV9lbmRpYW5fc3RyaW5nKHZhbHVlLCBuYnl0ZXMpOgorICAgICAgICAgICAgYnl0ZXMgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobmJ5dGVzKToKKyAgICAgICAgICAgICAgICBieXRlcy5hcHBlbmQoY2hyKHZhbHVlICYgMHhmZikpCisgICAgICAgICAgICAgICAgdmFsdWUgPj49IDgKKyAgICAgICAgICAgIHJldHVybiAnJy5qb2luKGJ5dGVzKQorCisgICAgICAgIG1heGludDY0ID0gKDFMIDw8IDYzKSAtIDEKKyAgICAgICAgbWluaW50NjQgPSAtbWF4aW50NjQtMQorCisgICAgICAgIGZvciBiYXNlIGluIG1heGludDY0LCBtaW5pbnQ2NCwgLW1heGludDY0LCAtKG1pbmludDY0ID4+IDEpOgorICAgICAgICAgICAgd2hpbGUgYmFzZToKKyAgICAgICAgICAgICAgICBzID0gJ0knICsgdG9fbGl0dGxlX2VuZGlhbl9zdHJpbmcoYmFzZSwgOCkKKyAgICAgICAgICAgICAgICBnb3QgPSBtYXJzaGFsLmxvYWRzKHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBnb3QpCisgICAgICAgICAgICAgICAgaWYgYmFzZSA9PSAtMTogICMgYSBmaXhlZC1wb2ludCBmb3Igc2hpZnRpbmcgcmlnaHQgMQorICAgICAgICAgICAgICAgICAgICBiYXNlID0gMAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJhc2UgPj49IDEKKworICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CisgICAgICAgIGZvciBiIGluIChUcnVlLCBGYWxzZSk6CisgICAgICAgICAgICBuZXcgPSBtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHMoYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIG5ldykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShiKSwgdHlwZShuZXcpKQorICAgICAgICAgICAgbWFyc2hhbC5kdW1wKGIsIGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikpCisgICAgICAgICAgICBuZXcgPSBtYXJzaGFsLmxvYWQoZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgbmV3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGIpLCB0eXBlKG5ldykpCisKK2NsYXNzIEZsb2F0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGEgZmV3IGZsb2F0cworICAgICAgICBzbWFsbCA9IDFlLTI1CisgICAgICAgIG4gPSBzeXMubWF4aW50ICogMy43ZTI1MAorICAgICAgICB3aGlsZSBuID4gc21hbGw6CisgICAgICAgICAgICBmb3IgZXhwZWN0ZWQgaW4gKC1uLCBuKToKKyAgICAgICAgICAgICAgICBmID0gZmxvYXQoZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgcyA9IG1hcnNoYWwuZHVtcHMoZikKKyAgICAgICAgICAgICAgICBnb3QgPSBtYXJzaGFsLmxvYWRzKHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLCBnb3QpCisgICAgICAgICAgICAgICAgbWFyc2hhbC5kdW1wKGYsIGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikpCisgICAgICAgICAgICAgICAgZ290ID0gbWFyc2hhbC5sb2FkKGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLCBnb3QpCisgICAgICAgICAgICBuIC89IDEyMy40NTY3CisKKyAgICAgICAgZiA9IDAuMAorICAgICAgICBzID0gbWFyc2hhbC5kdW1wcyhmLCAyKQorICAgICAgICBnb3QgPSBtYXJzaGFsLmxvYWRzKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZiwgZ290KQorICAgICAgICAjIGFuZCB3aXRoIHZlcnNpb24gPD0gMSAoZmxvYXRzIG1hcnNoYWxsZWQgZGlmZmVyZW50bHkgdGhlbikKKyAgICAgICAgcyA9IG1hcnNoYWwuZHVtcHMoZiwgMSkKKyAgICAgICAgZ290ID0gbWFyc2hhbC5sb2FkcyhzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYsIGdvdCkKKworICAgICAgICBuID0gc3lzLm1heGludCAqIDMuN2UtMjUwCisgICAgICAgIHdoaWxlIG4gPCBzbWFsbDoKKyAgICAgICAgICAgIGZvciBleHBlY3RlZCBpbiAoLW4sIG4pOgorICAgICAgICAgICAgICAgIGYgPSBmbG9hdChleHBlY3RlZCkKKworICAgICAgICAgICAgICAgIHMgPSBtYXJzaGFsLmR1bXBzKGYpCisgICAgICAgICAgICAgICAgZ290ID0gbWFyc2hhbC5sb2FkcyhzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZiwgZ290KQorCisgICAgICAgICAgICAgICAgcyA9IG1hcnNoYWwuZHVtcHMoZiwgMSkKKyAgICAgICAgICAgICAgICBnb3QgPSBtYXJzaGFsLmxvYWRzKHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLCBnb3QpCisKKyAgICAgICAgICAgICAgICBtYXJzaGFsLmR1bXAoZiwgZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSkKKyAgICAgICAgICAgICAgICBnb3QgPSBtYXJzaGFsLmxvYWQoZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYsIGdvdCkKKworICAgICAgICAgICAgICAgIG1hcnNoYWwuZHVtcChmLCBmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpLCAxKQorICAgICAgICAgICAgICAgIGdvdCA9IG1hcnNoYWwubG9hZChmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZiwgZ290KQorICAgICAgICAgICAgbiAqPSAxMjMuNDU2NworICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworY2xhc3MgU3RyaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisgICAgICAgIGZvciBzIGluIFt1IiIsIHUiQW5kcuggUHJldmluIiwgdSJhYmMiLCB1IiAiKjEwMDAwXToKKyAgICAgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyhzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgbmV3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHMpLCB0eXBlKG5ldykpCisgICAgICAgICAgICBtYXJzaGFsLmR1bXAocywgZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSkKKyAgICAgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZChmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBuZXcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocyksIHR5cGUobmV3KSkKKyAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9zdHJpbmcoc2VsZik6CisgICAgICAgIGZvciBzIGluIFsiIiwgIkFuZHLoIFByZXZpbiIsICJhYmMiLCAiICIqMTAwMDBdOgorICAgICAgICAgICAgbmV3ID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBuZXcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocyksIHR5cGUobmV3KSkKKyAgICAgICAgICAgIG1hcnNoYWwuZHVtcChzLCBmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpKQorICAgICAgICAgICAgbmV3ID0gbWFyc2hhbC5sb2FkKGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIG5ldykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzKSwgdHlwZShuZXcpKQorICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2J1ZmZlcihzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gWyIiLCAiQW5kcuggUHJldmluIiwgImFiYyIsICIgIioxMDAwMF06CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCgiYnVmZmVyLi4gbm90IHN1cHBvcnRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgICAgIGIgPSBidWZmZXIocykKKyAgICAgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyhiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgbmV3KQorICAgICAgICAgICAgbWFyc2hhbC5kdW1wKGIsIGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikpCisgICAgICAgICAgICBuZXcgPSBtYXJzaGFsLmxvYWQoZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgbmV3KQorICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworY2xhc3MgRXhjZXB0aW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyhTdG9wSXRlcmF0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTdG9wSXRlcmF0aW9uLCBuZXcpCisKK2NsYXNzIENvZGVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY29kZShzZWxmKToKKyAgICAgICAgY28gPSBFeGNlcHRpb25UZXN0Q2FzZS50ZXN0X2V4Y2VwdGlvbnMuZnVuY19jb2RlCisgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyhjbykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY28sIG5ldykKKworY2xhc3MgQ29udGFpbmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGQgPSB7J2FzdHJpbmcnOiAnZm9vQGJhci5iYXouc3BhbScsCisgICAgICAgICAnYWZsb2F0JzogNzI4My40MywKKyAgICAgICAgICdhbmludCc6IDIqKjIwLAorICAgICAgICAgJ2FzaG9ydGxvbmcnOiAyTCwKKyAgICAgICAgICdhbGlzdCc6IFsnLnp5eC40MSddLAorICAgICAgICAgJ2F0dXBsZSc6ICgnLnp5eC40MScsKSoxMCwKKyAgICAgICAgICdhYm9vbGVhbic6IEZhbHNlLAorICAgICAgICAgJ2F1bmljb2RlJzogdSJBbmRy6CBQcmV2aW4iCisgICAgICAgICB9CisgICAgZGVmIHRlc3RfZGljdChzZWxmKToKKyAgICAgICAgbmV3ID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kLCBuZXcpCisgICAgICAgIG1hcnNoYWwuZHVtcChzZWxmLmQsIGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikpCisgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZChmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZCwgbmV3KQorICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2xpc3Qoc2VsZik6CisgICAgICAgIGxzdCA9IHNlbGYuZC5pdGVtcygpCisgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyhsc3QpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdCwgbmV3KQorICAgICAgICBtYXJzaGFsLmR1bXAobHN0LCBmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpKQorICAgICAgICBuZXcgPSBtYXJzaGFsLmxvYWQoZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QsIG5ldykKKyAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF90dXBsZShzZWxmKToKKyAgICAgICAgdCA9IHR1cGxlKHNlbGYuZC5rZXlzKCkpCisgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyh0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBuZXcpCisgICAgICAgIG1hcnNoYWwuZHVtcCh0LCBmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpKQorICAgICAgICBuZXcgPSBtYXJzaGFsLmxvYWQoZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBuZXcpCisgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3Rfc2V0cyhzZWxmKToKKyAgICAgICAgZm9yIGNvbnN0cnVjdG9yIGluIChzZXQsIGZyb3plbnNldCk6CisgICAgICAgICAgICB0ID0gY29uc3RydWN0b3Ioc2VsZi5kLmtleXMoKSkKKyAgICAgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyh0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgbmV3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobmV3LCBjb25zdHJ1Y3RvcikpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHQpLCBpZChuZXcpKQorICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHQsIGZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikpCisgICAgICAgICAgICBuZXcgPSBtYXJzaGFsLmxvYWQoZmlsZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgbmV3KQorICAgICAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKK2NsYXNzIEJ1Z3NUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYnVnXzU4ODg0NTIoc2VsZik6CisgICAgICAgICMgU2ltcGxlLW1pbmRlZCBjaGVjayBmb3IgU0YgNTg4NDUyOiBEZWJ1ZyBidWlsZCBjcmFzaGVzCisgICAgICAgIG1hcnNoYWwuZHVtcHMoWzEyOF0gKiAxMDAwKQorCisgICAgZGVmIHRlc3RfcGF0Y2hfODczMjI0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIG1hcnNoYWwubG9hZHMsICcwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCBtYXJzaGFsLmxvYWRzLCAnZicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgbWFyc2hhbC5sb2FkcywgbWFyc2hhbC5kdW1wcyg1TClbOi0xXSkKKworICAgIGRlZiB0ZXN0X3ZlcnNpb25fYXJndW1lbnQoc2VsZik6CisgICAgICAgICMgUHl0aG9uIDIuNC4wIGNyYXNoZXMgZm9yIGFueSBjYWxsIHRvIG1hcnNoYWwuZHVtcHMoeCwgeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHMoNSwgMCkpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyg1LCAxKSksIDUpCisKKyAgICBkZWYgdGVzdF9mdXp6KHNlbGYpOgorICAgICAgICAjIHNpbXBsZSB0ZXN0IHRoYXQgaXQncyBhdCBsZWFzdCBub3QgKnRvdGFsbHkqIHRyaXZpYWwgdG8KKyAgICAgICAgIyBjcmFzaCBmcm9tIGJhZCBtYXJzaGFsIGRhdGEKKyAgICAgICAgZm9yIGMgaW4gW2NocihpKSBmb3IgaSBpbiByYW5nZSgyNTYpXToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtYXJzaGFsLmxvYWRzKGMpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2xvYWRzX3JlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgcyA9ICdjJyArICgnWCcgKiA0KjQpICsgJ3snICogMioqMjAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFyc2hhbC5sb2FkcywgcykKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbl9saW1pdChzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgYSBkZWVwbHkgbmVzdGVkIHN0cnVjdHVyZS4KKyAgICAgICAgaGVhZCA9IGxhc3QgPSBbXQorICAgICAgICAjIFRoZSBtYXggc3RhY2sgZGVwdGggc2hvdWxkIG1hdGNoIHRoZSB2YWx1ZSBpbiBQeXRob24vbWFyc2hhbC5jLgorICAgICAgICBNQVhfTUFSU0hBTF9TVEFDS19ERVBUSCA9IDIwMDAKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTUFYX01BUlNIQUxfU1RBQ0tfREVQVEggLSAyKToKKyAgICAgICAgICAgIGxhc3QuYXBwZW5kKFswXSkKKyAgICAgICAgICAgIGxhc3QgPSBsYXN0Wy0xXQorCisgICAgICAgICMgVmVyaWZ5IHdlIGRvbid0IGJsb3cgb3V0IHRoZSBzdGFjayB3aXRoIGR1bXBzL2xvYWQuCisgICAgICAgIGRhdGEgPSBtYXJzaGFsLmR1bXBzKGhlYWQpCisgICAgICAgIG5ld19oZWFkID0gbWFyc2hhbC5sb2FkcyhkYXRhKQorICAgICAgICAjIERvbid0IHVzZSA9PSB0byBjb21wYXJlIG9iamVjdHMsIGl0IGNhbiBleGNlZWQgdGhlIHJlY3Vyc2lvbiBsaW1pdC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obmV3X2hlYWQpLCBsZW4oaGVhZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5ld19oZWFkWzBdKSwgbGVuKGhlYWRbMF0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuZXdfaGVhZFstMV0pLCBsZW4oaGVhZFstMV0pKQorCisgICAgICAgIGxhc3QuYXBwZW5kKFswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFyc2hhbC5kdW1wcywgaGVhZCkKKworICAgIGRlZiB0ZXN0X2V4YWN0X3R5cGVfbWF0Y2goc2VsZik6CisgICAgICAgICMgRm9ybWVyIGJ1ZzoKKyAgICAgICAgIyAgID4+PiBjbGFzcyBJbnQoaW50KTogcGFzcworICAgICAgICAjICAgPj4+IHR5cGUobG9hZHMoZHVtcHMoSW50KCkpKSkKKyAgICAgICAgIyAgIDx0eXBlICdpbnQnPgorICAgICAgICBmb3IgdHlwIGluIChpbnQsIGxvbmcsIGZsb2F0LCBjb21wbGV4LCB0dXBsZSwgbGlzdCwgZGljdCwgc2V0LCBmcm96ZW5zZXQpOgorICAgICAgICAgICAgIyBOb3RlOiBzdHIgYW5kIHVuaWNvZGUgc3ViY2xhc3NlcyBhcmUgbm90IHRlc3RlZCBiZWNhdXNlIHRoZXkgZ2V0IGhhbmRsZWQKKyAgICAgICAgICAgICMgYnkgbWFyc2hhbCdzIHJvdXRpbmVzIGZvciBvYmplY3RzIHN1cHBvcnRpbmcgdGhlIGJ1ZmZlciBBUEkuCisgICAgICAgICAgICBzdWJ0eXAgPSB0eXBlKCdzdWJ0eXAnLCAodHlwLCksIHt9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFyc2hhbC5kdW1wcywgc3VidHlwKCkpCisKKyAgICAjIElzc3VlICMxNzkyIGludHJvZHVjZWQgYSBjaGFuZ2UgaW4gaG93IG1hcnNoYWwgaW5jcmVhc2VzIHRoZSBzaXplIG9mIGl0cworICAgICMgaW50ZXJuYWwgYnVmZmVyOyB0aGlzIHRlc3QgZW5zdXJlcyB0aGF0IHRoZSBuZXcgY29kZSBpcyBleGVyY2lzZWQuCisgICAgZGVmIHRlc3RfbGFyZ2VfbWFyc2hhbChzZWxmKToKKyAgICAgICAgc2l6ZSA9IGludCgxZTYpCisgICAgICAgIHRlc3RTdHJpbmcgPSAnYWJjJyAqIHNpemUKKyAgICAgICAgbWFyc2hhbC5kdW1wcyh0ZXN0U3RyaW5nKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9sb25ncyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzAxOTogbWFyc2hhbC5sb2FkcyBzaG91bGRuJ3QgcHJvZHVjZSB1bm5vcm1hbGl6ZWQgUHlMb25ncworICAgICAgICBpbnZhbGlkX3N0cmluZyA9ICdsXHgwMlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hcnNoYWwubG9hZHMsIGludmFsaWRfc3RyaW5nKQorCitMQVJHRV9TSVpFID0gMioqMzEKK2NoYXJhY3Rlcl9zaXplID0gNCBpZiBzeXMubWF4dW5pY29kZSA+IDB4RkZGRiBlbHNlIDIKK3BvaW50ZXJfc2l6ZSA9IDggaWYgc3lzLm1heHNpemUgPiAweEZGRkZGRkZGIGVsc2UgNAorCitAdW5pdHRlc3Quc2tpcElmKExBUkdFX1NJWkUgPiBzeXMubWF4c2l6ZSwgInRlc3QgY2Fubm90IHJ1biBvbiAzMi1iaXQgc3lzdGVtcyIpCitjbGFzcyBMYXJnZVZhbHVlc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY2hlY2tfdW5tYXJzaGFsbGFibGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3YicpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0X3N1cHBvcnQudW5saW5rLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICB3aXRoIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXJzaGFsLmR1bXAsIGRhdGEsIGYpCisKKyAgICBAdGVzdF9zdXBwb3J0LnByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1MQVJHRV9TSVpFLCBtZW11c2U9MSwgZHJ5X3J1bj1GYWxzZSkKKyAgICBkZWYgdGVzdF9zdHJpbmcoc2VsZiwgc2l6ZSk6CisgICAgICAgIHNlbGYuY2hlY2tfdW5tYXJzaGFsbGFibGUoJ3gnICogc2l6ZSkKKworICAgIEB0ZXN0X3N1cHBvcnQucHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPUxBUkdFX1NJWkUsCisgICAgICAgICAgICBtZW11c2U9Y2hhcmFjdGVyX3NpemUsIGRyeV9ydW49RmFsc2UpCisgICAgZGVmIHRlc3RfdW5pY29kZShzZWxmLCBzaXplKToKKyAgICAgICAgc2VsZi5jaGVja191bm1hcnNoYWxsYWJsZSh1J3gnICogc2l6ZSkKKworICAgIEB0ZXN0X3N1cHBvcnQucHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPUxBUkdFX1NJWkUsCisgICAgICAgICAgICBtZW11c2U9cG9pbnRlcl9zaXplLCBkcnlfcnVuPUZhbHNlKQorICAgIGRlZiB0ZXN0X3R1cGxlKHNlbGYsIHNpemUpOgorICAgICAgICBzZWxmLmNoZWNrX3VubWFyc2hhbGxhYmxlKChOb25lLCkgKiBzaXplKQorCisgICAgQHRlc3Rfc3VwcG9ydC5wcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9TEFSR0VfU0laRSwKKyAgICAgICAgICAgIG1lbXVzZT1wb2ludGVyX3NpemUsIGRyeV9ydW49RmFsc2UpCisgICAgZGVmIHRlc3RfbGlzdChzZWxmLCBzaXplKToKKyAgICAgICAgc2VsZi5jaGVja191bm1hcnNoYWxsYWJsZShbTm9uZV0gKiBzaXplKQorCisgICAgQHRlc3Rfc3VwcG9ydC5wcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9TEFSR0VfU0laRSwKKyAgICAgICAgICAgIG1lbXVzZT1wb2ludGVyX3NpemUqMTIgKyBzeXMuZ2V0c2l6ZW9mKExBUkdFX1NJWkUtMSksCisgICAgICAgICAgICBkcnlfcnVuPUZhbHNlKQorICAgIGRlZiB0ZXN0X3NldChzZWxmLCBzaXplKToKKyAgICAgICAgc2VsZi5jaGVja191bm1hcnNoYWxsYWJsZShzZXQocmFuZ2Uoc2l6ZSkpKQorCisgICAgQHRlc3Rfc3VwcG9ydC5wcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9TEFSR0VfU0laRSwKKyAgICAgICAgICAgIG1lbXVzZT1wb2ludGVyX3NpemUqMTIgKyBzeXMuZ2V0c2l6ZW9mKExBUkdFX1NJWkUtMSksCisgICAgICAgICAgICBkcnlfcnVuPUZhbHNlKQorICAgIGRlZiB0ZXN0X2Zyb3plbnNldChzZWxmLCBzaXplKToKKyAgICAgICAgc2VsZi5jaGVja191bm1hcnNoYWxsYWJsZShmcm96ZW5zZXQocmFuZ2Uoc2l6ZSkpKQorCisgICAgQHRlc3Rfc3VwcG9ydC5wcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9TEFSR0VfU0laRSwgbWVtdXNlPTEsIGRyeV9ydW49RmFsc2UpCisgICAgZGVmIHRlc3RfYnl0ZWFycmF5KHNlbGYsIHNpemUpOgorICAgICAgICBzZWxmLmNoZWNrX3VubWFyc2hhbGxhYmxlKGJ5dGVhcnJheShzaXplKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChJbnRUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0VGVzdENhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRhaW5lclRlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uVGVzdENhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWdzVGVzdENhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXJnZVZhbHVlc1Rlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21hdGgucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tYXRoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNDQ3NWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tYXRoLnB5CkBAIC0wLDAgKzEsMTAzMCBAQAorIyBQeXRob24gdGVzdCBzZXQgLS0gbWF0aCBtb2R1bGUKKyMgWFhYWCBTaG91bGQgbm90IGRvIHRlc3RzIGFyb3VuZCB6ZXJvIG9ubHkKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCB2ZXJib3NlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBtYXRoCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzdHJ1Y3QKKworZXBzID0gMUUtMDUKK05BTiA9IGZsb2F0KCduYW4nKQorSU5GID0gZmxvYXQoJ2luZicpCitOSU5GID0gZmxvYXQoJy1pbmYnKQorCisjIGRlY29yYXRvciBmb3Igc2tpcHBpbmcgdGVzdHMgb24gbm9uLUlFRUUgNzU0IHBsYXRmb3JtcworcmVxdWlyZXNfSUVFRV83NTQgPSB1bml0dGVzdC5za2lwVW5sZXNzKAorICAgIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKKyAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKworIyBkZXRlY3QgZXZpZGVuY2Ugb2YgZG91YmxlLXJvdW5kaW5nOiBmc3VtIGlzIG5vdCBhbHdheXMgY29ycmVjdGx5CisjIHJvdW5kZWQgb24gbWFjaGluZXMgdGhhdCBzdWZmZXIgZnJvbSBkb3VibGUgcm91bmRpbmcuCit4LCB5ID0gMWUxNiwgMi45OTk5ICMgdXNlIHRlbXBvcmFyeSB2YWx1ZXMgdG8gZGVmZWF0IHBlZXBob2xlIG9wdGltaXplcgorSEFWRV9ET1VCTEVfUk9VTkRJTkcgPSAoeCArIHkgPT0gMWUxNiArIDQpCisKKyMgbG9jYXRlIGZpbGUgd2l0aCB0ZXN0IHZhbHVlcworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBmaWxlID0gc3lzLmFyZ3ZbMF0KK2Vsc2U6CisgICAgZmlsZSA9IF9fZmlsZV9fCit0ZXN0X2RpciA9IG9zLnBhdGguZGlybmFtZShmaWxlKSBvciBvcy5jdXJkaXIKK21hdGhfdGVzdGNhc2VzID0gb3MucGF0aC5qb2luKHRlc3RfZGlyLCAnbWF0aF90ZXN0Y2FzZXMudHh0JykKK3Rlc3RfZmlsZSA9IG9zLnBhdGguam9pbih0ZXN0X2RpciwgJ2NtYXRoX3Rlc3RjYXNlcy50eHQnKQorCitkZWYgdG9fdWxwcyh4KToKKyAgICAiIiJDb252ZXJ0IGEgbm9uLU5hTiBmbG9hdCB4IHRvIGFuIGludGVnZXIsIGluIHN1Y2ggYSB3YXkgdGhhdAorICAgIGFkamFjZW50IGZsb2F0cyBhcmUgY29udmVydGVkIHRvIGFkamFjZW50IGludGVnZXJzLiAgVGhlbgorICAgIGFicyh1bHBzKHgpIC0gdWxwcyh5KSkgZ2l2ZXMgdGhlIGRpZmZlcmVuY2UgaW4gdWxwcyBiZXR3ZWVuIHR3bworICAgIGZsb2F0cy4KKworICAgIFRoZSByZXN1bHRzIGZyb20gdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgbWFrZSBzZW5zZSBvbiBwbGF0Zm9ybXMKKyAgICB3aGVyZSBDIGRvdWJsZXMgYXJlIHJlcHJlc2VudGVkIGluIElFRUUgNzU0IGJpbmFyeTY0IGZvcm1hdC4KKworICAgICIiIgorICAgIG4gPSBzdHJ1Y3QudW5wYWNrKCc8cScsIHN0cnVjdC5wYWNrKCc8ZCcsIHgpKVswXQorICAgIGlmIG4gPCAwOgorICAgICAgICBuID0gfihuKzIqKjYzKQorICAgIHJldHVybiBuCisKK2RlZiB1bHBzX2NoZWNrKGV4cGVjdGVkLCBnb3QsIHVscHM9MjApOgorICAgICIiIkdpdmVuIG5vbi1OYU4gZmxvYXRzIGBleHBlY3RlZGAgYW5kIGBnb3RgLAorICAgIGNoZWNrIHRoYXQgdGhleSdyZSBlcXVhbCB0byB3aXRoaW4gdGhlIGdpdmVuIG51bWJlciBvZiB1bHBzLgorCisgICAgUmV0dXJucyBOb25lIG9uIHN1Y2Nlc3MgYW5kIGFuIGVycm9yIG1lc3NhZ2Ugb24gZmFpbHVyZS4iIiIKKworICAgIHVscHNfZXJyb3IgPSB0b191bHBzKGdvdCkgLSB0b191bHBzKGV4cGVjdGVkKQorICAgIGlmIGFicyh1bHBzX2Vycm9yKSA8PSB1bHBzOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiAiZXJyb3IgPSB7fSB1bHBzOyBwZXJtaXR0ZWQgZXJyb3IgPSB7fSB1bHBzIi5mb3JtYXQodWxwc19lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVscHMpCisKK2RlZiBhY2NfY2hlY2soZXhwZWN0ZWQsIGdvdCwgcmVsX2Vycj0yZS0xNSwgYWJzX2VyciA9IDVlLTMyMyk6CisgICAgIiIiRGV0ZXJtaW5lIHdoZXRoZXIgbm9uLU5hTiBmbG9hdHMgYSBhbmQgYiBhcmUgZXF1YWwgdG8gd2l0aGluIGEKKyAgICAoc21hbGwpIHJvdW5kaW5nIGVycm9yLiAgVGhlIGRlZmF1bHQgdmFsdWVzIGZvciByZWxfZXJyIGFuZAorICAgIGFic19lcnIgYXJlIGNob3NlbiB0byBiZSBzdWl0YWJsZSBmb3IgcGxhdGZvcm1zIHdoZXJlIGEgZmxvYXQgaXMKKyAgICByZXByZXNlbnRlZCBieSBhbiBJRUVFIDc1NCBkb3VibGUuICBUaGV5IGFsbG93IGFuIGVycm9yIG9mIGJldHdlZW4KKyAgICA5IGFuZCAxOSB1bHBzLiIiIgorCisgICAgIyBuZWVkIHRvIHNwZWNpYWwgY2FzZSBpbmZpbml0aWVzLCBzaW5jZSBpbmYgLSBpbmYgZ2l2ZXMgbmFuCisgICAgaWYgbWF0aC5pc2luZihleHBlY3RlZCkgYW5kIGdvdCA9PSBleHBlY3RlZDoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGVycm9yID0gZ290IC0gZXhwZWN0ZWQKKworICAgIHBlcm1pdHRlZF9lcnJvciA9IG1heChhYnNfZXJyLCByZWxfZXJyICogYWJzKGV4cGVjdGVkKSkKKyAgICBpZiBhYnMoZXJyb3IpIDwgcGVybWl0dGVkX2Vycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiAiZXJyb3IgPSB7fTsgcGVybWl0dGVkIGVycm9yID0ge30iLmZvcm1hdChlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWl0dGVkX2Vycm9yKQorCitkZWYgcGFyc2VfbXRlc3RmaWxlKGZuYW1lKToKKyAgICAiIiJQYXJzZSBhIGZpbGUgd2l0aCB0ZXN0IHZhbHVlcworCisgICAgLS0gc3RhcnRzIGEgY29tbWVudAorICAgIGJsYW5rIGxpbmVzLCBvciBsaW5lcyBjb250YWluaW5nIG9ubHkgYSBjb21tZW50LCBhcmUgaWdub3JlZAorICAgIG90aGVyIGxpbmVzIGFyZSBleHBlY3RlZCB0byBoYXZlIHRoZSBmb3JtCisgICAgICBpZCBmbiBhcmcgLT4gZXhwZWN0ZWQgW2ZsYWddKgorCisgICAgIiIiCisgICAgd2l0aCBvcGVuKGZuYW1lKSBhcyBmcDoKKyAgICAgICAgZm9yIGxpbmUgaW4gZnA6CisgICAgICAgICAgICAjIHN0cmlwIGNvbW1lbnRzLCBhbmQgc2tpcCBibGFuayBsaW5lcworICAgICAgICAgICAgaWYgJy0tJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzpsaW5lLmluZGV4KCctLScpXQorICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RyaXAoKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBsaHMsIHJocyA9IGxpbmUuc3BsaXQoJy0+JykKKyAgICAgICAgICAgIGlkLCBmbiwgYXJnID0gbGhzLnNwbGl0KCkKKyAgICAgICAgICAgIHJoc19waWVjZXMgPSByaHMuc3BsaXQoKQorICAgICAgICAgICAgZXhwID0gcmhzX3BpZWNlc1swXQorICAgICAgICAgICAgZmxhZ3MgPSByaHNfcGllY2VzWzE6XQorCisgICAgICAgICAgICB5aWVsZCAoaWQsIGZuLCBmbG9hdChhcmcpLCBmbG9hdChleHApLCBmbGFncykKKworZGVmIHBhcnNlX3Rlc3RmaWxlKGZuYW1lKToKKyAgICAiIiJQYXJzZSBhIGZpbGUgd2l0aCB0ZXN0IHZhbHVlcworCisgICAgRW1wdHkgbGluZXMgb3IgbGluZXMgc3RhcnRpbmcgd2l0aCAtLSBhcmUgaWdub3JlZAorICAgIHlpZWxkcyBpZCwgZm4sIGFyZ19yZWFsLCBhcmdfaW1hZywgZXhwX3JlYWwsIGV4cF9pbWFnCisgICAgIiIiCisgICAgd2l0aCBvcGVuKGZuYW1lKSBhcyBmcDoKKyAgICAgICAgZm9yIGxpbmUgaW4gZnA6CisgICAgICAgICAgICAjIHNraXAgY29tbWVudCBsaW5lcyBhbmQgYmxhbmsgbGluZXMKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnLS0nKSBvciBub3QgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGxocywgcmhzID0gbGluZS5zcGxpdCgnLT4nKQorICAgICAgICAgICAgaWQsIGZuLCBhcmdfcmVhbCwgYXJnX2ltYWcgPSBsaHMuc3BsaXQoKQorICAgICAgICAgICAgcmhzX3BpZWNlcyA9IHJocy5zcGxpdCgpCisgICAgICAgICAgICBleHBfcmVhbCwgZXhwX2ltYWcgPSByaHNfcGllY2VzWzBdLCByaHNfcGllY2VzWzFdCisgICAgICAgICAgICBmbGFncyA9IHJoc19waWVjZXNbMjpdCisKKyAgICAgICAgICAgIHlpZWxkIChpZCwgZm4sCisgICAgICAgICAgICAgICAgICAgZmxvYXQoYXJnX3JlYWwpLCBmbG9hdChhcmdfaW1hZyksCisgICAgICAgICAgICAgICAgICAgZmxvYXQoZXhwX3JlYWwpLCBmbG9hdChleHBfaW1hZyksCisgICAgICAgICAgICAgICAgICAgZmxhZ3MKKyAgICAgICAgICAgICAgICAgICkKKworY2xhc3MgTWF0aFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBmdGVzdChzZWxmLCBuYW1lLCB2YWx1ZSwgZXhwZWN0ZWQpOgorICAgICAgICBpZiBhYnModmFsdWUtZXhwZWN0ZWQpID4gZXBzOgorICAgICAgICAgICAgIyBVc2UgJXIgaW5zdGVhZCBvZiAlZiBzbyB0aGUgZXJyb3IgbWVzc2FnZQorICAgICAgICAgICAgIyBkaXNwbGF5cyBmdWxsIHByZWNpc2lvbi4gT3RoZXJ3aXNlIGRpc2NyZXBhbmNpZXMKKyAgICAgICAgICAgICMgaW4gdGhlIGxhc3QgZmV3IGJpdHMgd2lsbCBsZWFkIHRvIHZlcnkgY29uZnVzaW5nCisgICAgICAgICAgICAjIGVycm9yIG1lc3NhZ2VzCisgICAgICAgICAgICBzZWxmLmZhaWwoJyVzIHJldHVybmVkICVyLCBleHBlY3RlZCAlcicgJQorICAgICAgICAgICAgICAgICAgICAgIChuYW1lLCB2YWx1ZSwgZXhwZWN0ZWQpKQorCisgICAgZGVmIHRlc3RDb25zdGFudHMoc2VsZik6CisgICAgICAgIHNlbGYuZnRlc3QoJ3BpJywgbWF0aC5waSwgMy4xNDE1OTI2KQorICAgICAgICBzZWxmLmZ0ZXN0KCdlJywgbWF0aC5lLCAyLjcxODI4MTgpCisKKyAgICBkZWYgdGVzdEFjb3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5hY29zKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhY29zKC0xKScsIG1hdGguYWNvcygtMSksIG1hdGgucGkpCisgICAgICAgIHNlbGYuZnRlc3QoJ2Fjb3MoMCknLCBtYXRoLmFjb3MoMCksIG1hdGgucGkvMikKKyAgICAgICAgc2VsZi5mdGVzdCgnYWNvcygxKScsIG1hdGguYWNvcygxKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5hY29zLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYWNvcywgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hY29zKE5BTikpKQorCisgICAgZGVmIHRlc3RBY29zaChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmFjb3NoKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhY29zaCgxKScsIG1hdGguYWNvc2goMSksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ2Fjb3NoKDIpJywgbWF0aC5hY29zaCgyKSwgMS4zMTY5NTc4OTY5MjQ4MTY4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmFjb3NoLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmFjb3NoLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmFjb3NoKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5hY29zaCwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hY29zaChOQU4pKSkKKworICAgIGRlZiB0ZXN0QXNpbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmFzaW4pCisgICAgICAgIHNlbGYuZnRlc3QoJ2FzaW4oLTEpJywgbWF0aC5hc2luKC0xKSwgLW1hdGgucGkvMikKKyAgICAgICAgc2VsZi5mdGVzdCgnYXNpbigwKScsIG1hdGguYXNpbigwKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXNpbigxKScsIG1hdGguYXNpbigxKSwgbWF0aC5waS8yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmFzaW4sIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5hc2luLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmFzaW4oTkFOKSkpCisKKyAgICBkZWYgdGVzdEFzaW5oKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguYXNpbmgpCisgICAgICAgIHNlbGYuZnRlc3QoJ2FzaW5oKDApJywgbWF0aC5hc2luaCgwKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXNpbmgoMSknLCBtYXRoLmFzaW5oKDEpLCAwLjg4MTM3MzU4NzAxOTU0MzA1KQorICAgICAgICBzZWxmLmZ0ZXN0KCdhc2luaCgtMSknLCBtYXRoLmFzaW5oKC0xKSwgLTAuODgxMzczNTg3MDE5NTQzMDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hc2luaChJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hc2luaChOSU5GKSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hc2luaChOQU4pKSkKKworICAgIGRlZiB0ZXN0QXRhbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmF0YW4pCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4oLTEpJywgbWF0aC5hdGFuKC0xKSwgLW1hdGgucGkvNCkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbigwKScsIG1hdGguYXRhbigwKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbigxKScsIG1hdGguYXRhbigxKSwgbWF0aC5waS80KQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuKGluZiknLCBtYXRoLmF0YW4oSU5GKSwgbWF0aC5waS8yKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuKC1pbmYpJywgbWF0aC5hdGFuKE5JTkYpLCAtbWF0aC5waS8yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW4oTkFOKSkpCisKKyAgICBkZWYgdGVzdEF0YW5oKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguYXRhbikKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbmgoMCknLCBtYXRoLmF0YW5oKDApLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuaCgwLjUpJywgbWF0aC5hdGFuaCgwLjUpLCAwLjU0OTMwNjE0NDMzNDA1NDg5KQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuaCgtMC41KScsIG1hdGguYXRhbmgoLTAuNSksIC0wLjU0OTMwNjE0NDMzNDA1NDg5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmF0YW5oLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmF0YW5oLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5hdGFuaCwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmF0YW5oLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW5oKE5BTikpKQorCisgICAgZGVmIHRlc3RBdGFuMihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmF0YW4yKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigtMSwgMCknLCBtYXRoLmF0YW4yKC0xLCAwKSwgLW1hdGgucGkvMikKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLTEsIDEpJywgbWF0aC5hdGFuMigtMSwgMSksIC1tYXRoLnBpLzQpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKDAsIDEpJywgbWF0aC5hdGFuMigwLCAxKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoMSwgMSknLCBtYXRoLmF0YW4yKDEsIDEpLCBtYXRoLnBpLzQpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKDEsIDApJywgbWF0aC5hdGFuMigxLCAwKSwgbWF0aC5waS8yKQorCisgICAgICAgICMgbWF0aC5hdGFuMigwLCB4KQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigwLiwgLWluZiknLCBtYXRoLmF0YW4yKDAuLCBOSU5GKSwgbWF0aC5waSkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoMC4sIC0yLjMpJywgbWF0aC5hdGFuMigwLiwgLTIuMyksIG1hdGgucGkpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKDAuLCAtMC4pJywgbWF0aC5hdGFuMigwLiwgLTAuKSwgbWF0aC5waSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmF0YW4yKDAuLCAwLiksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYXRhbjIoMC4sIDIuMyksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYXRhbjIoMC4sIElORiksIDAuKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW4yKDAuLCBOQU4pKSkKKyAgICAgICAgIyBtYXRoLmF0YW4yKC0wLCB4KQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigtMC4sIC1pbmYpJywgbWF0aC5hdGFuMigtMC4sIE5JTkYpLCAtbWF0aC5waSkKKyAgICAgICAgc2VsZi5mdGVzdCgnYXRhbjIoLTAuLCAtMi4zKScsIG1hdGguYXRhbjIoLTAuLCAtMi4zKSwgLW1hdGgucGkpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC0wLiwgLTAuKScsIG1hdGguYXRhbjIoLTAuLCAtMC4pLCAtbWF0aC5waSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmF0YW4yKC0wLiwgMC4pLCAtMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5hdGFuMigtMC4sIDIuMyksIC0wLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmF0YW4yKC0wLiwgSU5GKSwgLTAuKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW4yKC0wLiwgTkFOKSkpCisgICAgICAgICMgbWF0aC5hdGFuMihJTkYsIHgpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKGluZiwgLWluZiknLCBtYXRoLmF0YW4yKElORiwgTklORiksIG1hdGgucGkqMy80KQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMihpbmYsIC0yLjMpJywgbWF0aC5hdGFuMihJTkYsIC0yLjMpLCBtYXRoLnBpLzIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKGluZiwgLTAuKScsIG1hdGguYXRhbjIoSU5GLCAtMC4wKSwgbWF0aC5waS8yKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMihpbmYsIDAuKScsIG1hdGguYXRhbjIoSU5GLCAwLjApLCBtYXRoLnBpLzIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKGluZiwgMi4zKScsIG1hdGguYXRhbjIoSU5GLCAyLjMpLCBtYXRoLnBpLzIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKGluZiwgaW5mKScsIG1hdGguYXRhbjIoSU5GLCBJTkYpLCBtYXRoLnBpLzQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoSU5GLCBOQU4pKSkKKyAgICAgICAgIyBtYXRoLmF0YW4yKE5JTkYsIHgpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC1pbmYsIC1pbmYpJywgbWF0aC5hdGFuMihOSU5GLCBOSU5GKSwgLW1hdGgucGkqMy80KQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigtaW5mLCAtMi4zKScsIG1hdGguYXRhbjIoTklORiwgLTIuMyksIC1tYXRoLnBpLzIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC1pbmYsIC0wLiknLCBtYXRoLmF0YW4yKE5JTkYsIC0wLjApLCAtbWF0aC5waS8yKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigtaW5mLCAwLiknLCBtYXRoLmF0YW4yKE5JTkYsIDAuMCksIC1tYXRoLnBpLzIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC1pbmYsIDIuMyknLCBtYXRoLmF0YW4yKE5JTkYsIDIuMyksIC1tYXRoLnBpLzIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC1pbmYsIGluZiknLCBtYXRoLmF0YW4yKE5JTkYsIElORiksIC1tYXRoLnBpLzQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoTklORiwgTkFOKSkpCisgICAgICAgICMgbWF0aC5hdGFuMigrZmluaXRlLCB4KQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigyLjMsIC1pbmYpJywgbWF0aC5hdGFuMigyLjMsIE5JTkYpLCBtYXRoLnBpKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigyLjMsIC0wLiknLCBtYXRoLmF0YW4yKDIuMywgLTAuKSwgbWF0aC5waS8yKQorICAgICAgICBzZWxmLmZ0ZXN0KCdhdGFuMigyLjMsIDAuKScsIG1hdGguYXRhbjIoMi4zLCAwLiksIG1hdGgucGkvMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmF0YW4yKDIuMywgSU5GKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoMi4zLCBOQU4pKSkKKyAgICAgICAgIyBtYXRoLmF0YW4yKC1maW5pdGUsIHgpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC0yLjMsIC1pbmYpJywgbWF0aC5hdGFuMigtMi4zLCBOSU5GKSwgLW1hdGgucGkpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC0yLjMsIC0wLiknLCBtYXRoLmF0YW4yKC0yLjMsIC0wLiksIC1tYXRoLnBpLzIpCisgICAgICAgIHNlbGYuZnRlc3QoJ2F0YW4yKC0yLjMsIDAuKScsIG1hdGguYXRhbjIoLTIuMywgMC4pLCAtbWF0aC5waS8yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguYXRhbjIoLTIuMywgSU5GKSwgLTAuKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW4yKC0yLjMsIE5BTikpKQorICAgICAgICAjIG1hdGguYXRhbjIoTkFOLCB4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW4yKE5BTiwgTklORikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW4yKE5BTiwgLTIuMykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW4yKE5BTiwgLTAuKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCAwLikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmF0YW4yKE5BTiwgMi4zKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguYXRhbjIoTkFOLCBJTkYpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5hdGFuMihOQU4sIE5BTikpKQorCisgICAgZGVmIHRlc3RDZWlsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguY2VpbCkKKyAgICAgICAgIyBUaGVzZSB0eXBlcyB3aWxsIGJlIGludCBpbiBweTNrLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0LCB0eXBlKG1hdGguY2VpbCgxKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQsIHR5cGUobWF0aC5jZWlsKDFMKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQsIHR5cGUobWF0aC5jZWlsKDEuMCkpKQorICAgICAgICBzZWxmLmZ0ZXN0KCdjZWlsKDAuNSknLCBtYXRoLmNlaWwoMC41KSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnY2VpbCgxLjApJywgbWF0aC5jZWlsKDEuMCksIDEpCisgICAgICAgIHNlbGYuZnRlc3QoJ2NlaWwoMS41KScsIG1hdGguY2VpbCgxLjUpLCAyKQorICAgICAgICBzZWxmLmZ0ZXN0KCdjZWlsKC0wLjUpJywgbWF0aC5jZWlsKC0wLjUpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdjZWlsKC0xLjApJywgbWF0aC5jZWlsKC0xLjApLCAtMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnY2VpbCgtMS41KScsIG1hdGguY2VpbCgtMS41KSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jZWlsKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNlaWwoTklORiksIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY2VpbChOQU4pKSkKKworICAgICAgICBjbGFzcyBUZXN0Q2VpbChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZmxvYXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDEuMworICAgICAgICBjbGFzcyBUZXN0Tm9DZWlsKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuZnRlc3QoJ2NlaWwoVGVzdENlaWwoKSknLCBtYXRoLmNlaWwoVGVzdENlaWwoKSksIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguY2VpbCwgVGVzdE5vQ2VpbCgpKQorCisgICAgICAgIHQgPSBUZXN0Tm9DZWlsKCkKKyAgICAgICAgdC5fX2NlaWxfXyA9IGxhbWJkYSAqYXJnczogYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguY2VpbCwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmNlaWwsIHQsIDApCisKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdENvcHlzaWduKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMSwgNDIpLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigwLiwgNDIpLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigxLiwgLTQyKSwgLTEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDMsIDAuKSwgMy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oNC4sIC0wLiksIC00LjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmNvcHlzaWduKQorICAgICAgICAjIGNvcHlzaWduIHNob3VsZCBsZXQgdXMgZGlzdGluZ3Vpc2ggc2lnbnMgb2YgemVyb3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEuLCAwLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMS4sIC0wLiksIC0xLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKElORiwgMC4pLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihJTkYsIC0wLiksIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihOSU5GLCAwLiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKE5JTkYsIC0wLiksIE5JTkYpCisgICAgICAgICMgYW5kIG9mIGluZmluaXRpZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEuLCBJTkYpLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEuLCBOSU5GKSwgLTEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oSU5GLCBJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihJTkYsIE5JTkYpLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oTklORiwgSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oTklORiwgTklORiksIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29weXNpZ24oTkFOLCAxLikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvcHlzaWduKE5BTiwgSU5GKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29weXNpZ24oTkFOLCBOSU5GKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29weXNpZ24oTkFOLCBOQU4pKSkKKyAgICAgICAgIyBjb3B5c2lnbihJTkYsIE5BTikgbWF5IGJlIElORiBvciBpdCBtYXkgYmUgTklORiwgc2luY2UKKyAgICAgICAgIyB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIHNpZ24gYml0IG9mIE5BTiBpcyBzZXQgb24gYW55CisgICAgICAgICMgZ2l2ZW4gcGxhdGZvcm0uCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzaW5mKG1hdGguY29weXNpZ24oSU5GLCBOQU4pKSkKKyAgICAgICAgIyBzaW1pbGFybHksIGNvcHlzaWduKDIuLCBOQU4pIGNvdWxkIGJlIDIuIG9yIC0yLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhtYXRoLmNvcHlzaWduKDIuLCBOQU4pKSwgMi4pCisKKyAgICBkZWYgdGVzdENvcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmNvcykKKyAgICAgICAgc2VsZi5mdGVzdCgnY29zKC1waS8yKScsIG1hdGguY29zKC1tYXRoLnBpLzIpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdjb3MoMCknLCBtYXRoLmNvcygwKSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnY29zKHBpLzIpJywgbWF0aC5jb3MobWF0aC5waS8yKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnY29zKHBpKScsIG1hdGguY29zKG1hdGgucGkpLCAtMSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jb3MoSU5GKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvcyhOSU5GKSkpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5jb3MsIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguY29zLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvcyhOQU4pKSkKKworICAgIGRlZiB0ZXN0Q29zaChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmNvc2gpCisgICAgICAgIHNlbGYuZnRlc3QoJ2Nvc2goMCknLCBtYXRoLmNvc2goMCksIDEpCisgICAgICAgIHNlbGYuZnRlc3QoJ2Nvc2goMiktMipjb3NoKDEpKioyJywgbWF0aC5jb3NoKDIpLTIqbWF0aC5jb3NoKDEpKioyLCAtMSkgIyBUaGFua3MgdG8gTGFtYmVydAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29zaChJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3NoKE5JTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29zaChOQU4pKSkKKworICAgIGRlZiB0ZXN0RGVncmVlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmRlZ3JlZXMpCisgICAgICAgIHNlbGYuZnRlc3QoJ2RlZ3JlZXMocGkpJywgbWF0aC5kZWdyZWVzKG1hdGgucGkpLCAxODAuMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnZGVncmVlcyhwaS8yKScsIG1hdGguZGVncmVlcyhtYXRoLnBpLzIpLCA5MC4wKQorICAgICAgICBzZWxmLmZ0ZXN0KCdkZWdyZWVzKC1waS80KScsIG1hdGguZGVncmVlcygtbWF0aC5waS80KSwgLTQ1LjApCisKKyAgICBkZWYgdGVzdEV4cChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmV4cCkKKyAgICAgICAgc2VsZi5mdGVzdCgnZXhwKC0xKScsIG1hdGguZXhwKC0xKSwgMS9tYXRoLmUpCisgICAgICAgIHNlbGYuZnRlc3QoJ2V4cCgwKScsIG1hdGguZXhwKDApLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCdleHAoMSknLCBtYXRoLmV4cCgxKSwgbWF0aC5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZXhwKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmV4cChOSU5GKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguZXhwKE5BTikpKQorCisgICAgZGVmIHRlc3RGYWJzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZmFicykKKyAgICAgICAgc2VsZi5mdGVzdCgnZmFicygtMSknLCBtYXRoLmZhYnMoLTEpLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmYWJzKDApJywgbWF0aC5mYWJzKDApLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmYWJzKDEpJywgbWF0aC5mYWJzKDEpLCAxKQorCisgICAgZGVmIHRlc3RGYWN0b3JpYWwoc2VsZik6CisgICAgICAgIGRlZiBmYWN0KG4pOgorICAgICAgICAgICAgcmVzdWx0ID0gMQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgaW50KG4pKzEpOgorICAgICAgICAgICAgICAgIHJlc3VsdCAqPSBpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIHZhbHVlcyA9IHJhbmdlKDEwKSArIFs1MCwgMTAwLCA1MDBdCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKHZhbHVlcykKKyAgICAgICAgZm9yIHggaW4gdmFsdWVzOgorICAgICAgICAgICAgZm9yIGNhc3QgaW4gKGludCwgbG9uZywgZmxvYXQpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5mYWN0b3JpYWwoY2FzdCh4KSksIGZhY3QoeCksICh4LCBmYWN0KHgpLCBtYXRoLmZhY3RvcmlhbCh4KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguZmFjdG9yaWFsLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5mYWN0b3JpYWwsIG1hdGgucGkpCisKKyAgICBkZWYgdGVzdEZsb29yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZmxvb3IpCisgICAgICAgICMgVGhlc2UgdHlwZXMgd2lsbCBiZSBpbnQgaW4gcHkzay4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCwgdHlwZShtYXRoLmZsb29yKDEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCwgdHlwZShtYXRoLmZsb29yKDFMKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQsIHR5cGUobWF0aC5mbG9vcigxLjApKSkKKyAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoMC41KScsIG1hdGguZmxvb3IoMC41KSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoMS4wKScsIG1hdGguZmxvb3IoMS4wKSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoMS41KScsIG1hdGguZmxvb3IoMS41KSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoLTAuNSknLCBtYXRoLmZsb29yKC0wLjUpLCAtMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoLTEuMCknLCBtYXRoLmZsb29yKC0xLjApLCAtMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoLTEuNSknLCBtYXRoLmZsb29yKC0xLjUpLCAtMikKKyAgICAgICAgIyBwb3coKSByZWxpZXMgb24gZmxvb3IoKSB0byBjaGVjayBmb3IgaW50ZWdlcnMKKyAgICAgICAgIyBUaGlzIGZhaWxzIG9uIHNvbWUgcGxhdGZvcm1zIC0gc28gY2hlY2sgaXQgaGVyZQorICAgICAgICBzZWxmLmZ0ZXN0KCdmbG9vcigxLjIzZTE2NyknLCBtYXRoLmZsb29yKDEuMjNlMTY3KSwgMS4yM2UxNjcpCisgICAgICAgIHNlbGYuZnRlc3QoJ2Zsb29yKC0xLjIzZTE2NyknLCBtYXRoLmZsb29yKC0xLjIzZTE2NyksIC0xLjIzZTE2NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNlaWwoSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY2VpbChOSU5GKSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5mbG9vcihOQU4pKSkKKworICAgICAgICBjbGFzcyBUZXN0Rmxvb3Iob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQyLjMKKyAgICAgICAgY2xhc3MgVGVzdE5vRmxvb3Iob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5mdGVzdCgnZmxvb3IoVGVzdEZsb29yKCkpJywgbWF0aC5mbG9vcihUZXN0Rmxvb3IoKSksIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZmxvb3IsIFRlc3ROb0Zsb29yKCkpCisKKyAgICAgICAgdCA9IFRlc3ROb0Zsb29yKCkKKyAgICAgICAgdC5fX2Zsb29yX18gPSBsYW1iZGEgKmFyZ3M6IGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmZsb29yLCB0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZmxvb3IsIHQsIDApCisKKyAgICBkZWYgdGVzdEZtb2Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5mbW9kKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmbW9kKDEwLDEpJywgbWF0aC5mbW9kKDEwLDEpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdmbW9kKDEwLDAuNSknLCBtYXRoLmZtb2QoMTAsMC41KSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnZm1vZCgxMCwxLjUpJywgbWF0aC5mbW9kKDEwLDEuNSksIDEpCisgICAgICAgIHNlbGYuZnRlc3QoJ2Ztb2QoLTEwLDEpJywgbWF0aC5mbW9kKC0xMCwxKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnZm1vZCgtMTAsMC41KScsIG1hdGguZm1vZCgtMTAsMC41KSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnZm1vZCgtMTAsMS41KScsIG1hdGguZm1vZCgtMTAsMS41KSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguZm1vZChOQU4sIDEuKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguZm1vZCgxLiwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguZm1vZChOQU4sIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmZtb2QsIDEuLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5mbW9kLCBJTkYsIDEuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmZtb2QsIE5JTkYsIDEuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmZtb2QsIElORiwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5mbW9kKDMuMCwgSU5GKSwgMy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZm1vZCgtMy4wLCBJTkYpLCAtMy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZm1vZCgzLjAsIE5JTkYpLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5mbW9kKC0zLjAsIE5JTkYpLCAtMy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZm1vZCgwLjAsIDMuMCksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmZtb2QoMC4wLCBOSU5GKSwgMC4wKQorCisgICAgZGVmIHRlc3RGcmV4cChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmZyZXhwKQorCisgICAgICAgIGRlZiB0ZXN0ZnJleHAobmFtZSwgcmVzdWx0LCBleHBlY3RlZCk6CisgICAgICAgICAgICAobWFudCwgZXhwKSwgKGVtYW50LCBlZXhwKSA9IHJlc3VsdCwgZXhwZWN0ZWQKKyAgICAgICAgICAgIGlmIGFicyhtYW50LWVtYW50KSA+IGVwcyBvciBleHAgIT0gZWV4cDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJyVzIHJldHVybmVkICVyLCBleHBlY3RlZCAlciclXAorICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwgKG1hbnQsIGV4cCksIChlbWFudCxlZXhwKSkpCisKKyAgICAgICAgdGVzdGZyZXhwKCdmcmV4cCgtMSknLCBtYXRoLmZyZXhwKC0xKSwgKC0wLjUsIDEpKQorICAgICAgICB0ZXN0ZnJleHAoJ2ZyZXhwKDApJywgbWF0aC5mcmV4cCgwKSwgKDAsIDApKQorICAgICAgICB0ZXN0ZnJleHAoJ2ZyZXhwKDEpJywgbWF0aC5mcmV4cCgxKSwgKDAuNSwgMSkpCisgICAgICAgIHRlc3RmcmV4cCgnZnJleHAoMiknLCBtYXRoLmZyZXhwKDIpLCAoMC41LCAyKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZnJleHAoSU5GKVswXSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZnJleHAoTklORilbMF0sIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguZnJleHAoTkFOKVswXSkpCisKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBAdW5pdHRlc3Quc2tpcElmKEhBVkVfRE9VQkxFX1JPVU5ESU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmc3VtIGlzIG5vdCBleGFjdCBvbiBtYWNoaW5lcyB3aXRoIGRvdWJsZSByb3VuZGluZyIpCisgICAgZGVmIHRlc3RGc3VtKHNlbGYpOgorICAgICAgICAjIG1hdGguZnN1bSByZWxpZXMgb24gZXhhY3Qgcm91bmRpbmcgZm9yIGNvcnJlY3Qgb3BlcmF0aW9uLgorICAgICAgICAjIFRoZXJlJ3MgYSBrbm93biBwcm9ibGVtIHdpdGggSUEzMiBmbG9hdGluZy1wb2ludCB0aGF0IGNhdXNlcworICAgICAgICAjIGluZXhhY3Qgcm91bmRpbmcgaW4gc29tZSBzaXR1YXRpb25zLCBhbmQgd2lsbCBjYXVzZSB0aGUKKyAgICAgICAgIyBtYXRoLmZzdW0gdGVzdHMgYmVsb3cgdG8gZmFpbDsgc2VlIGlzc3VlICMyOTM3LiAgT24gbm9uIElFRUUKKyAgICAgICAgIyA3NTQgcGxhdGZvcm1zLCBhbmQgb24gSUVFRSA3NTQgcGxhdGZvcm1zIHRoYXQgZXhoaWJpdCB0aGUKKyAgICAgICAgIyBwcm9ibGVtIGRlc2NyaWJlZCBpbiBpc3N1ZSAjMjkzNywgd2Ugc2ltcGx5IHNraXAgdGhlIHdob2xlCisgICAgICAgICMgdGVzdC4KKworICAgICAgICAjIFB5dGhvbiB2ZXJzaW9uIG9mIG1hdGguZnN1bSwgZm9yIGNvbXBhcmlzb24uICBVc2VzIGEKKyAgICAgICAgIyBkaWZmZXJlbnQgYWxnb3JpdGhtIGJhc2VkIG9uIGZyZXhwLCBsZGV4cCBhbmQgaW50ZWdlcgorICAgICAgICAjIGFyaXRobWV0aWMuCisgICAgICAgIGZyb20gc3lzIGltcG9ydCBmbG9hdF9pbmZvCisgICAgICAgIG1hbnRfZGlnID0gZmxvYXRfaW5mby5tYW50X2RpZworICAgICAgICBldGlueSA9IGZsb2F0X2luZm8ubWluX2V4cCAtIG1hbnRfZGlnCisKKyAgICAgICAgZGVmIG1zdW0oaXRlcmFibGUpOgorICAgICAgICAgICAgIiIiRnVsbCBwcmVjaXNpb24gc3VtbWF0aW9uLiAgQ29tcHV0ZSBzdW0oaXRlcmFibGUpIHdpdGhvdXQgYW55CisgICAgICAgICAgICBpbnRlcm1lZGlhdGUgYWNjdW11bGF0aW9uIG9mIGVycm9yLiAgQmFzZWQgb24gdGhlICdsc3VtJyBmdW5jdGlvbgorICAgICAgICAgICAgYXQgaHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvMzkzMDkwLworCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHRtYW50LCB0ZXhwID0gMCwgMAorICAgICAgICAgICAgZm9yIHggaW4gaXRlcmFibGU6CisgICAgICAgICAgICAgICAgbWFudCwgZXhwID0gbWF0aC5mcmV4cCh4KQorICAgICAgICAgICAgICAgIG1hbnQsIGV4cCA9IGludChtYXRoLmxkZXhwKG1hbnQsIG1hbnRfZGlnKSksIGV4cCAtIG1hbnRfZGlnCisgICAgICAgICAgICAgICAgaWYgdGV4cCA+IGV4cDoKKyAgICAgICAgICAgICAgICAgICAgdG1hbnQgPDw9IHRleHAtZXhwCisgICAgICAgICAgICAgICAgICAgIHRleHAgPSBleHAKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtYW50IDw8PSBleHAtdGV4cAorICAgICAgICAgICAgICAgIHRtYW50ICs9IG1hbnQKKyAgICAgICAgICAgICMgUm91bmQgdG1hbnQgKiAyKip0ZXhwIHRvIGEgZmxvYXQuICBUaGUgb3JpZ2luYWwgcmVjaXBlCisgICAgICAgICAgICAjIHVzZWQgZmxvYXQoc3RyKHRtYW50KSkgKiAyLjAqKnRleHAgZm9yIHRoaXMsIGJ1dCB0aGF0J3MKKyAgICAgICAgICAgICMgYSBsaXR0bGUgdW5zYWZlIGJlY2F1c2Ugc3RyIC0+IGZsb2F0IGNvbnZlcnNpb24gY2FuJ3QgYmUKKyAgICAgICAgICAgICMgcmVsaWVkIHVwb24gdG8gZG8gY29ycmVjdCByb3VuZGluZyBvbiBhbGwgcGxhdGZvcm1zLgorICAgICAgICAgICAgdGFpbCA9IG1heChsZW4oYmluKGFicyh0bWFudCkpKS0yIC0gbWFudF9kaWcsIGV0aW55IC0gdGV4cCkKKyAgICAgICAgICAgIGlmIHRhaWwgPiAwOgorICAgICAgICAgICAgICAgIGggPSAxIDw8ICh0YWlsLTEpCisgICAgICAgICAgICAgICAgdG1hbnQgPSB0bWFudCAvLyAoMipoKSArIGJvb2wodG1hbnQgJiBoIGFuZCB0bWFudCAmIDMqaC0xKQorICAgICAgICAgICAgICAgIHRleHAgKz0gdGFpbAorICAgICAgICAgICAgcmV0dXJuIG1hdGgubGRleHAodG1hbnQsIHRleHApCisKKyAgICAgICAgdGVzdF92YWx1ZXMgPSBbCisgICAgICAgICAgICAoW10sIDAuMCksCisgICAgICAgICAgICAoWzAuMF0sIDAuMCksCisgICAgICAgICAgICAoWzFlMTAwLCAxLjAsIC0xZTEwMCwgMWUtMTAwLCAxZTUwLCAtMS4wLCAtMWU1MF0sIDFlLTEwMCksCisgICAgICAgICAgICAoWzIuMCoqNTMsIC0wLjUsIC0yLjAqKi01NF0sIDIuMCoqNTMtMS4wKSwKKyAgICAgICAgICAgIChbMi4wKio1MywgMS4wLCAyLjAqKi0xMDBdLCAyLjAqKjUzKzIuMCksCisgICAgICAgICAgICAoWzIuMCoqNTMrMTAuMCwgMS4wLCAyLjAqKi0xMDBdLCAyLjAqKjUzKzEyLjApLAorICAgICAgICAgICAgKFsyLjAqKjUzLTQuMCwgMC41LCAyLjAqKi01NF0sIDIuMCoqNTMtMy4wKSwKKyAgICAgICAgICAgIChbMS4vbiBmb3IgbiBpbiByYW5nZSgxLCAxMDAxKV0sCisgICAgICAgICAgICAgZmxvYXQuZnJvbWhleCgnMHgxLmRmMTFmNDVmNGU2MWFwKzInKSksCisgICAgICAgICAgICAoWygtMS4pKipuL24gZm9yIG4gaW4gcmFuZ2UoMSwgMTAwMSldLAorICAgICAgICAgICAgIGZsb2F0LmZyb21oZXgoJy0weDEuNjJhMmFmMWJkMzYyNHAtMScpKSwKKyAgICAgICAgICAgIChbMS43KiooaSsxKS0xLjcqKmkgZm9yIGkgaW4gcmFuZ2UoMTAwMCldICsgWy0xLjcqKjEwMDBdLCAtMS4wKSwKKyAgICAgICAgICAgIChbMWUxNiwgMS4sIDFlLTE2XSwgMTAwMDAwMDAwMDAwMDAwMDIuMCksCisgICAgICAgICAgICAoWzFlMTYtMi4sIDEuLTIuKiotNTMsIC0oMWUxNi0yLiksIC0oMS4tMi4qKi01MyldLCAwLjApLAorICAgICAgICAgICAgIyBleGVyY2lzZSBjb2RlIGZvciByZXNpemluZyBwYXJ0aWFscyBhcnJheQorICAgICAgICAgICAgKFsyLioqbiAtIDIuKioobis1MCkgKyAyLioqKG4rNTIpIGZvciBuIGluIHJhbmdlKC0xMDc0LCA5NzIsIDIpXSArCisgICAgICAgICAgICAgWy0yLioqMTAyMl0sCisgICAgICAgICAgICAgZmxvYXQuZnJvbWhleCgnMHgxLjU1NTU1NTU1NTU1NTVwKzk3MCcpKSwKKyAgICAgICAgICAgIF0KKworICAgICAgICBmb3IgaSwgKHZhbHMsIGV4cGVjdGVkKSBpbiBlbnVtZXJhdGUodGVzdF92YWx1ZXMpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGFjdHVhbCA9IG1hdGguZnN1bSh2YWxzKQorICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ0ZXN0ICVkIGZhaWxlZDogZ290IE92ZXJmbG93RXJyb3IsIGV4cGVjdGVkICVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciBtYXRoLmZzdW0oJS4xMDByKSIgJSAoaSwgZXhwZWN0ZWQsIHZhbHMpKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ0ZXN0ICVkIGZhaWxlZDogZ290IFZhbHVlRXJyb3IsIGV4cGVjdGVkICVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciBtYXRoLmZzdW0oJS4xMDByKSIgJSAoaSwgZXhwZWN0ZWQsIHZhbHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgICAgIGZyb20gcmFuZG9tIGltcG9ydCByYW5kb20sIGdhdXNzLCBzaHVmZmxlCisgICAgICAgIGZvciBqIGluIHhyYW5nZSgxMDAwKToKKyAgICAgICAgICAgIHZhbHMgPSBbNywgMWUxMDAsIC03LCAtMWUxMDAsIC05ZS0yMCwgOGUtMjBdICogMTAKKyAgICAgICAgICAgIHMgPSAwCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMjAwKToKKyAgICAgICAgICAgICAgICB2ID0gZ2F1c3MoMCwgcmFuZG9tKCkpICoqIDcgLSBzCisgICAgICAgICAgICAgICAgcyArPSB2CisgICAgICAgICAgICAgICAgdmFscy5hcHBlbmQodikKKyAgICAgICAgICAgIHNodWZmbGUodmFscykKKworICAgICAgICAgICAgcyA9IG1zdW0odmFscykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXN1bSh2YWxzKSwgbWF0aC5mc3VtKHZhbHMpKQorCisgICAgZGVmIHRlc3RIeXBvdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmh5cG90KQorICAgICAgICBzZWxmLmZ0ZXN0KCdoeXBvdCgwLDApJywgbWF0aC5oeXBvdCgwLDApLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdoeXBvdCgzLDQpJywgbWF0aC5oeXBvdCgzLDQpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguaHlwb3QoTkFOLCBJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5oeXBvdChJTkYsIE5BTiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmh5cG90KE5BTiwgTklORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmh5cG90KE5JTkYsIE5BTiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5oeXBvdCgxLjAsIE5BTikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmh5cG90KE5BTiwgLTIuMCkpKQorCisgICAgZGVmIHRlc3RMZGV4cChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmxkZXhwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdsZGV4cCgwLDEpJywgbWF0aC5sZGV4cCgwLDEpLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdsZGV4cCgxLDEpJywgbWF0aC5sZGV4cCgxLDEpLCAyKQorICAgICAgICBzZWxmLmZ0ZXN0KCdsZGV4cCgxLC0xKScsIG1hdGgubGRleHAoMSwtMSksIDAuNSkKKyAgICAgICAgc2VsZi5mdGVzdCgnbGRleHAoLTEsMSknLCBtYXRoLmxkZXhwKC0xLDEpLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbWF0aC5sZGV4cCwgMS4sIDEwMDAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG1hdGgubGRleHAsIC0xLiwgMTAwMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKDEuLCAtMTAwMDAwMCksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoLTEuLCAtMTAwMDAwMCksIC0wLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKElORiwgMzApLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cChOSU5GLCAtMjEzKSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5sZGV4cChOQU4sIDApKSkKKworICAgICAgICAjIGxhcmdlIHNlY29uZCBhcmd1bWVudAorICAgICAgICBmb3IgbiBpbiBbMTAqKjUsIDEwTCoqNSwgMTAqKjEwLCAxMEwqKjEwLCAxMCoqMjAsIDEwKio0MF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoSU5GLCAtbiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cChOSU5GLCAtbiksIE5JTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoMS4sIC1uKSwgMC4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoLTEuLCAtbiksIC0wLikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cCgwLiwgLW4pLCAwLikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cCgtMC4sIC1uKSwgLTAuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5sZGV4cChOQU4sIC1uKSkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG1hdGgubGRleHAsIDEuLCBuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbWF0aC5sZGV4cCwgLTEuLCBuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKDAuLCBuKSwgMC4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubGRleHAoLTAuLCBuKSwgLTAuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxkZXhwKElORiwgbiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5sZGV4cChOSU5GLCBuKSwgTklORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgubGRleHAoTkFOLCBuKSkpCisKKyAgICBkZWYgdGVzdExvZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmxvZykKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nKDEvZSknLCBtYXRoLmxvZygxL21hdGguZSksIC0xKQorICAgICAgICBzZWxmLmZ0ZXN0KCdsb2coMSknLCBtYXRoLmxvZygxKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nKGUpJywgbWF0aC5sb2cobWF0aC5lKSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nKDMyLDIpJywgbWF0aC5sb2coMzIsMiksIDUpCisgICAgICAgIHNlbGYuZnRlc3QoJ2xvZygxMCoqNDAsIDEwKScsIG1hdGgubG9nKDEwKio0MCwgMTApLCA0MCkKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nKDEwKio0MCwgMTAqKjIwKScsIG1hdGgubG9nKDEwKio0MCwgMTAqKjIwKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxvZyhJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgubG9nLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmxvZyhOQU4pKSkKKworICAgIGRlZiB0ZXN0TG9nMXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5sb2cxcCkKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nMXAoMS9lIC0xKScsIG1hdGgubG9nMXAoMS9tYXRoLmUtMSksIC0xKQorICAgICAgICBzZWxmLmZ0ZXN0KCdsb2cxcCgwKScsIG1hdGgubG9nMXAoMCksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ2xvZzFwKGUtMSknLCBtYXRoLmxvZzFwKG1hdGguZS0xKSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nMXAoMSknLCBtYXRoLmxvZzFwKDEpLCBtYXRoLmxvZygyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxvZzFwKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5sb2cxcCwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5sb2cxcChOQU4pKSkKKyAgICAgICAgbj0gMioqOTAKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChtYXRoLmxvZzFwKG4pLCA2Mi4zODMyNDYyNTAzOTUwNzUpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwobWF0aC5sb2cxcChuKSwgbWF0aC5sb2cxcChmbG9hdChuKSkpCisKKyAgICBkZWYgdGVzdExvZzEwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgubG9nMTApCisgICAgICAgIHNlbGYuZnRlc3QoJ2xvZzEwKDAuMSknLCBtYXRoLmxvZzEwKDAuMSksIC0xKQorICAgICAgICBzZWxmLmZ0ZXN0KCdsb2cxMCgxKScsIG1hdGgubG9nMTAoMSksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ2xvZzEwKDEwKScsIG1hdGgubG9nMTAoMTApLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubG9nKElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5sb2cxMCwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5sb2cxMChOQU4pKSkKKworICAgIGRlZiB0ZXN0TW9kZihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLm1vZGYpCisKKyAgICAgICAgZGVmIHRlc3Rtb2RmKG5hbWUsIHJlc3VsdCwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgKHYxLCB2MiksIChlMSwgZTIpID0gcmVzdWx0LCBleHBlY3RlZAorICAgICAgICAgICAgaWYgYWJzKHYxLWUxKSA+IGVwcyBvciBhYnModjItZTIpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnJXMgcmV0dXJuZWQgJXIsIGV4cGVjdGVkICVyJyVcCisgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lLCAodjEsdjIpLCAoZTEsZTIpKSkKKworICAgICAgICB0ZXN0bW9kZignbW9kZigxLjUpJywgbWF0aC5tb2RmKDEuNSksICgwLjUsIDEuMCkpCisgICAgICAgIHRlc3Rtb2RmKCdtb2RmKC0xLjUpJywgbWF0aC5tb2RmKC0xLjUpLCAoLTAuNSwgLTEuMCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLm1vZGYoSU5GKSwgKDAuMCwgSU5GKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLm1vZGYoTklORiksICgtMC4wLCBOSU5GKSkKKworICAgICAgICBtb2RmX25hbiA9IG1hdGgubW9kZihOQU4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1vZGZfbmFuWzBdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obW9kZl9uYW5bMV0pKQorCisgICAgZGVmIHRlc3RQb3coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5wb3cpCisgICAgICAgIHNlbGYuZnRlc3QoJ3BvdygwLDEpJywgbWF0aC5wb3coMCwxKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgncG93KDEsMCknLCBtYXRoLnBvdygxLDApLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCdwb3coMiwxKScsIG1hdGgucG93KDIsMSksIDIpCisgICAgICAgIHNlbGYuZnRlc3QoJ3BvdygyLC0xKScsIG1hdGgucG93KDIsLTEpLCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coSU5GLCAxKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KE5JTkYsIDEpLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChtYXRoLnBvdygxLCBJTkYpKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG1hdGgucG93KDEsIE5JTkYpKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgucG93KE5BTiwgMSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnBvdygyLCBOQU4pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5wb3coMCwgTkFOKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMSwgTkFOKSwgMSkKKworICAgICAgICAjIHBvdygwLiwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygwLiwgSU5GKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMC4sIDMuKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMC4sIDIuMyksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDAuLCAyLiksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDAuLCAwLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDAuLCAtMC4pLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIDAuLCAtMi4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgucG93LCAwLiwgLTIuMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIDAuLCAtMy4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgucG93LCAwLiwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5wb3coMC4sIE5BTikpKQorCisgICAgICAgICMgcG93KElORiwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhJTkYsIElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhJTkYsIDMuKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KElORiwgMi4zKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KElORiwgMi4pLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coSU5GLCAwLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KElORiwgLTAuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coSU5GLCAtMi4pLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhJTkYsIC0yLjMpLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhJTkYsIC0zLiksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KElORiwgTklORiksIDAuKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnBvdyhJTkYsIE5BTikpKQorCisgICAgICAgICMgcG93KC0wLiwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMC4sIElORiksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KC0wLiwgMy4pLCAtMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTAuLCAyLjMpLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMC4sIDIuKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTAuLCAwLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KC0wLiwgLTAuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgucG93LCAtMC4sIC0yLikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIC0wLiwgLTIuMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIC0wLiwgLTMuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnBvdywgLTAuLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnBvdygtMC4sIE5BTikpKQorCisgICAgICAgICMgcG93KE5JTkYsIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coTklORiwgSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KE5JTkYsIDMuKSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhOSU5GLCAyLjMpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coTklORiwgMi4pLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coTklORiwgMC4pLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhOSU5GLCAtMC4pLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhOSU5GLCAtMi4pLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdyhOSU5GLCAtMi4zKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coTklORiwgLTMuKSwgLTAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KE5JTkYsIE5JTkYpLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5wb3coTklORiwgTkFOKSkpCisKKyAgICAgICAgIyBwb3coLTEsIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTEuLCBJTkYpLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMS4sIDMuKSwgLTEuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnBvdywgLTEuLCAyLjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTEuLCAyLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KC0xLiwgMC4pLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMS4sIC0wLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KC0xLiwgLTIuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgucG93LCAtMS4sIC0yLjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTEuLCAtMy4pLCAtMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTEuLCBOSU5GKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgucG93KC0xLiwgTkFOKSkpCisKKyAgICAgICAgIyBwb3coMSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygxLiwgSU5GKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMS4sIDMuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMS4sIDIuMyksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDEuLCAyLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDEuLCAwLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDEuLCAtMC4pLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygxLiwgLTIuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMS4sIC0yLjMpLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygxLiwgLTMuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMS4sIE5JTkYpLCAxLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygxLiwgTkFOKSwgMS4pCisKKyAgICAgICAgIyBwb3coeCwgMCkgc2hvdWxkIGJlIDEgZm9yIGFueSB4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMi4zLCAwLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KC0yLjMsIDAuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coTkFOLCAwLiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDIuMywgLTAuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTIuMywgLTAuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coTkFOLCAtMC4pLCAxLikKKworICAgICAgICAjIHBvdyh4LCB5KSBpcyBpbnZhbGlkIGlmIHggaXMgbmVnYXRpdmUgYW5kIHkgaXMgbm90IGludGVncmFsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgucG93LCAtMS4sIDIuMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIC0xNS4sIC0zLjEpCisKKyAgICAgICAgIyBwb3coeCwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygxLjksIE5JTkYpLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygxLjEsIE5JTkYpLCAwLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygwLjksIE5JTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coMC4xLCBOSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KC0wLjEsIE5JTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTAuOSwgTklORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygtMS4xLCBOSU5GKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTEuOSwgTklORiksIDAuKQorCisgICAgICAgICMgcG93KHgsIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygxLjksIElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygxLjEsIElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnBvdygwLjksIElORiksIDAuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KDAuMSwgSU5GKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTAuMSwgSU5GKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTAuOSwgSU5GKSwgMC4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5wb3coLTEuMSwgSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgucG93KC0xLjksIElORiksIElORikKKworICAgICAgICAjIHBvdyh4LCB5KSBzaG91bGQgd29yayBmb3IgeCBuZWdhdGl2ZSwgeSBhbiBpbnRlZ2VyCisgICAgICAgIHNlbGYuZnRlc3QoJygtMi4pKiozLicsIG1hdGgucG93KC0yLjAsIDMuMCksIC04LjApCisgICAgICAgIHNlbGYuZnRlc3QoJygtMi4pKioyLicsIG1hdGgucG93KC0yLjAsIDIuMCksIDQuMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnKC0yLikqKjEuJywgbWF0aC5wb3coLTIuMCwgMS4wKSwgLTIuMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnKC0yLikqKjAuJywgbWF0aC5wb3coLTIuMCwgMC4wKSwgMS4wKQorICAgICAgICBzZWxmLmZ0ZXN0KCcoLTIuKSoqLTAuJywgbWF0aC5wb3coLTIuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnKC0yLikqKi0xLicsIG1hdGgucG93KC0yLjAsIC0xLjApLCAtMC41KQorICAgICAgICBzZWxmLmZ0ZXN0KCcoLTIuKSoqLTIuJywgbWF0aC5wb3coLTIuMCwgLTIuMCksIDAuMjUpCisgICAgICAgIHNlbGYuZnRlc3QoJygtMi4pKiotMy4nLCBtYXRoLnBvdygtMi4wLCAtMy4wKSwgLTAuMTI1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnBvdywgLTIuMCwgLTAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5wb3csIC0yLjAsIDAuNSkKKworICAgICAgICAjIHRoZSBmb2xsb3dpbmcgdGVzdHMgaGF2ZSBiZWVuIGNvbW1lbnRlZCBvdXQgc2luY2UgdGhleSBkb24ndAorICAgICAgICAjIHJlYWxseSBiZWxvbmcgaGVyZTogIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiAqKiBmb3IgZmxvYXRzIGlzCisgICAgICAgICMgaW5kZXBlbmRlbnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIG1hdGgucG93CisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKDEqKk5BTiwgMSkKKyAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWwoMSoqSU5GLCAxKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbCgxKipOSU5GLCAxKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbCgxKiowLCAxKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbCgxLioqTkFOLCAxKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbCgxLioqSU5GLCAxKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbCgxLioqTklORiwgMSkKKyAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWwoMS4qKjAsIDEpCisKKyAgICBkZWYgdGVzdFJhZGlhbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5yYWRpYW5zKQorICAgICAgICBzZWxmLmZ0ZXN0KCdyYWRpYW5zKDE4MCknLCBtYXRoLnJhZGlhbnMoMTgwKSwgbWF0aC5waSkKKyAgICAgICAgc2VsZi5mdGVzdCgncmFkaWFucyg5MCknLCBtYXRoLnJhZGlhbnMoOTApLCBtYXRoLnBpLzIpCisgICAgICAgIHNlbGYuZnRlc3QoJ3JhZGlhbnMoLTQ1KScsIG1hdGgucmFkaWFucygtNDUpLCAtbWF0aC5waS80KQorCisgICAgZGVmIHRlc3RTaW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5zaW4pCisgICAgICAgIHNlbGYuZnRlc3QoJ3NpbigwKScsIG1hdGguc2luKDApLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCdzaW4ocGkvMiknLCBtYXRoLnNpbihtYXRoLnBpLzIpLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCdzaW4oLXBpLzIpJywgbWF0aC5zaW4oLW1hdGgucGkvMiksIC0xKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnNpbihJTkYpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguc2luKE5JTkYpKSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnNpbiwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5zaW4sIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguc2luKE5BTikpKQorCisgICAgZGVmIHRlc3RTaW5oKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguc2luaCkKKyAgICAgICAgc2VsZi5mdGVzdCgnc2luaCgwKScsIG1hdGguc2luaCgwKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnc2luaCgxKSoqMi1jb3NoKDEpKioyJywgbWF0aC5zaW5oKDEpKioyLW1hdGguY29zaCgxKSoqMiwgLTEpCisgICAgICAgIHNlbGYuZnRlc3QoJ3NpbmgoMSkrc2luaCgtMSknLCBtYXRoLnNpbmgoMSkrbWF0aC5zaW5oKC0xKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnNpbmgoSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguc2luaChOSU5GKSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5zaW5oKE5BTikpKQorCisgICAgZGVmIHRlc3RTcXJ0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguc3FydCkKKyAgICAgICAgc2VsZi5mdGVzdCgnc3FydCgwKScsIG1hdGguc3FydCgwKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgnc3FydCgxKScsIG1hdGguc3FydCgxKSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgnc3FydCg0KScsIG1hdGguc3FydCg0KSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnNxcnQoSU5GKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnNxcnQsIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguc3FydChOQU4pKSkKKworICAgIGRlZiB0ZXN0VGFuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgudGFuKQorICAgICAgICBzZWxmLmZ0ZXN0KCd0YW4oMCknLCBtYXRoLnRhbigwKSwgMCkKKyAgICAgICAgc2VsZi5mdGVzdCgndGFuKHBpLzQpJywgbWF0aC50YW4obWF0aC5waS80KSwgMSkKKyAgICAgICAgc2VsZi5mdGVzdCgndGFuKC1waS80KScsIG1hdGgudGFuKC1tYXRoLnBpLzQpLCAtMSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC50YW4oSU5GKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLnRhbihOSU5GKSkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgudGFuLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLnRhbiwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC50YW4oTkFOKSkpCisKKyAgICBkZWYgdGVzdFRhbmgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC50YW5oKQorICAgICAgICBzZWxmLmZ0ZXN0KCd0YW5oKDApJywgbWF0aC50YW5oKDApLCAwKQorICAgICAgICBzZWxmLmZ0ZXN0KCd0YW5oKDEpK3RhbmgoLTEpJywgbWF0aC50YW5oKDEpK21hdGgudGFuaCgtMSksIDApCisgICAgICAgIHNlbGYuZnRlc3QoJ3RhbmgoaW5mKScsIG1hdGgudGFuaChJTkYpLCAxKQorICAgICAgICBzZWxmLmZ0ZXN0KCd0YW5oKC1pbmYpJywgbWF0aC50YW5oKE5JTkYpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC50YW5oKE5BTikpKQorICAgICAgICAjIGNoZWNrIHRoYXQgdGFuaCgtMC4pID09IC0wLiBvbiBJRUVFIDc1NCBzeXN0ZW1zCisgICAgICAgIGlmIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC50YW5oKC0wLiksIC0wLikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigxLiwgbWF0aC50YW5oKC0wLikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoLmNvcHlzaWduKDEuLCAtMC4pKQorCisgICAgZGVmIHRlc3RfdHJ1bmMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC50cnVuYygxKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnRydW5jKC0xKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShtYXRoLnRydW5jKDEpKSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUobWF0aC50cnVuYygxLjUpKSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgudHJ1bmMoMS41KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnRydW5jKC0xLjUpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnRydW5jKDEuOTk5OTk5KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnRydW5jKC0xLjk5OTk5OSksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgudHJ1bmMoLTAuOTk5OTk5KSwgLTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC50cnVuYygtMTAwLjk5OSksIC0xMDApCisKKyAgICAgICAgY2xhc3MgVGVzdFRydW5jKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX190cnVuY19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAyMworCisgICAgICAgIGNsYXNzIFRlc3ROb1RydW5jKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnRydW5jKFRlc3RUcnVuYygpKSwgMjMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLnRydW5jKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgudHJ1bmMsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKSwgbWF0aC50cnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdE5vVHJ1bmMoKSkKKworICAgIGRlZiB0ZXN0SXNuYW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGZsb2F0KCJuYW4iKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKGZsb2F0KCJpbmYiKSogMC4pKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hdGguaXNuYW4oZmxvYXQoImluZiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRoLmlzbmFuKDAuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRoLmlzbmFuKDEuKSkKKworICAgIGRlZiB0ZXN0SXNpbmYoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzaW5mKGZsb2F0KCJpbmYiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzaW5mKGZsb2F0KCItaW5mIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc2luZigxRTQwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzaW5mKC0xRTQwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0aC5pc2luZihmbG9hdCgibmFuIikpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hdGguaXNpbmYoMC4pKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hdGguaXNpbmYoMS4pKQorCisgICAgIyBSRURfRkxBRyAxNi1PY3QtMjAwMCBUaW0KKyAgICAjIFdoaWxlIDIuMCBpcyBtb3JlIGNvbnNpc3RlbnQgYWJvdXQgZXhjZXB0aW9ucyB0aGFuIHByZXZpb3VzIHJlbGVhc2VzLCBpdAorICAgICMgc3RpbGwgZmFpbHMgdGhpcyBwYXJ0IG9mIHRoZSB0ZXN0IG9uIHNvbWUgcGxhdGZvcm1zLiAgRm9yIG5vdywgd2Ugb25seQorICAgICMgKnJ1biogdGVzdF9leGNlcHRpb25zKCkgaW4gdmVyYm9zZSBtb2RlLCBzbyB0aGF0IHRoaXMgaXNuJ3Qgbm9ybWFsbHkKKyAgICAjIHRlc3RlZC4KKworICAgIGlmIHZlcmJvc2U6CisgICAgICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeCA9IG1hdGguZXhwKC0xMDAwMDAwMDAwKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICMgbWF0aG1vZHVsZS5jIGlzIGZhaWxpbmcgdG8gd2VlZCBvdXQgdW5kZXJmbG93cyBmcm9tIGxpYm0sIG9yCisgICAgICAgICAgICAgICAgIyB3ZSd2ZSBnb3QgYW4gZnAgZm9ybWF0IHdpdGggaHVnZSBkeW5hbWljIHJhbmdlCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmRlcmZsb3dpbmcgZXhwKCkgc2hvdWxkIG5vdCBoYXZlIHJhaXNlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJhbiBleGNlcHRpb24iKQorICAgICAgICAgICAgaWYgeCAhPSAwOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgidW5kZXJmbG93aW5nIGV4cCgpIHNob3VsZCBoYXZlIHJldHVybmVkIDAiKQorCisgICAgICAgICAgICAjIElmIHRoaXMgZmFpbHMsIHByb2JhYmx5IHVzaW5nIGEgc3RyaWN0IElFRUUtNzU0IGNvbmZvcm1pbmcgbGlibSwgYW5kIHgKKyAgICAgICAgICAgICMgaXMgK0luZiBhZnRlcndhcmRzLiAgQnV0IFB5dGhvbiB3YW50cyBvdmVyZmxvd3MgZGV0ZWN0ZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB4ID0gbWF0aC5leHAoMTAwMDAwMDAwMCkKKyAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJvdmVyZmxvd2luZyBleHAoKSBkaWRuJ3QgdHJpZ2dlciBPdmVyZmxvd0Vycm9yIikKKworICAgICAgICAgICAgIyBJZiB0aGlzIGZhaWxzLCBpdCBjb3VsZCBiZSBhIHB1enpsZS4gIE9uZSBvZGQgcG9zc2liaWxpdHkgaXMgdGhhdAorICAgICAgICAgICAgIyBtYXRobW9kdWxlLmMncyBtYWNyb3MgYXJlIGdldHRpbmcgY29uZnVzZWQgd2hpbGUgY29tcGFyaW5nCisgICAgICAgICAgICAjIEluZiAoSFVHRV9WQUwpIHRvIGEgTmFOLCBhbmQgYXJ0aWZpY2lhbGx5IHNldHRpbmcgZXJybm8gdG8gRVJBTkdFCisgICAgICAgICAgICAjIGFzIGEgcmVzdWx0IChhbmQgc28gcmFpc2luZyBPdmVyZmxvd0Vycm9yIGluc3RlYWQpLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHggPSBtYXRoLnNxcnQoLTEuMCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzcXJ0KC0xKSBkaWRuJ3QgcmFpc2UgVmFsdWVFcnJvciIpCisKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF90ZXN0ZmlsZShzZWxmKToKKyAgICAgICAgZm9yIGlkLCBmbiwgYXIsIGFpLCBlciwgZWksIGZsYWdzIGluIHBhcnNlX3Rlc3RmaWxlKHRlc3RfZmlsZSk6CisgICAgICAgICAgICAjIFNraXAgaWYgZWl0aGVyIHRoZSBpbnB1dCBvciByZXN1bHQgaXMgY29tcGxleCwgb3IgaWYKKyAgICAgICAgICAgICMgZmxhZ3MgaXMgbm9uZW1wdHkKKyAgICAgICAgICAgIGlmIGFpICE9IDAuIG9yIGVpICE9IDAuIG9yIGZsYWdzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBmbiBpbiBbJ3JlY3QnLCAncG9sYXInXToKKyAgICAgICAgICAgICAgICAjIG5vIHJlYWwgdmVyc2lvbnMgb2YgcmVjdCwgcG9sYXIKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIobWF0aCwgZm4pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYyhhcikKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAoIlVuZXhwZWN0ZWQgVmFsdWVFcnJvciBpbiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0ICVzOiVzKCVyKVxuIiAlIChpZCwgZm4sIGFyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwobWVzc2FnZSkKKyAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAoIlVuZXhwZWN0ZWQgT3ZlcmZsb3dFcnJvciBpbiAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0ICVzOiVzKCVyKVxuIiAlIChpZCwgZm4sIGFyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwobWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuZnRlc3QoIiVzOiVzKCVyKSIgJSAoaWQsIGZuLCBhciksIHJlc3VsdCwgZXIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgcmVxdWlyZXMgSUVFRSA3NTQgZG91YmxlcyIpCisgICAgZGVmIHRlc3RfbXRlc3RmaWxlKHNlbGYpOgorICAgICAgICBBTExPV0VEX0VSUk9SID0gMjAgICMgcGVybWl0dGVkIGVycm9yLCBpbiB1bHBzCisgICAgICAgIGZhaWxfZm10ID0gInt9Ont9KHshcn0pOiBleHBlY3RlZCB7IXJ9LCBnb3QgeyFyfSIKKworICAgICAgICBmYWlsdXJlcyA9IFtdCisgICAgICAgIGZvciBpZCwgZm4sIGFyZywgZXhwZWN0ZWQsIGZsYWdzIGluIHBhcnNlX210ZXN0ZmlsZShtYXRoX3Rlc3RjYXNlcyk6CisgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihtYXRoLCBmbikKKworICAgICAgICAgICAgaWYgJ2ludmFsaWQnIGluIGZsYWdzIG9yICdkaXZpZGUtYnktemVybycgaW4gZmxhZ3M6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAnVmFsdWVFcnJvcicKKyAgICAgICAgICAgIGVsaWYgJ292ZXJmbG93JyBpbiBmbGFnczoKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICdPdmVyZmxvd0Vycm9yJworCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZ290ID0gZnVuYyhhcmcpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBnb3QgPSAnVmFsdWVFcnJvcicKKyAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgICAgIGdvdCA9ICdPdmVyZmxvd0Vycm9yJworCisgICAgICAgICAgICBhY2N1cmFjeV9mYWlsdXJlID0gTm9uZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShnb3QsIGZsb2F0KSBhbmQgaXNpbnN0YW5jZShleHBlY3RlZCwgZmxvYXQpOgorICAgICAgICAgICAgICAgIGlmIG1hdGguaXNuYW4oZXhwZWN0ZWQpIGFuZCBtYXRoLmlzbmFuKGdvdCk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbm90IG1hdGguaXNuYW4oZXhwZWN0ZWQpIGFuZCBub3QgbWF0aC5pc25hbihnb3QpOgorICAgICAgICAgICAgICAgICAgICBpZiBmbiA9PSAnbGdhbW1hJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgd2UgdXNlIGEgd2Vha2VyIGFjY3VyYWN5IHRlc3QgZm9yIGxnYW1tYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbGdhbW1hIG9ubHkgYWNoaWV2ZXMgYW4gYWJzb2x1dGUgZXJyb3Igb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYSBmZXcgbXVsdGlwbGVzIG9mIHRoZSBtYWNoaW5lIGFjY3VyYWN5LCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgIyBnZW5lcmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgYWNjdXJhY3lfZmFpbHVyZSA9IGFjY19jaGVjayhleHBlY3RlZCwgZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxfZXJyID0gNWUtMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19lcnIgPSA1ZS0xNSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBmbiA9PSAnZXJmYyc6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGVyZmMgaGFzIGxlc3MtdGhhbi1pZGVhbCBhY2N1cmFjeSBmb3IgbGFyZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYXJndW1lbnRzICh4IH4gMjUgb3Igc28pLCBtYWlubHkgZHVlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBlcnJvciBpbnZvbHZlZCBpbiBjb21wdXRpbmcgZXhwKC14KngpLgorICAgICAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAgICAgIyBYWFggV291bGQgYmUgYmV0dGVyIHRvIHdlYWtlbiB0aGlzIHRlc3Qgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgIyBmb3IgbGFyZ2UgeCwgaW5zdGVhZCBvZiBmb3IgYWxsIHguCisgICAgICAgICAgICAgICAgICAgICAgICBhY2N1cmFjeV9mYWlsdXJlID0gdWxwc19jaGVjayhleHBlY3RlZCwgZ290LCAyMDAwKQorCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhY2N1cmFjeV9mYWlsdXJlID0gdWxwc19jaGVjayhleHBlY3RlZCwgZ290LCAyMCkKKyAgICAgICAgICAgICAgICAgICAgaWYgYWNjdXJhY3lfZmFpbHVyZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShnb3QsIHN0cikgYW5kIGlzaW5zdGFuY2UoZXhwZWN0ZWQsIHN0cik6CisgICAgICAgICAgICAgICAgaWYgZ290ID09IGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmYWlsX21zZyA9IGZhaWxfZm10LmZvcm1hdChpZCwgZm4sIGFyZywgZXhwZWN0ZWQsIGdvdCkKKyAgICAgICAgICAgIGlmIGFjY3VyYWN5X2ZhaWx1cmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZmFpbF9tc2cgKz0gJyAoe30pJy5mb3JtYXQoYWNjdXJhY3lfZmFpbHVyZSkKKyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChmYWlsX21zZykKKworICAgICAgICBpZiBmYWlsdXJlczoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnRmFpbHVyZXMgaW4gdGVzdF9tdGVzdGZpbGU6XG4gICcgKworICAgICAgICAgICAgICAgICAgICAgICdcbiAgJy5qb2luKGZhaWx1cmVzKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgZnJvbSBkb2N0ZXN0IGltcG9ydCBEb2NGaWxlU3VpdGUKKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoTWF0aFRlc3RzKSkKKyAgICBzdWl0ZS5hZGRUZXN0KERvY0ZpbGVTdWl0ZSgiaWVlZTc1NC50eHQiKSkKKyAgICBydW5fdW5pdHRlc3Qoc3VpdGUpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21kNS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21kNS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzBlOGUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbWQ1LnB5CkBAIC0wLDAgKzEsNjEgQEAKKyMgVGVzdGluZyBtZDUgbW9kdWxlCitpbXBvcnQgd2FybmluZ3MKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAidGhlIG1kNSBtb2R1bGUgaXMgZGVwcmVjYXRlZC4qIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIG1kNSBpbXBvcnQgbWQ1Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitkZWYgaGV4c3RyKHMpOgorICAgIGltcG9ydCBzdHJpbmcKKyAgICBoID0gc3RyaW5nLmhleGRpZ2l0cworICAgIHIgPSAnJworICAgIGZvciBjIGluIHM6CisgICAgICAgIGkgPSBvcmQoYykKKyAgICAgICAgciA9IHIgKyBoWyhpID4+IDQpICYgMHhGXSArIGhbaSAmIDB4Rl0KKyAgICByZXR1cm4gcgorCitjbGFzcyBNRDVfVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgbWQ1dGVzdChzZWxmLCBzLCBleHBlY3RlZCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGV4c3RyKG1kNShzKS5kaWdlc3QoKSksIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1kNShzKS5oZXhkaWdlc3QoKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5tZDV0ZXN0CisgICAgICAgIGVxKCcnLCAnZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UnKQorICAgICAgICBlcSgnYScsICcwY2MxNzViOWMwZjFiNmE4MzFjMzk5ZTI2OTc3MjY2MScpCisgICAgICAgIGVxKCdhYmMnLCAnOTAwMTUwOTgzY2QyNGZiMGQ2OTYzZjdkMjhlMTdmNzInKQorICAgICAgICBlcSgnbWVzc2FnZSBkaWdlc3QnLCAnZjk2YjY5N2Q3Y2I3OTM4ZDUyNWEyZjMxYWFmMTYxZDAnKQorICAgICAgICBlcSgnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonLCAnYzNmY2QzZDc2MTkyZTQwMDdkZmI0OTZjY2E2N2UxM2InKQorICAgICAgICBlcSgnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknLAorICAgICAgICAgICAnZDE3NGFiOThkMjc3ZDlmNWE1NjExYzJjOWY0MTlkOWYnKQorICAgICAgICBlcSgnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAnLAorICAgICAgICAgICAnNTdlZGY0YTIyYmUzYzk1NWFjNDlkYTJlMjEwN2I2N2EnKQorCisgICAgZGVmIHRlc3RfaGV4ZGlnZXN0KHNlbGYpOgorICAgICAgICAjIGhleGRpZ2VzdCBpcyBuZXcgd2l0aCBQeXRob24gMi4wCisgICAgICAgIG0gPSBtZDUoJ3Rlc3RpbmcgdGhlIGhleGRpZ2VzdCBtZXRob2QnKQorICAgICAgICBoID0gbS5oZXhkaWdlc3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleHN0cihtLmRpZ2VzdCgpKSwgaCkKKworICAgIGRlZiB0ZXN0X2xhcmdlX3VwZGF0ZShzZWxmKToKKyAgICAgICAgYWFzID0gJ2EnICogNjQKKyAgICAgICAgYmVlcyA9ICdiJyAqIDY0CisgICAgICAgIGNlZXMgPSAnYycgKiA2NAorCisgICAgICAgIG0xID0gbWQ1KCkKKyAgICAgICAgbTEudXBkYXRlKGFhcykKKyAgICAgICAgbTEudXBkYXRlKGJlZXMpCisgICAgICAgIG0xLnVwZGF0ZShjZWVzKQorCisgICAgICAgIG0yID0gbWQ1KCkKKyAgICAgICAgbTIudXBkYXRlKGFhcyArIGJlZXMgKyBjZWVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0xLmRpZ2VzdCgpLCBtMi5kaWdlc3QoKSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTUQ1X1Rlc3QpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21lbW9yeWlvLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkNTU5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21lbW9yeWlvLnB5CkBAIC0wLDAgKzEsNzE3IEBACisiIiJVbml0IHRlc3RzIGZvciBtZW1vcnktYmFzZWQgZmlsZS1saWtlIG9iamVjdHMuCitTdHJpbmdJTyAtLSBmb3IgdW5pY29kZSBzdHJpbmdzCitCeXRlc0lPIC0tIGZvciBieXRlcworIiIiCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKKworaW1wb3J0IGlvCitpbXBvcnQgX3B5aW8gYXMgcHlpbworaW1wb3J0IHBpY2tsZQorCitjbGFzcyBNZW1vcnlTZWVrVGVzdE1peGluOgorCisgICAgZGVmIHRlc3RJbml0KHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBieXRlc0lvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgIGRlZiB0ZXN0UmVhZChzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgYnl0ZXNJbyA9IHNlbGYuaW9jbGFzcyhidWYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjFdLCBieXRlc0lvLnJlYWQoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzE6NV0sIGJ5dGVzSW8ucmVhZCg0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbNTpdLCBieXRlc0lvLnJlYWQoOTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkVPRiwgYnl0ZXNJby5yZWFkKCkpCisKKyAgICBkZWYgdGVzdFJlYWROb0FyZ3Moc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIGJ5dGVzSW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLCBieXRlc0lvLnJlYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkVPRiwgYnl0ZXNJby5yZWFkKCkpCisKKyAgICBkZWYgdGVzdFNlZWsoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIGJ5dGVzSW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorCisgICAgICAgIGJ5dGVzSW8ucmVhZCg1KQorICAgICAgICBieXRlc0lvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYsIGJ5dGVzSW8ucmVhZCgpKQorCisgICAgICAgIGJ5dGVzSW8uc2VlaygzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZlszOl0sIGJ5dGVzSW8ucmVhZCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ5dGVzSW8uc2VlaywgMC4wKQorCisgICAgZGVmIHRlc3RUZWxsKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBieXRlc0lvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGJ5dGVzSW8udGVsbCgpKQorICAgICAgICBieXRlc0lvLnNlZWsoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBieXRlc0lvLnRlbGwoKSkKKyAgICAgICAgYnl0ZXNJby5zZWVrKDEwMDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwMDAwLCBieXRlc0lvLnRlbGwoKSkKKworCitjbGFzcyBNZW1vcnlUZXN0TWl4aW46CisKKyAgICBkZWYgdGVzdF9kZXRhY2goc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuVW5zdXBwb3J0ZWRPcGVyYXRpb24sIGJ1Zi5kZXRhY2gpCisKKyAgICBkZWYgd3JpdGVfb3BzKHNlbGYsIGYsIHQpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUodCgiYmxhaC4iKSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5zZWVrKDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud3JpdGUodCgiSGVsbG8uIikpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuc2Vlayg1KSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKHQoIiB3b3JsZFxuXG5cbiIpKSwgOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnNlZWsoMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53cml0ZSh0KCJoIikpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudHJ1bmNhdGUoMTIpLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMSkKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoImhlbGxvIHdvcmxkXG4iKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYpCisKKyAgICAgICAgc2VsZi53cml0ZV9vcHMobWVtaW8sIHNlbGYuYnVmdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgc2VsZi53cml0ZV9vcHMobWVtaW8sIHNlbGYuYnVmdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8ud3JpdGUsIE5vbmUpCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8ud3JpdGUsIHNlbGYuYnVmdHlwZSgiIikpCisKKyAgICBkZWYgdGVzdF93cml0ZWxpbmVzKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby53cml0ZWxpbmVzKFtidWZdICogMTAwKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYgKiAxMDApCisgICAgICAgIG1lbWlvLndyaXRlbGluZXMoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmICogMTAwKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8ud3JpdGVsaW5lcywgW2J1Zl0gKyBbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLndyaXRlbGluZXMsIE5vbmUpCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8ud3JpdGVsaW5lcywgW10pCisKKyAgICBkZWYgdGVzdF93cml0ZWxpbmVzX2Vycm9yKHNlbGYpOgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIGRlZiBlcnJvcl9nZW4oKToKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuYnVmdHlwZSgnc3BhbScpCisgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBtZW1pby53cml0ZWxpbmVzLCBlcnJvcl9nZW4oKSkKKworICAgIGRlZiB0ZXN0X3RydW5jYXRlKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8udHJ1bmNhdGUsIC0xKQorICAgICAgICBtZW1pby5zZWVrKDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8udHJ1bmNhdGUoKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWZbOjZdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnRydW5jYXRlKDQpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1Zls6NF0pCisgICAgICAgICMgdHJ1bmNhdGUoKSBhY2NlcHRzIGxvbmcgb2JqZWN0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnRydW5jYXRlKDRMKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWZbOjRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnRlbGwoKSwgNikKKyAgICAgICAgbWVtaW8uc2VlaygwLCAyKQorICAgICAgICBtZW1pby53cml0ZShidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmWzo0XSArIGJ1ZikKKyAgICAgICAgcG9zID0gbWVtaW8udGVsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8udHJ1bmNhdGUoTm9uZSksIHBvcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby50ZWxsKCksIHBvcykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby50cnVuY2F0ZSwgJzAnKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLnRydW5jYXRlLCAwKQorCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBzZWxmLkVPRikKKyAgICAgICAgbWVtaW8uX19pbml0X18oYnVmICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYgKiAyKQorICAgICAgICBtZW1pby5fX2luaXRfXyhidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmKQorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgwKSwgc2VsZi5FT0YpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgxKSwgYnVmWzoxXSkKKyAgICAgICAgIyByZWFkKCkgYWNjZXB0cyBsb25nIG9iamVjdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKDRMKSwgYnVmWzE6NV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCg5MDApLCBidWZbNTpdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoKSwgc2VsZi5FT0YpCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKCksIGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKCksIHNlbGYuRU9GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnRlbGwoKSwgMTApCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKC0xKSwgYnVmKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShtZW1pby5yZWFkKCkpLCB0eXBlKGJ1ZikpCisgICAgICAgIG1lbWlvLnNlZWsoMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUobWVtaW8ucmVhZCgpKSwgdHlwZShidWYpKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZChOb25lKSwgYnVmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLnJlYWQsICcnKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLnJlYWQpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwXG4iKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYgKiAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmUoMCksIHNlbGYuRU9GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lKCksIGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZSgpLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmUoKSwgc2VsZi5FT0YpCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZSg1KSwgYnVmWzo1XSkKKyAgICAgICAgIyByZWFkbGluZSgpIGFjY2VwdHMgbG9uZyBvYmplY3RzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmUoNUwpLCBidWZbNToxMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmUoNSksIGJ1ZlsxMDoxNV0pCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZSgtMSksIGJ1ZikKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lKDApLCBzZWxmLkVPRikKKworICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTBcbiIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKChidWYgKiAzKVs6LTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lKCksIGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZSgpLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmUoKSwgYnVmWzotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmUoKSwgc2VsZi5FT0YpCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKG1lbWlvLnJlYWRsaW5lKCkpLCB0eXBlKGJ1ZikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmUoKSwgYnVmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLnJlYWRsaW5lLCAnJykKKyAgICAgICAgbWVtaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAgbWVtaW8ucmVhZGxpbmUpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MFxuIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmICogMTApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZXMoKSwgW2J1Zl0gKiAxMCkKKyAgICAgICAgbWVtaW8uc2Vlayg1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lcygpLCBbYnVmWzU6XV0gKyBbYnVmXSAqIDkpCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgIyByZWFkbGluZXMoKSBhY2NlcHRzIGxvbmcgb2JqZWN0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lcygxNUwpLCBbYnVmXSAqIDIpCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkbGluZXMoLTEpLCBbYnVmXSAqIDEwKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZGxpbmVzKDApLCBbYnVmXSAqIDEwKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShtZW1pby5yZWFkbGluZXMoKVswXSksIHR5cGUoYnVmKSkKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRsaW5lcyhOb25lKSwgW2J1Zl0gKiAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5yZWFkbGluZXMsICcnKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLnJlYWRsaW5lcykKKworICAgIGRlZiB0ZXN0X2l0ZXJhdG9yKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTBcbiIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZiAqIDEwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlcihtZW1pbyksIG1lbWlvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtZW1pbywgJ19faXRlcl9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1lbWlvLCAnbmV4dCcpKQorICAgICAgICBpID0gMAorICAgICAgICBmb3IgbGluZSBpbiBtZW1pbzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgYnVmKQorICAgICAgICAgICAgaSArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgMTApCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgaSA9IDAKKyAgICAgICAgZm9yIGxpbmUgaW4gbWVtaW86CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGJ1ZikKKyAgICAgICAgICAgIGkgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGksIDEwKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYgKiAyKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5leHQsIG1lbWlvKQorCisgICAgZGVmIHRlc3RfZ2V0dmFsdWUoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZikKKyAgICAgICAgbWVtaW8ucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUobWVtaW8uZ2V0dmFsdWUoKSksIHR5cGUoYnVmKSkKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmICogMTAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpWy0zOl0sIHNlbGYuYnVmdHlwZSgiODkwIikpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKyAgICAgICAgbWVtaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5nZXR2YWx1ZSkKKworICAgIGRlZiB0ZXN0X3NlZWsoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgICAgICBtZW1pby5yZWFkKDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLnNlZWssIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5zZWVrLCAxLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uc2VlaywgMSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5zZWVrKDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnNlZWsoMCwgMCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgpLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uc2VlaygzKSwgMykKKyAgICAgICAgIyBzZWVrKCkgYWNjZXB0cyBsb25nIG9iamVjdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5zZWVrKDNMKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5zZWVrKDAsIDEpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoKSwgYnVmWzM6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5zZWVrKGxlbihidWYpKSwgbGVuKGJ1ZikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgpLCBzZWxmLkVPRikKKyAgICAgICAgbWVtaW8uc2VlayhsZW4oYnVmKSArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgpLCBzZWxmLkVPRikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5zZWVrKDAsIDIpLCBsZW4oYnVmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKCksIHNlbGYuRU9GKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLnNlZWssIDApCisKKyAgICBkZWYgdGVzdF9vdmVyc2VlayhzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uc2VlayhsZW4oYnVmKSArIDEpLCAxMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKCksIHNlbGYuRU9GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnRlbGwoKSwgMTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmKQorICAgICAgICBtZW1pby53cml0ZShzZWxmLkVPRikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYpCisgICAgICAgIG1lbWlvLndyaXRlKGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYgKyBzZWxmLmJ1ZnR5cGUoJ1wwJykgKyBidWYpCisKKyAgICBkZWYgdGVzdF90ZWxsKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby50ZWxsKCksIDApCisgICAgICAgIG1lbWlvLnNlZWsoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby50ZWxsKCksIDUpCisgICAgICAgIG1lbWlvLnNlZWsoMTAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8udGVsbCgpLCAxMDAwMCkKKyAgICAgICAgbWVtaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby50ZWxsKQorCisgICAgZGVmIHRlc3RfZmx1c2goc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmZsdXNoKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9mbGFncyhzZWxmKToKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ud3JpdGFibGUoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkYWJsZSgpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnNlZWthYmxlKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uaXNhdHR5KCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmNsb3NlZCwgRmFsc2UpCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8ud3JpdGFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLnJlYWRhYmxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5zZWVrYWJsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uaXNhdHR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmNsb3NlZCwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzaW5nKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBkZWYgdGVzdDEoKToKKyAgICAgICAgICAgIGNsYXNzIE1lbUlPKHNlbGYuaW9jbGFzcyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgbSA9IE1lbUlPKGJ1ZikKKyAgICAgICAgICAgIHJldHVybiBtLmdldHZhbHVlKCkKKyAgICAgICAgZGVmIHRlc3QyKCk6CisgICAgICAgICAgICBjbGFzcyBNZW1JTyhzZWxmLmlvY2xhc3MpOgorICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhtZSwgYSwgYik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW9jbGFzcy5fX2luaXRfXyhtZSwgYSkKKyAgICAgICAgICAgIG0gPSBNZW1JTyhidWYsIE5vbmUpCisgICAgICAgICAgICByZXR1cm4gbS5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDEoKSwgYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QyKCksIGJ1ZikKKworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RpY3RfbGVhayhzZWxmKToKKyAgICAgICAgIyBUZXN0IGNhc2UgZm9yIGlzc3VlICM2MjQyLgorICAgICAgICAjIFRoaXMgd2lsbCBiZSBjYXVnaHQgYnkgcmVncnRlc3QucHkgLVIgaWYgdGhpcyBsZWFrLgorICAgICAgICBmb3IgXyBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICAgICAgbWVtaW8uZm9vID0gMQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKyAgICAgICAgbWVtaW8uZm9vID0gNDIKKyAgICAgICAgbWVtaW8uc2VlaygyKQorCisgICAgICAgIGNsYXNzIFBpY2tsZVRlc3RNZW1JTyhzZWxmLmlvY2xhc3MpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKG1lLCBpbml0dmFsdWUsIGZvbyk6CisgICAgICAgICAgICAgICAgc2VsZi5pb2NsYXNzLl9faW5pdF9fKG1lLCBpbml0dmFsdWUpCisgICAgICAgICAgICAgICAgbWUuZm9vID0gZm9vCisgICAgICAgICAgICAjIF9fZ2V0bmV3YXJnc19fIGlzIHVuZGVmaW5lZCBvbiBwdXJwb3NlLiBUaGlzIGNoZWNrcyB0aGF0IFBFUCAzMDcKKyAgICAgICAgICAgICMgaXMgdXNlZCB0byBwcm92aWRlIHBpY2tsaW5nIHN1cHBvcnQuCisKKyAgICAgICAgIyBQaWNrbGUgZXhwZWN0cyB0aGUgY2xhc3MgdG8gYmUgb24gdGhlIG1vZHVsZSBsZXZlbC4gSGVyZSB3ZSB1c2UgYQorICAgICAgICAjIGxpdHRsZSBoYWNrIHRvIGFsbG93IHRoZSBQaWNrbGVUZXN0TWVtSU8gY2xhc3MgdG8gZGVyaXZlIGZyb20KKyAgICAgICAgIyBzZWxmLmlvY2xhc3Mgd2l0aG91dCBoYXZpbmcgdG8gZGVmaW5lIGFsbCBjb21iaW5hdGlvbnMgZXhwbGljaXRseSBvbgorICAgICAgICAjIHRoZSBtb2R1bGUtbGV2ZWwuCisgICAgICAgIGltcG9ydCBfX21haW5fXworICAgICAgICBQaWNrbGVUZXN0TWVtSU8uX19tb2R1bGVfXyA9ICdfX21haW5fXycKKyAgICAgICAgX19tYWluX18uUGlja2xlVGVzdE1lbUlPID0gUGlja2xlVGVzdE1lbUlPCisgICAgICAgIHN1Ym1lbWlvID0gUGlja2xlVGVzdE1lbUlPKGJ1ZiwgODApCisgICAgICAgIHN1Ym1lbWlvLnNlZWsoMikKKworICAgICAgICAjIFdlIG9ubHkgc3VwcG9ydCBwaWNrbGUgcHJvdG9jb2wgMiBhbmQgb253YXJkIHNpbmNlIHdlIHVzZSBleHRlbmRlZAorICAgICAgICAjIF9fcmVkdWNlX18gQVBJIG9mIFBFUCAzMDcgdG8gcHJvdmlkZSBwaWNrbGluZyBzdXBwb3J0LgorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoMiwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpOgorICAgICAgICAgICAgZm9yIG9iaiBpbiAobWVtaW8sIHN1Ym1lbWlvKToKKyAgICAgICAgICAgICAgICBvYmoyID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvYmosIHByb3RvY29sPXByb3RvKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5nZXR2YWx1ZSgpLCBvYmoyLmdldHZhbHVlKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19jbGFzc19fLCBvYmoyLl9fY2xhc3NfXykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5mb28sIG9iajIuZm9vKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnRlbGwoKSwgb2JqMi50ZWxsKCkpCisgICAgICAgICAgICAgICAgb2JqLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwaWNrbGUuZHVtcHMsIG9iaiwgcHJvdG8pCisgICAgICAgIGRlbCBfX21haW5fXy5QaWNrbGVUZXN0TWVtSU8KKworCitjbGFzcyBQeUJ5dGVzSU9UZXN0KE1lbW9yeVRlc3RNaXhpbiwgTWVtb3J5U2Vla1Rlc3RNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBweWlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGJ1ZnR5cGUocyk6CisgICAgICAgIHJldHVybiBzLmVuY29kZSgiYXNjaWkiKQorICAgIGlvY2xhc3MgPSBweWlvLkJ5dGVzSU8KKyAgICBFT0YgPSBiIiIKKworICAgIGRlZiB0ZXN0X3JlYWQxKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5yZWFkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKCksIGJ1ZikKKworICAgIGRlZiB0ZXN0X3JlYWRpbnRvKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYpCisKKyAgICAgICAgYiA9IGJ5dGVhcnJheShiImhlbGxvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkaW50byhiKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiIjEyMzQ1IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkaW50byhiKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiIjY3ODkwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkaW50byhiKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiIjY3ODkwIikKKyAgICAgICAgYiA9IGJ5dGVhcnJheShiImhlbGxvIHdvcmxkIikKKyAgICAgICAgbWVtaW8uc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWRpbnRvKGIpLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiIjEyMzQ1Njc4OTBkIikKKyAgICAgICAgYiA9IGJ5dGVhcnJheShiIiIpCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkaW50byhiKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8ucmVhZGludG8sICcnKQorICAgICAgICBpbXBvcnQgYXJyYXkKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KGInYicsIGIiaGVsbG8gd29ybGQiKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYpCisgICAgICAgIG1lbWlvLnJlYWRpbnRvKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS50b3N0cmluZygpLCBiIjEyMzQ1Njc4OTBkIikKKyAgICAgICAgbWVtaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5yZWFkaW50bywgYikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYiIxMjMiKQorICAgICAgICBiID0gYnl0ZWFycmF5KCkKKyAgICAgICAgbWVtaW8uc2Vlayg0MikKKyAgICAgICAgbWVtaW8ucmVhZGludG8oYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiIiIpCisKKyAgICBkZWYgdGVzdF9yZWxhdGl2ZV9zZWVrKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIjEyMzQ1Njc4OTAiKQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcyhidWYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5zZWVrKC0xLCAxKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5zZWVrKDMsIDEpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnNlZWsoLTQsIDEpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnNlZWsoLTEsIDIpLCA5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnNlZWsoMSwgMSksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnNlZWsoMSwgMiksIDExKQorICAgICAgICBtZW1pby5zZWVrKC0zLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoKSwgYnVmWy0zOl0pCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgbWVtaW8uc2VlaygxLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoKSwgYnVmWzE6XSkKKworICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuaW9jbGFzcywgIjEyMzQ1Njc4OTAiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLndyaXRlLCAiMTIzNDU2Nzg5MCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8ud3JpdGVsaW5lcywgWyIxMjM0NTY3ODkwIl0pCisKKyAgICBkZWYgdGVzdF9ieXRlc19hcnJheShzZWxmKToKKyAgICAgICAgYnVmID0gYiIxMjM0NTY3ODkwIgorICAgICAgICBpbXBvcnQgYXJyYXkKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KGInYicsIGJ1ZikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ud3JpdGUoYSksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZikKKworICAgIGRlZiB0ZXN0X2lzc3VlNTQ0OShzZWxmKToKKyAgICAgICAgYnVmID0gc2VsZi5idWZ0eXBlKCIxMjM0NTY3ODkwIikKKyAgICAgICAgc2VsZi5pb2NsYXNzKGluaXRpYWxfYnl0ZXM9YnVmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuaW9jbGFzcywgYnVmLCBmb289Tm9uZSkKKworCitjbGFzcyBUZXh0SU9UZXN0TWl4aW46CisKKyAgICBkZWYgdGVzdF9uZXdsaW5lc19wcm9wZXJ0eShzZWxmKToKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MobmV3bGluZT1Ob25lKQorICAgICAgICAjIFRoZSBDIFN0cmluZ0lPIGRlY29kZXMgbmV3bGluZXMgaW4gd3JpdGUoKSBjYWxscywgYnV0IHRoZSBQeXRob24KKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbiBvbmx5IGRvZXMgd2hlbiByZWFkaW5nLiAgVGhpcyBmdW5jdGlvbiBmb3JjZXMgdGhlbSB0bworICAgICAgICAjIGJlIGRlY29kZWQgZm9yIHRlc3RpbmcuCisgICAgICAgIGRlZiBmb3JjZV9kZWNvZGUoKToKKyAgICAgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgICAgIG1lbWlvLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLm5ld2xpbmVzLCBOb25lKQorICAgICAgICBtZW1pby53cml0ZSgiYVxuIikKKyAgICAgICAgZm9yY2VfZGVjb2RlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5uZXdsaW5lcywgIlxuIikKKyAgICAgICAgbWVtaW8ud3JpdGUoImJcclxuIikKKyAgICAgICAgZm9yY2VfZGVjb2RlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5uZXdsaW5lcywgKCJcbiIsICJcclxuIikpCisgICAgICAgIG1lbWlvLndyaXRlKCJjXHJkIikKKyAgICAgICAgZm9yY2VfZGVjb2RlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5uZXdsaW5lcywgKCJcciIsICJcbiIsICJcclxuIikpCisKKyAgICBkZWYgdGVzdF9yZWxhdGl2ZV9zZWVrKHNlbGYpOgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgLTEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIDMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIC0zLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAtMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgMSwgMikKKworICAgIGRlZiB0ZXN0X3RleHRpb19wcm9wZXJ0aWVzKHNlbGYpOgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisKKyAgICAgICAgIyBUaGVzZSBhcmUganVzdCBkdW1teSB2YWx1ZXMgYnV0IHdlIG5ldmVydGhlbGVzcyBjaGVjayB0aGVtIGZvciBmZWFyCisgICAgICAgICMgb2YgdW5leHBlY3RlZCBicmVha2FnZS4KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobWVtaW8uZW5jb2RpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1lbWlvLmVycm9ycykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZW1pby5saW5lX2J1ZmZlcmluZykKKworICAgIGRlZiB0ZXN0X25ld2xpbmVfbm9uZShzZWxmKToKKyAgICAgICAgIyBuZXdsaW5lPU5vbmUKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoImFcbmJcclxuY1xyZCIsIG5ld2xpbmU9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1lbWlvKSwgWyJhXG4iLCAiYlxuIiwgImNcbiIsICJkIl0pCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKDEpLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgyKSwgIlxuYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgyKSwgIlxuYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgxKSwgIlxuIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MobmV3bGluZT1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIG1lbWlvLndyaXRlKCJhXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBtZW1pby53cml0ZSgiYlxyXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBtZW1pby53cml0ZSgiY1xyZCIpKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgpLCAiYVxuYlxuY1xuZCIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCJhXHJcbmIiLCBuZXdsaW5lPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgzKSwgImFcbmIiKQorCisgICAgZGVmIHRlc3RfbmV3bGluZV9lbXB0eShzZWxmKToKKyAgICAgICAgIyBuZXdsaW5lPSIiCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCJhXG5iXHJcbmNccmQiLCBuZXdsaW5lPSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobWVtaW8pLCBbImFcbiIsICJiXHJcbiIsICJjXHIiLCAiZCJdKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCg0KSwgImFcbmJcciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgyKSwgIlxuYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8ucmVhZCgxKSwgIlxyIikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MobmV3bGluZT0iIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBtZW1pby53cml0ZSgiYVxuIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbWVtaW8ud3JpdGUoImJcciIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIG1lbWlvLndyaXRlKCJcbmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBtZW1pby53cml0ZSgiXHJkIikpCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1lbWlvKSwgWyJhXG4iLCAiYlxyXG4iLCAiY1xyIiwgImQiXSkKKworICAgIGRlZiB0ZXN0X25ld2xpbmVfbGYoc2VsZik6CisgICAgICAgICMgbmV3bGluZT0iXG4iCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCJhXG5iXHJcbmNccmQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobWVtaW8pLCBbImFcbiIsICJiXHJcbiIsICJjXHJkIl0pCisKKyAgICBkZWYgdGVzdF9uZXdsaW5lX2NyKHNlbGYpOgorICAgICAgICAjIG5ld2xpbmU9IlxyIgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygiYVxuYlxyXG5jXHJkIiwgbmV3bGluZT0iXHIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoKSwgImFccmJcclxyY1xyZCIpCisgICAgICAgIG1lbWlvLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1lbWlvKSwgWyJhXHIiLCAiYlxyIiwgIlxyIiwgImNcciIsICJkIl0pCisKKyAgICBkZWYgdGVzdF9uZXdsaW5lX2NybGYoc2VsZik6CisgICAgICAgICMgbmV3bGluZT0iXHJcbiIKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoImFcbmJcclxuY1xyZCIsIG5ld2xpbmU9IlxyXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoKSwgImFcclxuYlxyXHJcbmNccmQiKQorICAgICAgICBtZW1pby5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtZW1pbyksIFsiYVxyXG4iLCAiYlxyXHJcbiIsICJjXHJkIl0pCisKKyAgICBkZWYgdGVzdF9pc3N1ZTUyNjUoc2VsZik6CisgICAgICAgICMgU3RyaW5nSU8gY2FuIGR1cGxpY2F0ZSBuZXdsaW5lcyBpbiB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZQorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygiYVxyXG5iXHJcbiIsIG5ld2xpbmU9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKDUpLCAiYVxuYlxuIikKKworCitjbGFzcyBQeVN0cmluZ0lPVGVzdChNZW1vcnlUZXN0TWl4aW4sIE1lbW9yeVNlZWtUZXN0TWl4aW4sCisgICAgICAgICAgICAgICAgICAgICBUZXh0SU9UZXN0TWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBidWZ0eXBlID0gdW5pY29kZQorICAgIGlvY2xhc3MgPSBweWlvLlN0cmluZ0lPCisgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBweWlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCisgICAgRU9GID0gIiIKKworCitjbGFzcyBQeVN0cmluZ0lPUGlja2xlVGVzdChUZXh0SU9UZXN0TWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGlmIHBpY2tsZSByZXN0b3JlcyBwcm9wZXJseSB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgU3RyaW5nSU8uCisgICAgIiIiCisgICAgYnVmdHlwZSA9IHVuaWNvZGUKKyAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbiA9IHB5aW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KKyAgICBFT0YgPSAiIgorCisgICAgY2xhc3MgaW9jbGFzcyhweWlvLlN0cmluZ0lPKToKKyAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMocHlpby5TdHJpbmdJTygqYXJncywgKiprd2FyZ3MpKSkKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBwYXNzCisKKworY2xhc3MgQ0J5dGVzSU9UZXN0KFB5Qnl0ZXNJT1Rlc3QpOgorICAgIGlvY2xhc3MgPSBpby5CeXRlc0lPCisgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgorCisgICAgdGVzdF9ieXRlc19hcnJheSA9IHVuaXR0ZXN0LnNraXAoCisgICAgICAgICJhcnJheS5hcnJheSgpIGRvZXMgbm90IGhhdmUgdGhlIG5ldyBidWZmZXIgQVBJIgorICAgICkoUHlCeXRlc0lPVGVzdC50ZXN0X2J5dGVzX2FycmF5KQorCisKKyAgICBkZWYgdGVzdF9nZXRzdGF0ZShzZWxmKToKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBzdGF0ZSA9IG1lbWlvLl9fZ2V0c3RhdGVfXygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN0YXRlKSwgMykKKyAgICAgICAgYnl0ZWFycmF5KHN0YXRlWzBdKSAjIENoZWNrIGlmIHN0YXRlWzBdIHN1cHBvcnRzIHRoZSBidWZmZXIgaW50ZXJmYWNlLgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3RhdGVbMV0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3RhdGVbMl0sIGRpY3QpIG9yIHN0YXRlWzJdIGlzIE5vbmUpCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uX19nZXRzdGF0ZV9fKQorCisgICAgZGVmIHRlc3Rfc2V0c3RhdGUoc2VsZik6CisgICAgICAgICMgVGhpcyBjaGVja3Mgd2hldGhlciBfX3NldHN0YXRlX18gZG9lcyBwcm9wZXIgaW5wdXQgdmFsaWRhdGlvbi4KKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBtZW1pby5fX3NldHN0YXRlX18oKGIibm8gZXJyb3IiLCAwLCBOb25lKSkKKyAgICAgICAgbWVtaW8uX19zZXRzdGF0ZV9fKChieXRlYXJyYXkoYiJubyBlcnJvciIpLCAwLCBOb25lKSkKKyAgICAgICAgbWVtaW8uX19zZXRzdGF0ZV9fKChiIm5vIGVycm9yIiwgMCwgeydzcGFtJzogM30pKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sIChiIiIsIC0xLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sICgidW5pY29kZSIsIDAsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKGIiIiwgMC4wLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sIChiIiIsIDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKGIibGVuLXRlc3QiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAwKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKGIiY2xvc2VkIiwgMCwgTm9uZSkpCisKKyAgICBjaGVja19zaXplb2YgPSBzdXBwb3J0LmNoZWNrX3NpemVvZgorCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfc2l6ZW9mKHNlbGYpOgorICAgICAgICBiYXNlc2l6ZSA9IHN1cHBvcnQuY2FsY29ianNpemUoYidQMlBQMlAnKQorICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfc2l6ZW9mCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqZWN0Ll9fc2l6ZW9mX18oaW8uQnl0ZXNJTygpKSwgYmFzZXNpemUpCisgICAgICAgIGNoZWNrKGlvLkJ5dGVzSU8oKSwgYmFzZXNpemUgKQorICAgICAgICBjaGVjayhpby5CeXRlc0lPKGInYScpLCBiYXNlc2l6ZSArIDEgKyAxICkKKyAgICAgICAgY2hlY2soaW8uQnl0ZXNJTyhiJ2EnICogMTAwMCksIGJhc2VzaXplICsgMTAwMCArIDEgKQorCitjbGFzcyBDU3RyaW5nSU9UZXN0KFB5U3RyaW5nSU9UZXN0KToKKyAgICBpb2NsYXNzID0gaW8uU3RyaW5nSU8KKyAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbiA9IGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCisKKyAgICAjIFhYWDogRm9yIHRoZSBQeXRob24gdmVyc2lvbiBvZiBpby5TdHJpbmdJTywgdGhpcyBpcyBoaWdobHkKKyAgICAjIGRlcGVuZGVudCBvbiB0aGUgZW5jb2RpbmcgdXNlZCBmb3IgdGhlIHVuZGVybHlpbmcgYnVmZmVyLgorICAgIGRlZiB0ZXN0X3dpZGVjaGFyKHNlbGYpOgorICAgICAgICBidWYgPSBzZWxmLmJ1ZnR5cGUoIlxVMDAwMjAzMGFcVTAwMDIwMzQ3IikKKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYnVmKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLndyaXRlKGJ1ZiksIGxlbihidWYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnRlbGwoKSwgbGVuKGJ1ZikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLndyaXRlKGJ1ZiksIGxlbihidWYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnRlbGwoKSwgbGVuKGJ1ZikgKiAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGJ1ZiArIGJ1ZikKKworICAgIGRlZiB0ZXN0X2dldHN0YXRlKHNlbGYpOgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIHN0YXRlID0gbWVtaW8uX19nZXRzdGF0ZV9fKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3RhdGUpLCA0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3RhdGVbMF0sIHVuaWNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdGF0ZVsxXSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3RhdGVbMl0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3RhdGVbM10sIGRpY3QpIG9yIHN0YXRlWzNdIGlzIE5vbmUpCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uX19nZXRzdGF0ZV9fKQorCisgICAgZGVmIHRlc3Rfc2V0c3RhdGUoc2VsZik6CisgICAgICAgICMgVGhpcyBjaGVja3Mgd2hldGhlciBfX3NldHN0YXRlX18gZG9lcyBwcm9wZXIgaW5wdXQgdmFsaWRhdGlvbi4KKyAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBtZW1pby5fX3NldHN0YXRlX18oKCJubyBlcnJvciIsICJcbiIsIDAsIE5vbmUpKQorICAgICAgICBtZW1pby5fX3NldHN0YXRlX18oKCJubyBlcnJvciIsICIiLCAwLCB7J3NwYW0nOiAzfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKCIiLCAiZiIsIDAsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sICgiIiwgIiIsIC0xLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sIChiIiIsICIiLCAwLCBOb25lKSkKKyAgICAgICAgIyB0cnVuayBpcyBtb3JlIHRvbGVyYW50IHRoYW4gcHkzayBvbiB0aGUgdHlwZSBvZiB0aGUgbmV3bGluZSBwYXJhbQorICAgICAgICAjc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sICgiIiwgYiIiLCAwLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sICgiIiwgIiIsIDAuMCwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoIiIsICIiLCAwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sICgibGVuLXRlc3QiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAwKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKCJjbG9zZWQiLCAiIiwgMCwgTm9uZSkpCisKKworY2xhc3MgQ1N0cmluZ0lPUGlja2xlVGVzdChQeVN0cmluZ0lPUGlja2xlVGVzdCk6CisgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgorCisgICAgY2xhc3MgaW9jbGFzcyhpby5TdHJpbmdJTyk6CisgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHJldHVybiBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGlvLlN0cmluZ0lPKCphcmdzLCAqKmt3YXJncyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbD0yKSkKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBwYXNzCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3RzID0gW1B5Qnl0ZXNJT1Rlc3QsIFB5U3RyaW5nSU9UZXN0LCBDQnl0ZXNJT1Rlc3QsIENTdHJpbmdJT1Rlc3QsCisgICAgICAgICAgICAgUHlTdHJpbmdJT1BpY2tsZVRlc3QsIENTdHJpbmdJT1BpY2tsZVRlc3RdCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjVkZGVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weQpAQCAtMCwwICsxLDM2MSBAQAorIiIiVW5pdCB0ZXN0cyBmb3IgdGhlIG1lbW9yeXZpZXcKKworWFhYIFdlIG5lZWQgbW9yZSB0ZXN0cyEgU29tZSB0ZXN0cyBhcmUgaW4gdGVzdF9ieXRlcworIiIiCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IGdjCitpbXBvcnQgd2Vha3JlZgoraW1wb3J0IGFycmF5Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IGlvCisKKworY2xhc3MgQWJzdHJhY3RNZW1vcnlUZXN0czoKKyAgICBzb3VyY2VfYnl0ZXMgPSBiImFiY2RlZiIKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfc291cmNlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2VfYnl0ZXMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfdHlwZXMoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIoTm9uZSwgW3NlbGYucm9fdHlwZSwgc2VsZi5yd190eXBlXSkKKworICAgIGRlZiBjaGVja19nZXRpdGVtX3dpdGhfdHlwZShzZWxmLCB0cCk6CisgICAgICAgIGl0ZW0gPSBzZWxmLmdldGl0ZW1fdHlwZQorICAgICAgICBiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICBvbGRyZWZjb3VudCA9IHN5cy5nZXRyZWZjb3VudChiKQorICAgICAgICBtID0gc2VsZi5fdmlldyhiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bMF0sIGl0ZW0oYiJhIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtWzBdLCBieXRlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzVdLCBpdGVtKGIiZiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bLTFdLCBpdGVtKGIiZiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bLTZdLCBpdGVtKGIiYSIpKQorICAgICAgICAjIEJvdW5kcyBjaGVja2luZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IG1bNl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogbVstN10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogbVtzeXMubWF4c2l6ZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGxhbWJkYTogbVstc3lzLm1heHNpemVdKQorICAgICAgICAjIFR5cGUgY2hlY2tpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG1bTm9uZV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBtWzAuMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBtWyJhIl0pCisgICAgICAgIG0gPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlZmNvdW50KGIpLCBvbGRyZWZjb3VudCkKKworICAgIGRlZiB0ZXN0X2dldGl0ZW0oc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZ2V0aXRlbV93aXRoX3R5cGUodHApCisKKyAgICBkZWYgdGVzdF9pdGVyKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtKSwgW21baV0gZm9yIGkgaW4gcmFuZ2UobGVuKG0pKV0pCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtLl9fcmVwcl9fKCksIHN0cikKKworICAgIGRlZiB0ZXN0X3NldGl0ZW1fcmVhZG9ubHkoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnJvX3R5cGU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYiA9IHNlbGYucm9fdHlwZShzZWxmLl9zb3VyY2UpCisgICAgICAgIG9sZHJlZmNvdW50ID0gc3lzLmdldHJlZmNvdW50KGIpCisgICAgICAgIG0gPSBzZWxmLl92aWV3KGIpCisgICAgICAgIGRlZiBzZXRpdGVtKHZhbHVlKToKKyAgICAgICAgICAgIG1bMF0gPSB2YWx1ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGl0ZW0sIGIiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0aXRlbSwgNjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0aXRlbSwgbWVtb3J5dmlldyhiImEiKSkKKyAgICAgICAgbSA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQoYiksIG9sZHJlZmNvdW50KQorCisgICAgZGVmIHRlc3Rfc2V0aXRlbV93cml0YWJsZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYucndfdHlwZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cCA9IHNlbGYucndfdHlwZQorICAgICAgICBiID0gc2VsZi5yd190eXBlKHNlbGYuX3NvdXJjZSkKKyAgICAgICAgb2xkcmVmY291bnQgPSBzeXMuZ2V0cmVmY291bnQoYikKKyAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgbVswXSA9IHRwKGIiMCIpCisgICAgICAgIHNlbGYuX2NoZWNrX2NvbnRlbnRzKHRwLCBiLCBiIjBiY2RlZiIpCisgICAgICAgIG1bMTozXSA9IHRwKGIiMTIiKQorICAgICAgICBzZWxmLl9jaGVja19jb250ZW50cyh0cCwgYiwgYiIwMTJkZWYiKQorICAgICAgICBtWzE6MV0gPSB0cChiIiIpCisgICAgICAgIHNlbGYuX2NoZWNrX2NvbnRlbnRzKHRwLCBiLCBiIjAxMmRlZiIpCisgICAgICAgIG1bOl0gPSB0cChiImFiY2RlZiIpCisgICAgICAgIHNlbGYuX2NoZWNrX2NvbnRlbnRzKHRwLCBiLCBiImFiY2RlZiIpCisKKyAgICAgICAgIyBPdmVybGFwcGluZyBjb3BpZXMgb2YgYSB2aWV3IGludG8gaXRzZWxmCisgICAgICAgIG1bMDozXSA9IG1bMjo1XQorICAgICAgICBzZWxmLl9jaGVja19jb250ZW50cyh0cCwgYiwgYiJjZGVkZWYiKQorICAgICAgICBtWzpdID0gdHAoYiJhYmNkZWYiKQorICAgICAgICBtWzI6NV0gPSBtWzA6M10KKyAgICAgICAgc2VsZi5fY2hlY2tfY29udGVudHModHAsIGIsIGIiYWJhYmNmIikKKworICAgICAgICBkZWYgc2V0aXRlbShrZXksIHZhbHVlKToKKyAgICAgICAgICAgIG1ba2V5XSA9IHRwKHZhbHVlKQorICAgICAgICAjIEJvdW5kcyBjaGVja2luZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBzZXRpdGVtLCA2LCBiImEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBzZXRpdGVtLCAtNywgYiJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgc2V0aXRlbSwgc3lzLm1heHNpemUsIGIiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHNldGl0ZW0sIC1zeXMubWF4c2l6ZSwgYiJhIikKKyAgICAgICAgIyBXcm9uZyBpbmRleC9zbGljZSB0eXBlcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGl0ZW0sIDAuMCwgYiJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRpdGVtLCAoMCwpLCBiImEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGl0ZW0sICJhIiwgYiJhIikKKyAgICAgICAgIyBUcnlpbmcgdG8gcmVzaXplIHRoZSBtZW1vcnkgb2JqZWN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGl0ZW0sIDAsIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0aXRlbSwgMCwgYiJhYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGl0ZW0sIHNsaWNlKDEsMSksIGIiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGl0ZW0sIHNsaWNlKDAsMiksIGIiYSIpCisKKyAgICAgICAgbSA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQoYiksIG9sZHJlZmNvdW50KQorCisgICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKKyAgICAgICAgZm9yIHRwIGluIHNlbGYuX3R5cGVzOgorICAgICAgICAgICAgYiA9IHRwKHNlbGYuX3NvdXJjZSkKKyAgICAgICAgICAgIG0gPSBzZWxmLl92aWV3KGIpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgZGVsIG1bMV0KKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBkZWwgbVsxOjRdCisKKyAgICBkZWYgdGVzdF90b2J5dGVzKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBtID0gc2VsZi5fdmlldyh0cChzZWxmLl9zb3VyY2UpKQorICAgICAgICAgICAgYiA9IG0udG9ieXRlcygpCisgICAgICAgICAgICAjIFRoaXMgY2FsbHMgc2VsZi5nZXRpdGVtX3R5cGUoKSBvbiBlYWNoIHNlcGFyYXRlIGJ5dGUgb2YgYiJhYmNkZWYiCisgICAgICAgICAgICBleHBlY3RlZCA9IGIiIi5qb2luKAorICAgICAgICAgICAgICAgIHNlbGYuZ2V0aXRlbV90eXBlKGMpIGZvciBjIGluIGIiYWJjZGVmIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgZXhwZWN0ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYiwgYnl0ZXMpCisKKyAgICBkZWYgdGVzdF90b2xpc3Qoc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIG0gPSBzZWxmLl92aWV3KHRwKHNlbGYuX3NvdXJjZSkpCisgICAgICAgICAgICBsID0gbS50b2xpc3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLCBtYXAob3JkLCBiImFiY2RlZiIpKQorCisgICAgZGVmIHRlc3RfY29tcGFyZShzZWxmKToKKyAgICAgICAgIyBtZW1vcnl2aWV3cyBjYW4gY29tcGFyZSBmb3IgZXF1YWxpdHkgd2l0aCBvdGhlciBvYmplY3RzCisgICAgICAgICMgaGF2aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlLgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBtID0gc2VsZi5fdmlldyh0cChzZWxmLl9zb3VyY2UpKQorICAgICAgICAgICAgZm9yIHRwX2NvbXAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0gPT0gdHBfY29tcChiImFiY2RlZiIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobSAhPSB0cF9jb21wKGIiYWJjZGVmIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtID09IHRwX2NvbXAoYiJhYmNkZSIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtICE9IHRwX2NvbXAoYiJhYmNkZSIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobSA9PSB0cF9jb21wKGIiYWJjZGUxIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0gIT0gdHBfY29tcChiImFiY2RlMSIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0gPT0gbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtID09IG1bOl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobVswOjZdID09IG1bOl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1bMDo1XSA9PSBtKQorCisgICAgICAgICAgICAjIENvbXBhcmlzb24gd2l0aCBvYmplY3RzIHdoaWNoIGRvbid0IHN1cHBvcnQgdGhlIGJ1ZmZlciBBUEkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobSA9PSB1ImFiY2RlZiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSAhPSB1ImFiY2RlZiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHUiYWJjZGVmIiA9PSBtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUiYWJjZGVmIiAhPSBtKQorCisgICAgICAgICAgICAjIFVub3JkZXJlZCBjb21wYXJpc29ucyBhcmUgdW5pbXBsZW1lbnRlZCwgYW5kIHRoZXJlZm9yZSBnaXZlCisgICAgICAgICAgICAjIGFyYml0cmFyeSByZXN1bHRzICh0aGV5IHJhaXNlIGEgVHlwZUVycm9yIGluIHB5M2spCisKKyAgICBkZWYgY2hlY2tfYXR0cmlidXRlc193aXRoX3R5cGUoc2VsZiwgdHApOgorICAgICAgICBtID0gc2VsZi5fdmlldyh0cChzZWxmLl9zb3VyY2UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZm9ybWF0LCBzZWxmLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG0uZm9ybWF0LCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5pdGVtc2l6ZSwgc2VsZi5pdGVtc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLm5kaW0sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5zaGFwZSwgKDYsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obSksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5zdHJpZGVzLCAoc2VsZi5pdGVtc2l6ZSwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uc3Vib2Zmc2V0cywgTm9uZSkKKyAgICAgICAgcmV0dXJuIG0KKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfcmVhZG9ubHkoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnJvX3R5cGU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbSA9IHNlbGYuY2hlY2tfYXR0cmlidXRlc193aXRoX3R5cGUoc2VsZi5yb190eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucmVhZG9ubHksIFRydWUpCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzX3dyaXRhYmxlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5yd190eXBlOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG0gPSBzZWxmLmNoZWNrX2F0dHJpYnV0ZXNfd2l0aF90eXBlKHNlbGYucndfdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJlYWRvbmx5LCBGYWxzZSkKKworICAgICMgRGlzYWJsZWQ6IHVuaWNvZGUgdXNlcyB0aGUgb2xkIGJ1ZmZlciBBUEkgaW4gMi54CisKKyAgICAjZGVmIHRlc3RfZ2V0YnVmZmVyKHNlbGYpOgorICAgICAgICAjIyBUZXN0IFB5T2JqZWN0X0dldEJ1ZmZlcigpIG9uIGEgbWVtb3J5dmlldyBvYmplY3QuCisgICAgICAgICNmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICAjYiA9IHRwKHNlbGYuX3NvdXJjZSkKKyAgICAgICAgICAgICNvbGRyZWZjb3VudCA9IHN5cy5nZXRyZWZjb3VudChiKQorICAgICAgICAgICAgI20gPSBzZWxmLl92aWV3KGIpCisgICAgICAgICAgICAjb2xkdmlld3JlZmNvdW50ID0gc3lzLmdldHJlZmNvdW50KG0pCisgICAgICAgICAgICAjcyA9IHVuaWNvZGUobSwgInV0Zi04IikKKyAgICAgICAgICAgICNzZWxmLl9jaGVja19jb250ZW50cyh0cCwgYiwgcy5lbmNvZGUoInV0Zi04IikpCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQobSksIG9sZHZpZXdyZWZjb3VudCkKKyAgICAgICAgICAgICNtID0gTm9uZQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlZmNvdW50KGIpLCBvbGRyZWZjb3VudCkKKworICAgIGRlZiB0ZXN0X2djKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0cCwgdHlwZSk6CisgICAgICAgICAgICAgICAgIyBJZiB0cCBpcyBhIGZhY3RvcnkgcmF0aGVyIHRoYW4gYSBwbGFpbiB0eXBlLCBza2lwCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgY2xhc3MgTXlTb3VyY2UodHApOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGNsYXNzIE15T2JqZWN0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgIyBDcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUgdGhyb3VnaCBhIG1lbW9yeXZpZXcgb2JqZWN0CisgICAgICAgICAgICBiID0gTXlTb3VyY2UodHAoYidhYmMnKSkKKyAgICAgICAgICAgIG0gPSBzZWxmLl92aWV3KGIpCisgICAgICAgICAgICBvID0gTXlPYmplY3QoKQorICAgICAgICAgICAgYi5tID0gbQorICAgICAgICAgICAgYi5vID0gbworICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihvKQorICAgICAgICAgICAgYiA9IG0gPSBvID0gTm9uZQorICAgICAgICAgICAgIyBUaGUgY3ljbGUgbXVzdCBiZSBicm9rZW4KKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IoKSkKKworICAgIGRlZiB0ZXN0X3dyaXRhYmxlX3JlYWRvbmx5KHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMDQ1MTogbWVtb3J5dmlldyBpbmNvcnJlY3RseSBleHBvc2VzIGEgcmVhZG9ubHkKKyAgICAgICAgIyBidWZmZXIgYXMgd3JpdGFibGUgY2F1c2luZyBhIHNlZ2ZhdWx0IGlmIHVzaW5nIG1tYXAKKyAgICAgICAgdHAgPSBzZWxmLnJvX3R5cGUKKyAgICAgICAgaWYgdHAgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICBtID0gc2VsZi5fdmlldyhiKQorICAgICAgICBpID0gaW8uQnl0ZXNJTyhiJ1paWlonKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGkucmVhZGludG8sIG0pCisKKyMgVmFyaWF0aW9ucyBvbiBzb3VyY2Ugb2JqZWN0cyBmb3IgdGhlIGJ1ZmZlcjogYnl0ZXMtbGlrZSBvYmplY3RzLCB0aGVuIGFycmF5cworIyB3aXRoIGl0ZW1zaXplID4gMS4KKyMgTk9URTogc3VwcG9ydCBmb3IgbXVsdGktZGltZW5zaW9uYWwgb2JqZWN0cyBpcyB1bmltcGxlbWVudGVkLgorCitjbGFzcyBCYXNlQnl0ZXNNZW1vcnlUZXN0cyhBYnN0cmFjdE1lbW9yeVRlc3RzKToKKyAgICByb190eXBlID0gYnl0ZXMKKyAgICByd190eXBlID0gYnl0ZWFycmF5CisgICAgZ2V0aXRlbV90eXBlID0gYnl0ZXMKKyAgICBpdGVtc2l6ZSA9IDEKKyAgICBmb3JtYXQgPSAnQicKKworIyBEaXNhYmxlZDogYXJyYXkuYXJyYXkoKSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBuZXcgYnVmZmVyIEFQSSBpbiAyLngKKworI2NsYXNzIEJhc2VBcnJheU1lbW9yeVRlc3RzKEFic3RyYWN0TWVtb3J5VGVzdHMpOgorICAgICNyb190eXBlID0gTm9uZQorICAgICNyd190eXBlID0gbGFtYmRhIHNlbGYsIGI6IGFycmF5LmFycmF5KCdpJywgbWFwKG9yZCwgYikpCisgICAgI2dldGl0ZW1fdHlwZSA9IGxhbWJkYSBzZWxmLCBiOiBhcnJheS5hcnJheSgnaScsIG1hcChvcmQsIGIpKS50b3N0cmluZygpCisgICAgI2l0ZW1zaXplID0gYXJyYXkuYXJyYXkoJ2knKS5pdGVtc2l6ZQorICAgICNmb3JtYXQgPSAnaScKKworICAgICNkZWYgdGVzdF9nZXRidWZmZXIoc2VsZik6CisgICAgICAgICMjIFhYWCBUZXN0IHNob3VsZCBiZSBhZGFwdGVkIGZvciBub24tYnl0ZSBidWZmZXJzCisgICAgICAgICNwYXNzCisKKyAgICAjZGVmIHRlc3RfdG9saXN0KHNlbGYpOgorICAgICAgICAjIyBYWFggTm90SW1wbGVtZW50ZWRFcnJvcjogdG9saXN0KCkgb25seSBzdXBwb3J0cyBieXRlIHZpZXdzCisgICAgICAgICNwYXNzCisKKworIyBWYXJpYXRpb25zIG9uIGluZGlyZWN0aW9uIGxldmVsczogbWVtb3J5dmlldywgc2xpY2Ugb2YgbWVtb3J5dmlldywKKyMgc2xpY2Ugb2Ygc2xpY2Ugb2YgbWVtb3J5dmlldy4KKyMgVGhpcyBpcyBpbXBvcnRhbnQgdG8gdGVzdCBhbGxvY2F0aW9uIHN1YnRsZXRpZXMuCisKK2NsYXNzIEJhc2VNZW1vcnl2aWV3VGVzdHM6CisgICAgZGVmIF92aWV3KHNlbGYsIG9iaik6CisgICAgICAgIHJldHVybiBtZW1vcnl2aWV3KG9iaikKKworICAgIGRlZiBfY2hlY2tfY29udGVudHMoc2VsZiwgdHAsIG9iaiwgY29udGVudHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iaiwgdHAoY29udGVudHMpKQorCitjbGFzcyBCYXNlTWVtb3J5U2xpY2VUZXN0czoKKyAgICBzb3VyY2VfYnl0ZXMgPSBiIlhhYmNkZWZZIgorCisgICAgZGVmIF92aWV3KHNlbGYsIG9iaik6CisgICAgICAgIG0gPSBtZW1vcnl2aWV3KG9iaikKKyAgICAgICAgcmV0dXJuIG1bMTo3XQorCisgICAgZGVmIF9jaGVja19jb250ZW50cyhzZWxmLCB0cCwgb2JqLCBjb250ZW50cyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqWzE6N10sIHRwKGNvbnRlbnRzKSkKKworICAgIGRlZiB0ZXN0X3JlZnMoc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIG0gPSBtZW1vcnl2aWV3KHRwKHNlbGYuX3NvdXJjZSkpCisgICAgICAgICAgICBvbGRyZWZjb3VudCA9IHN5cy5nZXRyZWZjb3VudChtKQorICAgICAgICAgICAgbVsxOjJdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWZjb3VudChtKSwgb2xkcmVmY291bnQpCisKK2NsYXNzIEJhc2VNZW1vcnlTbGljZVNsaWNlVGVzdHM6CisgICAgc291cmNlX2J5dGVzID0gYiJYYWJjZGVmWSIKKworICAgIGRlZiBfdmlldyhzZWxmLCBvYmopOgorICAgICAgICBtID0gbWVtb3J5dmlldyhvYmopCisgICAgICAgIHJldHVybiBtWzo3XVsxOl0KKworICAgIGRlZiBfY2hlY2tfY29udGVudHMoc2VsZiwgdHAsIG9iaiwgY29udGVudHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9ialsxOjddLCB0cChjb250ZW50cykpCisKKworIyBDb25jcmV0ZSB0ZXN0IGNsYXNzZXMKKworY2xhc3MgQnl0ZXNNZW1vcnl2aWV3VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwKKyAgICBCYXNlTWVtb3J5dmlld1Rlc3RzLCBCYXNlQnl0ZXNNZW1vcnlUZXN0cyk6CisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgZm9yIHRwIGluIHNlbGYuX3R5cGVzOgorICAgICAgICAgICAgb2IgPSB0cChzZWxmLl9zb3VyY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWVtb3J5dmlldyhvYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWVtb3J5dmlldyhvYmplY3Q9b2IpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1vcnl2aWV3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1vcnl2aWV3LCBvYiwgb2IpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbW9yeXZpZXcsIGFyZ3VtZW50PW9iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1vcnl2aWV3LCBvYiwgYXJndW1lbnQ9VHJ1ZSkKKworI2NsYXNzIEFycmF5TWVtb3J5dmlld1Rlc3QodW5pdHRlc3QuVGVzdENhc2UsCisgICAgI0Jhc2VNZW1vcnl2aWV3VGVzdHMsIEJhc2VBcnJheU1lbW9yeVRlc3RzKToKKworICAgICNkZWYgdGVzdF9hcnJheV9hc3NpZ24oc2VsZik6CisgICAgICAgICMjIElzc3VlICM0NTY5OiBzZWdmYXVsdCB3aGVuIG11dGF0aW5nIGEgbWVtb3J5dmlldyB3aXRoIGl0ZW1zaXplICE9IDEKKyAgICAgICAgI2EgPSBhcnJheS5hcnJheSgnaScsIHJhbmdlKDEwKSkKKyAgICAgICAgI20gPSBtZW1vcnl2aWV3KGEpCisgICAgICAgICNuZXdfYSA9IGFycmF5LmFycmF5KCdpJywgcmFuZ2UoOSwgLTEsIC0xKSkKKyAgICAgICAgI21bOl0gPSBuZXdfYQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChhLCBuZXdfYSkKKworCitjbGFzcyBCeXRlc01lbW9yeVNsaWNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwKKyAgICBCYXNlTWVtb3J5U2xpY2VUZXN0cywgQmFzZUJ5dGVzTWVtb3J5VGVzdHMpOgorICAgIHBhc3MKKworI2NsYXNzIEFycmF5TWVtb3J5U2xpY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLAorICAgICNCYXNlTWVtb3J5U2xpY2VUZXN0cywgQmFzZUFycmF5TWVtb3J5VGVzdHMpOgorICAgICNwYXNzCisKK2NsYXNzIEJ5dGVzTWVtb3J5U2xpY2VTbGljZVRlc3QodW5pdHRlc3QuVGVzdENhc2UsCisgICAgQmFzZU1lbW9yeVNsaWNlU2xpY2VUZXN0cywgQmFzZUJ5dGVzTWVtb3J5VGVzdHMpOgorICAgIHBhc3MKKworI2NsYXNzIEFycmF5TWVtb3J5U2xpY2VTbGljZVRlc3QodW5pdHRlc3QuVGVzdENhc2UsCisgICAgI0Jhc2VNZW1vcnlTbGljZVNsaWNlVGVzdHMsIEJhc2VBcnJheU1lbW9yeVRlc3RzKToKKyAgICAjcGFzcworCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9taGxpYi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21obGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NmRmNDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9taGxpYi5weQpAQCAtMCwwICsxLDM0OCBAQAorIiIiCisgICBUZXN0cyBmb3IgdGhlIG1obGliIG1vZHVsZQorICAgTmljayBNYXRoZXdzb24KKyIiIgorCisjIyMgQlVHOiBUaGlzIHN1aXRlIGRvZXNuJ3QgY3VycmVudGx5IHRlc3QgdGhlIG1pbWUgZnVuY3Rpb25hbGl0eSBvZgorIyMjICAgICAgbWhsaWIuICBJdCBzaG91bGQuCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4sIGltcG9ydF9tb2R1bGUKK2ltcG9ydCBvcywgU3RyaW5nSU8KK2ltcG9ydCBzeXMKK21obGliID0gaW1wb3J0X21vZHVsZSgnbWhsaWInLCBkZXByZWNhdGVkPVRydWUpCisKK2lmIChzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIikgb3Igc3lzLnBsYXRmb3JtPT0icmlzY29zIiBvcgorICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImF0aGVvcyIpKToKKyAgICAjIG1obGliLnVwZGF0ZWxpbmUoKSByZW5hbWVzIGEgZmlsZSB0byB0aGUgbmFtZSBvZiBhIGZpbGUgdGhhdCBhbHJlYWR5CisgICAgIyBleGlzdHMuICBUaGF0IGNhdXNlcyBhIHJlYXNvbmFibGUgT1MgPHdpbms+IHRvIGNvbXBsYWluIGluIHRlc3Rfc2VxdWVuY2UKKyAgICAjIGhlcmUsIGxpa2UgdGhlICJPU0Vycm9yOiBbRXJybm8gMTddIEZpbGUgZXhpc3RzIiByYWlzZWQgb24gV2luZG93cy4KKyAgICAjIG1obGliJ3MgbGlzdHN1YmZvbGRlcnMoKSBhbmQgbGlzdGFsbGZvbGRlcnMoKSBkbyBzb21ldGhpbmcgd2l0aAorICAgICMgbGluayBjb3VudHMsIGFuZCB0aGF0IGNhdXNlcyB0ZXN0X2xpc3Rmb2xkZXJzKCkgaGVyZSB0byBnZXQgYmFjaworICAgICMgYW4gZW1wdHkgbGlzdCBmcm9tIGl0cyBjYWxsIG9mIGxpc3RhbGxmb2xkZXJzKCkuCisgICAgIyBUaGUgb3RoZXIgdGVzdHMgaGVyZSBwYXNzIG9uIFdpbmRvd3MuCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInNraXBwZWQgb24gJXMgLS0gIiAlIHN5cy5wbGF0Zm9ybSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvbyBtYW55IFVuaXggYXNzdW1wdGlvbnMiKQorCitfbWhyb290ID0gVEVTVEZOKyJfTUgiCitfbWhwYXRoID0gb3MucGF0aC5qb2luKF9taHJvb3QsICJNSCIpCitfbWhwcm9maWxlID0gb3MucGF0aC5qb2luKF9taHJvb3QsICIubWhfcHJvZmlsZSIpCisKK2RlZiBub3JtRihmKToKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKCpmLnNwbGl0KCcvJykpCisKK2RlZiB3cml0ZUZpbGUoZm5hbWUsIGNvbnRlbnRzKToKKyAgICBkaXIgPSBvcy5wYXRoLnNwbGl0KGZuYW1lKVswXQorICAgIGlmIGRpciBhbmQgbm90IG9zLnBhdGguZXhpc3RzKGRpcik6CisgICAgICAgIG1rZGlycyhkaXIpCisgICAgZiA9IG9wZW4oZm5hbWUsICd3JykKKyAgICBmLndyaXRlKGNvbnRlbnRzKQorICAgIGYuY2xvc2UoKQorCitkZWYgcmVhZEZpbGUoZm5hbWUpOgorICAgIGYgPSBvcGVuKGZuYW1lKQorICAgIHIgPSBmLnJlYWQoKQorICAgIGYuY2xvc2UoKQorICAgIHJldHVybiByCisKK2RlZiB3cml0ZVByb2ZpbGUoZGljdCk6CisgICAgY29udGVudHMgPSBbICIlczogJXNcbiIgJSAoaywgdikgZm9yIGssIHYgaW4gZGljdC5pdGVyaXRlbXMoKSBdCisgICAgd3JpdGVGaWxlKF9taHByb2ZpbGUsICIiLmpvaW4oY29udGVudHMpKQorCitkZWYgd3JpdGVDb250ZXh0KGZvbGRlcik6CisgICAgZm9sZGVyID0gbm9ybUYoZm9sZGVyKQorICAgIHdyaXRlRmlsZShvcy5wYXRoLmpvaW4oX21ocGF0aCwgImNvbnRleHQiKSwKKyAgICAgICAgICAgICAgIkN1cnJlbnQtRm9sZGVyOiAlc1xuIiAlIGZvbGRlcikKKworZGVmIHdyaXRlQ3VyTWVzc2FnZShmb2xkZXIsIGN1cik6CisgICAgZm9sZGVyID0gbm9ybUYoZm9sZGVyKQorICAgIHdyaXRlRmlsZShvcy5wYXRoLmpvaW4oX21ocGF0aCwgZm9sZGVyLCAiLm1oX3NlcXVlbmNlcyIpLAorICAgICAgICAgICAgICAiY3VyOiAlc1xuIiVjdXIpCisKK2RlZiB3cml0ZU1lc3NhZ2UoZm9sZGVyLCBuLCBoZWFkZXJzLCBib2R5KToKKyAgICBmb2xkZXIgPSBub3JtRihmb2xkZXIpCisgICAgaGVhZGVycyA9ICIiLmpvaW4oWyAiJXM6ICVzXG4iICUgKGssIHYpIGZvciBrLCB2IGluIGhlYWRlcnMuaXRlcml0ZW1zKCkgXSkKKyAgICBjb250ZW50cyA9ICIlc1xuJXNcbiIgJSAoaGVhZGVycyxib2R5KQorICAgIG1rZGlycyhvcy5wYXRoLmpvaW4oX21ocGF0aCwgZm9sZGVyKSkKKyAgICB3cml0ZUZpbGUob3MucGF0aC5qb2luKF9taHBhdGgsIGZvbGRlciwgc3RyKG4pKSwgY29udGVudHMpCisKK2RlZiBnZXRNSCgpOgorICAgIHJldHVybiBtaGxpYi5NSChvcy5wYXRoLmFic3BhdGgoX21ocGF0aCksIF9taHByb2ZpbGUpCisKK2RlZiBzb3J0TGluZXMocyk6CisgICAgbGluZXMgPSBzLnNwbGl0KCJcbiIpCisgICAgbGluZXMgPSBbIGxpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBsaW5lcyBpZiBsZW4obGluZSkgPj0gMiBdCisgICAgbGluZXMuc29ydCgpCisgICAgcmV0dXJuIGxpbmVzCisKKyMgVGhlc2UgbmV4dCAyIGZ1bmN0aW9ucyBhcmUgY29waWVkIGZyb20gdGVzdF9nbG9iLnB5LgorZGVmIG1rZGlycyhmbmFtZSk6CisgICAgaWYgb3MucGF0aC5leGlzdHMoZm5hbWUpIG9yIGZuYW1lID09ICcnOgorICAgICAgICByZXR1cm4KKyAgICBiYXNlLCBmaWxlID0gb3MucGF0aC5zcGxpdChmbmFtZSkKKyAgICBta2RpcnMoYmFzZSkKKyAgICBvcy5ta2RpcihmbmFtZSkKKworZGVmIGRlbHRyZWUoZm5hbWUpOgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmbmFtZSk6CisgICAgICAgIHJldHVybgorICAgIGZvciBmIGluIG9zLmxpc3RkaXIoZm5hbWUpOgorICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihmbmFtZSwgZikKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmdWxsbmFtZSk6CisgICAgICAgICAgICBkZWx0cmVlKGZ1bGxuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnVubGluayhmdWxsbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgdHJ5OgorICAgICAgICBvcy5ybWRpcihmbmFtZSkKKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKworY2xhc3MgTWhsaWJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBkZWx0cmVlKF9taHJvb3QpCisgICAgICAgIG1rZGlycyhfbWhwYXRoKQorICAgICAgICB3cml0ZVByb2ZpbGUoeydQYXRoJyA6IG9zLnBhdGguYWJzcGF0aChfbWhwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAnRWRpdG9yJzogJ2VtYWNzJywKKyAgICAgICAgICAgICAgICAgICAgICAnaWdub3JlZC1hdHRyaWJ1dGUnOiAnY2FtcGluZyBob2xpZGF5J30pCisgICAgICAgICMgTm90ZTogVGhlc2UgaGVhZGVycyBhcmVuJ3QgcmVhbGx5IGNvbmZvcm1hbnQgdG8gUkZDODIyLCBidXQKKyAgICAgICAgIyAgbWhsaWIgc2hvdWxkbid0IGNhcmUgYWJvdXQgdGhhdC4KKworICAgICAgICAjIEFuIGluYm94IHdpdGggYSBjb3VwbGUgb2YgbWVzc2FnZXMuCisgICAgICAgIHdyaXRlTWVzc2FnZSgnaW5ib3gnLCAxLAorICAgICAgICAgICAgICAgICAgICAgeydGcm9tJzogJ01ycy4gUHJlbWlzZScsCisgICAgICAgICAgICAgICAgICAgICAgJ1RvJzogJ01ycy4gQ29uY2x1c2lvbicsCisgICAgICAgICAgICAgICAgICAgICAgJ0RhdGUnOiAnMTggSnVseSAyMDAxJ30sICJIdWxsbywgTXJzLiBDb25jbHVzaW9uIVxuIikKKyAgICAgICAgd3JpdGVNZXNzYWdlKCdpbmJveCcsIDIsCisgICAgICAgICAgICAgICAgICAgICB7J0Zyb20nOiAnTXJzLiBDb25jbHVzaW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAnVG8nOiAnTXJzLiBQcmVtaXNlJywKKyAgICAgICAgICAgICAgICAgICAgICAnRGF0ZSc6ICcyOSBKdWx5IDIwMDEnfSwgIkh1bGxvLCBNcnMuIFByZW1pc2UhXG4iKQorCisgICAgICAgICMgQSBmb2xkZXIgd2l0aCBtYW55IG1lc3NhZ2VzCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUsIDEwMSkrcmFuZ2UoMTAxLCAyMDEsIDIpOgorICAgICAgICAgICAgd3JpdGVNZXNzYWdlKCd3aWRlJywgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J0Zyb20nOiAnbm93aGVyZScsICdTdWJqZWN0JzogJ21lc3NhZ2UgIyVzJyAlIGl9LAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGlzIG1lc3NhZ2UgbnVtYmVyICVzXG4iICUgaSkKKworICAgICAgICAjIEEgZGVlcGx5IG5lc3RlZCBmb2xkZXIKKyAgICAgICAgZGVmIGRlZXAoZm9sZGVyLCBuKToKKyAgICAgICAgICAgIHdyaXRlTWVzc2FnZShmb2xkZXIsIG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgeydTdWJqZWN0JzogJ01lc3NhZ2UgJXMvJXMnICUgKGZvbGRlciwgbikgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBpcyBtZXNzYWdlIG51bWJlciAlcyBpbiAlc1xuIiAlIChuLCBmb2xkZXIpICkKKyAgICAgICAgZGVlcCgnZGVlcC9mMScsIDEpCisgICAgICAgIGRlZXAoJ2RlZXAvZjEnLCAyKQorICAgICAgICBkZWVwKCdkZWVwL2YxJywgMykKKyAgICAgICAgZGVlcCgnZGVlcC9mMicsIDQpCisgICAgICAgIGRlZXAoJ2RlZXAvZjInLCA2KQorICAgICAgICBkZWVwKCdkZWVwJywgMykKKyAgICAgICAgZGVlcCgnZGVlcC9mMi9mMycsIDEpCisgICAgICAgIGRlZXAoJ2RlZXAvZjIvZjMnLCAyKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBkZWx0cmVlKF9taHJvb3QpCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgd3JpdGVDb250ZXh0KCdpbmJveCcpCisgICAgICAgIHdyaXRlQ3VyTWVzc2FnZSgnaW5ib3gnLCAyKQorICAgICAgICBtaCA9IGdldE1IKCkKKworICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEobWguZ2V0cHJvZmlsZSgnRWRpdG9yJyksICdlbWFjcycpCisgICAgICAgIGVxKG1oLmdldHByb2ZpbGUoJ25vdC1zZXQnKSwgTm9uZSkKKyAgICAgICAgZXEobWguZ2V0cGF0aCgpLCBvcy5wYXRoLmFic3BhdGgoX21ocGF0aCkpCisgICAgICAgIGVxKG1oLmdldGNvbnRleHQoKSwgJ2luYm94JykKKworICAgICAgICBtaC5zZXRjb250ZXh0KCd3aWRlJykKKyAgICAgICAgZXEobWguZ2V0Y29udGV4dCgpLCAnd2lkZScpCisgICAgICAgIGVxKHJlYWRGaWxlKG9zLnBhdGguam9pbihfbWhwYXRoLCAnY29udGV4dCcpKSwKKyAgICAgICAgICAgIkN1cnJlbnQtRm9sZGVyOiB3aWRlXG4iKQorCisgICAgICAgIG1oLnNldGNvbnRleHQoJ2luYm94JykKKworICAgICAgICBpbmJveCA9IG1oLm9wZW5mb2xkZXIoJ2luYm94JykKKyAgICAgICAgZXEoaW5ib3guZ2V0ZnVsbG5hbWUoKSwKKyAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguYWJzcGF0aChfbWhwYXRoKSwgJ2luYm94JykpCisgICAgICAgIGVxKGluYm94LmdldHNlcXVlbmNlc2ZpbGVuYW1lKCksCisgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmFic3BhdGgoX21ocGF0aCksICdpbmJveCcsICcubWhfc2VxdWVuY2VzJykpCisgICAgICAgIGVxKGluYm94LmdldG1lc3NhZ2VmaWxlbmFtZSgxKSwKKyAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguYWJzcGF0aChfbWhwYXRoKSwgJ2luYm94JywgJzEnKSkKKworICAgIGRlZiB0ZXN0X2xpc3Rmb2xkZXJzKHNlbGYpOgorICAgICAgICBtaCA9IGdldE1IKCkKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgZm9sZGVycyA9IG1oLmxpc3Rmb2xkZXJzKCkKKyAgICAgICAgZm9sZGVycy5zb3J0KCkKKyAgICAgICAgZXEoZm9sZGVycywgWydkZWVwJywgJ2luYm94JywgJ3dpZGUnXSkKKworICAgICAgICBmb2xkZXJzID0gbWgubGlzdGFsbGZvbGRlcnMoKQorICAgICAgICBmb2xkZXJzLnNvcnQoKQorICAgICAgICB0Zm9sZGVycyA9IG1hcChub3JtRiwgWydkZWVwJywgJ2RlZXAvZjEnLCAnZGVlcC9mMicsICdkZWVwL2YyL2YzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luYm94JywgJ3dpZGUnXSkKKyAgICAgICAgdGZvbGRlcnMuc29ydCgpCisgICAgICAgIGVxKGZvbGRlcnMsIHRmb2xkZXJzKQorCisgICAgICAgIGZvbGRlcnMgPSBtaC5saXN0c3ViZm9sZGVycygnZGVlcCcpCisgICAgICAgIGZvbGRlcnMuc29ydCgpCisgICAgICAgIGVxKGZvbGRlcnMsIG1hcChub3JtRiwgWydkZWVwL2YxJywgJ2RlZXAvZjInXSkpCisKKyAgICAgICAgZm9sZGVycyA9IG1oLmxpc3RhbGxzdWJmb2xkZXJzKCdkZWVwJykKKyAgICAgICAgZm9sZGVycy5zb3J0KCkKKyAgICAgICAgZXEoZm9sZGVycywgbWFwKG5vcm1GLCBbJ2RlZXAvZjEnLCAnZGVlcC9mMicsICdkZWVwL2YyL2YzJ10pKQorICAgICAgICBlcShtaC5saXN0c3ViZm9sZGVycyhub3JtRignZGVlcC9mMicpKSwgW25vcm1GKCdkZWVwL2YyL2YzJyldKQorCisgICAgICAgIGVxKG1oLmxpc3RzdWJmb2xkZXJzKCdpbmJveCcpLCBbXSkKKyAgICAgICAgZXEobWgubGlzdGFsbHN1YmZvbGRlcnMoJ2luYm94JyksIFtdKQorCisgICAgZGVmIHRlc3Rfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgIG1oID0gZ2V0TUgoKQorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgd3JpdGVDdXJNZXNzYWdlKCd3aWRlJywgNTUpCisKKyAgICAgICAgZiA9IG1oLm9wZW5mb2xkZXIoJ3dpZGUnKQorICAgICAgICBhbGwgPSBmLmxpc3RtZXNzYWdlcygpCisgICAgICAgIGVxKGFsbCwgcmFuZ2UoNSwgMTAxKStyYW5nZSgxMDEsIDIwMSwgMikpCisgICAgICAgIGVxKGYuZ2V0Y3VycmVudCgpLCA1NSkKKyAgICAgICAgZi5zZXRjdXJyZW50KDk5KQorICAgICAgICBlcShyZWFkRmlsZShvcy5wYXRoLmpvaW4oX21ocGF0aCwgJ3dpZGUnLCAnLm1oX3NlcXVlbmNlcycpKSwKKyAgICAgICAgICAgJ2N1cjogOTlcbicpCisKKyAgICAgICAgZGVmIHNlcWVxKHNlcSwgdmFsKToKKyAgICAgICAgICAgIGVxKGYucGFyc2VzZXF1ZW5jZShzZXEpLCB2YWwpCisKKyAgICAgICAgc2VxZXEoJzUtNTUnLCByYW5nZSg1LCA1NikpCisgICAgICAgIHNlcWVxKCc5MC0xMDgnLCByYW5nZSg5MCwgMTAxKStyYW5nZSgxMDEsIDEwOSwgMikpCisgICAgICAgIHNlcWVxKCc5MC0xMDgnLCByYW5nZSg5MCwgMTAxKStyYW5nZSgxMDEsIDEwOSwgMikpCisKKyAgICAgICAgc2VxZXEoJzEwOjEwJywgcmFuZ2UoMTAsIDIwKSkKKyAgICAgICAgc2VxZXEoJzEwOisxMCcsIHJhbmdlKDEwLCAyMCkpCisgICAgICAgIHNlcWVxKCcxMDE6MTAnLCByYW5nZSgxMDEsIDEyMSwgMikpCisKKyAgICAgICAgc2VxZXEoJ2N1cicsIFs5OV0pCisgICAgICAgIHNlcWVxKCcuJywgWzk5XSkKKyAgICAgICAgc2VxZXEoJ3ByZXYnLCBbOThdKQorICAgICAgICBzZXFlcSgnbmV4dCcsIFsxMDBdKQorICAgICAgICBzZXFlcSgnY3VyOi0zJywgWzk3LCA5OCwgOTldKQorICAgICAgICBzZXFlcSgnZmlyc3QtY3VyJywgcmFuZ2UoNSwgMTAwKSkKKyAgICAgICAgc2VxZXEoJzE1MC1sYXN0JywgcmFuZ2UoMTUxLCAyMDEsIDIpKQorICAgICAgICBzZXFlcSgncHJldi1uZXh0JywgWzk4LCA5OSwgMTAwXSkKKworICAgICAgICBsb3dwcmltZXMgPSBbNSwgNywgMTEsIDEzLCAxNywgMTksIDIzLCAyOV0KKyAgICAgICAgbG93Y29tcG9zID0gW3ggZm9yIHggaW4gcmFuZ2UoNSwgMzEpIGlmIG5vdCB4IGluIGxvd3ByaW1lcyBdCisgICAgICAgIGYucHV0c2VxdWVuY2VzKHsnY3VyJzogWzVdLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2xvd3ByaW1lJzogbG93cHJpbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2xvd2NvbXBvcyc6IGxvd2NvbXBvc30pCisgICAgICAgIHNlcXMgPSByZWFkRmlsZShvcy5wYXRoLmpvaW4oX21ocGF0aCwgJ3dpZGUnLCAnLm1oX3NlcXVlbmNlcycpKQorICAgICAgICBzZXFzID0gc29ydExpbmVzKHNlcXMpCisgICAgICAgIGVxKHNlcXMsIFsiY3VyOiA1IiwKKyAgICAgICAgICAgICAgICAgICJsb3djb21wb3M6IDYgOC0xMCAxMiAxNC0xNiAxOCAyMC0yMiAyNC0yOCAzMCIsCisgICAgICAgICAgICAgICAgICAibG93cHJpbWU6IDUgNyAxMSAxMyAxNyAxOSAyMyAyOSJdKQorCisgICAgICAgIHNlcWVxKCdsb3dwcmltZScsIGxvd3ByaW1lcykKKyAgICAgICAgc2VxZXEoJ2xvd3ByaW1lOjEnLCBbNV0pCisgICAgICAgIHNlcWVxKCdsb3dwcmltZToyJywgWzUsIDddKQorICAgICAgICBzZXFlcSgnbG93cHJpbWU6LTInLCBbMjMsIDI5XSkKKworICAgICAgICAjIyBOb3Qgc3VwcG9ydGVkCisgICAgICAgICNzZXFlcSgnbG93cHJpbWU6Zmlyc3QnLCBbNV0pCisgICAgICAgICNzZXFlcSgnbG93cHJpbWU6bGFzdCcsIFsyOV0pCisgICAgICAgICNzZXFlcSgnbG93cHJpbWU6cHJldicsIFsyOV0pCisgICAgICAgICNzZXFlcSgnbG93cHJpbWU6bmV4dCcsIFsyOV0pCisKKyAgICBkZWYgdGVzdF9tb2RpZnkoc2VsZik6CisgICAgICAgIG1oID0gZ2V0TUgoKQorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICBtaC5tYWtlZm9sZGVyKCJkdW1teTEiKQorICAgICAgICBzZWxmLmFzc2VydEluKCJkdW1teTEiLCBtaC5saXN0Zm9sZGVycygpKQorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKF9taHBhdGgsICJkdW1teTEiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0aCkpCisKKyAgICAgICAgZiA9IG1oLm9wZW5mb2xkZXIoJ2R1bW15MScpCisgICAgICAgIGRlZiBjcmVhdGUobik6CisgICAgICAgICAgICBtc2cgPSAiRnJvbTogZm9vXG5TdWJqZWN0OiAlc1xuXG5EdW1teSBNZXNzYWdlICVzXG4iICUgKG4sbikKKyAgICAgICAgICAgIGYuY3JlYXRlbWVzc2FnZShuLCBTdHJpbmdJTy5TdHJpbmdJTyhtc2cpKQorCisgICAgICAgIGNyZWF0ZSg3KQorICAgICAgICBjcmVhdGUoOCkKKyAgICAgICAgY3JlYXRlKDkpCisKKyAgICAgICAgZXEocmVhZEZpbGUoZi5nZXRtZXNzYWdlZmlsZW5hbWUoOSkpLAorICAgICAgICAgICAiRnJvbTogZm9vXG5TdWJqZWN0OiA5XG5cbkR1bW15IE1lc3NhZ2UgOVxuIikKKworICAgICAgICBlcShmLmxpc3RtZXNzYWdlcygpLCBbNywgOCwgOV0pCisgICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihwYXRoKQorICAgICAgICBmaWxlcy5zb3J0KCkKKyAgICAgICAgZXEoZmlsZXMsIFsnNycsICc4JywgJzknXSkKKworICAgICAgICBmLnJlbW92ZW1lc3NhZ2VzKFsnNycsICc4J10pCisgICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihwYXRoKQorICAgICAgICBmaWxlcy5zb3J0KCkKKyAgICAgICAgZXEoZmlsZXMsIFsnLDcnLCAnLDgnLCAnOSddKQorICAgICAgICBlcShmLmxpc3RtZXNzYWdlcygpLCBbOV0pCisgICAgICAgIGNyZWF0ZSgxMCkKKyAgICAgICAgY3JlYXRlKDExKQorICAgICAgICBjcmVhdGUoMTIpCisKKyAgICAgICAgbWgubWFrZWZvbGRlcigiZHVtbXkyIikKKyAgICAgICAgZjIgPSBtaC5vcGVuZm9sZGVyKCJkdW1teTIiKQorICAgICAgICBlcShmMi5saXN0bWVzc2FnZXMoKSwgW10pCisgICAgICAgIGYubW92ZW1lc3NhZ2UoMTAsIGYyLCAzKQorICAgICAgICBmLm1vdmVtZXNzYWdlKDExLCBmMiwgNSkKKyAgICAgICAgZXEoZi5saXN0bWVzc2FnZXMoKSwgWzksIDEyXSkKKyAgICAgICAgZXEoZjIubGlzdG1lc3NhZ2VzKCksIFszLCA1XSkKKyAgICAgICAgZXEocmVhZEZpbGUoZjIuZ2V0bWVzc2FnZWZpbGVuYW1lKDMpKSwKKyAgICAgICAgICAgIkZyb206IGZvb1xuU3ViamVjdDogMTBcblxuRHVtbXkgTWVzc2FnZSAxMFxuIikKKworICAgICAgICBmLmNvcHltZXNzYWdlKDksIGYyLCA0KQorICAgICAgICBlcShmLmxpc3RtZXNzYWdlcygpLCBbOSwgMTJdKQorICAgICAgICBlcShyZWFkRmlsZShmMi5nZXRtZXNzYWdlZmlsZW5hbWUoNCkpLAorICAgICAgICAgICAiRnJvbTogZm9vXG5TdWJqZWN0OiA5XG5cbkR1bW15IE1lc3NhZ2UgOVxuIikKKworICAgICAgICBmLnJlZmlsZW1lc3NhZ2VzKFs5LCAxMl0sIGYyKQorICAgICAgICBlcShmLmxpc3RtZXNzYWdlcygpLCBbXSkKKyAgICAgICAgZXEoZjIubGlzdG1lc3NhZ2VzKCksIFszLCA0LCA1LCA2LCA3XSkKKyAgICAgICAgZXEocmVhZEZpbGUoZjIuZ2V0bWVzc2FnZWZpbGVuYW1lKDcpKSwKKyAgICAgICAgICAgIkZyb206IGZvb1xuU3ViamVjdDogMTJcblxuRHVtbXkgTWVzc2FnZSAxMlxuIikKKyAgICAgICAgIyBYWFggVGhpcyBzaG91bGQgY2hlY2sgdGhhdCBfY29weXNlcXVlbmNlcyBkb2VzIHRoZSByaWdodCB0aGluZy4KKworICAgICAgICBtaC5kZWxldGVmb2xkZXIoJ2R1bW15MScpCisgICAgICAgIG1oLmRlbGV0ZWZvbGRlcignZHVtbXkyJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZHVtbXkxJywgbWgubGlzdGZvbGRlcnMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKSkKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIG1oID0gZ2V0TUgoKQorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICBmID0gbWgub3BlbmZvbGRlcignaW5ib3gnKQorICAgICAgICBtc2cgPSBmLm9wZW5tZXNzYWdlKDEpCisgICAgICAgICMgQ2hlY2sgc29tZSBiYXNpYyBzdHVmZiBmcm9tIHJmYzgyMgorICAgICAgICBlcShtc2cuZ2V0aGVhZGVyKCdGcm9tJyksICJNcnMuIFByZW1pc2UiKQorICAgICAgICBlcShtc2cuZ2V0aGVhZGVyKCdUbycpLCAiTXJzLiBDb25jbHVzaW9uIikKKworICAgICAgICAjIE9rYXksIHdlIGhhdmUgdGhlIHJpZ2h0IG1lc3NhZ2UuICBMZXQncyBjaGVjayB0aGUgc3R1ZmYgZnJvbQorICAgICAgICAjIG1obGliLgorICAgICAgICBsaW5lcyA9IHNvcnRMaW5lcyhtc2cuZ2V0aGVhZGVydGV4dCgpKQorICAgICAgICBlcShsaW5lcywgWyJEYXRlOiAxOCBKdWx5IDIwMDEiLAorICAgICAgICAgICAgICAgICAgICJGcm9tOiBNcnMuIFByZW1pc2UiLAorICAgICAgICAgICAgICAgICAgICJUbzogTXJzLiBDb25jbHVzaW9uIl0pCisgICAgICAgIGxpbmVzID0gc29ydExpbmVzKG1zZy5nZXRoZWFkZXJ0ZXh0KGxhbWJkYSBoOiBsZW4oaCk9PTQpKQorICAgICAgICBlcShsaW5lcywgWyJEYXRlOiAxOCBKdWx5IDIwMDEiLAorICAgICAgICAgICAgICAgICAgICJGcm9tOiBNcnMuIFByZW1pc2UiXSkKKyAgICAgICAgZXEobXNnLmdldGJvZHl0ZXh0KCksICJIdWxsbywgTXJzLiBDb25jbHVzaW9uIVxuXG4iKQorICAgICAgICBlcShtc2cuZ2V0Ym9keXRleHQoMCksICJIdWxsbywgTXJzLiBDb25jbHVzaW9uIVxuXG4iKQorCisgICAgICAgICMgWFhYWCB0aGVyZSBzaG91bGQgYmUgYSBiZXR0ZXIgd2F5IHRvIHJlY2xhaW0gdGhlIGZpbGUgaGFuZGxlCisgICAgICAgIG1zZy5mcC5jbG9zZSgpCisgICAgICAgIGRlbCBtc2cKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KE1obGliVGVzdHMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbWltZXRvb2xzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbWltZXRvb2xzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YTI2ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9taW1ldG9vbHMucHkKQEAgLTAsMCArMSw1MyBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgU3RyaW5nSU8KKworbWltZXRvb2xzID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoIm1pbWV0b29scyIsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKworbXNndGV4dDEgPSBtaW1ldG9vbHMuTWVzc2FnZShTdHJpbmdJTy5TdHJpbmdJTygKKyIiIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0xOyBmb3JtYXQ9Zmxvd2VkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0ZvbyEKKyIiIikpCisKK2NsYXNzIE1pbWVUb29sc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZGVjb2RlZW5jb2RlKHNlbGYpOgorICAgICAgICBzdGFydCA9IHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgIj0iICsgc3RyaW5nLmRpZ2l0cyArICJcbiIKKyAgICAgICAgZm9yIGVuYyBpbiBbJzdiaXQnLCc4Yml0JywnYmFzZTY0JywncXVvdGVkLXByaW50YWJsZScsCisgICAgICAgICAgICAgICAgICAgICd1dWVuY29kZScsICd4LXV1ZW5jb2RlJywgJ3V1ZScsICd4LXV1ZSddOgorICAgICAgICAgICAgaSA9IFN0cmluZ0lPLlN0cmluZ0lPKHN0YXJ0KQorICAgICAgICAgICAgbyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIG1pbWV0b29scy5lbmNvZGUoaSwgbywgZW5jKQorICAgICAgICAgICAgaSA9IFN0cmluZ0lPLlN0cmluZ0lPKG8uZ2V0dmFsdWUoKSkKKyAgICAgICAgICAgIG8gPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICBtaW1ldG9vbHMuZGVjb2RlKGksIG8sIGVuYykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5nZXR2YWx1ZSgpLCBzdGFydCkKKworICAgIGRlZiB0ZXN0X2JvdW5kYXJ5KHNlbGYpOgorICAgICAgICBzID0gc2V0KFsiIl0pCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDApOgorICAgICAgICAgICAgbmIgPSBtaW1ldG9vbHMuY2hvb3NlX2JvdW5kYXJ5KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmIsIHMpCisgICAgICAgICAgICBzLmFkZChuYikKKworICAgIGRlZiB0ZXN0X21lc3NhZ2Uoc2VsZik6CisgICAgICAgIG1zZyA9IG1pbWV0b29scy5NZXNzYWdlKFN0cmluZ0lPLlN0cmluZ0lPKG1zZ3RleHQxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0dHlwZSgpLCAidGV4dC9wbGFpbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldG1haW50eXBlKCksICJ0ZXh0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0c3VidHlwZSgpLCAicGxhaW4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRwbGlzdCgpLCBbImNoYXJzZXQ9aXNvLTg4NTktMSIsICJmb3JtYXQ9Zmxvd2VkIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldHBhcmFtbmFtZXMoKSwgWyJjaGFyc2V0IiwgImZvcm1hdCJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRwYXJhbSgiY2hhcnNldCIpLCAiaXNvLTg4NTktMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldHBhcmFtKCJmb3JtYXQiKSwgImZsb3dlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldHBhcmFtKCJzcGFtIiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldGVuY29kaW5nKCksICI4Yml0IikKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTWltZVRvb2xzVGVzdCkKKworaWYgX19uYW1lX189PSJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21pbWV0eXBlcy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21pbWV0eXBlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODhkN2E4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbWltZXR5cGVzLnB5CkBAIC0wLDAgKzEsOTYgQEAKK2ltcG9ydCBtaW1ldHlwZXMKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKyMgVGVsbCBpdCB3ZSBkb24ndCBrbm93IGFib3V0IGV4dGVybmFsIGZpbGVzOgorbWltZXR5cGVzLmtub3duZmlsZXMgPSBbXQorbWltZXR5cGVzLmluaXRlZCA9IEZhbHNlCittaW1ldHlwZXMuX2RlZmF1bHRfbWltZV90eXBlcygpCisKKworY2xhc3MgTWltZVR5cGVzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kYiA9IG1pbWV0eXBlcy5NaW1lVHlwZXMoKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9kYXRhKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoc2VsZi5kYi5ndWVzc190eXBlKCJmb28uaHRtbCIpLCAoInRleHQvaHRtbCIsIE5vbmUpKQorICAgICAgICBlcShzZWxmLmRiLmd1ZXNzX3R5cGUoImZvby50Z3oiKSwgKCJhcHBsaWNhdGlvbi94LXRhciIsICJnemlwIikpCisgICAgICAgIGVxKHNlbGYuZGIuZ3Vlc3NfdHlwZSgiZm9vLnRhci5neiIpLCAoImFwcGxpY2F0aW9uL3gtdGFyIiwgImd6aXAiKSkKKyAgICAgICAgZXEoc2VsZi5kYi5ndWVzc190eXBlKCJmb28udGFyLloiKSwgKCJhcHBsaWNhdGlvbi94LXRhciIsICJjb21wcmVzcyIpKQorICAgICAgICBlcShzZWxmLmRiLmd1ZXNzX3R5cGUoImZvby50YXIuYnoyIiksICgiYXBwbGljYXRpb24veC10YXIiLCAiYnppcDIiKSkKKyAgICAgICAgZXEoc2VsZi5kYi5ndWVzc190eXBlKCJmb28udGFyLnh6IiksICgiYXBwbGljYXRpb24veC10YXIiLCAieHoiKSkKKworICAgIGRlZiB0ZXN0X2RhdGFfdXJscyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGd1ZXNzX3R5cGUgPSBzZWxmLmRiLmd1ZXNzX3R5cGUKKyAgICAgICAgZXEoZ3Vlc3NfdHlwZSgiZGF0YTosdGhpc0lzVGV4dFBsYWluIiksICgidGV4dC9wbGFpbiIsIE5vbmUpKQorICAgICAgICBlcShndWVzc190eXBlKCJkYXRhOjtiYXNlNjQsdGhpc0lzVGV4dFBsYWluIiksICgidGV4dC9wbGFpbiIsIE5vbmUpKQorICAgICAgICBlcShndWVzc190eXBlKCJkYXRhOnRleHQveC1mb28sdGhpc0lzVGV4dFhGb28iKSwgKCJ0ZXh0L3gtZm9vIiwgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9maWxlX3BhcnNpbmcoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBzaW8gPSBTdHJpbmdJTy5TdHJpbmdJTygieC1hcHBsaWNhdGlvbi94LXVuaXR0ZXN0IHB5dW5pdFxuIikKKyAgICAgICAgc2VsZi5kYi5yZWFkZnAoc2lvKQorICAgICAgICBlcShzZWxmLmRiLmd1ZXNzX3R5cGUoImZvby5weXVuaXQiKSwKKyAgICAgICAgICAgKCJ4LWFwcGxpY2F0aW9uL3gtdW5pdHRlc3QiLCBOb25lKSkKKyAgICAgICAgZXEoc2VsZi5kYi5ndWVzc19leHRlbnNpb24oIngtYXBwbGljYXRpb24veC11bml0dGVzdCIpLCAiLnB5dW5pdCIpCisKKyAgICBkZWYgdGVzdF9ub25fc3RhbmRhcmRfdHlwZXMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICAjIEZpcnN0IHRyeSBzdHJpY3QKKyAgICAgICAgZXEoc2VsZi5kYi5ndWVzc190eXBlKCdmb28ueHVsJywgc3RyaWN0PVRydWUpLCAoTm9uZSwgTm9uZSkpCisgICAgICAgIGVxKHNlbGYuZGIuZ3Vlc3NfZXh0ZW5zaW9uKCdpbWFnZS9qcGcnLCBzdHJpY3Q9VHJ1ZSksIE5vbmUpCisgICAgICAgICMgQW5kIHRoZW4gbm9uLXN0cmljdAorICAgICAgICBlcShzZWxmLmRiLmd1ZXNzX3R5cGUoJ2Zvby54dWwnLCBzdHJpY3Q9RmFsc2UpLCAoJ3RleHQveHVsJywgTm9uZSkpCisgICAgICAgIGVxKHNlbGYuZGIuZ3Vlc3NfZXh0ZW5zaW9uKCdpbWFnZS9qcGcnLCBzdHJpY3Q9RmFsc2UpLCAnLmpwZycpCisKKyAgICBkZWYgdGVzdF9ndWVzc19hbGxfdHlwZXMoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICB1bmxlc3MgPSBzZWxmLmFzc2VydFRydWUKKyAgICAgICAgIyBGaXJzdCB0cnkgc3RyaWN0LiAgVXNlIGEgc2V0IGhlcmUgZm9yIHRlc3RpbmcgdGhlIHJlc3VsdHMgYmVjYXVzZSBpZgorICAgICAgICAjIHRlc3RfdXJsbGliMiBpcyBydW4gYmVmb3JlIHRlc3RfbWltZXR5cGVzLCBnbG9iYWwgc3RhdGUgaXMgbW9kaWZpZWQKKyAgICAgICAgIyBzdWNoIHRoYXQgdGhlICdhbGwnIHNldCB3aWxsIGhhdmUgbW9yZSBpdGVtcyBpbiBpdC4KKyAgICAgICAgYWxsID0gc2V0KHNlbGYuZGIuZ3Vlc3NfYWxsX2V4dGVuc2lvbnMoJ3RleHQvcGxhaW4nLCBzdHJpY3Q9VHJ1ZSkpCisgICAgICAgIHVubGVzcyhhbGwgPj0gc2V0KFsnLmJhdCcsICcuYycsICcuaCcsICcua3NoJywgJy5wbCcsICcudHh0J10pKQorICAgICAgICAjIEFuZCBub3cgbm9uLXN0cmljdAorICAgICAgICBhbGwgPSBzZWxmLmRiLmd1ZXNzX2FsbF9leHRlbnNpb25zKCdpbWFnZS9qcGcnLCBzdHJpY3Q9RmFsc2UpCisgICAgICAgIGFsbC5zb3J0KCkKKyAgICAgICAgZXEoYWxsLCBbJy5qcGcnXSkKKyAgICAgICAgIyBBbmQgbm93IGZvciBubyBoaXRzCisgICAgICAgIGFsbCA9IHNlbGYuZGIuZ3Vlc3NfYWxsX2V4dGVuc2lvbnMoJ2ltYWdlL2pwZycsIHN0cmljdD1UcnVlKQorICAgICAgICBlcShhbGwsIFtdKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJ3aW4iKSwgIldpbmRvd3Mgb25seSIpCitjbGFzcyBXaW4zMk1pbWVUeXBlc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgZW5zdXJlIGFsbCBlbnRyaWVzIGFjdHVhbGx5IGNvbWUgZnJvbSB0aGUgV2luZG93cyByZWdpc3RyeQorICAgICAgICBzZWxmLm9yaWdpbmFsX3R5cGVzX21hcCA9IG1pbWV0eXBlcy50eXBlc19tYXAuY29weSgpCisgICAgICAgIG1pbWV0eXBlcy50eXBlc19tYXAuY2xlYXIoKQorICAgICAgICBtaW1ldHlwZXMuaW5pdCgpCisgICAgICAgIHNlbGYuZGIgPSBtaW1ldHlwZXMuTWltZVR5cGVzKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyByZXN0b3JlIGRlZmF1bHQgc2V0dGluZ3MKKyAgICAgICAgbWltZXR5cGVzLnR5cGVzX21hcC5jbGVhcigpCisgICAgICAgIG1pbWV0eXBlcy50eXBlc19tYXAudXBkYXRlKHNlbGYub3JpZ2luYWxfdHlwZXNfbWFwKQorCisgICAgZGVmIHRlc3RfcmVnaXN0cnlfcGFyc2luZyhzZWxmKToKKyAgICAgICAgIyB0aGUgb3JpZ2luYWwsIG1pbmltdW0gY29udGVudHMgb2YgdGhlIE1JTUUgZGF0YWJhc2UgaW4gdGhlCisgICAgICAgICMgV2luZG93cyByZWdpc3RyeSBpcyB1bmRvY3VtZW50ZWQgQUZBSUsuCisgICAgICAgICMgVXNlIGZpbGUgdHlwZXMgdGhhdCBzaG91bGQgKmFsd2F5cyogZXhpc3Q6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShzZWxmLmRiLmd1ZXNzX3R5cGUoImZvby50eHQiKSwgKCJ0ZXh0L3BsYWluIiwgTm9uZSkpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KE1pbWVUeXBlc1Rlc3RDYXNlLAorICAgICAgICBXaW4zMk1pbWVUeXBlc1Rlc3RDYXNlCisgICAgICAgICkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9taW5pZG9tLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbWluaWRvbS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTBmMGY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbWluaWRvbS5weQpAQCAtMCwwICsxLDE1MTEgQEAKKyMgdGVzdCBmb3IgeG1sLmRvbS5taW5pZG9tCisKK2ltcG9ydCBwaWNrbGUKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fdW5pdHRlc3QsIGZpbmRmaWxlCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IHhtbC5kb20KK2ltcG9ydCB4bWwuZG9tLm1pbmlkb20KK2ltcG9ydCB4bWwucGFyc2Vycy5leHBhdAorCitmcm9tIHhtbC5kb20ubWluaWRvbSBpbXBvcnQgcGFyc2UsIE5vZGUsIERvY3VtZW50LCBwYXJzZVN0cmluZworZnJvbSB4bWwuZG9tLm1pbmlkb20gaW1wb3J0IGdldERPTUltcGxlbWVudGF0aW9uCisKKwordHN0ZmlsZSA9IGZpbmRmaWxlKCJ0ZXN0LnhtbCIsIHN1YmRpcj0ieG1sdGVzdGRhdGEiKQorCisKKyMgVGhlIHRlc3RzIG9mIERvY3VtZW50VHlwZSBpbXBvcnRpbmcgdXNlIHRoZXNlIGhlbHBlcnMgdG8gY29uc3RydWN0CisjIHRoZSBkb2N1bWVudHMgdG8gd29yayB3aXRoLCBzaW5jZSBub3QgYWxsIERPTSBidWlsZGVycyBhY3R1YWxseQorIyBjcmVhdGUgdGhlIERvY3VtZW50VHlwZSBub2Rlcy4KK2RlZiBjcmVhdGVfZG9jX3dpdGhvdXRfZG9jdHlwZShkb2N0eXBlPU5vbmUpOgorICAgIHJldHVybiBnZXRET01JbXBsZW1lbnRhdGlvbigpLmNyZWF0ZURvY3VtZW50KE5vbmUsICJkb2MiLCBkb2N0eXBlKQorCitkZWYgY3JlYXRlX25vbmVtcHR5X2RvY3R5cGUoKToKKyAgICBkb2N0eXBlID0gZ2V0RE9NSW1wbGVtZW50YXRpb24oKS5jcmVhdGVEb2N1bWVudFR5cGUoImRvYyIsIE5vbmUsIE5vbmUpCisgICAgZG9jdHlwZS5lbnRpdGllcy5fc2VxID0gW10KKyAgICBkb2N0eXBlLm5vdGF0aW9ucy5fc2VxID0gW10KKyAgICBub3RhdGlvbiA9IHhtbC5kb20ubWluaWRvbS5Ob3RhdGlvbigibXktbm90YXRpb24iLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbm90YXRpb25zL215IikKKyAgICBkb2N0eXBlLm5vdGF0aW9ucy5fc2VxLmFwcGVuZChub3RhdGlvbikKKyAgICBlbnRpdHkgPSB4bWwuZG9tLm1pbmlkb20uRW50aXR5KCJteS1lbnRpdHkiLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly94bWwucHl0aG9uLm9yZy9lbnRpdGllcy9teSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXktbm90YXRpb24iKQorICAgIGVudGl0eS52ZXJzaW9uID0gIjEuMCIKKyAgICBlbnRpdHkuZW5jb2RpbmcgPSAidXRmLTgiCisgICAgZW50aXR5LmFjdHVhbEVuY29kaW5nID0gInVzLWFzY2lpIgorICAgIGRvY3R5cGUuZW50aXRpZXMuX3NlcS5hcHBlbmQoZW50aXR5KQorICAgIHJldHVybiBkb2N0eXBlCisKK2RlZiBjcmVhdGVfZG9jX3dpdGhfZG9jdHlwZSgpOgorICAgIGRvY3R5cGUgPSBjcmVhdGVfbm9uZW1wdHlfZG9jdHlwZSgpCisgICAgZG9jID0gY3JlYXRlX2RvY193aXRob3V0X2RvY3R5cGUoZG9jdHlwZSkKKyAgICBkb2N0eXBlLmVudGl0aWVzLml0ZW0oMCkub3duZXJEb2N1bWVudCA9IGRvYworICAgIGRvY3R5cGUubm90YXRpb25zLml0ZW0oMCkub3duZXJEb2N1bWVudCA9IGRvYworICAgIHJldHVybiBkb2MKKworY2xhc3MgTWluaWRvbVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjb25maXJtKHNlbGYsIHRlc3QsIHRlc3RuYW1lID0gIlRlc3QiKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3QsIHRlc3RuYW1lKQorCisgICAgZGVmIGNoZWNrV2hvbGVUZXh0KHNlbGYsIG5vZGUsIHMpOgorICAgICAgICB0ID0gbm9kZS53aG9sZVRleHQKKyAgICAgICAgc2VsZi5jb25maXJtKHQgPT0gcywgImxvb2tpbmcgZm9yICVzLCBmb3VuZCAlcyIgJSAocmVwcihzKSwgcmVwcih0KSkpCisKKyAgICBkZWYgdGVzdFBhcnNlRnJvbUZpbGUoc2VsZik6CisgICAgICAgIGRvbSA9IHBhcnNlKFN0cmluZ0lPKG9wZW4odHN0ZmlsZSkucmVhZCgpKSkKKyAgICAgICAgZG9tLnVubGluaygpCisgICAgICAgIHNlbGYuY29uZmlybShpc2luc3RhbmNlKGRvbSxEb2N1bWVudCkpCisKKyAgICBkZWYgdGVzdEdldEVsZW1lbnRzQnlUYWdOYW1lKHNlbGYpOgorICAgICAgICBkb20gPSBwYXJzZSh0c3RmaWxlKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJMSSIpID09IFwKKyAgICAgICAgICAgICAgICBkb20uZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJMSSIpKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiB0ZXN0SW5zZXJ0QmVmb3JlKHNlbGYpOgorICAgICAgICBkb20gPSBwYXJzZVN0cmluZygiPGRvYz48Zm9vLz48L2RvYz4iKQorICAgICAgICByb290ID0gZG9tLmRvY3VtZW50RWxlbWVudAorICAgICAgICBlbGVtID0gcm9vdC5jaGlsZE5vZGVzWzBdCisgICAgICAgIG5lbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnQoImVsZW1lbnQiKQorICAgICAgICByb290Lmluc2VydEJlZm9yZShuZWxlbSwgZWxlbSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAyCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1swXSBpcyBuZWxlbQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMuaXRlbSgwKSBpcyBuZWxlbQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0gaXMgZWxlbQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMuaXRlbSgxKSBpcyBlbGVtCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZCBpcyBuZWxlbQorICAgICAgICAgICAgICAgIGFuZCByb290Lmxhc3RDaGlsZCBpcyBlbGVtCisgICAgICAgICAgICAgICAgYW5kIHJvb3QudG94bWwoKSA9PSAiPGRvYz48ZWxlbWVudC8+PGZvby8+PC9kb2M+IgorICAgICAgICAgICAgICAgICwgInRlc3RJbnNlcnRCZWZvcmUgLS0gbm9kZSBwcm9wZXJseSBwbGFjZWQgaW4gdHJlZSIpCisgICAgICAgIG5lbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnQoImVsZW1lbnQiKQorICAgICAgICByb290Lmluc2VydEJlZm9yZShuZWxlbSwgTm9uZSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDMKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAzCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1sxXSBpcyBlbGVtCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5pdGVtKDEpIGlzIGVsZW0KKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzJdIGlzIG5lbGVtCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5pdGVtKDIpIGlzIG5lbGVtCisgICAgICAgICAgICAgICAgYW5kIHJvb3QubGFzdENoaWxkIGlzIG5lbGVtCisgICAgICAgICAgICAgICAgYW5kIG5lbGVtLnByZXZpb3VzU2libGluZyBpcyBlbGVtCisgICAgICAgICAgICAgICAgYW5kIHJvb3QudG94bWwoKSA9PSAiPGRvYz48ZWxlbWVudC8+PGZvby8+PGVsZW1lbnQvPjwvZG9jPiIKKyAgICAgICAgICAgICAgICAsICJ0ZXN0SW5zZXJ0QmVmb3JlIC0tIG5vZGUgcHJvcGVybHkgcGxhY2VkIGluIHRyZWUiKQorICAgICAgICBuZWxlbTIgPSBkb20uY3JlYXRlRWxlbWVudCgiYmFyIikKKyAgICAgICAgcm9vdC5pbnNlcnRCZWZvcmUobmVsZW0yLCBuZWxlbSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSA0CisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1syXSBpcyBuZWxlbTIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLml0ZW0oMikgaXMgbmVsZW0yCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1szXSBpcyBuZWxlbQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMuaXRlbSgzKSBpcyBuZWxlbQorICAgICAgICAgICAgICAgIGFuZCBuZWxlbTIubmV4dFNpYmxpbmcgaXMgbmVsZW0KKyAgICAgICAgICAgICAgICBhbmQgbmVsZW0ucHJldmlvdXNTaWJsaW5nIGlzIG5lbGVtMgorICAgICAgICAgICAgICAgIGFuZCByb290LnRveG1sKCkgPT0KKyAgICAgICAgICAgICAgICAiPGRvYz48ZWxlbWVudC8+PGZvby8+PGJhci8+PGVsZW1lbnQvPjwvZG9jPiIKKyAgICAgICAgICAgICAgICAsICJ0ZXN0SW5zZXJ0QmVmb3JlIC0tIG5vZGUgcHJvcGVybHkgcGxhY2VkIGluIHRyZWUiKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiBfY3JlYXRlX2ZyYWdtZW50X3Rlc3Rfbm9kZXMoc2VsZik6CisgICAgICAgIGRvbSA9IHBhcnNlU3RyaW5nKCI8ZG9jLz4iKQorICAgICAgICBvcmlnID0gZG9tLmNyZWF0ZVRleHROb2RlKCJvcmlnaW5hbCIpCisgICAgICAgIGMxID0gZG9tLmNyZWF0ZVRleHROb2RlKCJmb28iKQorICAgICAgICBjMiA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiYmFyIikKKyAgICAgICAgYzMgPSBkb20uY3JlYXRlVGV4dE5vZGUoImJhdCIpCisgICAgICAgIGRvbS5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQob3JpZykKKyAgICAgICAgZnJhZyA9IGRvbS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkKKyAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjMSkKKyAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjMikKKyAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjMykKKyAgICAgICAgcmV0dXJuIGRvbSwgb3JpZywgYzEsIGMyLCBjMywgZnJhZworCisgICAgZGVmIHRlc3RJbnNlcnRCZWZvcmVGcmFnbWVudChzZWxmKToKKyAgICAgICAgZG9tLCBvcmlnLCBjMSwgYzIsIGMzLCBmcmFnID0gc2VsZi5fY3JlYXRlX2ZyYWdtZW50X3Rlc3Rfbm9kZXMoKQorICAgICAgICBkb20uZG9jdW1lbnRFbGVtZW50Lmluc2VydEJlZm9yZShmcmFnLCBOb25lKQorICAgICAgICBzZWxmLmNvbmZpcm0odHVwbGUoZG9tLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzKSA9PQorICAgICAgICAgICAgICAgICAgICAgKG9yaWcsIGMxLCBjMiwgYzMpLAorICAgICAgICAgICAgICAgICAgICAgImluc2VydEJlZm9yZSg8ZnJhZ21lbnQ+LCBOb25lKSIpCisgICAgICAgIGZyYWcudW5saW5rKCkKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICAgICAgZG9tLCBvcmlnLCBjMSwgYzIsIGMzLCBmcmFnID0gc2VsZi5fY3JlYXRlX2ZyYWdtZW50X3Rlc3Rfbm9kZXMoKQorICAgICAgICBkb20uZG9jdW1lbnRFbGVtZW50Lmluc2VydEJlZm9yZShmcmFnLCBvcmlnKQorICAgICAgICBzZWxmLmNvbmZpcm0odHVwbGUoZG9tLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzKSA9PQorICAgICAgICAgICAgICAgICAgICAgKGMxLCBjMiwgYzMsIG9yaWcpLAorICAgICAgICAgICAgICAgICAgICAgImluc2VydEJlZm9yZSg8ZnJhZ21lbnQ+LCBvcmlnKSIpCisgICAgICAgIGZyYWcudW5saW5rKCkKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdEFwcGVuZENoaWxkKHNlbGYpOgorICAgICAgICBkb20gPSBwYXJzZSh0c3RmaWxlKQorICAgICAgICBkb20uZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGRvbS5jcmVhdGVDb21tZW50KHUiSGVsbG8iKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGRvbS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2Rlc1stMV0ubm9kZU5hbWUgPT0gIiNjb21tZW50IikKKyAgICAgICAgc2VsZi5jb25maXJtKGRvbS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2Rlc1stMV0uZGF0YSA9PSAiSGVsbG8iKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiB0ZXN0QXBwZW5kQ2hpbGRGcmFnbWVudChzZWxmKToKKyAgICAgICAgZG9tLCBvcmlnLCBjMSwgYzIsIGMzLCBmcmFnID0gc2VsZi5fY3JlYXRlX2ZyYWdtZW50X3Rlc3Rfbm9kZXMoKQorICAgICAgICBkb20uZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGZyYWcpCisgICAgICAgIHNlbGYuY29uZmlybSh0dXBsZShkb20uZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpID09CisgICAgICAgICAgICAgICAgICAgICAob3JpZywgYzEsIGMyLCBjMyksCisgICAgICAgICAgICAgICAgICAgICAiYXBwZW5kQ2hpbGQoPGZyYWdtZW50PikiKQorICAgICAgICBmcmFnLnVubGluaygpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3RSZXBsYWNlQ2hpbGRGcmFnbWVudChzZWxmKToKKyAgICAgICAgZG9tLCBvcmlnLCBjMSwgYzIsIGMzLCBmcmFnID0gc2VsZi5fY3JlYXRlX2ZyYWdtZW50X3Rlc3Rfbm9kZXMoKQorICAgICAgICBkb20uZG9jdW1lbnRFbGVtZW50LnJlcGxhY2VDaGlsZChmcmFnLCBvcmlnKQorICAgICAgICBvcmlnLnVubGluaygpCisgICAgICAgIHNlbGYuY29uZmlybSh0dXBsZShkb20uZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpID09IChjMSwgYzIsIGMzKSwKKyAgICAgICAgICAgICAgICAicmVwbGFjZUNoaWxkKDxmcmFnbWVudD4pIikKKyAgICAgICAgZnJhZy51bmxpbmsoKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiB0ZXN0TGVnYWxDaGlsZHJlbihzZWxmKToKKyAgICAgICAgZG9tID0gRG9jdW1lbnQoKQorICAgICAgICBlbGVtID0gZG9tLmNyZWF0ZUVsZW1lbnQoJ2VsZW1lbnQnKQorICAgICAgICB0ZXh0ID0gZG9tLmNyZWF0ZVRleHROb2RlKCd0ZXh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1sLmRvbS5IaWVyYXJjaHlSZXF1ZXN0RXJyLCBkb20uYXBwZW5kQ2hpbGQsIHRleHQpCisKKyAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhtbC5kb20uSGllcmFyY2h5UmVxdWVzdEVyciwgZG9tLmluc2VydEJlZm9yZSwgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1sLmRvbS5IaWVyYXJjaHlSZXF1ZXN0RXJyLCBkb20ucmVwbGFjZUNoaWxkLCB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtKQorCisgICAgICAgIG5vZGVtYXAgPSBlbGVtLmF0dHJpYnV0ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1sLmRvbS5IaWVyYXJjaHlSZXF1ZXN0RXJyLCBub2RlbWFwLnNldE5hbWVkSXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1sLmRvbS5IaWVyYXJjaHlSZXF1ZXN0RXJyLCBub2RlbWFwLnNldE5hbWVkSXRlbU5TLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0KQorCisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQodGV4dCkKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdE5hbWVkTm9kZU1hcFNldEl0ZW0oc2VsZik6CisgICAgICAgIGRvbSA9IERvY3VtZW50KCkKKyAgICAgICAgZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50KCdlbGVtZW50JykKKyAgICAgICAgYXR0cnMgPSBlbGVtLmF0dHJpYnV0ZXMKKyAgICAgICAgYXR0cnNbImZvbyJdID0gImJhciIKKyAgICAgICAgYSA9IGF0dHJzLml0ZW0oMCkKKyAgICAgICAgc2VsZi5jb25maXJtKGEub3duZXJEb2N1bWVudCBpcyBkb20sCisgICAgICAgICAgICAgICAgIk5hbWVkTm9kZU1hcC5fX3NldGl0ZW1fXygpIHNldHMgb3duZXJEb2N1bWVudCIpCisgICAgICAgIHNlbGYuY29uZmlybShhLm93bmVyRWxlbWVudCBpcyBlbGVtLAorICAgICAgICAgICAgICAgICJOYW1lZE5vZGVNYXAuX19zZXRpdGVtX18oKSBzZXRzIG93bmVyRWxlbWVudCIpCisgICAgICAgIHNlbGYuY29uZmlybShhLnZhbHVlID09ICJiYXIiLAorICAgICAgICAgICAgICAgICJOYW1lZE5vZGVNYXAuX19zZXRpdGVtX18oKSBzZXRzIHZhbHVlIikKKyAgICAgICAgc2VsZi5jb25maXJtKGEubm9kZVZhbHVlID09ICJiYXIiLAorICAgICAgICAgICAgICAgICJOYW1lZE5vZGVNYXAuX19zZXRpdGVtX18oKSBzZXRzIG5vZGVWYWx1ZSIpCisgICAgICAgIGVsZW0udW5saW5rKCkKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdE5vblplcm8oc2VsZik6CisgICAgICAgIGRvbSA9IHBhcnNlKHRzdGZpbGUpCisgICAgICAgIHNlbGYuY29uZmlybShkb20pIyBzaG91bGQgbm90IGJlIHplcm8KKyAgICAgICAgZG9tLmFwcGVuZENoaWxkKGRvbS5jcmVhdGVDb21tZW50KCJmb28iKSkKKyAgICAgICAgc2VsZi5jb25maXJtKG5vdCBkb20uY2hpbGROb2Rlc1stMV0uY2hpbGROb2RlcykKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdFVubGluayhzZWxmKToKKyAgICAgICAgZG9tID0gcGFyc2UodHN0ZmlsZSkKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdEVsZW1lbnQoc2VsZik6CisgICAgICAgIGRvbSA9IERvY3VtZW50KCkKKyAgICAgICAgZG9tLmFwcGVuZENoaWxkKGRvbS5jcmVhdGVFbGVtZW50KCJhYmMiKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGRvbS5kb2N1bWVudEVsZW1lbnQpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3RBQUEoc2VsZik6CisgICAgICAgIGRvbSA9IHBhcnNlU3RyaW5nKCI8YWJjLz4iKQorICAgICAgICBlbCA9IGRvbS5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgZWwuc2V0QXR0cmlidXRlKCJzcGFtIiwgImphbTIiKQorICAgICAgICBzZWxmLmNvbmZpcm0oZWwudG94bWwoKSA9PSAnPGFiYyBzcGFtPSJqYW0yIi8+JywgInRlc3RBQUEiKQorICAgICAgICBhID0gZWwuZ2V0QXR0cmlidXRlTm9kZSgic3BhbSIpCisgICAgICAgIHNlbGYuY29uZmlybShhLm93bmVyRG9jdW1lbnQgaXMgZG9tLAorICAgICAgICAgICAgICAgICJzZXRBdHRyaWJ1dGUoKSBzZXRzIG93bmVyRG9jdW1lbnQiKQorICAgICAgICBzZWxmLmNvbmZpcm0oYS5vd25lckVsZW1lbnQgaXMgZG9tLmRvY3VtZW50RWxlbWVudCwKKyAgICAgICAgICAgICAgICAic2V0QXR0cmlidXRlKCkgc2V0cyBvd25lckVsZW1lbnQiKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiB0ZXN0QUFCKHNlbGYpOgorICAgICAgICBkb20gPSBwYXJzZVN0cmluZygiPGFiYy8+IikKKyAgICAgICAgZWwgPSBkb20uZG9jdW1lbnRFbGVtZW50CisgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgic3BhbSIsICJqYW0iKQorICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoInNwYW0iLCAiamFtMiIpCisgICAgICAgIHNlbGYuY29uZmlybShlbC50b3htbCgpID09ICc8YWJjIHNwYW09ImphbTIiLz4nLCAidGVzdEFBQiIpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3RBZGRBdHRyKHNlbGYpOgorICAgICAgICBkb20gPSBEb2N1bWVudCgpCisgICAgICAgIGNoaWxkID0gZG9tLmFwcGVuZENoaWxkKGRvbS5jcmVhdGVFbGVtZW50KCJhYmMiKSkKKworICAgICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoImRlZiIsICJnaGkiKQorICAgICAgICBzZWxmLmNvbmZpcm0oY2hpbGQuZ2V0QXR0cmlidXRlKCJkZWYiKSA9PSAiZ2hpIikKKyAgICAgICAgc2VsZi5jb25maXJtKGNoaWxkLmF0dHJpYnV0ZXNbImRlZiJdLnZhbHVlID09ICJnaGkiKQorCisgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgiamtsIiwgIm1ubyIpCisgICAgICAgIHNlbGYuY29uZmlybShjaGlsZC5nZXRBdHRyaWJ1dGUoImprbCIpID09ICJtbm8iKQorICAgICAgICBzZWxmLmNvbmZpcm0oY2hpbGQuYXR0cmlidXRlc1siamtsIl0udmFsdWUgPT0gIm1ubyIpCisKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihjaGlsZC5hdHRyaWJ1dGVzKSA9PSAyKQorCisgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgiZGVmIiwgIm5ld3ZhbCIpCisgICAgICAgIHNlbGYuY29uZmlybShjaGlsZC5nZXRBdHRyaWJ1dGUoImRlZiIpID09ICJuZXd2YWwiKQorICAgICAgICBzZWxmLmNvbmZpcm0oY2hpbGQuYXR0cmlidXRlc1siZGVmIl0udmFsdWUgPT0gIm5ld3ZhbCIpCisKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihjaGlsZC5hdHRyaWJ1dGVzKSA9PSAyKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiB0ZXN0RGVsZXRlQXR0cihzZWxmKToKKyAgICAgICAgZG9tID0gRG9jdW1lbnQoKQorICAgICAgICBjaGlsZCA9IGRvbS5hcHBlbmRDaGlsZChkb20uY3JlYXRlRWxlbWVudCgiYWJjIikpCisKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihjaGlsZC5hdHRyaWJ1dGVzKSA9PSAwKQorICAgICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoImRlZiIsICJnaGkiKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGNoaWxkLmF0dHJpYnV0ZXMpID09IDEpCisgICAgICAgIGRlbCBjaGlsZC5hdHRyaWJ1dGVzWyJkZWYiXQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGNoaWxkLmF0dHJpYnV0ZXMpID09IDApCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3RSZW1vdmVBdHRyKHNlbGYpOgorICAgICAgICBkb20gPSBEb2N1bWVudCgpCisgICAgICAgIGNoaWxkID0gZG9tLmFwcGVuZENoaWxkKGRvbS5jcmVhdGVFbGVtZW50KCJhYmMiKSkKKworICAgICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoImRlZiIsICJnaGkiKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGNoaWxkLmF0dHJpYnV0ZXMpID09IDEpCisgICAgICAgIGNoaWxkLnJlbW92ZUF0dHJpYnV0ZSgiZGVmIikKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihjaGlsZC5hdHRyaWJ1dGVzKSA9PSAwKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiB0ZXN0UmVtb3ZlQXR0ck5TKHNlbGYpOgorICAgICAgICBkb20gPSBEb2N1bWVudCgpCisgICAgICAgIGNoaWxkID0gZG9tLmFwcGVuZENoaWxkKAorICAgICAgICAgICAgICAgIGRvbS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cucHl0aG9uLm9yZyIsICJweXRob246YWJjIikpCisgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZyIsICJ4bWxuczpweXRob24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly93d3cucHl0aG9uLm9yZyIpCisgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnB5dGhvbi5vcmciLCAicHl0aG9uOmFiY2F0dHIiLCAiZm9vIikKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihjaGlsZC5hdHRyaWJ1dGVzKSA9PSAyKQorICAgICAgICBjaGlsZC5yZW1vdmVBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy5weXRob24ub3JnIiwgImFiY2F0dHIiKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGNoaWxkLmF0dHJpYnV0ZXMpID09IDEpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3RSZW1vdmVBdHRyaWJ1dGVOb2RlKHNlbGYpOgorICAgICAgICBkb20gPSBEb2N1bWVudCgpCisgICAgICAgIGNoaWxkID0gZG9tLmFwcGVuZENoaWxkKGRvbS5jcmVhdGVFbGVtZW50KCJmb28iKSkKKyAgICAgICAgY2hpbGQuc2V0QXR0cmlidXRlKCJzcGFtIiwgImphbSIpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4oY2hpbGQuYXR0cmlidXRlcykgPT0gMSkKKyAgICAgICAgbm9kZSA9IGNoaWxkLmdldEF0dHJpYnV0ZU5vZGUoInNwYW0iKQorICAgICAgICBjaGlsZC5yZW1vdmVBdHRyaWJ1dGVOb2RlKG5vZGUpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4oY2hpbGQuYXR0cmlidXRlcykgPT0gMAorICAgICAgICAgICAgICAgIGFuZCBjaGlsZC5nZXRBdHRyaWJ1dGVOb2RlKCJzcGFtIikgaXMgTm9uZSkKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdENoYW5nZUF0dHIoc2VsZik6CisgICAgICAgIGRvbSA9IHBhcnNlU3RyaW5nKCI8YWJjLz4iKQorICAgICAgICBlbCA9IGRvbS5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgZWwuc2V0QXR0cmlidXRlKCJzcGFtIiwgImphbSIpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4oZWwuYXR0cmlidXRlcykgPT0gMSkKKyAgICAgICAgZWwuc2V0QXR0cmlidXRlKCJzcGFtIiwgImJhbSIpCisgICAgICAgICMgU2V0IHRoaXMgYXR0cmlidXRlIHRvIGJlIGFuIElEIGFuZCBtYWtlIHN1cmUgdGhhdCBkb2Vzbid0IGNoYW5nZQorICAgICAgICAjIHdoZW4gY2hhbmdpbmcgdGhlIHZhbHVlOgorICAgICAgICBlbC5zZXRJZEF0dHJpYnV0ZSgic3BhbSIpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4oZWwuYXR0cmlidXRlcykgPT0gMQorICAgICAgICAgICAgICAgIGFuZCBlbC5hdHRyaWJ1dGVzWyJzcGFtIl0udmFsdWUgPT0gImJhbSIKKyAgICAgICAgICAgICAgICBhbmQgZWwuYXR0cmlidXRlc1sic3BhbSJdLm5vZGVWYWx1ZSA9PSAiYmFtIgorICAgICAgICAgICAgICAgIGFuZCBlbC5nZXRBdHRyaWJ1dGUoInNwYW0iKSA9PSAiYmFtIgorICAgICAgICAgICAgICAgIGFuZCBlbC5nZXRBdHRyaWJ1dGVOb2RlKCJzcGFtIikuaXNJZCkKKyAgICAgICAgZWwuYXR0cmlidXRlc1sic3BhbSJdID0gImhhbSIKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihlbC5hdHRyaWJ1dGVzKSA9PSAxCisgICAgICAgICAgICAgICAgYW5kIGVsLmF0dHJpYnV0ZXNbInNwYW0iXS52YWx1ZSA9PSAiaGFtIgorICAgICAgICAgICAgICAgIGFuZCBlbC5hdHRyaWJ1dGVzWyJzcGFtIl0ubm9kZVZhbHVlID09ICJoYW0iCisgICAgICAgICAgICAgICAgYW5kIGVsLmdldEF0dHJpYnV0ZSgic3BhbSIpID09ICJoYW0iCisgICAgICAgICAgICAgICAgYW5kIGVsLmF0dHJpYnV0ZXNbInNwYW0iXS5pc0lkKQorICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoInNwYW0yIiwgImJhbSIpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4oZWwuYXR0cmlidXRlcykgPT0gMgorICAgICAgICAgICAgICAgIGFuZCBlbC5hdHRyaWJ1dGVzWyJzcGFtIl0udmFsdWUgPT0gImhhbSIKKyAgICAgICAgICAgICAgICBhbmQgZWwuYXR0cmlidXRlc1sic3BhbSJdLm5vZGVWYWx1ZSA9PSAiaGFtIgorICAgICAgICAgICAgICAgIGFuZCBlbC5nZXRBdHRyaWJ1dGUoInNwYW0iKSA9PSAiaGFtIgorICAgICAgICAgICAgICAgIGFuZCBlbC5hdHRyaWJ1dGVzWyJzcGFtMiJdLnZhbHVlID09ICJiYW0iCisgICAgICAgICAgICAgICAgYW5kIGVsLmF0dHJpYnV0ZXNbInNwYW0yIl0ubm9kZVZhbHVlID09ICJiYW0iCisgICAgICAgICAgICAgICAgYW5kIGVsLmdldEF0dHJpYnV0ZSgic3BhbTIiKSA9PSAiYmFtIikKKyAgICAgICAgZWwuYXR0cmlidXRlc1sic3BhbTIiXSA9ICJiYW0yIgorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGVsLmF0dHJpYnV0ZXMpID09IDIKKyAgICAgICAgICAgICAgICBhbmQgZWwuYXR0cmlidXRlc1sic3BhbSJdLnZhbHVlID09ICJoYW0iCisgICAgICAgICAgICAgICAgYW5kIGVsLmF0dHJpYnV0ZXNbInNwYW0iXS5ub2RlVmFsdWUgPT0gImhhbSIKKyAgICAgICAgICAgICAgICBhbmQgZWwuZ2V0QXR0cmlidXRlKCJzcGFtIikgPT0gImhhbSIKKyAgICAgICAgICAgICAgICBhbmQgZWwuYXR0cmlidXRlc1sic3BhbTIiXS52YWx1ZSA9PSAiYmFtMiIKKyAgICAgICAgICAgICAgICBhbmQgZWwuYXR0cmlidXRlc1sic3BhbTIiXS5ub2RlVmFsdWUgPT0gImJhbTIiCisgICAgICAgICAgICAgICAgYW5kIGVsLmdldEF0dHJpYnV0ZSgic3BhbTIiKSA9PSAiYmFtMiIpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3RHZXRBdHRyTGlzdChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RHZXRBdHRyVmFsdWVzKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEdldEF0dHJMZW5ndGgoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0R2V0QXR0cmlidXRlKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEdldEF0dHJpYnV0ZU5TKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEdldEF0dHJpYnV0ZU5vZGUoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0R2V0RWxlbWVudHNCeVRhZ05hbWVOUyhzZWxmKToKKyAgICAgICAgZD0iIiI8Zm9vIHhtbG5zOm1pbmlkb209J2h0dHA6Ly9weXhtbC5zZi5uZXQvbWluaWRvbSc+CisgICAgICAgIDxtaW5pZG9tOm15ZWxlbS8+CisgICAgICAgIDwvZm9vPiIiIgorICAgICAgICBkb20gPSBwYXJzZVN0cmluZyhkKQorICAgICAgICBlbGVtcyA9IGRvbS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCJodHRwOi8vcHl4bWwuc2YubmV0L21pbmlkb20iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJteWVsZW0iKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGVsZW1zKSA9PSAxCisgICAgICAgICAgICAgICAgYW5kIGVsZW1zWzBdLm5hbWVzcGFjZVVSSSA9PSAiaHR0cDovL3B5eG1sLnNmLm5ldC9taW5pZG9tIgorICAgICAgICAgICAgICAgIGFuZCBlbGVtc1swXS5sb2NhbE5hbWUgPT0gIm15ZWxlbSIKKyAgICAgICAgICAgICAgICBhbmQgZWxlbXNbMF0ucHJlZml4ID09ICJtaW5pZG9tIgorICAgICAgICAgICAgICAgIGFuZCBlbGVtc1swXS50YWdOYW1lID09ICJtaW5pZG9tOm15ZWxlbSIKKyAgICAgICAgICAgICAgICBhbmQgZWxlbXNbMF0ubm9kZU5hbWUgPT0gIm1pbmlkb206bXllbGVtIikKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgZ2V0X2VtcHR5X25vZGVsaXN0X2Zyb21fZWxlbWVudHNfYnlfdGFnTmFtZV9uc19oZWxwZXIoc2VsZiwgZG9jLCBuc3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG5hbWUpOgorICAgICAgICBub2RlbGlzdCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKG5zdXJpLCBsbmFtZSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihub2RlbGlzdCkgPT0gMCkKKworICAgIGRlZiB0ZXN0R2V0RW1wdHlOb2RlTGlzdEZyb21FbGVtZW50c0J5VGFnTmFtZU5TKHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygnPGRvYy8+JykKKyAgICAgICAgc2VsZi5nZXRfZW1wdHlfbm9kZWxpc3RfZnJvbV9lbGVtZW50c19ieV90YWdOYW1lX25zX2hlbHBlcigKKyAgICAgICAgICAgIGRvYywgJ2h0dHA6Ly94bWwucHl0aG9uLm9yZy9uYW1lc3BhY2VzL2EnLCAnbG9jYWxuYW1lJykKKyAgICAgICAgc2VsZi5nZXRfZW1wdHlfbm9kZWxpc3RfZnJvbV9lbGVtZW50c19ieV90YWdOYW1lX25zX2hlbHBlcigKKyAgICAgICAgICAgIGRvYywgJyonLCAnc3BsYXQnKQorICAgICAgICBzZWxmLmdldF9lbXB0eV9ub2RlbGlzdF9mcm9tX2VsZW1lbnRzX2J5X3RhZ05hbWVfbnNfaGVscGVyKAorICAgICAgICAgICAgZG9jLCAnaHR0cDovL3htbC5weXRob24ub3JnL25hbWVzcGFjZXMvYScsICcqJykKKworICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygnPGRvYyB4bWxucz0iaHR0cDovL3htbC5weXRob24ub3JnL3NwbGF0Ij48ZS8+PC9kb2M+JykKKyAgICAgICAgc2VsZi5nZXRfZW1wdHlfbm9kZWxpc3RfZnJvbV9lbGVtZW50c19ieV90YWdOYW1lX25zX2hlbHBlcigKKyAgICAgICAgICAgIGRvYywgImh0dHA6Ly94bWwucHl0aG9uLm9yZy9zcGxhdCIsICJub3QtdGhlcmUiKQorICAgICAgICBzZWxmLmdldF9lbXB0eV9ub2RlbGlzdF9mcm9tX2VsZW1lbnRzX2J5X3RhZ05hbWVfbnNfaGVscGVyKAorICAgICAgICAgICAgZG9jLCAiKiIsICJub3QtdGhlcmUiKQorICAgICAgICBzZWxmLmdldF9lbXB0eV9ub2RlbGlzdF9mcm9tX2VsZW1lbnRzX2J5X3RhZ05hbWVfbnNfaGVscGVyKAorICAgICAgICAgICAgZG9jLCAiaHR0cDovL3NvbWV3aGVyZS5lbHNlLm5ldC9ub3QtdGhlcmUiLCAiZSIpCisKKyAgICBkZWYgdGVzdEVsZW1lbnRSZXByQW5kU3RyKHNlbGYpOgorICAgICAgICBkb20gPSBEb2N1bWVudCgpCisgICAgICAgIGVsID0gZG9tLmFwcGVuZENoaWxkKGRvbS5jcmVhdGVFbGVtZW50KCJhYmMiKSkKKyAgICAgICAgc3RyaW5nMSA9IHJlcHIoZWwpCisgICAgICAgIHN0cmluZzIgPSBzdHIoZWwpCisgICAgICAgIHNlbGYuY29uZmlybShzdHJpbmcxID09IHN0cmluZzIpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3RFbGVtZW50UmVwckFuZFN0clVuaWNvZGUoc2VsZik6CisgICAgICAgIGRvbSA9IERvY3VtZW50KCkKKyAgICAgICAgZWwgPSBkb20uYXBwZW5kQ2hpbGQoZG9tLmNyZWF0ZUVsZW1lbnQodSJhYmMiKSkKKyAgICAgICAgc3RyaW5nMSA9IHJlcHIoZWwpCisgICAgICAgIHN0cmluZzIgPSBzdHIoZWwpCisgICAgICAgIHNlbGYuY29uZmlybShzdHJpbmcxID09IHN0cmluZzIpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3RFbGVtZW50UmVwckFuZFN0clVuaWNvZGVOUyhzZWxmKToKKyAgICAgICAgZG9tID0gRG9jdW1lbnQoKQorICAgICAgICBlbCA9IGRvbS5hcHBlbmRDaGlsZCgKKyAgICAgICAgICAgIGRvbS5jcmVhdGVFbGVtZW50TlModSJodHRwOi8vd3d3LnNsYXNoZG90Lm9yZyIsIHUic2xhc2g6YWJjIikpCisgICAgICAgIHN0cmluZzEgPSByZXByKGVsKQorICAgICAgICBzdHJpbmcyID0gc3RyKGVsKQorICAgICAgICBzZWxmLmNvbmZpcm0oc3RyaW5nMSA9PSBzdHJpbmcyKQorICAgICAgICBzZWxmLmNvbmZpcm0oInNsYXNoOmFiYyIgaW4gc3RyaW5nMSkKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdEF0dHJpYnV0ZVJlcHIoc2VsZik6CisgICAgICAgIGRvbSA9IERvY3VtZW50KCkKKyAgICAgICAgZWwgPSBkb20uYXBwZW5kQ2hpbGQoZG9tLmNyZWF0ZUVsZW1lbnQodSJhYmMiKSkKKyAgICAgICAgbm9kZSA9IGVsLnNldEF0dHJpYnV0ZSgiYWJjIiwgImRlZiIpCisgICAgICAgIHNlbGYuY29uZmlybShzdHIobm9kZSkgPT0gcmVwcihub2RlKSkKKyAgICAgICAgZG9tLnVubGluaygpCisKKyAgICBkZWYgdGVzdFRleHROb2RlUmVwcihzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RXcml0ZVhNTChzZWxmKToKKyAgICAgICAgc3RyID0gJzw/eG1sIHZlcnNpb249IjEuMCIgPz48YSBiPSJjIi8+JworICAgICAgICBkb20gPSBwYXJzZVN0cmluZyhzdHIpCisgICAgICAgIGRvbXN0ciA9IGRvbS50b3htbCgpCisgICAgICAgIGRvbS51bmxpbmsoKQorICAgICAgICBzZWxmLmNvbmZpcm0oc3RyID09IGRvbXN0cikKKworICAgIGRlZiB0ZXN0QWx0TmV3bGluZShzZWxmKToKKyAgICAgICAgc3RyID0gJzw/eG1sIHZlcnNpb249IjEuMCIgPz5cbjxhIGI9ImMiLz5cbicKKyAgICAgICAgZG9tID0gcGFyc2VTdHJpbmcoc3RyKQorICAgICAgICBkb21zdHIgPSBkb20udG9wcmV0dHl4bWwobmV3bD0iXHJcbiIpCisgICAgICAgIGRvbS51bmxpbmsoKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9tc3RyID09IHN0ci5yZXBsYWNlKCJcbiIsICJcclxuIikpCisKKyAgICBkZWYgdGVzdF90b3ByZXR0eXhtbF93aXRoX3RleHRfbm9kZXMoc2VsZik6CisgICAgICAgICMgc2VlIGlzc3VlICM0MTQ3LCB0ZXh0IG5vZGVzIGFyZSBub3QgaW5kZW50ZWQKKyAgICAgICAgZGVjbCA9ICc8P3htbCB2ZXJzaW9uPSIxLjAiID8+XG4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VTdHJpbmcoJzxCPkE8L0I+JykudG9wcmV0dHl4bWwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsICsgJzxCPkE8L0I+XG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlU3RyaW5nKCc8Qz5BPEI+QTwvQj48L0M+JykudG9wcmV0dHl4bWwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsICsgJzxDPlxuXHRBXG5cdDxCPkE8L0I+XG48L0M+XG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlU3RyaW5nKCc8Qz48Qj5BPC9CPkE8L0M+JykudG9wcmV0dHl4bWwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsICsgJzxDPlxuXHQ8Qj5BPC9CPlxuXHRBXG48L0M+XG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlU3RyaW5nKCc8Qz48Qj5BPC9CPjxCPkE8L0I+PC9DPicpLnRvcHJldHR5eG1sKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbCArICc8Qz5cblx0PEI+QTwvQj5cblx0PEI+QTwvQj5cbjwvQz5cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VTdHJpbmcoJzxDPjxCPkE8L0I+QTxCPkE8L0I+PC9DPicpLnRvcHJldHR5eG1sKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbCArICc8Qz5cblx0PEI+QTwvQj5cblx0QVxuXHQ8Qj5BPC9CPlxuPC9DPlxuJykKKworICAgIGRlZiB0ZXN0X3RvcHJldHR5eG1sX3dpdGhfYWRqYWNlbnRfdGV4dF9ub2RlcyhzZWxmKToKKyAgICAgICAgIyBzZWUgaXNzdWUgIzQxNDcsIGFkamFjZW50IHRleHQgbm9kZXMgYXJlIGluZGVudGVkIG5vcm1hbGx5CisgICAgICAgIGRvbSA9IERvY3VtZW50KCkKKyAgICAgICAgZWxlbSA9IGRvbS5jcmVhdGVFbGVtZW50KHUnZWxlbScpCisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZG9tLmNyZWF0ZVRleHROb2RlKHUnVEVYVCcpKQorICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvbS5jcmVhdGVUZXh0Tm9kZSh1J1RFWFQnKSkKKyAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsZW0pCisgICAgICAgIGRlY2wgPSAnPD94bWwgdmVyc2lvbj0iMS4wIiA/PlxuJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbS50b3ByZXR0eXhtbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2wgKyAnPGVsZW0+XG5cdFRFWFRcblx0VEVYVFxuPC9lbGVtPlxuJykKKworICAgIGRlZiB0ZXN0X3RvcHJldHR5eG1sX3ByZXNlcnZlc19jb250ZW50X29mX3RleHRfbm9kZShzZWxmKToKKyAgICAgICAgIyBzZWUgaXNzdWUgIzQxNDcKKyAgICAgICAgZm9yIHN0ciBpbiAoJzxCPkE8L0I+JywgJzxBPjxCPkM8L0I+PC9BPicpOgorICAgICAgICAgICAgZG9tID0gcGFyc2VTdHJpbmcoc3RyKQorICAgICAgICAgICAgZG9tMiA9IHBhcnNlU3RyaW5nKGRvbS50b3ByZXR0eXhtbCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBkb20uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ0InKVswXS5jaGlsZE5vZGVzWzBdLnRveG1sKCksCisgICAgICAgICAgICAgICAgZG9tMi5nZXRFbGVtZW50c0J5VGFnTmFtZSgnQicpWzBdLmNoaWxkTm9kZXNbMF0udG94bWwoKSkKKworICAgIGRlZiB0ZXN0UHJvY2Vzc2luZ0luc3RydWN0aW9uKHNlbGYpOgorICAgICAgICBkb20gPSBwYXJzZVN0cmluZygnPGU+PD9teXBpIFx0XG4gZGF0YSBcdFxuID8+PC9lPicpCisgICAgICAgIHBpID0gZG9tLmRvY3VtZW50RWxlbWVudC5maXJzdENoaWxkCisgICAgICAgIHNlbGYuY29uZmlybShwaS50YXJnZXQgPT0gIm15cGkiCisgICAgICAgICAgICAgICAgYW5kIHBpLmRhdGEgPT0gImRhdGEgXHRcbiAiCisgICAgICAgICAgICAgICAgYW5kIHBpLm5vZGVOYW1lID09ICJteXBpIgorICAgICAgICAgICAgICAgIGFuZCBwaS5ub2RlVHlwZSA9PSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERQorICAgICAgICAgICAgICAgIGFuZCBwaS5hdHRyaWJ1dGVzIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgbm90IHBpLmhhc0NoaWxkTm9kZXMoKQorICAgICAgICAgICAgICAgIGFuZCBsZW4ocGkuY2hpbGROb2RlcykgPT0gMAorICAgICAgICAgICAgICAgIGFuZCBwaS5maXJzdENoaWxkIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcGkubGFzdENoaWxkIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcGkubG9jYWxOYW1lIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcGkubmFtZXNwYWNlVVJJID09IHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFKQorCisgICAgZGVmIHRlc3RQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25SZXByKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFRleHRSZXByKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFdyaXRlVGV4dChzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3REb2N1bWVudEVsZW1lbnQoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0VG9vTWFueURvY3VtZW50RWxlbWVudHMoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jLz4iKQorICAgICAgICBlbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoImV4dHJhIikKKyAgICAgICAgIyBTaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gYWRkaW5nIGFuIGV4dHJhIGRvY3VtZW50IGVsZW1lbnQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhtbC5kb20uSGllcmFyY2h5UmVxdWVzdEVyciwgZG9jLmFwcGVuZENoaWxkLCBlbGVtKQorICAgICAgICBlbGVtLnVubGluaygpCisgICAgICAgIGRvYy51bmxpbmsoKQorCisgICAgZGVmIHRlc3RDcmVhdGVFbGVtZW50TlMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0Q3JlYXRlQXR0cmlidXRlTlMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UGFyc2Uoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UGFyc2VTdHJpbmcoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0Q29tbWVudChzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdEl0ZW0oc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RJdGVtcyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdEl0ZW1OUyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdEtleXMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RLZXlzTlMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UmVtb3ZlTmFtZWRJdGVtKHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYyBhPScnLz4iKQorICAgICAgICBlID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICBhdHRycyA9IGUuYXR0cmlidXRlcworICAgICAgICBhMSA9IGUuZ2V0QXR0cmlidXRlTm9kZSgiYSIpCisgICAgICAgIGEyID0gYXR0cnMucmVtb3ZlTmFtZWRJdGVtKCJhIikKKyAgICAgICAgc2VsZi5jb25maXJtKGExLmlzU2FtZU5vZGUoYTIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWwuZG9tLk5vdEZvdW5kRXJyLCBhdHRycy5yZW1vdmVOYW1lZEl0ZW0sICJhIikKKworICAgIGRlZiB0ZXN0UmVtb3ZlTmFtZWRJdGVtTlMoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jIHhtbG5zOmE9J2h0dHA6Ly94bWwucHl0aG9uLm9yZy8nIGE6Yj0nJy8+IikKKyAgICAgICAgZSA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgYXR0cnMgPSBlLmF0dHJpYnV0ZXMKKyAgICAgICAgYTEgPSBlLmdldEF0dHJpYnV0ZU5vZGVOUygiaHR0cDovL3htbC5weXRob24ub3JnLyIsICJiIikKKyAgICAgICAgYTIgPSBhdHRycy5yZW1vdmVOYW1lZEl0ZW1OUygiaHR0cDovL3htbC5weXRob24ub3JnLyIsICJiIikKKyAgICAgICAgc2VsZi5jb25maXJtKGExLmlzU2FtZU5vZGUoYTIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWwuZG9tLk5vdEZvdW5kRXJyLCBhdHRycy5yZW1vdmVOYW1lZEl0ZW1OUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly94bWwucHl0aG9uLm9yZy8iLCAiYiIpCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0VmFsdWVzKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0TGVuZ3RoKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0X19nZXRpdGVtX18oc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RfX3NldGl0ZW1fXyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RTZXRBdHRyVmFsdWVhbmROb2RlVmFsdWUoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UGFyc2VFbGVtZW50KHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFBhcnNlQXR0cmlidXRlcyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RQYXJzZUVsZW1lbnROYW1lc3BhY2VzKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFBhcnNlQXR0cmlidXRlTmFtZXNwYWNlcyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RQYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbnMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0Q2hpbGROb2RlcyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RGaXJzdENoaWxkKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEhhc0NoaWxkTm9kZXMoc2VsZik6IHBhc3MKKworICAgIGRlZiBfdGVzdENsb25lRWxlbWVudENvcGllc0F0dHJpYnV0ZXMoc2VsZiwgZTEsIGUyLCB0ZXN0KToKKyAgICAgICAgYXR0cnMxID0gZTEuYXR0cmlidXRlcworICAgICAgICBhdHRyczIgPSBlMi5hdHRyaWJ1dGVzCisgICAgICAgIGtleXMxID0gYXR0cnMxLmtleXMoKQorICAgICAgICBrZXlzMiA9IGF0dHJzMi5rZXlzKCkKKyAgICAgICAga2V5czEuc29ydCgpCisgICAgICAgIGtleXMyLnNvcnQoKQorICAgICAgICBzZWxmLmNvbmZpcm0oa2V5czEgPT0ga2V5czIsICJjbG9uZSBvZiBlbGVtZW50IGhhcyBzYW1lIGF0dHJpYnV0ZSBrZXlzIikKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGtleXMxKSk6CisgICAgICAgICAgICBhMSA9IGF0dHJzMS5pdGVtKGkpCisgICAgICAgICAgICBhMiA9IGF0dHJzMi5pdGVtKGkpCisgICAgICAgICAgICBzZWxmLmNvbmZpcm0oYTEgaXMgbm90IGEyCisgICAgICAgICAgICAgICAgICAgIGFuZCBhMS52YWx1ZSA9PSBhMi52YWx1ZQorICAgICAgICAgICAgICAgICAgICBhbmQgYTEubm9kZVZhbHVlID09IGEyLm5vZGVWYWx1ZQorICAgICAgICAgICAgICAgICAgICBhbmQgYTEubmFtZXNwYWNlVVJJID09IGEyLm5hbWVzcGFjZVVSSQorICAgICAgICAgICAgICAgICAgICBhbmQgYTEubG9jYWxOYW1lID09IGEyLmxvY2FsTmFtZQorICAgICAgICAgICAgICAgICAgICAsICJjbG9uZSBvZiBhdHRyaWJ1dGUgbm9kZSBoYXMgcHJvcGVyIGF0dHJpYnV0ZSB2YWx1ZXMiKQorICAgICAgICAgICAgc2VsZi5jb25maXJtKGEyLm93bmVyRWxlbWVudCBpcyBlMiwKKyAgICAgICAgICAgICAgICAgICAgImNsb25lIG9mIGF0dHJpYnV0ZSBub2RlIGNvcnJlY3RseSBvd25lZCIpCisKKyAgICBkZWYgX3NldHVwQ2xvbmVFbGVtZW50KHNlbGYsIGRlZXApOgorICAgICAgICBkb20gPSBwYXJzZVN0cmluZygiPGRvYyBhdHRyPSd2YWx1ZSc+PGZvby8+PC9kb2M+IikKKyAgICAgICAgcm9vdCA9IGRvbS5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgY2xvbmUgPSByb290LmNsb25lTm9kZShkZWVwKQorICAgICAgICBzZWxmLl90ZXN0Q2xvbmVFbGVtZW50Q29waWVzQXR0cmlidXRlcygKKyAgICAgICAgICAgIHJvb3QsIGNsb25lLCAidGVzdENsb25lRWxlbWVudCIgKyAoZGVlcCBhbmQgIkRlZXAiIG9yICJTaGFsbG93IikpCisgICAgICAgICMgbXV0aWxhdGUgdGhlIG9yaWdpbmFsIHNvIHNoYXJlZCBkYXRhIGlzIGRldGVjdGVkCisgICAgICAgIHJvb3QudGFnTmFtZSA9IHJvb3Qubm9kZU5hbWUgPSAiTU9ESUZJRUQiCisgICAgICAgIHJvb3Quc2V0QXR0cmlidXRlKCJhdHRyIiwgIk5FVyBWQUxVRSIpCisgICAgICAgIHJvb3Quc2V0QXR0cmlidXRlKCJhZGRlZCIsICJWQUxVRSIpCisgICAgICAgIHJldHVybiBkb20sIGNsb25lCisKKyAgICBkZWYgdGVzdENsb25lRWxlbWVudFNoYWxsb3coc2VsZik6CisgICAgICAgIGRvbSwgY2xvbmUgPSBzZWxmLl9zZXR1cENsb25lRWxlbWVudCgwKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGNsb25lLmNoaWxkTm9kZXMpID09IDAKKyAgICAgICAgICAgICAgICBhbmQgY2xvbmUuY2hpbGROb2Rlcy5sZW5ndGggPT0gMAorICAgICAgICAgICAgICAgIGFuZCBjbG9uZS5wYXJlbnROb2RlIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgY2xvbmUudG94bWwoKSA9PSAnPGRvYyBhdHRyPSJ2YWx1ZSIvPicKKyAgICAgICAgICAgICAgICAsICJ0ZXN0Q2xvbmVFbGVtZW50U2hhbGxvdyIpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3RDbG9uZUVsZW1lbnREZWVwKHNlbGYpOgorICAgICAgICBkb20sIGNsb25lID0gc2VsZi5fc2V0dXBDbG9uZUVsZW1lbnQoMSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihjbG9uZS5jaGlsZE5vZGVzKSA9PSAxCisgICAgICAgICAgICAgICAgYW5kIGNsb25lLmNoaWxkTm9kZXMubGVuZ3RoID09IDEKKyAgICAgICAgICAgICAgICBhbmQgY2xvbmUucGFyZW50Tm9kZSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGNsb25lLnRveG1sKCkgPT0gJzxkb2MgYXR0cj0idmFsdWUiPjxmb28vPjwvZG9jPicKKyAgICAgICAgICAgICAgICAsICJ0ZXN0Q2xvbmVFbGVtZW50RGVlcCIpCisgICAgICAgIGRvbS51bmxpbmsoKQorCisgICAgZGVmIHRlc3RDbG9uZURvY3VtZW50U2hhbGxvdyhzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjw/eG1sIHZlcnNpb249JzEuMCc/PlxuIgorICAgICAgICAgICAgICAgICAgICAiPCEtLSBjb21tZW50IC0tPiIKKyAgICAgICAgICAgICAgICAgICAgIjwhRE9DVFlQRSBkb2MgW1xuIgorICAgICAgICAgICAgICAgICAgICAiPCFOT1RBVElPTiBub3RhdGlvbiBTWVNURU0gJ2h0dHA6Ly94bWwucHl0aG9uLm9yZy8nPlxuIgorICAgICAgICAgICAgICAgICAgICAiXT5cbiIKKyAgICAgICAgICAgICAgICAgICAgIjxkb2MgYXR0cj0ndmFsdWUnLz4iKQorICAgICAgICBkb2MyID0gZG9jLmNsb25lTm9kZSgwKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9jMiBpcyBOb25lLAorICAgICAgICAgICAgICAgICJ0ZXN0Q2xvbmVEb2N1bWVudFNoYWxsb3c6IgorICAgICAgICAgICAgICAgICIgc2hhbGxvdyBjbG9uaW5nIG9mIGRvY3VtZW50cyBtYWtlcyBubyBzZW5zZSEiKQorCisgICAgZGVmIHRlc3RDbG9uZURvY3VtZW50RGVlcChzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjw/eG1sIHZlcnNpb249JzEuMCc/PlxuIgorICAgICAgICAgICAgICAgICAgICAiPCEtLSBjb21tZW50IC0tPiIKKyAgICAgICAgICAgICAgICAgICAgIjwhRE9DVFlQRSBkb2MgW1xuIgorICAgICAgICAgICAgICAgICAgICAiPCFOT1RBVElPTiBub3RhdGlvbiBTWVNURU0gJ2h0dHA6Ly94bWwucHl0aG9uLm9yZy8nPlxuIgorICAgICAgICAgICAgICAgICAgICAiXT5cbiIKKyAgICAgICAgICAgICAgICAgICAgIjxkb2MgYXR0cj0ndmFsdWUnLz4iKQorICAgICAgICBkb2MyID0gZG9jLmNsb25lTm9kZSgxKQorICAgICAgICBzZWxmLmNvbmZpcm0obm90IChkb2MuaXNTYW1lTm9kZShkb2MyKSBvciBkb2MyLmlzU2FtZU5vZGUoZG9jKSksCisgICAgICAgICAgICAgICAgInRlc3RDbG9uZURvY3VtZW50RGVlcDogZG9jdW1lbnQgb2JqZWN0cyBub3QgZGlzdGluY3QiKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKGRvYy5jaGlsZE5vZGVzKSA9PSBsZW4oZG9jMi5jaGlsZE5vZGVzKSwKKyAgICAgICAgICAgICAgICAidGVzdENsb25lRG9jdW1lbnREZWVwOiB3cm9uZyBudW1iZXIgb2YgRG9jdW1lbnQgY2hpbGRyZW4iKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9jMi5kb2N1bWVudEVsZW1lbnQubm9kZVR5cGUgPT0gTm9kZS5FTEVNRU5UX05PREUsCisgICAgICAgICAgICAgICAgInRlc3RDbG9uZURvY3VtZW50RGVlcDogZG9jdW1lbnRFbGVtZW50IG5vdCBhbiBFTEVNRU5UX05PREUiKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9jMi5kb2N1bWVudEVsZW1lbnQub3duZXJEb2N1bWVudC5pc1NhbWVOb2RlKGRvYzIpLAorICAgICAgICAgICAgInRlc3RDbG9uZURvY3VtZW50RGVlcDogZG9jdW1lbnRFbGVtZW50IG93bmVyIGlzIG5vdCBuZXcgZG9jdW1lbnQiKQorICAgICAgICBzZWxmLmNvbmZpcm0obm90IGRvYy5kb2N1bWVudEVsZW1lbnQuaXNTYW1lTm9kZShkb2MyLmRvY3VtZW50RWxlbWVudCksCisgICAgICAgICAgICAgICAgInRlc3RDbG9uZURvY3VtZW50RGVlcDogZG9jdW1lbnRFbGVtZW50IHNob3VsZCBub3QgYmUgc2hhcmVkIikKKyAgICAgICAgaWYgZG9jLmRvY3R5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIGNoZWNrIHRoZSBkb2N0eXBlIGlmZiB0aGUgb3JpZ2luYWwgRE9NIG1haW50YWluZWQgaXQKKyAgICAgICAgICAgIHNlbGYuY29uZmlybShkb2MyLmRvY3R5cGUubm9kZVR5cGUgPT0gTm9kZS5ET0NVTUVOVF9UWVBFX05PREUsCisgICAgICAgICAgICAgICAgICAgICJ0ZXN0Q2xvbmVEb2N1bWVudERlZXA6IGRvY3R5cGUgbm90IGEgRE9DVU1FTlRfVFlQRV9OT0RFIikKKyAgICAgICAgICAgIHNlbGYuY29uZmlybShkb2MyLmRvY3R5cGUub3duZXJEb2N1bWVudC5pc1NhbWVOb2RlKGRvYzIpKQorICAgICAgICAgICAgc2VsZi5jb25maXJtKG5vdCBkb2MuZG9jdHlwZS5pc1NhbWVOb2RlKGRvYzIuZG9jdHlwZSkpCisKKyAgICBkZWYgdGVzdENsb25lRG9jdW1lbnRUeXBlRGVlcE9rKHNlbGYpOgorICAgICAgICBkb2N0eXBlID0gY3JlYXRlX25vbmVtcHR5X2RvY3R5cGUoKQorICAgICAgICBjbG9uZSA9IGRvY3R5cGUuY2xvbmVOb2RlKDEpCisgICAgICAgIHNlbGYuY29uZmlybShjbG9uZSBpcyBub3QgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBjbG9uZS5ub2RlTmFtZSA9PSBkb2N0eXBlLm5vZGVOYW1lCisgICAgICAgICAgICAgICAgYW5kIGNsb25lLm5hbWUgPT0gZG9jdHlwZS5uYW1lCisgICAgICAgICAgICAgICAgYW5kIGNsb25lLnB1YmxpY0lkID09IGRvY3R5cGUucHVibGljSWQKKyAgICAgICAgICAgICAgICBhbmQgY2xvbmUuc3lzdGVtSWQgPT0gZG9jdHlwZS5zeXN0ZW1JZAorICAgICAgICAgICAgICAgIGFuZCBsZW4oY2xvbmUuZW50aXRpZXMpID09IGxlbihkb2N0eXBlLmVudGl0aWVzKQorICAgICAgICAgICAgICAgIGFuZCBjbG9uZS5lbnRpdGllcy5pdGVtKGxlbihjbG9uZS5lbnRpdGllcykpIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgbGVuKGNsb25lLm5vdGF0aW9ucykgPT0gbGVuKGRvY3R5cGUubm90YXRpb25zKQorICAgICAgICAgICAgICAgIGFuZCBjbG9uZS5ub3RhdGlvbnMuaXRlbShsZW4oY2xvbmUubm90YXRpb25zKSkgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBsZW4oY2xvbmUuY2hpbGROb2RlcykgPT0gMCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGRvY3R5cGUuZW50aXRpZXMpKToKKyAgICAgICAgICAgIHNlID0gZG9jdHlwZS5lbnRpdGllcy5pdGVtKGkpCisgICAgICAgICAgICBjZSA9IGNsb25lLmVudGl0aWVzLml0ZW0oaSkKKyAgICAgICAgICAgIHNlbGYuY29uZmlybSgobm90IHNlLmlzU2FtZU5vZGUoY2UpKQorICAgICAgICAgICAgICAgICAgICBhbmQgKG5vdCBjZS5pc1NhbWVOb2RlKHNlKSkKKyAgICAgICAgICAgICAgICAgICAgYW5kIGNlLm5vZGVOYW1lID09IHNlLm5vZGVOYW1lCisgICAgICAgICAgICAgICAgICAgIGFuZCBjZS5ub3RhdGlvbk5hbWUgPT0gc2Uubm90YXRpb25OYW1lCisgICAgICAgICAgICAgICAgICAgIGFuZCBjZS5wdWJsaWNJZCA9PSBzZS5wdWJsaWNJZAorICAgICAgICAgICAgICAgICAgICBhbmQgY2Uuc3lzdGVtSWQgPT0gc2Uuc3lzdGVtSWQKKyAgICAgICAgICAgICAgICAgICAgYW5kIGNlLmVuY29kaW5nID09IHNlLmVuY29kaW5nCisgICAgICAgICAgICAgICAgICAgIGFuZCBjZS5hY3R1YWxFbmNvZGluZyA9PSBzZS5hY3R1YWxFbmNvZGluZworICAgICAgICAgICAgICAgICAgICBhbmQgY2UudmVyc2lvbiA9PSBzZS52ZXJzaW9uKQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oZG9jdHlwZS5ub3RhdGlvbnMpKToKKyAgICAgICAgICAgIHNuID0gZG9jdHlwZS5ub3RhdGlvbnMuaXRlbShpKQorICAgICAgICAgICAgY24gPSBjbG9uZS5ub3RhdGlvbnMuaXRlbShpKQorICAgICAgICAgICAgc2VsZi5jb25maXJtKChub3Qgc24uaXNTYW1lTm9kZShjbikpCisgICAgICAgICAgICAgICAgICAgIGFuZCAobm90IGNuLmlzU2FtZU5vZGUoc24pKQorICAgICAgICAgICAgICAgICAgICBhbmQgY24ubm9kZU5hbWUgPT0gc24ubm9kZU5hbWUKKyAgICAgICAgICAgICAgICAgICAgYW5kIGNuLnB1YmxpY0lkID09IHNuLnB1YmxpY0lkCisgICAgICAgICAgICAgICAgICAgIGFuZCBjbi5zeXN0ZW1JZCA9PSBzbi5zeXN0ZW1JZCkKKworICAgIGRlZiB0ZXN0Q2xvbmVEb2N1bWVudFR5cGVEZWVwTm90T2soc2VsZik6CisgICAgICAgIGRvYyA9IGNyZWF0ZV9kb2Nfd2l0aF9kb2N0eXBlKCkKKyAgICAgICAgY2xvbmUgPSBkb2MuZG9jdHlwZS5jbG9uZU5vZGUoMSkKKyAgICAgICAgc2VsZi5jb25maXJtKGNsb25lIGlzIE5vbmUsICJ0ZXN0Q2xvbmVEb2N1bWVudFR5cGVEZWVwTm90T2siKQorCisgICAgZGVmIHRlc3RDbG9uZURvY3VtZW50VHlwZVNoYWxsb3dPayhzZWxmKToKKyAgICAgICAgZG9jdHlwZSA9IGNyZWF0ZV9ub25lbXB0eV9kb2N0eXBlKCkKKyAgICAgICAgY2xvbmUgPSBkb2N0eXBlLmNsb25lTm9kZSgwKQorICAgICAgICBzZWxmLmNvbmZpcm0oY2xvbmUgaXMgbm90IE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgY2xvbmUubm9kZU5hbWUgPT0gZG9jdHlwZS5ub2RlTmFtZQorICAgICAgICAgICAgICAgIGFuZCBjbG9uZS5uYW1lID09IGRvY3R5cGUubmFtZQorICAgICAgICAgICAgICAgIGFuZCBjbG9uZS5wdWJsaWNJZCA9PSBkb2N0eXBlLnB1YmxpY0lkCisgICAgICAgICAgICAgICAgYW5kIGNsb25lLnN5c3RlbUlkID09IGRvY3R5cGUuc3lzdGVtSWQKKyAgICAgICAgICAgICAgICBhbmQgbGVuKGNsb25lLmVudGl0aWVzKSA9PSAwCisgICAgICAgICAgICAgICAgYW5kIGNsb25lLmVudGl0aWVzLml0ZW0oMCkgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBsZW4oY2xvbmUubm90YXRpb25zKSA9PSAwCisgICAgICAgICAgICAgICAgYW5kIGNsb25lLm5vdGF0aW9ucy5pdGVtKDApIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgbGVuKGNsb25lLmNoaWxkTm9kZXMpID09IDApCisKKyAgICBkZWYgdGVzdENsb25lRG9jdW1lbnRUeXBlU2hhbGxvd05vdE9rKHNlbGYpOgorICAgICAgICBkb2MgPSBjcmVhdGVfZG9jX3dpdGhfZG9jdHlwZSgpCisgICAgICAgIGNsb25lID0gZG9jLmRvY3R5cGUuY2xvbmVOb2RlKDApCisgICAgICAgIHNlbGYuY29uZmlybShjbG9uZSBpcyBOb25lLCAidGVzdENsb25lRG9jdW1lbnRUeXBlU2hhbGxvd05vdE9rIikKKworICAgIGRlZiBjaGVja19pbXBvcnRfZG9jdW1lbnQoc2VsZiwgZGVlcCwgdGVzdE5hbWUpOgorICAgICAgICBkb2MxID0gcGFyc2VTdHJpbmcoIjxkb2MvPiIpCisgICAgICAgIGRvYzIgPSBwYXJzZVN0cmluZygiPGRvYy8+IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1sLmRvbS5Ob3RTdXBwb3J0ZWRFcnIsIGRvYzEuaW1wb3J0Tm9kZSwgZG9jMiwgZGVlcCkKKworICAgIGRlZiB0ZXN0SW1wb3J0RG9jdW1lbnRTaGFsbG93KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ltcG9ydF9kb2N1bWVudCgwLCAidGVzdEltcG9ydERvY3VtZW50U2hhbGxvdyIpCisKKyAgICBkZWYgdGVzdEltcG9ydERvY3VtZW50RGVlcChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pbXBvcnRfZG9jdW1lbnQoMSwgInRlc3RJbXBvcnREb2N1bWVudERlZXAiKQorCisgICAgZGVmIHRlc3RJbXBvcnREb2N1bWVudFR5cGVTaGFsbG93KHNlbGYpOgorICAgICAgICBzcmMgPSBjcmVhdGVfZG9jX3dpdGhfZG9jdHlwZSgpCisgICAgICAgIHRhcmdldCA9IGNyZWF0ZV9kb2Nfd2l0aG91dF9kb2N0eXBlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1sLmRvbS5Ob3RTdXBwb3J0ZWRFcnIsIHRhcmdldC5pbXBvcnROb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMuZG9jdHlwZSwgMCkKKworICAgIGRlZiB0ZXN0SW1wb3J0RG9jdW1lbnRUeXBlRGVlcChzZWxmKToKKyAgICAgICAgc3JjID0gY3JlYXRlX2RvY193aXRoX2RvY3R5cGUoKQorICAgICAgICB0YXJnZXQgPSBjcmVhdGVfZG9jX3dpdGhvdXRfZG9jdHlwZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhtbC5kb20uTm90U3VwcG9ydGVkRXJyLCB0YXJnZXQuaW1wb3J0Tm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLmRvY3R5cGUsIDEpCisKKyAgICAjIFRlc3RpbmcgYXR0cmlidXRlIGNsb25lcyB1c2VzIGEgaGVscGVyLCBhbmQgc2hvdWxkIGFsd2F5cyBiZSBkZWVwLAorICAgICMgZXZlbiBpZiB0aGUgYXJndW1lbnQgdG8gY2xvbmVOb2RlIGlzIGZhbHNlLgorICAgIGRlZiBjaGVja19jbG9uZV9hdHRyaWJ1dGUoc2VsZiwgZGVlcCwgdGVzdE5hbWUpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYyBhdHRyPSd2YWx1ZScvPiIpCisgICAgICAgIGF0dHIgPSBkb2MuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoImF0dHIiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGF0dHIsIE5vbmUpCisgICAgICAgIGNsb25lID0gYXR0ci5jbG9uZU5vZGUoZGVlcCkKKyAgICAgICAgc2VsZi5jb25maXJtKG5vdCBjbG9uZS5pc1NhbWVOb2RlKGF0dHIpKQorICAgICAgICBzZWxmLmNvbmZpcm0obm90IGF0dHIuaXNTYW1lTm9kZShjbG9uZSkpCisgICAgICAgIHNlbGYuY29uZmlybShjbG9uZS5vd25lckVsZW1lbnQgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICB0ZXN0TmFtZSArICI6IG93bmVyRWxlbWVudCBzaG91bGQgYmUgTm9uZSIpCisgICAgICAgIHNlbGYuY29uZmlybShjbG9uZS5vd25lckRvY3VtZW50LmlzU2FtZU5vZGUoYXR0ci5vd25lckRvY3VtZW50KSwKKyAgICAgICAgICAgICAgICB0ZXN0TmFtZSArICI6IG93bmVyRG9jdW1lbnQgZG9lcyBub3QgbWF0Y2giKQorICAgICAgICBzZWxmLmNvbmZpcm0oY2xvbmUuc3BlY2lmaWVkLAorICAgICAgICAgICAgICAgIHRlc3ROYW1lICsgIjogY2xvbmVkIGF0dHJpYnV0ZSBtdXN0IGhhdmUgc3BlY2lmaWVkID09IFRydWUiKQorCisgICAgZGVmIHRlc3RDbG9uZUF0dHJpYnV0ZVNoYWxsb3coc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY2xvbmVfYXR0cmlidXRlKDAsICJ0ZXN0Q2xvbmVBdHRyaWJ1dGVTaGFsbG93IikKKworICAgIGRlZiB0ZXN0Q2xvbmVBdHRyaWJ1dGVEZWVwKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Nsb25lX2F0dHJpYnV0ZSgxLCAidGVzdENsb25lQXR0cmlidXRlRGVlcCIpCisKKyAgICBkZWYgY2hlY2tfY2xvbmVfcGkoc2VsZiwgZGVlcCwgdGVzdE5hbWUpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPD90YXJnZXQgZGF0YT8+PGRvYy8+IikKKyAgICAgICAgcGkgPSBkb2MuZmlyc3RDaGlsZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpLm5vZGVUeXBlLCBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkKKyAgICAgICAgY2xvbmUgPSBwaS5jbG9uZU5vZGUoZGVlcCkKKyAgICAgICAgc2VsZi5jb25maXJtKGNsb25lLnRhcmdldCA9PSBwaS50YXJnZXQKKyAgICAgICAgICAgICAgICBhbmQgY2xvbmUuZGF0YSA9PSBwaS5kYXRhKQorCisgICAgZGVmIHRlc3RDbG9uZVBJU2hhbGxvdyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jbG9uZV9waSgwLCAidGVzdENsb25lUElTaGFsbG93IikKKworICAgIGRlZiB0ZXN0Q2xvbmVQSURlZXAoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY2xvbmVfcGkoMSwgInRlc3RDbG9uZVBJRGVlcCIpCisKKyAgICBkZWYgdGVzdE5vcm1hbGl6ZShzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MvPiIpCisgICAgICAgIHJvb3QgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJmaXJzdCIpKQorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgic2Vjb25kIikpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAyCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMiwKKyAgICAgICAgICAgICAgICAidGVzdE5vcm1hbGl6ZSAtLSBwcmVwYXJhdGlvbiIpCisgICAgICAgIGRvYy5ub3JtYWxpemUoKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDEKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkIGlzIHJvb3QubGFzdENoaWxkCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5kYXRhID09ICJmaXJzdHNlY29uZCIKKyAgICAgICAgICAgICAgICAsICJ0ZXN0Tm9ybWFsaXplIC0tIHJlc3VsdCIpCisgICAgICAgIGRvYy51bmxpbmsoKQorCisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jLz4iKQorICAgICAgICByb290ID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiIikpCisgICAgICAgIGRvYy5ub3JtYWxpemUoKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMAorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDAsCisgICAgICAgICAgICAgICAgInRlc3ROb3JtYWxpemUgLS0gc2luZ2xlIGVtcHR5IG5vZGUgcmVtb3ZlZCIpCisgICAgICAgIGRvYy51bmxpbmsoKQorCisgICAgZGVmIHRlc3ROb3JtYWxpemVDb21iaW5lQW5kTmV4dFNpYmxpbmcoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jLz4iKQorICAgICAgICByb290ID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiZmlyc3QiKSkKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoInNlY29uZCIpKQorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVFbGVtZW50KCJpIikpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAzCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMywKKyAgICAgICAgICAgICAgICAidGVzdE5vcm1hbGl6ZUNvbWJpbmVBbmROZXh0U2libGluZyAtLSBwcmVwYXJhdGlvbiIpCisgICAgICAgIGRvYy5ub3JtYWxpemUoKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMgorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLmRhdGEgPT0gImZpcnN0c2Vjb25kIgorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQgaXMgbm90IHJvb3QubGFzdENoaWxkCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5uZXh0U2libGluZyBpcyByb290Lmxhc3RDaGlsZAorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQucHJldmlvdXNTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5sYXN0Q2hpbGQucHJldmlvdXNTaWJsaW5nIGlzIHJvb3QuZmlyc3RDaGlsZAorICAgICAgICAgICAgICAgIGFuZCByb290Lmxhc3RDaGlsZC5uZXh0U2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgLCAidGVzdE5vcm1hbGl6ZUNvbWJpbmVkQW5kTmV4dFNpYmxpbmcgLS0gcmVzdWx0IikKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICBkZWYgdGVzdE5vcm1hbGl6ZURlbGV0ZVdpdGhQcmV2U2libGluZyhzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MvPiIpCisgICAgICAgIHJvb3QgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJmaXJzdCIpKQorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiIikpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAyCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMiwKKyAgICAgICAgICAgICAgICAidGVzdE5vcm1hbGl6ZURlbGV0ZVdpdGhQcmV2U2libGluZyAtLSBwcmVwYXJhdGlvbiIpCisgICAgICAgIGRvYy5ub3JtYWxpemUoKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDEKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLmRhdGEgPT0gImZpcnN0IgorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQgaXMgcm9vdC5sYXN0Q2hpbGQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLm5leHRTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLnByZXZpb3VzU2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgLCAidGVzdE5vcm1hbGl6ZURlbGV0ZVdpdGhQcmV2U2libGluZyAtLSByZXN1bHQiKQorICAgICAgICBkb2MudW5saW5rKCkKKworICAgIGRlZiB0ZXN0Tm9ybWFsaXplRGVsZXRlV2l0aE5leHRTaWJsaW5nKHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYy8+IikKKyAgICAgICAgcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIiIpKQorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgic2Vjb25kIikpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAyCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMiwKKyAgICAgICAgICAgICAgICAidGVzdE5vcm1hbGl6ZURlbGV0ZVdpdGhOZXh0U2libGluZyAtLSBwcmVwYXJhdGlvbiIpCisgICAgICAgIGRvYy5ub3JtYWxpemUoKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDEKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLmRhdGEgPT0gInNlY29uZCIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkIGlzIHJvb3QubGFzdENoaWxkCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5uZXh0U2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5wcmV2aW91c1NpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgICwgInRlc3ROb3JtYWxpemVEZWxldGVXaXRoTmV4dFNpYmxpbmcgLS0gcmVzdWx0IikKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICBkZWYgdGVzdE5vcm1hbGl6ZURlbGV0ZVdpdGhUd29Ob25UZXh0U2libGluZ3Moc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jLz4iKQorICAgICAgICByb290ID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVFbGVtZW50KCJpIikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCIiKSkKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlRWxlbWVudCgiaSIpKQorICAgICAgICBzZWxmLmNvbmZpcm0obGVuKHJvb3QuY2hpbGROb2RlcykgPT0gMworICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXMubGVuZ3RoID09IDMsCisgICAgICAgICAgICAgICAgInRlc3ROb3JtYWxpemVEZWxldGVXaXRoVHdvU2libGluZ3MgLS0gcHJlcGFyYXRpb24iKQorICAgICAgICBkb2Mubm9ybWFsaXplKCkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAyCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZCBpcyBub3Qgcm9vdC5sYXN0Q2hpbGQKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLm5leHRTaWJsaW5nIGlzIHJvb3QubGFzdENoaWxkCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZC5wcmV2aW91c1NpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCByb290Lmxhc3RDaGlsZC5wcmV2aW91c1NpYmxpbmcgaXMgcm9vdC5maXJzdENoaWxkCisgICAgICAgICAgICAgICAgYW5kIHJvb3QubGFzdENoaWxkLm5leHRTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICAsICJ0ZXN0Tm9ybWFsaXplRGVsZXRlV2l0aFR3b1NpYmxpbmdzIC0tIHJlc3VsdCIpCisgICAgICAgIGRvYy51bmxpbmsoKQorCisgICAgZGVmIHRlc3ROb3JtYWxpemVEZWxldGVBbmRDb21iaW5lKHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYy8+IikKKyAgICAgICAgcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIiIpKQorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgic2Vjb25kIikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCIiKSkKKyAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoImZvdXJ0aCIpKQorICAgICAgICByb290LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgiIikpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSA1CisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gNSwKKyAgICAgICAgICAgICAgICAidGVzdE5vcm1hbGl6ZURlbGV0ZUFuZENvbWJpbmUgLS0gcHJlcGFyYXRpb24iKQorICAgICAgICBkb2Mubm9ybWFsaXplKCkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDEKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuZmlyc3RDaGlsZCBpcyByb290Lmxhc3RDaGlsZAorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQuZGF0YSA9PSAic2Vjb25kZm91cnRoIgorICAgICAgICAgICAgICAgIGFuZCByb290LmZpcnN0Q2hpbGQucHJldmlvdXNTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5maXJzdENoaWxkLm5leHRTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICAsICJ0ZXN0Tm9ybWFsaXplRGVsZXRlQW5kQ29tYmluZSAtLSByZXN1bHQiKQorICAgICAgICBkb2MudW5saW5rKCkKKworICAgIGRlZiB0ZXN0Tm9ybWFsaXplUmVjdXJzaW9uKHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxvPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aS8+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8L28+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPG8+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidDIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN4MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjwvbz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidDMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjeDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPC9vPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICAgICI8L2RvYz4iKQorICAgICAgICByb290ID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICByb290LmNoaWxkTm9kZXNbMF0uYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCIiKSkKKyAgICAgICAgcm9vdC5jaGlsZE5vZGVzWzBdLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZSgieCIpKQorICAgICAgICByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIngyIikpCisgICAgICAgIHJvb3QuY2hpbGROb2Rlc1sxXS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIngzIikpCisgICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCIiKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihyb290LmNoaWxkTm9kZXMpID09IDMKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAzCisgICAgICAgICAgICAgICAgYW5kIGxlbihyb290LmNoaWxkTm9kZXNbMF0uY2hpbGROb2RlcykgPT0gNAorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggPT0gNAorICAgICAgICAgICAgICAgIGFuZCBsZW4ocm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXMpID09IDMKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXMubGVuZ3RoID09IDMKKyAgICAgICAgICAgICAgICBhbmQgbGVuKHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMpID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGggPT0gMgorICAgICAgICAgICAgICAgICwgInRlc3ROb3JtYWxpemUyIC0tIHByZXBhcmF0aW9uIikKKyAgICAgICAgZG9jLm5vcm1hbGl6ZSgpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4ocm9vdC5jaGlsZE5vZGVzKSA9PSAyCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlcy5sZW5ndGggPT0gMgorICAgICAgICAgICAgICAgIGFuZCBsZW4ocm9vdC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMpID09IDIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoID09IDIKKyAgICAgICAgICAgICAgICBhbmQgbGVuKHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzKSA9PSAyCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAyCisgICAgICAgICAgICAgICAgYW5kIGxlbihyb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzKSA9PSAxCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoID09IDEKKyAgICAgICAgICAgICAgICAsICJ0ZXN0Tm9ybWFsaXplMiAtLSBjaGlsZE5vZGVzIGxlbmd0aHMiKQorICAgICAgICBzZWxmLmNvbmZpcm0ocm9vdC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMV0uZGF0YSA9PSAidHgiCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0uZGF0YSA9PSAidDJ4MiIKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMV0uZGF0YSA9PSAidDN4MyIKKyAgICAgICAgICAgICAgICAsICJ0ZXN0Tm9ybWFsaXplMiAtLSBqb2luZWQgdGV4dCBmaWVsZHMiKQorICAgICAgICBzZWxmLmNvbmZpcm0ocm9vdC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMV0ubmV4dFNpYmxpbmcgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1sxXS5wcmV2aW91c1NpYmxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJvb3QuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLnByZXZpb3VzU2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLm5leHRTaWJsaW5nCisgICAgICAgICAgICAgICAgICAgICAgICBpcyByb290LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1sxXQorICAgICAgICAgICAgICAgIGFuZCByb290LmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1sxXS5uZXh0U2libGluZyBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzFdLnByZXZpb3VzU2libGluZworICAgICAgICAgICAgICAgICAgICAgICAgaXMgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0KKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0ucHJldmlvdXNTaWJsaW5nIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgcm9vdC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0ubmV4dFNpYmxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJvb3QuY2hpbGROb2Rlc1sxXS5jaGlsZE5vZGVzWzFdCisgICAgICAgICAgICAgICAgLCAidGVzdE5vcm1hbGl6ZTIgLS0gc2libGluZyBwb2ludGVycyIpCisgICAgICAgIGRvYy51bmxpbmsoKQorCisKKyAgICBkZWYgdGVzdEJ1ZzA3Nzc4ODQoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8bz50ZXh0PC9vPiIpCisgICAgICAgIHRleHQgPSBkb2MuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0Lm5vZGVUeXBlLCBOb2RlLlRFWFRfTk9ERSkKKyAgICAgICAgIyBTaG91bGQgcnVuIHF1aWV0bHksIGRvaW5nIG5vdGhpbmcuCisgICAgICAgIHRleHQubm9ybWFsaXplKCkKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICBkZWYgdGVzdEJ1ZzE0MzM2OTQoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8bz48aS8+dDwvbz4iKQorICAgICAgICBub2RlID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICBub2RlLmNoaWxkTm9kZXNbMV0ubm9kZVZhbHVlID0gIiIKKyAgICAgICAgbm9kZS5ub3JtYWxpemUoKQorICAgICAgICBzZWxmLmNvbmZpcm0obm9kZS5jaGlsZE5vZGVzWy0xXS5uZXh0U2libGluZyBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgIkZpbmFsIGNoaWxkJ3MgLm5leHRTaWJsaW5nIHNob3VsZCBiZSBOb25lIikKKworICAgIGRlZiB0ZXN0U2libGluZ3Moc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jPjw/cGk/PnRleHQ/PGVsbS8+PC9kb2M+IikKKyAgICAgICAgcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgKHBpLCB0ZXh0LCBlbG0pID0gcm9vdC5jaGlsZE5vZGVzCisKKyAgICAgICAgc2VsZi5jb25maXJtKHBpLm5leHRTaWJsaW5nIGlzIHRleHQgYW5kCisgICAgICAgICAgICAgICAgcGkucHJldmlvdXNTaWJsaW5nIGlzIE5vbmUgYW5kCisgICAgICAgICAgICAgICAgdGV4dC5uZXh0U2libGluZyBpcyBlbG0gYW5kCisgICAgICAgICAgICAgICAgdGV4dC5wcmV2aW91c1NpYmxpbmcgaXMgcGkgYW5kCisgICAgICAgICAgICAgICAgZWxtLm5leHRTaWJsaW5nIGlzIE5vbmUgYW5kCisgICAgICAgICAgICAgICAgZWxtLnByZXZpb3VzU2libGluZyBpcyB0ZXh0LCAidGVzdFNpYmxpbmdzIikKKworICAgICAgICBkb2MudW5saW5rKCkKKworICAgIGRlZiB0ZXN0UGFyZW50cyhzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoCisgICAgICAgICAgICAiPGRvYz48ZWxtMT48ZWxtMi8+PGVsbTI+PGVsbTMvPjwvZWxtMj48L2VsbTE+PC9kb2M+IikKKyAgICAgICAgcm9vdCA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgZWxtMSA9IHJvb3QuY2hpbGROb2Rlc1swXQorICAgICAgICAoZWxtMmEsIGVsbTJiKSA9IGVsbTEuY2hpbGROb2RlcworICAgICAgICBlbG0zID0gZWxtMmIuY2hpbGROb2Rlc1swXQorCisgICAgICAgIHNlbGYuY29uZmlybShyb290LnBhcmVudE5vZGUgaXMgZG9jIGFuZAorICAgICAgICAgICAgICAgIGVsbTEucGFyZW50Tm9kZSBpcyByb290IGFuZAorICAgICAgICAgICAgICAgIGVsbTJhLnBhcmVudE5vZGUgaXMgZWxtMSBhbmQKKyAgICAgICAgICAgICAgICBlbG0yYi5wYXJlbnROb2RlIGlzIGVsbTEgYW5kCisgICAgICAgICAgICAgICAgZWxtMy5wYXJlbnROb2RlIGlzIGVsbTJiLCAidGVzdFBhcmVudHMiKQorICAgICAgICBkb2MudW5saW5rKCkKKworICAgIGRlZiB0ZXN0Tm9kZUxpc3RJdGVtKHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYz48ZS8+PGUvPjwvZG9jPiIpCisgICAgICAgIGNoaWxkcmVuID0gZG9jLmNoaWxkTm9kZXMKKyAgICAgICAgZG9jZWxlbSA9IGNoaWxkcmVuWzBdCisgICAgICAgIHNlbGYuY29uZmlybShjaGlsZHJlblswXSBpcyBjaGlsZHJlbi5pdGVtKDApCisgICAgICAgICAgICAgICAgYW5kIGNoaWxkcmVuLml0ZW0oMSkgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBkb2NlbGVtLmNoaWxkTm9kZXMuaXRlbSgwKSBpcyBkb2NlbGVtLmNoaWxkTm9kZXNbMF0KKyAgICAgICAgICAgICAgICBhbmQgZG9jZWxlbS5jaGlsZE5vZGVzLml0ZW0oMSkgaXMgZG9jZWxlbS5jaGlsZE5vZGVzWzFdCisgICAgICAgICAgICAgICAgYW5kIGRvY2VsZW0uY2hpbGROb2Rlcy5pdGVtKDApLmNoaWxkTm9kZXMuaXRlbSgwKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICJ0ZXN0IE5vZGVMaXN0Lml0ZW0oKSIpCisgICAgICAgIGRvYy51bmxpbmsoKQorCisgICAgZGVmIHRlc3RTQVgyRE9NKHNlbGYpOgorICAgICAgICBmcm9tIHhtbC5kb20gaW1wb3J0IHB1bGxkb20KKworICAgICAgICBzYXgyZG9tID0gcHVsbGRvbS5TQVgyRE9NKCkKKyAgICAgICAgc2F4MmRvbS5zdGFydERvY3VtZW50KCkKKyAgICAgICAgc2F4MmRvbS5zdGFydEVsZW1lbnQoImRvYyIsIHt9KQorICAgICAgICBzYXgyZG9tLmNoYXJhY3RlcnMoInRleHQiKQorICAgICAgICBzYXgyZG9tLnN0YXJ0RWxlbWVudCgic3ViZWxtIiwge30pCisgICAgICAgIHNheDJkb20uY2hhcmFjdGVycygidGV4dCIpCisgICAgICAgIHNheDJkb20uZW5kRWxlbWVudCgic3ViZWxtIikKKyAgICAgICAgc2F4MmRvbS5jaGFyYWN0ZXJzKCJ0ZXh0IikKKyAgICAgICAgc2F4MmRvbS5lbmRFbGVtZW50KCJkb2MiKQorICAgICAgICBzYXgyZG9tLmVuZERvY3VtZW50KCkKKworICAgICAgICBkb2MgPSBzYXgyZG9tLmRvY3VtZW50CisgICAgICAgIHJvb3QgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgICh0ZXh0MSwgZWxtMSwgdGV4dDIpID0gcm9vdC5jaGlsZE5vZGVzCisgICAgICAgIHRleHQzID0gZWxtMS5jaGlsZE5vZGVzWzBdCisKKyAgICAgICAgc2VsZi5jb25maXJtKHRleHQxLnByZXZpb3VzU2libGluZyBpcyBOb25lIGFuZAorICAgICAgICAgICAgICAgIHRleHQxLm5leHRTaWJsaW5nIGlzIGVsbTEgYW5kCisgICAgICAgICAgICAgICAgZWxtMS5wcmV2aW91c1NpYmxpbmcgaXMgdGV4dDEgYW5kCisgICAgICAgICAgICAgICAgZWxtMS5uZXh0U2libGluZyBpcyB0ZXh0MiBhbmQKKyAgICAgICAgICAgICAgICB0ZXh0Mi5wcmV2aW91c1NpYmxpbmcgaXMgZWxtMSBhbmQKKyAgICAgICAgICAgICAgICB0ZXh0Mi5uZXh0U2libGluZyBpcyBOb25lIGFuZAorICAgICAgICAgICAgICAgIHRleHQzLnByZXZpb3VzU2libGluZyBpcyBOb25lIGFuZAorICAgICAgICAgICAgICAgIHRleHQzLm5leHRTaWJsaW5nIGlzIE5vbmUsICJ0ZXN0U0FYMkRPTSAtIHNpYmxpbmdzIikKKworICAgICAgICBzZWxmLmNvbmZpcm0ocm9vdC5wYXJlbnROb2RlIGlzIGRvYyBhbmQKKyAgICAgICAgICAgICAgICB0ZXh0MS5wYXJlbnROb2RlIGlzIHJvb3QgYW5kCisgICAgICAgICAgICAgICAgZWxtMS5wYXJlbnROb2RlIGlzIHJvb3QgYW5kCisgICAgICAgICAgICAgICAgdGV4dDIucGFyZW50Tm9kZSBpcyByb290IGFuZAorICAgICAgICAgICAgICAgIHRleHQzLnBhcmVudE5vZGUgaXMgZWxtMSwgInRlc3RTQVgyRE9NIC0gcGFyZW50cyIpCisgICAgICAgIGRvYy51bmxpbmsoKQorCisgICAgZGVmIHRlc3RFbmNvZGluZ3Moc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCc8Zm9vPiYjeDIwYWM7PC9mb28+JykKKyAgICAgICAgc2VsZi5jb25maXJtKGRvYy50b3htbCgpID09IHUnPD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxmb28+XHUyMGFjPC9mb28+JworICAgICAgICAgICAgICAgIGFuZCBkb2MudG94bWwoJ3V0Zi04JykgPT0KKyAgICAgICAgICAgICAgICAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48Zm9vPlx4ZTJceDgyXHhhYzwvZm9vPicKKyAgICAgICAgICAgICAgICBhbmQgZG9jLnRveG1sKCdpc28tODg1OS0xNScpID09CisgICAgICAgICAgICAgICAgJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTE1Ij8+PGZvbz5ceGE0PC9mb28+JywKKyAgICAgICAgICAgICAgICAidGVzdEVuY29kaW5ncyAtIGVuY29kaW5nIEVVUk8gU0lHTiIpCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBjaGFyYWN0ZXIgZGVjb2RpbmcgZXJyb3JzIHJhaXNlIGV4Y2VwdGlvbnMgaW5zdGVhZAorICAgICAgICAjIG9mIGNyYXNoaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgcGFyc2VTdHJpbmcsCisgICAgICAgICAgICAgICAgJzxmcmFuXHhlN2Fpcz5Db21tZW50IFx4ZTdhIHZhID8gVHJceGU4cyBiaWVuID88L2ZyYW5ceGU3YWlzPicpCisKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICBjbGFzcyBVc2VyRGF0YUhhbmRsZXI6CisgICAgICAgIGNhbGxlZCA9IDAKKyAgICAgICAgZGVmIGhhbmRsZShzZWxmLCBvcGVyYXRpb24sIGtleSwgZGF0YSwgc3JjLCBkc3QpOgorICAgICAgICAgICAgZHN0LnNldFVzZXJEYXRhKGtleSwgZGF0YSArIDEsIHNlbGYpCisgICAgICAgICAgICBzcmMuc2V0VXNlckRhdGEoa2V5LCBOb25lLCBOb25lKQorICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSAxCisKKyAgICBkZWYgdGVzdFVzZXJEYXRhKHNlbGYpOgorICAgICAgICBkb20gPSBEb2N1bWVudCgpCisgICAgICAgIG4gPSBkb20uY3JlYXRlRWxlbWVudCgnZScpCisgICAgICAgIHNlbGYuY29uZmlybShuLmdldFVzZXJEYXRhKCJmb28iKSBpcyBOb25lKQorICAgICAgICBuLnNldFVzZXJEYXRhKCJmb28iLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmNvbmZpcm0obi5nZXRVc2VyRGF0YSgiZm9vIikgaXMgTm9uZSkKKyAgICAgICAgbi5zZXRVc2VyRGF0YSgiZm9vIiwgMTIsIDEyKQorICAgICAgICBuLnNldFVzZXJEYXRhKCJiYXIiLCAxMywgMTMpCisgICAgICAgIHNlbGYuY29uZmlybShuLmdldFVzZXJEYXRhKCJmb28iKSA9PSAxMikKKyAgICAgICAgc2VsZi5jb25maXJtKG4uZ2V0VXNlckRhdGEoImJhciIpID09IDEzKQorICAgICAgICBuLnNldFVzZXJEYXRhKCJmb28iLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmNvbmZpcm0obi5nZXRVc2VyRGF0YSgiZm9vIikgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5jb25maXJtKG4uZ2V0VXNlckRhdGEoImJhciIpID09IDEzKQorCisgICAgICAgIGhhbmRsZXIgPSBzZWxmLlVzZXJEYXRhSGFuZGxlcigpCisgICAgICAgIG4uc2V0VXNlckRhdGEoImJhciIsIDEyLCBoYW5kbGVyKQorICAgICAgICBjID0gbi5jbG9uZU5vZGUoMSkKKyAgICAgICAgc2VsZi5jb25maXJtKGhhbmRsZXIuY2FsbGVkCisgICAgICAgICAgICAgICAgYW5kIG4uZ2V0VXNlckRhdGEoImJhciIpIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgYy5nZXRVc2VyRGF0YSgiYmFyIikgPT0gMTMpCisgICAgICAgIG4udW5saW5rKCkKKyAgICAgICAgYy51bmxpbmsoKQorICAgICAgICBkb20udW5saW5rKCkKKworICAgIGRlZiBjaGVja1JlbmFtZU5vZGVTaGFyZWRDb25zdHJhaW50cyhzZWxmLCBkb2MsIG5vZGUpOgorICAgICAgICAjIE1ha2Ugc3VyZSBpbGxlZ2FsIE5TIHVzYWdlIGlzIGRldGVjdGVkOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWwuZG9tLk5hbWVzcGFjZUVyciwgZG9jLnJlbmFtZU5vZGUsIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMiLCAieG1sbnM6Zm9vIikKKyAgICAgICAgZG9jMiA9IHBhcnNlU3RyaW5nKCI8ZG9jLz4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWwuZG9tLldyb25nRG9jdW1lbnRFcnIsIGRvYzIucmVuYW1lTm9kZSwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UsICJmb28iKQorCisgICAgZGVmIHRlc3RSZW5hbWVBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jIGE9J3YnLz4iKQorICAgICAgICBlbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICBhdHRybWFwID0gZWxlbS5hdHRyaWJ1dGVzCisgICAgICAgIGF0dHIgPSBlbGVtLmF0dHJpYnV0ZXNbJ2EnXQorCisgICAgICAgICMgU2ltcGxlIHJlbmFtaW5nCisgICAgICAgIGF0dHIgPSBkb2MucmVuYW1lTm9kZShhdHRyLCB4bWwuZG9tLkVNUFRZX05BTUVTUEFDRSwgImIiKQorICAgICAgICBzZWxmLmNvbmZpcm0oYXR0ci5uYW1lID09ICJiIgorICAgICAgICAgICAgICAgIGFuZCBhdHRyLm5vZGVOYW1lID09ICJiIgorICAgICAgICAgICAgICAgIGFuZCBhdHRyLmxvY2FsTmFtZSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGF0dHIubmFtZXNwYWNlVVJJID09IHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFCisgICAgICAgICAgICAgICAgYW5kIGF0dHIucHJlZml4IGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgYXR0ci52YWx1ZSA9PSAidiIKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJhIikgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImIiKS5pc1NhbWVOb2RlKGF0dHIpCisgICAgICAgICAgICAgICAgYW5kIGF0dHJtYXBbImIiXS5pc1NhbWVOb2RlKGF0dHIpCisgICAgICAgICAgICAgICAgYW5kIGF0dHIub3duZXJEb2N1bWVudC5pc1NhbWVOb2RlKGRvYykKKyAgICAgICAgICAgICAgICBhbmQgYXR0ci5vd25lckVsZW1lbnQuaXNTYW1lTm9kZShlbGVtKSkKKworICAgICAgICAjIFJlbmFtZSB0byBoYXZlIGEgbmFtZXNwYWNlLCBubyBwcmVmaXgKKyAgICAgICAgYXR0ciA9IGRvYy5yZW5hbWVOb2RlKGF0dHIsICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMiLCAiYyIpCisgICAgICAgIHNlbGYuY29uZmlybShhdHRyLm5hbWUgPT0gImMiCisgICAgICAgICAgICAgICAgYW5kIGF0dHIubm9kZU5hbWUgPT0gImMiCisgICAgICAgICAgICAgICAgYW5kIGF0dHIubG9jYWxOYW1lID09ICJjIgorICAgICAgICAgICAgICAgIGFuZCBhdHRyLm5hbWVzcGFjZVVSSSA9PSAiaHR0cDovL3htbC5weXRob24ub3JnL25zIgorICAgICAgICAgICAgICAgIGFuZCBhdHRyLnByZWZpeCBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGF0dHIudmFsdWUgPT0gInYiCisgICAgICAgICAgICAgICAgYW5kIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiYSIpIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJiIikgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImMiKS5pc1NhbWVOb2RlKGF0dHIpCisgICAgICAgICAgICAgICAgYW5kIGVsZW0uZ2V0QXR0cmlidXRlTm9kZU5TKAorICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3htbC5weXRob24ub3JnL25zIiwgImMiKS5pc1NhbWVOb2RlKGF0dHIpCisgICAgICAgICAgICAgICAgYW5kIGF0dHJtYXBbImMiXS5pc1NhbWVOb2RlKGF0dHIpCisgICAgICAgICAgICAgICAgYW5kIGF0dHJtYXBbKCJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMiLCAiYyIpXS5pc1NhbWVOb2RlKGF0dHIpKQorCisgICAgICAgICMgUmVuYW1lIHRvIGhhdmUgYSBuYW1lc3BhY2UsIHdpdGggcHJlZml4CisgICAgICAgIGF0dHIgPSBkb2MucmVuYW1lTm9kZShhdHRyLCAiaHR0cDovL3htbC5weXRob24ub3JnL25zMiIsICJwOmQiKQorICAgICAgICBzZWxmLmNvbmZpcm0oYXR0ci5uYW1lID09ICJwOmQiCisgICAgICAgICAgICAgICAgYW5kIGF0dHIubm9kZU5hbWUgPT0gInA6ZCIKKyAgICAgICAgICAgICAgICBhbmQgYXR0ci5sb2NhbE5hbWUgPT0gImQiCisgICAgICAgICAgICAgICAgYW5kIGF0dHIubmFtZXNwYWNlVVJJID09ICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMyIgorICAgICAgICAgICAgICAgIGFuZCBhdHRyLnByZWZpeCA9PSAicCIKKyAgICAgICAgICAgICAgICBhbmQgYXR0ci52YWx1ZSA9PSAidiIKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJhIikgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImIiKSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiYyIpIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlTlMoCisgICAgICAgICAgICAgICAgICAgICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMiLCAiYyIpIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJwOmQiKS5pc1NhbWVOb2RlKGF0dHIpCisgICAgICAgICAgICAgICAgYW5kIGVsZW0uZ2V0QXR0cmlidXRlTm9kZU5TKAorICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3htbC5weXRob24ub3JnL25zMiIsICJkIikuaXNTYW1lTm9kZShhdHRyKQorICAgICAgICAgICAgICAgIGFuZCBhdHRybWFwWyJwOmQiXS5pc1NhbWVOb2RlKGF0dHIpCisgICAgICAgICAgICAgICAgYW5kIGF0dHJtYXBbKCJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMyIiwgImQiKV0uaXNTYW1lTm9kZShhdHRyKSkKKworICAgICAgICAjIFJlbmFtZSBiYWNrIHRvIGEgc2ltcGxlIG5vbi1OUyBub2RlCisgICAgICAgIGF0dHIgPSBkb2MucmVuYW1lTm9kZShhdHRyLCB4bWwuZG9tLkVNUFRZX05BTUVTUEFDRSwgImUiKQorICAgICAgICBzZWxmLmNvbmZpcm0oYXR0ci5uYW1lID09ICJlIgorICAgICAgICAgICAgICAgIGFuZCBhdHRyLm5vZGVOYW1lID09ICJlIgorICAgICAgICAgICAgICAgIGFuZCBhdHRyLmxvY2FsTmFtZSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGF0dHIubmFtZXNwYWNlVVJJID09IHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFCisgICAgICAgICAgICAgICAgYW5kIGF0dHIucHJlZml4IGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgYXR0ci52YWx1ZSA9PSAidiIKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJhIikgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImIiKSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiYyIpIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJwOmQiKSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGVsZW0uZ2V0QXR0cmlidXRlTm9kZU5TKAorICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3htbC5weXRob24ub3JnL25zIiwgImMiKSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiZSIpLmlzU2FtZU5vZGUoYXR0cikKKyAgICAgICAgICAgICAgICBhbmQgYXR0cm1hcFsiZSJdLmlzU2FtZU5vZGUoYXR0cikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1sLmRvbS5OYW1lc3BhY2VFcnIsIGRvYy5yZW5hbWVOb2RlLCBhdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3htbC5weXRob24ub3JnL25zIiwgInhtbG5zIikKKyAgICAgICAgc2VsZi5jaGVja1JlbmFtZU5vZGVTaGFyZWRDb25zdHJhaW50cyhkb2MsIGF0dHIpCisgICAgICAgIGRvYy51bmxpbmsoKQorCisgICAgZGVmIHRlc3RSZW5hbWVFbGVtZW50KHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYy8+IikKKyAgICAgICAgZWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKworICAgICAgICAjIFNpbXBsZSByZW5hbWluZworICAgICAgICBlbGVtID0gZG9jLnJlbmFtZU5vZGUoZWxlbSwgeG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UsICJhIikKKyAgICAgICAgc2VsZi5jb25maXJtKGVsZW0udGFnTmFtZSA9PSAiYSIKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5ub2RlTmFtZSA9PSAiYSIKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5sb2NhbE5hbWUgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBlbGVtLm5hbWVzcGFjZVVSSSA9PSB4bWwuZG9tLkVNUFRZX05BTUVTUEFDRQorICAgICAgICAgICAgICAgIGFuZCBlbGVtLnByZWZpeCBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGVsZW0ub3duZXJEb2N1bWVudC5pc1NhbWVOb2RlKGRvYykpCisKKyAgICAgICAgIyBSZW5hbWUgdG8gaGF2ZSBhIG5hbWVzcGFjZSwgbm8gcHJlZml4CisgICAgICAgIGVsZW0gPSBkb2MucmVuYW1lTm9kZShlbGVtLCAiaHR0cDovL3htbC5weXRob24ub3JnL25zIiwgImIiKQorICAgICAgICBzZWxmLmNvbmZpcm0oZWxlbS50YWdOYW1lID09ICJiIgorICAgICAgICAgICAgICAgIGFuZCBlbGVtLm5vZGVOYW1lID09ICJiIgorICAgICAgICAgICAgICAgIGFuZCBlbGVtLmxvY2FsTmFtZSA9PSAiYiIKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5uYW1lc3BhY2VVUkkgPT0gImh0dHA6Ly94bWwucHl0aG9uLm9yZy9ucyIKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5wcmVmaXggaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBlbGVtLm93bmVyRG9jdW1lbnQuaXNTYW1lTm9kZShkb2MpKQorCisgICAgICAgICMgUmVuYW1lIHRvIGhhdmUgYSBuYW1lc3BhY2UsIHdpdGggcHJlZml4CisgICAgICAgIGVsZW0gPSBkb2MucmVuYW1lTm9kZShlbGVtLCAiaHR0cDovL3htbC5weXRob24ub3JnL25zMiIsICJwOmMiKQorICAgICAgICBzZWxmLmNvbmZpcm0oZWxlbS50YWdOYW1lID09ICJwOmMiCisgICAgICAgICAgICAgICAgYW5kIGVsZW0ubm9kZU5hbWUgPT0gInA6YyIKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5sb2NhbE5hbWUgPT0gImMiCisgICAgICAgICAgICAgICAgYW5kIGVsZW0ubmFtZXNwYWNlVVJJID09ICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMyIgorICAgICAgICAgICAgICAgIGFuZCBlbGVtLnByZWZpeCA9PSAicCIKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5vd25lckRvY3VtZW50LmlzU2FtZU5vZGUoZG9jKSkKKworICAgICAgICAjIFJlbmFtZSBiYWNrIHRvIGEgc2ltcGxlIG5vbi1OUyBub2RlCisgICAgICAgIGVsZW0gPSBkb2MucmVuYW1lTm9kZShlbGVtLCB4bWwuZG9tLkVNUFRZX05BTUVTUEFDRSwgImQiKQorICAgICAgICBzZWxmLmNvbmZpcm0oZWxlbS50YWdOYW1lID09ICJkIgorICAgICAgICAgICAgICAgIGFuZCBlbGVtLm5vZGVOYW1lID09ICJkIgorICAgICAgICAgICAgICAgIGFuZCBlbGVtLmxvY2FsTmFtZSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGVsZW0ubmFtZXNwYWNlVVJJID09IHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFCisgICAgICAgICAgICAgICAgYW5kIGVsZW0ucHJlZml4IGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgZWxlbS5vd25lckRvY3VtZW50LmlzU2FtZU5vZGUoZG9jKSkKKworICAgICAgICBzZWxmLmNoZWNrUmVuYW1lTm9kZVNoYXJlZENvbnN0cmFpbnRzKGRvYywgZWxlbSkKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICBkZWYgdGVzdFJlbmFtZU90aGVyKHNlbGYpOgorICAgICAgICAjIFdlIGhhdmUgdG8gY3JlYXRlIGEgY29tbWVudCBub2RlIGV4cGxpY2l0bHkgc2luY2Ugbm90IGFsbCBET00KKyAgICAgICAgIyBidWlsZGVycyB1c2VkIHdpdGggbWluaWRvbSBhZGQgY29tbWVudHMgdG8gdGhlIERPTS4KKyAgICAgICAgZG9jID0geG1sLmRvbS5taW5pZG9tLmdldERPTUltcGxlbWVudGF0aW9uKCkuY3JlYXRlRG9jdW1lbnQoCisgICAgICAgICAgICB4bWwuZG9tLkVNUFRZX05BTUVTUEFDRSwgImUiLCBOb25lKQorICAgICAgICBub2RlID0gZG9jLmNyZWF0ZUNvbW1lbnQoImNvbW1lbnQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWwuZG9tLk5vdFN1cHBvcnRlZEVyciwgZG9jLnJlbmFtZU5vZGUsIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFLCAiZm9vIikKKyAgICAgICAgZG9jLnVubGluaygpCisKKyAgICBkZWYgdGVzdFdob2xlVGV4dChzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2M+YTwvZG9jPiIpCisgICAgICAgIGVsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIHRleHQgPSBlbGVtLmNoaWxkTm9kZXNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0Lm5vZGVUeXBlLCBOb2RlLlRFWFRfTk9ERSkKKworICAgICAgICBzZWxmLmNoZWNrV2hvbGVUZXh0KHRleHQsICJhIikKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoImIiKSkKKyAgICAgICAgc2VsZi5jaGVja1dob2xlVGV4dCh0ZXh0LCAiYWIiKQorICAgICAgICBlbGVtLmluc2VydEJlZm9yZShkb2MuY3JlYXRlQ0RBVEFTZWN0aW9uKCJjIiksIHRleHQpCisgICAgICAgIHNlbGYuY2hlY2tXaG9sZVRleHQodGV4dCwgImNhYiIpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgd2UgZG9uJ3QgY3Jvc3Mgb3RoZXIgbm9kZXMKKyAgICAgICAgc3BsaXR0ZXIgPSBkb2MuY3JlYXRlQ29tbWVudCgiY29tbWVudCIpCisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoc3BsaXR0ZXIpCisgICAgICAgIHRleHQyID0gZG9jLmNyZWF0ZVRleHROb2RlKCJkIikKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZCh0ZXh0MikKKyAgICAgICAgc2VsZi5jaGVja1dob2xlVGV4dCh0ZXh0LCAiY2FiIikKKyAgICAgICAgc2VsZi5jaGVja1dob2xlVGV4dCh0ZXh0MiwgImQiKQorCisgICAgICAgIHggPSBkb2MuY3JlYXRlRWxlbWVudCgieCIpCisgICAgICAgIGVsZW0ucmVwbGFjZUNoaWxkKHgsIHNwbGl0dGVyKQorICAgICAgICBzcGxpdHRlciA9IHgKKyAgICAgICAgc2VsZi5jaGVja1dob2xlVGV4dCh0ZXh0LCAiY2FiIikKKyAgICAgICAgc2VsZi5jaGVja1dob2xlVGV4dCh0ZXh0MiwgImQiKQorCisgICAgICAgIHggPSBkb2MuY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKCJ5IiwgInoiKQorICAgICAgICBlbGVtLnJlcGxhY2VDaGlsZCh4LCBzcGxpdHRlcikKKyAgICAgICAgc3BsaXR0ZXIgPSB4CisgICAgICAgIHNlbGYuY2hlY2tXaG9sZVRleHQodGV4dCwgImNhYiIpCisgICAgICAgIHNlbGYuY2hlY2tXaG9sZVRleHQodGV4dDIsICJkIikKKworICAgICAgICBlbGVtLnJlbW92ZUNoaWxkKHNwbGl0dGVyKQorICAgICAgICBzZWxmLmNoZWNrV2hvbGVUZXh0KHRleHQsICJjYWJkIikKKyAgICAgICAgc2VsZi5jaGVja1dob2xlVGV4dCh0ZXh0MiwgImNhYmQiKQorCisgICAgZGVmIHRlc3RQYXRjaDEwOTQxNjQoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jPjxlLz48L2RvYz4iKQorICAgICAgICBlbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICBlID0gZWxlbS5maXJzdENoaWxkCisgICAgICAgIHNlbGYuY29uZmlybShlLnBhcmVudE5vZGUgaXMgZWxlbSwgIkJlZm9yZSByZXBsYWNlQ2hpbGQoKSIpCisgICAgICAgICMgQ2hlY2sgdGhhdCByZXBsYWNpbmcgYSBjaGlsZCB3aXRoIGl0c2VsZiBsZWF2ZXMgdGhlIHRyZWUgdW5jaGFuZ2VkCisgICAgICAgIGVsZW0ucmVwbGFjZUNoaWxkKGUsIGUpCisgICAgICAgIHNlbGYuY29uZmlybShlLnBhcmVudE5vZGUgaXMgZWxlbSwgIkFmdGVyIHJlcGxhY2VDaGlsZCgpIikKKworICAgIGRlZiB0ZXN0UmVwbGFjZVdob2xlVGV4dChzZWxmKToKKyAgICAgICAgZGVmIHNldHVwKCk6CisgICAgICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYz5hPGUvPmQ8L2RvYz4iKQorICAgICAgICAgICAgZWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgICAgIHRleHQxID0gZWxlbS5maXJzdENoaWxkCisgICAgICAgICAgICB0ZXh0MiA9IGVsZW0ubGFzdENoaWxkCisgICAgICAgICAgICBzcGxpdHRlciA9IHRleHQxLm5leHRTaWJsaW5nCisgICAgICAgICAgICBlbGVtLmluc2VydEJlZm9yZShkb2MuY3JlYXRlVGV4dE5vZGUoImIiKSwgc3BsaXR0ZXIpCisgICAgICAgICAgICBlbGVtLmluc2VydEJlZm9yZShkb2MuY3JlYXRlQ0RBVEFTZWN0aW9uKCJjIiksIHRleHQxKQorICAgICAgICAgICAgcmV0dXJuIGRvYywgZWxlbSwgdGV4dDEsIHNwbGl0dGVyLCB0ZXh0MgorCisgICAgICAgIGRvYywgZWxlbSwgdGV4dDEsIHNwbGl0dGVyLCB0ZXh0MiA9IHNldHVwKCkKKyAgICAgICAgdGV4dCA9IHRleHQxLnJlcGxhY2VXaG9sZVRleHQoIm5ldyBjb250ZW50IikKKyAgICAgICAgc2VsZi5jaGVja1dob2xlVGV4dCh0ZXh0LCAibmV3IGNvbnRlbnQiKQorICAgICAgICBzZWxmLmNoZWNrV2hvbGVUZXh0KHRleHQyLCAiZCIpCisgICAgICAgIHNlbGYuY29uZmlybShsZW4oZWxlbS5jaGlsZE5vZGVzKSA9PSAzKQorCisgICAgICAgIGRvYywgZWxlbSwgdGV4dDEsIHNwbGl0dGVyLCB0ZXh0MiA9IHNldHVwKCkKKyAgICAgICAgdGV4dCA9IHRleHQyLnJlcGxhY2VXaG9sZVRleHQoIm5ldyBjb250ZW50IikKKyAgICAgICAgc2VsZi5jaGVja1dob2xlVGV4dCh0ZXh0LCAibmV3IGNvbnRlbnQiKQorICAgICAgICBzZWxmLmNoZWNrV2hvbGVUZXh0KHRleHQxLCAiY2FiIikKKyAgICAgICAgc2VsZi5jb25maXJtKGxlbihlbGVtLmNoaWxkTm9kZXMpID09IDUpCisKKyAgICAgICAgZG9jLCBlbGVtLCB0ZXh0MSwgc3BsaXR0ZXIsIHRleHQyID0gc2V0dXAoKQorICAgICAgICB0ZXh0ID0gdGV4dDEucmVwbGFjZVdob2xlVGV4dCgiIikKKyAgICAgICAgc2VsZi5jaGVja1dob2xlVGV4dCh0ZXh0MiwgImQiKQorICAgICAgICBzZWxmLmNvbmZpcm0odGV4dCBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIGxlbihlbGVtLmNoaWxkTm9kZXMpID09IDIpCisKKyAgICBkZWYgdGVzdFNjaGVtYVR5cGUoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKAorICAgICAgICAgICAgIjwhRE9DVFlQRSBkb2MgW1xuIgorICAgICAgICAgICAgIiAgPCFFTlRJVFkgZTEgU1lTVEVNICdodHRwOi8veG1sLnB5dGhvbi5vcmcvZTEnPlxuIgorICAgICAgICAgICAgIiAgPCFFTlRJVFkgZTIgU1lTVEVNICdodHRwOi8veG1sLnB5dGhvbi5vcmcvZTInPlxuIgorICAgICAgICAgICAgIiAgPCFBVFRMSVNUIGRvYyBpZCAgIElEICAgICAgICNJTVBMSUVEIFxuIgorICAgICAgICAgICAgIiAgICAgICAgICAgICAgICByZWYgIElEUkVGICAgICNJTVBMSUVEIFxuIgorICAgICAgICAgICAgIiAgICAgICAgICAgICAgICByZWZzIElEUkVGUyAgICNJTVBMSUVEIFxuIgorICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBlbnVtIChhfGIpICAgICNJTVBMSUVEIFxuIgorICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBlbnQgIEVOVElUWSAgICNJTVBMSUVEIFxuIgorICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBlbnRzIEVOVElUSUVTICNJTVBMSUVEIFxuIgorICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBubSAgIE5NVE9LRU4gICNJTVBMSUVEIFxuIgorICAgICAgICAgICAgIiAgICAgICAgICAgICAgICBubXMgIE5NVE9LRU5TICNJTVBMSUVEIFxuIgorICAgICAgICAgICAgIiAgICAgICAgICAgICAgICB0ZXh0IENEQVRBICAgICNJTVBMSUVEIFxuIgorICAgICAgICAgICAgIiAgICA+XG4iCisgICAgICAgICAgICAiXT48ZG9jIGlkPSduYW1lJyBub3RpZD0nbmFtZScgdGV4dD0nc3BsYXQhJyBlbnVtPSdiJyIKKyAgICAgICAgICAgICIgICAgICAgcmVmPSduYW1lJyByZWZzPSduYW1lIG5hbWUnIGVudD0nZTEnIGVudHM9J2UxIGUyJyIKKyAgICAgICAgICAgICIgICAgICAgbm09JzEyMycgbm1zPScxMjMgYWJjJyAvPiIpCisgICAgICAgIGVsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgICMgV2UgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGFueSBzcGVjaWZpYyBsb2FkZXIgYXQgdGhpcyBwb2ludCwgc28KKyAgICAgICAgIyBqdXN0IG1ha2Ugc3VyZSB3ZSBjYW4gZ2V0IHRvIGFsbCB0aGUgbmFtZXMsIGFuZCB0aGF0IHRoZQorICAgICAgICAjIERURC1iYXNlZCBuYW1lc3BhY2UgaXMgcmlnaHQuICBUaGUgbmFtZXMgY2FuIHZhcnkgYnkgbG9hZGVyCisgICAgICAgICMgc2luY2UgZWFjaCBzdXBwb3J0cyBhIGRpZmZlcmVudCBsZXZlbCBvZiBEVEQgaW5mb3JtYXRpb24uCisgICAgICAgIHQgPSBlbGVtLnNjaGVtYVR5cGUKKyAgICAgICAgc2VsZi5jb25maXJtKHQubmFtZSBpcyBOb25lCisgICAgICAgICAgICAgICAgYW5kIHQubmFtZXNwYWNlID09IHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFKQorICAgICAgICBuYW1lcyA9ICJpZCBub3RpZCB0ZXh0IGVudW0gcmVmIHJlZnMgZW50IGVudHMgbm0gbm1zIi5zcGxpdCgpCisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgYSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShuYW1lKQorICAgICAgICAgICAgdCA9IGEuc2NoZW1hVHlwZQorICAgICAgICAgICAgc2VsZi5jb25maXJtKGhhc2F0dHIodCwgIm5hbWUiKQorICAgICAgICAgICAgICAgICAgICBhbmQgdC5uYW1lc3BhY2UgPT0geG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UpCisKKyAgICBkZWYgdGVzdFNldElkQXR0cmlidXRlKHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYyBhMT0ndicgYTI9J3cnLz4iKQorICAgICAgICBlID0gZG9jLmRvY3VtZW50RWxlbWVudAorICAgICAgICBhMSA9IGUuZ2V0QXR0cmlidXRlTm9kZSgiYTEiKQorICAgICAgICBhMiA9IGUuZ2V0QXR0cmlidXRlTm9kZSgiYTIiKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9jLmdldEVsZW1lbnRCeUlkKCJ2IikgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBub3QgYTEuaXNJZAorICAgICAgICAgICAgICAgIGFuZCBub3QgYTIuaXNJZCkKKyAgICAgICAgZS5zZXRJZEF0dHJpYnV0ZSgiYTEiKQorICAgICAgICBzZWxmLmNvbmZpcm0oZS5pc1NhbWVOb2RlKGRvYy5nZXRFbGVtZW50QnlJZCgidiIpKQorICAgICAgICAgICAgICAgIGFuZCBhMS5pc0lkCisgICAgICAgICAgICAgICAgYW5kIG5vdCBhMi5pc0lkKQorICAgICAgICBlLnNldElkQXR0cmlidXRlKCJhMiIpCisgICAgICAgIHNlbGYuY29uZmlybShlLmlzU2FtZU5vZGUoZG9jLmdldEVsZW1lbnRCeUlkKCJ2IikpCisgICAgICAgICAgICAgICAgYW5kIGUuaXNTYW1lTm9kZShkb2MuZ2V0RWxlbWVudEJ5SWQoInciKSkKKyAgICAgICAgICAgICAgICBhbmQgYTEuaXNJZAorICAgICAgICAgICAgICAgIGFuZCBhMi5pc0lkKQorICAgICAgICAjIHJlcGxhY2UgdGhlIGExIG5vZGU7IHRoZSBuZXcgbm9kZSBzaG91bGQgKm5vdCogYmUgYW4gSUQKKyAgICAgICAgYTMgPSBkb2MuY3JlYXRlQXR0cmlidXRlKCJhMSIpCisgICAgICAgIGEzLnZhbHVlID0gInYiCisgICAgICAgIGUuc2V0QXR0cmlidXRlTm9kZShhMykKKyAgICAgICAgc2VsZi5jb25maXJtKGRvYy5nZXRFbGVtZW50QnlJZCgidiIpIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgZS5pc1NhbWVOb2RlKGRvYy5nZXRFbGVtZW50QnlJZCgidyIpKQorICAgICAgICAgICAgICAgIGFuZCBub3QgYTEuaXNJZAorICAgICAgICAgICAgICAgIGFuZCBhMi5pc0lkCisgICAgICAgICAgICAgICAgYW5kIG5vdCBhMy5pc0lkKQorICAgICAgICAjIHJlbmFtaW5nIGFuIGF0dHJpYnV0ZSBzaG91bGQgbm90IGFmZmVjdCBpdHMgSUQtbmVzczoKKyAgICAgICAgZG9jLnJlbmFtZU5vZGUoYTIsIHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFLCAiYW4iKQorICAgICAgICBzZWxmLmNvbmZpcm0oZS5pc1NhbWVOb2RlKGRvYy5nZXRFbGVtZW50QnlJZCgidyIpKQorICAgICAgICAgICAgICAgIGFuZCBhMi5pc0lkKQorCisgICAgZGVmIHRlc3RTZXRJZEF0dHJpYnV0ZU5TKHNlbGYpOgorICAgICAgICBOUzEgPSAiaHR0cDovL3htbC5weXRob24ub3JnL25zMSIKKyAgICAgICAgTlMyID0gImh0dHA6Ly94bWwucHl0aG9uLm9yZy9uczIiCisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiIHhtbG5zOm5zMT0nIiArIE5TMSArICInIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiIHhtbG5zOm5zMj0nIiArIE5TMiArICInIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiIG5zMTphMT0ndicgbnMyOmEyPSd3Jy8+IikKKyAgICAgICAgZSA9IGRvYy5kb2N1bWVudEVsZW1lbnQKKyAgICAgICAgYTEgPSBlLmdldEF0dHJpYnV0ZU5vZGVOUyhOUzEsICJhMSIpCisgICAgICAgIGEyID0gZS5nZXRBdHRyaWJ1dGVOb2RlTlMoTlMyLCAiYTIiKQorICAgICAgICBzZWxmLmNvbmZpcm0oZG9jLmdldEVsZW1lbnRCeUlkKCJ2IikgaXMgTm9uZQorICAgICAgICAgICAgICAgIGFuZCBub3QgYTEuaXNJZAorICAgICAgICAgICAgICAgIGFuZCBub3QgYTIuaXNJZCkKKyAgICAgICAgZS5zZXRJZEF0dHJpYnV0ZU5TKE5TMSwgImExIikKKyAgICAgICAgc2VsZi5jb25maXJtKGUuaXNTYW1lTm9kZShkb2MuZ2V0RWxlbWVudEJ5SWQoInYiKSkKKyAgICAgICAgICAgICAgICBhbmQgYTEuaXNJZAorICAgICAgICAgICAgICAgIGFuZCBub3QgYTIuaXNJZCkKKyAgICAgICAgZS5zZXRJZEF0dHJpYnV0ZU5TKE5TMiwgImEyIikKKyAgICAgICAgc2VsZi5jb25maXJtKGUuaXNTYW1lTm9kZShkb2MuZ2V0RWxlbWVudEJ5SWQoInYiKSkKKyAgICAgICAgICAgICAgICBhbmQgZS5pc1NhbWVOb2RlKGRvYy5nZXRFbGVtZW50QnlJZCgidyIpKQorICAgICAgICAgICAgICAgIGFuZCBhMS5pc0lkCisgICAgICAgICAgICAgICAgYW5kIGEyLmlzSWQpCisgICAgICAgICMgcmVwbGFjZSB0aGUgYTEgbm9kZTsgdGhlIG5ldyBub2RlIHNob3VsZCAqbm90KiBiZSBhbiBJRAorICAgICAgICBhMyA9IGRvYy5jcmVhdGVBdHRyaWJ1dGVOUyhOUzEsICJhMSIpCisgICAgICAgIGEzLnZhbHVlID0gInYiCisgICAgICAgIGUuc2V0QXR0cmlidXRlTm9kZShhMykKKyAgICAgICAgc2VsZi5jb25maXJtKGUuaXNTYW1lTm9kZShkb2MuZ2V0RWxlbWVudEJ5SWQoInciKSkpCisgICAgICAgIHNlbGYuY29uZmlybShub3QgYTEuaXNJZCkKKyAgICAgICAgc2VsZi5jb25maXJtKGEyLmlzSWQpCisgICAgICAgIHNlbGYuY29uZmlybShub3QgYTMuaXNJZCkKKyAgICAgICAgc2VsZi5jb25maXJtKGRvYy5nZXRFbGVtZW50QnlJZCgidiIpIGlzIE5vbmUpCisgICAgICAgICMgcmVuYW1pbmcgYW4gYXR0cmlidXRlIHNob3VsZCBub3QgYWZmZWN0IGl0cyBJRC1uZXNzOgorICAgICAgICBkb2MucmVuYW1lTm9kZShhMiwgeG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UsICJhbiIpCisgICAgICAgIHNlbGYuY29uZmlybShlLmlzU2FtZU5vZGUoZG9jLmdldEVsZW1lbnRCeUlkKCJ3IikpCisgICAgICAgICAgICAgICAgYW5kIGEyLmlzSWQpCisKKyAgICBkZWYgdGVzdFNldElkQXR0cmlidXRlTm9kZShzZWxmKToKKyAgICAgICAgTlMxID0gImh0dHA6Ly94bWwucHl0aG9uLm9yZy9uczEiCisgICAgICAgIE5TMiA9ICJodHRwOi8veG1sLnB5dGhvbi5vcmcvbnMyIgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiB4bWxuczpuczE9JyIgKyBOUzEgKyAiJyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiB4bWxuczpuczI9JyIgKyBOUzIgKyAiJyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBuczE6YTE9J3YnIG5zMjphMj0ndycvPiIpCisgICAgICAgIGUgPSBkb2MuZG9jdW1lbnRFbGVtZW50CisgICAgICAgIGExID0gZS5nZXRBdHRyaWJ1dGVOb2RlTlMoTlMxLCAiYTEiKQorICAgICAgICBhMiA9IGUuZ2V0QXR0cmlidXRlTm9kZU5TKE5TMiwgImEyIikKKyAgICAgICAgc2VsZi5jb25maXJtKGRvYy5nZXRFbGVtZW50QnlJZCgidiIpIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBhbmQgbm90IGExLmlzSWQKKyAgICAgICAgICAgICAgICBhbmQgbm90IGEyLmlzSWQpCisgICAgICAgIGUuc2V0SWRBdHRyaWJ1dGVOb2RlKGExKQorICAgICAgICBzZWxmLmNvbmZpcm0oZS5pc1NhbWVOb2RlKGRvYy5nZXRFbGVtZW50QnlJZCgidiIpKQorICAgICAgICAgICAgICAgIGFuZCBhMS5pc0lkCisgICAgICAgICAgICAgICAgYW5kIG5vdCBhMi5pc0lkKQorICAgICAgICBlLnNldElkQXR0cmlidXRlTm9kZShhMikKKyAgICAgICAgc2VsZi5jb25maXJtKGUuaXNTYW1lTm9kZShkb2MuZ2V0RWxlbWVudEJ5SWQoInYiKSkKKyAgICAgICAgICAgICAgICBhbmQgZS5pc1NhbWVOb2RlKGRvYy5nZXRFbGVtZW50QnlJZCgidyIpKQorICAgICAgICAgICAgICAgIGFuZCBhMS5pc0lkCisgICAgICAgICAgICAgICAgYW5kIGEyLmlzSWQpCisgICAgICAgICMgcmVwbGFjZSB0aGUgYTEgbm9kZTsgdGhlIG5ldyBub2RlIHNob3VsZCAqbm90KiBiZSBhbiBJRAorICAgICAgICBhMyA9IGRvYy5jcmVhdGVBdHRyaWJ1dGVOUyhOUzEsICJhMSIpCisgICAgICAgIGEzLnZhbHVlID0gInYiCisgICAgICAgIGUuc2V0QXR0cmlidXRlTm9kZShhMykKKyAgICAgICAgc2VsZi5jb25maXJtKGUuaXNTYW1lTm9kZShkb2MuZ2V0RWxlbWVudEJ5SWQoInciKSkpCisgICAgICAgIHNlbGYuY29uZmlybShub3QgYTEuaXNJZCkKKyAgICAgICAgc2VsZi5jb25maXJtKGEyLmlzSWQpCisgICAgICAgIHNlbGYuY29uZmlybShub3QgYTMuaXNJZCkKKyAgICAgICAgc2VsZi5jb25maXJtKGRvYy5nZXRFbGVtZW50QnlJZCgidiIpIGlzIE5vbmUpCisgICAgICAgICMgcmVuYW1pbmcgYW4gYXR0cmlidXRlIHNob3VsZCBub3QgYWZmZWN0IGl0cyBJRC1uZXNzOgorICAgICAgICBkb2MucmVuYW1lTm9kZShhMiwgeG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UsICJhbiIpCisgICAgICAgIHNlbGYuY29uZmlybShlLmlzU2FtZU5vZGUoZG9jLmdldEVsZW1lbnRCeUlkKCJ3IikpCisgICAgICAgICAgICAgICAgYW5kIGEyLmlzSWQpCisKKyAgICBkZWYgdGVzdFBpY2tsZWREb2N1bWVudChzZWxmKToKKyAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3VzLWFzY2lpJz8+XG4iCisgICAgICAgICAgICAgICAgICAgICI8IURPQ1RZUEUgZG9jIFBVQkxJQyAnaHR0cDovL3htbC5weXRob24ub3JnL3B1YmxpYyciCisgICAgICAgICAgICAgICAgICAgICIgJ2h0dHA6Ly94bWwucHl0aG9uLm9yZy9zeXN0ZW0nIFtcbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgPCFFTEVNRU5UIGUgRU1QVFk+XG4iCisgICAgICAgICAgICAgICAgICAgICIgIDwhRU5USVRZIGVudCBTWVNURU0gJ2h0dHA6Ly94bWwucHl0aG9uLm9yZy9lbnRpdHknPlxuIgorICAgICAgICAgICAgICAgICAgICAiXT48ZG9jIGF0dHI9J3ZhbHVlJz4gdGV4dFxuIgorICAgICAgICAgICAgICAgICAgICAiPD9waSBzYW1wbGU/PiA8IS0tIGNvbW1lbnQgLS0+IDxlLz4gPC9kb2M+IikKKyAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhkb2MpCisgICAgICAgIGRvYzIgPSBwaWNrbGUubG9hZHMocykKKyAgICAgICAgc3RhY2sgPSBbKGRvYywgZG9jMildCisgICAgICAgIHdoaWxlIHN0YWNrOgorICAgICAgICAgICAgbjEsIG4yID0gc3RhY2sucG9wKCkKKyAgICAgICAgICAgIHNlbGYuY29uZmlybShuMS5ub2RlVHlwZSA9PSBuMi5ub2RlVHlwZQorICAgICAgICAgICAgICAgICAgICBhbmQgbGVuKG4xLmNoaWxkTm9kZXMpID09IGxlbihuMi5jaGlsZE5vZGVzKQorICAgICAgICAgICAgICAgICAgICBhbmQgbjEubm9kZU5hbWUgPT0gbjIubm9kZU5hbWUKKyAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBuMS5pc1NhbWVOb2RlKG4yKQorICAgICAgICAgICAgICAgICAgICBhbmQgbm90IG4yLmlzU2FtZU5vZGUobjEpKQorICAgICAgICAgICAgaWYgbjEubm9kZVR5cGUgPT0gTm9kZS5ET0NVTUVOVF9UWVBFX05PREU6CisgICAgICAgICAgICAgICAgbGVuKG4xLmVudGl0aWVzKQorICAgICAgICAgICAgICAgIGxlbihuMi5lbnRpdGllcykKKyAgICAgICAgICAgICAgICBsZW4objEubm90YXRpb25zKQorICAgICAgICAgICAgICAgIGxlbihuMi5ub3RhdGlvbnMpCisgICAgICAgICAgICAgICAgc2VsZi5jb25maXJtKGxlbihuMS5lbnRpdGllcykgPT0gbGVuKG4yLmVudGl0aWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGxlbihuMS5ub3RhdGlvbnMpID09IGxlbihuMi5ub3RhdGlvbnMpKQorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihuMS5ub3RhdGlvbnMpKToKKyAgICAgICAgICAgICAgICAgICAgIyBYWFggdGhpcyBsb29wIGJvZHkgZG9lc24ndCBzZWVtIHRvIGJlIGV4ZWN1dGVkPworICAgICAgICAgICAgICAgICAgICBubzEgPSBuMS5ub3RhdGlvbnMuaXRlbShpKQorICAgICAgICAgICAgICAgICAgICBubzIgPSBuMS5ub3RhdGlvbnMuaXRlbShpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpcm0obm8xLm5hbWUgPT0gbm8yLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm8xLnB1YmxpY0lkID09IG5vMi5wdWJsaWNJZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBubzEuc3lzdGVtSWQgPT0gbm8yLnN5c3RlbUlkKQorICAgICAgICAgICAgICAgICAgICBzdGFjay5hcHBlbmQoKG5vMSwgbm8yKSkKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4objEuZW50aXRpZXMpKToKKyAgICAgICAgICAgICAgICAgICAgZTEgPSBuMS5lbnRpdGllcy5pdGVtKGkpCisgICAgICAgICAgICAgICAgICAgIGUyID0gbjIuZW50aXRpZXMuaXRlbShpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpcm0oZTEubm90YXRpb25OYW1lID09IGUyLm5vdGF0aW9uTmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBlMS5wdWJsaWNJZCA9PSBlMi5wdWJsaWNJZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBlMS5zeXN0ZW1JZCA9PSBlMi5zeXN0ZW1JZCkKKyAgICAgICAgICAgICAgICAgICAgc3RhY2suYXBwZW5kKChlMSwgZTIpKQorICAgICAgICAgICAgaWYgbjEubm9kZVR5cGUgIT0gTm9kZS5ET0NVTUVOVF9OT0RFOgorICAgICAgICAgICAgICAgIHNlbGYuY29uZmlybShuMS5vd25lckRvY3VtZW50LmlzU2FtZU5vZGUoZG9jKQorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG4yLm93bmVyRG9jdW1lbnQuaXNTYW1lTm9kZShkb2MyKSkKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihuMS5jaGlsZE5vZGVzKSk6CisgICAgICAgICAgICAgICAgc3RhY2suYXBwZW5kKChuMS5jaGlsZE5vZGVzW2ldLCBuMi5jaGlsZE5vZGVzW2ldKSkKKworICAgIGRlZiB0ZXN0U2VyaWFsaXplQ29tbWVudE5vZGVXaXRoRG91YmxlSHlwaGVuKHNlbGYpOgorICAgICAgICBkb2MgPSBjcmVhdGVfZG9jX3dpdGhvdXRfZG9jdHlwZSgpCisgICAgICAgIGRvYy5hcHBlbmRDaGlsZChkb2MuY3JlYXRlQ29tbWVudCgiZm9vLS1iYXIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZG9jLnRveG1sKQorCisgICAgZGVmIHRlc3RFbXB0eVhNTE5TVmFsdWUoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZWxlbWVudCB4bWxucz0nJz5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjxmb28vPlxuPC9lbGVtZW50PiIpCisgICAgICAgIGRvYzIgPSBwYXJzZVN0cmluZyhkb2MudG94bWwoKSkKKyAgICAgICAgc2VsZi5jb25maXJtKGRvYzIubmFtZXNwYWNlVVJJID09IHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoTWluaWRvbVRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21tYXAucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tbWFwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NGIyMGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tbWFwLnB5CkBAIC0wLDAgKzEsNzI0IEBACitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUsIHVubGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlcywgXzJHLCBfNEcpCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcywgcmUsIGl0ZXJ0b29scywgc29ja2V0LCBzeXMKKworbW1hcCA9IGltcG9ydF9tb2R1bGUoJ21tYXAnKQorCitQQUdFU0laRSA9IG1tYXAuUEFHRVNJWkUKKworY2xhc3MgTW1hcFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoVEVTVEZOKToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMgVGVzdCBtbWFwIG1vZHVsZSBvbiBVbml4IHN5c3RlbXMgYW5kIFdpbmRvd3MKKworICAgICAgICAjIENyZWF0ZSBhIGZpbGUgdG8gYmUgbW1hcCdlZC4KKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndysnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFdyaXRlIDIgcGFnZXMgd29ydGggb2YgZGF0YSB0byB0aGUgZmlsZQorICAgICAgICAgICAgZi53cml0ZSgnXDAnKiBQQUdFU0laRSkKKyAgICAgICAgICAgIGYud3JpdGUoJ2ZvbycpCisgICAgICAgICAgICBmLndyaXRlKCdcMCcqIChQQUdFU0laRS0zKSApCisgICAgICAgICAgICBmLmZsdXNoKCkKKyAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMiAqIFBBR0VTSVpFKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgICMgU2ltcGxlIHNhbml0eSBjaGVja3MKKworICAgICAgICAgICAgdHAgPSBzdHIodHlwZShtKSkgICMgU0YgYnVnIDEyODcxMzogIHNlZ2ZhdWx0ZWQgb24gTGludXgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5maW5kKCdmb28nKSwgUEFHRVNJWkUpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0pLCAyKlBBR0VTSVpFKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bMF0sICdcMCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bMDozXSwgJ1wwXDBcMCcpCisKKyAgICAgICAgICAgICMgU2hvdWxkbid0IGNyYXNoIG9uIGJvdW5kYXJ5IChJc3N1ZSAjNTI5MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG0uX19nZXRpdGVtX18sIGxlbihtKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG0uX19zZXRpdGVtX18sIGxlbihtKSwgJ1wwJykKKworICAgICAgICAgICAgIyBNb2RpZnkgdGhlIGZpbGUncyBjb250ZW50CisgICAgICAgICAgICBtWzBdID0gJzMnCisgICAgICAgICAgICBtW1BBR0VTSVpFICszOiBQQUdFU0laRSArMyszXSA9ICdiYXInCisKKyAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHdvcmtlZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzBdLCAnMycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bMDozXSwgJzNcMFwwJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVtQQUdFU0laRS0xIDogUEFHRVNJWkUgKyA3XSwgJ1wwZm9vYmFyXDAnKQorCisgICAgICAgICAgICBtLmZsdXNoKCkKKworICAgICAgICAgICAgIyBUZXN0IGRvaW5nIGEgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIGluIGFuIG1tYXAnZWQgZmlsZQorICAgICAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2goJ1tBLVphLXpdKycsIG0pCisgICAgICAgICAgICBpZiBtYXRjaCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgncmVnZXggbWF0Y2ggb24gbW1hcCBmYWlsZWQhJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3RhcnQsIGVuZCA9IG1hdGNoLnNwYW4oMCkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBlbmQgLSBzdGFydAorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydCwgUEFHRVNJWkUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmQsIFBBR0VTSVpFICsgNikKKworICAgICAgICAgICAgIyB0ZXN0IHNlZWtpbmcgYXJvdW5kICh0cnkgdG8gb3ZlcmZsb3cgdGhlIHNlZWsgaW1wbGVtZW50YXRpb24pCisgICAgICAgICAgICBtLnNlZWsoMCwwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRlbGwoKSwgMCkKKyAgICAgICAgICAgIG0uc2Vlayg0MiwxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRlbGwoKSwgNDIpCisgICAgICAgICAgICBtLnNlZWsoMCwyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRlbGwoKSwgbGVuKG0pKQorCisgICAgICAgICAgICAjIFRyeSB0byBzZWVrIHRvIG5lZ2F0aXZlIHBvc2l0aW9uLi4uCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLnNlZWssIC0xKQorCisgICAgICAgICAgICAjIFRyeSB0byBzZWVrIGJleW9uZCBlbmQgb2YgbW1hcC4uLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5zZWVrLCAxLCAyKQorCisgICAgICAgICAgICAjIFRyeSB0byBzZWVrIHRvIG5lZ2F0aXZlIHBvc2l0aW9uLi4uCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLnNlZWssIC1sZW4obSktMSwgMikKKworICAgICAgICAgICAgIyBUcnkgcmVzaXppbmcgbWFwCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbS5yZXNpemUoNTEyKQorICAgICAgICAgICAgZXhjZXB0IFN5c3RlbUVycm9yOgorICAgICAgICAgICAgICAgICMgcmVzaXplKCkgbm90IHN1cHBvcnRlZAorICAgICAgICAgICAgICAgICMgTm8gbWVzc2FnZXMgYXJlIHByaW50ZWQsIHNpbmNlIHRoZSBvdXRwdXQgb2YgdGhpcyB0ZXN0IHN1aXRlCisgICAgICAgICAgICAgICAgIyB3b3VsZCB0aGVuIGJlIGRpZmZlcmVudCBhY3Jvc3MgcGxhdGZvcm1zLgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyByZXNpemUoKSBpcyBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtKSwgNTEyKQorICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB3ZSBjYW4gbm8gbG9uZ2VyIHNlZWsgYmV5b25kIHRoZSBuZXcgc2l6ZS4KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLnNlZWssIDUxMywgMCkKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgdW5kZXJseWluZyBmaWxlIGlzIHRydW5jYXRlZCB0b28KKyAgICAgICAgICAgICAgICAjIChidWcgIzcyODUxNSkKKyAgICAgICAgICAgICAgICBmID0gb3BlbihURVNURk4pCisgICAgICAgICAgICAgICAgZi5zZWVrKDAsIDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgNTEyKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5zaXplKCksIDUxMikKKworICAgICAgICAgICAgbS5jbG9zZSgpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2FjY2Vzc19wYXJhbWV0ZXIoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgImFjY2VzcyIga2V5d29yZCBwYXJhbWV0ZXIKKyAgICAgICAgbWFwc2l6ZSA9IDEwCisgICAgICAgIG9wZW4oVEVTVEZOLCAid2IiKS53cml0ZSgiYSIqbWFwc2l6ZSkKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAicmIiKQorICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIG1hcHNpemUsIGFjY2Vzcz1tbWFwLkFDQ0VTU19SRUFEKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bOl0sICdhJyptYXBzaXplLCAiUmVhZG9ubHkgbWVtb3J5IG1hcCBkYXRhIGluY29ycmVjdC4iKQorCisgICAgICAgICMgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIHNsaWNlIGFzc2lnbmVkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1bOl0gPSAnYicqbWFwc2l6ZQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJBYmxlIHRvIHdyaXRlIHRvIHJlYWRvbmx5IG1lbW9yeSBtYXAiKQorCisgICAgICAgICMgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIGl0ZW0gYXNzaWduZWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbVswXSA9ICdiJworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJBYmxlIHRvIHdyaXRlIHRvIHJlYWRvbmx5IG1lbW9yeSBtYXAiKQorCisgICAgICAgICMgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIHdyaXRlKCkgdG8KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbS5zZWVrKDAsMCkKKyAgICAgICAgICAgIG0ud3JpdGUoJ2FiYycpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkFibGUgdG8gd3JpdGUgdG8gcmVhZG9ubHkgbWVtb3J5IG1hcCIpCisKKyAgICAgICAgIyBFbnN1cmluZyB0aGF0IHJlYWRvbmx5IG1tYXAgY2FuJ3QgYmUgd3JpdGVfYnl0ZSgpIHRvCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG0uc2VlaygwLDApCisgICAgICAgICAgICBtLndyaXRlX2J5dGUoJ2QnKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJBYmxlIHRvIHdyaXRlIHRvIHJlYWRvbmx5IG1lbW9yeSBtYXAiKQorCisgICAgICAgICMgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIHJlc2l6ZWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbS5yZXNpemUoMiptYXBzaXplKQorICAgICAgICBleGNlcHQgU3lzdGVtRXJyb3I6ICAgIyByZXNpemUgaXMgbm90IHVuaXZlcnNhbGx5IHN1cHBvcnRlZAorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJBYmxlIHRvIHJlc2l6ZSByZWFkb25seSBtZW1vcnkgbWFwIikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGRlbCBtLCBmCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlbihURVNURk4sICJyYiIpLnJlYWQoKSwgJ2EnKm1hcHNpemUsCisgICAgICAgICAgICAgICAiUmVhZG9ubHkgbWVtb3J5IG1hcCBkYXRhIGZpbGUgd2FzIG1vZGlmaWVkIikKKworICAgICAgICAjIE9wZW5pbmcgbW1hcCB3aXRoIHNpemUgdG9vIGJpZworICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInIrYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbWFwc2l6ZSsxKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICMgd2UgZG8gbm90IGV4cGVjdCBhIFZhbHVlRXJyb3Igb24gV2luZG93cworICAgICAgICAgICAgIyBDQVVUSU9OOiAgVGhpcyBhbHNvIGNoYW5nZXMgdGhlIHNpemUgb2YgdGhlIGZpbGUgb24gZGlzaywgYW5kCisgICAgICAgICAgICAjIGxhdGVyIHRlc3RzIGFzc3VtZSB0aGF0IHRoZSBsZW5ndGggaGFzbid0IGNoYW5nZWQuICBXZSBuZWVkIHRvCisgICAgICAgICAgICAjIHJlcGFpciB0aGF0LgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiT3BlbmluZyBtbWFwIHdpdGggc2l6ZSsxIHNob3VsZCB3b3JrIG9uIFdpbmRvd3MuIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgd2UgZXhwZWN0IGEgVmFsdWVFcnJvciBvbiBVbml4LCBidXQgbm90IG9uIFdpbmRvd3MKKyAgICAgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJPcGVuaW5nIG1tYXAgd2l0aCBzaXplKzEgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IuIikKKyAgICAgICAgICAgIG0uY2xvc2UoKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgIyBSZXBhaXIgZGFtYWdlIGZyb20gdGhlIHJlc2l6aW5nIHRlc3QuCisgICAgICAgICAgICBmID0gb3BlbihURVNURk4sICdyK2InKQorICAgICAgICAgICAgZi50cnVuY2F0ZShtYXBzaXplKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgIyBPcGVuaW5nIG1tYXAgd2l0aCBhY2Nlc3M9QUNDRVNTX1dSSVRFCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInIrYiIpCisgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbWFwc2l6ZSwgYWNjZXNzPW1tYXAuQUNDRVNTX1dSSVRFKQorICAgICAgICAjIE1vZGlmeWluZyB3cml0ZS10aHJvdWdoIG1lbW9yeSBtYXAKKyAgICAgICAgbVs6XSA9ICdjJyptYXBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVs6XSwgJ2MnKm1hcHNpemUsCisgICAgICAgICAgICAgICAiV3JpdGUtdGhyb3VnaCBtZW1vcnkgbWFwIG1lbW9yeSBub3QgdXBkYXRlZCBwcm9wZXJseS4iKQorICAgICAgICBtLmZsdXNoKCkKKyAgICAgICAgbS5jbG9zZSgpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmID0gb3BlbihURVNURk4sICdyYicpCisgICAgICAgIHN0dWZmID0gZi5yZWFkKCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3R1ZmYsICdjJyptYXBzaXplLAorICAgICAgICAgICAgICAgIldyaXRlLXRocm91Z2ggbWVtb3J5IG1hcCBkYXRhIGZpbGUgbm90IHVwZGF0ZWQgcHJvcGVybHkuIikKKworICAgICAgICAjIE9wZW5pbmcgbW1hcCB3aXRoIGFjY2Vzcz1BQ0NFU1NfQ09QWQorICAgICAgICBmID0gb3BlbihURVNURk4sICJyK2IiKQorICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIG1hcHNpemUsIGFjY2Vzcz1tbWFwLkFDQ0VTU19DT1BZKQorICAgICAgICAjIE1vZGlmeWluZyBjb3B5LW9uLXdyaXRlIG1lbW9yeSBtYXAKKyAgICAgICAgbVs6XSA9ICdkJyptYXBzaXplCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVs6XSwgJ2QnICogbWFwc2l6ZSwKKyAgICAgICAgICAgICAgICJDb3B5LW9uLXdyaXRlIG1lbW9yeSBtYXAgZGF0YSBub3Qgd3JpdHRlbiBjb3JyZWN0bHkuIikKKyAgICAgICAgbS5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlbihURVNURk4sICJyYiIpLnJlYWQoKSwgJ2MnKm1hcHNpemUsCisgICAgICAgICAgICAgICAiQ29weS1vbi13cml0ZSB0ZXN0IGRhdGEgZmlsZSBzaG91bGQgbm90IGJlIG1vZGlmaWVkLiIpCisgICAgICAgICMgRW5zdXJpbmcgY29weS1vbi13cml0ZSBtYXBzIGNhbm5vdCBiZSByZXNpemVkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbS5yZXNpemUsIDIqbWFwc2l6ZSkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGRlbCBtLCBmCisKKyAgICAgICAgIyBFbnN1cmluZyBpbnZhbGlkIGFjY2VzcyBwYXJhbWV0ZXIgcmFpc2VzIGV4Y2VwdGlvbgorICAgICAgICBmID0gb3BlbihURVNURk4sICJyK2IiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtbWFwLm1tYXAsIGYuZmlsZW5vKCksIG1hcHNpemUsIGFjY2Vzcz00KQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6CisgICAgICAgICAgICAjIFRyeSBpbmNvbXBhdGlibGUgZmxhZ3MsIHByb3QgYW5kIGFjY2VzcyBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAicitiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1tYXAubW1hcCwgZi5maWxlbm8oKSwgbWFwc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzPW1tYXAuTUFQX1BSSVZBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90PW1tYXAuUFJPVF9SRUFELCBhY2Nlc3M9bW1hcC5BQ0NFU1NfV1JJVEUpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgIyBUcnkgd3JpdGluZyB3aXRoIFBST1RfRVhFQyBhbmQgd2l0aG91dCBQUk9UX1dSSVRFCisgICAgICAgICAgICBwcm90ID0gbW1hcC5QUk9UX1JFQUQgfCBnZXRhdHRyKG1tYXAsICdQUk9UX0VYRUMnLCAwKQorICAgICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgInIrYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCBtYXBzaXplLCBwcm90PXByb3QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtLndyaXRlLCBiImFiY2RlZiIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtLndyaXRlX2J5dGUsIDApCisgICAgICAgICAgICAgICAgbS5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9iYWRfZmlsZV9kZXNjKHNlbGYpOgorICAgICAgICAjIFRyeSBvcGVuaW5nIGEgYmFkIGZpbGUgZGVzY3JpcHRvci4uLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtbWFwLmVycm9yLCBtbWFwLm1tYXAsIC0yLCA0MDk2KQorCisgICAgZGVmIHRlc3RfdG91Z2hlcl9maW5kKHNlbGYpOgorICAgICAgICAjIERvIGEgdG91Z2hlciAuZmluZCgpIHRlc3QuICBTRiBidWcgNTE1OTQzIHBvaW50ZWQgb3V0IHRoYXQsIGluIDIuMiwKKyAgICAgICAgIyBzZWFyY2hpbmcgZm9yIGRhdGEgd2l0aCBlbWJlZGRlZCBcMCBieXRlcyBkaWRuJ3Qgd29yay4KKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndysnKQorCisgICAgICAgIGRhdGEgPSAnYWFiYWFjXHgwMGRlZWZceDAwXHgwMGFhXHgwMCcKKyAgICAgICAgbiA9IGxlbihkYXRhKQorICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgIGYuZmx1c2goKQorICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIG4pCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGZvciBzdGFydCBpbiByYW5nZShuKzEpOgorICAgICAgICAgICAgZm9yIGZpbmlzaCBpbiByYW5nZShzdGFydCwgbisxKToKKyAgICAgICAgICAgICAgICBzbGljZSA9IGRhdGFbc3RhcnQgOiBmaW5pc2hdCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmZpbmQoc2xpY2UpLCBkYXRhLmZpbmQoc2xpY2UpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5maW5kKHNsaWNlICsgJ3gnKSwgLTEpCisgICAgICAgIG0uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZmluZF9lbmQoc2VsZik6CisgICAgICAgICMgdGVzdCB0aGUgbmV3ICdlbmQnIHBhcmFtZXRlciB3b3JrcyBhcyBleHBlY3RlZAorICAgICAgICBmID0gb3BlbihURVNURk4sICd3KycpCisgICAgICAgIGRhdGEgPSAnb25lIHR3byBvbmVzJworICAgICAgICBuID0gbGVuKGRhdGEpCisgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICAgICAgZi5mbHVzaCgpCisgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmZpbmQoJ29uZScpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZmluZCgnb25lcycpLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZmluZCgnb25lJywgMCwgLTEpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZmluZCgnb25lJywgMSksIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5maW5kKCdvbmUnLCAxLCAtMSksIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5maW5kKCdvbmUnLCAxLCAtMiksIC0xKQorCisKKyAgICBkZWYgdGVzdF9yZmluZChzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRoZSBuZXcgJ2VuZCcgcGFyYW1ldGVyIHdvcmtzIGFzIGV4cGVjdGVkCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3crJykKKyAgICAgICAgZGF0YSA9ICdvbmUgdHdvIG9uZXMnCisgICAgICAgIG4gPSBsZW4oZGF0YSkKKyAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICBmLmZsdXNoKCkKKyAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCBuKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucmZpbmQoJ29uZScpLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucmZpbmQoJ29uZSAnKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJmaW5kKCdvbmUnLCAwLCAtMSksIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5yZmluZCgnb25lJywgMCwgLTIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucmZpbmQoJ29uZScsIDEsIC0xKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnJmaW5kKCdvbmUnLCAxLCAtMiksIC0xKQorCisKKyAgICBkZWYgdGVzdF9kb3VibGVfY2xvc2Uoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIGEgZG91YmxlIGNsb3NlIGRvZXNuJ3QgY3Jhc2ggb24gU29sYXJpcyAoQnVnIyA2NjU5MTMpCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3crJykKKworICAgICAgICBmLndyaXRlKDIqKjE2ICogJ2EnKSAjIEFyYml0cmFyeSBjaGFyYWN0ZXIKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOKQorICAgICAgICBtZiA9IG1tYXAubW1hcChmLmZpbGVubygpLCAyKioxNiwgYWNjZXNzPW1tYXAuQUNDRVNTX1JFQUQpCisgICAgICAgIG1mLmNsb3NlKCkKKyAgICAgICAgbWYuY2xvc2UoKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2VudGlyZV9maWxlKHNlbGYpOgorICAgICAgICAjIHRlc3QgbWFwcGluZyBvZiBlbnRpcmUgZmlsZSBieSBwYXNzaW5nIDAgZm9yIG1hcCBsZW5ndGgKKyAgICAgICAgaWYgaGFzYXR0cihvcywgInN0YXQiKToKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgIncrIikKKworICAgICAgICAgICAgZi53cml0ZSgyKioxNiAqICdtJykgIyBBcmJpdHJhcnkgY2hhcmFjdGVyCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAicmIrIikKKyAgICAgICAgICAgIG1mID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtZiksIDIqKjE2LCAiTWFwIHNpemUgc2hvdWxkIGVxdWFsIGZpbGUgc2l6ZS4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZi5yZWFkKDIqKjE2KSwgMioqMTYgKiAibSIpCisgICAgICAgICAgICBtZi5jbG9zZSgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2xlbmd0aF8wX29mZnNldChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTA5MTY6IHRlc3QgbWFwcGluZyBvZiByZW1haW5kZXIgb2YgZmlsZSBieSBwYXNzaW5nIDAgZm9yCisgICAgICAgICMgbWFwIGxlbmd0aCB3aXRoIGFuIG9mZnNldCBkb2Vzbid0IGNhdXNlIGEgc2VnZmF1bHQuCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9zLCAic3RhdCIpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgibmVlZHMgb3Muc3RhdCIpCisgICAgICAgICMgTk9URTogYWxsb2NhdGlvbiBncmFudWxhcml0eSBpcyBjdXJyZW50bHkgNjU1MzYgdW5kZXIgV2luNjQsCisgICAgICAgICMgYW5kIHRoZXJlZm9yZSB0aGUgbWluaW11bSBvZmZzZXQgYWxpZ25tZW50LgorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgoNjU1MzYgKiAyKSAqIGInbScpICMgQXJiaXRyYXJ5IGNoYXJhY3RlcgorCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBtZiA9IG1tYXAubW1hcChmLmZpbGVubygpLCAwLCBvZmZzZXQ9NjU1MzYsIGFjY2Vzcz1tbWFwLkFDQ0VTU19SRUFEKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG1mLl9fZ2V0aXRlbV9fLCA4MDAwMCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgbWYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfbGVuZ3RoXzBfbGFyZ2Vfb2Zmc2V0KHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMDk1OTogdGVzdCBtYXBwaW5nIG9mIGEgZmlsZSBieSBwYXNzaW5nIDAgZm9yCisgICAgICAgICMgbWFwIGxlbmd0aCB3aXRoIGEgbGFyZ2Ugb2Zmc2V0IGRvZXNuJ3QgY2F1c2UgYSBzZWdmYXVsdC4KKyAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICJzdGF0Iik6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJuZWVkcyBvcy5zdGF0IikKKworICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgxMTU2OTkgKiBiJ20nKSAjIEFyYml0cmFyeSBjaGFyYWN0ZXIKKworICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAidytiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1tYXAubW1hcCwgZi5maWxlbm8oKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0yMTQ3NDE4MTEyKQorCisgICAgZGVmIHRlc3RfbW92ZShzZWxmKToKKyAgICAgICAgIyBtYWtlIG1vdmUgd29ya3MgZXZlcnl3aGVyZSAoNjQtYml0IGZvcm1hdCBwcm9ibGVtIGVhcmxpZXIpCisgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgJ3crJykKKworICAgICAgICBmLndyaXRlKCJBQkNERWFiY2RlIikgIyBBcmJpdHJhcnkgY2hhcmFjdGVyCisgICAgICAgIGYuZmx1c2goKQorCisgICAgICAgIG1mID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIDEwKQorICAgICAgICBtZi5tb3ZlKDUsIDAsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWZbOl0sICJBQkNERUFCQ0RFIiwgIk1hcCBtb3ZlIHNob3VsZCBoYXZlIGR1cGxpY2F0ZWQgZnJvbnQgNSIpCisgICAgICAgIG1mLmNsb3NlKCkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgIyBtb3JlIGV4Y2Vzc2l2ZSB0ZXN0CisgICAgICAgIGRhdGEgPSAiMDEyMzQ1Njc4OSIKKyAgICAgICAgZm9yIGRlc3QgaW4gcmFuZ2UobGVuKGRhdGEpKToKKyAgICAgICAgICAgIGZvciBzcmMgaW4gcmFuZ2UobGVuKGRhdGEpKToKKyAgICAgICAgICAgICAgICBmb3IgY291bnQgaW4gcmFuZ2UobGVuKGRhdGEpIC0gbWF4KGRlc3QsIHNyYykpOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGRhdGFbOmRlc3RdICsgZGF0YVtzcmM6c3JjK2NvdW50XSArIGRhdGFbZGVzdCtjb3VudDpdCisgICAgICAgICAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAoLTEsIGxlbihkYXRhKSkKKyAgICAgICAgICAgICAgICAgICAgbVs6XSA9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgbS5tb3ZlKGRlc3QsIHNyYywgY291bnQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVs6XSwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgICAgIG0uY2xvc2UoKQorCisgICAgICAgICMgc2VnZmF1bHQgdGVzdCAoSXNzdWUgNTM4NykKKyAgICAgICAgbSA9IG1tYXAubW1hcCgtMSwgMTAwKQorICAgICAgICBvZmZzZXRzID0gWy0xMDAsIC0xLCAwLCAxLCAxMDBdCisgICAgICAgIGZvciBzb3VyY2UsIGRlc3QsIHNpemUgaW4gaXRlcnRvb2xzLnByb2R1Y3Qob2Zmc2V0cywgb2Zmc2V0cywgb2Zmc2V0cyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbS5tb3ZlKHNvdXJjZSwgZGVzdCwgc2l6ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBvZmZzZXRzID0gWygtMSwgLTEsIC0xKSwgKC0xLCAtMSwgMCksICgtMSwgMCwgLTEpLCAoMCwgLTEsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAoLTEsIDAsIDApLCAoMCwgLTEsIDApLCAoMCwgMCwgLTEpXQorICAgICAgICBmb3Igc291cmNlLCBkZXN0LCBzaXplIGluIG9mZnNldHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLm1vdmUsIHNvdXJjZSwgZGVzdCwgc2l6ZSkKKworICAgICAgICBtLmNsb3NlKCkKKworICAgICAgICBtID0gbW1hcC5tbWFwKC0xLCAxKSAjIHNpbmdsZSBieXRlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0ubW92ZSwgMCwgMCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5tb3ZlLCAxLCAwLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLm1vdmUsIDAsIDEsIDEpCisgICAgICAgIG0ubW92ZSgwLCAwLCAxKQorICAgICAgICBtLm1vdmUoMCwgMCwgMCkKKworCisgICAgZGVmIHRlc3RfYW5vbnltb3VzKHNlbGYpOgorICAgICAgICAjIGFub255bW91cyBtbWFwLm1tYXAoLTEsIFBBR0UpCisgICAgICAgIG0gPSBtbWFwLm1tYXAoLTEsIFBBR0VTSVpFKQorICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoUEFHRVNJWkUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtW3hdLCAnXDAnLCAiYW5vbnltb3VzbHkgbW1hcCdlZCBjb250ZW50cyBzaG91bGQgYmUgemVybyIpCisKKyAgICAgICAgZm9yIHggaW4geHJhbmdlKFBBR0VTSVpFKToKKyAgICAgICAgICAgIG1beF0gPSBjaCA9IGNocih4ICYgMjU1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtW3hdLCBjaCkKKworICAgIGRlZiB0ZXN0X2V4dGVuZGVkX2dldHNsaWNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgZXh0ZW5kZWQgc2xpY2luZyBieSBjb21wYXJpbmcgd2l0aCBsaXN0IHNsaWNpbmcuCisgICAgICAgIHMgPSAiIi5qb2luKGNocihjKSBmb3IgYyBpbiByZXZlcnNlZChyYW5nZSgyNTYpKSkKKyAgICAgICAgbSA9IG1tYXAubW1hcCgtMSwgbGVuKHMpKQorICAgICAgICBtWzpdID0gcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bOl0sIHMpCisgICAgICAgIGluZGljZXMgPSAoMCwgTm9uZSwgMSwgMywgMTksIDMwMCwgLTEsIC0yLCAtMzEsIC0zMDApCisgICAgICAgIGZvciBzdGFydCBpbiBpbmRpY2VzOgorICAgICAgICAgICAgZm9yIHN0b3AgaW4gaW5kaWNlczoKKyAgICAgICAgICAgICAgICAjIFNraXAgc3RlcCAwIChpbnZhbGlkKQorICAgICAgICAgICAgICAgIGZvciBzdGVwIGluIGluZGljZXNbMTpdOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bc3RhcnQ6c3RvcDpzdGVwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzW3N0YXJ0OnN0b3A6c3RlcF0pCisKKyAgICBkZWYgdGVzdF9leHRlbmRlZF9zZXRfZGVsX3NsaWNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgZXh0ZW5kZWQgc2xpY2luZyBieSBjb21wYXJpbmcgd2l0aCBsaXN0IHNsaWNpbmcuCisgICAgICAgIHMgPSAiIi5qb2luKGNocihjKSBmb3IgYyBpbiByZXZlcnNlZChyYW5nZSgyNTYpKSkKKyAgICAgICAgbSA9IG1tYXAubW1hcCgtMSwgbGVuKHMpKQorICAgICAgICBpbmRpY2VzID0gKDAsIE5vbmUsIDEsIDMsIDE5LCAzMDAsIC0xLCAtMiwgLTMxLCAtMzAwKQorICAgICAgICBmb3Igc3RhcnQgaW4gaW5kaWNlczoKKyAgICAgICAgICAgIGZvciBzdG9wIGluIGluZGljZXM6CisgICAgICAgICAgICAgICAgIyBTa2lwIGludmFsaWQgc3RlcCAwCisgICAgICAgICAgICAgICAgZm9yIHN0ZXAgaW4gaW5kaWNlc1sxOl06CisgICAgICAgICAgICAgICAgICAgIG1bOl0gPSBzCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVs6XSwgcykKKyAgICAgICAgICAgICAgICAgICAgTCA9IGxpc3QocykKKyAgICAgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBhIHNsaWNlIG9mIGV4YWN0bHkgdGhlIHJpZ2h0IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIyBidXQgd2l0aCBkaWZmZXJlbnQgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IExbc3RhcnQ6c3RvcDpzdGVwXQorICAgICAgICAgICAgICAgICAgICBkYXRhID0gIiIuam9pbihyZXZlcnNlZChkYXRhKSkKKyAgICAgICAgICAgICAgICAgICAgTFtzdGFydDpzdG9wOnN0ZXBdID0gZGF0YQorICAgICAgICAgICAgICAgICAgICBtW3N0YXJ0OnN0b3A6c3RlcF0gPSBkYXRhCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVs6XSwgIiIuam9pbihMKSkKKworICAgIGRlZiBtYWtlX21tYXBfZmlsZSAoc2VsZiwgZiwgaGFsZnNpemUpOgorICAgICAgICAjIFdyaXRlIDIgcGFnZXMgd29ydGggb2YgZGF0YSB0byB0aGUgZmlsZQorICAgICAgICBmLndyaXRlICgnXDAnICogaGFsZnNpemUpCisgICAgICAgIGYud3JpdGUgKCdmb28nKQorICAgICAgICBmLndyaXRlICgnXDAnICogKGhhbGZzaXplIC0gMykpCisgICAgICAgIGYuZmx1c2ggKCkKKyAgICAgICAgcmV0dXJuIG1tYXAubW1hcCAoZi5maWxlbm8oKSwgMCkKKworICAgIGRlZiB0ZXN0X2VtcHR5X2ZpbGUgKHNlbGYpOgorICAgICAgICBmID0gb3BlbiAoVEVTVEZOLCAndytiJykKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJyYiIpIGFzIGYgOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMCwgYWNjZXNzPW1tYXAuQUNDRVNTX1JFQUQpCisgICAgICAgICAgICAgICAgbS5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgbm90IGhhdmUgYmVlbiBhYmxlIHRvIG1tYXAgZW1wdHkgZmlsZSIpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5tZXNzYWdlLCAiY2Fubm90IG1tYXAgYW4gZW1wdHkgZmlsZSIpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmV4cGVjdGVkIGV4Y2VwdGlvbjogIiArIHN0cihlKSkKKworICAgIGRlZiB0ZXN0X29mZnNldCAoc2VsZik6CisgICAgICAgIGYgPSBvcGVuIChURVNURk4sICd3K2InKQorCisgICAgICAgIHRyeTogIyB1bmxpbmsgVEVTVEZOIG5vIG1hdHRlciB3aGF0CisgICAgICAgICAgICBoYWxmc2l6ZSA9IG1tYXAuQUxMT0NBVElPTkdSQU5VTEFSSVRZCisgICAgICAgICAgICBtID0gc2VsZi5tYWtlX21tYXBfZmlsZSAoZiwgaGFsZnNpemUpCisgICAgICAgICAgICBtLmNsb3NlICgpCisgICAgICAgICAgICBmLmNsb3NlICgpCisKKyAgICAgICAgICAgIG1hcHNpemUgPSBoYWxmc2l6ZSAqIDIKKyAgICAgICAgICAgICMgVHJ5IGludmFsaWQgb2Zmc2V0CisgICAgICAgICAgICBmID0gb3BlbihURVNURk4sICJyK2IiKQorICAgICAgICAgICAgZm9yIG9mZnNldCBpbiBbLTIsIC0xLCBOb25lXToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbWFwc2l6ZSwgb2Zmc2V0PW9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCAxKQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgVHlwZUVycm9yLCBPdmVyZmxvd0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgMCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICAjIFRyeSB2YWxpZCBvZmZzZXQsIGhvcGVmdWxseSA4MTkyIHdvcmtzIG9uIGFsbCBPU2VzCisgICAgICAgICAgICBmID0gb3BlbihURVNURk4sICJyK2IiKQorICAgICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCBtYXBzaXplIC0gaGFsZnNpemUsIG9mZnNldD1oYWxmc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVswOjNdLCAnZm9vJykKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICAjIFRyeSByZXNpemluZyBtYXAKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtLnJlc2l6ZSg1MTIpCisgICAgICAgICAgICBleGNlcHQgU3lzdGVtRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIHJlc2l6ZSgpIGlzIHN1cHBvcnRlZAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0pLCA1MTIpCisgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IHdlIGNhbiBubyBsb25nZXIgc2VlayBiZXlvbmQgdGhlIG5ldyBzaXplLgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG0uc2VlaywgNTEzLCAwKQorICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgY29udGVudCBpcyBub3QgY2hhbmdlZAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVswOjNdLCAnZm9vJykKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgdW5kZXJseWluZyBmaWxlIGlzIHRydW5jYXRlZCB0b28KKyAgICAgICAgICAgICAgICBmID0gb3BlbihURVNURk4pCisgICAgICAgICAgICAgICAgZi5zZWVrKDAsIDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgaGFsZnNpemUgKyA1MTIpCisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnNpemUoKSwgaGFsZnNpemUgKyA1MTIpCisKKyAgICAgICAgICAgIG0uY2xvc2UoKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIGFub25fbW1hcChtbWFwLm1tYXApOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oa2xhc3MsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1tYXAubW1hcC5fX25ld19fKGtsYXNzLCAtMSwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBhbm9uX21tYXAoUEFHRVNJWkUpCisKKyAgICBkZWYgdGVzdF9wcm90X3JlYWRvbmx5KHNlbGYpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihtbWFwLCAnUFJPVF9SRUFEJyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbWFwc2l6ZSA9IDEwCisgICAgICAgIG9wZW4oVEVTVEZOLCAid2IiKS53cml0ZSgiYSIqbWFwc2l6ZSkKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAicmIiKQorICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIG1hcHNpemUsIHByb3Q9bW1hcC5QUk9UX1JFQUQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbS53cml0ZSwgImZvbyIpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKG1tYXAuZXJyb3IsIEVudmlyb25tZW50RXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJtbWFwLmVycm9yIiwgc3RyKG1tYXAuZXJyb3IpKQorCisgICAgZGVmIHRlc3RfaW9fbWV0aG9kcyhzZWxmKToKKyAgICAgICAgZGF0YSA9ICIwMTIzNDU2Nzg5IgorICAgICAgICBvcGVuKFRFU1RGTiwgIndiIikud3JpdGUoIngiKmxlbihkYXRhKSkKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAicitiIikKKyAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCBsZW4oZGF0YSkpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAjIFRlc3Qgd3JpdGVfYnl0ZSgpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oZGF0YSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRlbGwoKSwgaSkKKyAgICAgICAgICAgIG0ud3JpdGVfYnl0ZShkYXRhW2ldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRlbGwoKSwgaSsxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtLndyaXRlX2J5dGUsICJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzpdLCBkYXRhKQorICAgICAgICAjIFRlc3QgcmVhZF9ieXRlKCkKKyAgICAgICAgbS5zZWVrKDApCisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oZGF0YSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRlbGwoKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5yZWFkX2J5dGUoKSwgZGF0YVtpXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS50ZWxsKCksIGkrMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS5yZWFkX2J5dGUpCisgICAgICAgICMgVGVzdCByZWFkKCkKKyAgICAgICAgbS5zZWVrKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5yZWFkKDMpLCAiMzQ1IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRlbGwoKSwgNikKKyAgICAgICAgIyBUZXN0IHdyaXRlKCkKKyAgICAgICAgbS5zZWVrKDMpCisgICAgICAgIG0ud3JpdGUoImJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS50ZWxsKCksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVs6XSwgIjAxMmJhcjY3ODkiKQorICAgICAgICBtLnNlZWsoOCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbS53cml0ZSwgImJhciIpCisKKyAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgIGRlZiB0ZXN0X3RhZ25hbWUoc2VsZik6CisgICAgICAgICAgICBkYXRhMSA9ICIwMTIzNDU2Nzg5IgorICAgICAgICAgICAgZGF0YTIgPSAiYWJjZGVmZ2hpaiIKKyAgICAgICAgICAgIGFzc2VydCBsZW4oZGF0YTEpID09IGxlbihkYXRhMikKKworICAgICAgICAgICAgIyBUZXN0IHNhbWUgdGFnCisgICAgICAgICAgICBtMSA9IG1tYXAubW1hcCgtMSwgbGVuKGRhdGExKSwgdGFnbmFtZT0iZm9vIikKKyAgICAgICAgICAgIG0xWzpdID0gZGF0YTEKKyAgICAgICAgICAgIG0yID0gbW1hcC5tbWFwKC0xLCBsZW4oZGF0YTIpLCB0YWduYW1lPSJmb28iKQorICAgICAgICAgICAgbTJbOl0gPSBkYXRhMgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMVs6XSwgZGF0YTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0yWzpdLCBkYXRhMikKKyAgICAgICAgICAgIG0yLmNsb3NlKCkKKyAgICAgICAgICAgIG0xLmNsb3NlKCkKKworICAgICAgICAgICAgIyBUZXN0IGRpZmZlcmVudCB0YWcKKyAgICAgICAgICAgIG0xID0gbW1hcC5tbWFwKC0xLCBsZW4oZGF0YTEpLCB0YWduYW1lPSJmb28iKQorICAgICAgICAgICAgbTFbOl0gPSBkYXRhMQorICAgICAgICAgICAgbTIgPSBtbWFwLm1tYXAoLTEsIGxlbihkYXRhMiksIHRhZ25hbWU9ImJvbyIpCisgICAgICAgICAgICBtMls6XSA9IGRhdGEyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0xWzpdLCBkYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTJbOl0sIGRhdGEyKQorICAgICAgICAgICAgbTIuY2xvc2UoKQorICAgICAgICAgICAgbTEuY2xvc2UoKQorCisgICAgICAgIGRlZiB0ZXN0X2NyYXNoZXJfb25fd2luZG93cyhzZWxmKToKKyAgICAgICAgICAgICMgU2hvdWxkIG5vdCBjcmFzaCAoSXNzdWUgMTczMzk4NikKKyAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAoLTEsIDEwMDAsIHRhZ25hbWU9ImZvbyIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW1hcC5tbWFwKC0xLCA1MDAwLCB0YWduYW1lPSJmb28iKVs6XSAjIHNhbWUgdGFnbmFtZSwgYnV0IGxhcmdlciBzaXplCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgbS5jbG9zZSgpCisKKyAgICAgICAgICAgICMgU2hvdWxkIG5vdCBjcmFzaCAoSXNzdWUgNTM4NSkKKyAgICAgICAgICAgIG9wZW4oVEVTVEZOLCAid2IiKS53cml0ZSgieCIqMTApCisgICAgICAgICAgICBmID0gb3BlbihURVNURk4sICJyK2IiKQorICAgICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCAwKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbS5yZXNpemUoMCkgIyB3aWxsIHJhaXNlIFdpbmRvd3NFcnJvcgorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtWzpdCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgbS5jbG9zZSgpCisKKyAgICAgICAgZGVmIHRlc3RfaW52YWxpZF9kZXNjcmlwdG9yKHNlbGYpOgorICAgICAgICAgICAgIyBzb2NrZXQgZmlsZSBkZXNjcmlwdG9ycyBhcmUgdmFsaWQsIGJ1dCBvdXQgb2YgcmFuZ2UKKyAgICAgICAgICAgICMgZm9yIF9nZXRfb3NmaGFuZGxlLCBjYXVzaW5nIGEgY3Jhc2ggd2hlbiB2YWxpZGF0aW5nIHRoZQorICAgICAgICAgICAgIyBwYXJhbWV0ZXJzIHRvIF9nZXRfb3NmaGFuZGxlLgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMobW1hcC5lcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAocy5maWxlbm8oKSwgMTApCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisKK2NsYXNzIExhcmdlTW1hcFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKworICAgIGRlZiBfbWFrZV90ZXN0X2ZpbGUoc2VsZiwgbnVtX3plcm9lcywgdGFpbCk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbicgb3Igc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgcmVxdWlyZXMoJ2xhcmdlZmlsZScsCisgICAgICAgICAgICAgICAgJ3Rlc3QgcmVxdWlyZXMgJXMgYnl0ZXMgYW5kIGEgbG9uZyB0aW1lIHRvIHJ1bicgJSBzdHIoMHgxODAwMDAwMDApKQorICAgICAgICBmID0gb3BlbihURVNURk4sICd3K2InKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLnNlZWsobnVtX3plcm9lcykKKyAgICAgICAgICAgIGYud3JpdGUodGFpbCkKKyAgICAgICAgICAgIGYuZmx1c2goKQorICAgICAgICBleGNlcHQgKElPRXJyb3IsIE92ZXJmbG93RXJyb3IpOgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZmlsZXN5c3RlbSBkb2VzIG5vdCBoYXZlIGxhcmdlZmlsZSBzdXBwb3J0IikKKyAgICAgICAgcmV0dXJuIGYKKworICAgIGRlZiB0ZXN0X2xhcmdlX29mZnNldChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLl9tYWtlX3Rlc3RfZmlsZSgweDE0RkZGRkZGRiwgYiIgIikgYXMgZjoKKyAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMCwgb2Zmc2V0PTB4MTQwMDAwMDAwLCBhY2Nlc3M9bW1hcC5BQ0NFU1NfUkVBRCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bMHhGRkZGRkZGXSwgYiIgIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgbS5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9sYXJnZV9maWxlc2l6ZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLl9tYWtlX3Rlc3RfZmlsZSgweDE3RkZGRkZGRiwgYiIgIikgYXMgZjoKKyAgICAgICAgICAgIGlmIHN5cy5tYXhzaXplIDwgMHgxODAwMDAwMDA6CisgICAgICAgICAgICAgICAgIyBPbiAzMiBiaXQgcGxhdGZvcm1zIHRoZSBmaWxlIGlzIGxhcmdlciB0aGFuIHN5cy5tYXhzaXplIHNvCisgICAgICAgICAgICAgICAgIyBtYXBwaW5nIHRoZSB3aG9sZSBmaWxlIHNob3VsZCBmYWlsIC0tIElzc3VlICMxNjc0MworICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG1tYXAubW1hcChmLmZpbGVubygpLCAweDE4MDAwMDAwMCwgYWNjZXNzPW1tYXAuQUNDRVNTX1JFQUQpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgbW1hcC5tbWFwKGYuZmlsZW5vKCksIDAsIGFjY2Vzcz1tbWFwLkFDQ0VTU19SRUFEKQorICAgICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCAweDEwMDAwLCBhY2Nlc3M9bW1hcC5BQ0NFU1NfUkVBRCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uc2l6ZSgpLCAweDE4MDAwMDAwMCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgbS5jbG9zZSgpCisKKyAgICAjIElzc3VlIDExMjc3OiBtbWFwKCkgd2l0aCBsYXJnZSAofjRHQikgc3BhcnNlIGZpbGVzIGNyYXNoZXMgb24gT1MgWC4KKworICAgIGRlZiBfdGVzdF9hcm91bmRfYm91bmRhcnkoc2VsZiwgYm91bmRhcnkpOgorICAgICAgICB0YWlsID0gYicgIERFQVJkZWFyICAnCisgICAgICAgIHN0YXJ0ID0gYm91bmRhcnkgLSBsZW4odGFpbCkgLy8gMgorICAgICAgICBlbmQgPSBzdGFydCArIGxlbih0YWlsKQorICAgICAgICB3aXRoIHNlbGYuX21ha2VfdGVzdF9maWxlKHN0YXJ0LCB0YWlsKSBhcyBmOgorICAgICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCAwLCBhY2Nlc3M9bW1hcC5BQ0NFU1NfUkVBRCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bc3RhcnQ6ZW5kXSwgdGFpbCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgbS5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMubWF4c2l6ZSA+IF80RywgInRlc3QgY2Fubm90IHJ1biBvbiAzMi1iaXQgc3lzdGVtcyIpCisgICAgZGVmIHRlc3RfYXJvdW5kXzJHQihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9hcm91bmRfYm91bmRhcnkoXzJHKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLm1heHNpemUgPiBfNEcsICJ0ZXN0IGNhbm5vdCBydW4gb24gMzItYml0IHN5c3RlbXMiKQorICAgIGRlZiB0ZXN0X2Fyb3VuZF80R0Ioc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYXJvdW5kX2JvdW5kYXJ5KF80RykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KE1tYXBUZXN0cywgTGFyZ2VNbWFwVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21vZHVsZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21vZHVsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWVhZjNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbW9kdWxlLnB5CkBAIC0wLDAgKzEsODUgQEAKKyMgVGVzdCB0aGUgbW9kdWxlIHR5cGUKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBnY19jb2xsZWN0CisKK2ltcG9ydCBzeXMKK01vZHVsZVR5cGUgPSB0eXBlKHN5cykKKworY2xhc3MgTW9kdWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3VuaW5pdGlhbGl6ZWQoc2VsZik6CisgICAgICAgICMgQW4gdW5pbml0aWFsaXplZCBtb2R1bGUgaGFzIG5vIF9fZGljdF9fIG9yIF9fbmFtZV9fLAorICAgICAgICAjIGFuZCBfX2RvY19fIGlzIE5vbmUKKyAgICAgICAgZm9vID0gTW9kdWxlVHlwZS5fX25ld19fKE1vZHVsZVR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb28uX19kaWN0X18gaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IsIGRpciwgZm9vKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gZm9vLl9fbmFtZV9fCisgICAgICAgICAgICBzZWxmLmZhaWwoIl9fbmFtZV9fID0gJXMiICUgcmVwcihzKSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCBNb2R1bGVUeXBlLl9fZG9jX18pCisKKyAgICBkZWYgdGVzdF9ub19kb2NzdHJpbmcoc2VsZik6CisgICAgICAgICMgUmVndWxhcmx5IGluaXRpYWxpemVkIG1vZHVsZSwgbm8gZG9jc3RyaW5nCisgICAgICAgIGZvbyA9IE1vZHVsZVR5cGUoImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fbmFtZV9fLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kb2NfXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiBOb25lfSkKKworICAgIGRlZiB0ZXN0X2FzY2lpX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBBU0NJSSBkb2NzdHJpbmcKKyAgICAgICAgZm9vID0gTW9kdWxlVHlwZSgiZm9vIiwgImZvb2RvYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fbmFtZV9fLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kb2NfXywgImZvb2RvYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jIn0pCisKKyAgICBkZWYgdGVzdF91bmljb2RlX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBVbmljb2RlIGRvY3N0cmluZworICAgICAgICBmb28gPSBNb2R1bGVUeXBlKCJmb28iLCB1ImZvb2RvY1x1MTIzNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fbmFtZV9fLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kb2NfXywgdSJmb29kb2NcdTEyMzQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RpY3RfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogdSJmb29kb2NcdTEyMzQifSkKKworICAgIGRlZiB0ZXN0X3JlaW5pdChzZWxmKToKKyAgICAgICAgIyBSZWluaXRpYWxpemF0aW9uIHNob3VsZCBub3QgcmVwbGFjZSB0aGUgX19kaWN0X18KKyAgICAgICAgZm9vID0gTW9kdWxlVHlwZSgiZm9vIiwgdSJmb29kb2NcdTEyMzQiKQorICAgICAgICBmb28uYmFyID0gNDIKKyAgICAgICAgZCA9IGZvby5fX2RpY3RfXworICAgICAgICBmb28uX19pbml0X18oImZvbyIsICJmb29kb2MiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX25hbWVfXywgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZG9jX18sICJmb29kb2MiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5iYXIsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RpY3RfXywKKyAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MiLCAiYmFyIjogNDJ9KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm9vLl9fZGljdF9fIGlzIGQpCisKKyAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCisgICAgZGVmIHRlc3RfZG9udF9jbGVhcl9kaWN0KHNlbGYpOgorICAgICAgICAjIFNlZSBpc3N1ZSA3MTQwLgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgZm9vID0gTW9kdWxlVHlwZSgiZm9vIikKKyAgICAgICAgICAgIGZvby5iYXIgPSA0CisgICAgICAgICAgICByZXR1cm4gZm9vCisgICAgICAgIGdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKS5fX2RpY3RfX1siYmFyIl0sIDQpCisKKyAgICBkZWYgdGVzdF9jbGVhcl9kaWN0X2luX3JlZl9jeWNsZShzZWxmKToKKyAgICAgICAgZGVzdHJveWVkID0gW10KKyAgICAgICAgbSA9IE1vZHVsZVR5cGUoImZvbyIpCisgICAgICAgIG0uZGVzdHJveWVkID0gZGVzdHJveWVkCisgICAgICAgIHMgPSAiIiJjbGFzcyBBOgorICAgIGRlZiBfX2RlbF9fKHNlbGYsIGRlc3Ryb3llZD1kZXN0cm95ZWQpOgorICAgICAgICBkZXN0cm95ZWQuYXBwZW5kKDEpCithID0gQSgpIiIiCisgICAgICAgIGV4ZWMocywgbS5fX2RpY3RfXykKKyAgICAgICAgZGVsIG0KKyAgICAgICAgZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzdHJveWVkLCBbMV0pCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoTW9kdWxlVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21vZHVsZWZpbmRlci5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21vZHVsZWZpbmRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzFkMWUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbW9kdWxlZmluZGVyLnB5CkBAIC0wLDAgKzEsMjg2IEBACitpbXBvcnQgX19mdXR1cmVfXworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBkaXN0dXRpbHMuZGlyX3V0aWwKK2ltcG9ydCB0ZW1wZmlsZQorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCit0cnk6IHNldAorZXhjZXB0IE5hbWVFcnJvcjogZnJvbSBzZXRzIGltcG9ydCBTZXQgYXMgc2V0CisKK2ltcG9ydCBtb2R1bGVmaW5kZXIKKworIyBOb3RlOiBUbyB0ZXN0IG1vZHVsZWZpbmRlciB3aXRoIFB5dGhvbiAyLjIsIHNldHMucHkgYW5kCisjIG1vZHVsZWZpbmRlci5weSBtdXN0IGJlIGF2YWlsYWJsZSAtIHRoZXkgYXJlIG5vdCBpbiB0aGUgc3RhbmRhcmQKKyMgbGlicmFyeS4KKworVEVTVF9ESVIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKK1RFU1RfUEFUSCA9IFtURVNUX0RJUiwgb3MucGF0aC5kaXJuYW1lKF9fZnV0dXJlX18uX19maWxlX18pXQorCisjIEVhY2ggdGVzdCBkZXNjcmlwdGlvbiBpcyBhIGxpc3Qgb2YgNSBpdGVtczoKKyMKKyMgMS4gYSBtb2R1bGUgbmFtZSB0aGF0IHdpbGwgYmUgaW1wb3J0ZWQgYnkgbW9kdWxlZmluZGVyCisjIDIuIGEgbGlzdCBvZiBtb2R1bGUgbmFtZXMgdGhhdCBtb2R1bGVmaW5kZXIgaXMgcmVxdWlyZWQgdG8gZmluZAorIyAzLiBhIGxpc3Qgb2YgbW9kdWxlIG5hbWVzIHRoYXQgbW9kdWxlZmluZGVyIHNob3VsZCBjb21wbGFpbgorIyAgICBhYm91dCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBmb3VuZAorIyA0LiBhIGxpc3Qgb2YgbW9kdWxlIG5hbWVzIHRoYXQgbW9kdWxlZmluZGVyIHNob3VsZCBjb21wbGFpbgorIyAgICBhYm91dCBiZWNhdXNlIHRoZXkgTUFZIGJlIG5vdCBmb3VuZAorIyA1LiBhIHN0cmluZyBzcGVjaWZ5aW5nIHBhY2thZ2VzIHRvIGNyZWF0ZTsgdGhlIGZvcm1hdCBpcyBvYnZpb3VzIGltby4KKyMKKyMgRWFjaCBwYWNrYWdlIHdpbGwgYmUgY3JlYXRlZCBpbiBURVNUX0RJUiwgYW5kIFRFU1RfRElSIHdpbGwgYmUKKyMgcmVtb3ZlZCBhZnRlciB0aGUgdGVzdHMgYWdhaW4uCisjIE1vZHVsZWZpbmRlciBzZWFyY2hlcyBpbiBhIHBhdGggdGhhdCBjb250YWlucyBURVNUX0RJUiwgcGx1cworIyB0aGUgc3RhbmRhcmQgTGliIGRpcmVjdG9yeS4KKworbWF5YmVfdGVzdCA9IFsKKyAgICAiYS5tb2R1bGUiLAorICAgIFsiYSIsICJhLm1vZHVsZSIsICJzeXMiLAorICAgICAiYiJdLAorICAgIFsiYyJdLCBbImIuc29tZXRoaW5nIl0sCisgICAgIiIiXAorYS9fX2luaXRfXy5weQorYS9tb2R1bGUucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBiIGltcG9ydCBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBjIGltcG9ydCBzb21ldGhpbmcKK2IvX19pbml0X18ucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBzeXMgaW1wb3J0ICoKKyIiIl0KKworbWF5YmVfdGVzdF9uZXcgPSBbCisgICAgImEubW9kdWxlIiwKKyAgICBbImEiLCAiYS5tb2R1bGUiLCAic3lzIiwKKyAgICAgImIiLCAiX19mdXR1cmVfXyJdLAorICAgIFsiYyJdLCBbImIuc29tZXRoaW5nIl0sCisgICAgIiIiXAorYS9fX2luaXRfXy5weQorYS9tb2R1bGUucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBiIGltcG9ydCBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBjIGltcG9ydCBzb21ldGhpbmcKK2IvX19pbml0X18ucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBzeXMgaW1wb3J0ICoKKyIiIl0KKworcGFja2FnZV90ZXN0ID0gWworICAgICJhLm1vZHVsZSIsCisgICAgWyJhIiwgImEuYiIsICJhLmMiLCAiYS5tb2R1bGUiLCAibXltb2R1bGUiLCAic3lzIl0sCisgICAgWyJibGFoYmxhaCJdLCBbXSwKKyAgICAiIiJcCitteW1vZHVsZS5weQorYS9fX2luaXRfXy5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgYmxhaGJsYWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBhIGltcG9ydCBiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBjCithL21vZHVsZS5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYSBpbXBvcnQgYiBhcyB4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYS5jIGltcG9ydCBzaWxseW5hbWUKK2EvYi5weQorYS9jLnB5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYS5tb2R1bGUgaW1wb3J0IHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IG15bW9kdWxlIGFzIHNpbGx5bmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHN5cyBpbXBvcnQgdmVyc2lvbl9pbmZvCisiIiJdCisKK2Fic29sdXRlX2ltcG9ydF90ZXN0ID0gWworICAgICJhLm1vZHVsZSIsCisgICAgWyJhIiwgImEubW9kdWxlIiwKKyAgICAgImIiLCAiYi54IiwgImIueSIsICJiLnoiLAorICAgICAiX19mdXR1cmVfXyIsICJzeXMiLCAiZXhjZXB0aW9ucyJdLAorICAgIFsiYmxhaGJsYWgiXSwgW10sCisgICAgIiIiXAorbXltb2R1bGUucHkKK2EvX19pbml0X18ucHkKK2EvbW9kdWxlLnB5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzeXMgIyBzeXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGJsYWhibGFoICMgZmFpbHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGV4Y2VwdGlvbnMgIyBleGNlcHRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBiLnggIyBiLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBiIGltcG9ydCB5ICMgYi55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYi56IGltcG9ydCAqICMgYi56LioKK2EvZXhjZXB0aW9ucy5weQorYS9zeXMucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IG15bW9kdWxlCithL2IvX19pbml0X18ucHkKK2EvYi94LnB5CithL2IveS5weQorYS9iL3oucHkKK2IvX19pbml0X18ucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHoKK2IvdW51c2VkLnB5CitiL3gucHkKK2IveS5weQorYi96LnB5CisiIiJdCisKK3JlbGF0aXZlX2ltcG9ydF90ZXN0ID0gWworICAgICJhLm1vZHVsZSIsCisgICAgWyJfX2Z1dHVyZV9fIiwKKyAgICAgImEiLCAiYS5tb2R1bGUiLAorICAgICAiYS5iIiwgImEuYi55IiwgImEuYi56IiwKKyAgICAgImEuYi5jIiwgImEuYi5jLm1vZHVsZUMiLAorICAgICAiYS5iLmMuZCIsICJhLmIuYy5lIiwKKyAgICAgImEuYi54IiwKKyAgICAgImV4Y2VwdGlvbnMiXSwKKyAgICBbXSwgW10sCisgICAgIiIiXAorbXltb2R1bGUucHkKK2EvX19pbml0X18ucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAuYiBpbXBvcnQgeSwgeiAjIGEuYi55LCBhLmIuegorYS9tb2R1bGUucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQgIyBfX2Z1dHVyZV9fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBleGNlcHRpb25zICMgZXhjZXB0aW9ucworYS9leGNlcHRpb25zLnB5CithL3N5cy5weQorYS9iL19faW5pdF9fLnB5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gLi5iIGltcG9ydCB4ICMgYS5iLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Zyb20gYS5iLmMgaW1wb3J0IG1vZHVsZUMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAuYyBpbXBvcnQgbW9kdWxlQyAjIGEuYi5tb2R1bGVDCithL2IveC5weQorYS9iL3kucHkKK2EvYi96LnB5CithL2IvZy5weQorYS9iL2MvX19pbml0X18ucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAuLmMgaW1wb3J0IGUgIyBhLmIuYy5lCithL2IvYy9tb2R1bGVDLnB5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gLi5jIGltcG9ydCBkICMgYS5iLmMuZAorYS9iL2MvZC5weQorYS9iL2MvZS5weQorYS9iL2MveC5weQorIiIiXQorCityZWxhdGl2ZV9pbXBvcnRfdGVzdF8yID0gWworICAgICJhLm1vZHVsZSIsCisgICAgWyJhIiwgImEubW9kdWxlIiwKKyAgICAgImEuc3lzIiwKKyAgICAgImEuYiIsICJhLmIueSIsICJhLmIueiIsCisgICAgICJhLmIuYyIsICJhLmIuYy5kIiwKKyAgICAgImEuYi5jLmUiLAorICAgICAiYS5iLmMubW9kdWxlQyIsCisgICAgICJhLmIuYy5mIiwKKyAgICAgImEuYi54IiwKKyAgICAgImEuYW5vdGhlciJdLAorICAgIFtdLCBbXSwKKyAgICAiIiJcCitteW1vZHVsZS5weQorYS9fX2luaXRfXy5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IHN5cyAjIGEuc3lzCithL2Fub3RoZXIucHkKK2EvbW9kdWxlLnB5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gLmIgaW1wb3J0IHksIHogIyBhLmIueSwgYS5iLnoKK2EvZXhjZXB0aW9ucy5weQorYS9zeXMucHkKK2EvYi9fX2luaXRfXy5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIC5jIGltcG9ydCBtb2R1bGVDICMgYS5iLmMubW9kdWxlQworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIC5jIGltcG9ydCBkICMgYS5iLmMuZAorYS9iL3gucHkKK2EvYi95LnB5CithL2Ivei5weQorYS9iL2MvX19pbml0X18ucHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAuIGltcG9ydCBlICMgYS5iLmMuZQorYS9iL2MvbW9kdWxlQy5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgZiAgICMgYS5iLmMuZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIC4uIGltcG9ydCB4ICAjIGEuYi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gLi4uIGltcG9ydCBhbm90aGVyICMgYS5hbm90aGVyCithL2IvYy9kLnB5CithL2IvYy9lLnB5CithL2IvYy9mLnB5CisiIiJdCisKK3JlbGF0aXZlX2ltcG9ydF90ZXN0XzMgPSBbCisgICAgImEubW9kdWxlIiwKKyAgICBbImEiLCAiYS5tb2R1bGUiXSwKKyAgICBbImEuYmFyIl0sCisgICAgW10sCisgICAgIiIiXAorYS9fX2luaXRfXy5weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZm9vKCk6IHBhc3MKK2EvbW9kdWxlLnB5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgZm9vCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgYmFyCisiIiJdCisKK2RlZiBvcGVuX2ZpbGUocGF0aCk6CisgICAgIyNwcmludCAiIyIsIG9zLnBhdGguYWJzcGF0aChwYXRoKQorICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUocGF0aCkKKyAgICBkaXN0dXRpbHMuZGlyX3V0aWwubWtwYXRoKGRpcm5hbWUpCisgICAgcmV0dXJuIG9wZW4ocGF0aCwgInciKQorCitkZWYgY3JlYXRlX3BhY2thZ2Uoc291cmNlKToKKyAgICBvZmkgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBmb3IgbGluZSBpbiBzb3VyY2Uuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIgIikgb3IgbGluZS5zdGFydHN3aXRoKCJcdCIpOgorICAgICAgICAgICAgICAgIG9maS53cml0ZShsaW5lLnN0cmlwKCkgKyAiXG4iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBvZmk6CisgICAgICAgICAgICAgICAgICAgIG9maS5jbG9zZSgpCisgICAgICAgICAgICAgICAgb2ZpID0gb3Blbl9maWxlKG9zLnBhdGguam9pbihURVNUX0RJUiwgbGluZS5zdHJpcCgpKSkKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBvZmk6CisgICAgICAgICAgICBvZmkuY2xvc2UoKQorCitjbGFzcyBNb2R1bGVGaW5kZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgX2RvX3Rlc3Qoc2VsZiwgaW5mbywgcmVwb3J0PUZhbHNlKToKKyAgICAgICAgaW1wb3J0X3RoaXMsIG1vZHVsZXMsIG1pc3NpbmcsIG1heWJlX21pc3NpbmcsIHNvdXJjZSA9IGluZm8KKyAgICAgICAgY3JlYXRlX3BhY2thZ2Uoc291cmNlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtZiA9IG1vZHVsZWZpbmRlci5Nb2R1bGVGaW5kZXIocGF0aD1URVNUX1BBVEgpCisgICAgICAgICAgICBtZi5pbXBvcnRfaG9vayhpbXBvcnRfdGhpcykKKyAgICAgICAgICAgIGlmIHJlcG9ydDoKKyAgICAgICAgICAgICAgICBtZi5yZXBvcnQoKQorIyMgICAgICAgICAgICAgICAgIyBUaGlzIHdvdWxkbid0IHdvcmsgaW4gZ2VuZXJhbCB3aGVuIGV4ZWN1dGVkIHNldmVyYWwgdGltZXM6CisjIyAgICAgICAgICAgICAgICBvcGF0aCA9IHN5cy5wYXRoWzpdCisjIyAgICAgICAgICAgICAgICBzeXMucGF0aCA9IFRFU1RfUEFUSAorIyMgICAgICAgICAgICAgICAgdHJ5OgorIyMgICAgICAgICAgICAgICAgICAgIF9faW1wb3J0X18oaW1wb3J0X3RoaXMpCisjIyAgICAgICAgICAgICAgICBleGNlcHQ6CisjIyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHRyYWNlYmFjazsgdHJhY2ViYWNrLnByaW50X2V4YygpCisjIyAgICAgICAgICAgICAgICBzeXMucGF0aCA9IG9wYXRoCisjIyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIG1vZHVsZXMgPSBzZXQobW9kdWxlcykKKyAgICAgICAgICAgIGZvdW5kID0gc2V0KG1mLm1vZHVsZXMua2V5cygpKQorICAgICAgICAgICAgbW9yZSA9IGxpc3QoZm91bmQgLSBtb2R1bGVzKQorICAgICAgICAgICAgbGVzcyA9IGxpc3QobW9kdWxlcyAtIGZvdW5kKQorICAgICAgICAgICAgIyBjaGVjayBpZiB3ZSBmb3VuZCB3aGF0IHdlIGV4cGVjdGVkLCBub3QgbW9yZSwgbm90IGxlc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG1vcmUsIGxlc3MpLCAoW10sIFtdKSkKKworICAgICAgICAgICAgIyBjaGVjayBmb3IgbWlzc2luZyBhbmQgbWF5YmUgbWlzc2luZyBtb2R1bGVzCisgICAgICAgICAgICBiYWQsIG1heWJlID0gbWYuYW55X21pc3NpbmdfbWF5YmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWQsIG1pc3NpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heWJlLCBtYXliZV9taXNzaW5nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGlzdHV0aWxzLmRpcl91dGlsLnJlbW92ZV90cmVlKFRFU1RfRElSKQorCisgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgc2VsZi5fZG9fdGVzdChwYWNrYWdlX3Rlc3QpCisKKyAgICBkZWYgdGVzdF9tYXliZShzZWxmKToKKyAgICAgICAgc2VsZi5fZG9fdGVzdChtYXliZV90ZXN0KQorCisgICAgaWYgZ2V0YXR0cihfX2Z1dHVyZV9fLCAiYWJzb2x1dGVfaW1wb3J0IiwgTm9uZSk6CisKKyAgICAgICAgZGVmIHRlc3RfbWF5YmVfbmV3KHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fZG9fdGVzdChtYXliZV90ZXN0X25ldykKKworICAgICAgICBkZWYgdGVzdF9hYnNvbHV0ZV9pbXBvcnRzKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fZG9fdGVzdChhYnNvbHV0ZV9pbXBvcnRfdGVzdCkKKworICAgICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9pbXBvcnRzKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fZG9fdGVzdChyZWxhdGl2ZV9pbXBvcnRfdGVzdCkKKworICAgICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9pbXBvcnRzXzIoc2VsZik6CisgICAgICAgICAgICBzZWxmLl9kb190ZXN0KHJlbGF0aXZlX2ltcG9ydF90ZXN0XzIpCisKKyAgICAgICAgZGVmIHRlc3RfcmVsYXRpdmVfaW1wb3J0c18zKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fZG9fdGVzdChyZWxhdGl2ZV9pbXBvcnRfdGVzdF8zKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgZGlzdHV0aWxzLmxvZy5zZXRfdGhyZXNob2xkKGRpc3R1dGlscy5sb2cuV0FSTikKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KE1vZHVsZUZpbmRlclRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tc2lsaWIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tc2lsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ1YjBjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X21zaWxpYi5weQpAQCAtMCwwICsxLDQ2IEBACisiIiIgVGVzdCBzdWl0ZSBmb3IgdGhlIGNvZGUgaW4gbXNpbGliICIiIgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKK21zaWxpYiA9IGltcG9ydF9tb2R1bGUoJ21zaWxpYicpCisKK2NsYXNzIFRlc3RfbWFrZV9pZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgI2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9hYTM2OTIxMih2PXZzLjg1KS5hc3B4CisgICAgIiIiVGhlIElkZW50aWZpZXIgZGF0YSB0eXBlIGlzIGEgdGV4dCBzdHJpbmcuIElkZW50aWZpZXJzIG1heSBjb250YWluIHRoZQorICAgIEFTQ0lJIGNoYXJhY3RlcnMgQS1aIChhLXopLCBkaWdpdHMsIHVuZGVyc2NvcmVzIChfKSwgb3IgcGVyaW9kcyAoLikuCisgICAgSG93ZXZlciwgZXZlcnkgaWRlbnRpZmllciBtdXN0IGJlZ2luIHdpdGggZWl0aGVyIGEgbGV0dGVyIG9yIGFuCisgICAgdW5kZXJzY29yZS4KKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X2lzX25vX2NoYW5nZV9yZXF1aXJlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIG1zaWxpYi5tYWtlX2lkKCJzaG9ydCIpLCAic2hvcnQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbXNpbGliLm1ha2VfaWQoIm5vY2hhbmdlcmVxdWlyZWQiKSwgIm5vY2hhbmdlcmVxdWlyZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbXNpbGliLm1ha2VfaWQoIm9uZS5kb3QiKSwgIm9uZS5kb3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbXNpbGliLm1ha2VfaWQoIl8iKSwgIl8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbXNpbGliLm1ha2VfaWQoImEiKSwgImEiKQorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgIyAgICBtc2lsaWIubWFrZV9pZCgiIiksICIiKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9maXJzdF9jaGFyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbXNpbGliLm1ha2VfaWQoIjkuc2hvcnQiKSwgIl85LnNob3J0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIG1zaWxpYi5tYWtlX2lkKCIuc2hvcnQiKSwgIl8uc2hvcnQiKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9hbnlfY2hhcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIG1zaWxpYi5tYWtlX2lkKCIuc1x4ODJvcnQiKSwgIl8uc19vcnQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsICAgICgKKyAgICAgICAgICAgIG1zaWxpYi5tYWtlX2lkKCIuc1x4ODJvPyorcnQiKSwgIl8uc19vX19fcnQiKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU4NmNhMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5CkBAIC0wLDAgKzEsMjc0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgdGVzdF9tdWx0aWJ5dGVjb2RlYy5weQorIyAgIFVuaXQgdGVzdCBmb3IgbXVsdGlieXRlY29kZWMgaXRzZWxmCisjCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4KK2ltcG9ydCB1bml0dGVzdCwgU3RyaW5nSU8sIGNvZGVjcywgc3lzLCBvcworaW1wb3J0IF9tdWx0aWJ5dGVjb2RlYworCitBTExfQ0pLRU5DT0RJTkdTID0gWworIyBfY29kZWNzX2NuCisgICAgJ2diMjMxMicsICdnYmsnLCAnZ2IxODAzMCcsICdoeicsCisjIF9jb2RlY3NfaGsKKyAgICAnYmlnNWhrc2NzJywKKyMgX2NvZGVjc19qcAorICAgICdjcDkzMicsICdzaGlmdF9qaXMnLCAnZXVjX2pwJywgJ2V1Y19qaXN4MDIxMycsICdzaGlmdF9qaXN4MDIxMycsCisgICAgJ2V1Y19qaXNfMjAwNCcsICdzaGlmdF9qaXNfMjAwNCcsCisjIF9jb2RlY3Nfa3IKKyAgICAnY3A5NDknLCAnZXVjX2tyJywgJ2pvaGFiJywKKyMgX2NvZGVjc190dworICAgICdiaWc1JywgJ2NwOTUwJywKKyMgX2NvZGVjc19pc28yMDIyCisgICAgJ2lzbzIwMjJfanAnLCAnaXNvMjAyMl9qcF8xJywgJ2lzbzIwMjJfanBfMicsICdpc28yMDIyX2pwXzIwMDQnLAorICAgICdpc28yMDIyX2pwXzMnLCAnaXNvMjAyMl9qcF9leHQnLCAnaXNvMjAyMl9rcicsCitdCisKK2NsYXNzIFRlc3RfTXVsdGlieXRlQ29kZWModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfbnVsbGNvZGluZyhzZWxmKToKKyAgICAgICAgZm9yIGVuYyBpbiBBTExfQ0pLRU5DT0RJTkdTOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJy5kZWNvZGUoZW5jKSwgdScnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCcnLCBlbmMpLCB1JycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnJy5lbmNvZGUoZW5jKSwgJycpCisKKyAgICBkZWYgdGVzdF9zdHJfZGVjb2RlKHNlbGYpOgorICAgICAgICBmb3IgZW5jIGluIEFMTF9DSktFTkNPRElOR1M6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYmNkJy5lbmNvZGUoZW5jKSwgJ2FiY2QnKQorCisgICAgZGVmIHRlc3RfZXJyb3JjYWxsYmFja19sb25naW5kZXgoc2VsZik6CisgICAgICAgIGRlYyA9IGNvZGVjcy5nZXRkZWNvZGVyKCdldWMta3InKQorICAgICAgICBteXJlcGxhY2UgID0gbGFtYmRhIGV4YzogKHUnJywgc3lzLm1heGludCsxKQorICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoJ3Rlc3QuY2prdGVzdCcsIG15cmVwbGFjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgZGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGVceDkyaGFtXHg5M3NwYW0nLCAndGVzdC5jamt0ZXN0JykKKworICAgIGRlZiB0ZXN0X2NvZGluZ3NwZWMoc2VsZik6CisgICAgICAgIGZvciBlbmMgaW4gQUxMX0NKS0VOQ09ESU5HUzoKKyAgICAgICAgICAgIGNvZGUgPSAnIyBjb2Rpbmc6IHt9XG4nLmZvcm1hdChlbmMpCisgICAgICAgICAgICBleGVjIGNvZGUKKworICAgIGRlZiB0ZXN0X2luaXRfc2VnZmF1bHQoc2VsZik6CisgICAgICAgICMgYnVnICMzMzA1OiB0aGlzIHVzZWQgdG8gc2VnZmF1bHQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9tdWx0aWJ5dGVjb2RlYy5NdWx0aWJ5dGVTdHJlYW1SZWFkZXIsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBfbXVsdGlieXRlY29kZWMuTXVsdGlieXRlU3RyZWFtV3JpdGVyLCBOb25lKQorCisKK2NsYXNzIFRlc3RfSW5jcmVtZW50YWxFbmNvZGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3N0YXRlbGVzcyhzZWxmKToKKyAgICAgICAgIyBjcDk0OSBlbmNvZGVyIGlzbid0IHN0YXRlZnVsIGF0IGFsbC4KKyAgICAgICAgZW5jb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGVuY29kZXIoJ2NwOTQ5JykoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUnXHVkMzBjXHVjNzc0XHVjMzZjIFx1YjljOFx1Yzc0NCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdceGM2XHhjNFx4YzBceGNjXHhiZFx4ZTMgXHhiOFx4YjZceGMwXHhiYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5yZXNldCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUnXHUyNjA2XHUyMjNjXHUyNjA2JywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1x4YTFceGQ5XHhhMVx4YWRceGExXHhkOScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5yZXNldCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUnJywgVHJ1ZSksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUnJywgRmFsc2UpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLnJlc2V0KCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zdGF0ZWZ1bChzZWxmKToKKyAgICAgICAgIyBqaXN4MDIxMyBlbmNvZGVyIGlzIHN0YXRlZnVsIGZvciBhIGZldyBjb2RlcG9pbnRzLiBlZykKKyAgICAgICAgIyAgIFUrMDBFNiA9PiBBOURDCisgICAgICAgICMgICBVKzAwRTYgVSswMzAwID0+IEFCQzQKKyAgICAgICAgIyAgIFUrMDMwMCA9PiBBQkRDCisKKyAgICAgICAgZW5jb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGVuY29kZXIoJ2ppc3gwMjEzJykoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUnXHUwMGU2XHUwMzAwJyksICdceGFiXHhjNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSdcdTAwZTYnKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSdcdTAzMDAnKSwgJ1x4YWJceGM0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1J1x1MDBlNicsIFRydWUpLCAnXHhhOVx4ZGMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5yZXNldCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUnXHUwMzAwJyksICdceGFiXHhkYycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1J1x1MDBlNicpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSgnJywgVHJ1ZSksICdceGE5XHhkYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUoJycsIFRydWUpLCAnJykKKworICAgIGRlZiB0ZXN0X3N0YXRlZnVsX2tlZXBfYnVmZmVyKHNlbGYpOgorICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcignamlzeDAyMTMnKSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSdcdTAwZTYnKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgZW5jb2Rlci5lbmNvZGUsIHUnXHUwMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1J1x1MDMwMFx1MDBlNicpLCAnXHhhYlx4YzQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsIGVuY29kZXIuZW5jb2RlLCB1J1x1MDEyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5yZXNldCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUnXHUwMzAwJyksICdceGFiXHhkYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUodSdcdTAwZTYnKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgZW5jb2Rlci5lbmNvZGUsIHUnXHUwMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1JycsIFRydWUpLCAnXHhhOVx4ZGMnKQorCisgICAgZGVmIHRlc3RfaXNzdWU1NjQwKHNlbGYpOgorICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2Rlcignc2hpZnQtamlzJykoJ2JhY2tzbGFzaHJlcGxhY2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKHUnXHhmZicpLCBiJ1xceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSh1J1xuJyksIGInXG4nKQorCitjbGFzcyBUZXN0X0luY3JlbWVudGFsRGVjb2Rlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kYmNzKHNlbGYpOgorICAgICAgICAjIGNwOTQ5IGRlY29kZXIgaXMgc2ltcGxlIHdpdGggb25seSAxIG9yIDIgYnl0ZXMgc2VxdWVuY2VzLgorICAgICAgICBkZWNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlcignY3A5NDknKSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoJ1x4YzZceGM0XHhjMFx4Y2NceGJkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSdcdWQzMGNcdWM3NzQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCdceGUzIFx4YjhceGI2XHhjMFx4YmInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1x1YzM2YyBcdWI5YzhcdWM3NDQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCcnKSwgdScnKQorCisgICAgZGVmIHRlc3RfZGJjc19rZWVwX2J1ZmZlcihzZWxmKToKKyAgICAgICAgZGVjb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGRlY29kZXIoJ2NwOTQ5JykoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCdceGM2XHhjNFx4YzAnKSwgdSdcdWQzMGMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGRlY29kZXIuZGVjb2RlLCAnJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgnXHhjYycpLCB1J1x1Yzc3NCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgnXHhjNlx4YzRceGMwJyksIHUnXHVkMzBjJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBkZWNvZGVyLmRlY29kZSwgJ1x4Y2NceGJkJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgnXHhjYycpLCB1J1x1Yzc3NCcpCisKKyAgICBkZWYgdGVzdF9pc28yMDIyKHNlbGYpOgorICAgICAgICBkZWNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlcignaXNvMjAyMi1qcCcpKCkKKyAgICAgICAgRVNDID0gJ1x4MWInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoRVNDICsgJygnKSwgdScnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIuZGVjb2RlKCdCJywgVHJ1ZSksIHUnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZShFU0MgKyAnJCcpLCB1JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoJ0JAJCcpLCB1J1x1NGUxNicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoJ0AkQCcpLCB1J1x1NGUxNicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoJyQnLCBUcnVlKSwgdSdcdTRlMTYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZXIucmVzZXQoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgnQCQnKSwgdSdAJCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2Rlci5kZWNvZGUoRVNDICsgJyQnKSwgdScnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGRlY29kZXIuZGVjb2RlLCAnJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVyLmRlY29kZSgnQkAkJyksIHUnXHU0ZTE2JykKKworY2xhc3MgVGVzdF9TdHJlYW1SZWFkZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2J1ZzE3Mjg0MDMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9wZW4oVEVTVEZOLCAndycpLndyaXRlKCdceGExJykKKyAgICAgICAgICAgIGYgPSBjb2RlY3Mub3BlbihURVNURk4sIGVuY29kaW5nPSdjcDk0OScpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGYucmVhZCwgMikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyeTogZi5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQ6IHBhc3MKKyAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCisKK2NsYXNzIFRlc3RfU3RyZWFtV3JpdGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpZiBsZW4odSdcVTAwMDEyMzQ1JykgPT0gMjogIyBVQ1MyCisgICAgICAgIGRlZiB0ZXN0X2diMTgwMzAoc2VsZik6CisgICAgICAgICAgICBzID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICAgICAgYyA9IGNvZGVjcy5nZXR3cml0ZXIoJ2diMTgwMzAnKShzKQorICAgICAgICAgICAgYy53cml0ZSh1JzEyMycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgJzEyMycpCisgICAgICAgICAgICBjLndyaXRlKHUnXFUwMDAxMjM0NScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgJzEyM1x4OTA3XHg5NTknKQorICAgICAgICAgICAgYy53cml0ZSh1J1xVMDAwMTIzNDUnWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksICcxMjNceDkwN1x4OTU5JykKKyAgICAgICAgICAgIGMud3JpdGUodSdcVTAwMDEyMzQ1J1sxXSArIHUnXFUwMDAxMjM0NScgKyB1J1x1YWMwMFx1MDBhYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgJzEyM1x4OTA3XHg5NTlceDkwN1x4OTU5XHg5MDdceDk1OVx4ODI3XHhjZjVceDgxMFx4ODUxJykKKyAgICAgICAgICAgIGMud3JpdGUodSdcVTAwMDEyMzQ1J1swXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAnMTIzXHg5MDdceDk1OVx4OTA3XHg5NTlceDkwN1x4OTU5XHg4MjdceGNmNVx4ODEwXHg4NTEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBjLnJlc2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICcxMjNceDkwN1x4OTU5XHg5MDdceDk1OVx4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCisKKyAgICAgICAgZGVmIHRlc3RfdXRmXzgoc2VsZik6CisgICAgICAgICAgICBzPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICBjID0gY29kZWNzLmdldHdyaXRlcigndXRmLTgnKShzKQorICAgICAgICAgICAgYy53cml0ZSh1JzEyMycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgJzEyMycpCisgICAgICAgICAgICBjLndyaXRlKHUnXFUwMDAxMjM0NScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgJzEyM1x4ZjBceDkyXHg4ZFx4ODUnKQorCisgICAgICAgICAgICAjIFB5dGhvbiB1dGYtOCBjb2RlYyBjYW4ndCBidWZmZXIgc3Vycm9nYXRlIHBhaXJzIHlldC4KKyAgICAgICAgICAgIGlmIDA6CisgICAgICAgICAgICAgICAgYy53cml0ZSh1J1xVMDAwMTIzNDUnWzBdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCAnMTIzXHhmMFx4OTJceDhkXHg4NScpCisgICAgICAgICAgICAgICAgYy53cml0ZSh1J1xVMDAwMTIzNDUnWzFdICsgdSdcVTAwMDEyMzQ1JyArIHUnXHVhYzAwXHUwMGFjJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgJzEyM1x4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NScKKyAgICAgICAgICAgICAgICAgICAgJ1x4ZWFceGIwXHg4MFx4YzJceGFjJykKKyAgICAgICAgICAgICAgICBjLndyaXRlKHUnXFUwMDAxMjM0NSdbMF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICcxMjNceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODUnCisgICAgICAgICAgICAgICAgICAgICdceGVhXHhiMFx4ODBceGMyXHhhYycpCisgICAgICAgICAgICAgICAgYy5yZXNldCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICcxMjNceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODUnCisgICAgICAgICAgICAgICAgICAgICdceGVhXHhiMFx4ODBceGMyXHhhY1x4ZWRceGEwXHg4OCcpCisgICAgICAgICAgICAgICAgYy53cml0ZSh1J1xVMDAwMTIzNDUnWzFdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAnMTIzXHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1JworICAgICAgICAgICAgICAgICAgICAnXHhlYVx4YjBceDgwXHhjMlx4YWNceGVkXHhhMFx4ODhceGVkXHhiZFx4ODUnKQorCisgICAgZWxzZTogIyBVQ1M0CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3N0cmVhbXdyaXRlcl9zdHJ3cml0ZShzZWxmKToKKyAgICAgICAgcyA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgd3IgPSBjb2RlY3MuZ2V0d3JpdGVyKCdnYjE4MDMwJykocykKKyAgICAgICAgd3Iud3JpdGUoJ2FiY2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgJ2FiY2QnKQorCitjbGFzcyBUZXN0X0lTTzIwMjIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2cyKHNlbGYpOgorICAgICAgICBpc28yMDIyanAyID0gJ1x4MWIoQjpodTQ6dW5pdFx4MWIuQVx4MWJOaSBkZSBmYW1pbGxlJworICAgICAgICB1bmkgPSB1JzpodTQ6dW5pdFx4ZTkgZGUgZmFtaWxsZScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc28yMDIyanAyLmRlY29kZSgnaXNvMjAyMi1qcC0yJyksIHVuaSkKKworICAgIGRlZiB0ZXN0X2lzbzIwMjJfanBfZzAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1x4MGUnLCB1J1xOe1NPRlQgSFlQSEVOfScuZW5jb2RlKCdpc28tMjAyMi1qcC0yJykpCisgICAgICAgIGZvciBlbmNvZGluZyBpbiAoJ2lzby0yMDIyLWpwLTIwMDQnLCAnaXNvLTIwMjItanAtMycpOgorICAgICAgICAgICAgZSA9IHUnXHUzNDA2Jy5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbHRlcihsYW1iZGEgeDogeCA+PSAnXHg4MCcsIGUpKQorCisgICAgZGVmIHRlc3RfYnVnMTU3MjgzMihzZWxmKToKKyAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgPj0gMHgxMDAwMDoKKyAgICAgICAgICAgIG15dW5pY2hyID0gdW5pY2hyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBteXVuaWNociA9IGxhbWJkYSB4OiB1bmljaHIoMHhEN0MwKyh4Pj4xMCkpICsgdW5pY2hyKDB4REMwMCsoeCYweDNGRikpCisKKyAgICAgICAgZm9yIHggaW4geHJhbmdlKDB4MTAwMDAsIDB4MTEwMDAwKToKKyAgICAgICAgICAgICMgQW55IElTTyAyMDIyIGNvZGVjIHdpbGwgY2F1c2UgdGhlIHNlZ2ZhdWx0CisgICAgICAgICAgICBteXVuaWNocih4KS5lbmNvZGUoJ2lzb18yMDIyX2pwJywgJ2lnbm9yZScpCisKK2NsYXNzIFRlc3RTdGF0ZWZ1bCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdGV4dCA9IHUnXHU0RTE2XHU0RTE2JworICAgIGVuY29kaW5nID0gJ2lzby0yMDIyLWpwJworICAgIGV4cGVjdGVkID0gYidceDFiJEJAJEAkJworICAgIGV4cGVjdGVkX3Jlc2V0ID0gYidceDFiJEJAJEAkXHgxYihCJworCisgICAgZGVmIHRlc3RfZW5jb2RlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dC5lbmNvZGUoc2VsZi5lbmNvZGluZyksIHNlbGYuZXhwZWN0ZWRfcmVzZXQpCisKKyAgICBkZWYgdGVzdF9pbmNyZW1lbnRhbGVuY29kZXIoc2VsZik6CisgICAgICAgIGVuY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxlbmNvZGVyKHNlbGYuZW5jb2RpbmcpKCkKKyAgICAgICAgb3V0cHV0ID0gYicnLmpvaW4oCisgICAgICAgICAgICBlbmNvZGVyLmVuY29kZShjaGFyKQorICAgICAgICAgICAgZm9yIGNoYXIgaW4gc2VsZi50ZXh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgc2VsZi5leHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2luY3JlbWVudGFsZW5jb2Rlcl9maW5hbChzZWxmKToKKyAgICAgICAgZW5jb2RlciA9IGNvZGVjcy5nZXRpbmNyZW1lbnRhbGVuY29kZXIoc2VsZi5lbmNvZGluZykoKQorICAgICAgICBsYXN0X2luZGV4ID0gbGVuKHNlbGYudGV4dCkgLSAxCisgICAgICAgIG91dHB1dCA9IGInJy5qb2luKAorICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGUoY2hhciwgaW5kZXggPT0gbGFzdF9pbmRleCkKKyAgICAgICAgICAgIGZvciBpbmRleCwgY2hhciBpbiBlbnVtZXJhdGUoc2VsZi50ZXh0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIHNlbGYuZXhwZWN0ZWRfcmVzZXQpCisKK2NsYXNzIFRlc3RIWlN0YXRlZnVsKFRlc3RTdGF0ZWZ1bCk6CisgICAgdGV4dCA9IHUnXHU4MDRhXHU4MDRhJworICAgIGVuY29kaW5nID0gJ2h6JworICAgIGV4cGVjdGVkID0gYid+e0FEQUQnCisgICAgZXhwZWN0ZWRfcmVzZXQgPSBiJ357QURBRH59JworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhMmU1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkKQEAgLTAsMCArMSwzNzQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyB0ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkKKyMgICBDb21tb24gVW5pdHRlc3QgUm91dGluZXMgZm9yIENKSyBjb2RlY3MKKyMKKworaW1wb3J0IGNvZGVjcworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBodHRwbGliIGltcG9ydCBIVFRQRXhjZXB0aW9uCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworY2xhc3MgVGVzdEJhc2U6CisgICAgZW5jb2RpbmcgICAgICAgID0gJycgICAjIGNvZGVjIG5hbWUKKyAgICBjb2RlYyAgICAgICAgICAgPSBOb25lICMgY29kZWMgdHVwbGUgKHdpdGggNCBlbGVtZW50cykKKyAgICB0c3RyaW5nICAgICAgICAgPSAnJyAgICMgc3RyaW5nIHRvIHRlc3QgU3RyZWFtUmVhZGVyCisKKyAgICBjb2RlY3Rlc3RzICAgICAgPSBOb25lICMgbXVzdCBzZXQuIGNvZGVjIHRlc3QgdHVwbGUKKyAgICByb3VuZHRyaXB0ZXN0ICAgPSAxICAgICMgc2V0IGlmIHJvdW5kdHJpcCBpcyBwb3NzaWJsZSB3aXRoIHVuaWNvZGUKKyAgICBoYXNfaXNvMTA2NDYgICAgPSAwICAgICMgc2V0IGlmIHRoaXMgZW5jb2RpbmcgY29udGFpbnMgd2hvbGUgaXNvMTA2NDYgbWFwCisgICAgeG1sY2hhcm5hbWV0ZXN0ID0gTm9uZSAjIHN0cmluZyB0byB0ZXN0IHhtbGNoYXJyZWZyZXBsYWNlCisgICAgdW5tYXBwZWR1bmljb2RlID0gdSdcdWRlZWUnICMgYSB1bmljb2RlIGNvZGVwb2ludCB0aGF0IGlzIG5vdCBtYXBwZWQuCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY29kZWMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuY29kZWMgPSBjb2RlY3MubG9va3VwKHNlbGYuZW5jb2RpbmcpCisgICAgICAgIHNlbGYuZW5jb2RlID0gc2VsZi5jb2RlYy5lbmNvZGUKKyAgICAgICAgc2VsZi5kZWNvZGUgPSBzZWxmLmNvZGVjLmRlY29kZQorICAgICAgICBzZWxmLnJlYWRlciA9IHNlbGYuY29kZWMuc3RyZWFtcmVhZGVyCisgICAgICAgIHNlbGYud3JpdGVyID0gc2VsZi5jb2RlYy5zdHJlYW13cml0ZXIKKyAgICAgICAgc2VsZi5pbmNyZW1lbnRhbGVuY29kZXIgPSBzZWxmLmNvZGVjLmluY3JlbWVudGFsZW5jb2RlcgorICAgICAgICBzZWxmLmluY3JlbWVudGFsZGVjb2RlciA9IHNlbGYuY29kZWMuaW5jcmVtZW50YWxkZWNvZGVyCisKKyAgICBkZWYgdGVzdF9jaHVua2NvZGluZyhzZWxmKToKKyAgICAgICAgZm9yIG5hdGl2ZSwgdXRmOCBpbiB6aXAoKltTdHJpbmdJTyhmKS5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluIHNlbGYudHN0cmluZ10pOgorICAgICAgICAgICAgdSA9IHNlbGYuZGVjb2RlKG5hdGl2ZSlbMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSwgdXRmOC5kZWNvZGUoJ3V0Zi04JykpCisgICAgICAgICAgICBpZiBzZWxmLnJvdW5kdHJpcHRlc3Q6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYXRpdmUsIHNlbGYuZW5jb2RlKHUpWzBdKQorCisgICAgZGVmIHRlc3RfZXJyb3JoYW5kbGUoc2VsZik6CisgICAgICAgIGZvciBzb3VyY2UsIHNjaGVtZSwgZXhwZWN0ZWQgaW4gc2VsZi5jb2RlY3Rlc3RzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzb3VyY2UsIGJ5dGVzKToKKyAgICAgICAgICAgICAgICBmdW5jID0gc2VsZi5kZWNvZGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZnVuYyA9IHNlbGYuZW5jb2RlCisgICAgICAgICAgICBpZiBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jKHNvdXJjZSwgc2NoZW1lKVswXQorICAgICAgICAgICAgICAgIGlmIGZ1bmMgaXMgc2VsZi5kZWNvZGU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHJlc3VsdCkgaXMgdW5pY29kZSwgdHlwZShyZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVyLmRlY29kZSglciwgJXIpPSVyICE9ICVyJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNvdXJjZSwgc2VsZi5lbmNvZGluZywgc2NoZW1lLCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHJlc3VsdCkgaXMgYnl0ZXMsIHR5cGUocmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclci5lbmNvZGUoJXIsICVyKT0lciAhPSAlcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzb3VyY2UsIHNlbGYuZW5jb2RpbmcsIHNjaGVtZSwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBmdW5jLCBzb3VyY2UsIHNjaGVtZSkKKworICAgIGRlZiB0ZXN0X3htbGNoYXJyZWZyZXBsYWNlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmhhc19pc28xMDY0NjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHMgPSB1Ilx1MGIxM1x1MGIyM1x1MGI2MCBuZCBlZ2dzIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5lbmNvZGUocywgInhtbGNoYXJyZWZyZXBsYWNlIilbMF0sCisgICAgICAgICAgICAiJiMyODM1OyYjMjg1MTsmIzI5MTI7IG5kIGVnZ3MiCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2N1c3RvbXJlcGxhY2VfZW5jb2RlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmhhc19pc28xMDY0NjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZyb20gaHRtbGVudGl0eWRlZnMgaW1wb3J0IGNvZGVwb2ludDJuYW1lCisKKyAgICAgICAgZGVmIHhtbGNoYXJuYW1lcmVwbGFjZShleGMpOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBVbmljb2RlRW5jb2RlRXJyb3IpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlICVyIiAlIGV4YykKKyAgICAgICAgICAgIGwgPSBbXQorICAgICAgICAgICAgZm9yIGMgaW4gZXhjLm9iamVjdFtleGMuc3RhcnQ6ZXhjLmVuZF06CisgICAgICAgICAgICAgICAgaWYgb3JkKGMpIGluIGNvZGVwb2ludDJuYW1lOgorICAgICAgICAgICAgICAgICAgICBsLmFwcGVuZCh1IiYlczsiICUgY29kZXBvaW50Mm5hbWVbb3JkKGMpXSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsLmFwcGVuZCh1IiYjJWQ7IiAlIG9yZChjKSkKKyAgICAgICAgICAgIHJldHVybiAodSIiLmpvaW4obCksIGV4Yy5lbmQpCisKKyAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0LnhtbGNoYXJuYW1lcmVwbGFjZSIsIHhtbGNoYXJuYW1lcmVwbGFjZSkKKworICAgICAgICBpZiBzZWxmLnhtbGNoYXJuYW1ldGVzdDoKKyAgICAgICAgICAgIHNpbiwgc291dCA9IHNlbGYueG1sY2hhcm5hbWV0ZXN0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzaW4gPSB1Ilx4YWJcdTIxMWNceGJiID0gXHUyMzI5XHUxMjM0XHUyMzJhIgorICAgICAgICAgICAgc291dCA9ICImbGFxdW87JnJlYWw7JnJhcXVvOyA9ICZsYW5nOyYjNDY2MDsmcmFuZzsiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5lbmNvZGUoc2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QueG1sY2hhcm5hbWVyZXBsYWNlIilbMF0sIHNvdXQpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja193cm9uZ19vYmplY3RzKHNlbGYpOgorICAgICAgICBkZWYgbXlyZXBsYWNlKGV4Yyk6CisgICAgICAgICAgICByZXR1cm4gKHJldCwgZXhjLmVuZCkKKyAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0LmNqa3Rlc3QiLCBteXJlcGxhY2UpCisKKyAgICAgICAgZm9yIHJldCBpbiAoWzEsIDIsIDNdLCBbXSwgTm9uZSwgb2JqZWN0KCksICdzdHJpbmcnLCAnJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZW5jb2RlLCBzZWxmLnVubWFwcGVkdW5pY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0LmNqa3Rlc3QnKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfbG9uZ19pbmRleChzZWxmKToKKyAgICAgICAgZGVmIG15cmVwbGFjZShleGMpOgorICAgICAgICAgICAgcmV0dXJuICh1J3gnLCBsb25nKGV4Yy5lbmQpKQorICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuY2prdGVzdCIsIG15cmVwbGFjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVuY29kZSh1J2FiY2QnICsgc2VsZi51bm1hcHBlZHVuaWNvZGUgKyB1J2VmZ2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0LmNqa3Rlc3QnKSwgKCdhYmNkeGVmZ2gnLCA5KSkKKworICAgICAgICBkZWYgbXlyZXBsYWNlKGV4Yyk6CisgICAgICAgICAgICByZXR1cm4gKHUneCcsIHN5cy5tYXhpbnQgKyAxKQorICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuY2prdGVzdCIsIG15cmVwbGFjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgc2VsZi5lbmNvZGUsIHNlbGYudW5tYXBwZWR1bmljb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdC5jamt0ZXN0JykKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX05vbmVfaW5kZXgoc2VsZik6CisgICAgICAgIGRlZiBteXJlcGxhY2UoZXhjKToKKyAgICAgICAgICAgIHJldHVybiAodSd4JywgTm9uZSkKKyAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0LmNqa3Rlc3QiLCBteXJlcGxhY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5lbmNvZGUsIHNlbGYudW5tYXBwZWR1bmljb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdC5jamt0ZXN0JykKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX2JhY2t3YXJkX2luZGV4KHNlbGYpOgorICAgICAgICBkZWYgbXlyZXBsYWNlKGV4Yyk6CisgICAgICAgICAgICBpZiBteXJlcGxhY2UubGltaXQgPiAwOgorICAgICAgICAgICAgICAgIG15cmVwbGFjZS5saW1pdCAtPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuICh1J1JFUExBQ0VEJywgMCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICh1J1RFUk1JTkFMJywgZXhjLmVuZCkKKyAgICAgICAgbXlyZXBsYWNlLmxpbWl0ID0gMworICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuY2prdGVzdCIsIG15cmVwbGFjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVuY29kZSh1J2FiY2QnICsgc2VsZi51bm1hcHBlZHVuaWNvZGUgKyB1J2VmZ2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0LmNqa3Rlc3QnKSwKKyAgICAgICAgICAgICAgICAoJ2FiY2RSRVBMQUNFRGFiY2RSRVBMQUNFRGFiY2RSRVBMQUNFRGFiY2RURVJNSU5BTGVmZ2gnLCA5KSkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX2ZvcndhcmRfaW5kZXgoc2VsZik6CisgICAgICAgIGRlZiBteXJlcGxhY2UoZXhjKToKKyAgICAgICAgICAgIHJldHVybiAodSdSRVBMQUNFRCcsIGV4Yy5lbmQgKyAyKQorICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuY2prdGVzdCIsIG15cmVwbGFjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmVuY29kZSh1J2FiY2QnICsgc2VsZi51bm1hcHBlZHVuaWNvZGUgKyB1J2VmZ2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0LmNqa3Rlc3QnKSwgKCdhYmNkUkVQTEFDRURnaCcsIDkpKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfaW5kZXhfb3V0b2Zib3VuZChzZWxmKToKKyAgICAgICAgZGVmIG15cmVwbGFjZShleGMpOgorICAgICAgICAgICAgcmV0dXJuICh1J1RFUk0nLCAxMDApCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5jamt0ZXN0IiwgbXlyZXBsYWNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBzZWxmLmVuY29kZSwgc2VsZi51bm1hcHBlZHVuaWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0LmNqa3Rlc3QnKQorCisgICAgZGVmIHRlc3RfaW5jcmVtZW50YWxlbmNvZGVyKHNlbGYpOgorICAgICAgICBVVEY4UmVhZGVyID0gY29kZWNzLmdldHJlYWRlcigndXRmLTgnKQorICAgICAgICBmb3Igc2l6ZWhpbnQgaW4gW05vbmVdICsgcmFuZ2UoMSwgMzMpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgWzY0LCAxMjgsIDI1NiwgNTEyLCAxMDI0XToKKyAgICAgICAgICAgIGlzdHJlYW0gPSBVVEY4UmVhZGVyKFN0cmluZ0lPKHNlbGYudHN0cmluZ1sxXSkpCisgICAgICAgICAgICBvc3RyZWFtID0gU3RyaW5nSU8oKQorICAgICAgICAgICAgZW5jb2RlciA9IHNlbGYuaW5jcmVtZW50YWxlbmNvZGVyKCkKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgaWYgc2l6ZWhpbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBpc3RyZWFtLnJlYWQoc2l6ZWhpbnQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGlzdHJlYW0ucmVhZCgpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlID0gZW5jb2Rlci5lbmNvZGUoZGF0YSkKKyAgICAgICAgICAgICAgICBvc3RyZWFtLndyaXRlKGUpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3N0cmVhbS5nZXR2YWx1ZSgpLCBzZWxmLnRzdHJpbmdbMF0pCisKKyAgICBkZWYgdGVzdF9pbmNyZW1lbnRhbGRlY29kZXIoc2VsZik6CisgICAgICAgIFVURjhXcml0ZXIgPSBjb2RlY3MuZ2V0d3JpdGVyKCd1dGYtOCcpCisgICAgICAgIGZvciBzaXplaGludCBpbiBbTm9uZSwgLTFdICsgcmFuZ2UoMSwgMzMpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgWzY0LCAxMjgsIDI1NiwgNTEyLCAxMDI0XToKKyAgICAgICAgICAgIGlzdHJlYW0gPSBTdHJpbmdJTyhzZWxmLnRzdHJpbmdbMF0pCisgICAgICAgICAgICBvc3RyZWFtID0gVVRGOFdyaXRlcihTdHJpbmdJTygpKQorICAgICAgICAgICAgZGVjb2RlciA9IHNlbGYuaW5jcmVtZW50YWxkZWNvZGVyKCkKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgZGF0YSA9IGlzdHJlYW0ucmVhZChzaXplaGludCkKKyAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB1ID0gZGVjb2Rlci5kZWNvZGUoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgb3N0cmVhbS53cml0ZSh1KQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zdHJlYW0uZ2V0dmFsdWUoKSwgc2VsZi50c3RyaW5nWzFdKQorCisgICAgZGVmIHRlc3RfaW5jcmVtZW50YWxlbmNvZGVyX2Vycm9yX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICBpbnYgPSBzZWxmLnVubWFwcGVkdW5pY29kZQorCisgICAgICAgIGUgPSBzZWxmLmluY3JlbWVudGFsZW5jb2RlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgZS5lbmNvZGUsIGludiwgVHJ1ZSkKKworICAgICAgICBlLmVycm9ycyA9ICdpZ25vcmUnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lbmNvZGUoaW52LCBUcnVlKSwgJycpCisKKyAgICAgICAgZS5yZXNldCgpCisgICAgICAgIGRlZiB0ZW1wcmVwbGFjZShleGMpOgorICAgICAgICAgICAgcmV0dXJuICh1J2NhbGxlZCcsIGV4Yy5lbmQpCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigndGVzdC5pbmNyZW1lbnRhbF9lcnJvcl9jYWxsYmFjaycsIHRlbXByZXBsYWNlKQorICAgICAgICBlLmVycm9ycyA9ICd0ZXN0LmluY3JlbWVudGFsX2Vycm9yX2NhbGxiYWNrJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZW5jb2RlKGludiwgVHJ1ZSksICdjYWxsZWQnKQorCisgICAgICAgICMgYWdhaW4KKyAgICAgICAgZS5lcnJvcnMgPSAnaWdub3JlJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZW5jb2RlKGludiwgVHJ1ZSksICcnKQorCisgICAgZGVmIHRlc3Rfc3RyZWFtcmVhZGVyKHNlbGYpOgorICAgICAgICBVVEY4V3JpdGVyID0gY29kZWNzLmdldHdyaXRlcigndXRmLTgnKQorICAgICAgICBmb3IgbmFtZSBpbiBbInJlYWQiLCAicmVhZGxpbmUiLCAicmVhZGxpbmVzIl06CisgICAgICAgICAgICBmb3Igc2l6ZWhpbnQgaW4gW05vbmUsIC0xXSArIHJhbmdlKDEsIDMzKSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNjQsIDEyOCwgMjU2LCA1MTIsIDEwMjRdOgorICAgICAgICAgICAgICAgIGlzdHJlYW0gPSBzZWxmLnJlYWRlcihTdHJpbmdJTyhzZWxmLnRzdHJpbmdbMF0pKQorICAgICAgICAgICAgICAgIG9zdHJlYW0gPSBVVEY4V3JpdGVyKFN0cmluZ0lPKCkpCisgICAgICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIoaXN0cmVhbSwgbmFtZSkKKyAgICAgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gZnVuYyhzaXplaGludCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBuYW1lID09ICJyZWFkbGluZXMiOgorICAgICAgICAgICAgICAgICAgICAgICAgb3N0cmVhbS53cml0ZWxpbmVzKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBvc3RyZWFtLndyaXRlKGRhdGEpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zdHJlYW0uZ2V0dmFsdWUoKSwgc2VsZi50c3RyaW5nWzFdKQorCisgICAgZGVmIHRlc3Rfc3RyZWFtd3JpdGVyKHNlbGYpOgorICAgICAgICByZWFkZnVuY3MgPSAoJ3JlYWQnLCAncmVhZGxpbmUnLCAncmVhZGxpbmVzJykKKyAgICAgICAgVVRGOFJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoJ3V0Zi04JykKKyAgICAgICAgZm9yIG5hbWUgaW4gcmVhZGZ1bmNzOgorICAgICAgICAgICAgZm9yIHNpemVoaW50IGluIFtOb25lXSArIHJhbmdlKDEsIDMzKSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNjQsIDEyOCwgMjU2LCA1MTIsIDEwMjRdOgorICAgICAgICAgICAgICAgIGlzdHJlYW0gPSBVVEY4UmVhZGVyKFN0cmluZ0lPKHNlbGYudHN0cmluZ1sxXSkpCisgICAgICAgICAgICAgICAgb3N0cmVhbSA9IHNlbGYud3JpdGVyKFN0cmluZ0lPKCkpCisgICAgICAgICAgICAgICAgZnVuYyA9IGdldGF0dHIoaXN0cmVhbSwgbmFtZSkKKyAgICAgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgICAgICBpZiBzaXplaGludCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmdW5jKHNpemVoaW50KQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGZ1bmMoKQorCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAicmVhZGxpbmVzIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zdHJlYW0ud3JpdGVsaW5lcyhkYXRhKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3N0cmVhbS53cml0ZShkYXRhKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvc3RyZWFtLmdldHZhbHVlKCksIHNlbGYudHN0cmluZ1swXSkKKworY2xhc3MgVGVzdEJhc2VfTWFwcGluZyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgcGFzc19lbmN0ZXN0ID0gW10KKyAgICBwYXNzX2RlY3Rlc3QgPSBbXQorICAgIHN1cG1hcHMgPSBbXQorICAgIGNvZGVjdGVzdHMgPSBbXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYub3Blbl9tYXBwaW5nX2ZpbGUoKS5jbG9zZSgpICMgdGVzdCBpdCB0byByZXBvcnQgdGhlIGVycm9yIGVhcmx5CisgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgSFRUUEV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDb3VsZCBub3QgcmV0cmlldmUgIitzZWxmLm1hcGZpbGV1cmwpCisKKyAgICBkZWYgb3Blbl9tYXBwaW5nX2ZpbGUoc2VsZik6CisgICAgICAgIHJldHVybiB0ZXN0X3N1cHBvcnQub3Blbl91cmxyZXNvdXJjZShzZWxmLm1hcGZpbGV1cmwpCisKKyAgICBkZWYgdGVzdF9tYXBwaW5nX2ZpbGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYubWFwZmlsZXVybC5lbmRzd2l0aCgnLnhtbCcpOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9tYXBwaW5nX2ZpbGVfdWNtKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfbWFwcGluZ19maWxlX3BsYWluKCkKKworICAgIGRlZiBfdGVzdF9tYXBwaW5nX2ZpbGVfcGxhaW4oc2VsZik6CisgICAgICAgIF91bmljaHIgPSBsYW1iZGEgYzogZXZhbCgidSdcXFUlMDh4JyIgJSBpbnQoYywgMTYpKQorICAgICAgICB1bmljaHJzID0gbGFtYmRhIHM6IHUnJy5qb2luKF91bmljaHIoYykgZm9yIGMgaW4gcy5zcGxpdCgnKycpKQorICAgICAgICB1cnRfd2EgPSB7fQorCisgICAgICAgIHdpdGggc2VsZi5vcGVuX21hcHBpbmdfZmlsZSgpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGRhdGEgPSBsaW5lLnNwbGl0KCcjJylbMF0uc3RyaXAoKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgbGVuKGRhdGEpICE9IDI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBjc2V0dmFsID0gZXZhbChkYXRhWzBdKQorICAgICAgICAgICAgICAgIGlmIGNzZXR2YWwgPD0gMHg3RjoKKyAgICAgICAgICAgICAgICAgICAgY3NldGNoID0gY2hyKGNzZXR2YWwgJiAweGZmKQorICAgICAgICAgICAgICAgIGVsaWYgY3NldHZhbCA+PSAweDEwMDAwMDA6CisgICAgICAgICAgICAgICAgICAgIGNzZXRjaCA9IGNocihjc2V0dmFsID4+IDI0KSArIGNocigoY3NldHZhbCA+PiAxNikgJiAweGZmKSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyKChjc2V0dmFsID4+IDgpICYgMHhmZikgKyBjaHIoY3NldHZhbCAmIDB4ZmYpCisgICAgICAgICAgICAgICAgZWxpZiBjc2V0dmFsID49IDB4MTAwMDA6CisgICAgICAgICAgICAgICAgICAgIGNzZXRjaCA9IGNocihjc2V0dmFsID4+IDE2KSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyKChjc2V0dmFsID4+IDgpICYgMHhmZikgKyBjaHIoY3NldHZhbCAmIDB4ZmYpCisgICAgICAgICAgICAgICAgZWxpZiBjc2V0dmFsID49IDB4MTAwOgorICAgICAgICAgICAgICAgICAgICBjc2V0Y2ggPSBjaHIoY3NldHZhbCA+PiA4KSArIGNocihjc2V0dmFsICYgMHhmZikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgdW5pY2ggPSB1bmljaHJzKGRhdGFbMV0pCisgICAgICAgICAgICAgICAgaWYgdW5pY2ggPT0gdSdcdWZmZmQnIG9yIHVuaWNoIGluIHVydF93YToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB1cnRfd2FbdW5pY2hdID0gY3NldGNoCisKKyAgICAgICAgICAgICAgICBzZWxmLl90ZXN0cG9pbnQoY3NldGNoLCB1bmljaCkKKworICAgIGRlZiBfdGVzdF9tYXBwaW5nX2ZpbGVfdWNtKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYub3Blbl9tYXBwaW5nX2ZpbGUoKSBhcyBmOgorICAgICAgICAgICAgdWNtZGF0YSA9IGYucmVhZCgpCisgICAgICAgIHVjID0gcmUuZmluZGFsbCgnPGEgdT0iKFtBLUYwLTldezR9KSIgYj0iKFswLTlBLUYgXSspIi8+JywgdWNtZGF0YSkKKyAgICAgICAgZm9yIHVuaSwgY29kZWQgaW4gdWM6CisgICAgICAgICAgICB1bmljaCA9IHVuaWNocihpbnQodW5pLCAxNikpCisgICAgICAgICAgICBjb2RlY2ggPSAnJy5qb2luKGNocihpbnQoYywgMTYpKSBmb3IgYyBpbiBjb2RlZC5zcGxpdCgpKQorICAgICAgICAgICAgc2VsZi5fdGVzdHBvaW50KGNvZGVjaCwgdW5pY2gpCisKKyAgICBkZWYgdGVzdF9tYXBwaW5nX3N1cHBsZW1lbnRhbChzZWxmKToKKyAgICAgICAgZm9yIG1hcHBpbmcgaW4gc2VsZi5zdXBtYXBzOgorICAgICAgICAgICAgc2VsZi5fdGVzdHBvaW50KCptYXBwaW5nKQorCisgICAgZGVmIF90ZXN0cG9pbnQoc2VsZiwgY3NldGNoLCB1bmljaCk6CisgICAgICAgIGlmIChjc2V0Y2gsIHVuaWNoKSBub3QgaW4gc2VsZi5wYXNzX2VuY3Rlc3Q6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljaC5lbmNvZGUoc2VsZi5lbmNvZGluZyksIGNzZXRjaCkKKyAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3IsIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0VuY29kaW5nIGZhaWxlZCB3aGlsZSB0ZXN0aW5nICVzIC0+ICVzOiAlcycgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcih1bmljaCksIHJlcHIoY3NldGNoKSwgZXhjLnJlYXNvbikpCisgICAgICAgIGlmIChjc2V0Y2gsIHVuaWNoKSBub3QgaW4gc2VsZi5wYXNzX2RlY3Rlc3Q6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjc2V0Y2guZGVjb2RlKHNlbGYuZW5jb2RpbmcpLCB1bmljaCkKKyAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3IsIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0RlY29kaW5nIGZhaWxlZCB3aGlsZSB0ZXN0aW5nICVzIC0+ICVzOiAlcycgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihjc2V0Y2gpLCByZXByKHVuaWNoKSwgZXhjLnJlYXNvbikpCisKKyAgICBkZWYgdGVzdF9lcnJvcmhhbmRsZShzZWxmKToKKyAgICAgICAgZm9yIHNvdXJjZSwgc2NoZW1lLCBleHBlY3RlZCBpbiBzZWxmLmNvZGVjdGVzdHM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNvdXJjZSwgYnl0ZXMpOgorICAgICAgICAgICAgICAgIGZ1bmMgPSBzb3VyY2UuZGVjb2RlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bmMgPSBzb3VyY2UuZW5jb2RlCisgICAgICAgICAgICBpZiBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNvdXJjZSwgYnl0ZXMpOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jKHNlbGYuZW5jb2RpbmcsIHNjaGVtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocmVzdWx0KSBpcyB1bmljb2RlLCB0eXBlKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXIuZGVjb2RlKCVyLCAlcik9JXIgIT0gJXInCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc291cmNlLCBzZWxmLmVuY29kaW5nLCBzY2hlbWUsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYyhzZWxmLmVuY29kaW5nLCBzY2hlbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHJlc3VsdCkgaXMgYnl0ZXMsIHR5cGUocmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclci5lbmNvZGUoJXIsICVyKT0lciAhPSAlcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzb3VyY2UsIHNlbGYuZW5jb2RpbmcsIHNjaGVtZSwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBmdW5jLCBzZWxmLmVuY29kaW5nLCBzY2hlbWUpCisKK2RlZiBsb2FkX3Rlc3RzdHJpbmcobmFtZSk6CisgICAgZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdjamtlbmNvZGluZ3MnKQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGlyLCBuYW1lICsgJy50eHQnKSwgJ3JiJykgYXMgZjoKKyAgICAgICAgZW5jb2RlZCA9IGYucmVhZCgpCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkaXIsIG5hbWUgKyAnLXV0ZjgudHh0JyksICdyYicpIGFzIGY6CisgICAgICAgIHV0ZjggPSBmLnJlYWQoKQorICAgIHJldHVybiBlbmNvZGVkLCB1dGY4CmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tdWx0aWZpbGUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tdWx0aWZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQzMDc1YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X211bHRpZmlsZS5weQpAQCAtMCwwICsxLDY3IEBACitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorbWltZXRvb2xzID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ21pbWV0b29scycsIGRlcHJlY2F0ZWQ9VHJ1ZSkKK211bHRpZmlsZSA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdtdWx0aWZpbGUnLCBkZXByZWNhdGVkPVRydWUpCitpbXBvcnQgY1N0cmluZ0lPCisKK21zZyA9ICIiIk1pbWUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsKKyAgICAgICAgYm91bmRhcnk9Ij09PT09PT09PT09PT09PT09PT09PV81OTA0NTM2Njc9PV8iCitYLU9yaWdpbmFsQXJyaXZhbFRpbWU6IDA1IEZlYiAyMDAyIDAzOjQzOjIzLjAzMTAgKFVUQykgRklMRVRJTUU9WzQyRDg4Q0UwOjAxQzFBREY3XQorCistLT09PT09PT09PT09PT09PT09PT09PV81OTA0NTM2Njc9PV8KK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOworICAgICAgICBib3VuZGFyeT0iPT09PT09PT09PT09PT09PT09PT09XzU5MDQ1MzY3Nz09Xy5BTFQiCisKKy0tPT09PT09PT09PT09PT09PT09PT09XzU5MDQ1MzY3Nz09Xy5BTFQKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXMtYXNjaWkiOyBmb3JtYXQ9Zmxvd2VkCisKK3Rlc3QgQQorLS09PT09PT09PT09PT09PT09PT09PT1fNTkwNDUzNjc3PT1fLkFMVAorQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9InVzLWFzY2lpIgorCis8aHRtbD4KKzxiPnRlc3QgQjwvZm9udD48L2I+PC9odG1sPgorCistLT09PT09PT09PT09PT09PT09PT09PV81OTA0NTM2Nzc9PV8uQUxULS0KKworLS09PT09PT09PT09PT09PT09PT09PT1fNTkwNDUzNjY3PT1fCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InVzLWFzY2lpIgorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ImF0dC50eHQiCisKK0F0dGFjaGVkIENvbnRlbnQuCitBdHRhY2hlZCBDb250ZW50LgorQXR0YWNoZWQgQ29udGVudC4KK0F0dGFjaGVkIENvbnRlbnQuCisKKy0tPT09PT09PT09PT09PT09PT09PT09XzU5MDQ1MzY2Nz09Xy0tCisKKyIiIgorCitkZWYgZ2V0TUlNRU1zZyhtZik6CisgICAgZ2xvYmFsIGJvdW5kYXJpZXMsIGxpbmVjb3VudAorICAgIG1zZyA9IG1pbWV0b29scy5NZXNzYWdlKG1mKQorCisgICAgI3ByaW50ICJUWVBFOiAlcyIgJSBtc2cuZ2V0dHlwZSgpCisgICAgaWYgbXNnLmdldG1haW50eXBlKCkgPT0gJ211bHRpcGFydCc6CisgICAgICAgIGJvdW5kYXJ5ID0gbXNnLmdldHBhcmFtKCJib3VuZGFyeSIpCisgICAgICAgIGJvdW5kYXJpZXMgKz0gMQorCisgICAgICAgIG1mLnB1c2goYm91bmRhcnkpCisgICAgICAgIHdoaWxlIG1mLm5leHQoKToKKyAgICAgICAgICAgIGdldE1JTUVNc2cobWYpCisgICAgICAgIG1mLnBvcCgpCisgICAgZWxzZToKKyAgICAgICAgbGluZXMgPSBtZi5yZWFkbGluZXMoKQorICAgICAgICBsaW5lY291bnQgKz0gbGVuKGxpbmVzKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgZ2xvYmFsIGJvdW5kYXJpZXMsIGxpbmVjb3VudAorICAgIGJvdW5kYXJpZXMgPSAwCisgICAgbGluZWNvdW50ID0gMAorICAgIGYgPSBjU3RyaW5nSU8uU3RyaW5nSU8obXNnKQorICAgIGdldE1JTUVNc2cobXVsdGlmaWxlLk11bHRpRmlsZShmKSkKKyAgICBhc3NlcnQgYm91bmRhcmllcyA9PSAyCisgICAgYXNzZXJ0IGxpbmVjb3VudCA9PSA5CisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODY2M2VmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5CkBAIC0wLDAgKzEsMjUyNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMKKyMgVW5pdCB0ZXN0cyBmb3IgdGhlIG11bHRpcHJvY2Vzc2luZyBwYWNrYWdlCisjCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IFF1ZXVlCitpbXBvcnQgdGltZQoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgZ2MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBhcnJheQoraW1wb3J0IHNvY2tldAoraW1wb3J0IHJhbmRvbQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBlcnJubworaW1wb3J0IHRlc3Quc2NyaXB0X2hlbHBlcgorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitfbXVsdGlwcm9jZXNzaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ19tdWx0aXByb2Nlc3NpbmcnKQorIyBpbXBvcnQgdGhyZWFkaW5nIGFmdGVyIF9tdWx0aXByb2Nlc3NpbmcgdG8gcmFpc2UgYSBtb3JlIHJlbGV2YW50IGVycm9yCisjIG1lc3NhZ2U6ICJObyBtb2R1bGUgbmFtZWQgX211bHRpcHJvY2Vzc2luZyIuIF9tdWx0aXByb2Nlc3NpbmcgaXMgbm90IGNvbXBpbGVkCisjIHdpdGhvdXQgdGhyZWFkIHN1cHBvcnQuCitpbXBvcnQgdGhyZWFkaW5nCisKKyMgV29yayBhcm91bmQgYnJva2VuIHNlbV9vcGVuIGltcGxlbWVudGF0aW9ucwordGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ211bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZScpCisKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcuZHVtbXkKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbgoraW1wb3J0IG11bHRpcHJvY2Vzc2luZy5tYW5hZ2VycworaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5oZWFwCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLnBvb2wKKworZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IHV0aWwKKwordHJ5OgorICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCByZWR1Y3Rpb24KKyAgICBIQVNfUkVEVUNUSU9OID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIEhBU19SRURVQ1RJT04gPSBGYWxzZQorCit0cnk6CisgICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBWYWx1ZSwgY29weQorICAgIEhBU19TSEFSRURDVFlQRVMgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgSEFTX1NIQVJFRENUWVBFUyA9IEZhbHNlCisKK3RyeToKKyAgICBpbXBvcnQgbXN2Y3J0CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgbXN2Y3J0ID0gTm9uZQorCisjCisjCisjCisKK2xhdGluID0gc3RyCisKKyMKKyMgQ29uc3RhbnRzCisjCisKK0xPR19MRVZFTCA9IHV0aWwuU1VCV0FSTklORworI0xPR19MRVZFTCA9IGxvZ2dpbmcuREVCVUcKKworREVMVEEgPSAwLjEKK0NIRUNLX1RJTUlOR1MgPSBGYWxzZSAgICAgIyBtYWtpbmcgdHJ1ZSBtYWtlcyB0ZXN0cyB0YWtlIGEgbG90IGxvbmdlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCBjYW4gc29tZXRpbWVzIGNhdXNlIHNvbWUgbm9uLXNlcmlvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmYWlsdXJlcyBiZWNhdXNlIHNvbWUgY2FsbHMgYmxvY2sgYSBiaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsb25nZXIgdGhhbiBleHBlY3RlZAoraWYgQ0hFQ0tfVElNSU5HUzoKKyAgICBUSU1FT1VUMSwgVElNRU9VVDIsIFRJTUVPVVQzID0gMC44MiwgMC4zNSwgMS40CitlbHNlOgorICAgIFRJTUVPVVQxLCBUSU1FT1VUMiwgVElNRU9VVDMgPSAwLjEsIDAuMSwgMC4xCisKK0hBVkVfR0VUVkFMVUUgPSBub3QgZ2V0YXR0cihfbXVsdGlwcm9jZXNzaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIQVZFX0JST0tFTl9TRU1fR0VUVkFMVUUnLCBGYWxzZSkKKworV0lOMzIgPSAoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIpCisKK3RyeToKKyAgICBNQVhGRCA9IG9zLnN5c2NvbmYoIlNDX09QRU5fTUFYIikKK2V4Y2VwdDoKKyAgICBNQVhGRCA9IDI1NgorCisjCisjIFNvbWUgdGVzdHMgcmVxdWlyZSBjdHlwZXMKKyMKKwordHJ5OgorICAgIGZyb20gY3R5cGVzIGltcG9ydCBTdHJ1Y3R1cmUsIGNfaW50LCBjX2RvdWJsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFN0cnVjdHVyZSA9IG9iamVjdAorICAgIGNfaW50ID0gY19kb3VibGUgPSBOb25lCisKKworZGVmIGNoZWNrX2Vub3VnaF9zZW1hcGhvcmVzKCk6CisgICAgIiIiQ2hlY2sgdGhhdCB0aGUgc3lzdGVtIHN1cHBvcnRzIGVub3VnaCBzZW1hcGhvcmVzIHRvIHJ1biB0aGUgdGVzdC4iIiIKKyAgICAjIG1pbmltdW0gbnVtYmVyIG9mIHNlbWFwaG9yZXMgYXZhaWxhYmxlIGFjY29yZGluZyB0byBQT1NJWAorICAgIG5zZW1zX21pbiA9IDI1NgorICAgIHRyeToKKyAgICAgICAgbnNlbXMgPSBvcy5zeXNjb25mKCJTQ19TRU1fTlNFTVNfTUFYIikKKyAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgIyBzeXNjb25mIG5vdCBhdmFpbGFibGUgb3Igc2V0dGluZyBub3QgYXZhaWxhYmxlCisgICAgICAgIHJldHVybgorICAgIGlmIG5zZW1zID09IC0xIG9yIG5zZW1zID49IG5zZW1zX21pbjoKKyAgICAgICAgcmV0dXJuCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlRoZSBPUyBkb2Vzbid0IHN1cHBvcnQgZW5vdWdoIHNlbWFwaG9yZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBydW4gdGhlIHRlc3QgKHJlcXVpcmVkOiAlZCkuIiAlIG5zZW1zX21pbikKKworCisjCisjIENyZWF0ZXMgYSB3cmFwcGVyIGZvciBhIGZ1bmN0aW9uIHdoaWNoIHJlY29yZHMgdGhlIHRpbWUgaXQgdGFrZXMgdG8gZmluaXNoCisjCisKK2NsYXNzIFRpbWluZ1dyYXBwZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jKToKKyAgICAgICAgc2VsZi5mdW5jID0gZnVuYworICAgICAgICBzZWxmLmVsYXBzZWQgPSBOb25lCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHQgPSB0aW1lLnRpbWUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5mdW5jKCphcmdzLCAqKmt3ZHMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmVsYXBzZWQgPSB0aW1lLnRpbWUoKSAtIHQKKworIworIyBCYXNlIGNsYXNzIGZvciB0ZXN0IGNhc2VzCisjCisKK2NsYXNzIEJhc2VUZXN0Q2FzZShvYmplY3QpOgorCisgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywgJ21hbmFnZXInLCAndGhyZWFkcycpCisKKyAgICBkZWYgYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoc2VsZiwgYSwgYik6CisgICAgICAgIGlmIENIRUNLX1RJTUlOR1M6CisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGEsIGIsIDEpCisKKyAgICBkZWYgYXNzZXJ0UmV0dXJuc0lmSW1wbGVtZW50ZWQoc2VsZiwgdmFsdWUsIGZ1bmMsICphcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzID0gZnVuYygqYXJncykKKyAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgcmVzKQorCisgICAgIyBGb3IgdGhlIHNhbml0eSBvZiBXaW5kb3dzIHVzZXJzLCByYXRoZXIgdGhhbiBjcmFzaGluZyBvciBmcmVlemluZyBpbgorICAgICMgbXVsdGlwbGUgd2F5cy4KKyAgICBkZWYgX19yZWR1Y2VfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoInNob3VsZG4ndCB0cnkgdG8gcGlja2xlIGEgdGVzdCBjYXNlIikKKworICAgIF9fcmVkdWNlX2V4X18gPSBfX3JlZHVjZV9fCisKKyMKKyMgUmV0dXJuIHRoZSB2YWx1ZSBvZiBhIHNlbWFwaG9yZQorIworCitkZWYgZ2V0X3ZhbHVlKHNlbGYpOgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3ZhbHVlKCkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9TZW1hcGhvcmVfX3ZhbHVlCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWUKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyMKKyMgVGVzdGNhc2VzCisjCisKK2NsYXNzIF9UZXN0UHJvY2VzcyhCYXNlVGVzdENhc2UpOgorCisgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywgJ3RocmVhZHMnKQorCisgICAgZGVmIHRlc3RfY3VycmVudChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5UWVBFID09ICd0aHJlYWRzJzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGN1cnJlbnQgPSBzZWxmLmN1cnJlbnRfcHJvY2VzcygpCisgICAgICAgIGF1dGhrZXkgPSBjdXJyZW50LmF1dGhrZXkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoY3VycmVudC5pc19hbGl2ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGN1cnJlbnQuZGFlbW9uKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYXV0aGtleSwgYnl0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oYXV0aGtleSkgPiAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1cnJlbnQuaWRlbnQsIG9zLmdldHBpZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1cnJlbnQuZXhpdGNvZGUsIE5vbmUpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3QoY2xzLCBxLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgY3VycmVudCA9IGNscy5jdXJyZW50X3Byb2Nlc3MoKQorICAgICAgICBxLnB1dChhcmdzKQorICAgICAgICBxLnB1dChrd2RzKQorICAgICAgICBxLnB1dChjdXJyZW50Lm5hbWUpCisgICAgICAgIGlmIGNscy5UWVBFICE9ICd0aHJlYWRzJzoKKyAgICAgICAgICAgIHEucHV0KGJ5dGVzKGN1cnJlbnQuYXV0aGtleSkpCisgICAgICAgICAgICBxLnB1dChjdXJyZW50LnBpZCkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3Moc2VsZik6CisgICAgICAgIHEgPSBzZWxmLlF1ZXVlKDEpCisgICAgICAgIGUgPSBzZWxmLkV2ZW50KCkKKyAgICAgICAgYXJncyA9IChxLCAxLCAyKQorICAgICAgICBrd2FyZ3MgPSB7J2hlbGxvJzoyMywgJ2J5ZSc6Mi41NH0KKyAgICAgICAgbmFtZSA9ICdTb21lUHJvY2VzcycKKyAgICAgICAgcCA9IHNlbGYuUHJvY2VzcygKKyAgICAgICAgICAgIHRhcmdldD1zZWxmLl90ZXN0LCBhcmdzPWFyZ3MsIGt3YXJncz1rd2FyZ3MsIG5hbWU9bmFtZQorICAgICAgICAgICAgKQorICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgY3VycmVudCA9IHNlbGYuY3VycmVudF9wcm9jZXNzKCkKKworICAgICAgICBpZiBzZWxmLlRZUEUgIT0gJ3RocmVhZHMnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmF1dGhrZXksIGN1cnJlbnQuYXV0aGtleSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmlzX2FsaXZlKCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZGFlbW9uLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHAsIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpIGlzIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5leGl0Y29kZSwgTm9uZSkKKworICAgICAgICBwLnN0YXJ0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZXhpdGNvZGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5pc19hbGl2ZSgpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEluKHAsIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLmdldCgpLCBhcmdzWzE6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLmdldCgpLCBrd2FyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5nZXQoKSwgcC5uYW1lKQorICAgICAgICBpZiBzZWxmLlRZUEUgIT0gJ3RocmVhZHMnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLmdldCgpLCBjdXJyZW50LmF1dGhrZXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuZ2V0KCksIHAucGlkKQorCisgICAgICAgIHAuam9pbigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmV4aXRjb2RlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaXNfYWxpdmUoKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocCwgc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF90ZXJtaW5hdGUoY2xzKToKKyAgICAgICAgdGltZS5zbGVlcCgxMDAwKQorCisgICAgZGVmIHRlc3RfdGVybWluYXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLlRZUEUgPT0gJ3RocmVhZHMnOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fdGVzdF90ZXJtaW5hdGUpCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwLnN0YXJ0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaXNfYWxpdmUoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwLCBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZXhpdGNvZGUsIE5vbmUpCisKKyAgICAgICAgcC50ZXJtaW5hdGUoKQorCisgICAgICAgIGpvaW4gPSBUaW1pbmdXcmFwcGVyKHAuam9pbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoam9pbi5lbGFwc2VkLCAwLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmlzX2FsaXZlKCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHAsIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCisKKyAgICAgICAgcC5qb2luKCkKKworICAgICAgICAjIFhYWCBzb21ldGltZXMgZ2V0IHAuZXhpdGNvZGUgPT0gMCBvbiBXaW5kb3dzIC4uLgorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChwLmV4aXRjb2RlLCAtc2lnbmFsLlNJR1RFUk0pCisKKyAgICBkZWYgdGVzdF9jcHVfY291bnQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNwdXMgPSBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCkKKyAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CisgICAgICAgICAgICBjcHVzID0gMQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShjcHVzKSBpcyBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcHVzID49IDEpCisKKyAgICBkZWYgdGVzdF9hY3RpdmVfY2hpbGRyZW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKSwgbGlzdCkKKworICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD10aW1lLnNsZWVwLCBhcmdzPShERUxUQSwpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHAsIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCisKKyAgICAgICAgcC5kYWVtb24gPSBUcnVlCisgICAgICAgIHAuc3RhcnQoKQorICAgICAgICBzZWxmLmFzc2VydEluKHAsIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCisKKyAgICAgICAgcC5qb2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihwLCBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X3JlY3Vyc2lvbihjbHMsIHdjb25uLCBpZCk6CisgICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBmb3JraW5nCisgICAgICAgIHdjb25uLnNlbmQoaWQpCisgICAgICAgIGlmIGxlbihpZCkgPCAyOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6CisgICAgICAgICAgICAgICAgcCA9IGNscy5Qcm9jZXNzKAorICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9Y2xzLl90ZXN0X3JlY3Vyc2lvbiwgYXJncz0od2Nvbm4sIGlkK1tpXSkKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICAgICAgIHAuam9pbigpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpb24oc2VsZik6CisgICAgICAgIHJjb25uLCB3Y29ubiA9IHNlbGYuUGlwZShkdXBsZXg9RmFsc2UpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVjdXJzaW9uKHdjb25uLCBbXSkKKworICAgICAgICB0aW1lLnNsZWVwKERFTFRBKQorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICB3aGlsZSByY29ubi5wb2xsKCk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJjb25uLnJlY3YoKSkKKworICAgICAgICBleHBlY3RlZCA9IFsKKyAgICAgICAgICAgIFtdLAorICAgICAgICAgICAgICBbMF0sCisgICAgICAgICAgICAgICAgWzAsIDBdLAorICAgICAgICAgICAgICAgIFswLCAxXSwKKyAgICAgICAgICAgICAgWzFdLAorICAgICAgICAgICAgICAgIFsxLCAwXSwKKyAgICAgICAgICAgICAgICBbMSwgMV0KKyAgICAgICAgICAgIF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X3N5c19leGl0KGNscywgcmVhc29uLCB0ZXN0Zm4pOgorICAgICAgICBzeXMuc3RkZXJyID0gb3Blbih0ZXN0Zm4sICd3JykKKyAgICAgICAgc3lzLmV4aXQocmVhc29uKQorCisgICAgZGVmIHRlc3Rfc3lzX2V4aXQoc2VsZik6CisgICAgICAgICMgU2VlIElzc3VlIDEzODU0CisgICAgICAgIGlmIHNlbGYuVFlQRSA9PSAndGhyZWFkcyc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0ZXN0Zm4gPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0X3N1cHBvcnQudW5saW5rLCB0ZXN0Zm4pCisKKyAgICAgICAgZm9yIHJlYXNvbiwgY29kZSBpbiAoKFsxLCAyLCAzXSwgMSksICgnaWdub3JlIHRoaXMnLCAwKSk6CisgICAgICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X3N5c19leGl0LCBhcmdzPShyZWFzb24sIHRlc3RmbikpCisgICAgICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICAgcC5qb2luKDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZXhpdGNvZGUsIGNvZGUpCisKKyAgICAgICAgICAgIHdpdGggb3Blbih0ZXN0Zm4sICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLnJzdHJpcCgpLCBzdHIocmVhc29uKSkKKworICAgICAgICBmb3IgcmVhc29uIGluIChUcnVlLCBGYWxzZSwgOCk6CisgICAgICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zeXMuZXhpdCwgYXJncz0ocmVhc29uLCkpCisgICAgICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICAgcC5qb2luKDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZXhpdGNvZGUsIHJlYXNvbikKKworIworIworIworCitjbGFzcyBfVXBwZXJDYXNlcihtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuY2hpbGRfY29ubiwgc2VsZi5wYXJlbnRfY29ubiA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKCkKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYucGFyZW50X2Nvbm4uY2xvc2UoKQorICAgICAgICBmb3IgcyBpbiBpdGVyKHNlbGYuY2hpbGRfY29ubi5yZWN2LCBOb25lKToKKyAgICAgICAgICAgIHNlbGYuY2hpbGRfY29ubi5zZW5kKHMudXBwZXIoKSkKKyAgICAgICAgc2VsZi5jaGlsZF9jb25uLmNsb3NlKCkKKworICAgIGRlZiBzdWJtaXQoc2VsZiwgcyk6CisgICAgICAgIGFzc2VydCB0eXBlKHMpIGlzIHN0cgorICAgICAgICBzZWxmLnBhcmVudF9jb25uLnNlbmQocykKKyAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50X2Nvbm4ucmVjdigpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJlbnRfY29ubi5zZW5kKE5vbmUpCisgICAgICAgIHNlbGYucGFyZW50X2Nvbm4uY2xvc2UoKQorICAgICAgICBzZWxmLmNoaWxkX2Nvbm4uY2xvc2UoKQorCitjbGFzcyBfVGVzdFN1YmNsYXNzaW5nUHJvY2VzcyhCYXNlVGVzdENhc2UpOgorCisgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2luZyhzZWxmKToKKyAgICAgICAgdXBwZXJjYXNlciA9IF9VcHBlckNhc2VyKCkKKyAgICAgICAgdXBwZXJjYXNlci5kYWVtb24gPSBUcnVlCisgICAgICAgIHVwcGVyY2FzZXIuc3RhcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVwcGVyY2FzZXIuc3VibWl0KCdoZWxsbycpLCAnSEVMTE8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVwcGVyY2FzZXIuc3VibWl0KCd3b3JsZCcpLCAnV09STEQnKQorICAgICAgICB1cHBlcmNhc2VyLnN0b3AoKQorICAgICAgICB1cHBlcmNhc2VyLmpvaW4oKQorCisjCisjCisjCisKK2RlZiBxdWV1ZV9lbXB0eShxKToKKyAgICBpZiBoYXNhdHRyKHEsICdlbXB0eScpOgorICAgICAgICByZXR1cm4gcS5lbXB0eSgpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHEucXNpemUoKSA9PSAwCisKK2RlZiBxdWV1ZV9mdWxsKHEsIG1heHNpemUpOgorICAgIGlmIGhhc2F0dHIocSwgJ2Z1bGwnKToKKyAgICAgICAgcmV0dXJuIHEuZnVsbCgpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHEucXNpemUoKSA9PSBtYXhzaXplCisKKworY2xhc3MgX1Rlc3RRdWV1ZShCYXNlVGVzdENhc2UpOgorCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfcHV0KGNscywgcXVldWUsIGNoaWxkX2Nhbl9zdGFydCwgcGFyZW50X2Nhbl9jb250aW51ZSk6CisgICAgICAgIGNoaWxkX2Nhbl9zdGFydC53YWl0KCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNik6CisgICAgICAgICAgICBxdWV1ZS5nZXQoKQorICAgICAgICBwYXJlbnRfY2FuX2NvbnRpbnVlLnNldCgpCisKKyAgICBkZWYgdGVzdF9wdXQoc2VsZik6CisgICAgICAgIE1BWFNJWkUgPSA2CisgICAgICAgIHF1ZXVlID0gc2VsZi5RdWV1ZShtYXhzaXplPU1BWFNJWkUpCisgICAgICAgIGNoaWxkX2Nhbl9zdGFydCA9IHNlbGYuRXZlbnQoKQorICAgICAgICBwYXJlbnRfY2FuX2NvbnRpbnVlID0gc2VsZi5FdmVudCgpCisKKyAgICAgICAgcHJvYyA9IHNlbGYuUHJvY2VzcygKKyAgICAgICAgICAgIHRhcmdldD1zZWxmLl90ZXN0X3B1dCwKKyAgICAgICAgICAgIGFyZ3M9KHF1ZXVlLCBjaGlsZF9jYW5fc3RhcnQsIHBhcmVudF9jYW5fY29udGludWUpCisgICAgICAgICAgICApCisgICAgICAgIHByb2MuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwcm9jLnN0YXJ0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1ZXVlX2VtcHR5KHF1ZXVlKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdWV1ZV9mdWxsKHF1ZXVlLCBNQVhTSVpFKSwgRmFsc2UpCisKKyAgICAgICAgcXVldWUucHV0KDEpCisgICAgICAgIHF1ZXVlLnB1dCgyLCBUcnVlKQorICAgICAgICBxdWV1ZS5wdXQoMywgVHJ1ZSwgTm9uZSkKKyAgICAgICAgcXVldWUucHV0KDQsIEZhbHNlKQorICAgICAgICBxdWV1ZS5wdXQoNSwgRmFsc2UsIE5vbmUpCisgICAgICAgIHF1ZXVlLnB1dF9ub3dhaXQoNikKKworICAgICAgICAjIHRoZSB2YWx1ZXMgbWF5IGJlIGluIGJ1ZmZlciBidXQgbm90IHlldCBpbiBwaXBlIHNvIHNsZWVwIGEgYml0CisgICAgICAgIHRpbWUuc2xlZXAoREVMVEEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdWV1ZV9lbXB0eShxdWV1ZSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1ZXVlX2Z1bGwocXVldWUsIE1BWFNJWkUpLCBUcnVlKQorCisgICAgICAgIHB1dCA9IFRpbWluZ1dyYXBwZXIocXVldWUucHV0KQorICAgICAgICBwdXRfbm93YWl0ID0gVGltaW5nV3JhcHBlcihxdWV1ZS5wdXRfbm93YWl0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFF1ZXVlLkZ1bGwsIHB1dCwgNywgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwocHV0LmVsYXBzZWQsIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUXVldWUuRnVsbCwgcHV0LCA3LCBGYWxzZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChwdXQuZWxhcHNlZCwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhRdWV1ZS5GdWxsLCBwdXRfbm93YWl0LCA3KQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKHB1dF9ub3dhaXQuZWxhcHNlZCwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhRdWV1ZS5GdWxsLCBwdXQsIDcsIFRydWUsIFRJTUVPVVQxKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKHB1dC5lbGFwc2VkLCBUSU1FT1VUMSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhRdWV1ZS5GdWxsLCBwdXQsIDcsIEZhbHNlLCBUSU1FT1VUMikKKyAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChwdXQuZWxhcHNlZCwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhRdWV1ZS5GdWxsLCBwdXQsIDcsIFRydWUsIHRpbWVvdXQ9VElNRU9VVDMpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwocHV0LmVsYXBzZWQsIFRJTUVPVVQzKQorCisgICAgICAgIGNoaWxkX2Nhbl9zdGFydC5zZXQoKQorICAgICAgICBwYXJlbnRfY2FuX2NvbnRpbnVlLndhaXQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVldWVfZW1wdHkocXVldWUpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1ZXVlX2Z1bGwocXVldWUsIE1BWFNJWkUpLCBGYWxzZSkKKworICAgICAgICBwcm9jLmpvaW4oKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X2dldChjbHMsIHF1ZXVlLCBjaGlsZF9jYW5fc3RhcnQsIHBhcmVudF9jYW5fY29udGludWUpOgorICAgICAgICBjaGlsZF9jYW5fc3RhcnQud2FpdCgpCisgICAgICAgICNxdWV1ZS5wdXQoMSkKKyAgICAgICAgcXVldWUucHV0KDIpCisgICAgICAgIHF1ZXVlLnB1dCgzKQorICAgICAgICBxdWV1ZS5wdXQoNCkKKyAgICAgICAgcXVldWUucHV0KDUpCisgICAgICAgIHBhcmVudF9jYW5fY29udGludWUuc2V0KCkKKworICAgIGRlZiB0ZXN0X2dldChzZWxmKToKKyAgICAgICAgcXVldWUgPSBzZWxmLlF1ZXVlKCkKKyAgICAgICAgY2hpbGRfY2FuX3N0YXJ0ID0gc2VsZi5FdmVudCgpCisgICAgICAgIHBhcmVudF9jYW5fY29udGludWUgPSBzZWxmLkV2ZW50KCkKKworICAgICAgICBwcm9jID0gc2VsZi5Qcm9jZXNzKAorICAgICAgICAgICAgdGFyZ2V0PXNlbGYuX3Rlc3RfZ2V0LAorICAgICAgICAgICAgYXJncz0ocXVldWUsIGNoaWxkX2Nhbl9zdGFydCwgcGFyZW50X2Nhbl9jb250aW51ZSkKKyAgICAgICAgICAgICkKKyAgICAgICAgcHJvYy5kYWVtb24gPSBUcnVlCisgICAgICAgIHByb2Muc3RhcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVldWVfZW1wdHkocXVldWUpLCBUcnVlKQorCisgICAgICAgIGNoaWxkX2Nhbl9zdGFydC5zZXQoKQorICAgICAgICBwYXJlbnRfY2FuX2NvbnRpbnVlLndhaXQoKQorCisgICAgICAgIHRpbWUuc2xlZXAoREVMVEEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVldWVfZW1wdHkocXVldWUpLCBGYWxzZSkKKworICAgICAgICAjIEhhbmdzIHVuZXhwZWN0ZWRseSwgcmVtb3ZlIGZvciBub3cKKyAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWwocXVldWUuZ2V0KCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVldWUuZ2V0KFRydWUsIE5vbmUpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1ZXVlLmdldChUcnVlKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdWV1ZS5nZXQodGltZW91dD0xKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdWV1ZS5nZXRfbm93YWl0KCksIDUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdWV1ZV9lbXB0eShxdWV1ZSksIFRydWUpCisKKyAgICAgICAgZ2V0ID0gVGltaW5nV3JhcHBlcihxdWV1ZS5nZXQpCisgICAgICAgIGdldF9ub3dhaXQgPSBUaW1pbmdXcmFwcGVyKHF1ZXVlLmdldF9ub3dhaXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUXVldWUuRW1wdHksIGdldCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoZ2V0LmVsYXBzZWQsIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUXVldWUuRW1wdHksIGdldCwgRmFsc2UsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoZ2V0LmVsYXBzZWQsIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUXVldWUuRW1wdHksIGdldF9ub3dhaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoZ2V0X25vd2FpdC5lbGFwc2VkLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFF1ZXVlLkVtcHR5LCBnZXQsIFRydWUsIFRJTUVPVVQxKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKGdldC5lbGFwc2VkLCBUSU1FT1VUMSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhRdWV1ZS5FbXB0eSwgZ2V0LCBGYWxzZSwgVElNRU9VVDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoZ2V0LmVsYXBzZWQsIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUXVldWUuRW1wdHksIGdldCwgdGltZW91dD1USU1FT1VUMykKKyAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChnZXQuZWxhcHNlZCwgVElNRU9VVDMpCisKKyAgICAgICAgcHJvYy5qb2luKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF9mb3JrKGNscywgcXVldWUpOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCwgMjApOgorICAgICAgICAgICAgcXVldWUucHV0KGkpCisgICAgICAgICMgbm90ZSB0aGF0IGF0IHRoaXMgcG9pbnQgdGhlIGl0ZW1zIG1heSBvbmx5IGJlIGJ1ZmZlcmVkLCBzbyB0aGUKKyAgICAgICAgIyBwcm9jZXNzIGNhbm5vdCBzaHV0ZG93biB1bnRpbCB0aGUgZmVlZGVyIHRocmVhZCBoYXMgZmluaXNoZWQKKyAgICAgICAgIyBwdXNoaW5nIGl0ZW1zIG9udG8gdGhlIHBpcGUuCisKKyAgICBkZWYgdGVzdF9mb3JrKHNlbGYpOgorICAgICAgICAjIE9sZCB2ZXJzaW9ucyBvZiBRdWV1ZSB3b3VsZCBmYWlsIHRvIGNyZWF0ZSBhIG5ldyBmZWVkZXIKKyAgICAgICAgIyB0aHJlYWQgZm9yIGEgZm9ya2VkIHByb2Nlc3MgaWYgdGhlIG9yaWdpbmFsIHByb2Nlc3MgaGFkIGl0cworICAgICAgICAjIG93biBmZWVkZXIgdGhyZWFkLiAgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoaXMgbm8gbG9uZ2VyCisgICAgICAgICMgaGFwcGVucy4KKworICAgICAgICBxdWV1ZSA9IHNlbGYuUXVldWUoKQorCisgICAgICAgICMgcHV0IGl0ZW1zIG9uIHF1ZXVlIHNvIHRoYXQgbWFpbiBwcm9jZXNzIHN0YXJ0cyBhIGZlZWRlciB0aHJlYWQKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgcXVldWUucHV0KGkpCisKKyAgICAgICAgIyB3YWl0IHRvIG1ha2Ugc3VyZSB0aHJlYWQgc3RhcnRzIGJlZm9yZSB3ZSBmb3JrIGEgbmV3IHByb2Nlc3MKKyAgICAgICAgdGltZS5zbGVlcChERUxUQSkKKworICAgICAgICAjIGZvcmsgcHJvY2VzcworICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X2ZvcmssIGFyZ3M9KHF1ZXVlLCkpCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwLnN0YXJ0KCkKKworICAgICAgICAjIGNoZWNrIHRoYXQgYWxsIGV4cGVjdGVkIGl0ZW1zIGFyZSBpbiB0aGUgcXVldWUKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMjApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdWV1ZS5nZXQoKSwgaSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUXVldWUuRW1wdHksIHF1ZXVlLmdldCwgRmFsc2UpCisKKyAgICAgICAgcC5qb2luKCkKKworICAgIGRlZiB0ZXN0X3FzaXplKHNlbGYpOgorICAgICAgICBxID0gc2VsZi5RdWV1ZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5xc2l6ZSgpLCAwKQorICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBxLnB1dCgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEucXNpemUoKSwgMSkKKyAgICAgICAgcS5wdXQoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLnFzaXplKCksIDIpCisgICAgICAgIHEuZ2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLnFzaXplKCksIDEpCisgICAgICAgIHEuZ2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLnFzaXplKCksIDApCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfdGFza19kb25lKGNscywgcSk6CisgICAgICAgIGZvciBvYmogaW4gaXRlcihxLmdldCwgTm9uZSk6CisgICAgICAgICAgICB0aW1lLnNsZWVwKERFTFRBKQorICAgICAgICAgICAgcS50YXNrX2RvbmUoKQorCisgICAgZGVmIHRlc3RfdGFza19kb25lKHNlbGYpOgorICAgICAgICBxdWV1ZSA9IHNlbGYuSm9pbmFibGVRdWV1ZSgpCisKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA1KSBhbmQgbm90IGhhc2F0dHIocXVldWUsICd0YXNrX2RvbmUnKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInJlcXVpcmVzICdxdWV1ZS50YXNrX2RvbmUoKScgbWV0aG9kIikKKworICAgICAgICB3b3JrZXJzID0gW3NlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fdGVzdF90YXNrX2RvbmUsIGFyZ3M9KHF1ZXVlLCkpCisgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDQpXQorCisgICAgICAgIGZvciBwIGluIHdvcmtlcnM6CisgICAgICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHAuc3RhcnQoKQorCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMCk6CisgICAgICAgICAgICBxdWV1ZS5wdXQoaSkKKworICAgICAgICBxdWV1ZS5qb2luKCkKKworICAgICAgICBmb3IgcCBpbiB3b3JrZXJzOgorICAgICAgICAgICAgcXVldWUucHV0KE5vbmUpCisKKyAgICAgICAgZm9yIHAgaW4gd29ya2VyczoKKyAgICAgICAgICAgIHAuam9pbigpCisKKyMKKyMKKyMKKworY2xhc3MgX1Rlc3RMb2NrKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9sb2NrKHNlbGYpOgorICAgICAgICBsb2NrID0gc2VsZi5Mb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NrLmFjcXVpcmUoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NrLmFjcXVpcmUoRmFsc2UpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NrLnJlbGVhc2UoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIHRocmVhZGluZy5UaHJlYWRFcnJvciksIGxvY2sucmVsZWFzZSkKKworICAgIGRlZiB0ZXN0X3Jsb2NrKHNlbGYpOgorICAgICAgICBsb2NrID0gc2VsZi5STG9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jay5hY3F1aXJlKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jay5hY3F1aXJlKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jay5hY3F1aXJlKCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jay5yZWxlYXNlKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jay5yZWxlYXNlKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jay5yZWxlYXNlKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChBc3NlcnRpb25FcnJvciwgUnVudGltZUVycm9yKSwgbG9jay5yZWxlYXNlKQorCisgICAgZGVmIHRlc3RfbG9ja19jb250ZXh0KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuTG9jaygpOgorICAgICAgICAgICAgcGFzcworCisKK2NsYXNzIF9UZXN0U2VtYXBob3JlKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgX3Rlc3Rfc2VtYXBob3JlKHNlbGYsIHNlbSk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmV0dXJuc0lmSW1wbGVtZW50ZWQoMiwgZ2V0X3ZhbHVlLCBzZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VtLmFjcXVpcmUoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZXR1cm5zSWZJbXBsZW1lbnRlZCgxLCBnZXRfdmFsdWUsIHNlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZW0uYWNxdWlyZSgpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJldHVybnNJZkltcGxlbWVudGVkKDAsIGdldF92YWx1ZSwgc2VtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbS5hY3F1aXJlKEZhbHNlKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV0dXJuc0lmSW1wbGVtZW50ZWQoMCwgZ2V0X3ZhbHVlLCBzZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VtLnJlbGVhc2UoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZXR1cm5zSWZJbXBsZW1lbnRlZCgxLCBnZXRfdmFsdWUsIHNlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZW0ucmVsZWFzZSgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJldHVybnNJZkltcGxlbWVudGVkKDIsIGdldF92YWx1ZSwgc2VtKQorCisgICAgZGVmIHRlc3Rfc2VtYXBob3JlKHNlbGYpOgorICAgICAgICBzZW0gPSBzZWxmLlNlbWFwaG9yZSgyKQorICAgICAgICBzZWxmLl90ZXN0X3NlbWFwaG9yZShzZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VtLnJlbGVhc2UoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZXR1cm5zSWZJbXBsZW1lbnRlZCgzLCBnZXRfdmFsdWUsIHNlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZW0ucmVsZWFzZSgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJldHVybnNJZkltcGxlbWVudGVkKDQsIGdldF92YWx1ZSwgc2VtKQorCisgICAgZGVmIHRlc3RfYm91bmRlZF9zZW1hcGhvcmUoc2VsZik6CisgICAgICAgIHNlbSA9IHNlbGYuQm91bmRlZFNlbWFwaG9yZSgyKQorICAgICAgICBzZWxmLl90ZXN0X3NlbWFwaG9yZShzZW0pCisgICAgICAgICMgQ3VycmVudGx5IGZhaWxzIG9uIE9TL1gKKyAgICAgICAgI2lmIEhBVkVfR0VUVkFMVUU6CisgICAgICAgICMgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VtLnJlbGVhc2UpCisgICAgICAgICMgICAgc2VsZi5hc3NlcnRSZXR1cm5zSWZJbXBsZW1lbnRlZCgyLCBnZXRfdmFsdWUsIHNlbSkKKworICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuVFlQRSAhPSAncHJvY2Vzc2VzJzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbSA9IHNlbGYuU2VtYXBob3JlKDApCisgICAgICAgIGFjcXVpcmUgPSBUaW1pbmdXcmFwcGVyKHNlbS5hY3F1aXJlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWNxdWlyZShGYWxzZSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKGFjcXVpcmUuZWxhcHNlZCwgMC4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWNxdWlyZShGYWxzZSwgTm9uZSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKGFjcXVpcmUuZWxhcHNlZCwgMC4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWNxdWlyZShGYWxzZSwgVElNRU9VVDEpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChhY3F1aXJlLmVsYXBzZWQsIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3F1aXJlKFRydWUsIFRJTUVPVVQyKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoYWNxdWlyZS5lbGFwc2VkLCBUSU1FT1VUMikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjcXVpcmUodGltZW91dD1USU1FT1VUMyksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKGFjcXVpcmUuZWxhcHNlZCwgVElNRU9VVDMpCisKKworY2xhc3MgX1Rlc3RDb25kaXRpb24oQmFzZVRlc3RDYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmKGNscywgY29uZCwgc2xlZXBpbmcsIHdva2VuLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBjb25kLmFjcXVpcmUoKQorICAgICAgICBzbGVlcGluZy5yZWxlYXNlKCkKKyAgICAgICAgY29uZC53YWl0KHRpbWVvdXQpCisgICAgICAgIHdva2VuLnJlbGVhc2UoKQorICAgICAgICBjb25kLnJlbGVhc2UoKQorCisgICAgZGVmIGNoZWNrX2ludmFyaWFudChzZWxmLCBjb25kKToKKyAgICAgICAgIyB0aGlzIGlzIG9ubHkgc3VwcG9zZWQgdG8gc3VjY2VlZCB3aGVuIHRoZXJlIGFyZSBubyBzbGVlcGVycworICAgICAgICBpZiBzZWxmLlRZUEUgPT0gJ3Byb2Nlc3Nlcyc6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2xlZXBlcnMgPSAoY29uZC5fc2xlZXBpbmdfY291bnQuZ2V0X3ZhbHVlKCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmQuX3dva2VuX2NvdW50LmdldF92YWx1ZSgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xlZXBlcnMsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25kLl93YWl0X3NlbWFwaG9yZS5nZXRfdmFsdWUoKSwgMCkKKyAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X25vdGlmeShzZWxmKToKKyAgICAgICAgY29uZCA9IHNlbGYuQ29uZGl0aW9uKCkKKyAgICAgICAgc2xlZXBpbmcgPSBzZWxmLlNlbWFwaG9yZSgwKQorICAgICAgICB3b2tlbiA9IHNlbGYuU2VtYXBob3JlKDApCisKKyAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5mLCBhcmdzPShjb25kLCBzbGVlcGluZywgd29rZW4pKQorICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcC5zdGFydCgpCisKKyAgICAgICAgcCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuZiwgYXJncz0oY29uZCwgc2xlZXBpbmcsIHdva2VuKSkKKyAgICAgICAgcC5kYWVtb24gPSBUcnVlCisgICAgICAgIHAuc3RhcnQoKQorCisgICAgICAgICMgd2FpdCBmb3IgYm90aCBjaGlsZHJlbiB0byBzdGFydCBzbGVlcGluZworICAgICAgICBzbGVlcGluZy5hY3F1aXJlKCkKKyAgICAgICAgc2xlZXBpbmcuYWNxdWlyZSgpCisKKyAgICAgICAgIyBjaGVjayBubyBwcm9jZXNzL3RocmVhZCBoYXMgd29rZW4gdXAKKyAgICAgICAgdGltZS5zbGVlcChERUxUQSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZXR1cm5zSWZJbXBsZW1lbnRlZCgwLCBnZXRfdmFsdWUsIHdva2VuKQorCisgICAgICAgICMgd2FrZSB1cCBvbmUgcHJvY2Vzcy90aHJlYWQKKyAgICAgICAgY29uZC5hY3F1aXJlKCkKKyAgICAgICAgY29uZC5ub3RpZnkoKQorICAgICAgICBjb25kLnJlbGVhc2UoKQorCisgICAgICAgICMgY2hlY2sgb25lIHByb2Nlc3MvdGhyZWFkIGhhcyB3b2tlbiB1cAorICAgICAgICB0aW1lLnNsZWVwKERFTFRBKQorICAgICAgICBzZWxmLmFzc2VydFJldHVybnNJZkltcGxlbWVudGVkKDEsIGdldF92YWx1ZSwgd29rZW4pCisKKyAgICAgICAgIyB3YWtlIHVwIGFub3RoZXIKKyAgICAgICAgY29uZC5hY3F1aXJlKCkKKyAgICAgICAgY29uZC5ub3RpZnkoKQorICAgICAgICBjb25kLnJlbGVhc2UoKQorCisgICAgICAgICMgY2hlY2sgb3RoZXIgaGFzIHdva2VuIHVwCisgICAgICAgIHRpbWUuc2xlZXAoREVMVEEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV0dXJuc0lmSW1wbGVtZW50ZWQoMiwgZ2V0X3ZhbHVlLCB3b2tlbikKKworICAgICAgICAjIGNoZWNrIHN0YXRlIGlzIG5vdCBtdWNrZWQgdXAKKyAgICAgICAgc2VsZi5jaGVja19pbnZhcmlhbnQoY29uZCkKKyAgICAgICAgcC5qb2luKCkKKworICAgIGRlZiB0ZXN0X25vdGlmeV9hbGwoc2VsZik6CisgICAgICAgIGNvbmQgPSBzZWxmLkNvbmRpdGlvbigpCisgICAgICAgIHNsZWVwaW5nID0gc2VsZi5TZW1hcGhvcmUoMCkKKyAgICAgICAgd29rZW4gPSBzZWxmLlNlbWFwaG9yZSgwKQorCisgICAgICAgICMgc3RhcnQgc29tZSB0aHJlYWRzL3Byb2Nlc3NlcyB3aGljaCB3aWxsIHRpbWVvdXQKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KGNvbmQsIHNsZWVwaW5nLCB3b2tlbiwgVElNRU9VVDEpKQorICAgICAgICAgICAgcC5kYWVtb24gPSBUcnVlCisgICAgICAgICAgICBwLnN0YXJ0KCkKKworICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KGNvbmQsIHNsZWVwaW5nLCB3b2tlbiwgVElNRU9VVDEpKQorICAgICAgICAgICAgdC5kYWVtb24gPSBUcnVlCisgICAgICAgICAgICB0LnN0YXJ0KCkKKworICAgICAgICAjIHdhaXQgZm9yIHRoZW0gYWxsIHRvIHNsZWVwCisgICAgICAgIGZvciBpIGluIHhyYW5nZSg2KToKKyAgICAgICAgICAgIHNsZWVwaW5nLmFjcXVpcmUoKQorCisgICAgICAgICMgY2hlY2sgdGhleSBoYXZlIGFsbCB0aW1lZCBvdXQKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDYpOgorICAgICAgICAgICAgd29rZW4uYWNxdWlyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmV0dXJuc0lmSW1wbGVtZW50ZWQoMCwgZ2V0X3ZhbHVlLCB3b2tlbikKKworICAgICAgICAjIGNoZWNrIHN0YXRlIGlzIG5vdCBtdWNrZWQgdXAKKyAgICAgICAgc2VsZi5jaGVja19pbnZhcmlhbnQoY29uZCkKKworICAgICAgICAjIHN0YXJ0IHNvbWUgbW9yZSB0aHJlYWRzL3Byb2Nlc3NlcworICAgICAgICBmb3IgaSBpbiByYW5nZSgzKToKKyAgICAgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuZiwgYXJncz0oY29uZCwgc2xlZXBpbmcsIHdva2VuKSkKKyAgICAgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgcC5zdGFydCgpCisKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLmYsIGFyZ3M9KGNvbmQsIHNsZWVwaW5nLCB3b2tlbikpCisgICAgICAgICAgICB0LmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgICMgd2FpdCBmb3IgdGhlbSB0byBhbGwgc2xlZXAKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDYpOgorICAgICAgICAgICAgc2xlZXBpbmcuYWNxdWlyZSgpCisKKyAgICAgICAgIyBjaGVjayBubyBwcm9jZXNzL3RocmVhZCBoYXMgd29rZW4gdXAKKyAgICAgICAgdGltZS5zbGVlcChERUxUQSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZXR1cm5zSWZJbXBsZW1lbnRlZCgwLCBnZXRfdmFsdWUsIHdva2VuKQorCisgICAgICAgICMgd2FrZSB0aGVtIGFsbCB1cAorICAgICAgICBjb25kLmFjcXVpcmUoKQorICAgICAgICBjb25kLm5vdGlmeV9hbGwoKQorICAgICAgICBjb25kLnJlbGVhc2UoKQorCisgICAgICAgICMgY2hlY2sgdGhleSBoYXZlIGFsbCB3b2tlbgorICAgICAgICB0aW1lLnNsZWVwKERFTFRBKQorICAgICAgICBzZWxmLmFzc2VydFJldHVybnNJZkltcGxlbWVudGVkKDYsIGdldF92YWx1ZSwgd29rZW4pCisKKyAgICAgICAgIyBjaGVjayBzdGF0ZSBpcyBub3QgbXVja2VkIHVwCisgICAgICAgIHNlbGYuY2hlY2tfaW52YXJpYW50KGNvbmQpCisKKyAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgorICAgICAgICBjb25kID0gc2VsZi5Db25kaXRpb24oKQorICAgICAgICB3YWl0ID0gVGltaW5nV3JhcHBlcihjb25kLndhaXQpCisgICAgICAgIGNvbmQuYWNxdWlyZSgpCisgICAgICAgIHJlcyA9IHdhaXQoVElNRU9VVDEpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKHdhaXQuZWxhcHNlZCwgVElNRU9VVDEpCisKKworY2xhc3MgX1Rlc3RFdmVudChCYXNlVGVzdENhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X2V2ZW50KGNscywgZXZlbnQpOgorICAgICAgICB0aW1lLnNsZWVwKFRJTUVPVVQyKQorICAgICAgICBldmVudC5zZXQoKQorCisgICAgZGVmIHRlc3RfZXZlbnQoc2VsZik6CisgICAgICAgIGV2ZW50ID0gc2VsZi5FdmVudCgpCisgICAgICAgIHdhaXQgPSBUaW1pbmdXcmFwcGVyKGV2ZW50LndhaXQpCisKKyAgICAgICAgIyBSZW1vdmVkIHRlbXBvcmFyaWx5LCBkdWUgdG8gQVBJIHNoZWFyLCB0aGlzIGRvZXMgbm90CisgICAgICAgICMgd29yayB3aXRoIHRocmVhZGluZy5fRXZlbnQgb2JqZWN0cy4gaXNfc2V0ID09IGlzU2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnQuaXNfc2V0KCksIEZhbHNlKQorCisgICAgICAgICMgUmVtb3ZlZCwgdGhyZWFkaW5nLkV2ZW50LndhaXQoKSB3aWxsIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIF9fZmxhZworICAgICAgICAjIGluc3RlYWQgb2YgTm9uZS4gQVBJIFNoZWFyIHdpdGggdGhlIHNlbWFwaG9yZSBiYWNrZWQgbXAuRXZlbnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YWl0KDAuMCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKHdhaXQuZWxhcHNlZCwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhaXQoVElNRU9VVDEpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbCh3YWl0LmVsYXBzZWQsIFRJTUVPVVQxKQorCisgICAgICAgIGV2ZW50LnNldCgpCisKKyAgICAgICAgIyBTZWUgbm90ZSBhYm92ZSBvbiB0aGUgQVBJIGRpZmZlcmVuY2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnQuaXNfc2V0KCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FpdCgpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKHdhaXQuZWxhcHNlZCwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdhaXQoVElNRU9VVDEpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKHdhaXQuZWxhcHNlZCwgMC4wKQorICAgICAgICAjIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnQuaXNfc2V0KCksIFRydWUpCisKKyAgICAgICAgZXZlbnQuY2xlYXIoKQorCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKGV2ZW50LmlzX3NldCgpLCBGYWxzZSkKKworICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X2V2ZW50LCBhcmdzPShldmVudCwpKQorICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcC5zdGFydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FpdCgpLCBUcnVlKQorCisjCisjCisjCisKK2NsYXNzIF9UZXN0VmFsdWUoQmFzZVRlc3RDYXNlKToKKworICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsKQorCisgICAgY29kZXNfdmFsdWVzID0gWworICAgICAgICAoJ2knLCA0MzQzLCAyNDIzNCksCisgICAgICAgICgnZCcsIDMuNjI1LCAtNC4yNSksCisgICAgICAgICgnaCcsIC0yMzIsIDIzNCksCisgICAgICAgICgnYycsIGxhdGluKCd4JyksIGxhdGluKCd5JykpCisgICAgICAgIF0KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgbm90IEhBU19TSEFSRURDVFlQRVM6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJyZXF1aXJlcyBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdChjbHMsIHZhbHVlcyk6CisgICAgICAgIGZvciBzdiwgY3YgaW4gemlwKHZhbHVlcywgY2xzLmNvZGVzX3ZhbHVlcyk6CisgICAgICAgICAgICBzdi52YWx1ZSA9IGN2WzJdCisKKworICAgIGRlZiB0ZXN0X3ZhbHVlKHNlbGYsIHJhdz1GYWxzZSk6CisgICAgICAgIGlmIHJhdzoKKyAgICAgICAgICAgIHZhbHVlcyA9IFtzZWxmLlJhd1ZhbHVlKGNvZGUsIHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIGZvciBjb2RlLCB2YWx1ZSwgXyBpbiBzZWxmLmNvZGVzX3ZhbHVlc10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbHVlcyA9IFtzZWxmLlZhbHVlKGNvZGUsIHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIGZvciBjb2RlLCB2YWx1ZSwgXyBpbiBzZWxmLmNvZGVzX3ZhbHVlc10KKworICAgICAgICBmb3Igc3YsIGN2IGluIHppcCh2YWx1ZXMsIHNlbGYuY29kZXNfdmFsdWVzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3YudmFsdWUsIGN2WzFdKQorCisgICAgICAgIHByb2MgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3Rlc3QsIGFyZ3M9KHZhbHVlcywpKQorICAgICAgICBwcm9jLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcHJvYy5zdGFydCgpCisgICAgICAgIHByb2Muam9pbigpCisKKyAgICAgICAgZm9yIHN2LCBjdiBpbiB6aXAodmFsdWVzLCBzZWxmLmNvZGVzX3ZhbHVlcyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN2LnZhbHVlLCBjdlsyXSkKKworICAgIGRlZiB0ZXN0X3Jhd3ZhbHVlKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfdmFsdWUocmF3PVRydWUpCisKKyAgICBkZWYgdGVzdF9nZXRvYmpfZ2V0bG9jayhzZWxmKToKKyAgICAgICAgdmFsMSA9IHNlbGYuVmFsdWUoJ2knLCA1KQorICAgICAgICBsb2NrMSA9IHZhbDEuZ2V0X2xvY2soKQorICAgICAgICBvYmoxID0gdmFsMS5nZXRfb2JqKCkKKworICAgICAgICB2YWwyID0gc2VsZi5WYWx1ZSgnaScsIDUsIGxvY2s9Tm9uZSkKKyAgICAgICAgbG9jazIgPSB2YWwyLmdldF9sb2NrKCkKKyAgICAgICAgb2JqMiA9IHZhbDIuZ2V0X29iaigpCisKKyAgICAgICAgbG9jayA9IHNlbGYuTG9jaygpCisgICAgICAgIHZhbDMgPSBzZWxmLlZhbHVlKCdpJywgNSwgbG9jaz1sb2NrKQorICAgICAgICBsb2NrMyA9IHZhbDMuZ2V0X2xvY2soKQorICAgICAgICBvYmozID0gdmFsMy5nZXRfb2JqKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NrLCBsb2NrMykKKworICAgICAgICBhcnI0ID0gc2VsZi5WYWx1ZSgnaScsIDUsIGxvY2s9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihhcnI0LCAnZ2V0X2xvY2snKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGFycjQsICdnZXRfb2JqJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNlbGYuVmFsdWUsICdpJywgNSwgbG9jaz0nbmF2YWx1ZScpCisKKyAgICAgICAgYXJyNSA9IHNlbGYuUmF3VmFsdWUoJ2knLCA1KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYXJyNSwgJ2dldF9sb2NrJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihhcnI1LCAnZ2V0X29iaicpKQorCisKK2NsYXNzIF9UZXN0QXJyYXkoQmFzZVRlc3RDYXNlKToKKworICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGYoY2xzLCBzZXEpOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oc2VxKSk6CisgICAgICAgICAgICBzZXFbaV0gKz0gc2VxW2ktMV0KKworICAgIEB1bml0dGVzdC5za2lwSWYoY19pbnQgaXMgTm9uZSwgInJlcXVpcmVzIF9jdHlwZXMiKQorICAgIGRlZiB0ZXN0X2FycmF5KHNlbGYsIHJhdz1GYWxzZSk6CisgICAgICAgIHNlcSA9IFs2ODAsIDYyNiwgOTM0LCA4MjEsIDE1MCwgMjMzLCA1NDgsIDk4MiwgNzE0LCA4MzFdCisgICAgICAgIGlmIHJhdzoKKyAgICAgICAgICAgIGFyciA9IHNlbGYuUmF3QXJyYXkoJ2knLCBzZXEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcnIgPSBzZWxmLkFycmF5KCdpJywgc2VxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFyciksIGxlbihzZXEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyclszXSwgc2VxWzNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYXJyWzI6N10pLCBsaXN0KHNlcVsyOjddKSkKKworICAgICAgICBhcnJbNDo4XSA9IHNlcVs0OjhdID0gYXJyYXkuYXJyYXkoJ2knLCBbMSwgMiwgMywgNF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFycls6XSksIHNlcSkKKworICAgICAgICBzZWxmLmYoc2VxKQorCisgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuZiwgYXJncz0oYXJyLCkpCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgcC5qb2luKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYXJyWzpdKSwgc2VxKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihjX2ludCBpcyBOb25lLCAicmVxdWlyZXMgX2N0eXBlcyIpCisgICAgZGVmIHRlc3RfYXJyYXlfZnJvbV9zaXplKHNlbGYpOgorICAgICAgICBzaXplID0gMTAKKyAgICAgICAgIyBUZXN0IGZvciB6ZXJvaW5nIChzZWUgaXNzdWUgIzExNjc1KS4KKyAgICAgICAgIyBUaGUgcmVwZXRpdGlvbiBiZWxvdyBzdHJlbmd0aGVucyB0aGUgdGVzdCBieSBpbmNyZWFzaW5nIHRoZSBjaGFuY2VzCisgICAgICAgICMgb2YgcHJldmlvdXNseSBhbGxvY2F0ZWQgbm9uLXplcm8gbWVtb3J5IGJlaW5nIHVzZWQgZm9yIHRoZSBuZXcgYXJyYXkKKyAgICAgICAgIyBvbiB0aGUgMm5kIGFuZCAzcmQgbG9vcHMuCisgICAgICAgIGZvciBfIGluIHJhbmdlKDMpOgorICAgICAgICAgICAgYXJyID0gc2VsZi5BcnJheSgnaScsIHNpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhcnIpLCBzaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFyciksIFswXSAqIHNpemUpCisgICAgICAgICAgICBhcnJbOl0gPSByYW5nZSgxMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhcnIpLCByYW5nZSgxMCkpCisgICAgICAgICAgICBkZWwgYXJyCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGNfaW50IGlzIE5vbmUsICJyZXF1aXJlcyBfY3R5cGVzIikKKyAgICBkZWYgdGVzdF9yYXdhcnJheShzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X2FycmF5KHJhdz1UcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihjX2ludCBpcyBOb25lLCAicmVxdWlyZXMgX2N0eXBlcyIpCisgICAgZGVmIHRlc3RfYXJyYXlfYWNjZXB0c19sb25nKHNlbGYpOgorICAgICAgICBhcnIgPSBzZWxmLkFycmF5KCdpJywgMTBMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhcnIpLCAxMCkKKyAgICAgICAgcmF3X2FyciA9IHNlbGYuUmF3QXJyYXkoJ2knLCAxMEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJhd19hcnIpLCAxMCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoY19pbnQgaXMgTm9uZSwgInJlcXVpcmVzIF9jdHlwZXMiKQorICAgIGRlZiB0ZXN0X2dldG9ial9nZXRsb2NrX29iaihzZWxmKToKKyAgICAgICAgYXJyMSA9IHNlbGYuQXJyYXkoJ2knLCByYW5nZSgxMCkpCisgICAgICAgIGxvY2sxID0gYXJyMS5nZXRfbG9jaygpCisgICAgICAgIG9iajEgPSBhcnIxLmdldF9vYmooKQorCisgICAgICAgIGFycjIgPSBzZWxmLkFycmF5KCdpJywgcmFuZ2UoMTApLCBsb2NrPU5vbmUpCisgICAgICAgIGxvY2syID0gYXJyMi5nZXRfbG9jaygpCisgICAgICAgIG9iajIgPSBhcnIyLmdldF9vYmooKQorCisgICAgICAgIGxvY2sgPSBzZWxmLkxvY2soKQorICAgICAgICBhcnIzID0gc2VsZi5BcnJheSgnaScsIHJhbmdlKDEwKSwgbG9jaz1sb2NrKQorICAgICAgICBsb2NrMyA9IGFycjMuZ2V0X2xvY2soKQorICAgICAgICBvYmozID0gYXJyMy5nZXRfb2JqKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NrLCBsb2NrMykKKworICAgICAgICBhcnI0ID0gc2VsZi5BcnJheSgnaScsIHJhbmdlKDEwKSwgbG9jaz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGFycjQsICdnZXRfbG9jaycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYXJyNCwgJ2dldF9vYmonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuQXJyYXksICdpJywgcmFuZ2UoMTApLCBsb2NrPSdub3RhbG9jaycpCisKKyAgICAgICAgYXJyNSA9IHNlbGYuUmF3QXJyYXkoJ2knLCByYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihhcnI1LCAnZ2V0X2xvY2snKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGFycjUsICdnZXRfb2JqJykpCisKKyMKKyMKKyMKKworY2xhc3MgX1Rlc3RDb250YWluZXJzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBBTExPV0VEX1RZUEVTID0gKCdtYW5hZ2VyJywpCisKKyAgICBkZWYgdGVzdF9saXN0KHNlbGYpOgorICAgICAgICBhID0gc2VsZi5saXN0KHJhbmdlKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzpdLCByYW5nZSgxMCkpCisKKyAgICAgICAgYiA9IHNlbGYubGlzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgW10pCisKKyAgICAgICAgYi5leHRlbmQocmFuZ2UoNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgcmFuZ2UoNSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzJdLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMjoxMF0sIFsyLDMsNF0pCisKKyAgICAgICAgYiAqPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgWzAsIDEsIDIsIDMsIDQsIDAsIDEsIDIsIDMsIDRdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiArIFs1LCA2XSwgWzAsIDEsIDIsIDMsIDQsIDAsIDEsIDIsIDMsIDQsIDUsIDZdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6XSwgcmFuZ2UoMTApKQorCisgICAgICAgIGQgPSBbYSwgYl0KKyAgICAgICAgZSA9IHNlbGYubGlzdChkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgZVs6XSwKKyAgICAgICAgICAgIFtbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0sIFswLCAxLCAyLCAzLCA0LCAwLCAxLCAyLCAzLCA0XV0KKyAgICAgICAgICAgICkKKworICAgICAgICBmID0gc2VsZi5saXN0KFthXSkKKyAgICAgICAgYS5hcHBlbmQoJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmWzpdLCBbWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksICdoZWxsbyddXSkKKworICAgIGRlZiB0ZXN0X2RpY3Qoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLmRpY3QoKQorICAgICAgICBpbmRpY2VzID0gcmFuZ2UoNjUsIDcwKQorICAgICAgICBmb3IgaSBpbiBpbmRpY2VzOgorICAgICAgICAgICAgZFtpXSA9IGNocihpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuY29weSgpLCBkaWN0KChpLCBjaHIoaSkpIGZvciBpIGluIGluZGljZXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChkLmtleXMoKSksIGluZGljZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGQudmFsdWVzKCkpLCBbY2hyKGkpIGZvciBpIGluIGluZGljZXNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChkLml0ZW1zKCkpLCBbKGksIGNocihpKSkgZm9yIGkgaW4gaW5kaWNlc10pCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2Uoc2VsZik6CisgICAgICAgIG4gPSBzZWxmLk5hbWVzcGFjZSgpCisgICAgICAgIG4ubmFtZSA9ICdCb2InCisgICAgICAgIG4uam9iID0gJ0J1aWxkZXInCisgICAgICAgIG4uX2hpZGRlbiA9ICdoaWRkZW4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG4ubmFtZSwgbi5qb2IpLCAoJ0JvYicsICdCdWlsZGVyJykpCisgICAgICAgIGRlbCBuLmpvYgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihuKSwgIk5hbWVzcGFjZShuYW1lPSdCb2InKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG4sICduYW1lJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihuLCAnam9iJykpCisKKyMKKyMKKyMKKworZGVmIHNxcih4LCB3YWl0PTAuMCk6CisgICAgdGltZS5zbGVlcCh3YWl0KQorICAgIHJldHVybiB4KngKK2NsYXNzIF9UZXN0UG9vbChCYXNlVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYXBwbHkoc2VsZik6CisgICAgICAgIHBhcHBseSA9IHNlbGYucG9vbC5hcHBseQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcHBseShzcXIsICg1LCkpLCBzcXIoNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFwcGx5KHNxciwgKCksIHsneCc6M30pLCBzcXIoeD0zKSkKKworICAgIGRlZiB0ZXN0X21hcChzZWxmKToKKyAgICAgICAgcG1hcCA9IHNlbGYucG9vbC5tYXAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbWFwKHNxciwgcmFuZ2UoMTApKSwgbWFwKHNxciwgcmFuZ2UoMTApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbWFwKHNxciwgcmFuZ2UoMTAwKSwgY2h1bmtzaXplPTIwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoc3FyLCByYW5nZSgxMDApKSkKKworICAgIGRlZiB0ZXN0X21hcF9jaHVua3NpemUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucG9vbC5tYXBfYXN5bmMoc3FyLCBbXSwgY2h1bmtzaXplPTEpLmdldCh0aW1lb3V0PVRJTUVPVVQxKQorICAgICAgICBleGNlcHQgbXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicG9vbC5tYXBfYXN5bmMgd2l0aCBjaHVua3NpemUgc3RhbGxlZCBvbiBudWxsIGxpc3QiKQorCisgICAgZGVmIHRlc3RfYXN5bmMoc2VsZik6CisgICAgICAgIHJlcyA9IHNlbGYucG9vbC5hcHBseV9hc3luYyhzcXIsICg3LCBUSU1FT1VUMSwpKQorICAgICAgICBnZXQgPSBUaW1pbmdXcmFwcGVyKHJlcy5nZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0KCksIDQ5KQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKGdldC5lbGFwc2VkLCBUSU1FT1VUMSkKKworICAgIGRlZiB0ZXN0X2FzeW5jX3RpbWVvdXQoc2VsZik6CisgICAgICAgIHJlcyA9IHNlbGYucG9vbC5hcHBseV9hc3luYyhzcXIsICg2LCBUSU1FT1VUMiArIDAuMikpCisgICAgICAgIGdldCA9IFRpbWluZ1dyYXBwZXIocmVzLmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvciwgZ2V0LCB0aW1lb3V0PVRJTUVPVVQyKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKGdldC5lbGFwc2VkLCBUSU1FT1VUMikKKworICAgIGRlZiB0ZXN0X2ltYXAoc2VsZik6CisgICAgICAgIGl0ID0gc2VsZi5wb29sLmltYXAoc3FyLCByYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIG1hcChzcXIsIHJhbmdlKDEwKSkpCisKKyAgICAgICAgaXQgPSBzZWxmLnBvb2wuaW1hcChzcXIsIHJhbmdlKDEwKSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdC5uZXh0KCksIGkqaSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgaXQubmV4dCkKKworICAgICAgICBpdCA9IHNlbGYucG9vbC5pbWFwKHNxciwgcmFuZ2UoMTAwMCksIGNodW5rc2l6ZT0xMDApCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMDApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdC5uZXh0KCksIGkqaSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgaXQubmV4dCkKKworICAgIGRlZiB0ZXN0X2ltYXBfdW5vcmRlcmVkKHNlbGYpOgorICAgICAgICBpdCA9IHNlbGYucG9vbC5pbWFwX3Vub3JkZXJlZChzcXIsIHJhbmdlKDEwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpdCksIG1hcChzcXIsIHJhbmdlKDEwMDApKSkKKworICAgICAgICBpdCA9IHNlbGYucG9vbC5pbWFwX3Vub3JkZXJlZChzcXIsIHJhbmdlKDEwMDApLCBjaHVua3NpemU9NTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGl0KSwgbWFwKHNxciwgcmFuZ2UoMTAwMCkpKQorCisgICAgZGVmIHRlc3RfbWFrZV9wb29sKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtdWx0aXByb2Nlc3NpbmcuUG9vbCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG11bHRpcHJvY2Vzc2luZy5Qb29sLCAwKQorCisgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGxlbihwLl9wb29sKSkKKyAgICAgICAgcC5jbG9zZSgpCisgICAgICAgIHAuam9pbigpCisKKyAgICBkZWYgdGVzdF90ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuVFlQRSA9PSAnbWFuYWdlcic6CisgICAgICAgICAgICAjIE9uIFVuaXggYSBmb3JrZWQgcHJvY2VzcyBpbmNyZWZzIGVhY2ggc2hhcmVkIG9iamVjdCB0bworICAgICAgICAgICAgIyB3aGljaCBpdHMgcGFyZW50IHByb2Nlc3MgaGVsZCBhIHJlZmVyZW5jZS4gIElmIHRoZQorICAgICAgICAgICAgIyBmb3JrZWQgcHJvY2VzcyBnZXRzIHRlcm1pbmF0ZWQgdGhlbiB0aGVyZSBpcyBsaWtlbHkgdG8KKyAgICAgICAgICAgICMgYmUgYSByZWZlcmVuY2UgbGVhay4gIFNvIHRvIHByZXZlbnQKKyAgICAgICAgICAgICMgX1Rlc3RaWlpOdW1iZXJPZk9iamVjdHMgZnJvbSBmYWlsaW5nIHdlIHNraXAgdGhpcyB0ZXN0CisgICAgICAgICAgICAjIHdoZW4gdXNpbmcgYSBtYW5hZ2VyLgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5wb29sLm1hcF9hc3luYygKKyAgICAgICAgICAgIHRpbWUuc2xlZXAsIFswLjEgZm9yIGkgaW4gcmFuZ2UoMTAwMDApXSwgY2h1bmtzaXplPTEKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5wb29sLnRlcm1pbmF0ZSgpCisgICAgICAgIGpvaW4gPSBUaW1pbmdXcmFwcGVyKHNlbGYucG9vbC5qb2luKQorICAgICAgICBqb2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGpvaW4uZWxhcHNlZCA8IDAuMikKKworICAgIGRlZiB0ZXN0X2VtcHR5X2l0ZXJhYmxlKHNlbGYpOgorICAgICAgICAjIFNlZSBJc3N1ZSAxMjE1NworICAgICAgICBwID0gc2VsZi5Qb29sKDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm1hcChzcXIsIFtdKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwLmltYXAoc3FyLCBbXSkpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHAuaW1hcF91bm9yZGVyZWQoc3FyLCBbXSkpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm1hcF9hc3luYyhzcXIsIFtdKS5nZXQoKSwgW10pCisKKyAgICAgICAgcC5jbG9zZSgpCisgICAgICAgIHAuam9pbigpCisKK2RlZiB1bnBpY2tsZWFibGVfcmVzdWx0KCk6CisgICAgcmV0dXJuIGxhbWJkYTogNDIKKworY2xhc3MgX1Rlc3RQb29sV29ya2VyRXJyb3JzKEJhc2VUZXN0Q2FzZSk6CisgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywgKQorCisgICAgZGVmIHRlc3RfdW5waWNrbGVhYmxlX3Jlc3VsdChzZWxmKToKKyAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucG9vbCBpbXBvcnQgTWF5YmVFbmNvZGluZ0Vycm9yCisgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgyKQorCisgICAgICAgICMgTWFrZSBzdXJlIHdlIGRvbid0IGxvc2UgcG9vbCBwcm9jZXNzZXMgYmVjYXVzZSBvZiBlbmNvZGluZyBlcnJvcnMuCisgICAgICAgIGZvciBpdGVyYXRpb24gaW4gcmFuZ2UoMjApOgorICAgICAgICAgICAgcmVzID0gcC5hcHBseV9hc3luYyh1bnBpY2tsZWFibGVfcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTWF5YmVFbmNvZGluZ0Vycm9yLCByZXMuZ2V0KQorCisgICAgICAgIHAuY2xvc2UoKQorICAgICAgICBwLmpvaW4oKQorCitjbGFzcyBfVGVzdFBvb2xXb3JrZXJMaWZldGltZShCYXNlVGVzdENhc2UpOgorCisgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywgKQorICAgIGRlZiB0ZXN0X3Bvb2xfd29ya2VyX2xpZmV0aW1lKHNlbGYpOgorICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlBvb2woMywgbWF4dGFza3NwZXJjaGlsZD0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBsZW4ocC5fcG9vbCkpCisgICAgICAgIG9yaWd3b3JrZXJwaWRzID0gW3cucGlkIGZvciB3IGluIHAuX3Bvb2xdCisgICAgICAgICMgUnVuIG1hbnkgdGFza3Mgc28gZWFjaCB3b3JrZXIgZ2V0cyByZXBsYWNlZCAoaG9wZWZ1bGx5KQorICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHAuYXBwbHlfYXN5bmMoc3FyLCAoaSwgKSkpCisgICAgICAgICMgRmV0Y2ggdGhlIHJlc3VsdHMgYW5kIHZlcmlmeSB3ZSBnb3QgdGhlIHJpZ2h0IGFuc3dlcnMsCisgICAgICAgICMgYWxzbyBlbnN1cmluZyBhbGwgdGhlIHRhc2tzIGhhdmUgY29tcGxldGVkLgorICAgICAgICBmb3IgKGosIHJlcykgaW4gZW51bWVyYXRlKHJlc3VsdHMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0KCksIHNxcihqKSkKKyAgICAgICAgIyBSZWZpbGwgdGhlIHBvb2wKKyAgICAgICAgcC5fcmVwb3B1bGF0ZV9wb29sKCkKKyAgICAgICAgIyBXYWl0IHVudGlsIGFsbCB3b3JrZXJzIGFyZSBhbGl2ZQorICAgICAgICAjIChjb3VudGRvd24gKiBERUxUQSA9IDUgc2Vjb25kcyBtYXggc3RhcnR1cCBwcm9jZXNzIHRpbWUpCisgICAgICAgIGNvdW50ZG93biA9IDUwCisgICAgICAgIHdoaWxlIGNvdW50ZG93biBhbmQgbm90IGFsbCh3LmlzX2FsaXZlKCkgZm9yIHcgaW4gcC5fcG9vbCk6CisgICAgICAgICAgICBjb3VudGRvd24gLT0gMQorICAgICAgICAgICAgdGltZS5zbGVlcChERUxUQSkKKyAgICAgICAgZmluYWx3b3JrZXJwaWRzID0gW3cucGlkIGZvciB3IGluIHAuX3Bvb2xdCisgICAgICAgICMgQWxsIHBpZHMgc2hvdWxkIGJlIGFzc2lnbmVkLiAgU2VlIGlzc3VlICM3ODA1LgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKE5vbmUsIG9yaWd3b3JrZXJwaWRzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKE5vbmUsIGZpbmFsd29ya2VycGlkcykKKyAgICAgICAgIyBGaW5hbGx5LCBjaGVjayB0aGF0IHRoZSB3b3JrZXIgcGlkcyBoYXZlIGNoYW5nZWQKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzb3J0ZWQob3JpZ3dvcmtlcnBpZHMpLCBzb3J0ZWQoZmluYWx3b3JrZXJwaWRzKSkKKyAgICAgICAgcC5jbG9zZSgpCisgICAgICAgIHAuam9pbigpCisKKyAgICBkZWYgdGVzdF9wb29sX3dvcmtlcl9saWZldGltZV9lYXJseV9jbG9zZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTAzMzI6IGNsb3NpbmcgYSBwb29sIHdob3NlIHdvcmtlcnMgaGF2ZSBsaW1pdGVkIGxpZmV0aW1lcworICAgICAgICAjIGJlZm9yZSBhbGwgdGhlIHRhc2tzIGNvbXBsZXRlZCB3b3VsZCBtYWtlIGpvaW4oKSBoYW5nLgorICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlBvb2woMywgbWF4dGFza3NwZXJjaGlsZD0xKQorICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNik6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChwLmFwcGx5X2FzeW5jKHNxciwgKGksIDAuMykpKQorICAgICAgICBwLmNsb3NlKCkKKyAgICAgICAgcC5qb2luKCkKKyAgICAgICAgIyBjaGVjayB0aGUgcmVzdWx0cworICAgICAgICBmb3IgKGosIHJlcykgaW4gZW51bWVyYXRlKHJlc3VsdHMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0KCksIHNxcihqKSkKKworCisjCisjIFRlc3QgdGhhdCBtYW5hZ2VyIGhhcyBleHBlY3RlZCBudW1iZXIgb2Ygc2hhcmVkIG9iamVjdHMgbGVmdAorIworCitjbGFzcyBfVGVzdFpaWk51bWJlck9mT2JqZWN0cyhCYXNlVGVzdENhc2UpOgorICAgICMgQmVjYXVzZSB0ZXN0IGNhc2VzIGFyZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHksIHRoaXMgb25lIHdpbGwgZ2V0CisgICAgIyBydW4gYWZ0ZXIgYWxsIHRoZSBvdGhlciB0ZXN0cyBmb3IgdGhlIG1hbmFnZXIuICBJdCB0ZXN0cyB0aGF0CisgICAgIyB0aGVyZSBoYXZlIGJlZW4gbm8gInJlZmVyZW5jZSBsZWFrcyIgZm9yIHRoZSBtYW5hZ2VyJ3Mgc2hhcmVkCisgICAgIyBvYmplY3RzLiAgTm90ZSB0aGUgY29tbWVudCBpbiBfVGVzdFBvb2wudGVzdF90ZXJtaW5hdGUoKS4KKyAgICBBTExPV0VEX1RZUEVTID0gKCdtYW5hZ2VyJywpCisKKyAgICBkZWYgdGVzdF9udW1iZXJfb2Zfb2JqZWN0cyhzZWxmKToKKyAgICAgICAgRVhQRUNURURfTlVNQkVSID0gMSAgICAgICAgICAgICAgICAjIHRoZSBwb29sIG9iamVjdCBpcyBzdGlsbCBhbGl2ZQorICAgICAgICBtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKCkgICMgZGlzY2FyZCBkZWFkIHByb2Nlc3Mgb2JqcworICAgICAgICBnYy5jb2xsZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICMgZG8gZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgIHJlZnMgPSBzZWxmLm1hbmFnZXIuX251bWJlcl9vZl9vYmplY3RzKCkKKyAgICAgICAgZGVidWdfaW5mbyA9IHNlbGYubWFuYWdlci5fZGVidWdfaW5mbygpCisgICAgICAgIGlmIHJlZnMgIT0gRVhQRUNURURfTlVNQkVSOgorICAgICAgICAgICAgcHJpbnQgc2VsZi5tYW5hZ2VyLl9kZWJ1Z19pbmZvKCkKKyAgICAgICAgICAgIHByaW50IGRlYnVnX2luZm8KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZnMsIEVYUEVDVEVEX05VTUJFUikKKworIworIyBUZXN0IG9mIGNyZWF0aW5nIGEgY3VzdG9taXplZCBtYW5hZ2VyIGNsYXNzCisjCisKK2Zyb20gbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzIGltcG9ydCBCYXNlTWFuYWdlciwgQmFzZVByb3h5LCBSZW1vdGVFcnJvcgorCitjbGFzcyBGb29CYXIob2JqZWN0KToKKyAgICBkZWYgZihzZWxmKToKKyAgICAgICAgcmV0dXJuICdmKCknCisgICAgZGVmIGcoc2VsZik6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICBkZWYgX2goc2VsZik6CisgICAgICAgIHJldHVybiAnX2goKScKKworZGVmIGJheigpOgorICAgIGZvciBpIGluIHhyYW5nZSgxMCk6CisgICAgICAgIHlpZWxkIGkqaQorCitjbGFzcyBJdGVyYXRvclByb3h5KEJhc2VQcm94eSk6CisgICAgX2V4cG9zZWRfID0gKCduZXh0JywgJ19fbmV4dF9fJykKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jYWxsbWV0aG9kKCduZXh0JykKKyAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jYWxsbWV0aG9kKCdfX25leHRfXycpCisKK2NsYXNzIE15TWFuYWdlcihCYXNlTWFuYWdlcik6CisgICAgcGFzcworCitNeU1hbmFnZXIucmVnaXN0ZXIoJ0ZvbycsIGNhbGxhYmxlPUZvb0JhcikKK015TWFuYWdlci5yZWdpc3RlcignQmFyJywgY2FsbGFibGU9Rm9vQmFyLCBleHBvc2VkPSgnZicsICdfaCcpKQorTXlNYW5hZ2VyLnJlZ2lzdGVyKCdiYXonLCBjYWxsYWJsZT1iYXosIHByb3h5dHlwZT1JdGVyYXRvclByb3h5KQorCisKK2NsYXNzIF9UZXN0TXlNYW5hZ2VyKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBBTExPV0VEX1RZUEVTID0gKCdtYW5hZ2VyJywpCisKKyAgICBkZWYgdGVzdF9teW1hbmFnZXIoc2VsZik6CisgICAgICAgIG1hbmFnZXIgPSBNeU1hbmFnZXIoKQorICAgICAgICBtYW5hZ2VyLnN0YXJ0KCkKKworICAgICAgICBmb28gPSBtYW5hZ2VyLkZvbygpCisgICAgICAgIGJhciA9IG1hbmFnZXIuQmFyKCkKKyAgICAgICAgYmF6ID0gbWFuYWdlci5iYXooKQorCisgICAgICAgIGZvb19tZXRob2RzID0gW25hbWUgZm9yIG5hbWUgaW4gKCdmJywgJ2cnLCAnX2gnKSBpZiBoYXNhdHRyKGZvbywgbmFtZSldCisgICAgICAgIGJhcl9tZXRob2RzID0gW25hbWUgZm9yIG5hbWUgaW4gKCdmJywgJ2cnLCAnX2gnKSBpZiBoYXNhdHRyKGJhciwgbmFtZSldCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb29fbWV0aG9kcywgWydmJywgJ2cnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXJfbWV0aG9kcywgWydmJywgJ19oJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uZigpLCAnZigpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9vLmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9jYWxsbWV0aG9kKCdmJyksICdmKCknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZW1vdGVFcnJvciwgZm9vLl9jYWxsbWV0aG9kLCAnX2gnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFyLmYoKSwgJ2YoKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFyLl9oKCksICdfaCgpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXIuX2NhbGxtZXRob2QoJ2YnKSwgJ2YoKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFyLl9jYWxsbWV0aG9kKCdfaCcpLCAnX2goKScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGJheiksIFtpKmkgZm9yIGkgaW4gcmFuZ2UoMTApXSkKKworICAgICAgICBtYW5hZ2VyLnNodXRkb3duKCkKKworIworIyBUZXN0IG9mIGNvbm5lY3RpbmcgdG8gYSByZW1vdGUgc2VydmVyIGFuZCB1c2luZyB4bWxycGNsaWIgZm9yIHNlcmlhbGl6YXRpb24KKyMKKworX3F1ZXVlID0gUXVldWUuUXVldWUoKQorZGVmIGdldF9xdWV1ZSgpOgorICAgIHJldHVybiBfcXVldWUKKworY2xhc3MgUXVldWVNYW5hZ2VyKEJhc2VNYW5hZ2VyKToKKyAgICAnJydtYW5hZ2VyIGNsYXNzIHVzZWQgYnkgc2VydmVyIHByb2Nlc3MnJycKK1F1ZXVlTWFuYWdlci5yZWdpc3RlcignZ2V0X3F1ZXVlJywgY2FsbGFibGU9Z2V0X3F1ZXVlKQorCitjbGFzcyBRdWV1ZU1hbmFnZXIyKEJhc2VNYW5hZ2VyKToKKyAgICAnJydtYW5hZ2VyIGNsYXNzIHdoaWNoIHNwZWNpZmllcyB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgUXVldWVNYW5hZ2VyJycnCitRdWV1ZU1hbmFnZXIyLnJlZ2lzdGVyKCdnZXRfcXVldWUnKQorCisKK1NFUklBTElaRVIgPSAneG1scnBjbGliJworCitjbGFzcyBfVGVzdFJlbW90ZU1hbmFnZXIoQmFzZVRlc3RDYXNlKToKKworICAgIEFMTE9XRURfVFlQRVMgPSAoJ21hbmFnZXInLCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcHV0dGVyKGNscywgYWRkcmVzcywgYXV0aGtleSk6CisgICAgICAgIG1hbmFnZXIgPSBRdWV1ZU1hbmFnZXIyKAorICAgICAgICAgICAgYWRkcmVzcz1hZGRyZXNzLCBhdXRoa2V5PWF1dGhrZXksIHNlcmlhbGl6ZXI9U0VSSUFMSVpFUgorICAgICAgICAgICAgKQorICAgICAgICBtYW5hZ2VyLmNvbm5lY3QoKQorICAgICAgICBxdWV1ZSA9IG1hbmFnZXIuZ2V0X3F1ZXVlKCkKKyAgICAgICAgcXVldWUucHV0KCgnaGVsbG8gd29ybGQnLCBOb25lLCBUcnVlLCAyLjI1KSkKKworICAgIGRlZiB0ZXN0X3JlbW90ZShzZWxmKToKKyAgICAgICAgYXV0aGtleSA9IG9zLnVyYW5kb20oMzIpCisKKyAgICAgICAgbWFuYWdlciA9IFF1ZXVlTWFuYWdlcigKKyAgICAgICAgICAgIGFkZHJlc3M9KCdsb2NhbGhvc3QnLCAwKSwgYXV0aGtleT1hdXRoa2V5LCBzZXJpYWxpemVyPVNFUklBTElaRVIKKyAgICAgICAgICAgICkKKyAgICAgICAgbWFuYWdlci5zdGFydCgpCisKKyAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fcHV0dGVyLCBhcmdzPShtYW5hZ2VyLmFkZHJlc3MsIGF1dGhrZXkpKQorICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcC5zdGFydCgpCisKKyAgICAgICAgbWFuYWdlcjIgPSBRdWV1ZU1hbmFnZXIyKAorICAgICAgICAgICAgYWRkcmVzcz1tYW5hZ2VyLmFkZHJlc3MsIGF1dGhrZXk9YXV0aGtleSwgc2VyaWFsaXplcj1TRVJJQUxJWkVSCisgICAgICAgICAgICApCisgICAgICAgIG1hbmFnZXIyLmNvbm5lY3QoKQorICAgICAgICBxdWV1ZSA9IG1hbmFnZXIyLmdldF9xdWV1ZSgpCisKKyAgICAgICAgIyBOb3RlIHRoYXQgeG1scnBjbGliIHdpbGwgZGVzZXJpYWxpemUgb2JqZWN0IGFzIGEgbGlzdCBub3QgYSB0dXBsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1ZXVlLmdldCgpLCBbJ2hlbGxvIHdvcmxkJywgTm9uZSwgVHJ1ZSwgMi4yNV0pCisKKyAgICAgICAgIyBCZWNhdXNlIHdlIGFyZSB1c2luZyB4bWxycGNsaWIgZm9yIHNlcmlhbGl6YXRpb24gaW5zdGVhZCBvZgorICAgICAgICAjIHBpY2tsZSB0aGlzIHdpbGwgY2F1c2UgYSBzZXJpYWxpemF0aW9uIGVycm9yLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHF1ZXVlLnB1dCwgdGltZS5zbGVlcCkKKworICAgICAgICAjIE1ha2UgcXVldWUgZmluYWxpemVyIHJ1biBiZWZvcmUgdGhlIHNlcnZlciBpcyBzdG9wcGVkCisgICAgICAgIGRlbCBxdWV1ZQorICAgICAgICBtYW5hZ2VyLnNodXRkb3duKCkKKworY2xhc3MgX1Rlc3RNYW5hZ2VyUmVzdGFydChCYXNlVGVzdENhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9wdXR0ZXIoY2xzLCBhZGRyZXNzLCBhdXRoa2V5KToKKyAgICAgICAgbWFuYWdlciA9IFF1ZXVlTWFuYWdlcigKKyAgICAgICAgICAgIGFkZHJlc3M9YWRkcmVzcywgYXV0aGtleT1hdXRoa2V5LCBzZXJpYWxpemVyPVNFUklBTElaRVIpCisgICAgICAgIG1hbmFnZXIuY29ubmVjdCgpCisgICAgICAgIHF1ZXVlID0gbWFuYWdlci5nZXRfcXVldWUoKQorICAgICAgICBxdWV1ZS5wdXQoJ2hlbGxvIHdvcmxkJykKKworICAgIGRlZiB0ZXN0X3JhcGlkX3Jlc3RhcnQoc2VsZik6CisgICAgICAgIGF1dGhrZXkgPSBvcy51cmFuZG9tKDMyKQorICAgICAgICBtYW5hZ2VyID0gUXVldWVNYW5hZ2VyKAorICAgICAgICAgICAgYWRkcmVzcz0oJ2xvY2FsaG9zdCcsIDApLCBhdXRoa2V5PWF1dGhrZXksIHNlcmlhbGl6ZXI9U0VSSUFMSVpFUikKKyAgICAgICAgc3J2ciA9IG1hbmFnZXIuZ2V0X3NlcnZlcigpCisgICAgICAgIGFkZHIgPSBzcnZyLmFkZHJlc3MKKyAgICAgICAgIyBDbG9zZSB0aGUgY29ubmVjdGlvbi5MaXN0ZW5lciBzb2NrZXQgd2hpY2ggZ2V0cyBvcGVuZWQgYXMgYSBwYXJ0CisgICAgICAgICMgb2YgbWFuYWdlci5nZXRfc2VydmVyKCkuIEl0J3Mgbm90IG5lZWRlZCBmb3IgdGhlIHRlc3QuCisgICAgICAgIHNydnIubGlzdGVuZXIuY2xvc2UoKQorICAgICAgICBtYW5hZ2VyLnN0YXJ0KCkKKworICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl9wdXR0ZXIsIGFyZ3M9KG1hbmFnZXIuYWRkcmVzcywgYXV0aGtleSkpCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgcXVldWUgPSBtYW5hZ2VyLmdldF9xdWV1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVldWUuZ2V0KCksICdoZWxsbyB3b3JsZCcpCisgICAgICAgIGRlbCBxdWV1ZQorICAgICAgICBtYW5hZ2VyLnNodXRkb3duKCkKKyAgICAgICAgbWFuYWdlciA9IFF1ZXVlTWFuYWdlcigKKyAgICAgICAgICAgIGFkZHJlc3M9YWRkciwgYXV0aGtleT1hdXRoa2V5LCBzZXJpYWxpemVyPVNFUklBTElaRVIpCisgICAgICAgIG1hbmFnZXIuc3RhcnQoKQorICAgICAgICBtYW5hZ2VyLnNodXRkb3duKCkKKworIworIworIworCitTRU5USU5FTCA9IGxhdGluKCcnKQorCitjbGFzcyBfVGVzdENvbm5lY3Rpb24oQmFzZVRlc3RDYXNlKToKKworICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsICd0aHJlYWRzJykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZWNobyhjbHMsIGNvbm4pOgorICAgICAgICBmb3IgbXNnIGluIGl0ZXIoY29ubi5yZWN2X2J5dGVzLCBTRU5USU5FTCk6CisgICAgICAgICAgICBjb25uLnNlbmRfYnl0ZXMobXNnKQorICAgICAgICBjb25uLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIGNvbm4sIGNoaWxkX2Nvbm4gPSBzZWxmLlBpcGUoKQorCisgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX2VjaG8sIGFyZ3M9KGNoaWxkX2Nvbm4sKSkKKyAgICAgICAgcC5kYWVtb24gPSBUcnVlCisgICAgICAgIHAuc3RhcnQoKQorCisgICAgICAgIHNlcSA9IFsxLCAyLjI1LCBOb25lXQorICAgICAgICBtc2cgPSBsYXRpbignaGVsbG8gd29ybGQnKQorICAgICAgICBsb25nbXNnID0gbXNnICogMTAKKyAgICAgICAgYXJyID0gYXJyYXkuYXJyYXkoJ2knLCByYW5nZSg0KSkKKworICAgICAgICBpZiBzZWxmLlRZUEUgPT0gJ3Byb2Nlc3Nlcyc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoY29ubi5maWxlbm8oKSksIGludCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4uc2VuZChzZXEpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4ucmVjdigpLCBzZXEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLnNlbmRfYnl0ZXMobXNnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLnJlY3ZfYnl0ZXMoKSwgbXNnKQorCisgICAgICAgIGlmIHNlbGYuVFlQRSA9PSAncHJvY2Vzc2VzJzoKKyAgICAgICAgICAgIGJ1ZmZlciA9IGFycmF5LmFycmF5KCdpJywgWzBdKjEwKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBsaXN0KGFycikgKyBbMF0gKiAoMTAgLSBsZW4oYXJyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5zZW5kX2J5dGVzKGFyciksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4ucmVjdl9ieXRlc19pbnRvKGJ1ZmZlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihhcnIpICogYnVmZmVyLml0ZW1zaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGJ1ZmZlciksIGV4cGVjdGVkKQorCisgICAgICAgICAgICBidWZmZXIgPSBhcnJheS5hcnJheSgnaScsIFswXSoxMCkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gWzBdICogMyArIGxpc3QoYXJyKSArIFswXSAqICgxMCAtIDMgLSBsZW4oYXJyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5zZW5kX2J5dGVzKGFyciksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4ucmVjdl9ieXRlc19pbnRvKGJ1ZmZlciwgMyAqIGJ1ZmZlci5pdGVtc2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihhcnIpICogYnVmZmVyLml0ZW1zaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGJ1ZmZlciksIGV4cGVjdGVkKQorCisgICAgICAgICAgICBidWZmZXIgPSBieXRlYXJyYXkobGF0aW4oJyAnICogNDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLnNlbmRfYnl0ZXMobG9uZ21zZyksIE5vbmUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzID0gY29ubi5yZWN2X2J5dGVzX2ludG8oYnVmZmVyKQorICAgICAgICAgICAgZXhjZXB0IG11bHRpcHJvY2Vzc2luZy5CdWZmZXJUb29TaG9ydCwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJncywgKGxvbmdtc2csKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdleHBlY3RlZCBCdWZmZXJUb29TaG9ydCwgZ290ICVzJyAlIHJlcykKKworICAgICAgICBwb2xsID0gVGltaW5nV3JhcHBlcihjb25uLnBvbGwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb2xsKCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKHBvbGwuZWxhcHNlZCwgMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvbGwoVElNRU9VVDEpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChwb2xsLmVsYXBzZWQsIFRJTUVPVVQxKQorCisgICAgICAgIGNvbm4uc2VuZChOb25lKQorICAgICAgICB0aW1lLnNsZWVwKC4xKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9sbChUSU1FT1VUMSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwocG9sbC5lbGFwc2VkLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5yZWN2KCksIE5vbmUpCisKKyAgICAgICAgcmVhbGx5X2JpZ19tc2cgPSBsYXRpbignWCcpICogKDEwMjQgKiAxMDI0ICogMTYpICAgIyAxNk1iCisgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhyZWFsbHlfYmlnX21zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLnJlY3ZfYnl0ZXMoKSwgcmVhbGx5X2JpZ19tc2cpCisKKyAgICAgICAgY29ubi5zZW5kX2J5dGVzKFNFTlRJTkVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZWxsIGNoaWxkIHRvIHF1aXQKKyAgICAgICAgY2hpbGRfY29ubi5jbG9zZSgpCisKKyAgICAgICAgaWYgc2VsZi5UWVBFID09ICdwcm9jZXNzZXMnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLnJlYWRhYmxlLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLndyaXRhYmxlLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGNvbm4ucmVjdikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBjb25uLnJlY3ZfYnl0ZXMpCisKKyAgICAgICAgcC5qb2luKCkKKworICAgIGRlZiB0ZXN0X2R1cGxleF9mYWxzZShzZWxmKToKKyAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBzZWxmLlBpcGUoZHVwbGV4PUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXRlci5zZW5kKDEpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWN2KCksIDEpCisgICAgICAgIGlmIHNlbGYuVFlQRSA9PSAncHJvY2Vzc2VzJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRhYmxlLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIud3JpdGFibGUsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cml0ZXIucmVhZGFibGUsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cml0ZXIud3JpdGFibGUsIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCByZWFkZXIuc2VuZCwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHdyaXRlci5yZWN2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgd3JpdGVyLnBvbGwpCisKKyAgICBkZWYgdGVzdF9zcGF3bl9jbG9zZShzZWxmKToKKyAgICAgICAgIyBXZSB0ZXN0IHRoYXQgYSBwaXBlIGNvbm5lY3Rpb24gY2FuIGJlIGNsb3NlZCBieSBwYXJlbnQKKyAgICAgICAgIyBwcm9jZXNzIGltbWVkaWF0ZWx5IGFmdGVyIGNoaWxkIGlzIHNwYXduZWQuICBPbiBXaW5kb3dzIHRoaXMKKyAgICAgICAgIyB3b3VsZCBoYXZlIHNvbWV0aW1lcyBmYWlsZWQgb24gb2xkIHZlcnNpb25zIGJlY2F1c2UKKyAgICAgICAgIyBjaGlsZF9jb25uIHdvdWxkIGJlIGNsb3NlZCBiZWZvcmUgdGhlIGNoaWxkIGdvdCBhIGNoYW5jZSB0bworICAgICAgICAjIGR1cGxpY2F0ZSBpdC4KKyAgICAgICAgY29ubiwgY2hpbGRfY29ubiA9IHNlbGYuUGlwZSgpCisKKyAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fZWNobywgYXJncz0oY2hpbGRfY29ubiwpKQorICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcC5zdGFydCgpCisgICAgICAgIGNoaWxkX2Nvbm4uY2xvc2UoKSAgICAjIHRoaXMgbWlnaHQgY29tcGxldGUgYmVmb3JlIGNoaWxkIGluaXRpYWxpemVzCisKKyAgICAgICAgbXNnID0gbGF0aW4oJ2hlbGxvJykKKyAgICAgICAgY29ubi5zZW5kX2J5dGVzKG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLnJlY3ZfYnl0ZXMoKSwgbXNnKQorCisgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhTRU5USU5FTCkKKyAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgIHAuam9pbigpCisKKyAgICBkZWYgdGVzdF9zZW5kYnl0ZXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuVFlQRSAhPSAncHJvY2Vzc2VzJzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIG1zZyA9IGxhdGluKCdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicpCisgICAgICAgIGEsIGIgPSBzZWxmLlBpcGUoKQorCisgICAgICAgIGEuc2VuZF9ieXRlcyhtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yZWN2X2J5dGVzKCksIG1zZykKKworICAgICAgICBhLnNlbmRfYnl0ZXMobXNnLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucmVjdl9ieXRlcygpLCBtc2dbNTpdKQorCisgICAgICAgIGEuc2VuZF9ieXRlcyhtc2csIDcsIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yZWN2X2J5dGVzKCksIG1zZ1s3OjcrOF0pCisKKyAgICAgICAgYS5zZW5kX2J5dGVzKG1zZywgMjYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yZWN2X2J5dGVzKCksIGxhdGluKCcnKSkKKworICAgICAgICBhLnNlbmRfYnl0ZXMobXNnLCAyNiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJlY3ZfYnl0ZXMoKSwgbGF0aW4oJycpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuc2VuZF9ieXRlcywgbXNnLCAyNykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLnNlbmRfYnl0ZXMsIG1zZywgMjIsIDUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYS5zZW5kX2J5dGVzLCBtc2csIDI2LCAxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuc2VuZF9ieXRlcywgbXNnLCAtMSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLnNlbmRfYnl0ZXMsIG1zZywgNCwgLTEpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2lzX2ZkX2Fzc2lnbmVkKGNscywgZmQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5mc3RhdChmZCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUJBREY6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfd3JpdGVmZChjbHMsIGNvbm4sIGRhdGEsIGNyZWF0ZV9kdW1teV9mZHM9RmFsc2UpOgorICAgICAgICBpZiBjcmVhdGVfZHVtbXlfZmRzOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgMjU2KToKKyAgICAgICAgICAgICAgICBpZiBub3QgY2xzLl9pc19mZF9hc3NpZ25lZChpKToKKyAgICAgICAgICAgICAgICAgICAgb3MuZHVwMihjb25uLmZpbGVubygpLCBpKQorICAgICAgICBmZCA9IHJlZHVjdGlvbi5yZWN2X2hhbmRsZShjb25uKQorICAgICAgICBpZiBtc3ZjcnQ6CisgICAgICAgICAgICBmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShmZCwgb3MuT19XUk9OTFkpCisgICAgICAgIG9zLndyaXRlKGZkLCBkYXRhKQorICAgICAgICBvcy5jbG9zZShmZCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19SRURVQ1RJT04sICJ0ZXN0IG5lZWRzIG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb24iKQorICAgIGRlZiB0ZXN0X2ZkX3RyYW5zZmVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLlRZUEUgIT0gJ3Byb2Nlc3Nlcyc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJvbmx5IG1ha2VzIHNlbnNlIHdpdGggcHJvY2Vzc2VzIikKKyAgICAgICAgY29ubiwgY2hpbGRfY29ubiA9IHNlbGYuUGlwZShkdXBsZXg9VHJ1ZSkKKworICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl93cml0ZWZkLCBhcmdzPShjaGlsZF9jb25uLCBiImZvbyIpKQorICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcC5zdGFydCgpCisgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZmQgPSBmLmZpbGVubygpCisgICAgICAgICAgICBpZiBtc3ZjcnQ6CisgICAgICAgICAgICAgICAgZmQgPSBtc3ZjcnQuZ2V0X29zZmhhbmRsZShmZCkKKyAgICAgICAgICAgIHJlZHVjdGlvbi5zZW5kX2hhbmRsZShjb25uLCBmZCwgcC5waWQpCisgICAgICAgIHAuam9pbigpCisgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJmb28iKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1JFRFVDVElPTiwgInRlc3QgbmVlZHMgbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbiIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwKKyAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IHNlbWFudGljcyBkb24ndCBtYWtlIHNlbnNlIG9uIFdpbmRvd3MiKQorICAgIEB1bml0dGVzdC5za2lwSWYoTUFYRkQgPD0gMjU2LAorICAgICAgICAgICAgICAgICAgICAgImxhcmdlc3QgYXNzaWduYWJsZSBmZCBudW1iZXIgaXMgdG9vIHNtYWxsIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAiZHVwMiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IG5lZWRzIG9zLmR1cDIoKSIpCisgICAgZGVmIHRlc3RfbGFyZ2VfZmRfdHJhbnNmZXIoc2VsZik6CisgICAgICAgICMgV2l0aCBmZCA+IDI1NiAoaXNzdWUgIzExNjU3KQorICAgICAgICBpZiBzZWxmLlRZUEUgIT0gJ3Byb2Nlc3Nlcyc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJvbmx5IG1ha2VzIHNlbnNlIHdpdGggcHJvY2Vzc2VzIikKKyAgICAgICAgY29ubiwgY2hpbGRfY29ubiA9IHNlbGYuUGlwZShkdXBsZXg9VHJ1ZSkKKworICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl93cml0ZWZkLCBhcmdzPShjaGlsZF9jb25uLCBiImJhciIsIFRydWUpKQorICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcC5zdGFydCgpCisgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZmQgPSBmLmZpbGVubygpCisgICAgICAgICAgICBmb3IgbmV3ZmQgaW4gcmFuZ2UoMjU2LCBNQVhGRCk6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2lzX2ZkX2Fzc2lnbmVkKG5ld2ZkKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJjb3VsZCBub3QgZmluZCBhbiB1bmFzc2lnbmVkIGxhcmdlIGZpbGUgZGVzY3JpcHRvciIpCisgICAgICAgICAgICBvcy5kdXAyKGZkLCBuZXdmZCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWR1Y3Rpb24uc2VuZF9oYW5kbGUoY29ubiwgbmV3ZmQsIHAucGlkKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShuZXdmZCkKKyAgICAgICAgcC5qb2luKCkKKyAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiImJhciIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3NlbmRfZGF0YV93aXRob3V0X2ZkKHNlbGYsIGNvbm4pOgorICAgICAgICBvcy53cml0ZShjb25uLmZpbGVubygpLCBiIlwwIikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19SRURVQ1RJT04sICJ0ZXN0IG5lZWRzIG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb24iKQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJkb2Vzbid0IG1ha2Ugc2Vuc2Ugb24gV2luZG93cyIpCisgICAgZGVmIHRlc3RfbWlzc2luZ19mZF90cmFuc2ZlcihzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiByZWNlaXZlZCBkYXRhIGlzIG5vdAorICAgICAgICAjIGFjY29tcGFuaWVkIGJ5IGEgZmlsZSBkZXNjcmlwdG9yIGluIGFuY2lsbGFyeSBkYXRhLgorICAgICAgICBpZiBzZWxmLlRZUEUgIT0gJ3Byb2Nlc3Nlcyc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJvbmx5IG1ha2VzIHNlbnNlIHdpdGggcHJvY2Vzc2VzIikKKyAgICAgICAgY29ubiwgY2hpbGRfY29ubiA9IHNlbGYuUGlwZShkdXBsZXg9VHJ1ZSkKKworICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl9zZW5kX2RhdGFfd2l0aG91dF9mZCwgYXJncz0oY2hpbGRfY29ubiwpKQorICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcC5zdGFydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgcmVkdWN0aW9uLnJlY3ZfaGFuZGxlLCBjb25uKQorICAgICAgICBwLmpvaW4oKQorCitjbGFzcyBfVGVzdExpc3RlbmVyQ2xpZW50KEJhc2VUZXN0Q2FzZSk6CisKKyAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCAndGhyZWFkcycpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3QoY2xzLCBhZGRyZXNzKToKKyAgICAgICAgY29ubiA9IGNscy5jb25uZWN0aW9uLkNsaWVudChhZGRyZXNzKQorICAgICAgICBjb25uLnNlbmQoJ2hlbGxvJykKKyAgICAgICAgY29ubi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9saXN0ZW5lcl9jbGllbnQoc2VsZik6CisgICAgICAgIGZvciBmYW1pbHkgaW4gc2VsZi5jb25uZWN0aW9uLmZhbWlsaWVzOgorICAgICAgICAgICAgbCA9IHNlbGYuY29ubmVjdGlvbi5MaXN0ZW5lcihmYW1pbHk9ZmFtaWx5KQorICAgICAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fdGVzdCwgYXJncz0obC5hZGRyZXNzLCkpCisgICAgICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICAgY29ubiA9IGwuYWNjZXB0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5yZWN2KCksICdoZWxsbycpCisgICAgICAgICAgICBwLmpvaW4oKQorICAgICAgICAgICAgbC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTE0NzI1KHNlbGYpOgorICAgICAgICBsID0gc2VsZi5jb25uZWN0aW9uLkxpc3RlbmVyKCkKKyAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fdGVzdCwgYXJncz0obC5hZGRyZXNzLCkpCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICAjIE9uIFdpbmRvd3MgdGhlIGNsaWVudCBwcm9jZXNzIHNob3VsZCBieSBub3cgaGF2ZSBjb25uZWN0ZWQsCisgICAgICAgICMgd3JpdHRlbiBkYXRhIGFuZCBjbG9zZWQgdGhlIHBpcGUgaGFuZGxlIGJ5IG5vdy4gIFRoaXMgY2F1c2VzCisgICAgICAgICMgQ29ubmVjdE5hbWRlZFBpcGUoKSB0byBmYWlsIHdpdGggRVJST1JfTk9fREFUQS4gIFNlZSBJc3N1ZQorICAgICAgICAjIDE0NzI1LgorICAgICAgICBjb25uID0gbC5hY2NlcHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbm4ucmVjdigpLCAnaGVsbG8nKQorICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgcC5qb2luKCkKKyAgICAgICAgbC5jbG9zZSgpCisKKyMKKyMgVGVzdCBvZiBzZW5kaW5nIGNvbm5lY3Rpb24gYW5kIHNvY2tldCBvYmplY3RzIGJldHdlZW4gcHJvY2Vzc2VzCisjCisiIiIKK2NsYXNzIF9UZXN0UGlja2xpbmdDb25uZWN0aW9ucyhCYXNlVGVzdENhc2UpOgorCisgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywpCisKKyAgICBkZWYgX2xpc3RlbmVyKHNlbGYsIGNvbm4sIGZhbWlsaWVzKToKKyAgICAgICAgZm9yIGZhbSBpbiBmYW1pbGllczoKKyAgICAgICAgICAgIGwgPSBzZWxmLmNvbm5lY3Rpb24uTGlzdGVuZXIoZmFtaWx5PWZhbSkKKyAgICAgICAgICAgIGNvbm4uc2VuZChsLmFkZHJlc3MpCisgICAgICAgICAgICBuZXdfY29ubiA9IGwuYWNjZXB0KCkKKyAgICAgICAgICAgIGNvbm4uc2VuZChuZXdfY29ubikKKworICAgICAgICBpZiBzZWxmLlRZUEUgPT0gJ3Byb2Nlc3Nlcyc6CisgICAgICAgICAgICBsID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBsLmJpbmQoKCdsb2NhbGhvc3QnLCAwKSkKKyAgICAgICAgICAgIGNvbm4uc2VuZChsLmdldHNvY2tuYW1lKCkpCisgICAgICAgICAgICBsLmxpc3RlbigxKQorICAgICAgICAgICAgbmV3X2Nvbm4sIGFkZHIgPSBsLmFjY2VwdCgpCisgICAgICAgICAgICBjb25uLnNlbmQobmV3X2Nvbm4pCisKKyAgICAgICAgY29ubi5yZWN2KCkKKworICAgIGRlZiBfcmVtb3RlKHNlbGYsIGNvbm4pOgorICAgICAgICBmb3IgKGFkZHJlc3MsIG1zZykgaW4gaXRlcihjb25uLnJlY3YsIE5vbmUpOgorICAgICAgICAgICAgY2xpZW50ID0gc2VsZi5jb25uZWN0aW9uLkNsaWVudChhZGRyZXNzKQorICAgICAgICAgICAgY2xpZW50LnNlbmQobXNnLnVwcGVyKCkpCisgICAgICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgICAgIGlmIHNlbGYuVFlQRSA9PSAncHJvY2Vzc2VzJzoKKyAgICAgICAgICAgIGFkZHJlc3MsIG1zZyA9IGNvbm4ucmVjdigpCisgICAgICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KGFkZHJlc3MpCisgICAgICAgICAgICBjbGllbnQuc2VuZGFsbChtc2cudXBwZXIoKSkKKyAgICAgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgY29ubi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLmFsbG93X2Nvbm5lY3Rpb25fcGlja2xpbmcoKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmYW1pbGllcyA9IHNlbGYuY29ubmVjdGlvbi5mYW1pbGllcworCisgICAgICAgIGxjb25uLCBsY29ubjAgPSBzZWxmLlBpcGUoKQorICAgICAgICBscCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fbGlzdGVuZXIsIGFyZ3M9KGxjb25uMCwgZmFtaWxpZXMpKQorICAgICAgICBscC5kYWVtb24gPSBUcnVlCisgICAgICAgIGxwLnN0YXJ0KCkKKyAgICAgICAgbGNvbm4wLmNsb3NlKCkKKworICAgICAgICByY29ubiwgcmNvbm4wID0gc2VsZi5QaXBlKCkKKyAgICAgICAgcnAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3JlbW90ZSwgYXJncz0ocmNvbm4wLCkpCisgICAgICAgIHJwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcnAuc3RhcnQoKQorICAgICAgICByY29ubjAuY2xvc2UoKQorCisgICAgICAgIGZvciBmYW0gaW4gZmFtaWxpZXM6CisgICAgICAgICAgICBtc2cgPSAoJ1RoaXMgY29ubmVjdGlvbiB1c2VzIGZhbWlseSAlcycgJSBmYW0pLmVuY29kZSgnYXNjaWknKQorICAgICAgICAgICAgYWRkcmVzcyA9IGxjb25uLnJlY3YoKQorICAgICAgICAgICAgcmNvbm4uc2VuZCgoYWRkcmVzcywgbXNnKSkKKyAgICAgICAgICAgIG5ld19jb25uID0gbGNvbm4ucmVjdigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19jb25uLnJlY3YoKSwgbXNnLnVwcGVyKCkpCisKKyAgICAgICAgcmNvbm4uc2VuZChOb25lKQorCisgICAgICAgIGlmIHNlbGYuVFlQRSA9PSAncHJvY2Vzc2VzJzoKKyAgICAgICAgICAgIG1zZyA9IGxhdGluKCdUaGlzIGNvbm5lY3Rpb24gdXNlcyBhIG5vcm1hbCBzb2NrZXQnKQorICAgICAgICAgICAgYWRkcmVzcyA9IGxjb25uLnJlY3YoKQorICAgICAgICAgICAgcmNvbm4uc2VuZCgoYWRkcmVzcywgbXNnKSkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc29ja2V0LCAnZnJvbWZkJyk6CisgICAgICAgICAgICAgICAgbmV3X2Nvbm4gPSBsY29ubi5yZWN2KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19jb25uLnJlY3YoMTAwKSwgbXNnLnVwcGVyKCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgWFhYIE9uIFdpbmRvd3Mgd2l0aCBQeTIuNiBuZWVkIHRvIGJhY2twb3J0IGZyb21mZCgpCisgICAgICAgICAgICAgICAgZGlzY2FyZCA9IGxjb25uLnJlY3ZfYnl0ZXMoKQorCisgICAgICAgIGxjb25uLnNlbmQoTm9uZSkKKworICAgICAgICByY29ubi5jbG9zZSgpCisgICAgICAgIGxjb25uLmNsb3NlKCkKKworICAgICAgICBscC5qb2luKCkKKyAgICAgICAgcnAuam9pbigpCisiIiIKKyMKKyMKKyMKKworY2xhc3MgX1Rlc3RIZWFwKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCkKKworICAgIGRlZiB0ZXN0X2hlYXAoc2VsZik6CisgICAgICAgIGl0ZXJhdGlvbnMgPSA1MDAwCisgICAgICAgIG1heGJsb2NrcyA9IDUwCisgICAgICAgIGJsb2NrcyA9IFtdCisKKyAgICAgICAgIyBjcmVhdGUgYW5kIGRlc3Ryb3kgbG90cyBvZiBibG9ja3Mgb2YgZGlmZmVyZW50IHNpemVzCisgICAgICAgIGZvciBpIGluIHhyYW5nZShpdGVyYXRpb25zKToKKyAgICAgICAgICAgIHNpemUgPSBpbnQocmFuZG9tLmxvZ25vcm12YXJpYXRlKDAsIDEpICogMTAwMCkKKyAgICAgICAgICAgIGIgPSBtdWx0aXByb2Nlc3NpbmcuaGVhcC5CdWZmZXJXcmFwcGVyKHNpemUpCisgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGIpCisgICAgICAgICAgICBpZiBsZW4oYmxvY2tzKSA+IG1heGJsb2NrczoKKyAgICAgICAgICAgICAgICBpID0gcmFuZG9tLnJhbmRyYW5nZShtYXhibG9ja3MpCisgICAgICAgICAgICAgICAgZGVsIGJsb2Nrc1tpXQorCisgICAgICAgICMgZ2V0IHRoZSBoZWFwIG9iamVjdAorICAgICAgICBoZWFwID0gbXVsdGlwcm9jZXNzaW5nLmhlYXAuQnVmZmVyV3JhcHBlci5faGVhcAorCisgICAgICAgICMgdmVyaWZ5IHRoZSBzdGF0ZSBvZiB0aGUgaGVhcAorICAgICAgICBhbGwgPSBbXQorICAgICAgICBvY2N1cGllZCA9IDAKKyAgICAgICAgaGVhcC5fbG9jay5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGhlYXAuX2xvY2sucmVsZWFzZSkKKyAgICAgICAgZm9yIEwgaW4gaGVhcC5fbGVuX3RvX3NlcS52YWx1ZXMoKToKKyAgICAgICAgICAgIGZvciBhcmVuYSwgc3RhcnQsIHN0b3AgaW4gTDoKKyAgICAgICAgICAgICAgICBhbGwuYXBwZW5kKChoZWFwLl9hcmVuYXMuaW5kZXgoYXJlbmEpLCBzdGFydCwgc3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wLXN0YXJ0LCAnZnJlZScpKQorICAgICAgICBmb3IgYXJlbmEsIHN0YXJ0LCBzdG9wIGluIGhlYXAuX2FsbG9jYXRlZF9ibG9ja3M6CisgICAgICAgICAgICBhbGwuYXBwZW5kKChoZWFwLl9hcmVuYXMuaW5kZXgoYXJlbmEpLCBzdGFydCwgc3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3Atc3RhcnQsICdvY2N1cGllZCcpKQorICAgICAgICAgICAgb2NjdXBpZWQgKz0gKHN0b3Atc3RhcnQpCisKKyAgICAgICAgYWxsLnNvcnQoKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihhbGwpLTEpOgorICAgICAgICAgICAgKGFyZW5hLCBzdGFydCwgc3RvcCkgPSBhbGxbaV1bOjNdCisgICAgICAgICAgICAobmFyZW5hLCBuc3RhcnQsIG5zdG9wKSA9IGFsbFtpKzFdWzozXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhcmVuYSAhPSBuYXJlbmEgYW5kIG5zdGFydCA9PSAwKSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdG9wID09IG5zdGFydCkpCisKKyAgICBkZWYgdGVzdF9mcmVlX2Zyb21fZ2Moc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBmcmVlaW5nIG9mIGJsb2NrcyBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgZG9lc24ndCBkZWFkbG9jaworICAgICAgICAjIChpc3N1ZSAjMTIzNTIpLgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgR0MgaXMgZW5hYmxlZCwgYW5kIHNldCBsb3dlciBjb2xsZWN0aW9uIHRocmVzaG9sZHMgdG8KKyAgICAgICAgIyBtYWtlIGNvbGxlY3Rpb25zIG1vcmUgZnJlcXVlbnQgKGFuZCBpbmNyZWFzZSB0aGUgcHJvYmFiaWxpdHkgb2YKKyAgICAgICAgIyBkZWFkbG9jaykuCisgICAgICAgIGlmIG5vdCBnYy5pc2VuYWJsZWQoKToKKyAgICAgICAgICAgIGdjLmVuYWJsZSgpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoZ2MuZGlzYWJsZSkKKyAgICAgICAgdGhyZXNob2xkcyA9IGdjLmdldF90aHJlc2hvbGQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZ2Muc2V0X3RocmVzaG9sZCwgKnRocmVzaG9sZHMpCisgICAgICAgIGdjLnNldF90aHJlc2hvbGQoMTApCisKKyAgICAgICAgIyBwZXJmb3JtIG51bWVyb3VzIGJsb2NrIGFsbG9jYXRpb25zLCB3aXRoIGN5Y2xpYyByZWZlcmVuY2VzIHRvIG1ha2UKKyAgICAgICAgIyBzdXJlIG9iamVjdHMgYXJlIGNvbGxlY3RlZCBhc3luY2hyb25vdXNseSBieSB0aGUgZ2MKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNTAwMCk6CisgICAgICAgICAgICBhID0gbXVsdGlwcm9jZXNzaW5nLmhlYXAuQnVmZmVyV3JhcHBlcigxKQorICAgICAgICAgICAgYiA9IG11bHRpcHJvY2Vzc2luZy5oZWFwLkJ1ZmZlcldyYXBwZXIoMSkKKyAgICAgICAgICAgICMgY2lyY3VsYXIgcmVmZXJlbmNlcworICAgICAgICAgICAgYS5idWRkeSA9IGIKKyAgICAgICAgICAgIGIuYnVkZHkgPSBhCisKKyMKKyMKKyMKKworY2xhc3MgX0ZvbyhTdHJ1Y3R1cmUpOgorICAgIF9maWVsZHNfID0gWworICAgICAgICAoJ3gnLCBjX2ludCksCisgICAgICAgICgneScsIGNfZG91YmxlKQorICAgICAgICBdCisKK2NsYXNzIF9UZXN0U2hhcmVkQ1R5cGVzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgbm90IEhBU19TSEFSRURDVFlQRVM6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJyZXF1aXJlcyBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZG91YmxlKGNscywgeCwgeSwgZm9vLCBhcnIsIHN0cmluZyk6CisgICAgICAgIHgudmFsdWUgKj0gMgorICAgICAgICB5LnZhbHVlICo9IDIKKyAgICAgICAgZm9vLnggKj0gMgorICAgICAgICBmb28ueSAqPSAyCisgICAgICAgIHN0cmluZy52YWx1ZSAqPSAyCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihhcnIpKToKKyAgICAgICAgICAgIGFycltpXSAqPSAyCisKKyAgICBkZWYgdGVzdF9zaGFyZWRjdHlwZXMoc2VsZiwgbG9jaz1GYWxzZSk6CisgICAgICAgIHggPSBWYWx1ZSgnaScsIDcsIGxvY2s9bG9jaykKKyAgICAgICAgeSA9IFZhbHVlKGNfZG91YmxlLCAxLjAvMy4wLCBsb2NrPWxvY2spCisgICAgICAgIGZvbyA9IFZhbHVlKF9Gb28sIDMsIDIsIGxvY2s9bG9jaykKKyAgICAgICAgYXJyID0gc2VsZi5BcnJheSgnZCcsIHJhbmdlKDEwKSwgbG9jaz1sb2NrKQorICAgICAgICBzdHJpbmcgPSBzZWxmLkFycmF5KCdjJywgMjAsIGxvY2s9bG9jaykKKyAgICAgICAgc3RyaW5nLnZhbHVlID0gbGF0aW4oJ2hlbGxvJykKKworICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl9kb3VibGUsIGFyZ3M9KHgsIHksIGZvbywgYXJyLCBzdHJpbmcpKQorICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcC5zdGFydCgpCisgICAgICAgIHAuam9pbigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnZhbHVlLCAxNCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCh5LnZhbHVlLCAyLjAvMy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby54LCA2KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZvby55LCA0LjApCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoYXJyW2ldLCBpKjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLnZhbHVlLCBsYXRpbignaGVsbG9oZWxsbycpKQorCisgICAgZGVmIHRlc3Rfc3luY2hyb25pemUoc2VsZik6CisgICAgICAgIHNlbGYudGVzdF9zaGFyZWRjdHlwZXMobG9jaz1UcnVlKQorCisgICAgZGVmIHRlc3RfY29weShzZWxmKToKKyAgICAgICAgZm9vID0gX0ZvbygyLCA1LjApCisgICAgICAgIGJhciA9IGNvcHkoZm9vKQorICAgICAgICBmb28ueCA9IDAKKyAgICAgICAgZm9vLnkgPSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFyLngsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoYmFyLnksIDUuMCkKKworIworIworIworCitjbGFzcyBfVGVzdEZpbmFsaXplKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF9maW5hbGl6ZShjbHMsIGNvbm4pOgorICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBhID0gRm9vKCkKKyAgICAgICAgdXRpbC5GaW5hbGl6ZShhLCBjb25uLnNlbmQsIGFyZ3M9KCdhJywpKQorICAgICAgICBkZWwgYSAgICAgICAgICAgIyB0cmlnZ2VycyBjYWxsYmFjayBmb3IgYQorCisgICAgICAgIGIgPSBGb28oKQorICAgICAgICBjbG9zZV9iID0gdXRpbC5GaW5hbGl6ZShiLCBjb25uLnNlbmQsIGFyZ3M9KCdiJywpKQorICAgICAgICBjbG9zZV9iKCkgICAgICAgIyB0cmlnZ2VycyBjYWxsYmFjayBmb3IgYgorICAgICAgICBjbG9zZV9iKCkgICAgICAgIyBkb2VzIG5vdGhpbmcgYmVjYXVzZSBjYWxsYmFjayBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZAorICAgICAgICBkZWwgYiAgICAgICAgICAgIyBkb2VzIG5vdGhpbmcgYmVjYXVzZSBjYWxsYmFjayBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZAorCisgICAgICAgIGMgPSBGb28oKQorICAgICAgICB1dGlsLkZpbmFsaXplKGMsIGNvbm4uc2VuZCwgYXJncz0oJ2MnLCkpCisKKyAgICAgICAgZDEwID0gRm9vKCkKKyAgICAgICAgdXRpbC5GaW5hbGl6ZShkMTAsIGNvbm4uc2VuZCwgYXJncz0oJ2QxMCcsKSwgZXhpdHByaW9yaXR5PTEpCisKKyAgICAgICAgZDAxID0gRm9vKCkKKyAgICAgICAgdXRpbC5GaW5hbGl6ZShkMDEsIGNvbm4uc2VuZCwgYXJncz0oJ2QwMScsKSwgZXhpdHByaW9yaXR5PTApCisgICAgICAgIGQwMiA9IEZvbygpCisgICAgICAgIHV0aWwuRmluYWxpemUoZDAyLCBjb25uLnNlbmQsIGFyZ3M9KCdkMDInLCksIGV4aXRwcmlvcml0eT0wKQorICAgICAgICBkMDMgPSBGb28oKQorICAgICAgICB1dGlsLkZpbmFsaXplKGQwMywgY29ubi5zZW5kLCBhcmdzPSgnZDAzJywpLCBleGl0cHJpb3JpdHk9MCkKKworICAgICAgICB1dGlsLkZpbmFsaXplKE5vbmUsIGNvbm4uc2VuZCwgYXJncz0oJ2UnLCksIGV4aXRwcmlvcml0eT0tMTApCisKKyAgICAgICAgdXRpbC5GaW5hbGl6ZShOb25lLCBjb25uLnNlbmQsIGFyZ3M9KCdTVE9QJywpLCBleGl0cHJpb3JpdHk9LTEwMCkKKworICAgICAgICAjIGNhbGwgbXVsdGlwcm9jZXNzaW5nJ3MgY2xlYW51cCBmdW5jdGlvbiB0aGVuIGV4aXQgcHJvY2VzcyB3aXRob3V0CisgICAgICAgICMgZ2FyYmFnZSBjb2xsZWN0aW5nIGxvY2FscworICAgICAgICB1dGlsLl9leGl0X2Z1bmN0aW9uKCkKKyAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgIG9zLl9leGl0KDApCisKKyAgICBkZWYgdGVzdF9maW5hbGl6ZShzZWxmKToKKyAgICAgICAgY29ubiwgY2hpbGRfY29ubiA9IHNlbGYuUGlwZSgpCisKKyAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fdGVzdF9maW5hbGl6ZSwgYXJncz0oY2hpbGRfY29ubiwpKQorICAgICAgICBwLmRhZW1vbiA9IFRydWUKKyAgICAgICAgcC5zdGFydCgpCisgICAgICAgIHAuam9pbigpCisKKyAgICAgICAgcmVzdWx0ID0gW29iaiBmb3Igb2JqIGluIGl0ZXIoY29ubi5yZWN2LCAnU1RPUCcpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWydhJywgJ2InLCAnZDEwJywgJ2QwMycsICdkMDInLCAnZDAxJywgJ2UnXSkKKworIworIyBUZXN0IHRoYXQgZnJvbSAuLi4gaW1wb3J0ICogd29ya3MgZm9yIGVhY2ggbW9kdWxlCisjCisKK2NsYXNzIF9UZXN0SW1wb3J0U3RhcihCYXNlVGVzdENhc2UpOgorCisgICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywpCisKKyAgICBkZWYgdGVzdF9pbXBvcnQoc2VsZik6CisgICAgICAgIG1vZHVsZXMgPSBbCisgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nJywgJ211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uJywKKyAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcuaGVhcCcsICdtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMnLAorICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5wb29sJywgJ211bHRpcHJvY2Vzc2luZy5wcm9jZXNzJywKKyAgICAgICAgICAgICdtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUnLCAnbXVsdGlwcm9jZXNzaW5nLnV0aWwnCisgICAgICAgICAgICBdCisKKyAgICAgICAgaWYgSEFTX1JFRFVDVElPTjoKKyAgICAgICAgICAgIG1vZHVsZXMuYXBwZW5kKCdtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uJykKKworICAgICAgICBpZiBjX2ludCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgVGhpcyBtb2R1bGUgcmVxdWlyZXMgX2N0eXBlcworICAgICAgICAgICAgbW9kdWxlcy5hcHBlbmQoJ211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMnKQorCisgICAgICAgIGZvciBuYW1lIGluIG1vZHVsZXM6CisgICAgICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCisgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1tuYW1lXQorCisgICAgICAgICAgICBmb3IgYXR0ciBpbiBnZXRhdHRyKG1vZCwgJ19fYWxsX18nLCAoKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKG1vZCwgYXR0ciksCisgICAgICAgICAgICAgICAgICAgICclciBkb2VzIG5vdCBoYXZlIGF0dHJpYnV0ZSAlcicgJSAobW9kLCBhdHRyKQorICAgICAgICAgICAgICAgICAgICApCisKKyMKKyMgUXVpY2sgdGVzdCB0aGF0IGxvZ2dpbmcgd29ya3MgLS0gZG9lcyBub3QgdGVzdCBsb2dnaW5nIG91dHB1dAorIworCitjbGFzcyBfVGVzdExvZ2dpbmcoQmFzZVRlc3RDYXNlKToKKworICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsKQorCisgICAgZGVmIHRlc3RfZW5hYmxlX2xvZ2dpbmcoc2VsZik6CisgICAgICAgIGxvZ2dlciA9IG11bHRpcHJvY2Vzc2luZy5nZXRfbG9nZ2VyKCkKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKHV0aWwuU1VCV0FSTklORykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvZ2dlciBpcyBub3QgTm9uZSkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCd0aGlzIHdpbGwgbm90IGJlIHByaW50ZWQnKQorICAgICAgICBsb2dnZXIuaW5mbygnbm9yIHdpbGwgdGhpcycpCisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChMT0dfTEVWRUwpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfbGV2ZWwoY2xzLCBjb25uKToKKyAgICAgICAgbG9nZ2VyID0gbXVsdGlwcm9jZXNzaW5nLmdldF9sb2dnZXIoKQorICAgICAgICBjb25uLnNlbmQobG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkpCisKKyAgICBkZWYgdGVzdF9sZXZlbChzZWxmKToKKyAgICAgICAgTEVWRUwxID0gMzIKKyAgICAgICAgTEVWRUwyID0gMzcKKworICAgICAgICBsb2dnZXIgPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X2xvZ2dlcigpCisgICAgICAgIHJvb3RfbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgICAgICByb290X2xldmVsID0gcm9vdF9sb2dnZXIubGV2ZWwKKworICAgICAgICByZWFkZXIsIHdyaXRlciA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKGR1cGxleD1GYWxzZSkKKworICAgICAgICBsb2dnZXIuc2V0TGV2ZWwoTEVWRUwxKQorICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X2xldmVsLCBhcmdzPSh3cml0ZXIsKSkKKyAgICAgICAgcC5kYWVtb24gPSBUcnVlCisgICAgICAgIHAuc3RhcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExFVkVMMSwgcmVhZGVyLnJlY3YoKSkKKworICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5OT1RTRVQpCisgICAgICAgIHJvb3RfbG9nZ2VyLnNldExldmVsKExFVkVMMikKKyAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fdGVzdF9sZXZlbCwgYXJncz0od3JpdGVyLCkpCisgICAgICAgIHAuZGFlbW9uID0gVHJ1ZQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMRVZFTDIsIHJlYWRlci5yZWN2KCkpCisKKyAgICAgICAgcm9vdF9sb2dnZXIuc2V0TGV2ZWwocm9vdF9sZXZlbCkKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxldmVsPUxPR19MRVZFTCkKKworCisjIGNsYXNzIF9UZXN0TG9nZ2luZ1Byb2Nlc3NOYW1lKEJhc2VUZXN0Q2FzZSk6CisjCisjICAgICBkZWYgaGFuZGxlKHNlbGYsIHJlY29yZCk6CisjICAgICAgICAgYXNzZXJ0IHJlY29yZC5wcm9jZXNzTmFtZSA9PSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkubmFtZQorIyAgICAgICAgIHNlbGYuX19oYW5kbGVkID0gVHJ1ZQorIworIyAgICAgZGVmIHRlc3RfbG9nZ2luZyhzZWxmKToKKyMgICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5IYW5kbGVyKCkKKyMgICAgICAgICBoYW5kbGVyLmhhbmRsZSA9IHNlbGYuaGFuZGxlCisjICAgICAgICAgc2VsZi5fX2hhbmRsZWQgPSBGYWxzZQorIyAgICAgICAgICMgQnlwYXNzIGdldExvZ2dlcigpIGFuZCBzaWRlLWVmZmVjdHMKKyMgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlckNsYXNzKCkoCisjICAgICAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnRlc3QuVGVzdExvZ2dpbmdQcm9jZXNzTmFtZScpCisjICAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKyMgICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gRmFsc2UKKyMKKyMgICAgICAgICBsb2dnZXIud2FybignZm9vJykKKyMgICAgICAgICBhc3NlcnQgc2VsZi5fX2hhbmRsZWQKKworIworIyBDaGVjayB0aGF0IFByb2Nlc3Muam9pbigpIHJldHJpZXMgaWYgb3Mud2FpdHBpZCgpIGZhaWxzIHdpdGggRUlOVFIKKyMKKworY2xhc3MgX1Rlc3RQb2xsRWludHIoQmFzZVRlc3RDYXNlKToKKworICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9raWxsZXIoY2xzLCBwaWQpOgorICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdVU1IxKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICdTSUdVU1IxJyksICdyZXF1aXJlcyBTSUdVU1IxJykKKyAgICBkZWYgdGVzdF9wb2xsX2VpbnRyKHNlbGYpOgorICAgICAgICBnb3Rfc2lnbmFsID0gW0ZhbHNlXQorICAgICAgICBkZWYgcmVjb3JkKCphcmdzKToKKyAgICAgICAgICAgIGdvdF9zaWduYWxbMF0gPSBUcnVlCisgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCisgICAgICAgIG9sZGhhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdVU1IxLCByZWNvcmQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtpbGxlciA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fa2lsbGVyLCBhcmdzPShwaWQsKSkKKyAgICAgICAgICAgIGtpbGxlci5zdGFydCgpCisgICAgICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD10aW1lLnNsZWVwLCBhcmdzPSgxLCkpCisgICAgICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgICAgIHAuam9pbigpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ290X3NpZ25hbFswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5leGl0Y29kZSwgMCkKKyAgICAgICAgICAgIGtpbGxlci5qb2luKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1VTUjEsIG9sZGhhbmRsZXIpCisKKyMKKyMgVGVzdCB0byB2ZXJpZnkgaGFuZGxlIHZlcmlmaWNhdGlvbiwgc2VlIGlzc3VlIDMzMjEKKyMKKworY2xhc3MgVGVzdEludmFsaWRIYW5kbGUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHVuaXR0ZXN0LnNraXBJZihXSU4zMiwgInNraXBwZWQgb24gV2luZG93cyIpCisgICAgZGVmIHRlc3RfaW52YWxpZF9oYW5kbGVzKHNlbGYpOgorICAgICAgICBjb25uID0gX211bHRpcHJvY2Vzc2luZy5Db25uZWN0aW9uKDQ0OTc3NjA4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBjb25uLnBvbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIF9tdWx0aXByb2Nlc3NpbmcuQ29ubmVjdGlvbiwgLTEpCisKKyMKKyMgRnVuY3Rpb25zIHVzZWQgdG8gY3JlYXRlIHRlc3QgY2FzZXMgZnJvbSB0aGUgYmFzZSBvbmVzIGluIHRoaXMgbW9kdWxlCisjCisKK2RlZiBnZXRfYXR0cmlidXRlcyhTb3VyY2UsIG5hbWVzKToKKyAgICBkID0ge30KKyAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgb2JqID0gZ2V0YXR0cihTb3VyY2UsIG5hbWUpCisgICAgICAgIGlmIHR5cGUob2JqKSA9PSB0eXBlKGdldF9hdHRyaWJ1dGVzKToKKyAgICAgICAgICAgIG9iaiA9IHN0YXRpY21ldGhvZChvYmopCisgICAgICAgIGRbbmFtZV0gPSBvYmoKKyAgICByZXR1cm4gZAorCitkZWYgY3JlYXRlX3Rlc3RfY2FzZXMoTWl4aW4sIHR5cGUpOgorICAgIHJlc3VsdCA9IHt9CisgICAgZ2xvYiA9IGdsb2JhbHMoKQorICAgIFR5cGUgPSB0eXBlLmNhcGl0YWxpemUoKQorCisgICAgZm9yIG5hbWUgaW4gZ2xvYi5rZXlzKCk6CisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnX1Rlc3QnKToKKyAgICAgICAgICAgIGJhc2UgPSBnbG9iW25hbWVdCisgICAgICAgICAgICBpZiB0eXBlIGluIGJhc2UuQUxMT1dFRF9UWVBFUzoKKyAgICAgICAgICAgICAgICBuZXduYW1lID0gJ1dpdGgnICsgVHlwZSArIG5hbWVbMTpdCisgICAgICAgICAgICAgICAgY2xhc3MgVGVtcChiYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSwgTWl4aW4pOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgcmVzdWx0W25ld25hbWVdID0gVGVtcAorICAgICAgICAgICAgICAgIFRlbXAuX19uYW1lX18gPSBuZXduYW1lCisgICAgICAgICAgICAgICAgVGVtcC5fX21vZHVsZV9fID0gTWl4aW4uX19tb2R1bGVfXworICAgIHJldHVybiByZXN1bHQKKworIworIyBDcmVhdGUgdGVzdCBjYXNlcworIworCitjbGFzcyBQcm9jZXNzZXNNaXhpbihvYmplY3QpOgorICAgIFRZUEUgPSAncHJvY2Vzc2VzJworICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcworICAgIGxvY2FscygpLnVwZGF0ZShnZXRfYXR0cmlidXRlcyhtdWx0aXByb2Nlc3NpbmcsICgKKyAgICAgICAgJ1F1ZXVlJywgJ0xvY2snLCAnUkxvY2snLCAnU2VtYXBob3JlJywgJ0JvdW5kZWRTZW1hcGhvcmUnLAorICAgICAgICAnQ29uZGl0aW9uJywgJ0V2ZW50JywgJ1ZhbHVlJywgJ0FycmF5JywgJ1Jhd1ZhbHVlJywKKyAgICAgICAgJ1Jhd0FycmF5JywgJ2N1cnJlbnRfcHJvY2VzcycsICdhY3RpdmVfY2hpbGRyZW4nLCAnUGlwZScsCisgICAgICAgICdjb25uZWN0aW9uJywgJ0pvaW5hYmxlUXVldWUnLCAnUG9vbCcKKyAgICAgICAgKSkpCisKK3Rlc3RjYXNlc19wcm9jZXNzZXMgPSBjcmVhdGVfdGVzdF9jYXNlcyhQcm9jZXNzZXNNaXhpbiwgdHlwZT0ncHJvY2Vzc2VzJykKK2dsb2JhbHMoKS51cGRhdGUodGVzdGNhc2VzX3Byb2Nlc3NlcykKKworCitjbGFzcyBNYW5hZ2VyTWl4aW4ob2JqZWN0KToKKyAgICBUWVBFID0gJ21hbmFnZXInCisgICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCisgICAgbWFuYWdlciA9IG9iamVjdC5fX25ld19fKG11bHRpcHJvY2Vzc2luZy5tYW5hZ2Vycy5TeW5jTWFuYWdlcikKKyAgICBsb2NhbHMoKS51cGRhdGUoZ2V0X2F0dHJpYnV0ZXMobWFuYWdlciwgKAorICAgICAgICAnUXVldWUnLCAnTG9jaycsICdSTG9jaycsICdTZW1hcGhvcmUnLCAnQm91bmRlZFNlbWFwaG9yZScsCisgICAgICAgJ0NvbmRpdGlvbicsICdFdmVudCcsICdWYWx1ZScsICdBcnJheScsICdsaXN0JywgJ2RpY3QnLAorICAgICAgICAnTmFtZXNwYWNlJywgJ0pvaW5hYmxlUXVldWUnLCAnUG9vbCcKKyAgICAgICAgKSkpCisKK3Rlc3RjYXNlc19tYW5hZ2VyID0gY3JlYXRlX3Rlc3RfY2FzZXMoTWFuYWdlck1peGluLCB0eXBlPSdtYW5hZ2VyJykKK2dsb2JhbHMoKS51cGRhdGUodGVzdGNhc2VzX21hbmFnZXIpCisKKworY2xhc3MgVGhyZWFkc01peGluKG9iamVjdCk6CisgICAgVFlQRSA9ICd0aHJlYWRzJworICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUHJvY2VzcworICAgIGxvY2FscygpLnVwZGF0ZShnZXRfYXR0cmlidXRlcyhtdWx0aXByb2Nlc3NpbmcuZHVtbXksICgKKyAgICAgICAgJ1F1ZXVlJywgJ0xvY2snLCAnUkxvY2snLCAnU2VtYXBob3JlJywgJ0JvdW5kZWRTZW1hcGhvcmUnLAorICAgICAgICAnQ29uZGl0aW9uJywgJ0V2ZW50JywgJ1ZhbHVlJywgJ0FycmF5JywgJ2N1cnJlbnRfcHJvY2VzcycsCisgICAgICAgICdhY3RpdmVfY2hpbGRyZW4nLCAnUGlwZScsICdjb25uZWN0aW9uJywgJ2RpY3QnLCAnbGlzdCcsCisgICAgICAgICdOYW1lc3BhY2UnLCAnSm9pbmFibGVRdWV1ZScsICdQb29sJworICAgICAgICApKSkKKwordGVzdGNhc2VzX3RocmVhZHMgPSBjcmVhdGVfdGVzdF9jYXNlcyhUaHJlYWRzTWl4aW4sIHR5cGU9J3RocmVhZHMnKQorZ2xvYmFscygpLnVwZGF0ZSh0ZXN0Y2FzZXNfdGhyZWFkcykKKworY2xhc3MgT3RoZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRPRE86IGFkZCBtb3JlIHRlc3RzIGZvciBkZWxpdmVyL2Fuc3dlciBjaGFsbGVuZ2UuCisgICAgZGVmIHRlc3RfZGVsaXZlcl9jaGFsbGVuZ2VfYXV0aF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBjbGFzcyBfRmFrZUNvbm5lY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiByZWN2X2J5dGVzKHNlbGYsIHNpemUpOgorICAgICAgICAgICAgICAgIHJldHVybiBiJ3NvbWV0aGluZyBib2d1cycKKyAgICAgICAgICAgIGRlZiBzZW5kX2J5dGVzKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobXVsdGlwcm9jZXNzaW5nLkF1dGhlbnRpY2F0aW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLmRlbGl2ZXJfY2hhbGxlbmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBfRmFrZUNvbm5lY3Rpb24oKSwgYidhYmMnKQorCisgICAgZGVmIHRlc3RfYW5zd2VyX2NoYWxsZW5nZV9hdXRoX2ZhaWx1cmUoc2VsZik6CisgICAgICAgIGNsYXNzIF9GYWtlQ29ubmVjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuY291bnQgPSAwCisgICAgICAgICAgICBkZWYgcmVjdl9ieXRlcyhzZWxmLCBzaXplKToKKyAgICAgICAgICAgICAgICBzZWxmLmNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNvdW50ID09IDE6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5DSEFMTEVOR0UKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuY291bnQgPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGInc29tZXRoaW5nIGJvZ3VzJworICAgICAgICAgICAgICAgIHJldHVybiBiJycKKyAgICAgICAgICAgIGRlZiBzZW5kX2J5dGVzKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobXVsdGlwcm9jZXNzaW5nLkF1dGhlbnRpY2F0aW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLmFuc3dlcl9jaGFsbGVuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9GYWtlQ29ubmVjdGlvbigpLCBiJ2FiYycpCisKKyMKKyMgVGVzdCBNYW5hZ2VyLnN0YXJ0KCkvUG9vbC5fX2luaXRfXygpIGluaXRpYWxpemVyIGZlYXR1cmUgLSBzZWUgaXNzdWUgNTU4NQorIworCitkZWYgaW5pdGlhbGl6ZXIobnMpOgorICAgIG5zLnRlc3QgKz0gMQorCitjbGFzcyBUZXN0SW5pdGlhbGl6ZXJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubWdyID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQorICAgICAgICBzZWxmLm5zID0gc2VsZi5tZ3IuTmFtZXNwYWNlKCkKKyAgICAgICAgc2VsZi5ucy50ZXN0ID0gMAorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLm1nci5zaHV0ZG93bigpCisKKyAgICBkZWYgdGVzdF9tYW5hZ2VyX2luaXRpYWxpemVyKHNlbGYpOgorICAgICAgICBtID0gbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzLlN5bmNNYW5hZ2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtLnN0YXJ0LCAxKQorICAgICAgICBtLnN0YXJ0KGluaXRpYWxpemVyLCAoc2VsZi5ucywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubnMudGVzdCwgMSkKKyAgICAgICAgbS5zaHV0ZG93bigpCisKKyAgICBkZWYgdGVzdF9wb29sX2luaXRpYWxpemVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG11bHRpcHJvY2Vzc2luZy5Qb29sLCBpbml0aWFsaXplcj0xKQorICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlBvb2woMSwgaW5pdGlhbGl6ZXIsIChzZWxmLm5zLCkpCisgICAgICAgIHAuY2xvc2UoKQorICAgICAgICBwLmpvaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubnMudGVzdCwgMSkKKworIworIyBJc3N1ZSA1MTU1LCA1MzEzLCA1MzMxOiBUZXN0IHByb2Nlc3MgaW4gcHJvY2Vzc2VzCisjIFZlcmlmaWVzIG9zLmNsb3NlKHN5cy5zdGRpbi5maWxlbm8pIHZzLiBzeXMuc3RkaW4uY2xvc2UoKSBiZWhhdmlvcgorIworCitkZWYgX1RoaXNTdWJQcm9jZXNzKHEpOgorICAgIHRyeToKKyAgICAgICAgaXRlbSA9IHEuZ2V0KGJsb2NrPUZhbHNlKQorICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgcGFzcworCitkZWYgX1Rlc3RQcm9jZXNzKHEpOgorICAgIHF1ZXVlID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKKyAgICBzdWJQcm9jID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PV9UaGlzU3ViUHJvY2VzcywgYXJncz0ocXVldWUsKSkKKyAgICBzdWJQcm9jLmRhZW1vbiA9IFRydWUKKyAgICBzdWJQcm9jLnN0YXJ0KCkKKyAgICBzdWJQcm9jLmpvaW4oKQorCitkZWYgX2FmdW5jKHgpOgorICAgIHJldHVybiB4KngKKworZGVmIHBvb2xfaW5fcHJvY2VzcygpOgorICAgIHBvb2wgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbChwcm9jZXNzZXM9NCkKKyAgICB4ID0gcG9vbC5tYXAoX2FmdW5jLCBbMSwgMiwgMywgNCwgNSwgNiwgN10pCisKK2NsYXNzIF9maWxlX2xpa2Uob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVsZWdhdGUpOgorICAgICAgICBzZWxmLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlCisgICAgICAgIHNlbGYuX3BpZCA9IE5vbmUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjYWNoZShzZWxmKToKKyAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgIyBUaGVyZSBhcmUgbm8gcmFjZSBjb25kaXRpb25zIHNpbmNlIGZvcmsga2VlcHMgb25seSB0aGUgcnVubmluZyB0aHJlYWQKKyAgICAgICAgaWYgcGlkICE9IHNlbGYuX3BpZDoKKyAgICAgICAgICAgIHNlbGYuX3BpZCA9IHBpZAorICAgICAgICAgICAgc2VsZi5fY2FjaGUgPSBbXQorICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGUKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5jYWNoZS5hcHBlbmQoZGF0YSkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgc2VsZi5fZGVsZWdhdGUud3JpdGUoJycuam9pbihzZWxmLmNhY2hlKSkKKyAgICAgICAgc2VsZi5fY2FjaGUgPSBbXQorCitjbGFzcyBUZXN0U3RkaW5CYWRmaWxlZGVzY3JpcHRvcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9xdWV1ZV9pbl9wcm9jZXNzKHNlbGYpOgorICAgICAgICBxdWV1ZSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisgICAgICAgIHByb2MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9X1Rlc3RQcm9jZXNzLCBhcmdzPShxdWV1ZSwpKQorICAgICAgICBwcm9jLnN0YXJ0KCkKKyAgICAgICAgcHJvYy5qb2luKCkKKworICAgIGRlZiB0ZXN0X3Bvb2xfaW5fcHJvY2VzcyhzZWxmKToKKyAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1wb29sX2luX3Byb2Nlc3MpCisgICAgICAgIHAuc3RhcnQoKQorICAgICAgICBwLmpvaW4oKQorCisgICAgZGVmIHRlc3RfZmx1c2hpbmcoc2VsZik6CisgICAgICAgIHNpbyA9IFN0cmluZ0lPKCkKKyAgICAgICAgZmxpa2UgPSBfZmlsZV9saWtlKHNpbykKKyAgICAgICAgZmxpa2Uud3JpdGUoJ2ZvbycpCisgICAgICAgIHByb2MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9bGFtYmRhOiBmbGlrZS5mbHVzaCgpKQorICAgICAgICBmbGlrZS5mbHVzaCgpCisgICAgICAgIGFzc2VydCBzaW8uZ2V0dmFsdWUoKSA9PSAnZm9vJworCisjCisjIFRlc3QgaW50ZXJhY3Rpb24gd2l0aCBzb2NrZXQgdGltZW91dHMgLSBzZWUgSXNzdWUgIzYwNTYKKyMKKworY2xhc3MgVGVzdFRpbWVvdXRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfdGltZW91dChjbHMsIGNoaWxkLCBhZGRyZXNzKToKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBjaGlsZC5zZW5kKDEyMykKKyAgICAgICAgY2hpbGQuY2xvc2UoKQorICAgICAgICBjb25uID0gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ2xpZW50KGFkZHJlc3MpCisgICAgICAgIGNvbm4uc2VuZCg0NTYpCisgICAgICAgIGNvbm4uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgb2xkX3RpbWVvdXQgPSBzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoMC4xKQorICAgICAgICAgICAgcGFyZW50LCBjaGlsZCA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKGR1cGxleD1UcnVlKQorICAgICAgICAgICAgbCA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkxpc3RlbmVyKGZhbWlseT0nQUZfSU5FVCcpCisgICAgICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3Rlc3RfdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShjaGlsZCwgbC5hZGRyZXNzKSkKKyAgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICAgY2hpbGQuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJlbnQucmVjdigpLCAxMjMpCisgICAgICAgICAgICBwYXJlbnQuY2xvc2UoKQorICAgICAgICAgICAgY29ubiA9IGwuYWNjZXB0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5yZWN2KCksIDQ1NikKKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICAgICAgbC5jbG9zZSgpCisgICAgICAgICAgICBwLmpvaW4oMTApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQob2xkX3RpbWVvdXQpCisKKyMKKyMgVGVzdCB3aGF0IGhhcHBlbnMgd2l0aCBubyAiaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJyIKKyMKKworY2xhc3MgVGVzdE5vRm9ya0JvbWIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X25vZm9ya2JvbWIoc2VsZik6CisgICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ21wX2ZvcmtfYm9tYi5weScpCisgICAgICAgIGlmIFdJTjMyOgorICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gdGVzdC5zY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZShuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgb3V0LmRlY29kZSgnYXNjaWknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1J1bnRpbWVFcnJvcicsIGVyci5kZWNvZGUoJ2FzY2lpJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSB0ZXN0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vayhuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTIzJywgb3V0LmRlY29kZSgnYXNjaWknKS5yc3RyaXAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIGVyci5kZWNvZGUoJ2FzY2lpJykpCisKKyMKKyMgSXNzdWUgMTIwOTg6IGNoZWNrIHN5cy5mbGFncyBvZiBjaGlsZCBtYXRjaGVzIHRoYXQgZm9yIHBhcmVudAorIworCitjbGFzcyBUZXN0RmxhZ3ModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBydW5faW5fZ3JhbmRjaGlsZChjbHMsIGNvbm4pOgorICAgICAgICBjb25uLnNlbmQodHVwbGUoc3lzLmZsYWdzKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBydW5faW5fY2hpbGQoY2xzKToKKyAgICAgICAgaW1wb3J0IGpzb24KKyAgICAgICAgciwgdyA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKGR1cGxleD1GYWxzZSkKKyAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1jbHMucnVuX2luX2dyYW5kY2hpbGQsIGFyZ3M9KHcsKSkKKyAgICAgICAgcC5zdGFydCgpCisgICAgICAgIGdyYW5kY2hpbGRfZmxhZ3MgPSByLnJlY3YoKQorICAgICAgICBwLmpvaW4oKQorICAgICAgICByLmNsb3NlKCkKKyAgICAgICAgdy5jbG9zZSgpCisgICAgICAgIGZsYWdzID0gKHR1cGxlKHN5cy5mbGFncyksIGdyYW5kY2hpbGRfZmxhZ3MpCisgICAgICAgIHByaW50KGpzb24uZHVtcHMoZmxhZ3MpKQorCisgICAgZGVmIHRlc3RfZmxhZ3Moc2VsZik6CisgICAgICAgIGltcG9ydCBqc29uLCBzdWJwcm9jZXNzCisgICAgICAgICMgc3RhcnQgY2hpbGQgcHJvY2VzcyB1c2luZyB1bnVzdWFsIGZsYWdzCisgICAgICAgIHByb2cgPSAoJ2Zyb20gdGVzdC50ZXN0X211bHRpcHJvY2Vzc2luZyBpbXBvcnQgVGVzdEZsYWdzOyAnICsKKyAgICAgICAgICAgICAgICAnVGVzdEZsYWdzLnJ1bl9pbl9jaGlsZCgpJykKKyAgICAgICAgZGF0YSA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAnLUUnLCAnLUInLCAnLU8nLCAnLWMnLCBwcm9nXSkKKyAgICAgICAgY2hpbGRfZmxhZ3MsIGdyYW5kY2hpbGRfZmxhZ3MgPSBqc29uLmxvYWRzKGRhdGEuZGVjb2RlKCdhc2NpaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoaWxkX2ZsYWdzLCBncmFuZGNoaWxkX2ZsYWdzKQorCisjCisjIElzc3VlICMxNzU1NTogRm9ya0F3YXJlVGhyZWFkTG9jaworIworCitjbGFzcyBUZXN0Rm9ya0F3YXJlVGhyZWFkTG9jayh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBXZSByZWN1cmlzdmVseSBzdGFydCBwcm9jZXNzZXMuICBJc3N1ZSAjMTc1NTUgbWVhbnQgdGhhdCB0aGUKKyAgICAjIGFmdGVyIGZvcmsgcmVnaXN0cnkgd291bGQgZ2V0IGR1cGxpY2F0ZSBlbnRyaWVzIGZvciB0aGUgc2FtZQorICAgICMgbG9jay4gIFRoZSBzaXplIG9mIHRoZSByZWdpc3RyeSBhdCBnZW5lcmF0aW9uIG4gd2FzIH4yKipuLgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNoaWxkKGNscywgbiwgY29ubik6CisgICAgICAgIGlmIG4gPiAxOgorICAgICAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1jbHMuY2hpbGQsIGFyZ3M9KG4tMSwgY29ubikpCisgICAgICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgICAgIHAuam9pbigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb25uLnNlbmQobGVuKHV0aWwuX2FmdGVyZm9ya19yZWdpc3RyeSkpCisgICAgICAgIGNvbm4uY2xvc2UoKQorCisgICAgZGVmIHRlc3RfbG9jayhzZWxmKToKKyAgICAgICAgciwgdyA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKEZhbHNlKQorICAgICAgICBsID0gdXRpbC5Gb3JrQXdhcmVUaHJlYWRMb2NrKCkKKyAgICAgICAgb2xkX3NpemUgPSBsZW4odXRpbC5fYWZ0ZXJmb3JrX3JlZ2lzdHJ5KQorICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXNlbGYuY2hpbGQsIGFyZ3M9KDUsIHcpKQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgbmV3X3NpemUgPSByLnJlY3YoKQorICAgICAgICBwLmpvaW4oKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChuZXdfc2l6ZSwgb2xkX3NpemUpCisKKyMKKyMKKyMKKwordGVzdGNhc2VzX290aGVyID0gW090aGVyVGVzdCwgVGVzdEludmFsaWRIYW5kbGUsIFRlc3RJbml0aWFsaXplcnMsCisgICAgICAgICAgICAgICAgICAgVGVzdFN0ZGluQmFkZmlsZWRlc2NyaXB0b3IsIFRlc3RUaW1lb3V0cywgVGVzdE5vRm9ya0JvbWIsCisgICAgICAgICAgICAgICAgICAgVGVzdEZsYWdzLCBUZXN0Rm9ya0F3YXJlVGhyZWFkTG9ja10KKworIworIworIworCitkZWYgdGVzdF9tYWluKHJ1bj1Ob25lKToKKyAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgibGludXgiKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9jayA9IG11bHRpcHJvY2Vzc2luZy5STG9jaygpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk9TRXJyb3IgcmFpc2VzIG9uIFJMb2NrIGNyZWF0aW9uLCBzZWUgaXNzdWUgMzExMSEiKQorCisgICAgY2hlY2tfZW5vdWdoX3NlbWFwaG9yZXMoKQorCisgICAgaWYgcnVuIGlzIE5vbmU6CisgICAgICAgIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCBhcyBydW4KKworICAgIHV0aWwuZ2V0X3RlbXBfZGlyKCkgICAgICMgY3JlYXRlcyB0ZW1wIGRpcmVjdG9yeSBmb3IgdXNlIGJ5IGFsbCBwcm9jZXNzZXMKKworICAgIG11bHRpcHJvY2Vzc2luZy5nZXRfbG9nZ2VyKCkuc2V0TGV2ZWwoTE9HX0xFVkVMKQorCisgICAgUHJvY2Vzc2VzTWl4aW4ucG9vbCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKDQpCisgICAgVGhyZWFkc01peGluLnBvb2wgPSBtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUG9vbCg0KQorICAgIE1hbmFnZXJNaXhpbi5tYW5hZ2VyLl9faW5pdF9fKCkKKyAgICBNYW5hZ2VyTWl4aW4ubWFuYWdlci5zdGFydCgpCisgICAgTWFuYWdlck1peGluLnBvb2wgPSBNYW5hZ2VyTWl4aW4ubWFuYWdlci5Qb29sKDQpCisKKyAgICB0ZXN0Y2FzZXMgPSAoCisgICAgICAgIHNvcnRlZCh0ZXN0Y2FzZXNfcHJvY2Vzc2VzLnZhbHVlcygpLCBrZXk9bGFtYmRhIHRjOnRjLl9fbmFtZV9fKSArCisgICAgICAgIHNvcnRlZCh0ZXN0Y2FzZXNfdGhyZWFkcy52YWx1ZXMoKSwga2V5PWxhbWJkYSB0Yzp0Yy5fX25hbWVfXykgKworICAgICAgICBzb3J0ZWQodGVzdGNhc2VzX21hbmFnZXIudmFsdWVzKCksIGtleT1sYW1iZGEgdGM6dGMuX19uYW1lX18pICsKKyAgICAgICAgdGVzdGNhc2VzX290aGVyCisgICAgICAgICkKKworICAgIGxvYWRUZXN0c0Zyb21UZXN0Q2FzZSA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZQorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKGxvYWRUZXN0c0Zyb21UZXN0Q2FzZSh0YykgZm9yIHRjIGluIHRlc3RjYXNlcykKKyAgICAjIChuY29naGxhbik6IFdoZXRoZXIgb3Igbm90IHN5cy5leGNfY2xlYXIgaXMgZXhlY3V0ZWQgYnkgdGhlIHRocmVhZGluZworICAgICMgbW9kdWxlIGR1cmluZyB0aGVzZSB0ZXN0cyBpcyBhdCBsZWFzdCBwbGF0Zm9ybSBkZXBlbmRlbnQgYW5kIHBvc3NpYmx5CisgICAgIyBub24tZGV0ZXJtaW5pc3RpYyBvbiBhbnkgZ2l2ZW4gcGxhdGZvcm0uIFNvIHdlIGRvbid0IG1pbmQgaWYgdGhlIGxpc3RlZAorICAgICMgd2FybmluZ3MgYXJlbid0IGFjdHVhbGx5IHJhaXNlZC4KKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKAorICAgICAgICAgICAgKCIuK19fKGdldHxzZXQpc2xpY2VfXyBoYXMgYmVlbiByZW1vdmVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwKKyAgICAgICAgICAgIChyInN5cy5leGNfY2xlYXJcKFwpIG5vdCBzdXBwb3J0ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgcXVpZXQ9VHJ1ZSk6CisgICAgICAgIHJ1bihzdWl0ZSkKKworICAgIFRocmVhZHNNaXhpbi5wb29sLnRlcm1pbmF0ZSgpCisgICAgUHJvY2Vzc2VzTWl4aW4ucG9vbC50ZXJtaW5hdGUoKQorICAgIE1hbmFnZXJNaXhpbi5wb29sLnRlcm1pbmF0ZSgpCisgICAgTWFuYWdlck1peGluLm1hbmFnZXIuc2h1dGRvd24oKQorCisgICAgZGVsIFByb2Nlc3Nlc01peGluLnBvb2wsIFRocmVhZHNNaXhpbi5wb29sLCBNYW5hZ2VyTWl4aW4ucG9vbAorCitkZWYgbWFpbigpOgorICAgIHRlc3RfbWFpbih1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcih2ZXJib3NpdHk9MikucnVuKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbXV0YW50cy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X211dGFudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljMzgxZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X211dGFudHMucHkKQEAgLTAsMCArMSwyOTIgQEAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRFU1RGTgoraW1wb3J0IHJhbmRvbQoraW1wb3J0IG9zCisKKyMgRnJvbSBTRiBidWcgIzQyMjEyMTogIEluc2VjdXJpdGllcyBpbiBkaWN0IGNvbXBhcmlzb24uCisKKyMgU2FmZXR5IG9mIGNvZGUgZG9pbmcgY29tcGFyaXNvbnMgaGFzIGJlZW4gYW4gaGlzdG9yaWNhbCBQeXRob24gd2VhayBzcG90LgorIyBUaGUgcHJvYmxlbSBpcyB0aGF0IGNvbXBhcmlzb24gb2Ygc3RydWN0dXJlcyB3cml0dGVuIGluIEMgKm5hdHVyYWxseSoKKyMgd2FudHMgdG8gaG9sZCBvbiB0byB0aGluZ3MgbGlrZSB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLCBvciAidGhlCisjIGJpZ2dlc3QiIGNvbnRhaW5lZSBzbyBmYXIsIGFjcm9zcyBhIHRyYXZlcnNhbCBvZiB0aGUgY29udGFpbmVyOyBidXQKKyMgY29kZSB0byBkbyBjb250YWluZWUgY29tcGFyaXNvbnMgY2FuIGNhbGwgYmFjayBpbnRvIFB5dGhvbiBhbmQgbXV0YXRlCisjIHRoZSBjb250YWluZXIgaW4gYXJiaXRyYXJ5IHdheXMgd2hpbGUgdGhlIEMgbG9vcCBpcyBpbiBtaWRzdHJlYW0uICBJZiB0aGUKKyMgQyBjb2RlIGlzbid0IGV4dHJlbWVseSBwYXJhbm9pZCBhYm91dCBkaWdnaW5nIHRoaW5ncyBvdXQgb2YgbWVtb3J5IG9uCisjIGVhY2ggdHJpcCwgYW5kIGFydGlmaWNpYWxseSBib29zdGluZyByZWZjb3VudHMgZm9yIHRoZSBkdXJhdGlvbiwgYW55dGhpbmcKKyMgZnJvbSBpbmZpbml0ZSBsb29wcyB0byBPUyBjcmFzaGVzIGNhbiByZXN1bHQgKHllcywgSSB1c2UgV2luZG93cyA8d2luaz4pLgorIworIyBUaGUgb3RoZXIgcHJvYmxlbSBpcyB0aGF0IGNvZGUgZGVzaWduZWQgdG8gcHJvdm9rZSBhIHdlYWtuZXNzIGlzIHVzdWFsbHkKKyMgd2hpdGUtYm94IGNvZGUsIGFuZCBzbyBjYXRjaGVzIG9ubHkgdGhlIHBhcnRpY3VsYXIgdnVsbmVyYWJpbGl0aWVzIHRoZQorIyBhdXRob3Iga25ldyB0byBwcm90ZWN0IGFnYWluc3QuICBGb3IgZXhhbXBsZSwgUHl0aG9uJ3MgbGlzdC5zb3J0KCkgY29kZQorIyB3ZW50IHRocnUgbWFueSBpdGVyYXRpb25zIGFzIG9uZSAibmV3IiB2dWxuZXJhYmlsaXR5IGFmdGVyIGFub3RoZXIgd2FzCisjIGRpc2NvdmVyZWQuCisjCisjIFNvIHRoZSBkaWN0IGNvbXBhcmlzb24gdGVzdCBoZXJlIHVzZXMgYSBibGFjay1ib3ggYXBwcm9hY2ggaW5zdGVhZCwKKyMgZ2VuZXJhdGluZyBkaWN0cyBvZiB2YXJpb3VzIHNpemVzIGF0IHJhbmRvbSwgYW5kIHBlcmZvcm1pbmcgcmFuZG9tCisjIG11dGF0aW9ucyBvbiB0aGVtIGF0IHJhbmRvbSB0aW1lcy4gIFRoaXMgcHJvdmVkIHZlcnkgZWZmZWN0aXZlLAorIyB0cmlnZ2VyaW5nIGF0IGxlYXN0IHNpeCBkaXN0aW5jdCBmYWlsdXJlIG1vZGVzIHRoZSBmaXJzdCAyMCB0aW1lcyBJCisjIHJhbiBpdC4gIEluZGVlZCwgYXQgdGhlIHN0YXJ0LCB0aGUgZHJpdmVyIG5ldmVyIGdvdCBiZXlvbmQgNiBpdGVyYXRpb25zCisjIGJlZm9yZSB0aGUgdGVzdCBkaWVkLgorCisjIFRoZSBkaWN0cyBhcmUgZ2xvYmFsIHRvIG1ha2UgaXQgZWFzeSB0byBtdXRhdGUgdGhhbSBmcm9tIHdpdGhpbiBmdW5jdGlvbnMuCitkaWN0MSA9IHt9CitkaWN0MiA9IHt9CisKKyMgVGhlIGN1cnJlbnQgc2V0IG9mIGtleXMgaW4gZGljdDEgYW5kIGRpY3QyLiAgVGhlc2UgYXJlIG1hdGVyaWFsaXplZCBhcworIyBsaXN0cyB0byBtYWtlIGl0IGVhc3kgdG8gcGljayBhIGRpY3Qga2V5IGF0IHJhbmRvbS4KK2RpY3Qxa2V5cyA9IFtdCitkaWN0MmtleXMgPSBbXQorCisjIEdsb2JhbCBmbGFnIHRlbGxpbmcgbWF5YmVfbXV0YXRlKCkgd2hldGhlciB0byAqY29uc2lkZXIqIG11dGF0aW5nLgorbXV0YXRlID0gMAorCisjIElmIGdsb2JhbCBtdXRhdGUgaXMgdHJ1ZSwgY29uc2lkZXIgbXV0YXRpbmcgYSBkaWN0LiAgTWF5IG9yIG1heSBub3QKKyMgbXV0YXRlIGEgZGljdCBldmVuIGlmIG11dGF0ZSBpcyB0cnVlLiAgSWYgaXQgZG9lcyBkZWNpZGUgdG8gbXV0YXRlIGEKKyMgZGljdCwgaXQgcGlja3Mgb25lIG9mIHtkaWN0MSwgZGljdDJ9IGF0IHJhbmRvbSwgYW5kIGRlbGV0ZXMgYSByYW5kb20KKyMgZW50cnkgZnJvbSBpdDsgb3IsIG1vcmUgcmFyZWx5LCBhZGRzIGEgcmFuZG9tIGVsZW1lbnQuCisKK2RlZiBtYXliZV9tdXRhdGUoKToKKyAgICBnbG9iYWwgbXV0YXRlCisgICAgaWYgbm90IG11dGF0ZToKKyAgICAgICAgcmV0dXJuCisgICAgaWYgcmFuZG9tLnJhbmRvbSgpIDwgMC41OgorICAgICAgICByZXR1cm4KKworICAgIGlmIHJhbmRvbS5yYW5kb20oKSA8IDAuNToKKyAgICAgICAgdGFyZ2V0LCBrZXlzID0gZGljdDEsIGRpY3Qxa2V5cworICAgIGVsc2U6CisgICAgICAgIHRhcmdldCwga2V5cyA9IGRpY3QyLCBkaWN0MmtleXMKKworICAgIGlmIHJhbmRvbS5yYW5kb20oKSA8IDAuMjoKKyAgICAgICAgIyBJbnNlcnQgYSBuZXcga2V5LgorICAgICAgICBtdXRhdGUgPSAwICAgIyBkaXNhYmxlIG11dGF0aW9uIHVudGlsIGtleSBpbnNlcnRlZAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgbmV3a2V5ID0gSG9ycmlkKHJhbmRvbS5yYW5kcmFuZ2UoMTAwKSkKKyAgICAgICAgICAgIGlmIG5ld2tleSBub3QgaW4gdGFyZ2V0OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHRhcmdldFtuZXdrZXldID0gSG9ycmlkKHJhbmRvbS5yYW5kcmFuZ2UoMTAwKSkKKyAgICAgICAga2V5cy5hcHBlbmQobmV3a2V5KQorICAgICAgICBtdXRhdGUgPSAxCisKKyAgICBlbGlmIGtleXM6CisgICAgICAgICMgRGVsZXRlIGEga2V5IGF0IHJhbmRvbS4KKyAgICAgICAgbXV0YXRlID0gMCAgICMgZGlzYWJsZSBtdXRhdGlvbiB1bnRpbCBrZXkgZGVsZXRlZAorICAgICAgICBpID0gcmFuZG9tLnJhbmRyYW5nZShsZW4oa2V5cykpCisgICAgICAgIGtleSA9IGtleXNbaV0KKyAgICAgICAgZGVsIHRhcmdldFtrZXldCisgICAgICAgIGRlbCBrZXlzW2ldCisgICAgICAgIG11dGF0ZSA9IDEKKworIyBBIGhvcnJpZCBjbGFzcyB0aGF0IHRyaWdnZXJzIHJhbmRvbSBtdXRhdGlvbnMgb2YgZGljdDEgYW5kIGRpY3QyIHdoZW4KKyMgaW5zdGFuY2VzIGFyZSBjb21wYXJlZC4KKworY2xhc3MgSG9ycmlkOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpKToKKyAgICAgICAgIyBDb21wYXJpc29uIG91dGNvbWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSBvZiBpLgorICAgICAgICBzZWxmLmkgPSBpCisKKyAgICAgICAgIyBBbiBhcnRpZmljaWFsIGhhc2hjb2RlIGlzIHNlbGVjdGVkIGF0IHJhbmRvbSBzbyB0aGF0IHdlIGRvbid0CisgICAgICAgICMgaGF2ZSBhbnkgc3lzdGVtYXRpYyByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb21wYXJpc29uIG91dGNvbWVzCisgICAgICAgICMgKGJhc2VkIG9uIHNlbGYuaSBhbmQgb3RoZXIuaSkgYW5kIHJlbGF0aXZlIHBvc2l0aW9uIHdpdGhpbiB0aGUKKyAgICAgICAgIyBoYXNoIHZlY3RvciAoYmFzZWQgb24gaGFzaGNvZGUpLgorICAgICAgICBzZWxmLmhhc2hjb2RlID0gcmFuZG9tLnJhbmRyYW5nZSgxMDAwMDAwMDAwKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgcmV0dXJuIHNlbGYuaGFzaGNvZGUKKworICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgbWF5YmVfbXV0YXRlKCkgICAjIFRoZSBwb2ludCBvZiB0aGUgdGVzdC4KKyAgICAgICAgcmV0dXJuIGNtcChzZWxmLmksIG90aGVyLmkpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgbWF5YmVfbXV0YXRlKCkgICAjIFRoZSBwb2ludCBvZiB0aGUgdGVzdC4KKyAgICAgICAgcmV0dXJuIHNlbGYuaSA9PSBvdGhlci5pCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiSG9ycmlkKCVkKSIgJSBzZWxmLmkKKworIyBGaWxsIGRpY3QgZCB3aXRoIG51bWVudHJpZXMgKEhvcnJpZChpKSwgSG9ycmlkKGopKSBrZXktdmFsdWUgcGFpcnMsCisjIHdoZXJlIGkgYW5kIGogYXJlIHNlbGVjdGVkIGF0IHJhbmRvbSBmcm9tIHRoZSBjYW5kaWRhdGVzIGxpc3QuCisjIFJldHVybiBkLmtleXMoKSBhZnRlciBmaWxsaW5nLgorCitkZWYgZmlsbF9kaWN0KGQsIGNhbmRpZGF0ZXMsIG51bWVudHJpZXMpOgorICAgIGQuY2xlYXIoKQorICAgIGZvciBpIGluIHhyYW5nZShudW1lbnRyaWVzKToKKyAgICAgICAgZFtIb3JyaWQocmFuZG9tLmNob2ljZShjYW5kaWRhdGVzKSldID0gXAorICAgICAgICAgICAgSG9ycmlkKHJhbmRvbS5jaG9pY2UoY2FuZGlkYXRlcykpCisgICAgcmV0dXJuIGQua2V5cygpCisKKyMgVGVzdCBvbmUgcGFpciBvZiByYW5kb21seSBnZW5lcmF0ZWQgZGljdHMsIGVhY2ggd2l0aCBuIGVudHJpZXMuCisjIE5vdGUgdGhhdCBkaWN0IGNvbXBhcmlzb24gaXMgdHJpdmlhbCBpZiB0aGV5IGRvbid0IGhhdmUgdGhlIHNhbWUgbnVtYmVyCisjIG9mIGVudGlyZXMgKHRoZW4gdGhlICJzaG9ydGVyIiBkaWN0IGlzIGluc3RhbnRseSBjb25zaWRlcmVkIHRvIGJlIHRoZQorIyBzbWFsbGVyIG9uZSwgd2l0aG91dCBldmVuIGxvb2tpbmcgYXQgdGhlIGVudHJpZXMpLgorCitkZWYgdGVzdF9vbmUobik6CisgICAgZ2xvYmFsIG11dGF0ZSwgZGljdDEsIGRpY3QyLCBkaWN0MWtleXMsIGRpY3Qya2V5cworCisgICAgIyBGaWxsIHRoZSBkaWN0cyB3aXRob3V0IG11dGF0aW5nIHRoZW0uCisgICAgbXV0YXRlID0gMAorICAgIGRpY3Qxa2V5cyA9IGZpbGxfZGljdChkaWN0MSwgcmFuZ2UobiksIG4pCisgICAgZGljdDJrZXlzID0gZmlsbF9kaWN0KGRpY3QyLCByYW5nZShuKSwgbikKKworICAgICMgRW5hYmxlIG11dGF0aW9uLCB0aGVuIGNvbXBhcmUgdGhlIGRpY3RzIHNvIGxvbmcgYXMgdGhleSBoYXZlIHRoZQorICAgICMgc2FtZSBzaXplLgorICAgIG11dGF0ZSA9IDEKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAidHJ5aW5nIHcvIGxlbmd0aHMiLCBsZW4oZGljdDEpLCBsZW4oZGljdDIpLAorICAgIHdoaWxlIGRpY3QxIGFuZCBsZW4oZGljdDEpID09IGxlbihkaWN0Mik6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiLiIsCisgICAgICAgIGlmIHJhbmRvbS5yYW5kb20oKSA8IDAuNToKKyAgICAgICAgICAgIGMgPSBjbXAoZGljdDEsIGRpY3QyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYyA9IGRpY3QxID09IGRpY3QyCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQKKworIyBSdW4gdGVzdF9vbmUgbiB0aW1lcy4gIEF0IHRoZSBzdGFydCAoYmVmb3JlIHRoZSBidWdzIHdlcmUgZml4ZWQpLCAyMAorIyBjb25zZWN1dGl2ZSBydW5zIG9mIHRoaXMgdGVzdCBlYWNoIGJsZXcgdXAgb24gb3IgYmVmb3JlIHRoZSBzaXh0aCB0aW1lCisjIHRlc3Rfb25lIHdhcyBydW4uICBTbyBuIGRvZXNuJ3QgaGF2ZSB0byBiZSBsYXJnZSB0byBnZXQgYW4gaW50ZXJlc3RpbmcKKyMgdGVzdC4KKyMgT1RPSCwgY2FsbGluZyB3aXRoIGxhcmdlIG4gaXMgYWxzbyBpbnRlcmVzdGluZywgdG8gZW5zdXJlIHRoYXQgdGhlIGZpeGVkCisjIGNvZGUgZG9lc24ndCBob2xkIG9uIHRvIHJlZmNvdW50cyAqdG9vKiBsb25nIChpbiB3aGljaCBjYXNlIG1lbW9yeSB3b3VsZAorIyBsZWFrKS4KKworZGVmIHRlc3Qobik6CisgICAgZm9yIGkgaW4geHJhbmdlKG4pOgorICAgICAgICB0ZXN0X29uZShyYW5kb20ucmFuZHJhbmdlKDEsIDEwMCkpCisKKyMgU2VlIGxhc3QgY29tbWVudCBibG9jayBmb3IgY2x1ZXMgYWJvdXQgZ29vZCB2YWx1ZXMgZm9yIG4uCit0ZXN0KDEwMCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQW5vdGhlciBzZWdmYXVsdCBidWcsIGRpc3RpbGxlZCBieSBNaWNoYWVsIEh1ZHNvbiBmcm9tIGEgYy5sLnB5IHBvc3QuCisKK2NsYXNzIENoaWxkOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQpOgorICAgICAgICBzZWxmLl9fZGljdF9fWydwYXJlbnQnXSA9IHBhcmVudAorICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKKyAgICAgICAgc2VsZi5wYXJlbnQuYSA9IDEKKyAgICAgICAgc2VsZi5wYXJlbnQuYiA9IDEKKyAgICAgICAgc2VsZi5wYXJlbnQuYyA9IDEKKyAgICAgICAgc2VsZi5wYXJlbnQuZCA9IDEKKyAgICAgICAgc2VsZi5wYXJlbnQuZSA9IDEKKyAgICAgICAgc2VsZi5wYXJlbnQuZiA9IDEKKyAgICAgICAgc2VsZi5wYXJlbnQuZyA9IDEKKyAgICAgICAgc2VsZi5wYXJlbnQuaCA9IDEKKyAgICAgICAgc2VsZi5wYXJlbnQuaSA9IDEKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5wYXJlbnQsIGF0dHIpCisKK2NsYXNzIFBhcmVudDoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuYSA9IENoaWxkKHNlbGYpCisKKyMgSGFyZCB0byBzYXkgd2hhdCB0aGlzIHdpbGwgcHJpbnQhICBNYXkgdmFyeSBmcm9tIHRpbWUgdG8gdGltZS4gIEJ1dAorIyB3ZSdyZSBzcGVjaWZpY2FsbHkgdHJ5aW5nIHRvIHRlc3QgdGhlIHRwX3ByaW50IHNsb3QgaGVyZSwgYW5kIHRoaXMgaXMKKyMgdGhlIGNsZWFyZXN0IHdheSB0byBkbyBpdC4gIFdlIHByaW50IHRoZSByZXN1bHQgdG8gYSB0ZW1wIGZpbGUgc28gdGhhdAorIyB0aGUgZXhwZWN0ZWQtb3V0cHV0IGZpbGUgZG9lc24ndCBuZWVkIHRvIGNoYW5nZS4KKworZiA9IG9wZW4oVEVTVEZOLCAidyIpCitwcmludCA+PiBmLCBQYXJlbnQoKS5fX2RpY3RfXworZi5jbG9zZSgpCitvcy51bmxpbmsoVEVTVEZOKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBbmQgYW5vdGhlciBjb3JlLWR1bXBlciBmcm9tIE1pY2hhZWwgSHVkc29uLgorCitkaWN0ID0ge30KKworIyBGb3JjZSBkaWN0IHRvIG1hbGxvYyBpdHMgdGFibGUuCitmb3IgaSBpbiByYW5nZSgxLCAxMCk6CisgICAgZGljdFtpXSA9IGkKKworZiA9IG9wZW4oVEVTVEZOLCAidyIpCisKK2NsYXNzIE1hY2hpYXZlbGxpOgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgZGljdC5jbGVhcigpCisKKyAgICAgICAgIyBNaWNoYWVsIHNlejogICJkb2Vzbid0IGNyYXNoIHdpdGhvdXQgdGhpcy4gIGRvbid0IGtub3cgd2h5LiIKKyAgICAgICAgIyBUaW0gc2V6OiAgImx1Y2sgb2YgdGhlIGRyYXc7IGNyYXNoZXMgd2l0aCBvciB3aXRob3V0IGZvciBtZS4iCisgICAgICAgIHByaW50ID4+IGYKKworICAgICAgICByZXR1cm4gcmVwcigibWFjaGlhdmVsbGkiKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gMAorCitkaWN0W01hY2hpYXZlbGxpKCldID0gTWFjaGlhdmVsbGkoKQorCitwcmludCA+PiBmLCBzdHIoZGljdCkKK2YuY2xvc2UoKQorb3MudW5saW5rKFRFU1RGTikKK2RlbCBmLCBkaWN0CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQW5kIGFub3RoZXIgY29yZS1kdW1wZXIgZnJvbSBNaWNoYWVsIEh1ZHNvbi4KKworZGljdCA9IHt9CisKKyMgbGV0J3MgZm9yY2UgZGljdCB0byBtYWxsb2MgaXRzIHRhYmxlCitmb3IgaSBpbiByYW5nZSgxLCAxMCk6CisgICAgZGljdFtpXSA9IGkKKworY2xhc3MgTWFjaGlhdmVsbGkyOgorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBkaWN0LmNsZWFyKCkKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDAKKworZGljdFtNYWNoaWF2ZWxsaTIoKV0gPSBNYWNoaWF2ZWxsaTIoKQorCit0cnk6CisgICAgZGljdFtNYWNoaWF2ZWxsaTIoKV0KK2V4Y2VwdCBLZXlFcnJvcjoKKyAgICBwYXNzCisKK2RlbCBkaWN0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFuZCBhbm90aGVyIGNvcmUtZHVtcGVyIGZyb20gTWljaGFlbCBIdWRzb24uCisKK2RpY3QgPSB7fQorCisjIGxldCdzIGZvcmNlIGRpY3QgdG8gbWFsbG9jIGl0cyB0YWJsZQorZm9yIGkgaW4gcmFuZ2UoMSwgMTApOgorICAgIGRpY3RbaV0gPSBpCisKK2NsYXNzIE1hY2hpYXZlbGxpMzoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaWQpOgorICAgICAgICBzZWxmLmlkID0gaWQKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBzZWxmLmlkID09IG90aGVyLmlkOgorICAgICAgICAgICAgZGljdC5jbGVhcigpCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyglcykiJShzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5pZCkKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDAKKworZGljdFtNYWNoaWF2ZWxsaTMoMSldID0gTWFjaGlhdmVsbGkzKDApCitkaWN0W01hY2hpYXZlbGxpMygyKV0gPSBNYWNoaWF2ZWxsaTMoMCkKKworZiA9IG9wZW4oVEVTVEZOLCAidyIpCit0cnk6CisgICAgdHJ5OgorICAgICAgICBwcmludCA+PiBmLCBkaWN0W01hY2hpYXZlbGxpMygyKV0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHBhc3MKK2ZpbmFsbHk6CisgICAgZi5jbG9zZSgpCisgICAgb3MudW5saW5rKFRFU1RGTikKKworZGVsIGRpY3QKK2RlbCBkaWN0MSwgZGljdDIsIGRpY3Qxa2V5cywgZGljdDJrZXlzCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tdXRleC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X211dGV4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMDA4MGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9tdXRleC5weQpAQCAtMCwwICsxLDM1IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAorCittdXRleCA9IHRlc3QudGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoIm11dGV4IiwgZGVwcmVjYXRlZD1UcnVlKQorCitjbGFzcyBNdXRleFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfbG9ja19hbmRfdW5sb2NrKHNlbGYpOgorCisgICAgICAgIGRlZiBjYWxsZWRfYnlfbXV0ZXgoc29tZV9kYXRhKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29tZV9kYXRhLCAic3BhbSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobS50ZXN0KCksICJtdXRleCBub3QgaGVsZCIpCisgICAgICAgICAgICAjIE5lc3RlZCBsb2NraW5nCisgICAgICAgICAgICBtLmxvY2soY2FsbGVkX2J5X211dGV4MiwgImVnZ3MiKQorCisgICAgICAgIGRlZiBjYWxsZWRfYnlfbXV0ZXgyKHNvbWVfZGF0YSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvbWVfZGF0YSwgImVnZ3MiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0udGVzdCgpLCAibXV0ZXggbm90IGhlbGQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlYWR5X2Zvcl8yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjYWxsZWRfYnlfbXV0ZXgyIGNhbGxlZCB0b28gc29vbiIpCisKKyAgICAgICAgbSA9IG11dGV4Lm11dGV4KCkKKyAgICAgICAgcmVhZF9mb3JfMiA9IEZhbHNlCisgICAgICAgIG0ubG9jayhjYWxsZWRfYnlfbXV0ZXgsICJzcGFtIikKKyAgICAgICAgcmVhZHlfZm9yXzIgPSBUcnVlCisgICAgICAgICMgdW5sb2NrIGJvdGggbG9ja3MKKyAgICAgICAgbS51bmxvY2soKQorICAgICAgICBtLnVubG9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS50ZXN0KCksICJtdXRleCBzdGlsbCBoZWxkIikKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChNdXRleFRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X25ldHJjLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbmV0cmMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc5NTQ1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X25ldHJjLnB5CkBAIC0wLDAgKzEsMTEwIEBACitpbXBvcnQgbmV0cmMsIG9zLCB1bml0dGVzdCwgc3lzLCB0ZXh0d3JhcAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKwordGVtcF9maWxlbmFtZSA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKworY2xhc3MgTmV0cmNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG9zLnVubGluayh0ZW1wX2ZpbGVuYW1lKQorCisgICAgZGVmIG1ha2VfbnJjKHNlbGYsIHRlc3RfZGF0YSk6CisgICAgICAgIHRlc3RfZGF0YSA9IHRleHR3cmFwLmRlZGVudCh0ZXN0X2RhdGEpCisgICAgICAgIG1vZGUgPSAndycKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdjeWd3aW4nOgorICAgICAgICAgICAgbW9kZSArPSAndCcKKyAgICAgICAgd2l0aCBvcGVuKHRlbXBfZmlsZW5hbWUsIG1vZGUpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUodGVzdF9kYXRhKQorICAgICAgICByZXR1cm4gbmV0cmMubmV0cmModGVtcF9maWxlbmFtZSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHQoc2VsZik6CisgICAgICAgIG5yYyA9IHNlbGYubWFrZV9ucmMoIiIiXAorICAgICAgICAgICAgbWFjaGluZSBob3N0MS5kb21haW4uY29tIGxvZ2luIGxvZzEgcGFzc3dvcmQgcGFzczEgYWNjb3VudCBhY2N0MQorICAgICAgICAgICAgZGVmYXVsdCBsb2dpbiBsb2cyIHBhc3N3b3JkIHBhc3MyCisgICAgICAgICAgICAiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnJjLmhvc3RzWydob3N0MS5kb21haW4uY29tJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdsb2cxJywgJ2FjY3QxJywgJ3Bhc3MxJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnJjLmhvc3RzWydkZWZhdWx0J10sICgnbG9nMicsIE5vbmUsICdwYXNzMicpKQorCisgICAgZGVmIHRlc3RfbWFjcm9zKHNlbGYpOgorICAgICAgICBucmMgPSBzZWxmLm1ha2VfbnJjKCIiIlwKKyAgICAgICAgICAgIG1hY2RlZiBtYWNybzEKKyAgICAgICAgICAgIGxpbmUxCisgICAgICAgICAgICBsaW5lMgorCisgICAgICAgICAgICBtYWNkZWYgbWFjcm8yCisgICAgICAgICAgICBsaW5lMworICAgICAgICAgICAgbGluZTQKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucmMubWFjcm9zLCB7J21hY3JvMSc6IFsnbGluZTFcbicsICdsaW5lMlxuJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYWNybzInOiBbJ2xpbmUzXG4nLCAnbGluZTRcbiddfSkKKworICAgIGRlZiBfdGVzdF9wYXNzd29yZHMoc2VsZiwgbnJjLCBwYXNzd2QpOgorICAgICAgICBucmMgPSBzZWxmLm1ha2VfbnJjKG5yYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucmMuaG9zdHNbJ2hvc3QuZG9tYWluLmNvbSddLCAoJ2xvZycsICdhY2N0JywgcGFzc3dkKSkKKworICAgIGRlZiB0ZXN0X3Bhc3N3b3JkX3dpdGhfbGVhZGluZ19oYXNoKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3Bhc3N3b3JkcygiIiJcCisgICAgICAgICAgICBtYWNoaW5lIGhvc3QuZG9tYWluLmNvbSBsb2dpbiBsb2cgcGFzc3dvcmQgI3Bhc3MgYWNjb3VudCBhY2N0CisgICAgICAgICAgICAiIiIsICcjcGFzcycpCisKKyAgICBkZWYgdGVzdF9wYXNzd29yZF93aXRoX3RyYWlsaW5nX2hhc2goc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcGFzc3dvcmRzKCIiIlwKKyAgICAgICAgICAgIG1hY2hpbmUgaG9zdC5kb21haW4uY29tIGxvZ2luIGxvZyBwYXNzd29yZCBwYXNzIyBhY2NvdW50IGFjY3QKKyAgICAgICAgICAgICIiIiwgJ3Bhc3MjJykKKworICAgIGRlZiB0ZXN0X3Bhc3N3b3JkX3dpdGhfaW50ZXJuYWxfaGFzaChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9wYXNzd29yZHMoIiIiXAorICAgICAgICAgICAgbWFjaGluZSBob3N0LmRvbWFpbi5jb20gbG9naW4gbG9nIHBhc3N3b3JkIHBhI3NzIGFjY291bnQgYWNjdAorICAgICAgICAgICAgIiIiLCAncGEjc3MnKQorCisgICAgZGVmIF90ZXN0X2NvbW1lbnQoc2VsZiwgbnJjLCBwYXNzd2Q9J3Bhc3MnKToKKyAgICAgICAgbnJjID0gc2VsZi5tYWtlX25yYyhucmMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnJjLmhvc3RzWydmb28uZG9tYWluLmNvbSddLCAoJ2JhcicsIE5vbmUsIHBhc3N3ZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnJjLmhvc3RzWydiYXIuZG9tYWluLmNvbSddLCAoJ2ZvbycsIE5vbmUsICdwYXNzJykpCisKKyAgICBkZWYgdGVzdF9jb21tZW50X2JlZm9yZV9tYWNoaW5lX2xpbmUoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfY29tbWVudCgiIiJcCisgICAgICAgICAgICAjIGNvbW1lbnQKKyAgICAgICAgICAgIG1hY2hpbmUgZm9vLmRvbWFpbi5jb20gbG9naW4gYmFyIHBhc3N3b3JkIHBhc3MKKyAgICAgICAgICAgIG1hY2hpbmUgYmFyLmRvbWFpbi5jb20gbG9naW4gZm9vIHBhc3N3b3JkIHBhc3MKKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2NvbW1lbnRfYmVmb3JlX21hY2hpbmVfbGluZV9ub19zcGFjZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9jb21tZW50KCIiIlwKKyAgICAgICAgICAgICNjb21tZW50CisgICAgICAgICAgICBtYWNoaW5lIGZvby5kb21haW4uY29tIGxvZ2luIGJhciBwYXNzd29yZCBwYXNzCisgICAgICAgICAgICBtYWNoaW5lIGJhci5kb21haW4uY29tIGxvZ2luIGZvbyBwYXNzd29yZCBwYXNzCisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9jb21tZW50X2JlZm9yZV9tYWNoaW5lX2xpbmVfaGFzaF9vbmx5KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2NvbW1lbnQoIiIiXAorICAgICAgICAgICAgIworICAgICAgICAgICAgbWFjaGluZSBmb28uZG9tYWluLmNvbSBsb2dpbiBiYXIgcGFzc3dvcmQgcGFzcworICAgICAgICAgICAgbWFjaGluZSBiYXIuZG9tYWluLmNvbSBsb2dpbiBmb28gcGFzc3dvcmQgcGFzcworICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfY29tbWVudF9hdF9lbmRfb2ZfbWFjaGluZV9saW5lKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2NvbW1lbnQoIiIiXAorICAgICAgICAgICAgbWFjaGluZSBmb28uZG9tYWluLmNvbSBsb2dpbiBiYXIgcGFzc3dvcmQgcGFzcyAjIGNvbW1lbnQKKyAgICAgICAgICAgIG1hY2hpbmUgYmFyLmRvbWFpbi5jb20gbG9naW4gZm9vIHBhc3N3b3JkIHBhc3MKKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2NvbW1lbnRfYXRfZW5kX29mX21hY2hpbmVfbGluZV9ub19zcGFjZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9jb21tZW50KCIiIlwKKyAgICAgICAgICAgIG1hY2hpbmUgZm9vLmRvbWFpbi5jb20gbG9naW4gYmFyIHBhc3N3b3JkIHBhc3MgI2NvbW1lbnQKKyAgICAgICAgICAgIG1hY2hpbmUgYmFyLmRvbWFpbi5jb20gbG9naW4gZm9vIHBhc3N3b3JkIHBhc3MKKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2NvbW1lbnRfYXRfZW5kX29mX21hY2hpbmVfbGluZV9wYXNzX2hhc19oYXNoKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2NvbW1lbnQoIiIiXAorICAgICAgICAgICAgbWFjaGluZSBmb28uZG9tYWluLmNvbSBsb2dpbiBiYXIgcGFzc3dvcmQgI3Bhc3MgI2NvbW1lbnQKKyAgICAgICAgICAgIG1hY2hpbmUgYmFyLmRvbWFpbi5jb20gbG9naW4gZm9vIHBhc3N3b3JkIHBhc3MKKyAgICAgICAgICAgICIiIiwgJyNwYXNzJykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChOZXRyY1Rlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9uZXcucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9uZXcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0YjNkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X25ldy5weQpAQCAtMCwwICsxLDE2MyBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHN5cworbmV3ID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ25ldycsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKworY2xhc3MgTmV3VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc3BhbShzZWxmKToKKyAgICAgICAgY2xhc3MgRWdnczoKKyAgICAgICAgICAgIGRlZiBnZXRfeW9sa3Moc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYueW9sa3MKKworICAgICAgICBtID0gbmV3Lm1vZHVsZSgnU3BhbScpCisgICAgICAgIG0uRWdncyA9IEVnZ3MKKyAgICAgICAgc3lzLm1vZHVsZXNbJ1NwYW0nXSA9IG0KKyAgICAgICAgaW1wb3J0IFNwYW0KKworICAgICAgICBkZWYgZ2V0X21vcmVfeW9sa3Moc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi55b2xrcyArIDMKKworICAgICAgICAjIG5ldy5jbGFzc29iaigpCisgICAgICAgIEMgPSBuZXcuY2xhc3NvYmooJ1NwYW0nLCAoU3BhbS5FZ2dzLCksIHsnZ2V0X21vcmVfeW9sa3MnOiBnZXRfbW9yZV95b2xrc30pCisKKyAgICAgICAgIyBuZXcuaW5zdGFuY2UoKQorICAgICAgICBjID0gbmV3Lmluc3RhbmNlKEMsIHsneW9sa3MnOiAzfSkKKworICAgICAgICBvID0gbmV3Lmluc3RhbmNlKEMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5fX2RpY3RfXywge30sICJuZXcgX19kaWN0X18gc2hvdWxkIGJlIGVtcHR5IikKKyAgICAgICAgZGVsIG8KKyAgICAgICAgbyA9IG5ldy5pbnN0YW5jZShDLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8uX19kaWN0X18sIHt9LCAibmV3IF9fZGljdF9fIHNob3VsZCBiZSBlbXB0eSIpCisgICAgICAgIGRlbCBvCisKKyAgICAgICAgZGVmIGJyZWFrX3lvbGtzKHNlbGYpOgorICAgICAgICAgICAgc2VsZi55b2xrcyA9IHNlbGYueW9sa3MgLSAyCisKKyAgICAgICAgIyBuZXcuaW5zdGFuY2VtZXRob2QoKQorICAgICAgICBpbSA9IG5ldy5pbnN0YW5jZW1ldGhvZChicmVha195b2xrcywgYywgQykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZ2V0X3lvbGtzKCksIDMsCisgICAgICAgICAgICAnQnJva2VuIGNhbGwgb2YgaGFuZC1jcmFmdGVkIGNsYXNzIGluc3RhbmNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmdldF9tb3JlX3lvbGtzKCksIDYsCisgICAgICAgICAgICAnQnJva2VuIGNhbGwgb2YgaGFuZC1jcmFmdGVkIGNsYXNzIGluc3RhbmNlJykKKworICAgICAgICBpbSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5nZXRfeW9sa3MoKSwgMSwKKyAgICAgICAgICAgICdCcm9rZW4gY2FsbCBvZiBoYW5kLWNyYWZ0ZWQgaW5zdGFuY2UgbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmdldF9tb3JlX3lvbGtzKCksIDQsCisgICAgICAgICAgICAnQnJva2VuIGNhbGwgb2YgaGFuZC1jcmFmdGVkIGluc3RhbmNlIG1ldGhvZCcpCisKKyAgICAgICAgaW0gPSBuZXcuaW5zdGFuY2VtZXRob2QoYnJlYWtfeW9sa3MsIGMpCisgICAgICAgIGltKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmdldF95b2xrcygpLCAtMSkKKworICAgICAgICAjIFZlcmlmeSB0aGF0IGRhbmdlcm91cyBpbnN0YW5jZSBtZXRob2QgY3JlYXRpb24gaXMgZm9yYmlkZGVuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbmV3Lmluc3RhbmNlbWV0aG9kLCBicmVha195b2xrcywgTm9uZSkKKworICAgICAgICAjIFZlcmlmeSB0aGF0IGluc3RhbmNlbWV0aG9kKCkgZG9lc24ndCBhbGxvdyBrZXl3b3JkIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBuZXcuaW5zdGFuY2VtZXRob2QsIGJyZWFrX3lvbGtzLCBjLCBrdz0xKQorCisgICAgZGVmIHRlc3Rfc2NvcGUoc2VsZik6CisgICAgICAgICMgSXQncyB1bmNsZWFyIHdoYXQgdGhlIHNlbWFudGljcyBzaG91bGQgYmUgZm9yIGEgY29kZSBvYmplY3QgY29tcGlsZWQKKyAgICAgICAgIyBhdCBtb2R1bGUgc2NvcGUsIGJ1dCBib3VuZCBhbmQgcnVuIGluIGEgZnVuY3Rpb24uICBJbiBDUHl0aG9uLCBgYycgaXMKKyAgICAgICAgIyBnbG9iYWwgKGJ5IGFjY2lkZW50Pykgd2hpbGUgaW4gSnl0aG9uLCBgYycgaXMgbG9jYWwuICBUaGUgaW50ZW50IG9mCisgICAgICAgICMgdGhlIHRlc3QgY2xlYXJseSBpcyB0byBtYWtlIGBjJyBnbG9iYWwsIHNvIGxldCdzIGJlIGV4cGxpY2l0IGFib3V0IGl0LgorICAgICAgICBjb2Rlc3RyID0gJycnCisgICAgICAgIGdsb2JhbCBjCisgICAgICAgIGEgPSAxCisgICAgICAgIGIgPSAyCisgICAgICAgIGMgPSBhICsgYgorICAgICAgICAnJycKKworICAgICAgICBjb2Rlc3RyID0gIlxuIi5qb2luKGwuc3RyaXAoKSBmb3IgbCBpbiBjb2Rlc3RyLnNwbGl0bGluZXMoKSkKKworICAgICAgICBjY29kZSA9IGNvbXBpbGUoY29kZXN0ciwgJzxzdHJpbmc+JywgJ2V4ZWMnKQorICAgICAgICAjIEp5dGhvbiBkb2Vzbid0IGhhdmUgYSBfX2J1aWx0aW5zX18sIHNvIHVzZSBhIHBvcnRhYmxlIGFsdGVybmF0aXZlCisgICAgICAgIGltcG9ydCBfX2J1aWx0aW5fXworICAgICAgICBnID0geydjJzogMCwgJ19fYnVpbHRpbnNfXyc6IF9fYnVpbHRpbl9ffQorCisgICAgICAgICMgdGhpcyB0ZXN0IGNvdWxkIGJlIG1vcmUgcm9idXN0CisgICAgICAgIGZ1bmMgPSBuZXcuZnVuY3Rpb24oY2NvZGUsIGcpCisgICAgICAgIGZ1bmMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdbJ2MnXSwgMywgJ0NvdWxkIG5vdCBjcmVhdGUgYSBwcm9wZXIgZnVuY3Rpb24gb2JqZWN0JykKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICAjIHRlc3QgdGhlIHZhcmlvdXMgZXh0ZW5kZWQgZmxhdm9ycyBvZiBmdW5jdGlvbi5uZXcKKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICBkZWYgZyh5KToKKyAgICAgICAgICAgICAgICByZXR1cm4geCArIHkKKyAgICAgICAgICAgIHJldHVybiBnCisgICAgICAgIGcgPSBmKDQpCisgICAgICAgIG5ldy5mdW5jdGlvbihmLmZ1bmNfY29kZSwge30sICJibGFoIikKKyAgICAgICAgZzIgPSBuZXcuZnVuY3Rpb24oZy5mdW5jX2NvZGUsIHt9LCAiYmxhaCIsICgyLCksIGcuZnVuY19jbG9zdXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcyKCksIDYpCisgICAgICAgIGczID0gbmV3LmZ1bmN0aW9uKGcuZnVuY19jb2RlLCB7fSwgImJsYWgiLCBOb25lLCBnLmZ1bmNfY2xvc3VyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnMyg1KSwgOSkKKyAgICAgICAgZGVmIHRlc3RfY2xvc3VyZShmdW5jLCBjbG9zdXJlLCBleGMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXhjLCBuZXcuZnVuY3Rpb24sIGZ1bmMuZnVuY19jb2RlLCB7fSwgIiIsIE5vbmUsIGNsb3N1cmUpCisKKyAgICAgICAgdGVzdF9jbG9zdXJlKGcsIE5vbmUsIFR5cGVFcnJvcikgIyBpbnZhbGlkIGNsb3N1cmUKKyAgICAgICAgdGVzdF9jbG9zdXJlKGcsICgxLCksIFR5cGVFcnJvcikgIyBub24tY2VsbCBpbiBjbG9zdXJlCisgICAgICAgIHRlc3RfY2xvc3VyZShnLCAoMSwgMSksIFZhbHVlRXJyb3IpICMgY2xvc3VyZSBpcyB3cm9uZyBzaXplCisgICAgICAgIHRlc3RfY2xvc3VyZShmLCBnLmZ1bmNfY2xvc3VyZSwgVmFsdWVFcnJvcikgIyBubyBjbG9zdXJlIG5lZWRlZAorCisgICAgIyBOb3RlOiBKeXRob24gd2lsbCBuZXZlciBoYXZlIG5ldy5jb2RlKCkKKyAgICBpZiBoYXNhdHRyKG5ldywgJ2NvZGUnKToKKyAgICAgICAgZGVmIHRlc3RfY29kZShzZWxmKToKKyAgICAgICAgICAgICMgYm9ndXMgdGVzdCBvZiBuZXcuY29kZSgpCisgICAgICAgICAgICBkZWYgZihhKTogcGFzcworCisgICAgICAgICAgICBjID0gZi5mdW5jX2NvZGUKKyAgICAgICAgICAgIGFyZ2NvdW50ID0gYy5jb19hcmdjb3VudAorICAgICAgICAgICAgbmxvY2FscyA9IGMuY29fbmxvY2FscworICAgICAgICAgICAgc3RhY2tzaXplID0gYy5jb19zdGFja3NpemUKKyAgICAgICAgICAgIGZsYWdzID0gYy5jb19mbGFncworICAgICAgICAgICAgY29kZXN0cmluZyA9IGMuY29fY29kZQorICAgICAgICAgICAgY29uc3RhbnRzID0gYy5jb19jb25zdHMKKyAgICAgICAgICAgIG5hbWVzID0gYy5jb19uYW1lcworICAgICAgICAgICAgdmFybmFtZXMgPSBjLmNvX3Zhcm5hbWVzCisgICAgICAgICAgICBmaWxlbmFtZSA9IGMuY29fZmlsZW5hbWUKKyAgICAgICAgICAgIG5hbWUgPSBjLmNvX25hbWUKKyAgICAgICAgICAgIGZpcnN0bGluZW5vID0gYy5jb19maXJzdGxpbmVubworICAgICAgICAgICAgbG5vdGFiID0gYy5jb19sbm90YWIKKyAgICAgICAgICAgIGZyZWV2YXJzID0gYy5jb19mcmVldmFycworICAgICAgICAgICAgY2VsbHZhcnMgPSBjLmNvX2NlbGx2YXJzCisKKyAgICAgICAgICAgIGQgPSBuZXcuY29kZShhcmdjb3VudCwgbmxvY2Fscywgc3RhY2tzaXplLCBmbGFncywgY29kZXN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudHMsIG5hbWVzLCB2YXJuYW1lcywgZmlsZW5hbWUsIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RsaW5lbm8sIGxub3RhYiwgZnJlZXZhcnMsIGNlbGx2YXJzKQorCisgICAgICAgICAgICAjIHRlc3QgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgdmVyc2lvbiB3aXRoIG5vIGZyZWV2YXJzIG9yIGNlbGx2YXJzCisgICAgICAgICAgICBkID0gbmV3LmNvZGUoYXJnY291bnQsIG5sb2NhbHMsIHN0YWNrc2l6ZSwgZmxhZ3MsIGNvZGVzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRzLCBuYW1lcywgdmFybmFtZXMsIGZpbGVuYW1lLCBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0bGluZW5vLCBsbm90YWIpCisKKyAgICAgICAgICAgICMgbmVnYXRpdmUgY29fYXJnY291bnQgdXNlZCB0byB0cmlnZ2VyIGEgU3lzdGVtRXJyb3IKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5ldy5jb2RlLAorICAgICAgICAgICAgICAgIC1hcmdjb3VudCwgbmxvY2Fscywgc3RhY2tzaXplLCBmbGFncywgY29kZXN0cmluZywKKyAgICAgICAgICAgICAgICBjb25zdGFudHMsIG5hbWVzLCB2YXJuYW1lcywgZmlsZW5hbWUsIG5hbWUsIGZpcnN0bGluZW5vLCBsbm90YWIpCisKKyAgICAgICAgICAgICMgbmVnYXRpdmUgY29fbmxvY2FscyB1c2VkIHRvIHRyaWdnZXIgYSBTeXN0ZW1FcnJvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmV3LmNvZGUsCisgICAgICAgICAgICAgICAgYXJnY291bnQsIC1ubG9jYWxzLCBzdGFja3NpemUsIGZsYWdzLCBjb2Rlc3RyaW5nLAorICAgICAgICAgICAgICAgIGNvbnN0YW50cywgbmFtZXMsIHZhcm5hbWVzLCBmaWxlbmFtZSwgbmFtZSwgZmlyc3RsaW5lbm8sIGxub3RhYikKKworICAgICAgICAgICAgIyBub24tc3RyaW5nIGNvX25hbWUgdXNlZCB0byB0cmlnZ2VyIGEgUHlfRmF0YWxFcnJvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBuZXcuY29kZSwKKyAgICAgICAgICAgICAgICBhcmdjb3VudCwgbmxvY2Fscywgc3RhY2tzaXplLCBmbGFncywgY29kZXN0cmluZywKKyAgICAgICAgICAgICAgICBjb25zdGFudHMsICg1LCksIHZhcm5hbWVzLCBmaWxlbmFtZSwgbmFtZSwgZmlyc3RsaW5lbm8sIGxub3RhYikKKworICAgICAgICAgICAgIyBuZXcuY29kZSB1c2VkIHRvIGJlIGEgd2F5IHRvIG11dGF0ZSBhIHR1cGxlLi4uCisgICAgICAgICAgICBjbGFzcyBTKHN0cik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdCA9IChTKCJhYiIpLCkKKyAgICAgICAgICAgIGQgPSBuZXcuY29kZShhcmdjb3VudCwgbmxvY2Fscywgc3RhY2tzaXplLCBmbGFncywgY29kZXN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudHMsIHQsIHZhcm5hbWVzLCBmaWxlbmFtZSwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdGxpbmVubywgbG5vdGFiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodFswXSkgaXMgUywgImVlaywgdHVwbGUgY2hhbmdlZCB1bmRlciB1cyEiKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChOZXdUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9uaXMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9uaXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ0OTU1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X25pcy5weQpAQCAtMCwwICsxLDQ0IEBACitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CisKK25pcyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCduaXMnKQorCitjbGFzcyBOaXNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbWFwcyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWFwcyA9IG5pcy5tYXBzKCkKKyAgICAgICAgZXhjZXB0IG5pcy5lcnJvciwgbXNnOgorICAgICAgICAgICAgIyBOSVMgaXMgcHJvYmFibHkgbm90IGFjdGl2ZSwgc28gdGhpcyB0ZXN0IGlzbid0IHVzZWZ1bAorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIlRlc3QgU2tpcHBlZDoiLCBtc2cKKyAgICAgICAgICAgICMgQ2FuJ3QgcmFpc2UgU2tpcFRlc3QgYXMgcmVncnRlc3Qgb25seSByZWNvZ25pemVzIHRoZSBleGNlcHRpb24KKyAgICAgICAgICAgICMgICBpbXBvcnQgdGltZS4KKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIE9uIHNvbWUgc3lzdGVtcywgdGhpcyBtYXAgaXMgb25seSBhY2Nlc3NpYmxlIHRvIHRoZQorICAgICAgICAgICAgIyBzdXBlciB1c2VyCisgICAgICAgICAgICBtYXBzLnJlbW92ZSgicGFzc3dkLmFkanVuY3QuYnluYW1lIikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZG9uZSA9IDAKKyAgICAgICAgZm9yIG5pc21hcCBpbiBtYXBzOgorICAgICAgICAgICAgbWFwcGluZyA9IG5pcy5jYXQobmlzbWFwKQorICAgICAgICAgICAgZm9yIGssIHYgaW4gbWFwcGluZy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBrOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG5pcy5tYXRjaChrLCBuaXNtYXApICE9IHY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiTklTIG1hdGNoIGZhaWxlZCBmb3Iga2V5IGAlcycgaW4gbWFwIGAlcyciICUgKGssIG5pc21hcCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBqdXN0IHRlc3QgdGhlIG9uZSBrZXksIG90aGVyd2lzZSB0aGlzIHRlc3QgY291bGQgdGFrZSBhCisgICAgICAgICAgICAgICAgICAgICMgdmVyeSBsb25nIHRpbWUKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IDEKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGRvbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTmlzVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNDBhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5CkBAIC0wLDAgKzEsMTAyIEBACitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIG9wZW5fdXJscmVzb3VyY2UKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGh0dHBsaWIgaW1wb3J0IEhUVFBFeGNlcHRpb24KK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworZnJvbSB1bmljb2RlZGF0YSBpbXBvcnQgbm9ybWFsaXplLCB1bmlkYXRhX3ZlcnNpb24KKworVEVTVERBVEFGSUxFID0gIk5vcm1hbGl6YXRpb25UZXN0LnR4dCIKK1RFU1REQVRBVVJMID0gImh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLyIgKyB1bmlkYXRhX3ZlcnNpb24gKyAiL3VjZC8iICsgVEVTVERBVEFGSUxFCisKK2RlZiBjaGVja192ZXJzaW9uKHRlc3RmaWxlKToKKyAgICBoZHIgPSB0ZXN0ZmlsZS5yZWFkbGluZSgpCisgICAgcmV0dXJuIHVuaWRhdGFfdmVyc2lvbiBpbiBoZHIKKworY2xhc3MgUmFuZ2VFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIE5GQyhzdHIpOgorICAgIHJldHVybiBub3JtYWxpemUoIk5GQyIsIHN0cikKKworZGVmIE5GS0Moc3RyKToKKyAgICByZXR1cm4gbm9ybWFsaXplKCJORktDIiwgc3RyKQorCitkZWYgTkZEKHN0cik6CisgICAgcmV0dXJuIG5vcm1hbGl6ZSgiTkZEIiwgc3RyKQorCitkZWYgTkZLRChzdHIpOgorICAgIHJldHVybiBub3JtYWxpemUoIk5GS0QiLCBzdHIpCisKK2RlZiB1bmlzdHIoZGF0YSk6CisgICAgZGF0YSA9IFtpbnQoeCwgMTYpIGZvciB4IGluIGRhdGEuc3BsaXQoIiAiKV0KKyAgICBmb3IgeCBpbiBkYXRhOgorICAgICAgICBpZiB4ID4gc3lzLm1heHVuaWNvZGU6CisgICAgICAgICAgICByYWlzZSBSYW5nZUVycm9yCisgICAgcmV0dXJuIHUiIi5qb2luKFt1bmljaHIoeCkgZm9yIHggaW4gZGF0YV0pCisKK2NsYXNzIE5vcm1hbGl6YXRpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9tYWluKHNlbGYpOgorICAgICAgICBwYXJ0ID0gTm9uZQorICAgICAgICBwYXJ0MV9kYXRhID0ge30KKyAgICAgICAgIyBIaXQgdGhlIGV4Y2VwdGlvbiBlYXJseQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0ZGF0YSA9IG9wZW5fdXJscmVzb3VyY2UoVEVTVERBVEFVUkwsIGNoZWNrX3ZlcnNpb24pCisgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgSFRUUEV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDb3VsZCBub3QgcmV0cmlldmUgIiArIFRFU1REQVRBVVJMKQorICAgICAgICBmb3IgbGluZSBpbiB0ZXN0ZGF0YToKKyAgICAgICAgICAgIGlmICcjJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnNwbGl0KCcjJylbMF0KKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIkBQYXJ0Iik6CisgICAgICAgICAgICAgICAgcGFydCA9IGxpbmUuc3BsaXQoKVswXQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYzEsYzIsYzMsYzQsYzUgPSBbdW5pc3RyKHgpIGZvciB4IGluIGxpbmUuc3BsaXQoJzsnKVs6LTFdXQorICAgICAgICAgICAgZXhjZXB0IFJhbmdlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBTa2lwIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnM7CisgICAgICAgICAgICAgICAgIyB0cnkgYXRsZWFzdCBhZGRpbmcgYzEgaWYgd2UgYXJlIGluIHBhcnQxCisgICAgICAgICAgICAgICAgaWYgcGFydCA9PSAiQFBhcnQxIjoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgYzEgPSB1bmlzdHIobGluZS5zcGxpdCgnOycpWzBdKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgUmFuZ2VFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQxX2RhdGFbYzFdID0gMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgUGVyZm9ybSB0ZXN0cworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMyID09ICBORkMoYzEpID09ICBORkMoYzIpID09ICBORkMoYzMpLCBsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGM0ID09ICBORkMoYzQpID09ICBORkMoYzUpLCBsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMzID09ICBORkQoYzEpID09ICBORkQoYzIpID09ICBORkQoYzMpLCBsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGM1ID09ICBORkQoYzQpID09ICBORkQoYzUpLCBsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGM0ID09IE5GS0MoYzEpID09IE5GS0MoYzIpID09IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORktDKGMzKSA9PSBORktDKGM0KSA9PSBORktDKGM1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGM1ID09IE5GS0QoYzEpID09IE5GS0QoYzIpID09IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORktEKGMzKSA9PSBORktEKGM0KSA9PSBORktEKGM1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lKQorCisgICAgICAgICAgICAjIFJlY29yZCBwYXJ0IDEgZGF0YQorICAgICAgICAgICAgaWYgcGFydCA9PSAiQFBhcnQxIjoKKyAgICAgICAgICAgICAgICBwYXJ0MV9kYXRhW2MxXSA9IDEKKworICAgICAgICAjIFBlcmZvcm0gdGVzdHMgZm9yIGFsbCBvdGhlciBkYXRhCisgICAgICAgIGZvciBjIGluIHJhbmdlKHN5cy5tYXh1bmljb2RlKzEpOgorICAgICAgICAgICAgWCA9IHVuaWNocihjKQorICAgICAgICAgICAgaWYgWCBpbiBwYXJ0MV9kYXRhOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoWCA9PSBORkMoWCkgPT0gTkZEKFgpID09IE5GS0MoWCkgPT0gTkZLRChYKSwgYykKKworICAgIGRlZiB0ZXN0X2J1Z184MzQ2NzYoc2VsZik6CisgICAgICAgICMgQ2hlY2sgZm9yIGJ1ZyA4MzQ2NzYKKyAgICAgICAgbm9ybWFsaXplKCdORkMnLCB1J1x1ZDU1Y1x1YWUwMCcpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChOb3JtYWxpemF0aW9uVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbnRwYXRoLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfbnRwYXRoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxODUyYzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9udHBhdGgucHkKQEAgLTAsMCArMSwyMDMgQEAKK2ltcG9ydCBudHBhdGgKK2ltcG9ydCBvcworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVGVzdEZhaWxlZAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIHRlc3RfZ2VuZXJpY3BhdGgKK2ltcG9ydCB1bml0dGVzdAorCisKK2RlZiB0ZXN0ZXIoZm4sIHdhbnRSZXN1bHQpOgorICAgIGZuID0gZm4ucmVwbGFjZSgiXFwiLCAiXFxcXCIpCisgICAgZ290UmVzdWx0ID0gZXZhbChmbikKKyAgICBpZiB3YW50UmVzdWx0ICE9IGdvdFJlc3VsdDoKKyAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCwgIiVzIHNob3VsZCByZXR1cm46ICVzIGJ1dCByZXR1cm5lZDogJXMiIFwKKyAgICAgICAgICAgICAgJShzdHIoZm4pLCBzdHIod2FudFJlc3VsdCksIHN0cihnb3RSZXN1bHQpKQorCisKK2NsYXNzIFRlc3ROdHBhdGgodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3NwbGl0ZXh0KHNlbGYpOgorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5zcGxpdGV4dCgiZm9vLmV4dCIpJywgKCdmb28nLCAnLmV4dCcpKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5zcGxpdGV4dCgiL2Zvby9mb28uZXh0IiknLCAoJy9mb28vZm9vJywgJy5leHQnKSkKKyAgICAgICAgdGVzdGVyKCdudHBhdGguc3BsaXRleHQoIi5leHQiKScsICgnLmV4dCcsICcnKSkKKyAgICAgICAgdGVzdGVyKCdudHBhdGguc3BsaXRleHQoIlxcZm9vLmV4dFxcZm9vIiknLCAoJ1xcZm9vLmV4dFxcZm9vJywgJycpKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5zcGxpdGV4dCgiZm9vLmV4dFxcIiknLCAoJ2Zvby5leHRcXCcsICcnKSkKKyAgICAgICAgdGVzdGVyKCdudHBhdGguc3BsaXRleHQoIiIpJywgKCcnLCAnJykpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnNwbGl0ZXh0KCJmb28uYmFyLmV4dCIpJywgKCdmb28uYmFyJywgJy5leHQnKSkKKyAgICAgICAgdGVzdGVyKCdudHBhdGguc3BsaXRleHQoInh4L2Zvby5iYXIuZXh0IiknLCAoJ3h4L2Zvby5iYXInLCAnLmV4dCcpKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5zcGxpdGV4dCgieHhcXGZvby5iYXIuZXh0IiknLCAoJ3h4XFxmb28uYmFyJywgJy5leHQnKSkKKyAgICAgICAgdGVzdGVyKCdudHBhdGguc3BsaXRleHQoImM6YS9iXFxjLmQiKScsICgnYzphL2JcXGMnLCAnLmQnKSkKKworICAgIGRlZiB0ZXN0X3NwbGl0ZHJpdmUoc2VsZik6CisgICAgICAgIHRlc3RlcignbnRwYXRoLnNwbGl0ZHJpdmUoImM6XFxmb29cXGJhciIpJywKKyAgICAgICAgICAgICAgICgnYzonLCAnXFxmb29cXGJhcicpKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5zcGxpdGRyaXZlKCJjOi9mb28vYmFyIiknLAorICAgICAgICAgICAgICAgKCdjOicsICcvZm9vL2JhcicpKQorCisgICAgZGVmIHRlc3Rfc3BsaXR1bmMoc2VsZik6CisgICAgICAgIHRlc3RlcignbnRwYXRoLnNwbGl0dW5jKCJcXFxcY29ua3lcXG1vdW50cG9pbnRcXGZvb1xcYmFyIiknLAorICAgICAgICAgICAgICAgKCdcXFxcY29ua3lcXG1vdW50cG9pbnQnLCAnXFxmb29cXGJhcicpKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5zcGxpdHVuYygiLy9jb25reS9tb3VudHBvaW50L2Zvby9iYXIiKScsCisgICAgICAgICAgICAgICAoJy8vY29ua3kvbW91bnRwb2ludCcsICcvZm9vL2JhcicpKQorCisgICAgZGVmIHRlc3Rfc3BsaXQoc2VsZik6CisgICAgICAgIHRlc3RlcignbnRwYXRoLnNwbGl0KCJjOlxcZm9vXFxiYXIiKScsICgnYzpcXGZvbycsICdiYXInKSkKKyAgICAgICAgdGVzdGVyKCdudHBhdGguc3BsaXQoIlxcXFxjb25reVxcbW91bnRwb2ludFxcZm9vXFxiYXIiKScsCisgICAgICAgICAgICAgICAoJ1xcXFxjb25reVxcbW91bnRwb2ludFxcZm9vJywgJ2JhcicpKQorCisgICAgICAgIHRlc3RlcignbnRwYXRoLnNwbGl0KCJjOlxcIiknLCAoJ2M6XFwnLCAnJykpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnNwbGl0KCJcXFxcY29ua3lcXG1vdW50cG9pbnRcXCIpJywKKyAgICAgICAgICAgICAgICgnXFxcXGNvbmt5XFxtb3VudHBvaW50JywgJycpKQorCisgICAgICAgIHRlc3RlcignbnRwYXRoLnNwbGl0KCJjOi8iKScsICgnYzovJywgJycpKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5zcGxpdCgiLy9jb25reS9tb3VudHBvaW50LyIpJywgKCcvL2Nvbmt5L21vdW50cG9pbnQnLCAnJykpCisKKyAgICBkZWYgdGVzdF9pc2FicyhzZWxmKToKKyAgICAgICAgdGVzdGVyKCdudHBhdGguaXNhYnMoImM6XFwiKScsIDEpCisgICAgICAgIHRlc3RlcignbnRwYXRoLmlzYWJzKCJcXFxcY29ua3lcXG1vdW50cG9pbnRcXCIpJywgMSkKKyAgICAgICAgdGVzdGVyKCdudHBhdGguaXNhYnMoIlxcZm9vIiknLCAxKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5pc2FicygiXFxmb29cXGJhciIpJywgMSkKKworICAgIGRlZiB0ZXN0X2NvbW1vbnByZWZpeChzZWxmKToKKyAgICAgICAgdGVzdGVyKCdudHBhdGguY29tbW9ucHJlZml4KFsiL2hvbWUvc3dlbnNvbi9zcGFtIiwgIi9ob21lL3N3ZW4vc3BhbSJdKScsCisgICAgICAgICAgICAgICAiL2hvbWUvc3dlbiIpCisgICAgICAgIHRlc3RlcignbnRwYXRoLmNvbW1vbnByZWZpeChbIlxcaG9tZVxcc3dlblxcc3BhbSIsICJcXGhvbWVcXHN3ZW5cXGVnZ3MiXSknLAorICAgICAgICAgICAgICAgIlxcaG9tZVxcc3dlblxcIikKKyAgICAgICAgdGVzdGVyKCdudHBhdGguY29tbW9ucHJlZml4KFsiL2hvbWUvc3dlbi9zcGFtIiwgIi9ob21lL3N3ZW4vc3BhbSJdKScsCisgICAgICAgICAgICAgICAiL2hvbWUvc3dlbi9zcGFtIikKKworICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CisgICAgICAgIHRlc3RlcignbnRwYXRoLmpvaW4oIiIpJywgJycpCisgICAgICAgIHRlc3RlcignbnRwYXRoLmpvaW4oIiIsICIiLCAiIiknLCAnJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGguam9pbigiYSIpJywgJ2EnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5qb2luKCIvYSIpJywgJy9hJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGguam9pbigiXFxhIiknLCAnXFxhJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGguam9pbigiYToiKScsICdhOicpCisgICAgICAgIHRlc3RlcignbnRwYXRoLmpvaW4oImE6IiwgImIiKScsICdhOmInKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5qb2luKCJhOiIsICIvYiIpJywgJ2E6L2InKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5qb2luKCJhOiIsICJcXGIiKScsICdhOlxcYicpCisgICAgICAgIHRlc3RlcignbnRwYXRoLmpvaW4oImEiLCAiL2IiKScsICcvYicpCisgICAgICAgIHRlc3RlcignbnRwYXRoLmpvaW4oImEiLCAiXFxiIiknLCAnXFxiJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGguam9pbigiYSIsICJiIiwgImMiKScsICdhXFxiXFxjJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGguam9pbigiYVxcIiwgImIiLCAiYyIpJywgJ2FcXGJcXGMnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5qb2luKCJhIiwgImJcXCIsICJjIiknLCAnYVxcYlxcYycpCisgICAgICAgIHRlc3RlcignbnRwYXRoLmpvaW4oImEiLCAiYiIsICJcXGMiKScsICdcXGMnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5qb2luKCJkOlxcIiwgIlxccGxlZXAiKScsICdkOlxccGxlZXAnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5qb2luKCJkOlxcIiwgImEiLCAiYiIpJywgJ2Q6XFxhXFxiJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGguam9pbignYzonLCAnL2EnKSIsICdjOi9hJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGguam9pbignYzovJywgJy9hJykiLCAnYzovYScpCisgICAgICAgIHRlc3RlcigibnRwYXRoLmpvaW4oJ2M6L2EnLCAnL2InKSIsICcvYicpCisgICAgICAgIHRlc3RlcigibnRwYXRoLmpvaW4oJ2M6JywgJ2Q6LycpIiwgJ2Q6LycpCisgICAgICAgIHRlc3RlcigibnRwYXRoLmpvaW4oJ2M6LycsICdkOi8nKSIsICdkOi8nKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5qb2luKCdjOi8nLCAnZDovYS9iJykiLCAnZDovYS9iJykKKworICAgICAgICB0ZXN0ZXIoIm50cGF0aC5qb2luKCcnKSIsICcnKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5qb2luKCcnLCAnJywgJycsICcnLCAnJykiLCAnJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGguam9pbignYScpIiwgJ2EnKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5qb2luKCcnLCAnYScpIiwgJ2EnKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5qb2luKCcnLCAnJywgJycsICcnLCAnYScpIiwgJ2EnKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5qb2luKCdhJywgJycpIiwgJ2FcXCcpCisgICAgICAgIHRlc3RlcigibnRwYXRoLmpvaW4oJ2EnLCAnJywgJycsICcnLCAnJykiLCAnYVxcJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGguam9pbignYVxcJywgJycpIiwgJ2FcXCcpCisgICAgICAgIHRlc3RlcigibnRwYXRoLmpvaW4oJ2FcXCcsICcnLCAnJywgJycsICcnKSIsICdhXFwnKQorCisgICAgZGVmIHRlc3Rfbm9ybXBhdGgoc2VsZik6CisgICAgICAgIHRlc3RlcigibnRwYXRoLm5vcm1wYXRoKCdBLy8vLy8vLi8uLy8vLi8vQicpIiwgcidBXEInKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnQS8uL0InKSIsIHInQVxCJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJ0EvZm9vLy4uL0InKSIsIHInQVxCJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJ0M6QS8vQicpIiwgcidDOkFcQicpCisgICAgICAgIHRlc3RlcigibnRwYXRoLm5vcm1wYXRoKCdEOkEvLi9CJykiLCByJ0Q6QVxCJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJ2U6QS9mb28vLi4vQicpIiwgcidlOkFcQicpCisKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJ0M6Ly8vQS8vQicpIiwgcidDOlxBXEInKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnRDovLy9BLy4vQicpIiwgcidEOlxBXEInKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnZTovLy9BL2Zvby8uLi9CJykiLCByJ2U6XEFcQicpCisKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJy4uJykiLCByJy4uJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJy4nKSIsIHInLicpCisgICAgICAgIHRlc3RlcigibnRwYXRoLm5vcm1wYXRoKCcnKSIsIHInLicpCisgICAgICAgIHRlc3RlcigibnRwYXRoLm5vcm1wYXRoKCcvJykiLCAnXFwnKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnYzovJykiLCAnYzpcXCcpCisgICAgICAgIHRlc3RlcigibnRwYXRoLm5vcm1wYXRoKCcvLi4vLi4vLi8uLicpIiwgJ1xcJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJ2M6Ly4uLy4uLy4uJykiLCAnYzpcXCcpCisgICAgICAgIHRlc3RlcigibnRwYXRoLm5vcm1wYXRoKCcuLi8uLi8uLy4uJykiLCByJy4uXC4uXC4uJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJ0s6Li4vLi4vLi8uLicpIiwgcidLOi4uXC4uXC4uJykKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJ0M6Ly8vL2EvYicpIiwgcidDOlxhXGInKQorICAgICAgICB0ZXN0ZXIoIm50cGF0aC5ub3JtcGF0aCgnLy9tYWNoaW5lL3NoYXJlLy9hL2InKSIsIHInXFxtYWNoaW5lXHNoYXJlXGFcYicpCisKKyAgICAgICAgdGVzdGVyKCJudHBhdGgubm9ybXBhdGgoJ1xcXFwuXFxOVUwnKSIsIHInXFwuXE5VTCcpCisgICAgICAgIHRlc3RlcigibnRwYXRoLm5vcm1wYXRoKCdcXFxcP1xcRDovWFlcXFonKSIsIHInXFw/XEQ6L1hZXFonKQorCisgICAgZGVmIHRlc3RfZXhwYW5kdmFycyhzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgIGVudi5jbGVhcigpCisgICAgICAgICAgICBlbnZbImZvbyJdID0gImJhciIKKyAgICAgICAgICAgIGVudlsie2ZvbyJdID0gImJhejEiCisgICAgICAgICAgICBlbnZbIntmb299Il0gPSAiYmF6MiIKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoImZvbyIpJywgImZvbyIpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCIkZm9vIGJhciIpJywgImJhciBiYXIiKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJHtmb299YmFyIiknLCAiYmFyYmFyIikKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoIiRbZm9vXWJhciIpJywgIiRbZm9vXWJhciIpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCIkYmFyIGJhciIpJywgIiRiYXIgYmFyIikKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoIiQ/YmFyIiknLCAiJD9iYXIiKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJHtmb299YmFyIiknLCAiYmFyYmFyIikKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoIiRmb299YmFyIiknLCAiYmFyfWJhciIpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCIke2ZvbyIpJywgIiR7Zm9vIikKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoIiR7e2Zvb319IiknLCAiYmF6MX0iKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJGZvbyRmb28iKScsICJiYXJiYXIiKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJGJhciRiYXIiKScsICIkYmFyJGJhciIpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCIlZm9vJSBiYXIiKScsICJiYXIgYmFyIikKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoIiVmb28lYmFyIiknLCAiYmFyYmFyIikKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoIiVmb28lJWZvbyUiKScsICJiYXJiYXIiKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJSVmb28lJWZvbyVmb28lIiknLCAiJWZvbyVmb29iYXIiKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJT9iYXIlIiknLCAiJT9iYXIlIikKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoIiVmb28lJWJhciIpJywgImJhciViYXIiKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiXCclZm9vJVwnJWJhciIpJywgIlwnJWZvbyVcJyViYXIiKQorCisgICAgZGVmIHRlc3RfYWJzcGF0aChzZWxmKToKKyAgICAgICAgIyBudHBhdGguYWJzcGF0aCgpIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBzeXN0ZW0gd2l0aCB0aGUgIm50IiBtb2R1bGUKKyAgICAgICAgIyAocmVhc29uYWJseSksIHNvIHdlIHByb3RlY3QgdGhpcyB0ZXN0IHdpdGggImltcG9ydCBudCIuICBUaGlzIGFsbG93cworICAgICAgICAjIHRoZSByZXN0IG9mIHRoZSB0ZXN0cyBmb3IgdGhlIG50cGF0aCBtb2R1bGUgdG8gYmUgcnVuIHRvIGNvbXBsZXRpb24KKyAgICAgICAgIyBvbiBhbnkgcGxhdGZvcm0sIHNpbmNlIG1vc3Qgb2YgdGhlIG1vZHVsZSBpcyBpbnRlbmRlZCB0byBiZSB1c2FibGUKKyAgICAgICAgIyBmcm9tIGFueSBwbGF0Zm9ybS4KKyAgICAgICAgIyBYWFggdGhpcyBuZWVkcyBtb3JlIHRlc3RzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBudAorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIHRoZXJlIGV2ZW4gaWYgd2UgYXJlIG5vdCBvbiBXaW5kb3dzCisgICAgICAgICAgICBudHBhdGguYWJzcGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguYWJzcGF0aCgiQzpcXCIpJywgIkM6XFwiKQorCisgICAgZGVmIHRlc3RfcmVscGF0aChzZWxmKToKKyAgICAgICAgY3VycmVudGRpciA9IG9zLnBhdGguc3BsaXQob3MuZ2V0Y3dkKCkpWy0xXQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJhIiknLCAnYScpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgob3MucGF0aC5hYnNwYXRoKCJhIikpJywgJ2EnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJhL2IiKScsICdhXFxiJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiLi4vYS9iIiknLCAnLi5cXGFcXGInKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJhIiwgIi4uL2IiKScsICcuLlxcJytjdXJyZW50ZGlyKydcXGEnKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJhL2IiLCAiLi4vYyIpJywgJy4uXFwnK2N1cnJlbnRkaXIrJ1xcYVxcYicpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoImEiLCAiYi9jIiknLCAnLi5cXC4uXFxhJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiLy9jb25reS9tb3VudHBvaW50L2EiLCAiLy9jb25reS9tb3VudHBvaW50L2IvYyIpJywgJy4uXFwuLlxcYScpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoImEiLCAiYSIpJywgJy4nKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCIvZm9vL2Jhci9iYXQiLCAiL3gveS96IiknLCAnLi5cXC4uXFwuLlxcZm9vXFxiYXJcXGJhdCcpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoIi9mb28vYmFyL2JhdCIsICIvZm9vL2JhciIpJywgJ2JhdCcpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoIi9mb28vYmFyL2JhdCIsICIvIiknLCAnZm9vXFxiYXJcXGJhdCcpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoIi8iLCAiL2Zvby9iYXIvYmF0IiknLCAnLi5cXC4uXFwuLicpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoIi9mb28vYmFyL2JhdCIsICIveCIpJywgJy4uXFxmb29cXGJhclxcYmF0JykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiL3giLCAiL2Zvby9iYXIvYmF0IiknLCAnLi5cXC4uXFwuLlxceCcpCisgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoIi8iLCAiLyIpJywgJy4nKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCIvYSIsICIvYSIpJywgJy4nKQorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCIvYS9iIiwgIi9hL2IiKScsICcuJykKKyAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiYzovZm9vIiwgIkM6L0ZPTyIpJywgJy4nKQorCisKK2NsYXNzIE50Q29tbW9uVGVzdCh0ZXN0X2dlbmVyaWNwYXRoLkNvbW1vblRlc3QpOgorICAgIHBhdGhtb2R1bGUgPSBudHBhdGgKKyAgICBhdHRyaWJ1dGVzID0gWydyZWxwYXRoJywgJ3NwbGl0dW5jJ10KKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0TnRwYXRoLCBOdENvbW1vblRlc3QpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X29sZF9tYWlsYm94LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfb2xkX21haWxib3gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiYTljMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X29sZF9tYWlsYm94LnB5CkBAIC0wLDAgKzEsMTYwIEBACisjIFRoaXMgc2V0IG9mIHRlc3RzIGV4ZXJjaXNlcyB0aGUgYmFja3dhcmQtY29tcGF0aWJpbGl0eSBjbGFzcworIyBpbiBtYWlsYm94LnB5ICh0aGUgb25lcyB3aXRob3V0IHdyaXRlIHN1cHBvcnQpLgorCitpbXBvcnQgbWFpbGJveAoraW1wb3J0IG9zCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisjIGNsZWFudXAgZWFybGllciB0ZXN0cwordHJ5OgorICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorZXhjZXB0IG9zLmVycm9yOgorICAgIHBhc3MKKworRlJPTV8gPSAiRnJvbSBzb21lLmJvZHlAZHVtbXkuZG9tYWluICBTYXQgSnVsIDI0IDEzOjQzOjM1IDIwMDRcbiIKK0RVTU1ZX01FU1NBR0UgPSAiIiJcCitGcm9tOiBzb21lLmJvZHlAZHVtbXkuZG9tYWluCitUbzogbWVAbXkuZG9tYWluCitTdWJqZWN0OiBTaW1wbGUgVGVzdAorCitUaGlzIGlzIGEgZHVtbXkgbWVzc2FnZS4KKyIiIgorCitjbGFzcyBNYWlsZGlyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIGNyZWF0ZSBhIG5ldyBtYWlsZGlyIG1haWxib3ggdG8gd29yayB3aXRoOgorICAgICAgICBzZWxmLl9kaXIgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgICAgIG9zLm1rZGlyKHNlbGYuX2RpcikKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNlbGYuX2RpciwgImN1ciIpKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCAidG1wIikpCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihzZWxmLl9kaXIsICJuZXciKSkKKyAgICAgICAgc2VsZi5fY291bnRlciA9IDEKKyAgICAgICAgc2VsZi5fbXNnZmlsZXMgPSBbXQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBtYXAob3MudW5saW5rLCBzZWxmLl9tc2dmaWxlcykKKyAgICAgICAgb3Mucm1kaXIob3MucGF0aC5qb2luKHNlbGYuX2RpciwgImN1ciIpKQorICAgICAgICBvcy5ybWRpcihvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCAidG1wIikpCisgICAgICAgIG9zLnJtZGlyKG9zLnBhdGguam9pbihzZWxmLl9kaXIsICJuZXciKSkKKyAgICAgICAgb3Mucm1kaXIoc2VsZi5fZGlyKQorCisgICAgZGVmIGNyZWF0ZU1lc3NhZ2Uoc2VsZiwgZGlyLCBtYm94PUZhbHNlKToKKyAgICAgICAgdCA9IGludCh0aW1lLnRpbWUoKSAlIDEwMDAwMDApCisgICAgICAgIHBpZCA9IHNlbGYuX2NvdW50ZXIKKyAgICAgICAgc2VsZi5fY291bnRlciArPSAxCisgICAgICAgIGZpbGVuYW1lID0gb3MuZXh0c2VwLmpvaW4oKHN0cih0KSwgc3RyKHBpZCksICJteWhvc3RuYW1lIiwgIm15ZG9tYWluIikpCisgICAgICAgIHRtcG5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCAidG1wIiwgZmlsZW5hbWUpCisgICAgICAgIG5ld25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCBkaXIsIGZpbGVuYW1lKQorICAgICAgICB3aXRoIG9wZW4odG1wbmFtZSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgIHNlbGYuX21zZ2ZpbGVzLmFwcGVuZCh0bXBuYW1lKQorICAgICAgICAgICAgaWYgbWJveDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZShGUk9NXykKKyAgICAgICAgICAgIGZwLndyaXRlKERVTU1ZX01FU1NBR0UpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJsaW5rIik6CisgICAgICAgICAgICBvcy5saW5rKHRtcG5hbWUsIG5ld25hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3aXRoIG9wZW4obmV3bmFtZSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZShEVU1NWV9NRVNTQUdFKQorICAgICAgICBzZWxmLl9tc2dmaWxlcy5hcHBlbmQobmV3bmFtZSkKKyAgICAgICAgcmV0dXJuIHRtcG5hbWUKKworICAgIGRlZiB0ZXN0X2VtcHR5X21haWxkaXIoc2VsZik6CisgICAgICAgICIiIlRlc3QgYW4gZW1wdHkgbWFpbGRpciBtYWlsYm94IiIiCisgICAgICAgICMgVGVzdCBmb3IgcmVncmVzc2lvbiBvbiBidWcgIzExNzQ5MDoKKyAgICAgICAgc2VsZi5tYm94ID0gbWFpbGJveC5NYWlsZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oc2VsZi5tYm94KSA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tYm94Lm5leHQoKSBpcyBOb25lKQorCisgICAgZGVmIHRlc3Rfbm9uZW1wdHlfbWFpbGRpcl9jdXIoc2VsZik6CisgICAgICAgIHNlbGYuY3JlYXRlTWVzc2FnZSgiY3VyIikKKyAgICAgICAgc2VsZi5tYm94ID0gbWFpbGJveC5NYWlsZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oc2VsZi5tYm94KSA9PSAxKQorICAgICAgICBtc2cgPSBzZWxmLm1ib3gubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cgaXMgbm90IE5vbmUpCisgICAgICAgIG1zZy5mcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCisKKyAgICBkZWYgdGVzdF9ub25lbXB0eV9tYWlsZGlyX25ldyhzZWxmKToKKyAgICAgICAgc2VsZi5jcmVhdGVNZXNzYWdlKCJuZXciKQorICAgICAgICBzZWxmLm1ib3ggPSBtYWlsYm94Lk1haWxkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLm1ib3gpID09IDEpCisgICAgICAgIG1zZyA9IHNlbGYubWJveC5uZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZyBpcyBub3QgTm9uZSkKKyAgICAgICAgbXNnLmZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubWJveC5uZXh0KCkgaXMgTm9uZSkKKworICAgIGRlZiB0ZXN0X25vbmVtcHR5X21haWxkaXJfYm90aChzZWxmKToKKyAgICAgICAgc2VsZi5jcmVhdGVNZXNzYWdlKCJjdXIiKQorICAgICAgICBzZWxmLmNyZWF0ZU1lc3NhZ2UoIm5ldyIpCisgICAgICAgIHNlbGYubWJveCA9IG1haWxib3guTWFpbGRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHNlbGYubWJveCkgPT0gMikKKyAgICAgICAgbXNnID0gc2VsZi5tYm94Lm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnIGlzIG5vdCBOb25lKQorICAgICAgICBtc2cuZnAuY2xvc2UoKQorICAgICAgICBtc2cgPSBzZWxmLm1ib3gubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cgaXMgbm90IE5vbmUpCisgICAgICAgIG1zZy5mcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLm1ib3gubmV4dCgpIGlzIE5vbmUpCisKKyAgICBkZWYgdGVzdF91bml4X21ib3goc2VsZik6CisgICAgICAgICMjIyBzaG91bGQgYmUgYmV0dGVyIQorICAgICAgICBpbXBvcnQgZW1haWwucGFyc2VyCisgICAgICAgIGZuYW1lID0gc2VsZi5jcmVhdGVNZXNzYWdlKCJjdXIiLCBUcnVlKQorICAgICAgICBuID0gMAorICAgICAgICB3aXRoIG9wZW4oZm5hbWUpIGFzIGY6CisgICAgICAgICAgICBmb3IgbXNnIGluIG1haWxib3guUG9ydGFibGVVbml4TWFpbGJveChmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbC5wYXJzZXIuUGFyc2VyKCkucGFyc2UpOgorICAgICAgICAgICAgICAgIG4gKz0gMQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnWyJzdWJqZWN0Il0sICJTaW1wbGUgVGVzdCIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3RyKG1zZykpLCBsZW4oRlJPTV8pK2xlbihEVU1NWV9NRVNTQUdFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCAxKQorCitjbGFzcyBNYm94VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBjcmVhdGUgYSBuZXcgbWFpbGRpciBtYWlsYm94IHRvIHdvcmsgd2l0aDoKKyAgICAgICAgc2VsZi5fcGF0aCA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MudW5saW5rKHNlbGYuX3BhdGgpCisKKyAgICBkZWYgdGVzdF9mcm9tX3JlZ2V4IChzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIG5ldyByZWdleCBmcm9tIGJ1ZyAjMTYzMzY3OAorICAgICAgICB3aXRoIG9wZW4oc2VsZi5fcGF0aCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiIiJGcm9tIGZyZWRAZXhhbXBsZS5jb20gTW9uIE1heSAzMSAxMzoyNDo1MCAyMDA0ICswMjAwCitTdWJqZWN0OiBtZXNzYWdlIDEKKworYm9keTEKK0Zyb20gZnJlZEBleGFtcGxlLmNvbSBNb24gTWF5IDMxIDEzOjI0OjUwIDIwMDQgLTAyMDAKK1N1YmplY3Q6IG1lc3NhZ2UgMgorCitib2R5MgorRnJvbSBmcmVkQGV4YW1wbGUuY29tIE1vbiBNYXkgMzEgMTM6MjQ6NTAgMjAwNAorU3ViamVjdDogbWVzc2FnZSAzCisKK2JvZHkzCitGcm9tIGZyZWRAZXhhbXBsZS5jb20gTW9uIE1heSAzMSAxMzoyNDo1MCAyMDA0CitTdWJqZWN0OiBtZXNzYWdlIDQKKworYm9keTQKKyIiIikKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuX3BhdGgsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGJveCA9IG1haWxib3guVW5peE1haWxib3goZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4obGlzdChpdGVyKGJveCkpKSA9PSA0KQorCisKKyAgICAjIFhYWCBXZSBzdGlsbCBuZWVkIG1vcmUgdGVzdHMhCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTWFpbGRpclRlc3RDYXNlLCBNYm94VGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfb3Bjb2Rlcy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X29wY29kZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxMTdkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X29wY29kZXMucHkKQEAgLTAsMCArMSwxMjEgQEAKKyMgUHl0aG9uIHRlc3Qgc2V0IC0tIHBhcnQgMiwgb3Bjb2RlcworCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNoZWNrX3B5M2tfd2FybmluZ3MKK2ltcG9ydCB1bml0dGVzdAorCitjbGFzcyBPcGNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3RyeV9pbnNpZGVfZm9yX2xvb3Aoc2VsZik6CisgICAgICAgIG4gPSAwCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIG4gPSBuK2kKKyAgICAgICAgICAgIHRyeTogMSAvLyAwCisgICAgICAgICAgICBleGNlcHQgTmFtZUVycm9yOiBwYXNzCisgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6IHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKKyAgICAgICAgICAgIHRyeTogcGFzcworICAgICAgICAgICAgZXhjZXB0OiBwYXNzCisgICAgICAgICAgICB0cnk6IHBhc3MKKyAgICAgICAgICAgIGZpbmFsbHk6IHBhc3MKKyAgICAgICAgICAgIG4gPSBuK2kKKyAgICAgICAgaWYgbiAhPSA5MDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgndHJ5IGluc2lkZSBmb3InKQorCisgICAgZGVmIHRlc3RfcmFpc2VfY2xhc3NfZXhjZXB0aW9ucyhzZWxmKToKKworICAgICAgICBjbGFzcyBBQ2xhc3M6IHBhc3MKKyAgICAgICAgY2xhc3MgQkNsYXNzKEFDbGFzcyk6IHBhc3MKKyAgICAgICAgY2xhc3MgQ0NsYXNzOiBwYXNzCisgICAgICAgIGNsYXNzIERDbGFzcyhBQ2xhc3MpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlnbm9yZSk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRyeTogcmFpc2UgQUNsYXNzKCkKKyAgICAgICAgZXhjZXB0OiBwYXNzCisKKyAgICAgICAgdHJ5OiByYWlzZSBBQ2xhc3MoKQorICAgICAgICBleGNlcHQgQUNsYXNzOiBwYXNzCisKKyAgICAgICAgdHJ5OiByYWlzZSBCQ2xhc3MoKQorICAgICAgICBleGNlcHQgQUNsYXNzOiBwYXNzCisKKyAgICAgICAgdHJ5OiByYWlzZSBCQ2xhc3MoKQorICAgICAgICBleGNlcHQgQ0NsYXNzOiBzZWxmLmZhaWwoKQorICAgICAgICBleGNlcHQ6IHBhc3MKKworICAgICAgICBhID0gQUNsYXNzKCkKKyAgICAgICAgYiA9IEJDbGFzcygpCisKKyAgICAgICAgdHJ5OiByYWlzZSBBQ2xhc3MsIGIKKyAgICAgICAgZXhjZXB0IEJDbGFzcywgdjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgYikKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCJubyBleGNlcHRpb24iKQorCisgICAgICAgIHRyeTogcmFpc2UgYgorICAgICAgICBleGNlcHQgQUNsYXNzLCB2OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCBiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBleGNlcHRpb24iKQorCisgICAgICAgICMgbm90IGVub3VnaCBhcmd1bWVudHMKKyAgICAgICAgdHJ5OiAgcmFpc2UgQkNsYXNzLCBhCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCJubyBleGNlcHRpb24iKQorCisgICAgICAgIHRyeTogIHJhaXNlIERDbGFzcywgYQorICAgICAgICBleGNlcHQgRENsYXNzLCB2OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYsIERDbGFzcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gZXhjZXB0aW9uIikKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfZnVuY3Rpb25fb2JqZWN0cyhzZWxmKToKKworICAgICAgICBmID0gZXZhbCgnbGFtYmRhOiBOb25lJykKKyAgICAgICAgZyA9IGV2YWwoJ2xhbWJkYTogTm9uZScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZiwgZykKKworICAgICAgICBmID0gZXZhbCgnbGFtYmRhIGE6IGEnKQorICAgICAgICBnID0gZXZhbCgnbGFtYmRhIGE6IGEnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGYsIGcpCisKKyAgICAgICAgZiA9IGV2YWwoJ2xhbWJkYSBhPTE6IGEnKQorICAgICAgICBnID0gZXZhbCgnbGFtYmRhIGE9MTogYScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZiwgZykKKworICAgICAgICBmID0gZXZhbCgnbGFtYmRhOiAwJykKKyAgICAgICAgZyA9IGV2YWwoJ2xhbWJkYTogMScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZiwgZykKKworICAgICAgICBmID0gZXZhbCgnbGFtYmRhOiBOb25lJykKKyAgICAgICAgZyA9IGV2YWwoJ2xhbWJkYSBhOiBOb25lJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBnKQorCisgICAgICAgIGYgPSBldmFsKCdsYW1iZGEgYTogTm9uZScpCisgICAgICAgIGcgPSBldmFsKCdsYW1iZGEgYjogTm9uZScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZiwgZykKKworICAgICAgICBmID0gZXZhbCgnbGFtYmRhIGE6IE5vbmUnKQorICAgICAgICBnID0gZXZhbCgnbGFtYmRhIGE9Tm9uZTogTm9uZScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZiwgZykKKworICAgICAgICBmID0gZXZhbCgnbGFtYmRhIGE9MDogTm9uZScpCisgICAgICAgIGcgPSBldmFsKCdsYW1iZGEgYT0xOiBOb25lJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBnKQorCisgICAgZGVmIHRlc3RfbW9kdWxvX29mX3N0cmluZ19zdWJjbGFzc2VzKHNlbGYpOgorICAgICAgICBjbGFzcyBNeVN0cmluZyhzdHIpOgorICAgICAgICAgICAgZGVmIF9fbW9kX18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE15U3RyaW5nKCkgJSAzLCA0MikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCgiZXhjZXB0aW9ucyBtdXN0IGRlcml2ZSBmcm9tIEJhc2VFeGNlcHRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJjYXRjaGluZyBjbGFzc2VzIHRoYXQgZG9uJ3QgaW5oZXJpdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbSBCYXNlRXhjZXB0aW9uIGlzIG5vdCBhbGxvd2VkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICBydW5fdW5pdHRlc3QoT3Bjb2RlVGVzdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfb3BlbnB0eS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X29wZW5wdHkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBjNGZlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X29wZW5wdHkucHkKQEAgLTAsMCArMSwyMyBAQAorIyBUZXN0IHRvIHNlZSBpZiBvcGVucHR5IHdvcmtzLiAoQnV0IGRvbid0IHdvcnJ5IGlmIGl0IGlzbid0IGF2YWlsYWJsZS4pCisKK2ltcG9ydCBvcywgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitpZiBub3QgaGFzYXR0cihvcywgIm9wZW5wdHkiKToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgIk5vIG9wZW5wdHkoKSBhdmFpbGFibGUuIgorCisKK2NsYXNzIE9wZW5wdHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgbWFzdGVyLCBzbGF2ZSA9IG9zLm9wZW5wdHkoKQorICAgICAgICBpZiBub3Qgb3MuaXNhdHR5KHNsYXZlKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2xhdmUtZW5kIG9mIHB0eSBpcyBub3QgYSB0ZXJtaW5hbC4iKQorCisgICAgICAgIG9zLndyaXRlKHNsYXZlLCAnUGluZyEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQobWFzdGVyLCAxMDI0KSwgJ1BpbmchJykKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChPcGVucHR5VGVzdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9vcGVyYXRvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWE4MDIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkKQEAgLTAsMCArMSw1MzIgQEAKK2ltcG9ydCBvcGVyYXRvcgoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIFNlcTE6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxzdCk6CisgICAgICAgIHNlbGYubHN0ID0gbHN0CisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5sc3QpCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICByZXR1cm4gc2VsZi5sc3RbaV0KKyAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmxzdCArIG90aGVyLmxzdAorICAgIGRlZiBfX211bF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYubHN0ICogb3RoZXIKKyAgICBkZWYgX19ybXVsX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gb3RoZXIgKiBzZWxmLmxzdAorCitjbGFzcyBTZXEyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxzdCk6CisgICAgICAgIHNlbGYubHN0ID0gbHN0CisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5sc3QpCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICByZXR1cm4gc2VsZi5sc3RbaV0KKyAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmxzdCArIG90aGVyLmxzdAorICAgIGRlZiBfX211bF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYubHN0ICogb3RoZXIKKyAgICBkZWYgX19ybXVsX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gb3RoZXIgKiBzZWxmLmxzdAorCisKK2NsYXNzIE9wZXJhdG9yVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2x0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmx0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmx0LCAxaiwgMmopCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubHQoMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubHQoMSwgMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5sdCgxLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5sdCgxLCAxLjApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubHQoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sdCgxLCAyLjApKQorCisgICAgZGVmIHRlc3RfbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubGUsIDFqLCAyaikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5sZSgxLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5sZSgxLCAwLjApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubGUoMSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sZSgxLCAxLjApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubGUoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sZSgxLCAyLjApKQorCisgICAgZGVmIHRlc3RfZXEoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yCisgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmVxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgb3BlcmF0b3IuZXEsIEMoKSwgQygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmVxKDEsIDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmVxKDEsIDAuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5lcSgxLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmVxKDEsIDEuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZXEoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZXEoMSwgMi4wKSkKKworICAgIGRlZiB0ZXN0X25lKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm5lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgb3BlcmF0b3IubmUsIEMoKSwgQygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubmUoMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZSgxLCAwLjApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLm5lKDEsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLm5lKDEsIDEuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZSgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm5lKDEsIDIuMCkpCisKKyAgICBkZWYgdGVzdF9nZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZSwgMWosIDJqKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ2UoMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5nZSgxLCAwLjApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ2UoMSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5nZSgxLCAxLjApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmdlKDEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmdlKDEsIDIuMCkpCisKKyAgICBkZWYgdGVzdF9ndChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCwgMWosIDJqKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ3QoMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5ndCgxLCAwLjApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmd0KDEsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmd0KDEsIDEuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZ3QoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZ3QoMSwgMi4wKSkKKworICAgIGRlZiB0ZXN0X2FicyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hYnMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWJzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuYWJzKC0xKSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuYWJzKDEpID09IDEpCisKKyAgICBkZWYgdGVzdF9hZGQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWRkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFkZCwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmFkZCgzLCA0KSA9PSA3KQorCisgICAgZGVmIHRlc3RfYml0d2lzZV9hbmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYW5kXykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hbmRfLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuYW5kXygweGYsIDB4YSkgPT0gMHhhKQorCisgICAgZGVmIHRlc3RfY29uY2F0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbmNhdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb25jYXQsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5jb25jYXQoJ3B5JywgJ3Rob24nKSA9PSAncHl0aG9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvbmNhdChbMSwgMl0sIFszLCA0XSkgPT0gWzEsIDIsIDMsIDRdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY29uY2F0KFNlcTEoWzUsIDZdKSwgU2VxMShbN10pKSA9PSBbNSwgNiwgN10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5jb25jYXQoU2VxMihbNSwgNl0pLCBTZXEyKFs3XSkpID09IFs1LCA2LCA3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb25jYXQsIDEzLCAyOSkKKworICAgIGRlZiB0ZXN0X2NvdW50T2Yoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY291bnRPZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb3VudE9mLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY291bnRPZihbMSwgMiwgMSwgMywgMSwgNF0sIDMpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5jb3VudE9mKFsxLCAyLCAxLCAzLCAxLCA0XSwgNSkgPT0gMCkKKworICAgIGRlZiB0ZXN0X2RlbGl0ZW0oc2VsZik6CisgICAgICAgIGEgPSBbNCwgMywgMiwgMV0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kZWxpdGVtLCBhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmRlbGl0ZW0sIGEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5kZWxpdGVtKGEsIDEpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhID09IFs0LCAyLCAxXSkKKworICAgIGRlZiB0ZXN0X2RlbHNsaWNlKHNlbGYpOgorICAgICAgICBhID0gcmFuZ2UoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGVsc2xpY2UsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGVsc2xpY2UsIGEsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5kZWxzbGljZShhLCAyLCA4KSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBbMCwgMSwgOCwgOV0pCisgICAgICAgIG9wZXJhdG9yLmRlbHNsaWNlKGEsIDAsIHRlc3Rfc3VwcG9ydC5NQVhfUHlfc3NpemVfdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gW10pCisKKyAgICBkZWYgdGVzdF9kaXYoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGl2LCA1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmRpdiwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmZsb29yZGl2KDUsIDIpID09IDIpCisKKyAgICBkZWYgdGVzdF9mbG9vcmRpdihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5mbG9vcmRpdiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5mbG9vcmRpdiwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmZsb29yZGl2KDUsIDIpID09IDIpCisKKyAgICBkZWYgdGVzdF90cnVlZGl2KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnRydWVkaXYsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IudHJ1ZWRpdiwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnRydWVkaXYoNSwgMikgPT0gMi41KQorCisgICAgZGVmIHRlc3RfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgYSA9IHJhbmdlKDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwgYSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmdldGl0ZW0oYSwgMikgPT0gMikKKworICAgIGRlZiB0ZXN0X2dldHNsaWNlKHNlbGYpOgorICAgICAgICBhID0gcmFuZ2UoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ2V0c2xpY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ2V0c2xpY2UsIGEsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5nZXRzbGljZShhLCA0LCA2KSA9PSBbNCwgNV0pCisgICAgICAgIGIgPSBvcGVyYXRvci5nZXRzbGljZShhLCAwLCB0ZXN0X3N1cHBvcnQuTUFYX1B5X3NzaXplX3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiID09IGEpCisKKyAgICBkZWYgdGVzdF9pbmRleE9mKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmluZGV4T2YpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW5kZXhPZiwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmluZGV4T2YoWzQsIDMsIDIsIDFdLCAzKSA9PSAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5pbmRleE9mLCBbNCwgMywgMiwgMV0sIDApCisKKyAgICBkZWYgdGVzdF9pbnZlcnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW52ZXJ0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmludmVydCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmludig0KSA9PSAtNSkKKworICAgIGRlZiB0ZXN0X2lzQ2FsbGFibGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNDYWxsYWJsZSkKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIGNoZWNrKHNlbGYsIG8sIHYpOgorICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXNDYWxsYWJsZShvKSwgdikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxhYmxlKG8pLCB2KQorICAgICAgICBjaGVjayhzZWxmLCA0LCAwKQorICAgICAgICBjaGVjayhzZWxmLCBvcGVyYXRvci5pc0NhbGxhYmxlLCAxKQorICAgICAgICBjaGVjayhzZWxmLCBDLCAxKQorICAgICAgICBjaGVjayhzZWxmLCBDKCksIDApCisKKyAgICBkZWYgdGVzdF9pc01hcHBpbmdUeXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuaXNNYXBwaW5nVHlwZSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5pc01hcHBpbmdUeXBlKG9wZXJhdG9yLmlzTWFwcGluZ1R5cGUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNNYXBwaW5nVHlwZShvcGVyYXRvci5fX2RpY3RfXykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc01hcHBpbmdUeXBlKHt9KSkKKworICAgIGRlZiB0ZXN0X2lzTnVtYmVyVHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc051bWJlclR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc051bWJlclR5cGUoOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc051bWJlclR5cGUoOGopKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNOdW1iZXJUeXBlKDhMKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmlzTnVtYmVyVHlwZSg4LjMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmlzTnVtYmVyVHlwZShkaXIoKSkpCisKKyAgICBkZWYgdGVzdF9pc1NlcXVlbmNlVHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc1NlcXVlbmNlVHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmlzU2VxdWVuY2VUeXBlKGRpcigpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmlzU2VxdWVuY2VUeXBlKCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmlzU2VxdWVuY2VUeXBlKHhyYW5nZSgxMCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoJ3llYWhidWRkeScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmlzU2VxdWVuY2VUeXBlKDMpKQorICAgICAgICBjbGFzcyBEaWN0KGRpY3QpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuaXNTZXF1ZW5jZVR5cGUoRGljdCgpKSkKKworICAgIGRlZiB0ZXN0X2xzaGlmdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sc2hpZnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHNoaWZ0LCBOb25lLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmxzaGlmdCg1LCAxKSA9PSAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmxzaGlmdCg1LCAwKSA9PSA1KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5sc2hpZnQsIDIsIC0xKQorCisgICAgZGVmIHRlc3RfbW9kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1vZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tb2QsIE5vbmUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubW9kKDUsIDIpID09IDEpCisKKyAgICBkZWYgdGVzdF9tdWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubXVsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm11bCwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm11bCg1LCAyKSA9PSAxMCkKKworICAgIGRlZiB0ZXN0X25lZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5uZWcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubmVnLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubmVnKDUpID09IC01KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubmVnKC01KSA9PSA1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubmVnKDApID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZWcoLTApID09IDApCisKKyAgICBkZWYgdGVzdF9iaXR3aXNlX29yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm9yXykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5vcl8sIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5vcl8oMHhhLCAweDUpID09IDB4ZikKKworICAgIGRlZiB0ZXN0X3BvcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3MpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG9zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucG9zKDUpID09IDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5wb3MoLTUpID09IC01KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucG9zKDApID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5wb3MoLTApID09IDApCisKKyAgICBkZWYgdGVzdF9wb3coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvdywgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnBvdygzLDUpID09IDMqKjUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5fX3Bvd19fKDMsNSkgPT0gMyoqNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3csIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCAxLCAyLCAzKQorCisgICAgZGVmIHRlc3RfcmVwZWF0KHNlbGYpOgorICAgICAgICBhID0gcmFuZ2UoMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5yZXBlYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucmVwZWF0LCBhLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDIpID09IGErYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAxKSA9PSBhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDApID09IFtdKQorICAgICAgICBhID0gKDEsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMikgPT0gYSthKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDEpID09IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMCkgPT0gKCkpCisgICAgICAgIGEgPSAnMTIzJworICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDIpID09IGErYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAxKSA9PSBhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDApID09ICcnKQorICAgICAgICBhID0gU2VxMShbNCwgNSwgNl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMikgPT0gWzQsIDUsIDYsIDQsIDUsIDZdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDEpID09IFs0LCA1LCA2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAwKSA9PSBbXSkKKyAgICAgICAgYSA9IFNlcTIoWzQsIDUsIDZdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucmVwZWF0KGEsIDIpID09IFs0LCA1LCA2LCA0LCA1LCA2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnJlcGVhdChhLCAxKSA9PSBbNCwgNSwgNl0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yZXBlYXQoYSwgMCkgPT0gW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucmVwZWF0LCA2LCA3KQorCisgICAgZGVmIHRlc3RfcnNoaWZ0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5yc2hpZnQsIE5vbmUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucnNoaWZ0KDUsIDEpID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yc2hpZnQoNSwgMCkgPT0gNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3BlcmF0b3IucnNoaWZ0LCAyLCAtMSkKKworICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbnRhaW5zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbnRhaW5zLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY29udGFpbnMocmFuZ2UoNCksIDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmNvbnRhaW5zKHJhbmdlKDQpLCA1KSkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnNlcXVlbmNlSW5jbHVkZXMocmFuZ2UoNCksIDIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5zZXF1ZW5jZUluY2x1ZGVzKHJhbmdlKDQpLCA1KSkKKworICAgIGRlZiB0ZXN0X3NldGl0ZW0oc2VsZik6CisgICAgICAgIGEgPSByYW5nZSgzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnNldGl0ZW0sIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnNldGl0ZW0oYSwgMCwgMikgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gWzIsIDEsIDJdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBvcGVyYXRvci5zZXRpdGVtLCBhLCA0LCAyKQorCisgICAgZGVmIHRlc3Rfc2V0c2xpY2Uoc2VsZik6CisgICAgICAgIGEgPSByYW5nZSg0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnNldHNsaWNlLCBhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnNldHNsaWNlLCBhLCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3Iuc2V0c2xpY2UoYSwgMSwgMywgWzIsIDFdKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBbMCwgMiwgMSwgM10pCisgICAgICAgIG9wZXJhdG9yLnNldHNsaWNlKGEsIDAsIHRlc3Rfc3VwcG9ydC5NQVhfUHlfc3NpemVfdCwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhID09IFtdKQorCisgICAgZGVmIHRlc3Rfc3ViKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnN1YikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zdWIsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5zdWIoNSwgMikgPT0gMykKKworICAgIGRlZiB0ZXN0X3RydXRoKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci50cnV0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIG9wZXJhdG9yLnRydXRoLCBDKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci50cnV0aCg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnRydXRoKFswXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IudHJ1dGgoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IudHJ1dGgoW10pKQorCisgICAgZGVmIHRlc3RfYml0d2lzZV94b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IueG9yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnhvciwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLnhvcigweGIsIDB4YykgPT0gMHg3KQorCisgICAgZGVmIHRlc3RfaXMoc2VsZik6CisgICAgICAgIGEgPSBiID0gJ3h5enBkcScKKyAgICAgICAgYyA9IGFbOjNdICsgYlszOl0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc18pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc18oYSwgYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuaXNfKGEsYykpCisKKyAgICBkZWYgdGVzdF9pc19ub3Qoc2VsZik6CisgICAgICAgIGEgPSBiID0gJ3h5enBkcScKKyAgICAgICAgYyA9IGFbOjNdICsgYlszOl0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc19ub3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuaXNfbm90KGEsIGIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNfbm90KGEsYykpCisKKyAgICBkZWYgdGVzdF9hdHRyZ2V0dGVyKHNlbGYpOgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhID0gQSgpCisgICAgICAgIGEubmFtZSA9ICdhcnRodXInCisgICAgICAgIGYgPSBvcGVyYXRvci5hdHRyZ2V0dGVyKCduYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCAnYXJ0aHVyJykKKyAgICAgICAgZiA9IG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ3JhbmsnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZiwgYSkKKyAgICAgICAgZiA9IG9wZXJhdG9yLmF0dHJnZXR0ZXIoMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmF0dHJnZXR0ZXIpCisKKyAgICAgICAgIyBtdWx0aXBsZSBnZXRzCisgICAgICAgIHJlY29yZCA9IEEoKQorICAgICAgICByZWNvcmQueCA9ICdYJworICAgICAgICByZWNvcmQueSA9ICdZJworICAgICAgICByZWNvcmQueiA9ICdaJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ3gnLCd6JywneScpKHJlY29yZCksICgnWCcsICdaJywgJ1knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hdHRyZ2V0dGVyKCd4JywgKCksICd5JyksIHJlY29yZCkKKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ2ZvbycpLCBDKCkpCisKKyAgICAgICAgIyByZWN1cnNpdmUgZ2V0cworICAgICAgICBhID0gQSgpCisgICAgICAgIGEubmFtZSA9ICdhcnRodXInCisgICAgICAgIGEuY2hpbGQgPSBBKCkKKyAgICAgICAgYS5jaGlsZC5uYW1lID0gJ3Rob21hcycKKyAgICAgICAgZiA9IG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ2NoaWxkLm5hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksICd0aG9tYXMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZiwgYS5jaGlsZCkKKyAgICAgICAgZiA9IG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ25hbWUnLCAnY2hpbGQubmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgKCdhcnRodXInLCAndGhvbWFzJykpCisgICAgICAgIGYgPSBvcGVyYXRvci5hdHRyZ2V0dGVyKCduYW1lJywgJ2NoaWxkLm5hbWUnLCAnY2hpbGQuY2hpbGQubmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBmLCBhKQorCisgICAgICAgIGEuY2hpbGQuY2hpbGQgPSBBKCkKKyAgICAgICAgYS5jaGlsZC5jaGlsZC5uYW1lID0gJ2pvaG5zb24nCisgICAgICAgIGYgPSBvcGVyYXRvci5hdHRyZ2V0dGVyKCdjaGlsZC5jaGlsZC5uYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCAnam9obnNvbicpCisgICAgICAgIGYgPSBvcGVyYXRvci5hdHRyZ2V0dGVyKCduYW1lJywgJ2NoaWxkLm5hbWUnLCAnY2hpbGQuY2hpbGQubmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgKCdhcnRodXInLCAndGhvbWFzJywgJ2pvaG5zb24nKSkKKworICAgIGRlZiB0ZXN0X2l0ZW1nZXR0ZXIoc2VsZik6CisgICAgICAgIGEgPSAnQUJDREUnCisgICAgICAgIGYgPSBvcGVyYXRvci5pdGVtZ2V0dGVyKDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgJ0MnKQorICAgICAgICBmID0gb3BlcmF0b3IuaXRlbWdldHRlcigxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgZiwgYSkKKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIG9wZXJhdG9yLml0ZW1nZXR0ZXIoNDIpLCBDKCkpCisKKyAgICAgICAgZiA9IG9wZXJhdG9yLml0ZW1nZXR0ZXIoJ25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXRlbWdldHRlcikKKworICAgICAgICBkID0gZGljdChrZXk9J3ZhbCcpCisgICAgICAgIGYgPSBvcGVyYXRvci5pdGVtZ2V0dGVyKCdrZXknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoZCksICd2YWwnKQorICAgICAgICBmID0gb3BlcmF0b3IuaXRlbWdldHRlcignbm9ua2V5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGYsIGQpCisKKyAgICAgICAgIyBleGFtcGxlIHVzZWQgaW4gdGhlIGRvY3MKKyAgICAgICAgaW52ZW50b3J5ID0gWygnYXBwbGUnLCAzKSwgKCdiYW5hbmEnLCAyKSwgKCdwZWFyJywgNSksICgnb3JhbmdlJywgMSldCisgICAgICAgIGdldGNvdW50ID0gb3BlcmF0b3IuaXRlbWdldHRlcigxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcChnZXRjb3VudCwgaW52ZW50b3J5KSwgWzMsIDIsIDUsIDFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpbnZlbnRvcnksIGtleT1nZXRjb3VudCksCisgICAgICAgICAgICBbKCdvcmFuZ2UnLCAxKSwgKCdiYW5hbmEnLCAyKSwgKCdhcHBsZScsIDMpLCAoJ3BlYXInLCA1KV0pCisKKyAgICAgICAgIyBtdWx0aXBsZSBnZXRzCisgICAgICAgIGRhdGEgPSBtYXAoc3RyLCByYW5nZSgyMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXRlbWdldHRlcigyLDEwLDUpKGRhdGEpLCAoJzInLCAnMTAnLCAnNScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLml0ZW1nZXR0ZXIoMiwgJ3gnLCA1KSwgZGF0YSkKKworICAgIGRlZiB0ZXN0X21ldGhvZGNhbGxlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tZXRob2RjYWxsZXIpCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgZm9vKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBhcmdzWzBdICsgYXJnc1sxXQorICAgICAgICAgICAgZGVmIGJhcihzZWxmLCBmPTQyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBhID0gQSgpCisgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGYsIGEpCisgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2ZvbycsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgMykKKyAgICAgICAgZiA9IG9wZXJhdG9yLm1ldGhvZGNhbGxlcignYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBhLCBhKQorICAgICAgICBmID0gb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdiYXInLCBmPTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgNSkKKworICAgIGRlZiB0ZXN0X2lucGxhY2Uoc2VsZik6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2lhZGRfXyAgICAgKHNlbGYsIG90aGVyKTogcmV0dXJuICJpYWRkIgorICAgICAgICAgICAgZGVmIF9faWFuZF9fICAgICAoc2VsZiwgb3RoZXIpOiByZXR1cm4gImlhbmQiCisgICAgICAgICAgICBkZWYgX19pZGl2X18gICAgIChzZWxmLCBvdGhlcik6IHJldHVybiAiaWRpdiIKKyAgICAgICAgICAgIGRlZiBfX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKTogcmV0dXJuICJpZmxvb3JkaXYiCisgICAgICAgICAgICBkZWYgX19pbHNoaWZ0X18gIChzZWxmLCBvdGhlcik6IHJldHVybiAiaWxzaGlmdCIKKyAgICAgICAgICAgIGRlZiBfX2ltb2RfXyAgICAgKHNlbGYsIG90aGVyKTogcmV0dXJuICJpbW9kIgorICAgICAgICAgICAgZGVmIF9faW11bF9fICAgICAoc2VsZiwgb3RoZXIpOiByZXR1cm4gImltdWwiCisgICAgICAgICAgICBkZWYgX19pb3JfXyAgICAgIChzZWxmLCBvdGhlcik6IHJldHVybiAiaW9yIgorICAgICAgICAgICAgZGVmIF9faXBvd19fICAgICAoc2VsZiwgb3RoZXIpOiByZXR1cm4gImlwb3ciCisgICAgICAgICAgICBkZWYgX19pcnNoaWZ0X18gIChzZWxmLCBvdGhlcik6IHJldHVybiAiaXJzaGlmdCIKKyAgICAgICAgICAgIGRlZiBfX2lzdWJfXyAgICAgKHNlbGYsIG90aGVyKTogcmV0dXJuICJpc3ViIgorICAgICAgICAgICAgZGVmIF9faXRydWVkaXZfXyAoc2VsZiwgb3RoZXIpOiByZXR1cm4gIml0cnVlZGl2IgorICAgICAgICAgICAgZGVmIF9faXhvcl9fICAgICAoc2VsZiwgb3RoZXIpOiByZXR1cm4gIml4b3IiCisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgb3RoZXIpOiByZXR1cm4gNSAgIyBzbyB0aGF0IEMgaXMgYSBzZXF1ZW5jZQorICAgICAgICBjID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaWFkZCAgICAgKGMsIDUpLCAiaWFkZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaWFuZCAgICAgKGMsIDUpLCAiaWFuZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaWRpdiAgICAgKGMsIDUpLCAiaWRpdiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaWZsb29yZGl2KGMsIDUpLCAiaWZsb29yZGl2IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pbHNoaWZ0ICAoYywgNSksICJpbHNoaWZ0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pbW9kICAgICAoYywgNSksICJpbW9kIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pbXVsICAgICAoYywgNSksICJpbXVsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pb3IgICAgICAoYywgNSksICJpb3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmlwb3cgICAgIChjLCA1KSwgImlwb3ciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmlyc2hpZnQgIChjLCA1KSwgImlyc2hpZnQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmlzdWIgICAgIChjLCA1KSwgImlzdWIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLml0cnVlZGl2IChjLCA1KSwgIml0cnVlZGl2IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5peG9yICAgICAoYywgNSksICJpeG9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pY29uY2F0ICAoYywgYyksICJpYWRkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pcmVwZWF0ICAoYywgNSksICJpbXVsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lhZGRfXyAgICAgKGMsIDUpLCAiaWFkZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pYW5kX18gICAgIChjLCA1KSwgImlhbmQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faWRpdl9fICAgICAoYywgNSksICJpZGl2IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lmbG9vcmRpdl9fKGMsIDUpLCAiaWZsb29yZGl2IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lsc2hpZnRfXyAgKGMsIDUpLCAiaWxzaGlmdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pbW9kX18gICAgIChjLCA1KSwgImltb2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faW11bF9fICAgICAoYywgNSksICJpbXVsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lvcl9fICAgICAgKGMsIDUpLCAiaW9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lwb3dfXyAgICAgKGMsIDUpLCAiaXBvdyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pcnNoaWZ0X18gIChjLCA1KSwgImlyc2hpZnQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXN1Yl9fICAgICAoYywgNSksICJpc3ViIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2l0cnVlZGl2X18gKGMsIDUpLCAiaXRydWVkaXYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXhvcl9fICAgICAoYywgNSksICJpeG9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2ljb25jYXRfXyAgKGMsIGMpLCAiaWFkZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pcmVwZWF0X18gIChjLCA1KSwgImltdWwiKQorCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgaW1wb3J0IHN5cworICAgIHRlc3RfY2xhc3NlcyA9ICgKKyAgICAgICAgT3BlcmF0b3JUZXN0Q2FzZSwKKyAgICApCisKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisKKyAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKKyAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihjb3VudHMpKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICBwcmludCBjb3VudHMKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9vcHRwYXJzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGU1YmI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkKQEAgLTAsMCArMSwxNjI2IEBACisjCisjIFRlc3Qgc3VpdGUgZm9yIE9wdGlrLiAgU3VwcGxpZWQgYnkgSm9oYW5uZXMgR2lqc2JlcnMKKyMgKHRhcmFkaW5vQHNvZnRob21lLm5ldCkgLS0gdHJhbnNsYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBPcHRpaworIyB0ZXN0IHN1aXRlIHRvIHRoaXMgUHlVbml0LWJhc2VkIHZlcnNpb24uCisjCisjICRJZCQKKyMKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBjb3B5CitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCitmcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbiwgT3B0aW9uLCBcCisgICAgIFRpdGxlZEhlbHBGb3JtYXR0ZXIsIE9wdGlvblBhcnNlciwgT3B0aW9uR3JvdXAsIFwKKyAgICAgU1VQUFJFU1NfVVNBR0UsIE9wdGlvbkVycm9yLCBPcHRpb25Db25mbGljdEVycm9yLCBcCisgICAgIEJhZE9wdGlvbkVycm9yLCBPcHRpb25WYWx1ZUVycm9yLCBWYWx1ZXMKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IF9tYXRjaF9hYmJyZXYKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IF9wYXJzZV9udW0KKworcmV0eXBlID0gdHlwZShyZS5jb21waWxlKCcnKSkKKworY2xhc3MgSW50ZXJjZXB0ZWRFcnJvcihFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlPU5vbmUsCisgICAgICAgICAgICAgICAgIGV4aXRfc3RhdHVzPU5vbmUsCisgICAgICAgICAgICAgICAgIGV4aXRfbWVzc2FnZT1Ob25lKToKKyAgICAgICAgc2VsZi5lcnJvcl9tZXNzYWdlID0gZXJyb3JfbWVzc2FnZQorICAgICAgICBzZWxmLmV4aXRfc3RhdHVzID0gZXhpdF9zdGF0dXMKKyAgICAgICAgc2VsZi5leGl0X21lc3NhZ2UgPSBleGl0X21lc3NhZ2UKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lcnJvcl9tZXNzYWdlIG9yIHNlbGYuZXhpdF9tZXNzYWdlIG9yICJpbnRlcmNlcHRlZCBlcnJvciIKKworY2xhc3MgSW50ZXJjZXB0aW5nT3B0aW9uUGFyc2VyKE9wdGlvblBhcnNlcik6CisgICAgZGVmIGV4aXQoc2VsZiwgc3RhdHVzPTAsIG1zZz1Ob25lKToKKyAgICAgICAgcmFpc2UgSW50ZXJjZXB0ZWRFcnJvcihleGl0X3N0YXR1cz1zdGF0dXMsIGV4aXRfbWVzc2FnZT1tc2cpCisKKyAgICBkZWYgZXJyb3Ioc2VsZiwgbXNnKToKKyAgICAgICAgcmFpc2UgSW50ZXJjZXB0ZWRFcnJvcihlcnJvcl9tZXNzYWdlPW1zZykKKworCitjbGFzcyBCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGFzc2VydFBhcnNlT0soc2VsZiwgYXJncywgZXhwZWN0ZWRfb3B0cywgZXhwZWN0ZWRfcG9zaXRpb25hbF9hcmdzKToKKyAgICAgICAgIiIiQXNzZXJ0IHRoZSBvcHRpb25zIGFyZSB3aGF0IHdlIGV4cGVjdGVkIHdoZW4gcGFyc2luZyBhcmd1bWVudHMuCisKKyAgICAgICAgT3RoZXJ3aXNlLCBmYWlsIHdpdGggYSBuaWNlbHkgZm9ybWF0dGVkIG1lc3NhZ2UuCisKKyAgICAgICAgS2V5d29yZCBhcmd1bWVudHM6CisgICAgICAgIGFyZ3MgLS0gQSBsaXN0IG9mIGFyZ3VtZW50cyB0byBwYXJzZSB3aXRoIE9wdGlvblBhcnNlci4KKyAgICAgICAgZXhwZWN0ZWRfb3B0cyAtLSBUaGUgb3B0aW9ucyBleHBlY3RlZC4KKyAgICAgICAgZXhwZWN0ZWRfcG9zaXRpb25hbF9hcmdzIC0tIFRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBleHBlY3RlZC4KKworICAgICAgICBSZXR1cm5zIHRoZSBvcHRpb25zIGFuZCBwb3NpdGlvbmFsIGFyZ3MgZm9yIGZ1cnRoZXIgdGVzdGluZy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgKG9wdGlvbnMsIHBvc2l0aW9uYWxfYXJncykgPSBzZWxmLnBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisgICAgICAgIG9wdGRpY3QgPSB2YXJzKG9wdGlvbnMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRkaWN0LCBleHBlY3RlZF9vcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICIiIgorT3B0aW9ucyBhcmUgJShvcHRkaWN0KXMuCitTaG91bGQgYmUgJShleHBlY3RlZF9vcHRzKXMuCitBcmdzIHdlcmUgJShhcmdzKXMuIiIiICUgbG9jYWxzKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpdGlvbmFsX2FyZ3MsIGV4cGVjdGVkX3Bvc2l0aW9uYWxfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIiIKK1Bvc2l0aW9uYWwgYXJndW1lbnRzIGFyZSAlKHBvc2l0aW9uYWxfYXJncylzLgorU2hvdWxkIGJlICUoZXhwZWN0ZWRfcG9zaXRpb25hbF9hcmdzKXMuCitBcmdzIHdlcmUgJShhcmdzKXMuIiIiICUgbG9jYWxzICgpKQorCisgICAgICAgIHJldHVybiAob3B0aW9ucywgcG9zaXRpb25hbF9hcmdzKQorCisgICAgZGVmIGFzc2VydFJhaXNlcyhzZWxmLAorICAgICAgICAgICAgICAgICAgICAgZnVuYywKKyAgICAgICAgICAgICAgICAgICAgIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICBrd2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9leGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9tZXNzYWdlKToKKyAgICAgICAgIiIiCisgICAgICAgIEFzc2VydCB0aGF0IHRoZSBleHBlY3RlZCBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gY2FsbGluZyBhCisgICAgICAgIGZ1bmN0aW9uLCBhbmQgdGhhdCB0aGUgcmlnaHQgZXJyb3IgbWVzc2FnZSBpcyBpbmNsdWRlZCB3aXRoCisgICAgICAgIHRoYXQgZXhjZXB0aW9uLgorCisgICAgICAgIEFyZ3VtZW50czoKKyAgICAgICAgICBmdW5jIC0tIHRoZSBmdW5jdGlvbiB0byBjYWxsCisgICAgICAgICAgYXJncyAtLSBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0byBgZnVuY2AKKyAgICAgICAgICBrd2FyZ3MgLS0ga2V5d29yZCBhcmd1bWVudHMgdG8gYGZ1bmNgCisgICAgICAgICAgZXhwZWN0ZWRfZXhjZXB0aW9uIC0tIGV4Y2VwdGlvbiB0aGF0IHNob3VsZCBiZSByYWlzZWQKKyAgICAgICAgICBleHBlY3RlZF9tZXNzYWdlIC0tIGV4cGVjdGVkIGV4Y2VwdGlvbiBtZXNzYWdlIChvciBwYXR0ZXJuCisgICAgICAgICAgICBpZiBhIGNvbXBpbGVkIHJlZ2V4IG9iamVjdCkKKworICAgICAgICBSZXR1cm5zIHRoZSBleGNlcHRpb24gcmFpc2VkIGZvciBmdXJ0aGVyIHRlc3RpbmcuCisgICAgICAgICIiIgorICAgICAgICBpZiBhcmdzIGlzIE5vbmU6CisgICAgICAgICAgICBhcmdzID0gKCkKKyAgICAgICAgaWYga3dhcmdzIGlzIE5vbmU6CisgICAgICAgICAgICBrd2FyZ3MgPSB7fQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBleGNlcHQgZXhwZWN0ZWRfZXhjZXB0aW9uLCBlcnI6CisgICAgICAgICAgICBhY3R1YWxfbWVzc2FnZSA9IHN0cihlcnIpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4cGVjdGVkX21lc3NhZ2UsIHJldHlwZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkX21lc3NhZ2Uuc2VhcmNoKGFjdHVhbF9tZXNzYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiXAorZXhwZWN0ZWQgZXhjZXB0aW9uIG1lc3NhZ2UgcGF0dGVybjoKKy8lcy8KK2FjdHVhbCBleGNlcHRpb24gbWVzc2FnZToKKycnJyVzJycnCisiIiIgJSAoZXhwZWN0ZWRfbWVzc2FnZS5wYXR0ZXJuLCBhY3R1YWxfbWVzc2FnZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsX21lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9tZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiXAorZXhwZWN0ZWQgZXhjZXB0aW9uIG1lc3NhZ2U6CisnJyclcycnJworYWN0dWFsIGV4Y2VwdGlvbiBtZXNzYWdlOgorJycnJXMnJycKKyIiIiAlIChleHBlY3RlZF9tZXNzYWdlLCBhY3R1YWxfbWVzc2FnZSkpCisKKyAgICAgICAgICAgIHJldHVybiBlcnIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiIiJleHBlY3RlZCBleGNlcHRpb24gJShleHBlY3RlZF9leGNlcHRpb24pcyBub3QgcmFpc2VkCitjYWxsZWQgJShmdW5jKXIKK3dpdGggYXJncyAlKGFyZ3MpcgorYW5kIGt3YXJncyAlKGt3YXJncylyCisiIiIgJSBsb2NhbHMgKCkpCisKKworICAgICMgLS0gQXNzZXJ0aW9ucyB1c2VkIGluIG1vcmUgdGhhbiBvbmUgY2xhc3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGRlZiBhc3NlcnRQYXJzZUZhaWwoc2VsZiwgY21kbGluZV9hcmdzLCBleHBlY3RlZF9vdXRwdXQpOgorICAgICAgICAiIiIKKyAgICAgICAgQXNzZXJ0IHRoZSBwYXJzZXIgZmFpbHMgd2l0aCB0aGUgZXhwZWN0ZWQgbWVzc2FnZS4gIENhbGxlcgorICAgICAgICBtdXN0IGVuc3VyZSB0aGF0IHNlbGYucGFyc2VyIGlzIGFuIEludGVyY2VwdGluZ09wdGlvblBhcnNlci4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnBhcnNlX2FyZ3MoY21kbGluZV9hcmdzKQorICAgICAgICBleGNlcHQgSW50ZXJjZXB0ZWRFcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZXJyb3JfbWVzc2FnZSwgZXhwZWN0ZWRfb3V0cHV0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgiZXhwZWN0ZWQgcGFyc2UgZmFpbHVyZSIpCisKKyAgICBkZWYgYXNzZXJ0T3V0cHV0KHNlbGYsCisgICAgICAgICAgICAgICAgICAgICBjbWRsaW5lX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9zdGF0dXM9MCwKKyAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2Vycm9yPU5vbmUpOgorICAgICAgICAiIiJBc3NlcnQgdGhlIHBhcnNlciBwcmludHMgdGhlIGV4cGVjdGVkIG91dHB1dCBvbiBzdGRvdXQuIiIiCisgICAgICAgIHNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICBlbmNvZGluZyA9IGdldGF0dHIoc2F2ZV9zdGRvdXQsICdlbmNvZGluZycsIE5vbmUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gU3RyaW5nSU8oKQorICAgICAgICAgICAgICAgIGlmIGVuY29kaW5nOgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmVuY29kaW5nID0gZW5jb2RpbmcKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9hcmdzKGNtZGxpbmVfYXJncykKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gc3lzLnN0ZG91dC5nZXR2YWx1ZSgpCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0CisKKyAgICAgICAgZXhjZXB0IEludGVyY2VwdGVkRXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICAgICB0eXBlKG91dHB1dCkgaXMgdHlwZXMuU3RyaW5nVHlwZSwKKyAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgb3V0cHV0IHRvIGJlIGFuIG9yZGluYXJ5IHN0cmluZywgbm90ICVyIgorICAgICAgICAgICAgICAgICUgdHlwZShvdXRwdXQpKQorCisgICAgICAgICAgICBpZiBvdXRwdXQgIT0gZXhwZWN0ZWRfb3V0cHV0OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQ6IFxuJycnXG4iICsgZXhwZWN0ZWRfb3V0cHV0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIicnJ1xuYnV0IGdvdCBcbicnJ1xuIiArIG91dHB1dCArICInJyciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZXhpdF9zdGF0dXMsIGV4cGVjdGVkX3N0YXR1cykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmV4aXRfbWVzc2FnZSwgZXhwZWN0ZWRfZXJyb3IpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCJleHBlY3RlZCBwYXJzZXIuZXhpdCgpIikKKworICAgIGRlZiBhc3NlcnRUeXBlRXJyb3Ioc2VsZiwgZnVuYywgZXhwZWN0ZWRfbWVzc2FnZSwgKmFyZ3MpOgorICAgICAgICAiIiJBc3NlcnQgdGhhdCBUeXBlRXJyb3IgaXMgcmFpc2VkIHdoZW4gZXhlY3V0aW5nIGZ1bmMuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1bmMsIGFyZ3MsIE5vbmUsIFR5cGVFcnJvciwgZXhwZWN0ZWRfbWVzc2FnZSkKKworICAgIGRlZiBhc3NlcnRIZWxwKHNlbGYsIHBhcnNlciwgZXhwZWN0ZWRfaGVscCk6CisgICAgICAgIGFjdHVhbF9oZWxwID0gcGFyc2VyLmZvcm1hdF9oZWxwKCkKKyAgICAgICAgaWYgYWN0dWFsX2hlbHAgIT0gZXhwZWN0ZWRfaGVscDoKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAnaGVscCB0ZXh0IGZhaWx1cmU7IGV4cGVjdGVkOlxuIicgKworICAgICAgICAgICAgICAgIGV4cGVjdGVkX2hlbHAgKyAnIjsgZ290OlxuIicgKworICAgICAgICAgICAgICAgIGFjdHVhbF9oZWxwICsgJyJcbicpCisKKyMgLS0gVGVzdCBtYWtlX29wdGlvbigpIGFrYSBPcHRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byB0ZXN0IGNvcnJlY3Qgb3B0aW9ucyBoZXJlLiAgQWxsIHRoZSB0ZXN0cyBpbiB0aGUKKyMgcGFyc2VyLnBhcnNlX2FyZ3MoKSBzZWN0aW9uIGRlYWwgd2l0aCB0aG9zZSwgYmVjYXVzZSB0aGV5J3JlIG5lZWRlZAorIyB0aGVyZS4KKworY2xhc3MgVGVzdE9wdGlvbkNoZWNrcyhCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT1TVVBQUkVTU19VU0FHRSkKKworICAgIGRlZiBhc3NlcnRPcHRpb25FcnJvcihzZWxmLCBleHBlY3RlZF9tZXNzYWdlLCBhcmdzPVtdLCBrd2FyZ3M9e30pOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtYWtlX29wdGlvbiwgYXJncywga3dhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25FcnJvciwgZXhwZWN0ZWRfbWVzc2FnZSkKKworICAgIGRlZiB0ZXN0X29wdF9zdHJpbmdfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKG1ha2Vfb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXQgbGVhc3Qgb25lIG9wdGlvbiBzdHJpbmcgbXVzdCBiZSBzdXBwbGllZCIpCisKKyAgICBkZWYgdGVzdF9vcHRfc3RyaW5nX3Rvb19zaG9ydChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPcHRpb25FcnJvcigKKyAgICAgICAgICAgICJpbnZhbGlkIG9wdGlvbiBzdHJpbmcgJ2InOiBtdXN0IGJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGxvbmciLAorICAgICAgICAgICAgWyJiIl0pCisKKyAgICBkZWYgdGVzdF9vcHRfc3RyaW5nX3Nob3J0X2ludmFsaWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T3B0aW9uRXJyb3IoCisgICAgICAgICAgICAiaW52YWxpZCBzaG9ydCBvcHRpb24gc3RyaW5nICctLSc6IG11c3QgYmUgIgorICAgICAgICAgICAgIm9mIHRoZSBmb3JtIC14LCAoeCBhbnkgbm9uLWRhc2ggY2hhcikiLAorICAgICAgICAgICAgWyItLSJdKQorCisgICAgZGVmIHRlc3Rfb3B0X3N0cmluZ19sb25nX2ludmFsaWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T3B0aW9uRXJyb3IoCisgICAgICAgICAgICAiaW52YWxpZCBsb25nIG9wdGlvbiBzdHJpbmcgJy0tLSc6ICIKKyAgICAgICAgICAgICJtdXN0IHN0YXJ0IHdpdGggLS0sIGZvbGxvd2VkIGJ5IG5vbi1kYXNoIiwKKyAgICAgICAgICAgIFsiLS0tIl0pCisKKyAgICBkZWYgdGVzdF9hdHRyX2ludmFsaWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T3B0aW9uRXJyb3IoCisgICAgICAgICAgICAib3B0aW9uIC1iOiBpbnZhbGlkIGtleXdvcmQgYXJndW1lbnRzOiBiYXIsIGZvbyIsCisgICAgICAgICAgICBbIi1iIl0sIHsnZm9vJzogTm9uZSwgJ2Jhcic6IE5vbmV9KQorCisgICAgZGVmIHRlc3RfYWN0aW9uX2ludmFsaWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T3B0aW9uRXJyb3IoCisgICAgICAgICAgICAib3B0aW9uIC1iOiBpbnZhbGlkIGFjdGlvbjogJ2ZvbyciLAorICAgICAgICAgICAgWyItYiJdLCB7J2FjdGlvbic6ICdmb28nfSkKKworICAgIGRlZiB0ZXN0X3R5cGVfaW52YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPcHRpb25FcnJvcigKKyAgICAgICAgICAgICJvcHRpb24gLWI6IGludmFsaWQgb3B0aW9uIHR5cGU6ICdmb28nIiwKKyAgICAgICAgICAgIFsiLWIiXSwgeyd0eXBlJzogJ2Zvbyd9KQorICAgICAgICBzZWxmLmFzc2VydE9wdGlvbkVycm9yKAorICAgICAgICAgICAgIm9wdGlvbiAtYjogaW52YWxpZCBvcHRpb24gdHlwZTogJ3R1cGxlJyIsCisgICAgICAgICAgICBbIi1iIl0sIHsndHlwZSc6IHR1cGxlfSkKKworICAgIGRlZiB0ZXN0X25vX3R5cGVfZm9yX2FjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPcHRpb25FcnJvcigKKyAgICAgICAgICAgICJvcHRpb24gLWI6IG11c3Qgbm90IHN1cHBseSBhIHR5cGUgZm9yIGFjdGlvbiAnY291bnQnIiwKKyAgICAgICAgICAgIFsiLWIiXSwgeydhY3Rpb24nOiAnY291bnQnLCAndHlwZSc6ICdpbnQnfSkKKworICAgIGRlZiB0ZXN0X25vX2Nob2ljZXNfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPcHRpb25FcnJvcigKKyAgICAgICAgICAgICJvcHRpb24gLWIvLS1iYWQ6IG11c3Qgc3VwcGx5IGEgbGlzdCBvZiAiCisgICAgICAgICAgICAiY2hvaWNlcyBmb3IgdHlwZSAnY2hvaWNlJyIsCisgICAgICAgICAgICBbIi1iIiwgIi0tYmFkIl0sIHsndHlwZSc6ICJjaG9pY2UifSkKKworICAgIGRlZiB0ZXN0X2JhZF9jaG9pY2VzX2xpc3Qoc2VsZik6CisgICAgICAgIHR5cGVuYW1lID0gdHlwZSgnJykuX19uYW1lX18KKyAgICAgICAgc2VsZi5hc3NlcnRPcHRpb25FcnJvcigKKyAgICAgICAgICAgICJvcHRpb24gLWIvLS1iYWQ6IGNob2ljZXMgbXVzdCBiZSBhIGxpc3Qgb2YgIgorICAgICAgICAgICAgInN0cmluZ3MgKCclcycgc3VwcGxpZWQpIiAlIHR5cGVuYW1lLAorICAgICAgICAgICAgWyItYiIsICItLWJhZCJdLAorICAgICAgICAgICAgeyd0eXBlJzogImNob2ljZSIsICdjaG9pY2VzJzoiYmFkIGNob2ljZXMifSkKKworICAgIGRlZiB0ZXN0X25vX2Nob2ljZXNfZm9yX3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T3B0aW9uRXJyb3IoCisgICAgICAgICAgICAib3B0aW9uIC1iOiBtdXN0IG5vdCBzdXBwbHkgY2hvaWNlcyBmb3IgdHlwZSAnaW50JyIsCisgICAgICAgICAgICBbIi1iIl0sIHsndHlwZSc6ICdpbnQnLCAnY2hvaWNlcyc6ImJhZCJ9KQorCisgICAgZGVmIHRlc3Rfbm9fY29uc3RfZm9yX2FjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPcHRpb25FcnJvcigKKyAgICAgICAgICAgICJvcHRpb24gLWI6ICdjb25zdCcgbXVzdCBub3QgYmUgc3VwcGxpZWQgZm9yIGFjdGlvbiAnc3RvcmUnIiwKKyAgICAgICAgICAgIFsiLWIiXSwgeydhY3Rpb24nOiAnc3RvcmUnLCAnY29uc3QnOiAxfSkKKworICAgIGRlZiB0ZXN0X25vX25hcmdzX2Zvcl9hY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T3B0aW9uRXJyb3IoCisgICAgICAgICAgICAib3B0aW9uIC1iOiAnbmFyZ3MnIG11c3Qgbm90IGJlIHN1cHBsaWVkIGZvciBhY3Rpb24gJ2NvdW50JyIsCisgICAgICAgICAgICBbIi1iIl0sIHsnYWN0aW9uJzogJ2NvdW50JywgJ25hcmdzJzogMn0pCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja19ub3RfY2FsbGFibGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T3B0aW9uRXJyb3IoCisgICAgICAgICAgICAib3B0aW9uIC1iOiBjYWxsYmFjayBub3QgY2FsbGFibGU6ICdmb28nIiwKKyAgICAgICAgICAgIFsiLWIiXSwgeydhY3Rpb24nOiAnY2FsbGJhY2snLAorICAgICAgICAgICAgICAgICAgICAgJ2NhbGxiYWNrJzogJ2Zvbyd9KQorCisgICAgZGVmIGR1bW15KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja19hcmdzX25vX3R1cGxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE9wdGlvbkVycm9yKAorICAgICAgICAgICAgIm9wdGlvbiAtYjogY2FsbGJhY2tfYXJncywgaWYgc3VwcGxpZWQsICIKKyAgICAgICAgICAgICJtdXN0IGJlIGEgdHVwbGU6IG5vdCAnZm9vJyIsCisgICAgICAgICAgICBbIi1iIl0sIHsnYWN0aW9uJzogJ2NhbGxiYWNrJywKKyAgICAgICAgICAgICAgICAgICAgICdjYWxsYmFjayc6IHNlbGYuZHVtbXksCisgICAgICAgICAgICAgICAgICAgICAnY2FsbGJhY2tfYXJncyc6ICdmb28nfSkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX2t3YXJnc19ub19kaWN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE9wdGlvbkVycm9yKAorICAgICAgICAgICAgIm9wdGlvbiAtYjogY2FsbGJhY2tfa3dhcmdzLCBpZiBzdXBwbGllZCwgIgorICAgICAgICAgICAgIm11c3QgYmUgYSBkaWN0OiBub3QgJ2ZvbyciLAorICAgICAgICAgICAgWyItYiJdLCB7J2FjdGlvbic6ICdjYWxsYmFjaycsCisgICAgICAgICAgICAgICAgICAgICAnY2FsbGJhY2snOiBzZWxmLmR1bW15LAorICAgICAgICAgICAgICAgICAgICAgJ2NhbGxiYWNrX2t3YXJncyc6ICdmb28nfSkKKworICAgIGRlZiB0ZXN0X25vX2NhbGxiYWNrX2Zvcl9hY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T3B0aW9uRXJyb3IoCisgICAgICAgICAgICAib3B0aW9uIC1iOiBjYWxsYmFjayBzdXBwbGllZCAoJ2ZvbycpIGZvciBub24tY2FsbGJhY2sgb3B0aW9uIiwKKyAgICAgICAgICAgIFsiLWIiXSwgeydhY3Rpb24nOiAnc3RvcmUnLAorICAgICAgICAgICAgICAgICAgICAgJ2NhbGxiYWNrJzogJ2Zvbyd9KQorCisgICAgZGVmIHRlc3Rfbm9fY2FsbGJhY2tfYXJnc19mb3JfYWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE9wdGlvbkVycm9yKAorICAgICAgICAgICAgIm9wdGlvbiAtYjogY2FsbGJhY2tfYXJncyBzdXBwbGllZCBmb3Igbm9uLWNhbGxiYWNrIG9wdGlvbiIsCisgICAgICAgICAgICBbIi1iIl0sIHsnYWN0aW9uJzogJ3N0b3JlJywKKyAgICAgICAgICAgICAgICAgICAgICdjYWxsYmFja19hcmdzJzogJ2Zvbyd9KQorCisgICAgZGVmIHRlc3Rfbm9fY2FsbGJhY2tfa3dhcmdzX2Zvcl9hY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T3B0aW9uRXJyb3IoCisgICAgICAgICAgICAib3B0aW9uIC1iOiBjYWxsYmFja19rd2FyZ3Mgc3VwcGxpZWQgZm9yIG5vbi1jYWxsYmFjayBvcHRpb24iLAorICAgICAgICAgICAgWyItYiJdLCB7J2FjdGlvbic6ICdzdG9yZScsCisgICAgICAgICAgICAgICAgICAgICAnY2FsbGJhY2tfa3dhcmdzJzogJ2Zvbyd9KQorCitjbGFzcyBUZXN0T3B0aW9uUGFyc2VyKEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyID0gT3B0aW9uUGFyc2VyKCkKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS12ZXJib3NlIiwgIi1uIiwgIi0tbm9pc3kiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJ2ZXJib3NlIikKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXEiLCAiLS1xdWlldCIsICItLXNpbGVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJ2ZXJib3NlIikKKworICAgIGRlZiB0ZXN0X2FkZF9vcHRpb25fbm9fT3B0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcihzZWxmLnBhcnNlci5hZGRfb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGFuIE9wdGlvbiBpbnN0YW5jZTogTm9uZSIsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9hZGRfb3B0aW9uX2ludmFsaWRfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcihzZWxmLnBhcnNlci5hZGRfb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBhcmd1bWVudHMiLCBOb25lLCBOb25lKQorCisgICAgZGVmIHRlc3RfZ2V0X29wdGlvbihzZWxmKToKKyAgICAgICAgb3B0MSA9IHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi12IikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9wdDEsIE9wdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHQxLl9zaG9ydF9vcHRzLCBbIi12IiwgIi1uIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0MS5fbG9uZ19vcHRzLCBbIi0tdmVyYm9zZSIsICItLW5vaXN5Il0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0MS5hY3Rpb24sICJzdG9yZV90cnVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHQxLmRlc3QsICJ2ZXJib3NlIikKKworICAgIGRlZiB0ZXN0X2dldF9vcHRpb25fZXF1YWxzKHNlbGYpOgorICAgICAgICBvcHQxID0gc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXYiKQorICAgICAgICBvcHQyID0gc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLS12ZXJib3NlIikKKyAgICAgICAgb3B0MyA9IHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi1uIikKKyAgICAgICAgb3B0NCA9IHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi0tbm9pc3kiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3B0MSBpcyBvcHQyIGlzIG9wdDMgaXMgb3B0NCkKKworICAgIGRlZiB0ZXN0X2hhc19vcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItdiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLS12ZXJib3NlIikpCisKKyAgICBkZWYgYXNzZXJ0VHJ1ZXJlbW92ZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItdiIpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItLXZlcmJvc2UiKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLW4iKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLS1ub2lzeSIpIGlzIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItdiIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucGFyc2VyLmhhc19vcHRpb24oIi0tdmVyYm9zZSIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucGFyc2VyLmhhc19vcHRpb24oIi1uIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLS1ub2lzeSIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhcnNlci5oYXNfb3B0aW9uKCItcSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXJzZXIuaGFzX29wdGlvbigiLS1zaWxlbnQiKSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9zaG9ydF9vcHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLnJlbW92ZV9vcHRpb24oIi1uIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlcmVtb3ZlZCgpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfbG9uZ19vcHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLnJlbW92ZV9vcHRpb24oIi0tdmVyYm9zZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZXJlbW92ZWQoKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX25vbmV4aXN0ZW50KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLnBhcnNlci5yZW1vdmVfb3B0aW9uLCAoJ2ZvbycsKSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVFcnJvciwgIm5vIHN1Y2ggb3B0aW9uICdmb28nIikKKworICAgIGRlZiB0ZXN0X3JlZmxlYWsoc2VsZik6CisgICAgICAgICMgSWYgYW4gT3B0aW9uUGFyc2VyIGlzIGNhcnJ5aW5nIGFyb3VuZCBhIHJlZmVyZW5jZSB0byBhIGxhcmdlCisgICAgICAgICMgb2JqZWN0LCB2YXJpb3VzIGN5Y2xlcyBjYW4gcHJldmVudCBpdCBmcm9tIGJlaW5nIEdDJ2QgaW4KKyAgICAgICAgIyBhIHRpbWVseSBmYXNoaW9uLiAgZGVzdHJveSgpIGJyZWFrcyB0aGUgY3ljbGVzIHRvIGVuc3VyZSBzdHVmZgorICAgICAgICAjIGNhbiBiZSBjbGVhbmVkIHVwLgorICAgICAgICBiaWdfdGhpbmcgPSBbNDJdCisgICAgICAgIHJlZmNvdW50ID0gc3lzLmdldHJlZmNvdW50KGJpZ190aGluZykKKyAgICAgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1hIiwgIi0tYWFhcmdnaCIpCisgICAgICAgIHBhcnNlci5iaWdfdGhpbmcgPSBiaWdfdGhpbmcKKworICAgICAgICBwYXJzZXIuZGVzdHJveSgpCisgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKHJlZmNvdW50LCBzeXMuZ2V0cmVmY291bnQoYmlnX3RoaW5nKSkKKyAgICAgICAgZGVsIHBhcnNlcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZmNvdW50LCBzeXMuZ2V0cmVmY291bnQoYmlnX3RoaW5nKSkKKworCitjbGFzcyBUZXN0T3B0aW9uVmFsdWVzKEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgdmFsdWVzID0gVmFsdWVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJzKHZhbHVlcyksIHt9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcywge30pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodmFsdWVzLCB7ImZvbyI6ICJiYXIifSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh2YWx1ZXMsICIiKQorCisgICAgICAgIGRpY3QgPSB7ImZvbyI6ICJiYXIiLCAiYmF6IjogNDJ9CisgICAgICAgIHZhbHVlcyA9IFZhbHVlcyhkZWZhdWx0cz1kaWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnModmFsdWVzKSwgZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXMsIGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodmFsdWVzLCB7ImZvbyI6ICJiYXIifSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh2YWx1ZXMsIHt9KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHZhbHVlcywgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodmFsdWVzLCBbXSkKKworCitjbGFzcyBUZXN0VHlwZUFsaWFzZXMoQmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBPcHRpb25QYXJzZXIoKQorCisgICAgZGVmIHRlc3Rfc3RyX2FsaWFzZXNfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItcyIsIHR5cGU9InN0ciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXMiKS50eXBlLCAic3RyaW5nIikKKworICAgIGRlZiB0ZXN0X25ld190eXBlX29iamVjdChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXMiLCB0eXBlPXN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItcyIpLnR5cGUsICJzdHJpbmciKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCIteCIsIHR5cGU9aW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi14IikudHlwZSwgImludCIpCisKKyAgICBkZWYgdGVzdF9vbGRfdHlwZV9vYmplY3Qoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgdHlwZT10eXBlcy5TdHJpbmdUeXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi1zIikudHlwZSwgInN0cmluZyIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi14IiwgdHlwZT10eXBlcy5JbnRUeXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi14IikudHlwZSwgImludCIpCisKKworIyBDdXN0b20gdHlwZSBmb3IgdGVzdGluZyBwcm9jZXNzaW5nIG9mIGRlZmF1bHQgdmFsdWVzLgorX3RpbWVfdW5pdHMgPSB7ICdzJyA6IDEsICdtJyA6IDYwLCAnaCcgOiA2MCo2MCwgJ2QnIDogNjAqNjAqMjQgfQorCitkZWYgX2NoZWNrX2R1cmF0aW9uKG9wdGlvbiwgb3B0LCB2YWx1ZSk6CisgICAgdHJ5OgorICAgICAgICBpZiB2YWx1ZVstMV0uaXNkaWdpdCgpOgorICAgICAgICAgICAgcmV0dXJuIGludCh2YWx1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBpbnQodmFsdWVbOi0xXSkgKiBfdGltZV91bml0c1t2YWx1ZVstMV1dCisgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBJbmRleEVycm9yKToKKyAgICAgICAgcmFpc2UgT3B0aW9uVmFsdWVFcnJvcigKKyAgICAgICAgICAgICdvcHRpb24gJXM6IGludmFsaWQgZHVyYXRpb246ICVyJyAlIChvcHQsIHZhbHVlKSkKKworY2xhc3MgRHVyYXRpb25PcHRpb24oT3B0aW9uKToKKyAgICBUWVBFUyA9IE9wdGlvbi5UWVBFUyArICgnZHVyYXRpb24nLCkKKyAgICBUWVBFX0NIRUNLRVIgPSBjb3B5LmNvcHkoT3B0aW9uLlRZUEVfQ0hFQ0tFUikKKyAgICBUWVBFX0NIRUNLRVJbJ2R1cmF0aW9uJ10gPSBfY2hlY2tfZHVyYXRpb24KKworY2xhc3MgVGVzdERlZmF1bHRWYWx1ZXMoQmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBPcHRpb25QYXJzZXIoKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLXZlcmJvc2UiLCBkZWZhdWx0PVRydWUpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1xIiwgIi0tcXVpZXQiLCBkZXN0PSd2ZXJib3NlJykKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLW4iLCB0eXBlPSJpbnQiLCBkZWZhdWx0PTM3KQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItbSIsIHR5cGU9ImludCIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1zIiwgZGVmYXVsdD0iZm9vIikKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLXQiKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItdSIsIGRlZmF1bHQ9Tm9uZSkKKyAgICAgICAgc2VsZi5leHBlY3RlZCA9IHsgJ3ZlcmJvc2UnOiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnbic6IDM3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAnbSc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzJzogImZvbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICd0JzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3UnOiBOb25lIH0KKworICAgIGRlZiB0ZXN0X2Jhc2ljX2RlZmF1bHRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFyc2VyLmdldF9kZWZhdWx0X3ZhbHVlcygpLCBzZWxmLmV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfZGVmYXVsdHNfcG9zdChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIuc2V0X2RlZmF1bHRzKG49NDIsIG09LTEwMCkKKyAgICAgICAgc2VsZi5leHBlY3RlZC51cGRhdGUoeyduJzogNDIsICdtJzogLTEwMH0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIuZ2V0X2RlZmF1bHRfdmFsdWVzKCksIHNlbGYuZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9taXhlZF9kZWZhdWx0c19wcmUoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLnNldF9kZWZhdWx0cyh4PSJiYXJmIiwgeT0iYmxhaCIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi14IiwgZGVmYXVsdD0iZnJvYiIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi15IikKKworICAgICAgICBzZWxmLmV4cGVjdGVkLnVwZGF0ZSh7J3gnOiAiZnJvYiIsICd5JzogImJsYWgifSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5nZXRfZGVmYXVsdF92YWx1ZXMoKSwgc2VsZi5leHBlY3RlZCkKKworICAgICAgICBzZWxmLnBhcnNlci5yZW1vdmVfb3B0aW9uKCIteSIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi15IiwgZGVmYXVsdD1Ob25lKQorICAgICAgICBzZWxmLmV4cGVjdGVkLnVwZGF0ZSh7J3knOiBOb25lfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5nZXRfZGVmYXVsdF92YWx1ZXMoKSwgc2VsZi5leHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIub3B0aW9uX2NsYXNzID0gRHVyYXRpb25PcHRpb24KKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLWQiLCB0eXBlPSJkdXJhdGlvbiIsIGRlZmF1bHQ9MzAwKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItZSIsIHR5cGU9ImR1cmF0aW9uIiwgZGVmYXVsdD0iNm0iKQorICAgICAgICBzZWxmLnBhcnNlci5zZXRfZGVmYXVsdHMobj0iNDIiKQorICAgICAgICBzZWxmLmV4cGVjdGVkLnVwZGF0ZSh7J2QnOiAzMDAsICdlJzogMzYwLCAnbic6IDQyfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5nZXRfZGVmYXVsdF92YWx1ZXMoKSwgc2VsZi5leHBlY3RlZCkKKworICAgICAgICBzZWxmLnBhcnNlci5zZXRfcHJvY2Vzc19kZWZhdWx0X3ZhbHVlcyhGYWxzZSkKKyAgICAgICAgc2VsZi5leHBlY3RlZC51cGRhdGUoeydkJzogMzAwLCAnZSc6ICI2bSIsICduJzogIjQyIn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIuZ2V0X2RlZmF1bHRfdmFsdWVzKCksIHNlbGYuZXhwZWN0ZWQpCisKKworY2xhc3MgVGVzdFByb2dOYW1lKEJhc2VUZXN0KToKKyAgICAiIiIKKyAgICBUZXN0IHRoYXQgJXByb2cgZXhwYW5kcyB0byB0aGUgcmlnaHQgdGhpbmcgaW4gdXNhZ2UsIHZlcnNpb24sCisgICAgYW5kIGhlbHAgc3RyaW5ncy4KKyAgICAiIiIKKworICAgIGRlZiBhc3NlcnRVc2FnZShzZWxmLCBwYXJzZXIsIGV4cGVjdGVkX3VzYWdlKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0X3VzYWdlKCksIGV4cGVjdGVkX3VzYWdlKQorCisgICAgZGVmIGFzc2VydFZlcnNpb24oc2VsZiwgcGFyc2VyLCBleHBlY3RlZF92ZXJzaW9uKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0X3ZlcnNpb24oKSwgZXhwZWN0ZWRfdmVyc2lvbikKKworCisgICAgZGVmIHRlc3RfZGVmYXVsdF9wcm9nbmFtZShzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBwcm9ncmFtIG5hbWUgdGFrZW4gZnJvbSBzeXMuYXJndlswXSBieSBkZWZhdWx0LgorICAgICAgICBzYXZlX2FyZ3YgPSBzeXMuYXJndls6XQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuYXJndlswXSA9IG9zLnBhdGguam9pbigiZm9vIiwgImJhciIsICJiYXoucHkiKQorICAgICAgICAgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKCIlcHJvZyAuLi4iLCB2ZXJzaW9uPSIlcHJvZyAxLjIiKQorICAgICAgICAgICAgZXhwZWN0ZWRfdXNhZ2UgPSAiVXNhZ2U6IGJhei5weSAuLi5cbiIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VXNhZ2UocGFyc2VyLCBleHBlY3RlZF91c2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VmVyc2lvbihwYXJzZXIsICJiYXoucHkgMS4yIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SGVscChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdXNhZ2UgKyAiXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3B0aW9uczpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAtLXZlcnNpb24gICBzaG93IHByb2dyYW0ncyB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXRcbiIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuYXJndls6XSA9IHNhdmVfYXJndgorCisgICAgZGVmIHRlc3RfY3VzdG9tX3Byb2duYW1lKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIocHJvZz0idGhpbmd5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb249IiVwcm9nIDAuMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZT0iJXByb2cgYXJnIGFyZyIpCisgICAgICAgIHBhcnNlci5yZW1vdmVfb3B0aW9uKCItaCIpCisgICAgICAgIHBhcnNlci5yZW1vdmVfb3B0aW9uKCItLXZlcnNpb24iKQorICAgICAgICBleHBlY3RlZF91c2FnZSA9ICJVc2FnZTogdGhpbmd5IGFyZyBhcmdcbiIKKyAgICAgICAgc2VsZi5hc3NlcnRVc2FnZShwYXJzZXIsIGV4cGVjdGVkX3VzYWdlKQorICAgICAgICBzZWxmLmFzc2VydFZlcnNpb24ocGFyc2VyLCAidGhpbmd5IDAuMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SGVscChwYXJzZXIsIGV4cGVjdGVkX3VzYWdlICsgIlxuIikKKworCitjbGFzcyBUZXN0RXhwYW5kRGVmYXVsdHMoQmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBPcHRpb25QYXJzZXIocHJvZz0idGVzdCIpCisgICAgICAgIHNlbGYuaGVscF9wcmVmaXggPSAiIiJcCitVc2FnZTogdGVzdCBbb3B0aW9uc10KKworT3B0aW9uczoKKyAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyIiIgorICAgICAgICBzZWxmLmZpbGVfaGVscCA9ICJyZWFkIGZyb20gRklMRSBbZGVmYXVsdDogJWRlZmF1bHRdIgorICAgICAgICBzZWxmLmV4cGVjdGVkX2hlbHBfZmlsZSA9IHNlbGYuaGVscF9wcmVmaXggKyBcCisgICAgICAgICAgICAiICAtZiBGSUxFLCAtLWZpbGU9RklMRSAgcmVhZCBmcm9tIEZJTEUgW2RlZmF1bHQ6IGZvby50eHRdXG4iCisgICAgICAgIHNlbGYuZXhwZWN0ZWRfaGVscF9ub25lID0gc2VsZi5oZWxwX3ByZWZpeCArIFwKKyAgICAgICAgICAgICIgIC1mIEZJTEUsIC0tZmlsZT1GSUxFICByZWFkIGZyb20gRklMRSBbZGVmYXVsdDogbm9uZV1cbiIKKworICAgIGRlZiB0ZXN0X29wdGlvbl9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImZvby50eHQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9c2VsZi5maWxlX2hlbHApCisgICAgICAgIHNlbGYuYXNzZXJ0SGVscChzZWxmLnBhcnNlciwgc2VsZi5leHBlY3RlZF9oZWxwX2ZpbGUpCisKKyAgICBkZWYgdGVzdF9wYXJzZXJfZGVmYXVsdF8xKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9c2VsZi5maWxlX2hlbHApCisgICAgICAgIHNlbGYucGFyc2VyLnNldF9kZWZhdWx0KCdmaWxlJywgImZvby50eHQiKQorICAgICAgICBzZWxmLmFzc2VydEhlbHAoc2VsZi5wYXJzZXIsIHNlbGYuZXhwZWN0ZWRfaGVscF9maWxlKQorCisgICAgZGVmIHRlc3RfcGFyc2VyX2RlZmF1bHRfMihzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPXNlbGYuZmlsZV9oZWxwKQorICAgICAgICBzZWxmLnBhcnNlci5zZXRfZGVmYXVsdHMoZmlsZT0iZm9vLnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SGVscChzZWxmLnBhcnNlciwgc2VsZi5leHBlY3RlZF9oZWxwX2ZpbGUpCisKKyAgICBkZWYgdGVzdF9ub19kZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9c2VsZi5maWxlX2hlbHApCisgICAgICAgIHNlbGYuYXNzZXJ0SGVscChzZWxmLnBhcnNlciwgc2VsZi5leHBlY3RlZF9oZWxwX25vbmUpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X25vbmVfMShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLWYiLCAiLS1maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1zZWxmLmZpbGVfaGVscCkKKyAgICAgICAgc2VsZi5hc3NlcnRIZWxwKHNlbGYucGFyc2VyLCBzZWxmLmV4cGVjdGVkX2hlbHBfbm9uZSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfbm9uZV8yKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9c2VsZi5maWxlX2hlbHApCisgICAgICAgIHNlbGYucGFyc2VyLnNldF9kZWZhdWx0cyhmaWxlPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SGVscChzZWxmLnBhcnNlciwgc2VsZi5leHBlY3RlZF9oZWxwX25vbmUpCisKKyAgICBkZWYgdGVzdF9mbG9hdF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKAorICAgICAgICAgICAgIi1wIiwgIi0tcHJvYiIsCisgICAgICAgICAgICBoZWxwPSJibG93IHVwIHdpdGggcHJvYmFiaWxpdHkgUFJPQiBbZGVmYXVsdDogJWRlZmF1bHRdIikKKyAgICAgICAgc2VsZi5wYXJzZXIuc2V0X2RlZmF1bHRzKHByb2I9MC40MykKKyAgICAgICAgZXhwZWN0ZWRfaGVscCA9IHNlbGYuaGVscF9wcmVmaXggKyBcCisgICAgICAgICAgICAiICAtcCBQUk9CLCAtLXByb2I9UFJPQiAgYmxvdyB1cCB3aXRoIHByb2JhYmlsaXR5IFBST0IgW2RlZmF1bHQ6IDAuNDNdXG4iCisgICAgICAgIHNlbGYuYXNzZXJ0SGVscChzZWxmLnBhcnNlciwgZXhwZWN0ZWRfaGVscCkKKworICAgIGRlZiB0ZXN0X2FsdF9leHBhbmQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iZm9vLnR4dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0icmVhZCBmcm9tIEZJTEUgW2RlZmF1bHQ6ICpERUZBVUxUKl0iKQorICAgICAgICBzZWxmLnBhcnNlci5mb3JtYXR0ZXIuZGVmYXVsdF90YWcgPSAiKkRFRkFVTFQqIgorICAgICAgICBzZWxmLmFzc2VydEhlbHAoc2VsZi5wYXJzZXIsIHNlbGYuZXhwZWN0ZWRfaGVscF9maWxlKQorCisgICAgZGVmIHRlc3Rfbm9fZXhwYW5kKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImZvby50eHQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InJlYWQgZnJvbSAlZGVmYXVsdCBmaWxlIikKKyAgICAgICAgc2VsZi5wYXJzZXIuZm9ybWF0dGVyLmRlZmF1bHRfdGFnID0gTm9uZQorICAgICAgICBleHBlY3RlZF9oZWxwID0gc2VsZi5oZWxwX3ByZWZpeCArIFwKKyAgICAgICAgICAgICIgIC1mIEZJTEUsIC0tZmlsZT1GSUxFICByZWFkIGZyb20gJWRlZmF1bHQgZmlsZVxuIgorICAgICAgICBzZWxmLmFzc2VydEhlbHAoc2VsZi5wYXJzZXIsIGV4cGVjdGVkX2hlbHApCisKKworIyAtLSBUZXN0IHBhcnNlci5wYXJzZV9hcmdzKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RTdGFuZGFyZChCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBvcHRpb25zID0gW21ha2Vfb3B0aW9uKCItYSIsIHR5cGU9InN0cmluZyIpLAorICAgICAgICAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItYiIsICItLWJvbyIsIHR5cGU9ImludCIsIGRlc3Q9J2JvbycpLAorICAgICAgICAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLWZvbyIsIGFjdGlvbj0iYXBwZW5kIildCisKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBJbnRlcmNlcHRpbmdPcHRpb25QYXJzZXIodXNhZ2U9U1VQUFJFU1NfVVNBR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl9saXN0PW9wdGlvbnMpCisKKyAgICBkZWYgdGVzdF9yZXF1aXJlZF92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItYSJdLCAiLWEgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IikKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfaW50ZWdlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItYiIsICI1eCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uIC1iOiBpbnZhbGlkIGludGVnZXIgdmFsdWU6ICc1eCciKQorCisgICAgZGVmIHRlc3Rfbm9fc3VjaF9vcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VGYWlsKFsiLS1ib28xMyJdLCAibm8gc3VjaCBvcHRpb246IC0tYm9vMTMiKQorCisgICAgZGVmIHRlc3RfbG9uZ19pbnZhbGlkX2ludGVnZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VGYWlsKFsiLS1ib289eDUiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbiAtLWJvbzogaW52YWxpZCBpbnRlZ2VyIHZhbHVlOiAneDUnIikKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soW10sIHsnYSc6IE5vbmUsICdib28nOiBOb25lLCAnZm9vJzogTm9uZX0sIFtdKQorCisgICAgZGVmIHRlc3Rfc2hvcnRvcHRfZW1wdHlfbG9uZ29wdF9hcHBlbmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgIiIsICItLWZvbz1ibGFoIiwgIi0tZm9vPSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogIiIsICdib28nOiBOb25lLCAnZm9vJzogWyJibGFoIiwgIiJdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisgICAgZGVmIHRlc3RfbG9uZ19vcHRpb25fYXBwZW5kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItLWZvbyIsICJiYXIiLCAiLS1mb28iLCAiIiwgIi0tZm9vPXgiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Jvbyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvbyc6IFsiYmFyIiwgIiIsICJ4Il19LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9vcHRpb25fYXJndW1lbnRfam9pbmVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYWJjIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAiYmMiLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IE5vbmV9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9vcHRpb25fYXJndW1lbnRfc3BsaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgIjM0Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAiMzQiLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IE5vbmV9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9vcHRpb25fYXJndW1lbnRfam9pbmVkX2ludGVnZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1iMzQiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6IE5vbmUsICdib28nOiAzNCwgJ2Zvbyc6IE5vbmV9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9vcHRpb25fYXJndW1lbnRfc3BsaXRfbmVnYXRpdmVfaW50ZWdlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWIiLCAiLTUiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6IE5vbmUsICdib28nOiAtNSwgJ2Zvbyc6IE5vbmV9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9sb25nX29wdGlvbl9hcmd1bWVudF9qb2luZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tYm9vPTEzIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiBOb25lLCAnYm9vJzogMTMsICdmb28nOiBOb25lfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisgICAgZGVmIHRlc3RfbG9uZ19vcHRpb25fYXJndW1lbnRfc3BsaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tYm9vIiwgIjExMSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogTm9uZSwgJ2Jvbyc6IDExMSwgJ2Zvbyc6IE5vbmV9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9sb25nX29wdGlvbl9zaG9ydF9vcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tZm9vPWJhciIsICItYXh5eiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogJ3h5eicsICdib28nOiBOb25lLCAnZm9vJzogWyJiYXIiXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X2FiYnJldl9sb25nX29wdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLS1mPWJhciIsICItYXh5eiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogJ3h5eicsICdib28nOiBOb25lLCAnZm9vJzogWyJiYXIiXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRzKHNlbGYpOgorICAgICAgICAob3B0aW9ucywgYXJncykgPSBzZWxmLnBhcnNlci5wYXJzZV9hcmdzKFtdKQorICAgICAgICBkZWZhdWx0cyA9IHNlbGYucGFyc2VyLmdldF9kZWZhdWx0X3ZhbHVlcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFycyhkZWZhdWx0cyksIHZhcnMob3B0aW9ucykpCisKKyAgICBkZWYgdGVzdF9hbWJpZ3VvdXNfb3B0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItLWZveiIsIGFjdGlvbj0ic3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InN0cmluZyIsIGRlc3Q9ImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VGYWlsKFsiLS1mPWJhciJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW1iaWd1b3VzIG9wdGlvbjogLS1mICgtLWZvbywgLS1mb3o/KSIpCisKKworICAgIGRlZiB0ZXN0X3Nob3J0X2FuZF9sb25nX29wdGlvbl9zcGxpdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAieHl6IiwgIi0tZm9vIiwgImJhciJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogJ3h5eicsICdib28nOiBOb25lLCAnZm9vJzogWyJiYXIiXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSksCisKKyAgICBkZWYgdGVzdF9zaG9ydF9vcHRpb25fc3BsaXRfbG9uZ19vcHRpb25fYXBwZW5kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItLWZvbz1iYXIiLCAiLWIiLCAiMTIzIiwgIi0tZm9vIiwgImJheiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogTm9uZSwgJ2Jvbyc6IDEyMywgJ2Zvbyc6IFsiYmFyIiwgImJheiJdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisgICAgZGVmIHRlc3Rfc2hvcnRfb3B0aW9uX3NwbGl0X29uZV9wb3NpdGlvbmFsX2FyZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAiZm9vIiwgImJhciJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogImZvbyIsICdib28nOiBOb25lLCAnZm9vJzogTm9uZX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbImJhciJdKSwKKworICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9jb25zdW1lc19zZXBhcmF0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgIi0tIiwgImZvbyIsICJiYXIiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICItLSIsICdib28nOiBOb25lLCAnZm9vJzogTm9uZX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbImZvbyIsICJiYXIiXSksCisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgIi0tIiwgIi0tZm9vIiwgImJhciJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogIi0tIiwgJ2Jvbyc6IE5vbmUsICdmb28nOiBbImJhciJdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKSwKKworICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9qb2luZWRfYW5kX3NlcGFyYXRvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWFiIiwgIi0tIiwgIi0tZm9vIiwgImJhciJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogImIiLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IE5vbmV9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyItLWZvbyIsICJiYXIiXSksCisKKyAgICBkZWYgdGVzdF9oeXBoZW5fYmVjb21lc19wb3NpdGlvbmFsX2FyZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWFiIiwgIi0iLCAiLS1mb28iLCAiYmFyIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAiYiIsICdib28nOiBOb25lLCAnZm9vJzogWyJiYXIiXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbIi0iXSkKKworICAgIGRlZiB0ZXN0X25vX2FwcGVuZF92ZXJzdXNfYXBwZW5kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYjMiLCAiLWIiLCAiNSIsICItLWZvbz1iYXIiLCAiLS1mb28iLCAiYmF6Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiBOb25lLCAnYm9vJzogNSwgJ2Zvbyc6IFsiYmFyIiwgImJheiJdfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisgICAgZGVmIHRlc3Rfb3B0aW9uX2NvbnN1bWVzX29wdGlvbmxpa2Vfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYSIsICItYjMiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICItYjMiLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IE5vbmV9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9jb21iaW5lZF9zaW5nbGVfaW52YWxpZF9vcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi10IiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItdGVzdCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gc3VjaCBvcHRpb246IC1lIikKKworICAgIGRlZiB0ZXN0X2FkZF9vcHRpb25fYWNjZXB0c191bmljb2RlKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKHUiLXUiLCB1Ii0tdW5pY29kZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi11Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiBOb25lLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IE5vbmUsICd1bmljb2RlJzogVHJ1ZX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworCitjbGFzcyBUZXN0Qm9vbChCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBvcHRpb25zID0gW21ha2Vfb3B0aW9uKCItdiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tdmVyYm9zZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJ2ZXJib3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnKSwKKyAgICAgICAgICAgICAgICAgICBtYWtlX29wdGlvbigiLXEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLXF1aWV0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX2ZhbHNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJ2ZXJib3NlIildCisgICAgICAgIHNlbGYucGFyc2VyID0gT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0ID0gb3B0aW9ucykKKworICAgIGRlZiB0ZXN0X2Jvb2xfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyd2ZXJib3NlJzogJyd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9ib29sX2ZhbHNlKHNlbGYpOgorICAgICAgICAob3B0aW9ucywgYXJncykgPSBzZWxmLmFzc2VydFBhcnNlT0soWyItcSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyd2ZXJib3NlJzogMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wdGlvbnMudmVyYm9zZSBpcyBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2Jvb2xfdHJ1ZShzZWxmKToKKyAgICAgICAgKG9wdGlvbnMsIGFyZ3MpID0gc2VsZi5hc3NlcnRQYXJzZU9LKFsiLXYiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsndmVyYm9zZSc6IDF9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcHRpb25zLnZlcmJvc2UgaXMgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2Jvb2xfZmxpY2tlcl9vbl9hbmRfb2ZmKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItcXZxIiwgIi1xIiwgIi12Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3ZlcmJvc2UnOiAxfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCitjbGFzcyBUZXN0Q2hvaWNlKEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyID0gSW50ZXJjZXB0aW5nT3B0aW9uUGFyc2VyKHVzYWdlPVNVUFBSRVNTX1VTQUdFKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItYyIsIGFjdGlvbj0ic3RvcmUiLCB0eXBlPSJjaG9pY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9ImNob2ljZSIsIGNob2ljZXM9WyJvbmUiLCAidHdvIiwgInRocmVlIl0pCisKKyAgICBkZWYgdGVzdF92YWxpZF9jaG9pY2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1jIiwgIm9uZSIsICJ4eXoiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnY2hvaWNlJzogJ29uZSd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJ4eXoiXSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfY2hvaWNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlRmFpbChbIi1jIiwgImZvdXIiLCAiYWJjIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24gLWM6IGludmFsaWQgY2hvaWNlOiAnZm91cicgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGNob29zZSBmcm9tICdvbmUnLCAndHdvJywgJ3RocmVlJykiKQorCisgICAgZGVmIHRlc3RfYWRkX2Nob2ljZV9vcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1kIiwgIi0tZGVmYXVsdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1bImZvdXIiLCAiZml2ZSIsICJzaXgiXSkKKyAgICAgICAgb3B0ID0gc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdC50eXBlLCAiY2hvaWNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHQuYWN0aW9uLCAic3RvcmUiKQorCitjbGFzcyBUZXN0Q291bnQoQmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBJbnRlcmNlcHRpbmdPcHRpb25QYXJzZXIodXNhZ2U9U1VQUFJFU1NfVVNBR0UpCisgICAgICAgIHNlbGYudl9vcHQgPSBtYWtlX29wdGlvbigiLXYiLCBhY3Rpb249ImNvdW50IiwgZGVzdD0idmVyYm9zZSIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oc2VsZi52X29wdCkKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLS12ZXJib3NlIiwgdHlwZT0iaW50IiwgZGVzdD0idmVyYm9zZSIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1xIiwgIi0tcXVpZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfY29uc3QiLCBkZXN0PSJ2ZXJib3NlIiwgY29uc3Q9MCkKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soW10sIHsndmVyYm9zZSc6IE5vbmV9LCBbXSkKKworICAgIGRlZiB0ZXN0X2NvdW50X29uZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLXYiXSwgeyd2ZXJib3NlJzogMX0sIFtdKQorCisgICAgZGVmIHRlc3RfY291bnRfdGhyZWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi12dnYiXSwgeyd2ZXJib3NlJzogM30sIFtdKQorCisgICAgZGVmIHRlc3RfY291bnRfdGhyZWVfYXBhcnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi12IiwgIi12IiwgIi12Il0sIHsndmVyYm9zZSc6IDN9LCBbXSkKKworICAgIGRlZiB0ZXN0X2NvdW50X292ZXJyaWRlX2Ftb3VudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLXZ2diIsICItLXZlcmJvc2U9MiJdLCB7J3ZlcmJvc2UnOiAyfSwgW10pCisKKyAgICBkZWYgdGVzdF9jb3VudF9vdmVycmlkZV9xdWlldChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLXZ2diIsICItLXZlcmJvc2U9MiIsICItcSJdLCB7J3ZlcmJvc2UnOiAwfSwgW10pCisKKyAgICBkZWYgdGVzdF9jb3VudF9vdmVycmlkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItdnZ2IiwgIi0tdmVyYm9zZT0yIiwgIi1xIiwgIi12Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3ZlcmJvc2UnOiAxfSwgW10pCisKKyAgICBkZWYgdGVzdF9jb3VudF9pbnRlcnNwZXJzZWRfYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLS1xdWlldCIsICIzIiwgIi12Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3ZlcmJvc2UnOiAxfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiMyJdKQorCisgICAgZGVmIHRlc3RfY291bnRfbm9faW50ZXJzcGVyc2VkX2FyZ3Moc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmRpc2FibGVfaW50ZXJzcGVyc2VkX2FyZ3MoKQorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItLXF1aWV0IiwgIjMiLCAiLXYiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsndmVyYm9zZSc6IDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyIzIiwgIi12Il0pCisKKyAgICBkZWYgdGVzdF9jb3VudF9ub19zdWNoX29wdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItcTMiLCAiLXYiXSwgIm5vIHN1Y2ggb3B0aW9uOiAtMyIpCisKKyAgICBkZWYgdGVzdF9jb3VudF9vcHRpb25fbm9fdmFsdWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VGYWlsKFsiLS1xdWlldD0zIiwgIi12Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLXF1aWV0IG9wdGlvbiBkb2VzIG5vdCB0YWtlIGEgdmFsdWUiKQorCisgICAgZGVmIHRlc3RfY291bnRfd2l0aF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5zZXRfZGVmYXVsdCgndmVyYm9zZScsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbXSwgeyd2ZXJib3NlJzowfSwgW10pCisKKyAgICBkZWYgdGVzdF9jb3VudF9vdmVycmlkaW5nX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLnNldF9kZWZhdWx0KCd2ZXJib3NlJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLXZ2diIsICItLXZlcmJvc2U9MiIsICItcSIsICItdiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyd2ZXJib3NlJzogMX0sIFtdKQorCitjbGFzcyBUZXN0TXVsdGlwbGVBcmdzKEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyID0gSW50ZXJjZXB0aW5nT3B0aW9uUGFyc2VyKHVzYWdlPVNVUFBSRVNTX1VTQUdFKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItcCIsICItLXBvaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgbmFyZ3M9MywgdHlwZT0iZmxvYXQiLCBkZXN0PSJwb2ludCIpCisKKyAgICBkZWYgdGVzdF9uYXJnc193aXRoX3Bvc2l0aW9uYWxfYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiZm9vIiwgIi1wIiwgIjEiLCAiMi41IiwgIi00LjMiLCAieHl6Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvaW50JzogKDEuMCwgMi41LCAtNC4zKX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbImZvbyIsICJ4eXoiXSkKKworICAgIGRlZiB0ZXN0X25hcmdzX2xvbmdfb3B0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItLXBvaW50IiwgIi0xIiwgIjIuNSIsICItMCIsICJ4eXoiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsncG9pbnQnOiAoLTEuMCwgMi41LCAtMC4wKX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbInh5eiJdKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfaW52YWxpZF9mbG9hdF92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItcCIsICIxLjAiLCAiMngiLCAiMy41Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24gLXA6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgZmxvYXRpbmctcG9pbnQgdmFsdWU6ICcyeCciKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfcmVxdWlyZWRfdmFsdWVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlRmFpbChbIi0tcG9pbnQiLCAiMS4wIiwgIjMuNSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1wb2ludCBvcHRpb24gcmVxdWlyZXMgMyBhcmd1bWVudHMiKQorCitjbGFzcyBUZXN0TXVsdGlwbGVBcmdzQXBwZW5kKEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyID0gSW50ZXJjZXB0aW5nT3B0aW9uUGFyc2VyKHVzYWdlPVNVUFBSRVNTX1VTQUdFKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItcCIsICItLXBvaW50IiwgYWN0aW9uPSJzdG9yZSIsIG5hcmdzPTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iZmxvYXQiLCBkZXN0PSJwb2ludCIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi1mIiwgIi0tZm9vIiwgYWN0aW9uPSJhcHBlbmQiLCBuYXJncz0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImludCIsIGRlc3Q9ImZvbyIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi16IiwgIi0temVybyIsIGFjdGlvbj0iYXBwZW5kX2NvbnN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJmb28iLCBjb25zdD0oMCwgMCkpCisKKyAgICBkZWYgdGVzdF9uYXJnc19hcHBlbmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1mIiwgIjQiLCAiLTMiLCAiYmxhaCIsICItLWZvbyIsICIxIiwgIjY2NiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydwb2ludCc6IE5vbmUsICdmb28nOiBbKDQsIC0zKSwgKDEsIDY2NildfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiYmxhaCJdKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfYXBwZW5kX3JlcXVpcmVkX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItZjQsMyJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWYgb3B0aW9uIHJlcXVpcmVzIDIgYXJndW1lbnRzIikKKworICAgIGRlZiB0ZXN0X25hcmdzX2FwcGVuZF9zaW1wbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tZm9vPTMiLCAiNCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydwb2ludCc6IE5vbmUsICdmb28nOlsoMywgNCldfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfYXBwZW5kX2NvbnN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItLXplcm8iLCAiLS1mb28iLCAiMyIsICI0IiwgIi16Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvaW50JzogTm9uZSwgJ2Zvbyc6WygwLCAwKSwgKDMsIDQpLCAoMCwgMCldfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCitjbGFzcyBUZXN0VmVyc2lvbihCYXNlVGVzdCk6CisgICAgZGVmIHRlc3RfdmVyc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBJbnRlcmNlcHRpbmdPcHRpb25QYXJzZXIodXNhZ2U9U1VQUFJFU1NfVVNBR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb249IiVwcm9nIDAuMSIpCisgICAgICAgIHNhdmVfYXJndiA9IHN5cy5hcmd2WzpdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5hcmd2WzBdID0gb3MucGF0aC5qb2luKG9zLmN1cmRpciwgImZvbyIsICJiYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRPdXRwdXQoWyItLXZlcnNpb24iXSwgImJhciAwLjFcbiIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuYXJndls6XSA9IHNhdmVfYXJndgorCisgICAgZGVmIHRlc3Rfbm9fdmVyc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBJbnRlcmNlcHRpbmdPcHRpb25QYXJzZXIodXNhZ2U9U1VQUFJFU1NfVVNBR0UpCisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VGYWlsKFsiLS12ZXJzaW9uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBzdWNoIG9wdGlvbjogLS12ZXJzaW9uIikKKworIyAtLSBUZXN0IGNvbmZsaWN0aW5nIGRlZmF1bHQgdmFsdWVzIGFuZCBwYXJzZXIucGFyc2VfYXJncygpIC0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RDb25mbGljdGluZ0RlZmF1bHRzKEJhc2VUZXN0KToKKyAgICAiIiJDb25mbGljdGluZyBkZWZhdWx0IHZhbHVlczogdGhlIGxhc3Qgb25lIHNob3VsZCB3aW4uIiIiCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IE9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1bCisgICAgICAgICAgICBtYWtlX29wdGlvbigiLXYiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJ2ZXJib3NlIiwgZGVmYXVsdD0xKV0pCisKKyAgICBkZWYgdGVzdF9jb25mbGljdF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItcSIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJ2ZXJib3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTApCisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbXSwgeyd2ZXJib3NlJzogMH0sIFtdKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3RfZGVmYXVsdF9ub25lKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItcSIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJ2ZXJib3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbXSwgeyd2ZXJib3NlJzogTm9uZX0sIFtdKQorCitjbGFzcyBUZXN0T3B0aW9uR3JvdXAoQmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBPcHRpb25QYXJzZXIodXNhZ2U9U1VQUFJFU1NfVVNBR0UpCisKKyAgICBkZWYgdGVzdF9vcHRpb25fZ3JvdXBfY3JlYXRlX2luc3RhbmNlKHNlbGYpOgorICAgICAgICBncm91cCA9IE9wdGlvbkdyb3VwKHNlbGYucGFyc2VyLCAiU3BhbSIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAoZ3JvdXApCisgICAgICAgIGdyb3VwLmFkZF9vcHRpb24oIi0tc3BhbSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ic3BhbSBzcGFtIHNwYW0gc3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tc3BhbSJdLCB7J3NwYW0nOiAxfSwgW10pCisKKyAgICBkZWYgdGVzdF9hZGRfZ3JvdXBfbm9fZ3JvdXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKHNlbGYucGFyc2VyLmFkZF9vcHRpb25fZ3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYW4gT3B0aW9uR3JvdXAgaW5zdGFuY2U6IE5vbmUiLCBOb25lKQorCisgICAgZGVmIHRlc3RfYWRkX2dyb3VwX2ludmFsaWRfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcihzZWxmLnBhcnNlci5hZGRfb3B0aW9uX2dyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBhcmd1bWVudHMiLCBOb25lLCBOb25lKQorCisgICAgZGVmIHRlc3RfYWRkX2dyb3VwX3dyb25nX3BhcnNlcihzZWxmKToKKyAgICAgICAgZ3JvdXAgPSBPcHRpb25Hcm91cChzZWxmLnBhcnNlciwgIlNwYW0iKQorICAgICAgICBncm91cC5wYXJzZXIgPSBPcHRpb25QYXJzZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLnBhcnNlci5hZGRfb3B0aW9uX2dyb3VwLCAoZ3JvdXAsKSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVFcnJvciwgImludmFsaWQgT3B0aW9uR3JvdXAgKHdyb25nIHBhcnNlcikiKQorCisgICAgZGVmIHRlc3RfZ3JvdXBfbWFuaXB1bGF0ZShzZWxmKToKKyAgICAgICAgZ3JvdXAgPSBzZWxmLnBhcnNlci5hZGRfb3B0aW9uX2dyb3VwKCJHcm91cCAyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJTb21lIG1vcmUgb3B0aW9ucyIpCisgICAgICAgIGdyb3VwLnNldF90aXRsZSgiQmFjb24iKQorICAgICAgICBncm91cC5hZGRfb3B0aW9uKCItLWJhY29uIiwgdHlwZT0iaW50IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGFyc2VyLmdldF9vcHRpb25fZ3JvdXAoIi0tYmFjb24iKSwgZ3JvdXApCisKKyMgLS0gVGVzdCBleHRlbmRpbmcgYW5kIHBhcnNlci5wYXJzZV9hcmdzKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0RXh0ZW5kQWRkVHlwZXMoQmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBJbnRlcmNlcHRpbmdPcHRpb25QYXJzZXIodXNhZ2U9U1VQUFJFU1NfVVNBR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl9jbGFzcz1zZWxmLk15T3B0aW9uKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItYSIsIE5vbmUsIHR5cGU9InN0cmluZyIsIGRlc3Q9ImEiKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItZiIsICItLWZpbGUiLCB0eXBlPSJmaWxlIiwgZGVzdD0iZmlsZSIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIodGVzdF9zdXBwb3J0LlRFU1RGTik6CisgICAgICAgICAgICBvcy5ybWRpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBlbGlmIG9zLnBhdGguaXNmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4pOgorICAgICAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBjbGFzcyBNeU9wdGlvbiAoT3B0aW9uKToKKyAgICAgICAgZGVmIGNoZWNrX2ZpbGUob3B0aW9uLCBvcHQsIHZhbHVlKToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh2YWx1ZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgT3B0aW9uVmFsdWVFcnJvcigiJXM6IGZpbGUgZG9lcyBub3QgZXhpc3QiICUgdmFsdWUpCisgICAgICAgICAgICBlbGlmIG5vdCBvcy5wYXRoLmlzZmlsZSh2YWx1ZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgT3B0aW9uVmFsdWVFcnJvcigiJXM6IG5vdCBhIHJlZ3VsYXIgZmlsZSIgJSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgICAgIFRZUEVTID0gT3B0aW9uLlRZUEVTICsgKCJmaWxlIiwpCisgICAgICAgIFRZUEVfQ0hFQ0tFUiA9IGNvcHkuY29weShPcHRpb24uVFlQRV9DSEVDS0VSKQorICAgICAgICBUWVBFX0NIRUNLRVJbImZpbGUiXSA9IGNoZWNrX2ZpbGUKKworICAgIGRlZiB0ZXN0X2ZpbGV0eXBlX29rKHNlbGYpOgorICAgICAgICBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3IikuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItLWZpbGUiLCB0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiLWFmb28iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnZmlsZSc6IHRlc3Rfc3VwcG9ydC5URVNURk4sICdhJzogJ2Zvbyd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9maWxldHlwZV9ub2V4aXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlRmFpbChbIi0tZmlsZSIsIHRlc3Rfc3VwcG9ydC5URVNURk4sICItYWZvbyJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IGZpbGUgZG9lcyBub3QgZXhpc3QiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2ZpbGV0eXBlX25vdGZpbGUoc2VsZik6CisgICAgICAgIG9zLm1rZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VGYWlsKFsiLS1maWxlIiwgdGVzdF9zdXBwb3J0LlRFU1RGTiwgIi1hZm9vIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczogbm90IGEgcmVndWxhciBmaWxlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKworY2xhc3MgVGVzdEV4dGVuZEFkZEFjdGlvbnMoQmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgb3B0aW9ucyA9IFtzZWxmLk15T3B0aW9uKCItYSIsICItLWFwcGxlIiwgYWN0aW9uPSJleHRlbmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic3RyaW5nIiwgZGVzdD0iYXBwbGUiKV0KKyAgICAgICAgc2VsZi5wYXJzZXIgPSBPcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9ucykKKworICAgIGNsYXNzIE15T3B0aW9uIChPcHRpb24pOgorICAgICAgICBBQ1RJT05TID0gT3B0aW9uLkFDVElPTlMgKyAoImV4dGVuZCIsKQorICAgICAgICBTVE9SRV9BQ1RJT05TID0gT3B0aW9uLlNUT1JFX0FDVElPTlMgKyAoImV4dGVuZCIsKQorICAgICAgICBUWVBFRF9BQ1RJT05TID0gT3B0aW9uLlRZUEVEX0FDVElPTlMgKyAoImV4dGVuZCIsKQorCisgICAgICAgIGRlZiB0YWtlX2FjdGlvbihzZWxmLCBhY3Rpb24sIGRlc3QsIG9wdCwgdmFsdWUsIHZhbHVlcywgcGFyc2VyKToKKyAgICAgICAgICAgIGlmIGFjdGlvbiA9PSAiZXh0ZW5kIjoKKyAgICAgICAgICAgICAgICBsdmFsdWUgPSB2YWx1ZS5zcGxpdCgiLCIpCisgICAgICAgICAgICAgICAgdmFsdWVzLmVuc3VyZV92YWx1ZShkZXN0LCBbXSkuZXh0ZW5kKGx2YWx1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgT3B0aW9uLnRha2VfYWN0aW9uKHNlbGYsIGFjdGlvbiwgZGVzdCwgb3B0LCBwYXJzZXIsIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpCisKKyAgICBkZWYgdGVzdF9leHRlbmRfYWRkX2FjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWFmb28sYmFyIiwgIi0tYXBwbGU9YmxhaCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhcHBsZSc6IFsiZm9vIiwgImJhciIsICJibGFoIl19LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKyAgICBkZWYgdGVzdF9leHRlbmRfYWRkX2FjdGlvbl9ub3JtYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgImZvbyIsICItYWJhciIsICItLWFwcGxlPXgseSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhcHBsZSc6IFsiZm9vIiwgImJhciIsICJ4IiwgInkiXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworIyAtLSBUZXN0IGNhbGxiYWNrcyBhbmQgcGFyc2VyLnBhcnNlX2FyZ3MoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RDYWxsYmFjayhCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBvcHRpb25zID0gW21ha2Vfb3B0aW9uKCIteCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249ImNhbGxiYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaz1zZWxmLnByb2Nlc3Nfb3B0KSwKKyAgICAgICAgICAgICAgICAgICBtYWtlX29wdGlvbigiLWYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0iY2FsbGJhY2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrPXNlbGYucHJvY2Vzc19vcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJmaWxlbmFtZSIpXQorICAgICAgICBzZWxmLnBhcnNlciA9IE9wdGlvblBhcnNlcihvcHRpb25fbGlzdD1vcHRpb25zKQorCisgICAgZGVmIHByb2Nlc3Nfb3B0KHNlbGYsIG9wdGlvbiwgb3B0LCB2YWx1ZSwgcGFyc2VyXyk6CisgICAgICAgIGlmIG9wdCA9PSAiLXgiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb24uX3Nob3J0X29wdHMsIFsiLXgiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9uLl9sb25nX29wdHMsIFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhcnNlcl8gaXMgc2VsZi5wYXJzZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsdWUgaXMgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFycyhwYXJzZXJfLnZhbHVlcyksIHsnZmlsZW5hbWUnOiBOb25lfSkKKworICAgICAgICAgICAgcGFyc2VyXy52YWx1ZXMueCA9IDQyCisgICAgICAgIGVsaWYgb3B0ID09ICItLWZpbGUiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb24uX3Nob3J0X29wdHMsIFsiLWYiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9uLl9sb25nX29wdHMsIFsiLS1maWxlIl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocGFyc2VyXyBpcyBzZWxmLnBhcnNlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsICJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJzKHBhcnNlcl8udmFsdWVzKSwgeydmaWxlbmFtZSc6IE5vbmUsICd4JzogNDJ9KQorCisgICAgICAgICAgICBzZXRhdHRyKHBhcnNlcl8udmFsdWVzLCBvcHRpb24uZGVzdCwgdmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlVua25vd24gb3B0aW9uICVyIGluIHByb2Nlc3Nfb3B0LiIgJSBvcHQpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLXgiLCAiLS1maWxlPWZvbyJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeydmaWxlbmFtZSc6ICJmb28iLCAneCc6IDQyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfaGVscChzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3Qgd2FzIHByb21wdGVkIGJ5IFNGIGJ1ZyAjOTYwNTE1IC0tIHRoZSBwb2ludCBpcworICAgICAgICAjIG5vdCB0byBpbnNwZWN0IHRoZSBoZWxwIHRleHQsIGp1c3QgdG8gbWFrZSBzdXJlIHRoYXQKKyAgICAgICAgIyBmb3JtYXRfaGVscCgpIGRvZXNuJ3QgY3Jhc2guCisgICAgICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT1TVVBQUkVTU19VU0FHRSkKKyAgICAgICAgcGFyc2VyLnJlbW92ZV9vcHRpb24oIi1oIikKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oIi10IiwgIi0tdGVzdCIsIGFjdGlvbj0iY2FsbGJhY2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaz1sYW1iZGE6IE5vbmUsIHR5cGU9InN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImZvbyIpCisKKyAgICAgICAgZXhwZWN0ZWRfaGVscCA9ICgiT3B0aW9uczpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICAtdCBURVNULCAtLXRlc3Q9VEVTVCAgZm9vXG4iKQorICAgICAgICBzZWxmLmFzc2VydEhlbHAocGFyc2VyLCBleHBlY3RlZF9oZWxwKQorCisKK2NsYXNzIFRlc3RDYWxsYmFja0V4dHJhQXJncyhCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBvcHRpb25zID0gW21ha2Vfb3B0aW9uKCItcCIsICItLXBvaW50IiwgYWN0aW9uPSJjYWxsYmFjayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s9c2VsZi5wcm9jZXNzX3R1cGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX2FyZ3M9KDMsIGludCksIHR5cGU9InN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0icG9pbnRzIiwgZGVmYXVsdD1bXSldCisgICAgICAgIHNlbGYucGFyc2VyID0gT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbnMpCisKKyAgICBkZWYgcHJvY2Vzc190dXBsZShzZWxmLCBvcHRpb24sIG9wdCwgdmFsdWUsIHBhcnNlcl8sIGxlbiwgdHlwZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuLCAzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSBpcyBpbnQpCisKKyAgICAgICAgaWYgb3B0ID09ICItcCI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCAiMSwyLDMiKQorICAgICAgICBlbGlmIG9wdCA9PSAiLS1wb2ludCI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCAiNCw1LDYiKQorCisgICAgICAgIHZhbHVlID0gdHVwbGUobWFwKHR5cGUsIHZhbHVlLnNwbGl0KCIsIikpKQorICAgICAgICBnZXRhdHRyKHBhcnNlcl8udmFsdWVzLCBvcHRpb24uZGVzdCkuYXBwZW5kKHZhbHVlKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfZXh0cmFfYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLXAxLDIsMyIsICItLXBvaW50IiwgIjQsNSw2Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvaW50cyc6IFsoMSwyLDMpLCAoNCw1LDYpXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworY2xhc3MgVGVzdENhbGxiYWNrTWVkZGxlQXJncyhCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBvcHRpb25zID0gW21ha2Vfb3B0aW9uKHN0cih4KSwgYWN0aW9uPSJjYWxsYmFjayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s9c2VsZi5wcm9jZXNzX24sIGRlc3Q9J3RoaW5ncycpCisgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoLTEsIC02LCAtMSldCisgICAgICAgIHNlbGYucGFyc2VyID0gT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbnMpCisKKyAgICAjIENhbGxiYWNrIHRoYXQgbWVkZGxlcyBpbiByYXJncywgbGFyZ3MKKyAgICBkZWYgcHJvY2Vzc19uKHNlbGYsIG9wdGlvbiwgb3B0LCB2YWx1ZSwgcGFyc2VyXyk6CisgICAgICAgICMgb3B0aW9uIGlzIC0zLCAtNSwgZXRjLgorICAgICAgICBuYXJncyA9IGludChvcHRbMTpdKQorICAgICAgICByYXJncyA9IHBhcnNlcl8ucmFyZ3MKKyAgICAgICAgaWYgbGVuKHJhcmdzKSA8IG5hcmdzOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCAlZCBhcmd1bWVudHMgZm9yICVzIG9wdGlvbi4iICUgKG5hcmdzLCBvcHQpKQorICAgICAgICBkZXN0ID0gcGFyc2VyXy52YWx1ZXMuZW5zdXJlX3ZhbHVlKG9wdGlvbi5kZXN0LCBbXSkKKyAgICAgICAgZGVzdC5hcHBlbmQodHVwbGUocmFyZ3NbMDpuYXJnc10pKQorICAgICAgICBwYXJzZXJfLmxhcmdzLmFwcGVuZChuYXJncykKKyAgICAgICAgZGVsIHJhcmdzWzA6bmFyZ3NdCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja19tZWRkbGVfYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLTEiLCAiZm9vIiwgIi0zIiwgImJhciIsICJiYXoiLCAicXV4Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3RoaW5ncyc6IFsoImZvbyIsKSwgKCJiYXIiLCAiYmF6IiwgInF1eCIpXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbMSwgM10pCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja19tZWRkbGVfYXJnc19zZXBhcmF0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0yIiwgImZvbyIsICItLSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyd0aGluZ3MnOiBbKCdmb28nLCAnLS0nKV19LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWzJdKQorCitjbGFzcyBUZXN0Q2FsbGJhY2tNYW55QXJncyhCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBvcHRpb25zID0gW21ha2Vfb3B0aW9uKCItYSIsICItLWFwcGxlIiwgYWN0aW9uPSJjYWxsYmFjayIsIG5hcmdzPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s9c2VsZi5wcm9jZXNzX21hbnksIHR5cGU9InN0cmluZyIpLAorICAgICAgICAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItYiIsICItLWJvYiIsIGFjdGlvbj0iY2FsbGJhY2siLCBuYXJncz0zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrPXNlbGYucHJvY2Vzc19tYW55LCB0eXBlPSJpbnQiKV0KKyAgICAgICAgc2VsZi5wYXJzZXIgPSBPcHRpb25QYXJzZXIob3B0aW9uX2xpc3Q9b3B0aW9ucykKKworICAgIGRlZiBwcm9jZXNzX21hbnkoc2VsZiwgb3B0aW9uLCBvcHQsIHZhbHVlLCBwYXJzZXJfKToKKyAgICAgICAgaWYgb3B0ID09ICItYSI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCAoImZvbyIsICJiYXIiKSkKKyAgICAgICAgZWxpZiBvcHQgPT0gIi0tYXBwbGUiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgKCJkaW5nIiwgImRvbmciKSkKKyAgICAgICAgZWxpZiBvcHQgPT0gIi1iIjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsICgxLCAyLCAzKSkKKyAgICAgICAgZWxpZiBvcHQgPT0gIi0tYm9iIjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsICgtNjY2LCA0MiwgMCkpCisKKyAgICBkZWYgdGVzdF9tYW55X2FyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgImZvbyIsICJiYXIiLCAiLS1hcHBsZSIsICJkaW5nIiwgImRvbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYiIsICIxIiwgIjIiLCAiMyIsICItLWJvYiIsICItNjY2IiwgIjQyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJhcHBsZSI6IE5vbmUsICJib2IiOiBOb25lfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorCitjbGFzcyBUZXN0Q2FsbGJhY2tDaGVja0FiYnJldihCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IE9wdGlvblBhcnNlcigpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi0tZm9vLWJhciIsIGFjdGlvbj0iY2FsbGJhY2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrPXNlbGYuY2hlY2tfYWJicmV2KQorCisgICAgZGVmIGNoZWNrX2FiYnJldihzZWxmLCBvcHRpb24sIG9wdCwgdmFsdWUsIHBhcnNlcik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0LCAiLS1mb28tYmFyIikKKworICAgIGRlZiB0ZXN0X2FiYnJldl9jYWxsYmFja19leHBhbnNpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tZm9vIl0sIHt9LCBbXSkKKworY2xhc3MgVGVzdENhbGxiYWNrVmFyQXJncyhCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBvcHRpb25zID0gW21ha2Vfb3B0aW9uKCItYSIsIHR5cGU9ImludCIsIG5hcmdzPTIsIGRlc3Q9ImEiKSwKKyAgICAgICAgICAgICAgICAgICBtYWtlX29wdGlvbigiLWIiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJiIiksCisgICAgICAgICAgICAgICAgICAgbWFrZV9vcHRpb24oIi1jIiwgIi0tY2FsbGJhY2siLCBhY3Rpb249ImNhbGxiYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaz1zZWxmLnZhcmlhYmxlX2FyZ3MsIGRlc3Q9ImMiKV0KKyAgICAgICAgc2VsZi5wYXJzZXIgPSBJbnRlcmNlcHRpbmdPcHRpb25QYXJzZXIodXNhZ2U9U1VQUFJFU1NfVVNBR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl9saXN0PW9wdGlvbnMpCisKKyAgICBkZWYgdmFyaWFibGVfYXJncyhzZWxmLCBvcHRpb24sIG9wdCwgdmFsdWUsIHBhcnNlcik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWx1ZSBpcyBOb25lKQorICAgICAgICB2YWx1ZSA9IFtdCisgICAgICAgIHJhcmdzID0gcGFyc2VyLnJhcmdzCisgICAgICAgIHdoaWxlIHJhcmdzOgorICAgICAgICAgICAgYXJnID0gcmFyZ3NbMF0KKyAgICAgICAgICAgIGlmICgoYXJnWzoyXSA9PSAiLS0iIGFuZCBsZW4oYXJnKSA+IDIpIG9yCisgICAgICAgICAgICAgICAgKGFyZ1s6MV0gPT0gIi0iIGFuZCBsZW4oYXJnKSA+IDEgYW5kIGFyZ1sxXSAhPSAiLSIpKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWx1ZS5hcHBlbmQoYXJnKQorICAgICAgICAgICAgICAgIGRlbCByYXJnc1swXQorICAgICAgICBzZXRhdHRyKHBhcnNlci52YWx1ZXMsIG9wdGlvbi5kZXN0LCB2YWx1ZSkKKworICAgIGRlZiB0ZXN0X3ZhcmlhYmxlX2FyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hMyIsICItNSIsICItLWNhbGxiYWNrIiwgImZvbyIsICJiYXIiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICgzLCAtNSksICdiJzogTm9uZSwgJ2MnOiBbImZvbyIsICJiYXIiXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X2NvbnN1bWVfc2VwYXJhdG9yX3N0b3BfYXRfb3B0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYyIsICIzNyIsICItLSIsICJ4eHgiLCAiLWIiLCAiaGVsbG8iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2InOiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjJzogWyIzNyIsICItLSIsICJ4eHgiXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbImhlbGxvIl0pCisKKyAgICBkZWYgdGVzdF9wb3NpdGlvbmFsX2FyZ19hbmRfdmFyaWFibGVfYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiaGVsbG8iLCAiLWMiLCAiZm9vIiwgIi0iLCAiYmFyIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYyc6WyJmb28iLCAiLSIsICJiYXIiXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbImhlbGxvIl0pCisKKyAgICBkZWYgdGVzdF9zdG9wX2F0X29wdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWMiLCAiZm9vIiwgIi1iIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiBOb25lLCAnYic6IFRydWUsICdjJzogWyJmb28iXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X3N0b3BfYXRfaW52YWxpZF9vcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VGYWlsKFsiLWMiLCAiMyIsICItNSIsICItYSJdLCAibm8gc3VjaCBvcHRpb246IC01IikKKworCisjIC0tIFRlc3QgY29uZmxpY3QgaGFuZGxpbmcgYW5kIHBhcnNlci5wYXJzZV9hcmdzKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgQ29uZmxpY3RCYXNlKEJhc2VUZXN0KToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBbbWFrZV9vcHRpb24oIi12IiwgIi0tdmVyYm9zZSIsIGFjdGlvbj0iY291bnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9InZlcmJvc2UiLCBoZWxwPSJpbmNyZW1lbnQgdmVyYm9zaXR5IildCisgICAgICAgIHNlbGYucGFyc2VyID0gSW50ZXJjZXB0aW5nT3B0aW9uUGFyc2VyKHVzYWdlPVNVUFBSRVNTX1VTQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25fbGlzdD1vcHRpb25zKQorCisgICAgZGVmIHNob3dfdmVyc2lvbihzZWxmLCBvcHRpb24sIG9wdCwgdmFsdWUsIHBhcnNlcik6CisgICAgICAgIHBhcnNlci52YWx1ZXMuc2hvd192ZXJzaW9uID0gMQorCitjbGFzcyBUZXN0Q29uZmxpY3QoQ29uZmxpY3RCYXNlKToKKyAgICAiIiJVc2UgdGhlIGRlZmF1bHQgY29uZmxpY3QgcmVzb2x1dGlvbiBmb3IgT3B0aWsgMS4yOiBlcnJvci4iIiIKKyAgICBkZWYgYXNzZXJ0VHJ1ZWNvbmZsaWN0X2Vycm9yKHNlbGYsIGZ1bmMpOgorICAgICAgICBlcnIgPSBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGZ1bmMsICgiLXYiLCAiLS12ZXJzaW9uIiksIHsnYWN0aW9uJyA6ICJjYWxsYmFjayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhbGxiYWNrJyA6IHNlbGYuc2hvd192ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWxwJyA6ICJzaG93IHZlcnNpb24ifSwKKyAgICAgICAgICAgIE9wdGlvbkNvbmZsaWN0RXJyb3IsCisgICAgICAgICAgICAib3B0aW9uIC12Ly0tdmVyc2lvbjogY29uZmxpY3Rpbmcgb3B0aW9uIHN0cmluZyhzKTogLXYiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLm1zZywgImNvbmZsaWN0aW5nIG9wdGlvbiBzdHJpbmcocyk6IC12IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIub3B0aW9uX2lkLCAiLXYvLS12ZXJzaW9uIikKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0X2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWVjb25mbGljdF9lcnJvcihzZWxmLnBhcnNlci5hZGRfb3B0aW9uKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3RfZXJyb3JfZ3JvdXAoc2VsZik6CisgICAgICAgIGdyb3VwID0gT3B0aW9uR3JvdXAoc2VsZi5wYXJzZXIsICJHcm91cCAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlY29uZmxpY3RfZXJyb3IoZ3JvdXAuYWRkX29wdGlvbikKKworICAgIGRlZiB0ZXN0X25vX3N1Y2hfY29uZmxpY3RfaGFuZGxlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBzZWxmLnBhcnNlci5zZXRfY29uZmxpY3RfaGFuZGxlciwgKCdmb28nLCksIE5vbmUsCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiaW52YWxpZCBjb25mbGljdF9yZXNvbHV0aW9uIHZhbHVlICdmb28nIikKKworCitjbGFzcyBUZXN0Q29uZmxpY3RSZXNvbHZlKENvbmZsaWN0QmFzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBDb25mbGljdEJhc2Uuc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5wYXJzZXIuc2V0X2NvbmZsaWN0X2hhbmRsZXIoInJlc29sdmUiKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLXZlcnNpb24iLCBhY3Rpb249ImNhbGxiYWNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaz1zZWxmLnNob3dfdmVyc2lvbiwgaGVscD0ic2hvdyB2ZXJzaW9uIikKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0X3Jlc29sdmUoc2VsZik6CisgICAgICAgIHZfb3B0ID0gc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLXYiKQorICAgICAgICB2ZXJib3NlX29wdCA9IHNlbGYucGFyc2VyLmdldF9vcHRpb24oIi0tdmVyYm9zZSIpCisgICAgICAgIHZlcnNpb25fb3B0ID0gc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLS12ZXJzaW9uIikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodl9vcHQgaXMgdmVyc2lvbl9vcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2X29wdCBpcyBub3QgdmVyYm9zZV9vcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodl9vcHQuX2xvbmdfb3B0cywgWyItLXZlcnNpb24iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2ZXJzaW9uX29wdC5fc2hvcnRfb3B0cywgWyItdiJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZlcnNpb25fb3B0Ll9sb25nX29wdHMsIFsiLS12ZXJzaW9uIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmVyYm9zZV9vcHQuX3Nob3J0X29wdHMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZlcmJvc2Vfb3B0Ll9sb25nX29wdHMsIFsiLS12ZXJib3NlIl0pCisKKyAgICBkZWYgdGVzdF9jb25mbGljdF9yZXNvbHZlX2hlbHAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T3V0cHV0KFsiLWgiXSwgIiIiXAorT3B0aW9uczoKKyAgLS12ZXJib3NlICAgICAgaW5jcmVtZW50IHZlcmJvc2l0eQorICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgIC12LCAtLXZlcnNpb24gIHNob3cgdmVyc2lvbgorIiIiKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3RfcmVzb2x2ZV9zaG9ydF9vcHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi12Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3ZlcmJvc2UnOiBOb25lLCAnc2hvd192ZXJzaW9uJzogMX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0X3Jlc29sdmVfbG9uZ19vcHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tdmVyYm9zZSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgeyd2ZXJib3NlJzogMX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0X3Jlc29sdmVfbG9uZ19vcHRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItLXZlcmJvc2UiLCAiLS12ZXJzaW9uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3ZlcmJvc2UnOiAxLCAnc2hvd192ZXJzaW9uJzogMX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworY2xhc3MgVGVzdENvbmZsaWN0T3ZlcnJpZGUoQmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBJbnRlcmNlcHRpbmdPcHRpb25QYXJzZXIodXNhZ2U9U1VQUFJFU1NfVVNBR0UpCisgICAgICAgIHNlbGYucGFyc2VyLnNldF9jb25mbGljdF9oYW5kbGVyKCJyZXNvbHZlIikKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLW4iLCAiLS1kcnktcnVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJkcnlfcnVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJkb24ndCBkbyBhbnl0aGluZyIpCisgICAgICAgIHNlbGYucGFyc2VyLmFkZF9vcHRpb24oIi0tZHJ5LXJ1biIsICItbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV9jb25zdCIsIGNvbnN0PTQyLCBkZXN0PSJkcnlfcnVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJkcnkgcnVuIG1vZGUiKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3Rfb3ZlcnJpZGVfb3B0cyhzZWxmKToKKyAgICAgICAgb3B0ID0gc2VsZi5wYXJzZXIuZ2V0X29wdGlvbigiLS1kcnktcnVuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHQuX3Nob3J0X29wdHMsIFsiLW4iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHQuX2xvbmdfb3B0cywgWyItLWRyeS1ydW4iXSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0X292ZXJyaWRlX2hlbHAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0T3V0cHV0KFsiLWgiXSwgIiIiXAorT3B0aW9uczoKKyAgLWgsIC0taGVscCAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAtbiwgLS1kcnktcnVuICBkcnkgcnVuIG1vZGUKKyIiIikKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0X292ZXJyaWRlX2FyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2RyeV9ydW4nOiA0Mn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKKworIyAtLSBPdGhlciB0ZXN0aW5nLiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK19leHBlY3RlZF9oZWxwX2Jhc2ljID0gIiIiXAorVXNhZ2U6IGJhci5weSBbb3B0aW9uc10KKworT3B0aW9uczoKKyAgLWEgQVBQTEUgICAgICAgICAgIHRocm93IEFQUExFcyBhdCBiYXNrZXQKKyAgLWIgTlVNLCAtLWJvbz1OVU0gIHNob3V0ICJib28hIiBOVU0gdGltZXMgKGluIG9yZGVyIHRvIGZyaWdodGVuIGF3YXkgYWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgZXZpbCBzcGlyaXRzIHRoYXQgY2F1c2UgdHJvdWJsZSBhbmQgbWF5aGVtKQorICAtLWZvbz1GT08gICAgICAgICAgc3RvcmUgRk9PIGluIHRoZSBmb28gbGlzdCBmb3IgbGF0ZXIgZm9vaW5nCisgIC1oLCAtLWhlbHAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisiIiIKKworX2V4cGVjdGVkX2hlbHBfbG9uZ19vcHRzX2ZpcnN0ID0gIiIiXAorVXNhZ2U6IGJhci5weSBbb3B0aW9uc10KKworT3B0aW9uczoKKyAgLWEgQVBQTEUgICAgICAgICAgIHRocm93IEFQUExFcyBhdCBiYXNrZXQKKyAgLS1ib289TlVNLCAtYiBOVU0gIHNob3V0ICJib28hIiBOVU0gdGltZXMgKGluIG9yZGVyIHRvIGZyaWdodGVuIGF3YXkgYWxsIHRoZQorICAgICAgICAgICAgICAgICAgICAgZXZpbCBzcGlyaXRzIHRoYXQgY2F1c2UgdHJvdWJsZSBhbmQgbWF5aGVtKQorICAtLWZvbz1GT08gICAgICAgICAgc3RvcmUgRk9PIGluIHRoZSBmb28gbGlzdCBmb3IgbGF0ZXIgZm9vaW5nCisgIC0taGVscCwgLWggICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisiIiIKKworX2V4cGVjdGVkX2hlbHBfdGl0bGVfZm9ybWF0dGVyID0gIiIiXAorVXNhZ2UKKz09PT09CisgIGJhci5weSBbb3B0aW9uc10KKworT3B0aW9ucworPT09PT09PQorLWEgQVBQTEUgICAgICAgICAgIHRocm93IEFQUExFcyBhdCBiYXNrZXQKKy0tYm9vPU5VTSwgLWIgTlVNICBzaG91dCAiYm9vISIgTlVNIHRpbWVzIChpbiBvcmRlciB0byBmcmlnaHRlbiBhd2F5IGFsbCB0aGUKKyAgICAgICAgICAgICAgICAgICBldmlsIHNwaXJpdHMgdGhhdCBjYXVzZSB0cm91YmxlIGFuZCBtYXloZW0pCistLWZvbz1GT08gICAgICAgICAgc3RvcmUgRk9PIGluIHRoZSBmb28gbGlzdCBmb3IgbGF0ZXIgZm9vaW5nCistLWhlbHAsIC1oICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorIiIiCisKK19leHBlY3RlZF9oZWxwX3Nob3J0X2xpbmVzID0gIiIiXAorVXNhZ2U6IGJhci5weSBbb3B0aW9uc10KKworT3B0aW9uczoKKyAgLWEgQVBQTEUgICAgICAgICAgIHRocm93IEFQUExFcyBhdCBiYXNrZXQKKyAgLWIgTlVNLCAtLWJvbz1OVU0gIHNob3V0ICJib28hIiBOVU0gdGltZXMgKGluIG9yZGVyIHRvCisgICAgICAgICAgICAgICAgICAgICBmcmlnaHRlbiBhd2F5IGFsbCB0aGUgZXZpbCBzcGlyaXRzCisgICAgICAgICAgICAgICAgICAgICB0aGF0IGNhdXNlIHRyb3VibGUgYW5kIG1heWhlbSkKKyAgLS1mb289Rk9PICAgICAgICAgIHN0b3JlIEZPTyBpbiB0aGUgZm9vIGxpc3QgZm9yIGxhdGVyCisgICAgICAgICAgICAgICAgICAgICBmb29pbmcKKyAgLWgsIC0taGVscCAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyIiIgorCitjbGFzcyBUZXN0SGVscChCYXNlVGVzdCk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IHNlbGYubWFrZV9wYXJzZXIoODApCisKKyAgICBkZWYgbWFrZV9wYXJzZXIoc2VsZiwgY29sdW1ucyk6CisgICAgICAgIG9wdGlvbnMgPSBbCisgICAgICAgICAgICBtYWtlX29wdGlvbigiLWEiLCB0eXBlPSJzdHJpbmciLCBkZXN0PSdhJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9IkFQUExFIiwgaGVscD0idGhyb3cgQVBQTEVzIGF0IGJhc2tldCIpLAorICAgICAgICAgICAgbWFrZV9vcHRpb24oIi1iIiwgIi0tYm9vIiwgdHlwZT0iaW50IiwgZGVzdD0nYm9vJywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9Ik5VTSIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPQorICAgICAgICAgICAgICAgICAgICAgICAgInNob3V0IFwiYm9vIVwiIE5VTSB0aW1lcyAoaW4gb3JkZXIgdG8gZnJpZ2h0ZW4gYXdheSAiCisgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIHRoZSBldmlsIHNwaXJpdHMgdGhhdCBjYXVzZSB0cm91YmxlIGFuZCBtYXloZW0pIiksCisgICAgICAgICAgICBtYWtlX29wdGlvbigiLS1mb28iLCBhY3Rpb249ImFwcGVuZCIsIHR5cGU9InN0cmluZyIsIGRlc3Q9J2ZvbycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJzdG9yZSBGT08gaW4gdGhlIGZvbyBsaXN0IGZvciBsYXRlciBmb29pbmciKSwKKyAgICAgICAgICAgIF0KKworICAgICAgICAjIFdlIG5lZWQgdG8gc2V0IENPTFVNTlMgZm9yIHRoZSBPcHRpb25QYXJzZXIgY29uc3RydWN0b3IsIGJ1dAorICAgICAgICAjIHdlIG11c3QgcmVzdG9yZSBpdHMgb3JpZ2luYWwgdmFsdWUgLS0gb3RoZXJ3aXNlLCB0aGlzIHRlc3QKKyAgICAgICAgIyBzY3Jld3MgdGhpbmdzIHVwIGZvciBvdGhlciB0ZXN0cyB3aGVuIGl0J3MgcGFydCBvZiB0aGUgUHl0aG9uCisgICAgICAgICMgdGVzdCBzdWl0ZS4KKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgIGVudlsnQ09MVU1OUyddID0gc3RyKGNvbHVtbnMpCisgICAgICAgICAgICByZXR1cm4gSW50ZXJjZXB0aW5nT3B0aW9uUGFyc2VyKG9wdGlvbl9saXN0PW9wdGlvbnMpCisKKyAgICBkZWYgYXNzZXJ0SGVscEVxdWFscyhzZWxmLCBleHBlY3RlZF9vdXRwdXQpOgorICAgICAgICBpZiB0eXBlKGV4cGVjdGVkX291dHB1dCkgaXMgdHlwZXMuVW5pY29kZVR5cGU6CisgICAgICAgICAgICBlbmNvZGluZyA9IHNlbGYucGFyc2VyLl9nZXRfZW5jb2Rpbmcoc3lzLnN0ZG91dCkKKyAgICAgICAgICAgIGV4cGVjdGVkX291dHB1dCA9IGV4cGVjdGVkX291dHB1dC5lbmNvZGUoZW5jb2RpbmcsICJyZXBsYWNlIikKKworICAgICAgICBzYXZlX2FyZ3YgPSBzeXMuYXJndls6XQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIE1ha2Ugb3B0cGFyc2UgYmVsaWV2ZSBiYXIucHkgaXMgYmVpbmcgZXhlY3V0ZWQuCisgICAgICAgICAgICBzeXMuYXJndlswXSA9IG9zLnBhdGguam9pbigiZm9vIiwgImJhci5weSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE91dHB1dChbIi1oIl0sIGV4cGVjdGVkX291dHB1dCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5hcmd2WzpdID0gc2F2ZV9hcmd2CisKKyAgICBkZWYgdGVzdF9oZWxwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEhlbHBFcXVhbHMoX2V4cGVjdGVkX2hlbHBfYmFzaWMpCisKKyAgICBkZWYgdGVzdF9oZWxwX29sZF91c2FnZShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIuc2V0X3VzYWdlKCJVc2FnZTogJXByb2cgW29wdGlvbnNdIikKKyAgICAgICAgc2VsZi5hc3NlcnRIZWxwRXF1YWxzKF9leHBlY3RlZF9oZWxwX2Jhc2ljKQorCisgICAgZGVmIHRlc3RfaGVscF9sb25nX29wdHNfZmlyc3Qoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLmZvcm1hdHRlci5zaG9ydF9maXJzdCA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRIZWxwRXF1YWxzKF9leHBlY3RlZF9oZWxwX2xvbmdfb3B0c19maXJzdCkKKworICAgIGRlZiB0ZXN0X2hlbHBfdGl0bGVfZm9ybWF0dGVyKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52WyJDT0xVTU5TIl0gPSAiODAiCisgICAgICAgICAgICBzZWxmLnBhcnNlci5mb3JtYXR0ZXIgPSBUaXRsZWRIZWxwRm9ybWF0dGVyKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SGVscEVxdWFscyhfZXhwZWN0ZWRfaGVscF90aXRsZV9mb3JtYXR0ZXIpCisKKyAgICBkZWYgdGVzdF93cmFwX2NvbHVtbnMoc2VsZik6CisgICAgICAgICMgRW5zdXJlIHRoYXQgd3JhcHBpbmcgcmVzcGVjdHMgJENPTFVNTlMgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgICAgICAgICMgTmVlZCB0byByZWNvbnN0cnVjdCB0aGUgcGFyc2VyLCBzaW5jZSB0aGF0J3MgdGhlIG9ubHkgdGltZQorICAgICAgICAjIHdlIGxvb2sgYXQgJENPTFVNTlMuCisgICAgICAgIHNlbGYucGFyc2VyID0gc2VsZi5tYWtlX3BhcnNlcig2MCkKKyAgICAgICAgc2VsZi5hc3NlcnRIZWxwRXF1YWxzKF9leHBlY3RlZF9oZWxwX3Nob3J0X2xpbmVzKQorCisgICAgZGVmIHRlc3RfaGVscF91bmljb2RlKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlciA9IEludGVyY2VwdGluZ09wdGlvblBhcnNlcih1c2FnZT1TVVBQUkVTU19VU0FHRSkKKyAgICAgICAgc2VsZi5wYXJzZXIuYWRkX29wdGlvbigiLWEiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPXUib2xcdTAwRTkhIikKKyAgICAgICAgZXhwZWN0ID0gdSIiIlwKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgLWEgICAgICAgICAgb2xcdTAwRTkhCisiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRIZWxwRXF1YWxzKGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X2hlbHBfdW5pY29kZV9kZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBJbnRlcmNlcHRpbmdPcHRpb25QYXJzZXIodXNhZ2U9U1VQUFJFU1NfVVNBR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXUib2xcdTAwRTkhIikKKyAgICAgICAgZXhwZWN0ID0gdSIiIlwKK29sXHUwMEU5IQorCitPcHRpb25zOgorICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRIZWxwRXF1YWxzKGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X2hlbHBfZGVzY3JpcHRpb25fZ3JvdXBzKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlci5zZXRfZGVzY3JpcHRpb24oCisgICAgICAgICAgICAiVGhpcyBpcyB0aGUgcHJvZ3JhbSBkZXNjcmlwdGlvbiBmb3IgJXByb2cuICAlcHJvZyBoYXMgIgorICAgICAgICAgICAgImFuIG9wdGlvbiBncm91cCBhcyB3ZWxsIGFzIHNpbmdsZSBvcHRpb25zLiIpCisKKyAgICAgICAgZ3JvdXAgPSBPcHRpb25Hcm91cCgKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLCAiRGFuZ2Vyb3VzIE9wdGlvbnMiLAorICAgICAgICAgICAgIkNhdXRpb246IHVzZSBvZiB0aGVzZSBvcHRpb25zIGlzIGF0IHlvdXIgb3duIHJpc2suICAiCisgICAgICAgICAgICAiSXQgaXMgYmVsaWV2ZWQgdGhhdCBzb21lIG9mIHRoZW0gYml0ZS4iKQorICAgICAgICBncm91cC5hZGRfb3B0aW9uKCItZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9Ikdyb3VwIG9wdGlvbi4iKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uX2dyb3VwKGdyb3VwKQorCisgICAgICAgIGV4cGVjdCA9ICIiIlwKK1VzYWdlOiBiYXIucHkgW29wdGlvbnNdCisKK1RoaXMgaXMgdGhlIHByb2dyYW0gZGVzY3JpcHRpb24gZm9yIGJhci5weS4gIGJhci5weSBoYXMgYW4gb3B0aW9uIGdyb3VwIGFzCit3ZWxsIGFzIHNpbmdsZSBvcHRpb25zLgorCitPcHRpb25zOgorICAtYSBBUFBMRSAgICAgICAgICAgdGhyb3cgQVBQTEVzIGF0IGJhc2tldAorICAtYiBOVU0sIC0tYm9vPU5VTSAgc2hvdXQgImJvbyEiIE5VTSB0aW1lcyAoaW4gb3JkZXIgdG8gZnJpZ2h0ZW4gYXdheSBhbGwgdGhlCisgICAgICAgICAgICAgICAgICAgICBldmlsIHNwaXJpdHMgdGhhdCBjYXVzZSB0cm91YmxlIGFuZCBtYXloZW0pCisgIC0tZm9vPUZPTyAgICAgICAgICBzdG9yZSBGT08gaW4gdGhlIGZvbyBsaXN0IGZvciBsYXRlciBmb29pbmcKKyAgLWgsIC0taGVscCAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKworICBEYW5nZXJvdXMgT3B0aW9uczoKKyAgICBDYXV0aW9uOiB1c2Ugb2YgdGhlc2Ugb3B0aW9ucyBpcyBhdCB5b3VyIG93biByaXNrLiAgSXQgaXMgYmVsaWV2ZWQKKyAgICB0aGF0IHNvbWUgb2YgdGhlbSBiaXRlLgorCisgICAgLWcgICAgICAgICAgICAgICBHcm91cCBvcHRpb24uCisiIiIKKworICAgICAgICBzZWxmLmFzc2VydEhlbHBFcXVhbHMoZXhwZWN0KQorCisgICAgICAgIHNlbGYucGFyc2VyLmVwaWxvZyA9ICJQbGVhc2UgcmVwb3J0IGJ1Z3MgdG8gL2Rldi9udWxsLiIKKyAgICAgICAgc2VsZi5hc3NlcnRIZWxwRXF1YWxzKGV4cGVjdCArICJcblBsZWFzZSByZXBvcnQgYnVncyB0byAvZGV2L251bGwuXG4iKQorCisKK2NsYXNzIFRlc3RNYXRjaEFiYnJldihCYXNlVGVzdCk6CisgICAgZGVmIHRlc3RfbWF0Y2hfYWJicmV2KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9tYXRjaF9hYmJyZXYoIi0tZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ii0tZm96IjogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1mb28iOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWZpZSI6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tZiI6IE5vbmV9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiLS1mIikKKworICAgIGRlZiB0ZXN0X21hdGNoX2FiYnJldl9lcnJvcihzZWxmKToKKyAgICAgICAgcyA9ICItLWYiCisgICAgICAgIHdvcmRtYXAgPSB7Ii0tZm96IjogTm9uZSwgIi0tZm9vIjogTm9uZSwgIi0tZmllIjogTm9uZX0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBfbWF0Y2hfYWJicmV2LCAocywgd29yZG1hcCksIE5vbmUsCisgICAgICAgICAgICBCYWRPcHRpb25FcnJvciwgImFtYmlndW91cyBvcHRpb246IC0tZiAoLS1maWUsIC0tZm9vLCAtLWZvej8pIikKKworCitjbGFzcyBUZXN0UGFyc2VOdW1iZXIoQmFzZVRlc3QpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBJbnRlcmNlcHRpbmdPcHRpb25QYXJzZXIoKQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItbiIsIHR5cGU9aW50KQorICAgICAgICBzZWxmLnBhcnNlci5hZGRfb3B0aW9uKCItbCIsIHR5cGU9bG9uZykKKworICAgIGRlZiB0ZXN0X3BhcnNlX251bV9mYWlsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIF9wYXJzZV9udW0sICgiIiwgaW50KSwge30sCisgICAgICAgICAgICBWYWx1ZUVycm9yLAorICAgICAgICAgICAgcmUuY29tcGlsZShyImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkuKjogJz8nPyIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIF9wYXJzZV9udW0sICgiMHhPb29wcyIsIGxvbmcpLCB7fSwKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsCisgICAgICAgICAgICByZS5jb21waWxlKHIiaW52YWxpZCBsaXRlcmFsIGZvciBsb25nKCkuKjogJz8weE9vb3BzJz8iKSkKKworICAgIGRlZiB0ZXN0X3BhcnNlX251bV9vayhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfcGFyc2VfbnVtKCIwIiwgaW50KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfcGFyc2VfbnVtKCIweDEwIiwgaW50KSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3BhcnNlX251bSgiMFhBIiwgbG9uZyksIDEwTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfcGFyc2VfbnVtKCIwMTAiLCBsb25nKSwgOEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3BhcnNlX251bSgiMGIxMSIsIGludCksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3BhcnNlX251bSgiMGIiLCBsb25nKSwgMEwpCisKKyAgICBkZWYgdGVzdF9udW1lcmljX29wdGlvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1uIiwgIjQyIiwgIi1sIiwgIjB4MjAiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm4iOiA0MiwgImwiOiAweDIwIH0sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItbiIsICIwYjAxMDEiLCAiLWwwMTAiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm4iOiA1LCAibCI6IDggfSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VGYWlsKFsiLW4wMDgiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbiAtbjogaW52YWxpZCBpbnRlZ2VyIHZhbHVlOiAnMDA4JyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VGYWlsKFsiLWwwYjAxMjMiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbiAtbDogaW52YWxpZCBsb25nIGludGVnZXIgdmFsdWU6ICcwYjAxMjMnIikKKyAgICAgICAgc2VsZi5hc3NlcnRQYXJzZUZhaWwoWyItbCIsICIweDEyeCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uIC1sOiBpbnZhbGlkIGxvbmcgaW50ZWdlciB2YWx1ZTogJzB4MTJ4JyIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X29zLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfb3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxZjQ5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X29zLnB5CkBAIC0wLDAgKzEsODY2IEBACisjIEFzIGEgdGVzdCBzdWl0ZSBmb3IgdGhlIG9zIG1vZHVsZSwgdGhpcyBpcyB3b2VmdWxseSBpbmFkZXF1YXRlLCBidXQgdGhpcworIyBkb2VzIGFkZCB0ZXN0cyBmb3IgYSBmZXcgZnVuY3Rpb25zIHdoaWNoIGhhdmUgYmVlbiBkZXRlcm1pbmVkIHRvIGJlIG1vcmUKKyMgcG9ydGFibGUgdGhhbiB0aGV5IGhhZCBiZWVuIHRob3VnaHQgdG8gYmUuCisKK2ltcG9ydCBvcworaW1wb3J0IGVycm5vCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IHN5cworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgbW1hcAoraW1wb3J0IHV1aWQKKword2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0ZW1wbmFtIiwgUnVudGltZVdhcm5pbmcsIF9fbmFtZV9fKQord2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0bXBuYW0iLCBSdW50aW1lV2FybmluZywgX19uYW1lX18pCisKKyMgVGVzdHMgY3JlYXRpbmcgVEVTVEZOCitjbGFzcyBGaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGVzdF9zdXBwb3J0LlRFU1RGTik6CisgICAgICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICB0ZWFyRG93biA9IHNldFVwCisKKyAgICBkZWYgdGVzdF9hY2Nlc3Moc2VsZik6CisgICAgICAgIGYgPSBvcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIG9zLk9fQ1JFQVR8b3MuT19SRFdSKQorICAgICAgICBvcy5jbG9zZShmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MuYWNjZXNzKHRlc3Rfc3VwcG9ydC5URVNURk4sIG9zLldfT0spKQorCisgICAgZGVmIHRlc3RfY2xvc2VyYW5nZShzZWxmKToKKyAgICAgICAgZmlyc3QgPSBvcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIG9zLk9fQ1JFQVR8b3MuT19SRFdSKQorICAgICAgICAjIFdlIG11c3QgYWxsb2NhdGUgdHdvIGNvbnNlY3V0aXZlIGZpbGUgZGVzY3JpcHRvcnMsIG90aGVyd2lzZQorICAgICAgICAjIGl0IHdpbGwgbWVzcyB1cCBvdGhlciBmaWxlIGRlc2NyaXB0b3JzIChwZXJoYXBzIGV2ZW4gdGhlIHRocmVlCisgICAgICAgICMgc3RhbmRhcmQgb25lcykuCisgICAgICAgIHNlY29uZCA9IG9zLmR1cChmaXJzdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0cmllcyA9IDAKKyAgICAgICAgICAgIHdoaWxlIHNlY29uZCAhPSBmaXJzdCArIDE6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmlyc3QpCisgICAgICAgICAgICAgICAgcmV0cmllcyArPSAxCisgICAgICAgICAgICAgICAgaWYgcmV0cmllcyA+IDEwOgorICAgICAgICAgICAgICAgICAgICAjIFhYWCB0ZXN0IHNraXBwZWQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY291bGRuJ3QgYWxsb2NhdGUgdHdvIGNvbnNlY3V0aXZlIGZkcyIpCisgICAgICAgICAgICAgICAgZmlyc3QsIHNlY29uZCA9IHNlY29uZCwgb3MuZHVwKHNlY29uZCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNsb3NlKHNlY29uZCkKKyAgICAgICAgIyBjbG9zZSBhIGZkIHRoYXQgaXMgb3BlbiwgYW5kIG9uZSB0aGF0IGlzbid0CisgICAgICAgIG9zLmNsb3NlcmFuZ2UoZmlyc3QsIGZpcnN0ICsgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Mud3JpdGUsIGZpcnN0LCAiYSIpCisKKyAgICBAdGVzdF9zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3JlbmFtZShzZWxmKToKKyAgICAgICAgcGF0aCA9IHVuaWNvZGUodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgb2xkID0gc3lzLmdldHJlZmNvdW50KHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3MucmVuYW1lLCBwYXRoLCAwKQorICAgICAgICBuZXcgPSBzeXMuZ2V0cmVmY291bnQocGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvbGQsIG5ldykKKworCitjbGFzcyBUZW1wb3JhcnlGaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5maWxlcyA9IFtdCisgICAgICAgIG9zLm1rZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBuYW1lIGluIHNlbGYuZmlsZXM6CisgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKyAgICAgICAgb3Mucm1kaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiBjaGVja190ZW1wZmlsZShzZWxmLCBuYW1lKToKKyAgICAgICAgIyBtYWtlIHN1cmUgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0OgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAiZmlsZSBhbHJlYWR5IGV4aXN0cyBmb3IgdGVtcG9yYXJ5IGZpbGUiKQorICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBjYW4gY3JlYXRlIHRoZSBmaWxlCisgICAgICAgIG9wZW4obmFtZSwgInciKQorICAgICAgICBzZWxmLmZpbGVzLmFwcGVuZChuYW1lKQorCisgICAgZGVmIHRlc3RfdGVtcG5hbShzZWxmKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICJ0ZW1wbmFtIik6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0ZW1wbmFtIiwgUnVudGltZVdhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByInRlc3Rfb3MkIikKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAidGVtcG5hbSIsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdGVtcGZpbGUob3MudGVtcG5hbSgpKQorCisgICAgICAgICAgICBuYW1lID0gb3MudGVtcG5hbSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5jaGVja190ZW1wZmlsZShuYW1lKQorCisgICAgICAgICAgICBuYW1lID0gb3MudGVtcG5hbSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAicGZ4IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmJhc2VuYW1lKG5hbWUpWzozXSA9PSAicGZ4IikKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdGVtcGZpbGUobmFtZSkKKworICAgIGRlZiB0ZXN0X3RtcGZpbGUoc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9zLCAidG1wZmlsZSIpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgQXMgd2l0aCB0ZXN0X3RtcG5hbSgpIGJlbG93LCB0aGUgV2luZG93cyBpbXBsZW1lbnRhdGlvbiBvZiB0bXBmaWxlKCkKKyAgICAgICAgIyBhdHRlbXB0cyB0byBjcmVhdGUgYSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgY3VycmVudCBkcml2ZS4KKyAgICAgICAgIyBPbiBWaXN0YSBhbmQgU2VydmVyIDIwMDgsIHRoaXMgdGVzdCB3aWxsIGFsd2F5cyBmYWlsIGZvciBub3JtYWwgdXNlcnMKKyAgICAgICAgIyBhcyB3cml0aW5nIHRvIHRoZSByb290IGRpcmVjdG9yeSByZXF1aXJlcyBlbGV2YXRlZCBwcml2aWxlZ2VzLiAgV2l0aAorICAgICAgICAjIFhQIGFuZCBiZWxvdywgdGhlIHNlbWFudGljcyBvZiB0bXBmaWxlKCkgYXJlIHRoZSBzYW1lLCBidXQgdGhlIHVzZXIKKyAgICAgICAgIyBydW5uaW5nIHRoZSB0ZXN0IGlzIG1vcmUgbGlrZWx5IHRvIGhhdmUgYWRtaW5pc3RyYXRpdmUgcHJpdmlsZWdlcyBvbgorICAgICAgICAjIHRoZWlyIGFjY291bnQgYWxyZWFkeS4gIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlbiBvcy50bXBmaWxlKCkgc2hvdWxkCisgICAgICAgICMgd29yay4gIEluIG9yZGVyIHRvIG1ha2UgdGhpcyB0ZXN0IGFzIHVzZWZ1bCBhcyBwb3NzaWJsZSwgcmF0aGVyIHRoYW4KKyAgICAgICAgIyB0cnlpbmcgdG8gZGV0ZWN0IFdpbmRvd3MgdmVyc2lvbnMgb3Igd2hldGhlciBvciBub3QgdGhlIHVzZXIgaGFzIHRoZQorICAgICAgICAjIHJpZ2h0IHBlcm1pc3Npb25zLCBqdXN0IHRyeSBhbmQgY3JlYXRlIGEgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkKKyAgICAgICAgIyBhbmQgc2VlIGlmIGl0IHJhaXNlcyBhICdQZXJtaXNzaW9uIGRlbmllZCcgT1NFcnJvci4gIElmIGl0IGRvZXMsIHRoZW4KKyAgICAgICAgIyB0ZXN0IHRoYXQgYSBzdWJzZXF1ZW50IGNhbGwgdG8gb3MudG1wZmlsZSgpIHJhaXNlcyB0aGUgc2FtZSBlcnJvci4gSWYKKyAgICAgICAgIyBpdCBkb2Vzbid0LCBhc3N1bWUgd2UncmUgb24gWFAgb3IgYmVsb3cgYW5kIHRoZSB1c2VyIHJ1bm5pbmcgdGhlIHRlc3QKKyAgICAgICAgIyBoYXMgYWRtaW5pc3RyYXRpdmUgcHJpdmlsZWdlcywgYW5kIHByb2NlZWQgd2l0aCB0aGUgdGVzdCBhcyBub3JtYWwuCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAidG1wZmlsZSIsIERlcHJlY2F0aW9uV2FybmluZykKKworICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICAgICAgbmFtZSA9ICdcXHB5dGhvbl90ZXN0X29zX3Rlc3RfdG1wZmlsZS50eHQnCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobmFtZSk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShuYW1lKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZnAgPSBvcGVuKG5hbWUsICd3JykKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZmlyc3Q6CisgICAgICAgICAgICAgICAgICAgICMgb3BlbigpIGZhaWxlZCwgYXNzZXJ0IHRtcGZpbGUoKSBmYWlscyBpbiB0aGUgc2FtZSB3YXkuCisgICAgICAgICAgICAgICAgICAgICMgQWx0aG91Z2ggb3BlbigpIHJhaXNlcyBhbiBJT0Vycm9yIGFuZCBvcy50bXBmaWxlKCkgcmFpc2VzIGFuCisgICAgICAgICAgICAgICAgICAgICMgT1NFcnJvcigpLCAnYXJncycgd2lsbCBiZSAoMTMsICdQZXJtaXNzaW9uIGRlbmllZCcpIGluIGJvdGgKKyAgICAgICAgICAgICAgICAgICAgIyBjYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZnAgPSBvcy50bXBmaWxlKCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIHNlY29uZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlyc3QuYXJncywgc2Vjb25kLmFyZ3MpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIG9zLnRtcGZpbGUoKSB0byByYWlzZSBPU0Vycm9yIikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBvcGVuKCkgd29ya2VkLCB0aGVyZWZvcmUsIHRtcGZpbGUoKSBzaG91bGQgd29yay4gIENsb3NlIG91cgorICAgICAgICAgICAgICAgICAgICAjIGR1bW15IGZpbGUgYW5kIHByb2NlZWQgd2l0aCB0aGUgdGVzdCBhcyBub3JtYWwuCisgICAgICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG5hbWUpCisKKyAgICAgICAgICAgIGZwID0gb3MudG1wZmlsZSgpCisgICAgICAgICAgICBmcC53cml0ZSgiZm9vYmFyIikKKyAgICAgICAgICAgIGZwLnNlZWsoMCwwKQorICAgICAgICAgICAgcyA9IGZwLnJlYWQoKQorICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMgPT0gImZvb2JhciIpCisKKyAgICBkZWYgdGVzdF90bXBuYW0oc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9zLCAidG1wbmFtIik6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0bXBuYW0iLCBSdW50aW1lV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIidGVzdF9vcyQiKQorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0bXBuYW0iLCBEZXByZWNhdGlvbldhcm5pbmcpCisKKyAgICAgICAgICAgIG5hbWUgPSBvcy50bXBuYW0oKQorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgid2luMzIiLCk6CisgICAgICAgICAgICAgICAgIyBUaGUgV2luZG93cyB0bXBuYW0oKSBzZWVtcyB1c2VsZXNzLiAgRnJvbSB0aGUgTVMgZG9jczoKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyAgICAgVGhlIGNoYXJhY3RlciBzdHJpbmcgdGhhdCB0bXBuYW0gY3JlYXRlcyBjb25zaXN0cyBvZgorICAgICAgICAgICAgICAgICMgICAgIHRoZSBwYXRoIHByZWZpeCwgZGVmaW5lZCBieSB0aGUgZW50cnkgUF90bXBkaXIgaW4gdGhlCisgICAgICAgICAgICAgICAgIyAgICAgZmlsZSBTVERJTy5ILCBmb2xsb3dlZCBieSBhIHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlCisgICAgICAgICAgICAgICAgIyAgICAgZGlnaXQgY2hhcmFjdGVycyAnMCcgdGhyb3VnaCAnOSc7IHRoZSBudW1lcmljYWwgdmFsdWUKKyAgICAgICAgICAgICAgICAjICAgICBvZiB0aGlzIHN0cmluZyBpcyBpbiB0aGUgcmFuZ2UgMSAtIDY1LDUzNS4gIENoYW5naW5nIHRoZQorICAgICAgICAgICAgICAgICMgICAgIGRlZmluaXRpb25zIG9mIExfdG1wbmFtIG9yIFBfdG1wZGlyIGluIFNURElPLkggZG9lcyBub3QKKyAgICAgICAgICAgICAgICAjICAgICBjaGFuZ2UgdGhlIG9wZXJhdGlvbiBvZiB0bXBuYW0uCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgVGhlIHJlYWxseSBiaXphcnJlIHBhcnQgaXMgdGhhdCwgYXQgbGVhc3QgdW5kZXIgTVNWQzYsCisgICAgICAgICAgICAgICAgIyBQX3RtcGRpciBpcyAiXFwiLiAgVGhhdCBpcywgdGhlIHBhdGggcmV0dXJuZWQgcmVmZXJzIHRvCisgICAgICAgICAgICAgICAgIyB0aGUgcm9vdCBvZiB0aGUgY3VycmVudCBkcml2ZS4gIFRoYXQncyBhIHRlcnJpYmxlIHBsYWNlIHRvCisgICAgICAgICAgICAgICAgIyBwdXQgdGVtcCBmaWxlcywgYW5kLCBkZXBlbmRpbmcgb24gcHJpdmlsZWdlcywgdGhlIHVzZXIKKyAgICAgICAgICAgICAgICAjIG1heSBub3QgZXZlbiBiZSBhYmxlIHRvIG9wZW4gYSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIGFscmVhZHkgZXhpc3RzIGZvciB0ZW1wb3JhcnkgZmlsZSIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdGVtcGZpbGUobmFtZSkKKworIyBUZXN0IGF0dHJpYnV0ZXMgb24gcmV0dXJuIHZhbHVlcyBmcm9tIG9zLipzdGF0KiBmYW1pbHkuCitjbGFzcyBTdGF0QXR0cmlidXRlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgb3MubWtkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5mbmFtZSA9IG9zLnBhdGguam9pbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiZjEiKQorICAgICAgICBmID0gb3BlbihzZWxmLmZuYW1lLCAnd2InKQorICAgICAgICBmLndyaXRlKCJBQkMiKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MudW5saW5rKHNlbGYuZm5hbWUpCisgICAgICAgIG9zLnJtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9zdGF0X2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9zLCAic3RhdCIpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaW1wb3J0IHN0YXQKKyAgICAgICAgcmVzdWx0ID0gb3Muc3RhdChzZWxmLmZuYW1lKQorCisgICAgICAgICMgTWFrZSBzdXJlIGRpcmVjdCBhY2Nlc3Mgd29ya3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbc3RhdC5TVF9TSVpFXSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc3Rfc2l6ZSwgMykKKworICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlIHRoZXJlCisgICAgICAgIG1lbWJlcnMgPSBkaXIocmVzdWx0KQorICAgICAgICBmb3IgbmFtZSBpbiBkaXIoc3RhdCk6CisgICAgICAgICAgICBpZiBuYW1lWzozXSA9PSAnU1RfJzoKKyAgICAgICAgICAgICAgICBhdHRyID0gbmFtZS5sb3dlcigpCisgICAgICAgICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgiVElNRSIpOgorICAgICAgICAgICAgICAgICAgICBkZWYgdHJ1bmMoeCk6IHJldHVybiBpbnQoeCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBkZWYgdHJ1bmMoeCk6IHJldHVybiB4CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cnVuYyhnZXRhdHRyKHJlc3VsdCwgYXR0cikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2dldGF0dHIoc3RhdCwgbmFtZSldKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYXR0ciwgbWVtYmVycykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHRbMjAwXQorICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gcmFpc2VkIikKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBhc3NpZ25tZW50IGZhaWxzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdC5zdF9tb2RlID0gMQorICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gcmFpc2VkIikKKyAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQuc3RfcmRldiA9IDEKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiTm8gZXhjZXB0aW9uIHJhaXNlZCIpCisgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0LnBhcnJvdCA9IDEKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiTm8gZXhjZXB0aW9uIHJhaXNlZCIpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIFVzZSB0aGUgc3RhdF9yZXN1bHQgY29uc3RydWN0b3Igd2l0aCBhIHRvby1zaG9ydCB0dXBsZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0MiA9IG9zLnN0YXRfcmVzdWx0KCgxMCwpKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gcmFpc2VkIikKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIFVzZSB0aGUgY29uc3RydWN0b3Igd2l0aCBhIHRvby1sb25nIHR1cGxlLgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQyID0gb3Muc3RhdF9yZXN1bHQoKDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQpKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisKKyAgICBkZWYgdGVzdF9zdGF0dmZzX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9zLCAic3RhdHZmcyIpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gb3Muc3RhdHZmcyhzZWxmLmZuYW1lKQorICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgICMgT24gQXRoZU9TLCBnbGliYyBhbHdheXMgcmV0dXJucyBFTk9TWVMKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PU1lTOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgTWFrZSBzdXJlIGRpcmVjdCBhY2Nlc3Mgd29ya3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZl9iZnJlZSwgcmVzdWx0WzNdKQorCisgICAgICAgICMgTWFrZSBzdXJlIGFsbCB0aGUgYXR0cmlidXRlcyBhcmUgdGhlcmUuCisgICAgICAgIG1lbWJlcnMgPSAoJ2JzaXplJywgJ2Zyc2l6ZScsICdibG9ja3MnLCAnYmZyZWUnLCAnYmF2YWlsJywgJ2ZpbGVzJywKKyAgICAgICAgICAgICAgICAgICAgJ2ZmcmVlJywgJ2ZhdmFpbCcsICdmbGFnJywgJ25hbWVtYXgnKQorICAgICAgICBmb3IgdmFsdWUsIG1lbWJlciBpbiBlbnVtZXJhdGUobWVtYmVycyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIocmVzdWx0LCAnZl8nICsgbWVtYmVyKSwgcmVzdWx0W3ZhbHVlXSkKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGFzc2lnbm1lbnQgcmVhbGx5IGZhaWxzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdC5mX2JmcmVlID0gMQorICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gcmFpc2VkIikKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQucGFycm90ID0gMQorICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gcmFpc2VkIikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgVXNlIHRoZSBjb25zdHJ1Y3RvciB3aXRoIGEgdG9vLXNob3J0IHR1cGxlLgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQyID0gb3Muc3RhdHZmc19yZXN1bHQoKDEwLCkpCisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiByYWlzZWQiKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgVXNlIHRoZSBjb25zdHJ1Y3RvciB3aXRoIGEgdG9vLWxvbmcgdHVwbGUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdDIgPSBvcy5zdGF0dmZzX3Jlc3VsdCgoMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCkpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF91dGltZV9kaXIoc2VsZik6CisgICAgICAgIGRlbHRhID0gMTAwMDAwMAorICAgICAgICBzdCA9IG9zLnN0YXQodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgIyByb3VuZCB0byBpbnQsIGJlY2F1c2Ugc29tZSBzeXN0ZW1zIG1heSBzdXBwb3J0IHN1Yi1zZWNvbmQKKyAgICAgICAgIyB0aW1lIHN0YW1wcyBpbiBzdGF0LCBidXQgbm90IGluIHV0aW1lLgorICAgICAgICBvcy51dGltZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCAoc3Quc3RfYXRpbWUsIGludChzdC5zdF9tdGltZS1kZWx0YSkpKQorICAgICAgICBzdDIgPSBvcy5zdGF0KHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3QyLnN0X210aW1lLCBpbnQoc3Quc3RfbXRpbWUtZGVsdGEpKQorCisgICAgIyBSZXN0cmljdCB0ZXN0IHRvIFdpbjMyLCBzaW5jZSB0aGVyZSBpcyBubyBndWFyYW50ZWUgb3RoZXIKKyAgICAjIHN5c3RlbXMgc3VwcG9ydCBjZW50aXNlY29uZHMKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgZGVmIGdldF9maWxlX3N5c3RlbShwYXRoKToKKyAgICAgICAgICAgIHJvb3QgPSBvcy5wYXRoLnNwbGl0ZHJpdmUob3MucGF0aC5hYnNwYXRoKHBhdGgpKVswXSArICdcXCcKKyAgICAgICAgICAgIGltcG9ydCBjdHlwZXMKKyAgICAgICAgICAgIGtlcm5lbDMyID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMgorICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKCIiLCAxMDApCisgICAgICAgICAgICBpZiBrZXJuZWwzMi5HZXRWb2x1bWVJbmZvcm1hdGlvbkEocm9vdCwgTm9uZSwgMCwgTm9uZSwgTm9uZSwgTm9uZSwgYnVmLCBsZW4oYnVmKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1Zi52YWx1ZQorCisgICAgICAgIGlmIGdldF9maWxlX3N5c3RlbSh0ZXN0X3N1cHBvcnQuVEVTVEZOKSA9PSAiTlRGUyI6CisgICAgICAgICAgICBkZWYgdGVzdF8xNTY1MTUwKHNlbGYpOgorICAgICAgICAgICAgICAgIHQxID0gMTE1OTE5NTAzOS4yNQorICAgICAgICAgICAgICAgIG9zLnV0aW1lKHNlbGYuZm5hbWUsICh0MSwgdDEpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChzZWxmLmZuYW1lKS5zdF9tdGltZSwgdDEpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X2xhcmdlX3RpbWUoc2VsZik6CisgICAgICAgICAgICAgICAgdDEgPSA1MDAwMDAwMDAwICMgc29tZSBkYXkgaW4gMjEyOAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgI05vdGUgZmFpbCBpZiB0aW1lX3QgaXMgMzIgYml0CisgICAgICAgICAgICAgICAgICAgIG9zLnV0aW1lKHNlbGYuZm5hbWUsICh0MSwgdDEpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJyZXF1aXJlcyBhdCBsZWFzdCA2NC1iaXQgdGltZV90IikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQoc2VsZi5mbmFtZSkuc3RfbXRpbWUsIHQxKQorCisgICAgICAgIGRlZiB0ZXN0XzE2ODY0NzUoc2VsZik6CisgICAgICAgICAgICAjIFZlcmlmeSB0aGF0IGFuIG9wZW4gZmlsZSBjYW4gYmUgc3RhdCdlZAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnN0YXQociJjOlxwYWdlZmlsZS5zeXMiKQorICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciwgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IDI6ICMgZmlsZSBkb2VzIG5vdCBleGlzdDsgY2Fubm90IHJ1biB0ZXN0CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiQ291bGQgbm90IHN0YXQgcGFnZWZpbGUuc3lzIikKKworZnJvbSB0ZXN0IGltcG9ydCBtYXBwaW5nX3Rlc3RzCisKK2NsYXNzIEVudmlyb25UZXN0cyhtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6CisgICAgIiIiY2hlY2sgdGhhdCBvcy5lbnZpcm9uIG9iamVjdCBjb25mb3JtIHRvIG1hcHBpbmcgcHJvdG9jb2wiIiIKKyAgICB0eXBlMnRlc3QgPSBOb25lCisgICAgZGVmIF9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHJldHVybiB7IktFWTEiOiJWQUxVRTEiLCAiS0VZMiI6IlZBTFVFMiIsICJLRVkzIjoiVkFMVUUzIn0KKyAgICBkZWYgX2VtcHR5X21hcHBpbmcoc2VsZik6CisgICAgICAgIG9zLmVudmlyb24uY2xlYXIoKQorICAgICAgICByZXR1cm4gb3MuZW52aXJvbgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fX3NhdmUgPSBkaWN0KG9zLmVudmlyb24pCisgICAgICAgIG9zLmVudmlyb24uY2xlYXIoKQorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MuZW52aXJvbi5jbGVhcigpCisgICAgICAgIG9zLmVudmlyb24udXBkYXRlKHNlbGYuX19zYXZlKQorCisgICAgIyBCdWcgMTExMDQ3OAorICAgIGRlZiB0ZXN0X3VwZGF0ZTIoc2VsZik6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCIvYmluL3NoIik6CisgICAgICAgICAgICBvcy5lbnZpcm9uLnVwZGF0ZShIRUxMTz0iV29ybGQiKQorICAgICAgICAgICAgd2l0aCBvcy5wb3BlbigiL2Jpbi9zaCAtYyAnZWNobyAkSEVMTE8nIikgYXMgcG9wZW46CisgICAgICAgICAgICAgICAgdmFsdWUgPSBwb3Blbi5yZWFkKCkuc3RyaXAoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsICJXb3JsZCIpCisKKyAgICAjIE9uIEZyZWVCU0QgPCA3IGFuZCBPUyBYIDwgMTAuNiwgdW5zZXRlbnYoKSBkb2Vzbid0IHJldHVybiBhIHZhbHVlIChpc3N1ZQorICAgICMgIzEzNDE1KS4KKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCgnZnJlZWJzZCcsICdkYXJ3aW4nKSksCisgICAgICAgICAgICAgICAgICAgICAiZHVlIHRvIGtub3duIE9TIGJ1Zzogc2VlIGlzc3VlICMxMzQxNSIpCisgICAgZGVmIHRlc3RfdW5zZXRfZXJyb3Ioc2VsZik6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgIyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBsaW1pdGVkIHRvIDMyLDc2NyBjaGFyYWN0ZXJzCisgICAgICAgICAgICBrZXkgPSAneCcgKiA1MDAwMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3MuZW52aXJvbi5fX2RlbGl0ZW1fXywga2V5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyAiPSIgaXMgbm90IGFsbG93ZWQgaW4gYSB2YXJpYWJsZSBuYW1lCisgICAgICAgICAgICBrZXkgPSAna2V5PScKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLmVudmlyb24uX19kZWxpdGVtX18sIGtleSkKKworY2xhc3MgV2Fsa1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBmb3Igb3Mud2FsaygpLiIiIgorCisgICAgZGVmIHRlc3RfdHJhdmVyc2FsKHNlbGYpOgorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luCisKKyAgICAgICAgIyBCdWlsZDoKKyAgICAgICAgIyAgICAgVEVTVEZOLworICAgICAgICAjICAgICAgIFRFU1QxLyAgICAgICAgICAgICAgYSBmaWxlIGtpZCBhbmQgdHdvIGRpcmVjdG9yeSBraWRzCisgICAgICAgICMgICAgICAgICB0bXAxCisgICAgICAgICMgICAgICAgICBTVUIxLyAgICAgICAgICAgICBhIGZpbGUga2lkIGFuZCBhIGRpcmVjdG9yeSBraWQKKyAgICAgICAgIyAgICAgICAgICAgdG1wMgorICAgICAgICAjICAgICAgICAgICBTVUIxMS8gICAgICAgICAgbm8ga2lkcworICAgICAgICAjICAgICAgICAgU1VCMi8gICAgICAgICAgICAgYSBmaWxlIGtpZCBhbmQgYSBkaXJzeW1saW5rIGtpZAorICAgICAgICAjICAgICAgICAgICB0bXAzCisgICAgICAgICMgICAgICAgICAgIGxpbmsvICAgICAgICAgICBhIHN5bWxpbmsgdG8gVEVTVEZOLjIKKyAgICAgICAgIyAgICAgICBURVNUMi8KKyAgICAgICAgIyAgICAgICAgIHRtcDQgICAgICAgICAgICAgIGEgbG9uZSBmaWxlCisgICAgICAgIHdhbGtfcGF0aCA9IGpvaW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIlRFU1QxIikKKyAgICAgICAgc3ViMV9wYXRoID0gam9pbih3YWxrX3BhdGgsICJTVUIxIikKKyAgICAgICAgc3ViMTFfcGF0aCA9IGpvaW4oc3ViMV9wYXRoLCAiU1VCMTEiKQorICAgICAgICBzdWIyX3BhdGggPSBqb2luKHdhbGtfcGF0aCwgIlNVQjIiKQorICAgICAgICB0bXAxX3BhdGggPSBqb2luKHdhbGtfcGF0aCwgInRtcDEiKQorICAgICAgICB0bXAyX3BhdGggPSBqb2luKHN1YjFfcGF0aCwgInRtcDIiKQorICAgICAgICB0bXAzX3BhdGggPSBqb2luKHN1YjJfcGF0aCwgInRtcDMiKQorICAgICAgICBsaW5rX3BhdGggPSBqb2luKHN1YjJfcGF0aCwgImxpbmsiKQorICAgICAgICB0Ml9wYXRoID0gam9pbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiVEVTVDIiKQorICAgICAgICB0bXA0X3BhdGggPSBqb2luKHRlc3Rfc3VwcG9ydC5URVNURk4sICJURVNUMiIsICJ0bXA0IikKKworICAgICAgICAjIENyZWF0ZSBzdHVmZi4KKyAgICAgICAgb3MubWFrZWRpcnMoc3ViMTFfcGF0aCkKKyAgICAgICAgb3MubWFrZWRpcnMoc3ViMl9wYXRoKQorICAgICAgICBvcy5tYWtlZGlycyh0Ml9wYXRoKQorICAgICAgICBmb3IgcGF0aCBpbiB0bXAxX3BhdGgsIHRtcDJfcGF0aCwgdG1wM19wYXRoLCB0bXA0X3BhdGg6CisgICAgICAgICAgICBmID0gZmlsZShwYXRoLCAidyIpCisgICAgICAgICAgICBmLndyaXRlKCJJJ20gIiArIHBhdGggKyAiIGFuZCBwcm91ZCBvZiBpdC4gIEJsYW1lIHRlc3Rfb3MuXG4iKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJzeW1saW5rIik6CisgICAgICAgICAgICBvcy5zeW1saW5rKG9zLnBhdGguYWJzcGF0aCh0Ml9wYXRoKSwgbGlua19wYXRoKQorICAgICAgICAgICAgc3ViMl90cmVlID0gKHN1YjJfcGF0aCwgWyJsaW5rIl0sIFsidG1wMyJdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3ViMl90cmVlID0gKHN1YjJfcGF0aCwgW10sIFsidG1wMyJdKQorCisgICAgICAgICMgV2FsayB0b3AtZG93bi4KKyAgICAgICAgYWxsID0gbGlzdChvcy53YWxrKHdhbGtfcGF0aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFsbCksIDQpCisgICAgICAgICMgV2UgY2FuJ3Qga25vdyB3aGljaCBvcmRlciBTVUIxIGFuZCBTVUIyIHdpbGwgYXBwZWFyIGluLgorICAgICAgICAjIE5vdCBmbGlwcGVkOiAgVEVTVEZOLCBTVUIxLCBTVUIxMSwgU1VCMgorICAgICAgICAjICAgICBmbGlwcGVkOiAgVEVTVEZOLCBTVUIyLCBTVUIxLCBTVUIxMQorICAgICAgICBmbGlwcGVkID0gYWxsWzBdWzFdWzBdICE9ICJTVUIxIgorICAgICAgICBhbGxbMF1bMV0uc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzBdLCAod2Fsa19wYXRoLCBbIlNVQjEiLCAiU1VCMiJdLCBbInRtcDEiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzEgKyBmbGlwcGVkXSwgKHN1YjFfcGF0aCwgWyJTVUIxMSJdLCBbInRtcDIiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzIgKyBmbGlwcGVkXSwgKHN1YjExX3BhdGgsIFtdLCBbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzMgLSAyICogZmxpcHBlZF0sIHN1YjJfdHJlZSkKKworICAgICAgICAjIFBydW5lIHRoZSBzZWFyY2guCisgICAgICAgIGFsbCA9IFtdCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHdhbGtfcGF0aCk6CisgICAgICAgICAgICBhbGwuYXBwZW5kKChyb290LCBkaXJzLCBmaWxlcykpCisgICAgICAgICAgICAjIERvbid0IGRlc2NlbmQgaW50byBTVUIxLgorICAgICAgICAgICAgaWYgJ1NVQjEnIGluIGRpcnM6CisgICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBhbHNvIG11dGF0ZXMgdGhlIGRpcnMgd2UgYXBwZW5kZWQgdG8gYWxsIQorICAgICAgICAgICAgICAgIGRpcnMucmVtb3ZlKCdTVUIxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWxsKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbMF0sICh3YWxrX3BhdGgsIFsiU1VCMiJdLCBbInRtcDEiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzFdLCBzdWIyX3RyZWUpCisKKyAgICAgICAgIyBXYWxrIGJvdHRvbS11cC4KKyAgICAgICAgYWxsID0gbGlzdChvcy53YWxrKHdhbGtfcGF0aCwgdG9wZG93bj1GYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFsbCksIDQpCisgICAgICAgICMgV2UgY2FuJ3Qga25vdyB3aGljaCBvcmRlciBTVUIxIGFuZCBTVUIyIHdpbGwgYXBwZWFyIGluLgorICAgICAgICAjIE5vdCBmbGlwcGVkOiAgU1VCMTEsIFNVQjEsIFNVQjIsIFRFU1RGTgorICAgICAgICAjICAgICBmbGlwcGVkOiAgU1VCMiwgU1VCMTEsIFNVQjEsIFRFU1RGTgorICAgICAgICBmbGlwcGVkID0gYWxsWzNdWzFdWzBdICE9ICJTVUIxIgorICAgICAgICBhbGxbM11bMV0uc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzNdLCAod2Fsa19wYXRoLCBbIlNVQjEiLCAiU1VCMiJdLCBbInRtcDEiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsW2ZsaXBwZWRdLCAoc3ViMTFfcGF0aCwgW10sIFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbZmxpcHBlZCArIDFdLCAoc3ViMV9wYXRoLCBbIlNVQjExIl0sIFsidG1wMiJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbMiAtIDIgKiBmbGlwcGVkXSwgc3ViMl90cmVlKQorCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJzeW1saW5rIik6CisgICAgICAgICAgICAjIFdhbGssIGZvbGxvd2luZyBzeW1saW5rcy4KKyAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHdhbGtfcGF0aCwgZm9sbG93bGlua3M9VHJ1ZSk6CisgICAgICAgICAgICAgICAgaWYgcm9vdCA9PSBsaW5rX3BhdGg6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlycywgW10pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXMsIFsidG1wNCJdKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkRpZG4ndCBmb2xsb3cgc3ltbGluayB3aXRoIGZvbGxvd2xpbmtzPVRydWUiKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIFRlYXIgZXZlcnl0aGluZyBkb3duLiAgVGhpcyBpcyBhIGRlY2VudCB1c2UgZm9yIGJvdHRvbS11cCBvbgorICAgICAgICAjIFdpbmRvd3MsIHdoaWNoIGRvZXNuJ3QgaGF2ZSBhIHJlY3Vyc2l2ZSBkZWxldGUgY29tbWFuZC4gIFRoZQorICAgICAgICAjIChub3Qgc28pIHN1YnRsZXR5IGlzIHRoYXQgcm1kaXIgd2lsbCBmYWlsIHVubGVzcyB0aGUgZGlyJ3MKKyAgICAgICAgIyBraWRzIGFyZSByZW1vdmVkIGZpcnN0LCBzbyBib3R0b20gdXAgaXMgZXNzZW50aWFsLgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh0ZXN0X3N1cHBvcnQuVEVTVEZOLCB0b3Bkb3duPUZhbHNlKToKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBkaXJzOgorICAgICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2xpbmsoZGlybmFtZSk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJtZGlyKGRpcm5hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGRpcm5hbWUpCisgICAgICAgIG9zLnJtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKK2NsYXNzIE1ha2VkaXJUZXN0cyAodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgb3MubWtkaXIodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X21ha2VkaXIoc2VsZik6CisgICAgICAgIGJhc2UgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oYmFzZSwgJ2RpcjEnLCAnZGlyMicsICdkaXIzJykKKyAgICAgICAgb3MubWFrZWRpcnMocGF0aCkgICAgICAgICAgICAgIyBTaG91bGQgd29yaworICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGJhc2UsICdkaXIxJywgJ2RpcjInLCAnZGlyMycsICdkaXI0JykKKyAgICAgICAgb3MubWFrZWRpcnMocGF0aCkKKworICAgICAgICAjIFRyeSBwYXRocyB3aXRoIGEgJy4nIGluIHRoZW0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MubWFrZWRpcnMsIG9zLmN1cmRpcikKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihiYXNlLCAnZGlyMScsICdkaXIyJywgJ2RpcjMnLCAnZGlyNCcsICdkaXI1Jywgb3MuY3VyZGlyKQorICAgICAgICBvcy5tYWtlZGlycyhwYXRoKQorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGJhc2UsICdkaXIxJywgb3MuY3VyZGlyLCAnZGlyMicsICdkaXIzJywgJ2RpcjQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXI1JywgJ2RpcjYnKQorICAgICAgICBvcy5tYWtlZGlycyhwYXRoKQorCisKKworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHRlc3Rfc3VwcG9ydC5URVNURk4sICdkaXIxJywgJ2RpcjInLCAnZGlyMycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RpcjQnLCAnZGlyNScsICdkaXI2JykKKyAgICAgICAgIyBJZiB0aGUgdGVzdHMgZmFpbGVkLCB0aGUgYm90dG9tLW1vc3QgZGlyZWN0b3J5ICgnLi4vZGlyNicpCisgICAgICAgICMgbWF5IG5vdCBoYXZlIGJlZW4gY3JlYXRlZCwgc28gd2UgbG9vayBmb3IgdGhlIG91dGVybW9zdCBkaXJlY3RvcnkKKyAgICAgICAgIyB0aGF0IGV4aXN0cy4KKyAgICAgICAgd2hpbGUgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpIGFuZCBwYXRoICE9IHRlc3Rfc3VwcG9ydC5URVNURk46CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisKKyAgICAgICAgb3MucmVtb3ZlZGlycyhwYXRoKQorCitjbGFzcyBEZXZOdWxsVGVzdHMgKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9kZXZudWxsKHNlbGYpOgorICAgICAgICBmID0gZmlsZShvcy5kZXZudWxsLCAndycpCisgICAgICAgIGYud3JpdGUoJ2hlbGxvJykKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGYgPSBmaWxlKG9zLmRldm51bGwsICdyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJycpCisgICAgICAgIGYuY2xvc2UoKQorCitjbGFzcyBVUmFuZG9tVGVzdHMgKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3VyYW5kb21fbGVuZ3RoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvcy51cmFuZG9tKDApKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3MudXJhbmRvbSgxKSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLnVyYW5kb20oMTApKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLnVyYW5kb20oMTAwKSksIDEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3MudXJhbmRvbSgxMDAwKSksIDEwMDApCisKKyAgICBkZWYgdGVzdF91cmFuZG9tX3ZhbHVlKHNlbGYpOgorICAgICAgICBkYXRhMSA9IG9zLnVyYW5kb20oMTYpCisgICAgICAgIGRhdGEyID0gb3MudXJhbmRvbSgxNikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYXRhMSwgZGF0YTIpCisKKyAgICBkZWYgZ2V0X3VyYW5kb21fc3VicHJvY2VzcyhzZWxmLCBjb3VudCk6CisgICAgICAgICMgV2UgbmVlZCB0byB1c2UgcmVwcigpIGFuZCBldmFsKCkgdG8gYXZvaWQgbGluZSBlbmRpbmcgY29udmVyc2lvbnMKKyAgICAgICAgIyB1bmRlciBXaW5kb3dzLgorICAgICAgICBjb2RlID0gJ1xuJy5qb2luKCgKKyAgICAgICAgICAgICdpbXBvcnQgb3MsIHN5cycsCisgICAgICAgICAgICAnZGF0YSA9IG9zLnVyYW5kb20oJXMpJyAlIGNvdW50LAorICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUocmVwcihkYXRhKSknLAorICAgICAgICAgICAgJ3N5cy5zdGRvdXQuZmx1c2goKScsCisgICAgICAgICAgICAncHJpbnQgPj4gc3lzLnN0ZGVyciwgKGxlbihkYXRhKSwgZGF0YSknKSkKKyAgICAgICAgY21kX2xpbmUgPSBbc3lzLmV4ZWN1dGFibGUsICctYycsIGNvZGVdCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZF9saW5lLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC53YWl0KCksIDAsIChwLndhaXQoKSwgZXJyKSkKKyAgICAgICAgb3V0ID0gZXZhbChvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG91dCksIGNvdW50LCBlcnIpCisgICAgICAgIHJldHVybiBvdXQKKworICAgIGRlZiB0ZXN0X3VyYW5kb21fc3VicHJvY2VzcyhzZWxmKToKKyAgICAgICAgZGF0YTEgPSBzZWxmLmdldF91cmFuZG9tX3N1YnByb2Nlc3MoMTYpCisgICAgICAgIGRhdGEyID0gc2VsZi5nZXRfdXJhbmRvbV9zdWJwcm9jZXNzKDE2KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGRhdGExLCBkYXRhMikKKworICAgIGRlZiB0ZXN0X2V4ZWN2cGVfd2l0aF9iYWRfYXJnbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3MuZXhlY3ZwZSwgJ25vdGVwYWQnLCBbXSwgTm9uZSkKKworY2xhc3MgV2luMzJFcnJvclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9yZW5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MucmVuYW1lLCB0ZXN0X3N1cHBvcnQuVEVTVEZOLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKyIuYmFrIikKKworICAgIGRlZiB0ZXN0X3JlbW92ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5yZW1vdmUsIHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9jaGRpcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5jaGRpciwgdGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X21rZGlyKHNlbGYpOgorICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAidyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MubWtkaXIsIHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfdXRpbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MudXRpbWUsIHRlc3Rfc3VwcG9ydC5URVNURk4sIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jaG1vZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5jaG1vZCwgdGVzdF9zdXBwb3J0LlRFU1RGTiwgMCkKKworY2xhc3MgVGVzdEludmFsaWRGRCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgc2luZ2xlcyA9IFsiZmNoZGlyIiwgImZkb3BlbiIsICJkdXAiLCAiZmRhdGFzeW5jIiwgImZzdGF0IiwKKyAgICAgICAgICAgICAgICJmc3RhdHZmcyIsICJmc3luYyIsICJ0Y2dldHBncnAiLCAidHR5bmFtZSJdCisgICAgI3NpbmdsZXMuYXBwZW5kKCJjbG9zZSIpCisgICAgI1dlIG9taXQgY2xvc2UgYmVjYXVzZSBpdCBkb2VzbidyIHJhaXNlIGFuIGV4Y2VwdGlvbiBvbiBzb21lIHBsYXRmb3JtcworICAgIGRlZiBnZXRfc2luZ2xlKGYpOgorICAgICAgICBkZWYgaGVscGVyKHNlbGYpOgorICAgICAgICAgICAgaWYgIGhhc2F0dHIob3MsIGYpOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2soZ2V0YXR0cihvcywgZikpCisgICAgICAgIHJldHVybiBoZWxwZXIKKyAgICBmb3IgZiBpbiBzaW5nbGVzOgorICAgICAgICBsb2NhbHMoKVsidGVzdF8iK2ZdID0gZ2V0X3NpbmdsZShmKQorCisgICAgZGVmIGNoZWNrKHNlbGYsIGYsICphcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZih0ZXN0X3N1cHBvcnQubWFrZV9iYWRfZmQoKSwgKmFyZ3MpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVCQURGKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCIlciBkaWRuJ3QgcmFpc2UgYSBPU0Vycm9yIHdpdGggYSBiYWQgZmlsZSBkZXNjcmlwdG9yIgorICAgICAgICAgICAgICAgICAgICAgICUgZikKKworICAgIGRlZiB0ZXN0X2lzYXR0eShzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImlzYXR0eSIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5pc2F0dHkodGVzdF9zdXBwb3J0Lm1ha2VfYmFkX2ZkKCkpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlcmFuZ2Uoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIob3MsICJjbG9zZXJhbmdlIik6CisgICAgICAgICAgICBmZCA9IHRlc3Rfc3VwcG9ydC5tYWtlX2JhZF9mZCgpCisgICAgICAgICAgICAjIE1ha2Ugc3VyZSBub25lIG9mIHRoZSBkZXNjcmlwdG9ycyB3ZSBhcmUgYWJvdXQgdG8gY2xvc2UgYXJlCisgICAgICAgICAgICAjIGN1cnJlbnRseSB2YWxpZCAoaXNzdWUgNjU0MikuCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgdHJ5OiBvcy5mc3RhdChmZCtpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGkgPCAyOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KAorICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGFjcXVpcmUgYSByYW5nZSBvZiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcnMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5jbG9zZXJhbmdlKGZkLCBmZCArIGktMSksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9kdXAyKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKG9zLCAiZHVwMiIpOgorICAgICAgICAgICAgc2VsZi5jaGVjayhvcy5kdXAyLCAyMCkKKworICAgIGRlZiB0ZXN0X2ZjaG1vZChzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImZjaG1vZCIpOgorICAgICAgICAgICAgc2VsZi5jaGVjayhvcy5mY2htb2QsIDApCisKKyAgICBkZWYgdGVzdF9mY2hvd24oc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIob3MsICJmY2hvd24iKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2sob3MuZmNob3duLCAtMSwgLTEpCisKKyAgICBkZWYgdGVzdF9mcGF0aGNvbmYoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIob3MsICJmcGF0aGNvbmYiKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2sob3MuZnBhdGhjb25mLCAiUENfTkFNRV9NQVgiKQorCisgICAgZGVmIHRlc3RfZnRydW5jYXRlKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKG9zLCAiZnRydW5jYXRlIik6CisgICAgICAgICAgICBzZWxmLmNoZWNrKG9zLmZ0cnVuY2F0ZSwgMCkKKworICAgIGRlZiB0ZXN0X2xzZWVrKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibHNlZWsiKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2sob3MubHNlZWssIDAsIDApCisKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKG9zLCAicmVhZCIpOgorICAgICAgICAgICAgc2VsZi5jaGVjayhvcy5yZWFkLCAxKQorCisgICAgZGVmIHRlc3RfdGNzZXRwZ3JwdChzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihvcywgInRjc2V0cGdycCIpOgorICAgICAgICAgICAgc2VsZi5jaGVjayhvcy50Y3NldHBncnAsIDApCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihvcywgIndyaXRlIik6CisgICAgICAgICAgICBzZWxmLmNoZWNrKG9zLndyaXRlLCAiICIpCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgIGNsYXNzIFdpbjMyRXJyb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIHBhc3MKKworICAgIGNsYXNzIFBvc2l4VWlkR2lkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBpZiBoYXNhdHRyKG9zLCAnc2V0dWlkJyk6CisgICAgICAgICAgICBkZWYgdGVzdF9zZXR1aWQoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldHVpZCwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXR1aWQsIDE8PDMyKQorCisgICAgICAgIGlmIGhhc2F0dHIob3MsICdzZXRnaWQnKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X3NldGdpZChzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0Z2lkLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldGdpZCwgMTw8MzIpCisKKyAgICAgICAgaWYgaGFzYXR0cihvcywgJ3NldGV1aWQnKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X3NldGV1aWQoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldGV1aWQsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0ZXVpZCwgMTw8MzIpCisKKyAgICAgICAgaWYgaGFzYXR0cihvcywgJ3NldGVnaWQnKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X3NldGVnaWQoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldGVnaWQsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0ZWdpZCwgMTw8MzIpCisKKyAgICAgICAgaWYgaGFzYXR0cihvcywgJ3NldHJldWlkJyk6CisgICAgICAgICAgICBkZWYgdGVzdF9zZXRyZXVpZChzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0cmV1aWQsIDAsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0cmV1aWQsIDE8PDMyLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHJldWlkLCAwLCAxPDwzMikKKworICAgICAgICAgICAgZGVmIHRlc3Rfc2V0cmV1aWRfbmVnMShzZWxmKToKKyAgICAgICAgICAgICAgICAjIE5lZWRzIHRvIGFjY2VwdCAtMS4gIFdlIHJ1biB0aGlzIGluIGEgc3VicHJvY2VzcyB0byBhdm9pZAorICAgICAgICAgICAgICAgICMgYWx0ZXJpbmcgdGhlIHRlc3QgcnVubmVyJ3MgcHJvY2VzcyBzdGF0ZSAoaXNzdWU4MDQ1KS4KKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWworICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IG9zLHN5cztvcy5zZXRyZXVpZCgtMSwtMSk7c3lzLmV4aXQoMCknXSkKKworICAgICAgICBpZiBoYXNhdHRyKG9zLCAnc2V0cmVnaWQnKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X3NldHJlZ2lkKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG9zLmVycm9yLCBvcy5zZXRyZWdpZCwgMCwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRyZWdpZCwgMTw8MzIsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0cmVnaWQsIDAsIDE8PDMyKQorCisgICAgICAgICAgICBkZWYgdGVzdF9zZXRyZWdpZF9uZWcxKHNlbGYpOgorICAgICAgICAgICAgICAgICMgTmVlZHMgdG8gYWNjZXB0IC0xLiAgV2UgcnVuIHRoaXMgaW4gYSBzdWJwcm9jZXNzIHRvIGF2b2lkCisgICAgICAgICAgICAgICAgIyBhbHRlcmluZyB0aGUgdGVzdCBydW5uZXIncyBwcm9jZXNzIHN0YXRlIChpc3N1ZTgwNDUpLgorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgb3Msc3lzO29zLnNldHJlZ2lkKC0xLC0xKTtzeXMuZXhpdCgwKSddKQorZWxzZToKKyAgICBjbGFzcyBQb3NpeFVpZEdpZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgcGFzcworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3RzIikKK2NsYXNzIFdpbjMyS2lsbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgX2tpbGwoc2VsZiwgc2lnKToKKyAgICAgICAgIyBTdGFydCBzeXMuZXhlY3V0YWJsZSBhcyBhIHN1YnByb2Nlc3MgYW5kIGNvbW11bmljYXRlIGZyb20gdGhlCisgICAgICAgICMgc3VicHJvY2VzcyB0byB0aGUgcGFyZW50IHRoYXQgdGhlIGludGVycHJldGVyIGlzIHJlYWR5LiBXaGVuIGl0CisgICAgICAgICMgYmVjb21lcyByZWFkeSwgc2VuZCAqc2lnKiB2aWEgb3Mua2lsbCB0byB0aGUgc3VicHJvY2VzcyBhbmQgY2hlY2sKKyAgICAgICAgIyB0aGF0IHRoZSByZXR1cm4gY29kZSBpcyBlcXVhbCB0byAqc2lnKi4KKyAgICAgICAgaW1wb3J0IGN0eXBlcworICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgd2ludHlwZXMKKyAgICAgICAgaW1wb3J0IG1zdmNydAorCisgICAgICAgICMgU2luY2Ugd2UgY2FuJ3QgYWNjZXNzIHRoZSBjb250ZW50cyBvZiB0aGUgcHJvY2Vzcycgc3Rkb3V0IHVudGlsIHRoZQorICAgICAgICAjIHByb2Nlc3MgaGFzIGV4aXRlZCwgdXNlIFBlZWtOYW1lZFBpcGUgdG8gc2VlIHdoYXQncyBpbnNpZGUgc3Rkb3V0CisgICAgICAgICMgd2l0aG91dCB3YWl0aW5nLiBUaGlzIGlzIGRvbmUgc28gd2UgY2FuIHRlbGwgdGhhdCB0aGUgaW50ZXJwcmV0ZXIKKyAgICAgICAgIyBpcyBzdGFydGVkIGFuZCBydW5uaW5nIGF0IGEgcG9pbnQgd2hlcmUgaXQgY291bGQgaGFuZGxlIGEgc2lnbmFsLgorICAgICAgICBQZWVrTmFtZWRQaXBlID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMi5QZWVrTmFtZWRQaXBlCisgICAgICAgIFBlZWtOYW1lZFBpcGUucmVzdHlwZSA9IHdpbnR5cGVzLkJPT0wKKyAgICAgICAgUGVla05hbWVkUGlwZS5hcmd0eXBlcyA9ICh3aW50eXBlcy5IQU5ETEUsICMgUGlwZSBoYW5kbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuUE9JTlRFUihjdHlwZXMuY19jaGFyKSwgIyBzdGRvdXQgYnVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ludHlwZXMuRFdPUkQsICMgQnVmZmVyIHNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuUE9JTlRFUih3aW50eXBlcy5EV09SRCksICMgYnl0ZXMgcmVhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5QT0lOVEVSKHdpbnR5cGVzLkRXT1JEKSwgIyBieXRlcyBhdmFpbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlcy5QT0lOVEVSKHdpbnR5cGVzLkRXT1JEKSkgIyBieXRlcyBsZWZ0CisgICAgICAgIG1zZyA9ICJydW5uaW5nIgorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzLnN0ZG91dC53cml0ZSgne30nKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzLnN0ZG91dC5mbHVzaCgpOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnB1dCgpIi5mb3JtYXQobXNnKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHByb2Muc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocHJvYy5zdGRlcnIuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwcm9jLnN0ZGluLmNsb3NlKQorCisgICAgICAgIGNvdW50LCBtYXggPSAwLCAxMDAKKyAgICAgICAgd2hpbGUgY291bnQgPCBtYXggYW5kIHByb2MucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICAjIENyZWF0ZSBhIHN0cmluZyBidWZmZXIgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZiBzdGRvdXQgZnJvbSB0aGUgcGlwZQorICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKGxlbihtc2cpKQorICAgICAgICAgICAgIyBPYnRhaW4gdGhlIHRleHQgY3VycmVudGx5IGluIHByb2Muc3Rkb3V0CisgICAgICAgICAgICAjIEJ5dGVzIHJlYWQvYXZhaWwvbGVmdCBhcmUgbGVmdCBhcyBOVUxMIGFuZCB1bnVzZWQKKyAgICAgICAgICAgIHJzbHQgPSBQZWVrTmFtZWRQaXBlKG1zdmNydC5nZXRfb3NmaGFuZGxlKHByb2Muc3Rkb3V0LmZpbGVubygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgY3R5cGVzLnNpemVvZihidWYpLCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyc2x0LCAwLCAiUGVla05hbWVkUGlwZSBmYWlsZWQiKQorICAgICAgICAgICAgaWYgYnVmLnZhbHVlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBidWYudmFsdWUpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWQgbm90IHJlY2VpdmUgY29tbXVuaWNhdGlvbiBmcm9tIHRoZSBzdWJwcm9jZXNzIikKKworICAgICAgICBvcy5raWxsKHByb2MucGlkLCBzaWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvYy53YWl0KCksIHNpZykKKworICAgIGRlZiB0ZXN0X2tpbGxfc2lndGVybShzZWxmKToKKyAgICAgICAgIyBTSUdURVJNIGRvZXNuJ3QgbWVhbiBhbnl0aGluZyBzcGVjaWFsLCBidXQgbWFrZSBzdXJlIGl0IHdvcmtzCisgICAgICAgIHNlbGYuX2tpbGwoc2lnbmFsLlNJR1RFUk0pCisKKyAgICBkZWYgdGVzdF9raWxsX2ludChzZWxmKToKKyAgICAgICAgIyBvcy5raWxsIG9uIFdpbmRvd3MgY2FuIHRha2UgYW4gaW50IHdoaWNoIGdldHMgc2V0IGFzIHRoZSBleGl0IGNvZGUKKyAgICAgICAgc2VsZi5fa2lsbCgxMDApCisKKyAgICBkZWYgX2tpbGxfd2l0aF9ldmVudChzZWxmLCBldmVudCwgbmFtZSk6CisgICAgICAgIHRhZ25hbWUgPSAidGVzdF9vc18lcyIgJSB1dWlkLnV1aWQxKCkKKyAgICAgICAgbSA9IG1tYXAubW1hcCgtMSwgMSwgdGFnbmFtZSkKKyAgICAgICAgbVswXSA9ICcwJworICAgICAgICAjIFJ1biBhIHNjcmlwdCB3aGljaCBoYXMgY29uc29sZSBjb250cm9sIGhhbmRsaW5nIGVuYWJsZWQuCisgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpbl9jb25zb2xlX2hhbmRsZXIucHkiKSwgdGFnbmFtZV0sCisgICAgICAgICAgICAgICAgICAgY3JlYXRpb25mbGFncz1zdWJwcm9jZXNzLkNSRUFURV9ORVdfUFJPQ0VTU19HUk9VUCkKKyAgICAgICAgIyBMZXQgdGhlIGludGVycHJldGVyIHN0YXJ0dXAgYmVmb3JlIHdlIHNlbmQgc2lnbmFscy4gU2VlICMzMTM3LgorICAgICAgICBjb3VudCwgbWF4ID0gMCwgMjAKKyAgICAgICAgd2hpbGUgY291bnQgPCBtYXggYW5kIHByb2MucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBtWzBdID09ICcxJzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdGltZS5zbGVlcCgwLjUpCisgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlN1YnByb2Nlc3MgZGlkbid0IGZpbmlzaCBpbml0aWFsaXphdGlvbiIpCisgICAgICAgIG9zLmtpbGwocHJvYy5waWQsIGV2ZW50KQorICAgICAgICAjIHByb2Muc2VuZF9zaWduYWwoZXZlbnQpIGNvdWxkIGFsc28gYmUgZG9uZSBoZXJlLgorICAgICAgICAjIEFsbG93IHRpbWUgZm9yIHRoZSBzaWduYWwgdG8gYmUgcGFzc2VkIGFuZCB0aGUgcHJvY2VzcyB0byBleGl0LgorICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgaWYgbm90IHByb2MucG9sbCgpOgorICAgICAgICAgICAgIyBGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nlc3MgaWYgd2Ugd2VyZW4ndCBhYmxlIHRvIHNpZ25hbCBpdC4KKyAgICAgICAgICAgIG9zLmtpbGwocHJvYy5waWQsIHNpZ25hbC5TSUdJTlQpCisgICAgICAgICAgICBzZWxmLmZhaWwoInN1YnByb2Nlc3MgZGlkIG5vdCBzdG9wIG9uIHt9Ii5mb3JtYXQobmFtZSkpCisKKyAgICBAdW5pdHRlc3Quc2tpcCgic3VicHJvY2Vzc2VzIGFyZW4ndCBpbmhlcml0aW5nIENUUkwrQyBwcm9wZXJ0eSIpCisgICAgZGVmIHRlc3RfQ1RSTF9DX0VWRU5UKHNlbGYpOgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgd2ludHlwZXMKKyAgICAgICAgaW1wb3J0IGN0eXBlcworCisgICAgICAgICMgTWFrZSBhIE5VTEwgdmFsdWUgYnkgY3JlYXRpbmcgYSBwb2ludGVyIHdpdGggbm8gYXJndW1lbnQuCisgICAgICAgIE5VTEwgPSBjdHlwZXMuUE9JTlRFUihjdHlwZXMuY19pbnQpKCkKKyAgICAgICAgU2V0Q29uc29sZUN0cmxIYW5kbGVyID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMi5TZXRDb25zb2xlQ3RybEhhbmRsZXIKKyAgICAgICAgU2V0Q29uc29sZUN0cmxIYW5kbGVyLmFyZ3R5cGVzID0gKGN0eXBlcy5QT0lOVEVSKGN0eXBlcy5jX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW50eXBlcy5CT09MKQorICAgICAgICBTZXRDb25zb2xlQ3RybEhhbmRsZXIucmVzdHlwZSA9IHdpbnR5cGVzLkJPT0wKKworICAgICAgICAjIENhbGxpbmcgdGhpcyB3aXRoIE5VTEwgYW5kIEZBTFNFIGNhdXNlcyB0aGUgY2FsbGluZyBwcm9jZXNzIHRvCisgICAgICAgICMgaGFuZGxlIENUUkwrQywgcmF0aGVyIHRoYW4gaWdub3JlIGl0LiBUaGlzIHByb3BlcnR5IGlzIGluaGVyaXRlZAorICAgICAgICAjIGJ5IHN1YnByb2Nlc3Nlcy4KKyAgICAgICAgU2V0Q29uc29sZUN0cmxIYW5kbGVyKE5VTEwsIDApCisKKyAgICAgICAgc2VsZi5fa2lsbF93aXRoX2V2ZW50KHNpZ25hbC5DVFJMX0NfRVZFTlQsICJDVFJMX0NfRVZFTlQiKQorCisgICAgZGVmIHRlc3RfQ1RSTF9CUkVBS19FVkVOVChzZWxmKToKKyAgICAgICAgc2VsZi5fa2lsbF93aXRoX2V2ZW50KHNpZ25hbC5DVFJMX0JSRUFLX0VWRU5ULCAiQ1RSTF9CUkVBS19FVkVOVCIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIEZpbGVUZXN0cywKKyAgICAgICAgVGVtcG9yYXJ5RmlsZVRlc3RzLAorICAgICAgICBTdGF0QXR0cmlidXRlVGVzdHMsCisgICAgICAgIEVudmlyb25UZXN0cywKKyAgICAgICAgV2Fsa1Rlc3RzLAorICAgICAgICBNYWtlZGlyVGVzdHMsCisgICAgICAgIERldk51bGxUZXN0cywKKyAgICAgICAgVVJhbmRvbVRlc3RzLAorICAgICAgICBXaW4zMkVycm9yVGVzdHMsCisgICAgICAgIFRlc3RJbnZhbGlkRkQsCisgICAgICAgIFBvc2l4VWlkR2lkVGVzdHMsCisgICAgICAgIFdpbjMyS2lsbFRlc3RzCisgICAgKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMzU3YTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weQpAQCAtMCwwICsxLDE3NCBAQAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK3Rlc3Rfc3VwcG9ydC5yZXF1aXJlcygnYXVkaW8nKQorCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBmaW5kZmlsZQorCitvc3NhdWRpb2RldiA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdvc3NhdWRpb2RldicpCisKK2ltcG9ydCBlcnJubworaW1wb3J0IHN5cworaW1wb3J0IHN1bmF1CitpbXBvcnQgdGltZQoraW1wb3J0IGF1ZGlvb3AKK2ltcG9ydCB1bml0dGVzdAorCisjIEFyZ2doLCBBRk1UX1MxNl9ORSBub3QgZGVmaW5lZCBvbiBhbGwgcGxhdGZvcm1zIC0tIHNlZW1zIHRvIGJlIGEKKyMgZmFpcmx5IHJlY2VudCBhZGRpdGlvbiB0byBPU1MuCit0cnk6CisgICAgZnJvbSBvc3NhdWRpb2RldiBpbXBvcnQgQUZNVF9TMTZfTkUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICJsaXR0bGUiOgorICAgICAgICBBRk1UX1MxNl9ORSA9IG9zc2F1ZGlvZGV2LkFGTVRfUzE2X0xFCisgICAgZWxzZToKKyAgICAgICAgQUZNVF9TMTZfTkUgPSBvc3NhdWRpb2Rldi5BRk1UX1MxNl9CRQorCisKK2RlZiByZWFkX3NvdW5kX2ZpbGUocGF0aCk6CisgICAgd2l0aCBvcGVuKHBhdGgsICdyYicpIGFzIGZwOgorICAgICAgICBhdSA9IHN1bmF1Lm9wZW4oZnApCisgICAgICAgIHJhdGUgPSBhdS5nZXRmcmFtZXJhdGUoKQorICAgICAgICBuY2hhbm5lbHMgPSBhdS5nZXRuY2hhbm5lbHMoKQorICAgICAgICBlbmNvZGluZyA9IGF1Ll9lbmNvZGluZworICAgICAgICBmcC5zZWVrKDApCisgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKKworICAgIGlmIGVuY29kaW5nICE9IHN1bmF1LkFVRElPX0ZJTEVfRU5DT0RJTkdfTVVMQVdfODoKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJFeHBlY3QgLmF1IGZpbGUgd2l0aCA4LWJpdCBtdS1sYXcgc2FtcGxlcyIpCisKKyAgICAjIENvbnZlcnQgdGhlIGRhdGEgdG8gMTYtYml0IHNpZ25lZC4KKyAgICBkYXRhID0gYXVkaW9vcC51bGF3MmxpbihkYXRhLCAyKQorICAgIHJldHVybiAoZGF0YSwgcmF0ZSwgMTYsIG5jaGFubmVscykKKworY2xhc3MgT1NTQXVkaW9EZXZUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgcGxheV9zb3VuZF9maWxlKHNlbGYsIGRhdGEsIHJhdGUsIHNzaXplLCBuY2hhbm5lbHMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkc3AgPSBvc3NhdWRpb2Rldi5vcGVuKCd3JykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGlmIG1zZy5hcmdzWzBdIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVOT0VOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FTk9ERVYsIGVycm5vLkVCVVNZKToKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChtc2cpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgICMgYXQgbGVhc3QgY2hlY2sgdGhhdCB0aGVzZSBtZXRob2RzIGNhbiBiZSBpbnZva2VkCisgICAgICAgIGRzcC5idWZzaXplKCkKKyAgICAgICAgZHNwLm9idWZjb3VudCgpCisgICAgICAgIGRzcC5vYnVmZnJlZSgpCisgICAgICAgIGRzcC5nZXRwdHIoKQorICAgICAgICBkc3AuZmlsZW5vKCkKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgcmVhZC1vbmx5IGF0dHJpYnV0ZXMgd29yay4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkc3AuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRzcC5uYW1lLCAiL2Rldi9kc3AiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRzcC5tb2RlLCAidyIsICJiYWQgZHNwLm1vZGU6ICVyIiAlIGRzcC5tb2RlKQorCisgICAgICAgICMgQW5kIG1ha2Ugc3VyZSB0aGV5J3JlIHJlYWxseSByZWFkLW9ubHkuCisgICAgICAgIGZvciBhdHRyIGluICgnY2xvc2VkJywgJ25hbWUnLCAnbW9kZScpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNldGF0dHIoZHNwLCBhdHRyLCA0MikKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImRzcC4lcyBub3QgcmVhZC1vbmx5IiAlIGF0dHIpCisKKyAgICAgICAgIyBDb21wdXRlIGV4cGVjdGVkIHJ1bm5pbmcgdGltZSBvZiBzb3VuZCBzYW1wbGUgKGluIHNlY29uZHMpLgorICAgICAgICBleHBlY3RlZF90aW1lID0gZmxvYXQobGVuKGRhdGEpKSAvIChzc2l6ZS8vOCkgLyBuY2hhbm5lbHMgLyByYXRlCisKKyAgICAgICAgIyBzZXQgcGFyYW1ldGVycyBiYXNlZCBvbiAuYXUgZmlsZSBoZWFkZXJzCisgICAgICAgIGRzcC5zZXRwYXJhbWV0ZXJzKEFGTVRfUzE2X05FLCBuY2hhbm5lbHMsIHJhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhYnMoZXhwZWN0ZWRfdGltZSAtIDMuNTEpIDwgMWUtMiwgZXhwZWN0ZWRfdGltZSkKKyAgICAgICAgdDEgPSB0aW1lLnRpbWUoKQorICAgICAgICBkc3Aud3JpdGUoZGF0YSkKKyAgICAgICAgZHNwLmNsb3NlKCkKKyAgICAgICAgdDIgPSB0aW1lLnRpbWUoKQorICAgICAgICBlbGFwc2VkX3RpbWUgPSB0MiAtIHQxCisKKyAgICAgICAgcGVyY2VudF9kaWZmID0gKGFicyhlbGFwc2VkX3RpbWUgLSBleHBlY3RlZF90aW1lKSAvIGV4cGVjdGVkX3RpbWUpICogMTAwCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwZXJjZW50X2RpZmYgPD0gMTAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJlbGFwc2VkIHRpbWUgPiAxMCUgb2ZmIG9mIGV4cGVjdGVkIHRpbWUiKQorCisgICAgZGVmIHNldF9wYXJhbWV0ZXJzKHNlbGYsIGRzcCk6CisgICAgICAgICMgVHdvIGNvbmZpZ3VyYXRpb25zIGZvciB0ZXN0aW5nOgorICAgICAgICAjICAgY29uZmlnMSAoOC1iaXQsIG1vbm8sIDgga0h6KSBzaG91bGQgd29yayBvbiBldmVuIHRoZSBtb3N0CisgICAgICAgICMgICAgICBhbmNpZW50IGFuZCBjcnVmdHkgc291bmQgY2FyZCwgYnV0IG1heWJlIG5vdCBvbiBzcGVjaWFsLQorICAgICAgICAjICAgICAgcHVycG9zZSBoaWdoLWVuZCBoYXJkd2FyZQorICAgICAgICAjICAgY29uZmlnMiAoMTYtYml0LCBzdGVyZW8sIDQ0LjFrSHopIHNob3VsZCB3b3JrIG9uIGFsbCBidXQgdGhlCisgICAgICAgICMgICAgICBtb3N0IGFuY2llbnQgYW5kIGNydWZ0eSBoYXJkd2FyZQorICAgICAgICBjb25maWcxID0gKG9zc2F1ZGlvZGV2LkFGTVRfVTgsIDEsIDgwMDApCisgICAgICAgIGNvbmZpZzIgPSAoQUZNVF9TMTZfTkUsIDIsIDQ0MTAwKQorCisgICAgICAgIGZvciBjb25maWcgaW4gW2NvbmZpZzEsIGNvbmZpZzJdOgorICAgICAgICAgICAgKGZtdCwgY2hhbm5lbHMsIHJhdGUpID0gY29uZmlnCisgICAgICAgICAgICBpZiAoZHNwLnNldGZtdChmbXQpID09IGZtdCBhbmQKKyAgICAgICAgICAgICAgICBkc3AuY2hhbm5lbHMoY2hhbm5lbHMpID09IGNoYW5uZWxzIGFuZAorICAgICAgICAgICAgICAgIGRzcC5zcGVlZChyYXRlKSA9PSByYXRlKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJ1bmFibGUgdG8gc2V0IGF1ZGlvIHNhbXBsaW5nIHBhcmFtZXRlcnM6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieW91IG11c3QgaGF2ZSByZWFsbHkgd2VpcmQgYXVkaW8gaGFyZHdhcmUiKQorCisgICAgICAgICMgc2V0cGFyYW1ldGVycygpIHNob3VsZCBiZSBhYmxlIHRvIHNldCB0aGlzIGNvbmZpZ3VyYXRpb24gaW4KKyAgICAgICAgIyBlaXRoZXIgc3RyaWN0IG9yIG5vbi1zdHJpY3QgbW9kZS4KKyAgICAgICAgcmVzdWx0ID0gZHNwLnNldHBhcmFtZXRlcnMoZm10LCBjaGFubmVscywgcmF0ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoZm10LCBjaGFubmVscywgcmF0ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgInNldHBhcmFtZXRlcnMlcjogcmV0dXJuZWQgJXIiICUgKGNvbmZpZywgcmVzdWx0KSkKKworICAgICAgICByZXN1bHQgPSBkc3Auc2V0cGFyYW1ldGVycyhmbXQsIGNoYW5uZWxzLCByYXRlLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKGZtdCwgY2hhbm5lbHMsIHJhdGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRwYXJhbWV0ZXJzJXI6IHJldHVybmVkICVyIiAlIChjb25maWcsIHJlc3VsdCkpCisKKyAgICBkZWYgc2V0X2JhZF9wYXJhbWV0ZXJzKHNlbGYsIGRzcCk6CisgICAgICAgICMgTm93IHRyeSBzb21lIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHByZXN1bWFibHkgYm9ndXM6IGVnLiAzMDAKKyAgICAgICAgIyBjaGFubmVscyBjdXJyZW50bHkgZXhjZWVkcyBldmVuIEhvbGx5d29vZCdzIGFtYml0aW9ucywgYW5kCisgICAgICAgICMgbmVnYXRpdmUgc2FtcGxpbmcgcmF0ZSBpcyB1dHRlciBub25zZW5zZS4gIHNldHBhcmFtZXRlcnMoKSBzaG91bGQKKyAgICAgICAgIyBhY2NlcHQgdGhlc2UgaW4gbm9uLXN0cmljdCBtb2RlLCByZXR1cm5pbmcgc29tZXRoaW5nIG90aGVyIHRoYW4KKyAgICAgICAgIyB3YXMgcmVxdWVzdGVkLCBidXQgc2hvdWxkIGJhcmYgaW4gc3RyaWN0IG1vZGUuCisgICAgICAgIGZtdCA9IEFGTVRfUzE2X05FCisgICAgICAgIHJhdGUgPSA0NDEwMAorICAgICAgICBjaGFubmVscyA9IDIKKyAgICAgICAgZm9yIGNvbmZpZyBpbiBbKGZtdCwgMzAwLCByYXRlKSwgICAgICAgIyByaWRpY3Vsb3VzIG5jaGFubmVscworICAgICAgICAgICAgICAgICAgICAgICAoZm10LCAtNSwgcmF0ZSksICAgICAgICAjIGltcG9zc2libGUgbmNoYW5uZWxzCisgICAgICAgICAgICAgICAgICAgICAgIChmbXQsIGNoYW5uZWxzLCAtNTApLCAgICMgaW1wb3NzaWJsZSByYXRlCisgICAgICAgICAgICAgICAgICAgICAgXToKKyAgICAgICAgICAgIChmbXQsIGNoYW5uZWxzLCByYXRlKSA9IGNvbmZpZworICAgICAgICAgICAgcmVzdWx0ID0gZHNwLnNldHBhcmFtZXRlcnMoZm10LCBjaGFubmVscywgcmF0ZSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdCwgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZGx5IGdvdCByZXF1ZXN0ZWQgY29uZmlndXJhdGlvbiIpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkc3Auc2V0cGFyYW1ldGVycyhmbXQsIGNoYW5uZWxzLCByYXRlLCBUcnVlKQorICAgICAgICAgICAgZXhjZXB0IG9zc2F1ZGlvZGV2Lk9TU0F1ZGlvRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgT1NTQXVkaW9FcnJvciIpCisKKyAgICBkZWYgdGVzdF9wbGF5YmFjayhzZWxmKToKKyAgICAgICAgc291bmRfaW5mbyA9IHJlYWRfc291bmRfZmlsZShmaW5kZmlsZSgnYXVkaW90ZXN0LmF1JykpCisgICAgICAgIHNlbGYucGxheV9zb3VuZF9maWxlKCpzb3VuZF9pbmZvKQorCisgICAgZGVmIHRlc3Rfc2V0X3BhcmFtZXRlcnMoc2VsZik6CisgICAgICAgIGRzcCA9IG9zc2F1ZGlvZGV2Lm9wZW4oInciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNldF9wYXJhbWV0ZXJzKGRzcCkKKworICAgICAgICAgICAgIyBEaXNhYmxlZCBiZWNhdXNlIGl0IGZhaWxzIHVuZGVyIExpbnV4IDIuNiB3aXRoIEFMU0EncyBPU1MKKyAgICAgICAgICAgICMgZW11bGF0aW9uIGxheWVyLgorICAgICAgICAgICAgI3NlbGYuc2V0X2JhZF9wYXJhbWV0ZXJzKGRzcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRzcC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZHNwLmNsb3NlZCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdHJ5OgorICAgICAgICBkc3AgPSBvc3NhdWRpb2Rldi5vcGVuKCd3JykKKyAgICBleGNlcHQgKG9zc2F1ZGlvZGV2LmVycm9yLCBJT0Vycm9yKSwgbXNnOgorICAgICAgICBpZiBtc2cuYXJnc1swXSBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FTk9FTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FTk9ERVYsIGVycm5vLkVCVVNZKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KG1zZykKKyAgICAgICAgcmFpc2UKKyAgICBkc3AuY2xvc2UoKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BhcnNlci5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BhcnNlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWE3NjJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcGFyc2VyLnB5CkBAIC0wLDAgKzEsNjU3IEBACitpbXBvcnQgcGFyc2VyCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdHJ1Y3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUKKworIworIyAgRmlyc3QsIHdlIHRlc3QgdGhhdCB3ZSBjYW4gZ2VuZXJhdGUgdHJlZXMgZnJvbSB2YWxpZCBzb3VyY2UgZnJhZ21lbnRzLAorIyAgYW5kIHRoYXQgdGhlc2UgdmFsaWQgdHJlZXMgYXJlIGluZGVlZCBhbGxvd2VkIGJ5IHRoZSB0cmVlLWxvYWRpbmcgc2lkZQorIyAgb2YgdGhlIHBhcnNlciBtb2R1bGUuCisjCisKK2NsYXNzIFJvdW5kdHJpcExlZ2FsU3ludGF4VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHJvdW5kdHJpcChzZWxmLCBmLCBzKToKKyAgICAgICAgc3QxID0gZihzKQorICAgICAgICB0ID0gc3QxLnRvdHVwbGUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdDIgPSBwYXJzZXIuc2VxdWVuY2Uyc3QodCkKKyAgICAgICAgZXhjZXB0IHBhcnNlci5QYXJzZXJFcnJvciwgd2h5OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJjb3VsZCBub3Qgcm91bmR0cmlwICVyOiAlcyIgJSAocywgd2h5KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHN0Mi50b3R1cGxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCByZS1nZW5lcmF0ZSBzeW50YXggdHJlZSIpCisKKyAgICBkZWYgY2hlY2tfZXhwcihzZWxmLCBzKToKKyAgICAgICAgc2VsZi5yb3VuZHRyaXAocGFyc2VyLmV4cHIsIHMpCisKKyAgICBkZWYgdGVzdF9mbGFnc19wYXNzZWQoc2VsZik6CisgICAgICAgICMgVGhlIHVuaWNvZGUgbGl0ZXJhbHMgZmxhZ3MgaGFzIHRvIGJlIHBhc3NlZCBmcm9tIHRoZSBwYXNlciB0byBBU1QKKyAgICAgICAgIyBnZW5lcmF0aW9uLgorICAgICAgICBzdWl0ZSA9IHBhcnNlci5zdWl0ZSgiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzOyB4ID0gJyciKQorICAgICAgICBjb2RlID0gc3VpdGUuY29tcGlsZSgpCisgICAgICAgIHNjb3BlID0ge30KKyAgICAgICAgZXhlYyBjb2RlIGluIHNjb3BlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzY29wZVsieCJdLCB1bmljb2RlKQorCisgICAgZGVmIGNoZWNrX3N1aXRlKHNlbGYsIHMpOgorICAgICAgICBzZWxmLnJvdW5kdHJpcChwYXJzZXIuc3VpdGUsIHMpCisKKyAgICBkZWYgdGVzdF95aWVsZF9zdGF0ZW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKCk6IHlpZWxkIDEiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZigpOiB5aWVsZCIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKCk6IHggKz0geWllbGQiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZigpOiB4ID0geWllbGQgMSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKCk6IHggPSB5ID0geWllbGQgMSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKCk6IHggPSB5aWVsZCIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKCk6IHggPSB5ID0geWllbGQiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZigpOiAxICsgKHlpZWxkKSoyIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoKTogKHlpZWxkIDEpKjIiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZigpOiByZXR1cm47IHlpZWxkIDEiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZigpOiB5aWVsZCAxOyByZXR1cm4iKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZigpOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZm9yIHggaW4gcmFuZ2UoMzApOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIHlpZWxkIHhcbiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKCk6XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBpZiAoeWllbGQpOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIHlpZWxkIHhcbiIpCisKKyAgICBkZWYgdGVzdF9leHByZXNzaW9ucyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28oMSkiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInsxOjF9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7MToxLCAyOjIsIDM6M30iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInsxOjEsIDI6MiwgMzozLH0iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInsxfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiezEsIDIsIDN9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7MSwgMiwgMyx9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJbXSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiWzFdIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJbMSwgMiwgM10iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoIlsxLCAyLCAzLF0iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoIigpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCIoMSwpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCIoMSwgMiwgMykiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoIigxLCAyLCAzLCkiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoIlt4KiozIGZvciB4IGluIHJhbmdlKDIwKV0iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoIlt4KiozIGZvciB4IGluIHJhbmdlKDIwKSBpZiB4ICUgM10iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoIlt4KiozIGZvciB4IGluIHJhbmdlKDIwKSBpZiB4ICUgMiBpZiB4ICUgM10iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoIlt4K3kgZm9yIHggaW4gcmFuZ2UoMzApIGZvciB5IGluIHJhbmdlKDIwKSBpZiB4ICUgMiBpZiB5ICUgM10iKQorICAgICAgICAjc2VsZi5jaGVja19leHByKCJbeCBmb3IgeCBpbiBsYW1iZGE6IFRydWUsIGxhbWJkYTogRmFsc2UgaWYgeCgpXSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGlzdCh4KiozIGZvciB4IGluIHJhbmdlKDIwKSkiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxpc3QoeCoqMyBmb3IgeCBpbiByYW5nZSgyMCkgaWYgeCAlIDMpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJsaXN0KHgqKjMgZm9yIHggaW4gcmFuZ2UoMjApIGlmIHggJSAyIGlmIHggJSAzKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGlzdCh4K3kgZm9yIHggaW4gcmFuZ2UoMzApIGZvciB5IGluIHJhbmdlKDIwKSBpZiB4ICUgMiBpZiB5ICUgMykiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInt4KiozIGZvciB4IGluIHJhbmdlKDMwKX0iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInt4KiozIGZvciB4IGluIHJhbmdlKDMwKSBpZiB4ICUgM30iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInt4KiozIGZvciB4IGluIHJhbmdlKDMwKSBpZiB4ICUgMiBpZiB4ICUgM30iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInt4K3kgZm9yIHggaW4gcmFuZ2UoMzApIGZvciB5IGluIHJhbmdlKDIwKSBpZiB4ICUgMiBpZiB5ICUgM30iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInt4KiozOiB5KioyIGZvciB4LCB5IGluIHppcChyYW5nZSgzMCksIHJhbmdlKDMwKSl9IikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJ7eCoqMzogeSoqMiBmb3IgeCwgeSBpbiB6aXAocmFuZ2UoMzApLCByYW5nZSgzMCkpIGlmIHggJSAzfSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigie3gqKjM6IHkqKjIgZm9yIHgsIHkgaW4gemlwKHJhbmdlKDMwKSwgcmFuZ2UoMzApKSBpZiB4ICUgMyBpZiB5ICUgM30iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoInt4OnkgZm9yIHggaW4gcmFuZ2UoMzApIGZvciB5IGluIHJhbmdlKDIwKSBpZiB4ICUgMiBpZiB5ICUgM30iKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImZvbygqYXJncykiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImZvbygqYXJncywgKiprdykiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImZvbygqKmt3KSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vKGtleT12YWx1ZSkiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImZvbyhrZXk9dmFsdWUsICphcmdzKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vKGtleT12YWx1ZSwgKmFyZ3MsICoqa3cpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28oa2V5PXZhbHVlLCAqKmt3KSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vKGEsIGIsIGMsICphcmdzKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vKGEsIGIsIGMsICphcmdzLCAqKmt3KSIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vKGEsIGIsIGMsICoqa3cpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28oYSwgKmFyZ3MsIGtleXdvcmQ9MjMpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28gKyBiYXIiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImZvbyAtIGJhciIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigiZm9vICogYmFyIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28gLyBiYXIiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImZvbyAvLyBiYXIiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxhbWJkYTogMCIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGFtYmRhIHg6IDAiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxhbWJkYSAqeTogMCIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGFtYmRhICp5LCAqKno6IDAiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxhbWJkYSAqKno6IDAiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxhbWJkYSB4LCB5OiAwIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJsYW1iZGEgZm9vPWJhcjogMCIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGFtYmRhIGZvbz1iYXIsIHNwYXo9bmlmdHkrc3BpdDogMCIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGFtYmRhIGZvbz1iYXIsICoqejogMCIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGFtYmRhIGZvbz1iYXIsIGJsYXo9YmxhdCsyLCAqKno6IDAiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxhbWJkYSBmb289YmFyLCBibGF6PWJsYXQrMiwgKnksICoqejogMCIpCisgICAgICAgIHNlbGYuY2hlY2tfZXhwcigibGFtYmRhIHgsICp5LCAqKno6IDAiKQorICAgICAgICBzZWxmLmNoZWNrX2V4cHIoImxhbWJkYSB4OiA1IGlmIHggZWxzZSAyIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCIoeCBmb3IgeCBpbiByYW5nZSgxMCkpIikKKyAgICAgICAgc2VsZi5jaGVja19leHByKCJmb28oeCBmb3IgeCBpbiByYW5nZSgxMCkpIikKKworICAgIGRlZiB0ZXN0X3ByaW50KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJwcmludCIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoInByaW50IDEiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJwcmludCAxLCIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoInByaW50ID4+ZnAiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJwcmludCA+PmZwLCAxIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgicHJpbnQgPj5mcCwgMSwiKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX2V4cHJlc3Npb24oc2VsZik6CisgICAgICAgICMgZXhwcl9zdG10CisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImEiKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX2Fzc2lnbm1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhID0gYiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImEgPSBiID0gYyA9IGQgPSBlIikKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9hdWdtZW50ZWRfYXNzaWdubWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImEgKz0gYiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImEgLT0gYiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImEgKj0gYiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImEgLz0gYiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImEgLy89IGIiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhICU9IGIiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhICY9IGIiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhIHw9IGIiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhIF49IGIiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJhIDw8PSBiIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiYSA+Pj0gYiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImEgKio9IGIiKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fZGVmcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoKTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKCphcmdzKTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKCphcmdzLCAqKmt3KTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKCoqa3cpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoZm9vPWJhcik6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZihmb289YmFyLCAqYXJncyk6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZihmb289YmFyLCAqYXJncywgKiprdyk6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZihmb289YmFyLCAqKmt3KTogcGFzcyIpCisKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoYSwgYik6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZihhLCBiLCAqYXJncyk6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZihhLCBiLCAqYXJncywgKiprdyk6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJkZWYgZihhLCBiLCAqKmt3KTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImRlZiBmKGEsIGIsIGZvbz1iYXIpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoYSwgYiwgZm9vPWJhciwgKmFyZ3MpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoYSwgYiwgZm9vPWJhciwgKmFyZ3MsICoqa3cpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZGVmIGYoYSwgYiwgZm9vPWJhciwgKiprdyk6IHBhc3MiKQorCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoIkBzdGF0aWNtZXRob2RcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmIGYoKTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoIkBzdGF0aWNtZXRob2RcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiQGZ1bmNhdHRycyh4LCB5KVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJkZWYgZigpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiQGZ1bmNhdHRycygpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgImRlZiBmKCk6IHBhc3MiKQorCisgICAgZGVmIHRlc3RfY2xhc3NfZGVmcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiY2xhc3MgZm9vKCk6cGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoIkBjbGFzc19kZWNvcmF0b3JcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY2xhc3MgZm9vKCk6cGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoIkBjbGFzc19kZWNvcmF0b3IoYXJnKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJjbGFzcyBmb28oKTpwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiQGRlY29yYXRvcjFcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiQGRlY29yYXRvcjJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY2xhc3MgZm9vKCk6cGFzcyIpCisKKworICAgIGRlZiB0ZXN0X2ltcG9ydF9mcm9tX3N0YXRlbWVudChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZnJvbSBzeXMucGF0aCBpbXBvcnQgKiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImZyb20gc3lzLnBhdGggaW1wb3J0IGRpcm5hbWUiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJmcm9tIHN5cy5wYXRoIGltcG9ydCAoZGlybmFtZSkiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJmcm9tIHN5cy5wYXRoIGltcG9ydCAoZGlybmFtZSwpIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZnJvbSBzeXMucGF0aCBpbXBvcnQgZGlybmFtZSBhcyBteV9kaXJuYW1lIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZnJvbSBzeXMucGF0aCBpbXBvcnQgKGRpcm5hbWUgYXMgbXlfZGlybmFtZSkiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJmcm9tIHN5cy5wYXRoIGltcG9ydCAoZGlybmFtZSBhcyBteV9kaXJuYW1lLCkiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJmcm9tIHN5cy5wYXRoIGltcG9ydCBkaXJuYW1lLCBiYXNlbmFtZSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImZyb20gc3lzLnBhdGggaW1wb3J0IChkaXJuYW1lLCBiYXNlbmFtZSkiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJmcm9tIHN5cy5wYXRoIGltcG9ydCAoZGlybmFtZSwgYmFzZW5hbWUsKSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoCisgICAgICAgICAgICAiZnJvbSBzeXMucGF0aCBpbXBvcnQgZGlybmFtZSBhcyBteV9kaXJuYW1lLCBiYXNlbmFtZSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoCisgICAgICAgICAgICAiZnJvbSBzeXMucGF0aCBpbXBvcnQgKGRpcm5hbWUgYXMgbXlfZGlybmFtZSwgYmFzZW5hbWUpIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgKKyAgICAgICAgICAgICJmcm9tIHN5cy5wYXRoIGltcG9ydCAoZGlybmFtZSBhcyBteV9kaXJuYW1lLCBiYXNlbmFtZSwpIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgKKyAgICAgICAgICAgICJmcm9tIHN5cy5wYXRoIGltcG9ydCBkaXJuYW1lLCBiYXNlbmFtZSBhcyBteV9iYXNlbmFtZSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoCisgICAgICAgICAgICAiZnJvbSBzeXMucGF0aCBpbXBvcnQgKGRpcm5hbWUsIGJhc2VuYW1lIGFzIG15X2Jhc2VuYW1lKSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoCisgICAgICAgICAgICAiZnJvbSBzeXMucGF0aCBpbXBvcnQgKGRpcm5hbWUsIGJhc2VuYW1lIGFzIG15X2Jhc2VuYW1lLCkiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJmcm9tIC5ib2d1cyBpbXBvcnQgeCIpCisKKyAgICBkZWYgdGVzdF9iYXNpY19pbXBvcnRfc3RhdGVtZW50KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJpbXBvcnQgc3lzIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiaW1wb3J0IHN5cyBhcyBzeXN0ZW0iKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJpbXBvcnQgc3lzLCBtYXRoIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiaW1wb3J0IHN5cyBhcyBzeXN0ZW0sIG1hdGgiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJpbXBvcnQgc3lzLCBtYXRoIGFzIG15X21hdGgiKQorCisgICAgZGVmIHRlc3RfcmVsYXRpdmVfaW1wb3J0cyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZnJvbSAuIGltcG9ydCBuYW1lIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgiZnJvbSAuLiBpbXBvcnQgbmFtZSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImZyb20gLnBrZyBpbXBvcnQgbmFtZSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImZyb20gLi5wa2cgaW1wb3J0IG5hbWUiKQorCisgICAgZGVmIHRlc3RfcGVwMjYzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCIjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTEgLSotXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgInBhc3NcbiIpCisKKyAgICBkZWYgdGVzdF9hc3NlcnQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoImFzc2VydCBhbG8gPCBhaGkgYW5kIGJsbyA8IGJoaVxuIikKKworICAgIGRlZiB0ZXN0X3dpdGgoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoIndpdGggb3BlbigneCcpOiBwYXNzXG4iKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJ3aXRoIG9wZW4oJ3gnKSBhcyBmOiBwYXNzXG4iKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJ3aXRoIG9wZW4oJ3gnKSBhcyBmLCBvcGVuKCd5JykgYXMgZzogcGFzc1xuIikKKworICAgIGRlZiB0ZXN0X3RyeV9zdG10KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJ0cnk6IHBhc3NcbmV4Y2VwdDogcGFzc1xuIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgidHJ5OiBwYXNzXG5maW5hbGx5OiBwYXNzXG4iKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJ0cnk6IHBhc3NcbmV4Y2VwdCBBOiBwYXNzXG5maW5hbGx5OiBwYXNzXG4iKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJ0cnk6IHBhc3NcbmV4Y2VwdCBBOiBwYXNzXG5leGNlcHQ6IHBhc3NcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZmluYWxseTogcGFzc1xuIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgidHJ5OiBwYXNzXG5leGNlcHQ6IHBhc3NcbmVsc2U6IHBhc3NcbiIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoInRyeTogcGFzc1xuZXhjZXB0OiBwYXNzXG5lbHNlOiBwYXNzXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgImZpbmFsbHk6IHBhc3NcbiIpCisKKyAgICBkZWYgdGVzdF9leGNlcHRfY2xhdXNlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJ0cnk6IHBhc3NcbmV4Y2VwdDogcGFzc1xuIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgidHJ5OiBwYXNzXG5leGNlcHQgQTogcGFzc1xuIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgidHJ5OiBwYXNzXG5leGNlcHQgQSwgZTogcGFzc1xuIikKKyAgICAgICAgc2VsZi5jaGVja19zdWl0ZSgidHJ5OiBwYXNzXG5leGNlcHQgQSBhcyBlOiBwYXNzXG4iKQorCisgICAgZGVmIHRlc3RfcG9zaXRpb24oc2VsZik6CisgICAgICAgICMgQW4gYWJzb2x1dGVseSBtaW5pbWFsIHRlc3Qgb2YgcG9zaXRpb24gaW5mb3JtYXRpb24uICBCZXR0ZXIKKyAgICAgICAgIyB0ZXN0cyB3b3VsZCBiZSBhIGJpZyBwcm9qZWN0LgorICAgICAgICBjb2RlID0gImRlZiBmKHgpOlxuICAgIHJldHVybiB4ICsgMSIKKyAgICAgICAgc3QxID0gcGFyc2VyLnN1aXRlKGNvZGUpCisgICAgICAgIHN0MiA9IHN0MS50b3R1cGxlKGxpbmVfaW5mbz0xLCBjb2xfaW5mbz0xKQorCisgICAgICAgIGRlZiB3YWxrKHRyZWUpOgorICAgICAgICAgICAgbm9kZV90eXBlID0gdHJlZVswXQorICAgICAgICAgICAgbmV4dCA9IHRyZWVbMV0KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobmV4dCwgdHVwbGUpOgorICAgICAgICAgICAgICAgIGZvciBlbHQgaW4gdHJlZVsxOl06CisgICAgICAgICAgICAgICAgICAgIGZvciB4IGluIHdhbGsoZWx0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHgKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgeWllbGQgdHJlZQorCisgICAgICAgIHRlcm1pbmFscyA9IGxpc3Qod2FsayhzdDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsKKyAgICAgICAgICAgICgxLCAnZGVmJywgMSwgMCksCisgICAgICAgICAgICAoMSwgJ2YnLCAxLCA0KSwKKyAgICAgICAgICAgICg3LCAnKCcsIDEsIDUpLAorICAgICAgICAgICAgKDEsICd4JywgMSwgNiksCisgICAgICAgICAgICAoOCwgJyknLCAxLCA3KSwKKyAgICAgICAgICAgICgxMSwgJzonLCAxLCA4KSwKKyAgICAgICAgICAgICg0LCAnJywgMSwgOSksCisgICAgICAgICAgICAoNSwgJycsIDIsIC0xKSwKKyAgICAgICAgICAgICgxLCAncmV0dXJuJywgMiwgNCksCisgICAgICAgICAgICAoMSwgJ3gnLCAyLCAxMSksCisgICAgICAgICAgICAoMTQsICcrJywgMiwgMTMpLAorICAgICAgICAgICAgKDIsICcxJywgMiwgMTUpLAorICAgICAgICAgICAgKDQsICcnLCAyLCAxNiksCisgICAgICAgICAgICAoNiwgJycsIDIsIC0xKSwKKyAgICAgICAgICAgICg0LCAnJywgMiwgLTEpLAorICAgICAgICAgICAgKDAsICcnLCAyLCAtMSldLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmFscykKKworCisjCisjICBTZWNvbmQsIHdlIHRha2UgKmludmFsaWQqIHRyZWVzIGFuZCBtYWtlIHN1cmUgd2UgZ2V0IFBhcnNlckVycm9yCisjICByZWplY3Rpb25zIGZvciB0aGVtLgorIworCitjbGFzcyBJbGxlZ2FsU3ludGF4VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrX2JhZF90cmVlKHNlbGYsIHRyZWUsIGxhYmVsKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyc2VyLnNlcXVlbmNlMnN0KHRyZWUpCisgICAgICAgIGV4Y2VwdCBwYXJzZXIuUGFyc2VyRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImRpZCBub3QgZGV0ZWN0IGludmFsaWQgdHJlZSBmb3IgJXIiICUgbGFiZWwpCisKKyAgICBkZWYgdGVzdF9qdW5rKHNlbGYpOgorICAgICAgICAjIG5vdCBldmVuIHJlbW90ZWx5IHZhbGlkOgorICAgICAgICBzZWxmLmNoZWNrX2JhZF90cmVlKCgxLCAyLCAzKSwgIjxqdW5rPiIpCisKKyAgICBkZWYgdGVzdF9pbGxlZ2FsX3lpZWxkXzEoc2VsZik6CisgICAgICAgICMgSWxsZWdhbCB5aWVsZCBzdGF0ZW1lbnQ6IGRlZiBmKCk6IHJldHVybiAxOyB5aWVsZCAxCisgICAgICAgIHRyZWUgPSBcCisgICAgICAgICgyNTcsCisgICAgICAgICAoMjY0LAorICAgICAgICAgICgyODUsCisgICAgICAgICAgICgyNTksCisgICAgICAgICAgICAoMSwgJ2RlZicpLAorICAgICAgICAgICAgKDEsICdmJyksCisgICAgICAgICAgICAoMjYwLCAoNywgJygnKSwgKDgsICcpJykpLAorICAgICAgICAgICAgKDExLCAnOicpLAorICAgICAgICAgICAgKDI5MSwKKyAgICAgICAgICAgICAoNCwgJycpLAorICAgICAgICAgICAgICg1LCAnJyksCisgICAgICAgICAgICAgKDI2NCwKKyAgICAgICAgICAgICAgKDI2NSwKKyAgICAgICAgICAgICAgICgyNjYsCisgICAgICAgICAgICAgICAgKDI3MiwKKyAgICAgICAgICAgICAgICAgKDI3NSwKKyAgICAgICAgICAgICAgICAgICgxLCAncmV0dXJuJyksCisgICAgICAgICAgICAgICAgICAoMzEzLAorICAgICAgICAgICAgICAgICAgICgyOTIsCisgICAgICAgICAgICAgICAgICAgICgyOTMsCisgICAgICAgICAgICAgICAgICAgICAoMjk0LAorICAgICAgICAgICAgICAgICAgICAgICgyOTUsCisgICAgICAgICAgICAgICAgICAgICAgICgyOTcsCisgICAgICAgICAgICAgICAgICAgICAgICAoMjk4LAorICAgICAgICAgICAgICAgICAgICAgICAgICgyOTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgzMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzMDIsICgzMDMsICgzMDQsICgzMDUsICgyLCAnMScpKSkpKSkpKSkpKSkpKSkpKSksCisgICAgICAgICAgICAgICAoMjY0LAorICAgICAgICAgICAgICAgICgyNjUsCisgICAgICAgICAgICAgICAgICgyNjYsCisgICAgICAgICAgICAgICAgICAoMjcyLAorICAgICAgICAgICAgICAgICAgICgyNzYsCisgICAgICAgICAgICAgICAgICAgICgxLCAneWllbGQnKSwKKyAgICAgICAgICAgICAgICAgICAgKDMxMywKKyAgICAgICAgICAgICAgICAgICAgICgyOTIsCisgICAgICAgICAgICAgICAgICAgICAgKDI5MywKKyAgICAgICAgICAgICAgICAgICAgICAgKDI5NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICgyOTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgKDI5NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDI5OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgyOTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzMDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMwMywgKDMwNCwgKDMwNSwgKDIsICcxJykpKSkpKSkpKSkpKSkpKSkpKSwKKyAgICAgICAgICAgICAgICAgKDQsICcnKSkpLAorICAgICAgICAgICAgICAgKDYsICcnKSkpKSksCisgICAgICAgICAgICg0LCAnJyksCisgICAgICAgICAgICgwLCAnJykpKSkKKyAgICAgICAgc2VsZi5jaGVja19iYWRfdHJlZSh0cmVlLCAiZGVmIGYoKTpcbiAgcmV0dXJuIDFcbiAgeWllbGQgMSIpCisKKyAgICBkZWYgdGVzdF9pbGxlZ2FsX3lpZWxkXzIoc2VsZik6CisgICAgICAgICMgSWxsZWdhbCByZXR1cm4gaW4gZ2VuZXJhdG9yOiBkZWYgZigpOiByZXR1cm4gMTsgeWllbGQgMQorICAgICAgICB0cmVlID0gXAorICAgICAgICAoMjU3LAorICAgICAgICAgKDI2NCwKKyAgICAgICAgICAoMjY1LAorICAgICAgICAgICAoMjY2LAorICAgICAgICAgICAgKDI3OCwKKyAgICAgICAgICAgICAoMSwgJ2Zyb20nKSwKKyAgICAgICAgICAgICAoMjgxLCAoMSwgJ19fZnV0dXJlX18nKSksCisgICAgICAgICAgICAgKDEsICdpbXBvcnQnKSwKKyAgICAgICAgICAgICAoMjc5LCAoMSwgJ2dlbmVyYXRvcnMnKSkpKSwKKyAgICAgICAgICAgKDQsICcnKSkpLAorICAgICAgICAgKDI2NCwKKyAgICAgICAgICAoMjg1LAorICAgICAgICAgICAoMjU5LAorICAgICAgICAgICAgKDEsICdkZWYnKSwKKyAgICAgICAgICAgICgxLCAnZicpLAorICAgICAgICAgICAgKDI2MCwgKDcsICcoJyksICg4LCAnKScpKSwKKyAgICAgICAgICAgICgxMSwgJzonKSwKKyAgICAgICAgICAgICgyOTEsCisgICAgICAgICAgICAgKDQsICcnKSwKKyAgICAgICAgICAgICAoNSwgJycpLAorICAgICAgICAgICAgICgyNjQsCisgICAgICAgICAgICAgICgyNjUsCisgICAgICAgICAgICAgICAoMjY2LAorICAgICAgICAgICAgICAgICgyNzIsCisgICAgICAgICAgICAgICAgICgyNzUsCisgICAgICAgICAgICAgICAgICAoMSwgJ3JldHVybicpLAorICAgICAgICAgICAgICAgICAgKDMxMywKKyAgICAgICAgICAgICAgICAgICAoMjkyLAorICAgICAgICAgICAgICAgICAgICAoMjkzLAorICAgICAgICAgICAgICAgICAgICAgKDI5NCwKKyAgICAgICAgICAgICAgICAgICAgICAoMjk1LAorICAgICAgICAgICAgICAgICAgICAgICAoMjk3LAorICAgICAgICAgICAgICAgICAgICAgICAgKDI5OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMjk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMzAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzAyLCAoMzAzLCAoMzA0LCAoMzA1LCAoMiwgJzEnKSkpKSkpKSkpKSkpKSkpKSkpLAorICAgICAgICAgICAgICAgKDI2NCwKKyAgICAgICAgICAgICAgICAoMjY1LAorICAgICAgICAgICAgICAgICAoMjY2LAorICAgICAgICAgICAgICAgICAgKDI3MiwKKyAgICAgICAgICAgICAgICAgICAoMjc2LAorICAgICAgICAgICAgICAgICAgICAoMSwgJ3lpZWxkJyksCisgICAgICAgICAgICAgICAgICAgICgzMTMsCisgICAgICAgICAgICAgICAgICAgICAoMjkyLAorICAgICAgICAgICAgICAgICAgICAgICgyOTMsCisgICAgICAgICAgICAgICAgICAgICAgICgyOTQsCisgICAgICAgICAgICAgICAgICAgICAgICAoMjk1LAorICAgICAgICAgICAgICAgICAgICAgICAgICgyOTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICgyOTgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMjk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzMDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzMDMsICgzMDQsICgzMDUsICgyLCAnMScpKSkpKSkpKSkpKSkpKSkpKSksCisgICAgICAgICAgICAgICAgICg0LCAnJykpKSwKKyAgICAgICAgICAgICAgICg2LCAnJykpKSkpLAorICAgICAgICAgICAoNCwgJycpLAorICAgICAgICAgICAoMCwgJycpKSkpCisgICAgICAgIHNlbGYuY2hlY2tfYmFkX3RyZWUodHJlZSwgImRlZiBmKCk6XG4gIHJldHVybiAxXG4gIHlpZWxkIDEiKQorCisgICAgZGVmIHRlc3RfcHJpbnRfY2hldnJvbl9jb21tYShzZWxmKToKKyAgICAgICAgIyBJbGxlZ2FsIGlucHV0OiBwcmludCA+PmZwLAorICAgICAgICB0cmVlID0gXAorICAgICAgICAoMjU3LAorICAgICAgICAgKDI2NCwKKyAgICAgICAgICAoMjY1LAorICAgICAgICAgICAoMjY2LAorICAgICAgICAgICAgKDI2OCwKKyAgICAgICAgICAgICAoMSwgJ3ByaW50JyksCisgICAgICAgICAgICAgKDM1LCAnPj4nKSwKKyAgICAgICAgICAgICAoMjkwLAorICAgICAgICAgICAgICAoMjkxLAorICAgICAgICAgICAgICAgKDI5MiwKKyAgICAgICAgICAgICAgICAoMjkzLAorICAgICAgICAgICAgICAgICAoMjk1LAorICAgICAgICAgICAgICAgICAgKDI5NiwKKyAgICAgICAgICAgICAgICAgICAoMjk3LAorICAgICAgICAgICAgICAgICAgICAoMjk4LCAoMjk5LCAoMzAwLCAoMzAxLCAoMzAyLCAoMzAzLCAoMSwgJ2ZwJykpKSkpKSkpKSkpKSkpLAorICAgICAgICAgICAgICgxMiwgJywnKSkpLAorICAgICAgICAgICAoNCwgJycpKSksCisgICAgICAgICAoMCwgJycpKQorICAgICAgICBzZWxmLmNoZWNrX2JhZF90cmVlKHRyZWUsICJwcmludCA+PmZwLCIpCisKKyAgICBkZWYgdGVzdF9hX2NvbW1hX2NvbW1hX2Moc2VsZik6CisgICAgICAgICMgSWxsZWdhbCBpbnB1dDogYSwsYworICAgICAgICB0cmVlID0gXAorICAgICAgICAoMjU4LAorICAgICAgICAgKDMxMSwKKyAgICAgICAgICAoMjkwLAorICAgICAgICAgICAoMjkxLAorICAgICAgICAgICAgKDI5MiwKKyAgICAgICAgICAgICAoMjkzLAorICAgICAgICAgICAgICAoMjk1LAorICAgICAgICAgICAgICAgKDI5NiwKKyAgICAgICAgICAgICAgICAoMjk3LAorICAgICAgICAgICAgICAgICAoMjk4LCAoMjk5LCAoMzAwLCAoMzAxLCAoMzAyLCAoMzAzLCAoMSwgJ2EnKSkpKSkpKSkpKSkpKSksCisgICAgICAgICAgKDEyLCAnLCcpLAorICAgICAgICAgICgxMiwgJywnKSwKKyAgICAgICAgICAoMjkwLAorICAgICAgICAgICAoMjkxLAorICAgICAgICAgICAgKDI5MiwKKyAgICAgICAgICAgICAoMjkzLAorICAgICAgICAgICAgICAoMjk1LAorICAgICAgICAgICAgICAgKDI5NiwKKyAgICAgICAgICAgICAgICAoMjk3LAorICAgICAgICAgICAgICAgICAoMjk4LCAoMjk5LCAoMzAwLCAoMzAxLCAoMzAyLCAoMzAzLCAoMSwgJ2MnKSkpKSkpKSkpKSkpKSkpLAorICAgICAgICAgKDQsICcnKSwKKyAgICAgICAgICgwLCAnJykpCisgICAgICAgIHNlbGYuY2hlY2tfYmFkX3RyZWUodHJlZSwgImEsLGMiKQorCisgICAgZGVmIHRlc3RfaWxsZWdhbF9vcGVyYXRvcihzZWxmKToKKyAgICAgICAgIyBJbGxlZ2FsIGlucHV0OiBhICQ9IGIKKyAgICAgICAgdHJlZSA9IFwKKyAgICAgICAgKDI1NywKKyAgICAgICAgICgyNjQsCisgICAgICAgICAgKDI2NSwKKyAgICAgICAgICAgKDI2NiwKKyAgICAgICAgICAgICgyNjcsCisgICAgICAgICAgICAgKDMxMiwKKyAgICAgICAgICAgICAgKDI5MSwKKyAgICAgICAgICAgICAgICgyOTIsCisgICAgICAgICAgICAgICAgKDI5MywKKyAgICAgICAgICAgICAgICAgKDI5NCwKKyAgICAgICAgICAgICAgICAgICgyOTYsCisgICAgICAgICAgICAgICAgICAgKDI5NywKKyAgICAgICAgICAgICAgICAgICAgKDI5OCwKKyAgICAgICAgICAgICAgICAgICAgICgyOTksCisgICAgICAgICAgICAgICAgICAgICAgKDMwMCwgKDMwMSwgKDMwMiwgKDMwMywgKDMwNCwgKDEsICdhJykpKSkpKSkpKSkpKSkpKSwKKyAgICAgICAgICAgICAoMjY4LCAoMzcsICckPScpKSwKKyAgICAgICAgICAgICAoMzEyLAorICAgICAgICAgICAgICAoMjkxLAorICAgICAgICAgICAgICAgKDI5MiwKKyAgICAgICAgICAgICAgICAoMjkzLAorICAgICAgICAgICAgICAgICAoMjk0LAorICAgICAgICAgICAgICAgICAgKDI5NiwKKyAgICAgICAgICAgICAgICAgICAoMjk3LAorICAgICAgICAgICAgICAgICAgICAoMjk4LAorICAgICAgICAgICAgICAgICAgICAgKDI5OSwKKyAgICAgICAgICAgICAgICAgICAgICAoMzAwLCAoMzAxLCAoMzAyLCAoMzAzLCAoMzA0LCAoMSwgJ2InKSkpKSkpKSkpKSkpKSkpKSksCisgICAgICAgICAgICg0LCAnJykpKSwKKyAgICAgICAgICgwLCAnJykpCisgICAgICAgIHNlbGYuY2hlY2tfYmFkX3RyZWUodHJlZSwgImEgJD0gYiIpCisKKyAgICBkZWYgdGVzdF9tYWxmb3JtZWRfZ2xvYmFsKHNlbGYpOgorICAgICAgICAjZG9lc24ndCBoYXZlIGdsb2JhbCBrZXl3b3JkIGluIGFzdAorICAgICAgICB0cmVlID0gKDI1NywKKyAgICAgICAgICAgICAgICAoMjY0LAorICAgICAgICAgICAgICAgICAoMjY1LAorICAgICAgICAgICAgICAgICAgKDI2NiwKKyAgICAgICAgICAgICAgICAgICAoMjgyLCAoMSwgJ2ZvbycpKSksICg0LCAnJykpKSwKKyAgICAgICAgICAgICAgICAoNCwgJycpLAorICAgICAgICAgICAgICAgICgwLCAnJykpCisgICAgICAgIHNlbGYuY2hlY2tfYmFkX3RyZWUodHJlZSwgIm1hbGZvcm1lZCBnbG9iYWwgYXN0IikKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfaW1wb3J0X3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBmcm9tIGltcG9ydCBhCisgICAgICAgIHRyZWUgPSBcCisgICAgICAgICAgICAoMjU3LAorICAgICAgICAgICAgICgyNjcsCisgICAgICAgICAgICAgICgyNjgsCisgICAgICAgICAgICAgICAoMjY5LAorICAgICAgICAgICAgICAgICgyODEsCisgICAgICAgICAgICAgICAgICgyODMsICgxLCAnZnJvbScpLCAoMSwgJ2ltcG9ydCcpLAorICAgICAgICAgICAgICAgICAgKDI4NiwgKDI4NCwgKDEsICdmcmVkJykpKSkpKSwKKyAgICAgICAgICAgICAgICg0LCAnJykpKSwKKyAgICAgICAgICAgICAoNCwgJycpLCAoMCwgJycpKQorICAgICAgICBzZWxmLmNoZWNrX2JhZF90cmVlKHRyZWUsICJmcm9tIGltcG9ydCBhIikKKworCitjbGFzcyBDb21waWxlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBUaGVzZSB0ZXN0cyBhcmUgdmVyeSBtaW5pbWFsLiA6LSgKKworICAgIGRlZiB0ZXN0X2NvbXBpbGVfZXhwcihzZWxmKToKKyAgICAgICAgc3QgPSBwYXJzZXIuZXhwcignMiArIDMnKQorICAgICAgICBjb2RlID0gcGFyc2VyLmNvbXBpbGVzdChzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCA1KQorCisgICAgZGVmIHRlc3RfY29tcGlsZV9zdWl0ZShzZWxmKToKKyAgICAgICAgc3QgPSBwYXJzZXIuc3VpdGUoJ3ggPSAyOyB5ID0geCArIDMnKQorICAgICAgICBjb2RlID0gcGFyc2VyLmNvbXBpbGVzdChzdCkKKyAgICAgICAgZ2xvYnMgPSB7fQorICAgICAgICBleGVjIGNvZGUgaW4gZ2xvYnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9ic1sneSddLCA1KQorCisgICAgZGVmIHRlc3RfY29tcGlsZV9lcnJvcihzZWxmKToKKyAgICAgICAgc3QgPSBwYXJzZXIuc3VpdGUoJzEgPSAzICsgNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBwYXJzZXIuY29tcGlsZXN0LCBzdCkKKworICAgIGRlZiB0ZXN0X2NvbXBpbGVfYmFkdW5pY29kZShzZWxmKToKKyAgICAgICAgc3QgPSBwYXJzZXIuc3VpdGUoJ2EgPSB1IlxVMTIzNDU2NzgiJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIHBhcnNlci5jb21waWxlc3QsIHN0KQorICAgICAgICBzdCA9IHBhcnNlci5zdWl0ZSgnYSA9IHUiXHUxIicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBwYXJzZXIuY29tcGlsZXN0LCBzdCkKKworICAgIGRlZiB0ZXN0X2lzc3VlXzkwMTEoc2VsZik6CisgICAgICAgICMgSXNzdWUgOTAxMTogY29tcGlsYXRpb24gb2YgYW4gdW5hcnkgbWludXMgZXhwcmVzc2lvbiBjaGFuZ2VkCisgICAgICAgICMgdGhlIG1lYW5pbmcgb2YgdGhlIFNULCBzbyB0aGF0IGEgc2Vjb25kIGNvbXBpbGF0aW9uIHByb2R1Y2VkCisgICAgICAgICMgaW5jb3JyZWN0IHJlc3VsdHMuCisgICAgICAgIHN0ID0gcGFyc2VyLmV4cHIoJy0zJykKKyAgICAgICAgY29kZTEgPSBwYXJzZXIuY29tcGlsZXN0KHN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoY29kZTEpLCAtMykKKyAgICAgICAgY29kZTIgPSBwYXJzZXIuY29tcGlsZXN0KHN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoY29kZTIpLCAtMykKKworCitjbGFzcyBQYXJzZXJTdGFja0xpbWl0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiInRyeSB0byBwdXNoIHRoZSBwYXJzZXIgdG8vb3ZlciBpdHMgbGltaXRzLgorICAgIHNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTg4MSBmb3IgYSBkaXNjdXNzaW9uCisgICAgIiIiCisgICAgZGVmIF9uZXN0ZWRfZXhwcmVzc2lvbihzZWxmLCBsZXZlbCk6CisgICAgICAgIHJldHVybiAiWyIqbGV2ZWwrIl0iKmxldmVsCisKKyAgICBkZWYgdGVzdF9kZWVwbHlfbmVzdGVkX2xpc3Qoc2VsZik6CisgICAgICAgIGUgPSBzZWxmLl9uZXN0ZWRfZXhwcmVzc2lvbig5OSkKKyAgICAgICAgc3QgPSBwYXJzZXIuZXhwcihlKQorICAgICAgICBzdC5jb21waWxlKCkKKworICAgIGRlZiB0ZXN0X3RyaWdnZXJfbWVtb3J5X2Vycm9yKHNlbGYpOgorICAgICAgICBlID0gc2VsZi5fbmVzdGVkX2V4cHJlc3Npb24oMTAwKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1jJywgZSkKKyAgICAgICAgIyBwYXJzaW5nIHRoZSBleHByZXNzaW9uIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yIG1lc3NhZ2UKKyAgICAgICAgIyBmb2xsb3dlZCBieSBhIE1lbW9yeUVycm9yIChzZWUgIzExOTYzKQorICAgICAgICBzZWxmLmFzc2VydEluKGInc19wdXNoOiBwYXJzZXIgc3RhY2sgb3ZlcmZsb3cnLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidNZW1vcnlFcnJvcicsIGVycikKKworY2xhc3MgU1RPYmplY3RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBvcGVyYXRpb25zIG9uIFNUIG9iamVjdHMgdGhlbXNlbHZlcyIiIgorCisgICAgY2hlY2tfc2l6ZW9mID0gc3VwcG9ydC5jaGVja19zaXplb2YKKworICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3NpemVvZihzZWxmKToKKyAgICAgICAgZGVmIFhYWFJPVU5EVVAobik6CisgICAgICAgICAgICBpZiBuIDw9IDE6CisgICAgICAgICAgICAgICAgcmV0dXJuIG4KKyAgICAgICAgICAgIGlmIG4gPD0gMTI4OgorICAgICAgICAgICAgICAgIHJldHVybiAobiArIDMpICYgfjMKKyAgICAgICAgICAgIHJldHVybiAxIDw8IChuIC0gMSkuYml0X2xlbmd0aCgpCisKKyAgICAgICAgYmFzZXNpemUgPSBzdXBwb3J0LmNhbGNvYmpzaXplKCdQaWknKQorICAgICAgICBub2Rlc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZSgnaFAzaVAwaCcpCisgICAgICAgIGRlZiBzaXplb2ZjaGlsZHJlbihub2RlKToKKyAgICAgICAgICAgIGlmIG5vZGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgcmVzID0gMAorICAgICAgICAgICAgaGFzc3RyID0gbGVuKG5vZGUpID4gMSBhbmQgaXNpbnN0YW5jZShub2RlWy0xXSwgc3RyKQorICAgICAgICAgICAgaWYgaGFzc3RyOgorICAgICAgICAgICAgICAgIHJlcyArPSBsZW4obm9kZVstMV0pICsgMQorICAgICAgICAgICAgY2hpbGRyZW4gPSBub2RlWzE6LTFdIGlmIGhhc3N0ciBlbHNlIG5vZGVbMTpdCisgICAgICAgICAgICBpZiBjaGlsZHJlbjoKKyAgICAgICAgICAgICAgICByZXMgKz0gWFhYUk9VTkRVUChsZW4oY2hpbGRyZW4pKSAqIG5vZGVzaXplCisgICAgICAgICAgICAgICAgZm9yIGNoaWxkIGluIGNoaWxkcmVuOgorICAgICAgICAgICAgICAgICAgICByZXMgKz0gc2l6ZW9mY2hpbGRyZW4oY2hpbGQpCisgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICAgICAgZGVmIGNoZWNrX3N0X3NpemVvZihzdCk6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3NpemVvZihzdCwgYmFzZXNpemUgKyBub2Rlc2l6ZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mY2hpbGRyZW4oc3QudG90dXBsZSgpKSkKKworICAgICAgICBjaGVja19zdF9zaXplb2YocGFyc2VyLmV4cHIoJzIgKyAzJykpCisgICAgICAgIGNoZWNrX3N0X3NpemVvZihwYXJzZXIuZXhwcignMiArIDMgKyA0JykpCisgICAgICAgIGNoZWNrX3N0X3NpemVvZihwYXJzZXIuc3VpdGUoJ3ggPSAyICsgMycpKQorICAgICAgICBjaGVja19zdF9zaXplb2YocGFyc2VyLnN1aXRlKCcnKSkKKyAgICAgICAgY2hlY2tfc3Rfc2l6ZW9mKHBhcnNlci5zdWl0ZSgnIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0nKSkKKyAgICAgICAgY2hlY2tfc3Rfc2l6ZW9mKHBhcnNlci5leHByKCdbJyArICcyLCcgKiAxMDAwICsgJ10nKSkKKworCisgICAgIyBYWFggdGVzdHMgZm9yIHBpY2tsaW5nIGFuZCB1bnBpY2tsaW5nIG9mIFNUIG9iamVjdHMgc2hvdWxkIGdvIGhlcmUKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBSb3VuZHRyaXBMZWdhbFN5bnRheFRlc3RDYXNlLAorICAgICAgICBJbGxlZ2FsU3ludGF4VGVzdENhc2UsCisgICAgICAgIENvbXBpbGVUZXN0Q2FzZSwKKyAgICAgICAgUGFyc2VyU3RhY2tMaW1pdFRlc3RDYXNlLAorICAgICAgICBTVE9iamVjdFRlc3RDYXNlLAorICAgICkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wZGIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wZGIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5Zjc1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BkYi5weQpAQCAtMCwwICsxLDM3NCBAQAorIyBBIHRlc3Qgc3VpdGUgZm9yIHBkYjsgYXQgdGhlIG1vbWVudCwgdGhpcyBvbmx5IHZhbGlkYXRlcyBza2lwcGluZyBvZgorIyBzcGVjaWZpZWQgdGVzdCBtb2R1bGVzIChSRkUgIzUxNDIpLgorCitpbXBvcnQgaW1wCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0ZXh0d3JhcAorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorIyBUaGlzIGxpdHRsZSBoZWxwZXIgY2xhc3MgaXMgZXNzZW50aWFsIGZvciB0ZXN0aW5nIHBkYiB1bmRlciBkb2N0ZXN0LgorZnJvbSB0ZXN0X2RvY3Rlc3QgaW1wb3J0IF9GYWtlSW5wdXQKKworCitjbGFzcyBQZGJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgcnVuX3BkYihzZWxmLCBzY3JpcHQsIGNvbW1hbmRzKToKKyAgICAgICAgIiIiUnVuICdzY3JpcHQnIGxpbmVzIHdpdGggcGRiIGFuZCB0aGUgcGRiICdjb21tYW5kcycuIiIiCisgICAgICAgIGZpbGVuYW1lID0gJ21haW4ucHknCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSh0ZXh0d3JhcC5kZWRlbnQoc2NyaXB0KSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRlc3Rfc3VwcG9ydC51bmxpbmssIGZpbGVuYW1lKQorICAgICAgICBjbWQgPSBbc3lzLmV4ZWN1dGFibGUsICctbScsICdwZGInLCBmaWxlbmFtZV0KKyAgICAgICAgc3Rkb3V0ID0gc3RkZXJyID0gTm9uZQorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcHJvYy5jb21tdW5pY2F0ZShjb21tYW5kcykKKyAgICAgICAgcHJvYy5zdGRvdXQuY2xvc2UoKQorICAgICAgICBwcm9jLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIHN0ZG91dCwgc3RkZXJyCisKKyAgICBkZWYgdGVzdF9pc3N1ZTEzMTgzKHNlbGYpOgorICAgICAgICBzY3JpcHQgPSAiIiIKKyAgICAgICAgICAgIGZyb20gYmFyIGltcG9ydCBiYXIKKworICAgICAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgICAgIGJhcigpCisKKyAgICAgICAgICAgIGRlZiBub3BlKCk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBkZWYgZm9vYmFyKCk6CisgICAgICAgICAgICAgICAgZm9vKCkKKyAgICAgICAgICAgICAgICBub3BlKCkKKworICAgICAgICAgICAgZm9vYmFyKCkKKyAgICAgICAgIiIiCisgICAgICAgIGNvbW1hbmRzID0gIiIiCisgICAgICAgICAgICBmcm9tIGJhciBpbXBvcnQgYmFyCisgICAgICAgICAgICBicmVhayBiYXIKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzdGVwCisgICAgICAgICAgICBzdGVwCisgICAgICAgICAgICBxdWl0CisgICAgICAgICIiIgorICAgICAgICBiYXIgPSAiIiIKKyAgICAgICAgICAgIGRlZiBiYXIoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICIiIgorICAgICAgICB3aXRoIG9wZW4oJ2Jhci5weScsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUodGV4dHdyYXAuZGVkZW50KGJhcikpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0X3N1cHBvcnQudW5saW5rLCAnYmFyLnB5JykKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLnJ1bl9wZGIoc2NyaXB0LCBjb21tYW5kcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgYW55KCdtYWluLnB5KDUpZm9vKCktPk5vbmUnIGluIGwgZm9yIGwgaW4gc3Rkb3V0LnNwbGl0bGluZXMoKSksCisgICAgICAgICAgICAnRmFpbCB0byBzdGVwIGludG8gdGhlIGNhbGxlciBhZnRlciBhIHJldHVybicpCisKKworY2xhc3MgUGRiVGVzdElucHV0KG9iamVjdCk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRoYXQgbWFrZXMgdGVzdGluZyBQZGIgaW4gZG9jdGVzdHMgZWFzaWVyLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlucHV0KToKKyAgICAgICAgc2VsZi5pbnB1dCA9IGlucHV0CisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWxfc3RkaW4gPSBzeXMuc3RkaW4KKyAgICAgICAgc3lzLnN0ZGluID0gX0Zha2VJbnB1dChzZWxmLmlucHV0KQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGMpOgorICAgICAgICBzeXMuc3RkaW4gPSBzZWxmLnJlYWxfc3RkaW4KKworCitkZWYgd3JpdGUoeCk6CisgICAgcHJpbnQgeAorCitkZWYgdGVzdF9wZGJfZGlzcGxheWhvb2soKToKKyAgICAiIiJUaGlzIHRlc3RzIHRoZSBjdXN0b20gZGlzcGxheWhvb2sgZm9yIHBkYi4KKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbihmb28sIGJhcik6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKCkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIHBhc3MKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbCisgICAgLi4uICAgICAnZm9vJywKKyAgICAuLi4gICAgICdiYXInLAorICAgIC4uLiAgICAgJ2ZvciBpIGluIHJhbmdlKDUpOiB3cml0ZShpKScsCisgICAgLi4uICAgICAnY29udGludWUnLAorICAgIC4uLiBdKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oMSwgTm9uZSkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfZGlzcGxheWhvb2tbMF0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcGFzcworICAgIChQZGIpIGZvbworICAgIDEKKyAgICAoUGRiKSBiYXIKKyAgICAoUGRiKSBmb3IgaSBpbiByYW5nZSg1KTogd3JpdGUoaSkKKyAgICAwCisgICAgMQorICAgIDIKKyAgICAzCisgICAgNAorICAgIChQZGIpIGNvbnRpbnVlCisgICAgIiIiCisKK2RlZiB0ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzKCk6CisgICAgIiIiVGVzdCBiYXNpYyBjb21tYW5kcyByZWxhdGVkIHRvIGJyZWFrcG9pbnRzLgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKCkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIHByaW50KDEpCisgICAgLi4uICAgICBwcmludCgyKQorICAgIC4uLiAgICAgcHJpbnQoMykKKyAgICAuLi4gICAgIHByaW50KDQpCisKKyAgICBGaXJzdCwgbmVlZCB0byBjbGVhciBiZGIgc3RhdGUgdGhhdCBtaWdodCBiZSBsZWZ0IG92ZXIgZnJvbSBwcmV2aW91cyB0ZXN0cy4KKyAgICBPdGhlcndpc2UsIHRoZSBuZXcgYnJlYWtwb2ludHMgbWlnaHQgZ2V0IGFzc2lnbmVkIGRpZmZlcmVudCBudW1iZXJzLgorCisgICAgPj4+IGZyb20gYmRiIGltcG9ydCBCcmVha3BvaW50CisgICAgPj4+IEJyZWFrcG9pbnQubmV4dCA9IDEKKyAgICA+Pj4gQnJlYWtwb2ludC5icGxpc3QgPSB7fQorICAgID4+PiBCcmVha3BvaW50LmJwYnludW1iZXIgPSBbTm9uZV0KKworICAgIE5vdyB0ZXN0IHRoZSBicmVha3BvaW50IGNvbW1hbmRzLiAgTk9STUFMSVpFX1dISVRFU1BBQ0UgaXMgbmVlZGVkIGJlY2F1c2UKKyAgICB0aGUgYnJlYWtwb2ludCBsaXN0IG91dHB1dHMgYSB0YWIgZm9yIHRoZSAic3RvcCBvbmx5IiBhbmQgImlnbm9yZSBuZXh0IgorICAgIGxpbmVzLCB3aGljaCB3ZSBkb24ndCB3YW50IHRvIHB1dCBpbiBoZXJlLgorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsgICMgZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCisgICAgLi4uICAgICAnYnJlYWsgMycsCisgICAgLi4uICAgICAnZGlzYWJsZSAxJywKKyAgICAuLi4gICAgICdpZ25vcmUgMSAxMCcsCisgICAgLi4uICAgICAnY29uZGl0aW9uIDEgMSA8IDInLAorICAgIC4uLiAgICAgJ2JyZWFrIDQnLAorICAgIC4uLiAgICAgJ2JyZWFrIDQnLAorICAgIC4uLiAgICAgJ2JyZWFrJywKKyAgICAuLi4gICAgICdjbGVhciAzJywKKyAgICAuLi4gICAgICdicmVhaycsCisgICAgLi4uICAgICAnY29uZGl0aW9uIDEnLAorICAgIC4uLiAgICAgJ2VuYWJsZSAxJywKKyAgICAuLi4gICAgICdjbGVhciAxJywKKyAgICAuLi4gICAgICdjb21tYW5kcyAyJywKKyAgICAuLi4gICAgICdwcmludCA0MicsCisgICAgLi4uICAgICAnZW5kJywKKyAgICAuLi4gICAgICdjb250aW51ZScsICAjIHdpbGwgc3RvcCBhdCBicmVha3BvaW50IDIgKGxpbmUgNCkKKyAgICAuLi4gICAgICdjbGVhcicsICAgICAjIGNsZWFyIGFsbCEKKyAgICAuLi4gICAgICd5JywKKyAgICAuLi4gICAgICd0YnJlYWsgNScsCisgICAgLi4uICAgICAnY29udGludWUnLCAgIyB3aWxsIHN0b3AgYXQgdGVtcG9yYXJ5IGJyZWFrcG9pbnQKKyAgICAuLi4gICAgICdicmVhaycsICAgICAjIG1ha2Ugc3VyZSBicmVha3BvaW50IGlzIGdvbmUKKyAgICAuLi4gICAgICdjb250aW51ZScsCisgICAgLi4uIF0pOgorICAgIC4uLiAgICB0ZXN0X2Z1bmN0aW9uKCkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBwcmludCgxKQorICAgIChQZGIpIGJyZWFrIDMKKyAgICBCcmVha3BvaW50IDEgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPjozCisgICAgKFBkYikgZGlzYWJsZSAxCisgICAgKFBkYikgaWdub3JlIDEgMTAKKyAgICBXaWxsIGlnbm9yZSBuZXh0IDEwIGNyb3NzaW5ncyBvZiBicmVha3BvaW50IDEuCisgICAgKFBkYikgY29uZGl0aW9uIDEgMSA8IDIKKyAgICAoUGRiKSBicmVhayA0CisgICAgQnJlYWtwb2ludCAyIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NAorICAgIChQZGIpIGJyZWFrIDQKKyAgICBCcmVha3BvaW50IDMgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPjo0CisgICAgKFBkYikgYnJlYWsKKyAgICBOdW0gVHlwZSAgICAgICAgIERpc3AgRW5iICAgV2hlcmUKKyAgICAxICAgYnJlYWtwb2ludCAgIGtlZXAgbm8gICAgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPjozCisgICAgICAgICAgICBzdG9wIG9ubHkgaWYgMSA8IDIKKyAgICAgICAgICAgIGlnbm9yZSBuZXh0IDEwIGhpdHMKKyAgICAyICAgYnJlYWtwb2ludCAgIGtlZXAgeWVzICAgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPjo0CisgICAgMyAgIGJyZWFrcG9pbnQgICBrZWVwIHllcyAgIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NAorICAgIChQZGIpIGNsZWFyIDMKKyAgICBEZWxldGVkIGJyZWFrcG9pbnQgMworICAgIChQZGIpIGJyZWFrCisgICAgTnVtIFR5cGUgICAgICAgICBEaXNwIEVuYiAgIFdoZXJlCisgICAgMSAgIGJyZWFrcG9pbnQgICBrZWVwIG5vICAgIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46MworICAgICAgICAgICAgc3RvcCBvbmx5IGlmIDEgPCAyCisgICAgICAgICAgICBpZ25vcmUgbmV4dCAxMCBoaXRzCisgICAgMiAgIGJyZWFrcG9pbnQgICBrZWVwIHllcyAgIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NAorICAgIChQZGIpIGNvbmRpdGlvbiAxCisgICAgQnJlYWtwb2ludCAxIGlzIG5vdyB1bmNvbmRpdGlvbmFsLgorICAgIChQZGIpIGVuYWJsZSAxCisgICAgKFBkYikgY2xlYXIgMQorICAgIERlbGV0ZWQgYnJlYWtwb2ludCAxCisgICAgKFBkYikgY29tbWFuZHMgMgorICAgIChjb20pIHByaW50IDQyCisgICAgKGNvbSkgZW5kCisgICAgKFBkYikgY29udGludWUKKyAgICAxCisgICAgNDIKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT4oNCl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBwcmludCgyKQorICAgIChQZGIpIGNsZWFyCisgICAgQ2xlYXIgYWxsIGJyZWFrcz8geQorICAgIChQZGIpIHRicmVhayA1CisgICAgQnJlYWtwb2ludCA0IGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgMgorICAgIERlbGV0ZWQgYnJlYWtwb2ludCA0CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+KDUpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcHJpbnQoMykKKyAgICAoUGRiKSBicmVhaworICAgIChQZGIpIGNvbnRpbnVlCisgICAgMworICAgIDQKKyAgICAiIiIKKworCitkZWYgdGVzdF9wZGJfc2tpcF9tb2R1bGVzKCk6CisgICAgIiIiVGhpcyBpbGx1c3RyYXRlcyB0aGUgc2ltcGxlIGNhc2Ugb2YgbW9kdWxlIHNraXBwaW5nLgorCisgICAgPj4+IGRlZiBza2lwX21vZHVsZSgpOgorICAgIC4uLiAgICAgaW1wb3J0IHN0cmluZworICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihza2lwPVsnc3RyaW5nKiddKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgc3RyaW5nLmxvd2VyKCdGT08nKQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsKKyAgICAuLi4gICAgICdzdGVwJywKKyAgICAuLi4gICAgICdjb250aW51ZScsCisgICAgLi4uIF0pOgorICAgIC4uLiAgICAgc2tpcF9tb2R1bGUoKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNbMF0+KDQpc2tpcF9tb2R1bGUoKQorICAgIC0+IHN0cmluZy5sb3dlcignRk9PJykKKyAgICAoUGRiKSBzdGVwCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNbMF0+KDQpc2tpcF9tb2R1bGUoKS0+Tm9uZQorICAgIC0+IHN0cmluZy5sb3dlcignRk9PJykKKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCisKKyMgTW9kdWxlIGZvciB0ZXN0aW5nIHNraXBwaW5nIG9mIG1vZHVsZSB0aGF0IG1ha2VzIGEgY2FsbGJhY2sKK21vZCA9IGltcC5uZXdfbW9kdWxlKCdtb2R1bGVfdG9fc2tpcCcpCitleGVjICdkZWYgZm9vX3BvbnkoY2FsbGJhY2spOiB4ID0gMTsgY2FsbGJhY2soKTsgcmV0dXJuIE5vbmUnIGluIG1vZC5fX2RpY3RfXworCisKK2RlZiB0ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFjaygpOgorICAgICIiIlRoaXMgaWxsdXN0cmF0ZXMgc2tpcHBpbmcgb2YgbW9kdWxlcyB0aGF0IGNhbGwgaW50byBvdGhlciBjb2RlLgorCisgICAgPj4+IGRlZiBza2lwX21vZHVsZSgpOgorICAgIC4uLiAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgLi4uICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIoc2tpcD1bJ21vZHVsZV90b19za2lwKiddKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgbW9kLmZvb19wb255KGNhbGxiYWNrKQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsKKyAgICAuLi4gICAgICdzdGVwJywKKyAgICAuLi4gICAgICdzdGVwJywKKyAgICAuLi4gICAgICdzdGVwJywKKyAgICAuLi4gICAgICdzdGVwJywKKyAgICAuLi4gICAgICdzdGVwJywKKyAgICAuLi4gICAgICdjb250aW51ZScsCisgICAgLi4uIF0pOgorICAgIC4uLiAgICAgc2tpcF9tb2R1bGUoKQorICAgIC4uLiAgICAgcGFzcyAgIyBwcm92aWRlcyBzb21ldGhpbmcgdG8gInN0ZXAiIHRvCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3NraXBfbW9kdWxlc193aXRoX2NhbGxiYWNrWzBdPig1KXNraXBfbW9kdWxlKCkKKyAgICAtPiBtb2QuZm9vX3BvbnkoY2FsbGJhY2spCisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3NraXBfbW9kdWxlc193aXRoX2NhbGxiYWNrWzBdPigyKWNhbGxiYWNrKCkKKyAgICAtPiBkZWYgY2FsbGJhY2soKToKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3NraXBfbW9kdWxlc193aXRoX2NhbGxiYWNrWzBdPigzKWNhbGxiYWNrKCkKKyAgICAtPiByZXR1cm4gTm9uZQorICAgIChQZGIpIHN0ZXAKKyAgICAtLVJldHVybi0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3NraXBfbW9kdWxlc193aXRoX2NhbGxiYWNrWzBdPigzKWNhbGxiYWNrKCktPk5vbmUKKyAgICAtPiByZXR1cm4gTm9uZQorICAgIChQZGIpIHN0ZXAKKyAgICAtLVJldHVybi0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3NraXBfbW9kdWxlc193aXRoX2NhbGxiYWNrWzBdPig1KXNraXBfbW9kdWxlKCktPk5vbmUKKyAgICAtPiBtb2QuZm9vX3BvbnkoY2FsbGJhY2spCisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9za2lwX21vZHVsZXNfd2l0aF9jYWxsYmFja1sxXT4oMTApPG1vZHVsZT4oKQorICAgIC0+IHBhc3MgICMgcHJvdmlkZXMgc29tZXRoaW5nIHRvICJzdGVwIiB0bworICAgIChQZGIpIGNvbnRpbnVlCisgICAgIiIiCisKKworZGVmIHRlc3RfcGRiX2NvbnRpbnVlX2luX2JvdHRvbWZyYW1lKCk6CisgICAgIiIiVGVzdCB0aGF0ICJjb250aW51ZSIgYW5kICJuZXh0IiB3b3JrIHByb3Blcmx5IGluIGJvdHRvbSBmcmFtZSAoaXNzdWUgIzUyOTQpLgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiLCBzeXM7IGluc3QgPSBwZGIuUGRiKCkKKyAgICAuLi4gICAgIGluc3Quc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGluc3QuYm90ZnJhbWUgPSBzeXMuX2dldGZyYW1lKCkgICMgaGFja2VyeSB0byBnZXQgdGhlIHJpZ2h0IGJvdGZyYW1lCisgICAgLi4uICAgICBwcmludCgxKQorICAgIC4uLiAgICAgcHJpbnQoMikKKyAgICAuLi4gICAgIHByaW50KDMpCisgICAgLi4uICAgICBwcmludCg0KQorCisgICAgRmlyc3QsIG5lZWQgdG8gY2xlYXIgYmRiIHN0YXRlIHRoYXQgbWlnaHQgYmUgbGVmdCBvdmVyIGZyb20gcHJldmlvdXMgdGVzdHMuCisgICAgT3RoZXJ3aXNlLCB0aGUgbmV3IGJyZWFrcG9pbnRzIG1pZ2h0IGdldCBhc3NpZ25lZCBkaWZmZXJlbnQgbnVtYmVycy4KKworICAgID4+PiBmcm9tIGJkYiBpbXBvcnQgQnJlYWtwb2ludAorICAgID4+PiBCcmVha3BvaW50Lm5leHQgPSAxCisgICAgPj4+IEJyZWFrcG9pbnQuYnBsaXN0ID0ge30KKyAgICA+Pj4gQnJlYWtwb2ludC5icGJ5bnVtYmVyID0gW05vbmVdCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWworICAgIC4uLiAgICAgJ25leHQnLAorICAgIC4uLiAgICAgJ2JyZWFrIDcnLAorICAgIC4uLiAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gICAgICduZXh0JywKKyAgICAuLi4gICAgICdjb250aW51ZScsCisgICAgLi4uICAgICAnY29udGludWUnLAorICAgIC4uLiBdKToKKyAgICAuLi4gICAgdGVzdF9mdW5jdGlvbigpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2NvbnRpbnVlX2luX2JvdHRvbWZyYW1lWzBdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGluc3QuYm90ZnJhbWUgPSBzeXMuX2dldGZyYW1lKCkgICMgaGFja2VyeSB0byBnZXQgdGhlIHJpZ2h0IGJvdGZyYW1lCisgICAgKFBkYikgbmV4dAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9jb250aW51ZV9pbl9ib3R0b21mcmFtZVswXT4oNSl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBwcmludCgxKQorICAgIChQZGIpIGJyZWFrIDcKKyAgICBCcmVha3BvaW50IDEgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9jb250aW51ZV9pbl9ib3R0b21mcmFtZVswXT46NworICAgIChQZGIpIGNvbnRpbnVlCisgICAgMQorICAgIDIKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfY29udGludWVfaW5fYm90dG9tZnJhbWVbMF0+KDcpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcHJpbnQoMykKKyAgICAoUGRiKSBuZXh0CisgICAgMworICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9jb250aW51ZV9pbl9ib3R0b21mcmFtZVswXT4oOCl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBwcmludCg0KQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgNAorICAgICIiIgorCitjbGFzcyBNb2R1bGVJbml0VGVzdGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX2NvcnJlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBJbiBpc3N1ZSA3NzUwLCBpdCB3YXMgZm91bmQgdGhhdCBpZiB0aGUgZmlsZW5hbWUgaGFzIGEgc2VxdWVuY2UgdGhhdAorICAgICAgICByZXNvbHZlcyB0byBhbiBlc2NhcGUgY2hhcmFjdGVyIGluIGEgUHl0aG9uIHN0cmluZyAoc3VjaCBhcyBcdCksIGl0CisgICAgICAgIHdpbGwgYmUgdHJlYXRlZCBhcyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAgICAgICIiIgorICAgICAgICAjIHRoZSB0ZXN0X2ZuIG11c3QgY29udGFpbiBzb21ldGhpbmcgbGlrZSBcdAorICAgICAgICAjIG9uIFdpbmRvd3MsIHRoaXMgd2lsbCBjcmVhdGUgJ3Rlc3RfbW9kLnB5JyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisgICAgICAgICMgb24gVW5peCwgdGhpcyB3aWxsIGNyZWF0ZSAnLlx0ZXN0X21vZC5weScgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorICAgICAgICB0ZXN0X2ZuID0gJy5cXHRlc3RfbW9kLnB5JworICAgICAgICBjb2RlID0gJ3ByaW50KCJ0ZXN0aW5nIHBkYiIpJworICAgICAgICB3aXRoIG9wZW4odGVzdF9mbiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShjb2RlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MucmVtb3ZlLCB0ZXN0X2ZuKQorICAgICAgICBjbWQgPSBbc3lzLmV4ZWN1dGFibGUsICctbScsICdwZGInLCB0ZXN0X2ZuLF0KKyAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLAorICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICkKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwcm9jLmNvbW11bmljYXRlKCdxdWl0XG4nKQorICAgICAgICBzZWxmLmFzc2VydEluKGNvZGUsIHN0ZG91dCwgInBkYiBtdW5nZWQgdGhlIGZpbGVuYW1lIikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3BkYgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3BkYiwgdmVyYm9zaXR5PVRydWUpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgUGRiVGVzdENhc2UsCisgICAgICAgIE1vZHVsZUluaXRUZXN0ZXIpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BlZXBob2xlci5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BlZXBob2xlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTA1ZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5CkBAIC0wLDAgKzEsMjQ0IEBACitpbXBvcnQgZGlzCitpbXBvcnQgc3lzCitmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCB1bml0dGVzdAorCitkZWYgZGlzYXNzZW1ibGUoZnVuYyk6CisgICAgZiA9IFN0cmluZ0lPKCkKKyAgICB0bXAgPSBzeXMuc3Rkb3V0CisgICAgc3lzLnN0ZG91dCA9IGYKKyAgICBkaXMuZGlzKGZ1bmMpCisgICAgc3lzLnN0ZG91dCA9IHRtcAorICAgIHJlc3VsdCA9IGYuZ2V0dmFsdWUoKQorICAgIGYuY2xvc2UoKQorICAgIHJldHVybiByZXN1bHQKKworZGVmIGRpc19zaW5nbGUobGluZSk6CisgICAgcmV0dXJuIGRpc2Fzc2VtYmxlKGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKSkKKworY2xhc3MgVGVzdFRyYW5mb3Jtcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91bm90KHNlbGYpOgorICAgICAgICAjIFVOQVJZX05PVCBQT1BfSlVNUF9JRl9GQUxTRSAgLS0+ICBQT1BfSlVNUF9JRl9UUlVFCisgICAgICAgIGRlZiB1bm90KHgpOgorICAgICAgICAgICAgaWYgbm90IHggPT0gMjoKKyAgICAgICAgICAgICAgICBkZWwgeAorICAgICAgICBhc20gPSBkaXNhc3NlbWJsZSh1bm90KQorICAgICAgICBmb3IgZWxlbSBpbiAoJ1VOQVJZX05PVCcsICdQT1BfSlVNUF9JRl9GQUxTRScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1BPUF9KVU1QX0lGX1RSVUUnLCBhc20pCisKKyAgICBkZWYgdGVzdF9lbGltX2ludmVyc2lvbl9vZl9pc19vcl9pbihzZWxmKToKKyAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAorICAgICAgICAgICAgKCdub3QgYSBpcyBiJywgJyhpcyBub3QpJywpLAorICAgICAgICAgICAgKCdub3QgYSBpbiBiJywgJyhub3QgaW4pJywpLAorICAgICAgICAgICAgKCdub3QgYSBpcyBub3QgYicsICcoaXMpJywpLAorICAgICAgICAgICAgKCdub3QgYSBub3QgaW4gYicsICcoaW4pJywpLAorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorCisgICAgZGVmIHRlc3Rfbm9uZV9hc19jb25zdGFudChzZWxmKToKKyAgICAgICAgIyBMT0FEX0dMT0JBTCBOb25lICAtLT4gIExPQURfQ09OU1QgTm9uZQorICAgICAgICBkZWYgZih4KToKKyAgICAgICAgICAgIE5vbmUKKyAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCisgICAgICAgIGZvciBlbGVtIGluICgnTE9BRF9HTE9CQUwnLCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGFzbSkKKyAgICAgICAgZm9yIGVsZW0gaW4gKCdMT0FEX0NPTlNUJywgJyhOb25lKScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAnQWRkaW5nIGEgZG9jc3RyaW5nIG1hZGUgdGhpcyB0ZXN0IGZhaWwgaW4gUHkyLjUuMCcKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0xPQURfQ09OU1QnLCBkaXNhc3NlbWJsZShmKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTE9BRF9HTE9CQUwnLCBkaXNhc3NlbWJsZShmKSkKKworICAgIGRlZiB0ZXN0X3doaWxlX29uZShzZWxmKToKKyAgICAgICAgIyBTa2lwIG92ZXI6ICBMT0FEX0NPTlNUIHRydWVjb25zdCAgUE9QX0pVTVBfSUZfRkFMU0UgeHgKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmV0dXJuIGxpc3QKKyAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKKyAgICAgICAgZm9yIGVsZW0gaW4gKCdMT0FEX0NPTlNUJywgJ1BPUF9KVU1QX0lGX0ZBTFNFJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGFzbSkKKyAgICAgICAgZm9yIGVsZW0gaW4gKCdKVU1QX0FCU09MVVRFJywpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisKKyAgICBkZWYgdGVzdF9wYWNrX3VucGFjayhzZWxmKToKKyAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAorICAgICAgICAgICAgKCdhLCA9IGEsJywgJ0xPQURfQ09OU1QnLCksCisgICAgICAgICAgICAoJ2EsIGIgPSBhLCBiJywgJ1JPVF9UV08nLCksCisgICAgICAgICAgICAoJ2EsIGIsIGMgPSBhLCBiLCBjJywgJ1JPVF9USFJFRScsKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX1RVUExFJywgYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVU5QQUNLX1RVUExFJywgYXNtKQorCisgICAgZGVmIHRlc3RfZm9sZGluZ19vZl90dXBsZXNfb2ZfY29uc3RhbnRzKHNlbGYpOgorICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCisgICAgICAgICAgICAoJ2EgPSAxLDIsMycsICcoKDEsIDIsIDMpKScpLAorICAgICAgICAgICAgKCcoImEiLCJiIiwiYyIpJywgIigoJ2EnLCAnYicsICdjJykpIiksCisgICAgICAgICAgICAoJ2EsYixjID0gMSwyLDMnLCAnKCgxLCAyLCAzKSknKSwKKyAgICAgICAgICAgICgnKE5vbmUsIDEsIE5vbmUpJywgJygoTm9uZSwgMSwgTm9uZSkpJyksCisgICAgICAgICAgICAoJygoMSwgMiksIDMsIDQpJywgJygoKDEsIDIpLCAzLCA0KSknKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX1RVUExFJywgYXNtKQorCisgICAgICAgICMgQnVnIDEwNTM4MTk6ICBUdXBsZSBvZiBjb25zdGFudHMgbWlzaWRlbnRpZmllZCB3aGVuIHByZXNlbnRlZCB3aXRoOgorICAgICAgICAjIC4gLiAuIG9wY29kZV93aXRoX2FyZyAxMDAgICB1bmFyeV9vcGNvZGUgICBCVUlMRF9UVVBMRSAxICAuIC4gLgorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgd291bGQgc2VnZmF1bHQgdXBvbiBjb21waWxhdGlvbgorICAgICAgICBkZWYgY3JhdGVyKCk6CisgICAgICAgICAgICAoflsKKyAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LAorICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksCisgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwKKyAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LAorICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksCisgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwKKyAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LAorICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksCisgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwKKyAgICAgICAgICAgICAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LAorICAgICAgICAgICAgXSwpCisKKyAgICBkZWYgdGVzdF9mb2xkaW5nX29mX2Jpbm9wc19vbl9jb25zdGFudHMoc2VsZik6CisgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKKyAgICAgICAgICAgICgnYSA9IDIrMys0JywgJyg5KScpLCAgICAgICAgICAgICAgICAgICAjIGNoYWluZWQgZm9sZAorICAgICAgICAgICAgKCciQCIqNCcsICIoJ0BAQEAnKSIpLCAgICAgICAgICAgICAgICAgICMgY2hlY2sgc3RyaW5nIG9wcworICAgICAgICAgICAgKCdhPSJhYmMiICsgImRlZiInLCAiKCdhYmNkZWYnKSIpLCAgICAgICMgY2hlY2sgc3RyaW5nIG9wcworICAgICAgICAgICAgKCdhID0gMyoqNCcsICcoODEpJyksICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IHBvd2VyCisgICAgICAgICAgICAoJ2EgPSAzKjQnLCAnKDEyKScpLCAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgbXVsdGlwbHkKKyAgICAgICAgICAgICgnYSA9IDEzLy80JywgJygzKScpLCAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBmbG9vciBkaXZpZGUKKyAgICAgICAgICAgICgnYSA9IDE0JTQnLCAnKDIpJyksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBtb2R1bG8KKyAgICAgICAgICAgICgnYSA9IDIrMycsICcoNSknKSwgICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBhZGQKKyAgICAgICAgICAgICgnYSA9IDEzLTQnLCAnKDkpJyksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBzdWJ0cmFjdAorICAgICAgICAgICAgKCdhID0gKDEyLDEzKVsxXScsICcoMTMpJyksICAgICAgICAgICAgICMgYmluYXJ5IHN1YnNjcgorICAgICAgICAgICAgKCdhID0gMTMgPDwgMicsICcoNTIpJyksICAgICAgICAgICAgICAgICMgYmluYXJ5IGxzaGlmdAorICAgICAgICAgICAgKCdhID0gMTMgPj4gMicsICcoMyknKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IHJzaGlmdAorICAgICAgICAgICAgKCdhID0gMTMgJiA3JywgJyg1KScpLCAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGFuZAorICAgICAgICAgICAgKCdhID0gMTMgXiA3JywgJygxMCknKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IHhvcgorICAgICAgICAgICAgKCdhID0gMTMgfCA3JywgJygxNSknKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IG9yCisgICAgICAgICAgICApOgorICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV8nLCBhc20pCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCB1bmZvbGRhYmxlcyBhcmUgc2tpcHBlZAorICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCdhPTIrImIiJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignKDIpJywgYXNtKQorICAgICAgICBzZWxmLmFzc2VydEluKCIoJ2InKSIsIGFzbSkKKworICAgICAgICAjIFZlcmlmeSB0aGF0IGxhcmdlIHNlcXVlbmNlcyBkbyBub3QgcmVzdWx0IGZyb20gZm9sZGluZworICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCdhPSJ4IioxMDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignKDEwMDApJywgYXNtKQorCisgICAgZGVmIHRlc3RfYmluYXJ5X3N1YnNjcl9vbl91bmljb2RlKHNlbGYpOgorICAgICAgICAjIHVuaWNvZGUgc3RyaW5ncyBkb24ndCBnZXQgb3B0aW1pemVkCisgICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJ3UiZm9vIlswXScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIih1J2YnKSIsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignQklOQVJZX1NVQlNDUicsIGFzbSkKKyAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgndSJcdTAwNjFcdWZmZmYiWzFdJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiKHUnXFx1ZmZmZicpIiwgYXNtKQorICAgICAgICBzZWxmLmFzc2VydEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQorCisgICAgICAgICMgb3V0IG9mIHJhbmdlCisgICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJ3UiZnV1IlsxMF0nKQorICAgICAgICBzZWxmLmFzc2VydEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQorICAgICAgICAjIG5vbi1CTVAgY2hhciAoc2VlICM1MDU3KQorICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCd1IlxVMDAwMTIzNDUiWzBdJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignQklOQVJZX1NVQlNDUicsIGFzbSkKKyAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgndSJcVTAwMDEyMzQ1YWJjZGVmIlszXScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0JJTkFSWV9TVUJTQ1InLCBhc20pCisKKworICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2ZfdW5hcnlvcHNfb25fY29uc3RhbnRzKHNlbGYpOgorICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCisgICAgICAgICAgICAoJ2AxYCcsICIoJzEnKSIpLCAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBjb252ZXJ0CisgICAgICAgICAgICAoJy0wLjUnLCAnKC0wLjUpJyksICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBuZWdhdGl2ZQorICAgICAgICAgICAgKCd+LTInLCAnKDEpJyksICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgaW52ZXJ0CisgICAgICAgICk6CisgICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSwgYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVU5BUllfJywgYXNtKQorCisgICAgICAgICMgVmVyaWZ5IHRoYXQgdW5mb2xkYWJsZXMgYXJlIHNraXBwZWQKKyAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAorICAgICAgICAgICAgKCctImFiYyInLCAiKCdhYmMnKSIpLCAgICAgICAgICAgICAgICAgICMgdW5hcnkgbmVnYXRpdmUKKyAgICAgICAgICAgICgnfiJhYmMiJywgIignYWJjJykiKSwgICAgICAgICAgICAgICAgICAjIHVuYXJ5IGludmVydAorICAgICAgICApOgorICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1VOQVJZXycsIGFzbSkKKworICAgIGRlZiB0ZXN0X2VsaW1fZXh0cmFfcmV0dXJuKHNlbGYpOgorICAgICAgICAjIFJFVFVSTiBMT0FEX0NPTlNUIE5vbmUgUkVUVVJOICAtLT4gIFJFVFVSTgorICAgICAgICBkZWYgZih4KToKKyAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0xPQURfQ09OU1QnLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJyhOb25lKScsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDEpCisKKyAgICBkZWYgdGVzdF9lbGltX2p1bXBfdG9fcmV0dXJuKHNlbGYpOgorICAgICAgICAjIEpVTVBfRk9SV0FSRCB0byBSRVRVUk4gLS0+ICBSRVRVUk4KKyAgICAgICAgZGVmIGYoY29uZCwgdHJ1ZV92YWx1ZSwgZmFsc2VfdmFsdWUpOgorICAgICAgICAgICAgcmV0dXJuIHRydWVfdmFsdWUgaWYgY29uZCBlbHNlIGZhbHNlX3ZhbHVlCisgICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfRk9SV0FSRCcsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9BQlNPTFVURScsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDIpCisKKyAgICBkZWYgdGVzdF9lbGltX2p1bXBfYWZ0ZXJfcmV0dXJuMShzZWxmKToKKyAgICAgICAgIyBFbGltaW5hdGUgZGVhZCBjb2RlOiBqdW1wcyBpbW1lZGlhdGVseSBhZnRlciByZXR1cm5zIGNhbid0IGJlIHJlYWNoZWQKKyAgICAgICAgZGVmIGYoY29uZDEsIGNvbmQyKToKKyAgICAgICAgICAgIGlmIGNvbmQxOiByZXR1cm4gMQorICAgICAgICAgICAgaWYgY29uZDI6IHJldHVybiAyCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHJldHVybiAzCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGlmIGNvbmQxOiByZXR1cm4gNAorICAgICAgICAgICAgICAgIHJldHVybiA1CisgICAgICAgICAgICByZXR1cm4gNgorICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfQUJTT0xVVEUnLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCA2KQorCisgICAgZGVmIHRlc3RfZWxpbV9qdW1wX2FmdGVyX3JldHVybjIoc2VsZik6CisgICAgICAgICMgRWxpbWluYXRlIGRlYWQgY29kZToganVtcHMgaW1tZWRpYXRlbHkgYWZ0ZXIgcmV0dXJucyBjYW4ndCBiZSByZWFjaGVkCisgICAgICAgIGRlZiBmKGNvbmQxLCBjb25kMik6CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGlmIGNvbmQxOiByZXR1cm4gNAorICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCisgICAgICAgICMgVGhlcmUgc2hvdWxkIGJlIG9uZSBqdW1wIGZvciB0aGUgd2hpbGUgbG9vcC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnSlVNUF9BQlNPTFVURScpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMikKKworCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgaW1wb3J0IHN5cworICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisgICAgdGVzdF9jbGFzc2VzID0gKFRlc3RUcmFuZm9ybXMsKQorCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygKKyAgICAgICAgICAgICgiYmFja3F1b3RlIG5vdCBzdXBwb3J0ZWQiLCBTeW50YXhXYXJuaW5nKSk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKworICAgICAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKKyAgICAgICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6CisgICAgICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oY291bnRzKSk6CisgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQorICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgICAgIHByaW50IGNvdW50cworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wZXAyNDcucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wZXAyNDcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIzZDMzMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BlcDI0Ny5weQpAQCAtMCwwICsxLDc0IEBACisiIiIKK1Rlc3Qgc3VpdGUgdG8gY2hlY2sgY29tcGlsYW5jZSB3aXRoIFBFUCAyNDcsIHRoZSBzdGFuZGFyZCBBUEkKK2ZvciBoYXNoaW5nIGFsZ29yaXRobXMKKyIiIgorCitpbXBvcnQgd2FybmluZ3MKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnLCAndGhlIG1kNSBtb2R1bGUgaXMgZGVwcmVjYXRlZC4qJywKKyAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKK3dhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnLCAndGhlIHNoYSBtb2R1bGUgaXMgZGVwcmVjYXRlZC4qJywKKyAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKworaW1wb3J0IGhtYWMKK2ltcG9ydCBtZDUKK2ltcG9ydCBzaGEKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBQZXAyNDdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBjaGVja19tb2R1bGUoc2VsZiwgbW9kdWxlLCBrZXk9Tm9uZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ2RpZ2VzdF9zaXplJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2R1bGUuZGlnZXN0X3NpemUgaXMgTm9uZSBvciBtb2R1bGUuZGlnZXN0X3NpemUgPiAwKQorCisgICAgICAgIGlmIG5vdCBrZXkgaXMgTm9uZToKKyAgICAgICAgICAgIG9iajEgPSBtb2R1bGUubmV3KGtleSkKKyAgICAgICAgICAgIG9iajIgPSBtb2R1bGUubmV3KGtleSwgJ3N0cmluZycpCisKKyAgICAgICAgICAgIGgxID0gbW9kdWxlLm5ldyhrZXksICdzdHJpbmcnKS5kaWdlc3QoKQorICAgICAgICAgICAgb2JqMyA9IG1vZHVsZS5uZXcoa2V5KQorICAgICAgICAgICAgb2JqMy51cGRhdGUoJ3N0cmluZycpCisgICAgICAgICAgICBoMiA9IG9iajMuZGlnZXN0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9iajEgPSBtb2R1bGUubmV3KCkKKyAgICAgICAgICAgIG9iajIgPSBtb2R1bGUubmV3KCdzdHJpbmcnKQorCisgICAgICAgICAgICBoMSA9IG1vZHVsZS5uZXcoJ3N0cmluZycpLmRpZ2VzdCgpCisgICAgICAgICAgICBvYmozID0gbW9kdWxlLm5ldygpCisgICAgICAgICAgICBvYmozLnVwZGF0ZSgnc3RyaW5nJykKKyAgICAgICAgICAgIGgyID0gb2JqMy5kaWdlc3QoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDEsIGgyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG9iajEsICdkaWdlc3Rfc2l6ZScpKQorCisgICAgICAgIGlmIG5vdCBtb2R1bGUuZGlnZXN0X3NpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqMS5kaWdlc3Rfc2l6ZSwgbW9kdWxlLmRpZ2VzdF9zaXplKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqMS5kaWdlc3Rfc2l6ZSwgbGVuKGgxKSkKKyAgICAgICAgb2JqMS51cGRhdGUoJ3N0cmluZycpCisgICAgICAgIG9ial9jb3B5ID0gb2JqMS5jb3B5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmoxLmRpZ2VzdCgpLCBvYmpfY29weS5kaWdlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmoxLmhleGRpZ2VzdCgpLCBvYmpfY29weS5oZXhkaWdlc3QoKSkKKworICAgICAgICBkaWdlc3QsIGhleGRpZ2VzdCA9IG9iajEuZGlnZXN0KCksIG9iajEuaGV4ZGlnZXN0KCkKKyAgICAgICAgaGQyID0gIiIKKyAgICAgICAgZm9yIGJ5dGUgaW4gZGlnZXN0OgorICAgICAgICAgICAgaGQyICs9ICclMDJ4JyAlIG9yZChieXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhkMiwgaGV4ZGlnZXN0KQorCisgICAgZGVmIHRlc3RfbWQ1KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX21vZHVsZShtZDUpCisKKyAgICBkZWYgdGVzdF9zaGEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbW9kdWxlKHNoYSkKKworICAgIGRlZiB0ZXN0X2htYWMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbW9kdWxlKGhtYWMsIGtleT0nYWJjJykKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoUGVwMjQ3VGVzdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcGVwMjYzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcGVwMjYzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyODY0NjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wZXAyNjMucHkKQEAgLTAsMCArMSw0OCBAQAorIyAtKi0gY29kaW5nOiBrb2k4LXIgLSotCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgUEVQMjYzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9wZXAyNjMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1IvDJ1M/OIi5lbmNvZGUoInV0Zi04IiksCisgICAgICAgICAgICAnXHhkMFx4OWZceGQwXHhiOFx4ZDFceDgyXHhkMFx4YmVceGQwXHhiZCcKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdSJc8CIuZW5jb2RlKCJ1dGYtOCIpLAorICAgICAgICAgICAgJ1xcXHhkMFx4OWYnCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2NvbXBpbGVzdHJpbmcoc2VsZik6CisgICAgICAgICMgc2VlICMxODgyCisgICAgICAgIGMgPSBjb21waWxlKCJcbiMgY29kaW5nOiB1dGYtOFxudSA9IHUnXHhjM1x4YjMnXG4iLCAiZHVtbXkiLCAiZXhlYyIpCisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjIGMgaW4gZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ3UnXSwgdSdceGYzJykKKworCisgICAgZGVmIHRlc3RfaXNzdWUzMjk3KHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZSgiYSwgYiA9ICdcVTAwMDEwMTBGJywgJ1xcVTAwMDEwMTBGJyIsICJkdW1teSIsICJleGVjIikKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGV4ZWMoYywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sIGRbJ2InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZFsnYSddKSwgbGVuKGRbJ2InXSkpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTc4MjAoc2VsZik6CisgICAgICAgICMgRW5zdXJlIHRoYXQgY2hlY2tfYm9tKCkgcmVzdG9yZXMgYWxsIGJ5dGVzIGluIHRoZSByaWdodCBvcmRlciBpZgorICAgICAgICAjIGNoZWNrX2JvbSgpIGZhaWxzIGluIHB5ZGVidWcgbW9kZTogYSBidWZmZXIgc3RhcnRzIHdpdGggdGhlIGZpcnN0CisgICAgICAgICMgYnl0ZSBvZiBhIHZhbGlkIEJPTSwgYnV0IG5leHQgYnl0ZXMgYXJlIGRpZmZlcmVudAorCisgICAgICAgICMgb25lIGJ5dGUgaW4gY29tbW9uIHdpdGggdGhlIFVURi0xNi1MRSBCT00KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsICdceGZmXHgyMCcpCisKKyAgICAgICAgIyB0d28gYnl0ZXMgaW4gY29tbW9uIHdpdGggdGhlIFVURi04IEJPTQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgJ1x4ZWZceGJiXHgyMCcpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFBFUDI2M1Rlc3QpCisKK2lmIF9fbmFtZV9fPT0iX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wZXAyNzcucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wZXAyNzcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJiODJkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BlcDI3Ny5weQpAQCAtMCwwICsxLDIxMCBAQAorIyBUZXN0IHRoZSBVbmljb2RlIHZlcnNpb25zIG9mIG5vcm1hbCBmaWxlIGZ1bmN0aW9ucworIyBvcGVuLCBvcy5vcGVuLCBvcy5zdGF0LiBvcy5saXN0ZGlyLCBvcy5yZW5hbWUsIG9zLnJlbW92ZSwgb3MubWtkaXIsIG9zLmNoZGlyLCBvcy5ybWRpcgoraW1wb3J0IHN5cywgb3MsIHVuaXR0ZXN0Citmcm9tIHVuaWNvZGVkYXRhIGltcG9ydCBub3JtYWxpemUKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2ZpbGVuYW1lcyA9IFsKKyAgICAnMV9hYmMnLAorICAgIHUnMl9hc2NpaScsCisgICAgdSczX0dyXHhmY1x4ZGYtR290dCcsCisgICAgdSc0X1x1MDM5M1x1MDNiNVx1MDNiOVx1MDNhYy1cdTAzYzNcdTAzYjFcdTAzYzInLAorICAgIHUnNV9cdTA0MTdcdTA0MzRcdTA0NDBcdTA0MzBcdTA0MzJcdTA0NDFcdTA0NDJcdTA0MzJcdTA0NDNcdTA0MzlcdTA0NDJcdTA0MzUnLAorICAgIHUnNl9cdTMwNmJcdTMwN2RcdTMwOTMnLAorICAgIHUnN19cdTA1ZDRcdTA1ZTlcdTA1ZTdcdTA1ZTZcdTA1ZTVcdTA1ZTEnLAorICAgIHUnOF9cdTY2ZThcdTY2ZTlcdTY2ZWInLAorICAgIHUnOV9cdTY2ZThcdTA1ZTlcdTMwOTNcdTA0MzRcdTAzOTNceGRmJywKKyAgICAjIFNwZWNpZmljIGNvZGUgcG9pbnRzOiBmbiwgTkZDKGZuKSBhbmQgTkZLQyhmbikgYWxsIGRpZmZlcmVudHMKKyAgICB1JzEwX1x1MWZlZVx1MWZmZCcsCisgICAgXQorCisjIE1hYyBPUyBYIGRlY29tcG9zZXMgVW5pY29kZSBuYW1lcywgdXNpbmcgTm9ybWFsIEZvcm0gRC4KKyMgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vbWFjL2xpYnJhcnkvcWEvcWEyMDAxL3FhMTE3My5odG1sCisjICJIb3dldmVyLCBtb3N0IHZvbHVtZSBmb3JtYXRzIGRvIG5vdCBmb2xsb3cgdGhlIGV4YWN0IHNwZWNpZmljYXRpb24gZm9yCisjIHRoZXNlIG5vcm1hbCBmb3Jtcy4gIEZvciBleGFtcGxlLCBIRlMgUGx1cyB1c2VzIGEgdmFyaWFudCBvZiBOb3JtYWwgRm9ybSBECisjIGluIHdoaWNoIFUrMjAwMCB0aHJvdWdoIFUrMkZGRiwgVStGOTAwIHRocm91Z2ggVStGQUZGLCBhbmQgVSsyRjgwMCB0aHJvdWdoCisjIFUrMkZBRkYgYXJlIG5vdCBkZWNvbXBvc2VkLiIKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzoKKyAgICBmaWxlbmFtZXMuZXh0ZW5kKFsKKyAgICAgICAgIyBTcGVjaWZpYyBjb2RlIHBvaW50czogTkZDKGZuKSwgTkZEKGZuKSwgTkZLQyhmbikgYW5kIE5GS0QoZm4pIGFsbCBkaWZmZXJlbnRzCisgICAgICAgIHUnMTFfXHUwMzg1XHUwM2QzXHUwM2Q0JywKKyAgICAgICAgdScxMl9cdTAwYThcdTAzMDFcdTAzZDJcdTAzMDFcdTAzZDJcdTAzMDgnLCAgICAjID09IE5GRCh1J1x1MDM4NVx1MDNkM1x1MDNkNCcpCisgICAgICAgIHUnMTNfXHUwMDIwXHUwMzA4XHUwMzAxXHUwMzhlXHUwM2FiJywgICAgICAgICAgIyA9PSBORktDKHUnXHUwMzg1XHUwM2QzXHUwM2Q0JykKKyAgICAgICAgdScxNF9cdTFlOWJcdTFmYzFcdTFmY2RcdTFmY2VcdTFmY2ZcdTFmZGRcdTFmZGVcdTFmZGZcdTFmZWQnLAorCisgICAgICAgICMgU3BlY2lmaWMgY29kZSBwb2ludHM6IGZuLCBORkMoZm4pIGFuZCBORktDKGZuKSBhbGwgZGlmZmVyZW50cworICAgICAgICB1JzE1X1x1MWZlZVx1MWZmZFx1ZmFkMScsCisgICAgICAgIHUnMTZfXHUyMDAwXHUyMDAwXHUyMDAwQScsCisgICAgICAgIHUnMTdfXHUyMDAxXHUyMDAxXHUyMDAxQScsCisgICAgICAgIHUnMThfXHUyMDAzXHUyMDAzXHUyMDAzQScsICMgPT0gTkZDKHUnXHUyMDAxXHUyMDAxXHUyMDAxQScpCisgICAgICAgIHUnMTlfXHUwMDIwXHUwMDIwXHUwMDIwQScsICMgdSdcdTAwMjAnID09IHUnICcgPT0gTkZLQyh1J1x1MjAwMCcpID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBORktDKHUnXHUyMDAxJykgPT0gTkZLQyh1J1x1MjAwMycpCitdKQorCisKKyMgSXMgaXQgVW5pY29kZS1mcmllbmRseT8KK2lmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzOgorICAgIGZzZW5jb2RpbmcgPSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkgb3Igc3lzLmdldGRlZmF1bHRlbmNvZGluZygpCisgICAgdHJ5OgorICAgICAgICBmb3IgbmFtZSBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICBuYW1lLmVuY29kZShmc2VuY29kaW5nKQorICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvbmx5IE5UKyBhbmQgc3lzdGVtcyB3aXRoICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuaWNvZGUtZnJpZW5kbHkgZmlsZXN5c3RlbSBlbmNvZGluZyIpCisKKworIyBEZXN0cm95IGRpcmVjdG9yeSBkaXJuYW1lIGFuZCBhbGwgZmlsZXMgdW5kZXIgaXQsIHRvIG9uZSBsZXZlbC4KK2RlZiBkZWx0cmVlKGRpcm5hbWUpOgorICAgICMgRG9uJ3QgaGlkZSBsZWdpdGltYXRlIGVycm9yczogIGlmIG9uZSBvZiB0aGVzZSBzdWNrZXJzIGV4aXN0cywgaXQncworICAgICMgYW4gZXJyb3IgaWYgd2UgY2FuJ3QgcmVtb3ZlIGl0LgorICAgIGlmIG9zLnBhdGguZXhpc3RzKGRpcm5hbWUpOgorICAgICAgICAjIG11c3QgcGFzcyB1bmljb2RlIHRvIG9zLmxpc3RkaXIoKSBzbyB3ZSBnZXQgYmFjayB1bmljb2RlIHJlc3VsdHMuCisgICAgICAgIGZvciBmbmFtZSBpbiBvcy5saXN0ZGlyKHVuaWNvZGUoZGlybmFtZSkpOgorICAgICAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbihkaXJuYW1lLCBmbmFtZSkpCisgICAgICAgIG9zLnJtZGlyKGRpcm5hbWUpCisKKworY2xhc3MgVW5pY29kZUZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZmlsZXMgPSBzZXQoZmlsZW5hbWVzKQorICAgIG5vcm1hbF9mb3JtID0gTm9uZQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5ta2Rpcih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmlsZXMgPSBzZXQoKQorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLmZpbGVzOgorICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBzZWxmLm5vcm0obmFtZSkpCisgICAgICAgICAgICB3aXRoIG9wZW4obmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoKG5hbWUrJ1xuJykuZW5jb2RlKCJ1dGYtOCIpKQorICAgICAgICAgICAgb3Muc3RhdChuYW1lKQorICAgICAgICAgICAgZmlsZXMuYWRkKG5hbWUpCisgICAgICAgIHNlbGYuZmlsZXMgPSBmaWxlcworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBkZWx0cmVlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgbm9ybShzZWxmLCBzKToKKyAgICAgICAgaWYgc2VsZi5ub3JtYWxfZm9ybSBhbmQgaXNpbnN0YW5jZShzLCB1bmljb2RlKToKKyAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUoc2VsZi5ub3JtYWxfZm9ybSwgcykKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBfYXBwbHlfZmFpbHVyZShzZWxmLCBmbiwgZmlsZW5hbWUsIGV4cGVjdGVkX2V4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZm5faW5fZXhjZXB0aW9uID0gVHJ1ZSk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZXhwZWN0ZWRfZXhjZXB0aW9uKSBhcyBjOgorICAgICAgICAgICAgZm4oZmlsZW5hbWUpCisgICAgICAgIGV4Y19maWxlbmFtZSA9IGMuZXhjZXB0aW9uLmZpbGVuYW1lCisgICAgICAgICMgdGhlICJmaWxlbmFtZSIgZXhjZXB0aW9uIGF0dHJpYnV0ZSBtYXkgYmUgZW5jb2RlZAorICAgICAgICBpZiBpc2luc3RhbmNlKGV4Y19maWxlbmFtZSwgc3RyKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKKyAgICAgICAgaWYgY2hlY2tfZm5faW5fZXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGNfZmlsZW5hbWUsIGZpbGVuYW1lLCAiRnVuY3Rpb24gJyVzKCVyKSBmYWlsZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aCBiYWQgZmlsZW5hbWUgaW4gdGhlIGV4Y2VwdGlvbjogJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZuLl9fbmFtZV9fLCBmaWxlbmFtZSwgZXhjX2ZpbGVuYW1lKSkKKworICAgIGRlZiB0ZXN0X2ZhaWx1cmVzKHNlbGYpOgorICAgICAgICAjIFBhc3Mgbm9uLWV4aXN0aW5nIFVuaWNvZGUgZmlsZW5hbWVzIGFsbCBvdmVyIHRoZSBwbGFjZS4KKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5maWxlczoKKyAgICAgICAgICAgIG5hbWUgPSAibm90XyIgKyBuYW1lCisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9wZW4sIG5hbWUsIElPRXJyb3IpCisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9zLnN0YXQsIG5hbWUsIE9TRXJyb3IpCisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9zLmNoZGlyLCBuYW1lLCBPU0Vycm9yKQorICAgICAgICAgICAgc2VsZi5fYXBwbHlfZmFpbHVyZShvcy5ybWRpciwgbmFtZSwgT1NFcnJvcikKKyAgICAgICAgICAgIHNlbGYuX2FwcGx5X2ZhaWx1cmUob3MucmVtb3ZlLCBuYW1lLCBPU0Vycm9yKQorICAgICAgICAgICAgIyBsaXN0ZGlyIG1heSBhcHBlbmQgYSB3aWxkY2FyZCB0byB0aGUgZmlsZW5hbWUsIHNvIGRvbnQgY2hlY2sKKyAgICAgICAgICAgIHNlbGYuX2FwcGx5X2ZhaWx1cmUob3MubGlzdGRpciwgbmFtZSwgT1NFcnJvciwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9vcGVuKHNlbGYpOgorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLmZpbGVzOgorICAgICAgICAgICAgZiA9IG9wZW4obmFtZSwgJ3cnKQorICAgICAgICAgICAgZi53cml0ZSgobmFtZSsnXG4nKS5lbmNvZGUoInV0Zi04IikpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnN0YXQobmFtZSkKKworICAgICMgU2tpcCB0aGUgdGVzdCBvbiBkYXJ3aW4sIGJlY2F1c2UgZGFyd2luIGRvZXMgbm9ybWFsaXplIHRoZSBmaWxlbmFtZSB0bworICAgICMgTkZEIChhIHZhcmlhbnQgb2YgVW5pY29kZSBORkQgZm9ybSkuIE5vcm1hbGl6ZSB0aGUgZmlsZW5hbWUgdG8gTkZDLCBORktDLAorICAgICMgTkZLRCBpbiBQeXRob24gaXMgdXNlbGVzcywgYmVjYXVzZSBkYXJ3aW4gd2lsbCBub3JtYWxpemUgaXQgbGF0ZXIgYW5kIHNvCisgICAgIyBvcGVuKCksIG9zLnN0YXQoKSwgZXRjLiBkb24ndCByYWlzZSBhbnkgZXhjZXB0aW9uLgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nLCAnaXJyZWxldmFudCB0ZXN0IG9uIE1hYyBPUyBYJykKKyAgICBkZWYgdGVzdF9ub3JtYWxpemUoc2VsZik6CisgICAgICAgIGZpbGVzID0gc2V0KGYgZm9yIGYgaW4gc2VsZi5maWxlcyBpZiBpc2luc3RhbmNlKGYsIHVuaWNvZGUpKQorICAgICAgICBvdGhlcnMgPSBzZXQoKQorICAgICAgICBmb3IgbmYgaW4gc2V0KFsnTkZDJywgJ05GRCcsICdORktDJywgJ05GS0QnXSk6CisgICAgICAgICAgICBvdGhlcnMgfD0gc2V0KG5vcm1hbGl6ZShuZiwgZmlsZSkgZm9yIGZpbGUgaW4gZmlsZXMpCisgICAgICAgIG90aGVycyAtPSBmaWxlcworICAgICAgICBmb3IgbmFtZSBpbiBvdGhlcnM6CisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9wZW4sIG5hbWUsIElPRXJyb3IpCisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9zLnN0YXQsIG5hbWUsIE9TRXJyb3IpCisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9zLmNoZGlyLCBuYW1lLCBPU0Vycm9yKQorICAgICAgICAgICAgc2VsZi5fYXBwbHlfZmFpbHVyZShvcy5ybWRpciwgbmFtZSwgT1NFcnJvcikKKyAgICAgICAgICAgIHNlbGYuX2FwcGx5X2ZhaWx1cmUob3MucmVtb3ZlLCBuYW1lLCBPU0Vycm9yKQorICAgICAgICAgICAgIyBsaXN0ZGlyIG1heSBhcHBlbmQgYSB3aWxkY2FyZCB0byB0aGUgZmlsZW5hbWUsIHNvIGRvbnQgY2hlY2sKKyAgICAgICAgICAgIHNlbGYuX2FwcGx5X2ZhaWx1cmUob3MubGlzdGRpciwgbmFtZSwgT1NFcnJvciwgRmFsc2UpCisKKyAgICAjIFNraXAgdGhlIHRlc3Qgb24gZGFyd2luLCBiZWNhdXNlIGRhcndpbiB1c2VzIGEgbm9ybWFsaXphdGlvbiBkaWZmZXJlbnQKKyAgICAjIHRoYW4gUHl0aG9uIE5GRCBub3JtYWxpemF0aW9uOiBmaWxlbmFtZXMgYXJlIGRpZmZlcmVudCBldmVuIGlmIHdlIHVzZQorICAgICMgUHl0aG9uIE5GRCBub3JtYWxpemF0aW9uLgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nLCAnaXJyZWxldmFudCB0ZXN0IG9uIE1hYyBPUyBYJykKKyAgICBkZWYgdGVzdF9saXN0ZGlyKHNlbGYpOgorICAgICAgICBzZjAgPSBzZXQoc2VsZi5maWxlcykKKyAgICAgICAgZjEgPSBvcy5saXN0ZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIGYyID0gb3MubGlzdGRpcih1bmljb2RlKHRlc3Rfc3VwcG9ydC5URVNURk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkpCisgICAgICAgIHNmMiA9IHNldChvcy5wYXRoLmpvaW4odW5pY29kZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKSwgZikgZm9yIGYgaW4gZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2YwLCBzZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGYxKSwgbGVuKGYyKSkKKworICAgIGRlZiB0ZXN0X3JlbmFtZShzZWxmKToKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5maWxlczoKKyAgICAgICAgICAgIG9zLnJlbmFtZShuYW1lLCAidG1wIikKKyAgICAgICAgICAgIG9zLnJlbmFtZSgidG1wIiwgbmFtZSkKKworICAgIGRlZiB0ZXN0X2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguam9pbih0ZXN0X3N1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnR3JceGZjXHhkZi1cdTY2ZThcdTY2ZTlcdTY2ZWInKQorICAgICAgICBmaWxlbmFtZSA9IHUnXHhkZi1cdTY2ZThcdTY2ZTlcdTY2ZWInCisgICAgICAgIG9sZHdkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MubWtkaXIoZGlybmFtZSkKKyAgICAgICAgb3MuY2hkaXIoZGlybmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgoZmlsZW5hbWUgKyAnXG4nKS5lbmNvZGUoInV0Zi04IikpCisgICAgICAgICAgICBvcy5hY2Nlc3MoZmlsZW5hbWUsb3MuUl9PSykKKyAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZHdkKQorICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKKworCitjbGFzcyBVbmljb2RlTkZDRmlsZVRlc3RzKFVuaWNvZGVGaWxlVGVzdHMpOgorICAgIG5vcm1hbF9mb3JtID0gJ05GQycKKworCitjbGFzcyBVbmljb2RlTkZERmlsZVRlc3RzKFVuaWNvZGVGaWxlVGVzdHMpOgorICAgIG5vcm1hbF9mb3JtID0gJ05GRCcKKworCitjbGFzcyBVbmljb2RlTkZLQ0ZpbGVUZXN0cyhVbmljb2RlRmlsZVRlc3RzKToKKyAgICBub3JtYWxfZm9ybSA9ICdORktDJworCisKK2NsYXNzIFVuaWNvZGVORktERmlsZVRlc3RzKFVuaWNvZGVGaWxlVGVzdHMpOgorICAgIG5vcm1hbF9mb3JtID0gJ05GS0QnCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRyeToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgICAgIFVuaWNvZGVGaWxlVGVzdHMsCisgICAgICAgICAgICBVbmljb2RlTkZDRmlsZVRlc3RzLAorICAgICAgICAgICAgVW5pY29kZU5GREZpbGVUZXN0cywKKyAgICAgICAgICAgIFVuaWNvZGVORktDRmlsZVRlc3RzLAorICAgICAgICAgICAgVW5pY29kZU5GS0RGaWxlVGVzdHMsCisgICAgICAgICkKKyAgICBmaW5hbGx5OgorICAgICAgICBkZWx0cmVlKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcGVwMjkyLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcGVwMjkyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOGEyNDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wZXAyOTIucHkKQEAgLTAsMCArMSwxOTMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIEF1dGhvcjogYmFycnlAcHl0aG9uLm9yZyAoQmFycnkgV2Fyc2F3KQorIyBMaWNlbnNlOiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL1B5dGhvblNvZnRGb3VuZGF0aW9uLnBocAorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCisKK2NsYXNzIEJhZzoKKyAgICBwYXNzCisKK2NsYXNzIE1hcHBpbmc6CisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG5hbWUpOgorICAgICAgICBvYmogPSBzZWxmCisgICAgICAgIGZvciBwYXJ0IGluIG5hbWUuc3BsaXQoJy4nKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgcGFydCkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihuYW1lKQorICAgICAgICByZXR1cm4gb2JqCisKKworY2xhc3MgVGVzdFRlbXBsYXRlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9yZWd1bGFyX3RlbXBsYXRlcyhzZWxmKToKKyAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGxpa2VzIHRvIGVhdCBhIGJhZyBvZiAkd2hhdCB3b3J0aCAkJDEwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbSBsaWtlcyB0byBlYXQgYSBiYWcgb2YgaGFtIHdvcnRoICQxMDAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5zdWJzdGl0dXRlLCBkaWN0KHdobz0ndGltJykpCisKKyAgICBkZWYgdGVzdF9yZWd1bGFyX3RlbXBsYXRlc193aXRoX2JyYWNlcyhzZWxmKToKKyAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGxpa2VzICR7d2hhdH0gZm9yICR7bWVhbH0nKQorICAgICAgICBkID0gZGljdCh3aG89J3RpbScsIHdoYXQ9J2hhbScsIG1lYWw9J2Rpbm5lcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdWJzdGl0dXRlKGQpLCAndGltIGxpa2VzIGhhbSBmb3IgZGlubmVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuc3Vic3RpdHV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCh3aG89J3RpbScsIHdoYXQ9J2hhbScpKQorCisgICAgZGVmIHRlc3RfZXNjYXBlcyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyB0byBlYXQgYSBiYWcgb2YgJCR3aGF0IHdvcnRoICQkMTAwJykKKyAgICAgICAgZXEocy5zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSksCisgICAgICAgICAgICd0aW0gbGlrZXMgdG8gZWF0IGEgYmFnIG9mICR3aGF0IHdvcnRoICQxMDAnKQorICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJCQnKQorICAgICAgICBlcShzLnN1YnN0aXR1dGUoZGljdCh3aG89J3RpbScsIHdoYXQ9J2hhbScpKSwgJ3RpbSBsaWtlcyAkJykKKworICAgIGRlZiB0ZXN0X3BlcmNlbnRzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgcyA9IFRlbXBsYXRlKCclKGZvbylzICRmb28gJHtmb299JykKKyAgICAgICAgZCA9IGRpY3QoZm9vPSdiYXonKQorICAgICAgICBlcShzLnN1YnN0aXR1dGUoZCksICclKGZvbylzIGJheiBiYXonKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkKSwgJyUoZm9vKXMgYmF6IGJheicpCisKKyAgICBkZWYgdGVzdF9zdHJpbmdpZmljYXRpb24oc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBzID0gVGVtcGxhdGUoJ3RpbSBoYXMgZWF0ZW4gJGNvdW50IGJhZ3Mgb2YgaGFtIHRvZGF5JykKKyAgICAgICAgZCA9IGRpY3QoY291bnQ9NykKKyAgICAgICAgZXEocy5zdWJzdGl0dXRlKGQpLCAndGltIGhhcyBlYXRlbiA3IGJhZ3Mgb2YgaGFtIHRvZGF5JykKKyAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoZCksICd0aW0gaGFzIGVhdGVuIDcgYmFncyBvZiBoYW0gdG9kYXknKQorICAgICAgICBzID0gVGVtcGxhdGUoJ3RpbSBoYXMgZWF0ZW4gJHtjb3VudH0gYmFncyBvZiBoYW0gdG9kYXknKQorICAgICAgICBlcShzLnN1YnN0aXR1dGUoZCksICd0aW0gaGFzIGVhdGVuIDcgYmFncyBvZiBoYW0gdG9kYXknKQorCisgICAgZGVmIHRlc3RfdHVwbGVhcmdzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGF0ZSAke21lYWx9JykKKyAgICAgICAgZCA9IGRpY3Qod2hvPSgndGltJywgJ2ZyZWQnKSwgbWVhbD0oJ2hhbScsICdrdW5nIHBhbycpKQorICAgICAgICBlcShzLnN1YnN0aXR1dGUoZCksICIoJ3RpbScsICdmcmVkJykgYXRlICgnaGFtJywgJ2t1bmcgcGFvJykiKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkKSwgIigndGltJywgJ2ZyZWQnKSBhdGUgKCdoYW0nLCAna3VuZyBwYW8nKSIpCisKKyAgICBkZWYgdGVzdF9TYWZlVGVtcGxhdGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJHt3aGF0fSBmb3IgJHttZWFsfScpCisgICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nKSksICd0aW0gbGlrZXMgJHt3aGF0fSBmb3IgJHttZWFsfScpCisgICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGRpY3Qod2hhdD0naGFtJykpLCAnJHdobyBsaWtlcyBoYW0gZm9yICR7bWVhbH0nKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkaWN0KHdoYXQ9J2hhbScsIG1lYWw9J2Rpbm5lcicpKSwKKyAgICAgICAgICAgJyR3aG8gbGlrZXMgaGFtIGZvciBkaW5uZXInKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkaWN0KHdobz0ndGltJywgd2hhdD0naGFtJykpLAorICAgICAgICAgICAndGltIGxpa2VzIGhhbSBmb3IgJHttZWFsfScpCisgICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nLCBtZWFsPSdkaW5uZXInKSksCisgICAgICAgICAgICd0aW0gbGlrZXMgaGFtIGZvciBkaW5uZXInKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9wbGFjZWhvbGRlcnMoc2VsZik6CisgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCisgICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyAkJykKKyAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsIHMuc3Vic3RpdHV0ZSwgZGljdCh3aG89J3RpbScpKQorICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJHt3aGF0KScpCisgICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBzLnN1YnN0aXR1dGUsIGRpY3Qod2hvPSd0aW0nKSkKKyAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGxpa2VzICQxMDAnKQorICAgICAgICByYWlzZXMoVmFsdWVFcnJvciwgcy5zdWJzdGl0dXRlLCBkaWN0KHdobz0ndGltJykpCisKKyAgICBkZWYgdGVzdF9pZHBhdHRlcm5fb3ZlcnJpZGUoc2VsZik6CisgICAgICAgIGNsYXNzIFBhdGhQYXR0ZXJuKFRlbXBsYXRlKToKKyAgICAgICAgICAgIGlkcGF0dGVybiA9IHInW19hLXpdWy5fYS16MC05XSonCisgICAgICAgIG0gPSBNYXBwaW5nKCkKKyAgICAgICAgbS5iYWcgPSBCYWcoKQorICAgICAgICBtLmJhZy5mb28gPSBCYWcoKQorICAgICAgICBtLmJhZy5mb28ud2hvID0gJ3RpbScKKyAgICAgICAgbS5iYWcud2hhdCA9ICdoYW0nCisgICAgICAgIHMgPSBQYXRoUGF0dGVybignJGJhZy5mb28ud2hvIGxpa2VzIHRvIGVhdCBhIGJhZyBvZiAkYmFnLndoYXQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3Vic3RpdHV0ZShtKSwgJ3RpbSBsaWtlcyB0byBlYXQgYSBiYWcgb2YgaGFtJykKKworICAgIGRlZiB0ZXN0X3BhdHRlcm5fb3ZlcnJpZGUoc2VsZik6CisgICAgICAgIGNsYXNzIE15UGF0dGVybihUZW1wbGF0ZSk6CisgICAgICAgICAgICBwYXR0ZXJuID0gciIiIgorICAgICAgICAgICAgKD9QPGVzY2FwZWQ+QHsyfSkgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgQCg/UDxuYW1lZD5bX2Etel1bLl9hLXowLTldKikgICAgICAgfAorICAgICAgICAgICAgQHsoP1A8YnJhY2VkPltfYS16XVsuX2EtejAtOV0qKX0gICAgfAorICAgICAgICAgICAgKD9QPGludmFsaWQ+QCkKKyAgICAgICAgICAgICIiIgorICAgICAgICBtID0gTWFwcGluZygpCisgICAgICAgIG0uYmFnID0gQmFnKCkKKyAgICAgICAgbS5iYWcuZm9vID0gQmFnKCkKKyAgICAgICAgbS5iYWcuZm9vLndobyA9ICd0aW0nCisgICAgICAgIG0uYmFnLndoYXQgPSAnaGFtJworICAgICAgICBzID0gTXlQYXR0ZXJuKCdAYmFnLmZvby53aG8gbGlrZXMgdG8gZWF0IGEgYmFnIG9mIEBiYWcud2hhdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdWJzdGl0dXRlKG0pLCAndGltIGxpa2VzIHRvIGVhdCBhIGJhZyBvZiBoYW0nKQorCisgICAgICAgIGNsYXNzIEJhZFBhdHRlcm4oVGVtcGxhdGUpOgorICAgICAgICAgICAgcGF0dGVybiA9IHIiIiIKKyAgICAgICAgICAgICg/UDxiYWRuYW1lPi4qKSAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICg/UDxlc2NhcGVkPkB7Mn0pICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgIEAoP1A8bmFtZWQ+W19hLXpdWy5fYS16MC05XSopICAgICAgIHwKKyAgICAgICAgICAgIEB7KD9QPGJyYWNlZD5bX2Etel1bLl9hLXowLTldKil9ICAgIHwKKyAgICAgICAgICAgICg/UDxpbnZhbGlkPkApICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICIiIgorICAgICAgICBzID0gQmFkUGF0dGVybignQGJhZy5mb28ud2hvIGxpa2VzIHRvIGVhdCBhIGJhZyBvZiBAYmFnLndoYXQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnN1YnN0aXR1dGUsIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnNhZmVfc3Vic3RpdHV0ZSwge30pCisKKyAgICBkZWYgdGVzdF91bmljb2RlX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGxpa2VzICR3aGF0JykKKyAgICAgICAgZCA9IGRpY3Qod2hvPXUndFx4ZmZtJywgd2hhdD11J2ZceGZlXGZlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdWJzdGl0dXRlKGQpLCB1J3RceGZmbSBsaWtlcyBmXHhmZVx4MGNlZCcpCisKKyAgICBkZWYgdGVzdF9rZXl3b3JkX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyAkd2hhdCcpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZSh3aG89J3RpbScsIHdoYXQ9J2hhbScpLCAndGltIGxpa2VzIGhhbScpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZShkaWN0KHdobz0ndGltJyksIHdoYXQ9J2hhbScpLCAndGltIGxpa2VzIGhhbScpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZShkaWN0KHdobz0nZnJlZCcsIHdoYXQ9J2t1bmcgcGFvJyksCisgICAgICAgICAgICAgICAgICAgICAgICB3aG89J3RpbScsIHdoYXQ9J2hhbScpLAorICAgICAgICAgICAndGltIGxpa2VzIGhhbScpCisgICAgICAgIHMgPSBUZW1wbGF0ZSgndGhlIG1hcHBpbmcgaXMgJG1hcHBpbmcnKQorICAgICAgICBlcShzLnN1YnN0aXR1dGUoZGljdChmb289J25vbmUnKSwgbWFwcGluZz0nYm96bycpLAorICAgICAgICAgICAndGhlIG1hcHBpbmcgaXMgYm96bycpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZShkaWN0KG1hcHBpbmc9J29uZScpLCBtYXBwaW5nPSd0d28nKSwKKyAgICAgICAgICAgJ3RoZSBtYXBwaW5nIGlzIHR3bycpCisKKyAgICBkZWYgdGVzdF9rZXl3b3JkX2FyZ3VtZW50c19zYWZlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgcmFpc2VzID0gc2VsZi5hc3NlcnRSYWlzZXMKKyAgICAgICAgcyA9IFRlbXBsYXRlKCckd2hvIGxpa2VzICR3aGF0JykKKyAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSwgJ3RpbSBsaWtlcyBoYW0nKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkaWN0KHdobz0ndGltJyksIHdoYXQ9J2hhbScpLCAndGltIGxpa2VzIGhhbScpCisgICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGRpY3Qod2hvPSdmcmVkJywgd2hhdD0na3VuZyBwYW8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdobz0ndGltJywgd2hhdD0naGFtJyksCisgICAgICAgICAgICd0aW0gbGlrZXMgaGFtJykKKyAgICAgICAgcyA9IFRlbXBsYXRlKCd0aGUgbWFwcGluZyBpcyAkbWFwcGluZycpCisgICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGRpY3QoZm9vPSdub25lJyksIG1hcHBpbmc9J2Jvem8nKSwKKyAgICAgICAgICAgJ3RoZSBtYXBwaW5nIGlzIGJvem8nKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShkaWN0KG1hcHBpbmc9J29uZScpLCBtYXBwaW5nPSd0d28nKSwKKyAgICAgICAgICAgJ3RoZSBtYXBwaW5nIGlzIHR3bycpCisgICAgICAgIGQgPSBkaWN0KG1hcHBpbmc9J29uZScpCisgICAgICAgIHJhaXNlcyhUeXBlRXJyb3IsIHMuc3Vic3RpdHV0ZSwgZCwge30pCisgICAgICAgIHJhaXNlcyhUeXBlRXJyb3IsIHMuc2FmZV9zdWJzdGl0dXRlLCBkLCB7fSkKKworICAgIGRlZiB0ZXN0X2RlbGltaXRlcl9vdmVycmlkZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCisgICAgICAgIGNsYXNzIEFtcGVyc2FuZFRlbXBsYXRlKFRlbXBsYXRlKToKKyAgICAgICAgICAgIGRlbGltaXRlciA9ICcmJworICAgICAgICBzID0gQW1wZXJzYW5kVGVtcGxhdGUoJ3RoaXMgJmdpZnQgaXMgZm9yICZ7d2hvfSAmJicpCisgICAgICAgIGVxKHMuc3Vic3RpdHV0ZShnaWZ0PSdidWQnLCB3aG89J3lvdScpLCAndGhpcyBidWQgaXMgZm9yIHlvdSAmJykKKyAgICAgICAgcmFpc2VzKEtleUVycm9yLCBzLnN1YnN0aXR1dGUpCisgICAgICAgIGVxKHMuc2FmZV9zdWJzdGl0dXRlKGdpZnQ9J2J1ZCcsIHdobz0neW91JyksICd0aGlzIGJ1ZCBpcyBmb3IgeW91ICYnKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZSgpLCAndGhpcyAmZ2lmdCBpcyBmb3IgJnt3aG99ICYnKQorICAgICAgICBzID0gQW1wZXJzYW5kVGVtcGxhdGUoJ3RoaXMgJmdpZnQgaXMgZm9yICZ7d2hvfSAmJykKKyAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsIHMuc3Vic3RpdHV0ZSwgZGljdChnaWZ0PSdidWQnLCB3aG89J3lvdScpKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZSgpLCAndGhpcyAmZ2lmdCBpcyBmb3IgJnt3aG99ICYnKQorCisgICAgICAgIGNsYXNzIFBpZURlbGltcyhUZW1wbGF0ZSk6CisgICAgICAgICAgICBkZWxpbWl0ZXIgPSAnQCcKKyAgICAgICAgcyA9IFBpZURlbGltcygnQHdobyBsaWtlcyB0byBlYXQgYSBiYWcgb2YgQHt3aGF0fSB3b3J0aCAkMTAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN1YnN0aXR1dGUoZGljdCh3aG89J3RpbScsIHdoYXQ9J2hhbScpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGltIGxpa2VzIHRvIGVhdCBhIGJhZyBvZiBoYW0gd29ydGggJDEwMCcpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisgICAgdGVzdF9jbGFzc2VzID0gW1Rlc3RUZW1wbGF0ZSxdCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BlcDM1Mi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BlcDM1Mi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGIzMTM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcGVwMzUyLnB5CkBAIC0wLDAgKzEsMjM5IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBfX2J1aWx0aW5fXworaW1wb3J0IGV4Y2VwdGlvbnMKK2ltcG9ydCB3YXJuaW5ncworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjaGVja193YXJuaW5ncworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitmcm9tIHBsYXRmb3JtIGltcG9ydCBzeXN0ZW0gYXMgcGxhdGZvcm1fc3lzdGVtCisKK0RFUFJFQ0FUSU9OX1dBUk5JTkdTID0gWyJCYXNlRXhjZXB0aW9uLm1lc3NhZ2UgaGFzIGJlZW4gZGVwcmVjYXRlZCJdCisKK2lmIHN5cy5weTNrd2FybmluZzoKKyAgICBERVBSRUNBVElPTl9XQVJOSU5HUy5leHRlbmQoCisgICAgICAgIFsiZXhjZXB0aW9ucyBtdXN0IGRlcml2ZSBmcm9tIEJhc2VFeGNlcHRpb24iLAorICAgICAgICAgImNhdGNoaW5nIGNsYXNzZXMgdGhhdCBkb24ndCBpbmhlcml0IGZyb20gQmFzZUV4Y2VwdGlvbiBpcyBub3QgYWxsb3dlZCIsCisgICAgICAgICAiX19nZXQoaXRlbXxzbGljZSlfXyBub3Qgc3VwcG9ydGVkIGZvciBleGNlcHRpb24gY2xhc3NlcyJdKQorCitfZGVwcmVjYXRpb25zID0gWyhtc2csIERlcHJlY2F0aW9uV2FybmluZykgZm9yIG1zZyBpbiBERVBSRUNBVElPTl9XQVJOSU5HU10KKworIyBTaWxlbmNlIFB5M2sgYW5kIG90aGVyIGRlcHJlY2F0aW9uIHdhcm5pbmdzCitkZWYgaWdub3JlX2RlcHJlY2F0aW9uX3dhcm5pbmdzKGZ1bmMpOgorICAgICIiIklnbm9yZSB0aGUga25vd24gRGVwcmVjYXRpb25XYXJuaW5ncy4iIiIKKyAgICBkZWYgd3JhcHBlcigqYXJncywgKiprdyk6CisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKl9kZXByZWNhdGlvbnMsIHF1aWV0PVRydWUpOgorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3cpCisgICAgcmV0dXJuIHdyYXBwZXIKKworY2xhc3MgRXhjZXB0aW9uQ2xhc3NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0cyBmb3IgYW55dGhpbmcgcmVsYXRpbmcgdG8gZXhjZXB0aW9uIG9iamVjdHMgdGhlbXNlbHZlcyAoZS5nLiwKKyAgICBpbmhlcml0YW5jZSBoaWVyYXJjaHkpIiIiCisKKyAgICBkZWYgdGVzdF9idWlsdGluc19uZXdfc3R5bGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEV4Y2VwdGlvbiwgb2JqZWN0KSkKKworICAgIEBpZ25vcmVfZGVwcmVjYXRpb25fd2FybmluZ3MKKyAgICBkZWYgdmVyaWZ5X2luc3RhbmNlX2ludGVyZmFjZShzZWxmLCBpbnMpOgorICAgICAgICBmb3IgYXR0ciBpbiAoImFyZ3MiLCAibWVzc2FnZSIsICJfX3N0cl9fIiwgIl9fcmVwcl9fIiwgIl9fZ2V0aXRlbV9fIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihpbnMsIGF0dHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBtaXNzaW5nICVzIGF0dHJpYnV0ZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnMuX19jbGFzc19fLl9fbmFtZV9fLCBhdHRyKSkKKworICAgIGRlZiB0ZXN0X2luaGVyaXRhbmNlKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5IG1hdGNoZXMgdGhlIGRvY3VtZW50YXRpb24KKyAgICAgICAgZXhjX3NldCA9IHNldCh4IGZvciB4IGluIGRpcihleGNlcHRpb25zKSBpZiBub3QgeC5zdGFydHN3aXRoKCdfJykpCisgICAgICAgIGluaGVyaXRhbmNlX3RyZWUgPSBvcGVuKG9zLnBhdGguam9pbihvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHRpb25faGllcmFyY2h5LnR4dCcpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdXBlcmNsYXNzX25hbWUgPSBpbmhlcml0YW5jZV90cmVlLnJlYWRsaW5lKCkucnN0cmlwKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsYXN0X2V4YyA9IGdldGF0dHIoX19idWlsdGluX18sIHN1cGVyY2xhc3NfbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImJhc2UgY2xhc3MgJXMgbm90IGEgYnVpbHQtaW4iICUgc3VwZXJjbGFzc19uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdXBlcmNsYXNzX25hbWUsIGV4Y19zZXQpCisgICAgICAgICAgICBleGNfc2V0LmRpc2NhcmQoc3VwZXJjbGFzc19uYW1lKQorICAgICAgICAgICAgc3VwZXJjbGFzc2VzID0gW10gICMgTG9vcCB3aWxsIGluc2VydCBiYXNlIGV4Y2VwdGlvbgorICAgICAgICAgICAgbGFzdF9kZXB0aCA9IDAKKyAgICAgICAgICAgIGZvciBleGNfbGluZSBpbiBpbmhlcml0YW5jZV90cmVlOgorICAgICAgICAgICAgICAgIGV4Y19saW5lID0gZXhjX2xpbmUucnN0cmlwKCkKKyAgICAgICAgICAgICAgICBkZXB0aCA9IGV4Y19saW5lLnJpbmRleCgnLScpCisgICAgICAgICAgICAgICAgZXhjX25hbWUgPSBleGNfbGluZVtkZXB0aCsyOl0gICMgU2xpY2UgcGFzdCBzcGFjZQorICAgICAgICAgICAgICAgIGlmICcoJyBpbiBleGNfbmFtZToKKyAgICAgICAgICAgICAgICAgICAgcGFyZW5faW5kZXggPSBleGNfbmFtZS5pbmRleCgnKCcpCisgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX25hbWUgPSBleGNfbmFtZVtwYXJlbl9pbmRleCsxOi0xXQorICAgICAgICAgICAgICAgICAgICBleGNfbmFtZSA9IGV4Y19uYW1lWzpwYXJlbl9pbmRleC0xXSAgIyBTbGljZSBvZmYgc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgaWYgcGxhdGZvcm1fc3lzdGVtKCkgIT0gcGxhdGZvcm1fbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19zZXQuZGlzY2FyZChleGNfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgJ1snIGluIGV4Y19uYW1lOgorICAgICAgICAgICAgICAgICAgICBsZWZ0X2JyYWNrZXQgPSBleGNfbmFtZS5pbmRleCgnWycpCisgICAgICAgICAgICAgICAgICAgIGV4Y19uYW1lID0gZXhjX25hbWVbOmxlZnRfYnJhY2tldC0xXSAgIyBjb3ZlciBzcGFjZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZXhjID0gZ2V0YXR0cihfX2J1aWx0aW5fXywgZXhjX25hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzIG5vdCBhIGJ1aWx0LWluIGV4Y2VwdGlvbiIgJSBleGNfbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBsYXN0X2RlcHRoIDwgZGVwdGg6CisgICAgICAgICAgICAgICAgICAgIHN1cGVyY2xhc3Nlcy5hcHBlbmQoKGxhc3RfZGVwdGgsIGxhc3RfZXhjKSkKKyAgICAgICAgICAgICAgICBlbGlmIGxhc3RfZGVwdGggPiBkZXB0aDoKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgc3VwZXJjbGFzc2VzWy0xXVswXSA+PSBkZXB0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyY2xhc3Nlcy5wb3AoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGV4Yywgc3VwZXJjbGFzc2VzWy0xXVsxXSksCisgICAgICAgICAgICAgICAgIiVzIGlzIG5vdCBhIHN1YmNsYXNzIG9mICVzIiAlIChleGMuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgIHN1cGVyY2xhc3Nlc1stMV1bMV0uX19uYW1lX18pKQorICAgICAgICAgICAgICAgIHRyeTogICMgU29tZSBleGNlcHRpb25zIHJlcXVpcmUgYXJndW1lbnRzOyBqdXN0IHNraXAgdGhlbQorICAgICAgICAgICAgICAgICAgICBzZWxmLnZlcmlmeV9pbnN0YW5jZV9pbnRlcmZhY2UoZXhjKCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhjX25hbWUsIGV4Y19zZXQpCisgICAgICAgICAgICAgICAgZXhjX3NldC5kaXNjYXJkKGV4Y19uYW1lKQorICAgICAgICAgICAgICAgIGxhc3RfZXhjID0gZXhjCisgICAgICAgICAgICAgICAgbGFzdF9kZXB0aCA9IGRlcHRoCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpbmhlcml0YW5jZV90cmVlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXhjX3NldCksIDAsICIlcyBub3QgYWNjb3VudGVkIGZvciIgJSBleGNfc2V0KQorCisgICAgaW50ZXJmYWNlX3Rlc3RzID0gKCJsZW5ndGgiLCAiYXJncyIsICJtZXNzYWdlIiwgInN0ciIsICJ1bmljb2RlIiwgInJlcHIiLAorICAgICAgICAgICAgImluZGV4aW5nIikKKworICAgIGRlZiBpbnRlcmZhY2VfdGVzdF9kcml2ZXIoc2VsZiwgcmVzdWx0cyk6CisgICAgICAgIGZvciB0ZXN0X25hbWUsIChnaXZlbiwgZXhwZWN0ZWQpIGluIHppcChzZWxmLmludGVyZmFjZV90ZXN0cywgcmVzdWx0cyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdpdmVuLCBleHBlY3RlZCwgIiVzOiAlcyAhPSAlcyIgJSAodGVzdF9uYW1lLAorICAgICAgICAgICAgICAgIGdpdmVuLCBleHBlY3RlZCkpCisKKyAgICBAaWdub3JlX2RlcHJlY2F0aW9uX3dhcm5pbmdzCisgICAgZGVmIHRlc3RfaW50ZXJmYWNlX3NpbmdsZV9hcmcoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGludGVyZmFjZSB3b3JrcyBwcm9wZXJseSB3aGVuIGdpdmVuIGEgc2luZ2xlIGFyZ3VtZW50CisgICAgICAgIGFyZyA9ICJzcGFtIgorICAgICAgICBleGMgPSBFeGNlcHRpb24oYXJnKQorICAgICAgICByZXN1bHRzID0gKFtsZW4oZXhjLmFyZ3MpLCAxXSwgW2V4Yy5hcmdzWzBdLCBhcmddLCBbZXhjLm1lc3NhZ2UsIGFyZ10sCisgICAgICAgICAgICAgICAgICAgW3N0cihleGMpLCBzdHIoYXJnKV0sIFt1bmljb2RlKGV4YyksIHVuaWNvZGUoYXJnKV0sCisgICAgICAgICAgICAgICAgICAgW3JlcHIoZXhjKSwgZXhjLl9fY2xhc3NfXy5fX25hbWVfXyArIHJlcHIoZXhjLmFyZ3MpXSwKKyAgICAgICAgICAgICAgICAgICBbZXhjWzBdLCBhcmddKQorICAgICAgICBzZWxmLmludGVyZmFjZV90ZXN0X2RyaXZlcihyZXN1bHRzKQorCisgICAgQGlnbm9yZV9kZXByZWNhdGlvbl93YXJuaW5ncworICAgIGRlZiB0ZXN0X2ludGVyZmFjZV9tdWx0aV9hcmcoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGludGVyZmFjZSBjb3JyZWN0IHdoZW4gbXVsdGlwbGUgYXJndW1lbnRzIGdpdmVuCisgICAgICAgIGFyZ19jb3VudCA9IDMKKyAgICAgICAgYXJncyA9IHR1cGxlKHJhbmdlKGFyZ19jb3VudCkpCisgICAgICAgIGV4YyA9IEV4Y2VwdGlvbigqYXJncykKKyAgICAgICAgcmVzdWx0cyA9IChbbGVuKGV4Yy5hcmdzKSwgYXJnX2NvdW50XSwgW2V4Yy5hcmdzLCBhcmdzXSwKKyAgICAgICAgICAgICAgICAgICBbZXhjLm1lc3NhZ2UsICcnXSwgW3N0cihleGMpLCBzdHIoYXJncyldLAorICAgICAgICAgICAgICAgICAgIFt1bmljb2RlKGV4YyksIHVuaWNvZGUoYXJncyldLAorICAgICAgICAgICAgICAgICAgIFtyZXByKGV4YyksIGV4Yy5fX2NsYXNzX18uX19uYW1lX18gKyByZXByKGV4Yy5hcmdzKV0sCisgICAgICAgICAgICAgICAgICAgW2V4Y1stMV0sIGFyZ3NbLTFdXSkKKyAgICAgICAgc2VsZi5pbnRlcmZhY2VfdGVzdF9kcml2ZXIocmVzdWx0cykKKworICAgIEBpZ25vcmVfZGVwcmVjYXRpb25fd2FybmluZ3MKKyAgICBkZWYgdGVzdF9pbnRlcmZhY2Vfbm9fYXJnKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdpdGggbm8gYXJncyB0aGF0IGludGVyZmFjZSBpcyBjb3JyZWN0CisgICAgICAgIGV4YyA9IEV4Y2VwdGlvbigpCisgICAgICAgIHJlc3VsdHMgPSAoW2xlbihleGMuYXJncyksIDBdLCBbZXhjLmFyZ3MsIHR1cGxlKCldLAorICAgICAgICAgICAgICAgICAgIFtleGMubWVzc2FnZSwgJyddLAorICAgICAgICAgICAgICAgICAgIFtzdHIoZXhjKSwgJyddLCBbdW5pY29kZShleGMpLCB1JyddLAorICAgICAgICAgICAgICAgICAgIFtyZXByKGV4YyksIGV4Yy5fX2NsYXNzX18uX19uYW1lX18gKyAnKCknXSwgW1RydWUsIFRydWVdKQorICAgICAgICBzZWxmLmludGVyZmFjZV90ZXN0X2RyaXZlcihyZXN1bHRzKQorCisKKyAgICBkZWYgdGVzdF9tZXNzYWdlX2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICAjIEFzIG9mIFB5dGhvbiAyLjYsIEJhc2VFeGNlcHRpb24ubWVzc2FnZSBpcyBkZXByZWNhdGVkLgorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgiIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBCYXNlRXhjZXB0aW9uKCkubWVzc2FnZQorCisKK2NsYXNzIFVzYWdlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVGVzdCB1c2FnZSBvZiBleGNlcHRpb25zIiIiCisKKyAgICBkZWYgcmFpc2VfZmFpbHMoc2VsZiwgb2JqZWN0Xyk6CisgICAgICAgICIiIk1ha2Ugc3VyZSB0aGF0IHJhaXNpbmcgJ29iamVjdF8nIHRyaWdnZXJzIGEgVHlwZUVycm9yLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBvYmplY3RfCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gICMgV2hhdCBpcyBleHBlY3RlZC4KKyAgICAgICAgc2VsZi5mYWlsKCJUeXBlRXJyb3IgZXhwZWN0ZWQgZm9yIHJhaXNpbmcgJXMiICUgdHlwZShvYmplY3RfKSkKKworICAgIGRlZiBjYXRjaF9mYWlscyhzZWxmLCBvYmplY3RfKToKKyAgICAgICAgIiIiQ2F0Y2hpbmcgJ29iamVjdF8nIHNob3VsZCByYWlzZSBhIFR5cGVFcnJvci4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJhaXNlIFN0YW5kYXJkRXJyb3IKKyAgICAgICAgICAgIGV4Y2VwdCBvYmplY3RfOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IFN0YW5kYXJkRXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlR5cGVFcnJvciBleHBlY3RlZCB3aGVuIGNhdGNoaW5nICVzIiAlIHR5cGUob2JqZWN0XykpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJhaXNlIFN0YW5kYXJkRXJyb3IKKyAgICAgICAgICAgIGV4Y2VwdCAob2JqZWN0XywpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgU3RhbmRhcmRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVHlwZUVycm9yIGV4cGVjdGVkIHdoZW4gY2F0Y2hpbmcgJXMgYXMgc3BlY2lmaWVkIGluIGEgIgorICAgICAgICAgICAgICAgICAgICAgICAgInR1cGxlIiAlIHR5cGUob2JqZWN0XykpCisKKyAgICBAaWdub3JlX2RlcHJlY2F0aW9uX3dhcm5pbmdzCisgICAgZGVmIHRlc3RfcmFpc2VfY2xhc3NpYyhzZWxmKToKKyAgICAgICAgIyBSYWlzaW5nIGEgY2xhc3NpYyBjbGFzcyBpcyBva2F5IChmb3Igbm93KS4KKyAgICAgICAgY2xhc3MgQ2xhc3NpY0NsYXNzOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBDbGFzc2ljQ2xhc3MKKyAgICAgICAgZXhjZXB0IENsYXNzaWNDbGFzczoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmFibGUgdG8gcmFpc2UgY2xhc3NpYyBjbGFzcyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIENsYXNzaWNDbGFzcygpCisgICAgICAgIGV4Y2VwdCBDbGFzc2ljQ2xhc3M6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgidW5hYmxlIHRvIHJhaXNlIGNsYXNzaWMgY2xhc3MgaW5zdGFuY2UiKQorCisgICAgZGVmIHRlc3RfcmFpc2VfbmV3X3N0eWxlX25vbl9leGNlcHRpb24oc2VsZik6CisgICAgICAgICMgWW91IGNhbm5vdCByYWlzZSBhIG5ldy1zdHlsZSBjbGFzcyB0aGF0IGRvZXMgbm90IGluaGVyaXQgZnJvbQorICAgICAgICAjIEJhc2VFeGNlcHRpb247IHRoZSBhYmlsaXR5IHdhcyBub3QgcG9zc2libGUgdW50aWwgQmFzZUV4Y2VwdGlvbidzCisgICAgICAgICMgaW50cm9kdWN0aW9uIHNvIG5vIG5lZWQgdG8gc3VwcG9ydCBuZXctc3R5bGUgb2JqZWN0cyB0aGF0IGRvIG5vdAorICAgICAgICAjIGluaGVyaXQgZnJvbSBpdC4KKyAgICAgICAgY2xhc3MgTmV3U3R5bGVDbGFzcyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLnJhaXNlX2ZhaWxzKE5ld1N0eWxlQ2xhc3MpCisgICAgICAgIHNlbGYucmFpc2VfZmFpbHMoTmV3U3R5bGVDbGFzcygpKQorCisgICAgZGVmIHRlc3RfcmFpc2Vfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIFJhaXNpbmcgYSBzdHJpbmcgcmFpc2VzIFR5cGVFcnJvci4KKyAgICAgICAgc2VsZi5yYWlzZV9mYWlscygic3BhbSIpCisKKyAgICBkZWYgdGVzdF9jYXRjaF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgQ2F0Y2hpbmcgYSBzdHJpbmcgc2hvdWxkIHRyaWdnZXIgYSBEZXByZWNhdGlvbldhcm5pbmcuCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImVycm9yIikKKyAgICAgICAgICAgIHN0cl9leGMgPSAic3BhbSIKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0YW5kYXJkRXJyb3IKKyAgICAgICAgICAgICAgICBleGNlcHQgc3RyX2V4YzoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGV2ZW4gaWYgdGhlIHN0cmluZyBleGNlcHRpb24gaXMgbGlzdGVkIGluIGEgdHVwbGUKKyAgICAgICAgICAgICMgdGhhdCBhIHdhcm5pbmcgaXMgcmFpc2VkLgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RhbmRhcmRFcnJvcgorICAgICAgICAgICAgICAgIGV4Y2VwdCAoQXNzZXJ0aW9uRXJyb3IsIHN0cl9leGMpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChFeGNlcHRpb25DbGFzc1Rlc3RzLCBVc2FnZVRlc3RzKQorCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcGlja2xlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcGlja2xlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMTI2NDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9waWNrbGUucHkKQEAgLTAsMCArMSw5MiBAQAoraW1wb3J0IHBpY2tsZQorZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2Zyb20gdGVzdC5waWNrbGV0ZXN0ZXIgaW1wb3J0IChBYnN0cmFjdFBpY2tsZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0UGlja2xlTW9kdWxlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RQZXJzaXN0ZW50UGlja2xlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0UGlja2xlclVucGlja2xlck9iamVjdFRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ21lbVBpY2tsZVRlc3RzKQorCitjbGFzcyBQaWNrbGVUZXN0cyhBYnN0cmFjdFBpY2tsZVRlc3RzLCBBYnN0cmFjdFBpY2tsZU1vZHVsZVRlc3RzKToKKworICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvPTAsIGZhc3Q9MCk6CisgICAgICAgICMgSWdub3JlIGZhc3QKKyAgICAgICAgcmV0dXJuIHBpY2tsZS5kdW1wcyhhcmcsIHByb3RvKQorCisgICAgZGVmIGxvYWRzKHNlbGYsIGJ1Zik6CisgICAgICAgICMgSWdub3JlIGZhc3QKKyAgICAgICAgcmV0dXJuIHBpY2tsZS5sb2FkcyhidWYpCisKKyAgICBtb2R1bGUgPSBwaWNrbGUKKyAgICBlcnJvciA9IEtleUVycm9yCisKK2NsYXNzIFBpY2tsZXJUZXN0cyhBYnN0cmFjdFBpY2tsZVRlc3RzKToKKworICAgIGVycm9yID0gS2V5RXJyb3IKKworICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvPTAsIGZhc3Q9MCk6CisgICAgICAgIGYgPSBTdHJpbmdJTygpCisgICAgICAgIHAgPSBwaWNrbGUuUGlja2xlcihmLCBwcm90bykKKyAgICAgICAgaWYgZmFzdDoKKyAgICAgICAgICAgIHAuZmFzdCA9IGZhc3QKKyAgICAgICAgcC5kdW1wKGFyZykKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIHJldHVybiBmLnJlYWQoKQorCisgICAgZGVmIGxvYWRzKHNlbGYsIGJ1Zik6CisgICAgICAgIGYgPSBTdHJpbmdJTyhidWYpCisgICAgICAgIHUgPSBwaWNrbGUuVW5waWNrbGVyKGYpCisgICAgICAgIHJldHVybiB1LmxvYWQoKQorCitjbGFzcyBQZXJzUGlja2xlclRlc3RzKEFic3RyYWN0UGVyc2lzdGVudFBpY2tsZXJUZXN0cyk6CisKKyAgICBkZWYgZHVtcHMoc2VsZiwgYXJnLCBwcm90bz0wLCBmYXN0PTApOgorICAgICAgICBjbGFzcyBQZXJzUGlja2xlcihwaWNrbGUuUGlja2xlcik6CisgICAgICAgICAgICBkZWYgcGVyc2lzdGVudF9pZChzdWJzZWxmLCBvYmopOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBlcnNpc3RlbnRfaWQob2JqKQorICAgICAgICBmID0gU3RyaW5nSU8oKQorICAgICAgICBwID0gUGVyc1BpY2tsZXIoZiwgcHJvdG8pCisgICAgICAgIGlmIGZhc3Q6CisgICAgICAgICAgICBwLmZhc3QgPSBmYXN0CisgICAgICAgIHAuZHVtcChhcmcpCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICByZXR1cm4gZi5yZWFkKCkKKworICAgIGRlZiBsb2FkcyhzZWxmLCBidWYpOgorICAgICAgICBjbGFzcyBQZXJzVW5waWNrbGVyKHBpY2tsZS5VbnBpY2tsZXIpOgorICAgICAgICAgICAgZGVmIHBlcnNpc3RlbnRfbG9hZChzdWJzZWxmLCBvYmopOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBlcnNpc3RlbnRfbG9hZChvYmopCisgICAgICAgIGYgPSBTdHJpbmdJTyhidWYpCisgICAgICAgIHUgPSBQZXJzVW5waWNrbGVyKGYpCisgICAgICAgIHJldHVybiB1LmxvYWQoKQorCitjbGFzcyBQaWNrbGVyVW5waWNrbGVyT2JqZWN0VGVzdHMoQWJzdHJhY3RQaWNrbGVyVW5waWNrbGVyT2JqZWN0VGVzdHMpOgorCisgICAgcGlja2xlcl9jbGFzcyA9IHBpY2tsZS5QaWNrbGVyCisgICAgdW5waWNrbGVyX2NsYXNzID0gcGlja2xlLlVucGlja2xlcgorCitjbGFzcyBQaWNrbGVCaWdtZW1QaWNrbGVUZXN0cyhCaWdtZW1QaWNrbGVUZXN0cyk6CisKKyAgICBkZWYgZHVtcHMoc2VsZiwgYXJnLCBwcm90bz0wLCBmYXN0PTApOgorICAgICAgICAjIElnbm9yZSBmYXN0CisgICAgICAgIHJldHVybiBwaWNrbGUuZHVtcHMoYXJnLCBwcm90bykKKworICAgIGRlZiBsb2FkcyhzZWxmLCBidWYpOgorICAgICAgICAjIElnbm9yZSBmYXN0CisgICAgICAgIHJldHVybiBwaWNrbGUubG9hZHMoYnVmKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBQaWNrbGVUZXN0cywKKyAgICAgICAgUGlja2xlclRlc3RzLAorICAgICAgICBQZXJzUGlja2xlclRlc3RzLAorICAgICAgICBQaWNrbGVyVW5waWNrbGVyT2JqZWN0VGVzdHMsCisgICAgICAgIFBpY2tsZUJpZ21lbVBpY2tsZVRlc3RzLAorICAgICkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QocGlja2xlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9waWNrbGV0b29scy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BpY2tsZXRvb2xzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNWIzNWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9waWNrbGV0b29scy5weQpAQCAtMCwwICsxLDI0IEBACitpbXBvcnQgcGlja2xlCitpbXBvcnQgcGlja2xldG9vbHMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QucGlja2xldGVzdGVyIGltcG9ydCBBYnN0cmFjdFBpY2tsZVRlc3RzCitmcm9tIHRlc3QucGlja2xldGVzdGVyIGltcG9ydCBBYnN0cmFjdFBpY2tsZU1vZHVsZVRlc3RzCisKK2NsYXNzIE9wdGltaXplZFBpY2tsZVRlc3RzKEFic3RyYWN0UGlja2xlVGVzdHMsIEFic3RyYWN0UGlja2xlTW9kdWxlVGVzdHMpOgorCisgICAgZGVmIGR1bXBzKHNlbGYsIGFyZywgcHJvdG89MCwgZmFzdD0wKToKKyAgICAgICAgcmV0dXJuIHBpY2tsZXRvb2xzLm9wdGltaXplKHBpY2tsZS5kdW1wcyhhcmcsIHByb3RvKSkKKworICAgIGRlZiBsb2FkcyhzZWxmLCBidWYpOgorICAgICAgICByZXR1cm4gcGlja2xlLmxvYWRzKGJ1ZikKKworICAgIG1vZHVsZSA9IHBpY2tsZQorICAgIGVycm9yID0gS2V5RXJyb3IKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoT3B0aW1pemVkUGlja2xlVGVzdHMpCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHBpY2tsZXRvb2xzKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BpcGVzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcGlwZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhiOGJlMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BpcGVzLnB5CkBAIC0wLDAgKzEsMjA0IEBACitpbXBvcnQgcGlwZXMKK2ltcG9ydCBvcworaW1wb3J0IHN0cmluZworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgdW5saW5rLCByZWFwX2NoaWxkcmVuCisKK2lmIG9zLm5hbWUgIT0gJ3Bvc2l4JzoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgncGlwZXMgbW9kdWxlIG9ubHkgd29ya3Mgb24gcG9zaXgnKQorCitURVNURk4yID0gVEVTVEZOICsgIjIiCisKKyMgdHIgYS16IEEtWiBpcyBub3QgcG9ydGFibGUsIHNvIG1ha2UgdGhlIHJhbmdlcyBleHBsaWNpdAorc19jb21tYW5kID0gJ3RyICVzICVzJyAlIChzdHJpbmcuYXNjaWlfbG93ZXJjYXNlLCBzdHJpbmcuYXNjaWlfdXBwZXJjYXNlKQorCitjbGFzcyBTaW1wbGVQaXBlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTiwgVEVTVEZOMik6CisgICAgICAgICAgICB1bmxpbmsoZikKKworICAgIGRlZiB0ZXN0U2ltcGxlUGlwZTEoc2VsZik6CisgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCisgICAgICAgIHQuYXBwZW5kKHNfY29tbWFuZCwgcGlwZXMuU1RESU5fU1RET1VUKQorICAgICAgICBmID0gdC5vcGVuKFRFU1RGTiwgJ3cnKQorICAgICAgICBmLndyaXRlKCdoZWxsbyB3b3JsZCAjMScpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ0hFTExPIFdPUkxEICMxJykKKworICAgIGRlZiB0ZXN0U2ltcGxlUGlwZTIoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ2hlbGxvIHdvcmxkICMyJykKKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKyAgICAgICAgdC5hcHBlbmQoc19jb21tYW5kICsgJyA8ICRJTiA+ICRPVVQnLCBwaXBlcy5GSUxFSU5fRklMRU9VVCkKKyAgICAgICAgdC5jb3B5KFRFU1RGTiwgVEVTVEZOMikKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTjIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnSEVMTE8gV09STEQgIzInKQorCisgICAgZGVmIHRlc3RTaW1wbGVQaXBlMyhzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnaGVsbG8gd29ybGQgIzInKQorICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQorICAgICAgICB0LmFwcGVuZChzX2NvbW1hbmQgKyAnIDwgJElOJywgcGlwZXMuRklMRUlOX1NURE9VVCkKKyAgICAgICAgd2l0aCB0Lm9wZW4oVEVTVEZOLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnSEVMTE8gV09STEQgIzInKQorCisgICAgZGVmIHRlc3RFbXB0eVBpcGVsaW5lMShzZWxmKToKKyAgICAgICAgIyBjb3B5IHRocm91Z2ggZW1wdHkgcGlwZQorICAgICAgICBkID0gJ2VtcHR5IHBpcGVsaW5lIHRlc3QgQ09QWScKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOMiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnJykKKyAgICAgICAgdD1waXBlcy5UZW1wbGF0ZSgpCisgICAgICAgIHQuY29weShURVNURk4sIFRFU1RGTjIpCisgICAgICAgIHdpdGggb3BlbihURVNURk4yKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZCkKKworICAgIGRlZiB0ZXN0RW1wdHlQaXBlbGluZTIoc2VsZik6CisgICAgICAgICMgcmVhZCB0aHJvdWdoIGVtcHR5IHBpcGUKKyAgICAgICAgZCA9ICdlbXB0eSBwaXBlbGluZSB0ZXN0IFJFQUQnCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoZCkKKyAgICAgICAgdD1waXBlcy5UZW1wbGF0ZSgpCisgICAgICAgIHdpdGggdC5vcGVuKFRFU1RGTiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZCkKKworICAgIGRlZiB0ZXN0RW1wdHlQaXBlbGluZTMoc2VsZik6CisgICAgICAgICMgd3JpdGUgdGhyb3VnaCBlbXB0eSBwaXBlCisgICAgICAgIGQgPSAnZW1wdHkgcGlwZWxpbmUgdGVzdCBXUklURScKKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKyAgICAgICAgd2l0aCB0Lm9wZW4oVEVTVEZOLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGQpCisgICAgICAgIHdpdGggb3BlbihURVNURk4pIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBkKQorCisgICAgZGVmIHRlc3RRdW90aW5nKHNlbGYpOgorICAgICAgICBzYWZldW5xdW90ZWQgPSBzdHJpbmcuYXNjaWlfbGV0dGVycyArIHN0cmluZy5kaWdpdHMgKyAnQCVfLSs9OiwuLycKKyAgICAgICAgdW5zYWZlID0gJyJgJFxcIScKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGVzLnF1b3RlKCcnKSwgIicnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlcy5xdW90ZShzYWZldW5xdW90ZWQpLCBzYWZldW5xdW90ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZXMucXVvdGUoJ3Rlc3QgZmlsZSBuYW1lJyksICIndGVzdCBmaWxlIG5hbWUnIikKKyAgICAgICAgZm9yIHUgaW4gdW5zYWZlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlcy5xdW90ZSgndGVzdCVzbmFtZScgJSB1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIndGVzdCVzbmFtZSciICUgdSkKKyAgICAgICAgZm9yIHUgaW4gdW5zYWZlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlcy5xdW90ZSgidGVzdCVzJ25hbWUnIiAlIHUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3Rlc3QlcydcIidcIiduYW1lJ1wiJ1wiJyciICUgdSkKKworICAgIGRlZiB0ZXN0UmVwcihzZWxmKToKKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLCAiPFRlbXBsYXRlIGluc3RhbmNlLCBzdGVwcz1bXT4iKQorICAgICAgICB0LmFwcGVuZCgndHIgYS16IEEtWicsIHBpcGVzLlNURElOX1NURE9VVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAorICAgICAgICAgICAgICAgICAgICAiPFRlbXBsYXRlIGluc3RhbmNlLCBzdGVwcz1bKCd0ciBhLXogQS1aJywgJy0tJyldPiIpCisKKyAgICBkZWYgdGVzdFNldERlYnVnKHNlbGYpOgorICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQorICAgICAgICB0LmRlYnVnKEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZGVidWdnaW5nLCBGYWxzZSkKKyAgICAgICAgdC5kZWJ1ZyhUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZGVidWdnaW5nLCBUcnVlKQorCisgICAgZGVmIHRlc3RSZWFkT3BlblNpbmsoc2VsZik6CisgICAgICAgICMgY2hlY2sgY2FsbGluZyBvcGVuKCdyJykgb24gYSBwaXBlIGVuZGluZyB3aXRoCisgICAgICAgICMgYSBzaW5rIHJhaXNlcyBWYWx1ZUVycm9yCisgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCisgICAgICAgIHQuYXBwZW5kKCdib2d1c2NtZCcsIHBpcGVzLlNJTkspCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQub3BlbiwgJ2JvZ3VzZmlsZScsICdyJykKKworICAgIGRlZiB0ZXN0V3JpdGVPcGVuU291cmNlKHNlbGYpOgorICAgICAgICAjIGNoZWNrIGNhbGxpbmcgb3BlbigndycpIG9uIGEgcGlwZSBlbmRpbmcgd2l0aAorICAgICAgICAjIGEgc291cmNlIHJhaXNlcyBWYWx1ZUVycm9yCisgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCisgICAgICAgIHQucHJlcGVuZCgnYm9ndXNjbWQnLCBwaXBlcy5TT1VSQ0UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQub3BlbiwgJ2JvZ3VzZmlsZScsICd3JykKKworICAgIGRlZiB0ZXN0QmFkQXBwZW5kT3B0aW9ucyhzZWxmKToKKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKworICAgICAgICAjIHRyeSBhIG5vbi1zdHJpbmcgY29tbWFuZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuYXBwZW5kLCA3LCBwaXBlcy5TVERJTl9TVERPVVQpCisKKyAgICAgICAgIyB0cnkgYSB0eXBlIHRoYXQgaXNuJ3QgcmVjb2duaXplZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LmFwcGVuZCwgJ2JvZ3VzY21kJywgJ3h4JykKKworICAgICAgICAjIHNob3VsZG4ndCBiZSBhYmxlIHRvIGFwcGVuZCBhIHNvdXJjZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LmFwcGVuZCwgJ2JvZ3VzY21kJywgcGlwZXMuU09VUkNFKQorCisgICAgICAgICMgY2hlY2sgYXBwZW5kaW5nIHR3byBzaW5rcworICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQorICAgICAgICB0LmFwcGVuZCgnYm9ndXNjbWQnLCBwaXBlcy5TSU5LKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LmFwcGVuZCwgJ2JvZ3VzY21kJywgcGlwZXMuU0lOSykKKworICAgICAgICAjIGNvbW1hbmQgbmVlZGluZyBmaWxlIGlucHV0IGJ1dCB3aXRoIG5vICRJTgorICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LmFwcGVuZCwgJ2JvZ3VzY21kICRPVVQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZXMuRklMRUlOX0ZJTEVPVVQpCisgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuYXBwZW5kLCAnYm9ndXNjbWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZXMuRklMRUlOX1NURE9VVCkKKworICAgICAgICAjIGNvbW1hbmQgbmVlZGluZyBmaWxlIG91dHB1dCBidXQgd2l0aCBubyAkT1VUCisgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuYXBwZW5kLCAnYm9ndXNjbWQgJElOJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVzLkZJTEVJTl9GSUxFT1VUKQorICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LmFwcGVuZCwgJ2JvZ3VzY21kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVzLlNURElOX0ZJTEVPVVQpCisKKworICAgIGRlZiB0ZXN0QmFkUHJlcGVuZE9wdGlvbnMoc2VsZik6CisgICAgICAgIHQgPSBwaXBlcy5UZW1wbGF0ZSgpCisKKyAgICAgICAgIyB0cnkgYSBub24tc3RyaW5nIGNvbW1hbmQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LnByZXBlbmQsIDcsIHBpcGVzLlNURElOX1NURE9VVCkKKworICAgICAgICAjIHRyeSBhIHR5cGUgdGhhdCBpc24ndCByZWNvZ25pemVkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQucHJlcGVuZCwgJ3RyIGEteiBBLVonLCAneHgnKQorCisgICAgICAgICMgc2hvdWxkbid0IGJlIGFibGUgdG8gcHJlcGVuZCBhIHNpbmsKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5wcmVwZW5kLCAnYm9ndXNjbWQnLCBwaXBlcy5TSU5LKQorCisgICAgICAgICMgY2hlY2sgcHJlcGVuZGluZyB0d28gc291cmNlcworICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQorICAgICAgICB0LnByZXBlbmQoJ2JvZ3VzY21kJywgcGlwZXMuU09VUkNFKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnByZXBlbmQsICdib2d1c2NtZCcsIHBpcGVzLlNPVVJDRSkKKworICAgICAgICAjIGNvbW1hbmQgbmVlZGluZyBmaWxlIGlucHV0IGJ1dCB3aXRoIG5vICRJTgorICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnByZXBlbmQsICdib2d1c2NtZCAkT1VUJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVzLkZJTEVJTl9GSUxFT1VUKQorICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnByZXBlbmQsICdib2d1c2NtZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlcy5GSUxFSU5fU1RET1VUKQorCisgICAgICAgICMgY29tbWFuZCBuZWVkaW5nIGZpbGUgb3V0cHV0IGJ1dCB3aXRoIG5vICRPVVQKKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5wcmVwZW5kLCAnYm9ndXNjbWQgJElOJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVzLkZJTEVJTl9GSUxFT1VUKQorICAgICAgICB0ID0gcGlwZXMuVGVtcGxhdGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnByZXBlbmQsICdib2d1c2NtZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlcy5TVERJTl9GSUxFT1VUKQorCisgICAgZGVmIHRlc3RCYWRPcGVuTW9kZShzZWxmKToKKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5vcGVuLCAnYm9ndXNmaWxlJywgJ3gnKQorCisgICAgZGVmIHRlc3RDbG9uZShzZWxmKToKKyAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKKyAgICAgICAgdC5hcHBlbmQoJ3RyIGEteiBBLVonLCBwaXBlcy5TVERJTl9TVERPVVQpCisKKyAgICAgICAgdSA9IHQuY2xvbmUoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHQpLCBpZCh1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0ZXBzLCB1LnN0ZXBzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHQuc3RlcHMpLCBpZCh1LnN0ZXBzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmRlYnVnZ2luZywgdS5kZWJ1Z2dpbmcpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoU2ltcGxlUGlwZVRlc3RzKQorICAgIHJlYXBfY2hpbGRyZW4oKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wa2cucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wa2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYxNjU5YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BrZy5weQpAQCAtMCwwICsxLDI5MiBAQAorIyBUZXN0IHBhY2thZ2VzIChkb3R0ZWQtbmFtZSBpbXBvcnQpCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGV4dHdyYXAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCisjIEhlbHBlcnMgdG8gY3JlYXRlIGFuZCBkZXN0cm95IGhpZXJhcmNoaWVzLgorCitkZWYgY2xlYW5vdXQocm9vdCk6CisgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHJvb3QpCisgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKHJvb3QsIG5hbWUpCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnVsbG5hbWUpIGFuZCBub3Qgb3MucGF0aC5pc2xpbmsoZnVsbG5hbWUpOgorICAgICAgICAgICAgY2xlYW5vdXQoZnVsbG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5yZW1vdmUoZnVsbG5hbWUpCisgICAgb3Mucm1kaXIocm9vdCkKKworZGVmIGZpeGRpcihsc3QpOgorICAgIGlmICJfX2J1aWx0aW5zX18iIGluIGxzdDoKKyAgICAgICAgbHN0LnJlbW92ZSgiX19idWlsdGluc19fIikKKyAgICByZXR1cm4gbHN0CisKKworIyBYWFggVGhpbmdzIHRvIHRlc3QKKyMKKyMgaW1wb3J0IHBhY2thZ2Ugd2l0aG91dCBfX2luaXRfXworIyBpbXBvcnQgcGFja2FnZSB3aXRoIF9faW5pdF9fCisjIF9faW5pdF9fIGltcG9ydGluZyBzdWJtb2R1bGUKKyMgX19pbml0X18gaW1wb3J0aW5nIGdsb2JhbCBtb2R1bGUKKyMgX19pbml0X18gZGVmaW5pbmcgdmFyaWFibGVzCisjIHN1Ym1vZHVsZSBpbXBvcnRpbmcgb3RoZXIgc3VibW9kdWxlCisjIHN1Ym1vZHVsZSBpbXBvcnRpbmcgZ2xvYmFsIG1vZHVsZQorIyBzdWJtb2R1bGUgaW1wb3J0IHN1Ym1vZHVsZSB2aWEgZ2xvYmFsIG5hbWUKKyMgZnJvbSBwYWNrYWdlIGltcG9ydCBzdWJtb2R1bGUKKyMgZnJvbSBwYWNrYWdlIGltcG9ydCBzdWJwYWNrYWdlCisjIGZyb20gcGFja2FnZSBpbXBvcnQgdmFyaWFibGUgKGRlZmluZWQgaW4gX19pbml0X18pCisjIGZyb20gcGFja2FnZSBpbXBvcnQgKiAoZGVmaW5lZCBpbiBfX2luaXRfXykKKworCitjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5yb290ID0gTm9uZQorICAgICAgICBzZWxmLnBrZ25hbWUgPSBOb25lCisgICAgICAgIHNlbGYuc3lzcGF0aCA9IGxpc3Qoc3lzLnBhdGgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5zeXNwYXRoCisgICAgICAgIGlmIHNlbGYucm9vdDogIyBPbmx5IGNsZWFuIGlmIHRoZSB0ZXN0IHdhcyBhY3R1YWxseSBydW4KKyAgICAgICAgICAgIGNsZWFub3V0KHNlbGYucm9vdCkKKworICAgICAgICAjIGRlbGV0ZSBhbGwgbW9kdWxlcyBjb25jZXJuaW5nIHRoZSB0ZXN0ZWQgaGllcmFyY2h5CisgICAgICAgIGlmIHNlbGYucGtnbmFtZToKKyAgICAgICAgICAgIG1vZHVsZXMgPSBbbmFtZSBmb3IgbmFtZSBpbiBzeXMubW9kdWxlcworICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnBrZ25hbWUgaW4gbmFtZS5zcGxpdCgnLicpXQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gbW9kdWxlczoKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbmFtZV0KKworICAgIGRlZiBydW5fY29kZShzZWxmLCBjb2RlKToKKyAgICAgICAgZXhlYyh0ZXh0d3JhcC5kZWRlbnQoY29kZSksIGdsb2JhbHMoKSwgeyJzZWxmIjogc2VsZn0pCisKKyAgICBkZWYgbWtoaWVyKHNlbGYsIGRlc2NyKToKKyAgICAgICAgcm9vdCA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgcm9vdCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocm9vdCk6CisgICAgICAgICAgICBvcy5ta2Rpcihyb290KQorICAgICAgICBmb3IgbmFtZSwgY29udGVudHMgaW4gZGVzY3I6CisgICAgICAgICAgICBjb21wcyA9IG5hbWUuc3BsaXQoKQorICAgICAgICAgICAgZnVsbG5hbWUgPSByb290CisgICAgICAgICAgICBmb3IgYyBpbiBjb21wczoKKyAgICAgICAgICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihmdWxsbmFtZSwgYykKKyAgICAgICAgICAgIGlmIGNvbnRlbnRzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgb3MubWtkaXIoZnVsbG5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKGZ1bGxuYW1lLCAidyIpCisgICAgICAgICAgICAgICAgZi53cml0ZShjb250ZW50cykKKyAgICAgICAgICAgICAgICBpZiBjb250ZW50cyBhbmQgY29udGVudHNbLTFdICE9ICdcbic6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJ1xuJykKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5yb290ID0gcm9vdAorICAgICAgICAjIHBhY2thZ2UgbmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgZmlyc3QgaXRlbQorICAgICAgICBzZWxmLnBrZ25hbWUgPSBkZXNjclswXVswXQorCisgICAgZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgaGllciA9IFsoInQxIiwgTm9uZSksICgidDEgX19pbml0X18iK29zLmV4dHNlcCsicHkiLCAiIildCisgICAgICAgIHNlbGYubWtoaWVyKGhpZXIpCisgICAgICAgIGltcG9ydCB0MQorCisgICAgZGVmIHRlc3RfMihzZWxmKToKKyAgICAgICAgaGllciA9IFsKKyAgICAgICAgICgidDIiLCBOb25lKSwKKyAgICAgICAgICgidDIgX19pbml0X18iK29zLmV4dHNlcCsicHkiLCAiJ2RvYyBmb3IgdDInIiksCisgICAgICAgICAoInQyIHN1YiIsIE5vbmUpLAorICAgICAgICAgKCJ0MiBzdWIgX19pbml0X18iK29zLmV4dHNlcCsicHkiLCAiIiksCisgICAgICAgICAoInQyIHN1YiBzdWJzdWIiLCBOb25lKSwKKyAgICAgICAgICgidDIgc3ViIHN1YnN1YiBfX2luaXRfXyIrb3MuZXh0c2VwKyJweSIsICJzcGFtID0gMSIpLAorICAgICAgICBdCisgICAgICAgIHNlbGYubWtoaWVyKGhpZXIpCisKKyAgICAgICAgaW1wb3J0IHQyLnN1YgorICAgICAgICBpbXBvcnQgdDIuc3ViLnN1YnN1YgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLl9fbmFtZV9fLCAidDIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnN1Yi5fX25hbWVfXywgInQyLnN1YiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuc3ViLnN1YnN1Yi5fX25hbWVfXywgInQyLnN1Yi5zdWJzdWIiKQorCisgICAgICAgICMgVGhpcyBleGVjIGNyYXAgaXMgbmVlZGVkIGJlY2F1c2UgUHkzayBmb3JiaWRzICdpbXBvcnQgKicgb3V0c2lkZQorICAgICAgICAjIG9mIG1vZHVsZS1zY29wZSBhbmQgX19pbXBvcnRfXygpIGlzIGluc3VmZmljaWVudCBmb3Igd2hhdCB3ZSBuZWVkLgorICAgICAgICBzID0gIiIiCisgICAgICAgICAgICBpbXBvcnQgdDIKKyAgICAgICAgICAgIGZyb20gdDIgaW1wb3J0ICoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKCksIFsnc2VsZicsICdzdWInLCAndDInXSkKKyAgICAgICAgICAgICIiIgorICAgICAgICBzZWxmLnJ1bl9jb2RlKHMpCisKKyAgICAgICAgZnJvbSB0MiBpbXBvcnQgc3ViCisgICAgICAgIGZyb20gdDIuc3ViIGltcG9ydCBzdWJzdWIKKyAgICAgICAgZnJvbSB0Mi5zdWIuc3Vic3ViIGltcG9ydCBzcGFtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fbmFtZV9fLCAidDIuc3ViIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJzdWIuX19uYW1lX18sICJ0Mi5zdWIuc3Vic3ViIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWIuc3Vic3ViLl9fbmFtZV9fLCAidDIuc3ViLnN1YnN1YiIpCisgICAgICAgIGZvciBuYW1lIGluIFsnc3BhbScsICdzdWInLCAnc3Vic3ViJywgJ3QyJ106CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jYWxzKClbIm5hbWUiXSwgIkZhaWxlZCB0byBpbXBvcnQgJXMiICUgbmFtZSkKKworICAgICAgICBpbXBvcnQgdDIuc3ViCisgICAgICAgIGltcG9ydCB0Mi5zdWIuc3Vic3ViCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuX19uYW1lX18sICJ0MiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuc3ViLl9fbmFtZV9fLCAidDIuc3ViIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi5zdWIuc3Vic3ViLl9fbmFtZV9fLCAidDIuc3ViLnN1YnN1YiIpCisKKyAgICAgICAgcyA9ICIiIgorICAgICAgICAgICAgZnJvbSB0MiBpbXBvcnQgKgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpcigpLCBbJ3NlbGYnLCAnc3ViJ10pCisgICAgICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5ydW5fY29kZShzKQorCisgICAgZGVmIHRlc3RfMyhzZWxmKToKKyAgICAgICAgaGllciA9IFsKKyAgICAgICAgICAgICAgICAoInQzIiwgTm9uZSksCisgICAgICAgICAgICAgICAgKCJ0MyBfX2luaXRfXyIrb3MuZXh0c2VwKyJweSIsICIiKSwKKyAgICAgICAgICAgICAgICAoInQzIHN1YiIsIE5vbmUpLAorICAgICAgICAgICAgICAgICgidDMgc3ViIF9faW5pdF9fIitvcy5leHRzZXArInB5IiwgIiIpLAorICAgICAgICAgICAgICAgICgidDMgc3ViIHN1YnN1YiIsIE5vbmUpLAorICAgICAgICAgICAgICAgICgidDMgc3ViIHN1YnN1YiBfX2luaXRfXyIrb3MuZXh0c2VwKyJweSIsICJzcGFtID0gMSIpLAorICAgICAgICAgICAgICAgXQorICAgICAgICBzZWxmLm1raGllcihoaWVyKQorCisgICAgICAgIGltcG9ydCB0My5zdWIuc3Vic3ViCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMuX19uYW1lX18sICJ0MyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMuc3ViLl9fbmFtZV9fLCAidDMuc3ViIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My5zdWIuc3Vic3ViLl9fbmFtZV9fLCAidDMuc3ViLnN1YnN1YiIpCisKKyAgICBkZWYgdGVzdF80KHNlbGYpOgorICAgICAgICBoaWVyID0gWworICAgICAgICAoInQ0LnB5IiwgInJhaXNlIFJ1bnRpbWVFcnJvcignU2hvdWxkbnQgbG9hZCB0NC5weScpIiksCisgICAgICAgICgidDQiLCBOb25lKSwKKyAgICAgICAgKCJ0NCBfX2luaXRfXyIrb3MuZXh0c2VwKyJweSIsICIiKSwKKyAgICAgICAgKCJ0NCBzdWIucHkiLCAicmFpc2UgUnVudGltZUVycm9yKCdTaG91bGRudCBsb2FkIHN1Yi5weScpIiksCisgICAgICAgICgidDQgc3ViIiwgTm9uZSksCisgICAgICAgICgidDQgc3ViIF9faW5pdF9fIitvcy5leHRzZXArInB5IiwgIiIpLAorICAgICAgICAoInQ0IHN1YiBzdWJzdWIiK29zLmV4dHNlcCsicHkiLAorICAgICAgICAgInJhaXNlIFJ1bnRpbWVFcnJvcignU2hvdWxkbnQgbG9hZCBzdWJzdWIucHknKSIpLAorICAgICAgICAoInQ0IHN1YiBzdWJzdWIiLCBOb25lKSwKKyAgICAgICAgKCJ0NCBzdWIgc3Vic3ViIF9faW5pdF9fIitvcy5leHRzZXArInB5IiwgInNwYW0gPSAxIiksCisgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYubWtoaWVyKGhpZXIpCisKKyAgICAgICAgcyA9ICIiIgorICAgICAgICAgICAgZnJvbSB0NC5zdWIuc3Vic3ViIGltcG9ydCAqCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwYW0sIDEpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5ydW5fY29kZShzKQorCisgICAgZGVmIHRlc3RfNShzZWxmKToKKyAgICAgICAgaGllciA9IFsKKyAgICAgICAgKCJ0NSIsIE5vbmUpLAorICAgICAgICAoInQ1IF9faW5pdF9fIitvcy5leHRzZXArInB5IiwgImltcG9ydCB0NS5mb28iKSwKKyAgICAgICAgKCJ0NSBzdHJpbmciK29zLmV4dHNlcCsicHkiLCAic3BhbSA9IDEiKSwKKyAgICAgICAgKCJ0NSBmb28iK29zLmV4dHNlcCsicHkiLAorICAgICAgICAgImZyb20gLiBpbXBvcnQgc3RyaW5nOyBhc3NlcnQgc3RyaW5nLnNwYW0gPT0gMSIpLAorICAgICAgICAgXQorICAgICAgICBzZWxmLm1raGllcihoaWVyKQorCisgICAgICAgIGltcG9ydCB0NQorICAgICAgICBzID0gIiIiCisgICAgICAgICAgICBmcm9tIHQ1IGltcG9ydCAqCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcigpLCBbJ2ZvbycsICdzZWxmJywgJ3N0cmluZycsICd0NSddKQorICAgICAgICAgICAgIiIiCisgICAgICAgIHNlbGYucnVuX2NvZGUocykKKworICAgICAgICBpbXBvcnQgdDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHQ1KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbmFtZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJywgJ2ZvbycsICdzdHJpbmcnLCAndDUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHQ1LmZvbykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHQ1LnN0cmluZykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX25hbWVfXycsJ19fcGFja2FnZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwYW0nXSkKKworICAgIGRlZiB0ZXN0XzYoc2VsZik6CisgICAgICAgIGhpZXIgPSBbCisgICAgICAgICAgICAgICAgKCJ0NiIsIE5vbmUpLAorICAgICAgICAgICAgICAgICgidDYgX19pbml0X18iK29zLmV4dHNlcCsicHkiLAorICAgICAgICAgICAgICAgICAiX19hbGxfXyA9IFsnc3BhbScsICdoYW0nLCAnZWdncyddIiksCisgICAgICAgICAgICAgICAgKCJ0NiBzcGFtIitvcy5leHRzZXArInB5IiwgIiIpLAorICAgICAgICAgICAgICAgICgidDYgaGFtIitvcy5leHRzZXArInB5IiwgIiIpLAorICAgICAgICAgICAgICAgICgidDYgZWdncyIrb3MuZXh0c2VwKyJweSIsICIiKSwKKyAgICAgICAgICAgICAgIF0KKyAgICAgICAgc2VsZi5ta2hpZXIoaGllcikKKworICAgICAgICBpbXBvcnQgdDYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHQ2KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2FsbF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nXSkKKyAgICAgICAgcyA9ICIiIgorICAgICAgICAgICAgaW1wb3J0IHQ2CisgICAgICAgICAgICBmcm9tIHQ2IGltcG9ydCAqCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodDYpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2FsbF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlZ2dzJywgJ2hhbScsICdzcGFtJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcigpLCBbJ2VnZ3MnLCAnaGFtJywgJ3NlbGYnLCAnc3BhbScsICd0NiddKQorICAgICAgICAgICAgIiIiCisgICAgICAgIHNlbGYucnVuX2NvZGUocykKKworICAgIGRlZiB0ZXN0Xzcoc2VsZik6CisgICAgICAgIGhpZXIgPSBbCisgICAgICAgICAgICAgICAgKCJ0NyIsIE5vbmUpLAorICAgICAgICAgICAgICAgICgidDciK29zLmV4dHNlcCsicHkiLCAiIiksCisgICAgICAgICAgICAgICAgKCJ0NyBfX2luaXRfXyIrb3MuZXh0c2VwKyJweSIsICIiKSwKKyAgICAgICAgICAgICAgICAoInQ3IHN1YiIrb3MuZXh0c2VwKyJweSIsCisgICAgICAgICAgICAgICAgICJyYWlzZSBSdW50aW1lRXJyb3IoJ1Nob3VsZG50IGxvYWQgc3ViLnB5JykiKSwKKyAgICAgICAgICAgICAgICAoInQ3IHN1YiIsIE5vbmUpLAorICAgICAgICAgICAgICAgICgidDcgc3ViIF9faW5pdF9fIitvcy5leHRzZXArInB5IiwgIiIpLAorICAgICAgICAgICAgICAgICgidDcgc3ViICIrb3MuZXh0c2VwKyJweSIsCisgICAgICAgICAgICAgICAgICJyYWlzZSBSdW50aW1lRXJyb3IoJ1Nob3VsZG50IGxvYWQgc3Vic3ViLnB5JykiKSwKKyAgICAgICAgICAgICAgICAoInQ3IHN1YiBzdWJzdWIiLCBOb25lKSwKKyAgICAgICAgICAgICAgICAoInQ3IHN1YiBzdWJzdWIgX19pbml0X18iK29zLmV4dHNlcCsicHkiLAorICAgICAgICAgICAgICAgICAic3BhbSA9IDEiKSwKKyAgICAgICAgICAgICAgIF0KKyAgICAgICAgc2VsZi5ta2hpZXIoaGllcikKKworCisgICAgICAgIHQ3LCBzdWIsIHN1YnN1YiA9IE5vbmUsIE5vbmUsIE5vbmUKKyAgICAgICAgaW1wb3J0IHQ3IGFzIHRhcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodGFzKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbmFtZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodDcpCisgICAgICAgIGZyb20gdDcgaW1wb3J0IHN1YiBhcyBzdWJwYXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHN1YnBhcikpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX25hbWVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXyddKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YikKKyAgICAgICAgZnJvbSB0Ny5zdWIgaW1wb3J0IHN1YnN1YiBhcyBzdWJzdWJzdWIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHN1YnN1YnN1YikpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX25hbWVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJywgJ3NwYW0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0NykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3Vic3ViKQorICAgICAgICBmcm9tIHQ3LnN1Yi5zdWJzdWIgaW1wb3J0IHNwYW0gYXMgaGFtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFtLCAxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWJzdWIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF84KHNlbGYpOgorICAgICAgICBoaWVyID0gWworICAgICAgICAgICAgICAgICgidDgiLCBOb25lKSwKKyAgICAgICAgICAgICAgICAoInQ4IF9faW5pdF9fIitvcy5leHRzZXArInB5IiwgIidkb2MgZm9yIHQ4JyIpLAorICAgICAgICAgICAgICAgXQorICAgICAgICBzZWxmLm1raGllcihoaWVyKQorCisgICAgICAgIGltcG9ydCB0OAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQ4Ll9fZG9jX18sICJkb2MgZm9yIHQ4IikKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZDQ4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKQEAgLTAsMCArMSw4MyBAQAoraW1wb3J0IG9zLCBzeXMsIHN0cmluZywgcmFuZG9tLCB0ZW1wZmlsZSwgdW5pdHRlc3QKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2NsYXNzIFRlc3RJbXBvcnQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgc2VsZi5wYWNrYWdlX25hbWUgPSAnUEFDS0FHRV8nCisgICAgICAgIHdoaWxlIHNlbGYucGFja2FnZV9uYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX25hbWUgKz0gcmFuZG9tLmNob29zZShzdHJpbmcubGV0dGVycykKKyAgICAgICAgc2VsZi5tb2R1bGVfbmFtZSA9IHNlbGYucGFja2FnZV9uYW1lICsgJy5mb28nCisgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KQorCisgICAgZGVmIHJlbW92ZV9tb2R1bGVzKHNlbGYpOgorICAgICAgICBmb3IgbW9kdWxlX25hbWUgaW4gKHNlbGYucGFja2FnZV9uYW1lLCBzZWxmLm1vZHVsZV9uYW1lKToKKyAgICAgICAgICAgIGlmIG1vZHVsZV9uYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBzeXMucGF0aC5hcHBlbmQoc2VsZi50ZXN0X2RpcikKKyAgICAgICAgc2VsZi5wYWNrYWdlX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2FnZV9uYW1lKQorICAgICAgICBvcy5ta2RpcihzZWxmLnBhY2thZ2VfZGlyKQorICAgICAgICBvcGVuKG9zLnBhdGguam9pbigKKyAgICAgICAgICAgICAgICBzZWxmLnBhY2thZ2VfZGlyLCAnX19pbml0X18nK29zLmV4dHNlcCsncHknKSwgJ3cnKS5jbG9zZSgpCisgICAgICAgIHNlbGYubW9kdWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlX2RpciwgJ2Zvbycrb3MuZXh0c2VwKydweScpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIoc2VsZi5wYWNrYWdlX2Rpcik6CisgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYucGFja2FnZV9kaXIsIGZpbGUpKQorICAgICAgICBvcy5ybWRpcihzZWxmLnBhY2thZ2VfZGlyKQorICAgICAgICBvcy5ybWRpcihzZWxmLnRlc3RfZGlyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHN5cy5wYXRoLmNvdW50KHNlbGYudGVzdF9kaXIpLCAwKQorICAgICAgICBzeXMucGF0aC5yZW1vdmUoc2VsZi50ZXN0X2RpcikKKyAgICAgICAgc2VsZi5yZW1vdmVfbW9kdWxlcygpCisKKyAgICBkZWYgcmV3cml0ZV9maWxlKHNlbGYsIGNvbnRlbnRzKToKKyAgICAgICAgZm9yIGV4dGVuc2lvbiBpbiAiY28iOgorICAgICAgICAgICAgY29tcGlsZWRfcGF0aCA9IHNlbGYubW9kdWxlX3BhdGggKyBleHRlbnNpb24KKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNvbXBpbGVkX3BhdGgpOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShjb21waWxlZF9wYXRoKQorICAgICAgICBmID0gb3BlbihzZWxmLm1vZHVsZV9wYXRoLCAndycpCisgICAgICAgIGYud3JpdGUoY29udGVudHMpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcGFja2FnZV9pbXBvcnRfX3NlbWFudGljcyhzZWxmKToKKworICAgICAgICAjIEdlbmVyYXRlIGEgY291cGxlIG9mIGJyb2tlbiBtb2R1bGVzIHRvIHRyeSBpbXBvcnRpbmcuCisKKyAgICAgICAgIyAuLi50cnkgbG9hZGluZyB0aGUgbW9kdWxlIHdoZW4gdGhlcmUncyBhIFN5bnRheEVycm9yCisgICAgICAgIHNlbGYucmV3cml0ZV9maWxlKCdmb3InKQorICAgICAgICB0cnk6IF9faW1wb3J0X18oc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHJhaXNlIFJ1bnRpbWVFcnJvciwgJ0ZhaWxlZCB0byBpbmR1Y2UgU3ludGF4RXJyb3InCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5tb2R1bGVfbmFtZSwgc3lzLm1vZHVsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihzeXMubW9kdWxlc1tzZWxmLnBhY2thZ2VfbmFtZV0sICdmb28nKSkKKworICAgICAgICAjIC4uLm1ha2UgdXAgYSB2YXJpYWJsZSBuYW1lIHRoYXQgaXNuJ3QgYm91bmQgaW4gX19idWlsdGluc19fCisgICAgICAgIHZhciA9ICdhJworICAgICAgICB3aGlsZSB2YXIgaW4gZGlyKF9fYnVpbHRpbnNfXyk6CisgICAgICAgICAgICB2YXIgKz0gcmFuZG9tLmNob29zZShzdHJpbmcubGV0dGVycykKKworICAgICAgICAjIC4uLm1ha2UgYSBtb2R1bGUgdGhhdCBqdXN0IGNvbnRhaW5zIHRoYXQKKyAgICAgICAgc2VsZi5yZXdyaXRlX2ZpbGUodmFyKQorCisgICAgICAgIHRyeTogX19pbXBvcnRfXyhzZWxmLm1vZHVsZV9uYW1lKQorICAgICAgICBleGNlcHQgTmFtZUVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHJhaXNlIFJ1bnRpbWVFcnJvciwgJ0ZhaWxlZCB0byBpbmR1Y2UgTmFtZUVycm9yLicKKworICAgICAgICAjIC4uLm5vdyAgY2hhbmdlICB0aGUgbW9kdWxlICBzbyAgdGhhdCAgdGhlIE5hbWVFcnJvciAgZG9lc24ndAorICAgICAgICAjIGhhcHBlbgorICAgICAgICBzZWxmLnJld3JpdGVfZmlsZSgnJXMgPSAxJyAlIHZhcikKKyAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhzZWxmLm1vZHVsZV9uYW1lKS5mb28KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG1vZHVsZSwgdmFyKSwgMSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFRlc3RJbXBvcnQpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcGtndXRpbC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BrZ3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY2NWU5NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BrZ3V0aWwucHkKQEAgLTAsMCArMSwxNDEgQEAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgaW1wCitpbXBvcnQgcGtndXRpbAoraW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgemlwZmlsZQorCisKKworY2xhc3MgUGtndXRpbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kaXJuYW1lID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzaHV0aWwucm10cmVlLCBzZWxmLmRpcm5hbWUpCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBzZWxmLmRpcm5hbWUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGRlbCBzeXMucGF0aFswXQorCisgICAgZGVmIHRlc3RfZ2V0ZGF0YV9maWxlc3lzKHNlbGYpOgorICAgICAgICBwa2cgPSAndGVzdF9nZXRkYXRhX2ZpbGVzeXMnCisKKyAgICAgICAgIyBJbmNsdWRlIGEgTEYgYW5kIGEgQ1JMRiwgdG8gdGVzdCB0aGF0IGJpbmFyeSBkYXRhIGlzIHJlYWQgYmFjaworICAgICAgICBSRVNPVVJDRV9EQVRBID0gJ0hlbGxvLCB3b3JsZCFcblNlY29uZCBsaW5lXHJcblRoaXJkIGxpbmUnCisKKyAgICAgICAgIyBNYWtlIGEgcGFja2FnZSB3aXRoIHNvbWUgcmVzb3VyY2VzCisgICAgICAgIHBhY2thZ2VfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZGlybmFtZSwgcGtnKQorICAgICAgICBvcy5ta2RpcihwYWNrYWdlX2RpcikKKyAgICAgICAgIyBFbXB0eSBpbml0LnB5CisgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihwYWNrYWdlX2RpciwgJ19faW5pdF9fLnB5JyksICJ3YiIpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAjIFJlc291cmNlIGZpbGVzLCByZXMudHh0LCBzdWIvcmVzLnR4dAorICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4ocGFja2FnZV9kaXIsICdyZXMudHh0JyksICJ3YiIpCisgICAgICAgIGYud3JpdGUoUkVTT1VSQ0VfREFUQSkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihwYWNrYWdlX2RpciwgJ3N1YicpKQorICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4ocGFja2FnZV9kaXIsICdzdWInLCAncmVzLnR4dCcpLCAid2IiKQorICAgICAgICBmLndyaXRlKFJFU09VUkNFX0RBVEEpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICMgQ2hlY2sgd2UgY2FuIHJlYWQgdGhlIHJlc291cmNlcworICAgICAgICByZXMxID0gcGtndXRpbC5nZXRfZGF0YShwa2csICdyZXMudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMxLCBSRVNPVVJDRV9EQVRBKQorICAgICAgICByZXMyID0gcGtndXRpbC5nZXRfZGF0YShwa2csICdzdWIvcmVzLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzMiwgUkVTT1VSQ0VfREFUQSkKKworICAgICAgICBkZWwgc3lzLm1vZHVsZXNbcGtnXQorCisgICAgZGVmIHRlc3RfZ2V0ZGF0YV96aXBmaWxlKHNlbGYpOgorICAgICAgICB6aXAgPSAndGVzdF9nZXRkYXRhX3ppcGZpbGUuemlwJworICAgICAgICBwa2cgPSAndGVzdF9nZXRkYXRhX3ppcGZpbGUnCisKKyAgICAgICAgIyBJbmNsdWRlIGEgTEYgYW5kIGEgQ1JMRiwgdG8gdGVzdCB0aGF0IGJpbmFyeSBkYXRhIGlzIHJlYWQgYmFjaworICAgICAgICBSRVNPVVJDRV9EQVRBID0gJ0hlbGxvLCB3b3JsZCFcblNlY29uZCBsaW5lXHJcblRoaXJkIGxpbmUnCisKKyAgICAgICAgIyBNYWtlIGEgcGFja2FnZSB3aXRoIHNvbWUgcmVzb3VyY2VzCisgICAgICAgIHppcF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuZGlybmFtZSwgemlwKQorICAgICAgICB6ID0gemlwZmlsZS5aaXBGaWxlKHppcF9maWxlLCAndycpCisKKyAgICAgICAgIyBFbXB0eSBpbml0LnB5CisgICAgICAgIHoud3JpdGVzdHIocGtnICsgJy9fX2luaXRfXy5weScsICIiKQorICAgICAgICAjIFJlc291cmNlIGZpbGVzLCByZXMudHh0LCBzdWIvcmVzLnR4dAorICAgICAgICB6LndyaXRlc3RyKHBrZyArICcvcmVzLnR4dCcsIFJFU09VUkNFX0RBVEEpCisgICAgICAgIHoud3JpdGVzdHIocGtnICsgJy9zdWIvcmVzLnR4dCcsIFJFU09VUkNFX0RBVEEpCisgICAgICAgIHouY2xvc2UoKQorCisgICAgICAgICMgQ2hlY2sgd2UgY2FuIHJlYWQgdGhlIHJlc291cmNlcworICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgemlwX2ZpbGUpCisgICAgICAgIHJlczEgPSBwa2d1dGlsLmdldF9kYXRhKHBrZywgJ3Jlcy50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlczEsIFJFU09VUkNFX0RBVEEpCisgICAgICAgIHJlczIgPSBwa2d1dGlsLmdldF9kYXRhKHBrZywgJ3N1Yi9yZXMudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMyLCBSRVNPVVJDRV9EQVRBKQorICAgICAgICBkZWwgc3lzLnBhdGhbMF0KKworICAgICAgICBkZWwgc3lzLm1vZHVsZXNbcGtnXQorCisgICAgZGVmIHRlc3RfdW5yZWFkYWJsZV9kaXJfb25fc3lzcGF0aChzZWxmKToKKyAgICAgICAgIyBpc3N1ZTczNjcgLSB3YWxrX3BhY2thZ2VzIGZhaWxlZCBpZiB1bnJlYWRhYmxlIGRpciBvbiBzeXMucGF0aAorICAgICAgICBwYWNrYWdlX25hbWUgPSAidW5yZWFkYWJsZV9wYWNrYWdlIgorICAgICAgICBkID0gb3MucGF0aC5qb2luKHNlbGYuZGlybmFtZSwgcGFja2FnZV9uYW1lKQorICAgICAgICAjIHRoaXMgZG9lcyBub3QgYXBwZWFyIHRvIGNyZWF0ZSBhbiB1bnJlYWRhYmxlIGRpciBvbiBXaW5kb3dzCisgICAgICAgICMgICBidXQgdGhlIHRlc3Qgc2hvdWxkIG5vdCBmYWlsIGFueXdheQorICAgICAgICBvcy5ta2RpcihkLCAwKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3Mucm1kaXIsIGQpCisgICAgICAgIGZvciB0IGluIHBrZ3V0aWwud2Fsa19wYWNrYWdlcyhwYXRoPVtzZWxmLmRpcm5hbWVdKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgidW5leHBlY3RlZCBwYWNrYWdlIGZvdW5kIikKKworY2xhc3MgUGtndXRpbFBFUDMwMlRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGNsYXNzIE15VGVzdExvYWRlcihvYmplY3QpOgorICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAgICAgIyBDcmVhdGUgYW4gZW1wdHkgbW9kdWxlCisgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlcy5zZXRkZWZhdWx0KGZ1bGxuYW1lLCBpbXAubmV3X21vZHVsZShmdWxsbmFtZSkpCisgICAgICAgICAgICBtb2QuX19maWxlX18gPSAiPCVzPiIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICAgICAgbW9kLl9fbG9hZGVyX18gPSBzZWxmCisgICAgICAgICAgICAjIE1ha2UgaXQgYSBwYWNrYWdlCisgICAgICAgICAgICBtb2QuX19wYXRoX18gPSBbXQorICAgICAgICAgICAgIyBDb3VudCBob3cgbWFueSB0aW1lcyB0aGUgbW9kdWxlIGlzIHJlbG9hZGVkCisgICAgICAgICAgICBtb2QuX19kaWN0X19bJ2xvYWRzJ10gPSBtb2QuX19kaWN0X18uZ2V0KCdsb2FkcycsMCkgKyAxCisgICAgICAgICAgICByZXR1cm4gbW9kCisKKyAgICAgICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuICJIZWxsbywgd29ybGQhIgorCisgICAgY2xhc3MgTXlUZXN0SW1wb3J0ZXIob2JqZWN0KToKKyAgICAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIFBrZ3V0aWxQRVAzMDJUZXN0cy5NeVRlc3RMb2FkZXIoKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzeXMubWV0YV9wYXRoLmluc2VydCgwLCBzZWxmLk15VGVzdEltcG9ydGVyKCkpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGRlbCBzeXMubWV0YV9wYXRoWzBdCisKKyAgICBkZWYgdGVzdF9nZXRkYXRhX3BlcDMwMihzZWxmKToKKyAgICAgICAgIyBVc2UgYSBkdW1teSBpbXBvcnRlci9sb2FkZXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2d1dGlsLmdldF9kYXRhKCdmb28nLCAnZHVtbXknKSwgIkhlbGxvLCB3b3JsZCEiKQorICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ2ZvbyddCisKKyAgICBkZWYgdGVzdF9hbHJlYWR5bG9hZGVkKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IGdldF9kYXRhIHdvcmtzIHdpdGhvdXQgcmVsb2FkaW5nIC0gdGhlICJsb2FkcyIgbW9kdWxlCisgICAgICAgICMgdmFyaWFibGUgaW4gdGhlIGV4YW1wbGUgbG9hZGVyIHNob3VsZCBjb3VudCBob3cgbWFueSB0aW1lcyBhIHJlbG9hZAorICAgICAgICAjIG9jY3Vycy4KKyAgICAgICAgaW1wb3J0IGZvbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5sb2FkcywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2d1dGlsLmdldF9kYXRhKCdmb28nLCAnZHVtbXknKSwgIkhlbGxvLCB3b3JsZCEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5sb2FkcywgMSkKKyAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydmb28nXQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFBrZ3V0aWxUZXN0cywgUGtndXRpbFBFUDMwMlRlc3RzKQorICAgICMgdGhpcyBpcyBuZWNlc3NhcnkgaWYgdGVzdCBpcyBydW4gcmVwZWF0ZWQgKGxpa2Ugd2hlbiBmaW5kaW5nIGxlYWtzKQorICAgIGltcG9ydCB6aXBpbXBvcnQKKyAgICB6aXBpbXBvcnQuX3ppcF9kaXJlY3RvcnlfY2FjaGUuY2xlYXIoKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wbGF0Zm9ybS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BsYXRmb3JtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MWQ0MjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wbGF0Zm9ybS5weQpAQCAtMCwwICsxLDI1NCBAQAoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgUGxhdGZvcm1UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9hcmNoaXRlY3R1cmUoc2VsZik6CisgICAgICAgIHJlcyA9IHBsYXRmb3JtLmFyY2hpdGVjdHVyZSgpCisKKyAgICBpZiBoYXNhdHRyKG9zLCAic3ltbGluayIpOgorICAgICAgICBkZWYgdGVzdF9hcmNoaXRlY3R1cmVfdmlhX3N5bWxpbmsoc2VsZik6ICMgaXNzdWUzNzYyCisgICAgICAgICAgICBkZWYgZ2V0KHB5dGhvbik6CisgICAgICAgICAgICAgICAgY21kID0gW3B5dGhvbiwgJy1jJywKKyAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBwbGF0Zm9ybTsgcHJpbnQgcGxhdGZvcm0uYXJjaGl0ZWN0dXJlKCknXQorICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICByZWFsID0gb3MucGF0aC5yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkKKyAgICAgICAgICAgIGxpbmsgPSBvcy5wYXRoLmFic3BhdGgodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIG9zLnN5bWxpbmsocmVhbCwgbGluaykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldChyZWFsKSwgZ2V0KGxpbmspKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUobGluaykKKworICAgIGRlZiB0ZXN0X3BsYXRmb3JtKHNlbGYpOgorICAgICAgICBmb3IgYWxpYXNlZCBpbiAoRmFsc2UsIFRydWUpOgorICAgICAgICAgICAgZm9yIHRlcnNlIGluIChGYWxzZSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgcmVzID0gcGxhdGZvcm0ucGxhdGZvcm0oYWxpYXNlZCwgdGVyc2UpCisKKyAgICBkZWYgdGVzdF9zeXN0ZW0oc2VsZik6CisgICAgICAgIHJlcyA9IHBsYXRmb3JtLnN5c3RlbSgpCisKKyAgICBkZWYgdGVzdF9ub2RlKHNlbGYpOgorICAgICAgICByZXMgPSBwbGF0Zm9ybS5ub2RlKCkKKworICAgIGRlZiB0ZXN0X3JlbGVhc2Uoc2VsZik6CisgICAgICAgIHJlcyA9IHBsYXRmb3JtLnJlbGVhc2UoKQorCisgICAgZGVmIHRlc3RfdmVyc2lvbihzZWxmKToKKyAgICAgICAgcmVzID0gcGxhdGZvcm0udmVyc2lvbigpCisKKyAgICBkZWYgdGVzdF9tYWNoaW5lKHNlbGYpOgorICAgICAgICByZXMgPSBwbGF0Zm9ybS5tYWNoaW5lKCkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NvcihzZWxmKToKKyAgICAgICAgcmVzID0gcGxhdGZvcm0ucHJvY2Vzc29yKCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zYXZlX3ZlcnNpb24gPSBzeXMudmVyc2lvbgorICAgICAgICBzZWxmLnNhdmVfc3VidmVyc2lvbiA9IHN5cy5zdWJ2ZXJzaW9uCisgICAgICAgIHNlbGYuc2F2ZV9wbGF0Zm9ybSA9IHN5cy5wbGF0Zm9ybQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzeXMudmVyc2lvbiA9IHNlbGYuc2F2ZV92ZXJzaW9uCisgICAgICAgIHN5cy5zdWJ2ZXJzaW9uID0gc2VsZi5zYXZlX3N1YnZlcnNpb24KKyAgICAgICAgc3lzLnBsYXRmb3JtID0gc2VsZi5zYXZlX3BsYXRmb3JtCisKKyAgICBkZWYgdGVzdF9zeXNfdmVyc2lvbihzZWxmKToKKyAgICAgICAgIyBPbGQgdGVzdC4KKyAgICAgICAgZm9yIGlucHV0LCBvdXRwdXQgaW4gKAorICAgICAgICAgICAgKCcyLjQuMyAoIzEsIEp1biAyMSAyMDA2LCAxMzo1NDoyMSkgXG5bR0NDIDMuMy40IChwcmUgMy4zLjUgMjAwNDA4MDkpXScsCisgICAgICAgICAgICAgKCdDUHl0aG9uJywgJzIuNC4zJywgJycsICcnLCAnMScsICdKdW4gMjEgMjAwNiAxMzo1NDoyMScsICdHQ0MgMy4zLjQgKHByZSAzLjMuNSAyMDA0MDgwOSknKSksCisgICAgICAgICAgICAoJ0lyb25QeXRob24gMS4wLjYwODE2IG9uIC5ORVQgMi4wLjUwNzI3LjQyJywKKyAgICAgICAgICAgICAoJ0lyb25QeXRob24nLCAnMS4wLjYwODE2JywgJycsICcnLCAnJywgJycsICcuTkVUIDIuMC41MDcyNy40MicpKSwKKyAgICAgICAgICAgICgnSXJvblB5dGhvbiAxLjAgKDEuMC42MTAwNS4xOTc3KSBvbiAuTkVUIDIuMC41MDcyNy40MicsCisgICAgICAgICAgICAgKCdJcm9uUHl0aG9uJywgJzEuMC4wJywgJycsICcnLCAnJywgJycsICcuTkVUIDIuMC41MDcyNy40MicpKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICAjIGJyYW5jaCBhbmQgcmV2aXNpb24gYXJlIG5vdCAicGFyc2VkIiwgYnV0IGZldGNoZWQKKyAgICAgICAgICAgICMgZnJvbSBzeXMuc3VidmVyc2lvbi4gIElnbm9yZSB0aGVtCisgICAgICAgICAgICAobmFtZSwgdmVyc2lvbiwgYnJhbmNoLCByZXZpc2lvbiwgYnVpbGRubywgYnVpbGRkYXRlLCBjb21waWxlcikgXAorICAgICAgICAgICAgICAgICAgID0gcGxhdGZvcm0uX3N5c192ZXJzaW9uKGlucHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAobmFtZSwgdmVyc2lvbiwgJycsICcnLCBidWlsZG5vLCBidWlsZGRhdGUsIGNvbXBpbGVyKSwgb3V0cHV0KQorCisgICAgICAgICMgVGVzdHMgZm9yIHB5dGhvbl9pbXBsZW1lbnRhdGlvbigpLCBweXRob25fdmVyc2lvbigpLCBweXRob25fYnJhbmNoKCksCisgICAgICAgICMgcHl0aG9uX3JldmlzaW9uKCksIHB5dGhvbl9idWlsZCgpLCBhbmQgcHl0aG9uX2NvbXBpbGVyKCkuCisgICAgICAgIHN5c192ZXJzaW9ucyA9IHsKKyAgICAgICAgICAgICgiMi42LjEgKHIyNjE6Njc1MTUsIERlYyAgNiAyMDA4LCAxNToyNjowMCkgXG5bR0NDIDQuMC4xIChBcHBsZSBDb21wdXRlciwgSW5jLiBidWlsZCA1MzcwKV0iLAorICAgICAgICAgICAgICgnQ1B5dGhvbicsICd0YWdzL3IyNjEnLCAnNjc1MTUnKSwgc2VsZi5zYXZlX3BsYXRmb3JtKQorICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgICgiQ1B5dGhvbiIsICIyLjYuMSIsICJ0YWdzL3IyNjEiLCAiNjc1MTUiLAorICAgICAgICAgICAgICAgICAoJ3IyNjE6Njc1MTUnLCAnRGVjICA2IDIwMDggMTU6MjY6MDAnKSwKKyAgICAgICAgICAgICAgICAgJ0dDQyA0LjAuMSAoQXBwbGUgQ29tcHV0ZXIsIEluYy4gYnVpbGQgNTM3MCknKSwKKyAgICAgICAgICAgICgiSXJvblB5dGhvbiAyLjAgKDIuMC4wLjApIG9uIC5ORVQgMi4wLjUwNzI3LjMwNTMiLCBOb25lLCAiY2xpIikKKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAoIklyb25QeXRob24iLCAiMi4wLjAiLCAiIiwgIiIsICgiIiwgIiIpLAorICAgICAgICAgICAgICAgICAiLk5FVCAyLjAuNTA3MjcuMzA1MyIpLAorICAgICAgICAgICAgKCIyLjUgKHRydW5rOjYxMDcsIE1hciAyNiAyMDA5LCAxMzowMjoxOCkgXG5bSmF2YSBIb3RTcG90KFRNKSBDbGllbnQgVk0gKFwiQXBwbGUgQ29tcHV0ZXIsIEluYy5cIildIiwKKyAgICAgICAgICAgICgnSnl0aG9uJywgJ3RydW5rJywgJzYxMDcnKSwgImphdmExLjUuMF8xNiIpCisgICAgICAgICAgICA6CisgICAgICAgICAgICAgICAgKCJKeXRob24iLCAiMi41LjAiLCAidHJ1bmsiLCAiNjEwNyIsCisgICAgICAgICAgICAgICAgICgndHJ1bms6NjEwNycsICdNYXIgMjYgMjAwOScpLCAiamF2YTEuNS4wXzE2IiksCisgICAgICAgICAgICAoIjIuNS4yICg2MzM3OCwgTWFyIDI2IDIwMDksIDE4OjAzOjI5KVxuW1B5UHkgMS4wLjBdIiwKKyAgICAgICAgICAgICAoJ1B5UHknLCAndHJ1bmsnLCAnNjMzNzgnKSwgc2VsZi5zYXZlX3BsYXRmb3JtKQorICAgICAgICAgICAgOgorICAgICAgICAgICAgICAgICgiUHlQeSIsICIyLjUuMiIsICJ0cnVuayIsICI2MzM3OCIsICgnNjMzNzgnLCAnTWFyIDI2IDIwMDknKSwKKyAgICAgICAgICAgICAgICAgIiIpCisgICAgICAgICAgICB9CisgICAgICAgIGZvciAodmVyc2lvbl90YWcsIHN1YnZlcnNpb24sIHN5c19wbGF0Zm9ybSksIGluZm8gaW4gXAorICAgICAgICAgICAgICAgIHN5c192ZXJzaW9ucy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHN5cy52ZXJzaW9uID0gdmVyc2lvbl90YWcKKyAgICAgICAgICAgIGlmIHN1YnZlcnNpb24gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHN5cywgInN1YnZlcnNpb24iKToKKyAgICAgICAgICAgICAgICAgICAgZGVsIHN5cy5zdWJ2ZXJzaW9uCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN5cy5zdWJ2ZXJzaW9uID0gc3VidmVyc2lvbgorICAgICAgICAgICAgaWYgc3lzX3BsYXRmb3JtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHN5cy5wbGF0Zm9ybSA9IHN5c19wbGF0Zm9ybQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGF0Zm9ybS5weXRob25faW1wbGVtZW50YXRpb24oKSwgaW5mb1swXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKSwgaW5mb1sxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxhdGZvcm0ucHl0aG9uX2JyYW5jaCgpLCBpbmZvWzJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGF0Zm9ybS5weXRob25fcmV2aXNpb24oKSwgaW5mb1szXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxhdGZvcm0ucHl0aG9uX2J1aWxkKCksIGluZm9bNF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsYXRmb3JtLnB5dGhvbl9jb21waWxlcigpLCBpbmZvWzVdKQorCisgICAgZGVmIHRlc3Rfc3lzdGVtX2FsaWFzKHNlbGYpOgorICAgICAgICByZXMgPSBwbGF0Zm9ybS5zeXN0ZW1fYWxpYXMoCisgICAgICAgICAgICBwbGF0Zm9ybS5zeXN0ZW0oKSwKKyAgICAgICAgICAgIHBsYXRmb3JtLnJlbGVhc2UoKSwKKyAgICAgICAgICAgIHBsYXRmb3JtLnZlcnNpb24oKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdW5hbWUoc2VsZik6CisgICAgICAgIHJlcyA9IHBsYXRmb3JtLnVuYW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueShyZXMpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLCAid2luZG93cyBvbmx5IHRlc3QiKQorICAgIGRlZiB0ZXN0X3VuYW1lX3dpbjMyX0FSQ0hJVEVXNjQzMihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA3ODYwOiBtYWtlIHN1cmUgd2UgZ2V0IGFyY2hpdGVjdHVyZSBmcm9tIHRoZSBjb3JyZWN0IHZhcmlhYmxlCisgICAgICAgICMgb24gNjQgYml0IFdpbmRvd3M6IGlmIFBST0NFU1NPUl9BUkNISVRFVzY0MzIgZXhpc3RzIHdlIHNob3VsZCBiZQorICAgICAgICAjIHVzaW5nIGl0LCBwZXIKKyAgICAgICAgIyBodHRwOi8vYmxvZ3MubXNkbi5jb20vZGF2aWQud2FuZy9hcmNoaXZlLzIwMDYvMDMvMjYvSE9XVE8tRGV0ZWN0LVByb2Nlc3MtQml0bmVzcy5hc3B4CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnZpcm9uOgorICAgICAgICAgICAgICAgIGlmICdQUk9DRVNTT1JfQVJDSElURVc2NDMyJyBpbiBlbnZpcm9uOgorICAgICAgICAgICAgICAgICAgICBkZWwgZW52aXJvblsnUFJPQ0VTU09SX0FSQ0hJVEVXNjQzMiddCisgICAgICAgICAgICAgICAgZW52aXJvblsnUFJPQ0VTU09SX0FSQ0hJVEVDVFVSRSddID0gJ2ZvbycKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS5fdW5hbWVfY2FjaGUgPSBOb25lCisgICAgICAgICAgICAgICAgc3lzdGVtLCBub2RlLCByZWxlYXNlLCB2ZXJzaW9uLCBtYWNoaW5lLCBwcm9jZXNzb3IgPSBwbGF0Zm9ybS51bmFtZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWNoaW5lLCAnZm9vJykKKyAgICAgICAgICAgICAgICBlbnZpcm9uWydQUk9DRVNTT1JfQVJDSElURVc2NDMyJ10gPSAnYmFyJworICAgICAgICAgICAgICAgIHBsYXRmb3JtLl91bmFtZV9jYWNoZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBzeXN0ZW0sIG5vZGUsIHJlbGVhc2UsIHZlcnNpb24sIG1hY2hpbmUsIHByb2Nlc3NvciA9IHBsYXRmb3JtLnVuYW1lKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hY2hpbmUsICdiYXInKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcGxhdGZvcm0uX3VuYW1lX2NhY2hlID0gTm9uZQorCisgICAgZGVmIHRlc3RfamF2YV92ZXIoc2VsZik6CisgICAgICAgIHJlcyA9IHBsYXRmb3JtLmphdmFfdmVyKCkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdqYXZhJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGwocmVzKSkKKworICAgIGRlZiB0ZXN0X3dpbjMyX3ZlcihzZWxmKToKKyAgICAgICAgcmVzID0gcGxhdGZvcm0ud2luMzJfdmVyKCkKKworICAgIGRlZiB0ZXN0X21hY192ZXIoc2VsZik6CisgICAgICAgIHJlcyA9IHBsYXRmb3JtLm1hY192ZXIoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBnZXN0YWx0CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGhhdmVfdG9vbGJveF9nbHVlID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhhdmVfdG9vbGJveF9nbHVlID0gVHJ1ZQorCisgICAgICAgIGlmIGhhdmVfdG9vbGJveF9nbHVlIGFuZCBwbGF0Zm9ybS51bmFtZSgpWzBdID09ICdEYXJ3aW4nOgorICAgICAgICAgICAgIyBXZSdyZSBvbiBhIE1hY09TWCBzeXN0ZW0sIGNoZWNrIHRoYXQKKyAgICAgICAgICAgICMgdGhlIHJpZ2h0IHZlcnNpb24gaW5mb3JtYXRpb24gaXMgcmV0dXJuZWQKKyAgICAgICAgICAgIGZkID0gb3MucG9wZW4oJ3N3X3ZlcnMnLCAncicpCisgICAgICAgICAgICByZWFsX3ZlciA9IE5vbmUKKyAgICAgICAgICAgIGZvciBsbiBpbiBmZDoKKyAgICAgICAgICAgICAgICBpZiBsbi5zdGFydHN3aXRoKCdQcm9kdWN0VmVyc2lvbjonKToKKyAgICAgICAgICAgICAgICAgICAgcmVhbF92ZXIgPSBsbi5zdHJpcCgpLnNwbGl0KClbLTFdCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlYWxfdmVyIGlzIE5vbmUpCisgICAgICAgICAgICByZXN1bHRfbGlzdCA9IHJlc1swXS5zcGxpdCgnLicpCisgICAgICAgICAgICBleHBlY3RfbGlzdCA9IHJlYWxfdmVyLnNwbGl0KCcuJykKKyAgICAgICAgICAgIGxlbl9kaWZmID0gbGVuKHJlc3VsdF9saXN0KSAtIGxlbihleHBlY3RfbGlzdCkKKyAgICAgICAgICAgICMgT24gU25vdyBMZW9wYXJkLCBzd192ZXJzIHJlcG9ydHMgMTAuNi4wIGFzIDEwLjYKKyAgICAgICAgICAgIGlmIGxlbl9kaWZmID4gMDoKKyAgICAgICAgICAgICAgICBleHBlY3RfbGlzdC5leHRlbmQoWycwJ10gKiBsZW5fZGlmZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0X2xpc3QsIGV4cGVjdF9saXN0KQorCisgICAgICAgICAgICAjIHJlc1sxXSBjbGFpbXMgdG8gY29udGFpbgorICAgICAgICAgICAgIyAodmVyc2lvbiwgZGV2X3N0YWdlLCBub25fcmVsZWFzZV92ZXJzaW9uKQorICAgICAgICAgICAgIyBUaGF0IGluZm9ybWF0aW9uIGlzIG5vIGxvbmdlciBhdmFpbGFibGUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzFdLCAoJycsICcnLCAnJykpCisKKyAgICAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gJ2xpdHRsZSc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihyZXNbMl0sICgnaTM4NicsICd4ODZfNjQnKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMl0sICdQb3dlclBDJykKKworCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nLCAiT1NYIG9ubHkgdGVzdCIpCisgICAgZGVmIHRlc3RfbWFjX3Zlcl93aXRoX2Zvcmsoc2VsZik6CisgICAgICAgICMgSXNzdWU3ODk1OiBwbGF0Zm9ybS5tYWNfdmVyKCkgY3Jhc2hlcyB3aGVuIHVzaW5nIGZvcmsgd2l0aG91dCBleGVjCisgICAgICAgICMKKyAgICAgICAgIyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgdGhlIGZpeCBmb3IgdGhhdCBpc3N1ZSB3b3Jrcy4KKyAgICAgICAgIworICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgaWYgcGlkID09IDA6CisgICAgICAgICAgICAjIGNoaWxkCisgICAgICAgICAgICBpbmZvID0gcGxhdGZvcm0ubWFjX3ZlcigpCisgICAgICAgICAgICBvcy5fZXhpdCgwKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHBhcmVudAorICAgICAgICAgICAgY3BpZCwgc3RzID0gb3Mud2FpdHBpZChwaWQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNwaWQsIHBpZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RzLCAwKQorCisgICAgZGVmIHRlc3RfZGlzdChzZWxmKToKKyAgICAgICAgcmVzID0gcGxhdGZvcm0uZGlzdCgpCisKKyAgICBkZWYgdGVzdF9saWJjX3ZlcihzZWxmKToKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc3lzLmV4ZWN1dGFibGUpIGFuZCBcCisgICAgICAgICAgIG9zLnBhdGguZXhpc3RzKHN5cy5leGVjdXRhYmxlKycuZXhlJyk6CisgICAgICAgICAgICAjIEN5Z3dpbiBob3Jyb3IKKyAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBzeXMuZXhlY3V0YWJsZSArICcuZXhlJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHN5cy5leGVjdXRhYmxlCisgICAgICAgIHJlcyA9IHBsYXRmb3JtLmxpYmNfdmVyKGV4ZWN1dGFibGUpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9yZWxlYXNlX2ZpbGUoc2VsZik6CisKKyAgICAgICAgZm9yIGlucHV0LCBvdXRwdXQgaW4gKAorICAgICAgICAgICAgIyBFeGFtcGxlcyBvZiByZWxlYXNlIGZpbGUgY29udGVudHM6CisgICAgICAgICAgICAoJ1N1U0UgTGludXggOS4zICh4ODYtNjQpJywgKCdTdVNFIExpbnV4ICcsICc5LjMnLCAneDg2LTY0JykpLAorICAgICAgICAgICAgKCdTVVNFIExJTlVYIDEwLjEgKFg4Ni02NCknLCAoJ1NVU0UgTElOVVggJywgJzEwLjEnLCAnWDg2LTY0JykpLAorICAgICAgICAgICAgKCdTVVNFIExJTlVYIDEwLjEgKGk1ODYpJywgKCdTVVNFIExJTlVYICcsICcxMC4xJywgJ2k1ODYnKSksCisgICAgICAgICAgICAoJ0ZlZG9yYSBDb3JlIHJlbGVhc2UgNSAoQm9yZGVhdXgpJywgKCdGZWRvcmEgQ29yZScsICc1JywgJ0JvcmRlYXV4JykpLAorICAgICAgICAgICAgKCdSZWQgSGF0IExpbnV4IHJlbGVhc2UgOC4wIChQc3ljaGUpJywgKCdSZWQgSGF0IExpbnV4JywgJzguMCcsICdQc3ljaGUnKSksCisgICAgICAgICAgICAoJ1JlZCBIYXQgTGludXggcmVsZWFzZSA5IChTaHJpa2UpJywgKCdSZWQgSGF0IExpbnV4JywgJzknLCAnU2hyaWtlJykpLAorICAgICAgICAgICAgKCdSZWQgSGF0IEVudGVycHJpc2UgTGludXggcmVsZWFzZSA0IChOYWhhbnQpJywgKCdSZWQgSGF0IEVudGVycHJpc2UgTGludXgnLCAnNCcsICdOYWhhbnQnKSksCisgICAgICAgICAgICAoJ0NlbnRPUyByZWxlYXNlIDQnLCAoJ0NlbnRPUycsICc0JywgTm9uZSkpLAorICAgICAgICAgICAgKCdSb2NrcyByZWxlYXNlIDQuMi4xIChDeWRvbmlhKScsICgnUm9ja3MnLCAnNC4yLjEnLCAnQ3lkb25pYScpKSwKKyAgICAgICAgICAgICgnJywgKCcnLCAnJywgJycpKSwgIyBJZiB0aGVyZSdzIG5vdGhpbmcgdGhlcmUuCisgICAgICAgICAgICApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGF0Zm9ybS5fcGFyc2VfcmVsZWFzZV9maWxlKGlucHV0KSwgb3V0cHV0KQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBQbGF0Zm9ybVRlc3QKKyAgICApCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BsaXN0bGliLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcGxpc3RsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg1OWFkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BsaXN0bGliLnB5CkBAIC0wLDAgKzEsMjA0IEBACisjIENvcHlyaWdodCAoQykgMjAwMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBwbGlzdGxpYgoraW1wb3J0IG9zCitpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKworIyBUaGlzIHRlc3QgZGF0YSB3YXMgZ2VuZXJhdGVkIHRocm91Z2ggQ29jb2EncyBOU0RpY3Rpb25hcnkgY2xhc3MKK1RFU1REQVRBID0gIiIiPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgXAorImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgorPHBsaXN0IHZlcnNpb249IjEuMCI+Cis8ZGljdD4KKyAgICAgICAgPGtleT5hRGF0ZTwva2V5PgorICAgICAgICA8ZGF0ZT4yMDA0LTEwLTI2VDEwOjMzOjMzWjwvZGF0ZT4KKyAgICAgICAgPGtleT5hRGljdDwva2V5PgorICAgICAgICA8ZGljdD4KKyAgICAgICAgICAgICAgICA8a2V5PmFGYWxzZVZhbHVlPC9rZXk+CisgICAgICAgICAgICAgICAgPGZhbHNlLz4KKyAgICAgICAgICAgICAgICA8a2V5PmFUcnVlVmFsdWU8L2tleT4KKyAgICAgICAgICAgICAgICA8dHJ1ZS8+CisgICAgICAgICAgICAgICAgPGtleT5hVW5pY29kZVZhbHVlPC9rZXk+CisgICAgICAgICAgICAgICAgPHN0cmluZz5NXHhjM1x4YTRzc2lnLCBNYVx4YzNceDlmPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgPGtleT5hbm90aGVyU3RyaW5nPC9rZXk+CisgICAgICAgICAgICAgICAgPHN0cmluZz4mbHQ7aGVsbG8gJmFtcDsgJ2hpJyB0aGVyZSEmZ3Q7PC9zdHJpbmc+CisgICAgICAgICAgICAgICAgPGtleT5kZWVwZXJEaWN0PC9rZXk+CisgICAgICAgICAgICAgICAgPGRpY3Q+CisgICAgICAgICAgICAgICAgICAgICAgICA8a2V5PmE8L2tleT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjE3PC9pbnRlZ2VyPgorICAgICAgICAgICAgICAgICAgICAgICAgPGtleT5iPC9rZXk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cmVhbD4zMi41PC9yZWFsPgorICAgICAgICAgICAgICAgICAgICAgICAgPGtleT5jPC9rZXk+CisgICAgICAgICAgICAgICAgICAgICAgICA8YXJyYXk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjE8L2ludGVnZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjI8L2ludGVnZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+dGV4dDwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnJheT4KKyAgICAgICAgICAgICAgICA8L2RpY3Q+CisgICAgICAgIDwvZGljdD4KKyAgICAgICAgPGtleT5hRmxvYXQ8L2tleT4KKyAgICAgICAgPHJlYWw+MC41PC9yZWFsPgorICAgICAgICA8a2V5PmFMaXN0PC9rZXk+CisgICAgICAgIDxhcnJheT4KKyAgICAgICAgICAgICAgICA8c3RyaW5nPkE8L3N0cmluZz4KKyAgICAgICAgICAgICAgICA8c3RyaW5nPkI8L3N0cmluZz4KKyAgICAgICAgICAgICAgICA8aW50ZWdlcj4xMjwvaW50ZWdlcj4KKyAgICAgICAgICAgICAgICA8cmVhbD4zMi41PC9yZWFsPgorICAgICAgICAgICAgICAgIDxhcnJheT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjE8L2ludGVnZXI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4yPC9pbnRlZ2VyPgorICAgICAgICAgICAgICAgICAgICAgICAgPGludGVnZXI+MzwvaW50ZWdlcj4KKyAgICAgICAgICAgICAgICA8L2FycmF5PgorICAgICAgICA8L2FycmF5PgorICAgICAgICA8a2V5PmFTdHJpbmc8L2tleT4KKyAgICAgICAgPHN0cmluZz5Eb29kYWg8L3N0cmluZz4KKyAgICAgICAgPGtleT5hbkludDwva2V5PgorICAgICAgICA8aW50ZWdlcj43Mjg8L2ludGVnZXI+CisgICAgICAgIDxrZXk+bmVzdGVkRGF0YTwva2V5PgorICAgICAgICA8YXJyYXk+CisgICAgICAgICAgICAgICAgPGRhdGE+CisgICAgICAgICAgICAgICAgUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyCisgICAgICAgICAgICAgICAgUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHZkSE1nYjJZZ1ltbHVZWEo1CisgICAgICAgICAgICAgICAgSUdkMWJtcytBQUVDQXp4c2IzUnpJRzltSUdKcGJtRnllU0JuZFc1clBnQUJBZ004Ykc5MGN5QnZaaUJpCisgICAgICAgICAgICAgICAgYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHNiM1J6CisgICAgICAgICAgICAgICAgSUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJHOTBjeUJ2WmlCaWFXNWhjbmtnWjNWdWF6NEFBUUlECisgICAgICAgICAgICAgICAgUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBdz09CisgICAgICAgICAgICAgICAgPC9kYXRhPgorICAgICAgICA8L2FycmF5PgorICAgICAgICA8a2V5PnNvbWVEYXRhPC9rZXk+CisgICAgICAgIDxkYXRhPgorICAgICAgICBQR0pwYm1GeWVTQm5kVzVyUGc9PQorICAgICAgICA8L2RhdGE+CisgICAgICAgIDxrZXk+c29tZU1vcmVEYXRhPC9rZXk+CisgICAgICAgIDxkYXRhPgorICAgICAgICBQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOAorICAgICAgICBiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXp4cworICAgICAgICBiM1J6SUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJHOTBjeUJ2WmlCaWFXNWhjbmtnWjNWdWF6NEFBUUlEUEd4dgorICAgICAgICBkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXp4c2IzUnpJRzltSUdKcGJtRnllU0JuZFc1clBnQUJBZ004Ykc5MAorICAgICAgICBjeUJ2WmlCaWFXNWhjbmtnWjNWdWF6NEFBUUlEUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBdz09CisgICAgICAgIDwvZGF0YT4KKyAgICAgICAgPGtleT5ceGMzXHg4NWJlbnJhYTwva2V5PgorICAgICAgICA8c3RyaW5nPlRoYXQgd2FzIGEgdW5pY29kZSBrZXkuPC9zdHJpbmc+Cis8L2RpY3Q+Cis8L3BsaXN0PgorIiIiLnJlcGxhY2UoIiAiICogOCwgIlx0IikgICMgQXBwbGUgYXMgd2VsbCBhcyBwbGlzdGxpYi5weSBvdXRwdXQgaGFyZCB0YWJzCisKKworY2xhc3MgVGVzdFBsaXN0bGliKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBfY3JlYXRlKHNlbGYpOgorICAgICAgICBwbCA9IGRpY3QoCisgICAgICAgICAgICBhU3RyaW5nPSJEb29kYWgiLAorICAgICAgICAgICAgYUxpc3Q9WyJBIiwgIkIiLCAxMiwgMzIuNSwgWzEsIDIsIDNdXSwKKyAgICAgICAgICAgIGFGbG9hdCA9IDAuNSwKKyAgICAgICAgICAgIGFuSW50ID0gNzI4LAorICAgICAgICAgICAgYURpY3Q9ZGljdCgKKyAgICAgICAgICAgICAgICBhbm90aGVyU3RyaW5nPSI8aGVsbG8gJiAnaGknIHRoZXJlIT4iLAorICAgICAgICAgICAgICAgIGFVbmljb2RlVmFsdWU9dSdNXHhlNHNzaWcsIE1hXHhkZicsCisgICAgICAgICAgICAgICAgYVRydWVWYWx1ZT1UcnVlLAorICAgICAgICAgICAgICAgIGFGYWxzZVZhbHVlPUZhbHNlLAorICAgICAgICAgICAgICAgIGRlZXBlckRpY3Q9ZGljdChhPTE3LCBiPTMyLjUsIGM9WzEsIDIsICJ0ZXh0Il0pLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIHNvbWVEYXRhID0gcGxpc3RsaWIuRGF0YSgiPGJpbmFyeSBndW5rPiIpLAorICAgICAgICAgICAgc29tZU1vcmVEYXRhID0gcGxpc3RsaWIuRGF0YSgiPGxvdHMgb2YgYmluYXJ5IGd1bms+XDBcMVwyXDMiICogMTApLAorICAgICAgICAgICAgbmVzdGVkRGF0YSA9IFtwbGlzdGxpYi5EYXRhKCI8bG90cyBvZiBiaW5hcnkgZ3Vuaz5cMFwxXDJcMyIgKiAxMCldLAorICAgICAgICAgICAgYURhdGUgPSBkYXRldGltZS5kYXRldGltZSgyMDA0LCAxMCwgMjYsIDEwLCAzMywgMzMpLAorICAgICAgICApCisgICAgICAgIHBsW3UnXHhjNWJlbnJhYSddID0gIlRoYXQgd2FzIGEgdW5pY29kZSBrZXkuIgorICAgICAgICByZXR1cm4gcGwKKworICAgIGRlZiB0ZXN0X2NyZWF0ZShzZWxmKToKKyAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsWyJhU3RyaW5nIl0sICJEb29kYWgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsWyJhRGljdCJdWyJhRmFsc2VWYWx1ZSJdLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2lvKHNlbGYpOgorICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZSgpCisgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3QocGwsIHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdCh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisKKyAgICBkZWYgdGVzdF9zdHJpbmcoc2VsZik6CisgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKCkKKyAgICAgICAgZGF0YSA9IHBsaXN0bGliLndyaXRlUGxpc3RUb1N0cmluZyhwbCkKKyAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbVN0cmluZyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisgICAgICAgIGRhdGEyID0gcGxpc3RsaWIud3JpdGVQbGlzdFRvU3RyaW5nKHBsMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBkYXRhMikKKworICAgIGRlZiB0ZXN0X2luZGVudGF0aW9uX2FycmF5KHNlbGYpOgorICAgICAgICBkYXRhID0gW1tbW1tbW1t7J3Rlc3QnOiBwbGlzdGxpYi5EYXRhKGInYWFhYWFhJyl9XV1dXV1dXV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5yZWFkUGxpc3RGcm9tU3RyaW5nKHBsaXN0bGliLndyaXRlUGxpc3RUb1N0cmluZyhkYXRhKSksIGRhdGEpCisKKyAgICBkZWYgdGVzdF9pbmRlbnRhdGlvbl9kaWN0KHNlbGYpOgorICAgICAgICBkYXRhID0geycxJzogeycyJzogeyczJzogeyc0Jzogeyc1Jzogeyc2Jzogeyc3Jzogeyc4Jzogeyc5JzogcGxpc3RsaWIuRGF0YShiJ2FhYWFhYScpfX19fX19fX19CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIucmVhZFBsaXN0RnJvbVN0cmluZyhwbGlzdGxpYi53cml0ZVBsaXN0VG9TdHJpbmcoZGF0YSkpLCBkYXRhKQorCisgICAgZGVmIHRlc3RfaW5kZW50YXRpb25fZGljdF9taXgoc2VsZik6CisgICAgICAgIGRhdGEgPSB7JzEnOiB7JzInOiBbeyczJzogW1tbW1t7J3Rlc3QnOiBwbGlzdGxpYi5EYXRhKGInYWFhYWFhJyl9XV1dXV19XX19CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIucmVhZFBsaXN0RnJvbVN0cmluZyhwbGlzdGxpYi53cml0ZVBsaXN0VG9TdHJpbmcoZGF0YSkpLCBkYXRhKQorCisgICAgZGVmIHRlc3RfYXBwbGVmb3JtYXR0aW5nKHNlbGYpOgorICAgICAgICBwbCA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21TdHJpbmcoVEVTVERBVEEpCisgICAgICAgIGRhdGEgPSBwbGlzdGxpYi53cml0ZVBsaXN0VG9TdHJpbmcocGwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgVEVTVERBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZCBkYXRhIHdhcyBub3QgaWRlbnRpY2FsIHRvIEFwcGxlJ3Mgb3V0cHV0IikKKworICAgIGRlZiB0ZXN0X2FwcGxlZm9ybWF0dGluZ2Zyb21saXRlcmFsKHNlbGYpOgorICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZSgpCisgICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21TdHJpbmcoVEVTVERBVEEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQorCisgICAgZGVmIHRlc3Rfc3RyaW5naW8oc2VsZik6CisgICAgICAgIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisgICAgICAgIGYgPSBTdHJpbmdJTygpCisgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKCkKKyAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbCwgZikKKyAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0KFN0cmluZ0lPKGYuZ2V0dmFsdWUoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKKworICAgIGRlZiB0ZXN0X2NzdHJpbmdpbyhzZWxmKToKKyAgICAgICAgZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisgICAgICAgIGYgPSBTdHJpbmdJTygpCisgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKCkKKyAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbCwgZikKKyAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0KFN0cmluZ0lPKGYuZ2V0dmFsdWUoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKKworICAgIGRlZiB0ZXN0X2NvbnRyb2xjaGFyYWN0ZXJzKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMjgpOgorICAgICAgICAgICAgYyA9IGNocihpKQorICAgICAgICAgICAgdGVzdFN0cmluZyA9ICJzdHJpbmcgY29udGFpbmluZyAlcyIgJSBjCisgICAgICAgICAgICBpZiBpID49IDMyIG9yIGMgaW4gIlxyXG5cdCI6CisgICAgICAgICAgICAgICAgIyBcciwgXG4gYW5kIFx0IGFyZSB0aGUgb25seSBsZWdhbCBjb250cm9sIGNoYXJzIGluIFhNTAorICAgICAgICAgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3RUb1N0cmluZyh0ZXN0U3RyaW5nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3RUb1N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0U3RyaW5nKQorCisgICAgZGVmIHRlc3Rfbm9uZGljdHJvb3Qoc2VsZik6CisgICAgICAgIHRlc3QxID0gImFiYyIKKyAgICAgICAgdGVzdDIgPSBbMSwgMiwgMywgImFiYyJdCisgICAgICAgIHJlc3VsdDEgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tU3RyaW5nKHBsaXN0bGliLndyaXRlUGxpc3RUb1N0cmluZyh0ZXN0MSkpCisgICAgICAgIHJlc3VsdDIgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tU3RyaW5nKHBsaXN0bGliLndyaXRlUGxpc3RUb1N0cmluZyh0ZXN0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDEsIHJlc3VsdDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDIsIHJlc3VsdDIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFBsaXN0bGliKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BvbGwucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wb2xsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Mjk0ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wb2xsLnB5CkBAIC0wLDAgKzEsMTY3IEBACisjIFRlc3QgY2FzZSBmb3IgdGhlIG9zLnBvbGwoKSBmdW5jdGlvbgorCitpbXBvcnQgb3MsIHNlbGVjdCwgcmFuZG9tLCB1bml0dGVzdAoraW1wb3J0IF90ZXN0Y2FwaQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QKKwordHJ5OgorICAgIHNlbGVjdC5wb2xsCitleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QsICJzZWxlY3QucG9sbCBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X3BvbGwiCisKKworZGVmIGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksIGZsYWcpOgorICAgIG1hdGNoID0gW10KKyAgICBmb3IgZmQsIG1vZGUgaW4gcmVhZHk6CisgICAgICAgIGlmIG1vZGUgJiBmbGFnOgorICAgICAgICAgICAgbWF0Y2guYXBwZW5kKGZkKQorICAgIHJldHVybiBtYXRjaAorCitjbGFzcyBQb2xsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcG9sbDEoc2VsZik6CisgICAgICAgICMgQmFzaWMgZnVuY3Rpb25hbCB0ZXN0IG9mIHBvbGwgb2JqZWN0CisgICAgICAgICMgQ3JlYXRlIGEgYnVuY2ggb2YgcGlwZSBhbmQgdGVzdCB0aGF0IHBvbGwgd29ya3Mgd2l0aCB0aGVtLgorCisgICAgICAgIHAgPSBzZWxlY3QucG9sbCgpCisKKyAgICAgICAgTlVNX1BJUEVTID0gMTIKKyAgICAgICAgTVNHID0gIiBUaGlzIGlzIGEgdGVzdC4iCisgICAgICAgIE1TR19MRU4gPSBsZW4oTVNHKQorICAgICAgICByZWFkZXJzID0gW10KKyAgICAgICAgd3JpdGVycyA9IFtdCisgICAgICAgIHIydyA9IHt9CisgICAgICAgIHcyciA9IHt9CisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNX1BJUEVTKToKKyAgICAgICAgICAgIHJkLCB3ciA9IG9zLnBpcGUoKQorICAgICAgICAgICAgcC5yZWdpc3RlcihyZCkKKyAgICAgICAgICAgIHAubW9kaWZ5KHJkLCBzZWxlY3QuUE9MTElOKQorICAgICAgICAgICAgcC5yZWdpc3Rlcih3ciwgc2VsZWN0LlBPTExPVVQpCisgICAgICAgICAgICByZWFkZXJzLmFwcGVuZChyZCkKKyAgICAgICAgICAgIHdyaXRlcnMuYXBwZW5kKHdyKQorICAgICAgICAgICAgcjJ3W3JkXSA9IHdyCisgICAgICAgICAgICB3MnJbd3JdID0gcmQKKworICAgICAgICBidWZzID0gW10KKworICAgICAgICB3aGlsZSB3cml0ZXJzOgorICAgICAgICAgICAgcmVhZHkgPSBwLnBvbGwoKQorICAgICAgICAgICAgcmVhZHlfd3JpdGVycyA9IGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksIHNlbGVjdC5QT0xMT1VUKQorICAgICAgICAgICAgaWYgbm90IHJlYWR5X3dyaXRlcnM6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAibm8gcGlwZXMgcmVhZHkgZm9yIHdyaXRpbmciCisgICAgICAgICAgICB3ciA9IHJhbmRvbS5jaG9pY2UocmVhZHlfd3JpdGVycykKKyAgICAgICAgICAgIG9zLndyaXRlKHdyLCBNU0cpCisKKyAgICAgICAgICAgIHJlYWR5ID0gcC5wb2xsKCkKKyAgICAgICAgICAgIHJlYWR5X3JlYWRlcnMgPSBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBzZWxlY3QuUE9MTElOKQorICAgICAgICAgICAgaWYgbm90IHJlYWR5X3JlYWRlcnM6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAibm8gcGlwZXMgcmVhZHkgZm9yIHJlYWRpbmciCisgICAgICAgICAgICByZCA9IHJhbmRvbS5jaG9pY2UocmVhZHlfcmVhZGVycykKKyAgICAgICAgICAgIGJ1ZiA9IG9zLnJlYWQocmQsIE1TR19MRU4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpLCBNU0dfTEVOKQorICAgICAgICAgICAgYnVmcy5hcHBlbmQoYnVmKQorICAgICAgICAgICAgb3MuY2xvc2UocjJ3W3JkXSkgOyBvcy5jbG9zZSggcmQgKQorICAgICAgICAgICAgcC51bnJlZ2lzdGVyKCByMndbcmRdICkKKyAgICAgICAgICAgIHAudW5yZWdpc3RlciggcmQgKQorICAgICAgICAgICAgd3JpdGVycy5yZW1vdmUocjJ3W3JkXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZnMsIFtNU0ddICogTlVNX1BJUEVTKQorCisgICAgZGVmIHBvbGxfdW5pdF90ZXN0cyhzZWxmKToKKyAgICAgICAgIyByZXR1cm5zIE5WQUwgZm9yIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgIEZEID0gNDIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuY2xvc2UoRkQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBwID0gc2VsZWN0LnBvbGwoKQorICAgICAgICBwLnJlZ2lzdGVyKEZEKQorICAgICAgICByID0gcC5wb2xsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWzBdLCAoRkQsIHNlbGVjdC5QT0xMTlZBTCkpCisKKyAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndycpCisgICAgICAgIGZkID0gZi5maWxlbm8oKQorICAgICAgICBwID0gc2VsZWN0LnBvbGwoKQorICAgICAgICBwLnJlZ2lzdGVyKGYpCisgICAgICAgIHIgPSBwLnBvbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbMF1bMF0sIGZkKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgciA9IHAucG9sbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoclswXSwgKGZkLCBzZWxlY3QuUE9MTE5WQUwpKQorICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorCisgICAgICAgICMgdHlwZSBlcnJvciBmb3IgaW52YWxpZCBhcmd1bWVudHMKKyAgICAgICAgcCA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwLnJlZ2lzdGVyLCBwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHAudW5yZWdpc3RlciwgcCkKKworICAgICAgICAjIGNhbid0IHVucmVnaXN0ZXIgbm9uLWV4aXN0ZW50IG9iamVjdAorICAgICAgICBwID0gc2VsZWN0LnBvbGwoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcC51bnJlZ2lzdGVyLCAzKQorCisgICAgICAgICMgVGVzdCBlcnJvciBjYXNlcworICAgICAgICBwb2xsc3RlciA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgY2xhc3MgTm9wZToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBBbG1vc3Q6CisgICAgICAgICAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnZmlsZW5vJworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9sbHN0ZXIucmVnaXN0ZXIsIE5vcGUoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb2xsc3Rlci5yZWdpc3RlciwgQWxtb3N0KCksIDApCisKKyAgICAjIEFub3RoZXIgdGVzdCBjYXNlIGZvciBwb2xsKCkuICBUaGlzIGlzIGNvcGllZCBmcm9tIHRoZSB0ZXN0IGNhc2UgZm9yCisgICAgIyBzZWxlY3QoKSwgbW9kaWZpZWQgdG8gdXNlIHBvbGwoKSBpbnN0ZWFkLgorCisgICAgZGVmIHRlc3RfcG9sbDIoc2VsZik6CisgICAgICAgIGNtZCA9ICdmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBlY2hvIHRlc3RpbmcuLi47IHNsZWVwIDE7IGRvbmUnCisgICAgICAgIHAgPSBvcy5wb3BlbihjbWQsICdyJykKKyAgICAgICAgcG9sbHN0ZXIgPSBzZWxlY3QucG9sbCgpCisgICAgICAgIHBvbGxzdGVyLnJlZ2lzdGVyKCBwLCBzZWxlY3QuUE9MTElOICkKKyAgICAgICAgZm9yIHRvdXQgaW4gKDAsIDEwMDAsIDIwMDAsIDQwMDAsIDgwMDAsIDE2MDAwKSArICgtMSwpKjEwOgorICAgICAgICAgICAgZmRsaXN0ID0gcG9sbHN0ZXIucG9sbCh0b3V0KQorICAgICAgICAgICAgaWYgKGZkbGlzdCA9PSBbXSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZkLCBmbGFncyA9IGZkbGlzdFswXQorICAgICAgICAgICAgaWYgZmxhZ3MgJiBzZWxlY3QuUE9MTEhVUDoKKyAgICAgICAgICAgICAgICBsaW5lID0gcC5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgaWYgbGluZSAhPSAiIjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdlcnJvcjogcGlwZSBzZWVtcyB0byBiZSBjbG9zZWQsIGJ1dCBzdGlsbCByZXR1cm5zIGRhdGEnKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGVsaWYgZmxhZ3MgJiBzZWxlY3QuUE9MTElOOgorICAgICAgICAgICAgICAgIGxpbmUgPSBwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIGZyb20gc2VsZWN0LnBvbGw6ICVzJyAlIGZkbGlzdCkKKyAgICAgICAgcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9wb2xsMyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IGludCBvdmVyZmxvdworICAgICAgICBwb2xsc3RlciA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgcG9sbHN0ZXIucmVnaXN0ZXIoMSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBwb2xsc3Rlci5wb2xsLCAxTCA8PCA2NCkKKworICAgICAgICB4ID0gMiArIDMKKyAgICAgICAgaWYgeCAhPSA1OgorICAgICAgICAgICAgc2VsZi5mYWlsKCdPdmVyZmxvdyBtdXN0IGhhdmUgb2NjdXJyZWQnKQorCisgICAgICAgIHBvbGxzdGVyID0gc2VsZWN0LnBvbGwoKQorICAgICAgICAjIElzc3VlIDE1OTg5CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHBvbGxzdGVyLnJlZ2lzdGVyLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBfdGVzdGNhcGkuU0hSVF9NQVggKyAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBwb2xsc3Rlci5yZWdpc3RlciwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX3Rlc3RjYXBpLlVTSFJUX01BWCArIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHBvbGxzdGVyLnBvbGwsIF90ZXN0Y2FwaS5JTlRfTUFYICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcG9sbHN0ZXIucG9sbCwgX3Rlc3RjYXBpLlVJTlRfTUFYICsgMSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChQb2xsVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BvcGVuLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcG9wZW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJiNWU5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BvcGVuLnB5CkBAIC0wLDAgKzEsNTIgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyIiIkJhc2ljIHRlc3RzIGZvciBvcy5wb3BlbigpCisKKyAgUGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgcGxhdGZvcm1zIHRoYXQgZmFrZSBwb3Blbi4KKyIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgb3MsIHN5cworCisjIFRlc3QgdGhhdCBjb21tYW5kLWxpbmVzIGdldCBkb3duIGFzIHdlIGV4cGVjdC4KKyMgVG8gZG8gdGhpcyB3ZSBleGVjdXRlOgorIyAgICBweXRob24gLWMgImltcG9ydCBzeXM7cHJpbnQgc3lzLmFyZ3YiIHtyZXN0X29mX2NvbW1hbmRsaW5lfQorIyBUaGlzIHJlc3VsdHMgaW4gUHl0aG9uIGJlaW5nIHNwYXduZWQgYW5kIHByaW50aW5nIHRoZSBzeXMuYXJndiBsaXN0LgorIyBXZSBjYW4gdGhlbiBldmFsKCkgdGhlIHJlc3VsdCBvZiB0aGlzLCBhbmQgc2VlIHdoYXQgZWFjaCBhcmd2IHdhcy4KK3B5dGhvbiA9IHN5cy5leGVjdXRhYmxlCisKK2NsYXNzIFBvcGVuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIF9kb190ZXN0X2NvbW1hbmRsaW5lKHNlbGYsIGNtZGxpbmUsIGV4cGVjdGVkKToKKyAgICAgICAgY21kID0gJyVzIC1jICJpbXBvcnQgc3lzO3ByaW50IHN5cy5hcmd2IiAlcycgJSAocHl0aG9uLCBjbWRsaW5lKQorICAgICAgICBkYXRhID0gb3MucG9wZW4oY21kKS5yZWFkKCkgKyAnXG4nCisgICAgICAgIGdvdCA9IGV2YWwoZGF0YSlbMTpdICMgc3RyaXAgb2ZmIGFyZ3ZbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcG9wZW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3MucG9wZW4pCisgICAgICAgIHNlbGYuX2RvX3Rlc3RfY29tbWFuZGxpbmUoCisgICAgICAgICAgICAiZm9vIGJhciIsCisgICAgICAgICAgICBbImZvbyIsICJiYXIiXQorICAgICAgICApCisgICAgICAgIHNlbGYuX2RvX3Rlc3RfY29tbWFuZGxpbmUoCisgICAgICAgICAgICAnZm9vICJzcGFtIGFuZCBlZ2dzIiAic2lsbHkgd2FsayInLAorICAgICAgICAgICAgWyJmb28iLCAic3BhbSBhbmQgZWdncyIsICJzaWxseSB3YWxrIl0KKyAgICAgICAgKQorICAgICAgICBzZWxmLl9kb190ZXN0X2NvbW1hbmRsaW5lKAorICAgICAgICAgICAgJ2ZvbyAiYSBcXCJxdW90ZWRcXCIgYXJnIiBiYXInLAorICAgICAgICAgICAgWyJmb28iLCAnYSAicXVvdGVkIiBhcmcnLCAiYmFyIl0KKyAgICAgICAgKQorICAgICAgICB0ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKKyAgICBkZWYgdGVzdF9yZXR1cm5fY29kZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wb3BlbigiZXhpdCAwIikuY2xvc2UoKSwgTm9uZSkKKyAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wb3BlbigiZXhpdCA0MiIpLmNsb3NlKCksIDQyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wb3BlbigiZXhpdCA0MiIpLmNsb3NlKCksIDQyIDw8IDgpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFBvcGVuVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcG9wZW4yLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcG9wZW4yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNDEwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wb3BlbjIucHkKQEAgLTAsMCArMSwxMzAgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKyIiIlRlc3Qgc2NyaXB0IGZvciBwb3BlbjIucHkiIiIKKworaW1wb3J0IHdhcm5pbmdzCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIi4qcG9wZW4yIG1vZHVsZSBpcyBkZXByZWNhdGVkLioiLAorICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQord2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJvc1wucG9wZW4uIGlzIGRlcHJlY2F0ZWQuKiIsCisgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgcG9wZW4yCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbgorCitpZiBzeXMucGxhdGZvcm1bOjRdID09ICdiZW9zJyBvciBzeXMucGxhdGZvcm1bOjZdID09ICdhdGhlb3MnOgorICAgICMgIExvY2tzIGdldCBtZXNzZWQgdXAgb3Igc29tZXRoaW5nLiAgR2VuZXJhbGx5IHdlJ3JlIHN1cHBvc2VkCisgICAgIyAgdG8gYXZvaWQgbWl4aW5nICJwb3NpeCIgZm9yayAmIGV4ZWMgd2l0aCBuYXRpdmUgdGhyZWFkcywgYW5kCisgICAgIyAgdGhleSBtYXkgYmUgcmlnaHQgYWJvdXQgdGhhdCBhZnRlciBhbGwuCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInBvcGVuMigpIGRvZXNuJ3Qgd29yayBvbiAiICsgc3lzLnBsYXRmb3JtKQorCisjIGlmIHdlIGRvbid0IGhhdmUgb3MucG9wZW4sIGNoZWNrIHRoYXQKKyMgd2UgaGF2ZSBvcy5mb3JrLiAgaWYgbm90LCBza2lwIHRoZSB0ZXN0CisjIChieSByYWlzaW5nIGFuIEltcG9ydEVycm9yKQordHJ5OgorICAgIGZyb20gb3MgaW1wb3J0IHBvcGVuCisgICAgZGVsIHBvcGVuCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBvcyBpbXBvcnQgZm9yaworICAgIGRlbCBmb3JrCisKK2NsYXNzIFBvcGVuMlRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNtZCA9ICJjYXQiCisgICAgaWYgb3MubmFtZSA9PSAibnQiOgorICAgICAgICBjbWQgPSAibW9yZSIKKyAgICB0ZXN0c3RyID0gImFiIGNkXG4iCisgICAgIyAibW9yZSIgZG9lc24ndCBhY3QgdGhlIHNhbWUgd2F5IGFjcm9zcyBXaW5kb3dzIGZsYXZvcnMsCisgICAgIyBzb21ldGltZXMgYWRkaW5nIGFuIGV4dHJhIG5ld2xpbmUgYXQgdGhlIHN0YXJ0IG9yIHRoZQorICAgICMgZW5kLiAgU28gd2Ugc3RyaXAgd2hpdGVzcGFjZSBvZmYgYm90aCBlbmRzIGZvciBjb21wYXJpc29uLgorICAgIGV4cGVjdGVkID0gdGVzdHN0ci5zdHJpcCgpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHBvcGVuMi5fY2xlYW51cCgpCisgICAgICAgICMgV2hlbiB0aGUgdGVzdCBydW5zLCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IG9wZW4gcGlwZXMKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3BlbjIuX2FjdGl2ZSwgIkFjdGl2ZSBwaXBlcyB3aGVuIHRlc3Qgc3RhcnRzIiArCisgICAgICAgICAgICByZXByKFtjLmNtZCBmb3IgYyBpbiBwb3BlbjIuX2FjdGl2ZV0pKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3IgaW5zdCBpbiBwb3BlbjIuX2FjdGl2ZToKKyAgICAgICAgICAgIGluc3Qud2FpdCgpCisgICAgICAgIHBvcGVuMi5fY2xlYW51cCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9wZW4yLl9hY3RpdmUsICJwb3BlbjIuX2FjdGl2ZSBub3QgZW1wdHkiKQorICAgICAgICAjIFRoZSBvcy5wb3BlbiooKSBBUEkgZGVsZWdhdGVzIHRvIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSAob24gVW5peCkKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgZm9yIGluc3QgaW4gc3VicHJvY2Vzcy5fYWN0aXZlOgorICAgICAgICAgICAgaW5zdC53YWl0KCkKKyAgICAgICAgc3VicHJvY2Vzcy5fY2xlYW51cCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3VicHJvY2Vzcy5fYWN0aXZlLCAic3VicHJvY2Vzcy5fYWN0aXZlIG5vdCBlbXB0eSIpCisgICAgICAgIHJlYXBfY2hpbGRyZW4oKQorCisgICAgZGVmIHZhbGlkYXRlX291dHB1dChzZWxmLCB0ZXN0c3RyLCBleHBlY3RlZF9vdXQsIHIsIHcsIGU9Tm9uZSk6CisgICAgICAgIHcud3JpdGUodGVzdHN0cikKKyAgICAgICAgdy5jbG9zZSgpCisgICAgICAgIGdvdCA9IHIucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfb3V0LCBnb3Quc3RyaXAoKSwgIndyb3RlICVyIHJlYWQgJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdHN0ciwgZ290KSkKKworICAgICAgICBpZiBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZ290ID0gZS5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ290LCAidW5leHBlY3RlZCAlciBvbiBzdGRlcnIiICUgZ290KQorCisgICAgZGVmIHRlc3RfcG9wZW4yKHNlbGYpOgorICAgICAgICByLCB3ID0gcG9wZW4yLnBvcGVuMihzZWxmLmNtZCkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9vdXRwdXQoc2VsZi50ZXN0c3RyLCBzZWxmLmV4cGVjdGVkLCByLCB3KQorCisgICAgZGVmIHRlc3RfcG9wZW4zKHNlbGYpOgorICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICByLCB3LCBlID0gcG9wZW4yLnBvcGVuMyhbc2VsZi5jbWRdKQorICAgICAgICAgICAgc2VsZi52YWxpZGF0ZV9vdXRwdXQoc2VsZi50ZXN0c3RyLCBzZWxmLmV4cGVjdGVkLCByLCB3LCBlKQorCisgICAgICAgIHIsIHcsIGUgPSBwb3BlbjIucG9wZW4zKHNlbGYuY21kKQorICAgICAgICBzZWxmLnZhbGlkYXRlX291dHB1dChzZWxmLnRlc3RzdHIsIHNlbGYuZXhwZWN0ZWQsIHIsIHcsIGUpCisKKyAgICBkZWYgdGVzdF9vc19wb3BlbjIoc2VsZik6CisgICAgICAgICMgc2FtZSB0ZXN0IGFzIHRlc3RfcG9wZW4yKCksIGJ1dCB1c2luZyB0aGUgb3MucG9wZW4qKCkgQVBJCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKKyAgICAgICAgICAgIHcsIHIgPSBvcy5wb3BlbjIoW3NlbGYuY21kXSkKKyAgICAgICAgICAgIHNlbGYudmFsaWRhdGVfb3V0cHV0KHNlbGYudGVzdHN0ciwgc2VsZi5leHBlY3RlZCwgciwgdykKKworICAgICAgICAgICAgdywgciA9IG9zLnBvcGVuMihbImVjaG8iLCBzZWxmLnRlc3RzdHJdKQorICAgICAgICAgICAgZ290ID0gci5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBzZWxmLnRlc3RzdHIgKyAiXG4iKQorCisgICAgICAgIHcsIHIgPSBvcy5wb3BlbjIoc2VsZi5jbWQpCisgICAgICAgIHNlbGYudmFsaWRhdGVfb3V0cHV0KHNlbGYudGVzdHN0ciwgc2VsZi5leHBlY3RlZCwgciwgdykKKworICAgIGRlZiB0ZXN0X29zX3BvcGVuMyhzZWxmKToKKyAgICAgICAgIyBzYW1lIHRlc3QgYXMgdGVzdF9wb3BlbjMoKSwgYnV0IHVzaW5nIHRoZSBvcy5wb3BlbiooKSBBUEkKKyAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgdywgciwgZSA9IG9zLnBvcGVuMyhbc2VsZi5jbWRdKQorICAgICAgICAgICAgc2VsZi52YWxpZGF0ZV9vdXRwdXQoc2VsZi50ZXN0c3RyLCBzZWxmLmV4cGVjdGVkLCByLCB3LCBlKQorCisgICAgICAgICAgICB3LCByLCBlID0gb3MucG9wZW4zKFsiZWNobyIsIHNlbGYudGVzdHN0cl0pCisgICAgICAgICAgICBnb3QgPSByLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIHNlbGYudGVzdHN0ciArICJcbiIpCisgICAgICAgICAgICBnb3QgPSBlLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnb3QsICJ1bmV4cGVjdGVkICVyIG9uIHN0ZGVyciIgJSBnb3QpCisKKyAgICAgICAgdywgciwgZSA9IG9zLnBvcGVuMyhzZWxmLmNtZCkKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9vdXRwdXQoc2VsZi50ZXN0c3RyLCBzZWxmLmV4cGVjdGVkLCByLCB3LCBlKQorCisgICAgZGVmIHRlc3Rfb3NfcG9wZW40KHNlbGYpOgorICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICB3LCByID0gb3MucG9wZW40KFtzZWxmLmNtZF0pCisgICAgICAgICAgICBzZWxmLnZhbGlkYXRlX291dHB1dChzZWxmLnRlc3RzdHIsIHNlbGYuZXhwZWN0ZWQsIHIsIHcpCisKKyAgICAgICAgICAgIHcsIHIgPSBvcy5wb3BlbjQoWyJlY2hvIiwgc2VsZi50ZXN0c3RyXSkKKyAgICAgICAgICAgIGdvdCA9IHIucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgc2VsZi50ZXN0c3RyICsgIlxuIikKKworICAgICAgICB3LCByID0gb3MucG9wZW40KHNlbGYuY21kKQorICAgICAgICBzZWxmLnZhbGlkYXRlX291dHB1dChzZWxmLnRlc3RzdHIsIHNlbGYuZXhwZWN0ZWQsIHIsIHcpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChQb3BlbjJUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wb3BsaWIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wb3BsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUwNWMyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BvcGxpYi5weQpAQCAtMCwwICsxLDM0NSBAQAorIiIiVGVzdCBzY3JpcHQgZm9yIHBvcGxpYiBtb2R1bGUuIiIiCisKKyMgTW9kaWZpZWQgYnkgR2lhbXBhb2xvIFJvZG9sYScgdG8gZ2l2ZSBwb3BsaWIuUE9QMyBhbmQgcG9wbGliLlBPUDNfU1NMCisjIGEgcmVhbCB0ZXN0IHN1aXRlCisKK2ltcG9ydCBwb3BsaWIKK2ltcG9ydCBhc3luY29yZQoraW1wb3J0IGFzeW5jaGF0CitpbXBvcnQgc29ja2V0CitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCitpbXBvcnQgZXJybm8KKworZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBIT1NUCit0aHJlYWRpbmcgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKKworCisjIHRoZSBkdW1teSBkYXRhIHJldHVybmVkIGJ5IHNlcnZlciB3aGVuIExJU1QgYW5kIFJFVFIgY29tbWFuZHMgYXJlIGlzc3VlZAorTElTVF9SRVNQID0gJzEgMVxyXG4yIDJcclxuMyAzXHJcbjQgNFxyXG41IDVcclxuLlxyXG4nCitSRVRSX1JFU1AgPSAiIiJGcm9tOiBwb3N0bWFzdGVyQHB5dGhvbi5vcmdcCitcclxuQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXHJcblwKK01JTUUtVmVyc2lvbjogMS4wXHJcblwKK1N1YmplY3Q6IER1bW15XHJcblwKK1xyXG5cCitsaW5lMVxyXG5cCitsaW5lMlxyXG5cCitsaW5lM1xyXG5cCisuXHJcbiIiIgorCisKK2NsYXNzIER1bW15UE9QM0hhbmRsZXIoYXN5bmNoYXQuYXN5bmNfY2hhdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubik6CisgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubikKKyAgICAgICAgc2VsZi5zZXRfdGVybWluYXRvcigiXHJcbiIpCisgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gW10KKyAgICAgICAgc2VsZi5wdXNoKCcrT0sgZHVtbXkgcG9wMyBzZXJ2ZXIgcmVhZHkuJykKKworICAgIGRlZiBjb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuaW5fYnVmZmVyLmFwcGVuZChkYXRhKQorCisgICAgZGVmIGZvdW5kX3Rlcm1pbmF0b3Ioc2VsZik6CisgICAgICAgIGxpbmUgPSAnJy5qb2luKHNlbGYuaW5fYnVmZmVyKQorICAgICAgICBzZWxmLmluX2J1ZmZlciA9IFtdCisgICAgICAgIGNtZCA9IGxpbmUuc3BsaXQoJyAnKVswXS5sb3dlcigpCisgICAgICAgIHNwYWNlID0gbGluZS5maW5kKCcgJykKKyAgICAgICAgaWYgc3BhY2UgIT0gLTE6CisgICAgICAgICAgICBhcmcgPSBsaW5lW3NwYWNlICsgMTpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmcgPSAiIgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdjbWRfJyArIGNtZCk6CisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYsICdjbWRfJyArIGNtZCkKKyAgICAgICAgICAgIG1ldGhvZChhcmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnB1c2goJy1FUlIgdW5yZWNvZ25pemVkIFBPUDMgY29tbWFuZCAiJXMiLicgJWNtZCkKKworICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHJhaXNlCisKKyAgICBkZWYgcHVzaChzZWxmLCBkYXRhKToKKyAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5wdXNoKHNlbGYsIGRhdGEgKyAnXHJcbicpCisKKyAgICBkZWYgY21kX2VjaG8oc2VsZiwgYXJnKToKKyAgICAgICAgIyBzZW5kcyBiYWNrIHRoZSByZWNlaXZlZCBzdHJpbmcgKHVzZWQgYnkgdGhlIHRlc3Qgc3VpdGUpCisgICAgICAgIHNlbGYucHVzaChhcmcpCisKKyAgICBkZWYgY21kX3VzZXIoc2VsZiwgYXJnKToKKyAgICAgICAgaWYgYXJnICE9ICJndWlkbyI6CisgICAgICAgICAgICBzZWxmLnB1c2goIi1FUlIgbm8gc3VjaCB1c2VyIikKKyAgICAgICAgc2VsZi5wdXNoKCcrT0sgcGFzc3dvcmQgcmVxdWlyZWQnKQorCisgICAgZGVmIGNtZF9wYXNzKHNlbGYsIGFyZyk6CisgICAgICAgIGlmIGFyZyAhPSAicHl0aG9uIjoKKyAgICAgICAgICAgIHNlbGYucHVzaCgiLUVSUiB3cm9uZyBwYXNzd29yZCIpCisgICAgICAgIHNlbGYucHVzaCgnK09LIDEwIG1lc3NhZ2VzJykKKworICAgIGRlZiBjbWRfc3RhdChzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJytPSyAxMCAxMDAnKQorCisgICAgZGVmIGNtZF9saXN0KHNlbGYsIGFyZyk6CisgICAgICAgIGlmIGFyZzoKKyAgICAgICAgICAgIHNlbGYucHVzaCgnK09LICVzICVzJyAlKGFyZywgYXJnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucHVzaCgnK09LJykKKyAgICAgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQucHVzaChzZWxmLCBMSVNUX1JFU1ApCisKKyAgICBjbWRfdWlkbCA9IGNtZF9saXN0CisKKyAgICBkZWYgY21kX3JldHIoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcrT0sgJXMgYnl0ZXMnICVsZW4oUkVUUl9SRVNQKSkKKyAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5wdXNoKHNlbGYsIFJFVFJfUkVTUCkKKworICAgIGNtZF90b3AgPSBjbWRfcmV0cgorCisgICAgZGVmIGNtZF9kZWxlKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnK09LIG1lc3NhZ2UgbWFya2VkIGZvciBkZWxldGlvbi4nKQorCisgICAgZGVmIGNtZF9ub29wKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnK09LIGRvbmUgbm90aGluZy4nKQorCisgICAgZGVmIGNtZF9ycG9wKHNlbGYsIGFyZyk6CisgICAgICAgIHNlbGYucHVzaCgnK09LIGRvbmUgbm90aGluZy4nKQorCisKK2NsYXNzIER1bW15UE9QM1NlcnZlcihhc3luY29yZS5kaXNwYXRjaGVyLCB0aHJlYWRpbmcuVGhyZWFkKToKKworICAgIGhhbmRsZXIgPSBEdW1teVBPUDNIYW5kbGVyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcywgYWY9c29ja2V0LkFGX0lORVQpOgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KGFmLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuYmluZChhZGRyZXNzKQorICAgICAgICBzZWxmLmxpc3Rlbig1KQorICAgICAgICBzZWxmLmFjdGl2ZSA9IEZhbHNlCisgICAgICAgIHNlbGYuYWN0aXZlX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuaG9zdCwgc2VsZi5wb3J0ID0gc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVs6Ml0KKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmFjdGl2ZQorICAgICAgICBzZWxmLl9fZmxhZyA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuc3RhcnQoc2VsZikKKyAgICAgICAgc2VsZi5fX2ZsYWcud2FpdCgpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLmFjdGl2ZSA9IFRydWUKKyAgICAgICAgc2VsZi5fX2ZsYWcuc2V0KCkKKyAgICAgICAgd2hpbGUgc2VsZi5hY3RpdmUgYW5kIGFzeW5jb3JlLnNvY2tldF9tYXA6CisgICAgICAgICAgICBzZWxmLmFjdGl2ZV9sb2NrLmFjcXVpcmUoKQorICAgICAgICAgICAgYXN5bmNvcmUubG9vcCh0aW1lb3V0PTAuMSwgY291bnQ9MSkKKyAgICAgICAgICAgIHNlbGYuYWN0aXZlX2xvY2sucmVsZWFzZSgpCisgICAgICAgIGFzeW5jb3JlLmNsb3NlX2FsbChpZ25vcmVfYWxsPVRydWUpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuYWN0aXZlCisgICAgICAgIHNlbGYuYWN0aXZlID0gRmFsc2UKKyAgICAgICAgc2VsZi5qb2luKCkKKworICAgIGRlZiBoYW5kbGVfYWNjZXB0KHNlbGYpOgorICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5hY2NlcHQoKQorICAgICAgICBzZWxmLmhhbmRsZXIgPSBzZWxmLmhhbmRsZXIoY29ubikKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgaGFuZGxlX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2UoKQorICAgIGhhbmRsZV9yZWFkID0gaGFuZGxlX2Nvbm5lY3QKKworICAgIGRlZiB3cml0YWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHJhaXNlCisKKworY2xhc3MgVGVzdFBPUDNDbGFzcyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgYXNzZXJ0T0soc2VsZiwgcmVzcCk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwLnN0YXJ0c3dpdGgoIitPSyIpKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15UE9QM1NlcnZlcigoSE9TVCwgMCkpCisgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5jbGllbnQgPSBwb3BsaWIuUE9QMyhzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgdGVzdF9nZXR3ZWxjb21lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LmdldHdlbGNvbWUoKSwgJytPSyBkdW1teSBwb3AzIHNlcnZlciByZWFkeS4nKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocG9wbGliLmVycm9yX3Byb3RvLCBzZWxmLmNsaWVudC5fc2hvcnRjbWQsICdlY2hvIC1lcnInKQorCisgICAgZGVmIHRlc3RfdXNlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPSyhzZWxmLmNsaWVudC51c2VyKCdndWlkbycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhwb3BsaWIuZXJyb3JfcHJvdG8sIHNlbGYuY2xpZW50LnVzZXIsICdpbnZhbGlkJykKKworICAgIGRlZiB0ZXN0X3Bhc3NfKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE9LKHNlbGYuY2xpZW50LnBhc3NfKCdweXRob24nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocG9wbGliLmVycm9yX3Byb3RvLCBzZWxmLmNsaWVudC51c2VyLCAnaW52YWxpZCcpCisKKyAgICBkZWYgdGVzdF9zdGF0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LnN0YXQoKSwgKDEwLCAxMDApKQorCisgICAgZGVmIHRlc3RfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5saXN0KClbMTpdLAorICAgICAgICAgICAgICAgICAgICAgICAgIChbJzEgMScsICcyIDInLCAnMyAzJywgJzQgNCcsICc1IDUnXSwgMjUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jbGllbnQubGlzdCgnMScpLmVuZHN3aXRoKCJPSyAxIDEiKSkKKworICAgIGRlZiB0ZXN0X3JldHIoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gKCcrT0sgMTE2IGJ5dGVzJywKKyAgICAgICAgICAgICAgICAgICAgWydGcm9tOiBwb3N0bWFzdGVyQHB5dGhvbi5vcmcnLCAnQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluJywKKyAgICAgICAgICAgICAgICAgICAgICdNSU1FLVZlcnNpb246IDEuMCcsICdTdWJqZWN0OiBEdW1teScsCisgICAgICAgICAgICAgICAgICAgICAnJywgJ2xpbmUxJywgJ2xpbmUyJywgJ2xpbmUzJ10sCisgICAgICAgICAgICAgICAgICAgIDExMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC5yZXRyKCdmb28nKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9kZWxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE9LKHNlbGYuY2xpZW50LmRlbGUoJ2ZvbycpKQorCisgICAgZGVmIHRlc3Rfbm9vcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRPSyhzZWxmLmNsaWVudC5ub29wKCkpCisKKyAgICBkZWYgdGVzdF9ycG9wKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE9LKHNlbGYuY2xpZW50LnJwb3AoJ2ZvbycpKQorCisgICAgZGVmIHRlc3RfdG9wKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICAoJytPSyAxMTYgYnl0ZXMnLAorICAgICAgICAgICAgICAgICAgICAgWydGcm9tOiBwb3N0bWFzdGVyQHB5dGhvbi5vcmcnLCAnQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluJywKKyAgICAgICAgICAgICAgICAgICAgICAnTUlNRS1WZXJzaW9uOiAxLjAnLCAnU3ViamVjdDogRHVtbXknLCAnJywKKyAgICAgICAgICAgICAgICAgICAgICAnbGluZTEnLCAnbGluZTInLCAnbGluZTMnXSwKKyAgICAgICAgICAgICAgICAgICAgIDExMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaWVudC50b3AoMSwgMSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfdWlkbChzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQudWlkbCgpCisgICAgICAgIHNlbGYuY2xpZW50LnVpZGwoJ2ZvbycpCisKKworU1VQUE9SVFNfU1NMID0gRmFsc2UKK2lmIGhhc2F0dHIocG9wbGliLCAnUE9QM19TU0wnKToKKyAgICBpbXBvcnQgc3NsCisKKyAgICBTVVBQT1JUU19TU0wgPSBUcnVlCisgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsICJrZXljZXJ0LnBlbSIpCisKKyAgICBjbGFzcyBEdW1teVBPUDNfU1NMSGFuZGxlcihEdW1teVBPUDNIYW5kbGVyKToKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubik6CisgICAgICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgICAgICAgICBzZWxmLnNvY2tldCA9IHNzbC53cmFwX3NvY2tldChzZWxmLnNvY2tldCwgY2VydGZpbGU9Q0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UpCisgICAgICAgICAgICAjIE11c3QgdHJ5IGhhbmRzaGFrZSBiZWZvcmUgY2FsbGluZyBwdXNoKCkKKyAgICAgICAgICAgIHNlbGYuX3NzbF9hY2NlcHRpbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9kb19zc2xfaGFuZHNoYWtlKCkKKyAgICAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoIlxyXG4iKQorICAgICAgICAgICAgc2VsZi5pbl9idWZmZXIgPSBbXQorICAgICAgICAgICAgc2VsZi5wdXNoKCcrT0sgZHVtbXkgcG9wMyBzZXJ2ZXIgcmVhZHkuJykKKworICAgICAgICBkZWYgX2RvX3NzbF9oYW5kc2hha2Uoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9FT0Y6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBlcnJuby5FQ09OTkFCT1JURUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NzbF9hY2NlcHRpbmcgPSBGYWxzZQorCisgICAgICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3NzbF9hY2NlcHRpbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fc3NsX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIER1bW15UE9QM0hhbmRsZXIuaGFuZGxlX3JlYWQoc2VsZikKKworICAgIGNsYXNzIFRlc3RQT1AzX1NTTENsYXNzKFRlc3RQT1AzQ2xhc3MpOgorICAgICAgICAjIHJlcGVhdCBwcmV2aW91cyB0ZXN0cyBieSB1c2luZyBwb3BsaWIuUE9QM19TU0wKKworICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15UE9QM1NlcnZlcigoSE9TVCwgMCkpCisgICAgICAgICAgICBzZWxmLnNlcnZlci5oYW5kbGVyID0gRHVtbXlQT1AzX1NTTEhhbmRsZXIKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYuY2xpZW50ID0gcG9wbGliLlBPUDNfU1NMKHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisKKyAgICAgICAgZGVmIHRlc3RfX2FsbF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignUE9QM19TU0wnLCBwb3BsaWIuX19hbGxfXykKKworCitjbGFzcyBUZXN0VGltZW91dHMoVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmV2dCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoNjApICAjIFNhZmV0eSBuZXQuIExvb2sgaXNzdWUgMTE4MTIKKyAgICAgICAgc2VsZi5wb3J0ID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2spCisgICAgICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5zZXJ2ZXIsIGFyZ3M9KHNlbGYuZXZ0LHNlbGYuc29jaykpCisgICAgICAgIHNlbGYudGhyZWFkLnNldERhZW1vbihUcnVlKQorICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCisgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKyAgICAgICAgZGVsIHNlbGYudGhyZWFkICAjIENsZWFyIG91dCBhbnkgZGFuZ2xpbmcgVGhyZWFkIG9iamVjdHMuCisKKyAgICBkZWYgc2VydmVyKHNlbGYsIGV2dCwgc2Vydik6CisgICAgICAgIHNlcnYubGlzdGVuKDUpCisgICAgICAgIGV2dC5zZXQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb25uLCBhZGRyID0gc2Vydi5hY2NlcHQoKQorICAgICAgICAgICAgY29ubi5zZW5kKCIrIEhvbGEgbXVuZG9cbiIpCisgICAgICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2Vydi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFRpbWVvdXREZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwb3AgPSBwb3BsaWIuUE9QMyhIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3Auc29jay5nZXR0aW1lb3V0KCksIDMwKQorICAgICAgICBwb3Auc29jay5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFRpbWVvdXROb25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwb3AgPSBwb3BsaWIuUE9QMyhIT1NULCBzZWxmLnBvcnQsIHRpbWVvdXQ9Tm9uZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocG9wLnNvY2suZ2V0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHBvcC5zb2NrLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0VGltZW91dFZhbHVlKHNlbGYpOgorICAgICAgICBwb3AgPSBwb3BsaWIuUE9QMyhIT1NULCBzZWxmLnBvcnQsIHRpbWVvdXQ9MzApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9wLnNvY2suZ2V0dGltZW91dCgpLCAzMCkKKyAgICAgICAgcG9wLnNvY2suY2xvc2UoKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0cyA9IFtUZXN0UE9QM0NsYXNzLCBUZXN0VGltZW91dHNdCisgICAgaWYgU1VQUE9SVFNfU1NMOgorICAgICAgICB0ZXN0cy5hcHBlbmQoVGVzdFBPUDNfU1NMQ2xhc3MpCisgICAgdGhyZWFkX2luZm8gPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKyAgICB0cnk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQorICAgIGZpbmFsbHk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqdGhyZWFkX2luZm8pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcG9zaXgucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wb3NpeC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGE4Y2RmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcG9zaXgucHkKQEAgLTAsMCArMSw1NDYgQEAKKyJUZXN0IHBvc2l4IGZ1bmN0aW9ucyIKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBTa2lwIHRoZXNlIHRlc3RzIGlmIHRoZXJlIGlzIG5vIHBvc2l4IG1vZHVsZS4KK3Bvc2l4ID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3Bvc2l4JykKKworaW1wb3J0IGVycm5vCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IG9zCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBwd2QKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCisKK19EVU1NWV9TWU1MSU5LID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4gKyAnLWR1bW15LXN5bWxpbmsnKQorCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygnaWdub3JlJywgJy4qIHBvdGVudGlhbCBzZWN1cml0eSByaXNrIC4qJywKKyAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQorCitjbGFzcyBQb3NpeFRlc3Rlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgY3JlYXRlIGVtcHR5IGZpbGUKKyAgICAgICAgZnAgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3KycpCisgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi50ZWFyZG93bl9maWxlcyA9IFsgdGVzdF9zdXBwb3J0LlRFU1RGTiBdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciB0ZWFyZG93bl9maWxlIGluIHNlbGYudGVhcmRvd25fZmlsZXM6CisgICAgICAgICAgICBvcy51bmxpbmsodGVhcmRvd25fZmlsZSkKKworICAgIGRlZiB0ZXN0Tm9BcmdGdW5jdGlvbnMoc2VsZik6CisgICAgICAgICMgdGVzdCBwb3NpeCBmdW5jdGlvbnMgd2hpY2ggdGFrZSBubyBhcmd1bWVudHMgYW5kIGhhdmUKKyAgICAgICAgIyBubyBzaWRlLWVmZmVjdHMgd2hpY2ggd2UgbmVlZCB0byBjbGVhbnVwIChlLmcuLCBmb3JrLCB3YWl0LCBhYm9ydCkKKyAgICAgICAgTk9fQVJHX0ZVTkNUSU9OUyA9IFsgImN0ZXJtaWQiLCAiZ2V0Y3dkIiwgImdldGN3ZHUiLCAidW5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiLCAiZ2V0bG9hZGF2ZyIsICJ0bXBuYW0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0ZWdpZCIsICJnZXRldWlkIiwgImdldGdpZCIsICJnZXRncm91cHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0cGlkIiwgImdldHBncnAiLCAiZ2V0cHBpZCIsICJnZXR1aWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAiIiwgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gTk9fQVJHX0ZVTkNUSU9OUzoKKyAgICAgICAgICAgICAgICBwb3NpeF9mdW5jID0gZ2V0YXR0cihwb3NpeCwgbmFtZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBwb3NpeF9mdW5jIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBwb3NpeF9mdW5jKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeF9mdW5jLCAxKQorCisgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2dldHJlc3VpZCcpOgorICAgICAgICBkZWYgdGVzdF9nZXRyZXN1aWQoc2VsZik6CisgICAgICAgICAgICB1c2VyX2lkcyA9IHBvc2l4LmdldHJlc3VpZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih1c2VyX2lkcyksIDMpCisgICAgICAgICAgICBmb3IgdmFsIGluIHVzZXJfaWRzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHZhbCwgMCkKKworICAgIGlmIGhhc2F0dHIocG9zaXgsICdnZXRyZXNnaWQnKToKKyAgICAgICAgZGVmIHRlc3RfZ2V0cmVzZ2lkKHNlbGYpOgorICAgICAgICAgICAgZ3JvdXBfaWRzID0gcG9zaXguZ2V0cmVzZ2lkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdyb3VwX2lkcyksIDMpCisgICAgICAgICAgICBmb3IgdmFsIGluIGdyb3VwX2lkczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCh2YWwsIDApCisKKyAgICBpZiBoYXNhdHRyKHBvc2l4LCAnc2V0cmVzdWlkJyk6CisgICAgICAgIGRlZiB0ZXN0X3NldHJlc3VpZChzZWxmKToKKyAgICAgICAgICAgIGN1cnJlbnRfdXNlcl9pZHMgPSBwb3NpeC5nZXRyZXN1aWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9zaXguc2V0cmVzdWlkKCpjdXJyZW50X3VzZXJfaWRzKSkKKyAgICAgICAgICAgICMgLTEgbWVhbnMgZG9uJ3QgY2hhbmdlIHRoYXQgdmFsdWUuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwb3NpeC5zZXRyZXN1aWQoLTEsIC0xLCAtMSkpCisKKyAgICAgICAgZGVmIHRlc3Rfc2V0cmVzdWlkX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgICAgICMgRG9uJ3QgZG8gdGhpcyB0ZXN0IGlmIHNvbWVvbmUgaXMgc2lsbHkgZW5vdWdoIHRvIHJ1biB1cyBhcyByb290LgorICAgICAgICAgICAgY3VycmVudF91c2VyX2lkcyA9IHBvc2l4LmdldHJlc3VpZCgpCisgICAgICAgICAgICBpZiAwIG5vdCBpbiBjdXJyZW50X3VzZXJfaWRzOgorICAgICAgICAgICAgICAgIG5ld191c2VyX2lkcyA9IChjdXJyZW50X3VzZXJfaWRzWzBdKzEsIC0xLCAtMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBwb3NpeC5zZXRyZXN1aWQsICpuZXdfdXNlcl9pZHMpCisKKyAgICBpZiBoYXNhdHRyKHBvc2l4LCAnc2V0cmVzZ2lkJyk6CisgICAgICAgIGRlZiB0ZXN0X3NldHJlc2dpZChzZWxmKToKKyAgICAgICAgICAgIGN1cnJlbnRfZ3JvdXBfaWRzID0gcG9zaXguZ2V0cmVzZ2lkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBvc2l4LnNldHJlc2dpZCgqY3VycmVudF9ncm91cF9pZHMpKQorICAgICAgICAgICAgIyAtMSBtZWFucyBkb24ndCBjaGFuZ2UgdGhhdCB2YWx1ZS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBvc2l4LnNldHJlc2dpZCgtMSwgLTEsIC0xKSkKKworICAgICAgICBkZWYgdGVzdF9zZXRyZXNnaWRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAgICAgIyBEb24ndCBkbyB0aGlzIHRlc3QgaWYgc29tZW9uZSBpcyBzaWxseSBlbm91Z2ggdG8gcnVuIHVzIGFzIHJvb3QuCisgICAgICAgICAgICBjdXJyZW50X2dyb3VwX2lkcyA9IHBvc2l4LmdldHJlc2dpZCgpCisgICAgICAgICAgICBpZiAwIG5vdCBpbiBjdXJyZW50X2dyb3VwX2lkczoKKyAgICAgICAgICAgICAgICBuZXdfZ3JvdXBfaWRzID0gKGN1cnJlbnRfZ3JvdXBfaWRzWzBdKzEsIC0xLCAtMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBwb3NpeC5zZXRyZXNnaWQsICpuZXdfZ3JvdXBfaWRzKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2luaXRncm91cHMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCBuZWVkcyBvcy5pbml0Z3JvdXBzKCkiKQorICAgIGRlZiB0ZXN0X2luaXRncm91cHMoc2VsZik6CisgICAgICAgICMgSXQgdGFrZXMgYSBzdHJpbmcgYW5kIGFuIGludGVnZXI7IGNoZWNrIHRoYXQgaXQgcmFpc2VzIGEgVHlwZUVycm9yCisgICAgICAgICMgZm9yIG90aGVyIGFyZ3VtZW50IGxpc3RzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4LmluaXRncm91cHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXguaW5pdGdyb3VwcywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeC5pbml0Z3JvdXBzLCAzLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeC5pbml0Z3JvdXBzLCAiZm9vIiwgMywgb2JqZWN0KCkpCisKKyAgICAgICAgIyBJZiBhIG5vbi1wcml2aWxlZ2VkIHVzZXIgaW52b2tlcyBpdCwgaXQgc2hvdWxkIGZhaWwgd2l0aCBPU0Vycm9yCisgICAgICAgICMgRVBFUk0uCisgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmFtZSA9IHB3ZC5nZXRwd3VpZChwb3NpeC5nZXR1aWQoKSkucHdfbmFtZQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICMgdGhlIGN1cnJlbnQgVUlEIG1heSBub3QgaGF2ZSBhIHB3ZCBlbnRyeQorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJuZWVkIGEgcHdkIGVudHJ5IikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwb3NpeC5pbml0Z3JvdXBzKG5hbWUsIDEzKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVQRVJNKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIE9TRXJyb3IgdG8gYmUgcmFpc2VkIGJ5IGluaXRncm91cHMiKQorCisgICAgZGVmIHRlc3Rfc3RhdHZmcyhzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3N0YXR2ZnMnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeC5zdGF0dmZzKG9zLmN1cmRpcikpCisKKyAgICBkZWYgdGVzdF9mc3RhdHZmcyhzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2ZzdGF0dmZzJyk6CisgICAgICAgICAgICBmcCA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXguZnN0YXR2ZnMoZnAuZmlsZW5vKCkpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9mdHJ1bmNhdGUoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdmdHJ1bmNhdGUnKToKKyAgICAgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAndysnKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgd2UgbmVlZCB0byBoYXZlIHNvbWUgZGF0YSB0byB0cnVuY2F0ZQorICAgICAgICAgICAgICAgIGZwLndyaXRlKCd0ZXN0JykKKyAgICAgICAgICAgICAgICBmcC5mbHVzaCgpCisgICAgICAgICAgICAgICAgcG9zaXguZnRydW5jYXRlKGZwLmZpbGVubygpLCAwKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9kdXAoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdkdXAnKToKKyAgICAgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZkID0gcG9zaXguZHVwKGZwLmZpbGVubygpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmZCwgaW50KQorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jb25mc3RyKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnY29uZnN0cicpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG9zaXguY29uZnN0ciwgIkNTX2dhcmJhZ2UiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocG9zaXguY29uZnN0cigiQ1NfUEFUSCIpKSA+IDAsIFRydWUpCisKKyAgICBkZWYgdGVzdF9kdXAyKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZHVwMicpOgorICAgICAgICAgICAgZnAxID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgZnAyID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBvc2l4LmR1cDIoZnAxLmZpbGVubygpLCBmcDIuZmlsZW5vKCkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGZwMS5jbG9zZSgpCisgICAgICAgICAgICAgICAgZnAyLmNsb3NlKCkKKworICAgIGRlZiBmZG9wZW5faGVscGVyKHNlbGYsICphcmdzKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIG9zLk9fUkRPTkxZKQorICAgICAgICBmcDIgPSBwb3NpeC5mZG9wZW4oZmQsICphcmdzKQorICAgICAgICBmcDIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZmRvcGVuKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZmRvcGVuJyk6CisgICAgICAgICAgICBzZWxmLmZkb3Blbl9oZWxwZXIoKQorICAgICAgICAgICAgc2VsZi5mZG9wZW5faGVscGVyKCdyJykKKyAgICAgICAgICAgIHNlbGYuZmRvcGVuX2hlbHBlcigncicsIDEwMCkKKworICAgIGRlZiB0ZXN0X29zZXhsb2NrKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAiT19FWExPQ0siKToKKyAgICAgICAgICAgIGZkID0gb3Mub3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9zLk9fV1JPTkxZfG9zLk9fRVhMT0NLfG9zLk9fQ1JFQVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5vcGVuLCB0ZXN0X3N1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuT19XUk9OTFl8b3MuT19FWExPQ0t8b3MuT19OT05CTE9DSykKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorCisgICAgICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAiT19TSExPQ0siKToKKyAgICAgICAgICAgICAgICBmZCA9IG9zLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuT19XUk9OTFl8b3MuT19TSExPQ0t8b3MuT19DUkVBVCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5vcGVuLCB0ZXN0X3N1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLk9fV1JPTkxZfG9zLk9fRVhMT0NLfG9zLk9fTk9OQkxPQ0spCisgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisKKyAgICBkZWYgdGVzdF9vc3NobG9jayhzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgIk9fU0hMT0NLIik6CisgICAgICAgICAgICBmZDEgPSBvcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgb3MuT19XUk9OTFl8b3MuT19TSExPQ0t8b3MuT19DUkVBVCkKKyAgICAgICAgICAgIGZkMiA9IG9zLm9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuT19XUk9OTFl8b3MuT19TSExPQ0t8b3MuT19DUkVBVCkKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkMikKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkMSkKKworICAgICAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgIk9fRVhMT0NLIik6CisgICAgICAgICAgICAgICAgZmQgPSBvcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLk9fV1JPTkxZfG9zLk9fU0hMT0NLfG9zLk9fQ1JFQVQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Mub3BlbiwgdGVzdF9zdXBwb3J0LlRFU1RGTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5PX1JET05MWXxvcy5PX0VYTE9DS3xvcy5PX05PTkJMT0NLKQorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorCisgICAgZGVmIHRlc3RfZnN0YXQoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdmc3RhdCcpOgorICAgICAgICAgICAgZnAgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4LmZzdGF0KGZwLmZpbGVubygpKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc3RhdChzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3N0YXQnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeC5zdGF0KHRlc3Rfc3VwcG9ydC5URVNURk4pKQorCisgICAgZGVmIF90ZXN0X2FsbF9jaG93bl9jb21tb24oc2VsZiwgY2hvd25fZnVuYywgZmlyc3RfcGFyYW0sIHN0YXRfZnVuYyk6CisgICAgICAgICIiIkNvbW1vbiBjb2RlIGZvciBjaG93biwgZmNob3duIGFuZCBsY2hvd24gdGVzdHMuIiIiCisgICAgICAgIGRlZiBjaGVja19zdGF0KHVpZCwgZ2lkKToKKyAgICAgICAgICAgIGlmIHN0YXRfZnVuYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzdGF0ID0gc3RhdF9mdW5jKGZpcnN0X3BhcmFtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5zdF91aWQsIHVpZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuc3RfZ2lkLCBnaWQpCisgICAgICAgIHVpZCA9IG9zLmdldHVpZCgpCisgICAgICAgIGdpZCA9IG9zLmdldGdpZCgpCisgICAgICAgICMgdGVzdCBhIHN1Y2Nlc3NmdWwgY2hvd24gY2FsbAorICAgICAgICBjaG93bl9mdW5jKGZpcnN0X3BhcmFtLCB1aWQsIGdpZCkKKyAgICAgICAgY2hlY2tfc3RhdCh1aWQsIGdpZCkKKyAgICAgICAgY2hvd25fZnVuYyhmaXJzdF9wYXJhbSwgLTEsIGdpZCkKKyAgICAgICAgY2hlY2tfc3RhdCh1aWQsIGdpZCkKKyAgICAgICAgY2hvd25fZnVuYyhmaXJzdF9wYXJhbSwgdWlkLCAtMSkKKyAgICAgICAgY2hlY2tfc3RhdCh1aWQsIGdpZCkKKworICAgICAgICBpZiB1aWQgPT0gMDoKKyAgICAgICAgICAgICMgVHJ5IGFuIGFtdXNpbmdseSBsYXJnZSB1aWQvZ2lkIHRvIG1ha2Ugc3VyZSB3ZSBoYW5kbGUKKyAgICAgICAgICAgICMgbGFyZ2UgdW5zaWduZWQgdmFsdWVzLiAgKGNob3duIGxldHMgeW91IHVzZSBhbnkKKyAgICAgICAgICAgICMgdWlkL2dpZCB5b3UgbGlrZSwgZXZlbiBpZiB0aGV5IGFyZW4ndCBkZWZpbmVkLikKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhpcyBwcm9ibGVtIGtlZXBzIGNvbWluZyB1cDoKKyAgICAgICAgICAgICMgICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTc0Nzg1OAorICAgICAgICAgICAgIyAgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU0NTkxCisgICAgICAgICAgICAjICAgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE1MzAxCisgICAgICAgICAgICAjIEhvcGVmdWxseSB0aGUgZml4IGluIDQ1OTEgZml4ZXMgaXQgZm9yIGdvb2QhCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoaXMgcGFydCBvZiB0aGUgdGVzdCBvbmx5IHJ1bnMgd2hlbiBydW4gYXMgcm9vdC4KKyAgICAgICAgICAgICMgT25seSBzY2FyeSBwZW9wbGUgcnVuIHRoZWlyIHRlc3RzIGFzIHJvb3QuCisKKyAgICAgICAgICAgIGJpZ192YWx1ZSA9IDIqKjMxCisgICAgICAgICAgICBjaG93bl9mdW5jKGZpcnN0X3BhcmFtLCBiaWdfdmFsdWUsIGJpZ192YWx1ZSkKKyAgICAgICAgICAgIGNoZWNrX3N0YXQoYmlnX3ZhbHVlLCBiaWdfdmFsdWUpCisgICAgICAgICAgICBjaG93bl9mdW5jKGZpcnN0X3BhcmFtLCAtMSwgLTEpCisgICAgICAgICAgICBjaGVja19zdGF0KGJpZ192YWx1ZSwgYmlnX3ZhbHVlKQorICAgICAgICAgICAgY2hvd25fZnVuYyhmaXJzdF9wYXJhbSwgdWlkLCBnaWQpCisgICAgICAgICAgICBjaGVja19zdGF0KHVpZCwgZ2lkKQorICAgICAgICBlbGlmIHBsYXRmb3JtLnN5c3RlbSgpIGluICgnSFAtVVgnLCAnU3VuT1MnKToKKyAgICAgICAgICAgICMgSFAtVVggYW5kIFNvbGFyaXMgY2FuIGFsbG93IGEgbm9uLXJvb3QgdXNlciB0byBjaG93bigpIHRvIHJvb3QKKyAgICAgICAgICAgICMgKGlzc3VlICM1MTEzKQorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlNraXBwaW5nIGJlY2F1c2Ugb2Ygbm9uLXN0YW5kYXJkIGNob3duKCkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlaGF2aW9yIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgbm9uLXJvb3QgY2Fubm90IGNob3duIHRvIHJvb3QsIHJhaXNlcyBPU0Vycm9yCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBjaG93bl9mdW5jLCBmaXJzdF9wYXJhbSwgMCwgMCkKKyAgICAgICAgICAgIGNoZWNrX3N0YXQodWlkLCBnaWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBjaG93bl9mdW5jLCBmaXJzdF9wYXJhbSwgMCwgLTEpCisgICAgICAgICAgICBjaGVja19zdGF0KHVpZCwgZ2lkKQorICAgICAgICAgICAgaWYgMCBub3QgaW4gb3MuZ2V0Z3JvdXBzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY2hvd25fZnVuYywgZmlyc3RfcGFyYW0sIC0xLCAwKQorICAgICAgICAgICAgICAgIGNoZWNrX3N0YXQodWlkLCBnaWQpCisgICAgICAgICMgdGVzdCBpbGxlZ2FsIHR5cGVzCisgICAgICAgIGZvciB0IGluIHN0ciwgZmxvYXQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNob3duX2Z1bmMsIGZpcnN0X3BhcmFtLCB0KHVpZCksIGdpZCkKKyAgICAgICAgICAgIGNoZWNrX3N0YXQodWlkLCBnaWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNob3duX2Z1bmMsIGZpcnN0X3BhcmFtLCB1aWQsIHQoZ2lkKSkKKyAgICAgICAgICAgIGNoZWNrX3N0YXQodWlkLCBnaWQpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHBvc2l4LCAnY2hvd24nKSwgInRlc3QgbmVlZHMgb3MuY2hvd24oKSIpCisgICAgZGVmIHRlc3RfY2hvd24oc2VsZik6CisgICAgICAgICMgcmFpc2UgYW4gT1NFcnJvciBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdAorICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgcG9zaXguY2hvd24sIHRlc3Rfc3VwcG9ydC5URVNURk4sIC0xLCAtMSkKKworICAgICAgICAjIHJlLWNyZWF0ZSB0aGUgZmlsZQorICAgICAgICBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3JykuY2xvc2UoKQorICAgICAgICBzZWxmLl90ZXN0X2FsbF9jaG93bl9jb21tb24ocG9zaXguY2hvd24sIHRlc3Rfc3VwcG9ydC5URVNURk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKHBvc2l4LCAnc3RhdCcsIE5vbmUpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2ZjaG93bicpLCAidGVzdCBuZWVkcyBvcy5mY2hvd24oKSIpCisgICAgZGVmIHRlc3RfZmNob3duKHNlbGYpOgorICAgICAgICBvcy51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgICAgICAjIHJlLWNyZWF0ZSB0aGUgZmlsZQorICAgICAgICB0ZXN0X2ZpbGUgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmQgPSB0ZXN0X2ZpbGUuZmlsZW5vKCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfYWxsX2Nob3duX2NvbW1vbihwb3NpeC5mY2hvd24sIGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIocG9zaXgsICdmc3RhdCcsIE5vbmUpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGVzdF9maWxlLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdsY2hvd24nKSwgInRlc3QgbmVlZHMgb3MubGNob3duKCkiKQorICAgIGRlZiB0ZXN0X2xjaG93bihzZWxmKToKKyAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICMgY3JlYXRlIGEgc3ltbGluaworICAgICAgICBvcy5zeW1saW5rKF9EVU1NWV9TWU1MSU5LLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLl90ZXN0X2FsbF9jaG93bl9jb21tb24ocG9zaXgubGNob3duLCB0ZXN0X3N1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihwb3NpeCwgJ2xzdGF0JywgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9jaGRpcihzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2NoZGlyJyk6CisgICAgICAgICAgICBwb3NpeC5jaGRpcihvcy5jdXJkaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBwb3NpeC5jaGRpciwgdGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2xzZGlyKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnbHNkaXInKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgcG9zaXgubHNkaXIob3MuY3VyZGlyKSkKKworICAgIGRlZiB0ZXN0X2FjY2VzcyhzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2FjY2VzcycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4LmFjY2Vzcyh0ZXN0X3N1cHBvcnQuVEVTVEZOLCBvcy5SX09LKSkKKworICAgIGRlZiB0ZXN0X3VtYXNrKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAndW1hc2snKToKKyAgICAgICAgICAgIG9sZF9tYXNrID0gcG9zaXgudW1hc2soMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvbGRfbWFzaywgaW50KQorICAgICAgICAgICAgcG9zaXgudW1hc2sob2xkX21hc2spCisKKyAgICBkZWYgdGVzdF9zdHJlcnJvcihzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ3N0cmVycm9yJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXguc3RyZXJyb3IoMCkpCisKKyAgICBkZWYgdGVzdF9waXBlKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAncGlwZScpOgorICAgICAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBwb3NpeC5waXBlKCkKKyAgICAgICAgICAgIG9zLmNsb3NlKHJlYWRlcikKKyAgICAgICAgICAgIG9zLmNsb3NlKHdyaXRlcikKKworICAgIGRlZiB0ZXN0X3RlbXBuYW0oc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICd0ZW1wbmFtJyk6CisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0ZW1wbmFtIiwgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeC50ZW1wbmFtKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4LnRlbXBuYW0ob3MuY3VyZGlyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXgudGVtcG5hbShvcy5jdXJkaXIsICdibGFoJykpCisKKyAgICBkZWYgdGVzdF90bXBmaWxlKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAndG1wZmlsZScpOgorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAidG1wZmlsZSIsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBmcCA9IHBvc2l4LnRtcGZpbGUoKQorICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3V0aW1lKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAndXRpbWUnKToKKyAgICAgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBwb3NpeC51dGltZSh0ZXN0X3N1cHBvcnQuVEVTVEZOLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeC51dGltZSwgdGVzdF9zdXBwb3J0LlRFU1RGTiwgKE5vbmUsIE5vbmUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeC51dGltZSwgdGVzdF9zdXBwb3J0LlRFU1RGTiwgKG5vdywgTm9uZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4LnV0aW1lLCB0ZXN0X3N1cHBvcnQuVEVTVEZOLCAoTm9uZSwgbm93KSkKKyAgICAgICAgICAgIHBvc2l4LnV0aW1lKHRlc3Rfc3VwcG9ydC5URVNURk4sIChpbnQobm93KSwgaW50KG5vdykpKQorICAgICAgICAgICAgcG9zaXgudXRpbWUodGVzdF9zdXBwb3J0LlRFU1RGTiwgKG5vdywgbm93KSkKKworICAgIGRlZiBfdGVzdF9jaGZsYWdzX3JlZ3VsYXJfZmlsZShzZWxmLCBjaGZsYWdzX2Z1bmMsIHRhcmdldF9maWxlKToKKyAgICAgICAgc3QgPSBvcy5zdGF0KHRhcmdldF9maWxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzdCwgJ3N0X2ZsYWdzJykpCisKKyAgICAgICAgIyBaRlMgcmV0dXJucyBFT1BOT1RTVVBQIHdoZW4gYXR0ZW1wdGluZyB0byBzZXQgZmxhZyBVRl9JTU1VVEFCTEUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNoZmxhZ3NfZnVuYyh0YXJnZXRfZmlsZSwgc3Quc3RfZmxhZ3MgfCBzdGF0LlVGX0lNTVVUQUJMRSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgaWYgZXJyLmVycm5vICE9IGVycm5vLkVPUE5PVFNVUFA6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIG1zZyA9ICdjaGZsYWcgVUZfSU1NVVRBQkxFIG5vdCBzdXBwb3J0ZWQgYnkgdW5kZXJseWluZyBmcycKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QobXNnKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5ld19zdCA9IG9zLnN0YXQodGFyZ2V0X2ZpbGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0LnN0X2ZsYWdzIHwgc3RhdC5VRl9JTU1VVEFCTEUsIG5ld19zdC5zdF9mbGFncykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZCA9IG9wZW4odGFyZ2V0X2ZpbGUsICd3KycpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRVBFUk0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBwb3NpeC5jaGZsYWdzKHRhcmdldF9maWxlLCBzdC5zdF9mbGFncykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdjaGZsYWdzJyksICd0ZXN0IG5lZWRzIG9zLmNoZmxhZ3MoKScpCisgICAgZGVmIHRlc3RfY2hmbGFncyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9jaGZsYWdzX3JlZ3VsYXJfZmlsZShwb3NpeC5jaGZsYWdzLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2xjaGZsYWdzJyksICd0ZXN0IG5lZWRzIG9zLmxjaGZsYWdzKCknKQorICAgIGRlZiB0ZXN0X2xjaGZsYWdzX3JlZ3VsYXJfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9jaGZsYWdzX3JlZ3VsYXJfZmlsZShwb3NpeC5sY2hmbGFncywgdGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdsY2hmbGFncycpLCAndGVzdCBuZWVkcyBvcy5sY2hmbGFncygpJykKKyAgICBkZWYgdGVzdF9sY2hmbGFnc19zeW1saW5rKHNlbGYpOgorICAgICAgICB0ZXN0Zm5fc3QgPSBvcy5zdGF0KHRlc3Rfc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIodGVzdGZuX3N0LCAnc3RfZmxhZ3MnKSkKKworICAgICAgICBvcy5zeW1saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4sIF9EVU1NWV9TWU1MSU5LKQorICAgICAgICBzZWxmLnRlYXJkb3duX2ZpbGVzLmFwcGVuZChfRFVNTVlfU1lNTElOSykKKyAgICAgICAgZHVtbXlfc3ltbGlua19zdCA9IG9zLmxzdGF0KF9EVU1NWV9TWU1MSU5LKQorCisgICAgICAgICMgWkZTIHJldHVybnMgRU9QTk9UU1VQUCB3aGVuIGF0dGVtcHRpbmcgdG8gc2V0IGZsYWcgVUZfSU1NVVRBQkxFLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwb3NpeC5sY2hmbGFncyhfRFVNTVlfU1lNTElOSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X3N5bWxpbmtfc3Quc3RfZmxhZ3MgfCBzdGF0LlVGX0lNTVVUQUJMRSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgaWYgZXJyLmVycm5vICE9IGVycm5vLkVPUE5PVFNVUFA6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIG1zZyA9ICdjaGZsYWcgVUZfSU1NVVRBQkxFIG5vdCBzdXBwb3J0ZWQgYnkgdW5kZXJseWluZyBmcycKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QobXNnKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5ld190ZXN0Zm5fc3QgPSBvcy5zdGF0KHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBuZXdfZHVtbXlfc3ltbGlua19zdCA9IG9zLmxzdGF0KF9EVU1NWV9TWU1MSU5LKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rmbl9zdC5zdF9mbGFncywgbmV3X3Rlc3Rmbl9zdC5zdF9mbGFncykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVtbXlfc3ltbGlua19zdC5zdF9mbGFncyB8IHN0YXQuVUZfSU1NVVRBQkxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfZHVtbXlfc3ltbGlua19zdC5zdF9mbGFncykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHBvc2l4LmxjaGZsYWdzKF9EVU1NWV9TWU1MSU5LLCBkdW1teV9zeW1saW5rX3N0LnN0X2ZsYWdzKQorCisgICAgZGVmIHRlc3RfZ2V0Y3dkX2xvbmdfcGF0aG5hbWVzKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZ2V0Y3dkJyk6CisgICAgICAgICAgICBkaXJuYW1lID0gJ2dldGN3ZC10ZXN0LWRpcmVjdG9yeS0wMTIzNDU2Nzg5YWJjZGVmLTAxMjM0NTY3ODkwYWJjZGVmJworICAgICAgICAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgIGJhc2VfcGF0aCA9IG9zLnBhdGguYWJzcGF0aCh0ZXN0X3N1cHBvcnQuVEVTVEZOKSArICcuZ2V0Y3dkJworCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MubWtkaXIoYmFzZV9wYXRoKQorICAgICAgICAgICAgICAgIG9zLmNoZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyMgICAgICAgICAgICAgICBKdXN0IHJldHVybmluZyBub3RoaW5nIGluc3RlYWQgb2YgdGhlIFNraXBUZXN0IGV4Y2VwdGlvbiwKKyMgICAgICAgICAgICAgICBiZWNhdXNlIHRoZSB0ZXN0IHJlc3VsdHMgaW4gRXJyb3IgaW4gdGhhdCBjYXNlLgorIyAgICAgICAgICAgICAgIElzIHRoYXQgb2s/CisjICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0LCAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgZm9yIHRlc3RpbmciCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWYgX2NyZWF0ZV9hbmRfZG9fZ2V0Y3dkKGRpcm5hbWUsIGN1cnJlbnRfcGF0aF9sZW5ndGggPSAwKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIoZGlybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QsICJta2RpciBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBzdWZmaWNpZW50bHkgZGVlcCBmb3IgZ2V0Y3dkIHRlc3QiCisKKyAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoZGlybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJlbnRfcGF0aF9sZW5ndGggPCA0MDk5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lLCBjdXJyZW50X3BhdGhfbGVuZ3RoICsgbGVuKGRpcm5hbWUpICsgMSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2Vycm5vID0gZXJybm8uRU5BTUVUT09MT05HCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zIGhhdmUgcXVpcmt5IGdldGN3ZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAjIGJlaGF2aW91ciAtLSBzZWUgaXNzdWUgOTE4NSBhbmQgMTU3NjUgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAjIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBxdWlya3lfcGxhdGZvcm0gPSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1bm9zJyBpbiBzeXMucGxhdGZvcm0gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV0YnNkJyBpbiBzeXMucGxhdGZvcm0gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3BlbmJzZCcgaW4gc3lzLnBsYXRmb3JtCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBxdWlya3lfcGxhdGZvcm06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZXJybm8gPSBlcnJuby5FUkFOR0UKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXhwZWN0ZWRfZXJybm8pCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5jaGRpcignLi4nKQorICAgICAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKKworICAgICAgICAgICAgICAgIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lKQorCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLmNoZGlyKGN1cmRpcikKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGJhc2VfcGF0aCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdnZXRlZ2lkJyksICJ0ZXN0IG5lZWRzIG9zLmdldGVnaWQoKSIpCisgICAgZGVmIHRlc3RfZ2V0Z3JvdXBzKHNlbGYpOgorICAgICAgICB3aXRoIG9zLnBvcGVuKCdpZCAtRycpIGFzIGlkZzoKKyAgICAgICAgICAgIGdyb3VwcyA9IGlkZy5yZWFkKCkuc3RyaXAoKQorICAgICAgICAgICAgcmV0ID0gaWRnLmNsb3NlKCkKKworICAgICAgICBpZiByZXQgIT0gTm9uZSBvciBub3QgZ3JvdXBzOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm5lZWQgd29ya2luZyAnaWQgLUcnIikKKworICAgICAgICAjIElzc3VlcyAxNjY5ODogT1MgWCBBQklzIHByaW9yIHRvIDEwLjYgaGF2ZSBsaW1pdHMgb24gZ2V0Z3JvdXBzKCkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgaW1wb3J0IHN5c2NvbmZpZworICAgICAgICAgICAgZHQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcpIG9yICcxMC4wJworICAgICAgICAgICAgaWYgZmxvYXQoZHQpIDwgMTAuNjoKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZ2V0Z3JvdXBzKDIpIGlzIGJyb2tlbiBwcmlvciB0byAxMC42IikKKworICAgICAgICAjICdpZCAtRycgYW5kICdvcy5nZXRncm91cHMoKScgc2hvdWxkIHJldHVybiB0aGUgc2FtZQorICAgICAgICAjIGdyb3VwcywgaWdub3Jpbmcgb3JkZXIgYW5kIGR1cGxpY2F0ZXMuCisgICAgICAgICMgIzEwODIyIC0gaXQgaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB3aGV0aGVyIHBvc2l4LmdldGdyb3VwcygpCisgICAgICAgICMgaW5jbHVkZXMgdGhlIGVmZmVjdGl2ZSBnaWQgc28gd2UgaW5jbHVkZSBpdCBhbnl3YXksIHNpbmNlIGlkIC1HIGRvZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzZXQoW2ludCh4KSBmb3IgeCBpbiBncm91cHMuc3BsaXQoKV0pLAorICAgICAgICAgICAgICAgIHNldChwb3NpeC5nZXRncm91cHMoKSArIFtwb3NpeC5nZXRlZ2lkKCldKSkKKworY2xhc3MgUG9zaXhHcm91cHNUZXN0ZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBwb3NpeC5nZXR1aWQoKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm5vdCBlbm91Z2ggcHJpdmlsZWdlcyIpCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHBvc2l4LCAnZ2V0Z3JvdXBzJyk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibmVlZCBwb3NpeC5nZXRncm91cHMiKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZ2V0Z3JvdXBzKDIpIGlzIGJyb2tlbiBvbiBPU1giKQorICAgICAgICBzZWxmLnNhdmVkX2dyb3VwcyA9IHBvc2l4LmdldGdyb3VwcygpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdzZXRncm91cHMnKToKKyAgICAgICAgICAgIHBvc2l4LnNldGdyb3VwcyhzZWxmLnNhdmVkX2dyb3VwcykKKyAgICAgICAgZWxpZiBoYXNhdHRyKHBvc2l4LCAnaW5pdGdyb3VwcycpOgorICAgICAgICAgICAgbmFtZSA9IHB3ZC5nZXRwd3VpZChwb3NpeC5nZXR1aWQoKSkucHdfbmFtZQorICAgICAgICAgICAgcG9zaXguaW5pdGdyb3VwcyhuYW1lLCBzZWxmLnNhdmVkX2dyb3Vwc1swXSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdpbml0Z3JvdXBzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgbmVlZHMgcG9zaXguaW5pdGdyb3VwcygpIikKKyAgICBkZWYgdGVzdF9pbml0Z3JvdXBzKHNlbGYpOgorICAgICAgICAjIGZpbmQgbWlzc2luZyBncm91cAorCisgICAgICAgIGcgPSBtYXgoc2VsZi5zYXZlZF9ncm91cHMpICsgMQorICAgICAgICBuYW1lID0gcHdkLmdldHB3dWlkKHBvc2l4LmdldHVpZCgpKS5wd19uYW1lCisgICAgICAgIHBvc2l4LmluaXRncm91cHMobmFtZSwgZykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihnLCBwb3NpeC5nZXRncm91cHMoKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdzZXRncm91cHMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCBuZWVkcyBwb3NpeC5zZXRncm91cHMoKSIpCisgICAgZGVmIHRlc3Rfc2V0Z3JvdXBzKHNlbGYpOgorICAgICAgICBmb3IgZ3JvdXBzIGluIFtbMF0sIHJhbmdlKDE2KV06CisgICAgICAgICAgICBwb3NpeC5zZXRncm91cHMoZ3JvdXBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoZ3JvdXBzLCBwb3NpeC5nZXRncm91cHMoKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChQb3NpeFRlc3RlciwgUG9zaXhHcm91cHNUZXN0ZXIpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzRkYzE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcG9zaXhwYXRoLnB5CkBAIC0wLDAgKzEsNDIzIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCB0ZXN0X2dlbmVyaWNwYXRoCisKK2ltcG9ydCBwb3NpeHBhdGgsIG9zCitmcm9tIHBvc2l4cGF0aCBpbXBvcnQgcmVhbHBhdGgsIGFic3BhdGgsIGRpcm5hbWUsIGJhc2VuYW1lCisKKyMgQW4gYWJzb2x1dGUgcGF0aCB0byBhIHRlbXBvcmFyeSBmaWxlbmFtZSBmb3IgdGVzdGluZy4gV2UgY2FuJ3QgcmVseSBvbiBURVNURk4KKyMgYmVpbmcgYW4gYWJzb2x1dGUgcGF0aCwgc28gd2UgbmVlZCB0aGlzLgorCitBQlNURk4gPSBhYnNwYXRoKHRlc3Rfc3VwcG9ydC5URVNURk4pCisKK2RlZiBza2lwX2lmX0FCU1RGTl9jb250YWluc19iYWNrc2xhc2godGVzdCk6CisgICAgIiIiCisgICAgT24gV2luZG93cywgcG9zaXhwYXRoLmFic3BhdGggc3RpbGwgcmV0dXJucyBwYXRocyB3aXRoIGJhY2tzbGFzaGVzCisgICAgaW5zdGVhZCBvZiBwb3NpeCBmb3J3YXJkIHNsYXNoZXMuIElmIHRoaXMgaXMgdGhlIGNhc2UsIHNldmVyYWwgdGVzdHMKKyAgICBmYWlsLCBzbyBza2lwIHRoZW0uCisgICAgIiIiCisgICAgZm91bmRfYmFja3NsYXNoID0gJ1xcJyBpbiBBQlNURk4KKyAgICBtc2cgPSAiQUJTVEZOIGlzIG5vdCBhIHBvc2l4IHBhdGggLSB0ZXN0cyBmYWlsIgorICAgIHJldHVybiBbdGVzdCwgdW5pdHRlc3Quc2tpcChtc2cpKHRlc3QpXVtmb3VuZF9iYWNrc2xhc2hdCisKK2RlZiBzYWZlX3JtZGlyKGRpcm5hbWUpOgorICAgIHRyeToKKyAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcGFzcworCitjbGFzcyBQb3NpeFBhdGhUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50ZWFyRG93bigpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBzdWZmaXggaW4gWyIiLCAiMSIsICIyIl06CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4gKyBzdWZmaXgpCisgICAgICAgICAgICBzYWZlX3JtZGlyKHRlc3Rfc3VwcG9ydC5URVNURk4gKyBzdWZmaXgpCisKKyAgICBkZWYgdGVzdF9qb2luKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5qb2luKCIvZm9vIiwgImJhciIsICIvYmFyIiwgImJheiIpLCAiL2Jhci9iYXoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5qb2luKCIvZm9vIiwgImJhciIsICJiYXoiKSwgIi9mb28vYmFyL2JheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmpvaW4oIi9mb28vIiwgImJhci8iLCAiYmF6LyIpLCAiL2Zvby9iYXIvYmF6LyIpCisKKyAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXQoIi9mb28vYmFyIiksICgiL2ZvbyIsICJiYXIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXQoIi8iKSwgKCIvIiwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdCgiZm9vIiksICgiIiwgImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdCgiLy8vL2ZvbyIpLCAoIi8vLy8iLCAiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnNwbGl0KCIvL2Zvby8vYmFyIiksICgiLy9mb28iLCAiYmFyIikpCisKKyAgICBkZWYgc3BsaXRleHRUZXN0KHNlbGYsIHBhdGgsIGZpbGVuYW1lLCBleHQpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdGV4dChwYXRoKSwgKGZpbGVuYW1lLCBleHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdGV4dCgiLyIgKyBwYXRoKSwgKCIvIiArIGZpbGVuYW1lLCBleHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdGV4dCgiYWJjLyIgKyBwYXRoKSwgKCJhYmMvIiArIGZpbGVuYW1lLCBleHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdGV4dCgiYWJjLmRlZi8iICsgcGF0aCksICgiYWJjLmRlZi8iICsgZmlsZW5hbWUsIGV4dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnNwbGl0ZXh0KCIvYWJjLmRlZi8iICsgcGF0aCksICgiL2FiYy5kZWYvIiArIGZpbGVuYW1lLCBleHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdGV4dChwYXRoICsgIi8iKSwgKGZpbGVuYW1lICsgZXh0ICsgIi8iLCAiIikpCisKKyAgICBkZWYgdGVzdF9zcGxpdGV4dChzZWxmKToKKyAgICAgICAgc2VsZi5zcGxpdGV4dFRlc3QoImZvby5iYXIiLCAiZm9vIiwgIi5iYXIiKQorICAgICAgICBzZWxmLnNwbGl0ZXh0VGVzdCgiZm9vLmJvby5iYXIiLCAiZm9vLmJvbyIsICIuYmFyIikKKyAgICAgICAgc2VsZi5zcGxpdGV4dFRlc3QoImZvby5ib28uYmlmZi5iYXIiLCAiZm9vLmJvby5iaWZmIiwgIi5iYXIiKQorICAgICAgICBzZWxmLnNwbGl0ZXh0VGVzdCgiLmNzaC5yYyIsICIuY3NoIiwgIi5yYyIpCisgICAgICAgIHNlbGYuc3BsaXRleHRUZXN0KCJub2RvdHMiLCAibm9kb3RzIiwgIiIpCisgICAgICAgIHNlbGYuc3BsaXRleHRUZXN0KCIuY3NocmMiLCAiLmNzaHJjIiwgIiIpCisgICAgICAgIHNlbGYuc3BsaXRleHRUZXN0KCIuLi5tYW55ZG90cyIsICIuLi5tYW55ZG90cyIsICIiKQorICAgICAgICBzZWxmLnNwbGl0ZXh0VGVzdCgiLi4ubWFueWRvdHMuZXh0IiwgIi4uLm1hbnlkb3RzIiwgIi5leHQiKQorICAgICAgICBzZWxmLnNwbGl0ZXh0VGVzdCgiLiIsICIuIiwgIiIpCisgICAgICAgIHNlbGYuc3BsaXRleHRUZXN0KCIuLiIsICIuLiIsICIiKQorICAgICAgICBzZWxmLnNwbGl0ZXh0VGVzdCgiLi4uLi4uLi4iLCAiLi4uLi4uLi4iLCAiIikKKyAgICAgICAgc2VsZi5zcGxpdGV4dFRlc3QoIiIsICIiLCAiIikKKworICAgIGRlZiB0ZXN0X2lzYWJzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2FicygiIiksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2FicygiLyIpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2FicygiL2ZvbyIpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2FicygiL2Zvby9iYXIiKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNhYnMoImZvby9iYXIiKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9iYXNlbmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguYmFzZW5hbWUoIi9mb28vYmFyIiksICJiYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5iYXNlbmFtZSgiLyIpLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguYmFzZW5hbWUoImZvbyIpLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguYmFzZW5hbWUoIi8vLy9mb28iKSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmJhc2VuYW1lKCIvL2Zvby8vYmFyIiksICJiYXIiKQorCisgICAgZGVmIHRlc3RfZGlybmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZGlybmFtZSgiL2Zvby9iYXIiKSwgIi9mb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5kaXJuYW1lKCIvIiksICIvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZGlybmFtZSgiZm9vIiksICIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5kaXJuYW1lKCIvLy8vZm9vIiksICIvLy8vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZGlybmFtZSgiLy9mb28vL2JhciIpLCAiLy9mb28iKQorCisgICAgZGVmIHRlc3RfaXNsaW5rKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2xpbmsodGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIiksIEZhbHNlKQorICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLCAid2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKCJmb28iKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2xpbmsodGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIiksIEZhbHNlKQorICAgICAgICAgICAgaWYgaGFzYXR0cihvcywgInN5bWxpbmsiKToKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIsIHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMiIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNsaW5rKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMiIpLCBUcnVlKQorICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzbGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5leGlzdHModGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIiksIEZhbHNlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmxleGlzdHModGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIiksIFRydWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3QgZi5jbG9zZSgpOgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc2FtZWZpbGUoc2VsZik6CisgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIsICJ3YiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYud3JpdGUoImZvbyIpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoCisgICAgICAgICAgICAgICAgcG9zaXhwYXRoLnNhbWVmaWxlKAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICBUcnVlCisgICAgICAgICAgICApCisKKyAgICAgICAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBsaW5rcywgYXNzdW1lIHRoYXQgb3Muc3RhdCBkb2Vzbid0IHJldHVybgorICAgICAgICAgICAgIyByZWFzb25hYmxlIGlub2RlIGluZm9ybWF0aW9uIGFuZCB0aHVzLCB0aGF0IHNhbWVmaWxlKCkgZG9lc24ndAorICAgICAgICAgICAgIyB3b3JrLgorICAgICAgICAgICAgaWYgaGFzYXR0cihvcywgInN5bWxpbmsiKToKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoCisgICAgICAgICAgICAgICAgICAgIHBvc2l4cGF0aC5zYW1lZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiCisgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIFRydWUKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMiIpCisgICAgICAgICAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIiwgIndiIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJiYXIiKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoCisgICAgICAgICAgICAgICAgICAgIHBvc2l4cGF0aC5zYW1lZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiCisgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIEZhbHNlCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3NhbWVzdGF0KHNlbGYpOgorICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLCAid2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKCJmb28iKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKAorICAgICAgICAgICAgICAgIHBvc2l4cGF0aC5zYW1lc3RhdCgKKyAgICAgICAgICAgICAgICAgICAgb3Muc3RhdCh0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiKSwKKyAgICAgICAgICAgICAgICAgICAgb3Muc3RhdCh0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiKQorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgVHJ1ZQorICAgICAgICAgICAgKQorICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBoYXZlIGxpbmtzLCBhc3N1bWUgdGhhdCBvcy5zdGF0KCkgZG9lc24ndCByZXR1cm4KKyAgICAgICAgICAgICMgcmVhc29uYWJsZSBpbm9kZSBpbmZvcm1hdGlvbiBhbmQgdGh1cywgdGhhdCBzYW1lc3RhdCgpIGRvZXNuJ3QKKyAgICAgICAgICAgICMgd29yay4KKyAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICJzeW1saW5rIik6CisgICAgICAgICAgICAgICAgb3Muc3ltbGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjEiLCB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgIjIiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoCisgICAgICAgICAgICAgICAgICAgIHBvc2l4cGF0aC5zYW1lc3RhdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQodGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIiksCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMiIpCisgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIFRydWUKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMiIpCisgICAgICAgICAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiArICIyIiwgIndiIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJiYXIiKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoCisgICAgICAgICAgICAgICAgICAgIHBvc2l4cGF0aC5zYW1lc3RhdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQodGVzdF9zdXBwb3J0LlRFU1RGTiArICIxIiksCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KHRlc3Rfc3VwcG9ydC5URVNURk4gKyAiMiIpCisgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIEZhbHNlCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2lzbW91bnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzbW91bnQoIi8iKSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2V4cGFuZHVzZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHVzZXIoImZvbyIpLCAiZm9vIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHB3ZAorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocG9zaXhwYXRoLmV4cGFuZHVzZXIoIn4vIiksIGJhc2VzdHJpbmcpCisgICAgICAgICAgICAjIGlmIGhvbWUgZGlyZWN0b3J5ID09IHJvb3QgZGlyZWN0b3J5LCB0aGlzIHRlc3QgbWFrZXMgbm8gc2Vuc2UKKyAgICAgICAgICAgIGlmIHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+IikgIT0gJy8nOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+IikgKyAiLyIsCisgICAgICAgICAgICAgICAgICAgIHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+LyIpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+cm9vdC8iKSwgYmFzZXN0cmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwb3NpeHBhdGguZXhwYW5kdXNlcigifmZvby8iKSwgYmFzZXN0cmluZykKKworICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgICAgICBlbnZbJ0hPTUUnXSA9ICcvJworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHVzZXIoIn4iKSwgIi8iKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHVzZXIoIn4vZm9vIiksICIvZm9vIikKKworICAgIGRlZiB0ZXN0X25vcm1wYXRoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5ub3JtcGF0aCgiIiksICIuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgubm9ybXBhdGgoIi8iKSwgIi8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5ub3JtcGF0aCgiLy8iKSwgIi8vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgubm9ybXBhdGgoIi8vLyIpLCAiLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLm5vcm1wYXRoKCIvLy9mb28vLi8vYmFyLy8iKSwgIi9mb28vYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgubm9ybXBhdGgoIi8vL2Zvby8uLy9iYXIvLy4vLy4uLy8uLy9iYXoiKSwgIi9mb28vYmF6IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgubm9ybXBhdGgoIi8vLy4uLy8uL2Zvby8uLy9iYXIiKSwgIi9mb28vYmFyIikKKworICAgIEBza2lwX2lmX0FCU1RGTl9jb250YWluc19iYWNrc2xhc2gKKyAgICBkZWYgdGVzdF9yZWFscGF0aF9jdXJkaXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoJy4nKSwgb3MuZ2V0Y3dkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoJy4vLicpLCBvcy5nZXRjd2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aCgnLycuam9pbihbJy4nXSAqIDEwMCkpLCBvcy5nZXRjd2QoKSkKKworICAgIEBza2lwX2lmX0FCU1RGTl9jb250YWluc19iYWNrc2xhc2gKKyAgICBkZWYgdGVzdF9yZWFscGF0aF9wYXJkaXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoJy4uJyksIGRpcm5hbWUob3MuZ2V0Y3dkKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKCcuLi8uLicpLCBkaXJuYW1lKGRpcm5hbWUob3MuZ2V0Y3dkKCkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aCgnLycuam9pbihbJy4uJ10gKiAxMDApKSwgJy8nKQorCisgICAgaWYgaGFzYXR0cihvcywgInN5bWxpbmsiKToKKyAgICAgICAgZGVmIHRlc3RfcmVhbHBhdGhfYmFzaWMoc2VsZik6CisgICAgICAgICAgICAjIEJhc2ljIG9wZXJhdGlvbi4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKEFCU1RGTisiMSIsIEFCU1RGTikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTiksIEFCU1RGTisiMSIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoQUJTVEZOKQorCisgICAgICAgIGRlZiB0ZXN0X3JlYWxwYXRoX3N5bWxpbmtfbG9vcHMoc2VsZik6CisgICAgICAgICAgICAjIEJ1ZyAjOTMwMDI0LCByZXR1cm4gdGhlIHBhdGggdW5jaGFuZ2VkIGlmIHdlIGdldCBpbnRvIGFuIGluZmluaXRlCisgICAgICAgICAgICAjIHN5bWxpbmsgbG9vcC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvbGRfcGF0aCA9IGFic3BhdGgoJy4nKQorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOLCBBQlNURk4pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChBQlNURk4pLCBBQlNURk4pCisKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKEFCU1RGTisiMSIsIEFCU1RGTisiMiIpCisgICAgICAgICAgICAgICAgb3Muc3ltbGluayhBQlNURk4rIjIiLCBBQlNURk4rIjEiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOKyIxIiksIEFCU1RGTisiMSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChBQlNURk4rIjIiKSwgQUJTVEZOKyIyIikKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOKyIxL3giKSwgQUJTVEZOKyIxL3giKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOKyIxLy4uIiksIGRpcm5hbWUoQUJTVEZOKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTisiMS8uLi94IiksIGRpcm5hbWUoQUJTVEZOKSArICIveCIpCisgICAgICAgICAgICAgICAgb3Muc3ltbGluayhBQlNURk4rIngiLCBBQlNURk4rInkiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOKyIxLy4uLyIgKyBiYXNlbmFtZShBQlNURk4pICsgInkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJTVEZOICsgInkiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOKyIxLy4uLyIgKyBiYXNlbmFtZShBQlNURk4pICsgIjEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJTVEZOICsgIjEiKQorCisgICAgICAgICAgICAgICAgb3Muc3ltbGluayhiYXNlbmFtZShBQlNURk4pICsgImEvYiIsIEFCU1RGTisiYSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChBQlNURk4rImEiKSwgQUJTVEZOKyJhL2IiKQorCisgICAgICAgICAgICAgICAgb3Muc3ltbGluaygiLi4vIiArIGJhc2VuYW1lKGRpcm5hbWUoQUJTVEZOKSkgKyAiLyIgKworICAgICAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUoQUJTVEZOKSArICJjIiwgQUJTVEZOKyJjIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTisiYyIpLCBBQlNURk4rImMiKQorCisgICAgICAgICAgICAgICAgIyBUZXN0IHVzaW5nIHJlbGF0aXZlIHBhdGggYXMgd2VsbC4KKyAgICAgICAgICAgICAgICBvcy5jaGRpcihkaXJuYW1lKEFCU1RGTikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChiYXNlbmFtZShBQlNURk4pKSwgQUJTVEZOKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihvbGRfcGF0aCkKKyAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKEFCU1RGTikKKyAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKEFCU1RGTisiMSIpCisgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhBQlNURk4rIjIiKQorICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoQUJTVEZOKyJ5IikKKyAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKEFCU1RGTisiYyIpCisgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhBQlNURk4rImEiKQorCisgICAgICAgIGRlZiB0ZXN0X3JlYWxwYXRoX3JlcGVhdGVkX2luZGlyZWN0X3N5bWxpbmtzKHNlbGYpOgorICAgICAgICAgICAgIyBJc3N1ZSAjNjk3NS4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihBQlNURk4pCisgICAgICAgICAgICAgICAgb3Muc3ltbGluaygnLi4vJyArIGJhc2VuYW1lKEFCU1RGTiksIEFCU1RGTiArICcvc2VsZicpCisgICAgICAgICAgICAgICAgb3Muc3ltbGluaygnc2VsZi9zZWxmL3NlbGYnLCBBQlNURk4gKyAnL2xpbmsnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOICsgJy9saW5rJyksIEFCU1RGTikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhBQlNURk4gKyAnL3NlbGYnKQorICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoQUJTVEZOICsgJy9saW5rJykKKyAgICAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTikKKworICAgICAgICBkZWYgdGVzdF9yZWFscGF0aF9kZWVwX3JlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgICAgIGRlcHRoID0gMTAKKyAgICAgICAgICAgIG9sZF9wYXRoID0gYWJzcGF0aCgnLicpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOKQorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGRlcHRoKToKKyAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluaygnLycuam9pbihbJyVkJyAlIGldICogMTApLCBBQlNURk4gKyAnLyVkJyAlIChpICsgMSkpCisgICAgICAgICAgICAgICAgb3Muc3ltbGluaygnLicsIEFCU1RGTiArICcvMCcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChBQlNURk4gKyAnLyVkJyAlIGRlcHRoKSwgQUJTVEZOKQorCisgICAgICAgICAgICAgICAgIyBUZXN0IHVzaW5nIHJlbGF0aXZlIHBhdGggYXMgd2VsbC4KKyAgICAgICAgICAgICAgICBvcy5jaGRpcihBQlNURk4pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aCgnJWQnICUgZGVwdGgpLCBBQlNURk4pCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9wYXRoKQorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGRlcHRoICsgMSk6CisgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoQUJTVEZOICsgJy8lZCcgJSBpKQorICAgICAgICAgICAgICAgIHNhZmVfcm1kaXIoQUJTVEZOKQorCisgICAgICAgIGRlZiB0ZXN0X3JlYWxwYXRoX3Jlc29sdmVfcGFyZW50cyhzZWxmKToKKyAgICAgICAgICAgICMgV2UgYWxzbyBuZWVkIHRvIHJlc29sdmUgYW55IHN5bWxpbmtzIGluIHRoZSBwYXJlbnRzIG9mIGEgcmVsYXRpdmUKKyAgICAgICAgICAgICMgcGF0aCBwYXNzZWQgdG8gcmVhbHBhdGguIEUuZy46IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMKKyAgICAgICAgICAgICMgL3Vzci9kb2Mgd2l0aCAnZG9jJyBiZWluZyBhIHN5bWxpbmsgdG8gL3Vzci9zaGFyZS9kb2MuIFdlIGNhbGwKKyAgICAgICAgICAgICMgcmVhbHBhdGgoImEiKS4gVGhpcyBzaG91bGQgcmV0dXJuIC91c3Ivc2hhcmUvZG9jL2EvLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9sZF9wYXRoID0gYWJzcGF0aCgnLicpCisgICAgICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOKQorICAgICAgICAgICAgICAgIG9zLm1rZGlyKEFCU1RGTiArICIveSIpCisgICAgICAgICAgICAgICAgb3Muc3ltbGluayhBQlNURk4gKyAiL3kiLCBBQlNURk4gKyAiL2siKQorCisgICAgICAgICAgICAgICAgb3MuY2hkaXIoQUJTVEZOICsgIi9rIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKCJhIiksIEFCU1RGTiArICIveS9hIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuY2hkaXIob2xkX3BhdGgpCisgICAgICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhBQlNURk4gKyAiL2siKQorICAgICAgICAgICAgICAgIHNhZmVfcm1kaXIoQUJTVEZOICsgIi95IikKKyAgICAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTikKKworICAgICAgICBkZWYgdGVzdF9yZWFscGF0aF9yZXNvbHZlX2JlZm9yZV9ub3JtYWxpemluZyhzZWxmKToKKyAgICAgICAgICAgICMgQnVnICM5OTA2Njk6IFN5bWJvbGljIGxpbmtzIHNob3VsZCBiZSByZXNvbHZlZCBiZWZvcmUgd2UKKyAgICAgICAgICAgICMgbm9ybWFsaXplIHRoZSBwYXRoLiBFLmcuOiBpZiB3ZSBoYXZlIGRpcmVjdG9yaWVzICdhJywgJ2snIGFuZCAneScKKyAgICAgICAgICAgICMgaW4gdGhlIGZvbGxvd2luZyBoaWVyYXJjaHk6CisgICAgICAgICAgICAjIGEvay95CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIGFuZCBhIHN5bWJvbGljIGxpbmsgJ2xpbmsteScgcG9pbnRpbmcgdG8gJ3knIGluIGRpcmVjdG9yeSAnYScsCisgICAgICAgICAgICAjIHRoZW4gcmVhbHBhdGgoImxpbmsteS8uLiIpIHNob3VsZCByZXR1cm4gJ2snLCBub3QgJ2EnLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9sZF9wYXRoID0gYWJzcGF0aCgnLicpCisgICAgICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOKQorICAgICAgICAgICAgICAgIG9zLm1rZGlyKEFCU1RGTiArICIvayIpCisgICAgICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOICsgIi9rL3kiKQorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOICsgIi9rL3kiLCBBQlNURk4gKyAiL2xpbmsteSIpCisKKyAgICAgICAgICAgICAgICAjIEFic29sdXRlIHBhdGguCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChBQlNURk4gKyAiL2xpbmsteS8uLiIpLCBBQlNURk4gKyAiL2siKQorICAgICAgICAgICAgICAgICMgUmVsYXRpdmUgcGF0aC4KKyAgICAgICAgICAgICAgICBvcy5jaGRpcihkaXJuYW1lKEFCU1RGTikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChiYXNlbmFtZShBQlNURk4pICsgIi9saW5rLXkvLi4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFCU1RGTiArICIvayIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9wYXRoKQorICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoQUJTVEZOICsgIi9saW5rLXkiKQorICAgICAgICAgICAgICAgIHNhZmVfcm1kaXIoQUJTVEZOICsgIi9rL3kiKQorICAgICAgICAgICAgICAgIHNhZmVfcm1kaXIoQUJTVEZOICsgIi9rIikKKyAgICAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTikKKworICAgICAgICBkZWYgdGVzdF9yZWFscGF0aF9yZXNvbHZlX2ZpcnN0KHNlbGYpOgorICAgICAgICAgICAgIyBCdWcgIzEyMTM4OTQ6IFRoZSBmaXJzdCBjb21wb25lbnQgb2YgdGhlIHBhdGgsIGlmIG5vdCBhYnNvbHV0ZSwKKyAgICAgICAgICAgICMgbXVzdCBiZSByZXNvbHZlZCB0b28uCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvbGRfcGF0aCA9IGFic3BhdGgoJy4nKQorICAgICAgICAgICAgICAgIG9zLm1rZGlyKEFCU1RGTikKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihBQlNURk4gKyAiL2siKQorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOLCBBQlNURk4gKyAibGluayIpCisgICAgICAgICAgICAgICAgb3MuY2hkaXIoZGlybmFtZShBQlNURk4pKQorCisgICAgICAgICAgICAgICAgYmFzZSA9IGJhc2VuYW1lKEFCU1RGTikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKGJhc2UgKyAibGluayIpLCBBQlNURk4pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChiYXNlICsgImxpbmsvayIpLCBBQlNURk4gKyAiL2siKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihvbGRfcGF0aCkKKyAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKEFCU1RGTiArICJsaW5rIikKKyAgICAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTiArICIvayIpCisgICAgICAgICAgICAgICAgc2FmZV9ybWRpcihBQlNURk4pCisKKyAgICBkZWYgdGVzdF9yZWxwYXRoKHNlbGYpOgorICAgICAgICAocmVhbF9nZXRjd2QsIG9zLmdldGN3ZCkgPSAob3MuZ2V0Y3dkLCBsYW1iZGE6IHIiL2hvbWUvdXNlci9iYXIiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXJkaXIgPSBvcy5wYXRoLnNwbGl0KG9zLmdldGN3ZCgpKVstMV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvc2l4cGF0aC5yZWxwYXRoLCAiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoImEiKSwgImEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aChwb3NpeHBhdGguYWJzcGF0aCgiYSIpKSwgImEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiYS9iIiksICJhL2IiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiLi4vYS9iIiksICIuLi9hL2IiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiYSIsICIuLi9iIiksICIuLi8iK2N1cmRpcisiL2EiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiYS9iIiwgIi4uL2MiKSwgIi4uLyIrY3VyZGlyKyIvYS9iIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoImEiLCAiYi9jIiksICIuLi8uLi9hIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoImEiLCAiYSIpLCAiLiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCIvZm9vL2Jhci9iYXQiLCAiL3gveS96IiksICcuLi8uLi8uLi9mb28vYmFyL2JhdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCIvZm9vL2Jhci9iYXQiLCAiL2Zvby9iYXIiKSwgJ2JhdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCIvZm9vL2Jhci9iYXQiLCAiLyIpLCAnZm9vL2Jhci9iYXQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiLyIsICIvZm9vL2Jhci9iYXQiKSwgJy4uLy4uLy4uJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoIi9mb28vYmFyL2JhdCIsICIveCIpLCAnLi4vZm9vL2Jhci9iYXQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgucmVscGF0aCgiL3giLCAiL2Zvby9iYXIvYmF0IiksICcuLi8uLi8uLi94JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnJlbHBhdGgoIi8iLCAiLyIpLCAnLicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCIvYSIsICIvYSIpLCAnLicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5yZWxwYXRoKCIvYS9iIiwgIi9hL2IiKSwgJy4nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuZ2V0Y3dkID0gcmVhbF9nZXRjd2QKKworCitjbGFzcyBQb3NpeENvbW1vblRlc3QodGVzdF9nZW5lcmljcGF0aC5Db21tb25UZXN0KToKKyAgICBwYXRobW9kdWxlID0gcG9zaXhwYXRoCisgICAgYXR0cmlidXRlcyA9IFsncmVscGF0aCcsICdzYW1lZmlsZScsICdzYW1lb3BlbmZpbGUnLCAnc2FtZXN0YXQnXQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFBvc2l4UGF0aFRlc3QsIFBvc2l4Q29tbW9uVGVzdCkKKworCitpZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcG93LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcG93LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZTY3YmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wb3cucHkKQEAgLTAsMCArMSwxMjkgQEAKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydCwgdW5pdHRlc3QKKworY2xhc3MgUG93VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgcG93dGVzdChzZWxmLCB0eXBlKToKKyAgICAgICAgaWYgdHlwZSAhPSBmbG9hdDoKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKC0xMDAwLCAxMDAwKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdyh0eXBlKGkpLCAwKSwgMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdyh0eXBlKGkpLCAxKSwgdHlwZShpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdyh0eXBlKDApLCAxKSwgdHlwZSgwKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdyh0eXBlKDEpLCAxKSwgdHlwZSgxKSkKKworICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoLTEwMCwgMTAwKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdyh0eXBlKGkpLCAzKSwgaSppKmkpCisKKyAgICAgICAgICAgIHBvdzIgPSAxCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLDMxKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyLCBpKSwgcG93MikKKyAgICAgICAgICAgICAgICBpZiBpICE9IDMwIDogcG93MiA9IHBvdzIqMgorCisgICAgICAgICAgICBmb3Igb3RoZXJ0eXBlIGluIGludCwgbG9uZzoKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgtMTAsIDApICsgcmFuZ2UoMSwgMTApOgorICAgICAgICAgICAgICAgICAgICBpaSA9IHR5cGUoaSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoMSwgMTEpOgorICAgICAgICAgICAgICAgICAgICAgICAgamogPSAtb3RoZXJ0eXBlKGopCisgICAgICAgICAgICAgICAgICAgICAgICBwb3coaWksIGpqKQorCisgICAgICAgIGZvciBvdGhlcnR5cGUgaW4gaW50LCBsb25nLCBmbG9hdDoKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDEwMCk6CisgICAgICAgICAgICAgICAgemVybyA9IHR5cGUoMCkKKyAgICAgICAgICAgICAgICBleHAgPSAtb3RoZXJ0eXBlKGkvMTAuMCkKKyAgICAgICAgICAgICAgICBpZiBleHAgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcG93LCB6ZXJvLCBleHApCisKKyAgICAgICAgaWwsIGloID0gLTIwLCAyMAorICAgICAgICBqbCwgamggPSAtNSwgICA1CisgICAgICAgIGtsLCBraCA9IC0xMCwgMTAKKyAgICAgICAgYXNzZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGlmIHR5cGUgPT0gZmxvYXQ6CisgICAgICAgICAgICBpbCA9IDEKKyAgICAgICAgICAgIGFzc2VxID0gc2VsZi5hc3NlcnRBbG1vc3RFcXVhbAorICAgICAgICBlbGlmIHR5cGUgPT0gaW50OgorICAgICAgICAgICAgamwgPSAwCisgICAgICAgIGVsaWYgdHlwZSA9PSBsb25nOgorICAgICAgICAgICAgamwsIGpoID0gMCwgMTUKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoaWwsIGloKzEpOgorICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoamwsIGpoKzEpOgorICAgICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKGtsLCBraCsxKToKKyAgICAgICAgICAgICAgICAgICAgaWYgayAhPSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdHlwZSA9PSBmbG9hdCBvciBqIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvdywgdHlwZShpKSwgaiwgaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXEoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KHR5cGUoaSksaixrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3codHlwZShpKSxqKSUgdHlwZShrKQorICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfcG93aW50KHNlbGYpOgorICAgICAgICBzZWxmLnBvd3Rlc3QoaW50KQorCisgICAgZGVmIHRlc3RfcG93bG9uZyhzZWxmKToKKyAgICAgICAgc2VsZi5wb3d0ZXN0KGxvbmcpCisKKyAgICBkZWYgdGVzdF9wb3dmbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5wb3d0ZXN0KGZsb2F0KQorCisgICAgZGVmIHRlc3Rfb3RoZXIoc2VsZik6CisgICAgICAgICMgT3RoZXIgdGVzdHMtLSBub3QgdmVyeSBzeXN0ZW1hdGljCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDMsMykgJSA4LCBwb3coMywzLDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygzLDMpICUgLTgsIHBvdygzLDMsLTgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygzLDIpICUgLTIsIHBvdygzLDIsLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygtMywzKSAlIDgsIHBvdygtMywzLDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygtMywzKSAlIC04LCBwb3coLTMsMywtOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDUsMikgJSAtOCwgcG93KDUsMiwtOCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coM0wsM0wpICUgOCwgcG93KDNMLDNMLDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygzTCwzTCkgJSAtOCwgcG93KDNMLDNMLC04KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coM0wsMikgJSAtMiwgcG93KDNMLDIsLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygtM0wsM0wpICUgOCwgcG93KC0zTCwzTCw4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTNMLDNMKSAlIC04LCBwb3coLTNMLDNMLC04KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coNUwsMikgJSAtOCwgcG93KDVMLDIsLTgpKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKC0xMCwgMTEpOgorICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoMCwgNik6CisgICAgICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2UoLTcsIDExKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaiA+PSAwIGFuZCBrICE9IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvdyhpLGopICUgaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3coaSxqLGspCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgIGlmIGogPj0gMCBhbmQgayAhPSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3cobG9uZyhpKSxqKSAlIGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KGxvbmcoaSksaixrKQorICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYnVnNjQzMjYwKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0UnBvdzoKKyAgICAgICAgICAgIGRlZiBfX3Jwb3dfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgTm9uZSAqKiBUZXN0UnBvdygpICMgV29uJ3QgZmFpbCB3aGVuIF9fcnBvd19fIGludm9rZWQuICBTRiBidWcgIzY0MzI2MC4KKworICAgIGRlZiB0ZXN0X2J1ZzcwNTIzMShzZWxmKToKKyAgICAgICAgIyAtMS4wIHJhaXNlZCB0byBhbiBpbnRlZ2VyIHNob3VsZCBuZXZlciBibG93IHVwLiAgSXQgZGlkIGlmIHRoZQorICAgICAgICAjIHBsYXRmb3JtIHBvdygpIHdhcyBidWdneSwgYW5kIFB5dGhvbiBkaWRuJ3Qgd29ybSBhcm91bmQgaXQuCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBhID0gLTEuMAorICAgICAgICAjIFRoZSBuZXh0IHR3byB0ZXN0cyBjYW4gc3RpbGwgZmFpbCBpZiB0aGUgcGxhdGZvcm0gZmxvb3IoKQorICAgICAgICAjIGZ1bmN0aW9uIGRvZXNuJ3QgdHJlYXQgYWxsIGxhcmdlIGlucHV0cyBhcyBpbnRlZ2VycworICAgICAgICAjIHRlc3RfbWF0aCBzaG91bGQgYWxzbyBmYWlsIGlmIHRoYXQgaXMgaGFwcGVuaW5nCisgICAgICAgIGVxKHBvdyhhLCAxLjIzZTE2NyksIDEuMCkKKyAgICAgICAgZXEocG93KGEsIC0xLjIzZTE2NyksIDEuMCkKKyAgICAgICAgZm9yIGIgaW4gcmFuZ2UoLTEwLCAxMSk6CisgICAgICAgICAgICBlcShwb3coYSwgZmxvYXQoYikpLCBiICYgMSBhbmQgLTEuMCBvciAxLjApCisgICAgICAgIGZvciBuIGluIHJhbmdlKDAsIDEwMCk6CisgICAgICAgICAgICBmaXZldG8gPSBmbG9hdCg1ICoqIG4pCisgICAgICAgICAgICAjIEZvciBzbWFsbCBuLCBmaXZldG8gd2lsbCBiZSBvZGQuICBFdmVudHVhbGx5IHdlIHJ1biBvdXQgb2YKKyAgICAgICAgICAgICMgbWFudGlzc2EgYml0cywgdGhvdWdoLCBhbmQgdGhlcmVhZmVyIGZpdmV0byB3aWxsIGJlIGV2ZW4uCisgICAgICAgICAgICBleHBlY3RlZCA9IGZpdmV0byAlIDIuMCBhbmQgLTEuMCBvciAxLjAKKyAgICAgICAgICAgIGVxKHBvdyhhLCBmaXZldG8pLCBleHBlY3RlZCkKKyAgICAgICAgICAgIGVxKHBvdyhhLCAtZml2ZXRvKSwgZXhwZWN0ZWQpCisgICAgICAgIGVxKGV4cGVjdGVkLCAxLjApICAgIyBlbHNlIHdlIGRpZG4ndCBwdXNoIGZpdmV0byB0byBldmVubmVzcworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFBvd1Rlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BwcmludC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BwcmludC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDEzN2RmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHByaW50LnB5CkBAIC0wLDAgKzEsNDMyIEBACitpbXBvcnQgcHByaW50CitpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3QudGVzdF9zZXQKKwordHJ5OgorICAgIHVuaSA9IHVuaWNvZGUKK2V4Y2VwdCBOYW1lRXJyb3I6CisgICAgZGVmIHVuaSh4KToKKyAgICAgICAgcmV0dXJuIHgKKworIyBsaXN0LCB0dXBsZSBhbmQgZGljdCBzdWJjbGFzc2VzIHRoYXQgZG8gb3IgZG9uJ3Qgb3ZlcndyaXRlIF9fcmVwcl9fCitjbGFzcyBsaXN0MihsaXN0KToKKyAgICBwYXNzCisKK2NsYXNzIGxpc3QzKGxpc3QpOgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3QuX19yZXByX18oc2VsZikKKworY2xhc3MgdHVwbGUyKHR1cGxlKToKKyAgICBwYXNzCisKK2NsYXNzIHR1cGxlMyh0dXBsZSk6CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gdHVwbGUuX19yZXByX18oc2VsZikKKworY2xhc3MgZGljdDIoZGljdCk6CisgICAgcGFzcworCitjbGFzcyBkaWN0MyhkaWN0KToKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiBkaWN0Ll9fcmVwcl9fKHNlbGYpCisKK2NsYXNzIFF1ZXJ5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmEgPSByYW5nZSgxMDApCisgICAgICAgIHNlbGYuYiA9IHJhbmdlKDIwMCkKKyAgICAgICAgc2VsZi5hWy0xMl0gPSBzZWxmLmIKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSAuaXNyZWN1cnNpdmUoKSBhbmQgLmlzcmVhZGFibGUoKSB3L28gcmVjdXJzaW9uCisgICAgICAgIHBwID0gcHByaW50LlByZXR0eVByaW50ZXIoKQorICAgICAgICBmb3Igc2FmZSBpbiAoMiwgMi4wLCAyaiwgImFiYyIsIFszXSwgKDIsMiksIHszOiAzfSwgdW5pKCJ5YWRkYXlhZGRhIiksCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmEsIHNlbGYuYik6CisgICAgICAgICAgICAjIG1vZHVsZS1sZXZlbCBjb252ZW5pZW5jZSBmdW5jdGlvbnMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHByaW50LmlzcmVjdXJzaXZlKHNhZmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgbm90IGlzcmVjdXJzaXZlIGZvciAlciIgJSAoc2FmZSwpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBwcmludC5pc3JlYWRhYmxlKHNhZmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBpc3JlYWRhYmxlIGZvciAlciIgJSAoc2FmZSwpKQorICAgICAgICAgICAgIyBQcmV0dHlQcmludGVyIG1ldGhvZHMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHAuaXNyZWN1cnNpdmUoc2FmZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBub3QgaXNyZWN1cnNpdmUgZm9yICVyIiAlIChzYWZlLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocHAuaXNyZWFkYWJsZShzYWZlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgaXNyZWFkYWJsZSBmb3IgJXIiICUgKHNhZmUsKSkKKworICAgIGRlZiB0ZXN0X2tub3R0ZWQoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IC5pc3JlY3Vyc2l2ZSgpIGFuZCAuaXNyZWFkYWJsZSgpIHcvIHJlY3Vyc2lvbgorICAgICAgICAjIFRpZSBhIGtub3QuCisgICAgICAgIHNlbGYuYls2N10gPSBzZWxmLmEKKyAgICAgICAgIyBNZXNzeSBkaWN0LgorICAgICAgICBzZWxmLmQgPSB7fQorICAgICAgICBzZWxmLmRbMF0gPSBzZWxmLmRbMV0gPSBzZWxmLmRbMl0gPSBzZWxmLmQKKworICAgICAgICBwcCA9IHBwcmludC5QcmV0dHlQcmludGVyKCkKKworICAgICAgICBmb3IgaWNreSBpbiBzZWxmLmEsIHNlbGYuYiwgc2VsZi5kLCAoc2VsZi5kLCBzZWxmLmQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBwcmludC5pc3JlY3Vyc2l2ZShpY2t5KSwgImV4cGVjdGVkIGlzcmVjdXJzaXZlIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHByaW50LmlzcmVhZGFibGUoaWNreSksICJleHBlY3RlZCBub3QgaXNyZWFkYWJsZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocHAuaXNyZWN1cnNpdmUoaWNreSksICJleHBlY3RlZCBpc3JlY3Vyc2l2ZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBwLmlzcmVhZGFibGUoaWNreSksICJleHBlY3RlZCBub3QgaXNyZWFkYWJsZSIpCisKKyAgICAgICAgIyBCcmVhayB0aGUgY3ljbGVzLgorICAgICAgICBzZWxmLmQuY2xlYXIoKQorICAgICAgICBkZWwgc2VsZi5hWzpdCisgICAgICAgIGRlbCBzZWxmLmJbOl0KKworICAgICAgICBmb3Igc2FmZSBpbiBzZWxmLmEsIHNlbGYuYiwgc2VsZi5kLCAoc2VsZi5kLCBzZWxmLmQpOgorICAgICAgICAgICAgIyBtb2R1bGUtbGV2ZWwgY29udmVuaWVuY2UgZnVuY3Rpb25zCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBwcmludC5pc3JlY3Vyc2l2ZShzYWZlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIG5vdCBpc3JlY3Vyc2l2ZSBmb3IgJXIiICUgKHNhZmUsKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcHJpbnQuaXNyZWFkYWJsZShzYWZlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgaXNyZWFkYWJsZSBmb3IgJXIiICUgKHNhZmUsKSkKKyAgICAgICAgICAgICMgUHJldHR5UHJpbnRlciBtZXRob2RzCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBwLmlzcmVjdXJzaXZlKHNhZmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgbm90IGlzcmVjdXJzaXZlIGZvciAlciIgJSAoc2FmZSwpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBwLmlzcmVhZGFibGUoc2FmZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGlzcmVhZGFibGUgZm9yICVyIiAlIChzYWZlLCkpCisKKyAgICBkZWYgdGVzdF91bnJlYWRhYmxlKHNlbGYpOgorICAgICAgICAjIE5vdCByZWN1cnNpdmUgYnV0IG5vdCByZWFkYWJsZSBhbnl3YXkKKyAgICAgICAgcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcigpCisgICAgICAgIGZvciB1bnJlYWRhYmxlIGluIHR5cGUoMyksIHBwcmludCwgcHByaW50LmlzcmVjdXJzaXZlOgorICAgICAgICAgICAgIyBtb2R1bGUtbGV2ZWwgY29udmVuaWVuY2UgZnVuY3Rpb25zCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBwcmludC5pc3JlY3Vyc2l2ZSh1bnJlYWRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIG5vdCBpc3JlY3Vyc2l2ZSBmb3IgJXIiICUgKHVucmVhZGFibGUsKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHByaW50LmlzcmVhZGFibGUodW5yZWFkYWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBub3QgaXNyZWFkYWJsZSBmb3IgJXIiICUgKHVucmVhZGFibGUsKSkKKyAgICAgICAgICAgICMgUHJldHR5UHJpbnRlciBtZXRob2RzCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBwLmlzcmVjdXJzaXZlKHVucmVhZGFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgbm90IGlzcmVjdXJzaXZlIGZvciAlciIgJSAodW5yZWFkYWJsZSwpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwcC5pc3JlYWRhYmxlKHVucmVhZGFibGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgbm90IGlzcmVhZGFibGUgZm9yICVyIiAlICh1bnJlYWRhYmxlLCkpCisKKyAgICBkZWYgdGVzdF9zYW1lX2FzX3JlcHIoc2VsZik6CisgICAgICAgICMgU2ltcGxlIG9iamVjdHMsIHNtYWxsIGNvbnRhaW5lcnMgYW5kIGNsYXNzZXMgdGhhdCBvdmVyd3JpdGUgX19yZXByX18KKyAgICAgICAgIyBGb3IgdGhvc2UgdGhlIHJlc3VsdCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgcmVwcigpLgorICAgICAgICAjIEFoZW0uICBUaGUgZG9jcyBkb24ndCBzYXkgYW55dGhpbmcgYWJvdXQgdGhhdCAtLSB0aGlzIGFwcGVhcnMgdG8KKyAgICAgICAgIyBiZSB0ZXN0aW5nIGFuIGltcGxlbWVudGF0aW9uIHF1aXJrLiAgU3RhcnRpbmcgaW4gUHl0aG9uIDIuNSwgaXQncworICAgICAgICAjIG5vdCB0cnVlIGZvciBkaWN0czogIHBwcmludCBhbHdheXMgc29ydHMgZGljdHMgYnkga2V5IG5vdzsgYmVmb3JlLAorICAgICAgICAjIGl0IHNvcnRlZCBhIGRpY3QgZGlzcGxheSBpZiBhbmQgb25seSBpZiB0aGUgZGlzcGxheSByZXF1aXJlZAorICAgICAgICAjIG11bHRpcGxlIGxpbmVzLiAgRm9yIHRoYXQgcmVhc29uLCBkaWN0cyB3aXRoIG1vcmUgdGhhbiBvbmUgZWxlbWVudAorICAgICAgICAjIGFyZW4ndCB0ZXN0ZWQgaGVyZS4KKyAgICAgICAgZm9yIHNpbXBsZSBpbiAoMCwgMEwsIDArMGosIDAuMCwgIiIsIHVuaSgiIiksCisgICAgICAgICAgICAgICAgICAgICAgICgpLCB0dXBsZTIoKSwgdHVwbGUzKCksCisgICAgICAgICAgICAgICAgICAgICAgIFtdLCBsaXN0MigpLCBsaXN0MygpLAorICAgICAgICAgICAgICAgICAgICAgICB7fSwgZGljdDIoKSwgZGljdDMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlLCBwcHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgIC02LCAtNkwsIC02LTZqLCAtMS41LCAieCIsIHVuaSgieCIpLCAoMywpLCBbM10sIHszOiA2fSwKKyAgICAgICAgICAgICAgICAgICAgICAgKDEsMiksIFszLDRdLCB7NTogNn0sCisgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlMigoMSwyKSksIHR1cGxlMygoMSwyKSksIHR1cGxlMyhyYW5nZSgxMDApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgWzMsNF0sIGxpc3QyKFszLDRdKSwgbGlzdDMoWzMsNF0pLCBsaXN0MyhyYW5nZSgxMDApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZGljdDIoezU6IDZ9KSwgZGljdDMoezU6IDZ9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UoMTAsIC0xMSwgLTEpCisgICAgICAgICAgICAgICAgICAgICAgKToKKyAgICAgICAgICAgIG5hdGl2ZSA9IHJlcHIoc2ltcGxlKQorICAgICAgICAgICAgZm9yIGZ1bmN0aW9uIGluICJwZm9ybWF0IiwgInNhZmVyZXByIjoKKyAgICAgICAgICAgICAgICBmID0gZ2V0YXR0cihwcHJpbnQsIGZ1bmN0aW9uKQorICAgICAgICAgICAgICAgIGdvdCA9IGYoc2ltcGxlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmF0aXZlLCBnb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJXMgZ290ICVzIGZyb20gcHByaW50LiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmF0aXZlLCBnb3QsIGZ1bmN0aW9uKSkKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2xpbmVfd3JhcChzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgYmFzaWMgbGluZS13cmFwcGluZyBvcGVyYXRpb24KKyAgICAgICAgbyA9IHsnUlBNX2NhbCc6IDAsCisgICAgICAgICAgICAgJ1JQTV9jYWwyJzogNDgwNTksCisgICAgICAgICAgICAgJ1NwZWVkX2NhbCc6IDAsCisgICAgICAgICAgICAgJ2NvbnRyb2xkZXNrX3J1bnRpbWVfdXMnOiAwLAorICAgICAgICAgICAgICdtYWluX2NvZGVfcnVudGltZV91cyc6IDAsCisgICAgICAgICAgICAgJ3JlYWRfaW9fcnVudGltZV91cyc6IDAsCisgICAgICAgICAgICAgJ3dyaXRlX2lvX3J1bnRpbWVfdXMnOiA0MzY5MH0KKyAgICAgICAgZXhwID0gIiIiXAoreydSUE1fY2FsJzogMCwKKyAnUlBNX2NhbDInOiA0ODA1OSwKKyAnU3BlZWRfY2FsJzogMCwKKyAnY29udHJvbGRlc2tfcnVudGltZV91cyc6IDAsCisgJ21haW5fY29kZV9ydW50aW1lX3VzJzogMCwKKyAncmVhZF9pb19ydW50aW1lX3VzJzogMCwKKyAnd3JpdGVfaW9fcnVudGltZV91cyc6IDQzNjkwfSIiIgorICAgICAgICBmb3IgdHlwZSBpbiBbZGljdCwgZGljdDJdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCh0eXBlKG8pKSwgZXhwKQorCisgICAgICAgIG8gPSByYW5nZSgxMDApCisgICAgICAgIGV4cCA9ICdbJXNdJyAlICcsXG4gJy5qb2luKG1hcChzdHIsIG8pKQorICAgICAgICBmb3IgdHlwZSBpbiBbbGlzdCwgbGlzdDJdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCh0eXBlKG8pKSwgZXhwKQorCisgICAgICAgIG8gPSB0dXBsZShyYW5nZSgxMDApKQorICAgICAgICBleHAgPSAnKCVzKScgJSAnLFxuICcuam9pbihtYXAoc3RyLCBvKSkKKyAgICAgICAgZm9yIHR5cGUgaW4gW3R1cGxlLCB0dXBsZTJdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCh0eXBlKG8pKSwgZXhwKQorCisgICAgICAgICMgaW5kZW50IHBhcmFtZXRlcgorICAgICAgICBvID0gcmFuZ2UoMTAwKQorICAgICAgICBleHAgPSAnWyAgICVzXScgJSAnLFxuICAgICcuam9pbihtYXAoc3RyLCBvKSkKKyAgICAgICAgZm9yIHR5cGUgaW4gW2xpc3QsIGxpc3QyXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQodHlwZShvKSwgaW5kZW50PTQpLCBleHApCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfaW5kZW50YXRpb25zKHNlbGYpOgorICAgICAgICBvMSA9IGxpc3QocmFuZ2UoMTApKQorICAgICAgICBvMiA9IGRpY3QoZmlyc3Q9MSwgc2Vjb25kPTIsIHRoaXJkPTMpCisgICAgICAgIG8gPSBbbzEsIG8yXQorICAgICAgICBleHBlY3RlZCA9ICIiIlwKK1sgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0sCisgICAgeyAgICdmaXJzdCc6IDEsCisgICAgICAgICdzZWNvbmQnOiAyLAorICAgICAgICAndGhpcmQnOiAzfV0iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChvLCBpbmRlbnQ9NCwgd2lkdGg9NDIpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3NvcnRlZF9kaWN0KHNlbGYpOgorICAgICAgICAjIFN0YXJ0aW5nIGluIFB5dGhvbiAyLjUsIHBwcmludCBzb3J0cyBkaWN0IGRpc3BsYXlzIGJ5IGtleSByZWdhcmRsZXNzCisgICAgICAgICMgb2YgaG93IHNtYWxsIHRoZSBkaWN0aW9uYXJ5IG1heSBiZS4KKyAgICAgICAgIyBCZWZvcmUgdGhlIGNoYW5nZSwgb24gMzItYml0IFdpbmRvd3MgcGZvcm1hdCgpIGdhdmUgb3JkZXIKKyAgICAgICAgIyAnYScsICdjJywgJ2InIGhlcmUsIHNvIHRoaXMgdGVzdCBmYWlsZWQuCisgICAgICAgIGQgPSB7J2EnOiAxLCAnYic6IDEsICdjJzogMX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChkKSwgInsnYSc6IDEsICdiJzogMSwgJ2MnOiAxfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoW2QsIGRdKSwKKyAgICAgICAgICAgICJbeydhJzogMSwgJ2InOiAxLCAnYyc6IDF9LCB7J2EnOiAxLCAnYic6IDEsICdjJzogMX1dIikKKworICAgICAgICAjIFRoZSBuZXh0IG9uZSBpcyBraW5kIG9mIGdvb2Z5LiAgVGhlIHNvcnRlZCBvcmRlciBkZXBlbmRzIG9uIHRoZQorICAgICAgICAjIGFscGhhYmV0aWMgb3JkZXIgb2YgdHlwZSBuYW1lczogICJpbnQiIDwgInN0ciIgPCAidHVwbGUiLiAgQmVmb3JlCisgICAgICAgICMgUHl0aG9uIDIuNSwgdGhpcyB3YXMgaW4gdGhlIHRlc3Rfc2FtZV9hc19yZXByKCkgdGVzdC4gIEl0J3Mgd29ydGgKKyAgICAgICAgIyBrZWVwaW5nIGFyb3VuZCBmb3Igbm93IGJlY2F1c2UgaXQncyBvbmUgb2YgZmV3IHRlc3RzIG9mIHBwcmludAorICAgICAgICAjIGFnYWluc3QgYSBjcmF6eSBtaXggb2YgdHlwZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoeyJ4eVx0YWJcbiI6ICgzLCksIDU6IFtbXV0sICgpOiB7fX0pLAorICAgICAgICAgICAgciJ7NTogW1tdXSwgJ3h5XHRhYlxuJzogKDMsKSwgKCk6IHt9fSIpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2luZyhzZWxmKToKKyAgICAgICAgbyA9IHsnbmFtZXMgd2l0aCBzcGFjZXMnOiAnc2hvdWxkIGJlIHByZXNlbnRlZCB1c2luZyByZXByKCknLAorICAgICAgICAgICAgICdvdGhlcnMuc2hvdWxkLm5vdC5iZSc6ICdsaWtlLnRoaXMnfQorICAgICAgICBleHAgPSAiIiJcCit7J25hbWVzIHdpdGggc3BhY2VzJzogJ3Nob3VsZCBiZSBwcmVzZW50ZWQgdXNpbmcgcmVwcigpJywKKyBvdGhlcnMuc2hvdWxkLm5vdC5iZTogbGlrZS50aGlzfSIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERvdHRlZFByZXR0eVByaW50ZXIoKS5wZm9ybWF0KG8pLCBleHApCisKKyAgICBkZWYgdGVzdF9zZXRfcmVwcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoc2V0KCkpLCAnc2V0KCknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHNldChyYW5nZSgzKSkpLCAnc2V0KFswLCAxLCAyXSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGZyb3plbnNldCgpKSwgJ2Zyb3plbnNldCgpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChmcm96ZW5zZXQocmFuZ2UoMykpKSwgJ2Zyb3plbnNldChbMCwgMSwgMl0pJykKKyAgICAgICAgY3ViZV9yZXByX3RndCA9ICIiIlwKK3tmcm96ZW5zZXQoW10pOiBmcm96ZW5zZXQoW2Zyb3plbnNldChbMl0pLCBmcm96ZW5zZXQoWzBdKSwgZnJvemVuc2V0KFsxXSldKSwKKyBmcm96ZW5zZXQoWzBdKTogZnJvemVuc2V0KFtmcm96ZW5zZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsIDJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsIDFdKV0pLAorIGZyb3plbnNldChbMV0pOiBmcm96ZW5zZXQoW2Zyb3plbnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMSwgMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwgMV0pXSksCisgZnJvemVuc2V0KFsyXSk6IGZyb3plbnNldChbZnJvemVuc2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFsxLCAyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLCAyXSldKSwKKyBmcm96ZW5zZXQoWzEsIDJdKTogZnJvemVuc2V0KFtmcm96ZW5zZXQoWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsIDEsIDJdKV0pLAorIGZyb3plbnNldChbMCwgMl0pOiBmcm96ZW5zZXQoW2Zyb3plbnNldChbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwgMSwgMl0pXSksCisgZnJvemVuc2V0KFswLCAxXSk6IGZyb3plbnNldChbZnJvemVuc2V0KFswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFsxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLCAxLCAyXSldKSwKKyBmcm96ZW5zZXQoWzAsIDEsIDJdKTogZnJvemVuc2V0KFtmcm96ZW5zZXQoWzEsIDJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsIDJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsIDFdKV0pfSIiIgorICAgICAgICBjdWJlID0gdGVzdC50ZXN0X3NldC5jdWJlKDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoY3ViZSksIGN1YmVfcmVwcl90Z3QpCisgICAgICAgIGN1Ym9fcmVwcl90Z3QgPSAiIiJcCit7ZnJvemVuc2V0KFtmcm96ZW5zZXQoWzAsIDJdKSwgZnJvemVuc2V0KFswXSldKTogZnJvemVuc2V0KFtmcm96ZW5zZXQoW2Zyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFsyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKV0pLAorIGZyb3plbnNldChbZnJvemVuc2V0KFswLCAxXSksIGZyb3plbnNldChbMV0pXSk6IGZyb3plbnNldChbZnJvemVuc2V0KFtmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFsxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMV0pXSldKSwKKyBmcm96ZW5zZXQoW2Zyb3plbnNldChbMSwgMl0pLCBmcm96ZW5zZXQoWzFdKV0pOiBmcm96ZW5zZXQoW2Zyb3plbnNldChbZnJvemVuc2V0KFsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldChbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzFdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFdKV0pXSksCisgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzEsIDJdKSwgZnJvemVuc2V0KFsyXSldKTogZnJvemVuc2V0KFtmcm96ZW5zZXQoW2Zyb3plbnNldChbMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFsyXSldKV0pLAorIGZyb3plbnNldChbZnJvemVuc2V0KFtdKSwgZnJvemVuc2V0KFswXSldKTogZnJvemVuc2V0KFtmcm96ZW5zZXQoW2Zyb3plbnNldChbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldChbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMV0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFsyXSldKV0pLAorIGZyb3plbnNldChbZnJvemVuc2V0KFtdKSwgZnJvemVuc2V0KFsxXSldKTogZnJvemVuc2V0KFtmcm96ZW5zZXQoW2Zyb3plbnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMF0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFsxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFsyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXSldKV0pLAorIGZyb3plbnNldChbZnJvemVuc2V0KFsyXSksIGZyb3plbnNldChbXSldKTogZnJvemVuc2V0KFtmcm96ZW5zZXQoW2Zyb3plbnNldChbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMF0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFsxXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKV0pLAorIGZyb3plbnNldChbZnJvemVuc2V0KFswLCAxLCAyXSksIGZyb3plbnNldChbMCwgMV0pXSk6IGZyb3plbnNldChbZnJvemVuc2V0KFtmcm96ZW5zZXQoWzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldChbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMV0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldChbMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMV0pXSldKSwKKyBmcm96ZW5zZXQoW2Zyb3plbnNldChbMF0pLCBmcm96ZW5zZXQoWzAsIDFdKV0pOiBmcm96ZW5zZXQoW2Zyb3plbnNldChbZnJvemVuc2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMF0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFdKV0pXSksCisgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzJdKSwgZnJvemVuc2V0KFswLCAyXSldKTogZnJvemVuc2V0KFtmcm96ZW5zZXQoW2Zyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFsyXSldKV0pLAorIGZyb3plbnNldChbZnJvemVuc2V0KFswLCAxLCAyXSksIGZyb3plbnNldChbMCwgMl0pXSk6IGZyb3plbnNldChbZnJvemVuc2V0KFtmcm96ZW5zZXQoWzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyXSldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldChbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldChbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoWzAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pXSldKSwKKyBmcm96ZW5zZXQoW2Zyb3plbnNldChbMSwgMl0pLCBmcm96ZW5zZXQoWzAsIDEsIDJdKV0pOiBmcm96ZW5zZXQoW2Zyb3plbnNldChbZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFswLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMl0pXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoW2Zyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldChbMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFtmcm96ZW5zZXQoWzFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KFsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDJdKV0pXSl9IiIiCisKKyAgICAgICAgY3VibyA9IHRlc3QudGVzdF9zZXQubGluZWdyYXBoKGN1YmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoY3VibyksIGN1Ym9fcmVwcl90Z3QpCisKKyAgICBkZWYgdGVzdF9kZXB0aChzZWxmKToKKyAgICAgICAgbmVzdGVkX3R1cGxlID0gKDEsICgyLCAoMywgKDQsICg1LCA2KSkpKSkKKyAgICAgICAgbmVzdGVkX2RpY3QgPSB7MTogezI6IHszOiB7NDogezU6IHs2OiA2fX19fX19CisgICAgICAgIG5lc3RlZF9saXN0ID0gWzEsIFsyLCBbMywgWzQsIFs1LCBbNiwgW11dXV1dXV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChuZXN0ZWRfdHVwbGUpLCByZXByKG5lc3RlZF90dXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobmVzdGVkX2RpY3QpLCByZXByKG5lc3RlZF9kaWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChuZXN0ZWRfbGlzdCksIHJlcHIobmVzdGVkX2xpc3QpKQorCisgICAgICAgIGx2MV90dXBsZSA9ICcoMSwgKC4uLikpJworICAgICAgICBsdjFfZGljdCA9ICd7MTogey4uLn19JworICAgICAgICBsdjFfbGlzdCA9ICdbMSwgWy4uLl1dJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KG5lc3RlZF90dXBsZSwgZGVwdGg9MSksIGx2MV90dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChuZXN0ZWRfZGljdCwgZGVwdGg9MSksIGx2MV9kaWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KG5lc3RlZF9saXN0LCBkZXB0aD0xKSwgbHYxX2xpc3QpCisKKworY2xhc3MgRG90dGVkUHJldHR5UHJpbnRlcihwcHJpbnQuUHJldHR5UHJpbnRlcik6CisKKyAgICBkZWYgZm9ybWF0KHNlbGYsIG9iamVjdCwgY29udGV4dCwgbWF4bGV2ZWxzLCBsZXZlbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqZWN0LCBzdHIpOgorICAgICAgICAgICAgaWYgJyAnIGluIG9iamVjdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVwcihvYmplY3QpLCAxLCAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3QsIDAsIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBwcHJpbnQuUHJldHR5UHJpbnRlci5mb3JtYXQoCisgICAgICAgICAgICAgICAgc2VsZiwgb2JqZWN0LCBjb250ZXh0LCBtYXhsZXZlbHMsIGxldmVsKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoUXVlcnlUZXN0Q2FzZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wcmludC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3ByaW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MjYzNDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wcmludC5weQpAQCAtMCwwICsxLDE0MSBAQAorIiIiVGVzdCBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgcHJpbnQgZnVuY3Rpb24uCisiIiIKKworIyBJbiAyLjYsIHRoaXMgZ2l2ZXMgdXMgdGhlIGJlaGF2aW9yIHdlIHdhbnQuICBJbiAzLjAsIGl0IGhhcworIyAgbm8gZnVuY3Rpb24sIGJ1dCBpdCBzdGlsbCBtdXN0IHBhcnNlIGNvcnJlY3RseS4KK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitOb3REZWZpbmVkID0gb2JqZWN0KCkKKworIyBBIGRpc3BhdGNoIHRhYmxlIGFsbCA4IGNvbWJpbmF0aW9ucyBvZiBwcm92aWRpbmcKKyMgIHNlcCwgZW5kLCBhbmQgZmlsZQorIyBJIHVzZSB0aGlzIG1hY2hpbmVyeSBzbyB0aGF0IEknbSBub3QganVzdCBwYXNzaW5nIGRlZmF1bHQKKyMgIHZhbHVlcyB0byBwcmludCwgSSdtIGVpdGhlciBwYXNzaW5nIG9yIG5vdCBwYXNzaW5nIGluIHRoZQorIyAgYXJndW1lbnRzCitkaXNwYXRjaCA9IHsKKyAgICAoRmFsc2UsIEZhbHNlLCBGYWxzZSk6CisgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoKmFyZ3MpLAorICAgIChGYWxzZSwgRmFsc2UsIFRydWUpOgorICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGZpbGU9ZmlsZSwgKmFyZ3MpLAorICAgIChGYWxzZSwgVHJ1ZSwgIEZhbHNlKToKKyAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChlbmQ9ZW5kLCAqYXJncyksCisgICAgKEZhbHNlLCBUcnVlLCAgVHJ1ZSk6CisgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZW5kPWVuZCwgZmlsZT1maWxlLCAqYXJncyksCisgICAgKFRydWUsICBGYWxzZSwgRmFsc2UpOgorICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsICphcmdzKSwKKyAgICAoVHJ1ZSwgIEZhbHNlLCBUcnVlKToKKyAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCBmaWxlPWZpbGUsICphcmdzKSwKKyAgICAoVHJ1ZSwgIFRydWUsICBGYWxzZSk6CisgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZW5kPWVuZCwgKmFyZ3MpLAorICAgIChUcnVlLCAgVHJ1ZSwgIFRydWUpOgorICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGVuZD1lbmQsIGZpbGU9ZmlsZSwgKmFyZ3MpLAorICAgIH0KKworIyBDbGFzcyB1c2VkIHRvIHRlc3QgX19zdHJfXyBhbmQgcHJpbnQKK2NsYXNzIENsYXNzV2l0aF9fc3RyX186CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICBzZWxmLnggPSB4CisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLngKKworY2xhc3MgVGVzdFByaW50KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY2hlY2soc2VsZiwgZXhwZWN0ZWQsIGFyZ3MsCisgICAgICAgICAgICBzZXA9Tm90RGVmaW5lZCwgZW5kPU5vdERlZmluZWQsIGZpbGU9Tm90RGVmaW5lZCk6CisgICAgICAgICMgQ2FwdHVyZSBzeXMuc3Rkb3V0IGluIGEgU3RyaW5nSU8uICBDYWxsIHByaW50IHdpdGggYXJncywKKyAgICAgICAgIyAgYW5kIHdpdGggc2VwLCBlbmQsIGFuZCBmaWxlLCBpZiB0aGV5J3JlIGRlZmluZWQuICBSZXN1bHQKKyAgICAgICAgIyAgbXVzdCBtYXRjaCBleHBlY3RlZC4KKworICAgICAgICAjIExvb2sgdXAgdGhlIGFjdHVhbCBmdW5jdGlvbiB0byBjYWxsLCBiYXNlZCBvbiBpZiBzZXAsIGVuZCwgYW5kIGZpbGUKKyAgICAgICAgIyAgYXJlIGRlZmluZWQKKyAgICAgICAgZm4gPSBkaXNwYXRjaFsoc2VwIGlzIG5vdCBOb3REZWZpbmVkLAorICAgICAgICAgICAgICAgICAgICAgICBlbmQgaXMgbm90IE5vdERlZmluZWQsCisgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgaXMgbm90IE5vdERlZmluZWQpXQorCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHQ6CisgICAgICAgICAgICBmbihhcmdzLCBzZXAsIGVuZCwgZmlsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ2V0dmFsdWUoKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9wcmludChzZWxmKToKKyAgICAgICAgZGVmIHgoZXhwZWN0ZWQsIGFyZ3MsIHNlcD1Ob3REZWZpbmVkLCBlbmQ9Tm90RGVmaW5lZCk6CisgICAgICAgICAgICAjIFJ1biB0aGUgdGVzdCAyIHdheXM6IG5vdCB1c2luZyBmaWxlLCBhbmQgdXNpbmcKKyAgICAgICAgICAgICMgIGZpbGUgZGlyZWN0ZWQgdG8gYSBTdHJpbmdJTworCisgICAgICAgICAgICBzZWxmLmNoZWNrKGV4cGVjdGVkLCBhcmdzLCBzZXA9c2VwLCBlbmQ9ZW5kKQorCisgICAgICAgICAgICAjIFdoZW4gd3JpdGluZyB0byBhIGZpbGUsIHN0ZG91dCBpcyBleHBlY3RlZCB0byBiZSBlbXB0eQorICAgICAgICAgICAgbyA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHNlbGYuY2hlY2soJycsIGFyZ3MsIHNlcD1zZXAsIGVuZD1lbmQsIGZpbGU9bykKKworICAgICAgICAgICAgIyBBbmQgbyB3aWxsIGNvbnRhaW4gdGhlIGV4cGVjdGVkIG91dHB1dAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLmdldHZhbHVlKCksIGV4cGVjdGVkKQorCisgICAgICAgIHgoJ1xuJywgKCkpCisgICAgICAgIHgoJ2FcbicsICgnYScsKSkKKyAgICAgICAgeCgnTm9uZVxuJywgKE5vbmUsKSkKKyAgICAgICAgeCgnMSAyXG4nLCAoMSwgMikpCisgICAgICAgIHgoJzEgICAyXG4nLCAoMSwgJyAnLCAyKSkKKyAgICAgICAgeCgnMSoyXG4nLCAoMSwgMiksIHNlcD0nKicpCisgICAgICAgIHgoJzEgcycsICgxLCAncycpLCBlbmQ9JycpCisgICAgICAgIHgoJ2FcbmJcbicsICgnYScsICdiJyksIHNlcD0nXG4nKQorICAgICAgICB4KCcxLjAxJywgKDEuMCwgMSksIHNlcD0nJywgZW5kPScnKQorICAgICAgICB4KCcxKmEqMS4zKycsICgxLCAnYScsIDEuMyksIHNlcD0nKicsIGVuZD0nKycpCisgICAgICAgIHgoJ2FcblxuYlxuJywgKCdhXG4nLCAnYicpLCBzZXA9J1xuJykKKyAgICAgICAgeCgnXDArICtcMFxuJywgKCdcMCcsICcgJywgJ1wwJyksIHNlcD0nKycpCisKKyAgICAgICAgeCgnYVxuIGJcbicsICgnYVxuJywgJ2InKSkKKyAgICAgICAgeCgnYVxuIGJcbicsICgnYVxuJywgJ2InKSwgc2VwPU5vbmUpCisgICAgICAgIHgoJ2FcbiBiXG4nLCAoJ2FcbicsICdiJyksIGVuZD1Ob25lKQorICAgICAgICB4KCdhXG4gYlxuJywgKCdhXG4nLCAnYicpLCBzZXA9Tm9uZSwgZW5kPU5vbmUpCisKKyAgICAgICAgeCgnKlxuJywgKENsYXNzV2l0aF9fc3RyX18oJyonKSwpKQorICAgICAgICB4KCdhYmMgMVxuJywgKENsYXNzV2l0aF9fc3RyX18oJ2FiYycpLCAxKSkKKworICAgICAgICAjIDIueCB1bmljb2RlIHRlc3RzCisgICAgICAgIHgodScxIDJcbicsICgnMScsIHUnMicpKQorICAgICAgICB4KHUndVwxMjM0XG4nLCAodSd1XDEyMzQnLCkpCisgICAgICAgIHgodScgIGFiYyAxXG4nLCAoJyAnLCBDbGFzc1dpdGhfX3N0cl9fKHUnYWJjJyksIDEpKQorCisgICAgICAgICMgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHJpbnQsICcnLCBzZXA9MykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwcmludCwgJycsIGVuZD0zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgcHJpbnQsICcnLCBmaWxlPScnKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfYXJncyhzZWxmKToKKyAgICAgICAgIyBJZiBhbiB1bmljb2RlIGFyZyBpcyBwYXNzZWQsIHNlcCBhbmQgZW5kIHNob3VsZCBiZSB1bmljb2RlLCB0b28uCisgICAgICAgIGNsYXNzIFJlY29yZGVyKG9iamVjdCk6CisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtdXN0X2JlX3VuaWNvZGUpOgorICAgICAgICAgICAgICAgIHNlbGYuYnVmID0gW10KKyAgICAgICAgICAgICAgICBzZWxmLmZvcmNlX3VuaWNvZGUgPSBtdXN0X2JlX3VuaWNvZGUKKworICAgICAgICAgICAgZGVmIHdyaXRlKHNlbGYsIHdoYXQpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuZm9yY2VfdW5pY29kZSBhbmQgbm90IGlzaW5zdGFuY2Uod2hhdCwgdW5pY29kZSk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJ7MCFyfSBpcyBub3QgdW5pY29kZSIuZm9ybWF0KHdoYXQpKQorICAgICAgICAgICAgICAgIHNlbGYuYnVmLmFwcGVuZCh3aGF0KQorCisgICAgICAgIGJ1ZiA9IFJlY29yZGVyKFRydWUpCisgICAgICAgIHByaW50KHUnaGknLCBmaWxlPWJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Jycuam9pbihidWYuYnVmKSwgJ2hpXG4nKQorICAgICAgICBkZWwgYnVmLmJ1Zls6XQorICAgICAgICBwcmludCh1J2hpJywgdSdub3RoaW5nJywgZmlsZT1idWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodScnLmpvaW4oYnVmLmJ1ZiksICdoaSBub3RoaW5nXG4nKQorICAgICAgICBidWYgPSBSZWNvcmRlcihGYWxzZSkKKyAgICAgICAgcHJpbnQoJ2hpJywgJ2J5ZScsIGVuZD11J1xuJywgZmlsZT1idWYpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShidWYuYnVmWzFdLCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYnVmLmJ1ZlszXSwgdW5pY29kZSkKKyAgICAgICAgZGVsIGJ1Zi5idWZbOl0KKyAgICAgICAgcHJpbnQoc2VwPXUneCcsIGZpbGU9YnVmKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYnVmLmJ1ZlstMV0sIHVuaWNvZGUpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFByaW50KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wcm9maWxlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHJvZmlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTkzZDM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHJvZmlsZS5weQpAQCAtMCwwICsxLDE4NiBAQAorIiIiVGVzdCBzdWl0ZSBmb3IgdGhlIHByb2ZpbGUgbW9kdWxlLiIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgcHN0YXRzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKworaW1wb3J0IHByb2ZpbGUKK2Zyb20gdGVzdC5wcm9maWxlZSBpbXBvcnQgdGVzdGZ1bmMsIHRpbWVyCisKKworY2xhc3MgUHJvZmlsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgcHJvZmlsZXJjbGFzcyA9IHByb2ZpbGUuUHJvZmlsZQorICAgIG1ldGhvZG5hbWVzID0gWydwcmludF9zdGF0cycsICdwcmludF9jYWxsZXJzJywgJ3ByaW50X2NhbGxlZXMnXQorICAgIGV4cGVjdGVkX291dHB1dCA9IHt9CisgICAgZXhwZWN0ZWRfbGlzdF9zb3J0X291dHB1dCA9ICc6MChzb3J0KScKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkb19wcm9maWxpbmcoY2xzKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIHByb2YgPSBjbHMucHJvZmlsZXJjbGFzcyh0aW1lciwgMC4wMDEpCisgICAgICAgIHN0YXJ0X3RpbWVyID0gdGltZXIoKQorICAgICAgICBwcm9mLnJ1bmN0eCgidGVzdGZ1bmMoKSIsIGdsb2JhbHMoKSwgbG9jYWxzKCkpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHRpbWVyKCkgLSBzdGFydF90aW1lcikKKyAgICAgICAgZm9yIG1ldGhvZG5hbWUgaW4gY2xzLm1ldGhvZG5hbWVzOgorICAgICAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHN0YXRzID0gcHN0YXRzLlN0YXRzKHByb2YsIHN0cmVhbT1zKQorICAgICAgICAgICAgc3RhdHMuc3RyaXBfZGlycygpLnNvcnRfc3RhdHMoInN0ZG5hbWUiKQorICAgICAgICAgICAgZ2V0YXR0cihzdGF0cywgbWV0aG9kbmFtZSkoKQorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocy5nZXR2YWx1ZSgpKQorICAgICAgICByZXR1cm4gcmVzdWx0cworCisgICAgZGVmIHRlc3RfY3Byb2ZpbGUoc2VsZik6CisgICAgICAgIHJlc3VsdHMgPSBzZWxmLmRvX3Byb2ZpbGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0c1swXSwgMTAwMCkKKyAgICAgICAgZm9yIGksIG1ldGhvZCBpbiBlbnVtZXJhdGUoc2VsZi5tZXRob2RuYW1lcyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHNbaSsxXSwgc2VsZi5leHBlY3RlZF9vdXRwdXRbbWV0aG9kXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXRzLiVzIG91dHB1dCBmb3IgJXMgZG9lc24ndCBmaXQgZXhwZWN0YXRpb24hIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXRob2QsIHNlbGYucHJvZmlsZXJjbGFzcy5fX25hbWVfXykpCisKKyAgICBkZWYgdGVzdF9jYWxsaW5nX2NvbnZlbnRpb25zKHNlbGYpOgorICAgICAgICAjIElzc3VlICM1MzMwOiBwcm9maWxlIGFuZCBjUHJvZmlsZSB3b3VsZG4ndCByZXBvcnQgQyBmdW5jdGlvbnMgY2FsbGVkCisgICAgICAgICMgd2l0aCBrZXl3b3JkIGFyZ3VtZW50cy4gV2UgdGVzdCBhbGwgY2FsbGluZyBjb252ZW50aW9ucy4KKyAgICAgICAgc3RtdHMgPSBbCisgICAgICAgICAgICAiW10uc29ydCgpIiwKKyAgICAgICAgICAgICJbXS5zb3J0KHJldmVyc2U9VHJ1ZSkiLAorICAgICAgICAgICAgIltdLnNvcnQoKihOb25lLCBOb25lLCBUcnVlKSkiLAorICAgICAgICAgICAgIltdLnNvcnQoKipkaWN0KHJldmVyc2U9VHJ1ZSkpIiwKKyAgICAgICAgXQorICAgICAgICBmb3Igc3RtdCBpbiBzdG10czoKKyAgICAgICAgICAgIHMgPSBTdHJpbmdJTygpCisgICAgICAgICAgICBwcm9mID0gc2VsZi5wcm9maWxlcmNsYXNzKHRpbWVyLCAwLjAwMSkKKyAgICAgICAgICAgIHByb2YucnVuY3R4KHN0bXQsIGdsb2JhbHMoKSwgbG9jYWxzKCkpCisgICAgICAgICAgICBzdGF0cyA9IHBzdGF0cy5TdGF0cyhwcm9mLCBzdHJlYW09cykKKyAgICAgICAgICAgIHN0YXRzLnByaW50X3N0YXRzKCkKKyAgICAgICAgICAgIHJlcyA9IHMuZ2V0dmFsdWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLmV4cGVjdGVkX2xpc3Rfc29ydF9vdXRwdXQsIHJlcywKKyAgICAgICAgICAgICAgICAiUHJvZmlsaW5nIHswIXJ9IGRpZG4ndCByZXBvcnQgbGlzdC5zb3J0OlxuezF9Ii5mb3JtYXQoc3RtdCwgcmVzKSkKKworCitkZWYgcmVnZW5lcmF0ZV9leHBlY3RlZF9vdXRwdXQoZmlsZW5hbWUsIGNscyk6CisgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yc3RyaXAoJ2NvJykKKyAgICBwcmludCAnUmVnZW5lcmF0aW5nICVzLi4uJyAlIGZpbGVuYW1lCisgICAgcmVzdWx0cyA9IGNscy5kb19wcm9maWxpbmcoKQorCisgICAgbmV3ZmlsZSA9IFtdCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBuZXdmaWxlLmFwcGVuZChsaW5lKQorICAgICAgICAgICAgaWYgbGluZVs6Nl0gPT0gJyMtLWN1dCc6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlbGluZXMobmV3ZmlsZSkKKyAgICAgICAgZm9yIGksIG1ldGhvZCBpbiBlbnVtZXJhdGUoY2xzLm1ldGhvZG5hbWVzKToKKyAgICAgICAgICAgIGYud3JpdGUoJyVzLmV4cGVjdGVkX291dHB1dFslcl0gPSAiIiJcXFxuJXMiIiJcbicgJSAoCisgICAgICAgICAgICAgICAgY2xzLl9fbmFtZV9fLCBtZXRob2QsIHJlc3VsdHNbaSsxXSkpCisgICAgICAgIGYud3JpdGUoJ1xuaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjpcbiAgICBtYWluKClcbicpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChQcm9maWxlVGVzdCkKKworZGVmIG1haW4oKToKKyAgICBpZiAnLXInIG5vdCBpbiBzeXMuYXJndjoKKyAgICAgICAgdGVzdF9tYWluKCkKKyAgICBlbHNlOgorICAgICAgICByZWdlbmVyYXRlX2V4cGVjdGVkX291dHB1dChfX2ZpbGVfXywgUHJvZmlsZVRlc3QpCisKKworIyBEb24ndCByZW1vdmUgdGhpcyBjb21tZW50LiBFdmVyeXRoaW5nIGJlbG93IGl0IGlzIGF1dG8tZ2VuZXJhdGVkLgorIy0tY3V0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Byb2ZpbGVUZXN0LmV4cGVjdGVkX291dHB1dFsncHJpbnRfc3RhdHMnXSA9ICIiIlwKKyAgICAgICAgIDEyNyBmdW5jdGlvbiBjYWxscyAoMTA3IHByaW1pdGl2ZSBjYWxscykgaW4gOTk5Ljc0OSBzZWNvbmRzCisKKyAgIE9yZGVyZWQgYnk6IHN0YW5kYXJkIG5hbWUKKworICAgbmNhbGxzICB0b3R0aW1lICBwZXJjYWxsICBjdW10aW1lICBwZXJjYWxsIGZpbGVuYW1lOmxpbmVubyhmdW5jdGlvbikKKyAgICAgICAgNCAgIC0wLjAwNCAgIC0wLjAwMSAgIC0wLjAwNCAgIC0wLjAwMSA6MChhcHBlbmQpCisgICAgICAgIDQgICAtMC4wMDQgICAtMC4wMDEgICAtMC4wMDQgICAtMC4wMDEgOjAoZXhjX2luZm8pCisgICAgICAgMTIgICAtMC4wMjQgICAtMC4wMDIgICAxMS45NjQgICAgMC45OTcgOjAoaGFzYXR0cikKKyAgICAgICAgOCAgIC0wLjAwOCAgIC0wLjAwMSAgIC0wLjAwOCAgIC0wLjAwMSA6MChyYW5nZSkKKyAgICAgICAgMSAgICAwLjAwMCAgICAwLjAwMCAgICAwLjAwMCAgICAwLjAwMCA6MChzZXRwcm9maWxlKQorICAgICAgICAxICAgLTAuMDAyICAgLTAuMDAyICA5OTkuNzUxICA5OTkuNzUxIDxzdHJpbmc+OjEoPG1vZHVsZT4pCisgICAgICAgIDAgICAgMC4wMDAgICAgICAgICAgICAgMC4wMDAgICAgICAgICAgcHJvZmlsZTowKHByb2ZpbGVyKQorICAgICAgICAxICAgLTAuMDAyICAgLTAuMDAyICA5OTkuNzQ5ICA5OTkuNzQ5IHByb2ZpbGU6MCh0ZXN0ZnVuYygpKQorICAgICAgIDI4ICAgMjcuOTcyICAgIDAuOTk5ICAgMjcuOTcyICAgIDAuOTk5IHByb2ZpbGVlLnB5OjExMChfX2dldGF0dHJfXykKKyAgICAgICAgMSAgMjY5Ljk5NiAgMjY5Ljk5NiAgOTk5Ljc1MyAgOTk5Ljc1MyBwcm9maWxlZS5weToyNSh0ZXN0ZnVuYykKKyAgICAgMjMvMyAgMTQ5LjkzNyAgICA2LjUxOSAgMTY5LjkxNyAgIDU2LjYzOSBwcm9maWxlZS5weTozNShmYWN0b3JpYWwpCisgICAgICAgMjAgICAxOS45ODAgICAgMC45OTkgICAxOS45ODAgICAgMC45OTkgcHJvZmlsZWUucHk6NDgobXVsKQorICAgICAgICAyICAgMzkuOTg2ICAgMTkuOTkzICA1OTkuODE0ICAyOTkuOTA3IHByb2ZpbGVlLnB5OjU1KGhlbHBlcikKKyAgICAgICAgNCAgMTE1Ljk4NCAgIDI4Ljk5NiAgMTE5Ljk2NCAgIDI5Ljk5MSBwcm9maWxlZS5weTo3MyhoZWxwZXIxKQorICAgICAgICAyICAgLTAuMDA2ICAgLTAuMDAzICAxMzkuOTQyICAgNjkuOTcxIHByb2ZpbGVlLnB5Ojg0KGhlbHBlcjJfaW5kaXJlY3QpCisgICAgICAgIDggIDMxMS45NzYgICAzOC45OTcgIDM5OS44OTYgICA0OS45ODcgcHJvZmlsZWUucHk6ODgoaGVscGVyMikKKyAgICAgICAgOCAgIDYzLjk2OCAgICA3Ljk5NiAgIDc5Ljk0NCAgICA5Ljk5MyBwcm9maWxlZS5weTo5OChzdWJoZWxwZXIpCisKKworIiIiCitQcm9maWxlVGVzdC5leHBlY3RlZF9vdXRwdXRbJ3ByaW50X2NhbGxlcnMnXSA9ICIiIlwKKyAgIE9yZGVyZWQgYnk6IHN0YW5kYXJkIG5hbWUKKworRnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcyBjYWxsZWQgYnkuLi4KKzowKGFwcGVuZCkgICAgICAgICAgICAgICAgICAgICAgICA8LSBwcm9maWxlZS5weTo3MyhoZWxwZXIxKSg0KSAgMTE5Ljk2NAorOjAoZXhjX2luZm8pICAgICAgICAgICAgICAgICAgICAgIDwtIHByb2ZpbGVlLnB5OjczKGhlbHBlcjEpKDQpICAxMTkuOTY0Cis6MChoYXNhdHRyKSAgICAgICAgICAgICAgICAgICAgICAgPC0gcHJvZmlsZWUucHk6NzMoaGVscGVyMSkoNCkgIDExOS45NjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZS5weTo4OChoZWxwZXIyKSg4KSAgMzk5Ljg5NgorOjAocmFuZ2UpICAgICAgICAgICAgICAgICAgICAgICAgIDwtIHByb2ZpbGVlLnB5Ojk4KHN1YmhlbHBlcikoOCkgICA3OS45NDQKKzowKHNldHByb2ZpbGUpICAgICAgICAgICAgICAgICAgICA8LSBwcm9maWxlOjAodGVzdGZ1bmMoKSkoMSkgIDk5OS43NDkKKzxzdHJpbmc+OjEoPG1vZHVsZT4pICAgICAgICAgICAgICA8LSBwcm9maWxlOjAodGVzdGZ1bmMoKSkoMSkgIDk5OS43NDkKK3Byb2ZpbGU6MChwcm9maWxlcikgICAgICAgICAgICAgICA8LQorcHJvZmlsZTowKHRlc3RmdW5jKCkpICAgICAgICAgICAgIDwtIHByb2ZpbGU6MChwcm9maWxlcikoMSkgICAgMC4wMDAKK3Byb2ZpbGVlLnB5OjExMChfX2dldGF0dHJfXykgICAgICA8LSA6MChoYXNhdHRyKSgxMikgICAxMS45NjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZS5weTo5OChzdWJoZWxwZXIpKDE2KSAgIDc5Ljk0NAorcHJvZmlsZWUucHk6MjUodGVzdGZ1bmMpICAgICAgICAgIDwtIDxzdHJpbmc+OjEoPG1vZHVsZT4pKDEpICA5OTkuNzUxCitwcm9maWxlZS5weTozNShmYWN0b3JpYWwpICAgICAgICAgPC0gcHJvZmlsZWUucHk6MjUodGVzdGZ1bmMpKDEpICA5OTkuNzUzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWUucHk6MzUoZmFjdG9yaWFsKSgyMCkgIDE2OS45MTcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZS5weTo4NChoZWxwZXIyX2luZGlyZWN0KSgyKSAgMTM5Ljk0MgorcHJvZmlsZWUucHk6NDgobXVsKSAgICAgICAgICAgICAgIDwtIHByb2ZpbGVlLnB5OjM1KGZhY3RvcmlhbCkoMjApICAxNjkuOTE3Citwcm9maWxlZS5weTo1NShoZWxwZXIpICAgICAgICAgICAgPC0gcHJvZmlsZWUucHk6MjUodGVzdGZ1bmMpKDIpICA5OTkuNzUzCitwcm9maWxlZS5weTo3MyhoZWxwZXIxKSAgICAgICAgICAgPC0gcHJvZmlsZWUucHk6NTUoaGVscGVyKSg0KSAgNTk5LjgxNAorcHJvZmlsZWUucHk6ODQoaGVscGVyMl9pbmRpcmVjdCkgIDwtIHByb2ZpbGVlLnB5OjU1KGhlbHBlcikoMikgIDU5OS44MTQKK3Byb2ZpbGVlLnB5Ojg4KGhlbHBlcjIpICAgICAgICAgICA8LSBwcm9maWxlZS5weTo1NShoZWxwZXIpKDYpICA1OTkuODE0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWUucHk6ODQoaGVscGVyMl9pbmRpcmVjdCkoMikgIDEzOS45NDIKK3Byb2ZpbGVlLnB5Ojk4KHN1YmhlbHBlcikgICAgICAgICA8LSBwcm9maWxlZS5weTo4OChoZWxwZXIyKSg4KSAgMzk5Ljg5NgorCisKKyIiIgorUHJvZmlsZVRlc3QuZXhwZWN0ZWRfb3V0cHV0WydwcmludF9jYWxsZWVzJ10gPSAiIiJcCisgICBPcmRlcmVkIGJ5OiBzdGFuZGFyZCBuYW1lCisKK0Z1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWQuLi4KKzowKGFwcGVuZCkgICAgICAgICAgICAgICAgICAgICAgICAtPgorOjAoZXhjX2luZm8pICAgICAgICAgICAgICAgICAgICAgIC0+Cis6MChoYXNhdHRyKSAgICAgICAgICAgICAgICAgICAgICAgLT4gcHJvZmlsZWUucHk6MTEwKF9fZ2V0YXR0cl9fKSgxMikgICAyNy45NzIKKzowKHJhbmdlKSAgICAgICAgICAgICAgICAgICAgICAgICAtPgorOjAoc2V0cHJvZmlsZSkgICAgICAgICAgICAgICAgICAgIC0+Cis8c3RyaW5nPjoxKDxtb2R1bGU+KSAgICAgICAgICAgICAgLT4gcHJvZmlsZWUucHk6MjUodGVzdGZ1bmMpKDEpICA5OTkuNzUzCitwcm9maWxlOjAocHJvZmlsZXIpICAgICAgICAgICAgICAgLT4gcHJvZmlsZTowKHRlc3RmdW5jKCkpKDEpICA5OTkuNzQ5Citwcm9maWxlOjAodGVzdGZ1bmMoKSkgICAgICAgICAgICAgLT4gOjAoc2V0cHJvZmlsZSkoMSkgICAgMC4wMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPjoxKDxtb2R1bGU+KSgxKSAgOTk5Ljc1MQorcHJvZmlsZWUucHk6MTEwKF9fZ2V0YXR0cl9fKSAgICAgIC0+Citwcm9maWxlZS5weToyNSh0ZXN0ZnVuYykgICAgICAgICAgLT4gcHJvZmlsZWUucHk6MzUoZmFjdG9yaWFsKSgxKSAgMTY5LjkxNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVlLnB5OjU1KGhlbHBlcikoMikgIDU5OS44MTQKK3Byb2ZpbGVlLnB5OjM1KGZhY3RvcmlhbCkgICAgICAgICAtPiBwcm9maWxlZS5weTozNShmYWN0b3JpYWwpKDIwKSAgMTY5LjkxNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVlLnB5OjQ4KG11bCkoMjApICAgMTkuOTgwCitwcm9maWxlZS5weTo0OChtdWwpICAgICAgICAgICAgICAgLT4KK3Byb2ZpbGVlLnB5OjU1KGhlbHBlcikgICAgICAgICAgICAtPiBwcm9maWxlZS5weTo3MyhoZWxwZXIxKSg0KSAgMTE5Ljk2NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVlLnB5Ojg0KGhlbHBlcjJfaW5kaXJlY3QpKDIpICAxMzkuOTQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWUucHk6ODgoaGVscGVyMikoNikgIDM5OS44OTYKK3Byb2ZpbGVlLnB5OjczKGhlbHBlcjEpICAgICAgICAgICAtPiA6MChhcHBlbmQpKDQpICAgLTAuMDA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjAoZXhjX2luZm8pKDQpICAgLTAuMDA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjAoaGFzYXR0cikoNCkgICAxMS45NjQKK3Byb2ZpbGVlLnB5Ojg0KGhlbHBlcjJfaW5kaXJlY3QpICAtPiBwcm9maWxlZS5weTozNShmYWN0b3JpYWwpKDIpICAxNjkuOTE3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWUucHk6ODgoaGVscGVyMikoMikgIDM5OS44OTYKK3Byb2ZpbGVlLnB5Ojg4KGhlbHBlcjIpICAgICAgICAgICAtPiA6MChoYXNhdHRyKSg4KSAgIDExLjk2NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVlLnB5Ojk4KHN1YmhlbHBlcikoOCkgICA3OS45NDQKK3Byb2ZpbGVlLnB5Ojk4KHN1YmhlbHBlcikgICAgICAgICAtPiA6MChyYW5nZSkoOCkgICAtMC4wMDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZS5weToxMTAoX19nZXRhdHRyX18pKDE2KSAgIDI3Ljk3MgorCisKKyIiIgorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHJvcGVydHkucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wcm9wZXJ0eS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWEwMjliCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHJvcGVydHkucHkKQEAgLTAsMCArMSwyMzEgQEAKKyMgVGVzdCBjYXNlIGZvciBwcm9wZXJ0eQorIyBtb3JlIHRlc3RzIGFyZSBpbiB0ZXN0X2Rlc2NyCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2NsYXNzIFByb3BlcnR5QmFzZShFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgUHJvcGVydHlHZXQoUHJvcGVydHlCYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFByb3BlcnR5U2V0KFByb3BlcnR5QmFzZSk6CisgICAgcGFzcworCitjbGFzcyBQcm9wZXJ0eURlbChQcm9wZXJ0eUJhc2UpOgorICAgIHBhc3MKKworY2xhc3MgQmFzZUNsYXNzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9zcGFtID0gNQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICIiIkJhc2VDbGFzcy5nZXR0ZXIiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NwYW0KKworICAgIEBzcGFtLnNldHRlcgorICAgIGRlZiBzcGFtKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi5fc3BhbSA9IHZhbHVlCisKKyAgICBAc3BhbS5kZWxldGVyCisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgIGRlbCBzZWxmLl9zcGFtCisKK2NsYXNzIFN1YkNsYXNzKEJhc2VDbGFzcyk6CisKKyAgICBAQmFzZUNsYXNzLnNwYW0uZ2V0dGVyCisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICIiIlN1YkNsYXNzLmdldHRlciIiIgorICAgICAgICByYWlzZSBQcm9wZXJ0eUdldChzZWxmLl9zcGFtKQorCisgICAgQHNwYW0uc2V0dGVyCisgICAgZGVmIHNwYW0oc2VsZiwgdmFsdWUpOgorICAgICAgICByYWlzZSBQcm9wZXJ0eVNldChzZWxmLl9zcGFtKQorCisgICAgQHNwYW0uZGVsZXRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICByYWlzZSBQcm9wZXJ0eURlbChzZWxmLl9zcGFtKQorCitjbGFzcyBQcm9wZXJ0eURvY0Jhc2Uob2JqZWN0KToKKyAgICBfc3BhbSA9IDEKKyAgICBkZWYgX2dldF9zcGFtKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fc3BhbQorICAgIHNwYW0gPSBwcm9wZXJ0eShfZ2V0X3NwYW0sIGRvYz0ic3BhbSBzcGFtIHNwYW0iKQorCitjbGFzcyBQcm9wZXJ0eURvY1N1YihQcm9wZXJ0eURvY0Jhc2UpOgorICAgIEBQcm9wZXJ0eURvY0Jhc2Uuc3BhbS5nZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIiVGhlIGRlY29yYXRvciBkb2VzIG5vdCB1c2UgdGhpcyBkb2Mgc3RyaW5nIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zcGFtCisKK2NsYXNzIFByb3BlcnR5U3ViTmV3R2V0dGVyKEJhc2VDbGFzcyk6CisgICAgQEJhc2VDbGFzcy5zcGFtLmdldHRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJuZXcgZG9jc3RyaW5nIiIiCisgICAgICAgIHJldHVybiA1CisKK2NsYXNzIFByb3BlcnR5TmV3R2V0dGVyKG9iamVjdCk6CisgICAgQHByb3BlcnR5CisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICIiIm9yaWdpbmFsIGRvY3N0cmluZyIiIgorICAgICAgICByZXR1cm4gMQorICAgIEBzcGFtLmdldHRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJuZXcgZG9jc3RyaW5nIiIiCisgICAgICAgIHJldHVybiA4CisKK2NsYXNzIFByb3BlcnR5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3Byb3BlcnR5X2RlY29yYXRvcl9iYXNlY2xhc3Moc2VsZik6CisgICAgICAgICMgc2VlICMxNjIwCisgICAgICAgIGJhc2UgPSBCYXNlQ2xhc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2Uuc3BhbSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9zcGFtLCA1KQorICAgICAgICBiYXNlLnNwYW0gPSAxMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2Uuc3BhbSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fc3BhbSwgMTApCisgICAgICAgIGRlbGF0dHIoYmFzZSwgInNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIoYmFzZSwgInNwYW0iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKGJhc2UsICJfc3BhbSIpKQorICAgICAgICBiYXNlLnNwYW0gPSAyMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2Uuc3BhbSwgMjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fc3BhbSwgMjApCisKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3Jfc3ViY2xhc3Moc2VsZik6CisgICAgICAgICMgc2VlICMxNjIwCisgICAgICAgIHN1YiA9IFN1YkNsYXNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUHJvcGVydHlHZXQsIGdldGF0dHIsIHN1YiwgInNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9wZXJ0eVNldCwgc2V0YXR0ciwgc3ViLCAic3BhbSIsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb3BlcnR5RGVsLCBkZWxhdHRyLCBzdWIsICJzcGFtIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X3Byb3BlcnR5X2RlY29yYXRvcl9zdWJjbGFzc19kb2Moc2VsZik6CisgICAgICAgIHN1YiA9IFN1YkNsYXNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWIuX19jbGFzc19fLnNwYW0uX19kb2NfXywgIlN1YkNsYXNzLmdldHRlciIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3JfYmFzZWNsYXNzX2RvYyhzZWxmKToKKyAgICAgICAgYmFzZSA9IEJhc2VDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fX2NsYXNzX18uc3BhbS5fX2RvY19fLCAiQmFzZUNsYXNzLmdldHRlciIpCisKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3JfZG9jKHNlbGYpOgorICAgICAgICBiYXNlID0gUHJvcGVydHlEb2NCYXNlKCkKKyAgICAgICAgc3ViID0gUHJvcGVydHlEb2NTdWIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX19jbGFzc19fLnNwYW0uX19kb2NfXywgInNwYW0gc3BhbSBzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWIuX19jbGFzc19fLnNwYW0uX19kb2NfXywgInNwYW0gc3BhbSBzcGFtIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X3Byb3BlcnR5X2dldHRlcl9kb2Nfb3ZlcnJpZGUoc2VsZik6CisgICAgICAgIG5ld2dldHRlcnN1YiA9IFByb3BlcnR5U3ViTmV3R2V0dGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdnZXR0ZXJzdWIuc3BhbSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdnZXR0ZXJzdWIuX19jbGFzc19fLnNwYW0uX19kb2NfXywgIm5ldyBkb2NzdHJpbmciKQorICAgICAgICBuZXdnZXR0ZXIgPSBQcm9wZXJ0eU5ld0dldHRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyLnNwYW0sIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyLl9fY2xhc3NfXy5zcGFtLl9fZG9jX18sICJuZXcgZG9jc3RyaW5nIikKKworCisjIElzc3VlIDU4OTA6IHN1YmNsYXNzZXMgb2YgcHJvcGVydHkgZG8gbm90IHByZXNlcnZlIG1ldGhvZCBfX2RvY19fIHN0cmluZ3MKK2NsYXNzIFByb3BlcnR5U3ViKHByb3BlcnR5KToKKyAgICAiIiJUaGlzIGlzIGEgc3ViY2xhc3Mgb2YgcHJvcGVydHkiIiIKKworY2xhc3MgUHJvcGVydHlTdWJTbG90cyhwcm9wZXJ0eSk6CisgICAgIiIiVGhpcyBpcyBhIHN1YmNsYXNzIG9mIHByb3BlcnR5IHRoYXQgZGVmaW5lcyBfX3Nsb3RzX18iIiIKKyAgICBfX3Nsb3RzX18gPSAoKQorCitjbGFzcyBQcm9wZXJ0eVN1YmNsYXNzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc2xvdHNfZG9jc3RyaW5nX2NvcHlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgICAgICBAUHJvcGVydHlTdWJTbG90cworICAgICAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAiIiJUcnlpbmcgdG8gY29weSB0aGlzIGRvY3N0cmluZyB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiIiIgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkF0dHJpYnV0ZUVycm9yIG5vdCByYWlzZWQiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfZG9jc3RyaW5nX2NvcHkoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJzcGFtIHdyYXBwZWQgaW4gcHJvcGVydHkgc3ViY2xhc3MiIiIKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgRm9vLnNwYW0uX19kb2NfXywKKyAgICAgICAgICAgICJzcGFtIHdyYXBwZWQgaW4gcHJvcGVydHkgc3ViY2xhc3MiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfcHJvcGVydHlfc2V0dGVyX2NvcGllc19nZXR0ZXJfZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKTogc2VsZi5fc3BhbSA9IDEKKyAgICAgICAgICAgIEBQcm9wZXJ0eVN1YgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgIiIic3BhbSB3cmFwcGVkIGluIHByb3BlcnR5IHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NwYW0KKyAgICAgICAgICAgIEBzcGFtLnNldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgICIiInRoaXMgZG9jc3RyaW5nIGlzIGlnbm9yZWQiIiIKKyAgICAgICAgICAgICAgICBzZWxmLl9zcGFtID0gdmFsdWUKKyAgICAgICAgZm9vID0gRm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uc3BhbSwgMSkKKyAgICAgICAgZm9vLnNwYW0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLnNwYW0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBGb28uc3BhbS5fX2RvY19fLAorICAgICAgICAgICAgInNwYW0gd3JhcHBlZCBpbiBwcm9wZXJ0eSBzdWJjbGFzcyIpCisgICAgICAgIGNsYXNzIEZvb1N1YihGb28pOgorICAgICAgICAgICAgQEZvby5zcGFtLnNldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgICIiImFub3RoZXIgaWdub3JlZCBkb2NzdHJpbmciIiIKKyAgICAgICAgICAgICAgICBzZWxmLl9zcGFtID0gJ2VnZ3MnCisgICAgICAgIGZvb3N1YiA9IEZvb1N1YigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vc3ViLnNwYW0sIDEpCisgICAgICAgIGZvb3N1Yi5zcGFtID0gNworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvb3N1Yi5zcGFtLCAnZWdncycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBGb29TdWIuc3BhbS5fX2RvY19fLAorICAgICAgICAgICAgInNwYW0gd3JhcHBlZCBpbiBwcm9wZXJ0eSBzdWJjbGFzcyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9uZXdfZ2V0dGVyX25ld19kb2NzdHJpbmcoc2VsZik6CisKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBAUHJvcGVydHlTdWIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIEBzcGFtLmdldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgIiIiYSBuZXcgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28uc3BhbS5fX2RvY19fLCAiYSBuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgY2xhc3MgRm9vQmFzZShvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJhIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGNsYXNzIEZvbzIoRm9vQmFzZSk6CisgICAgICAgICAgICBARm9vQmFzZS5zcGFtLmdldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgIiIiYSBuZXcgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28uc3BhbS5fX2RvY19fLCAiYSBuZXcgZG9jc3RyaW5nIikKKworCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoUHJvcGVydHlUZXN0cywgUHJvcGVydHlTdWJjbGFzc1Rlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wc3RhdHMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wc3RhdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFkOTQxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3BzdGF0cy5weQpAQCAtMCwwICsxLDMyIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgcHN0YXRzCisKKworCitjbGFzcyBBZGRDYWxsZXJzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGZvciBwc3RhdHMuYWRkX2NhbGxlcnMgaGVscGVyLiIiIgorCisgICAgZGVmIHRlc3RfY29tYmluZV9yZXN1bHRzKHNlbGYpOgorICAgICAgICAiIiJwc3RhdHMuYWRkX2NhbGxlcnMgc2hvdWxkIGNvbWJpbmUgdGhlIGNhbGwgcmVzdWx0cyBvZiBib3RoIHRhcmdldAorICAgICAgICBhbmQgc291cmNlIGJ5IGFkZGluZyB0aGUgY2FsbCB0aW1lLiBTZWUgaXNzdWUxMjY5LiIiIgorICAgICAgICAjIG5ldyBmb3JtYXQ6IHVzZWQgYnkgdGhlIGNQcm9maWxlIG1vZHVsZQorICAgICAgICB0YXJnZXQgPSB7ImEiOiAoMSwgMiwgMywgNCl9CisgICAgICAgIHNvdXJjZSA9IHsiYSI6ICgxLCAyLCAzLCA0KSwgImIiOiAoNSwgNiwgNywgOCl9CisgICAgICAgIG5ld19jYWxsZXJzID0gcHN0YXRzLmFkZF9jYWxsZXJzKHRhcmdldCwgc291cmNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19jYWxsZXJzLCB7J2EnOiAoMiwgNCwgNiwgOCksICdiJzogKDUsIDYsIDcsIDgpfSkKKyAgICAgICAgIyBvbGQgZm9ybWF0OiB1c2VkIGJ5IHRoZSBwcm9maWxlIG1vZHVsZQorICAgICAgICB0YXJnZXQgPSB7ImEiOiAxfQorICAgICAgICBzb3VyY2UgPSB7ImEiOiAxLCAiYiI6IDV9CisgICAgICAgIG5ld19jYWxsZXJzID0gcHN0YXRzLmFkZF9jYWxsZXJzKHRhcmdldCwgc291cmNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld19jYWxsZXJzLCB7J2EnOiAyLCAnYic6IDV9KQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBBZGRDYWxsZXJzVGVzdENhc2UKKyAgICApCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHR5LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHR5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYzM4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wdHkucHkKQEAgLTAsMCArMSwyODkgQEAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQorCisjU2tpcCB0aGVzZSB0ZXN0cyBpZiBlaXRoZXIgZmNudGwgb3IgdGVybWlvcyBpcyBub3QgYXZhaWxhYmxlCitmY250bCA9IGltcG9ydF9tb2R1bGUoJ2ZjbnRsJykKK2ltcG9ydF9tb2R1bGUoJ3Rlcm1pb3MnKQorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBwdHkKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNlbGVjdAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHVuaXR0ZXN0CisKK1RFU1RfU1RSSU5HXzEgPSAiSSB3aXNoIHRvIGJ1eSBhIGZpc2ggbGljZW5zZS5cbiIKK1RFU1RfU1RSSU5HXzIgPSAiRm9yIG15IHBldCBmaXNoLCBFcmljLlxuIgorCitpZiB2ZXJib3NlOgorICAgIGRlZiBkZWJ1Zyhtc2cpOgorICAgICAgICBwcmludCBtc2cKK2Vsc2U6CisgICAgZGVmIGRlYnVnKG1zZyk6CisgICAgICAgIHBhc3MKKworCitkZWYgbm9ybWFsaXplX291dHB1dChkYXRhKToKKyAgICAjIFNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgZG8gY29udmVyc2lvbnMgb24gbmV3bGluZS4gIFdlIGNvdWxkIHBvc3NpYmx5CisgICAgIyBmaXggdGhhdCBieSBkb2luZyB0aGUgYXBwcm9wcmlhdGUgdGVybWlvcy50Y3NldGF0dHIoKXMuICBJIGNvdWxkbid0CisgICAgIyBmaWd1cmUgb3V0IHRoZSByaWdodCBjb21ibyBvbiBUcnU2NCBhbmQgSSBkb24ndCBoYXZlIGFuIElSSVggYm94LgorICAgICMgU28ganVzdCBub3JtYWxpemUgdGhlIG91dHB1dCBhbmQgZG9jIHRoZSBwcm9ibGVtIE8vU2VzIGJ5IGFsbG93aW5nCisgICAgIyBjZXJ0YWluIGNvbWJpbmF0aW9ucyBmb3Igc29tZSBwbGF0Zm9ybXMsIGJ1dCBhdm9pZCBhbGxvd2luZyBvdGhlcgorICAgICMgZGlmZmVyZW5jZXMgKGxpa2UgZXh0cmEgd2hpdGVzcGFjZSwgdHJhaWxpbmcgZ2FyYmFnZSwgZXRjLikKKworICAgICMgVGhpcyBpcyBhYm91dCB0aGUgYmVzdCB3ZSBjYW4gZG8gd2l0aG91dCBnZXR0aW5nIHNvbWUgZmVlZGJhY2sKKyAgICAjIGZyb20gc29tZW9uZSBtb3JlIGtub3dsZWRnYWJsZS4KKworICAgICMgT1NGLzEgKFRydTY0KSBhcHBhcmVudGx5IHR1cm5zIFxuIGludG8gXHJcclxuLgorICAgIGlmIGRhdGEuZW5kc3dpdGgoJ1xyXHJcbicpOgorICAgICAgICByZXR1cm4gZGF0YS5yZXBsYWNlKCdcclxyXG4nLCAnXG4nKQorCisgICAgIyBJUklYIGFwcGFyZW50bHkgdHVybnMgXG4gaW50byBcclxuLgorICAgIGlmIGRhdGEuZW5kc3dpdGgoJ1xyXG4nKToKKyAgICAgICAgcmV0dXJuIGRhdGEucmVwbGFjZSgnXHJcbicsICdcbicpCisKKyAgICByZXR1cm4gZGF0YQorCisKKyMgTWFyZ2luYWwgdGVzdGluZyBvZiBwdHkgc3VpdGUuIENhbm5vdCBkbyBleHRlbnNpdmUgJ2RvIG9yIGZhaWwnIHRlc3RpbmcKKyMgYmVjYXVzZSBwdHkgY29kZSBpcyBub3QgdG9vIHBvcnRhYmxlLgorIyBYWFgobm5vcndpdHopOiAgdGhlc2UgdGVzdHMgbGVhayBmZHMgd2hlbiB0aGVyZSBpcyBhbiBlcnJvci4KK2NsYXNzIFB0eVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBpc2F0dHkoKSBhbmQgY2xvc2UoKSBjYW4gaGFuZyBvbiBzb21lIHBsYXRmb3Jtcy4gIFNldCBhbiBhbGFybQorICAgICAgICAjIGJlZm9yZSBydW5uaW5nIHRoZSB0ZXN0IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoYW5nIGZvcmV2ZXIuCisgICAgICAgIHNlbGYub2xkX2FsYXJtID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgc2VsZi5oYW5kbGVfc2lnKQorICAgICAgICBzaWduYWwuYWxhcm0oMTApCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgcmVtb3ZlIGFsYXJtLCByZXN0b3JlIG9sZCBhbGFybSBoYW5kbGVyCisgICAgICAgIHNpZ25hbC5hbGFybSgwKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBzZWxmLm9sZF9hbGFybSkKKworICAgIGRlZiBoYW5kbGVfc2lnKHNlbGYsIHNpZywgZnJhbWUpOgorICAgICAgICBzZWxmLmZhaWwoImlzYXR0eSBodW5nIikKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWJ1ZygiQ2FsbGluZyBtYXN0ZXJfb3BlbigpIikKKyAgICAgICAgICAgIG1hc3Rlcl9mZCwgc2xhdmVfbmFtZSA9IHB0eS5tYXN0ZXJfb3BlbigpCisgICAgICAgICAgICBkZWJ1ZygiR290IG1hc3Rlcl9mZCAnJWQnLCBzbGF2ZV9uYW1lICclcyciICUKKyAgICAgICAgICAgICAgICAgIChtYXN0ZXJfZmQsIHNsYXZlX25hbWUpKQorICAgICAgICAgICAgZGVidWcoIkNhbGxpbmcgc2xhdmVfb3BlbiglcikiICUgKHNsYXZlX25hbWUsKSkKKyAgICAgICAgICAgIHNsYXZlX2ZkID0gcHR5LnNsYXZlX29wZW4oc2xhdmVfbmFtZSkKKyAgICAgICAgICAgIGRlYnVnKCJHb3Qgc2xhdmVfZmQgJyVkJyIgJSBzbGF2ZV9mZCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAjICIgQW4gb3B0aW9uYWwgZmVhdHVyZSBjb3VsZCBub3QgYmUgaW1wb3J0ZWQgIiAuLi4gPworICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QsICJQc2V1ZG8tdGVybWluYWxzIChzZWVtaW5nbHkpIG5vdCBmdW5jdGlvbmFsLiIKKworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MuaXNhdHR5KHNsYXZlX2ZkKSwgJ3NsYXZlX2ZkIGlzIG5vdCBhIHR0eScpCisKKyAgICAgICAgIyBTb2xhcmlzIHJlcXVpcmVzIHJlYWRpbmcgdGhlIGZkIGJlZm9yZSBhbnl0aGluZyBpcyByZXR1cm5lZC4KKyAgICAgICAgIyBNeSBndWVzcyBpcyB0aGF0IHNpbmNlIHdlIG9wZW4gYW5kIGNsb3NlIHRoZSBzbGF2ZSBmZAorICAgICAgICAjIGluIG1hc3Rlcl9vcGVuKCksIHdlIG5lZWQgdG8gcmVhZCB0aGUgRU9GLgorCisgICAgICAgICMgRW5zdXJlIHRoZSBmZCBpcyBub24tYmxvY2tpbmcgaW4gY2FzZSB0aGVyZSdzIG5vdGhpbmcgdG8gcmVhZC4KKyAgICAgICAgb3JpZ19mbGFncyA9IGZjbnRsLmZjbnRsKG1hc3Rlcl9mZCwgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgZmNudGwuZmNudGwobWFzdGVyX2ZkLCBmY250bC5GX1NFVEZMLCBvcmlnX2ZsYWdzIHwgb3MuT19OT05CTE9DSykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgczEgPSBvcy5yZWFkKG1hc3Rlcl9mZCwgMTAyNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHMxKQorICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUFHQUlOOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICMgUmVzdG9yZSB0aGUgb3JpZ2luYWwgZmxhZ3MuCisgICAgICAgIGZjbnRsLmZjbnRsKG1hc3Rlcl9mZCwgZmNudGwuRl9TRVRGTCwgb3JpZ19mbGFncykKKworICAgICAgICBkZWJ1ZygiV3JpdGluZyB0byBzbGF2ZV9mZCIpCisgICAgICAgIG9zLndyaXRlKHNsYXZlX2ZkLCBURVNUX1NUUklOR18xKQorICAgICAgICBzMSA9IG9zLnJlYWQobWFzdGVyX2ZkLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdJIHdpc2ggdG8gYnV5IGEgZmlzaCBsaWNlbnNlLlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVfb3V0cHV0KHMxKSkKKworICAgICAgICBkZWJ1ZygiV3JpdGluZyBjaHVua2VkIG91dHB1dCIpCisgICAgICAgIG9zLndyaXRlKHNsYXZlX2ZkLCBURVNUX1NUUklOR18yWzo1XSkKKyAgICAgICAgb3Mud3JpdGUoc2xhdmVfZmQsIFRFU1RfU1RSSU5HXzJbNTpdKQorICAgICAgICBzMiA9IG9zLnJlYWQobWFzdGVyX2ZkLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdGb3IgbXkgcGV0IGZpc2gsIEVyaWMuXG4nLCBub3JtYWxpemVfb3V0cHV0KHMyKSkKKworICAgICAgICBvcy5jbG9zZShzbGF2ZV9mZCkKKyAgICAgICAgb3MuY2xvc2UobWFzdGVyX2ZkKQorCisKKyAgICBkZWYgdGVzdF9mb3JrKHNlbGYpOgorICAgICAgICBkZWJ1ZygiY2FsbGluZyBwdHkuZm9yaygpIikKKyAgICAgICAgcGlkLCBtYXN0ZXJfZmQgPSBwdHkuZm9yaygpCisgICAgICAgIGlmIHBpZCA9PSBwdHkuQ0hJTEQ6CisgICAgICAgICAgICAjIHN0ZG91dCBzaG91bGQgYmUgY29ubmVjdGVkIHRvIGEgdHR5LgorICAgICAgICAgICAgaWYgbm90IG9zLmlzYXR0eSgxKToKKyAgICAgICAgICAgICAgICBkZWJ1ZygiQ2hpbGQncyBmZCAxIGlzIG5vdCBhIHR0eT8hIikKKyAgICAgICAgICAgICAgICBvcy5fZXhpdCgzKQorCisgICAgICAgICAgICAjIEFmdGVyIHB0eS5mb3JrKCksIHRoZSBjaGlsZCBzaG91bGQgYWxyZWFkeSBiZSBhIHNlc3Npb24gbGVhZGVyLgorICAgICAgICAgICAgIyAob24gdGhvc2Ugc3lzdGVtcyB0aGF0IGhhdmUgdGhhdCBjb25jZXB0LikKKyAgICAgICAgICAgIGRlYnVnKCJJbiBjaGlsZCwgY2FsbGluZyBvcy5zZXRzaWQoKSIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Muc2V0c2lkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgR29vZCwgd2UgYWxyZWFkeSB3ZXJlIHNlc3Npb24gbGVhZGVyCisgICAgICAgICAgICAgICAgZGVidWcoIkdvb2Q6IE9TRXJyb3Igd2FzIHJhaXNlZC4iKQorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAjIEhhdmUgcHR5LCBidXQgbm90IHNldHNpZCgpPworICAgICAgICAgICAgICAgIGRlYnVnKCJObyBzZXRzaWQoKSBhdmFpbGFibGU/IikKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgIyBXZSBkb24ndCB3YW50IHRoaXMgZXJyb3IgdG8gcHJvcGFnYXRlLCBlc2NhcGluZyB0aGUgY2FsbCB0bworICAgICAgICAgICAgICAgICMgb3MuX2V4aXQoKSBhbmQgY2F1c2luZyB2ZXJ5IHBlY3VsaWFyIGJlaGF2aW9yIGluIHRoZSBjYWxsaW5nCisgICAgICAgICAgICAgICAgIyByZWdydGVzdC5weSAhCisgICAgICAgICAgICAgICAgIyBOb3RlOiBjb3VsZCBhZGQgdHJhY2ViYWNrIHByaW50aW5nIGhlcmUuCisgICAgICAgICAgICAgICAgZGVidWcoIkFuIHVuZXhwZWN0ZWQgZXJyb3Igd2FzIHJhaXNlZC4iKQorICAgICAgICAgICAgICAgIG9zLl9leGl0KDEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlYnVnKCJvcy5zZXRzaWQoKSBzdWNjZWVkZWQhIChiYWQhKSIpCisgICAgICAgICAgICAgICAgb3MuX2V4aXQoMikKKyAgICAgICAgICAgIG9zLl9leGl0KDQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWJ1ZygiV2FpdGluZyBmb3IgY2hpbGQgKCVkKSB0byBmaW5pc2guIiAlIHBpZCkKKyAgICAgICAgICAgICMgSW4gdmVyYm9zZSBtb2RlLCB3ZSBoYXZlIHRvIGNvbnN1bWUgdGhlIGRlYnVnIG91dHB1dCBmcm9tIHRoZQorICAgICAgICAgICAgIyBjaGlsZCBvciB0aGUgY2hpbGQgd2lsbCBibG9jaywgY2F1c2luZyB0aGlzIHRlc3QgdG8gaGFuZyBpbiB0aGUKKyAgICAgICAgICAgICMgcGFyZW50J3Mgd2FpdHBpZCgpIGNhbGwuICBUaGUgY2hpbGQgYmxvY2tzIGFmdGVyIGEKKyAgICAgICAgICAgICMgcGxhdGZvcm0tZGVwZW5kZW50IGFtb3VudCBvZiBkYXRhIGlzIHdyaXR0ZW4gdG8gaXRzIGZkLiAgT24KKyAgICAgICAgICAgICMgTGludXggMi42LCBpdCdzIDQwMDAgYnl0ZXMgYW5kIHRoZSBjaGlsZCB3b24ndCBibG9jaywgYnV0IG9uIE9TCisgICAgICAgICAgICAjIFggZXZlbiB0aGUgc21hbGwgd3JpdGVzIGluIHRoZSBjaGlsZCBhYm92ZSB3aWxsIGJsb2NrIGl0LiAgQWxzbworICAgICAgICAgICAgIyBvbiBMaW51eCwgdGhlIHJlYWQoKSB3aWxsIHJhaXNlIGFuIE9TRXJyb3IgKGlucHV0L291dHB1dCBlcnJvcikKKyAgICAgICAgICAgICMgd2hlbiBpdCB0cmllcyB0byByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGJ1dCB0aGUgY2hpbGQncworICAgICAgICAgICAgIyBhbHJlYWR5IGV4aXRlZCwgc28gY2F0Y2ggYW5kIGRpc2NhcmQgdGhvc2UgZXhjZXB0aW9ucy4gIEl0J3Mgbm90CisgICAgICAgICAgICAjIHdvcnRoIGNoZWNraW5nIGZvciBFSU8uCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQobWFzdGVyX2ZkLCA4MCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKGRhdGEucmVwbGFjZSgnXHJcbicsICdcbicpKQorCisgICAgICAgICAgICAjI2xpbmUgPSBvcy5yZWFkKG1hc3Rlcl9mZCwgODApCisgICAgICAgICAgICAjI2xpbmVzID0gbGluZS5yZXBsYWNlKCdcclxuJywgJ1xuJykuc3BsaXQoJ1xuJykKKyAgICAgICAgICAgICMjaWYgRmFsc2UgYW5kIGxpbmVzICE9IFsnSW4gY2hpbGQsIGNhbGxpbmcgb3Muc2V0c2lkKCknLAorICAgICAgICAgICAgIyMgICAgICAgICAgICAgJ0dvb2Q6IE9TRXJyb3Igd2FzIHJhaXNlZC4nLCAnJ106CisgICAgICAgICAgICAjIyAgICByYWlzZSBUZXN0RmFpbGVkKCJVbmV4cGVjdGVkIG91dHB1dCBmcm9tIGNoaWxkOiAlciIgJSBsaW5lKQorCisgICAgICAgICAgICAocGlkLCBzdGF0dXMpID0gb3Mud2FpdHBpZChwaWQsIDApCisgICAgICAgICAgICByZXMgPSBzdGF0dXMgPj4gOAorICAgICAgICAgICAgZGVidWcoIkNoaWxkICglZCkgZXhpdGVkIHdpdGggc3RhdHVzICVkICglZCkuIiAlIChwaWQsIHJlcywgc3RhdHVzKSkKKyAgICAgICAgICAgIGlmIHJlcyA9PSAxOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiQ2hpbGQgcmFpc2VkIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIGluIG9zLnNldHNpZCgpIikKKyAgICAgICAgICAgIGVsaWYgcmVzID09IDI6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJwdHkuZm9yaygpIGZhaWxlZCB0byBtYWtlIGNoaWxkIGEgc2Vzc2lvbiBsZWFkZXIuIikKKyAgICAgICAgICAgIGVsaWYgcmVzID09IDM6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJDaGlsZCBzcGF3bmVkIGJ5IHB0eS5mb3JrKCkgZGlkIG5vdCBoYXZlIGEgdHR5IGFzIHN0ZG91dCIpCisgICAgICAgICAgICBlbGlmIHJlcyAhPSA0OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicHR5LmZvcmsoKSBmYWlsZWQgZm9yIHVua25vd24gcmVhc29ucy4iKQorCisgICAgICAgICAgICAjI2RlYnVnKCJSZWFkaW5nIGZyb20gbWFzdGVyX2ZkIG5vdyB0aGF0IHRoZSBjaGlsZCBoYXMgZXhpdGVkIikKKyAgICAgICAgICAgICMjdHJ5OgorICAgICAgICAgICAgIyMgICAgczEgPSBvcy5yZWFkKG1hc3Rlcl9mZCwgMTAyNCkKKyAgICAgICAgICAgICMjZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgIyMgICAgcGFzcworICAgICAgICAgICAgIyNlbHNlOgorICAgICAgICAgICAgIyMgICAgcmFpc2UgVGVzdEZhaWxlZCgiUmVhZCBmcm9tIG1hc3Rlcl9mZCBkaWQgbm90IHJhaXNlIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgb3MuY2xvc2UobWFzdGVyX2ZkKQorCisgICAgICAgICMgcHR5LmZvcmsoKSBwYXNzZWQuCisKKworY2xhc3MgU21hbGxQdHlUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGhlc2UgdGVzdHMgZG9uJ3Qgc3Bhd24gY2hpbGRyZW4gb3IgaGFuZy4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vcmlnX3N0ZGluX2ZpbGVubyA9IHB0eS5TVERJTl9GSUxFTk8KKyAgICAgICAgc2VsZi5vcmlnX3N0ZG91dF9maWxlbm8gPSBwdHkuU1RET1VUX0ZJTEVOTworICAgICAgICBzZWxmLm9yaWdfcHR5X3NlbGVjdCA9IHB0eS5zZWxlY3QKKyAgICAgICAgc2VsZi5mZHMgPSBbXSAgIyBBIGxpc3Qgb2YgZmlsZSBkZXNjcmlwdG9ycyB0byBjbG9zZS4KKyAgICAgICAgc2VsZi5zZWxlY3RfcmZkc19sZW5ndGhzID0gW10KKyAgICAgICAgc2VsZi5zZWxlY3RfcmZkc19yZXN1bHRzID0gW10KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgcHR5LlNURElOX0ZJTEVOTyA9IHNlbGYub3JpZ19zdGRpbl9maWxlbm8KKyAgICAgICAgcHR5LlNURE9VVF9GSUxFTk8gPSBzZWxmLm9yaWdfc3Rkb3V0X2ZpbGVubworICAgICAgICBwdHkuc2VsZWN0ID0gc2VsZi5vcmlnX3B0eV9zZWxlY3QKKyAgICAgICAgZm9yIGZkIGluIHNlbGYuZmRzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBfcGlwZShzZWxmKToKKyAgICAgICAgcGlwZV9mZHMgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5mZHMuZXh0ZW5kKHBpcGVfZmRzKQorICAgICAgICByZXR1cm4gcGlwZV9mZHMKKworICAgIGRlZiBfbW9ja19zZWxlY3Qoc2VsZiwgcmZkcywgd2ZkcywgeGZkcyk6CisgICAgICAgICMgVGhpcyB3aWxsIHJhaXNlIEluZGV4RXJyb3Igd2hlbiBubyBtb3JlIGV4cGVjdGVkIGNhbGxzIGV4aXN0LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VsZWN0X3JmZHNfbGVuZ3Rocy5wb3AoMCksIGxlbihyZmRzKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VsZWN0X3JmZHNfcmVzdWx0cy5wb3AoMCksIFtdLCBbXQorCisgICAgZGVmIHRlc3RfX2NvcHlfdG9fZWFjaChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGUgbm9ybWFsIGRhdGEgY2FzZSBvbiBib3RoIG1hc3Rlcl9mZCBhbmQgc3RkaW4uIiIiCisgICAgICAgIHJlYWRfZnJvbV9zdGRvdXRfZmQsIG1vY2tfc3Rkb3V0X2ZkID0gc2VsZi5fcGlwZSgpCisgICAgICAgIHB0eS5TVERPVVRfRklMRU5PID0gbW9ja19zdGRvdXRfZmQKKyAgICAgICAgbW9ja19zdGRpbl9mZCwgd3JpdGVfdG9fc3RkaW5fZmQgPSBzZWxmLl9waXBlKCkKKyAgICAgICAgcHR5LlNURElOX0ZJTEVOTyA9IG1vY2tfc3RkaW5fZmQKKyAgICAgICAgc29ja2V0cGFpciA9IHNvY2tldC5zb2NrZXRwYWlyKCkKKyAgICAgICAgbWFzdGVycyA9IFtzLmZpbGVubygpIGZvciBzIGluIHNvY2tldHBhaXJdCisgICAgICAgIHNlbGYuZmRzLmV4dGVuZChtYXN0ZXJzKQorCisgICAgICAgICMgRmVlZCBkYXRhLiAgU21hbGxlciB0aGFuIFBJUEVCVUYuICBUaGVzZSB3cml0ZXMgd2lsbCBub3QgYmxvY2suCisgICAgICAgIG9zLndyaXRlKG1hc3RlcnNbMV0sIGInZnJvbSBtYXN0ZXInKQorICAgICAgICBvcy53cml0ZSh3cml0ZV90b19zdGRpbl9mZCwgYidmcm9tIHN0ZGluJykKKworICAgICAgICAjIEV4cGVjdCB0d28gc2VsZWN0IGNhbGxzLCB0aGUgbGFzdCBvbmUgd2lsbCBjYXVzZSBJbmRleEVycm9yCisgICAgICAgIHB0eS5zZWxlY3QgPSBzZWxmLl9tb2NrX3NlbGVjdAorICAgICAgICBzZWxmLnNlbGVjdF9yZmRzX2xlbmd0aHMuYXBwZW5kKDIpCisgICAgICAgIHNlbGYuc2VsZWN0X3JmZHNfcmVzdWx0cy5hcHBlbmQoW21vY2tfc3RkaW5fZmQsIG1hc3RlcnNbMF1dKQorICAgICAgICBzZWxmLnNlbGVjdF9yZmRzX2xlbmd0aHMuYXBwZW5kKDIpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHB0eS5fY29weShtYXN0ZXJzWzBdKQorCisgICAgICAgICMgVGVzdCB0aGF0IHRoZSByaWdodCBkYXRhIHdlbnQgdG8gdGhlIHJpZ2h0IHBsYWNlcy4KKyAgICAgICAgcmZkcyA9IHNlbGVjdC5zZWxlY3QoW3JlYWRfZnJvbV9zdGRvdXRfZmQsIG1hc3RlcnNbMV1dLCBbXSwgW10sIDApWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3JlYWRfZnJvbV9zdGRvdXRfZmQsIG1hc3RlcnNbMV1dLCByZmRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQocmVhZF9mcm9tX3N0ZG91dF9mZCwgMjApLCBiJ2Zyb20gbWFzdGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5yZWFkKG1hc3RlcnNbMV0sIDIwKSwgYidmcm9tIHN0ZGluJykKKworICAgIGRlZiB0ZXN0X19jb3B5X2VvZl9vbl9hbGwoc2VsZik6CisgICAgICAgICIiIlRlc3QgdGhlIGVtcHR5IHJlYWQgRU9GIGNhc2Ugb24gYm90aCBtYXN0ZXJfZmQgYW5kIHN0ZGluLiIiIgorICAgICAgICByZWFkX2Zyb21fc3Rkb3V0X2ZkLCBtb2NrX3N0ZG91dF9mZCA9IHNlbGYuX3BpcGUoKQorICAgICAgICBwdHkuU1RET1VUX0ZJTEVOTyA9IG1vY2tfc3Rkb3V0X2ZkCisgICAgICAgIG1vY2tfc3RkaW5fZmQsIHdyaXRlX3RvX3N0ZGluX2ZkID0gc2VsZi5fcGlwZSgpCisgICAgICAgIHB0eS5TVERJTl9GSUxFTk8gPSBtb2NrX3N0ZGluX2ZkCisgICAgICAgIHNvY2tldHBhaXIgPSBzb2NrZXQuc29ja2V0cGFpcigpCisgICAgICAgIG1hc3RlcnMgPSBbcy5maWxlbm8oKSBmb3IgcyBpbiBzb2NrZXRwYWlyXQorICAgICAgICBzZWxmLmZkcy5leHRlbmQobWFzdGVycykKKworICAgICAgICBvcy5jbG9zZShtYXN0ZXJzWzFdKQorICAgICAgICBzb2NrZXRwYWlyWzFdLmNsb3NlKCkKKyAgICAgICAgb3MuY2xvc2Uod3JpdGVfdG9fc3RkaW5fZmQpCisKKyAgICAgICAgIyBFeHBlY3QgdHdvIHNlbGVjdCBjYWxscywgdGhlIGxhc3Qgb25lIHdpbGwgY2F1c2UgSW5kZXhFcnJvcgorICAgICAgICBwdHkuc2VsZWN0ID0gc2VsZi5fbW9ja19zZWxlY3QKKyAgICAgICAgc2VsZi5zZWxlY3RfcmZkc19sZW5ndGhzLmFwcGVuZCgyKQorICAgICAgICBzZWxmLnNlbGVjdF9yZmRzX3Jlc3VsdHMuYXBwZW5kKFttb2NrX3N0ZGluX2ZkLCBtYXN0ZXJzWzBdXSkKKyAgICAgICAgIyBXZSBleHBlY3QgdGhhdCBib3RoIGZkcyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgZmRzIGxpc3QgYXMgdGhleQorICAgICAgICAjIGJvdGggZW5jb3VudGVyZWQgYW4gRU9GIGJlZm9yZSB0aGUgc2Vjb25kIHNlbGVjdCBjYWxsLgorICAgICAgICBzZWxmLnNlbGVjdF9yZmRzX2xlbmd0aHMuYXBwZW5kKDApCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHB0eS5fY29weShtYXN0ZXJzWzBdKQorCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICBydW5fdW5pdHRlc3QoU21hbGxQdHlUZXN0cywgUHR5VGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHdkLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHdkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NjE2MWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9wd2QucHkKQEAgLTAsMCArMSwxMDkgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworcHdkID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3B3ZCcpCisKK2NsYXNzIFB3ZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdmFsdWVzKHNlbGYpOgorICAgICAgICBlbnRyaWVzID0gcHdkLmdldHB3YWxsKCkKKyAgICAgICAgZW50cmllc2J5bmFtZSA9IHt9CisgICAgICAgIGVudHJpZXNieXVpZCA9IHt9CisKKyAgICAgICAgZm9yIGUgaW4gZW50cmllczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGUpLCA3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlWzBdLCBlLnB3X25hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5wd19uYW1lLCBiYXNlc3RyaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlWzFdLCBlLnB3X3Bhc3N3ZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLnB3X3Bhc3N3ZCwgYmFzZXN0cmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZVsyXSwgZS5wd191aWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5wd191aWQsIChpbnQsIGxvbmcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlWzNdLCBlLnB3X2dpZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLnB3X2dpZCwgKGludCwgbG9uZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVbNF0sIGUucHdfZ2Vjb3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5wd19nZWNvcywgYmFzZXN0cmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZVs1XSwgZS5wd19kaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5wd19kaXIsIGJhc2VzdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVbNl0sIGUucHdfc2hlbGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5wd19zaGVsbCwgYmFzZXN0cmluZykKKworICAgICAgICAgICAgIyBUaGUgZm9sbG93aW5nIHdvbid0IHdvcmssIGJlY2F1c2Ugb2YgZHVwbGljYXRlIGVudHJpZXMKKyAgICAgICAgICAgICMgZm9yIG9uZSB1aWQKKyAgICAgICAgICAgICMgICAgc2VsZi5hc3NlcnRFcXVhbChwd2QuZ2V0cHd1aWQoZS5wd191aWQpLCBlKQorICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIHRoaXMgY29sbGVjdCBhbGwgZW50cmllcyBmb3Igb25lIHVpZAorICAgICAgICAgICAgIyBhbmQgY2hlY2sgYWZ0ZXJ3YXJkcworICAgICAgICAgICAgZW50cmllc2J5bmFtZS5zZXRkZWZhdWx0KGUucHdfbmFtZSwgW10pLmFwcGVuZChlKQorICAgICAgICAgICAgZW50cmllc2J5dWlkLnNldGRlZmF1bHQoZS5wd191aWQsIFtdKS5hcHBlbmQoZSkKKworICAgICAgICBpZiBsZW4oZW50cmllcykgPiAxMDAwOiAgIyBIdWdlIHBhc3N3ZCBmaWxlIChOSVM/KSAtLSBza2lwIHRoZSByZXN0CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIGNoZWNrIHdoZXRoZXIgdGhlIGVudHJ5IHJldHVybmVkIGJ5IGdldHB3dWlkKCkKKyAgICAgICAgIyBmb3IgZWFjaCB1aWQgaXMgYW1vbmcgdGhvc2UgZnJvbSBnZXRwd2FsbCgpIGZvciB0aGlzIHVpZAorICAgICAgICBmb3IgZSBpbiBlbnRyaWVzOgorICAgICAgICAgICAgaWYgbm90IGVbMF0gb3IgZVswXSA9PSAnKyc6CisgICAgICAgICAgICAgICAgY29udGludWUgIyBza2lwIE5JUyBlbnRyaWVzIGV0Yy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocHdkLmdldHB3bmFtKGUucHdfbmFtZSksIGVudHJpZXNieW5hbWVbZS5wd19uYW1lXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocHdkLmdldHB3dWlkKGUucHdfdWlkKSwgZW50cmllc2J5dWlkW2UucHdfdWlkXSkKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwd2QuZ2V0cHd1aWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHdkLmdldHB3dWlkLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHB3ZC5nZXRwd25hbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwd2QuZ2V0cHduYW0sIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHB3ZC5nZXRwd2FsbCwgNDIpCisKKyAgICAgICAgIyB0cnkgdG8gZ2V0IHNvbWUgZXJyb3JzCisgICAgICAgIGJ5bmFtZXMgPSB7fQorICAgICAgICBieXVpZHMgPSB7fQorICAgICAgICBmb3IgKG4sIHAsIHUsIGcsIGdlY29zLCBkLCBzKSBpbiBwd2QuZ2V0cHdhbGwoKToKKyAgICAgICAgICAgIGJ5bmFtZXNbbl0gPSB1CisgICAgICAgICAgICBieXVpZHNbdV0gPSBuCisKKyAgICAgICAgYWxsbmFtZXMgPSBieW5hbWVzLmtleXMoKQorICAgICAgICBuYW1laSA9IDAKKyAgICAgICAgZmFrZW5hbWUgPSBhbGxuYW1lc1tuYW1laV0KKyAgICAgICAgd2hpbGUgZmFrZW5hbWUgaW4gYnluYW1lczoKKyAgICAgICAgICAgIGNoYXJzID0gbGlzdChmYWtlbmFtZSkKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4oY2hhcnMpKToKKyAgICAgICAgICAgICAgICBpZiBjaGFyc1tpXSA9PSAneic6CisgICAgICAgICAgICAgICAgICAgIGNoYXJzW2ldID0gJ0EnCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxpZiBjaGFyc1tpXSA9PSAnWic6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY2hhcnNbaV0gPSBjaHIob3JkKGNoYXJzW2ldKSArIDEpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5hbWVpID0gbmFtZWkgKyAxCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmYWtlbmFtZSA9IGFsbG5hbWVzW25hbWVpXQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIHNob3VsZCBuZXZlciBoYXBwZW4uLi4gaWYgc28sIGp1c3QgZm9yZ2V0IGl0CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmYWtlbmFtZSA9ICcnLmpvaW4oY2hhcnMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHB3ZC5nZXRwd25hbSwgZmFrZW5hbWUpCisKKyAgICAgICAgIyBJbiBzb21lIGNhc2VzLCBieXVpZHMgaXNuJ3QgYSBjb21wbGV0ZSBsaXN0IG9mIGFsbCB1c2VycyBpbiB0aGUKKyAgICAgICAgIyBzeXN0ZW0sIHNvIGlmIHdlIHRyeSB0byBwaWNrIGEgdmFsdWUgbm90IGluIGJ5dWlkcyAodmlhIGEgcGVydHVyYmluZworICAgICAgICAjIGxvb3AsIHNheSksIHB3ZC5nZXRwd3VpZCgpIG1pZ2h0IHN0aWxsIGJlIGFibGUgdG8gZmluZCBkYXRhIGZvciB0aGF0CisgICAgICAgICMgdWlkLiBVc2luZyBzeXMubWF4aW50IG1heSBwcm92b2tlIHRoZSBzYW1lIHByb2JsZW1zLCBidXQgaG9wZWZ1bGx5CisgICAgICAgICMgaXQgd2lsbCBiZSBhIG1vcmUgcmVwZWF0YWJsZSBmYWlsdXJlLgorICAgICAgICBmYWtldWlkID0gc3lzLm1heGludAorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGZha2V1aWQsIGJ5dWlkcykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHB3ZC5nZXRwd3VpZCwgZmFrZXVpZCkKKworICAgICAgICAjIC0xIHNob3VsZG4ndCBiZSBhIHZhbGlkIHVpZCBiZWNhdXNlIGl0IGhhcyBhIHNwZWNpYWwgbWVhbmluZyBpbiBtYW55CisgICAgICAgICMgdWlkLXJlbGF0ZWQgZnVuY3Rpb25zCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBwd2QuZ2V0cHd1aWQsIC0xKQorICAgICAgICAjIHNob3VsZCBiZSBvdXQgb2YgdWlkX3QgcmFuZ2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHB3ZC5nZXRwd3VpZCwgMioqMTI4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcHdkLmdldHB3dWlkLCAtMioqMTI4KQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChQd2RUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9weTNrd2Fybi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3B5M2t3YXJuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZmQ4YTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9weTNrd2Fybi5weQpAQCAtMCwwICsxLDQyNiBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjaGVja19weTNrX3dhcm5pbmdzLCBDbGVhbkltcG9ydCwgcnVuX3VuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKKworaWYgbm90IHN5cy5weTNrd2FybmluZzoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnJXMgbXVzdCBiZSBydW4gd2l0aCB0aGUgLTMgZmxhZycgJSBfX25hbWVfXykKKwordHJ5OgorICAgIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IF9fd2FybmluZ3JlZ2lzdHJ5X18gYXMgX3JlZ2lzdHJ5CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZGVmIGNoZWNrX2RlcHJlY2F0ZWRfbW9kdWxlKG1vZHVsZV9uYW1lKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCitlbHNlOgorICAgIHBhc3Rfd2FybmluZ3MgPSBfcmVnaXN0cnkua2V5cygpCisgICAgZGVsIF9yZWdpc3RyeQorICAgIGRlZiBjaGVja19kZXByZWNhdGVkX21vZHVsZShtb2R1bGVfbmFtZSk6CisgICAgICAgICIiIkxvb2t1cCB0aGUgcGFzdCB3YXJuaW5ncyBmb3IgbW9kdWxlIGFscmVhZHkgbG9hZGVkIHVzaW5nCisgICAgICAgIHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKC4uLiwgZGVwcmVjYXRlZD1UcnVlKQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGFueShtb2R1bGVfbmFtZSBpbiBtc2cgYW5kICcgcmVtb3ZlZCcgaW4gbXNnCisgICAgICAgICAgICAgICAgICAgYW5kIGlzc3ViY2xhc3MoY2xzLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgICAgYW5kICgnIG1vZHVsZScgaW4gbXNnIG9yICcgcGFja2FnZScgaW4gbXNnKQorICAgICAgICAgICAgICAgICAgIGZvciAobXNnLCBjbHMsIGxpbmUpIGluIHBhc3Rfd2FybmluZ3MpCisKK2RlZiByZXNldF9tb2R1bGVfcmVnaXN0cnkobW9kdWxlKToKKyAgICB0cnk6CisgICAgICAgIHJlZ2lzdHJ5ID0gbW9kdWxlLl9fd2FybmluZ3JlZ2lzdHJ5X18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICByZWdpc3RyeS5jbGVhcigpCisKK2NsYXNzIFRlc3RQeTNLV2FybmluZ3ModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGFzc2VydFdhcm5pbmcoc2VsZiwgXywgd2FybmluZywgZXhwZWN0ZWRfbWVzc2FnZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHdhcm5pbmcubWVzc2FnZSksIGV4cGVjdGVkX21lc3NhZ2UpCisKKyAgICBkZWYgYXNzZXJ0Tm9XYXJuaW5nKHNlbGYsIF8sIHJlY29yZGVyKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVjb3JkZXIud2FybmluZ3MpLCAwKQorCisgICAgZGVmIHRlc3RfYmFja3F1b3RlKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICdiYWNrcXVvdGUgbm90IHN1cHBvcnRlZCBpbiAzLng7IHVzZSByZXByKCknCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygoZXhwZWN0ZWQsIFN5bnRheFdhcm5pbmcpKToKKyAgICAgICAgICAgIGV4ZWMgImAyYCIgaW4ge30KKworICAgIGRlZiB0ZXN0X3BhcmVuX2FyZ19uYW1lcyhzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAncGFyZW50aGVzaXplZCBhcmd1bWVudCBuYW1lcyBhcmUgaW52YWxpZCBpbiAzLngnCisgICAgICAgIGRlZiBjaGVjayhzKToKKyAgICAgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygoZXhwZWN0ZWQsIFN5bnRheFdhcm5pbmcpKToKKyAgICAgICAgICAgICAgICBleGVjIHMgaW4ge30KKyAgICAgICAgY2hlY2soImRlZiBmKCh4KSk6IHBhc3MiKQorICAgICAgICBjaGVjaygiZGVmIGYoKCgoeCkpKSwgKHkpKTogcGFzcyIpCisgICAgICAgIGNoZWNrKCJkZWYgZigoeCksICgoKHkpKSksIG09MzIpOiBwYXNzIikKKyAgICAgICAgIyBTb21ldGhpbmcgbGlrZSBkZWYgZigoYSwgKGIpKSk6IHBhc3Mgd2lsbCByYWlzZSB0aGUgdHVwbGUKKyAgICAgICAgIyB1bnBhY2tpbmcgd2FybmluZy4KKworICAgIGRlZiB0ZXN0X2ZvcmJpZGRlbl9uYW1lcyhzZWxmKToKKyAgICAgICAgIyBTbyB3ZSBkb24ndCBzY3JldyB1cCBvdXIgZ2xvYmFscworICAgICAgICBkZWYgc2FmZV9leGVjKGV4cHIpOgorICAgICAgICAgICAgZGVmIGYoKiprd2FyZ3MpOiBwYXNzCisgICAgICAgICAgICBleGVjIGV4cHIgaW4geydmJyA6IGZ9CisKKyAgICAgICAgdGVzdHMgPSBbKCJUcnVlIiwgImFzc2lnbm1lbnQgdG8gVHJ1ZSBvciBGYWxzZSBpcyBmb3JiaWRkZW4gaW4gMy54IiksCisgICAgICAgICAgICAgICAgICgiRmFsc2UiLCAiYXNzaWdubWVudCB0byBUcnVlIG9yIEZhbHNlIGlzIGZvcmJpZGRlbiBpbiAzLngiKSwKKyAgICAgICAgICAgICAgICAgKCJub25sb2NhbCIsICJub25sb2NhbCBpcyBhIGtleXdvcmQgaW4gMy54IildCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygoJycsIFN5bnRheFdhcm5pbmcpKSBhcyB3OgorICAgICAgICAgICAgZm9yIGtleXdvcmQsIGV4cGVjdGVkIGluIHRlc3RzOgorICAgICAgICAgICAgICAgIHNhZmVfZXhlYygiezB9ID0gRmFsc2UiLmZvcm1hdChrZXl3b3JkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzYWZlX2V4ZWMoIm9iai57MH0gPSBUcnVlIi5mb3JtYXQoa2V5d29yZCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgICAgICBzYWZlX2V4ZWMoImRlZiB7MH0oKTogcGFzcyIuZm9ybWF0KGtleXdvcmQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgICAgICBzYWZlX2V4ZWMoImNsYXNzIHswfTogcGFzcyIuZm9ybWF0KGtleXdvcmQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgICAgICBzYWZlX2V4ZWMoImRlZiBmKHswfT00Myk6IHBhc3MiLmZvcm1hdChrZXl3b3JkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgdy5yZXNldCgpCisKKworICAgIGRlZiB0ZXN0X3R5cGVfaW5lcXVhbGl0eV9jb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAndHlwZSBpbmVxdWFsaXR5IGNvbXBhcmlzb25zIG5vdCBzdXBwb3J0ZWQgaW4gMy54JworICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGludCA8IHN0ciwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyh0eXBlIDwgb2JqZWN0LCB3LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X29iamVjdF9pbmVxdWFsaXR5X2NvbXBhcmlzb25zKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICdjb21wYXJpbmcgdW5lcXVhbCB0eXBlcyBub3Qgc3VwcG9ydGVkIGluIDMueCcKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhzdHIgPCBbXSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhvYmplY3QoKSA8ICgxLCAyKSwgdywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9kaWN0X2luZXF1YWxpdHlfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gJ2RpY3QgaW5lcXVhbGl0eSBjb21wYXJpc29ucyBub3Qgc3VwcG9ydGVkIGluIDMueCcKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyh7fSA8IHsyOjN9LCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKHt9IDw9IHt9LCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKHt9ID4gezI6M30sIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoezI6M30gPj0ge30sIHcsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfY2VsbF9pbmVxdWFsaXR5X2NvbXBhcmlzb25zKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICdjZWxsIGNvbXBhcmlzb25zIG5vdCBzdXBwb3J0ZWQgaW4gMy54JworICAgICAgICBkZWYgZih4KToKKyAgICAgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgICAgIHJldHVybiBnCisgICAgICAgIGNlbGwwLCA9IGYoMCkuZnVuY19jbG9zdXJlCisgICAgICAgIGNlbGwxLCA9IGYoMSkuZnVuY19jbG9zdXJlCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoY2VsbDAgPT0gY2VsbDEsIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoY2VsbDAgPCBjZWxsMSwgdywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9jb2RlX2luZXF1YWxpdHlfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gJ2NvZGUgaW5lcXVhbGl0eSBjb21wYXJpc29ucyBub3Qgc3VwcG9ydGVkIGluIDMueCcKKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBnKHgpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGYuZnVuY19jb2RlIDwgZy5mdW5jX2NvZGUsIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoZi5mdW5jX2NvZGUgPD0gZy5mdW5jX2NvZGUsIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoZi5mdW5jX2NvZGUgPj0gZy5mdW5jX2NvZGUsIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoZi5mdW5jX2NvZGUgPiBnLmZ1bmNfY29kZSwgdywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9idWlsdGluX2Z1bmN0aW9uX29yX21ldGhvZF9jb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAoJ2J1aWx0aW5fZnVuY3Rpb25fb3JfbWV0aG9kICcKKyAgICAgICAgICAgICAgICAgICAgJ29yZGVyIGNvbXBhcmlzb25zIG5vdCBzdXBwb3J0ZWQgaW4gMy54JykKKyAgICAgICAgZnVuYyA9IGV2YWwKKyAgICAgICAgbWV0aCA9IHt9LmdldAorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGZ1bmMgPCBtZXRoLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGZ1bmMgPiBtZXRoLCB3LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKG1ldGggPD0gZnVuYywgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhtZXRoID49IGZ1bmMsIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vV2FybmluZyhtZXRoID09IGZ1bmMsIHcpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vV2FybmluZyhtZXRoICE9IGZ1bmMsIHcpCisgICAgICAgICAgICBsYW0gPSBsYW1iZGEgeDogeAorICAgICAgICAgICAgc2VsZi5hc3NlcnROb1dhcm5pbmcobGFtID09IGZ1bmMsIHcpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vV2FybmluZyhsYW0gIT0gZnVuYywgdykKKworICAgIGRlZiB0ZXN0X2ZyYW1lX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHRlbXBsYXRlID0gIiVzIGhhcyBiZWVuIHJlbW92ZWQgaW4gMy54IgorICAgICAgICBmID0gc3lzLl9nZXRmcmFtZSgwKQorICAgICAgICBmb3IgYXR0ciBpbiAoImZfZXhjX3RyYWNlYmFjayIsICJmX2V4Y192YWx1ZSIsICJmX2V4Y190eXBlIik6CisgICAgICAgICAgICBleHBlY3RlZCA9IHRlbXBsYXRlICUgYXR0cgorICAgICAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoZ2V0YXR0cihmLCBhdHRyKSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKHNldGF0dHIoZiwgYXR0ciwgTm9uZSksIHcsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3Rfc29ydF9jbXBfYXJnKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICJ0aGUgY21wIGFyZ3VtZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gMy54IgorICAgICAgICBsc3QgPSByYW5nZSg1KQorICAgICAgICBjbXAgPSBsYW1iZGEgeCx5OiAtMQorCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcobHN0LnNvcnQoY21wPWNtcCksIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoc29ydGVkKGxzdCwgY21wPWNtcCksIHcsIGV4cGVjdGVkKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcobHN0LnNvcnQoY21wKSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhzb3J0ZWQobHN0LCBjbXApLCB3LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3N5c19leGNfY2xlYXIoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gJ3N5cy5leGNfY2xlYXIoKSBub3Qgc3VwcG9ydGVkIGluIDMueDsgdXNlIGV4Y2VwdCBjbGF1c2VzJworICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKHN5cy5leGNfY2xlYXIoKSwgdywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9tZXRob2RzX21lbWJlcnMoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gJ19fbWVtYmVyc19fIGFuZCBfX21ldGhvZHNfXyBub3Qgc3VwcG9ydGVkIGluIDMueCcKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIF9fbWV0aG9kc19fID0gWydhJ10KKyAgICAgICAgICAgIF9fbWVtYmVyc19fID0gWydiJ10KKyAgICAgICAgYyA9IEMoKQorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGRpcihjKSwgdywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zb2Z0c3BhY2Uoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gJ2ZpbGUuc29mdHNwYWNlIG5vdCBzdXBwb3J0ZWQgaW4gMy54JworICAgICAgICB3aXRoIGZpbGUoX19maWxlX18pIGFzIGY6CisgICAgICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhmLnNvZnRzcGFjZSwgdywgZXhwZWN0ZWQpCisgICAgICAgICAgICBkZWYgc2V0KCk6CisgICAgICAgICAgICAgICAgZi5zb2Z0c3BhY2UgPSAwCisgICAgICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhzZXQoKSwgdywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zbGljZV9tZXRob2RzKHNlbGYpOgorICAgICAgICBjbGFzcyBTcGFtKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsIGksIGopOiBwYXNzCisgICAgICAgICAgICBkZWYgX19zZXRzbGljZV9fKHNlbGYsIGksIGosIHdoYXQpOiBwYXNzCisgICAgICAgICAgICBkZWYgX19kZWxzbGljZV9fKHNlbGYsIGksIGopOiBwYXNzCisgICAgICAgIGNsYXNzIEVnZzoKKyAgICAgICAgICAgIGRlZiBfX2dldHNsaWNlX18oc2VsZiwgaSwgaCk6IHBhc3MKKyAgICAgICAgICAgIGRlZiBfX3NldHNsaWNlX18oc2VsZiwgaSwgaiwgd2hhdCk6IHBhc3MKKyAgICAgICAgICAgIGRlZiBfX2RlbHNsaWNlX18oc2VsZiwgaSwgaik6IHBhc3MKKworICAgICAgICBleHBlY3RlZCA9ICJpbiAzLngsIF9fezB9c2xpY2VfXyBoYXMgYmVlbiByZW1vdmVkOyB1c2UgX197MH1pdGVtX18iCisKKyAgICAgICAgZm9yIG9iaiBpbiAoU3BhbSgpLCBFZ2coKSk6CisgICAgICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhvYmpbMToyXSwgdywgZXhwZWN0ZWQuZm9ybWF0KCdnZXQnKSkKKyAgICAgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgICAgICBkZWwgb2JqWzM6NF0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywgZXhwZWN0ZWQuZm9ybWF0KCdkZWwnKSkKKyAgICAgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgICAgICBvYmpbNDo1XSA9ICJlZ2dzIgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybmluZyhOb25lLCB3LCBleHBlY3RlZC5mb3JtYXQoJ3NldCcpKQorCisgICAgZGVmIHRlc3RfdHVwbGVfcGFyYW1ldGVyX3VucGFja2luZyhzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAidHVwbGUgcGFyYW1ldGVyIHVucGFja2luZyBoYXMgYmVlbiByZW1vdmVkIGluIDMueCIKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKChleHBlY3RlZCwgU3ludGF4V2FybmluZykpOgorICAgICAgICAgICAgZXhlYyAiZGVmIGYoKGEsIGIpKTogcGFzcyIKKworICAgIGRlZiB0ZXN0X2J1ZmZlcihzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAnYnVmZmVyKCkgbm90IHN1cHBvcnRlZCBpbiAzLngnCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoYnVmZmVyKCdhJyksIHcsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZmlsZV94cmVhZGxpbmVzKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICgiZi54cmVhZGxpbmVzKCkgbm90IHN1cHBvcnRlZCBpbiAzLngsICIKKyAgICAgICAgICAgICAgICAgICAgInRyeSAnZm9yIGxpbmUgaW4gZicgaW5zdGVhZCIpCisgICAgICAgIHdpdGggZmlsZShfX2ZpbGVfXykgYXMgZjoKKyAgICAgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKGYueHJlYWRsaW5lcygpLCB3LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2hhc2hfaW5oZXJpdGFuY2Uoc2VsZik6CisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICAjIFdpdGggb2JqZWN0IGFzIHRoZSBiYXNlIGNsYXNzCisgICAgICAgICAgICBjbGFzcyBXYXJuT25seUNtcChvYmplY3QpOgorICAgICAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKTogcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDApCisgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgIGNsYXNzIFdhcm5Pbmx5RXEob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKTogcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywKKyAgICAgICAgICAgICAgICAgIk92ZXJyaWRpbmcgX19lcV9fIGJsb2NrcyBpbmhlcml0YW5jZSBvZiBfX2hhc2hfXyBpbiAzLngiKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBjbGFzcyBXYXJuQ21wQW5kRXEob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6IHBhc3MKKyAgICAgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKTogcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywKKyAgICAgICAgICAgICAgICAgIk92ZXJyaWRpbmcgX19lcV9fIGJsb2NrcyBpbmhlcml0YW5jZSBvZiBfX2hhc2hfXyBpbiAzLngiKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBjbGFzcyBOb1dhcm5pbmdPbmx5SGFzaChvYmplY3QpOgorICAgICAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKTogcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDApCisgICAgICAgICAgICAjIFdpdGggYW4gaW50ZXJtZWRpYXRlIGNsYXNzIGluIHRoZSBoZWlyYXJjaHkKKyAgICAgICAgICAgIGNsYXNzIERlZmluZXNBbGxUaHJlZShvYmplY3QpOgorICAgICAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKTogcGFzcworICAgICAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOiBwYXNzCisgICAgICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBjbGFzcyBXYXJuT25seUNtcChEZWZpbmVzQWxsVGhyZWUpOgorICAgICAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKTogcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDApCisgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgIGNsYXNzIFdhcm5Pbmx5RXEoRGVmaW5lc0FsbFRocmVlKToKKyAgICAgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKTogcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywKKyAgICAgICAgICAgICAgICAgIk92ZXJyaWRpbmcgX19lcV9fIGJsb2NrcyBpbmhlcml0YW5jZSBvZiBfX2hhc2hfXyBpbiAzLngiKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBjbGFzcyBXYXJuQ21wQW5kRXEoRGVmaW5lc0FsbFRocmVlKToKKyAgICAgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6IHBhc3MKKyAgICAgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKTogcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoTm9uZSwgdywKKyAgICAgICAgICAgICAgICAgIk92ZXJyaWRpbmcgX19lcV9fIGJsb2NrcyBpbmhlcml0YW5jZSBvZiBfX2hhc2hfXyBpbiAzLngiKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBjbGFzcyBOb1dhcm5pbmdPbmx5SGFzaChEZWZpbmVzQWxsVGhyZWUpOgorICAgICAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKTogcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDApCisKKyAgICBkZWYgdGVzdF9vcGVyYXRvcihzZWxmKToKKyAgICAgICAgZnJvbSBvcGVyYXRvciBpbXBvcnQgaXNDYWxsYWJsZSwgc2VxdWVuY2VJbmNsdWRlcworCisgICAgICAgIGNhbGxhYmxlX3dhcm4gPSAoIm9wZXJhdG9yLmlzQ2FsbGFibGUoKSBpcyBub3Qgc3VwcG9ydGVkIGluIDMueC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgaGFzYXR0cihvYmosICdfX2NhbGxfXycpLiIpCisgICAgICAgIHNlcV93YXJuID0gKCJvcGVyYXRvci5zZXF1ZW5jZUluY2x1ZGVzKCkgaXMgbm90IHN1cHBvcnRlZCAiCisgICAgICAgICAgICAgICAgICAgICJpbiAzLnguIFVzZSBvcGVyYXRvci5jb250YWlucygpLiIpCisgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5pbmcoaXNDYWxsYWJsZShzZWxmKSwgdywgY2FsbGFibGVfd2FybikKKyAgICAgICAgICAgIHcucmVzZXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuaW5nKHNlcXVlbmNlSW5jbHVkZXMocmFuZ2UoMyksIDIpLCB3LCBzZXFfd2FybikKKworCitjbGFzcyBUZXN0U3RkbGliUmVtb3ZhbHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyB0ZXN0LnRlc3RhbGwgbm90IHRlc3RlZCBhcyBpdCBleGVjdXRlcyBhbGwgdW5pdCB0ZXN0cyBhcyBhbgorICAgICMgaW1wb3J0IHNpZGUtZWZmZWN0LgorICAgIGFsbF9wbGF0Zm9ybXMgPSAoJ2F1ZGlvZGV2JywgJ2ltcHV0aWwnLCAnbXV0ZXgnLCAndXNlcicsICduZXcnLCAncmV4ZWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ0Jhc3Rpb24nLCAnY29tcGlsZXInLCAnZGlyY2FjaGUnLCAnbWltZXRvb2xzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdmcGZvcm1hdCcsICdpaG9va3MnLCAnbWhsaWInLCAnc3RhdHZmcycsICdodG1sbGliJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdzZ21sbGliJywgJ3JmYzgyMicsICdzdW5hdWRpbycpCisgICAgaW5jbHVzaXZlX3BsYXRmb3JtcyA9IHsnaXJpeCcgOiAoJ3B1cmUnLCAnQUwnLCAnYWwnLCAnQ0QnLCAnY2QnLCAnY2RkYicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NkcGxheWVyJywgJ0NMJywgJ2NsJywgJ0RFVklDRScsICdHTCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsJywgJ0VSUk5PJywgJ0ZJTEUnLCAnRkwnLCAnZmxwJywgJ2ZsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm0nLCAnR0VUJywgJ0dMV1MnLCAnaW1nZmlsZScsICdJTicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lPQ1RMJywgJ2pwZWcnLCAncGFuZWwnLCAncGFuZWxwYXJzZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWFkY2QnLCAnU1YnLCAndG9yZ2InLCAnV0FJVCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnZGFyd2luJyA6ICgnYXV0b0dJTCcsICdDYXJib24nLCAnT1NBVGVybWlub2xvZ3knLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWNnbHVlJywgJ05hdicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWFjT1Mgc2hvdWxkIChhbmQgZG9lcykgZ2l2ZSBhIFB5M2tXYXJuaW5nLCBidXQgb25lIG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGVhcmxpZXIgdGVzdHMgYWxyZWFkeSBpbXBvcnRzIHRoZSBNYWNPUyBleHRlbnNpb24gd2hpY2ggY2F1c2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhpcyB0ZXN0IHRvIGZhaWwuIERpc2FibGluZyB0aGUgdGVzdCBmb3IgJ01hY09TJyBhdm9pZHMgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNwdXJpb3VzIHRlc3QgZmFpbHVyZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIydNYWNPUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhZXBhY2snLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWV0b29scycsICdhZXR5cGVzJywgJ2FwcGxlc2luZ2xlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGxldHJhd21haW4nLCAnYXBwbGV0cnVubmVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyZ3ZlbXVsYXRvcicsICdiZ2VubG9jYXRpb25zJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Vhc3lEaWFsb2dzJywgJ21hY2Vycm9ycycsICdtYWNvc3Rvb2xzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbmRlcnRvb2xzJywgJ0ZyYW1lV29yaycsICdpYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZW5zdWl0ZW1vZHVsZScsICdpY29wZW4nLCAnbWFjcmVzb3VyY2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWluaUFFRnJhbWUnLCAncGltcCcsICdQaXhNYXBXcmFwcGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlcm1pbmFsY29tbWFuZCcsICd2aWRlb3JlYWRlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfYnVpbHRpblN1aXRlcycsICdDb2RlV2FycmlvcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHBsb3JlcicsICdGaW5kZXInLCAnTmV0c2NhcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU3RkU3VpdGVzJywgJ1N5c3RlbUV2ZW50cycsICdUZXJtaW5hbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZm1maWxlJywgJ2J1bmRsZWJ1aWxkZXInLCAnYnVpbGR0b29scycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb2xvclBpY2tlcicsICdBdWRpb19tYWMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdW5vczUnIDogKCdzdW5hdWRpb2RldicsICdTVU5BVURJT0RFVicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgb3B0aW9uYWxfbW9kdWxlcyA9ICgnYnNkZGIxODUnLCAnQ2FudmFzJywgJ2RsJywgJ2xpbnV4YXVkaW9kZXYnLCAnaW1hZ2VvcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnc3YnLCAnYnNkZGInLCAnZGJoYXNoJykKKworICAgIGRlZiBjaGVja19yZW1vdmFsKHNlbGYsIG1vZHVsZV9uYW1lLCBvcHRpb25hbD1GYWxzZSk6CisgICAgICAgICIiIk1ha2Ugc3VyZSB0aGUgc3BlY2lmaWVkIG1vZHVsZSwgd2hlbiBpbXBvcnRlZCwgcmFpc2VzIGEKKyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nIGFuZCBzcGVjaWZpZXMgaXRzZWxmIGluIHRoZSBtZXNzYWdlLiIiIgorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KG1vZHVsZV9uYW1lKSwgd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJlcnJvciIsICIuKyAobW9kdWxlfHBhY2thZ2UpIC4rIHJlbW92ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBfX25hbWVfXykKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJlcnJvciIsICIuKyByZW1vdmVkIC4rIChtb2R1bGV8cGFja2FnZSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBfX25hbWVfXykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZHVsZV9uYW1lLCBsZXZlbD0wKQorICAgICAgICAgICAgZXhjZXB0IERlcHJlY2F0aW9uV2FybmluZyBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGVfbmFtZSwgZXhjLmFyZ3NbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgd2FybmluZyBkaWRuJ3QgY29udGFpbiBtb2R1bGUgbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgbW9kdWxlX25hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgaWYgbm90IG9wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vbi1vcHRpb25hbCBtb2R1bGUgezB9IHJhaXNlZCBhbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW1wb3J0RXJyb3IuIi5mb3JtYXQobW9kdWxlX25hbWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIEZvciBleHRlbnNpb24gbW9kdWxlcywgY2hlY2sgdGhlIF9fd2FybmluZ3JlZ2lzdHJ5X18uCisgICAgICAgICAgICAgICAgIyBUaGV5IHdvbid0IHJlcnVuIHRoZWlyIGluaXQgY29kZSBldmVuIHdpdGggQ2xlYW5JbXBvcnQuCisgICAgICAgICAgICAgICAgaWYgbm90IGNoZWNrX2RlcHJlY2F0ZWRfbW9kdWxlKG1vZHVsZV9uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJEZXByZWNhdGlvbldhcm5pbmcgbm90IHJhaXNlZCBmb3IgezB9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChtb2R1bGVfbmFtZSkpCisKKyAgICBkZWYgdGVzdF9wbGF0Zm9ybV9pbmRlcGVuZGVudF9yZW1vdmFscyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgbW9kdWxlcyB0aGF0IGFyZSBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3JtcyByYWlzZQorICAgICAgICAjIHRoZSBwcm9wZXIgRGVwcmVjYXRpb25XYXJuaW5nLgorICAgICAgICBmb3IgbW9kdWxlX25hbWUgaW4gc2VsZi5hbGxfcGxhdGZvcm1zOgorICAgICAgICAgICAgc2VsZi5jaGVja19yZW1vdmFsKG1vZHVsZV9uYW1lKQorCisgICAgZGVmIHRlc3RfcGxhdGZvcm1fc3BlY2lmaWNfcmVtb3ZhbHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgcmVtb3ZhbCBvZiBwbGF0Zm9ybS1zcGVjaWZpYyBtb2R1bGVzLgorICAgICAgICBmb3IgbW9kdWxlX25hbWUgaW4gc2VsZi5pbmNsdXNpdmVfcGxhdGZvcm1zLmdldChzeXMucGxhdGZvcm0sIFtdKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcmVtb3ZhbChtb2R1bGVfbmFtZSwgb3B0aW9uYWw9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X29wdGlvbmFsX21vZHVsZV9yZW1vdmFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSByZW1vdmFsIG9mIG1vZHVsZXMgdGhhdCBtYXkgb3IgbWF5IG5vdCBiZSBidWlsdC4KKyAgICAgICAgZm9yIG1vZHVsZV9uYW1lIGluIHNlbGYub3B0aW9uYWxfbW9kdWxlczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcmVtb3ZhbChtb2R1bGVfbmFtZSwgb3B0aW9uYWw9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X29zX3BhdGhfd2FsayhzZWxmKToKKyAgICAgICAgbXNnID0gIkluIDMueCwgb3MucGF0aC53YWxrIGlzIHJlbW92ZWQgaW4gZmF2b3Igb2Ygb3Mud2Fsay4iCisgICAgICAgIGRlZiBkdW1ibyh3aGVyZSwgbmFtZXMsIGFyZ3MpOiBwYXNzCisgICAgICAgIGZvciBwYXRoX21vZCBpbiAoIm50cGF0aCIsICJtYWNwYXRoIiwgIm9zMmVteHBhdGgiLCAicG9zaXhwYXRoIik6CisgICAgICAgICAgICBtb2QgPSBfX2ltcG9ydF9fKHBhdGhfbW9kKQorICAgICAgICAgICAgcmVzZXRfbW9kdWxlX3JlZ2lzdHJ5KG1vZCkKKyAgICAgICAgICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICAgICAgbW9kLndhbGsoImNyYXNoZXJzIiwgZHVtYm8sIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Lm1lc3NhZ2UpLCBtc2cpCisKKyAgICBkZWYgdGVzdF9yZWR1Y2VfbW92ZShzZWxmKToKKyAgICAgICAgZnJvbSBvcGVyYXRvciBpbXBvcnQgYWRkCisgICAgICAgICMgcmVkdWNlIHRlc3RzIG1heSBoYXZlIGFscmVhZHkgdHJpZ2dlcmVkIHRoaXMgd2FybmluZworICAgICAgICByZXNldF9tb2R1bGVfcmVnaXN0cnkodW5pdHRlc3QuY2FzZSkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgInJlZHVjZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEZXByZWNhdGlvbldhcm5pbmcsIHJlZHVjZSwgYWRkLCByYW5nZSgxMCkpCisKKyAgICBkZWYgdGVzdF9tdXRhYmxlc3RyaW5nX3JlbW92YWwoc2VsZik6CisgICAgICAgICMgVXNlclN0cmluZy5NdXRhYmxlU3RyaW5nIGhhcyBiZWVuIHJlbW92ZWQgaW4gMy4wLgorICAgICAgICBpbXBvcnQgVXNlclN0cmluZworICAgICAgICAjIFVzZXJTdHJpbmcgdGVzdHMgbWF5IGhhdmUgYWxyZWFkeSB0cmlnZ2VyZWQgdGhpcyB3YXJuaW5nCisgICAgICAgIHJlc2V0X21vZHVsZV9yZWdpc3RyeShVc2VyU3RyaW5nKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCAiLipNdXRhYmxlU3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERlcHJlY2F0aW9uV2FybmluZywgVXNlclN0cmluZy5NdXRhYmxlU3RyaW5nKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoVGVzdFB5M0tXYXJuaW5ncywKKyAgICAgICAgICAgICAgICAgVGVzdFN0ZGxpYlJlbW92YWxzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9weV9jb21waWxlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTE5ZGEyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weQpAQCAtMCwwICsxLDU0IEBACitpbXBvcnQgaW1wCitpbXBvcnQgb3MKK2ltcG9ydCBweV9jb21waWxlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBQeUNvbXBpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHNlbGYuc291cmNlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdfdGVzdC5weScpCisgICAgICAgIHNlbGYucHljX3BhdGggPSBzZWxmLnNvdXJjZV9wYXRoICsgJ2MnCisgICAgICAgIHNlbGYuY3dkX2RyaXZlID0gb3MucGF0aC5zcGxpdGRyaXZlKG9zLmdldGN3ZCgpKVswXQorICAgICAgICAjIEluIHRoZXNlIHRlc3RzIHdlIGNvbXB1dGUgcmVsYXRpdmUgcGF0aHMuICBXaGVuIHVzaW5nIFdpbmRvd3MsIHRoZQorICAgICAgICAjIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgcGF0aCBhbmQgdGhlICdzZWxmLnNvdXJjZV9wYXRoJyBtaWdodCBiZQorICAgICAgICAjIG9uIGRpZmZlcmVudCBkcml2ZXMuICBUaGVyZWZvcmUgd2UgbmVlZCB0byBzd2l0Y2ggdG8gdGhlIGRyaXZlIHdoZXJlCisgICAgICAgICMgdGhlIHRlbXBvcmFyeSBzb3VyY2UgZmlsZSBsaXZlcy4KKyAgICAgICAgZHJpdmUgPSBvcy5wYXRoLnNwbGl0ZHJpdmUoc2VsZi5zb3VyY2VfcGF0aClbMF0KKyAgICAgICAgaWYgZHJpdmU6CisgICAgICAgICAgICBvcy5jaGRpcihkcml2ZSkKKworICAgICAgICB3aXRoIG9wZW4oc2VsZi5zb3VyY2VfcGF0aCwgJ3cnKSBhcyBmaWxlOgorICAgICAgICAgICAgZmlsZS53cml0ZSgneCA9IDEyM1xuJykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpcmVjdG9yeSkKKyAgICAgICAgaWYgc2VsZi5jd2RfZHJpdmU6CisgICAgICAgICAgICBvcy5jaGRpcihzZWxmLmN3ZF9kcml2ZSkKKworICAgIGRlZiB0ZXN0X2Fic29sdXRlX3BhdGgoc2VsZik6CisgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLnNvdXJjZV9wYXRoLCBzZWxmLnB5Y19wYXRoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5weWNfcGF0aCkpCisKKyAgICBkZWYgdGVzdF9jd2Qoc2VsZik6CisgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHNlbGYuZGlyZWN0b3J5KQorICAgICAgICBweV9jb21waWxlLmNvbXBpbGUob3MucGF0aC5iYXNlbmFtZShzZWxmLnNvdXJjZV9wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoc2VsZi5weWNfcGF0aCkpCisgICAgICAgIG9zLmNoZGlyKGN3ZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYucHljX3BhdGgpKQorCisgICAgZGVmIHRlc3RfcmVsYXRpdmVfcGF0aChzZWxmKToKKyAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG9zLnBhdGgucmVscGF0aChzZWxmLnNvdXJjZV9wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGgucmVscGF0aChzZWxmLnB5Y19wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYucHljX3BhdGgpKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChQeUNvbXBpbGVUZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHljbGJyLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHljbGJyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZGM1NTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9weWNsYnIucHkKQEAgLTAsMCArMSwyMDIgQEAKKycnJworICAgVGVzdCBjYXNlcyBmb3IgcHljbGJyLnB5CisgICBOaWNrIE1hdGhld3NvbgorJycnCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKK2ltcG9ydCBzeXMKK2Zyb20gdHlwZXMgaW1wb3J0IENsYXNzVHlwZSwgRnVuY3Rpb25UeXBlLCBNZXRob2RUeXBlLCBCdWlsdGluRnVuY3Rpb25UeXBlCitpbXBvcnQgcHljbGJyCitmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQorCitTdGF0aWNNZXRob2RUeXBlID0gdHlwZShzdGF0aWNtZXRob2QobGFtYmRhOiBOb25lKSkKK0NsYXNzTWV0aG9kVHlwZSA9IHR5cGUoY2xhc3NtZXRob2QobGFtYmRhIGM6IE5vbmUpKQorCisjIFNpbGVuY2UgUHkzayB3YXJuaW5nCitpbXBvcnRfbW9kdWxlKCdjb21tYW5kcycsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKworIyBUaGlzIG5leHQgbGluZSB0cmlnZ2VycyBhbiBlcnJvciBvbiBvbGQgdmVyc2lvbnMgb2YgcHljbGJyLgorZnJvbSBjb21tYW5kcyBpbXBvcnQgZ2V0c3RhdHVzCisKKyMgSGVyZSB3ZSB0ZXN0IHRoZSBweXRob24gY2xhc3MgYnJvd3NlciBjb2RlLgorIworIyBUaGUgbWFpbiBmdW5jdGlvbiBpbiB0aGlzIHN1aXRlLCAndGVzdE1vZHVsZScsIGNvbXBhcmVzIHRoZSBvdXRwdXQKKyMgb2YgcHljbGJyIHdpdGggdGhlIGludHJvc3BlY3RlZCBtZW1iZXJzIG9mIGEgbW9kdWxlLiAgQmVjYXVzZSBweWNsYnIKKyMgaXMgaW1wZXJmZWN0IChhcyBkZXNpZ25lZCksIHRlc3RNb2R1bGUgaXMgY2FsbGVkIHdpdGggYSBzZXQgb2YKKyMgbWVtYmVycyB0byBpZ25vcmUuCisKK2NsYXNzIFB5Y2xiclRlc3QoVGVzdENhc2UpOgorCisgICAgZGVmIGFzc2VydExpc3RFcShzZWxmLCBsMSwgbDIsIGlnbm9yZSk6CisgICAgICAgICcnJyBzdWNjZWVkIGlmZiB7bDF9IC0ge2lnbm9yZX0gPT0ge2wyfSAtIHtpZ25vcmV9ICcnJworICAgICAgICBtaXNzaW5nID0gKHNldChsMSkgXiBzZXQobDIpKSAtIHNldChpZ25vcmUpCisgICAgICAgIGlmIG1pc3Npbmc6CisgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICJsMT0lclxubDI9JXJcbmlnbm9yZT0lciIgJSAobDEsIGwyLCBpZ25vcmUpCisgICAgICAgICAgICBzZWxmLmZhaWwoIiVyIG1pc3NpbmciICUgbWlzc2luZy5wb3AoKSkKKworICAgIGRlZiBhc3NlcnRIYXNhdHRyKHNlbGYsIG9iaiwgYXR0ciwgaWdub3JlKToKKyAgICAgICAgJycnIHN1Y2NlZWQgaWZmIGhhc2F0dHIob2JqLGF0dHIpIG9yIGF0dHIgaW4gaWdub3JlLiAnJycKKyAgICAgICAgaWYgYXR0ciBpbiBpZ25vcmU6IHJldHVybgorICAgICAgICBpZiBub3QgaGFzYXR0cihvYmosIGF0dHIpOiBwcmludCAiPz8/IiwgYXR0cgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihvYmosIGF0dHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGVjdGVkIGhhc2F0dHIoJXIsICVyKScgJSAob2JqLCBhdHRyKSkKKworCisgICAgZGVmIGFzc2VydEhhc2tleShzZWxmLCBvYmosIGtleSwgaWdub3JlKToKKyAgICAgICAgJycnIHN1Y2NlZWQgaWZmIGtleSBpbiBvYmogb3Iga2V5IGluIGlnbm9yZS4gJycnCisgICAgICAgIGlmIGtleSBpbiBpZ25vcmU6IHJldHVybgorICAgICAgICBpZiBrZXkgbm90IGluIG9iajoKKyAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIioqKiIsIGtleQorICAgICAgICBzZWxmLmFzc2VydEluKGtleSwgb2JqKQorCisgICAgZGVmIGFzc2VydEVxdWFsc09ySWdub3JlZChzZWxmLCBhLCBiLCBpZ25vcmUpOgorICAgICAgICAnJycgc3VjY2VlZCBpZmYgYSA9PSBiIG9yIGEgaW4gaWdub3JlIG9yIGIgaW4gaWdub3JlICcnJworICAgICAgICBpZiBhIG5vdCBpbiBpZ25vcmUgYW5kIGIgbm90IGluIGlnbm9yZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKworICAgIGRlZiBjaGVja01vZHVsZShzZWxmLCBtb2R1bGVOYW1lLCBtb2R1bGU9Tm9uZSwgaWdub3JlPSgpKToKKyAgICAgICAgJycnIHN1Y2NlZWQgaWZmIHB5Y2xici5yZWFkbW9kdWxlX2V4KG1vZHVsZW5hbWUpIGNvcnJlc3BvbmRzCisgICAgICAgICAgICB0byB0aGUgYWN0dWFsIG1vZHVsZSBvYmplY3QsIG1vZHVsZS4gIEFueSBpZGVudGlmaWVycyBpbgorICAgICAgICAgICAgaWdub3JlIGFyZSBpZ25vcmVkLiAgIElmIG5vIG1vZHVsZSBpcyBwcm92aWRlZCwgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgICAgICBtb2R1bGUgaXMgbG9hZGVkIHdpdGggX19pbXBvcnRfXy4nJycKKworICAgICAgICBpZiBtb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgICMgSW1wb3J0IGl0LgorICAgICAgICAgICAgIyAoJzxzaWxseT4nIGlzIHRvIHdvcmsgYXJvdW5kIGFuIEFQSSBzaWxsaW5lc3MgaW4gX19pbXBvcnRfXykKKyAgICAgICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18obW9kdWxlTmFtZSwgZ2xvYmFscygpLCB7fSwgWyc8c2lsbHk+J10pCisKKyAgICAgICAgZGljdCA9IHB5Y2xici5yZWFkbW9kdWxlX2V4KG1vZHVsZU5hbWUpCisKKyAgICAgICAgZGVmIGlzbWV0aG9kKG9jbGFzcywgb2JqLCBuYW1lKToKKyAgICAgICAgICAgIGNsYXNzZGljdCA9IG9jbGFzcy5fX2RpY3RfXworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIEZ1bmN0aW9uVHlwZSk6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY2xhc3NkaWN0W25hbWVdLCBTdGF0aWNNZXRob2RUeXBlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5vdCAgaXNpbnN0YW5jZShvYmosIE1ldGhvZFR5cGUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiBvYmouaW1fc2VsZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vdCBpc2luc3RhbmNlKGNsYXNzZGljdFtuYW1lXSwgQ2xhc3NNZXRob2RUeXBlKSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmltX3NlbGYgaXMgbm90IG9jbGFzcyk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShjbGFzc2RpY3RbbmFtZV0sIEZ1bmN0aW9uVHlwZSk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAgICAgb2JqbmFtZSA9IG9iai5fX25hbWVfXworICAgICAgICAgICAgaWYgb2JqbmFtZS5zdGFydHN3aXRoKCJfXyIpIGFuZCBub3Qgb2JqbmFtZS5lbmRzd2l0aCgiX18iKToKKyAgICAgICAgICAgICAgICBvYmpuYW1lID0gIl8lcyVzIiAlIChvYmouaW1fY2xhc3MuX19uYW1lX18sIG9iam5hbWUpCisgICAgICAgICAgICByZXR1cm4gb2JqbmFtZSA9PSBuYW1lCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHRvcGxldmVsIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyBhcmUgdGhlIHNhbWUuCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBkaWN0Lml0ZW1zKCk6CisgICAgICAgICAgICBpZiBuYW1lIGluIGlnbm9yZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRIYXNhdHRyKG1vZHVsZSwgbmFtZSwgaWdub3JlKQorICAgICAgICAgICAgcHlfaXRlbSA9IGdldGF0dHIobW9kdWxlLCBuYW1lKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgcHljbGJyLkZ1bmN0aW9uKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHlfaXRlbSwgKEZ1bmN0aW9uVHlwZSwgQnVpbHRpbkZ1bmN0aW9uVHlwZSkpCisgICAgICAgICAgICAgICAgaWYgcHlfaXRlbS5fX21vZHVsZV9fICE9IG1vZHVsZU5hbWU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlICAgIyBza2lwIGZ1bmN0aW9ucyB0aGF0IGNhbWUgZnJvbSBzb21ld2hlcmUgZWxzZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlfaXRlbS5fX21vZHVsZV9fLCB2YWx1ZS5tb2R1bGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShweV9pdGVtLCAoQ2xhc3NUeXBlLCB0eXBlKSkKKyAgICAgICAgICAgICAgICBpZiBweV9pdGVtLl9fbW9kdWxlX18gIT0gbW9kdWxlTmFtZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUgICAjIHNraXAgY2xhc3NlcyB0aGF0IGNhbWUgZnJvbSBzb21ld2hlcmUgZWxzZQorCisgICAgICAgICAgICAgICAgcmVhbF9iYXNlcyA9IFtiYXNlLl9fbmFtZV9fIGZvciBiYXNlIGluIHB5X2l0ZW0uX19iYXNlc19fXQorICAgICAgICAgICAgICAgIHB5Y2xicl9iYXNlcyA9IFsgZ2V0YXR0cihiYXNlLCAnbmFtZScsIGJhc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYmFzZSBpbiB2YWx1ZS5zdXBlciBdCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxKHJlYWxfYmFzZXMsIHB5Y2xicl9iYXNlcywgaWdub3JlKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiY2xhc3M9JXMiICUgcHlfaXRlbQorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICAgICAgICAgYWN0dWFsTWV0aG9kcyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIG0gaW4gcHlfaXRlbS5fX2RpY3RfXy5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzbWV0aG9kKHB5X2l0ZW0sIGdldGF0dHIocHlfaXRlbSwgbSksIG0pOgorICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsTWV0aG9kcy5hcHBlbmQobSkKKyAgICAgICAgICAgICAgICBmb3VuZE1ldGhvZHMgPSBbXQorICAgICAgICAgICAgICAgIGZvciBtIGluIHZhbHVlLm1ldGhvZHMua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBpZiBtWzoyXSA9PSAnX18nIGFuZCBtWy0yOl0gIT0gJ19fJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kTWV0aG9kcy5hcHBlbmQoJ18nK25hbWUrbSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kTWV0aG9kcy5hcHBlbmQobSkKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXEoZm91bmRNZXRob2RzLCBhY3R1YWxNZXRob2RzLCBpZ25vcmUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlfaXRlbS5fX21vZHVsZV9fLCB2YWx1ZS5tb2R1bGUpCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHNPcklnbm9yZWQocHlfaXRlbS5fX25hbWVfXywgdmFsdWUubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlKQorICAgICAgICAgICAgICAgICAgICAjIGNhbid0IGNoZWNrIGZpbGUgb3IgbGluZW5vCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBwcmludCA+PnN5cy5zdGRlcnIsICJjbGFzcz0lcyIgJSBweV9pdGVtCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgIyBOb3cgY2hlY2sgZm9yIG1pc3Npbmcgc3R1ZmYuCisgICAgICAgIGRlZiBkZWZpbmVkX2luKGl0ZW0sIG1vZHVsZSk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW0sIENsYXNzVHlwZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uX19tb2R1bGVfXyA9PSBtb2R1bGUuX19uYW1lX18KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlbSwgRnVuY3Rpb25UeXBlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5mdW5jX2dsb2JhbHMgaXMgbW9kdWxlLl9fZGljdF9fCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyKG1vZHVsZSk6CisgICAgICAgICAgICBpdGVtID0gZ2V0YXR0cihtb2R1bGUsIG5hbWUpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW0sICAoQ2xhc3NUeXBlLCBGdW5jdGlvblR5cGUpKToKKyAgICAgICAgICAgICAgICBpZiBkZWZpbmVkX2luKGl0ZW0sIG1vZHVsZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SGFza2V5KGRpY3QsIG5hbWUsIGlnbm9yZSkKKworICAgIGRlZiB0ZXN0X2Vhc3koc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ3B5Y2xicicpCisgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ2RvY3Rlc3QnLCBpZ25vcmU9KCJEb2NUZXN0Q2FzZSIsKSkKKyAgICAgICAgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgICAgICByZmM4MjIgPSBpbXBvcnRfbW9kdWxlKCdyZmM4MjInLCBkZXByZWNhdGVkPVRydWUpCisgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ3JmYzgyMicsIHJmYzgyMikKKyAgICAgICAgc2VsZi5jaGVja01vZHVsZSgnZGlmZmxpYicpCisKKyAgICBkZWYgdGVzdF9kZWNvcmF0b3JzKHNlbGYpOgorICAgICAgICAjIFhYWDogU2VlIGNvbW1lbnQgaW4gcHljbGJyX2lucHV0LnB5IGZvciBhIHRlc3QgdGhhdCB3b3VsZCBmYWlsCisgICAgICAgICMgICAgICBpZiBpdCB3ZXJlIG5vdCBjb21tZW50ZWQgb3V0LgorICAgICAgICAjCisgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ3Rlc3QucHljbGJyX2lucHV0JykKKworICAgIGRlZiB0ZXN0X290aGVycyhzZWxmKToKKyAgICAgICAgY20gPSBzZWxmLmNoZWNrTW9kdWxlCisKKyAgICAgICAgIyBUaGVzZSB3ZXJlIG9uY2UgYWJvdXQgdGhlIDEwIGxvbmdlc3QgbW9kdWxlcworICAgICAgICBjbSgncmFuZG9tJywgaWdub3JlPSgnUmFuZG9tJywpKSAgIyBmcm9tIF9yYW5kb20gaW1wb3J0IFJhbmRvbSBhcyBDb3JlR2VuZXJhdG9yCisgICAgICAgIGNtKCdjZ2knLCBpZ25vcmU9KCdsb2cnLCkpICAgICAgIyBzZXQgd2l0aCA9IGluIG1vZHVsZQorICAgICAgICBjbSgndXJsbGliJywgaWdub3JlPSgnX0NGTnVtYmVyVG9JbnQzMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQ1N0cmluZ0Zyb21DRlN0cmluZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQ0ZTZXR1cCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRwcm94aWVzX3JlZ2lzdHJ5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3h5X2J5cGFzc19yZWdpc3RyeScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm94eV9ieXBhc3NfbWFjb3N4X3N5c2NvbmYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3Blbl9odHRwcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRwcm94aWVzX21hY29zeF9zeXNjb25mJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldHByb3hpZXNfaW50ZXJuZXRjb25maWcnLCkpICMgbm90IG9uIGFsbCBwbGF0Zm9ybXMKKyAgICAgICAgY20oJ3BpY2tsZScpCisgICAgICAgIGNtKCdhaWZjJywgaWdub3JlPSgnb3BlbmZwJywpKSAgIyBzZXQgd2l0aCA9IGluIG1vZHVsZQorICAgICAgICBjbSgnQ29va2llJykKKyAgICAgICAgY20oJ3NyZV9wYXJzZScsIGlnbm9yZT0oJ2R1bXAnLCkpICMgZnJvbSBzcmVfY29uc3RhbnRzIGltcG9ydCAqCisgICAgICAgIGNtKCdwZGInKQorICAgICAgICBjbSgncHlkb2MnKQorCisgICAgICAgICMgVGVzdHMgZm9yIG1vZHVsZXMgaW5zaWRlIHBhY2thZ2VzCisgICAgICAgIGNtKCdlbWFpbC5wYXJzZXInKQorICAgICAgICBjbSgndGVzdC50ZXN0X3B5Y2xicicpCisKKyAgICBkZWYgdGVzdF9pc3N1ZV8xNDc5OChzZWxmKToKKyAgICAgICAgIyB0ZXN0IEltcG9ydEVycm9yIGlzIHJhaXNlZCB3aGVuIHRoZSBmaXJzdCBwYXJ0IG9mIGEgZG90dGVkIG5hbWUgaXMKKyAgICAgICAgIyBub3QgYSBwYWNrYWdlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBweWNsYnIucmVhZG1vZHVsZV9leCwgJ2FzeW5jb3JlLmZvbycpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChQeWNsYnJUZXN0KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3B5ZG9jLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHlkb2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgyZDZkYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3B5ZG9jLnB5CkBAIC0wLDAgKzEsNDIzIEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBkaWZmbGliCitpbXBvcnQgX19idWlsdGluX18KK2ltcG9ydCByZQoraW1wb3J0IHB5ZG9jCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IGtleXdvcmQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHhtbC5ldHJlZQoraW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0Citmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgKAorICAgIFRFU1RGTiwgcm10cmVlLCByZWFwX2NoaWxkcmVuLCBjYXB0dXJlZF9zdGRvdXQpCisKK2Zyb20gdGVzdCBpbXBvcnQgcHlkb2NfbW9kCisKK2lmIHRlc3QudGVzdF9zdXBwb3J0LkhBVkVfRE9DU1RSSU5HUzoKKyAgICBleHBlY3RlZF9kYXRhX2RvY3N0cmluZ3MgPSAoCisgICAgICAgICdkaWN0aW9uYXJ5IGZvciBpbnN0YW5jZSB2YXJpYWJsZXMgKGlmIGRlZmluZWQpJywKKyAgICAgICAgJ2xpc3Qgb2Ygd2VhayByZWZlcmVuY2VzIHRvIHRoZSBvYmplY3QgKGlmIGRlZmluZWQpJywKKyAgICAgICAgKQorZWxzZToKKyAgICBleHBlY3RlZF9kYXRhX2RvY3N0cmluZ3MgPSAoJycsICcnKQorCitleHBlY3RlZF90ZXh0X3BhdHRlcm4gPSBcCisiIiIKK05BTUUKKyAgICB0ZXN0LnB5ZG9jX21vZCAtIFRoaXMgaXMgYSB0ZXN0IG1vZHVsZSBmb3IgdGVzdF9weWRvYworCitGSUxFCisgICAgJXMKKyVzCitDTEFTU0VTCisgICAgX19idWlsdGluX18ub2JqZWN0CisgICAgICAgIEIKKyAgICBBCitceDIwXHgyMFx4MjBceDIwCisgICAgY2xhc3MgQQorICAgICB8ICBIZWxsbyBhbmQgZ29vZGJ5ZQorICAgICB8XHgyMFx4MjAKKyAgICAgfCAgTWV0aG9kcyBkZWZpbmVkIGhlcmU6CisgICAgIHxceDIwXHgyMAorICAgICB8ICBfX2luaXRfXygpCisgICAgIHwgICAgICBXb3csIEkgaGF2ZSBubyBmdW5jdGlvbiEKK1x4MjBceDIwXHgyMFx4MjAKKyAgICBjbGFzcyBCKF9fYnVpbHRpbl9fLm9iamVjdCkKKyAgICAgfCAgRGF0YSBkZXNjcmlwdG9ycyBkZWZpbmVkIGhlcmU6CisgICAgIHxceDIwXHgyMAorICAgICB8ICBfX2RpY3RfXyVzCisgICAgIHxceDIwXHgyMAorICAgICB8ICBfX3dlYWtyZWZfXyVzCisgICAgIHxceDIwXHgyMAorICAgICB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgZGVmaW5lZCBoZXJlOgorICAgICB8XHgyMFx4MjAKKyAgICAgfCAgTk9fTUVBTklORyA9ICdlZ2dzJworCitGVU5DVElPTlMKKyAgICBkb2NfZnVuYygpCisgICAgICAgIFRoaXMgZnVuY3Rpb24gc29sdmVzIGFsbCBvZiB0aGUgd29ybGQncyBwcm9ibGVtczoKKyAgICAgICAgaHVuZ2VyCisgICAgICAgIGxhY2sgb2YgUHl0aG9uCisgICAgICAgIHdhcgorXHgyMFx4MjBceDIwXHgyMAorICAgIG5vZG9jX2Z1bmMoKQorCitEQVRBCisgICAgX19hdXRob3JfXyA9ICdCZW5qYW1pbiBQZXRlcnNvbicKKyAgICBfX2NyZWRpdHNfXyA9ICdOb2JvZHknCisgICAgX192ZXJzaW9uX18gPSAnMS4yLjMuNCcKKworVkVSU0lPTgorICAgIDEuMi4zLjQKKworQVVUSE9SCisgICAgQmVuamFtaW4gUGV0ZXJzb24KKworQ1JFRElUUworICAgIE5vYm9keQorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfdGV4dF9kYXRhX2RvY3N0cmluZ3MgPSB0dXBsZSgnXG4gICAgIHwgICAgICAnICsgcyBpZiBzIGVsc2UgJycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gZXhwZWN0ZWRfZGF0YV9kb2NzdHJpbmdzKQorCitleHBlY3RlZF9odG1sX3BhdHRlcm4gPSBcCisiIiIKKzx0YWJsZSB3aWR0aD0iMTAwJSUiIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MiBib3JkZXI9MCBzdW1tYXJ5PSJoZWFkaW5nIj4KKzx0ciBiZ2NvbG9yPSIjNzc5OWVlIj4KKzx0ZCB2YWxpZ249Ym90dG9tPiZuYnNwOzxicj4KKzxmb250IGNvbG9yPSIjZmZmZmZmIiBmYWNlPSJoZWx2ZXRpY2EsIGFyaWFsIj4mbmJzcDs8YnI+PGJpZz48YmlnPjxzdHJvbmc+PGEgaHJlZj0idGVzdC5odG1sIj48Zm9udCBjb2xvcj0iI2ZmZmZmZiI+dGVzdDwvZm9udD48L2E+LnB5ZG9jX21vZDwvc3Ryb25nPjwvYmlnPjwvYmlnPiAodmVyc2lvbiAxLjIuMy40KTwvZm9udD48L3RkCis+PHRkIGFsaWduPXJpZ2h0IHZhbGlnbj1ib3R0b20KKz48Zm9udCBjb2xvcj0iI2ZmZmZmZiIgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+PGEgaHJlZj0iLiI+aW5kZXg8L2E+PGJyPjxhIGhyZWY9ImZpbGU6JXMiPiVzPC9hPiVzPC9mb250PjwvdGQ+PC90cj48L3RhYmxlPgorICAgIDxwPjx0dD5UaGlzJm5ic3A7aXMmbmJzcDthJm5ic3A7dGVzdCZuYnNwO21vZHVsZSZuYnNwO2ZvciZuYnNwO3Rlc3RfcHlkb2M8L3R0PjwvcD4KKzxwPgorPHRhYmxlIHdpZHRoPSIxMDAlJSIgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz0yIGJvcmRlcj0wIHN1bW1hcnk9InNlY3Rpb24iPgorPHRyIGJnY29sb3I9IiNlZTc3YWEiPgorPHRkIGNvbHNwYW49MyB2YWxpZ249Ym90dG9tPiZuYnNwOzxicj4KKzxmb250IGNvbG9yPSIjZmZmZmZmIiBmYWNlPSJoZWx2ZXRpY2EsIGFyaWFsIj48YmlnPjxzdHJvbmc+Q2xhc3Nlczwvc3Ryb25nPjwvYmlnPjwvZm9udD48L3RkPjwvdHI+CitceDIwXHgyMFx4MjBceDIwCis8dHI+PHRkIGJnY29sb3I9IiNlZTc3YWEiPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3R0PjwvdGQ+PHRkPiZuYnNwOzwvdGQ+Cis8dGQgd2lkdGg9IjEwMCUlIj48ZGw+Cis8ZHQ+PGZvbnQgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+PGEgaHJlZj0iX19idWlsdGluX18uaHRtbCNvYmplY3QiPl9fYnVpbHRpbl9fLm9iamVjdDwvYT4KKzwvZm9udD48L2R0PjxkZD4KKzxkbD4KKzxkdD48Zm9udCBmYWNlPSJoZWx2ZXRpY2EsIGFyaWFsIj48YSBocmVmPSJ0ZXN0LnB5ZG9jX21vZC5odG1sI0IiPkI8L2E+Cis8L2ZvbnQ+PC9kdD48L2RsPgorPC9kZD4KKzxkdD48Zm9udCBmYWNlPSJoZWx2ZXRpY2EsIGFyaWFsIj48YSBocmVmPSJ0ZXN0LnB5ZG9jX21vZC5odG1sI0EiPkE8L2E+Cis8L2ZvbnQ+PC9kdD48L2RsPgorIDxwPgorPHRhYmxlIHdpZHRoPSIxMDAlJSIgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz0yIGJvcmRlcj0wIHN1bW1hcnk9InNlY3Rpb24iPgorPHRyIGJnY29sb3I9IiNmZmM4ZDgiPgorPHRkIGNvbHNwYW49MyB2YWxpZ249Ym90dG9tPiZuYnNwOzxicj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIiBmYWNlPSJoZWx2ZXRpY2EsIGFyaWFsIj48YSBuYW1lPSJBIj5jbGFzcyA8c3Ryb25nPkE8L3N0cm9uZz48L2E+PC9mb250PjwvdGQ+PC90cj4KK1x4MjBceDIwXHgyMFx4MjAKKzx0ciBiZ2NvbG9yPSIjZmZjOGQ4Ij48dGQgcm93c3Bhbj0yPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDs8L3R0PjwvdGQ+Cis8dGQgY29sc3Bhbj0yPjx0dD5IZWxsbyZuYnNwO2FuZCZuYnNwO2dvb2RieWU8YnI+Jm5ic3A7PC90dD48L3RkPjwvdHI+Cis8dHI+PHRkPiZuYnNwOzwvdGQ+Cis8dGQgd2lkdGg9IjEwMCUlIj5NZXRob2RzIGRlZmluZWQgaGVyZTo8YnI+Cis8ZGw+PGR0PjxhIG5hbWU9IkEtX19pbml0X18iPjxzdHJvbmc+X19pbml0X188L3N0cm9uZz48L2E+KCk8L2R0PjxkZD48dHQ+V293LCZuYnNwO0kmbmJzcDtoYXZlJm5ic3A7bm8mbmJzcDtmdW5jdGlvbiE8L3R0PjwvZGQ+PC9kbD4KKworPC90ZD48L3RyPjwvdGFibGU+IDxwPgorPHRhYmxlIHdpZHRoPSIxMDAlJSIgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz0yIGJvcmRlcj0wIHN1bW1hcnk9InNlY3Rpb24iPgorPHRyIGJnY29sb3I9IiNmZmM4ZDgiPgorPHRkIGNvbHNwYW49MyB2YWxpZ249Ym90dG9tPiZuYnNwOzxicj4KKzxmb250IGNvbG9yPSIjMDAwMDAwIiBmYWNlPSJoZWx2ZXRpY2EsIGFyaWFsIj48YSBuYW1lPSJCIj5jbGFzcyA8c3Ryb25nPkI8L3N0cm9uZz48L2E+KDxhIGhyZWY9Il9fYnVpbHRpbl9fLmh0bWwjb2JqZWN0Ij5fX2J1aWx0aW5fXy5vYmplY3Q8L2E+KTwvZm9udD48L3RkPjwvdHI+CitceDIwXHgyMFx4MjBceDIwCis8dHI+PHRkIGJnY29sb3I9IiNmZmM4ZDgiPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDs8L3R0PjwvdGQ+PHRkPiZuYnNwOzwvdGQ+Cis8dGQgd2lkdGg9IjEwMCUlIj5EYXRhIGRlc2NyaXB0b3JzIGRlZmluZWQgaGVyZTo8YnI+Cis8ZGw+PGR0PjxzdHJvbmc+X19kaWN0X188L3N0cm9uZz48L2R0PgorPGRkPjx0dD4lczwvdHQ+PC9kZD4KKzwvZGw+Cis8ZGw+PGR0PjxzdHJvbmc+X193ZWFrcmVmX188L3N0cm9uZz48L2R0PgorPGRkPjx0dD4lczwvdHQ+PC9kZD4KKzwvZGw+Cis8aHI+CitEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGRlZmluZWQgaGVyZTo8YnI+Cis8ZGw+PGR0PjxzdHJvbmc+Tk9fTUVBTklORzwvc3Ryb25nPiA9ICdlZ2dzJzwvZGw+CisKKzwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+PC90cj48L3RhYmxlPjxwPgorPHRhYmxlIHdpZHRoPSIxMDAlJSIgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz0yIGJvcmRlcj0wIHN1bW1hcnk9InNlY3Rpb24iPgorPHRyIGJnY29sb3I9IiNlZWFhNzciPgorPHRkIGNvbHNwYW49MyB2YWxpZ249Ym90dG9tPiZuYnNwOzxicj4KKzxmb250IGNvbG9yPSIjZmZmZmZmIiBmYWNlPSJoZWx2ZXRpY2EsIGFyaWFsIj48YmlnPjxzdHJvbmc+RnVuY3Rpb25zPC9zdHJvbmc+PC9iaWc+PC9mb250PjwvdGQ+PC90cj4KK1x4MjBceDIwXHgyMFx4MjAKKzx0cj48dGQgYmdjb2xvcj0iI2VlYWE3NyI+PHR0PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvdHQ+PC90ZD48dGQ+Jm5ic3A7PC90ZD4KKzx0ZCB3aWR0aD0iMTAwJSUiPjxkbD48ZHQ+PGEgbmFtZT0iLWRvY19mdW5jIj48c3Ryb25nPmRvY19mdW5jPC9zdHJvbmc+PC9hPigpPC9kdD48ZGQ+PHR0PlRoaXMmbmJzcDtmdW5jdGlvbiZuYnNwO3NvbHZlcyZuYnNwO2FsbCZuYnNwO29mJm5ic3A7dGhlJm5ic3A7d29ybGQncyZuYnNwO3Byb2JsZW1zOjxicj4KK2h1bmdlcjxicj4KK2xhY2smbmJzcDtvZiZuYnNwO1B5dGhvbjxicj4KK3dhcjwvdHQ+PC9kZD48L2RsPgorIDxkbD48ZHQ+PGEgbmFtZT0iLW5vZG9jX2Z1bmMiPjxzdHJvbmc+bm9kb2NfZnVuYzwvc3Ryb25nPjwvYT4oKTwvZHQ+PC9kbD4KKzwvdGQ+PC90cj48L3RhYmxlPjxwPgorPHRhYmxlIHdpZHRoPSIxMDAlJSIgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz0yIGJvcmRlcj0wIHN1bW1hcnk9InNlY3Rpb24iPgorPHRyIGJnY29sb3I9IiM1NWFhNTUiPgorPHRkIGNvbHNwYW49MyB2YWxpZ249Ym90dG9tPiZuYnNwOzxicj4KKzxmb250IGNvbG9yPSIjZmZmZmZmIiBmYWNlPSJoZWx2ZXRpY2EsIGFyaWFsIj48YmlnPjxzdHJvbmc+RGF0YTwvc3Ryb25nPjwvYmlnPjwvZm9udD48L3RkPjwvdHI+CitceDIwXHgyMFx4MjBceDIwCis8dHI+PHRkIGJnY29sb3I9IiM1NWFhNTUiPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3R0PjwvdGQ+PHRkPiZuYnNwOzwvdGQ+Cis8dGQgd2lkdGg9IjEwMCUlIj48c3Ryb25nPl9fYXV0aG9yX188L3N0cm9uZz4gPSAnQmVuamFtaW4gUGV0ZXJzb24nPGJyPgorPHN0cm9uZz5fX2NyZWRpdHNfXzwvc3Ryb25nPiA9ICdOb2JvZHknPGJyPgorPHN0cm9uZz5fX3ZlcnNpb25fXzwvc3Ryb25nPiA9ICcxLjIuMy40JzwvdGQ+PC90cj48L3RhYmxlPjxwPgorPHRhYmxlIHdpZHRoPSIxMDAlJSIgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz0yIGJvcmRlcj0wIHN1bW1hcnk9InNlY3Rpb24iPgorPHRyIGJnY29sb3I9IiM3Nzk5ZWUiPgorPHRkIGNvbHNwYW49MyB2YWxpZ249Ym90dG9tPiZuYnNwOzxicj4KKzxmb250IGNvbG9yPSIjZmZmZmZmIiBmYWNlPSJoZWx2ZXRpY2EsIGFyaWFsIj48YmlnPjxzdHJvbmc+QXV0aG9yPC9zdHJvbmc+PC9iaWc+PC9mb250PjwvdGQ+PC90cj4KK1x4MjBceDIwXHgyMFx4MjAKKzx0cj48dGQgYmdjb2xvcj0iIzc3OTllZSI+PHR0PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvdHQ+PC90ZD48dGQ+Jm5ic3A7PC90ZD4KKzx0ZCB3aWR0aD0iMTAwJSUiPkJlbmphbWluJm5ic3A7UGV0ZXJzb248L3RkPjwvdHI+PC90YWJsZT48cD4KKzx0YWJsZSB3aWR0aD0iMTAwJSUiIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MiBib3JkZXI9MCBzdW1tYXJ5PSJzZWN0aW9uIj4KKzx0ciBiZ2NvbG9yPSIjNzc5OWVlIj4KKzx0ZCBjb2xzcGFuPTMgdmFsaWduPWJvdHRvbT4mbmJzcDs8YnI+Cis8Zm9udCBjb2xvcj0iI2ZmZmZmZiIgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+PGJpZz48c3Ryb25nPkNyZWRpdHM8L3N0cm9uZz48L2JpZz48L2ZvbnQ+PC90ZD48L3RyPgorXHgyMFx4MjBceDIwXHgyMAorPHRyPjx0ZCBiZ2NvbG9yPSIjNzc5OWVlIj48dHQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC90dD48L3RkPjx0ZD4mbmJzcDs8L3RkPgorPHRkIHdpZHRoPSIxMDAlJSI+Tm9ib2R5PC90ZD48L3RyPjwvdGFibGU+CisiIiIuc3RyaXAoKQorCitleHBlY3RlZF9odG1sX2RhdGFfZG9jc3RyaW5ncyA9IHR1cGxlKHMucmVwbGFjZSgnICcsICcmbmJzcDsnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcyBpbiBleHBlY3RlZF9kYXRhX2RvY3N0cmluZ3MpCisKKyMgb3V0cHV0IHBhdHRlcm4gZm9yIG1pc3NpbmcgbW9kdWxlCittaXNzaW5nX3BhdHRlcm4gPSAibm8gUHl0aG9uIGRvY3VtZW50YXRpb24gZm91bmQgZm9yICclcyciCisKKyMgb3V0cHV0IHBhdHRlcm4gZm9yIG1vZHVsZSB3aXRoIGJhZCBpbXBvcnRzCitiYWRpbXBvcnRfcGF0dGVybiA9ICJwcm9ibGVtIGluICVzIC0gPHR5cGUgJ2V4Y2VwdGlvbnMuSW1wb3J0RXJyb3InPjogTm8gbW9kdWxlIG5hbWVkICVzIgorCitkZWYgcnVuX3B5ZG9jKG1vZHVsZV9uYW1lLCAqYXJncywgKiplbnYpOgorICAgICIiIgorICAgIFJ1bnMgcHlkb2Mgb24gdGhlIHNwZWNpZmllZCBtb2R1bGUuIFJldHVybnMgdGhlIHN0cmlwcGVkCisgICAgb3V0cHV0IG9mIHB5ZG9jLgorICAgICIiIgorICAgIGFyZ3MgPSBhcmdzICsgKG1vZHVsZV9uYW1lLCkKKyAgICAjIGRvIG5vdCB3cml0ZSBieXRlY29kZSBmaWxlcyB0byBhdm9pZCBjYWNoaW5nIGVycm9ycworICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1CJywgcHlkb2MuX19maWxlX18sICphcmdzLCAqKmVudikKKyAgICByZXR1cm4gb3V0LnN0cmlwKCkKKworZGVmIGdldF9weWRvY19odG1sKG1vZHVsZSk6CisgICAgIlJldHVybnMgcHlkb2MgZ2VuZXJhdGVkIG91dHB1dCBhcyBodG1sIgorICAgIGRvYyA9IHB5ZG9jLkhUTUxEb2MoKQorICAgIG91dHB1dCA9IGRvYy5kb2Ntb2R1bGUobW9kdWxlKQorICAgIGxvYyA9IGRvYy5nZXRkb2Nsb2MocHlkb2NfbW9kKSBvciAiIgorICAgIGlmIGxvYzoKKyAgICAgICAgbG9jID0gIjxicj48YSBocmVmPVwiIiArIGxvYyArICJcIj5Nb2R1bGUgRG9jczwvYT4iCisgICAgcmV0dXJuIG91dHB1dC5zdHJpcCgpLCBsb2MKKworZGVmIGdldF9weWRvY190ZXh0KG1vZHVsZSk6CisgICAgIlJldHVybnMgcHlkb2MgZ2VuZXJhdGVkIG91dHB1dCBhcyB0ZXh0IgorICAgIGRvYyA9IHB5ZG9jLlRleHREb2MoKQorICAgIGxvYyA9IGRvYy5nZXRkb2Nsb2MocHlkb2NfbW9kKSBvciAiIgorICAgIGlmIGxvYzoKKyAgICAgICAgbG9jID0gIlxuTU9EVUxFIERPQ1NcbiAgICAiICsgbG9jICsgIlxuIgorCisgICAgb3V0cHV0ID0gZG9jLmRvY21vZHVsZShtb2R1bGUpCisKKyAgICAjIGNsZWFudXAgdGhlIGV4dHJhIHRleHQgZm9ybWF0dGluZyB0aGF0IHB5ZG9jIHByZWZvcm1zCisgICAgcGF0dCA9IHJlLmNvbXBpbGUoJ1xiLicpCisgICAgb3V0cHV0ID0gcGF0dC5zdWIoJycsIG91dHB1dCkKKyAgICByZXR1cm4gb3V0cHV0LnN0cmlwKCksIGxvYworCitkZWYgcHJpbnRfZGlmZnModGV4dDEsIHRleHQyKToKKyAgICAiUHJpbnRzIHVuaWZpZWQgZGlmZnMgZm9yIHR3byB0ZXh0cyIKKyAgICBsaW5lczEgPSB0ZXh0MS5zcGxpdGxpbmVzKFRydWUpCisgICAgbGluZXMyID0gdGV4dDIuc3BsaXRsaW5lcyhUcnVlKQorICAgIGRpZmZzID0gZGlmZmxpYi51bmlmaWVkX2RpZmYobGluZXMxLCBsaW5lczIsIG49MCwgZnJvbWZpbGU9J2V4cGVjdGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZmlsZT0nZ290JykKKyAgICBwcmludCAnXG4nICsgJycuam9pbihkaWZmcykKKworCitjbGFzcyBQeURvY0RvY1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfaHRtbF9kb2Moc2VsZik6CisgICAgICAgIHJlc3VsdCwgZG9jX2xvYyA9IGdldF9weWRvY19odG1sKHB5ZG9jX21vZCkKKyAgICAgICAgbW9kX2ZpbGUgPSBpbnNwZWN0LmdldGFic2ZpbGUocHlkb2NfbW9kKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIGltcG9ydCBudHVybDJwYXRoCisgICAgICAgICAgICBtb2RfdXJsID0gbnR1cmwycGF0aC5wYXRobmFtZTJ1cmwobW9kX2ZpbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2RfdXJsID0gbW9kX2ZpbGUKKyAgICAgICAgZXhwZWN0ZWRfaHRtbCA9IGV4cGVjdGVkX2h0bWxfcGF0dGVybiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgIChtb2RfdXJsLCBtb2RfZmlsZSwgZG9jX2xvYykgKworICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfaHRtbF9kYXRhX2RvY3N0cmluZ3MpCisgICAgICAgIGlmIHJlc3VsdCAhPSBleHBlY3RlZF9odG1sOgorICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfaHRtbCwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X3RleHRfZG9jKHNlbGYpOgorICAgICAgICByZXN1bHQsIGRvY19sb2MgPSBnZXRfcHlkb2NfdGV4dChweWRvY19tb2QpCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF90ZXh0X3BhdHRlcm4gJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAoaW5zcGVjdC5nZXRhYnNmaWxlKHB5ZG9jX21vZCksIGRvY19sb2MpICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3RleHRfZGF0YV9kb2NzdHJpbmdzKQorICAgICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfdGV4dDoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTgyMjUoc2VsZik6CisgICAgICAgICMgVGVzdCBpc3N1ZTgyMjUgdG8gZW5zdXJlIG5vIGRvYyBsaW5rIGFwcGVhcnMgZm9yIHhtbC5ldHJlZQorICAgICAgICByZXN1bHQsIGRvY19sb2MgPSBnZXRfcHlkb2NfdGV4dCh4bWwuZXRyZWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9jX2xvYywgIiIsICJNT0RVTEUgRE9DUyBpbmNvcnJlY3RseSBpbmNsdWRlcyBhIGxpbmsiKQorCisgICAgZGVmIHRlc3Rfbm9uX3N0cl9uYW1lKHNlbGYpOgorICAgICAgICAjIGlzc3VlMTQ2MzgKKyAgICAgICAgIyBUcmVhdCBpbGxlZ2FsIChub24tc3RyKSBuYW1lIGxpa2Ugbm8gbmFtZQorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgX19uYW1lX18gPSA0MgorICAgICAgICBjbGFzcyBCOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhZG9jID0gcHlkb2MucmVuZGVyX2RvYyhBKCkpCisgICAgICAgIGJkb2MgPSBweWRvYy5yZW5kZXJfZG9jKEIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZG9jLnJlcGxhY2UoIkEiLCAiQiIpLCBiZG9jKQorCisgICAgZGVmIHRlc3Rfbm90X2hlcmUoc2VsZik6CisgICAgICAgIG1pc3NpbmdfbW9kdWxlID0gInRlc3QuaV9hbV9ub3RfaGVyZSIKKyAgICAgICAgcmVzdWx0ID0gcnVuX3B5ZG9jKG1pc3NpbmdfbW9kdWxlKQorICAgICAgICBleHBlY3RlZCA9IG1pc3NpbmdfcGF0dGVybiAlIG1pc3NpbmdfbW9kdWxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCwKKyAgICAgICAgICAgICJkb2N1bWVudGF0aW9uIGZvciBtaXNzaW5nIG1vZHVsZSBmb3VuZCIpCisKKyAgICBkZWYgdGVzdF9pbnB1dF9zdHJpcChzZWxmKToKKyAgICAgICAgbWlzc2luZ19tb2R1bGUgPSAiIHRlc3QuaV9hbV9ub3RfaGVyZSAiCisgICAgICAgIHJlc3VsdCA9IHJ1bl9weWRvYyhtaXNzaW5nX21vZHVsZSkKKyAgICAgICAgZXhwZWN0ZWQgPSBtaXNzaW5nX3BhdHRlcm4gJSBtaXNzaW5nX21vZHVsZS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCwKKyAgICAgICAgICAgICJ3aGl0ZSBzcGFjZSB3YXMgbm90IHN0cmlwcGVkIGZyb20gbW9kdWxlIG5hbWUgIgorICAgICAgICAgICAgIm9yIG90aGVyIGVycm9yIG91dHB1dCBtaXNtYXRjaCIpCisKKyAgICBkZWYgdGVzdF9zdHJpcGlkKHNlbGYpOgorICAgICAgICAjIHRlc3Qgd2l0aCBzdHJpbmdzLCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgcmVwcigpCisgICAgICAgIHN0cmlwaWQgPSBweWRvYy5zdHJpcGlkCisgICAgICAgICMgc3RyaXAgdGhlIGlkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaXBpZCgnPGZ1bmN0aW9uIHN0cmlwaWQgYXQgMHg4OGRjZWU0PicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8ZnVuY3Rpb24gc3RyaXBpZD4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmlwaWQoJzxmdW5jdGlvbiBzdHJpcGlkIGF0IDB4MDFGNjUzOTA+JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxmdW5jdGlvbiBzdHJpcGlkPicpCisgICAgICAgICMgbm90aGluZyB0byBzdHJpcCwgcmV0dXJuIHRoZSBzYW1lIHRleHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpcGlkKCc0MicpLCAnNDInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmlwaWQoIjx0eXBlICdleGNlcHRpb25zLkV4Y2VwdGlvbic+IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIjx0eXBlICdleGNlcHRpb25zLkV4Y2VwdGlvbic+IikKKworCitjbGFzcyBQeWRvY0ltcG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfZGlyID0gb3MubWtkaXIoVEVTVEZOKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocm10cmVlLCBURVNURk4pCisKKyAgICBkZWYgdGVzdF9iYWRpbXBvcnQoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0cyB0aGUgZml4IGZvciBpc3N1ZSA1MjMwLCB3aGVyZSBpZiBweWRvYyBmb3VuZCB0aGUgbW9kdWxlCisgICAgICAgICMgYnV0IHRoZSBtb2R1bGUgaGFkIGFuIGludGVybmFsIGltcG9ydCBlcnJvciBweWRvYyB3b3VsZCByZXBvcnQgbm8gZG9jCisgICAgICAgICMgZm91bmQuCisgICAgICAgIG1vZG5hbWUgPSAndGVzdG1vZF94eXp6eScKKyAgICAgICAgdGVzdHBhaXJzID0gKAorICAgICAgICAgICAgKCdpX2FtX25vdF9oZXJlJywgJ2lfYW1fbm90X2hlcmUnKSwKKyAgICAgICAgICAgICgndGVzdC5pX2FtX25vdF9oZXJlX2VpdGhlcicsICdpX2FtX25vdF9oZXJlX2VpdGhlcicpLAorICAgICAgICAgICAgKCd0ZXN0LmlfYW1fbm90X2hlcmUubmVpdGhlcl9hbV9pJywgJ2lfYW1fbm90X2hlcmUubmVpdGhlcl9hbV9pJyksCisgICAgICAgICAgICAoJ2lfYW1fbm90X2hlcmUue30nLmZvcm1hdChtb2RuYW1lKSwKKyAgICAgICAgICAgICAnaV9hbV9ub3RfaGVyZS57fScuZm9ybWF0KG1vZG5hbWUpKSwKKyAgICAgICAgICAgICgndGVzdC57fScuZm9ybWF0KG1vZG5hbWUpLCBtb2RuYW1lKSwKKyAgICAgICAgICAgICkKKworICAgICAgICBzb3VyY2VmbiA9IG9zLnBhdGguam9pbihURVNURk4sIG1vZG5hbWUpICsgb3MuZXh0c2VwICsgInB5IgorICAgICAgICBmb3IgaW1wb3J0c3RyaW5nLCBleHBlY3RlZGlubXNnIGluIHRlc3RwYWlyczoKKyAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2VmbiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoImltcG9ydCB7fVxuIi5mb3JtYXQoaW1wb3J0c3RyaW5nKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bl9weWRvYyhtb2RuYW1lLCBQWVRIT05QQVRIPVRFU1RGTikKKyAgICAgICAgICAgIGV4cGVjdGVkID0gYmFkaW1wb3J0X3BhdHRlcm4gJSAobW9kbmFtZSwgZXhwZWN0ZWRpbm1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X2Fwcm9wb3Nfd2l0aF9iYWRfcGFja2FnZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA3NDI1IC0gcHlkb2MgLWsgZmFpbGVkIHdoZW4gYmFkIHBhY2thZ2Ugb24gcGF0aAorICAgICAgICBwa2dkaXIgPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCAic3ludGF4ZXJyIikKKyAgICAgICAgb3MubWtkaXIocGtnZGlyKQorICAgICAgICBiYWRzeW50YXggPSBvcy5wYXRoLmpvaW4ocGtnZGlyLCAiX19pbml0X18iKSArIG9zLmV4dHNlcCArICJweSIKKyAgICAgICAgd2l0aCBvcGVuKGJhZHN5bnRheCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiaW52YWxpZCBweXRob24gc3ludGF4ID0gJDFcbiIpCisgICAgICAgIHJlc3VsdCA9IHJ1bl9weWRvYygnenF3eWtqdicsICctaycsIFBZVEhPTlBBVEg9VEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9hcHJvcG9zX3dpdGhfdW5yZWFkYWJsZV9kaXIoc2VsZik6CisgICAgICAgICMgSXNzdWUgNzM2NyAtIHB5ZG9jIC1rIGZhaWxlZCB3aGVuIHVucmVhZGFibGUgZGlyIG9uIHBhdGgKKyAgICAgICAgc2VsZi51bnJlYWRhYmxlX2RpciA9IG9zLnBhdGguam9pbihURVNURk4sICJ1bnJlYWRhYmxlIikKKyAgICAgICAgb3MubWtkaXIoc2VsZi51bnJlYWRhYmxlX2RpciwgMCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLnJtZGlyLCBzZWxmLnVucmVhZGFibGVfZGlyKQorICAgICAgICAjIE5vdGUsIG9uIFdpbmRvd3MgdGhlIGRpcmVjdG9yeSBhcHBlYXJzIHRvIGJlIHN0aWxsCisgICAgICAgICMgICByZWFkYWJsZSBzbyB0aGlzIGlzIG5vdCByZWFsbHkgdGVzdGluZyB0aGUgaXNzdWUgdGhlcmUKKyAgICAgICAgcmVzdWx0ID0gcnVuX3B5ZG9jKCd6cXd5a2p2JywgJy1rJywgUFlUSE9OUEFUSD1URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHJlc3VsdCkKKworCitjbGFzcyBUZXN0RGVzY3JpcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHB5ZG9jZm9kZGVyIG1vZHVsZSBjYW4gYmUgZGVzY3JpYmVkCisgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgcHlkb2Nmb2RkZXIKKyAgICAgICAgZG9jID0gcHlkb2MucmVuZGVyX2RvYyhweWRvY2ZvZGRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigicHlkb2Nmb2RkZXIiLCBkb2MpCisKKyAgICBkZWYgdGVzdF9jbGFzc2ljX2NsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBDOiAiQ2xhc3NpYyBjbGFzcyIKKyAgICAgICAgYyA9IEMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5ZG9jLmRlc2NyaWJlKEMpLCAnY2xhc3MgQycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlkb2MuZGVzY3JpYmUoYyksICdpbnN0YW5jZSBvZiBDJykKKyAgICAgICAgZXhwZWN0ZWQgPSAnaW5zdGFuY2Ugb2YgQyBpbiBtb2R1bGUgJXMnICUgX19uYW1lX18KKyAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgcHlkb2MucmVuZGVyX2RvYyhjKSkKKworICAgIGRlZiB0ZXN0X2NsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6ICJOZXctc3R5bGUgY2xhc3MiCisgICAgICAgIGMgPSBDKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5ZG9jLmRlc2NyaWJlKEMpLCAnY2xhc3MgQycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlkb2MuZGVzY3JpYmUoYyksICdDJykKKyAgICAgICAgZXhwZWN0ZWQgPSAnQyBpbiBtb2R1bGUgJXMgb2JqZWN0JyAlIF9fbmFtZV9fCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQsIHB5ZG9jLnJlbmRlcl9kb2MoYykpCisKKyAgICBkZWYgdGVzdF9uYW1lZHR1cGxlX3B1YmxpY191bmRlcnNjb3JlKHNlbGYpOgorICAgICAgICBOVCA9IG5hbWVkdHVwbGUoJ05UJywgWydhYmMnLCAnZGVmJ10sIHJlbmFtZT1UcnVlKQorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIGhlbHBfaW86CisgICAgICAgICAgICBoZWxwKE5UKQorICAgICAgICBoZWxwdGV4dCA9IGhlbHBfaW8uZ2V0dmFsdWUoKQorICAgICAgICBzZWxmLmFzc2VydEluKCdfMScsIGhlbHB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdfcmVwbGFjZScsIGhlbHB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdfYXNkaWN0JywgaGVscHRleHQpCisKKworY2xhc3MgVGVzdEhlbHBlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfa2V5d29yZHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHB5ZG9jLkhlbHBlci5rZXl3b3JkcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkKGtleXdvcmQua3dsaXN0KSkKKworICAgIGRlZiB0ZXN0X2J1aWx0aW4oc2VsZik6CisgICAgICAgIGZvciBuYW1lIGluICgnc3RyJywgJ3N0ci50cmFuc2xhdGUnLCAnX19idWlsdGluX18uc3RyJywKKyAgICAgICAgICAgICAgICAgICAgICdfX2J1aWx0aW5fXy5zdHIudHJhbnNsYXRlJyk6CisgICAgICAgICAgICAjIHRlc3QgbG93LWxldmVsIGZ1bmN0aW9uCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShweWRvYy5sb2NhdGUobmFtZSkpCisgICAgICAgICAgICAjIHRlc3QgaGlnaC1sZXZlbCBmdW5jdGlvbgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHB5ZG9jLnJlbmRlcl9kb2MobmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZpbmRpbmcgdGhlIGRvYyBvZiB7IXJ9IGZhaWxlZCcuZm9ybWF0KG8pKQorCisgICAgICAgIGZvciBuYW1lIGluICgnbm90X19idWlsdGluX18nLCAnc3RycnInLCAnc3Ryci50cmFuc2xhdGUnLAorICAgICAgICAgICAgICAgICAgICAgJ3N0ci50cnJycmFuc2xhdGUnLCAnX19idWlsdGluX18uc3RycnInLAorICAgICAgICAgICAgICAgICAgICAgJ19fYnVpbHRpbl9fLnN0ci50cnJyYW5zbGF0ZScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHlkb2MubG9jYXRlKG5hbWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIHB5ZG9jLnJlbmRlcl9kb2MsIG5hbWUpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRyeToKKyAgICAgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFB5RG9jRG9jVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5ZG9jSW1wb3J0VGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3REZXNjcmlwdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0SGVscGVyKQorICAgIGZpbmFsbHk6CisgICAgICAgIHJlYXBfY2hpbGRyZW4oKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9weWV4cGF0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHlleHBhdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTExYTIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcHlleHBhdC5weQpAQCAtMCwwICsxLDY1NyBAQAorIyBYWFggVHlwZUVycm9ycyBvbiBjYWxsaW5nIGhhbmRsZXJzLCBvciBvbiBiYWQgcmV0dXJuIHZhbHVlcyBmcm9tIGEKKyMgaGFuZGxlciwgYXJlIG9ic2N1cmUgYW5kIHVuaGVscGZ1bC4KKworaW1wb3J0IFN0cmluZ0lPLCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHhtbC5wYXJzZXJzIGltcG9ydCBleHBhdAorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgc29ydGRpY3QsIHJ1bl91bml0dGVzdAorCisKK2NsYXNzIFNldEF0dHJpYnV0ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUobmFtZXNwYWNlX3NlcGFyYXRvcj0nIScpCisgICAgICAgIHNlbGYuc2V0X2dldF9wYWlycyA9IFsKKyAgICAgICAgICAgIFswLCAwXSwKKyAgICAgICAgICAgIFsxLCAxXSwKKyAgICAgICAgICAgIFsyLCAxXSwKKyAgICAgICAgICAgIFswLCAwXSwKKyAgICAgICAgICAgIF0KKworICAgIGRlZiB0ZXN0X3JldHVybnNfdW5pY29kZShzZWxmKToKKyAgICAgICAgZm9yIHgsIHkgaW4gc2VsZi5zZXRfZ2V0X3BhaXJzOgorICAgICAgICAgICAgc2VsZi5wYXJzZXIucmV0dXJuc191bmljb2RlID0geAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5yZXR1cm5zX3VuaWNvZGUsIHkpCisKKyAgICBkZWYgdGVzdF9vcmRlcmVkX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIGZvciB4LCB5IGluIHNlbGYuc2V0X2dldF9wYWlyczoKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcyA9IHgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzLCB5KQorCisgICAgZGVmIHRlc3Rfc3BlY2lmaWVkX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIGZvciB4LCB5IGluIHNlbGYuc2V0X2dldF9wYWlyczoKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0geAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcywgeSkKKworCitkYXRhID0gJycnXAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgc3RhbmRhbG9uZT0ibm8iPz4KKzw/eG1sLXN0eWxlc2hlZXQgaHJlZj0ic3R5bGVzaGVldC5jc3MiPz4KKzwhLS0gY29tbWVudCBkYXRhIC0tPgorPCFET0NUWVBFIHF1b3RhdGlvbnMgU1lTVEVNICJxdW90YXRpb25zLmR0ZCIgWworPCFFTEVNRU5UIHJvb3QgQU5ZPgorPCFOT1RBVElPTiBub3RhdGlvbiBTWVNURU0gIm5vdGF0aW9uLmpwZWciPgorPCFFTlRJVFkgYWNpcmMgIiYjMjI2OyI+Cis8IUVOVElUWSBleHRlcm5hbF9lbnRpdHkgU1lTVEVNICJlbnRpdHkuZmlsZSI+Cis8IUVOVElUWSB1bnBhcnNlZF9lbnRpdHkgU1lTVEVNICJlbnRpdHkuZmlsZSIgTkRBVEEgbm90YXRpb24+CisldW5wYXJzZWRfZW50aXR5OworXT4KKworPHJvb3QgYXR0cjE9InZhbHVlMSIgYXR0cjI9InZhbHVlMiYjODAwMDsiPgorPG15bnM6c3ViZWxlbWVudCB4bWxuczpteW5zPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIj4KKyAgICAgQ29udGVudHMgb2Ygc3ViZWxlbWVudHMKKzwvbXluczpzdWJlbGVtZW50PgorPHN1YjI+PCFbQ0RBVEFbY29udGVudHMgb2YgQ0RBVEEgc2VjdGlvbl1dPjwvc3ViMj4KKyZleHRlcm5hbF9lbnRpdHk7Cis8L3Jvb3Q+CisnJycKKworCisjIFByb2R1Y2UgVVRGLTggb3V0cHV0CitjbGFzcyBQYXJzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNsYXNzIE91dHB1dHRlcjoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5vdXQgPSBbXQorCisgICAgICAgIGRlZiBTdGFydEVsZW1lbnRIYW5kbGVyKHNlbGYsIG5hbWUsIGF0dHJzKToKKyAgICAgICAgICAgIHNlbGYub3V0LmFwcGVuZCgnU3RhcnQgZWxlbWVudDogJyArIHJlcHIobmFtZSkgKyAnICcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRkaWN0KGF0dHJzKSkKKworICAgICAgICBkZWYgRW5kRWxlbWVudEhhbmRsZXIoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICBzZWxmLm91dC5hcHBlbmQoJ0VuZCBlbGVtZW50OiAnICsgcmVwcihuYW1lKSkKKworICAgICAgICBkZWYgQ2hhcmFjdGVyRGF0YUhhbmRsZXIoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICBkYXRhID0gZGF0YS5zdHJpcCgpCisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYub3V0LmFwcGVuZCgnQ2hhcmFjdGVyIGRhdGE6ICcgKyByZXByKGRhdGEpKQorCisgICAgICAgIGRlZiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyKHNlbGYsIHRhcmdldCwgZGF0YSk6CisgICAgICAgICAgICBzZWxmLm91dC5hcHBlbmQoJ1BJOiAnICsgcmVwcih0YXJnZXQpICsgJyAnICsgcmVwcihkYXRhKSkKKworICAgICAgICBkZWYgU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcihzZWxmLCBwcmVmaXgsIHVyaSk6CisgICAgICAgICAgICBzZWxmLm91dC5hcHBlbmQoJ05TIGRlY2w6ICcgKyByZXByKHByZWZpeCkgKyAnICcgKyByZXByKHVyaSkpCisKKyAgICAgICAgZGVmIEVuZE5hbWVzcGFjZURlY2xIYW5kbGVyKHNlbGYsIHByZWZpeCk6CisgICAgICAgICAgICBzZWxmLm91dC5hcHBlbmQoJ0VuZCBvZiBOUyBkZWNsOiAnICsgcmVwcihwcmVmaXgpKQorCisgICAgICAgIGRlZiBTdGFydENkYXRhU2VjdGlvbkhhbmRsZXIoc2VsZik6CisgICAgICAgICAgICBzZWxmLm91dC5hcHBlbmQoJ1N0YXJ0IG9mIENEQVRBIHNlY3Rpb24nKQorCisgICAgICAgIGRlZiBFbmRDZGF0YVNlY3Rpb25IYW5kbGVyKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5vdXQuYXBwZW5kKCdFbmQgb2YgQ0RBVEEgc2VjdGlvbicpCisKKyAgICAgICAgZGVmIENvbW1lbnRIYW5kbGVyKHNlbGYsIHRleHQpOgorICAgICAgICAgICAgc2VsZi5vdXQuYXBwZW5kKCdDb21tZW50OiAnICsgcmVwcih0ZXh0KSkKKworICAgICAgICBkZWYgTm90YXRpb25EZWNsSGFuZGxlcihzZWxmLCAqYXJncyk6CisgICAgICAgICAgICBuYW1lLCBiYXNlLCBzeXNpZCwgcHViaWQgPSBhcmdzCisgICAgICAgICAgICBzZWxmLm91dC5hcHBlbmQoJ05vdGF0aW9uIGRlY2xhcmVkOiAlcycgJShhcmdzLCkpCisKKyAgICAgICAgZGVmIFVucGFyc2VkRW50aXR5RGVjbEhhbmRsZXIoc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgZW50aXR5TmFtZSwgYmFzZSwgc3lzdGVtSWQsIHB1YmxpY0lkLCBub3RhdGlvbk5hbWUgPSBhcmdzCisgICAgICAgICAgICBzZWxmLm91dC5hcHBlbmQoJ1VucGFyc2VkIGVudGl0eSBkZWNsOiAlcycgJShhcmdzLCkpCisKKyAgICAgICAgZGVmIE5vdFN0YW5kYWxvbmVIYW5kbGVyKHNlbGYsIHVzZXJEYXRhKToKKyAgICAgICAgICAgIHNlbGYub3V0LmFwcGVuZCgnTm90IHN0YW5kYWxvbmUnKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBkZWYgRXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgIGNvbnRleHQsIGJhc2UsIHN5c0lkLCBwdWJJZCA9IGFyZ3MKKyAgICAgICAgICAgIHNlbGYub3V0LmFwcGVuZCgnRXh0ZXJuYWwgZW50aXR5IHJlZjogJXMnICUoYXJnc1sxOl0sKSkKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgZGVmIERlZmF1bHRIYW5kbGVyKHNlbGYsIHVzZXJEYXRhKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgRGVmYXVsdEhhbmRsZXJFeHBhbmQoc2VsZiwgdXNlckRhdGEpOgorICAgICAgICAgICAgcGFzcworCisgICAgaGFuZGxlcl9uYW1lcyA9IFsKKyAgICAgICAgJ1N0YXJ0RWxlbWVudEhhbmRsZXInLCAnRW5kRWxlbWVudEhhbmRsZXInLAorICAgICAgICAnQ2hhcmFjdGVyRGF0YUhhbmRsZXInLCAnUHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlcicsCisgICAgICAgICdVbnBhcnNlZEVudGl0eURlY2xIYW5kbGVyJywgJ05vdGF0aW9uRGVjbEhhbmRsZXInLAorICAgICAgICAnU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcicsICdFbmROYW1lc3BhY2VEZWNsSGFuZGxlcicsCisgICAgICAgICdDb21tZW50SGFuZGxlcicsICdTdGFydENkYXRhU2VjdGlvbkhhbmRsZXInLAorICAgICAgICAnRW5kQ2RhdGFTZWN0aW9uSGFuZGxlcicsCisgICAgICAgICdEZWZhdWx0SGFuZGxlcicsICdEZWZhdWx0SGFuZGxlckV4cGFuZCcsCisgICAgICAgICMnTm90U3RhbmRhbG9uZUhhbmRsZXInLAorICAgICAgICAnRXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyJworICAgICAgICBdCisKKyAgICBkZWYgdGVzdF91dGY4KHNlbGYpOgorCisgICAgICAgIG91dCA9IHNlbGYuT3V0cHV0dGVyKCkKKyAgICAgICAgcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKG5hbWVzcGFjZV9zZXBhcmF0b3I9JyEnKQorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLmhhbmRsZXJfbmFtZXM6CisgICAgICAgICAgICBzZXRhdHRyKHBhcnNlciwgbmFtZSwgZ2V0YXR0cihvdXQsIG5hbWUpKQorICAgICAgICBwYXJzZXIucmV0dXJuc191bmljb2RlID0gMAorICAgICAgICBwYXJzZXIuUGFyc2UoZGF0YSwgMSkKKworICAgICAgICAjIFZlcmlmeSBvdXRwdXQKKyAgICAgICAgb3AgPSBvdXQub3V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMF0sICdQSTogXCd4bWwtc3R5bGVzaGVldFwnIFwnaHJlZj0ic3R5bGVzaGVldC5jc3MiXCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzFdLCAiQ29tbWVudDogJyBjb21tZW50IGRhdGEgJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMl0sICJOb3RhdGlvbiBkZWNsYXJlZDogKCdub3RhdGlvbicsIE5vbmUsICdub3RhdGlvbi5qcGVnJywgTm9uZSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzNdLCAiVW5wYXJzZWQgZW50aXR5IGRlY2w6ICgndW5wYXJzZWRfZW50aXR5JywgTm9uZSwgJ2VudGl0eS5maWxlJywgTm9uZSwgJ25vdGF0aW9uJykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzRdLCAiU3RhcnQgZWxlbWVudDogJ3Jvb3QnIHsnYXR0cjEnOiAndmFsdWUxJywgJ2F0dHIyJzogJ3ZhbHVlMlxceGUxXFx4YmRcXHg4MCd9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs1XSwgIk5TIGRlY2w6ICdteW5zJyAnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzZdLCAiU3RhcnQgZWxlbWVudDogJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2Uhc3ViZWxlbWVudCcge30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzddLCAiQ2hhcmFjdGVyIGRhdGE6ICdDb250ZW50cyBvZiBzdWJlbGVtZW50cyciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzhdLCAiRW5kIGVsZW1lbnQ6ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs5XSwgIkVuZCBvZiBOUyBkZWNsOiAnbXlucyciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzEwXSwgIlN0YXJ0IGVsZW1lbnQ6ICdzdWIyJyB7fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTFdLCAnU3RhcnQgb2YgQ0RBVEEgc2VjdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTJdLCAiQ2hhcmFjdGVyIGRhdGE6ICdjb250ZW50cyBvZiBDREFUQSBzZWN0aW9uJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTNdLCAnRW5kIG9mIENEQVRBIHNlY3Rpb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzE0XSwgIkVuZCBlbGVtZW50OiAnc3ViMiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzE1XSwgIkV4dGVybmFsIGVudGl0eSByZWY6IChOb25lLCAnZW50aXR5LmZpbGUnLCBOb25lKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTZdLCAiRW5kIGVsZW1lbnQ6ICdyb290JyIpCisKKyAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgorICAgICAgICAjIFRyeSB0aGUgcGFyc2UgYWdhaW4sIHRoaXMgdGltZSBwcm9kdWNpbmcgVW5pY29kZSBvdXRwdXQKKyAgICAgICAgb3V0ID0gc2VsZi5PdXRwdXR0ZXIoKQorICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUobmFtZXNwYWNlX3NlcGFyYXRvcj0nIScpCisgICAgICAgIHBhcnNlci5yZXR1cm5zX3VuaWNvZGUgPSAxCisgICAgICAgIGZvciBuYW1lIGluIHNlbGYuaGFuZGxlcl9uYW1lczoKKyAgICAgICAgICAgIHNldGF0dHIocGFyc2VyLCBuYW1lLCBnZXRhdHRyKG91dCwgbmFtZSkpCisKKyAgICAgICAgcGFyc2VyLlBhcnNlKGRhdGEsIDEpCisKKyAgICAgICAgb3AgPSBvdXQub3V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMF0sICdQSTogdVwneG1sLXN0eWxlc2hlZXRcJyB1XCdocmVmPSJzdHlsZXNoZWV0LmNzcyJcJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMV0sICJDb21tZW50OiB1JyBjb21tZW50IGRhdGEgJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMl0sICJOb3RhdGlvbiBkZWNsYXJlZDogKHUnbm90YXRpb24nLCBOb25lLCB1J25vdGF0aW9uLmpwZWcnLCBOb25lKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbM10sICJVbnBhcnNlZCBlbnRpdHkgZGVjbDogKHUndW5wYXJzZWRfZW50aXR5JywgTm9uZSwgdSdlbnRpdHkuZmlsZScsIE5vbmUsIHUnbm90YXRpb24nKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbNF0sICJTdGFydCBlbGVtZW50OiB1J3Jvb3QnIHt1J2F0dHIxJzogdSd2YWx1ZTEnLCB1J2F0dHIyJzogdSd2YWx1ZTJcXHUxZjQwJ30iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzVdLCAiTlMgZGVjbDogdSdteW5zJyB1J2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2UnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs2XSwgIlN0YXJ0IGVsZW1lbnQ6IHUnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSFzdWJlbGVtZW50JyB7fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbN10sICJDaGFyYWN0ZXIgZGF0YTogdSdDb250ZW50cyBvZiBzdWJlbGVtZW50cyciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzhdLCAiRW5kIGVsZW1lbnQ6IHUnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSFzdWJlbGVtZW50JyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbOV0sICJFbmQgb2YgTlMgZGVjbDogdSdteW5zJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTBdLCAiU3RhcnQgZWxlbWVudDogdSdzdWIyJyB7fSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTFdLCAnU3RhcnQgb2YgQ0RBVEEgc2VjdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTJdLCAiQ2hhcmFjdGVyIGRhdGE6IHUnY29udGVudHMgb2YgQ0RBVEEgc2VjdGlvbiciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzEzXSwgJ0VuZCBvZiBDREFUQSBzZWN0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxNF0sICJFbmQgZWxlbWVudDogdSdzdWIyJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTVdLCAiRXh0ZXJuYWwgZW50aXR5IHJlZjogKE5vbmUsIHUnZW50aXR5LmZpbGUnLCBOb25lKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTZdLCAiRW5kIGVsZW1lbnQ6IHUncm9vdCciKQorCisgICAgZGVmIHRlc3RfcGFyc2VfZmlsZShzZWxmKToKKyAgICAgICAgIyBUcnkgcGFyc2luZyBhIGZpbGUKKyAgICAgICAgb3V0ID0gc2VsZi5PdXRwdXR0ZXIoKQorICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUobmFtZXNwYWNlX3NlcGFyYXRvcj0nIScpCisgICAgICAgIHBhcnNlci5yZXR1cm5zX3VuaWNvZGUgPSAxCisgICAgICAgIGZvciBuYW1lIGluIHNlbGYuaGFuZGxlcl9uYW1lczoKKyAgICAgICAgICAgIHNldGF0dHIocGFyc2VyLCBuYW1lLCBnZXRhdHRyKG91dCwgbmFtZSkpCisgICAgICAgIGZpbGUgPSBTdHJpbmdJTy5TdHJpbmdJTyhkYXRhKQorCisgICAgICAgIHBhcnNlci5QYXJzZUZpbGUoZmlsZSkKKworICAgICAgICBvcCA9IG91dC5vdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFswXSwgJ1BJOiB1XCd4bWwtc3R5bGVzaGVldFwnIHVcJ2hyZWY9InN0eWxlc2hlZXQuY3NzIlwnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxXSwgIkNvbW1lbnQ6IHUnIGNvbW1lbnQgZGF0YSAnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsyXSwgIk5vdGF0aW9uIGRlY2xhcmVkOiAodSdub3RhdGlvbicsIE5vbmUsIHUnbm90YXRpb24uanBlZycsIE5vbmUpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFszXSwgIlVucGFyc2VkIGVudGl0eSBkZWNsOiAodSd1bnBhcnNlZF9lbnRpdHknLCBOb25lLCB1J2VudGl0eS5maWxlJywgTm9uZSwgdSdub3RhdGlvbicpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs0XSwgIlN0YXJ0IGVsZW1lbnQ6IHUncm9vdCcge3UnYXR0cjEnOiB1J3ZhbHVlMScsIHUnYXR0cjInOiB1J3ZhbHVlMlxcdTFmNDAnfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbNV0sICJOUyBkZWNsOiB1J215bnMnIHUnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzZdLCAiU3RhcnQgZWxlbWVudDogdSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIHt9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs3XSwgIkNoYXJhY3RlciBkYXRhOiB1J0NvbnRlbnRzIG9mIHN1YmVsZW1lbnRzJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbOF0sICJFbmQgZWxlbWVudDogdSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFs5XSwgIkVuZCBvZiBOUyBkZWNsOiB1J215bnMnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxMF0sICJTdGFydCBlbGVtZW50OiB1J3N1YjInIHt9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxMV0sICdTdGFydCBvZiBDREFUQSBzZWN0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxMl0sICJDaGFyYWN0ZXIgZGF0YTogdSdjb250ZW50cyBvZiBDREFUQSBzZWN0aW9uJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTNdLCAnRW5kIG9mIENEQVRBIHNlY3Rpb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzE0XSwgIkVuZCBlbGVtZW50OiB1J3N1YjInIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxNV0sICJFeHRlcm5hbCBlbnRpdHkgcmVmOiAoTm9uZSwgdSdlbnRpdHkuZmlsZScsIE5vbmUpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxNl0sICJFbmQgZWxlbWVudDogdSdyb290JyIpCisKKyAgICAgICAgIyBJc3N1ZSA0ODc3OiBleHBhdC5QYXJzZUZpbGUgY2F1c2VzIHNlZ2ZhdWx0IG9uIGEgY2xvc2VkIGZpbGUuCisgICAgICAgIGZwID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAnd2InKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXJzZXIuUGFyc2VGaWxlKGZwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisKK2NsYXNzIE5hbWVzcGFjZVNlcGFyYXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2xlZ2FsKHNlbGYpOgorICAgICAgICAjIFRlc3RzIHRoYXQgbWFrZSBzdXJlIHdlIGdldCBlcnJvcnMgd2hlbiB0aGUgbmFtZXNwYWNlX3NlcGFyYXRvciB2YWx1ZQorICAgICAgICAjIGlzIGlsbGVnYWwsIGFuZCB0aGF0IHdlIGRvbid0IGZvciBnb29kIHZhbHVlczoKKyAgICAgICAgZXhwYXQuUGFyc2VyQ3JlYXRlKCkKKyAgICAgICAgZXhwYXQuUGFyc2VyQ3JlYXRlKG5hbWVzcGFjZV9zZXBhcmF0b3I9Tm9uZSkKKyAgICAgICAgZXhwYXQuUGFyc2VyQ3JlYXRlKG5hbWVzcGFjZV9zZXBhcmF0b3I9JyAnKQorCisgICAgZGVmIHRlc3RfaWxsZWdhbChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhwYXQuUGFyc2VyQ3JlYXRlKG5hbWVzcGFjZV9zZXBhcmF0b3I9NDIpCisgICAgICAgICAgICBzZWxmLmZhaWwoKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksCisgICAgICAgICAgICAgICAgJ1BhcnNlckNyZWF0ZSgpIGFyZ3VtZW50IDIgbXVzdCBiZSBzdHJpbmcgb3IgTm9uZSwgbm90IGludCcpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhwYXQuUGFyc2VyQ3JlYXRlKG5hbWVzcGFjZV9zZXBhcmF0b3I9J3RvbyBsb25nJykKKyAgICAgICAgICAgIHNlbGYuZmFpbCgpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksCisgICAgICAgICAgICAgICAgJ25hbWVzcGFjZV9zZXBhcmF0b3IgbXVzdCBiZSBhdCBtb3N0IG9uZSBjaGFyYWN0ZXIsIG9taXR0ZWQsIG9yIE5vbmUnKQorCisgICAgZGVmIHRlc3RfemVyb19sZW5ndGgoc2VsZik6CisgICAgICAgICMgUGFyc2VyQ3JlYXRlKCkgbmVlZHMgdG8gYWNjZXB0IGEgbmFtZXNwYWNlX3NlcGFyYXRvciBvZiB6ZXJvIGxlbmd0aAorICAgICAgICAjIHRvIHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cyBvZiBSREYgYXBwbGljYXRpb25zIHRoYXQgYXJlIHJlcXVpcmVkCisgICAgICAgICMgdG8gc2ltcGx5IGdsdWUgdG9nZXRoZXIgdGhlIG5hbWVzcGFjZSBVUkkgYW5kIHRoZSBsb2NhbG5hbWUuICBUaG91Z2gKKyAgICAgICAgIyBjb25zaWRlcmVkIGEgd2FydCBvZiB0aGUgUkRGIHNwZWNpZmljYXRpb25zLCBpdCBuZWVkcyB0byBiZSBzdXBwb3J0ZWQuCisgICAgICAgICMKKyAgICAgICAgIyBTZWUgWE1MLVNJRyBtYWlsaW5nIGxpc3QgdGhyZWFkIHN0YXJ0aW5nIHdpdGgKKyAgICAgICAgIyBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC94bWwtc2lnLzIwMDEtQXByaWwvMDA1MjAyLmh0bWwKKyAgICAgICAgIworICAgICAgICBleHBhdC5QYXJzZXJDcmVhdGUobmFtZXNwYWNlX3NlcGFyYXRvcj0nJykgIyB0b28gc2hvcnQKKworCitjbGFzcyBJbnRlcm5pbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBpbnRlcm5pbmcgbWFjaGluZXJ5LgorICAgICAgICBwID0gZXhwYXQuUGFyc2VyQ3JlYXRlKCkKKyAgICAgICAgTCA9IFtdCisgICAgICAgIGRlZiBjb2xsZWN0b3IobmFtZSwgKmFyZ3MpOgorICAgICAgICAgICAgTC5hcHBlbmQobmFtZSkKKyAgICAgICAgcC5TdGFydEVsZW1lbnRIYW5kbGVyID0gY29sbGVjdG9yCisgICAgICAgIHAuRW5kRWxlbWVudEhhbmRsZXIgPSBjb2xsZWN0b3IKKyAgICAgICAgcC5QYXJzZSgiPGU+IDxlLz4gPGU+PC9lPiA8L2U+IiwgMSkKKyAgICAgICAgdGFnID0gTFswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihMKSwgNikKKyAgICAgICAgZm9yIGVudHJ5IGluIEw6CisgICAgICAgICAgICAjIEwgc2hvdWxkIGhhdmUgdGhlIHNhbWUgc3RyaW5nIHJlcGVhdGVkIG92ZXIgYW5kIG92ZXIuCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGFnIGlzIGVudHJ5KQorCisKK2NsYXNzIEJ1ZmZlclRleHRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc3R1ZmYgPSBbXQorICAgICAgICBzZWxmLnBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCisgICAgICAgIHNlbGYucGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQorICAgICAgICBzZWxmLnBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IHNlbGYuQ2hhcmFjdGVyRGF0YUhhbmRsZXIKKworICAgIGRlZiBjaGVjayhzZWxmLCBleHBlY3RlZCwgbGFiZWwpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3R1ZmYsIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICIlc1xuc3R1ZmYgICAgPSAlclxuZXhwZWN0ZWQgPSAlciIKKyAgICAgICAgICAgICAgICAlIChsYWJlbCwgc2VsZi5zdHVmZiwgbWFwKHVuaWNvZGUsIGV4cGVjdGVkKSkpCisKKyAgICBkZWYgQ2hhcmFjdGVyRGF0YUhhbmRsZXIoc2VsZiwgdGV4dCk6CisgICAgICAgIHNlbGYuc3R1ZmYuYXBwZW5kKHRleHQpCisKKyAgICBkZWYgU3RhcnRFbGVtZW50SGFuZGxlcihzZWxmLCBuYW1lLCBhdHRycyk6CisgICAgICAgIHNlbGYuc3R1ZmYuYXBwZW5kKCI8JXM+IiAlIG5hbWUpCisgICAgICAgIGJ0ID0gYXR0cnMuZ2V0KCJidWZmZXItdGV4dCIpCisgICAgICAgIGlmIGJ0ID09ICJ5ZXMiOgorICAgICAgICAgICAgc2VsZi5wYXJzZXIuYnVmZmVyX3RleHQgPSAxCisgICAgICAgIGVsaWYgYnQgPT0gIm5vIjoKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMAorCisgICAgZGVmIEVuZEVsZW1lbnRIYW5kbGVyKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLnN0dWZmLmFwcGVuZCgiPC8lcz4iICUgbmFtZSkKKworICAgIGRlZiBDb21tZW50SGFuZGxlcihzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5zdHVmZi5hcHBlbmQoIjwhLS0lcy0tPiIgJSBkYXRhKQorCisgICAgZGVmIHNldEhhbmRsZXJzKHNlbGYsIGhhbmRsZXJzPVtdKToKKyAgICAgICAgZm9yIG5hbWUgaW4gaGFuZGxlcnM6CisgICAgICAgICAgICBzZXRhdHRyKHNlbGYucGFyc2VyLCBuYW1lLCBnZXRhdHRyKHNlbGYsIG5hbWUpKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF90b19kaXNhYmxlZChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwYXJzZXIuYnVmZmVyX3RleHQpCisKKyAgICBkZWYgdGVzdF9idWZmZXJpbmdfZW5hYmxlZChzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgYnVmZmVyaW5nIGlzIHR1cm5lZCBvbgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXJzZXIuYnVmZmVyX3RleHQpCisgICAgICAgIHNlbGYucGFyc2VyLlBhcnNlKCI8YT4xPGIvPjI8Yy8+MzwvYT4iLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3R1ZmYsIFsnMTIzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgImJ1ZmZlcmVkIHRleHQgbm90IHByb3Blcmx5IGNvbGxhcHNlZCIpCisKKyAgICBkZWYgdGVzdDEoc2VsZik6CisgICAgICAgICMgWFhYIFRoaXMgdGVzdCBleHBvc2VzIG1vcmUgZGV0YWlsIG9mIEV4cGF0J3MgdGV4dCBjaHVua2luZyB0aGFuIHdlCisgICAgICAgICMgWFhYIGxpa2UsIGJ1dCBpdCB0ZXN0cyB3aGF0IHdlIG5lZWQgdG8gY29uY2lzZWx5LgorICAgICAgICBzZWxmLnNldEhhbmRsZXJzKFsiU3RhcnRFbGVtZW50SGFuZGxlciJdKQorICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiPGE+MTxiIGJ1ZmZlci10ZXh0PSdubycvPjJcbjM8YyBidWZmZXItdGV4dD0neWVzJy8+NFxuNTwvYT4iLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3R1ZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyI8YT4iLCAiMSIsICI8Yj4iLCAiMiIsICJcbiIsICIzIiwgIjxjPiIsICI0XG41Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgImJ1ZmZlcmluZyBjb250cm9sIG5vdCByZWFjdGluZyBhcyBleHBlY3RlZCIpCisKKyAgICBkZWYgdGVzdDIoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VyLlBhcnNlKCI8YT4xPGIvPiZsdDsyJmd0OzxjLz4mIzMyO1xuJiN4MjA7MzwvYT4iLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3R1ZmYsIFsiMTwyPiBcbiAzIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgImJ1ZmZlcmVkIHRleHQgbm90IHByb3Blcmx5IGNvbGxhcHNlZCIpCisKKyAgICBkZWYgdGVzdDMoc2VsZik6CisgICAgICAgIHNlbGYuc2V0SGFuZGxlcnMoWyJTdGFydEVsZW1lbnRIYW5kbGVyIl0pCisgICAgICAgIHNlbGYucGFyc2VyLlBhcnNlKCI8YT4xPGIvPjI8Yy8+MzwvYT4iLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3R1ZmYsIFsiPGE+IiwgIjEiLCAiPGI+IiwgIjIiLCAiPGM+IiwgIjMiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1ZmZlcmVkIHRleHQgbm90IHByb3Blcmx5IHNwbGl0IikKKworICAgIGRlZiB0ZXN0NChzZWxmKToKKyAgICAgICAgc2VsZi5zZXRIYW5kbGVycyhbIlN0YXJ0RWxlbWVudEhhbmRsZXIiLCAiRW5kRWxlbWVudEhhbmRsZXIiXSkKKyAgICAgICAgc2VsZi5wYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBOb25lCisgICAgICAgIHNlbGYucGFyc2VyLlBhcnNlKCI8YT4xPGIvPjI8Yy8+MzwvYT4iLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3R1ZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyI8YT4iLCAiPGI+IiwgIjwvYj4iLCAiPGM+IiwgIjwvYz4iLCAiPC9hPiJdKQorCisgICAgZGVmIHRlc3Q1KHNlbGYpOgorICAgICAgICBzZWxmLnNldEhhbmRsZXJzKFsiU3RhcnRFbGVtZW50SGFuZGxlciIsICJFbmRFbGVtZW50SGFuZGxlciJdKQorICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiPGE+MTxiPjwvYj4yPGMvPjM8L2E+IiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0dWZmLAorICAgICAgICAgICAgWyI8YT4iLCAiMSIsICI8Yj4iLCAiPC9iPiIsICIyIiwgIjxjPiIsICI8L2M+IiwgIjMiLCAiPC9hPiJdKQorCisgICAgZGVmIHRlc3Q2KHNlbGYpOgorICAgICAgICBzZWxmLnNldEhhbmRsZXJzKFsiQ29tbWVudEhhbmRsZXIiLCAiRW5kRWxlbWVudEhhbmRsZXIiLAorICAgICAgICAgICAgICAgICAgICAiU3RhcnRFbGVtZW50SGFuZGxlciJdKQorICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiPGE+MTxiLz4yPGM+PC9jPjM0NTwvYT4gIiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0dWZmLAorICAgICAgICAgICAgWyI8YT4iLCAiMSIsICI8Yj4iLCAiPC9iPiIsICIyIiwgIjxjPiIsICI8L2M+IiwgIjM0NSIsICI8L2E+Il0sCisgICAgICAgICAgICAiYnVmZmVyZWQgdGV4dCBub3QgcHJvcGVybHkgc3BsaXQiKQorCisgICAgZGVmIHRlc3Q3KHNlbGYpOgorICAgICAgICBzZWxmLnNldEhhbmRsZXJzKFsiQ29tbWVudEhhbmRsZXIiLCAiRW5kRWxlbWVudEhhbmRsZXIiLAorICAgICAgICAgICAgICAgICAgICAiU3RhcnRFbGVtZW50SGFuZGxlciJdKQorICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiPGE+MTxiLz4yPGM+PC9jPjM8IS0tYWJjLS0+NDwhLS1kZWYtLT41PC9hPiAiLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3R1ZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyI8YT4iLCAiMSIsICI8Yj4iLCAiPC9iPiIsICIyIiwgIjxjPiIsICI8L2M+IiwgIjMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiPCEtLWFiYy0tPiIsICI0IiwgIjwhLS1kZWYtLT4iLCAiNSIsICI8L2E+Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgImJ1ZmZlcmVkIHRleHQgbm90IHByb3Blcmx5IHNwbGl0IikKKworCisjIFRlc3QgaGFuZGxpbmcgb2YgZXhjZXB0aW9uIGZyb20gY2FsbGJhY2s6CitjbGFzcyBIYW5kbGVyRXhjZXB0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIFN0YXJ0RWxlbWVudEhhbmRsZXIoc2VsZiwgbmFtZSwgYXR0cnMpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IobmFtZSkKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IHNlbGYuU3RhcnRFbGVtZW50SGFuZGxlcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZXIuUGFyc2UoIjxhPjxiPjxjLz48L2I+PC9hPiIsIDEpCisgICAgICAgICAgICBzZWxmLmZhaWwoKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sICdhJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIFJ1bnRpbWVFcnJvciBmb3IgZWxlbWVudCAnYScsIGJ1dCIgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZm91bmQgJXIiICUgZS5hcmdzWzBdKQorCisKKyMgVGVzdCBDdXJyZW50KiBtZW1iZXJzOgorY2xhc3MgUG9zaXRpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgU3RhcnRFbGVtZW50SGFuZGxlcihzZWxmLCBuYW1lLCBhdHRycyk6CisgICAgICAgIHNlbGYuY2hlY2tfcG9zKCdzJykKKworICAgIGRlZiBFbmRFbGVtZW50SGFuZGxlcihzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5jaGVja19wb3MoJ2UnKQorCisgICAgZGVmIGNoZWNrX3BvcyhzZWxmLCBldmVudCk6CisgICAgICAgIHBvcyA9IChldmVudCwKKyAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLkN1cnJlbnRCeXRlSW5kZXgsCisgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5DdXJyZW50TGluZU51bWJlciwKKyAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLkN1cnJlbnRDb2x1bW5OdW1iZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnVwdG8gPCBsZW4oc2VsZi5leHBlY3RlZF9saXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICd0b28gbWFueSBwYXJzZXIgZXZlbnRzJykKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmV4cGVjdGVkX2xpc3Rbc2VsZi51cHRvXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcywgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIHBvc2l0aW9uICVzLCBnb3QgcG9zaXRpb24gJXMnICUocG9zLCBleHBlY3RlZCkpCisgICAgICAgIHNlbGYudXB0byArPSAxCisKKyAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICBzZWxmLnBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gc2VsZi5TdGFydEVsZW1lbnRIYW5kbGVyCisgICAgICAgIHNlbGYucGFyc2VyLkVuZEVsZW1lbnRIYW5kbGVyID0gc2VsZi5FbmRFbGVtZW50SGFuZGxlcgorICAgICAgICBzZWxmLnVwdG8gPSAwCisgICAgICAgIHNlbGYuZXhwZWN0ZWRfbGlzdCA9IFsoJ3MnLCAwLCAxLCAwKSwgKCdzJywgNSwgMiwgMSksICgncycsIDExLCAzLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZScsIDE1LCAzLCA2KSwgKCdlJywgMTcsIDQsIDEpLCAoJ2UnLCAyMiwgNSwgMCldCisKKyAgICAgICAgeG1sID0gJzxhPlxuIDxiPlxuICA8Yy8+XG4gPC9iPlxuPC9hPicKKyAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoeG1sLCAxKQorCisKK2NsYXNzIHNmMTI5NjQzM1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3BhcnNlX29ubHlfeG1sX2RhdGEoc2VsZik6CisgICAgICAgICMgaHR0cDovL3B5dGhvbi5vcmcvc2YvMTI5NjQzMworICAgICAgICAjCisgICAgICAgIHhtbCA9ICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc284ODU5Jz8+PHM+JXM8L3M+IiAlICgnYScgKiAxMDI1KQorICAgICAgICAjIHRoaXMgb25lIGRvZXNuJ3QgY3Jhc2gKKyAgICAgICAgI3htbCA9ICI8P3htbCB2ZXJzaW9uPScxLjAnPz48cz4lczwvcz4iICUgKCdhJyAqIDEwMDAwKQorCisgICAgICAgIGNsYXNzIFNwZWNpZmljRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVmIGhhbmRsZXIodGV4dCk6CisgICAgICAgICAgICByYWlzZSBTcGVjaWZpY0V4Y2VwdGlvbgorCisgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCisgICAgICAgIHBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IGhhbmRsZXIKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHBhcnNlci5QYXJzZSwgeG1sKQorCitjbGFzcyBDaGFyZGF0YUJ1ZmZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIHRlc3Qgc2V0dGluZyBvZiBjaGFyZGF0YSBidWZmZXIgc2l6ZQorICAgICIiIgorCisgICAgZGVmIHRlc3RfMTAyNV9ieXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNtYWxsX2J1ZmZlcl90ZXN0KDEwMjUpLCAyKQorCisgICAgZGVmIHRlc3RfMTAwMF9ieXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNtYWxsX2J1ZmZlcl90ZXN0KDEwMDApLCAxKQorCisgICAgZGVmIHRlc3Rfd3Jvbmdfc2l6ZShzZWxmKToKKyAgICAgICAgcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKCkKKyAgICAgICAgcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQorICAgICAgICBkZWYgZihzaXplKToKKyAgICAgICAgICAgIHBhcnNlci5idWZmZXJfc2l6ZSA9IHNpemUKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIHN5cy5tYXhpbnQrMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZiwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYsIDApCisKKyAgICBkZWYgdGVzdF91bmNoYW5nZWRfc2l6ZShzZWxmKToKKyAgICAgICAgeG1sMSA9ICgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvODg1OSc/PjxzPiVzIiAlICgnYScgKiA1MTIpKQorICAgICAgICB4bWwyID0gJ2EnKjUxMiArICc8L3M+JworICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICBwYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBzZWxmLmNvdW50aW5nX2hhbmRsZXIKKyAgICAgICAgcGFyc2VyLmJ1ZmZlcl9zaXplID0gNTEyCisgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKKworICAgICAgICAjIEZlZWQgNTEyIGJ5dGVzIG9mIGNoYXJhY3RlciBkYXRhOiB0aGUgaGFuZGxlciBzaG91bGQgYmUgY2FsbGVkCisgICAgICAgICMgb25jZS4KKyAgICAgICAgc2VsZi5uID0gMAorICAgICAgICBwYXJzZXIuUGFyc2UoeG1sMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm4sIDEpCisKKyAgICAgICAgIyBSZWFzc2lnbiB0byBidWZmZXJfc2l6ZSwgYnV0IGFzc2lnbiB0aGUgc2FtZSBzaXplLgorICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgPSBwYXJzZXIuYnVmZmVyX3NpemUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm4sIDEpCisKKyAgICAgICAgIyBUcnkgcGFyc2luZyByZXN0IG9mIHRoZSBkb2N1bWVudAorICAgICAgICBwYXJzZXIuUGFyc2UoeG1sMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm4sIDIpCisKKworICAgIGRlZiB0ZXN0X2Rpc2FibGluZ19idWZmZXIoc2VsZik6CisgICAgICAgIHhtbDEgPSAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvODg1OSc/PjxhPiVzIiAlICgnYScgKiA1MTIpCisgICAgICAgIHhtbDIgPSAoJ2InICogMTAyNCkKKyAgICAgICAgeG1sMyA9ICIlczwvYT4iICUgKCdjJyAqIDEwMjQpCisgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCisgICAgICAgIHBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IHNlbGYuY291bnRpbmdfaGFuZGxlcgorICAgICAgICBwYXJzZXIuYnVmZmVyX3RleHQgPSAxCisgICAgICAgIHBhcnNlci5idWZmZXJfc2l6ZSA9IDEwMjQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuYnVmZmVyX3NpemUsIDEwMjQpCisKKyAgICAgICAgIyBQYXJzZSBvbmUgY2h1bmsgb2YgWE1MCisgICAgICAgIHNlbGYubiA9IDAKKyAgICAgICAgcGFyc2VyLlBhcnNlKHhtbDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmJ1ZmZlcl9zaXplLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubiwgMSkKKworICAgICAgICAjIFR1cm4gb2ZmIGJ1ZmZlcmluZyBhbmQgcGFyc2UgdGhlIG5leHQgY2h1bmsuCisgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwYXJzZXIuYnVmZmVyX3RleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmJ1ZmZlcl9zaXplLCAxMDI0KQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBwYXJzZXIuUGFyc2UoeG1sMiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm4sIDExKQorCisgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhcnNlci5idWZmZXJfdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuYnVmZmVyX3NpemUsIDEwMjQpCisgICAgICAgIHBhcnNlci5QYXJzZSh4bWwzLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubiwgMTIpCisKKworCisgICAgZGVmIG1ha2VfZG9jdW1lbnQoc2VsZiwgYnl0ZXMpOgorICAgICAgICByZXR1cm4gKCI8P3htbCB2ZXJzaW9uPScxLjAnPz48dGFnPiIgKyBieXRlcyAqICdhJyArICc8L3RhZz4nKQorCisgICAgZGVmIGNvdW50aW5nX2hhbmRsZXIoc2VsZiwgdGV4dCk6CisgICAgICAgIHNlbGYubiArPSAxCisKKyAgICBkZWYgc21hbGxfYnVmZmVyX3Rlc3Qoc2VsZiwgYnVmZmVyX2xlbik6CisgICAgICAgIHhtbCA9ICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc284ODU5Jz8+PHM+JXM8L3M+IiAlICgnYScgKiBidWZmZXJfbGVuKQorICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICBwYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBzZWxmLmNvdW50aW5nX2hhbmRsZXIKKyAgICAgICAgcGFyc2VyLmJ1ZmZlcl9zaXplID0gMTAyNAorICAgICAgICBwYXJzZXIuYnVmZmVyX3RleHQgPSAxCisKKyAgICAgICAgc2VsZi5uID0gMAorICAgICAgICBwYXJzZXIuUGFyc2UoeG1sKQorICAgICAgICByZXR1cm4gc2VsZi5uCisKKyAgICBkZWYgdGVzdF9jaGFuZ2Vfc2l6ZV8xKHNlbGYpOgorICAgICAgICB4bWwxID0gIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzbzg4NTknPz48YT48cz4lcyIgJSAoJ2EnICogMTAyNCkKKyAgICAgICAgeG1sMiA9ICJhYWE8L3M+PHM+JXM8L3M+PC9hPiIgJSAoJ2EnICogMTAyNSkKKyAgICAgICAgcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKCkKKyAgICAgICAgcGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyID0gc2VsZi5jb3VudGluZ19oYW5kbGVyCisgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKKyAgICAgICAgcGFyc2VyLmJ1ZmZlcl9zaXplID0gMTAyNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5idWZmZXJfc2l6ZSwgMTAyNCkKKworICAgICAgICBzZWxmLm4gPSAwCisgICAgICAgIHBhcnNlci5QYXJzZSh4bWwxLCAwKQorICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgKj0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5idWZmZXJfc2l6ZSwgMjA0OCkKKyAgICAgICAgcGFyc2VyLlBhcnNlKHhtbDIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uLCAyKQorCisgICAgZGVmIHRlc3RfY2hhbmdlX3NpemVfMihzZWxmKToKKyAgICAgICAgeG1sMSA9ICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc284ODU5Jz8+PGE+YTxzPiVzIiAlICgnYScgKiAxMDIzKQorICAgICAgICB4bWwyID0gImFhYTwvcz48cz4lczwvcz48L2E+IiAlICgnYScgKiAxMDI1KQorICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICBwYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBzZWxmLmNvdW50aW5nX2hhbmRsZXIKKyAgICAgICAgcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQorICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgPSAyMDQ4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmJ1ZmZlcl9zaXplLCAyMDQ4KQorCisgICAgICAgIHNlbGYubj0wCisgICAgICAgIHBhcnNlci5QYXJzZSh4bWwxLCAwKQorICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgLy89IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuYnVmZmVyX3NpemUsIDEwMjQpCisgICAgICAgIHBhcnNlci5QYXJzZSh4bWwyLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubiwgNCkKKworY2xhc3MgTWFsZm9ybWVkSW5wdXRUZXh0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdDEoc2VsZik6CisgICAgICAgIHhtbCA9ICJcMFxyXG4iCisgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcnNlci5QYXJzZSh4bWwsIFRydWUpCisgICAgICAgICAgICBzZWxmLmZhaWwoKQorICAgICAgICBleGNlcHQgZXhwYXQuRXhwYXRFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICd1bmNsb3NlZCB0b2tlbjogbGluZSAyLCBjb2x1bW4gMCcpCisKKyAgICBkZWYgdGVzdDIoc2VsZik6CisgICAgICAgIHhtbCA9ICI8P3htbCB2ZXJzaW9uXHhjMlx4ODU9JzEuMCc/PlxyXG4iCisgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcnNlci5QYXJzZSh4bWwsIFRydWUpCisgICAgICAgICAgICBzZWxmLmZhaWwoKQorICAgICAgICBleGNlcHQgZXhwYXQuRXhwYXRFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICdYTUwgZGVjbGFyYXRpb24gbm90IHdlbGwtZm9ybWVkOiBsaW5lIDEsIGNvbHVtbiAxNCcpCisKK2NsYXNzIEZvcmVpZ25EVERUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiCisgICAgVGVzdHMgZm9yIHRoZSBVc2VGb3JlaWduRFREIG1ldGhvZCBvZiBleHBhdCBwYXJzZXIgb2JqZWN0cy4KKyAgICAiIiIKKyAgICBkZWYgdGVzdF91c2VfZm9yZWlnbl9kdGQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBJZiBVc2VGb3JlaWduRFREIGlzIHBhc3NlZCBUcnVlIGFuZCBhIGRvY3VtZW50IHdpdGhvdXQgYW4gZXh0ZXJuYWwKKyAgICAgICAgZW50aXR5IHJlZmVyZW5jZSBpcyBwYXJzZWQsIEV4dGVybmFsRW50aXR5UmVmSGFuZGxlciBpcyBmaXJzdCBjYWxsZWQKKyAgICAgICAgd2l0aCBOb25lIGZvciB0aGUgcHVibGljIGFuZCBzeXN0ZW0gaWRzLgorICAgICAgICAiIiIKKyAgICAgICAgaGFuZGxlcl9jYWxsX2FyZ3MgPSBbXQorICAgICAgICBkZWYgcmVzb2x2ZV9lbnRpdHkoY29udGV4dCwgYmFzZSwgc3lzdGVtX2lkLCBwdWJsaWNfaWQpOgorICAgICAgICAgICAgaGFuZGxlcl9jYWxsX2FyZ3MuYXBwZW5kKChwdWJsaWNfaWQsIHN5c3RlbV9pZCkpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCisgICAgICAgIHBhcnNlci5Vc2VGb3JlaWduRFREKFRydWUpCisgICAgICAgIHBhcnNlci5TZXRQYXJhbUVudGl0eVBhcnNpbmcoZXhwYXQuWE1MX1BBUkFNX0VOVElUWV9QQVJTSU5HX0FMV0FZUykKKyAgICAgICAgcGFyc2VyLkV4dGVybmFsRW50aXR5UmVmSGFuZGxlciA9IHJlc29sdmVfZW50aXR5CisgICAgICAgIHBhcnNlci5QYXJzZSgiPD94bWwgdmVyc2lvbj0nMS4wJz8+PGVsZW1lbnQvPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlcl9jYWxsX2FyZ3MsIFsoTm9uZSwgTm9uZSldKQorCisgICAgICAgICMgdGVzdCBVc2VGb3JlaWduRFREKCkgaXMgZXF1YWwgdG8gVXNlRm9yZWlnbkRURChUcnVlKQorICAgICAgICBoYW5kbGVyX2NhbGxfYXJnc1s6XSA9IFtdCisKKyAgICAgICAgcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKCkKKyAgICAgICAgcGFyc2VyLlVzZUZvcmVpZ25EVEQoKQorICAgICAgICBwYXJzZXIuU2V0UGFyYW1FbnRpdHlQYXJzaW5nKGV4cGF0LlhNTF9QQVJBTV9FTlRJVFlfUEFSU0lOR19BTFdBWVMpCisgICAgICAgIHBhcnNlci5FeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgPSByZXNvbHZlX2VudGl0eQorICAgICAgICBwYXJzZXIuUGFyc2UoIjw/eG1sIHZlcnNpb249JzEuMCc/PjxlbGVtZW50Lz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXJfY2FsbF9hcmdzLCBbKE5vbmUsIE5vbmUpXSkKKworICAgIGRlZiB0ZXN0X2lnbm9yZV91c2VfZm9yZWlnbl9kdGQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBJZiBVc2VGb3JlaWduRFREIGlzIHBhc3NlZCBUcnVlIGFuZCBhIGRvY3VtZW50IHdpdGggYW4gZXh0ZXJuYWwKKyAgICAgICAgZW50aXR5IHJlZmVyZW5jZSBpcyBwYXJzZWQsIEV4dGVybmFsRW50aXR5UmVmSGFuZGxlciBpcyBjYWxsZWQgd2l0aAorICAgICAgICB0aGUgcHVibGljIGFuZCBzeXN0ZW0gaWRzIGZyb20gdGhlIGRvY3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgaGFuZGxlcl9jYWxsX2FyZ3MgPSBbXQorICAgICAgICBkZWYgcmVzb2x2ZV9lbnRpdHkoY29udGV4dCwgYmFzZSwgc3lzdGVtX2lkLCBwdWJsaWNfaWQpOgorICAgICAgICAgICAgaGFuZGxlcl9jYWxsX2FyZ3MuYXBwZW5kKChwdWJsaWNfaWQsIHN5c3RlbV9pZCkpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCisgICAgICAgIHBhcnNlci5Vc2VGb3JlaWduRFREKFRydWUpCisgICAgICAgIHBhcnNlci5TZXRQYXJhbUVudGl0eVBhcnNpbmcoZXhwYXQuWE1MX1BBUkFNX0VOVElUWV9QQVJTSU5HX0FMV0FZUykKKyAgICAgICAgcGFyc2VyLkV4dGVybmFsRW50aXR5UmVmSGFuZGxlciA9IHJlc29sdmVfZW50aXR5CisgICAgICAgIHBhcnNlci5QYXJzZSgKKyAgICAgICAgICAgICI8P3htbCB2ZXJzaW9uPScxLjAnPz48IURPQ1RZUEUgZm9vIFBVQkxJQyAnYmFyJyAnYmF6Jz48ZWxlbWVudC8+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyX2NhbGxfYXJncywgWygiYmFyIiwgImJheiIpXSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFNldEF0dHJpYnV0ZVRlc3QsCisgICAgICAgICAgICAgICAgIFBhcnNlVGVzdCwKKyAgICAgICAgICAgICAgICAgTmFtZXNwYWNlU2VwYXJhdG9yVGVzdCwKKyAgICAgICAgICAgICAgICAgSW50ZXJuaW5nVGVzdCwKKyAgICAgICAgICAgICAgICAgQnVmZmVyVGV4dFRlc3QsCisgICAgICAgICAgICAgICAgIEhhbmRsZXJFeGNlcHRpb25UZXN0LAorICAgICAgICAgICAgICAgICBQb3NpdGlvblRlc3QsCisgICAgICAgICAgICAgICAgIHNmMTI5NjQzM1Rlc3QsCisgICAgICAgICAgICAgICAgIENoYXJkYXRhQnVmZmVyVGVzdCwKKyAgICAgICAgICAgICAgICAgTWFsZm9ybWVkSW5wdXRUZXh0LAorICAgICAgICAgICAgICAgICBGb3JlaWduRFREVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3F1ZXVlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcXVldWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRhNGFlZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3F1ZXVlLnB5CkBAIC0wLDAgKzEsMzI1IEBACisjIFNvbWUgc2ltcGxlIHF1ZXVlIG1vZHVsZSB0ZXN0cywgcGx1cyBzb21lIGZhaWx1cmUgY29uZGl0aW9ucworIyB0byBlbnN1cmUgdGhlIFF1ZXVlIGxvY2tzIHJlbWFpbiBzdGFibGUuCitpbXBvcnQgUXVldWUKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Cit0aHJlYWRpbmcgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKKworUVVFVUVfU0laRSA9IDUKKworIyBBIHRocmVhZCB0byBydW4gYSBmdW5jdGlvbiB0aGF0IHVuY2xvZ3MgYSBibG9ja2VkIFF1ZXVlLgorY2xhc3MgX1RyaWdnZXJUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZuLCBhcmdzKToKKyAgICAgICAgc2VsZi5mbiA9IGZuCisgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgc2VsZi5zdGFydGVkRXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAjIFRoZSBzbGVlcCBpc24ndCBuZWNlc3NhcnksIGJ1dCBpcyBpbnRlbmRlZCB0byBnaXZlIHRoZSBibG9ja2luZworICAgICAgICAjIGZ1bmN0aW9uIGluIHRoZSBtYWluIHRocmVhZCBhIGNoYW5jZSBhdCBhY3R1YWxseSBibG9ja2luZyBiZWZvcmUKKyAgICAgICAgIyB3ZSB1bmNsb2cgaXQuICBCdXQgaWYgdGhlIHNsZWVwIGlzIGxvbmdlciB0aGFuIHRoZSB0aW1lb3V0LWJhc2VkCisgICAgICAgICMgdGVzdHMgd2FpdCBpbiB0aGVpciBibG9ja2luZyBmdW5jdGlvbnMsIHRob3NlIHRlc3RzIHdpbGwgZmFpbC4KKyAgICAgICAgIyBTbyB3ZSBnaXZlIHRoZW0gbXVjaCBsb25nZXIgdGltZW91dCB2YWx1ZXMgY29tcGFyZWQgdG8gdGhlCisgICAgICAgICMgc2xlZXAgaGVyZSAoSSBhaW1lZCBhdCAxMCBzZWNvbmRzIGZvciBibG9ja2luZyBmdW5jdGlvbnMgLS0KKyAgICAgICAgIyB0aGV5IHNob3VsZCBuZXZlciBhY3R1YWxseSB3YWl0IHRoYXQgbG9uZyAtIHRoZXkgc2hvdWxkIG1ha2UKKyAgICAgICAgIyBwcm9ncmVzcyBhcyBzb29uIGFzIHdlIGNhbGwgc2VsZi5mbigpKS4KKyAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgICAgIHNlbGYuc3RhcnRlZEV2ZW50LnNldCgpCisgICAgICAgIHNlbGYuZm4oKnNlbGYuYXJncykKKworCisjIEV4ZWN1dGUgYSBmdW5jdGlvbiB0aGF0IGJsb2NrcywgYW5kIGluIGEgc2VwYXJhdGUgdGhyZWFkLCBhIGZ1bmN0aW9uIHRoYXQKKyMgdHJpZ2dlcnMgdGhlIHJlbGVhc2UuICBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGJsb2NraW5nIGZ1bmN0aW9uLiAgQ2F1dGlvbjoKKyMgYmxvY2tfZnVuYyBtdXN0IGd1YXJhbnRlZSB0byBibG9jayB1bnRpbCB0cmlnZ2VyX2Z1bmMgaXMgY2FsbGVkLCBhbmQKKyMgdHJpZ2dlcl9mdW5jIG11c3QgZ3VhcmFudGVlIHRvIGNoYW5nZSBxdWV1ZSBzdGF0ZSBzbyB0aGF0IGJsb2NrX2Z1bmMgY2FuIG1ha2UKKyMgZW5vdWdoIHByb2dyZXNzIHRvIHJldHVybi4gIEluIHBhcnRpY3VsYXIsIGEgYmxvY2tfZnVuYyB0aGF0IGp1c3QgcmFpc2VzIGFuCisjIGV4Y2VwdGlvbiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdHJpZ2dlcl9mdW5jIGlzIGNhbGxlZCB3aWxsIGxlYWQgdG8KKyMgdGltaW5nLWRlcGVuZGVudCBzcG9yYWRpYyBmYWlsdXJlcywgYW5kIG9uZSBvZiB0aG9zZSB3ZW50IHJhcmVseSBzZWVuIGJ1dAorIyB1bmRpYWdub3NlZCBmb3IgeWVhcnMuICBOb3cgYmxvY2tfZnVuYyBtdXN0IGJlIHVuZXhjZXB0aW9uYWwuICBJZiBibG9ja19mdW5jCisjIGlzIHN1cHBvc2VkIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiwgY2FsbCBkb19leGNlcHRpb25hbF9ibG9ja2luZ190ZXN0KCkKKyMgaW5zdGVhZC4KKworY2xhc3MgQmxvY2tpbmdUZXN0TWl4aW46CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYudCA9IE5vbmUKKworICAgIGRlZiBkb19ibG9ja2luZ190ZXN0KHNlbGYsIGJsb2NrX2Z1bmMsIGJsb2NrX2FyZ3MsIHRyaWdnZXJfZnVuYywgdHJpZ2dlcl9hcmdzKToKKyAgICAgICAgc2VsZi50ID0gX1RyaWdnZXJUaHJlYWQodHJpZ2dlcl9mdW5jLCB0cmlnZ2VyX2FyZ3MpCisgICAgICAgIHNlbGYudC5zdGFydCgpCisgICAgICAgIHNlbGYucmVzdWx0ID0gYmxvY2tfZnVuYygqYmxvY2tfYXJncykKKyAgICAgICAgIyBJZiBibG9ja19mdW5jIHJldHVybmVkIGJlZm9yZSBvdXIgdGhyZWFkIG1hZGUgdGhlIGNhbGwsIHdlIGZhaWxlZCEKKyAgICAgICAgaWYgbm90IHNlbGYudC5zdGFydGVkRXZlbnQuaXNfc2V0KCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImJsb2NraW5nIGZ1bmN0aW9uICclcicgYXBwZWFyZWQgbm90IHRvIGJsb2NrIiAlCisgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfZnVuYykKKyAgICAgICAgc2VsZi50LmpvaW4oMTApICMgbWFrZSBzdXJlIHRoZSB0aHJlYWQgdGVybWluYXRlcworICAgICAgICBpZiBzZWxmLnQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgidHJpZ2dlciBmdW5jdGlvbiAnJXInIGFwcGVhcmVkIHRvIG5vdCByZXR1cm4iICUKKyAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyX2Z1bmMpCisgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdAorCisgICAgIyBDYWxsIHRoaXMgaW5zdGVhZCBpZiBibG9ja19mdW5jIGlzIHN1cHBvc2VkIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbi4KKyAgICBkZWYgZG9fZXhjZXB0aW9uYWxfYmxvY2tpbmdfdGVzdChzZWxmLGJsb2NrX2Z1bmMsIGJsb2NrX2FyZ3MsIHRyaWdnZXJfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcl9hcmdzLCBleHBlY3RlZF9leGNlcHRpb25fY2xhc3MpOgorICAgICAgICBzZWxmLnQgPSBfVHJpZ2dlclRocmVhZCh0cmlnZ2VyX2Z1bmMsIHRyaWdnZXJfYXJncykKKyAgICAgICAgc2VsZi50LnN0YXJ0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJsb2NrX2Z1bmMoKmJsb2NrX2FyZ3MpCisgICAgICAgICAgICBleGNlcHQgZXhwZWN0ZWRfZXhjZXB0aW9uX2NsYXNzOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIG9mIGtpbmQgJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2V4Y2VwdGlvbl9jbGFzcykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYudC5qb2luKDEwKSAjIG1ha2Ugc3VyZSB0aGUgdGhyZWFkIHRlcm1pbmF0ZXMKKyAgICAgICAgICAgIGlmIHNlbGYudC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgidHJpZ2dlciBmdW5jdGlvbiAnJXInIGFwcGVhcmVkIHRvIG5vdCByZXR1cm4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJfZnVuYykKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnQuc3RhcnRlZEV2ZW50LmlzX3NldCgpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgidHJpZ2dlciB0aHJlYWQgZW5kZWQgYnV0IGV2ZW50IG5ldmVyIHNldCIpCisKKworY2xhc3MgQmFzZVF1ZXVlVGVzdChCbG9ja2luZ1Rlc3RNaXhpbik6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmN1bSA9IDAKKyAgICAgICAgc2VsZi5jdW1sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorCisgICAgZGVmIHNpbXBsZV9xdWV1ZV90ZXN0KHNlbGYsIHEpOgorICAgICAgICBpZiBub3QgcS5lbXB0eSgpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiQ2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggYW4gZW1wdHkgcXVldWUiCisgICAgICAgICMgSSBndWVzcyB3ZSBiZXR0ZXIgY2hlY2sgdGhpbmdzIGFjdHVhbGx5IHF1ZXVlIGNvcnJlY3RseSBhIGxpdHRsZSA6KQorICAgICAgICBxLnB1dCgxMTEpCisgICAgICAgIHEucHV0KDMzMykKKyAgICAgICAgcS5wdXQoMjIyKQorICAgICAgICB0YXJnZXRfb3JkZXIgPSBkaWN0KFF1ZXVlID0gWzExMSwgMzMzLCAyMjJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpZm9RdWV1ZSA9IFsyMjIsIDMzMywgMTExXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eVF1ZXVlID0gWzExMSwgMjIyLCAzMzNdKQorICAgICAgICBhY3R1YWxfb3JkZXIgPSBbcS5nZXQoKSwgcS5nZXQoKSwgcS5nZXQoKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfb3JkZXIsIHRhcmdldF9vcmRlcltxLl9fY2xhc3NfXy5fX25hbWVfX10sCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRpZG4ndCBzZWVtIHRvIHF1ZXVlIHRoZSBjb3JyZWN0IGRhdGEhIikKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoUVVFVUVfU0laRS0xKToKKyAgICAgICAgICAgIHEucHV0KGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBub3QgYmUgZW1wdHkiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHEuZnVsbCgpLCAiUXVldWUgc2hvdWxkIG5vdCBiZSBmdWxsIikKKyAgICAgICAgbGFzdCA9IDIgKiBRVUVVRV9TSVpFCisgICAgICAgIGZ1bGwgPSAzICogMiAqIFFVRVVFX1NJWkUKKyAgICAgICAgcS5wdXQobGFzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZnVsbCgpLCAiUXVldWUgc2hvdWxkIGJlIGZ1bGwiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBxLnB1dChmdWxsLCBibG9jaz0wKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgYXBwZWFyIHRvIGJsb2NrIHdpdGggYSBmdWxsIHF1ZXVlIikKKyAgICAgICAgZXhjZXB0IFF1ZXVlLkZ1bGw6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHEucHV0KGZ1bGwsIHRpbWVvdXQ9MC4wMSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IGFwcGVhciB0byB0aW1lLW91dCB3aXRoIGEgZnVsbCBxdWV1ZSIpCisgICAgICAgIGV4Y2VwdCBRdWV1ZS5GdWxsOgorICAgICAgICAgICAgcGFzcworICAgICAgICAjIFRlc3QgYSBibG9ja2luZyBwdXQKKyAgICAgICAgc2VsZi5kb19ibG9ja2luZ190ZXN0KHEucHV0LCAoZnVsbCwpLCBxLmdldCwgKCkpCisgICAgICAgIHNlbGYuZG9fYmxvY2tpbmdfdGVzdChxLnB1dCwgKGZ1bGwsIFRydWUsIDEwKSwgcS5nZXQsICgpKQorICAgICAgICAjIEVtcHR5IGl0CisgICAgICAgIGZvciBpIGluIHJhbmdlKFFVRVVFX1NJWkUpOgorICAgICAgICAgICAgcS5nZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5lbXB0eSgpLCAiUXVldWUgc2hvdWxkIGJlIGVtcHR5IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcS5nZXQoYmxvY2s9MCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IGFwcGVhciB0byBibG9jayB3aXRoIGFuIGVtcHR5IHF1ZXVlIikKKyAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBxLmdldCh0aW1lb3V0PTAuMDEpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkRpZG4ndCBhcHBlYXIgdG8gdGltZS1vdXQgd2l0aCBhbiBlbXB0eSBxdWV1ZSIpCisgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyBUZXN0IGEgYmxvY2tpbmcgZ2V0CisgICAgICAgIHNlbGYuZG9fYmxvY2tpbmdfdGVzdChxLmdldCwgKCksIHEucHV0LCAoJ2VtcHR5JywpKQorICAgICAgICBzZWxmLmRvX2Jsb2NraW5nX3Rlc3QocS5nZXQsIChUcnVlLCAxMCksIHEucHV0LCAoJ2VtcHR5JywpKQorCisKKyAgICBkZWYgd29ya2VyKHNlbGYsIHEpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgeCA9IHEuZ2V0KCkKKyAgICAgICAgICAgIGlmIHggaXMgTm9uZToKKyAgICAgICAgICAgICAgICBxLnRhc2tfZG9uZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICB3aXRoIHNlbGYuY3VtbG9jazoKKyAgICAgICAgICAgICAgICBzZWxmLmN1bSArPSB4CisgICAgICAgICAgICBxLnRhc2tfZG9uZSgpCisKKyAgICBkZWYgcXVldWVfam9pbl90ZXN0KHNlbGYsIHEpOgorICAgICAgICBzZWxmLmN1bSA9IDAKKyAgICAgICAgZm9yIGkgaW4gKDAsMSk6CisgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLndvcmtlciwgYXJncz0ocSwpKS5zdGFydCgpCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDApOgorICAgICAgICAgICAgcS5wdXQoaSkKKyAgICAgICAgcS5qb2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN1bSwgc3VtKHJhbmdlKDEwMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJxLmpvaW4oKSBkaWQgbm90IGJsb2NrIHVudGlsIGFsbCB0YXNrcyB3ZXJlIGRvbmUiKQorICAgICAgICBmb3IgaSBpbiAoMCwxKToKKyAgICAgICAgICAgIHEucHV0KE5vbmUpICAgICAgICAgIyBpbnN0cnVjdCB0aGUgdGhyZWFkcyB0byBjbG9zZQorICAgICAgICBxLmpvaW4oKSAgICAgICAgICAgICAgICAjIHZlcmlmeSB0aGF0IHlvdSBjYW4gam9pbiB0d2ljZQorCisgICAgZGVmIHRlc3RfcXVldWVfdGFza19kb25lKHNlbGYpOgorICAgICAgICAjIFRlc3QgdG8gbWFrZSBzdXJlIGEgcXVldWUgdGFzayBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAgICBxID0gc2VsZi50eXBlMnRlc3QoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBxLnRhc2tfZG9uZSgpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWQgbm90IGRldGVjdCB0YXNrIGNvdW50IGdvaW5nIG5lZ2F0aXZlIikKKworICAgIGRlZiB0ZXN0X3F1ZXVlX2pvaW4oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGEgcXVldWUgam9pbigpcyBzdWNjZXNzZnVsbHksIGFuZCBiZWZvcmUgYW55dGhpbmcgZWxzZQorICAgICAgICAjIChkb25lIHR3aWNlIGZvciBpbnN1cmFuY2UpLgorICAgICAgICBxID0gc2VsZi50eXBlMnRlc3QoKQorICAgICAgICBzZWxmLnF1ZXVlX2pvaW5fdGVzdChxKQorICAgICAgICBzZWxmLnF1ZXVlX2pvaW5fdGVzdChxKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBxLnRhc2tfZG9uZSgpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWQgbm90IGRldGVjdCB0YXNrIGNvdW50IGdvaW5nIG5lZ2F0aXZlIikKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9xdWV1ZShzZWxmKToKKyAgICAgICAgIyBEbyBpdCBhIGNvdXBsZSBvZiB0aW1lcyBvbiB0aGUgc2FtZSBxdWV1ZS4KKyAgICAgICAgIyBEb25lIHR3aWNlIHRvIG1ha2Ugc3VyZSB3b3JrcyB3aXRoIHNhbWUgaW5zdGFuY2UgcmV1c2VkLgorICAgICAgICBxID0gc2VsZi50eXBlMnRlc3QoUVVFVUVfU0laRSkKKyAgICAgICAgc2VsZi5zaW1wbGVfcXVldWVfdGVzdChxKQorICAgICAgICBzZWxmLnNpbXBsZV9xdWV1ZV90ZXN0KHEpCisKKworY2xhc3MgUXVldWVUZXN0KEJhc2VRdWV1ZVRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB0eXBlMnRlc3QgPSBRdWV1ZS5RdWV1ZQorCitjbGFzcyBMaWZvUXVldWVUZXN0KEJhc2VRdWV1ZVRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB0eXBlMnRlc3QgPSBRdWV1ZS5MaWZvUXVldWUKKworY2xhc3MgUHJpb3JpdHlRdWV1ZVRlc3QoQmFzZVF1ZXVlVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHR5cGUydGVzdCA9IFF1ZXVlLlByaW9yaXR5UXVldWUKKworCisKKyMgQSBRdWV1ZSBzdWJjbGFzcyB0aGF0IGNhbiBwcm92b2tlIGZhaWx1cmUgYXQgYSBtb21lbnQncyBub3RpY2UgOikKK2NsYXNzIEZhaWxpbmdRdWV1ZUV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgRmFpbGluZ1F1ZXVlKFF1ZXVlLlF1ZXVlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmZhaWxfbmV4dF9wdXQgPSBGYWxzZQorICAgICAgICBzZWxmLmZhaWxfbmV4dF9nZXQgPSBGYWxzZQorICAgICAgICBRdWV1ZS5RdWV1ZS5fX2luaXRfXyhzZWxmLCAqYXJncykKKyAgICBkZWYgX3B1dChzZWxmLCBpdGVtKToKKyAgICAgICAgaWYgc2VsZi5mYWlsX25leHRfcHV0OgorICAgICAgICAgICAgc2VsZi5mYWlsX25leHRfcHV0ID0gRmFsc2UKKyAgICAgICAgICAgIHJhaXNlIEZhaWxpbmdRdWV1ZUV4Y2VwdGlvbiwgIllvdSBMb3NlIgorICAgICAgICByZXR1cm4gUXVldWUuUXVldWUuX3B1dChzZWxmLCBpdGVtKQorICAgIGRlZiBfZ2V0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmZhaWxfbmV4dF9nZXQ6CisgICAgICAgICAgICBzZWxmLmZhaWxfbmV4dF9nZXQgPSBGYWxzZQorICAgICAgICAgICAgcmFpc2UgRmFpbGluZ1F1ZXVlRXhjZXB0aW9uLCAiWW91IExvc2UiCisgICAgICAgIHJldHVybiBRdWV1ZS5RdWV1ZS5fZ2V0KHNlbGYpCisKK2NsYXNzIEZhaWxpbmdRdWV1ZVRlc3QoQmxvY2tpbmdUZXN0TWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBmYWlsaW5nX3F1ZXVlX3Rlc3Qoc2VsZiwgcSk6CisgICAgICAgIGlmIG5vdCBxLmVtcHR5KCk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJDYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBhbiBlbXB0eSBxdWV1ZSIKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoUVVFVUVfU0laRS0xKToKKyAgICAgICAgICAgIHEucHV0KGkpCisgICAgICAgICMgVGVzdCBhIGZhaWxpbmcgbm9uLWJsb2NraW5nIHB1dC4KKyAgICAgICAgcS5mYWlsX25leHRfcHV0ID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBxLnB1dCgib29wcyIsIGJsb2NrPTApCisgICAgICAgICAgICBzZWxmLmZhaWwoIlRoZSBxdWV1ZSBkaWRuJ3QgZmFpbCB3aGVuIGl0IHNob3VsZCBoYXZlIikKKyAgICAgICAgZXhjZXB0IEZhaWxpbmdRdWV1ZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcS5mYWlsX25leHRfcHV0ID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBxLnB1dCgib29wcyIsIHRpbWVvdXQ9MC4xKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJUaGUgcXVldWUgZGlkbid0IGZhaWwgd2hlbiBpdCBzaG91bGQgaGF2ZSIpCisgICAgICAgIGV4Y2VwdCBGYWlsaW5nUXVldWVFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHEucHV0KCJsYXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZnVsbCgpLCAiUXVldWUgc2hvdWxkIGJlIGZ1bGwiKQorICAgICAgICAjIFRlc3QgYSBmYWlsaW5nIGJsb2NraW5nIHB1dAorICAgICAgICBxLmZhaWxfbmV4dF9wdXQgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZG9fYmxvY2tpbmdfdGVzdChxLnB1dCwgKCJmdWxsIiwpLCBxLmdldCwgKCkpCisgICAgICAgICAgICBzZWxmLmZhaWwoIlRoZSBxdWV1ZSBkaWRuJ3QgZmFpbCB3aGVuIGl0IHNob3VsZCBoYXZlIikKKyAgICAgICAgZXhjZXB0IEZhaWxpbmdRdWV1ZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyBDaGVjayB0aGUgUXVldWUgaXNuJ3QgZGFtYWdlZC4KKyAgICAgICAgIyBwdXQgZmFpbGVkLCBidXQgZ2V0IHN1Y2NlZWRlZCAtIHJlLWFkZAorICAgICAgICBxLnB1dCgibGFzdCIpCisgICAgICAgICMgVGVzdCBhIGZhaWxpbmcgdGltZW91dCBwdXQKKyAgICAgICAgcS5mYWlsX25leHRfcHV0ID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRvX2V4Y2VwdGlvbmFsX2Jsb2NraW5nX3Rlc3QocS5wdXQsICgiZnVsbCIsIFRydWUsIDEwKSwgcS5nZXQsICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhaWxpbmdRdWV1ZUV4Y2VwdGlvbikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGhlIHF1ZXVlIGRpZG4ndCBmYWlsIHdoZW4gaXQgc2hvdWxkIGhhdmUiKQorICAgICAgICBleGNlcHQgRmFpbGluZ1F1ZXVlRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworICAgICAgICAjIENoZWNrIHRoZSBRdWV1ZSBpc24ndCBkYW1hZ2VkLgorICAgICAgICAjIHB1dCBmYWlsZWQsIGJ1dCBnZXQgc3VjY2VlZGVkIC0gcmUtYWRkCisgICAgICAgIHEucHV0KCJsYXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZnVsbCgpLCAiUXVldWUgc2hvdWxkIGJlIGZ1bGwiKQorICAgICAgICBxLmdldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcS5mdWxsKCksICJRdWV1ZSBzaG91bGQgbm90IGJlIGZ1bGwiKQorICAgICAgICBxLnB1dCgibGFzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmZ1bGwoKSwgIlF1ZXVlIHNob3VsZCBiZSBmdWxsIikKKyAgICAgICAgIyBUZXN0IGEgYmxvY2tpbmcgcHV0CisgICAgICAgIHNlbGYuZG9fYmxvY2tpbmdfdGVzdChxLnB1dCwgKCJmdWxsIiwpLCBxLmdldCwgKCkpCisgICAgICAgICMgRW1wdHkgaXQKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoUVVFVUVfU0laRSk6CisgICAgICAgICAgICBxLmdldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmVtcHR5KCksICJRdWV1ZSBzaG91bGQgYmUgZW1wdHkiKQorICAgICAgICBxLnB1dCgiZmlyc3QiKQorICAgICAgICBxLmZhaWxfbmV4dF9nZXQgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHEuZ2V0KCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGhlIHF1ZXVlIGRpZG4ndCBmYWlsIHdoZW4gaXQgc2hvdWxkIGhhdmUiKQorICAgICAgICBleGNlcHQgRmFpbGluZ1F1ZXVlRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBub3QgYmUgZW1wdHkiKQorICAgICAgICBxLmZhaWxfbmV4dF9nZXQgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHEuZ2V0KHRpbWVvdXQ9MC4xKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJUaGUgcXVldWUgZGlkbid0IGZhaWwgd2hlbiBpdCBzaG91bGQgaGF2ZSIpCisgICAgICAgIGV4Y2VwdCBGYWlsaW5nUXVldWVFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcS5lbXB0eSgpLCAiUXVldWUgc2hvdWxkIG5vdCBiZSBlbXB0eSIpCisgICAgICAgIHEuZ2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBiZSBlbXB0eSIpCisgICAgICAgIHEuZmFpbF9uZXh0X2dldCA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5kb19leGNlcHRpb25hbF9ibG9ja2luZ190ZXN0KHEuZ2V0LCAoKSwgcS5wdXQsICgnZW1wdHknLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFpbGluZ1F1ZXVlRXhjZXB0aW9uKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJUaGUgcXVldWUgZGlkbid0IGZhaWwgd2hlbiBpdCBzaG91bGQgaGF2ZSIpCisgICAgICAgIGV4Y2VwdCBGYWlsaW5nUXVldWVFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgcHV0IHN1Y2NlZWRlZCwgYnV0IGdldCBmYWlsZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgcS5lbXB0eSgpLCAiUXVldWUgc2hvdWxkIG5vdCBiZSBlbXB0eSIpCisgICAgICAgIHEuZ2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZW1wdHkoKSwgIlF1ZXVlIHNob3VsZCBiZSBlbXB0eSIpCisKKyAgICBkZWYgdGVzdF9mYWlsaW5nX3F1ZXVlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdG8gbWFrZSBzdXJlIGEgcXVldWUgaXMgZnVuY3Rpb25pbmcgY29ycmVjdGx5LgorICAgICAgICAjIERvbmUgdHdpY2UgdG8gdGhlIHNhbWUgaW5zdGFuY2UuCisgICAgICAgIHEgPSBGYWlsaW5nUXVldWUoUVVFVUVfU0laRSkKKyAgICAgICAgc2VsZi5mYWlsaW5nX3F1ZXVlX3Rlc3QocSkKKyAgICAgICAgc2VsZi5mYWlsaW5nX3F1ZXVlX3Rlc3QocSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChRdWV1ZVRlc3QsIExpZm9RdWV1ZVRlc3QsIFByaW9yaXR5UXVldWVUZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFpbGluZ1F1ZXVlVGVzdCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9xdW9wcmkucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9xdW9wcmkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNjNGQxNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3F1b3ByaS5weQpAQCAtMCwwICsxLDIwMSBAQAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgc3lzLCBjU3RyaW5nSU8sIHN1YnByb2Nlc3MKK2ltcG9ydCBxdW9wcmkKKworCisKK0VOQ1NBTVBMRSA9ICIiIlwKK0hlcmUncyBhIGJ1bmNoIG9mIHNwZWNpYWw9MjAKKworPUExPUEyPUEzPUE0PUE1PUE2PUE3PUE4PUE5Cis9QUE9QUI9QUM9QUQ9QUU9QUY9QjA9QjE9QjI9QjMKKz1CND1CNT1CNj1CNz1COD1COT1CQT1CQj1CQz1CRD1CRQorPUJGPUMwPUMxPUMyPUMzPUM0PUM1PUM2Cis9Qzc9Qzg9Qzk9Q0E9Q0I9Q0M9Q0Q9Q0U9Q0YKKz1EMD1EMT1EMj1EMz1END1ENT1ENj1ENworPUQ4PUQ5PURBPURCPURDPUREPURFPURGCis9RTA9RTE9RTI9RTM9RTQ9RTU9RTY9RTcKKz1FOD1FOT1FQT1FQj1FQz1FRD1FRT1FRgorPUYwPUYxPUYyPUYzPUY0PUY1PUY2PUY3Cis9Rjg9Rjk9RkE9RkI9RkM9RkQ9RkU9RkYKKworY2hhcmFjdGVycy4uLiBoYXZlIGZ1biEKKyIiIgorCisjIEZpcnN0IGxpbmUgZW5kcyB3aXRoIGEgc3BhY2UKK0RFQ1NBTVBMRSA9ICJIZXJlJ3MgYSBidW5jaCBvZiBzcGVjaWFsIFxuIiArIFwKKyIiIlwKKworXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5CitceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzCitceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZQorXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzYKK1x4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZgorXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDcKK1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmCitceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlNworXHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWYKK1x4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3CitceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZgorCitjaGFyYWN0ZXJzLi4uIGhhdmUgZnVuIQorIiIiCisKKworZGVmIHdpdGhweXRob25pbXBsZW1lbnRhdGlvbih0ZXN0ZnVuYyk6CisgICAgZGVmIG5ld3Rlc3Qoc2VsZik6CisgICAgICAgICMgVGVzdCBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAgICAgIHRlc3RmdW5jKHNlbGYpCisgICAgICAgICMgVGVzdCBQeXRob24gaW1wbGVtZW50YXRpb24KKyAgICAgICAgaWYgcXVvcHJpLmIyYV9xcCBpcyBub3QgTm9uZSBvciBxdW9wcmkuYTJiX3FwIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb2xkZW5jb2RlID0gcXVvcHJpLmIyYV9xcAorICAgICAgICAgICAgb2xkZGVjb2RlID0gcXVvcHJpLmEyYl9xcAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHF1b3ByaS5iMmFfcXAgPSBOb25lCisgICAgICAgICAgICAgICAgcXVvcHJpLmEyYl9xcCA9IE5vbmUKKyAgICAgICAgICAgICAgICB0ZXN0ZnVuYyhzZWxmKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBxdW9wcmkuYjJhX3FwID0gb2xkZW5jb2RlCisgICAgICAgICAgICAgICAgcXVvcHJpLmEyYl9xcCA9IG9sZGRlY29kZQorICAgIG5ld3Rlc3QuX19uYW1lX18gPSB0ZXN0ZnVuYy5fX25hbWVfXworICAgIHJldHVybiBuZXd0ZXN0CisKK2NsYXNzIFF1b3ByaVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIEVhY2ggZW50cnkgaXMgYSB0dXBsZSBvZiAocGxhaW50ZXh0LCBlbmNvZGVkIHN0cmluZykuICBUaGVzZSBzdHJpbmdzIGFyZQorICAgICMgdXNlZCBpbiB0aGUgInF1b3RldGFicz0wIiB0ZXN0cy4KKyAgICBTVFJJTkdTID0gKAorICAgICAgICAjIFNvbWUgbm9ybWFsIHN0cmluZ3MKKyAgICAgICAgKCdoZWxsbycsICdoZWxsbycpLAorICAgICAgICAoJycnaGVsbG8KKyAgICAgICAgdGhlcmUKKyAgICAgICAgd29ybGQnJycsICcnJ2hlbGxvCisgICAgICAgIHRoZXJlCisgICAgICAgIHdvcmxkJycnKSwKKyAgICAgICAgKCcnJ2hlbGxvCisgICAgICAgIHRoZXJlCisgICAgICAgIHdvcmxkCisnJycsICcnJ2hlbGxvCisgICAgICAgIHRoZXJlCisgICAgICAgIHdvcmxkCisnJycpLAorICAgICAgICAoJ1wyMDFcMjAyXDIwMycsICc9ODE9ODI9ODMnKSwKKyAgICAgICAgIyBBZGQgc29tZSB0cmFpbGluZyBNVVNUIFFVT1RFIHN0cmluZ3MKKyAgICAgICAgKCdoZWxsbyAnLCAnaGVsbG89MjAnKSwKKyAgICAgICAgKCdoZWxsb1x0JywgJ2hlbGxvPTA5JyksCisgICAgICAgICMgU29tZSBsb25nIGxpbmVzLiAgRmlyc3QsIGEgc2luZ2xlIGxpbmUgb2YgMTA4IGNoYXJhY3RlcnMKKyAgICAgICAgKCd4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eFx4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgnLAorICAgICAgICAgJycneHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg9RDg9RDk9REE9REI9REM9REQ9REU9REZ4PQoreHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCcnJyksCisgICAgICAgICMgQSBsaW5lIG9mIGV4YWN0bHkgNzYgY2hhcmFjdGVycywgbm8gc29mdCBsaW5lIGJyZWFrIHNob3VsZCBiZSBuZWVkZWQKKyAgICAgICAgKCd5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5JywKKyAgICAgICAgJ3l5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXknKSwKKyAgICAgICAgIyBBIGxpbmUgb2YgNzcgY2hhcmFjdGVycywgZm9yY2luZyBhIHNvZnQgbGluZSBicmVhayBhdCBwb3NpdGlvbiA3NSwKKyAgICAgICAgIyBhbmQgYSBzZWNvbmQgbGluZSBvZiBleGFjdGx5IDIgY2hhcmFjdGVycyAoYmVjYXVzZSB0aGUgc29mdCBsaW5lCisgICAgICAgICMgYnJlYWsgYD0nIHNpZ24gY291bnRzIGFnYWluc3QgdGhlIGxpbmUgbGVuZ3RoIGxpbWl0KS4KKyAgICAgICAgKCd6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eicsCisgICAgICAgICAnJyd6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eno9Cit6eicnJyksCisgICAgICAgICMgQSBsaW5lIG9mIDE1MSBjaGFyYWN0ZXJzLCBmb3JjaW5nIGEgc29mdCBsaW5lIGJyZWFrIGF0IHBvc2l0aW9uIDc1LAorICAgICAgICAjIHdpdGggYSBzZWNvbmQgbGluZSBvZiBleGFjdGx5IDc2IGNoYXJhY3RlcnMgYW5kIG5vIHRyYWlsaW5nID0KKyAgICAgICAgKCd6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6JywKKyAgICAgICAgICcnJ3p6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6ej0KK3p6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enonJycpLAorICAgICAgICAjIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSBoYXJkIGxpbmUgYnJlYWssIGJ1dCB3aGljaCB0aGUgZmlyc3QgbGluZSBpcworICAgICAgICAjIDE1MSBjaGFyYWN0ZXJzIGFuZCB0aGUgc2Vjb25kIGxpbmUgaXMgZXhhY3RseSA3NiBjaGFyYWN0ZXJzLiAgVGhpcworICAgICAgICAjIHNob3VsZCBsZWF2ZSB1cyB3aXRoIHRocmVlIGxpbmVzLCB0aGUgZmlyc3Qgd2hpY2ggaGFzIGEgc29mdCBsaW5lCisgICAgICAgICMgYnJlYWssIGFuZCB3aGljaCB0aGUgc2Vjb25kIGFuZCB0aGlyZCBkbyBub3QuCisgICAgICAgICgnJyd5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5Cit6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6JycnLAorICAgICAgICAgJycneXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5PQoreXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eQorenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eicnJyksCisgICAgICAgICMgTm93IHNvbWUgcmVhbGx5IGNvbXBsZXggc3R1ZmYgOykKKyAgICAgICAgKERFQ1NBTVBMRSwgRU5DU0FNUExFKSwKKyAgICAgICAgKQorCisgICAgIyBUaGVzZSBhcmUgdXNlZCBpbiB0aGUgInF1b3RldGFicz0xIiB0ZXN0cy4KKyAgICBFU1RSSU5HUyA9ICgKKyAgICAgICAgKCdoZWxsbyB3b3JsZCcsICdoZWxsbz0yMHdvcmxkJyksCisgICAgICAgICgnaGVsbG9cdHdvcmxkJywgJ2hlbGxvPTA5d29ybGQnKSwKKyAgICAgICAgKQorCisgICAgIyBUaGVzZSBhcmUgdXNlZCBpbiB0aGUgImhlYWRlcj0xIiB0ZXN0cy4KKyAgICBIU1RSSU5HUyA9ICgKKyAgICAgICAgKCdoZWxsbyB3b3JsZCcsICdoZWxsb193b3JsZCcpLAorICAgICAgICAoJ2hlbGxvX3dvcmxkJywgJ2hlbGxvPTVGd29ybGQnKSwKKyAgICAgICAgKQorCisgICAgQHdpdGhweXRob25pbXBsZW1lbnRhdGlvbgorICAgIGRlZiB0ZXN0X2VuY29kZXN0cmluZyhzZWxmKToKKyAgICAgICAgZm9yIHAsIGUgaW4gc2VsZi5TVFJJTkdTOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHF1b3ByaS5lbmNvZGVzdHJpbmcocCkgPT0gZSkKKworICAgIEB3aXRocHl0aG9uaW1wbGVtZW50YXRpb24KKyAgICBkZWYgdGVzdF9kZWNvZGVzdHJpbmcoc2VsZik6CisgICAgICAgIGZvciBwLCBlIGluIHNlbGYuU1RSSU5HUzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdW9wcmkuZGVjb2Rlc3RyaW5nKGUpID09IHApCisKKyAgICBAd2l0aHB5dGhvbmltcGxlbWVudGF0aW9uCisgICAgZGVmIHRlc3RfaWRlbXBvdGVudF9zdHJpbmcoc2VsZik6CisgICAgICAgIGZvciBwLCBlIGluIHNlbGYuU1RSSU5HUzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdW9wcmkuZGVjb2Rlc3RyaW5nKHF1b3ByaS5lbmNvZGVzdHJpbmcoZSkpID09IGUpCisKKyAgICBAd2l0aHB5dGhvbmltcGxlbWVudGF0aW9uCisgICAgZGVmIHRlc3RfZW5jb2RlKHNlbGYpOgorICAgICAgICBmb3IgcCwgZSBpbiBzZWxmLlNUUklOR1M6CisgICAgICAgICAgICBpbmZwID0gY1N0cmluZ0lPLlN0cmluZ0lPKHApCisgICAgICAgICAgICBvdXRmcCA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICBxdW9wcmkuZW5jb2RlKGluZnAsIG91dGZwLCBxdW90ZXRhYnM9RmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0ZnAuZ2V0dmFsdWUoKSA9PSBlKQorCisgICAgQHdpdGhweXRob25pbXBsZW1lbnRhdGlvbgorICAgIGRlZiB0ZXN0X2RlY29kZShzZWxmKToKKyAgICAgICAgZm9yIHAsIGUgaW4gc2VsZi5TVFJJTkdTOgorICAgICAgICAgICAgaW5mcCA9IGNTdHJpbmdJTy5TdHJpbmdJTyhlKQorICAgICAgICAgICAgb3V0ZnAgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICAgICAgcXVvcHJpLmRlY29kZShpbmZwLCBvdXRmcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXRmcC5nZXR2YWx1ZSgpID09IHApCisKKyAgICBAd2l0aHB5dGhvbmltcGxlbWVudGF0aW9uCisgICAgZGVmIHRlc3RfZW1iZWRkZWRfd3Moc2VsZik6CisgICAgICAgIGZvciBwLCBlIGluIHNlbGYuRVNUUklOR1M6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocXVvcHJpLmVuY29kZXN0cmluZyhwLCBxdW90ZXRhYnM9VHJ1ZSkgPT0gZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdW9wcmkuZGVjb2Rlc3RyaW5nKGUpID09IHApCisKKyAgICBAd2l0aHB5dGhvbmltcGxlbWVudGF0aW9uCisgICAgZGVmIHRlc3RfZW5jb2RlX2hlYWRlcihzZWxmKToKKyAgICAgICAgZm9yIHAsIGUgaW4gc2VsZi5IU1RSSU5HUzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxdW9wcmkuZW5jb2Rlc3RyaW5nKHAsIGhlYWRlcj1UcnVlKSA9PSBlKQorCisgICAgQHdpdGhweXRob25pbXBsZW1lbnRhdGlvbgorICAgIGRlZiB0ZXN0X2RlY29kZV9oZWFkZXIoc2VsZik6CisgICAgICAgIGZvciBwLCBlIGluIHNlbGYuSFNUUklOR1M6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocXVvcHJpLmRlY29kZXN0cmluZyhlLCBoZWFkZXI9VHJ1ZSkgPT0gcCkKKworICAgIGRlZiB0ZXN0X3NjcmlwdGVuY29kZShzZWxmKToKKyAgICAgICAgKHAsIGUpID0gc2VsZi5TVFJJTkdTWy0xXQorICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItbXF1b3ByaSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwcm9jZXNzLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgY291dCwgY2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUocCkKKyAgICAgICAgIyBPbiBXaW5kb3dzLCBQeXRob24gd2lsbCBvdXRwdXQgdGhlIHJlc3VsdCB0byBzdGRvdXQgdXNpbmcKKyAgICAgICAgIyBDUkxGLCBhcyB0aGUgbW9kZSBvZiBzdGRvdXQgaXMgdGV4dCBtb2RlLiBUbyBjb21wYXJlIHRoaXMKKyAgICAgICAgIyB3aXRoIHRoZSBleHBlY3RlZCByZXN1bHQsIHdlIG5lZWQgdG8gZG8gYSBsaW5lLWJ5LWxpbmUgY29tcGFyaXNvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3V0LnNwbGl0bGluZXMoKSwgZS5zcGxpdGxpbmVzKCkpCisKKyAgICBkZWYgdGVzdF9zY3JpcHRkZWNvZGUoc2VsZik6CisgICAgICAgIChwLCBlKSA9IHNlbGYuU1RSSU5HU1stMV0KKyAgICAgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLW1xdW9wcmkiLCAiLWQiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocHJvY2Vzcy5zdGRvdXQuY2xvc2UpCisgICAgICAgIGNvdXQsIGNlcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291dC5zcGxpdGxpbmVzKCksIHAuc3BsaXRsaW5lcygpKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChRdW9wcmlUZXN0Q2FzZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9yYW5kb20ucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9yYW5kb20ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxNjQxNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3JhbmRvbS5weQpAQCAtMCwwICsxLDYyNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHJhbmRvbQoraW1wb3J0IHRpbWUKK2ltcG9ydCBwaWNrbGUKK2ltcG9ydCB3YXJuaW5ncworZnJvbSBtYXRoIGltcG9ydCBsb2csIGV4cCwgcGksIGZzdW0sIHNpbgorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworY2xhc3MgVGVzdEJhc2ljT3BzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFN1cGVyY2xhc3Mgd2l0aCB0ZXN0cyBjb21tb24gdG8gYWxsIGdlbmVyYXRvcnMuCisgICAgIyBTdWJjbGFzc2VzIG11c3QgYXJyYW5nZSBmb3Igc2VsZi5nZW4gdG8gcmV0cmlldmUgdGhlIFJhbmRvbSBpbnN0YW5jZQorICAgICMgdG8gYmUgdGVzdGVkLgorCisgICAgZGVmIHJhbmRvbWxpc3Qoc2VsZiwgbik6CisgICAgICAgICIiIkhlbHBlciBmdW5jdGlvbiB0byBtYWtlIGEgbGlzdCBvZiByYW5kb20gbnVtYmVycyIiIgorICAgICAgICByZXR1cm4gW3NlbGYuZ2VuLnJhbmRvbSgpIGZvciBpIGluIHhyYW5nZShuKV0KKworICAgIGRlZiB0ZXN0X2F1dG9zZWVkKHNlbGYpOgorICAgICAgICBzZWxmLmdlbi5zZWVkKCkKKyAgICAgICAgc3RhdGUxID0gc2VsZi5nZW4uZ2V0c3RhdGUoKQorICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgc2VsZi5nZW4uc2VlZCgpICAgICAgIyBkaWZmZW50IHNlZWRzIGF0IGRpZmZlcmVudCB0aW1lcworICAgICAgICBzdGF0ZTIgPSBzZWxmLmdlbi5nZXRzdGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3RhdGUxLCBzdGF0ZTIpCisKKyAgICBkZWYgdGVzdF9zYXZlcmVzdG9yZShzZWxmKToKKyAgICAgICAgTiA9IDEwMDAKKyAgICAgICAgc2VsZi5nZW4uc2VlZCgpCisgICAgICAgIHN0YXRlID0gc2VsZi5nZW4uZ2V0c3RhdGUoKQorICAgICAgICByYW5kc2VxID0gc2VsZi5yYW5kb21saXN0KE4pCisgICAgICAgIHNlbGYuZ2VuLnNldHN0YXRlKHN0YXRlKSAgICAjIHNob3VsZCByZWdlbmVyYXRlIHRoZSBzYW1lIHNlcXVlbmNlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZHNlcSwgc2VsZi5yYW5kb21saXN0KE4pKQorCisgICAgZGVmIHRlc3Rfc2VlZGFyZ3Moc2VsZik6CisgICAgICAgIGZvciBhcmcgaW4gW05vbmUsIDAsIDBMLCAxLCAxTCwgLTEsIC0xTCwgMTAqKjIwLCAtKDEwKioyMCksCisgICAgICAgICAgICAgICAgICAgIDMuMTQsIDErMmosICdhJywgdHVwbGUoJ2FiYycpXToKKyAgICAgICAgICAgIHNlbGYuZ2VuLnNlZWQoYXJnKQorICAgICAgICBmb3IgYXJnIGluIFtyYW5nZSgzKSwgZGljdChvbmU9MSldOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmdlbi5zZWVkLCBhcmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uc2VlZCwgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eXBlKHNlbGYuZ2VuKSwgW10pCisKKyAgICBkZWYgdGVzdF9qdW1wYWhlYWQoc2VsZik6CisgICAgICAgIHNlbGYuZ2VuLnNlZWQoKQorICAgICAgICBzdGF0ZTEgPSBzZWxmLmdlbi5nZXRzdGF0ZSgpCisgICAgICAgIHNlbGYuZ2VuLmp1bXBhaGVhZCgxMDApCisgICAgICAgIHN0YXRlMiA9IHNlbGYuZ2VuLmdldHN0YXRlKCkgICAgIyBzL2IgZGlzdGluY3QgZnJvbSBzdGF0ZTEKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzdGF0ZTEsIHN0YXRlMikKKyAgICAgICAgc2VsZi5nZW4uanVtcGFoZWFkKDEwMCkKKyAgICAgICAgc3RhdGUzID0gc2VsZi5nZW4uZ2V0c3RhdGUoKSAgICAjIHMvYiBkaXN0aW5jdCBmcm9tIHN0YXRlMgorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHN0YXRlMiwgc3RhdGUzKQorCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLmp1bXBhaGVhZCkgICMgbmVlZHMgYW4gYXJnCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLmp1bXBhaGVhZCwgMiwgMykgICMgdG9vIG1hbnkKKworICAgIGRlZiB0ZXN0X2p1bXBhaGVhZF9wcm9kdWNlc192YWxpZF9zdGF0ZShzZWxmKToKKyAgICAgICAgIyBGcm9tIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNDU5MS4KKyAgICAgICAgc2VsZi5nZW4uc2VlZCgxOTkyMTAzNjgpCisgICAgICAgIHNlbGYuZ2VuLmp1bXBhaGVhZCgxMzU1MDY3NDIzMjU1NDY0NTkwMCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNTAwKToKKyAgICAgICAgICAgIHZhbCA9IHNlbGYuZ2VuLnJhbmRvbSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3ModmFsLCAxLjApCisKKyAgICBkZWYgdGVzdF9zYW1wbGUoc2VsZik6CisgICAgICAgICMgRm9yIHRoZSBlbnRpcmUgYWxsb3dhYmxlIHJhbmdlIG9mIDAgPD0gayA8PSBOLCB2YWxpZGF0ZSB0aGF0CisgICAgICAgICMgdGhlIHNhbXBsZSBpcyBvZiB0aGUgY29ycmVjdCBsZW5ndGggYW5kIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGl0ZW1zCisgICAgICAgIE4gPSAxMDAKKyAgICAgICAgcG9wdWxhdGlvbiA9IHhyYW5nZShOKQorICAgICAgICBmb3IgayBpbiB4cmFuZ2UoTisxKToKKyAgICAgICAgICAgIHMgPSBzZWxmLmdlbi5zYW1wbGUocG9wdWxhdGlvbiwgaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBrKQorICAgICAgICAgICAgdW5pcSA9IHNldChzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odW5pcSksIGspCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pcSA8PSBzZXQocG9wdWxhdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZW4uc2FtcGxlKFtdLCAwKSwgW10pICAjIHRlc3QgZWRnZSBjYXNlIE49PWs9PTAKKworICAgIGRlZiB0ZXN0X3NhbXBsZV9kaXN0cmlidXRpb24oc2VsZik6CisgICAgICAgICMgRm9yIHRoZSBlbnRpcmUgYWxsb3dhYmxlIHJhbmdlIG9mIDAgPD0gayA8PSBOLCB2YWxpZGF0ZSB0aGF0CisgICAgICAgICMgc2FtcGxlIGdlbmVyYXRlcyBhbGwgcG9zc2libGUgcGVybXV0YXRpb25zCisgICAgICAgIG4gPSA1CisgICAgICAgIHBvcCA9IHJhbmdlKG4pCisgICAgICAgIHRyaWFscyA9IDEwMDAwICAjIGxhcmdlIG51bSBwcmV2ZW50cyBmYWxzZSBuZWdhdGl2ZXMgd2l0aG91dCBzbG93aW5nIG5vcm1hbCBjYXNlCisgICAgICAgIGRlZiBmYWN0b3JpYWwobik6CisgICAgICAgICAgICByZXR1cm4gcmVkdWNlKGludC5fX211bF9fLCB4cmFuZ2UoMSwgbiksIDEpCisgICAgICAgIGZvciBrIGluIHhyYW5nZShuKToKKyAgICAgICAgICAgIGV4cGVjdGVkID0gZmFjdG9yaWFsKG4pIC8vIGZhY3RvcmlhbChuLWspCisgICAgICAgICAgICBwZXJtcyA9IHt9CisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UodHJpYWxzKToKKyAgICAgICAgICAgICAgICBwZXJtc1t0dXBsZShzZWxmLmdlbi5zYW1wbGUocG9wLCBrKSldID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIGxlbihwZXJtcykgPT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgpCisKKyAgICBkZWYgdGVzdF9zYW1wbGVfaW5wdXRzKHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZyAjODAxMzQyIC0tIHBvcHVsYXRpb24gY2FuIGJlIGFueSBpdGVyYWJsZSBkZWZpbmluZyBfX2xlbl9fKCkKKyAgICAgICAgc2VsZi5nZW4uc2FtcGxlKHNldChyYW5nZSgyMCkpLCAyKQorICAgICAgICBzZWxmLmdlbi5zYW1wbGUocmFuZ2UoMjApLCAyKQorICAgICAgICBzZWxmLmdlbi5zYW1wbGUoeHJhbmdlKDIwKSwgMikKKyAgICAgICAgc2VsZi5nZW4uc2FtcGxlKHN0cignYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSwgMikKKyAgICAgICAgc2VsZi5nZW4uc2FtcGxlKHR1cGxlKCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpLCAyKQorCisgICAgZGVmIHRlc3Rfc2FtcGxlX29uX2RpY3RzKHNlbGYpOgorICAgICAgICBzZWxmLmdlbi5zYW1wbGUoZGljdC5mcm9ta2V5cygnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSwgMikKKworICAgICAgICAjIFNGIGJ1ZyAjMTQ2MDM0MCAtLSByYW5kb20uc2FtcGxlIGNhbiByYWlzZSBLZXlFcnJvcgorICAgICAgICBhID0gZGljdC5mcm9ta2V5cyhyYW5nZSgxMCkrcmFuZ2UoMTAsMTAwLDIpK3JhbmdlKDEwMCwxMTApKQorICAgICAgICBzZWxmLmdlbi5zYW1wbGUoYSwgMykKKworICAgICAgICAjIEEgZm9sbG93dXAgdG8gYnVnICMxNDYwMzQwOiAgc2FtcGxpbmcgZnJvbSBhIGRpY3QgY291bGQgcmV0dXJuCisgICAgICAgICMgYSBzdWJzZXQgb2YgaXRzIGtleXMgb3Igb2YgaXRzIHZhbHVlcywgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mCisgICAgICAgICMgdGhlIHN1YnNldCByZXF1ZXN0ZWQuCisgICAgICAgIE4gPSAzMAorICAgICAgICBkID0gZGljdCgoaSwgY29tcGxleChpLCBpKSkgZm9yIGkgaW4geHJhbmdlKE4pKQorICAgICAgICBmb3IgayBpbiB4cmFuZ2UoTisxKToKKyAgICAgICAgICAgIHNhbXAgPSBzZWxmLmdlbi5zYW1wbGUoZCwgaykKKyAgICAgICAgICAgICMgVmVyaWZ5IHRoYXQgd2UgZ290IGludHMgYmFjayAoa2V5cyk7IHRoZSB2YWx1ZXMgYXJlIGNvbXBsZXguCisgICAgICAgICAgICBmb3IgeCBpbiBzYW1wOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHgpIGlzIGludCkKKyAgICAgICAgc2FtcC5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzYW1wLCByYW5nZShOKSkKKworICAgIGRlZiB0ZXN0X2dhdXNzKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSBzZWVkKCkgbWV0aG9kIGluaXRpYWxpemVzIGFsbCB0aGUgaGlkZGVuIHN0YXRlLiAgSW4KKyAgICAgICAgIyBwYXJ0aWN1bGFyLCB0aHJvdWdoIDIuMi4xIGl0IGZhaWxlZCB0byByZXNldCBhIHBpZWNlIG9mIHN0YXRlIHVzZWQKKyAgICAgICAgIyBieSAoYW5kIG9ubHkgYnkpIHRoZSAuZ2F1c3MoKSBtZXRob2QuCisKKyAgICAgICAgZm9yIHNlZWQgaW4gMSwgMTIsIDEyMywgMTIzNCwgMTIzNDUsIDEyMzQ1NiwgNjU0MzIxOgorICAgICAgICAgICAgc2VsZi5nZW4uc2VlZChzZWVkKQorICAgICAgICAgICAgeDEgPSBzZWxmLmdlbi5yYW5kb20oKQorICAgICAgICAgICAgeTEgPSBzZWxmLmdlbi5nYXVzcygwLCAxKQorCisgICAgICAgICAgICBzZWxmLmdlbi5zZWVkKHNlZWQpCisgICAgICAgICAgICB4MiA9IHNlbGYuZ2VuLnJhbmRvbSgpCisgICAgICAgICAgICB5MiA9IHNlbGYuZ2VuLmdhdXNzKDAsIDEpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeDEsIHgyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5MSwgeTIpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKKyAgICAgICAgc3RhdGUgPSBwaWNrbGUuZHVtcHMoc2VsZi5nZW4pCisgICAgICAgIG9yaWdzZXEgPSBbc2VsZi5nZW4ucmFuZG9tKCkgZm9yIGkgaW4geHJhbmdlKDEwKV0KKyAgICAgICAgbmV3Z2VuID0gcGlja2xlLmxvYWRzKHN0YXRlKQorICAgICAgICByZXN0b3JlZHNlcSA9IFtuZXdnZW4ucmFuZG9tKCkgZm9yIGkgaW4geHJhbmdlKDEwKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnc2VxLCByZXN0b3JlZHNlcSkKKworICAgIGRlZiB0ZXN0X2J1Z18xNzI3NzgwKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSB0aGF0IHZlcnNpb24tMi1waWNrbGVzIGNhbiBiZSBsb2FkZWQKKyAgICAgICAgIyBmaW5lLCB3aGV0aGVyIHRoZXkgYXJlIGNyZWF0ZWQgb24gMzItYml0IG9yIDY0LWJpdAorICAgICAgICAjIHBsYXRmb3JtcywgYW5kIHRoYXQgdmVyc2lvbi0zLXBpY2tsZXMgbG9hZCBmaW5lLgorICAgICAgICBmaWxlcyA9IFsoInJhbmR2Ml8zMi5wY2siLCA3ODApLAorICAgICAgICAgICAgICAgICAoInJhbmR2Ml82NC5wY2siLCA4NjYpLAorICAgICAgICAgICAgICAgICAoInJhbmR2My5wY2siLCAzNDMpXQorICAgICAgICBmb3IgZmlsZSwgdmFsdWUgaW4gZmlsZXM6CisgICAgICAgICAgICBmID0gb3Blbih0ZXN0X3N1cHBvcnQuZmluZGZpbGUoZmlsZSksInJiIikKKyAgICAgICAgICAgIHIgPSBwaWNrbGUubG9hZChmKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIucmFuZHJhbmdlKDEwMDApLCB2YWx1ZSkKKworY2xhc3MgV2ljaG1hbm5IaWxsX1Rlc3RCYXNpY09wcyhUZXN0QmFzaWNPcHMpOgorICAgIGdlbiA9IHJhbmRvbS5XaWNobWFubkhpbGwoKQorCisgICAgZGVmIHRlc3Rfc2V0c3RhdGVfZmlyc3RfYXJnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmdlbi5zZXRzdGF0ZSwgKDIsIE5vbmUsIE5vbmUpKQorCisgICAgZGVmIHRlc3Rfc3Ryb25nX2p1bXBhaGVhZChzZWxmKToKKyAgICAgICAgIyB0ZXN0cyB0aGF0IGp1bXBhaGVhZChuKSBzZW1hbnRpY3MgY29ycmVzcG9uZCB0byBuIGNhbGxzIHRvIHJhbmRvbSgpCisgICAgICAgIE4gPSAxMDAwCisgICAgICAgIHMgPSBzZWxmLmdlbi5nZXRzdGF0ZSgpCisgICAgICAgIHNlbGYuZ2VuLmp1bXBhaGVhZChOKQorICAgICAgICByMSA9IHNlbGYuZ2VuLnJhbmRvbSgpCisgICAgICAgICMgbm93IGRvIGl0IHRoZSBzbG93IHdheQorICAgICAgICBzZWxmLmdlbi5zZXRzdGF0ZShzKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoTik6CisgICAgICAgICAgICBzZWxmLmdlbi5yYW5kb20oKQorICAgICAgICByMiA9IHNlbGYuZ2VuLnJhbmRvbSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocjEsIHIyKQorCisgICAgZGVmIHRlc3RfZ2F1c3Nfd2l0aF93aHNlZWQoc2VsZik6CisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIHNlZWQoKSBtZXRob2QgaW5pdGlhbGl6ZXMgYWxsIHRoZSBoaWRkZW4gc3RhdGUuICBJbgorICAgICAgICAjIHBhcnRpY3VsYXIsIHRocm91Z2ggMi4yLjEgaXQgZmFpbGVkIHRvIHJlc2V0IGEgcGllY2Ugb2Ygc3RhdGUgdXNlZAorICAgICAgICAjIGJ5IChhbmQgb25seSBieSkgdGhlIC5nYXVzcygpIG1ldGhvZC4KKworICAgICAgICBmb3Igc2VlZCBpbiAxLCAxMiwgMTIzLCAxMjM0LCAxMjM0NSwgMTIzNDU2LCA2NTQzMjE6CisgICAgICAgICAgICBzZWxmLmdlbi53aHNlZWQoc2VlZCkKKyAgICAgICAgICAgIHgxID0gc2VsZi5nZW4ucmFuZG9tKCkKKyAgICAgICAgICAgIHkxID0gc2VsZi5nZW4uZ2F1c3MoMCwgMSkKKworICAgICAgICAgICAgc2VsZi5nZW4ud2hzZWVkKHNlZWQpCisgICAgICAgICAgICB4MiA9IHNlbGYuZ2VuLnJhbmRvbSgpCisgICAgICAgICAgICB5MiA9IHNlbGYuZ2VuLmdhdXNzKDAsIDEpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeDEsIHgyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5MSwgeTIpCisKKyAgICBkZWYgdGVzdF9iaWdyYW5kKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB3YXJuaW5ncyBhcmUgcmFpc2VkIHdoZW4gcmFuZHJhbmdlIGlzIHRvbyBsYXJnZSBmb3IgcmFuZG9tKCkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgIlVuZGVybHlpbmcgcmFuZG9tIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVzZXJXYXJuaW5nLCBzZWxmLmdlbi5yYW5kcmFuZ2UsIDIqKjYwKQorCitjbGFzcyBTeXN0ZW1SYW5kb21fVGVzdEJhc2ljT3BzKFRlc3RCYXNpY09wcyk6CisgICAgZ2VuID0gcmFuZG9tLlN5c3RlbVJhbmRvbSgpCisKKyAgICBkZWYgdGVzdF9hdXRvc2VlZChzZWxmKToKKyAgICAgICAgIyBEb2Vzbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZXhjZXB0IG5vdCBmYWlsCisgICAgICAgIHNlbGYuZ2VuLnNlZWQoKQorCisgICAgZGVmIHRlc3Rfc2F2ZXJlc3RvcmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHNlbGYuZ2VuLmdldHN0YXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBzZWxmLmdlbi5zZXRzdGF0ZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NlZWRhcmdzKHNlbGYpOgorICAgICAgICAjIERvZXNuJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBleGNlcHQgbm90IGZhaWwKKyAgICAgICAgc2VsZi5nZW4uc2VlZCgxMDApCisKKyAgICBkZWYgdGVzdF9qdW1wYWhlYWQoc2VsZik6CisgICAgICAgICMgRG9lc24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGV4Y2VwdCBub3QgZmFpbAorICAgICAgICBzZWxmLmdlbi5qdW1wYWhlYWQoMTAwKQorCisgICAgZGVmIHRlc3RfZ2F1c3Moc2VsZik6CisgICAgICAgIHNlbGYuZ2VuLmdhdXNzX25leHQgPSBOb25lCisgICAgICAgIHNlbGYuZ2VuLnNlZWQoMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2VuLmdhdXNzX25leHQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcGlja2xlLmR1bXBzLCBzZWxmLmdlbikKKworICAgIGRlZiB0ZXN0XzUzX2JpdHNfcGVyX2Zsb2F0KHNlbGYpOgorICAgICAgICAjIFRoaXMgc2hvdWxkIHBhc3Mgd2hlbmV2ZXIgYSBDIGRvdWJsZSBoYXMgNTMgYml0IHByZWNpc2lvbi4KKyAgICAgICAgc3BhbiA9IDIgKiogNTMKKyAgICAgICAgY3VtID0gMAorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwKToKKyAgICAgICAgICAgIGN1bSB8PSBpbnQoc2VsZi5nZW4ucmFuZG9tKCkgKiBzcGFuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1bSwgc3Bhbi0xKQorCisgICAgZGVmIHRlc3RfYmlncmFuZChzZWxmKToKKyAgICAgICAgIyBUaGUgcmFuZHJhbmdlIHJvdXRpbmUgc2hvdWxkIGJ1aWxkLXVwIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgYml0cworICAgICAgICAjIGluIHN0YWdlcyBzbyB0aGF0IGFsbCBiaXQgcG9zaXRpb25zIGFyZSBhY3RpdmUuCisgICAgICAgIHNwYW4gPSAyICoqIDUwMAorICAgICAgICBjdW0gPSAwCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDApOgorICAgICAgICAgICAgciA9IHNlbGYuZ2VuLnJhbmRyYW5nZShzcGFuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gciA8IHNwYW4pCisgICAgICAgICAgICBjdW0gfD0gcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1bSwgc3Bhbi0xKQorCisgICAgZGVmIHRlc3RfYmlncmFuZF9yYW5nZXMoc2VsZik6CisgICAgICAgIGZvciBpIGluIFs0MCw4MCwgMTYwLCAyMDAsIDIxMSwgMjUwLCAzNzUsIDUxMiwgNTUwXToKKyAgICAgICAgICAgIHN0YXJ0ID0gc2VsZi5nZW4ucmFuZHJhbmdlKDIgKiogaSkKKyAgICAgICAgICAgIHN0b3AgPSBzZWxmLmdlbi5yYW5kcmFuZ2UoMiAqKiAoaS0yKSkKKyAgICAgICAgICAgIGlmIHN0b3AgPD0gc3RhcnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhcnQgPD0gc2VsZi5nZW4ucmFuZHJhbmdlKHN0YXJ0LCBzdG9wKSA8IHN0b3ApCisKKyAgICBkZWYgdGVzdF9yYW5nZWxpbWl0cyhzZWxmKToKKyAgICAgICAgZm9yIHN0YXJ0LCBzdG9wIGluIFsoLTIsMCksICgtKDIqKjYwKS0yLC0oMioqNjApKSwgKDIqKjYwLDIqKjYwKzIpXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHJhbmdlKHN0YXJ0LHN0b3ApKSwKKyAgICAgICAgICAgICAgICBzZXQoW3NlbGYuZ2VuLnJhbmRyYW5nZShzdGFydCxzdG9wKSBmb3IgaSBpbiB4cmFuZ2UoMTAwKV0pKQorCisgICAgZGVmIHRlc3RfZ2VucmFuZGJpdHMoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHJhbmdlcworICAgICAgICBmb3IgayBpbiB4cmFuZ2UoMSwgMTAwMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8PSBzZWxmLmdlbi5nZXRyYW5kYml0cyhrKSA8IDIqKmspCisKKyAgICAgICAgIyBWZXJpZnkgYWxsIGJpdHMgYWN0aXZlCisgICAgICAgIGdldGJpdHMgPSBzZWxmLmdlbi5nZXRyYW5kYml0cworICAgICAgICBmb3Igc3BhbiBpbiBbMSwgMiwgMywgNCwgMzEsIDMyLCAzMiwgNTIsIDUzLCA1NCwgMTE5LCAxMjcsIDEyOCwgMTI5XToKKyAgICAgICAgICAgIGN1bSA9IDAKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDApOgorICAgICAgICAgICAgICAgIGN1bSB8PSBnZXRiaXRzKHNwYW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1bSwgMioqc3Bhbi0xKQorCisgICAgICAgICMgVmVyaWZ5IGFyZ3VtZW50IGNoZWNraW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uZ2V0cmFuZGJpdHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uZ2V0cmFuZGJpdHMsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZ2VuLmdldHJhbmRiaXRzLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmdlbi5nZXRyYW5kYml0cywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uZ2V0cmFuZGJpdHMsIDEwLjEpCisKKyAgICBkZWYgdGVzdF9yYW5kYmVsb3dfbG9naWMoc2VsZiwgX2xvZz1sb2csIGludD1pbnQpOgorICAgICAgICAjIGNoZWNrIGJpdGNvdW50IHRyYW5zaXRpb24gcG9pbnRzOiAgMioqaSBhbmQgMioqKGkrMSktMQorICAgICAgICAjIHNob3cgdGhhdDogayA9IGludCgxLjAwMSArIF9sb2cobiwgMikpCisgICAgICAgICMgaXMgZXF1YWwgdG8gb3Igb25lIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gbgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMSwgMTAwMCk6CisgICAgICAgICAgICBuID0gMUwgPDwgaSAjIGNoZWNrIGFuIGV4YWN0IHBvd2VyIG9mIHR3bworICAgICAgICAgICAgbnVtYml0cyA9IGkrMQorICAgICAgICAgICAgayA9IGludCgxLjAwMDAxICsgX2xvZyhuLCAyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgbnVtYml0cykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuID09IDIqKihrLTEpKQorCisgICAgICAgICAgICBuICs9IG4gLSAxICAgICAgIyBjaGVjayAxIGJlbG93IHRoZSBuZXh0IHBvd2VyIG9mIHR3bworICAgICAgICAgICAgayA9IGludCgxLjAwMDAxICsgX2xvZyhuLCAyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgW251bWJpdHMsIG51bWJpdHMrMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMioqayA+IG4gPiAyKiooay0yKSkKKworICAgICAgICAgICAgbiAtPSBuID4+IDE1ICAgICAjIGNoZWNrIGEgbGl0dGxlIGZhcnRoZXIgYmVsb3cgdGhlIG5leHQgcG93ZXIgb2YgdHdvCisgICAgICAgICAgICBrID0gaW50KDEuMDAwMDEgKyBfbG9nKG4sIDIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBudW1iaXRzKSAgICAgICAgIyBub3RlIHRoZSBzdHJvbmdlciBhc3NlcnRpb24KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiprID4gbiA+IDIqKihrLTEpKSAgICMgbm90ZSB0aGUgc3Ryb25nZXIgYXNzZXJ0aW9uCisKKworY2xhc3MgTWVyc2VubmVUd2lzdGVyX1Rlc3RCYXNpY09wcyhUZXN0QmFzaWNPcHMpOgorICAgIGdlbiA9IHJhbmRvbS5SYW5kb20oKQorCisgICAgZGVmIHRlc3Rfc2V0c3RhdGVfZmlyc3RfYXJnKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmdlbi5zZXRzdGF0ZSwgKDEsIE5vbmUsIE5vbmUpKQorCisgICAgZGVmIHRlc3Rfc2V0c3RhdGVfbWlkZGxlX2FyZyhzZWxmKToKKyAgICAgICAgIyBXcm9uZyB0eXBlLCBzL2IgdHVwbGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmdlbi5zZXRzdGF0ZSwgKDIsIE5vbmUsIE5vbmUpKQorICAgICAgICAjIFdyb25nIGxlbmd0aCwgcy9iIDYyNQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmdlbi5zZXRzdGF0ZSwgKDIsICgxLDIsMyksIE5vbmUpKQorICAgICAgICAjIFdyb25nIHR5cGUsIHMvYiB0dXBsZSBvZiA2MjUgaW50cworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNldHN0YXRlLCAoMiwgKCdhJywpKjYyNSwgTm9uZSkpCisgICAgICAgICMgTGFzdCBlbGVtZW50IHMvYiBhbiBpbnQgYWxzbworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNldHN0YXRlLCAoMiwgKDAsKSo2MjQrKCdhJywpLCBOb25lKSkKKworICAgIGRlZiB0ZXN0X3JlZmVyZW5jZUltcGxlbWVudGF0aW9uKHNlbGYpOgorICAgICAgICAjIENvbXBhcmUgdGhlIHB5dGhvbiBpbXBsZW1lbnRhdGlvbiB3aXRoIHJlc3VsdHMgZnJvbSB0aGUgb3JpZ2luYWwKKyAgICAgICAgIyBjb2RlLiAgQ3JlYXRlIDIwMDAgNTMtYml0IHByZWNpc2lvbiByYW5kb20gZmxvYXRzLiAgQ29tcGFyZSBvbmx5CisgICAgICAgICMgdGhlIGxhc3QgdGVuIGVudHJpZXMgdG8gc2hvdyB0aGF0IHRoZSBpbmRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgIyBhcmUgdHJhY2tpbmcuICBIZXJlIGlzIHRoZSBtYWluKCkgZnVuY3Rpb24gbmVlZGVkIHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgIyBsaXN0IG9mIGV4cGVjdGVkIHJhbmRvbSBudW1iZXJzOgorICAgICAgICAjICAgIHZvaWQgbWFpbih2b2lkKXsKKyAgICAgICAgIyAgICAgICAgIGludCBpOworICAgICAgICAjICAgICAgICAgdW5zaWduZWQgbG9uZyBpbml0WzRdPXs2MTczMSwgMjQ5MDMsIDYxNCwgNDIxNDN9LCBsZW5ndGg9NDsKKyAgICAgICAgIyAgICAgICAgIGluaXRfYnlfYXJyYXkoaW5pdCwgbGVuZ3RoKTsKKyAgICAgICAgIyAgICAgICAgIGZvciAoaT0wOyBpPDIwMDA7IGkrKykgeworICAgICAgICAjICAgICAgICAgICBwcmludGYoIiUuMTVmICIsIGdlbnJhbmRfcmVzNTMoKSk7CisgICAgICAgICMgICAgICAgICAgIGlmIChpJTU9PTQpIHByaW50ZigiXG4iKTsKKyAgICAgICAgIyAgICAgICAgIH0KKyAgICAgICAgIyAgICAgfQorICAgICAgICBleHBlY3RlZCA9IFswLjQ1ODM5ODAzMDczNzEzMjU5LAorICAgICAgICAgICAgICAgICAgICAwLjg2MDU3ODE1MjAxOTc4NzgyLAorICAgICAgICAgICAgICAgICAgICAwLjkyODQ4MzMxNzI2NzgyMTUyLAorICAgICAgICAgICAgICAgICAgICAwLjM1OTMyNjgxMTE5NzgyNDYxLAorICAgICAgICAgICAgICAgICAgICAwLjA4MTgyMzQ5Mzc2MjQ0OTU3MywKKyAgICAgICAgICAgICAgICAgICAgMC4xNDMzMjIyNjQ3MDE2OTMyOSwKKyAgICAgICAgICAgICAgICAgICAgMC4wODQyOTc4MjM4MjM1MjAwMjQsCisgICAgICAgICAgICAgICAgICAgIDAuNTM4MTQ4NjQ2NzE4MzE0NTMsCisgICAgICAgICAgICAgICAgICAgIDAuMDg5MjE1MDI0OTExOTkzNDAxLAorICAgICAgICAgICAgICAgICAgICAwLjc4NDg2MTk2MTA1MzcyOTA3XQorCisgICAgICAgIHNlbGYuZ2VuLnNlZWQoNjE3MzFMICsgKDI0OTAzTDw8MzIpICsgKDYxNEw8PDY0KSArICg0MjE0M0w8PDk2KSkKKyAgICAgICAgYWN0dWFsID0gc2VsZi5yYW5kb21saXN0KDIwMDApWy0xMDpdCisgICAgICAgIGZvciBhLCBlIGluIHppcChhY3R1YWwsIGV4cGVjdGVkKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoYSxlLHBsYWNlcz0xNCkKKworICAgIGRlZiB0ZXN0X3N0cm9uZ19yZWZlcmVuY2VfaW1wbGVtZW50YXRpb24oc2VsZik6CisgICAgICAgICMgTGlrZSB0ZXN0X3JlZmVyZW5jZUltcGxlbWVudGF0aW9uLCBidXQgY2hlY2tzIGZvciBleGFjdCBiaXQtbGV2ZWwKKyAgICAgICAgIyBlcXVhbGl0eS4gIFRoaXMgc2hvdWxkIHBhc3Mgb24gYW55IGJveCB3aGVyZSBDIGRvdWJsZSBjb250YWlucworICAgICAgICAjIGF0IGxlYXN0IDUzIGJpdHMgb2YgcHJlY2lzaW9uICh0aGUgdW5kZXJseWluZyBhbGdvcml0aG0gc3VmZmVycworICAgICAgICAjIG5vIHJvdW5kaW5nIGVycm9ycyAtLSBhbGwgcmVzdWx0cyBhcmUgZXhhY3QpLgorICAgICAgICBmcm9tIG1hdGggaW1wb3J0IGxkZXhwCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbMHgwZWFiMzI1OGQyMjMxZkwsCisgICAgICAgICAgICAgICAgICAgIDB4MWI4OWRiMzE1Mjc3YTVMLAorICAgICAgICAgICAgICAgICAgICAweDFkYjYyMmE1NTE4MDE2TCwKKyAgICAgICAgICAgICAgICAgICAgMHgwYjdmOWFmMGQ1NzViZkwsCisgICAgICAgICAgICAgICAgICAgIDB4MDI5ZTRjNGRiODIyNDBMLAorICAgICAgICAgICAgICAgICAgICAweDA0OTYxODkyZjVkNjczTCwKKyAgICAgICAgICAgICAgICAgICAgMHgwMmIyOTE1OThlNDU4OUwsCisgICAgICAgICAgICAgICAgICAgIDB4MTEzODgzODJjMTU2OTRMLAorICAgICAgICAgICAgICAgICAgICAweDAyZGFkOTc3YzllMWZlTCwKKyAgICAgICAgICAgICAgICAgICAgMHgxOTFkOTZkNGQzMzRjNkxdCisgICAgICAgIHNlbGYuZ2VuLnNlZWQoNjE3MzFMICsgKDI0OTAzTDw8MzIpICsgKDYxNEw8PDY0KSArICg0MjE0M0w8PDk2KSkKKyAgICAgICAgYWN0dWFsID0gc2VsZi5yYW5kb21saXN0KDIwMDApWy0xMDpdCisgICAgICAgIGZvciBhLCBlIGluIHppcChhY3R1YWwsIGV4cGVjdGVkKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9uZyhsZGV4cChhLCA1MykpLCBlKQorCisgICAgZGVmIHRlc3RfbG9uZ19zZWVkKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgbW9zdCBpbnRlcmVzdGluZyB0byBydW4gaW4gZGVidWcgbW9kZSwganVzdCB0byBtYWtlIHN1cmUKKyAgICAgICAgIyBub3RoaW5nIGJsb3dzIHVwLiAgVW5kZXIgdGhlIGNvdmVycywgYSBkeW5hbWljYWxseSByZXNpemVkIGFycmF5CisgICAgICAgICMgaXMgYWxsb2NhdGVkLCBjb25zdW1pbmcgc3BhY2UgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2YgYml0cworICAgICAgICAjIGluIHRoZSBzZWVkLiAgVW5mb3J0dW5hdGVseSwgdGhhdCdzIGEgcXVhZHJhdGljLXRpbWUgYWxnb3JpdGhtLAorICAgICAgICAjIHNvIGRvbid0IG1ha2UgdGhpcyBob3JyaWJseSBiaWcuCisgICAgICAgIHNlZWQgPSAoMUwgPDwgKDEwMDAwICogOCkpIC0gMSAgIyBhYm91dCAxMEsgYnl0ZXMKKyAgICAgICAgc2VsZi5nZW4uc2VlZChzZWVkKQorCisgICAgZGVmIHRlc3RfNTNfYml0c19wZXJfZmxvYXQoc2VsZik6CisgICAgICAgICMgVGhpcyBzaG91bGQgcGFzcyB3aGVuZXZlciBhIEMgZG91YmxlIGhhcyA1MyBiaXQgcHJlY2lzaW9uLgorICAgICAgICBzcGFuID0gMiAqKiA1MworICAgICAgICBjdW0gPSAwCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDApOgorICAgICAgICAgICAgY3VtIHw9IGludChzZWxmLmdlbi5yYW5kb20oKSAqIHNwYW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VtLCBzcGFuLTEpCisKKyAgICBkZWYgdGVzdF9iaWdyYW5kKHNlbGYpOgorICAgICAgICAjIFRoZSByYW5kcmFuZ2Ugcm91dGluZSBzaG91bGQgYnVpbGQtdXAgdGhlIHJlcXVpcmVkIG51bWJlciBvZiBiaXRzCisgICAgICAgICMgaW4gc3RhZ2VzIHNvIHRoYXQgYWxsIGJpdCBwb3NpdGlvbnMgYXJlIGFjdGl2ZS4KKyAgICAgICAgc3BhbiA9IDIgKiogNTAwCisgICAgICAgIGN1bSA9IDAKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMCk6CisgICAgICAgICAgICByID0gc2VsZi5nZW4ucmFuZHJhbmdlKHNwYW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8PSByIDwgc3BhbikKKyAgICAgICAgICAgIGN1bSB8PSByCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VtLCBzcGFuLTEpCisKKyAgICBkZWYgdGVzdF9iaWdyYW5kX3JhbmdlcyhzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gWzQwLDgwLCAxNjAsIDIwMCwgMjExLCAyNTAsIDM3NSwgNTEyLCA1NTBdOgorICAgICAgICAgICAgc3RhcnQgPSBzZWxmLmdlbi5yYW5kcmFuZ2UoMiAqKiBpKQorICAgICAgICAgICAgc3RvcCA9IHNlbGYuZ2VuLnJhbmRyYW5nZSgyICoqIChpLTIpKQorICAgICAgICAgICAgaWYgc3RvcCA8PSBzdGFydDoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFydCA8PSBzZWxmLmdlbi5yYW5kcmFuZ2Uoc3RhcnQsIHN0b3ApIDwgc3RvcCkKKworICAgIGRlZiB0ZXN0X3JhbmdlbGltaXRzKHNlbGYpOgorICAgICAgICBmb3Igc3RhcnQsIHN0b3AgaW4gWygtMiwwKSwgKC0oMioqNjApLTIsLSgyKio2MCkpLCAoMioqNjAsMioqNjArMildOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocmFuZ2Uoc3RhcnQsc3RvcCkpLAorICAgICAgICAgICAgICAgIHNldChbc2VsZi5nZW4ucmFuZHJhbmdlKHN0YXJ0LHN0b3ApIGZvciBpIGluIHhyYW5nZSgxMDApXSkpCisKKyAgICBkZWYgdGVzdF9nZW5yYW5kYml0cyhzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgY3Jvc3MtcGxhdGZvcm0gcmVwZWF0YWJpbGl0eQorICAgICAgICBzZWxmLmdlbi5zZWVkKDEyMzQ1NjcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZW4uZ2V0cmFuZGJpdHMoMTAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICA5NzkwNDg0NTc3NzM0MzUxMDQwNDcxODk1NjExNUwpCisgICAgICAgICMgVmVyaWZ5IHJhbmdlcworICAgICAgICBmb3IgayBpbiB4cmFuZ2UoMSwgMTAwMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8PSBzZWxmLmdlbi5nZXRyYW5kYml0cyhrKSA8IDIqKmspCisKKyAgICAgICAgIyBWZXJpZnkgYWxsIGJpdHMgYWN0aXZlCisgICAgICAgIGdldGJpdHMgPSBzZWxmLmdlbi5nZXRyYW5kYml0cworICAgICAgICBmb3Igc3BhbiBpbiBbMSwgMiwgMywgNCwgMzEsIDMyLCAzMiwgNTIsIDUzLCA1NCwgMTE5LCAxMjcsIDEyOCwgMTI5XToKKyAgICAgICAgICAgIGN1bSA9IDAKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDApOgorICAgICAgICAgICAgICAgIGN1bSB8PSBnZXRiaXRzKHNwYW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1bSwgMioqc3Bhbi0xKQorCisgICAgICAgICMgVmVyaWZ5IGFyZ3VtZW50IGNoZWNraW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uZ2V0cmFuZGJpdHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uZ2V0cmFuZGJpdHMsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmdlbi5nZXRyYW5kYml0cywgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5nZW4uZ2V0cmFuZGJpdHMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZ2VuLmdldHJhbmRiaXRzLCAtMSkKKworICAgIGRlZiB0ZXN0X3JhbmRiZWxvd19sb2dpYyhzZWxmLCBfbG9nPWxvZywgaW50PWludCk6CisgICAgICAgICMgY2hlY2sgYml0Y291bnQgdHJhbnNpdGlvbiBwb2ludHM6ICAyKippIGFuZCAyKiooaSsxKS0xCisgICAgICAgICMgc2hvdyB0aGF0OiBrID0gaW50KDEuMDAxICsgX2xvZyhuLCAyKSkKKyAgICAgICAgIyBpcyBlcXVhbCB0byBvciBvbmUgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgYml0cyBpbiBuCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxLCAxMDAwKToKKyAgICAgICAgICAgIG4gPSAxTCA8PCBpICMgY2hlY2sgYW4gZXhhY3QgcG93ZXIgb2YgdHdvCisgICAgICAgICAgICBudW1iaXRzID0gaSsxCisgICAgICAgICAgICBrID0gaW50KDEuMDAwMDEgKyBfbG9nKG4sIDIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBudW1iaXRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG4gPT0gMioqKGstMSkpCisKKyAgICAgICAgICAgIG4gKz0gbiAtIDEgICAgICAjIGNoZWNrIDEgYmVsb3cgdGhlIG5leHQgcG93ZXIgb2YgdHdvCisgICAgICAgICAgICBrID0gaW50KDEuMDAwMDEgKyBfbG9nKG4sIDIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBbbnVtYml0cywgbnVtYml0cysxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiprID4gbiA+IDIqKihrLTIpKQorCisgICAgICAgICAgICBuIC09IG4gPj4gMTUgICAgICMgY2hlY2sgYSBsaXR0bGUgZmFydGhlciBiZWxvdyB0aGUgbmV4dCBwb3dlciBvZiB0d28KKyAgICAgICAgICAgIGsgPSBpbnQoMS4wMDAwMSArIF9sb2cobiwgMikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIG51bWJpdHMpICAgICAgICAjIG5vdGUgdGhlIHN0cm9uZ2VyIGFzc2VydGlvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIqKmsgPiBuID4gMioqKGstMSkpICAgIyBub3RlIHRoZSBzdHJvbmdlciBhc3NlcnRpb24KKworICAgIGRlZiB0ZXN0X3JhbmRyYW5nZV9idWdfMTU5MDg5MShzZWxmKToKKyAgICAgICAgc3RhcnQgPSAxMDAwMDAwMDAwMDAwCisgICAgICAgIHN0b3AgPSAtMTAwMDAwMDAwMDAwMDAwMDAwMDAwCisgICAgICAgIHN0ZXAgPSAtMjAwCisgICAgICAgIHggPSBzZWxmLmdlbi5yYW5kcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdG9wIDwgeCA8PSBzdGFydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoeCtzdG9wKSVzdGVwLCAwKQorCitkZWYgZ2FtbWEoeiwgc3FydDJwaT0oMi4wKnBpKSoqMC41KToKKyAgICAjIFJlZmxlY3Rpb24gdG8gcmlnaHQgaGFsZiBvZiBjb21wbGV4IHBsYW5lCisgICAgaWYgeiA8IDAuNToKKyAgICAgICAgcmV0dXJuIHBpIC8gc2luKHBpKnopIC8gZ2FtbWEoMS4wLXopCisgICAgIyBMYW5jem9zIGFwcHJveGltYXRpb24gd2l0aCBnPTcKKyAgICBheiA9IHogKyAoNy4wIC0gMC41KQorICAgIHJldHVybiBheiAqKiAoei0wLjUpIC8gZXhwKGF6KSAqIHNxcnQycGkgKiBmc3VtKFsKKyAgICAgICAgMC45OTk5OTk5OTk5OTk1MTgzLAorICAgICAgICA2NzYuNTIwMzY4MTIxODgzNSAvIHosCisgICAgICAgIC0xMjU5LjEzOTIxNjcyMjI4OSAvICh6KzEuMCksCisgICAgICAgIDc3MS4zMjM0Mjg3NzU3Njc0IC8gKHorMi4wKSwKKyAgICAgICAgLTE3Ni42MTUwMjkxNDk4Mzg2IC8gKHorMy4wKSwKKyAgICAgICAgMTIuNTA3MzQzMjQwMDkwNTYgLyAoeis0LjApLAorICAgICAgICAtMC4xMzg1NzEwMzMxMjk2NTI2IC8gKHorNS4wKSwKKyAgICAgICAgMC45OTM0OTM3MTEzOTMwNzQ4ZS0wNSAvICh6KzYuMCksCisgICAgICAgIDAuMTY1OTQ3MDE4NzQwODQ2MmUtMDYgLyAoeis3LjApLAorICAgIF0pCisKK2NsYXNzIFRlc3REaXN0cmlidXRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF96ZXJvaW5wdXRzKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IGRpc3RyaWJ1dGlvbnMgY2FuIGhhbmRsZSBhIHNlcmllcyBvZiB6ZXJvIGlucHV0cycKKyAgICAgICAgZyA9IHJhbmRvbS5SYW5kb20oKQorICAgICAgICB4ID0gW2cucmFuZG9tKCkgZm9yIGkgaW4geHJhbmdlKDUwKV0gKyBbMC4wXSo1CisgICAgICAgIGcucmFuZG9tID0geFs6XS5wb3A7IGcudW5pZm9ybSgxLDEwKQorICAgICAgICBnLnJhbmRvbSA9IHhbOl0ucG9wOyBnLnBhcmV0b3ZhcmlhdGUoMS4wKQorICAgICAgICBnLnJhbmRvbSA9IHhbOl0ucG9wOyBnLmV4cG92YXJpYXRlKDEuMCkKKyAgICAgICAgZy5yYW5kb20gPSB4WzpdLnBvcDsgZy53ZWlidWxsdmFyaWF0ZSgxLjAsIDEuMCkKKyAgICAgICAgZy5yYW5kb20gPSB4WzpdLnBvcDsgZy52b25taXNlc3ZhcmlhdGUoMS4wLCAxLjApCisgICAgICAgIGcucmFuZG9tID0geFs6XS5wb3A7IGcubm9ybWFsdmFyaWF0ZSgwLjAsIDEuMCkKKyAgICAgICAgZy5yYW5kb20gPSB4WzpdLnBvcDsgZy5nYXVzcygwLjAsIDEuMCkKKyAgICAgICAgZy5yYW5kb20gPSB4WzpdLnBvcDsgZy5sb2dub3JtdmFyaWF0ZSgwLjAsIDEuMCkKKyAgICAgICAgZy5yYW5kb20gPSB4WzpdLnBvcDsgZy52b25taXNlc3ZhcmlhdGUoMC4wLCAxLjApCisgICAgICAgIGcucmFuZG9tID0geFs6XS5wb3A7IGcuZ2FtbWF2YXJpYXRlKDAuMDEsIDEuMCkKKyAgICAgICAgZy5yYW5kb20gPSB4WzpdLnBvcDsgZy5nYW1tYXZhcmlhdGUoMS4wLCAxLjApCisgICAgICAgIGcucmFuZG9tID0geFs6XS5wb3A7IGcuZ2FtbWF2YXJpYXRlKDIwMC4wLCAxLjApCisgICAgICAgIGcucmFuZG9tID0geFs6XS5wb3A7IGcuYmV0YXZhcmlhdGUoMy4wLCAzLjApCisgICAgICAgIGcucmFuZG9tID0geFs6XS5wb3A7IGcudHJpYW5ndWxhcigwLjAsIDEuMCwgMS4wLzMuMCkKKworICAgIGRlZiB0ZXN0X2F2Z19zdGQoc2VsZik6CisgICAgICAgICMgVXNlIGludGVncmF0aW9uIHRvIHRlc3QgZGlzdHJpYnV0aW9uIGF2ZXJhZ2UgYW5kIHN0YW5kYXJkIGRldmlhdGlvbi4KKyAgICAgICAgIyBPbmx5IHdvcmtzIGZvciBkaXN0cmlidXRpb25zIHdoaWNoIGRvIG5vdCBjb25zdW1lIHZhcmlhdGVzIGluIHBhaXJzCisgICAgICAgIGcgPSByYW5kb20uUmFuZG9tKCkKKyAgICAgICAgTiA9IDUwMDAKKyAgICAgICAgeCA9IFtpL2Zsb2F0KE4pIGZvciBpIGluIHhyYW5nZSgxLE4pXQorICAgICAgICBmb3IgdmFyaWF0ZSwgYXJncywgbXUsIHNpZ21hc3FyZCBpbiBbCisgICAgICAgICAgICAgICAgKGcudW5pZm9ybSwgKDEuMCwxMC4wKSwgKDEwLjArMS4wKS8yLCAoMTAuMC0xLjApKioyLzEyKSwKKyAgICAgICAgICAgICAgICAoZy50cmlhbmd1bGFyLCAoMC4wLCAxLjAsIDEuMC8zLjApLCA0LjAvOS4wLCA3LjAvOS4wLzE4LjApLAorICAgICAgICAgICAgICAgIChnLmV4cG92YXJpYXRlLCAoMS41LCksIDEvMS41LCAxLzEuNSoqMiksCisgICAgICAgICAgICAgICAgKGcudm9ubWlzZXN2YXJpYXRlLCAoMS4yMywgMCksIHBpLCBwaSoqMi8zKSwKKyAgICAgICAgICAgICAgICAoZy5wYXJldG92YXJpYXRlLCAoNS4wLCksIDUuMC8oNS4wLTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuMC8oKDUuMC0xKSoqMiooNS4wLTIpKSksCisgICAgICAgICAgICAgICAgKGcud2VpYnVsbHZhcmlhdGUsICgxLjAsIDMuMCksIGdhbW1hKDErMS8zLjApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhbW1hKDErMi8zLjApLWdhbW1hKDErMS8zLjApKioyKSBdOgorICAgICAgICAgICAgZy5yYW5kb20gPSB4WzpdLnBvcAorICAgICAgICAgICAgeSA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHgpKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHkuYXBwZW5kKHZhcmlhdGUoKmFyZ3MpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzMSA9IHMyID0gMAorICAgICAgICAgICAgZm9yIGUgaW4geToKKyAgICAgICAgICAgICAgICBzMSArPSBlCisgICAgICAgICAgICAgICAgczIgKz0gKGUgLSBtdSkgKiogMgorICAgICAgICAgICAgTiA9IGxlbih5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzMS9OLCBtdSwgcGxhY2VzPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nJXMlcicgJSAodmFyaWF0ZS5fX25hbWVfXywgYXJncykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHMyLyhOLTEpLCBzaWdtYXNxcmQsIHBsYWNlcz0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9JyVzJXInICUgKHZhcmlhdGUuX19uYW1lX18sIGFyZ3MpKQorCisgICAgZGVmIHRlc3RfY29uc3RhbnQoc2VsZik6CisgICAgICAgIGcgPSByYW5kb20uUmFuZG9tKCkKKyAgICAgICAgTiA9IDEwMAorICAgICAgICBmb3IgdmFyaWF0ZSwgYXJncywgZXhwZWN0ZWQgaW4gWworICAgICAgICAgICAgICAgIChnLnVuaWZvcm0sICgxMC4wLCAxMC4wKSwgMTAuMCksCisgICAgICAgICAgICAgICAgKGcudHJpYW5ndWxhciwgKDEwLjAsIDEwLjApLCAxMC4wKSwKKyAgICAgICAgICAgICAgICAjKGcudHJpYW5ndWxhciwgKDEwLjAsIDEwLjAsIDEwLjApLCAxMC4wKSwKKyAgICAgICAgICAgICAgICAoZy5leHBvdmFyaWF0ZSwgKGZsb2F0KCdpbmYnKSwpLCAwLjApLAorICAgICAgICAgICAgICAgIChnLnZvbm1pc2VzdmFyaWF0ZSwgKDMuMCwgZmxvYXQoJ2luZicpKSwgMy4wKSwKKyAgICAgICAgICAgICAgICAoZy5nYXVzcywgKDEwLjAsIDAuMCksIDEwLjApLAorICAgICAgICAgICAgICAgIChnLmxvZ25vcm12YXJpYXRlLCAoMC4wLCAwLjApLCAxLjApLAorICAgICAgICAgICAgICAgIChnLmxvZ25vcm12YXJpYXRlLCAoLWZsb2F0KCdpbmYnKSwgMC4wKSwgMC4wKSwKKyAgICAgICAgICAgICAgICAoZy5ub3JtYWx2YXJpYXRlLCAoMTAuMCwgMC4wKSwgMTAuMCksCisgICAgICAgICAgICAgICAgKGcucGFyZXRvdmFyaWF0ZSwgKGZsb2F0KCdpbmYnKSwpLCAxLjApLAorICAgICAgICAgICAgICAgIChnLndlaWJ1bGx2YXJpYXRlLCAoMTAuMCwgZmxvYXQoJ2luZicpKSwgMTAuMCksCisgICAgICAgICAgICAgICAgKGcud2VpYnVsbHZhcmlhdGUsICgwLjAsIDEwLjApLCAwLjApLAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE4pOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyaWF0ZSgqYXJncyksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3Rfdm9uX21pc2VzX3JhbmdlKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE3MTQ5OiB2b24gbWlzZXMgdmFyaWF0ZXMgd2VyZSBub3QgY29uc2lzdGVudGx5IGluIHRoZQorICAgICAgICAjIHJhbmdlIFswLCAyKlBJXS4KKyAgICAgICAgZyA9IHJhbmRvbS5SYW5kb20oKQorICAgICAgICBOID0gMTAwCisgICAgICAgIGZvciBtdSBpbiAwLjAsIDAuMSwgMy4xLCA2LjI6CisgICAgICAgICAgICBmb3Iga2FwcGEgaW4gMC4wLCAyLjMsIDUwMC4wOgorICAgICAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKE4pOgorICAgICAgICAgICAgICAgICAgICBzYW1wbGUgPSBnLnZvbm1pc2VzdmFyaWF0ZShtdSwga2FwcGEpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIDAgPD0gc2FtcGxlIDw9IHJhbmRvbS5UV09QSSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0oInZvbm1pc2VzdmFyaWF0ZSh7fSwge30pIHByb2R1Y2VkIGEgcmVzdWx0IHt9IG91dCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvZiByYW5nZSBbMCwgMipwaV0iKS5mb3JtYXQobXUsIGthcHBhLCBzYW1wbGUpKQorCisgICAgZGVmIHRlc3Rfdm9uX21pc2VzX2xhcmdlX2thcHBhKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzE0MTogdm9ubWlzZXN2YXJpYXRlKCkgd2FzIGhhbmcgZm9yIGxhcmdlIGthcHBhcworICAgICAgICByYW5kb20udm9ubWlzZXN2YXJpYXRlKDAsIDFlMTUpCisgICAgICAgIHJhbmRvbS52b25taXNlc3ZhcmlhdGUoMCwgMWUxMDApCisKKworY2xhc3MgVGVzdE1vZHVsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RNYWdpY0NvbnN0YW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyYW5kb20uTlZfTUFHSUNDT05TVCwgMS43MTU1Mjc3Njk5MjE0MSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyYW5kb20uVFdPUEksIDYuMjgzMTg1MzA3MTgpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmFuZG9tLkxPRzQsIDEuMzg2Mjk0MzYxMTE5ODkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmFuZG9tLlNHX01BR0lDQ09OU1QsIDIuNTA0MDc3Mzk2Nzc2MjcpCisKKyAgICBkZWYgdGVzdF9fYWxsX18oc2VsZik6CisgICAgICAgICMgdGVzdHMgdmFsaWRpdHkgYnV0IG5vdCBjb21wbGV0ZW5lc3Mgb2YgdGhlIF9fYWxsX18gbGlzdAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2V0KHJhbmRvbS5fX2FsbF9fKSA8PSBzZXQoZGlyKHJhbmRvbSkpKQorCisgICAgZGVmIHRlc3RfcmFuZG9tX3N1YmNsYXNzX3dpdGhfa3dhcmdzKHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZyAjMTQ4NjY2MyAtLSB0aGlzIHVzZWQgdG8gZXJyb25lb3VzbHkgcmFpc2UgYSBUeXBlRXJyb3IKKyAgICAgICAgY2xhc3MgU3ViY2xhc3MocmFuZG9tLlJhbmRvbSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmV3YXJnPU5vbmUpOgorICAgICAgICAgICAgICAgIHJhbmRvbS5SYW5kb20uX19pbml0X18oc2VsZikKKyAgICAgICAgU3ViY2xhc3MobmV3YXJnPTEpCisKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIHRlc3RjbGFzc2VzID0gICAgW1dpY2htYW5uSGlsbF9UZXN0QmFzaWNPcHMsCisgICAgICAgICAgICAgICAgICAgICAgTWVyc2VubmVUd2lzdGVyX1Rlc3RCYXNpY09wcywKKyAgICAgICAgICAgICAgICAgICAgICBUZXN0RGlzdHJpYnV0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICBUZXN0TW9kdWxlXQorCisgICAgdHJ5OgorICAgICAgICByYW5kb20uU3lzdGVtUmFuZG9tKCkucmFuZG9tKCkKKyAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIHRlc3RjbGFzc2VzLmFwcGVuZChTeXN0ZW1SYW5kb21fVGVzdEJhc2ljT3BzKQorCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdGNsYXNzZXMpCisKKyAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKKyAgICBpbXBvcnQgc3lzCisgICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6CisgICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihjb3VudHMpKToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RjbGFzc2VzKQorICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQorICAgICAgICBwcmludCBjb3VudHMKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcmUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9yZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGE4MWEyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcmUucHkKQEAgLTAsMCArMSwxMDMwIEBACitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHByZWNpc2lvbmJpZ21lbXRlc3QsIF8yRywgY3B5dGhvbl9vbmx5CitpbXBvcnQgcmUKK2Zyb20gcmUgaW1wb3J0IFNjYW5uZXIKK2ltcG9ydCBzcmVfY29uc3RhbnRzCitpbXBvcnQgc3lzCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgdHJhY2ViYWNrCitmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CisKKworIyBNaXNjIHRlc3RzIGZyb20gVGltIFBldGVycycgcmUuZG9jCisKKyMgV0FSTklORzogRG9uJ3QgY2hhbmdlIGRldGFpbHMgaW4gdGhlc2UgdGVzdHMgaWYgeW91IGRvbid0IGtub3cKKyMgd2hhdCB5b3UncmUgZG9pbmcuIFNvbWUgb2YgdGhlc2UgdGVzdHMgd2VyZSBjYXJlZnVsbHkgbW9kZWxlZCB0bworIyBjb3ZlciBtb3N0IG9mIHRoZSBjb2RlLgorCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgUmVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF93ZWFrcmVmKHNlbGYpOgorICAgICAgICBzID0gJ1FhYmJiY1InCisgICAgICAgIHggPSByZS5jb21waWxlKCdhYitjJykKKyAgICAgICAgeSA9IHByb3h5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5maW5kYWxsKCdRYWJiYmNSJyksIHkuZmluZGFsbCgnUWFiYmJjUicpKQorCisgICAgZGVmIHRlc3Rfc2VhcmNoX3N0YXJfcGx1cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goJ3gqJywgJ2F4eCcpLnNwYW4oMCksICgwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goJ3gqJywgJ2F4eCcpLnNwYW4oKSwgKDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgneCsnLCAnYXh4Jykuc3BhbigwKSwgKDEsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgneCsnLCAnYXh4Jykuc3BhbigpLCAoMSwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKCd4JywgJ2FhYScpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdhKicsICd4eHgnKS5zcGFuKDApLCAoMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ2EqJywgJ3h4eCcpLnNwYW4oKSwgKDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCd4KicsICd4eHhhJykuc3BhbigwKSwgKDAsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCd4KicsICd4eHhhJykuc3BhbigpLCAoMCwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ2ErJywgJ3h4eCcpLCBOb25lKQorCisgICAgZGVmIGJ1bXBfbnVtKHNlbGYsIG1hdGNob2JqKToKKyAgICAgICAgaW50X3ZhbHVlID0gaW50KG1hdGNob2JqLmdyb3VwKDApKQorICAgICAgICByZXR1cm4gc3RyKGludF92YWx1ZSArIDEpCisKKyAgICBkZWYgdGVzdF9iYXNpY19yZV9zdWIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCIoP2kpYisiLCAieCIsICJiYmJiIEJCQkIiKSwgJ3ggeCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKHInXGQrJywgc2VsZi5idW1wX251bSwgJzA4LjIgLTIgMjN4OTl5JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzkuMyAtMyAyNHgxMDB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIocidcZCsnLCBzZWxmLmJ1bXBfbnVtLCAnMDguMiAtMiAyM3g5OXknLCAzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnOS4zIC0zIDIzeDk5eScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJy4nLCBsYW1iZGEgbTogciJcbiIsICd4JyksICdcXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignLicsIHIiXG4iLCAneCcpLCAnXG4nKQorCisgICAgICAgIHMgPSByIlwxXDEiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCcoLiknLCBzLCAneCcpLCAneHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignKC4pJywgcmUuZXNjYXBlKHMpLCAneCcpLCBzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignKC4pJywgbGFtYmRhIG06IHMsICd4JyksIHMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJyg/UDxhPngpJywgJ1xnPGE+XGc8YT4nLCAneHgnKSwgJ3h4eHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignKD9QPGE+eCknLCAnXGc8YT5cZzwxPicsICd4eCcpLCAneHh4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCcoP1A8dW5rPngpJywgJ1xnPHVuaz5cZzx1bms+JywgJ3h4JyksICd4eHh4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJyg/UDx1bms+eCknLCAnXGc8MT5cZzwxPicsICd4eCcpLCAneHh4eCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ2EnLHInXHRcblx2XHJcZlxhXGJcQlxaXGFcQVx3XFdcc1xTXGRcRCcsJ2EnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXHRcblx2XHJcZlxhXGJcXEJcXFpcYVxcQVxcd1xcV1xcc1xcU1xcZFxcRCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCdhJywgJ1x0XG5cdlxyXGZcYScsICdhJyksICdcdFxuXHZcclxmXGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignYScsICdcdFxuXHZcclxmXGEnLCAnYScpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChjaHIoOSkrY2hyKDEwKStjaHIoMTEpK2NocigxMykrY2hyKDEyKStjaHIoNykpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCdeXHMqJywgJ1gnLCAndGVzdCcpLCAnWHRlc3QnKQorCisgICAgZGVmIHRlc3RfYnVnXzQ0OTk2NChzZWxmKToKKyAgICAgICAgIyBmYWlscyBmb3IgZ3JvdXAgZm9sbG93ZWQgYnkgb3RoZXIgZXNjYXBlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKHInKD9QPHVuaz54KScsICdcZzwxPlxnPDE+XFxiJywgJ3h4JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3h4XGJ4eFxiJykKKworICAgIGRlZiB0ZXN0X2J1Z180NDkwMDAoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3Igc3ViKCkgb24gZXNjYXBlZCBjaGFyYWN0ZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKHInXHJcbicsIHInXG4nLCAnYWJjXHJcbmRlZlxyXG4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYWJjXG5kZWZcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCdcclxuJywgcidcbicsICdhYmNcclxuZGVmXHJcbicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhYmNcbmRlZlxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIocidcclxuJywgJ1xuJywgJ2FiY1xyXG5kZWZcclxuJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FiY1xuZGVmXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignXHJcbicsICdcbicsICdhYmNcclxuZGVmXHJcbicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhYmNcbmRlZlxuJykKKworICAgIGRlZiB0ZXN0X2J1Z18xMTQwKHNlbGYpOgorICAgICAgICAjIHJlLnN1Yih4LCB5LCB1JycpIHNob3VsZCByZXR1cm4gdScnLCBub3QgJycsIGFuZAorICAgICAgICAjIHJlLnN1Yih4LCB5LCAnJykgc2hvdWxkIHJldHVybiAnJywgbm90IHUnJy4KKyAgICAgICAgIyBBbHNvOgorICAgICAgICAjIHJlLnN1Yih4LCB5LCB1bmljb2RlKHgpKSBzaG91bGQgcmV0dXJuIHVuaWNvZGUoeSksIGFuZAorICAgICAgICAjIHJlLnN1Yih4LCB5LCBzdHIoeCkpIHNob3VsZCByZXR1cm4KKyAgICAgICAgIyAgICAgc3RyKHkpIGlmIGlzaW5zdGFuY2UoeSwgc3RyKSBlbHNlIHVuaWNvZGUoeSkuCisgICAgICAgIGZvciB4IGluICd4JywgdSd4JzoKKyAgICAgICAgICAgIGZvciB5IGluICd5JywgdSd5JzoKKyAgICAgICAgICAgICAgICB6ID0gcmUuc3ViKHgsIHksIHUnJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHosIHUnJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoeiksIHVuaWNvZGUpCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgIHogPSByZS5zdWIoeCwgeSwgJycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6LCAnJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoeiksIHN0cikKKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgeiA9IHJlLnN1Yih4LCB5LCB1bmljb2RlKHgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeiwgeSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoeiksIHVuaWNvZGUpCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgIHogPSByZS5zdWIoeCwgeSwgc3RyKHgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeiwgeSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoeiksIHR5cGUoeSkpCisKKyAgICBkZWYgdGVzdF9idWdfMTY2MShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBmbGFncyBkbyBub3QgZ2V0IHNpbGVudGx5IGlnbm9yZWQgd2l0aCBjb21waWxlZCBwYXR0ZXJucworICAgICAgICBwYXR0ZXJuID0gcmUuY29tcGlsZSgnLicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJlLm1hdGNoLCBwYXR0ZXJuLCAnQScsIHJlLkkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJlLnNlYXJjaCwgcGF0dGVybiwgJ0EnLCByZS5JKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCByZS5maW5kYWxsLCBwYXR0ZXJuLCAnQScsIHJlLkkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJlLmNvbXBpbGUsIHBhdHRlcm4sIHJlLkkpCisKKyAgICBkZWYgdGVzdF9idWdfMzYyOShzZWxmKToKKyAgICAgICAgIyBBIHJlZ2V4IHRoYXQgdHJpZ2dlcmVkIGEgYnVnIGluIHRoZSBzcmUtY29kZSB2YWxpZGF0b3IKKyAgICAgICAgcmUuY29tcGlsZSgiKD9QPHF1b3RlPikoPyhxdW90ZSkpIikKKworICAgIGRlZiB0ZXN0X3N1Yl90ZW1wbGF0ZV9udW1lcmljX2VzY2FwZShzZWxmKToKKyAgICAgICAgIyBidWcgNzc2MzExIGFuZCBmcmllbmRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCd4JywgcidcMCcsICd4JyksICdcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCd4JywgcidcMDAwJywgJ3gnKSwgJ1wwMDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDAwMScsICd4JyksICdcMDAxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3gnLCByJ1wwMDgnLCAneCcpLCAnXDAnICsgJzgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDAwOScsICd4JyksICdcMCcgKyAnOScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCd4JywgcidcMTExJywgJ3gnKSwgJ1wxMTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDExNycsICd4JyksICdcMTE3JykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDExMTEnLCAneCcpLCAnXDExMTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDExMTEnLCAneCcpLCAnXDExMScgKyAnMScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3gnLCByJ1wwMCcsICd4JyksICdceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3gnLCByJ1wwNycsICd4JyksICdceDA3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3gnLCByJ1wwOCcsICd4JyksICdcMCcgKyAnOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCd4JywgcidcMDknLCAneCcpLCAnXDAnICsgJzknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDBhJywgJ3gnKSwgJ1wwJyArICdhJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneCcsIHInXDQwMCcsICd4JyksICdcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCd4JywgcidcNzc3JywgJ3gnKSwgJ1wzNzcnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcMScsICd4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLnN1YiwgJ3gnLCByJ1w4JywgJ3gnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAneCcsIHInXDknLCAneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcMTEnLCAneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcMTgnLCAneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcMWEnLCAneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcOTAnLCAneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcOTknLCAneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcMTE4JywgJ3gnKSAjIHInXDExJyArICc4JworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAneCcsIHInXDExYScsICd4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLnN1YiwgJ3gnLCByJ1wxODEnLCAneCcpICMgcidcMTgnICsgJzEnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICd4JywgcidcODAwJywgJ3gnKSAjIHInXDgwJyArICcwJworCisgICAgICAgICMgaW4gcHl0aG9uMi4zIChldGMpLCB0aGVzZSBsb29wIGVuZGxlc3NseSBpbiBzcmVfcGFyc2VyLnB5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3ViKCcoKCgoKCgoKCgoKHgpKSkpKSkpKSkpKScsIHInXDExJywgJ3gnKSwgJ3gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignKCgoKCgoKCgoKHkpKSkpKSkpKSkpKC4pJywgcidcMTE4JywgJ3h5eicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd4ejgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignKCgoKCgoKCgoKHkpKSkpKSkpKSkpKC4pJywgcidcMTFhJywgJ3h5eicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd4emEnKQorCisgICAgZGVmIHRlc3RfcXVhbGlmaWVkX3JlX3N1YihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ2EnLCAnYicsICdhYWFhYScpLCAnYmJiYmInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YignYScsICdiJywgJ2FhYWFhJywgMSksICdiYWFhYScpCisKKyAgICBkZWYgdGVzdF9idWdfMTE0NjYwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YihyJyhcUylccysoXFMpJywgcidcMSBcMicsICdoZWxsbyAgdGhlcmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnaGVsbG8gdGhlcmUnKQorCisgICAgZGVmIHRlc3RfYnVnXzQ2MjI3MChzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBlbXB0eSBzdWIoKSBiZWhhdmlvdXIsIHNlZSBTRiBidWcgIzQ2MjI3MAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigneConLCAnLScsICdhYnhkJyksICctYS1iLWQtJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoJ3grJywgJy0nLCAnYWJ4ZCcpLCAnYWItZCcpCisKKyAgICBkZWYgdGVzdF9zeW1ib2xpY19ncm91cHMoc2VsZik6CisgICAgICAgIHJlLmNvbXBpbGUoJyg/UDxhPngpKD9QPWEpKD8oYSl5KScpCisgICAgICAgIHJlLmNvbXBpbGUoJyg/UDxhMT54KSg/UD1hMSkoPyhhMSl5KScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnKD9QPGE+KSg/UDxhPiknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuY29tcGlsZSwgJyg/UHgpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoP1A9KScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnKD9QPTEpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoP1A9YSknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuY29tcGlsZSwgJyg/UD1hMSknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuY29tcGlsZSwgJyg/UD1hLiknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuY29tcGlsZSwgJyg/UDwpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoP1A8PiknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuY29tcGlsZSwgJyg/UDwxPiknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuY29tcGlsZSwgJyg/UDxhLj4pJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoPygpKScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnKD8oYSkpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoPygxYSkpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLmNvbXBpbGUsICcoPyhhLikpJykKKworICAgIGRlZiB0ZXN0X3N5bWJvbGljX3JlZnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICcoP1A8YT54KScsICdcZzxhJywgJ3h4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLnN1YiwgJyg/UDxhPngpJywgJ1xnPCcsICd4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICcoP1A8YT54KScsICdcZycsICd4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICcoP1A8YT54KScsICdcZzxhIGE+JywgJ3h4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLnN1YiwgJyg/UDxhPngpJywgJ1xnPD4nLCAneHgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAnKD9QPGE+eCknLCAnXGc8MWExPicsICd4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHJlLnN1YiwgJyg/UDxhPngpJywgJ1xnPGFiPicsICd4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICcoP1A8YT54KXwoP1A8Yj55KScsICdcZzxiPicsICd4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5zdWIsICcoP1A8YT54KXwoP1A8Yj55KScsICdcXDInLCAneHgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUuc3ViLCAnKD9QPGE+eCknLCAnXGc8LTE+JywgJ3h4JykKKworICAgIGRlZiB0ZXN0X3JlX3N1Ym4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3VibigiKD9pKWIrIiwgIngiLCAiYmJiYiBCQkJCIiksICgneCB4JywgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3VibigiYisiLCAieCIsICJiYmJiIEJCQkIiKSwgKCd4IEJCQkInLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWJuKCJiKyIsICJ4IiwgInh5eiIpLCAoJ3h5eicsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Ym4oImIqIiwgIngiLCAieHl6IiksICgneHh4eXh6eCcsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Ym4oImIqIiwgIngiLCAieHl6IiwgMiksICgneHh4eXonLCAyKSkKKworICAgIGRlZiB0ZXN0X3JlX3NwbGl0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6IiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJycsICdjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIjoqIiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJ2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDoqKSIsICI6YTpiOjpjIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6OicsICdjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig/OjoqKSIsICI6YTpiOjpjIiksIFsnJywgJ2EnLCAnYicsICdjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig6KSoiLCAiOmE6Yjo6YyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2InLCAnOicsICdjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIihbYjpdKykiLCAiOmE6Yjo6YyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6Yjo6JywgJ2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKGIpfCg6KykiLCAiOmE6Yjo6YyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgTm9uZSwgJzonLCAnYScsIE5vbmUsICc6JywgJycsICdiJywgTm9uZSwgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsICc6OicsICdjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig/OmIpfCg/OjorKSIsICI6YTpiOjpjIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnYScsICcnLCAnJywgJ2MnXSkKKworICAgIGRlZiB0ZXN0X3F1YWxpZmllZF9yZV9zcGxpdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiOiIsICI6YTpiOjpjIiwgMiksIFsnJywgJ2EnLCAnYjo6YyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCc6JywgJ2E6YjpjOmQnLCAyKSwgWydhJywgJ2InLCAnYzpkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig6KSIsICI6YTpiOjpjIiwgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYjo6YyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCIoOiopIiwgIjphOmI6OmMiLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJycsICc6JywgJ2EnLCAnOicsICdiOjpjJ10pCisKKyAgICBkZWYgdGVzdF9yZV9maW5kYWxsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIjorIiwgImFiYyIpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCI6KyIsICJhOmI6OmM6OjpkIiksIFsiOiIsICI6OiIsICI6OjoiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCIoOispIiwgImE6Yjo6Yzo6OmQiKSwgWyI6IiwgIjo6IiwgIjo6OiJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIig6KSg6KikiLCAiYTpiOjpjOjo6ZCIpLCBbKCI6IiwgIiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCI6IiwgIjoiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiOiIsICI6OiIpXSkKKworICAgIGRlZiB0ZXN0X2J1Z18xMTc2MTIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbChyIihhfChiKSkiLCAiYWJhIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygiYSIsICIiKSwoImIiLCAiYiIpLCgiYSIsICIiKV0pCisKKyAgICBkZWYgdGVzdF9yZV9tYXRjaChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYScsICdhJykuZ3JvdXBzKCksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoYSknLCAnYScpLmdyb3VwcygpLCAoJ2EnLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDApLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDEpLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDEsIDEpLCAoJ2EnLCAnYScpKQorCisgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoJygoYSl8KGIpKShjKT8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaCgnYScpLmdyb3VwcygpLCAoJ2EnLCAnYScsIE5vbmUsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaCgnYicpLmdyb3VwcygpLCAoJ2InLCBOb25lLCAnYicsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaCgnYWMnKS5ncm91cHMoKSwgKCdhJywgJ2EnLCBOb25lLCAnYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaCgnYmMnKS5ncm91cHMoKSwgKCdiJywgTm9uZSwgJ2InLCAnYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaCgnYmMnKS5ncm91cHMoIiIpLCAoJ2InLCAiIiwgJ2InLCAnYycpKQorCisgICAgICAgICMgQSBzaW5nbGUgZ3JvdXAKKyAgICAgICAgbSA9IHJlLm1hdGNoKCcoYSknLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5ncm91cCgwKSwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ3JvdXAoMCksICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdyb3VwKDEpLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5ncm91cCgxLCAxKSwgKCdhJywgJ2EnKSkKKworICAgICAgICBwYXQgPSByZS5jb21waWxlKCcoPzooP1A8YTE+YSl8KD9QPGIyPmIpKSg/UDxjMz5jKT8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaCgnYScpLmdyb3VwKDEsIDIsIDMpLCAoJ2EnLCBOb25lLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2InKS5ncm91cCgnYTEnLCAnYjInLCAnYzMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgJ2InLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2FjJykuZ3JvdXAoMSwgJ2IyJywgMyksICgnYScsIE5vbmUsICdjJykpCisKKyAgICBkZWYgdGVzdF9yZV9ncm91cHJlZl9leGlzdHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oXCgpPyhbXigpXSspKD8oMSlcKSkkJywgJyhhKScpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnKCcsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oXCgpPyhbXigpXSspKD8oMSlcKSkkJywgJ2EnKS5ncm91cHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXihcKCk/KFteKCldKykoPygxKVwpKSQnLCAnYSknKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXihcKCk/KFteKCldKykoPygxKVwpKSQnLCAnKGEnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXig/OihhKXxjKSgoPygxKWJ8ZCkpJCcsICdhYicpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnYScsICdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oPzooYSl8YykoKD8oMSlifGQpKSQnLCAnY2QnKS5ncm91cHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgJ2QnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXig/OihhKXxjKSgoPygxKXxkKSkkJywgJ2NkJykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKE5vbmUsICdkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oPzooYSl8YykoKD8oMSl8ZCkpJCcsICdhJykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgJycpKQorCisgICAgICAgICMgVGVzdHMgZm9yIGJ1ZyAjMTE3NzgzMTogZXhlcmNpc2UgZ3JvdXBzIG90aGVyIHRoYW4gdGhlIGZpcnN0IGdyb3VwCisgICAgICAgIHAgPSByZS5jb21waWxlKCcoP1A8ZzE+YSkoP1A8ZzI+Yik/KCg/KGcyKWN8ZCkpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm1hdGNoKCdhYmMnKS5ncm91cHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EnLCAnYicsICdjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5tYXRjaCgnYWQnKS5ncm91cHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EnLCBOb25lLCAnZCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubWF0Y2goJ2FiZCcpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubWF0Y2goJ2FjJyksIE5vbmUpCisKKworICAgIGRlZiB0ZXN0X3JlX2dyb3VwcmVmKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInXihcfCk/KFteKCldKylcMSQnLCAnfGF8JykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCd8JywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJ14oXHwpPyhbXigpXSspXDE/JCcsICdhJykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKE5vbmUsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocideKFx8KT8oW14oKV0rKVwxJCcsICdhfCcpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInXihcfCk/KFteKCldKylcMSQnLCAnfGEnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJ14oPzooYSl8YykoXDEpJCcsICdhYScpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnYScsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocideKD86KGEpfGMpKFwxKT8kJywgJ2MnKS5ncm91cHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9ncm91cGRpY3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyg/UDxmaXJzdD5maXJzdCkgKD9QPHNlY29uZD5zZWNvbmQpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlyc3Qgc2Vjb25kJykuZ3JvdXBkaWN0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydmaXJzdCc6J2ZpcnN0JywgJ3NlY29uZCc6J3NlY29uZCd9KQorCisgICAgZGVmIHRlc3RfZXhwYW5kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoP1A8Zmlyc3Q+Zmlyc3QpICg/UDxzZWNvbmQ+c2Vjb25kKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpcnN0IHNlY29uZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmV4cGFuZChyIlwyIFwxIFxnPHNlY29uZD4gXGc8Zmlyc3Q+IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCBmaXJzdCBzZWNvbmQgZmlyc3QiKQorCisgICAgZGVmIHRlc3RfcmVwZWF0X21pbm1heChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MX0kIiwgImFiYyIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXsxfT8kIiwgImFiYyIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXsxLDJ9JCIsICJhYmMiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MSwyfT8kIiwgImFiYyIpLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl4oXHcpezN9JCIsICJhYmMiKS5ncm91cCgxKSwgImMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXsxLDN9JCIsICJhYmMiKS5ncm91cCgxKSwgImMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXsxLDR9JCIsICJhYmMiKS5ncm91cCgxKSwgImMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXszLDR9PyQiLCAiYWJjIikuZ3JvdXAoMSksICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7M30/JCIsICJhYmMiKS5ncm91cCgxKSwgImMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXsxLDN9PyQiLCAiYWJjIikuZ3JvdXAoMSksICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MSw0fT8kIiwgImFiYyIpLmdyb3VwKDEpLCAiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl4oXHcpezMsNH0/JCIsICJhYmMiKS5ncm91cCgxKSwgImMiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl54ezF9JCIsICJ4eHgiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXnh7MX0/JCIsICJ4eHgiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXnh7MSwyfSQiLCAieHh4IiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl54ezEsMn0/JCIsICJ4eHgiKSwgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHszfSQiLCAieHh4IiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2goIl54ezEsM30kIiwgInh4eCIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHsxLDR9JCIsICJ4eHgiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7Myw0fT8kIiwgInh4eCIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHszfT8kIiwgInh4eCIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHsxLDN9PyQiLCAieHh4IiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2goIl54ezEsNH0/JCIsICJ4eHgiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7Myw0fT8kIiwgInh4eCIpLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl54e30kIiwgInh4eCIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHt9JCIsICJ4e30iKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2dldGF0dHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIihhKSIsICJhIikucG9zLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoYSkiLCAiYSIpLmVuZHBvcywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKGEpIiwgImEiKS5zdHJpbmcsICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKGEpIiwgImEiKS5yZWdzLCAoKDAsIDEpLCAoMCwgMSkpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCIoYSkiLCAiYSIpLnJlLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc3BlY2lhbF9lc2NhcGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxiKGIuKVxiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFiY2QgYWJjIGJjZCBieCIpLmdyb3VwKDEpLCAiYngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxCKGIuKVxCIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFiYyBiY2QgYmMgYWJ4ZCIpLmdyb3VwKDEpLCAiYngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxiKGIuKVxiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFiY2QgYWJjIGJjZCBieCIsIHJlLkxPQ0FMRSkuZ3JvdXAoMSksICJieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXEIoYi4pXEIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjIGJjZCBiYyBhYnhkIiwgcmUuTE9DQUxFKS5ncm91cCgxKSwgImJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYihiLilcYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkIGFiYyBiY2QgYngiLCByZS5VTklDT0RFKS5ncm91cCgxKSwgImJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcQihiLilcQiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmMgYmNkIGJjIGFieGQiLCByZS5VTklDT0RFKS5ncm91cCgxKSwgImJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJeYWJjJCIsICJcbmFiY1xuIiwgcmUuTSkuZ3JvdXAoMCksICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIl5cQWFiY1xaJCIsICJhYmMiLCByZS5NKS5ncm91cCgwKSwgImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXlxBYWJjXFokIiwgIlxuYWJjXG4iLCByZS5NKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYihiLilcYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUiYWJjZCBhYmMgYmNkIGJ4IikuZ3JvdXAoMSksICJieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXEIoYi4pXEIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ImFiYyBiY2QgYmMgYWJ4ZCIpLmdyb3VwKDEpLCAiYngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIl5hYmMkIiwgdSJcbmFiY1xuIiwgcmUuTSkuZ3JvdXAoMCksICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIl5cQWFiY1xaJCIsIHUiYWJjIiwgcmUuTSkuZ3JvdXAoMCksICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIl5cQWFiY1xaJCIsIHUiXG5hYmNcbiIsIHJlLk0pLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxkXERcd1xXXHNcUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxYWEhIGEiKS5ncm91cCgwKSwgIjFhYSEgYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXGRcRFx3XFdcc1xTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjFhYSEgYSIsIHJlLkxPQ0FMRSkuZ3JvdXAoMCksICIxYWEhIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxkXERcd1xXXHNcUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxYWEhIGEiLCByZS5VTklDT0RFKS5ncm91cCgwKSwgIjFhYSEgYSIpCisKKyAgICBkZWYgdGVzdF9zdHJpbmdfYm91bmRhcmllcyhzZWxmKToKKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEwNzEzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXGIoYWJjKVxiIiwgImFiYyIpLmdyb3VwKDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJhYmMiKQorICAgICAgICAjIFRoZXJlJ3MgYSB3b3JkIGJvdW5kYXJ5IGF0IHRoZSBzdGFydCBvZiBhIHN0cmluZy4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXGIiLCAiYWJjIikpCisgICAgICAgICMgQSBub24tZW1wdHkgc3RyaW5nIGluY2x1ZGVzIGEgbm9uLWJvdW5kYXJ5IHplcm8tbGVuZ3RoIG1hdGNoLgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKHIiXEIiLCAiYWJjIikpCisgICAgICAgICMgVGhlcmUgaXMgbm8gbm9uLWJvdW5kYXJ5IG1hdGNoIGF0IHRoZSBzdGFydCBvZiBhIHN0cmluZy4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZS5tYXRjaChyIlxCIiwgImFiYyIpKQorICAgICAgICAjIEhvd2V2ZXIsIGFuIGVtcHR5IHN0cmluZyBjb250YWlucyBubyB3b3JkIGJvdW5kYXJpZXMsIGFuZCBhbHNvIG5vCisgICAgICAgICMgbm9uLWJvdW5kYXJpZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXEIiLCAiIiksIE5vbmUpCisgICAgICAgICMgVGhpcyBvbmUgaXMgcXVlc3Rpb25hYmxlIGFuZCBkaWZmZXJlbnQgZnJvbSB0aGUgcGVybHJlIGJlaGF2aW91ciwKKyAgICAgICAgIyBidXQgZGVzY3JpYmVzIGN1cnJlbnQgYmVoYXZpb3IuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXGIiLCAiIiksIE5vbmUpCisgICAgICAgICMgQSBzaW5nbGUgd29yZC1jaGFyYWN0ZXIgc3RyaW5nIGhhcyB0d28gYm91bmRhcmllcywgYnV0IG5vCisgICAgICAgICMgbm9uLWJvdW5kYXJ5IGdhcHMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlLmZpbmRhbGwociJcYiIsICJhIikpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZS5maW5kYWxsKHIiXEIiLCAiYSIpKSwgMCkKKyAgICAgICAgIyBJZiB0aGVyZSBhcmUgbm8gd29yZHMsIHRoZXJlIGFyZSBubyBib3VuZGFyaWVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlLmZpbmRhbGwociJcYiIsICIgIikpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZS5maW5kYWxsKHIiXGIiLCAiICAgIikpLCAwKQorICAgICAgICAjIENhbiBtYXRjaCBhcm91bmQgdGhlIHdoaXRlc3BhY2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlLmZpbmRhbGwociJcQiIsICIgIikpLCAyKQorCisgICAgZGVmIHRlc3RfYmlnY2hhcnNldChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCh1IihbXHUyMjIyXHUyMjIzXSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUiXHUyMjIyIikuZ3JvdXAoMSksIHUiXHUyMjIyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCh1IihbXHUyMjIyXHUyMjIzXSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUiXHUyMjIyIiwgcmUuVU5JQ09ERSkuZ3JvdXAoMSksIHUiXHUyMjIyIikKKworICAgIGRlZiB0ZXN0X2JpZ19jb2Rlc2l6ZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTE2MAorICAgICAgICByID0gcmUuY29tcGlsZSgnfCcuam9pbigoJyVkJyV4IGZvciB4IGluIHJhbmdlKDEwMDAwKSkpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyLm1hdGNoKCcxMDAwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHIubWF0Y2goJzk5OTknKSkKKworICAgIGRlZiB0ZXN0X2FueWFsbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiYS5iIiwgImFcbmIiLCByZS5ET1RBTEwpLmdyb3VwKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICJhXG5iIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiYS4qYiIsICJhXG5cbmIiLCByZS5ET1RBTEwpLmdyb3VwKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICJhXG5cbmIiKQorCisgICAgZGVmIHRlc3Rfbm9uX2NvbnN1bWluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKGEoPz1cc1teYV0pKSIsICJhIGIiKS5ncm91cCgxKSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoYSg/PVxzW15hXSopKSIsICJhIGIiKS5ncm91cCgxKSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoYSg/PVxzW2FiY10pKSIsICJhIGIiKS5ncm91cCgxKSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoYSg/PVxzW2FiY10qKSkiLCAiYSBiYyIpLmdyb3VwKDEpLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoYSkoPz1cc1wxKSIsICJhIGEiKS5ncm91cCgxKSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKGEpKD89XHNcMSopIiwgImEgYWEiKS5ncm91cCgxKSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKGEpKD89XHMoYWJjfGEpKSIsICJhIGEiKS5ncm91cCgxKSwgImEiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoYSg/IVxzW15hXSkpIiwgImEgYSIpLmdyb3VwKDEpLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoYSg/IVxzW2FiY10pKSIsICJhIGQiKS5ncm91cCgxKSwgImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKGEpKD8hXHNcMSkiLCAiYSBiIikuZ3JvdXAoMSksICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIihhKSg/IVxzKGFiY3xhKSkiLCAiYSBiIikuZ3JvdXAoMSksICJhIikKKworICAgIGRlZiB0ZXN0X2lnbm9yZV9jYXNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJhYmMiLCAiQUJDIiwgcmUuSSkuZ3JvdXAoMCksICJBQkMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJhYmMiLCB1IkFCQyIsIHJlLkkpLmdyb3VwKDApLCAiQUJDIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIihhXHNbXmFdKSIsICJhIGIiLCByZS5JKS5ncm91cCgxKSwgImEgYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoYVxzW15hXSopIiwgImEgYmIiLCByZS5JKS5ncm91cCgxKSwgImEgYmIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKGFcc1thYmNdKSIsICJhIGIiLCByZS5JKS5ncm91cCgxKSwgImEgYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoYVxzW2FiY10qKSIsICJhIGJiIiwgcmUuSSkuZ3JvdXAoMSksICJhIGJiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIigoYSlcc1wyKSIsICJhIGEiLCByZS5JKS5ncm91cCgxKSwgImEgYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoKGEpXHNcMiopIiwgImEgYWEiLCByZS5JKS5ncm91cCgxKSwgImEgYWEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKChhKVxzKGFiY3xhKSkiLCAiYSBhIiwgcmUuSSkuZ3JvdXAoMSksICJhIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKChhKVxzKGFiY3xhKSopIiwgImEgYWEiLCByZS5JKS5ncm91cCgxKSwgImEgYWEiKQorCisgICAgZGVmIHRlc3RfY2F0ZWdvcnkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoXHMpIiwgIiAiKS5ncm91cCgxKSwgIiAiKQorCisgICAgZGVmIHRlc3RfZ2V0bG93ZXIoc2VsZik6CisgICAgICAgIGltcG9ydCBfc3JlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3NyZS5nZXRsb3dlcihvcmQoJ0EnKSwgMCksIG9yZCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9zcmUuZ2V0bG93ZXIob3JkKCdBJyksIHJlLkxPQ0FMRSksIG9yZCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9zcmUuZ2V0bG93ZXIob3JkKCdBJyksIHJlLlVOSUNPREUpLCBvcmQoJ2EnKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJhYmMiLCAiQUJDIiwgcmUuSSkuZ3JvdXAoMCksICJBQkMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJhYmMiLCB1IkFCQyIsIHJlLkkpLmdyb3VwKDApLCAiQUJDIikKKworICAgIGRlZiB0ZXN0X25vdF9saXRlcmFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgiXHMoW15hXSkiLCAiIGIiKS5ncm91cCgxKSwgImIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgiXHMoW15hXSopIiwgIiBiYiIpLmdyb3VwKDEpLCAiYmIiKQorCisgICAgZGVmIHRlc3Rfc2VhcmNoX2NvdmVyYWdlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgiXHMoYikiLCAiIGIiKS5ncm91cCgxKSwgImIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgiYVxzIiwgImEgIikuZ3JvdXAoMCksICJhICIpCisKKyAgICBkZWYgYXNzZXJ0TWF0Y2goc2VsZiwgcGF0dGVybiwgdGV4dCwgbWF0Y2g9Tm9uZSwgc3Bhbj1Ob25lLAorICAgICAgICAgICAgICAgICAgICBtYXRjaGVyPXJlLm1hdGNoKToKKyAgICAgICAgaWYgbWF0Y2ggaXMgTm9uZSBhbmQgc3BhbiBpcyBOb25lOgorICAgICAgICAgICAgIyB0aGUgcGF0dGVybiBtYXRjaGVzIHRoZSB3aG9sZSB0ZXh0CisgICAgICAgICAgICBtYXRjaCA9IHRleHQKKyAgICAgICAgICAgIHNwYW4gPSAoMCwgbGVuKHRleHQpKQorICAgICAgICBlbGlmIG1hdGNoIGlzIE5vbmUgb3Igc3BhbiBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSWYgbWF0Y2ggaXMgbm90IE5vbmUsIHNwYW4gc2hvdWxkIGJlIHNwZWNpZmllZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoYW5kIHZpY2UgdmVyc2EpLicpCisgICAgICAgIG0gPSBtYXRjaGVyKHBhdHRlcm4sIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ3JvdXAoKSwgbWF0Y2gpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5zcGFuKCksIHNwYW4pCisKKyAgICBkZWYgdGVzdF9yZV9lc2NhcGUoc2VsZik6CisgICAgICAgIGFsbnVtX2NoYXJzID0gc3RyaW5nLmFzY2lpX2xldHRlcnMgKyBzdHJpbmcuZGlnaXRzCisgICAgICAgIHAgPSB1Jycuam9pbih1bmljaHIoaSkgZm9yIGkgaW4gcmFuZ2UoMjU2KSkKKyAgICAgICAgZm9yIGMgaW4gcDoKKyAgICAgICAgICAgIGlmIGMgaW4gYWxudW1fY2hhcnM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5lc2NhcGUoYyksIGMpCisgICAgICAgICAgICBlbGlmIGMgPT0gdSdceDAwJzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmVzY2FwZShjKSwgdSdcXDAwMCcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZXNjYXBlKGMpLCB1J1xcJyArIGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydE1hdGNoKHJlLmVzY2FwZShjKSwgYykKKyAgICAgICAgc2VsZi5hc3NlcnRNYXRjaChyZS5lc2NhcGUocCksIHApCisKKyAgICBkZWYgdGVzdF9yZV9lc2NhcGVfYnl0ZShzZWxmKToKKyAgICAgICAgYWxudW1fY2hhcnMgPSAoc3RyaW5nLmFzY2lpX2xldHRlcnMgKyBzdHJpbmcuZGlnaXRzKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgcCA9ICcnLmpvaW4oY2hyKGkpIGZvciBpIGluIHJhbmdlKDI1NikpCisgICAgICAgIGZvciBiIGluIHA6CisgICAgICAgICAgICBpZiBiIGluIGFsbnVtX2NoYXJzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZXNjYXBlKGIpLCBiKQorICAgICAgICAgICAgZWxpZiBiID09IGInXHgwMCc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5lc2NhcGUoYiksIGInXFwwMDAnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmVzY2FwZShiKSwgYidcXCcgKyBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRNYXRjaChyZS5lc2NhcGUoYiksIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0TWF0Y2gocmUuZXNjYXBlKHApLCBwKQorCisgICAgZGVmIHRlc3RfcmVfZXNjYXBlX25vbl9hc2NpaShzZWxmKToKKyAgICAgICAgcyA9IHUneHh4XHUyNjIwXHUyNjIwXHUyNjIweHh4JworICAgICAgICBzX2VzY2FwZWQgPSByZS5lc2NhcGUocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzX2VzY2FwZWQsIHUneHh4XFxcdTI2MjBcXFx1MjYyMFxcXHUyNjIweHh4JykKKyAgICAgICAgc2VsZi5hc3NlcnRNYXRjaChzX2VzY2FwZWQsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0TWF0Y2godScuJXMrLicgJSByZS5lc2NhcGUodSdcdTI2MjAnKSwgcywKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J3hcdTI2MjBcdTI2MjBcdTI2MjB4JywgKDIsIDcpLCByZS5zZWFyY2gpCisKKyAgICBkZWYgdGVzdF9yZV9lc2NhcGVfbm9uX2FzY2lpX2J5dGVzKHNlbGYpOgorICAgICAgICBiID0gdSd5XHUyNjIweVx1MjYyMHknLmVuY29kZSgndXRmLTgnKQorICAgICAgICBiX2VzY2FwZWQgPSByZS5lc2NhcGUoYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiX2VzY2FwZWQsIGIneVxcXHhlMlxcXHg5OFxcXHhhMHlcXFx4ZTJcXFx4OThcXFx4YTB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRNYXRjaChiX2VzY2FwZWQsIGIpCisgICAgICAgIHJlcyA9IHJlLmZpbmRhbGwocmUuZXNjYXBlKHUnXHUyNjIwJy5lbmNvZGUoJ3V0Zi04JykpLCBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAyKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIGltcG9ydCBwaWNrbGUKKyAgICAgICAgc2VsZi5waWNrbGVfdGVzdChwaWNrbGUpCisgICAgICAgIGltcG9ydCBjUGlja2xlCisgICAgICAgIHNlbGYucGlja2xlX3Rlc3QoY1BpY2tsZSkKKyAgICAgICAgIyBvbGQgcGlja2xlcyBleHBlY3QgdGhlIF9jb21waWxlKCkgcmVjb25zdHJ1Y3RvciBpbiBzcmUgbW9kdWxlCisgICAgICAgIGltcG9ydF9tb2R1bGUoInNyZSIsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKyAgICAgICAgZnJvbSBzcmUgaW1wb3J0IF9jb21waWxlCisKKyAgICBkZWYgcGlja2xlX3Rlc3Qoc2VsZiwgcGlja2xlKToKKyAgICAgICAgb2xkcGF0ID0gcmUuY29tcGlsZSgnYSg/OmJ8KGN8ZSl7MSwyfT98ZCkrPyguKScpCisgICAgICAgIHMgPSBwaWNrbGUuZHVtcHMob2xkcGF0KQorICAgICAgICBuZXdwYXQgPSBwaWNrbGUubG9hZHMocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvbGRwYXQsIG5ld3BhdCkKKworICAgIGRlZiB0ZXN0X2NvbnN0YW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5JLCByZS5JR05PUkVDQVNFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLkwsIHJlLkxPQ0FMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5NLCByZS5NVUxUSUxJTkUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuUywgcmUuRE9UQUxMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLlgsIHJlLlZFUkJPU0UpCisKKyAgICBkZWYgdGVzdF9mbGFncyhzZWxmKToKKyAgICAgICAgZm9yIGZsYWcgaW4gW3JlLkksIHJlLk0sIHJlLlgsIHJlLlMsIHJlLkxdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5jb21waWxlKCdecGF0dGVybiQnLCBmbGFnKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NyZV9jaGFyYWN0ZXJfbGl0ZXJhbHMoc2VsZik6CisgICAgICAgIGZvciBpIGluIFswLCA4LCAxNiwgMzIsIDY0LCAxMjcsIDEyOCwgMjU1XToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2gociJcJTAzbyIgJSBpLCBjaHIoaSkpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaChyIlwlMDNvMCIgJSBpLCBjaHIoaSkrIjAiKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2gociJcJTAzbzgiICUgaSwgY2hyKGkpKyI4IiksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKHIiXHglMDJ4IiAlIGksIGNocihpKSksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKHIiXHglMDJ4MCIgJSBpLCBjaHIoaSkrIjAiKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2gociJceCUwMnh6IiAlIGksIGNocihpKSsieiIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsICJcOTExIiwgIiIpCisKKyAgICBkZWYgdGVzdF9zcmVfY2hhcmFjdGVyX2NsYXNzX2xpdGVyYWxzKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiBbMCwgOCwgMTYsIDMyLCA2NCwgMTI3LCAxMjgsIDI1NV06CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKHIiW1wlMDNvXSIgJSBpLCBjaHIoaSkpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaChyIltcJTAzbzBdIiAlIGksIGNocihpKSksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKHIiW1wlMDNvOF0iICUgaSwgY2hyKGkpKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2gociJbXHglMDJ4XSIgJSBpLCBjaHIoaSkpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaChyIltceCUwMngwXSIgJSBpLCBjaHIoaSkpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaChyIltceCUwMnh6XSIgJSBpLCBjaHIoaSkpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsICJbXDkxMV0iLCAiIikKKworICAgIGRlZiB0ZXN0X2J1Z18xMTMyNTQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSl8KGIpJywgJ2InKS5zdGFydCgxKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSl8KGIpJywgJ2InKS5lbmQoMSksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpfChiKScsICdiJykuc3BhbigxKSwgKC0xLCAtMSkpCisKKyAgICBkZWYgdGVzdF9idWdfNTI3MzcxKHNlbGYpOgorICAgICAgICAjIGJ1ZyBkZXNjcmliZWQgaW4gcGF0Y2hlcyA1MjczNzEvNjcyNDkxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSk/YScsJ2EnKS5sYXN0aW5kZXgsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSkoYik/YicsJ2FiJykubGFzdGluZGV4LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKD9QPGE+YSkoP1A8Yj5iKT9iJywnYWInKS5sYXN0Z3JvdXAsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKD9QPGE+YShiKSkiLCAiYWIiKS5sYXN0Z3JvdXAsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKChhKSkiLCAiYSIpLmxhc3RpbmRleCwgMSkKKworICAgIGRlZiB0ZXN0X2J1Z181NDU4NTUoc2VsZik6CisgICAgICAgICMgYnVnIDU0NTg1NSAtLSBUaGlzIHBhdHRlcm4gZmFpbGVkIHRvIGNhdXNlIGEgY29tcGlsZSBlcnJvciBhcyBpdAorICAgICAgICAjIHNob3VsZCwgaW5zdGVhZCBwcm92b2tpbmcgYSBUeXBlRXJyb3IuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5jb21waWxlLCAnZm9vW2EtJykKKworICAgIGRlZiB0ZXN0X2J1Z180MTg2MjYoc2VsZik6CisgICAgICAgICMgYnVncyA0MTg2MjYgYXQgYWwuIC0tIFRlc3RpbmcgR3JlZyBDaGFwbWFuJ3MgYWRkaXRpb24gb2Ygb3AgY29kZQorICAgICAgICAjIFNSRV9PUF9NSU5fUkVQRUFUX09ORSBmb3IgZWxpbWluYXRpbmcgcmVjdXJzaW9uIG9uIHNpbXBsZSB1c2VzIG9mCisgICAgICAgICMgcGF0dGVybiAnKj8nIG9uIGEgbG9uZyBzdHJpbmcuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJy4qP2MnLCAxMDAwMConYWInKydjZCcpLmVuZCgwKSwgMjAwMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJy4qP2NkJywgNTAwMConYWInKydjJys1MDAwKidhYicrJ2NkZScpLmVuZCgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAyMDAwMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnLio/Y2QnLCAyMDAwMConYWJjJysnZGUnKS5lbmQoMCksIDYwMDAxKQorICAgICAgICAjIG5vbi1zaW1wbGUgJyo/JyBzdGlsbCB1c2VkIHRvIGhpdCB0aGUgcmVjdXJzaW9uIGxpbWl0LCBiZWZvcmUgdGhlCisgICAgICAgICMgbm9uLXJlY3Vyc2l2ZSBzY2hlbWUgd2FzIGltcGxlbWVudGVkLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgnKGF8YikqP2MnLCAxMDAwMConYWInKydjZCcpLmVuZCgwKSwgMjAwMDEpCisKKyAgICBkZWYgdGVzdF9idWdfNjEyMDc0KHNlbGYpOgorICAgICAgICBwYXQ9dSJbIityZS5lc2NhcGUodSJcdTIwMzkiKSt1Il0iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuY29tcGlsZShwYXQpIGFuZCAxLCAxKQorCisgICAgZGVmIHRlc3Rfc3RhY2tfb3ZlcmZsb3coc2VsZik6CisgICAgICAgICMgbmFzdHkgY2FzZXMgdGhhdCB1c2VkIHRvIG92ZXJmbG93IHRoZSBzdHJhaWdodGZvcndhcmQgcmVjdXJzaXZlCisgICAgICAgICMgaW1wbGVtZW50YXRpb24gb2YgcmVwZWF0ZWQgZ3JvdXBzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoeCkqJywgNTAwMDAqJ3gnKS5ncm91cCgxKSwgJ3gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoeCkqeScsIDUwMDAwKid4JysneScpLmdyb3VwKDEpLCAneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyh4KSo/eScsIDUwMDAwKid4JysneScpLmdyb3VwKDEpLCAneCcpCisKKyAgICBkZWYgdGVzdF91bmxpbWl0ZWRfemVyb193aWR0aF9yZXBlYXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzk2NjkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2gocicoPzphPykqeScsICd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKD86YT8pK3knLCAneicpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJyg/OmE/KXsyLH15JywgJ3onKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2gocicoPzphPykqP3knLCAneicpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJyg/OmE/KSs/eScsICd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKD86YT8pezIsfT95JywgJ3onKSkKKworICAgIGRlZiB0ZXN0X3NjYW5uZXIoc2VsZik6CisgICAgICAgIGRlZiBzX2lkZW50KHNjYW5uZXIsIHRva2VuKTogcmV0dXJuIHRva2VuCisgICAgICAgIGRlZiBzX29wZXJhdG9yKHNjYW5uZXIsIHRva2VuKTogcmV0dXJuICJvcCVzIiAlIHRva2VuCisgICAgICAgIGRlZiBzX2Zsb2F0KHNjYW5uZXIsIHRva2VuKTogcmV0dXJuIGZsb2F0KHRva2VuKQorICAgICAgICBkZWYgc19pbnQoc2Nhbm5lciwgdG9rZW4pOiByZXR1cm4gaW50KHRva2VuKQorCisgICAgICAgIHNjYW5uZXIgPSBTY2FubmVyKFsKKyAgICAgICAgICAgIChyIlthLXpBLVpfXVx3KiIsIHNfaWRlbnQpLAorICAgICAgICAgICAgKHIiXGQrXC5cZCoiLCBzX2Zsb2F0KSwKKyAgICAgICAgICAgIChyIlxkKyIsIHNfaW50KSwKKyAgICAgICAgICAgIChyIj18XCt8LXxcKnwvIiwgc19vcGVyYXRvciksCisgICAgICAgICAgICAociJccysiLCBOb25lKSwKKyAgICAgICAgICAgIF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzY2FubmVyLnNjYW5uZXIuc2Nhbm5lcigiIikucGF0dGVybiwgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjYW5uZXIuc2Nhbigic3VtID0gMypmb28gKyAzMTIuNTAgKyBiYXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoWydzdW0nLCAnb3A9JywgMywgJ29wKicsICdmb28nLCAnb3ArJywgMzEyLjUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3ArJywgJ2JhciddLCAnJykpCisKKyAgICBkZWYgdGVzdF9idWdfNDQ4OTUxKHNlbGYpOgorICAgICAgICAjIGJ1ZyA0NDg5NTEgKHNpbWlsYXIgdG8gNDI5MzU3LCBidXQgd2l0aCBzaW5nbGUgY2hhciBtYXRjaCkKKyAgICAgICAgIyAoQWxzbyB0ZXN0IGdyZWVkeSBtYXRjaGVzLikKKyAgICAgICAgZm9yIG9wIGluICcnLCc/JywnKic6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKCguJXMpOik/eiclb3AsICd6JykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCBOb25lKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoKC4lcyk6KT96JyVvcCwgJ2E6eicpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2E6JywgJ2EnKSkKKworICAgIGRlZiB0ZXN0X2J1Z183MjUxMDYoc2VsZik6CisgICAgICAgICMgY2FwdHVyaW5nIGdyb3VwcyBpbiBhbHRlcm5hdGl2ZXMgaW4gcmVwZWF0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeKChhKXxiKSonLCAnYWJjJykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdiJywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXigoW2FiXSl8YykqJywgJ2FiYycpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnYycsICdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oKGQpfFthYl0pKicsICdhYmMnKS5ncm91cHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2InLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXigoYSljfFthYl0pKicsICdhYmMnKS5ncm91cHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2InLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXigoYSl8YikqP2MnLCAnYWJjJykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdiJywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXigoW2FiXSl8YykqP2QnLCAnYWJjZCcpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnYycsICdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oKGQpfFthYl0pKj9jJywgJ2FiYycpLmdyb3VwcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeKChhKWN8W2FiXSkqP2MnLCAnYWJjJykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdiJywgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9idWdfNzI1MTQ5KHNlbGYpOgorICAgICAgICAjIG1hcmtfc3RhY2tfYmFzZSByZXN0b3JpbmcgYmVmb3JlIHJlc3RvcmluZyBtYXJrcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoYSkoPzooPz0oYikqKWMpKicsICdhYmInKS5ncm91cHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EnLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpKCg/IShiKSopKSonLCAnYWJiJykuZ3JvdXBzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgTm9uZSwgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9idWdfNzY0NTQ4KHNlbGYpOgorICAgICAgICAjIGJ1ZyA3NjQ1NDgsIHJlLmNvbXBpbGUoKSBiYXJmcyBvbiBzdHIvdW5pY29kZSBzdWJjbGFzc2VzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHVuaWNvZGUKKyAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiAgIyBubyBwcm9ibGVtIGlmIHdlIGhhdmUgbm8gdW5pY29kZQorICAgICAgICBjbGFzcyBteV91bmljb2RlKHVuaWNvZGUpOiBwYXNzCisgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUobXlfdW5pY29kZSgiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0Lm1hdGNoKCJ4eXoiKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRpdGVyKHNlbGYpOgorICAgICAgICBpdGVyID0gcmUuZmluZGl0ZXIociI6KyIsICJhOmI6OmM6OjpkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbaXRlbS5ncm91cCgwKSBmb3IgaXRlbSBpbiBpdGVyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbIjoiLCAiOjoiLCAiOjo6Il0pCisKKyAgICBkZWYgdGVzdF9idWdfOTI2MDc1KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB1bmljb2RlCisgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gIyBubyBwcm9ibGVtIGlmIHdlIGhhdmUgbm8gdW5pY29kZQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuY29tcGlsZSgnYnVnXzkyNjA3NScpIGlzIG5vdAorICAgICAgICAgICAgICAgICAgICAgcmUuY29tcGlsZShldmFsKCJ1J2J1Z185MjYwNzUnIikpKQorCisgICAgZGVmIHRlc3RfYnVnXzkzMTg0OChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdW5pY29kZQorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBwYXR0ZXJuID0gZXZhbCgndSJbXHUwMDJFXHUzMDAyXHVGRjBFXHVGRjYxXSInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmNvbXBpbGUocGF0dGVybikuc3BsaXQoImEuYi5jIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydhJywnYicsJ2MnXSkKKworICAgIGRlZiB0ZXN0X2J1Z181ODEwODAoc2VsZik6CisgICAgICAgIGl0ZXIgPSByZS5maW5kaXRlcihyIlxzIiwgImEgYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlci5uZXh0KCkuc3BhbigpLCAoMSwyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgaXRlci5uZXh0KQorCisgICAgICAgIHNjYW5uZXIgPSByZS5jb21waWxlKHIiXHMiKS5zY2FubmVyKCJhIGIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjYW5uZXIuc2VhcmNoKCkuc3BhbigpLCAoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Nhbm5lci5zZWFyY2goKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2J1Z184MTcyMzQoc2VsZik6CisgICAgICAgIGl0ZXIgPSByZS5maW5kaXRlcihyIi4qIiwgImFzZGYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZXIubmV4dCgpLnNwYW4oKSwgKDAsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZXIubmV4dCgpLnNwYW4oKSwgKDQsIDQpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBpdGVyLm5leHQpCisKKyAgICBkZWYgdGVzdF9idWdfNjU2MShzZWxmKToKKyAgICAgICAgIyAnXGQnIHNob3VsZCBtYXRjaCBjaGFyYWN0ZXJzIGluIFVuaWNvZGUgY2F0ZWdvcnkgJ05kJworICAgICAgICAjIChOdW1iZXIsIERlY2ltYWwgRGlnaXQpLCBidXQgbm90IHRob3NlIGluICdObCcgKE51bWJlciwKKyAgICAgICAgIyBMZXR0ZXIpIG9yICdObycgKE51bWJlciwgT3RoZXIpLgorICAgICAgICBkZWNpbWFsX2RpZ2l0cyA9IFsKKyAgICAgICAgICAgIHUnXHUwMDM3JywgIyAnXE57RElHSVQgU0VWRU59JywgY2F0ZWdvcnkgJ05kJworICAgICAgICAgICAgdSdcdTBlNTgnLCAjICdcTntUSEFJIERJR0lUIFNJWH0nLCBjYXRlZ29yeSAnTmQnCisgICAgICAgICAgICB1J1x1ZmYxMCcsICMgJ1xOe0ZVTExXSURUSCBESUdJVCBaRVJPfScsIGNhdGVnb3J5ICdOZCcKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHggaW4gZGVjaW1hbF9kaWdpdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeXGQkJywgeCwgcmUuVU5JQ09ERSkuZ3JvdXAoMCksIHgpCisKKyAgICAgICAgbm90X2RlY2ltYWxfZGlnaXRzID0gWworICAgICAgICAgICAgdSdcdTIxNjUnLCAjICdcTntST01BTiBOVU1FUkFMIFNJWH0nLCBjYXRlZ29yeSAnTmwnCisgICAgICAgICAgICB1J1x1MzAzOScsICMgJ1xOe0hBTkdaSE9VIE5VTUVSQUwgVFdFTlRZfScsIGNhdGVnb3J5ICdObCcKKyAgICAgICAgICAgIHUnXHUyMDgyJywgIyAnXE57U1VCU0NSSVBUIFRXT30nLCBjYXRlZ29yeSAnTm8nCisgICAgICAgICAgICB1J1x1MzJiNCcsICMgJ1xOe0NJUkNMRUQgTlVNQkVSIFRISVJUWSBOSU5FfScsIGNhdGVnb3J5ICdObycKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHggaW4gbm90X2RlY2ltYWxfZGlnaXRzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goJ15cZCQnLCB4LCByZS5VTklDT0RFKSkKKworICAgIGRlZiB0ZXN0X2VtcHR5X2FycmF5KHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZiAxNjQ3NTQxCisgICAgICAgIGltcG9ydCBhcnJheQorICAgICAgICBmb3IgdHlwZWNvZGUgaW4gJ2NiQnVoSGlJbExmZCc6CisgICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkodHlwZWNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmNvbXBpbGUoImJsYSIpLm1hdGNoKGEpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5jb21waWxlKCIiKS5tYXRjaChhKS5ncm91cHMoKSwgKCkpCisKKyAgICBkZWYgdGVzdF9pbmxpbmVfZmxhZ3Moc2VsZik6CisgICAgICAgICMgQnVnICMxNzAwCisgICAgICAgIHVwcGVyX2NoYXIgPSB1bmljaHIoMHgxZWEwKSAjIExhdGluIENhcGl0YWwgTGV0dGVyIEEgd2l0aCBEb3QgQmVsbG93CisgICAgICAgIGxvd2VyX2NoYXIgPSB1bmljaHIoMHgxZWExKSAjIExhdGluIFNtYWxsIExldHRlciBBIHdpdGggRG90IEJlbGxvdworCisgICAgICAgIHAgPSByZS5jb21waWxlKHVwcGVyX2NoYXIsIHJlLkkgfCByZS5VKQorICAgICAgICBxID0gcC5tYXRjaChsb3dlcl9jaGFyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHEsIE5vbmUpCisKKyAgICAgICAgcCA9IHJlLmNvbXBpbGUobG93ZXJfY2hhciwgcmUuSSB8IHJlLlUpCisgICAgICAgIHEgPSBwLm1hdGNoKHVwcGVyX2NoYXIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocSwgTm9uZSkKKworICAgICAgICBwID0gcmUuY29tcGlsZSgnKD9pKScgKyB1cHBlcl9jaGFyLCByZS5VKQorICAgICAgICBxID0gcC5tYXRjaChsb3dlcl9jaGFyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHEsIE5vbmUpCisKKyAgICAgICAgcCA9IHJlLmNvbXBpbGUoJyg/aSknICsgbG93ZXJfY2hhciwgcmUuVSkKKyAgICAgICAgcSA9IHAubWF0Y2godXBwZXJfY2hhcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChxLCBOb25lKQorCisgICAgICAgIHAgPSByZS5jb21waWxlKCcoP2l1KScgKyB1cHBlcl9jaGFyKQorICAgICAgICBxID0gcC5tYXRjaChsb3dlcl9jaGFyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHEsIE5vbmUpCisKKyAgICAgICAgcCA9IHJlLmNvbXBpbGUoJyg/aXUpJyArIGxvd2VyX2NoYXIpCisgICAgICAgIHEgPSBwLm1hdGNoKHVwcGVyX2NoYXIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2RvbGxhcl9tYXRjaGVzX3R3aWNlKHNlbGYpOgorICAgICAgICAiJCBtYXRjaGVzIHRoZSBlbmQgb2Ygc3RyaW5nLCBhbmQganVzdCBiZWZvcmUgdGhlIHRlcm1pbmF0aW5nIFxuIgorICAgICAgICBwYXR0ZXJuID0gcmUuY29tcGlsZSgnJCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0dGVybi5zdWIoJyMnLCAnYVxuYlxuJyksICdhXG5iI1xuIycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0dGVybi5zdWIoJyMnLCAnYVxuYlxuYycpLCAnYVxuYlxuYyMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdHRlcm4uc3ViKCcjJywgJ1xuJyksICcjXG4jJykKKworICAgICAgICBwYXR0ZXJuID0gcmUuY29tcGlsZSgnJCcsIHJlLk1VTFRJTElORSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXR0ZXJuLnN1YignIycsICdhXG5iXG4nICksICdhI1xuYiNcbiMnICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXR0ZXJuLnN1YignIycsICdhXG5iXG5jJyksICdhI1xuYiNcbmMjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXR0ZXJuLnN1YignIycsICdcbicpLCAnI1xuIycpCisKKyAgICBkZWYgdGVzdF9kZWFsbG9jKHNlbGYpOgorICAgICAgICAjIGlzc3VlIDMyOTk6IGNoZWNrIGZvciBzZWdmYXVsdCBpbiBkZWJ1ZyBidWlsZAorICAgICAgICBpbXBvcnQgX3NyZQorICAgICAgICAjIHRoZSBvdmVyZmxvdyBsaW1pdCBpcyBkaWZmZXJlbnQgb24gd2lkZSBhbmQgbmFycm93IGJ1aWxkcyBhbmQgaXQKKyAgICAgICAgIyBkZXBlbmRzIG9uIHRoZSBkZWZpbml0aW9uIG9mIFNSRV9DT0RFIChzZWUgc3JlLmgpLgorICAgICAgICAjIDIqKjEyOCBzaG91bGQgYmUgYmlnIGVub3VnaCB0byBvdmVyZmxvdyBvbiBib3RoLiBGb3Igc21hbGxlciB2YWx1ZXMKKyAgICAgICAgIyBhIFJ1bnRpbWVFcnJvciBpcyByYWlzZWQgaW5zdGVhZCBvZiBPdmVyZmxvd0Vycm9yLgorICAgICAgICBsb25nX292ZXJmbG93ID0gMioqMTI4CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmUuZmluZGl0ZXIsICJhIiwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIF9zcmUuY29tcGlsZSwgImFiYyIsIDAsIFtsb25nX292ZXJmbG93XSkKKworICAgIGRlZiB0ZXN0X2NvbXBpbGUoc2VsZik6CisgICAgICAgICMgVGVzdCByZXR1cm4gdmFsdWUgd2hlbiBnaXZlbiBzdHJpbmcgYW5kIHBhdHRlcm4gYXMgcGFyYW1ldGVyCisgICAgICAgIHBhdHRlcm4gPSByZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwYXR0ZXJuLCByZS5fcGF0dGVybl90eXBlKQorICAgICAgICBzYW1lX3BhdHRlcm4gPSByZS5jb21waWxlKHBhdHRlcm4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzYW1lX3BhdHRlcm4sIHJlLl9wYXR0ZXJuX3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2FtZV9wYXR0ZXJuLCBwYXR0ZXJuKQorICAgICAgICAjIFRlc3QgYmVoYXZpb3VyIHdoZW4gbm90IGdpdmVuIGEgc3RyaW5nIG9yIHBhdHRlcm4gYXMgcGFyYW1ldGVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmUuY29tcGlsZSwgMCkKKworICAgIGRlZiB0ZXN0X2J1Z18xMzg5OShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTM4OTk6IHJlIHBhdHRlcm4gciJbXEFdIiBzaG91bGQgd29yayBsaWtlICJBIiBidXQgbWF0Y2hlcworICAgICAgICAjIG5vdGhpbmcuIERpdHRvIEIgYW5kIFouCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbChyJ1tcQVxCXGJcQ1xaXScsICdBQlxiQ1onKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ0EnLCAnQicsICdcYicsICdDJywgJ1onXSkKKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzJHLCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9sYXJnZV9zZWFyY2goc2VsZiwgc2l6ZSk6CisgICAgICAgICMgSXNzdWUgIzEwMTgyOiBpbmRpY2VzIHdlcmUgMzItYml0LXRydW5jYXRlZC4KKyAgICAgICAgcyA9ICdhJyAqIHNpemUKKyAgICAgICAgbSA9IHJlLnNlYXJjaCgnJCcsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5zdGFydCgpLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZW5kKCksIHNpemUpCisKKyAgICAjIFRoZSBodWdlIG1lbXVzZSBpcyBiZWNhdXNlIG9mIHJlLnN1YigpIHVzaW5nIGEgbGlzdCBhbmQgYSBqb2luKCkKKyAgICAjIHRvIGNyZWF0ZSB0aGUgcmVwbGFjZW1lbnQgcmVzdWx0LgorICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzJHLCBtZW11c2U9MTYgKyAyKQorICAgIGRlZiB0ZXN0X2xhcmdlX3N1Ym4oc2VsZiwgc2l6ZSk6CisgICAgICAgICMgSXNzdWUgIzEwMTgyOiBpbmRpY2VzIHdlcmUgMzItYml0LXRydW5jYXRlZC4KKyAgICAgICAgcyA9ICdhJyAqIHNpemUKKyAgICAgICAgciwgbiA9IHJlLnN1Ym4oJycsICcnLCBzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgc2l6ZSArIDEpCisKKworICAgIGRlZiB0ZXN0X3JlcGVhdF9taW5tYXhfb3ZlcmZsb3coc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEzMTY5CisgICAgICAgIHN0cmluZyA9ICJ4IiAqIDEwMDAwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiLns2NTUzNX0iLCBzdHJpbmcpLnNwYW4oKSwgKDAsIDY1NTM1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIi57LDY1NTM1fSIsIHN0cmluZykuc3BhbigpLCAoMCwgNjU1MzUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiLns2NTUzNSx9PyIsIHN0cmluZykuc3BhbigpLCAoMCwgNjU1MzUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiLns2NTUzNn0iLCBzdHJpbmcpLnNwYW4oKSwgKDAsIDY1NTM2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIi57LDY1NTM2fSIsIHN0cmluZykuc3BhbigpLCAoMCwgNjU1MzYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiLns2NTUzNix9PyIsIHN0cmluZykuc3BhbigpLCAoMCwgNjU1MzYpKQorICAgICAgICAjIDIqKjEyOCBzaG91bGQgYmUgYmlnIGVub3VnaCB0byBvdmVyZmxvdyBib3RoIFNSRV9DT0RFIGFuZCBQeV9zc2l6ZV90LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCByZS5jb21waWxlLCByIi57JWR9IiAlIDIqKjEyOCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcmUuY29tcGlsZSwgciIueywlZH0iICUgMioqMTI4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCByZS5jb21waWxlLCByIi57JWQsfT8iICUgMioqMTI4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCByZS5jb21waWxlLCByIi57JWQsJWR9IiAlICgyKioxMjksIDIqKjEyOCkpCisKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfcmVwZWF0X21pbm1heF9vdmVyZmxvd19tYXhyZXBlYXQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3JlcXVpcmVzIF9zcmUuTUFYUkVQRUFUIGNvbnN0YW50JykKKyAgICAgICAgc3RyaW5nID0gIngiICogMTAwMDAwCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHIiLnslZH0iICUgKE1BWFJFUEVBVCAtIDEpLCBzdHJpbmcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiLnssJWR9IiAlIChNQVhSRVBFQVQgLSAxKSwgc3RyaW5nKS5zcGFuKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIDEwMDAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHIiLnslZCx9PyIgJSAoTUFYUkVQRUFUIC0gMSksIHN0cmluZykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHJlLmNvbXBpbGUsIHIiLnslZH0iICUgTUFYUkVQRUFUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCByZS5jb21waWxlLCByIi57LCVkfSIgJSBNQVhSRVBFQVQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHJlLmNvbXBpbGUsIHIiLnslZCx9PyIgJSBNQVhSRVBFQVQpCisKKyAgICBkZWYgdGVzdF9iYWNrcmVmX2dyb3VwX25hbWVfaW5fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE3MzQxOiBQb29yIGVycm9yIG1lc3NhZ2Ugd2hlbiBjb21waWxpbmcgaW52YWxpZCByZWdleAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKHNyZV9jb25zdGFudHMuZXJyb3IsICc8Zm9vPicpOgorICAgICAgICAgICAgcmUuY29tcGlsZSgnKD9QPTxmb28+KScpCisKKyAgICBkZWYgdGVzdF9ncm91cF9uYW1lX2luX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxNzM0MTogUG9vciBlcnJvciBtZXNzYWdlIHdoZW4gY29tcGlsaW5nIGludmFsaWQgcmVnZXgKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChzcmVfY29uc3RhbnRzLmVycm9yLCAnXD9mb28nKToKKyAgICAgICAgICAgIHJlLmNvbXBpbGUoJyg/UDw/Zm9vPiknKQorCisKK2RlZiBydW5fcmVfdGVzdHMoKToKKyAgICBmcm9tIHRlc3QucmVfdGVzdHMgaW1wb3J0IHRlc3RzLCBTVUNDRUVELCBGQUlMLCBTWU5UQVhfRVJST1IKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnUnVubmluZyByZV90ZXN0cyB0ZXN0IHN1aXRlJworICAgIGVsc2U6CisgICAgICAgICMgVG8gc2F2ZSB0aW1lLCBvbmx5IHJ1biB0aGUgZmlyc3QgYW5kIGxhc3QgMTAgdGVzdHMKKyAgICAgICAgI3Rlc3RzID0gdGVzdHNbOjEwXSArIHRlc3RzWy0xMDpdCisgICAgICAgIHBhc3MKKworICAgIGZvciB0IGluIHRlc3RzOgorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgcGF0dGVybiA9IHMgPSBvdXRjb21lID0gcmVwbCA9IGV4cGVjdGVkID0gTm9uZQorICAgICAgICBpZiBsZW4odCkgPT0gNToKKyAgICAgICAgICAgIHBhdHRlcm4sIHMsIG91dGNvbWUsIHJlcGwsIGV4cGVjdGVkID0gdAorICAgICAgICBlbGlmIGxlbih0KSA9PSAzOgorICAgICAgICAgICAgcGF0dGVybiwgcywgb3V0Y29tZSA9IHQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICgnVGVzdCB0dXBsZXMgc2hvdWxkIGhhdmUgMyBvciA1IGZpZWxkcycsIHQpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2JqID0gcmUuY29tcGlsZShwYXR0ZXJuKQorICAgICAgICBleGNlcHQgcmUuZXJyb3I6CisgICAgICAgICAgICBpZiBvdXRjb21lID09IFNZTlRBWF9FUlJPUjogcGFzcyAgIyBFeHBlY3RlZCBhIHN5bnRheCBlcnJvcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAnPT09IFN5bnRheCBlcnJvcjonLCB0CisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDogcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcHJpbnQgJyoqKiBVbmV4cGVjdGVkIGVycm9yICoqKicsIHQKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN5cy5zdGRvdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqLnNlYXJjaChzKQorICAgICAgICAgICAgZXhjZXB0IHJlLmVycm9yLCBtc2c6CisgICAgICAgICAgICAgICAgcHJpbnQgJz09PSBVbmV4cGVjdGVkIGV4Y2VwdGlvbicsIHQsIHJlcHIobXNnKQorICAgICAgICAgICAgaWYgb3V0Y29tZSA9PSBTWU5UQVhfRVJST1I6CisgICAgICAgICAgICAgICAgIyBUaGlzIHNob3VsZCBoYXZlIGJlZW4gYSBzeW50YXggZXJyb3I7IGZvcmdldCBpdC4KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbGlmIG91dGNvbWUgPT0gRkFJTDoKKyAgICAgICAgICAgICAgICBpZiByZXN1bHQgaXMgTm9uZTogcGFzcyAgICMgTm8gbWF0Y2gsIGFzIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgZWxzZTogcHJpbnQgJz09PSBTdWNjZWVkZWQgaW5jb3JyZWN0bHknLCB0CisgICAgICAgICAgICBlbGlmIG91dGNvbWUgPT0gU1VDQ0VFRDoKKyAgICAgICAgICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMgTWF0Y2hlZCwgYXMgZXhwZWN0ZWQsIHNvIG5vdyB3ZSBjb21wdXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAjIHJlc3VsdCBzdHJpbmcgYW5kIGNvbXBhcmUgaXQgdG8gb3VyIGV4cGVjdGVkIHJlc3VsdC4KKyAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGVuZCA9IHJlc3VsdC5zcGFuKDApCisgICAgICAgICAgICAgICAgICAgIHZhcmRpY3Q9eydmb3VuZCc6IHJlc3VsdC5ncm91cCgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dyb3Vwcyc6IHJlc3VsdC5ncm91cCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmxhZ3MnOiByZXN1bHQucmUuZmxhZ3N9CisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDEwMCk6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2kgPSByZXN1bHQuZ3JvdXAoaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFNwZWNpYWwgaGFjayBiZWNhdXNlIGVsc2UgdGhlIHN0cmluZyBjb25jYXQgZmFpbHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZ2kgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2kgPSAiTm9uZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpID0gIkVycm9yIgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyZGljdFsnZyVkJyAlIGldID0gZ2kKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmVzdWx0LnJlLmdyb3VwaW5kZXgua2V5cygpOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpID0gcmVzdWx0Lmdyb3VwKGkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZ2kgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2kgPSAiTm9uZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpID0gIkVycm9yIgorICAgICAgICAgICAgICAgICAgICAgICAgdmFyZGljdFtpXSA9IGdpCisgICAgICAgICAgICAgICAgICAgIHJlcGwgPSBldmFsKHJlcGwsIHZhcmRpY3QpCisgICAgICAgICAgICAgICAgICAgIGlmIHJlcGwgIT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnPT09IGdyb3VwaW5nIGVycm9yJywgdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IHJlcHIocmVwbCkgKyAnIHNob3VsZCBiZSAnICsgcmVwcihleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAnPT09IEZhaWxlZCBpbmNvcnJlY3RseScsIHQKKworICAgICAgICAgICAgICAgICMgVHJ5IHRoZSBtYXRjaCBvbiBhIHVuaWNvZGUgc3RyaW5nLCBhbmQgY2hlY2sgdGhhdCBpdAorICAgICAgICAgICAgICAgICMgc3RpbGwgc3VjY2VlZHMuCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBvYmouc2VhcmNoKHVuaWNvZGUocywgImxhdGluLTEiKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnPT09IEZhaWxzIG9uIHVuaWNvZGUgbWF0Y2gnLCB0CisgICAgICAgICAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUgIyAxLjUuMgorICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlICMgdW5pY29kZSB0ZXN0IGNhc2UKKworICAgICAgICAgICAgICAgICMgVHJ5IHRoZSBtYXRjaCBvbiBhIHVuaWNvZGUgcGF0dGVybiwgYW5kIGNoZWNrIHRoYXQgaXQKKyAgICAgICAgICAgICAgICAjIHN0aWxsIHN1Y2NlZWRzLgorICAgICAgICAgICAgICAgIG9iaj1yZS5jb21waWxlKHVuaWNvZGUocGF0dGVybiwgImxhdGluLTEiKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBvYmouc2VhcmNoKHMpCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICc9PT0gRmFpbHMgb24gdW5pY29kZSBwYXR0ZXJuIG1hdGNoJywgdAorCisgICAgICAgICAgICAgICAgIyBUcnkgdGhlIG1hdGNoIHdpdGggdGhlIHNlYXJjaCBhcmVhIGxpbWl0ZWQgdG8gdGhlIGV4dGVudAorICAgICAgICAgICAgICAgICMgb2YgdGhlIG1hdGNoIGFuZCBzZWUgaWYgaXQgc3RpbGwgc3VjY2VlZHMuICBcQiB3aWxsCisgICAgICAgICAgICAgICAgIyBicmVhayAoYmVjYXVzZSBpdCB3b24ndCBtYXRjaCBhdCB0aGUgZW5kIG9yIHN0YXJ0IG9mIGEKKyAgICAgICAgICAgICAgICAjIHN0cmluZyksIHNvIHdlJ2xsIGlnbm9yZSBwYXR0ZXJucyB0aGF0IGZlYXR1cmUgaXQuCisKKyAgICAgICAgICAgICAgICBpZiBwYXR0ZXJuWzoyXSAhPSAnXFxCJyBhbmQgcGF0dGVyblstMjpdICE9ICdcXEInIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBvYmogPSByZS5jb21waWxlKHBhdHRlcm4pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9iai5zZWFyY2gocywgcmVzdWx0LnN0YXJ0KDApLCByZXN1bHQuZW5kKDApICsgMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnPT09IEZhaWxlZCBvbiByYW5nZS1saW1pdGVkIG1hdGNoJywgdAorCisgICAgICAgICAgICAgICAgIyBUcnkgdGhlIG1hdGNoIHdpdGggSUdOT1JFQ0FTRSBlbmFibGVkLCBhbmQgY2hlY2sgdGhhdCBpdAorICAgICAgICAgICAgICAgICMgc3RpbGwgc3VjY2VlZHMuCisgICAgICAgICAgICAgICAgb2JqID0gcmUuY29tcGlsZShwYXR0ZXJuLCByZS5JR05PUkVDQVNFKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9iai5zZWFyY2gocykKKyAgICAgICAgICAgICAgICBpZiByZXN1bHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJz09PSBGYWlscyBvbiBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoJywgdAorCisgICAgICAgICAgICAgICAgIyBUcnkgdGhlIG1hdGNoIHdpdGggTE9DQUxFIGVuYWJsZWQsIGFuZCBjaGVjayB0aGF0IGl0CisgICAgICAgICAgICAgICAgIyBzdGlsbCBzdWNjZWVkcy4KKyAgICAgICAgICAgICAgICBvYmogPSByZS5jb21waWxlKHBhdHRlcm4sIHJlLkxPQ0FMRSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBvYmouc2VhcmNoKHMpCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICc9PT0gRmFpbHMgb24gbG9jYWxlLXNlbnNpdGl2ZSBtYXRjaCcsIHQKKworICAgICAgICAgICAgICAgICMgVHJ5IHRoZSBtYXRjaCB3aXRoIFVOSUNPREUgbG9jYWxlIGVuYWJsZWQsIGFuZCBjaGVjaworICAgICAgICAgICAgICAgICMgdGhhdCBpdCBzdGlsbCBzdWNjZWVkcy4KKyAgICAgICAgICAgICAgICBvYmogPSByZS5jb21waWxlKHBhdHRlcm4sIHJlLlVOSUNPREUpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqLnNlYXJjaChzKQorICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBwcmludCAnPT09IEZhaWxzIG9uIHVuaWNvZGUtc2Vuc2l0aXZlIG1hdGNoJywgdAorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFJlVGVzdHMpCisgICAgcnVuX3JlX3Rlc3RzKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcmVhZGxpbmUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9yZWFkbGluZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDVjN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcmVhZGxpbmUucHkKQEAgLTAsMCArMSw0NyBAQAorIiIiCitWZXJ5IG1pbmltYWwgdW5pdHRlc3RzIGZvciBwYXJ0cyBvZiB0aGUgcmVhZGxpbmUgbW9kdWxlLgorCitUaGVzZSB0ZXN0cyB3ZXJlIGFkZGVkIHRvIGNoZWNrIHRoYXQgdGhlIGxpYmVkaXQgZW11bGF0aW9uIG9uIE9TWCBhbmQKK3RoZSAicmVhbCIgcmVhZGxpbmUgaGF2ZSB0aGUgc2FtZSBpbnRlcmZhY2UgZm9yIGhpc3RvcnkgbWFuaXB1bGF0aW9uLiBUaGF0J3MKK3doeSB0aGUgdGVzdHMgY292ZXIgb25seSBhIHNtYWxsIHN1YnNldCBvZiB0aGUgaW50ZXJmYWNlLgorIiIiCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQorCisjIFNraXAgdGVzdHMgaWYgdGhlcmUgaXMgbm8gcmVhZGxpbmUgbW9kdWxlCityZWFkbGluZSA9IGltcG9ydF9tb2R1bGUoJ3JlYWRsaW5lJykKKworY2xhc3MgVGVzdEhpc3RvcnlNYW5pcHVsYXRpb24gKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIocmVhZGxpbmUsICdjbGVhcl9oaXN0b3J5JyksCisgICAgICAgICAgICAgICAgICAgICAiVGhlIGhpc3RvcnkgdXBkYXRlIHRlc3QgY2Fubm90IGJlIHJ1biBiZWNhdXNlIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAiY2xlYXJfaGlzdG9yeSBtZXRob2QgaXMgbm90IGF2YWlsYWJsZS4iKQorICAgIGRlZiB0ZXN0SGlzdG9yeVVwZGF0ZXMoc2VsZik6CisgICAgICAgIHJlYWRsaW5lLmNsZWFyX2hpc3RvcnkoKQorCisgICAgICAgIHJlYWRsaW5lLmFkZF9oaXN0b3J5KCJmaXJzdCBsaW5lIikKKyAgICAgICAgcmVhZGxpbmUuYWRkX2hpc3RvcnkoInNlY29uZCBsaW5lIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGxpbmUuZ2V0X2hpc3RvcnlfaXRlbSgxKSwgImZpcnN0IGxpbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMiksICJzZWNvbmQgbGluZSIpCisKKyAgICAgICAgcmVhZGxpbmUucmVwbGFjZV9oaXN0b3J5X2l0ZW0oMCwgInJlcGxhY2VkIGxpbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGxpbmUuZ2V0X2hpc3RvcnlfaXRlbSgxKSwgInJlcGxhY2VkIGxpbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMiksICJzZWNvbmQgbGluZSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbGluZS5nZXRfY3VycmVudF9oaXN0b3J5X2xlbmd0aCgpLCAyKQorCisgICAgICAgIHJlYWRsaW5lLnJlbW92ZV9oaXN0b3J5X2l0ZW0oMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbGluZS5nZXRfaGlzdG9yeV9pdGVtKDApLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMSksICJzZWNvbmQgbGluZSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbGluZS5nZXRfY3VycmVudF9oaXN0b3J5X2xlbmd0aCgpLCAxKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoVGVzdEhpc3RvcnlNYW5pcHVsYXRpb24pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3JlcHIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9yZXByLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MmZjY2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9yZXByLnB5CkBAIC0wLDAgKzEsMzI3IEBACisiIiIKKyAgVGVzdCBjYXNlcyBmb3IgdGhlIHJlcHIgbW9kdWxlCisgIE5pY2sgTWF0aGV3c29uCisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjaGVja19weTNrX3dhcm5pbmdzCitmcm9tIHJlcHIgaW1wb3J0IHJlcHIgYXMgciAjIERvbid0IHNoYWRvdyBidWlsdGluIHJlcHIKK2Zyb20gcmVwciBpbXBvcnQgUmVwcgorCisKK2RlZiBuZXN0ZWRUdXBsZShuZXN0aW5nKToKKyAgICB0ID0gKCkKKyAgICBmb3IgaSBpbiByYW5nZShuZXN0aW5nKToKKyAgICAgICAgdCA9ICh0LCkKKyAgICByZXR1cm4gdAorCitjbGFzcyBSZXByVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc3RyaW5nKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEocigiYWJjIiksICInYWJjJyIpCisgICAgICAgIGVxKHIoImFiY2RlZmdoaWprbG1ub3AiKSwiJ2FiY2RlZmdoaWprbG1ub3AnIikKKworICAgICAgICBzID0gImEiKjMwKyJiIiozMAorICAgICAgICBleHBlY3RlZCA9IHJlcHIocylbOjEzXSArICIuLi4iICsgcmVwcihzKVstMTQ6XQorICAgICAgICBlcShyKHMpLCBleHBlY3RlZCkKKworICAgICAgICBlcShyKCJcIiciKSwgcmVwcigiXCInIikpCisgICAgICAgIHMgPSAiXCIiKjMwKyInIioxMDAKKyAgICAgICAgZXhwZWN0ZWQgPSByZXByKHMpWzoxM10gKyAiLi4uIiArIHJlcHIocylbLTE0Ol0KKyAgICAgICAgZXEocihzKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF90dXBsZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKHIoKDEsKSksICIoMSwpIikKKworICAgICAgICB0MyA9ICgxLCAyLCAzKQorICAgICAgICBlcShyKHQzKSwgIigxLCAyLCAzKSIpCisKKyAgICAgICAgcjIgPSBSZXByKCkKKyAgICAgICAgcjIubWF4dHVwbGUgPSAyCisgICAgICAgIGV4cGVjdGVkID0gcmVwcih0MylbOi0yXSArICIuLi4pIgorICAgICAgICBlcShyMi5yZXByKHQzKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9jb250YWluZXIoc2VsZik6CisgICAgICAgIGZyb20gYXJyYXkgaW1wb3J0IGFycmF5CisgICAgICAgIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCisKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgVHVwbGVzIGdpdmUgdXAgYWZ0ZXIgNiBlbGVtZW50cworICAgICAgICBlcShyKCgpKSwgIigpIikKKyAgICAgICAgZXEocigoMSwpKSwgIigxLCkiKQorICAgICAgICBlcShyKCgxLCAyLCAzKSksICIoMSwgMiwgMykiKQorICAgICAgICBlcShyKCgxLCAyLCAzLCA0LCA1LCA2KSksICIoMSwgMiwgMywgNCwgNSwgNikiKQorICAgICAgICBlcShyKCgxLCAyLCAzLCA0LCA1LCA2LCA3KSksICIoMSwgMiwgMywgNCwgNSwgNiwgLi4uKSIpCisKKyAgICAgICAgIyBMaXN0cyBnaXZlIHVwIGFmdGVyIDYgYXMgd2VsbAorICAgICAgICBlcShyKFtdKSwgIltdIikKKyAgICAgICAgZXEocihbMV0pLCAiWzFdIikKKyAgICAgICAgZXEocihbMSwgMiwgM10pLCAiWzEsIDIsIDNdIikKKyAgICAgICAgZXEocihbMSwgMiwgMywgNCwgNSwgNl0pLCAiWzEsIDIsIDMsIDQsIDUsIDZdIikKKyAgICAgICAgZXEocihbMSwgMiwgMywgNCwgNSwgNiwgN10pLCAiWzEsIDIsIDMsIDQsIDUsIDYsIC4uLl0iKQorCisgICAgICAgICMgU2V0cyBnaXZlIHVwIGFmdGVyIDYgYXMgd2VsbAorICAgICAgICBlcShyKHNldChbXSkpLCAic2V0KFtdKSIpCisgICAgICAgIGVxKHIoc2V0KFsxXSkpLCAic2V0KFsxXSkiKQorICAgICAgICBlcShyKHNldChbMSwgMiwgM10pKSwgInNldChbMSwgMiwgM10pIikKKyAgICAgICAgZXEocihzZXQoWzEsIDIsIDMsIDQsIDUsIDZdKSksICJzZXQoWzEsIDIsIDMsIDQsIDUsIDZdKSIpCisgICAgICAgIGVxKHIoc2V0KFsxLCAyLCAzLCA0LCA1LCA2LCA3XSkpLCAic2V0KFsxLCAyLCAzLCA0LCA1LCA2LCAuLi5dKSIpCisKKyAgICAgICAgIyBGcm96ZW5zZXRzIGdpdmUgdXAgYWZ0ZXIgNiBhcyB3ZWxsCisgICAgICAgIGVxKHIoZnJvemVuc2V0KFtdKSksICJmcm96ZW5zZXQoW10pIikKKyAgICAgICAgZXEocihmcm96ZW5zZXQoWzFdKSksICJmcm96ZW5zZXQoWzFdKSIpCisgICAgICAgIGVxKHIoZnJvemVuc2V0KFsxLCAyLCAzXSkpLCAiZnJvemVuc2V0KFsxLCAyLCAzXSkiKQorICAgICAgICBlcShyKGZyb3plbnNldChbMSwgMiwgMywgNCwgNSwgNl0pKSwgImZyb3plbnNldChbMSwgMiwgMywgNCwgNSwgNl0pIikKKyAgICAgICAgZXEocihmcm96ZW5zZXQoWzEsIDIsIDMsIDQsIDUsIDYsIDddKSksICJmcm96ZW5zZXQoWzEsIDIsIDMsIDQsIDUsIDYsIC4uLl0pIikKKworICAgICAgICAjIGNvbGxlY3Rpb25zLmRlcXVlIGFmdGVyIDYKKyAgICAgICAgZXEocihkZXF1ZShbMSwgMiwgMywgNCwgNSwgNiwgN10pKSwgImRlcXVlKFsxLCAyLCAzLCA0LCA1LCA2LCAuLi5dKSIpCisKKyAgICAgICAgIyBEaWN0aW9uYXJpZXMgZ2l2ZSB1cCBhZnRlciA0LgorICAgICAgICBlcShyKHt9KSwgInt9IikKKyAgICAgICAgZCA9IHsnYWxpY2UnOiAxLCAnYm9iJzogMiwgJ2NoYXJsZXMnOiAzLCAnZGF2ZSc6IDR9CisgICAgICAgIGVxKHIoZCksICJ7J2FsaWNlJzogMSwgJ2JvYic6IDIsICdjaGFybGVzJzogMywgJ2RhdmUnOiA0fSIpCisgICAgICAgIGRbJ2FydGh1ciddID0gMQorICAgICAgICBlcShyKGQpLCAieydhbGljZSc6IDEsICdhcnRodXInOiAxLCAnYm9iJzogMiwgJ2NoYXJsZXMnOiAzLCAuLi59IikKKworICAgICAgICAjIGFycmF5LmFycmF5IGFmdGVyIDUuCisgICAgICAgIGVxKHIoYXJyYXkoJ2knKSksICJhcnJheSgnaScsIFtdKSIpCisgICAgICAgIGVxKHIoYXJyYXkoJ2knLCBbMV0pKSwgImFycmF5KCdpJywgWzFdKSIpCisgICAgICAgIGVxKHIoYXJyYXkoJ2knLCBbMSwgMl0pKSwgImFycmF5KCdpJywgWzEsIDJdKSIpCisgICAgICAgIGVxKHIoYXJyYXkoJ2knLCBbMSwgMiwgM10pKSwgImFycmF5KCdpJywgWzEsIDIsIDNdKSIpCisgICAgICAgIGVxKHIoYXJyYXkoJ2knLCBbMSwgMiwgMywgNF0pKSwgImFycmF5KCdpJywgWzEsIDIsIDMsIDRdKSIpCisgICAgICAgIGVxKHIoYXJyYXkoJ2knLCBbMSwgMiwgMywgNCwgNV0pKSwgImFycmF5KCdpJywgWzEsIDIsIDMsIDQsIDVdKSIpCisgICAgICAgIGVxKHIoYXJyYXkoJ2knLCBbMSwgMiwgMywgNCwgNSwgNl0pKSwKKyAgICAgICAgICAgICAgICAgICAiYXJyYXkoJ2knLCBbMSwgMiwgMywgNCwgNSwgLi4uXSkiKQorCisgICAgZGVmIHRlc3RfbnVtYmVycyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKHIoMTIzKSwgcmVwcigxMjMpKQorICAgICAgICBlcShyKDEyM0wpLCByZXByKDEyM0wpKQorICAgICAgICBlcShyKDEuMC8zKSwgcmVwcigxLjAvMykpCisKKyAgICAgICAgbiA9IDEwTCoqMTAwCisgICAgICAgIGV4cGVjdGVkID0gcmVwcihuKVs6MThdICsgIi4uLiIgKyByZXByKG4pWy0xOTpdCisgICAgICAgIGVxKHIobiksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfaW5zdGFuY2Uoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBpMSA9IENsYXNzV2l0aFJlcHIoImEiKQorICAgICAgICBlcShyKGkxKSwgcmVwcihpMSkpCisKKyAgICAgICAgaTIgPSBDbGFzc1dpdGhSZXByKCJ4IioxMDAwKQorICAgICAgICBleHBlY3RlZCA9IHJlcHIoaTIpWzoxM10gKyAiLi4uIiArIHJlcHIoaTIpWy0xNDpdCisgICAgICAgIGVxKHIoaTIpLCBleHBlY3RlZCkKKworICAgICAgICBpMyA9IENsYXNzV2l0aEZhaWxpbmdSZXByKCkKKyAgICAgICAgZXEocihpMyksICgiPENsYXNzV2l0aEZhaWxpbmdSZXByIGluc3RhbmNlIGF0ICV4PiIlaWQoaTMpKSkKKworICAgICAgICBzID0gcihDbGFzc1dpdGhGYWlsaW5nUmVwcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgiPGNsYXNzICIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aCgiPiIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5maW5kKCIuLi4iKSA9PSA4KQorCisgICAgZGVmIHRlc3RfZmlsZShzZWxmKToKKyAgICAgICAgZnAgPSBvcGVuKHVuaXR0ZXN0Ll9fZmlsZV9fKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihmcCkuc3RhcnRzd2l0aCgKKyAgICAgICAgICAgICI8b3BlbiBmaWxlICVyLCBtb2RlICdyJyBhdCAweCIgJSB1bml0dGVzdC5fX2ZpbGVfXykpCisgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoZnApLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICAiPGNsb3NlZCBmaWxlICVyLCBtb2RlICdyJyBhdCAweCIgJSB1bml0dGVzdC5fX2ZpbGVfXykpCisKKyAgICBkZWYgdGVzdF9sYW1iZGEoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGxhbWJkYSB4OiB4KS5zdGFydHN3aXRoKAorICAgICAgICAgICAgIjxmdW5jdGlvbiA8bGFtYmRhIikpCisgICAgICAgICMgWFhYIGFub255bW91cyBmdW5jdGlvbnM/ICBzZWUgZnVuY19yZXByCisKKyAgICBkZWYgdGVzdF9idWlsdGluX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgIyBGdW5jdGlvbnMKKyAgICAgICAgZXEocmVwcihoYXNoKSwgJzxidWlsdC1pbiBmdW5jdGlvbiBoYXNoPicpCisgICAgICAgICMgTWV0aG9kcworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcignJy5zcGxpdCkuc3RhcnRzd2l0aCgKKyAgICAgICAgICAgICc8YnVpbHQtaW4gbWV0aG9kIHNwbGl0IG9mIHN0ciBvYmplY3QgYXQgMHgnKSkKKworICAgIGRlZiB0ZXN0X3hyYW5nZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKHJlcHIoeHJhbmdlKDEpKSwgJ3hyYW5nZSgxKScpCisgICAgICAgIGVxKHJlcHIoeHJhbmdlKDEsIDIpKSwgJ3hyYW5nZSgxLCAyKScpCisgICAgICAgIGVxKHJlcHIoeHJhbmdlKDEsIDIsIDMpKSwgJ3hyYW5nZSgxLCA0LCAzKScpCisKKyAgICBkZWYgdGVzdF9uZXN0aW5nKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgIyBldmVyeXRoaW5nIGlzIG1lYW50IHRvIGdpdmUgdXAgYWZ0ZXIgNiBsZXZlbHMuCisgICAgICAgIGVxKHIoW1tbW1tbW11dXV1dXV0pLCAiW1tbW1tbW11dXV1dXV0iKQorICAgICAgICBlcShyKFtbW1tbW1tbXV1dXV1dXV0pLCAiW1tbW1tbWy4uLl1dXV1dXV0iKQorCisgICAgICAgIGVxKHIobmVzdGVkVHVwbGUoNikpLCAiKCgoKCgoKCksKSwpLCksKSwpLCkiKQorICAgICAgICBlcShyKG5lc3RlZFR1cGxlKDcpKSwgIigoKCgoKCguLi4pLCksKSwpLCksKSwpIikKKworICAgICAgICBlcShyKHsgbmVzdGVkVHVwbGUoNSkgOiBuZXN0ZWRUdXBsZSg1KSB9KSwKKyAgICAgICAgICAgInsoKCgoKCgpLCksKSwpLCksKTogKCgoKCgoKSwpLCksKSwpLCl9IikKKyAgICAgICAgZXEocih7IG5lc3RlZFR1cGxlKDYpIDogbmVzdGVkVHVwbGUoNikgfSksCisgICAgICAgICAgICJ7KCgoKCgoLi4uKSwpLCksKSwpLCk6ICgoKCgoKC4uLiksKSwpLCksKSwpfSIpCisKKyAgICAgICAgZXEocihbW1tbW1t7fV1dXV1dXSksICJbW1tbW1t7fV1dXV1dXSIpCisgICAgICAgIGVxKHIoW1tbW1tbW3t9XV1dXV1dXSksICJbW1tbW1tbLi4uXV1dXV1dXSIpCisKKyAgICBkZWYgdGVzdF9idWZmZXIoc2VsZik6CisgICAgICAgICMgWFhYIGRvZXNuJ3QgdGVzdCBidWZmZXJzIHdpdGggbm8gYl9iYXNlIG9yIHJlYWQtd3JpdGUgYnVmZmVycyAoc2VlCisgICAgICAgICMgYnVmZmVyb2JqZWN0LmMpLiAgVGhlIHRlc3QgaXMgZmFpcmx5IGluY29tcGxldGUgdG9vLiAgU2lnaC4KKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB4ID0gYnVmZmVyKCdmb28nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcih4KS5zdGFydHN3aXRoKCc8cmVhZC1vbmx5IGJ1ZmZlciBmb3IgMHgnKSkKKworICAgIGRlZiB0ZXN0X2NlbGwoc2VsZik6CisgICAgICAgICMgWFhYIEhtbT8gSG93IHRvIGdldCBhdCBhIGNlbGwgb2JqZWN0PworICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9kZXNjcmlwdG9ycyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgbWV0aG9kIGRlc2NyaXB0b3JzCisgICAgICAgIGVxKHJlcHIoZGljdC5pdGVtcyksICI8bWV0aG9kICdpdGVtcycgb2YgJ2RpY3QnIG9iamVjdHM+IikKKyAgICAgICAgIyBYWFggbWVtYmVyIGRlc2NyaXB0b3JzCisgICAgICAgICMgWFhYIGF0dHJpYnV0ZSBkZXNjcmlwdG9ycworICAgICAgICAjIFhYWCBzbG90IGRlc2NyaXB0b3JzCisgICAgICAgICMgc3RhdGljIGFuZCBjbGFzcyBtZXRob2RzCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgZm9vKGNscyk6IHBhc3MKKyAgICAgICAgeCA9IHN0YXRpY21ldGhvZChDLmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoeCkuc3RhcnRzd2l0aCgnPHN0YXRpY21ldGhvZCBvYmplY3QgYXQgMHgnKSkKKyAgICAgICAgeCA9IGNsYXNzbWV0aG9kKEMuZm9vKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcih4KS5zdGFydHN3aXRoKCc8Y2xhc3NtZXRob2Qgb2JqZWN0IGF0IDB4JykpCisKKyAgICBkZWYgdGVzdF91bnNvcnRhYmxlKHNlbGYpOgorICAgICAgICAjIFJlcHIucmVwcigpIHVzZWQgdG8gY2FsbCBzb3J0ZWQoKSBvbiBzZXRzLCBmcm96ZW5zZXRzIGFuZCBkaWN0cworICAgICAgICAjIHdpdGhvdXQgdGFraW5nIGludG8gYWNjb3VudCB0aGF0IG5vdCBhbGwgb2JqZWN0cyBhcmUgY29tcGFyYWJsZQorICAgICAgICB4ID0gc2V0KFsxaiwgMmosIDNqXSkKKyAgICAgICAgeSA9IGZyb3plbnNldCh4KQorICAgICAgICB6ID0gezFqOiAxLCAyajogMn0KKyAgICAgICAgcih4KQorICAgICAgICByKHkpCisgICAgICAgIHIoeikKKworZGVmIHRvdWNoKHBhdGgsIHRleHQ9JycpOgorICAgIGZwID0gb3BlbihwYXRoLCAndycpCisgICAgZnAud3JpdGUodGV4dCkKKyAgICBmcC5jbG9zZSgpCisKK2NsYXNzIExvbmdSZXByVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBsb25nbmFtZSA9ICdhcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24nCisgICAgICAgIHNlbGYucGtnbmFtZSA9IG9zLnBhdGguam9pbihsb25nbmFtZSkKKyAgICAgICAgc2VsZi5zdWJwa2duYW1lID0gb3MucGF0aC5qb2luKGxvbmduYW1lLCBsb25nbmFtZSkKKyAgICAgICAgIyBNYWtlIHRoZSBwYWNrYWdlIGFuZCBzdWJwYWNrYWdlCisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5wa2duYW1lLCBpZ25vcmVfZXJyb3JzPVRydWUpCisgICAgICAgIG9zLm1rZGlyKHNlbGYucGtnbmFtZSkKKyAgICAgICAgdG91Y2gob3MucGF0aC5qb2luKHNlbGYucGtnbmFtZSwgJ19faW5pdF9fJytvcy5leHRzZXArJ3B5JykpCisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5zdWJwa2duYW1lLCBpZ25vcmVfZXJyb3JzPVRydWUpCisgICAgICAgIG9zLm1rZGlyKHNlbGYuc3VicGtnbmFtZSkKKyAgICAgICAgdG91Y2gob3MucGF0aC5qb2luKHNlbGYuc3VicGtnbmFtZSwgJ19faW5pdF9fJytvcy5leHRzZXArJ3B5JykpCisgICAgICAgICMgUmVtZW1iZXIgd2hlcmUgd2UgYXJlCisgICAgICAgIHNlbGYuaGVyZSA9IG9zLmdldGN3ZCgpCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBzZWxmLmhlcmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGFjdGlvbnMgPSBbXQorICAgICAgICBmb3IgZGlycGF0aCwgZGlybmFtZXMsIGZpbGVuYW1lcyBpbiBvcy53YWxrKHNlbGYucGtnbmFtZSk6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBkaXJuYW1lcyArIGZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICBhY3Rpb25zLmFwcGVuZChvcy5wYXRoLmpvaW4oZGlycGF0aCwgbmFtZSkpCisgICAgICAgIGFjdGlvbnMuYXBwZW5kKHNlbGYucGtnbmFtZSkKKyAgICAgICAgYWN0aW9ucy5zb3J0KCkKKyAgICAgICAgYWN0aW9ucy5yZXZlcnNlKCkKKyAgICAgICAgZm9yIHAgaW4gYWN0aW9uczoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocCk6CisgICAgICAgICAgICAgICAgb3Mucm1kaXIocCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHApCisgICAgICAgIGRlbCBzeXMucGF0aFswXQorCisgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgdG91Y2gob3MucGF0aC5qb2luKHNlbGYuc3VicGtnbmFtZSwgc2VsZi5wa2duYW1lICsgb3MuZXh0c2VwICsgJ3B5JykpCisgICAgICAgIGZyb20gYXJlYWxseWxvbmdwYWNrYWdlYW5kbW9kdWxlbmFtZXRvdGVzdHJlcHJ0cnVuY2F0aW9uLmFyZWFsbHlsb25ncGFja2FnZWFuZG1vZHVsZW5hbWV0b3Rlc3RyZXBydHJ1bmNhdGlvbiBpbXBvcnQgYXJlYWxseWxvbmdwYWNrYWdlYW5kbW9kdWxlbmFtZXRvdGVzdHJlcHJ0cnVuY2F0aW9uCisgICAgICAgIGVxKHJlcHIoYXJlYWxseWxvbmdwYWNrYWdlYW5kbW9kdWxlbmFtZXRvdGVzdHJlcHJ0cnVuY2F0aW9uKSwKKyAgICAgICAgICAgIjxtb2R1bGUgJyVzJyBmcm9tICclcyc+IiAlIChhcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24uX19uYW1lX18sIGFyZWFsbHlsb25ncGFja2FnZWFuZG1vZHVsZW5hbWV0b3Rlc3RyZXBydHJ1bmNhdGlvbi5fX2ZpbGVfXykpCisgICAgICAgIGVxKHJlcHIoc3lzKSwgIjxtb2R1bGUgJ3N5cycgKGJ1aWx0LWluKT4iKQorCisgICAgZGVmIHRlc3RfdHlwZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLnN1YnBrZ25hbWUsICdmb28nK29zLmV4dHNlcCsncHknKSwgJycnXAorY2xhc3MgZm9vKG9iamVjdCk6CisgICAgcGFzcworJycnKQorICAgICAgICBmcm9tIGFyZWFsbHlsb25ncGFja2FnZWFuZG1vZHVsZW5hbWV0b3Rlc3RyZXBydHJ1bmNhdGlvbi5hcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24gaW1wb3J0IGZvbworICAgICAgICBlcShyZXByKGZvby5mb28pLAorICAgICAgICAgICAgICAgIjxjbGFzcyAnJXMuZm9vJz4iICUgZm9vLl9fbmFtZV9fKQorCisgICAgZGVmIHRlc3Rfb2JqZWN0KHNlbGYpOgorICAgICAgICAjIFhYWCBUZXN0IHRoZSByZXByIG9mIGEgdHlwZSB3aXRoIGEgcmVhbGx5IGxvbmcgdHBfbmFtZSBidXQgd2l0aCBubworICAgICAgICAjIHRwX3JlcHIuICBXSUJOSSB3ZSBoYWQgOjpJbmxpbmU/IDopCisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2NsYXNzKHNlbGYpOgorICAgICAgICB0b3VjaChvcy5wYXRoLmpvaW4oc2VsZi5zdWJwa2duYW1lLCAnYmFyJytvcy5leHRzZXArJ3B5JyksICcnJ1wKK2NsYXNzIGJhcjoKKyAgICBwYXNzCisnJycpCisgICAgICAgIGZyb20gYXJlYWxseWxvbmdwYWNrYWdlYW5kbW9kdWxlbmFtZXRvdGVzdHJlcHJ0cnVuY2F0aW9uLmFyZWFsbHlsb25ncGFja2FnZWFuZG1vZHVsZW5hbWV0b3Rlc3RyZXBydHJ1bmNhdGlvbiBpbXBvcnQgYmFyCisgICAgICAgICMgTW9kdWxlIG5hbWUgbWF5IGJlIHByZWZpeGVkIHdpdGggInRlc3QuIiwgZGVwZW5kaW5nIG9uIGhvdyBydW4uCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGJhci5iYXIpLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICAiPGNsYXNzICVzLmJhciBhdCAweCIgJSBiYXIuX19uYW1lX18pKQorCisgICAgZGVmIHRlc3RfaW5zdGFuY2Uoc2VsZik6CisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLnN1YnBrZ25hbWUsICdiYXonK29zLmV4dHNlcCsncHknKSwgJycnXAorY2xhc3MgYmF6OgorICAgIHBhc3MKKycnJykKKyAgICAgICAgZnJvbSBhcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24uYXJlYWxseWxvbmdwYWNrYWdlYW5kbW9kdWxlbmFtZXRvdGVzdHJlcHJ0cnVuY2F0aW9uIGltcG9ydCBiYXoKKyAgICAgICAgaWJheiA9IGJhei5iYXooKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihpYmF6KS5zdGFydHN3aXRoKAorICAgICAgICAgICAgIjwlcy5iYXogaW5zdGFuY2UgYXQgMHgiICUgYmF6Ll9fbmFtZV9fKSkKKworICAgIGRlZiB0ZXN0X21ldGhvZChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHRvdWNoKG9zLnBhdGguam9pbihzZWxmLnN1YnBrZ25hbWUsICdxdXgnK29zLmV4dHNlcCsncHknKSwgJycnXAorY2xhc3MgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWE6CisgICAgZGVmIGFtZXRob2Qoc2VsZik6IHBhc3MKKycnJykKKyAgICAgICAgZnJvbSBhcmVhbGx5bG9uZ3BhY2thZ2VhbmRtb2R1bGVuYW1ldG90ZXN0cmVwcnRydW5jYXRpb24uYXJlYWxseWxvbmdwYWNrYWdlYW5kbW9kdWxlbmFtZXRvdGVzdHJlcHJ0cnVuY2F0aW9uIGltcG9ydCBxdXgKKyAgICAgICAgIyBVbmJvdW5kIG1ldGhvZHMgZmlyc3QKKyAgICAgICAgZXEocmVwcihxdXguYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEuYW1ldGhvZCksCisgICAgICAgICc8dW5ib3VuZCBtZXRob2QgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEuYW1ldGhvZD4nKQorICAgICAgICAjIEJvdW5kIG1ldGhvZCBuZXh0CisgICAgICAgIGlxdXggPSBxdXguYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihpcXV4LmFtZXRob2QpLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICAnPGJvdW5kIG1ldGhvZCBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS5hbWV0aG9kIG9mIDwlcy5hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSBpbnN0YW5jZSBhdCAweCcgXAorICAgICAgICAgICAgJSAocXV4Ll9fbmFtZV9fLCkgKSkKKworICAgIGRlZiB0ZXN0X2J1aWx0aW5fZnVuY3Rpb24oc2VsZik6CisgICAgICAgICMgWFhYIHRlc3QgYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBtZXRob2RzIHdpdGggcmVhbGx5IGxvbmcgbmFtZXMKKyAgICAgICAgcGFzcworCitjbGFzcyBDbGFzc1dpdGhSZXByOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzKToKKyAgICAgICAgc2VsZi5zID0gcworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJDbGFzc1dpdGhMb25nUmVwciglcikiICUgc2VsZi5zCisKKworY2xhc3MgQ2xhc3NXaXRoRmFpbGluZ1JlcHI6CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRoaXMgc2hvdWxkIGJlIGNhdWdodCBieSBSZXByLnJlcHJfaW5zdGFuY2UiKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoUmVwclRlc3RzKQorICAgIHJ1bl91bml0dGVzdChMb25nUmVwclRlc3QpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcmVzb3VyY2UucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9yZXNvdXJjZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDViMjZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcmVzb3VyY2UucHkKQEAgLTAsMCArMSwxMjcgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB0aW1lCisKK3Jlc291cmNlID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3Jlc291cmNlJykKKworIyBUaGlzIHRlc3QgaXMgY2hlY2tpbmcgYSBmZXcgc3BlY2lmaWMgcHJvYmxlbSBzcG90cyB3aXRoIHRoZSByZXNvdXJjZSBtb2R1bGUuCisKK2NsYXNzIFJlc291cmNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlc291cmNlLmdldHJsaW1pdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZXNvdXJjZS5nZXRybGltaXQsIDQyLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZXNvdXJjZS5zZXRybGltaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVzb3VyY2Uuc2V0cmxpbWl0LCA0MiwgNDIsIDQyKQorCisgICAgZGVmIHRlc3RfZnNpemVfaXNtYXgoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIChjdXIsIG1heCkgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0ZTSVpFKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFJMSU1JVF9GU0laRSBzaG91bGQgYmUgUkxJTV9JTkZJTklUWSwgd2hpY2ggd2lsbCBiZSBhIHJlYWxseSBiaWcKKyAgICAgICAgICAgICMgbnVtYmVyIG9uIGEgcGxhdGZvcm0gd2l0aCBsYXJnZSBmaWxlIHN1cHBvcnQuICBPbiB0aGVzZSBwbGF0Zm9ybXMsCisgICAgICAgICAgICAjIHdlIG5lZWQgdG8gdGVzdCB0aGF0IHRoZSBnZXQvc2V0cmxpbWl0IGZ1bmN0aW9ucyBwcm9wZXJseSBjb252ZXJ0CisgICAgICAgICAgICAjIHRoZSBudW1iZXIgdG8gYSBDIGxvbmcgbG9uZyBhbmQgdGhhdCB0aGUgY29udmVyc2lvbiBkb2Vzbid0IHJhaXNlCisgICAgICAgICAgICAjIGFuIGVycm9yLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNvdXJjZS5STElNX0lORklOSVRZLCBtYXgpCisgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0ZTSVpFLCAoY3VyLCBtYXgpKQorCisgICAgZGVmIHRlc3RfZnNpemVfZW5mb3JjZWQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIChjdXIsIG1heCkgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0ZTSVpFKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIENoZWNrIHRvIHNlZSB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgUkxJTUlUX0ZTSVpFIGlzIHNtYWxsLiAgU29tZQorICAgICAgICAgICAgIyB2ZXJzaW9ucyBvZiBQeXRob24gd2VyZSB0ZXJtaW5hdGVkIGJ5IGFuIHVuY2F1Z2h0IFNJR1hGU1osIGJ1dAorICAgICAgICAgICAgIyBweXRob25ydW4uYyBoYXMgYmVlbiBmaXhlZCB0byBpZ25vcmUgdGhhdCBleGNlcHRpb24uICBJZiBzbywgdGhlCisgICAgICAgICAgICAjIHdyaXRlKCkgc2hvdWxkIHJldHVybiBFRkJJRyB3aGVuIHRoZSBsaW1pdCBpcyBleGNlZWRlZC4KKworICAgICAgICAgICAgIyBBdCBsZWFzdCBvbmUgcGxhdGZvcm0gaGFzIGFuIHVubGltaXRlZCBSTElNSVRfRlNJWkUgYW5kIGF0dGVtcHRzCisgICAgICAgICAgICAjIHRvIGNoYW5nZSBpdCByYWlzZSBWYWx1ZUVycm9yIGluc3RlYWQuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0ZTSVpFLCAoMTAyNCwgbWF4KSkKKyAgICAgICAgICAgICAgICAgICAgbGltaXRfc2V0ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBsaW1pdF9zZXQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJYIiAqIDEwMjQpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIlkiKQorICAgICAgICAgICAgICAgICAgICAgICAgZi5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgICAgICAjIE9uIHNvbWUgc3lzdGVtcyAoZS5nLiwgVWJ1bnR1IG9uIGhwcGEpIHRoZSBmbHVzaCgpCisgICAgICAgICAgICAgICAgICAgICAgICAjIGRvZXNuJ3QgYWx3YXlzIGNhdXNlIHRoZSBleGNlcHRpb24sIGJ1dCB0aGUgY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBkb2VzIGV2ZW50dWFsbHkuICBUcnkgZmx1c2hpbmcgc2V2ZXJhbCB0aW1lcyBpbgorICAgICAgICAgICAgICAgICAgICAgICAgIyBhbiBhdHRlbXB0IHRvIGVuc3VyZSB0aGUgZmlsZSBpcyByZWFsbHkgc3luY2VkIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgZXhjZXB0aW9uIHJhaXNlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoLjEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbWl0X3NldDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBpZiBsaW1pdF9zZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAjIENsb3NlIHdpbGwgYXR0ZW1wdCB0byBmbHVzaCB0aGUgYnl0ZSB3ZSB3cm90ZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBSZXN0b3JlIGxpbWl0IGZpcnN0IHRvIGF2b2lkIGdldHRpbmcgYSBzcHVyaW91cyBlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9GU0laRSwgKGN1ciwgbWF4KSkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgaWYgbGltaXRfc2V0OgorICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0ZTSVpFLCAoY3VyLCBtYXgpKQorICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2ZzaXplX3Rvb2JpZyhzZWxmKToKKyAgICAgICAgIyBCZSBzdXJlIHRoYXQgc2V0cmxpbWl0IGlzIGNoZWNraW5nIGZvciByZWFsbHkgbGFyZ2UgdmFsdWVzCisgICAgICAgIHRvb19iaWcgPSAxMEwqKjUwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIChjdXIsIG1heCkgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0ZTSVpFKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9GU0laRSwgKHRvb19iaWcsIG1heCkpCisgICAgICAgICAgICBleGNlcHQgKE92ZXJmbG93RXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0ZTSVpFLCAobWF4LCB0b29fYmlnKSkKKyAgICAgICAgICAgIGV4Y2VwdCAoT3ZlcmZsb3dFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZ2V0cnVzYWdlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlc291cmNlLmdldHJ1c2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZXNvdXJjZS5nZXRydXNhZ2UsIDQyLCA0MikKKyAgICAgICAgdXNhZ2VzZWxmID0gcmVzb3VyY2UuZ2V0cnVzYWdlKHJlc291cmNlLlJVU0FHRV9TRUxGKQorICAgICAgICB1c2FnZWNoaWxkcmVuID0gcmVzb3VyY2UuZ2V0cnVzYWdlKHJlc291cmNlLlJVU0FHRV9DSElMRFJFTikKKyAgICAgICAgIyBNYXkgbm90IGJlIGF2YWlsYWJsZSBvbiBhbGwgc3lzdGVtcy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdXNhZ2Vib3RoID0gcmVzb3VyY2UuZ2V0cnVzYWdlKHJlc291cmNlLlJVU0FHRV9CT1RIKQorICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICMgSXNzdWUgNjA4MzogUmVmZXJlbmNlIGNvdW50aW5nIGJ1ZworICAgIGRlZiB0ZXN0X3NldHJ1c2FnZV9yZWZjb3VudChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGltaXRzID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DUFUpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNsYXNzIEJhZFNlcXVlbmNlOgorICAgICAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMgorICAgICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgICAgICBpZiBrZXkgaW4gKDAsIDEpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlbih0dXBsZShyYW5nZSgxMDAwMDAwKSkpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKworICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DUFUsIEJhZFNlcXVlbmNlKCkpCisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFJlc291cmNlVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcmZjODIyLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcmZjODIyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YTAyODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9yZmM4MjIucHkKQEAgLTAsMCArMSwyNTcgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworcmZjODIyID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoInJmYzgyMiIsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKwordHJ5OgorICAgIGZyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKKworY2xhc3MgTWVzc2FnZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY3JlYXRlX21lc3NhZ2Uoc2VsZiwgbXNnKToKKyAgICAgICAgcmV0dXJuIHJmYzgyMi5NZXNzYWdlKFN0cmluZ0lPKG1zZykpCisKKyAgICBkZWYgdGVzdF9nZXQoc2VsZik6CisgICAgICAgIG1zZyA9IHNlbGYuY3JlYXRlX21lc3NhZ2UoCisgICAgICAgICAgICAnVG86ICJsYXN0LCBmaXJzdCIgPHVzZXJpZEBmb28ubmV0PlxuXG50ZXN0XG4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLmdldCgidG8iKSA9PSAnImxhc3QsIGZpcnN0IiA8dXNlcmlkQGZvby5uZXQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5nZXQoIlRPIikgPT0gJyJsYXN0LCBmaXJzdCIgPHVzZXJpZEBmb28ubmV0PicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuZ2V0KCJOby1TdWNoLUhlYWRlciIpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuZ2V0KCJOby1TdWNoLUhlYWRlciIsICJOby1TdWNoLVZhbHVlIikKKyAgICAgICAgICAgICAgICAgICAgID09ICJOby1TdWNoLVZhbHVlIikKKworICAgIGRlZiB0ZXN0X3NldGRlZmF1bHQoc2VsZik6CisgICAgICAgIG1zZyA9IHNlbGYuY3JlYXRlX21lc3NhZ2UoCisgICAgICAgICAgICAnVG86ICJsYXN0LCBmaXJzdCIgPHVzZXJpZEBmb28ubmV0PlxuXG50ZXN0XG4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG1zZy5oYXNfa2V5KCJOZXctSGVhZGVyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuc2V0ZGVmYXVsdCgiTmV3LUhlYWRlciIsICJOZXctVmFsdWUiKSA9PSAiTmV3LVZhbHVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5zZXRkZWZhdWx0KCJOZXctSGVhZGVyIiwgIkRpZmZlcmVudC1WYWx1ZSIpCisgICAgICAgICAgICAgICAgICAgICA9PSAiTmV3LVZhbHVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZ1sibmV3LWhlYWRlciJdID09ICJOZXctVmFsdWUiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuc2V0ZGVmYXVsdCgiQW5vdGhlci1IZWFkZXIiKSA9PSAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZ1siYW5vdGhlci1oZWFkZXIiXSA9PSAiIikKKworICAgIGRlZiBjaGVjayhzZWxmLCBtc2csIHJlc3VsdHMpOgorICAgICAgICAiIiJDaGVjayBhZGRyZXNzZXMgYW5kIHRoZSBkYXRlLiIiIgorICAgICAgICBtID0gc2VsZi5jcmVhdGVfbWVzc2FnZShtc2cpCisgICAgICAgIGkgPSAwCisgICAgICAgIGZvciBuLCBhIGluIG0uZ2V0YWRkcmxpc3QoJ3RvJykgKyBtLmdldGFkZHJsaXN0KCdjYycpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1uLCBtYSA9IHJlc3VsdHNbaV1bMF0sIHJlc3VsdHNbaV1bMV0KKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIHByaW50ICdleHRyYSBwYXJzZWQgYWRkcmVzczonLCByZXByKG4pLCByZXByKGEpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGkgPSBpICsgMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtbiwgbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuLWV4cGVjdGVkIG5hbWU6ICVyICE9ICVyIiAlIChtbiwgbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hLCBhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW4tZXhwZWN0ZWQgYWRkcmVzczogJXIgIT0gJXIiICUgKG1hLCBhKSkKKyAgICAgICAgICAgIGlmIG1uID09IG4gYW5kIG1hID09IGE6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAnbm90IGZvdW5kOicsIHJlcHIobiksIHJlcHIoYSkKKworICAgICAgICBvdXQgPSBtLmdldGRhdGUoJ2RhdGUnKQorICAgICAgICBpZiBvdXQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5OTksIDEsIDEzLCAyMywgNTcsIDM1LCAwLCAxLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGUgY29udmVyc2lvbiBmYWlsZWQiKQorCisKKyAgICAjIE5vdGU6IGFsbCB0ZXN0IGNhc2VzIG11c3QgaGF2ZSB0aGUgc2FtZSBkYXRlIChpbiB2YXJpb3VzIGZvcm1hdHMpLAorICAgICMgb3Igbm8gZGF0ZSEKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKAorICAgICAgICAgICAgJ0RhdGU6ICAgIFdlZCwgMTMgSmFuIDE5OTkgMjM6NTc6MzUgLTA1MDBcbicKKyAgICAgICAgICAgICdGcm9tOiAgICBHdWlkbyB2YW4gUm9zc3VtIDxndWlkb0BDTlJJLlJlc3Rvbi5WQS5VUz5cbicKKyAgICAgICAgICAgICdUbzogICAgICAiR3VpZG8gdmFuXG4nCisgICAgICAgICAgICAnXHQgOiBSb3NzdW0iIDxndWlkb0BweXRob24ub3JnPlxuJworICAgICAgICAgICAgJ1N1YmplY3Q6IHRlc3QyXG4nCisgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAndGVzdDJcbicsCisgICAgICAgICAgICBbKCdHdWlkbyB2YW5cblx0IDogUm9zc3VtJywgJ2d1aWRvQHB5dGhvbi5vcmcnKV0pCisKKyAgICAgICAgc2VsZi5jaGVjaygKKyAgICAgICAgICAgICdGcm9tOiBCYXJyeSA8YndhcnNhd0BweXRob24ub3JnXG4nCisgICAgICAgICAgICAnVG86IGd1aWRvQHB5dGhvbi5vcmcgKEd1aWRvOiB0aGUgQmFyYmFyaWFuKVxuJworICAgICAgICAgICAgJ1N1YmplY3Q6IG5vbnNlbnNlXG4nCisgICAgICAgICAgICAnRGF0ZTogV2VkbmVzZGF5LCBKYW51YXJ5IDEzIDE5OTkgMjM6NTc6MzUgLTA1MDBcbicKKyAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICd0ZXN0JywKKyAgICAgICAgICAgIFsoJ0d1aWRvOiB0aGUgQmFyYmFyaWFuJywgJ2d1aWRvQHB5dGhvbi5vcmcnKV0pCisKKyAgICAgICAgc2VsZi5jaGVjaygKKyAgICAgICAgICAgICdGcm9tOiBCYXJyeSA8YndhcnNhd0BweXRob24ub3JnXG4nCisgICAgICAgICAgICAnVG86IGd1aWRvQHB5dGhvbi5vcmcgKEd1aWRvOiB0aGUgQmFyYmFyaWFuKVxuJworICAgICAgICAgICAgJ0NjOiAiR3VpZG86IHRoZSBNYWRtYW4iIDxndWlkb0BweXRob24ub3JnPlxuJworICAgICAgICAgICAgJ0RhdGU6ICAxMy1KYW4tMTk5OSAyMzo1NzozNSBFU1RcbicKKyAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICd0ZXN0JywKKyAgICAgICAgICAgIFsoJ0d1aWRvOiB0aGUgQmFyYmFyaWFuJywgJ2d1aWRvQHB5dGhvbi5vcmcnKSwKKyAgICAgICAgICAgICAoJ0d1aWRvOiB0aGUgTWFkbWFuJywgJ2d1aWRvQHB5dGhvbi5vcmcnKQorICAgICAgICAgICAgIF0pCisKKyAgICAgICAgc2VsZi5jaGVjaygKKyAgICAgICAgICAgICdUbzogIlRoZSBtb25zdGVyIHdpdGhcbicKKyAgICAgICAgICAgICcgICAgIHRoZSB2ZXJ5IGxvbmcgbmFtZTogR3VpZG8iIDxndWlkb0BweXRob24ub3JnPlxuJworICAgICAgICAgICAgJ0RhdGU6ICAgIFdlZCwgMTMgSmFuIDE5OTkgMjM6NTc6MzUgLTA1MDBcbicKKyAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICd0ZXN0JywKKyAgICAgICAgICAgIFsoJ1RoZSBtb25zdGVyIHdpdGhcbiAgICAgdGhlIHZlcnkgbG9uZyBuYW1lOiBHdWlkbycsCisgICAgICAgICAgICAgICdndWlkb0BweXRob24ub3JnJyldKQorCisgICAgICAgIHNlbGYuY2hlY2soCisgICAgICAgICAgICAnVG86ICJBbWl0IEouIFBhdGVsIiA8YW1pdHBAVGhlb3J5LlN0YW5mb3JkLkVEVT5cbicKKyAgICAgICAgICAgICdDQzogTWlrZSBGbGV0Y2hlciA8bWZsZXRjaEB2cnRlbGVjb20uY29tPixcbicKKyAgICAgICAgICAgICcgICAgICAgICJcJ3N0cmluZy1zaWdAcHl0aG9uLm9yZ1wnIiA8c3RyaW5nLXNpZ0BweXRob24ub3JnPlxuJworICAgICAgICAgICAgJ0NjOiBmb296QGJhdC5jb20sIGJhcnRAdG9vZi5jb21cbicKKyAgICAgICAgICAgICdDYzogZ29pdEBsaXAuY29tXG4nCisgICAgICAgICAgICAnRGF0ZTogICAgV2VkLCAxMyBKYW4gMTk5OSAyMzo1NzozNSAtMDUwMFxuJworICAgICAgICAgICAgJ1xuJworICAgICAgICAgICAgJ3Rlc3QnLAorICAgICAgICAgICAgWygnQW1pdCBKLiBQYXRlbCcsICdhbWl0cEBUaGVvcnkuU3RhbmZvcmQuRURVJyksCisgICAgICAgICAgICAgKCdNaWtlIEZsZXRjaGVyJywgJ21mbGV0Y2hAdnJ0ZWxlY29tLmNvbScpLAorICAgICAgICAgICAgICgiJ3N0cmluZy1zaWdAcHl0aG9uLm9yZyciLCAnc3RyaW5nLXNpZ0BweXRob24ub3JnJyksCisgICAgICAgICAgICAgKCcnLCAnZm9vekBiYXQuY29tJyksCisgICAgICAgICAgICAgKCcnLCAnYmFydEB0b29mLmNvbScpLAorICAgICAgICAgICAgICgnJywgJ2dvaXRAbGlwLmNvbScpLAorICAgICAgICAgICAgIF0pCisKKyAgICAgICAgc2VsZi5jaGVjaygKKyAgICAgICAgICAgICdUbzogU29tZSBPbmUgPHNvbWVvbmVAZG9tLmFpbj5cbicKKyAgICAgICAgICAgICdGcm9tOiBBbnVkZGVyIFBlcnNpbiA8c3VidWRkeS5lbHNlQGRvbS5haW4+XG4nCisgICAgICAgICAgICAnRGF0ZTpcbicKKyAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICd0ZXN0JywKKyAgICAgICAgICAgIFsoJ1NvbWUgT25lJywgJ3NvbWVvbmVAZG9tLmFpbicpXSkKKworICAgICAgICBzZWxmLmNoZWNrKAorICAgICAgICAgICAgJ1RvOiBwZXJzb25AZG9tLmFpbiAoVXNlciBKLiBQZXJzb24pXG5cbicsCisgICAgICAgICAgICBbKCdVc2VyIEouIFBlcnNvbicsICdwZXJzb25AZG9tLmFpbicpXSkKKworICAgIGRlZiB0ZXN0X2RvdWJsZWNvbW1lbnQoc2VsZik6CisgICAgICAgICMgVGhlIFJGQyBhbGxvd3MgY29tbWVudHMgd2l0aGluIGNvbW1lbnRzIGluIGFuIGVtYWlsIGFkZHIKKyAgICAgICAgc2VsZi5jaGVjaygKKyAgICAgICAgICAgICdUbzogcGVyc29uQGRvbS5haW4gKChVc2VyIEouIFBlcnNvbikpLCBKb2huIERvZSA8Zm9vQGJhci5jb20+XG5cbicsCisgICAgICAgICAgICBbKCdVc2VyIEouIFBlcnNvbicsICdwZXJzb25AZG9tLmFpbicpLCAoJ0pvaG4gRG9lJywgJ2Zvb0BiYXIuY29tJyldKQorCisgICAgZGVmIHRlc3RfdHdpc3RlZChzZWxmKToKKyAgICAgICAgIyBUaGlzIG9uZSBpcyBqdXN0IHR3aXN0ZWQuICBJIGRvbid0IGtub3cgd2hhdCB0aGUgcHJvcGVyCisgICAgICAgICMgcmVzdWx0IHNob3VsZCBiZSwgYnV0IGl0IHNob3VsZG4ndCBiZSB0byBpbmZsb29wLCB3aGljaCBpcworICAgICAgICAjIHdoYXQgdXNlZCB0byBoYXBwZW4hCisgICAgICAgIHNlbGYuY2hlY2soCisgICAgICAgICAgICAnVG86IDxbc210cDpkZDQ3QG1haWwueHh4LmVkdV1fYXRfaG1ocUBoZHEtbWRtMS1pbWdvdXQuY29tcGFuYXkuY29tPlxuJworICAgICAgICAgICAgJ0RhdGU6ICAgIFdlZCwgMTMgSmFuIDE5OTkgMjM6NTc6MzUgLTA1MDBcbicKKyAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICd0ZXN0JywKKyAgICAgICAgICAgIFsoJycsICcnKSwKKyAgICAgICAgICAgICAoJycsICdkZDQ3QG1haWwueHh4LmVkdScpLAorICAgICAgICAgICAgICgnJywgJ19hdF9obWhxQGhkcS1tZG0xLWltZ291dC5jb21wYW5heS5jb20nKSwKKyAgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfY29tbWFzX2luX2Z1bGxfbmFtZShzZWxmKToKKyAgICAgICAgIyBUaGlzIGV4ZXJjaXNlcyB0aGUgb2xkIGNvbW1hcy1pbi1hLWZ1bGwtbmFtZSBidWcsIHdoaWNoCisgICAgICAgICMgc2hvdWxkIGJlIGRvaW5nIHRoZSByaWdodCB0aGluZyBpbiByZWNlbnQgdmVyc2lvbnMgb2YgdGhlCisgICAgICAgICMgbW9kdWxlLgorICAgICAgICBzZWxmLmNoZWNrKAorICAgICAgICAgICAgJ1RvOiAibGFzdCwgZmlyc3QiIDx1c2VyaWRAZm9vLm5ldD5cbicKKyAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICd0ZXN0JywKKyAgICAgICAgICAgIFsoJ2xhc3QsIGZpcnN0JywgJ3VzZXJpZEBmb28ubmV0JyldKQorCisgICAgZGVmIHRlc3RfcXVvdGVkX25hbWUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soCisgICAgICAgICAgICAnVG86IChDb21tZW50IHN0dWZmKSAiUXVvdGVkIG5hbWUiQHNvbWV3aGVyZS5jb21cbicKKyAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICd0ZXN0JywKKyAgICAgICAgICAgIFsoJ0NvbW1lbnQgc3R1ZmYnLCAnIlF1b3RlZCBuYW1lIkBzb21ld2hlcmUuY29tJyldKQorCisgICAgZGVmIHRlc3RfYm9ndXNfdG9faGVhZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKAorICAgICAgICAgICAgJ1RvOiA6XG4nCisgICAgICAgICAgICAnQ2M6IGdvaXRAbGlwLmNvbVxuJworICAgICAgICAgICAgJ0RhdGU6ICAgIFdlZCwgMTMgSmFuIDE5OTkgMjM6NTc6MzUgLTA1MDBcbicKKyAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICd0ZXN0JywKKyAgICAgICAgICAgIFsoJycsICdnb2l0QGxpcC5jb20nKV0pCisKKyAgICBkZWYgdGVzdF9hZGRyX2lwcXVhZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygKKyAgICAgICAgICAgICdUbzogZ3VpZG9AWzEzMi4xNTEuMS4yMV1cbicKKyAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICdmb28nLAorICAgICAgICAgICAgWygnJywgJ2d1aWRvQFsxMzIuMTUxLjEuMjFdJyldKQorCisgICAgZGVmIHRlc3RfaXRlcihzZWxmKToKKyAgICAgICAgbSA9IHJmYzgyMi5NZXNzYWdlKFN0cmluZ0lPKAorICAgICAgICAgICAgJ0RhdGU6ICAgIFdlZCwgMTMgSmFuIDE5OTkgMjM6NTc6MzUgLTA1MDBcbicKKyAgICAgICAgICAgICdGcm9tOiAgICBHdWlkbyB2YW4gUm9zc3VtIDxndWlkb0BDTlJJLlJlc3Rvbi5WQS5VUz5cbicKKyAgICAgICAgICAgICdUbzogICAgICAiR3VpZG8gdmFuXG4nCisgICAgICAgICAgICAnXHQgOiBSb3NzdW0iIDxndWlkb0BweXRob24ub3JnPlxuJworICAgICAgICAgICAgJ1N1YmplY3Q6IHRlc3QyXG4nCisgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAndGVzdDJcbicgKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQobSksIFsnZGF0ZScsICdmcm9tJywgJ3N1YmplY3QnLCAndG8nXSkKKworICAgIGRlZiB0ZXN0X3JmYzI4MjJfcGhyYXNlcyhzZWxmKToKKyAgICAgICAgIyBSRkMgMjgyMiAodGhlIHVwZGF0ZSB0byBSRkMgODIyKSBzcGVjaWZpZXMgdGhhdCBkb3RzIGluIHBocmFzZXMgYXJlCisgICAgICAgICMgb2Jzb2xldGUgc3ludGF4LCB3aGljaCBjb25mb3JtaW5nIHByb2dyYW1zIE1VU1QgcmVjb2duaXplIGJ1dCBORVZFUgorICAgICAgICAjIGdlbmVyYXRlIChzZWUgJDQuMSBNaXNjZWxsYW5lb3VzIG9ic29sZXRlIHRva2VucykuICBUaGlzIGlzIGEKKyAgICAgICAgIyBkZXBhcnR1cmUgZnJvbSBSRkMgODIyIHdoaWNoIGRpZCBub3QgYWxsb3cgZG90cyBpbiBub24tcXVvdGVkCisgICAgICAgICMgcGhyYXNlcy4KKyAgICAgICAgc2VsZi5jaGVjaygnVG86IFVzZXIgSi4gUGVyc29uIDxwZXJzb25AZG9tLmFpbj5cblxuJywKKyAgICAgICAgICAgICAgICAgICBbKCdVc2VyIEouIFBlcnNvbicsICdwZXJzb25AZG9tLmFpbicpXSkKKworICAgICMgVGhpcyB0YWtlcyB0b28gbG9uZyB0byBhZGQgdG8gdGhlIHRlc3Qgc3VpdGUKKyMjICAgIGRlZiB0ZXN0X2FuX2V4Y3J1dGlhdGluZ2x5X2xvbmdfYWRkcmVzc19maWVsZChzZWxmKToKKyMjICAgICAgICBPQlNDRU5FTFlfTE9OR19IRUFERVJfTVVMVElQTElFUiA9IDEwMDAwCisjIyAgICAgICAgb25lYWRkciA9ICgnUGVyc29uJyAqIDEwKSArICdAJyArICgnLicuam9pbihbJ2RvbSddKjEwKSkgKyAnLmNvbScKKyMjICAgICAgICBhZGRyID0gJywgJy5qb2luKFtvbmVhZGRyXSAqIE9CU0NFTkVMWV9MT05HX0hFQURFUl9NVUxUSVBMSUVSKQorIyMgICAgICAgIGxzdCA9IHJmYzgyMi5BZGRybGlzdENsYXNzKGFkZHIpLmdldGFkZHJsaXN0KCkKKyMjICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBPQlNDRU5FTFlfTE9OR19IRUFERVJfTVVMVElQTElFUikKKworICAgIGRlZiB0ZXN0XzJnZXRhZGRybGlzdChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIG1zZyA9IHNlbGYuY3JlYXRlX21lc3NhZ2UoIiIiXAorVG86IGFwZXJzb25AZG9tLmFpbgorQ2M6IGJwZXJzb25AZG9tLmFpbgorQ2M6IGNwZXJzb25AZG9tLmFpbgorQ2M6IGRwZXJzb25AZG9tLmFpbgorCitBIHRlc3QgbWVzc2FnZS4KKyIiIikKKyAgICAgICAgY2NzID0gWygnJywgYSkgZm9yIGEgaW4KKyAgICAgICAgICAgICAgIFsnYnBlcnNvbkBkb20uYWluJywgJ2NwZXJzb25AZG9tLmFpbicsICdkcGVyc29uQGRvbS5haW4nXV0KKyAgICAgICAgYWRkcnMgPSBtc2cuZ2V0YWRkcmxpc3QoJ2NjJykKKyAgICAgICAgYWRkcnMuc29ydCgpCisgICAgICAgIGVxKGFkZHJzLCBjY3MpCisgICAgICAgICMgVHJ5IGFnYWluLCB0aGlzIG9uZSB1c2VkIHRvIGZhaWwKKyAgICAgICAgYWRkcnMgPSBtc2cuZ2V0YWRkcmxpc3QoJ2NjJykKKyAgICAgICAgYWRkcnMuc29ydCgpCisgICAgICAgIGVxKGFkZHJzLCBjY3MpCisKKyAgICBkZWYgdGVzdF9wYXJzZWFkZHIoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShyZmM4MjIucGFyc2VhZGRyKCc8PicpLCAoJycsICcnKSkKKyAgICAgICAgZXEocmZjODIyLnBhcnNlYWRkcignYXBlcnNvbkBkb20uYWluJyksICgnJywgJ2FwZXJzb25AZG9tLmFpbicpKQorICAgICAgICBlcShyZmM4MjIucGFyc2VhZGRyKCdicGVyc29uQGRvbS5haW4gKEJlYSBBLiBQZXJzb24pJyksCisgICAgICAgICAgICgnQmVhIEEuIFBlcnNvbicsICdicGVyc29uQGRvbS5haW4nKSkKKyAgICAgICAgZXEocmZjODIyLnBhcnNlYWRkcignQ3ludGhpYSBQZXJzb24gPGNwZXJzb25AZG9tLmFpbj4nKSwKKyAgICAgICAgICAgKCdDeW50aGlhIFBlcnNvbicsICdjcGVyc29uQGRvbS5haW4nKSkKKworICAgIGRlZiB0ZXN0X3F1b3RlX3VucXVvdGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShyZmM4MjIucXVvdGUoJ2Zvb1xcd2Fja3kibmFtZScpLCAnZm9vXFxcXHdhY2t5XFwibmFtZScpCisgICAgICAgIGVxKHJmYzgyMi51bnF1b3RlKCciZm9vXFxcXHdhY2t5XFwibmFtZSInKSwgJ2Zvb1xcd2Fja3kibmFtZScpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTWVzc2FnZVRlc3RDYXNlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3JpY2hjbXAucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9yaWNoY21wLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZmEwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9yaWNoY21wLnB5CkBAIC0wLDAgKzEsMzM4IEBACisjIFRlc3RzIGZvciByaWNoIGNvbXBhcmlzb25zCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworaW1wb3J0IG9wZXJhdG9yCisKK2NsYXNzIE51bWJlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgc2VsZi54ID0geAorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLnggPCBvdGhlcgorCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLnggPD0gb3RoZXIKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi54ID09IG90aGVyCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYueCAhPSBvdGhlcgorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLnggPiBvdGhlcgorCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLnggPj0gb3RoZXIKKworICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmFpc2UgdGVzdF9zdXBwb3J0LlRlc3RGYWlsZWQsICJOdW1iZXIuX19jbXBfXygpIHNob3VsZCBub3QgYmUgY2FsbGVkIgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIk51bWJlciglcikiICUgKHNlbGYueCwgKQorCitjbGFzcyBWZWN0b3I6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuZGF0YSkKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZGF0YVtpXQorCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGksIHYpOgorICAgICAgICBzZWxmLmRhdGFbaV0gPSB2CisKKyAgICBfX2hhc2hfXyA9IE5vbmUgIyBWZWN0b3JzIGNhbm5vdCBiZSBoYXNoZWQKKworICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yLCAiVmVjdG9ycyBjYW5ub3QgYmUgdXNlZCBpbiBCb29sZWFuIGNvbnRleHRzIgorCisgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCwgIlZlY3Rvci5fX2NtcF9fKCkgc2hvdWxkIG5vdCBiZSBjYWxsZWQiCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiVmVjdG9yKCVyKSIgJSAoc2VsZi5kYXRhLCApCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIFZlY3RvcihbYSA8IGIgZm9yIGEsIGIgaW4gemlwKHNlbGYuZGF0YSwgc2VsZi5fX2Nhc3Qob3RoZXIpKV0pCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIFZlY3RvcihbYSA8PSBiIGZvciBhLCBiIGluIHppcChzZWxmLmRhdGEsIHNlbGYuX19jYXN0KG90aGVyKSldKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBWZWN0b3IoW2EgPT0gYiBmb3IgYSwgYiBpbiB6aXAoc2VsZi5kYXRhLCBzZWxmLl9fY2FzdChvdGhlcikpXSkKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gVmVjdG9yKFthICE9IGIgZm9yIGEsIGIgaW4gemlwKHNlbGYuZGF0YSwgc2VsZi5fX2Nhc3Qob3RoZXIpKV0pCisKKyAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIFZlY3RvcihbYSA+IGIgZm9yIGEsIGIgaW4gemlwKHNlbGYuZGF0YSwgc2VsZi5fX2Nhc3Qob3RoZXIpKV0pCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIFZlY3RvcihbYSA+PSBiIGZvciBhLCBiIGluIHppcChzZWxmLmRhdGEsIHNlbGYuX19jYXN0KG90aGVyKSldKQorCisgICAgZGVmIF9fY2FzdChzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFZlY3Rvcik6CisgICAgICAgICAgICBvdGhlciA9IG90aGVyLmRhdGEKKyAgICAgICAgaWYgbGVuKHNlbGYuZGF0YSkgIT0gbGVuKG90aGVyKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJDYW5ub3QgY29tcGFyZSB2ZWN0b3JzIG9mIGRpZmZlcmVudCBsZW5ndGgiCisgICAgICAgIHJldHVybiBvdGhlcgorCitvcG1hcCA9IHsKKyAgICAibHQiOiAobGFtYmRhIGEsYjogYTwgYiwgb3BlcmF0b3IubHQsIG9wZXJhdG9yLl9fbHRfXyksCisgICAgImxlIjogKGxhbWJkYSBhLGI6IGE8PWIsIG9wZXJhdG9yLmxlLCBvcGVyYXRvci5fX2xlX18pLAorICAgICJlcSI6IChsYW1iZGEgYSxiOiBhPT1iLCBvcGVyYXRvci5lcSwgb3BlcmF0b3IuX19lcV9fKSwKKyAgICAibmUiOiAobGFtYmRhIGEsYjogYSE9Yiwgb3BlcmF0b3IubmUsIG9wZXJhdG9yLl9fbmVfXyksCisgICAgImd0IjogKGxhbWJkYSBhLGI6IGE+IGIsIG9wZXJhdG9yLmd0LCBvcGVyYXRvci5fX2d0X18pLAorICAgICJnZSI6IChsYW1iZGEgYSxiOiBhPj1iLCBvcGVyYXRvci5nZSwgb3BlcmF0b3IuX19nZV9fKQorfQorCitjbGFzcyBWZWN0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBjaGVja2ZhaWwoc2VsZiwgZXJyb3IsIG9wbmFtZSwgKmFyZ3MpOgorICAgICAgICBmb3Igb3AgaW4gb3BtYXBbb3BuYW1lXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCBvcCwgKmFyZ3MpCisKKyAgICBkZWYgY2hlY2tlcXVhbChzZWxmLCBvcG5hbWUsIGEsIGIsIGV4cHJlcyk6CisgICAgICAgIGZvciBvcCBpbiBvcG1hcFtvcG5hbWVdOgorICAgICAgICAgICAgcmVhbHJlcyA9IG9wKGEsIGIpCisgICAgICAgICAgICAjIGNhbid0IHVzZSBhc3NlcnRFcXVhbChyZWFscmVzLCBleHByZXMpIGhlcmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlYWxyZXMpLCBsZW4oZXhwcmVzKSkKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4ocmVhbHJlcykpOgorICAgICAgICAgICAgICAgICMgcmVzdWx0cyBhcmUgYm9vbCwgc28gd2UgY2FuIHVzZSAiaXMiIGhlcmUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVhbHJlc1tpXSBpcyBleHByZXNbaV0pCisKKyAgICBkZWYgdGVzdF9taXhlZChzZWxmKToKKyAgICAgICAgIyBjaGVjayB0aGF0IGNvbXBhcmlzb25zIGludm9sdmluZyBWZWN0b3Igb2JqZWN0cworICAgICAgICAjIHdoaWNoIHJldHVybiByaWNoIHJlc3VsdHMgKGkuZS4gVmVjdG9ycyB3aXRoIGl0ZW13aXNlCisgICAgICAgICMgY29tcGFyaXNvbiByZXN1bHRzKSB3b3JrCisgICAgICAgIGEgPSBWZWN0b3IocmFuZ2UoMikpCisgICAgICAgIGIgPSBWZWN0b3IocmFuZ2UoMykpCisgICAgICAgICMgYWxsIGNvbXBhcmlzb25zIHNob3VsZCBmYWlsIGZvciBkaWZmZXJlbnQgbGVuZ3RoCisgICAgICAgIGZvciBvcG5hbWUgaW4gb3BtYXA6CisgICAgICAgICAgICBzZWxmLmNoZWNrZmFpbChWYWx1ZUVycm9yLCBvcG5hbWUsIGEsIGIpCisKKyAgICAgICAgYSA9IHJhbmdlKDUpCisgICAgICAgIGIgPSA1ICogWzJdCisgICAgICAgICMgdHJ5IG1peGVkIGFyZ3VtZW50cyAoYnV0IG5vdCAoYSwgYikgYXMgdGhhdCB3b24ndCByZXR1cm4gYSBib29sIHZlY3RvcikKKyAgICAgICAgYXJncyA9IFsoYSwgVmVjdG9yKGIpKSwgKFZlY3RvcihhKSwgYiksIChWZWN0b3IoYSksIFZlY3RvcihiKSldCisgICAgICAgIGZvciAoYSwgYikgaW4gYXJnczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgibHQiLCBhLCBiLCBbVHJ1ZSwgIFRydWUsICBGYWxzZSwgRmFsc2UsIEZhbHNlXSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgibGUiLCBhLCBiLCBbVHJ1ZSwgIFRydWUsICBUcnVlLCAgRmFsc2UsIEZhbHNlXSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgiZXEiLCBhLCBiLCBbRmFsc2UsIEZhbHNlLCBUcnVlLCAgRmFsc2UsIEZhbHNlXSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgibmUiLCBhLCBiLCBbVHJ1ZSwgIFRydWUsICBGYWxzZSwgVHJ1ZSwgIFRydWUgXSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgiZ3QiLCBhLCBiLCBbRmFsc2UsIEZhbHNlLCBGYWxzZSwgVHJ1ZSwgIFRydWUgXSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgiZ2UiLCBhLCBiLCBbRmFsc2UsIEZhbHNlLCBUcnVlLCAgVHJ1ZSwgIFRydWUgXSkKKworICAgICAgICAgICAgZm9yIG9wcyBpbiBvcG1hcC5pdGVydmFsdWVzKCk6CisgICAgICAgICAgICAgICAgZm9yIG9wIGluIG9wczoKKyAgICAgICAgICAgICAgICAgICAgIyBjYWxscyBfX25vbnplcm9fXywgd2hpY2ggc2hvdWxkIGZhaWwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBib29sLCBvcChhLCBiKSkKKworY2xhc3MgTnVtYmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGNvbXBhcmlzb25zIGludm9sdmluZyBOdW1iZXIgb2JqZWN0cworICAgICAgICAjIGdpdmUgdGhlIHNhbWUgcmVzdWx0cyBnaXZlIGFzIGNvbXBhcmluZyB0aGUKKyAgICAgICAgIyBjb3JyZXNwb25kaW5nIGludHMKKyAgICAgICAgZm9yIGEgaW4geHJhbmdlKDMpOgorICAgICAgICAgICAgZm9yIGIgaW4geHJhbmdlKDMpOgorICAgICAgICAgICAgICAgIGZvciB0eXBlYSBpbiAoaW50LCBOdW1iZXIpOgorICAgICAgICAgICAgICAgICAgICBmb3IgdHlwZWIgaW4gKGludCwgTnVtYmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHR5cGVhPT10eXBlYj09aW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlICMgdGhlIGNvbWJpbmF0aW9uIGludCwgaW50IGlzIHVzZWxlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhID0gdHlwZWEoYSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRiID0gdHlwZWIoYikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBvcHMgaW4gb3BtYXAuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBvcCBpbiBvcHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxvdXRjb21lID0gb3AoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdG91dGNvbWUgPSBvcCh0YSwgdGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbG91dGNvbWUsIHRlc3RvdXRjb21lKQorCisgICAgZGVmIGNoZWNrdmFsdWUoc2VsZiwgb3BuYW1lLCBhLCBiLCBleHByZXMpOgorICAgICAgICBmb3IgdHlwZWEgaW4gKGludCwgTnVtYmVyKToKKyAgICAgICAgICAgIGZvciB0eXBlYiBpbiAoaW50LCBOdW1iZXIpOgorICAgICAgICAgICAgICAgIHRhID0gdHlwZWEoYSkKKyAgICAgICAgICAgICAgICB0YiA9IHR5cGViKGIpCisgICAgICAgICAgICAgICAgZm9yIG9wIGluIG9wbWFwW29wbmFtZV06CisgICAgICAgICAgICAgICAgICAgIHJlYWxyZXMgPSBvcCh0YSwgdGIpCisgICAgICAgICAgICAgICAgICAgIHJlYWxyZXMgPSBnZXRhdHRyKHJlYWxyZXMsICJ4IiwgcmVhbHJlcykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlYWxyZXMgaXMgZXhwcmVzKQorCisgICAgZGVmIHRlc3RfdmFsdWVzKHNlbGYpOgorICAgICAgICAjIGNoZWNrIGFsbCBvcGVyYXRvcnMgYW5kIGFsbCBjb21wYXJpc29uIHJlc3VsdHMKKyAgICAgICAgc2VsZi5jaGVja3ZhbHVlKCJsdCIsIDAsIDAsIEZhbHNlKQorICAgICAgICBzZWxmLmNoZWNrdmFsdWUoImxlIiwgMCwgMCwgVHJ1ZSApCisgICAgICAgIHNlbGYuY2hlY2t2YWx1ZSgiZXEiLCAwLCAwLCBUcnVlICkKKyAgICAgICAgc2VsZi5jaGVja3ZhbHVlKCJuZSIsIDAsIDAsIEZhbHNlKQorICAgICAgICBzZWxmLmNoZWNrdmFsdWUoImd0IiwgMCwgMCwgRmFsc2UpCisgICAgICAgIHNlbGYuY2hlY2t2YWx1ZSgiZ2UiLCAwLCAwLCBUcnVlICkKKworICAgICAgICBzZWxmLmNoZWNrdmFsdWUoImx0IiwgMCwgMSwgVHJ1ZSApCisgICAgICAgIHNlbGYuY2hlY2t2YWx1ZSgibGUiLCAwLCAxLCBUcnVlICkKKyAgICAgICAgc2VsZi5jaGVja3ZhbHVlKCJlcSIsIDAsIDEsIEZhbHNlKQorICAgICAgICBzZWxmLmNoZWNrdmFsdWUoIm5lIiwgMCwgMSwgVHJ1ZSApCisgICAgICAgIHNlbGYuY2hlY2t2YWx1ZSgiZ3QiLCAwLCAxLCBGYWxzZSkKKyAgICAgICAgc2VsZi5jaGVja3ZhbHVlKCJnZSIsIDAsIDEsIEZhbHNlKQorCisgICAgICAgIHNlbGYuY2hlY2t2YWx1ZSgibHQiLCAxLCAwLCBGYWxzZSkKKyAgICAgICAgc2VsZi5jaGVja3ZhbHVlKCJsZSIsIDEsIDAsIEZhbHNlKQorICAgICAgICBzZWxmLmNoZWNrdmFsdWUoImVxIiwgMSwgMCwgRmFsc2UpCisgICAgICAgIHNlbGYuY2hlY2t2YWx1ZSgibmUiLCAxLCAwLCBUcnVlICkKKyAgICAgICAgc2VsZi5jaGVja3ZhbHVlKCJndCIsIDEsIDAsIFRydWUgKQorICAgICAgICBzZWxmLmNoZWNrdmFsdWUoImdlIiwgMSwgMCwgVHJ1ZSApCisKK2NsYXNzIE1pc2NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X21pc2JlaGF2aW4oc2VsZik6CisgICAgICAgIGNsYXNzIE1pc2I6CisgICAgICAgICAgICBkZWYgX19sdF9fKHNlbGZfLCBvdGhlcik6IHJldHVybiAwCisgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGZfLCBvdGhlcik6IHJldHVybiAwCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGZfLCBvdGhlcik6IHJldHVybiAwCisgICAgICAgICAgICBkZWYgX19sZV9fKHNlbGZfLCBvdGhlcik6IHNlbGYuZmFpbCgiVGhpcyBzaG91bGRuJ3QgaGFwcGVuIikKKyAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZl8sIG90aGVyKTogc2VsZi5mYWlsKCJUaGlzIHNob3VsZG4ndCBoYXBwZW4iKQorICAgICAgICAgICAgZGVmIF9fbmVfXyhzZWxmXywgb3RoZXIpOiBzZWxmLmZhaWwoIlRoaXMgc2hvdWxkbid0IGhhcHBlbiIpCisgICAgICAgICAgICBkZWYgX19jbXBfXyhzZWxmXywgb3RoZXIpOiByYWlzZSBSdW50aW1lRXJyb3IsICJleHBlY3RlZCIKKyAgICAgICAgYSA9IE1pc2IoKQorICAgICAgICBiID0gTWlzYigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYTxiLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGE9PWIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYT5iLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGNtcCwgYSwgYikKKworICAgIGRlZiB0ZXN0X25vdChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGV4Y2VwdGlvbnMgaW4gX19ub256ZXJvX18gYXJlIHByb3Blcmx5CisgICAgICAgICMgcHJvcGFnYXRlZCBieSB0aGUgbm90IG9wZXJhdG9yCisgICAgICAgIGltcG9ydCBvcGVyYXRvcgorICAgICAgICBjbGFzcyBFeGMoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQmFkOgorICAgICAgICAgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4YworCisgICAgICAgIGRlZiBkbyhiYWQpOgorICAgICAgICAgICAgbm90IGJhZAorCisgICAgICAgIGZvciBmdW5jIGluIChkbywgb3BlcmF0b3Iubm90Xyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGZ1bmMsIEJhZCgpKQorCisgICAgZGVmIHRlc3RfcmVjdXJzaW9uKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgY29tcGFyaXNvbiBmb3IgcmVjdXJzaXZlIG9iamVjdHMgZmFpbHMgZ3JhY2VmdWxseQorICAgICAgICBmcm9tIFVzZXJMaXN0IGltcG9ydCBVc2VyTGlzdAorICAgICAgICBhID0gVXNlckxpc3QoKQorICAgICAgICBiID0gVXNlckxpc3QoKQorICAgICAgICBhLmFwcGVuZChiKQorICAgICAgICBiLmFwcGVuZChhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG9wZXJhdG9yLmVxLCBhLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG9wZXJhdG9yLm5lLCBhLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG9wZXJhdG9yLmx0LCBhLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG9wZXJhdG9yLmxlLCBhLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG9wZXJhdG9yLmd0LCBhLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG9wZXJhdG9yLmdlLCBhLCBiKQorCisgICAgICAgIGIuYXBwZW5kKDE3KQorICAgICAgICAjIEV2ZW4gcmVjdXJzaXZlIGxpc3RzIG9mIGRpZmZlcmVudCBsZW5ndGhzIGFyZSBkaWZmZXJlbnQsCisgICAgICAgICMgYnV0IHRoZXkgY2Fubm90IGJlIG9yZGVyZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAoYSA9PSBiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgIT0gYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5sdCwgYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5sZSwgYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5ndCwgYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBvcGVyYXRvci5nZSwgYSwgYikKKyAgICAgICAgYS5hcHBlbmQoMTcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IuZXEsIGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgb3BlcmF0b3IubmUsIGEsIGIpCisgICAgICAgIGEuaW5zZXJ0KDAsIDExKQorICAgICAgICBiLmluc2VydCgwLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAoYSA9PSBiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgIT0gYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPCBiKQorCitjbGFzcyBEaWN0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kaWN0cyhzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBfX2VxX18gYW5kIF9fbmVfXyB3b3JrIGZvciBkaWN0cyBldmVuIGlmIHRoZSBrZXlzIGFuZAorICAgICAgICAjIHZhbHVlcyBkb24ndCBzdXBwb3J0IGFueXRoaW5nIG90aGVyIHRoYW4gX19lcV9fIGFuZCBfX25lX18gKGFuZAorICAgICAgICAjIF9faGFzaF9fKS4gIENvbXBsZXggbnVtYmVycyBhcmUgYSBmaW5lIGV4YW1wbGUgb2YgdGhhdC4KKyAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICBpbWFnMWEgPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZSg1MCk6CisgICAgICAgICAgICBpbWFnMWFbcmFuZG9tLnJhbmRyYW5nZSgxMDApKjFqXSA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwKSoxagorICAgICAgICBpdGVtcyA9IGltYWcxYS5pdGVtcygpCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGl0ZW1zKQorICAgICAgICBpbWFnMWIgPSB7fQorICAgICAgICBmb3IgaywgdiBpbiBpdGVtczoKKyAgICAgICAgICAgIGltYWcxYltrXSA9IHYKKyAgICAgICAgaW1hZzIgPSBpbWFnMWIuY29weSgpCisgICAgICAgIGltYWcyW2tdID0gdiArIDEuMAorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW1hZzFhID09IGltYWcxYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGltYWcxYSA9PSBpbWFnMWIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbWFnMiA9PSBpbWFnMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGltYWcxYSAhPSBpbWFnMikKKyAgICAgICAgZm9yIG9wbmFtZSBpbiAoImx0IiwgImxlIiwgImd0IiwgImdlIik6CisgICAgICAgICAgICBmb3Igb3AgaW4gb3BtYXBbb3BuYW1lXToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wLCBpbWFnMWEsIGltYWcyKQorCitjbGFzcyBMaXN0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb3ZlcmFnZShzZWxmKToKKyAgICAgICAgIyBleGVyY2lzZSBhbGwgY29tcGFyaXNvbnMgZm9yIGxpc3RzCisgICAgICAgIHggPSBbNDJdCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeDx4LCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh4PD14LCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHg9PXgsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeCE9eCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeD54LCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh4Pj14LCBUcnVlKQorICAgICAgICB5ID0gWzQyLCA0Ml0KKyAgICAgICAgc2VsZi5hc3NlcnRJcyh4PHksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeDw9eSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh4PT15LCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh4IT15LCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHg+eSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeD49eSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9iYWRlbnRyeShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCBleGNlcHRpb25zIGZvciBpdGVtIGNvbXBhcmlzb24gYXJlIHByb3Blcmx5CisgICAgICAgICMgcHJvcGFnYXRlZCBpbiBsaXN0IGNvbXBhcmlzb25zCisgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCYWQ6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMKKworICAgICAgICB4ID0gW0JhZCgpXQorICAgICAgICB5ID0gW0JhZCgpXQorCisgICAgICAgIGZvciBvcCBpbiBvcG1hcFsiZXEiXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Yywgb3AsIHgsIHkpCisKKyAgICBkZWYgdGVzdF9nb29kZW50cnkoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IGV4ZXJjaXNlcyB0aGUgZmluYWwgY2FsbCB0byBQeU9iamVjdF9SaWNoQ29tcGFyZSgpCisgICAgICAgICMgaW4gT2JqZWN0cy9saXN0b2JqZWN0LmM6Omxpc3RfcmljaGNvbXBhcmUoKQorICAgICAgICBjbGFzcyBHb29kOgorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB4ID0gW0dvb2QoKV0KKyAgICAgICAgeSA9IFtHb29kKCldCisKKyAgICAgICAgZm9yIG9wIGluIG9wbWFwWyJsdCJdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhvcCh4LCB5KSwgVHJ1ZSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVmVjdG9yVGVzdCwgTnVtYmVyVGVzdCwgTWlzY1Rlc3QsIExpc3RUZXN0KQorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKCJkaWN0IGluZXF1YWxpdHkgY29tcGFyaXNvbnMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBzdXBwb3J0ZWQgaW4gMy54IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KERpY3RUZXN0KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3JsY29tcGxldGVyLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfcmxjb21wbGV0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwZTcwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3JsY29tcGxldGVyLnB5CkBAIC0wLDAgKzEsNzMgQEAKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IF9fYnVpbHRpbl9fIGFzIGJ1aWx0aW5zCitpbXBvcnQgcmxjb21wbGV0ZXIKKworY2xhc3MgQ29tcGxldGVNZShvYmplY3QpOgorICAgICIiIiBUcml2aWFsIGNsYXNzIHVzZWQgaW4gdGVzdGluZyBybGNvbXBsZXRlci5Db21wbGV0ZXIuICIiIgorICAgIHNwYW0gPSAxCisKKworY2xhc3MgVGVzdFJsY29tcGxldGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc3RkY29tcGxldGVyID0gcmxjb21wbGV0ZXIuQ29tcGxldGVyKCkKKyAgICAgICAgc2VsZi5jb21wbGV0ZXIgPSBybGNvbXBsZXRlci5Db21wbGV0ZXIoZGljdChzcGFtPWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZ2c9c3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRlTWU9Q29tcGxldGVNZSkpCisKKyAgICAgICAgIyBmb3JjZXMgc3RkY29tcGxldGVyIHRvIGJpbmQgYnVpbHRpbnMgbmFtZXNwYWNlCisgICAgICAgIHNlbGYuc3RkY29tcGxldGVyLmNvbXBsZXRlKCcnLCAwKQorCisgICAgZGVmIHRlc3RfbmFtZXNwYWNlKHNlbGYpOgorICAgICAgICBjbGFzcyBBKGRpY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCKGxpc3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnN0ZGNvbXBsZXRlci51c2VfbWFpbl9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmNvbXBsZXRlci51c2VfbWFpbl9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShybGNvbXBsZXRlci5Db21wbGV0ZXIoQSgpKS51c2VfbWFpbl9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBybGNvbXBsZXRlci5Db21wbGV0ZXIsIEIoKDEsKSkpCisKKyAgICBkZWYgdGVzdF9nbG9iYWxfbWF0Y2hlcyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHdpdGggYnVpbHRpbnMgbmFtZXNwYWNlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHNlbGYuc3RkY29tcGxldGVyLmdsb2JhbF9tYXRjaGVzKCdkaScpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbeCsnKCcgZm9yIHggaW4gZGlyKGJ1aWx0aW5zKSBpZiB4LnN0YXJ0c3dpdGgoJ2RpJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzZWxmLnN0ZGNvbXBsZXRlci5nbG9iYWxfbWF0Y2hlcygnc3QnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgW3grJygnIGZvciB4IGluIGRpcihidWlsdGlucykgaWYgeC5zdGFydHN3aXRoKCdzdCcpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0ZGNvbXBsZXRlci5nbG9iYWxfbWF0Y2hlcygnYWtha3NhamFkaGFrJyksIFtdKQorCisgICAgICAgICMgdGVzdCB3aXRoIGEgY3VzdG9taXplZCBuYW1lc3BhY2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbXBsZXRlci5nbG9iYWxfbWF0Y2hlcygnQ29tcGxldGVNJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydDb21wbGV0ZU1lKCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tcGxldGVyLmdsb2JhbF9tYXRjaGVzKCdlZycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnZWdnKCddKQorICAgICAgICAjIFhYWDogc2VlIGlzc3VlNTI1NgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tcGxldGVyLmdsb2JhbF9tYXRjaGVzKCdDb21wbGV0ZU0nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ0NvbXBsZXRlTWUoJ10pCisKKyAgICBkZWYgdGVzdF9hdHRyX21hdGNoZXMoc2VsZik6CisgICAgICAgICMgdGVzdCB3aXRoIGJ1aWx0aW5zIG5hbWVzcGFjZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RkY29tcGxldGVyLmF0dHJfbWF0Y2hlcygnc3RyLnMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3N0ci57fSgnLmZvcm1hdCh4KSBmb3IgeCBpbiBkaXIoc3RyKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB4LnN0YXJ0c3dpdGgoJ3MnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGRjb21wbGV0ZXIuYXR0cl9tYXRjaGVzKCd0dXBsZS5mb29zcGFtZWdnJyksIFtdKQorCisgICAgICAgICMgdGVzdCB3aXRoIGEgY3VzdG9taXplZCBuYW1lc3BhY2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbXBsZXRlci5hdHRyX21hdGNoZXMoJ0NvbXBsZXRlTWUuc3AnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ0NvbXBsZXRlTWUuc3BhbSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tcGxldGVyLmF0dHJfbWF0Y2hlcygnQ29tcGxldGVtZS5lZ2cnKSwgW10pCisKKyAgICAgICAgQ29tcGxldGVNZS5tZSA9IENvbXBsZXRlTWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbXBsZXRlci5hdHRyX21hdGNoZXMoJ0NvbXBsZXRlTWUubWUubWUuc3AnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ0NvbXBsZXRlTWUubWUubWUuc3BhbSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tcGxldGVyLmF0dHJfbWF0Y2hlcygnZWdnLnMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ2VnZy57fSgnLmZvcm1hdCh4KSBmb3IgeCBpbiBkaXIoc3RyKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB4LnN0YXJ0c3dpdGgoJ3MnKV0pCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0Umxjb21wbGV0ZXIpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfcm9ib3RwYXJzZXIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9yb2JvdHBhcnNlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2Q0YTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfcm9ib3RwYXJzZXIucHkKQEAgLTAsMCArMSwyNzYgQEAKK2ltcG9ydCB1bml0dGVzdCwgU3RyaW5nSU8sIHJvYm90cGFyc2VyCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSB1cmxsaWIyIGltcG9ydCB1cmxvcGVuLCBIVFRQRXJyb3IKKworY2xhc3MgUm9ib3RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGV4LCBwYXJzZXIsIHVybCwgZ29vZCwgYWdlbnQpOgorICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5fX2luaXRfXyhzZWxmKQorICAgICAgICBpZiBnb29kOgorICAgICAgICAgICAgc2VsZi5zdHIgPSAiUm9ib3RUZXN0KCVkLCBnb29kLCAlcykiICUgKGluZGV4LCB1cmwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0ciA9ICJSb2JvdFRlc3QoJWQsIGJhZCwgJXMpIiAlIChpbmRleCwgdXJsKQorICAgICAgICBzZWxmLnBhcnNlciA9IHBhcnNlcgorICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICBzZWxmLmdvb2QgPSBnb29kCisgICAgICAgIHNlbGYuYWdlbnQgPSBhZ2VudAorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi51cmwsIHR1cGxlKToKKyAgICAgICAgICAgIGFnZW50LCB1cmwgPSBzZWxmLnVybAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXJsID0gc2VsZi51cmwKKyAgICAgICAgICAgIGFnZW50ID0gc2VsZi5hZ2VudAorICAgICAgICBpZiBzZWxmLmdvb2Q6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXJzZXIuY2FuX2ZldGNoKGFnZW50LCB1cmwpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnBhcnNlci5jYW5fZmV0Y2goYWdlbnQsIHVybCkpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RyCisKK3Rlc3RzID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworZGVmIFJvYm90VGVzdChpbmRleCwgcm9ib3RzX3R4dCwgZ29vZF91cmxzLCBiYWRfdXJscywKKyAgICAgICAgICAgICAgYWdlbnQ9InRlc3Rfcm9ib3RwYXJzZXIiKToKKworICAgIGxpbmVzID0gU3RyaW5nSU8uU3RyaW5nSU8ocm9ib3RzX3R4dCkucmVhZGxpbmVzKCkKKyAgICBwYXJzZXIgPSByb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIoKQorICAgIHBhcnNlci5wYXJzZShsaW5lcykKKyAgICBmb3IgdXJsIGluIGdvb2RfdXJsczoKKyAgICAgICAgdGVzdHMuYWRkVGVzdChSb2JvdFRlc3RDYXNlKGluZGV4LCBwYXJzZXIsIHVybCwgMSwgYWdlbnQpKQorICAgIGZvciB1cmwgaW4gYmFkX3VybHM6CisgICAgICAgIHRlc3RzLmFkZFRlc3QoUm9ib3RUZXN0Q2FzZShpbmRleCwgcGFyc2VyLCB1cmwsIDAsIGFnZW50KSkKKworIyBFeGFtcGxlcyBmcm9tIGh0dHA6Ly93d3cucm9ib3RzdHh0Lm9yZy93Yy9ub3JvYm90cy5odG1sIChmZXRjaGVkIDIwMDIpCisKKyMgMS4KK2RvYyA9ICIiIgorVXNlci1hZ2VudDogKgorRGlzYWxsb3c6IC9jeWJlcndvcmxkL21hcC8gIyBUaGlzIGlzIGFuIGluZmluaXRlIHZpcnR1YWwgVVJMIHNwYWNlCitEaXNhbGxvdzogL3RtcC8gIyB0aGVzZSB3aWxsIHNvb24gZGlzYXBwZWFyCitEaXNhbGxvdzogL2Zvby5odG1sCisiIiIKKworZ29vZCA9IFsnLycsJy90ZXN0Lmh0bWwnXQorYmFkID0gWycvY3liZXJ3b3JsZC9tYXAvaW5kZXguaHRtbCcsJy90bXAveHh4JywnL2Zvby5odG1sJ10KKworUm9ib3RUZXN0KDEsIGRvYywgZ29vZCwgYmFkKQorCisjIDIuCitkb2MgPSAiIiIKKyMgcm9ib3RzLnR4dCBmb3IgaHR0cDovL3d3dy5leGFtcGxlLmNvbS8KKworVXNlci1hZ2VudDogKgorRGlzYWxsb3c6IC9jeWJlcndvcmxkL21hcC8gIyBUaGlzIGlzIGFuIGluZmluaXRlIHZpcnR1YWwgVVJMIHNwYWNlCisKKyMgQ3liZXJtYXBwZXIga25vd3Mgd2hlcmUgdG8gZ28uCitVc2VyLWFnZW50OiBjeWJlcm1hcHBlcgorRGlzYWxsb3c6CisKKyIiIgorCitnb29kID0gWycvJywnL3Rlc3QuaHRtbCcsKCdjeWJlcm1hcHBlcicsJy9jeWJlcndvcmxkL21hcC9pbmRleC5odG1sJyldCitiYWQgPSBbJy9jeWJlcndvcmxkL21hcC9pbmRleC5odG1sJ10KKworUm9ib3RUZXN0KDIsIGRvYywgZ29vZCwgYmFkKQorCisjIDMuCitkb2MgPSAiIiIKKyMgZ28gYXdheQorVXNlci1hZ2VudDogKgorRGlzYWxsb3c6IC8KKyIiIgorCitnb29kID0gW10KK2JhZCA9IFsnL2N5YmVyd29ybGQvbWFwL2luZGV4Lmh0bWwnLCcvJywnL3RtcC8nXQorCitSb2JvdFRlc3QoMywgZG9jLCBnb29kLCBiYWQpCisKKyMgRXhhbXBsZXMgZnJvbSBodHRwOi8vd3d3LnJvYm90c3R4dC5vcmcvd2Mvbm9yb2JvdHMtcmZjLmh0bWwgKGZldGNoZWQgMjAwMikKKworIyA0LgorZG9jID0gIiIiCitVc2VyLWFnZW50OiBmaWd0cmVlCitEaXNhbGxvdzogL3RtcAorRGlzYWxsb3c6IC9hJTNjZC5odG1sCitEaXNhbGxvdzogL2ElMmZiLmh0bWwKK0Rpc2FsbG93OiAvJTdlam9lL2luZGV4Lmh0bWwKKyIiIgorCitnb29kID0gW10gIyBYRkFJTCAnL2EvYi5odG1sJworYmFkID0gWycvdG1wJywnL3RtcC5odG1sJywnL3RtcC9hLmh0bWwnLAorICAgICAgICcvYSUzY2QuaHRtbCcsJy9hJTNDZC5odG1sJywnL2ElMmZiLmh0bWwnLAorICAgICAgICcvfmpvZS9pbmRleC5odG1sJworICAgICAgIF0KKworUm9ib3RUZXN0KDQsIGRvYywgZ29vZCwgYmFkLCAnZmlndHJlZScpCitSb2JvdFRlc3QoNSwgZG9jLCBnb29kLCBiYWQsICdGaWdUcmVlIFJvYm90IGxpYnd3dy1wZXJsLzUuMDQnKQorCisjIDYuCitkb2MgPSAiIiIKK1VzZXItYWdlbnQ6ICoKK0Rpc2FsbG93OiAvdG1wLworRGlzYWxsb3c6IC9hJTNDZC5odG1sCitEaXNhbGxvdzogL2EvYi5odG1sCitEaXNhbGxvdzogLyU3ZWpvZS9pbmRleC5odG1sCisiIiIKKworZ29vZCA9IFsnL3RtcCcsXSAjIFhGQUlMOiAnL2ElMmZiLmh0bWwnCitiYWQgPSBbJy90bXAvJywnL3RtcC9hLmh0bWwnLAorICAgICAgICcvYSUzY2QuaHRtbCcsJy9hJTNDZC5odG1sJywiL2EvYi5odG1sIiwKKyAgICAgICAnLyU3RWpvZS9pbmRleC5odG1sJ10KKworUm9ib3RUZXN0KDYsIGRvYywgZ29vZCwgYmFkKQorCisjIEZyb20gYnVnIHJlcG9ydCAjNTIzMDQxCisKKyMgNy4KK2RvYyA9ICIiIgorVXNlci1BZ2VudDogKgorRGlzYWxsb3c6IC8uCisiIiIKKworZ29vZCA9IFsnL2Zvby5odG1sJ10KK2JhZCA9IFtdICMgQnVnIHJlcG9ydCBzYXlzICIvIiBzaG91bGQgYmUgZGVuaWVkLCBidXQgdGhhdCBpcyBub3QgaW4gdGhlIFJGQworCitSb2JvdFRlc3QoNywgZG9jLCBnb29kLCBiYWQpCisKKyMgRnJvbSBHb29nbGU6IGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zdXBwb3J0L3dlYm1hc3RlcnMvYmluL2Fuc3dlci5weT9obD1lbiZhbnN3ZXI9NDAzNjQKKworIyA4LgorZG9jID0gIiIiCitVc2VyLWFnZW50OiBHb29nbGVib3QKK0FsbG93OiAvZm9sZGVyMS9teWZpbGUuaHRtbAorRGlzYWxsb3c6IC9mb2xkZXIxLworIiIiCisKK2dvb2QgPSBbJy9mb2xkZXIxL215ZmlsZS5odG1sJ10KK2JhZCA9IFsnL2ZvbGRlcjEvYW5vdGhlcmZpbGUuaHRtbCddCisKK1JvYm90VGVzdCg4LCBkb2MsIGdvb2QsIGJhZCwgYWdlbnQ9Ikdvb2dsZWJvdCIpCisKKyMgOS4gIFRoaXMgZmlsZSBpcyBpbmNvcnJlY3QgYmVjYXVzZSAiR29vZ2xlYm90IiBpcyBhIHN1YnN0cmluZyBvZgorIyAgICAgIkdvb2dsZWJvdC1Nb2JpbGUiLCBzbyB0ZXN0IDEwIHdvcmtzIGp1c3QgbGlrZSB0ZXN0IDkuCitkb2MgPSAiIiIKK1VzZXItYWdlbnQ6IEdvb2dsZWJvdAorRGlzYWxsb3c6IC8KKworVXNlci1hZ2VudDogR29vZ2xlYm90LU1vYmlsZQorQWxsb3c6IC8KKyIiIgorCitnb29kID0gW10KK2JhZCA9IFsnL3NvbWV0aGluZy5qcGcnXQorCitSb2JvdFRlc3QoOSwgZG9jLCBnb29kLCBiYWQsIGFnZW50PSJHb29nbGVib3QiKQorCitnb29kID0gW10KK2JhZCA9IFsnL3NvbWV0aGluZy5qcGcnXQorCitSb2JvdFRlc3QoMTAsIGRvYywgZ29vZCwgYmFkLCBhZ2VudD0iR29vZ2xlYm90LU1vYmlsZSIpCisKKyMgMTEuICBHZXQgdGhlIG9yZGVyIGNvcnJlY3QuCitkb2MgPSAiIiIKK1VzZXItYWdlbnQ6IEdvb2dsZWJvdC1Nb2JpbGUKK0FsbG93OiAvCisKK1VzZXItYWdlbnQ6IEdvb2dsZWJvdAorRGlzYWxsb3c6IC8KKyIiIgorCitnb29kID0gW10KK2JhZCA9IFsnL3NvbWV0aGluZy5qcGcnXQorCitSb2JvdFRlc3QoMTEsIGRvYywgZ29vZCwgYmFkLCBhZ2VudD0iR29vZ2xlYm90IikKKworZ29vZCA9IFsnL3NvbWV0aGluZy5qcGcnXQorYmFkID0gW10KKworUm9ib3RUZXN0KDEyLCBkb2MsIGdvb2QsIGJhZCwgYWdlbnQ9Ikdvb2dsZWJvdC1Nb2JpbGUiKQorCisKKyMgMTMuICBHb29nbGUgYWxzbyBnb3QgdGhlIG9yZGVyIHdyb25nIGluICM4LiAgWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUKKyMgICAgICBVUkxzIGZyb20gbW9yZSBzcGVjaWZpYyB0byBtb3JlIGdlbmVyYWwuCitkb2MgPSAiIiIKK1VzZXItYWdlbnQ6IEdvb2dsZWJvdAorQWxsb3c6IC9mb2xkZXIxL215ZmlsZS5odG1sCitEaXNhbGxvdzogL2ZvbGRlcjEvCisiIiIKKworZ29vZCA9IFsnL2ZvbGRlcjEvbXlmaWxlLmh0bWwnXQorYmFkID0gWycvZm9sZGVyMS9hbm90aGVyZmlsZS5odG1sJ10KKworUm9ib3RUZXN0KDEzLCBkb2MsIGdvb2QsIGJhZCwgYWdlbnQ9Imdvb2dsZWJvdCIpCisKKworIyAxNC4gRm9yIGlzc3VlICM2MzI1IChxdWVyeSBzdHJpbmcgc3VwcG9ydCkKK2RvYyA9ICIiIgorVXNlci1hZ2VudDogKgorRGlzYWxsb3c6IC9zb21lL3BhdGg/bmFtZT12YWx1ZQorIiIiCisKK2dvb2QgPSBbJy9zb21lL3BhdGgnXQorYmFkID0gWycvc29tZS9wYXRoP25hbWU9dmFsdWUnXQorCitSb2JvdFRlc3QoMTQsIGRvYywgZ29vZCwgYmFkKQorCisjIDE1LiBGb3IgaXNzdWUgIzQxMDggKG9iZXkgZmlyc3QgKiBlbnRyeSkKK2RvYyA9ICIiIgorVXNlci1hZ2VudDogKgorRGlzYWxsb3c6IC9zb21lL3BhdGgKKworVXNlci1hZ2VudDogKgorRGlzYWxsb3c6IC9hbm90aGVyL3BhdGgKKyIiIgorCitnb29kID0gWycvYW5vdGhlci9wYXRoJ10KK2JhZCA9IFsnL3NvbWUvcGF0aCddCisKK1JvYm90VGVzdCgxNSwgZG9jLCBnb29kLCBiYWQpCisKKworY2xhc3MgTmV0d29ya1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0UGFzc3dvcmRQcm90ZWN0ZWRTaXRlKHNlbGYpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoJ211ZWJsZXNtb3JhbGVkYS5jb20nKToKKyAgICAgICAgICAgIHVybCA9ICdodHRwOi8vbXVlYmxlc21vcmFsZWRhLmNvbScKKyAgICAgICAgICAgIHJvYm90c191cmwgPSB1cmwgKyAiL3JvYm90cy50eHQiCisgICAgICAgICAgICAjIEZpcnN0IGNoZWNrIHRoZSBVUkwgaXMgdXNhYmxlIGZvciBvdXIgcHVycG9zZXMsIHNpbmNlIHRoZQorICAgICAgICAgICAgIyB0ZXN0IHNpdGUgaXMgYSBiaXQgZmxha3kuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdXJsb3Blbihyb2JvdHNfdXJsKQorICAgICAgICAgICAgZXhjZXB0IEhUVFBFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuY29kZSBub3QgaW4gezQwMSwgNDAzfToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICIlciBzaG91bGQgcmV0dXJuIGEgNDAxIG9yIDQwMyBIVFRQIGVycm9yLCBub3QgJXIiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChyb2JvdHNfdXJsLCBlLmNvZGUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KAorICAgICAgICAgICAgICAgICAgICAiJXIgc2hvdWxkIHJldHVybiBhIDQwMSBvciA0MDMgSFRUUCBlcnJvciwgbm90IHN1Y2NlZWQiCisgICAgICAgICAgICAgICAgICAgICUgKHJvYm90c191cmwpKQorICAgICAgICAgICAgcGFyc2VyID0gcm9ib3RwYXJzZXIuUm9ib3RGaWxlUGFyc2VyKCkKKyAgICAgICAgICAgIHBhcnNlci5zZXRfdXJsKHVybCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXJzZXIucmVhZCgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCclcyBpcyB1bmF2YWlsYWJsZScgJSB1cmwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5jYW5fZmV0Y2goIioiLCByb2JvdHNfdXJsKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdFB5dGhvbk9yZyhzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCd3d3cucHl0aG9uLm9yZycpOgorICAgICAgICAgICAgcGFyc2VyID0gcm9ib3RwYXJzZXIuUm9ib3RGaWxlUGFyc2VyKAorICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvcm9ib3RzLnR4dCIpCisgICAgICAgICAgICBwYXJzZXIucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgcGFyc2VyLmNhbl9mZXRjaCgiKiIsICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvcm9ib3RzLnR4dCIpKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KHRlc3RzKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTmV0d29ya1Rlc3RDYXNlKQorCitpZiBfX25hbWVfXz09J19fbWFpbl9fJzoKKyAgICB0ZXN0X3N1cHBvcnQudmVyYm9zZSA9IDEKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcnVucHkucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9ydW5weS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njg1OGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfcnVucHkucHkKQEAgLTAsMCArMSw0MDUgQEAKKyMgVGVzdCB0aGUgcnVucHkgbW9kdWxlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHRlbXBmaWxlCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fdW5pdHRlc3QsIGZvcmdldAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0ICh0ZW1wX2RpciwgbWFrZV9zY3JpcHQsIGNvbXBpbGVfc2NyaXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX3BrZywgbWFrZV96aXBfc2NyaXB0LCBtYWtlX3ppcF9wa2cpCisKKworZnJvbSBydW5weSBpbXBvcnQgX3J1bl9jb2RlLCBfcnVuX21vZHVsZV9jb2RlLCBydW5fbW9kdWxlLCBydW5fcGF0aAorIyBOb3RlOiBUaGlzIG1vZHVsZSBjYW4ndCBzYWZlbHkgdGVzdCBfcnVuX21vZHVsZV9hc19tYWluIGFzIGl0CisjIHJ1bnMgaXRzIHRlc3RzIGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHdoaWNoIHdvdWxkIG1lc3Mgd2l0aCB0aGUKKyMgcmVhbCBfX21haW5fXyBtb2R1bGUgKHVzdWFsbHkgdGVzdC5yZWdydGVzdCkKKyMgU2VlIHRlc3RfY21kX2xpbmVfc2NyaXB0IGZvciBhIHRlc3QgdGhhdCBleGVjdXRlcyB0aGF0IGNvZGUgcGF0aAorCisjIFNldCB1cCB0aGUgdGVzdCBjb2RlIGFuZCBleHBlY3RlZCByZXN1bHRzCisKK2NsYXNzIFJ1bk1vZHVsZUNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJVbml0IHRlc3RzIGZvciBydW5weS5fcnVuX2NvZGUgYW5kIHJ1bnB5Ll9ydW5fbW9kdWxlX2NvZGUiIiIKKworICAgIGV4cGVjdGVkX3Jlc3VsdCA9IFsiVG9wIGxldmVsIGFzc2lnbm1lbnQiLCAiTG93ZXIgbGV2ZWwgcmVmZXJlbmNlIl0KKyAgICB0ZXN0X3NvdXJjZSA9ICgKKyAgICAgICAgIiMgQ2hlY2sgYmFzaWMgY29kZSBleGVjdXRpb25cbiIKKyAgICAgICAgInJlc3VsdCA9IFsnVG9wIGxldmVsIGFzc2lnbm1lbnQnXVxuIgorICAgICAgICAiZGVmIGYoKTpcbiIKKyAgICAgICAgIiAgICByZXN1bHQuYXBwZW5kKCdMb3dlciBsZXZlbCByZWZlcmVuY2UnKVxuIgorICAgICAgICAiZigpXG4iCisgICAgICAgICIjIENoZWNrIHRoZSBzeXMgbW9kdWxlXG4iCisgICAgICAgICJpbXBvcnQgc3lzXG4iCisgICAgICAgICJydW5fYXJndjAgPSBzeXMuYXJndlswXVxuIgorICAgICAgICAicnVuX25hbWVfaW5fc3lzX21vZHVsZXMgPSBfX25hbWVfXyBpbiBzeXMubW9kdWxlc1xuIgorICAgICAgICAiaWYgcnVuX25hbWVfaW5fc3lzX21vZHVsZXM6XG4iCisgICAgICAgICIgICBtb2R1bGVfaW5fc3lzX21vZHVsZXMgPSBnbG9iYWxzKCkgaXMgc3lzLm1vZHVsZXNbX19uYW1lX19dLl9fZGljdF9fXG4iCisgICAgICAgICIjIENoZWNrIG5lc3RlZCBvcGVyYXRpb25cbiIKKyAgICAgICAgImltcG9ydCBydW5weVxuIgorICAgICAgICAibmVzdGVkID0gcnVucHkuX3J1bl9tb2R1bGVfY29kZSgneD0xXFxuJywgbW9kX25hbWU9JzxydW4+JylcbiIKKyAgICApCisKKyAgICBkZWYgdGVzdF9ydW5fY29kZShzZWxmKToKKyAgICAgICAgc2F2ZWRfYXJndjAgPSBzeXMuYXJndlswXQorICAgICAgICBkID0gX3J1bl9jb2RlKHNlbGYudGVzdF9zb3VyY2UsIHt9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbInJlc3VsdCJdLCBzZWxmLmV4cGVjdGVkX3Jlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkWyJfX25hbWVfXyJdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGRbIl9fZmlsZV9fIl0sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZFsiX19sb2FkZXJfXyJdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGRbIl9fcGFja2FnZV9fIl0sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZFsicnVuX2FyZ3YwIl0sIHNhdmVkX2FyZ3YwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJydW5fbmFtZSIsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLmFyZ3ZbMF0sIHNhdmVkX2FyZ3YwKQorCisgICAgZGVmIHRlc3RfcnVuX21vZHVsZV9jb2RlKHNlbGYpOgorICAgICAgICBpbml0aWFsID0gb2JqZWN0KCkKKyAgICAgICAgbmFtZSA9ICI8Tm9uc2Vuc2U+IgorICAgICAgICBmaWxlID0gIlNvbWUgb3RoZXIgbm9uc2Vuc2UiCisgICAgICAgIGxvYWRlciA9ICJOb3cgeW91J3JlIGp1c3QgYmVpbmcgc2lsbHkiCisgICAgICAgIHBhY2thZ2UgPSAnJyAjIFRyZWF0IGFzIGEgdG9wIGxldmVsIG1vZHVsZQorICAgICAgICBkMSA9IGRpY3QoaW5pdGlhbD1pbml0aWFsKQorICAgICAgICBzYXZlZF9hcmd2MCA9IHN5cy5hcmd2WzBdCisgICAgICAgIGQyID0gX3J1bl9tb2R1bGVfY29kZShzZWxmLnRlc3Rfc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oInJlc3VsdCIsIGQxKQorICAgICAgICBzZWxmLmFzc2VydElzKGQyWyJpbml0aWFsIl0sIGluaXRpYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDJbInJlc3VsdCJdLCBzZWxmLmV4cGVjdGVkX3Jlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMlsibmVzdGVkIl1bIngiXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkMlsiX19uYW1lX18iXSwgbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQyWyJydW5fbmFtZV9pbl9zeXNfbW9kdWxlcyJdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZDJbIm1vZHVsZV9pbl9zeXNfbW9kdWxlcyJdKQorICAgICAgICBzZWxmLmFzc2VydElzKGQyWyJfX2ZpbGVfXyJdLCBmaWxlKQorICAgICAgICBzZWxmLmFzc2VydElzKGQyWyJydW5fYXJndjAiXSwgZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkMlsiX19sb2FkZXJfXyJdLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZDJbIl9fcGFja2FnZV9fIl0sIHBhY2thZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLmFyZ3ZbMF0sIHNhdmVkX2FyZ3YwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIHN5cy5tb2R1bGVzKQorCisKK2NsYXNzIFJ1bk1vZHVsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlVuaXQgdGVzdHMgZm9yIHJ1bnB5LnJ1bl9tb2R1bGUiIiIKKworICAgIGRlZiBleHBlY3RfaW1wb3J0X2Vycm9yKHNlbGYsIG1vZF9uYW1lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcnVuX21vZHVsZShtb2RfbmFtZSkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBpbXBvcnQgZXJyb3IgZm9yICIgKyBtb2RfbmFtZSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfbmFtZXMoc2VsZik6CisgICAgICAgICMgQnVpbHRpbiBtb2R1bGUKKyAgICAgICAgc2VsZi5leHBlY3RfaW1wb3J0X2Vycm9yKCJzeXMiKQorICAgICAgICAjIE5vbi1leGlzdGVudCBtb2R1bGVzCisgICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigic3lzLmltcC5lcmljIikKKyAgICAgICAgc2VsZi5leHBlY3RfaW1wb3J0X2Vycm9yKCJvcy5wYXRoLmhhbGYiKQorICAgICAgICBzZWxmLmV4cGVjdF9pbXBvcnRfZXJyb3IoImEuYmVlIikKKyAgICAgICAgc2VsZi5leHBlY3RfaW1wb3J0X2Vycm9yKCIuaG93YXJkIikKKyAgICAgICAgc2VsZi5leHBlY3RfaW1wb3J0X2Vycm9yKCIuLmVhdGVuIikKKyAgICAgICAgIyBQYWNrYWdlIHdpdGhvdXQgX19tYWluX18ucHkKKyAgICAgICAgc2VsZi5leHBlY3RfaW1wb3J0X2Vycm9yKCJtdWx0aXByb2Nlc3NpbmciKQorCisgICAgZGVmIHRlc3RfbGlicmFyeV9tb2R1bGUoc2VsZik6CisgICAgICAgIHJ1bl9tb2R1bGUoInJ1bnB5IikKKworICAgIGRlZiBfYWRkX3BrZ19kaXIoc2VsZiwgcGtnX2Rpcik6CisgICAgICAgIG9zLm1rZGlyKHBrZ19kaXIpCisgICAgICAgIHBrZ19mbmFtZSA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAiX19pbml0X18iK29zLmV4dHNlcCsicHkiKQorICAgICAgICBwa2dfZmlsZSA9IG9wZW4ocGtnX2ZuYW1lLCAidyIpCisgICAgICAgIHBrZ19maWxlLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIHBrZ19mbmFtZQorCisgICAgZGVmIF9tYWtlX3BrZyhzZWxmLCBzb3VyY2UsIGRlcHRoLCBtb2RfYmFzZT0icnVucHlfdGVzdCIpOgorICAgICAgICBwa2dfbmFtZSA9ICJfX3J1bnB5X3BrZ19fIgorICAgICAgICB0ZXN0X2ZuYW1lID0gbW9kX2Jhc2Urb3MuZXh0c2VwKyJweSIKKyAgICAgICAgcGtnX2RpciA9IHN1Yl9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIiAgUGFja2FnZSB0cmVlIGluOiIsIHN1Yl9kaXIKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHBrZ19kaXIpCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICIgIFVwZGF0ZWQgc3lzLnBhdGg6Iiwgc3lzLnBhdGhbMF0KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoZGVwdGgpOgorICAgICAgICAgICAgc3ViX2RpciA9IG9zLnBhdGguam9pbihzdWJfZGlyLCBwa2dfbmFtZSkKKyAgICAgICAgICAgIHBrZ19mbmFtZSA9IHNlbGYuX2FkZF9wa2dfZGlyKHN1Yl9kaXIpCisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiICBOZXh0IGxldmVsIGluOiIsIHN1Yl9kaXIKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICIgIENyZWF0ZWQ6IiwgcGtnX2ZuYW1lCisgICAgICAgIG1vZF9mbmFtZSA9IG9zLnBhdGguam9pbihzdWJfZGlyLCB0ZXN0X2ZuYW1lKQorICAgICAgICBtb2RfZmlsZSA9IG9wZW4obW9kX2ZuYW1lLCAidyIpCisgICAgICAgIG1vZF9maWxlLndyaXRlKHNvdXJjZSkKKyAgICAgICAgbW9kX2ZpbGUuY2xvc2UoKQorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiICBDcmVhdGVkOiIsIG1vZF9mbmFtZQorICAgICAgICBtb2RfbmFtZSA9IChwa2dfbmFtZSsiLiIpKmRlcHRoICsgbW9kX2Jhc2UKKyAgICAgICAgcmV0dXJuIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUKKworICAgIGRlZiBfZGVsX3BrZyhzZWxmLCB0b3AsIGRlcHRoLCBtb2RfbmFtZSk6CisgICAgICAgIGZvciBlbnRyeSBpbiBsaXN0KHN5cy5tb2R1bGVzKToKKyAgICAgICAgICAgIGlmIGVudHJ5LnN0YXJ0c3dpdGgoIl9fcnVucHlfcGtnX18iKToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbZW50cnldCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICIgIFJlbW92ZWQgc3lzLm1vZHVsZXMgZW50cmllcyIKKyAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICIgIFJlbW92ZWQgc3lzLnBhdGggZW50cnkiCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHRvcCwgdG9wZG93bj1GYWxzZSk6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGV4OgorICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCBleCAjIFBlcnNpc3Qgd2l0aCBjbGVhbmluZyB1cAorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZGlyczoKKyAgICAgICAgICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihyb290LCBuYW1lKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZnVsbG5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGV4OgorICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCBleCAjIFBlcnNpc3Qgd2l0aCBjbGVhbmluZyB1cAorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5ybWRpcih0b3ApCisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiICBSZW1vdmVkIHBhY2thZ2UgdHJlZSIKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGV4OgorICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgZXggIyBQZXJzaXN0IHdpdGggY2xlYW5pbmcgdXAKKworICAgIGRlZiBfY2hlY2tfbW9kdWxlKHNlbGYsIGRlcHRoKToKKyAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSA9ICgKKyAgICAgICAgICAgICAgIHNlbGYuX21ha2VfcGtnKCJ4PTFcbiIsIGRlcHRoKSkKKyAgICAgICAgZm9yZ2V0KG1vZF9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiUnVubmluZyBmcm9tIHNvdXJjZToiLCBtb2RfbmFtZQorICAgICAgICAgICAgZDEgPSBydW5fbW9kdWxlKG1vZF9uYW1lKSAjIFJlYWQgZnJvbSBzb3VyY2UKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIngiLCBkMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMVsieCJdID09IDEpCisgICAgICAgICAgICBkZWwgZDEgIyBFbnN1cmUgX19sb2FkZXJfXyBlbnRyeSBkb2Vzbid0IGtlZXAgZmlsZSBvcGVuCisgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZF9uYW1lKQorICAgICAgICAgICAgb3MucmVtb3ZlKG1vZF9mbmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCBzeXMuZG9udF93cml0ZV9ieXRlY29kZToKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiUnVubmluZyBmcm9tIGNvbXBpbGVkOiIsIG1vZF9uYW1lCisgICAgICAgICAgICAgICAgZDIgPSBydW5fbW9kdWxlKG1vZF9uYW1lKSAjIFJlYWQgZnJvbSBieXRlY29kZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIngiLCBkMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZDJbIngiXSA9PSAxKQorICAgICAgICAgICAgICAgIGRlbCBkMiAjIEVuc3VyZSBfX2xvYWRlcl9fIGVudHJ5IGRvZXNuJ3Qga2VlcCBmaWxlIG9wZW4KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2RlbF9wa2cocGtnX2RpciwgZGVwdGgsIG1vZF9uYW1lKQorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiTW9kdWxlIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSIKKworICAgIGRlZiBfY2hlY2tfcGFja2FnZShzZWxmLCBkZXB0aCk6CisgICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUgPSAoCisgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZygieD0xXG4iLCBkZXB0aCwgIl9fbWFpbl9fIikpCisgICAgICAgIHBrZ19uYW1lLCBfLCBfID0gbW9kX25hbWUucnBhcnRpdGlvbigiLiIpCisgICAgICAgIGZvcmdldChtb2RfbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlJ1bm5pbmcgZnJvbSBzb3VyY2U6IiwgcGtnX25hbWUKKyAgICAgICAgICAgIGQxID0gcnVuX21vZHVsZShwa2dfbmFtZSkgIyBSZWFkIGZyb20gc291cmNlCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJ4IiwgZDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZDFbIngiXSA9PSAxKQorICAgICAgICAgICAgZGVsIGQxICMgRW5zdXJlIF9fbG9hZGVyX18gZW50cnkgZG9lc24ndCBrZWVwIGZpbGUgb3BlbgorICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RfbmFtZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShtb2RfZm5hbWUpCisgICAgICAgICAgICBpZiBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGU6CisgICAgICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlJ1bm5pbmcgZnJvbSBjb21waWxlZDoiLCBwa2dfbmFtZQorICAgICAgICAgICAgICAgIGQyID0gcnVuX21vZHVsZShwa2dfbmFtZSkgIyBSZWFkIGZyb20gYnl0ZWNvZGUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJ4IiwgZDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQyWyJ4Il0gPT0gMSkKKyAgICAgICAgICAgICAgICBkZWwgZDIgIyBFbnN1cmUgX19sb2FkZXJfXyBlbnRyeSBkb2Vzbid0IGtlZXAgZmlsZSBvcGVuCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9kZWxfcGtnKHBrZ19kaXIsIGRlcHRoLCBwa2dfbmFtZSkKKyAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlBhY2thZ2UgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5IgorCisgICAgZGVmIF9hZGRfcmVsYXRpdmVfbW9kdWxlcyhzZWxmLCBiYXNlX2Rpciwgc291cmNlLCBkZXB0aCk6CisgICAgICAgIGlmIGRlcHRoIDw9IDE6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJSZWxhdGl2ZSBtb2R1bGUgdGVzdCBuZWVkcyBkZXB0aCA+IDEiKQorICAgICAgICBwa2dfbmFtZSA9ICJfX3J1bnB5X3BrZ19fIgorICAgICAgICBtb2R1bGVfZGlyID0gYmFzZV9kaXIKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoZGVwdGgpOgorICAgICAgICAgICAgcGFyZW50X2RpciA9IG1vZHVsZV9kaXIKKyAgICAgICAgICAgIG1vZHVsZV9kaXIgPSBvcy5wYXRoLmpvaW4obW9kdWxlX2RpciwgcGtnX25hbWUpCisgICAgICAgICMgQWRkIHNpYmxpbmcgbW9kdWxlCisgICAgICAgIHNpYmxpbmdfZm5hbWUgPSBvcy5wYXRoLmpvaW4obW9kdWxlX2RpciwgInNpYmxpbmciK29zLmV4dHNlcCsicHkiKQorICAgICAgICBzaWJsaW5nX2ZpbGUgPSBvcGVuKHNpYmxpbmdfZm5hbWUsICJ3IikKKyAgICAgICAgc2libGluZ19maWxlLmNsb3NlKCkKKyAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIiAgQWRkZWQgc2libGluZyBtb2R1bGU6Iiwgc2libGluZ19mbmFtZQorICAgICAgICAjIEFkZCBuZXBoZXcgbW9kdWxlCisgICAgICAgIHVuY2xlX2RpciA9IG9zLnBhdGguam9pbihwYXJlbnRfZGlyLCAidW5jbGUiKQorICAgICAgICBzZWxmLl9hZGRfcGtnX2Rpcih1bmNsZV9kaXIpCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICIgIEFkZGVkIHVuY2xlIHBhY2thZ2U6IiwgdW5jbGVfZGlyCisgICAgICAgIGNvdXNpbl9kaXIgPSBvcy5wYXRoLmpvaW4odW5jbGVfZGlyLCAiY291c2luIikKKyAgICAgICAgc2VsZi5fYWRkX3BrZ19kaXIoY291c2luX2RpcikKKyAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIiAgQWRkZWQgY291c2luIHBhY2thZ2U6IiwgY291c2luX2RpcgorICAgICAgICBuZXBoZXdfZm5hbWUgPSBvcy5wYXRoLmpvaW4oY291c2luX2RpciwgIm5lcGhldyIrb3MuZXh0c2VwKyJweSIpCisgICAgICAgIG5lcGhld19maWxlID0gb3BlbihuZXBoZXdfZm5hbWUsICJ3IikKKyAgICAgICAgbmVwaGV3X2ZpbGUuY2xvc2UoKQorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiICBBZGRlZCBuZXBoZXcgbW9kdWxlOiIsIG5lcGhld19mbmFtZQorCisgICAgZGVmIF9jaGVja19yZWxhdGl2ZV9pbXBvcnRzKHNlbGYsIGRlcHRoLCBydW5fbmFtZT1Ob25lKToKKyAgICAgICAgY29udGVudHMgPSByIiIiXAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKK2Zyb20gLiBpbXBvcnQgc2libGluZworZnJvbSAuLnVuY2xlLmNvdXNpbiBpbXBvcnQgbmVwaGV3CisiIiIKKyAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSA9ICgKKyAgICAgICAgICAgICAgIHNlbGYuX21ha2VfcGtnKGNvbnRlbnRzLCBkZXB0aCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9yZWxhdGl2ZV9tb2R1bGVzKHBrZ19kaXIsIGNvbnRlbnRzLCBkZXB0aCkKKyAgICAgICAgICAgIHBrZ19uYW1lID0gbW9kX25hbWUucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiUnVubmluZyBmcm9tIHNvdXJjZToiLCBtb2RfbmFtZQorICAgICAgICAgICAgZDEgPSBydW5fbW9kdWxlKG1vZF9uYW1lLCBydW5fbmFtZT1ydW5fbmFtZSkgIyBSZWFkIGZyb20gc291cmNlCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJfX3BhY2thZ2VfXyIsIGQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxWyJfX3BhY2thZ2VfXyJdID09IHBrZ19uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigic2libGluZyIsIGQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigibmVwaGV3IiwgZDEpCisgICAgICAgICAgICBkZWwgZDEgIyBFbnN1cmUgX19sb2FkZXJfXyBlbnRyeSBkb2Vzbid0IGtlZXAgZmlsZSBvcGVuCisgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZF9uYW1lKQorICAgICAgICAgICAgb3MucmVtb3ZlKG1vZF9mbmFtZSkKKyAgICAgICAgICAgIGlmIG5vdCBzeXMuZG9udF93cml0ZV9ieXRlY29kZToKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiUnVubmluZyBmcm9tIGNvbXBpbGVkOiIsIG1vZF9uYW1lCisgICAgICAgICAgICAgICAgZDIgPSBydW5fbW9kdWxlKG1vZF9uYW1lLCBydW5fbmFtZT1ydW5fbmFtZSkgIyBSZWFkIGZyb20gYnl0ZWNvZGUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJfX3BhY2thZ2VfXyIsIGQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMlsiX19wYWNrYWdlX18iXSA9PSBwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJzaWJsaW5nIiwgZDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigibmVwaGV3IiwgZDIpCisgICAgICAgICAgICAgICAgZGVsIGQyICMgRW5zdXJlIF9fbG9hZGVyX18gZW50cnkgZG9lc24ndCBrZWVwIGZpbGUgb3BlbgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fZGVsX3BrZyhwa2dfZGlyLCBkZXB0aCwgbW9kX25hbWUpCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJNb2R1bGUgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5IgorCisgICAgZGVmIHRlc3RfcnVuX21vZHVsZShzZWxmKToKKyAgICAgICAgZm9yIGRlcHRoIGluIHJhbmdlKDQpOgorICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlRlc3RpbmcgcGFja2FnZSBkZXB0aDoiLCBkZXB0aAorICAgICAgICAgICAgc2VsZi5fY2hlY2tfbW9kdWxlKGRlcHRoKQorCisgICAgZGVmIHRlc3RfcnVuX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGZvciBkZXB0aCBpbiByYW5nZSgxLCA0KToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3BhY2thZ2UoZGVwdGgpCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9yZWxhdGl2ZV9pbXBvcnQoc2VsZik6CisgICAgICAgIGZvciBkZXB0aCBpbiByYW5nZSgyLCA1KToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJUZXN0aW5nIHJlbGF0aXZlIGltcG9ydHMgYXQgZGVwdGg6IiwgZGVwdGgKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlbGF0aXZlX2ltcG9ydHMoZGVwdGgpCisKKyAgICBkZWYgdGVzdF9tYWluX3JlbGF0aXZlX2ltcG9ydChzZWxmKToKKyAgICAgICAgZm9yIGRlcHRoIGluIHJhbmdlKDIsIDUpOgorICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQgIlRlc3RpbmcgbWFpbiByZWxhdGl2ZSBpbXBvcnRzIGF0IGRlcHRoOiIsIGRlcHRoCisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWxhdGl2ZV9pbXBvcnRzKGRlcHRoLCAiX19tYWluX18iKQorCisKK2NsYXNzIFJ1blBhdGhUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJVbml0IHRlc3RzIGZvciBydW5weS5ydW5fcGF0aCIiIgorICAgICMgQmFzZWQgb24gY29ycmVzcG9uZGluZyB0ZXN0cyBpbiB0ZXN0X2NtZF9saW5lX3NjcmlwdAorCisgICAgdGVzdF9zb3VyY2UgPSAiIiJcCisjIFNjcmlwdCBtYXkgYmUgcnVuIHdpdGggb3B0aW1pc2F0aW9uIGVuYWJsZWQsIHNvIGRvbid0IHJlbHkgb24gYXNzZXJ0CisjIHN0YXRlbWVudHMgYmVpbmcgZXhlY3V0ZWQKK2RlZiBhc3NlcnRFcXVhbChsaHMsIHJocyk6CisgICAgaWYgbGhzICE9IHJoczoKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJyVyICE9ICVyJyAlIChsaHMsIHJocykpCitkZWYgYXNzZXJ0SXMobGhzLCByaHMpOgorICAgIGlmIGxocyBpcyBub3QgcmhzOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignJXIgaXMgbm90ICVyJyAlIChsaHMsIHJocykpCisjIENoZWNrIGJhc2ljIGNvZGUgZXhlY3V0aW9uCityZXN1bHQgPSBbJ1RvcCBsZXZlbCBhc3NpZ25tZW50J10KK2RlZiBmKCk6CisgICAgcmVzdWx0LmFwcGVuZCgnTG93ZXIgbGV2ZWwgcmVmZXJlbmNlJykKK2YoKQorYXNzZXJ0RXF1YWwocmVzdWx0LCBbJ1RvcCBsZXZlbCBhc3NpZ25tZW50JywgJ0xvd2VyIGxldmVsIHJlZmVyZW5jZSddKQorIyBDaGVjayB0aGUgc3lzIG1vZHVsZQoraW1wb3J0IHN5cworYXNzZXJ0SXMoZ2xvYmFscygpLCBzeXMubW9kdWxlc1tfX25hbWVfX10uX19kaWN0X18pCithcmd2MCA9IHN5cy5hcmd2WzBdCisiIiIKKworICAgIGRlZiBfbWFrZV90ZXN0X3NjcmlwdChzZWxmLCBzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZT1Ob25lKToKKyAgICAgICAgaWYgc291cmNlIGlzIE5vbmU6CisgICAgICAgICAgICBzb3VyY2UgPSBzZWxmLnRlc3Rfc291cmNlCisgICAgICAgIHJldHVybiBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSkKKworICAgIGRlZiBfY2hlY2tfc2NyaXB0KHNlbGYsIHNjcmlwdF9uYW1lLCBleHBlY3RlZF9uYW1lLCBleHBlY3RlZF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2FyZ3YwLCBleHBlY3RlZF9wYWNrYWdlKToKKyAgICAgICAgcmVzdWx0ID0gcnVuX3BhdGgoc2NyaXB0X25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WyJfX25hbWVfXyJdLCBleHBlY3RlZF9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsiX19maWxlX18iXSwgZXhwZWN0ZWRfZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiYXJndjAiLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WyJhcmd2MCJdLCBleHBlY3RlZF9hcmd2MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbIl9fcGFja2FnZV9fIl0sIGV4cGVjdGVkX3BhY2thZ2UpCisKKyAgICBkZWYgX2NoZWNrX2ltcG9ydF9lcnJvcihzZWxmLCBzY3JpcHRfbmFtZSwgbXNnKToKKyAgICAgICAgbXNnID0gcmUuZXNjYXBlKG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoSW1wb3J0RXJyb3IsIG1zZywgcnVuX3BhdGgsIHNjcmlwdF9uYW1lKQorCisgICAgZGVmIHRlc3RfYmFzaWNfc2NyaXB0KHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZF9uYW1lID0gJ3NjcmlwdCcKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfbmFtZSwgIjxydW5fcGF0aD4iLCBzY3JpcHRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NjcmlwdF9jb21waWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdzY3JpcHQnCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICBjb21waWxlZF9uYW1lID0gY29tcGlsZV9zY3JpcHQoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBvcy5yZW1vdmUoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoY29tcGlsZWRfbmFtZSwgIjxydW5fcGF0aD4iLCBjb21waWxlZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnX19tYWluX18nCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X2RpciwgIjxydW5fcGF0aD4iLCBzY3JpcHRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfZGlyLCAnJykKKworICAgIGRlZiB0ZXN0X2RpcmVjdG9yeV9jb21waWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdfX21haW5fXycKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKKyAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBjb21waWxlX3NjcmlwdChzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyLCAiPHJ1bl9wYXRoPiIsIGNvbXBpbGVkX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X2RpciwgJycpCisKKyAgICBkZWYgdGVzdF9kaXJlY3RvcnlfZXJyb3Ioc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnbm90X21haW4nCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICBtc2cgPSAiY2FuJ3QgZmluZCAnX19tYWluX18nIG1vZHVsZSBpbiAlciIgJSBzY3JpcHRfZGlyCisgICAgICAgICAgICBzZWxmLl9jaGVja19pbXBvcnRfZXJyb3Ioc2NyaXB0X2RpciwgbXNnKQorCisgICAgZGVmIHRlc3RfemlwZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdfX21haW5fXycKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBmbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdCh6aXBfbmFtZSwgIjxydW5fcGF0aD4iLCBmbmFtZSwgemlwX25hbWUsICcnKQorCisgICAgZGVmIHRlc3RfemlwZmlsZV9jb21waWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdfX21haW5fXycKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKKyAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBjb21waWxlX3NjcmlwdChzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBmbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBjb21waWxlZF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lLCAiPHJ1bl9wYXRoPiIsIGZuYW1lLCB6aXBfbmFtZSwgJycpCisKKyAgICBkZWYgdGVzdF96aXBmaWxlX2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZF9uYW1lID0gJ25vdF9tYWluJworICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lKQorICAgICAgICAgICAgemlwX25hbWUsIGZuYW1lID0gbWFrZV96aXBfc2NyaXB0KHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgbXNnID0gImNhbid0IGZpbmQgJ19fbWFpbl9fJyBtb2R1bGUgaW4gJXIiICUgemlwX25hbWUKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2ltcG9ydF9lcnJvcih6aXBfbmFtZSwgbXNnKQorCisgICAgZGVmIHRlc3RfbWFpbl9yZWN1cnNpb25fZXJyb3Ioc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyLCB0ZW1wX2RpcigpIGFzIGR1bW15X2RpcjoKKyAgICAgICAgICAgIG1vZF9uYW1lID0gJ19fbWFpbl9fJworICAgICAgICAgICAgc291cmNlID0gKCJpbXBvcnQgcnVucHlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAicnVucHkucnVuX3BhdGgoJXIpXG4iKSAlIGR1bW15X2RpcgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lLCBzb3VyY2UpCisgICAgICAgICAgICB6aXBfbmFtZSwgZm5hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgc2NyaXB0X25hbWUpCisgICAgICAgICAgICBtc2cgPSAicmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoUnVudGltZUVycm9yLCBtc2csIHJ1bl9wYXRoLCB6aXBfbmFtZSkKKworCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoUnVuTW9kdWxlQ29kZVRlc3QsIFJ1bk1vZHVsZVRlc3QsIFJ1blBhdGhUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zYXgucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zYXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyMGVhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NheC5weQpAQCAtMCwwICsxLDg4NyBAQAorIyByZWdyZXNzaW9uIHRlc3QgZm9yIFNBWCAyLjAgICAgICAgICAgICAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyMgJElkJAorCitmcm9tIHhtbC5zYXggaW1wb3J0IG1ha2VfcGFyc2VyLCBDb250ZW50SGFuZGxlciwgXAorICAgICAgICAgICAgICAgICAgICBTQVhFeGNlcHRpb24sIFNBWFJlYWRlck5vdEF2YWlsYWJsZSwgU0FYUGFyc2VFeGNlcHRpb24KK3RyeToKKyAgICBtYWtlX3BhcnNlcigpCitleGNlcHQgU0FYUmVhZGVyTm90QXZhaWxhYmxlOgorICAgICMgZG9uJ3QgdHJ5IHRvIHRlc3QgdGhpcyBtb2R1bGUgaWYgd2UgY2Fubm90IGNyZWF0ZSBhIHBhcnNlcgorICAgIHJhaXNlIEltcG9ydEVycm9yKCJubyBYTUwgcGFyc2VycyBhdmFpbGFibGUiKQorZnJvbSB4bWwuc2F4LnNheHV0aWxzIGltcG9ydCBYTUxHZW5lcmF0b3IsIGVzY2FwZSwgdW5lc2NhcGUsIHF1b3RlYXR0ciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxGaWx0ZXJCYXNlCitmcm9tIHhtbC5zYXguZXhwYXRyZWFkZXIgaW1wb3J0IGNyZWF0ZV9wYXJzZXIKK2Zyb20geG1sLnNheC5oYW5kbGVyIGltcG9ydCBmZWF0dXJlX25hbWVzcGFjZXMKK2Zyb20geG1sLnNheC54bWxyZWFkZXIgaW1wb3J0IElucHV0U291cmNlLCBBdHRyaWJ1dGVzSW1wbCwgQXR0cmlidXRlc05TSW1wbAorZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgaW8KK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIHJ1bl91bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0CisKK1RFU1RfWE1MRklMRSA9IGZpbmRmaWxlKCJ0ZXN0LnhtbCIsIHN1YmRpcj0ieG1sdGVzdGRhdGEiKQorVEVTVF9YTUxGSUxFX09VVCA9IGZpbmRmaWxlKCJ0ZXN0LnhtbC5vdXQiLCBzdWJkaXI9InhtbHRlc3RkYXRhIikKKworc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMgPSBUcnVlCitpZiBub3Qgb3MucGF0aC5zdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lczoKKyAgICB0cnk6CisgICAgICAgIHN1cHBvcnQuVEVTVEZOX1VOSUNPREUuZW5jb2RlKHN1cHBvcnQuVEVTVEZOX0VOQ09ESU5HKQorICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFVuaWNvZGVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgIyBFaXRoZXIgdGhlIGZpbGUgc3lzdGVtIGVuY29kaW5nIGlzIE5vbmUsIG9yIHRoZSBmaWxlIG5hbWUKKyAgICAgICAgIyBjYW5ub3QgYmUgZW5jb2RlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gZW5jb2RpbmcuCisgICAgICAgIHN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzID0gRmFsc2UKK3JlcXVpcmVzX3VuaWNvZGVfZmlsZW5hbWVzID0gdW5pdHRlc3Quc2tpcFVubGVzcygKKyAgICAgICAgc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMsCisgICAgICAgICdSZXF1aXJlcyB1bmljb2RlIGZpbGVuYW1lcyBzdXBwb3J0JykKKworbnNfdXJpID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy94bWwtbnMvc2F4dGVzdC8iCisKK2NsYXNzIFhtbFRlc3RCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdmVyaWZ5X2VtcHR5X2F0dHJzKHNlbGYsIGF0dHJzKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGF0dHJzLmdldFZhbHVlLCAiYXR0ciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBhdHRycy5nZXRWYWx1ZUJ5UU5hbWUsICJhdHRyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGF0dHJzLmdldE5hbWVCeVFOYW1lLCAiYXR0ciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBhdHRycy5nZXRRTmFtZUJ5TmFtZSwgImF0dHIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYXR0cnMuX19nZXRpdGVtX18sICJhdHRyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRMZW5ndGgoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXROYW1lcygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRRTmFtZXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGF0dHJzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhdHRycy5oYXNfa2V5KCJhdHRyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMua2V5cygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXQoImF0dHJzIiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KCJhdHRycyIsIDI1KSwgMjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuaXRlbXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMudmFsdWVzKCksIFtdKQorCisgICAgZGVmIHZlcmlmeV9lbXB0eV9uc2F0dHJzKHNlbGYsIGF0dHJzKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGF0dHJzLmdldFZhbHVlLCAobnNfdXJpLCAiYXR0ciIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYXR0cnMuZ2V0VmFsdWVCeVFOYW1lLCAibnM6YXR0ciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBhdHRycy5nZXROYW1lQnlRTmFtZSwgIm5zOmF0dHIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgYXR0cnMuZ2V0UU5hbWVCeU5hbWUsIChuc191cmksICJhdHRyIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBhdHRycy5fX2dldGl0ZW1fXywgKG5zX3VyaSwgImF0dHIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRMZW5ndGgoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXROYW1lcygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRRTmFtZXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGF0dHJzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhdHRycy5oYXNfa2V5KChuc191cmksICJhdHRyIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmtleXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KChuc191cmksICJhdHRyIikpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgobnNfdXJpLCAiYXR0ciIpLCAyNSksIDI1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLml0ZW1zKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLnZhbHVlcygpLCBbXSkKKworICAgIGRlZiB2ZXJpZnlfYXR0cnNfd2F0dHIoc2VsZiwgYXR0cnMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldExlbmd0aCgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldE5hbWVzKCksIFsiYXR0ciJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldFFOYW1lcygpLCBbImF0dHIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYXR0cnMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXR0cnMuaGFzX2tleSgiYXR0ciIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmtleXMoKSwgWyJhdHRyIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KCJhdHRyIiksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgiYXR0ciIsIDI1KSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuaXRlbXMoKSwgWygiYXR0ciIsICJ2YWwiKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMudmFsdWVzKCksIFsidmFsIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0VmFsdWUoImF0dHIiKSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0VmFsdWVCeVFOYW1lKCJhdHRyIiksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldE5hbWVCeVFOYW1lKCJhdHRyIiksICJhdHRyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyc1siYXR0ciJdLCAidmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRRTmFtZUJ5TmFtZSgiYXR0ciIpLCAiYXR0ciIpCisKK2NsYXNzIE1ha2VQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9tYWtlX3BhcnNlcjIoc2VsZik6CisgICAgICAgICMgQ3JlYXRpbmcgcGFyc2VycyBzZXZlcmFsIHRpbWVzIGluIGEgcm93IHNob3VsZCBzdWNjZWVkLgorICAgICAgICAjIFRlc3RpbmcgdGhpcyBiZWNhdXNlIHRoZXJlIGhhdmUgYmVlbiBmYWlsdXJlcyBvZiB0aGlzIGtpbmQKKyAgICAgICAgIyBiZWZvcmUuCisgICAgICAgIGZyb20geG1sLnNheCBpbXBvcnQgbWFrZV9wYXJzZXIKKyAgICAgICAgcCA9IG1ha2VfcGFyc2VyKCkKKyAgICAgICAgZnJvbSB4bWwuc2F4IGltcG9ydCBtYWtlX3BhcnNlcgorICAgICAgICBwID0gbWFrZV9wYXJzZXIoKQorICAgICAgICBmcm9tIHhtbC5zYXggaW1wb3J0IG1ha2VfcGFyc2VyCisgICAgICAgIHAgPSBtYWtlX3BhcnNlcigpCisgICAgICAgIGZyb20geG1sLnNheCBpbXBvcnQgbWFrZV9wYXJzZXIKKyAgICAgICAgcCA9IG1ha2VfcGFyc2VyKCkKKyAgICAgICAgZnJvbSB4bWwuc2F4IGltcG9ydCBtYWtlX3BhcnNlcgorICAgICAgICBwID0gbWFrZV9wYXJzZXIoKQorICAgICAgICBmcm9tIHhtbC5zYXggaW1wb3J0IG1ha2VfcGFyc2VyCisgICAgICAgIHAgPSBtYWtlX3BhcnNlcigpCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgICBzYXh1dGlscyB0ZXN0cworIworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgU2F4dXRpbHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjID09PT09IGVzY2FwZQorICAgIGRlZiB0ZXN0X2VzY2FwZV9iYXNpYyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlc2NhcGUoIkRvbmFsZCBEdWNrICYgQ28iKSwgIkRvbmFsZCBEdWNrICZhbXA7IENvIikKKworICAgIGRlZiB0ZXN0X2VzY2FwZV9hbGwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXNjYXBlKCI8RG9uYWxkIER1Y2sgJiBDbz4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJmx0O0RvbmFsZCBEdWNrICZhbXA7IENvJmd0OyIpCisKKyAgICBkZWYgdGVzdF9lc2NhcGVfZXh0cmEoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXNjYXBlKCJIZWkgcMOlIGRlZyIsIHsiw6UiIDogIiZhcmluZzsifSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkhlaSBwJmFyaW5nOyBkZWciKQorCisgICAgIyA9PT09PSB1bmVzY2FwZQorICAgIGRlZiB0ZXN0X3VuZXNjYXBlX2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuZXNjYXBlKCJEb25hbGQgRHVjayAmYW1wOyBDbyIpLCAiRG9uYWxkIER1Y2sgJiBDbyIpCisKKyAgICBkZWYgdGVzdF91bmVzY2FwZV9hbGwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5lc2NhcGUoIiZsdDtEb25hbGQgRHVjayAmYW1wOyBDbyZndDsiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPERvbmFsZCBEdWNrICYgQ28+IikKKworICAgIGRlZiB0ZXN0X3VuZXNjYXBlX2V4dHJhKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuZXNjYXBlKCJIZWkgcMOlIGRlZyIsIHsiw6UiIDogIiZhcmluZzsifSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkhlaSBwJmFyaW5nOyBkZWciKQorCisgICAgZGVmIHRlc3RfdW5lc2NhcGVfYW1wX2V4dHJhKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuZXNjYXBlKCImYW1wO2ZvbzsiLCB7IiZmb287IjogInNwbGF0In0pLCAiJmZvbzsiKQorCisgICAgIyA9PT09PSBxdW90ZWF0dHIKKyAgICBkZWYgdGVzdF9xdW90ZWF0dHJfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvdGVhdHRyKCJEb25hbGQgRHVjayAmIENvIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyJEb25hbGQgRHVjayAmYW1wOyBDbyInKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3F1b3RlYXR0cihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdW90ZWF0dHIoJ0luY2x1ZGVzICJkb3VibGUiIHF1b3RlcycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcJ0luY2x1ZGVzICJkb3VibGUiIHF1b3Rlc1wnJykKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9xdW90ZWF0dHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvdGVhdHRyKCJJbmNsdWRlcyAnc2luZ2xlJyBxdW90ZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiXCJJbmNsdWRlcyAnc2luZ2xlJyBxdW90ZXNcIiIpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfZG91YmxlX3F1b3RlYXR0cihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdW90ZWF0dHIoIkluY2x1ZGVzICdzaW5nbGUnIGFuZCBcImRvdWJsZVwiIHF1b3RlcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJcIkluY2x1ZGVzICdzaW5nbGUnIGFuZCAmcXVvdDtkb3VibGUmcXVvdDsgcXVvdGVzXCIiKQorCisgICAgIyA9PT09PSBtYWtlX3BhcnNlcgorICAgIGRlZiB0ZXN0X21ha2VfcGFyc2VyKHNlbGYpOgorICAgICAgICAjIENyZWF0aW5nIGEgcGFyc2VyIHNob3VsZCBzdWNjZWVkIC0gaXQgc2hvdWxkIGZhbGwgYmFjaworICAgICAgICAjIHRvIHRoZSBleHBhdHJlYWRlcgorICAgICAgICBwID0gbWFrZV9wYXJzZXIoWyd4bWwucGFyc2Vycy5ub19zdWNoX3BhcnNlciddKQorCisKKyMgPT09PT0gWE1MR2VuZXJhdG9yCisKK3N0YXJ0ID0gJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTEiPz5cbicKKworY2xhc3MgWG1sZ2VuVGVzdDoKKyAgICBkZWYgdGVzdF94bWxnZW5fYmFzaWMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisgICAgICAgIGdlbi5zdGFydERvY3VtZW50KCkKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudCgiZG9jIiwge30pCisgICAgICAgIGdlbi5lbmRFbGVtZW50KCJkb2MiKQorICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsgIjxkb2M+PC9kb2M+IikKKworICAgIGRlZiB0ZXN0X3htbGdlbl9jb250ZW50KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorCisgICAgICAgIGdlbi5zdGFydERvY3VtZW50KCkKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudCgiZG9jIiwge30pCisgICAgICAgIGdlbi5jaGFyYWN0ZXJzKCJodWhlaSIpCisgICAgICAgIGdlbi5lbmRFbGVtZW50KCJkb2MiKQorICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsgIjxkb2M+aHVoZWk8L2RvYz4iKQorCisgICAgZGVmIHRlc3RfeG1sZ2VuX3BpKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorCisgICAgICAgIGdlbi5zdGFydERvY3VtZW50KCkKKyAgICAgICAgZ2VuLnByb2Nlc3NpbmdJbnN0cnVjdGlvbigidGVzdCIsICJkYXRhIikKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudCgiZG9jIiwge30pCisgICAgICAgIGdlbi5lbmRFbGVtZW50KCJkb2MiKQorICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsgIjw/dGVzdCBkYXRhPz48ZG9jPjwvZG9jPiIpCisKKyAgICBkZWYgdGVzdF94bWxnZW5fY29udGVudF9lc2NhcGUoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisKKyAgICAgICAgZ2VuLnN0YXJ0RG9jdW1lbnQoKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50KCJkb2MiLCB7fSkKKyAgICAgICAgZ2VuLmNoYXJhY3RlcnMoIjxodWhlaSYiKQorICAgICAgICBnZW4uZW5kRWxlbWVudCgiZG9jIikKKyAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgc3RhcnQgKyAiPGRvYz4mbHQ7aHVoZWkmYW1wOzwvZG9jPiIpCisKKyAgICBkZWYgdGVzdF94bWxnZW5fYXR0cl9lc2NhcGUoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisKKyAgICAgICAgZ2VuLnN0YXJ0RG9jdW1lbnQoKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50KCJkb2MiLCB7ImEiOiAnIid9KQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50KCJlIiwgeyJhIjogIicifSkKKyAgICAgICAgZ2VuLmVuZEVsZW1lbnQoImUiKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50KCJlIiwgeyJhIjogIidcIiJ9KQorICAgICAgICBnZW4uZW5kRWxlbWVudCgiZSIpCisgICAgICAgIGdlbi5zdGFydEVsZW1lbnQoImUiLCB7ImEiOiAiXG5cclx0In0pCisgICAgICAgIGdlbi5lbmRFbGVtZW50KCJlIikKKyAgICAgICAgZ2VuLmVuZEVsZW1lbnQoImRvYyIpCisgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKworICAgICAgICAgICAgKCI8ZG9jIGE9J1wiJz48ZSBhPVwiJ1wiPjwvZT4iCisgICAgICAgICAgICAgIjxlIGE9XCInJnF1b3Q7XCI+PC9lPiIKKyAgICAgICAgICAgICAiPGUgYT1cIiYjMTA7JiMxMzsmIzk7XCI+PC9lPjwvZG9jPiIpKQorCisgICAgZGVmIHRlc3RfeG1sZ2VuX2VuY29kaW5nKHNlbGYpOgorICAgICAgICBlbmNvZGluZ3MgPSAoJ2lzby04ODU5LTE1JywgJ3V0Zi04JywKKyAgICAgICAgICAgICAgICAgICAgICd1dGYtMTZiZScsICd1dGYtMTZsZScsCisgICAgICAgICAgICAgICAgICAgICAndXRmLTMyYmUnLCAndXRmLTMybGUnKQorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gZW5jb2RpbmdzOgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQsIGVuY29kaW5nPWVuY29kaW5nKQorCisgICAgICAgICAgICBnZW4uc3RhcnREb2N1bWVudCgpCisgICAgICAgICAgICBnZW4uc3RhcnRFbGVtZW50KCJkb2MiLCB7ImEiOiB1J1x1MjBhYyd9KQorICAgICAgICAgICAgZ2VuLmNoYXJhY3RlcnModSJcdTIwYWMiKQorICAgICAgICAgICAgZ2VuLmVuZEVsZW1lbnQoImRvYyIpCisgICAgICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCAoCisgICAgICAgICAgICAgICAgdSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIlcyI/PlxuJworICAgICAgICAgICAgICAgIHUnPGRvYyBhPSJcdTIwYWMiPlx1MjBhYzwvZG9jPicgJSBlbmNvZGluZworICAgICAgICAgICAgICAgICkuZW5jb2RlKGVuY29kaW5nLCAneG1sY2hhcnJlZnJlcGxhY2UnKSkKKworICAgIGRlZiB0ZXN0X3htbGdlbl91bmVuY29kYWJsZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCwgZW5jb2Rpbmc9J2FzY2lpJykKKworICAgICAgICBnZW4uc3RhcnREb2N1bWVudCgpCisgICAgICAgIGdlbi5zdGFydEVsZW1lbnQoImRvYyIsIHsiYSI6IHUnXHUyMGFjJ30pCisgICAgICAgIGdlbi5jaGFyYWN0ZXJzKHUiXHUyMGFjIikKKyAgICAgICAgZ2VuLmVuZEVsZW1lbnQoImRvYyIpCisgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iYXNjaWkiPz5cbicKKyAgICAgICAgICAgICAgICAnPGRvYyBhPSImIzgzNjQ7Ij4mIzgzNjQ7PC9kb2M+JykKKworICAgIGRlZiB0ZXN0X3htbGdlbl9pZ25vcmFibGUoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisKKyAgICAgICAgZ2VuLnN0YXJ0RG9jdW1lbnQoKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50KCJkb2MiLCB7fSkKKyAgICAgICAgZ2VuLmlnbm9yYWJsZVdoaXRlc3BhY2UoIiAiKQorICAgICAgICBnZW4uZW5kRWxlbWVudCgiZG9jIikKKyAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jPiA8L2RvYz4iKQorCisgICAgZGVmIHRlc3RfeG1sZ2VuX25zKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorCisgICAgICAgIGdlbi5zdGFydERvY3VtZW50KCkKKyAgICAgICAgZ2VuLnN0YXJ0UHJlZml4TWFwcGluZygibnMxIiwgbnNfdXJpKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50TlMoKG5zX3VyaSwgImRvYyIpLCAibnMxOmRvYyIsIHt9KQorICAgICAgICAjIGFkZCBhbiB1bnF1YWxpZmllZCBuYW1lCisgICAgICAgIGdlbi5zdGFydEVsZW1lbnROUygoTm9uZSwgInVkb2MiKSwgTm9uZSwge30pCisgICAgICAgIGdlbi5lbmRFbGVtZW50TlMoKE5vbmUsICJ1ZG9jIiksIE5vbmUpCisgICAgICAgIGdlbi5lbmRFbGVtZW50TlMoKG5zX3VyaSwgImRvYyIpLCAibnMxOmRvYyIpCisgICAgICAgIGdlbi5lbmRQcmVmaXhNYXBwaW5nKCJuczEiKQorICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsgXAorICAgICAgICAgICAoJzxuczE6ZG9jIHhtbG5zOm5zMT0iJXMiPjx1ZG9jPjwvdWRvYz48L25zMTpkb2M+JyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zX3VyaSkpCisKKyAgICBkZWYgdGVzdF8xNDYzMDI2XzEoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisKKyAgICAgICAgZ2VuLnN0YXJ0RG9jdW1lbnQoKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50TlMoKE5vbmUsICdhJyksICdhJywgeyhOb25lLCAnYicpOidjJ30pCisgICAgICAgIGdlbi5lbmRFbGVtZW50TlMoKE5vbmUsICdhJyksICdhJykKKyAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCsnPGEgYj0iYyI+PC9hPicpCisKKyAgICBkZWYgdGVzdF8xNDYzMDI2XzIoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisKKyAgICAgICAgZ2VuLnN0YXJ0RG9jdW1lbnQoKQorICAgICAgICBnZW4uc3RhcnRQcmVmaXhNYXBwaW5nKE5vbmUsICdxdXgnKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50TlMoKCdxdXgnLCAnYScpLCAnYScsIHt9KQorICAgICAgICBnZW4uZW5kRWxlbWVudE5TKCgncXV4JywgJ2EnKSwgJ2EnKQorICAgICAgICBnZW4uZW5kUHJlZml4TWFwcGluZyhOb25lKQorICAgICAgICBnZW4uZW5kRG9jdW1lbnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0Kyc8YSB4bWxucz0icXV4Ij48L2E+JykKKworICAgIGRlZiB0ZXN0XzE0NjMwMjZfMyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKworICAgICAgICBnZW4uc3RhcnREb2N1bWVudCgpCisgICAgICAgIGdlbi5zdGFydFByZWZpeE1hcHBpbmcoJ215JywgJ3F1eCcpCisgICAgICAgIGdlbi5zdGFydEVsZW1lbnROUygoJ3F1eCcsICdhJyksICdhJywgeyhOb25lLCAnYicpOidjJ30pCisgICAgICAgIGdlbi5lbmRFbGVtZW50TlMoKCdxdXgnLCAnYScpLCAnYScpCisgICAgICAgIGdlbi5lbmRQcmVmaXhNYXBwaW5nKCdteScpCisgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgIHN0YXJ0Kyc8bXk6YSB4bWxuczpteT0icXV4IiBiPSJjIj48L215OmE+JykKKworICAgIGRlZiB0ZXN0XzUwMjdfMShzZWxmKToKKyAgICAgICAgIyBUaGUgeG1sIHByZWZpeCAoYXMgaW4geG1sOmxhbmcgYmVsb3cpIGlzIHJlc2VydmVkIGFuZCBib3VuZCBieQorICAgICAgICAjIGRlZmluaXRpb24gdG8gaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLiAgWE1MR2VuZXJhdG9yIGhhZAorICAgICAgICAjIGEgYnVnIHdoZXJlYnkgYSBLZXlFcnJvciBpcyByYWlzZWQgYmVjYXVzZSB0aGlzIG5hbWVzcGFjZSBpcyBtaXNzaW5nCisgICAgICAgICMgZnJvbSBhIGRpY3Rpb25hcnkuCisgICAgICAgICMKKyAgICAgICAgIyBUaGlzIHRlc3QgZGVtb25zdHJhdGVzIHRoZSBidWcgYnkgcGFyc2luZyBhIGRvY3VtZW50LgorICAgICAgICB0ZXN0X3htbCA9IFN0cmluZ0lPKAorICAgICAgICAgICAgJzw/eG1sIHZlcnNpb249IjEuMCI/PicKKyAgICAgICAgICAgICc8YTpnMSB4bWxuczphPSJodHRwOi8vZXhhbXBsZS5jb20vbnMiPicKKyAgICAgICAgICAgICAnPGE6ZzIgeG1sOmxhbmc9ImVuIj5IZWxsbzwvYTpnMj4nCisgICAgICAgICAgICAnPC9hOmcxPicpCisKKyAgICAgICAgcGFyc2VyID0gbWFrZV9wYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0RmVhdHVyZShmZWF0dXJlX25hbWVzcGFjZXMsIFRydWUpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcihnZW4pCisgICAgICAgIHBhcnNlci5wYXJzZSh0ZXN0X3htbCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICsgKAorICAgICAgICAgICAgICAgICAgICAgICAgICc8YTpnMSB4bWxuczphPSJodHRwOi8vZXhhbXBsZS5jb20vbnMiPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJzxhOmcyIHhtbDpsYW5nPSJlbiI+SGVsbG88L2E6ZzI+JworICAgICAgICAgICAgICAgICAgICAgICAgICc8L2E6ZzE+JykpCisKKyAgICBkZWYgdGVzdF81MDI3XzIoc2VsZik6CisgICAgICAgICMgVGhlIHhtbCBwcmVmaXggKGFzIGluIHhtbDpsYW5nIGJlbG93KSBpcyByZXNlcnZlZCBhbmQgYm91bmQgYnkKKyAgICAgICAgIyBkZWZpbml0aW9uIHRvIGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZS4gIFhNTEdlbmVyYXRvciBoYWQKKyAgICAgICAgIyBhIGJ1ZyB3aGVyZWJ5IGEgS2V5RXJyb3IgaXMgcmFpc2VkIGJlY2F1c2UgdGhpcyBuYW1lc3BhY2UgaXMgbWlzc2luZworICAgICAgICAjIGZyb20gYSBkaWN0aW9uYXJ5LgorICAgICAgICAjCisgICAgICAgICMgVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB0aGUgYnVnIGJ5IGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgdGhlCisgICAgICAgICMgWE1MR2VuZXJhdG9yLgorICAgICAgICByZXN1bHQgPSBzZWxmLmlvY2xhc3MoKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorCisgICAgICAgIGdlbi5zdGFydERvY3VtZW50KCkKKyAgICAgICAgZ2VuLnN0YXJ0UHJlZml4TWFwcGluZygnYScsICdodHRwOi8vZXhhbXBsZS5jb20vbnMnKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50TlMoKCdodHRwOi8vZXhhbXBsZS5jb20vbnMnLCAnZzEnKSwgJ2cxJywge30pCisgICAgICAgIGxhbmdfYXR0ciA9IHsoJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZScsICdsYW5nJyk6ICdlbid9CisgICAgICAgIGdlbi5zdGFydEVsZW1lbnROUygoJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucycsICdnMicpLCAnZzInLCBsYW5nX2F0dHIpCisgICAgICAgIGdlbi5jaGFyYWN0ZXJzKCdIZWxsbycpCisgICAgICAgIGdlbi5lbmRFbGVtZW50TlMoKCdodHRwOi8vZXhhbXBsZS5jb20vbnMnLCAnZzInKSwgJ2cyJykKKyAgICAgICAgZ2VuLmVuZEVsZW1lbnROUygoJ2h0dHA6Ly9leGFtcGxlLmNvbS9ucycsICdnMScpLCAnZzEnKQorICAgICAgICBnZW4uZW5kUHJlZml4TWFwcGluZygnYScpCisgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPGE6ZzEgeG1sbnM6YT0iaHR0cDovL2V4YW1wbGUuY29tL25zIj4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICc8YTpnMiB4bWw6bGFuZz0iZW4iPkhlbGxvPC9hOmcyPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPC9hOmcxPicpKQorCisgICAgZGVmIHRlc3Rfbm9fY2xvc2VfZmlsZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgZGVmIGZ1bmMob3V0KToKKyAgICAgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihvdXQpCisgICAgICAgICAgICBnZW4uc3RhcnREb2N1bWVudCgpCisgICAgICAgICAgICBnZW4uc3RhcnRFbGVtZW50KCJkb2MiLCB7fSkKKyAgICAgICAgZnVuYyhyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0LmNsb3NlZCkKKworICAgIGRlZiB0ZXN0X3htbGdlbl9mcmFnbWVudChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKworICAgICAgICAjIERvbid0IGNhbGwgZ2VuLnN0YXJ0RG9jdW1lbnQoKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50KCJmb28iLCB7ImEiOiAiMS4wIn0pCisgICAgICAgIGdlbi5jaGFyYWN0ZXJzKCJIZWxsbyIpCisgICAgICAgIGdlbi5lbmRFbGVtZW50KCJmb28iKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50KCJiYXIiLCB7ImIiOiAiMi4wIn0pCisgICAgICAgIGdlbi5lbmRFbGVtZW50KCJiYXIiKQorICAgICAgICAjIERvbid0IGNhbGwgZ2VuLmVuZERvY3VtZW50KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8Zm9vIGE9IjEuMCI+SGVsbG88L2Zvbz48YmFyIGI9IjIuMCI+PC9iYXI+JykKKworY2xhc3MgU3RyaW5nWG1sZ2VuVGVzdChYbWxnZW5UZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW9jbGFzcyA9IFN0cmluZ0lPCisKK2NsYXNzIEJ5dGVzSU9YbWxnZW5UZXN0KFhtbGdlblRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpb2NsYXNzID0gaW8uQnl0ZXNJTworCitjbGFzcyBXcml0ZXJYbWxnZW5UZXN0KFhtbGdlblRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBpb2NsYXNzKGxpc3QpOgorICAgICAgICB3cml0ZSA9IGxpc3QuYXBwZW5kCisgICAgICAgIGNsb3NlZCA9IEZhbHNlCisKKyAgICAgICAgZGVmIGdldHZhbHVlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIGInJy5qb2luKHNlbGYpCisKKworY2xhc3MgWE1MRmlsdGVyQmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2ZpbHRlcl9iYXNpYyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorICAgICAgICBmaWx0ZXIgPSBYTUxGaWx0ZXJCYXNlKCkKKyAgICAgICAgZmlsdGVyLnNldENvbnRlbnRIYW5kbGVyKGdlbikKKworICAgICAgICBmaWx0ZXIuc3RhcnREb2N1bWVudCgpCisgICAgICAgIGZpbHRlci5zdGFydEVsZW1lbnQoImRvYyIsIHt9KQorICAgICAgICBmaWx0ZXIuY2hhcmFjdGVycygiY29udGVudCIpCisgICAgICAgIGZpbHRlci5pZ25vcmFibGVXaGl0ZXNwYWNlKCIgIikKKyAgICAgICAgZmlsdGVyLmVuZEVsZW1lbnQoImRvYyIpCisgICAgICAgIGZpbHRlci5lbmREb2N1bWVudCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz5jb250ZW50IDwvZG9jPiIpCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjICAgZXhwYXRyZWFkZXIgdGVzdHMKKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3htbF90ZXN0X291dCA9IG9wZW4oVEVTVF9YTUxGSUxFX09VVCkucmVhZCgpCisKK2NsYXNzIEV4cGF0UmVhZGVyVGVzdChYbWxUZXN0QmFzZSk6CisKKyAgICAjID09PT09IFhNTFJlYWRlciBzdXBwb3J0CisKKyAgICBkZWYgdGVzdF9leHBhdF9maWxlKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQorICAgICAgICB4bWxnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorCisgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcih4bWxnZW4pCisgICAgICAgIHBhcnNlci5wYXJzZShvcGVuKFRFU1RfWE1MRklMRSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgeG1sX3Rlc3Rfb3V0KQorCisgICAgQHJlcXVpcmVzX3VuaWNvZGVfZmlsZW5hbWVzCisgICAgZGVmIHRlc3RfZXhwYXRfZmlsZV91bmljb2RlKHNlbGYpOgorICAgICAgICBmbmFtZSA9IHN1cHBvcnQuVEVTVEZOX1VOSUNPREUKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKFRFU1RfWE1MRklMRSwgZm5hbWUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgZm5hbWUpCisKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCisgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKKyAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKworICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQorICAgICAgICBwYXJzZXIucGFyc2Uob3BlbihmbmFtZSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgeG1sX3Rlc3Rfb3V0KQorCisgICAgIyA9PT09PSBEVERIYW5kbGVyIHN1cHBvcnQKKworICAgIGNsYXNzIFRlc3REVERIYW5kbGVyOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX25vdGF0aW9ucyA9IFtdCisgICAgICAgICAgICBzZWxmLl9lbnRpdGllcyAgPSBbXQorCisgICAgICAgIGRlZiBub3RhdGlvbkRlY2woc2VsZiwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKToKKyAgICAgICAgICAgIHNlbGYuX25vdGF0aW9ucy5hcHBlbmQoKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkpCisKKyAgICAgICAgZGVmIHVucGFyc2VkRW50aXR5RGVjbChzZWxmLCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQsIG5kYXRhKToKKyAgICAgICAgICAgIHNlbGYuX2VudGl0aWVzLmFwcGVuZCgobmFtZSwgcHVibGljSWQsIHN5c3RlbUlkLCBuZGF0YSkpCisKKyAgICBkZWYgdGVzdF9leHBhdF9kdGRoYW5kbGVyKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgaGFuZGxlciA9IHNlbGYuVGVzdERUREhhbmRsZXIoKQorICAgICAgICBwYXJzZXIuc2V0RFRESGFuZGxlcihoYW5kbGVyKQorCisgICAgICAgIHBhcnNlci5mZWVkKCc8IURPQ1RZUEUgZG9jIFtcbicpCisgICAgICAgIHBhcnNlci5mZWVkKCcgIDwhRU5USVRZIGltZyBTWVNURU0gImV4cGF0LmdpZiIgTkRBVEEgR0lGPlxuJykKKyAgICAgICAgcGFyc2VyLmZlZWQoJyAgPCFOT1RBVElPTiBHSUYgUFVCTElDICItLy9Db21wdVNlcnZlLy9OT1RBVElPTiBHcmFwaGljcyBJbnRlcmNoYW5nZSBGb3JtYXQgODlhLy9FTiI+XG4nKQorICAgICAgICBwYXJzZXIuZmVlZCgnXT5cbicpCisgICAgICAgIHBhcnNlci5mZWVkKCc8ZG9jPjwvZG9jPicpCisgICAgICAgIHBhcnNlci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyLl9ub3RhdGlvbnMsCisgICAgICAgICAgICBbKCJHSUYiLCAiLS8vQ29tcHVTZXJ2ZS8vTk9UQVRJT04gR3JhcGhpY3MgSW50ZXJjaGFuZ2UgRm9ybWF0IDg5YS8vRU4iLCBOb25lKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5fZW50aXRpZXMsIFsoImltZyIsIE5vbmUsICJleHBhdC5naWYiLCAiR0lGIildKQorCisgICAgIyA9PT09PSBFbnRpdHlSZXNvbHZlciBzdXBwb3J0CisKKyAgICBjbGFzcyBUZXN0RW50aXR5UmVzb2x2ZXI6CisKKyAgICAgICAgZGVmIHJlc29sdmVFbnRpdHkoc2VsZiwgcHVibGljSWQsIHN5c3RlbUlkKToKKyAgICAgICAgICAgIGlucHNyYyA9IElucHV0U291cmNlKCkKKyAgICAgICAgICAgIGlucHNyYy5zZXRCeXRlU3RyZWFtKFN0cmluZ0lPKCI8ZW50aXR5Lz4iKSkKKyAgICAgICAgICAgIHJldHVybiBpbnBzcmMKKworICAgIGRlZiB0ZXN0X2V4cGF0X2VudGl0eXJlc29sdmVyKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnNldEVudGl0eVJlc29sdmVyKHNlbGYuVGVzdEVudGl0eVJlc29sdmVyKCkpCisgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKKyAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKFhNTEdlbmVyYXRvcihyZXN1bHQpKQorCisgICAgICAgIHBhcnNlci5mZWVkKCc8IURPQ1RZUEUgZG9jIFtcbicpCisgICAgICAgIHBhcnNlci5mZWVkKCcgIDwhRU5USVRZIHRlc3QgU1lTVEVNICJ3aGF0ZXZlciI+XG4nKQorICAgICAgICBwYXJzZXIuZmVlZCgnXT5cbicpCisgICAgICAgIHBhcnNlci5mZWVkKCc8ZG9jPiZ0ZXN0OzwvZG9jPicpCisgICAgICAgIHBhcnNlci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKworICAgICAgICAgICAgICAgICAgICAgICAgICI8ZG9jPjxlbnRpdHk+PC9lbnRpdHk+PC9kb2M+IikKKworICAgICMgPT09PT0gQXR0cmlidXRlcyBzdXBwb3J0CisKKyAgICBjbGFzcyBBdHRyR2F0aGVyZXIoQ29udGVudEhhbmRsZXIpOgorCisgICAgICAgIGRlZiBzdGFydEVsZW1lbnQoc2VsZiwgbmFtZSwgYXR0cnMpOgorICAgICAgICAgICAgc2VsZi5fYXR0cnMgPSBhdHRycworCisgICAgICAgIGRlZiBzdGFydEVsZW1lbnROUyhzZWxmLCBuYW1lLCBxbmFtZSwgYXR0cnMpOgorICAgICAgICAgICAgc2VsZi5fYXR0cnMgPSBhdHRycworCisgICAgZGVmIHRlc3RfZXhwYXRfYXR0cnNfZW1wdHkoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgICAgICBnYXRoZXIgPSBzZWxmLkF0dHJHYXRoZXJlcigpCisgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcihnYXRoZXIpCisKKyAgICAgICAgcGFyc2VyLmZlZWQoIjxkb2MvPiIpCisgICAgICAgIHBhcnNlci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi52ZXJpZnlfZW1wdHlfYXR0cnMoZ2F0aGVyLl9hdHRycykKKworICAgIGRlZiB0ZXN0X2V4cGF0X2F0dHJzX3dhdHRyKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgZ2F0aGVyID0gc2VsZi5BdHRyR2F0aGVyZXIoKQorICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoZ2F0aGVyKQorCisgICAgICAgIHBhcnNlci5mZWVkKCI8ZG9jIGF0dHI9J3ZhbCcvPiIpCisgICAgICAgIHBhcnNlci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi52ZXJpZnlfYXR0cnNfd2F0dHIoZ2F0aGVyLl9hdHRycykKKworICAgIGRlZiB0ZXN0X2V4cGF0X25zYXR0cnNfZW1wdHkoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoMSkKKyAgICAgICAgZ2F0aGVyID0gc2VsZi5BdHRyR2F0aGVyZXIoKQorICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoZ2F0aGVyKQorCisgICAgICAgIHBhcnNlci5mZWVkKCI8ZG9jLz4iKQorICAgICAgICBwYXJzZXIuY2xvc2UoKQorCisgICAgICAgIHNlbGYudmVyaWZ5X2VtcHR5X25zYXR0cnMoZ2F0aGVyLl9hdHRycykKKworICAgIGRlZiB0ZXN0X2V4cGF0X25zYXR0cnNfd2F0dHIoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoMSkKKyAgICAgICAgZ2F0aGVyID0gc2VsZi5BdHRyR2F0aGVyZXIoKQorICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoZ2F0aGVyKQorCisgICAgICAgIHBhcnNlci5mZWVkKCI8ZG9jIHhtbG5zOm5zPSclcycgbnM6YXR0cj0ndmFsJy8+IiAlIG5zX3VyaSkKKyAgICAgICAgcGFyc2VyLmNsb3NlKCkKKworICAgICAgICBhdHRycyA9IGdhdGhlci5fYXR0cnMKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldExlbmd0aCgpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldE5hbWVzKCksIFsobnNfdXJpLCAiYXR0ciIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChhdHRycy5nZXRRTmFtZXMoKSA9PSBbXSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzLmdldFFOYW1lcygpID09IFsibnM6YXR0ciJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYXR0cnMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXR0cnMuaGFzX2tleSgobnNfdXJpLCAiYXR0ciIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXQoKG5zX3VyaSwgImF0dHIiKSksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgobnNfdXJpLCAiYXR0ciIpLCAyNSksICJ2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLml0ZW1zKCksIFsoKG5zX3VyaSwgImF0dHIiKSwgInZhbCIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy52YWx1ZXMoKSwgWyJ2YWwiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRWYWx1ZSgobnNfdXJpLCAiYXR0ciIpKSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnNbKG5zX3VyaSwgImF0dHIiKV0sICJ2YWwiKQorCisgICAgIyA9PT09PSBJbnB1dFNvdXJjZSBzdXBwb3J0CisKKyAgICBkZWYgdGVzdF9leHBhdF9pbnBzb3VyY2VfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisKKyAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKKyAgICAgICAgcGFyc2VyLnBhcnNlKFRFU1RfWE1MRklMRSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCisKKyAgICBkZWYgdGVzdF9leHBhdF9pbnBzb3VyY2Vfc3lzaWQoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisKKyAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKKyAgICAgICAgcGFyc2VyLnBhcnNlKElucHV0U291cmNlKFRFU1RfWE1MRklMRSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgeG1sX3Rlc3Rfb3V0KQorCisgICAgQHJlcXVpcmVzX3VuaWNvZGVfZmlsZW5hbWVzCisgICAgZGVmIHRlc3RfZXhwYXRfaW5wc291cmNlX3N5c2lkX3VuaWNvZGUoc2VsZik6CisgICAgICAgIGZuYW1lID0gc3VwcG9ydC5URVNURk5fVU5JQ09ERQorICAgICAgICBzaHV0aWwuY29weWZpbGUoVEVTVF9YTUxGSUxFLCBmbmFtZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBmbmFtZSkKKworICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQorICAgICAgICB4bWxnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorCisgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcih4bWxnZW4pCisgICAgICAgIHBhcnNlci5wYXJzZShJbnB1dFNvdXJjZShmbmFtZSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgeG1sX3Rlc3Rfb3V0KQorCisgICAgZGVmIHRlc3RfZXhwYXRfaW5wc291cmNlX3N0cmVhbShzZWxmKToKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCisgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKKyAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKworICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQorICAgICAgICBpbnBzcmMgPSBJbnB1dFNvdXJjZSgpCisgICAgICAgIGlucHNyYy5zZXRCeXRlU3RyZWFtKG9wZW4oVEVTVF9YTUxGSUxFKSkKKyAgICAgICAgcGFyc2VyLnBhcnNlKGlucHNyYykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCisKKyAgICAjID09PT09IEluY3JlbWVudGFsUGFyc2VyIHN1cHBvcnQKKworICAgIGRlZiB0ZXN0X2V4cGF0X2luY3JlbWVudGFsKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQorCisgICAgICAgIHBhcnNlci5mZWVkKCI8ZG9jPiIpCisgICAgICAgIHBhcnNlci5mZWVkKCI8L2RvYz4iKQorICAgICAgICBwYXJzZXIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsgIjxkb2M+PC9kb2M+IikKKworICAgIGRlZiB0ZXN0X2V4cGF0X2luY3JlbWVudGFsX3Jlc2V0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQorCisgICAgICAgIHBhcnNlci5mZWVkKCI8ZG9jPiIpCisgICAgICAgIHBhcnNlci5mZWVkKCJ0ZXh0IikKKworICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcih4bWxnZW4pCisgICAgICAgIHBhcnNlci5yZXNldCgpCisKKyAgICAgICAgcGFyc2VyLmZlZWQoIjxkb2M+IikKKyAgICAgICAgcGFyc2VyLmZlZWQoInRleHQiKQorICAgICAgICBwYXJzZXIuZmVlZCgiPC9kb2M+IikKKyAgICAgICAgcGFyc2VyLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jPnRleHQ8L2RvYz4iKQorCisgICAgIyA9PT09PSBMb2NhdG9yIHN1cHBvcnQKKworICAgIGRlZiB0ZXN0X2V4cGF0X2xvY2F0b3Jfbm9pbmZvKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQorCisgICAgICAgIHBhcnNlci5mZWVkKCI8ZG9jPiIpCisgICAgICAgIHBhcnNlci5mZWVkKCI8L2RvYz4iKQorICAgICAgICBwYXJzZXIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmdldFN5c3RlbUlkKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmdldFB1YmxpY0lkKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmdldExpbmVOdW1iZXIoKSwgMSkKKworICAgIGRlZiB0ZXN0X2V4cGF0X2xvY2F0b3Jfd2l0aGluZm8oc2VsZik6CisgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKKyAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcih4bWxnZW4pCisgICAgICAgIHBhcnNlci5wYXJzZShURVNUX1hNTEZJTEUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0U3lzdGVtSWQoKSwgVEVTVF9YTUxGSUxFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRQdWJsaWNJZCgpLCBOb25lKQorCisgICAgQHJlcXVpcmVzX3VuaWNvZGVfZmlsZW5hbWVzCisgICAgZGVmIHRlc3RfZXhwYXRfbG9jYXRvcl93aXRoaW5mb191bmljb2RlKHNlbGYpOgorICAgICAgICBmbmFtZSA9IHN1cHBvcnQuVEVTVEZOX1VOSUNPREUKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKFRFU1RfWE1MRklMRSwgZm5hbWUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgZm5hbWUpCisKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQorICAgICAgICB4bWxnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKKyAgICAgICAgcGFyc2VyLnBhcnNlKGZuYW1lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmdldFN5c3RlbUlkKCksIGZuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRQdWJsaWNJZCgpLCBOb25lKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjICAgZXJyb3IgcmVwb3J0aW5nCisjCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBFcnJvclJlcG9ydGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2V4cGF0X2lucHNvdXJjZV9sb2NhdGlvbihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcihDb250ZW50SGFuZGxlcigpKSAjIGRvIG5vdGhpbmcKKyAgICAgICAgc291cmNlID0gSW5wdXRTb3VyY2UoKQorICAgICAgICBzb3VyY2Uuc2V0Qnl0ZVN0cmVhbShTdHJpbmdJTygiPGZvbyBiYXIgZm9vYmFyPiIpKSAgICNpbGwtZm9ybWVkCisgICAgICAgIG5hbWUgPSAiYSBmaWxlIG5hbWUiCisgICAgICAgIHNvdXJjZS5zZXRTeXN0ZW1JZChuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZXIucGFyc2Uoc291cmNlKQorICAgICAgICAgICAgc2VsZi5mYWlsKCkKKyAgICAgICAgZXhjZXB0IFNBWEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5nZXRTeXN0ZW1JZCgpLCBuYW1lKQorCisgICAgZGVmIHRlc3RfZXhwYXRfaW5jb21wbGV0ZShzZWxmKToKKyAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcihDb250ZW50SGFuZGxlcigpKSAjIGRvIG5vdGhpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU0FYUGFyc2VFeGNlcHRpb24sIHBhcnNlci5wYXJzZSwgU3RyaW5nSU8oIjxmb28+IikpCisKKyAgICBkZWYgdGVzdF9zYXhfcGFyc2VfZXhjZXB0aW9uX3N0cihzZWxmKToKKyAgICAgICAgIyBwYXNzIHZhcmlvdXMgdmFsdWVzIGZyb20gYSBsb2NhdG9yIHRvIHRoZSBTQVhQYXJzZUV4Y2VwdGlvbiB0bworICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IHRoZSBfX3N0cl9fKCkgZG9lc24ndCBmYWxsIGFwYXJ0IHdoZW4gTm9uZSBpcworICAgICAgICAjIHBhc3NlZCBpbnN0ZWFkIG9mIGFuIGludGVnZXIgbGluZSBhbmQgY29sdW1uIG51bWJlcgorICAgICAgICAjCisgICAgICAgICMgdXNlICJub3JtYWwiIHZhbHVlcyBmb3IgdGhlIGxvY2F0b3I6CisgICAgICAgIHN0cihTQVhQYXJzZUV4Y2VwdGlvbigibWVzc2FnZSIsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkR1bW15TG9jYXRvcigxLCAxKSkpCisgICAgICAgICMgdXNlIE5vbmUgZm9yIHRoZSBsaW5lIG51bWJlcjoKKyAgICAgICAgc3RyKFNBWFBhcnNlRXhjZXB0aW9uKCJtZXNzYWdlIiwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuRHVtbXlMb2NhdG9yKE5vbmUsIDEpKSkKKyAgICAgICAgIyB1c2UgTm9uZSBmb3IgdGhlIGNvbHVtbiBudW1iZXI6CisgICAgICAgIHN0cihTQVhQYXJzZUV4Y2VwdGlvbigibWVzc2FnZSIsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkR1bW15TG9jYXRvcigxLCBOb25lKSkpCisgICAgICAgICMgdXNlIE5vbmUgZm9yIGJvdGg6CisgICAgICAgIHN0cihTQVhQYXJzZUV4Y2VwdGlvbigibWVzc2FnZSIsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkR1bW15TG9jYXRvcihOb25lLCBOb25lKSkpCisKKyAgICBjbGFzcyBEdW1teUxvY2F0b3I6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lbm8sIGNvbG5vKToKKyAgICAgICAgICAgIHNlbGYuX2xpbmVubyA9IGxpbmVubworICAgICAgICAgICAgc2VsZi5fY29sbm8gPSBjb2xubworCisgICAgICAgIGRlZiBnZXRQdWJsaWNJZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiAicHViaWQiCisKKyAgICAgICAgZGVmIGdldFN5c3RlbUlkKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJzeXNpZCIKKworICAgICAgICBkZWYgZ2V0TGluZU51bWJlcihzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9saW5lbm8KKworICAgICAgICBkZWYgZ2V0Q29sdW1uTnVtYmVyKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbG5vCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjICAgeG1scmVhZGVyIHRlc3RzCisjCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBYbWxSZWFkZXJUZXN0KFhtbFRlc3RCYXNlKToKKworICAgICMgPT09PT0gQXR0cmlidXRlc0ltcGwKKyAgICBkZWYgdGVzdF9hdHRyc19lbXB0eShzZWxmKToKKyAgICAgICAgc2VsZi52ZXJpZnlfZW1wdHlfYXR0cnMoQXR0cmlidXRlc0ltcGwoe30pKQorCisgICAgZGVmIHRlc3RfYXR0cnNfd2F0dHIoc2VsZik6CisgICAgICAgIHNlbGYudmVyaWZ5X2F0dHJzX3dhdHRyKEF0dHJpYnV0ZXNJbXBsKHsiYXR0ciIgOiAidmFsIn0pKQorCisgICAgZGVmIHRlc3RfbnNhdHRyc19lbXB0eShzZWxmKToKKyAgICAgICAgc2VsZi52ZXJpZnlfZW1wdHlfbnNhdHRycyhBdHRyaWJ1dGVzTlNJbXBsKHt9LCB7fSkpCisKKyAgICBkZWYgdGVzdF9uc2F0dHJzX3dhdHRyKHNlbGYpOgorICAgICAgICBhdHRycyA9IEF0dHJpYnV0ZXNOU0ltcGwoeyhuc191cmksICJhdHRyIikgOiAidmFsIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KG5zX3VyaSwgImF0dHIiKSA6ICJuczphdHRyIn0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRMZW5ndGgoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXROYW1lcygpLCBbKG5zX3VyaSwgImF0dHIiKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0UU5hbWVzKCksIFsibnM6YXR0ciJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhdHRycyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhdHRycy5oYXNfa2V5KChuc191cmksICJhdHRyIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmtleXMoKSwgWyhuc191cmksICJhdHRyIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgobnNfdXJpLCAiYXR0ciIpKSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KChuc191cmksICJhdHRyIiksIDI1KSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuaXRlbXMoKSwgWygobnNfdXJpLCAiYXR0ciIpLCAidmFsIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLnZhbHVlcygpLCBbInZhbCJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldFZhbHVlKChuc191cmksICJhdHRyIikpLCAidmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRWYWx1ZUJ5UU5hbWUoIm5zOmF0dHIiKSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TmFtZUJ5UU5hbWUoIm5zOmF0dHIiKSwgKG5zX3VyaSwgImF0dHIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyc1sobnNfdXJpLCAiYXR0ciIpXSwgInZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0UU5hbWVCeU5hbWUoKG5zX3VyaSwgImF0dHIiKSksICJuczphdHRyIikKKworCisgICAgIyBEdXJpbmcgdGhlIGRldmVsb3BtZW50IG9mIFB5dGhvbiAyLjUsIGFuIGF0dGVtcHQgdG8gbW92ZSB0aGUgInhtbCIKKyAgICAjIHBhY2thZ2UgaW1wbGVtZW50YXRpb24gdG8gYSBuZXcgcGFja2FnZSAoInhtbGNvcmUiKSBwcm92ZWQgcGFpbmZ1bC4KKyAgICAjIFRoZSBnb2FsIG9mIHRoaXMgY2hhbmdlIHdhcyB0byBhbGxvdyBhcHBsaWNhdGlvbnMgdG8gYmUgYWJsZSB0bworICAgICMgb2J0YWluIGFuZCByZWx5IG9uIGJlaGF2aW9yIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGltcGxlbWVudGF0aW9uCisgICAgIyBvZiB0aGUgWE1MIHN1cHBvcnQgd2l0aG91dCBuZWVkaW5nIHRvIGJlIGNvbmNlcm5lZCBhYm91dCB0aGUKKyAgICAjIGF2YWlsYWJpbGl0eSBvZiB0aGUgUHlYTUwgaW1wbGVtZW50YXRpb24uCisgICAgIworICAgICMgV2hpbGUgdGhlIGV4aXN0aW5nIGltcG9ydCBoYWNrZXJ5IGluIExpYi94bWwvX19pbml0X18ucHkgY2FuIGNhdXNlCisgICAgIyBQeVhNTCdzIF94bWxwdXMgcGFja2FnZSB0byBzdXBwbGFudCB0aGUgInhtbCIgcGFja2FnZSwgdGhhdCBvbmx5CisgICAgIyB3b3JrcyBiZWNhdXNlIGVpdGhlciBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSAieG1sIiBwYWNrYWdlIG5hbWUgZm9yCisgICAgIyBpbXBvcnRzLgorICAgICMKKyAgICAjIFRoZSBtb3ZlIHJlc3VsdGVkIGluIGEgbnVtYmVyIG9mIHByb2JsZW1zIHJlbGF0ZWQgdG8gdGhlIGZhY3QgdGhhdAorICAgICMgdGhlIGltcG9ydCBtYWNoaW5lcnkncyAicGFja2FnZSBjb250ZXh0IiBpcyBiYXNlZCBvbiB0aGUgbmFtZSB0aGF0J3MKKyAgICAjIGJlaW5nIGltcG9ydGVkIHJhdGhlciB0aGFuIHRoZSBfX25hbWVfXyBvZiB0aGUgYWN0dWFsIHBhY2thZ2UKKyAgICAjIGNvbnRhaW5tZW50OyBpdCB3YXNuJ3QgcG9zc2libGUgZm9yIHRoZSAieG1sIiBwYWNrYWdlIHRvIGJlIHJlcGxhY2VkCisgICAgIyBieSBhIHNpbXBsZSBtb2R1bGUgdGhhdCBpbmRpcmVjdGVkIGltcG9ydHMgdG8gdGhlICJ4bWxjb3JlIiBwYWNrYWdlLgorICAgICMKKyAgICAjIFRoZSBmb2xsb3dpbmcgdHdvIHRlc3RzIGV4ZXJjaXNlZCBidWdzIHRoYXQgd2VyZSBpbnRyb2R1Y2VkIGluIHRoYXQKKyAgICAjIGF0dGVtcHQuICBLZWVwaW5nIHRoZXNlIHRlc3RzIGFyb3VuZCB3aWxsIGhlbHAgZGV0ZWN0IHByb2JsZW1zIHdpdGgKKyAgICAjIG90aGVyIGF0dGVtcHRzIHRvIHByb3ZpZGUgcmVsaWFibGUgYWNjZXNzIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5J3MKKyAgICAjIGltcGxlbWVudGF0aW9uIG9mIHRoZSBYTUwgc3VwcG9ydC4KKworICAgIGRlZiB0ZXN0X3NmXzE1MTE0OTcoc2VsZik6CisgICAgICAgICMgQnVnIHJlcG9ydDogaHR0cDovL3d3dy5weXRob24ub3JnL3NmLzE1MTE0OTcKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBvbGRfbW9kdWxlcyA9IHN5cy5tb2R1bGVzLmNvcHkoKQorICAgICAgICBmb3IgbW9kbmFtZSBpbiBzeXMubW9kdWxlcy5rZXlzKCk6CisgICAgICAgICAgICBpZiBtb2RuYW1lLnN0YXJ0c3dpdGgoInhtbC4iKToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kbmFtZV0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHhtbC5zYXguZXhwYXRyZWFkZXIKKyAgICAgICAgICAgIG1vZHVsZSA9IHhtbC5zYXguZXhwYXRyZWFkZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAieG1sLnNheC5leHBhdHJlYWRlciIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMubW9kdWxlcy51cGRhdGUob2xkX21vZHVsZXMpCisKKyAgICBkZWYgdGVzdF9zZl8xNTEzNjExKHNlbGYpOgorICAgICAgICAjIEJ1ZyByZXBvcnQ6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zZi8xNTEzNjExCisgICAgICAgIHNpbyA9IFN0cmluZ0lPKCJpbnZhbGlkIikKKyAgICAgICAgcGFyc2VyID0gbWFrZV9wYXJzZXIoKQorICAgICAgICBmcm9tIHhtbC5zYXggaW1wb3J0IFNBWFBhcnNlRXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNBWFBhcnNlRXhjZXB0aW9uLCBwYXJzZXIucGFyc2UsIHNpbykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KE1ha2VQYXJzZXJUZXN0LAorICAgICAgICAgICAgICAgICBTYXh1dGlsc1Rlc3QsCisgICAgICAgICAgICAgICAgIFN0cmluZ1htbGdlblRlc3QsCisgICAgICAgICAgICAgICAgIEJ5dGVzSU9YbWxnZW5UZXN0LAorICAgICAgICAgICAgICAgICBXcml0ZXJYbWxnZW5UZXN0LAorICAgICAgICAgICAgICAgICBFeHBhdFJlYWRlclRlc3QsCisgICAgICAgICAgICAgICAgIEVycm9yUmVwb3J0aW5nVGVzdCwKKyAgICAgICAgICAgICAgICAgWG1sUmVhZGVyVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc2NvcGUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zY29wZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDU4M2UxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc2NvcGUucHkKQEAgLTAsMCArMSw2NjQgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgY2hlY2tfc3ludGF4X2Vycm9yLCBjaGVja19weTNrX3dhcm5pbmdzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja193YXJuaW5ncywgcnVuX3VuaXR0ZXN0CisKKworY2xhc3MgU2NvcGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdFNpbXBsZU5lc3Rpbmcoc2VsZik6CisKKyAgICAgICAgZGVmIG1ha2VfYWRkZXIoeCk6CisgICAgICAgICAgICBkZWYgYWRkZXIoeSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHggKyB5CisgICAgICAgICAgICByZXR1cm4gYWRkZXIKKworICAgICAgICBpbmMgPSBtYWtlX2FkZGVyKDEpCisgICAgICAgIHBsdXMxMCA9IG1ha2VfYWRkZXIoMTApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmMoMSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGx1czEwKC0yKSwgOCkKKworICAgIGRlZiB0ZXN0RXh0cmFOZXN0aW5nKHNlbGYpOgorCisgICAgICAgIGRlZiBtYWtlX2FkZGVyMih4KToKKyAgICAgICAgICAgIGRlZiBleHRyYSgpOiAjIGNoZWNrIGZyZWV2YXJzIHBhc3NpbmcgdGhyb3VnaCBub24tdXNlIHNjb3BlcworICAgICAgICAgICAgICAgIGRlZiBhZGRlcih5KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggKyB5CisgICAgICAgICAgICAgICAgcmV0dXJuIGFkZGVyCisgICAgICAgICAgICByZXR1cm4gZXh0cmEoKQorCisgICAgICAgIGluYyA9IG1ha2VfYWRkZXIyKDEpCisgICAgICAgIHBsdXMxMCA9IG1ha2VfYWRkZXIyKDEwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5jKDEpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsdXMxMCgtMiksIDgpCisKKyAgICBkZWYgdGVzdFNpbXBsZUFuZFJlYmluZGluZyhzZWxmKToKKworICAgICAgICBkZWYgbWFrZV9hZGRlcjMoeCk6CisgICAgICAgICAgICBkZWYgYWRkZXIoeSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHggKyB5CisgICAgICAgICAgICB4ID0geCArIDEgIyBjaGVjayB0cmFja2luZyBvZiBhc3NpZ25tZW50IHRvIHggaW4gZGVmaW5pbmcgc2NvcGUKKyAgICAgICAgICAgIHJldHVybiBhZGRlcgorCisgICAgICAgIGluYyA9IG1ha2VfYWRkZXIzKDApCisgICAgICAgIHBsdXMxMCA9IG1ha2VfYWRkZXIzKDkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmMoMSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGx1czEwKC0yKSwgOCkKKworICAgIGRlZiB0ZXN0TmVzdGluZ0dsb2JhbE5vRnJlZShzZWxmKToKKworICAgICAgICBkZWYgbWFrZV9hZGRlcjQoKTogIyBYWFggYWRkIGV4dGEgbGV2ZWwgb2YgaW5kaXJlY3Rpb24KKyAgICAgICAgICAgIGRlZiBuZXN0KCk6CisgICAgICAgICAgICAgICAgZGVmIG5lc3QoKToKKyAgICAgICAgICAgICAgICAgICAgZGVmIGFkZGVyKHkpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsb2JhbF94ICsgeSAjIGNoZWNrIHRoYXQgcGxhaW4gb2xkIGdsb2JhbHMgd29yaworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkZXIKKyAgICAgICAgICAgICAgICByZXR1cm4gbmVzdCgpCisgICAgICAgICAgICByZXR1cm4gbmVzdCgpCisKKyAgICAgICAgZ2xvYmFsX3ggPSAxCisgICAgICAgIGFkZGVyID0gbWFrZV9hZGRlcjQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZGVyKDEpLCAyKQorCisgICAgICAgIGdsb2JhbF94ID0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRlcigtMiksIDgpCisKKyAgICBkZWYgdGVzdE5lc3RpbmdUaHJvdWdoQ2xhc3Moc2VsZik6CisKKyAgICAgICAgZGVmIG1ha2VfYWRkZXI1KHgpOgorICAgICAgICAgICAgY2xhc3MgQWRkZXI6CisgICAgICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHkpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4geCArIHkKKyAgICAgICAgICAgIHJldHVybiBBZGRlcigpCisKKyAgICAgICAgaW5jID0gbWFrZV9hZGRlcjUoMSkKKyAgICAgICAgcGx1czEwID0gbWFrZV9hZGRlcjUoMTApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmMoMSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGx1czEwKC0yKSwgOCkKKworICAgIGRlZiB0ZXN0TmVzdGluZ1BsdXNGcmVlUmVmVG9HbG9iYWwoc2VsZik6CisKKyAgICAgICAgZGVmIG1ha2VfYWRkZXI2KHgpOgorICAgICAgICAgICAgZ2xvYmFsIGdsb2JhbF9uZXN0X3gKKyAgICAgICAgICAgIGRlZiBhZGRlcih5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsX25lc3RfeCArIHkKKyAgICAgICAgICAgIGdsb2JhbF9uZXN0X3ggPSB4CisgICAgICAgICAgICByZXR1cm4gYWRkZXIKKworICAgICAgICBpbmMgPSBtYWtlX2FkZGVyNigxKQorICAgICAgICBwbHVzMTAgPSBtYWtlX2FkZGVyNigxMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluYygxKSwgMTEpICMgdGhlcmUncyBvbmx5IG9uZSBnbG9iYWwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbHVzMTAoLTIpLCA4KQorCisgICAgZGVmIHRlc3ROZWFyZXN0RW5jbG9zaW5nU2NvcGUoc2VsZik6CisKKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICBkZWYgZyh5KToKKyAgICAgICAgICAgICAgICB4ID0gNDIgIyBjaGVjayB0aGF0IHRoaXMgbWFza3MgYmluZGluZyBpbiBmKCkKKyAgICAgICAgICAgICAgICBkZWYgaCh6KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggKyB6CisgICAgICAgICAgICAgICAgcmV0dXJuIGgKKyAgICAgICAgICAgIHJldHVybiBnKDIpCisKKyAgICAgICAgdGVzdF9mdW5jID0gZigxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X2Z1bmMoNSksIDQ3KQorCisgICAgZGVmIHRlc3RNaXhlZEZyZWV2YXJzQW5kQ2VsbHZhcnMoc2VsZik6CisKKyAgICAgICAgZGVmIGlkZW50aXR5KHgpOgorICAgICAgICAgICAgcmV0dXJuIHgKKworICAgICAgICBkZWYgZih4LCB5LCB6KToKKyAgICAgICAgICAgIGRlZiBnKGEsIGIsIGMpOgorICAgICAgICAgICAgICAgIGEgPSBhICsgeCAjIDMKKyAgICAgICAgICAgICAgICBkZWYgaCgpOgorICAgICAgICAgICAgICAgICAgICAjIHogKiAoNCArIDkpCisgICAgICAgICAgICAgICAgICAgICMgMyAqIDEzCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZGVudGl0eSh6ICogKGIgKyB5KSkKKyAgICAgICAgICAgICAgICB5ID0gYyArIHogIyA5CisgICAgICAgICAgICAgICAgcmV0dXJuIGgKKyAgICAgICAgICAgIHJldHVybiBnCisKKyAgICAgICAgZyA9IGYoMSwgMiwgMykKKyAgICAgICAgaCA9IGcoMiwgNCwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoKCksIDM5KQorCisgICAgZGVmIHRlc3RGcmVlVmFySW5NZXRob2Qoc2VsZik6CisKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIG1ldGhvZF9hbmRfdmFyID0gInZhciIKKyAgICAgICAgICAgIGNsYXNzIFRlc3Q6CisgICAgICAgICAgICAgICAgZGVmIG1ldGhvZF9hbmRfdmFyKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIm1ldGhvZCIKKyAgICAgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZF9hbmRfdmFyCisgICAgICAgICAgICAgICAgZGVmIGFjdHVhbF9nbG9iYWwoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHIoImdsb2JhbCIpCisgICAgICAgICAgICAgICAgZGVmIHN0cihzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cihzZWxmKQorICAgICAgICAgICAgcmV0dXJuIFRlc3QoKQorCisgICAgICAgIHQgPSB0ZXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRlc3QoKSwgInZhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5tZXRob2RfYW5kX3ZhcigpLCAibWV0aG9kIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmFjdHVhbF9nbG9iYWwoKSwgImdsb2JhbCIpCisKKyAgICAgICAgbWV0aG9kX2FuZF92YXIgPSAidmFyIgorICAgICAgICBjbGFzcyBUZXN0OgorICAgICAgICAgICAgIyB0aGlzIGNsYXNzIGlzIG5vdCBuZXN0ZWQsIHNvIHRoZSBydWxlcyBhcmUgZGlmZmVyZW50CisgICAgICAgICAgICBkZWYgbWV0aG9kX2FuZF92YXIoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJtZXRob2QiCisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kX2FuZF92YXIKKyAgICAgICAgICAgIGRlZiBhY3R1YWxfZ2xvYmFsKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdHIoImdsb2JhbCIpCisgICAgICAgICAgICBkZWYgc3RyKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdHIoc2VsZikKKworICAgICAgICB0ID0gVGVzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50ZXN0KCksICJ2YXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWV0aG9kX2FuZF92YXIoKSwgIm1ldGhvZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5hY3R1YWxfZ2xvYmFsKCksICJnbG9iYWwiKQorCisgICAgZGVmIHRlc3RSZWN1cnNpb24oc2VsZik6CisKKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICBkZWYgZmFjdChuKToKKyAgICAgICAgICAgICAgICBpZiBuID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gKiBmYWN0KG4gLSAxKQorICAgICAgICAgICAgaWYgeCA+PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWN0KHgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJ4IG11c3QgYmUgPj0gMCIKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoNiksIDcyMCkKKworCisgICAgZGVmIHRlc3RVbm9wdGltaXplZE5hbWVzcGFjZXMoc2VsZik6CisKKyAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICIiIlwKK2RlZiB1bm9wdGltaXplZF9jbGFzaDEoc3RyaXApOgorICAgIGRlZiBmKHMpOgorICAgICAgICBmcm9tIHN0cmluZyBpbXBvcnQgKgorICAgICAgICByZXR1cm4gc3RyaXAocykgIyBhbWJpZ3VpdHk6IGZyZWUgb3IgbG9jYWwKKyAgICByZXR1cm4gZgorIiIiKQorCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiIiJcCitkZWYgdW5vcHRpbWl6ZWRfY2xhc2gyKCk6CisgICAgZnJvbSBzdHJpbmcgaW1wb3J0ICoKKyAgICBkZWYgZihzKToKKyAgICAgICAgcmV0dXJuIHN0cmlwKHMpICMgYW1iaWd1aXR5OiBnbG9iYWwgb3IgbG9jYWwKKyAgICByZXR1cm4gZgorIiIiKQorCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiIiJcCitkZWYgdW5vcHRpbWl6ZWRfY2xhc2gyKCk6CisgICAgZnJvbSBzdHJpbmcgaW1wb3J0ICoKKyAgICBkZWYgZygpOgorICAgICAgICBkZWYgZihzKToKKyAgICAgICAgICAgIHJldHVybiBzdHJpcChzKSAjIGFtYmlndWl0eTogZ2xvYmFsIG9yIGxvY2FsCisgICAgICAgIHJldHVybiBmCisiIiIpCisKKyAgICAgICAgIyBYWFggY291bGQgYWxsb3cgdGhpcyBmb3IgZXhlYyB3aXRoIGNvbnN0IGFyZ3VtZW50LCBidXQgd2hhdCdzIHRoZSBwb2ludAorICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgIiIiXAorZGVmIGVycm9yKHkpOgorICAgIGV4ZWMgImEgPSAxIgorICAgIGRlZiBmKHgpOgorICAgICAgICByZXR1cm4geCArIHkKKyAgICByZXR1cm4gZgorIiIiKQorCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiIiJcCitkZWYgZih4KToKKyAgICBkZWYgZygpOgorICAgICAgICByZXR1cm4geAorICAgIGRlbCB4ICMgY2FuJ3QgZGVsIG5hbWUKKyIiIikKKworICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgIiIiXAorZGVmIGYoKToKKyAgICBkZWYgZygpOgorICAgICAgICBmcm9tIHN0cmluZyBpbXBvcnQgKgorICAgICAgICByZXR1cm4gc3RyaXAgIyBnbG9iYWwgb3IgbG9jYWw/CisiIiIpCisKKyAgICAgICAgIyBhbmQgdmVyaWZ5IGEgZmV3IGNhc2VzIHRoYXQgc2hvdWxkIHdvcmsKKworICAgICAgICBleGVjICIiIgorZGVmIG5vcHJvYmxlbTEoKToKKyAgICBmcm9tIHN0cmluZyBpbXBvcnQgKgorICAgIGYgPSBsYW1iZGEgeDp4CisKK2RlZiBub3Byb2JsZW0yKCk6CisgICAgZnJvbSBzdHJpbmcgaW1wb3J0ICoKKyAgICBkZWYgZih4KToKKyAgICAgICAgcmV0dXJuIHggKyAxCisKK2RlZiBub3Byb2JsZW0zKCk6CisgICAgZnJvbSBzdHJpbmcgaW1wb3J0ICoKKyAgICBkZWYgZih4KToKKyAgICAgICAgZ2xvYmFsIHkKKyAgICAgICAgeSA9IHgKKyIiIgorCisgICAgZGVmIHRlc3RMYW1iZGFzKHNlbGYpOgorCisgICAgICAgIGYxID0gbGFtYmRhIHg6IGxhbWJkYSB5OiB4ICsgeQorICAgICAgICBpbmMgPSBmMSgxKQorICAgICAgICBwbHVzMTAgPSBmMSgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmMoMSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGx1czEwKDUpLCAxNSkKKworICAgICAgICBmMiA9IGxhbWJkYSB4OiAobGFtYmRhIDogbGFtYmRhIHk6IHggKyB5KSgpCisgICAgICAgIGluYyA9IGYyKDEpCisgICAgICAgIHBsdXMxMCA9IGYyKDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluYygxKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbHVzMTAoNSksIDE1KQorCisgICAgICAgIGYzID0gbGFtYmRhIHg6IGxhbWJkYSB5OiBnbG9iYWxfeCArIHkKKyAgICAgICAgZ2xvYmFsX3ggPSAxCisgICAgICAgIGluYyA9IGYzKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5jKDIpLCAzKQorCisgICAgICAgIGY4ID0gbGFtYmRhIHgsIHksIHo6IGxhbWJkYSBhLCBiLCBjOiBsYW1iZGEgOiB6ICogKGIgKyB5KQorICAgICAgICBnID0gZjgoMSwgMiwgMykKKyAgICAgICAgaCA9IGcoMiwgNCwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoKCksIDE4KQorCisgICAgZGVmIHRlc3RVbmJvdW5kTG9jYWwoc2VsZik6CisKKyAgICAgICAgZGVmIGVycm9ySW5PdXRlcigpOgorICAgICAgICAgICAgcHJpbnQgeQorICAgICAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHkKKyAgICAgICAgICAgIHkgPSAxCisKKyAgICAgICAgZGVmIGVycm9ySW5Jbm5lcigpOgorICAgICAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHkKKyAgICAgICAgICAgIGlubmVyKCkKKyAgICAgICAgICAgIHkgPSAxCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5ib3VuZExvY2FsRXJyb3IsIGVycm9ySW5PdXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yLCBlcnJvckluSW5uZXIpCisKKyAgICAgICAgIyB0ZXN0IGZvciBidWcgIzE1MDE5MzQ6IGluY29ycmVjdCBMT0FEL1NUT1JFX0dMT0JBTCBnZW5lcmF0aW9uCisgICAgICAgIGV4ZWMgIiIiCitnbG9iYWxfeCA9IDEKK2RlZiBmKCk6CisgICAgZ2xvYmFsX3ggKz0gMQordHJ5OgorICAgIGYoKQorZXhjZXB0IFVuYm91bmRMb2NhbEVycm9yOgorICAgIHBhc3MKK2Vsc2U6CisgICAgZmFpbCgnc2NvcGUgb2YgZ2xvYmFsX3ggbm90IGNvcnJlY3RseSBkZXRlcm1pbmVkJykKKyIiIiBpbiB7J2ZhaWwnOiBzZWxmLmZhaWx9CisKKyAgICBkZWYgdGVzdENvbXBsZXhEZWZpbml0aW9ucyhzZWxmKToKKworICAgICAgICBkZWYgbWFrZVJldHVybmVyKCpsc3QpOgorICAgICAgICAgICAgZGVmIHJldHVybmVyKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxzdAorICAgICAgICAgICAgcmV0dXJuIHJldHVybmVyCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWtlUmV0dXJuZXIoMSwyLDMpKCksICgxLDIsMykpCisKKyAgICAgICAgZGVmIG1ha2VSZXR1cm5lcjIoKiprd2FyZ3MpOgorICAgICAgICAgICAgZGVmIHJldHVybmVyKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGt3YXJncworICAgICAgICAgICAgcmV0dXJuIHJldHVybmVyCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWtlUmV0dXJuZXIyKGE9MTEpKClbJ2EnXSwgMTEpCisKKyAgICAgICAgd2l0aCBjaGVja19weTNrX3dhcm5pbmdzKCgidHVwbGUgcGFyYW1ldGVyIHVucGFja2luZyBoYXMgYmVlbiByZW1vdmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW50YXhXYXJuaW5nKSk6CisgICAgICAgICAgICBleGVjICIiIlwKK2RlZiBtYWtlQWRkUGFpcigoYSwgYikpOgorICAgIGRlZiBhZGRQYWlyKChjLCBkKSk6CisgICAgICAgIHJldHVybiAoYSArIGMsIGIgKyBkKQorICAgIHJldHVybiBhZGRQYWlyCisiIiIgaW4gbG9jYWxzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWtlQWRkUGFpcigoMSwgMikpKCgxMDAsIDIwMCkpLCAoMTAxLDIwMikpCisKKyAgICBkZWYgdGVzdFNjb3BlT2ZHbG9iYWxTdG10KHNlbGYpOgorIyBFeGFtcGxlcyBwb3N0ZWQgYnkgU2FtdWVsZSBQZWRyb25pIHRvIHB5dGhvbi1kZXYgb24gMy8xLzIwMDEKKworICAgICAgICBleGVjICIiIlwKKyMgSQoreCA9IDcKK2RlZiBmKCk6CisgICAgeCA9IDEKKyAgICBkZWYgZygpOgorICAgICAgICBnbG9iYWwgeAorICAgICAgICBkZWYgaSgpOgorICAgICAgICAgICAgZGVmIGgoKToKKyAgICAgICAgICAgICAgICByZXR1cm4geAorICAgICAgICAgICAgcmV0dXJuIGgoKQorICAgICAgICByZXR1cm4gaSgpCisgICAgcmV0dXJuIGcoKQorc2VsZi5hc3NlcnRFcXVhbChmKCksIDcpCitzZWxmLmFzc2VydEVxdWFsKHgsIDcpCisKKyMgSUkKK3ggPSA3CitkZWYgZigpOgorICAgIHggPSAxCisgICAgZGVmIGcoKToKKyAgICAgICAgeCA9IDIKKyAgICAgICAgZGVmIGkoKToKKyAgICAgICAgICAgIGRlZiBoKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgICAgIHJldHVybiBoKCkKKyAgICAgICAgcmV0dXJuIGkoKQorICAgIHJldHVybiBnKCkKK3NlbGYuYXNzZXJ0RXF1YWwoZigpLCAyKQorc2VsZi5hc3NlcnRFcXVhbCh4LCA3KQorCisjIElJSQoreCA9IDcKK2RlZiBmKCk6CisgICAgeCA9IDEKKyAgICBkZWYgZygpOgorICAgICAgICBnbG9iYWwgeAorICAgICAgICB4ID0gMgorICAgICAgICBkZWYgaSgpOgorICAgICAgICAgICAgZGVmIGgoKToKKyAgICAgICAgICAgICAgICByZXR1cm4geAorICAgICAgICAgICAgcmV0dXJuIGgoKQorICAgICAgICByZXR1cm4gaSgpCisgICAgcmV0dXJuIGcoKQorc2VsZi5hc3NlcnRFcXVhbChmKCksIDIpCitzZWxmLmFzc2VydEVxdWFsKHgsIDIpCisKKyMgSVYKK3ggPSA3CitkZWYgZigpOgorICAgIHggPSAzCisgICAgZGVmIGcoKToKKyAgICAgICAgZ2xvYmFsIHgKKyAgICAgICAgeCA9IDIKKyAgICAgICAgZGVmIGkoKToKKyAgICAgICAgICAgIGRlZiBoKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgICAgIHJldHVybiBoKCkKKyAgICAgICAgcmV0dXJuIGkoKQorICAgIHJldHVybiBnKCkKK3NlbGYuYXNzZXJ0RXF1YWwoZigpLCAyKQorc2VsZi5hc3NlcnRFcXVhbCh4LCAyKQorCisjIFhYWCB3aGF0IGFib3V0IGdsb2JhbCBzdGF0ZW1lbnRzIGluIGNsYXNzIGJsb2Nrcz8KKyMgZG8gdGhleSBhZmZlY3QgbWV0aG9kcz8KKworeCA9IDEyCitjbGFzcyBHbG9iYWw6CisgICAgZ2xvYmFsIHgKKyAgICB4ID0gMTMKKyAgICBkZWYgc2V0KHNlbGYsIHZhbCk6CisgICAgICAgIHggPSB2YWwKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICByZXR1cm4geAorCitnID0gR2xvYmFsKCkKK3NlbGYuYXNzZXJ0RXF1YWwoZy5nZXQoKSwgMTMpCitnLnNldCgxNSkKK3NlbGYuYXNzZXJ0RXF1YWwoZy5nZXQoKSwgMTMpCisiIiIKKworICAgIGRlZiB0ZXN0TGVha3Moc2VsZik6CisKKyAgICAgICAgY2xhc3MgRm9vOgorICAgICAgICAgICAgY291bnQgPSAwCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBGb28uY291bnQgKz0gMQorCisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBGb28uY291bnQgLT0gMQorCisgICAgICAgIGRlZiBmMSgpOgorICAgICAgICAgICAgeCA9IEZvbygpCisgICAgICAgICAgICBkZWYgZjIoKToKKyAgICAgICAgICAgICAgICByZXR1cm4geAorICAgICAgICAgICAgZjIoKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICBmMSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28uY291bnQsIDApCisKKyAgICBkZWYgdGVzdENsYXNzQW5kR2xvYmFsKHNlbGYpOgorCisgICAgICAgIGV4ZWMgIiIiXAorZGVmIHRlc3QoeCk6CisgICAgY2xhc3MgRm9vOgorICAgICAgICBnbG9iYWwgeAorICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgeSk6CisgICAgICAgICAgICByZXR1cm4geCArIHkKKyAgICByZXR1cm4gRm9vKCkKKworeCA9IDAKK3NlbGYuYXNzZXJ0RXF1YWwodGVzdCg2KSgyKSwgOCkKK3ggPSAtMQorc2VsZi5hc3NlcnRFcXVhbCh0ZXN0KDMpKDIpLCA1KQorCitsb29rZWRfdXBfYnlfbG9hZF9uYW1lID0gRmFsc2UKK2NsYXNzIFg6CisgICAgIyBJbXBsaWNpdCBnbG9iYWxzIGluc2lkZSBjbGFzc2VzIGFyZSBiZSBsb29rZWQgdXAgYnkgTE9BRF9OQU1FLCBub3QKKyAgICAjIExPQURfR0xPQkFMLgorICAgIGxvY2FscygpWydsb29rZWRfdXBfYnlfbG9hZF9uYW1lJ10gPSBUcnVlCisgICAgcGFzc2VkID0gbG9va2VkX3VwX2J5X2xvYWRfbmFtZQorCitzZWxmLmFzc2VydFRydWUoWC5wYXNzZWQpCisiIiIKKworICAgIGRlZiB0ZXN0TG9jYWxzRnVuY3Rpb24oc2VsZik6CisKKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICBkZWYgZyh5KToKKyAgICAgICAgICAgICAgICBkZWYgaCh6KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHkgKyB6CisgICAgICAgICAgICAgICAgdyA9IHggKyB5CisgICAgICAgICAgICAgICAgeSArPSAzCisgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FscygpCisgICAgICAgICAgICByZXR1cm4gZworCisgICAgICAgIGQgPSBmKDIpKDQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2gnLCBkKQorICAgICAgICBkZWwgZFsnaCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeyd4JzogMiwgJ3knOiA3LCAndyc6IDZ9KQorCisgICAgZGVmIHRlc3RMb2NhbHNDbGFzcyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBjYWxsaW5nIGxvY2FscygpIGRvZXMgbm90IHBvbGx1dGUKKyAgICAgICAgIyB0aGUgbG9jYWwgbmFtZXNwYWNlIG9mIHRoZSBjbGFzcyB3aXRoIGZyZWUgdmFyaWFibGVzLiAgT2xkCisgICAgICAgICMgdmVyc2lvbnMgb2YgUHl0aG9uIGhhZCBhIGJ1Zywgd2hlcmUgYSBmcmVlIHZhcmlhYmxlIGJlaW5nCisgICAgICAgICMgcGFzc2VkIHRocm91Z2ggYSBjbGFzcyBuYW1lc3BhY2Ugd291bGQgYmUgaW5zZXJ0ZWQgaW50bworICAgICAgICAjIGxvY2FscygpIGJ5IGxvY2FscygpIG9yIGV4ZWMgb3IgYSB0cmFjZSBmdW5jdGlvbi4KKyAgICAgICAgIworICAgICAgICAjIFRoZSByZWFsIGJ1ZyBsaWVzIGluIGZyYW1lIGNvZGUgdGhhdCBjb3BpZXMgdmFyaWFibGVzCisgICAgICAgICMgYmV0d2VlbiBmYXN0IGxvY2FscyBhbmQgdGhlIGxvY2FscyBkaWN0LCBlLmcuIHdoZW4gZXhlY3V0aW5nCisgICAgICAgICMgYSB0cmFjZSBmdW5jdGlvbi4KKworICAgICAgICBkZWYgZih4KToKKyAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgeCA9IDEyCisgICAgICAgICAgICAgICAgZGVmIG0oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgICAgICAgICAgbG9jYWxzKCkKKyAgICAgICAgICAgIHJldHVybiBDCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKDEpLngsIDEyKQorCisgICAgICAgIGRlZiBmKHgpOgorICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICB5ID0geAorICAgICAgICAgICAgICAgIGRlZiBtKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4geAorICAgICAgICAgICAgICAgIHogPSBsaXN0KGxvY2FscygpKQorICAgICAgICAgICAgcmV0dXJuIEMKKworICAgICAgICB2YXJuYW1lcyA9IGYoMSkuegorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJ4IiwgdmFybmFtZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInkiLCB2YXJuYW1lcykKKworICAgIGRlZiB0ZXN0TG9jYWxzQ2xhc3NfV2l0aFRyYWNlKHNlbGYpOgorICAgICAgICAjIElzc3VlMjM3Mjg6IGFmdGVyIHRoZSB0cmFjZSBmdW5jdGlvbiByZXR1cm5zLCB0aGUgbG9jYWxzKCkKKyAgICAgICAgIyBkaWN0aW9uYXJ5IGlzIHVzZWQgdG8gdXBkYXRlIGFsbCB2YXJpYWJsZXMsIHRoaXMgdXNlZCB0bworICAgICAgICAjIGluY2x1ZGUgZnJlZSB2YXJpYWJsZXMuIEJ1dCBpbiBjbGFzcyBzdGF0ZW1lbnRzLCBmcmVlCisgICAgICAgICMgdmFyaWFibGVzIGFyZSBub3QgaW5zZXJ0ZWQuLi4KKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBzeXMuc2V0dHJhY2UobGFtYmRhIGEsYixjOk5vbmUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHggPSAxMgorCisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgIGRlZiBmKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4geAorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDEyKSAjIFVzZWQgdG8gcmFpc2UgVW5ib3VuZExvY2FsRXJyb3IKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQorCisgICAgZGVmIHRlc3RCb3VuZEFuZEZyZWUoc2VsZik6CisgICAgICAgICMgdmFyIGlzIGJvdW5kIGFuZCBmcmVlIGluIGNsYXNzCisKKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgIGRlZiBtKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4geAorICAgICAgICAgICAgICAgIGEgPSB4CisgICAgICAgICAgICByZXR1cm4gQworCisgICAgICAgIGluc3QgPSBmKDMpKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnN0LmEsIGluc3QubSgpKQorCisgICAgZGVmIHRlc3RJbnRlcmFjdGlvbldpdGhUcmFjZUZ1bmMoc2VsZik6CisKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBkZWYgdHJhY2VyKGEsYixjKToKKyAgICAgICAgICAgIHJldHVybiB0cmFjZXIKKworICAgICAgICBkZWYgYWRhcHRnZXR0ZXIobmFtZSwga2xhc3MsIGdldHRlcik6CisgICAgICAgICAgICBraW5kLCBkZXMgPSBnZXR0ZXIKKyAgICAgICAgICAgIGlmIGtpbmQgPT0gMTogICAgICAgIyBBViBoYXBwZW5zIHdoZW4gc3RlcHBpbmcgZnJvbSB0aGlzIGxpbmUgdG8gbmV4dAorICAgICAgICAgICAgICAgIGlmIGRlcyA9PSAiIjoKKyAgICAgICAgICAgICAgICAgICAgZGVzID0gIl8lc19fJXMiICUgKGtsYXNzLl9fbmFtZV9fLCBuYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBsYW1iZGEgb2JqOiBnZXRhdHRyKG9iaiwgZGVzKQorCisgICAgICAgIGNsYXNzIFRlc3RDbGFzczoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzeXMuc2V0dHJhY2UodHJhY2VyKQorICAgICAgICBhZGFwdGdldHRlcigiZm9vIiwgVGVzdENsYXNzLCAoMSwgIiIpKQorICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5zZXR0cmFjZSkKKworICAgIGRlZiB0ZXN0RXZhbEV4ZWNGcmVlVmFycyhzZWxmKToKKworICAgICAgICBkZWYgZih4KToKKyAgICAgICAgICAgIHJldHVybiBsYW1iZGE6IHggKyAxCisKKyAgICAgICAgZyA9IGYoMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCBnLmZ1bmNfY29kZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBleGVjIGcuZnVuY19jb2RlIGluIHt9CisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4ZWMgc2hvdWxkIGhhdmUgZmFpbGVkLCBiZWNhdXNlIGNvZGUgY29udGFpbmVkIGZyZWUgdmFycyIpCisKKyAgICBkZWYgdGVzdExpc3RDb21wTG9jYWxWYXJzKHNlbGYpOgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaW50IGJhZAorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgImJhZCBzaG91bGQgbm90IGJlIGRlZmluZWQiCisKKyAgICAgICAgZGVmIHgoKToKKyAgICAgICAgICAgIFtiYWQgZm9yIHMgaW4gJ2EgYicgZm9yIGJhZCBpbiBzLnNwbGl0KCldCisKKyAgICAgICAgeCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaW50IGJhZAorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RFdmFsRnJlZVZhcnMoc2VsZik6CisKKyAgICAgICAgZGVmIGYoeCk6CisgICAgICAgICAgICBkZWYgZygpOgorICAgICAgICAgICAgICAgIHgKKyAgICAgICAgICAgICAgICBldmFsKCJ4ICsgMSIpCisgICAgICAgICAgICByZXR1cm4gZworCisgICAgICAgIGYoNCkoKQorCisgICAgZGVmIHRlc3RGcmVlaW5nQ2VsbChzZWxmKToKKyAgICAgICAgIyBUZXN0IHdoYXQgaGFwcGVucyB3aGVuIGEgZmluYWxpemVyIGFjY2Vzc2VzCisgICAgICAgICMgdGhlIGNlbGwgd2hlcmUgdGhlIG9iamVjdCB3YXMgc3RvcmVkLgorICAgICAgICBjbGFzcyBTcGVjaWFsOgorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgbmVzdGVkY2VsbF9nZXQoKQorCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBnbG9iYWwgbmVzdGVkY2VsbF9nZXQKKyAgICAgICAgICAgIGRlZiBuZXN0ZWRjZWxsX2dldCgpOgorICAgICAgICAgICAgICAgIHJldHVybiBjCisKKyAgICAgICAgICAgIGMgPSAoU3BlY2lhbCgpLCkKKyAgICAgICAgICAgIGMgPSAyCisKKyAgICAgICAgZigpICMgdXNlZCB0byBjcmFzaCB0aGUgaW50ZXJwcmV0ZXIuLi4KKworICAgIGRlZiB0ZXN0R2xvYmFsSW5QYXJhbGxlbE5lc3RlZEZ1bmN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBBIHN5bWJvbCB0YWJsZSBidWcgbGVha2VkIHRoZSBnbG9iYWwgc3RhdGVtZW50IGZyb20gb25lCisgICAgICAgICMgZnVuY3Rpb24gdG8gb3RoZXIgbmVzdGVkIGZ1bmN0aW9ucyBpbiB0aGUgc2FtZSBibG9jay4KKyAgICAgICAgIyBUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBhIGdsb2JhbCBzdGF0ZW1lbnQgaW4gdGhlIGZpcnN0CisgICAgICAgICMgZnVuY3Rpb24gZG9lcyBub3QgYWZmZWN0IHRoZSBzZWNvbmQgZnVuY3Rpb24uCisgICAgICAgIENPREUgPSAiIiJkZWYgZigpOgorICAgIHkgPSAxCisgICAgZGVmIGcoKToKKyAgICAgICAgZ2xvYmFsIHkKKyAgICAgICAgcmV0dXJuIHkKKyAgICBkZWYgaCgpOgorICAgICAgICByZXR1cm4geSArIDEKKyAgICByZXR1cm4gZywgaAorCit5ID0gOQorZywgaCA9IGYoKQorcmVzdWx0OSA9IGcoKQorcmVzdWx0MiA9IGgoKQorIiIiCisgICAgICAgIGxvY2FsX25zID0ge30KKyAgICAgICAgZ2xvYmFsX25zID0ge30KKyAgICAgICAgZXhlYyBDT0RFIGluIGxvY2FsX25zLCBnbG9iYWxfbnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBnbG9iYWxfbnNbInJlc3VsdDIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5LCBnbG9iYWxfbnNbInJlc3VsdDkiXSkKKworICAgIGRlZiB0ZXN0VG9wSXNOb3RTaWduaWZpY2FudChzZWxmKToKKyAgICAgICAgIyBTZWUgIzk5OTcuCisgICAgICAgIGRlZiB0b3AoYSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBiKCk6CisgICAgICAgICAgICBnbG9iYWwgYQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgiaW1wb3J0IFwqIG9ubHkgYWxsb3dlZCBhdCBtb2R1bGUgbGV2ZWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFN5bnRheFdhcm5pbmcpKToKKyAgICAgICAgcnVuX3VuaXR0ZXN0KFNjb3BlVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NjcmlwdHBhY2thZ2VzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc2NyaXB0cGFja2FnZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UwMmZhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NjcmlwdHBhY2thZ2VzLnB5CkBAIC0wLDAgKzEsNTEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBTa2lwIHRoaXMgdGVzdCBpZiBhZXRvb2xzIGRvZXMgbm90IGV4aXN0LgordGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2FldG9vbHMnKQorCitjbGFzcyBUZXN0U2NyaXB0cGFja2FnZXModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF90ZXN0X3NjcmlwdHBhY2thZ2Uoc2VsZiwgcGFja2FnZSwgdGVzdG9iamVjdD0xKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHdlIGNhbiBpbXBvcnQgdGhlIHBhY2thZ2UKKyAgICAgICAgbW9kID0gX19pbXBvcnRfXyhwYWNrYWdlKQorICAgICAgICAjIFRlc3QgdGhhdCB3ZSBjYW4gZ2V0IHRoZSBtYWluIGV2ZW50IGNsYXNzCisgICAgICAgIGtsYXNzID0gZ2V0YXR0cihtb2QsIHBhY2thZ2UpCisgICAgICAgICMgVGVzdCB0aGF0IHdlIGNhbiBpbnN0YW50aWF0ZSB0aGF0IGNsYXNzCisgICAgICAgIHRhbGtlciA9IGtsYXNzKCkKKyAgICAgICAgaWYgdGVzdG9iamVjdDoKKyAgICAgICAgICAgICMgVGVzdCB0aGF0IHdlIGNhbiBnZXQgYW4gYXBwbGljYXRpb24gb2JqZWN0CisgICAgICAgICAgICBvYmogPSBtb2QuYXBwbGljYXRpb24oMCkKKworICAgIGRlZiB0ZXN0X19idWlsdGluU3VpdGVzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NjcmlwdHBhY2thZ2UoJ19idWlsdGluU3VpdGVzJywgdGVzdG9iamVjdD0wKQorCisgICAgZGVmIHRlc3RfU3RkU3VpdGVzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NjcmlwdHBhY2thZ2UoJ1N0ZFN1aXRlcycpCisKKyAgICBkZWYgdGVzdF9TeXN0ZW1FdmVudHMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2NyaXB0cGFja2FnZSgnU3lzdGVtRXZlbnRzJykKKworICAgIGRlZiB0ZXN0X0ZpbmRlcihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zY3JpcHRwYWNrYWdlKCdGaW5kZXInKQorCisgICAgZGVmIHRlc3RfVGVybWluYWwoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2NyaXB0cGFja2FnZSgnVGVybWluYWwnKQorCisgICAgZGVmIHRlc3RfTmV0c2NhcGUoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2NyaXB0cGFja2FnZSgnTmV0c2NhcGUnKQorCisgICAgZGVmIHRlc3RfRXhwbG9yZXIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2NyaXB0cGFja2FnZSgnRXhwbG9yZXInKQorCisgICAgZGVmIHRlc3RfQ29kZVdhcnJpb3Ioc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2NyaXB0cGFja2FnZSgnQ29kZVdhcnJpb3InKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0U2NyaXB0cGFja2FnZXMpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc2VsZWN0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc2VsZWN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NWJiZGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zZWxlY3QucHkKQEAgLTAsMCArMSw2NyBAQAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHNlbGVjdAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtWzozXSBpbiAoJ3dpbicsICdvczInLCAncmlzY29zJyksCisgICAgICAgICAgICAgICAgICJjYW4ndCBlYXNpbHkgdGVzdCBvbiB0aGlzIHN5c3RlbSIpCitjbGFzcyBTZWxlY3RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBOb3BlOgorICAgICAgICBwYXNzCisKKyAgICBjbGFzcyBBbG1vc3Q6CisgICAgICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gJ2ZpbGVubycKKworICAgIGRlZiB0ZXN0X2Vycm9yX2NvbmRpdGlvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LnNlbGVjdCwgMSwgMiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxlY3Quc2VsZWN0LCBbc2VsZi5Ob3BlKCldLCBbXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LnNlbGVjdCwgW3NlbGYuQWxtb3N0KCldLCBbXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LnNlbGVjdCwgW10sIFtdLCBbXSwgIm5vdCBhIG51bWJlciIpCisKKyAgICBkZWYgdGVzdF9yZXR1cm5lZF9saXN0X2lkZW50aXR5KHNlbGYpOgorICAgICAgICAjIFNlZSBpc3N1ZSAjODMyOQorICAgICAgICByLCB3LCB4ID0gc2VsZWN0LnNlbGVjdChbXSwgW10sIFtdLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHIsIHcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QociwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh3LCB4KQorCisgICAgZGVmIHRlc3Rfc2VsZWN0KHNlbGYpOgorICAgICAgICBjbWQgPSAnZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsgZG8gZWNobyB0ZXN0aW5nLi4uOyBzbGVlcCAxOyBkb25lJworICAgICAgICBwID0gb3MucG9wZW4oY21kLCAncicpCisgICAgICAgIGZvciB0b3V0IGluICgwLCAxLCAyLCA0LCA4LCAxNikgKyAoTm9uZSwpKjEwOgorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ3RpbWVvdXQgPScsIHRvdXQKKyAgICAgICAgICAgIHJmZCwgd2ZkLCB4ZmQgPSBzZWxlY3Quc2VsZWN0KFtwXSwgW10sIFtdLCB0b3V0KQorICAgICAgICAgICAgaWYgKHJmZCwgd2ZkLCB4ZmQpID09IChbXSwgW10sIFtdKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgKHJmZCwgd2ZkLCB4ZmQpID09IChbcF0sIFtdLCBbXSk6CisgICAgICAgICAgICAgICAgbGluZSA9IHAucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCByZXByKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ0VPRicKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIHJldHVybiB2YWx1ZXMgZnJvbSBzZWxlY3QoKTonLCByZmQsIHdmZCwgeGZkKQorICAgICAgICBwLmNsb3NlKCkKKworICAgICMgSXNzdWUgMTYyMzA6IENyYXNoIG9uIHNlbGVjdCByZXNpemVkIGxpc3QKKyAgICBkZWYgdGVzdF9zZWxlY3RfbXV0YXRlZChzZWxmKToKKyAgICAgICAgYSA9IFtdCisgICAgICAgIGNsYXNzIEY6CisgICAgICAgICAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgICAgIGRlbCBhWy0xXQorICAgICAgICAgICAgICAgIHJldHVybiBzeXMuX19zdGRvdXRfXy5maWxlbm8oKQorICAgICAgICBhWzpdID0gW0YoKV0gKiAxMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGVjdC5zZWxlY3QoW10sIGEsIFtdKSwgKFtdLCBhWzo1XSwgW10pKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTZWxlY3RUZXN0Q2FzZSkKKyAgICB0ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NldC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NldC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGIyNmVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc2V0LnB5CkBAIC0wLDAgKzEsMTgzMiBAQAorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgZ2MKK2ltcG9ydCB3ZWFrcmVmCitpbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCBjb3B5CitpbXBvcnQgcGlja2xlCitmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZHJhbmdlLCBzaHVmZmxlCitpbXBvcnQgc3lzCitpbXBvcnQgY29sbGVjdGlvbnMKKworY2xhc3MgUGFzc1RocnUoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2RlZiBjaGVja19wYXNzX3RocnUoKToKKyAgICByYWlzZSBQYXNzVGhydQorICAgIHlpZWxkIDEKKworY2xhc3MgQmFkQ21wOgorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDEKKyAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorCitjbGFzcyBSZXByV3JhcHBlcjoKKyAgICAnVXNlZCB0byB0ZXN0IHNlbGYtcmVmZXJlbnRpYWwgcmVwcigpIGNhbGxzJworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHJlcHIoc2VsZi52YWx1ZSkKKworY2xhc3MgSGFzaENvdW50aW5nSW50KGludCk6CisgICAgJ2ludC1saWtlIG9iamVjdCB0aGF0IGNvdW50cyB0aGUgbnVtYmVyIG9mIHRpbWVzIF9faGFzaF9fIGlzIGNhbGxlZCcKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmhhc2hfY291bnQgPSAwCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICBzZWxmLmhhc2hfY291bnQgKz0gMQorICAgICAgICByZXR1cm4gaW50Ll9faGFzaF9fKHNlbGYpCisKK2NsYXNzIFRlc3RKb2ludE9wcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0cyBjb21tb24gdG8gYm90aCBzZXQgYW5kIGZyb3plbnNldAorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLndvcmQgPSB3b3JkID0gJ3NpbXNhbGFiaW0nCisgICAgICAgIHNlbGYub3RoZXJ3b3JkID0gJ21hZGFnYXNjYXInCisgICAgICAgIHNlbGYubGV0dGVycyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworICAgICAgICBzZWxmLnMgPSBzZWxmLnRoZXR5cGUod29yZCkKKyAgICAgICAgc2VsZi5kID0gZGljdC5mcm9ta2V5cyh3b3JkKQorCisgICAgZGVmIHRlc3RfbmV3X29yX2luaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50aGV0eXBlLCBbXSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXQoKS5fX2luaXRfXywgYT0xKQorCisgICAgZGVmIHRlc3RfdW5pcXVpZmljYXRpb24oc2VsZik6CisgICAgICAgIGFjdHVhbCA9IHNvcnRlZChzZWxmLnMpCisgICAgICAgIGV4cGVjdGVkID0gc29ydGVkKHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQYXNzVGhydSwgc2VsZi50aGV0eXBlLCBjaGVja19wYXNzX3RocnUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnRoZXR5cGUsIFtbXV0pCisKKyAgICBkZWYgdGVzdF9sZW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYucyksIGxlbihzZWxmLmQpKQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIGZvciBjIGluIHNlbGYubGV0dGVyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYyBpbiBzZWxmLnMsIGMgaW4gc2VsZi5kKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5fX2NvbnRhaW5zX18sIFtbXV0pCisgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoW2Zyb3plbnNldChzZWxmLmxldHRlcnMpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLnRoZXR5cGUoc2VsZi5sZXR0ZXJzKSwgcykKKworICAgIGRlZiB0ZXN0X3VuaW9uKHNlbGYpOgorICAgICAgICB1ID0gc2VsZi5zLnVuaW9uKHNlbGYub3RoZXJ3b3JkKQorICAgICAgICBmb3IgYyBpbiBzZWxmLmxldHRlcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMgaW4gdSwgYyBpbiBzZWxmLmQgb3IgYyBpbiBzZWxmLm90aGVyd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIHNlbGYudGhldHlwZShzZWxmLndvcmQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodSksIHNlbGYudGhldHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUGFzc1RocnUsIHNlbGYucy51bmlvbiwgY2hlY2tfcGFzc190aHJ1KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnVuaW9uLCBbW11dKQorICAgICAgICBmb3IgQyBpbiBzZXQsIGZyb3plbnNldCwgZGljdC5mcm9ta2V5cywgc3RyLCB1bmljb2RlLCBsaXN0LCB0dXBsZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKCdhYmNiYScpLnVuaW9uKEMoJ2NkYycpKSwgc2V0KCdhYmNkJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZSgnYWJjYmEnKS51bmlvbihDKCdlZmdmZScpKSwgc2V0KCdhYmNlZmcnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKCdhYmNiYScpLnVuaW9uKEMoJ2NjYicpKSwgc2V0KCdhYmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKCdhYmNiYScpLnVuaW9uKEMoJ2VmJykpLCBzZXQoJ2FiY2VmJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZSgnYWJjYmEnKS51bmlvbihDKCdlZicpLCBDKCdmZycpKSwgc2V0KCdhYmNlZmcnKSkKKworICAgICAgICAjIElzc3VlICM2NTczCisgICAgICAgIHggPSBzZWxmLnRoZXR5cGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudW5pb24oc2V0KFsxXSksIHgsIHNldChbMl0pKSwgc2VsZi50aGV0eXBlKFsxLCAyXSkpCisKKyAgICBkZWYgdGVzdF9vcihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucy51bmlvbihzZWxmLm90aGVyd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgfCBzZXQoc2VsZi5vdGhlcndvcmQpLCBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyB8IGZyb3plbnNldChzZWxmLm90aGVyd29yZCksIGkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucyB8IHNlbGYub3RoZXJ3b3JkCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInN8dCBkaWQgbm90IHNjcmVlbi1vdXQgZ2VuZXJhbCBpdGVyYWJsZXMiKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5zLmludGVyc2VjdGlvbihzZWxmLm90aGVyd29yZCkKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5sZXR0ZXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjIGluIGksIGMgaW4gc2VsZi5kIGFuZCBjIGluIHNlbGYub3RoZXJ3b3JkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucywgc2VsZi50aGV0eXBlKHNlbGYud29yZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpKSwgc2VsZi50aGV0eXBlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQYXNzVGhydSwgc2VsZi5zLmludGVyc2VjdGlvbiwgY2hlY2tfcGFzc190aHJ1KCkpCisgICAgICAgIGZvciBDIGluIHNldCwgZnJvemVuc2V0LCBkaWN0LmZyb21rZXlzLCBzdHIsIHVuaWNvZGUsIGxpc3QsIHR1cGxlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoJ2FiY2JhJykuaW50ZXJzZWN0aW9uKEMoJ2NkYycpKSwgc2V0KCdjYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoJ2FiY2JhJykuaW50ZXJzZWN0aW9uKEMoJ2VmZ2ZlJykpLCBzZXQoJycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoJ2FiY2JhJykuaW50ZXJzZWN0aW9uKEMoJ2NjYicpKSwgc2V0KCdiYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoJ2FiY2JhJykuaW50ZXJzZWN0aW9uKEMoJ2VmJykpLCBzZXQoJycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoJ2FiY2JhJykuaW50ZXJzZWN0aW9uKEMoJ2NiY2YnKSwgQygnYmFnJykpLCBzZXQoJ2InKSkKKyAgICAgICAgcyA9IHNlbGYudGhldHlwZSgnYWJjYmEnKQorICAgICAgICB6ID0gcy5pbnRlcnNlY3Rpb24oKQorICAgICAgICBpZiBzZWxmLnRoZXR5cGUgPT0gZnJvemVuc2V0KCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKHMpLCBpZCh6KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQocyksIGlkKHopKQorCisgICAgZGVmIHRlc3RfaXNkaXNqb2ludChzZWxmKToKKyAgICAgICAgZGVmIGYoczEsIHMyKToKKyAgICAgICAgICAgICdQdXJlIHB5dGhvbiBlcXVpdmFsZW50IG9mIGlzZGlzam9pbnQoKScKKyAgICAgICAgICAgIHJldHVybiBub3Qgc2V0KHMxKS5pbnRlcnNlY3Rpb24oczIpCisgICAgICAgIGZvciBsYXJnIGluICcnLCAnYScsICdhYicsICdhYmMnLCAnYWJhYmFjJywgJ2NkYycsICdjYycsICdlZmdmZScsICdjY2InLCAnZWYnOgorICAgICAgICAgICAgczEgPSBzZWxmLnRoZXR5cGUobGFyZykKKyAgICAgICAgICAgIGZvciByYXJnIGluICcnLCAnYScsICdhYicsICdhYmMnLCAnYWJhYmFjJywgJ2NkYycsICdjYycsICdlZmdmZScsICdjY2InLCAnZWYnOgorICAgICAgICAgICAgICAgIGZvciBDIGluIHNldCwgZnJvemVuc2V0LCBkaWN0LmZyb21rZXlzLCBzdHIsIHVuaWNvZGUsIGxpc3QsIHR1cGxlOgorICAgICAgICAgICAgICAgICAgICBzMiA9IEMocmFyZykKKyAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gczEuaXNkaXNqb2ludChzMikKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBmKHMxLCBzMikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYWN0dWFsIGlzIFRydWUgb3IgYWN0dWFsIGlzIEZhbHNlKQorCisgICAgZGVmIHRlc3RfYW5kKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5zLmludGVyc2VjdGlvbihzZWxmLm90aGVyd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgJiBzZXQoc2VsZi5vdGhlcndvcmQpLCBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyAmIGZyb3plbnNldChzZWxmLm90aGVyd29yZCksIGkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucyAmIHNlbGYub3RoZXJ3b3JkCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInMmdCBkaWQgbm90IHNjcmVlbi1vdXQgZ2VuZXJhbCBpdGVyYWJsZXMiKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW5jZShzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucy5kaWZmZXJlbmNlKHNlbGYub3RoZXJ3b3JkKQorICAgICAgICBmb3IgYyBpbiBzZWxmLmxldHRlcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMgaW4gaSwgYyBpbiBzZWxmLmQgYW5kIGMgbm90IGluIHNlbGYub3RoZXJ3b3JkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucywgc2VsZi50aGV0eXBlKHNlbGYud29yZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpKSwgc2VsZi50aGV0eXBlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQYXNzVGhydSwgc2VsZi5zLmRpZmZlcmVuY2UsIGNoZWNrX3Bhc3NfdGhydSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5kaWZmZXJlbmNlLCBbW11dKQorICAgICAgICBmb3IgQyBpbiBzZXQsIGZyb3plbnNldCwgZGljdC5mcm9ta2V5cywgc3RyLCB1bmljb2RlLCBsaXN0LCB0dXBsZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKCdhYmNiYScpLmRpZmZlcmVuY2UoQygnY2RjJykpLCBzZXQoJ2FiJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZSgnYWJjYmEnKS5kaWZmZXJlbmNlKEMoJ2VmZ2ZlJykpLCBzZXQoJ2FiYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoJ2FiY2JhJykuZGlmZmVyZW5jZShDKCdjY2InKSksIHNldCgnYScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoJ2FiY2JhJykuZGlmZmVyZW5jZShDKCdlZicpKSwgc2V0KCdhYmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKCdhYmNiYScpLmRpZmZlcmVuY2UoKSwgc2V0KCdhYmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKCdhYmNiYScpLmRpZmZlcmVuY2UoQygnYScpLCBDKCdiJykpLCBzZXQoJ2MnKSkKKworICAgIGRlZiB0ZXN0X3N1YihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucy5kaWZmZXJlbmNlKHNlbGYub3RoZXJ3b3JkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyAtIHNldChzZWxmLm90aGVyd29yZCksIGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zIC0gZnJvemVuc2V0KHNlbGYub3RoZXJ3b3JkKSwgaSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zIC0gc2VsZi5vdGhlcndvcmQKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicy10IGRpZCBub3Qgc2NyZWVuLW91dCBnZW5lcmFsIGl0ZXJhYmxlcyIpCisKKyAgICBkZWYgdGVzdF9zeW1tZXRyaWNfZGlmZmVyZW5jZShzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZShzZWxmLm90aGVyd29yZCkKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5sZXR0ZXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjIGluIGksIChjIGluIHNlbGYuZCkgXiAoYyBpbiBzZWxmLm90aGVyd29yZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGkpLCBzZWxmLnRoZXR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFBhc3NUaHJ1LCBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2UsIGNoZWNrX3Bhc3NfdGhydSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZSwgW1tdXSkKKyAgICAgICAgZm9yIEMgaW4gc2V0LCBmcm96ZW5zZXQsIGRpY3QuZnJvbWtleXMsIHN0ciwgdW5pY29kZSwgbGlzdCwgdHVwbGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZSgnYWJjYmEnKS5zeW1tZXRyaWNfZGlmZmVyZW5jZShDKCdjZGMnKSksIHNldCgnYWJkJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZSgnYWJjYmEnKS5zeW1tZXRyaWNfZGlmZmVyZW5jZShDKCdlZmdmZScpKSwgc2V0KCdhYmNlZmcnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKCdhYmNiYScpLnN5bW1ldHJpY19kaWZmZXJlbmNlKEMoJ2NjYicpKSwgc2V0KCdhJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZSgnYWJjYmEnKS5zeW1tZXRyaWNfZGlmZmVyZW5jZShDKCdlZicpKSwgc2V0KCdhYmNlZicpKQorCisgICAgZGVmIHRlc3RfeG9yKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlKHNlbGYub3RoZXJ3b3JkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyBeIHNldChzZWxmLm90aGVyd29yZCksIGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zIF4gZnJvemVuc2V0KHNlbGYub3RoZXJ3b3JkKSwgaSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zIF4gc2VsZi5vdGhlcndvcmQKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic150IGRpZCBub3Qgc2NyZWVuLW91dCBnZW5lcmFsIGl0ZXJhYmxlcyIpCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIHNldChzZWxmLndvcmQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucywgZnJvemVuc2V0KHNlbGYud29yZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zID09IHNlbGYud29yZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5zLCBzZXQoc2VsZi5vdGhlcndvcmQpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYucywgZnJvemVuc2V0KHNlbGYub3RoZXJ3b3JkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgIT0gc2VsZi53b3JkLCBUcnVlKQorCisgICAgZGVmIHRlc3Rfc2V0T2ZGcm96ZW5zZXRzKHNlbGYpOgorICAgICAgICB0ID0gbWFwKGZyb3plbnNldCwgWydhYmNkZWYnLCAnYmNkJywgJ2JkY2InLCAnZmVkJywgJ2ZlZGNjYmEnXSkKKyAgICAgICAgcyA9IHNlbGYudGhldHlwZSh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgMykKKworICAgIGRlZiB0ZXN0X2NvbXBhcmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLl9fY21wX18sIHNlbGYucykKKworICAgIGRlZiB0ZXN0X3N1Yl9hbmRfc3VwZXIoc2VsZik6CisgICAgICAgIHAsIHEsIHIgPSBtYXAoc2VsZi50aGV0eXBlLCBbJ2FiJywgJ2FiY2RlJywgJ2RlZiddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocCA8IHEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwIDw9IHEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxIDw9IHEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxID4gcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEgPj0gcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShxIDwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShxIDw9IHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocSA+IHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocSA+PSByKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2V0KCdhJykuaXNzdWJzZXQoJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2V0KCdhYmMnKS5pc3N1cGVyc2V0KCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2V0KCdhJykuaXNzdWJzZXQoJ2NicycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNldCgnY2JzJykuaXNzdXBlcnNldCgnYScpKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIGZvciBpIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwID0gcGlja2xlLmR1bXBzKHNlbGYucywgaSkKKyAgICAgICAgICAgIGR1cCA9IHBpY2tsZS5sb2FkcyhwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIGR1cCwgIiVzICE9ICVzIiAlIChzZWxmLnMsIGR1cCkpCisgICAgICAgICAgICBpZiB0eXBlKHNlbGYucykgbm90IGluIChzZXQsIGZyb3plbnNldCk6CisgICAgICAgICAgICAgICAgc2VsZi5zLnggPSAxMAorICAgICAgICAgICAgICAgIHAgPSBwaWNrbGUuZHVtcHMoc2VsZi5zKQorICAgICAgICAgICAgICAgIGR1cCA9IHBpY2tsZS5sb2FkcyhwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLngsIGR1cC54KQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHkoc2VsZik6CisgICAgICAgIGNsYXNzIFRyYWNlcjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2RlZXBjb3B5X18oc2VsZiwgbWVtbz1Ob25lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJhY2VyKHNlbGYudmFsdWUgKyAxKQorICAgICAgICB0ID0gVHJhY2VyKDEwKQorICAgICAgICBzID0gc2VsZi50aGV0eXBlKFt0XSkKKyAgICAgICAgZHVwID0gY29weS5kZWVwY29weShzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHMpLCBpZChkdXApKQorICAgICAgICBmb3IgZWxlbSBpbiBkdXA6CisgICAgICAgICAgICBuZXd0ID0gZWxlbQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHQpLCBpZChuZXd0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnZhbHVlICsgMSwgbmV3dC52YWx1ZSkKKworICAgIGRlZiB0ZXN0X2djKHNlbGYpOgorICAgICAgICAjIENyZWF0ZSBhIG5lc3Qgb2YgY3ljbGVzIHRvIGV4ZXJjaXNlIG92ZXJhbGwgcmVmIGNvdW50IGNoZWNrCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHMgPSBzZXQoQSgpIGZvciBpIGluIHhyYW5nZSgxMDAwKSkKKyAgICAgICAgZm9yIGVsZW0gaW4gczoKKyAgICAgICAgICAgIGVsZW0uY3ljbGUgPSBzCisgICAgICAgICAgICBlbGVtLnN1YiA9IGVsZW0KKyAgICAgICAgICAgIGVsZW0uc2V0ID0gc2V0KFtlbGVtXSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3dpdGhfY3VzdG9tX2hhc2goc2VsZik6CisgICAgICAgICMgQnVnICMxMjU3NzMxCisgICAgICAgIGNsYXNzIEgoc2VsZi50aGV0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KGlkKHNlbGYpICYgMHg3ZmZmZmZmZikKKyAgICAgICAgcz1IKCkKKyAgICAgICAgZj1zZXQoKQorICAgICAgICBmLmFkZChzKQorICAgICAgICBzZWxmLmFzc2VydEluKHMsIGYpCisgICAgICAgIGYucmVtb3ZlKHMpCisgICAgICAgIGYuYWRkKHMpCisgICAgICAgIGYuZGlzY2FyZChzKQorCisgICAgZGVmIHRlc3RfYmFkY21wKHNlbGYpOgorICAgICAgICBzID0gc2VsZi50aGV0eXBlKFtCYWRDbXAoKV0pCisgICAgICAgICMgRGV0ZWN0IGNvbXBhcmlzb24gZXJyb3JzIGR1cmluZyBpbnNlcnRpb24gYW5kIGxvb2t1cAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYudGhldHlwZSwgW0JhZENtcCgpLCBCYWRDbXAoKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgcy5fX2NvbnRhaW5zX18sIEJhZENtcCgpKQorICAgICAgICAjIERldGVjdCBlcnJvcnMgZHVyaW5nIG11dGF0aW5nIG9wZXJhdGlvbnMKKyAgICAgICAgaWYgaGFzYXR0cihzLCAnYWRkJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHMuYWRkLCBCYWRDbXAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgcy5kaXNjYXJkLCBCYWRDbXAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgcy5yZW1vdmUsIEJhZENtcCgpKQorCisgICAgZGVmIHRlc3RfY3ljbGljYWxfcmVwcihzZWxmKToKKyAgICAgICAgdyA9IFJlcHJXcmFwcGVyKCkKKyAgICAgICAgcyA9IHNlbGYudGhldHlwZShbd10pCisgICAgICAgIHcudmFsdWUgPSBzCisgICAgICAgIG5hbWUgPSByZXByKHMpLnBhcnRpdGlvbignKCcpWzBdICAgICMgc3RyaXAgY2xhc3MgbmFtZSBmcm9tIHJlcHIgc3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzKSwgJyVzKFslcyguLi4pXSknICUgKG5hbWUsIG5hbWUpKQorCisgICAgZGVmIHRlc3RfY3ljbGljYWxfcHJpbnQoc2VsZik6CisgICAgICAgIHcgPSBSZXByV3JhcHBlcigpCisgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoW3ddKQorICAgICAgICB3LnZhbHVlID0gcworICAgICAgICBmbyA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJpbnQgPj4gZm8sIHMsCisgICAgICAgICAgICBmby5jbG9zZSgpCisgICAgICAgICAgICBmbyA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8ucmVhZCgpLCByZXByKHMpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm8uY2xvc2UoKQorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfZG9fbm90X3JlaGFzaF9kaWN0X2tleXMoc2VsZik6CisgICAgICAgIG4gPSAxMAorICAgICAgICBkID0gZGljdC5mcm9ta2V5cyhtYXAoSGFzaENvdW50aW5nSW50LCB4cmFuZ2UobikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bShlbGVtLmhhc2hfY291bnQgZm9yIGVsZW0gaW4gZCksIG4pCisgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oZWxlbS5oYXNoX2NvdW50IGZvciBlbGVtIGluIGQpLCBuKQorICAgICAgICBzLmRpZmZlcmVuY2UoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oZWxlbS5oYXNoX2NvdW50IGZvciBlbGVtIGluIGQpLCBuKQorICAgICAgICBpZiBoYXNhdHRyKHMsICdzeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUnKToKKyAgICAgICAgICAgIHMuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKGVsZW0uaGFzaF9jb3VudCBmb3IgZWxlbSBpbiBkKSwgbikKKyAgICAgICAgZDIgPSBkaWN0LmZyb21rZXlzKHNldChkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oZWxlbS5oYXNoX2NvdW50IGZvciBlbGVtIGluIGQpLCBuKQorICAgICAgICBkMyA9IGRpY3QuZnJvbWtleXMoZnJvemVuc2V0KGQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bShlbGVtLmhhc2hfY291bnQgZm9yIGVsZW0gaW4gZCksIG4pCisgICAgICAgIGQzID0gZGljdC5mcm9ta2V5cyhmcm96ZW5zZXQoZCksIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oZWxlbS5oYXNoX2NvdW50IGZvciBlbGVtIGluIGQpLCBuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQzLCBkaWN0LmZyb21rZXlzKGQsIDEyMykpCisKKyAgICBkZWYgdGVzdF9jb250YWluZXJfaXRlcmF0b3Ioc2VsZik6CisgICAgICAgICMgQnVnICMzNjgwOiB0cF90cmF2ZXJzZSB3YXMgbm90IGltcGxlbWVudGVkIGZvciBzZXQgaXRlcmF0b3Igb2JqZWN0CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb2JqID0gQygpCisgICAgICAgIHJlZiA9IHdlYWtyZWYucmVmKG9iaikKKyAgICAgICAgY29udGFpbmVyID0gc2V0KFtvYmosIDFdKQorICAgICAgICBvYmoueCA9IGl0ZXIoY29udGFpbmVyKQorICAgICAgICBkZWwgb2JqLCBjb250YWluZXIKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWYoKSBpcyBOb25lLCAiQ3ljbGUgd2FzIG5vdCBjb2xsZWN0ZWQiKQorCitjbGFzcyBUZXN0U2V0KFRlc3RKb2ludE9wcyk6CisgICAgdGhldHlwZSA9IHNldAorCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYudGhldHlwZSgpCisgICAgICAgIHMuX19pbml0X18oc2VsZi53b3JkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHNldChzZWxmLndvcmQpKQorICAgICAgICBzLl9faW5pdF9fKHNlbGYub3RoZXJ3b3JkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHNldChzZWxmLm90aGVyd29yZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcy5fX2luaXRfXywgcywgMik7CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcy5fX2luaXRfXywgMSk7CisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9pZGVudGl0eShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYudGhldHlwZShyYW5nZSgzKSkKKyAgICAgICAgdCA9IHNlbGYudGhldHlwZShzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHMpLCBpZCh0KSkKKworICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgc2VsZi5zKQorCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIHNlbGYucy5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zKSwgMCkKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIGR1cCA9IHNlbGYucy5jb3B5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIGR1cCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzZWxmLnMpLCBpZChkdXApKQorCisgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgorICAgICAgICBzZWxmLnMuYWRkKCdRJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignUScsIHNlbGYucykKKyAgICAgICAgZHVwID0gc2VsZi5zLmNvcHkoKQorICAgICAgICBzZWxmLnMuYWRkKCdRJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIGR1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuYWRkLCBbXSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZShzZWxmKToKKyAgICAgICAgc2VsZi5zLnJlbW92ZSgnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBzZWxmLnMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLnMucmVtb3ZlLCAnUScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnJlbW92ZSwgW10pCisgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoW2Zyb3plbnNldChzZWxmLndvcmQpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSwgcykKKyAgICAgICAgcy5yZW1vdmUoc2VsZi50aGV0eXBlKHNlbGYud29yZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi50aGV0eXBlKHNlbGYud29yZCksIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLnMucmVtb3ZlLCBzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9rZXllcnJvcl91bnBhY2tpbmcoc2VsZik6CisgICAgICAgICMgYnVnOiAgd3d3LnB5dGhvbi5vcmcvc2YvMTU3NjY1NworICAgICAgICBmb3IgdjEgaW4gWydRJywgKDEsKV06CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zLnJlbW92ZSh2MSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvciwgZToKKyAgICAgICAgICAgICAgICB2MiA9IGUuYXJnc1swXQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodjEsIHYyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX2tleWVycm9yX3NldChzZWxmKToKKyAgICAgICAga2V5ID0gc2VsZi50aGV0eXBlKFszLCA0XSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zLnJlbW92ZShrZXkpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuYXJnc1swXSBpcyBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgIktleUVycm9yIHNob3VsZCBiZSB7MH0sIG5vdCB7MX0iLmZvcm1hdChrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmFyZ3NbMF0pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCkKKworICAgIGRlZiB0ZXN0X2Rpc2NhcmQoc2VsZik6CisgICAgICAgIHNlbGYucy5kaXNjYXJkKCdhJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYScsIHNlbGYucykKKyAgICAgICAgc2VsZi5zLmRpc2NhcmQoJ1EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5kaXNjYXJkLCBbXSkKKyAgICAgICAgcyA9IHNlbGYudGhldHlwZShbZnJvemVuc2V0KHNlbGYud29yZCldKQorICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYudGhldHlwZShzZWxmLndvcmQpLCBzKQorICAgICAgICBzLmRpc2NhcmQoc2VsZi50aGV0eXBlKHNlbGYud29yZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi50aGV0eXBlKHNlbGYud29yZCksIHMpCisgICAgICAgIHMuZGlzY2FyZChzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSkKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbihzZWxmLnMpKToKKyAgICAgICAgICAgIGVsZW0gPSBzZWxmLnMucG9wKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZWxlbSwgc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgc2VsZi5zLnBvcCkKKworICAgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgcmV0dmFsID0gc2VsZi5zLnVwZGF0ZShzZWxmLm90aGVyd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR2YWwsIE5vbmUpCisgICAgICAgIGZvciBjIGluIChzZWxmLndvcmQgKyBzZWxmLm90aGVyd29yZCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUGFzc1RocnUsIHNlbGYucy51cGRhdGUsIGNoZWNrX3Bhc3NfdGhydSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy51cGRhdGUsIFtbXV0pCisgICAgICAgIGZvciBwLCBxIGluICgoJ2NkYycsICdhYmNkJyksICgnZWZnZmUnLCAnYWJjZWZnJyksICgnY2NiJywgJ2FiYycpLCAoJ2VmJywgJ2FiY2VmJykpOgorICAgICAgICAgICAgZm9yIEMgaW4gc2V0LCBmcm96ZW5zZXQsIGRpY3QuZnJvbWtleXMsIHN0ciwgdW5pY29kZSwgbGlzdCwgdHVwbGU6CisgICAgICAgICAgICAgICAgcyA9IHNlbGYudGhldHlwZSgnYWJjYmEnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy51cGRhdGUoQyhwKSksIE5vbmUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZXQocSkpCisgICAgICAgIGZvciBwIGluICgnY2RjJywgJ2VmZ2ZlJywgJ2NjYicsICdlZicsICdhYmNkYScpOgorICAgICAgICAgICAgcSA9ICdhaGknCisgICAgICAgICAgICBmb3IgQyBpbiBzZXQsIGZyb3plbnNldCwgZGljdC5mcm9ta2V5cywgc3RyLCB1bmljb2RlLCBsaXN0LCB0dXBsZToKKyAgICAgICAgICAgICAgICBzID0gc2VsZi50aGV0eXBlKCdhYmNiYScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnVwZGF0ZShDKHApLCBDKHEpKSwgTm9uZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHNldChzKSB8IHNldChwKSB8IHNldChxKSkKKworICAgIGRlZiB0ZXN0X2lvcihzZWxmKToKKyAgICAgICAgc2VsZi5zIHw9IHNldChzZWxmLm90aGVyd29yZCkKKyAgICAgICAgZm9yIGMgaW4gKHNlbGYud29yZCArIHNlbGYub3RoZXJ3b3JkKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX3VwZGF0ZShzZWxmKToKKyAgICAgICAgcmV0dmFsID0gc2VsZi5zLmludGVyc2VjdGlvbl91cGRhdGUoc2VsZi5vdGhlcndvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi53b3JkICsgc2VsZi5vdGhlcndvcmQpOgorICAgICAgICAgICAgaWYgYyBpbiBzZWxmLm90aGVyd29yZCBhbmQgYyBpbiBzZWxmLndvcmQ6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYywgc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQYXNzVGhydSwgc2VsZi5zLmludGVyc2VjdGlvbl91cGRhdGUsIGNoZWNrX3Bhc3NfdGhydSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5pbnRlcnNlY3Rpb25fdXBkYXRlLCBbW11dKQorICAgICAgICBmb3IgcCwgcSBpbiAoKCdjZGMnLCAnYycpLCAoJ2VmZ2ZlJywgJycpLCAoJ2NjYicsICdiYycpLCAoJ2VmJywgJycpKToKKyAgICAgICAgICAgIGZvciBDIGluIHNldCwgZnJvemVuc2V0LCBkaWN0LmZyb21rZXlzLCBzdHIsIHVuaWNvZGUsIGxpc3QsIHR1cGxlOgorICAgICAgICAgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoJ2FiY2JhJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuaW50ZXJzZWN0aW9uX3VwZGF0ZShDKHApKSwgTm9uZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHNldChxKSkKKyAgICAgICAgICAgICAgICBzcyA9ICdhYmNiYScKKyAgICAgICAgICAgICAgICBzID0gc2VsZi50aGV0eXBlKHNzKQorICAgICAgICAgICAgICAgIHQgPSAnY2JjJworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5pbnRlcnNlY3Rpb25fdXBkYXRlKEMocCksIEModCkpLCBOb25lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgc2V0KCdhYmNiYScpJnNldChwKSZzZXQodCkpCisKKyAgICBkZWYgdGVzdF9pYW5kKHNlbGYpOgorICAgICAgICBzZWxmLnMgJj0gc2V0KHNlbGYub3RoZXJ3b3JkKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi53b3JkICsgc2VsZi5vdGhlcndvcmQpOgorICAgICAgICAgICAgaWYgYyBpbiBzZWxmLm90aGVyd29yZCBhbmQgYyBpbiBzZWxmLndvcmQ6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYywgc2VsZi5zKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW5jZV91cGRhdGUoc2VsZik6CisgICAgICAgIHJldHZhbCA9IHNlbGYucy5kaWZmZXJlbmNlX3VwZGF0ZShzZWxmLm90aGVyd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR2YWwsIE5vbmUpCisgICAgICAgIGZvciBjIGluIChzZWxmLndvcmQgKyBzZWxmLm90aGVyd29yZCk6CisgICAgICAgICAgICBpZiBjIGluIHNlbGYud29yZCBhbmQgYyBub3QgaW4gc2VsZi5vdGhlcndvcmQ6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYywgc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQYXNzVGhydSwgc2VsZi5zLmRpZmZlcmVuY2VfdXBkYXRlLCBjaGVja19wYXNzX3RocnUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuZGlmZmVyZW5jZV91cGRhdGUsIFtbXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZSwgW1tdXSkKKyAgICAgICAgZm9yIHAsIHEgaW4gKCgnY2RjJywgJ2FiJyksICgnZWZnZmUnLCAnYWJjJyksICgnY2NiJywgJ2EnKSwgKCdlZicsICdhYmMnKSk6CisgICAgICAgICAgICBmb3IgQyBpbiBzZXQsIGZyb3plbnNldCwgZGljdC5mcm9ta2V5cywgc3RyLCB1bmljb2RlLCBsaXN0LCB0dXBsZToKKyAgICAgICAgICAgICAgICBzID0gc2VsZi50aGV0eXBlKCdhYmNiYScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmRpZmZlcmVuY2VfdXBkYXRlKEMocCkpLCBOb25lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgc2V0KHEpKQorCisgICAgICAgICAgICAgICAgcyA9IHNlbGYudGhldHlwZSgnYWJjZGVmZ2hpaCcpCisgICAgICAgICAgICAgICAgcy5kaWZmZXJlbmNlX3VwZGF0ZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZWxmLnRoZXR5cGUoJ2FiY2RlZmdoaWgnKSkKKworICAgICAgICAgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoJ2FiY2RlZmdoaWgnKQorICAgICAgICAgICAgICAgIHMuZGlmZmVyZW5jZV91cGRhdGUoQygnYWJhJykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZWxmLnRoZXR5cGUoJ2NkZWZnaGloJykpCisKKyAgICAgICAgICAgICAgICBzID0gc2VsZi50aGV0eXBlKCdhYmNkZWZnaGloJykKKyAgICAgICAgICAgICAgICBzLmRpZmZlcmVuY2VfdXBkYXRlKEMoJ2NkYycpLCBDKCdhYmEnKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHNlbGYudGhldHlwZSgnZWZnaGloJykpCisKKyAgICBkZWYgdGVzdF9pc3ViKHNlbGYpOgorICAgICAgICBzZWxmLnMgLT0gc2V0KHNlbGYub3RoZXJ3b3JkKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi53b3JkICsgc2VsZi5vdGhlcndvcmQpOgorICAgICAgICAgICAgaWYgYyBpbiBzZWxmLndvcmQgYW5kIGMgbm90IGluIHNlbGYub3RoZXJ3b3JkOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKworICAgIGRlZiB0ZXN0X3N5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShzZWxmKToKKyAgICAgICAgcmV0dmFsID0gc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShzZWxmLm90aGVyd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR2YWwsIE5vbmUpCisgICAgICAgIGZvciBjIGluIChzZWxmLndvcmQgKyBzZWxmLm90aGVyd29yZCk6CisgICAgICAgICAgICBpZiAoYyBpbiBzZWxmLndvcmQpIF4gKGMgaW4gc2VsZi5vdGhlcndvcmQpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUGFzc1RocnUsIHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUsIGNoZWNrX3Bhc3NfdGhydSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUsIFtbXV0pCisgICAgICAgIGZvciBwLCBxIGluICgoJ2NkYycsICdhYmQnKSwgKCdlZmdmZScsICdhYmNlZmcnKSwgKCdjY2InLCAnYScpLCAoJ2VmJywgJ2FiY2VmJykpOgorICAgICAgICAgICAgZm9yIEMgaW4gc2V0LCBmcm96ZW5zZXQsIGRpY3QuZnJvbWtleXMsIHN0ciwgdW5pY29kZSwgbGlzdCwgdHVwbGU6CisgICAgICAgICAgICAgICAgcyA9IHNlbGYudGhldHlwZSgnYWJjYmEnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUoQyhwKSksIE5vbmUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZXQocSkpCisKKyAgICBkZWYgdGVzdF9peG9yKHNlbGYpOgorICAgICAgICBzZWxmLnMgXj0gc2V0KHNlbGYub3RoZXJ3b3JkKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi53b3JkICsgc2VsZi5vdGhlcndvcmQpOgorICAgICAgICAgICAgaWYgKGMgaW4gc2VsZi53b3JkKSBeIChjIGluIHNlbGYub3RoZXJ3b3JkKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCisKKyAgICBkZWYgdGVzdF9pbnBsYWNlX29uX3NlbGYoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLnMuY29weSgpCisgICAgICAgIHQgfD0gdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHNlbGYucykKKyAgICAgICAgdCAmPSB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgc2VsZi5zKQorICAgICAgICB0IC09IHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBzZWxmLnRoZXR5cGUoKSkKKyAgICAgICAgdCA9IHNlbGYucy5jb3B5KCkKKyAgICAgICAgdCBePSB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgc2VsZi50aGV0eXBlKCkpCisKKyAgICBkZWYgdGVzdF93ZWFrcmVmKHNlbGYpOgorICAgICAgICBzID0gc2VsZi50aGV0eXBlKCdnYWxsYWhhZCcpCisgICAgICAgIHAgPSB3ZWFrcmVmLnByb3h5KHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBzdHIocykpCisgICAgICAgIHMgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlZmVyZW5jZUVycm9yLCBzdHIsIHApCisKKyAgICAjIEMgQVBJIHRlc3Qgb25seSBhdmFpbGFibGUgaW4gYSBkZWJ1ZyBidWlsZAorICAgIGlmIGhhc2F0dHIoc2V0LCAidGVzdF9jX2FwaSIpOgorICAgICAgICBkZWYgdGVzdF9jX2FwaShzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KCkudGVzdF9jX2FwaSgpLCBUcnVlKQorCitjbGFzcyBTZXRTdWJjbGFzcyhzZXQpOgorICAgIHBhc3MKKworY2xhc3MgVGVzdFNldFN1YmNsYXNzKFRlc3RTZXQpOgorICAgIHRoZXR5cGUgPSBTZXRTdWJjbGFzcworCitjbGFzcyBTZXRTdWJjbGFzc1dpdGhLZXl3b3JkQXJncyhzZXQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVyYWJsZT1bXSwgbmV3YXJnPU5vbmUpOgorICAgICAgICBzZXQuX19pbml0X18oc2VsZiwgaXRlcmFibGUpCisKK2NsYXNzIFRlc3RTZXRTdWJjbGFzc1dpdGhLZXl3b3JkQXJncyhUZXN0U2V0KToKKworICAgIGRlZiB0ZXN0X2tleXdvcmRzX2luX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAnU0YgYnVnICMxNDg2NjYzIC0tIHRoaXMgdXNlZCB0byBlcnJvbmVvdXNseSByYWlzZSBhIFR5cGVFcnJvcicKKyAgICAgICAgU2V0U3ViY2xhc3NXaXRoS2V5d29yZEFyZ3MobmV3YXJnPTEpCisKK2NsYXNzIFRlc3RGcm96ZW5TZXQoVGVzdEpvaW50T3BzKToKKyAgICB0aGV0eXBlID0gZnJvemVuc2V0CisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICBzID0gc2VsZi50aGV0eXBlKHNlbGYud29yZCkKKyAgICAgICAgcy5fX2luaXRfXyhzZWxmLm90aGVyd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZXQoc2VsZi53b3JkKSkKKworICAgIGRlZiB0ZXN0X3NpbmdsZXRvbl9lbXB0eV9mcm96ZW5zZXQoc2VsZik6CisgICAgICAgIGYgPSBmcm96ZW5zZXQoKQorICAgICAgICBlZnMgPSBbZnJvemVuc2V0KCksIGZyb3plbnNldChbXSksIGZyb3plbnNldCgoKSksIGZyb3plbnNldCgnJyksCisgICAgICAgICAgICAgICBmcm96ZW5zZXQoKSwgZnJvemVuc2V0KFtdKSwgZnJvemVuc2V0KCgpKSwgZnJvemVuc2V0KCcnKSwKKyAgICAgICAgICAgICAgIGZyb3plbnNldCh4cmFuZ2UoMCkpLCBmcm96ZW5zZXQoZnJvemVuc2V0KCkpLAorICAgICAgICAgICAgICAgZnJvemVuc2V0KGYpLCBmXQorICAgICAgICAjIEFsbCBvZiB0aGUgZW1wdHkgZnJvemVuc2V0cyBzaG91bGQgaGF2ZSBqdXN0IG9uZSBpZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNldChtYXAoaWQsIGVmcykpKSwgMSkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX2lkZW50aXR5KHNlbGYpOgorICAgICAgICBzID0gc2VsZi50aGV0eXBlKHJhbmdlKDMpKQorICAgICAgICB0ID0gc2VsZi50aGV0eXBlKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQocyksIGlkKHQpKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHNlbGYudGhldHlwZSgnYWJjZGViJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2goc2VsZi50aGV0eXBlKCdlYmVjZGEnKSkpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCBhbGwgcGVybXV0YXRpb25zIGdpdmUgdGhlIHNhbWUgaGFzaCB2YWx1ZQorICAgICAgICBuID0gMTAwCisgICAgICAgIHNlcSA9IFtyYW5kcmFuZ2UobikgZm9yIGkgaW4geHJhbmdlKG4pXQorICAgICAgICByZXN1bHRzID0gc2V0KCkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDIwMCk6CisgICAgICAgICAgICBzaHVmZmxlKHNlcSkKKyAgICAgICAgICAgIHJlc3VsdHMuYWRkKGhhc2goc2VsZi50aGV0eXBlKHNlcSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHRzKSwgMSkKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIGR1cCA9IHNlbGYucy5jb3B5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChzZWxmLnMpLCBpZChkdXApKQorCisgICAgZGVmIHRlc3RfZnJvemVuX2FzX2RpY3RrZXkoc2VsZik6CisgICAgICAgIHNlcSA9IHJhbmdlKDEwKSArIGxpc3QoJ2FiY2RlZmcnKSArIFsnYXBwbGUnXQorICAgICAgICBrZXkxID0gc2VsZi50aGV0eXBlKHNlcSkKKyAgICAgICAga2V5MiA9IHNlbGYudGhldHlwZShyZXZlcnNlZChzZXEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleTEsIGtleTIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoa2V5MSksIGlkKGtleTIpKQorICAgICAgICBkID0ge30KKyAgICAgICAgZFtrZXkxXSA9IDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtrZXkyXSwgNDIpCisKKyAgICBkZWYgdGVzdF9oYXNoX2NhY2hpbmcoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoJ2FiY2RjZGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZiksIGhhc2goZikpCisKKyAgICBkZWYgdGVzdF9oYXNoX2VmZmVjdGl2ZW5lc3Moc2VsZik6CisgICAgICAgIG4gPSAxMworICAgICAgICBoYXNodmFsdWVzID0gc2V0KCkKKyAgICAgICAgYWRkaGFzaHZhbHVlID0gaGFzaHZhbHVlcy5hZGQKKyAgICAgICAgZWxlbW1hc2tzID0gWyhpKzEsIDE8PGkpIGZvciBpIGluIHJhbmdlKG4pXQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMioqbik6CisgICAgICAgICAgICBhZGRoYXNodmFsdWUoaGFzaChmcm96ZW5zZXQoW2UgZm9yIGUsIG0gaW4gZWxlbW1hc2tzIGlmIG0maV0pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaGFzaHZhbHVlcyksIDIqKm4pCisKK2NsYXNzIEZyb3plblNldFN1YmNsYXNzKGZyb3plbnNldCk6CisgICAgcGFzcworCitjbGFzcyBUZXN0RnJvemVuU2V0U3ViY2xhc3MoVGVzdEZyb3plblNldCk6CisgICAgdGhldHlwZSA9IEZyb3plblNldFN1YmNsYXNzCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9pZGVudGl0eShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYudGhldHlwZShyYW5nZSgzKSkKKyAgICAgICAgdCA9IHNlbGYudGhldHlwZShzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHMpLCBpZCh0KSkKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIGR1cCA9IHNlbGYucy5jb3B5KCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzZWxmLnMpLCBpZChkdXApKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2VtcHR5X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBzID0gc2VsZi50aGV0eXBlKCkKKyAgICAgICAgdCA9IHNlbGYudGhldHlwZShzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHQpCisKKyAgICBkZWYgdGVzdF9zaW5nbGV0b25fZW1wdHlfZnJvemVuc2V0KHNlbGYpOgorICAgICAgICBGcm96ZW5zZXQgPSBzZWxmLnRoZXR5cGUKKyAgICAgICAgZiA9IGZyb3plbnNldCgpCisgICAgICAgIEYgPSBGcm96ZW5zZXQoKQorICAgICAgICBlZnMgPSBbRnJvemVuc2V0KCksIEZyb3plbnNldChbXSksIEZyb3plbnNldCgoKSksIEZyb3plbnNldCgnJyksCisgICAgICAgICAgICAgICBGcm96ZW5zZXQoKSwgRnJvemVuc2V0KFtdKSwgRnJvemVuc2V0KCgpKSwgRnJvemVuc2V0KCcnKSwKKyAgICAgICAgICAgICAgIEZyb3plbnNldCh4cmFuZ2UoMCkpLCBGcm96ZW5zZXQoRnJvemVuc2V0KCkpLAorICAgICAgICAgICAgICAgRnJvemVuc2V0KGZyb3plbnNldCgpKSwgZiwgRiwgRnJvemVuc2V0KGYpLCBGcm96ZW5zZXQoRildCisgICAgICAgICMgQWxsIGVtcHR5IGZyb3plbnNldCBzdWJjbGFzcyBpbnN0YW5jZXMgc2hvdWxkIGhhdmUgZGlmZmVyZW50IGlkcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXQobWFwKGlkLCBlZnMpKSksIGxlbihlZnMpKQorCisjIFRlc3RzIHRha2VuIGZyb20gdGVzdF9zZXRzLnB5ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitlbXB0eV9zZXQgPSBzZXQoKQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RCYXNpY09wcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJlcHIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi5zZXQpLCBzZWxmLnJlcHIpCisKKyAgICBkZWYgY2hlY2tfcmVwcl9hZ2FpbnN0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgdGV4dCA9IHJlcHIoc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXh0LnN0YXJ0c3dpdGgoJ3snKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRleHQuZW5kc3dpdGgoJ30nKSkKKworICAgICAgICByZXN1bHQgPSB0ZXh0WzE6LTFdLnNwbGl0KCcsICcpCisgICAgICAgIHJlc3VsdC5zb3J0KCkKKyAgICAgICAgc29ydGVkX3JlcHJfdmFsdWVzID0gW3JlcHIodmFsdWUpIGZvciB2YWx1ZSBpbiBzZWxmLnZhbHVlc10KKyAgICAgICAgc29ydGVkX3JlcHJfdmFsdWVzLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc29ydGVkX3JlcHJfdmFsdWVzKQorCisgICAgZGVmIHRlc3RfcHJpbnQoc2VsZik6CisgICAgICAgIGZvID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmludCA+PiBmbywgc2VsZi5zZXQsCisgICAgICAgICAgICBmby5jbG9zZSgpCisgICAgICAgICAgICBmbyA9IG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgInJiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8ucmVhZCgpLCByZXByKHNlbGYuc2V0KSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvLmNsb3NlKCkKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2xlbmd0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zZXQpLCBzZWxmLmxlbmd0aCkKKworICAgIGRlZiB0ZXN0X3NlbGZfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNlbGYuc2V0KQorCisgICAgZGVmIHRlc3RfZXF1aXZhbGVudF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2VsZi5kdXApCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LmNvcHkoKSwgc2VsZi5kdXApCisKKyAgICBkZWYgdGVzdF9zZWxmX3VuaW9uKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCB8IHNlbGYuc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZWxmLmR1cCkKKworICAgIGRlZiB0ZXN0X2VtcHR5X3VuaW9uKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCB8IGVtcHR5X3NldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc2VsZi5kdXApCisKKyAgICBkZWYgdGVzdF91bmlvbl9lbXB0eShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gZW1wdHlfc2V0IHwgc2VsZi5zZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNlbGYuZHVwKQorCisgICAgZGVmIHRlc3Rfc2VsZl9pbnRlcnNlY3Rpb24oc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0ICYgc2VsZi5zZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNlbGYuZHVwKQorCisgICAgZGVmIHRlc3RfZW1wdHlfaW50ZXJzZWN0aW9uKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCAmIGVtcHR5X3NldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZW1wdHlfc2V0KQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX2VtcHR5KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBlbXB0eV9zZXQgJiBzZWxmLnNldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZW1wdHlfc2V0KQorCisgICAgZGVmIHRlc3Rfc2VsZl9pc2Rpc2pvaW50KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldC5pc2Rpc2pvaW50KHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgbm90IHNlbGYuc2V0KQorCisgICAgZGVmIHRlc3RfZW1wdHlfaXNkaXNqb2ludChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQuaXNkaXNqb2ludChlbXB0eV9zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBUcnVlKQorCisgICAgZGVmIHRlc3RfaXNkaXNqb2ludF9lbXB0eShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gZW1wdHlfc2V0LmlzZGlzam9pbnQoc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBUcnVlKQorCisgICAgZGVmIHRlc3Rfc2VsZl9zeW1tZXRyaWNfZGlmZmVyZW5jZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgXiBzZWxmLnNldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZW1wdHlfc2V0KQorCisgICAgZGVmIHRlc3RfZW1wdHlfc3ltbWV0cmljX2RpZmZlcmVuY2Uoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IF4gZW1wdHlfc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZWxmLnNldCkKKworICAgIGRlZiB0ZXN0X3NlbGZfZGlmZmVyZW5jZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgLSBzZWxmLnNldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZW1wdHlfc2V0KQorCisgICAgZGVmIHRlc3RfZW1wdHlfZGlmZmVyZW5jZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgLSBlbXB0eV9zZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNlbGYuZHVwKQorCisgICAgZGVmIHRlc3RfZW1wdHlfZGlmZmVyZW5jZV9yZXYoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGVtcHR5X3NldCAtIHNlbGYuc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBlbXB0eV9zZXQpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRpb24oc2VsZik6CisgICAgICAgIGZvciB2IGluIHNlbGYuc2V0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2LCBzZWxmLnZhbHVlcykKKyAgICAgICAgc2V0aXRlciA9IGl0ZXIoc2VsZi5zZXQpCisgICAgICAgICMgbm90ZTogX19sZW5ndGhfaGludF9fIGlzIGFuIGludGVybmFsIHVuZG9jdW1lbnRlZCBBUEksCisgICAgICAgICMgZG9uJ3QgcmVseSBvbiBpdCBpbiB5b3VyIG93biBwcm9ncmFtcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldGl0ZXIuX19sZW5ndGhfaGludF9fKCksIGxlbihzZWxmLnNldCkpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKKyAgICAgICAgcCA9IHBpY2tsZS5kdW1wcyhzZWxmLnNldCkKKyAgICAgICAgY29weSA9IHBpY2tsZS5sb2FkcyhwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBjb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICIlcyAhPSAlcyIgJSAoc2VsZi5zZXQsIGNvcHkpKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RCYXNpY09wc0VtcHR5KFRlc3RCYXNpY09wcyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2UgICA9ICJlbXB0eSBzZXQiCisgICAgICAgIHNlbGYudmFsdWVzID0gW10KKyAgICAgICAgc2VsZi5zZXQgICAgPSBzZXQoc2VsZi52YWx1ZXMpCisgICAgICAgIHNlbGYuZHVwICAgID0gc2V0KHNlbGYudmFsdWVzKQorICAgICAgICBzZWxmLmxlbmd0aCA9IDAKKyAgICAgICAgc2VsZi5yZXByICAgPSAic2V0KFtdKSIKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0QmFzaWNPcHNTaW5nbGV0b24oVGVzdEJhc2ljT3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZSAgID0gInVuaXQgc2V0IChudW1iZXIpIgorICAgICAgICBzZWxmLnZhbHVlcyA9IFszXQorICAgICAgICBzZWxmLnNldCAgICA9IHNldChzZWxmLnZhbHVlcykKKyAgICAgICAgc2VsZi5kdXAgICAgPSBzZXQoc2VsZi52YWx1ZXMpCisgICAgICAgIHNlbGYubGVuZ3RoID0gMQorICAgICAgICBzZWxmLnJlcHIgICA9ICJzZXQoWzNdKSIKKworICAgIGRlZiB0ZXN0X2luKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEluKDMsIHNlbGYuc2V0KQorCisgICAgZGVmIHRlc3Rfbm90X2luKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDIsIHNlbGYuc2V0KQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RCYXNpY09wc1R1cGxlKFRlc3RCYXNpY09wcyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2UgICA9ICJ1bml0IHNldCAodHVwbGUpIgorICAgICAgICBzZWxmLnZhbHVlcyA9IFsoMCwgInplcm8iKV0KKyAgICAgICAgc2VsZi5zZXQgICAgPSBzZXQoc2VsZi52YWx1ZXMpCisgICAgICAgIHNlbGYuZHVwICAgID0gc2V0KHNlbGYudmFsdWVzKQorICAgICAgICBzZWxmLmxlbmd0aCA9IDEKKyAgICAgICAgc2VsZi5yZXByICAgPSAic2V0KFsoMCwgJ3plcm8nKV0pIgorCisgICAgZGVmIHRlc3RfaW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKDAsICJ6ZXJvIiksIHNlbGYuc2V0KQorCisgICAgZGVmIHRlc3Rfbm90X2luKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDksIHNlbGYuc2V0KQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RCYXNpY09wc1RyaXBsZShUZXN0QmFzaWNPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlICAgPSAidHJpcGxlIHNldCIKKyAgICAgICAgc2VsZi52YWx1ZXMgPSBbMCwgInplcm8iLCBvcGVyYXRvci5hZGRdCisgICAgICAgIHNlbGYuc2V0ICAgID0gc2V0KHNlbGYudmFsdWVzKQorICAgICAgICBzZWxmLmR1cCAgICA9IHNldChzZWxmLnZhbHVlcykKKyAgICAgICAgc2VsZi5sZW5ndGggPSAzCisgICAgICAgIHNlbGYucmVwciAgID0gTm9uZQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RCYXNpY09wc1N0cmluZyhUZXN0QmFzaWNPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlICAgPSAic3RyaW5nIHNldCIKKyAgICAgICAgc2VsZi52YWx1ZXMgPSBbImEiLCAiYiIsICJjIl0KKyAgICAgICAgc2VsZi5zZXQgICAgPSBzZXQoc2VsZi52YWx1ZXMpCisgICAgICAgIHNlbGYuZHVwICAgID0gc2V0KHNlbGYudmFsdWVzKQorICAgICAgICBzZWxmLmxlbmd0aCA9IDMKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVwcl9hZ2FpbnN0X3ZhbHVlcygpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdEJhc2ljT3BzVW5pY29kZShUZXN0QmFzaWNPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlICAgPSAidW5pY29kZSBzZXQiCisgICAgICAgIHNlbGYudmFsdWVzID0gW3UiYSIsIHUiYiIsIHUiYyJdCisgICAgICAgIHNlbGYuc2V0ICAgID0gc2V0KHNlbGYudmFsdWVzKQorICAgICAgICBzZWxmLmR1cCAgICA9IHNldChzZWxmLnZhbHVlcykKKyAgICAgICAgc2VsZi5sZW5ndGggPSAzCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlcHJfYWdhaW5zdF92YWx1ZXMoKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RCYXNpY09wc01peGVkU3RyaW5nVW5pY29kZShUZXN0QmFzaWNPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlICAgPSAic3RyaW5nIGFuZCBieXRlcyBzZXQiCisgICAgICAgIHNlbGYudmFsdWVzID0gWyJhIiwgImIiLCB1ImEiLCB1ImIiXQorICAgICAgICBzZWxmLnNldCAgICA9IHNldChzZWxmLnZhbHVlcykKKyAgICAgICAgc2VsZi5kdXAgICAgPSBzZXQoc2VsZi52YWx1ZXMpCisgICAgICAgIHNlbGYubGVuZ3RoID0gNAorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcmVwcl9hZ2FpbnN0X3ZhbHVlcygpCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworZGVmIGJhZGl0ZXIoKToKKyAgICByYWlzZSBUeXBlRXJyb3IKKyAgICB5aWVsZCBUcnVlCisKK2RlZiBnb29kaXRlcigpOgorICAgIHlpZWxkIFRydWUKKworY2xhc3MgVGVzdEV4Y2VwdGlvblByb3BhZ2F0aW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJTRiA2MjgyNDY6ICBTZXQgY29uc3RydWN0b3Igc2hvdWxkIG5vdCB0cmFwIGl0ZXJhdG9yIFR5cGVFcnJvcnMiIiIKKworICAgIGRlZiB0ZXN0X2luc3RhbmNlV2l0aEV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXQsIGJhZGl0ZXIoKSkKKworICAgIGRlZiB0ZXN0X2luc3RhbmNlc1dpdGhvdXRFeGNlcHRpb24oc2VsZik6CisgICAgICAgICMgQWxsIG9mIHRoZXNlIGl0ZXJhYmxlcyBzaG91bGQgbG9hZCB3aXRob3V0IGV4Y2VwdGlvbi4KKyAgICAgICAgc2V0KFsxLDIsM10pCisgICAgICAgIHNldCgoMSwyLDMpKQorICAgICAgICBzZXQoeydvbmUnOjEsICd0d28nOjIsICd0aHJlZSc6M30pCisgICAgICAgIHNldCh4cmFuZ2UoMykpCisgICAgICAgIHNldCgnYWJjJykKKyAgICAgICAgc2V0KGdvb2RpdGVyKCkpCisKKyAgICBkZWYgdGVzdF9jaGFuZ2luZ1NpemVXaGlsZUl0ZXJhdGluZyhzZWxmKToKKyAgICAgICAgcyA9IHNldChbMSwyLDNdKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiBzOgorICAgICAgICAgICAgICAgIHMudXBkYXRlKFs0XSkKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gZXhjZXB0aW9uIHdoZW4gY2hhbmdpbmcgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uIikKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0U2V0T2ZTZXRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgaW5uZXIgPSBmcm96ZW5zZXQoWzFdKQorICAgICAgICBvdXRlciA9IHNldChbaW5uZXJdKQorICAgICAgICBlbGVtZW50ID0gb3V0ZXIucG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGVsZW1lbnQpLCBmcm96ZW5zZXQpCisgICAgICAgIG91dGVyLmFkZChpbm5lcikgICAgICAgICMgUmVidWlsZCBzZXQgb2Ygc2V0cyB3aXRoIC5hZGQgbWV0aG9kCisgICAgICAgIG91dGVyLnJlbW92ZShpbm5lcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRlciwgc2V0KCkpICAgIyBWZXJpZnkgdGhhdCByZW1vdmUgd29ya2VkCisgICAgICAgIG91dGVyLmRpc2NhcmQoaW5uZXIpICAgICMgQWJzZW5jZSBvZiBLZXlFcnJvciBpbmRpY2F0ZXMgd29ya2luZyBmaW5lCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEJpbmFyeU9wcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCA9IHNldCgoMiwgNCwgNikpCisKKyAgICBkZWYgdGVzdF9lcShzZWxmKTogICAgICAgICAgICAgICMgU0YgYnVnIDY0MzExNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoezI6MSw0OjMsNjo1fSkpCisKKyAgICBkZWYgdGVzdF91bmlvbl9zdWJzZXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IHwgc2V0KFsyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNldCgoMiwgNCwgNikpKQorCisgICAgZGVmIHRlc3RfdW5pb25fc3VwZXJzZXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IHwgc2V0KFsyLCA0LCA2LCA4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNldChbMiwgNCwgNiwgOF0pKQorCisgICAgZGVmIHRlc3RfdW5pb25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgfCBzZXQoWzMsIDQsIDVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc2V0KFsyLCAzLCA0LCA1LCA2XSkpCisKKyAgICBkZWYgdGVzdF91bmlvbl9ub25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgfCBzZXQoWzhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc2V0KFsyLCA0LCA2LCA4XSkpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fc3Vic2V0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCAmIHNldCgoMiwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZXQoKDIsIDQpKSkKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl9zdXBlcnNldChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgJiBzZXQoWzIsIDQsIDYsIDhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc2V0KFsyLCA0LCA2XSkpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgJiBzZXQoWzMsIDQsIDVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc2V0KFs0XSkpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fbm9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0ICYgc2V0KFs4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGVtcHR5X3NldCkKKworICAgIGRlZiB0ZXN0X2lzZGlzam9pbnRfc3Vic2V0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldC5pc2Rpc2pvaW50KHNldCgoMiwgNCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9pc2Rpc2pvaW50X3N1cGVyc2V0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldC5pc2Rpc2pvaW50KHNldChbMiwgNCwgNiwgOF0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9pc2Rpc2pvaW50X292ZXJsYXAoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0LmlzZGlzam9pbnQoc2V0KFszLCA0LCA1XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2lzZGlzam9pbnRfbm9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0LmlzZGlzam9pbnQoc2V0KFs4XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBUcnVlKQorCisgICAgZGVmIHRlc3Rfc3ltX2RpZmZlcmVuY2Vfc3Vic2V0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCBeIHNldCgoMiwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZXQoWzZdKSkKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX3N1cGVyc2V0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCBeIHNldCgoMiwgNCwgNiwgOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZXQoWzhdKSkKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX292ZXJsYXAoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IF4gc2V0KCgzLCA0LCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNldChbMiwgMywgNSwgNl0pKQorCisgICAgZGVmIHRlc3Rfc3ltX2RpZmZlcmVuY2Vfbm9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IF4gc2V0KFs4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNldChbMiwgNCwgNiwgOF0pKQorCisgICAgZGVmIHRlc3RfY21wKHNlbGYpOgorICAgICAgICBhLCBiID0gc2V0KCdhJyksIHNldCgnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY21wLCBhLCBiKQorCisgICAgICAgICMgWW91IGNhbiB2aWV3IHRoaXMgYXMgYSBidWdsZXQ6ICBjbXAoYSwgYSkgZG9lcyBub3QgcmFpc2UgVHlwZUVycm9yLAorICAgICAgICAjIGJlY2F1c2UgX19lcV9fIGlzIHRyaWVkIGJlZm9yZSBfX2NtcF9fLCBhbmQgYS5fX2VxX18oYSkgcmV0dXJucyBUcnVlLAorICAgICAgICAjIHdoaWNoIFB5dGhvbiB0aGlua3MgaXMgZ29vZCBlbm91Z2ggdG8gc3ludGhlc2l6ZSBhIGNtcCgpIHJlc3VsdAorICAgICAgICAjIHdpdGhvdXQgY2FsbGluZyBfX2NtcF9fLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChhLCBhKSwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCwgYSwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY21wLCAiYWJjIiwgYSkKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0VXBkYXRlT3BzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ID0gc2V0KCgyLCA0LCA2KSkKKworICAgIGRlZiB0ZXN0X3VuaW9uX3N1YnNldChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgfD0gc2V0KFsyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KCgyLCA0LCA2KSkpCisKKyAgICBkZWYgdGVzdF91bmlvbl9zdXBlcnNldChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgfD0gc2V0KFsyLCA0LCA2LCA4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KFsyLCA0LCA2LCA4XSkpCisKKyAgICBkZWYgdGVzdF91bmlvbl9vdmVybGFwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCB8PSBzZXQoWzMsIDQsIDVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoWzIsIDMsIDQsIDUsIDZdKSkKKworICAgIGRlZiB0ZXN0X3VuaW9uX25vbl9vdmVybGFwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCB8PSBzZXQoWzhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoWzIsIDQsIDYsIDhdKSkKKworICAgIGRlZiB0ZXN0X3VuaW9uX21ldGhvZF9jYWxsKHNlbGYpOgorICAgICAgICBzZWxmLnNldC51cGRhdGUoc2V0KFszLCA0LCA1XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldChbMiwgMywgNCwgNSwgNl0pKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX3N1YnNldChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgJj0gc2V0KCgyLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KCgyLCA0KSkpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fc3VwZXJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ICY9IHNldChbMiwgNCwgNiwgOF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldChbMiwgNCwgNl0pKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ICY9IHNldChbMywgNCwgNV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldChbNF0pKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX25vbl9vdmVybGFwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCAmPSBzZXQoWzhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBlbXB0eV9zZXQpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fbWV0aG9kX2NhbGwoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LmludGVyc2VjdGlvbl91cGRhdGUoc2V0KFszLCA0LCA1XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldChbNF0pKQorCisgICAgZGVmIHRlc3Rfc3ltX2RpZmZlcmVuY2Vfc3Vic2V0KHNlbGYpOgorICAgICAgICBzZWxmLnNldCBePSBzZXQoKDIsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoWzZdKSkKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX3N1cGVyc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnNldCBePSBzZXQoKDIsIDQsIDYsIDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoWzhdKSkKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX292ZXJsYXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0IF49IHNldCgoMywgNCwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldChbMiwgMywgNSwgNl0pKQorCisgICAgZGVmIHRlc3Rfc3ltX2RpZmZlcmVuY2Vfbm9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0IF49IHNldChbOF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldChbMiwgNCwgNiwgOF0pKQorCisgICAgZGVmIHRlc3Rfc3ltX2RpZmZlcmVuY2VfbWV0aG9kX2NhbGwoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShzZXQoWzMsIDQsIDVdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KFsyLCAzLCA1LCA2XSkpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbmNlX3N1YnNldChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgLT0gc2V0KCgyLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KFs2XSkpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbmNlX3N1cGVyc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnNldCAtPSBzZXQoKDIsIDQsIDYsIDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoW10pKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW5jZV9vdmVybGFwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCAtPSBzZXQoKDMsIDQsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoWzIsIDZdKSkKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2Vfbm9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0IC09IHNldChbOF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldChbMiwgNCwgNl0pKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW5jZV9tZXRob2RfY2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQuZGlmZmVyZW5jZV91cGRhdGUoc2V0KFszLCA0LCA1XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldChbMiwgNl0pKQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RNdXRhdGUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi52YWx1ZXMgPSBbImEiLCAiYiIsICJjIl0KKyAgICAgICAgc2VsZi5zZXQgPSBzZXQoc2VsZi52YWx1ZXMpCisKKyAgICBkZWYgdGVzdF9hZGRfcHJlc2VudChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQuYWRkKCJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KCJhYmMiKSkKKworICAgIGRlZiB0ZXN0X2FkZF9hYnNlbnQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LmFkZCgiZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldCgiYWJjZCIpKQorCisgICAgZGVmIHRlc3RfYWRkX3VudGlsX2Z1bGwoc2VsZik6CisgICAgICAgIHRtcCA9IHNldCgpCisgICAgICAgIGV4cGVjdGVkX2xlbiA9IDAKKyAgICAgICAgZm9yIHYgaW4gc2VsZi52YWx1ZXM6CisgICAgICAgICAgICB0bXAuYWRkKHYpCisgICAgICAgICAgICBleHBlY3RlZF9sZW4gKz0gMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odG1wKSwgZXhwZWN0ZWRfbGVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRtcCwgc2VsZi5zZXQpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfcHJlc2VudChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQucmVtb3ZlKCJiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KCJhYyIpKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX2Fic2VudChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXQucmVtb3ZlKCJkIikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiUmVtb3ZpbmcgbWlzc2luZyBlbGVtZW50IHNob3VsZCBoYXZlIHJhaXNlZCBMb29rdXBFcnJvciIpCisgICAgICAgIGV4Y2VwdCBMb29rdXBFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3JlbW92ZV91bnRpbF9lbXB0eShzZWxmKToKKyAgICAgICAgZXhwZWN0ZWRfbGVuID0gbGVuKHNlbGYuc2V0KQorICAgICAgICBmb3IgdiBpbiBzZWxmLnZhbHVlczoKKyAgICAgICAgICAgIHNlbGYuc2V0LnJlbW92ZSh2KQorICAgICAgICAgICAgZXhwZWN0ZWRfbGVuIC09IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuc2V0KSwgZXhwZWN0ZWRfbGVuKQorCisgICAgZGVmIHRlc3RfZGlzY2FyZF9wcmVzZW50KHNlbGYpOgorICAgICAgICBzZWxmLnNldC5kaXNjYXJkKCJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KCJhYiIpKQorCisgICAgZGVmIHRlc3RfZGlzY2FyZF9hYnNlbnQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LmRpc2NhcmQoImQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZXQoImFiYyIpKQorCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zZXQpLCAwKQorCisgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgorICAgICAgICBwb3BwZWQgPSB7fQorICAgICAgICB3aGlsZSBzZWxmLnNldDoKKyAgICAgICAgICAgIHBvcHBlZFtzZWxmLnNldC5wb3AoKV0gPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBvcHBlZCksIGxlbihzZWxmLnZhbHVlcykpCisgICAgICAgIGZvciB2IGluIHNlbGYudmFsdWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2LCBwb3BwZWQpCisKKyAgICBkZWYgdGVzdF91cGRhdGVfZW1wdHlfdHVwbGUoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LnVwZGF0ZSgoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2V0KHNlbGYudmFsdWVzKSkKKworICAgIGRlZiB0ZXN0X3VwZGF0ZV91bml0X3R1cGxlX292ZXJsYXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LnVwZGF0ZSgoImEiLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldChzZWxmLnZhbHVlcykpCisKKyAgICBkZWYgdGVzdF91cGRhdGVfdW5pdF90dXBsZV9ub25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQudXBkYXRlKCgiYSIsICJ6IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIHNldChzZWxmLnZhbHVlcyArIFsieiJdKSkKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0U3Vic2V0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjYXNlMm1ldGhvZCA9IHsiPD0iOiAiaXNzdWJzZXQiLAorICAgICAgICAgICAgICAgICAgICI+PSI6ICJpc3N1cGVyc2V0IiwKKyAgICAgICAgICAgICAgICAgIH0KKworICAgIHJldmVyc2UgPSB7Ij09IjogIj09IiwKKyAgICAgICAgICAgICAgICIhPSI6ICIhPSIsCisgICAgICAgICAgICAgICAiPCI6ICAiPiIsCisgICAgICAgICAgICAgICAiPiI6ICAiPCIsCisgICAgICAgICAgICAgICAiPD0iOiAiPj0iLAorICAgICAgICAgICAgICAgIj49IjogIjw9IiwKKyAgICAgICAgICAgICAgfQorCisgICAgZGVmIHRlc3RfaXNzdWJzZXQoc2VsZik6CisgICAgICAgIHggPSBzZWxmLmxlZnQKKyAgICAgICAgeSA9IHNlbGYucmlnaHQKKyAgICAgICAgZm9yIGNhc2UgaW4gIiE9IiwgIj09IiwgIjwiLCAiPD0iLCAiPiIsICI+PSI6CisgICAgICAgICAgICBleHBlY3RlZCA9IGNhc2UgaW4gc2VsZi5jYXNlcworICAgICAgICAgICAgIyBUZXN0IHRoZSBiaW5hcnkgaW5maXggc3BlbGxpbmcuCisgICAgICAgICAgICByZXN1bHQgPSBldmFsKCJ4IiArIGNhc2UgKyAieSIsIGxvY2FscygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorICAgICAgICAgICAgIyBUZXN0IHRoZSAiZnJpZW5kbHkiIG1ldGhvZC1uYW1lIHNwZWxsaW5nLCBpZiBvbmUgZXhpc3RzLgorICAgICAgICAgICAgaWYgY2FzZSBpbiBUZXN0U3Vic2V0cy5jYXNlMm1ldGhvZDoKKyAgICAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHgsIFRlc3RTdWJzZXRzLmNhc2UybWV0aG9kW2Nhc2VdKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1ldGhvZCh5KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKworICAgICAgICAgICAgIyBOb3cgZG8gdGhlIHNhbWUgZm9yIHRoZSBvcGVyYW5kcyByZXZlcnNlZC4KKyAgICAgICAgICAgIHJjYXNlID0gVGVzdFN1YnNldHMucmV2ZXJzZVtjYXNlXQorICAgICAgICAgICAgcmVzdWx0ID0gZXZhbCgieSIgKyByY2FzZSArICJ4IiwgbG9jYWxzKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisgICAgICAgICAgICBpZiByY2FzZSBpbiBUZXN0U3Vic2V0cy5jYXNlMm1ldGhvZDoKKyAgICAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHksIFRlc3RTdWJzZXRzLmNhc2UybWV0aG9kW3JjYXNlXSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtZXRob2QoeCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RTdWJzZXRFcXVhbEVtcHR5KFRlc3RTdWJzZXRzKToKKyAgICBsZWZ0ICA9IHNldCgpCisgICAgcmlnaHQgPSBzZXQoKQorICAgIG5hbWUgID0gImJvdGggZW1wdHkiCisgICAgY2FzZXMgPSAiPT0iLCAiPD0iLCAiPj0iCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdFN1YnNldEVxdWFsTm9uRW1wdHkoVGVzdFN1YnNldHMpOgorICAgIGxlZnQgID0gc2V0KFsxLCAyXSkKKyAgICByaWdodCA9IHNldChbMSwgMl0pCisgICAgbmFtZSAgPSAiZXF1YWwgcGFpciIKKyAgICBjYXNlcyA9ICI9PSIsICI8PSIsICI+PSIKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0U3Vic2V0RW1wdHlOb25FbXB0eShUZXN0U3Vic2V0cyk6CisgICAgbGVmdCAgPSBzZXQoKQorICAgIHJpZ2h0ID0gc2V0KFsxLCAyXSkKKyAgICBuYW1lICA9ICJvbmUgZW1wdHksIG9uZSBub24tZW1wdHkiCisgICAgY2FzZXMgPSAiIT0iLCAiPCIsICI8PSIKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0U3Vic2V0UGFydGlhbChUZXN0U3Vic2V0cyk6CisgICAgbGVmdCAgPSBzZXQoWzFdKQorICAgIHJpZ2h0ID0gc2V0KFsxLCAyXSkKKyAgICBuYW1lICA9ICJvbmUgYSBub24tZW1wdHkgcHJvcGVyIHN1YnNldCBvZiBvdGhlciIKKyAgICBjYXNlcyA9ICIhPSIsICI8IiwgIjw9IgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RTdWJzZXROb25PdmVybGFwKFRlc3RTdWJzZXRzKToKKyAgICBsZWZ0ICA9IHNldChbMV0pCisgICAgcmlnaHQgPSBzZXQoWzJdKQorICAgIG5hbWUgID0gIm5laXRoZXIgZW1wdHksIG5laXRoZXIgY29udGFpbnMiCisgICAgY2FzZXMgPSAiIT0iCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdE9ubHlTZXRzSW5CaW5hcnlPcHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZXFfbmUoc2VsZik6CisgICAgICAgICMgVW5saWtlIHRoZSBvdGhlcnMsIHRoaXMgaXMgdGVzdGluZyB0aGF0ID09IGFuZCAhPSAqYXJlKiBhbGxvd2VkLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYub3RoZXIgPT0gc2VsZi5zZXQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0ID09IHNlbGYub3RoZXIsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYub3RoZXIgIT0gc2VsZi5zZXQsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQgIT0gc2VsZi5vdGhlciwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2dlX2d0X2xlX2x0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5zZXQgPCBzZWxmLm90aGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5zZXQgPD0gc2VsZi5vdGhlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYuc2V0ID4gc2VsZi5vdGhlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYuc2V0ID49IHNlbGYub3RoZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYub3RoZXIgPCBzZWxmLnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYub3RoZXIgPD0gc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLm90aGVyID4gc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLm90aGVyID49IHNlbGYuc2V0KQorCisgICAgZGVmIHRlc3RfdXBkYXRlX29wZXJhdG9yKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNldCB8PSBzZWxmLm90aGVyCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIFR5cGVFcnJvciIpCisKKyAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYub3RoZXJJc0l0ZXJhYmxlOgorICAgICAgICAgICAgc2VsZi5zZXQudXBkYXRlKHNlbGYub3RoZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuc2V0LnVwZGF0ZSwgc2VsZi5vdGhlcikKKworICAgIGRlZiB0ZXN0X3VuaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5zZXQgfCBzZWxmLm90aGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5vdGhlciB8IHNlbGYuc2V0KQorICAgICAgICBpZiBzZWxmLm90aGVySXNJdGVyYWJsZToKKyAgICAgICAgICAgIHNlbGYuc2V0LnVuaW9uKHNlbGYub3RoZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuc2V0LnVuaW9uLCBzZWxmLm90aGVyKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX3VwZGF0ZV9vcGVyYXRvcihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXQgJj0gc2VsZi5vdGhlcgorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBUeXBlRXJyb3IiKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX3VwZGF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5vdGhlcklzSXRlcmFibGU6CisgICAgICAgICAgICBzZWxmLnNldC5pbnRlcnNlY3Rpb25fdXBkYXRlKHNlbGYub3RoZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldC5pbnRlcnNlY3Rpb25fdXBkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vdGhlcikKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYuc2V0ICYgc2VsZi5vdGhlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYub3RoZXIgJiBzZWxmLnNldCkKKyAgICAgICAgaWYgc2VsZi5vdGhlcklzSXRlcmFibGU6CisgICAgICAgICAgICBzZWxmLnNldC5pbnRlcnNlY3Rpb24oc2VsZi5vdGhlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zZXQuaW50ZXJzZWN0aW9uLCBzZWxmLm90aGVyKQorCisgICAgZGVmIHRlc3Rfc3ltX2RpZmZlcmVuY2VfdXBkYXRlX29wZXJhdG9yKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNldCBePSBzZWxmLm90aGVyCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIFR5cGVFcnJvciIpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZV91cGRhdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYub3RoZXJJc0l0ZXJhYmxlOgorICAgICAgICAgICAgc2VsZi5zZXQuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlKHNlbGYub3RoZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldC5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm90aGVyKQorCisgICAgZGVmIHRlc3Rfc3ltX2RpZmZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLnNldCBeIHNlbGYub3RoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLm90aGVyIF4gc2VsZi5zZXQpCisgICAgICAgIGlmIHNlbGYub3RoZXJJc0l0ZXJhYmxlOgorICAgICAgICAgICAgc2VsZi5zZXQuc3ltbWV0cmljX2RpZmZlcmVuY2Uoc2VsZi5vdGhlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zZXQuc3ltbWV0cmljX2RpZmZlcmVuY2UsIHNlbGYub3RoZXIpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbmNlX3VwZGF0ZV9vcGVyYXRvcihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXQgLT0gc2VsZi5vdGhlcgorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBUeXBlRXJyb3IiKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW5jZV91cGRhdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYub3RoZXJJc0l0ZXJhYmxlOgorICAgICAgICAgICAgc2VsZi5zZXQuZGlmZmVyZW5jZV91cGRhdGUoc2VsZi5vdGhlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0LmRpZmZlcmVuY2VfdXBkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vdGhlcikKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLnNldCAtIHNlbGYub3RoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLm90aGVyIC0gc2VsZi5zZXQpCisgICAgICAgIGlmIHNlbGYub3RoZXJJc0l0ZXJhYmxlOgorICAgICAgICAgICAgc2VsZi5zZXQuZGlmZmVyZW5jZShzZWxmLm90aGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnNldC5kaWZmZXJlbmNlLCBzZWxmLm90aGVyKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RPbmx5U2V0c051bWVyaWMoVGVzdE9ubHlTZXRzSW5CaW5hcnlPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgICA9IHNldCgoMSwgMiwgMykpCisgICAgICAgIHNlbGYub3RoZXIgPSAxOQorICAgICAgICBzZWxmLm90aGVySXNJdGVyYWJsZSA9IEZhbHNlCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdE9ubHlTZXRzRGljdChUZXN0T25seVNldHNJbkJpbmFyeU9wcyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCAgID0gc2V0KCgxLCAyLCAzKSkKKyAgICAgICAgc2VsZi5vdGhlciA9IHsxOjIsIDM6NH0KKyAgICAgICAgc2VsZi5vdGhlcklzSXRlcmFibGUgPSBUcnVlCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdE9ubHlTZXRzT3BlcmF0b3IoVGVzdE9ubHlTZXRzSW5CaW5hcnlPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgICA9IHNldCgoMSwgMiwgMykpCisgICAgICAgIHNlbGYub3RoZXIgPSBvcGVyYXRvci5hZGQKKyAgICAgICAgc2VsZi5vdGhlcklzSXRlcmFibGUgPSBGYWxzZQorCisgICAgZGVmIHRlc3RfZ2VfZ3RfbGVfbHQoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHN1cGVyKFRlc3RPbmx5U2V0c09wZXJhdG9yLCBzZWxmKS50ZXN0X2dlX2d0X2xlX2x0KCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0T25seVNldHNUdXBsZShUZXN0T25seVNldHNJbkJpbmFyeU9wcyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCAgID0gc2V0KCgxLCAyLCAzKSkKKyAgICAgICAgc2VsZi5vdGhlciA9ICgyLCA0LCA2KQorICAgICAgICBzZWxmLm90aGVySXNJdGVyYWJsZSA9IFRydWUKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0T25seVNldHNTdHJpbmcoVGVzdE9ubHlTZXRzSW5CaW5hcnlPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgICA9IHNldCgoMSwgMiwgMykpCisgICAgICAgIHNlbGYub3RoZXIgPSAnYWJjJworICAgICAgICBzZWxmLm90aGVySXNJdGVyYWJsZSA9IFRydWUKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0T25seVNldHNHZW5lcmF0b3IoVGVzdE9ubHlTZXRzSW5CaW5hcnlPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKDAsIDEwLCAyKToKKyAgICAgICAgICAgICAgICB5aWVsZCBpCisgICAgICAgIHNlbGYuc2V0ICAgPSBzZXQoKDEsIDIsIDMpKQorICAgICAgICBzZWxmLm90aGVyID0gZ2VuKCkKKyAgICAgICAgc2VsZi5vdGhlcklzSXRlcmFibGUgPSBUcnVlCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdENvcHlpbmcodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY29weShzZWxmKToKKyAgICAgICAgZHVwID0gbGlzdChzZWxmLnNldC5jb3B5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGR1cCksIGxlbihzZWxmLnNldCkpCisgICAgICAgIGZvciBlbCBpbiBzZWxmLnNldDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWwsIGR1cCkKKyAgICAgICAgICAgIHBvcyA9IGR1cC5pbmRleChlbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZWwsIGR1cC5wb3AocG9zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkdXApCisKKyAgICBkZWYgdGVzdF9kZWVwX2NvcHkoc2VsZik6CisgICAgICAgIGR1cCA9IGNvcHkuZGVlcGNvcHkoc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWwoZHVwLCBzZWxmLnNldCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0Q29weWluZ0VtcHR5KFRlc3RDb3B5aW5nKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ID0gc2V0KCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0Q29weWluZ1NpbmdsZXRvbihUZXN0Q29weWluZyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCA9IHNldChbImhlbGxvIl0pCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdENvcHlpbmdUcmlwbGUoVGVzdENvcHlpbmcpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgPSBzZXQoWyJ6ZXJvIiwgMCwgTm9uZV0pCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdENvcHlpbmdUdXBsZShUZXN0Q29weWluZyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCA9IHNldChbKDEsIDIpXSkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0Q29weWluZ05lc3RlZChUZXN0Q29weWluZyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCA9IHNldChbKCgxLCAyKSwgKDMsIDQpKV0pCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdElkZW50aXRpZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5hID0gc2V0KCdhYnJhY2FkYWJyYScpCisgICAgICAgIHNlbGYuYiA9IHNldCgnYWxhY2F6YW0nKQorCisgICAgZGVmIHRlc3RfYmlub3BzVnNTdWJzZXRzKHNlbGYpOgorICAgICAgICBhLCBiID0gc2VsZi5hLCBzZWxmLmIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgLSBiIDwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIgLSBhIDwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgJiBiIDwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgJiBiIDwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgfCBiID4gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgfCBiID4gYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgXiBiIDwgYSB8IGIpCisKKyAgICBkZWYgdGVzdF9jb21tdXRhdGl2aXR5KHNlbGYpOgorICAgICAgICBhLCBiID0gc2VsZi5hLCBzZWxmLmIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhJmIsIGImYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhfGIsIGJ8YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhXmIsIGJeYSkKKyAgICAgICAgaWYgYSAhPSBiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhLWIsIGItYSkKKworICAgIGRlZiB0ZXN0X3N1bW1hdGlvbnMoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCBzdW1zIG9mIHBhcnRzIGVxdWFsIHRoZSB3aG9sZQorICAgICAgICBhLCBiID0gc2VsZi5hLCBzZWxmLmIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYS1iKXwoYSZiKXwoYi1hKSwgYXxiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhJmIpfChhXmIpLCBhfGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXwoYi1hKSwgYXxiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLWIpfGIsIGF8YikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYS1iKXwoYSZiKSwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYi1hKXwoYSZiKSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYS1iKXwoYi1hKSwgYV5iKQorCisgICAgZGVmIHRlc3RfZXhjbHVzaW9uKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgaW52ZXJzZSBvcGVyYXRpb25zIHNob3cgbm9uLW92ZXJsYXAKKyAgICAgICAgYSwgYiwgemVybyA9IHNlbGYuYSwgc2VsZi5iLCBzZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLWIpJmIsIHplcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGItYSkmYSwgemVybykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSZiKSYoYV5iKSwgemVybykKKworIyBUZXN0cyBkZXJpdmVkIGZyb20gdGVzdF9pdGVydG9vbHMucHkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2RlZiBSKHNlcW4pOgorICAgICdSZWd1bGFyIGdlbmVyYXRvcicKKyAgICBmb3IgaSBpbiBzZXFuOgorICAgICAgICB5aWVsZCBpCisKK2NsYXNzIEc6CisgICAgJ1NlcXVlbmNlIHVzaW5nIF9fZ2V0aXRlbV9fJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VxbltpXQorCitjbGFzcyBJOgorICAgICdTZXF1ZW5jZSB1c2luZyBpdGVyYXRvciBwcm90b2NvbCcKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pID49IGxlbihzZWxmLnNlcW4pOiByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgIHYgPSBzZWxmLnNlcW5bc2VsZi5pXQorICAgICAgICBzZWxmLmkgKz0gMQorICAgICAgICByZXR1cm4gdgorCitjbGFzcyBJZzoKKyAgICAnU2VxdWVuY2UgdXNpbmcgaXRlcmF0b3IgcHJvdG9jb2wgZGVmaW5lZCB3aXRoIGEgZ2VuZXJhdG9yJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBmb3IgdmFsIGluIHNlbGYuc2VxbjoKKyAgICAgICAgICAgIHlpZWxkIHZhbAorCitjbGFzcyBYOgorICAgICdNaXNzaW5nIF9fZ2V0aXRlbV9fIGFuZCBfX2l0ZXJfXycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vxbik6CisgICAgICAgIHNlbGYuc2VxbiA9IHNlcW4KKyAgICAgICAgc2VsZi5pID0gMAorICAgIGRlZiBuZXh0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmkgPj0gbGVuKHNlbGYuc2Vxbik6IHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgdiA9IHNlbGYuc2VxbltzZWxmLmldCisgICAgICAgIHNlbGYuaSArPSAxCisgICAgICAgIHJldHVybiB2CisKK2NsYXNzIE46CisgICAgJ0l0ZXJhdG9yIG1pc3NpbmcgbmV4dCgpJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgc2VsZi5zZXFuID0gc2VxbgorICAgICAgICBzZWxmLmkgPSAwCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCitjbGFzcyBFOgorICAgICdUZXN0IHByb3BhZ2F0aW9uIG9mIGV4Y2VwdGlvbnMnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcW4pOgorICAgICAgICBzZWxmLnNlcW4gPSBzZXFuCisgICAgICAgIHNlbGYuaSA9IDAKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIG5leHQoc2VsZik6CisgICAgICAgIDMgLy8gMAorCitjbGFzcyBTOgorICAgICdUZXN0IGltbWVkaWF0ZSBzdG9wJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXFuKToKKyAgICAgICAgcGFzcworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorCitmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY2hhaW4sIGltYXAKK2RlZiBMKHNlcW4pOgorICAgICdUZXN0IG11bHRpcGxlIHRpZXJzIG9mIGl0ZXJhdG9ycycKKyAgICByZXR1cm4gY2hhaW4oaW1hcChsYW1iZGEgeDp4LCBSKElnKEcoc2VxbikpKSkpCisKK2NsYXNzIFRlc3RWYXJpb3VzSXRlcmF0b3JBcmdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBmb3IgY29ucyBpbiAoc2V0LCBmcm96ZW5zZXQpOgorICAgICAgICAgICAgZm9yIHMgaW4gKCIxMjMiLCAiIiwgcmFuZ2UoMTAwMCksICgnZG8nLCAxLjIpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpKToKKyAgICAgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKGNvbnMoZyhzKSksIHNldChnKHMpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbnMgLCBYKHMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29ucyAsIE4ocykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGNvbnMgLCBFKHMpKQorCisgICAgZGVmIHRlc3RfaW5saW5lX21ldGhvZHMoc2VsZik6CisgICAgICAgIHMgPSBzZXQoJ25vdmVtYmVyJykKKyAgICAgICAgZm9yIGRhdGEgaW4gKCIxMjMiLCAiIiwgcmFuZ2UoMTAwMCksICgnZG8nLCAxLjIpLCB4cmFuZ2UoMjAwMCwyMjAwLDUpLCAnZGVjZW1iZXInKToKKyAgICAgICAgICAgIGZvciBtZXRoIGluIChzLnVuaW9uLCBzLmludGVyc2VjdGlvbiwgcy5kaWZmZXJlbmNlLCBzLnN5bW1ldHJpY19kaWZmZXJlbmNlLCBzLmlzZGlzam9pbnQpOgorICAgICAgICAgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgTCwgUik6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbWV0aChkYXRhKQorICAgICAgICAgICAgICAgICAgICBhY3R1YWwgPSBtZXRoKEcoZGF0YSkpCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWQsIGJvb2wpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgWChzKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIE4ocykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIG1ldGgsIEUocykpCisKKyAgICBkZWYgdGVzdF9pbnBsYWNlX21ldGhvZHMoc2VsZik6CisgICAgICAgIGZvciBkYXRhIGluICgiMTIzIiwgIiIsIHJhbmdlKDEwMDApLCAoJ2RvJywgMS4yKSwgeHJhbmdlKDIwMDAsMjIwMCw1KSwgJ2RlY2VtYmVyJyk6CisgICAgICAgICAgICBmb3IgbWV0aG5hbWUgaW4gKCd1cGRhdGUnLCAnaW50ZXJzZWN0aW9uX3VwZGF0ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaWZmZXJlbmNlX3VwZGF0ZScsICdzeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUnKToKKyAgICAgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgorICAgICAgICAgICAgICAgICAgICBzID0gc2V0KCdqYW51YXJ5JykKKyAgICAgICAgICAgICAgICAgICAgdCA9IHMuY29weSgpCisgICAgICAgICAgICAgICAgICAgIGdldGF0dHIocywgbWV0aG5hbWUpKGxpc3QoZyhkYXRhKSkpCisgICAgICAgICAgICAgICAgICAgIGdldGF0dHIodCwgbWV0aG5hbWUpKGcoZGF0YSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWwocywgdCkKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXR0cihzZXQoJ2phbnVhcnknKSwgbWV0aG5hbWUpLCBYKGRhdGEpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXR0cihzZXQoJ2phbnVhcnknKSwgbWV0aG5hbWUpLCBOKGRhdGEpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBnZXRhdHRyKHNldCgnamFudWFyeScpLCBtZXRobmFtZSksIEUoZGF0YSkpCisKK2NsYXNzIGJhZF9lcToKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgYmVfYmFkOgorICAgICAgICAgICAgc2V0Mi5jbGVhcigpCisgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcgorICAgICAgICByZXR1cm4gc2VsZiBpcyBvdGhlcgorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDAKKworY2xhc3MgYmFkX2RpY3RfY2xlYXI6CisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGJlX2JhZDoKKyAgICAgICAgICAgIGRpY3QyLmNsZWFyKCkKKyAgICAgICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiAwCisKK2NsYXNzIFRlc3RXZWlyZEJ1Z3ModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0Xzg0MjBfc2V0X21lcmdlKHNlbGYpOgorICAgICAgICAjIFRoaXMgdXNlZCB0byBzZWdmYXVsdAorICAgICAgICBnbG9iYWwgYmVfYmFkLCBzZXQyLCBkaWN0MgorICAgICAgICBiZV9iYWQgPSBGYWxzZQorICAgICAgICBzZXQxID0ge2JhZF9lcSgpfQorICAgICAgICBzZXQyID0ge2JhZF9lcSgpIGZvciBpIGluIHJhbmdlKDc1KX0KKyAgICAgICAgYmVfYmFkID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2V0MS51cGRhdGUsIHNldDIpCisKKyAgICAgICAgYmVfYmFkID0gRmFsc2UKKyAgICAgICAgc2V0MSA9IHtiYWRfZGljdF9jbGVhcigpfQorICAgICAgICBkaWN0MiA9IHtiYWRfZGljdF9jbGVhcigpOiBOb25lfQorICAgICAgICBiZV9iYWQgPSBUcnVlCisgICAgICAgIHNldDEuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlKGRpY3QyKQorCisjIEFwcGxpY2F0aW9uIHRlc3RzIChiYXNlZCBvbiBEYXZpZCBFcHBzdGVpbidzIGdyYXBoIHJlY2lwZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2RlZiBwb3dlcnNldChVKToKKyAgICAiIiJHZW5lcmF0ZXMgYWxsIHN1YnNldHMgb2YgYSBzZXQgb3Igc2VxdWVuY2UgVS4iIiIKKyAgICBVID0gaXRlcihVKQorICAgIHRyeToKKyAgICAgICAgeCA9IGZyb3plbnNldChbVS5uZXh0KCldKQorICAgICAgICBmb3IgUyBpbiBwb3dlcnNldChVKToKKyAgICAgICAgICAgIHlpZWxkIFMKKyAgICAgICAgICAgIHlpZWxkIFMgfCB4CisgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgIHlpZWxkIGZyb3plbnNldCgpCisKK2RlZiBjdWJlKG4pOgorICAgICIiIkdyYXBoIG9mIG4tZGltZW5zaW9uYWwgaHlwZXJjdWJlLiIiIgorICAgIHNpbmdsZXRvbnMgPSBbZnJvemVuc2V0KFt4XSkgZm9yIHggaW4gcmFuZ2UobildCisgICAgcmV0dXJuIGRpY3QoWyh4LCBmcm96ZW5zZXQoW3hecyBmb3IgcyBpbiBzaW5nbGV0b25zXSkpCisgICAgICAgICAgICAgICAgIGZvciB4IGluIHBvd2Vyc2V0KHJhbmdlKG4pKV0pCisKK2RlZiBsaW5lZ3JhcGgoRyk6CisgICAgIiIiR3JhcGgsIHRoZSB2ZXJ0aWNlcyBvZiB3aGljaCBhcmUgZWRnZXMgb2YgRywKKyAgICB3aXRoIHR3byB2ZXJ0aWNlcyBiZWluZyBhZGphY2VudCBpZmYgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICBlZGdlcyBzaGFyZSBhIHZlcnRleC4iIiIKKyAgICBMID0ge30KKyAgICBmb3IgeCBpbiBHOgorICAgICAgICBmb3IgeSBpbiBHW3hdOgorICAgICAgICAgICAgbnggPSBbZnJvemVuc2V0KFt4LHpdKSBmb3IgeiBpbiBHW3hdIGlmIHogIT0geV0KKyAgICAgICAgICAgIG55ID0gW2Zyb3plbnNldChbeSx6XSkgZm9yIHogaW4gR1t5XSBpZiB6ICE9IHhdCisgICAgICAgICAgICBMW2Zyb3plbnNldChbeCx5XSldID0gZnJvemVuc2V0KG54K255KQorICAgIHJldHVybiBMCisKK2RlZiBmYWNlcyhHKToKKyAgICAnUmV0dXJuIGEgc2V0IG9mIGZhY2VzIGluIEcuICBXaGVyZSBhIGZhY2UgaXMgYSBzZXQgb2YgdmVydGljZXMgb24gdGhhdCBmYWNlJworICAgICMgY3VycmVudGx5IGxpbWl0ZWQgdG8gdHJpYW5nbGVzLHNxdWFyZXMsIGFuZCBwZW50YWdvbnMKKyAgICBmID0gc2V0KCkKKyAgICBmb3IgdjEsIGVkZ2VzIGluIEcuaXRlbXMoKToKKyAgICAgICAgZm9yIHYyIGluIGVkZ2VzOgorICAgICAgICAgICAgZm9yIHYzIGluIEdbdjJdOgorICAgICAgICAgICAgICAgIGlmIHYxID09IHYzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHYxIGluIEdbdjNdOgorICAgICAgICAgICAgICAgICAgICBmLmFkZChmcm96ZW5zZXQoW3YxLCB2MiwgdjNdKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmb3IgdjQgaW4gR1t2M106CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB2NCA9PSB2MjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdjEgaW4gR1t2NF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5hZGQoZnJvemVuc2V0KFt2MSwgdjIsIHYzLCB2NF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdjUgaW4gR1t2NF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHY1ID09IHYzIG9yIHY1ID09IHYyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdjEgaW4gR1t2NV06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLmFkZChmcm96ZW5zZXQoW3YxLCB2MiwgdjMsIHY0LCB2NV0pKQorICAgIHJldHVybiBmCisKKworY2xhc3MgVGVzdEdyYXBocyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jdWJlKHNlbGYpOgorCisgICAgICAgIGcgPSBjdWJlKDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHZlcnQgLS0+IHt2MSwgdjIsIHYzfQorICAgICAgICB2ZXJ0aWNlczEgPSBzZXQoZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmVydGljZXMxKSwgOCkgICAgICMgZWlnaHQgdmVydGljZXMKKyAgICAgICAgZm9yIGVkZ2UgaW4gZy52YWx1ZXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVkZ2UpLCAzKSAgICAgICMgZWFjaCB2ZXJ0ZXggY29ubmVjdHMgdG8gdGhyZWUgZWRnZXMKKyAgICAgICAgdmVydGljZXMyID0gc2V0KHYgZm9yIGVkZ2VzIGluIGcudmFsdWVzKCkgZm9yIHYgaW4gZWRnZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmVydGljZXMxLCB2ZXJ0aWNlczIpICAjIGVkZ2UgdmVydGljZXMgaW4gb3JpZ2luYWwgc2V0CisKKyAgICAgICAgY3ViZWZhY2VzID0gZmFjZXMoZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY3ViZWZhY2VzKSwgNikgICAgICMgc2l4IGZhY2VzCisgICAgICAgIGZvciBmYWNlIGluIGN1YmVmYWNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZhY2UpLCA0KSAgICAgICMgZWFjaCBmYWNlIGlzIGEgc3F1YXJlCisKKyAgICBkZWYgdGVzdF9jdWJvY3RhaGVkcm9uKHNlbGYpOgorCisgICAgICAgICMgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DdWJvY3RhaGVkcm9uCisgICAgICAgICMgOCB0cmlhbmd1bGFyIGZhY2VzIGFuZCA2IHNxdWFyZSBmYWNlcworICAgICAgICAjIDEyIGluZGVudGljYWwgdmVydGljZXMgZWFjaCBjb25uZWN0aW5nIGEgdHJpYW5nbGUgYW5kIHNxdWFyZQorCisgICAgICAgIGcgPSBjdWJlKDMpCisgICAgICAgIGN1Ym9jdGFoZWRyb24gPSBsaW5lZ3JhcGgoZykgICAgICAgICAgICAjIFYoIC0tPiB7VjEsIFYyLCBWMywgVjR9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGN1Ym9jdGFoZWRyb24pLCAxMikjIHR3ZWx2ZSB2ZXJ0aWNlcworCisgICAgICAgIHZlcnRpY2VzID0gc2V0KGN1Ym9jdGFoZWRyb24pCisgICAgICAgIGZvciBlZGdlcyBpbiBjdWJvY3RhaGVkcm9uLnZhbHVlcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWRnZXMpLCA0KSAgICAgIyBlYWNoIHZlcnRleCBjb25uZWN0cyB0byBmb3VyIG90aGVyIHZlcnRpY2VzCisgICAgICAgIG90aGVydmVydGljZXMgPSBzZXQoZWRnZSBmb3IgZWRnZXMgaW4gY3Vib2N0YWhlZHJvbi52YWx1ZXMoKSBmb3IgZWRnZSBpbiBlZGdlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2ZXJ0aWNlcywgb3RoZXJ2ZXJ0aWNlcykgICAjIGVkZ2UgdmVydGljZXMgaW4gb3JpZ2luYWwgc2V0CisKKyAgICAgICAgY3Vib2ZhY2VzID0gZmFjZXMoY3Vib2N0YWhlZHJvbikKKyAgICAgICAgZmFjZXNpemVzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoaW50KQorICAgICAgICBmb3IgZmFjZSBpbiBjdWJvZmFjZXM6CisgICAgICAgICAgICBmYWNlc2l6ZXNbbGVuKGZhY2UpXSArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmFjZXNpemVzWzNdLCA4KSAgICAgICAjIGVpZ2h0IHRyaWFuZ3VsYXIgZmFjZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmYWNlc2l6ZXNbNF0sIDYpICAgICAgICMgc2l4IHNxdWFyZSBmYWNlcworCisgICAgICAgIGZvciB2ZXJ0ZXggaW4gY3Vib2N0YWhlZHJvbjoKKyAgICAgICAgICAgIGVkZ2UgPSB2ZXJ0ZXggICAgICAgICAgICAgICAgICAgICAgICMgQ3Vib2N0YWhlZHJvbiB2ZXJ0aWNlcyBhcmUgZWRnZXMgaW4gQ3ViZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWRnZSksIDIpICAgICAgIyBUd28gY3ViZSB2ZXJ0aWNlcyBkZWZpbmUgYW4gZWRnZQorICAgICAgICAgICAgZm9yIGN1YmV2ZXJ0IGluIGVkZ2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjdWJldmVydCwgZykKKworCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKKyAgICB0ZXN0X2NsYXNzZXMgPSAoCisgICAgICAgIFRlc3RTZXQsCisgICAgICAgIFRlc3RTZXRTdWJjbGFzcywKKyAgICAgICAgVGVzdFNldFN1YmNsYXNzV2l0aEtleXdvcmRBcmdzLAorICAgICAgICBUZXN0RnJvemVuU2V0LAorICAgICAgICBUZXN0RnJvemVuU2V0U3ViY2xhc3MsCisgICAgICAgIFRlc3RTZXRPZlNldHMsCisgICAgICAgIFRlc3RFeGNlcHRpb25Qcm9wYWdhdGlvbiwKKyAgICAgICAgVGVzdEJhc2ljT3BzRW1wdHksCisgICAgICAgIFRlc3RCYXNpY09wc1NpbmdsZXRvbiwKKyAgICAgICAgVGVzdEJhc2ljT3BzVHVwbGUsCisgICAgICAgIFRlc3RCYXNpY09wc1RyaXBsZSwKKyAgICAgICAgVGVzdEJpbmFyeU9wcywKKyAgICAgICAgVGVzdFVwZGF0ZU9wcywKKyAgICAgICAgVGVzdE11dGF0ZSwKKyAgICAgICAgVGVzdFN1YnNldEVxdWFsRW1wdHksCisgICAgICAgIFRlc3RTdWJzZXRFcXVhbE5vbkVtcHR5LAorICAgICAgICBUZXN0U3Vic2V0RW1wdHlOb25FbXB0eSwKKyAgICAgICAgVGVzdFN1YnNldFBhcnRpYWwsCisgICAgICAgIFRlc3RTdWJzZXROb25PdmVybGFwLAorICAgICAgICBUZXN0T25seVNldHNOdW1lcmljLAorICAgICAgICBUZXN0T25seVNldHNEaWN0LAorICAgICAgICBUZXN0T25seVNldHNPcGVyYXRvciwKKyAgICAgICAgVGVzdE9ubHlTZXRzVHVwbGUsCisgICAgICAgIFRlc3RPbmx5U2V0c1N0cmluZywKKyAgICAgICAgVGVzdE9ubHlTZXRzR2VuZXJhdG9yLAorICAgICAgICBUZXN0Q29weWluZ0VtcHR5LAorICAgICAgICBUZXN0Q29weWluZ1NpbmdsZXRvbiwKKyAgICAgICAgVGVzdENvcHlpbmdUcmlwbGUsCisgICAgICAgIFRlc3RDb3B5aW5nVHVwbGUsCisgICAgICAgIFRlc3RDb3B5aW5nTmVzdGVkLAorICAgICAgICBUZXN0SWRlbnRpdGllcywKKyAgICAgICAgVGVzdFZhcmlvdXNJdGVyYXRvckFyZ3MsCisgICAgICAgIFRlc3RHcmFwaHMsCisgICAgICAgIFRlc3RXZWlyZEJ1Z3MsCisgICAgICAgICkKKworICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKworICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZworICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgY291bnRzID0gW05vbmVdICogNQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKGNvdW50cykpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgIHByaW50IGNvdW50cworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zZXRjb21wcy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NldGNvbXBzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNWU2ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zZXRjb21wcy5weQpAQCAtMCwwICsxLDE1MSBAQAorZG9jdGVzdHMgPSAiIiIKKyMjIyMjIyMjIyMjIFRlc3RzIG1vc3RseSBjb3BpZWQgZnJvbSB0ZXN0X2xpc3Rjb21wcy5weSAjIyMjIyMjIyMjIyMKKworVGVzdCBzaW1wbGUgbG9vcCB3aXRoIGNvbmRpdGlvbmFsCisKKyAgICA+Pj4gc3VtKHtpKmkgZm9yIGkgaW4gcmFuZ2UoMTAwKSBpZiBpJjEgPT0gMX0pCisgICAgMTY2NjUwCisKK1Rlc3Qgc2ltcGxlIGNhc2UKKworICAgID4+PiB7Mip5ICsgeCArIDEgZm9yIHggaW4gKDAsKSBmb3IgeSBpbiAoMSwpfQorICAgIHNldChbM10pCisKK1Rlc3Qgc2ltcGxlIG5lc3RpbmcKKworICAgID4+PiBsaXN0KHNvcnRlZCh7KGksaikgZm9yIGkgaW4gcmFuZ2UoMykgZm9yIGogaW4gcmFuZ2UoNCl9KSkKKyAgICBbKDAsIDApLCAoMCwgMSksICgwLCAyKSwgKDAsIDMpLCAoMSwgMCksICgxLCAxKSwgKDEsIDIpLCAoMSwgMyksICgyLCAwKSwgKDIsIDEpLCAoMiwgMiksICgyLCAzKV0KKworVGVzdCBuZXN0aW5nIHdpdGggdGhlIGlubmVyIGV4cHJlc3Npb24gZGVwZW5kZW50IG9uIHRoZSBvdXRlcgorCisgICAgPj4+IGxpc3Qoc29ydGVkKHsoaSxqKSBmb3IgaSBpbiByYW5nZSg0KSBmb3IgaiBpbiByYW5nZShpKX0pKQorICAgIFsoMSwgMCksICgyLCAwKSwgKDIsIDEpLCAoMywgMCksICgzLCAxKSwgKDMsIDIpXQorCitNYWtlIHN1cmUgdGhlIGluZHVjdGlvbiB2YXJpYWJsZSBpcyBub3QgZXhwb3NlZAorCisgICAgPj4+IGkgPSAyMAorICAgID4+PiBzdW0oe2kqaSBmb3IgaSBpbiByYW5nZSgxMDApfSkKKyAgICAzMjgzNTAKKworICAgID4+PiBpCisgICAgMjAKKworVmVyaWZ5IHRoYXQgc3ludGF4IGVycm9yJ3MgYXJlIHJhaXNlZCBmb3Igc2V0Y29tcHMgdXNlZCBhcyBsdmFsdWVzCisKKyAgICA+Pj4ge3kgZm9yIHkgaW4gKDEsMil9ID0gMTAgICAgICAgICAgIyBkb2N0ZXN0OiArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgLi4uCisgICAgU3ludGF4RXJyb3I6IC4uLgorCisgICAgPj4+IHt5IGZvciB5IGluICgxLDIpfSArPSAxMCAgICAgICAgICMgZG9jdGVzdDogK0lHTk9SRV9FWENFUFRJT05fREVUQUlMCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgIC4uLgorICAgIFN5bnRheEVycm9yOiAuLi4KKworCitNYWtlIGEgbmVzdGVkIHNldCBjb21wcmVoZW5zaW9uIHRoYXQgYWN0cyBsaWtlIHNldChyYW5nZSgpKQorCisgICAgPj4+IGRlZiBzcmFuZ2Uobik6CisgICAgLi4uICAgICByZXR1cm4ge2kgZm9yIGkgaW4gcmFuZ2Uobil9CisgICAgPj4+IGxpc3Qoc29ydGVkKHNyYW5nZSgxMCkpKQorICAgIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XQorCitTYW1lIGFnYWluLCBvbmx5IGFzIGEgbGFtYmRhIGV4cHJlc3Npb24gaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIGRlZmluaXRpb24KKworICAgID4+PiBscmFuZ2UgPSBsYW1iZGEgbjogIHtpIGZvciBpIGluIHJhbmdlKG4pfQorICAgID4+PiBsaXN0KHNvcnRlZChscmFuZ2UoMTApKSkKKyAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KKworR2VuZXJhdG9ycyBjYW4gY2FsbCBvdGhlciBnZW5lcmF0b3JzOgorCisgICAgPj4+IGRlZiBncmFuZ2Uobik6CisgICAgLi4uICAgICBmb3IgeCBpbiB7aSBmb3IgaSBpbiByYW5nZShuKX06CisgICAgLi4uICAgICAgICAgeWllbGQgeAorICAgID4+PiBsaXN0KHNvcnRlZChncmFuZ2UoNSkpKQorICAgIFswLCAxLCAyLCAzLCA0XQorCisKK01ha2Ugc3VyZSB0aGF0IE5vbmUgaXMgYSB2YWxpZCByZXR1cm4gdmFsdWUKKworICAgID4+PiB7Tm9uZSBmb3IgaSBpbiByYW5nZSgxMCl9CisgICAgc2V0KFtOb25lXSkKKworIyMjIyMjIyMjIyMgVGVzdHMgZm9yIHZhcmlvdXMgc2NvcGluZyBjb3JuZXIgY2FzZXMgIyMjIyMjIyMjIyMjCisKK1JldHVybiBsYW1iZGFzIHRoYXQgdXNlIHRoZSBpdGVyYXRpb24gdmFyaWFibGUgYXMgYSBkZWZhdWx0IGFyZ3VtZW50CisKKyAgICA+Pj4gaXRlbXMgPSB7KGxhbWJkYSBpPWk6IGkpIGZvciBpIGluIHJhbmdlKDUpfQorICAgID4+PiB7eCgpIGZvciB4IGluIGl0ZW1zfSA9PSBzZXQocmFuZ2UoNSkpCisgICAgVHJ1ZQorCitTYW1lIGFnYWluLCBvbmx5IHRoaXMgdGltZSBhcyBhIGNsb3N1cmUgdmFyaWFibGUKKworICAgID4+PiBpdGVtcyA9IHsobGFtYmRhOiBpKSBmb3IgaSBpbiByYW5nZSg1KX0KKyAgICA+Pj4ge3goKSBmb3IgeCBpbiBpdGVtc30KKyAgICBzZXQoWzRdKQorCitBbm90aGVyIHdheSB0byB0ZXN0IHRoYXQgdGhlIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyBsb2NhbCB0byB0aGUgbGlzdCBjb21wCisKKyAgICA+Pj4gaXRlbXMgPSB7KGxhbWJkYTogaSkgZm9yIGkgaW4gcmFuZ2UoNSl9CisgICAgPj4+IGkgPSAyMAorICAgID4+PiB7eCgpIGZvciB4IGluIGl0ZW1zfQorICAgIHNldChbNF0pCisKK0FuZCBjb25maXJtIHRoYXQgYSBjbG9zdXJlIGNhbiBqdW1wIG92ZXIgdGhlIGxpc3QgY29tcCBzY29wZQorCisgICAgPj4+IGl0ZW1zID0geyhsYW1iZGE6IHkpIGZvciBpIGluIHJhbmdlKDUpfQorICAgID4+PiB5ID0gMgorICAgID4+PiB7eCgpIGZvciB4IGluIGl0ZW1zfQorICAgIHNldChbMl0pCisKK1dlIGFsc28gcmVwZWF0IGVhY2ggb2YgdGhlIGFib3ZlIHNjb3BpbmcgdGVzdHMgaW5zaWRlIGEgZnVuY3Rpb24KKworICAgID4+PiBkZWYgdGVzdF9mdW5jKCk6CisgICAgLi4uICAgICBpdGVtcyA9IHsobGFtYmRhIGk9aTogaSkgZm9yIGkgaW4gcmFuZ2UoNSl9CisgICAgLi4uICAgICByZXR1cm4ge3goKSBmb3IgeCBpbiBpdGVtc30KKyAgICA+Pj4gdGVzdF9mdW5jKCkgPT0gc2V0KHJhbmdlKDUpKQorICAgIFRydWUKKworICAgID4+PiBkZWYgdGVzdF9mdW5jKCk6CisgICAgLi4uICAgICBpdGVtcyA9IHsobGFtYmRhOiBpKSBmb3IgaSBpbiByYW5nZSg1KX0KKyAgICAuLi4gICAgIHJldHVybiB7eCgpIGZvciB4IGluIGl0ZW1zfQorICAgID4+PiB0ZXN0X2Z1bmMoKQorICAgIHNldChbNF0pCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuYygpOgorICAgIC4uLiAgICAgaXRlbXMgPSB7KGxhbWJkYTogaSkgZm9yIGkgaW4gcmFuZ2UoNSl9CisgICAgLi4uICAgICBpID0gMjAKKyAgICAuLi4gICAgIHJldHVybiB7eCgpIGZvciB4IGluIGl0ZW1zfQorICAgID4+PiB0ZXN0X2Z1bmMoKQorICAgIHNldChbNF0pCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuYygpOgorICAgIC4uLiAgICAgaXRlbXMgPSB7KGxhbWJkYTogeSkgZm9yIGkgaW4gcmFuZ2UoNSl9CisgICAgLi4uICAgICB5ID0gMgorICAgIC4uLiAgICAgcmV0dXJuIHt4KCkgZm9yIHggaW4gaXRlbXN9CisgICAgPj4+IHRlc3RfZnVuYygpCisgICAgc2V0KFsyXSkKKworIiIiCisKKworX190ZXN0X18gPSB7J2RvY3Rlc3RzJyA6IGRvY3Rlc3RzfQorCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgaW1wb3J0IHN5cworICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3NldGNvbXBzCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3Rfc2V0Y29tcHMsIHZlcmJvc2UpCisKKyAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKKyAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGNvdW50cykpOgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3Rfc2V0Y29tcHMsIHZlcmJvc2UpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKKyAgICAgICAgcHJpbnQoY291bnRzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zZXRzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc2V0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzU0ZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc2V0cy5weQpAQCAtMCwwICsxLDg2MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCB1bml0dGVzdCwgb3BlcmF0b3IsIGNvcHksIHBpY2tsZSwgcmFuZG9tCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCit0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgic2V0cyIsIGRlcHJlY2F0ZWQ9VHJ1ZSkKK2Zyb20gc2V0cyBpbXBvcnQgU2V0LCBJbW11dGFibGVTZXQKKworZW1wdHlfc2V0ID0gU2V0KCkKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0QmFzaWNPcHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yZXByIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNlbGYuc2V0KSwgc2VsZi5yZXByKQorCisgICAgZGVmIHRlc3RfbGVuZ3RoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnNldCksIHNlbGYubGVuZ3RoKQorCisgICAgZGVmIHRlc3Rfc2VsZl9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgc2VsZi5zZXQpCisKKyAgICBkZWYgdGVzdF9lcXVpdmFsZW50X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBzZWxmLmR1cCkKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQuY29weSgpLCBzZWxmLmR1cCkKKworICAgIGRlZiB0ZXN0X3NlbGZfdW5pb24oc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IHwgc2VsZi5zZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNlbGYuZHVwKQorCisgICAgZGVmIHRlc3RfZW1wdHlfdW5pb24oc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IHwgZW1wdHlfc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZWxmLmR1cCkKKworICAgIGRlZiB0ZXN0X3VuaW9uX2VtcHR5KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBlbXB0eV9zZXQgfCBzZWxmLnNldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc2VsZi5kdXApCisKKyAgICBkZWYgdGVzdF9zZWxmX2ludGVyc2VjdGlvbihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgJiBzZWxmLnNldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc2VsZi5kdXApCisKKyAgICBkZWYgdGVzdF9lbXB0eV9pbnRlcnNlY3Rpb24oc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0ICYgZW1wdHlfc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBlbXB0eV9zZXQpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fZW1wdHkoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGVtcHR5X3NldCAmIHNlbGYuc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBlbXB0eV9zZXQpCisKKyAgICBkZWYgdGVzdF9zZWxmX3N5bW1ldHJpY19kaWZmZXJlbmNlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCBeIHNlbGYuc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBlbXB0eV9zZXQpCisKKyAgICBkZWYgY2hlY2tlbXB0eV9zeW1tZXRyaWNfZGlmZmVyZW5jZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgXiBlbXB0eV9zZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNlbGYuc2V0KQorCisgICAgZGVmIHRlc3Rfc2VsZl9kaWZmZXJlbmNlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCAtIHNlbGYuc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBlbXB0eV9zZXQpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9kaWZmZXJlbmNlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCAtIGVtcHR5X3NldAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgc2VsZi5kdXApCisKKyAgICBkZWYgdGVzdF9lbXB0eV9kaWZmZXJlbmNlX3JldihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gZW1wdHlfc2V0IC0gc2VsZi5zZXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGVtcHR5X3NldCkKKworICAgIGRlZiB0ZXN0X2l0ZXJhdGlvbihzZWxmKToKKyAgICAgICAgZm9yIHYgaW4gc2VsZi5zZXQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHYsIHNlbGYudmFsdWVzKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIHAgPSBwaWNrbGUuZHVtcHMoc2VsZi5zZXQpCisgICAgICAgIGNvcHkgPSBwaWNrbGUubG9hZHMocCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgY29weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgIT0gJXMiICUgKHNlbGYuc2V0LCBjb3B5KSkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0QmFzaWNPcHNFbXB0eShUZXN0QmFzaWNPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlICAgPSAiZW1wdHkgc2V0IgorICAgICAgICBzZWxmLnZhbHVlcyA9IFtdCisgICAgICAgIHNlbGYuc2V0ICAgID0gU2V0KHNlbGYudmFsdWVzKQorICAgICAgICBzZWxmLmR1cCAgICA9IFNldChzZWxmLnZhbHVlcykKKyAgICAgICAgc2VsZi5sZW5ndGggPSAwCisgICAgICAgIHNlbGYucmVwciAgID0gIlNldChbXSkiCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdEJhc2ljT3BzU2luZ2xldG9uKFRlc3RCYXNpY09wcyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNhc2UgICA9ICJ1bml0IHNldCAobnVtYmVyKSIKKyAgICAgICAgc2VsZi52YWx1ZXMgPSBbM10KKyAgICAgICAgc2VsZi5zZXQgICAgPSBTZXQoc2VsZi52YWx1ZXMpCisgICAgICAgIHNlbGYuZHVwICAgID0gU2V0KHNlbGYudmFsdWVzKQorICAgICAgICBzZWxmLmxlbmd0aCA9IDEKKyAgICAgICAgc2VsZi5yZXByICAgPSAiU2V0KFszXSkiCisKKyAgICBkZWYgdGVzdF9pbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDMgaW4gc2VsZi5zZXQpCisKKyAgICBkZWYgdGVzdF9ub3RfaW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyIG5vdCBpbiBzZWxmLnNldCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0QmFzaWNPcHNUdXBsZShUZXN0QmFzaWNPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jYXNlICAgPSAidW5pdCBzZXQgKHR1cGxlKSIKKyAgICAgICAgc2VsZi52YWx1ZXMgPSBbKDAsICJ6ZXJvIildCisgICAgICAgIHNlbGYuc2V0ICAgID0gU2V0KHNlbGYudmFsdWVzKQorICAgICAgICBzZWxmLmR1cCAgICA9IFNldChzZWxmLnZhbHVlcykKKyAgICAgICAgc2VsZi5sZW5ndGggPSAxCisgICAgICAgIHNlbGYucmVwciAgID0gIlNldChbKDAsICd6ZXJvJyldKSIKKworICAgIGRlZiB0ZXN0X2luKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoKDAsICJ6ZXJvIikgaW4gc2VsZi5zZXQpCisKKyAgICBkZWYgdGVzdF9ub3RfaW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSg5IG5vdCBpbiBzZWxmLnNldCkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0QmFzaWNPcHNUcmlwbGUoVGVzdEJhc2ljT3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY2FzZSAgID0gInRyaXBsZSBzZXQiCisgICAgICAgIHNlbGYudmFsdWVzID0gWzAsICJ6ZXJvIiwgb3BlcmF0b3IuYWRkXQorICAgICAgICBzZWxmLnNldCAgICA9IFNldChzZWxmLnZhbHVlcykKKyAgICAgICAgc2VsZi5kdXAgICAgPSBTZXQoc2VsZi52YWx1ZXMpCisgICAgICAgIHNlbGYubGVuZ3RoID0gMworICAgICAgICBzZWxmLnJlcHIgICA9IE5vbmUKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitkZWYgYmFkaXRlcigpOgorICAgIHJhaXNlIFR5cGVFcnJvcgorICAgIHlpZWxkIFRydWUKKworZGVmIGdvb2RpdGVyKCk6CisgICAgeWllbGQgVHJ1ZQorCitjbGFzcyBUZXN0RXhjZXB0aW9uUHJvcGFnYXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlNGIDYyODI0NjogIFNldCBjb25zdHJ1Y3RvciBzaG91bGQgbm90IHRyYXAgaXRlcmF0b3IgVHlwZUVycm9ycyIiIgorCisgICAgZGVmIHRlc3RfaW5zdGFuY2VXaXRoRXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFNldCwgYmFkaXRlcigpKQorCisgICAgZGVmIHRlc3RfaW5zdGFuY2VzV2l0aG91dEV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIyBBbGwgb2YgdGhlc2UgaXRlcmFibGVzIHNob3VsZCBsb2FkIHdpdGhvdXQgZXhjZXB0aW9uLgorICAgICAgICBTZXQoWzEsMiwzXSkKKyAgICAgICAgU2V0KCgxLDIsMykpCisgICAgICAgIFNldCh7J29uZSc6MSwgJ3R3byc6MiwgJ3RocmVlJzozfSkKKyAgICAgICAgU2V0KHhyYW5nZSgzKSkKKyAgICAgICAgU2V0KCdhYmMnKQorICAgICAgICBTZXQoZ29vZGl0ZXIoKSkKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0U2V0T2ZTZXRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgaW5uZXIgPSBTZXQoWzFdKQorICAgICAgICBvdXRlciA9IFNldChbaW5uZXJdKQorICAgICAgICBlbGVtZW50ID0gb3V0ZXIucG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGVsZW1lbnQpLCBJbW11dGFibGVTZXQpCisgICAgICAgIG91dGVyLmFkZChpbm5lcikgICAgICAgICMgUmVidWlsZCBzZXQgb2Ygc2V0cyB3aXRoIC5hZGQgbWV0aG9kCisgICAgICAgIG91dGVyLnJlbW92ZShpbm5lcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRlciwgU2V0KCkpICAgIyBWZXJpZnkgdGhhdCByZW1vdmUgd29ya2VkCisgICAgICAgIG91dGVyLmRpc2NhcmQoaW5uZXIpICAgICMgQWJzZW5jZSBvZiBLZXlFcnJvciBpbmRpY2F0ZXMgd29ya2luZyBmaW5lCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEJpbmFyeU9wcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCA9IFNldCgoMiwgNCwgNikpCisKKyAgICBkZWYgdGVzdF9lcShzZWxmKTogICAgICAgICAgICAgICMgU0YgYnVnIDY0MzExNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoezI6MSw0OjMsNjo1fSkpCisKKyAgICBkZWYgdGVzdF91bmlvbl9zdWJzZXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IHwgU2V0KFsyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFNldCgoMiwgNCwgNikpKQorCisgICAgZGVmIHRlc3RfdW5pb25fc3VwZXJzZXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0IHwgU2V0KFsyLCA0LCA2LCA4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFNldChbMiwgNCwgNiwgOF0pKQorCisgICAgZGVmIHRlc3RfdW5pb25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgfCBTZXQoWzMsIDQsIDVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgU2V0KFsyLCAzLCA0LCA1LCA2XSkpCisKKyAgICBkZWYgdGVzdF91bmlvbl9ub25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgfCBTZXQoWzhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgU2V0KFsyLCA0LCA2LCA4XSkpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fc3Vic2V0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCAmIFNldCgoMiwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBTZXQoKDIsIDQpKSkKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl9zdXBlcnNldChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgJiBTZXQoWzIsIDQsIDYsIDhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgU2V0KFsyLCA0LCA2XSkpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgJiBTZXQoWzMsIDQsIDVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgU2V0KFs0XSkpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fbm9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2V0ICYgU2V0KFs4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGVtcHR5X3NldCkKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX3N1YnNldChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgXiBTZXQoKDIsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgU2V0KFs2XSkpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZV9zdXBlcnNldChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZXQgXiBTZXQoKDIsIDQsIDYsIDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgU2V0KFs4XSkpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZV9vdmVybGFwKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCBeIFNldCgoMywgNCwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBTZXQoWzIsIDMsIDUsIDZdKSkKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX25vbl9vdmVybGFwKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNldCBeIFNldChbOF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBTZXQoWzIsIDQsIDYsIDhdKSkKKworICAgIGRlZiB0ZXN0X2NtcChzZWxmKToKKyAgICAgICAgYSwgYiA9IFNldCgnYScpLCBTZXQoJ2InKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCwgYSwgYikKKworICAgICAgICAjIFlvdSBjYW4gdmlldyB0aGlzIGFzIGEgYnVnbGV0OiAgY21wKGEsIGEpIGRvZXMgbm90IHJhaXNlIFR5cGVFcnJvciwKKyAgICAgICAgIyBiZWNhdXNlIF9fZXFfXyBpcyB0cmllZCBiZWZvcmUgX19jbXBfXywgYW5kIGEuX19lcV9fKGEpIHJldHVybnMgVHJ1ZSwKKyAgICAgICAgIyB3aGljaCBQeXRob24gdGhpbmtzIGlzIGdvb2QgZW5vdWdoIHRvIHN5bnRoZXNpemUgYSBjbXAoKSByZXN1bHQKKyAgICAgICAgIyB3aXRob3V0IGNhbGxpbmcgX19jbXBfXy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoYSwgYSksIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbXAsIGEsIDEyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNtcCwgImFiYyIsIGEpCisKKyAgICBkZWYgdGVzdF9pbnBsYWNlX29uX3NlbGYoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLnNldC5jb3B5KCkKKyAgICAgICAgdCB8PSB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgc2VsZi5zZXQpCisgICAgICAgIHQgJj0gdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHNlbGYuc2V0KQorICAgICAgICB0IC09IHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odCksIDApCisgICAgICAgIHQgPSBzZWxmLnNldC5jb3B5KCkKKyAgICAgICAgdCBePSB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCAwKQorCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFVwZGF0ZU9wcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCA9IFNldCgoMiwgNCwgNikpCisKKyAgICBkZWYgdGVzdF91bmlvbl9zdWJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0IHw9IFNldChbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldCgoMiwgNCwgNikpKQorCisgICAgZGVmIHRlc3RfdW5pb25fc3VwZXJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0IHw9IFNldChbMiwgNCwgNiwgOF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldChbMiwgNCwgNiwgOF0pKQorCisgICAgZGVmIHRlc3RfdW5pb25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgfD0gU2V0KFszLCA0LCA1XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KFsyLCAzLCA0LCA1LCA2XSkpCisKKyAgICBkZWYgdGVzdF91bmlvbl9ub25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgfD0gU2V0KFs4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KFsyLCA0LCA2LCA4XSkpCisKKyAgICBkZWYgdGVzdF91bmlvbl9tZXRob2RfY2FsbChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQudW5pb25fdXBkYXRlKFNldChbMywgNCwgNV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoWzIsIDMsIDQsIDUsIDZdKSkKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl9zdWJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ICY9IFNldCgoMiwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldCgoMiwgNCkpKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX3N1cGVyc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnNldCAmPSBTZXQoWzIsIDQsIDYsIDhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoWzIsIDQsIDZdKSkKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl9vdmVybGFwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCAmPSBTZXQoWzMsIDQsIDVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoWzRdKSkKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl9ub25fb3ZlcmxhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgJj0gU2V0KFs4XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgZW1wdHlfc2V0KQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX21ldGhvZF9jYWxsKHNlbGYpOgorICAgICAgICBzZWxmLnNldC5pbnRlcnNlY3Rpb25fdXBkYXRlKFNldChbMywgNCwgNV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoWzRdKSkKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX3N1YnNldChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgXj0gU2V0KCgyLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KFs2XSkpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZV9zdXBlcnNldChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgXj0gU2V0KCgyLCA0LCA2LCA4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KFs4XSkpCisKKyAgICBkZWYgdGVzdF9zeW1fZGlmZmVyZW5jZV9vdmVybGFwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCBePSBTZXQoKDMsIDQsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoWzIsIDMsIDUsIDZdKSkKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX25vbl9vdmVybGFwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCBePSBTZXQoWzhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoWzIsIDQsIDYsIDhdKSkKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX21ldGhvZF9jYWxsKHNlbGYpOgorICAgICAgICBzZWxmLnNldC5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUoU2V0KFszLCA0LCA1XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldChbMiwgMywgNSwgNl0pKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW5jZV9zdWJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0IC09IFNldCgoMiwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldChbNl0pKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW5jZV9zdXBlcnNldChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgLT0gU2V0KCgyLCA0LCA2LCA4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KFtdKSkKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2Vfb3ZlcmxhcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgLT0gU2V0KCgzLCA0LCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KFsyLCA2XSkpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbmNlX25vbl9vdmVybGFwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCAtPSBTZXQoWzhdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoWzIsIDQsIDZdKSkKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2VfbWV0aG9kX2NhbGwoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LmRpZmZlcmVuY2VfdXBkYXRlKFNldChbMywgNCwgNV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoWzIsIDZdKSkKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0TXV0YXRlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudmFsdWVzID0gWyJhIiwgImIiLCAiYyJdCisgICAgICAgIHNlbGYuc2V0ID0gU2V0KHNlbGYudmFsdWVzKQorCisgICAgZGVmIHRlc3RfYWRkX3ByZXNlbnQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LmFkZCgiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldCgiYWJjIikpCisKKyAgICBkZWYgdGVzdF9hZGRfYWJzZW50KHNlbGYpOgorICAgICAgICBzZWxmLnNldC5hZGQoImQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoImFiY2QiKSkKKworICAgIGRlZiB0ZXN0X2FkZF91bnRpbF9mdWxsKHNlbGYpOgorICAgICAgICB0bXAgPSBTZXQoKQorICAgICAgICBleHBlY3RlZF9sZW4gPSAwCisgICAgICAgIGZvciB2IGluIHNlbGYudmFsdWVzOgorICAgICAgICAgICAgdG1wLmFkZCh2KQorICAgICAgICAgICAgZXhwZWN0ZWRfbGVuICs9IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRtcCksIGV4cGVjdGVkX2xlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0bXAsIHNlbGYuc2V0KQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3ByZXNlbnQoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LnJlbW92ZSgiYiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldCgiYWMiKSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9hYnNlbnQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc2V0LnJlbW92ZSgiZCIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIlJlbW92aW5nIG1pc3NpbmcgZWxlbWVudCBzaG91bGQgaGF2ZSByYWlzZWQgTG9va3VwRXJyb3IiKQorICAgICAgICBleGNlcHQgTG9va3VwRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfdW50aWxfZW1wdHkoc2VsZik6CisgICAgICAgIGV4cGVjdGVkX2xlbiA9IGxlbihzZWxmLnNldCkKKyAgICAgICAgZm9yIHYgaW4gc2VsZi52YWx1ZXM6CisgICAgICAgICAgICBzZWxmLnNldC5yZW1vdmUodikKKyAgICAgICAgICAgIGV4cGVjdGVkX2xlbiAtPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnNldCksIGV4cGVjdGVkX2xlbikKKworICAgIGRlZiB0ZXN0X2Rpc2NhcmRfcHJlc2VudChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQuZGlzY2FyZCgiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldCgiYWIiKSkKKworICAgIGRlZiB0ZXN0X2Rpc2NhcmRfYWJzZW50KHNlbGYpOgorICAgICAgICBzZWxmLnNldC5kaXNjYXJkKCJkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgU2V0KCJhYmMiKSkKKworICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLnNldC5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuc2V0KSwgMCkKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgcG9wcGVkID0ge30KKyAgICAgICAgd2hpbGUgc2VsZi5zZXQ6CisgICAgICAgICAgICBwb3BwZWRbc2VsZi5zZXQucG9wKCldID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwb3BwZWQpLCBsZW4oc2VsZi52YWx1ZXMpKQorICAgICAgICBmb3IgdiBpbiBzZWxmLnZhbHVlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odiwgcG9wcGVkKQorCisgICAgZGVmIHRlc3RfdXBkYXRlX2VtcHR5X3R1cGxlKHNlbGYpOgorICAgICAgICBzZWxmLnNldC51bmlvbl91cGRhdGUoKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIFNldChzZWxmLnZhbHVlcykpCisKKyAgICBkZWYgdGVzdF91cGRhdGVfdW5pdF90dXBsZV9vdmVybGFwKHNlbGYpOgorICAgICAgICBzZWxmLnNldC51bmlvbl91cGRhdGUoKCJhIiwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoc2VsZi52YWx1ZXMpKQorCisgICAgZGVmIHRlc3RfdXBkYXRlX3VuaXRfdHVwbGVfbm9uX292ZXJsYXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0LnVuaW9uX3VwZGF0ZSgoImEiLCAieiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBTZXQoc2VsZi52YWx1ZXMgKyBbInoiXSkpCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFN1YnNldHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2FzZTJtZXRob2QgPSB7Ijw9IjogImlzc3Vic2V0IiwKKyAgICAgICAgICAgICAgICAgICAiPj0iOiAiaXNzdXBlcnNldCIsCisgICAgICAgICAgICAgICAgICB9CisKKyAgICByZXZlcnNlID0geyI9PSI6ICI9PSIsCisgICAgICAgICAgICAgICAiIT0iOiAiIT0iLAorICAgICAgICAgICAgICAgIjwiOiAgIj4iLAorICAgICAgICAgICAgICAgIj4iOiAgIjwiLAorICAgICAgICAgICAgICAgIjw9IjogIj49IiwKKyAgICAgICAgICAgICAgICI+PSI6ICI8PSIsCisgICAgICAgICAgICAgIH0KKworICAgIGRlZiB0ZXN0X2lzc3Vic2V0KHNlbGYpOgorICAgICAgICB4ID0gc2VsZi5sZWZ0CisgICAgICAgIHkgPSBzZWxmLnJpZ2h0CisgICAgICAgIGZvciBjYXNlIGluICIhPSIsICI9PSIsICI8IiwgIjw9IiwgIj4iLCAiPj0iOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSBjYXNlIGluIHNlbGYuY2FzZXMKKyAgICAgICAgICAgICMgVGVzdCB0aGUgYmluYXJ5IGluZml4IHNwZWxsaW5nLgorICAgICAgICAgICAgcmVzdWx0ID0gZXZhbCgieCIgKyBjYXNlICsgInkiLCBsb2NhbHMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKyAgICAgICAgICAgICMgVGVzdCB0aGUgImZyaWVuZGx5IiBtZXRob2QtbmFtZSBzcGVsbGluZywgaWYgb25lIGV4aXN0cy4KKyAgICAgICAgICAgIGlmIGNhc2UgaW4gVGVzdFN1YnNldHMuY2FzZTJtZXRob2Q6CisgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cih4LCBUZXN0U3Vic2V0cy5jYXNlMm1ldGhvZFtjYXNlXSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtZXRob2QoeSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisKKyAgICAgICAgICAgICMgTm93IGRvIHRoZSBzYW1lIGZvciB0aGUgb3BlcmFuZHMgcmV2ZXJzZWQuCisgICAgICAgICAgICByY2FzZSA9IFRlc3RTdWJzZXRzLnJldmVyc2VbY2FzZV0KKyAgICAgICAgICAgIHJlc3VsdCA9IGV2YWwoInkiICsgcmNhc2UgKyAieCIsIGxvY2FscygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorICAgICAgICAgICAgaWYgcmNhc2UgaW4gVGVzdFN1YnNldHMuY2FzZTJtZXRob2Q6CisgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cih5LCBUZXN0U3Vic2V0cy5jYXNlMm1ldGhvZFtyY2FzZV0pCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWV0aG9kKHgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4cGVjdGVkKQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0U3Vic2V0RXF1YWxFbXB0eShUZXN0U3Vic2V0cyk6CisgICAgbGVmdCAgPSBTZXQoKQorICAgIHJpZ2h0ID0gU2V0KCkKKyAgICBuYW1lICA9ICJib3RoIGVtcHR5IgorICAgIGNhc2VzID0gIj09IiwgIjw9IiwgIj49IgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RTdWJzZXRFcXVhbE5vbkVtcHR5KFRlc3RTdWJzZXRzKToKKyAgICBsZWZ0ICA9IFNldChbMSwgMl0pCisgICAgcmlnaHQgPSBTZXQoWzEsIDJdKQorICAgIG5hbWUgID0gImVxdWFsIHBhaXIiCisgICAgY2FzZXMgPSAiPT0iLCAiPD0iLCAiPj0iCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdFN1YnNldEVtcHR5Tm9uRW1wdHkoVGVzdFN1YnNldHMpOgorICAgIGxlZnQgID0gU2V0KCkKKyAgICByaWdodCA9IFNldChbMSwgMl0pCisgICAgbmFtZSAgPSAib25lIGVtcHR5LCBvbmUgbm9uLWVtcHR5IgorICAgIGNhc2VzID0gIiE9IiwgIjwiLCAiPD0iCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdFN1YnNldFBhcnRpYWwoVGVzdFN1YnNldHMpOgorICAgIGxlZnQgID0gU2V0KFsxXSkKKyAgICByaWdodCA9IFNldChbMSwgMl0pCisgICAgbmFtZSAgPSAib25lIGEgbm9uLWVtcHR5IHByb3BlciBzdWJzZXQgb2Ygb3RoZXIiCisgICAgY2FzZXMgPSAiIT0iLCAiPCIsICI8PSIKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0U3Vic2V0Tm9uT3ZlcmxhcChUZXN0U3Vic2V0cyk6CisgICAgbGVmdCAgPSBTZXQoWzFdKQorICAgIHJpZ2h0ID0gU2V0KFsyXSkKKyAgICBuYW1lICA9ICJuZWl0aGVyIGVtcHR5LCBuZWl0aGVyIGNvbnRhaW5zIgorICAgIGNhc2VzID0gIiE9IgorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RPbmx5U2V0c0luQmluYXJ5T3BzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2VxX25lKHNlbGYpOgorICAgICAgICAjIFVubGlrZSB0aGUgb3RoZXJzLCB0aGlzIGlzIHRlc3RpbmcgdGhhdCA9PSBhbmQgIT0gKmFyZSogYWxsb3dlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm90aGVyID09IHNlbGYuc2V0LCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCA9PSBzZWxmLm90aGVyLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm90aGVyICE9IHNlbGYuc2V0LCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0ICE9IHNlbGYub3RoZXIsIFRydWUpCisKKyAgICBkZWYgdGVzdF9nZV9ndF9sZV9sdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYuc2V0IDwgc2VsZi5vdGhlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYuc2V0IDw9IHNlbGYub3RoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLnNldCA+IHNlbGYub3RoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLnNldCA+PSBzZWxmLm90aGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLm90aGVyIDwgc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLm90aGVyIDw9IHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5vdGhlciA+IHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5vdGhlciA+PSBzZWxmLnNldCkKKworICAgIGRlZiB0ZXN0X3VuaW9uX3VwZGF0ZV9vcGVyYXRvcihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXQgfD0gc2VsZi5vdGhlcgorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBUeXBlRXJyb3IiKQorCisgICAgZGVmIHRlc3RfdW5pb25fdXBkYXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm90aGVySXNJdGVyYWJsZToKKyAgICAgICAgICAgIHNlbGYuc2V0LnVuaW9uX3VwZGF0ZShzZWxmLm90aGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnNldC51bmlvbl91cGRhdGUsIHNlbGYub3RoZXIpCisKKyAgICBkZWYgdGVzdF91bmlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYuc2V0IHwgc2VsZi5vdGhlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHNlbGYub3RoZXIgfCBzZWxmLnNldCkKKyAgICAgICAgaWYgc2VsZi5vdGhlcklzSXRlcmFibGU6CisgICAgICAgICAgICBzZWxmLnNldC51bmlvbihzZWxmLm90aGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnNldC51bmlvbiwgc2VsZi5vdGhlcikKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl91cGRhdGVfb3BlcmF0b3Ioc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc2V0ICY9IHNlbGYub3RoZXIKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgVHlwZUVycm9yIikKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbl91cGRhdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYub3RoZXJJc0l0ZXJhYmxlOgorICAgICAgICAgICAgc2VsZi5zZXQuaW50ZXJzZWN0aW9uX3VwZGF0ZShzZWxmLm90aGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXQuaW50ZXJzZWN0aW9uX3VwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3RoZXIpCisKKyAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLnNldCAmIHNlbGYub3RoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBzZWxmLm90aGVyICYgc2VsZi5zZXQpCisgICAgICAgIGlmIHNlbGYub3RoZXJJc0l0ZXJhYmxlOgorICAgICAgICAgICAgc2VsZi5zZXQuaW50ZXJzZWN0aW9uKHNlbGYub3RoZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuc2V0LmludGVyc2VjdGlvbiwgc2VsZi5vdGhlcikKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlX3VwZGF0ZV9vcGVyYXRvcihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXQgXj0gc2VsZi5vdGhlcgorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBUeXBlRXJyb3IiKQorCisgICAgZGVmIHRlc3Rfc3ltX2RpZmZlcmVuY2VfdXBkYXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm90aGVySXNJdGVyYWJsZToKKyAgICAgICAgICAgIHNlbGYuc2V0LnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShzZWxmLm90aGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXQuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vdGhlcikKKworICAgIGRlZiB0ZXN0X3N5bV9kaWZmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5zZXQgXiBzZWxmLm90aGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5vdGhlciBeIHNlbGYuc2V0KQorICAgICAgICBpZiBzZWxmLm90aGVySXNJdGVyYWJsZToKKyAgICAgICAgICAgIHNlbGYuc2V0LnN5bW1ldHJpY19kaWZmZXJlbmNlKHNlbGYub3RoZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuc2V0LnN5bW1ldHJpY19kaWZmZXJlbmNlLCBzZWxmLm90aGVyKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW5jZV91cGRhdGVfb3BlcmF0b3Ioc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc2V0IC09IHNlbGYub3RoZXIKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgVHlwZUVycm9yIikKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2VfdXBkYXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm90aGVySXNJdGVyYWJsZToKKyAgICAgICAgICAgIHNlbGYuc2V0LmRpZmZlcmVuY2VfdXBkYXRlKHNlbGYub3RoZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldC5kaWZmZXJlbmNlX3VwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3RoZXIpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5zZXQgLSBzZWxmLm90aGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogc2VsZi5vdGhlciAtIHNlbGYuc2V0KQorICAgICAgICBpZiBzZWxmLm90aGVySXNJdGVyYWJsZToKKyAgICAgICAgICAgIHNlbGYuc2V0LmRpZmZlcmVuY2Uoc2VsZi5vdGhlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zZXQuZGlmZmVyZW5jZSwgc2VsZi5vdGhlcikKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0T25seVNldHNOdW1lcmljKFRlc3RPbmx5U2V0c0luQmluYXJ5T3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ICAgPSBTZXQoKDEsIDIsIDMpKQorICAgICAgICBzZWxmLm90aGVyID0gMTkKKyAgICAgICAgc2VsZi5vdGhlcklzSXRlcmFibGUgPSBGYWxzZQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RPbmx5U2V0c0RpY3QoVGVzdE9ubHlTZXRzSW5CaW5hcnlPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgICA9IFNldCgoMSwgMiwgMykpCisgICAgICAgIHNlbGYub3RoZXIgPSB7MToyLCAzOjR9CisgICAgICAgIHNlbGYub3RoZXJJc0l0ZXJhYmxlID0gVHJ1ZQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RPbmx5U2V0c09wZXJhdG9yKFRlc3RPbmx5U2V0c0luQmluYXJ5T3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ICAgPSBTZXQoKDEsIDIsIDMpKQorICAgICAgICBzZWxmLm90aGVyID0gb3BlcmF0b3IuYWRkCisgICAgICAgIHNlbGYub3RoZXJJc0l0ZXJhYmxlID0gRmFsc2UKKworICAgIGRlZiB0ZXN0X2dlX2d0X2xlX2x0KHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBzdXBlcihUZXN0T25seVNldHNPcGVyYXRvciwgc2VsZikudGVzdF9nZV9ndF9sZV9sdCgpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdE9ubHlTZXRzVHVwbGUoVGVzdE9ubHlTZXRzSW5CaW5hcnlPcHMpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgICA9IFNldCgoMSwgMiwgMykpCisgICAgICAgIHNlbGYub3RoZXIgPSAoMiwgNCwgNikKKyAgICAgICAgc2VsZi5vdGhlcklzSXRlcmFibGUgPSBUcnVlCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdE9ubHlTZXRzU3RyaW5nKFRlc3RPbmx5U2V0c0luQmluYXJ5T3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ICAgPSBTZXQoKDEsIDIsIDMpKQorICAgICAgICBzZWxmLm90aGVyID0gJ2FiYycKKyAgICAgICAgc2VsZi5vdGhlcklzSXRlcmFibGUgPSBUcnVlCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdE9ubHlTZXRzR2VuZXJhdG9yKFRlc3RPbmx5U2V0c0luQmluYXJ5T3BzKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgwLCAxMCwgMik6CisgICAgICAgICAgICAgICAgeWllbGQgaQorICAgICAgICBzZWxmLnNldCAgID0gU2V0KCgxLCAyLCAzKSkKKyAgICAgICAgc2VsZi5vdGhlciA9IGdlbigpCisgICAgICAgIHNlbGYub3RoZXJJc0l0ZXJhYmxlID0gVHJ1ZQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RPbmx5U2V0c29mU2V0cyhUZXN0T25seVNldHNJbkJpbmFyeU9wcyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCAgID0gU2V0KCgxLCAyLCAzKSkKKyAgICAgICAgc2VsZi5vdGhlciA9IFtTZXQoJ2FiJyksIEltbXV0YWJsZVNldCgnY2QnKV0KKyAgICAgICAgc2VsZi5vdGhlcklzSXRlcmFibGUgPSBUcnVlCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdENvcHlpbmcodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY29weShzZWxmKToKKyAgICAgICAgZHVwID0gc2VsZi5zZXQuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGR1cCksIGxlbihzZWxmLnNldCkpCisgICAgICAgIGR1cF9saXN0ID0gc29ydGVkKGR1cCkKKyAgICAgICAgc2V0X2xpc3QgPSBzb3J0ZWQoc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGR1cF9saXN0KSwgbGVuKHNldF9saXN0KSkKKyAgICAgICAgZm9yIGksIGVsIGluIGVudW1lcmF0ZShkdXBfbGlzdCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGVsLCBzZXRfbGlzdFtpXSkKKworICAgIGRlZiB0ZXN0X2RlZXBfY29weShzZWxmKToKKyAgICAgICAgZHVwID0gY29weS5kZWVwY29weShzZWxmLnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbChkdXAsIHNlbGYuc2V0KQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RDb3B5aW5nRW1wdHkoVGVzdENvcHlpbmcpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgPSBTZXQoKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RDb3B5aW5nU2luZ2xldG9uKFRlc3RDb3B5aW5nKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2V0ID0gU2V0KFsiaGVsbG8iXSkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBUZXN0Q29weWluZ1RyaXBsZShUZXN0Q29weWluZyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCA9IFNldChbInplcm8iLCAwLCBOb25lXSkKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHN1cGVyKFRlc3RDb3B5aW5nVHJpcGxlLCBzZWxmKS50ZXN0X2NvcHkoKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RDb3B5aW5nVHVwbGUoVGVzdENvcHlpbmcpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgPSBTZXQoWygxLCAyKV0pCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgVGVzdENvcHlpbmdOZXN0ZWQoVGVzdENvcHlpbmcpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXQgPSBTZXQoWygoMSwgMiksICgzLCA0KSldKQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RJZGVudGl0aWVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuYSA9IFNldChbcmFuZG9tLnJhbmRyYW5nZSgxMDApIGZvciBpIGluIHhyYW5nZSg1MCldKQorICAgICAgICBzZWxmLmIgPSBTZXQoW3JhbmRvbS5yYW5kcmFuZ2UoMTAwKSBmb3IgaSBpbiB4cmFuZ2UoNTApXSkKKworICAgIGRlZiB0ZXN0X2Jpbm9wc1ZzU3Vic2V0cyhzZWxmKToKKyAgICAgICAgYSwgYiA9IHNlbGYuYSwgc2VsZi5iCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIC0gYiA8PSBhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiAtIGEgPD0gYikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgJiBiIDw9IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhICYgYiA8PSBiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSB8IGIgPj0gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgfCBiID49IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIF4gYiA8PSBhIHwgYikKKworICAgIGRlZiB0ZXN0X2NvbW11dGF0aXZpdHkoc2VsZik6CisgICAgICAgIGEsIGIgPSBzZWxmLmEsIHNlbGYuYgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEmYiwgYiZhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF8YiwgYnxhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFeYiwgYl5hKQorICAgICAgICBpZiBhICE9IGI6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGEtYiwgYi1hKQorCisgICAgZGVmIHRlc3RfcmVmbGV4c2l2ZV9yZWxhdGlvbnMoc2VsZik6CisgICAgICAgIGEsIHplcm8gPSBzZWxmLmEsIFNldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSBeIGEsIHplcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIGEsIHplcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSB8IGEsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAmIGEsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIDw9IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhID49IGEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhID09IGEpCisKKyAgICBkZWYgdGVzdF9zdW1tYXRpb25zKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgc3VtcyBvZiBwYXJ0cyBlcXVhbCB0aGUgd2hvbGUKKyAgICAgICAgYSwgYiA9IHNlbGYuYSwgc2VsZi5iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEtYil8KGEmYil8KGItYSksIGF8YikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSZiKXwoYV5iKSwgYXxiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF8KGItYSksIGF8YikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYS1iKXxiLCBhfGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEtYil8KGEmYiksIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGItYSl8KGEmYiksIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEtYil8KGItYSksIGFeYikKKworICAgIGRlZiB0ZXN0X2V4Y2x1c2lvbihzZWxmKToKKyAgICAgICAgIyBjaGVjayB0aGF0IGludmVyc2Ugb3BlcmF0aW9ucyBkbyBub3Qgb3ZlcmxhcAorICAgICAgICBhLCBiLCB6ZXJvID0gc2VsZi5hLCBzZWxmLmIsIFNldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEtYikmYiwgemVybykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYi1hKSZhLCB6ZXJvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhJmIpJihhXmIpLCB6ZXJvKQorCisgICAgZGVmIHRlc3RfY2FyZGluYWxpdHlfcmVsYXRpb25zKHNlbGYpOgorICAgICAgICBhLCBiID0gc2VsZi5hLCBzZWxmLmIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYSksIGxlbihhLWIpICsgbGVuKGEmYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGIpLCBsZW4oYi1hKSArIGxlbihhJmIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhXmIpLCBsZW4oYS1iKSArIGxlbihiLWEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhfGIpLCBsZW4oYS1iKSArIGxlbihhJmIpICsgbGVuKGItYSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFeYikgKyBsZW4oYSZiKSwgbGVuKGF8YikpCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworbGlicmVmdGVzdCA9ICIiIgorRXhhbXBsZSBmcm9tIHRoZSBMaWJyYXJ5IFJlZmVyZW5jZTogIERvYy9saWIvbGlic2V0cy50ZXgKKworPj4+IGZyb20gc2V0cyBpbXBvcnQgU2V0IGFzIEJhc2UgICMgb3ZlcnJpZGUgX3JlcHIgdG8gZ2V0IHNvcnRlZCBvdXRwdXQKKz4+PiBjbGFzcyBTZXQoQmFzZSk6CisuLi4gICAgIGRlZiBfcmVwcihzZWxmKToKKy4uLiAgICAgICAgIHJldHVybiBCYXNlLl9yZXByKHNlbGYsIHNvcnRlZD1UcnVlKQorPj4+IGVuZ2luZWVycyA9IFNldChbJ0pvaG4nLCAnSmFuZScsICdKYWNrJywgJ0phbmljZSddKQorPj4+IHByb2dyYW1tZXJzID0gU2V0KFsnSmFjaycsICdTYW0nLCAnU3VzYW4nLCAnSmFuaWNlJ10pCis+Pj4gbWFuYWdlcnMgPSBTZXQoWydKYW5lJywgJ0phY2snLCAnU3VzYW4nLCAnWmFjayddKQorPj4+IGVtcGxveWVlcyA9IGVuZ2luZWVycyB8IHByb2dyYW1tZXJzIHwgbWFuYWdlcnMgICAgICAgICAgICMgdW5pb24KKz4+PiBlbmdpbmVlcmluZ19tYW5hZ2VtZW50ID0gZW5naW5lZXJzICYgbWFuYWdlcnMgICAgICAgICAgICAjIGludGVyc2VjdGlvbgorPj4+IGZ1bGx0aW1lX21hbmFnZW1lbnQgPSBtYW5hZ2VycyAtIGVuZ2luZWVycyAtIHByb2dyYW1tZXJzICMgZGlmZmVyZW5jZQorPj4+IGVuZ2luZWVycy5hZGQoJ01hcnZpbicpCis+Pj4gcHJpbnQgZW5naW5lZXJzCitTZXQoWydKYWNrJywgJ0phbmUnLCAnSmFuaWNlJywgJ0pvaG4nLCAnTWFydmluJ10pCis+Pj4gZW1wbG95ZWVzLmlzc3VwZXJzZXQoZW5naW5lZXJzKSAgICAgICAgICAgIyBzdXBlcnNldCB0ZXN0CitGYWxzZQorPj4+IGVtcGxveWVlcy51bmlvbl91cGRhdGUoZW5naW5lZXJzKSAgICAgICAgICMgdXBkYXRlIGZyb20gYW5vdGhlciBzZXQKKz4+PiBlbXBsb3llZXMuaXNzdXBlcnNldChlbmdpbmVlcnMpCitUcnVlCis+Pj4gZm9yIGdyb3VwIGluIFtlbmdpbmVlcnMsIHByb2dyYW1tZXJzLCBtYW5hZ2VycywgZW1wbG95ZWVzXToKKy4uLiAgICAgZ3JvdXAuZGlzY2FyZCgnU3VzYW4nKSAgICAgICAgICAgICAgICAjIHVuY29uZGl0aW9uYWxseSByZW1vdmUgZWxlbWVudAorLi4uICAgICBwcmludCBncm91cAorLi4uCitTZXQoWydKYWNrJywgJ0phbmUnLCAnSmFuaWNlJywgJ0pvaG4nLCAnTWFydmluJ10pCitTZXQoWydKYWNrJywgJ0phbmljZScsICdTYW0nXSkKK1NldChbJ0phY2snLCAnSmFuZScsICdaYWNrJ10pCitTZXQoWydKYWNrJywgJ0phbmUnLCAnSmFuaWNlJywgJ0pvaG4nLCAnTWFydmluJywgJ1NhbScsICdaYWNrJ10pCisiIiIKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitfX3Rlc3RfXyA9IHsnbGlicmVmdGVzdCcgOiBsaWJyZWZ0ZXN0fQorCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgaW1wb3J0IGRvY3Rlc3QKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc2V0cworICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIFRlc3RTZXRPZlNldHMsCisgICAgICAgIFRlc3RFeGNlcHRpb25Qcm9wYWdhdGlvbiwKKyAgICAgICAgVGVzdEJhc2ljT3BzRW1wdHksCisgICAgICAgIFRlc3RCYXNpY09wc1NpbmdsZXRvbiwKKyAgICAgICAgVGVzdEJhc2ljT3BzVHVwbGUsCisgICAgICAgIFRlc3RCYXNpY09wc1RyaXBsZSwKKyAgICAgICAgVGVzdEJpbmFyeU9wcywKKyAgICAgICAgVGVzdFVwZGF0ZU9wcywKKyAgICAgICAgVGVzdE11dGF0ZSwKKyAgICAgICAgVGVzdFN1YnNldEVxdWFsRW1wdHksCisgICAgICAgIFRlc3RTdWJzZXRFcXVhbE5vbkVtcHR5LAorICAgICAgICBUZXN0U3Vic2V0RW1wdHlOb25FbXB0eSwKKyAgICAgICAgVGVzdFN1YnNldFBhcnRpYWwsCisgICAgICAgIFRlc3RTdWJzZXROb25PdmVybGFwLAorICAgICAgICBUZXN0T25seVNldHNOdW1lcmljLAorICAgICAgICBUZXN0T25seVNldHNEaWN0LAorICAgICAgICBUZXN0T25seVNldHNPcGVyYXRvciwKKyAgICAgICAgVGVzdE9ubHlTZXRzVHVwbGUsCisgICAgICAgIFRlc3RPbmx5U2V0c1N0cmluZywKKyAgICAgICAgVGVzdE9ubHlTZXRzR2VuZXJhdG9yLAorICAgICAgICBUZXN0T25seVNldHNvZlNldHMsCisgICAgICAgIFRlc3RDb3B5aW5nRW1wdHksCisgICAgICAgIFRlc3RDb3B5aW5nU2luZ2xldG9uLAorICAgICAgICBUZXN0Q29weWluZ1RyaXBsZSwKKyAgICAgICAgVGVzdENvcHlpbmdUdXBsZSwKKyAgICAgICAgVGVzdENvcHlpbmdOZXN0ZWQsCisgICAgICAgIFRlc3RJZGVudGl0aWVzLAorICAgICAgICBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSh0ZXN0X3NldHMpLAorICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc2dtbGxpYi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NnbWxsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4YmNjMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NnbWxsaWIucHkKQEAgLTAsMCArMSw0MzkgQEAKK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCByZQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorc2dtbGxpYiA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdzZ21sbGliJywgZGVwcmVjYXRlZD1UcnVlKQorCisKK2NsYXNzIEV2ZW50Q29sbGVjdG9yKHNnbWxsaWIuU0dNTFBhcnNlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZXZlbnRzID0gW10KKyAgICAgICAgc2VsZi5hcHBlbmQgPSBzZWxmLmV2ZW50cy5hcHBlbmQKKyAgICAgICAgc2dtbGxpYi5TR01MUGFyc2VyLl9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgZ2V0X2V2ZW50cyhzZWxmKToKKyAgICAgICAgIyBOb3JtYWxpemUgdGhlIGxpc3Qgb2YgZXZlbnRzIHNvIHRoYXQgYnVmZmVyIGFydGVmYWN0cyBkb24ndAorICAgICAgICAjIHNlcGFyYXRlIHJ1bnMgb2YgY29udGlndW91cyBjaGFyYWN0ZXJzLgorICAgICAgICBMID0gW10KKyAgICAgICAgcHJldnR5cGUgPSBOb25lCisgICAgICAgIGZvciBldmVudCBpbiBzZWxmLmV2ZW50czoKKyAgICAgICAgICAgIHR5cGUgPSBldmVudFswXQorICAgICAgICAgICAgaWYgdHlwZSA9PSBwcmV2dHlwZSA9PSAiZGF0YSI6CisgICAgICAgICAgICAgICAgTFstMV0gPSAoImRhdGEiLCBMWy0xXVsxXSArIGV2ZW50WzFdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBMLmFwcGVuZChldmVudCkKKyAgICAgICAgICAgIHByZXZ0eXBlID0gdHlwZQorICAgICAgICBzZWxmLmV2ZW50cyA9IEwKKyAgICAgICAgcmV0dXJuIEwKKworICAgICMgc3RydWN0dXJlIG1hcmt1cAorCisgICAgZGVmIHVua25vd25fc3RhcnR0YWcoc2VsZiwgdGFnLCBhdHRycyk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgic3RhcnR0YWciLCB0YWcsIGF0dHJzKSkKKworICAgIGRlZiB1bmtub3duX2VuZHRhZyhzZWxmLCB0YWcpOgorICAgICAgICBzZWxmLmFwcGVuZCgoImVuZHRhZyIsIHRhZykpCisKKyAgICAjIGFsbCBvdGhlciBtYXJrdXAKKworICAgIGRlZiBoYW5kbGVfY29tbWVudChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJjb21tZW50IiwgZGF0YSkpCisKKyAgICBkZWYgaGFuZGxlX2NoYXJyZWYoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgiY2hhcnJlZiIsIGRhdGEpKQorCisgICAgZGVmIGhhbmRsZV9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFwcGVuZCgoImRhdGEiLCBkYXRhKSkKKworICAgIGRlZiBoYW5kbGVfZGVjbChzZWxmLCBkZWNsKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJkZWNsIiwgZGVjbCkpCisKKyAgICBkZWYgaGFuZGxlX2VudGl0eXJlZihzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJlbnRpdHlyZWYiLCBkYXRhKSkKKworICAgIGRlZiBoYW5kbGVfcGkoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgicGkiLCBkYXRhKSkKKworICAgIGRlZiB1bmtub3duX2RlY2woc2VsZiwgZGVjbCk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgidW5rbm93biBkZWNsIiwgZGVjbCkpCisKKworY2xhc3MgQ0RBVEFFdmVudENvbGxlY3RvcihFdmVudENvbGxlY3Rvcik6CisgICAgZGVmIHN0YXJ0X2NkYXRhKHNlbGYsIGF0dHJzKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKCJzdGFydHRhZyIsICJjZGF0YSIsIGF0dHJzKSkKKyAgICAgICAgc2VsZi5zZXRsaXRlcmFsKCkKKworCitjbGFzcyBIVE1MRW50aXR5Q29sbGVjdG9yKEV2ZW50Q29sbGVjdG9yKToKKworICAgIGVudGl0eV9vcl9jaGFycmVmID0gcmUuY29tcGlsZSgnKD86JihbYS16QS1aXVstLmEtekEtWjAtOV0qKScKKyAgICAgICAgJ3wmIyh4WzAtOWEtekEtWl0rfFswLTldKykpKDs/KScpCisKKyAgICBkZWYgY29udmVydF9jaGFycmVmKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLmFwcGVuZCgoImNoYXJyZWYiLCAiY29udmVydCIsIG5hbWUpKQorICAgICAgICBpZiBuYW1lWzBdICE9ICJ4IjoKKyAgICAgICAgICAgIHJldHVybiBFdmVudENvbGxlY3Rvci5jb252ZXJ0X2NoYXJyZWYoc2VsZiwgbmFtZSkKKworICAgIGRlZiBjb252ZXJ0X2NvZGVwb2ludChzZWxmLCBjb2RlcG9pbnQpOgorICAgICAgICBzZWxmLmFwcGVuZCgoImNvZGVwb2ludCIsICJjb252ZXJ0IiwgY29kZXBvaW50KSkKKyAgICAgICAgRXZlbnRDb2xsZWN0b3IuY29udmVydF9jb2RlcG9pbnQoc2VsZiwgY29kZXBvaW50KQorCisgICAgZGVmIGNvbnZlcnRfZW50aXR5cmVmKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLmFwcGVuZCgoImVudGl0eXJlZiIsICJjb252ZXJ0IiwgbmFtZSkpCisgICAgICAgIHJldHVybiBFdmVudENvbGxlY3Rvci5jb252ZXJ0X2VudGl0eXJlZihzZWxmLCBuYW1lKQorCisgICAgIyBUaGVzZSB0byByZWNvcmQgdGhhdCB0aGV5IHdlcmUgY2FsbGVkLCB0aGVuIHBhc3MgdGhlIGNhbGwgYWxvbmcKKyAgICAjIHRvIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNvIHRoYXQgaXQncyBhY3Rpb25zIGNhbiBiZQorICAgICMgcmVjb3JkZWQuCisKKyAgICBkZWYgaGFuZGxlX2NoYXJyZWYoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuYXBwZW5kKCgiY2hhcnJlZiIsIGRhdGEpKQorICAgICAgICBzZ21sbGliLlNHTUxQYXJzZXIuaGFuZGxlX2NoYXJyZWYoc2VsZiwgZGF0YSkKKworICAgIGRlZiBoYW5kbGVfZW50aXR5cmVmKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFwcGVuZCgoImVudGl0eXJlZiIsIGRhdGEpKQorICAgICAgICBzZ21sbGliLlNHTUxQYXJzZXIuaGFuZGxlX2VudGl0eXJlZihzZWxmLCBkYXRhKQorCisKK2NsYXNzIFNHTUxQYXJzZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjb2xsZWN0b3IgPSBFdmVudENvbGxlY3RvcgorCisgICAgZGVmIGdldF9ldmVudHMoc2VsZiwgc291cmNlKToKKyAgICAgICAgcGFyc2VyID0gc2VsZi5jb2xsZWN0b3IoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgcyBpbiBzb3VyY2U6CisgICAgICAgICAgICAgICAgcGFyc2VyLmZlZWQocykKKyAgICAgICAgICAgIHBhcnNlci5jbG9zZSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICNzZWxmLmV2ZW50cyA9IHBhcnNlci5ldmVudHMKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBwYXJzZXIuZ2V0X2V2ZW50cygpCisKKyAgICBkZWYgY2hlY2tfZXZlbnRzKHNlbGYsIHNvdXJjZSwgZXhwZWN0ZWRfZXZlbnRzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXZlbnRzID0gc2VsZi5nZXRfZXZlbnRzKHNvdXJjZSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgI2ltcG9ydCBzeXMKKyAgICAgICAgICAgICNwcmludCA+PnN5cy5zdGRlcnIsIHBwcmludC5wZm9ybWF0KHNlbGYuZXZlbnRzKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgaWYgZXZlbnRzICE9IGV4cGVjdGVkX2V2ZW50czoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVjZWl2ZWQgZXZlbnRzIGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgZXZlbnRzXG4iCisgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkOlxuIiArIHBwcmludC5wZm9ybWF0KGV4cGVjdGVkX2V2ZW50cykgKworICAgICAgICAgICAgICAgICAgICAgICJcblJlY2VpdmVkOlxuIiArIHBwcmludC5wZm9ybWF0KGV2ZW50cykpCisKKyAgICBkZWYgY2hlY2tfcGFyc2VfZXJyb3Ioc2VsZiwgc291cmNlKToKKyAgICAgICAgcGFyc2VyID0gRXZlbnRDb2xsZWN0b3IoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZXIuZmVlZChzb3VyY2UpCisgICAgICAgICAgICBwYXJzZXIuY2xvc2UoKQorICAgICAgICBleGNlcHQgc2dtbGxpYi5TR01MUGFyc2VFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgU0dNTFBhcnNlRXJyb3IgZm9yICVyXG5SZWNlaXZlZDpcbiVzIgorICAgICAgICAgICAgICAgICAgICAgICUgKHNvdXJjZSwgcHByaW50LnBmb3JtYXQocGFyc2VyLmdldF9ldmVudHMoKSkpKQorCisgICAgZGVmIHRlc3RfZG9jdHlwZV9kZWNsX2ludGVybmFsKHNlbGYpOgorICAgICAgICBpbnNpZGUgPSAiIiJcCitET0NUWVBFIGh0bWwgUFVCTElDICctLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOJworICAgICAgICAgICAgIFNZU1RFTSAnaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9zdHJpY3QuZHRkJyBbCisgIDwhRUxFTUVOVCBodG1sIC0gTyBFTVBUWT4KKyAgPCFBVFRMSVNUIGh0bWwKKyAgICAgIHZlcnNpb24gQ0RBVEEgI0lNUExJRUQKKyAgICAgIHByb2ZpbGUgQ0RBVEEgJ0R1YmxpbkNvcmUnPgorICA8IU5PVEFUSU9OIGRhdGF0eXBlIFNZU1RFTSAnaHR0cDovL3htbC5weXRob24ub3JnL25vdGF0aW9ucy9weXRob24tbW9kdWxlJz4KKyAgPCFFTlRJVFkgbXlFbnRpdHkgJ2ludGVybmFsIHBhcnNlZCBlbnRpdHknPgorICA8IUVOVElUWSBhbkVudGl0eSBTWVNURU0gJ2h0dHA6Ly94bWwucHl0aG9uLm9yZy9lbnRpdGllcy9zb21ldGhpbmcueG1sJz4KKyAgPCFFTlRJVFkgJSBwYXJhbUVudGl0eSAnbmFtZXxuYW1lfG5hbWUnPgorICAlcGFyYW1FbnRpdHk7CisgIDwhLS0gY29tbWVudCAtLT4KK10iIiIKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoWyI8ISVzPiIgJSBpbnNpZGVdLCBbCisgICAgICAgICAgICAoImRlY2wiLCBpbnNpZGUpLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2RvY3R5cGVfZGVjbF9leHRlcm5hbChzZWxmKToKKyAgICAgICAgaW5zaWRlID0gIkRPQ1RZUEUgaHRtbCBQVUJMSUMgJy0vL1czQy8vRFREIEhUTUwgNC4wMS8vRU4nIgorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiPCElcz4iICUgaW5zaWRlLCBbCisgICAgICAgICAgICAoImRlY2wiLCBpbnNpZGUpLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X3VuZGVyc2NvcmVfaW5fYXR0cm5hbWUoc2VsZik6CisgICAgICAgICMgU0YgYnVnICM0MzY2MjEKKyAgICAgICAgIiIiTWFrZSBzdXJlIGF0dHJpYnV0ZSBuYW1lcyB3aXRoIHVuZGVyc2NvcmVzIGFyZSBhY2NlcHRlZCIiIgorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiPGEgaGFzX3VuZGVyIF91bmRlcj4iLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImEiLCBbKCJoYXNfdW5kZXIiLCAiaGFzX3VuZGVyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJfdW5kZXIiLCAiX3VuZGVyIildKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF91bmRlcnNjb3JlX2luX3RhZ25hbWUoc2VsZik6CisgICAgICAgICMgU0YgYnVnICM0MzY2MjEKKyAgICAgICAgIiIiTWFrZSBzdXJlIHRhZyBuYW1lcyB3aXRoIHVuZGVyc2NvcmVzIGFyZSBhY2NlcHRlZCIiIgorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiPGhhc191bmRlcj48L2hhc191bmRlcj4iLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImhhc191bmRlciIsIFtdKSwKKyAgICAgICAgICAgICgiZW5kdGFnIiwgImhhc191bmRlciIpLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X3F1b3Rlc19pbl91bnF1b3RlZF9hdHRycyhzZWxmKToKKyAgICAgICAgIyBTRiBidWcgIzQzNjYyMQorICAgICAgICAiIiJCZSBzdXJlIHF1b3RlcyBpbiB1bnF1b3RlZCBhdHRyaWJ1dGVzIGFyZSBtYWRlIHBhcnQgb2YgdGhlIHZhbHVlIiIiCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCI8YSBocmVmPWZvbydiYXJcImJhej4iLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImEiLCBbKCJocmVmIiwgImZvbydiYXJcImJheiIpXSksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfeGh0bWxfZW1wdHlfdGFnKHNlbGYpOgorICAgICAgICAiIiJIYW5kbGluZyBvZiBYSFRNTC1zdHlsZSBlbXB0eSBzdGFydCB0YWdzIiIiCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCI8YnIgLz50ZXh0PGk+PC9pPiIsIFsKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiYnIiLCBbXSksCisgICAgICAgICAgICAoImRhdGEiLCAidGV4dCIpLAorICAgICAgICAgICAgKCJzdGFydHRhZyIsICJpIiwgW10pLAorICAgICAgICAgICAgKCJlbmR0YWciLCAiaSIpLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fb25seShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoIjw/cHJvY2Vzc2luZyBpbnN0cnVjdGlvbj4iLCBbCisgICAgICAgICAgICAoInBpIiwgInByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24iKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9iYWRfbmVzdGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoIjxhPjxiPjwvYT48L2I+IiwgWworICAgICAgICAgICAgKCJzdGFydHRhZyIsICJhIiwgW10pLAorICAgICAgICAgICAgKCJzdGFydHRhZyIsICJiIiwgW10pLAorICAgICAgICAgICAgKCJlbmR0YWciLCAiYSIpLAorICAgICAgICAgICAgKCJlbmR0YWciLCAiYiIpLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2JhcmVfYW1wZXJzYW5kcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoInRoaXMgdGV4dCAmIGNvbnRhaW5zICYgYW1wZXJzYW5kcyAmIiwgWworICAgICAgICAgICAgKCJkYXRhIiwgInRoaXMgdGV4dCAmIGNvbnRhaW5zICYgYW1wZXJzYW5kcyAmIiksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfYmFyZV9wb2ludHlfYnJhY2tldHMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCJ0aGlzIDwgdGV4dCA+IGNvbnRhaW5zIDwgYmFyZT5wb2ludHk8IGJyYWNrZXRzIiwgWworICAgICAgICAgICAgKCJkYXRhIiwgInRoaXMgPCB0ZXh0ID4gY29udGFpbnMgPCBiYXJlPnBvaW50eTwgYnJhY2tldHMiKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9hdHRyX3N5bnRheChzZWxmKToKKyAgICAgICAgb3V0cHV0ID0gWworICAgICAgICAgICgic3RhcnR0YWciLCAiYSIsIFsoImIiLCAidiIpLCAoImMiLCAidiIpLCAoImQiLCAidiIpLCAoImUiLCAiZSIpXSkKKyAgICAgICAgICBdCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCIiIjxhIGI9J3YnIGM9InYiIGQ9diBlPiIiIiwgb3V0cHV0KQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiIiI8YSAgYiA9ICd2JyBjID0gInYiIGQgPSB2IGU+IiIiLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCIiIjxhXG5iXG49XG4ndidcbmNcbj1cbiJ2IlxuZFxuPVxudlxuZT4iIiIsIG91dHB1dCkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoIiIiPGFcdGJcdD1cdCd2J1x0Y1x0PVx0InYiXHRkXHQ9XHR2XHRlPiIiIiwgb3V0cHV0KQorCisgICAgZGVmIHRlc3RfYXR0cl92YWx1ZXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCIiIjxhIGI9J3h4eFxuXHR4eHgnIGM9Inl5eVx0XG55eXkiIGQ9J1x0eHl6XG4nPiIiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJiIiwgInh4eFxuXHR4eHgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgInl5eVx0XG55eXkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJkIiwgIlx0eHl6XG4iKV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoIiIiPGEgYj0nJyBjPSIiPiIiIiwgWworICAgICAgICAgICAgKCJzdGFydHRhZyIsICJhIiwgWygiYiIsICIiKSwgKCJjIiwgIiIpXSksCisgICAgICAgICAgICBdKQorICAgICAgICAjIFVSTCBjb25zdHJ1Y3Rpb24gc3R1ZmYgZnJvbSBSRkMgMTgwODoKKyAgICAgICAgc2FmZSA9ICIkLV8uKyIKKyAgICAgICAgZXh0cmEgPSAiISonKCksIgorICAgICAgICByZXNlcnZlZCA9ICI7Lz86QCY9IgorICAgICAgICB1cmwgPSAiaHR0cDovL2V4YW1wbGUuY29tOjgwODAvcGF0aC90by9maWxlPyVzJXMlcyIgJSAoCisgICAgICAgICAgICBzYWZlLCBleHRyYSwgcmVzZXJ2ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCIiIjxlIGE9JXM+IiIiICUgdXJsLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImUiLCBbKCJhIiwgdXJsKV0pLAorICAgICAgICAgICAgXSkKKyAgICAgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIFNGIHBhdGNoICM2Njk2ODMuCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCI8ZSBhPXJnYigxLDIsMyk+IiwgWworICAgICAgICAgICAgKCJzdGFydHRhZyIsICJlIiwgWygiYSIsICJyZ2IoMSwyLDMpIildKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9hdHRyX3ZhbHVlc19lbnRpdGllcyhzZWxmKToKKyAgICAgICAgIiIiU3Vic3RpdHV0aW9uIG9mIGVudGl0aWVzIGFuZCBjaGFycmVmcyBpbiBhdHRyaWJ1dGUgdmFsdWVzIiIiCisgICAgICAgICMgU0YgYnVnICMxNDUyMjQ2CisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCIiIjxhIGI9Jmx0OyBjPSZsdDsmZ3Q7IGQ9Jmx0LSZndDsgZT0nJmx0OyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY9IiZ4eHg7IiBnPScmIzMyOyYjMzM7JyBoPScmIzUwMDsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk9J3g/YT1iJmM9ZDsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo9JyZhbXA7IzQyOycgaz0nJiMzODsjNDI7Jz4iIiIsCisgICAgICAgICAgICBbKCJzdGFydHRhZyIsICJhIiwgWygiYiIsICI8IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiYyIsICI8PiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImQiLCAiJmx0LT4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJlIiwgIjwgIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZiIsICImeHh4OyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImciLCAiICEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJoIiwgIiYjNTAwOyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImkiLCAieD9hPWImYz1kOyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImoiLCAiJiM0MjsiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJrIiwgIiYjNDI7IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXSkKKworICAgIGRlZiB0ZXN0X2NvbnZlcnRfb3ZlcnJpZGVzKHNlbGYpOgorICAgICAgICAjIFRoaXMgY2hlY2tzIHRoYXQgdGhlIGNoYXJhY3RlciBhbmQgZW50aXR5IHJlZmVyZW5jZQorICAgICAgICAjIGNvbnZlcnNpb24gaGVscGVycyBhcmUgY2FsbGVkIGF0IHRoZSBkb2N1bWVudGVkIHRpbWVzLiAgTm8KKyAgICAgICAgIyBhdHRlbXB0IGlzIG1hZGUgdG8gcmVhbGx5IGNoYW5nZSB3aGF0IHRoZSBwYXJzZXIgYWNjZXB0cy4KKyAgICAgICAgIworICAgICAgICBzZWxmLmNvbGxlY3RvciA9IEhUTUxFbnRpdHlDb2xsZWN0b3IKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoKCc8YSB0aXRsZT0iJmxkcXVvO3Rlc3QmI3gyMDFkOyI+Zm9vPC9hPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcmZm9vYmFyOyYjNDI7JyksIFsKKyAgICAgICAgICAgICgnZW50aXR5cmVmJywgJ2NvbnZlcnQnLCAnbGRxdW8nKSwKKyAgICAgICAgICAgICgnY2hhcnJlZicsICdjb252ZXJ0JywgJ3gyMDFkJyksCisgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ2EnLCBbKCd0aXRsZScsICcmbGRxdW87dGVzdCYjeDIwMWQ7JyldKSwKKyAgICAgICAgICAgICgnZGF0YScsICdmb28nKSwKKyAgICAgICAgICAgICgnZW5kdGFnJywgJ2EnKSwKKyAgICAgICAgICAgICgnZW50aXR5cmVmJywgJ2Zvb2JhcicpLAorICAgICAgICAgICAgKCdlbnRpdHlyZWYnLCAnY29udmVydCcsICdmb29iYXInKSwKKyAgICAgICAgICAgICgnY2hhcnJlZicsICc0MicpLAorICAgICAgICAgICAgKCdjaGFycmVmJywgJ2NvbnZlcnQnLCAnNDInKSwKKyAgICAgICAgICAgICgnY29kZXBvaW50JywgJ2NvbnZlcnQnLCA0MiksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfYXR0cl9mdW5reV9uYW1lcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoIiIiPGEgYS5iPSd2JyBjOmQ9diBlLWY9dj4iIiIsIFsKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiYSIsIFsoImEuYiIsICJ2IiksICgiYzpkIiwgInYiKSwgKCJlLWYiLCAidiIpXSksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfYXR0cl92YWx1ZV9pcDZfdXJsKHNlbGYpOgorICAgICAgICAjIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zZi84NTM1MDYKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoKCI8YSBocmVmPSdodHRwOi8vWzEwODA6Ojg6ODAwOjIwMEM6NDE3QV0vJz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGEgaHJlZj1odHRwOi8vWzEwODA6Ojg6ODAwOjIwMEM6NDE3QV0vPiIpLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImEiLCBbKCJocmVmIiwgImh0dHA6Ly9bMTA4MDo6ODo4MDA6MjAwQzo0MTdBXS8iKV0pLAorICAgICAgICAgICAgKCJzdGFydHRhZyIsICJhIiwgWygiaHJlZiIsICJodHRwOi8vWzEwODA6Ojg6ODAwOjIwMEM6NDE3QV0vIildKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF93ZWlyZF9zdGFydHRhZ3Moc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCI8YTxhPiIsIFsKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiYSIsIFtdKSwKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiYSIsIFtdKSwKKyAgICAgICAgICAgIF0pCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKCI8L2E8YT4iLCBbCisgICAgICAgICAgICAoImVuZHRhZyIsICJhIiksCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImEiLCBbXSksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfZGVjbGFyYXRpb25fanVua19jaGFycyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZV9lcnJvcigiPCFET0NUWVBFIGZvbyAkID4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3N0YXJ0dGFnX3RleHQoc2VsZik6CisgICAgICAgIHMgPSAiIiI8Zm9vYmFyICAgXG4gICBvbmU9IjEiXHR0d289MiAgID4iIiIKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMocywgWworICAgICAgICAgICAgKCJzdGFydHRhZyIsICJmb29iYXIiLCBbKCJvbmUiLCAiMSIpLCAoInR3byIsICIyIildKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9jZGF0YV9jb250ZW50KHNlbGYpOgorICAgICAgICBzID0gKCI8Y2RhdGE+IDwhLS0gbm90IGEgY29tbWVudCAtLT4gJm5vdC1hbi1lbnRpdHktcmVmOyA8L2NkYXRhPiIKKyAgICAgICAgICAgICAiPG5vdGNkYXRhPiA8IS0tIGNvbW1lbnQgLS0+IDwvbm90Y2RhdGE+IikKKyAgICAgICAgc2VsZi5jb2xsZWN0b3IgPSBDREFUQUV2ZW50Q29sbGVjdG9yCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKHMsIFsKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiY2RhdGEiLCBbXSksCisgICAgICAgICAgICAoImRhdGEiLCAiIDwhLS0gbm90IGEgY29tbWVudCAtLT4gJm5vdC1hbi1lbnRpdHktcmVmOyAiKSwKKyAgICAgICAgICAgICgiZW5kdGFnIiwgImNkYXRhIiksCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgIm5vdGNkYXRhIiwgW10pLAorICAgICAgICAgICAgKCJkYXRhIiwgIiAiKSwKKyAgICAgICAgICAgICgiY29tbWVudCIsICIgY29tbWVudCAiKSwKKyAgICAgICAgICAgICgiZGF0YSIsICIgIiksCisgICAgICAgICAgICAoImVuZHRhZyIsICJub3RjZGF0YSIpLAorICAgICAgICAgICAgXSkKKyAgICAgICAgcyA9ICIiIjxjZGF0YT4gPG5vdCBhPSdzdGFydCB0YWcnPiA8L2NkYXRhPiIiIgorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhzLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImNkYXRhIiwgW10pLAorICAgICAgICAgICAgKCJkYXRhIiwgIiA8bm90IGE9J3N0YXJ0IHRhZyc+ICIpLAorICAgICAgICAgICAgKCJlbmR0YWciLCAiY2RhdGEiKSwKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9pbGxlZ2FsX2RlY2xhcmF0aW9ucyhzZWxmKToKKyAgICAgICAgcyA9ICdhYmM8IXNwYWNlciB0eXBlPSJibG9jayIgaGVpZ2h0PSIyNSI+ZGVmJworICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhzLCBbCisgICAgICAgICAgICAoImRhdGEiLCAiYWJjIiksCisgICAgICAgICAgICAoInVua25vd24gZGVjbCIsICdzcGFjZXIgdHlwZT0iYmxvY2siIGhlaWdodD0iMjUiJyksCisgICAgICAgICAgICAoImRhdGEiLCAiZGVmIiksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfZW51bWVyYXRlZF9hdHRyX3R5cGUoc2VsZik6CisgICAgICAgIHMgPSAiPCFET0NUWVBFIGRvYyBbPCFBVFRMSVNUIGRvYyBhdHRyIChhIHwgYikgPl0+IgorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhzLCBbCisgICAgICAgICAgICAoJ2RlY2wnLCAnRE9DVFlQRSBkb2MgWzwhQVRUTElTVCBkb2MgYXR0ciAoYSB8IGIpID5dJyksCisgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfcmVhZF9jaHVua3Moc2VsZik6CisgICAgICAgICMgU0YgYnVnICMxNTQxNjk3LCB0aGlzIGNhdXNlZCBzZ21sIHBhcnNlciB0byBoYW5nCisgICAgICAgICMgSnVzdCB2ZXJpZnkgdGhpcyBjb2RlIGRvZXNuJ3QgY2F1c2UgYSBoYW5nLgorICAgICAgICBDSFVOSyA9IDEwMjQgICMgaW5jcmVhc2luZyB0aGlzIHRvIDgyMTIgbWFrZXMgdGhlIHByb2JsZW0gZ28gYXdheQorCisgICAgICAgIGYgPSBvcGVuKHRlc3Rfc3VwcG9ydC5maW5kZmlsZSgnc2dtbF9pbnB1dC5odG1sJykpCisgICAgICAgIGZwID0gc2dtbGxpYi5TR01MUGFyc2VyKCkKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoQ0hVTkspCisgICAgICAgICAgICBmcC5mZWVkKGRhdGEpCisgICAgICAgICAgICBpZiBsZW4oZGF0YSkgIT0gQ0hVTks6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiB0ZXN0X29ubHlfZGVjb2RlX2FzY2lpKHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZyAjMTY1MTk5NSwgbWFrZSBzdXJlIG5vbi1hc2NpaSBjaGFyYWN0ZXIgcmVmZXJlbmNlcyBhcmUgbm90IGRlY29kZWQKKyAgICAgICAgcyA9ICc8c2lnbnMgZXhjbGFtYXRpb249IiYjMzMiIGNvcHlyaWdodD0iJiMxNjkiIHF1b3RlbGVmdD0iJiM4MjE2OyI+JworICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhzLCBbCisgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ3NpZ25zJywKKyAgICAgICAgICAgICBbKCdleGNsYW1hdGlvbicsICchJyksICgnY29weXJpZ2h0JywgJyYjMTY5JyksCisgICAgICAgICAgICAgICgncXVvdGVsZWZ0JywgJyYjODIxNjsnKV0pLAorICAgICAgICAgICAgXSkKKworICAgICMgWFhYIFRoZXNlIHRlc3RzIGhhdmUgYmVlbiBkaXNhYmxlZCBieSBwcmVmaXhpbmcgdGhlaXIgbmFtZXMgd2l0aAorICAgICMgYW4gdW5kZXJzY29yZS4gIFRoZSBmaXJzdCB0d28gZXhlcmNpc2Ugb3V0c3RhbmRpbmcgYnVncyBpbiB0aGUKKyAgICAjIHNnbWxsaWIgbW9kdWxlLCBhbmQgdGhlIHRoaXJkIGV4aGliaXRzIHF1ZXN0aW9uYWJsZSBiZWhhdmlvcgorICAgICMgdGhhdCBuZWVkcyB0byBiZSBjYXJlZnVsbHkgY29uc2lkZXJlZCBiZWZvcmUgY2hhbmdpbmcgaXQuCisKKyAgICBkZWYgX3Rlc3Rfc3RhcnR0YWdfZW5kX2JvdW5kYXJ5KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiPGEgYj0nPCc+IiwgWygic3RhcnR0YWciLCAiYSIsIFsoImIiLCAiPCIpXSldKQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiPGEgYj0nPic+IiwgWygic3RhcnR0YWciLCAiYSIsIFsoImIiLCAiPiIpXSldKQorCisgICAgZGVmIF90ZXN0X2J1ZmZlcl9hcnRlZmFjdHMoc2VsZik6CisgICAgICAgIG91dHB1dCA9IFsoInN0YXJ0dGFnIiwgImEiLCBbKCJiIiwgIjwiKV0pXQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhbIjxhIGI9JzwnPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPGEgIiwgImI9JzwnPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPGEgYiIsICI9JzwnPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPGEgYj0iLCAiJzwnPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPGEgYj0nPCIsICInPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPGEgYj0nPCciLCAiPiJdLCBvdXRwdXQpCisKKyAgICAgICAgb3V0cHV0ID0gWygic3RhcnR0YWciLCAiYSIsIFsoImIiLCAiPiIpXSldCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPGEgYj0nPic+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoWyI8YSAiLCAiYj0nPic+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoWyI8YSBiIiwgIj0nPic+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoWyI8YSBiPSIsICInPic+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoWyI8YSBiPSc+IiwgIic+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoWyI8YSBiPSc+JyIsICI+Il0sIG91dHB1dCkKKworICAgICAgICBvdXRwdXQgPSBbKCJjb21tZW50IiwgImFiYyIpXQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhbIiIsICI8IS0tYWJjLS0+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoWyI8IiwgIiEtLWFiYy0tPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPCEiLCAiLS1hYmMtLT4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhbIjwhLSIsICItYWJjLS0+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoWyI8IS0tIiwgImFiYy0tPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPCEtLWEiLCAiYmMtLT4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhbIjwhLS1hYiIsICJjLS0+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoWyI8IS0tYWJjIiwgIi0tPiJdLCBvdXRwdXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKFsiPCEtLWFiYy0iLCAiLT4iXSwgb3V0cHV0KQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhbIjwhLS1hYmMtLSIsICI+Il0sIG91dHB1dCkKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoWyI8IS0tYWJjLS0+IiwgIiJdLCBvdXRwdXQpCisKKyAgICBkZWYgX3Rlc3Rfc3RhcnR0YWdfanVua19jaGFycyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZV9lcnJvcigiPCIpCisgICAgICAgIHNlbGYuY2hlY2tfcGFyc2VfZXJyb3IoIjw+IikKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZV9lcnJvcigiPC8kPiIpCisgICAgICAgIHNlbGYuY2hlY2tfcGFyc2VfZXJyb3IoIjwvIikKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZV9lcnJvcigiPC9hIikKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZV9lcnJvcigiPCQiKQorICAgICAgICBzZWxmLmNoZWNrX3BhcnNlX2Vycm9yKCI8JD4iKQorICAgICAgICBzZWxmLmNoZWNrX3BhcnNlX2Vycm9yKCI8ISIpCisgICAgICAgIHNlbGYuY2hlY2tfcGFyc2VfZXJyb3IoIjxhICQ+IikKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZV9lcnJvcigiPGEiKQorICAgICAgICBzZWxmLmNoZWNrX3BhcnNlX2Vycm9yKCI8YSBmb289J2JhciciKQorICAgICAgICBzZWxmLmNoZWNrX3BhcnNlX2Vycm9yKCI8YSBmb289J2JhciIpCisgICAgICAgIHNlbGYuY2hlY2tfcGFyc2VfZXJyb3IoIjxhIGZvbz0nPiciKQorICAgICAgICBzZWxmLmNoZWNrX3BhcnNlX2Vycm9yKCI8YSBmb289Jz4iKQorICAgICAgICBzZWxmLmNoZWNrX3BhcnNlX2Vycm9yKCI8YSBmb289PiIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU0dNTFBhcnNlclRlc3RDYXNlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NoYS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NoYS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjM4NDM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc2hhLnB5CkBAIC0wLDAgKzEsNTYgQEAKKyMgVGVzdGluZyBzaGEgbW9kdWxlIChOSVNUJ3MgU2VjdXJlIEhhc2ggQWxnb3JpdGhtKQorCisjIHVzZSB0aGUgdGhyZWUgZXhhbXBsZXMgZnJvbSBGZWRlcmFsIEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgU3RhbmRhcmRzCisjIFB1YmxpY2F0aW9uIDE4MC0xLCBTZWN1cmUgSGFzaCBTdGFuZGFyZCwgIDE5OTUgQXByaWwgMTcKKyMgaHR0cDovL3d3dy5pdGwubmlzdC5nb3YvZGl2ODk3L3B1YnMvZmlwMTgwLTEuaHRtCisKK2ltcG9ydCB3YXJuaW5ncword2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0aGUgc2hhIG1vZHVsZSBpcyBkZXByZWNhdGVkLioiLAorICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorCitpbXBvcnQgc2hhCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKworY2xhc3MgU0hBVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjaGVjayhzZWxmLCBkYXRhLCBkaWdlc3QpOgorICAgICAgICAjIENoZWNrIGRpZ2VzdCBtYXRjaGVzIHRoZSBleHBlY3RlZCB2YWx1ZQorICAgICAgICBvYmogPSBzaGEubmV3KGRhdGEpCisgICAgICAgIGNvbXB1dGVkID0gb2JqLmhleGRpZ2VzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb21wdXRlZCA9PSBkaWdlc3QpCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgdmFsdWUgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUKKyAgICAgICAgIyBkaWdlc3Qgb3BlcmF0aW9ucy4KKyAgICAgICAgY29tcHV0ZWRfYWdhaW4gPSBvYmouaGV4ZGlnZXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXB1dGVkID09IGNvbXB1dGVkX2FnYWluKQorCisgICAgICAgICMgQ2hlY2sgaGV4ZGlnZXN0KCkgb3V0cHV0IG1hdGNoZXMgZGlnZXN0KCkncyBvdXRwdXQKKyAgICAgICAgZGlnZXN0ID0gb2JqLmRpZ2VzdCgpCisgICAgICAgIGhleGQgPSAiIgorICAgICAgICBmb3IgYyBpbiBkaWdlc3Q6CisgICAgICAgICAgICBoZXhkICs9ICclMDJ4JyAlIG9yZChjKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tcHV0ZWQgPT0gaGV4ZCkKKworICAgIGRlZiB0ZXN0X2Nhc2VfMShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygiYWJjIiwKKyAgICAgICAgICAgICAgICAgICAiYTk5OTNlMzY0NzA2ODE2YWJhM2UyNTcxNzg1MGMyNmM5Y2QwZDg5ZCIpCisKKyAgICBkZWYgdGVzdF9jYXNlXzIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIiwKKyAgICAgICAgICAgICAgICAgICAiODQ5ODNlNDQxYzNiZDI2ZWJhYWU0YWExZjk1MTI5ZTVlNTQ2NzBmMSIpCisKKyAgICBkZWYgdGVzdF9jYXNlXzMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soImEiICogMTAwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAiMzRhYTk3M2NkNGM0ZGFhNGY2MWVlYjJiZGJhZDI3MzE2NTM0MDE2ZiIpCisKKyAgICBkZWYgdGVzdF9jYXNlXzQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soY2hyKDB4QUEpICogODAsCisgICAgICAgICAgICAgICAgICAgJzRjYTBlZjM4ZjE3OTRiMjhhOGY4ZWUxMTBlZTc5ZDQ4Y2UxM2JlMjUnKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTSEFUZXN0Q2FzZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zaGVsdmUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zaGVsdmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY1NjYyNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NoZWx2ZS5weQpAQCAtMCwwICsxLDE2MyBAQAoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzaGVsdmUKK2ltcG9ydCBnbG9iCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCit0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnYW55ZGJtJywgZGVwcmVjYXRlZD1UcnVlKQorCitjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBmbiA9ICJzaGVsZnRlbXAiICsgb3MuZXh0c2VwICsgImRiIgorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIGQxID0ge30KKyAgICAgICAgcyA9IHNoZWx2ZS5TaGVsZihkMSwgcHJvdG9jb2w9Miwgd3JpdGViYWNrPUZhbHNlKQorICAgICAgICBzWydrZXkxJ10gPSBbMSwyLDMsNF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWydrZXkxJ10sIFsxLDIsMyw0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIDEpCisgICAgICAgIHMuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsZW4sIHMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNbJ2tleTEnXQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnQ2xvc2VkIHNoZWxmIHNob3VsZCBub3QgZmluZCBhIGtleScpCisKKyAgICBkZWYgdGVzdF9hc2NpaV9maWxlX3NoZWxmKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc2hlbHZlLm9wZW4oc2VsZi5mbiwgcHJvdG9jb2w9MCkKKyAgICAgICAgICAgIHNbJ2tleTEnXSA9ICgxLDIsMyw0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWydrZXkxJ10sICgxLDIsMyw0KSkKKyAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIGYgaW4gZ2xvYi5nbG9iKHNlbGYuZm4rIioiKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZikKKworICAgIGRlZiB0ZXN0X2JpbmFyeV9maWxlX3NoZWxmKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc2hlbHZlLm9wZW4oc2VsZi5mbiwgcHJvdG9jb2w9MSkKKyAgICAgICAgICAgIHNbJ2tleTEnXSA9ICgxLDIsMyw0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWydrZXkxJ10sICgxLDIsMyw0KSkKKyAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIGYgaW4gZ2xvYi5nbG9iKHNlbGYuZm4rIioiKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZikKKworICAgIGRlZiB0ZXN0X3Byb3RvMl9maWxlX3NoZWxmKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc2hlbHZlLm9wZW4oc2VsZi5mbiwgcHJvdG9jb2w9MikKKyAgICAgICAgICAgIHNbJ2tleTEnXSA9ICgxLDIsMyw0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWydrZXkxJ10sICgxLDIsMyw0KSkKKyAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIGYgaW4gZ2xvYi5nbG9iKHNlbGYuZm4rIioiKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZikKKworICAgIGRlZiB0ZXN0X2luX21lbW9yeV9zaGVsZihzZWxmKToKKyAgICAgICAgZDEgPSB7fQorICAgICAgICBzID0gc2hlbHZlLlNoZWxmKGQxLCBwcm90b2NvbD0wKQorICAgICAgICBzWydrZXkxJ10gPSAoMSwyLDMsNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWydrZXkxJ10sICgxLDIsMyw0KSkKKyAgICAgICAgcy5jbG9zZSgpCisgICAgICAgIGQyID0ge30KKyAgICAgICAgcyA9IHNoZWx2ZS5TaGVsZihkMiwgcHJvdG9jb2w9MSkKKyAgICAgICAgc1sna2V5MSddID0gKDEsMiwzLDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1sna2V5MSddLCAoMSwyLDMsNCkpCisgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQxKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkMSwgZDIpCisKKyAgICBkZWYgdGVzdF9tdXRhYmxlX2VudHJ5KHNlbGYpOgorICAgICAgICBkMSA9IHt9CisgICAgICAgIHMgPSBzaGVsdmUuU2hlbGYoZDEsIHByb3RvY29sPTIsIHdyaXRlYmFjaz1GYWxzZSkKKyAgICAgICAgc1sna2V5MSddID0gWzEsMiwzLDRdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1sna2V5MSddLCBbMSwyLDMsNF0pCisgICAgICAgIHNbJ2tleTEnXS5hcHBlbmQoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWydrZXkxJ10sIFsxLDIsMyw0XSkKKyAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgZDIgPSB7fQorICAgICAgICBzID0gc2hlbHZlLlNoZWxmKGQyLCBwcm90b2NvbD0yLCB3cml0ZWJhY2s9VHJ1ZSkKKyAgICAgICAgc1sna2V5MSddID0gWzEsMiwzLDRdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1sna2V5MSddLCBbMSwyLDMsNF0pCisgICAgICAgIHNbJ2tleTEnXS5hcHBlbmQoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWydrZXkxJ10sIFsxLDIsMyw0LDVdKQorICAgICAgICBzLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQyKSwgMSkKKworICAgIGRlZiB0ZXN0X3dyaXRlYmFja19hbHNvX3dyaXRlc19pbW1lZGlhdGVseShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA1NzU0CisgICAgICAgIGQgPSB7fQorICAgICAgICBzID0gc2hlbHZlLlNoZWxmKGQsIHdyaXRlYmFjaz1UcnVlKQorICAgICAgICBzWydrZXknXSA9IFsxXQorICAgICAgICBwMSA9IGRbJ2tleSddICAjIFdpbGwgZ2l2ZSBhIEtleUVycm9yIGlmIGJhY2tpbmcgc3RvcmUgbm90IHVwZGF0ZWQKKyAgICAgICAgc1sna2V5J10uYXBwZW5kKDIpCisgICAgICAgIHMuY2xvc2UoKQorICAgICAgICBwMiA9IGRbJ2tleSddCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocDEsIHAyKSAgIyBXcml0ZSBjcmVhdGVzIG5ldyBvYmplY3QgaW4gc3RvcmUKKworCitmcm9tIHRlc3QgaW1wb3J0IG1hcHBpbmdfdGVzdHMKKworY2xhc3MgVGVzdFNoZWx2ZUJhc2UobWFwcGluZ190ZXN0cy5CYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wpOgorICAgIGZuID0gInNoZWxmdGVtcC5kYiIKKyAgICBjb3VudGVyID0gMAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIHNlbGYuX2RiID0gW10KKyAgICAgICAgbWFwcGluZ190ZXN0cy5CYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpCisgICAgdHlwZTJ0ZXN0ID0gc2hlbHZlLlNoZWxmCisgICAgZGVmIF9yZWZlcmVuY2Uoc2VsZik6CisgICAgICAgIHJldHVybiB7ImtleTEiOiJ2YWx1ZTEiLCAia2V5MiI6MiwgImtleTMiOigxLDIsMyl9CisgICAgZGVmIF9lbXB0eV9tYXBwaW5nKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9pbl9tZW06CisgICAgICAgICAgICB4PSBzaGVsdmUuU2hlbGYoe30sICoqc2VsZi5fYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY291bnRlcis9MQorICAgICAgICAgICAgeD0gc2hlbHZlLm9wZW4oc2VsZi5mbitzdHIoc2VsZi5jb3VudGVyKSwgKipzZWxmLl9hcmdzKQorICAgICAgICBzZWxmLl9kYi5hcHBlbmQoeCkKKyAgICAgICAgcmV0dXJuIHgKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBkYiBpbiBzZWxmLl9kYjoKKyAgICAgICAgICAgIGRiLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fZGIgPSBbXQorICAgICAgICBpZiBub3Qgc2VsZi5faW5fbWVtOgorICAgICAgICAgICAgZm9yIGYgaW4gZ2xvYi5nbG9iKHNlbGYuZm4rIioiKToKKyAgICAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKGYpCisKK2NsYXNzIFRlc3RBc2NpaUZpbGVTaGVsdmUoVGVzdFNoZWx2ZUJhc2UpOgorICAgIF9hcmdzPXsncHJvdG9jb2wnOjB9CisgICAgX2luX21lbSA9IEZhbHNlCitjbGFzcyBUZXN0QmluYXJ5RmlsZVNoZWx2ZShUZXN0U2hlbHZlQmFzZSk6CisgICAgX2FyZ3M9eydwcm90b2NvbCc6MX0KKyAgICBfaW5fbWVtID0gRmFsc2UKK2NsYXNzIFRlc3RQcm90bzJGaWxlU2hlbHZlKFRlc3RTaGVsdmVCYXNlKToKKyAgICBfYXJncz17J3Byb3RvY29sJzoyfQorICAgIF9pbl9tZW0gPSBGYWxzZQorY2xhc3MgVGVzdEFzY2lpTWVtU2hlbHZlKFRlc3RTaGVsdmVCYXNlKToKKyAgICBfYXJncz17J3Byb3RvY29sJzowfQorICAgIF9pbl9tZW0gPSBUcnVlCitjbGFzcyBUZXN0QmluYXJ5TWVtU2hlbHZlKFRlc3RTaGVsdmVCYXNlKToKKyAgICBfYXJncz17J3Byb3RvY29sJzoxfQorICAgIF9pbl9tZW0gPSBUcnVlCitjbGFzcyBUZXN0UHJvdG8yTWVtU2hlbHZlKFRlc3RTaGVsdmVCYXNlKToKKyAgICBfYXJncz17J3Byb3RvY29sJzoyfQorICAgIF9pbl9tZW0gPSBUcnVlCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBUZXN0QXNjaWlGaWxlU2hlbHZlLAorICAgICAgICBUZXN0QmluYXJ5RmlsZVNoZWx2ZSwKKyAgICAgICAgVGVzdFByb3RvMkZpbGVTaGVsdmUsCisgICAgICAgIFRlc3RBc2NpaU1lbVNoZWx2ZSwKKyAgICAgICAgVGVzdEJpbmFyeU1lbVNoZWx2ZSwKKyAgICAgICAgVGVzdFByb3RvMk1lbVNoZWx2ZSwKKyAgICAgICAgVGVzdENhc2UKKyAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NobGV4LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc2hsZXgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzNWY0OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NobGV4LnB5CkBAIC0wLDAgKzEsMTkxIEBACisjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTEgLSotCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzaGxleAorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCit0cnk6CisgICAgZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworCisjIFRoZSBvcmlnaW5hbCB0ZXN0IGRhdGEgc2V0IHdhcyBmcm9tIHNoZWxsd29yZHMsIGJ5IEhhcnRtdXQgR29lYmVsLgorCitkYXRhID0gciIiInh8eHwKK2ZvbyBiYXJ8Zm9vfGJhcnwKKyBmb28gYmFyfGZvb3xiYXJ8CisgZm9vIGJhciB8Zm9vfGJhcnwKK2ZvbyAgIGJhciAgICBibGEgICAgIGZhc2VsfGZvb3xiYXJ8YmxhfGZhc2VsfAoreCB5ICB6ICAgICAgICAgICAgICB4eHh4fHh8eXx6fHh4eHh8CitceCBiYXJ8XHx4fGJhcnwKK1wgeCBiYXJ8XHx4fGJhcnwKK1wgYmFyfFx8YmFyfAorZm9vIFx4IGJhcnxmb298XHx4fGJhcnwKK2ZvbyBcIHggYmFyfGZvb3xcfHh8YmFyfAorZm9vIFwgYmFyfGZvb3xcfGJhcnwKK2ZvbyAiYmFyIiBibGF8Zm9vfCJiYXIifGJsYXwKKyJmb28iICJiYXIiICJibGEifCJmb28ifCJiYXIifCJibGEifAorImZvbyIgYmFyICJibGEifCJmb28ifGJhcnwiYmxhInwKKyJmb28iIGJhciBibGF8ImZvbyJ8YmFyfGJsYXwKK2ZvbyAnYmFyJyBibGF8Zm9vfCdiYXInfGJsYXwKKydmb28nICdiYXInICdibGEnfCdmb28nfCdiYXInfCdibGEnfAorJ2ZvbycgYmFyICdibGEnfCdmb28nfGJhcnwnYmxhJ3wKKydmb28nIGJhciBibGF8J2Zvbyd8YmFyfGJsYXwKK2JsdXJiIGZvbyJiYXIiYmFyImZhc2VsIiBiYXp8Ymx1cmJ8Zm9vImJhciJiYXIiZmFzZWwifGJhenwKK2JsdXJiIGZvbydiYXInYmFyJ2Zhc2VsJyBiYXp8Ymx1cmJ8Zm9vJ2JhcidiYXInZmFzZWwnfGJhenwKKyIifCIifAorJyd8Jyd8Citmb28gIiIgYmFyfGZvb3wiInxiYXJ8Citmb28gJycgYmFyfGZvb3wnJ3xiYXJ8Citmb28gIiIgIiIgIiIgYmFyfGZvb3wiInwiInwiInxiYXJ8Citmb28gJycgJycgJycgYmFyfGZvb3wnJ3wnJ3wnJ3xiYXJ8CitcIiJ8XHwiInwKKyJcInwiXCJ8CisiZm9vXCBiYXIifCJmb29cIGJhciJ8CisiZm9vXFwgYmFyInwiZm9vXFwgYmFyInwKKyJmb29cXCBiYXJcInwiZm9vXFwgYmFyXCJ8CisiZm9vXFwiIGJhclwiInwiZm9vXFwifGJhcnxcfCIifAorImZvb1xcIGJhclwiIGRmYWRmInwiZm9vXFwgYmFyXCJ8ZGZhZGYifAorImZvb1xcXCBiYXJcIiBkZmFkZiJ8ImZvb1xcXCBiYXJcInxkZmFkZiJ8CisiZm9vXFxceCBiYXJcIiBkZmFkZiJ8ImZvb1xcXHggYmFyXCJ8ZGZhZGYifAorImZvb1x4IGJhclwiIGRmYWRmInwiZm9vXHggYmFyXCJ8ZGZhZGYifAorXCcnfFx8Jyd8CisnZm9vXCBiYXInfCdmb29cIGJhcid8CisnZm9vXFwgYmFyJ3wnZm9vXFwgYmFyJ3wKKyJmb29cXFx4IGJhclwiIGRmJ2FcICdkZid8ImZvb1xcXHggYmFyXCJ8ZGYnYXxcfCdkZid8CitcImZvbyJ8XHwiZm9vInwKK1wiZm9vIlx4fFx8ImZvbyJ8XHx4fAorImZvb1x4InwiZm9vXHgifAorImZvb1wgInwiZm9vXCAifAorZm9vXCB4eHxmb298XHx4eHwKK2Zvb1wgeFx4fGZvb3xcfHh8XHx4fAorZm9vXCB4XHhcIiJ8Zm9vfFx8eHxcfHh8XHwiInwKKyJmb29cIHhceCJ8ImZvb1wgeFx4InwKKyJmb29cIHhceFxcInwiZm9vXCB4XHhcXCJ8CisiZm9vXCB4XHhcXCIiZm9vYmFyInwiZm9vXCB4XHhcXCJ8ImZvb2JhciJ8CisiZm9vXCB4XHhcXCJcJyciZm9vYmFyInwiZm9vXCB4XHhcXCJ8XHwnJ3wiZm9vYmFyInwKKyJmb29cIHhceFxcIlwnImZvJ29iYXIifCJmb29cIHhceFxcInxcfCciZm8nfG9iYXIifAorImZvb1wgeFx4XFwiXCciZm8nb2JhciIgJ2RvbidcJyd0J3wiZm9vXCB4XHhcXCJ8XHwnImZvJ3xvYmFyInwnZG9uJ3xcfCcnfHQnfAorJ2Zvb1wgYmFyJ3wnZm9vXCBiYXInfAorJ2Zvb1xcIGJhcid8J2Zvb1xcIGJhcid8Citmb29cIGJhcnxmb298XHxiYXJ8Citmb28jYmFyXG5iYXp8Zm9vYmF6fAorOi0pIDstKXw6fC18KXw7fC18KXwKK+Hp7fP6fOF86XztfPN8+nwKKyIiIgorCitwb3NpeF9kYXRhID0gciIiInh8eHwKK2ZvbyBiYXJ8Zm9vfGJhcnwKKyBmb28gYmFyfGZvb3xiYXJ8CisgZm9vIGJhciB8Zm9vfGJhcnwKK2ZvbyAgIGJhciAgICBibGEgICAgIGZhc2VsfGZvb3xiYXJ8YmxhfGZhc2VsfAoreCB5ICB6ICAgICAgICAgICAgICB4eHh4fHh8eXx6fHh4eHh8CitceCBiYXJ8eHxiYXJ8CitcIHggYmFyfCB4fGJhcnwKK1wgYmFyfCBiYXJ8Citmb28gXHggYmFyfGZvb3x4fGJhcnwKK2ZvbyBcIHggYmFyfGZvb3wgeHxiYXJ8Citmb28gXCBiYXJ8Zm9vfCBiYXJ8Citmb28gImJhciIgYmxhfGZvb3xiYXJ8YmxhfAorImZvbyIgImJhciIgImJsYSJ8Zm9vfGJhcnxibGF8CisiZm9vIiBiYXIgImJsYSJ8Zm9vfGJhcnxibGF8CisiZm9vIiBiYXIgYmxhfGZvb3xiYXJ8YmxhfAorZm9vICdiYXInIGJsYXxmb298YmFyfGJsYXwKKydmb28nICdiYXInICdibGEnfGZvb3xiYXJ8YmxhfAorJ2ZvbycgYmFyICdibGEnfGZvb3xiYXJ8YmxhfAorJ2ZvbycgYmFyIGJsYXxmb298YmFyfGJsYXwKK2JsdXJiIGZvbyJiYXIiYmFyImZhc2VsIiBiYXp8Ymx1cmJ8Zm9vYmFyYmFyZmFzZWx8YmF6fAorYmx1cmIgZm9vJ2JhcidiYXInZmFzZWwnIGJhenxibHVyYnxmb29iYXJiYXJmYXNlbHxiYXp8CisiInx8CisnJ3x8Citmb28gIiIgYmFyfGZvb3x8YmFyfAorZm9vICcnIGJhcnxmb298fGJhcnwKK2ZvbyAiIiAiIiAiIiBiYXJ8Zm9vfHx8fGJhcnwKK2ZvbyAnJyAnJyAnJyBiYXJ8Zm9vfHx8fGJhcnwKK1wifCJ8CisiXCIifCJ8CisiZm9vXCBiYXIifGZvb1wgYmFyfAorImZvb1xcIGJhciJ8Zm9vXCBiYXJ8CisiZm9vXFwgYmFyXCIifGZvb1wgYmFyInwKKyJmb29cXCIgYmFyXCJ8Zm9vXHxiYXIifAorImZvb1xcIGJhclwiIGRmYWRmInxmb29cIGJhciIgZGZhZGZ8CisiZm9vXFxcIGJhclwiIGRmYWRmInxmb29cXCBiYXIiIGRmYWRmfAorImZvb1xcXHggYmFyXCIgZGZhZGYifGZvb1xceCBiYXIiIGRmYWRmfAorImZvb1x4IGJhclwiIGRmYWRmInxmb29ceCBiYXIiIGRmYWRmfAorXCd8J3wKKydmb29cIGJhcid8Zm9vXCBiYXJ8CisnZm9vXFwgYmFyJ3xmb29cXCBiYXJ8CisiZm9vXFxceCBiYXJcIiBkZidhXCAnZGYifGZvb1xceCBiYXIiIGRmJ2FcICdkZnwKK1wiZm9vfCJmb298CitcImZvb1x4fCJmb294fAorImZvb1x4Inxmb29ceHwKKyJmb29cICJ8Zm9vXCB8Citmb29cIHh4fGZvbyB4eHwKK2Zvb1wgeFx4fGZvbyB4eHwKK2Zvb1wgeFx4XCJ8Zm9vIHh4InwKKyJmb29cIHhceCJ8Zm9vXCB4XHh8CisiZm9vXCB4XHhcXCJ8Zm9vXCB4XHhcfAorImZvb1wgeFx4XFwiImZvb2JhciJ8Zm9vXCB4XHhcZm9vYmFyfAorImZvb1wgeFx4XFwiXCciZm9vYmFyInxmb29cIHhceFwnZm9vYmFyfAorImZvb1wgeFx4XFwiXCciZm8nb2JhciJ8Zm9vXCB4XHhcJ2ZvJ29iYXJ8CisiZm9vXCB4XHhcXCJcJyJmbydvYmFyIiAnZG9uJ1wnJ3QnfGZvb1wgeFx4XCdmbydvYmFyfGRvbid0fAorImZvb1wgeFx4XFwiXCciZm8nb2JhciIgJ2RvbidcJyd0JyBcXHxmb29cIHhceFwnZm8nb2Jhcnxkb24ndHxcfAorJ2Zvb1wgYmFyJ3xmb29cIGJhcnwKKydmb29cXCBiYXInfGZvb1xcIGJhcnwKK2Zvb1wgYmFyfGZvbyBiYXJ8Citmb28jYmFyXG5iYXp8Zm9vfGJhenwKKzotKSA7LSl8Oi0pfDstKXwKK+Hp7fP6fOHp7fP6fAorIiIiCisKK2NsYXNzIFNobGV4VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmRhdGEgPSBbeC5zcGxpdCgifCIpWzotMV0KKyAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluIGRhdGEuc3BsaXRsaW5lcygpXQorICAgICAgICBzZWxmLnBvc2l4X2RhdGEgPSBbeC5zcGxpdCgifCIpWzotMV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluIHBvc2l4X2RhdGEuc3BsaXRsaW5lcygpXQorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLmRhdGE6CisgICAgICAgICAgICBpdGVtWzBdID0gaXRlbVswXS5yZXBsYWNlKHIiXG4iLCAiXG4iKQorICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLnBvc2l4X2RhdGE6CisgICAgICAgICAgICBpdGVtWzBdID0gaXRlbVswXS5yZXBsYWNlKHIiXG4iLCAiXG4iKQorCisgICAgZGVmIHNwbGl0VGVzdChzZWxmLCBkYXRhLCBjb21tZW50cyk6CisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihkYXRhKSk6CisgICAgICAgICAgICBsID0gc2hsZXguc3BsaXQoZGF0YVtpXVswXSwgY29tbWVudHM9Y29tbWVudHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIGRhdGFbaV1bMTpdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6ICVzICE9ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhW2ldWzBdLCBsLCBkYXRhW2ldWzE6XSkpCisKKyAgICBkZWYgb2xkU3BsaXQoc2VsZiwgcyk6CisgICAgICAgIHJldCA9IFtdCisgICAgICAgIGxleCA9IHNobGV4LnNobGV4KFN0cmluZ0lPKHMpKQorICAgICAgICB0b2sgPSBsZXguZ2V0X3Rva2VuKCkKKyAgICAgICAgd2hpbGUgdG9rOgorICAgICAgICAgICAgcmV0LmFwcGVuZCh0b2spCisgICAgICAgICAgICB0b2sgPSBsZXguZ2V0X3Rva2VuKCkKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIHRlc3RTcGxpdFBvc2l4KHNlbGYpOgorICAgICAgICAiIiJUZXN0IGRhdGEgc3BsaXR0aW5nIHdpdGggcG9zaXggcGFyc2VyIiIiCisgICAgICAgIHNlbGYuc3BsaXRUZXN0KHNlbGYucG9zaXhfZGF0YSwgY29tbWVudHM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0Q29tcGF0KHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNvbXBhdGliaWxpdHkgaW50ZXJmYWNlIiIiCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzZWxmLmRhdGEpKToKKyAgICAgICAgICAgIGwgPSBzZWxmLm9sZFNwbGl0KHNlbGYuZGF0YVtpXVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgc2VsZi5kYXRhW2ldWzE6XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiAlcyAhPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5kYXRhW2ldWzBdLCBsLCBzZWxmLmRhdGFbaV1bMTpdKSkKKworIyBBbGxvdyB0aGlzIHRlc3QgdG8gYmUgdXNlZCB3aXRoIG9sZCBzaGxleC5weQoraWYgbm90IGdldGF0dHIoc2hsZXgsICJzcGxpdCIsIE5vbmUpOgorICAgIGZvciBtZXRobmFtZSBpbiBkaXIoU2hsZXhUZXN0KToKKyAgICAgICAgaWYgbWV0aG5hbWUuc3RhcnRzd2l0aCgidGVzdCIpIGFuZCBtZXRobmFtZSAhPSAidGVzdENvbXBhdCI6CisgICAgICAgICAgICBkZWxhdHRyKFNobGV4VGVzdCwgbWV0aG5hbWUpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFNobGV4VGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc2h1dGlsLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc2h1dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZGI3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zaHV0aWwucHkKQEAgLTAsMCArMSw4NjUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHNodXRpbAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc3lzCitpbXBvcnQgc3RhdAoraW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IGVycm5vCitmcm9tIG9zLnBhdGggaW1wb3J0IHNwbGl0ZHJpdmUKK2Zyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBmaW5kX2V4ZWN1dGFibGUsIHNwYXduCitmcm9tIHNodXRpbCBpbXBvcnQgKF9tYWtlX3RhcmJhbGwsIF9tYWtlX3ppcGZpbGUsIG1ha2VfYXJjaGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsIHVucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIGdldF9hcmNoaXZlX2Zvcm1hdHMpCitpbXBvcnQgdGFyZmlsZQoraW1wb3J0IHdhcm5pbmdzCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBURVNURk4sIGNoZWNrX3dhcm5pbmdzLCBjYXB0dXJlZF9zdGRvdXQKKworVEVTVEZOMiA9IFRFU1RGTiArICIyIgorCit0cnk6CisgICAgaW1wb3J0IGdycAorICAgIGltcG9ydCBwd2QKKyAgICBVSURfR0lEX1NVUFBPUlQgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgVUlEX0dJRF9TVVBQT1JUID0gRmFsc2UKKwordHJ5OgorICAgIGltcG9ydCB6bGliCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgemxpYiA9IE5vbmUKKwordHJ5OgorICAgIGltcG9ydCB6aXBmaWxlCisgICAgWklQX1NVUFBPUlQgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgWklQX1NVUFBPUlQgPSBmaW5kX2V4ZWN1dGFibGUoJ3ppcCcpCisKK2NsYXNzIFRlc3RTaHV0aWwodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0U2h1dGlsLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYudGVtcGRpcnMgPSBbXQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0U2h1dGlsLCBzZWxmKS50ZWFyRG93bigpCisgICAgICAgIHdoaWxlIHNlbGYudGVtcGRpcnM6CisgICAgICAgICAgICBkID0gc2VsZi50ZW1wZGlycy5wb3AoKQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkLCBvcy5uYW1lIGluICgnbnQnLCAnY3lnd2luJykpCisKKyAgICBkZWYgd3JpdGVfZmlsZShzZWxmLCBwYXRoLCBjb250ZW50PSd4eHgnKToKKyAgICAgICAgIiIiV3JpdGVzIGEgZmlsZSBpbiB0aGUgZ2l2ZW4gcGF0aC4KKworCisgICAgICAgIHBhdGggY2FuIGJlIGEgc3RyaW5nIG9yIGEgc2VxdWVuY2UuCisgICAgICAgICIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKHBhdGgsIChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigqcGF0aCkKKyAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3cnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKGNvbnRlbnQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiBta2R0ZW1wKHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoYXQgd2lsbCBiZSBjbGVhbmVkIHVwLgorCisgICAgICAgIFJldHVybnMgdGhlIHBhdGggb2YgdGhlIGRpcmVjdG9yeS4KKyAgICAgICAgIiIiCisgICAgICAgIGQgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi50ZW1wZGlycy5hcHBlbmQoZCkKKyAgICAgICAgcmV0dXJuIGQKKyAgICBkZWYgdGVzdF9ybXRyZWVfZXJyb3JzKHNlbGYpOgorICAgICAgICAjIGZpbGVuYW1lIGlzIGd1YXJhbnRlZWQgbm90IHRvIGV4aXN0CisgICAgICAgIGZpbGVuYW1lID0gdGVtcGZpbGUubWt0ZW1wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2h1dGlsLnJtdHJlZSwgZmlsZW5hbWUpCisKKyAgICAjIFNlZSBidWcgIzEwNzE1MTMgZm9yIHdoeSB3ZSBkb24ndCBydW4gdGhpcyBvbiBjeWd3aW4KKyAgICAjIGFuZCBidWcgIzEwNzY0NjcgZm9yIHdoeSB3ZSBkb24ndCBydW4gdGhpcyBhcyByb290LgorICAgIGlmIChoYXNhdHRyKG9zLCAnY2htb2QnKSBhbmQgc3lzLnBsYXRmb3JtWzo2XSAhPSAnY3lnd2luJworICAgICAgICBhbmQgbm90IChoYXNhdHRyKG9zLCAnZ2V0ZXVpZCcpIGFuZCBvcy5nZXRldWlkKCkgPT0gMCkpOgorICAgICAgICBkZWYgdGVzdF9vbl9lcnJvcihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZXJyb3JTdGF0ZSA9IDAKKyAgICAgICAgICAgIG9zLm1rZGlyKFRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuY2hpbGRwYXRoID0gb3MucGF0aC5qb2luKFRFU1RGTiwgJ2EnKQorICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5jaGlsZHBhdGgsICd3JykKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgb2xkX2Rpcl9tb2RlID0gb3Muc3RhdChURVNURk4pLnN0X21vZGUKKyAgICAgICAgICAgIG9sZF9jaGlsZF9tb2RlID0gb3Muc3RhdChzZWxmLmNoaWxkcGF0aCkuc3RfbW9kZQorICAgICAgICAgICAgIyBNYWtlIHVud3JpdGFibGUuCisgICAgICAgICAgICBvcy5jaG1vZChzZWxmLmNoaWxkcGF0aCwgc3RhdC5TX0lSRUFEKQorICAgICAgICAgICAgb3MuY2htb2QoVEVTVEZOLCBzdGF0LlNfSVJFQUQpCisKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOLCBvbmVycm9yPXNlbGYuY2hlY2tfYXJnc190b19vbmVycm9yKQorICAgICAgICAgICAgIyBUZXN0IHdoZXRoZXIgb25lcnJvciBoYXMgYWN0dWFsbHkgYmVlbiBjYWxsZWQuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZXJyb3JTdGF0ZSwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGNhbGwgdG8gb25lcnJvciBmdW5jdGlvbiBkaWQgbm90IGhhcHBlbi4iKQorCisgICAgICAgICAgICAjIE1ha2Ugd3JpdGFibGUgYWdhaW4uCisgICAgICAgICAgICBvcy5jaG1vZChURVNURk4sIG9sZF9kaXJfbW9kZSkKKyAgICAgICAgICAgIG9zLmNobW9kKHNlbGYuY2hpbGRwYXRoLCBvbGRfY2hpbGRfbW9kZSkKKworICAgICAgICAgICAgIyBDbGVhbiB1cC4KKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOKQorCisgICAgZGVmIGNoZWNrX2FyZ3NfdG9fb25lcnJvcihzZWxmLCBmdW5jLCBhcmcsIGV4Yyk6CisgICAgICAgICMgdGVzdF9ybXRyZWVfZXJyb3JzIGRlbGliZXJhdGVseSBydW5zIHJtdHJlZQorICAgICAgICAjIG9uIGEgZGlyZWN0b3J5IHRoYXQgaXMgY2htb2QgNDAwLCB3aGljaCB3aWxsIGZhaWwuCisgICAgICAgICMgVGhpcyBmdW5jdGlvbiBpcyBydW4gd2hlbiBzaHV0aWwucm10cmVlIGZhaWxzLgorICAgICAgICAjIDk5LjklIG9mIHRoZSB0aW1lIGl0IGluaXRpYWxseSBmYWlscyB0byByZW1vdmUKKyAgICAgICAgIyBhIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSwgc28gdGhlIGZpcnN0IHRpbWUgdGhyb3VnaAorICAgICAgICAjIGZ1bmMgaXMgb3MucmVtb3ZlLgorICAgICAgICAjIEhvd2V2ZXIsIHNvbWUgTGludXggbWFjaGluZXMgcnVubmluZyBaRlMgb24KKyAgICAgICAgIyBGVVNFIGV4cGVyaWVuY2VkIGEgZmFpbHVyZSBlYXJsaWVyIGluIHRoZSBwcm9jZXNzCisgICAgICAgICMgYXQgb3MubGlzdGRpci4gIFRoZSBmaXJzdCBmYWlsdXJlIG1heSBsZWdhbGx5CisgICAgICAgICMgYmUgZWl0aGVyLgorICAgICAgICBpZiBzZWxmLmVycm9yU3RhdGUgPT0gMDoKKyAgICAgICAgICAgIGlmIGZ1bmMgaXMgb3MucmVtb3ZlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJnLCBzZWxmLmNoaWxkcGF0aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhmdW5jLCBvcy5saXN0ZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZ1bmMgbXVzdCBiZSBlaXRoZXIgb3MucmVtb3ZlIG9yIG9zLmxpc3RkaXIiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJnLCBURVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhleGNbMF0sIE9TRXJyb3IpKQorICAgICAgICAgICAgc2VsZi5lcnJvclN0YXRlID0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jLCBvcy5ybWRpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJnLCBURVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhleGNbMF0sIE9TRXJyb3IpKQorICAgICAgICAgICAgc2VsZi5lcnJvclN0YXRlID0gMgorCisgICAgZGVmIHRlc3Rfcm10cmVlX2RvbnRfZGVsZXRlX2ZpbGUoc2VsZik6CisgICAgICAgICMgV2hlbiBjYWxsZWQgb24gYSBmaWxlIGluc3RlYWQgb2YgYSBkaXJlY3RvcnksIGRvbid0IGRlbGV0ZSBpdC4KKyAgICAgICAgaGFuZGxlLCBwYXRoID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIG9zLmZkb3BlbihoYW5kbGUpLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2h1dGlsLnJtdHJlZSwgcGF0aCkKKyAgICAgICAgb3MucmVtb3ZlKHBhdGgpCisKKyAgICBkZWYgdGVzdF9jb3B5dHJlZV9zaW1wbGUoc2VsZik6CisgICAgICAgIGRlZiB3cml0ZV9kYXRhKHBhdGgsIGRhdGEpOgorICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgInciKQorICAgICAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZGVmIHJlYWRfZGF0YShwYXRoKToKKyAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgpCisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIGRhdGEKKworICAgICAgICBzcmNfZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIGRzdF9kaXIgPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUubWtkdGVtcCgpLCAnZGVzdGluYXRpb24nKQorCisgICAgICAgIHdyaXRlX2RhdGEob3MucGF0aC5qb2luKHNyY19kaXIsICd0ZXN0LnR4dCcpLCAnMTIzJykKKworICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Rlc3RfZGlyJykpCisgICAgICAgIHdyaXRlX2RhdGEob3MucGF0aC5qb2luKHNyY19kaXIsICd0ZXN0X2RpcicsICd0ZXN0LnR4dCcpLCAnNDU2JykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc3JjX2RpciwgZHN0X2RpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZHN0X2RpciwgJ3Rlc3QudHh0JykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKGRzdF9kaXIsICd0ZXN0X2RpcicpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZHN0X2RpciwgJ3Rlc3RfZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QudHh0JykpKQorICAgICAgICAgICAgYWN0dWFsID0gcmVhZF9kYXRhKG9zLnBhdGguam9pbihkc3RfZGlyLCAndGVzdC50eHQnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCAnMTIzJykKKyAgICAgICAgICAgIGFjdHVhbCA9IHJlYWRfZGF0YShvcy5wYXRoLmpvaW4oZHN0X2RpciwgJ3Rlc3RfZGlyJywgJ3Rlc3QudHh0JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgJzQ1NicpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmb3IgcGF0aCBpbiAoCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzcmNfZGlyLCAndGVzdC50eHQnKSwKKyAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGRzdF9kaXIsICd0ZXN0LnR4dCcpLAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Rlc3RfZGlyJywgJ3Rlc3QudHh0JyksCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihkc3RfZGlyLCAndGVzdF9kaXInLCAndGVzdC50eHQnKSwKKyAgICAgICAgICAgICAgICApOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUocGF0aCkKKyAgICAgICAgICAgIGZvciBwYXRoIGluIChzcmNfZGlyLAorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoZHN0X2RpcikKKyAgICAgICAgICAgICAgICApOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHBhdGgpCisKKyAgICBkZWYgdGVzdF9jb3B5dHJlZV93aXRoX2V4Y2x1ZGUoc2VsZik6CisKKyAgICAgICAgZGVmIHdyaXRlX2RhdGEocGF0aCwgZGF0YSk6CisgICAgICAgICAgICBmID0gb3BlbihwYXRoLCAidyIpCisgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBkZWYgcmVhZF9kYXRhKHBhdGgpOgorICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCkKKyAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICByZXR1cm4gZGF0YQorCisgICAgICAgICMgY3JlYXRpbmcgZGF0YQorICAgICAgICBqb2luID0gb3MucGF0aC5qb2luCisgICAgICAgIGV4aXN0cyA9IG9zLnBhdGguZXhpc3RzCisgICAgICAgIHNyY19kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZHN0X2RpciA9IGpvaW4odGVtcGZpbGUubWtkdGVtcCgpLCAnZGVzdGluYXRpb24nKQorICAgICAgICAgICAgd3JpdGVfZGF0YShqb2luKHNyY19kaXIsICd0ZXN0LnR4dCcpLCAnMTIzJykKKyAgICAgICAgICAgIHdyaXRlX2RhdGEoam9pbihzcmNfZGlyLCAndGVzdC50bXAnKSwgJzEyMycpCisgICAgICAgICAgICBvcy5ta2Rpcihqb2luKHNyY19kaXIsICd0ZXN0X2RpcicpKQorICAgICAgICAgICAgd3JpdGVfZGF0YShqb2luKHNyY19kaXIsICd0ZXN0X2RpcicsICd0ZXN0LnR4dCcpLCAnNDU2JykKKyAgICAgICAgICAgIG9zLm1rZGlyKGpvaW4oc3JjX2RpciwgJ3Rlc3RfZGlyMicpKQorICAgICAgICAgICAgd3JpdGVfZGF0YShqb2luKHNyY19kaXIsICd0ZXN0X2RpcjInLCAndGVzdC50eHQnKSwgJzQ1NicpCisgICAgICAgICAgICBvcy5ta2Rpcihqb2luKHNyY19kaXIsICd0ZXN0X2RpcjInLCAnc3ViZGlyJykpCisgICAgICAgICAgICBvcy5ta2Rpcihqb2luKHNyY19kaXIsICd0ZXN0X2RpcjInLCAnc3ViZGlyMicpKQorICAgICAgICAgICAgd3JpdGVfZGF0YShqb2luKHNyY19kaXIsICd0ZXN0X2RpcjInLCAnc3ViZGlyJywgJ3Rlc3QudHh0JyksICc0NTYnKQorICAgICAgICAgICAgd3JpdGVfZGF0YShqb2luKHNyY19kaXIsICd0ZXN0X2RpcjInLCAnc3ViZGlyMicsICd0ZXN0LnB5JyksICc0NTYnKQorCisKKyAgICAgICAgICAgICMgdGVzdGluZyBnbG9iLWxpa2UgcGF0dGVybnMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXR0ZXJucyA9IHNodXRpbC5pZ25vcmVfcGF0dGVybnMoJyoudG1wJywgJ3Rlc3RfZGlyMicpCisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNyY19kaXIsIGRzdF9kaXIsIGlnbm9yZT1wYXR0ZXJucykKKyAgICAgICAgICAgICAgICAjIGNoZWNraW5nIHRoZSByZXN1bHQ6IHNvbWUgZWxlbWVudHMgc2hvdWxkIG5vdCBiZSBjb3BpZWQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhpc3RzKGpvaW4oZHN0X2RpciwgJ3Rlc3QudHh0JykpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZXhpc3RzKGpvaW4oZHN0X2RpciwgJ3Rlc3QudG1wJykpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZXhpc3RzKGpvaW4oZHN0X2RpciwgJ3Rlc3RfZGlyMicpKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZHN0X2Rpcik6CisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZHN0X2RpcikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXR0ZXJucyA9IHNodXRpbC5pZ25vcmVfcGF0dGVybnMoJyoudG1wJywgJ3N1YmRpcionKQorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzcmNfZGlyLCBkc3RfZGlyLCBpZ25vcmU9cGF0dGVybnMpCisgICAgICAgICAgICAgICAgIyBjaGVja2luZyB0aGUgcmVzdWx0OiBzb21lIGVsZW1lbnRzIHNob3VsZCBub3QgYmUgY29waWVkCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBleGlzdHMoam9pbihkc3RfZGlyLCAndGVzdC50bXAnKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBleGlzdHMoam9pbihkc3RfZGlyLCAndGVzdF9kaXIyJywgJ3N1YmRpcjInKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBleGlzdHMoam9pbihkc3RfZGlyLCAndGVzdF9kaXIyJywgJ3N1YmRpcicpKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZHN0X2Rpcik6CisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZHN0X2RpcikKKworICAgICAgICAgICAgIyB0ZXN0aW5nIGNhbGxhYmxlLXN0eWxlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVmIF9maWx0ZXIoc3JjLCBuYW1lcyk6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzcmMsIG5hbWUpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcy5wYXRoLmlzZGlyKHBhdGgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguc3BsaXQoKVstMV0gPT0gJ3N1YmRpcicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5zcGxpdGV4dChwYXRoKVstMV0gaW4gKCcucHknKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzcmNfZGlyLCBkc3RfZGlyLCBpZ25vcmU9X2ZpbHRlcikKKworICAgICAgICAgICAgICAgICMgY2hlY2tpbmcgdGhlIHJlc3VsdDogc29tZSBlbGVtZW50cyBzaG91bGQgbm90IGJlIGNvcGllZAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZXhpc3RzKGpvaW4oZHN0X2RpciwgJ3Rlc3RfZGlyMicsICdzdWJkaXIyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdC5weScpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGV4aXN0cyhqb2luKGRzdF9kaXIsICd0ZXN0X2RpcjInLCAnc3ViZGlyJykpKQorCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRzdF9kaXIpOgorICAgICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRzdF9kaXIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNyY19kaXIpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguZGlybmFtZShkc3RfZGlyKSkKKworICAgIGlmIGhhc2F0dHIob3MsICJzeW1saW5rIik6CisgICAgICAgIGRlZiB0ZXN0X2RvbnRfY29weV9maWxlX29udG9fbGlua190b19pdHNlbGYoc2VsZik6CisgICAgICAgICAgICAjIGJ1ZyA4NTExMjMuCisgICAgICAgICAgICBvcy5ta2RpcihURVNURk4pCisgICAgICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCAnY2hlZXNlJykKKyAgICAgICAgICAgIGRzdCA9IG9zLnBhdGguam9pbihURVNURk4sICdzaG9wJykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmID0gb3BlbihzcmMsICd3JykKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdjaGVkZGFyJykKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgICAgIG9zLmxpbmsoc3JjLCBkc3QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLkVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihzcmMsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ2NoZWRkYXInKQorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCisKKyAgICAgICAgICAgICAgICAjIFVzaW5nIGBzcmNgIGhlcmUgd291bGQgbWVhbiB3ZSBlbmQgdXAgd2l0aCBhIHN5bWxpbmsgcG9pbnRpbmcKKyAgICAgICAgICAgICAgICAjIHRvIFRFU1RGTi9URVNURk4vY2hlZXNlLCB3aGlsZSBpdCBzaG91bGQgcG9pbnQgYXQKKyAgICAgICAgICAgICAgICAjIFRFU1RGTi9jaGVlc2UuCisgICAgICAgICAgICAgICAgb3Muc3ltbGluaygnY2hlZXNlJywgZHN0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5FcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmMsIGRzdCkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdjaGVkZGFyJykKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZHN0KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVmIHRlc3Rfcm10cmVlX29uX3N5bWxpbmsoc2VsZik6CisgICAgICAgICAgICAjIGJ1ZyAxNjY5LgorICAgICAgICAgICAgb3MubWtkaXIoVEVTVEZOKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNyYyA9IG9zLnBhdGguam9pbihURVNURk4sICdjaGVlc2UnKQorICAgICAgICAgICAgICAgIGRzdCA9IG9zLnBhdGguam9pbihURVNURk4sICdzaG9wJykKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihzcmMpCisgICAgICAgICAgICAgICAgb3Muc3ltbGluayhzcmMsIGRzdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzaHV0aWwucm10cmVlLCBkc3QpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOLCBpZ25vcmVfZXJyb3JzPVRydWUpCisKKyAgICBpZiBoYXNhdHRyKG9zLCAibWtmaWZvIik6CisgICAgICAgICMgSXNzdWUgIzMwMDI6IGNvcHlmaWxlIGFuZCBjb3B5dHJlZSBibG9jayBpbmRlZmluaXRlbHkgb24gbmFtZWQgcGlwZXMKKyAgICAgICAgZGVmIHRlc3RfY29weWZpbGVfbmFtZWRfcGlwZShzZWxmKToKKyAgICAgICAgICAgIG9zLm1rZmlmbyhURVNURk4pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLlNwZWNpYWxGaWxlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlLCBURVNURk4sIFRFU1RGTjIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLlNwZWNpYWxGaWxlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlLCBfX2ZpbGVfXywgVEVTVEZOKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQorCisgICAgICAgIGRlZiB0ZXN0X2NvcHl0cmVlX25hbWVkX3BpcGUoc2VsZik6CisgICAgICAgICAgICBvcy5ta2RpcihURVNURk4pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3ViZGlyID0gb3MucGF0aC5qb2luKFRFU1RGTiwgInN1YmRpciIpCisgICAgICAgICAgICAgICAgb3MubWtkaXIoc3ViZGlyKQorICAgICAgICAgICAgICAgIHBpcGUgPSBvcy5wYXRoLmpvaW4oc3ViZGlyLCAibXlwaXBlIikKKyAgICAgICAgICAgICAgICBvcy5ta2ZpZm8ocGlwZSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShURVNURk4sIFRFU1RGTjIpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNodXRpbC5FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlLmFyZ3NbMF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXJyb3JzKSwgMSkKKyAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIGVycm9yX21zZyA9IGVycm9yc1swXQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJgJXNgIGlzIGEgbmFtZWQgcGlwZSIgJSBwaXBlLCBlcnJvcl9tc2cpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaHV0aWwuRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByYWlzZWQiKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTiwgaWdub3JlX2Vycm9ycz1UcnVlKQorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOMiwgaWdub3JlX2Vycm9ycz1UcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2NoZmxhZ3MnKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKGVycm5vLCAnRU9QTk9UU1VQUCcpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIoZXJybm8sICdFTk9UU1VQJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVzIG9zLmNoZmxhZ3MsIEVPUE5PVFNVUFAgJiBFTk9UU1VQIikKKyAgICBkZWYgdGVzdF9jb3B5c3RhdF9oYW5kbGVzX2hhcm1sZXNzX2NoZmxhZ3NfZXJyb3JzKHNlbGYpOgorICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBmaWxlMSA9IG9zLnBhdGguam9pbih0bXBkaXIsICdmaWxlMScpCisgICAgICAgIGZpbGUyID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2ZpbGUyJykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKGZpbGUxLCAneHh4JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKGZpbGUyLCAneHh4JykKKworICAgICAgICBkZWYgbWFrZV9jaGZsYWdzX3JhaXNlcihlcnIpOgorICAgICAgICAgICAgZXggPSBPU0Vycm9yKCkKKworICAgICAgICAgICAgZGVmIF9jaGZsYWdzX3JhaXNlcihwYXRoLCBmbGFncyk6CisgICAgICAgICAgICAgICAgZXguZXJybm8gPSBlcnIKKyAgICAgICAgICAgICAgICByYWlzZSBleAorICAgICAgICAgICAgcmV0dXJuIF9jaGZsYWdzX3JhaXNlcgorICAgICAgICBvbGRfY2hmbGFncyA9IG9zLmNoZmxhZ3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGVyciBpbiBlcnJuby5FT1BOT1RTVVBQLCBlcnJuby5FTk9UU1VQOgorICAgICAgICAgICAgICAgIG9zLmNoZmxhZ3MgPSBtYWtlX2NoZmxhZ3NfcmFpc2VyKGVycikKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weXN0YXQoZmlsZTEsIGZpbGUyKQorICAgICAgICAgICAgIyBhc3NlcnQgb3RoZXJzIGVycm9ycyBicmVhayBpdAorICAgICAgICAgICAgb3MuY2hmbGFncyA9IG1ha2VfY2hmbGFnc19yYWlzZXIoZXJybm8uRU9QTk9UU1VQUCArIGVycm5vLkVOT1RTVVApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzaHV0aWwuY29weXN0YXQsIGZpbGUxLCBmaWxlMikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZmxhZ3MgPSBvbGRfY2hmbGFncworCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X21ha2VfdGFyYmFsbChzZWxmKToKKyAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgdG8gdGFyCisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnZmlsZTEnXSwgJ3h4eCcpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnZmlsZTInXSwgJ3h4eCcpCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbih0bXBkaXIsICdzdWInKSkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFt0bXBkaXIsICdzdWInLCAnZmlsZTMnXSwgJ3h4eCcpCisKKyAgICAgICAgdG1wZGlyMiA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgICMgZm9yY2Ugc2h1dGlsIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5CisgICAgICAgIG9zLnJtZGlyKHRtcGRpcjIpCisgICAgICAgIHVuaXR0ZXN0LnNraXBVbmxlc3Moc3BsaXRkcml2ZSh0bXBkaXIpWzBdID09IHNwbGl0ZHJpdmUodG1wZGlyMilbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSBhbmQgdGFyZ2V0IHNob3VsZCBiZSBvbiBzYW1lIGRyaXZlIikKKworICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQorCisgICAgICAgICMgd29ya2luZyB3aXRoIHJlbGF0aXZlIHBhdGhzIHRvIGF2b2lkIHRhciB3YXJuaW5ncworICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfbWFrZV90YXJiYWxsKHNwbGl0ZHJpdmUoYmFzZV9uYW1lKVsxXSwgJy4nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKworICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb21wcmVzc2VkIHRhcmJhbGwgd2FzIGNyZWF0ZWQKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyLmd6JworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisKKyAgICAgICAgIyB0cnlpbmcgYW4gdW5jb21wcmVzc2VkIG9uZQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQorICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfbWFrZV90YXJiYWxsKHNwbGl0ZHJpdmUoYmFzZV9uYW1lKVsxXSwgJy4nLCBjb21wcmVzcz1Ob25lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyJworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisKKyAgICBkZWYgX3RhcmluZm8oc2VsZiwgcGF0aCk6CisgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihwYXRoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lcyA9IHRhci5nZXRuYW1lcygpCisgICAgICAgICAgICBuYW1lcy5zb3J0KCkKKyAgICAgICAgICAgIHJldHVybiB0dXBsZShuYW1lcykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICBkZWYgX2NyZWF0ZV9maWxlcyhzZWxmKToKKyAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgdG8gdGFyCisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGRpc3QgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlzdCcpCisgICAgICAgIG9zLm1rZGlyKGRpc3QpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbZGlzdCwgJ2ZpbGUxJ10sICd4eHgnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW2Rpc3QsICdmaWxlMiddLCAneHh4JykKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGRpc3QsICdzdWInKSkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFtkaXN0LCAnc3ViJywgJ2ZpbGUzJ10sICd4eHgnKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oZGlzdCwgJ3N1YjInKSkKKyAgICAgICAgdG1wZGlyMiA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCisgICAgICAgIHJldHVybiB0bXBkaXIsIHRtcGRpcjIsIGJhc2VfbmFtZQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZpbmRfZXhlY3V0YWJsZSgndGFyJykgYW5kIGZpbmRfZXhlY3V0YWJsZSgnZ3ppcCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdOZWVkIHRoZSB0YXIgY29tbWFuZCB0byBydW4nKQorICAgIGRlZiB0ZXN0X3RhcmZpbGVfdnNfdGFyKHNlbGYpOgorICAgICAgICB0bXBkaXIsIHRtcGRpcjIsIGJhc2VfbmFtZSA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKworICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb21wcmVzc2VkIHRhcmJhbGwgd2FzIGNyZWF0ZWQKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyLmd6JworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisKKyAgICAgICAgIyBub3cgY3JlYXRlIGFub3RoZXIgdGFyYmFsbCB1c2luZyBgdGFyYAorICAgICAgICB0YXJiYWxsMiA9IG9zLnBhdGguam9pbih0bXBkaXIsICdhcmNoaXZlMi50YXIuZ3onKQorICAgICAgICB0YXJfY21kID0gWyd0YXInLCAnLWNmJywgJ2FyY2hpdmUyLnRhcicsICdkaXN0J10KKyAgICAgICAgZ3ppcF9jbWQgPSBbJ2d6aXAnLCAnLWY5JywgJ2FyY2hpdmUyLnRhciddCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgczoKKyAgICAgICAgICAgICAgICBzcGF3bih0YXJfY21kKQorICAgICAgICAgICAgICAgIHNwYXduKGd6aXBfY21kKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbDIpKQorICAgICAgICAjIGxldCdzIGNvbXBhcmUgYm90aCB0YXJiYWxscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3RhcmluZm8odGFyYmFsbCksIHNlbGYuX3RhcmluZm8odGFyYmFsbDIpKQorCisgICAgICAgICMgdHJ5aW5nIGFuIHVuY29tcHJlc3NlZCBvbmUKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX21ha2VfdGFyYmFsbChiYXNlX25hbWUsICdkaXN0JywgY29tcHJlc3M9Tm9uZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhcicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisgICAgICAgICMgbm93IGZvciBhIGRyeV9ydW4KKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX21ha2VfdGFyYmFsbChiYXNlX25hbWUsICdkaXN0JywgY29tcHJlc3M9Tm9uZSwgZHJ5X3J1bj1UcnVlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyJworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAiUmVxdWlyZXMgemxpYiIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoWklQX1NVUFBPUlQsICdOZWVkIHppcCBzdXBwb3J0IHRvIHJ1bicpCisgICAgZGVmIHRlc3RfbWFrZV96aXBmaWxlKHNlbGYpOgorICAgICAgICAjIGNyZWF0aW5nIHNvbWV0aGluZyB0byB0YXIKKyAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFt0bXBkaXIsICdmaWxlMSddLCAneHh4JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFt0bXBkaXIsICdmaWxlMiddLCAneHh4JykKKworICAgICAgICB0bXBkaXIyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgIyBmb3JjZSBzaHV0aWwgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgb3Mucm1kaXIodG1wZGlyMikKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKKyAgICAgICAgX21ha2VfemlwZmlsZShiYXNlX25hbWUsIHRtcGRpcikKKworICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb21wcmVzc2VkIHRhcmJhbGwgd2FzIGNyZWF0ZWQKKyAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcuemlwJworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisKKworICAgIGRlZiB0ZXN0X21ha2VfYXJjaGl2ZShzZWxmKToKKyAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2FyY2hpdmUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYWtlX2FyY2hpdmUsIGJhc2VfbmFtZSwgJ3h4eCcpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAiUmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfbWFrZV9hcmNoaXZlX293bmVyX2dyb3VwKHNlbGYpOgorICAgICAgICAjIHRlc3RpbmcgbWFrZV9hcmNoaXZlIHdpdGggb3duZXIgYW5kIGdyb3VwLCB3aXRoIHZhcmlvdXMgY29tYmluYXRpb25zCisgICAgICAgICMgdGhpcyB3b3JrcyBldmVuIGlmIHRoZXJlJ3Mgbm90IGdpZC91aWQgc3VwcG9ydAorICAgICAgICBpZiBVSURfR0lEX1NVUFBPUlQ6CisgICAgICAgICAgICBncm91cCA9IGdycC5nZXRncmdpZCgwKVswXQorICAgICAgICAgICAgb3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGdyb3VwID0gb3duZXIgPSAncm9vdCcKKworICAgICAgICBiYXNlX2Rpciwgcm9vdF9kaXIsIGJhc2VfbmFtZSA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCkgLCAnYXJjaGl2ZScpCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd6aXAnLCByb290X2RpciwgYmFzZV9kaXIsIG93bmVyPW93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA9Z3JvdXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd6aXAnLCByb290X2RpciwgYmFzZV9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd0YXInLCByb290X2RpciwgYmFzZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1vd25lciwgZ3JvdXA9Z3JvdXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd0YXInLCByb290X2RpciwgYmFzZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj0na2poa2poa2pnJywgZ3JvdXA9J29paG9ob2gnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJSZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhVSURfR0lEX1NVUFBPUlQsICJSZXF1aXJlcyBncnAgYW5kIHB3ZCBzdXBwb3J0IikKKyAgICBkZWYgdGVzdF90YXJmaWxlX3Jvb3Rfb3duZXIoc2VsZik6CisgICAgICAgIHRtcGRpciwgdG1wZGlyMiwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIGdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgIG93bmVyID0gcHdkLmdldHB3dWlkKDApWzBdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFyY2hpdmVfbmFtZSA9IF9tYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhhcmNoaXZlX25hbWUpKQorCisgICAgICAgICMgbm93IGNoZWNrcyB0aGUgcmlnaHRzCisgICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci5naWQsIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X21ha2VfYXJjaGl2ZV9jd2Qoc2VsZik6CisgICAgICAgIGN1cnJlbnRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgZGVmIF9icmVha3MoKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKKworICAgICAgICByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCgneHh4JywgX2JyZWFrcywgW10sICd4eHggZmlsZScpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtYWtlX2FyY2hpdmUoJ3h4eCcsICd4eHgnLCByb290X2Rpcj1zZWxmLm1rZHRlbXAoKSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRjd2QoKSwgY3VycmVudF9kaXIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB1bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0KCd4eHgnKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQoc2VsZik6CisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCwgJ3h4eCcsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsICd4eHgnLCBsYW1iZGE6IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsICd4eHgnLCBsYW1iZGE6IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsoMSwgMiksICgxLCAyLCAzKV0pCisKKyAgICAgICAgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQoJ3h4eCcsIGxhbWJkYTogeCwgWygxLCAyKV0sICd4eHggZmlsZScpCisgICAgICAgIGZvcm1hdHMgPSBbbmFtZSBmb3IgbmFtZSwgcGFyYW1zIGluIGdldF9hcmNoaXZlX2Zvcm1hdHMoKV0KKyAgICAgICAgc2VsZi5hc3NlcnRJbigneHh4JywgZm9ybWF0cykKKworICAgICAgICB1bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0KCd4eHgnKQorICAgICAgICBmb3JtYXRzID0gW25hbWUgZm9yIG5hbWUsIHBhcmFtcyBpbiBnZXRfYXJjaGl2ZV9mb3JtYXRzKCldCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3h4eCcsIGZvcm1hdHMpCisKKworY2xhc3MgVGVzdE1vdmUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBmaWxlbmFtZSA9ICJmb28iCisgICAgICAgIHNlbGYuc3JjX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBzZWxmLmRzdF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi5zcmNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnNyY19kaXIsIGZpbGVuYW1lKQorICAgICAgICBzZWxmLmRzdF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuZHN0X2RpciwgZmlsZW5hbWUpCisgICAgICAgICMgVHJ5IHRvIGNyZWF0ZSBhIGRpciBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGhvcGluZyB0aGF0IGl0IGlzCisgICAgICAgICMgbm90IGxvY2F0ZWQgb24gdGhlIHNhbWUgZmlsZXN5c3RlbSBhcyB0aGUgc3lzdGVtIHRtcCBkaXIuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZGlyX290aGVyX2ZzID0gdGVtcGZpbGUubWtkdGVtcCgKKyAgICAgICAgICAgICAgICBkaXI9b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKKyAgICAgICAgICAgIHNlbGYuZmlsZV9vdGhlcl9mcyA9IG9zLnBhdGguam9pbihzZWxmLmRpcl9vdGhlcl9mcywKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBzZWxmLmRpcl9vdGhlcl9mcyA9IE5vbmUKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuc3JjX2ZpbGUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJzcGFtIikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIGQgaW4gKHNlbGYuc3JjX2Rpciwgc2VsZi5kc3RfZGlyLCBzZWxmLmRpcl9vdGhlcl9mcyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgZDoKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBfY2hlY2tfbW92ZV9maWxlKHNlbGYsIHNyYywgZHN0LCByZWFsX2RzdCk6CisgICAgICAgIHdpdGggb3BlbihzcmMsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBjb250ZW50cyA9IGYucmVhZCgpCisgICAgICAgIHNodXRpbC5tb3ZlKHNyYywgZHN0KQorICAgICAgICB3aXRoIG9wZW4ocmVhbF9kc3QsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCBmLnJlYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzcmMpKQorCisgICAgZGVmIF9jaGVja19tb3ZlX2RpcihzZWxmLCBzcmMsIGRzdCwgcmVhbF9kc3QpOgorICAgICAgICBjb250ZW50cyA9IHNvcnRlZChvcy5saXN0ZGlyKHNyYykpCisgICAgICAgIHNodXRpbC5tb3ZlKHNyYywgZHN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCBzb3J0ZWQob3MubGlzdGRpcihyZWFsX2RzdCkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNyYykpCisKKyAgICBkZWYgdGVzdF9tb3ZlX2ZpbGUoc2VsZik6CisgICAgICAgICMgTW92ZSBhIGZpbGUgdG8gYW5vdGhlciBsb2NhdGlvbiBvbiB0aGUgc2FtZSBmaWxlc3lzdGVtLgorICAgICAgICBzZWxmLl9jaGVja19tb3ZlX2ZpbGUoc2VsZi5zcmNfZmlsZSwgc2VsZi5kc3RfZmlsZSwgc2VsZi5kc3RfZmlsZSkKKworICAgIGRlZiB0ZXN0X21vdmVfZmlsZV90b19kaXIoc2VsZik6CisgICAgICAgICMgTW92ZSBhIGZpbGUgaW5zaWRlIGFuIGV4aXN0aW5nIGRpciBvbiB0aGUgc2FtZSBmaWxlc3lzdGVtLgorICAgICAgICBzZWxmLl9jaGVja19tb3ZlX2ZpbGUoc2VsZi5zcmNfZmlsZSwgc2VsZi5kc3RfZGlyLCBzZWxmLmRzdF9maWxlKQorCisgICAgZGVmIHRlc3RfbW92ZV9maWxlX290aGVyX2ZzKHNlbGYpOgorICAgICAgICAjIE1vdmUgYSBmaWxlIHRvIGFuIGV4aXN0aW5nIGRpciBvbiBhbm90aGVyIGZpbGVzeXN0ZW0uCisgICAgICAgIGlmIG5vdCBzZWxmLmRpcl9vdGhlcl9mczoKKyAgICAgICAgICAgICMgc2tpcAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2NoZWNrX21vdmVfZmlsZShzZWxmLnNyY19maWxlLCBzZWxmLmZpbGVfb3RoZXJfZnMsCisgICAgICAgICAgICBzZWxmLmZpbGVfb3RoZXJfZnMpCisKKyAgICBkZWYgdGVzdF9tb3ZlX2ZpbGVfdG9fZGlyX290aGVyX2ZzKHNlbGYpOgorICAgICAgICAjIE1vdmUgYSBmaWxlIHRvIGFub3RoZXIgbG9jYXRpb24gb24gYW5vdGhlciBmaWxlc3lzdGVtLgorICAgICAgICBpZiBub3Qgc2VsZi5kaXJfb3RoZXJfZnM6CisgICAgICAgICAgICAjIHNraXAKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9jaGVja19tb3ZlX2ZpbGUoc2VsZi5zcmNfZmlsZSwgc2VsZi5kaXJfb3RoZXJfZnMsCisgICAgICAgICAgICBzZWxmLmZpbGVfb3RoZXJfZnMpCisKKyAgICBkZWYgdGVzdF9tb3ZlX2RpcihzZWxmKToKKyAgICAgICAgIyBNb3ZlIGEgZGlyIHRvIGFub3RoZXIgbG9jYXRpb24gb24gdGhlIHNhbWUgZmlsZXN5c3RlbS4KKyAgICAgICAgZHN0X2RpciA9IHRlbXBmaWxlLm1rdGVtcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX21vdmVfZGlyKHNlbGYuc3JjX2RpciwgZHN0X2RpciwgZHN0X2RpcikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRzdF9kaXIpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfbW92ZV9kaXJfb3RoZXJfZnMoc2VsZik6CisgICAgICAgICMgTW92ZSBhIGRpciB0byBhbm90aGVyIGxvY2F0aW9uIG9uIGFub3RoZXIgZmlsZXN5c3RlbS4KKyAgICAgICAgaWYgbm90IHNlbGYuZGlyX290aGVyX2ZzOgorICAgICAgICAgICAgIyBza2lwCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZHN0X2RpciA9IHRlbXBmaWxlLm1rdGVtcChkaXI9c2VsZi5kaXJfb3RoZXJfZnMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX21vdmVfZGlyKHNlbGYuc3JjX2RpciwgZHN0X2RpciwgZHN0X2RpcikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRzdF9kaXIpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfbW92ZV9kaXJfdG9fZGlyKHNlbGYpOgorICAgICAgICAjIE1vdmUgYSBkaXIgaW5zaWRlIGFuIGV4aXN0aW5nIGRpciBvbiB0aGUgc2FtZSBmaWxlc3lzdGVtLgorICAgICAgICBzZWxmLl9jaGVja19tb3ZlX2RpcihzZWxmLnNyY19kaXIsIHNlbGYuZHN0X2RpciwKKyAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLmRzdF9kaXIsIG9zLnBhdGguYmFzZW5hbWUoc2VsZi5zcmNfZGlyKSkpCisKKyAgICBkZWYgdGVzdF9tb3ZlX2Rpcl90b19kaXJfb3RoZXJfZnMoc2VsZik6CisgICAgICAgICMgTW92ZSBhIGRpciBpbnNpZGUgYW4gZXhpc3RpbmcgZGlyIG9uIGFub3RoZXIgZmlsZXN5c3RlbS4KKyAgICAgICAgaWYgbm90IHNlbGYuZGlyX290aGVyX2ZzOgorICAgICAgICAgICAgIyBza2lwCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fY2hlY2tfbW92ZV9kaXIoc2VsZi5zcmNfZGlyLCBzZWxmLmRpcl9vdGhlcl9mcywKKyAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLmRpcl9vdGhlcl9mcywgb3MucGF0aC5iYXNlbmFtZShzZWxmLnNyY19kaXIpKSkKKworICAgIGRlZiB0ZXN0X2V4aXN0aW5nX2ZpbGVfaW5zaWRlX2Rlc3RfZGlyKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgaW5zaWRlIHRoZSBkZXN0aW5hdGlvbiBkaXIgYWxyZWFkeSBleGlzdHMuCisgICAgICAgIHdpdGggb3BlbihzZWxmLmRzdF9maWxlLCAid2IiKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLkVycm9yLCBzaHV0aWwubW92ZSwgc2VsZi5zcmNfZmlsZSwgc2VsZi5kc3RfZGlyKQorCisgICAgZGVmIHRlc3RfZG9udF9tb3ZlX2Rpcl9pbl9pdHNlbGYoc2VsZik6CisgICAgICAgICMgTW92aW5nIGEgZGlyIGluc2lkZSBpdHNlbGYgcmFpc2VzIGFuIEVycm9yLgorICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5zcmNfZGlyLCAiYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLkVycm9yLCBzaHV0aWwubW92ZSwgc2VsZi5zcmNfZGlyLCBkc3QpCisKKyAgICBkZWYgdGVzdF9kZXN0aW5zcmNfZmFsc2VfbmVnYXRpdmUoc2VsZik6CisgICAgICAgIG9zLm1rZGlyKFRFU1RGTikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIHNyYywgZHN0IGluIFsoJ3NyY2RpcicsICdzcmNkaXIvZGVzdCcpXToKKyAgICAgICAgICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCBzcmMpCisgICAgICAgICAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKFRFU1RGTiwgZHN0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaHV0aWwuX2Rlc3RpbnNyYyhzcmMsIGRzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nX2Rlc3RpbnNyYygpIHdyb25nbHkgY29uY2x1ZGVkIHRoYXQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHN0ICglcykgaXMgbm90IGluIHNyYyAoJXMpJyAlIChkc3QsIHNyYykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTiwgaWdub3JlX2Vycm9ycz1UcnVlKQorCisgICAgZGVmIHRlc3RfZGVzdGluc3JjX2ZhbHNlX3Bvc2l0aXZlKHNlbGYpOgorICAgICAgICBvcy5ta2RpcihURVNURk4pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBzcmMsIGRzdCBpbiBbKCdzcmNkaXInLCAnc3JjL2Rlc3QnKSwgKCdzcmNkaXInLCAnc3JjZGlyLm5ldycpXToKKyAgICAgICAgICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCBzcmMpCisgICAgICAgICAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKFRFU1RGTiwgZHN0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2h1dGlsLl9kZXN0aW5zcmMoc3JjLCBkc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nX2Rlc3RpbnNyYygpIHdyb25nbHkgY29uY2x1ZGVkIHRoYXQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkc3QgKCVzKSBpcyBpbiBzcmMgKCVzKScgJSAoZHN0LCBzcmMpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4sIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKworCitjbGFzcyBUZXN0Q29weUZpbGUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgX2RlbGV0ZSA9IEZhbHNlCisKKyAgICBjbGFzcyBGYXV4KG9iamVjdCk6CisgICAgICAgIF9lbnRlcmVkID0gRmFsc2UKKyAgICAgICAgX2V4aXRlZF93aXRoID0gTm9uZQorICAgICAgICBfcmFpc2VkID0gRmFsc2UKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhaXNlX2luX2V4aXQ9RmFsc2UsIHN1cHByZXNzX2F0X2V4aXQ9VHJ1ZSk6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9pbl9leGl0ID0gcmFpc2VfaW5fZXhpdAorICAgICAgICAgICAgc2VsZi5fc3VwcHJlc3NfYXRfZXhpdCA9IHN1cHByZXNzX2F0X2V4aXQKKyAgICAgICAgZGVmIHJlYWQoc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICAgICBzZWxmLl9lbnRlcmVkID0gVHJ1ZQorICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190Yik6CisgICAgICAgICAgICBzZWxmLl9leGl0ZWRfd2l0aCA9IGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIKKyAgICAgICAgICAgIGlmIHNlbGYuX3JhaXNlX2luX2V4aXQ6CisgICAgICAgICAgICAgICAgc2VsZi5fcmFpc2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIkNhbm5vdCBjbG9zZSIpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3VwcHJlc3NfYXRfZXhpdAorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9kZWxldGU6CisgICAgICAgICAgICBkZWwgc2h1dGlsLm9wZW4KKworICAgIGRlZiBfc2V0X3NodXRpbF9vcGVuKHNlbGYsIGZ1bmMpOgorICAgICAgICBzaHV0aWwub3BlbiA9IGZ1bmMKKyAgICAgICAgc2VsZi5fZGVsZXRlID0gVHJ1ZQorCisgICAgZGVmIHRlc3Rfd19zb3VyY2Vfb3Blbl9mYWlscyhzZWxmKToKKyAgICAgICAgZGVmIF9vcGVuKGZpbGVuYW1lLCBtb2RlPSdyJyk6CisgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSAnc3JjZmlsZSc6CisgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignQ2Fubm90IG9wZW4gInNyY2ZpbGUiJykKKyAgICAgICAgICAgIGFzc2VydCAwICAjIHNob3VsZG4ndCByZWFjaCBoZXJlLgorCisgICAgICAgIHNlbGYuX3NldF9zaHV0aWxfb3Blbihfb3BlbikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzaHV0aWwuY29weWZpbGUsICdzcmNmaWxlJywgJ2Rlc3RmaWxlJykKKworICAgIGRlZiB0ZXN0X3dfZGVzdF9vcGVuX2ZhaWxzKHNlbGYpOgorCisgICAgICAgIHNyY2ZpbGUgPSBzZWxmLkZhdXgoKQorCisgICAgICAgIGRlZiBfb3BlbihmaWxlbmFtZSwgbW9kZT0ncicpOgorICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ3NyY2ZpbGUnOgorICAgICAgICAgICAgICAgIHJldHVybiBzcmNmaWxlCisgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSAnZGVzdGZpbGUnOgorICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ0Nhbm5vdCBvcGVuICJkZXN0ZmlsZSInKQorICAgICAgICAgICAgYXNzZXJ0IDAgICMgc2hvdWxkbid0IHJlYWNoIGhlcmUuCisKKyAgICAgICAgc2VsZi5fc2V0X3NodXRpbF9vcGVuKF9vcGVuKQorCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZSgnc3JjZmlsZScsICdkZXN0ZmlsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9lbnRlcmVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMF0gaXMgSU9FcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcmNmaWxlLl9leGl0ZWRfd2l0aFsxXS5hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnQ2Fubm90IG9wZW4gImRlc3RmaWxlIicsKSkKKworICAgIGRlZiB0ZXN0X3dfZGVzdF9jbG9zZV9mYWlscyhzZWxmKToKKworICAgICAgICBzcmNmaWxlID0gc2VsZi5GYXV4KCkKKyAgICAgICAgZGVzdGZpbGUgPSBzZWxmLkZhdXgoVHJ1ZSkKKworICAgICAgICBkZWYgX29wZW4oZmlsZW5hbWUsIG1vZGU9J3InKToKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdzcmNmaWxlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3JjZmlsZQorICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ2Rlc3RmaWxlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVzdGZpbGUKKyAgICAgICAgICAgIGFzc2VydCAwICAjIHNob3VsZG4ndCByZWFjaCBoZXJlLgorCisgICAgICAgIHNlbGYuX3NldF9zaHV0aWxfb3Blbihfb3BlbikKKworICAgICAgICBzaHV0aWwuY29weWZpbGUoJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZW50ZXJlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlc3RmaWxlLl9lbnRlcmVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGVzdGZpbGUuX3JhaXNlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIElPRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMV0uYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ0Nhbm5vdCBjbG9zZScsKSkKKworICAgIGRlZiB0ZXN0X3dfc291cmNlX2Nsb3NlX2ZhaWxzKHNlbGYpOgorCisgICAgICAgIHNyY2ZpbGUgPSBzZWxmLkZhdXgoVHJ1ZSkKKyAgICAgICAgZGVzdGZpbGUgPSBzZWxmLkZhdXgoKQorCisgICAgICAgIGRlZiBfb3BlbihmaWxlbmFtZSwgbW9kZT0ncicpOgorICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ3NyY2ZpbGUnOgorICAgICAgICAgICAgICAgIHJldHVybiBzcmNmaWxlCisgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSAnZGVzdGZpbGUnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZXN0ZmlsZQorICAgICAgICAgICAgYXNzZXJ0IDAgICMgc2hvdWxkbid0IHJlYWNoIGhlcmUuCisKKyAgICAgICAgc2VsZi5fc2V0X3NodXRpbF9vcGVuKF9vcGVuKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZSwgJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZW50ZXJlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlc3RmaWxlLl9lbnRlcmVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGRlc3RmaWxlLl9yYWlzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9leGl0ZWRfd2l0aFswXSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fcmFpc2VkKQorCisgICAgZGVmIHRlc3RfbW92ZV9kaXJfY2FzZWluc2Vuc2l0aXZlKHNlbGYpOgorICAgICAgICAjIFJlbmFtZXMgYSBmb2xkZXIgdG8gdGhlIHNhbWUgbmFtZQorICAgICAgICAjIGJ1dCBhIGRpZmZlcmVudCBjYXNlLgorCisgICAgICAgIHNlbGYuc3JjX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBkc3RfZGlyID0gb3MucGF0aC5qb2luKAorICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShzZWxmLnNyY19kaXIpLAorICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoc2VsZi5zcmNfZGlyKS51cHBlcigpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYuc3JjX2RpciwgZHN0X2RpcikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzaHV0aWwubW92ZShzZWxmLnNyY19kaXIsIGRzdF9kaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihkc3RfZGlyKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRzdF9kaXIpOgorICAgICAgICAgICAgICAgIG9zLnJtZGlyKGRzdF9kaXIpCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0U2h1dGlsLCBUZXN0TW92ZSwgVGVzdENvcHlGaWxlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zaWduYWwucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zaWduYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4M2Y2NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NpZ25hbC5weQpAQCAtMCwwICsxLDUwMSBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorZnJvbSBjb250ZXh0bGliIGltcG9ydCBjbG9zaW5nCitpbXBvcnQgZ2MKK2ltcG9ydCBwaWNrbGUKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgc3lzLCBvcywgdGltZSwgZXJybm8KKworaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyJywgJ3Jpc2NvcycpOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJDYW4ndCB0ZXN0IHNpZ25hbCBvbiAlcyIgJSBzeXMucGxhdGZvcm0pCisKKworY2xhc3MgSGFuZGxlckJDYWxsZWQoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworZGVmIGV4aXRfc3VicHJvY2VzcygpOgorICAgICIiIlVzZSBvcy5fZXhpdCgwKSB0byBleGl0IHRoZSBjdXJyZW50IHN1YnByb2Nlc3MuCisKKyAgICBPdGhlcndpc2UsIHRoZSB0ZXN0IGNhdGNoZXMgdGhlIFN5c3RlbUV4aXQgYW5kIGNvbnRpbnVlcyBleGVjdXRpbmcKKyAgICBpbiBwYXJhbGxlbCB3aXRoIHRoZSBvcmlnaW5hbCB0ZXN0LCBzbyB5b3Ugd2luZCB1cCB3aXRoIGFuCisgICAgZXhwb25lbnRpYWwgbnVtYmVyIG9mIHRlc3RzIHJ1bm5pbmcgY29uY3VycmVudGx5LgorICAgICIiIgorICAgIG9zLl9leGl0KDApCisKKworZGVmIGlnbm9yaW5nX2VpbnRyKF9fZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBfX2Z1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUlOVFI6CisgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gTm9uZQorCisKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJOb3QgdmFsaWQgb24gV2luZG93cyIpCitjbGFzcyBJbnRlclByb2Nlc3NTaWduYWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgTUFYX0RVUkFUSU9OID0gMjAgICAjIEVudGlyZSB0ZXN0IHNob3VsZCBsYXN0IGF0IG1vc3QgMjAgc2VjLgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnVzaW5nX2djID0gZ2MuaXNlbmFibGVkKCkKKyAgICAgICAgZ2MuZGlzYWJsZSgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYudXNpbmdfZ2M6CisgICAgICAgICAgICBnYy5lbmFibGUoKQorCisgICAgZGVmIGZvcm1hdF9mcmFtZShzZWxmLCBmcmFtZSwgbGltaXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfc3RhY2soZnJhbWUsIGxpbWl0PWxpbWl0KSkKKworICAgIGRlZiBoYW5kbGVyQShzZWxmLCBzaWdudW0sIGZyYW1lKToKKyAgICAgICAgc2VsZi5hX2NhbGxlZCA9IFRydWUKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiaGFuZGxlckEgaW52b2tlZCBmcm9tIHNpZ25hbCAlcyBhdDpcbiVzIiAlICgKKyAgICAgICAgICAgICAgICBzaWdudW0sIHNlbGYuZm9ybWF0X2ZyYW1lKGZyYW1lLCBsaW1pdD0xKSkKKworICAgIGRlZiBoYW5kbGVyQihzZWxmLCBzaWdudW0sIGZyYW1lKToKKyAgICAgICAgc2VsZi5iX2NhbGxlZCA9IFRydWUKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiaGFuZGxlckIgaW52b2tlZCBmcm9tIHNpZ25hbCAlcyBhdDpcbiVzIiAlICgKKyAgICAgICAgICAgICAgICBzaWdudW0sIHNlbGYuZm9ybWF0X2ZyYW1lKGZyYW1lLCBsaW1pdD0xKSkKKyAgICAgICAgcmFpc2UgSGFuZGxlckJDYWxsZWQoc2lnbnVtLCBzZWxmLmZvcm1hdF9mcmFtZShmcmFtZSkpCisKKyAgICBkZWYgd2FpdChzZWxmLCBjaGlsZCk6CisgICAgICAgICIiIldhaXQgZm9yIGNoaWxkIHRvIGZpbmlzaCwgaWdub3JpbmcgRUlOVFIuIiIiCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY2hpbGQud2FpdCgpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUlOVFI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgcnVuX3Rlc3Qoc2VsZik6CisgICAgICAgICMgSW5zdGFsbCBoYW5kbGVycy4gVGhpcyBmdW5jdGlvbiBydW5zIGluIGEgc3ViLXByb2Nlc3MsIHNvIHdlCisgICAgICAgICMgZG9uJ3Qgd29ycnkgYWJvdXQgcmUtc2V0dGluZyB0aGUgZGVmYXVsdCBoYW5kbGVycy4KKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSFVQLCBzZWxmLmhhbmRsZXJBKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdVU1IxLCBzZWxmLmhhbmRsZXJCKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdVU1IyLCBzaWduYWwuU0lHX0lHTikKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgc2lnbmFsLmRlZmF1bHRfaW50X2hhbmRsZXIpCisKKyAgICAgICAgIyBWYXJpYWJsZXMgdGhlIHNpZ25hbHMgd2lsbCBtb2RpZnk6CisgICAgICAgIHNlbGYuYV9jYWxsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmJfY2FsbGVkID0gRmFsc2UKKworICAgICAgICAjIExldCB0aGUgc3ViLXByb2Nlc3NlcyBrbm93IHdobyB0byBzZW5kIHNpZ25hbHMgdG8uCisgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgInRlc3QgcnVubmVyJ3MgcGlkIGlzIiwgcGlkCisKKyAgICAgICAgY2hpbGQgPSBpZ25vcmluZ19laW50cihzdWJwcm9jZXNzLlBvcGVuLCBbJ2tpbGwnLCAnLUhVUCcsIHN0cihwaWQpXSkKKyAgICAgICAgaWYgY2hpbGQ6CisgICAgICAgICAgICBzZWxmLndhaXQoY2hpbGQpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5hX2NhbGxlZDoKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpICAjIEdpdmUgdGhlIHNpZ25hbCB0aW1lIHRvIGJlIGRlbGl2ZXJlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuYV9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5iX2NhbGxlZCkKKyAgICAgICAgc2VsZi5hX2NhbGxlZCA9IEZhbHNlCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHNpZ25hbCBpc24ndCBkZWxpdmVyZWQgd2hpbGUgdGhlIHByZXZpb3VzCisgICAgICAgICMgUG9wZW4gb2JqZWN0IGlzIGJlaW5nIGRlc3Ryb3llZCwgYmVjYXVzZSBfX2RlbF9fIHN3YWxsb3dzCisgICAgICAgICMgZXhjZXB0aW9ucy4KKyAgICAgICAgZGVsIGNoaWxkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNoaWxkID0gc3VicHJvY2Vzcy5Qb3BlbihbJ2tpbGwnLCAnLVVTUjEnLCBzdHIocGlkKV0pCisgICAgICAgICAgICAjIFRoaXMgd2FpdCBzaG91bGQgYmUgaW50ZXJydXB0ZWQgYnkgdGhlIHNpZ25hbCdzIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIHNlbGYud2FpdChjaGlsZCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkgICMgR2l2ZSB0aGUgc2lnbmFsIHRpbWUgdG8gYmUgZGVsaXZlcmVkLgorICAgICAgICAgICAgc2VsZi5mYWlsKCdIYW5kbGVyQkNhbGxlZCBleGNlcHRpb24gbm90IHJhaXNlZCcpCisgICAgICAgIGV4Y2VwdCBIYW5kbGVyQkNhbGxlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmJfY2FsbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmFfY2FsbGVkKQorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIkhhbmRsZXJCQ2FsbGVkIGV4Y2VwdGlvbiBjYXVnaHQiCisKKyAgICAgICAgY2hpbGQgPSBpZ25vcmluZ19laW50cihzdWJwcm9jZXNzLlBvcGVuLCBbJ2tpbGwnLCAnLVVTUjInLCBzdHIocGlkKV0pCisgICAgICAgIGlmIGNoaWxkOgorICAgICAgICAgICAgc2VsZi53YWl0KGNoaWxkKSAgIyBOb3RoaW5nIHNob3VsZCBoYXBwZW4uCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICAjIFRoZSByYWNlIGNvbmRpdGlvbiBpbiBwYXVzZSBkb2Vzbid0IG1hdHRlciBpbiB0aGlzIGNhc2UsCisgICAgICAgICAgICAjIHNpbmNlIGFsYXJtIGlzIGdvaW5nIHRvIHJhaXNlIGEgS2V5Ym9hcmRFeGNlcHRpb24sIHdoaWNoCisgICAgICAgICAgICAjIHdpbGwgc2tpcCB0aGUgY2FsbC4KKyAgICAgICAgICAgIHNpZ25hbC5wYXVzZSgpCisgICAgICAgICAgICAjIEJ1dCBpZiBhbm90aGVyIHNpZ25hbCBhcnJpdmVzIGJlZm9yZSB0aGUgYWxhcm0sIHBhdXNlCisgICAgICAgICAgICAjIG1heSByZXR1cm4gZWFybHkuCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJLZXlib2FyZEludGVycnVwdCAodGhlIGFsYXJtKCkgd2VudCBvZmYpIgorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlNvbWUgb3RoZXIgZXhjZXB0aW9uIHdva2UgdXMgZnJvbSBwYXVzZTogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2suZm9ybWF0X2V4YygpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJwYXVzZSByZXR1cm5lZCBvZiBpdHMgb3duIGFjY29yZCwgYW5kIHRoZSBzaWduYWwiCisgICAgICAgICAgICAgICAgICAgICAgIiBkaWRuJ3QgYXJyaXZlIGFmdGVyIGFub3RoZXIgc2Vjb25kLiIpCisKKyAgICAjIElzc3VlIDM4NjQuIFVua25vd24gaWYgdGhpcyBhZmZlY3RzIGVhcmxpZXIgdmVyc2lvbnMgb2YgZnJlZWJzZCBhbHNvLgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtPT0nZnJlZWJzZDYnLAorICAgICAgICAnaW50ZXIgcHJvY2VzcyBzaWduYWxzIG5vdCByZWxpYWJsZSAoZG8gbm90IG1peCB3ZWxsIHdpdGggdGhyZWFkaW5nKSAnCisgICAgICAgICdvbiBmcmVlYnNkNicpCisgICAgZGVmIHRlc3RfbWFpbihzZWxmKToKKyAgICAgICAgIyBUaGlzIGZ1bmN0aW9uIHNwYXducyBhIGNoaWxkIHByb2Nlc3MgdG8gaW5zdWxhdGUgdGhlIG1haW4KKyAgICAgICAgIyB0ZXN0LXJ1bm5pbmcgcHJvY2VzcyBmcm9tIGFsbCB0aGUgc2lnbmFscy4gSXQgdGhlbgorICAgICAgICAjIGNvbW11bmljYXRlcyB3aXRoIHRoYXQgY2hpbGQgcHJvY2VzcyBvdmVyIGEgcGlwZSBhbmQKKyAgICAgICAgIyByZS1yYWlzZXMgaW5mb3JtYXRpb24gYWJvdXQgYW55IGV4Y2VwdGlvbnMgdGhlIGNoaWxkCisgICAgICAgICMgcmFpc2VzLiBUaGUgcmVhbCB3b3JrIGhhcHBlbnMgaW4gc2VsZi5ydW5fdGVzdCgpLgorICAgICAgICBvc19kb25lX3IsIG9zX2RvbmVfdyA9IG9zLnBpcGUoKQorICAgICAgICB3aXRoIGNsb3Npbmcob3MuZmRvcGVuKG9zX2RvbmVfcikpIGFzIGRvbmVfciwgXAorICAgICAgICAgICAgIGNsb3Npbmcob3MuZmRvcGVuKG9zX2RvbmVfdywgJ3cnKSkgYXMgZG9uZV93OgorICAgICAgICAgICAgY2hpbGQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgIGlmIGNoaWxkID09IDA6CisgICAgICAgICAgICAgICAgIyBJbiB0aGUgY2hpbGQgcHJvY2VzczsgcnVuIHRoZSB0ZXN0IGFuZCByZXBvcnQgcmVzdWx0cworICAgICAgICAgICAgICAgICMgdGhyb3VnaCB0aGUgcGlwZS4KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRvbmVfci5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICMgSGF2ZSB0byBjbG9zZSBkb25lX3cgYWdhaW4gaGVyZSBiZWNhdXNlCisgICAgICAgICAgICAgICAgICAgICMgZXhpdF9zdWJwcm9jZXNzKCkgd2lsbCBza2lwIHRoZSBlbmNsb3Npbmcgd2l0aCBibG9jay4KKyAgICAgICAgICAgICAgICAgICAgd2l0aCBjbG9zaW5nKGRvbmVfdyk6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ydW5fdGVzdCgpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmR1bXAodHJhY2ViYWNrLmZvcm1hdF9leGMoKSwgZG9uZV93KQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcChOb25lLCBkb25lX3cpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBwcmludCAnVWggb2gsIHJhaXNlZCBmcm9tIHBpY2tsZS4nCisgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGV4aXRfc3VicHJvY2VzcygpCisKKyAgICAgICAgICAgIGRvbmVfdy5jbG9zZSgpCisgICAgICAgICAgICAjIEJsb2NrIGZvciB1cCB0byBNQVhfRFVSQVRJT04gc2Vjb25kcyBmb3IgdGhlIHRlc3QgdG8gZmluaXNoLgorICAgICAgICAgICAgciwgdywgeCA9IHNlbGVjdC5zZWxlY3QoW2RvbmVfcl0sIFtdLCBbXSwgc2VsZi5NQVhfRFVSQVRJT04pCisgICAgICAgICAgICBpZiBkb25lX3IgaW4gcjoKKyAgICAgICAgICAgICAgICB0YiA9IHBpY2tsZS5sb2FkKGRvbmVfcikKKyAgICAgICAgICAgICAgICBpZiB0YjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKHRiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcy5raWxsKGNoaWxkLCBzaWduYWwuU0lHS0lMTCkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1Rlc3QgZGVhZGxvY2tlZCBhZnRlciAlZCBzZWNvbmRzLicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLk1BWF9EVVJBVElPTikKKworCitAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiTm90IHZhbGlkIG9uIFdpbmRvd3MiKQorY2xhc3MgQmFzaWNTaWduYWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRyaXZpYWxfc2lnbmFsX2hhbmRsZXIoc2VsZiwgKmFyZ3MpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9vdXRfb2ZfcmFuZ2Vfc2lnbmFsX251bWJlcl9yYWlzZXNfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNpZ25hbC5nZXRzaWduYWwsIDQyNDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2lnbmFsLnNpZ25hbCwgNDI0MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50cml2aWFsX3NpZ25hbF9oYW5kbGVyKQorCisgICAgZGVmIHRlc3Rfc2V0dGluZ19zaWduYWxfaGFuZGxlcl90b19ub25lX3JhaXNlc19lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzaWduYWwuc2lnbmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwuU0lHVVNSMSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2dldHNpZ25hbChzZWxmKToKKyAgICAgICAgaHVwID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSFVQLCBzZWxmLnRyaXZpYWxfc2lnbmFsX2hhbmRsZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSFVQKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaXZpYWxfc2lnbmFsX2hhbmRsZXIpCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0hVUCwgaHVwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0hVUCksIGh1cCkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3Mgc3BlY2lmaWMiKQorY2xhc3MgV2luZG93c1NpZ25hbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pc3N1ZTkzMjQoc2VsZik6CisgICAgICAgICMgVXBkYXRlZCBmb3IgaXNzdWUgIzEwMDAzLCBhZGRpbmcgU0lHQlJFQUsKKyAgICAgICAgaGFuZGxlciA9IGxhbWJkYSB4LCB5OiBOb25lCisgICAgICAgIGZvciBzaWcgaW4gKHNpZ25hbC5TSUdBQlJULCBzaWduYWwuU0lHQlJFQUssIHNpZ25hbC5TSUdGUEUsCisgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5TSUdJTEwsIHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdTRUdWLAorICAgICAgICAgICAgICAgICAgICBzaWduYWwuU0lHVEVSTSk6CisgICAgICAgICAgICAjIFNldCBhbmQgdGhlbiByZXNldCBhIGhhbmRsZXIgZm9yIHNpZ25hbHMgdGhhdCB3b3JrIG9uIHdpbmRvd3MKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnLCBzaWduYWwuc2lnbmFsKHNpZywgaGFuZGxlcikpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoLTEsIGhhbmRsZXIpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoNywgaGFuZGxlcikKKworCitjbGFzcyBXYWtldXBGRFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfZmQoc2VsZik6CisgICAgICAgIGZkID0gdGVzdF9zdXBwb3J0Lm1ha2VfYmFkX2ZkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2lnbmFsLnNldF93YWtldXBfZmQsIGZkKQorCisKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJOb3QgdmFsaWQgb24gV2luZG93cyIpCitjbGFzcyBXYWtldXBTaWduYWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgVElNRU9VVF9GVUxMID0gMTAKKyAgICBUSU1FT1VUX0hBTEYgPSA1CisKKyAgICBkZWYgdGVzdF93YWtldXBfZmRfZWFybHkoc2VsZik6CisgICAgICAgIGltcG9ydCBzZWxlY3QKKworICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgYmVmb3JlX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAjIFdlIGF0dGVtcHQgdG8gZ2V0IGEgc2lnbmFsIGR1cmluZyB0aGUgc2xlZXAsCisgICAgICAgICMgYmVmb3JlIHNlbGVjdCBpcyBjYWxsZWQKKyAgICAgICAgdGltZS5zbGVlcChzZWxmLlRJTUVPVVRfRlVMTCkKKyAgICAgICAgbWlkX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWlkX3RpbWUgLSBiZWZvcmVfdGltZSA8IHNlbGYuVElNRU9VVF9IQUxGKQorICAgICAgICBzZWxlY3Quc2VsZWN0KFtzZWxmLnJlYWRdLCBbXSwgW10sIHNlbGYuVElNRU9VVF9GVUxMKQorICAgICAgICBhZnRlcl90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFmdGVyX3RpbWUgLSBtaWRfdGltZSA8IHNlbGYuVElNRU9VVF9IQUxGKQorCisgICAgZGVmIHRlc3Rfd2FrZXVwX2ZkX2R1cmluZyhzZWxmKToKKyAgICAgICAgaW1wb3J0IHNlbGVjdAorCisgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICBiZWZvcmVfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICMgV2UgYXR0ZW1wdCB0byBnZXQgYSBzaWduYWwgZHVyaW5nIHRoZSBzZWxlY3QgY2FsbAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxlY3QuZXJyb3IsIHNlbGVjdC5zZWxlY3QsCisgICAgICAgICAgICBbc2VsZi5yZWFkXSwgW10sIFtdLCBzZWxmLlRJTUVPVVRfRlVMTCkKKyAgICAgICAgYWZ0ZXJfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhZnRlcl90aW1lIC0gYmVmb3JlX3RpbWUgPCBzZWxmLlRJTUVPVVRfSEFMRikKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaW1wb3J0IGZjbnRsCisKKyAgICAgICAgc2VsZi5hbHJtID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgbGFtYmRhIHgseTpOb25lKQorICAgICAgICBzZWxmLnJlYWQsIHNlbGYud3JpdGUgPSBvcy5waXBlKCkKKyAgICAgICAgZmxhZ3MgPSBmY250bC5mY250bChzZWxmLndyaXRlLCBmY250bC5GX0dFVEZMLCAwKQorICAgICAgICBmbGFncyA9IGZsYWdzIHwgb3MuT19OT05CTE9DSworICAgICAgICBmY250bC5mY250bChzZWxmLndyaXRlLCBmY250bC5GX1NFVEZMLCBmbGFncykKKyAgICAgICAgc2VsZi5vbGRfd2FrZXVwID0gc2lnbmFsLnNldF93YWtldXBfZmQoc2VsZi53cml0ZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2lnbmFsLnNldF93YWtldXBfZmQoc2VsZi5vbGRfd2FrZXVwKQorICAgICAgICBvcy5jbG9zZShzZWxmLnJlYWQpCisgICAgICAgIG9zLmNsb3NlKHNlbGYud3JpdGUpCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIHNlbGYuYWxybSkKKworQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIk5vdCB2YWxpZCBvbiBXaW5kb3dzIikKK2NsYXNzIFNpZ2ludGVycnVwdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiJJbnN0YWxsIGEgbm8tb3Agc2lnbmFsIGhhbmRsZXIgdGhhdCBjYW4gYmUgc2V0IHRvIGFsbG93CisgICAgICAgIGludGVycnVwdHMgb3Igbm90LCBhbmQgYXJyYW5nZSBmb3IgdGhlIG9yaWdpbmFsIHNpZ25hbCBoYW5kbGVyIHRvIGJlCisgICAgICAgIHJlLWluc3RhbGxlZCB3aGVuIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zaWdudW0gPSBzaWduYWwuU0lHVVNSMQorICAgICAgICBvbGRoYW5kbGVyID0gc2lnbmFsLnNpZ25hbChzZWxmLnNpZ251bSwgbGFtYmRhIHgseTogTm9uZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNpZ25hbC5zaWduYWwsIHNlbGYuc2lnbnVtLCBvbGRoYW5kbGVyKQorCisgICAgZGVmIHJlYWRwaXBlX2ludGVycnVwdGVkKHNlbGYpOgorICAgICAgICAiIiJQZXJmb3JtIGEgcmVhZCBkdXJpbmcgd2hpY2ggYSBzaWduYWwgd2lsbCBhcnJpdmUuICBSZXR1cm4gVHJ1ZSBpZiB0aGUKKyAgICAgICAgcmVhZCBpcyBpbnRlcnJ1cHRlZCBieSB0aGUgc2lnbmFsIGFuZCByYWlzZXMgYW4gZXhjZXB0aW9uLiAgUmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGl0IHJldHVybnMgbm9ybWFsbHkuCisgICAgICAgICIiIgorICAgICAgICAjIENyZWF0ZSBhIHBpcGUgdGhhdCBjYW4gYmUgdXNlZCBmb3IgdGhlIHJlYWQuICBBbHNvIGNsZWFuIGl0IHVwCisgICAgICAgICMgd2hlbiB0aGUgdGVzdCBpcyBvdmVyLCBzaW5jZSBub3RoaW5nIGVsc2Ugd2lsbCAoYnV0IHNlZSBiZWxvdyBmb3IKKyAgICAgICAgIyB0aGUgd3JpdGUgZW5kKS4KKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHIpCisKKyAgICAgICAgIyBDcmVhdGUgYW5vdGhlciBwcm9jZXNzIHdoaWNoIGNhbiBzZW5kIGEgc2lnbmFsIHRvIHRoaXMgb25lIHRvIHRyeQorICAgICAgICAjIHRvIGludGVycnVwdCB0aGUgcmVhZC4KKyAgICAgICAgcHBpZCA9IG9zLmdldHBpZCgpCisgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorCisgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgIyBDaGlsZCBjb2RlOiBzbGVlcCB0byBnaXZlIHRoZSBwYXJlbnQgZW5vdWdoIHRpbWUgdG8gZW50ZXIgdGhlCisgICAgICAgICAgICAjIHJlYWQoKSBjYWxsICh0aGVyZSdzIGEgcmFjZSBoZXJlLCBidXQgaXQncyByZWFsbHkgdHJpY2t5IHRvCisgICAgICAgICAgICAjIGVsaW1pbmF0ZSBpdCk7IHRoZW4gc2lnbmFsIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIEFsc28sIHNsZWVwCisgICAgICAgICAgICAjIGFnYWluIHRvIG1ha2UgaXQgbGlrZWx5IHRoYXQgdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQgdG8gdGhlCisgICAgICAgICAgICAjIHBhcmVudCBwcm9jZXNzIGJlZm9yZSB0aGUgY2hpbGQgZXhpdHMuICBJZiB0aGUgY2hpbGQgZXhpdHMKKyAgICAgICAgICAgICMgZmlyc3QsIHRoZSB3cml0ZSBlbmQgb2YgdGhlIHBpcGUgd2lsbCBiZSBjbG9zZWQgYW5kIHRoZSB0ZXN0CisgICAgICAgICAgICAjIGlzIGludmFsaWQuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjIpCisgICAgICAgICAgICAgICAgb3Mua2lsbChwcGlkLCBzZWxmLnNpZ251bSkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgIyBObyBtYXR0ZXIgd2hhdCwganVzdCBleGl0IGFzIGZhc3QgYXMgcG9zc2libGUgbm93LgorICAgICAgICAgICAgICAgIGV4aXRfc3VicHJvY2VzcygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFBhcmVudCBjb2RlLgorICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGNoaWxkIGlzIGV2ZW50dWFsbHkgcmVhcGVkLCBlbHNlIGl0J2xsIGJlIGEKKyAgICAgICAgICAgICMgem9tYmllIGZvciB0aGUgcmVzdCBvZiB0aGUgdGVzdCBzdWl0ZSBydW4uCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3Mud2FpdHBpZCwgcGlkLCAwKQorCisgICAgICAgICAgICAjIENsb3NlIHRoZSB3cml0ZSBlbmQgb2YgdGhlIHBpcGUuICBUaGUgY2hpbGQgaGFzIGEgY29weSwgc28KKyAgICAgICAgICAgICMgaXQncyBub3QgcmVhbGx5IGNsb3NlZCB1bnRpbCB0aGUgY2hpbGQgZXhpdHMuICBXZSBuZWVkIGl0IHRvCisgICAgICAgICAgICAjIGNsb3NlIHdoZW4gdGhlIGNoaWxkIGV4aXRzIHNvIHRoYXQgaW4gdGhlIG5vbi1pbnRlcnJ1cHQgY2FzZQorICAgICAgICAgICAgIyB0aGUgcmVhZCBldmVudHVhbGx5IGNvbXBsZXRlcywgb3RoZXJ3aXNlIHdlIGNvdWxkIGp1c3QgY2xvc2UKKyAgICAgICAgICAgICMgaXQgKmFmdGVyKiB0aGUgdGVzdC4KKyAgICAgICAgICAgIG9zLmNsb3NlKHcpCisKKyAgICAgICAgICAgICMgVHJ5IHRoZSByZWFkIGFuZCByZXBvcnQgd2hldGhlciBpdCBpcyBpbnRlcnJ1cHRlZCBvciBub3QgdG8KKyAgICAgICAgICAgICMgdGhlIGNhbGxlci4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkID0gb3MucmVhZChyLCAxKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuZXJybm8gIT0gZXJybm8uRUlOVFI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB0ZXN0X3dpdGhvdXRfc2lnaW50ZXJydXB0KHNlbGYpOgorICAgICAgICAiIiJJZiBhIHNpZ25hbCBoYW5kbGVyIGlzIGluc3RhbGxlZCBhbmQgc2lnaW50ZXJydXB0IGlzIG5vdCBjYWxsZWQKKyAgICAgICAgYXQgYWxsLCB3aGVuIHRoYXQgc2lnbmFsIGFycml2ZXMsIGl0IGludGVycnVwdHMgYSBzeXNjYWxsIHRoYXQncyBpbgorICAgICAgICBwcm9ncmVzcy4KKyAgICAgICAgIiIiCisgICAgICAgIGkgPSBzZWxmLnJlYWRwaXBlX2ludGVycnVwdGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGkpCisgICAgICAgICMgQXJyaXZhbCBvZiB0aGUgc2lnbmFsIHNob3VsZG4ndCBoYXZlIGNoYW5nZWQgYW55dGhpbmcuCisgICAgICAgIGkgPSBzZWxmLnJlYWRwaXBlX2ludGVycnVwdGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGkpCisKKyAgICBkZWYgdGVzdF9zaWdpbnRlcnJ1cHRfb24oc2VsZik6CisgICAgICAgICIiIklmIGEgc2lnbmFsIGhhbmRsZXIgaXMgaW5zdGFsbGVkIGFuZCBzaWdpbnRlcnJ1cHQgaXMgY2FsbGVkIHdpdGgKKyAgICAgICAgYSB0cnVlIHZhbHVlIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50LCB3aGVuIHRoYXQgc2lnbmFsIGFycml2ZXMsIGl0CisgICAgICAgIGludGVycnVwdHMgYSBzeXNjYWxsIHRoYXQncyBpbiBwcm9ncmVzcy4KKyAgICAgICAgIiIiCisgICAgICAgIHNpZ25hbC5zaWdpbnRlcnJ1cHQoc2VsZi5zaWdudW0sIDEpCisgICAgICAgIGkgPSBzZWxmLnJlYWRwaXBlX2ludGVycnVwdGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGkpCisgICAgICAgICMgQXJyaXZhbCBvZiB0aGUgc2lnbmFsIHNob3VsZG4ndCBoYXZlIGNoYW5nZWQgYW55dGhpbmcuCisgICAgICAgIGkgPSBzZWxmLnJlYWRwaXBlX2ludGVycnVwdGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGkpCisKKyAgICBkZWYgdGVzdF9zaWdpbnRlcnJ1cHRfb2ZmKHNlbGYpOgorICAgICAgICAiIiJJZiBhIHNpZ25hbCBoYW5kbGVyIGlzIGluc3RhbGxlZCBhbmQgc2lnaW50ZXJydXB0IGlzIGNhbGxlZCB3aXRoCisgICAgICAgIGEgZmFsc2UgdmFsdWUgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQsIHdoZW4gdGhhdCBzaWduYWwgYXJyaXZlcywgaXQKKyAgICAgICAgZG9lcyBub3QgaW50ZXJydXB0IGEgc3lzY2FsbCB0aGF0J3MgaW4gcHJvZ3Jlc3MuCisgICAgICAgICIiIgorICAgICAgICBzaWduYWwuc2lnaW50ZXJydXB0KHNlbGYuc2lnbnVtLCAwKQorICAgICAgICBpID0gc2VsZi5yZWFkcGlwZV9pbnRlcnJ1cHRlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaSkKKyAgICAgICAgIyBBcnJpdmFsIG9mIHRoZSBzaWduYWwgc2hvdWxkbid0IGhhdmUgY2hhbmdlZCBhbnl0aGluZy4KKyAgICAgICAgaSA9IHNlbGYucmVhZHBpcGVfaW50ZXJydXB0ZWQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGkpCisKKworQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIk5vdCB2YWxpZCBvbiBXaW5kb3dzIikKK2NsYXNzIEl0aW1lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5obmRsX2NhbGxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuaG5kbF9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5pdGltZXIgPSBOb25lCisgICAgICAgIHNlbGYub2xkX2FsYXJtID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgc2VsZi5zaWdfYWxybSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgc2VsZi5vbGRfYWxhcm0pCisgICAgICAgIGlmIHNlbGYuaXRpbWVyIGlzIG5vdCBOb25lOiAjIHRlc3RfaXRpbWVyX2V4YyBkb2Vzbid0IGNoYW5nZSB0aGlzIGF0dHIKKyAgICAgICAgICAgICMganVzdCBlbnN1cmUgdGhhdCBpdGltZXIgaXMgc3RvcHBlZAorICAgICAgICAgICAgc2lnbmFsLnNldGl0aW1lcihzZWxmLml0aW1lciwgMCkKKworICAgIGRlZiBzaWdfYWxybShzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuaG5kbF9jYWxsZWQgPSBUcnVlCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIlNJR0FMUk0gaGFuZGxlciBpbnZva2VkIiwgYXJncykKKworICAgIGRlZiBzaWdfdnRhbHJtKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5obmRsX2NhbGxlZCA9IFRydWUKKworICAgICAgICBpZiBzZWxmLmhuZGxfY291bnQgPiAzOgorICAgICAgICAgICAgIyBpdCBzaG91bGRuJ3QgYmUgaGVyZSwgYmVjYXVzZSBpdCBzaG91bGQgaGF2ZSBiZWVuIGRpc2FibGVkLgorICAgICAgICAgICAgcmFpc2Ugc2lnbmFsLkl0aW1lckVycm9yKCJzZXRpdGltZXIgZGlkbid0IGRpc2FibGUgSVRJTUVSX1ZJUlRVQUwgIgorICAgICAgICAgICAgICAgICJ0aW1lci4iKQorICAgICAgICBlbGlmIHNlbGYuaG5kbF9jb3VudCA9PSAzOgorICAgICAgICAgICAgIyBkaXNhYmxlIElUSU1FUl9WSVJUVUFMLCB0aGlzIGZ1bmN0aW9uIHNob3VsZG4ndCBiZSBjYWxsZWQgYW55bW9yZQorICAgICAgICAgICAgc2lnbmFsLnNldGl0aW1lcihzaWduYWwuSVRJTUVSX1ZJUlRVQUwsIDApCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCgibGFzdCBTSUdWVEFMUk0gaGFuZGxlciBjYWxsIikKKworICAgICAgICBzZWxmLmhuZGxfY291bnQgKz0gMQorCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoIlNJR1ZUQUxSTSBoYW5kbGVyIGludm9rZWQiLCBhcmdzKQorCisgICAgZGVmIHNpZ19wcm9mKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5obmRsX2NhbGxlZCA9IFRydWUKKyAgICAgICAgc2lnbmFsLnNldGl0aW1lcihzaWduYWwuSVRJTUVSX1BST0YsIDApCisKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiU0lHUFJPRiBoYW5kbGVyIGludm9rZWQiLCBhcmdzKQorCisgICAgZGVmIHRlc3RfaXRpbWVyX2V4YyhzZWxmKToKKyAgICAgICAgIyBYWFggSSdtIGFzc3VtaW5nIC0xIGlzIGFuIGludmFsaWQgaXRpbWVyLCBidXQgbWF5YmUgc29tZSBwbGF0Zm9ybQorICAgICAgICAjIGRlZmluZXMgaXQgPworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaWduYWwuSXRpbWVyRXJyb3IsIHNpZ25hbC5zZXRpdGltZXIsIC0xLCAwKQorICAgICAgICAjIE5lZ2F0aXZlIHRpbWVzIGFyZSB0cmVhdGVkIGFzIHplcm8gb24gc29tZSBwbGF0Zm9ybXMuCisgICAgICAgIGlmIDA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaWduYWwuSXRpbWVyRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwuc2V0aXRpbWVyLCBzaWduYWwuSVRJTUVSX1JFQUwsIC0xKQorCisgICAgZGVmIHRlc3RfaXRpbWVyX3JlYWwoc2VsZik6CisgICAgICAgIHNlbGYuaXRpbWVyID0gc2lnbmFsLklUSU1FUl9SRUFMCisgICAgICAgIHNpZ25hbC5zZXRpdGltZXIoc2VsZi5pdGltZXIsIDEuMCkKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiXG5jYWxsIHBhdXNlKCkuLi4iKQorICAgICAgICBzaWduYWwucGF1c2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5obmRsX2NhbGxlZCwgVHJ1ZSkKKworICAgICMgSXNzdWUgMzg2NC4gVW5rbm93biBpZiB0aGlzIGFmZmVjdHMgZWFybGllciB2ZXJzaW9ucyBvZiBmcmVlYnNkIGFsc28uCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gKCdmcmVlYnNkNicsICduZXRic2Q1JyksCisgICAgICAgICdpdGltZXIgbm90IHJlbGlhYmxlIChkb2VzIG5vdCBtaXggd2VsbCB3aXRoIHRocmVhZGluZykgb24gc29tZSBCU0RzLicpCisgICAgZGVmIHRlc3RfaXRpbWVyX3ZpcnR1YWwoc2VsZik6CisgICAgICAgIHNlbGYuaXRpbWVyID0gc2lnbmFsLklUSU1FUl9WSVJUVUFMCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1ZUQUxSTSwgc2VsZi5zaWdfdnRhbHJtKQorICAgICAgICBzaWduYWwuc2V0aXRpbWVyKHNlbGYuaXRpbWVyLCAwLjMsIDAuMikKKworICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgd2hpbGUgdGltZS50aW1lKCkgLSBzdGFydF90aW1lIDwgNjAuMDoKKyAgICAgICAgICAgICMgdXNlIHVwIHNvbWUgdmlydHVhbCB0aW1lIGJ5IGRvaW5nIHJlYWwgd29yaworICAgICAgICAgICAgXyA9IHBvdygxMjM0NSwgNjc4OTAsIDEwMDAwMDE5KQorICAgICAgICAgICAgaWYgc2lnbmFsLmdldGl0aW1lcihzZWxmLml0aW1lcikgPT0gKDAuMCwgMC4wKToKKyAgICAgICAgICAgICAgICBicmVhayAjIHNpZ192dGFscm0gaGFuZGxlciBzdG9wcGVkIHRoaXMgaXRpbWVyCisgICAgICAgIGVsc2U6ICMgSXNzdWUgODQyNAorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidGltZW91dDogbGlrZWx5IGNhdXNlOiBtYWNoaW5lIHRvbyBzbG93IG9yIGxvYWQgdG9vICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImhpZ2giKQorCisgICAgICAgICMgdmlydHVhbCBpdGltZXIgc2hvdWxkIGJlICgwLjAsIDAuMCkgbm93CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLmdldGl0aW1lcihzZWxmLml0aW1lciksICgwLjAsIDAuMCkpCisgICAgICAgICMgYW5kIHRoZSBoYW5kbGVyIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5obmRsX2NhbGxlZCwgVHJ1ZSkKKworICAgICMgSXNzdWUgMzg2NC4gVW5rbm93biBpZiB0aGlzIGFmZmVjdHMgZWFybGllciB2ZXJzaW9ucyBvZiBmcmVlYnNkIGFsc28uCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm09PSdmcmVlYnNkNicsCisgICAgICAgICdpdGltZXIgbm90IHJlbGlhYmxlIChkb2VzIG5vdCBtaXggd2VsbCB3aXRoIHRocmVhZGluZykgb24gZnJlZWJzZDYnKQorICAgIGRlZiB0ZXN0X2l0aW1lcl9wcm9mKHNlbGYpOgorICAgICAgICBzZWxmLml0aW1lciA9IHNpZ25hbC5JVElNRVJfUFJPRgorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdQUk9GLCBzZWxmLnNpZ19wcm9mKQorICAgICAgICBzaWduYWwuc2V0aXRpbWVyKHNlbGYuaXRpbWVyLCAwLjIsIDAuMikKKworICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgd2hpbGUgdGltZS50aW1lKCkgLSBzdGFydF90aW1lIDwgNjAuMDoKKyAgICAgICAgICAgICMgZG8gc29tZSB3b3JrCisgICAgICAgICAgICBfID0gcG93KDEyMzQ1LCA2Nzg5MCwgMTAwMDAwMTkpCisgICAgICAgICAgICBpZiBzaWduYWwuZ2V0aXRpbWVyKHNlbGYuaXRpbWVyKSA9PSAoMC4wLCAwLjApOgorICAgICAgICAgICAgICAgIGJyZWFrICMgc2lnX3Byb2YgaGFuZGxlciBzdG9wcGVkIHRoaXMgaXRpbWVyCisgICAgICAgIGVsc2U6ICMgSXNzdWUgODQyNAorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidGltZW91dDogbGlrZWx5IGNhdXNlOiBtYWNoaW5lIHRvbyBzbG93IG9yIGxvYWQgdG9vICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImhpZ2giKQorCisgICAgICAgICMgcHJvZmlsaW5nIGl0aW1lciBzaG91bGQgYmUgKDAuMCwgMC4wKSBub3cKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0aXRpbWVyKHNlbGYuaXRpbWVyKSwgKDAuMCwgMC4wKSkKKyAgICAgICAgIyBhbmQgdGhlIGhhbmRsZXIgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhuZGxfY2FsbGVkLCBUcnVlKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChCYXNpY1NpZ25hbFRlc3RzLCBJbnRlclByb2Nlc3NTaWduYWxUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdha2V1cEZEVGVzdHMsIFdha2V1cFNpZ25hbFRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnaW50ZXJydXB0VGVzdCwgSXRpbWVyVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvd3NTaWduYWxUZXN0cykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zaXRlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc2l0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGI1ZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc2l0ZS5weQpAQCAtMCwwICsxLDM5NCBAQAorIiIiVGVzdHMgZm9yICdzaXRlJy4KKworVGVzdHMgYXNzdW1lIHRoZSBpbml0aWFsIHBhdGhzIGluIHN5cy5wYXRoIG9uY2UgdGhlIGludGVycHJldGVyIGhhcyBiZWd1bgorZXhlY3V0aW5nIGhhdmUgbm90IGJlZW4gcmVtb3ZlZC4KKworIiIiCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCBFbnZpcm9ubWVudFZhckd1YXJkCitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9vdXRwdXQKK2ltcG9ydCBfX2J1aWx0aW5fXworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgcmUKK2ltcG9ydCBlbmNvZGluZ3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzY29uZmlnCitmcm9tIGNvcHkgaW1wb3J0IGNvcHkKKworIyBOZWVkIHRvIG1ha2Ugc3VyZSB0byBub3QgaW1wb3J0ICdzaXRlJyBpZiBzb21lb25lIHNwZWNpZmllZCBgYC1TYGAgYXQgdGhlCisjIGNvbW1hbmQtbGluZS4gIERldGVjdCB0aGlzIGJ5IGp1c3QgbWFraW5nIHN1cmUgJ3NpdGUnIGhhcyBub3QgYmVlbiBpbXBvcnRlZAorIyBhbHJlYWR5LgoraWYgInNpdGUiIGluIHN5cy5tb2R1bGVzOgorICAgIGltcG9ydCBzaXRlCitlbHNlOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJpbXBvcnRhdGlvbiBvZiBzaXRlLnB5IHN1cHByZXNzZWQiKQorCitpZiBzaXRlLkVOQUJMRV9VU0VSX1NJVEUgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHNpdGUuVVNFUl9TSVRFKToKKyAgICAjIG5lZWQgdG8gYWRkIHVzZXIgc2l0ZSBkaXJlY3RvcnkgZm9yIHRlc3RzCisgICAgb3MubWFrZWRpcnMoc2l0ZS5VU0VSX1NJVEUpCisgICAgc2l0ZS5hZGRzaXRlZGlyKHNpdGUuVVNFUl9TSVRFKQorCitjbGFzcyBIZWxwZXJGdW5jdGlvbnNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgZm9yIGhlbHBlciBmdW5jdGlvbnMuCisKKyAgICBUaGUgc2V0dGluZyBvZiB0aGUgZW5jb2RpbmcgKHNldCB1c2luZyBzeXMuc2V0ZGVmYXVsdGVuY29kaW5nKSB1c2VkIGJ5CisgICAgdGhlIFVuaWNvZGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHRlc3RlZC4KKworICAgICIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiJTYXZlIGEgY29weSBvZiBzeXMucGF0aCIiIgorICAgICAgICBzZWxmLnN5c19wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc2VsZi5vbGRfYmFzZSA9IHNpdGUuVVNFUl9CQVNFCisgICAgICAgIHNlbGYub2xkX3NpdGUgPSBzaXRlLlVTRVJfU0lURQorICAgICAgICBzZWxmLm9sZF9wcmVmaXhlcyA9IHNpdGUuUFJFRklYRVMKKyAgICAgICAgc2VsZi5vbGRfdmFycyA9IGNvcHkoc3lzY29uZmlnLl9DT05GSUdfVkFSUykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIiIiUmVzdG9yZSBzeXMucGF0aCIiIgorICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYuc3lzX3BhdGgKKyAgICAgICAgc2l0ZS5VU0VSX0JBU0UgPSBzZWxmLm9sZF9iYXNlCisgICAgICAgIHNpdGUuVVNFUl9TSVRFID0gc2VsZi5vbGRfc2l0ZQorICAgICAgICBzaXRlLlBSRUZJWEVTID0gc2VsZi5vbGRfcHJlZml4ZXMKKyAgICAgICAgc3lzY29uZmlnLl9DT05GSUdfVkFSUyA9IHNlbGYub2xkX3ZhcnMKKworICAgIGRlZiB0ZXN0X21ha2VwYXRoKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWFrZXBhdGgoKSBoYXZlIGFuIGFic29sdXRlIHBhdGggZm9yIGl0cyBmaXJzdCByZXR1cm4gdmFsdWUKKyAgICAgICAgIyBhbmQgYSBjYXNlLW5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgYWJzb2x1dGUgcGF0aCBmb3IgaXRzCisgICAgICAgICMgc2Vjb25kIHZhbHVlLgorICAgICAgICBwYXRoX3BhcnRzID0gKCJCZWdpbm5pbmciLCAiRW5kIikKKyAgICAgICAgb3JpZ2luYWxfZGlyID0gb3MucGF0aC5qb2luKCpwYXRoX3BhcnRzKQorICAgICAgICBhYnNfZGlyLCBub3JtX2RpciA9IHNpdGUubWFrZXBhdGgoKnBhdGhfcGFydHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5hYnNwYXRoKG9yaWdpbmFsX2RpciksIGFic19kaXIpCisgICAgICAgIGlmIG9yaWdpbmFsX2RpciA9PSBvcy5wYXRoLm5vcm1jYXNlKG9yaWdpbmFsX2Rpcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFic19kaXIsIG5vcm1fZGlyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLm5vcm1jYXNlKGFic19kaXIpLCBub3JtX2RpcikKKworICAgIGRlZiB0ZXN0X2luaXRfcGF0aGluZm8oc2VsZik6CisgICAgICAgIGRpcl9zZXQgPSBzaXRlLl9pbml0X3BhdGhpbmZvKCkKKyAgICAgICAgZm9yIGVudHJ5IGluIFtzaXRlLm1ha2VwYXRoKHBhdGgpWzFdIGZvciBwYXRoIGluIHN5cy5wYXRoCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXRoIGFuZCBvcy5wYXRoLmlzZGlyKHBhdGgpXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZW50cnksIGRpcl9zZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBmcm9tIHN5cy5wYXRoIG5vdCBmb3VuZCBpbiBzZXQgcmV0dXJuZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiYnkgX2luaXRfcGF0aGluZm8oKTogJXMiICUgKGVudHJ5LCBkaXJfc2V0KSkKKworICAgIGRlZiBwdGhfZmlsZV90ZXN0cyhzZWxmLCBwdGhfZmlsZSk6CisgICAgICAgICIiIkNvbnRhaW4gY29tbW9uIGNvZGUgZm9yIHRlc3RpbmcgcmVzdWx0cyBvZiByZWFkaW5nIGEgLnB0aCBmaWxlIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocHRoX2ZpbGUuaW1wb3J0ZWQsIHN5cy5tb2R1bGVzLAorICAgICAgICAgICAgICAgICAgICAgICIlcyBub3QgaW4gc3lzLm1vZHVsZXMiICUgcHRoX2ZpbGUuaW1wb3J0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2l0ZS5tYWtlcGF0aChwdGhfZmlsZS5nb29kX2Rpcl9wYXRoKVswXSwgc3lzLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMocHRoX2ZpbGUuYmFkX2Rpcl9wYXRoKSkKKworICAgIGRlZiB0ZXN0X2FkZHBhY2thZ2Uoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGFkZHBhY2thZ2UoKSBpbXBvcnRzIGlmIHRoZSBsaW5lIHN0YXJ0cyB3aXRoICdpbXBvcnQnLAorICAgICAgICAjIGFkZHMgZGlyZWN0b3JpZXMgdG8gc3lzLnBhdGggZm9yIGFueSBsaW5lIGluIHRoZSBmaWxlIHRoYXQgaXMgbm90IGEKKyAgICAgICAgIyBjb21tZW50IG9yIGltcG9ydCB0aGF0IGlzIGEgdmFsaWQgZGlyZWN0b3J5IG5hbWUgZm9yIHdoZXJlIHRoZSAucHRoCisgICAgICAgICMgZmlsZSByZXNpZGVzOyBpbnZhbGlkIGRpcmVjdG9yaWVzIGFyZSBub3QgYWRkZWQKKyAgICAgICAgcHRoX2ZpbGUgPSBQdGhGaWxlKCkKKyAgICAgICAgcHRoX2ZpbGUuY2xlYW51cChwcmVwPVRydWUpICAjIHRvIG1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmUtZXhpc3RpbmcgdGhhdCBzaG91bGRuJ3QgYmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHRoX2ZpbGUuY3JlYXRlKCkKKyAgICAgICAgICAgIHNpdGUuYWRkcGFja2FnZShwdGhfZmlsZS5iYXNlX2RpciwgcHRoX2ZpbGUuZmlsZW5hbWUsIHNldCgpKQorICAgICAgICAgICAgc2VsZi5wdGhfZmlsZV90ZXN0cyhwdGhfZmlsZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHB0aF9maWxlLmNsZWFudXAoKQorCisgICAgZGVmIG1ha2VfcHRoKHNlbGYsIGNvbnRlbnRzLCBwdGhfZGlyPScuJywgcHRoX25hbWU9VEVTVEZOKToKKyAgICAgICAgIyBDcmVhdGUgYSAucHRoIGZpbGUgYW5kIHJldHVybiBpdHMgKGFic3BhdGgsIGJhc2VuYW1lKS4KKyAgICAgICAgcHRoX2RpciA9IG9zLnBhdGguYWJzcGF0aChwdGhfZGlyKQorICAgICAgICBwdGhfYmFzZW5hbWUgPSBwdGhfbmFtZSArICcucHRoJworICAgICAgICBwdGhfZm4gPSBvcy5wYXRoLmpvaW4ocHRoX2RpciwgcHRoX2Jhc2VuYW1lKQorICAgICAgICBwdGhfZmlsZSA9IG9wZW4ocHRoX2ZuLCAndycpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IG9zLnJlbW92ZShwdGhfZm4pKQorICAgICAgICBwdGhfZmlsZS53cml0ZShjb250ZW50cykKKyAgICAgICAgcHRoX2ZpbGUuY2xvc2UoKQorICAgICAgICByZXR1cm4gcHRoX2RpciwgcHRoX2Jhc2VuYW1lCisKKyAgICBkZWYgdGVzdF9hZGRwYWNrYWdlX2ltcG9ydF9iYWRfc3ludGF4KHNlbGYpOgorICAgICAgICAjIElzc3VlIDEwNjQyCisgICAgICAgIHB0aF9kaXIsIHB0aF9mbiA9IHNlbGYubWFrZV9wdGgoImltcG9ydCBiYWQpc3ludGF4XG4iKQorICAgICAgICB3aXRoIGNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgZXJyX291dDoKKyAgICAgICAgICAgIHNpdGUuYWRkcGFja2FnZShwdGhfZGlyLCBwdGhfZm4sIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCAibGluZSAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgIHJlLmVzY2FwZShvcy5wYXRoLmpvaW4ocHRoX2RpciwgcHRoX2ZuKSkpCisgICAgICAgICMgWFhYOiB0aGUgcHJldmlvdXMgdHdvIHNob3VsZCBiZSBpbmRlcGVuZGVudCBjaGVja3Mgc28gdGhhdCB0aGUKKyAgICAgICAgIyBvcmRlciBkb2Vzbid0IG1hdHRlci4gIFRoZSBuZXh0IHRocmVlIGNvdWxkIGJlIGEgc2luZ2xlIGNoZWNrCisgICAgICAgICMgYnV0IG15IHJlZ2V4IGZvbyBpc24ndCBnb29kIGVub3VnaCB0byB3cml0ZSBpdC4KKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgJ1RyYWNlYmFjaycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksIHInaW1wb3J0IGJhZFwpc3ludGF4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgJ1N5bnRheEVycm9yJykKKworICAgIGRlZiB0ZXN0X2FkZHBhY2thZ2VfaW1wb3J0X2JhZF9leGVjKHNlbGYpOgorICAgICAgICAjIElzc3VlIDEwNjQyCisgICAgICAgIHB0aF9kaXIsIHB0aF9mbiA9IHNlbGYubWFrZV9wdGgoInJhbmRvbXBhdGhcbmltcG9ydCBub3N1Y2htb2R1bGVcbiIpCisgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBlcnJfb3V0OgorICAgICAgICAgICAgc2l0ZS5hZGRwYWNrYWdlKHB0aF9kaXIsIHB0aF9mbiwgc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksICJsaW5lIDIiKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgcmUuZXNjYXBlKG9zLnBhdGguam9pbihwdGhfZGlyLCBwdGhfZm4pKSkKKyAgICAgICAgIyBYWFg6IGRpdHRvIHByZXZpb3VzIFhYWCBjb21tZW50LgorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCAnVHJhY2ViYWNrJykKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgJ0ltcG9ydEVycm9yJykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW5kb3dzIGRvZXMgbm90IHJhaXNlIGFuICIKKyAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgZm9yIGZpbGUgcGF0aHMgY29udGFpbmluZyBudWxsIGNoYXJhY3RlcnMiKQorICAgIGRlZiB0ZXN0X2FkZHBhY2thZ2VfaW1wb3J0X2JhZF9wdGhfZmlsZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA1MjU4CisgICAgICAgIHB0aF9kaXIsIHB0aF9mbiA9IHNlbGYubWFrZV9wdGgoImFiY1x4MDBkZWZcbiIpCisgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBlcnJfb3V0OgorICAgICAgICAgICAgc2l0ZS5hZGRwYWNrYWdlKHB0aF9kaXIsIHB0aF9mbiwgc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksICJsaW5lIDEiKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgcmUuZXNjYXBlKG9zLnBhdGguam9pbihwdGhfZGlyLCBwdGhfZm4pKSkKKyAgICAgICAgIyBYWFg6IGRpdHRvIHByZXZpb3VzIFhYWCBjb21tZW50LgorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCAnVHJhY2ViYWNrJykKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgJ1R5cGVFcnJvcicpCisKKyAgICBkZWYgdGVzdF9hZGRzaXRlZGlyKHNlbGYpOgorICAgICAgICAjIFNhbWUgdGVzdHMgZm9yIHRlc3RfYWRkcGFja2FnZSBzaW5jZSBhZGRzaXRlZGlyKCkgZXNzZW50aWFsbHkganVzdAorICAgICAgICAjIGNhbGxzIGFkZHBhY2thZ2UoKSBmb3IgZXZlcnkgLnB0aCBmaWxlIGluIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgcHRoX2ZpbGUgPSBQdGhGaWxlKCkKKyAgICAgICAgcHRoX2ZpbGUuY2xlYW51cChwcmVwPVRydWUpICMgTWFrZSBzdXJlIHRoYXQgbm90aGluZyBpcyBwcmUtZXhpc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhhdCBpcyB0ZXN0ZWQgZm9yCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHB0aF9maWxlLmNyZWF0ZSgpCisgICAgICAgICAgICBzaXRlLmFkZHNpdGVkaXIocHRoX2ZpbGUuYmFzZV9kaXIsIHNldCgpKQorICAgICAgICAgICAgc2VsZi5wdGhfZmlsZV90ZXN0cyhwdGhfZmlsZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHB0aF9maWxlLmNsZWFudXAoKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc2l0ZS5FTkFCTEVfVVNFUl9TSVRFLCAicmVxdWlyZXMgYWNjZXNzIHRvIFBFUCAzNzAgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlci1zaXRlIChzaXRlLkVOQUJMRV9VU0VSX1NJVEUpIikKKyAgICBkZWYgdGVzdF9zX29wdGlvbihzZWxmKToKKyAgICAgICAgdXNlcnNpdGUgPSBzaXRlLlVTRVJfU0lURQorICAgICAgICBzZWxmLmFzc2VydEluKHVzZXJzaXRlLCBzeXMucGF0aCkKKworICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLmV4aXQoJXIgaW4gc3lzLnBhdGgpJyAlIHVzZXJzaXRlXSwKKyAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDEsICIlciBpcyBub3QgaW4gc3lzLnBhdGggKHN5cy5leGl0IHJldHVybmVkICVyKSIKKyAgICAgICAgICAgICAgICAlICh1c2Vyc2l0ZSwgcmMpKQorCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgJy1zJywgJy1jJywKKyAgICAgICAgICAgICdpbXBvcnQgc3lzOyBzeXMuZXhpdCglciBpbiBzeXMucGF0aCknICUgdXNlcnNpdGVdLAorICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMCkKKworICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbIlBZVEhPTk5PVVNFUlNJVEUiXSA9ICIxIgorICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLmV4aXQoJXIgaW4gc3lzLnBhdGgpJyAlIHVzZXJzaXRlXSwKKyAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCisKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WyJQWVRIT05VU0VSQkFTRSJdID0gIi90bXAiCisgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICdpbXBvcnQgc3lzLCBzaXRlOyBzeXMuZXhpdChzaXRlLlVTRVJfQkFTRS5zdGFydHN3aXRoKCIvdG1wIikpJ10sCisgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQorCisgICAgZGVmIHRlc3RfZ2V0dXNlcmJhc2Uoc2VsZik6CisgICAgICAgIHNpdGUuVVNFUl9CQVNFID0gTm9uZQorICAgICAgICB1c2VyX2Jhc2UgPSBzaXRlLmdldHVzZXJiYXNlKCkKKworICAgICAgICAjIHRoZSBjYWxsIHNldHMgc2l0ZS5VU0VSX0JBU0UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXRlLlVTRVJfQkFTRSwgdXNlcl9iYXNlKQorCisgICAgICAgICMgbGV0J3Mgc2V0IFBZVEhPTlVTRVJCQVNFIGFuZCBzZWUgaWYgaXQgdXNlcyBpdAorICAgICAgICBzaXRlLlVTRVJfQkFTRSA9IE5vbmUKKyAgICAgICAgaW1wb3J0IHN5c2NvbmZpZworICAgICAgICBzeXNjb25maWcuX0NPTkZJR19WQVJTID0gTm9uZQorCisgICAgICAgIHdpdGggRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudmlyb246CisgICAgICAgICAgICBlbnZpcm9uWydQWVRIT05VU0VSQkFTRSddID0gJ3hveG8nCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2l0ZS5nZXR1c2VyYmFzZSgpLnN0YXJ0c3dpdGgoJ3hveG8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXRlLmdldHVzZXJiYXNlKCkpCisKKyAgICBkZWYgdGVzdF9nZXR1c2Vyc2l0ZXBhY2thZ2VzKHNlbGYpOgorICAgICAgICBzaXRlLlVTRVJfU0lURSA9IE5vbmUKKyAgICAgICAgc2l0ZS5VU0VSX0JBU0UgPSBOb25lCisgICAgICAgIHVzZXJfc2l0ZSA9IHNpdGUuZ2V0dXNlcnNpdGVwYWNrYWdlcygpCisKKyAgICAgICAgIyB0aGUgY2FsbCBzZXRzIFVTRVJfQkFTRSAqYW5kKiBVU0VSX1NJVEUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXRlLlVTRVJfU0lURSwgdXNlcl9zaXRlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXNlcl9zaXRlLnN0YXJ0c3dpdGgoc2l0ZS5VU0VSX0JBU0UpLCB1c2VyX3NpdGUpCisKKyAgICBkZWYgdGVzdF9nZXRzaXRlcGFja2FnZXMoc2VsZik6CisgICAgICAgIHNpdGUuUFJFRklYRVMgPSBbJ3hveG8nXQorICAgICAgICBkaXJzID0gc2l0ZS5nZXRzaXRlcGFja2FnZXMoKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMmVteCcsICdyaXNjb3MnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCAxKQorICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd4b3hvJywgJ0xpYicsICdzaXRlLXBhY2thZ2VzJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1swXSwgd2FudGVkKQorICAgICAgICBlbGlmIChzeXMucGxhdGZvcm0gPT0gImRhcndpbiIgYW5kCisgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlBZVEhPTkZSQU1FV09SSyIpKToKKyAgICAgICAgICAgICMgT1MgWCBmcmFtZXdvcmsgYnVpbGRzCisgICAgICAgICAgICBzaXRlLlBSRUZJWEVTID0gWydQeXRob24uZnJhbWV3b3JrJ10KKyAgICAgICAgICAgIGRpcnMgPSBzaXRlLmdldHNpdGVwYWNrYWdlcygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaXJzKSwgMykKKyAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbignL0xpYnJhcnknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiUFlUSE9ORlJBTUVXT1JLIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnZlcnNpb25bOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXRlLXBhY2thZ2VzJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1syXSwgd2FudGVkKQorICAgICAgICBlbGlmIG9zLnNlcCA9PSAnLyc6CisgICAgICAgICAgICAjIE9TIFggbm9uLWZyYW13ZXdvcmsgYnVpbGRzLCBMaW51eCwgRnJlZUJTRCwgZXRjCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaXJzKSwgMikKKyAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsICdsaWInLCAncHl0aG9uJyArIHN5cy52ZXJzaW9uWzozXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l0ZS1wYWNrYWdlcycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMF0sIHdhbnRlZCkKKyAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsICdsaWInLCAnc2l0ZS1weXRob24nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzFdLCB3YW50ZWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIG90aGVyIHBsYXRmb3JtcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMF0sICd4b3hvJykKKyAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsICdsaWInLCAnc2l0ZS1wYWNrYWdlcycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMV0sIHdhbnRlZCkKKworY2xhc3MgUHRoRmlsZShvYmplY3QpOgorICAgICIiIkhlbHBlciBjbGFzcyBmb3IgaGFuZGxpbmcgdGVzdGluZyBvZiAucHRoIGZpbGVzIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWVfYmFzZT1URVNURk4sIGltcG9ydGVkPSJ0aW1lIiwKKyAgICAgICAgICAgICAgICAgICAgZ29vZF9kaXJuYW1lPSJfX3Rlc3RkaXJfXyIsIGJhZF9kaXJuYW1lPSJfX2JhZCIpOgorICAgICAgICAiIiJJbml0aWFsaXplIGluc3RhbmNlIHZhcmlhYmxlcyIiIgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWVfYmFzZSArICIucHRoIgorICAgICAgICBzZWxmLmJhc2VfZGlyID0gb3MucGF0aC5hYnNwYXRoKCcnKQorICAgICAgICBzZWxmLmZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJhc2VfZGlyLCBzZWxmLmZpbGVuYW1lKQorICAgICAgICBzZWxmLmltcG9ydGVkID0gaW1wb3J0ZWQKKyAgICAgICAgc2VsZi5nb29kX2Rpcm5hbWUgPSBnb29kX2Rpcm5hbWUKKyAgICAgICAgc2VsZi5iYWRfZGlybmFtZSA9IGJhZF9kaXJuYW1lCisgICAgICAgIHNlbGYuZ29vZF9kaXJfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJhc2VfZGlyLCBzZWxmLmdvb2RfZGlybmFtZSkKKyAgICAgICAgc2VsZi5iYWRfZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5iYXNlX2Rpciwgc2VsZi5iYWRfZGlybmFtZSkKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSBhIC5wdGggZmlsZSB3aXRoIGEgY29tbWVudCwgYmxhbmsgbGluZXMsIGFuIGBgaW1wb3J0CisgICAgICAgIDxzZWxmLmltcG9ydGVkPmBgLCBhIGxpbmUgd2l0aCBzZWxmLmdvb2RfZGlybmFtZSwgYW5kIGEgbGluZSB3aXRoCisgICAgICAgIHNlbGYuYmFkX2Rpcm5hbWUuCisKKyAgICAgICAgQ3JlYXRpb24gb2YgdGhlIGRpcmVjdG9yeSBmb3Igc2VsZi5nb29kX2Rpcl9wYXRoIChiYXNlZCBvZmYgb2YKKyAgICAgICAgc2VsZi5nb29kX2Rpcm5hbWUpIGlzIGFsc28gcGVyZm9ybWVkLgorCisgICAgICAgIE1ha2Ugc3VyZSB0byBjYWxsIHNlbGYuY2xlYW51cCgpIHRvIHVuZG8gYW55dGhpbmcgZG9uZSBieSB0aGlzIG1ldGhvZC4KKworICAgICAgICAiIiIKKyAgICAgICAgRklMRSA9IG9wZW4oc2VsZi5maWxlX3BhdGgsICd3JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICIjaW1wb3J0IEBiYWQgbW9kdWxlIG5hbWUiCisgICAgICAgICAgICBwcmludD4+RklMRSwgIlxuIgorICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICJpbXBvcnQgJXMiICUgc2VsZi5pbXBvcnRlZAorICAgICAgICAgICAgcHJpbnQ+PkZJTEUsIHNlbGYuZ29vZF9kaXJuYW1lCisgICAgICAgICAgICBwcmludD4+RklMRSwgc2VsZi5iYWRfZGlybmFtZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgRklMRS5jbG9zZSgpCisgICAgICAgIG9zLm1rZGlyKHNlbGYuZ29vZF9kaXJfcGF0aCkKKworICAgIGRlZiBjbGVhbnVwKHNlbGYsIHByZXA9RmFsc2UpOgorICAgICAgICAiIiJNYWtlIHN1cmUgdGhhdCB0aGUgLnB0aCBmaWxlIGlzIGRlbGV0ZWQsIHNlbGYuaW1wb3J0ZWQgaXMgbm90IGluCisgICAgICAgIHN5cy5tb2R1bGVzLCBhbmQgdGhhdCBib3RoIHNlbGYuZ29vZF9kaXJuYW1lIGFuZCBzZWxmLmJhZF9kaXJuYW1lIGFyZQorICAgICAgICBub3QgZXhpc3RpbmcgZGlyZWN0b3JpZXMuIiIiCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuZmlsZV9wYXRoKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLmZpbGVfcGF0aCkKKyAgICAgICAgaWYgcHJlcDoKKyAgICAgICAgICAgIHNlbGYuaW1wb3J0ZWRfbW9kdWxlID0gc3lzLm1vZHVsZXMuZ2V0KHNlbGYuaW1wb3J0ZWQpCisgICAgICAgICAgICBpZiBzZWxmLmltcG9ydGVkX21vZHVsZToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbc2VsZi5pbXBvcnRlZF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYuaW1wb3J0ZWRfbW9kdWxlOgorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzW3NlbGYuaW1wb3J0ZWRdID0gc2VsZi5pbXBvcnRlZF9tb2R1bGUKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5nb29kX2Rpcl9wYXRoKToKKyAgICAgICAgICAgIG9zLnJtZGlyKHNlbGYuZ29vZF9kaXJfcGF0aCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5iYWRfZGlyX3BhdGgpOgorICAgICAgICAgICAgb3Mucm1kaXIoc2VsZi5iYWRfZGlyX3BhdGgpCisKK2NsYXNzIEltcG9ydFNpZGVFZmZlY3RUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBzaWRlLWVmZmVjdHMgZnJvbSBpbXBvcnRpbmcgJ3NpdGUnLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiJNYWtlIGEgY29weSBvZiBzeXMucGF0aCIiIgorICAgICAgICBzZWxmLnN5c19wYXRoID0gc3lzLnBhdGhbOl0KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIiIiUmVzdG9yZSBzeXMucGF0aCIiIgorICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYuc3lzX3BhdGgKKworICAgIGRlZiB0ZXN0X2Fic19fZmlsZV9fKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgaW1wb3J0ZWQgbW9kdWxlcyBoYXZlIHRoZWlyIF9fZmlsZV9fIGF0dHJpYnV0ZQorICAgICAgICAjIGFzIGFuIGFic29sdXRlIHBhdGguCisgICAgICAgICMgSGFuZGxlZCBieSBhYnNfX2ZpbGVfXygpCisgICAgICAgIHNpdGUuYWJzX19maWxlX18oKQorICAgICAgICBmb3IgbW9kdWxlIGluIChzeXMsIG9zLCBfX2J1aWx0aW5fXyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNhYnMobW9kdWxlLl9fZmlsZV9fKSwgcmVwcihtb2R1bGUpKQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgV2UgY291bGQgdHJ5IGV2ZXJ5dGhpbmcgaW4gc3lzLm1vZHVsZXM7IGhvd2V2ZXIsIHdoZW4gcmVncnRlc3QucHkKKyAgICAgICAgIyBydW5zIHNvbWV0aGluZyBsaWtlIHRlc3RfZnJvemVuIGJlZm9yZSB0ZXN0X3NpdGUsIHRoZW4gd2Ugd2lsbAorICAgICAgICAjIGJlIHRlc3RpbmcgdGhpbmdzIGxvYWRlZCAqYWZ0ZXIqIHRlc3Rfc2l0ZSBkaWQgcGF0aCBub3JtYWxpemF0aW9uCisKKyAgICBkZWYgdGVzdF9ub19kdXBsaWNhdGVfcGF0aHMoc2VsZik6CisgICAgICAgICMgTm8gZHVwbGljYXRlIHBhdGhzIHNob3VsZCBleGlzdCBpbiBzeXMucGF0aAorICAgICAgICAjIEhhbmRsZWQgYnkgcmVtb3ZlZHVwcGF0aHMoKQorICAgICAgICBzaXRlLnJlbW92ZWR1cHBhdGhzKCkKKyAgICAgICAgc2Vlbl9wYXRocyA9IHNldCgpCisgICAgICAgIGZvciBwYXRoIGluIHN5cy5wYXRoOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihwYXRoLCBzZWVuX3BhdGhzKQorICAgICAgICAgICAgc2Vlbl9wYXRocy5hZGQocGF0aCkKKworICAgIGRlZiB0ZXN0X2FkZF9idWlsZF9kaXIoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBidWlsZCBkaXJlY3RvcnkncyBNb2R1bGVzIGRpcmVjdG9yeSBpcyB1c2VkIHdoZW4gaXQKKyAgICAgICAgIyBzaG91bGQgYmUuCisgICAgICAgICMgWFhYOiBpbXBsZW1lbnQKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3Rfc2V0dGluZ19xdWl0KHNlbGYpOgorICAgICAgICAjICdxdWl0JyBhbmQgJ2V4aXQnIHNob3VsZCBiZSBpbmplY3RlZCBpbnRvIF9fYnVpbHRpbl9fCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKF9fYnVpbHRpbl9fLCAicXVpdCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfX2J1aWx0aW5fXywgImV4aXQiKSkKKworICAgIGRlZiB0ZXN0X3NldHRpbmdfY29weXJpZ2h0KHNlbGYpOgorICAgICAgICAjICdjb3B5cmlnaHQnIGFuZCAnY3JlZGl0cycgc2hvdWxkIGJlIGluIF9fYnVpbHRpbl9fCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKF9fYnVpbHRpbl9fLCAiY29weXJpZ2h0IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKF9fYnVpbHRpbl9fLCAiY3JlZGl0cyIpKQorCisgICAgZGVmIHRlc3Rfc2V0dGluZ19oZWxwKHNlbGYpOgorICAgICAgICAjICdoZWxwJyBzaG91bGQgYmUgc2V0IGluIF9fYnVpbHRpbl9fCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKF9fYnVpbHRpbl9fLCAiaGVscCIpKQorCisgICAgZGVmIHRlc3RfYWxpYXNpbmdfbWJjcyhzZWxmKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICBpbXBvcnQgbG9jYWxlCisgICAgICAgICAgICBpZiBsb2NhbGUuZ2V0ZGVmYXVsdGxvY2FsZSgpWzFdLnN0YXJ0c3dpdGgoJ2NwJyk6CisgICAgICAgICAgICAgICAgZm9yIHZhbHVlIGluIGVuY29kaW5ncy5hbGlhc2VzLmFsaWFzZXMuaXRlcnZhbHVlcygpOgorICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSA9PSAibWJjcyI6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZGlkIG5vdCBhbGlhcyBtYmNzIikKKworICAgIGRlZiB0ZXN0X3NldGRlZmF1bHRlbmNvZGluZ19yZW1vdmVkKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBzeXMuc2V0ZGVmYXVsdGVuY29kaW5nIGlzIGdvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKHN5cywgInNldGRlZmF1bHRlbmNvZGluZyIpKQorCisgICAgZGVmIHRlc3Rfc2l0ZWN1c3RvbWl6ZV9leGVjdXRlZChzZWxmKToKKyAgICAgICAgIyBJZiBzaXRlY3VzdG9taXplIGlzIGF2YWlsYWJsZSwgaXQgc2hvdWxkIGhhdmUgYmVlbiBpbXBvcnRlZC4KKyAgICAgICAgaWYgInNpdGVjdXN0b21pemUiIG5vdCBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgc2l0ZWN1c3RvbWl6ZQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaXRlY3VzdG9taXplIG5vdCBpbXBvcnRlZCBhdXRvbWF0aWNhbGx5IikKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChIZWxwZXJGdW5jdGlvbnNUZXN0cywgSW1wb3J0U2lkZUVmZmVjdFRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zbGljZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NsaWNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMDRkNmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zbGljZS5weQpAQCAtMCwwICsxLDEzNCBAQAorIyB0ZXN0cyBmb3Igc2xpY2Ugb2JqZWN0czsgaW4gcGFydGljdWxhciB0aGUgaW5kaWNlcyBtZXRob2QuCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gY1BpY2tsZSBpbXBvcnQgbG9hZHMsIGR1bXBzCisKK2ltcG9ydCBzeXMKKworY2xhc3MgU2xpY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNsaWNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNsaWNlLCAxLCAyLCAzLCA0KQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNsaWNlKDEsIDIsIDMpKSwgInNsaWNlKDEsIDIsIDMpIikKKworICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgICMgVmVyaWZ5IGNsZWFyaW5nIG9mIFNGIGJ1ZyAjODAwNzk2CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgc2xpY2UoNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2xpY2UoNSkuX19oYXNoX18pCisKKyAgICBkZWYgdGVzdF9jbXAoc2VsZik6CisgICAgICAgIHMxID0gc2xpY2UoMSwgMiwgMykKKyAgICAgICAgczIgPSBzbGljZSgxLCAyLCAzKQorICAgICAgICBzMyA9IHNsaWNlKDEsIDIsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEsIHMyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHMxLCBzMykKKworICAgICAgICBjbGFzcyBFeGMoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBCYWRDbXAob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4YworICAgICAgICAgICAgX19oYXNoX18gPSBOb25lICMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKKworICAgICAgICBzMSA9IHNsaWNlKEJhZENtcCgpKQorICAgICAgICBzMiA9IHNsaWNlKEJhZENtcCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIGNtcCwgczEsIHMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLCBzMSkKKworICAgICAgICBzMSA9IHNsaWNlKDEsIEJhZENtcCgpKQorICAgICAgICBzMiA9IHNsaWNlKDEsIEJhZENtcCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLCBzMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBjbXAsIHMxLCBzMikKKworICAgICAgICBzMSA9IHNsaWNlKDEsIDIsIEJhZENtcCgpKQorICAgICAgICBzMiA9IHNsaWNlKDEsIDIsIEJhZENtcCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLCBzMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBjbXAsIHMxLCBzMikKKworICAgIGRlZiB0ZXN0X21lbWJlcnMoc2VsZik6CisgICAgICAgIHMgPSBzbGljZSgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3RhcnQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdG9wLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3RlcCwgTm9uZSkKKworICAgICAgICBzID0gc2xpY2UoMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0YXJ0LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3RvcCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0ZXAsIE5vbmUpCisKKyAgICAgICAgcyA9IHNsaWNlKDEsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdGFydCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnN0b3AsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdGVwLCAzKQorCisgICAgICAgIGNsYXNzIEFueUNsYXNzOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG9iaiA9IEFueUNsYXNzKCkKKyAgICAgICAgcyA9IHNsaWNlKG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RvcCBpcyBvYmopCisKKyAgICBkZWYgdGVzdF9pbmRpY2VzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUgICAgICAgICAgICkuaW5kaWNlcygxMCksICgwLCAxMCwgIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUsICBOb25lLCAgMikuaW5kaWNlcygxMCksICgwLCAxMCwgIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKDEsICAgICBOb25lLCAgMikuaW5kaWNlcygxMCksICgxLCAxMCwgIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUsICBOb25lLCAtMSkuaW5kaWNlcygxMCksICg5LCAtMSwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUsICBOb25lLCAtMikuaW5kaWNlcygxMCksICg5LCAtMSwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKDMsICAgICBOb25lLCAtMikuaW5kaWNlcygxMCksICgzLCAtMSwgLTIpKQorICAgICAgICAjIGlzc3VlIDMwMDQgdGVzdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lLCAtOSkuaW5kaWNlcygxMCksICgwLCAxLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lLCAtMTApLmluZGljZXMoMTApLCAoMCwgMCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTm9uZSwgLTExKS5pbmRpY2VzKDEwKSwgKDAsIDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUsIC0xMCwgLTEpLmluZGljZXMoMTApLCAoOSwgMCwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUsIC0xMSwgLTEpLmluZGljZXMoMTApLCAoOSwgLTEsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lLCAtMTIsIC0xKS5pbmRpY2VzKDEwKSwgKDksIC0xLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTm9uZSwgOSkuaW5kaWNlcygxMCksICgwLCA5LCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lLCAxMCkuaW5kaWNlcygxMCksICgwLCAxMCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTm9uZSwgMTEpLmluZGljZXMoMTApLCAoMCwgMTAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUsIDgsIC0xKS5pbmRpY2VzKDEwKSwgKDksIDgsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lLCA5LCAtMSkuaW5kaWNlcygxMCksICg5LCA5LCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTm9uZSwgMTAsIC0xKS5pbmRpY2VzKDEwKSwgKDksIDksIC0xKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2xpY2UoLTEwMCwgIDEwMCAgICAgKS5pbmRpY2VzKDEwKSwKKyAgICAgICAgICAgIHNsaWNlKE5vbmUpLmluZGljZXMoMTApCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNsaWNlKDEwMCwgIC0xMDAsICAtMSkuaW5kaWNlcygxMCksCisgICAgICAgICAgICBzbGljZShOb25lLCBOb25lLCAtMSkuaW5kaWNlcygxMCkKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKC0xMDBMLCAxMDBMLCAyTCkuaW5kaWNlcygxMCksICgwLCAxMCwgIDIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMTApWzo6c3lzLm1heGludCAtIDFdLCBbMF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2xpY2UoTm9uZSkuaW5kaWNlcywgMUw8PDEwMCkKKworICAgIGRlZiB0ZXN0X3NldHNsaWNlX3dpdGhvdXRfZ2V0c2xpY2Uoc2VsZik6CisgICAgICAgIHRtcCA9IFtdCisgICAgICAgIGNsYXNzIFgob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX3NldHNsaWNlX18oc2VsZiwgaSwgaiwgayk6CisgICAgICAgICAgICAgICAgdG1wLmFwcGVuZCgoaSwgaiwgaykpCisKKyAgICAgICAgeCA9IFgoKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB4WzE6Ml0gPSA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRtcCwgWygxLCAyLCA0MildKQorCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBzID0gc2xpY2UoMTAsIDIwLCAzKQorICAgICAgICBmb3IgcHJvdG9jb2wgaW4gKDAsMSwyKToKKyAgICAgICAgICAgIHQgPSBsb2FkcyhkdW1wcyhzLCBwcm90b2NvbCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuaW5kaWNlcygxNSksIHQuaW5kaWNlcygxNSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHMpLCBpZCh0KSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU2xpY2VUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zbXRwbGliLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc210cGxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTgwNmM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc210cGxpYi5weQpAQCAtMCwwICsxLDUxNyBAQAoraW1wb3J0IGFzeW5jb3JlCitpbXBvcnQgZW1haWwudXRpbHMKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzbXRwZAoraW1wb3J0IHNtdHBsaWIKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCBzZWxlY3QKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKworSE9TVCA9IHRlc3Rfc3VwcG9ydC5IT1NUCisKK2RlZiBzZXJ2ZXIoZXZ0LCBidWYsIHNlcnYpOgorICAgIHNlcnYubGlzdGVuKDUpCisgICAgZXZ0LnNldCgpCisgICAgdHJ5OgorICAgICAgICBjb25uLCBhZGRyID0gc2Vydi5hY2NlcHQoKQorICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIG4gPSA1MDAKKyAgICAgICAgd2hpbGUgYnVmIGFuZCBuID4gMDoKKyAgICAgICAgICAgIHIsIHcsIGUgPSBzZWxlY3Quc2VsZWN0KFtdLCBbY29ubl0sIFtdKQorICAgICAgICAgICAgaWYgdzoKKyAgICAgICAgICAgICAgICBzZW50ID0gY29ubi5zZW5kKGJ1ZikKKyAgICAgICAgICAgICAgICBidWYgPSBidWZbc2VudDpdCisKKyAgICAgICAgICAgIG4gLT0gMQorCisgICAgICAgIGNvbm4uY2xvc2UoKQorICAgIGZpbmFsbHk6CisgICAgICAgIHNlcnYuY2xvc2UoKQorICAgICAgICBldnQuc2V0KCkKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIEdlbmVyYWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3RocmVhZHMgPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKyAgICAgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDE1KQorICAgICAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaykKKyAgICAgICAgc2VydmFyZ3MgPSAoc2VsZi5ldnQsICIyMjAgSG9sYSBtdW5kb1xuIiwgc2VsZi5zb2NrKQorICAgICAgICBzZWxmLnRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlcnZlciwgYXJncz1zZXJ2YXJncykKKyAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQorICAgICAgICBzZWxmLmV2dC53YWl0KCkKKyAgICAgICAgc2VsZi5ldnQuY2xlYXIoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmV2dC53YWl0KCkKKyAgICAgICAgc2VsZi50aHJlYWQuam9pbigpCisgICAgICAgIHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKKworICAgIGRlZiB0ZXN0QmFzaWMxKHNlbGYpOgorICAgICAgICAjIGNvbm5lY3RzCisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzbXRwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0QmFzaWMyKHNlbGYpOgorICAgICAgICAjIGNvbm5lY3RzLCBpbmNsdWRlIHBvcnQgaW4gaG9zdCBuYW1lCisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoIiVzOiVzIiAlIChIT1NULCBzZWxmLnBvcnQpKQorICAgICAgICBzbXRwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0TG9jYWxIb3N0TmFtZShzZWxmKToKKyAgICAgICAgIyBjaGVjayB0aGF0IHN1cHBsaWVkIGxvY2FsX2hvc3RuYW1lIGlzIHVzZWQKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSJ0ZXN0aG9zdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC5sb2NhbF9ob3N0bmFtZSwgInRlc3Rob3N0IikKKyAgICAgICAgc210cC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFRpbWVvdXREZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAuc29jay5nZXR0aW1lb3V0KCksIDMwKQorICAgICAgICBzbXRwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0VGltZW91dE5vbmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoMzApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCB0aW1lb3V0PU5vbmUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNtdHAuc29jay5nZXR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc210cC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFRpbWVvdXRWYWx1ZShzZWxmKToKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIHRpbWVvdXQ9MzApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCisgICAgICAgIHNtdHAuY2xvc2UoKQorCisKKyMgVGVzdCBzZXJ2ZXIgdGhyZWFkIHVzaW5nIHRoZSBzcGVjaWZpZWQgU01UUCBzZXJ2ZXIgY2xhc3MKK2RlZiBkZWJ1Z2dpbmdfc2VydmVyKHNlcnYsIHNlcnZfZXZ0LCBjbGllbnRfZXZ0KToKKyAgICBzZXJ2X2V2dC5zZXQoKQorCisgICAgdHJ5OgorICAgICAgICBpZiBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKToKKyAgICAgICAgICAgIHBvbGxfZnVuID0gYXN5bmNvcmUucG9sbDIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBvbGxfZnVuID0gYXN5bmNvcmUucG9sbAorCisgICAgICAgIG4gPSAxMDAwCisgICAgICAgIHdoaWxlIGFzeW5jb3JlLnNvY2tldF9tYXAgYW5kIG4gPiAwOgorICAgICAgICAgICAgcG9sbF9mdW4oMC4wMSwgYXN5bmNvcmUuc29ja2V0X21hcCkKKworICAgICAgICAgICAgIyB3aGVuIHRoZSBjbGllbnQgY29udmVyc2F0aW9uIGlzIGZpbmlzaGVkLCBpdCB3aWxsCisgICAgICAgICAgICAjIHNldCBjbGllbnRfZXZ0LCBhbmQgaXQncyB0aGVuIG9rIHRvIGtpbGwgdGhlIHNlcnZlcgorICAgICAgICAgICAgaWYgY2xpZW50X2V2dC5pc19zZXQoKToKKyAgICAgICAgICAgICAgICBzZXJ2LmNsb3NlKCkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBuIC09IDEKKworICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyAgICAgICAgcGFzcworICAgIGZpbmFsbHk6CisgICAgICAgIGlmIG5vdCBjbGllbnRfZXZ0LmlzX3NldCgpOgorICAgICAgICAgICAgIyBhbGxvdyBzb21lIHRpbWUgZm9yIHRoZSBjbGllbnQgdG8gcmVhZCB0aGUgcmVzdWx0CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgICAgIHNlcnYuY2xvc2UoKQorICAgICAgICBhc3luY29yZS5jbG9zZV9hbGwoKQorICAgICAgICBzZXJ2X2V2dC5zZXQoKQorCitNU0dfQkVHSU4gPSAnLS0tLS0tLS0tLSBNRVNTQUdFIEZPTExPV1MgLS0tLS0tLS0tLVxuJworTVNHX0VORCA9ICctLS0tLS0tLS0tLS0gRU5EIE1FU1NBR0UgLS0tLS0tLS0tLS0tXG4nCisKKyMgTk9URTogU29tZSBTTVRQIG9iamVjdHMgaW4gdGhlIHRlc3RzIGJlbG93IGFyZSBjcmVhdGVkIHdpdGggYSBub24tZGVmYXVsdAorIyBsb2NhbF9ob3N0bmFtZSBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IsIHNpbmNlIChvbiBzb21lIHN5c3RlbXMpIHRoZSBGUUROCisjIGxvb2t1cCBjYXVzZWQgYnkgdGhlIGRlZmF1bHQgbG9jYWxfaG9zdG5hbWUgc29tZXRpbWVzIHRha2VzIHNvIGxvbmcgdGhhdCB0aGUKKyMgdGVzdCBzZXJ2ZXIgdGltZXMgb3V0LCBjYXVzaW5nIHRoZSB0ZXN0IHRvIGZhaWwuCisKKyMgVGVzdCBiZWhhdmlvciBvZiBzbXRwZC5EZWJ1Z2dpbmdTZXJ2ZXIKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBEZWJ1Z2dpbmdTZXJ2ZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgdGVtcG9yYXJpbHkgcmVwbGFjZSBzeXMuc3Rkb3V0IHRvIGNhcHR1cmUgRGVidWdnaW5nU2VydmVyIG91dHB1dAorICAgICAgICBzZWxmLm9sZF9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHNlbGYub3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5vdXRwdXQKKworICAgICAgICBzZWxmLl90aHJlYWRzID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisgICAgICAgIHNlbGYuc2Vydl9ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLmNsaWVudF9ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICAjIFBpY2sgYSByYW5kb20gdW51c2VkIHBvcnQgYnkgcGFzc2luZyAwIGZvciB0aGUgcG9ydCBudW1iZXIKKyAgICAgICAgc2VsZi5zZXJ2ID0gc210cGQuRGVidWdnaW5nU2VydmVyKChIT1NULCAwKSwgKCdub3doZXJlJywgLTEpKQorICAgICAgICAjIEtlZXAgYSBub3RlIG9mIHdoYXQgcG9ydCB3YXMgYXNzaWduZWQKKyAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zZXJ2LnNvY2tldC5nZXRzb2NrbmFtZSgpWzFdCisgICAgICAgIHNlcnZfYXJncyA9IChzZWxmLnNlcnYsIHNlbGYuc2Vydl9ldnQsIHNlbGYuY2xpZW50X2V2dCkKKyAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1kZWJ1Z2dpbmdfc2VydmVyLCBhcmdzPXNlcnZfYXJncykKKyAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQorCisgICAgICAgICMgd2FpdCB1bnRpbCBzZXJ2ZXIgdGhyZWFkIGhhcyBhc3NpZ25lZCBhIHBvcnQgbnVtYmVyCisgICAgICAgIHNlbGYuc2Vydl9ldnQud2FpdCgpCisgICAgICAgIHNlbGYuc2Vydl9ldnQuY2xlYXIoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIGluZGljYXRlIHRoYXQgdGhlIGNsaWVudCBpcyBmaW5pc2hlZAorICAgICAgICBzZWxmLmNsaWVudF9ldnQuc2V0KCkKKyAgICAgICAgIyB3YWl0IGZvciB0aGUgc2VydmVyIHRocmVhZCB0byB0ZXJtaW5hdGUKKyAgICAgICAgc2VsZi5zZXJ2X2V2dC53YWl0KCkKKyAgICAgICAgc2VsZi50aHJlYWQuam9pbigpCisgICAgICAgIHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKKyAgICAgICAgIyByZXN0b3JlIHN5cy5zdGRvdXQKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYub2xkX3N0ZG91dAorCisgICAgZGVmIHRlc3RCYXNpYyhzZWxmKToKKyAgICAgICAgIyBjb25uZWN0CisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0zKQorICAgICAgICBzbXRwLnF1aXQoKQorCisgICAgZGVmIHRlc3ROT09QKHNlbGYpOgorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MykKKyAgICAgICAgZXhwZWN0ZWQgPSAoMjUwLCAnT2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAubm9vcCgpLCBleHBlY3RlZCkKKyAgICAgICAgc210cC5xdWl0KCkKKworICAgIGRlZiB0ZXN0UlNFVChzZWxmKToKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTMpCisgICAgICAgIGV4cGVjdGVkID0gKDI1MCwgJ09rJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLnJzZXQoKSwgZXhwZWN0ZWQpCisgICAgICAgIHNtdHAucXVpdCgpCisKKyAgICBkZWYgdGVzdE5vdEltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICAjIEVITE8gaXNuJ3QgaW1wbGVtZW50ZWQgaW4gRGVidWdnaW5nU2VydmVyCisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0zKQorICAgICAgICBleHBlY3RlZCA9ICg1MDIsICdFcnJvcjogY29tbWFuZCAiRUhMTyIgbm90IGltcGxlbWVudGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLmVobG8oKSwgZXhwZWN0ZWQpCisgICAgICAgIHNtdHAucXVpdCgpCisKKyAgICBkZWYgdGVzdFZSRlkoc2VsZik6CisgICAgICAgICMgVlJGWSBpc24ndCBpbXBsZW1lbnRlZCBpbiBEZWJ1Z2dpbmdTZXJ2ZXIKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTMpCisgICAgICAgIGV4cGVjdGVkID0gKDUwMiwgJ0Vycm9yOiBjb21tYW5kICJWUkZZIiBub3QgaW1wbGVtZW50ZWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAudnJmeSgnbm9ib2R5QG5vd2hlcmUuY29tJyksIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAudmVyaWZ5KCdub2JvZHlAbm93aGVyZS5jb20nKSwgZXhwZWN0ZWQpCisgICAgICAgIHNtdHAucXVpdCgpCisKKyAgICBkZWYgdGVzdFNlY29uZEhFTE8oc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCBhIHNlY29uZCBIRUxPIHJldHVybnMgYSBtZXNzYWdlIHRoYXQgaXQncyBhIGR1cGxpY2F0ZQorICAgICAgICAjICh0aGlzIGJlaGF2aW9yIGlzIHNwZWNpZmljIHRvIHNtdHBkLlNNVFBDaGFubmVsKQorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MykKKyAgICAgICAgc210cC5oZWxvKCkKKyAgICAgICAgZXhwZWN0ZWQgPSAoNTAzLCAnRHVwbGljYXRlIEhFTE8vRUhMTycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC5oZWxvKCksIGV4cGVjdGVkKQorICAgICAgICBzbXRwLnF1aXQoKQorCisgICAgZGVmIHRlc3RIRUxQKHNlbGYpOgorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLmhlbHAoKSwgJ0Vycm9yOiBjb21tYW5kICJIRUxQIiBub3QgaW1wbGVtZW50ZWQnKQorICAgICAgICBzbXRwLnF1aXQoKQorCisgICAgZGVmIHRlc3RTZW5kKHNlbGYpOgorICAgICAgICAjIGNvbm5lY3QgYW5kIHNlbmQgbWFpbAorICAgICAgICBtID0gJ0EgdGVzdCBtZXNzYWdlJworICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MykKKyAgICAgICAgc210cC5zZW5kbWFpbCgnSm9obicsICdTYWxseScsIG0pCisgICAgICAgICMgWFhYKG5ub3J3aXR6KTogdGhpcyB0ZXN0IGlzIGZsYWt5IGFuZCBkaWVzIHdpdGggYSBiYWQgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICMgaW4gYXN5bmNvcmUuICBUaGlzIHNsZWVwIG1pZ2h0IGhlbHAsIGJ1dCBzaG91bGQgcmVhbGx5IGJlIGZpeGVkCisgICAgICAgICMgcHJvcGVybHkgYnkgdXNpbmcgYW4gRXZlbnQgdmFyaWFibGUuCisgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgc210cC5xdWl0KCkKKworICAgICAgICBzZWxmLmNsaWVudF9ldnQuc2V0KCkKKyAgICAgICAgc2VsZi5zZXJ2X2V2dC53YWl0KCkKKyAgICAgICAgc2VsZi5vdXRwdXQuZmx1c2goKQorICAgICAgICBtZXhwZWN0ID0gJyVzJXNcbiVzJyAlIChNU0dfQkVHSU4sIG0sIE1TR19FTkQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vdXRwdXQuZ2V0dmFsdWUoKSwgbWV4cGVjdCkKKworCitjbGFzcyBOb25Db25uZWN0aW5nVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3ROb3RDb25uZWN0ZWQoc2VsZik6CisgICAgICAgICMgVGVzdCB2YXJpb3VzIG9wZXJhdGlvbnMgb24gYW4gdW5jb25uZWN0ZWQgU01UUCBvYmplY3QgdGhhdAorICAgICAgICAjIHNob3VsZCByYWlzZSBleGNlcHRpb25zIChhdCBwcmVzZW50IHRoZSBhdHRlbXB0IGluIFNNVFAuc2VuZAorICAgICAgICAjIHRvIHJlZmVyZW5jZSB0aGUgbm9uZXhpc3RlbnQgJ3NvY2snIGF0dHJpYnV0ZSBvZiB0aGUgU01UUCBvYmplY3QKKyAgICAgICAgIyBjYXVzZXMgYW4gQXR0cmlidXRlRXJyb3IpCisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzbXRwbGliLlNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQsIHNtdHAuZWhsbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc210cGxpYi5TTVRQU2VydmVyRGlzY29ubmVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwLnNlbmQsICd0ZXN0IG1zZycpCisKKyAgICBkZWYgdGVzdE5vbm51bWVyaWNQb3J0KHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgbm9uLW51bWVyaWMgcG9ydCByYWlzZXMgc29ja2V0LmVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc210cGxpYi5TTVRQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYWxob3N0IiwgImJvZ3VzIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzbXRwbGliLlNNVFAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbGhvc3Q6Ym9ndXMiKQorCisKKyMgdGVzdCByZXNwb25zZSBvZiBjbGllbnQgdG8gYSBub24tc3VjY2Vzc2Z1bCBIRUxPIG1lc3NhZ2UKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBCYWRIRUxPU2VydmVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm9sZF9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHNlbGYub3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5vdXRwdXQKKworICAgICAgICBzZWxmLl90aHJlYWRzID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisgICAgICAgIHNlbGYuZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dCgxNSkKKyAgICAgICAgc2VsZi5wb3J0ID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2spCisgICAgICAgIHNlcnZhcmdzID0gKHNlbGYuZXZ0LCAiMTk5IG5vIGhlbGxvIGZvciB5b3UhXG4iLCBzZWxmLnNvY2spCisgICAgICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmVyLCBhcmdzPXNlcnZhcmdzKQorICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCisgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorICAgICAgICBzZWxmLmV2dC5jbGVhcigpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQorICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5vbGRfc3Rkb3V0CisKKyAgICBkZWYgdGVzdEZhaWxpbmdIRUxPKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzbXRwbGliLlNNVFBDb25uZWN0RXJyb3IsIHNtdHBsaWIuU01UUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT1NULCBzZWxmLnBvcnQsICdsb2NhbGhvc3QnLCAzKQorCisKK3NpbV91c2VycyA9IHsnTXIuQUBzb21ld2hlcmUuY29tJzonSm9obiBBJywKKyAgICAgICAgICAgICAnTXMuQkBzb21ld2hlcmUuY29tJzonU2FsbHkgQicsCisgICAgICAgICAgICAgJ01ycy5DQHNvbWV3aGVyZWVzbGUuY29tJzonUnV0aCBDJywKKyAgICAgICAgICAgIH0KKworc2ltX2F1dGggPSAoJ01yLkFAc29tZXdoZXJlLmNvbScsICdzb21lcGFzc3dvcmQnKQorc2ltX2NyYW1fbWQ1X2NoYWxsZW5nZSA9ICgnUEVOQ2VVeEZSRUpvVTBObmJtaE5XaXRPTWpOR05uJworICAgICAgICAgICAgICAgICAgICAgICAgICAnZEFaV3gzYjI5a0xtbHVibTl6YjJaMExtTnZiVDQ9JykKK3NpbV9hdXRoX2NyZWRlbnRpYWxzID0geworICAgICdsb2dpbic6ICdUWEl1UVVCemIyMWxkMmhsY21VdVkyOXQnLAorICAgICdwbGFpbic6ICdBRTF5TGtGQWMyOXRaWGRvWlhKbExtTnZiUUJ6YjIxbGNHRnpjM2R2Y21RPScsCisgICAgJ2NyYW0tbWQ1JzogKCdUWElVUVVCWkIyMUxEMkhMQ01VVVkyOVRJREc0T1dRME1KJworICAgICAgICAgICAgICAgICAnS1daR1E0T0ROTU5EQTROVEdYTURSTFpXTVlaSkRNT0RHMScpLAorICAgIH0KK3NpbV9hdXRoX2xvZ2luX3Bhc3N3b3JkID0gJ0MyOVRaWEJIQzNOM0IzSksnCisKK3NpbV9saXN0cyA9IHsnbGlzdC0xJzpbJ01yLkFAc29tZXdoZXJlLmNvbScsJ01ycy5DQHNvbWV3aGVyZWVzbGUuY29tJ10sCisgICAgICAgICAgICAgJ2xpc3QtMic6WydNcy5CQHNvbWV3aGVyZS5jb20nLF0sCisgICAgICAgICAgICB9CisKKyMgU2ltdWxhdGVkIFNNVFAgY2hhbm5lbCAmIHNlcnZlcgorY2xhc3MgU2ltU01UUENoYW5uZWwoc210cGQuU01UUENoYW5uZWwpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4dHJhX2ZlYXR1cmVzLCAqYXJncywgKiprdyk6CisgICAgICAgIHNlbGYuX2V4dHJhZmVhdHVyZXMgPSAnJy5qb2luKAorICAgICAgICAgICAgWyAiMjUwLXswfVxyXG4iLmZvcm1hdCh4KSBmb3IgeCBpbiBleHRyYV9mZWF0dXJlcyBdKQorICAgICAgICBzbXRwZC5TTVRQQ2hhbm5lbC5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprdykKKworICAgIGRlZiBzbXRwX0VITE8oc2VsZiwgYXJnKToKKyAgICAgICAgcmVzcCA9ICgnMjUwLXRlc3Rob3N0XHJcbicKKyAgICAgICAgICAgICAgICAnMjUwLUVYUE5cclxuJworICAgICAgICAgICAgICAgICcyNTAtU0laRSAyMDAwMDAwMFxyXG4nCisgICAgICAgICAgICAgICAgJzI1MC1TVEFSVFRMU1xyXG4nCisgICAgICAgICAgICAgICAgJzI1MC1ERUxJVkVSQllcclxuJykKKyAgICAgICAgcmVzcCA9IHJlc3AgKyBzZWxmLl9leHRyYWZlYXR1cmVzICsgJzI1MCBIRUxQJworICAgICAgICBzZWxmLnB1c2gocmVzcCkKKworICAgIGRlZiBzbXRwX1ZSRlkoc2VsZiwgYXJnKToKKyAgICAgICAgIyBGb3IgbWF4IGNvbXBhdGliaWxpdHkgc210cGxpYiBzaG91bGQgYmUgc2VuZGluZyB0aGUgcmF3IGFkZHJlc3MuCisgICAgICAgIGlmIGFyZyBpbiBzaW1fdXNlcnM6CisgICAgICAgICAgICBzZWxmLnB1c2goJzI1MCAlcyAlcycgJSAoc2ltX3VzZXJzW2FyZ10sIHNtdHBsaWIucXVvdGVhZGRyKGFyZykpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wdXNoKCc1NTAgTm8gc3VjaCB1c2VyOiAlcycgJSBhcmcpCisKKyAgICBkZWYgc210cF9FWFBOKHNlbGYsIGFyZyk6CisgICAgICAgIGxpc3RfbmFtZSA9IGFyZy5sb3dlcigpCisgICAgICAgIGlmIGxpc3RfbmFtZSBpbiBzaW1fbGlzdHM6CisgICAgICAgICAgICB1c2VyX2xpc3QgPSBzaW1fbGlzdHNbbGlzdF9uYW1lXQorICAgICAgICAgICAgZm9yIG4sIHVzZXJfZW1haWwgaW4gZW51bWVyYXRlKHVzZXJfbGlzdCk6CisgICAgICAgICAgICAgICAgcXVvdGVkX2FkZHIgPSBzbXRwbGliLnF1b3RlYWRkcih1c2VyX2VtYWlsKQorICAgICAgICAgICAgICAgIGlmIG4gPCBsZW4odXNlcl9saXN0KSAtIDE6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnMjUwLSVzICVzJyAlIChzaW1fdXNlcnNbdXNlcl9lbWFpbF0sIHF1b3RlZF9hZGRyKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnB1c2goJzI1MCAlcyAlcycgJSAoc2ltX3VzZXJzW3VzZXJfZW1haWxdLCBxdW90ZWRfYWRkcikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnB1c2goJzU1MCBObyBhY2Nlc3MgZm9yIHlvdSEnKQorCisgICAgZGVmIHNtdHBfQVVUSChzZWxmLCBhcmcpOgorICAgICAgICBpZiBhcmcuc3RyaXAoKS5sb3dlcigpPT0nY3JhbS1tZDUnOgorICAgICAgICAgICAgc2VsZi5wdXNoKCczMzQgezB9Jy5mb3JtYXQoc2ltX2NyYW1fbWQ1X2NoYWxsZW5nZSkpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbWVjaCwgYXV0aCA9IGFyZy5zcGxpdCgpCisgICAgICAgIG1lY2ggPSBtZWNoLmxvd2VyKCkKKyAgICAgICAgaWYgbWVjaCBub3QgaW4gc2ltX2F1dGhfY3JlZGVudGlhbHM6CisgICAgICAgICAgICBzZWxmLnB1c2goJzUwNCBhdXRoIHR5cGUgdW5pbXBsZW1lbnRlZCcpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbWVjaCA9PSAncGxhaW4nIGFuZCBhdXRoPT1zaW1fYXV0aF9jcmVkZW50aWFsc1sncGxhaW4nXToKKyAgICAgICAgICAgIHNlbGYucHVzaCgnMjM1IHBsYWluIGF1dGggb2snKQorICAgICAgICBlbGlmIG1lY2g9PSdsb2dpbicgYW5kIGF1dGg9PXNpbV9hdXRoX2NyZWRlbnRpYWxzWydsb2dpbiddOgorICAgICAgICAgICAgc2VsZi5wdXNoKCczMzQgUGFzc3dvcmQ6JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucHVzaCgnNTUwIE5vIGFjY2VzcyBmb3IgeW91IScpCisKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICByYWlzZQorCisKK2NsYXNzIFNpbVNNVFBTZXJ2ZXIoc210cGQuU01UUFNlcnZlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzZWxmLl9leHRyYV9mZWF0dXJlcyA9IFtdCisgICAgICAgIHNtdHBkLlNNVFBTZXJ2ZXIuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpCisKKyAgICBkZWYgaGFuZGxlX2FjY2VwdChzZWxmKToKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuYWNjZXB0KCkKKyAgICAgICAgc2VsZi5fU01UUGNoYW5uZWwgPSBTaW1TTVRQQ2hhbm5lbChzZWxmLl9leHRyYV9mZWF0dXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCBjb25uLCBhZGRyKQorCisgICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBhZGRfZmVhdHVyZShzZWxmLCBmZWF0dXJlKToKKyAgICAgICAgc2VsZi5fZXh0cmFfZmVhdHVyZXMuYXBwZW5kKGZlYXR1cmUpCisKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICByYWlzZQorCisKKyMgVGVzdCB2YXJpb3VzIFNNVFAgJiBFU01UUCBjb21tYW5kcy9iZWhhdmlvcnMgdGhhdCByZXF1aXJlIGEgc2ltdWxhdGVkIHNlcnZlcgorIyAoaS5lLiwgc29tZXRoaW5nIHdpdGggbW9yZSBmZWF0dXJlcyB0aGFuIERlYnVnZ2luZ1NlcnZlcikKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBTTVRQU2ltVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl90aHJlYWRzID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCisgICAgICAgIHNlbGYuc2Vydl9ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLmNsaWVudF9ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICAjIFBpY2sgYSByYW5kb20gdW51c2VkIHBvcnQgYnkgcGFzc2luZyAwIGZvciB0aGUgcG9ydCBudW1iZXIKKyAgICAgICAgc2VsZi5zZXJ2ID0gU2ltU01UUFNlcnZlcigoSE9TVCwgMCksICgnbm93aGVyZScsIC0xKSkKKyAgICAgICAgIyBLZWVwIGEgbm90ZSBvZiB3aGF0IHBvcnQgd2FzIGFzc2lnbmVkCisgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuc2Vydi5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQorICAgICAgICBzZXJ2X2FyZ3MgPSAoc2VsZi5zZXJ2LCBzZWxmLnNlcnZfZXZ0LCBzZWxmLmNsaWVudF9ldnQpCisgICAgICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZGVidWdnaW5nX3NlcnZlciwgYXJncz1zZXJ2X2FyZ3MpCisgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKKworICAgICAgICAjIHdhaXQgdW50aWwgc2VydmVyIHRocmVhZCBoYXMgYXNzaWduZWQgYSBwb3J0IG51bWJlcgorICAgICAgICBzZWxmLnNlcnZfZXZ0LndhaXQoKQorICAgICAgICBzZWxmLnNlcnZfZXZ0LmNsZWFyKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBpbmRpY2F0ZSB0aGF0IHRoZSBjbGllbnQgaXMgZmluaXNoZWQKKyAgICAgICAgc2VsZi5jbGllbnRfZXZ0LnNldCgpCisgICAgICAgICMgd2FpdCBmb3IgdGhlIHNlcnZlciB0aHJlYWQgdG8gdGVybWluYXRlCisgICAgICAgIHNlbGYuc2Vydl9ldnQud2FpdCgpCisgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oKQorICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCisKKyAgICBkZWYgdGVzdEJhc2ljKHNlbGYpOgorICAgICAgICAjIHNtb2tlIHRlc3QKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTE1KQorICAgICAgICBzbXRwLnF1aXQoKQorCisgICAgZGVmIHRlc3RFSExPKHNlbGYpOgorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MTUpCisKKyAgICAgICAgIyBubyBmZWF0dXJlcyBzaG91bGQgYmUgcHJlc2VudCBiZWZvcmUgdGhlIEVITE8KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLmVzbXRwX2ZlYXR1cmVzLCB7fSkKKworICAgICAgICAjIGZlYXR1cmVzIGV4cGVjdGVkIGZyb20gdGhlIHRlc3Qgc2VydmVyCisgICAgICAgIGV4cGVjdGVkX2ZlYXR1cmVzID0geydleHBuJzonJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemUnOiAnMjAwMDAwMDAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhcnR0bHMnOiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlbGl2ZXJieSc6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVscCc6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgc210cC5laGxvKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLmVzbXRwX2ZlYXR1cmVzLCBleHBlY3RlZF9mZWF0dXJlcykKKyAgICAgICAgZm9yIGsgaW4gZXhwZWN0ZWRfZmVhdHVyZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc210cC5oYXNfZXh0bihrKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzbXRwLmhhc19leHRuKCd1bnN1cHBvcnRlZC1mZWF0dXJlJykpCisgICAgICAgIHNtdHAucXVpdCgpCisKKyAgICBkZWYgdGVzdFZSRlkoc2VsZik6CisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0xNSkKKworICAgICAgICBmb3IgZW1haWwsIG5hbWUgaW4gc2ltX3VzZXJzLml0ZW1zKCk6CisgICAgICAgICAgICBleHBlY3RlZF9rbm93biA9ICgyNTAsICclcyAlcycgJSAobmFtZSwgc210cGxpYi5xdW90ZWFkZHIoZW1haWwpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC52cmZ5KGVtYWlsKSwgZXhwZWN0ZWRfa25vd24pCisKKyAgICAgICAgdSA9ICdub2JvZHlAbm93aGVyZS5jb20nCisgICAgICAgIGV4cGVjdGVkX3Vua25vd24gPSAoNTUwLCAnTm8gc3VjaCB1c2VyOiAlcycgJSB1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAudnJmeSh1KSwgZXhwZWN0ZWRfdW5rbm93bikKKyAgICAgICAgc210cC5xdWl0KCkKKworICAgIGRlZiB0ZXN0RVhQTihzZWxmKToKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTE1KQorCisgICAgICAgIGZvciBsaXN0bmFtZSwgbWVtYmVycyBpbiBzaW1fbGlzdHMuaXRlbXMoKToKKyAgICAgICAgICAgIHVzZXJzID0gW10KKyAgICAgICAgICAgIGZvciBtIGluIG1lbWJlcnM6CisgICAgICAgICAgICAgICAgdXNlcnMuYXBwZW5kKCclcyAlcycgJSAoc2ltX3VzZXJzW21dLCBzbXRwbGliLnF1b3RlYWRkcihtKSkpCisgICAgICAgICAgICBleHBlY3RlZF9rbm93biA9ICgyNTAsICdcbicuam9pbih1c2VycykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAuZXhwbihsaXN0bmFtZSksIGV4cGVjdGVkX2tub3duKQorCisgICAgICAgIHUgPSAnUFNVLU1lbWJlcnMtTGlzdCcKKyAgICAgICAgZXhwZWN0ZWRfdW5rbm93biA9ICg1NTAsICdObyBhY2Nlc3MgZm9yIHlvdSEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAuZXhwbih1KSwgZXhwZWN0ZWRfdW5rbm93bikKKyAgICAgICAgc210cC5xdWl0KCkKKworICAgIGRlZiB0ZXN0QVVUSF9QTEFJTihzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2LmFkZF9mZWF0dXJlKCJBVVRIIFBMQUlOIikKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTE1KQorCisgICAgICAgIGV4cGVjdGVkX2F1dGhfb2sgPSAoMjM1LCBiJ3BsYWluIGF1dGggb2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtdHAubG9naW4oc2ltX2F1dGhbMF0sIHNpbV9hdXRoWzFdKSwgZXhwZWN0ZWRfYXV0aF9vaykKKworICAgICMgU2ltU01UUENoYW5uZWwgZG9lc24ndCBmdWxseSBzdXBwb3J0IExPR0lOIG9yIENSQU0tTUQ1IGF1dGggYmVjYXVzZSB0aGV5CisgICAgIyByZXF1aXJlIGEgc3luY2hyb25vdXMgcmVhZCB0byBvYnRhaW4gdGhlIGNyZWRlbnRpYWxzLi4uc28gaW5zdGVhZCBzbXRwZAorICAgICMgc2VlcyB0aGUgY3JlZGVudGlhbCBzZW50IGJ5IHNtdHBsaWIncyBsb2dpbiBtZXRob2QgYXMgYW4gdW5rbm93biBjb21tYW5kLAorICAgICMgd2hpY2ggcmVzdWx0cyBpbiBzbXRwbGliIHJhaXNpbmcgYW4gYXV0aCBlcnJvci4gIEZvcnR1bmF0ZWx5IHRoZSBlcnJvcgorICAgICMgbWVzc2FnZSBjb250YWlucyB0aGUgZW5jb2RlZCBjcmVkZW50aWFsLCBzbyB3ZSBjYW4gcGFydGlhbGx5IGNoZWNrIHRoYXQgaXQKKyAgICAjIHdhcyBnZW5lcmF0ZWQgY29ycmVjdGx5IChwYXJ0aWFsbHksIGJlY2F1c2UgdGhlICd3b3JkJyBpcyB1cHBlcmNhc2VkIGluCisgICAgIyB0aGUgZXJyb3IgbWVzc2FnZSkuCisKKyAgICBkZWYgdGVzdEFVVEhfTE9HSU4oc2VsZik6CisgICAgICAgIHNlbGYuc2Vydi5hZGRfZmVhdHVyZSgiQVVUSCBMT0dJTiIpCisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0xNSkKKyAgICAgICAgdHJ5OiBzbXRwLmxvZ2luKHNpbV9hdXRoWzBdLCBzaW1fYXV0aFsxXSkKKyAgICAgICAgZXhjZXB0IHNtdHBsaWIuU01UUEF1dGhlbnRpY2F0aW9uRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgaWYgc2ltX2F1dGhfbG9naW5fcGFzc3dvcmQgbm90IGluIHN0cihlcnIpOgorICAgICAgICAgICAgICAgIHJhaXNlICJleHBlY3RlZCBlbmNvZGVkIHBhc3N3b3JkIG5vdCBmb3VuZCBpbiBlcnJvciBtZXNzYWdlIgorCisgICAgZGVmIHRlc3RBVVRIX0NSQU1fTUQ1KHNlbGYpOgorICAgICAgICBzZWxmLnNlcnYuYWRkX2ZlYXR1cmUoIkFVVEggQ1JBTS1NRDUiKQorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MTUpCisKKyAgICAgICAgdHJ5OiBzbXRwLmxvZ2luKHNpbV9hdXRoWzBdLCBzaW1fYXV0aFsxXSkKKyAgICAgICAgZXhjZXB0IHNtdHBsaWIuU01UUEF1dGhlbnRpY2F0aW9uRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgaWYgc2ltX2F1dGhfY3JlZGVudGlhbHNbJ2NyYW0tbWQ1J10gbm90IGluIHN0cihlcnIpOgorICAgICAgICAgICAgICAgIHJhaXNlICJleHBlY3RlZCBlbmNvZGVkIGNyZWRlbnRpYWxzIG5vdCBmb3VuZCBpbiBlcnJvciBtZXNzYWdlIgorCisgICAgI1RPRE86IGFkZCB0ZXN0cyBmb3IgY29ycmVjdCBBVVRIIG1ldGhvZCBmYWxsYmFjayBub3cgdGhhdCB0aGUKKyAgICAjdGVzdCBpbmZyYXN0cnVjdHVyZSBjYW4gc3VwcG9ydCBpdC4KKworCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChHZW5lcmFsVGVzdHMsIERlYnVnZ2luZ1NlcnZlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uQ29ubmVjdGluZ1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFkSEVMT1NlcnZlclRlc3RzLCBTTVRQU2ltVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NtdHBuZXQucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zbXRwbmV0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYzM5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zbXRwbmV0LnB5CkBAIC0wLDAgKzEsMzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgc210cGxpYgorCit0ZXN0X3N1cHBvcnQucmVxdWlyZXMoIm5ldHdvcmsiKQorCitjbGFzcyBTbXRwU1NMVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdGVzdFNlcnZlciA9ICdzbXRwLmdtYWlsLmNvbScKKyAgICByZW1vdGVQb3J0ID0gNDY1CisKKyAgICBkZWYgdGVzdF9jb25uZWN0KHNlbGYpOgorICAgICAgICB0ZXN0X3N1cHBvcnQuZ2V0X2F0dHJpYnV0ZShzbXRwbGliLCAnU01UUF9TU0wnKQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi50ZXN0U2VydmVyKToKKyAgICAgICAgICAgIHNlcnZlciA9IHNtdHBsaWIuU01UUF9TU0woc2VsZi50ZXN0U2VydmVyLCBzZWxmLnJlbW90ZVBvcnQpCisgICAgICAgIHNlcnZlci5laGxvKCkKKyAgICAgICAgc2VydmVyLnF1aXQoKQorCisgICAgZGVmIHRlc3RfY29ubmVjdF9kZWZhdWx0X3BvcnQoc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5nZXRfYXR0cmlidXRlKHNtdHBsaWIsICdTTVRQX1NTTCcpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChzZWxmLnRlc3RTZXJ2ZXIpOgorICAgICAgICAgICAgc2VydmVyID0gc210cGxpYi5TTVRQX1NTTChzZWxmLnRlc3RTZXJ2ZXIpCisgICAgICAgIHNlcnZlci5laGxvKCkKKyAgICAgICAgc2VydmVyLnF1aXQoKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTbXRwU1NMVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc29ja2V0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc29ja2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMWU1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zb2NrZXQucHkKQEAgLTAsMCArMSwxNzI0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBfdGVzdGNhcGkKK2ltcG9ydCB0aW1lCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgUXVldWUKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IGFycmF5CitpbXBvcnQgY29udGV4dGxpYgorZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IG1hdGgKKworZGVmIHRyeV9hZGRyZXNzKGhvc3QsIHBvcnQ9MCwgZmFtaWx5PXNvY2tldC5BRl9JTkVUKToKKyAgICAiIiJUcnkgdG8gYmluZCBhIHNvY2tldCBvbiB0aGUgZ2l2ZW4gaG9zdDpwb3J0IGFuZCByZXR1cm4gVHJ1ZQorICAgIGlmIHRoYXQgaGFzIGJlZW4gcG9zc2libGUuIiIiCisgICAgdHJ5OgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHksIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc29jay5iaW5kKChob3N0LCBwb3J0KSkKKyAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgc29ja2V0LmdhaWVycm9yKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgIHJldHVybiBUcnVlCisKK0hPU1QgPSB0ZXN0X3N1cHBvcnQuSE9TVAorTVNHID0gYidNaWNoYWVsIEdpbGZpeCB3YXMgaGVyZVxuJworU1VQUE9SVFNfSVBWNiA9IHNvY2tldC5oYXNfaXB2NiBhbmQgdHJ5X2FkZHJlc3MoJzo6MScsIGZhbWlseT1zb2NrZXQuQUZfSU5FVDYpCisKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkCisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZCA9IE5vbmUKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKK0hPU1QgPSB0ZXN0X3N1cHBvcnQuSE9TVAorTVNHID0gJ01pY2hhZWwgR2lsZml4IHdhcyBoZXJlXG4nCisKK2NsYXNzIFNvY2tldFRDUFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnYgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zZXJ2KQorICAgICAgICBzZWxmLnNlcnYubGlzdGVuKDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc2Vydi5jbG9zZSgpCisgICAgICAgIHNlbGYuc2VydiA9IE5vbmUKKworY2xhc3MgU29ja2V0VURQVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VydiA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgICAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc2VydikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2LmNsb3NlKCkKKyAgICAgICAgc2VsZi5zZXJ2ID0gTm9uZQorCitjbGFzcyBUaHJlYWRhYmxlVGVzdDoKKyAgICAiIiJUaHJlYWRhYmxlIFRlc3QgY2xhc3MKKworICAgIFRoZSBUaHJlYWRhYmxlVGVzdCBjbGFzcyBtYWtlcyBpdCBlYXN5IHRvIGNyZWF0ZSBhIHRocmVhZGVkCisgICAgY2xpZW50L3NlcnZlciBwYWlyIGZyb20gYW4gZXhpc3RpbmcgdW5pdCB0ZXN0LiBUbyBjcmVhdGUgYQorICAgIG5ldyB0aHJlYWRlZCBjbGFzcyBmcm9tIGFuIGV4aXN0aW5nIHVuaXQgdGVzdCwgdXNlIG11bHRpcGxlCisgICAgaW5oZXJpdGFuY2U6CisKKyAgICAgICAgY2xhc3MgTmV3Q2xhc3MgKE9sZENsYXNzLCBUaHJlYWRhYmxlVGVzdCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICBUaGlzIGNsYXNzIGRlZmluZXMgdHdvIG5ldyBmaXh0dXJlIGZ1bmN0aW9ucyB3aXRoIG9idmlvdXMKKyAgICBwdXJwb3NlcyBmb3Igb3ZlcnJpZGluZzoKKworICAgICAgICBjbGllbnRTZXRVcCAoKQorICAgICAgICBjbGllbnRUZWFyRG93biAoKQorCisgICAgQW55IG5ldyB0ZXN0IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGNsYXNzIG11c3QgdGhlbiBkZWZpbmUKKyAgICB0ZXN0cyBpbiBwYWlycywgd2hlcmUgdGhlIHRlc3QgbmFtZSBpcyBwcmVjZWVkZWQgd2l0aCBhCisgICAgJ18nIHRvIGluZGljYXRlIHRoZSBjbGllbnQgcG9ydGlvbiBvZiB0aGUgdGVzdC4gRXg6CisKKyAgICAgICAgZGVmIHRlc3RGb28oc2VsZik6CisgICAgICAgICAgICAjIFNlcnZlciBwb3J0aW9uCisKKyAgICAgICAgZGVmIF90ZXN0Rm9vKHNlbGYpOgorICAgICAgICAgICAgIyBDbGllbnQgcG9ydGlvbgorCisgICAgQW55IGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoZSBjbGllbnRzIGR1cmluZyB0aGVpciB0ZXN0cworICAgIGFyZSBjYXVnaHQgYW5kIHRyYW5zZmVycmVkIHRvIHRoZSBtYWluIHRocmVhZCB0byBhbGVydAorICAgIHRoZSB0ZXN0aW5nIGZyYW1ld29yay4KKworICAgIE5vdGUsIHRoZSBzZXJ2ZXIgc2V0dXAgZnVuY3Rpb24gY2Fubm90IGNhbGwgYW55IGJsb2NraW5nCisgICAgZnVuY3Rpb25zIHRoYXQgcmVseSBvbiB0aGUgY2xpZW50IHRocmVhZCBkdXJpbmcgc2V0dXAsCisgICAgdW5sZXNzIHNlcnZlckV4cGxpY2l0UmVhZHkoKSBpcyBjYWxsZWQganVzdCBiZWZvcmUKKyAgICB0aGUgYmxvY2tpbmcgY2FsbCAoc3VjaCBhcyBpbiBzZXR0aW5nIHVwIGEgY2xpZW50L3NlcnZlcgorICAgIGNvbm5lY3Rpb24gYW5kIHBlcmZvcm1pbmcgdGhlIGFjY2VwdCgpIGluIHNldFVwKCkuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICMgU3dhcCB0aGUgdHJ1ZSBzZXR1cCBmdW5jdGlvbgorICAgICAgICBzZWxmLl9fc2V0VXAgPSBzZWxmLnNldFVwCisgICAgICAgIHNlbGYuX190ZWFyRG93biA9IHNlbGYudGVhckRvd24KKyAgICAgICAgc2VsZi5zZXRVcCA9IHNlbGYuX3NldFVwCisgICAgICAgIHNlbGYudGVhckRvd24gPSBzZWxmLl90ZWFyRG93bgorCisgICAgZGVmIHNlcnZlckV4cGxpY2l0UmVhZHkoc2VsZik6CisgICAgICAgICIiIlRoaXMgbWV0aG9kIGFsbG93cyB0aGUgc2VydmVyIHRvIGV4cGxpY2l0bHkgaW5kaWNhdGUgdGhhdAorICAgICAgICBpdCB3YW50cyB0aGUgY2xpZW50IHRocmVhZCB0byBwcm9jZWVkLiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUKKyAgICAgICAgc2VydmVyIGlzIGFib3V0IHRvIGV4ZWN1dGUgYSBibG9ja2luZyByb3V0aW5lIHRoYXQgaXMKKyAgICAgICAgZGVwZW5kZW50IHVwb24gdGhlIGNsaWVudCB0aHJlYWQgZHVyaW5nIGl0cyBzZXR1cCByb3V0aW5lLiIiIgorICAgICAgICBzZWxmLnNlcnZlcl9yZWFkeS5zZXQoKQorCisgICAgZGVmIF9zZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXJfcmVhZHkgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLmNsaWVudF9yZWFkeSA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHNlbGYuZG9uZSA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHNlbGYucXVldWUgPSBRdWV1ZS5RdWV1ZSgxKQorCisgICAgICAgICMgRG8gc29tZSBtdW5naW5nIHRvIHN0YXJ0IHRoZSBjbGllbnQgdGVzdC4KKyAgICAgICAgbWV0aG9kbmFtZSA9IHNlbGYuaWQoKQorICAgICAgICBpID0gbWV0aG9kbmFtZS5yZmluZCgnLicpCisgICAgICAgIG1ldGhvZG5hbWUgPSBtZXRob2RuYW1lW2krMTpdCisgICAgICAgIHRlc3RfbWV0aG9kID0gZ2V0YXR0cihzZWxmLCAnXycgKyBtZXRob2RuYW1lKQorICAgICAgICBzZWxmLmNsaWVudF90aHJlYWQgPSB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZCgKKyAgICAgICAgICAgIHNlbGYuY2xpZW50UnVuLCAodGVzdF9tZXRob2QsKSkKKworICAgICAgICBzZWxmLl9fc2V0VXAoKQorICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXJfcmVhZHkuaXNfc2V0KCk6CisgICAgICAgICAgICBzZWxmLnNlcnZlcl9yZWFkeS5zZXQoKQorICAgICAgICBzZWxmLmNsaWVudF9yZWFkeS53YWl0KCkKKworICAgIGRlZiBfdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuX190ZWFyRG93bigpCisgICAgICAgIHNlbGYuZG9uZS53YWl0KCkKKworICAgICAgICBpZiBub3Qgc2VsZi5xdWV1ZS5lbXB0eSgpOgorICAgICAgICAgICAgbXNnID0gc2VsZi5xdWV1ZS5nZXQoKQorICAgICAgICAgICAgc2VsZi5mYWlsKG1zZykKKworICAgIGRlZiBjbGllbnRSdW4oc2VsZiwgdGVzdF9mdW5jKToKKyAgICAgICAgc2VsZi5zZXJ2ZXJfcmVhZHkud2FpdCgpCisgICAgICAgIHNlbGYuY2xpZW50U2V0VXAoKQorICAgICAgICBzZWxmLmNsaWVudF9yZWFkeS5zZXQoKQorICAgICAgICBpZiBub3QgY2FsbGFibGUodGVzdF9mdW5jKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidGVzdF9mdW5jIG11c3QgYmUgYSBjYWxsYWJsZSBmdW5jdGlvbi4iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2Z1bmMoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBzdHJlcnJvcjoKKyAgICAgICAgICAgIHNlbGYucXVldWUucHV0KHN0cmVycm9yKQorICAgICAgICBzZWxmLmNsaWVudFRlYXJEb3duKCkKKworICAgIGRlZiBjbGllbnRTZXRVcChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiY2xpZW50U2V0VXAgbXVzdCBiZSBpbXBsZW1lbnRlZC4iKQorCisgICAgZGVmIGNsaWVudFRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmRvbmUuc2V0KCkKKyAgICAgICAgdGhyZWFkLmV4aXQoKQorCitjbGFzcyBUaHJlYWRlZFRDUFNvY2tldFRlc3QoU29ja2V0VENQVGVzdCwgVGhyZWFkYWJsZVRlc3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKKyAgICAgICAgU29ja2V0VENQVGVzdC5fX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPW1ldGhvZE5hbWUpCisgICAgICAgIFRocmVhZGFibGVUZXN0Ll9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgY2xpZW50U2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorCisgICAgZGVmIGNsaWVudFRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNsaS5jbG9zZSgpCisgICAgICAgIHNlbGYuY2xpID0gTm9uZQorICAgICAgICBUaHJlYWRhYmxlVGVzdC5jbGllbnRUZWFyRG93bihzZWxmKQorCitjbGFzcyBUaHJlYWRlZFVEUFNvY2tldFRlc3QoU29ja2V0VURQVGVzdCwgVGhyZWFkYWJsZVRlc3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKKyAgICAgICAgU29ja2V0VURQVGVzdC5fX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPW1ldGhvZE5hbWUpCisgICAgICAgIFRocmVhZGFibGVUZXN0Ll9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgY2xpZW50U2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCisKKyAgICBkZWYgY2xpZW50VGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY2xpLmNsb3NlKCkKKyAgICAgICAgc2VsZi5jbGkgPSBOb25lCisgICAgICAgIFRocmVhZGFibGVUZXN0LmNsaWVudFRlYXJEb3duKHNlbGYpCisKK2NsYXNzIFNvY2tldENvbm5lY3RlZFRlc3QoVGhyZWFkZWRUQ1BTb2NrZXRUZXN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgIFRocmVhZGVkVENQU29ja2V0VGVzdC5fX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPW1ldGhvZE5hbWUpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIFRocmVhZGVkVENQU29ja2V0VGVzdC5zZXRVcChzZWxmKQorICAgICAgICAjIEluZGljYXRlIGV4cGxpY2l0bHkgd2UncmUgcmVhZHkgZm9yIHRoZSBjbGllbnQgdGhyZWFkIHRvCisgICAgICAgICMgcHJvY2VlZCBhbmQgdGhlbiBwZXJmb3JtIHRoZSBibG9ja2luZyBjYWxsIHRvIGFjY2VwdAorICAgICAgICBzZWxmLnNlcnZlckV4cGxpY2l0UmVhZHkoKQorICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgIHNlbGYuY2xpX2Nvbm4gPSBjb25uCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY2xpX2Nvbm4uY2xvc2UoKQorICAgICAgICBzZWxmLmNsaV9jb25uID0gTm9uZQorICAgICAgICBUaHJlYWRlZFRDUFNvY2tldFRlc3QudGVhckRvd24oc2VsZikKKworICAgIGRlZiBjbGllbnRTZXRVcChzZWxmKToKKyAgICAgICAgVGhyZWFkZWRUQ1BTb2NrZXRUZXN0LmNsaWVudFNldFVwKHNlbGYpCisgICAgICAgIHNlbGYuY2xpLmNvbm5lY3QoKEhPU1QsIHNlbGYucG9ydCkpCisgICAgICAgIHNlbGYuc2Vydl9jb25uID0gc2VsZi5jbGkKKworICAgIGRlZiBjbGllbnRUZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2X2Nvbm4uY2xvc2UoKQorICAgICAgICBzZWxmLnNlcnZfY29ubiA9IE5vbmUKKyAgICAgICAgVGhyZWFkZWRUQ1BTb2NrZXRUZXN0LmNsaWVudFRlYXJEb3duKHNlbGYpCisKK2NsYXNzIFNvY2tldFBhaXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBUaHJlYWRhYmxlVGVzdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgorICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5fX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPW1ldGhvZE5hbWUpCisgICAgICAgIFRocmVhZGFibGVUZXN0Ll9faW5pdF9fKHNlbGYpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2Vydiwgc2VsZi5jbGkgPSBzb2NrZXQuc29ja2V0cGFpcigpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc2Vydi5jbG9zZSgpCisgICAgICAgIHNlbGYuc2VydiA9IE5vbmUKKworICAgIGRlZiBjbGllbnRTZXRVcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNsaWVudFRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmNsaS5jbG9zZSgpCisgICAgICAgIHNlbGYuY2xpID0gTm9uZQorICAgICAgICBUaHJlYWRhYmxlVGVzdC5jbGllbnRUZWFyRG93bihzZWxmKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBCZWdpbiBUZXN0cworCitjbGFzcyBHZW5lcmFsTW9kdWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgcCA9IHByb3h5KHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5maWxlbm8oKSwgcy5maWxlbm8oKSkKKyAgICAgICAgcy5jbG9zZSgpCisgICAgICAgIHMgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAuZmlsZW5vKCkKKyAgICAgICAgZXhjZXB0IFJlZmVyZW5jZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdTb2NrZXQgcHJveHkgc3RpbGwgZXhpc3RzJykKKworICAgIGRlZiB0ZXN0U29ja2V0RXJyb3Ioc2VsZik6CisgICAgICAgICMgVGVzdGluZyBzb2NrZXQgbW9kdWxlIGV4Y2VwdGlvbnMKKyAgICAgICAgZGVmIHJhaXNlX2Vycm9yKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IKKyAgICAgICAgZGVmIHJhaXNlX2hlcnJvcigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmhlcnJvcgorICAgICAgICBkZWYgcmFpc2VfZ2FpZXJyb3IoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHJhaXNlIHNvY2tldC5nYWllcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHJhaXNlX2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIHJhaXNpbmcgc29ja2V0IGV4Y2VwdGlvbi4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHJhaXNlX2hlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciByYWlzaW5nIHNvY2tldCBleGNlcHRpb24uIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCByYWlzZV9nYWllcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciByYWlzaW5nIHNvY2tldCBleGNlcHRpb24uIikKKworICAgIGRlZiB0ZXN0U2VuZHRvRXJyb3JzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgdGhhdCBzZW5kdG8gZG9lbnMndCBtYXNrcyBmYWlsdXJlcy4gU2VlICMxMDE2OS4KKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKyAgICAgICAgcy5iaW5kKCgnJywgMCkpCisgICAgICAgIHNvY2tuYW1lID0gcy5nZXRzb2NrbmFtZSgpCisgICAgICAgICMgMiBhcmdzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yKToKKyAgICAgICAgICAgIHMuc2VuZHRvKHUnXHUyNjIwJywgc29ja25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHMuc2VuZHRvKDVqLCBzb2NrbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbm90IGNvbXBsZXgnLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcy5zZW5kdG8oJ2ZvbycsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ25vdCBOb25lVHlwZScsIHN0cihjbS5leGNlcHRpb24pKQorICAgICAgICAjIDMgYXJncworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvcik6CisgICAgICAgICAgICBzLnNlbmR0byh1J1x1MjYyMCcsIDAsIHNvY2tuYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CisgICAgICAgICAgICBzLnNlbmR0byg1aiwgMCwgc29ja25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ25vdCBjb21wbGV4Jywgc3RyKGNtLmV4Y2VwdGlvbikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHMuc2VuZHRvKCdmb28nLCAwLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEluKCdub3QgTm9uZVR5cGUnLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcy5zZW5kdG8oJ2ZvbycsICdiYXInLCBzb2NrbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYW4gaW50ZWdlciBpcyByZXF1aXJlZCcsIHN0cihjbS5leGNlcHRpb24pKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CisgICAgICAgICAgICBzLnNlbmR0bygnZm9vJywgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYW4gaW50ZWdlciBpcyByZXF1aXJlZCcsIHN0cihjbS5leGNlcHRpb24pKQorICAgICAgICAjIHdyb25nIG51bWJlciBvZiBhcmdzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHMuc2VuZHRvKCdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEluKCcoMSBnaXZlbiknLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcy5zZW5kdG8oJ2ZvbycsIDAsIHNvY2tuYW1lLCA0KQorICAgICAgICBzZWxmLmFzc2VydEluKCcoNCBnaXZlbiknLCBzdHIoY20uZXhjZXB0aW9uKSkKKworCisgICAgZGVmIHRlc3RDcnVjaWFsQ29uc3RhbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgZm9yIG1pc3Npb24gY3JpdGljYWwgY29uc3RhbnRzCisgICAgICAgIHNvY2tldC5BRl9JTkVUCisgICAgICAgIHNvY2tldC5TT0NLX1NUUkVBTQorICAgICAgICBzb2NrZXQuU09DS19ER1JBTQorICAgICAgICBzb2NrZXQuU09DS19SQVcKKyAgICAgICAgc29ja2V0LlNPQ0tfUkRNCisgICAgICAgIHNvY2tldC5TT0NLX1NFUVBBQ0tFVAorICAgICAgICBzb2NrZXQuU09MX1NPQ0tFVAorICAgICAgICBzb2NrZXQuU09fUkVVU0VBRERSCisKKyAgICBkZWYgdGVzdEhvc3RuYW1lUmVzKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgaG9zdG5hbWUgcmVzb2x1dGlvbiBtZWNoYW5pc21zCisgICAgICAgIGhvc3RuYW1lID0gc29ja2V0LmdldGhvc3RuYW1lKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaXAgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShob3N0bmFtZSkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICMgUHJvYmFibHkgbmFtZSBsb29rdXAgd2Fzbid0IHNldCB1cCByaWdodDsgc2tpcCB0aGlzIHRlc3QKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXAuZmluZCgnLicpID49IDAsICJFcnJvciByZXNvbHZpbmcgaG9zdCB0byBpcC4iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBobmFtZSwgYWxpYXNlcywgaXBhZGRycyA9IHNvY2tldC5nZXRob3N0YnlhZGRyKGlwKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgIyBQcm9iYWJseSBhIHNpbWlsYXIgcHJvYmxlbSBhcyBhYm92ZTsgc2tpcCB0aGlzIHRlc3QKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBhbGxfaG9zdF9uYW1lcyA9IFtob3N0bmFtZSwgaG5hbWVdICsgYWxpYXNlcworICAgICAgICBmcWhuID0gc29ja2V0LmdldGZxZG4oaXApCisgICAgICAgIGlmIG5vdCBmcWhuIGluIGFsbF9ob3N0X25hbWVzOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0ZXN0aW5nIGhvc3QgcmVzb2x1dGlvbiBtZWNoYW5pc21zLiAoZnFkbjogJXMsIGFsbDogJXMpIiAlIChmcWhuLCByZXByKGFsbF9ob3N0X25hbWVzKSkpCisKKyAgICBkZWYgdGVzdFJlZkNvdW50R2V0TmFtZUluZm8oc2VsZik6CisgICAgICAgICMgVGVzdGluZyByZWZlcmVuY2UgY291bnQgZm9yIGdldG5hbWVpbmZvCisgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAiZ2V0cmVmY291bnQiKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIE9uIHNvbWUgdmVyc2lvbnMsIHRoaXMgbG9zZXMgYSByZWZlcmVuY2UKKyAgICAgICAgICAgICAgICBvcmlnID0gc3lzLmdldHJlZmNvdW50KF9fbmFtZV9fKQorICAgICAgICAgICAgICAgIHNvY2tldC5nZXRuYW1laW5mbyhfX25hbWVfXywwKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWZjb3VudChfX25hbWVfXyksIG9yaWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic29ja2V0LmdldG5hbWVpbmZvIGxvc2VzIGEgcmVmZXJlbmNlIikKKworICAgIGRlZiB0ZXN0SW50ZXJwcmV0ZXJDcmFzaChzZWxmKToKKyAgICAgICAgIyBNYWtpbmcgc3VyZSBnZXRuYW1laW5mbyBkb2Vzbid0IGNyYXNoIHRoZSBpbnRlcnByZXRlcgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIE9uIHNvbWUgdmVyc2lvbnMsIHRoaXMgY3Jhc2hlcyB0aGUgaW50ZXJwcmV0ZXIuCisgICAgICAgICAgICBzb2NrZXQuZ2V0bmFtZWluZm8oKCd4JywgMCwgMCwgMCksIDApCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdE50b0goc2VsZik6CisgICAgICAgICMgVGhpcyBqdXN0IGNoZWNrcyB0aGF0IGh0b25zIGV0Yy4gYXJlIHRoZWlyIG93biBpbnZlcnNlLAorICAgICAgICAjIHdoZW4gbG9va2luZyBhdCB0aGUgbG93ZXIgMTYgb3IgMzIgYml0cy4KKyAgICAgICAgc2l6ZXMgPSB7c29ja2V0Lmh0b25sOiAzMiwgc29ja2V0Lm50b2hsOiAzMiwKKyAgICAgICAgICAgICAgICAgc29ja2V0Lmh0b25zOiAxNiwgc29ja2V0Lm50b2hzOiAxNn0KKyAgICAgICAgZm9yIGZ1bmMsIHNpemUgaW4gc2l6ZXMuaXRlbXMoKToKKyAgICAgICAgICAgIG1hc2sgPSAoMUw8PHNpemUpIC0gMQorICAgICAgICAgICAgZm9yIGkgaW4gKDAsIDEsIDB4ZmZmZiwgfjB4ZmZmZiwgMiwgMHgwMTIzNDU2NywgMHg3NjU0MzIxMCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICYgbWFzaywgZnVuYyhmdW5jKGkmbWFzaykpICYgbWFzaykKKworICAgICAgICAgICAgc3dhcHBlZCA9IGZ1bmMobWFzaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3dhcHBlZCAmIG1hc2ssIG1hc2spCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBmdW5jLCAxTDw8MzQpCisKKyAgICBkZWYgdGVzdE50b0hFcnJvcnMoc2VsZik6CisgICAgICAgIGdvb2RfdmFsdWVzID0gWyAxLCAyLCAzLCAxTCwgMkwsIDNMIF0KKyAgICAgICAgYmFkX3ZhbHVlcyA9IFsgLTEsIC0yLCAtMywgLTFMLCAtMkwsIC0zTCBdCisgICAgICAgIGZvciBrIGluIGdvb2RfdmFsdWVzOgorICAgICAgICAgICAgc29ja2V0Lm50b2hsKGspCisgICAgICAgICAgICBzb2NrZXQubnRvaHMoaykKKyAgICAgICAgICAgIHNvY2tldC5odG9ubChrKQorICAgICAgICAgICAgc29ja2V0Lmh0b25zKGspCisgICAgICAgIGZvciBrIGluIGJhZF92YWx1ZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzb2NrZXQubnRvaGwsIGspCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzb2NrZXQubnRvaHMsIGspCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzb2NrZXQuaHRvbmwsIGspCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzb2NrZXQuaHRvbnMsIGspCisKKyAgICBkZWYgdGVzdEdldFNlcnZCeShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgICMgRmluZCBvbmUgc2VydmljZSB0aGF0IGV4aXN0cywgdGhlbiBjaGVjayBhbGwgdGhlIHJlbGF0ZWQgaW50ZXJmYWNlcy4KKyAgICAgICAgIyBJJ3ZlIG9yZGVyZWQgdGhpcyBieSBwcm90b2NvbHMgdGhhdCBoYXZlIGJvdGggYSB0Y3AgYW5kIHVkcAorICAgICAgICAjIHByb3RvY29sLCBhdCBsZWFzdCBmb3IgbW9kZXJuIExpbnV4ZXMuCisgICAgICAgIGlmIChzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnbGludXgnKSBvcgorICAgICAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2ZyZWVic2QnKSBvcgorICAgICAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ25ldGJzZCcpIG9yCisgICAgICAgICAgICBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicpOgorICAgICAgICAgICAgIyBhdm9pZCB0aGUgJ2VjaG8nIHNlcnZpY2Ugb24gdGhpcyBwbGF0Zm9ybSwgYXMgdGhlcmUgaXMgYW4KKyAgICAgICAgICAgICMgYXNzdW1wdGlvbiBicmVha2luZyBub24tc3RhbmRhcmQgcG9ydC9wcm90b2NvbCBlbnRyeQorICAgICAgICAgICAgc2VydmljZXMgPSAoJ2RheXRpbWUnLCAncW90ZCcsICdkb21haW4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VydmljZXMgPSAoJ2VjaG8nLCAnZGF5dGltZScsICdkb21haW4nKQorICAgICAgICBmb3Igc2VydmljZSBpbiBzZXJ2aWNlczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwb3J0ID0gc29ja2V0LmdldHNlcnZieW5hbWUoc2VydmljZSwgJ3RjcCcpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yCisgICAgICAgICMgVHJ5IHNhbWUgY2FsbCB3aXRoIG9wdGlvbmFsIHByb3RvY29sIG9taXR0ZWQKKyAgICAgICAgcG9ydDIgPSBzb2NrZXQuZ2V0c2VydmJ5bmFtZShzZXJ2aWNlKQorICAgICAgICBlcShwb3J0LCBwb3J0MikKKyAgICAgICAgIyBUcnkgdWRwLCBidXQgZG9uJ3QgYmFyZiBpZiBpdCBkb2Vzbid0IGV4aXN0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHVkcHBvcnQgPSBzb2NrZXQuZ2V0c2VydmJ5bmFtZShzZXJ2aWNlLCAndWRwJykKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIHVkcHBvcnQgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlcSh1ZHBwb3J0LCBwb3J0KQorICAgICAgICAjIE5vdyBtYWtlIHN1cmUgdGhlIGxvb2t1cCBieSBwb3J0IHJldHVybnMgdGhlIHNhbWUgc2VydmljZSBuYW1lCisgICAgICAgIGVxKHNvY2tldC5nZXRzZXJ2Ynlwb3J0KHBvcnQyKSwgc2VydmljZSkKKyAgICAgICAgZXEoc29ja2V0LmdldHNlcnZieXBvcnQocG9ydCwgJ3RjcCcpLCBzZXJ2aWNlKQorICAgICAgICBpZiB1ZHBwb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZXEoc29ja2V0LmdldHNlcnZieXBvcnQodWRwcG9ydCwgJ3VkcCcpLCBzZXJ2aWNlKQorICAgICAgICAjIE1ha2Ugc3VyZSBnZXRzZXJ2Ynlwb3J0IGRvZXMgbm90IGFjY2VwdCBvdXQgb2YgcmFuZ2UgcG9ydHMuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNvY2tldC5nZXRzZXJ2Ynlwb3J0LCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29ja2V0LmdldHNlcnZieXBvcnQsIDY1NTM2KQorCisgICAgZGVmIHRlc3REZWZhdWx0VGltZW91dChzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGRlZmF1bHQgdGltZW91dAorICAgICAgICAjIFRoZSBkZWZhdWx0IHRpbWVvdXQgc2hvdWxkIGluaXRpYWxseSBiZSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCksIE5vbmUpCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHRpbWVvdXQoKSwgTm9uZSkKKyAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgIyBTZXQgdGhlIGRlZmF1bHQgdGltZW91dCB0byAxMCwgYW5kIHNlZSBpZiBpdCBwcm9wYWdhdGVzCisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSwgMTApCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHRpbWVvdXQoKSwgMTApCisgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgICMgUmVzZXQgdGhlIGRlZmF1bHQgdGltZW91dCB0byBOb25lLCBhbmQgc2VlIGlmIGl0IHByb3BhZ2F0ZXMKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCksIE5vbmUpCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHRpbWVvdXQoKSwgTm9uZSkKKyAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgIyBDaGVjayB0aGF0IHNldHRpbmcgaXQgdG8gYW4gaW52YWxpZCB2YWx1ZSByYWlzZXMgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQsIC0xKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCBzZXR0aW5nIGl0IHRvIGFuIGludmFsaWQgdHlwZSByYWlzZXMgVHlwZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0LCAic3BhbSIpCisKKyAgICBkZWYgdGVzdElQdjRfaW5ldF9hdG9uX2ZvdXJieXRlcyhzZWxmKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc29ja2V0LCAnaW5ldF9hdG9uJyk6CisgICAgICAgICAgICByZXR1cm4gICMgTm8gaW5ldF9hdG9uLCBub3RoaW5nIHRvIGNoZWNrCisgICAgICAgICMgVGVzdCB0aGF0IGlzc3VlMTAwODA4NiBhbmQgaXNzdWU3NjcxNTAgYXJlIGZpeGVkLgorICAgICAgICAjIEl0IG11c3QgcmV0dXJuIDQgYnl0ZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDAnKjQsIHNvY2tldC5pbmV0X2F0b24oJzAuMC4wLjAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhmZicqNCwgc29ja2V0LmluZXRfYXRvbignMjU1LjI1NS4yNTUuMjU1JykpCisKKyAgICBkZWYgdGVzdElQdjR0b1N0cmluZyhzZWxmKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc29ja2V0LCAnaW5ldF9wdG9uJyk6CisgICAgICAgICAgICByZXR1cm4gIyBObyBpbmV0X3B0b24oKSBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAgIGZyb20gc29ja2V0IGltcG9ydCBpbmV0X2F0b24gYXMgZiwgaW5ldF9wdG9uLCBBRl9JTkVUCisgICAgICAgIGcgPSBsYW1iZGEgYTogaW5ldF9wdG9uKEFGX0lORVQsIGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMFx4MDBceDAwXHgwMCcsIGYoJzAuMC4wLjAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhmZlx4MDBceGZmXHgwMCcsIGYoJzI1NS4wLjI1NS4wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4YWFceGFhXHhhYVx4YWEnLCBmKCcxNzAuMTcwLjE3MC4xNzAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHgwMVx4MDJceDAzXHgwNCcsIGYoJzEuMi4zLjQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHhmZlx4ZmZceGZmXHhmZicsIGYoJzI1NS4yNTUuMjU1LjI1NScpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDBceDAwXHgwMFx4MDAnLCBnKCcwLjAuMC4wJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ZmZceDAwXHhmZlx4MDAnLCBnKCcyNTUuMC4yNTUuMCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceGFhXHhhYVx4YWFceGFhJywgZygnMTcwLjE3MC4xNzAuMTcwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4ZmZceGZmXHhmZlx4ZmYnLCBnKCcyNTUuMjU1LjI1NS4yNTUnKSkKKworICAgIGRlZiB0ZXN0SVB2NnRvU3RyaW5nKHNlbGYpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihzb2NrZXQsICdpbmV0X3B0b24nKToKKyAgICAgICAgICAgIHJldHVybiAjIE5vIGluZXRfcHRvbigpIG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSBzb2NrZXQgaW1wb3J0IGluZXRfcHRvbiwgQUZfSU5FVDYsIGhhc19pcHY2CisgICAgICAgICAgICBpZiBub3QgaGFzX2lwdjY6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBmID0gbGFtYmRhIGE6IGluZXRfcHRvbihBRl9JTkVUNiwgYSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwJyAqIDE2LCBmKCc6OicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdceDAwJyAqIDE2LCBmKCcwOjowJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x4MDBceDAxJyArICdceDAwJyAqIDE0LCBmKCcxOjonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICdceDQ1XHhlZlx4NzZceGNiXHgwMFx4MWFceDU2XHhlZlx4YWZceGViXHgwYlx4YWNceDE5XHgyNFx4YWVceGFlJywKKyAgICAgICAgICAgIGYoJzQ1ZWY6NzZjYjoxYTo1NmVmOmFmZWI6YmFjOjE5MjQ6YWVhZScpCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0U3RyaW5nVG9JUHY0KHNlbGYpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihzb2NrZXQsICdpbmV0X250b3AnKToKKyAgICAgICAgICAgIHJldHVybiAjIE5vIGluZXRfbnRvcCgpIG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICAgZnJvbSBzb2NrZXQgaW1wb3J0IGluZXRfbnRvYSBhcyBmLCBpbmV0X250b3AsIEFGX0lORVQKKyAgICAgICAgZyA9IGxhbWJkYSBhOiBpbmV0X250b3AoQUZfSU5FVCwgYSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxLjAuMS4wJywgZignXHgwMVx4MDBceDAxXHgwMCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxNzAuODUuMTcwLjg1JywgZignXHhhYVx4NTVceGFhXHg1NScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyNTUuMjU1LjI1NS4yNTUnLCBmKCdceGZmXHhmZlx4ZmZceGZmJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzEuMi4zLjQnLCBmKCdceDAxXHgwMlx4MDNceDA0JykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMS4wLjEuMCcsIGcoJ1x4MDFceDAwXHgwMVx4MDAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTcwLjg1LjE3MC44NScsIGcoJ1x4YWFceDU1XHhhYVx4NTUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMjU1LjI1NS4yNTUuMjU1JywgZygnXHhmZlx4ZmZceGZmXHhmZicpKQorCisgICAgZGVmIHRlc3RTdHJpbmdUb0lQdjYoc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvY2tldCwgJ2luZXRfbnRvcCcpOgorICAgICAgICAgICAgcmV0dXJuICMgTm8gaW5ldF9udG9wKCkgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIHNvY2tldCBpbXBvcnQgaW5ldF9udG9wLCBBRl9JTkVUNiwgaGFzX2lwdjYKKyAgICAgICAgICAgIGlmIG5vdCBoYXNfaXB2NjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGYgPSBsYW1iZGEgYTogaW5ldF9udG9wKEFGX0lORVQ2LCBhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzo6JywgZignXHgwMCcgKiAxNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzo6MScsIGYoJ1x4MDAnICogMTUgKyAnXHgwMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgJ2FlZjpiMDE6NTA2OjEwMDE6ZmZmZjo5OTk3OjU1OjE3MCcsCisgICAgICAgICAgICBmKCdceDBhXHhlZlx4MGJceDAxXHgwNVx4MDZceDEwXHgwMVx4ZmZceGZmXHg5OVx4OTdceDAwXHg1NVx4MDFceDcwJykKKyAgICAgICAgKQorCisgICAgIyBYWFggVGhlIGZvbGxvd2luZyBkb24ndCB0ZXN0IG1vZHVsZS1sZXZlbCBmdW5jdGlvbmFsaXR5Li4uCisKKyAgICBkZWYgX2dldF91bnVzZWRfcG9ydChzZWxmLCBiaW5kX2FkZHJlc3M9JzAuMC4wLjAnKToKKyAgICAgICAgIiIiVXNlIGEgdGVtcG9yYXJ5IHNvY2tldCB0byBlbGljaXQgYW4gdW51c2VkIGVwaGVtZXJhbCBwb3J0LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBiaW5kX2FkZHJlc3M6IEhvc3RuYW1lIG9yIElQIGFkZHJlc3MgdG8gc2VhcmNoIGZvciBhIHBvcnQgb24uCisKKyAgICAgICAgUmV0dXJuczogQSBtb3N0IGxpa2VseSB0byBiZSB1bnVzZWQgcG9ydC4KKyAgICAgICAgIiIiCisgICAgICAgIHRlbXBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHRlbXBzb2NrLmJpbmQoKGJpbmRfYWRkcmVzcywgMCkpCisgICAgICAgIGhvc3QsIHBvcnQgPSB0ZW1wc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgIHRlbXBzb2NrLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIHBvcnQKKworICAgIGRlZiB0ZXN0U29ja05hbWUoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBnZXRzb2NrbmFtZSgpCisgICAgICAgIHBvcnQgPSBzZWxmLl9nZXRfdW51c2VkX3BvcnQoKQorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc29jay5jbG9zZSkKKyAgICAgICAgc29jay5iaW5kKCgiMC4wLjAuMCIsIHBvcnQpKQorICAgICAgICBuYW1lID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgICMgWFhYKG5ub3J3aXR6KTogaHR0cDovL3Rpbnl1cmwuY29tL29zNWp6IHNlZW1zIHRvIGluZGljYXRlCisgICAgICAgICMgaXQgcmVhc29uYWJsZSB0byBnZXQgdGhlIGhvc3QncyBhZGRyIGluIGFkZGl0aW9uIHRvIDAuMC4wLjAuCisgICAgICAgICMgQXQgbGVhc3QgZm9yIGVDb3MuICBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgUy8zOTAgdG8gcGFzcy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXlfaXBfYWRkciA9IHNvY2tldC5nZXRob3N0YnluYW1lKHNvY2tldC5nZXRob3N0bmFtZSgpKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgIyBQcm9iYWJseSBuYW1lIGxvb2t1cCB3YXNuJ3Qgc2V0IHVwIHJpZ2h0OyBza2lwIHRoaXMgdGVzdAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZVswXSwgKCIwLjAuMC4wIiwgbXlfaXBfYWRkciksICclcyBpbnZhbGlkJyAlIG5hbWVbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZVsxXSwgcG9ydCkKKworICAgIGRlZiB0ZXN0R2V0U29ja09wdChzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGdldHNvY2tvcHQoKQorICAgICAgICAjIFdlIGtub3cgYSBzb2NrZXQgc2hvdWxkIHN0YXJ0IHdpdGhvdXQgcmV1c2U9PTAKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCisgICAgICAgIHJldXNlID0gc29jay5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJldXNlICE9IDAsICJpbml0aWFsIG1vZGUgaXMgcmV1c2UiKQorCisgICAgZGVmIHRlc3RTZXRTb2NrT3B0KHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgc2V0c29ja29wdCgpCisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzb2NrLmNsb3NlKQorICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgIHJldXNlID0gc29jay5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJldXNlID09IDAsICJmYWlsZWQgdG8gc2V0IHJldXNlIG1vZGUiKQorCisgICAgZGVmIHRlc3RTZW5kQWZ0ZXJDbG9zZShzZWxmKToKKyAgICAgICAgIyB0ZXN0aW5nIHNlbmQoKSBhZnRlciBjbG9zZSgpIHdpdGggdGltZW91dAorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzb2NrLnNldHRpbWVvdXQoMSkKKyAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29jay5zZW5kLCAic3BhbSIpCisKKyAgICBkZWYgdGVzdE5ld0F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgICMgdGVzdGluZyAuZmFtaWx5LCAudHlwZSBhbmQgLnByb3RvY29sCisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5mYW1pbHksIHNvY2tldC5BRl9JTkVUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2sudHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2sucHJvdG8sIDApCisgICAgICAgIHNvY2suY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZ2V0c29ja2FkZHJhcmcoc2VsZik6CisgICAgICAgIGhvc3QgPSAnMC4wLjAuMCcKKyAgICAgICAgcG9ydCA9IHNlbGYuX2dldF91bnVzZWRfcG9ydChiaW5kX2FkZHJlc3M9aG9zdCkKKyAgICAgICAgYmlnX3BvcnQgPSBwb3J0ICsgNjU1MzYKKyAgICAgICAgbmVnX3BvcnQgPSBwb3J0IC0gNjU1MzYKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzb2NrLmJpbmQsIChob3N0LCBiaWdfcG9ydCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzb2NrLmJpbmQsIChob3N0LCBuZWdfcG9ydCkpCisgICAgICAgICAgICBzb2NrLmJpbmQoKGhvc3QsIHBvcnQpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc29jay5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICJudCIsICJXaW5kb3dzIHNwZWNpZmljIikKKyAgICBkZWYgdGVzdF9zb2NrX2lvY3RsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzb2NrZXQuc29ja2V0LCAnaW9jdGwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc29ja2V0LCAnU0lPX1JDVkFMTCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzb2NrZXQsICdSQ1ZBTExfT04nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc29ja2V0LCAnUkNWQUxMX09GRicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzb2NrZXQsICdTSU9fS0VFUEFMSVZFX1ZBTFMnKSkKKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5pb2N0bCwgLTEsIE5vbmUpCisgICAgICAgIHMuaW9jdGwoc29ja2V0LlNJT19LRUVQQUxJVkVfVkFMUywgKDEsIDEwMCwgMTAwKSkKKworICAgIGRlZiB0ZXN0R2V0YWRkcmluZm8oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbygnbG9jYWxob3N0JywgODApCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZ2FpZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IHNvY2tldC5FQUlfU0VSVklDRToKKyAgICAgICAgICAgICAgICAjIHNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTI4MjY0NworICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImJ1Z2d5IGxpYmMgdmVyc2lvbiIpCisgICAgICAgICAgICByYWlzZQorICAgICAgICAjIGxlbiBvZiBldmVyeSBzZXF1ZW5jZSBpcyBzdXBwb3NlZCB0byBiZSA9PSA1CisgICAgICAgIGZvciBpbmZvIGluIHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCBOb25lKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGluZm8pLCA1KQorICAgICAgICAjIGhvc3QgY2FuIGJlIGEgZG9tYWluIG5hbWUsIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuCisgICAgICAgICMgSVB2NC92NiBhZGRyZXNzIG9yIE5vbmUKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKCdsb2NhbGhvc3QnLCA4MCkKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKCcxMjcuMC4wLjEnLCA4MCkKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKE5vbmUsIDgwKQorICAgICAgICBpZiBTVVBQT1JUU19JUFY2OgorICAgICAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKCc6OjEnLCA4MCkKKyAgICAgICAgIyBwb3J0IGNhbiBiZSBhIHN0cmluZyBzZXJ2aWNlIG5hbWUgc3VjaCBhcyAiaHR0cCIsIGEgbnVtZXJpYworICAgICAgICAjIHBvcnQgbnVtYmVyIChpbnQgb3IgbG9uZyksIG9yIE5vbmUKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsICJodHRwIikKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIDgwKQorICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgODBMKQorICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSkKKyAgICAgICAgIyB0ZXN0IGZhbWlseSBhbmQgc29ja3R5cGUgZmlsdGVycworICAgICAgICBpbmZvcyA9IHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCBOb25lLCBzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgZm9yIGZhbWlseSwgXywgXywgXywgXyBpbiBpbmZvczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmFtaWx5LCBzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgaW5mb3MgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSwgMCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBmb3IgXywgc29ja3R5cGUsIF8sIF8sIF8gaW4gaW5mb3M6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2t0eXBlLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICMgdGVzdCBwcm90byBhbmQgZmxhZ3MgYXJndW1lbnRzCisgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCBOb25lLCAwLCAwLCBzb2NrZXQuU09MX1RDUCkKKyAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUsIDAsIDAsIDAsIHNvY2tldC5BSV9QQVNTSVZFKQorICAgICAgICAjIGEgc2VydmVyIHdpbGxpbmcgdG8gc3VwcG9ydCBib3RoIElQdjQgYW5kIElQdjYgd2lsbAorICAgICAgICAjIHVzdWFsbHkgZG8gdGhpcworICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oTm9uZSwgMCwgc29ja2V0LkFGX1VOU1BFQywgc29ja2V0LlNPQ0tfU1RSRUFNLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LkFJX1BBU1NJVkUpCisKKworICAgIGRlZiBjaGVja19zZW5kYWxsX2ludGVycnVwdGVkKHNlbGYsIHdpdGhfdGltZW91dCk6CisgICAgICAgICMgc29ja2V0cGFpcigpIGlzIG5vdCBzdHJpY2x5IHJlcXVpcmVkLCBidXQgaXQgbWFrZXMgdGhpbmdzIGVhc2llci4KKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2lnbmFsLCAnYWxhcm0nKSBvciBub3QgaGFzYXR0cihzb2NrZXQsICdzb2NrZXRwYWlyJyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJzaWduYWwuYWxhcm0gYW5kIHNvY2tldC5zb2NrZXRwYWlyIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QiKQorICAgICAgICAjIE91ciBzaWduYWwgaGFuZGxlcnMgY2xvYmJlciB0aGUgQyBlcnJubyBieSBjYWxsaW5nIGEgbWF0aCBmdW5jdGlvbgorICAgICAgICAjIHdpdGggYW4gaW52YWxpZCBkb21haW4gdmFsdWUuCisgICAgICAgIGRlZiBva19oYW5kbGVyKCphcmdzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguYWNvc2gsIDApCisgICAgICAgIGRlZiByYWlzaW5nX2hhbmRsZXIoKmFyZ3MpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5hY29zaCwgMCkKKyAgICAgICAgICAgIDEgLy8gMAorICAgICAgICBjLCBzID0gc29ja2V0LnNvY2tldHBhaXIoKQorICAgICAgICBvbGRfYWxhcm0gPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCByYWlzaW5nX2hhbmRsZXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHdpdGhfdGltZW91dDoKKyAgICAgICAgICAgICAgICAjIEp1c3QgYWJvdmUgdGhlIG9uZSBzZWNvbmQgbWluaW11bSBmb3Igc2lnbmFsLmFsYXJtCisgICAgICAgICAgICAgICAgYy5zZXR0aW1lb3V0KDEuNSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICAgICAgICAgIGMuc2VuZGFsbChiIngiICogKDEwMjQqKjIpKQorICAgICAgICAgICAgaWYgd2l0aF90aW1lb3V0OgorICAgICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIG9rX2hhbmRsZXIpCisgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LnRpbWVvdXQsIGMuc2VuZGFsbCwgYiJ4IiAqICgxMDI0KioyKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIG9sZF9hbGFybSkKKyAgICAgICAgICAgIGMuY2xvc2UoKQorICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zZW5kYWxsX2ludGVycnVwdGVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3NlbmRhbGxfaW50ZXJydXB0ZWQoRmFsc2UpCisKKyAgICBkZWYgdGVzdF9zZW5kYWxsX2ludGVycnVwdGVkX3dpdGhfdGltZW91dChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zZW5kYWxsX2ludGVycnVwdGVkKFRydWUpCisKKyAgICBkZWYgdGVzdF9saXN0ZW5fYmFja2xvZyhzZWxmKToKKyAgICAgICAgZm9yIGJhY2tsb2cgaW4gMCwgLTE6CisgICAgICAgICAgICBzcnYgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICBzcnYuYmluZCgoSE9TVCwgMCkpCisgICAgICAgICAgICBzcnYubGlzdGVuKGJhY2tsb2cpCisgICAgICAgICAgICBzcnYuY2xvc2UoKQorCisgICAgICAgICMgSXNzdWUgMTU5ODkKKyAgICAgICAgc3J2ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzcnYuYmluZCgoSE9TVCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNydi5saXN0ZW4sIF90ZXN0Y2FwaS5JTlRfTUFYICsgMSkKKyAgICAgICAgc3J2LmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFNVUFBPUlRTX0lQVjYsICdJUHY2IHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdF9mbG93aW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29ja2V0LmdldG5hbWVpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJzo6MScsMCwgMHhmZmZmZmZmZiksIDApCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzLmJpbmQsICgnOjoxJywgMCwgLTEwKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHMuY2xvc2UoKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBCYXNpY1RDUFRlc3QoU29ja2V0Q29ubmVjdGVkVGVzdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgorICAgICAgICBTb2NrZXRDb25uZWN0ZWRUZXN0Ll9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9bWV0aG9kTmFtZSkKKworICAgIGRlZiB0ZXN0UmVjdihzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGxhcmdlIHJlY2VpdmUgb3ZlciBUQ1AKKyAgICAgICAgbXNnID0gc2VsZi5jbGlfY29ubi5yZWN2KDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBkZWYgX3Rlc3RSZWN2KHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZfY29ubi5zZW5kKE1TRykKKworICAgIGRlZiB0ZXN0T3ZlckZsb3dSZWN2KHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgcmVjZWl2ZSBpbiBjaHVua3Mgb3ZlciBUQ1AKKyAgICAgICAgc2VnMSA9IHNlbGYuY2xpX2Nvbm4ucmVjdihsZW4oTVNHKSAtIDMpCisgICAgICAgIHNlZzIgPSBzZWxmLmNsaV9jb25uLnJlY3YoMTAyNCkKKyAgICAgICAgbXNnID0gc2VnMSArIHNlZzIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIGRlZiBfdGVzdE92ZXJGbG93UmVjdihzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2X2Nvbm4uc2VuZChNU0cpCisKKyAgICBkZWYgdGVzdFJlY3ZGcm9tKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgbGFyZ2UgcmVjdmZyb20oKSBvdmVyIFRDUAorICAgICAgICBtc2csIGFkZHIgPSBzZWxmLmNsaV9jb25uLnJlY3Zmcm9tKDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBkZWYgX3Rlc3RSZWN2RnJvbShzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2X2Nvbm4uc2VuZChNU0cpCisKKyAgICBkZWYgdGVzdE92ZXJGbG93UmVjdkZyb20oc2VsZik6CisgICAgICAgICMgVGVzdGluZyByZWN2ZnJvbSgpIGluIGNodW5rcyBvdmVyIFRDUAorICAgICAgICBzZWcxLCBhZGRyID0gc2VsZi5jbGlfY29ubi5yZWN2ZnJvbShsZW4oTVNHKS0zKQorICAgICAgICBzZWcyLCBhZGRyID0gc2VsZi5jbGlfY29ubi5yZWN2ZnJvbSgxMDI0KQorICAgICAgICBtc2cgPSBzZWcxICsgc2VnMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorCisgICAgZGVmIF90ZXN0T3ZlckZsb3dSZWN2RnJvbShzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2X2Nvbm4uc2VuZChNU0cpCisKKyAgICBkZWYgdGVzdFNlbmRBbGwoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBzZW5kYWxsKCkgd2l0aCBhIDIwNDggYnl0ZSBzdHJpbmcgb3ZlciBUQ1AKKyAgICAgICAgbXNnID0gJycKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHJlYWQgPSBzZWxmLmNsaV9jb25uLnJlY3YoMTAyNCkKKyAgICAgICAgICAgIGlmIG5vdCByZWFkOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBtc2cgKz0gcmVhZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgJ2YnICogMjA0OCkKKworICAgIGRlZiBfdGVzdFNlbmRBbGwoc2VsZik6CisgICAgICAgIGJpZ19jaHVuayA9ICdmJyAqIDIwNDgKKyAgICAgICAgc2VsZi5zZXJ2X2Nvbm4uc2VuZGFsbChiaWdfY2h1bmspCisKKyAgICBkZWYgdGVzdEZyb21GZChzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIGZyb21mZCgpCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvY2tldCwgImZyb21mZCIpOgorICAgICAgICAgICAgcmV0dXJuICMgT24gV2luZG93cywgdGhpcyBkb2Vzbid0IGV4aXN0CisgICAgICAgIGZkID0gc2VsZi5jbGlfY29ubi5maWxlbm8oKQorICAgICAgICBzb2NrID0gc29ja2V0LmZyb21mZChmZCwgc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCisgICAgICAgIG1zZyA9IHNvY2sucmVjdigxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorCisgICAgZGVmIF90ZXN0RnJvbUZkKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZfY29ubi5zZW5kKE1TRykKKworICAgIGRlZiB0ZXN0RHVwKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgZHVwKCkKKyAgICAgICAgc29jayA9IHNlbGYuY2xpX2Nvbm4uZHVwKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCisgICAgICAgIG1zZyA9IHNvY2sucmVjdigxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorCisgICAgZGVmIF90ZXN0RHVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZfY29ubi5zZW5kKE1TRykKKworICAgIGRlZiB0ZXN0U2h1dGRvd24oc2VsZik6CisgICAgICAgICMgVGVzdGluZyBzaHV0ZG93bigpCisgICAgICAgIG1zZyA9IHNlbGYuY2xpX2Nvbm4ucmVjdigxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorICAgICAgICAjIHdhaXQgZm9yIF90ZXN0U2h1dGRvd24gdG8gZmluaXNoOiBvbiBPUyBYLCB3aGVuIHRoZSBzZXJ2ZXIKKyAgICAgICAgIyBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gdGhlIGNsaWVudCBhbHNvIGJlY29tZXMgZGlzY29ubmVjdGVkLAorICAgICAgICAjIGFuZCB0aGUgY2xpZW50J3Mgc2h1dGRvd24gY2FsbCB3aWxsIGZhaWwuIChJc3N1ZSAjNDM5Ny4pCisgICAgICAgIHNlbGYuZG9uZS53YWl0KCkKKworICAgIGRlZiBfdGVzdFNodXRkb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZfY29ubi5zZW5kKE1TRykKKyAgICAgICAgIyBJc3N1ZSAxNTk4OQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLnNlcnZfY29ubi5zaHV0ZG93biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX3Rlc3RjYXBpLklOVF9NQVggKyAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLnNlcnZfY29ubi5zaHV0ZG93biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMiArIChfdGVzdGNhcGkuVUlOVF9NQVggKyAxKSkKKyAgICAgICAgc2VsZi5zZXJ2X2Nvbm4uc2h1dGRvd24oMikKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIEJhc2ljVURQVGVzdChUaHJlYWRlZFVEUFNvY2tldFRlc3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKKyAgICAgICAgVGhyZWFkZWRVRFBTb2NrZXRUZXN0Ll9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9bWV0aG9kTmFtZSkKKworICAgIGRlZiB0ZXN0U2VuZHRvQW5kUmVjdihzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHNlbmR0bygpIGFuZCBSZWN2KCkgb3ZlciBVRFAKKyAgICAgICAgbXNnID0gc2VsZi5zZXJ2LnJlY3YobGVuKE1TRykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBkZWYgX3Rlc3RTZW5kdG9BbmRSZWN2KHNlbGYpOgorICAgICAgICBzZWxmLmNsaS5zZW5kdG8oTVNHLCAwLCAoSE9TVCwgc2VsZi5wb3J0KSkKKworICAgIGRlZiB0ZXN0UmVjdkZyb20oc2VsZik6CisgICAgICAgICMgVGVzdGluZyByZWN2ZnJvbSgpIG92ZXIgVURQCisgICAgICAgIG1zZywgYWRkciA9IHNlbGYuc2Vydi5yZWN2ZnJvbShsZW4oTVNHKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIGRlZiBfdGVzdFJlY3ZGcm9tKHNlbGYpOgorICAgICAgICBzZWxmLmNsaS5zZW5kdG8oTVNHLCAwLCAoSE9TVCwgc2VsZi5wb3J0KSkKKworICAgIGRlZiB0ZXN0UmVjdkZyb21OZWdhdGl2ZShzZWxmKToKKyAgICAgICAgIyBOZWdhdGl2ZSBsZW5ndGhzIHBhc3NlZCB0byByZWN2ZnJvbSBzaG91bGQgZ2l2ZSBWYWx1ZUVycm9yLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnNlcnYucmVjdmZyb20sIC0xKQorCisgICAgZGVmIF90ZXN0UmVjdkZyb21OZWdhdGl2ZShzZWxmKToKKyAgICAgICAgc2VsZi5jbGkuc2VuZHRvKE1TRywgMCwgKEhPU1QsIHNlbGYucG9ydCkpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBUQ1BDbG9zZXJUZXN0KFRocmVhZGVkVENQU29ja2V0VGVzdCk6CisKKyAgICBkZWYgdGVzdENsb3NlKHNlbGYpOgorICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgIGNvbm4uY2xvc2UoKQorCisgICAgICAgIHNkID0gc2VsZi5jbGkKKyAgICAgICAgcmVhZCwgd3JpdGUsIGVyciA9IHNlbGVjdC5zZWxlY3QoW3NkXSwgW10sIFtdLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZCwgW3NkXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZC5yZWN2KDEpLCAnJykKKworICAgIGRlZiBfdGVzdENsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmNsaS5jb25uZWN0KChIT1NULCBzZWxmLnBvcnQpKQorICAgICAgICB0aW1lLnNsZWVwKDEuMCkKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIEJhc2ljU29ja2V0UGFpclRlc3QoU29ja2V0UGFpclRlc3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKKyAgICAgICAgU29ja2V0UGFpclRlc3QuX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT1tZXRob2ROYW1lKQorCisgICAgZGVmIHRlc3RSZWN2KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLnNlcnYucmVjdigxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorCisgICAgZGVmIF90ZXN0UmVjdihzZWxmKToKKyAgICAgICAgc2VsZi5jbGkuc2VuZChNU0cpCisKKyAgICBkZWYgdGVzdFNlbmQoc2VsZik6CisgICAgICAgIHNlbGYuc2Vydi5zZW5kKE1TRykKKworICAgIGRlZiBfdGVzdFNlbmQoc2VsZik6CisgICAgICAgIG1zZyA9IHNlbGYuY2xpLnJlY3YoMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIE5vbkJsb2NraW5nVENQVGVzdHMoVGhyZWFkZWRUQ1BTb2NrZXRUZXN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgIFRocmVhZGVkVENQU29ja2V0VGVzdC5fX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPW1ldGhvZE5hbWUpCisKKyAgICBkZWYgdGVzdFNldEJsb2NraW5nKHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgd2hldGhlciBzZXQgYmxvY2tpbmcgd29ya3MKKyAgICAgICAgc2VsZi5zZXJ2LnNldGJsb2NraW5nKFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuc2Vydi5nZXR0aW1lb3V0KCkpCisgICAgICAgIHNlbGYuc2Vydi5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnYuZ2V0dGltZW91dCgpLCAwLjApCisgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVuZCA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoZW5kIC0gc3RhcnQpIDwgMS4wLCAiRXJyb3Igc2V0dGluZyBub24tYmxvY2tpbmcgbW9kZS4iKQorICAgICAgICAjIElzc3VlIDE1OTg5CisgICAgICAgIGlmIF90ZXN0Y2FwaS5VSU5UX01BWCA8IF90ZXN0Y2FwaS5VTE9OR19NQVg6CisgICAgICAgICAgICBzZWxmLnNlcnYuc2V0YmxvY2tpbmcoX3Rlc3RjYXBpLlVJTlRfTUFYICsgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuc2Vydi5nZXR0aW1lb3V0KCkpCisKKyAgICBkZWYgX3Rlc3RTZXRCbG9ja2luZyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RBY2NlcHQoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBub24tYmxvY2tpbmcgYWNjZXB0CisgICAgICAgIHNlbGYuc2Vydi5zZXRibG9ja2luZygwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkVycm9yIHRyeWluZyB0byBkbyBub24tYmxvY2tpbmcgYWNjZXB0LiIpCisgICAgICAgIHJlYWQsIHdyaXRlLCBlcnIgPSBzZWxlY3Quc2VsZWN0KFtzZWxmLnNlcnZdLCBbXSwgW10pCisgICAgICAgIGlmIHNlbGYuc2VydiBpbiByZWFkOgorICAgICAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc2Vydi5hY2NlcHQoKQorICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkVycm9yIHRyeWluZyB0byBkbyBhY2NlcHQgYWZ0ZXIgc2VsZWN0LiIpCisKKyAgICBkZWYgX3Rlc3RBY2NlcHQoc2VsZik6CisgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICBzZWxmLmNsaS5jb25uZWN0KChIT1NULCBzZWxmLnBvcnQpKQorCisgICAgZGVmIHRlc3RDb25uZWN0KHNlbGYpOgorICAgICAgICAjIFRlc3Rpbmcgbm9uLWJsb2NraW5nIGNvbm5lY3QKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc2Vydi5hY2NlcHQoKQorICAgICAgICBjb25uLmNsb3NlKCkKKworICAgIGRlZiBfdGVzdENvbm5lY3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2xpLnNldHRpbWVvdXQoMTApCisgICAgICAgIHNlbGYuY2xpLmNvbm5lY3QoKEhPU1QsIHNlbGYucG9ydCkpCisKKyAgICBkZWYgdGVzdFJlY3Yoc2VsZik6CisgICAgICAgICMgVGVzdGluZyBub24tYmxvY2tpbmcgcmVjdgorICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgIGNvbm4uc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXNnID0gY29ubi5yZWN2KGxlbihNU0cpKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0cnlpbmcgdG8gZG8gbm9uLWJsb2NraW5nIHJlY3YuIikKKyAgICAgICAgcmVhZCwgd3JpdGUsIGVyciA9IHNlbGVjdC5zZWxlY3QoW2Nvbm5dLCBbXSwgW10pCisgICAgICAgIGlmIGNvbm4gaW4gcmVhZDoKKyAgICAgICAgICAgIG1zZyA9IGNvbm4ucmVjdihsZW4oTVNHKSkKKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRXJyb3IgZHVyaW5nIHNlbGVjdCBjYWxsIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQuIikKKworICAgIGRlZiBfdGVzdFJlY3Yoc2VsZik6CisgICAgICAgIHNlbGYuY2xpLmNvbm5lY3QoKEhPU1QsIHNlbGYucG9ydCkpCisgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICBzZWxmLmNsaS5zZW5kKE1TRykKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIEZpbGVPYmplY3RDbGFzc1Rlc3RDYXNlKFNvY2tldENvbm5lY3RlZFRlc3QpOgorCisgICAgYnVmc2l6ZSA9IC0xICMgVXNlIGRlZmF1bHQgYnVmZmVyIHNpemUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgIFNvY2tldENvbm5lY3RlZFRlc3QuX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT1tZXRob2ROYW1lKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBTb2NrZXRDb25uZWN0ZWRUZXN0LnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYuc2Vydl9maWxlID0gc2VsZi5jbGlfY29ubi5tYWtlZmlsZSgncmInLCBzZWxmLmJ1ZnNpemUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc2Vydl9maWxlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc2Vydl9maWxlLmNsb3NlZCkKKyAgICAgICAgU29ja2V0Q29ubmVjdGVkVGVzdC50ZWFyRG93bihzZWxmKQorICAgICAgICBzZWxmLnNlcnZfZmlsZSA9IE5vbmUKKworICAgIGRlZiBjbGllbnRTZXRVcChzZWxmKToKKyAgICAgICAgU29ja2V0Q29ubmVjdGVkVGVzdC5jbGllbnRTZXRVcChzZWxmKQorICAgICAgICBzZWxmLmNsaV9maWxlID0gc2VsZi5zZXJ2X2Nvbm4ubWFrZWZpbGUoJ3diJykKKworICAgIGRlZiBjbGllbnRUZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jbGlfZmlsZS5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNsaV9maWxlLmNsb3NlZCkKKyAgICAgICAgc2VsZi5jbGlfZmlsZSA9IE5vbmUKKyAgICAgICAgU29ja2V0Q29ubmVjdGVkVGVzdC5jbGllbnRUZWFyRG93bihzZWxmKQorCisgICAgZGVmIHRlc3RTbWFsbFJlYWQoc2VsZik6CisgICAgICAgICMgUGVyZm9ybWluZyBzbWFsbCBmaWxlIHJlYWQgdGVzdAorICAgICAgICBmaXJzdF9zZWcgPSBzZWxmLnNlcnZfZmlsZS5yZWFkKGxlbihNU0cpLTMpCisgICAgICAgIHNlY29uZF9zZWcgPSBzZWxmLnNlcnZfZmlsZS5yZWFkKDMpCisgICAgICAgIG1zZyA9IGZpcnN0X3NlZyArIHNlY29uZF9zZWcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIGRlZiBfdGVzdFNtYWxsUmVhZChzZWxmKToKKyAgICAgICAgc2VsZi5jbGlfZmlsZS53cml0ZShNU0cpCisgICAgICAgIHNlbGYuY2xpX2ZpbGUuZmx1c2goKQorCisgICAgZGVmIHRlc3RGdWxsUmVhZChzZWxmKToKKyAgICAgICAgIyByZWFkIHVudGlsIEVPRgorICAgICAgICBtc2cgPSBzZWxmLnNlcnZfZmlsZS5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIGRlZiBfdGVzdEZ1bGxSZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmNsaV9maWxlLndyaXRlKE1TRykKKyAgICAgICAgc2VsZi5jbGlfZmlsZS5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFVuYnVmZmVyZWRSZWFkKHNlbGYpOgorICAgICAgICAjIFBlcmZvcm1pbmcgdW5idWZmZXJlZCBmaWxlIHJlYWQgdGVzdAorICAgICAgICBidWYgPSAnJworICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgY2hhciA9IHNlbGYuc2Vydl9maWxlLnJlYWQoMSkKKyAgICAgICAgICAgIGlmIG5vdCBjaGFyOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBidWYgKz0gY2hhcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgTVNHKQorCisgICAgZGVmIF90ZXN0VW5idWZmZXJlZFJlYWQoc2VsZik6CisgICAgICAgIHNlbGYuY2xpX2ZpbGUud3JpdGUoTVNHKQorICAgICAgICBzZWxmLmNsaV9maWxlLmZsdXNoKCkKKworICAgIGRlZiB0ZXN0UmVhZGxpbmUoc2VsZik6CisgICAgICAgICMgUGVyZm9ybWluZyBmaWxlIHJlYWRsaW5lIHRlc3QKKyAgICAgICAgbGluZSA9IHNlbGYuc2Vydl9maWxlLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBNU0cpCisKKyAgICBkZWYgX3Rlc3RSZWFkbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5jbGlfZmlsZS53cml0ZShNU0cpCisgICAgICAgIHNlbGYuY2xpX2ZpbGUuZmx1c2goKQorCisgICAgZGVmIHRlc3RSZWFkbGluZUFmdGVyUmVhZChzZWxmKToKKyAgICAgICAgYV9iYWxvb19pcyA9IHNlbGYuc2Vydl9maWxlLnJlYWQobGVuKCJBIGJhbG9vIGlzIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkEgYmFsb28gaXMiLCBhX2JhbG9vX2lzKQorICAgICAgICBfYV9iZWFyID0gc2VsZi5zZXJ2X2ZpbGUucmVhZChsZW4oIiBhIGJlYXIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIGEgYmVhciIsIF9hX2JlYXIpCisgICAgICAgIGxpbmUgPSBzZWxmLnNlcnZfZmlsZS5yZWFkbGluZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlxuIiwgbGluZSkKKyAgICAgICAgbGluZSA9IHNlbGYuc2Vydl9maWxlLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiQSBCQUxPTyBJUyBBIEJFQVIuXG4iLCBsaW5lKQorICAgICAgICBsaW5lID0gc2VsZi5zZXJ2X2ZpbGUucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1TRywgbGluZSkKKworICAgIGRlZiBfdGVzdFJlYWRsaW5lQWZ0ZXJSZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmNsaV9maWxlLndyaXRlKCJBIGJhbG9vIGlzIGEgYmVhclxuIikKKyAgICAgICAgc2VsZi5jbGlfZmlsZS53cml0ZSgiQSBCQUxPTyBJUyBBIEJFQVIuXG4iKQorICAgICAgICBzZWxmLmNsaV9maWxlLndyaXRlKE1TRykKKyAgICAgICAgc2VsZi5jbGlfZmlsZS5mbHVzaCgpCisKKyAgICBkZWYgdGVzdFJlYWRsaW5lQWZ0ZXJSZWFkTm9OZXdsaW5lKHNlbGYpOgorICAgICAgICBlbmRfb2ZfID0gc2VsZi5zZXJ2X2ZpbGUucmVhZChsZW4oIkVuZCBPZiAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRW5kIE9mICIsIGVuZF9vZl8pCisgICAgICAgIGxpbmUgPSBzZWxmLnNlcnZfZmlsZS5yZWFkbGluZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkxpbmUiLCBsaW5lKQorCisgICAgZGVmIF90ZXN0UmVhZGxpbmVBZnRlclJlYWROb05ld2xpbmUoc2VsZik6CisgICAgICAgIHNlbGYuY2xpX2ZpbGUud3JpdGUoIkVuZCBPZiBMaW5lIikKKworICAgIGRlZiB0ZXN0Q2xvc2VkQXR0cihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLnNlcnZfZmlsZS5jbG9zZWQpCisKKyAgICBkZWYgX3Rlc3RDbG9zZWRBdHRyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYuY2xpX2ZpbGUuY2xvc2VkKQorCisKK2NsYXNzIEZpbGVPYmplY3RJbnRlcnJ1cHRlZFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgdGhlIGZpbGUgb2JqZWN0IGNvcnJlY3RseSBoYW5kbGVzIEVJTlRSIGludGVybmFsbHkuIiIiCisKKyAgICBjbGFzcyBNb2NrU29ja2V0KG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X2Z1bmNzPSgpKToKKyAgICAgICAgICAgICMgQSBnZW5lcmF0b3IgdGhhdCByZXR1cm5zIGNhbGxhYmxlcyB0aGF0IHdlJ2xsIGNhbGwgZm9yIGVhY2gKKyAgICAgICAgICAgICMgY2FsbCB0byByZWN2KCkuCisgICAgICAgICAgICBzZWxmLl9yZWN2X3N0ZXAgPSBpdGVyKHJlY3ZfZnVuY3MpCisKKyAgICAgICAgZGVmIHJlY3Yoc2VsZiwgc2l6ZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVjdl9zdGVwLm5leHQoKSgpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9yYWlzZV9laW50cigpOgorICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoZXJybm8uRUlOVFIpCisKKyAgICBkZWYgX3Rlc3RfcmVhZGxpbmUoc2VsZiwgc2l6ZT0tMSwgKiprd2FyZ3MpOgorICAgICAgICBtb2NrX3NvY2sgPSBzZWxmLk1vY2tTb2NrZXQocmVjdl9mdW5jcz1bCisgICAgICAgICAgICAgICAgbGFtYmRhIDogIlRoaXMgaXMgdGhlIGZpcnN0IGxpbmVcbkFuZCB0aGUgc2VjIiwKKyAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZV9laW50ciwKKyAgICAgICAgICAgICAgICBsYW1iZGEgOiAib25kIGxpbmUgaXMgaGVyZVxuIiwKKyAgICAgICAgICAgICAgICBsYW1iZGEgOiAiIiwKKyAgICAgICAgICAgIF0pCisgICAgICAgIGZvID0gc29ja2V0Ll9maWxlb2JqZWN0KG1vY2tfc29jaywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8ucmVhZGxpbmUoc2l6ZSksICJUaGlzIGlzIHRoZSBmaXJzdCBsaW5lXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWRsaW5lKHNpemUpLCAiQW5kIHRoZSBzZWNvbmQgbGluZSBpcyBoZXJlXG4iKQorCisgICAgZGVmIF90ZXN0X3JlYWQoc2VsZiwgc2l6ZT0tMSwgKiprd2FyZ3MpOgorICAgICAgICBtb2NrX3NvY2sgPSBzZWxmLk1vY2tTb2NrZXQocmVjdl9mdW5jcz1bCisgICAgICAgICAgICAgICAgbGFtYmRhIDogIlRoaXMgaXMgdGhlIGZpcnN0IGxpbmVcbkFuZCB0aGUgc2VjIiwKKyAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZV9laW50ciwKKyAgICAgICAgICAgICAgICBsYW1iZGEgOiAib25kIGxpbmUgaXMgaGVyZVxuIiwKKyAgICAgICAgICAgICAgICBsYW1iZGEgOiAiIiwKKyAgICAgICAgICAgIF0pCisgICAgICAgIGZvID0gc29ja2V0Ll9maWxlb2JqZWN0KG1vY2tfc29jaywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8ucmVhZChzaXplKSwgIlRoaXMgaXMgdGhlIGZpcnN0IGxpbmVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkFuZCB0aGUgc2Vjb25kIGxpbmUgaXMgaGVyZVxuIikKKworICAgIGRlZiB0ZXN0X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGxpbmUoKQorICAgICAgICBzZWxmLl90ZXN0X3JlYWRsaW5lKHNpemU9MTAwKQorICAgICAgICBzZWxmLl90ZXN0X3JlYWQoKQorICAgICAgICBzZWxmLl90ZXN0X3JlYWQoc2l6ZT0xMDApCisKKyAgICBkZWYgdGVzdF93aXRoXzFrX2J1ZmZlcihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkbGluZShidWZzaXplPTEwMjQpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGxpbmUoc2l6ZT0xMDAsIGJ1ZnNpemU9MTAyNCkKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkKGJ1ZnNpemU9MTAyNCkKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkKHNpemU9MTAwLCBidWZzaXplPTEwMjQpCisKKyAgICBkZWYgX3Rlc3RfcmVhZGxpbmVfbm9fYnVmZmVyKHNlbGYsIHNpemU9LTEpOgorICAgICAgICBtb2NrX3NvY2sgPSBzZWxmLk1vY2tTb2NrZXQocmVjdl9mdW5jcz1bCisgICAgICAgICAgICAgICAgbGFtYmRhIDogImFhIiwKKyAgICAgICAgICAgICAgICBsYW1iZGEgOiAiXG4iLAorICAgICAgICAgICAgICAgIGxhbWJkYSA6ICJCQiIsCisgICAgICAgICAgICAgICAgc2VsZi5fcmFpc2VfZWludHIsCisgICAgICAgICAgICAgICAgbGFtYmRhIDogImJiIiwKKyAgICAgICAgICAgICAgICBsYW1iZGEgOiAiIiwKKyAgICAgICAgICAgIF0pCisgICAgICAgIGZvID0gc29ja2V0Ll9maWxlb2JqZWN0KG1vY2tfc29jaywgYnVmc2l6ZT0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWRsaW5lKHNpemUpLCAiYWFcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8ucmVhZGxpbmUoc2l6ZSksICJCQmJiIikKKworICAgIGRlZiB0ZXN0X25vX2J1ZmZlcihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkbGluZV9ub19idWZmZXIoKQorICAgICAgICBzZWxmLl90ZXN0X3JlYWRsaW5lX25vX2J1ZmZlcihzaXplPTQpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZChidWZzaXplPTApCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZChzaXplPTEwMCwgYnVmc2l6ZT0wKQorCisKK2NsYXNzIFVuYnVmZmVyZWRGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZShGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZSk6CisKKyAgICAiIiJSZXBlYXQgdGhlIHRlc3RzIGZyb20gRmlsZU9iamVjdENsYXNzVGVzdENhc2Ugd2l0aCBidWZzaXplPT0wLgorCisgICAgSW4gdGhpcyBjYXNlIChhbmQgaW4gdGhpcyBjYXNlIG9ubHkpLCBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8KKyAgICBjcmVhdGUgYSBmaWxlIG9iamVjdCwgcmVhZCBhIGxpbmUgZnJvbSBpdCwgY3JlYXRlIGFub3RoZXIgZmlsZQorICAgIG9iamVjdCwgcmVhZCBhbm90aGVyIGxpbmUgZnJvbSBpdCwgd2l0aG91dCBsb3NzIG9mIGRhdGEgaW4gdGhlCisgICAgZmlyc3QgZmlsZSBvYmplY3QncyBidWZmZXIuICBOb3RlIHRoYXQgaHR0cGxpYiByZWxpZXMgb24gdGhpcworICAgIHdoZW4gcmVhZGluZyBtdWx0aXBsZSByZXF1ZXN0cyBmcm9tIHRoZSBzYW1lIHNvY2tldC4iIiIKKworICAgIGJ1ZnNpemUgPSAwICMgVXNlIHVuYnVmZmVyZWQgbW9kZQorCisgICAgZGVmIHRlc3RVbmJ1ZmZlcmVkUmVhZGxpbmUoc2VsZik6CisgICAgICAgICMgUmVhZCBhIGxpbmUsIGNyZWF0ZSBhIG5ldyBmaWxlIG9iamVjdCwgcmVhZCBhbm90aGVyIGxpbmUgd2l0aCBpdAorICAgICAgICBsaW5lID0gc2VsZi5zZXJ2X2ZpbGUucmVhZGxpbmUoKSAjIGZpcnN0IGxpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCAiQS4gIiArIE1TRykgIyBmaXJzdCBsaW5lCisgICAgICAgIHNlbGYuc2Vydl9maWxlID0gc2VsZi5jbGlfY29ubi5tYWtlZmlsZSgncmInLCAwKQorICAgICAgICBsaW5lID0gc2VsZi5zZXJ2X2ZpbGUucmVhZGxpbmUoKSAjIHNlY29uZCBsaW5lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgIkIuICIgKyBNU0cpICMgc2Vjb25kIGxpbmUKKworICAgIGRlZiBfdGVzdFVuYnVmZmVyZWRSZWFkbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5jbGlfZmlsZS53cml0ZSgiQS4gIiArIE1TRykKKyAgICAgICAgc2VsZi5jbGlfZmlsZS53cml0ZSgiQi4gIiArIE1TRykKKyAgICAgICAgc2VsZi5jbGlfZmlsZS5mbHVzaCgpCisKK2NsYXNzIExpbmVCdWZmZXJlZEZpbGVPYmplY3RDbGFzc1Rlc3RDYXNlKEZpbGVPYmplY3RDbGFzc1Rlc3RDYXNlKToKKworICAgIGJ1ZnNpemUgPSAxICMgRGVmYXVsdC1idWZmZXJlZCBmb3IgcmVhZGluZzsgbGluZS1idWZmZXJlZCBmb3Igd3JpdGluZworCisgICAgY2xhc3MgU29ja2V0TWVtbyhvYmplY3QpOgorICAgICAgICAiIiJBIHdyYXBwZXIgdG8ga2VlcCB0cmFjayBvZiBzZW50IGRhdGEsIG5lZWRlZCB0byBleGFtaW5lIHdyaXRlIGJlaGF2aW91ciIiIgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc29jayk6CisgICAgICAgICAgICBzZWxmLl9zb2NrID0gc29jaworICAgICAgICAgICAgc2VsZi5zZW50ID0gW10KKworICAgICAgICBkZWYgc2VuZChzZWxmLCBkYXRhLCBmbGFncz0wKToKKyAgICAgICAgICAgIG4gPSBzZWxmLl9zb2NrLnNlbmQoZGF0YSwgZmxhZ3MpCisgICAgICAgICAgICBzZWxmLnNlbnQuYXBwZW5kKGRhdGFbOm5dKQorICAgICAgICAgICAgcmV0dXJuIG4KKworICAgICAgICBkZWYgc2VuZGFsbChzZWxmLCBkYXRhLCBmbGFncz0wKToKKyAgICAgICAgICAgIHNlbGYuX3NvY2suc2VuZGFsbChkYXRhLCBmbGFncykKKyAgICAgICAgICAgIHNlbGYuc2VudC5hcHBlbmQoZGF0YSkKKworICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9zb2NrLCBhdHRyKQorCisgICAgICAgIGRlZiBnZXRzZW50KHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIFtlLnRvYnl0ZXMoKSBpZiBpc2luc3RhbmNlKGUsIG1lbW9yeXZpZXcpIGVsc2UgZSBmb3IgZSBpbiBzZWxmLnNlbnRdCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIEZpbGVPYmplY3RDbGFzc1Rlc3RDYXNlLnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYuc2Vydl9maWxlLl9zb2NrID0gc2VsZi5Tb2NrZXRNZW1vKHNlbGYuc2Vydl9maWxlLl9zb2NrKQorCisgICAgZGVmIHRlc3RMaW5lYnVmZmVyZWRXcml0ZShzZWxmKToKKyAgICAgICAgIyBXcml0ZSB0d28gbGluZXMsIGluIHNtYWxsIGNodW5rcworICAgICAgICBtc2cgPSBNU0cuc3RyaXAoKQorICAgICAgICBwcmludCA+PiBzZWxmLnNlcnZfZmlsZSwgbXNnLAorICAgICAgICBwcmludCA+PiBzZWxmLnNlcnZfZmlsZSwgbXNnCisKKyAgICAgICAgIyBzZWNvbmQgbGluZToKKyAgICAgICAgcHJpbnQgPj4gc2VsZi5zZXJ2X2ZpbGUsIG1zZywKKyAgICAgICAgcHJpbnQgPj4gc2VsZi5zZXJ2X2ZpbGUsIG1zZywKKyAgICAgICAgcHJpbnQgPj4gc2VsZi5zZXJ2X2ZpbGUsIG1zZworCisgICAgICAgICMgdGhpcmQgbGluZQorICAgICAgICBwcmludCA+PiBzZWxmLnNlcnZfZmlsZSwgJycKKworICAgICAgICBzZWxmLnNlcnZfZmlsZS5mbHVzaCgpCisKKyAgICAgICAgbXNnMSA9ICIlcyAlc1xuIiUobXNnLCBtc2cpCisgICAgICAgIG1zZzIgPSAgIiVzICVzICVzXG4iJShtc2csIG1zZywgbXNnKQorICAgICAgICBtc2czID0gICJcbiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZfZmlsZS5fc29jay5nZXRzZW50KCksIFttc2cxLCBtc2cyLCBtc2czXSkKKworICAgIGRlZiBfdGVzdExpbmVidWZmZXJlZFdyaXRlKHNlbGYpOgorICAgICAgICBtc2cgPSBNU0cuc3RyaXAoKQorICAgICAgICBtc2cxID0gIiVzICVzXG4iJShtc2csIG1zZykKKyAgICAgICAgbXNnMiA9ICAiJXMgJXMgJXNcbiIlKG1zZywgbXNnLCBtc2cpCisgICAgICAgIG1zZzMgPSAgIlxuIgorICAgICAgICBsMSA9IHNlbGYuY2xpX2ZpbGUucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwxLCBtc2cxKQorICAgICAgICBsMiA9IHNlbGYuY2xpX2ZpbGUucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwyLCBtc2cyKQorICAgICAgICBsMyA9IHNlbGYuY2xpX2ZpbGUucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwzLCBtc2czKQorCisKK2NsYXNzIFNtYWxsQnVmZmVyZWRGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZShGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZSk6CisKKyAgICBidWZzaXplID0gMiAjIEV4ZXJjaXNlIHRoZSBidWZmZXJpbmcgY29kZQorCisKK2NsYXNzIE5ldHdvcmtDb25uZWN0aW9uVGVzdChvYmplY3QpOgorICAgICIiIlByb3ZlIG5ldHdvcmsgY29ubmVjdGlvbi4iIiIKKyAgICBkZWYgY2xpZW50U2V0VXAoc2VsZik6CisgICAgICAgICMgV2UncmUgaW5oZXJpdGVkIGJlbG93IGJ5IEJhc2ljVENQVGVzdDIsIHdoaWNoIGFsc28gaW5oZXJpdHMKKyAgICAgICAgIyBCYXNpY1RDUFRlc3QsIHdoaWNoIGRlZmluZXMgc2VsZi5wb3J0IHJlZmVyZW5jZWQgYmVsb3cuCisgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBzZWxmLnBvcnQpKQorICAgICAgICBzZWxmLnNlcnZfY29ubiA9IHNlbGYuY2xpCisKK2NsYXNzIEJhc2ljVENQVGVzdDIoTmV0d29ya0Nvbm5lY3Rpb25UZXN0LCBCYXNpY1RDUFRlc3QpOgorICAgICIiIlRlc3RzIHRoYXQgTmV0d29ya0Nvbm5lY3Rpb24gZG9lcyBub3QgYnJlYWsgZXhpc3RpbmcgVENQIGZ1bmN0aW9uYWxpdHkuCisgICAgIiIiCisKK2NsYXNzIE5ldHdvcmtDb25uZWN0aW9uTm9TZXJ2ZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNsYXNzIE1vY2tTb2NrZXQoc29ja2V0LnNvY2tldCk6CisgICAgICAgIGRlZiBjb25uZWN0KHNlbGYsICphcmdzKToKKyAgICAgICAgICAgIHJhaXNlIHNvY2tldC50aW1lb3V0KCd0aW1lZCBvdXQnKQorCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgbW9ja2VkX3NvY2tldF9tb2R1bGUoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIHNvY2tldCB3aGljaCB0aW1lcyBvdXQgb24gY29ubmVjdCIiIgorICAgICAgICBvbGRfc29ja2V0ID0gc29ja2V0LnNvY2tldAorICAgICAgICBzb2NrZXQuc29ja2V0ID0gc2VsZi5Nb2NrU29ja2V0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzb2NrZXQuc29ja2V0ID0gb2xkX3NvY2tldAorCisgICAgZGVmIHRlc3RfY29ubmVjdChzZWxmKToKKyAgICAgICAgcG9ydCA9IHRlc3Rfc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKKyAgICAgICAgY2xpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xpLmNsb3NlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgICAgICBjbGkuY29ubmVjdCgoSE9TVCwgcG9ydCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FQ09OTlJFRlVTRUQpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjOTc5MjogZXJyb3JzIHJhaXNlZCBieSBjcmVhdGVfY29ubmVjdGlvbigpIHNob3VsZCBoYXZlCisgICAgICAgICMgYSBwcm9wZXIgZXJybm8gYXR0cmlidXRlLgorICAgICAgICBwb3J0ID0gdGVzdF9zdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgICAgICBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHBvcnQpKQorCisgICAgICAgICMgSXNzdWUgIzE2MjU3OiBjcmVhdGVfY29ubmVjdGlvbigpIGNhbGxzIGdldGFkZHJpbmZvKCkgYWdhaW5zdAorICAgICAgICAjICdsb2NhbGhvc3QnLiAgVGhpcyBtYXkgcmVzdWx0IGluIGFuIElQVjYgYWRkciBiZWluZyByZXR1cm5lZAorICAgICAgICAjIGFzIHdlbGwgYXMgYW4gSVBWNCBvbmU6CisgICAgICAgICMgICA+Pj4gc29ja2V0LmdldGFkZHJpbmZvKCdsb2NhbGhvc3QnLCBwb3J0LCAwLCBTT0NLX1NUUkVBTSkKKyAgICAgICAgIyAgID4+PiBbKDIsICAyLCAwLCAnJywgKCcxMjcuMC4wLjEnLCA0MTIzMCkpLAorICAgICAgICAjICAgICAgICAoMjYsIDIsIDAsICcnLCAoJzo6MScsIDQxMjMwLCAwLCAwKSldCisgICAgICAgICMKKyAgICAgICAgIyBjcmVhdGVfY29ubmVjdGlvbigpIGVudW1lcmF0ZXMgdGhyb3VnaCBhbGwgdGhlIGFkZHJlc3NlcyByZXR1cm5lZAorICAgICAgICAjIGFuZCBpZiBpdCBkb2Vzbid0IHN1Y2Nlc3NmdWxseSBiaW5kIHRvIGFueSBvZiB0aGVtLCBpdCBwcm9wYWdhdGVzCisgICAgICAgICMgdGhlIGxhc3QgZXhjZXB0aW9uIGl0IGVuY291bnRlcmVkLgorICAgICAgICAjCisgICAgICAgICMgT24gU29sYXJpcywgRU5FVFVOUkVBQ0ggaXMgcmV0dXJuZWQgaW4gdGhpcyBjaXJjdW1zdGFuY2UgaW5zdGVhZAorICAgICAgICAjIG9mIEVDT05OUkVGVVNFRC4gIFNvLCBpZiB0aGF0IGVycm5vIGV4aXN0cywgYWRkIGl0IHRvIG91ciBsaXN0IG9mCisgICAgICAgICMgZXhwZWN0ZWQgZXJybm9zLgorICAgICAgICBleHBlY3RlZF9lcnJub3MgPSBbIGVycm5vLkVDT05OUkVGVVNFRCwgXQorICAgICAgICBpZiBoYXNhdHRyKGVycm5vLCAnRU5FVFVOUkVBQ0gnKToKKyAgICAgICAgICAgIGV4cGVjdGVkX2Vycm5vcy5hcHBlbmQoZXJybm8uRU5FVFVOUkVBQ0gpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbihjbS5leGNlcHRpb24uZXJybm8sIGV4cGVjdGVkX2Vycm5vcykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX3RpbWVvdXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzk3OTI6IGNyZWF0ZV9jb25uZWN0aW9uKCkgc2hvdWxkIG5vdCByZWNhc3QgdGltZW91dCBlcnJvcnMKKyAgICAgICAgIyBhcyBnZW5lcmljIHNvY2tldCBlcnJvcnMuCisgICAgICAgIHdpdGggc2VsZi5tb2NrZWRfc29ja2V0X21vZHVsZSgpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQudGltZW91dCk6CisgICAgICAgICAgICAgICAgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCAxMjM0KSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgTmV0d29ya0Nvbm5lY3Rpb25BdHRyaWJ1dGVzVGVzdChTb2NrZXRUQ1BUZXN0LCBUaHJlYWRhYmxlVGVzdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgorICAgICAgICBTb2NrZXRUQ1BUZXN0Ll9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9bWV0aG9kTmFtZSkKKyAgICAgICAgVGhyZWFkYWJsZVRlc3QuX19pbml0X18oc2VsZikKKworICAgIGRlZiBjbGllbnRTZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zb3VyY2VfcG9ydCA9IHRlc3Rfc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKKworICAgIGRlZiBjbGllbnRUZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jbGkuY2xvc2UoKQorICAgICAgICBzZWxmLmNsaSA9IE5vbmUKKyAgICAgICAgVGhyZWFkYWJsZVRlc3QuY2xpZW50VGVhckRvd24oc2VsZikKKworICAgIGRlZiBfanVzdEFjY2VwdChzZWxmKToKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc2Vydi5hY2NlcHQoKQorICAgICAgICBjb25uLmNsb3NlKCkKKworICAgIHRlc3RGYW1pbHkgPSBfanVzdEFjY2VwdAorICAgIGRlZiBfdGVzdEZhbWlseShzZWxmKToKKyAgICAgICAgc2VsZi5jbGkgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHNlbGYucG9ydCksIHRpbWVvdXQ9MzApCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLmNsaS5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaS5mYW1pbHksIDIpCisKKyAgICB0ZXN0U291cmNlQWRkcmVzcyA9IF9qdXN0QWNjZXB0CisgICAgZGVmIF90ZXN0U291cmNlQWRkcmVzcyhzZWxmKToKKyAgICAgICAgc2VsZi5jbGkgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHNlbGYucG9ydCksIHRpbWVvdXQ9MzAsCisgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9KCcnLCBzZWxmLnNvdXJjZV9wb3J0KSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYuY2xpLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpLmdldHNvY2tuYW1lKClbMV0sIHNlbGYuc291cmNlX3BvcnQpCisgICAgICAgICMgVGhlIHBvcnQgbnVtYmVyIGJlaW5nIHVzZWQgaXMgc3VmZmljaWVudCB0byBzaG93IHRoYXQgdGhlIGJpbmQoKQorICAgICAgICAjIGNhbGwgaGFwcGVuZWQuCisKKyAgICB0ZXN0VGltZW91dERlZmF1bHQgPSBfanVzdEFjY2VwdAorICAgIGRlZiBfdGVzdFRpbWVvdXREZWZhdWx0KHNlbGYpOgorICAgICAgICAjIHBhc3Npbmcgbm8gZXhwbGljaXQgdGltZW91dCB1c2VzIHNvY2tldCdzIGdsb2JhbCBkZWZhdWx0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNDIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBzZWxmLnBvcnQpKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYuY2xpLmNsb3NlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGkuZ2V0dGltZW91dCgpLCA0MikKKworICAgIHRlc3RUaW1lb3V0Tm9uZSA9IF9qdXN0QWNjZXB0CisgICAgZGVmIF90ZXN0VGltZW91dE5vbmUoc2VsZik6CisgICAgICAgICMgTm9uZSB0aW1lb3V0IG1lYW5zIHRoZSBzYW1lIGFzIHNvY2suc2V0dGltZW91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNsaSA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgc2VsZi5wb3J0KSwgdGltZW91dD1Ob25lKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYuY2xpLmNsb3NlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGkuZ2V0dGltZW91dCgpLCBOb25lKQorCisgICAgdGVzdFRpbWVvdXRWYWx1ZU5hbWVkID0gX2p1c3RBY2NlcHQKKyAgICBkZWYgX3Rlc3RUaW1lb3V0VmFsdWVOYW1lZChzZWxmKToKKyAgICAgICAgc2VsZi5jbGkgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHNlbGYucG9ydCksIHRpbWVvdXQ9MzApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGkuZ2V0dGltZW91dCgpLCAzMCkKKworICAgIHRlc3RUaW1lb3V0VmFsdWVOb25hbWVkID0gX2p1c3RBY2NlcHQKKyAgICBkZWYgX3Rlc3RUaW1lb3V0VmFsdWVOb25hbWVkKHNlbGYpOgorICAgICAgICBzZWxmLmNsaSA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgc2VsZi5wb3J0KSwgMzApCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLmNsaS5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaS5nZXR0aW1lb3V0KCksIDMwKQorCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgTmV0d29ya0Nvbm5lY3Rpb25CZWhhdmlvdXJUZXN0KFNvY2tldFRDUFRlc3QsIFRocmVhZGFibGVUZXN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgIFNvY2tldFRDUFRlc3QuX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT1tZXRob2ROYW1lKQorICAgICAgICBUaHJlYWRhYmxlVGVzdC5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIGNsaWVudFNldFVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY2xpZW50VGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY2xpLmNsb3NlKCkKKyAgICAgICAgc2VsZi5jbGkgPSBOb25lCisgICAgICAgIFRocmVhZGFibGVUZXN0LmNsaWVudFRlYXJEb3duKHNlbGYpCisKKyAgICBkZWYgdGVzdEluc2lkZVRpbWVvdXQoc2VsZik6CisgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNlcnYuYWNjZXB0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNvbm4uY2xvc2UpCisgICAgICAgIHRpbWUuc2xlZXAoMykKKyAgICAgICAgY29ubi5zZW5kKCJkb25lISIpCisgICAgdGVzdE91dHNpZGVUaW1lb3V0ID0gdGVzdEluc2lkZVRpbWVvdXQKKworICAgIGRlZiBfdGVzdEluc2lkZVRpbWVvdXQoc2VsZik6CisgICAgICAgIHNlbGYuY2xpID0gc29jayA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgc2VsZi5wb3J0KSkKKyAgICAgICAgZGF0YSA9IHNvY2sucmVjdig1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICJkb25lISIpCisKKyAgICBkZWYgX3Rlc3RPdXRzaWRlVGltZW91dChzZWxmKToKKyAgICAgICAgc2VsZi5jbGkgPSBzb2NrID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBzZWxmLnBvcnQpLCB0aW1lb3V0PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC50aW1lb3V0LCBsYW1iZGE6IHNvY2sucmVjdig1KSkKKworCitjbGFzcyBVcmxsaWIyRmlsZW9iamVjdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyB1cmxsaWIyLkhUVFBIYW5kbGVyIGhhcyAiYm9ycm93ZWQiIHNvY2tldC5fZmlsZW9iamVjdCwgYW5kIHJlcXVpcmVzIHRoYXQKKyAgICAjIGl0IGNsb3NlIHRoZSBzb2NrZXQgaWYgdGhlIGNsb3NlIGMndG9yIGFyZ3VtZW50IGlzIHRydWUKKworICAgIGRlZiB0ZXN0Q2xvc2Uoc2VsZik6CisgICAgICAgIGNsYXNzIE1vY2tTb2NrZXQ6CisgICAgICAgICAgICBjbG9zZWQgPSBGYWxzZQorICAgICAgICAgICAgZGVmIGZsdXNoKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6IHNlbGYuY2xvc2VkID0gVHJ1ZQorCisgICAgICAgICMgbXVzdCBub3QgY2xvc2UgdW5sZXNzIHdlIHJlcXVlc3QgaXQ6IHRoZSBvcmlnaW5hbCB1c2Ugb2YgX2ZpbGVvYmplY3QKKyAgICAgICAgIyBieSBtb2R1bGUgc29ja2V0IHJlcXVpcmVzIHRoYXQgdGhlIHVuZGVybHlpbmcgc29ja2V0IG5vdCBiZSBjbG9zZWQgdW50aWwKKyAgICAgICAgIyB0aGUgX3NvY2tldG9iamVjdCB0aGF0IGNyZWF0ZWQgdGhlIF9maWxlb2JqZWN0IGlzIGNsb3NlZAorICAgICAgICBzID0gTW9ja1NvY2tldCgpCisgICAgICAgIGYgPSBzb2NrZXQuX2ZpbGVvYmplY3QocykKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgcy5jbG9zZWQpCisKKyAgICAgICAgcyA9IE1vY2tTb2NrZXQoKQorICAgICAgICBmID0gc29ja2V0Ll9maWxlb2JqZWN0KHMsIGNsb3NlPVRydWUpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5jbG9zZWQpCisKK2NsYXNzIFRDUFRpbWVvdXRUZXN0KFNvY2tldFRDUFRlc3QpOgorCisgICAgZGVmIHRlc3RUQ1BUaW1lb3V0KHNlbGYpOgorICAgICAgICBkZWYgcmFpc2VfdGltZW91dCgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgc2VsZi5zZXJ2LnNldHRpbWVvdXQoMS4wKQorICAgICAgICAgICAgc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC50aW1lb3V0LCByYWlzZV90aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGdlbmVyYXRpbmcgYSB0aW1lb3V0IGV4Y2VwdGlvbiAoVENQKSIpCisKKyAgICBkZWYgdGVzdFRpbWVvdXRaZXJvKHNlbGYpOgorICAgICAgICBvayA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuc2Vydi5zZXR0aW1lb3V0KDAuMCkKKyAgICAgICAgICAgIGZvbyA9IHNlbGYuc2Vydi5hY2NlcHQoKQorICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoImNhdWdodCB0aW1lb3V0IGluc3RlYWQgb2YgZXJyb3IgKFRDUCkiKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgb2sgPSBUcnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIChUQ1ApIikKKyAgICAgICAgaWYgbm90IG9rOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJhY2NlcHQoKSByZXR1cm5lZCBzdWNjZXNzIHdoZW4gd2UgZGlkIG5vdCBleHBlY3QgaXQiKQorCisgICAgZGVmIHRlc3RJbnRlcnJ1cHRlZFRpbWVvdXQoc2VsZik6CisgICAgICAgICMgWFhYIEkgZG9uJ3Qga25vdyBob3cgdG8gZG8gdGhpcyB0ZXN0IG9uIE1TV2luZG93cyBvciBhbnkgb3RoZXIKKyAgICAgICAgIyBwbGFmb3JtIHRoYXQgZG9lc24ndCBzdXBwb3J0IHNpZ25hbC5hbGFybSgpIG9yIG9zLmtpbGwoKSwgdGhvdWdoCisgICAgICAgICMgdGhlIGJ1ZyBzaG91bGQgaGF2ZSBleGlzdGVkIG9uIGFsbCBwbGF0Zm9ybXMuCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNpZ25hbCwgImFsYXJtIik6CisgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAgICAgICAjIGNhbiBvbmx5IHRlc3Qgb24gKm5peAorICAgICAgICBzZWxmLnNlcnYuc2V0dGltZW91dCg1LjApICAgIyBtdXN0IGJlIGxvbmdlciB0aGFuIGFsYXJtCisgICAgICAgIGNsYXNzIEFsYXJtKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBhbGFybV9oYW5kbGVyKHNpZ25hbCwgZnJhbWUpOgorICAgICAgICAgICAgcmFpc2UgQWxhcm0KKyAgICAgICAgb2xkX2FsYXJtID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgYWxhcm1faGFuZGxlcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDIpICAgICMgUE9TSVggYWxsb3dzIGFsYXJtIHRvIGJlIHVwIHRvIDEgc2Vjb25kIGVhcmx5CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZm9vID0gc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgdGltZW91dCBpbnN0ZWFkIG9mIEFsYXJtIikKKyAgICAgICAgICAgIGV4Y2VwdCBBbGFybToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgb3RoZXIgZXhjZXB0aW9uIGluc3RlYWQgb2YgQWxhcm06IgorICAgICAgICAgICAgICAgICAgICAgICAgICAiICVzKCVzKTpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzeXMuZXhjX2luZm8oKVs6Ml0gKyAodHJhY2ViYWNrLmZvcm1hdF9leGMoKSwpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJub3RoaW5nIGNhdWdodCIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgwKSAgICAgICAgICMgc2h1dCBvZmYgYWxhcm0KKyAgICAgICAgZXhjZXB0IEFsYXJtOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJnb3QgQWxhcm0gaW4gd3JvbmcgcGxhY2UiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIyBubyBhbGFybSBjYW4gYmUgcGVuZGluZy4gIFNhZmUgdG8gcmVzdG9yZSBvbGQgaGFuZGxlci4KKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIG9sZF9hbGFybSkKKworY2xhc3MgVURQVGltZW91dFRlc3QoU29ja2V0VURQVGVzdCk6CisKKyAgICBkZWYgdGVzdFVEUFRpbWVvdXQoc2VsZik6CisgICAgICAgIGRlZiByYWlzZV90aW1lb3V0KCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBzZWxmLnNlcnYuc2V0dGltZW91dCgxLjApCisgICAgICAgICAgICBzZWxmLnNlcnYucmVjdigxMDI0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQudGltZW91dCwgcmFpc2VfdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBnZW5lcmF0aW5nIGEgdGltZW91dCBleGNlcHRpb24gKFVEUCkiKQorCisgICAgZGVmIHRlc3RUaW1lb3V0WmVybyhzZWxmKToKKyAgICAgICAgb2sgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNlcnYuc2V0dGltZW91dCgwLjApCisgICAgICAgICAgICBmb28gPSBzZWxmLnNlcnYucmVjdigxMDI0KQorICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoImNhdWdodCB0aW1lb3V0IGluc3RlYWQgb2YgZXJyb3IgKFVEUCkiKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgb2sgPSBUcnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIChVRFApIikKKyAgICAgICAgaWYgbm90IG9rOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWN2KCkgcmV0dXJuZWQgc3VjY2VzcyB3aGVuIHdlIGRpZCBub3QgZXhwZWN0IGl0IikKKworY2xhc3MgVGVzdEV4Y2VwdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RFeGNlcHRpb25UcmVlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuZXJyb3IsIEV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC5oZXJyb3IsIHNvY2tldC5lcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC5nYWllcnJvciwgc29ja2V0LmVycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LnRpbWVvdXQsIHNvY2tldC5lcnJvcikpCisKK2NsYXNzIFRlc3RMaW51eEFic3RyYWN0TmFtZXNwYWNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIFVOSVhfUEFUSF9NQVggPSAxMDgKKworICAgIGRlZiB0ZXN0TGludXhBYnN0cmFjdE5hbWVzcGFjZShzZWxmKToKKyAgICAgICAgYWRkcmVzcyA9ICJceDAwcHl0aG9uLXRlc3QtaGVsbG9ceDAwXHhmZiIKKyAgICAgICAgczEgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHMxLmJpbmQoYWRkcmVzcykKKyAgICAgICAgczEubGlzdGVuKDEpCisgICAgICAgIHMyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzMi5jb25uZWN0KHMxLmdldHNvY2tuYW1lKCkpCisgICAgICAgIHMxLmFjY2VwdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEuZ2V0c29ja25hbWUoKSwgYWRkcmVzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMi5nZXRwZWVybmFtZSgpLCBhZGRyZXNzKQorCisgICAgZGVmIHRlc3RNYXhOYW1lKHNlbGYpOgorICAgICAgICBhZGRyZXNzID0gIlx4MDAiICsgImgiICogKHNlbGYuVU5JWF9QQVRIX01BWCAtIDEpCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHMuYmluZChhZGRyZXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0c29ja25hbWUoKSwgYWRkcmVzcykKKworICAgIGRlZiB0ZXN0TmFtZU92ZXJmbG93KHNlbGYpOgorICAgICAgICBhZGRyZXNzID0gIlx4MDAiICsgImgiICogc2VsZi5VTklYX1BBVEhfTUFYCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgcy5iaW5kLCBhZGRyZXNzKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBCdWZmZXJJT1Rlc3QoU29ja2V0Q29ubmVjdGVkVGVzdCk6CisgICAgIiIiCisgICAgVGVzdCB0aGUgYnVmZmVyIHZlcnNpb25zIG9mIHNvY2tldC5yZWN2KCkgYW5kIHNvY2tldC5zZW5kKCkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKKyAgICAgICAgU29ja2V0Q29ubmVjdGVkVGVzdC5fX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPW1ldGhvZE5hbWUpCisKKyAgICBkZWYgdGVzdFJlY3ZJbnRvQXJyYXkoc2VsZik6CisgICAgICAgIGJ1ZiA9IGFycmF5LmFycmF5KCdjJywgJyAnKjEwMjQpCisgICAgICAgIG5ieXRlcyA9IHNlbGYuY2xpX2Nvbm4ucmVjdl9pbnRvKGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYnl0ZXMsIGxlbihNU0cpKQorICAgICAgICBtc2cgPSBidWYudG9zdHJpbmcoKVs6bGVuKE1TRyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBkZWYgX3Rlc3RSZWN2SW50b0FycmF5KHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBidWYgPSBidWZmZXIoTVNHKQorICAgICAgICBzZWxmLnNlcnZfY29ubi5zZW5kKGJ1ZikKKworICAgIGRlZiB0ZXN0UmVjdkludG9CeXRlYXJyYXkoc2VsZik6CisgICAgICAgIGJ1ZiA9IGJ5dGVhcnJheSgxMDI0KQorICAgICAgICBuYnl0ZXMgPSBzZWxmLmNsaV9jb25uLnJlY3ZfaW50byhidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmJ5dGVzLCBsZW4oTVNHKSkKKyAgICAgICAgbXNnID0gYnVmWzpsZW4oTVNHKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIF90ZXN0UmVjdkludG9CeXRlYXJyYXkgPSBfdGVzdFJlY3ZJbnRvQXJyYXkKKworICAgIGRlZiB0ZXN0UmVjdkludG9NZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBidWYgPSBieXRlYXJyYXkoMTAyNCkKKyAgICAgICAgbmJ5dGVzID0gc2VsZi5jbGlfY29ubi5yZWN2X2ludG8obWVtb3J5dmlldyhidWYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ieXRlcywgbGVuKE1TRykpCisgICAgICAgIG1zZyA9IGJ1Zls6bGVuKE1TRyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBfdGVzdFJlY3ZJbnRvTWVtb3J5dmlldyA9IF90ZXN0UmVjdkludG9BcnJheQorCisgICAgZGVmIHRlc3RSZWN2RnJvbUludG9BcnJheShzZWxmKToKKyAgICAgICAgYnVmID0gYXJyYXkuYXJyYXkoJ2MnLCAnICcqMTAyNCkKKyAgICAgICAgbmJ5dGVzLCBhZGRyID0gc2VsZi5jbGlfY29ubi5yZWN2ZnJvbV9pbnRvKGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYnl0ZXMsIGxlbihNU0cpKQorICAgICAgICBtc2cgPSBidWYudG9zdHJpbmcoKVs6bGVuKE1TRyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBkZWYgX3Rlc3RSZWN2RnJvbUludG9BcnJheShzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgYnVmID0gYnVmZmVyKE1TRykKKyAgICAgICAgc2VsZi5zZXJ2X2Nvbm4uc2VuZChidWYpCisKKyAgICBkZWYgdGVzdFJlY3ZGcm9tSW50b0J5dGVhcnJheShzZWxmKToKKyAgICAgICAgYnVmID0gYnl0ZWFycmF5KDEwMjQpCisgICAgICAgIG5ieXRlcywgYWRkciA9IHNlbGYuY2xpX2Nvbm4ucmVjdmZyb21faW50byhidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmJ5dGVzLCBsZW4oTVNHKSkKKyAgICAgICAgbXNnID0gYnVmWzpsZW4oTVNHKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIF90ZXN0UmVjdkZyb21JbnRvQnl0ZWFycmF5ID0gX3Rlc3RSZWN2RnJvbUludG9BcnJheQorCisgICAgZGVmIHRlc3RSZWN2RnJvbUludG9NZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBidWYgPSBieXRlYXJyYXkoMTAyNCkKKyAgICAgICAgbmJ5dGVzLCBhZGRyID0gc2VsZi5jbGlfY29ubi5yZWN2ZnJvbV9pbnRvKG1lbW9yeXZpZXcoYnVmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYnl0ZXMsIGxlbihNU0cpKQorICAgICAgICBtc2cgPSBidWZbOmxlbihNU0cpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorCisgICAgX3Rlc3RSZWN2RnJvbUludG9NZW1vcnl2aWV3ID0gX3Rlc3RSZWN2RnJvbUludG9BcnJheQorCisKK1RJUENfU1RZUEUgPSAyMDAwCitUSVBDX0xPV0VSID0gMjAwCitUSVBDX1VQUEVSID0gMjEwCisKK2RlZiBpc1RpcGNBdmFpbGFibGUoKToKKyAgICAiIiJDaGVjayBpZiB0aGUgVElQQyBtb2R1bGUgaXMgbG9hZGVkCisKKyAgICBUaGUgVElQQyBtb2R1bGUgaXMgbm90IGxvYWRlZCBhdXRvbWF0aWNhbGx5IG9uIFVidW50dSBhbmQgcHJvYmFibHkKKyAgICBvdGhlciBMaW51eCBkaXN0cm9zLgorICAgICIiIgorICAgIGlmIG5vdCBoYXNhdHRyKHNvY2tldCwgIkFGX1RJUEMiKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKCIvcHJvYy9tb2R1bGVzIik6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHdpdGggb3BlbigiL3Byb2MvbW9kdWxlcyIpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoInRpcGMgIik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgcHJpbnQgIlRJUEMgbW9kdWxlIGlzIG5vdCBsb2FkZWQsIHBsZWFzZSAnc3VkbyBtb2Rwcm9iZSB0aXBjJyIKKyAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgVElQQ1Rlc3QgKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdFJETShzZWxmKToKKyAgICAgICAgc3J2ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVElQQywgc29ja2V0LlNPQ0tfUkRNKQorICAgICAgICBjbGkgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9USVBDLCBzb2NrZXQuU09DS19SRE0pCisKKyAgICAgICAgc3J2LnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgIHNydmFkZHIgPSAoc29ja2V0LlRJUENfQUREUl9OQU1FU0VRLCBUSVBDX1NUWVBFLAorICAgICAgICAgICAgICAgIFRJUENfTE9XRVIsIFRJUENfVVBQRVIpCisgICAgICAgIHNydi5iaW5kKHNydmFkZHIpCisKKyAgICAgICAgc2VuZGFkZHIgPSAoc29ja2V0LlRJUENfQUREUl9OQU1FLCBUSVBDX1NUWVBFLAorICAgICAgICAgICAgICAgIFRJUENfTE9XRVIgKyAoVElQQ19VUFBFUiAtIFRJUENfTE9XRVIpIC8gMiwgMCkKKyAgICAgICAgY2xpLnNlbmR0byhNU0csIHNlbmRhZGRyKQorCisgICAgICAgIG1zZywgcmVjdmFkZHIgPSBzcnYucmVjdmZyb20oMTAyNCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsaS5nZXRzb2NrbmFtZSgpLCByZWN2YWRkcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworCitjbGFzcyBUSVBDVGhyZWFkYWJsZVRlc3QgKHVuaXR0ZXN0LlRlc3RDYXNlLCBUaHJlYWRhYmxlVGVzdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWUgPSAncnVuVGVzdCcpOgorICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5fX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lID0gbWV0aG9kTmFtZSkKKyAgICAgICAgVGhyZWFkYWJsZVRlc3QuX19pbml0X18oc2VsZikKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zcnYgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9USVBDLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuc3J2LnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgIHNydmFkZHIgPSAoc29ja2V0LlRJUENfQUREUl9OQU1FU0VRLCBUSVBDX1NUWVBFLAorICAgICAgICAgICAgICAgIFRJUENfTE9XRVIsIFRJUENfVVBQRVIpCisgICAgICAgIHNlbGYuc3J2LmJpbmQoc3J2YWRkcikKKyAgICAgICAgc2VsZi5zcnYubGlzdGVuKDUpCisgICAgICAgIHNlbGYuc2VydmVyRXhwbGljaXRSZWFkeSgpCisgICAgICAgIHNlbGYuY29ubiwgc2VsZi5jb25uYWRkciA9IHNlbGYuc3J2LmFjY2VwdCgpCisKKyAgICBkZWYgY2xpZW50U2V0VXAoc2VsZik6CisgICAgICAgICMgVGhlIGlzIGEgaGl0dGFibGUgcmFjZSBiZXR3ZWVuIHNlcnZlckV4cGxpY2l0UmVhZHkoKSBhbmQgdGhlCisgICAgICAgICMgYWNjZXB0KCkgY2FsbDsgc2xlZXAgYSBsaXR0bGUgd2hpbGUgdG8gYXZvaWQgaXQsIG90aGVyd2lzZQorICAgICAgICAjIHdlIGNvdWxkIGdldCBhbiBleGNlcHRpb24KKyAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVElQQywgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBhZGRyID0gKHNvY2tldC5USVBDX0FERFJfTkFNRSwgVElQQ19TVFlQRSwKKyAgICAgICAgICAgICAgICBUSVBDX0xPV0VSICsgKFRJUENfVVBQRVIgLSBUSVBDX0xPV0VSKSAvIDIsIDApCisgICAgICAgIHNlbGYuY2xpLmNvbm5lY3QoYWRkcikKKyAgICAgICAgc2VsZi5jbGlhZGRyID0gc2VsZi5jbGkuZ2V0c29ja25hbWUoKQorCisgICAgZGVmIHRlc3RTdHJlYW0oc2VsZik6CisgICAgICAgIG1zZyA9IHNlbGYuY29ubi5yZWN2KDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGlhZGRyLCBzZWxmLmNvbm5hZGRyKQorCisgICAgZGVmIF90ZXN0U3RyZWFtKHNlbGYpOgorICAgICAgICBzZWxmLmNsaS5zZW5kKE1TRykKKyAgICAgICAgc2VsZi5jbGkuY2xvc2UoKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0cyA9IFtHZW5lcmFsTW9kdWxlVGVzdHMsIEJhc2ljVENQVGVzdCwgVENQQ2xvc2VyVGVzdCwgVENQVGltZW91dFRlc3QsCisgICAgICAgICAgICAgVGVzdEV4Y2VwdGlvbnMsIEJ1ZmZlcklPVGVzdCwgQmFzaWNUQ1BUZXN0MiwgQmFzaWNVRFBUZXN0LAorICAgICAgICAgICAgIFVEUFRpbWVvdXRUZXN0IF0KKworICAgIHRlc3RzLmV4dGVuZChbCisgICAgICAgIE5vbkJsb2NraW5nVENQVGVzdHMsCisgICAgICAgIEZpbGVPYmplY3RDbGFzc1Rlc3RDYXNlLAorICAgICAgICBGaWxlT2JqZWN0SW50ZXJydXB0ZWRUZXN0Q2FzZSwKKyAgICAgICAgVW5idWZmZXJlZEZpbGVPYmplY3RDbGFzc1Rlc3RDYXNlLAorICAgICAgICBMaW5lQnVmZmVyZWRGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZSwKKyAgICAgICAgU21hbGxCdWZmZXJlZEZpbGVPYmplY3RDbGFzc1Rlc3RDYXNlLAorICAgICAgICBVcmxsaWIyRmlsZW9iamVjdFRlc3QsCisgICAgICAgIE5ldHdvcmtDb25uZWN0aW9uTm9TZXJ2ZXIsCisgICAgICAgIE5ldHdvcmtDb25uZWN0aW9uQXR0cmlidXRlc1Rlc3QsCisgICAgICAgIE5ldHdvcmtDb25uZWN0aW9uQmVoYXZpb3VyVGVzdCwKKyAgICBdKQorICAgIGlmIGhhc2F0dHIoc29ja2V0LCAic29ja2V0cGFpciIpOgorICAgICAgICB0ZXN0cy5hcHBlbmQoQmFzaWNTb2NrZXRQYWlyVGVzdCkKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2xpbnV4Mic6CisgICAgICAgIHRlc3RzLmFwcGVuZChUZXN0TGludXhBYnN0cmFjdE5hbWVzcGFjZSkKKyAgICBpZiBpc1RpcGNBdmFpbGFibGUoKToKKyAgICAgICAgdGVzdHMuYXBwZW5kKFRJUENUZXN0KQorICAgICAgICB0ZXN0cy5hcHBlbmQoVElQQ1RocmVhZGFibGVUZXN0KQorCisgICAgdGhyZWFkX2luZm8gPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKyAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnRocmVhZF9pbmZvKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zb2NrZXRzZXJ2ZXIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zb2NrZXRzZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRiYjhlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQpAQCAtMCwwICsxLDMxOSBAQAorIiIiCitUZXN0IHN1aXRlIGZvciBTb2NrZXRTZXJ2ZXIucHkuCisiIiIKKworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBpbXAKK2ltcG9ydCBvcworaW1wb3J0IHNlbGVjdAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHNlbGVjdAoraW1wb3J0IGVycm5vCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IFNvY2tldFNlcnZlcgorCitpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJlYXBfY2hpbGRyZW4sIHJlYXBfdGhyZWFkcywgdmVyYm9zZQordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKK3Rlc3QudGVzdF9zdXBwb3J0LnJlcXVpcmVzKCJuZXR3b3JrIikKKworVEVTVF9TVFIgPSAiaGVsbG8gd29ybGRcbiIKK0hPU1QgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5IT1NUCisKK0hBVkVfVU5JWF9TT0NLRVRTID0gaGFzYXR0cihzb2NrZXQsICJBRl9VTklYIikKK0hBVkVfRk9SS0lORyA9IGhhc2F0dHIob3MsICJmb3JrIikgYW5kIG9zLm5hbWUgIT0gIm9zMiIKKworZGVmIHNpZ25hbF9hbGFybShuKToKKyAgICAiIiJDYWxsIHNpZ25hbC5hbGFybSB3aGVuIGl0IGV4aXN0cyAoaS5lLiBub3Qgb24gV2luZG93cykuIiIiCisgICAgaWYgaGFzYXR0cihzaWduYWwsICdhbGFybScpOgorICAgICAgICBzaWduYWwuYWxhcm0obikKKworIyBSZW1lbWJlciByZWFsIHNlbGVjdCgpIHRvIGF2b2lkIGludGVyZmVyZW5jZXMgd2l0aCBtb2NraW5nCitfcmVhbF9zZWxlY3QgPSBzZWxlY3Quc2VsZWN0CisKK2RlZiByZWNlaXZlKHNvY2ssIG4sIHRpbWVvdXQ9MjApOgorICAgIHIsIHcsIHggPSBfcmVhbF9zZWxlY3QoW3NvY2tdLCBbXSwgW10sIHRpbWVvdXQpCisgICAgaWYgc29jayBpbiByOgorICAgICAgICByZXR1cm4gc29jay5yZWN2KG4pCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAidGltZWQgb3V0IG9uICVyIiAlIChzb2NrLCkKKworaWYgSEFWRV9VTklYX1NPQ0tFVFM6CisgICAgY2xhc3MgRm9ya2luZ1VuaXhTdHJlYW1TZXJ2ZXIoU29ja2V0U2VydmVyLkZvcmtpbmdNaXhJbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2NrZXRTZXJ2ZXIuVW5peFN0cmVhbVNlcnZlcik6CisgICAgICAgIHBhc3MKKworICAgIGNsYXNzIEZvcmtpbmdVbml4RGF0YWdyYW1TZXJ2ZXIoU29ja2V0U2VydmVyLkZvcmtpbmdNaXhJbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvY2tldFNlcnZlci5Vbml4RGF0YWdyYW1TZXJ2ZXIpOgorICAgICAgICBwYXNzCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBzaW1wbGVfc3VicHJvY2Vzcyh0ZXN0Y2FzZSk6CisgICAgcGlkID0gb3MuZm9yaygpCisgICAgaWYgcGlkID09IDA6CisgICAgICAgICMgRG9uJ3QgcmFpc2UgYW4gZXhjZXB0aW9uOyBpdCB3b3VsZCBiZSBjYXVnaHQgYnkgdGhlIHRlc3QgaGFybmVzcy4KKyAgICAgICAgb3MuX2V4aXQoNzIpCisgICAgeWllbGQgTm9uZQorICAgIHBpZDIsIHN0YXR1cyA9IG9zLndhaXRwaWQocGlkLCAwKQorICAgIHRlc3RjYXNlLmFzc2VydEVxdWFsKHBpZDIsIHBpZCkKKyAgICB0ZXN0Y2FzZS5hc3NlcnRFcXVhbCg3MiA8PCA4LCBzdGF0dXMpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFNvY2tldFNlcnZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgYWxsIHNvY2tldCBzZXJ2ZXJzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzaWduYWxfYWxhcm0oNjApICAjIEtpbGwgZGVhZGxvY2tzIGFmdGVyIDYwIHNlY29uZHMuCisgICAgICAgIHNlbGYucG9ydF9zZWVkID0gMAorICAgICAgICBzZWxmLnRlc3RfZmlsZXMgPSBbXQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzaWduYWxfYWxhcm0oMCkgICMgRGlkbid0IGRlYWRsb2NrLgorICAgICAgICByZWFwX2NoaWxkcmVuKCkKKworICAgICAgICBmb3IgZm4gaW4gc2VsZi50ZXN0X2ZpbGVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKyAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYudGVzdF9maWxlc1s6XSA9IFtdCisKKyAgICBkZWYgcGlja2FkZHIoc2VsZiwgcHJvdG8pOgorICAgICAgICBpZiBwcm90byA9PSBzb2NrZXQuQUZfSU5FVDoKKyAgICAgICAgICAgIHJldHVybiAoSE9TVCwgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgWFhYOiBXZSBuZWVkIGEgd2F5IHRvIHRlbGwgQUZfVU5JWCB0byBwaWNrIGl0cyBvd24gbmFtZQorICAgICAgICAgICAgIyBsaWtlIEFGX0lORVQgcHJvdmlkZXMgcG9ydD09MC4KKyAgICAgICAgICAgIGRpciA9IE5vbmUKKyAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ29zMic6CisgICAgICAgICAgICAgICAgZGlyID0gJ1xzb2NrZXQnCisgICAgICAgICAgICBmbiA9IHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9J3VuaXhfc29ja2V0LicsIGRpcj1kaXIpCisgICAgICAgICAgICBpZiBvcy5uYW1lID09ICdvczInOgorICAgICAgICAgICAgICAgICMgQUZfVU5JWCBzb2NrZXQgbmFtZXMgb24gT1MvMiByZXF1aXJlIGEgc3BlY2lmaWMgcHJlZml4CisgICAgICAgICAgICAgICAgIyB3aGljaCBjYW4ndCBpbmNsdWRlIGEgZHJpdmUgbGV0dGVyIGFuZCBtdXN0IGFsc28gdXNlCisgICAgICAgICAgICAgICAgIyBiYWNrc2xhc2hlcyBhcyBkaXJlY3Rvcnkgc2VwYXJhdG9ycworICAgICAgICAgICAgICAgIGlmIGZuWzFdID09ICc6JzoKKyAgICAgICAgICAgICAgICAgICAgZm4gPSBmblsyOl0KKyAgICAgICAgICAgICAgICBpZiBmblswXSBpbiAob3Muc2VwLCBvcy5hbHRzZXApOgorICAgICAgICAgICAgICAgICAgICBmbiA9IGZuWzE6XQorICAgICAgICAgICAgICAgIGlmIG9zLnNlcCA9PSAnLyc6CisgICAgICAgICAgICAgICAgICAgIGZuID0gZm4ucmVwbGFjZShvcy5zZXAsIG9zLmFsdHNlcCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmbiA9IGZuLnJlcGxhY2Uob3MuYWx0c2VwLCBvcy5zZXApCisgICAgICAgICAgICBzZWxmLnRlc3RfZmlsZXMuYXBwZW5kKGZuKQorICAgICAgICAgICAgcmV0dXJuIGZuCisKKyAgICBkZWYgbWFrZV9zZXJ2ZXIoc2VsZiwgYWRkciwgc3ZyY2xzLCBoZGxyYmFzZSk6CisgICAgICAgIGNsYXNzIE15U2VydmVyKHN2cmNscyk6CisgICAgICAgICAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYsIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKToKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBjbGFzcyBNeUhhbmRsZXIoaGRscmJhc2UpOgorICAgICAgICAgICAgZGVmIGhhbmRsZShzZWxmKToKKyAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5yZmlsZS5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShsaW5lKQorCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJjcmVhdGluZyBzZXJ2ZXIiCisgICAgICAgIHNlcnZlciA9IE15U2VydmVyKGFkZHIsIE15SGFuZGxlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHNlcnZlci5zb2NrZXQuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgcmV0dXJuIHNlcnZlcgorCisgICAgQHJlYXBfdGhyZWFkcworICAgIGRlZiBydW5fc2VydmVyKHNlbGYsIHN2cmNscywgaGRscmJhc2UsIHRlc3RmdW5jKToKKyAgICAgICAgc2VydmVyID0gc2VsZi5tYWtlX3NlcnZlcihzZWxmLnBpY2thZGRyKHN2cmNscy5hZGRyZXNzX2ZhbWlseSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZyY2xzLCBoZGxyYmFzZSkKKyAgICAgICAgIyBXZSBoYWQgdGhlIE9TIHBpY2sgYSBwb3J0LCBzbyBwdWxsIHRoZSByZWFsIGFkZHJlc3Mgb3V0IG9mCisgICAgICAgICMgdGhlIHNlcnZlci4KKyAgICAgICAgYWRkciA9IHNlcnZlci5zZXJ2ZXJfYWRkcmVzcworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgInNlcnZlciBjcmVhdGVkIgorICAgICAgICAgICAgcHJpbnQgIkFERFIgPSIsIGFkZHIKKyAgICAgICAgICAgIHByaW50ICJDTEFTUyA9Iiwgc3ZyY2xzCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKAorICAgICAgICAgICAgbmFtZT0nJXMgc2VydmluZycgJSBzdnJjbHMsCisgICAgICAgICAgICB0YXJnZXQ9c2VydmVyLnNlcnZlX2ZvcmV2ZXIsCisgICAgICAgICAgICAjIFNob3J0IHBvbGwgaW50ZXJ2YWwgdG8gbWFrZSB0aGUgdGVzdCBmaW5pc2ggcXVpY2tseS4KKyAgICAgICAgICAgICMgVGltZSBiZXR3ZWVuIHJlcXVlc3RzIGlzIHNob3J0IGVub3VnaCB0aGF0IHdlIHdvbid0IHdha2UKKyAgICAgICAgICAgICMgdXAgc3B1cmlvdXNseSB0b28gbWFueSB0aW1lcy4KKyAgICAgICAgICAgIGt3YXJncz17J3BvbGxfaW50ZXJ2YWwnOjAuMDF9KQorICAgICAgICB0LmRhZW1vbiA9IFRydWUgICMgSW4gY2FzZSB0aGlzIGZ1bmN0aW9uIHJhaXNlcy4KKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJzZXJ2ZXIgcnVubmluZyIKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAidGVzdCBjbGllbnQiLCBpCisgICAgICAgICAgICB0ZXN0ZnVuYyhzdnJjbHMuYWRkcmVzc19mYW1pbHksIGFkZHIpCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJ3YWl0aW5nIGZvciBzZXJ2ZXIiCisgICAgICAgIHNlcnZlci5zaHV0ZG93bigpCisgICAgICAgIHQuam9pbigpCisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICJkb25lIgorCisgICAgZGVmIHN0cmVhbV9leGFtaW5lKHNlbGYsIHByb3RvLCBhZGRyKToKKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQocHJvdG8sIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgcy5jb25uZWN0KGFkZHIpCisgICAgICAgIHMuc2VuZGFsbChURVNUX1NUUikKKyAgICAgICAgYnVmID0gZGF0YSA9IHJlY2VpdmUocywgMTAwKQorICAgICAgICB3aGlsZSBkYXRhIGFuZCAnXG4nIG5vdCBpbiBidWY6CisgICAgICAgICAgICBkYXRhID0gcmVjZWl2ZShzLCAxMDApCisgICAgICAgICAgICBidWYgKz0gZGF0YQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgVEVTVF9TVFIpCisgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVmIGRncmFtX2V4YW1pbmUoc2VsZiwgcHJvdG8sIGFkZHIpOgorICAgICAgICBzID0gc29ja2V0LnNvY2tldChwcm90bywgc29ja2V0LlNPQ0tfREdSQU0pCisgICAgICAgIHMuc2VuZHRvKFRFU1RfU1RSLCBhZGRyKQorICAgICAgICBidWYgPSBkYXRhID0gcmVjZWl2ZShzLCAxMDApCisgICAgICAgIHdoaWxlIGRhdGEgYW5kICdcbicgbm90IGluIGJ1ZjoKKyAgICAgICAgICAgIGRhdGEgPSByZWNlaXZlKHMsIDEwMCkKKyAgICAgICAgICAgIGJ1ZiArPSBkYXRhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLCBURVNUX1NUUikKKyAgICAgICAgcy5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9UQ1BTZXJ2ZXIoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3NlcnZlcihTb2NrZXRTZXJ2ZXIuVENQU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgU29ja2V0U2VydmVyLlN0cmVhbVJlcXVlc3RIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW1fZXhhbWluZSkKKworICAgIGRlZiB0ZXN0X1RocmVhZGluZ1RDUFNlcnZlcihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fc2VydmVyKFNvY2tldFNlcnZlci5UaHJlYWRpbmdUQ1BTZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBTb2NrZXRTZXJ2ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbV9leGFtaW5lKQorCisgICAgaWYgSEFWRV9GT1JLSU5HOgorICAgICAgICBkZWYgdGVzdF9Gb3JraW5nVENQU2VydmVyKHNlbGYpOgorICAgICAgICAgICAgd2l0aCBzaW1wbGVfc3VicHJvY2VzcyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bl9zZXJ2ZXIoU29ja2V0U2VydmVyLkZvcmtpbmdUQ1BTZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvY2tldFNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW1fZXhhbWluZSkKKworICAgIGlmIEhBVkVfVU5JWF9TT0NLRVRTOgorICAgICAgICBkZWYgdGVzdF9Vbml4U3RyZWFtU2VydmVyKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5ydW5fc2VydmVyKFNvY2tldFNlcnZlci5Vbml4U3RyZWFtU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvY2tldFNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbV9leGFtaW5lKQorCisgICAgICAgIGRlZiB0ZXN0X1RocmVhZGluZ1VuaXhTdHJlYW1TZXJ2ZXIoc2VsZik6CisgICAgICAgICAgICBzZWxmLnJ1bl9zZXJ2ZXIoU29ja2V0U2VydmVyLlRocmVhZGluZ1VuaXhTdHJlYW1TZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ja2V0U2VydmVyLlN0cmVhbVJlcXVlc3RIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtX2V4YW1pbmUpCisKKyAgICAgICAgaWYgSEFWRV9GT1JLSU5HOgorICAgICAgICAgICAgZGVmIHRlc3RfRm9ya2luZ1VuaXhTdHJlYW1TZXJ2ZXIoc2VsZik6CisgICAgICAgICAgICAgICAgd2l0aCBzaW1wbGVfc3VicHJvY2VzcyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5ydW5fc2VydmVyKEZvcmtpbmdVbml4U3RyZWFtU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ja2V0U2VydmVyLlN0cmVhbVJlcXVlc3RIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW1fZXhhbWluZSkKKworICAgIGRlZiB0ZXN0X1VEUFNlcnZlcihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fc2VydmVyKFNvY2tldFNlcnZlci5VRFBTZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBTb2NrZXRTZXJ2ZXIuRGF0YWdyYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGdyYW1fZXhhbWluZSkKKworICAgIGRlZiB0ZXN0X1RocmVhZGluZ1VEUFNlcnZlcihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fc2VydmVyKFNvY2tldFNlcnZlci5UaHJlYWRpbmdVRFBTZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBTb2NrZXRTZXJ2ZXIuRGF0YWdyYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGdyYW1fZXhhbWluZSkKKworICAgIGlmIEhBVkVfRk9SS0lORzoKKyAgICAgICAgZGVmIHRlc3RfRm9ya2luZ1VEUFNlcnZlcihzZWxmKToKKyAgICAgICAgICAgIHdpdGggc2ltcGxlX3N1YnByb2Nlc3Moc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5ydW5fc2VydmVyKFNvY2tldFNlcnZlci5Gb3JraW5nVURQU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2NrZXRTZXJ2ZXIuRGF0YWdyYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZ3JhbV9leGFtaW5lKQorCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgbW9ja2VkX3NlbGVjdF9tb2R1bGUoc2VsZik6CisgICAgICAgICIiIk1vY2tzIHRoZSBzZWxlY3Quc2VsZWN0KCkgY2FsbCB0byByYWlzZSBFSU5UUiBmb3IgZmlyc3QgY2FsbCIiIgorICAgICAgICBvbGRfc2VsZWN0ID0gc2VsZWN0LnNlbGVjdAorCisgICAgICAgIGNsYXNzIE1vY2tTZWxlY3Q6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSAwCisKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgc2VsZi5jYWxsZWQgKz0gMQorICAgICAgICAgICAgICAgIGlmIHNlbGYuY2FsbGVkID09IDE6CisgICAgICAgICAgICAgICAgICAgICMgcmFpc2UgdGhlIGV4Y2VwdGlvbiBvbiBmaXJzdCBjYWxsCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNlbGVjdC5lcnJvcihlcnJuby5FSU5UUiwgb3Muc3RyZXJyb3IoZXJybm8uRUlOVFIpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgUmV0dXJuIHJlYWwgc2VsZWN0IHZhbHVlIGZvciBjb25zZWN1dGl2ZSBjYWxscworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2xkX3NlbGVjdCgqYXJncykKKworICAgICAgICBzZWxlY3Quc2VsZWN0ID0gTW9ja1NlbGVjdCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIHNlbGVjdC5zZWxlY3QKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QgPSBvbGRfc2VsZWN0CisKKyAgICBkZWYgdGVzdF9JbnRlcnJ1cHRTZXJ2ZXJTZWxlY3RDYWxsKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYubW9ja2VkX3NlbGVjdF9tb2R1bGUoKSBhcyBtb2NrX3NlbGVjdDoKKyAgICAgICAgICAgIHBpZCA9IHNlbGYucnVuX3NlcnZlcihTb2NrZXRTZXJ2ZXIuVENQU2VydmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvY2tldFNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbV9leGFtaW5lKQorICAgICAgICAgICAgIyBNYWtlIHN1cmUgc2VsZWN0IHdhcyBjYWxsZWQgYWdhaW46CisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobW9ja19zZWxlY3QuY2FsbGVkLCAxKQorCisgICAgIyBBbGFzLCBvbiBMaW51eCAoYXQgbGVhc3QpIHJlY3Zmcm9tKCkgZG9lc24ndCByZXR1cm4gYSBtZWFuaW5nZnVsCisgICAgIyBjbGllbnQgYWRkcmVzcyBzbyB0aGlzIGNhbm5vdCB3b3JrOgorCisgICAgIyBpZiBIQVZFX1VOSVhfU09DS0VUUzoKKyAgICAjICAgICBkZWYgdGVzdF9Vbml4RGF0YWdyYW1TZXJ2ZXIoc2VsZik6CisgICAgIyAgICAgICAgIHNlbGYucnVuX3NlcnZlcihTb2NrZXRTZXJ2ZXIuVW5peERhdGFncmFtU2VydmVyLAorICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgU29ja2V0U2VydmVyLkRhdGFncmFtUmVxdWVzdEhhbmRsZXIsCisgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRncmFtX2V4YW1pbmUpCisgICAgIworICAgICMgICAgIGRlZiB0ZXN0X1RocmVhZGluZ1VuaXhEYXRhZ3JhbVNlcnZlcihzZWxmKToKKyAgICAjICAgICAgICAgc2VsZi5ydW5fc2VydmVyKFNvY2tldFNlcnZlci5UaHJlYWRpbmdVbml4RGF0YWdyYW1TZXJ2ZXIsCisgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICBTb2NrZXRTZXJ2ZXIuRGF0YWdyYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAjICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGdyYW1fZXhhbWluZSkKKyAgICAjCisgICAgIyAgICAgaWYgSEFWRV9GT1JLSU5HOgorICAgICMgICAgICAgICBkZWYgdGVzdF9Gb3JraW5nVW5peERhdGFncmFtU2VydmVyKHNlbGYpOgorICAgICMgICAgICAgICAgICAgc2VsZi5ydW5fc2VydmVyKFNvY2tldFNlcnZlci5Gb3JraW5nVW5peERhdGFncmFtU2VydmVyLAorICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvY2tldFNlcnZlci5EYXRhZ3JhbVJlcXVlc3RIYW5kbGVyLAorICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGdyYW1fZXhhbWluZSkKKworICAgIEByZWFwX3RocmVhZHMKKyAgICBkZWYgdGVzdF9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjMwMjogc2h1dGRvd24oKSBzaG91bGQgYWx3YXlzIHN1Y2NlZWQgaW4gbWFraW5nIGFuCisgICAgICAgICMgb3RoZXIgdGhyZWFkIGxlYXZlIHNlcnZlX2ZvcmV2ZXIoKS4KKyAgICAgICAgY2xhc3MgTXlTZXJ2ZXIoU29ja2V0U2VydmVyLlRDUFNlcnZlcik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgTXlIYW5kbGVyKFNvY2tldFNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlcik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdGhyZWFkcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIwKToKKyAgICAgICAgICAgIHMgPSBNeVNlcnZlcigoSE9TVCwgMCksIE15SGFuZGxlcikKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKAorICAgICAgICAgICAgICAgIG5hbWU9J015U2VydmVyIHNlcnZpbmcnLAorICAgICAgICAgICAgICAgIHRhcmdldD1zLnNlcnZlX2ZvcmV2ZXIsCisgICAgICAgICAgICAgICAga3dhcmdzPXsncG9sbF9pbnRlcnZhbCc6MC4wMX0pCisgICAgICAgICAgICB0LmRhZW1vbiA9IFRydWUgICMgSW4gY2FzZSB0aGlzIGZ1bmN0aW9uIHJhaXNlcy4KKyAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKCh0LCBzKSkKKyAgICAgICAgZm9yIHQsIHMgaW4gdGhyZWFkczoKKyAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgcy5zaHV0ZG93bigpCisgICAgICAgIGZvciB0LCBzIGluIHRocmVhZHM6CisgICAgICAgICAgICB0LmpvaW4oKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBpZiBpbXAubG9ja19oZWxkKCk6CisgICAgICAgICMgSWYgdGhlIGltcG9ydCBsb2NrIGlzIGhlbGQsIHRoZSB0aHJlYWRzIHdpbGwgaGFuZworICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiY2FuJ3QgcnVuIHdoZW4gaW1wb3J0IGxvY2sgaXMgaGVsZCIpCisKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU29ja2V0U2VydmVyVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc29mdHNwYWNlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc29mdHNwYWNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOWEwMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zb2Z0c3BhY2UucHkKQEAgLTAsMCArMSwyMyBAQAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBTdHJpbmdJTworCitjbGFzcyBTb2Z0c3BhY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYnVnXzQ4MDIxNShzZWxmKToKKyAgICAgICAgIyBTRiBidWcgNDgwMjE1OiAgc29mdHNwYWNlIGNvbmZ1c2VkIGluIG5lc3RlZCBwcmludAorICAgICAgICBmID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gZiwgJ2EnCisgICAgICAgICAgICAgICAgcmV0dXJuICdiJworCisgICAgICAgIHByaW50ID4+IGYsIEMoKSwgJ2MgJywgJ2RcdCcsICdlJworICAgICAgICBwcmludCA+PiBmLCAnZicsICdnJworICAgICAgICAjIEluIDIuMiAmIGVhcmxpZXIsIHRoaXMgcHJpbnRlZCAnIGFcbmJjICBkXHRlXG5mIGdcbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHZhbHVlKCksICdhXG5iIGMgIGRcdGVcbmYgZ1xuJykKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChTb2Z0c3BhY2VUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc29ydC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc1YWJjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NvcnQucHkKQEAgLTAsMCArMSwyOTIgQEAKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKwordmVyYm9zZSA9IHRlc3Rfc3VwcG9ydC52ZXJib3NlCituZXJyb3JzID0gMAorCitkZWYgY2hlY2sodGFnLCBleHBlY3RlZCwgcmF3LCBjb21wYXJlPU5vbmUpOgorICAgIGdsb2JhbCBuZXJyb3JzCisKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAiICAgIGNoZWNraW5nIiwgdGFnCisKKyAgICBvcmlnID0gcmF3WzpdICAgIyBzYXZlIGlucHV0IGluIGNhc2Ugb2YgZXJyb3IKKyAgICBpZiBjb21wYXJlOgorICAgICAgICByYXcuc29ydChjb21wYXJlKQorICAgIGVsc2U6CisgICAgICAgIHJhdy5zb3J0KCkKKworICAgIGlmIGxlbihleHBlY3RlZCkgIT0gbGVuKHJhdyk6CisgICAgICAgIHByaW50ICJlcnJvciBpbiIsIHRhZworICAgICAgICBwcmludCAibGVuZ3RoIG1pc21hdGNoOyIsIGxlbihleHBlY3RlZCksIGxlbihyYXcpCisgICAgICAgIHByaW50IGV4cGVjdGVkCisgICAgICAgIHByaW50IG9yaWcKKyAgICAgICAgcHJpbnQgcmF3CisgICAgICAgIG5lcnJvcnMgKz0gMQorICAgICAgICByZXR1cm4KKworICAgIGZvciBpLCBnb29kIGluIGVudW1lcmF0ZShleHBlY3RlZCk6CisgICAgICAgIG1heWJlID0gcmF3W2ldCisgICAgICAgIGlmIGdvb2QgaXMgbm90IG1heWJlOgorICAgICAgICAgICAgcHJpbnQgImVycm9yIGluIiwgdGFnCisgICAgICAgICAgICBwcmludCAib3V0IG9mIG9yZGVyIGF0IGluZGV4IiwgaSwgZ29vZCwgbWF5YmUKKyAgICAgICAgICAgIHByaW50IGV4cGVjdGVkCisgICAgICAgICAgICBwcmludCBvcmlnCisgICAgICAgICAgICBwcmludCByYXcKKyAgICAgICAgICAgIG5lcnJvcnMgKz0gMQorICAgICAgICAgICAgcmV0dXJuCisKK2NsYXNzIFRlc3RCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdFN0cmVzc2Z1bGx5KHNlbGYpOgorICAgICAgICAjIFRyeSBhIHZhcmlldHkgb2Ygc2l6ZXMgYXQgYW5kIGFyb3VuZCBwb3dlcnMgb2YgMiwgYW5kIGF0IHBvd2VycyBvZiAxMC4KKyAgICAgICAgc2l6ZXMgPSBbMF0KKyAgICAgICAgZm9yIHBvd2VyIGluIHJhbmdlKDEsIDEwKToKKyAgICAgICAgICAgIG4gPSAyICoqIHBvd2VyCisgICAgICAgICAgICBzaXplcy5leHRlbmQocmFuZ2Uobi0xLCBuKzIpKQorICAgICAgICBzaXplcy5leHRlbmQoWzEwLCAxMDAsIDEwMDBdKQorCisgICAgICAgIGNsYXNzIENvbXBsYWlucyhvYmplY3QpOgorICAgICAgICAgICAgbWF5YmVfY29tcGxhaW4gPSBUcnVlCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICBzZWxmLmkgPSBpCisKKyAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIENvbXBsYWlucy5tYXliZV9jb21wbGFpbiBhbmQgcmFuZG9tLnJhbmRvbSgpIDwgMC4wMDE6CisgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiICAgICAgICBjb21wbGFpbmluZyBhdCIsIHNlbGYsIG90aGVyCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmkgPCBvdGhlci5pCisKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkNvbXBsYWlucyglZCkiICUgc2VsZi5pCisKKyAgICAgICAgY2xhc3MgU3RhYmxlKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwga2V5LCBpKToKKyAgICAgICAgICAgICAgICBzZWxmLmtleSA9IGtleQorICAgICAgICAgICAgICAgIHNlbGYuaW5kZXggPSBpCisKKyAgICAgICAgICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHNlbGYua2V5LCBvdGhlci5rZXkpCisgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUgIyBTaWxlbmNlIFB5M2sgd2FybmluZworCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJTdGFibGUoJWQsICVkKSIgJSAoc2VsZi5rZXksIHNlbGYuaW5kZXgpCisKKyAgICAgICAgZm9yIG4gaW4gc2l6ZXM6CisgICAgICAgICAgICB4ID0gcmFuZ2UobikKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIlRlc3Rpbmcgc2l6ZSIsIG4KKworICAgICAgICAgICAgcyA9IHhbOl0KKyAgICAgICAgICAgIGNoZWNrKCJpZGVudGl0eSIsIHgsIHMpCisKKyAgICAgICAgICAgIHMgPSB4WzpdCisgICAgICAgICAgICBzLnJldmVyc2UoKQorICAgICAgICAgICAgY2hlY2soInJldmVyc2VkIiwgeCwgcykKKworICAgICAgICAgICAgcyA9IHhbOl0KKyAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKHMpCisgICAgICAgICAgICBjaGVjaygicmFuZG9tIHBlcm11dGF0aW9uIiwgeCwgcykKKworICAgICAgICAgICAgeSA9IHhbOl0KKyAgICAgICAgICAgIHkucmV2ZXJzZSgpCisgICAgICAgICAgICBzID0geFs6XQorICAgICAgICAgICAgY2hlY2soInJldmVyc2VkIHZpYSBmdW5jdGlvbiIsIHksIHMsIGxhbWJkYSBhLCBiOiBjbXAoYiwgYSkpCisKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIiAgICBDaGVja2luZyBhZ2FpbnN0IGFuIGluc2FuZSBjb21wYXJpc29uIGZ1bmN0aW9uLiIKKyAgICAgICAgICAgICAgICBwcmludCAiICAgICAgICBJZiB0aGUgaW1wbGVtZW50YXRpb24gaXNuJ3QgY2FyZWZ1bCwgdGhpcyBtYXkgc2VnZmF1bHQuIgorICAgICAgICAgICAgcyA9IHhbOl0KKyAgICAgICAgICAgIHMuc29ydChsYW1iZGEgYSwgYjogIGludChyYW5kb20ucmFuZG9tKCkgKiAzKSAtIDEpCisgICAgICAgICAgICBjaGVjaygiYW4gaW5zYW5lIGZ1bmN0aW9uIGxlZnQgc29tZSBwZXJtdXRhdGlvbiIsIHgsIHMpCisKKyAgICAgICAgICAgIHggPSBbQ29tcGxhaW5zKGkpIGZvciBpIGluIHhdCisgICAgICAgICAgICBzID0geFs6XQorICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUocykKKyAgICAgICAgICAgIENvbXBsYWlucy5tYXliZV9jb21wbGFpbiA9IFRydWUKKyAgICAgICAgICAgIGl0X2NvbXBsYWluZWQgPSBGYWxzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMuc29ydCgpCisgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgICAgIGl0X2NvbXBsYWluZWQgPSBUcnVlCisgICAgICAgICAgICBpZiBpdF9jb21wbGFpbmVkOgorICAgICAgICAgICAgICAgIENvbXBsYWlucy5tYXliZV9jb21wbGFpbiA9IEZhbHNlCisgICAgICAgICAgICAgICAgY2hlY2soImV4Y2VwdGlvbiBkdXJpbmcgc29ydCBsZWZ0IHNvbWUgcGVybXV0YXRpb24iLCB4LCBzKQorCisgICAgICAgICAgICBzID0gW1N0YWJsZShyYW5kb20ucmFuZHJhbmdlKDEwKSwgaSkgZm9yIGkgaW4geHJhbmdlKG4pXQorICAgICAgICAgICAgYXVnbWVudGVkID0gWyhlLCBlLmluZGV4KSBmb3IgZSBpbiBzXQorICAgICAgICAgICAgYXVnbWVudGVkLnNvcnQoKSAgICAjIGZvcmNlZCBzdGFibGUgYmVjYXVzZSB0aWVzIGJyb2tlbiBieSBpbmRleAorICAgICAgICAgICAgeCA9IFtlIGZvciBlLCBpIGluIGF1Z21lbnRlZF0gIyBhIHN0YWJsZSBzb3J0IG9mIHMKKyAgICAgICAgICAgIGNoZWNrKCJzdGFiaWxpdHkiLCB4LCBzKQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RCdWdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2J1ZzQ1MzUyMyhzZWxmKToKKyAgICAgICAgIyBidWcgNDUzNTIzIC0tIGxpc3Quc29ydCgpIGNyYXNoZXIuCisgICAgICAgICMgSWYgdGhpcyBmYWlscywgdGhlIG1vc3QgbGlrZWx5IG91dGNvbWUgaXMgYSBjb3JlIGR1bXAuCisgICAgICAgICMgTXV0YXRpb25zIGR1cmluZyBhIGxpc3Qgc29ydCBzaG91bGQgcmFpc2UgYSBWYWx1ZUVycm9yLgorCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBMIGFuZCByYW5kb20ucmFuZG9tKCkgPCAwLjc1OgorICAgICAgICAgICAgICAgICAgICBMLnBvcCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgTC5hcHBlbmQoMykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmFuZG9tLnJhbmRvbSgpIDwgMC41CisKKyAgICAgICAgTCA9IFtDKCkgZm9yIGkgaW4gcmFuZ2UoNTApXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBMLnNvcnQpCisKKyAgICBkZWYgdGVzdF9jbXBOb25lKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgTm9uZSBhcyBhIGNvbXBhcmlzb24gZnVuY3Rpb24uCisKKyAgICAgICAgTCA9IHJhbmdlKDUwKQorICAgICAgICByYW5kb20uc2h1ZmZsZShMKQorICAgICAgICBMLnNvcnQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMLCByYW5nZSg1MCkpCisKKyAgICBkZWYgdGVzdF91bmRldGVjdGVkX211dGF0aW9uKHNlbGYpOgorICAgICAgICAjIFB5dGhvbiAyLjRhMSBkaWQgbm90IGFsd2F5cyBkZXRlY3QgbXV0YXRpb24KKyAgICAgICAgbWVtb3J5d2FzdGVyID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMjApOgorICAgICAgICAgICAgZGVmIG11dGF0aW5nX2NtcCh4LCB5KToKKyAgICAgICAgICAgICAgICBMLmFwcGVuZCgzKQorICAgICAgICAgICAgICAgIEwucG9wKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gY21wKHgsIHkpCisgICAgICAgICAgICBMID0gWzEsMl0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEwuc29ydCwgbXV0YXRpbmdfY21wKQorICAgICAgICAgICAgZGVmIG11dGF0aW5nX2NtcCh4LCB5KToKKyAgICAgICAgICAgICAgICBMLmFwcGVuZCgzKQorICAgICAgICAgICAgICAgIGRlbCBMWzpdCisgICAgICAgICAgICAgICAgcmV0dXJuIGNtcCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgTC5zb3J0LCBtdXRhdGluZ19jbXApCisgICAgICAgICAgICBtZW1vcnl3YXN0ZXIgPSBbbWVtb3J5d2FzdGVyXQorCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3REZWNvcmF0ZVNvcnRVbmRlY29yYXRlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2RlY29yYXRlZChzZWxmKToKKyAgICAgICAgZGF0YSA9ICdUaGUgcXVpY2sgQnJvd24gZm94IEp1bXBlZCBvdmVyIFRoZSBsYXp5IERvZycuc3BsaXQoKQorICAgICAgICBjb3B5ID0gZGF0YVs6XQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBkYXRhLnNvcnQoa2V5PXN0ci5sb3dlcikKKyAgICAgICAgY29weS5zb3J0KGNtcD1sYW1iZGEgeCx5OiBjbXAoeC5sb3dlcigpLCB5Lmxvd2VyKCkpKQorCisgICAgZGVmIHRlc3RfYmFkZGVjb3JhdG9yKHNlbGYpOgorICAgICAgICBkYXRhID0gJ1RoZSBxdWljayBCcm93biBmb3ggSnVtcGVkIG92ZXIgVGhlIGxhenkgRG9nJy5zcGxpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGF0YS5zb3J0LCBOb25lLCBsYW1iZGEgeCx5OiAwKQorCisgICAgZGVmIHRlc3Rfc3RhYmlsaXR5KHNlbGYpOgorICAgICAgICBkYXRhID0gWyhyYW5kb20ucmFuZHJhbmdlKDEwMCksIGkpIGZvciBpIGluIHhyYW5nZSgyMDApXQorICAgICAgICBjb3B5ID0gZGF0YVs6XQorICAgICAgICBkYXRhLnNvcnQoa2V5PWxhbWJkYSB4OiB4WzBdKSAgICMgc29ydCBvbiB0aGUgcmFuZG9tIGZpcnN0IGZpZWxkCisgICAgICAgIGNvcHkuc29ydCgpICAgICAgICAgICAgICAgICAgICAgIyBzb3J0IHVzaW5nIGJvdGggZmllbGRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgY29weSkgICAgIyBzaG91bGQgZ2V0IHRoZSBzYW1lIHJlc3VsdAorCisgICAgZGVmIHRlc3RfY21wX2FuZF9rZXlfY29tYmluYXRpb24oc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgdGhlIHdyYXBwZXIgaGFzIGJlZW4gcmVtb3ZlZAorICAgICAgICBkZWYgY29tcGFyZSh4LCB5KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh4KSwgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHgpLCBzdHIpCisgICAgICAgICAgICByZXR1cm4gY21wKHgsIHkpCisgICAgICAgIGRhdGEgPSAnVGhlIHF1aWNrIEJyb3duIGZveCBKdW1wZWQgb3ZlciBUaGUgbGF6eSBEb2cnLnNwbGl0KCkKKyAgICAgICAgZGF0YS5zb3J0KGNtcD1jb21wYXJlLCBrZXk9c3RyLmxvd2VyKQorCisgICAgZGVmIHRlc3RfYmFkY21wX3dpdGhfa2V5KHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSB3cmFwcGVyIGhhcyBiZWVuIHJlbW92ZWQKKyAgICAgICAgZGF0YSA9ICdUaGUgcXVpY2sgQnJvd24gZm94IEp1bXBlZCBvdmVyIFRoZSBsYXp5IERvZycuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRhdGEuc29ydCwgImJhZCIsIHN0ci5sb3dlcikKKworICAgIGRlZiB0ZXN0X2tleV93aXRoX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgd3JhcHBlciBoYXMgYmVlbiByZW1vdmVkCisgICAgICAgIGRhdGEgPSByYW5nZSgtMiwyKQorICAgICAgICBkdXAgPSBkYXRhWzpdCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBkYXRhLnNvcnQsIE5vbmUsIGxhbWJkYSB4OiAxIC8vIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZHVwKQorCisgICAgZGVmIHRlc3Rfa2V5X3dpdGhfbXV0YXRpb24oc2VsZik6CisgICAgICAgIGRhdGEgPSByYW5nZSgxMCkKKyAgICAgICAgZGVmIGsoeCk6CisgICAgICAgICAgICBkZWwgZGF0YVs6XQorICAgICAgICAgICAgZGF0YVs6XSA9IHJhbmdlKDIwKQorICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGF0YS5zb3J0LCBrZXk9aykKKworICAgIGRlZiB0ZXN0X2tleV93aXRoX211dGF0aW5nX2RlbChzZWxmKToKKyAgICAgICAgZGF0YSA9IHJhbmdlKDEwKQorICAgICAgICBjbGFzcyBTb3J0S2lsbGVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgZGVsIGRhdGFbOl0KKyAgICAgICAgICAgICAgICBkYXRhWzpdID0gcmFuZ2UoMjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRhdGEuc29ydCwga2V5PVNvcnRLaWxsZXIpCisKKyAgICBkZWYgdGVzdF9rZXlfd2l0aF9tdXRhdGluZ19kZWxfYW5kX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZGF0YSA9IHJhbmdlKDEwKQorICAgICAgICAjIyBkdXAgPSBkYXRhWzpdCisgICAgICAgIGNsYXNzIFNvcnRLaWxsZXIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBpZiB4ID4gMjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBkZWwgZGF0YVs6XQorICAgICAgICAgICAgICAgIGRhdGFbOl0gPSByYW5nZSgyMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBkYXRhLnNvcnQsIGtleT1Tb3J0S2lsbGVyKQorICAgICAgICAjIyBtYWpvciBob25raW5nIHN1YnRsZXR5OiB3ZSAqY2FuJ3QqIGRvOgorICAgICAgICAjIworICAgICAgICAjIyBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGR1cCkKKyAgICAgICAgIyMKKyAgICAgICAgIyMgYmVjYXVzZSB0aGVyZSBpcyBhIHJlZmVyZW5jZSB0byBhIFNvcnRLaWxsZXIgaW4gdGhlCisgICAgICAgICMjIHRyYWNlYmFjayBhbmQgYnkgdGhlIHRpbWUgaXQgZGllcyB3ZSdyZSBvdXRzaWRlIHRoZSBjYWxsIHRvCisgICAgICAgICMjIC5zb3J0KCkgYW5kIHNvIHRoZSBsaXN0IHByb3RlY3Rpb24gZ2ltbWlja3MgYXJlIG91dCBvZgorICAgICAgICAjIyBkYXRlICh0aGlzIGNvc3Qgc29tZSBicmFpbiBjZWxscyB0byBmaWd1cmUgb3V0Li4uKS4KKworICAgIGRlZiB0ZXN0X3JldmVyc2Uoc2VsZik6CisgICAgICAgIGRhdGEgPSByYW5nZSgxMDApCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIGRhdGEuc29ydChyZXZlcnNlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgcmFuZ2UoOTksLTEsLTEpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRhdGEuc29ydCwgIndyb25nIHR5cGUiKQorCisgICAgZGVmIHRlc3RfcmV2ZXJzZV9zdGFiaWxpdHkoc2VsZik6CisgICAgICAgIGRhdGEgPSBbKHJhbmRvbS5yYW5kcmFuZ2UoMTAwKSwgaSkgZm9yIGkgaW4geHJhbmdlKDIwMCldCisgICAgICAgIGNvcHkxID0gZGF0YVs6XQorICAgICAgICBjb3B5MiA9IGRhdGFbOl0KKyAgICAgICAgZGF0YS5zb3J0KGNtcD1sYW1iZGEgeCx5OiBjbXAoeFswXSx5WzBdKSwgcmV2ZXJzZT1UcnVlKQorICAgICAgICBjb3B5MS5zb3J0KGNtcD1sYW1iZGEgeCx5OiBjbXAoeVswXSx4WzBdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBjb3B5MSkKKyAgICAgICAgY29weTIuc29ydChrZXk9bGFtYmRhIHg6IHhbMF0sIHJldmVyc2U9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBjb3B5MikKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdGVzdF9jbGFzc2VzID0gKAorICAgICAgICBUZXN0QmFzZSwKKyAgICAgICAgVGVzdERlY29yYXRlU29ydFVuZGVjb3JhdGUsCisgICAgICAgIFRlc3RCdWdzLAorICAgICkKKworICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgICAgICAgICAoInRoZSBjbXAgYXJndW1lbnQgaXMgbm90IHN1cHBvcnRlZCIsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisKKyAgICAgICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCisgICAgICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgICAgICAgICAgaW1wb3J0IGdjCisgICAgICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1CisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKGNvdW50cykpOgorICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKyAgICAgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgICAgICBwcmludCBjb3VudHMKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3FsaXRlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3FsaXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMjczMzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zcWxpdGUucHkKQEAgLTAsMCArMSwxNiBAQAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCisKKyMgU2tpcCB0ZXN0IGlmIF9zcWxpdGUzIG1vZHVsZSB3YXMgbm90IGJ1aWx0LgoraW1wb3J0X21vZHVsZSgnX3NxbGl0ZTMnKQorCitmcm9tIHNxbGl0ZTMudGVzdCBpbXBvcnQgKGRiYXBpLCB0eXBlcywgdXNlcmZ1bmN0aW9ucywgcHkyNXRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LCB0cmFuc2FjdGlvbnMsIGhvb2tzLCByZWdyZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KGRiYXBpLnN1aXRlKCksIHR5cGVzLnN1aXRlKCksIHVzZXJmdW5jdGlvbnMuc3VpdGUoKSwKKyAgICAgICAgICAgICAgICAgcHkyNXRlc3RzLnN1aXRlKCksIGZhY3Rvcnkuc3VpdGUoKSwgdHJhbnNhY3Rpb25zLnN1aXRlKCksCisgICAgICAgICAgICAgICAgIGhvb2tzLnN1aXRlKCksIHJlZ3Jlc3Npb24uc3VpdGUoKSwgZHVtcC5zdWl0ZSgpKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zc2wucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zc2wucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1MjE5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3NzbC5weQpAQCAtMCwwICsxLDEzOTQgQEAKKyMgVGVzdCB0aGUgc3VwcG9ydCBmb3IgU1NMIGFuZCBzb2NrZXRzCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBhc3luY29yZQoraW1wb3J0IHNvY2tldAoraW1wb3J0IHNlbGVjdAoraW1wb3J0IHRpbWUKK2ltcG9ydCBnYworaW1wb3J0IG9zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCB1cmxsaWIsIHVybHBhcnNlCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgd2Vha3JlZgoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IHBsYXRmb3JtCisKK2Zyb20gQmFzZUhUVFBTZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2ZXIKK2Zyb20gU2ltcGxlSFRUUFNlcnZlciBpbXBvcnQgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyCisKK3NzbCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCJzc2wiKQorCitIT1NUID0gdGVzdF9zdXBwb3J0LkhPU1QKK0NFUlRGSUxFID0gTm9uZQorU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUID0gTm9uZQorCitkZWYgaGFuZGxlX2Vycm9yKHByZWZpeCk6CisgICAgZXhjX2Zvcm1hdCA9ICcgJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKCpzeXMuZXhjX2luZm8oKSkpCisgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocHJlZml4ICsgZXhjX2Zvcm1hdCkKKworCitjbGFzcyBCYXNpY1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3NzbHdyYXBfc2ltcGxlKHNlbGYpOgorICAgICAgICAjIEEgY3J1ZGUgdGVzdCBmb3IgdGhlIGxlZ2FjeSBBUEkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3NsLnNzbHdyYXBfc2ltcGxlKHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpKQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gMzI6ICMgYnJva2VuIHBpcGUgd2hlbiBzc2xfc29jay5kb19oYW5kc2hha2UoKSwgdGhpcyB0ZXN0IGRvZXNuJ3QgY2FyZSBhYm91dCB0aGF0CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzc2wuc3Nsd3JhcF9zaW1wbGUoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkuX3NvY2spCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyA9PSAzMjogIyBicm9rZW4gcGlwZSB3aGVuIHNzbF9zb2NrLmRvX2hhbmRzaGFrZSgpLCB0aGlzIHRlc3QgZG9lc24ndCBjYXJlIGFib3V0IHRoYXQKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyMgSXNzdWUgIzk0MTU6IFVidW50dSBoaWphY2tzIHRoZWlyIE9wZW5TU0wgYW5kIGZvcmNlZnVsbHkgZGlzYWJsZXMgU1NMdjIKK2RlZiBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsKGZ1bmMpOgorICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKKyAgICAgICAgIyBXZSBuZWVkIHRvIGFjY2VzcyB0aGUgbG93ZXItbGV2ZWwgd3JhcHBlciBpbiBvcmRlciB0byBjcmVhdGUgYW4KKyAgICAgICAgIyBpbXBsaWNpdCBTU0wgY29udGV4dCB3aXRob3V0IHRyeWluZyB0byBjb25uZWN0IG9yIGxpc3Rlbi4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IF9zc2wKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgIyBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gd29uJ3QgZ2V0IGV4ZWN1dGVkLCBqdXN0IGlnbm9yZSB0aGUgZXJyb3IKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgICAgICBkZWYgZigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKQorICAgICAgICAgICAgICAgIF9zc2wuc3Nsd3JhcChzLl9zb2NrLCAwLCBOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuQ0VSVF9OT05FLCBzc2wuUFJPVE9DT0xfU1NMdjIsIE5vbmUsIE5vbmUpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgKHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTyA9PSAoMCwgOSwgOCwgMTUsIDE1KSBhbmQKKyAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uKCkgPT0gKCdkZWJpYW4nLCAnc3F1ZWV6ZS9zaWQnLCAnJykKKyAgICAgICAgICAgICAgICAgICAgYW5kICdJbnZhbGlkIFNTTCBwcm90b2NvbCB2YXJpYW50IHNwZWNpZmllZCcgaW4gc3RyKGUpKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlBhdGNoZWQgVWJ1bnR1IE9wZW5TU0wgYnJlYWtzIGJlaGF2aW91ciIpCisgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHJldHVybiBmCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGZ1bmMKKworCitjbGFzcyBCYXNpY1NvY2tldFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NvbnN0YW50cyhzZWxmKToKKyAgICAgICAgI3NzbC5QUk9UT0NPTF9TU0x2MgorICAgICAgICBzc2wuUFJPVE9DT0xfU1NMdjIzCisgICAgICAgIHNzbC5QUk9UT0NPTF9TU0x2MworICAgICAgICBzc2wuUFJPVE9DT0xfVExTdjEKKyAgICAgICAgc3NsLkNFUlRfTk9ORQorICAgICAgICBzc2wuQ0VSVF9PUFRJT05BTAorICAgICAgICBzc2wuQ0VSVF9SRVFVSVJFRAorCisgICAgZGVmIHRlc3RfcmFuZG9tKHNlbGYpOgorICAgICAgICB2ID0gc3NsLlJBTkRfc3RhdHVzKCkKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiBSQU5EX3N0YXR1cyBpcyAlZCAoJXMpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHYsICh2IGFuZCAic3VmZmljaWVudCByYW5kb21uZXNzIikgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3VmZmljaWVudCByYW5kb21uZXNzIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3NsLlJBTkRfZWdkLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNzbC5SQU5EX2VnZCwgJ2ZvbycsIDEpCisgICAgICAgIHNzbC5SQU5EX2FkZCgidGhpcyBpcyBhIHJhbmRvbSBzdHJpbmciLCA3NS4wKQorCisgICAgZGVmIHRlc3RfcGFyc2VfY2VydChzZWxmKToKKyAgICAgICAgIyBub3RlIHRoYXQgdGhpcyB1c2VzIGFuICd1bm9mZmljaWFsJyBmdW5jdGlvbiBpbiBfc3NsLmMsCisgICAgICAgICMgcHJvdmlkZWQgc29sZWx5IGZvciB0aGlzIHRlc3QsIHRvIGV4ZXJjaXNlIHRoZSBjZXJ0aWZpY2F0ZQorICAgICAgICAjIHBhcnNpbmcgY29kZQorICAgICAgICBwID0gc3NsLl9zc2wuX3Rlc3RfZGVjb2RlX2NlcnQoQ0VSVEZJTEUsIEZhbHNlKQorICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIiArIHBwcmludC5wZm9ybWF0KHApICsgIlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydzdWJqZWN0J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2NvdW50cnlOYW1lJywgJ1hZJyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnbG9jYWxpdHlOYW1lJywgJ0Nhc3RsZSBBbnRocmF4JyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnb3JnYW5pemF0aW9uTmFtZScsICdQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbicpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2NvbW1vbk5hbWUnLCAnbG9jYWxob3N0JyksKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydzdWJqZWN0QWx0TmFtZSddLCAoKCdETlMnLCAnbG9jYWxob3N0JyksKSkKKyAgICAgICAgIyBJc3N1ZSAjMTMwMzQ6IHRoZSBzdWJqZWN0QWx0TmFtZSBpbiBzb21lIGNlcnRpZmljYXRlcworICAgICAgICAjIChub3RhYmx5IHByb2plY3RzLmRldmVsb3Blci5ub2tpYS5jb206NDQzKSB3YXNuJ3QgcGFyc2VkCisgICAgICAgIHAgPSBzc2wuX3NzbC5fdGVzdF9kZWNvZGVfY2VydChOT0tJQUNFUlQpCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iICsgcHByaW50LnBmb3JtYXQocCkgKyAiXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ3N1YmplY3RBbHROYW1lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgnRE5TJywgJ3Byb2plY3RzLmRldmVsb3Blci5ub2tpYS5jb20nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAncHJvamVjdHMuZm9ydW0ubm9raWEuY29tJykpCisgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9ERVJfdG9fUEVNKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJULCAncicpIGFzIGY6CisgICAgICAgICAgICBwZW0gPSBmLnJlYWQoKQorICAgICAgICBkMSA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChwZW0pCisgICAgICAgIHAyID0gc3NsLkRFUl9jZXJ0X3RvX1BFTV9jZXJ0KGQxKQorICAgICAgICBkMiA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChwMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSwgZDIpCisgICAgICAgIGlmIG5vdCBwMi5zdGFydHN3aXRoKHNzbC5QRU1fSEVBREVSICsgJ1xuJyk6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkRFUi10by1QRU0gZGlkbid0IGluY2x1ZGUgY29ycmVjdCBoZWFkZXI6XG4lclxuIiAlIHAyKQorICAgICAgICBpZiBub3QgcDIuZW5kc3dpdGgoJ1xuJyArIHNzbC5QRU1fRk9PVEVSICsgJ1xuJyk6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkRFUi10by1QRU0gZGlkbid0IGluY2x1ZGUgY29ycmVjdCBmb290ZXI6XG4lclxuIiAlIHAyKQorCisgICAgZGVmIHRlc3Rfb3BlbnNzbF92ZXJzaW9uKHNlbGYpOgorICAgICAgICBuID0gc3NsLk9QRU5TU0xfVkVSU0lPTl9OVU1CRVIKKyAgICAgICAgdCA9IHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTworICAgICAgICBzID0gc3NsLk9QRU5TU0xfVkVSU0lPTgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobiwgKGludCwgbG9uZykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0LCB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHMsIHN0cikKKyAgICAgICAgIyBTb21lIHNhbml0eSBjaGVja3MgZm9sbG93CisgICAgICAgICMgPj0gMC45CisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG4sIDB4OTAwMDAwKQorICAgICAgICAjIDwgMi4wCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhuLCAweDIwMDAwMDAwKQorICAgICAgICBtYWpvciwgbWlub3IsIGZpeCwgcGF0Y2gsIHN0YXR1cyA9IHQKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobWFqb3IsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhtYWpvciwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobWlub3IsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhtaW5vciwgMjU2KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChmaXgsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhmaXgsIDI1NikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocGF0Y2gsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHBhdGNoLCAyNikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3RhdHVzLCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzdGF0dXMsIDE1KQorICAgICAgICAjIFZlcnNpb24gc3RyaW5nIGFzIHJldHVybmVkIGJ5IE9wZW5TU0wsIHRoZSBmb3JtYXQgbWlnaHQgY2hhbmdlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIk9wZW5TU0wgezpkfS57OmR9Lns6ZH0iLmZvcm1hdChtYWpvciwgbWlub3IsIGZpeCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgKHMsIHQpKQorCisgICAgZGVmIHRlc3RfY2lwaGVycyhzZWxmKToKKyAgICAgICAgaWYgbm90IHRlc3Rfc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCduZXR3b3JrJyk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmVtb3RlID0gKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHJlbW90ZVswXSk6CisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfTk9ORSwgY2lwaGVycz0iQUxMIikKKyAgICAgICAgICAgIHMuY29ubmVjdChyZW1vdGUpCisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfTk9ORSwgY2lwaGVycz0iREVGQVVMVCIpCisgICAgICAgICAgICBzLmNvbm5lY3QocmVtb3RlKQorICAgICAgICAgICAgIyBFcnJvciBjaGVja2luZyBvY2N1cnMgd2hlbiBjb25uZWN0aW5nLCBiZWNhdXNlIHRoZSBTU0wgY29udGV4dAorICAgICAgICAgICAgIyBpc24ndCBjcmVhdGVkIGJlZm9yZS4KKyAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9OT05FLCBjaXBoZXJzPSJeJDosOz8qJ2Rvcm90aHl4IikKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoc3NsLlNTTEVycm9yLCAiTm8gY2lwaGVyIGNhbiBiZSBzZWxlY3RlZCIpOgorICAgICAgICAgICAgICAgIHMuY29ubmVjdChyZW1vdGUpCisKKyAgICBAdGVzdF9zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3JlZmN5Y2xlKHNlbGYpOgorICAgICAgICAjIElzc3VlICM3OTQzOiBhbiBTU0wgb2JqZWN0IGRvZXNuJ3QgY3JlYXRlIHJlZmVyZW5jZSBjeWNsZXMgd2l0aAorICAgICAgICAjIGl0c2VsZi4KKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpCisgICAgICAgIHNzID0gc3NsLndyYXBfc29ja2V0KHMpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoc3MpCisgICAgICAgIGRlbCBzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF93cmFwcGVkX3VuY29ubmVjdGVkKHNlbGYpOgorICAgICAgICAjIFRoZSBfZGVsZWdhdGVfbWV0aG9kcyBpbiBzb2NrZXQucHkgYXJlIGNvcnJlY3RseSBkZWxlZ2F0ZWQgdG8gYnkgYW4KKyAgICAgICAgIyB1bmNvbm5lY3RlZCBTU0xTb2NrZXQsIHNvIHRoZXkgd2lsbCByYWlzZSBhIHNvY2tldC5lcnJvciByYXRoZXIgdGhhbgorICAgICAgICAjIHNvbWV0aGluZyB1bmV4cGVjdGVkIGxpa2UgVHlwZUVycm9yLgorICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgc3MgPSBzc2wud3JhcF9zb2NrZXQocykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2LCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3ZfaW50bywgYnl0ZWFycmF5KGIneCcpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3Zmcm9tLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3Zmcm9tX2ludG8sIGJ5dGVhcnJheShiJ3gnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5zZW5kLCBiJ3gnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnNlbmR0bywgYid4JywgKCcwLjAuMC4wJywgMCkpCisKKworY2xhc3MgTmV0d29ya2VkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY29ubmVjdChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzdm4ucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX05PTkUpCisgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICBjID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICBpZiBjOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUGVlciBjZXJ0ICVzIHNob3VsZG4ndCBiZSBoZXJlISIpCisgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgICAgICAgICAgIyB0aGlzIHNob3VsZCBmYWlsIGJlY2F1c2Ugd2UgaGF2ZSBubyB2ZXJpZmljYXRpb24gY2VydHMKKyAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgICAgICMgdGhpcyBzaG91bGQgc3VjY2VlZCBiZWNhdXNlIHdlIHNwZWNpZnkgdGhlIHJvb3QgY2VydAorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1TVk5fUFlUSE9OX09SR19ST09UX0NFUlQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3RfZXgoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExMzI2OiBjaGVjayBjb25uZWN0X2V4KCkgaW1wbGVtZW50YXRpb24KKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzdm4ucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1TVk5fUFlUSE9OX09SR19ST09UX0NFUlQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzLmNvbm5lY3RfZXgoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmdldHBlZXJjZXJ0KCkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfbm9uX2Jsb2NraW5nX2Nvbm5lY3RfZXgoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExMzI2OiBub24tYmxvY2tpbmcgY29ubmVjdF9leCgpIHNob3VsZCBhbGxvdyBoYW5kc2hha2UKKyAgICAgICAgIyB0byBwcm9jZWVkIGFmdGVyIHRoZSBzb2NrZXQgZ2V0cyByZWFkeS4KKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzdm4ucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1TVk5fUFlUSE9OX09SR19ST09UX0NFUlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PUZhbHNlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgICAgICAgICAgcmMgPSBzLmNvbm5lY3RfZXgoKCdzdm4ucHl0aG9uLm9yZycsIDQ0MykpCisgICAgICAgICAgICAgICAgIyBFV09VTERCTE9DSyB1bmRlciBXaW5kb3dzLCBFSU5QUk9HUkVTUyBlbHNld2hlcmUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHJjLCAoMCwgZXJybm8uRUlOUFJPR1JFU1MsIGVycm5vLkVXT1VMREJMT0NLKSkKKyAgICAgICAgICAgICAgICAjIFdhaXQgZm9yIGNvbm5lY3QgdG8gZmluaXNoCisgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbXSwgW3NdLCBbXSwgNS4wKQorICAgICAgICAgICAgICAgICMgTm9uLWJsb2NraW5nIGhhbmRzaGFrZQorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHMuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbc10sIFtdLCBbXSwgNS4wKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbXSwgW3NdLCBbXSwgNS4wKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICMgU1NMIGVzdGFibGlzaGVkCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZ2V0cGVlcmNlcnQoKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF90aW1lb3V0X2Nvbm5lY3RfZXgoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEyMDY1OiBvbiBhIHRpbWVvdXQsIGNvbm5lY3RfZXgoKSBzaG91bGQgcmV0dXJuIHRoZSBvcmlnaW5hbAorICAgICAgICAjIGVycm5vIChtaW1pY2tpbmcgdGhlIGJlaGF2aW91ciBvZiBub24tU1NMIHNvY2tldHMpLgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPVNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcy5zZXR0aW1lb3V0KDAuMDAwMDAwMSkKKyAgICAgICAgICAgICAgICByYyA9IHMuY29ubmVjdF9leCgoJ3N2bi5weXRob24ub3JnJywgNDQzKSkKKyAgICAgICAgICAgICAgICBpZiByYyA9PSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJzdm4ucHl0aG9uLm9yZyByZXNwb25kZWQgdG9vIHF1aWNrbHkiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmMsIChlcnJuby5FQUdBSU4sIGVycm5vLkVXT1VMREJMT0NLKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jb25uZWN0X2V4X2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPVNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycm5vLkVDT05OUkVGVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdF9leCgoInN2bi5weXRob24ub3JnIiwgNDQ0KSkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICJudCIsICJDYW4ndCB1c2UgYSBzb2NrZXQgYXMgYSBmaWxlIHVuZGVyIFdpbmRvd3MiKQorICAgIGRlZiB0ZXN0X21ha2VmaWxlX2Nsb3NlKHNlbGYpOgorICAgICAgICAjIElzc3VlICM1MjM4OiBjcmVhdGluZyBhIGZpbGUtbGlrZSBvYmplY3Qgd2l0aCBtYWtlZmlsZSgpIHNob3VsZG4ndAorICAgICAgICAjIGRlbGF5IGNsb3NpbmcgdGhlIHVuZGVybHlpbmcgInJlYWwgc29ja2V0IiAoaGVyZSB0ZXN0ZWQgd2l0aCBpdHMKKyAgICAgICAgIyBmaWxlIGRlc2NyaXB0b3IsIGhlbmNlIHNraXBwaW5nIHRoZSB0ZXN0IHVuZGVyIFdpbmRvd3MpLgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBzcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSkKKyAgICAgICAgICAgIHNzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICBmZCA9IHNzLmZpbGVubygpCisgICAgICAgICAgICBmID0gc3MubWFrZWZpbGUoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAjIFRoZSBmZCBpcyBzdGlsbCBvcGVuCisgICAgICAgICAgICBvcy5yZWFkKGZkLCAwKQorICAgICAgICAgICAgIyBDbG9zaW5nIHRoZSBTU0wgc29ja2V0IHNob3VsZCBjbG9zZSB0aGUgZmQgdG9vCisgICAgICAgICAgICBzcy5jbG9zZSgpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgZToKKyAgICAgICAgICAgICAgICBvcy5yZWFkKGZkLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUJBREYpCisKKyAgICBkZWYgdGVzdF9ub25fYmxvY2tpbmdfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgIHMuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSkKKyAgICAgICAgICAgIGNvdW50ID0gMAorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgcy5kb19oYW5kc2hha2UoKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtzXSwgW10sIFtdKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW10sIFtzXSwgW10pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgcy5jbG9zZSgpCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbk5lZWRlZCAlZCBjYWxscyB0byBkb19oYW5kc2hha2UoKSB0byBlc3RhYmxpc2ggc2Vzc2lvbi5cbiIgJSBjb3VudCkKKworICAgIGRlZiB0ZXN0X2dldF9zZXJ2ZXJfY2VydGlmaWNhdGUoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic3ZuLnB5dGhvbi5vcmciKToKKyAgICAgICAgICAgIHBlbSA9IHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlKCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgaWYgbm90IHBlbToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIHNlcnZlciBjZXJ0aWZpY2F0ZSBvbiBzdm4ucHl0aG9uLm9yZzo0NDMhIikKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBlbSA9IHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlKCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpLCBjYV9jZXJ0cz1DRVJURklMRSkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3I6CisgICAgICAgICAgICAgICAgI3Nob3VsZCBmYWlsCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkdvdCBzZXJ2ZXIgY2VydGlmaWNhdGUgJXMgZm9yIHN2bi5weXRob24ub3JnISIgJSBwZW0pCisKKyAgICAgICAgICAgIHBlbSA9IHNzbC5nZXRfc2VydmVyX2NlcnRpZmljYXRlKCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpLCBjYV9jZXJ0cz1TVk5fUFlUSE9OX09SR19ST09UX0NFUlQpCisgICAgICAgICAgICBpZiBub3QgcGVtOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiTm8gc2VydmVyIGNlcnRpZmljYXRlIG9uIHN2bi5weXRob24ub3JnOjQ0MyEiKQorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5WZXJpZmllZCBjZXJ0aWZpY2F0ZSBmb3Igc3ZuLnB5dGhvbi5vcmc6NDQzIGlzXG4lc1xuIiAlIHBlbSkKKworICAgIGRlZiB0ZXN0X2FsZ29yaXRobXMoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzg0ODQ6IGFsbCBhbGdvcml0aG1zIHNob3VsZCBiZSBhdmFpbGFibGUgd2hlbiB2ZXJpZnlpbmcgYQorICAgICAgICAjIGNlcnRpZmljYXRlLgorICAgICAgICAjIFNIQTI1NiB3YXMgYWRkZWQgaW4gT3BlblNTTCAwLjkuOAorICAgICAgICBpZiBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8gPCAoMCwgOSwgOCwgMCwgMTUpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiU0hBMjU2IG5vdCBhdmFpbGFibGUgb24gJXIiICUgc3NsLk9QRU5TU0xfVkVSU0lPTikKKyAgICAgICAgc2VsZi5za2lwVGVzdCgicmVtb3RlIGhvc3QgbmVlZHMgU05JLCBvbmx5IGF2YWlsYWJsZSBvbiBQeXRob24gMy4yKyIpCisgICAgICAgICMgTk9URTogaHR0cHM6Ly9zaGEyLmhib2Vjay5kZSBpcyBhbm90aGVyIHBvc3NpYmxlIHRlc3QgaG9zdAorICAgICAgICByZW1vdGUgPSAoInNoYTI1Ni50YnMtaW50ZXJuZXQuY29tIiwgNDQzKQorICAgICAgICBzaGEyNTZfY2VydCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAic2hhMjU2LnBlbSIpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic2hhMjU2LnRicy1pbnRlcm5ldC5jb20iKToKKyAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9c2hhMjU2X2NlcnQsKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMuY29ubmVjdChyZW1vdGUpCisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuQ2lwaGVyIHdpdGggJXIgaXMgJXJcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdGUsIHMuY2lwaGVyKCkpKQorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJDZXJ0aWZpY2F0ZSBpczpcbiVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChzLmdldHBlZXJjZXJ0KCkpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKworCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIF9oYXZlX3RocmVhZHMgPSBGYWxzZQorZWxzZToKKyAgICBfaGF2ZV90aHJlYWRzID0gVHJ1ZQorCisgICAgY2xhc3MgVGhyZWFkZWRFY2hvU2VydmVyKHRocmVhZGluZy5UaHJlYWQpOgorCisgICAgICAgIGNsYXNzIENvbm5lY3Rpb25IYW5kbGVyKHRocmVhZGluZy5UaHJlYWQpOgorCisgICAgICAgICAgICAiIiJBIG1pbGRseSBjb21wbGljYXRlZCBjbGFzcywgYmVjYXVzZSB3ZSB3YW50IGl0IHRvIHdvcmsgYm90aAorICAgICAgICAgICAgd2l0aCBhbmQgd2l0aG91dCB0aGUgU1NMIHdyYXBwZXIgYXJvdW5kIHRoZSBzb2NrZXQgY29ubmVjdGlvbiwgc28KKyAgICAgICAgICAgIHRoYXQgd2UgY2FuIHRlc3QgdGhlIFNUQVJUVExTIGZ1bmN0aW9uYWxpdHkuIiIiCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIGNvbm5zb2NrKToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlcgorICAgICAgICAgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gY29ubnNvY2sKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2V0YmxvY2tpbmcoMSkKKyAgICAgICAgICAgICAgICBzZWxmLnNzbGNvbm4gPSBOb25lCisgICAgICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorCisgICAgICAgICAgICBkZWYgc2hvd19jb25uX2RldGFpbHMoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIuY2VydHJlcXMgPT0gc3NsLkNFUlRfUkVRVUlSRUQ6CisgICAgICAgICAgICAgICAgICAgIGNlcnQgPSBzZWxmLnNzbGNvbm4uZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZSBhbmQgc2VsZi5zZXJ2ZXIuY2hhdHR5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIGNsaWVudCBjZXJ0IGlzICIgKyBwcHJpbnQucGZvcm1hdChjZXJ0KSArICJcbiIpCisgICAgICAgICAgICAgICAgICAgIGNlcnRfYmluYXJ5ID0gc2VsZi5zc2xjb25uLmdldHBlZXJjZXJ0KFRydWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlIGFuZCBzZWxmLnNlcnZlci5jaGF0dHk6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgY2VydCBiaW5hcnkgaXMgIiArIHN0cihsZW4oY2VydF9iaW5hcnkpKSArICIgYnl0ZXNcbiIpCisgICAgICAgICAgICAgICAgY2lwaGVyID0gc2VsZi5zc2xjb25uLmNpcGhlcigpCisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2UgYW5kIHNlbGYuc2VydmVyLmNoYXR0eToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIHNlcnZlcjogY29ubmVjdGlvbiBjaXBoZXIgaXMgbm93ICIgKyBzdHIoY2lwaGVyKSArICJcbiIpCisKKyAgICAgICAgICAgIGRlZiB3cmFwX2Nvbm4oc2VsZik6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNzbGNvbm4gPSBzc2wud3JhcF9zb2NrZXQoc2VsZi5zb2NrLCBzZXJ2ZXJfc2lkZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9c2VsZi5zZXJ2ZXIuY2VydGlmaWNhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zZWxmLnNlcnZlci5wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPXNlbGYuc2VydmVyLmNhY2VydHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c2VsZi5zZXJ2ZXIuY2VydHJlcXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzPXNlbGYuc2VydmVyLmNpcGhlcnMpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAjIFhYWCBWYXJpb3VzIGVycm9ycyBjYW4gaGF2ZSBoYXBwZW5lZCBoZXJlLCBmb3IgZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICAjIGEgbWlzbWF0Y2hpbmcgcHJvdG9jb2wgdmVyc2lvbiwgYW4gaW52YWxpZCBjZXJ0aWZpY2F0ZSwKKyAgICAgICAgICAgICAgICAgICAgIyBvciBhIGxvdy1sZXZlbCBidWcuIFRoaXMgc2hvdWxkIGJlIG1hZGUgbW9yZSBkaXNjcmltaW5hdGluZy4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuY29ubl9lcnJvcnMuYXBwZW5kKGUpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyLmNoYXR0eToKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9lcnJvcigiXG4gc2VydmVyOiAgYmFkIGNvbm5lY3Rpb24gYXR0ZW1wdCBmcm9tICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihzZWxmLnNvY2suZ2V0cGVlcm5hbWUoKSkgKyAiOlxuIikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICBkZWYgcmVhZChzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNzbGNvbm46CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNzbGNvbm4ucmVhZCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29jay5yZWN2KDEwMjQpCisKKyAgICAgICAgICAgIGRlZiB3cml0ZShzZWxmLCBieXRlcyk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zc2xjb25uOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zc2xjb25uLndyaXRlKGJ5dGVzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNvY2suc2VuZChieXRlcykKKworICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3NsY29ubjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zc2xjb25uLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2suX3NvY2suY2xvc2UoKQorCisgICAgICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXIuc3RhcnR0bHNfc2VydmVyOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuc29jaywgc3NsLlNTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNzbGNvbm4gPSBzZWxmLnNvY2sKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBub3Qgc2VsZi53cmFwX2Nvbm4oKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNob3dfY29ubl9kZXRhaWxzKCkKKyAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLnJ1bm5pbmc6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IHNlbGYucmVhZCgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbXNnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZW9mLCBzbyBxdWl0IHRoaXMgaGFuZGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIG1zZy5zdHJpcCgpID09ICdvdmVyJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZSBhbmQgc2VsZi5zZXJ2ZXIuY29ubmVjdGlvbmNoYXR0eToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIHNlcnZlcjogY2xpZW50IGNsb3NlZCBjb25uZWN0aW9uXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLnNlcnZlci5zdGFydHRsc19zZXJ2ZXIgYW5kIG1zZy5zdHJpcCgpID09ICdTVEFSVFRMUyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2UgYW5kIHNlbGYuc2VydmVyLmNvbm5lY3Rpb25jaGF0dHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBzZXJ2ZXI6IHJlYWQgU1RBUlRUTFMgZnJvbSBjbGllbnQsIHNlbmRpbmcgT0suLi5cbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiT0tcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYud3JhcF9jb25uKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLnNlcnZlci5zdGFydHRsc19zZXJ2ZXIgYW5kIHNlbGYuc3NsY29ubiBhbmQgbXNnLnN0cmlwKCkgPT0gJ0VORFRMUyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2UgYW5kIHNlbGYuc2VydmVyLmNvbm5lY3Rpb25jaGF0dHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBzZXJ2ZXI6IHJlYWQgRU5EVExTIGZyb20gY2xpZW50LCBzZW5kaW5nIE9LLi4uXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIk9LXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3NsY29ubi51bndyYXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3NsY29ubiA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZSBhbmQgc2VsZi5zZXJ2ZXIuY29ubmVjdGlvbmNoYXR0eToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIHNlcnZlcjogY29ubmVjdGlvbiBpcyBub3cgdW5lbmNyeXB0ZWQuLi5cbiIpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0X3N1cHBvcnQudmVyYm9zZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuY29ubmVjdGlvbmNoYXR0eSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eXBlID0gKHNlbGYuc3NsY29ubiBhbmQgImVuY3J5cHRlZCIpIG9yICJ1bmVuY3J5cHRlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIHNlcnZlcjogcmVhZCAlcyAoJXMpLCBzZW5kaW5nIGJhY2sgJXMgKCVzKS4uLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHJlcHIobXNnKSwgY3R5cGUsIHJlcHIobXNnLmxvd2VyKCkpLCBjdHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShtc2cubG93ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyLmNoYXR0eToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZXJyb3IoIlRlc3Qgc2VydmVyIGZhaWx1cmU6XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBub3JtYWxseSwgd2UnZCBqdXN0IHN0b3AgaGVyZSwgYnV0IGZvciB0aGUgdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgIyBoYXJuZXNzLCB3ZSB3YW50IHRvIHN0b3AgdGhlIHNlcnZlcgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNlcnRpZmljYXRlLCBzc2xfdmVyc2lvbj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgY2VydHJlcXM9Tm9uZSwgY2FjZXJ0cz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9RmFsc2UsIHN0YXJ0dGxzX3NlcnZlcj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgIHdyYXBfYWNjZXB0aW5nX3NvY2tldD1GYWxzZSwgY2lwaGVycz1Ob25lKToKKworICAgICAgICAgICAgaWYgc3NsX3ZlcnNpb24gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbiA9IHNzbC5QUk9UT0NPTF9UTFN2MQorICAgICAgICAgICAgaWYgY2VydHJlcXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjZXJ0cmVxcyA9IHNzbC5DRVJUX05PTkUKKyAgICAgICAgICAgIHNlbGYuY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZQorICAgICAgICAgICAgc2VsZi5wcm90b2NvbCA9IHNzbF92ZXJzaW9uCisgICAgICAgICAgICBzZWxmLmNlcnRyZXFzID0gY2VydHJlcXMKKyAgICAgICAgICAgIHNlbGYuY2FjZXJ0cyA9IGNhY2VydHMKKyAgICAgICAgICAgIHNlbGYuY2lwaGVycyA9IGNpcGhlcnMKKyAgICAgICAgICAgIHNlbGYuY2hhdHR5ID0gY2hhdHR5CisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb25jaGF0dHkgPSBjb25uZWN0aW9uY2hhdHR5CisgICAgICAgICAgICBzZWxmLnN0YXJ0dGxzX3NlcnZlciA9IHN0YXJ0dGxzX3NlcnZlcgorICAgICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBzZWxmLmZsYWcgPSBOb25lCisgICAgICAgICAgICBpZiB3cmFwX2FjY2VwdGluZ19zb2NrZXQ6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29jaywgc2VydmVyX3NpZGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9c2VsZi5jZXJ0aWZpY2F0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzID0gc2VsZi5jZXJ0cmVxcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHMgPSBzZWxmLmNhY2VydHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uID0gc2VsZi5wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVycyA9IHNlbGYuY2lwaGVycykKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZSBhbmQgc2VsZi5jaGF0dHk6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJyBzZXJ2ZXI6ICB3cmFwcGVkIHNlcnZlciBzb2NrZXQgYXMgJXNcbicgJSBzdHIoc2VsZi5zb2NrKSkKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrKQorICAgICAgICAgICAgc2VsZi5hY3RpdmUgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5jb25uX2Vycm9ycyA9IFtdCisgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICBzZWxmLmRhZW1vbiA9IFRydWUKKworICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zdGFydCh0aHJlYWRpbmcuRXZlbnQoKSkKKyAgICAgICAgICAgIHNlbGYuZmxhZy53YWl0KCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICBzZWxmLmpvaW4oKQorCisgICAgICAgIGRlZiBzdGFydChzZWxmLCBmbGFnPU5vbmUpOgorICAgICAgICAgICAgc2VsZi5mbGFnID0gZmxhZworICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5zdGFydChzZWxmKQorCisgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dCgwLjA1KQorICAgICAgICAgICAgc2VsZi5zb2NrLmxpc3Rlbig1KQorICAgICAgICAgICAgc2VsZi5hY3RpdmUgPSBUcnVlCisgICAgICAgICAgICBpZiBzZWxmLmZsYWc6CisgICAgICAgICAgICAgICAgIyBzaWduYWwgYW4gZXZlbnQKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcuc2V0KCkKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuYWN0aXZlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbmV3Y29ubiwgY29ubmFkZHIgPSBzZWxmLnNvY2suYWNjZXB0KCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2UgYW5kIHNlbGYuY2hhdHR5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnIHNlcnZlcjogIG5ldyBjb25uZWN0aW9uIGZyb20gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0cihjb25uYWRkcikgKyAnXG4nKQorICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gc2VsZi5Db25uZWN0aW9uSGFuZGxlcihzZWxmLCBuZXdjb25uKQorICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnN0YXJ0KCkKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5qb2luKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorCisgICAgICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hY3RpdmUgPSBGYWxzZQorCisgICAgY2xhc3MgQXN5bmNvcmVFY2hvU2VydmVyKHRocmVhZGluZy5UaHJlYWQpOgorCisgICAgICAgIGNsYXNzIEVjaG9TZXJ2ZXIoYXN5bmNvcmUuZGlzcGF0Y2hlcik6CisKKyAgICAgICAgICAgIGNsYXNzIENvbm5lY3Rpb25IYW5kbGVyKGFzeW5jb3JlLmRpc3BhdGNoZXJfd2l0aF9zZW5kKToKKworICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uLCBjZXJ0ZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXJfd2l0aF9zZW5kLl9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0ID0gc3NsLndyYXBfc29ja2V0KGNvbm4sIHNlcnZlcl9zaWRlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPWNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3NsX2FjY2VwdGluZyA9IFRydWUKKworICAgICAgICAgICAgICAgIGRlZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnNvY2tldCwgc3NsLlNTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLnNvY2tldC5wZW5kaW5nKCkgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX3JlYWRfZXZlbnQoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICAgICAgZGVmIF9kb19zc2xfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5kb19oYW5kc2hha2UoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9FT0Y6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3NsX2FjY2VwdGluZyA9IEZhbHNlCisKKyAgICAgICAgICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NzbF9hY2NlcHRpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kb19zc2xfaGFuZHNoYWtlKCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJlY3YoMTAyNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRhdGEgYW5kIGRhdGEuc3RyaXAoKSAhPSAnb3Zlcic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZW5kKGRhdGEubG93ZXIoKSkKKworICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVfY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBzZXJ2ZXI6ICBjbG9zZWQgY29ubmVjdGlvbiAlc1xuIiAlIHNlbGYuc29ja2V0KQorCisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNlcnRmaWxlKToKKyAgICAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICAgICAgc2VsZi5wb3J0ID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2tldCkKKyAgICAgICAgICAgICAgICBzZWxmLmxpc3Rlbig1KQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2FjY2VwdChzZWxmKToKKyAgICAgICAgICAgICAgICBzb2NrX29iaiwgYWRkciA9IHNlbGYuYWNjZXB0KCkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIHNlcnZlcjogIG5ldyBjb25uZWN0aW9uIGZyb20gJXM6JXNcbiIgJWFkZHIpCisgICAgICAgICAgICAgICAgc2VsZi5Db25uZWN0aW9uSGFuZGxlcihzb2NrX29iaiwgc2VsZi5jZXJ0ZmlsZSkKKworICAgICAgICAgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjZXJ0ZmlsZSk6CisgICAgICAgICAgICBzZWxmLmZsYWcgPSBOb25lCisgICAgICAgICAgICBzZWxmLmFjdGl2ZSA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnNlcnZlciA9IHNlbGYuRWNob1NlcnZlcihjZXJ0ZmlsZSkKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuc2VydmVyLnBvcnQKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorCisgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICI8JXMgJXM+IiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5zZXJ2ZXIpCisKKyAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc3RhcnQodGhyZWFkaW5nLkV2ZW50KCkpCisgICAgICAgICAgICBzZWxmLmZsYWcud2FpdCgpCisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgY2xlYW51cDogc3RvcHBpbmcgc2VydmVyLlxuIikKKyAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgY2xlYW51cDogam9pbmluZyBzZXJ2ZXIgdGhyZWFkLlxuIikKKyAgICAgICAgICAgIHNlbGYuam9pbigpCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgY2xlYW51cDogc3VjY2Vzc2Z1bGx5IGpvaW5lZC5cbiIpCisKKyAgICAgICAgZGVmIHN0YXJ0KHNlbGYsIGZsYWc9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmZsYWcgPSBmbGFnCisgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLnN0YXJ0KHNlbGYpCisKKyAgICAgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYWN0aXZlID0gVHJ1ZQorICAgICAgICAgICAgaWYgc2VsZi5mbGFnOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZy5zZXQoKQorICAgICAgICAgICAgd2hpbGUgc2VsZi5hY3RpdmU6CisgICAgICAgICAgICAgICAgYXN5bmNvcmUubG9vcCgwLjA1KQorCisgICAgICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5hY3RpdmUgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuY2xvc2UoKQorCisgICAgY2xhc3MgU29ja2V0U2VydmVySFRUUFNTZXJ2ZXIodGhyZWFkaW5nLlRocmVhZCk6CisKKyAgICAgICAgY2xhc3MgSFRUUFNTZXJ2ZXIoSFRUUFNlcnZlcik6CisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXJfYWRkcmVzcywgUmVxdWVzdEhhbmRsZXJDbGFzcywgY2VydGZpbGUpOgorICAgICAgICAgICAgICAgIEhUVFBTZXJ2ZXIuX19pbml0X18oc2VsZiwgc2VydmVyX2FkZHJlc3MsIFJlcXVlc3RIYW5kbGVyQ2xhc3MpCisgICAgICAgICAgICAgICAgIyB3ZSBhc3N1bWUgdGhlIGNlcnRmaWxlIGNvbnRhaW5zIGJvdGggcHJpdmF0ZSBrZXkgYW5kIGNlcnRpZmljYXRlCisgICAgICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSA9IGNlcnRmaWxlCisgICAgICAgICAgICAgICAgc2VsZi5hbGxvd19yZXVzZV9hZGRyZXNzID0gVHJ1ZQorCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCc8JXMgJXM6JXM+JyAlCisgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9wb3J0KSkKKworICAgICAgICAgICAgZGVmIGdldF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgICMgb3ZlcnJpZGUgdGhpcyB0byB3cmFwIHNvY2tldCB3aXRoIFNTTAorICAgICAgICAgICAgICAgIHNvY2ssIGFkZHIgPSBzZWxmLnNvY2tldC5hY2NlcHQoKQorICAgICAgICAgICAgICAgIHNzbGNvbm4gPSBzc2wud3JhcF9zb2NrZXQoc29jaywgc2VydmVyX3NpZGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPXNlbGYuY2VydGZpbGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNzbGNvbm4sIGFkZHIKKworICAgICAgICBjbGFzcyBSb290ZWRIVFRQUmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKKyAgICAgICAgICAgICMgbmVlZCB0byBvdmVycmlkZSB0cmFuc2xhdGVfcGF0aCB0byBnZXQgYSBrbm93biByb290LAorICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIHVzaW5nIG9zLmN1cmRpciwgc2luY2UgdGhlIHRlc3QgY291bGQgYmUKKyAgICAgICAgICAgICMgcnVuIGZyb20gYW55d2hlcmUKKworICAgICAgICAgICAgc2VydmVyX3ZlcnNpb24gPSAiVGVzdEhUVFBTLzEuMCIKKworICAgICAgICAgICAgcm9vdCA9IE5vbmUKKworICAgICAgICAgICAgZGVmIHRyYW5zbGF0ZV9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICAgICAgICAgICIiIlRyYW5zbGF0ZSBhIC8tc2VwYXJhdGVkIFBBVEggdG8gdGhlIGxvY2FsIGZpbGVuYW1lIHN5bnRheC4KKworICAgICAgICAgICAgICAgIENvbXBvbmVudHMgdGhhdCBtZWFuIHNwZWNpYWwgdGhpbmdzIHRvIHRoZSBsb2NhbCBmaWxlIHN5c3RlbQorICAgICAgICAgICAgICAgIChlLmcuIGRyaXZlIG9yIGRpcmVjdG9yeSBuYW1lcykgYXJlIGlnbm9yZWQuICAoWFhYIFRoZXkgc2hvdWxkCisgICAgICAgICAgICAgICAgcHJvYmFibHkgYmUgZGlhZ25vc2VkLikKKworICAgICAgICAgICAgICAgICIiIgorICAgICAgICAgICAgICAgICMgYWJhbmRvbiBxdWVyeSBwYXJhbWV0ZXJzCisgICAgICAgICAgICAgICAgcGF0aCA9IHVybHBhcnNlLnVybHBhcnNlKHBhdGgpWzJdCisgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgodXJsbGliLnVucXVvdGUocGF0aCkpCisgICAgICAgICAgICAgICAgd29yZHMgPSBwYXRoLnNwbGl0KCcvJykKKyAgICAgICAgICAgICAgICB3b3JkcyA9IGZpbHRlcihOb25lLCB3b3JkcykKKyAgICAgICAgICAgICAgICBwYXRoID0gc2VsZi5yb290CisgICAgICAgICAgICAgICAgZm9yIHdvcmQgaW4gd29yZHM6CisgICAgICAgICAgICAgICAgICAgIGRyaXZlLCB3b3JkID0gb3MucGF0aC5zcGxpdGRyaXZlKHdvcmQpCisgICAgICAgICAgICAgICAgICAgIGhlYWQsIHdvcmQgPSBvcy5wYXRoLnNwbGl0KHdvcmQpCisgICAgICAgICAgICAgICAgICAgIGlmIHdvcmQgaW4gc2VsZi5yb290OiBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsIHdvcmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGgKKworICAgICAgICAgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOgorCisgICAgICAgICAgICAgICAgIyB3ZSBvdmVycmlkZSB0aGlzIHRvIHN1cHByZXNzIGxvZ2dpbmcgdW5sZXNzICJ2ZXJib3NlIgorCisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBzZXJ2ZXIgKCVzOiVkICVzKTpcbiAgIFslc10gJXNcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLnNlcnZlci5zZXJ2ZXJfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc2VydmVyX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVxdWVzdC5jaXBoZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dfZGF0ZV90aW1lX3N0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQlYXJncykpCisKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY2VydGZpbGUpOgorICAgICAgICAgICAgc2VsZi5mbGFnID0gTm9uZQorICAgICAgICAgICAgc2VsZi5Sb290ZWRIVFRQUmVxdWVzdEhhbmRsZXIucm9vdCA9IG9zLnBhdGguc3BsaXQoQ0VSVEZJTEUpWzBdCisgICAgICAgICAgICBzZWxmLnNlcnZlciA9IHNlbGYuSFRUUFNTZXJ2ZXIoCisgICAgICAgICAgICAgICAgKEhPU1QsIDApLCBzZWxmLlJvb3RlZEhUVFBSZXF1ZXN0SGFuZGxlciwgY2VydGZpbGUpCisgICAgICAgICAgICBzZWxmLnBvcnQgPSBzZWxmLnNlcnZlci5zZXJ2ZXJfcG9ydAorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCisKKyAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gIjwlcyAlcz4iICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLnNlcnZlcikKKworICAgICAgICBkZWYgc3RhcnQoc2VsZiwgZmxhZz1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuZmxhZyA9IGZsYWcKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuc3RhcnQoc2VsZikKKworICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5mbGFnOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZy5zZXQoKQorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc2VydmVfZm9yZXZlcigwLjA1KQorCisgICAgICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc2h1dGRvd24oKQorCisKKyAgICBkZWYgYmFkX2NlcnRfdGVzdChjZXJ0ZmlsZSk6CisgICAgICAgICIiIgorICAgICAgICBMYXVuY2ggYSBzZXJ2ZXIgd2l0aCBDRVJUX1JFUVVJUkVELCBhbmQgY2hlY2sgdGhhdCB0cnlpbmcgdG8KKyAgICAgICAgY29ubmVjdCB0byBpdCB3aXRoIHRoZSBnaXZlbiBjbGllbnQgY2VydGlmaWNhdGUgZmFpbHMuCisgICAgICAgICIiIgorICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoQ0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0cmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2VydHM9Q0VSVEZJTEUsIGNoYXR0eT1GYWxzZSkKKyAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IsIHg6CisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuU1NMRXJyb3IgaXMgJXNcbiIgJSB4WzFdKQorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgeDoKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5zb2NrZXQuZXJyb3IgaXMgJXNcbiIgJSB4WzFdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVXNlIG9mIGludmFsaWQgY2VydCBzaG91bGQgaGF2ZSBmYWlsZWQhIikKKworICAgIGRlZiBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2VydGZpbGUsIHByb3RvY29sLCBjZXJ0cmVxcywgY2FjZXJ0c2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfY2VydGZpbGUsIGNsaWVudF9wcm90b2NvbD1Ob25lLCBpbmRhdGE9IkZPT1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnM9Tm9uZSwgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwX2FjY2VwdGluZ19zb2NrZXQ9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgTGF1bmNoIGEgc2VydmVyLCBjb25uZWN0IGEgY2xpZW50IHRvIGl0IGFuZCB0cnkgdmFyaW91cyByZWFkcworICAgICAgICBhbmQgd3JpdGVzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydHJlcXM9Y2VydHJlcXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2VydHM9Y2FjZXJ0c2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzPWNpcGhlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9Y2hhdHR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbmNoYXR0eT1jb25uZWN0aW9uY2hhdHR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcF9hY2NlcHRpbmdfc29ja2V0PXdyYXBfYWNjZXB0aW5nX3NvY2tldCkKKyAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAjIHRyeSB0byBjb25uZWN0CisgICAgICAgICAgICBpZiBjbGllbnRfcHJvdG9jb2wgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjbGllbnRfcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPWNsaWVudF9jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9Y2FjZXJ0c2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnM9Y2lwaGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPWNlcnRyZXFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1jbGllbnRfcHJvdG9jb2wpCisgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgIGZvciBhcmcgaW4gW2luZGF0YSwgYnl0ZWFycmF5KGluZGF0YSksIG1lbW9yeXZpZXcoaW5kYXRhKV06CisgICAgICAgICAgICAgICAgaWYgY29ubmVjdGlvbmNoYXR0eToKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgY2xpZW50OiAgc2VuZGluZyAlcy4uLlxuIiAlIChyZXByKGFyZykpKQorICAgICAgICAgICAgICAgIHMud3JpdGUoYXJnKQorICAgICAgICAgICAgICAgIG91dGRhdGEgPSBzLnJlYWQoKQorICAgICAgICAgICAgICAgIGlmIGNvbm5lY3Rpb25jaGF0dHk6CisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIGNsaWVudDogIHJlYWQgJXNcbiIgJSByZXByKG91dGRhdGEpKQorICAgICAgICAgICAgICAgIGlmIG91dGRhdGEgIT0gaW5kYXRhLmxvd2VyKCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBkYXRhIDw8JXM+PiAoJWQpIHJlY2VpdmVkOyBleHBlY3RlZCA8PCVzPj4gKCVkKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgJSAob3V0ZGF0YVs6bWluKGxlbihvdXRkYXRhKSwyMCldLCBsZW4ob3V0ZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRhdGFbOm1pbihsZW4oaW5kYXRhKSwyMCldLmxvd2VyKCksIGxlbihpbmRhdGEpKSkKKyAgICAgICAgICAgIHMud3JpdGUoIm92ZXJcbiIpCisgICAgICAgICAgICBpZiBjb25uZWN0aW9uY2hhdHR5OgorICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgY2xpZW50OiAgY2xvc2luZyBjb25uZWN0aW9uLlxuIikKKyAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVmIHRyeV9wcm90b2NvbF9jb21ibyhzZXJ2ZXJfcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Rfc3VjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRzcmVxcz1Ob25lKToKKyAgICAgICAgaWYgY2VydHNyZXFzIGlzIE5vbmU6CisgICAgICAgICAgICBjZXJ0c3JlcXMgPSBzc2wuQ0VSVF9OT05FCisgICAgICAgIGNlcnR0eXBlID0geworICAgICAgICAgICAgc3NsLkNFUlRfTk9ORTogIkNFUlRfTk9ORSIsCisgICAgICAgICAgICBzc2wuQ0VSVF9PUFRJT05BTDogIkNFUlRfT1BUSU9OQUwiLAorICAgICAgICAgICAgc3NsLkNFUlRfUkVRVUlSRUQ6ICJDRVJUX1JFUVVJUkVEIiwKKyAgICAgICAgfVtjZXJ0c3JlcXNdCisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgZm9ybWF0c3RyID0gKGV4cGVjdF9zdWNjZXNzIGFuZCAiICVzLT4lcyAlc1xuIikgb3IgIiB7JXMtPiVzfSAlc1xuIgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShmb3JtYXRzdHIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3NsLmdldF9wcm90b2NvbF9uYW1lKGNsaWVudF9wcm90b2NvbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuZ2V0X3Byb3RvY29sX25hbWUoc2VydmVyX3Byb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnR0eXBlKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBOT1RFOiB3ZSBtdXN0IGVuYWJsZSAiQUxMIiBjaXBoZXJzLCBvdGhlcndpc2UgYW4gU1NMdjIzIGNsaWVudAorICAgICAgICAgICAgIyB3aWxsIHNlbmQgYW4gU1NMdjMgaGVsbG8gKHJhdGhlciB0aGFuIFNTTHYyKSBzdGFydGluZyBmcm9tCisgICAgICAgICAgICAjIE9wZW5TU0wgMS4wLjAgKHNlZSBpc3N1ZSAjODMyMikuCisgICAgICAgICAgICBzZXJ2ZXJfcGFyYW1zX3Rlc3QoQ0VSVEZJTEUsIHNlcnZlcl9wcm90b2NvbCwgY2VydHNyZXFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRGSUxFLCBDRVJURklMRSwgY2xpZW50X3Byb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnM9IkFMTCIsIGNoYXR0eT1GYWxzZSkKKyAgICAgICAgIyBQcm90b2NvbCBtaXNtYXRjaCBjYW4gcmVzdWx0IGluIGVpdGhlciBhbiBTU0xFcnJvciwgb3IgYQorICAgICAgICAjICJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiIGVycm9yLgorICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgorICAgICAgICAgICAgaWYgZXhwZWN0X3N1Y2Nlc3M6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZXhwZWN0X3N1Y2Nlc3Mgb3IgZS5lcnJubyAhPSBlcnJuby5FQ09OTlJFU0VUOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgZXhwZWN0X3N1Y2Nlc3M6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJDbGllbnQgcHJvdG9jb2wgJXMgc3VjY2VlZGVkIHdpdGggc2VydmVyIHByb3RvY29sICVzISIKKyAgICAgICAgICAgICAgICAgICAgJSAoc3NsLmdldF9wcm90b2NvbF9uYW1lKGNsaWVudF9wcm90b2NvbCksCisgICAgICAgICAgICAgICAgICAgICAgIHNzbC5nZXRfcHJvdG9jb2xfbmFtZShzZXJ2ZXJfcHJvdG9jb2wpKSkKKworCisgICAgY2xhc3MgVGhyZWFkZWRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICAgZGVmIHRlc3RfcnVkZV9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgICAgICIiIkEgYnJ1dGFsIHNodXRkb3duIG9mIGFuIFNTTCBzZXJ2ZXIgc2hvdWxkIHJhaXNlIGFuIElPRXJyb3IKKyAgICAgICAgICAgIGluIHRoZSBjbGllbnQgd2hlbiBhdHRlbXB0aW5nIGhhbmRzaGFrZS4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgbGlzdGVuZXJfcmVhZHkgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICAgICAgbGlzdGVuZXJfZ29uZSA9IHRocmVhZGluZy5FdmVudCgpCisKKyAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHMsIEhPU1QpCisKKyAgICAgICAgICAgICMgYGxpc3RlbmVyYCBydW5zIGluIGEgdGhyZWFkLiAgSXQgc2l0cyBpbiBhbiBhY2NlcHQoKSB1bnRpbAorICAgICAgICAgICAgIyB0aGUgbWFpbiB0aHJlYWQgY29ubmVjdHMuICBUaGVuIGl0IHJ1ZGVseSBjbG9zZXMgdGhlIHNvY2tldCwKKyAgICAgICAgICAgICMgYW5kIHNldHMgRXZlbnQgYGxpc3RlbmVyX2dvbmVgIHRvIGxldCB0aGUgbWFpbiB0aHJlYWQga25vdworICAgICAgICAgICAgIyB0aGUgc29ja2V0IGlzIGdvbmUuCisgICAgICAgICAgICBkZWYgbGlzdGVuZXIoKToKKyAgICAgICAgICAgICAgICBzLmxpc3Rlbig1KQorICAgICAgICAgICAgICAgIGxpc3RlbmVyX3JlYWR5LnNldCgpCisgICAgICAgICAgICAgICAgcy5hY2NlcHQoKQorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICAgICAgICAgIGxpc3RlbmVyX2dvbmUuc2V0KCkKKworICAgICAgICAgICAgZGVmIGNvbm5lY3RvcigpOgorICAgICAgICAgICAgICAgIGxpc3RlbmVyX3JlYWR5LndhaXQoKQorICAgICAgICAgICAgICAgIGMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgICAgICBjLmNvbm5lY3QoKEhPU1QsIHBvcnQpKQorICAgICAgICAgICAgICAgIGxpc3RlbmVyX2dvbmUud2FpdCgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzc2xfc29jayA9IHNzbC53cmFwX3NvY2tldChjKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdjb25uZWN0aW5nIHRvIGNsb3NlZCBTU0wgc29ja2V0IHNob3VsZCBoYXZlIGZhaWxlZCcpCisKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1saXN0ZW5lcikKKyAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbm5lY3RvcigpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHQuam9pbigpCisKKyAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKKyAgICAgICAgZGVmIHRlc3RfZWNobyhzZWxmKToKKyAgICAgICAgICAgICIiIkJhc2ljIHRlc3Qgb2YgYW4gU1NMIGNsaWVudCBjb25uZWN0aW5nIHRvIGEgc2VydmVyIiIiCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisgICAgICAgICAgICBzZXJ2ZXJfcGFyYW1zX3Rlc3QoQ0VSVEZJTEUsIHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLkNFUlRfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRVJURklMRSwgQ0VSVEZJTEUsIHNzbC5QUk9UT0NPTF9UTFN2MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwgY29ubmVjdGlvbmNoYXR0eT1UcnVlKQorCisgICAgICAgIGRlZiB0ZXN0X2dldHBlZXJjZXJ0KHNlbGYpOgorICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgczIgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihDRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0cmVxcz1zc2wuQ0VSVF9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9TU0x2MjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjZXJ0cz1DRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9RmFsc2UpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9Q0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2VydCwgIkNhbid0IGdldCBwZWVyIGNlcnRpZmljYXRlLiIpCisgICAgICAgICAgICAgICAgY2lwaGVyID0gcy5jaXBoZXIoKQorICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHBwcmludC5wZm9ybWF0KGNlcnQpICsgJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiQ29ubmVjdGlvbiBjaXBoZXIgaXMgIiArIHN0cihjaXBoZXIpICsgJy5cbicpCisgICAgICAgICAgICAgICAgaWYgJ3N1YmplY3QnIG5vdCBpbiBjZXJ0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIHN1YmplY3QgZmllbGQgaW4gY2VydGlmaWNhdGU6ICVzLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoY2VydCkpCisgICAgICAgICAgICAgICAgaWYgKCgoJ29yZ2FuaXphdGlvbk5hbWUnLCAnUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24nKSwpCisgICAgICAgICAgICAgICAgICAgIG5vdCBpbiBjZXJ0WydzdWJqZWN0J10pOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoCisgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBvciBpbnZhbGlkICdvcmdhbml6YXRpb25OYW1lJyBmaWVsZCBpbiBjZXJ0aWZpY2F0ZSBzdWJqZWN0OyAiCisgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlICdQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbicuIikKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgICAgICBkZWYgdGVzdF9lbXB0eV9jZXJ0KHNlbGYpOgorICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB3aXRoIGFuIGVtcHR5IGNlcnQgZmlsZSIiIgorICAgICAgICAgICAgYmFkX2NlcnRfdGVzdChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJudWxsY2VydC5wZW0iKSkKKyAgICAgICAgZGVmIHRlc3RfbWFsZm9ybWVkX2NlcnQoc2VsZik6CisgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHdpdGggYSBiYWRseSBmb3JtYXR0ZWQgY2VydGlmaWNhdGUgKHN5bnRheCBlcnJvcikiIiIKKyAgICAgICAgICAgIGJhZF9jZXJ0X3Rlc3Qob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhZGNlcnQucGVtIikpCisgICAgICAgIGRlZiB0ZXN0X25vbmV4aXN0aW5nX2NlcnQoc2VsZik6CisgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHdpdGggYSBub24tZXhpc3RpbmcgY2VydCBmaWxlIiIiCisgICAgICAgICAgICBiYWRfY2VydF90ZXN0KG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZ2NlcnQucGVtIikpCisgICAgICAgIGRlZiB0ZXN0X21hbGZvcm1lZF9rZXkoc2VsZik6CisgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHdpdGggYSBiYWRseSBmb3JtYXR0ZWQga2V5IChzeW50YXggZXJyb3IpIiIiCisgICAgICAgICAgICBiYWRfY2VydF90ZXN0KG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWRrZXkucGVtIikpCisKKyAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKKyAgICAgICAgZGVmIHRlc3RfcHJvdG9jb2xfc3NsdjIoc2VsZik6CisgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHRvIGFuIFNTTHYyIHNlcnZlciB3aXRoIHZhcmlvdXMgY2xpZW50IG9wdGlvbnMiIiIKKyAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiUFJPVE9DT0xfU1NMdjIgbmVlZGVkIikKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIsIHNzbC5QUk9UT0NPTF9TU0x2MiwgVHJ1ZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIsIHNzbC5QUk9UT0NPTF9TU0x2MiwgVHJ1ZSwgc3NsLkNFUlRfT1BUSU9OQUwpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfU1NMdjIsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Miwgc3NsLlBST1RPQ09MX1NTTHYyMywgVHJ1ZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIsIHNzbC5QUk9UT0NPTF9TU0x2MywgRmFsc2UpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfVExTdjEsIEZhbHNlKQorCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCisgICAgICAgIGRlZiB0ZXN0X3Byb3RvY29sX3NzbHYyMyhzZWxmKToKKyAgICAgICAgICAgICIiIkNvbm5lY3RpbmcgdG8gYW4gU1NMdjIzIHNlcnZlciB3aXRoIHZhcmlvdXMgY2xpZW50IG9wdGlvbnMiIiIKKyAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIFRydWUpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYyMywgVHJ1ZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjEsIFRydWUpCisKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIFRydWUsIHNzbC5DRVJUX09QVElPTkFMKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIFRydWUsIHNzbC5DRVJUX09QVElPTkFMKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MSwgVHJ1ZSwgc3NsLkNFUlRfT1BUSU9OQUwpCisKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MSwgVHJ1ZSwgc3NsLkNFUlRfUkVRVUlSRUQpCisKKyAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKKyAgICAgICAgZGVmIHRlc3RfcHJvdG9jb2xfc3NsdjMoc2VsZik6CisgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHRvIGFuIFNTTHYzIHNlcnZlciB3aXRoIHZhcmlvdXMgY2xpZW50IG9wdGlvbnMiIiIKKyAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjMsIHNzbC5QUk9UT0NPTF9TU0x2MywgVHJ1ZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjMsIHNzbC5QUk9UT0NPTF9TU0x2MywgVHJ1ZSwgc3NsLkNFUlRfT1BUSU9OQUwpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQorICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MicpOgorICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjMsIHNzbC5QUk9UT0NPTF9TU0x2MiwgRmFsc2UpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYzLCBzc2wuUFJPVE9DT0xfVExTdjEsIEZhbHNlKQorCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCisgICAgICAgIGRlZiB0ZXN0X3Byb3RvY29sX3Rsc3YxKHNlbGYpOgorICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB0byBhIFRMU3YxIHNlcnZlciB3aXRoIHZhcmlvdXMgY2xpZW50IG9wdGlvbnMiIiIKKyAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9UTFN2MSwgVHJ1ZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9UTFN2MSwgVHJ1ZSwgc3NsLkNFUlRfT1BUSU9OQUwpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfVExTdjEsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQorICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MicpOgorICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9TU0x2MiwgRmFsc2UpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlKQorCisgICAgICAgIGRlZiB0ZXN0X3N0YXJ0dGxzKHNlbGYpOgorICAgICAgICAgICAgIiIiU3dpdGNoaW5nIGZyb20gY2xlYXIgdGV4dCB0byBlbmNyeXB0ZWQgYW5kIGJhY2sgYWdhaW4uIiIiCisgICAgICAgICAgICBtc2dzID0gKCJtc2cgMSIsICJNU0cgMiIsICJTVEFSVFRMUyIsICJNU0cgMyIsICJtc2cgNCIsICJFTkRUTFMiLCAibXNnIDUiLCAibXNnIDYiKQorCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoQ0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c3NsLlBST1RPQ09MX1RMU3YxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dGxzX3NlcnZlcj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25jaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgIHdyYXBwZWQgPSBGYWxzZQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgICAgIHMuc2V0YmxvY2tpbmcoMSkKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgICAgIGZvciBpbmRhdGEgaW4gbXNnczoKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgY2xpZW50OiAgc2VuZGluZyAlcy4uLlxuIiAlIHJlcHIoaW5kYXRhKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgd3JhcHBlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4ud3JpdGUoaW5kYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YSA9IGNvbm4ucmVhZCgpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzLnNlbmQoaW5kYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YSA9IHMucmVjdigxMDI0KQorICAgICAgICAgICAgICAgICAgICBpZiAoaW5kYXRhID09ICJTVEFSVFRMUyIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRhLnN0cmlwKCkubG93ZXIoKS5zdGFydHN3aXRoKCJvayIpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgU1RBUlRUTFMgb2ssIHN3aXRjaCB0byBzZWN1cmUgbW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBjbGllbnQ6ICByZWFkICVzIGZyb20gc2VydmVyLCBzdGFydGluZyBUTFMuLi5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSByZXByKG91dGRhdGEpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29ubiA9IHNzbC53cmFwX3NvY2tldChzLCBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbGlmIChpbmRhdGEgPT0gIkVORFRMUyIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRhLnN0cmlwKCkubG93ZXIoKS5zdGFydHN3aXRoKCJvayIpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRU5EVExTIG9rLCBzd2l0Y2ggYmFjayB0byBjbGVhciB0ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGNsaWVudDogIHJlYWQgJXMgZnJvbSBzZXJ2ZXIsIGVuZGluZyBUTFMuLi5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSByZXByKG91dGRhdGEpKQorICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGNvbm4udW53cmFwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBjbGllbnQ6ICByZWFkICVzIGZyb20gc2VydmVyXG4iICUgcmVwcihvdXRkYXRhKSkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIGNsaWVudDogIGNsb3NpbmcgY29ubmVjdGlvbi5cbiIpCisgICAgICAgICAgICAgICAgaWYgd3JhcHBlZDoKKyAgICAgICAgICAgICAgICAgICAgY29ubi53cml0ZSgib3ZlclxuIikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzLnNlbmQoIm92ZXJcbiIpCisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgZGVmIHRlc3Rfc29ja2V0c2VydmVyKHNlbGYpOgorICAgICAgICAgICAgIiIiVXNpbmcgYSBTb2NrZXRTZXJ2ZXIgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgU1NMIGNvbm5lY3Rpb25zLiIiIgorICAgICAgICAgICAgc2VydmVyID0gU29ja2V0U2VydmVySFRUUFNTZXJ2ZXIoQ0VSVEZJTEUpCisgICAgICAgICAgICBmbGFnID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgICAgIHNlcnZlci5zdGFydChmbGFnKQorICAgICAgICAgICAgIyB3YWl0IGZvciBpdCB0byBzdGFydAorICAgICAgICAgICAgZmxhZy53YWl0KCkKKyAgICAgICAgICAgICMgdHJ5IHRvIGNvbm5lY3QKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihDRVJURklMRSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZDEgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgIGQyID0gJycKKyAgICAgICAgICAgICAgICAjIG5vdyBmZXRjaCB0aGUgc2FtZSBkYXRhIGZyb20gdGhlIEhUVFBTIHNlcnZlcgorICAgICAgICAgICAgICAgIHVybCA9ICdodHRwczovLzEyNy4wLjAuMTolZC8lcycgJSAoCisgICAgICAgICAgICAgICAgICAgIHNlcnZlci5wb3J0LCBvcy5wYXRoLnNwbGl0KENFUlRGSUxFKVsxXSkKKyAgICAgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgICAgIGYgPSB1cmxsaWIudXJsb3Blbih1cmwpCisgICAgICAgICAgICAgICAgZGxlbiA9IGYuaW5mbygpLmdldGhlYWRlcigiY29udGVudC1sZW5ndGgiKQorICAgICAgICAgICAgICAgIGlmIGRsZW4gYW5kIChpbnQoZGxlbikgPiAwKToKKyAgICAgICAgICAgICAgICAgICAgZDIgPSBmLnJlYWQoaW50KGRsZW4pKQorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBjbGllbnQ6IHJlYWQgJWQgYnl0ZXMgZnJvbSByZW1vdGUgc2VydmVyICclcydcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChsZW4oZDIpLCBzZXJ2ZXIpKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIGQyKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZXJ2ZXIuc3RvcCgpCisgICAgICAgICAgICAgICAgc2VydmVyLmpvaW4oKQorCisgICAgICAgIGRlZiB0ZXN0X3dyYXBwZWRfYWNjZXB0KHNlbGYpOgorICAgICAgICAgICAgIiIiQ2hlY2sgdGhlIGFjY2VwdCgpIG1ldGhvZCBvbiBTU0wgc29ja2V0cy4iIiIKKyAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHNlcnZlcl9wYXJhbXNfdGVzdChDRVJURklMRSwgc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VSVEZJTEUsIENFUlRGSUxFLCBzc2wuUFJPVE9DT0xfU1NMdjIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcF9hY2NlcHRpbmdfc29ja2V0PVRydWUpCisKKyAgICAgICAgZGVmIHRlc3RfYXN5bmNvcmVfc2VydmVyKHNlbGYpOgorICAgICAgICAgICAgIiIiQ2hlY2sgdGhlIGV4YW1wbGUgYXN5bmNvcmUgaW50ZWdyYXRpb24uIiIiCisgICAgICAgICAgICBpbmRhdGEgPSAiVEVTVCBNRVNTQUdFIG9mIG1peGVkIGNhc2VcbiIKKworICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgc2VydmVyID0gQXN5bmNvcmVFY2hvU2VydmVyKENFUlRGSUxFKQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpCisgICAgICAgICAgICAgICAgcy5jb25uZWN0KCgnMTI3LjAuMC4xJywgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgIiBjbGllbnQ6ICBzZW5kaW5nICVzLi4uXG4iICUgKHJlcHIoaW5kYXRhKSkpCisgICAgICAgICAgICAgICAgcy53cml0ZShpbmRhdGEpCisgICAgICAgICAgICAgICAgb3V0ZGF0YSA9IHMucmVhZCgpCisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBjbGllbnQ6ICByZWFkICVzXG4iICUgcmVwcihvdXRkYXRhKSkKKyAgICAgICAgICAgICAgICBpZiBvdXRkYXRhICE9IGluZGF0YS5sb3dlcigpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoCisgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIGRhdGEgPDwlcz4+ICglZCkgcmVjZWl2ZWQ7IGV4cGVjdGVkIDw8JXM+PiAoJWQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAlIChvdXRkYXRhWzptaW4obGVuKG91dGRhdGEpLDIwKV0sIGxlbihvdXRkYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGF0YVs6bWluKGxlbihpbmRhdGEpLDIwKV0ubG93ZXIoKSwgbGVuKGluZGF0YSkpKQorICAgICAgICAgICAgICAgIHMud3JpdGUoIm92ZXJcbiIpCisgICAgICAgICAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBjbGllbnQ6ICBjbG9zaW5nIGNvbm5lY3Rpb24uXG4iKQorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgIGRlZiB0ZXN0X3JlY3Zfc2VuZChzZWxmKToKKyAgICAgICAgICAgICIiIlRlc3QgcmVjdigpLCBzZW5kKCkgYW5kIGZyaWVuZHMuIiIiCisgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisKKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihDRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0cmVxcz1zc2wuQ0VSVF9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9UTFN2MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNlcnRzPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25jaGF0dHk9RmFsc2UpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Q0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1DRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgICMgaGVscGVyIG1ldGhvZHMgZm9yIHN0YW5kYXJkaXNpbmcgcmVjdiogbWV0aG9kIHNpZ25hdHVyZXMKKyAgICAgICAgICAgICAgICBkZWYgX3JlY3ZfaW50bygpOgorICAgICAgICAgICAgICAgICAgICBiID0gYnl0ZWFycmF5KCJcMCIqMTAwKQorICAgICAgICAgICAgICAgICAgICBjb3VudCA9IHMucmVjdl9pbnRvKGIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiWzpjb3VudF0KKworICAgICAgICAgICAgICAgIGRlZiBfcmVjdmZyb21faW50bygpOgorICAgICAgICAgICAgICAgICAgICBiID0gYnl0ZWFycmF5KCJcMCIqMTAwKQorICAgICAgICAgICAgICAgICAgICBjb3VudCwgYWRkciA9IHMucmVjdmZyb21faW50byhiKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYls6Y291bnRdCisKKyAgICAgICAgICAgICAgICAjIChuYW1lLCBtZXRob2QsIHdoZXRoZXIgdG8gZXhwZWN0IHN1Y2Nlc3MsICphcmdzKQorICAgICAgICAgICAgICAgIHNlbmRfbWV0aG9kcyA9IFsKKyAgICAgICAgICAgICAgICAgICAgKCdzZW5kJywgcy5zZW5kLCBUcnVlLCBbXSksCisgICAgICAgICAgICAgICAgICAgICgnc2VuZHRvJywgcy5zZW5kdG8sIEZhbHNlLCBbInNvbWUuYWRkcmVzcyJdKSwKKyAgICAgICAgICAgICAgICAgICAgKCdzZW5kYWxsJywgcy5zZW5kYWxsLCBUcnVlLCBbXSksCisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIHJlY3ZfbWV0aG9kcyA9IFsKKyAgICAgICAgICAgICAgICAgICAgKCdyZWN2Jywgcy5yZWN2LCBUcnVlLCBbXSksCisgICAgICAgICAgICAgICAgICAgICgncmVjdmZyb20nLCBzLnJlY3Zmcm9tLCBGYWxzZSwgWyJzb21lLmFkZHJlc3MiXSksCisgICAgICAgICAgICAgICAgICAgICgncmVjdl9pbnRvJywgX3JlY3ZfaW50bywgVHJ1ZSwgW10pLAorICAgICAgICAgICAgICAgICAgICAoJ3JlY3Zmcm9tX2ludG8nLCBfcmVjdmZyb21faW50bywgRmFsc2UsIFtdKSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgZGF0YV9wcmVmaXggPSB1IlBSRUZJWF8iCisKKyAgICAgICAgICAgICAgICBmb3IgbWV0aF9uYW1lLCBzZW5kX21ldGgsIGV4cGVjdF9zdWNjZXNzLCBhcmdzIGluIHNlbmRfbWV0aG9kczoKKyAgICAgICAgICAgICAgICAgICAgaW5kYXRhID0gZGF0YV9wcmVmaXggKyBtZXRoX25hbWUKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF9tZXRoKGluZGF0YS5lbmNvZGUoJ0FTQ0lJJywgJ3N0cmljdCcpLCAqYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGRhdGEgPSBzLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YSA9IG91dGRhdGEuZGVjb2RlKCdBU0NJSScsICdzdHJpY3QnKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3V0ZGF0YSAhPSBpbmRhdGEubG93ZXIoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaGlsZSBzZW5kaW5nIHdpdGggPDwlcz4+IGJhZCBkYXRhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjw8JXI+PiAoJWQpIHJlY2VpdmVkOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCA8PCVyPj4gKCVkKVxuIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhfbmFtZSwgb3V0ZGF0YVs6MjBdLCBsZW4ob3V0ZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRhdGFbOjIwXSwgbGVuKGluZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdF9zdWNjZXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBzZW5kIHdpdGggbWV0aG9kIDw8JXM+PjsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgdG8gc3VjY2VlZC5cbiIgJSAobWV0aF9uYW1lLCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3RyKGUpLnN0YXJ0c3dpdGgobWV0aF9uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNZXRob2QgPDwlcz4+IGZhaWxlZCB3aXRoIHVuZXhwZWN0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uIG1lc3NhZ2U6ICVzXG4iICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aF9uYW1lLCBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgICAgICBmb3IgbWV0aF9uYW1lLCByZWN2X21ldGgsIGV4cGVjdF9zdWNjZXNzLCBhcmdzIGluIHJlY3ZfbWV0aG9kczoKKyAgICAgICAgICAgICAgICAgICAgaW5kYXRhID0gZGF0YV9wcmVmaXggKyBtZXRoX25hbWUKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcy5zZW5kKGluZGF0YS5lbmNvZGUoJ0FTQ0lJJywgJ3N0cmljdCcpKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YSA9IHJlY3ZfbWV0aCgqYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGRhdGEgPSBvdXRkYXRhLmRlY29kZSgnQVNDSUknLCAnc3RyaWN0JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG91dGRhdGEgIT0gaW5kYXRhLmxvd2VyKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2hpbGUgcmVjZWl2aW5nIHdpdGggPDwlcz4+IGJhZCBkYXRhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjw8JXI+PiAoJWQpIHJlY2VpdmVkOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCA8PCVyPj4gKCVkKVxuIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhfbmFtZSwgb3V0ZGF0YVs6MjBdLCBsZW4ob3V0ZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRhdGFbOjIwXSwgbGVuKGluZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdF9zdWNjZXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byByZWNlaXZlIHdpdGggbWV0aG9kIDw8JXM+PjsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgdG8gc3VjY2VlZC5cbiIgJSAobWV0aF9uYW1lLCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3RyKGUpLnN0YXJ0c3dpdGgobWV0aF9uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNZXRob2QgPDwlcz4+IGZhaWxlZCB3aXRoIHVuZXhwZWN0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uIG1lc3NhZ2U6ICVzXG4iICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aF9uYW1lLCBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnN1bWUgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgcy5yZWFkKCkKKworICAgICAgICAgICAgICAgIHMud3JpdGUoIm92ZXJcbiIuZW5jb2RlKCJBU0NJSSIsICJzdHJpY3QiKSkKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgICAgICBkZWYgdGVzdF9oYW5kc2hha2VfdGltZW91dChzZWxmKToKKyAgICAgICAgICAgICMgSXNzdWUgIzUxMDM6IFNTTCBoYW5kc2hha2UgbXVzdCByZXNwZWN0IHRoZSBzb2NrZXQgdGltZW91dAorICAgICAgICAgICAgc2VydmVyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgICAgIGhvc3QgPSAiMTI3LjAuMC4xIgorICAgICAgICAgICAgcG9ydCA9IHRlc3Rfc3VwcG9ydC5iaW5kX3BvcnQoc2VydmVyKQorICAgICAgICAgICAgc3RhcnRlZCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgICAgICBmaW5pc2ggPSBGYWxzZQorCisgICAgICAgICAgICBkZWYgc2VydmUoKToKKyAgICAgICAgICAgICAgICBzZXJ2ZXIubGlzdGVuKDUpCisgICAgICAgICAgICAgICAgc3RhcnRlZC5zZXQoKQorICAgICAgICAgICAgICAgIGNvbm5zID0gW10KKyAgICAgICAgICAgICAgICB3aGlsZSBub3QgZmluaXNoOgorICAgICAgICAgICAgICAgICAgICByLCB3LCBlID0gc2VsZWN0LnNlbGVjdChbc2VydmVyXSwgW10sIFtdLCAwLjEpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlcnZlciBpbiByOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBMZXQgdGhlIHNvY2tldCBoYW5nIGFyb3VuZCByYXRoZXIgdGhhbiBoYXZpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaXQgY2xvc2VkIGJ5IGdhcmJhZ2UgY29sbGVjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5zLmFwcGVuZChzZXJ2ZXIuYWNjZXB0KClbMF0pCisKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZXJ2ZSkKKyAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgc3RhcnRlZC53YWl0KCkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgYyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICAgICAgICAgIGMuc2V0dGltZW91dCgwLjIpCisgICAgICAgICAgICAgICAgICAgIGMuY29ubmVjdCgoaG9zdCwgcG9ydCkpCisgICAgICAgICAgICAgICAgICAgICMgV2lsbCBhdHRlbXB0IGhhbmRzaGFrZSBhbmQgdGltZSBvdXQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoc3NsLlNTTEVycm9yLCAidGltZWQgb3V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0LCBjKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGMuY2xvc2UoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgYyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICAgICAgICAgIGMuc2V0dGltZW91dCgwLjIpCisgICAgICAgICAgICAgICAgICAgIGMgPSBzc2wud3JhcF9zb2NrZXQoYykKKyAgICAgICAgICAgICAgICAgICAgIyBXaWxsIGF0dGVtcHQgaGFuZHNoYWtlIGFuZCB0aW1lIG91dAorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChzc2wuU1NMRXJyb3IsICJ0aW1lZCBvdXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmNvbm5lY3QsIChob3N0LCBwb3J0KSkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBjLmNsb3NlKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZmluaXNoID0gVHJ1ZQorICAgICAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgICAgICBkZWYgdGVzdF9kZWZhdWx0X2NpcGhlcnMoc2VsZik6CisgICAgICAgICAgICB3aXRoIFRocmVhZGVkRWNob1NlcnZlcihDRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9TU0x2MjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9RmFsc2UpIGFzIHNlcnZlcjoKKyAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAjIEZvcmNlIGEgc2V0IG9mIHdlYWsgY2lwaGVycyBvbiBvdXIgY2xpZW50IHNvY2tldAorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9TU0x2MjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcnM9IkRFUyIpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJubyBERVMgY2lwaGVyIGF2YWlsYWJsZSIpCisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKE9TRXJyb3IsIHNzbC5TU0xFcnJvcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJubyBzaGFyZWQgY2lwaGVyIiwgc3RyKHNlcnZlci5jb25uX2Vycm9yc1swXSkpCisKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPUZhbHNlKToKKyAgICBnbG9iYWwgQ0VSVEZJTEUsIFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCwgTk9LSUFDRVJUCisgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleWNlcnQucGVtIikKKyAgICBTVk5fUFlUSE9OX09SR19ST09UX0NFUlQgPSBvcy5wYXRoLmpvaW4oCisgICAgICAgIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLAorICAgICAgICAiaHR0cHNfc3ZuX3B5dGhvbl9vcmdfcm9vdC5wZW0iKQorICAgIE5PS0lBQ0VSVCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5va2lhLnBlbSIpCisKKyAgICBpZiAobm90IG9zLnBhdGguZXhpc3RzKENFUlRGSUxFKSBvcgorICAgICAgICBub3Qgb3MucGF0aC5leGlzdHMoU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUKSBvcgorICAgICAgICBub3Qgb3MucGF0aC5leGlzdHMoTk9LSUFDRVJUKSk6CisgICAgICAgIHJhaXNlIHRlc3Rfc3VwcG9ydC5UZXN0RmFpbGVkKCJDYW4ndCByZWFkIGNlcnRpZmljYXRlIGZpbGVzISIpCisKKyAgICB0ZXN0cyA9IFtCYXNpY1Rlc3RzLCBCYXNpY1NvY2tldFRlc3RzXQorCisgICAgaWYgdGVzdF9zdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoJ25ldHdvcmsnKToKKyAgICAgICAgdGVzdHMuYXBwZW5kKE5ldHdvcmtlZFRlc3RzKQorCisgICAgaWYgX2hhdmVfdGhyZWFkczoKKyAgICAgICAgdGhyZWFkX2luZm8gPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKyAgICAgICAgaWYgdGhyZWFkX2luZm8gYW5kIHRlc3Rfc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCduZXR3b3JrJyk6CisgICAgICAgICAgICB0ZXN0cy5hcHBlbmQoVGhyZWFkZWRUZXN0cykKKworICAgIHRyeToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisgICAgZmluYWxseToKKyAgICAgICAgaWYgX2hhdmVfdGhyZWFkczoKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqdGhyZWFkX2luZm8pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0YXJ0ZmlsZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0YXJ0ZmlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGNlOGZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3RhcnRmaWxlLnB5CkBAIC0wLDAgKzEsNDUgQEAKKyMgUmlkaWN1bG91c2x5IHNpbXBsZSB0ZXN0IG9mIHRoZSBvcy5zdGFydGZpbGUgZnVuY3Rpb24gZm9yIFdpbmRvd3MuCisjCisjIGVtcHR5LnZicyBpcyBhbiBlbXB0eSBmaWxlIChleGNlcHQgZm9yIGEgY29tbWVudCksIHdoaWNoIGRvZXMKKyMgbm90aGluZyB3aGVuIHJ1biB3aXRoIGNzY3JpcHQgb3Igd3NjcmlwdC4KKyMKKyMgQSBwb3NzaWJsZSBpbXByb3ZlbWVudCB3b3VsZCBiZSB0byBoYXZlIGVtcHR5LnZicyBkbyBzb21ldGhpbmcgdGhhdAorIyB3ZSBjYW4gZGV0ZWN0IGhlcmUsIHRvIG1ha2Ugc3VyZSB0aGF0IG5vdCBvbmx5IHRoZSBvcy5zdGFydGZpbGUoKQorIyBjYWxsIHN1Y2NlZWRlZCwgYnV0IGFsc28gdGhlIHRoZSBzY3JpcHQgYWN0dWFsbHkgaGFzIHJ1bi4KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IG9zCitmcm9tIG9zIGltcG9ydCBwYXRoCitmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCisKK3N0YXJ0ZmlsZSA9IHRlc3Rfc3VwcG9ydC5nZXRfYXR0cmlidXRlKG9zLCAnc3RhcnRmaWxlJykKKworCitjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfbm9uZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHN0YXJ0ZmlsZSwgIm5vbmV4aXN0aW5nLnZicyIpCisKKyAgICBkZWYgdGVzdF9ub25leGlzdGluZ191KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzdGFydGZpbGUsIHUibm9uZXhpc3RpbmcudmJzIikKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBlbXB0eSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUoX19maWxlX18pLCAiZW1wdHkudmJzIikKKyAgICAgICAgc3RhcnRmaWxlKGVtcHR5KQorICAgICAgICBzdGFydGZpbGUoZW1wdHksICJvcGVuIikKKyAgICAgICAgIyBHaXZlIHRoZSBjaGlsZCBwcm9jZXNzIHNvbWUgdGltZSB0byBleGl0IGJlZm9yZSB3ZSBmaW5pc2guCisgICAgICAgICMgT3RoZXJ3aXNlIHRoZSBjbGVhbnVwIGNvZGUgd2lsbCBub3QgYmUgYWJsZSB0byBkZWxldGUgdGhlIGN3ZCwKKyAgICAgICAgIyBiZWNhdXNlIGl0IGlzIHN0aWxsIGluIHVzZS4KKyAgICAgICAgc2xlZXAoMC4xKQorCisgICAgZGVmIHRlc3RfZW1wdHlfdShzZWxmKToKKyAgICAgICAgZW1wdHkgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgImVtcHR5LnZicyIpCisgICAgICAgIHN0YXJ0ZmlsZSh1bmljb2RlKGVtcHR5LCAibWJjcyIpKQorICAgICAgICBzdGFydGZpbGUodW5pY29kZShlbXB0eSwgIm1iY3MiKSwgIm9wZW4iKQorICAgICAgICBzbGVlcCgwLjEpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RDYXNlKQorCitpZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3RyLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3RyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNzA0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zdHIucHkKQEAgLTAsMCArMSw0NjEgQEAKKworaW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIHN0cmluZ190ZXN0cworCisKK2NsYXNzIFN0clRlc3QoCisgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QsCisgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LAorICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVzZXJTdHJpbmdUZXN0LAorICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVUZXN0LAorICAgICk6CisKKyAgICB0eXBlMnRlc3QgPSBzdHIKKworICAgICMgV2UgZG9uJ3QgbmVlZCB0byBwcm9wYWdhdGUgdG8gc3RyCisgICAgZGVmIGZpeHR5cGUoc2VsZiwgb2JqKToKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIHRlc3RfYmFzaWNfY3JlYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKCcnKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKDApLCAnMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKDBMKSwgJzAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cigoKSksICcoKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFtdKSwgJ1tdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoe30pLCAne30nKQorICAgICAgICBhID0gW10KKyAgICAgICAgYS5hcHBlbmQoYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYSksICdbWy4uLl1dJykKKyAgICAgICAgYSA9IHt9CisgICAgICAgIGFbMF0gPSBhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGEpLCAnezA6IHsuLi59fScpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0aW5nKHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QudGVzdF9mb3JtYXR0aW5nKHNlbGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICclYycuX19tb2RfXywgMHgxMjM0KQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9mb3JtYXR0aW5nX2h1Z2VfcHJlY2lzaW9uKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgSU5UX01BWAorICAgICAgICBmb3JtYXRfc3RyaW5nID0gIiUue31mIi5mb3JtYXQoSU5UX01BWCArIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICByZXN1bHQgPSBmb3JtYXRfc3RyaW5nICUgMi4zNAorCisgICAgZGVmIHRlc3RfZm9ybWF0dGluZ19odWdlX3dpZHRoKHNlbGYpOgorICAgICAgICBmb3JtYXRfc3RyaW5nID0gIiV7fWYiLmZvcm1hdChzeXMubWF4c2l6ZSArIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICByZXN1bHQgPSBmb3JtYXRfc3RyaW5nICUgMi4zNAorCisgICAgZGVmIHRlc3RfY29udmVyc2lvbihzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgX19zdHJfXygpIGJlaGF2ZXMgcHJvcGVybHkKKyAgICAgICAgY2xhc3MgRm9vMDoKKyAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdSJmb28iCisKKyAgICAgICAgY2xhc3MgRm9vMToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiZm9vIgorCisgICAgICAgIGNsYXNzIEZvbzIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiZm9vIgorCisgICAgICAgIGNsYXNzIEZvbzMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1ImZvbyIKKworICAgICAgICBjbGFzcyBGb280KHVuaWNvZGUpOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUiZm9vIgorCisgICAgICAgIGNsYXNzIEZvbzUoc3RyKToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1ImZvbyIKKworICAgICAgICBjbGFzcyBGb282KHN0cik6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImZvb3MiCisKKyAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdSJmb291IgorCisgICAgICAgIGNsYXNzIEZvbzcodW5pY29kZSk6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImZvb3MiCisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUiZm9vdSIKKworICAgICAgICBjbGFzcyBGb284KHN0cik6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGNvbnRlbnQ9IiIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdHIuX19uZXdfXyhjbHMsIDIqY29udGVudCkKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgY2xhc3MgRm9vOShzdHIpOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciCisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJub3QgdW5pY29kZSIKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKEZvbzAoKSkuc3RhcnRzd2l0aCgiPCIpKSAjIHRoaXMgaXMgZGlmZmVyZW50IGZyb20gX191bmljb2RlX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vMSgpKSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzIoKSksICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb28zKCkpLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vNCgiYmFyIikpLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vNSgiYmFyIikpLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vNigiYmFyIikpLCAiZm9vcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzcoImJhciIpKSwgImZvb3MiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb284KCJmb28iKSksICJmb29mb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb285KCJmb28iKSksICJzdHJpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoRm9vOSgiZm9vIikpLCB1Im5vdCB1bmljb2RlIikKKworICAgIGRlZiB0ZXN0X2V4cGFuZHRhYnNfb3ZlcmZsb3dzX2dyYWNlZnVsbHkoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IG9ubHkgYWZmZWN0cyAzMi1iaXQgcGxhdGZvcm1zIGJlY2F1c2UgZXhwYW5kdGFicyBjYW4gb25seSB0YWtlCisgICAgICAgICMgYW4gaW50IGFzIHRoZSBtYXggdmFsdWUsIG5vdCBhIDY0LWJpdCBDIGxvbmcuICBJZiBleHBhbmR0YWJzIGlzIGNoYW5nZWQKKyAgICAgICAgIyB0byB0YWtlIGEgNjQtYml0IGxvbmcsIHRoaXMgdGVzdCBzaG91bGQgYXBwbHkgdG8gYWxsIHBsYXRmb3Jtcy4KKyAgICAgICAgaWYgc3lzLm1heGludCA+ICgxIDw8IDMyKSBvciBzdHJ1Y3QuY2FsY3NpemUoJ1AnKSAhPSA0OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICd0XHR0XHQnLmV4cGFuZHRhYnMsIHN5cy5tYXhpbnQpCisKKyAgICBkZWYgdGVzdF9fZm9ybWF0X18oc2VsZik6CisgICAgICAgIGRlZiB0ZXN0KHZhbHVlLCBmb3JtYXQsIGV4cGVjdGVkKToKKyAgICAgICAgICAgICMgdGVzdCBib3RoIHdpdGggYW5kIHdpdGhvdXQgdGhlIHRyYWlsaW5nICdzJworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZS5fX2Zvcm1hdF9fKGZvcm1hdCksIGV4cGVjdGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZS5fX2Zvcm1hdF9fKGZvcm1hdCArICdzJyksIGV4cGVjdGVkKQorCisgICAgICAgIHRlc3QoJycsICcnLCAnJykKKyAgICAgICAgdGVzdCgnYWJjJywgJycsICdhYmMnKQorICAgICAgICB0ZXN0KCdhYmMnLCAnLjMnLCAnYWJjJykKKyAgICAgICAgdGVzdCgnYWInLCAnLjMnLCAnYWInKQorICAgICAgICB0ZXN0KCdhYmNkZWYnLCAnLjMnLCAnYWJjJykKKyAgICAgICAgdGVzdCgnYWJjZGVmJywgJy4wJywgJycpCisgICAgICAgIHRlc3QoJ2FiYycsICczLjMnLCAnYWJjJykKKyAgICAgICAgdGVzdCgnYWJjJywgJzIuMycsICdhYmMnKQorICAgICAgICB0ZXN0KCdhYmMnLCAnMi4yJywgJ2FiJykKKyAgICAgICAgdGVzdCgnYWJjJywgJzMuMicsICdhYiAnKQorICAgICAgICB0ZXN0KCdyZXN1bHQnLCAneDwwJywgJ3Jlc3VsdCcpCisgICAgICAgIHRlc3QoJ3Jlc3VsdCcsICd4PDUnLCAncmVzdWx0JykKKyAgICAgICAgdGVzdCgncmVzdWx0JywgJ3g8NicsICdyZXN1bHQnKQorICAgICAgICB0ZXN0KCdyZXN1bHQnLCAneDw3JywgJ3Jlc3VsdHgnKQorICAgICAgICB0ZXN0KCdyZXN1bHQnLCAneDw4JywgJ3Jlc3VsdHh4JykKKyAgICAgICAgdGVzdCgncmVzdWx0JywgJyA8NycsICdyZXN1bHQgJykKKyAgICAgICAgdGVzdCgncmVzdWx0JywgJzw3JywgJ3Jlc3VsdCAnKQorICAgICAgICB0ZXN0KCdyZXN1bHQnLCAnPjcnLCAnIHJlc3VsdCcpCisgICAgICAgIHRlc3QoJ3Jlc3VsdCcsICc+OCcsICcgIHJlc3VsdCcpCisgICAgICAgIHRlc3QoJ3Jlc3VsdCcsICdeOCcsICcgcmVzdWx0ICcpCisgICAgICAgIHRlc3QoJ3Jlc3VsdCcsICdeOScsICcgcmVzdWx0ICAnKQorICAgICAgICB0ZXN0KCdyZXN1bHQnLCAnXjEwJywgJyAgcmVzdWx0ICAnKQorICAgICAgICB0ZXN0KCdhJywgJzEwMDAwJywgJ2EnICsgJyAnICogOTk5OSkKKyAgICAgICAgdGVzdCgnJywgJzEwMDAwJywgJyAnICogMTAwMDApCisgICAgICAgIHRlc3QoJycsICcxMDAwMDAwMCcsICcgJyAqIDEwMDAwMDAwKQorCisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmZvcm1hdCgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYScuZm9ybWF0KCksICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWInLmZvcm1hdCgpLCAnYWInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhe3snLmZvcm1hdCgpLCAnYXsnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhfX0nLmZvcm1hdCgpLCAnYX0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7e2InLmZvcm1hdCgpLCAne2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd9fWInLmZvcm1hdCgpLCAnfWInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhe3tiJy5mb3JtYXQoKSwgJ2F7YicpCisKKyAgICAgICAgIyBleGFtcGxlcyBmcm9tIHRoZSBQRVA6CisgICAgICAgIGltcG9ydCBkYXRldGltZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJNeSBuYW1lIGlzIHswfSIuZm9ybWF0KCdGcmVkJyksICJNeSBuYW1lIGlzIEZyZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJNeSBuYW1lIGlzIHswW25hbWVdfSIuZm9ybWF0KGRpY3QobmFtZT0nRnJlZCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiTXkgbmFtZSBpcyBGcmVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiTXkgbmFtZSBpcyB7MH0gOi17e319Ii5mb3JtYXQoJ0ZyZWQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiTXkgbmFtZSBpcyBGcmVkIDote30iKQorCisgICAgICAgIGQgPSBkYXRldGltZS5kYXRlKDIwMDcsIDgsIDE4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJUaGUgeWVhciBpcyB7MC55ZWFyfSIuZm9ybWF0KGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgeWVhciBpcyAyMDA3IikKKworICAgICAgICAjIGNsYXNzZXMgd2UnbGwgdXNlIGZvciB0ZXN0aW5nCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeD0xMDApOgorICAgICAgICAgICAgICAgIHNlbGYuX3ggPSB4CisgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBzcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlYworCisgICAgICAgIGNsYXNzIEQ6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cihzZWxmLngpCisKKyAgICAgICAgIyBjbGFzcyB3aXRoIF9fc3RyX18sIGJ1dCBubyBfX2Zvcm1hdF9fCisgICAgICAgIGNsYXNzIEU6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdFKCcgKyBzZWxmLnggKyAnKScKKworICAgICAgICAjIGNsYXNzIHdpdGggX19yZXByX18sIGJ1dCBubyBfX2Zvcm1hdF9fIG9yIF9fc3RyX18KKyAgICAgICAgY2xhc3MgRjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdGKCcgKyBzZWxmLnggKyAnKScKKworICAgICAgICAjIGNsYXNzIHdpdGggX19mb3JtYXRfXyB0aGF0IGZvcndhcmRzIHRvIHN0cmluZywgZm9yIHNvbWUgZm9ybWF0X3NwZWMncworICAgICAgICBjbGFzcyBHOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHNlbGYueCA9IHgKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5nIGlzICIgKyBzZWxmLngKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKToKKyAgICAgICAgICAgICAgICBpZiBmb3JtYXRfc3BlYyA9PSAnZCc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnRygnICsgc2VsZi54ICsgJyknCisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKQorCisgICAgICAgICMgY2xhc3MgdGhhdCByZXR1cm5zIGEgYmFkIHR5cGUgZnJvbSBfX2Zvcm1hdF9fCisgICAgICAgIGNsYXNzIEg6CisgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDEuMAorCisgICAgICAgIGNsYXNzIEkoZGF0ZXRpbWUuZGF0ZSk6CisgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3RyZnRpbWUoZm9ybWF0X3NwZWMpCisKKyAgICAgICAgY2xhc3MgSihpbnQpOgorICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQuX19mb3JtYXRfXyhzZWxmICogMiwgZm9ybWF0X3NwZWMpCisKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmZvcm1hdCgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWJjJy5mb3JtYXQoKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swfScuZm9ybWF0KCdhYmMnKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOn0nLmZvcm1hdCgnYWJjJyksICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdYezB9Jy5mb3JtYXQoJ2FiYycpLCAnWGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swfVgnLmZvcm1hdCgnYWJjJyksICdhYmNYJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnWHswfVknLmZvcm1hdCgnYWJjJyksICdYYWJjWScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3sxfScuZm9ybWF0KDEsICdhYmMnKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1h7MX0nLmZvcm1hdCgxLCAnYWJjJyksICdYYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezF9WCcuZm9ybWF0KDEsICdhYmMnKSwgJ2FiY1gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdYezF9WScuZm9ybWF0KDEsICdhYmMnKSwgJ1hhYmNZJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezB9Jy5mb3JtYXQoLTE1KSwgJy0xNScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swfXsxfScuZm9ybWF0KC0xNSwgJ2FiYycpLCAnLTE1YWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezB9WHsxfScuZm9ybWF0KC0xNSwgJ2FiYycpLCAnLTE1WGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t7Jy5mb3JtYXQoKSwgJ3snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd9fScuZm9ybWF0KCksICd9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne3t9fScuZm9ybWF0KCksICd7fScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t7eH19Jy5mb3JtYXQoKSwgJ3t4fScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t7ezB9fX0nLmZvcm1hdCgxMjMpLCAnezEyM30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7e3t7MH19fX0nLmZvcm1hdCgpLCAne3swfX0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd9fXt7Jy5mb3JtYXQoKSwgJ317JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnfX14e3snLmZvcm1hdCgpLCAnfXh7JykKKworICAgICAgICAjIHdlaXJkIGZpZWxkIG5hbWVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInswW2Zvby1iYXJdfSIuZm9ybWF0KHsnZm9vLWJhcic6J2Jheid9KSwgJ2JheicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInswW2ZvbyBiYXJdfSIuZm9ybWF0KHsnZm9vIGJhcic6J2Jheid9KSwgJ2JheicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInswWyBdfSIuZm9ybWF0KHsnICc6M30pLCAnMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne2Zvby5feH0nLmZvcm1hdChmb289QygyMCkpLCAnMjAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MX17MH0nLmZvcm1hdChEKDEwKSwgRCgyMCkpLCAnMjAxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swLl94Lnh9Jy5mb3JtYXQoQyhEKCdhYmMnKSkpLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezBbMF19Jy5mb3JtYXQoWydhYmMnLCAnZGVmJ10pLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezBbMV19Jy5mb3JtYXQoWydhYmMnLCAnZGVmJ10pLCAnZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezBbMV1bMF19Jy5mb3JtYXQoWydhYmMnLCBbJ2RlZiddXSksICdkZWYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MFsxXVswXS54fScuZm9ybWF0KFsnYWJjJywgW0QoJ2RlZicpXV0pLCAnZGVmJykKKworICAgICAgICAjIHN0cmluZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6LjNzfScuZm9ybWF0KCdhYmMnKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOi4zc30nLmZvcm1hdCgnYWInKSwgJ2FiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6LjNzfScuZm9ybWF0KCdhYmNkZWYnKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOi4wc30nLmZvcm1hdCgnYWJjZGVmJyksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDozLjNzfScuZm9ybWF0KCdhYmMnKSwgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOjIuM3N9Jy5mb3JtYXQoJ2FiYycpLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6Mi4yc30nLmZvcm1hdCgnYWJjJyksICdhYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOjMuMnN9Jy5mb3JtYXQoJ2FiYycpLCAnYWIgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6eDwwc30nLmZvcm1hdCgncmVzdWx0JyksICdyZXN1bHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDp4PDVzfScuZm9ybWF0KCdyZXN1bHQnKSwgJ3Jlc3VsdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOng8NnN9Jy5mb3JtYXQoJ3Jlc3VsdCcpLCAncmVzdWx0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6eDw3c30nLmZvcm1hdCgncmVzdWx0JyksICdyZXN1bHR4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6eDw4c30nLmZvcm1hdCgncmVzdWx0JyksICdyZXN1bHR4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOiA8N3N9Jy5mb3JtYXQoJ3Jlc3VsdCcpLCAncmVzdWx0ICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOjw3c30nLmZvcm1hdCgncmVzdWx0JyksICdyZXN1bHQgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6PjdzfScuZm9ybWF0KCdyZXN1bHQnKSwgJyByZXN1bHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDo+OHN9Jy5mb3JtYXQoJ3Jlc3VsdCcpLCAnICByZXN1bHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpeOHN9Jy5mb3JtYXQoJ3Jlc3VsdCcpLCAnIHJlc3VsdCAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpeOXN9Jy5mb3JtYXQoJ3Jlc3VsdCcpLCAnIHJlc3VsdCAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjEwc30nLmZvcm1hdCgncmVzdWx0JyksICcgIHJlc3VsdCAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6MTAwMDB9Jy5mb3JtYXQoJ2EnKSwgJ2EnICsgJyAnICogOTk5OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6MTAwMDB9Jy5mb3JtYXQoJycpLCAnICcgKiAxMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6MTAwMDAwMDB9Jy5mb3JtYXQoJycpLCAnICcgKiAxMDAwMDAwMCkKKworICAgICAgICAjIGZvcm1hdCBzcGVjaWZpZXJzIGZvciB1c2VyIGRlZmluZWQgdHlwZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDphYmN9Jy5mb3JtYXQoQygpKSwgJ2FiYycpCisKKyAgICAgICAgIyAhciBhbmQgIXMgY29lcmNpb25zCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swIXN9Jy5mb3JtYXQoJ0hlbGxvJyksICdIZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swIXM6fScuZm9ybWF0KCdIZWxsbycpLCAnSGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MCFzOjE1fScuZm9ybWF0KCdIZWxsbycpLCAnSGVsbG8gICAgICAgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezAhczoxNXN9Jy5mb3JtYXQoJ0hlbGxvJyksICdIZWxsbyAgICAgICAgICAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MCFyfScuZm9ybWF0KCdIZWxsbycpLCAiJ0hlbGxvJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swIXI6fScuZm9ybWF0KCdIZWxsbycpLCAiJ0hlbGxvJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swIXJ9Jy5mb3JtYXQoRignSGVsbG8nKSksICdGKEhlbGxvKScpCisKKyAgICAgICAgIyB0ZXN0IGZhbGxiYWNrIHRvIG9iamVjdC5fX2Zvcm1hdF9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swfScuZm9ybWF0KHt9KSwgJ3t9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezB9Jy5mb3JtYXQoW10pLCAnW10nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MH0nLmZvcm1hdChbMV0pLCAnWzFdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezB9Jy5mb3JtYXQoRSgnZGF0YScpKSwgJ0UoZGF0YSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpkfScuZm9ybWF0KEcoJ2RhdGEnKSksICdHKGRhdGEpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezAhc30nLmZvcm1hdChHKCdkYXRhJykpLCAnc3RyaW5nIGlzIGRhdGEnKQorCisgICAgICAgIG1zZyA9ICdvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcgaXMgZGVwcmVjYXRlZCcKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKG1zZywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjEwfScuZm9ybWF0KEUoJ2RhdGEnKSksICcgRShkYXRhKSAgJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMHN9Jy5mb3JtYXQoRSgnZGF0YScpKSwgJyBFKGRhdGEpICAnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6PjE1c30nLmZvcm1hdChHKCdkYXRhJykpLCAnIHN0cmluZyBpcyBkYXRhJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7MDpkYXRlOiAlWS0lbS0lZH0iLmZvcm1hdChJKHllYXI9MjAwNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aD04LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheT0yNykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRlOiAyMDA3LTA4LTI3IikKKworICAgICAgICAjIHRlc3QgZGVyaXZpbmcgZnJvbSBhIGJ1aWx0aW4gdHlwZSBhbmQgb3ZlcnJpZGluZyBfX2Zvcm1hdF9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInswfSIuZm9ybWF0KEooMTApKSwgIjIwIikKKworCisgICAgICAgICMgc3RyaW5nIGZvcm1hdCBzcGVjaWZpZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOn0nLmZvcm1hdCgnYScpLCAnYScpCisKKyAgICAgICAgIyBjb21wdXRlZCBmb3JtYXQgc3BlY2lmaWVycworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7MDouezF9fSIuZm9ybWF0KCdoZWxsbyB3b3JsZCcsIDUpLCAnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7MDouezF9c30iLmZvcm1hdCgnaGVsbG8gd29ybGQnLCA1KSwgJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiezA6LntwcmVjaXNpb259c30iLmZvcm1hdCgnaGVsbG8gd29ybGQnLCBwcmVjaXNpb249NSksICdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInswOnt3aWR0aH0ue3ByZWNpc2lvbn1zfSIuZm9ybWF0KCdoZWxsbyB3b3JsZCcsIHdpZHRoPTEwLCBwcmVjaXNpb249NSksICdoZWxsbyAgICAgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiezA6e3dpZHRofS57cHJlY2lzaW9ufXN9Ii5mb3JtYXQoJ2hlbGxvIHdvcmxkJywgd2lkdGg9JzEwJywgcHJlY2lzaW9uPSc1JyksICdoZWxsbyAgICAgJykKKworICAgICAgICAjIHRlc3QgdmFyaW91cyBlcnJvcnMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgJ3snLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgJ30nLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgJ2F7Jy5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICdhfScuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAne2EnLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgJ31hJy5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsICd7MH0nLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgJ3sxfScuZm9ybWF0LCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsICAgJ3t4fScuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAifXsiLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInsiLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgIn0iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgImFiY3swOnt9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MCIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCAiezAufSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezAufSIuZm9ybWF0LCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCAiezBbfSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezBbfSIuZm9ybWF0LCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsICAgInswXX0iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswLltdfSIuZm9ybWF0LCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezAuLmZvb30iLmZvcm1hdCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswWzB9Ii5mb3JtYXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MFswOmZvb30iLmZvcm1hdCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsICAgIntjXX0iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInt7IHt7ezB9fSIuZm9ybWF0LCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezB9fSIuZm9ybWF0LCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgICAie2Zvb30iLmZvcm1hdCwgYmFyPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MCF4fSIuZm9ybWF0LCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezAhfSIuZm9ybWF0LCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezAhcnN9Ii5mb3JtYXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7IX0iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgIns6fSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCAiezpzfSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCAie30iLmZvcm1hdCkKKworICAgICAgICAjIGlzc3VlIDYwODkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswWzBdeH0iLmZvcm1hdCwgW05vbmVdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezBbMF0oMTApfSIuZm9ybWF0LCBbTm9uZV0pCisKKyAgICAgICAgIyBjYW4ndCBoYXZlIGEgcmVwbGFjZW1lbnQgb24gdGhlIGZpZWxkIG5hbWUgcG9ydGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICd7MFt7MX1dfScuZm9ybWF0LCAnYWJjZGVmZycsIDQpCisKKyAgICAgICAgIyBleGNlZWQgbWF4aW11bSByZWN1cnNpb24gZGVwdGgKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswOnsxOnsyfX19Ii5mb3JtYXQsICdhYmMnLCAncycsICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezA6ezE6ezI6ezM6ezQ6ezU6ezZ9fX19fX19Ii5mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcpCisKKyAgICAgICAgIyBzdHJpbmcgZm9ybWF0IHNwZWMgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MDotc30iLmZvcm1hdCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgIiIsICItIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswOj1zfSIuZm9ybWF0LCAnJykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9odWdlX3ByZWNpc2lvbihzZWxmKToKKyAgICAgICAgZm9ybWF0X3N0cmluZyA9ICIue31mIi5mb3JtYXQoc3lzLm1heHNpemUgKyAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0KDIuMzQsIGZvcm1hdF9zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfaHVnZV93aWR0aChzZWxmKToKKyAgICAgICAgZm9ybWF0X3N0cmluZyA9ICJ7fWYiLmZvcm1hdChzeXMubWF4c2l6ZSArIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICByZXN1bHQgPSBmb3JtYXQoMi4zNCwgZm9ybWF0X3N0cmluZykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9odWdlX2l0ZW1fbnVtYmVyKHNlbGYpOgorICAgICAgICBmb3JtYXRfc3RyaW5nID0gInt7e306LjZmfX0iLmZvcm1hdChzeXMubWF4c2l6ZSArIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICByZXN1bHQgPSBmb3JtYXRfc3RyaW5nLmZvcm1hdCgyLjM0KQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2F1dG9fbnVtYmVyaW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHg9MTAwKToKKyAgICAgICAgICAgICAgICBzZWxmLl94ID0geAorICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fScuZm9ybWF0KDEwKSwgJzEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezo1fScuZm9ybWF0KCdzJyksICdzICAgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3shcn0nLmZvcm1hdCgncycpLCAiJ3MnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgney5feH0nLmZvcm1hdChDKDEwKSksICcxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3tbMV19Jy5mb3JtYXQoWzEsIDJdKSwgJzInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7W2FdfScuZm9ybWF0KHsnYSc6NCwgJ2InOjJ9KSwgJzQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhe31ie31jJy5mb3JtYXQoMCwgMSksICdhMGIxYycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYXs6e319YicuZm9ybWF0KCd4JywgJ14xMCcpLCAnYSAgICB4ICAgICBiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYXs6e314fWInLmZvcm1hdCgyMCwgJyMnKSwgJ2EweDE0YicpCisKKyAgICAgICAgIyBjYW4ndCBtaXggYW5kIG1hdGNoIG51bWJlcmluZyBhbmQgYXV0by1udW1iZXJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgJ3t9ezF9Jy5mb3JtYXQsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICd7MX17fScuZm9ybWF0LCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAnezp7MX19Jy5mb3JtYXQsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICd7MDp7fX0nLmZvcm1hdCwgMSwgMikKKworICAgICAgICAjIGNhbiBtaXggYW5kIG1hdGNoIGF1dG8tbnVtYmVyaW5nIGFuZCBuYW1lZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7Zn17fScuZm9ybWF0KDQsIGY9J3Rlc3QnKSwgJ3Rlc3Q0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne317Zn0nLmZvcm1hdCg0LCBmPSd0ZXN0JyksICc0dGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3s6e2Z9fXtnfXt9Jy5mb3JtYXQoMSwgMywgZz0nZycsIGY9MiksICcgMWczJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne2Y6e319e317Z30nLmZvcm1hdCgyLCA0LCBmPTEsIGc9J2cnKSwgJyAxNGcnKQorCisgICAgZGVmIHRlc3RfYnVmZmVyX2lzX3JlYWRvbmx5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5zdGRpbi5yZWFkaW50bywgYiIiKQorCisgICAgZGVmIHRlc3RfZW5jb2RlX2FuZF9kZWNvZGVfa3dhcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYmNkZScuZW5jb2RlKCdhc2NpaScsICdyZXBsYWNlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FiY2RlJy5lbmNvZGUoJ2FzY2lpJywgZXJyb3JzPSdyZXBsYWNlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiY2RlJy5lbmNvZGUoJ2FzY2lpJywgJ2lnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhYmNkZScuZW5jb2RlKGVuY29kaW5nPSdhc2NpaScsIGVycm9ycz0naWdub3JlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0FuZHJcMjAyIHgnLmRlY29kZSgnYXNjaWknLCAnaWdub3JlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0FuZHJcMjAyIHgnLmRlY29kZSgnYXNjaWknLCBlcnJvcnM9J2lnbm9yZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdBbmRyXDIwMiB4Jy5kZWNvZGUoJ2FzY2lpJywgJ3JlcGxhY2UnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQW5kclwyMDIgeCcuZGVjb2RlKGVuY29kaW5nPSdhc2NpaScsIGVycm9ycz0ncmVwbGFjZScpKQorCisgICAgZGVmIHRlc3Rfc3RhcnRzd2l0aF9lbmRzd2l0aF9lcnJvcnMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yKToKKyAgICAgICAgICAgICdceGZmJy5zdGFydHN3aXRoKHUneCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yKToKKyAgICAgICAgICAgICdceGZmJy5lbmRzd2l0aCh1J3gnKQorICAgICAgICBmb3IgbWV0aCBpbiAoJ2Zvbycuc3RhcnRzd2l0aCwgJ2ZvbycuZW5kc3dpdGgpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIG1ldGgoWydmJ10pCisgICAgICAgICAgICBleGMgPSBzdHIoY20uZXhjZXB0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigndW5pY29kZScsIGV4YykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3N0cicsIGV4YykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3R1cGxlJywgZXhjKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTdHJUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zdHJmdGltZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNmViZWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zdHJmdGltZS5weQpAQCAtMCwwICsxLDE4NSBAQAorIiIiCitVbml0dGVzdCBmb3IgdGltZS5zdHJmdGltZQorIiIiCisKK2ltcG9ydCBjYWxlbmRhcgoraW1wb3J0IHN5cworaW1wb3J0IHJlCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCisKKyMgaGVscGVyIGZ1bmN0aW9ucworZGVmIGZpeGFzY3RpbWUocyk6CisgICAgaWYgc1s4XSA9PSAnICc6CisgICAgICAgIHMgPSBzWzo4XSArICcwJyArIHNbOTpdCisgICAgcmV0dXJuIHMKKworZGVmIGVzY2FwZXN0cih0ZXh0LCBhbXBtKToKKyAgICAiIiIKKyAgICBFc2NhcGUgdGV4dCB0byBkZWFsIHdpdGggcG9zc2libGUgbG9jYWxlIHZhbHVlcyB0aGF0IGhhdmUgcmVnZXgKKyAgICBzeW50YXggd2hpbGUgYWxsb3dpbmcgcmVnZXggc3ludGF4IHVzZWQgZm9yIGNvbXBhcmlzb24uCisgICAgIiIiCisgICAgbmV3X3RleHQgPSByZS5lc2NhcGUodGV4dCkKKyAgICBuZXdfdGV4dCA9IG5ld190ZXh0LnJlcGxhY2UocmUuZXNjYXBlKGFtcG0pLCBhbXBtKQorICAgIG5ld190ZXh0ID0gbmV3X3RleHQucmVwbGFjZSgnXCUnLCAnJScpCisgICAgbmV3X3RleHQgPSBuZXdfdGV4dC5yZXBsYWNlKCdcOicsICc6JykKKyAgICBuZXdfdGV4dCA9IG5ld190ZXh0LnJlcGxhY2UoJ1w/JywgJz8nKQorICAgIHJldHVybiBuZXdfdGV4dAorCitjbGFzcyBTdHJmdGltZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICprLCAqKmt3KToKKyAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuX19pbml0X18oc2VsZiwgKmssICoqa3cpCisKKyAgICBkZWYgX3VwZGF0ZV92YXJpYWJsZXMoc2VsZiwgbm93KToKKyAgICAgICAgIyB3ZSBtdXN0IHVwZGF0ZSB0aGUgbG9jYWwgdmFyaWFibGVzIG9uIGV2ZXJ5IGN5Y2xlCisgICAgICAgIHNlbGYuZ210ID0gdGltZS5nbXRpbWUobm93KQorICAgICAgICBub3cgPSB0aW1lLmxvY2FsdGltZShub3cpCisKKyAgICAgICAgaWYgbm93WzNdIDwgMTI6IHNlbGYuYW1wbT0nKEFNfGFtKScKKyAgICAgICAgZWxzZTogc2VsZi5hbXBtPScoUE18cG0pJworCisgICAgICAgIHNlbGYuamFuMSA9IHRpbWUubG9jYWx0aW1lKHRpbWUubWt0aW1lKChub3dbMF0sIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDApKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3dbOF06IHNlbGYudHogPSB0aW1lLnR6bmFtZVsxXQorICAgICAgICAgICAgZWxzZTogc2VsZi50eiA9IHRpbWUudHpuYW1lWzBdCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYudHogPSAnJworCisgICAgICAgIGlmIG5vd1szXSA+IDEyOiBzZWxmLmNsb2NrMTIgPSBub3dbM10gLSAxMgorICAgICAgICBlbGlmIG5vd1szXSA+IDA6IHNlbGYuY2xvY2sxMiA9IG5vd1szXQorICAgICAgICBlbHNlOiBzZWxmLmNsb2NrMTIgPSAxMgorCisgICAgICAgIHNlbGYubm93ID0gbm93CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBqYXZhCisgICAgICAgICAgICBqYXZhLnV0aWwuTG9jYWxlLnNldERlZmF1bHQoamF2YS51dGlsLkxvY2FsZS5VUykKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgaW1wb3J0IGxvY2FsZQorICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfVElNRSwgJ0MnKQorCisgICAgZGVmIHRlc3Rfc3RyZnRpbWUoc2VsZik6CisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuX3VwZGF0ZV92YXJpYWJsZXMobm93KQorICAgICAgICBzZWxmLnN0cmZ0ZXN0MShub3cpCisgICAgICAgIHNlbGYuc3RyZnRlc3QyKG5vdykKKworICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJTdHJmdGltZSB0ZXN0LCBwbGF0Zm9ybTogJXMsIFB5dGhvbiB2ZXJzaW9uOiAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAoc3lzLnBsYXRmb3JtLCBzeXMudmVyc2lvbi5zcGxpdCgpWzBdKQorCisgICAgICAgIGZvciBqIGluIHJhbmdlKC01LCA1KToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDI1KToKKyAgICAgICAgICAgICAgICBhcmcgPSBub3cgKyAoaStqKjEwMCkqMjMqMzYwMworICAgICAgICAgICAgICAgIHNlbGYuX3VwZGF0ZV92YXJpYWJsZXMoYXJnKQorICAgICAgICAgICAgICAgIHNlbGYuc3RyZnRlc3QxKGFyZykKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmZ0ZXN0MihhcmcpCisKKyAgICBkZWYgc3RyZnRlc3QxKHNlbGYsIG5vdyk6CisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgInN0cmZ0aW1lIHRlc3QgZm9yIiwgdGltZS5jdGltZShub3cpCisgICAgICAgIG5vdyA9IHNlbGYubm93CisgICAgICAgICMgTWFrZSBzdXJlIGFueSBjaGFyYWN0ZXJzIHRoYXQgY291bGQgYmUgdGFrZW4gYXMgcmVnZXggc3ludGF4IGlzCisgICAgICAgICMgZXNjYXBlZCBpbiBlc2NhcGVzdHIoKQorICAgICAgICBleHBlY3RhdGlvbnMgPSAoCisgICAgICAgICAgICAoJyVhJywgY2FsZW5kYXIuZGF5X2FiYnJbbm93WzZdXSwgJ2FiYnJldmlhdGVkIHdlZWtkYXkgbmFtZScpLAorICAgICAgICAgICAgKCclQScsIGNhbGVuZGFyLmRheV9uYW1lW25vd1s2XV0sICdmdWxsIHdlZWtkYXkgbmFtZScpLAorICAgICAgICAgICAgKCclYicsIGNhbGVuZGFyLm1vbnRoX2FiYnJbbm93WzFdXSwgJ2FiYnJldmlhdGVkIG1vbnRoIG5hbWUnKSwKKyAgICAgICAgICAgICgnJUInLCBjYWxlbmRhci5tb250aF9uYW1lW25vd1sxXV0sICdmdWxsIG1vbnRoIG5hbWUnKSwKKyAgICAgICAgICAgICMgJWMgc2VlIGJlbG93CisgICAgICAgICAgICAoJyVkJywgJyUwMmQnICUgbm93WzJdLCAnZGF5IG9mIG1vbnRoIGFzIG51bWJlciAoMDAtMzEpJyksCisgICAgICAgICAgICAoJyVIJywgJyUwMmQnICUgbm93WzNdLCAnaG91ciAoMDAtMjMpJyksCisgICAgICAgICAgICAoJyVJJywgJyUwMmQnICUgc2VsZi5jbG9jazEyLCAnaG91ciAoMDEtMTIpJyksCisgICAgICAgICAgICAoJyVqJywgJyUwM2QnICUgbm93WzddLCAnanVsaWFuIGRheSAoMDAxLTM2NiknKSwKKyAgICAgICAgICAgICgnJW0nLCAnJTAyZCcgJSBub3dbMV0sICdtb250aCBhcyBudW1iZXIgKDAxLTEyKScpLAorICAgICAgICAgICAgKCclTScsICclMDJkJyAlIG5vd1s0XSwgJ21pbnV0ZSwgKDAwLTU5KScpLAorICAgICAgICAgICAgKCclcCcsIHNlbGYuYW1wbSwgJ0FNIG9yIFBNIGFzIGFwcHJvcHJpYXRlJyksCisgICAgICAgICAgICAoJyVTJywgJyUwMmQnICUgbm93WzVdLCAnc2Vjb25kcyBvZiBjdXJyZW50IHRpbWUgKDAwLTYwKScpLAorICAgICAgICAgICAgKCclVScsICclMDJkJyAlICgobm93WzddICsgc2VsZi5qYW4xWzZdKS8vNyksCisgICAgICAgICAgICAgJ3dlZWsgbnVtYmVyIG9mIHRoZSB5ZWFyIChTdW4gMXN0KScpLAorICAgICAgICAgICAgKCcldycsICcwPyVkJyAlICgoMStub3dbNl0pICUgNyksICd3ZWVrZGF5IGFzIGEgbnVtYmVyIChTdW4gMXN0KScpLAorICAgICAgICAgICAgKCclVycsICclMDJkJyAlICgobm93WzddICsgKHNlbGYuamFuMVs2XSAtIDEpJTcpLy83KSwKKyAgICAgICAgICAgICd3ZWVrIG51bWJlciBvZiB0aGUgeWVhciAoTW9uIDFzdCknKSwKKyAgICAgICAgICAgICMgJXggc2VlIGJlbG93CisgICAgICAgICAgICAoJyVYJywgJyUwMmQ6JTAyZDolMDJkJyAlIChub3dbM10sIG5vd1s0XSwgbm93WzVdKSwgJyVIOiVNOiVTJyksCisgICAgICAgICAgICAoJyV5JywgJyUwMmQnICUgKG5vd1swXSUxMDApLCAneWVhciB3aXRob3V0IGNlbnR1cnknKSwKKyAgICAgICAgICAgICgnJVknLCAnJWQnICUgbm93WzBdLCAneWVhciB3aXRoIGNlbnR1cnknKSwKKyAgICAgICAgICAgICMgJVogc2VlIGJlbG93CisgICAgICAgICAgICAoJyUlJywgJyUnLCAnc2luZ2xlIHBlcmNlbnQgc2lnbicpLAorICAgICAgICApCisKKyAgICAgICAgZm9yIGUgaW4gZXhwZWN0YXRpb25zOgorICAgICAgICAgICAgIyBtdXNuJ3QgcmFpc2UgYSB2YWx1ZSBlcnJvcgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRpbWUuc3RyZnRpbWUoZVswXSwgbm93KQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic3RyZnRpbWUgJyVzJyBmb3JtYXQgZ2F2ZSBlcnJvcjogJXMiICUgKGVbMF0sIGVycm9yKSkKKyAgICAgICAgICAgIGlmIHJlLm1hdGNoKGVzY2FwZXN0cihlWzFdLCBzZWxmLmFtcG0pLCByZXN1bHQpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBub3QgcmVzdWx0IG9yIHJlc3VsdFswXSA9PSAnJSc6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzdHJmdGltZSBkb2VzIG5vdCBzdXBwb3J0IHN0YW5kYXJkICclcycgZm9ybWF0ICglcykiCisgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGVbMF0sIGVbMl0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkNvbmZsaWN0IGZvciAlcyAoJXMpOiBleHBlY3RlZCAlcywgYnV0IGdvdCAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZVswXSwgZVsyXSwgZVsxXSwgcmVzdWx0KSkKKworICAgIGRlZiBzdHJmdGVzdDIoc2VsZiwgbm93KToKKyAgICAgICAgbm93c2VjcyA9IHN0cihsb25nKG5vdykpWzotMV0KKyAgICAgICAgbm93ID0gc2VsZi5ub3cKKworICAgICAgICBub25zdGFuZGFyZF9leHBlY3RhdGlvbnMgPSAoCisgICAgICAgICMgVGhlc2UgYXJlIHN0YW5kYXJkIGJ1dCBkb24ndCBoYXZlIHByZWRpY3RhYmxlIG91dHB1dAorICAgICAgICAgICAgKCclYycsIGZpeGFzY3RpbWUodGltZS5hc2N0aW1lKG5vdykpLCAnbmVhci1hc2N0aW1lKCkgZm9ybWF0JyksCisgICAgICAgICAgICAoJyV4JywgJyUwMmQvJTAyZC8lMDJkJyAlIChub3dbMV0sIG5vd1syXSwgKG5vd1swXSUxMDApKSwKKyAgICAgICAgICAgICclbS8lZC8leSAlSDolTTolUycpLAorICAgICAgICAgICAgKCclWicsICclcycgJSBzZWxmLnR6LCAndGltZSB6b25lIG5hbWUnKSwKKworICAgICAgICAgICAgIyBUaGVzZSBhcmUgc29tZSBwbGF0Zm9ybSBzcGVjaWZpYyBleHRlbnNpb25zCisgICAgICAgICAgICAoJyVEJywgJyUwMmQvJTAyZC8lMDJkJyAlIChub3dbMV0sIG5vd1syXSwgKG5vd1swXSUxMDApKSwgJ21tL2RkL3l5JyksCisgICAgICAgICAgICAoJyVlJywgJyUyZCcgJSBub3dbMl0sICdkYXkgb2YgbW9udGggYXMgbnVtYmVyLCBibGFuayBwYWRkZWQgKCAwLTMxKScpLAorICAgICAgICAgICAgKCclaCcsIGNhbGVuZGFyLm1vbnRoX2FiYnJbbm93WzFdXSwgJ2FiYnJldmlhdGVkIG1vbnRoIG5hbWUnKSwKKyAgICAgICAgICAgICgnJWsnLCAnJTJkJyAlIG5vd1szXSwgJ2hvdXIsIGJsYW5rIHBhZGRlZCAoIDAtMjMpJyksCisgICAgICAgICAgICAoJyVuJywgJ1xuJywgJ25ld2xpbmUgY2hhcmFjdGVyJyksCisgICAgICAgICAgICAoJyVyJywgJyUwMmQ6JTAyZDolMDJkICVzJyAlIChzZWxmLmNsb2NrMTIsIG5vd1s0XSwgbm93WzVdLCBzZWxmLmFtcG0pLAorICAgICAgICAgICAgJyVJOiVNOiVTICVwJyksCisgICAgICAgICAgICAoJyVSJywgJyUwMmQ6JTAyZCcgJSAobm93WzNdLCBub3dbNF0pLCAnJUg6JU0nKSwKKyAgICAgICAgICAgICgnJXMnLCBub3dzZWNzLCAnc2Vjb25kcyBzaW5jZSB0aGUgRXBvY2ggaW4gVUNUJyksCisgICAgICAgICAgICAoJyV0JywgJ1x0JywgJ3RhYiBjaGFyYWN0ZXInKSwKKyAgICAgICAgICAgICgnJVQnLCAnJTAyZDolMDJkOiUwMmQnICUgKG5vd1szXSwgbm93WzRdLCBub3dbNV0pLCAnJUg6JU06JVMnKSwKKyAgICAgICAgICAgICgnJTN5JywgJyUwM2QnICUgKG5vd1swXSUxMDApLAorICAgICAgICAgICAgJ3llYXIgd2l0aG91dCBjZW50dXJ5IHJlbmRlcmVkIHVzaW5nIGZpZWxkd2lkdGgnKSwKKyAgICAgICAgKQorCisgICAgICAgIGZvciBlIGluIG5vbnN0YW5kYXJkX2V4cGVjdGF0aW9uczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0aW1lLnN0cmZ0aW1lKGVbMF0sIG5vdykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCByZXN1bHQ6CisgICAgICAgICAgICAgICAgbXNnID0gIkVycm9yIGZvciBub25zdGFuZGFyZCAnJXMnIGZvcm1hdCAoJXMpOiAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgKGVbMF0sIGVbMl0sIHN0cihyZXN1bHQpKQorICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCBtc2cKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiByZS5tYXRjaChlc2NhcGVzdHIoZVsxXSwgc2VsZi5hbXBtKSwgcmVzdWx0KToKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlN1cHBvcnRzIG5vbnN0YW5kYXJkICclcycgZm9ybWF0ICglcykiICUgKGVbMF0sIGVbMl0pCisgICAgICAgICAgICBlbGlmIG5vdCByZXN1bHQgb3IgcmVzdWx0WzBdID09ICclJzoKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkRvZXMgbm90IGFwcGVhciB0byBzdXBwb3J0ICclcycgZm9ybWF0ICglcykiICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVbMF0sIGVbMl0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiQ29uZmxpY3QgZm9yIG5vbnN0YW5kYXJkICclcycgZm9ybWF0ICglcyk6IiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChlWzBdLCBlWzJdKQorICAgICAgICAgICAgICAgICAgICBwcmludCAiICBFeHBlY3RlZCAlcywgYnV0IGdvdCAlcyIgJSAoZVsxXSwgcmVzdWx0KQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTdHJmdGltZVRlc3QpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0cmluZy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0cmluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDA3YjkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3RyaW5nLnB5CkBAIC0wLDAgKzEsMjE3IEBACitpbXBvcnQgdW5pdHRlc3QsIHN0cmluZworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQsIHN0cmluZ190ZXN0cworZnJvbSBVc2VyTGlzdCBpbXBvcnQgVXNlckxpc3QKKworY2xhc3MgU3RyaW5nVGVzdCgKKyAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdCwKKyAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJTdHJpbmdVc2VyU3RyaW5nVGVzdAorICAgICk6CisKKyAgICB0eXBlMnRlc3QgPSBzdHIKKworICAgIGRlZiBjaGVja2VxdWFsKHNlbGYsIHJlc3VsdCwgb2JqZWN0LCBtZXRob2RuYW1lLCAqYXJncyk6CisgICAgICAgIHJlYWxyZXN1bHQgPSBnZXRhdHRyKHN0cmluZywgbWV0aG9kbmFtZSkob2JqZWN0LCAqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgIHJlYWxyZXN1bHQKKyAgICAgICAgKQorCisgICAgZGVmIGNoZWNrcmFpc2VzKHNlbGYsIGV4Yywgb2JqZWN0LCBtZXRob2RuYW1lLCAqYXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZXhjLAorICAgICAgICAgICAgZ2V0YXR0cihzdHJpbmcsIG1ldGhvZG5hbWUpLAorICAgICAgICAgICAgb2JqZWN0LAorICAgICAgICAgICAgKmFyZ3MKKyAgICAgICAgKQorCisgICAgZGVmIGNoZWNrY2FsbChzZWxmLCBvYmplY3QsIG1ldGhvZG5hbWUsICphcmdzKToKKyAgICAgICAgZ2V0YXR0cihzdHJpbmcsIG1ldGhvZG5hbWUpKG9iamVjdCwgKmFyZ3MpCisKKyAgICBkZWYgdGVzdF9qb2luKHNlbGYpOgorICAgICAgICAjIFRoZXNlIGFyZSB0aGUgc2FtZSBjaGVja3MgYXMgaW4gc3RyaW5nX3Rlc3QuT2JqZWN0VGVzdC50ZXN0X2pvaW4KKyAgICAgICAgIyBidXQgdGhlIGFyZ3VtZW50IG9yZGVyIGlzdCBkaWZmZXJlbnQKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhIGIgYyBkJywgWydhJywgJ2InLCAnYycsICdkJ10sICdqb2luJywgJyAnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY2QnLCAoJ2EnLCAnYicsICdjJywgJ2QnKSwgJ2pvaW4nLCAnJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCd3IHggeSB6Jywgc3RyaW5nX3Rlc3RzLlNlcXVlbmNlKCksICdqb2luJywgJyAnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiYycsICgnYWJjJywpLCAnam9pbicsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCd6JywgVXNlckxpc3QoWyd6J10pLCAnam9pbicsICdhJykKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1bmljb2RlKCdhLmIuYycpLCBbJ2EnLCAnYicsICdjJ10sICdqb2luJywgdW5pY29kZSgnLicpKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKHVuaWNvZGUoJ2EuYi5jJyksIFt1bmljb2RlKCdhJyksICdiJywgJ2MnXSwgJ2pvaW4nLCAnLicpCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwodW5pY29kZSgnYS5iLmMnKSwgWydhJywgdW5pY29kZSgnYicpLCAnYyddLCAnam9pbicsICcuJykKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1bmljb2RlKCdhLmIuYycpLCBbJ2EnLCAnYicsIHVuaWNvZGUoJ2MnKV0sICdqb2luJywgJy4nKQorICAgICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsIFsnYScsIHVuaWNvZGUoJ2InKSwgM10sICdqb2luJywgJy4nKQorICAgICAgICBmb3IgaSBpbiBbNSwgMjUsIDEyNV06CisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoCisgICAgICAgICAgICAgICAgKCgoJ2EnICogaSkgKyAnLScpICogaSlbOi0xXSwKKyAgICAgICAgICAgICAgICBbJ2EnICogaV0gKiBpLCAnam9pbicsICctJykKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgKKyAgICAgICAgICAgICAgICAoKCgnYScgKiBpKSArICctJykgKiBpKVs6LTFdLAorICAgICAgICAgICAgICAgICgnYScgKiBpLCkgKiBpLCAnam9pbicsICctJykKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgc3RyaW5nX3Rlc3RzLkJhZFNlcTEoKSwgJ2pvaW4nLCAnICcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYSBiIGMnLCBzdHJpbmdfdGVzdHMuQmFkU2VxMigpLCAnam9pbicsICcgJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICB5aWVsZCA0ICsgIiIKKyAgICAgICAgICAgIHNlbGYuZml4dHlwZSgnICcpLmpvaW4oZigpKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yLCBlOgorICAgICAgICAgICAgaWYgJysnIG5vdCBpbiBzdHIoZSk6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdqb2luKCkgYXRlIGV4Y2VwdGlvbiBtZXNzYWdlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnZXhjZXB0aW9uIG5vdCByYWlzZWQnKQorCisKKworCitjbGFzcyBNb2R1bGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2F0dHJzKHNlbGYpOgorICAgICAgICBzdHJpbmcud2hpdGVzcGFjZQorICAgICAgICBzdHJpbmcubG93ZXJjYXNlCisgICAgICAgIHN0cmluZy51cHBlcmNhc2UKKyAgICAgICAgc3RyaW5nLmxldHRlcnMKKyAgICAgICAgc3RyaW5nLmRpZ2l0cworICAgICAgICBzdHJpbmcuaGV4ZGlnaXRzCisgICAgICAgIHN0cmluZy5vY3RkaWdpdHMKKyAgICAgICAgc3RyaW5nLnB1bmN0dWF0aW9uCisgICAgICAgIHN0cmluZy5wcmludGFibGUKKworICAgIGRlZiB0ZXN0X2F0b2koc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLmF0b2koIiAxICIpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJpbmcuYXRvaSwgIiAxeCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cmluZy5hdG9pLCAiIHgxICIpCisKKyAgICBkZWYgdGVzdF9hdG9sKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5hdG9sKCIgIDEgICIpLCAxTCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RyaW5nLmF0b2wsICIgIDF4ICIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cmluZy5hdG9sLCAiICB4MSAiKQorCisgICAgZGVmIHRlc3RfYXRvZihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzdHJpbmcuYXRvZigiICAxICAiKSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJpbmcuYXRvZiwgIiAgMXggIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3RyaW5nLmF0b2YsICIgIHgxICIpCisKKyAgICBkZWYgdGVzdF9tYWtldHJhbnMoc2VsZik6CisgICAgICAgIHRyYW5zdGFibGUgPSAnXDAwMFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzcgISIjJCUmXCcoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9geHl6ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XDE3N1wyMDBcMjAxXDIwMlwyMDNcMjA0XDIwNVwyMDZcMjA3XDIxMFwyMTFcMjEyXDIxM1wyMTRcMjE1XDIxNlwyMTdcMjIwXDIyMVwyMjJcMjIzXDIyNFwyMjVcMjI2XDIyN1wyMzBcMjMxXDIzMlwyMzNcMjM0XDIzNVwyMzZcMjM3XDI0MFwyNDFcMjQyXDI0M1wyNDRcMjQ1XDI0NlwyNDdcMjUwXDI1MVwyNTJcMjUzXDI1NFwyNTVcMjU2XDI1N1wyNjBcMjYxXDI2MlwyNjNcMjY0XDI2NVwyNjZcMjY3XDI3MFwyNzFcMjcyXDI3M1wyNzRcMjc1XDI3NlwyNzdcMzAwXDMwMVwzMDJcMzAzXDMwNFwzMDVcMzA2XDMwN1wzMTBcMzExXDMxMlwzMTNcMzE0XDMxNVwzMTZcMzE3XDMyMFwzMjFcMzIyXDMyM1wzMjRcMzI1XDMyNlwzMjdcMzMwXDMzMVwzMzJcMzMzXDMzNFwzMzVcMzM2XDMzN1wzNDBcMzQxXDM0MlwzNDNcMzQ0XDM0NVwzNDZcMzQ3XDM1MFwzNTFcMzUyXDM1M1wzNTRcMzU1XDM1NlwzNTdcMzYwXDM2MVwzNjJcMzYzXDM2NFwzNjVcMzY2XDM2N1wzNzBcMzcxXDM3MlwzNzNcMzc0XDM3NVwzNzZcMzc3JworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLm1ha2V0cmFucygnYWJjJywgJ3h5eicpLCB0cmFuc3RhYmxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJpbmcubWFrZXRyYW5zLCAnYWJjJywgJ3h5enEnKQorCisgICAgZGVmIHRlc3RfY2Fwd29yZHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLmNhcHdvcmRzKCdhYmMgZGVmIGdoaScpLCAnQWJjIERlZiBHaGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5jYXB3b3JkcygnYWJjXHRkZWZcbmdoaScpLCAnQWJjIERlZiBHaGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5jYXB3b3JkcygnYWJjXHQgICBkZWYgIFxuZ2hpJyksICdBYmMgRGVmIEdoaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLmNhcHdvcmRzKCdBQkMgREVGIEdISScpLCAnQWJjIERlZiBHaGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5jYXB3b3JkcygnQUJDLURFRi1HSEknLCAnLScpLCAnQWJjLURlZi1HaGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5jYXB3b3JkcygnQUJDLWRlZiBERUYtZ2hpIEdISScpLCAnQWJjLWRlZiBEZWYtZ2hpIEdoaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLmNhcHdvcmRzKCcgICBhQmMgIERlRiAgICcpLCAnQWJjIERlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLmNhcHdvcmRzKCdcdGFCY1x0RGVGXHQnKSwgJ0FiYyBEZWYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZy5jYXB3b3JkcygnXHRhQmNcdERlRlx0JywgJ1x0JyksICdcdEFiY1x0RGVmXHQnKQorCisgICAgZGVmIHRlc3RfZm9ybWF0dGVyKHNlbGYpOgorICAgICAgICBmbXQgPSBzdHJpbmcuRm9ybWF0dGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCJmb28iKSwgImZvbyIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCJmb297MH0iLCAiYmFyIiksICJmb29iYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoImZvb3sxfXswfS17MX0iLCAiYmFyIiwgNiksICJmb282YmFyLTYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoIi17YXJnIXJ9LSIsIGFyZz0ndGVzdCcpLCAiLSd0ZXN0Jy0iKQorCisgICAgICAgICMgb3ZlcnJpZGUgZ2V0X3ZhbHVlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgIGNsYXNzIE5hbWVzcGFjZUZvcm1hdHRlcihzdHJpbmcuRm9ybWF0dGVyKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lc3BhY2U9e30pOgorICAgICAgICAgICAgICAgIHN0cmluZy5Gb3JtYXR0ZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLm5hbWVzcGFjZSA9IG5hbWVzcGFjZQorCisgICAgICAgICAgICBkZWYgZ2V0X3ZhbHVlKHNlbGYsIGtleSwgYXJncywga3dkcyk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cik6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQ2hlY2sgZXhwbGljaXRseSBwYXNzZWQgYXJndW1lbnRzIGZpcnN0CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga3dkc1trZXldCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm5hbWVzcGFjZVtrZXldCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nLkZvcm1hdHRlci5nZXRfdmFsdWUoa2V5LCBhcmdzLCBrd2RzKQorCisgICAgICAgIGZtdCA9IE5hbWVzcGFjZUZvcm1hdHRlcih7J2dyZWV0aW5nJzonaGVsbG8nfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCJ7Z3JlZXRpbmd9LCB3b3JsZCEiKSwgJ2hlbGxvLCB3b3JsZCEnKQorCisKKyAgICAgICAgIyBvdmVycmlkZSBmb3JtYXRfZmllbGQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgY2xhc3MgQ2FsbEZvcm1hdHRlcihzdHJpbmcuRm9ybWF0dGVyKToKKyAgICAgICAgICAgIGRlZiBmb3JtYXRfZmllbGQoc2VsZiwgdmFsdWUsIGZvcm1hdF9zcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0KHZhbHVlKCksIGZvcm1hdF9zcGVjKQorCisgICAgICAgIGZtdCA9IENhbGxGb3JtYXR0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoJyp7MH0qJywgbGFtYmRhIDogJ3Jlc3VsdCcpLCAnKnJlc3VsdConKQorCisKKyAgICAgICAgIyBvdmVycmlkZSBjb252ZXJ0X2ZpZWxkICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgY2xhc3MgWEZvcm1hdHRlcihzdHJpbmcuRm9ybWF0dGVyKToKKyAgICAgICAgICAgIGRlZiBjb252ZXJ0X2ZpZWxkKHNlbGYsIHZhbHVlLCBjb252ZXJzaW9uKToKKyAgICAgICAgICAgICAgICBpZiBjb252ZXJzaW9uID09ICd4JzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoWEZvcm1hdHRlciwgc2VsZikuY29udmVydF9maWVsZCh2YWx1ZSwgY29udmVyc2lvbikKKworICAgICAgICBmbXQgPSBYRm9ybWF0dGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCJ7MCFyfTp7MCF4fSIsICdmb28nLCAnZm9vJyksICInZm9vJzpOb25lIikKKworCisgICAgICAgICMgb3ZlcnJpZGUgcGFyc2UgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgIGNsYXNzIEJhckZvcm1hdHRlcihzdHJpbmcuRm9ybWF0dGVyKToKKyAgICAgICAgICAgICMgcmV0dXJucyBhbiBpdGVyYWJsZSB0aGF0IGNvbnRhaW5zIHR1cGxlcyBvZiB0aGUgZm9ybToKKyAgICAgICAgICAgICMgKGxpdGVyYWxfdGV4dCwgZmllbGRfbmFtZSwgZm9ybWF0X3NwZWMsIGNvbnZlcnNpb24pCisgICAgICAgICAgICBkZWYgcGFyc2Uoc2VsZiwgZm9ybWF0X3N0cmluZyk6CisgICAgICAgICAgICAgICAgZm9yIGZpZWxkIGluIGZvcm1hdF9zdHJpbmcuc3BsaXQoJ3wnKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZmllbGRbMF0gPT0gJysnOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBpdCdzIG1hcmt1cAorICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSwgXywgZm9ybWF0X3NwZWMgPSBmaWVsZFsxOl0ucGFydGl0aW9uKCc6JykKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkICcnLCBmaWVsZF9uYW1lLCBmb3JtYXRfc3BlYywgTm9uZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgZmllbGQsIE5vbmUsIE5vbmUsIE5vbmUKKworICAgICAgICBmbXQgPSBCYXJGb3JtYXR0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoJyp8KzA6XjEwc3wqJywgJ2ZvbycpLCAnKiAgIGZvbyAgICAqJykKKworICAgICAgICAjIHRlc3QgYWxsIHBhcmFtZXRlcnMgdXNlZAorICAgICAgICBjbGFzcyBDaGVja0FsbFVzZWRGb3JtYXR0ZXIoc3RyaW5nLkZvcm1hdHRlcik6CisgICAgICAgICAgICBkZWYgY2hlY2tfdW51c2VkX2FyZ3Moc2VsZiwgdXNlZF9hcmdzLCBhcmdzLCBrd2FyZ3MpOgorICAgICAgICAgICAgICAgICMgVHJhY2sgd2hpY2ggYXJndW1lbnRzIGFjdHVhbGx5IGdvdCB1c2VkCisgICAgICAgICAgICAgICAgdW51c2VkX2FyZ3MgPSBzZXQoa3dhcmdzLmtleXMoKSkKKyAgICAgICAgICAgICAgICB1bnVzZWRfYXJncy51cGRhdGUocmFuZ2UoMCwgbGVuKGFyZ3MpKSkKKworICAgICAgICAgICAgICAgIGZvciBhcmcgaW4gdXNlZF9hcmdzOgorICAgICAgICAgICAgICAgICAgICB1bnVzZWRfYXJncy5yZW1vdmUoYXJnKQorCisgICAgICAgICAgICAgICAgaWYgdW51c2VkX2FyZ3M6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVudXNlZCBhcmd1bWVudHMiKQorCisgICAgICAgIGZtdCA9IENoZWNrQWxsVXNlZEZvcm1hdHRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgiezB9IiwgMTApLCAiMTAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoInswfXtpfSIsIDEwLCBpPTEwMCksICIxMDEwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgiezB9e2l9ezF9IiwgMTAsIDIwLCBpPTEwMCksICIxMDEwMDIwIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm10LmZvcm1hdCwgInswfXtpfXsxfSIsIDEwLCAyMCwgaT0xMDAsIGo9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm10LmZvcm1hdCwgInswfSIsIDEwLCAyMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm10LmZvcm1hdCwgInswfSIsIDEwLCAyMCwgaT0xMDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZtdC5mb3JtYXQsICJ7aX0iLCAxMCwgMjAsIGk9MTAwKQorCisgICAgICAgICMgQWx0ZXJuYXRlIGZvcm1hdHRpbmcgaXMgbm90IHN1cHBvcnRlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsICcnLCAnIycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgJycsICcjMjAnKQorCitjbGFzcyBCeXRlc0FsaWFzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9idWlsdGluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyIGlzIGJ5dGVzKQorCisgICAgZGVmIHRlc3Rfc3ludGF4KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIic3BhbSIsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiciJlZ2dcZm9vIiwgImVnZ1xcZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoYiIiKSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShiciIiKSwgc3RyKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTdHJpbmdUZXN0LCBNb2R1bGVUZXN0LCBCeXRlc0FsaWFzVGVzdCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3RyaW5ncHJlcC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0cmluZ3ByZXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViZGY4NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0cmluZ3ByZXAucHkKQEAgLTAsMCArMSw5NiBAQAorIyBUbyBmdWxseSB0ZXN0IHRoaXMgbW9kdWxlLCB3ZSB3b3VsZCBuZWVkIGEgY29weSBvZiB0aGUgc3RyaW5ncHJlcCB0YWJsZXMuCisjIFNpbmNlIHdlIGRvbid0IGhhdmUgdGhlbSwgdGhpcyB0ZXN0IGNoZWNrcyBvbmx5IGEgZmV3IGNvZGVwb2ludHMuCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworZnJvbSBzdHJpbmdwcmVwIGltcG9ydCAqCisKK2NsYXNzIFN0cmluZ3ByZXBUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9hMSh1Ilx1MDIyMSIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2ExKHUiXHUwMjIyIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2IxKHUiXHUwMGFkIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYjEodSJcdTAwYWUiKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobWFwX3RhYmxlX2IyKHUiXHUwMDQxIiksIHUiXHUwMDYxIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hcF90YWJsZV9iMih1Ilx1MDA2MSIpLCB1Ilx1MDA2MSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hcF90YWJsZV9iMyh1Ilx1MDA0MSIpLCB1Ilx1MDA2MSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXBfdGFibGVfYjModSJcdTAwNjEiKSwgdSJcdTAwNjEiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jMTEodSJcdTAwMjAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9jMTEodSJcdTAwMjEiKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzEyKHUiXHUwMGEwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzEyKHUiXHUwMGExIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2MxMih1Ilx1MDBhMCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2MxMih1Ilx1MDBhMSIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jMTFfYzEyKHUiXHUwMGEwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzExX2MxMih1Ilx1MDBhMSIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jMjEodSJcdTAwMWYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9jMjEodSJcdTAwMjAiKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzIyKHUiXHUwMDlmIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzIyKHUiXHUwMGEwIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2MyMV9jMjIodSJcdTAwOWYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9jMjFfYzIyKHUiXHUwMGEwIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2MzKHUiXHVlMDAwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzModSJcdWY5MDAiKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzQodSJcdWZmZmYiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9jNCh1Ilx1MDAwMCIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jNSh1Ilx1ZDgwMCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2M1KHUiXHVkN2ZmIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluX3RhYmxlX2M2KHUiXHVmZmY5IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5fdGFibGVfYzYodSJcdWZmZmUiKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzcodSJcdTJmZjAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9jNyh1Ilx1MmZmYyIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9jOCh1Ilx1MDM0MCIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2M4KHUiXHUwMzQyIikpCisKKyAgICAgICAgIyBDLjkgaXMgbm90IGluIHRoZSBibXAKKyAgICAgICAgIyBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfYzkodSJcVTAwMEUwMDAxIikpCisgICAgICAgICMgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9jOCh1IlxVMDAwRTAwMDIiKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5fdGFibGVfZDEodSJcdTA1YmUiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbl90YWJsZV9kMSh1Ilx1MDViZiIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbl90YWJsZV9kMih1Ilx1MDA0MSIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluX3RhYmxlX2QyKHUiXHUwMDQwIikpCisKKyAgICAgICAgIyBUaGlzIHdvdWxkIGdlbmVyYXRlIGEgaGFzaCBvZiBhbGwgcHJlZGljYXRlcy4gSG93ZXZlciwgcnVubmluZworICAgICAgICAjIGl0IGlzIHF1aXRlIGV4cGVuc2l2ZSwgYW5kIG9ubHkgc2VydmVzIHRvIGRldGVjdCBjaGFuZ2VzIGluIHRoZQorICAgICAgICAjIHVuaWNvZGUgZGF0YWJhc2UuIEluc3RlYWQsIHN0cmluZ3ByZXAucHkgYXNzZXJ0cyB0aGUgdmVyc2lvbiBvZgorICAgICAgICAjIHRoZSBkYXRhYmFzZS4KKworICAgICAgICAjIGltcG9ydCBoYXNobGliCisgICAgICAgICMgcHJlZGljYXRlcyA9IFtrIGZvciBrIGluIGRpcihzdHJpbmdwcmVwKSBpZiBrLnN0YXJ0c3dpdGgoImluX3RhYmxlIildCisgICAgICAgICMgcHJlZGljYXRlcy5zb3J0KCkKKyAgICAgICAgIyBmb3IgcCBpbiBwcmVkaWNhdGVzOgorICAgICAgICAjICAgICBmID0gZ2V0YXR0cihzdHJpbmdwcmVwLCBwKQorICAgICAgICAjICAgICAjIENvbGxlY3QgYWxsIEJNUCBjb2RlIHBvaW50cworICAgICAgICAjICAgICBkYXRhID0gWyIwIl0gKiAweDEwMDAwCisgICAgICAgICMgICAgIGZvciBpIGluIHJhbmdlKDB4MTAwMDApOgorICAgICAgICAjICAgICAgICAgaWYgZih1bmljaHIoaSkpOgorICAgICAgICAjICAgICAgICAgICAgIGRhdGFbaV0gPSAiMSIKKyAgICAgICAgIyAgICAgZGF0YSA9ICIiLmpvaW4oZGF0YSkKKyAgICAgICAgIyAgICAgaCA9IGhhc2hsaWIuc2hhMSgpCisgICAgICAgICMgICAgIGgudXBkYXRlKGRhdGEpCisgICAgICAgICMgICAgIHByaW50IHAsIGguaGV4ZGlnZXN0KCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RyaW5ncHJlcFRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zdHJvcC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0cm9wLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZTI5ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zdHJvcC5weQpAQCAtMCwwICsxLDE1MyBAQAoraW1wb3J0IHdhcm5pbmdzCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgInN0cm9wIGZ1bmN0aW9ucyBhcmUgb2Jzb2xldGU7IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHIndGVzdC50ZXN0X3N0cm9wfHVuaXR0ZXN0JykKK2ltcG9ydCBzdHJvcAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisKK2NsYXNzIFN0cm9wRnVuY3Rpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hdG9pKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AuYXRvaSgiIDEgIikgPT0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3Ryb3AuYXRvaSwgIiAxeCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cm9wLmF0b2ksICIgeDEgIikKKworICAgIGRlZiB0ZXN0X2F0b2woc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5hdG9sKCIgMSAiKSA9PSAxTCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3Ryb3AuYXRvbCwgIiAxeCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cm9wLmF0b2wsICIgeDEgIikKKworICAgIGRlZiB0ZXN0X2F0b2Yoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5hdG9mKCIgMSAiKSA9PSAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0cm9wLmF0b2YsICIgMXgiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJvcC5hdG9mLCAiIHgxICIpCisKKyAgICBkZWYgdGVzdF9jYXBpdGFsaXplKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AuY2FwaXRhbGl6ZSgiIGhlbGxvICIpID09ICIgaGVsbG8gIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmNhcGl0YWxpemUoImhlbGxvICIpID09ICJIZWxsbyAiKQorCisgICAgZGVmIHRlc3RfZmluZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmZpbmQoImFiY2RlZmdoaWFiYyIsICJhYmMiKSA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AuZmluZCgiYWJjZGVmZ2hpYWJjIiwgImFiYyIsIDEpID09IDkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5maW5kKCJhYmNkZWZnaGlhYmMiLCAiZGVmIiwgNCkgPT0gLTEpCisKKyAgICBkZWYgdGVzdF9yZmluZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLnJmaW5kKCJhYmNkZWZnaGlhYmMiLCAiYWJjIikgPT0gOSkKKworICAgIGRlZiB0ZXN0X2xvd2VyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AubG93ZXIoIkhlTExvIikgPT0gImhlbGxvIikKKworICAgIGRlZiB0ZXN0X3VwcGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AudXBwZXIoIkhlTExvIikgPT0gIkhFTExPIikKKworICAgIGRlZiB0ZXN0X3N3YXBjYXNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3Auc3dhcGNhc2UoIkhlTExvIGNPbXBVdGVScyIpID09ICJoRWxsTyBDb01QdVRFclMiKQorCisgICAgZGVmIHRlc3Rfc3RyaXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5zdHJpcCgiIFx0XG4gaGVsbG8gXHRcbiAiKSA9PSAiaGVsbG8iKQorCisgICAgZGVmIHRlc3RfbHN0cmlwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3Ryb3AubHN0cmlwKCIgXHRcbiBoZWxsbyBcdFxuICIpID09ICJoZWxsbyBcdFxuICIpCisKKyAgICBkZWYgdGVzdF9yc3RyaXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5yc3RyaXAoIiBcdFxuIGhlbGxvIFx0XG4gIikgPT0gIiBcdFxuIGhlbGxvIikKKworICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6CisgICAgICAgIHJlcGxhY2UgPSBzdHJvcC5yZXBsYWNlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICchJywgJ0AnLCAxKQorICAgICAgICAgICAgICAgICAgICAgPT0gIm9uZUB0d28hdGhyZWUhIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcGxhY2UoIm9uZSF0d28hdGhyZWUhIiwgJyEnLCAnQCcsIDIpCisgICAgICAgICAgICAgICAgICAgICA9PSAib25lQHR3b0B0aHJlZSEiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAnIScsICdAJywgMykKKyAgICAgICAgICAgICAgICAgICAgID09ICJvbmVAdHdvQHRocmVlQCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICchJywgJ0AnLCA0KQorICAgICAgICAgICAgICAgICAgICAgPT0gIm9uZUB0d29AdGhyZWVAIikKKworICAgICAgICAjIENBVVRJT046IGEgcmVwbGFjZSBjb3VudCBvZiAwIG1lYW5zIGluZmluaXR5IG9ubHkgdG8gc3Ryb3AsCisgICAgICAgICMgbm90IHRvIHRoZSBzdHJpbmcgLnJlcGxhY2UoKSBtZXRob2Qgb3IgdG8gdGhlCisgICAgICAgICMgc3RyaW5nLnJlcGxhY2UoKSBmdW5jdGlvbi4KKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAnIScsICdAJywgMCkKKyAgICAgICAgICAgICAgICAgICAgID09ICJvbmVAdHdvQHRocmVlQCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXBsYWNlKCJvbmUhdHdvIXRocmVlISIsICchJywgJ0AnKQorICAgICAgICAgICAgICAgICAgICAgPT0gIm9uZUB0d29AdGhyZWVAIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcGxhY2UoIm9uZSF0d28hdGhyZWUhIiwgJ3gnLCAnQCcpCisgICAgICAgICAgICAgICAgICAgICA9PSAib25lIXR3byF0aHJlZSEiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwbGFjZSgib25lIXR3byF0aHJlZSEiLCAneCcsICdAJywgMikKKyAgICAgICAgICAgICAgICAgICAgID09ICJvbmUhdHdvIXRocmVlISIpCisKKyAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKKyAgICAgICAgc3BsaXQgPSBzdHJvcC5zcGxpdAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BsaXQoInRoaXMgaXMgdGhlIHNwbGl0IGZ1bmN0aW9uIikKKyAgICAgICAgICAgICAgICAgICAgID09IFsndGhpcycsICdpcycsICd0aGUnLCAnc3BsaXQnLCAnZnVuY3Rpb24nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwbGl0KCJhfGJ8Y3xkIiwgJ3wnKSA9PSBbJ2EnLCAnYicsICdjJywgJ2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwbGl0KCJhfGJ8Y3xkIiwgJ3wnLCAyKSA9PSBbJ2EnLCAnYicsICdjfGQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwbGl0KCJhIGIgYyBkIiwgTm9uZSwgMSkgPT0gWydhJywgJ2IgYyBkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGxpdCgiYSBiIGMgZCIsIE5vbmUsIDIpID09IFsnYScsICdiJywgJ2MgZCddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BsaXQoImEgYiBjIGQiLCBOb25lLCAzKSA9PSBbJ2EnLCAnYicsICdjJywgJ2QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwbGl0KCJhIGIgYyBkIiwgTm9uZSwgNCkgPT0gWydhJywgJ2InLCAnYycsICdkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGxpdCgiYSBiIGMgZCIsIE5vbmUsIDApID09IFsnYScsICdiJywgJ2MnLCAnZCddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BsaXQoImEgIGIgIGMgIGQiLCBOb25lLCAyKSA9PSAgWydhJywgJ2InLCAnYyAgZCddKQorCisgICAgZGVmIHRlc3Rfam9pbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmpvaW4oWydhJywgJ2InLCAnYycsICdkJ10pID09ICdhIGIgYyBkJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmpvaW4oKCdhJywgJ2InLCAnYycsICdkJyksICcnKSA9PSAnYWJjZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5qb2luKFNlcXVlbmNlKCkpID09ICd3IHggeSB6JykKKworICAgICAgICAjIHRyeSBhIGZldyBsb25nIG9uZXMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmpvaW4oWyd4JyAqIDEwMF0gKiAxMDAsICc6JykKKyAgICAgICAgICAgICAgICAgICAgID09ICgoJ3gnICogMTAwKSArICI6IikgKiA5OSArICJ4IiAqIDEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cm9wLmpvaW4oKCd4JyAqIDEwMCwpICogMTAwLCAnOicpCisgICAgICAgICAgICAgICAgICAgICA9PSAoKCd4JyAqIDEwMCkgKyAiOiIpICogOTkgKyAieCIgKiAxMDApCisKKyAgICBkZWYgdGVzdF9tYWtldHJhbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC5tYWtldHJhbnMoImFiYyIsICJ4eXoiKSA9PSB0cmFuc3RhYmxlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdHJvcC5tYWtldHJhbnMsICJhYmMiLCAieHl6cSIpCisKKyAgICBkZWYgdGVzdF90cmFuc2xhdGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJvcC50cmFuc2xhdGUoInh5emFiY2RlZiIsIHRyYW5zdGFibGUsICJkZWYiKQorICAgICAgICAgICAgICAgICAgICAgPT0gInh5enh5eiIpCisKKyAgICBkZWYgdGVzdF9kYXRhX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHN0cm9wLmxvd2VyY2FzZQorICAgICAgICBzdHJvcC51cHBlcmNhc2UKKyAgICAgICAgc3Ryb3Aud2hpdGVzcGFjZQorCisgICAgQHRlc3Rfc3VwcG9ydC5wcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9dGVzdF9zdXBwb3J0Ll8yRyAtIDEsIG1lbXVzZT01KQorICAgIGRlZiB0ZXN0X3N0cm9wam9pbl9odWdlX2xpc3Qoc2VsZiwgc2l6ZSk6CisgICAgICAgIGEgPSAiQSIgKiBzaXplCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHIgPSBzdHJvcC5qb2luKFthLCBhXSwgYSkKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyKSwgbGVuKGEpICogMykKKworICAgIEB0ZXN0X3N1cHBvcnQucHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPXRlc3Rfc3VwcG9ydC5fMkcgLSAxLCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9zdHJvcGpvaW5faHVnZV90dXAoc2VsZiwgc2l6ZSk6CisgICAgICAgIGEgPSAiQSIgKiBzaXplCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHIgPSBzdHJvcC5qb2luKChhLCBhKSwgYSkKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBwYXNzICMgYWNjZXB0YWJsZSBvbiAzMi1iaXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHIpLCBsZW4oYSkgKiAzKQorCit0cmFuc3RhYmxlID0gJ1wwMDBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3ICEiIyQlJlwnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYHh5emRlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flwxNzdcMjAwXDIwMVwyMDJcMjAzXDIwNFwyMDVcMjA2XDIwN1wyMTBcMjExXDIxMlwyMTNcMjE0XDIxNVwyMTZcMjE3XDIyMFwyMjFcMjIyXDIyM1wyMjRcMjI1XDIyNlwyMjdcMjMwXDIzMVwyMzJcMjMzXDIzNFwyMzVcMjM2XDIzN1wyNDBcMjQxXDI0MlwyNDNcMjQ0XDI0NVwyNDZcMjQ3XDI1MFwyNTFcMjUyXDI1M1wyNTRcMjU1XDI1NlwyNTdcMjYwXDI2MVwyNjJcMjYzXDI2NFwyNjVcMjY2XDI2N1wyNzBcMjcxXDI3MlwyNzNcMjc0XDI3NVwyNzZcMjc3XDMwMFwzMDFcMzAyXDMwM1wzMDRcMzA1XDMwNlwzMDdcMzEwXDMxMVwzMTJcMzEzXDMxNFwzMTVcMzE2XDMxN1wzMjBcMzIxXDMyMlwzMjNcMzI0XDMyNVwzMjZcMzI3XDMzMFwzMzFcMzMyXDMzM1wzMzRcMzM1XDMzNlwzMzdcMzQwXDM0MVwzNDJcMzQzXDM0NFwzNDVcMzQ2XDM0N1wzNTBcMzUxXDM1MlwzNTNcMzU0XDM1NVwzNTZcMzU3XDM2MFwzNjFcMzYyXDM2M1wzNjRcMzY1XDM2NlwzNjdcMzcwXDM3MVwzNzJcMzczXDM3NFwzNzVcMzc2XDM3NycKKworCisjIGpvaW4oKSBub3cgd29ya3Mgd2l0aCBhbnkgc2VxdWVuY2UgdHlwZS4KK2NsYXNzIFNlcXVlbmNlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKTogc2VsZi5zZXEgPSAnd3h5eicKKyAgICBkZWYgX19sZW5fXyhzZWxmKTogcmV0dXJuIGxlbihzZWxmLnNlcSkKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6IHJldHVybiBzZWxmLnNlcVtpXQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFN0cm9wRnVuY3Rpb25UZXN0Q2FzZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zdHJwdGltZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0cnB0aW1lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZTQzMDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zdHJwdGltZS5weQpAQCAtMCwwICsxLDU2NyBAQAorIiIiUHlVbml0IHRlc3RpbmcgYWdhaW5zdCBzdHJwdGltZSIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0aW1lCitpbXBvcnQgbG9jYWxlCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlIGFzIGRhdGV0aW1lX2RhdGUKKworaW1wb3J0IF9zdHJwdGltZQorCitjbGFzcyBnZXRsYW5nX1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IF9nZXRsYW5nIiIiCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3N0cnB0aW1lLl9nZXRsYW5nKCksIGxvY2FsZS5nZXRsb2NhbGUobG9jYWxlLkxDX1RJTUUpKQorCitjbGFzcyBMb2NhbGVUaW1lX1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBmb3IgX3N0cnB0aW1lLkxvY2FsZVRpbWUuCisKKyAgICBBbGwgdmFsdWVzIGFyZSBsb3dlci1jYXNlZCB3aGVuIHN0b3JlZCBpbiBMb2NhbGVUaW1lLCBzbyBtYWtlIHN1cmUgdG8KKyAgICBjb21wYXJlIHZhbHVlcyBhZnRlciBydW5uaW5nIGBgbG93ZXJgYCBvbiB0aGVtLgorCisgICAgIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSB0aW1lIHR1cGxlIGJhc2VkIG9uIGN1cnJlbnQgdGltZS4iIiIKKyAgICAgICAgc2VsZi50aW1lX3R1cGxlID0gdGltZS5sb2NhbHRpbWUoKQorICAgICAgICBzZWxmLkxUX2lucyA9IF9zdHJwdGltZS5Mb2NhbGVUaW1lKCkKKworICAgIGRlZiBjb21wYXJlX2FnYWluc3RfdGltZShzZWxmLCB0ZXN0aW5nLCBkaXJlY3RpdmUsIHR1cGxlX3Bvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cpOgorICAgICAgICAiIiJIZWxwZXIgbWV0aG9kIHRoYXQgdGVzdHMgdGVzdGluZyBhZ2FpbnN0IGRpcmVjdGl2ZSBiYXNlZCBvbiB0aGUKKyAgICAgICAgdHVwbGVfcG9zaXRpb24gb2YgdGltZV90dXBsZS4gIFVzZXMgZXJyb3JfbXNnIGFzIGVycm9yIG1lc3NhZ2UuCisKKyAgICAgICAgIiIiCisgICAgICAgIHN0cmZ0aW1lX291dHB1dCA9IHRpbWUuc3RyZnRpbWUoZGlyZWN0aXZlLCBzZWxmLnRpbWVfdHVwbGUpLmxvd2VyKCkKKyAgICAgICAgY29tcGFyaXNvbiA9IHRlc3Rpbmdbc2VsZi50aW1lX3R1cGxlW3R1cGxlX3Bvc2l0aW9uXV0KKyAgICAgICAgc2VsZi5hc3NlcnRJbihzdHJmdGltZV9vdXRwdXQsIHRlc3RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIiVzOiBub3QgZm91bmQgaW4gdHVwbGUiICUgZXJyb3JfbXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBhcmlzb24sIHN0cmZ0aW1lX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IHBvc2l0aW9uIHdpdGhpbiB0dXBsZSBpbmNvcnJlY3Q7ICVzICE9ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yX21zZywgY29tcGFyaXNvbiwgc3RyZnRpbWVfb3V0cHV0KSkKKworICAgIGRlZiB0ZXN0X3dlZWtkYXkoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgZnVsbCBhbmQgYWJicmV2aWF0ZWQgd2Vla2RheSBuYW1lcyBhcmUgY29ycmVjdCBpbgorICAgICAgICAjIGJvdGggc3RyaW5nIGFuZCBwb3NpdGlvbiB3aXRoIHR1cGxlCisgICAgICAgIHNlbGYuY29tcGFyZV9hZ2FpbnN0X3RpbWUoc2VsZi5MVF9pbnMuZl93ZWVrZGF5LCAnJUEnLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0aW5nIG9mIGZ1bGwgd2Vla2RheSBuYW1lIGZhaWxlZCIpCisgICAgICAgIHNlbGYuY29tcGFyZV9hZ2FpbnN0X3RpbWUoc2VsZi5MVF9pbnMuYV93ZWVrZGF5LCAnJWEnLCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0aW5nIG9mIGFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZSBmYWlsZWQiKQorCisgICAgZGVmIHRlc3RfbW9udGgoc2VsZik6CisgICAgICAgICMgVGVzdCBmdWxsIGFuZCBhYmJyZXZpYXRlZCBtb250aCBuYW1lczsgYm90aCBzdHJpbmcgYW5kIHBvc2l0aW9uCisgICAgICAgICMgd2l0aGluIHRoZSB0dXBsZQorICAgICAgICBzZWxmLmNvbXBhcmVfYWdhaW5zdF90aW1lKHNlbGYuTFRfaW5zLmZfbW9udGgsICclQicsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RpbmcgYWdhaW5zdCBmdWxsIG1vbnRoIG5hbWUgZmFpbGVkIikKKyAgICAgICAgc2VsZi5jb21wYXJlX2FnYWluc3RfdGltZShzZWxmLkxUX2lucy5hX21vbnRoLCAnJWInLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0aW5nIGFnYWluc3QgYWJicmV2aWF0ZWQgbW9udGggbmFtZSBmYWlsZWQiKQorCisgICAgZGVmIHRlc3RfYW1fcG0oc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIEFNL1BNIHJlcHJlc2VudGF0aW9uIGRvbmUgcHJvcGVybHkKKyAgICAgICAgc3RyZnRpbWVfb3V0cHV0ID0gdGltZS5zdHJmdGltZSgiJXAiLCBzZWxmLnRpbWVfdHVwbGUpLmxvd2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzdHJmdGltZV9vdXRwdXQsIHNlbGYuTFRfaW5zLmFtX3BtLAorICAgICAgICAgICAgICAgICAgICAgICJBTS9QTSByZXByZXNlbnRhdGlvbiBub3QgaW4gdHVwbGUiKQorICAgICAgICBpZiBzZWxmLnRpbWVfdHVwbGVbM10gPCAxMjogcG9zaXRpb24gPSAwCisgICAgICAgIGVsc2U6IHBvc2l0aW9uID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuTFRfaW5zLmFtX3BtW3Bvc2l0aW9uXSwgc3RyZnRpbWVfb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJBTS9QTSByZXByZXNlbnRhdGlvbiBpbiB0aGUgd3JvbmcgcG9zaXRpb24gd2l0aGluIHRoZSB0dXBsZSIpCisKKyAgICBkZWYgdGVzdF90aW1lem9uZShzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGltZXpvbmUgaXMgY29ycmVjdAorICAgICAgICB0aW1lem9uZSA9IHRpbWUuc3RyZnRpbWUoIiVaIiwgc2VsZi50aW1lX3R1cGxlKS5sb3dlcigpCisgICAgICAgIGlmIHRpbWV6b25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWV6b25lIGluIHNlbGYuTFRfaW5zLnRpbWV6b25lWzBdIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXpvbmUgaW4gc2VsZi5MVF9pbnMudGltZXpvbmVbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWV6b25lICVzIG5vdCBmb3VuZCBpbiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aW1lem9uZSwgc2VsZi5MVF9pbnMudGltZXpvbmUpKQorCisgICAgZGVmIHRlc3RfZGF0ZV90aW1lKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgTENfZGF0ZV90aW1lLCBMQ19kYXRlLCBhbmQgTENfdGltZSBhcmUgY29ycmVjdAorICAgICAgICAjIHRoZSBtYWdpYyBkYXRlIGlzIHVzZWQgc28gYXMgdG8gbm90IGhhdmUgaXNzdWVzIHdpdGggJWMgd2hlbiBkYXkgb2YKKyAgICAgICAgIyAgdGhlIG1vbnRoIGlzIGEgc2luZ2xlIGRpZ2l0IGFuZCBoYXMgYSBsZWFkaW5nIHNwYWNlLiAgVGhpcyBpcyBub3QgYW4KKyAgICAgICAgIyAgaXNzdWUgc2luY2Ugc3RycHRpbWUgc3RpbGwgcGFyc2VzIGl0IGNvcnJlY3RseS4gIFRoZSBwcm9ibGVtIGlzCisgICAgICAgICMgIHRlc3RpbmcgdGhlc2UgZGlyZWN0aXZlcyBmb3IgY29ycmVjdG5lc3MgYnkgY29tcGFyaW5nIHN0cmZ0aW1lCisgICAgICAgICMgIG91dHB1dC4KKyAgICAgICAgbWFnaWNfZGF0ZSA9ICgxOTk5LCAzLCAxNywgMjIsIDQ0LCA1NSwgMiwgNzYsIDApCisgICAgICAgIHN0cmZ0aW1lX291dHB1dCA9IHRpbWUuc3RyZnRpbWUoIiVjIiwgbWFnaWNfZGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLnN0cmZ0aW1lKHNlbGYuTFRfaW5zLkxDX2RhdGVfdGltZSwgbWFnaWNfZGF0ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZnRpbWVfb3V0cHV0LCAiTENfZGF0ZV90aW1lIGluY29ycmVjdCIpCisgICAgICAgIHN0cmZ0aW1lX291dHB1dCA9IHRpbWUuc3RyZnRpbWUoIiV4IiwgbWFnaWNfZGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLnN0cmZ0aW1lKHNlbGYuTFRfaW5zLkxDX2RhdGUsIG1hZ2ljX2RhdGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmZ0aW1lX291dHB1dCwgIkxDX2RhdGUgaW5jb3JyZWN0IikKKyAgICAgICAgc3RyZnRpbWVfb3V0cHV0ID0gdGltZS5zdHJmdGltZSgiJVgiLCBtYWdpY19kYXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUuc3RyZnRpbWUoc2VsZi5MVF9pbnMuTENfdGltZSwgbWFnaWNfZGF0ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZnRpbWVfb3V0cHV0LCAiTENfdGltZSBpbmNvcnJlY3QiKQorICAgICAgICBMVCA9IF9zdHJwdGltZS5Mb2NhbGVUaW1lKCkKKyAgICAgICAgTFQuYW1fcG0gPSAoJycsICcnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoTFQuTENfdGltZSwgIkxvY2FsZVRpbWUncyBMQyBkaXJlY3RpdmVzIGNhbm5vdCBoYW5kbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVtcHR5IHN0cmluZ3MiKQorCisgICAgZGVmIHRlc3RfbGFuZyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgbGFuZyBpcyBzZXQgdG8gd2hhdCBfZ2V0bGFuZygpIHJldHVybnMKKyAgICAgICAgIyBBc3N1bWluZyBsb2NhbGUgaGFzIG5vdCBjaGFuZ2VkIGJldHdlZW4gbm93IGFuZCB3aGVuIHNlbGYuTFRfaW5zIHdhcyBjcmVhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5MVF9pbnMubGFuZywgX3N0cnB0aW1lLl9nZXRsYW5nKCkpCisKKworY2xhc3MgVGltZVJFVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGZvciBUaW1lUkUuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICIiIkNvbnN0cnVjdCBnZW5lcmljIFRpbWVSRSBvYmplY3QuIiIiCisgICAgICAgIHNlbGYudGltZV9yZSA9IF9zdHJwdGltZS5UaW1lUkUoKQorICAgICAgICBzZWxmLmxvY2FsZV90aW1lID0gX3N0cnB0aW1lLkxvY2FsZVRpbWUoKQorCisgICAgZGVmIHRlc3RfcGF0dGVybihzZWxmKToKKyAgICAgICAgIyBUZXN0IFRpbWVSRS5wYXR0ZXJuCisgICAgICAgIHBhdHRlcm5fc3RyaW5nID0gc2VsZi50aW1lX3JlLnBhdHRlcm4ociIlYSAlQSAlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXR0ZXJuX3N0cmluZy5maW5kKHNlbGYubG9jYWxlX3RpbWUuYV93ZWVrZGF5WzJdKSAhPSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJkaWQgbm90IGZpbmQgYWJicmV2aWF0ZWQgd2Vla2RheSBpbiBwYXR0ZXJuIHN0cmluZyAnJXMnIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybl9zdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXR0ZXJuX3N0cmluZy5maW5kKHNlbGYubG9jYWxlX3RpbWUuZl93ZWVrZGF5WzRdKSAhPSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJkaWQgbm90IGZpbmQgZnVsbCB3ZWVrZGF5IGluIHBhdHRlcm4gc3RyaW5nICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuX3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhdHRlcm5fc3RyaW5nLmZpbmQoc2VsZi50aW1lX3JlWydkJ10pICE9IC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgImRpZCBub3QgZmluZCAnZCcgZGlyZWN0aXZlIHBhdHRlcm4gc3RyaW5nICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuX3N0cmluZykKKworICAgIGRlZiB0ZXN0X3BhdHRlcm5fZXNjYXBpbmcoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGFueSBjaGFyYWN0ZXJzIGluIHRoZSBmb3JtYXQgc3RyaW5nIHRoYXQgbWlnaHQgYmUgdGFrZW4gYXMKKyAgICAgICAgIyByZWdleCBzeW50YXggaXMgZXNjYXBlZC4KKyAgICAgICAgcGF0dGVybl9zdHJpbmcgPSBzZWxmLnRpbWVfcmUucGF0dGVybigiXGQrIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyIlxcZFwrIiwgcGF0dGVybl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIiVzIGRvZXMgbm90IGhhdmUgcmUgY2hhcmFjdGVycyBlc2NhcGVkIHByb3Blcmx5IiAlCisgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybl9zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9jb21waWxlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgY29tcGlsZWQgcmVnZXggaXMgY29ycmVjdAorICAgICAgICBmb3VuZCA9IHNlbGYudGltZV9yZS5jb21waWxlKHIiJUEiKS5tYXRjaChzZWxmLmxvY2FsZV90aW1lLmZfd2Vla2RheVs2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kIGFuZCBmb3VuZC5ncm91cCgnQScpID09IHNlbGYubG9jYWxlX3RpbWUuZl93ZWVrZGF5WzZdLAorICAgICAgICAgICAgICAgICAgICAgICAgInJlIG9iamVjdCBmb3IgJyVBJyBmYWlsZWQiKQorICAgICAgICBjb21waWxlZCA9IHNlbGYudGltZV9yZS5jb21waWxlKHIiJWEgJWIiKQorICAgICAgICBmb3VuZCA9IGNvbXBpbGVkLm1hdGNoKCIlcyAlcyIgJSAoc2VsZi5sb2NhbGVfdGltZS5hX3dlZWtkYXlbNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NhbGVfdGltZS5hX21vbnRoWzRdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kLAorICAgICAgICAgICAgIk1hdGNoIGZhaWxlZCB3aXRoICclcycgcmVnZXggYW5kICclcycgc3RyaW5nIiAlCisgICAgICAgICAgICAgKGNvbXBpbGVkLnBhdHRlcm4sICIlcyAlcyIgJSAoc2VsZi5sb2NhbGVfdGltZS5hX3dlZWtkYXlbNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2NhbGVfdGltZS5hX21vbnRoWzRdKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZC5ncm91cCgnYScpID09IHNlbGYubG9jYWxlX3RpbWUuYV93ZWVrZGF5WzRdIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kLmdyb3VwKCdiJykgPT0gc2VsZi5sb2NhbGVfdGltZS5hX21vbnRoWzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgInJlIG9iamVjdCBjb3VsZG4ndCBmaW5kIHRoZSBhYmJyZXZpYXRlZCB3ZWVrZGF5IG1vbnRoIGluICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyB1c2luZyAnJXMnOyBncm91cCAnYScgPSAnJXMnLCBncm91cCAnYicgPSAlcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZm91bmQuc3RyaW5nLCBmb3VuZC5yZS5wYXR0ZXJuLCBmb3VuZC5ncm91cCgnYScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZC5ncm91cCgnYicpKSkKKyAgICAgICAgZm9yIGRpcmVjdGl2ZSBpbiAoJ2EnLCdBJywnYicsJ0InLCdjJywnZCcsJ0gnLCdJJywnaicsJ20nLCdNJywncCcsJ1MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnVScsJ3cnLCdXJywneCcsJ1gnLCd5JywnWScsJ1onLCclJyk6CisgICAgICAgICAgICBjb21waWxlZCA9IHNlbGYudGltZV9yZS5jb21waWxlKCIlIiArIGRpcmVjdGl2ZSkKKyAgICAgICAgICAgIGZvdW5kID0gY29tcGlsZWQubWF0Y2godGltZS5zdHJmdGltZSgiJSIgKyBkaXJlY3RpdmUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kLCAiTWF0Y2hpbmcgZmFpbGVkIG9uICclcycgdXNpbmcgJyVzJyByZWdleCIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpbWUuc3RyZnRpbWUoIiUiICsgZGlyZWN0aXZlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZC5wYXR0ZXJuKSkKKworICAgIGRlZiB0ZXN0X2JsYW5rcGF0dGVybihzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgd2hlbiB0dXBsZSBvciBzb21ldGhpbmcgaGFzIG5vIHZhbHVlcyBubyByZWdleCBpcyBnZW5lcmF0ZWQuCisgICAgICAgICMgRml4ZXMgYnVnICM2NjEzNTQKKyAgICAgICAgdGVzdF9sb2NhbGUgPSBfc3RycHRpbWUuTG9jYWxlVGltZSgpCisgICAgICAgIHRlc3RfbG9jYWxlLnRpbWV6b25lID0gKGZyb3plbnNldCgpLCBmcm96ZW5zZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfc3RycHRpbWUuVGltZVJFKHRlc3RfbG9jYWxlKS5wYXR0ZXJuKCIlWiIpLCAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aCB0aW1lem9uZSA9PSAoJycsJycpLCBUaW1lUkUoKS5wYXR0ZXJuKCclWicpICE9ICcnIikKKworICAgIGRlZiB0ZXN0X21hdGNoaW5nX3dpdGhfZXNjYXBlcyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgYSBmb3JtYXQgdGhhdCByZXF1aXJlcyBlc2NhcGluZyBvZiBjaGFyYWN0ZXJzIHdvcmtzCisgICAgICAgIGNvbXBpbGVkX3JlID0gc2VsZi50aW1lX3JlLmNvbXBpbGUoIlx3KyAlbSIpCisgICAgICAgIGZvdW5kID0gY29tcGlsZWRfcmUubWF0Y2goIlx3KyAxMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCwgIkVzY2FwaW5nIGZhaWxlZCBvZiBmb3JtYXQgJ1x3KyAxMCciKQorCisgICAgZGVmIHRlc3RfbG9jYWxlX2RhdGFfd19yZWdleF9tZXRhY2hhcmFjdGVycyhzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGlmIGxvY2FsZSBkYXRhIGNvbnRhaW5zIHJlZ2V4IG1ldGFjaGFyYWN0ZXJzIHRoZXkgYXJlCisgICAgICAgICMgZXNjYXBlZCBwcm9wZXJseS4KKyAgICAgICAgIyBEaXNjb3ZlcmVkIGJ5IGJ1ZyAjMTAzOTI3MCAuCisgICAgICAgIGxvY2FsZV90aW1lID0gX3N0cnB0aW1lLkxvY2FsZVRpbWUoKQorICAgICAgICBsb2NhbGVfdGltZS50aW1lem9uZSA9IChmcm96ZW5zZXQoKCJ1dGMiLCAiZ210IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRva3lvIChzdGFuZGFyZCB0aW1lKSIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvemVuc2V0KCJUb2t5byAoZGF5bGlnaHQgdGltZSkiKSkKKyAgICAgICAgdGltZV9yZSA9IF9zdHJwdGltZS5UaW1lUkUobG9jYWxlX3RpbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lX3JlLmNvbXBpbGUoIiVaIikubWF0Y2goIlRva3lvIChzdGFuZGFyZCB0aW1lKSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsZSBkYXRhIHRoYXQgY29udGFpbnMgcmVnZXggbWV0YWNoYXJhY3RlcnMgaXMgbm90IgorICAgICAgICAgICAgICAgICAgICAgICAgIiBwcm9wZXJseSBlc2NhcGVkIikKKworICAgIGRlZiB0ZXN0X3doaXRlc3BhY2Vfc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICAjIFdoZW4gcGF0dGVybiBjb250YWlucyB3aGl0ZXNwYWNlLCBtYWtlIHN1cmUgaXQgaXMgdGFrZW4gaW50byBhY2NvdW50CisgICAgICAgICMgc28gYXMgdG8gbm90IGFsbG93IHRvIHN1YnBhdHRlcm5zIHRvIGVuZCB1cCBuZXh0IHRvIGVhY2ggb3RoZXIgYW5kCisgICAgICAgICMgInN0ZWFsIiBjaGFyYWN0ZXJzIGZyb20gZWFjaCBvdGhlci4KKyAgICAgICAgcGF0dGVybiA9IHNlbGYudGltZV9yZS5wYXR0ZXJuKCclaiAlSCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmUubWF0Y2gocGF0dGVybiwgIjE4MCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocGF0dGVybiwgIjE4IDAiKSkKKworCitjbGFzcyBTdHJwdGltZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBmb3IgX3N0cnB0aW1lLnN0cnB0aW1lLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgdGVzdGluZyB0aW1lIHR1cGxlLiIiIgorICAgICAgICBzZWxmLnRpbWVfdHVwbGUgPSB0aW1lLmdtdGltZSgpCisKKyAgICBkZWYgdGVzdF9WYWx1ZUVycm9yKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBWYWx1ZUVycm9yIGlzIHJhaXNlZCB3aGVuIG1hdGNoIGZhaWxzIG9yIGZvcm1hdCBpcyBiYWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lLCBkYXRhX3N0cmluZz0iJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9IiVBIikKKyAgICAgICAgZm9yIGJhZF9mb3JtYXQgaW4gKCIlIiwgIiUgIiwgIiVlIik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCIyMDA1IiwgYmFkX2Zvcm1hdCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlcnI6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCInJXMnIHJhaXNlZCAlcywgbm90IFZhbHVlRXJyb3IiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmFkX2Zvcm1hdCwgZXJyLl9fY2xhc3NfXy5fX25hbWVfXykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJyVzJyBkaWQgbm90IHJhaXNlIFZhbHVlRXJyb3IiICUgYmFkX2Zvcm1hdCkKKworICAgIGRlZiB0ZXN0X3VuY29udmVydGVkZGF0YShzZWxmKToKKyAgICAgICAgIyBDaGVjayBWYWx1ZUVycm9yIGlzIHJhaXNlZCB3aGVuIHRoZXJlIGlzIHVuY29udmVydGVkIGRhdGEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lLCAiMTAgMTIiLCAiJW0iKQorCisgICAgZGVmIGhlbHBlcihzZWxmLCBkaXJlY3RpdmUsIHBvc2l0aW9uKToKKyAgICAgICAgIiIiSGVscGVyIGZ4biBpbiB0ZXN0aW5nLiIiIgorICAgICAgICBzdHJmX291dHB1dCA9IHRpbWUuc3RyZnRpbWUoIiUiICsgZGlyZWN0aXZlLCBzZWxmLnRpbWVfdHVwbGUpCisgICAgICAgIHN0cnBfb3V0cHV0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHN0cmZfb3V0cHV0LCAiJSIgKyBkaXJlY3RpdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJwX291dHB1dFtwb3NpdGlvbl0gPT0gc2VsZi50aW1lX3R1cGxlW3Bvc2l0aW9uXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0aW5nIG9mICclcycgZGlyZWN0aXZlIGZhaWxlZDsgJyVzJyAtPiAlcyAhPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChkaXJlY3RpdmUsIHN0cmZfb3V0cHV0LCBzdHJwX291dHB1dFtwb3NpdGlvbl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGltZV90dXBsZVtwb3NpdGlvbl0pKQorCisgICAgZGVmIHRlc3RfeWVhcihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIHllYXIgaXMgaGFuZGxlZCBwcm9wZXJseQorICAgICAgICBmb3IgZGlyZWN0aXZlIGluICgneScsICdZJyk6CisgICAgICAgICAgICBzZWxmLmhlbHBlcihkaXJlY3RpdmUsIDApCisgICAgICAgICMgTXVzdCBhbHNvIG1ha2Ugc3VyZSAleSB2YWx1ZXMgYXJlIGNvcnJlY3QgZm9yIGJvdW5kcyBzZXQgYnkgT3BlbiBHcm91cAorICAgICAgICBmb3IgY2VudHVyeSwgYm91bmRzIGluICgoMTkwMCwgKCc2OScsICc5OScpKSwgKDIwMDAsICgnMDAnLCAnNjgnKSkpOgorICAgICAgICAgICAgZm9yIGJvdW5kIGluIGJvdW5kczoKKyAgICAgICAgICAgICAgICBzdHJwX291dHB1dCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShib3VuZCwgJyV5JykKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9yZXN1bHQgPSBjZW50dXJ5ICsgaW50KGJvdW5kKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJwX291dHB1dFswXSA9PSBleHBlY3RlZF9yZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIneScgdGVzdCBmYWlsZWQ7IHBhc3NlZCBpbiAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZCByZXR1cm5lZCAnJXMnIiAlIChib3VuZCwgc3RycF9vdXRwdXRbMF0pKQorCisgICAgZGVmIHRlc3RfbW9udGgoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgbW9udGggZGlyZWN0aXZlcworICAgICAgICBmb3IgZGlyZWN0aXZlIGluICgnQicsICdiJywgJ20nKToKKyAgICAgICAgICAgIHNlbGYuaGVscGVyKGRpcmVjdGl2ZSwgMSkKKworICAgIGRlZiB0ZXN0X2RheShzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBkYXkgZGlyZWN0aXZlcworICAgICAgICBzZWxmLmhlbHBlcignZCcsIDIpCisKKyAgICBkZWYgdGVzdF9ob3VyKHNlbGYpOgorICAgICAgICAjIFRlc3QgaG91ciBkaXJlY3RpdmVzCisgICAgICAgIHNlbGYuaGVscGVyKCdIJywgMykKKyAgICAgICAgc3RyZl9vdXRwdXQgPSB0aW1lLnN0cmZ0aW1lKCIlSSAlcCIsIHNlbGYudGltZV90dXBsZSkKKyAgICAgICAgc3RycF9vdXRwdXQgPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoc3RyZl9vdXRwdXQsICIlSSAlcCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJwX291dHB1dFszXSA9PSBzZWxmLnRpbWVfdHVwbGVbM10sCisgICAgICAgICAgICAgICAgICAgICAgICAidGVzdGluZyBvZiAnJSVJICUlcCcgZGlyZWN0aXZlIGZhaWxlZDsgJyVzJyAtPiAlcyAhPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJmX291dHB1dCwgc3RycF9vdXRwdXRbM10sIHNlbGYudGltZV90dXBsZVszXSkpCisKKyAgICBkZWYgdGVzdF9taW51dGUoc2VsZik6CisgICAgICAgICMgVGVzdCBtaW51dGUgZGlyZWN0aXZlcworICAgICAgICBzZWxmLmhlbHBlcignTScsIDQpCisKKyAgICBkZWYgdGVzdF9zZWNvbmQoc2VsZik6CisgICAgICAgICMgVGVzdCBzZWNvbmQgZGlyZWN0aXZlcworICAgICAgICBzZWxmLmhlbHBlcignUycsIDUpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IG1pY3Jvc2Vjb25kcworICAgICAgICBpbXBvcnQgZGF0ZXRpbWUKKyAgICAgICAgZCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMTIsIDEyLCAyMCwgMTIsIDM0LCA1NiwgNzg5ODcpCisgICAgICAgIHR1cCwgZnJhYyA9IF9zdHJwdGltZS5fc3RycHRpbWUoc3RyKGQpLCBmb3JtYXQ9IiVZLSVtLSVkICVIOiVNOiVTLiVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcmFjLCBkLm1pY3Jvc2Vjb25kKQorCisgICAgZGVmIHRlc3Rfd2Vla2RheShzZWxmKToKKyAgICAgICAgIyBUZXN0IHdlZWtkYXkgZGlyZWN0aXZlcworICAgICAgICBmb3IgZGlyZWN0aXZlIGluICgnQScsICdhJywgJ3cnKToKKyAgICAgICAgICAgIHNlbGYuaGVscGVyKGRpcmVjdGl2ZSw2KQorCisgICAgZGVmIHRlc3RfanVsaWFuKHNlbGYpOgorICAgICAgICAjIFRlc3QganVsaWFuIGRpcmVjdGl2ZXMKKyAgICAgICAgc2VsZi5oZWxwZXIoJ2onLCA3KQorCisgICAgZGVmIHRlc3RfdGltZXpvbmUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aW1lem9uZSBkaXJlY3RpdmVzLgorICAgICAgICAjIFdoZW4gZ210aW1lKCkgaXMgdXNlZCB3aXRoICVaLCBlbnRpcmUgcmVzdWx0IG9mIHN0cmZ0aW1lKCkgaXMgZW1wdHkuCisgICAgICAgICMgQ2hlY2sgZm9yIGVxdWFsIHRpbWV6b25lIG5hbWVzIGRlYWxzIHdpdGggYmFkIGxvY2FsZSBpbmZvIHdoZW4gdGhpcworICAgICAgICAjIG9jY3VyczsgZmlyc3QgZm91bmQgaW4gRnJlZUJTRCA0LjQuCisgICAgICAgIHN0cnBfb3V0cHV0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCJVVEMiLCAiJVoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnBfb3V0cHV0LnRtX2lzZHN0LCAwKQorICAgICAgICBzdHJwX291dHB1dCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgiR01UIiwgIiVaIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJwX291dHB1dC50bV9pc2RzdCwgMCkKKyAgICAgICAgdGltZV90dXBsZSA9IHRpbWUubG9jYWx0aW1lKCkKKyAgICAgICAgc3RyZl9vdXRwdXQgPSB0aW1lLnN0cmZ0aW1lKCIlWiIpICAjVVRDIGRvZXMgbm90IGhhdmUgYSB0aW1lem9uZQorICAgICAgICBzdHJwX291dHB1dCA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShzdHJmX291dHB1dCwgIiVaIikKKyAgICAgICAgbG9jYWxlX3RpbWUgPSBfc3RycHRpbWUuTG9jYWxlVGltZSgpCisgICAgICAgIGlmIHRpbWUudHpuYW1lWzBdICE9IHRpbWUudHpuYW1lWzFdIG9yIG5vdCB0aW1lLmRheWxpZ2h0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cnBfb3V0cHV0WzhdID09IHRpbWVfdHVwbGVbOF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWV6b25lIGNoZWNrIGZhaWxlZDsgJyVzJyAtPiAlcyAhPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyZl9vdXRwdXQsIHN0cnBfb3V0cHV0WzhdLCB0aW1lX3R1cGxlWzhdKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJwX291dHB1dFs4XSA9PSAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9jYWxlVGltZSgpLnRpbWV6b25lIGhhcyBkdXBsaWNhdGUgdmFsdWVzIGFuZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lLmRheWxpZ2h0IGJ1dCB0aW1lem9uZSB2YWx1ZSBub3Qgc2V0IHRvIC0xIikKKworICAgIGRlZiB0ZXN0X2JhZF90aW1lem9uZShzZWxmKToKKyAgICAgICAgIyBFeHBsaWNpdGx5IHRlc3QgcG9zc2liaWxpdHkgb2YgYmFkIHRpbWV6b25lOworICAgICAgICAjIHdoZW4gdGltZS50em5hbWVbMF0gPT0gdGltZS50em5hbWVbMV0gYW5kIHRpbWUuZGF5bGlnaHQKKyAgICAgICAgdHpfbmFtZSA9IHRpbWUudHpuYW1lWzBdCisgICAgICAgIGlmIHR6X25hbWUudXBwZXIoKSBpbiAoIlVUQyIsICJHTVQiKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcmlnaW5hbF90em5hbWUgPSB0aW1lLnR6bmFtZQorICAgICAgICAgICAgb3JpZ2luYWxfZGF5bGlnaHQgPSB0aW1lLmRheWxpZ2h0CisgICAgICAgICAgICB0aW1lLnR6bmFtZSA9ICh0el9uYW1lLCB0el9uYW1lKQorICAgICAgICAgICAgdGltZS5kYXlsaWdodCA9IDEKKyAgICAgICAgICAgIHR6X3ZhbHVlID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHR6X25hbWUsICIlWiIpWzhdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR6X3ZhbHVlLCAtMSwKKyAgICAgICAgICAgICAgICAgICAgIiVzIGxlYWQgdG8gYSB0aW1lem9uZSB2YWx1ZSBvZiAlcyBpbnN0ZWFkIG9mIC0xIHdoZW4gIgorICAgICAgICAgICAgICAgICAgICAidGltZS5kYXlsaWdodCBzZXQgdG8gJXMgYW5kIHBhc3NpbmcgaW4gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgKHRpbWUudHpuYW1lLCB0el92YWx1ZSwgdGltZS5kYXlsaWdodCwgdHpfbmFtZSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0aW1lLnR6bmFtZSA9IG9yaWdpbmFsX3R6bmFtZQorICAgICAgICAgICAgdGltZS5kYXlsaWdodCA9IG9yaWdpbmFsX2RheWxpZ2h0CisKKyAgICBkZWYgdGVzdF9kYXRlX3RpbWUoc2VsZik6CisgICAgICAgICMgVGVzdCAlYyBkaXJlY3RpdmUKKyAgICAgICAgZm9yIHBvc2l0aW9uIGluIHJhbmdlKDYpOgorICAgICAgICAgICAgc2VsZi5oZWxwZXIoJ2MnLCBwb3NpdGlvbikKKworICAgIGRlZiB0ZXN0X2RhdGUoc2VsZik6CisgICAgICAgICMgVGVzdCAleCBkaXJlY3RpdmUKKyAgICAgICAgZm9yIHBvc2l0aW9uIGluIHJhbmdlKDAsMyk6CisgICAgICAgICAgICBzZWxmLmhlbHBlcigneCcsIHBvc2l0aW9uKQorCisgICAgZGVmIHRlc3RfdGltZShzZWxmKToKKyAgICAgICAgIyBUZXN0ICVYIGRpcmVjdGl2ZQorICAgICAgICBmb3IgcG9zaXRpb24gaW4gcmFuZ2UoMyw2KToKKyAgICAgICAgICAgIHNlbGYuaGVscGVyKCdYJywgcG9zaXRpb24pCisKKyAgICBkZWYgdGVzdF9wZXJjZW50KHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSAlIHNpZ25zIGFyZSBoYW5kbGVkIHByb3Blcmx5CisgICAgICAgIHN0cmZfb3V0cHV0ID0gdGltZS5zdHJmdGltZSgiJW0gJSUgJVkiLCBzZWxmLnRpbWVfdHVwbGUpCisgICAgICAgIHN0cnBfb3V0cHV0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHN0cmZfb3V0cHV0LCAiJW0gJSUgJVkiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RycF9vdXRwdXRbMF0gPT0gc2VsZi50aW1lX3R1cGxlWzBdIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnBfb3V0cHV0WzFdID09IHNlbGYudGltZV90dXBsZVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYW5kbGluZyBvZiBwZXJjZW50IHNpZ24gZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X2Nhc2VpbnNlbnNpdGl2ZShzZWxmKToKKyAgICAgICAgIyBTaG91bGQgaGFuZGxlIG5hbWVzIGNhc2UtaW5zZW5zaXRpdmVseS4KKyAgICAgICAgc3RyZl9vdXRwdXQgPSB0aW1lLnN0cmZ0aW1lKCIlQiIsIHNlbGYudGltZV90dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShzdHJmX291dHB1dC51cHBlcigpLCAiJUIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzdHJwdGltZSBkb2VzIG5vdCBoYW5kbGUgQUxMLUNBUFMgbmFtZXMgcHJvcGVybHkiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHN0cmZfb3V0cHV0Lmxvd2VyKCksICIlQiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInN0cnB0aW1lIGRvZXMgbm90IGhhbmRsZSBsb3dlcmNhc2UgbmFtZXMgcHJvcGVybHkiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHN0cmZfb3V0cHV0LmNhcGl0YWxpemUoKSwgIiVCIiksCisgICAgICAgICAgICAgICAgICAgICAgICAic3RycHRpbWUgZG9lcyBub3QgaGFuZGxlIGNhcHdvcmQgbmFtZXMgcHJvcGVybHkiKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdHMoc2VsZik6CisgICAgICAgICMgRGVmYXVsdCByZXR1cm4gdmFsdWUgc2hvdWxkIGJlICgxOTAwLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAwKQorICAgICAgICBkZWZhdWx0cyA9ICgxOTAwLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAtMSkKKyAgICAgICAgc3RycF9vdXRwdXQgPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoJzEnLCAnJW0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RycF9vdXRwdXQgPT0gZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAiRGVmYXVsdCB2YWx1ZXMgZm9yIHN0cnB0aW1lKCkgYXJlIGluY29ycmVjdDsiCisgICAgICAgICAgICAgICAgICAgICAgICAiICVzICE9ICVzIiAlIChzdHJwX291dHB1dCwgZGVmYXVsdHMpKQorCisgICAgZGVmIHRlc3RfZXNjYXBpbmcoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSByZWdleCBzaWduaWZpY2FuY2UgYXJlIGVzY2FwZWQuCisgICAgICAgICMgUGFyZW50aGVzZXMgYXJlIGluIGEgcHVycG9zZWZ1bCBvcmRlcjsgd2lsbCBjYXVzZSBhbiBlcnJvciBvZgorICAgICAgICAjIHVuYmFsYW5jZWQgcGFyZW50aGVzZXMgd2hlbiB0aGUgcmVnZXggaXMgY29tcGlsZWQgaWYgdGhleSBhcmUgbm90CisgICAgICAgICMgZXNjYXBlZC4KKyAgICAgICAgIyBUZXN0IGluc3RpZ2F0ZWQgYnkgYnVnICM3OTYxNDkgLgorICAgICAgICBuZWVkX2VzY2FwaW5nID0gIi5eJCorP3t9XFtdfCkoIgorICAgICAgICBzZWxmLmFzc2VydFRydWUoX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKG5lZWRfZXNjYXBpbmcsIG5lZWRfZXNjYXBpbmcpKQorCisgICAgZGVmIHRlc3RfZmViMjlfb25fbGVhcF95ZWFyX3dpdGhvdXRfeWVhcihzZWxmKToKKyAgICAgICAgdGltZS5zdHJwdGltZSgiRmViIDI5IiwgIiViICVkIikKKworICAgIGRlZiB0ZXN0X21hcjFfY29tZXNfYWZ0ZXJfZmViMjlfZXZlbl93aGVuX29taXR0aW5nX3RoZV95ZWFyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydExlc3MoCisgICAgICAgICAgICAgICAgdGltZS5zdHJwdGltZSgiRmViIDI5IiwgIiViICVkIiksCisgICAgICAgICAgICAgICAgdGltZS5zdHJwdGltZSgiTWFyIDEiLCAiJWIgJWQiKSkKKworY2xhc3MgU3RycHRpbWUxMkFNUE1UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIF9zdHJwdGltZSByZWdyZXNzaW9uIGluICclSSAlcCcgYXQgMTIgbm9vbiAoMTIgUE0pIiIiCisKKyAgICBkZWYgdGVzdF90d2VsdmVfbm9vbl9taWRuaWdodChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKHRpbWUuc3RycHRpbWUoJzEyIFBNJywgJyVJICVwJylbM10sIDEyKQorICAgICAgICBlcSh0aW1lLnN0cnB0aW1lKCcxMiBBTScsICclSSAlcCcpWzNdLCAwKQorICAgICAgICBlcShfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoJzEyIFBNJywgJyVJICVwJylbM10sIDEyKQorICAgICAgICBlcShfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoJzEyIEFNJywgJyVJICVwJylbM10sIDApCisKKworY2xhc3MgSnVsaWFuVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBfc3RycHRpbWUgcmVncmVzc2lvbiB0aGF0IGFsbCBqdWxpYW4gKDEtMzY2KSBhcmUgYWNjZXB0ZWQiIiIKKworICAgIGRlZiB0ZXN0X2FsbF9qdWxpYW5fZGF5cyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDM2Nyk6CisgICAgICAgICAgICAjIHVzZSAyMDA0LCBzaW5jZSBpdCBpcyBhIGxlYXAgeWVhciwgd2UgaGF2ZSAzNjYgZGF5cworICAgICAgICAgICAgZXEoX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCclZCAyMDA0JyAlIGksICclaiAlWScpWzddLCBpKQorCitjbGFzcyBDYWxjdWxhdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgc3RycHRpbWUoKSBmaWxscyBpbiBtaXNzaW5nIGluZm8gY29ycmVjdGx5IiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudGltZV90dXBsZSA9IHRpbWUuZ210aW1lKCkKKworICAgIGRlZiB0ZXN0X2p1bGlhbl9jYWxjdWxhdGlvbihzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3aGVuIEp1bGlhbiBpcyBtaXNzaW5nIHRoYXQgaXQgaXMgY2FsY3VsYXRlZAorICAgICAgICBmb3JtYXRfc3RyaW5nID0gIiVZICVtICVkICVIICVNICVTICV3ICVaIgorICAgICAgICByZXN1bHQgPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUodGltZS5zdHJmdGltZShmb3JtYXRfc3RyaW5nLCBzZWxmLnRpbWVfdHVwbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC50bV95ZGF5ID09IHNlbGYudGltZV90dXBsZS50bV95ZGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbGN1bGF0aW9uIG9mIHRtX3lkYXkgZmFpbGVkOyAlcyAhPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQudG1feWRheSwgc2VsZi50aW1lX3R1cGxlLnRtX3lkYXkpKQorCisgICAgZGVmIHRlc3RfZ3JlZ29yaWFuX2NhbGN1bGF0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBHcmVnb3JpYW4gZGF0ZSBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tIEp1bGlhbiBkYXkKKyAgICAgICAgZm9ybWF0X3N0cmluZyA9ICIlWSAlSCAlTSAlUyAldyAlaiAlWiIKKyAgICAgICAgcmVzdWx0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHRpbWUuc3RyZnRpbWUoZm9ybWF0X3N0cmluZywgc2VsZi50aW1lX3R1cGxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQudG1feWVhciA9PSBzZWxmLnRpbWVfdHVwbGUudG1feWVhciBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudG1fbW9uID09IHNlbGYudGltZV90dXBsZS50bV9tb24gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnRtX21kYXkgPT0gc2VsZi50aW1lX3R1cGxlLnRtX21kYXksCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2FsY3VsYXRpb24gb2YgR3JlZ29yaWFuIGRhdGUgZmFpbGVkOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMtJXMtJXMgIT0gJXMtJXMtJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0LnRtX3llYXIsIHJlc3VsdC50bV9tb24sIHJlc3VsdC50bV9tZGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVfdHVwbGUudG1feWVhciwgc2VsZi50aW1lX3R1cGxlLnRtX21vbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lX3R1cGxlLnRtX21kYXkpKQorCisgICAgZGVmIHRlc3RfZGF5X29mX3dlZWtfY2FsY3VsYXRpb24oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBkYXkgb2YgdGhlIHdlZWsgaXMgY2FsY3VsYXRlZCBhcyBuZWVkZWQKKyAgICAgICAgZm9ybWF0X3N0cmluZyA9ICIlWSAlbSAlZCAlSCAlUyAlaiAlWiIKKyAgICAgICAgcmVzdWx0ID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHRpbWUuc3RyZnRpbWUoZm9ybWF0X3N0cmluZywgc2VsZi50aW1lX3R1cGxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQudG1fd2RheSA9PSBzZWxmLnRpbWVfdHVwbGUudG1fd2RheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDYWxjdWxhdGlvbiBvZiBkYXkgb2YgdGhlIHdlZWsgZmFpbGVkOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgIT0gJXMiICUgKHJlc3VsdC50bV93ZGF5LCBzZWxmLnRpbWVfdHVwbGUudG1fd2RheSkpCisKKyAgICBkZWYgdGVzdF93ZWVrX29mX3llYXJfYW5kX2RheV9vZl93ZWVrX2NhbGN1bGF0aW9uKHNlbGYpOgorICAgICAgICAjIFNob3VsZCBiZSBhYmxlIHRvIGluZmVyIGRhdGUgaWYgZ2l2ZW4geWVhciwgd2VlayBvZiB5ZWFyICglVSBvciAlVykKKyAgICAgICAgIyBhbmQgZGF5IG9mIHRoZSB3ZWVrCisgICAgICAgIGRlZiB0ZXN0X2hlbHBlcih5bWRfdHVwbGUsIHRlc3RfcmVhc29uKToKKyAgICAgICAgICAgIGZvciBkaXJlY3RpdmUgaW4gKCdXJywgJ1UnKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfc3RyaW5nID0gIiUlWSAlJSVzICUldyIgJSBkaXJlY3RpdmUKKyAgICAgICAgICAgICAgICBkdF9kYXRlID0gZGF0ZXRpbWVfZGF0ZSgqeW1kX3R1cGxlKQorICAgICAgICAgICAgICAgIHN0cnBfaW5wdXQgPSBkdF9kYXRlLnN0cmZ0aW1lKGZvcm1hdF9zdHJpbmcpCisgICAgICAgICAgICAgICAgc3RycF9vdXRwdXQgPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoc3RycF9pbnB1dCwgZm9ybWF0X3N0cmluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RycF9vdXRwdXRbOjNdID09IHltZF90dXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlcyglcykgdGVzdCBmYWlsZWQgdy8gJyVzJzogJXMgIT0gJXMgKCVzICE9ICVzKSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0X3JlYXNvbiwgZGlyZWN0aXZlLCBzdHJwX2lucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJwX291dHB1dFs6M10sIHltZF90dXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RycF9vdXRwdXRbN10sIGR0X2RhdGUudGltZXR1cGxlKClbN10pKQorICAgICAgICB0ZXN0X2hlbHBlcigoMTkwMSwgMSwgMyksICJ3ZWVrIDAiKQorICAgICAgICB0ZXN0X2hlbHBlcigoMTkwMSwgMSwgOCksICJjb21tb24gY2FzZSIpCisgICAgICAgIHRlc3RfaGVscGVyKCgxOTAxLCAxLCAxMyksICJkYXkgb24gU3VuZGF5IikKKyAgICAgICAgdGVzdF9oZWxwZXIoKDE5MDEsIDEsIDE0KSwgImRheSBvbiBNb25kYXkiKQorICAgICAgICB0ZXN0X2hlbHBlcigoMTkwNSwgMSwgMSksICJKYW4gMSBvbiBTdW5kYXkiKQorICAgICAgICB0ZXN0X2hlbHBlcigoMTkwNiwgMSwgMSksICJKYW4gMSBvbiBNb25kYXkiKQorICAgICAgICB0ZXN0X2hlbHBlcigoMTkwNiwgMSwgNyksICJmaXJzdCBTdW5kYXkgaW4gYSB5ZWFyIHN0YXJ0aW5nIG9uIE1vbmRheSIpCisgICAgICAgIHRlc3RfaGVscGVyKCgxOTA1LCAxMiwgMzEpLCAiRGVjIDMxIG9uIFN1bmRheSIpCisgICAgICAgIHRlc3RfaGVscGVyKCgxOTA2LCAxMiwgMzEpLCAiRGVjIDMxIG9uIE1vbmRheSIpCisgICAgICAgIHRlc3RfaGVscGVyKCgyMDA4LCAxMiwgMjkpLCAiTW9uZGF5IGluIHRoZSBsYXN0IHdlZWsgb2YgdGhlIHllYXIiKQorICAgICAgICB0ZXN0X2hlbHBlcigoMjAwOCwgMTIsIDIyKSwgIk1vbmRheSBpbiB0aGUgc2Vjb25kLXRvLWxhc3Qgd2VlayBvZiB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInllYXIiKQorICAgICAgICB0ZXN0X2hlbHBlcigoMTk3OCwgMTAsIDIzKSwgInJhbmRvbWx5IGNob3NlbiBkYXRlIikKKyAgICAgICAgdGVzdF9oZWxwZXIoKDIwMDQsIDEyLCAxOCksICJyYW5kb21seSBjaG9zZW4gZGF0ZSIpCisgICAgICAgIHRlc3RfaGVscGVyKCgxOTc4LCAxMCwgMjMpLCAieWVhciBzdGFydGluZyBhbmQgZW5kaW5nIG9uIE1vbmRheSB3aGlsZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGUgbm90IG9uIFN1bmRheSBvciBNb25kYXkiKQorICAgICAgICB0ZXN0X2hlbHBlcigoMTkxNywgMTIsIDE3KSwgInllYXIgc3RhcnRpbmcgYW5kIGVuZGluZyBvbiBNb25kYXkgd2l0aCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImEgTW9uZGF5IG5vdCBhdCB0aGUgYmVnaW5uaW5nIG9yIGVuZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9mIHRoZSB5ZWFyIikKKyAgICAgICAgdGVzdF9oZWxwZXIoKDE5MTcsIDEyLCAzMSksICJEZWMgMzEgb24gTW9uZGF5IHdpdGggeWVhciBzdGFydGluZyBhbmQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmRpbmcgb24gTW9uZGF5IikKKyAgICAgICAgdGVzdF9oZWxwZXIoKDIwMDcsIDAxLCAwNyksICJGaXJzdCBTdW5kYXkgb2YgMjAwNyIpCisgICAgICAgIHRlc3RfaGVscGVyKCgyMDA3LCAwMSwgMTQpLCAiU2Vjb25kIFN1bmRheSBvZiAyMDA3IikKKyAgICAgICAgdGVzdF9oZWxwZXIoKDIwMDYsIDEyLCAzMSksICJMYXN0IFN1bmRheSBvZiAyMDA2IikKKyAgICAgICAgdGVzdF9oZWxwZXIoKDIwMDYsIDEyLCAyNCksICJTZWNvbmQgdG8gbGFzdCBTdW5kYXkgb2YgMjAwNiIpCisKKworY2xhc3MgQ2FjaGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IGNhY2hpbmcgd29ya3MgcHJvcGVybHkuIiIiCisKKyAgICBkZWYgdGVzdF90aW1lX3JlX3JlY3JlYXRpb24oc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGNhY2hlIGlzIHJlY3JlYXRlZCB3aGVuIGN1cnJlbnQgbG9jYWxlIGRvZXMgbm90IG1hdGNoIHdoYXQKKyAgICAgICAgIyBjYWNoZWQgb2JqZWN0IHdhcyBjcmVhdGVkIHdpdGguCisgICAgICAgIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgiMTAiLCAiJWQiKQorICAgICAgICBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoIjIwMDUiLCAiJVkiKQorICAgICAgICBfc3RycHRpbWUuX1RpbWVSRV9jYWNoZS5sb2NhbGVfdGltZS5sYW5nID0gIk5pIgorICAgICAgICBvcmlnaW5hbF90aW1lX3JlID0gX3N0cnB0aW1lLl9UaW1lUkVfY2FjaGUKKyAgICAgICAgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCIxMCIsICIlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qob3JpZ2luYWxfdGltZV9yZSwgX3N0cnB0aW1lLl9UaW1lUkVfY2FjaGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKF9zdHJwdGltZS5fcmVnZXhfY2FjaGUpLCAxKQorCisgICAgZGVmIHRlc3RfcmVnZXhfY2xlYW51cChzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgY2FjaGVkIHJlZ2V4ZXMgYXJlIGRpc2NhcmRlZCB3aGVuIGNhY2hlIGJlY29tZXMgImZ1bGwiLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgX3N0cnB0aW1lLl9yZWdleF9jYWNoZVsnJWQnXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGJvZ3VzX2tleSA9IDAKKyAgICAgICAgd2hpbGUgbGVuKF9zdHJwdGltZS5fcmVnZXhfY2FjaGUpIDw9IF9zdHJwdGltZS5fQ0FDSEVfTUFYX1NJWkU6CisgICAgICAgICAgICBfc3RycHRpbWUuX3JlZ2V4X2NhY2hlW2JvZ3VzX2tleV0gPSBOb25lCisgICAgICAgICAgICBib2d1c19rZXkgKz0gMQorICAgICAgICBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoIjEwIiwgIiVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oX3N0cnB0aW1lLl9yZWdleF9jYWNoZSksIDEpCisKKyAgICBkZWYgdGVzdF9uZXdfbG9jYWxldGltZShzZWxmKToKKyAgICAgICAgIyBBIG5ldyBMb2NhbGVUaW1lIGluc3RhbmNlIHNob3VsZCBiZSBjcmVhdGVkIHdoZW4gYSBuZXcgVGltZVJFIG9iamVjdAorICAgICAgICAjIGlzIGNyZWF0ZWQuCisgICAgICAgIGxvY2FsZV90aW1lX2lkID0gX3N0cnB0aW1lLl9UaW1lUkVfY2FjaGUubG9jYWxlX3RpbWUKKyAgICAgICAgX3N0cnB0aW1lLl9UaW1lUkVfY2FjaGUubG9jYWxlX3RpbWUubGFuZyA9ICJOaSIKKyAgICAgICAgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKCIxMCIsICIlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobG9jYWxlX3RpbWVfaWQsIF9zdHJwdGltZS5fVGltZVJFX2NhY2hlLmxvY2FsZV90aW1lKQorCisgICAgZGVmIHRlc3RfVGltZVJFX3JlY3JlYXRpb24oc2VsZik6CisgICAgICAgICMgVGhlIFRpbWVSRSBpbnN0YW5jZSBzaG91bGQgYmUgcmVjcmVhdGVkIHVwb24gY2hhbmdpbmcgdGhlIGxvY2FsZS4KKyAgICAgICAgbG9jYWxlX2luZm8gPSBsb2NhbGUuZ2V0bG9jYWxlKGxvY2FsZS5MQ19USU1FKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19USU1FLCAoJ2VuX1VTJywgJ1VURjgnKSkKKyAgICAgICAgZXhjZXB0IGxvY2FsZS5FcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoJzEwJywgJyVkJykKKyAgICAgICAgICAgICMgR2V0IGlkIG9mIGN1cnJlbnQgY2FjaGUgb2JqZWN0LgorICAgICAgICAgICAgZmlyc3RfdGltZV9yZSA9IF9zdHJwdGltZS5fVGltZVJFX2NhY2hlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBDaGFuZ2UgdGhlIGxvY2FsZSBhbmQgZm9yY2UgYSByZWNyZWF0aW9uIG9mIHRoZSBjYWNoZS4KKyAgICAgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19USU1FLCAoJ2RlX0RFJywgJ1VURjgnKSkKKyAgICAgICAgICAgICAgICBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoJzEwJywgJyVkJykKKyAgICAgICAgICAgICAgICAjIEdldCB0aGUgbmV3IGNhY2hlIG9iamVjdCdzIGlkLgorICAgICAgICAgICAgICAgIHNlY29uZF90aW1lX3JlID0gX3N0cnB0aW1lLl9UaW1lUkVfY2FjaGUKKyAgICAgICAgICAgICAgICAjIFRoZXkgc2hvdWxkIG5vdCBiZSBlcXVhbC4KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGZpcnN0X3RpbWVfcmUsIHNlY29uZF90aW1lX3JlKQorICAgICAgICAgICAgIyBQb3NzaWJsZSB0ZXN0IGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIHdoaWxlIGluaXRpYWwgbG9jYWxlIGlzLgorICAgICAgICAgICAgIyBJZiB0aGlzIGlzIHRoZSBjYXNlIGp1c3Qgc3VwcHJlc3MgdGhlIGV4Y2VwdGlvbiBhbmQgZmFsbC10aHJvdWdoCisgICAgICAgICAgICAjIHRvIHRoZSByZXNldHRpbmcgdG8gdGhlIG9yaWdpbmFsIGxvY2FsZS4KKyAgICAgICAgICAgIGV4Y2VwdCBsb2NhbGUuRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBkb24ndCB0cmFtcGxlIG9uIHRoZSBsb2NhbGUgc2V0dGluZyBvbmNlIHdlIGxlYXZlIHRoZQorICAgICAgICAjIHRlc3QuCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19USU1FLCBsb2NhbGVfaW5mbykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgZ2V0bGFuZ19UZXN0cywKKyAgICAgICAgTG9jYWxlVGltZV9UZXN0cywKKyAgICAgICAgVGltZVJFVGVzdHMsCisgICAgICAgIFN0cnB0aW1lVGVzdHMsCisgICAgICAgIFN0cnB0aW1lMTJBTVBNVGVzdHMsCisgICAgICAgIEp1bGlhblRlc3RzLAorICAgICAgICBDYWxjdWxhdGlvblRlc3RzLAorICAgICAgICBDYWNoZVRlc3RzCisgICAgKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0cnRvZC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0cnRvZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmM1OTVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3RydG9kLnB5CkBAIC0wLDAgKzEsMzk5IEBACisjIFRlc3RzIGZvciB0aGUgY29ycmVjdGx5LXJvdW5kZWQgc3RyaW5nIC0+IGZsb2F0IGNvbnZlcnNpb25zCisjIGludHJvZHVjZWQgaW4gUHl0aG9uIDIuNyBhbmQgMy4xLgorCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3RydWN0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCByZQoraW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworaWYgZ2V0YXR0cihzeXMsICdmbG9hdF9yZXByX3N0eWxlJywgJycpICE9ICdzaG9ydCc6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ2NvcnJlY3RseS1yb3VuZGVkIHN0cmluZy0+ZmxvYXQgY29udmVyc2lvbnMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtJykKKworIyBDb3JyZWN0bHkgcm91bmRlZCBzdHIgLT4gZmxvYXQgaW4gcHVyZSBQeXRob24sIGZvciBjb21wYXJpc29uLgorCitzdHJ0b2RfcGFyc2VyID0gcmUuY29tcGlsZShyIiIiICAgICMgQSBudW1lcmljIHN0cmluZyBjb25zaXN0cyBvZjoKKyAgICAoP1A8c2lnbj5bLStdKT8gICAgICAgICAgIyBhbiBvcHRpb25hbCBzaWduLCBmb2xsb3dlZCBieQorICAgICg/PVxkfFwuXGQpICAgICAgICAgICAgICAjIGEgbnVtYmVyIHdpdGggYXQgbGVhc3Qgb25lIGRpZ2l0CisgICAgKD9QPGludD5cZCopICAgICAgICAgICAgICMgaGF2aW5nIGEgKHBvc3NpYmx5IGVtcHR5KSBpbnRlZ2VyIHBhcnQKKyAgICAoPzpcLig/UDxmcmFjPlxkKikpPyAgICAgIyBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCBmcmFjdGlvbmFsIHBhcnQKKyAgICAoPzpFKD9QPGV4cD5bLStdP1xkKykpPyAgIyBhbmQgYW4gb3B0aW9uYWwgZXhwb25lbnQKKyAgICBcWgorIiIiLCByZS5WRVJCT1NFIHwgcmUuSUdOT1JFQ0FTRSkubWF0Y2gKKworIyBQdXJlIFB5dGhvbiB2ZXJzaW9uIG9mIGNvcnJlY3RseSByb3VuZGVkIHN0cmluZy0+ZmxvYXQgY29udmVyc2lvbi4KKyMgQXZvaWRzIGFueSB1c2Ugb2YgZmxvYXRpbmctcG9pbnQgYnkgcmV0dXJuaW5nIHRoZSByZXN1bHQgYXMgYSBoZXggc3RyaW5nLgorZGVmIHN0cnRvZChzLCBtYW50X2RpZz01MywgbWluX2V4cCA9IC0xMDIxLCBtYXhfZXhwID0gMTAyNCk6CisgICAgIiIiQ29udmVydCBhIGZpbml0ZSBkZWNpbWFsIHN0cmluZyB0byBhIGhleCBzdHJpbmcgcmVwcmVzZW50aW5nIGFuCisgICAgSUVFRSA3NTQgYmluYXJ5NjQgZmxvYXQuICBSZXR1cm4gJ2luZicgb3IgJy1pbmYnIG9uIG92ZXJmbG93LgorICAgIFRoaXMgZnVuY3Rpb24gbWFrZXMgbm8gdXNlIG9mIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgYXQgYW55CisgICAgc3RhZ2UuIiIiCisKKyAgICAjIHBhcnNlIHN0cmluZyBpbnRvIGEgcGFpciBvZiBpbnRlZ2VycyAnYScgYW5kICdiJyBzdWNoIHRoYXQKKyAgICAjIGFicyhkZWNpbWFsIHZhbHVlKSA9IGEvYiwgYWxvbmcgd2l0aCBhIGJvb2xlYW4gJ25lZ2F0aXZlJy4KKyAgICBtID0gc3RydG9kX3BhcnNlcihzKQorICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaW52YWxpZCBudW1lcmljIHN0cmluZycpCisgICAgZnJhY3Rpb24gPSBtLmdyb3VwKCdmcmFjJykgb3IgJycKKyAgICBpbnRwYXJ0ID0gaW50KG0uZ3JvdXAoJ2ludCcpICsgZnJhY3Rpb24pCisgICAgZXhwID0gaW50KG0uZ3JvdXAoJ2V4cCcpIG9yICcwJykgLSBsZW4oZnJhY3Rpb24pCisgICAgbmVnYXRpdmUgPSBtLmdyb3VwKCdzaWduJykgPT0gJy0nCisgICAgYSwgYiA9IGludHBhcnQqMTAqKm1heChleHAsIDApLCAxMCoqbWF4KDAsIC1leHApCisKKyAgICAjIHF1aWNrIHJldHVybiBmb3IgemVyb3MKKyAgICBpZiBub3QgYToKKyAgICAgICAgcmV0dXJuICctMHgwLjBwKzAnIGlmIG5lZ2F0aXZlIGVsc2UgJzB4MC4wcCswJworCisgICAgIyBjb21wdXRlIGV4cG9uZW50IGUgZm9yIHJlc3VsdDsgbWF5IGJlIG9uZSB0b28gc21hbGwgaW4gdGhlIGNhc2UKKyAgICAjIHRoYXQgdGhlIHJvdW5kZWQgdmFsdWUgb2YgYS9iIGxpZXMgaW4gYSBkaWZmZXJlbnQgYmluYWRlIGZyb20gYS9iCisgICAgZCA9IGEuYml0X2xlbmd0aCgpIC0gYi5iaXRfbGVuZ3RoKCkKKyAgICBkICs9IChhID4+IGQgaWYgZCA+PSAwIGVsc2UgYSA8PCAtZCkgPj0gYgorICAgIGUgPSBtYXgoZCwgbWluX2V4cCkgLSBtYW50X2RpZworCisgICAgIyBhcHByb3hpbWF0ZSBhL2IgYnkgbnVtYmVyIG9mIHRoZSBmb3JtIHEgKiAyKiplOyBhZGp1c3QgZSBpZiBuZWNlc3NhcnkKKyAgICBhLCBiID0gYSA8PCBtYXgoLWUsIDApLCBiIDw8IG1heChlLCAwKQorICAgIHEsIHIgPSBkaXZtb2QoYSwgYikKKyAgICBpZiAyKnIgPiBiIG9yIDIqciA9PSBiIGFuZCBxICYgMToKKyAgICAgICAgcSArPSAxCisgICAgICAgIGlmIHEuYml0X2xlbmd0aCgpID09IG1hbnRfZGlnKzE6CisgICAgICAgICAgICBxIC8vPSAyCisgICAgICAgICAgICBlICs9IDEKKworICAgICMgZG91YmxlIGNoZWNrIHRoYXQgKHEsIGUpIGhhcyB0aGUgcmlnaHQgZm9ybQorICAgIGFzc2VydCBxLmJpdF9sZW5ndGgoKSA8PSBtYW50X2RpZyBhbmQgZSA+PSBtaW5fZXhwIC0gbWFudF9kaWcKKyAgICBhc3NlcnQgcS5iaXRfbGVuZ3RoKCkgPT0gbWFudF9kaWcgb3IgZSA9PSBtaW5fZXhwIC0gbWFudF9kaWcKKworICAgICMgY2hlY2sgZm9yIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cKKyAgICBpZiBlICsgcS5iaXRfbGVuZ3RoKCkgPiBtYXhfZXhwOgorICAgICAgICByZXR1cm4gJy1pbmYnIGlmIG5lZ2F0aXZlIGVsc2UgJ2luZicKKyAgICBpZiBub3QgcToKKyAgICAgICAgcmV0dXJuICctMHgwLjBwKzAnIGlmIG5lZ2F0aXZlIGVsc2UgJzB4MC4wcCswJworCisgICAgIyBmb3IgaGV4IHJlcHJlc2VudGF0aW9uLCBzaGlmdCBzbyAjIGJpdHMgYWZ0ZXIgcG9pbnQgaXMgYSBtdWx0aXBsZSBvZiA0CisgICAgaGV4ZGlncyA9IDEgKyAobWFudF9kaWctMikvLzQKKyAgICBzaGlmdCA9IDMgLSAobWFudF9kaWctMiklNAorICAgIHEsIGUgPSBxIDw8IHNoaWZ0LCBlIC0gc2hpZnQKKyAgICByZXR1cm4gJ3t9MHh7Onh9Lns6MHt9eH1wezorZH0nLmZvcm1hdCgKKyAgICAgICAgJy0nIGlmIG5lZ2F0aXZlIGVsc2UgJycsCisgICAgICAgIHEgLy8gMTYqKmhleGRpZ3MsCisgICAgICAgIHEgJSAxNioqaGV4ZGlncywKKyAgICAgICAgaGV4ZGlncywKKyAgICAgICAgZSArIDQqaGV4ZGlncykKKworVEVTVF9TSVpFID0gMTAKKworY2xhc3MgU3RydG9kVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjaGVja19zdHJ0b2Qoc2VsZiwgcyk6CisgICAgICAgICIiIkNvbXBhcmUgdGhlIHJlc3VsdCBvZiBQeXRob24ncyBidWlsdGluIGNvcnJlY3RseSByb3VuZGVkCisgICAgICAgIHN0cmluZy0+ZmxvYXQgY29udmVyc2lvbiAodXNpbmcgZmxvYXQpIHRvIGEgcHVyZSBQeXRob24KKyAgICAgICAgY29ycmVjdGx5IHJvdW5kZWQgc3RyaW5nLT5mbG9hdCBpbXBsZW1lbnRhdGlvbi4gIEZhaWwgaWYgdGhlCisgICAgICAgIHR3byBtZXRob2RzIGdpdmUgZGlmZmVyZW50IHJlc3VsdHMuIiIiCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnMgPSBmbG9hdChzKQorICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgIGdvdCA9ICctaW5mJyBpZiBzWzBdID09ICctJyBlbHNlICdpbmYnCisgICAgICAgIGV4Y2VwdCBNZW1vcnlFcnJvcjoKKyAgICAgICAgICAgIGdvdCA9ICdtZW1vcnkgZXJyb3InCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBnb3QgPSBmcy5oZXgoKQorICAgICAgICBleHBlY3RlZCA9IHN0cnRvZChzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkluY29ycmVjdGx5IHJvdW5kZWQgc3RyLT5mbG9hdCBjb252ZXJzaW9uIGZvciB7fTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCB7fSwgZ290IHt9Ii5mb3JtYXQocywgZXhwZWN0ZWQsIGdvdCkpCisKKyAgICBkZWYgdGVzdF9zaG9ydF9oYWxmd2F5X2Nhc2VzKHNlbGYpOgorICAgICAgICAjIGV4YWN0IGhhbGZ3YXkgY2FzZXMgd2l0aCBhIHNtYWxsIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMKKyAgICAgICAgZm9yIGsgaW4gMCwgNSwgMTAsIDE1LCAyMDoKKyAgICAgICAgICAgICMgdXBwZXIgPSBzbWFsbGVzdCBpbnRlZ2VyID49IDIqKjU0LzUqKmsKKyAgICAgICAgICAgIHVwcGVyID0gLSgtMioqNTQvLzUqKmspCisgICAgICAgICAgICAjIGxvd2VyID0gc21hbGxlc3Qgb2RkIG51bWJlciA+PSAyKio1My81KiprCisgICAgICAgICAgICBsb3dlciA9IC0oLTIqKjUzLy81KiprKQorICAgICAgICAgICAgaWYgbG93ZXIgJSAyID09IDA6CisgICAgICAgICAgICAgICAgbG93ZXIgKz0gMQorICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKFRFU1RfU0laRSk6CisgICAgICAgICAgICAgICAgIyBTZWxlY3QgYSByYW5kb20gb2RkIG4gaW4gWzIqKjUzLzUqKmssCisgICAgICAgICAgICAgICAgIyAyKio1NC81KiprKS4gVGhlbiBuICogMTAqKmsgZ2l2ZXMgYSBoYWxmd2F5IGNhc2UKKyAgICAgICAgICAgICAgICAjIHdpdGggc21hbGwgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cy4KKyAgICAgICAgICAgICAgICBuLCBlID0gcmFuZG9tLnJhbmRyYW5nZShsb3dlciwgdXBwZXIsIDIpLCBrCisKKyAgICAgICAgICAgICAgICAjIFJlbW92ZSBhbnkgYWRkaXRpb25hbCBwb3dlcnMgb2YgNS4KKyAgICAgICAgICAgICAgICB3aGlsZSBuICUgNSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBuLCBlID0gbiAvLyA1LCBlICsgMQorICAgICAgICAgICAgICAgIGFzc2VydCBuICUgMTAgaW4gKDEsIDMsIDcsIDkpCisKKyAgICAgICAgICAgICAgICAjIFRyeSBudW1iZXJzIG9mIHRoZSBmb3JtIG4gKiAyKipwMiAqIDEwKiplLCBwMiA+PSAwLAorICAgICAgICAgICAgICAgICMgdW50aWwgbiAqIDIqKnAyIGhhcyBtb3JlIHRoYW4gMjAgc2lnbmlmaWNhbnQgZGlnaXRzLgorICAgICAgICAgICAgICAgIGRpZ2l0cywgZXhwb25lbnQgPSBuLCBlCisgICAgICAgICAgICAgICAgd2hpbGUgZGlnaXRzIDwgMTAqKjIwOgorICAgICAgICAgICAgICAgICAgICBzID0gJ3t9ZXt9Jy5mb3JtYXQoZGlnaXRzLCBleHBvbmVudCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKKyAgICAgICAgICAgICAgICAgICAgIyBTYW1lIGFnYWluLCBidXQgd2l0aCBleHRyYSB0cmFpbGluZyB6ZXJvcy4KKyAgICAgICAgICAgICAgICAgICAgcyA9ICd7fWV7fScuZm9ybWF0KGRpZ2l0cyAqIDEwKio0MCwgZXhwb25lbnQgLSA0MCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKKyAgICAgICAgICAgICAgICAgICAgZGlnaXRzICo9IDIKKworICAgICAgICAgICAgICAgICMgVHJ5IG51bWJlcnMgb2YgdGhlIGZvcm0gbiAqIDUqKnAyICogMTAqKihlIC0gcDUpLCBwNQorICAgICAgICAgICAgICAgICMgPj0gMCwgd2l0aCBuICogNSoqcDUgPCAxMCoqMjAuCisgICAgICAgICAgICAgICAgZGlnaXRzLCBleHBvbmVudCA9IG4sIGUKKyAgICAgICAgICAgICAgICB3aGlsZSBkaWdpdHMgPCAxMCoqMjA6CisgICAgICAgICAgICAgICAgICAgIHMgPSAne31le30nLmZvcm1hdChkaWdpdHMsIGV4cG9uZW50KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0cnRvZChzKQorICAgICAgICAgICAgICAgICAgICAjIFNhbWUgYWdhaW4sIGJ1dCB3aXRoIGV4dHJhIHRyYWlsaW5nIHplcm9zLgorICAgICAgICAgICAgICAgICAgICBzID0gJ3t9ZXt9Jy5mb3JtYXQoZGlnaXRzICogMTAqKjQwLCBleHBvbmVudCAtIDQwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0cnRvZChzKQorICAgICAgICAgICAgICAgICAgICBkaWdpdHMgKj0gNQorICAgICAgICAgICAgICAgICAgICBleHBvbmVudCAtPSAxCisKKyAgICBkZWYgdGVzdF9oYWxmd2F5X2Nhc2VzKHNlbGYpOgorICAgICAgICAjIHRlc3QgaGFsZndheSBjYXNlcyBmb3IgdGhlIHJvdW5kLWhhbGYtdG8tZXZlbiBydWxlCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDAgKiBURVNUX1NJWkUpOgorICAgICAgICAgICAgIyBiaXQgcGF0dGVybiBmb3IgYSByYW5kb20gZmluaXRlIHBvc2l0aXZlIChvciArMC4wKSBmbG9hdAorICAgICAgICAgICAgYml0cyA9IHJhbmRvbS5yYW5kcmFuZ2UoMjA0NyoyKio1MikKKworICAgICAgICAgICAgIyBjb252ZXJ0IGJpdCBwYXR0ZXJuIHRvIGEgbnVtYmVyIG9mIHRoZSBmb3JtIG0gKiAyKiplCisgICAgICAgICAgICBlLCBtID0gZGl2bW9kKGJpdHMsIDIqKjUyKQorICAgICAgICAgICAgaWYgZToKKyAgICAgICAgICAgICAgICBtLCBlID0gbSArIDIqKjUyLCBlIC0gMQorICAgICAgICAgICAgZSAtPSAxMDc0CisKKyAgICAgICAgICAgICMgYWRkIDAuNSB1bHBzCisgICAgICAgICAgICBtLCBlID0gMiptICsgMSwgZSAtIDEKKworICAgICAgICAgICAgIyBjb252ZXJ0IHRvIGEgZGVjaW1hbCBzdHJpbmcKKyAgICAgICAgICAgIGlmIGUgPj0gMDoKKyAgICAgICAgICAgICAgICBkaWdpdHMgPSBtIDw8IGUKKyAgICAgICAgICAgICAgICBleHBvbmVudCA9IDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBtICogMioqZSA9IChtICogNSoqLWUpICogMTAqKmUKKyAgICAgICAgICAgICAgICBkaWdpdHMgPSBtICogNSoqLWUKKyAgICAgICAgICAgICAgICBleHBvbmVudCA9IGUKKyAgICAgICAgICAgIHMgPSAne31le30nLmZvcm1hdChkaWdpdHMsIGV4cG9uZW50KQorICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKKworICAgIGRlZiB0ZXN0X2JvdW5kYXJpZXMoc2VsZik6CisgICAgICAgICMgYm91bmRhcmllcyBleHByZXNzZWQgYXMgdHJpcGxlcyAobiwgZSwgdSksIHdoZXJlCisgICAgICAgICMgbioxMCoqZSBpcyBhbiBhcHByb3hpbWF0aW9uIHRvIHRoZSBib3VuZGFyeSB2YWx1ZSBhbmQKKyAgICAgICAgIyB1KjEwKiplIGlzIDF1bHAKKyAgICAgICAgYm91bmRhcmllcyA9IFsKKyAgICAgICAgICAgICgxMDAwMDAwMDAwMDAwMDAwMDAwMCwgLTE5LCAxMTEwKSwgICAjIGEgcG93ZXIgb2YgMiBib3VuZGFyeSAoMS4wKQorICAgICAgICAgICAgKDE3OTc2OTMxMzQ4NjIzMTU5MDc3LCAyODksIDE5OTUpLCAgICMgb3ZlcmZsb3cgYm91bmRhcnkgKDIuKioxMDI0KQorICAgICAgICAgICAgKDIyMjUwNzM4NTg1MDcyMDEzODMxLCAtMzI3LCA0OTQxKSwgICMgbm9ybWFsL3N1Ym5vcm1hbCAoMi4qKi0xMDIyKQorICAgICAgICAgICAgKDAsIC0zMjcsIDQ5NDEpLCAgICAgICAgICAgICAgICAgICAgICMgemVybworICAgICAgICAgICAgXQorICAgICAgICBmb3IgbiwgZSwgdSBpbiBib3VuZGFyaWVzOgorICAgICAgICAgICAgZm9yIGogaW4geHJhbmdlKDEwMDApOgorICAgICAgICAgICAgICAgIGRpZ2l0cyA9IG4gKyByYW5kb20ucmFuZHJhbmdlKC0zKnUsIDMqdSkKKyAgICAgICAgICAgICAgICBleHBvbmVudCA9IGUKKyAgICAgICAgICAgICAgICBzID0gJ3t9ZXt9Jy5mb3JtYXQoZGlnaXRzLCBleHBvbmVudCkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0cnRvZChzKQorICAgICAgICAgICAgICAgIG4gKj0gMTAKKyAgICAgICAgICAgICAgICB1ICo9IDEwCisgICAgICAgICAgICAgICAgZSAtPSAxCisKKyAgICBkZWYgdGVzdF91bmRlcmZsb3dfYm91bmRhcnkoc2VsZik6CisgICAgICAgICMgdGVzdCB2YWx1ZXMgY2xvc2UgdG8gMioqLTEwNzUsIHRoZSB1bmRlcmZsb3cgYm91bmRhcnk7IHNpbWlsYXIKKyAgICAgICAgIyB0byBib3VuZGFyeV90ZXN0cywgZXhjZXB0IHRoYXQgdGhlIHJhbmRvbSBlcnJvciBkb2Vzbid0IHNjYWxlCisgICAgICAgICMgd2l0aCBuCisgICAgICAgIGZvciBleHBvbmVudCBpbiB4cmFuZ2UoLTQwMCwgLTMyMCk6CisgICAgICAgICAgICBiYXNlID0gMTAqKi1leHBvbmVudCAvLyAyKioxMDc1CisgICAgICAgICAgICBmb3IgaiBpbiB4cmFuZ2UoVEVTVF9TSVpFKToKKyAgICAgICAgICAgICAgICBkaWdpdHMgPSBiYXNlICsgcmFuZG9tLnJhbmRyYW5nZSgtMTAwMCwgMTAwMCkKKyAgICAgICAgICAgICAgICBzID0gJ3t9ZXt9Jy5mb3JtYXQoZGlnaXRzLCBleHBvbmVudCkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0cnRvZChzKQorCisgICAgZGVmIHRlc3RfYmlnY29tcChzZWxmKToKKyAgICAgICAgZm9yIG5kaWdzIGluIDUsIDEwLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgNDAsIDQxLCA1MDoKKyAgICAgICAgICAgIGRpZzEwID0gMTAqKm5kaWdzCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAgKiBURVNUX1NJWkUpOgorICAgICAgICAgICAgICAgIGRpZ2l0cyA9IHJhbmRvbS5yYW5kcmFuZ2UoZGlnMTApCisgICAgICAgICAgICAgICAgZXhwb25lbnQgPSByYW5kb20ucmFuZHJhbmdlKC00MDAsIDQwMCkKKyAgICAgICAgICAgICAgICBzID0gJ3t9ZXt9Jy5mb3JtYXQoZGlnaXRzLCBleHBvbmVudCkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0cnRvZChzKQorCisgICAgZGVmIHRlc3RfcGFyc2luZyhzZWxmKToKKyAgICAgICAgIyBtYWtlICcwJyBtb3JlIGxpa2VseSB0byBiZSBjaG9zZW4gdGhhbiBvdGhlciBkaWdpdHMKKyAgICAgICAgZGlnaXRzID0gJzAwMDAwMDEyMzQ1Njc4OScKKyAgICAgICAgc2lnbnMgPSAoJysnLCAnLScsICcnKQorCisgICAgICAgICMgcHV0IHRvZ2V0aGVyIHJhbmRvbSBzaG9ydCB2YWxpZCBzdHJpbmdzCisgICAgICAgICMgXGQqWy5cZCpdP2UKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDEwMDApOgorICAgICAgICAgICAgZm9yIGogaW4geHJhbmdlKFRFU1RfU0laRSk6CisgICAgICAgICAgICAgICAgcyA9IHJhbmRvbS5jaG9pY2Uoc2lnbnMpCisgICAgICAgICAgICAgICAgaW50cGFydF9sZW4gPSByYW5kb20ucmFuZHJhbmdlKDUpCisgICAgICAgICAgICAgICAgcyArPSAnJy5qb2luKHJhbmRvbS5jaG9pY2UoZGlnaXRzKSBmb3IgXyBpbiB4cmFuZ2UoaW50cGFydF9sZW4pKQorICAgICAgICAgICAgICAgIGlmIHJhbmRvbS5jaG9pY2UoW1RydWUsIEZhbHNlXSk6CisgICAgICAgICAgICAgICAgICAgIHMgKz0gJy4nCisgICAgICAgICAgICAgICAgICAgIGZyYWNwYXJ0X2xlbiA9IHJhbmRvbS5yYW5kcmFuZ2UoNSkKKyAgICAgICAgICAgICAgICAgICAgcyArPSAnJy5qb2luKHJhbmRvbS5jaG9pY2UoZGlnaXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIF8gaW4geHJhbmdlKGZyYWNwYXJ0X2xlbikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZnJhY3BhcnRfbGVuID0gMAorICAgICAgICAgICAgICAgIGlmIHJhbmRvbS5jaG9pY2UoW1RydWUsIEZhbHNlXSk6CisgICAgICAgICAgICAgICAgICAgIHMgKz0gcmFuZG9tLmNob2ljZShbJ2UnLCAnRSddKQorICAgICAgICAgICAgICAgICAgICBzICs9IHJhbmRvbS5jaG9pY2Uoc2lnbnMpCisgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50X2xlbiA9IHJhbmRvbS5yYW5kcmFuZ2UoMSwgNCkKKyAgICAgICAgICAgICAgICAgICAgcyArPSAnJy5qb2luKHJhbmRvbS5jaG9pY2UoZGlnaXRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIF8gaW4geHJhbmdlKGV4cG9uZW50X2xlbikpCisKKyAgICAgICAgICAgICAgICBpZiBpbnRwYXJ0X2xlbiArIGZyYWNwYXJ0X2xlbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdChzKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBGYWxzZSwgImV4cGVjdGVkIFZhbHVlRXJyb3IiCisKKyAgICBkZWYgdGVzdF9wYXJ0aWN1bGFyKHNlbGYpOgorICAgICAgICAjIGlucHV0cyB0aGF0IHByb2R1Y2VkIGNyYXNoZXMgb3IgaW5jb3JyZWN0bHkgcm91bmRlZCByZXN1bHRzIHdpdGgKKyAgICAgICAgIyBwcmV2aW91cyB2ZXJzaW9ucyBvZiBkdG9hLmMsIGZvciB2YXJpb3VzIHJlYXNvbnMKKyAgICAgICAgdGVzdF9zdHJpbmdzID0gWworICAgICAgICAgICAgIyBpc3N1ZSA3NjMyIGJ1ZyAxLCBvcmlnaW5hbGx5IHJlcG9ydGVkIGZhaWxpbmcgY2FzZQorICAgICAgICAgICAgJzIxODMxNjcwMTIzMTIxMTIzMTIzMTIuMjM1MzgwMjAzNzQ0MjA0NDYxOTJlLTM3MCcsCisgICAgICAgICAgICAjIDUgaW5zdGFuY2VzIG9mIGlzc3VlIDc2MzIgYnVnIDIKKyAgICAgICAgICAgICcxMjU3OTgxNjA0OTAwODMwNTU0Njk3NDM5MTc2ODk5NjM2OTQ2NDk2MzAyNDY2MzEwNGUtMzU3JywKKyAgICAgICAgICAgICcxNzQ4OTYyODU2NTIwMjExNzI2MzE0NTM2NzU5NjAyODM4OTM0ODkyMjk4MTg1NzAxM2UtMzU3JywKKyAgICAgICAgICAgICcxODQ4NzM5ODc4NTk5MTk5NDYzNDE4MjkxNjYzODU0MjY4MDc1OTYxMzU5MDQ4MjI3M2UtMzU3JywKKyAgICAgICAgICAgICczMjAwMjg2NDIwMDU4MTAzMzEzNDM1ODcyNDY3NTE5ODA0NDUyNzQ2OTM2Njc3MzkyOGUtMzU4JywKKyAgICAgICAgICAgICc5NDM5MzQzMTE5MzE4MDY5Njk0Mjg0MTgzNzA4NTAzMzY0NzkxMzIyNDE0ODUzOTg1NGUtMzU4JywKKyAgICAgICAgICAgICc3MzYwODI3ODk5ODk2Njk2OTM0NTgyNDY1MzUwMDEzNjc4Nzg3NjQzNjAwNTk1Nzk1M2UtMzU4JywKKyAgICAgICAgICAgICc2NDc3NDQ3ODgzNjQxNzI5OTQ5MTcxODQzNTIzNDYxMTI5OTMzNjI4ODA4MjEzNjA1NGUtMzU4JywKKyAgICAgICAgICAgICcxMzcwNDk0MDEzNDEyNjU3NDUzNDg3ODY0MTg3Njk0Nzk4MDg3ODgyNDY4ODQ1MTE2OWUtMzU3JywKKyAgICAgICAgICAgICc0NjY5NzQ0NTc3NDA0NzA2MDk2MDYyNDQ5Nzk2NDQyNTQxNjYxMDQ4MDUyNDc2MDQ3MWUtMzU4JywKKyAgICAgICAgICAgICMgZmFpbGluZyBjYXNlIGZvciBidWcgaW50cm9kdWNlZCBieSBNRVREIGluIHI3NzQ1MSAoYXR0ZW1wdGVkCisgICAgICAgICAgICAjIGZpeCBmb3IgaXNzdWUgNzYzMiwgYnVnIDIpLCBhbmQgZml4ZWQgaW4gcjc3NDgyLgorICAgICAgICAgICAgJzI4NjM5MDk3MTc4MjYxNzYzMTc4NDg5NzU5MTA3MzIxMzkyNzQ1MTA4NDkxODI1MzAzZS0zMTEnLAorICAgICAgICAgICAgIyB0d28gbnVtYmVycyBkZW1vbnN0cmF0aW5nIGEgZmxhdyBpbiB0aGUgYmlnY29tcCAnZGlnID09IDAnCisgICAgICAgICAgICAjIGNvcnJlY3Rpb24gYmxvY2sgKGlzc3VlIDc2MzIsIGJ1ZyAzKQorICAgICAgICAgICAgJzEuMDAwMDAwMDAwMDAwMDAwMDFlNDQnLAorICAgICAgICAgICAgJzEuMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWU0NCcsCisgICAgICAgICAgICAjIGR0b2EuYyBidWcgZm9yIG51bWJlcnMganVzdCBzbWFsbGVyIHRoYW4gYSBwb3dlciBvZiAyIChpc3N1ZQorICAgICAgICAgICAgIyA3NjMyLCBidWcgNCkKKyAgICAgICAgICAgICc5OTk5OTk5OTk5OTk5OTk5NDQ4NzY2NTQ2NTU1NDc2MDcxNzAzOTUzMjU3ODU0NmUtNDcnLAorICAgICAgICAgICAgIyBmYWlsaW5nIGNhc2UgZm9yIG9mZi1ieS1vbmUgZXJyb3IgaW50cm9kdWNlZCBieSBNRVREIGluCisgICAgICAgICAgICAjIHI3NzQ4MyAoZHRvYS5jIGNsZWFudXApLCBmaXhlZCBpbiByNzc0OTAKKyAgICAgICAgICAgICc5NjU0MzcxNzYzMzM2NTQ5MzE3OTkwMzU1MTM2NzE5OTcxMTgzNDU1NzAwNDU5MTQ0NjknICMuLi4KKyAgICAgICAgICAgICc2MjEzNDEzMzUwODIxNDE2MzEyMTk0NDIwMDA3OTkxMzA2OTA4NDcwMTQ3MzIyMDIwMTIxMDE4MzY4ZTAnLAorICAgICAgICAgICAgIyBpbmNvcnJlY3QgbHNiIGRldGVjdGlvbiBmb3Igcm91bmQtaGFsZi10by1ldmVuIHdoZW4KKyAgICAgICAgICAgICMgYmMtPnNjYWxlICE9IDAgKGlzc3VlIDc2MzIsIGJ1ZyA2KS4KKyAgICAgICAgICAgICcxMDQzMDg0ODUyNDE5ODM5OTA2NjY3MTM0MDE3MDgwNzIxNzU3NzMxNjUwMzQyNzg2ODUnICMuLi4KKyAgICAgICAgICAgICc2ODI2NDYxMTE3NjIyOTI0MDkzMzA5Mjg3Mzk3NTE3MDI0MDQ2NTgxOTc4NzIzMTkxMjknICMuLi4KKyAgICAgICAgICAgICcwMzY1MTk5NDc0MzUzMTk0MTgzODc4Mzk3NTg5OTA0Nzg1NDk0Nzc3Nzc1ODY2NzMwNzUnICMuLi4KKyAgICAgICAgICAgICc5NDU4NDQ4OTU5ODEwMTIwMjQzODc5OTIxMzU2MTcwNjQ1MzIxNDE0ODkyNzg4MTUyMzknICMuLi4KKyAgICAgICAgICAgICc4NDkxMDgxMDU5NTE2MTk5OTc4MjkxNTM2MzM1MzUzMTQ4NDk5OTk2NzQyNjYxNjkyNTgnICMuLi4KKyAgICAgICAgICAgICc5Mjg5NDA2OTIyMzk2ODQ3NzE1OTAwNjUwMjcwMjU4MzU4MDQ4NjM1ODU0NTQ4NzI0OTknICMuLi4KKyAgICAgICAgICAgICczMjA1MDAwMjMxMjYxNDI1NTM5MzI2NTQzNzAzNjIwMjQxMDQ0NjIyNTUyNDQwMzQwNTMnICMuLi4KKyAgICAgICAgICAgICcyMDM5OTg5NjQzNjA4ODI0ODczNzgzMzQ4NjAxOTc3MjUxMzkxNTEyNjU1OTA4MzI4ODcnICMuLi4KKyAgICAgICAgICAgICc0MzM3MzYxODk0Njg4NTg2MTQ1MjE3MDg1Njc2NDY3NDM0NTU2MDE5MDU5MzU1OTUzODEnICMuLi4KKyAgICAgICAgICAgICc4NTI3MjM3MjM2NDU3OTk4NjY2NzI1NTg1NzY5OTM5NzgwMjUwMzM1OTA3Mjg2ODcyMDYnICMuLi4KKyAgICAgICAgICAgICcyOTYzNzk4MDEzNjMwMjQwOTQwNDgzMjcyNzM5MTMwNzk2MTI0Njk5ODI1ODU2NzQ4MjQnICMuLi4KKyAgICAgICAgICAgICcxNTYwMDA3ODMxNjc5NjMwODE2MTYyMTQ3MTA2OTE3NTk4NjQzMzIzMzkyMzk2ODg3MzQnICMuLi4KKyAgICAgICAgICAgICc2NTY1NDg3OTA2NTY0ODY2NDYxMDY5ODM0NTA4MDkwNzM3NTA1MzU2MjQ4OTQyOTYyNDInICMuLi4KKyAgICAgICAgICAgICcwNzIwMTAxOTU3MTAyNzYwNzMwNDIwMzY0MjU1Nzk4NTI0NTk1NTYxODM1NDExOTkwMTInICMuLi4KKyAgICAgICAgICAgICc2NTI1NzExMjM4OTg5OTY1NzQ1NjM4MjQ0MjQzMzA5NjAwMjc4NzM1MTYwODI3NjM2NzE4NzVlLTEwNzUnLAorICAgICAgICAgICAgIyBkZW1vbnN0cmF0aW9uIHRoYXQgb3JpZ2luYWwgZml4IGZvciBpc3N1ZSA3NjMyIGJ1ZyAxIHdhcworICAgICAgICAgICAgIyBidWdneTsgdGhlIGV4aXQgY29uZGl0aW9uIHdhcyB0b28gc3Ryb25nCisgICAgICAgICAgICAnMjQ3MDMyODIyOTIwNjIzMjk1ZS0zNDEnLAorICAgICAgICAgICAgIyBkZW1vbnN0cmF0ZSBzaW1pbGFyIHByb2JsZW0gdG8gaXNzdWUgNzYzMiBidWcxOiBjcmFzaAorICAgICAgICAgICAgIyB3aXRoICdvdmVyc2l6ZWQgcXVvdGllbnQgaW4gcXVvcmVtJyBtZXNzYWdlLgorICAgICAgICAgICAgJzk5MDM3NDg1NzAwMjQ1NjgzMTAyODA1MDQzNDM3MzQ2OTY1MjQ4MDI5NjAxMjg2NDMxZS0zNzMnLAorICAgICAgICAgICAgJzk5NjE3NjM5ODMzNzQzODYzMTYxMTA5OTYxMTYyODgxMDI3NDA2NzY5NTEwNTU4NDU3ZS0zNzMnLAorICAgICAgICAgICAgJzk4ODUyOTE1MDI1NzY5MzQ1Mjk1NzQ5Mjc4MzUxNTYzMTc5ODQwMTMwNTY1NTkxNDYyZS0zNzInLAorICAgICAgICAgICAgJzk5MDU5OTQ0ODI3NjkzNTY5NjU5MTUzMDQyNzY5NjkwOTMwOTA1MTQ4MDE1ODc2Nzg4ZS0zNzMnLAorICAgICAgICAgICAgJzk4OTE0OTc5MjA1MDY5MzY4MjcwNDIxODI5ODg5MDc4MzU2MjU0MDU5NzYwMzI3MTAxZS0zNzInLAorICAgICAgICAgICAgIyBpc3N1ZSA3NjMyIGJ1ZyA1OiB0aGUgZm9sbG93aW5nIDIgc3RyaW5ncyBjb252ZXJ0IGRpZmZlcmVudGx5CisgICAgICAgICAgICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGUtMTYnLAorICAgICAgICAgICAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZS0xNycsCisgICAgICAgICAgICAjIGlzc3VlIDc2MzIgYnVnIDcKKyAgICAgICAgICAgICc5OTE2MzM3OTMxODkxNTA3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBlLTMzJywKKyAgICAgICAgICAgICMgQW5kIGFub3RoZXIsIHNpbWlsYXIsIGZhaWxpbmcgaGFsZndheSBjYXNlCisgICAgICAgICAgICAnNDEwNjI1MDE5ODAzOTQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGUtMzgnLAorICAgICAgICAgICAgIyBpc3N1ZSA3NjMyIGJ1ZyA4OiAgdGhlIGZvbGxvd2luZyBwcm9kdWNlZCAxMC4wCisgICAgICAgICAgICAnMTAuOTAwMDAwMDAwMDAwMDAwMDEyMzQ1Njc4OTEyMzQ1Njc4OTEyMzQ1JywKKworICAgICAgICAgICAgIyB0d28gaHVtb25nb3VzIHZhbHVlcyBmcm9tIGlzc3VlIDc3NDMKKyAgICAgICAgICAgICcxMTY1MTI4NzQ5NDA1OTQxOTU2Mzg2MTc5MDcwOTI1Njk4ODE1MTkwMzQ3OTMyMjkzODUnICMuLi4KKyAgICAgICAgICAgICcyMjg1NjkxNjUxOTE1NDE4OTA4NDY1NjQ2Njk3NzE3MTQ4OTY5MTYwODQ4ODM5ODc5MjAnICMuLi4KKyAgICAgICAgICAgICc0NzMzMjEyNjgxMDAyOTY4NTc2MzYyMDA5MjYwNjUzNDA3Njk2ODI4NjMzNDkyMDUzNjMnICMuLi4KKyAgICAgICAgICAgICczNDkyNDc2Mzc2NjA2NzE3ODMyMDk5MDc5NDkyNzM2ODMwNDAzOTc5Nzk5ODQxMDc4MDYnICMuLi4KKyAgICAgICAgICAgICc0NjE4MjI2OTMzMzI3MTI4MjgzOTc2MTc5NDYwMzYyMzk1ODE2MzI5NzY1ODUxMDA2MzMnICMuLi4KKyAgICAgICAgICAgICc1MjAyNjA3NzA3NjEwNjA3MjU0MDM5MDQxMjMxNDQzODQ1NzE2MTIwNzM3MzI3NTQ3NzQnICMuLi4KKyAgICAgICAgICAgICc1ODgyMTE5NDQ0MDY0NjU1NzI1OTEwMjIwODE5NzM4Mjg0NDg5MjczMzg2MDI1NTYyODcnICMuLi4KKyAgICAgICAgICAgICc4NTE4MzE3NDU0MTkzOTc0MzMwMTI0OTE4ODQ4Njk0NTQ0NjI0NDA1MzY4OTUwNDc0OTknICMuLi4KKyAgICAgICAgICAgICc0MzY1NTE5NzQ2NDk3MzE5MTcxNzAwOTkzODc3NjI4NzEwMjA0MDM1ODI5OTQxOTM0MzknICMuLi4KKyAgICAgICAgICAgICc3NjE5MzM0MTIxNjY4MjE0ODQwMTU4ODM2MzE2MjI1MzkzMTQyMDM3OTkwMzQ0OTc5ODInICMuLi4KKyAgICAgICAgICAgICcxMzAwMzg3NDE3NDE3Mjc5MDc0Mjk1NzU2NzMzMDI0NjEzODAzODY1OTY1MDExODc0ODInICMuLi4KKyAgICAgICAgICAgICcwMDYyNTc1Mjc3MDk4NDIxNzkzMzY0ODgzODE2NzI4MTg3OTg0NTAyMjkzMzkxMjM1MjcnICMuLi4KKyAgICAgICAgICAgICc4NTg4NDQ0NDgzMzY4MTU5MTIwMjA0NTIyOTQ2MjQ5MTY5OTM1NDYzODg5NTY1NjE1MjInICMuLi4KKyAgICAgICAgICAgICcxNjE4NzUzNTI1NzI1OTA0MjA4MjM2MDc0Nzg3ODgzOTk0NjAxNjIyMjgzMDg2OTM3NDInICMuLi4KKyAgICAgICAgICAgICcwNTI4NzY2MzQ0MTQwMzUzMzk0ODIwNDA4NTM5MDg5ODM5OTA1NTAwNDExOTg3MzA0Njg3NWUtMTA3NScsCisKKyAgICAgICAgICAgICc1MjU0NDA2NTMzNTI5NTUyNjYxMDk2NjEwNjAzNTgyMDI4MTk1NjEyNTg5ODQ5NjQ5MTMnICMuLi4KKyAgICAgICAgICAgICc4OTIyNTY1Mjc4NDk3NTg5NTYwNDUyMTgyNTcwNTk3MTM3NjU4NzQyNTE0MzYxOTM2MTknICMuLi4KKyAgICAgICAgICAgICc0NDMyNDgyMDU5OTg4NzAwMDE2MzM4NjU2NTc1MTc0NDczNTU5OTIyMjU4NTI5NDU5MTInICMuLi4KKyAgICAgICAgICAgICcwMTY2Njg2NjAwMDAyMTAyODM4MDcyMDk4NTA2NjIyMjQ0MTc1MDQ3NTIyNjQ5OTUzNjAnICMuLi4KKyAgICAgICAgICAgICc2MzE1MTIwMDc3NTM4NTU4MDEwNzUzNzMwNTc2MzIxNTc3Mzg3NTI4MDA4NDAzMDI1OTYnICMuLi4KKyAgICAgICAgICAgICcyMzcwNTAyNDc5MTA1MzA1MzgyNTAwMDg2ODIyNzI3ODM2NjA3NzgxODE2MjgwNDA3MzMnICMuLi4KKyAgICAgICAgICAgICc2NTMxMjE0OTI0MzY0MDg4MTI2NjgwMjM0NzgwMDEyMDg1MjkxOTAzNTkyNTQzMjIzNDAnICMuLi4KKyAgICAgICAgICAgICczOTc1NzUxODUyNDg4NDQ3ODg1MTU0MTA3MjI5NTg3ODQ2NDA5MjY1Mjg1NDQwNDMwOTAnICMuLi4KKyAgICAgICAgICAgICcxMTUzNTI1MTM2NDA4ODQ5ODgwMTczNDI0NjkyNzUwMDY5OTkxMDQ1MTk2MjA5NDY0MzAnICMuLi4KKyAgICAgICAgICAgICc4MTg3NjcxNDc5NjY0OTU0ODU0MDY1Nzc3MDM5NzI2ODc4MzgxNzY3Nzg5OTM0NzI5ODknICMuLi4KKyAgICAgICAgICAgICc1NjE5NTkwMDAwNDcwMzY2Mzg5MzgzOTYzMzMxNDY2ODUxMzc5MDMwMTgzNzY0OTY0MDgnICMuLi4KKyAgICAgICAgICAgICczMTk3MDUzMzM4Njg0NzY5MjUyOTczMTcxMzY1MTM5NzAxODkwNzM2OTMzMTQ3MTAzMTgnICMuLi4KKyAgICAgICAgICAgICc5OTEyNTI4MTEwNTA1MDE0NDgzMjY4NzUyMzI4NTA2MDA0NTE3NzYwOTEzMDMwNDM3MTUnICMuLi4KKyAgICAgICAgICAgICcxNTcxOTEyOTI4Mjc2MTQwNDY4NzY5NTAyMjU3MTQ3NDMxMTgyOTEwMzQ3ODA0NjYzMjUnICMuLi4KKyAgICAgICAgICAgICcwODUxNDEzNDM3MzQ1NjQ5MTUxOTM0MjY5OTQ1ODcyMDY0MzI2OTczMzcxMTgyMTE1MjcnICMuLi4KKyAgICAgICAgICAgICcyNzg5Njg3MzEyOTQ2MzkzNTMzNTQ3NzQ3ODg2MDI0Njc3OTUxNjc4NzUxMTc0ODE2NjAnICMuLi4KKyAgICAgICAgICAgICc0NzM4NzkxMjU2ODUzNjc1NjkwNTQzNjYzMjgzNzgyMjE1ODY2ODI1ZS0xMTgwJywKKworICAgICAgICAgICAgIyBleGVyY2lzZSBleGl0IGNvbmRpdGlvbnMgaW4gYmlnY29tcCBjb21wYXJpc29uIGxvb3AKKyAgICAgICAgICAgICcyNjAyMTI5Mjk4NDA0OTYzMDgzODMzODUzNDc5MTEzNTc3MjUzMTA1OTM5OTk1Njg4ZTInLAorICAgICAgICAgICAgJzI2MDIxMjkyOTg0MDQ5NjMwODM4MzM4NTM0NzkxMTM1NzcyNTMxMDU5Mzk5OTU2ODg5NmUwJywKKyAgICAgICAgICAgICcyNjAyMTI5Mjk4NDA0OTYzMDgzODMzODUzNDc5MTEzNTc3MjUzMTA1OTM5OTk1Njg4OTYwMWUtMicsCisgICAgICAgICAgICAnMjYwMjEyOTI5ODQwNDk2MzA4MzgzMzg1MzQ3OTExMzU3NzI1MzEwNTkzOTk5NTY4ODk1ZTAnLAorICAgICAgICAgICAgJzI2MDIxMjkyOTg0MDQ5NjMwODM4MzM4NTM0NzkxMTM1NzcyNTMxMDU5Mzk5OTU2ODg5N2UwJywKKyAgICAgICAgICAgICcyNjAyMTI5Mjk4NDA0OTYzMDgzODMzODUzNDc5MTEzNTc3MjUzMTA1OTM5OTk1Njg5OTZlMCcsCisgICAgICAgICAgICAnMjYwMjEyOTI5ODQwNDk2MzA4MzgzMzg1MzQ3OTExMzU3NzI1MzEwNTkzOTk5NTY4ODY2ZTAnLAorICAgICAgICAgICAgIyAyKio1MworICAgICAgICAgICAgJzkwMDcxOTkyNTQ3NDA5OTIuMDAnLAorICAgICAgICAgICAgIyAyKioxMDI0IC0gMioqOTcwOiAgZXhhY3Qgb3ZlcmZsb3cgYm91bmRhcnkuICBBbGwgdmFsdWVzCisgICAgICAgICAgICAjIHNtYWxsZXIgdGhhbiB0aGlzIHNob3VsZCByb3VuZCB0byBzb21ldGhpbmcgZmluaXRlOyAgYW55IHZhbHVlCisgICAgICAgICAgICAjIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGlzIG9uZSBvdmVyZmxvd3MuCisgICAgICAgICAgICAnMTc5NzY5MzEzNDg2MjMxNTgwNzkzNzI4OTcxNDA1MzAzNDE1MDc5OTM0MTMyNzEwMDM3JyAjLi4uCisgICAgICAgICAgICAnODI2OTM2MTczNzc4OTgwNDQ0OTY4MjkyNzY0NzUwOTQ2NjQ5MDE3OTc3NTg3MjA3MDk2JyAjLi4uCisgICAgICAgICAgICAnMzMwMjg2NDE2NjkyODg3OTEwOTQ2NTU1NTQ3ODUxOTQwNDAyNjMwNjU3NDg4NjcxNTA1JyAjLi4uCisgICAgICAgICAgICAnODIwNjgxOTA4OTAyMDAwNzA4MzgzNjc2MjczODU0ODQ1ODE3NzExNTMxNzY0NDc1NzMwJyAjLi4uCisgICAgICAgICAgICAnMjcwMDY5ODU1NTcxMzY2OTU5NjIyODQyOTE0ODE5ODYwODM0OTM2NDc1MjkyNzE5MDc0JyAjLi4uCisgICAgICAgICAgICAnMTY4NDQ0MzY1NTEwNzA0MzQyNzExNTU5Njk5NTA4MDkzMDQyODgwMTc3OTA0MTc0NDk3NzkyJywKKyAgICAgICAgICAgICMgMioqMTAyNCAtIDIqKjk3MCAtIHRpbnkKKyAgICAgICAgICAgICcxNzk3NjkzMTM0ODYyMzE1ODA3OTM3Mjg5NzE0MDUzMDM0MTUwNzk5MzQxMzI3MTAwMzcnICMuLi4KKyAgICAgICAgICAgICc4MjY5MzYxNzM3Nzg5ODA0NDQ5NjgyOTI3NjQ3NTA5NDY2NDkwMTc5Nzc1ODcyMDcwOTYnICMuLi4KKyAgICAgICAgICAgICczMzAyODY0MTY2OTI4ODc5MTA5NDY1NTU1NDc4NTE5NDA0MDI2MzA2NTc0ODg2NzE1MDUnICMuLi4KKyAgICAgICAgICAgICc4MjA2ODE5MDg5MDIwMDA3MDgzODM2NzYyNzM4NTQ4NDU4MTc3MTE1MzE3NjQ0NzU3MzAnICMuLi4KKyAgICAgICAgICAgICcyNzAwNjk4NTU1NzEzNjY5NTk2MjI4NDI5MTQ4MTk4NjA4MzQ5MzY0NzUyOTI3MTkwNzQnICMuLi4KKyAgICAgICAgICAgICcxNjg0NDQzNjU1MTA3MDQzNDI3MTE1NTk2OTk1MDgwOTMwNDI4ODAxNzc5MDQxNzQ0OTc3OTEuOTk5JywKKyAgICAgICAgICAgICMgMioqMTAyNCAtIDIqKjk3MCArIHRpbnkKKyAgICAgICAgICAgICcxNzk3NjkzMTM0ODYyMzE1ODA3OTM3Mjg5NzE0MDUzMDM0MTUwNzk5MzQxMzI3MTAwMzcnICMuLi4KKyAgICAgICAgICAgICc4MjY5MzYxNzM3Nzg5ODA0NDQ5NjgyOTI3NjQ3NTA5NDY2NDkwMTc5Nzc1ODcyMDcwOTYnICMuLi4KKyAgICAgICAgICAgICczMzAyODY0MTY2OTI4ODc5MTA5NDY1NTU1NDc4NTE5NDA0MDI2MzA2NTc0ODg2NzE1MDUnICMuLi4KKyAgICAgICAgICAgICc4MjA2ODE5MDg5MDIwMDA3MDgzODM2NzYyNzM4NTQ4NDU4MTc3MTE1MzE3NjQ0NzU3MzAnICMuLi4KKyAgICAgICAgICAgICcyNzAwNjk4NTU1NzEzNjY5NTk2MjI4NDI5MTQ4MTk4NjA4MzQ5MzY0NzUyOTI3MTkwNzQnICMuLi4KKyAgICAgICAgICAgICcxNjg0NDQzNjU1MTA3MDQzNDI3MTE1NTk2OTk1MDgwOTMwNDI4ODAxNzc5MDQxNzQ0OTc3OTIuMDAxJywKKyAgICAgICAgICAgICMgMSAtIDIqKi01NCwgKy10aW55CisgICAgICAgICAgICAnOTk5OTk5OTk5OTk5OTk5OTQ0NDg4ODQ4NzY4NzQyMTcyOTc4ODE4NDE2NTk1NDU4OTg0Mzc1ZS01NCcsCisgICAgICAgICAgICAnOTk5OTk5OTk5OTk5OTk5OTQ0NDg4ODQ4NzY4NzQyMTcyOTc4ODE4NDE2NTk1NDU4OTg0Mzc0OTk5OTk5OWUtNTQnLAorICAgICAgICAgICAgJzk5OTk5OTk5OTk5OTk5OTk0NDQ4ODg0ODc2ODc0MjE3Mjk3ODgxODQxNjU5NTQ1ODk4NDM3NTAwMDAwMDFlLTU0JywKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHMgaW4gdGVzdF9zdHJpbmdzOgorICAgICAgICAgICAgc2VsZi5jaGVja19zdHJ0b2QocykKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RydG9kVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0cnVjdC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0cnVjdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTYxM2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3RydWN0LnB5CkBAIC0wLDAgKzEsNTgxIEBACitpbXBvcnQgb3MKK2ltcG9ydCBhcnJheQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3RydWN0CitpbXBvcnQgaW5zcGVjdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgKGNoZWNrX3dhcm5pbmdzLCBjaGVja19weTNrX3dhcm5pbmdzKQorCitpbXBvcnQgc3lzCitJU0JJR0VORElBTiA9IHN5cy5ieXRlb3JkZXIgPT0gImJpZyIKK0lTMzJCSVQgPSBzeXMubWF4c2l6ZSA9PSAweDdmZmZmZmZmCisKK2ludGVnZXJfY29kZXMgPSAnYicsICdCJywgJ2gnLCAnSCcsICdpJywgJ0knLCAnbCcsICdMJywgJ3EnLCAnUScKKwordGVzdG1vZF9maWxlbmFtZSA9IG9zLnBhdGguc3BsaXRleHQoX19maWxlX18pWzBdICsgJy5weScKKyMgTmF0aXZlICdxJyBwYWNraW5nIGlzbid0IGF2YWlsYWJsZSBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3QgaGF2ZSB0aGUgQworIyBsb25nIGxvbmcgdHlwZS4KK3RyeToKKyAgICBzdHJ1Y3QucGFjaygncScsIDUpCitleGNlcHQgc3RydWN0LmVycm9yOgorICAgIEhBVkVfTE9OR19MT05HID0gRmFsc2UKK2Vsc2U6CisgICAgSEFWRV9MT05HX0xPTkcgPSBUcnVlCisKK2RlZiBzdHJpbmdfcmV2ZXJzZShzKToKKyAgICByZXR1cm4gIiIuam9pbihyZXZlcnNlZChzKSkKKworZGVmIGJpZ2VuZGlhbl90b19uYXRpdmUodmFsdWUpOgorICAgIGlmIElTQklHRU5ESUFOOgorICAgICAgICByZXR1cm4gdmFsdWUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gc3RyaW5nX3JldmVyc2UodmFsdWUpCisKK2NsYXNzIFN0cnVjdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrX2Zsb2F0X2NvZXJjZShzZWxmLCBmb3JtYXQsIG51bWJlcik6CisgICAgICAgICMgU0YgYnVnIDE1MzA1NTkuIHN0cnVjdC5wYWNrIHJhaXNlcyBUeXBlRXJyb3Igd2hlcmUgaXQgdXNlZAorICAgICAgICAjIHRvIGNvbnZlcnQuCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCIuKmludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpIGFzIHc6CisgICAgICAgICAgICBnb3QgPSBzdHJ1Y3QucGFjayhmb3JtYXQsIG51bWJlcikKKyAgICAgICAgbGluZW5vID0gaW5zcGVjdC5jdXJyZW50ZnJhbWUoKS5mX2xpbmVubyAtIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LmZpbGVuYW1lLCB0ZXN0bW9kX2ZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcubGluZW5vLCBsaW5lbm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAxKQorICAgICAgICBleHBlY3RlZCA9IHN0cnVjdC5wYWNrKGZvcm1hdCwgaW50KG51bWJlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2lzYmlnZW5kaWFuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzdHJ1Y3QucGFjaygnPWknLCAxKVswXSA9PSBjaHIoMCkpLCBJU0JJR0VORElBTikKKworICAgIGRlZiB0ZXN0X2NvbnNpc3RlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5jYWxjc2l6ZSwgJ1onKQorCisgICAgICAgIHN6ID0gc3RydWN0LmNhbGNzaXplKCdpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeiAqIDMsIHN0cnVjdC5jYWxjc2l6ZSgnaWlpJykpCisKKyAgICAgICAgZm10ID0gJ2NieHh4eHh4aGhoaGlpbGxmZmQ/JworICAgICAgICBmbXQzID0gJzNjM2IxOHgxMmg2aTZsNmYzZDM/JworICAgICAgICBzeiA9IHN0cnVjdC5jYWxjc2l6ZShmbXQpCisgICAgICAgIHN6MyA9IHN0cnVjdC5jYWxjc2l6ZShmbXQzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6ICogMywgc3ozKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LnBhY2ssICdpaWknLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrLCAnaScsIDMsIDMsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHN0cnVjdC5lcnJvciksIHN0cnVjdC5wYWNrLCAnaScsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLCBzdHJ1Y3QucGFjaywgJ1AnLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QudW5wYWNrLCAnZCcsICdmbGFwJykKKyAgICAgICAgcyA9IHN0cnVjdC5wYWNrKCdpaScsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LnVucGFjaywgJ2lpaScsIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LnVucGFjaywgJ2knLCBzKQorCisgICAgZGVmIHRlc3RfdHJhbnNpdGl2ZW5lc3Moc2VsZik6CisgICAgICAgIGMgPSAnYScKKyAgICAgICAgYiA9IDEKKyAgICAgICAgaCA9IDI1NQorICAgICAgICBpID0gNjU1MzUKKyAgICAgICAgbCA9IDY1NTM2CisgICAgICAgIGYgPSAzLjE0MTUKKyAgICAgICAgZCA9IDMuMTQxNQorICAgICAgICB0ID0gVHJ1ZQorCisgICAgICAgIGZvciBwcmVmaXggaW4gKCcnLCAnQCcsICc8JywgJz4nLCAnPScsICchJyk6CisgICAgICAgICAgICBmb3IgZm9ybWF0IGluICgneGNiaGlsZmQ/JywgJ3hjQkhJTGZkPycpOgorICAgICAgICAgICAgICAgIGZvcm1hdCA9IHByZWZpeCArIGZvcm1hdAorICAgICAgICAgICAgICAgIHMgPSBzdHJ1Y3QucGFjayhmb3JtYXQsIGMsIGIsIGgsIGksIGwsIGYsIGQsIHQpCisgICAgICAgICAgICAgICAgY3AsIGJwLCBocCwgaXAsIGxwLCBmcCwgZHAsIHRwID0gc3RydWN0LnVucGFjayhmb3JtYXQsIHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcCwgYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJwLCBiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHAsIGgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpcCwgaSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxwLCBsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KDEwMCAqIGZwKSwgaW50KDEwMCAqIGYpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KDEwMCAqIGRwKSwgaW50KDEwMCAqIGQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHAsIHQpCisKKyAgICBkZWYgdGVzdF9uZXdfZmVhdHVyZXMoc2VsZik6CisgICAgICAgICMgVGVzdCBzb21lIG9mIHRoZSBuZXcgZmVhdHVyZXMgaW4gZGV0YWlsCisgICAgICAgICMgKGZvcm1hdCwgYXJndW1lbnQsIGJpZy1lbmRpYW4gcmVzdWx0LCBsaXR0bGUtZW5kaWFuIHJlc3VsdCwgYXN5bW1ldHJpYykKKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICAoJ2MnLCAnYScsICdhJywgJ2EnLCAwKSwKKyAgICAgICAgICAgICgneGMnLCAnYScsICdcMGEnLCAnXDBhJywgMCksCisgICAgICAgICAgICAoJ2N4JywgJ2EnLCAnYVwwJywgJ2FcMCcsIDApLAorICAgICAgICAgICAgKCdzJywgJ2EnLCAnYScsICdhJywgMCksCisgICAgICAgICAgICAoJzBzJywgJ2hlbGxvd29ybGQnLCAnJywgJycsIDEpLAorICAgICAgICAgICAgKCcxcycsICdoZWxsb3dvcmxkJywgJ2gnLCAnaCcsIDEpLAorICAgICAgICAgICAgKCc5cycsICdoZWxsb3dvcmxkJywgJ2hlbGxvd29ybCcsICdoZWxsb3dvcmwnLCAxKSwKKyAgICAgICAgICAgICgnMTBzJywgJ2hlbGxvd29ybGQnLCAnaGVsbG93b3JsZCcsICdoZWxsb3dvcmxkJywgMCksCisgICAgICAgICAgICAoJzExcycsICdoZWxsb3dvcmxkJywgJ2hlbGxvd29ybGRcMCcsICdoZWxsb3dvcmxkXDAnLCAxKSwKKyAgICAgICAgICAgICgnMjBzJywgJ2hlbGxvd29ybGQnLCAnaGVsbG93b3JsZCcrMTAqJ1wwJywgJ2hlbGxvd29ybGQnKzEwKidcMCcsIDEpLAorICAgICAgICAgICAgKCdiJywgNywgJ1w3JywgJ1w3JywgMCksCisgICAgICAgICAgICAoJ2InLCAtNywgJ1wzNzEnLCAnXDM3MScsIDApLAorICAgICAgICAgICAgKCdCJywgNywgJ1w3JywgJ1w3JywgMCksCisgICAgICAgICAgICAoJ0InLCAyNDksICdcMzcxJywgJ1wzNzEnLCAwKSwKKyAgICAgICAgICAgICgnaCcsIDcwMCwgJ1wwMDJcMjc0JywgJ1wyNzRcMDAyJywgMCksCisgICAgICAgICAgICAoJ2gnLCAtNzAwLCAnXDM3NUQnLCAnRFwzNzUnLCAwKSwKKyAgICAgICAgICAgICgnSCcsIDcwMCwgJ1wwMDJcMjc0JywgJ1wyNzRcMDAyJywgMCksCisgICAgICAgICAgICAoJ0gnLCAweDEwMDAwLTcwMCwgJ1wzNzVEJywgJ0RcMzc1JywgMCksCisgICAgICAgICAgICAoJ2knLCA3MDAwMDAwMCwgJ1wwMDQsXDAzNVwyMDAnLCAnXDIwMFwwMzUsXDAwNCcsIDApLAorICAgICAgICAgICAgKCdpJywgLTcwMDAwMDAwLCAnXDM3M1wzMjNcMzQyXDIwMCcsICdcMjAwXDM0MlwzMjNcMzczJywgMCksCisgICAgICAgICAgICAoJ0knLCA3MDAwMDAwMEwsICdcMDA0LFwwMzVcMjAwJywgJ1wyMDBcMDM1LFwwMDQnLCAwKSwKKyAgICAgICAgICAgICgnSScsIDB4MTAwMDAwMDAwTC03MDAwMDAwMCwgJ1wzNzNcMzIzXDM0MlwyMDAnLCAnXDIwMFwzNDJcMzIzXDM3MycsIDApLAorICAgICAgICAgICAgKCdsJywgNzAwMDAwMDAsICdcMDA0LFwwMzVcMjAwJywgJ1wyMDBcMDM1LFwwMDQnLCAwKSwKKyAgICAgICAgICAgICgnbCcsIC03MDAwMDAwMCwgJ1wzNzNcMzIzXDM0MlwyMDAnLCAnXDIwMFwzNDJcMzIzXDM3MycsIDApLAorICAgICAgICAgICAgKCdMJywgNzAwMDAwMDBMLCAnXDAwNCxcMDM1XDIwMCcsICdcMjAwXDAzNSxcMDA0JywgMCksCisgICAgICAgICAgICAoJ0wnLCAweDEwMDAwMDAwMEwtNzAwMDAwMDAsICdcMzczXDMyM1wzNDJcMjAwJywgJ1wyMDBcMzQyXDMyM1wzNzMnLCAwKSwKKyAgICAgICAgICAgICgnZicsIDIuMCwgJ0BcMDAwXDAwMFwwMDAnLCAnXDAwMFwwMDBcMDAwQCcsIDApLAorICAgICAgICAgICAgKCdkJywgMi4wLCAnQFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAnLAorICAgICAgICAgICAgICAgICAgICAgICAnXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMEAnLCAwKSwKKyAgICAgICAgICAgICgnZicsIC0yLjAsICdcMzAwXDAwMFwwMDBcMDAwJywgJ1wwMDBcMDAwXDAwMFwzMDAnLCAwKSwKKyAgICAgICAgICAgICgnZCcsIC0yLjAsICdcMzAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCcsCisgICAgICAgICAgICAgICAgICAgICAgICdcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDMwMCcsIDApLAorICAgICAgICAgICAgICAgICgnPycsIDAsICdcMCcsICdcMCcsIDApLAorICAgICAgICAgICAgICAgICgnPycsIDMsICdcMScsICdcMScsIDEpLAorICAgICAgICAgICAgICAgICgnPycsIFRydWUsICdcMScsICdcMScsIDApLAorICAgICAgICAgICAgICAgICgnPycsIFtdLCAnXDAnLCAnXDAnLCAxKSwKKyAgICAgICAgICAgICAgICAoJz8nLCAoMSwpLCAnXDEnLCAnXDEnLCAxKSwKKyAgICAgICAgXQorCisgICAgICAgIGZvciBmbXQsIGFyZywgYmlnLCBsaWwsIGFzeSBpbiB0ZXN0czoKKyAgICAgICAgICAgIGZvciAoeGZtdCwgZXhwKSBpbiBbKCc+JytmbXQsIGJpZyksICgnIScrZm10LCBiaWcpLCAoJzwnK2ZtdCwgbGlsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc9JytmbXQsIElTQklHRU5ESUFOIGFuZCBiaWcgb3IgbGlsKV06CisgICAgICAgICAgICAgICAgcmVzID0gc3RydWN0LnBhY2soeGZtdCwgYXJnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBleHApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ1Y3QuY2FsY3NpemUoeGZtdCksIGxlbihyZXMpKQorICAgICAgICAgICAgICAgIHJldiA9IHN0cnVjdC51bnBhY2soeGZtdCwgcmVzKVswXQorICAgICAgICAgICAgICAgIGlmIHJldiAhPSBhcmc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3kpCisKKyAgICBkZWYgdGVzdF9jYWxjc2l6ZShzZWxmKToKKyAgICAgICAgZXhwZWN0ZWRfc2l6ZSA9IHsKKyAgICAgICAgICAgICdiJzogMSwgJ0InOiAxLAorICAgICAgICAgICAgJ2gnOiAyLCAnSCc6IDIsCisgICAgICAgICAgICAnaSc6IDQsICdJJzogNCwKKyAgICAgICAgICAgICdsJzogNCwgJ0wnOiA0LAorICAgICAgICAgICAgJ3EnOiA4LCAnUSc6IDgsCisgICAgICAgICAgICB9CisKKyAgICAgICAgIyBzdGFuZGFyZCBpbnRlZ2VyIHNpemVzCisgICAgICAgIGZvciBjb2RlIGluIGludGVnZXJfY29kZXM6CisgICAgICAgICAgICBmb3IgYnl0ZW9yZGVyIGluICgnPScsICc8JywgJz4nLCAnIScpOgorICAgICAgICAgICAgICAgIGZvcm1hdCA9IGJ5dGVvcmRlcitjb2RlCisgICAgICAgICAgICAgICAgc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZShmb3JtYXQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBleHBlY3RlZF9zaXplW2NvZGVdKQorCisgICAgICAgICMgbmF0aXZlIGludGVnZXIgc2l6ZXMsIGV4Y2VwdCAncScgYW5kICdRJworICAgICAgICBmb3IgZm9ybWF0X3BhaXIgaW4gKCdiQicsICdoSCcsICdpSScsICdsTCcpOgorICAgICAgICAgICAgZm9yIGJ5dGVvcmRlciBpbiBbJycsICdAJ106CisgICAgICAgICAgICAgICAgc2lnbmVkX3NpemUgPSBzdHJ1Y3QuY2FsY3NpemUoYnl0ZW9yZGVyICsgZm9ybWF0X3BhaXJbMF0pCisgICAgICAgICAgICAgICAgdW5zaWduZWRfc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZShieXRlb3JkZXIgKyBmb3JtYXRfcGFpclsxXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25lZF9zaXplLCB1bnNpZ25lZF9zaXplKQorCisgICAgICAgICMgYm91bmRzIGZvciBuYXRpdmUgaW50ZWdlciBzaXplcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnVjdC5jYWxjc2l6ZSgnYicpLCAxKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgyLCBzdHJ1Y3QuY2FsY3NpemUoJ2gnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoNCwgc3RydWN0LmNhbGNzaXplKCdsJykpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHN0cnVjdC5jYWxjc2l6ZSgnaCcpLCBzdHJ1Y3QuY2FsY3NpemUoJ2knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc3RydWN0LmNhbGNzaXplKCdpJyksIHN0cnVjdC5jYWxjc2l6ZSgnbCcpKQorCisgICAgICAgICMgdGVzdHMgZm9yIG5hdGl2ZSAncScgYW5kICdRJyB3aGVuIGFwcGxpY2FibGUKKyAgICAgICAgaWYgSEFWRV9MT05HX0xPTkc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnVjdC5jYWxjc2l6ZSgncScpLCBzdHJ1Y3QuY2FsY3NpemUoJ1EnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKDgsIHN0cnVjdC5jYWxjc2l6ZSgncScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc3RydWN0LmNhbGNzaXplKCdsJyksIHN0cnVjdC5jYWxjc2l6ZSgncScpKQorCisgICAgZGVmIHRlc3RfaW50ZWdlcnMoc2VsZik6CisgICAgICAgICMgSW50ZWdlciB0ZXN0cyAoYkJoSGlJbExxUSkuCisgICAgICAgIGltcG9ydCBiaW5hc2NpaQorCisgICAgICAgIGNsYXNzIEludFRlc3Rlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9ybWF0KToKKyAgICAgICAgICAgICAgICBzdXBlcihJbnRUZXN0ZXIsIHNlbGYpLl9faW5pdF9fKG1ldGhvZE5hbWU9J3Rlc3Rfb25lJykKKyAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdCA9IGZvcm1hdAorICAgICAgICAgICAgICAgIHNlbGYuY29kZSA9IGZvcm1hdFstMV0KKyAgICAgICAgICAgICAgICBzZWxmLmRpcmVjdGlvbiA9IGZvcm1hdFs6LTFdCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZGlyZWN0aW9uIGluICgnJywgJ0AnLCAnPScsICc8JywgJz4nLCAnIScpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bnJlY29nbml6ZWQgcGFja2luZyBkaXJlY3Rpb246ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXJlY3Rpb24pCisgICAgICAgICAgICAgICAgc2VsZi5ieXRlc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZShmb3JtYXQpCisgICAgICAgICAgICAgICAgc2VsZi5iaXRzaXplID0gc2VsZi5ieXRlc2l6ZSAqIDgKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNvZGUgaW4gdHVwbGUoJ2JoaWxxJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2lnbmVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbl92YWx1ZSA9IC0oMkwqKihzZWxmLmJpdHNpemUtMSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubWF4X3ZhbHVlID0gMkwqKihzZWxmLmJpdHNpemUtMSkgLSAxCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLmNvZGUgaW4gdHVwbGUoJ0JISUxRJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2lnbmVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5taW5fdmFsdWUgPSAwCisgICAgICAgICAgICAgICAgICAgIHNlbGYubWF4X3ZhbHVlID0gMkwqKnNlbGYuYml0c2l6ZSAtIDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bnJlY29nbml6ZWQgZm9ybWF0IGNvZGU6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2RlKQorCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZiwgeCwgcGFjaz1zdHJ1Y3QucGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnBhY2s9c3RydWN0LnVucGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmhleGxpZnk9YmluYXNjaWkudW5oZXhsaWZ5KToKKworICAgICAgICAgICAgICAgIGZvcm1hdCA9IHNlbGYuZm9ybWF0CisgICAgICAgICAgICAgICAgaWYgc2VsZi5taW5fdmFsdWUgPD0geCA8PSBzZWxmLm1heF92YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBsb25nKHgpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc2lnbmVkIGFuZCB4IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkICs9IDFMIDw8IHNlbGYuYml0c2l6ZQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChleHBlY3RlZCwgMCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAnJXgnICUgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGV4cGVjdGVkKSAmIDE6CisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICIwIiArIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gdW5oZXhsaWZ5KGV4cGVjdGVkKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICgiXHgwMCIgKiAoc2VsZi5ieXRlc2l6ZSAtIGxlbihleHBlY3RlZCkpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmRpcmVjdGlvbiA9PSAnPCcgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlyZWN0aW9uIGluICgnJywgJ0AnLCAnPScpIGFuZCBub3QgSVNCSUdFTkRJQU4pOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBzdHJpbmdfcmV2ZXJzZShleHBlY3RlZCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXhwZWN0ZWQpLCBzZWxmLmJ5dGVzaXplKQorCisgICAgICAgICAgICAgICAgICAgICMgUGFjayB3b3JrPworICAgICAgICAgICAgICAgICAgICBnb3QgPSBwYWNrKGZvcm1hdCwgeCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQorCisgICAgICAgICAgICAgICAgICAgICMgVW5wYWNrIHdvcms/CisgICAgICAgICAgICAgICAgICAgIHJldHJpZXZlZCA9IHVucGFjayhmb3JtYXQsIGdvdClbMF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCByZXRyaWV2ZWQpCisKKyAgICAgICAgICAgICAgICAgICAgIyBBZGRpbmcgYW55IGJ5dGUgc2hvdWxkIGNhdXNlIGEgInRvbyBiaWciIGVycm9yLgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoc3RydWN0LmVycm9yLCBUeXBlRXJyb3IpLCB1bnBhY2ssIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x4MDEnICsgZ290KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgeCBpcyBvdXQgb2YgcmFuZ2UgLS0gdmVyaWZ5IHBhY2sgcmVhbGl6ZXMgdGhhdC4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE92ZXJmbG93RXJyb3IsIFZhbHVlRXJyb3IsIHN0cnVjdC5lcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2ssIGZvcm1hdCwgeCkKKworICAgICAgICAgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgICAgICAgICBmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZHJhbmdlCisKKyAgICAgICAgICAgICAgICAjIENyZWF0ZSBhbGwgaW50ZXJlc3RpbmcgcG93ZXJzIG9mIDIuCisgICAgICAgICAgICAgICAgdmFsdWVzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZXhwIGluIHJhbmdlKHNlbGYuYml0c2l6ZSArIDMpOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKDFMIDw8IGV4cCkKKworICAgICAgICAgICAgICAgICMgQWRkIHNvbWUgcmFuZG9tIHZhbHVlcy4KKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLmJpdHNpemUpOgorICAgICAgICAgICAgICAgICAgICB2YWwgPSAwTAorICAgICAgICAgICAgICAgICAgICBmb3IgaiBpbiByYW5nZShzZWxmLmJ5dGVzaXplKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9ICh2YWwgPDwgOCkgfCByYW5kcmFuZ2UoMjU2KQorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKHZhbCkKKworICAgICAgICAgICAgICAgICMgVmFsdWVzIGFic29yYmVkIGZyb20gb3RoZXIgdGVzdHMKKyAgICAgICAgICAgICAgICB2YWx1ZXMuZXh0ZW5kKFszMDAsIDcwMDAwMCwgc3lzLm1heGludCo0XSkKKworICAgICAgICAgICAgICAgICMgVHJ5IGFsbCB0aG9zZSwgYW5kIHRoZWlyIG5lZ2F0aW9ucywgYW5kICstMSBmcm9tCisgICAgICAgICAgICAgICAgIyB0aGVtLiAgTm90ZSB0aGF0IHRoaXMgdGVzdHMgYWxsIHBvd2VyLW9mLTIKKyAgICAgICAgICAgICAgICAjIGJvdW5kYXJpZXMgaW4gcmFuZ2UsIGFuZCBhIGZldyBvdXQgb2YgcmFuZ2UsIHBsdXMKKyAgICAgICAgICAgICAgICAjICstKDIqKm4gKy0gMSkuCisgICAgICAgICAgICAgICAgZm9yIGJhc2UgaW4gdmFsdWVzOgorICAgICAgICAgICAgICAgICAgICBmb3IgdmFsIGluIC1iYXNlLCBiYXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGluY3IgaW4gLTEsIDAsIDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHZhbCArIGluY3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3Rfb25lKGludCh4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3Rfb25lKGxvbmcoeCkpCisKKyAgICAgICAgICAgICAgICAjIFNvbWUgZXJyb3IgY2FzZXMuCisgICAgICAgICAgICAgICAgY2xhc3MgTm90QW5JbnROUyhvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2xvbmdfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxNzI5TAorCisgICAgICAgICAgICAgICAgY2xhc3MgTm90QW5JbnRPUzoKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gODUKKworICAgICAgICAgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE2M0wKKworICAgICAgICAgICAgICAgICMgT2JqZWN0cyB3aXRoIGFuICdfX2luZGV4X18nIG1ldGhvZCBzaG91bGQgYmUgYWxsb3dlZAorICAgICAgICAgICAgICAgICMgdG8gcGFjayBhcyBpbnRlZ2Vycy4gIFRoYXQgaXMgYXNzdW1pbmcgdGhlIGltcGxlbWVudGVkCisgICAgICAgICAgICAgICAgIyAnX19pbmRleF9fJyBtZXRob2QgcmV0dXJucyBhbmQgJ2ludCcgb3IgJ2xvbmcnLgorICAgICAgICAgICAgICAgIGNsYXNzIEluZGV4YWJsZShvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZQorCisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWUKKworICAgICAgICAgICAgICAgICMgSWYgdGhlICdfX2luZGV4X18nIG1ldGhvZCByYWlzZXMgYSB0eXBlIGVycm9yLCB0aGVuCisgICAgICAgICAgICAgICAgIyAnX19pbnRfXycgc2hvdWxkIGJlIHVzZWQgd2l0aCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcuCisgICAgICAgICAgICAgICAgY2xhc3MgQmFkSW5kZXgob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorCisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrLCBzZWxmLmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYSBzdHJpbmciKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHN0cnVjdC5lcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2ssIHNlbGYuZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRyYW5nZSkKKyAgICAgICAgICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgiaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnb3Qgbm9uLWludGVnZXIiLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBzdHJ1Y3QuZXJyb3IpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKHNlbGYuZm9ybWF0LCAzKzQyaikKKworICAgICAgICAgICAgICAgICMgYW4gYXR0ZW1wdCB0byBjb252ZXJ0IGEgbm9uLWludGVnZXIgKHdpdGggYW4KKyAgICAgICAgICAgICAgICAjIGltcGxpY2l0IGNvbnZlcnNpb24gdmlhIF9faW50X18pIHNob3VsZCBzdWNjZWVkLAorICAgICAgICAgICAgICAgICMgd2l0aCBhIERlcHJlY2F0aW9uV2FybmluZworICAgICAgICAgICAgICAgIGZvciBub25pbnQgaW4gTm90QW5JbnROUygpLCBOb3RBbkludE9TKCksIEJhZEluZGV4KCk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCIuKmludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBub24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItaW50ZWdlciIsIERlcHJlY2F0aW9uV2FybmluZykpIGFzIHc6CisgICAgICAgICAgICAgICAgICAgICAgICBnb3QgPSBzdHJ1Y3QucGFjayhzZWxmLmZvcm1hdCwgbm9uaW50KQorICAgICAgICAgICAgICAgICAgICBsaW5lbm8gPSBpbnNwZWN0LmN1cnJlbnRmcmFtZSgpLmZfbGluZW5vIC0gMQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcuZmlsZW5hbWUsIHRlc3Rtb2RfZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5saW5lbm8sIGxpbmVubykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ody53YXJuaW5ncyksIDEpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gc3RydWN0LnBhY2soc2VsZi5mb3JtYXQsIGludChub25pbnQpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIGZvciBsZWdpdGltYXRlIHZhbHVlcyBmcm9tICdfX2luZGV4X18nLgorICAgICAgICAgICAgICAgIGZvciBvYmogaW4gKEluZGV4YWJsZSgwKSwgSW5kZXhhYmxlKDEwKSwgSW5kZXhhYmxlKDE3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleGFibGUoNDIpLCBJbmRleGFibGUoMTAwKSwgSW5kZXhhYmxlKDEyNykpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjayhmb3JtYXQsIG9iaikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbnRlZ2VyIGNvZGUgcGFjayBmYWlsZWQgb24gb2JqZWN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aCAnX19pbmRleF9fJyBtZXRob2QiKQorCisgICAgICAgICAgICAgICAgIyBDaGVjayBmb3IgYm9ndXMgdmFsdWVzIGZyb20gJ19faW5kZXhfXycuCisgICAgICAgICAgICAgICAgZm9yIG9iaiBpbiAoSW5kZXhhYmxlKCdhJyksIEluZGV4YWJsZSh1J2InKSwgSW5kZXhhYmxlKE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4YWJsZSh7J2EnOiAxfSksIEluZGV4YWJsZShbMSwgMiwgM10pKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgc3RydWN0LmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2ssIHNlbGYuZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmopCisKKyAgICAgICAgYnl0ZW9yZGVycyA9ICcnLCAnQCcsICc9JywgJzwnLCAnPicsICchJworICAgICAgICBmb3IgY29kZSBpbiBpbnRlZ2VyX2NvZGVzOgorICAgICAgICAgICAgZm9yIGJ5dGVvcmRlciBpbiBieXRlb3JkZXJzOgorICAgICAgICAgICAgICAgIGlmIChieXRlb3JkZXIgaW4gKCcnLCAnQCcpIGFuZCBjb2RlIGluICgncScsICdRJykgYW5kCisgICAgICAgICAgICAgICAgICAgIG5vdCBIQVZFX0xPTkdfTE9ORyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZm9ybWF0ID0gYnl0ZW9yZGVyK2NvZGUKKyAgICAgICAgICAgICAgICB0ID0gSW50VGVzdGVyKGZvcm1hdCkKKyAgICAgICAgICAgICAgICB0LnJ1bigpCisKKyAgICBkZWYgdGVzdF9wX2NvZGUoc2VsZik6CisgICAgICAgICMgVGVzdCBwICgiUGFzY2FsIHN0cmluZyIpIGNvZGUuCisgICAgICAgIGZvciBjb2RlLCBpbnB1dCwgZXhwZWN0ZWQsIGV4cGVjdGVkYmFjayBpbiBbCisgICAgICAgICAgICAgICAgKCdwJywnYWJjJywgJ1x4MDAnLCAnJyksCisgICAgICAgICAgICAgICAgKCcxcCcsICdhYmMnLCAnXHgwMCcsICcnKSwKKyAgICAgICAgICAgICAgICAoJzJwJywgJ2FiYycsICdceDAxYScsICdhJyksCisgICAgICAgICAgICAgICAgKCczcCcsICdhYmMnLCAnXHgwMmFiJywgJ2FiJyksCisgICAgICAgICAgICAgICAgKCc0cCcsICdhYmMnLCAnXHgwM2FiYycsICdhYmMnKSwKKyAgICAgICAgICAgICAgICAoJzVwJywgJ2FiYycsICdceDAzYWJjXHgwMCcsICdhYmMnKSwKKyAgICAgICAgICAgICAgICAoJzZwJywgJ2FiYycsICdceDAzYWJjXHgwMFx4MDAnLCAnYWJjJyksCisgICAgICAgICAgICAgICAgKCcxMDAwcCcsICd4JyoxMDAwLCAnXHhmZicgKyAneCcqOTk5LCAneCcqMjU1KV06CisgICAgICAgICAgICBnb3QgPSBzdHJ1Y3QucGFjayhjb2RlLCBpbnB1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKKyAgICAgICAgICAgIChnb3QsKSA9IHN0cnVjdC51bnBhY2soY29kZSwgZ290KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkYmFjaykKKworICAgIGRlZiB0ZXN0XzcwNTgzNihzZWxmKToKKyAgICAgICAgIyBTRiBidWcgNzA1ODM2LiAgIjxmIiBhbmQgIj5mIiBoYWQgYSBzZXZlcmUgcm91bmRpbmcgYnVnLCB3aGVyZSBhIGNhcnJ5CisgICAgICAgICMgZnJvbSB0aGUgbG93LW9yZGVyIGRpc2NhcmRlZCBiaXRzIGNvdWxkIHByb3BhZ2F0ZSBpbnRvIHRoZSBleHBvbmVudAorICAgICAgICAjIGZpZWxkLCBjYXVzaW5nIHRoZSByZXN1bHQgdG8gYmUgd3JvbmcgYnkgYSBmYWN0b3Igb2YgMi4KKyAgICAgICAgaW1wb3J0IG1hdGgKKworICAgICAgICBmb3IgYmFzZSBpbiByYW5nZSgxLCAzMyk6CisgICAgICAgICAgICAjIHNtYWxsZXIgPC0gbGFyZ2VzdCByZXByZXNlbnRhYmxlIGZsb2F0IGxlc3MgdGhhbiBiYXNlLgorICAgICAgICAgICAgZGVsdGEgPSAwLjUKKyAgICAgICAgICAgIHdoaWxlIGJhc2UgLSBkZWx0YSAvIDIuMCAhPSBiYXNlOgorICAgICAgICAgICAgICAgIGRlbHRhIC89IDIuMAorICAgICAgICAgICAgc21hbGxlciA9IGJhc2UgLSBkZWx0YQorICAgICAgICAgICAgIyBQYWNraW5nIHRoaXMgcm91bmRzIGF3YXkgYSBzb2xpZCBzdHJpbmcgb2YgdHJhaWxpbmcgMSBiaXRzLgorICAgICAgICAgICAgcGFja2VkID0gc3RydWN0LnBhY2soIjxmIiwgc21hbGxlcikKKyAgICAgICAgICAgIHVucGFja2VkID0gc3RydWN0LnVucGFjaygiPGYiLCBwYWNrZWQpWzBdCisgICAgICAgICAgICAjIFRoaXMgZmFpbGVkIGF0IGJhc2UgPSAyLCA0LCBhbmQgMzIsIHdpdGggdW5wYWNrZWQgPSAxLCAyLCBhbmQKKyAgICAgICAgICAgICMgMTYsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZSwgdW5wYWNrZWQpCisgICAgICAgICAgICBiaWdwYWNrZWQgPSBzdHJ1Y3QucGFjaygiPmYiLCBzbWFsbGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaWdwYWNrZWQsIHN0cmluZ19yZXZlcnNlKHBhY2tlZCkpCisgICAgICAgICAgICB1bnBhY2tlZCA9IHN0cnVjdC51bnBhY2soIj5mIiwgYmlncGFja2VkKVswXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCB1bnBhY2tlZCkKKworICAgICAgICAjIExhcmdlc3QgZmluaXRlIElFRUUgc2luZ2xlLgorICAgICAgICBiaWcgPSAoMSA8PCAyNCkgLSAxCisgICAgICAgIGJpZyA9IG1hdGgubGRleHAoYmlnLCAxMjcgLSAyMykKKyAgICAgICAgcGFja2VkID0gc3RydWN0LnBhY2soIj5mIiwgYmlnKQorICAgICAgICB1bnBhY2tlZCA9IHN0cnVjdC51bnBhY2soIj5mIiwgcGFja2VkKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpZywgdW5wYWNrZWQpCisKKyAgICAgICAgIyBUaGUgc2FtZSwgYnV0IHRhY2sgb24gYSAxIGJpdCBzbyBpdCByb3VuZHMgdXAgdG8gaW5maW5pdHkuCisgICAgICAgIGJpZyA9ICgxIDw8IDI1KSAtIDEKKyAgICAgICAgYmlnID0gbWF0aC5sZGV4cChiaWcsIDEyNyAtIDI0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzdHJ1Y3QucGFjaywgIj5mIiwgYmlnKQorCisgICAgZGVmIHRlc3RfMTUzMDU1OShzZWxmKToKKyAgICAgICAgIyBTRiBidWcgMTUzMDU1OS4gc3RydWN0LnBhY2sgcmFpc2VzIFR5cGVFcnJvciB3aGVyZSBpdCB1c2VkIHRvIGNvbnZlcnQuCisgICAgICAgIGZvciBlbmRpYW4gaW4gKCcnLCAnPicsICc8Jyk6CisgICAgICAgICAgICBmb3IgZm10IGluIGludGVnZXJfY29kZXM6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19mbG9hdF9jb2VyY2UoZW5kaWFuICsgZm10LCAxLjApCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19mbG9hdF9jb2VyY2UoZW5kaWFuICsgZm10LCAxLjUpCisKKyAgICBkZWYgdGVzdF91bnBhY2tfZnJvbShzZWxmLCBjbHM9c3RyKToKKyAgICAgICAgZGF0YSA9IGNscygnYWJjZDAxMjM0JykKKyAgICAgICAgZm10ID0gJzRzJworICAgICAgICBzID0gc3RydWN0LlN0cnVjdChmbXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnVucGFja19mcm9tKGRhdGEpLCAoJ2FiY2QnLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RydWN0LnVucGFja19mcm9tKGZtdCwgZGF0YSksICgnYWJjZCcsKSkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnVucGFja19mcm9tKGRhdGEsIGkpLCAoZGF0YVtpOmkrNF0sKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RydWN0LnVucGFja19mcm9tKGZtdCwgZGF0YSwgaSksIChkYXRhW2k6aSs0XSwpKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoNiwgbGVuKGRhdGEpICsgMSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHMudW5wYWNrX2Zyb20sIGRhdGEsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC51bnBhY2tfZnJvbSwgZm10LCBkYXRhLCBpKQorCisgICAgZGVmIHRlc3RfcGFja19pbnRvKHNlbGYpOgorICAgICAgICB0ZXN0X3N0cmluZyA9ICdSZXlramF2aWsgcm9ja3MsIGVvdyEnCisgICAgICAgIHdyaXRhYmxlX2J1ZiA9IGFycmF5LmFycmF5KCdjJywgJyAnKjEwMCkKKyAgICAgICAgZm10ID0gJzIxcycKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoZm10KQorCisgICAgICAgICMgVGVzdCB3aXRob3V0IG9mZnNldAorICAgICAgICBzLnBhY2tfaW50byh3cml0YWJsZV9idWYsIDAsIHRlc3Rfc3RyaW5nKQorICAgICAgICBmcm9tX2J1ZiA9IHdyaXRhYmxlX2J1Zi50b3N0cmluZygpWzpsZW4odGVzdF9zdHJpbmcpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyb21fYnVmLCB0ZXN0X3N0cmluZykKKworICAgICAgICAjIFRlc3Qgd2l0aCBvZmZzZXQuCisgICAgICAgIHMucGFja19pbnRvKHdyaXRhYmxlX2J1ZiwgMTAsIHRlc3Rfc3RyaW5nKQorICAgICAgICBmcm9tX2J1ZiA9IHdyaXRhYmxlX2J1Zi50b3N0cmluZygpWzpsZW4odGVzdF9zdHJpbmcpKzEwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyb21fYnVmLCB0ZXN0X3N0cmluZ1s6MTBdICsgdGVzdF9zdHJpbmcpCisKKyAgICAgICAgIyBHbyBiZXlvbmQgYm91bmRhcmllcy4KKyAgICAgICAgc21hbGxfYnVmID0gYXJyYXkuYXJyYXkoJ2MnLCAnICcqMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLCBzLnBhY2tfaW50bywgc21hbGxfYnVmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIHN0cnVjdC5lcnJvciksIHMucGFja19pbnRvLCBzbWFsbF9idWYsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3RyaW5nKQorCisgICAgICAgICMgVGVzdCBib2d1cyBvZmZzZXQgKGlzc3VlIDM2OTQpCisgICAgICAgIHNiID0gc21hbGxfYnVmCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHN0cnVjdC5lcnJvciksIHN0cnVjdC5wYWNrX2ludG8sIGInJywgc2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUpCisKKyAgICBkZWYgdGVzdF9wYWNrX2ludG9fZm4oc2VsZik6CisgICAgICAgIHRlc3Rfc3RyaW5nID0gJ1JleWtqYXZpayByb2NrcywgZW93IScKKyAgICAgICAgd3JpdGFibGVfYnVmID0gYXJyYXkuYXJyYXkoJ2MnLCAnICcqMTAwKQorICAgICAgICBmbXQgPSAnMjFzJworICAgICAgICBwYWNrX2ludG8gPSBsYW1iZGEgKmFyZ3M6IHN0cnVjdC5wYWNrX2ludG8oZm10LCAqYXJncykKKworICAgICAgICAjIFRlc3Qgd2l0aG91dCBvZmZzZXQuCisgICAgICAgIHBhY2tfaW50byh3cml0YWJsZV9idWYsIDAsIHRlc3Rfc3RyaW5nKQorICAgICAgICBmcm9tX2J1ZiA9IHdyaXRhYmxlX2J1Zi50b3N0cmluZygpWzpsZW4odGVzdF9zdHJpbmcpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyb21fYnVmLCB0ZXN0X3N0cmluZykKKworICAgICAgICAjIFRlc3Qgd2l0aCBvZmZzZXQuCisgICAgICAgIHBhY2tfaW50byh3cml0YWJsZV9idWYsIDEwLCB0ZXN0X3N0cmluZykKKyAgICAgICAgZnJvbV9idWYgPSB3cml0YWJsZV9idWYudG9zdHJpbmcoKVs6bGVuKHRlc3Rfc3RyaW5nKSsxMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcm9tX2J1ZiwgdGVzdF9zdHJpbmdbOjEwXSArIHRlc3Rfc3RyaW5nKQorCisgICAgICAgICMgR28gYmV5b25kIGJvdW5kYXJpZXMuCisgICAgICAgIHNtYWxsX2J1ZiA9IGFycmF5LmFycmF5KCdjJywgJyAnKjEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgc3RydWN0LmVycm9yKSwgcGFja19pbnRvLCBzbWFsbF9idWYsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgc3RydWN0LmVycm9yKSwgcGFja19pbnRvLCBzbWFsbF9idWYsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3RyaW5nKQorCisgICAgZGVmIHRlc3RfdW5wYWNrX3dpdGhfYnVmZmVyKHNlbGYpOgorICAgICAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKCJidWZmZXIuLiBub3Qgc3VwcG9ydGVkIGluIDMueCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICAjIFNGIGJ1ZyAxNTYzNzU5OiBzdHJ1Y3QudW5wYWNrIGRvZXNuJ3Qgc3VwcG9ydCBidWZmZXIgcHJvdG9jb2wgb2JqZWN0cworICAgICAgICAgICAgZGF0YTEgPSBhcnJheS5hcnJheSgnQicsICdceDEyXHgzNFx4NTZceDc4JykKKyAgICAgICAgICAgIGRhdGEyID0gYnVmZmVyKCcuLi4uLi5ceDEyXHgzNFx4NTZceDc4Li4uLi4uJywgNiwgNCkKKyAgICAgICAgICAgIGZvciBkYXRhIGluIFtkYXRhMSwgZGF0YTJdOgorICAgICAgICAgICAgICAgIHZhbHVlLCA9IHN0cnVjdC51bnBhY2soJz5JJywgZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCAweDEyMzQ1Njc4KQorCisgICAgICAgICAgICBzZWxmLnRlc3RfdW5wYWNrX2Zyb20oY2xzPWJ1ZmZlcikKKworICAgIGRlZiB0ZXN0X3VucGFja193aXRoX21lbW9yeXZpZXcoc2VsZik6CisgICAgICAgICMgQnVnIDEwMjEyOiBzdHJ1Y3QudW5wYWNrIGRvZXNuJ3Qgc3VwcG9ydCBuZXcgYnVmZmVyIHByb3RvY29sIG9iamVjdHMKKyAgICAgICAgZGF0YTEgPSBtZW1vcnl2aWV3KCdceDEyXHgzNFx4NTZceDc4JykKKyAgICAgICAgZm9yIGRhdGEgaW4gW2RhdGExLF06CisgICAgICAgICAgICB2YWx1ZSwgPSBzdHJ1Y3QudW5wYWNrKCc+SScsIGRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCAweDEyMzQ1Njc4KQorICAgICAgICBzZWxmLnRlc3RfdW5wYWNrX2Zyb20oY2xzPW1lbW9yeXZpZXcpCisKKyAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgorICAgICAgICBjbGFzcyBFeHBsb2RpbmdCb29sKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICBmb3IgcHJlZml4IGluIHR1cGxlKCI8PiE9IikrKCcnLCk6CisgICAgICAgICAgICBmYWxzZSA9ICgpLCBbXSwgW10sICcnLCAwCisgICAgICAgICAgICB0cnVlID0gWzFdLCAndGVzdCcsIDUsIC0xLCAweGZmZmZmZmZmTCsxLCAweGZmZmZmZmZmLy8yCisKKyAgICAgICAgICAgIGZhbHNlRm9ybWF0ID0gcHJlZml4ICsgJz8nICogbGVuKGZhbHNlKQorICAgICAgICAgICAgcGFja2VkRmFsc2UgPSBzdHJ1Y3QucGFjayhmYWxzZUZvcm1hdCwgKmZhbHNlKQorICAgICAgICAgICAgdW5wYWNrZWRGYWxzZSA9IHN0cnVjdC51bnBhY2soZmFsc2VGb3JtYXQsIHBhY2tlZEZhbHNlKQorCisgICAgICAgICAgICB0cnVlRm9ybWF0ID0gcHJlZml4ICsgJz8nICogbGVuKHRydWUpCisgICAgICAgICAgICBwYWNrZWRUcnVlID0gc3RydWN0LnBhY2sodHJ1ZUZvcm1hdCwgKnRydWUpCisgICAgICAgICAgICB1bnBhY2tlZFRydWUgPSBzdHJ1Y3QudW5wYWNrKHRydWVGb3JtYXQsIHBhY2tlZFRydWUpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRydWUpLCBsZW4odW5wYWNrZWRUcnVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZhbHNlKSwgbGVuKHVucGFja2VkRmFsc2UpKQorCisgICAgICAgICAgICBmb3IgdCBpbiB1bnBhY2tlZEZhbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodCkKKyAgICAgICAgICAgIGZvciB0IGluIHVucGFja2VkVHJ1ZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodCkKKworICAgICAgICAgICAgcGFja2VkID0gc3RydWN0LnBhY2socHJlZml4Kyc/JywgMSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFja2VkKSwgc3RydWN0LmNhbGNzaXplKHByZWZpeCsnPycpKQorCisgICAgICAgICAgICBpZiBsZW4ocGFja2VkKSAhPSAxOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHJlZml4LCBtc2c9J2VuY29kZWQgYm9vbCBpcyBub3Qgb25lIGJ5dGU6ICVyJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXBhY2tlZCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc3RydWN0LnBhY2ssIHByZWZpeCArICc/JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cGxvZGluZ0Jvb2woKSkKKworICAgICAgICBmb3IgYyBpbiBbYidceDAxJywgYidceDdmJywgYidceGZmJywgYidceDBmJywgYidceGYwJ106CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RydWN0LnVucGFjaygnPj8nLCBjKVswXSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKElTMzJCSVQsICJTcGVjaWZpYyB0byAzMmJpdCBtYWNoaW5lcyIpCisgICAgZGVmIHRlc3RfY3Jhc2hlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTWVtb3J5RXJyb3IsIHN0cnVjdC5wYWNrLCAiMzU3OTEzOTQxYyIsICJhIikKKworICAgIGRlZiB0ZXN0X2NvdW50X292ZXJmbG93KHNlbGYpOgorICAgICAgICBodWdlY291bnQgPSAne31iJy5mb3JtYXQoc3lzLm1heHNpemUrMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QuY2FsY3NpemUsIGh1Z2Vjb3VudCkKKworICAgICAgICBodWdlY291bnQyID0gJ3t9Ynt9SCcuZm9ybWF0KHN5cy5tYXhzaXplLy8yLCBzeXMubWF4c2l6ZS8vMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QuY2FsY3NpemUsIGh1Z2Vjb3VudDIpCisKKyAgICBkZWYgY2hlY2tfc2l6ZW9mKHNlbGYsIGZvcm1hdF9zdHIsIG51bWJlcl9vZl9jb2Rlcyk6CisgICAgICAgICMgVGhlIHNpemUgb2YgJ1B5U3RydWN0T2JqZWN0JworICAgICAgICB0b3RhbHNpemUgPSBzdXBwb3J0LmNhbGNvYmpzaXplKCc1UCcpCisgICAgICAgICMgVGhlIHNpemUgdGFrZW4gdXAgYnkgdGhlICdmb3JtYXRjb2RlJyBkeW5hbWljIGFycmF5CisgICAgICAgIHRvdGFsc2l6ZSArPSBzdHJ1Y3QuY2FsY3NpemUoJzNQJykgKiAobnVtYmVyX29mX2NvZGVzICsgMSkKKyAgICAgICAgc3VwcG9ydC5jaGVja19zaXplb2Yoc2VsZiwgc3RydWN0LlN0cnVjdChmb3JtYXRfc3RyKSwgdG90YWxzaXplKQorCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfX3NpemVvZl9fKHNlbGYpOgorICAgICAgICBmb3IgY29kZSBpbiBpbnRlZ2VyX2NvZGVzOgorICAgICAgICAgICAgc2VsZi5jaGVja19zaXplb2YoY29kZSwgMSkKKyAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJ0JISUxmZHNwUCcsIDkpCisgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCdCJyAqIDEyMzQsIDEyMzQpCisgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCdmZCcsIDIpCisgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCd4eHh4eHh4eHh4eHh4eCcsIDApCisgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcxMDBIJywgMTAwKQorICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMTg3cycsIDEpCisgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcyMHAnLCAxKQorICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMHMnLCAxKQorICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMGMnLCAwKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RydWN0VGVzdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3RydWN0bWVtYmVycy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0cnVjdG1lbWJlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNjNThjMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0cnVjdG1lbWJlcnMucHkKQEAgLTAsMCArMSwxMDggQEAKK2Zyb20gX3Rlc3RjYXBpIGltcG9ydCBfdGVzdF9zdHJ1Y3RtZW1iZXJzVHlwZSwgXAorICAgIENIQVJfTUFYLCBDSEFSX01JTiwgVUNIQVJfTUFYLCBcCisgICAgU0hSVF9NQVgsIFNIUlRfTUlOLCBVU0hSVF9NQVgsIFwKKyAgICBJTlRfTUFYLCBJTlRfTUlOLCBVSU5UX01BWCwgXAorICAgIExPTkdfTUFYLCBMT05HX01JTiwgVUxPTkdfTUFYLCBcCisgICAgTExPTkdfTUFYLCBMTE9OR19NSU4sIFVMTE9OR19NQVgKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCit0cz1fdGVzdF9zdHJ1Y3RtZW1iZXJzVHlwZShGYWxzZSwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOS45OTk5OSwgMTAuMTAxMDEwMTAxMCwgImhpIikKKworY2xhc3MgUmVhZFdyaXRlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKKyAgICAgICAgdHMuVF9CT09MID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfQk9PTCwgVHJ1ZSkKKyAgICAgICAgdHMuVF9CT09MID0gRmFsc2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX0JPT0wsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIHRzLCAnVF9CT09MJywgMSkKKworICAgIGRlZiB0ZXN0X2J5dGUoc2VsZik6CisgICAgICAgIHRzLlRfQllURSA9IENIQVJfTUFYCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9CWVRFLCBDSEFSX01BWCkKKyAgICAgICAgdHMuVF9CWVRFID0gQ0hBUl9NSU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX0JZVEUsIENIQVJfTUlOKQorICAgICAgICB0cy5UX1VCWVRFID0gVUNIQVJfTUFYCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9VQllURSwgVUNIQVJfTUFYKQorCisgICAgZGVmIHRlc3Rfc2hvcnQoc2VsZik6CisgICAgICAgIHRzLlRfU0hPUlQgPSBTSFJUX01BWAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLlRfU0hPUlQsIFNIUlRfTUFYKQorICAgICAgICB0cy5UX1NIT1JUID0gU0hSVF9NSU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX1NIT1JULCBTSFJUX01JTikKKyAgICAgICAgdHMuVF9VU0hPUlQgPSBVU0hSVF9NQVgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX1VTSE9SVCwgVVNIUlRfTUFYKQorCisgICAgZGVmIHRlc3RfaW50KHNlbGYpOgorICAgICAgICB0cy5UX0lOVCA9IElOVF9NQVgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX0lOVCwgSU5UX01BWCkKKyAgICAgICAgdHMuVF9JTlQgPSBJTlRfTUlOCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9JTlQsIElOVF9NSU4pCisgICAgICAgIHRzLlRfVUlOVCA9IFVJTlRfTUFYCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9VSU5ULCBVSU5UX01BWCkKKworICAgIGRlZiB0ZXN0X2xvbmcoc2VsZik6CisgICAgICAgIHRzLlRfTE9ORyA9IExPTkdfTUFYCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9MT05HLCBMT05HX01BWCkKKyAgICAgICAgdHMuVF9MT05HID0gTE9OR19NSU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX0xPTkcsIExPTkdfTUlOKQorICAgICAgICB0cy5UX1VMT05HID0gVUxPTkdfTUFYCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9VTE9ORywgVUxPTkdfTUFYKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cih0cywgIlRfTE9OR0xPTkciKSwgImxvbmcgbG9uZyBub3QgcHJlc2VudCIpCisgICAgZGVmIHRlc3RfbG9uZ2xvbmcoc2VsZik6CisgICAgICAgIHRzLlRfTE9OR0xPTkcgPSBMTE9OR19NQVgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX0xPTkdMT05HLCBMTE9OR19NQVgpCisgICAgICAgIHRzLlRfTE9OR0xPTkcgPSBMTE9OR19NSU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX0xPTkdMT05HLCBMTE9OR19NSU4pCisKKyAgICAgICAgdHMuVF9VTE9OR0xPTkcgPSBVTExPTkdfTUFYCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9VTE9OR0xPTkcsIFVMTE9OR19NQVgpCisKKyAgICAgICAgIyMgbWFrZSBzdXJlIHRoZXNlIHdpbGwgYWNjZXB0IGEgcGxhaW4gaW50IGFzIHdlbGwgYXMgYSBsb25nCisgICAgICAgIHRzLlRfTE9OR0xPTkcgPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9MT05HTE9ORywgMykKKyAgICAgICAgdHMuVF9VTE9OR0xPTkcgPSA0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHMuVF9VTE9OR0xPTkcsIDQpCisKKyAgICBkZWYgdGVzdF9pbnBsYWNlX3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cy5UX1NUUklOR19JTlBMQUNFLCAiaGkiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIHRzLCAiVF9TVFJJTkdfSU5QTEFDRSIsICJzIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkZWxhdHRyLCB0cywgIlRfU1RSSU5HX0lOUExBQ0UiKQorCisKK2NsYXNzIFRlc3RXYXJuaW5ncyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ieXRlX21heChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSdW50aW1lV2FybmluZykpOgorICAgICAgICAgICAgdHMuVF9CWVRFID0gQ0hBUl9NQVgrMQorCisgICAgZGVmIHRlc3RfYnl0ZV9taW4oc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKKyAgICAgICAgICAgIHRzLlRfQllURSA9IENIQVJfTUlOLTEKKworICAgIGRlZiB0ZXN0X3VieXRlX21heChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSdW50aW1lV2FybmluZykpOgorICAgICAgICAgICAgdHMuVF9VQllURSA9IFVDSEFSX01BWCsxCisKKyAgICBkZWYgdGVzdF9zaG9ydF9tYXgoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKKyAgICAgICAgICAgIHRzLlRfU0hPUlQgPSBTSFJUX01BWCsxCisKKyAgICBkZWYgdGVzdF9zaG9ydF9taW4oc2VsZik6CisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKKyAgICAgICAgICAgIHRzLlRfU0hPUlQgPSBTSFJUX01JTi0xCisKKyAgICBkZWYgdGVzdF91c2hvcnRfbWF4KHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJ1bnRpbWVXYXJuaW5nKSk6CisgICAgICAgICAgICB0cy5UX1VTSE9SVCA9IFVTSFJUX01BWCsxCisKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0cnVjdHNlcS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N0cnVjdHNlcS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWExMmFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5CkBAIC0wLDAgKzEsMTIwIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2ltcG9ydCB0aW1lCisKK2NsYXNzIFN0cnVjdFNlcVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdHVwbGUoc2VsZik6CisgICAgICAgIHQgPSB0aW1lLmdtdGltZSgpCisgICAgICAgIGFzdHVwbGUgPSB0dXBsZSh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0KSwgbGVuKGFzdHVwbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIGFzdHVwbGUpCisKKyAgICAgICAgIyBDaGVjayB0aGF0IHNsaWNpbmcgd29ya3MgdGhlIHNhbWUgd2F5OyBhdCBvbmUgcG9pbnQsIHNsaWNpbmcgdFtpOmpdIHdpdGgKKyAgICAgICAgIyAwIDwgaSA8IGogY291bGQgcHJvZHVjZSBOVUxMcyBpbiB0aGUgcmVzdWx0LgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoLWxlbih0KSwgbGVuKHQpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFtpOl0sIGFzdHVwbGVbaTpdKQorICAgICAgICAgICAgZm9yIGogaW4geHJhbmdlKC1sZW4odCksIGxlbih0KSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0W2k6al0sIGFzdHVwbGVbaTpqXSkKKworICAgICAgICBmb3IgaiBpbiB4cmFuZ2UoLWxlbih0KSwgbGVuKHQpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFs6al0sIGFzdHVwbGVbOmpdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHQuX19nZXRpdGVtX18sIC1sZW4odCktMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdC5fX2dldGl0ZW1fXywgbGVuKHQpKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoLWxlbih0KSwgbGVuKHQpLTEpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0W2ldLCBhc3R1cGxlW2ldKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgdCA9IHRpbWUuZ210aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIodCkpCisgICAgICAgIHQgPSB0aW1lLmdtdGltZSgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksCisgICAgICAgICAgICAidGltZS5zdHJ1Y3RfdGltZSh0bV95ZWFyPTE5NzAsIHRtX21vbj0xLCB0bV9tZGF5PTEsIHRtX2hvdXI9MCwgIgorICAgICAgICAgICAgInRtX21pbj0wLCB0bV9zZWM9MCwgdG1fd2RheT0zLCB0bV95ZGF5PTEsIHRtX2lzZHN0PTApIikKKworICAgIGRlZiB0ZXN0X2NvbmNhdChzZWxmKToKKyAgICAgICAgdDEgPSB0aW1lLmdtdGltZSgpCisgICAgICAgIHQyID0gdDEgKyB0dXBsZSh0MSkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKGxlbih0MSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MltpXSwgdDJbaStsZW4odDEpXSkKKworICAgIGRlZiB0ZXN0X3JlcGVhdChzZWxmKToKKyAgICAgICAgdDEgPSB0aW1lLmdtdGltZSgpCisgICAgICAgIHQyID0gMyAqIHQxCisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4odDEpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDJbaV0sIHQyW2krbGVuKHQxKV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyW2ldLCB0MltpKzIqbGVuKHQxKV0pCisKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgdDEgPSB0aW1lLmdtdGltZSgpCisgICAgICAgIGZvciBpdGVtIGluIHQxOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpdGVtLCB0MSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigtNDIsIHQxKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgdDEgPSB0aW1lLmdtdGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0MSksIGhhc2godHVwbGUodDEpKSkKKworICAgIGRlZiB0ZXN0X2NtcChzZWxmKToKKyAgICAgICAgdDEgPSB0aW1lLmdtdGltZSgpCisgICAgICAgIHQyID0gdHlwZSh0MSkodDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90ICh0MSA8IHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90ICh0MSA+IHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID49IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90ICh0MSAhPSB0MikpCisKKyAgICBkZWYgdGVzdF9maWVsZHMoc2VsZik6CisgICAgICAgIHQgPSB0aW1lLmdtdGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCB0Lm5fZmllbGRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubl9maWVsZHMsIHQubl9zZXF1ZW5jZV9maWVsZHMrdC5uX3VubmFtZWRfZmllbGRzKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHQgPSB0aW1lLnN0cnVjdF90aW1lCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdCwgIjEyMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdCwgIjEyMyIsIGRpY3Q9e30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdCwgIjEyMzQ1Njc4OSIsIGRpY3Q9Tm9uZSkKKworICAgICAgICBzID0gIjEyMzQ1Njc4OSIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIi5qb2luKHQocykpLCBzKQorCisgICAgZGVmIHRlc3RfZXZpbHR1cGxlKHNlbGYpOgorICAgICAgICBjbGFzcyBFeGMoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIERldmlvdXMgY29kZSBjb3VsZCBjcmFzaCBzdHJ1Y3RzZXFzJyBjb250cnVjdG9ycworICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4YworICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGMsIHRpbWUuc3RydWN0X3RpbWUsIEMoKSkKKworICAgIGRlZiB0ZXN0X3JlZHVjZShzZWxmKToKKyAgICAgICAgdCA9IHRpbWUuZ210aW1lKCkKKyAgICAgICAgeCA9IHQuX19yZWR1Y2VfXygpCisKKyAgICBkZWYgdGVzdF9leHRlbmRlZF9nZXRzbGljZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGV4dGVuZGVkIHNsaWNpbmcgYnkgY29tcGFyaW5nIHdpdGggbGlzdCBzbGljaW5nLgorICAgICAgICB0ID0gdGltZS5nbXRpbWUoKQorICAgICAgICBMID0gbGlzdCh0KQorICAgICAgICBpbmRpY2VzID0gKDAsIE5vbmUsIDEsIDMsIDE5LCAzMDAsIC0xLCAtMiwgLTMxLCAtMzAwKQorICAgICAgICBmb3Igc3RhcnQgaW4gaW5kaWNlczoKKyAgICAgICAgICAgIGZvciBzdG9wIGluIGluZGljZXM6CisgICAgICAgICAgICAgICAgIyBTa2lwIHN0ZXAgMCAoaW52YWxpZCkKKyAgICAgICAgICAgICAgICBmb3Igc3RlcCBpbiBpbmRpY2VzWzE6XToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHRbc3RhcnQ6c3RvcDpzdGVwXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFtzdGFydDpzdG9wOnN0ZXBdKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTdHJ1Y3RTZXFUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODlkODRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQpAQCAtMCwwICsxLDEzOTcgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgb3MKK2ltcG9ydCBlcnJubworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQoraW1wb3J0IHJlCitpbXBvcnQgc3lzY29uZmlnCisKK3RyeToKKyAgICBpbXBvcnQgcmVzb3VyY2UKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICByZXNvdXJjZSA9IE5vbmUKKworbXN3aW5kb3dzID0gKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiKQorCisjCisjIERlcGVuZHMgb24gdGhlIGZvbGxvd2luZyBleHRlcm5hbCBwcm9ncmFtczogUHl0aG9uCisjCisKK2lmIG1zd2luZG93czoKKyAgICBTRVRCSU5BUlkgPSAoJ2ltcG9ydCBtc3ZjcnQ7IG1zdmNydC5zZXRtb2RlKHN5cy5zdGRvdXQuZmlsZW5vKCksICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcy5PX0JJTkFSWSk7JykKK2Vsc2U6CisgICAgU0VUQklOQVJZID0gJycKKworCit0cnk6CisgICAgbWtzdGVtcCA9IHRlbXBmaWxlLm1rc3RlbXAKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAjIHRlbXBmaWxlLm1rc3RlbXAgaXMgbm90IGF2YWlsYWJsZQorICAgIGRlZiBta3N0ZW1wKCk6CisgICAgICAgICIiIlJlcGxhY2VtZW50IGZvciBta3N0ZW1wLCBjYWxsaW5nIG1rdGVtcC4iIiIKKyAgICAgICAgZm5hbWUgPSB0ZW1wZmlsZS5ta3RlbXAoKQorICAgICAgICByZXR1cm4gb3Mub3BlbihmbmFtZSwgb3MuT19SRFdSfG9zLk9fQ1JFQVQpLCBmbmFtZQorCisKK2NsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIFRyeSB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHdlIGhhdmUgc28gdGhpcyB0ZXN0CisgICAgICAgICMgZG9lc24ndCBjcmFzaCBvbiBzb21lIGJ1aWxkYm90cyAoQWxwaGFzIGluIHBhcnRpY3VsYXIpLgorICAgICAgICB0ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBpbnN0IGluIHN1YnByb2Nlc3MuX2FjdGl2ZToKKyAgICAgICAgICAgIGluc3Qud2FpdCgpCisgICAgICAgIHN1YnByb2Nlc3MuX2NsZWFudXAoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YnByb2Nlc3MuX2FjdGl2ZSwgInN1YnByb2Nlc3MuX2FjdGl2ZSBub3QgZW1wdHkiKQorCisgICAgZGVmIGFzc2VydFN0ZGVyckVxdWFsKHNlbGYsIHN0ZGVyciwgZXhwZWN0ZWQsIG1zZz1Ob25lKToKKyAgICAgICAgIyBJbiBhIGRlYnVnIGJ1aWxkLCBzdHVmZiBsaWtlICJbNjU4MCByZWZzXSIgaXMgcHJpbnRlZCB0byBzdGRlcnIgYXQKKyAgICAgICAgIyBzaHV0ZG93biB0aW1lLiAgVGhhdCBmcnVzdHJhdGVzIHRlc3RzIHRyeWluZyB0byBjaGVjayBzdGRlcnIgcHJvZHVjZWQKKyAgICAgICAgIyBmcm9tIGEgc3Bhd25lZCBQeXRob24gcHJvY2Vzcy4KKyAgICAgICAgYWN0dWFsID0gcmUuc3ViKHIiXFtcZCsgcmVmc1xdXHI/XG4/JCIsICIiLCBzdGRlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbXNnKQorCisKK2NsYXNzIFBvcGVuVGVzdEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBQb3BlbkV4ZWN1dGVDaGlsZFJhaXNlcyhzdWJwcm9jZXNzLlBvcGVuKToKKyAgICAiIiJQb3BlbiBzdWJjbGFzcyBmb3IgdGVzdGluZyBjbGVhbnVwIG9mIHN1YnByb2Nlc3MuUElQRSBmaWxlaGFuZGxlcyB3aGVuCisgICAgX2V4ZWN1dGVfY2hpbGQgZmFpbHMuCisgICAgIiIiCisgICAgZGVmIF9leGVjdXRlX2NoaWxkKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJhaXNlIFBvcGVuVGVzdEV4Y2VwdGlvbigiRm9yY2VkIEV4Y2VwdGlvbiBmb3IgVGVzdCIpCisKKworY2xhc3MgUHJvY2Vzc1Rlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jYWxsX3NlcShzZWxmKToKKyAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzZXF1ZW5jZSBhcmd1bWVudAorICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDQ3KQorCisgICAgZGVmIHRlc3RfY2hlY2tfY2FsbF96ZXJvKHNlbGYpOgorICAgICAgICAjIGNoZWNrX2NhbGwoKSBmdW5jdGlvbiB3aXRoIHplcm8gcmV0dXJuIGNvZGUKKyAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDApIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCisKKyAgICBkZWYgdGVzdF9jaGVja19jYWxsX25vbnplcm8oc2VsZik6CisgICAgICAgICMgY2hlY2tfY2FsbCgpIGZ1bmN0aW9uIHdpdGggbm9uLXplcm8gcmV0dXJuIGNvZGUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmV4Y2VwdGlvbi5yZXR1cm5jb2RlLCA0NykKKworICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dChzZWxmKToKKyAgICAgICAgIyBjaGVja19vdXRwdXQoKSBmdW5jdGlvbiB3aXRoIHplcm8gcmV0dXJuIGNvZGUKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicHJpbnQgJ0JERkwnIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0JERkwnLCBvdXRwdXQpCisKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfbm9uemVybyhzZWxmKToKKyAgICAgICAgIyBjaGVja19jYWxsKCkgZnVuY3Rpb24gd2l0aCBub24temVybyByZXR1cm4gY29kZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKSBhcyBjOgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5leGl0KDUpIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5leGNlcHRpb24ucmV0dXJuY29kZSwgNSkKKworICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF9zdGRlcnIoc2VsZik6CisgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgZnVuY3Rpb24gc3RkZXJyIHJlZGlyZWN0ZWQgdG8gc3Rkb3V0CisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5zdGRlcnIud3JpdGUoJ0JERkwnKSJdLAorICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignQkRGTCcsIG91dHB1dCkKKworICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF9zdGRvdXRfYXJnKHNlbGYpOgorICAgICAgICAjIGNoZWNrX291dHB1dCgpIGZ1bmN0aW9uIHN0ZGVyciByZWRpcmVjdGVkIHRvIHN0ZG91dAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGM6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicHJpbnQgJ3dpbGwgbm90IGJlIHJ1biciXSwKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN5cy5zdGRvdXQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igd2hlbiBzdGRvdXQgYXJnIHN1cHBsaWVkLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3N0ZG91dCcsIGMuZXhjZXB0aW9uLmFyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9jYWxsX2t3YXJncyhzZWxmKToKKyAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBrZXl3b3JkIGFyZ3MKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gImJhbmFuYSIKKyAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMsIG9zOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuZXhpdChvcy5nZXRlbnYoIkZSVUlUIik9PSJiYW5hbmEiKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICAjIFBvcGVuKCkgY2FsbGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHMgc2hvdWxkIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICAjIGJ1dCBQb3Blbi5fX2RlbF9fIHNob3VsZCBub3QgY29tcGxhaW4gKGlzc3VlICMxMjA4NSkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3VicHJvY2Vzcy5Qb3BlbiwgaW52YWxpZF9hcmdfbmFtZT0xKQorICAgICAgICAgICAgYXJnY291bnQgPSBzdWJwcm9jZXNzLlBvcGVuLl9faW5pdF9fLl9fY29kZV9fLmNvX2FyZ2NvdW50CisgICAgICAgICAgICB0b29fbWFueV9hcmdzID0gWzBdICogKGFyZ2NvdW50ICsgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3VicHJvY2Vzcy5Qb3BlbiwgKnRvb19tYW55X2FyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCAnJykKKworICAgIGRlZiB0ZXN0X3N0ZGluX25vbmUoc2VsZik6CisgICAgICAgICMgLnN0ZGluIGlzIE5vbmUgd2hlbiBub3QgcmVkaXJlY3RlZAorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwcmludCAiYmFuYW5hIiddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQorICAgICAgICBwLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3RkaW4sIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zdGRvdXRfbm9uZShzZWxmKToKKyAgICAgICAgIyAuc3Rkb3V0IGlzIE5vbmUgd2hlbiBub3QgcmVkaXJlY3RlZCwgYW5kIHRoZSBjaGlsZCdzIHN0ZG91dCB3aWxsCisgICAgICAgICMgYmUgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudC4gIEluIG9yZGVyIHRvIHRlc3QgdGhpcyB3ZSBydW4gYQorICAgICAgICAjIHN1YnByb2Nlc3MgaW4gYSBzdWJwcm9jZXNzOgorICAgICAgICAjIHRoaXNfdGVzdAorICAgICAgICAjICAgXC0tIHN1YnByb2Nlc3MgY3JlYXRlZCBieSB0aGlzIHRlc3QgKHBhcmVudCkKKyAgICAgICAgIyAgICAgICAgICBcLS0gc3VicHJvY2VzcyBjcmVhdGVkIGJ5IHRoZSBwYXJlbnQgc3VicHJvY2VzcyAoY2hpbGQpCisgICAgICAgICMgVGhlIHBhcmVudCBkb2Vzbid0IHNwZWNpZnkgc3Rkb3V0LCBzbyB0aGUgY2hpbGQgd2lsbCB1c2UgdGhlCisgICAgICAgICMgcGFyZW50J3Mgc3Rkb3V0LiAgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBtZXNzYWdlIHByaW50ZWQgYnkgdGhlCisgICAgICAgICMgY2hpbGQgZ29lcyB0byB0aGUgcGFyZW50IHN0ZG91dC4gIFRoZSBwYXJlbnQgYWxzbyBjaGVja3MgdGhhdCB0aGUKKyAgICAgICAgIyBjaGlsZCdzIHN0ZG91dCBpcyBOb25lLiAgU2VlICMxMTk2My4KKyAgICAgICAgY29kZSA9ICgnaW1wb3J0IHN5czsgZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRTsnCisgICAgICAgICAgICAgICAgJ3AgPSBQb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwcmludCBcJ3Rlc3Rfc3Rkb3V0X25vbmVcJyJdLCcKKyAgICAgICAgICAgICAgICAnICAgICAgICAgIHN0ZGluPVBJUEUsIHN0ZGVycj1QSVBFKTsnCisgICAgICAgICAgICAgICAgJ3Aud2FpdCgpOyBhc3NlcnQgcC5zdGRvdXQgaXMgTm9uZTsnKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsIGNvZGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDAsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQucnN0cmlwKCksICd0ZXN0X3N0ZG91dF9ub25lJykKKworICAgIGRlZiB0ZXN0X3N0ZGVycl9ub25lKHNlbGYpOgorICAgICAgICAjIC5zdGRlcnIgaXMgTm9uZSB3aGVuIG5vdCByZWRpcmVjdGVkCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50ICJiYW5hbmEiJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQorICAgICAgICBwLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3RkZXJyLCBOb25lKQorCisgICAgZGVmIHRlc3RfZXhlY3V0YWJsZV93aXRoX2N3ZChzZWxmKToKKyAgICAgICAgcHl0aG9uX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKHN5cy5leGVjdXRhYmxlKSkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJzb21ldGhpbmd5b3Vkb250aGF2ZSIsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGU9c3lzLmV4ZWN1dGFibGUsIGN3ZD1weXRob25fZGlyKQorICAgICAgICBwLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgNDcpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKSwKKyAgICAgICAgICAgICAgICAgICAgICJuZWVkIGFuIGluc3RhbGxlZCBQeXRob24uIFNlZSAjNzc3NCIpCisgICAgZGVmIHRlc3RfZXhlY3V0YWJsZV93aXRob3V0X2N3ZChzZWxmKToKKyAgICAgICAgIyBGb3IgYSBub3JtYWwgaW5zdGFsbGF0aW9uLCBpdCBzaG91bGQgd29yayB3aXRob3V0ICdjd2QnCisgICAgICAgICMgYXJndW1lbnQuICBGb3IgdGVzdCBydW5zIGluIHRoZSBidWlsZCBkaXJlY3RvcnksIHNlZSAjNzc3NC4KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJzb21ldGhpbmd5b3Vkb250aGF2ZSIsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGU9c3lzLmV4ZWN1dGFibGUpCisgICAgICAgIHAud2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCA0NykKKworICAgIGRlZiB0ZXN0X3N0ZGluX3BpcGUoc2VsZik6CisgICAgICAgICMgc3RkaW4gcmVkaXJlY3Rpb24KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBzeXMuZXhpdChzeXMuc3RkaW4ucmVhZCgpID09ICJwZWFyIiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgcC5zdGRpbi53cml0ZSgicGVhciIpCisgICAgICAgIHAuc3RkaW4uY2xvc2UoKQorICAgICAgICBwLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgMSkKKworICAgIGRlZiB0ZXN0X3N0ZGluX2ZpbGVkZXMoc2VsZik6CisgICAgICAgICMgc3RkaW4gaXMgc2V0IHRvIG9wZW4gZmlsZSBkZXNjcmlwdG9yCisgICAgICAgIHRmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIGQgPSB0Zi5maWxlbm8oKQorICAgICAgICBvcy53cml0ZShkLCAicGVhciIpCisgICAgICAgIG9zLmxzZWVrKGQsIDAsIDApCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLmV4aXQoc3lzLnN0ZGluLnJlYWQoKSA9PSAicGVhciIpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49ZCkKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDEpCisKKyAgICBkZWYgdGVzdF9zdGRpbl9maWxlb2JqKHNlbGYpOgorICAgICAgICAjIHN0ZGluIGlzIHNldCB0byBvcGVuIGZpbGUgb2JqZWN0CisgICAgICAgIHRmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHRmLndyaXRlKCJwZWFyIikKKyAgICAgICAgdGYuc2VlaygwKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHN5cy5leGl0KHN5cy5zdGRpbi5yZWFkKCkgPT0gInBlYXIiKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXRmKQorICAgICAgICBwLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgMSkKKworICAgIGRlZiB0ZXN0X3N0ZG91dF9waXBlKHNlbGYpOgorICAgICAgICAjIHN0ZG91dCByZWRpcmVjdGlvbgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKCJvcmFuZ2UiKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dC5yZWFkKCksICJvcmFuZ2UiKQorCisgICAgZGVmIHRlc3Rfc3Rkb3V0X2ZpbGVkZXMoc2VsZik6CisgICAgICAgICMgc3Rkb3V0IGlzIHNldCB0byBvcGVuIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICB0ZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICBkID0gdGYuZmlsZW5vKCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZSgib3JhbmdlIiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9ZCkKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgb3MubHNlZWsoZCwgMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5yZWFkKGQsIDEwMjQpLCAib3JhbmdlIikKKworICAgIGRlZiB0ZXN0X3N0ZG91dF9maWxlb2JqKHNlbGYpOgorICAgICAgICAjIHN0ZG91dCBpcyBzZXQgdG8gb3BlbiBmaWxlIG9iamVjdAorICAgICAgICB0ZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKCJvcmFuZ2UiKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD10ZikKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgdGYuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRmLnJlYWQoKSwgIm9yYW5nZSIpCisKKyAgICBkZWYgdGVzdF9zdGRlcnJfcGlwZShzZWxmKToKKyAgICAgICAgIyBzdGRlcnIgcmVkaXJlY3Rpb24KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLnN0ZGVyci53cml0ZSgic3RyYXdiZXJyeSIpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHAuc3RkZXJyLnJlYWQoKSwgInN0cmF3YmVycnkiKQorCisgICAgZGVmIHRlc3Rfc3RkZXJyX2ZpbGVkZXMoc2VsZik6CisgICAgICAgICMgc3RkZXJyIGlzIHNldCB0byBvcGVuIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICB0ZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICBkID0gdGYuZmlsZW5vKCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLnN0ZGVyci53cml0ZSgic3RyYXdiZXJyeSIpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPWQpCisgICAgICAgIHAud2FpdCgpCisgICAgICAgIG9zLmxzZWVrKGQsIDAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0U3RkZXJyRXF1YWwob3MucmVhZChkLCAxMDI0KSwgInN0cmF3YmVycnkiKQorCisgICAgZGVmIHRlc3Rfc3RkZXJyX2ZpbGVvYmooc2VsZik6CisgICAgICAgICMgc3RkZXJyIGlzIHNldCB0byBvcGVuIGZpbGUgb2JqZWN0CisgICAgICAgIHRmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHN5cy5zdGRlcnIud3JpdGUoInN0cmF3YmVycnkiKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj10ZikKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgdGYuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHRmLnJlYWQoKSwgInN0cmF3YmVycnkiKQorCisgICAgZGVmIHRlc3Rfc3Rkb3V0X3N0ZGVycl9waXBlKHNlbGYpOgorICAgICAgICAjIGNhcHR1cmUgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gdGhlIHNhbWUgcGlwZQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImFwcGxlIik7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5mbHVzaCgpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRlcnIud3JpdGUoIm9yYW5nZSIpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChwLnN0ZG91dC5yZWFkKCksICJhcHBsZW9yYW5nZSIpCisKKyAgICBkZWYgdGVzdF9zdGRvdXRfc3RkZXJyX2ZpbGUoc2VsZik6CisgICAgICAgICMgY2FwdHVyZSBzdGRvdXQgYW5kIHN0ZGVyciB0byB0aGUgc2FtZSBvcGVuIGZpbGUKKyAgICAgICAgdGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKCJhcHBsZSIpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQuZmx1c2goKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3RkZXJyLndyaXRlKCJvcmFuZ2UiKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD10ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9dGYpCisgICAgICAgIHAud2FpdCgpCisgICAgICAgIHRmLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbCh0Zi5yZWFkKCksICJhcHBsZW9yYW5nZSIpCisKKyAgICBkZWYgdGVzdF9zdGRvdXRfZmlsZWRlc19vZl9zdGRvdXQoc2VsZik6CisgICAgICAgICMgc3Rkb3V0IGlzIHNldCB0byAxICgjMTUzMTg2MikuCisgICAgICAgICMgVG8gYXZvaWQgcHJpbnRpbmcgdGhlIHRleHQgb24gc3Rkb3V0LCB3ZSBkbyBzb21ldGhpbmcgc2ltaWxhciB0bworICAgICAgICAjIHRlc3Rfc3Rkb3V0X25vbmUgKHNlZSBhYm92ZSkuICBUaGUgcGFyZW50IHN1YnByb2Nlc3MgY2FsbHMgdGhlIGNoaWxkCisgICAgICAgICMgc3VicHJvY2VzcyBwYXNzaW5nIHN0ZG91dD0xLCBhbmQgdGhpcyB0ZXN0IHVzZXMgc3Rkb3V0PVBJUEUgaW4KKyAgICAgICAgIyBvcmRlciB0byBjYXB0dXJlIGFuZCBjaGVjayB0aGUgb3V0cHV0IG9mIHRoZSBwYXJlbnQuIFNlZSAjMTE5NjMuCisgICAgICAgIGNvZGUgPSAoJ2ltcG9ydCBzeXMsIHN1YnByb2Nlc3M7ICcKKyAgICAgICAgICAgICAgICAncmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAnCisgICAgICAgICAgICAgICAgJyAgICAiaW1wb3J0IG9zLCBzeXM7IHN5cy5leGl0KG9zLndyaXRlKHN5cy5zdGRvdXQuZmlsZW5vKCksICcKKyAgICAgICAgICAgICAgICAgICAgICdcJ3Rlc3Qgd2l0aCBzdGRvdXQ9MVwnKSkiXSwgc3Rkb3V0PTEpOyAnCisgICAgICAgICAgICAgICAgJ2Fzc2VydCByYyA9PSAxOCcpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgY29kZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgMCwgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5yc3RyaXAoKSwgJ3Rlc3Qgd2l0aCBzdGRvdXQ9MScpCisKKyAgICBkZWYgdGVzdF9jd2Qoc2VsZik6CisgICAgICAgIHRtcGRpciA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQorICAgICAgICAjIFdlIGNhbm5vdCB1c2Ugb3MucGF0aC5yZWFscGF0aCB0byBjYW5vbmljYWxpemUgdGhlIHBhdGgsCisgICAgICAgICMgc2luY2UgaXQgZG9lc24ndCBleHBhbmQgVHJ1NjQge21lbWJ9IHN0cmluZ3MuIFNlZSBidWcgMTA2MzU3MS4KKyAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0bXBkaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcihjd2QpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMsb3M7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZShvcy5nZXRjd2QoKSknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD10bXBkaXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgbm9ybWNhc2UgPSBvcy5wYXRoLm5vcm1jYXNlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm9ybWNhc2UocC5zdGRvdXQucmVhZCgpKSwgbm9ybWNhc2UodG1wZGlyKSkKKworICAgIGRlZiB0ZXN0X2VudihzZWxmKToKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gIm9yYW5nZSIKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cyxvczsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKG9zLmdldGVudigiRlJVSVQiKSknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dC5yZWFkKCksICJvcmFuZ2UiKQorCisgICAgZGVmIHRlc3RfY29tbXVuaWNhdGVfc3RkaW4oc2VsZik6CisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuZXhpdChzeXMuc3RkaW4ucmVhZCgpID09ICJwZWFyIiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBwLmNvbW11bmljYXRlKCJwZWFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDEpCisKKyAgICBkZWYgdGVzdF9jb21tdW5pY2F0ZV9zdGRvdXQoc2VsZik6CisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKCJwaW5lYXBwbGUiKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAoc3Rkb3V0LCBzdGRlcnIpID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCAicGluZWFwcGxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRlcnIsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jb21tdW5pY2F0ZV9zdGRlcnIoc2VsZik6CisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBzeXMuc3RkZXJyLndyaXRlKCJwaW5lYXBwbGUiKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAoc3Rkb3V0LCBzdGRlcnIpID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHN0ZGVyciwgInBpbmVhcHBsZSIpCisKKyAgICBkZWYgdGVzdF9jb21tdW5pY2F0ZShzZWxmKToKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cyxvczsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3RkZXJyLndyaXRlKCJwaW5lYXBwbGUiKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKCkpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQorICAgICAgICAoc3Rkb3V0LCBzdGRlcnIpID0gcC5jb21tdW5pY2F0ZSgiYmFuYW5hIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsICJiYW5hbmEiKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHN0ZGVyciwgInBpbmVhcHBsZSIpCisKKyAgICAjIFRoaXMgdGVzdCBpcyBMaW51eCBzcGVjaWZpYyBmb3Igc2ltcGxpY2l0eSB0byBhdCBsZWFzdCBoYXZlCisgICAgIyBzb21lIGNvdmVyYWdlLiAgSXQgaXMgbm90IGEgcGxhdGZvcm0gc3BlY2lmaWMgYnVnLgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLnBhdGguaXNkaXIoJy9wcm9jLyVkL2ZkJyAlIG9zLmdldHBpZCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiTGludXggc3BlY2lmaWMiKQorICAgICMgVGVzdCBmb3IgdGhlIGZkIGxlYWsgcmVwb3J0ZWQgaW4gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI3OTEuCisgICAgZGVmIHRlc3RfY29tbXVuaWNhdGVfcGlwZV9mZF9sZWFrKHNlbGYpOgorICAgICAgICBmZF9kaXJlY3RvcnkgPSAnL3Byb2MvJWQvZmQnICUgb3MuZ2V0cGlkKCkKKyAgICAgICAgbnVtX2Zkc19iZWZvcmVfcG9wZW4gPSBsZW4ob3MubGlzdGRpcihmZF9kaXJlY3RvcnkpKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwcmludCgpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHAuY29tbXVuaWNhdGUoKQorICAgICAgICBudW1fZmRzX2FmdGVyX2NvbW11bmljYXRlID0gbGVuKG9zLmxpc3RkaXIoZmRfZGlyZWN0b3J5KSkKKyAgICAgICAgZGVsIHAKKyAgICAgICAgbnVtX2Zkc19hZnRlcl9kZXN0cnVjdGlvbiA9IGxlbihvcy5saXN0ZGlyKGZkX2RpcmVjdG9yeSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2Zkc19iZWZvcmVfcG9wZW4sIG51bV9mZHNfYWZ0ZXJfZGVzdHJ1Y3Rpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2Zkc19iZWZvcmVfcG9wZW4sIG51bV9mZHNfYWZ0ZXJfY29tbXVuaWNhdGUpCisKKyAgICBkZWYgdGVzdF9jb21tdW5pY2F0ZV9yZXR1cm5zKHNlbGYpOgorICAgICAgICAjIGNvbW11bmljYXRlKCkgc2hvdWxkIHJldHVybiBOb25lIGlmIG5vIHJlZGlyZWN0aW9uIGlzIGFjdGl2ZQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0pCisgICAgICAgIChzdGRvdXQsIHN0ZGVycikgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLCBOb25lKQorCisgICAgZGVmIHRlc3RfY29tbXVuaWNhdGVfcGlwZV9idWYoc2VsZik6CisgICAgICAgICMgY29tbXVuaWNhdGUoKSB3aXRoIHdyaXRlcyBsYXJnZXIgdGhhbiBwaXBlX2J1ZgorICAgICAgICAjIFRoaXMgdGVzdCB3aWxsIHByb2JhYmx5IGRlYWRsb2NrIHJhdGhlciB0aGFuIGZhaWwsIGlmCisgICAgICAgICMgY29tbXVuaWNhdGUoKSBkb2VzIG5vdCB3b3JrIHByb3Blcmx5LgorICAgICAgICB4LCB5ID0gb3MucGlwZSgpCisgICAgICAgIGlmIG1zd2luZG93czoKKyAgICAgICAgICAgIHBpcGVfYnVmID0gNTEyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwaXBlX2J1ZiA9IG9zLmZwYXRoY29uZih4LCAiUENfUElQRV9CVUYiKQorICAgICAgICBvcy5jbG9zZSh4KQorICAgICAgICBvcy5jbG9zZSh5KQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzLG9zOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoc3lzLnN0ZGluLnJlYWQoNDcpKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3RkZXJyLndyaXRlKCJ4eXoiKiVkKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKCkpJyAlIHBpcGVfYnVmXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkaW4uY2xvc2UpCisgICAgICAgIHN0cmluZ190b193cml0ZSA9ICJhYmMiKnBpcGVfYnVmCisgICAgICAgIChzdGRvdXQsIHN0ZGVycikgPSBwLmNvbW11bmljYXRlKHN0cmluZ190b193cml0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIHN0cmluZ190b193cml0ZSkKKworICAgIGRlZiB0ZXN0X3dyaXRlc19iZWZvcmVfY29tbXVuaWNhdGUoc2VsZik6CisgICAgICAgICMgc3RkaW4ud3JpdGUgYmVmb3JlIGNvbW11bmljYXRlKCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cyxvczsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKCkpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQorICAgICAgICBwLnN0ZGluLndyaXRlKCJiYW5hbmEiKQorICAgICAgICAoc3Rkb3V0LCBzdGRlcnIpID0gcC5jb21tdW5pY2F0ZSgic3BsaXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgImJhbmFuYXNwbGl0IikKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChzdGRlcnIsICIiKQorCisgICAgZGVmIHRlc3RfdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzLG9zOycgKyBTRVRCSU5BUlkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgibGluZTFcXG4iKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgibGluZTJcXHIiKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgibGluZTNcXHJcXG4iKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgibGluZTRcXHIiKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiXFxubGluZTUiKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiXFxubGluZTYiKTsnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz0xKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHN0ZG91dCA9IHAuc3Rkb3V0LnJlYWQoKQorICAgICAgICBpZiBoYXNhdHRyKGZpbGUsICduZXdsaW5lcycpOgorICAgICAgICAgICAgIyBJbnRlcnByZXRlciB3aXRoIHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZTFcbmxpbmUyXG5saW5lM1xubGluZTRcbmxpbmU1XG5saW5lNiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEludGVycHJldGVyIHdpdGhvdXQgdW5pdmVyc2FsIG5ld2xpbmUgc3VwcG9ydAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lMVxubGluZTJccmxpbmUzXHJcbmxpbmU0XHJcbmxpbmU1XG5saW5lNiIpCisKKyAgICBkZWYgdGVzdF91bml2ZXJzYWxfbmV3bGluZXNfY29tbXVuaWNhdGUoc2VsZik6CisgICAgICAgICMgdW5pdmVyc2FsIG5ld2xpbmVzIHRocm91Z2ggY29tbXVuaWNhdGUoKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzLG9zOycgKyBTRVRCSU5BUlkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgibGluZTFcXG4iKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgibGluZTJcXHIiKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgibGluZTNcXHJcXG4iKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgibGluZTRcXHIiKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiXFxubGluZTUiKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiXFxubGluZTYiKTsnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz0xKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgKHN0ZG91dCwgc3RkZXJyKSA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBpZiBoYXNhdHRyKGZpbGUsICduZXdsaW5lcycpOgorICAgICAgICAgICAgIyBJbnRlcnByZXRlciB3aXRoIHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZTFcbmxpbmUyXG5saW5lM1xubGluZTRcbmxpbmU1XG5saW5lNiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEludGVycHJldGVyIHdpdGhvdXQgdW5pdmVyc2FsIG5ld2xpbmUgc3VwcG9ydAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lMVxubGluZTJccmxpbmUzXHJcbmxpbmU0XHJcbmxpbmU1XG5saW5lNiIpCisKKyAgICBkZWYgdGVzdF9ub19sZWFraW5nKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBsZWFrIG5vIHJlc291cmNlcworICAgICAgICBpZiBub3QgbXN3aW5kb3dzOgorICAgICAgICAgICAgbWF4X2hhbmRsZXMgPSAxMDI2ICMgdG9vIG11Y2ggZm9yIG1vc3QgVU5JWCBzeXN0ZW1zCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXhfaGFuZGxlcyA9IDIwNTAgIyB0b28gbXVjaCBmb3IgKGF0IGxlYXN0IHNvbWUpIFdpbmRvd3Mgc2V0dXBzCisgICAgICAgIGhhbmRsZXMgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShtYXhfaGFuZGxlcyk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChvcy5vcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuT19XUk9OTFkgfCBvcy5PX0NSRUFUKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVNRklMRToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImZhaWxlZCB0byByZWFjaCB0aGUgZmlsZSBkZXNjcmlwdG9yIGxpbWl0ICIKKyAgICAgICAgICAgICAgICAgICAgIih0cmllZCAlZCkiICUgbWF4X2hhbmRsZXMpCisgICAgICAgICAgICAjIENsb3NlIGEgY291cGxlIG9mIHRoZW0gKHNob3VsZCBiZSBlbm91Z2ggZm9yIGEgc3VicHJvY2VzcykKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShoYW5kbGVzLnBvcCgpKQorICAgICAgICAgICAgIyBMb29wIGNyZWF0aW5nIHNvbWUgc3VicHJvY2Vzc2VzLiBJZiBvbmUgb2YgdGhlbSBsZWFrcyBzb21lIGZkcywKKyAgICAgICAgICAgICMgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24gd2lsbCBmYWlsIGJ5IHJlYWNoaW5nIHRoZSBtYXggZmQgbGltaXQuCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxNSk6CisgICAgICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKCkpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgICAgICBkYXRhID0gcC5jb21tdW5pY2F0ZShiImxpbWUiKVswXQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYiJsaW1lIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvciBoIGluIGhhbmRsZXM6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoaCkKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsodGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2xpc3QyY21kbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJwcm9jZXNzLmxpc3QyY21kbGluZShbJ2EgYiBjJywgJ2QnLCAnZSddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnImEgYiBjIiBkIGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YnByb2Nlc3MubGlzdDJjbWRsaW5lKFsnYWIiYycsICdcXCcsICdkJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhYlxcImMgXFwgZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VicHJvY2Vzcy5saXN0MmNtZGxpbmUoWydhYiJjJywgJyBcXCcsICdkJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhYlxcImMgIiBcXFxcIiBkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJwcm9jZXNzLmxpc3QyY21kbGluZShbJ2FcXFxcXFxiJywgJ2RlIGZnJywgJ2gnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FcXFxcXFxiICJkZSBmZyIgaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VicHJvY2Vzcy5saXN0MmNtZGxpbmUoWydhXFwiYicsICdjJywgJ2QnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FcXFxcXFwiYiBjIGQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YnByb2Nlc3MubGlzdDJjbWRsaW5lKFsnYVxcXFxiIGMnLCAnZCcsICdlJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICciYVxcXFxiIGMiIGQgZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VicHJvY2Vzcy5saXN0MmNtZGxpbmUoWydhXFxcXGJcXCBjJywgJ2QnLCAnZSddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnImFcXFxcYlxcIGMiIGQgZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VicHJvY2Vzcy5saXN0MmNtZGxpbmUoWydhYicsICcnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FiICIiJykKKworCisgICAgZGVmIHRlc3RfcG9sbChzZWxmKToKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCAiaW1wb3J0IHRpbWU7IHRpbWUuc2xlZXAoMSkiXSkKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIHdoaWxlIHAucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgIyBXZSBleHBlY3QgdGhhdCB0aGUgcG9sbCBsb29wIHByb2JhYmx5IHdlbnQgYXJvdW5kIGFib3V0IDEwIHRpbWVzLAorICAgICAgICAjIGJ1dCwgYmFzZWQgb24gc3lzdGVtIHNjaGVkdWxpbmcgd2UgY2FuJ3QgY29udHJvbCwgaXQncyBwb3NzaWJsZQorICAgICAgICAjIHBvbGwoKSBuZXZlciByZXR1cm5lZCBOb25lLiAgSXQgInNob3VsZCBiZSIgdmVyeSByYXJlIHRoYXQgaXQKKyAgICAgICAgIyBkaWRuJ3QgZ28gYXJvdW5kIGF0IGxlYXN0IHR3aWNlLgorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChjb3VudCwgMikKKyAgICAgICAgIyBTdWJzZXF1ZW50IGludm9jYXRpb25zIHNob3VsZCBqdXN0IHJldHVybiB0aGUgcmV0dXJuY29kZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG9sbCgpLCAwKQorCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICItYyIsICJpbXBvcnQgdGltZTsgdGltZS5zbGVlcCgyKSJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAud2FpdCgpLCAwKQorICAgICAgICAjIFN1YnNlcXVlbnQgaW52b2NhdGlvbnMgc2hvdWxkIGp1c3QgcmV0dXJuIHRoZSByZXR1cm5jb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC53YWl0KCksIDApCisKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfYnVmc2l6ZShzZWxmKToKKyAgICAgICAgIyBhbiBpbnZhbGlkIHR5cGUgb2YgdGhlIGJ1ZnNpemUgYXJndW1lbnQgc2hvdWxkIHJhaXNlCisgICAgICAgICMgVHlwZUVycm9yLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInBhc3MiXSwgIm9yYW5nZSIpCisKKyAgICBkZWYgdGVzdF9sZWFraW5nX2Zkc19vbl9lcnJvcihzZWxmKToKKyAgICAgICAgIyBzZWUgYnVnICM1MTc5OiBQb3BlbiBsZWFrcyBmaWxlIGRlc2NyaXB0b3JzIHRvIFBJUEVzIGlmCisgICAgICAgICMgdGhlIGNoaWxkIGZhaWxzIHRvIGV4ZWN1dGU7IHRoaXMgd2lsbCBldmVudHVhbGx5IGV4aGF1c3QKKyAgICAgICAgIyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3BlbiBmZHMuIDEwMjQgc2VlbXMgYSB2ZXJ5IGNvbW1vbgorICAgICAgICAjIHZhbHVlIGZvciB0aGF0IGxpbWl0LCBidXQgV2luZG93cyBoYXMgMjA0OCwgc28gd2UgbG9vcAorICAgICAgICAjIDEwMjQgdGltZXMgKGVhY2ggY2FsbCBsZWFrZWQgdHdvIGZkcykuCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMjQpOgorICAgICAgICAgICAgIyBXaW5kb3dzIHJhaXNlcyBJT0Vycm9yLiAgT3RoZXJzIHJhaXNlIE9TRXJyb3IuCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVudmlyb25tZW50RXJyb3IpIGFzIGM6CisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbJ25vbmV4aXN0aW5nX2lfaG9wZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICAjIGlnbm9yZSBlcnJvcnMgdGhhdCBpbmRpY2F0ZSB0aGUgY29tbWFuZCB3YXMgbm90IGZvdW5kCisgICAgICAgICAgICBpZiBjLmV4Y2VwdGlvbi5lcnJubyBub3QgaW4gKGVycm5vLkVOT0VOVCwgZXJybm8uRUFDQ0VTKToKKyAgICAgICAgICAgICAgICByYWlzZSBjLmV4Y2VwdGlvbgorCisgICAgZGVmIHRlc3RfaGFuZGxlc19jbG9zZWRfb25fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAjIElmIENyZWF0ZVByb2Nlc3MgZXhpdHMgd2l0aCBhbiBlcnJvciwgZW5zdXJlIHRoZQorICAgICAgICAjIGR1cGxpY2F0ZSBvdXRwdXQgaGFuZGxlcyBhcmUgcmVsZWFzZWQKKyAgICAgICAgaWZoYW5kbGUsIGlmbmFtZSA9IG1rc3RlbXAoKQorICAgICAgICBvZmhhbmRsZSwgb2ZuYW1lID0gbWtzdGVtcCgpCisgICAgICAgIGVmaGFuZGxlLCBlZm5hbWUgPSBta3N0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbiAoWyIqIl0sIHN0ZGluPWlmaGFuZGxlLCBzdGRvdXQ9b2ZoYW5kbGUsCisgICAgICAgICAgICAgIHN0ZGVycj1lZmhhbmRsZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBvcy5jbG9zZShpZmhhbmRsZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShpZm5hbWUpCisgICAgICAgICAgICBvcy5jbG9zZShvZmhhbmRsZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShvZm5hbWUpCisgICAgICAgICAgICBvcy5jbG9zZShlZmhhbmRsZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShlZm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoaWZuYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhvZm5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGVmbmFtZSkpCisKKyAgICBkZWYgdGVzdF9jb21tdW5pY2F0ZV9lcGlwZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxMDk2MzogY29tbXVuaWNhdGUoKSBzaG91bGQgaGlkZSBFUElQRQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwYXNzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQorICAgICAgICBwLmNvbW11bmljYXRlKCJ4IiAqIDIqKjIwKQorCisgICAgZGVmIHRlc3RfY29tbXVuaWNhdGVfZXBpcGVfb25seV9zdGRpbihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxMDk2MzogY29tbXVuaWNhdGUoKSBzaG91bGQgaGlkZSBFUElQRQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwYXNzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkaW4uY2xvc2UpCisgICAgICAgIHRpbWUuc2xlZXAoMikKKyAgICAgICAgcC5jb21tdW5pY2F0ZSgieCIgKiAyKioyMCkKKworICAgICMgVGhpcyB0ZXN0IGlzIExpbnV4LWlzaCBzcGVjaWZpYyBmb3Igc2ltcGxpY2l0eSB0byBhdCBsZWFzdCBoYXZlCisgICAgIyBzb21lIGNvdmVyYWdlLiAgSXQgaXMgbm90IGEgcGxhdGZvcm0gc3BlY2lmaWMgYnVnLgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLnBhdGguaXNkaXIoJy9wcm9jLyVkL2ZkJyAlIG9zLmdldHBpZCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiTGludXggc3BlY2lmaWMiKQorICAgIGRlZiB0ZXN0X2ZhaWxlZF9jaGlsZF9leGVjdXRlX2ZkX2xlYWsoc2VsZik6CisgICAgICAgICIiIlRlc3QgZm9yIHRoZSBmb3JrKCkgZmFpbHVyZSBmZCBsZWFrIHJlcG9ydGVkIGluIGlzc3VlMTYzMjcuIiIiCisgICAgICAgIGZkX2RpcmVjdG9yeSA9ICcvcHJvYy8lZC9mZCcgJSBvcy5nZXRwaWQoKQorICAgICAgICBmZHNfYmVmb3JlX3BvcGVuID0gb3MubGlzdGRpcihmZF9kaXJlY3RvcnkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUG9wZW5UZXN0RXhjZXB0aW9uKToKKyAgICAgICAgICAgIFBvcGVuRXhlY3V0ZUNoaWxkUmFpc2VzKAorICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICctYycsICdwYXNzJ10sIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKworICAgICAgICAjIE5PVEU6IFRoaXMgdGVzdCBkb2Vzbid0IHZlcmlmeSB0aGF0IHRoZSByZWFsIF9leGVjdXRlX2NoaWxkCisgICAgICAgICMgZG9lcyBub3QgY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvcnMgaXRzZWxmIG9uIHRoZSB3YXkgb3V0CisgICAgICAgICMgZHVyaW5nIGFuIGV4Y2VwdGlvbi4gIENvZGUgaW5zcGVjdGlvbiBoYXMgY29uZmlybWVkIHRoYXQuCisKKyAgICAgICAgZmRzX2FmdGVyX2V4Y2VwdGlvbiA9IG9zLmxpc3RkaXIoZmRfZGlyZWN0b3J5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZkc19iZWZvcmVfcG9wZW4sIGZkc19hZnRlcl9leGNlcHRpb24pCisKKworIyBjb250ZXh0IG1hbmFnZXIKK2NsYXNzIF9TdXBwcmVzc0NvcmVGaWxlcyhvYmplY3QpOgorICAgICIiIlRyeSB0byBwcmV2ZW50IGNvcmUgZmlsZXMgZnJvbSBiZWluZyBjcmVhdGVkLiIiIgorICAgIG9sZF9saW1pdCA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICIiIlRyeSB0byBzYXZlIHByZXZpb3VzIHVsaW1pdCwgdGhlbiBzZXQgaXQgdG8gKDAsIDApLiIiIgorICAgICAgICBpZiByZXNvdXJjZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLm9sZF9saW1pdCA9IHJlc291cmNlLmdldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSkKKyAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUsICgwLCAwKSkKKyAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgcmVzb3VyY2UuZXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSAnQ3Jhc2ggUmVwb3J0ZXInIG9uIE9TWCB3YXMgY29uZmlndXJlZAorICAgICAgICAgICAgIyBpbiAnRGV2ZWxvcGVyJyBtb2RlIGFuZCB3YXJuIHRoYXQgaXQgd2lsbCBnZXQgdHJpZ2dlcmVkCisgICAgICAgICAgICAjIHdoZW4gaXQgaXMuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoaXMgY29udGV4dCBtYW5hZ2VyIGlzIHVzZWQgaW4gdGVzdHMKKyAgICAgICAgICAgICMgdGhhdCBtaWdodCB0cmlnZ2VyIHRoZSBuZXh0IG1hbmFnZXIuCisgICAgICAgICAgICB2YWx1ZSA9IHN1YnByb2Nlc3MuUG9wZW4oWycvdXNyL2Jpbi9kZWZhdWx0cycsICdyZWFkJywKKyAgICAgICAgICAgICAgICAgICAgJ2NvbS5hcHBsZS5DcmFzaFJlcG9ydGVyJywgJ0RpYWxvZ1R5cGUnXSwKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgaWYgdmFsdWUuc3RyaXAoKSA9PSBiJ2RldmVsb3Blcic6CisgICAgICAgICAgICAgICAgcHJpbnQgInRoaXMgdGVzdHMgdHJpZ2dlcnMgdGhlIENyYXNoIFJlcG9ydGVyLCB0aGF0IGlzIGludGVudGlvbmFsIgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgIiIiUmV0dXJuIGNvcmUgZmlsZSBiZWhhdmlvciB0byBkZWZhdWx0LiIiIgorICAgICAgICBpZiBzZWxmLm9sZF9saW1pdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHJlc291cmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwgc2VsZi5vbGRfbGltaXQpCisgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIHJlc291cmNlLmVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR0FMUk0nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiUmVxdWlyZXMgc2lnbmFsLlNJR0FMUk0iKQorICAgIGRlZiB0ZXN0X2NvbW11bmljYXRlX2VpbnRyKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMjQ5MzogY29tbXVuaWNhdGUoKSBzaG91bGQgaGFuZGxlIEVJTlRSCisgICAgICAgIGRlZiBoYW5kbGVyKHNpZ251bSwgZnJhbWUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvbGRfaGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGhhbmRsZXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzaWduYWwuc2lnbmFsLCBzaWduYWwuU0lHQUxSTSwgb2xkX2hhbmRsZXIpCisKKyAgICAgICAgIyB0aGUgcHJvY2VzcyBpcyBydW5uaW5nIGZvciAyIHNlY29uZHMKKyAgICAgICAgYXJncyA9IFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ2ltcG9ydCB0aW1lOyB0aW1lLnNsZWVwKDIpJ10KKyAgICAgICAgZm9yIHN0cmVhbSBpbiAoJ3N0ZG91dCcsICdzdGRlcnInKToKKyAgICAgICAgICAgIGt3ID0ge3N0cmVhbTogc3VicHJvY2Vzcy5QSVBFfQorICAgICAgICAgICAgd2l0aCBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsICoqa3cpIGFzIHByb2Nlc3M6CisgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICAgICAgIyBjb21tdW5pY2F0ZSgpIHdpbGwgYmUgaW50ZXJydXB0ZWQgYnkgU0lHQUxSTQorICAgICAgICAgICAgICAgIHByb2Nlc3MuY29tbXVuaWNhdGUoKQorCisKK0B1bml0dGVzdC5za2lwSWYobXN3aW5kb3dzLCAiUE9TSVggc3BlY2lmaWMgdGVzdHMiKQorY2xhc3MgUE9TSVhQcm9jZXNzVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgICMgY2F1Z2h0ICYgcmUtcmFpc2VkIGV4Y2VwdGlvbnMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjOgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9Ii90aGlzL3BhdGgvZG9lcy9ub3QvZXhpc3QiKQorICAgICAgICAjIFRoZSBhdHRyaWJ1dGUgY2hpbGRfdHJhY2ViYWNrIHNob3VsZCBjb250YWluICJvcy5jaGRpciIgc29tZXdoZXJlLgorICAgICAgICBzZWxmLmFzc2VydEluKCJvcy5jaGRpciIsIGMuZXhjZXB0aW9uLmNoaWxkX3RyYWNlYmFjaykKKworICAgIGRlZiB0ZXN0X3J1bl9hYm9ydChzZWxmKToKKyAgICAgICAgIyByZXR1cm5jb2RlIGhhbmRsZXMgc2lnbmFsIHRlcm1pbmF0aW9uCisgICAgICAgIHdpdGggX1N1cHByZXNzQ29yZUZpbGVzKCk6CisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBvczsgb3MuYWJvcnQoKSJdKQorICAgICAgICAgICAgcC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtcC5yZXR1cm5jb2RlLCBzaWduYWwuU0lHQUJSVCkKKworICAgIGRlZiB0ZXN0X3ByZWV4ZWMoc2VsZik6CisgICAgICAgICMgcHJlZXhlYyBmdW5jdGlvbgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5cywgb3M7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5cy5zdGRvdXQud3JpdGUob3MuZ2V0ZW52KCdGUlVJVCcpKSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPWxhbWJkYTogb3MucHV0ZW52KCJGUlVJVCIsICJhcHBsZSIpKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQucmVhZCgpLCAiYXBwbGUiKQorCisgICAgY2xhc3MgX1Rlc3RFeGVjdXRlQ2hpbGRQb3BlbihzdWJwcm9jZXNzLlBvcGVuKToKKyAgICAgICAgIiIiVXNlZCB0byB0ZXN0IGJlaGF2aW9yIGF0IHRoZSBlbmQgb2YgX2V4ZWN1dGVfY2hpbGQuIiIiCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0Y2FzZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RjYXNlID0gdGVzdGNhc2UKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4uX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIGRlZiBfZXhlY3V0ZV9jaGlsZCgKKyAgICAgICAgICAgICAgICBzZWxmLCBhcmdzLCBleGVjdXRhYmxlLCBwcmVleGVjX2ZuLCBjbG9zZV9mZHMsIGN3ZCwgZW52LAorICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcywgc3RhcnR1cGluZm8sIGNyZWF0aW9uZmxhZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlLAorICAgICAgICAgICAgICAgIGMycHJlYWQsIGMycHdyaXRlLAorICAgICAgICAgICAgICAgIGVycnJlYWQsIGVycndyaXRlKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuLl9leGVjdXRlX2NoaWxkKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgYXJncywgZXhlY3V0YWJsZSwgcHJlZXhlY19mbiwgY2xvc2VfZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgY3dkLCBlbnYsIHVuaXZlcnNhbF9uZXdsaW5lcywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvLCBjcmVhdGlvbmZsYWdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgYzJwcmVhZCwgYzJwd3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgIyBPcGVuIGEgYnVuY2ggb2YgZmlsZSBkZXNjcmlwdG9ycyBhbmQgdmVyaWZ5IHRoYXQKKyAgICAgICAgICAgICAgICAjIG5vbmUgb2YgdGhlbSBhcmUgdGhlIHNhbWUgYXMgdGhlIG9uZXMgdGhlIFBvcGVuCisgICAgICAgICAgICAgICAgIyBpbnN0YW5jZSBpcyB1c2luZyBmb3Igc3RkaW4vc3Rkb3V0L3N0ZGVyci4KKyAgICAgICAgICAgICAgICBkZXZ6ZXJvX2ZkcyA9IFtvcy5vcGVuKCIvZGV2L3plcm8iLCBvcy5PX1JET05MWSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZSg4KV0KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZvciBmZCBpbiBkZXZ6ZXJvX2ZkczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RjYXNlLmFzc2VydE5vdEluKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZCwgKHAyY3dyaXRlLCBjMnByZWFkLCBlcnJyZWFkKSkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBtYXAob3MuY2xvc2UsIGRldnplcm9fZmRzKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3Qgb3MucGF0aC5leGlzdHMoIi9kZXYvemVybyIpLCAiL2Rldi96ZXJvIHJlcXVpcmVkLiIpCisgICAgZGVmIHRlc3RfcHJlZXhlY19lcnJwaXBlX2RvZXNfbm90X2RvdWJsZV9jbG9zZV9waXBlcyhzZWxmKToKKyAgICAgICAgIiIiSXNzdWUxNjE0MDogRG9uJ3QgZG91YmxlIGNsb3NlIHBpcGVzIG9uIHByZWV4ZWMgZXJyb3IuIiIiCisKKyAgICAgICAgZGVmIHJhaXNlX2l0KCk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImZvcmNlIHRoZSBfZXhlY3V0ZV9jaGlsZCgpIGVycnBpcGVfZGF0YSBwYXRoLiIpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5fVGVzdEV4ZWN1dGVDaGlsZFBvcGVuKAorICAgICAgICAgICAgICAgICAgICBzZWxmLCBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwYXNzIl0sCisgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgcHJlZXhlY19mbj1yYWlzZV9pdCkKKworICAgIGRlZiB0ZXN0X2FyZ3Nfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIGFyZ3MgaXMgYSBzdHJpbmcKKyAgICAgICAgZiwgZm5hbWUgPSBta3N0ZW1wKCkKKyAgICAgICAgb3Mud3JpdGUoZiwgIiMhL2Jpbi9zaFxuIikKKyAgICAgICAgb3Mud3JpdGUoZiwgImV4ZWMgJyVzJyAtYyAnaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpJ1xuIiAlCisgICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlKQorICAgICAgICBvcy5jbG9zZShmKQorICAgICAgICBvcy5jaG1vZChmbmFtZSwgMG83MDApCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGZuYW1lKQorICAgICAgICBwLndhaXQoKQorICAgICAgICBvcy5yZW1vdmUoZm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCA0NykKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgIyBpbnZhbGlkIGFyZ3VtZW50cyBzaG91bGQgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdWJwcm9jZXNzLmNhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm89NDcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN1YnByb2Nlc3MuY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbmZsYWdzPTQ3KQorCisgICAgZGVmIHRlc3Rfc2hlbGxfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgICMgUnVuIGNvbW1hbmQgdGhyb3VnaCB0aGUgc2hlbGwgKHNlcXVlbmNlKQorICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBuZXdlbnZbIkZSVUlUIl0gPSAiYXBwbGUiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsiZWNobyAkRlJVSVQiXSwgc2hlbGw9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PW5ld2VudikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3Rkb3V0LnJlYWQoKS5zdHJpcCgpLCAiYXBwbGUiKQorCisgICAgZGVmIHRlc3Rfc2hlbGxfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIFJ1biBjb21tYW5kIHRocm91Z2ggdGhlIHNoZWxsIChzdHJpbmcpCisgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIG5ld2VudlsiRlJVSVQiXSA9ICJhcHBsZSIKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oImVjaG8gJEZSVUlUIiwgc2hlbGw9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PW5ld2VudikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3Rkb3V0LnJlYWQoKS5zdHJpcCgpLCAiYXBwbGUiKQorCisgICAgZGVmIHRlc3RfY2FsbF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc3RyaW5nIGFyZ3VtZW50IG9uIFVOSVgKKyAgICAgICAgZiwgZm5hbWUgPSBta3N0ZW1wKCkKKyAgICAgICAgb3Mud3JpdGUoZiwgIiMhL2Jpbi9zaFxuIikKKyAgICAgICAgb3Mud3JpdGUoZiwgImV4ZWMgJyVzJyAtYyAnaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpJ1xuIiAlCisgICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlKQorICAgICAgICBvcy5jbG9zZShmKQorICAgICAgICBvcy5jaG1vZChmbmFtZSwgMDcwMCkKKyAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoZm5hbWUpCisgICAgICAgIG9zLnJlbW92ZShmbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgNDcpCisKKyAgICBkZWYgdGVzdF9zcGVjaWZpY19zaGVsbChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjOTI2NTogSW5jb3JyZWN0IG5hbWUgcGFzc2VkIGFzIGFyZ1swXS4KKyAgICAgICAgc2hlbGxzID0gW10KKyAgICAgICAgZm9yIHByZWZpeCBpbiBbJy9iaW4nLCAnL3Vzci9iaW4vJywgJy91c3IvbG9jYWwvYmluJ106CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBbJ2Jhc2gnLCAna3NoJ106CisgICAgICAgICAgICAgICAgc2ggPSBvcy5wYXRoLmpvaW4ocHJlZml4LCBuYW1lKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHNoKToKKyAgICAgICAgICAgICAgICAgICAgc2hlbGxzLmFwcGVuZChzaCkKKyAgICAgICAgaWYgbm90IHNoZWxsczogIyBXaWxsIHByb2JhYmx5IHdvcmsgZm9yIGFueSBzaGVsbCBidXQgY3NoLgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiYmFzaCBvciBrc2ggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCIpCisgICAgICAgIHNoID0gJy9iaW4vc2gnCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHNoKSBhbmQgbm90IG9zLnBhdGguaXNsaW5rKHNoKToKKyAgICAgICAgICAgICMgVGVzdCB3aWxsIGZhaWwgaWYgL2Jpbi9zaCBpcyBhIHN5bWxpbmsgdG8gY3NoLgorICAgICAgICAgICAgc2hlbGxzLmFwcGVuZChzaCkKKyAgICAgICAgZm9yIHNoIGluIHNoZWxsczoKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKCJlY2hvICQwIiwgZXhlY3V0YWJsZT1zaCwgc2hlbGw9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3Rkb3V0LnJlYWQoKS5zdHJpcCgpLCBzaCkKKworICAgIGRlZiBfa2lsbF9wcm9jZXNzKHNlbGYsIG1ldGhvZCwgKmFyZ3MpOgorICAgICAgICAjIERvIG5vdCBpbmhlcml0IGZpbGUgaGFuZGxlcyBmcm9tIHRoZSBwYXJlbnQuCisgICAgICAgICMgSXQgc2hvdWxkIGZpeCBmYWlsdXJlcyBvbiBzb21lIHBsYXRmb3Jtcy4KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIiJpZiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgc3lzLCB0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ3hcXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgzMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgIyBXYWl0IGZvciB0aGUgaW50ZXJwcmV0ZXIgdG8gYmUgY29tcGxldGVseSBpbml0aWFsaXplZCBiZWZvcmUKKyAgICAgICAgIyBzZW5kaW5nIGFueSBzaWduYWwuCisgICAgICAgIHAuc3Rkb3V0LnJlYWQoMSkKKyAgICAgICAgZ2V0YXR0cihwLCBtZXRob2QpKCphcmdzKQorICAgICAgICByZXR1cm4gcAorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgoJ25ldGJzZCcsICdvcGVuYnNkJykpLAorICAgICAgICAgICAgICAgICAgICAgIkR1ZSB0byBrbm93biBPUyBidWcgKGlzc3VlICMxNjc2MikiKQorICAgIGRlZiBfa2lsbF9kZWFkX3Byb2Nlc3Moc2VsZiwgbWV0aG9kLCAqYXJncyk6CisgICAgICAgICMgRG8gbm90IGluaGVyaXQgZmlsZSBoYW5kbGVzIGZyb20gdGhlIHBhcmVudC4KKyAgICAgICAgIyBJdCBzaG91bGQgZml4IGZhaWx1cmVzIG9uIHNvbWUgcGxhdGZvcm1zLgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiImlmIDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzeXMsIHRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgneFxcbicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAjIFdhaXQgZm9yIHRoZSBpbnRlcnByZXRlciB0byBiZSBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGJlZm9yZQorICAgICAgICAjIHNlbmRpbmcgYW55IHNpZ25hbC4KKyAgICAgICAgcC5zdGRvdXQucmVhZCgxKQorICAgICAgICAjIFRoZSBwcm9jZXNzIHNob3VsZCBlbmQgYWZ0ZXIgdGhpcworICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICMgVGhpcyBzaG91bGRuJ3QgcmFpc2UgZXZlbiB0aG91Z2ggdGhlIGNoaWxkIGlzIG5vdyBkZWFkCisgICAgICAgIGdldGF0dHIocCwgbWV0aG9kKSgqYXJncykKKyAgICAgICAgcC5jb21tdW5pY2F0ZSgpCisKKyAgICBkZWYgdGVzdF9zZW5kX3NpZ25hbChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuX2tpbGxfcHJvY2Vzcygnc2VuZF9zaWduYWwnLCBzaWduYWwuU0lHSU5UKQorICAgICAgICBfLCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignS2V5Ym9hcmRJbnRlcnJ1cHQnLCBzdGRlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocC53YWl0KCksIDApCisKKyAgICBkZWYgdGVzdF9raWxsKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5fa2lsbF9wcm9jZXNzKCdraWxsJykKKyAgICAgICAgXywgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RkZXJyRXF1YWwoc3RkZXJyLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLndhaXQoKSwgLXNpZ25hbC5TSUdLSUxMKQorCisgICAgZGVmIHRlc3RfdGVybWluYXRlKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5fa2lsbF9wcm9jZXNzKCd0ZXJtaW5hdGUnKQorICAgICAgICBfLCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChzdGRlcnIsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAud2FpdCgpLCAtc2lnbmFsLlNJR1RFUk0pCisKKyAgICBkZWYgdGVzdF9zZW5kX3NpZ25hbF9kZWFkKHNlbGYpOgorICAgICAgICAjIFNlbmRpbmcgYSBzaWduYWwgdG8gYSBkZWFkIHByb2Nlc3MKKyAgICAgICAgc2VsZi5fa2lsbF9kZWFkX3Byb2Nlc3MoJ3NlbmRfc2lnbmFsJywgc2lnbmFsLlNJR0lOVCkKKworICAgIGRlZiB0ZXN0X2tpbGxfZGVhZChzZWxmKToKKyAgICAgICAgIyBLaWxsaW5nIGEgZGVhZCBwcm9jZXNzCisgICAgICAgIHNlbGYuX2tpbGxfZGVhZF9wcm9jZXNzKCdraWxsJykKKworICAgIGRlZiB0ZXN0X3Rlcm1pbmF0ZV9kZWFkKHNlbGYpOgorICAgICAgICAjIFRlcm1pbmF0aW5nIGEgZGVhZCBwcm9jZXNzCisgICAgICAgIHNlbGYuX2tpbGxfZGVhZF9wcm9jZXNzKCd0ZXJtaW5hdGUnKQorCisgICAgZGVmIGNoZWNrX2Nsb3NlX3N0ZF9mZHMoc2VsZiwgZmRzKToKKyAgICAgICAgIyBJc3N1ZSAjOTkwNTogdGVzdCB0aGF0IHN1YnByb2Nlc3MgcGlwZXMgc3RpbGwgd29yayBwcm9wZXJseSB3aXRoCisgICAgICAgICMgc29tZSBzdGFuZGFyZCBmZHMgY2xvc2VkCisgICAgICAgIHN0ZGluID0gMAorICAgICAgICBuZXdmZHMgPSBbXQorICAgICAgICBmb3IgYSBpbiBmZHM6CisgICAgICAgICAgICBiID0gb3MuZHVwKGEpCisgICAgICAgICAgICBuZXdmZHMuYXBwZW5kKGIpCisgICAgICAgICAgICBpZiBhID09IDA6CisgICAgICAgICAgICAgICAgc3RkaW4gPSBiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBmZCBpbiBmZHM6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgICAgICBvdXQsIGVyciA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImFwcGxlIik7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQuZmx1c2goKTsnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZGVyci53cml0ZSgib3JhbmdlIiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3RkaW4sCisgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgIGVyciA9IHRlc3Rfc3VwcG9ydC5zdHJpcF9weXRob25fc3RkZXJyKGVycikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG91dCwgZXJyKSwgKGInYXBwbGUnLCBiJ29yYW5nZScpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIGIsIGEgaW4gemlwKG5ld2ZkcywgZmRzKToKKyAgICAgICAgICAgICAgICBvcy5kdXAyKGIsIGEpCisgICAgICAgICAgICBmb3IgYiBpbiBuZXdmZHM6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoYikKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2ZkXzAoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMF0pCisKKyAgICBkZWYgdGVzdF9jbG9zZV9mZF8xKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzFdKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZmRfMihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jbG9zZV9zdGRfZmRzKFsyXSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2Zkc18wXzEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMCwgMV0pCisKKyAgICBkZWYgdGVzdF9jbG9zZV9mZHNfMF8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzAsIDJdKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZmRzXzFfMihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jbG9zZV9zdGRfZmRzKFsxLCAyXSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2Zkc18wXzFfMihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTA4MDY6IHRlc3QgdGhhdCBzdWJwcm9jZXNzIHBpcGVzIHN0aWxsIHdvcmsgcHJvcGVybHkgd2l0aAorICAgICAgICAjIGFsbCBzdGFuZGFyZCBmZHMgY2xvc2VkLgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzAsIDEsIDJdKQorCisgICAgZGVmIGNoZWNrX3N3YXBfZmRzKHNlbGYsIHN0ZGluX25vLCBzdGRvdXRfbm8sIHN0ZGVycl9ubyk6CisgICAgICAgICMgb3BlbiB1cCBzb21lIHRlbXBvcmFyeSBmaWxlcworICAgICAgICB0ZW1wcyA9IFtta3N0ZW1wKCkgZm9yIGkgaW4gcmFuZ2UoMyldCisgICAgICAgIHRlbXBfZmRzID0gW2ZkIGZvciBmZCwgZm5hbWUgaW4gdGVtcHNdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgdW5saW5rIHRoZSBmaWxlcyAtLSB3ZSB3b24ndCBuZWVkIHRvIHJlb3BlbiB0aGVtCisgICAgICAgICAgICBmb3IgZmQsIGZuYW1lIGluIHRlbXBzOgorICAgICAgICAgICAgICAgIG9zLnVubGluayhmbmFtZSkKKworICAgICAgICAgICAgIyBzYXZlIGEgY29weSBvZiB0aGUgc3RhbmRhcmQgZmlsZSBkZXNjcmlwdG9ycworICAgICAgICAgICAgc2F2ZWRfZmRzID0gW29zLmR1cChmZCkgZm9yIGZkIGluIHJhbmdlKDMpXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgZHVwbGljYXRlIHRoZSB0ZW1wIGZpbGVzIG92ZXIgdGhlIHN0YW5kYXJkIGZkJ3MgMCwgMSwgMgorICAgICAgICAgICAgICAgIGZvciBmZCwgdGVtcF9mZCBpbiBlbnVtZXJhdGUodGVtcF9mZHMpOgorICAgICAgICAgICAgICAgICAgICBvcy5kdXAyKHRlbXBfZmQsIGZkKQorCisgICAgICAgICAgICAgICAgIyB3cml0ZSBzb21lIGRhdGEgdG8gd2hhdCB3aWxsIGJlY29tZSBzdGRpbiwgYW5kIHJld2luZAorICAgICAgICAgICAgICAgIG9zLndyaXRlKHN0ZGluX25vLCBiIlNURElOIikKKyAgICAgICAgICAgICAgICBvcy5sc2VlayhzdGRpbl9ubywgMCwgMCkKKworICAgICAgICAgICAgICAgICMgbm93IHVzZSB0aG9zZSBmaWxlcyBpbiB0aGUgZ2l2ZW4gb3JkZXIsIHNvIHRoYXQgc3VicHJvY2VzcworICAgICAgICAgICAgICAgICMgaGFzIHRvIHJlYXJyYW5nZSB0aGVtIGluIHRoZSBjaGlsZAorICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IGdvdCA9IHN5cy5zdGRpbi5yZWFkKCk7JworICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiZ290ICVzIiVnb3QpOyBzeXMuc3RkZXJyLndyaXRlKCJlcnIiKSddLAorICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdGRpbl9ubywKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN0ZG91dF9ubywKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN0ZGVycl9ubykKKyAgICAgICAgICAgICAgICBwLndhaXQoKQorCisgICAgICAgICAgICAgICAgZm9yIGZkIGluIHRlbXBfZmRzOgorICAgICAgICAgICAgICAgICAgICBvcy5sc2VlayhmZCwgMCwgMCkKKworICAgICAgICAgICAgICAgIG91dCA9IG9zLnJlYWQoc3Rkb3V0X25vLCAxMDI0KQorICAgICAgICAgICAgICAgIGVyciA9IHRlc3Rfc3VwcG9ydC5zdHJpcF9weXRob25fc3RkZXJyKG9zLnJlYWQoc3RkZXJyX25vLCAxMDI0KSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZm9yIHN0ZCwgc2F2ZWQgaW4gZW51bWVyYXRlKHNhdmVkX2Zkcyk6CisgICAgICAgICAgICAgICAgICAgIG9zLmR1cDIoc2F2ZWQsIHN0ZCkKKyAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2F2ZWQpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiImdvdCBTVERJTiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYiJlcnIiKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmb3IgZmQgaW4gdGVtcF9mZHM6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisKKyAgICAjIFdoZW4gZHVwaW5nIGZkcywgaWYgdGhlcmUgYXJpc2VzIGEgc2l0dWF0aW9uIHdoZXJlIG9uZSBvZiB0aGUgZmRzIGlzCisgICAgIyBlaXRoZXIgMCwgMSBvciAyLCBpdCBpcyBwb3NzaWJsZSB0aGF0IGl0IGlzIG92ZXJ3cml0dGVuICgjMTI2MDcpLgorICAgICMgVGhpcyB0ZXN0cyBhbGwgY29tYmluYXRpb25zIG9mIHRoaXMuCisgICAgZGVmIHRlc3Rfc3dhcF9mZHMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3dhcF9mZHMoMCwgMSwgMikKKyAgICAgICAgc2VsZi5jaGVja19zd2FwX2ZkcygwLCAyLCAxKQorICAgICAgICBzZWxmLmNoZWNrX3N3YXBfZmRzKDEsIDAsIDIpCisgICAgICAgIHNlbGYuY2hlY2tfc3dhcF9mZHMoMSwgMiwgMCkKKyAgICAgICAgc2VsZi5jaGVja19zd2FwX2ZkcygyLCAwLCAxKQorICAgICAgICBzZWxmLmNoZWNrX3N3YXBfZmRzKDIsIDEsIDApCisKKyAgICBkZWYgdGVzdF93YWl0X3doZW5fc2lnY2hpbGRfaWdub3JlZChzZWxmKToKKyAgICAgICAgIyBOT1RFOiBzaWdjaGlsZF9pZ25vcmUucHkgbWF5IG5vdCBiZSBhbiBlZmZlY3RpdmUgdGVzdCBvbiBhbGwgT1Nlcy4KKyAgICAgICAgc2lnY2hpbGRfaWdub3JlID0gdGVzdF9zdXBwb3J0LmZpbmRmaWxlKCJzaWdjaGlsZF9pZ25vcmUucHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZGlyPSJzdWJwcm9jZXNzZGF0YSIpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgc2lnY2hpbGRfaWdub3JlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwLnJldHVybmNvZGUsICJzaWdjaGlsZF9pZ25vcmUucHkgZXhpdGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgbm9uLXplcm8gd2l0aCB0aGlzIGVycm9yOlxuJXMiICUgc3RkZXJyKQorCisgICAgZGVmIHRlc3Rfem9tYmllX2Zhc3RfcHJvY2Vzc19kZWwoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEyNjUwOiBvbiBVbml4LCBpZiBQb3Blbi5fX2RlbF9fKCkgd2FzIGNhbGxlZCBiZWZvcmUgdGhlCisgICAgICAgICMgcHJvY2VzcyBleGl0ZWQsIGl0IHdvdWxkbid0IGJlIGFkZGVkIHRvIHN1YnByb2Nlc3MuX2FjdGl2ZSwgYW5kIHdvdWxkCisgICAgICAgICMgcmVtYWluIGEgem9tYmllLgorICAgICAgICAjIHNwYXduIGEgUG9wZW4sIGFuZCBkZWxldGUgaXRzIHJlZmVyZW5jZSBiZWZvcmUgaXQgZXhpdHMKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMsIHRpbWU7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbWUuc2xlZXAoMC4yKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgaWRlbnQgPSBpZChwKQorICAgICAgICBwaWQgPSBwLnBpZAorICAgICAgICBkZWwgcAorICAgICAgICAjIGNoZWNrIHRoYXQgcCBpcyBpbiB0aGUgYWN0aXZlIHByb2Nlc3NlcyBsaXN0CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaWRlbnQsIFtpZChvKSBmb3IgbyBpbiBzdWJwcm9jZXNzLl9hY3RpdmVdKQorCisgICAgZGVmIHRlc3RfbGVha19mYXN0X3Byb2Nlc3NfZGVsX2tpbGxlZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTI2NTA6IG9uIFVuaXgsIGlmIFBvcGVuLl9fZGVsX18oKSB3YXMgY2FsbGVkIGJlZm9yZSB0aGUKKyAgICAgICAgIyBwcm9jZXNzIGV4aXRlZCwgYW5kIHRoZSBwcm9jZXNzIGdvdCBraWxsZWQgYnkgYSBzaWduYWwsIGl0IHdvdWxkIG5ldmVyCisgICAgICAgICMgYmUgcmVtb3ZlZCBmcm9tIHN1YnByb2Nlc3MuX2FjdGl2ZSwgd2hpY2ggdHJpZ2dlcmVkIGEgRkQgYW5kIG1lbW9yeQorICAgICAgICAjIGxlYWsuCisgICAgICAgICMgc3Bhd24gYSBQb3BlbiwgZGVsZXRlIGl0cyByZWZlcmVuY2UgYW5kIGtpbGwgaXQKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCB0aW1lOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aW1lLnNsZWVwKDMpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQorICAgICAgICBpZGVudCA9IGlkKHApCisgICAgICAgIHBpZCA9IHAucGlkCisgICAgICAgIGRlbCBwCisgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lMTCkKKyAgICAgICAgIyBjaGVjayB0aGF0IHAgaXMgaW4gdGhlIGFjdGl2ZSBwcm9jZXNzZXMgbGlzdAorICAgICAgICBzZWxmLmFzc2VydEluKGlkZW50LCBbaWQobykgZm9yIG8gaW4gc3VicHJvY2Vzcy5fYWN0aXZlXSkKKworICAgICAgICAjIGxldCBzb21lIHRpbWUgZm9yIHRoZSBwcm9jZXNzIHRvIGV4aXQsIGFuZCBjcmVhdGUgYSBuZXcgUG9wZW46IHRoaXMKKyAgICAgICAgIyBzaG91bGQgdHJpZ2dlciB0aGUgd2FpdCgpIG9mIHAKKyAgICAgICAgdGltZS5zbGVlcCgwLjIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRW52aXJvbm1lbnRFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIHdpdGggc3VicHJvY2Vzcy5Qb3BlbihbJ25vbmV4aXN0aW5nX2lfaG9wZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkgYXMgcHJvYzoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICMgcCBzaG91bGQgaGF2ZSBiZWVuIHdhaXQoKWVkIG9uLCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBfYWN0aXZlIGxpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Mud2FpdHBpZCwgcGlkLCAwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGlkZW50LCBbaWQobykgZm9yIG8gaW4gc3VicHJvY2Vzcy5fYWN0aXZlXSkKKworICAgIGRlZiB0ZXN0X3BpcGVfY2xvZXhlYyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxMjc4NjogY2hlY2sgdGhhdCB0aGUgY29tbXVuaWNhdGlvbiBwaXBlcycgRkRzIGFyZSBzZXQgQ0xPRVhFQywKKyAgICAgICAgIyBhbmQgYXJlIG5vdCBpbmhlcml0ZWQgYnkgYW5vdGhlciBjaGlsZCBwcm9jZXNzLgorICAgICAgICBwMSA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgb3M7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcy5yZWFkKDAsIDEpJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisKKyAgICAgICAgcDIgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiIiaWYgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgb3MsIGVycm5vLCBzeXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmQgaW4gJXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQkFERjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIiAlIFtmLmZpbGVubygpIGZvciBmIGluIChwMS5zdGRpbiwgcDEuc3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMS5zdGRlcnIpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIGNsb3NlX2Zkcz1GYWxzZSkKKyAgICAgICAgcDEuY29tbXVuaWNhdGUoJ2ZvbycpCisgICAgICAgIF8sIHN0ZGVyciA9IHAyLmNvbW11bmljYXRlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAyLnJldHVybmNvZGUsIDAsICJVbmV4cGVjdGVkIGVycm9yOiAiICsgcmVwcihzdGRlcnIpKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKG1zd2luZG93cywgIldpbmRvd3Mgc3BlY2lmaWMgdGVzdHMiKQorY2xhc3MgV2luMzJQcm9jZXNzVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3N0YXJ0dXBpbmZvKHNlbGYpOgorICAgICAgICAjIHN0YXJ0dXBpbmZvIGFyZ3VtZW50CisgICAgICAgICMgV2UgdXNlcyBoYXJkY29kZWQgY29uc3RhbnRzLCBiZWNhdXNlIHdlIGRvIG5vdCB3YW50IHRvCisgICAgICAgICMgZGVwZW5kIG9uIHdpbjMyYWxsLgorICAgICAgICBTVEFSVEZfVVNFU0hPV1dJTkRPVyA9IDEKKyAgICAgICAgU1dfTUFYSU1JWkUgPSAzCisgICAgICAgIHN0YXJ0dXBpbmZvID0gc3VicHJvY2Vzcy5TVEFSVFVQSU5GTygpCisgICAgICAgIHN0YXJ0dXBpbmZvLmR3RmxhZ3MgPSBTVEFSVEZfVVNFU0hPV1dJTkRPVworICAgICAgICBzdGFydHVwaW5mby53U2hvd1dpbmRvdyA9IFNXX01BWElNSVpFCisgICAgICAgICMgU2luY2UgUHl0aG9uIGlzIGEgY29uc29sZSBwcm9jZXNzLCBpdCB3b24ndCBiZSBhZmZlY3RlZAorICAgICAgICAjIGJ5IHdTaG93V2luZG93LCBidXQgdGhlIGFyZ3VtZW50IHNob3VsZCBiZSBzaWxlbnRseQorICAgICAgICAjIGlnbm9yZWQKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5leGl0KDApIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbz1zdGFydHVwaW5mbykKKworICAgIGRlZiB0ZXN0X2NyZWF0aW9uZmxhZ3Moc2VsZik6CisgICAgICAgICMgY3JlYXRpb25mbGFncyBhcmd1bWVudAorICAgICAgICBDUkVBVEVfTkVXX0NPTlNPTEUgPSAxNgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIgICAgYSBET1MgYm94IHNob3VsZCBmbGFzaCBicmllZmx5IC4uLlxuIikKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHN5cy5leGVjdXRhYmxlICsKKyAgICAgICAgICAgICAgICAgICAgICAgICcgLWMgImltcG9ydCB0aW1lOyB0aW1lLnNsZWVwKDAuMjUpIicsCisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbmZsYWdzPUNSRUFURV9ORVdfQ09OU09MRSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgIyBpbnZhbGlkIGFyZ3VtZW50cyBzaG91bGQgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdWJwcm9jZXNzLmNhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZXhlY19mbj1sYW1iZGE6IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN1YnByb2Nlc3MuY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2ZkcyhzZWxmKToKKyAgICAgICAgIyBjbG9zZSBmaWxlIGRlc2NyaXB0b3JzCisgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCA0NykKKworICAgIGRlZiB0ZXN0X3NoZWxsX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIFJ1biBjb21tYW5kIHRocm91Z2ggdGhlIHNoZWxsIChzZXF1ZW5jZSkKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gInBoeXNhbGlzIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbInNldCJdLCBzaGVsbD0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInBoeXNhbGlzIiwgcC5zdGRvdXQucmVhZCgpKQorCisgICAgZGVmIHRlc3Rfc2hlbGxfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIFJ1biBjb21tYW5kIHRocm91Z2ggdGhlIHNoZWxsIChzdHJpbmcpCisgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIG5ld2VudlsiRlJVSVQiXSA9ICJwaHlzYWxpcyIKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oInNldCIsIHNoZWxsPTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigicGh5c2FsaXMiLCBwLnN0ZG91dC5yZWFkKCkpCisKKyAgICBkZWYgdGVzdF9jYWxsX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzdHJpbmcgYXJndW1lbnQgb24gV2luZG93cworICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChzeXMuZXhlY3V0YWJsZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgLWMgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCA0NykKKworICAgIGRlZiBfa2lsbF9wcm9jZXNzKHNlbGYsIG1ldGhvZCwgKmFyZ3MpOgorICAgICAgICAjIFNvbWUgd2luMzIgYnVpbGRib3QgcmFpc2VzIEVPRkVycm9yIGlmIHN0ZGluIGlzIGluaGVyaXRlZAorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiImlmIDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzeXMsIHRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgneFxcbicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDMwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRpbi5jbG9zZSkKKyAgICAgICAgIyBXYWl0IGZvciB0aGUgaW50ZXJwcmV0ZXIgdG8gYmUgY29tcGxldGVseSBpbml0aWFsaXplZCBiZWZvcmUKKyAgICAgICAgIyBzZW5kaW5nIGFueSBzaWduYWwuCisgICAgICAgIHAuc3Rkb3V0LnJlYWQoMSkKKyAgICAgICAgZ2V0YXR0cihwLCBtZXRob2QpKCphcmdzKQorICAgICAgICBfLCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChzdGRlcnIsICcnKQorICAgICAgICByZXR1cm5jb2RlID0gcC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXR1cm5jb2RlLCAwKQorCisgICAgZGVmIF9raWxsX2RlYWRfcHJvY2VzcyhzZWxmLCBtZXRob2QsICphcmdzKToKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIiJpZiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgc3lzLCB0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ3hcXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoNDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQorICAgICAgICAjIFdhaXQgZm9yIHRoZSBpbnRlcnByZXRlciB0byBiZSBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGJlZm9yZQorICAgICAgICAjIHNlbmRpbmcgYW55IHNpZ25hbC4KKyAgICAgICAgcC5zdGRvdXQucmVhZCgxKQorICAgICAgICAjIFRoZSBwcm9jZXNzIHNob3VsZCBlbmQgYWZ0ZXIgdGhpcworICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICMgVGhpcyBzaG91bGRuJ3QgcmFpc2UgZXZlbiB0aG91Z2ggdGhlIGNoaWxkIGlzIG5vdyBkZWFkCisgICAgICAgIGdldGF0dHIocCwgbWV0aG9kKSgqYXJncykKKyAgICAgICAgXywgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RkZXJyRXF1YWwoc3RkZXJyLCBiJycpCisgICAgICAgIHJjID0gcC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgNDIpCisKKyAgICBkZWYgdGVzdF9zZW5kX3NpZ25hbChzZWxmKToKKyAgICAgICAgc2VsZi5fa2lsbF9wcm9jZXNzKCdzZW5kX3NpZ25hbCcsIHNpZ25hbC5TSUdURVJNKQorCisgICAgZGVmIHRlc3Rfa2lsbChzZWxmKToKKyAgICAgICAgc2VsZi5fa2lsbF9wcm9jZXNzKCdraWxsJykKKworICAgIGRlZiB0ZXN0X3Rlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5fa2lsbF9wcm9jZXNzKCd0ZXJtaW5hdGUnKQorCisgICAgZGVmIHRlc3Rfc2VuZF9zaWduYWxfZGVhZChzZWxmKToKKyAgICAgICAgc2VsZi5fa2lsbF9kZWFkX3Byb2Nlc3MoJ3NlbmRfc2lnbmFsJywgc2lnbmFsLlNJR1RFUk0pCisKKyAgICBkZWYgdGVzdF9raWxsX2RlYWQoc2VsZik6CisgICAgICAgIHNlbGYuX2tpbGxfZGVhZF9wcm9jZXNzKCdraWxsJykKKworICAgIGRlZiB0ZXN0X3Rlcm1pbmF0ZV9kZWFkKHNlbGYpOgorICAgICAgICBzZWxmLl9raWxsX2RlYWRfcHJvY2VzcygndGVybWluYXRlJykKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhnZXRhdHRyKHN1YnByb2Nlc3MsICdfaGFzX3BvbGwnLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAicG9sbCBzeXN0ZW0gY2FsbCBub3Qgc3VwcG9ydGVkIikKK2NsYXNzIFByb2Nlc3NUZXN0Q2FzZU5vUG9sbChQcm9jZXNzVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VicHJvY2Vzcy5faGFzX3BvbGwgPSBGYWxzZQorICAgICAgICBQcm9jZXNzVGVzdENhc2Uuc2V0VXAoc2VsZikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3VicHJvY2Vzcy5faGFzX3BvbGwgPSBUcnVlCisgICAgICAgIFByb2Nlc3NUZXN0Q2FzZS50ZWFyRG93bihzZWxmKQorCisKK2NsYXNzIEhlbHBlckZ1bmN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEB1bml0dGVzdC5za2lwSWYobXN3aW5kb3dzLCAiZXJybm8gYW5kIEVJTlRSIG1ha2Ugbm8gc2Vuc2Ugb24gd2luZG93cyIpCisgICAgZGVmIHRlc3RfZWludHJfcmV0cnlfY2FsbChzZWxmKToKKyAgICAgICAgcmVjb3JkX2NhbGxzID0gW10KKyAgICAgICAgZGVmIGZha2Vfb3NfZnVuYygqYXJncyk6CisgICAgICAgICAgICByZWNvcmRfY2FsbHMuYXBwZW5kKGFyZ3MpCisgICAgICAgICAgICBpZiBsZW4ocmVjb3JkX2NhbGxzKSA9PSAyOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUlOVFIsICJmYWtlIGludGVycnVwdGVkIHN5c3RlbSBjYWxsIikKKyAgICAgICAgICAgIHJldHVybiB0dXBsZShyZXZlcnNlZChhcmdzKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg5OTksIDI1NiksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5fZWludHJfcmV0cnlfY2FsbChmYWtlX29zX2Z1bmMsIDI1NiwgOTk5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKDI1NiwgOTk5KV0sIHJlY29yZF9jYWxscykKKyAgICAgICAgIyBUaGlzIHRpbWUgdGhlcmUgd2lsbCBiZSBhbiBFSU5UUiBzbyBpdCB3aWxsIGxvb3Agb25jZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNjY2LCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5fZWludHJfcmV0cnlfY2FsbChmYWtlX29zX2Z1bmMsIDY2NikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygyNTYsIDk5OSksICg2NjYsKSwgKDY2NiwpXSwgcmVjb3JkX2NhbGxzKQorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhtc3dpbmRvd3MsICJtc3dpbmRvd3Mgb25seSIpCitjbGFzcyBDb21tYW5kc1dpdGhTcGFjZXMgKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKENvbW1hbmRzV2l0aFNwYWNlcywgc2VsZikuc2V0VXAoKQorICAgICAgICBmLCBmbmFtZSA9IG1rc3RlbXAoIi5weSIsICJ0ZSBzdCIpCisgICAgICAgIHNlbGYuZm5hbWUgPSBmbmFtZS5sb3dlciAoKQorICAgICAgICBvcy53cml0ZShmLCBiImltcG9ydCBzeXM7IgorICAgICAgICAgICAgICAgICAgICBiInN5cy5zdGRvdXQud3JpdGUoJyVkICVzJyAlIChsZW4oc3lzLmFyZ3YpLCBbYS5sb3dlciAoKSBmb3IgYSBpbiBzeXMuYXJndl0pKSIKKyAgICAgICAgKQorICAgICAgICBvcy5jbG9zZShmKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBvcy5yZW1vdmUoc2VsZi5mbmFtZSkKKyAgICAgICAgc3VwZXIoQ29tbWFuZHNXaXRoU3BhY2VzLCBzZWxmKS50ZWFyRG93bigpCisKKyAgICBkZWYgd2l0aF9zcGFjZXMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAga3dhcmdzWydzdGRvdXQnXSA9IHN1YnByb2Nlc3MuUElQRQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbigqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICBwLnN0ZG91dC5yZWFkICgpLmRlY29kZSgibWJjcyIpLAorICAgICAgICAgICIyIFslciwgJ2FiIGNkJ10iICUgc2VsZi5mbmFtZQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9zaGVsbF9zdHJpbmdfd2l0aF9zcGFjZXMoc2VsZik6CisgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc3RyaW5nIGFyZ3VtZW50IHdpdGggc3BhY2VzIG9uIFdpbmRvd3MKKyAgICAgICAgc2VsZi53aXRoX3NwYWNlcygnIiVzIiAiJXMiICIlcyInICUgKHN5cy5leGVjdXRhYmxlLCBzZWxmLmZuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFiIGNkIiksIHNoZWxsPTEpCisKKyAgICBkZWYgdGVzdF9zaGVsbF9zZXF1ZW5jZV93aXRoX3NwYWNlcyhzZWxmKToKKyAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzZXF1ZW5jZSBhcmd1bWVudCB3aXRoIHNwYWNlcyBvbiBXaW5kb3dzCisgICAgICAgIHNlbGYud2l0aF9zcGFjZXMoW3N5cy5leGVjdXRhYmxlLCBzZWxmLmZuYW1lLCAiYWIgY2QiXSwgc2hlbGw9MSkKKworICAgIGRlZiB0ZXN0X25vc2hlbGxfc3RyaW5nX3dpdGhfc3BhY2VzKHNlbGYpOgorICAgICAgICAjIGNhbGwoKSBmdW5jdGlvbiB3aXRoIHN0cmluZyBhcmd1bWVudCB3aXRoIHNwYWNlcyBvbiBXaW5kb3dzCisgICAgICAgIHNlbGYud2l0aF9zcGFjZXMoJyIlcyIgIiVzIiAiJXMiJyAlIChzeXMuZXhlY3V0YWJsZSwgc2VsZi5mbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFiIGNkIikpCisKKyAgICBkZWYgdGVzdF9ub3NoZWxsX3NlcXVlbmNlX3dpdGhfc3BhY2VzKHNlbGYpOgorICAgICAgICAjIGNhbGwoKSBmdW5jdGlvbiB3aXRoIHNlcXVlbmNlIGFyZ3VtZW50IHdpdGggc3BhY2VzIG9uIFdpbmRvd3MKKyAgICAgICAgc2VsZi53aXRoX3NwYWNlcyhbc3lzLmV4ZWN1dGFibGUsIHNlbGYuZm5hbWUsICJhYiBjZCJdKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdW5pdF90ZXN0cyA9IChQcm9jZXNzVGVzdENhc2UsCisgICAgICAgICAgICAgICAgICBQT1NJWFByb2Nlc3NUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgIFdpbjMyUHJvY2Vzc1Rlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgUHJvY2Vzc1Rlc3RDYXNlTm9Qb2xsLAorICAgICAgICAgICAgICAgICAgSGVscGVyRnVuY3Rpb25UZXN0cywKKyAgICAgICAgICAgICAgICAgIENvbW1hbmRzV2l0aFNwYWNlcykKKworICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnVuaXRfdGVzdHMpCisgICAgdGVzdF9zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zdW5hdWRpb2Rldi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N1bmF1ZGlvZGV2LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NmY3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zdW5hdWRpb2Rldi5weQpAQCAtMCwwICsxLDMzIEBACitmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBmaW5kZmlsZSwgVGVzdEZhaWxlZCwgaW1wb3J0X21vZHVsZQoraW1wb3J0IHVuaXR0ZXN0CitzdW5hdWRpb2RldiA9IGltcG9ydF9tb2R1bGUoJ3N1bmF1ZGlvZGV2JywgZGVwcmVjYXRlZD1UcnVlKQoraW1wb3J0IG9zCisKK3RyeToKKyAgICBhdWRpb2RldiA9IG9zLmVudmlyb25bIkFVRElPREVWIl0KK2V4Y2VwdCBLZXlFcnJvcjoKKyAgICBhdWRpb2RldiA9ICIvZGV2L2F1ZGlvIgorCitpZiBub3Qgb3MucGF0aC5leGlzdHMoYXVkaW9kZXYpOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJubyBhdWRpbyBkZXZpY2UgZm91bmQhIikKKworZGVmIHBsYXlfc291bmRfZmlsZShwYXRoKToKKyAgICBmcCA9IG9wZW4ocGF0aCwgJ3InKQorICAgIGRhdGEgPSBmcC5yZWFkKCkKKyAgICBmcC5jbG9zZSgpCisgICAgdHJ5OgorICAgICAgICBhID0gc3VuYXVkaW9kZXYub3BlbigndycpCisgICAgZXhjZXB0IHN1bmF1ZGlvZGV2LmVycm9yLCBtc2c6CisgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQsIG1zZworICAgIGVsc2U6CisgICAgICAgIGEud3JpdGUoZGF0YSkKKyAgICAgICAgYS5jbG9zZSgpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHBsYXlfc291bmRfZmlsZShmaW5kZmlsZSgnYXVkaW90ZXN0LmF1JykpCisKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zdW5kcnkucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zdW5kcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkwZWY4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N1bmRyeS5weQpAQCAtMCwwICsxLDEwMCBAQAorIiIiRG8gYSBtaW5pbWFsIHRlc3Qgb2YgYWxsIHRoZSBtb2R1bGVzIHRoYXQgYXJlbid0IG90aGVyd2lzZSB0ZXN0ZWQuIiIiCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworCitjbGFzcyBUZXN0VW50ZXN0ZWRNb2R1bGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9hdF9sZWFzdF9pbXBvcnRfdW50ZXN0ZWRfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6CisgICAgICAgICAgICBpbXBvcnQgQ0dJSFRUUFNlcnZlcgorICAgICAgICAgICAgaW1wb3J0IGF1ZGlvZGV2CisgICAgICAgICAgICBpbXBvcnQgYmRiCisgICAgICAgICAgICBpbXBvcnQgY2dpdGIKKyAgICAgICAgICAgIGltcG9ydCBjb2RlCisgICAgICAgICAgICBpbXBvcnQgY29tcGlsZWFsbAorCisgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmJjcHBjb21waWxlcgorICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jY29tcGlsZXIKKyAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY3lnd2luY2NvbXBpbGVyCisgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmVteGNjb21waWxlcgorICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5maWxlbGlzdAorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMubXN2Y2NvbXBpbGVyCisgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLnRleHRfZmlsZQorICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy51bml4Y2NvbXBpbGVyCisKKyAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9kdW1iCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfbXNpICMgaWYgbXNpIG1vZHVsZSBpcyBub3QgYnVpbGQKKyAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgInNraXBwaW5nIGJkaXN0X21zaSIKKyAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdAorICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X3JwbQorICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X3dpbmluc3QKKyAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9jbGliCisgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfZXh0CisgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGQKKyAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC5jbGVhbgorICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLmNvbmZpZworICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfZGF0YQorICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfZWdnX2luZm8KKyAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2hlYWRlcnMKKyAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2xpYgorICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLnJlZ2lzdGVyCisgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQuc2Rpc3QKKyAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC51cGxvYWQKKworICAgICAgICAgICAgaW1wb3J0IGVuY29kaW5ncworICAgICAgICAgICAgaW1wb3J0IGZvcm1hdHRlcgorICAgICAgICAgICAgaW1wb3J0IGdldHBhc3MKKyAgICAgICAgICAgIGltcG9ydCBodG1sZW50aXR5ZGVmcworICAgICAgICAgICAgaW1wb3J0IGlob29rcworICAgICAgICAgICAgaW1wb3J0IGltZ2hkcgorICAgICAgICAgICAgaW1wb3J0IGltcHV0aWwKKyAgICAgICAgICAgIGltcG9ydCBrZXl3b3JkCisgICAgICAgICAgICBpbXBvcnQgbGluZWNhY2hlCisgICAgICAgICAgICBpbXBvcnQgbWFjdXJsMnBhdGgKKyAgICAgICAgICAgIGltcG9ydCBtYWlsY2FwCisgICAgICAgICAgICBpbXBvcnQgbWltaWZ5CisgICAgICAgICAgICBpbXBvcnQgbm50cGxpYgorICAgICAgICAgICAgaW1wb3J0IG50dXJsMnBhdGgKKyAgICAgICAgICAgIGltcG9ydCBvcGNvZGUKKyAgICAgICAgICAgIGltcG9ydCBvczJlbXhwYXRoCisgICAgICAgICAgICBpbXBvcnQgcGRiCisgICAgICAgICAgICBpbXBvcnQgcG9zaXhmaWxlCisgICAgICAgICAgICBpbXBvcnQgcHN0YXRzCisgICAgICAgICAgICBpbXBvcnQgcHlfY29tcGlsZQorICAgICAgICAgICAgaW1wb3J0IHJleGVjCisgICAgICAgICAgICBpbXBvcnQgc2NoZWQKKyAgICAgICAgICAgIGltcG9ydCBzbmRoZHIKKyAgICAgICAgICAgIGltcG9ydCBzdGF0dmZzCisgICAgICAgICAgICBpbXBvcnQgc3RyaW5nb2xkCisgICAgICAgICAgICBpbXBvcnQgc3VuYXUKKyAgICAgICAgICAgIGltcG9ydCBzdW5hdWRpbworICAgICAgICAgICAgaW1wb3J0IHN5bWJvbAorICAgICAgICAgICAgaW1wb3J0IHRhYm5hbm55CisgICAgICAgICAgICBpbXBvcnQgdGltZWl0CisgICAgICAgICAgICBpbXBvcnQgdG9haWZmCisgICAgICAgICAgICBpbXBvcnQgdG9rZW4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgdHR5ICAgICAjIG5vdCBhdmFpbGFibGUgb24gV2luZG93cworICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAic2tpcHBpbmcgdHR5IgorCisgICAgICAgICAgICAjIENhbid0IHRlc3QgdGhlICJ1c2VyIiBtb2R1bGUgLS0gaWYgdGhlIHVzZXIgaGFzIGEgfi8ucHl0aG9ucmMucHksIGl0CisgICAgICAgICAgICAjIGNhbiBzY3JldyB1cCBhbGwgc29ydHMgb2YgdGhpbmdzIChlc3AuIGlmIGl0IHByaW50cyEpLgorICAgICAgICAgICAgI2ltcG9ydCB1c2VyCisgICAgICAgICAgICBpbXBvcnQgd2ViYnJvd3NlcgorICAgICAgICAgICAgaW1wb3J0IHhtbAorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RVbnRlc3RlZE1vZHVsZXMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N1cHBvcnQucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zdXBwb3J0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMWNhYzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zdXBwb3J0LnB5CkBAIC0wLDAgKzEsMTM2NyBAQAorIiIiU3VwcG9ydGluZyBkZWZpbml0aW9ucyBmb3IgdGhlIFB5dGhvbiByZWdyZXNzaW9uIHRlc3RzLiIiIgorCitpZiBfX25hbWVfXyAhPSAndGVzdC50ZXN0X3N1cHBvcnQnOgorICAgIHJhaXNlIEltcG9ydEVycm9yKCd0ZXN0X3N1cHBvcnQgbXVzdCBiZSBpbXBvcnRlZCBmcm9tIHRoZSB0ZXN0IHBhY2thZ2UnKQorCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGVycm5vCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgZ2MKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHBsYXRmb3JtCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IFVzZXJEaWN0CitpbXBvcnQgcmUKK2ltcG9ydCB0aW1lCitpbXBvcnQgc3RydWN0CitpbXBvcnQgX3Rlc3RjYXBpCitpbXBvcnQgc3lzY29uZmlnCit0cnk6CisgICAgaW1wb3J0IHRocmVhZAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZCA9IE5vbmUKKworX19hbGxfXyA9IFsiRXJyb3IiLCAiVGVzdEZhaWxlZCIsICJSZXNvdXJjZURlbmllZCIsICJpbXBvcnRfbW9kdWxlIiwKKyAgICAgICAgICAgInZlcmJvc2UiLCAidXNlX3Jlc291cmNlcyIsICJtYXhfbWVtdXNlIiwgInJlY29yZF9vcmlnaW5hbF9zdGRvdXQiLAorICAgICAgICAgICAiZ2V0X29yaWdpbmFsX3N0ZG91dCIsICJ1bmxvYWQiLCAidW5saW5rIiwgInJtdHJlZSIsICJmb3JnZXQiLAorICAgICAgICAgICAiaXNfcmVzb3VyY2VfZW5hYmxlZCIsICJyZXF1aXJlcyIsICJmaW5kX3VudXNlZF9wb3J0IiwgImJpbmRfcG9ydCIsCisgICAgICAgICAgICJmY21wIiwgImhhdmVfdW5pY29kZSIsICJpc19qeXRob24iLCAiVEVTVEZOIiwgIkhPU1QiLCAiRlVaWiIsCisgICAgICAgICAgICJTQVZFRENXRCIsICJ0ZW1wX2N3ZCIsICJmaW5kZmlsZSIsICJzb3J0ZGljdCIsICJjaGVja19zeW50YXhfZXJyb3IiLAorICAgICAgICAgICAib3Blbl91cmxyZXNvdXJjZSIsICJjaGVja193YXJuaW5ncyIsICJjaGVja19weTNrX3dhcm5pbmdzIiwKKyAgICAgICAgICAgIkNsZWFuSW1wb3J0IiwgIkVudmlyb25tZW50VmFyR3VhcmQiLCAiY2FwdHVyZWRfb3V0cHV0IiwKKyAgICAgICAgICAgImNhcHR1cmVkX3N0ZG91dCIsICJUcmFuc2llbnRSZXNvdXJjZSIsICJ0cmFuc2llbnRfaW50ZXJuZXQiLAorICAgICAgICAgICAicnVuX3dpdGhfbG9jYWxlIiwgInNldF9tZW1saW1pdCIsICJiaWdtZW10ZXN0IiwgImJpZ2FkZHJzcGFjZXRlc3QiLAorICAgICAgICAgICAiQmFzaWNUZXN0UnVubmVyIiwgInJ1bl91bml0dGVzdCIsICJydW5fZG9jdGVzdCIsICJ0aHJlYWRpbmdfc2V0dXAiLAorICAgICAgICAgICAidGhyZWFkaW5nX2NsZWFudXAiLCAicmVhcF9jaGlsZHJlbiIsICJjcHl0aG9uX29ubHkiLAorICAgICAgICAgICAiY2hlY2tfaW1wbF9kZXRhaWwiLCAiZ2V0X2F0dHJpYnV0ZSIsICJweTNrX2J5dGVzIiwKKyAgICAgICAgICAgImltcG9ydF9mcmVzaF9tb2R1bGUiLCAidGhyZWFkaW5nX2NsZWFudXAiLCAicmVhcF9jaGlsZHJlbiIsCisgICAgICAgICAgICJzdHJpcF9weXRob25fc3RkZXJyIl0KKworY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJCYXNlIGNsYXNzIGZvciByZWdyZXNzaW9uIHRlc3QgZXhjZXB0aW9ucy4iIiIKKworY2xhc3MgVGVzdEZhaWxlZChFcnJvcik6CisgICAgIiIiVGVzdCBmYWlsZWQuIiIiCisKK2NsYXNzIFJlc291cmNlRGVuaWVkKHVuaXR0ZXN0LlNraXBUZXN0KToKKyAgICAiIiJUZXN0IHNraXBwZWQgYmVjYXVzZSBpdCByZXF1ZXN0ZWQgYSBkaXNhbGxvd2VkIHJlc291cmNlLgorCisgICAgVGhpcyBpcyByYWlzZWQgd2hlbiBhIHRlc3QgY2FsbHMgcmVxdWlyZXMoKSBmb3IgYSByZXNvdXJjZSB0aGF0CisgICAgaGFzIG5vdCBiZWVuIGVuYWJsZWQuICBJdCBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZXhwZWN0ZWQKKyAgICBhbmQgdW5leHBlY3RlZCBza2lwcy4KKyAgICAiIiIKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBfaWdub3JlX2RlcHJlY2F0ZWRfaW1wb3J0cyhpZ25vcmU9VHJ1ZSk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIHN1cHByZXNzIHBhY2thZ2UgYW5kIG1vZHVsZSBkZXByZWNhdGlvbgorICAgIHdhcm5pbmdzIHdoZW4gaW1wb3J0aW5nIHRoZW0uCisKKyAgICBJZiBpZ25vcmUgaXMgRmFsc2UsIHRoaXMgY29udGV4dCBtYW5hZ2VyIGhhcyBubyBlZmZlY3QuIiIiCisgICAgaWYgaWdub3JlOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIi4rIChtb2R1bGV8cGFja2FnZSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgeWllbGQKKyAgICBlbHNlOgorICAgICAgICB5aWVsZAorCisKK2RlZiBpbXBvcnRfbW9kdWxlKG5hbWUsIGRlcHJlY2F0ZWQ9RmFsc2UpOgorICAgICIiIkltcG9ydCBhbmQgcmV0dXJuIHRoZSBtb2R1bGUgdG8gYmUgdGVzdGVkLCByYWlzaW5nIFNraXBUZXN0IGlmCisgICAgaXQgaXMgbm90IGF2YWlsYWJsZS4KKworICAgIElmIGRlcHJlY2F0ZWQgaXMgVHJ1ZSwgYW55IG1vZHVsZSBvciBwYWNrYWdlIGRlcHJlY2F0aW9uIG1lc3NhZ2VzCisgICAgd2lsbCBiZSBzdXBwcmVzc2VkLiIiIgorICAgIHdpdGggX2lnbm9yZV9kZXByZWNhdGVkX2ltcG9ydHMoZGVwcmVjYXRlZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIG1zZzoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KHN0cihtc2cpKQorCisKK2RlZiBfc2F2ZV9hbmRfcmVtb3ZlX21vZHVsZShuYW1lLCBvcmlnX21vZHVsZXMpOgorICAgICIiIkhlbHBlciBmdW5jdGlvbiB0byBzYXZlIGFuZCByZW1vdmUgYSBtb2R1bGUgZnJvbSBzeXMubW9kdWxlcworCisgICAgICAgUmFpc2UgSW1wb3J0RXJyb3IgaWYgdGhlIG1vZHVsZSBjYW4ndCBiZSBpbXBvcnRlZC4iIiIKKyAgICAjIHRyeSB0byBpbXBvcnQgdGhlIG1vZHVsZSBhbmQgcmFpc2UgYW4gZXJyb3IgaWYgaXQgY2FuJ3QgYmUgaW1wb3J0ZWQKKyAgICBpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgX19pbXBvcnRfXyhuYW1lKQorICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbmFtZV0KKyAgICBmb3IgbW9kbmFtZSBpbiBsaXN0KHN5cy5tb2R1bGVzKToKKyAgICAgICAgaWYgbW9kbmFtZSA9PSBuYW1lIG9yIG1vZG5hbWUuc3RhcnRzd2l0aChuYW1lICsgJy4nKToKKyAgICAgICAgICAgIG9yaWdfbW9kdWxlc1ttb2RuYW1lXSA9IHN5cy5tb2R1bGVzW21vZG5hbWVdCisgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kbmFtZV0KKworZGVmIF9zYXZlX2FuZF9ibG9ja19tb2R1bGUobmFtZSwgb3JpZ19tb2R1bGVzKToKKyAgICAiIiJIZWxwZXIgZnVuY3Rpb24gdG8gc2F2ZSBhbmQgYmxvY2sgYSBtb2R1bGUgaW4gc3lzLm1vZHVsZXMKKworICAgICAgIFJldHVybiBUcnVlIGlmIHRoZSBtb2R1bGUgd2FzIGluIHN5cy5tb2R1bGVzLCBGYWxzZSBvdGhlcndpc2UuIiIiCisgICAgc2F2ZWQgPSBUcnVlCisgICAgdHJ5OgorICAgICAgICBvcmlnX21vZHVsZXNbbmFtZV0gPSBzeXMubW9kdWxlc1tuYW1lXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgc2F2ZWQgPSBGYWxzZQorICAgIHN5cy5tb2R1bGVzW25hbWVdID0gTm9uZQorICAgIHJldHVybiBzYXZlZAorCisKK2RlZiBpbXBvcnRfZnJlc2hfbW9kdWxlKG5hbWUsIGZyZXNoPSgpLCBibG9ja2VkPSgpLCBkZXByZWNhdGVkPUZhbHNlKToKKyAgICAiIiJJbXBvcnRzIGFuZCByZXR1cm5zIGEgbW9kdWxlLCBkZWxpYmVyYXRlbHkgYnlwYXNzaW5nIHRoZSBzeXMubW9kdWxlcyBjYWNoZQorICAgIGFuZCBpbXBvcnRpbmcgYSBmcmVzaCBjb3B5IG9mIHRoZSBtb2R1bGUuIE9uY2UgdGhlIGltcG9ydCBpcyBjb21wbGV0ZSwKKyAgICB0aGUgc3lzLm1vZHVsZXMgY2FjaGUgaXMgcmVzdG9yZWQgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLgorCisgICAgTW9kdWxlcyBuYW1lZCBpbiBmcmVzaCBhcmUgYWxzbyBpbXBvcnRlZCBhbmV3IGlmIG5lZWRlZCBieSB0aGUgaW1wb3J0LgorICAgIElmIG9uZSBvZiB0aGVzZSBtb2R1bGVzIGNhbid0IGJlIGltcG9ydGVkLCBOb25lIGlzIHJldHVybmVkLgorCisgICAgSW1wb3J0aW5nIG9mIG1vZHVsZXMgbmFtZWQgaW4gYmxvY2tlZCBpcyBwcmV2ZW50ZWQgd2hpbGUgdGhlIGZyZXNoIGltcG9ydAorICAgIHRha2VzIHBsYWNlLgorCisgICAgSWYgZGVwcmVjYXRlZCBpcyBUcnVlLCBhbnkgbW9kdWxlIG9yIHBhY2thZ2UgZGVwcmVjYXRpb24gbWVzc2FnZXMKKyAgICB3aWxsIGJlIHN1cHByZXNzZWQuIiIiCisgICAgIyBOT1RFOiB0ZXN0X2hlYXBxLCB0ZXN0X2pzb24sIGFuZCB0ZXN0X3dhcm5pbmdzIGluY2x1ZGUgZXh0cmEgc2FuaXR5CisgICAgIyBjaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyB1dGlsaXR5IGZ1bmN0aW9uIGlzIHdvcmtpbmcgYXMgZXhwZWN0ZWQKKyAgICB3aXRoIF9pZ25vcmVfZGVwcmVjYXRlZF9pbXBvcnRzKGRlcHJlY2F0ZWQpOgorICAgICAgICAjIEtlZXAgdHJhY2sgb2YgbW9kdWxlcyBzYXZlZCBmb3IgbGF0ZXIgcmVzdG9yYXRpb24gYXMgd2VsbAorICAgICAgICAjIGFzIHRob3NlIHdoaWNoIGp1c3QgbmVlZCBhIGJsb2NraW5nIGVudHJ5IHJlbW92ZWQKKyAgICAgICAgb3JpZ19tb2R1bGVzID0ge30KKyAgICAgICAgbmFtZXNfdG9fcmVtb3ZlID0gW10KKyAgICAgICAgX3NhdmVfYW5kX3JlbW92ZV9tb2R1bGUobmFtZSwgb3JpZ19tb2R1bGVzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgZnJlc2hfbmFtZSBpbiBmcmVzaDoKKyAgICAgICAgICAgICAgICBfc2F2ZV9hbmRfcmVtb3ZlX21vZHVsZShmcmVzaF9uYW1lLCBvcmlnX21vZHVsZXMpCisgICAgICAgICAgICBmb3IgYmxvY2tlZF9uYW1lIGluIGJsb2NrZWQ6CisgICAgICAgICAgICAgICAgaWYgbm90IF9zYXZlX2FuZF9ibG9ja19tb2R1bGUoYmxvY2tlZF9uYW1lLCBvcmlnX21vZHVsZXMpOgorICAgICAgICAgICAgICAgICAgICBuYW1lc190b19yZW1vdmUuYXBwZW5kKGJsb2NrZWRfbmFtZSkKKyAgICAgICAgICAgIGZyZXNoX21vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGZyZXNoX21vZHVsZSA9IE5vbmUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvciBvcmlnX25hbWUsIG1vZHVsZSBpbiBvcmlnX21vZHVsZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1tvcmlnX25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICBmb3IgbmFtZV90b19yZW1vdmUgaW4gbmFtZXNfdG9fcmVtb3ZlOgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lX3RvX3JlbW92ZV0KKyAgICAgICAgcmV0dXJuIGZyZXNoX21vZHVsZQorCisKK2RlZiBnZXRfYXR0cmlidXRlKG9iaiwgbmFtZSk6CisgICAgIiIiR2V0IGFuIGF0dHJpYnV0ZSwgcmFpc2luZyBTa2lwVGVzdCBpZiBBdHRyaWJ1dGVFcnJvciBpcyByYWlzZWQuIiIiCisgICAgdHJ5OgorICAgICAgICBhdHRyaWJ1dGUgPSBnZXRhdHRyKG9iaiwgbmFtZSkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJtb2R1bGUgJXMgaGFzIG5vIGF0dHJpYnV0ZSAlcyIgJSAoCisgICAgICAgICAgICBvYmouX19uYW1lX18sIG5hbWUpKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBhdHRyaWJ1dGUKKworCit2ZXJib3NlID0gMSAgICAgICAgICAgICAgIyBGbGFnIHNldCB0byAwIGJ5IHJlZ3J0ZXN0LnB5Cit1c2VfcmVzb3VyY2VzID0gTm9uZSAgICAgIyBGbGFnIHNldCB0byBbXSBieSByZWdydGVzdC5weQorbWF4X21lbXVzZSA9IDAgICAgICAgICAgICMgRGlzYWJsZSBiaWdtZW0gdGVzdHMgKHRoZXkgd2lsbCBzdGlsbCBiZSBydW4gd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICMgc21hbGwgc2l6ZXMsIHRvIG1ha2Ugc3VyZSB0aGV5IHdvcmsuKQorcmVhbF9tYXhfbWVtdXNlID0gMAorCisjIF9vcmlnaW5hbF9zdGRvdXQgaXMgbWVhbnQgdG8gaG9sZCBzdGRvdXQgYXQgdGhlIHRpbWUgcmVncnRlc3QgYmVnYW4uCisjIFRoaXMgbWF5IGJlICJ0aGUgcmVhbCIgc3Rkb3V0LCBvciBJRExFJ3MgZW11bGF0aW9uIG9mIHN0ZG91dCwgb3Igd2hhdGV2ZXIuCisjIFRoZSBwb2ludCBpcyB0byBoYXZlIHNvbWUgZmxhdm9yIG9mIHN0ZG91dCB0aGUgdXNlciBjYW4gYWN0dWFsbHkgc2VlLgorX29yaWdpbmFsX3N0ZG91dCA9IE5vbmUKK2RlZiByZWNvcmRfb3JpZ2luYWxfc3Rkb3V0KHN0ZG91dCk6CisgICAgZ2xvYmFsIF9vcmlnaW5hbF9zdGRvdXQKKyAgICBfb3JpZ2luYWxfc3Rkb3V0ID0gc3Rkb3V0CisKK2RlZiBnZXRfb3JpZ2luYWxfc3Rkb3V0KCk6CisgICAgcmV0dXJuIF9vcmlnaW5hbF9zdGRvdXQgb3Igc3lzLnN0ZG91dAorCitkZWYgdW5sb2FkKG5hbWUpOgorICAgIHRyeToKKyAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBwYXNzCisKK2lmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJ3aW4iKToKKyAgICBkZWYgX3dhaXRmb3IoZnVuYywgcGF0aG5hbWUsIHdhaXRhbGw9RmFsc2UpOgorICAgICAgICAjIFBlZm9ybSB0aGUgb3BlcmF0aW9uCisgICAgICAgIGZ1bmMocGF0aG5hbWUpCisgICAgICAgICMgTm93IHNldHVwIHRoZSB3YWl0IGxvb3AKKyAgICAgICAgaWYgd2FpdGFsbDoKKyAgICAgICAgICAgIGRpcm5hbWUgPSBwYXRobmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGlybmFtZSwgbmFtZSA9IG9zLnBhdGguc3BsaXQocGF0aG5hbWUpCisgICAgICAgICAgICBkaXJuYW1lID0gZGlybmFtZSBvciAnLicKKyAgICAgICAgIyBDaGVjayBmb3IgYHBhdGhuYW1lYCB0byBiZSByZW1vdmVkIGZyb20gdGhlIGZpbGVzeXN0ZW0uCisgICAgICAgICMgVGhlIGV4cG9uZW50aWFsIGJhY2tvZmYgb2YgdGhlIHRpbWVvdXQgYW1vdW50cyB0byBhIHRvdGFsCisgICAgICAgICMgb2YgfjEgc2Vjb25kIGFmdGVyIHdoaWNoIHRoZSBkZWxldGlvbiBpcyBwcm9iYWJseSBhbiBlcnJvcgorICAgICAgICAjIGFueXdheS4KKyAgICAgICAgIyBUZXN0aW5nIG9uIGEgaTdANC4zR0h6IHNob3dzIHRoYXQgdXN1YWxseSBvbmx5IDEgaXRlcmF0aW9uIGlzCisgICAgICAgICMgcmVxdWlyZWQgd2hlbiBjb250ZW50aW9uIG9jY3Vycy4KKyAgICAgICAgdGltZW91dCA9IDAuMDAxCisgICAgICAgIHdoaWxlIHRpbWVvdXQgPCAxLjA6CisgICAgICAgICAgICAjIE5vdGUgd2UgYXJlIG9ubHkgdGVzdGluZyBmb3IgdGhlIGV4aXN0YW5jZSBvZiB0aGUgZmlsZShzKSBpbgorICAgICAgICAgICAgIyB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSByZWdhcmRsZXNzIG9mIGFueSBzZWN1cml0eSBvcgorICAgICAgICAgICAgIyBhY2Nlc3MgcmlnaHRzLiAgSWYgd2UgaGF2ZSBtYWRlIGl0IHRoaXMgZmFyLCB3ZSBoYXZlIHN1ZmZpY2llbnQKKyAgICAgICAgICAgICMgcGVybWlzc2lvbnMgdG8gZG8gdGhhdCBtdWNoIHVzaW5nIFB5dGhvbidzIGVxdWl2YWxlbnQgb2YgdGhlCisgICAgICAgICAgICAjIFdpbmRvd3MgQVBJIEZpbmRGaXJzdEZpbGUuCisgICAgICAgICAgICAjIE90aGVyIFdpbmRvd3MgQVBJcyBjYW4gZmFpbCBvciBnaXZlIGluY29ycmVjdCByZXN1bHRzIHdoZW4KKyAgICAgICAgICAgICMgZGVhbGluZyB3aXRoIGZpbGVzIHRoYXQgYXJlIHBlbmRpbmcgZGVsZXRpb24uCisgICAgICAgICAgICBMID0gb3MubGlzdGRpcihkaXJuYW1lKQorICAgICAgICAgICAgaWYgbm90IChMIGlmIHdhaXRhbGwgZWxzZSBuYW1lIGluIEwpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgIyBJbmNyZWFzZSB0aGUgdGltZW91dCBhbmQgdHJ5IGFnYWluCisgICAgICAgICAgICB0aW1lLnNsZWVwKHRpbWVvdXQpCisgICAgICAgICAgICB0aW1lb3V0ICo9IDIKKyAgICAgICAgd2FybmluZ3Mud2FybigndGVzdHMgbWF5IGZhaWwsIGRlbGV0ZSBzdGlsbCBwZW5kaW5nIGZvciAnICsgcGF0aG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcsIHN0YWNrbGV2ZWw9NCkKKworICAgIGRlZiBfdW5saW5rKGZpbGVuYW1lKToKKyAgICAgICAgX3dhaXRmb3Iob3MudW5saW5rLCBmaWxlbmFtZSkKKworICAgIGRlZiBfcm1kaXIoZGlybmFtZSk6CisgICAgICAgIF93YWl0Zm9yKG9zLnJtZGlyLCBkaXJuYW1lKQorCisgICAgZGVmIF9ybXRyZWUocGF0aCk6CisgICAgICAgIGRlZiBfcm10cmVlX2lubmVyKHBhdGgpOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihwYXRoKToKKyAgICAgICAgICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBuYW1lKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnVsbG5hbWUpOgorICAgICAgICAgICAgICAgICAgICBfd2FpdGZvcihfcm10cmVlX2lubmVyLCBmdWxsbmFtZSwgd2FpdGFsbD1UcnVlKQorICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihmdWxsbmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZnVsbG5hbWUpCisgICAgICAgIF93YWl0Zm9yKF9ybXRyZWVfaW5uZXIsIHBhdGgsIHdhaXRhbGw9VHJ1ZSkKKyAgICAgICAgX3dhaXRmb3Iob3Mucm1kaXIsIHBhdGgpCitlbHNlOgorICAgIF91bmxpbmsgPSBvcy51bmxpbmsKKyAgICBfcm1kaXIgPSBvcy5ybWRpcgorICAgIF9ybXRyZWUgPSBzaHV0aWwucm10cmVlCisKK2RlZiB1bmxpbmsoZmlsZW5hbWUpOgorICAgIHRyeToKKyAgICAgICAgX3VubGluayhmaWxlbmFtZSkKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcGFzcworCitkZWYgcm1kaXIoZGlybmFtZSk6CisgICAgdHJ5OgorICAgICAgICBfcm1kaXIoZGlybmFtZSkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKKyAgICAgICAgIyBUaGUgZGlyZWN0b3J5IG5lZWQgbm90IGV4aXN0LgorICAgICAgICBpZiBlcnJvci5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICByYWlzZQorCitkZWYgcm10cmVlKHBhdGgpOgorICAgIHRyeToKKyAgICAgICAgX3JtdHJlZShwYXRoKQorICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAjIFVuaXggcmV0dXJucyBFTk9FTlQsIFdpbmRvd3MgcmV0dXJucyBFU1JDSC4KKyAgICAgICAgaWYgZS5lcnJubyBub3QgaW4gKGVycm5vLkVOT0VOVCwgZXJybm8uRVNSQ0gpOgorICAgICAgICAgICAgcmFpc2UKKworZGVmIGZvcmdldChtb2RuYW1lKToKKyAgICAnJyciRm9yZ2V0IiBhIG1vZHVsZSB3YXMgZXZlciBpbXBvcnRlZCBieSByZW1vdmluZyBpdCBmcm9tIHN5cy5tb2R1bGVzIGFuZAorICAgIGRlbGV0aW5nIGFueSAucHljIGFuZCAucHlvIGZpbGVzLicnJworICAgIHVubG9hZChtb2RuYW1lKQorICAgIGZvciBkaXJuYW1lIGluIHN5cy5wYXRoOgorICAgICAgICB1bmxpbmsob3MucGF0aC5qb2luKGRpcm5hbWUsIG1vZG5hbWUgKyBvcy5leHRzZXAgKyAncHljJykpCisgICAgICAgICMgRGVsZXRpbmcgdGhlIC5weW8gZmlsZSBjYW5ub3QgYmUgd2l0aGluIHRoZSAndHJ5JyBmb3IgdGhlIC5weWMgc2luY2UKKyAgICAgICAgIyB0aGUgY2hhbmNlIGV4aXN0cyB0aGF0IHRoZXJlIGlzIG5vIC5weWMgKGFuZCB0aHVzIHRoZSAndHJ5JyBzdGF0ZW1lbnQKKyAgICAgICAgIyBpcyBleGl0ZWQpIGJ1dCB0aGVyZSBpcyBhIC5weW8gZmlsZS4KKyAgICAgICAgdW5saW5rKG9zLnBhdGguam9pbihkaXJuYW1lLCBtb2RuYW1lICsgb3MuZXh0c2VwICsgJ3B5bycpKQorCitkZWYgaXNfcmVzb3VyY2VfZW5hYmxlZChyZXNvdXJjZSk6CisgICAgIiIiVGVzdCB3aGV0aGVyIGEgcmVzb3VyY2UgaXMgZW5hYmxlZC4gIEtub3duIHJlc291cmNlcyBhcmUgc2V0IGJ5CisgICAgcmVncnRlc3QucHkuIiIiCisgICAgcmV0dXJuIHVzZV9yZXNvdXJjZXMgaXMgbm90IE5vbmUgYW5kIHJlc291cmNlIGluIHVzZV9yZXNvdXJjZXMKKworZGVmIHJlcXVpcmVzKHJlc291cmNlLCBtc2c9Tm9uZSk6CisgICAgIiIiUmFpc2UgUmVzb3VyY2VEZW5pZWQgaWYgdGhlIHNwZWNpZmllZCByZXNvdXJjZSBpcyBub3QgYXZhaWxhYmxlLgorCisgICAgSWYgdGhlIGNhbGxlcidzIG1vZHVsZSBpcyBfX21haW5fXyB0aGVuIGF1dG9tYXRpY2FsbHkgcmV0dXJuIFRydWUuICBUaGUKKyAgICBwb3NzaWJpbGl0eSBvZiBGYWxzZSBiZWluZyByZXR1cm5lZCBvY2N1cnMgd2hlbiByZWdydGVzdC5weSBpcyBleGVjdXRpbmcuIiIiCisgICAgIyBzZWUgaWYgdGhlIGNhbGxlcidzIG1vZHVsZSBpcyBfX21haW5fXyAtIGlmIHNvLCB0cmVhdCBhcyBpZgorICAgICMgdGhlIHJlc291cmNlIHdhcyBzZXQKKyAgICBpZiBzeXMuX2dldGZyYW1lKDEpLmZfZ2xvYmFscy5nZXQoIl9fbmFtZV9fIikgPT0gIl9fbWFpbl9fIjoKKyAgICAgICAgcmV0dXJuCisgICAgaWYgbm90IGlzX3Jlc291cmNlX2VuYWJsZWQocmVzb3VyY2UpOgorICAgICAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgICAgIG1zZyA9ICJVc2Ugb2YgdGhlIGAlcycgcmVzb3VyY2Ugbm90IGVuYWJsZWQiICUgcmVzb3VyY2UKKyAgICAgICAgcmFpc2UgUmVzb3VyY2VEZW5pZWQobXNnKQorCitIT1NUID0gJ2xvY2FsaG9zdCcKKworZGVmIGZpbmRfdW51c2VkX3BvcnQoZmFtaWx5PXNvY2tldC5BRl9JTkVULCBzb2NrdHlwZT1zb2NrZXQuU09DS19TVFJFQU0pOgorICAgICIiIlJldHVybnMgYW4gdW51c2VkIHBvcnQgdGhhdCBzaG91bGQgYmUgc3VpdGFibGUgZm9yIGJpbmRpbmcuICBUaGlzIGlzCisgICAgYWNoaWV2ZWQgYnkgY3JlYXRpbmcgYSB0ZW1wb3Jhcnkgc29ja2V0IHdpdGggdGhlIHNhbWUgZmFtaWx5IGFuZCB0eXBlIGFzCisgICAgdGhlICdzb2NrJyBwYXJhbWV0ZXIgKGRlZmF1bHQgaXMgQUZfSU5FVCwgU09DS19TVFJFQU0pLCBhbmQgYmluZGluZyBpdCB0bworICAgIHRoZSBzcGVjaWZpZWQgaG9zdCBhZGRyZXNzIChkZWZhdWx0cyB0byAwLjAuMC4wKSB3aXRoIHRoZSBwb3J0IHNldCB0byAwLAorICAgIGVsaWNpdGluZyBhbiB1bnVzZWQgZXBoZW1lcmFsIHBvcnQgZnJvbSB0aGUgT1MuICBUaGUgdGVtcG9yYXJ5IHNvY2tldCBpcworICAgIHRoZW4gY2xvc2VkIGFuZCBkZWxldGVkLCBhbmQgdGhlIGVwaGVtZXJhbCBwb3J0IGlzIHJldHVybmVkLgorCisgICAgRWl0aGVyIHRoaXMgbWV0aG9kIG9yIGJpbmRfcG9ydCgpIHNob3VsZCBiZSB1c2VkIGZvciBhbnkgdGVzdHMgd2hlcmUgYQorICAgIHNlcnZlciBzb2NrZXQgbmVlZHMgdG8gYmUgYm91bmQgdG8gYSBwYXJ0aWN1bGFyIHBvcnQgZm9yIHRoZSBkdXJhdGlvbiBvZgorICAgIHRoZSB0ZXN0LiAgV2hpY2ggb25lIHRvIHVzZSBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlIGNhbGxpbmcgY29kZSBpcyBjcmVhdGluZworICAgIGEgcHl0aG9uIHNvY2tldCwgb3IgaWYgYW4gdW51c2VkIHBvcnQgbmVlZHMgdG8gYmUgcHJvdmlkZWQgaW4gYSBjb25zdHJ1Y3RvcgorICAgIG9yIHBhc3NlZCB0byBhbiBleHRlcm5hbCBwcm9ncmFtIChpLmUuIHRoZSAtYWNjZXB0IGFyZ3VtZW50IHRvIG9wZW5zc2wncworICAgIHNfc2VydmVyIG1vZGUpLiAgQWx3YXlzIHByZWZlciBiaW5kX3BvcnQoKSBvdmVyIGZpbmRfdW51c2VkX3BvcnQoKSB3aGVyZQorICAgIHBvc3NpYmxlLiAgSGFyZCBjb2RlZCBwb3J0cyBzaG91bGQgKk5FVkVSKiBiZSB1c2VkLiAgQXMgc29vbiBhcyBhIHNlcnZlcgorICAgIHNvY2tldCBpcyBib3VuZCB0byBhIGhhcmQgY29kZWQgcG9ydCwgdGhlIGFiaWxpdHkgdG8gcnVuIG11bHRpcGxlIGluc3RhbmNlcworICAgIG9mIHRoZSB0ZXN0IHNpbXVsdGFuZW91c2x5IG9uIHRoZSBzYW1lIGhvc3QgaXMgY29tcHJvbWlzZWQsIHdoaWNoIG1ha2VzIHRoZQorICAgIHRlc3QgYSB0aWNraW5nIHRpbWUgYm9tYiBpbiBhIGJ1aWxkYm90IGVudmlyb25tZW50LiBPbiBVbml4IGJ1aWxkYm90cywgdGhpcworICAgIG1heSBzaW1wbHkgbWFuaWZlc3QgYXMgYSBmYWlsZWQgdGVzdCwgd2hpY2ggY2FuIGJlIHJlY292ZXJlZCBmcm9tIHdpdGhvdXQKKyAgICBpbnRlcnZlbnRpb24gaW4gbW9zdCBjYXNlcywgYnV0IG9uIFdpbmRvd3MsIHRoZSBlbnRpcmUgcHl0aG9uIHByb2Nlc3MgY2FuCisgICAgY29tcGxldGVseSBhbmQgdXR0ZXJseSB3ZWRnZSwgcmVxdWlyaW5nIHNvbWVvbmUgdG8gbG9nIGluIHRvIHRoZSBidWlsZGJvdAorICAgIGFuZCBtYW51YWxseSBraWxsIHRoZSBhZmZlY3RlZCBwcm9jZXNzLgorCisgICAgKFRoaXMgaXMgZWFzeSB0byByZXByb2R1Y2Ugb24gV2luZG93cywgdW5mb3J0dW5hdGVseSwgYW5kIGNhbiBiZSB0cmFjZWQgdG8KKyAgICB0aGUgU09fUkVVU0VBRERSIHNvY2tldCBvcHRpb24gaGF2aW5nIGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gV2luZG93cyB2ZXJzdXMKKyAgICBVbml4L0xpbnV4LiAgT24gVW5peCwgeW91IGNhbid0IGhhdmUgdHdvIEFGX0lORVQgU09DS19TVFJFQU0gc29ja2V0cyBiaW5kLAorICAgIGxpc3RlbiBhbmQgdGhlbiBhY2NlcHQgY29ubmVjdGlvbnMgb24gaWRlbnRpY2FsIGhvc3QvcG9ydHMuICBBbiBFQUREUklOVVNFCisgICAgc29ja2V0LmVycm9yIHdpbGwgYmUgcmFpc2VkIGF0IHNvbWUgcG9pbnQgKGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gYW5kCisgICAgdGhlIG9yZGVyIGJpbmQgYW5kIGxpc3RlbiB3ZXJlIGNhbGxlZCBvbiBlYWNoIHNvY2tldCkuCisKKyAgICBIb3dldmVyLCBvbiBXaW5kb3dzLCBpZiBTT19SRVVTRUFERFIgaXMgc2V0IG9uIHRoZSBzb2NrZXRzLCBubyBFQUREUklOVVNFCisgICAgd2lsbCBldmVyIGJlIHJhaXNlZCB3aGVuIGF0dGVtcHRpbmcgdG8gYmluZCB0d28gaWRlbnRpY2FsIGhvc3QvcG9ydHMuIFdoZW4KKyAgICBhY2NlcHQoKSBpcyBjYWxsZWQgb24gZWFjaCBzb2NrZXQsIHRoZSBzZWNvbmQgY2FsbGVyJ3MgcHJvY2VzcyB3aWxsIHN0ZWFsCisgICAgdGhlIHBvcnQgZnJvbSB0aGUgZmlyc3QgY2FsbGVyLCBsZWF2aW5nIHRoZW0gYm90aCBpbiBhbiBhd2t3YXJkbHkgd2VkZ2VkCisgICAgc3RhdGUgd2hlcmUgdGhleSdsbCBubyBsb25nZXIgcmVzcG9uZCB0byBhbnkgc2lnbmFscyBvciBncmFjZWZ1bCBraWxscywgYW5kCisgICAgbXVzdCBiZSBmb3JjaWJseSBraWxsZWQgdmlhIE9wZW5Qcm9jZXNzKCkvVGVybWluYXRlUHJvY2VzcygpLgorCisgICAgVGhlIHNvbHV0aW9uIG9uIFdpbmRvd3MgaXMgdG8gdXNlIHRoZSBTT19FWENMVVNJVkVBRERSVVNFIHNvY2tldCBvcHRpb24KKyAgICBpbnN0ZWFkIG9mIFNPX1JFVVNFQUREUiwgd2hpY2ggZWZmZWN0aXZlbHkgYWZmb3JkcyB0aGUgc2FtZSBzZW1hbnRpY3MgYXMKKyAgICBTT19SRVVTRUFERFIgb24gVW5peC4gIEdpdmVuIHRoZSBwcm9wZW5zaXR5IG9mIFVuaXggZGV2ZWxvcGVycyBpbiB0aGUgT3BlbgorICAgIFNvdXJjZSB3b3JsZCBjb21wYXJlZCB0byBXaW5kb3dzIG9uZXMsIHRoaXMgaXMgYSBjb21tb24gbWlzdGFrZS4gIEEgcXVpY2sKKyAgICBsb29rIG92ZXIgT3BlblNTTCdzIDAuOS44ZyBzb3VyY2Ugc2hvd3MgdGhhdCB0aGV5IHVzZSBTT19SRVVTRUFERFIgd2hlbgorICAgIG9wZW5zc2wuZXhlIGlzIGNhbGxlZCB3aXRoIHRoZSAnc19zZXJ2ZXInIG9wdGlvbiwgZm9yIGV4YW1wbGUuIFNlZQorICAgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNTUwIGZvciBtb3JlIGluZm8uICBUaGUgZm9sbG93aW5nIHNpdGUgYWxzbworICAgIGhhcyBhIHZlcnkgdGhvcm91Z2ggZGVzY3JpcHRpb24gYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBib3RoIFJFVVNFQUREUgorICAgIGFuZCBFWENMVVNJVkVBRERSVVNFIG9uIFdpbmRvd3M6CisgICAgaHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczc0MDYyMShWUy44NSkuYXNweCkKKworICAgIFhYWDogYWx0aG91Z2ggdGhpcyBhcHByb2FjaCBpcyBhIHZhc3QgaW1wcm92ZW1lbnQgb24gcHJldmlvdXMgYXR0ZW1wdHMgdG8KKyAgICBlbGljaXQgdW51c2VkIHBvcnRzLCBpdCByZXN0cyBoZWF2aWx5IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGVwaGVtZXJhbAorICAgIHBvcnQgcmV0dXJuZWQgdG8gdXMgYnkgdGhlIE9TIHdvbid0IGltbWVkaWF0ZWx5IGJlIGRpc2hlZCBiYWNrIG91dCB0byBzb21lCisgICAgb3RoZXIgcHJvY2VzcyB3aGVuIHdlIGNsb3NlIGFuZCBkZWxldGUgb3VyIHRlbXBvcmFyeSBzb2NrZXQgYnV0IGJlZm9yZSBvdXIKKyAgICBjYWxsaW5nIGNvZGUgaGFzIGEgY2hhbmNlIHRvIGJpbmQgdGhlIHJldHVybmVkIHBvcnQuICBXZSBjYW4gZGVhbCB3aXRoIHRoaXMKKyAgICBpc3N1ZSBpZi93aGVuIHdlIGNvbWUgYWNyb3NzIGl0LiIiIgorICAgIHRlbXBzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHksIHNvY2t0eXBlKQorICAgIHBvcnQgPSBiaW5kX3BvcnQodGVtcHNvY2spCisgICAgdGVtcHNvY2suY2xvc2UoKQorICAgIGRlbCB0ZW1wc29jaworICAgIHJldHVybiBwb3J0CisKK2RlZiBiaW5kX3BvcnQoc29jaywgaG9zdD1IT1NUKToKKyAgICAiIiJCaW5kIHRoZSBzb2NrZXQgdG8gYSBmcmVlIHBvcnQgYW5kIHJldHVybiB0aGUgcG9ydCBudW1iZXIuICBSZWxpZXMgb24KKyAgICBlcGhlbWVyYWwgcG9ydHMgaW4gb3JkZXIgdG8gZW5zdXJlIHdlIGFyZSB1c2luZyBhbiB1bmJvdW5kIHBvcnQuICBUaGlzIGlzCisgICAgaW1wb3J0YW50IGFzIG1hbnkgdGVzdHMgbWF5IGJlIHJ1bm5pbmcgc2ltdWx0YW5lb3VzbHksIGVzcGVjaWFsbHkgaW4gYQorICAgIGJ1aWxkYm90IGVudmlyb25tZW50LiAgVGhpcyBtZXRob2QgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgc29jay5mYW1pbHkKKyAgICBpcyBBRl9JTkVUIGFuZCBzb2NrLnR5cGUgaXMgU09DS19TVFJFQU0sICphbmQqIHRoZSBzb2NrZXQgaGFzIFNPX1JFVVNFQUREUgorICAgIG9yIFNPX1JFVVNFUE9SVCBzZXQgb24gaXQuICBUZXN0cyBzaG91bGQgKm5ldmVyKiBzZXQgdGhlc2Ugc29ja2V0IG9wdGlvbnMKKyAgICBmb3IgVENQL0lQIHNvY2tldHMuICBUaGUgb25seSBjYXNlIGZvciBzZXR0aW5nIHRoZXNlIG9wdGlvbnMgaXMgdGVzdGluZworICAgIG11bHRpY2FzdGluZyB2aWEgbXVsdGlwbGUgVURQIHNvY2tldHMuCisKKyAgICBBZGRpdGlvbmFsbHksIGlmIHRoZSBTT19FWENMVVNJVkVBRERSVVNFIHNvY2tldCBvcHRpb24gaXMgYXZhaWxhYmxlIChpLmUuCisgICAgb24gV2luZG93cyksIGl0IHdpbGwgYmUgc2V0IG9uIHRoZSBzb2NrZXQuICBUaGlzIHdpbGwgcHJldmVudCBhbnlvbmUgZWxzZQorICAgIGZyb20gYmluZCgpJ2luZyB0byBvdXIgaG9zdC9wb3J0IGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHRlc3QuCisgICAgIiIiCisgICAgaWYgc29jay5mYW1pbHkgPT0gc29ja2V0LkFGX0lORVQgYW5kIHNvY2sudHlwZSA9PSBzb2NrZXQuU09DS19TVFJFQU06CisgICAgICAgIGlmIGhhc2F0dHIoc29ja2V0LCAnU09fUkVVU0VBRERSJyk6CisgICAgICAgICAgICBpZiBzb2NrLmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIpID09IDE6CisgICAgICAgICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCgidGVzdHMgc2hvdWxkIG5ldmVyIHNldCB0aGUgU09fUkVVU0VBRERSICIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic29ja2V0IG9wdGlvbiBvbiBUQ1AvSVAgc29ja2V0cyEiKQorICAgICAgICBpZiBoYXNhdHRyKHNvY2tldCwgJ1NPX1JFVVNFUE9SVCcpOgorICAgICAgICAgICAgaWYgc29jay5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VQT1JUKSA9PSAxOgorICAgICAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQoInRlc3RzIHNob3VsZCBuZXZlciBzZXQgdGhlIFNPX1JFVVNFUE9SVCAiICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvY2tldCBvcHRpb24gb24gVENQL0lQIHNvY2tldHMhIikKKyAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsICdTT19FWENMVVNJVkVBRERSVVNFJyk6CisgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19FWENMVVNJVkVBRERSVVNFLCAxKQorCisgICAgc29jay5iaW5kKChob3N0LCAwKSkKKyAgICBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzFdCisgICAgcmV0dXJuIHBvcnQKKworRlVaWiA9IDFlLTYKKworZGVmIGZjbXAoeCwgeSk6ICMgZnV6enkgY29tcGFyaXNvbiBmdW5jdGlvbgorICAgIGlmIGlzaW5zdGFuY2UoeCwgZmxvYXQpIG9yIGlzaW5zdGFuY2UoeSwgZmxvYXQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdXp6ID0gKGFicyh4KSArIGFicyh5KSkgKiBGVVpaCisgICAgICAgICAgICBpZiBhYnMoeC15KSA8PSBmdXp6OgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICBlbGlmIHR5cGUoeCkgPT0gdHlwZSh5KSBhbmQgaXNpbnN0YW5jZSh4LCAodHVwbGUsIGxpc3QpKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobWluKGxlbih4KSwgbGVuKHkpKSk6CisgICAgICAgICAgICBvdXRjb21lID0gZmNtcCh4W2ldLCB5W2ldKQorICAgICAgICAgICAgaWYgb3V0Y29tZSAhPSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBvdXRjb21lCisgICAgICAgIHJldHVybiAobGVuKHgpID4gbGVuKHkpKSAtIChsZW4oeCkgPCBsZW4oeSkpCisgICAgcmV0dXJuICh4ID4geSkgLSAoeCA8IHkpCisKKworIyBBIGNvbnN0YW50IGxpa2VseSBsYXJnZXIgdGhhbiB0aGUgdW5kZXJseWluZyBPUyBwaXBlIGJ1ZmZlciBzaXplLCB0bworIyBtYWtlIHdyaXRlcyBibG9ja2luZy4KKyMgV2luZG93cyBsaW1pdCBzZWVtcyB0byBiZSBhcm91bmQgNTEyIEIsIGFuZCBtYW55IFVuaXgga2VybmVscyBoYXZlIGEKKyMgNjQgS2lCIHBpcGUgYnVmZmVyIHNpemUgb3IgMTYgKiBQQUdFX1NJWkU6IHRha2UgYSBmZXcgbWVncyB0byBiZSBzdXJlLgorIyAoc2VlIGlzc3VlICMxNzgzNSBmb3IgYSBkaXNjdXNzaW9uIG9mIHRoaXMgbnVtYmVyKS4KK1BJUEVfTUFYX1NJWkUgPSA0ICoxMDI0ICogMTAyNCArIDEKKworCit0cnk6CisgICAgdW5pY29kZQorICAgIGhhdmVfdW5pY29kZSA9IFRydWUKK2V4Y2VwdCBOYW1lRXJyb3I6CisgICAgaGF2ZV91bmljb2RlID0gRmFsc2UKKworaXNfanl0aG9uID0gc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKQorCisjIEZpbGVuYW1lIHVzZWQgZm9yIHRlc3RpbmcKK2lmIG9zLm5hbWUgPT0gJ2phdmEnOgorICAgICMgSnl0aG9uIGRpc2FsbG93cyBAIGluIG1vZHVsZSBuYW1lcworICAgIFRFU1RGTiA9ICckdGVzdCcKK2VsaWYgb3MubmFtZSA9PSAncmlzY29zJzoKKyAgICBURVNURk4gPSAndGVzdGZpbGUnCitlbHNlOgorICAgIFRFU1RGTiA9ICdAdGVzdCcKKyAgICAjIFVuaWNvZGUgbmFtZSBvbmx5IHVzZWQgaWYgVEVTVF9GTl9FTkNPRElORyBleGlzdHMgZm9yIHRoZSBwbGF0Zm9ybS4KKyAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICMgQXNzdW1pbmcgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpIT1zeXMuZ2V0ZGVmYXVsdGVuY29kaW5nKCkKKyAgICAgICAgIyBURVNURk5fVU5JQ09ERSBpcyBhIGZpbGVuYW1lIHRoYXQgY2FuIGJlIGVuY29kZWQgdXNpbmcgdGhlCisgICAgICAgICMgZmlsZSBzeXN0ZW0gZW5jb2RpbmcsIGJ1dCAqbm90KiB3aXRoIHRoZSBkZWZhdWx0IChhc2NpaSkgZW5jb2RpbmcKKyAgICAgICAgaWYgaXNpbnN0YW5jZSgnJywgdW5pY29kZSk6CisgICAgICAgICAgICAjIHB5dGhvbiAtVQorICAgICAgICAgICAgIyBYWFggcGVyaGFwcyB1bmljb2RlKCkgc2hvdWxkIGFjY2VwdCBVbmljb2RlIHN0cmluZ3M/CisgICAgICAgICAgICBURVNURk5fVU5JQ09ERSA9ICJAdGVzdC1ceGUwXHhmMiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgMiBsYXRpbiBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgVEVTVEZOX1VOSUNPREUgPSB1bmljb2RlKCJAdGVzdC1ceGUwXHhmMiIsICJsYXRpbi0xIikKKyAgICAgICAgVEVTVEZOX0VOQ09ESU5HID0gc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpCisgICAgICAgICMgVEVTVEZOX1VORU5DT0RBQkxFIGlzIGEgZmlsZW5hbWUgdGhhdCBzaG91bGQgKm5vdCogYmUKKyAgICAgICAgIyBhYmxlIHRvIGJlIGVuY29kZWQgYnkgKmVpdGhlciogdGhlIGRlZmF1bHQgb3IgZmlsZXN5c3RlbSBlbmNvZGluZy4KKyAgICAgICAgIyBUaGlzIHRlc3QgcmVhbGx5IG9ubHkgbWFrZXMgc2Vuc2Ugb24gV2luZG93cyBOVCBwbGF0Zm9ybXMKKyAgICAgICAgIyB3aGljaCBoYXZlIHNwZWNpYWwgVW5pY29kZSBzdXBwb3J0IGluIHBvc2l4bW9kdWxlLgorICAgICAgICBpZiAobm90IGhhc2F0dHIoc3lzLCAiZ2V0d2luZG93c3ZlcnNpb24iKSBvcgorICAgICAgICAgICAgICAgIHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpWzNdIDwgMik6ICMgIDA9d2luMzJzIG9yIDE9OXgvTUUKKyAgICAgICAgICAgIFRFU1RGTl9VTkVOQ09EQUJMRSA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgSmFwYW5lc2UgY2hhcmFjdGVycyAoSSB0aGluayAtIGZyb20gYnVnIDg0NjEzMykKKyAgICAgICAgICAgIFRFU1RGTl9VTkVOQ09EQUJMRSA9IGV2YWwoJ3UiQHRlc3QtXHU1MTcxXHU2NzA5XHUzMDU1XHUzMDhjXHUzMDhiIicpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBYWFggLSBOb3RlIC0gc2hvdWxkIGJlIHVzaW5nIFRFU1RGTl9FTkNPRElORyBoZXJlIC0gYnV0IGZvcgorICAgICAgICAgICAgICAgICMgV2luZG93cywgIm1iY3MiIGN1cnJlbnRseSBhbHdheXMgb3BlcmF0ZXMgYXMgaWYgaW4KKyAgICAgICAgICAgICAgICAjIGVycm9ycz1pZ25vcmUnIG1vZGUgLSBoZW5jZSB3ZSBnZXQgJz8nIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAjIHRoZSBleGNlcHRpb24uICAnTGF0aW4xJyBvcGVyYXRlcyBhcyB3ZSBleHBlY3QgLSBpZSwgZmFpbHMuCisgICAgICAgICAgICAgICAgIyBTZWUgWyA4NTA5OTcgXSBtYmNzIGVuY29kaW5nIGlnbm9yZXMgZXJyb3JzCisgICAgICAgICAgICAgICAgVEVTVEZOX1VORU5DT0RBQkxFLmVuY29kZSgiTGF0aW4xIikKKyAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCBcCisgICAgICAgICAgICAgICAgJ1dBUk5JTkc6IFRoZSBmaWxlbmFtZSAlciBDQU4gYmUgZW5jb2RlZCBieSB0aGUgZmlsZXN5c3RlbS4gICcgXAorICAgICAgICAgICAgICAgICdVbmljb2RlIGZpbGVuYW1lIHRlc3RzIG1heSBub3QgYmUgZWZmZWN0aXZlJyBcCisgICAgICAgICAgICAgICAgJSBURVNURk5fVU5FTkNPREFCTEUKKworCisjIERpc2FtYmlndWF0ZSBURVNURk4gZm9yIHBhcmFsbGVsIHRlc3RpbmcsIHdoaWxlIGxldHRpbmcgaXQgcmVtYWluIGEgdmFsaWQKKyMgbW9kdWxlIG5hbWUuCitURVNURk4gPSAie31fe31fdG1wIi5mb3JtYXQoVEVTVEZOLCBvcy5nZXRwaWQoKSkKKworIyBTYXZlIHRoZSBpbml0aWFsIGN3ZAorU0FWRURDV0QgPSBvcy5nZXRjd2QoKQorCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHRlbXBfY3dkKG5hbWU9J3RlbXBjd2QnLCBxdWlldD1GYWxzZSk6CisgICAgIiIiCisgICAgQ29udGV4dCBtYW5hZ2VyIHRoYXQgY3JlYXRlcyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIHNldCBpdCBhcyBDV0QuCisKKyAgICBUaGUgbmV3IENXRCBpcyBjcmVhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgaXQncyBuYW1lZCAqbmFtZSouCisgICAgSWYgKnF1aWV0KiBpcyBGYWxzZSAoZGVmYXVsdCkgYW5kIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvciBjaGFuZ2UKKyAgICB0aGUgQ1dELCBhbiBlcnJvciBpcyByYWlzZWQuICBJZiBpdCdzIFRydWUsIG9ubHkgYSB3YXJuaW5nIGlzIHJhaXNlZAorICAgIGFuZCB0aGUgb3JpZ2luYWwgQ1dEIGlzIHVzZWQuCisgICAgIiIiCisgICAgaWYgaGF2ZV91bmljb2RlIGFuZCBpc2luc3RhbmNlKG5hbWUsIHVuaWNvZGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lID0gbmFtZS5lbmNvZGUoc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpIG9yICdhc2NpaScpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3VuYWJsZSB0byBlbmNvZGUgdGhlIGN3ZCBuYW1lIHdpdGggJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgZmlsZXN5c3RlbSBlbmNvZGluZy4nKQorICAgIHNhdmVkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgaXNfdGVtcG9yYXJ5ID0gRmFsc2UKKyAgICB0cnk6CisgICAgICAgIG9zLm1rZGlyKG5hbWUpCisgICAgICAgIG9zLmNoZGlyKG5hbWUpCisgICAgICAgIGlzX3RlbXBvcmFyeSA9IFRydWUKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgd2FybmluZ3Mud2FybigndGVzdHMgbWF5IGZhaWwsIHVuYWJsZSB0byBjaGFuZ2UgdGhlIENXRCB0byAnICsgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZywgc3RhY2tsZXZlbD0zKQorICAgIHRyeToKKyAgICAgICAgeWllbGQgb3MuZ2V0Y3dkKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jaGRpcihzYXZlZF9kaXIpCisgICAgICAgIGlmIGlzX3RlbXBvcmFyeToKKyAgICAgICAgICAgIHJtdHJlZShuYW1lKQorCisKK2RlZiBmaW5kZmlsZShmaWxlLCBoZXJlPV9fZmlsZV9fLCBzdWJkaXI9Tm9uZSk6CisgICAgIiIiVHJ5IHRvIGZpbmQgYSBmaWxlIG9uIHN5cy5wYXRoIGFuZCB0aGUgd29ya2luZyBkaXJlY3RvcnkuICBJZiBpdCBpcyBub3QKKyAgICBmb3VuZCB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiBpcyByZXR1cm5lZCAodGhpcyBkb2VzIG5vdAorICAgIG5lY2Vzc2FyaWx5IHNpZ25hbCBmYWlsdXJlOyBjb3VsZCBzdGlsbCBiZSB0aGUgbGVnaXRpbWF0ZSBwYXRoKS4iIiIKKyAgICBpZiBvcy5wYXRoLmlzYWJzKGZpbGUpOgorICAgICAgICByZXR1cm4gZmlsZQorICAgIGlmIHN1YmRpciBpcyBub3QgTm9uZToKKyAgICAgICAgZmlsZSA9IG9zLnBhdGguam9pbihzdWJkaXIsIGZpbGUpCisgICAgcGF0aCA9IHN5cy5wYXRoCisgICAgcGF0aCA9IFtvcy5wYXRoLmRpcm5hbWUoaGVyZSldICsgcGF0aAorICAgIGZvciBkbiBpbiBwYXRoOgorICAgICAgICBmbiA9IG9zLnBhdGguam9pbihkbiwgZmlsZSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZm4pOiByZXR1cm4gZm4KKyAgICByZXR1cm4gZmlsZQorCitkZWYgc29ydGRpY3QoZGljdCk6CisgICAgIkxpa2UgcmVwcihkaWN0KSwgYnV0IGluIHNvcnRlZCBvcmRlci4iCisgICAgaXRlbXMgPSBkaWN0Lml0ZW1zKCkKKyAgICBpdGVtcy5zb3J0KCkKKyAgICByZXBycGFpcnMgPSBbIiVyOiAlciIgJSBwYWlyIGZvciBwYWlyIGluIGl0ZW1zXQorICAgIHdpdGhjb21tYXMgPSAiLCAiLmpvaW4ocmVwcnBhaXJzKQorICAgIHJldHVybiAieyVzfSIgJSB3aXRoY29tbWFzCisKK2RlZiBtYWtlX2JhZF9mZCgpOgorICAgICIiIgorICAgIENyZWF0ZSBhbiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvciBieSBvcGVuaW5nIGFuZCBjbG9zaW5nIGEgZmlsZSBhbmQgcmV0dXJuCisgICAgaXRzIGZkLgorICAgICIiIgorICAgIGZpbGUgPSBvcGVuKFRFU1RGTiwgIndiIikKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBmaWxlLmZpbGVubygpCisgICAgZmluYWxseToKKyAgICAgICAgZmlsZS5jbG9zZSgpCisgICAgICAgIHVubGluayhURVNURk4pCisKK2RlZiBjaGVja19zeW50YXhfZXJyb3IodGVzdGNhc2UsIHN0YXRlbWVudCk6CisgICAgdGVzdGNhc2UuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCBzdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICc8dGVzdCBzdHJpbmc+JywgJ2V4ZWMnKQorCitkZWYgb3Blbl91cmxyZXNvdXJjZSh1cmwsIGNoZWNrPU5vbmUpOgorICAgIGltcG9ydCB1cmxwYXJzZSwgdXJsbGliMgorCisgICAgZmlsZW5hbWUgPSB1cmxwYXJzZS51cmxwYXJzZSh1cmwpWzJdLnNwbGl0KCcvJylbLTFdICMgJy8nOiBpdCdzIFVSTCEKKworICAgIGZuID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJkYXRhIiwgZmlsZW5hbWUpCisKKyAgICBkZWYgY2hlY2tfdmFsaWRfZmlsZShmbik6CisgICAgICAgIGYgPSBvcGVuKGZuKQorICAgICAgICBpZiBjaGVjayBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgZWxpZiBjaGVjayhmKToKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhmbik6CisgICAgICAgIGYgPSBjaGVja192YWxpZF9maWxlKGZuKQorICAgICAgICBpZiBmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgdW5saW5rKGZuKQorCisgICAgIyBWZXJpZnkgdGhlIHJlcXVpcmVtZW50IGJlZm9yZSBkb3dubG9hZGluZyB0aGUgZmlsZQorICAgIHJlcXVpcmVzKCd1cmxmZXRjaCcpCisKKyAgICBwcmludCA+PiBnZXRfb3JpZ2luYWxfc3Rkb3V0KCksICdcdGZldGNoaW5nICVzIC4uLicgJSB1cmwKKyAgICBmID0gdXJsbGliMi51cmxvcGVuKHVybCwgdGltZW91dD0xNSkKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmbiwgIndiIikgYXMgb3V0OgorICAgICAgICAgICAgcyA9IGYucmVhZCgpCisgICAgICAgICAgICB3aGlsZSBzOgorICAgICAgICAgICAgICAgIG91dC53cml0ZShzKQorICAgICAgICAgICAgICAgIHMgPSBmLnJlYWQoKQorICAgIGZpbmFsbHk6CisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZiA9IGNoZWNrX3ZhbGlkX2ZpbGUoZm4pCisgICAgaWYgZiBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIGYKKyAgICByYWlzZSBUZXN0RmFpbGVkKCdpbnZhbGlkIHJlc291cmNlICIlcyInICUgZm4pCisKKworY2xhc3MgV2FybmluZ3NSZWNvcmRlcihvYmplY3QpOgorICAgICIiIkNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIHRoZSB3YXJuaW5ncyBsaXN0IHJldHVybmVkIG9uCisgICAgICAgZW50cnkgdG8gdGhlIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCkgY29udGV4dCBtYW5hZ2VyLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3YXJuaW5nc19saXN0KToKKyAgICAgICAgc2VsZi5fd2FybmluZ3MgPSB3YXJuaW5nc19saXN0CisgICAgICAgIHNlbGYuX2xhc3QgPSAwCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgIGlmIGxlbihzZWxmLl93YXJuaW5ncykgPiBzZWxmLl9sYXN0OgorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fd2FybmluZ3NbLTFdLCBhdHRyKQorICAgICAgICBlbGlmIGF0dHIgaW4gd2FybmluZ3MuV2FybmluZ01lc3NhZ2UuX1dBUk5JTkdfREVUQUlMUzoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCIlciBoYXMgbm8gYXR0cmlidXRlICVyIiAlIChzZWxmLCBhdHRyKSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB3YXJuaW5ncyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dhcm5pbmdzW3NlbGYuX2xhc3Q6XQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLl9sYXN0ID0gbGVuKHNlbGYuX3dhcm5pbmdzKQorCisKK2RlZiBfZmlsdGVyd2FybmluZ3MoZmlsdGVycywgcXVpZXQ9RmFsc2UpOgorICAgICIiIkNhdGNoIHRoZSB3YXJuaW5ncywgdGhlbiBjaGVjayBpZiBhbGwgdGhlIGV4cGVjdGVkCisgICAgd2FybmluZ3MgaGF2ZSBiZWVuIHJhaXNlZCBhbmQgcmUtcmFpc2UgdW5leHBlY3RlZCB3YXJuaW5ncy4KKyAgICBJZiAncXVpZXQnIGlzIFRydWUsIG9ubHkgcmUtcmFpc2UgdGhlIHVuZXhwZWN0ZWQgd2FybmluZ3MuCisgICAgIiIiCisgICAgIyBDbGVhciB0aGUgd2FybmluZyByZWdpc3RyeSBvZiB0aGUgY2FsbGluZyBtb2R1bGUKKyAgICAjIGluIG9yZGVyIHRvIHJlLXJhaXNlIHRoZSB3YXJuaW5ncy4KKyAgICBmcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoMikKKyAgICByZWdpc3RyeSA9IGZyYW1lLmZfZ2xvYmFscy5nZXQoJ19fd2FybmluZ3JlZ2lzdHJ5X18nKQorICAgIGlmIHJlZ2lzdHJ5OgorICAgICAgICByZWdpc3RyeS5jbGVhcigpCisgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgIyBTZXQgZmlsdGVyICJhbHdheXMiIHRvIHJlY29yZCBhbGwgd2FybmluZ3MuICBCZWNhdXNlCisgICAgICAgICMgdGVzdF93YXJuaW5ncyBzd2FwIHRoZSBtb2R1bGUsIHdlIG5lZWQgdG8gbG9vayB1cCBpbgorICAgICAgICAjIHRoZSBzeXMubW9kdWxlcyBkaWN0aW9uYXJ5LgorICAgICAgICBzeXMubW9kdWxlc1snd2FybmluZ3MnXS5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCisgICAgICAgIHlpZWxkIFdhcm5pbmdzUmVjb3JkZXIodykKKyAgICAjIEZpbHRlciB0aGUgcmVjb3JkZWQgd2FybmluZ3MKKyAgICByZXJhaXNlID0gW3dhcm5pbmcubWVzc2FnZSBmb3Igd2FybmluZyBpbiB3XQorICAgIG1pc3NpbmcgPSBbXQorICAgIGZvciBtc2csIGNhdCBpbiBmaWx0ZXJzOgorICAgICAgICBzZWVuID0gRmFsc2UKKyAgICAgICAgZm9yIGV4YyBpbiByZXJhaXNlWzpdOgorICAgICAgICAgICAgbWVzc2FnZSA9IHN0cihleGMpCisgICAgICAgICAgICAjIEZpbHRlciBvdXQgdGhlIG1hdGNoaW5nIG1lc3NhZ2VzCisgICAgICAgICAgICBpZiAocmUubWF0Y2gobXNnLCBtZXNzYWdlLCByZS5JKSBhbmQKKyAgICAgICAgICAgICAgICBpc3N1YmNsYXNzKGV4Yy5fX2NsYXNzX18sIGNhdCkpOgorICAgICAgICAgICAgICAgIHNlZW4gPSBUcnVlCisgICAgICAgICAgICAgICAgcmVyYWlzZS5yZW1vdmUoZXhjKQorICAgICAgICBpZiBub3Qgc2VlbiBhbmQgbm90IHF1aWV0OgorICAgICAgICAgICAgIyBUaGlzIGZpbHRlciBjYXVnaHQgbm90aGluZworICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoKG1zZywgY2F0Ll9fbmFtZV9fKSkKKyAgICBpZiByZXJhaXNlOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigidW5oYW5kbGVkIHdhcm5pbmcgJXIiICUgcmVyYWlzZVswXSkKKyAgICBpZiBtaXNzaW5nOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiZmlsdGVyICglciwgJXMpIGRpZCBub3QgY2F0Y2ggYW55IHdhcm5pbmciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZ1swXSkKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIGNoZWNrX3dhcm5pbmdzKCpmaWx0ZXJzLCAqKmt3YXJncyk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIHNpbGVuY2Ugd2FybmluZ3MuCisKKyAgICBBY2NlcHQgMi10dXBsZXMgYXMgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICgibWVzc2FnZSByZWdleHAiLCBXYXJuaW5nQ2F0ZWdvcnkpCisKKyAgICBPcHRpb25hbCBhcmd1bWVudDoKKyAgICAgLSBpZiAncXVpZXQnIGlzIFRydWUsIGl0IGRvZXMgbm90IGZhaWwgaWYgYSBmaWx0ZXIgY2F0Y2hlcyBub3RoaW5nCisgICAgICAgIChkZWZhdWx0IFRydWUgd2l0aG91dCBhcmd1bWVudCwKKyAgICAgICAgIGRlZmF1bHQgRmFsc2UgaWYgc29tZSBmaWx0ZXJzIGFyZSBkZWZpbmVkKQorCisgICAgV2l0aG91dCBhcmd1bWVudCwgaXQgZGVmYXVsdHMgdG86CisgICAgICAgIGNoZWNrX3dhcm5pbmdzKCgiIiwgV2FybmluZyksIHF1aWV0PVRydWUpCisgICAgIiIiCisgICAgcXVpZXQgPSBrd2FyZ3MuZ2V0KCdxdWlldCcpCisgICAgaWYgbm90IGZpbHRlcnM6CisgICAgICAgIGZpbHRlcnMgPSAoKCIiLCBXYXJuaW5nKSwpCisgICAgICAgICMgUHJlc2VydmUgYmFja3dhcmQgY29tcGF0aWJpbGl0eQorICAgICAgICBpZiBxdWlldCBpcyBOb25lOgorICAgICAgICAgICAgcXVpZXQgPSBUcnVlCisgICAgcmV0dXJuIF9maWx0ZXJ3YXJuaW5ncyhmaWx0ZXJzLCBxdWlldCkKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIGNoZWNrX3B5M2tfd2FybmluZ3MoKmZpbHRlcnMsICoqa3dhcmdzKToKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gc2lsZW5jZSBweTNrIHdhcm5pbmdzLgorCisgICAgQWNjZXB0IDItdHVwbGVzIGFzIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAoIm1lc3NhZ2UgcmVnZXhwIiwgV2FybmluZ0NhdGVnb3J5KQorCisgICAgT3B0aW9uYWwgYXJndW1lbnQ6CisgICAgIC0gaWYgJ3F1aWV0JyBpcyBUcnVlLCBpdCBkb2VzIG5vdCBmYWlsIGlmIGEgZmlsdGVyIGNhdGNoZXMgbm90aGluZworICAgICAgICAoZGVmYXVsdCBGYWxzZSkKKworICAgIFdpdGhvdXQgYXJndW1lbnQsIGl0IGRlZmF1bHRzIHRvOgorICAgICAgICBjaGVja19weTNrX3dhcm5pbmdzKCgiIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwgcXVpZXQ9RmFsc2UpCisgICAgIiIiCisgICAgaWYgc3lzLnB5M2t3YXJuaW5nOgorICAgICAgICBpZiBub3QgZmlsdGVyczoKKyAgICAgICAgICAgIGZpbHRlcnMgPSAoKCIiLCBEZXByZWNhdGlvbldhcm5pbmcpLCkKKyAgICBlbHNlOgorICAgICAgICAjIEl0IHNob3VsZCBub3QgcmFpc2UgYW55IHB5M2sgd2FybmluZworICAgICAgICBmaWx0ZXJzID0gKCkKKyAgICByZXR1cm4gX2ZpbHRlcndhcm5pbmdzKGZpbHRlcnMsIGt3YXJncy5nZXQoJ3F1aWV0JykpCisKKworY2xhc3MgQ2xlYW5JbXBvcnQob2JqZWN0KToKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gZm9yY2UgaW1wb3J0IHRvIHJldHVybiBhIG5ldyBtb2R1bGUgcmVmZXJlbmNlLgorCisgICAgVGhpcyBpcyB1c2VmdWwgZm9yIHRlc3RpbmcgbW9kdWxlLWxldmVsIGJlaGF2aW91cnMsIHN1Y2ggYXMKKyAgICB0aGUgZW1pc3Npb24gb2YgYSBEZXByZWNhdGlvbldhcm5pbmcgb24gaW1wb3J0LgorCisgICAgVXNlIGxpa2UgdGhpczoKKworICAgICAgICB3aXRoIENsZWFuSW1wb3J0KCJmb28iKToKKyAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCJmb28iKSAjIG5ldyByZWZlcmVuY2UKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqbW9kdWxlX25hbWVzKToKKyAgICAgICAgc2VsZi5vcmlnaW5hbF9tb2R1bGVzID0gc3lzLm1vZHVsZXMuY29weSgpCisgICAgICAgIGZvciBtb2R1bGVfbmFtZSBpbiBtb2R1bGVfbmFtZXM6CisgICAgICAgICAgICBpZiBtb2R1bGVfbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KKyAgICAgICAgICAgICAgICAjIEl0IGlzIHBvc3NpYmxlIHRoYXQgbW9kdWxlX25hbWUgaXMganVzdCBhbiBhbGlhcyBmb3IKKyAgICAgICAgICAgICAgICAjIGFub3RoZXIgbW9kdWxlIChlLmcuIHN0dWIgZm9yIG1vZHVsZXMgcmVuYW1lZCBpbiAzLngpLgorICAgICAgICAgICAgICAgICMgSW4gdGhhdCBjYXNlLCB3ZSBhbHNvIG5lZWQgZGVsZXRlIHRoZSByZWFsIG1vZHVsZSB0byBjbGVhcgorICAgICAgICAgICAgICAgICMgdGhlIGltcG9ydCBjYWNoZS4KKyAgICAgICAgICAgICAgICBpZiBtb2R1bGUuX19uYW1lX18gIT0gbW9kdWxlX25hbWU6CisgICAgICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGUuX19uYW1lX19dCisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqaWdub3JlX2V4Yyk6CisgICAgICAgIHN5cy5tb2R1bGVzLnVwZGF0ZShzZWxmLm9yaWdpbmFsX21vZHVsZXMpCisKKworY2xhc3MgRW52aXJvbm1lbnRWYXJHdWFyZChVc2VyRGljdC5EaWN0TWl4aW4pOgorCisgICAgIiIiQ2xhc3MgdG8gaGVscCBwcm90ZWN0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBwcm9wZXJseS4gIENhbiBiZSB1c2VkIGFzCisgICAgYSBjb250ZXh0IG1hbmFnZXIuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2Vudmlyb24gPSBvcy5lbnZpcm9uCisgICAgICAgIHNlbGYuX2NoYW5nZWQgPSB7fQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGVudnZhcik6CisgICAgICAgIHJldHVybiBzZWxmLl9lbnZpcm9uW2VudnZhcl0KKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBlbnZ2YXIsIHZhbHVlKToKKyAgICAgICAgIyBSZW1lbWJlciB0aGUgaW5pdGlhbCB2YWx1ZSBvbiB0aGUgZmlyc3QgYWNjZXNzCisgICAgICAgIGlmIGVudnZhciBub3QgaW4gc2VsZi5fY2hhbmdlZDoKKyAgICAgICAgICAgIHNlbGYuX2NoYW5nZWRbZW52dmFyXSA9IHNlbGYuX2Vudmlyb24uZ2V0KGVudnZhcikKKyAgICAgICAgc2VsZi5fZW52aXJvbltlbnZ2YXJdID0gdmFsdWUKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBlbnZ2YXIpOgorICAgICAgICAjIFJlbWVtYmVyIHRoZSBpbml0aWFsIHZhbHVlIG9uIHRoZSBmaXJzdCBhY2Nlc3MKKyAgICAgICAgaWYgZW52dmFyIG5vdCBpbiBzZWxmLl9jaGFuZ2VkOgorICAgICAgICAgICAgc2VsZi5fY2hhbmdlZFtlbnZ2YXJdID0gc2VsZi5fZW52aXJvbi5nZXQoZW52dmFyKQorICAgICAgICBpZiBlbnZ2YXIgaW4gc2VsZi5fZW52aXJvbjoKKyAgICAgICAgICAgIGRlbCBzZWxmLl9lbnZpcm9uW2VudnZhcl0KKworICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZW52aXJvbi5rZXlzKCkKKworICAgIGRlZiBzZXQoc2VsZiwgZW52dmFyLCB2YWx1ZSk6CisgICAgICAgIHNlbGZbZW52dmFyXSA9IHZhbHVlCisKKyAgICBkZWYgdW5zZXQoc2VsZiwgZW52dmFyKToKKyAgICAgICAgZGVsIHNlbGZbZW52dmFyXQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqaWdub3JlX2V4Yyk6CisgICAgICAgIGZvciAoaywgdikgaW4gc2VsZi5fY2hhbmdlZC5pdGVtcygpOgorICAgICAgICAgICAgaWYgdiBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIGsgaW4gc2VsZi5fZW52aXJvbjoKKyAgICAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2Vudmlyb25ba10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZW52aXJvbltrXSA9IHYKKyAgICAgICAgb3MuZW52aXJvbiA9IHNlbGYuX2Vudmlyb24KKworCitjbGFzcyBEaXJzT25TeXNQYXRoKG9iamVjdCk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIHRlbXBvcmFyaWx5IGFkZCBkaXJlY3RvcmllcyB0byBzeXMucGF0aC4KKworICAgIFRoaXMgbWFrZXMgYSBjb3B5IG9mIHN5cy5wYXRoLCBhcHBlbmRzIGFueSBkaXJlY3RvcmllcyBnaXZlbgorICAgIGFzIHBvc2l0aW9uYWwgYXJndW1lbnRzLCB0aGVuIHJldmVydHMgc3lzLnBhdGggdG8gdGhlIGNvcGllZAorICAgIHNldHRpbmdzIHdoZW4gdGhlIGNvbnRleHQgZW5kcy4KKworICAgIE5vdGUgdGhhdCAqYWxsKiBzeXMucGF0aCBtb2RpZmljYXRpb25zIGluIHRoZSBib2R5IG9mIHRoZQorICAgIGNvbnRleHQgbWFuYWdlciwgaW5jbHVkaW5nIHJlcGxhY2VtZW50IG9mIHRoZSBvYmplY3QsCisgICAgd2lsbCBiZSByZXZlcnRlZCBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqcGF0aHMpOgorICAgICAgICBzZWxmLm9yaWdpbmFsX3ZhbHVlID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc2VsZi5vcmlnaW5hbF9vYmplY3QgPSBzeXMucGF0aAorICAgICAgICBzeXMucGF0aC5leHRlbmQocGF0aHMpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICppZ25vcmVfZXhjKToKKyAgICAgICAgc3lzLnBhdGggPSBzZWxmLm9yaWdpbmFsX29iamVjdAorICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYub3JpZ2luYWxfdmFsdWUKKworCitjbGFzcyBUcmFuc2llbnRSZXNvdXJjZShvYmplY3QpOgorCisgICAgIiIiUmFpc2UgUmVzb3VyY2VEZW5pZWQgaWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGlsZSB0aGUgY29udGV4dCBtYW5hZ2VyCisgICAgaXMgaW4gZWZmZWN0IHRoYXQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiBhbmQgYXR0cmlidXRlcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGMsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5leGMgPSBleGMKKyAgICAgICAgc2VsZi5hdHRycyA9IGt3YXJncworCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlXz1Ob25lLCB2YWx1ZT1Ob25lLCB0cmFjZWJhY2s9Tm9uZSk6CisgICAgICAgICIiIklmIHR5cGVfIGlzIGEgc3ViY2xhc3Mgb2Ygc2VsZi5leGMgYW5kIHZhbHVlIGhhcyBhdHRyaWJ1dGVzIG1hdGNoaW5nCisgICAgICAgIHNlbGYuYXR0cnMsIHJhaXNlIFJlc291cmNlRGVuaWVkLiAgT3RoZXJ3aXNlIGxldCB0aGUgZXhjZXB0aW9uCisgICAgICAgIHByb3BhZ2F0ZSAoaWYgYW55KS4iIiIKKyAgICAgICAgaWYgdHlwZV8gaXMgbm90IE5vbmUgYW5kIGlzc3ViY2xhc3Moc2VsZi5leGMsIHR5cGVfKToKKyAgICAgICAgICAgIGZvciBhdHRyLCBhdHRyX3ZhbHVlIGluIHNlbGYuYXR0cnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIodmFsdWUsIGF0dHIpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIGdldGF0dHIodmFsdWUsIGF0dHIpICE9IGF0dHJfdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFJlc291cmNlRGVuaWVkKCJhbiBvcHRpb25hbCByZXNvdXJjZSBpcyBub3QgYXZhaWxhYmxlIikKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHRyYW5zaWVudF9pbnRlcm5ldChyZXNvdXJjZV9uYW1lLCB0aW1lb3V0PTMwLjAsIGVycm5vcz0oKSk6CisgICAgIiIiUmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgcmFpc2VzIFJlc291cmNlRGVuaWVkIHdoZW4gdmFyaW91cyBpc3N1ZXMKKyAgICB3aXRoIHRoZSBJbnRlcm5ldCBjb25uZWN0aW9uIG1hbmlmZXN0IHRoZW1zZWx2ZXMgYXMgZXhjZXB0aW9ucy4iIiIKKyAgICBkZWZhdWx0X2Vycm5vcyA9IFsKKyAgICAgICAgKCdFQ09OTlJFRlVTRUQnLCAxMTEpLAorICAgICAgICAoJ0VDT05OUkVTRVQnLCAxMDQpLAorICAgICAgICAoJ0VIT1NUVU5SRUFDSCcsIDExMyksCisgICAgICAgICgnRU5FVFVOUkVBQ0gnLCAxMDEpLAorICAgICAgICAoJ0VUSU1FRE9VVCcsIDExMCksCisgICAgXQorICAgIGRlZmF1bHRfZ2FpX2Vycm5vcyA9IFsKKyAgICAgICAgKCdFQUlfQUdBSU4nLCAtMyksCisgICAgICAgICgnRUFJX0ZBSUwnLCAtNCksCisgICAgICAgICgnRUFJX05PTkFNRScsIC0yKSwKKyAgICAgICAgKCdFQUlfTk9EQVRBJywgLTUpLAorICAgICAgICAjIFdpbmRvd3MgZGVmaW5lcyBFQUlfTk9EQVRBIGFzIDExMDAxIGJ1dCBpZGlvdGljIGdldGFkZHJpbmZvKCkKKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbiBhY3R1YWxseSByZXR1cm5zIFdTQU5PX0RBVEEgaS5lLiAxMTAwNC4KKyAgICAgICAgKCdXU0FOT19EQVRBJywgMTEwMDQpLAorICAgIF0KKworICAgIGRlbmllZCA9IFJlc291cmNlRGVuaWVkKCJSZXNvdXJjZSAnJXMnIGlzIG5vdCBhdmFpbGFibGUiICUgcmVzb3VyY2VfbmFtZSkKKyAgICBjYXB0dXJlZF9lcnJub3MgPSBlcnJub3MKKyAgICBnYWlfZXJybm9zID0gW10KKyAgICBpZiBub3QgY2FwdHVyZWRfZXJybm9zOgorICAgICAgICBjYXB0dXJlZF9lcnJub3MgPSBbZ2V0YXR0cihlcnJubywgbmFtZSwgbnVtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuYW1lLCBudW0pIGluIGRlZmF1bHRfZXJybm9zXQorICAgICAgICBnYWlfZXJybm9zID0gW2dldGF0dHIoc29ja2V0LCBuYW1lLCBudW0pCisgICAgICAgICAgICAgICAgICAgICAgZm9yIChuYW1lLCBudW0pIGluIGRlZmF1bHRfZ2FpX2Vycm5vc10KKworICAgIGRlZiBmaWx0ZXJfZXJyb3IoZXJyKToKKyAgICAgICAgbiA9IGdldGF0dHIoZXJyLCAnZXJybm8nLCBOb25lKQorICAgICAgICBpZiAoaXNpbnN0YW5jZShlcnIsIHNvY2tldC50aW1lb3V0KSBvcgorICAgICAgICAgICAgKGlzaW5zdGFuY2UoZXJyLCBzb2NrZXQuZ2FpZXJyb3IpIGFuZCBuIGluIGdhaV9lcnJub3MpIG9yCisgICAgICAgICAgICBuIGluIGNhcHR1cmVkX2Vycm5vcyk6CisgICAgICAgICAgICBpZiBub3QgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGRlbmllZC5hcmdzWzBdICsgIlxuIikKKyAgICAgICAgICAgIHJhaXNlIGRlbmllZAorCisgICAgb2xkX3RpbWVvdXQgPSBzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKQorICAgIHRyeToKKyAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCh0aW1lb3V0KQorICAgICAgICB5aWVsZAorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgIyB1cmxsaWIgY2FuIHdyYXAgb3JpZ2luYWwgc29ja2V0IGVycm9ycyBtdWx0aXBsZSB0aW1lcyAoISksIHdlIG11c3QKKyAgICAgICAgIyB1bndyYXAgdG8gZ2V0IGF0IHRoZSBvcmlnaW5hbCBlcnJvci4KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGEgPSBlcnIuYXJncworICAgICAgICAgICAgaWYgbGVuKGEpID49IDEgYW5kIGlzaW5zdGFuY2UoYVswXSwgSU9FcnJvcik6CisgICAgICAgICAgICAgICAgZXJyID0gYVswXQorICAgICAgICAgICAgIyBUaGUgZXJyb3IgY2FuIGFsc28gYmUgd3JhcHBlZCBhcyBhcmdzWzFdOgorICAgICAgICAgICAgIyAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIG1zZzoKKyAgICAgICAgICAgICMgICAgICAgIHJhaXNlIElPRXJyb3IoJ3NvY2tldCBlcnJvcicsIG1zZykud2l0aF90cmFjZWJhY2soc3lzLmV4Y19pbmZvKClbMl0pCisgICAgICAgICAgICBlbGlmIGxlbihhKSA+PSAyIGFuZCBpc2luc3RhbmNlKGFbMV0sIElPRXJyb3IpOgorICAgICAgICAgICAgICAgIGVyciA9IGFbMV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmlsdGVyX2Vycm9yKGVycikKKyAgICAgICAgcmFpc2UKKyAgICAjIFhYWCBzaG91bGQgd2UgY2F0Y2ggZ2VuZXJpYyBleGNlcHRpb25zIGFuZCBsb29rIGZvciB0aGVpcgorICAgICMgX19jYXVzZV9fIG9yIF9fY29udGV4dF9fPworICAgIGZpbmFsbHk6CisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChvbGRfdGltZW91dCkKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIGNhcHR1cmVkX291dHB1dChzdHJlYW1fbmFtZSk6CisgICAgIiIiUmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHVzZWQgYnkgY2FwdHVyZWRfc3Rkb3V0IGFuZCBjYXB0dXJlZF9zdGRpbgorICAgIHRoYXQgdGVtcG9yYXJpbHkgcmVwbGFjZXMgdGhlIHN5cyBzdHJlYW0gKnN0cmVhbV9uYW1lKiB3aXRoIGEgU3RyaW5nSU8uIiIiCisgICAgaW1wb3J0IFN0cmluZ0lPCisgICAgb3JpZ19zdGRvdXQgPSBnZXRhdHRyKHN5cywgc3RyZWFtX25hbWUpCisgICAgc2V0YXR0cihzeXMsIHN0cmVhbV9uYW1lLCBTdHJpbmdJTy5TdHJpbmdJTygpKQorICAgIHRyeToKKyAgICAgICAgeWllbGQgZ2V0YXR0cihzeXMsIHN0cmVhbV9uYW1lKQorICAgIGZpbmFsbHk6CisgICAgICAgIHNldGF0dHIoc3lzLCBzdHJlYW1fbmFtZSwgb3JpZ19zdGRvdXQpCisKK2RlZiBjYXB0dXJlZF9zdGRvdXQoKToKKyAgICAiIiJDYXB0dXJlIHRoZSBvdXRwdXQgb2Ygc3lzLnN0ZG91dDoKKworICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgczoKKyAgICAgICAgICAgcHJpbnQgImhlbGxvIgorICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCAiaGVsbG8iKQorICAgICIiIgorICAgIHJldHVybiBjYXB0dXJlZF9vdXRwdXQoInN0ZG91dCIpCisKK2RlZiBjYXB0dXJlZF9zdGRlcnIoKToKKyAgICByZXR1cm4gY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKQorCitkZWYgY2FwdHVyZWRfc3RkaW4oKToKKyAgICByZXR1cm4gY2FwdHVyZWRfb3V0cHV0KCJzdGRpbiIpCisKK2RlZiBnY19jb2xsZWN0KCk6CisgICAgIiIiRm9yY2UgYXMgbWFueSBvYmplY3RzIGFzIHBvc3NpYmxlIHRvIGJlIGNvbGxlY3RlZC4KKworICAgIEluIG5vbi1DUHl0aG9uIGltcGxlbWVudGF0aW9ucyBvZiBQeXRob24sIHRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGltZWx5CisgICAgZGVhbGxvY2F0aW9uIGlzIG5vdCBndWFyYW50ZWVkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gIChFdmVuIGluIENQeXRob24KKyAgICB0aGlzIGNhbiBiZSB0aGUgY2FzZSBpbiBjYXNlIG9mIHJlZmVyZW5jZSBjeWNsZXMuKSAgVGhpcyBtZWFucyB0aGF0IF9fZGVsX18KKyAgICBtZXRob2RzIG1heSBiZSBjYWxsZWQgbGF0ZXIgdGhhbiBleHBlY3RlZCBhbmQgd2Vha3JlZnMgbWF5IHJlbWFpbiBhbGl2ZSBmb3IKKyAgICBsb25nZXIgdGhhbiBleHBlY3RlZC4gIFRoaXMgZnVuY3Rpb24gdHJpZXMgaXRzIGJlc3QgdG8gZm9yY2UgYWxsIGdhcmJhZ2UKKyAgICBvYmplY3RzIHRvIGRpc2FwcGVhci4KKyAgICAiIiIKKyAgICBnYy5jb2xsZWN0KCkKKyAgICBpZiBpc19qeXRob246CisgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgIGdjLmNvbGxlY3QoKQorICAgIGdjLmNvbGxlY3QoKQorCisKK19oZWFkZXIgPSAnMlAnCitpZiBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICBfaGVhZGVyID0gJzJQJyArIF9oZWFkZXIKK192aGVhZGVyID0gX2hlYWRlciArICdQJworCitkZWYgY2FsY29ianNpemUoZm10KToKKyAgICByZXR1cm4gc3RydWN0LmNhbGNzaXplKF9oZWFkZXIgKyBmbXQgKyAnMFAnKQorCitkZWYgY2FsY3ZvYmpzaXplKGZtdCk6CisgICAgcmV0dXJuIHN0cnVjdC5jYWxjc2l6ZShfdmhlYWRlciArIGZtdCArICcwUCcpCisKKworX1RQRkxBR1NfSEFWRV9HQyA9IDE8PDE0CitfVFBGTEFHU19IRUFQVFlQRSA9IDE8PDkKKworZGVmIGNoZWNrX3NpemVvZih0ZXN0LCBvLCBzaXplKToKKyAgICByZXN1bHQgPSBzeXMuZ2V0c2l6ZW9mKG8pCisgICAgIyBhZGQgR0MgaGVhZGVyIHNpemUKKyAgICBpZiAoKHR5cGUobykgPT0gdHlwZSkgYW5kIChvLl9fZmxhZ3NfXyAmIF9UUEZMQUdTX0hFQVBUWVBFKSBvclwKKyAgICAgICAgKCh0eXBlKG8pICE9IHR5cGUpIGFuZCAodHlwZShvKS5fX2ZsYWdzX18gJiBfVFBGTEFHU19IQVZFX0dDKSkpOgorICAgICAgICBzaXplICs9IF90ZXN0Y2FwaS5TSVpFT0ZfUFlHQ19IRUFECisgICAgbXNnID0gJ3dyb25nIHNpemUgZm9yICVzOiBnb3QgJWQsIGV4cGVjdGVkICVkJyBcCisgICAgICAgICAgICAlICh0eXBlKG8pLCByZXN1bHQsIHNpemUpCisgICAgdGVzdC5hc3NlcnRFcXVhbChyZXN1bHQsIHNpemUsIG1zZykKKworCisjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgRGVjb3JhdG9yIGZvciBydW5uaW5nIGEgZnVuY3Rpb24gaW4gYSBkaWZmZXJlbnQgbG9jYWxlLCBjb3JyZWN0bHkgcmVzZXR0aW5nCisjIGl0IGFmdGVyd2FyZHMuCisKK2RlZiBydW5fd2l0aF9sb2NhbGUoY2F0c3RyLCAqbG9jYWxlcyk6CisgICAgZGVmIGRlY29yYXRvcihmdW5jKToKKyAgICAgICAgZGVmIGlubmVyKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBsb2NhbGUKKyAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IGdldGF0dHIobG9jYWxlLCBjYXRzdHIpCisgICAgICAgICAgICAgICAgb3JpZ19sb2NhbGUgPSBsb2NhbGUuc2V0bG9jYWxlKGNhdGVnb3J5KQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICMgaWYgdGhlIHRlc3QgYXV0aG9yIGdpdmVzIHVzIGFuIGludmFsaWQgY2F0ZWdvcnkgc3RyaW5nCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAjIGNhbm5vdCByZXRyaWV2ZSBvcmlnaW5hbCBsb2NhbGUsIHNvIGRvIG5vdGhpbmcKKyAgICAgICAgICAgICAgICBsb2NhbGUgPSBvcmlnX2xvY2FsZSA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIGxvYyBpbiBsb2NhbGVzOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGNhdGVnb3J5LCBsb2MpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICMgbm93IHJ1biB0aGUgZnVuY3Rpb24sIHJlc2V0dGluZyB0aGUgbG9jYWxlIG9uIGV4Y2VwdGlvbnMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2RzKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBpZiBsb2NhbGUgYW5kIG9yaWdfbG9jYWxlOgorICAgICAgICAgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGNhdGVnb3J5LCBvcmlnX2xvY2FsZSkKKyAgICAgICAgaW5uZXIuZnVuY19uYW1lID0gZnVuYy5mdW5jX25hbWUKKyAgICAgICAgaW5uZXIuX19kb2NfXyA9IGZ1bmMuX19kb2NfXworICAgICAgICByZXR1cm4gaW5uZXIKKyAgICByZXR1cm4gZGVjb3JhdG9yCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBCaWctbWVtb3J5LXRlc3Qgc3VwcG9ydC4gU2VwYXJhdGUgZnJvbSAncmVzb3VyY2VzJyBiZWNhdXNlIG1lbW9yeSB1c2Ugc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZS4KKworIyBTb21lIGhhbmR5IHNob3J0aGFuZHMuIE5vdGUgdGhhdCB0aGVzZSBhcmUgdXNlZCBmb3IgYnl0ZS1saW1pdHMgYXMgd2VsbAorIyBhcyBzaXplLWxpbWl0cywgaW4gdGhlIHZhcmlvdXMgYmlnbWVtIHRlc3RzCitfMU0gPSAxMDI0KjEwMjQKK18xRyA9IDEwMjQgKiBfMU0KK18yRyA9IDIgKiBfMUcKK180RyA9IDQgKiBfMUcKKworTUFYX1B5X3NzaXplX3QgPSBzeXMubWF4c2l6ZQorCitkZWYgc2V0X21lbWxpbWl0KGxpbWl0KToKKyAgICBnbG9iYWwgbWF4X21lbXVzZQorICAgIGdsb2JhbCByZWFsX21heF9tZW11c2UKKyAgICBzaXplcyA9IHsKKyAgICAgICAgJ2snOiAxMDI0LAorICAgICAgICAnbSc6IF8xTSwKKyAgICAgICAgJ2cnOiBfMUcsCisgICAgICAgICd0JzogMTAyNCpfMUcsCisgICAgfQorICAgIG0gPSByZS5tYXRjaChyJyhcZCsoXC5cZCspPykgKEt8TXxHfFQpYj8kJywgbGltaXQsCisgICAgICAgICAgICAgICAgIHJlLklHTk9SRUNBU0UgfCByZS5WRVJCT1NFKQorICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBtZW1vcnkgbGltaXQgJXInICUgKGxpbWl0LCkpCisgICAgbWVtbGltaXQgPSBpbnQoZmxvYXQobS5ncm91cCgxKSkgKiBzaXplc1ttLmdyb3VwKDMpLmxvd2VyKCldKQorICAgIHJlYWxfbWF4X21lbXVzZSA9IG1lbWxpbWl0CisgICAgaWYgbWVtbGltaXQgPiBNQVhfUHlfc3NpemVfdDoKKyAgICAgICAgbWVtbGltaXQgPSBNQVhfUHlfc3NpemVfdAorICAgIGlmIG1lbWxpbWl0IDwgXzJHIC0gMToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTWVtb3J5IGxpbWl0ICVyIHRvbyBsb3cgdG8gYmUgdXNlZnVsJyAlIChsaW1pdCwpKQorICAgIG1heF9tZW11c2UgPSBtZW1saW1pdAorCitkZWYgYmlnbWVtdGVzdChtaW5zaXplLCBtZW11c2UsIG92ZXJoZWFkPTUqXzFNKToKKyAgICAiIiJEZWNvcmF0b3IgZm9yIGJpZ21lbSB0ZXN0cy4KKworICAgICdtaW5zaXplJyBpcyB0aGUgbWluaW11bSB1c2VmdWwgc2l6ZSBmb3IgdGhlIHRlc3QgKGluIGFyYml0cmFyeSwKKyAgICB0ZXN0LWludGVycHJldGVkIHVuaXRzLikgJ21lbXVzZScgaXMgdGhlIG51bWJlciBvZiAnYnl0ZXMgcGVyIHNpemUnIGZvcgorICAgIHRoZSB0ZXN0LCBvciBhIGdvb2QgZXN0aW1hdGUgb2YgaXQuICdvdmVyaGVhZCcgc3BlY2lmaWVzIGZpeGVkIG92ZXJoZWFkLAorICAgIGluZGVwZW5kZW50IG9mIHRoZSB0ZXN0c2l6ZSwgYW5kIGRlZmF1bHRzIHRvIDVNYi4KKworICAgIFRoZSBkZWNvcmF0b3IgdHJpZXMgdG8gZ3Vlc3MgYSBnb29kIHZhbHVlIGZvciAnc2l6ZScgYW5kIHBhc3NlcyBpdCB0bworICAgIHRoZSBkZWNvcmF0ZWQgdGVzdCBmdW5jdGlvbi4gSWYgbWluc2l6ZSAqIG1lbXVzZSBpcyBtb3JlIHRoYW4gdGhlCisgICAgYWxsb3dlZCBtZW1vcnkgdXNlIChhcyBkZWZpbmVkIGJ5IG1heF9tZW11c2UpLCB0aGUgdGVzdCBpcyBza2lwcGVkLgorICAgIE90aGVyd2lzZSwgbWluc2l6ZSBpcyBhZGp1c3RlZCB1cHdhcmQgdG8gdXNlIHVwIHRvIG1heF9tZW11c2UuCisgICAgIiIiCisgICAgZGVmIGRlY29yYXRvcihmKToKKyAgICAgICAgZGVmIHdyYXBwZXIoc2VsZik6CisgICAgICAgICAgICBpZiBub3QgbWF4X21lbXVzZToKKyAgICAgICAgICAgICAgICAjIElmIG1heF9tZW11c2UgaXMgMCAodGhlIGRlZmF1bHQpLAorICAgICAgICAgICAgICAgICMgd2Ugc3RpbGwgd2FudCB0byBydW4gdGhlIHRlc3RzIHdpdGggc2l6ZSBzZXQgdG8gYSBmZXcga2IsCisgICAgICAgICAgICAgICAgIyB0byBtYWtlIHN1cmUgdGhleSB3b3JrLiBXZSBzdGlsbCB3YW50IHRvIGF2b2lkIHVzaW5nCisgICAgICAgICAgICAgICAgIyB0b28gbXVjaCBtZW1vcnksIHRob3VnaCwgYnV0IHdlIGRvIHRoYXQgbm9pc2lseS4KKyAgICAgICAgICAgICAgICBtYXhzaXplID0gNTE0NworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF4c2l6ZSAqIG1lbXVzZSArIG92ZXJoZWFkID4gMjAgKiBfMU0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1heHNpemUgPSBpbnQoKG1heF9tZW11c2UgLSBvdmVyaGVhZCkgLyBtZW11c2UpCisgICAgICAgICAgICAgICAgaWYgbWF4c2l6ZSA8IG1pbnNpemU6CisgICAgICAgICAgICAgICAgICAgICMgUmVhbGx5IG91Z2h0IHRvIHByaW50ICd0ZXN0IHNraXBwZWQnIG9yIHNvbWV0aGluZworICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiU2tpcHBpbmcgJXMgYmVjYXVzZSBvZiBtZW1vcnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uc3RyYWludFxuIiAlIChmLl9fbmFtZV9fLCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICMgVHJ5IHRvIGtlZXAgc29tZSBicmVhdGhpbmcgcm9vbSBpbiBtZW1vcnkgdXNlCisgICAgICAgICAgICAgICAgbWF4c2l6ZSA9IG1heChtYXhzaXplIC0gNTAgKiBfMU0sIG1pbnNpemUpCisgICAgICAgICAgICByZXR1cm4gZihzZWxmLCBtYXhzaXplKQorICAgICAgICB3cmFwcGVyLm1pbnNpemUgPSBtaW5zaXplCisgICAgICAgIHdyYXBwZXIubWVtdXNlID0gbWVtdXNlCisgICAgICAgIHdyYXBwZXIub3ZlcmhlYWQgPSBvdmVyaGVhZAorICAgICAgICByZXR1cm4gd3JhcHBlcgorICAgIHJldHVybiBkZWNvcmF0b3IKKworZGVmIHByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZSwgbWVtdXNlLCBvdmVyaGVhZD01Kl8xTSwgZHJ5X3J1bj1UcnVlKToKKyAgICBkZWYgZGVjb3JhdG9yKGYpOgorICAgICAgICBkZWYgd3JhcHBlcihzZWxmKToKKyAgICAgICAgICAgIGlmIG5vdCByZWFsX21heF9tZW11c2U6CisgICAgICAgICAgICAgICAgbWF4c2l6ZSA9IDUxNDcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWF4c2l6ZSA9IHNpemUKKworICAgICAgICAgICAgaWYgKChyZWFsX21heF9tZW11c2Ugb3Igbm90IGRyeV9ydW4pCisgICAgICAgICAgICAgICAgYW5kIHJlYWxfbWF4X21lbXVzZSA8IG1heHNpemUgKiBtZW11c2UpOgorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlNraXBwaW5nICVzIGJlY2F1c2Ugb2YgbWVtb3J5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uc3RyYWludFxuIiAlIChmLl9fbmFtZV9fLCkpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIHJldHVybiBmKHNlbGYsIG1heHNpemUpCisgICAgICAgIHdyYXBwZXIuc2l6ZSA9IHNpemUKKyAgICAgICAgd3JhcHBlci5tZW11c2UgPSBtZW11c2UKKyAgICAgICAgd3JhcHBlci5vdmVyaGVhZCA9IG92ZXJoZWFkCisgICAgICAgIHJldHVybiB3cmFwcGVyCisgICAgcmV0dXJuIGRlY29yYXRvcgorCitkZWYgYmlnYWRkcnNwYWNldGVzdChmKToKKyAgICAiIiJEZWNvcmF0b3IgZm9yIHRlc3RzIHRoYXQgZmlsbCB0aGUgYWRkcmVzcyBzcGFjZS4iIiIKKyAgICBkZWYgd3JhcHBlcihzZWxmKToKKyAgICAgICAgaWYgbWF4X21lbXVzZSA8IE1BWF9QeV9zc2l6ZV90OgorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJTa2lwcGluZyAlcyBiZWNhdXNlIG9mIG1lbW9yeSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uc3RyYWludFxuIiAlIChmLl9fbmFtZV9fLCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gZihzZWxmKQorICAgIHJldHVybiB3cmFwcGVyCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyB1bml0dGVzdCBpbnRlZ3JhdGlvbi4KKworY2xhc3MgQmFzaWNUZXN0UnVubmVyOgorICAgIGRlZiBydW4oc2VsZiwgdGVzdCk6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB0ZXN0KHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgX2lkKG9iaik6CisgICAgcmV0dXJuIG9iagorCitkZWYgcmVxdWlyZXNfcmVzb3VyY2UocmVzb3VyY2UpOgorICAgIGlmIGlzX3Jlc291cmNlX2VuYWJsZWQocmVzb3VyY2UpOgorICAgICAgICByZXR1cm4gX2lkCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHVuaXR0ZXN0LnNraXAoInJlc291cmNlIHswIXJ9IGlzIG5vdCBlbmFibGVkIi5mb3JtYXQocmVzb3VyY2UpKQorCitkZWYgY3B5dGhvbl9vbmx5KHRlc3QpOgorICAgICIiIgorICAgIERlY29yYXRvciBmb3IgdGVzdHMgb25seSBhcHBsaWNhYmxlIG9uIENQeXRob24uCisgICAgIiIiCisgICAgcmV0dXJuIGltcGxfZGV0YWlsKGNweXRob249VHJ1ZSkodGVzdCkKKworZGVmIGltcGxfZGV0YWlsKG1zZz1Ob25lLCAqKmd1YXJkcyk6CisgICAgaWYgY2hlY2tfaW1wbF9kZXRhaWwoKipndWFyZHMpOgorICAgICAgICByZXR1cm4gX2lkCisgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgIGd1YXJkbmFtZXMsIGRlZmF1bHQgPSBfcGFyc2VfZ3VhcmRzKGd1YXJkcykKKyAgICAgICAgaWYgZGVmYXVsdDoKKyAgICAgICAgICAgIG1zZyA9ICJpbXBsZW1lbnRhdGlvbiBkZXRhaWwgbm90IGF2YWlsYWJsZSBvbiB7MH0iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgPSAiaW1wbGVtZW50YXRpb24gZGV0YWlsIHNwZWNpZmljIHRvIHswfSIKKyAgICAgICAgZ3VhcmRuYW1lcyA9IHNvcnRlZChndWFyZG5hbWVzLmtleXMoKSkKKyAgICAgICAgbXNnID0gbXNnLmZvcm1hdCgnIG9yICcuam9pbihndWFyZG5hbWVzKSkKKyAgICByZXR1cm4gdW5pdHRlc3Quc2tpcChtc2cpCisKK2RlZiBfcGFyc2VfZ3VhcmRzKGd1YXJkcyk6CisgICAgIyBSZXR1cm5zIGEgdHVwbGUgKHtwbGF0Zm9ybV9uYW1lOiBydW5fbWV9LCBkZWZhdWx0X3ZhbHVlKQorICAgIGlmIG5vdCBndWFyZHM6CisgICAgICAgIHJldHVybiAoeydjcHl0aG9uJzogVHJ1ZX0sIEZhbHNlKQorICAgIGlzX3RydWUgPSBndWFyZHMudmFsdWVzKClbMF0KKyAgICBhc3NlcnQgZ3VhcmRzLnZhbHVlcygpID09IFtpc190cnVlXSAqIGxlbihndWFyZHMpICAgIyBhbGwgVHJ1ZSBvciBhbGwgRmFsc2UKKyAgICByZXR1cm4gKGd1YXJkcywgbm90IGlzX3RydWUpCisKKyMgVXNlIHRoZSBmb2xsb3dpbmcgY2hlY2sgdG8gZ3VhcmQgQ1B5dGhvbidzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHRlc3RzIC0tCisjIG9yIHRvIHJ1biB0aGVtIG9ubHkgb24gdGhlIGltcGxlbWVudGF0aW9uKHMpIGd1YXJkZWQgYnkgdGhlIGFyZ3VtZW50cy4KK2RlZiBjaGVja19pbXBsX2RldGFpbCgqKmd1YXJkcyk6CisgICAgIiIiVGhpcyBmdW5jdGlvbiByZXR1cm5zIFRydWUgb3IgRmFsc2UgZGVwZW5kaW5nIG9uIHRoZSBob3N0IHBsYXRmb3JtLgorICAgICAgIEV4YW1wbGVzOgorICAgICAgICAgIGlmIGNoZWNrX2ltcGxfZGV0YWlsKCk6ICAgICAgICAgICAgICAgIyBvbmx5IG9uIENQeXRob24gKGRlZmF1bHQpCisgICAgICAgICAgaWYgY2hlY2tfaW1wbF9kZXRhaWwoanl0aG9uPVRydWUpOiAgICAjIG9ubHkgb24gSnl0aG9uCisgICAgICAgICAgaWYgY2hlY2tfaW1wbF9kZXRhaWwoY3B5dGhvbj1GYWxzZSk6ICAjIGV2ZXJ5d2hlcmUgZXhjZXB0IG9uIENQeXRob24KKyAgICAiIiIKKyAgICBndWFyZHMsIGRlZmF1bHQgPSBfcGFyc2VfZ3VhcmRzKGd1YXJkcykKKyAgICByZXR1cm4gZ3VhcmRzLmdldChwbGF0Zm9ybS5weXRob25faW1wbGVtZW50YXRpb24oKS5sb3dlcigpLCBkZWZhdWx0KQorCisKKworZGVmIF9ydW5fc3VpdGUoc3VpdGUpOgorICAgICIiIlJ1biB0ZXN0cyBmcm9tIGEgdW5pdHRlc3QuVGVzdFN1aXRlLWRlcml2ZWQgY2xhc3MuIiIiCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoc3lzLnN0ZG91dCwgdmVyYm9zaXR5PTIpCisgICAgZWxzZToKKyAgICAgICAgcnVubmVyID0gQmFzaWNUZXN0UnVubmVyKCkKKworICAgIHJlc3VsdCA9IHJ1bm5lci5ydW4oc3VpdGUpCisgICAgaWYgbm90IHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6CisgICAgICAgIGlmIGxlbihyZXN1bHQuZXJyb3JzKSA9PSAxIGFuZCBub3QgcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAgICAgZXJyID0gcmVzdWx0LmVycm9yc1swXVsxXQorICAgICAgICBlbGlmIGxlbihyZXN1bHQuZmFpbHVyZXMpID09IDEgYW5kIG5vdCByZXN1bHQuZXJyb3JzOgorICAgICAgICAgICAgZXJyID0gcmVzdWx0LmZhaWx1cmVzWzBdWzFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlcnIgPSAibXVsdGlwbGUgZXJyb3JzIG9jY3VycmVkIgorICAgICAgICAgICAgaWYgbm90IHZlcmJvc2U6CisgICAgICAgICAgICAgICAgZXJyICs9ICI7IHJ1biBpbiB2ZXJib3NlIG1vZGUgZm9yIGRldGFpbHMiCisgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQoZXJyKQorCisKK2RlZiBydW5fdW5pdHRlc3QoKmNsYXNzZXMpOgorICAgICIiIlJ1biB0ZXN0cyBmcm9tIHVuaXR0ZXN0LlRlc3RDYXNlLWRlcml2ZWQgY2xhc3Nlcy4iIiIKKyAgICB2YWxpZF90eXBlcyA9ICh1bml0dGVzdC5UZXN0U3VpdGUsIHVuaXR0ZXN0LlRlc3RDYXNlKQorICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBmb3IgY2xzIGluIGNsYXNzZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoY2xzLCBzdHIpOgorICAgICAgICAgICAgaWYgY2xzIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QuZmluZFRlc3RDYXNlcyhzeXMubW9kdWxlc1tjbHNdKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic3RyIGFyZ3VtZW50cyBtdXN0IGJlIGtleXMgaW4gc3lzLm1vZHVsZXMiKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoY2xzLCB2YWxpZF90eXBlcyk6CisgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KGNscykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKGNscykpCisgICAgX3J1bl9zdWl0ZShzdWl0ZSkKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIENoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgZG9jc3RyaW5ncy4KKworSEFWRV9ET0NTVFJJTkdTID0gKGNoZWNrX2ltcGxfZGV0YWlsKGNweXRob249RmFsc2UpIG9yCisgICAgICAgICAgICAgICAgICAgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3IKKyAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1dJVEhfRE9DX1NUUklOR1MnKSkKKworcmVxdWlyZXNfZG9jc3RyaW5ncyA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisKKworIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIGRvY3Rlc3QgZHJpdmVyLgorCitkZWYgcnVuX2RvY3Rlc3QobW9kdWxlLCB2ZXJib3NpdHk9Tm9uZSk6CisgICAgIiIiUnVuIGRvY3Rlc3Qgb24gdGhlIGdpdmVuIG1vZHVsZS4gIFJldHVybiAoI2ZhaWx1cmVzLCAjdGVzdHMpLgorCisgICAgSWYgb3B0aW9uYWwgYXJndW1lbnQgdmVyYm9zaXR5IGlzIG5vdCBzcGVjaWZpZWQgKG9yIGlzIE5vbmUpLCBwYXNzCisgICAgdGVzdF9zdXBwb3J0J3MgYmVsaWVmIGFib3V0IHZlcmJvc2l0eSBvbiB0byBkb2N0ZXN0LiAgRWxzZSBkb2N0ZXN0J3MKKyAgICB1c3VhbCBiZWhhdmlvciBpcyB1c2VkIChpdCBzZWFyY2hlcyBzeXMuYXJndiBmb3IgLXYpLgorICAgICIiIgorCisgICAgaW1wb3J0IGRvY3Rlc3QKKworICAgIGlmIHZlcmJvc2l0eSBpcyBOb25lOgorICAgICAgICB2ZXJib3NpdHkgPSB2ZXJib3NlCisgICAgZWxzZToKKyAgICAgICAgdmVyYm9zaXR5ID0gTm9uZQorCisgICAgIyBEaXJlY3QgZG9jdGVzdCBvdXRwdXQgKG5vcm1hbGx5IGp1c3QgZXJyb3JzKSB0byByZWFsIHN0ZG91dDsgZG9jdGVzdAorICAgICMgb3V0cHV0IHNob3VsZG4ndCBiZSBjb21wYXJlZCBieSByZWdydGVzdC4KKyAgICBzYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICBzeXMuc3Rkb3V0ID0gZ2V0X29yaWdpbmFsX3N0ZG91dCgpCisgICAgdHJ5OgorICAgICAgICBmLCB0ID0gZG9jdGVzdC50ZXN0bW9kKG1vZHVsZSwgdmVyYm9zZT12ZXJib3NpdHkpCisgICAgICAgIGlmIGY6CisgICAgICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCIlZCBvZiAlZCBkb2N0ZXN0cyBmYWlsZWQiICUgKGYsIHQpKQorICAgIGZpbmFsbHk6CisgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlX3N0ZG91dAorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdkb2N0ZXN0ICglcykgLi4uICVkIHRlc3RzIHdpdGggemVybyBmYWlsdXJlcycgJSAobW9kdWxlLl9fbmFtZV9fLCB0KQorICAgIHJldHVybiBmLCB0CisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUaHJlYWRpbmcgc3VwcG9ydCB0byBwcmV2ZW50IHJlcG9ydGluZyByZWZsZWFrcyB3aGVuIHJ1bm5pbmcgcmVncnRlc3QucHkgLVIKKworIyBOT1RFOiB3ZSB1c2UgdGhyZWFkLl9jb3VudCgpIHJhdGhlciB0aGFuIHRocmVhZGluZy5lbnVtZXJhdGUoKSAob3IgdGhlCisjIG1vcmFsIGVxdWl2YWxlbnQgdGhlcmVvZikgYmVjYXVzZSBhIHRocmVhZGluZy5UaHJlYWQgb2JqZWN0IGlzIHN0aWxsIGFsaXZlCisjIHVudGlsIGl0cyBfX2Jvb3RzdHJhcCgpIG1ldGhvZCBoYXMgcmV0dXJuZWQsIGV2ZW4gYWZ0ZXIgaXQgaGFzIGJlZW4KKyMgdW5yZWdpc3RlcmVkIGZyb20gdGhlIHRocmVhZGluZyBtb2R1bGUuCisjIHRocmVhZC5fY291bnQoKSwgb24gdGhlIG90aGVyIGhhbmQsIG9ubHkgZ2V0cyBkZWNyZW1lbnRlZCAqYWZ0ZXIqIHRoZQorIyBfX2Jvb3RzdHJhcCgpIG1ldGhvZCBoYXMgcmV0dXJuZWQsIHdoaWNoIGdpdmVzIHVzIHJlbGlhYmxlIHJlZmVyZW5jZSBjb3VudHMKKyMgYXQgdGhlIGVuZCBvZiBhIHRlc3QgcnVuLgorCitkZWYgdGhyZWFkaW5nX3NldHVwKCk6CisgICAgaWYgdGhyZWFkOgorICAgICAgICByZXR1cm4gdGhyZWFkLl9jb3VudCgpLAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAxLAorCitkZWYgdGhyZWFkaW5nX2NsZWFudXAobmJfdGhyZWFkcyk6CisgICAgaWYgbm90IHRocmVhZDoKKyAgICAgICAgcmV0dXJuCisKKyAgICBfTUFYX0NPVU5UID0gMTAKKyAgICBmb3IgY291bnQgaW4gcmFuZ2UoX01BWF9DT1VOVCk6CisgICAgICAgIG4gPSB0aHJlYWQuX2NvdW50KCkKKyAgICAgICAgaWYgbiA9PSBuYl90aHJlYWRzOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgIyBYWFggcHJpbnQgYSB3YXJuaW5nIGluIGNhc2Ugb2YgZmFpbHVyZT8KKworZGVmIHJlYXBfdGhyZWFkcyhmdW5jKToKKyAgICAiIiJVc2UgdGhpcyBmdW5jdGlvbiB3aGVuIHRocmVhZHMgYXJlIGJlaW5nIHVzZWQuICBUaGlzIHdpbGwKKyAgICBlbnN1cmUgdGhhdCB0aGUgdGhyZWFkcyBhcmUgY2xlYW5lZCB1cCBldmVuIHdoZW4gdGhlIHRlc3QgZmFpbHMuCisgICAgSWYgdGhyZWFkaW5nIGlzIHVuYXZhaWxhYmxlIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLgorICAgICIiIgorICAgIGlmIG5vdCB0aHJlYWQ6CisgICAgICAgIHJldHVybiBmdW5jCisKKyAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCisgICAgZGVmIGRlY29yYXRvcigqYXJncyk6CisgICAgICAgIGtleSA9IHRocmVhZGluZ19zZXR1cCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGhyZWFkaW5nX2NsZWFudXAoKmtleSkKKyAgICByZXR1cm4gZGVjb3JhdG9yCisKK2RlZiByZWFwX2NoaWxkcmVuKCk6CisgICAgIiIiVXNlIHRoaXMgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiB0ZXN0X21haW4oKSB3aGVuZXZlciBzdWItcHJvY2Vzc2VzCisgICAgYXJlIHN0YXJ0ZWQuICBUaGlzIHdpbGwgaGVscCBlbnN1cmUgdGhhdCBubyBleHRyYSBjaGlsZHJlbiAoem9tYmllcykKKyAgICBzdGljayBhcm91bmQgdG8gaG9nIHJlc291cmNlcyBhbmQgY3JlYXRlIHByb2JsZW1zIHdoZW4gbG9va2luZworICAgIGZvciByZWZsZWFrcy4KKyAgICAiIiIKKworICAgICMgUmVhcCBhbGwgb3VyIGRlYWQgY2hpbGQgcHJvY2Vzc2VzIHNvIHdlIGRvbid0IGxlYXZlIHpvbWJpZXMgYXJvdW5kLgorICAgICMgVGhlc2UgaG9nIHJlc291cmNlcyBhbmQgbWlnaHQgYmUgY2F1c2luZyBzb21lIG9mIHRoZSBidWlsZGJvdHMgdG8gZGllLgorICAgIGlmIGhhc2F0dHIob3MsICd3YWl0cGlkJyk6CisgICAgICAgIGFueV9wcm9jZXNzID0gLTEKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIFRoaXMgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gb24gV2luZG93cy4gIFRoYXQncyBvay4KKyAgICAgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoYW55X3Byb2Nlc3MsIG9zLldOT0hBTkcpCisgICAgICAgICAgICAgICAgaWYgcGlkID09IDA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBzd2FwX2F0dHIob2JqLCBhdHRyLCBuZXdfdmFsKToKKyAgICAiIiJUZW1wb3Jhcnkgc3dhcCBvdXQgYW4gYXR0cmlidXRlIHdpdGggYSBuZXcgb2JqZWN0LgorCisgICAgVXNhZ2U6CisgICAgICAgIHdpdGggc3dhcF9hdHRyKG9iaiwgImF0dHIiLCA1KToKKyAgICAgICAgICAgIC4uLgorCisgICAgICAgIFRoaXMgd2lsbCBzZXQgb2JqLmF0dHIgdG8gNSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB3aXRoOiBibG9jaywKKyAgICAgICAgcmVzdG9yaW5nIHRoZSBvbGQgdmFsdWUgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2suIElmIGBhdHRyYCBkb2Vzbid0CisgICAgICAgIGV4aXN0IG9uIGBvYmpgLCBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIHRoZW4gZGVsZXRlZCBhdCB0aGUgZW5kIG9mIHRoZQorICAgICAgICBibG9jay4KKyAgICAiIiIKKyAgICBpZiBoYXNhdHRyKG9iaiwgYXR0cik6CisgICAgICAgIHJlYWxfdmFsID0gZ2V0YXR0cihvYmosIGF0dHIpCisgICAgICAgIHNldGF0dHIob2JqLCBhdHRyLCBuZXdfdmFsKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2V0YXR0cihvYmosIGF0dHIsIHJlYWxfdmFsKQorICAgIGVsc2U6CisgICAgICAgIHNldGF0dHIob2JqLCBhdHRyLCBuZXdfdmFsKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsYXR0cihvYmosIGF0dHIpCisKK2RlZiBweTNrX2J5dGVzKGIpOgorICAgICIiIkVtdWxhdGUgdGhlIHB5M2sgYnl0ZXMoKSBjb25zdHJ1Y3Rvci4KKworICAgIE5PVEU6IFRoaXMgaXMgb25seSBhIGJlc3QgZWZmb3J0IGZ1bmN0aW9uLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgIyBtZW1vcnl2aWV3PworICAgICAgICByZXR1cm4gYi50b2J5dGVzKCkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgaXRlcmFibGUgb2YgaW50cz8KKyAgICAgICAgICAgIHJldHVybiBiIiIuam9pbihjaHIoeCkgZm9yIHggaW4gYikKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBieXRlcyhiKQorCitkZWYgYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCk6CisgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHJlcHJvZHVjaW5nIHRoZSBjdXJyZW50CisgICAgc2V0dGluZ3MgaW4gc3lzLmZsYWdzLiIiIgorICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgcmV0dXJuIHN1YnByb2Nlc3MuX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCisKK2RlZiBzdHJpcF9weXRob25fc3RkZXJyKHN0ZGVycik6CisgICAgIiIiU3RyaXAgdGhlIHN0ZGVyciBvZiBhIFB5dGhvbiBwcm9jZXNzIGZyb20gcG90ZW50aWFsIGRlYnVnIG91dHB1dAorICAgIGVtaXR0ZWQgYnkgdGhlIGludGVycHJldGVyLgorCisgICAgVGhpcyB3aWxsIHR5cGljYWxseSBiZSBydW4gb24gdGhlIHJlc3VsdCBvZiB0aGUgY29tbXVuaWNhdGUoKSBtZXRob2QKKyAgICBvZiBhIHN1YnByb2Nlc3MuUG9wZW4gb2JqZWN0LgorICAgICIiIgorICAgIHN0ZGVyciA9IHJlLnN1YihiciJcW1xkKyByZWZzXF1ccj9cbj8kIiwgYiIiLCBzdGRlcnIpLnN0cmlwKCkKKyAgICByZXR1cm4gc3RkZXJyCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zeW10YWJsZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N5bXRhYmxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MzdlODYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zeW10YWJsZS5weQpAQCAtMCwwICsxLDE4NCBAQAorIiIiCitUZXN0IHRoZSBBUEkgb2YgdGhlIHN5bXRhYmxlIG1vZHVsZS4KKyIiIgoraW1wb3J0IHN5bXRhYmxlCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCitURVNUX0NPREUgPSAiIiIKK2ltcG9ydCBzeXMKKworZ2xvYiA9IDQyCisKK2NsYXNzIE1pbmU6CisgICAgaW5zdGFuY2VfdmFyID0gMjQKKyAgICBkZWYgYV9tZXRob2QocDEsIHAyKToKKyAgICAgICAgcGFzcworCitkZWYgc3BhbShhLCBiLCAqdmFyLCAqKmt3KToKKyAgICBnbG9iYWwgYmFyCisgICAgYmFyID0gNDcKKyAgICB4ID0gMjMKKyAgICBnbG9iCisgICAgZGVmIGludGVybmFsKCk6CisgICAgICAgIHJldHVybiB4CisgICAgcmV0dXJuIGludGVybmFsCisKK2RlZiBmb28oKToKKyAgICBleGVjICdtJworICAgIGZyb20gc3lzIGltcG9ydCAqCisKK2RlZiBuYW1lc3BhY2VfdGVzdCgpOiBwYXNzCitkZWYgbmFtZXNwYWNlX3Rlc3QoKTogcGFzcworIiIiCisKKworZGVmIGZpbmRfYmxvY2soYmxvY2ssIG5hbWUpOgorICAgIGZvciBjaCBpbiBibG9jay5nZXRfY2hpbGRyZW4oKToKKyAgICAgICAgaWYgY2guZ2V0X25hbWUoKSA9PSBuYW1lOgorICAgICAgICAgICAgcmV0dXJuIGNoCisKKworY2xhc3MgU3ltdGFibGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKAorICAgICAgICAgICAgKCJpbXBvcnQgXCogb25seSBhbGxvd2VkIGF0IG1vZHVsZSBsZXZlbCIsIFN5bnRheFdhcm5pbmcpKToKKyAgICAgICAgdG9wID0gc3ltdGFibGUuc3ltdGFibGUoVEVTVF9DT0RFLCAiPyIsICJleGVjIikKKyAgICAjIFRoZXNlIGNvcnJlc3BvbmQgdG8gc2NvcGVzIGluIFRFU1RfQ09ERQorICAgIE1pbmUgPSBmaW5kX2Jsb2NrKHRvcCwgIk1pbmUiKQorICAgIGFfbWV0aG9kID0gZmluZF9ibG9jayhNaW5lLCAiYV9tZXRob2QiKQorICAgIHNwYW0gPSBmaW5kX2Jsb2NrKHRvcCwgInNwYW0iKQorICAgIGludGVybmFsID0gZmluZF9ibG9jayhzcGFtLCAiaW50ZXJuYWwiKQorICAgIGZvbyA9IGZpbmRfYmxvY2sodG9wLCAiZm9vIikKKworICAgIGRlZiB0ZXN0X3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50b3AuZ2V0X3R5cGUoKSwgIm1vZHVsZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5NaW5lLmdldF90eXBlKCksICJjbGFzcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hX21ldGhvZC5nZXRfdHlwZSgpLCAiZnVuY3Rpb24iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3BhbS5nZXRfdHlwZSgpLCAiZnVuY3Rpb24iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW50ZXJuYWwuZ2V0X3R5cGUoKSwgImZ1bmN0aW9uIikKKworICAgIGRlZiB0ZXN0X29wdGltaXplZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnRvcC5pc19vcHRpbWl6ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnRvcC5oYXNfZXhlYygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYudG9wLmhhc19pbXBvcnRfc3RhcigpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNwYW0uaXNfb3B0aW1pemVkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZvby5pc19vcHRpbWl6ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZm9vLmhhc19leGVjKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZvby5oYXNfaW1wb3J0X3N0YXIoKSkKKworICAgIGRlZiB0ZXN0X25lc3RlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnRvcC5pc19uZXN0ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLk1pbmUuaXNfbmVzdGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zcGFtLmlzX25lc3RlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5pbnRlcm5hbC5pc19uZXN0ZWQoKSkKKworICAgIGRlZiB0ZXN0X2NoaWxkcmVuKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50b3AuaGFzX2NoaWxkcmVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLk1pbmUuaGFzX2NoaWxkcmVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5mb28uaGFzX2NoaWxkcmVuKCkpCisKKyAgICBkZWYgdGVzdF9saW5lbm8oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50b3AuZ2V0X2xpbmVubygpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3BhbS5nZXRfbGluZW5vKCksIDExKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25faW5mbyhzZWxmKToKKyAgICAgICAgZnVuYyA9IHNlbGYuc3BhbQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmdW5jLmdldF9wYXJhbWV0ZXJzKCkpLCBbImEiLCAiYiIsICJrdyIsICJ2YXIiXSkKKyAgICAgICAgZXhwZWN0ZWQgPSBbImEiLCAiYiIsICJpbnRlcm5hbCIsICJrdyIsICJ2YXIiLCAieCJdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGZ1bmMuZ2V0X2xvY2FscygpKSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGZ1bmMuZ2V0X2dsb2JhbHMoKSksIFsiYmFyIiwgImdsb2IiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmludGVybmFsLmdldF9mcmVlcygpLCAoIngiLCkpCisKKyAgICBkZWYgdGVzdF9nbG9iYWxzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zcGFtLmxvb2t1cCgiZ2xvYiIpLmlzX2dsb2JhbCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc3BhbS5sb29rdXAoImdsb2IiKS5pc19kZWNsYXJlZF9nbG9iYWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3BhbS5sb29rdXAoImJhciIpLmlzX2dsb2JhbCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zcGFtLmxvb2t1cCgiYmFyIikuaXNfZGVjbGFyZWRfZ2xvYmFsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5pbnRlcm5hbC5sb29rdXAoIngiKS5pc19nbG9iYWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLk1pbmUubG9va3VwKCJpbnN0YW5jZV92YXIiKS5pc19nbG9iYWwoKSkKKworICAgIGRlZiB0ZXN0X2xvY2FsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zcGFtLmxvb2t1cCgieCIpLmlzX2xvY2FsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5pbnRlcm5hbC5sb29rdXAoIngiKS5pc19sb2NhbCgpKQorCisgICAgZGVmIHRlc3RfcmVmZXJlbmNlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaW50ZXJuYWwubG9va3VwKCJ4IikuaXNfcmVmZXJlbmNlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zcGFtLmxvb2t1cCgiaW50ZXJuYWwiKS5pc19yZWZlcmVuY2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zcGFtLmxvb2t1cCgieCIpLmlzX3JlZmVyZW5jZWQoKSkKKworICAgIGRlZiB0ZXN0X3BhcmFtZXRlcnMoc2VsZik6CisgICAgICAgIGZvciBzeW0gaW4gKCJhIiwgInZhciIsICJrdyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3BhbS5sb29rdXAoc3ltKS5pc19wYXJhbWV0ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNwYW0ubG9va3VwKCJ4IikuaXNfcGFyYW1ldGVyKCkpCisKKyAgICBkZWYgdGVzdF9zeW1ib2xfbG9va3VwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnRvcC5nZXRfaWRlbnRpZmllcnMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYudG9wLmdldF9zeW1ib2xzKCkpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLnRvcC5sb29rdXAsICJub3RfaGVyZSIpCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2VzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50b3AubG9va3VwKCJNaW5lIikuaXNfbmFtZXNwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLk1pbmUubG9va3VwKCJhX21ldGhvZCIpLmlzX25hbWVzcGFjZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50b3AubG9va3VwKCJzcGFtIikuaXNfbmFtZXNwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNwYW0ubG9va3VwKCJpbnRlcm5hbCIpLmlzX25hbWVzcGFjZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50b3AubG9va3VwKCJuYW1lc3BhY2VfdGVzdCIpLmlzX25hbWVzcGFjZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc3BhbS5sb29rdXAoIngiKS5pc19uYW1lc3BhY2UoKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50b3AubG9va3VwKCJzcGFtIikuZ2V0X25hbWVzcGFjZSgpIGlzIHNlbGYuc3BhbSkKKyAgICAgICAgbnNfdGVzdCA9IHNlbGYudG9wLmxvb2t1cCgibmFtZXNwYWNlX3Rlc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuc190ZXN0LmdldF9uYW1lc3BhY2VzKCkpLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBuc190ZXN0LmdldF9uYW1lc3BhY2UpCisKKyAgICBkZWYgdGVzdF9hc3NpZ25lZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3BhbS5sb29rdXAoIngiKS5pc19hc3NpZ25lZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zcGFtLmxvb2t1cCgiYmFyIikuaXNfYXNzaWduZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudG9wLmxvb2t1cCgic3BhbSIpLmlzX2Fzc2lnbmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLk1pbmUubG9va3VwKCJhX21ldGhvZCIpLmlzX2Fzc2lnbmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5pbnRlcm5hbC5sb29rdXAoIngiKS5pc19hc3NpZ25lZCgpKQorCisgICAgZGVmIHRlc3RfaW1wb3J0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRvcC5sb29rdXAoInN5cyIpLmlzX2ltcG9ydGVkKCkpCisKKyAgICBkZWYgdGVzdF9uYW1lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudG9wLmdldF9uYW1lKCksICJ0b3AiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3BhbS5nZXRfbmFtZSgpLCAic3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zcGFtLmxvb2t1cCgieCIpLmdldF9uYW1lKCksICJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLk1pbmUuZ2V0X25hbWUoKSwgIk1pbmUiKQorCisgICAgZGVmIHRlc3RfY2xhc3NfaW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLk1pbmUuZ2V0X21ldGhvZHMoKSwgKCdhX21ldGhvZCcsKSkKKworICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX2NvcnJlY3Qoc2VsZik6CisgICAgICAgICMjIyBCdWcgdGlja2xlcjogU3ludGF4RXJyb3IgZmlsZSBuYW1lIGNvcnJlY3Qgd2hldGhlciBlcnJvciByYWlzZWQKKyAgICAgICAgIyMjIHdoaWxlIHBhcnNpbmcgb3IgYnVpbGRpbmcgc3ltYm9sIHRhYmxlLgorICAgICAgICBkZWYgY2hlY2tmaWxlbmFtZShicm9rZW5jb2RlKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzeW10YWJsZS5zeW10YWJsZShicm9rZW5jb2RlLCAic3BhbSIsICJleGVjIikKKyAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5maWxlbmFtZSwgInNwYW0iKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIFN5bnRheEVycm9yIGZvciAlciIgJSAoYnJva2VuY29kZSwpKQorICAgICAgICBjaGVja2ZpbGVuYW1lKCJkZWYgZih4KTogZm9vKSgiKSAgIyBwYXJzZS10aW1lCisgICAgICAgIGNoZWNrZmlsZW5hbWUoImRlZiBmKHgpOiBnbG9iYWwgeCIpICAjIHN5bXRhYmxlLWJ1aWxkLXRpbWUKKworICAgIGRlZiB0ZXN0X2V2YWwoc2VsZik6CisgICAgICAgIHN5bWJvbHMgPSBzeW10YWJsZS5zeW10YWJsZSgiNDIiLCAiPyIsICJldmFsIikKKworICAgIGRlZiB0ZXN0X3NpbmdsZShzZWxmKToKKyAgICAgICAgc3ltYm9scyA9IHN5bXRhYmxlLnN5bXRhYmxlKCI0MiIsICI/IiwgInNpbmdsZSIpCisKKyAgICBkZWYgdGVzdF9leGVjKHNlbGYpOgorICAgICAgICBzeW1ib2xzID0gc3ltdGFibGUuc3ltdGFibGUoImRlZiBmKHgpOiByZXR1cm4geCIsICI/IiwgImV4ZWMiKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFN5bXRhYmxlVGVzdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3ludGF4LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3ludGF4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OTRmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zeW50YXgucHkKQEAgLTAsMCArMSw1NzIgQEAKKyIiIlRoaXMgbW9kdWxlIHRlc3RzIFN5bnRheEVycm9ycy4KKworSGVyZSdzIGFuIGV4YW1wbGUgb2YgdGhlIHNvcnQgb2YgdGhpbmcgdGhhdCBpcyB0ZXN0ZWQuCisKKz4+PiBkZWYgZih4KToKKy4uLiAgICAgZ2xvYmFsIHgKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKK1N5bnRheEVycm9yOiBuYW1lICd4JyBpcyBsb2NhbCBhbmQgZ2xvYmFsICg8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzBdPiwgbGluZSAxKQorCitUaGUgdGVzdHMgYXJlIGFsbCByYWlzZSBTeW50YXhFcnJvcnMuICBUaGV5IHdlcmUgY3JlYXRlZCBieSBjaGVja2luZworZWFjaCBDIGNhbGwgdGhhdCByYWlzZXMgU3ludGF4RXJyb3IuICBUaGVyZSBhcmUgc2V2ZXJhbCBtb2R1bGVzIHRoYXQKK3JhaXNlIHRoZXNlIGV4Y2VwdGlvbnMtLSBhc3QuYywgY29tcGlsZS5jLCBmdXR1cmUuYywgcHl0aG9ucnVuLmMsIGFuZAorc3ltdGFibGUuYy4KKworVGhlIHBhcnNlciBpdHNlbGYgb3V0bGF3cyBhIGxvdCBvZiBpbnZhbGlkIHN5bnRheC4gIE5vbmUgb2YgdGhlc2UKK2Vycm9ycyBhcmUgdGVzdGVkIGhlcmUgYXQgdGhlIG1vbWVudC4gIFdlIHNob3VsZCBhZGQgc29tZSB0ZXN0czsgc2luY2UKK3RoZXJlIGFyZSBpbmZpbml0ZWx5IG1hbnkgcHJvZ3JhbXMgd2l0aCBpbnZhbGlkIHN5bnRheCwgd2Ugd291bGQgbmVlZAordG8gYmUganVkaWNpb3VzIGluIHNlbGVjdGluZyBzb21lLgorCitUaGUgY29tcGlsZXIgZ2VuZXJhdGVzIGEgc3ludGhldGljIG1vZHVsZSBuYW1lIGZvciBjb2RlIGV4ZWN1dGVkIGJ5Citkb2N0ZXN0LiAgU2luY2UgYWxsIHRoZSBjb2RlIGNvbWVzIGZyb20gdGhlIHNhbWUgbW9kdWxlLCBhIHN1ZmZpeCBsaWtlCitbMV0gaXMgYXBwZW5kZWQgdG8gdGhlIG1vZHVsZSBuYW1lLCBBcyBhIGNvbnNlcXVlbmNlLCBjaGFuZ2luZyB0aGUKK29yZGVyIG9mIHRlc3RzIGluIHRoaXMgbW9kdWxlIG1lYW5zIHJlbnVtYmVyaW5nIGFsbCB0aGUgZXJyb3JzIGFmdGVyCitpdC4gIChNYXliZSB3ZSBzaG91bGQgZW5hYmxlIHRoZSBlbGxpcHNpcyBvcHRpb24gZm9yIHRoZXNlIHRlc3RzLikKKworSW4gYXN0LmMsIHN5bnRheCBlcnJvcnMgYXJlIHJhaXNlZCBieSBjYWxsaW5nIGFzdF9lcnJvcigpLgorCitFcnJvcnMgZnJvbSBzZXRfY29udGV4dCgpOgorCis+Pj4gb2JqLk5vbmUgPSAxCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMV0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2Fubm90IGFzc2lnbiB0byBOb25lCisKKz4+PiBOb25lID0gMQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzJdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbm5vdCBhc3NpZ24gdG8gTm9uZQorCitJdCdzIGEgc3ludGF4IGVycm9yIHRvIGFzc2lnbiB0byB0aGUgZW1wdHkgdHVwbGUuICBXaHkgaXNuJ3QgaXQgYW4KK2Vycm9yIHRvIGFzc2lnbiB0byB0aGUgZW1wdHkgbGlzdD8gIEl0IHdpbGwgYWx3YXlzIHJhaXNlIHNvbWUgZXJyb3IgYXQKK3J1bnRpbWUuCisKKz4+PiAoKSA9IDEKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFszXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gKCkKKworPj4+IGYoKSA9IDEKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbAorCis+Pj4gZGVsIGYoKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzVdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGRlbGV0ZSBmdW5jdGlvbiBjYWxsCisKKz4+PiBhICsgMSA9IDIKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs2XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gb3BlcmF0b3IKKworPj4+ICh4IGZvciB4IGluIHgpID0gMQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzddPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBnZW5lcmF0b3IgZXhwcmVzc2lvbgorCis+Pj4gMSA9IDEKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs4XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gbGl0ZXJhbAorCis+Pj4gImFiYyIgPSAxCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbOF0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGxpdGVyYWwKKworPj4+IGAxYCA9IDEKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxMF0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIHJlcHIKKworSWYgdGhlIGxlZnQtaGFuZCBzaWRlIG9mIGFuIGFzc2lnbm1lbnQgaXMgYSBsaXN0IG9yIHR1cGxlLCBhbiBpbGxlZ2FsCitleHByZXNzaW9uIGluc2lkZSB0aGF0IGNvbnRhaW4gc2hvdWxkIHN0aWxsIGNhdXNlIGEgc3ludGF4IGVycm9yLgorVGhpcyB0ZXN0IGp1c3QgY2hlY2tzIGEgY291cGxlIG9mIGNhc2VzIHJhdGhlciB0aGFuIGVudW1lcmF0aW5nIGFsbCBvZgordGhlbS4KKworPj4+IChhLCAiYiIsIGMpID0gKDEsIDIsIDMpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTFdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBsaXRlcmFsCisKKz4+PiBbYSwgYiwgYyArIDFdID0gWzEsIDIsIDNdCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTJdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBvcGVyYXRvcgorCis+Pj4gYSBpZiAxIGVsc2UgYiA9IDEKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxM10+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24KKworRnJvbSBjb21waWxlcl9jb21wbGV4X2FyZ3MoKToKKworPj4+IGRlZiBmKE5vbmU9MSk6CisuLi4gICAgIHBhc3MKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxNF0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2Fubm90IGFzc2lnbiB0byBOb25lCisKKworRnJvbSBhc3RfZm9yX2FyZ3VtZW50cygpOgorCis+Pj4gZGVmIGYoeCwgeT0xLCB6KToKKy4uLiAgICAgcGFzcworVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzE1XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBub24tZGVmYXVsdCBhcmd1bWVudCBmb2xsb3dzIGRlZmF1bHQgYXJndW1lbnQKKworPj4+IGRlZiBmKHgsIE5vbmUpOgorLi4uICAgICBwYXNzCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTZdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbm5vdCBhc3NpZ24gdG8gTm9uZQorCis+Pj4gZGVmIGYoKk5vbmUpOgorLi4uICAgICBwYXNzCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMTddPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbm5vdCBhc3NpZ24gdG8gTm9uZQorCis+Pj4gZGVmIGYoKipOb25lKToKKy4uLiAgICAgcGFzcworVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzE4XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW5ub3QgYXNzaWduIHRvIE5vbmUKKworCitGcm9tIGFzdF9mb3JfZnVuY2RlZigpOgorCis+Pj4gZGVmIE5vbmUoeCk6CisuLi4gICAgIHBhc3MKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsxOV0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2Fubm90IGFzc2lnbiB0byBOb25lCisKKworRnJvbSBhc3RfZm9yX2NhbGwoKToKKworPj4+IGRlZiBmKGl0LCAqdmFyYXJncyk6CisuLi4gICAgIHJldHVybiBsaXN0KGl0KQorPj4+IEwgPSByYW5nZSgxMCkKKz4+PiBmKHggZm9yIHggaW4gTCkKK1swLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XQorPj4+IGYoeCBmb3IgeCBpbiBMLCAxKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzIzXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBHZW5lcmF0b3IgZXhwcmVzc2lvbiBtdXN0IGJlIHBhcmVudGhlc2l6ZWQgaWYgbm90IHNvbGUgYXJndW1lbnQKKz4+PiBmKCh4IGZvciB4IGluIEwpLCAxKQorWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCisKKz4+PiBmKGkwLCAgaTEsICBpMiwgIGkzLCAgaTQsICBpNSwgIGk2LCAgaTcsICBpOCwgIGk5LCAgaTEwLCAgaTExLAorLi4uICAgaTEyLCAgaTEzLCAgaTE0LCAgaTE1LCAgaTE2LCAgaTE3LCAgaTE4LCAgaTE5LCAgaTIwLCAgaTIxLCAgaTIyLAorLi4uICAgaTIzLCAgaTI0LCAgaTI1LCAgaTI2LCAgaTI3LCAgaTI4LCAgaTI5LCAgaTMwLCAgaTMxLCAgaTMyLCAgaTMzLAorLi4uICAgaTM0LCAgaTM1LCAgaTM2LCAgaTM3LCAgaTM4LCAgaTM5LCAgaTQwLCAgaTQxLCAgaTQyLCAgaTQzLCAgaTQ0LAorLi4uICAgaTQ1LCAgaTQ2LCAgaTQ3LCAgaTQ4LCAgaTQ5LCAgaTUwLCAgaTUxLCAgaTUyLCAgaTUzLCAgaTU0LCAgaTU1LAorLi4uICAgaTU2LCAgaTU3LCAgaTU4LCAgaTU5LCAgaTYwLCAgaTYxLCAgaTYyLCAgaTYzLCAgaTY0LCAgaTY1LCAgaTY2LAorLi4uICAgaTY3LCAgaTY4LCAgaTY5LCAgaTcwLCAgaTcxLCAgaTcyLCAgaTczLCAgaTc0LCAgaTc1LCAgaTc2LCAgaTc3LAorLi4uICAgaTc4LCAgaTc5LCAgaTgwLCAgaTgxLCAgaTgyLCAgaTgzLCAgaTg0LCAgaTg1LCAgaTg2LCAgaTg3LCAgaTg4LAorLi4uICAgaTg5LCAgaTkwLCAgaTkxLCAgaTkyLCAgaTkzLCAgaTk0LCAgaTk1LCAgaTk2LCAgaTk3LCAgaTk4LCAgaTk5LAorLi4uICAgaTEwMCwgIGkxMDEsICBpMTAyLCAgaTEwMywgIGkxMDQsICBpMTA1LCAgaTEwNiwgIGkxMDcsICBpMTA4LAorLi4uICAgaTEwOSwgIGkxMTAsICBpMTExLCAgaTExMiwgIGkxMTMsICBpMTE0LCAgaTExNSwgIGkxMTYsICBpMTE3LAorLi4uICAgaTExOCwgIGkxMTksICBpMTIwLCAgaTEyMSwgIGkxMjIsICBpMTIzLCAgaTEyNCwgIGkxMjUsICBpMTI2LAorLi4uICAgaTEyNywgIGkxMjgsICBpMTI5LCAgaTEzMCwgIGkxMzEsICBpMTMyLCAgaTEzMywgIGkxMzQsICBpMTM1LAorLi4uICAgaTEzNiwgIGkxMzcsICBpMTM4LCAgaTEzOSwgIGkxNDAsICBpMTQxLCAgaTE0MiwgIGkxNDMsICBpMTQ0LAorLi4uICAgaTE0NSwgIGkxNDYsICBpMTQ3LCAgaTE0OCwgIGkxNDksICBpMTUwLCAgaTE1MSwgIGkxNTIsICBpMTUzLAorLi4uICAgaTE1NCwgIGkxNTUsICBpMTU2LCAgaTE1NywgIGkxNTgsICBpMTU5LCAgaTE2MCwgIGkxNjEsICBpMTYyLAorLi4uICAgaTE2MywgIGkxNjQsICBpMTY1LCAgaTE2NiwgIGkxNjcsICBpMTY4LCAgaTE2OSwgIGkxNzAsICBpMTcxLAorLi4uICAgaTE3MiwgIGkxNzMsICBpMTc0LCAgaTE3NSwgIGkxNzYsICBpMTc3LCAgaTE3OCwgIGkxNzksICBpMTgwLAorLi4uICAgaTE4MSwgIGkxODIsICBpMTgzLCAgaTE4NCwgIGkxODUsICBpMTg2LCAgaTE4NywgIGkxODgsICBpMTg5LAorLi4uICAgaTE5MCwgIGkxOTEsICBpMTkyLCAgaTE5MywgIGkxOTQsICBpMTk1LCAgaTE5NiwgIGkxOTcsICBpMTk4LAorLi4uICAgaTE5OSwgIGkyMDAsICBpMjAxLCAgaTIwMiwgIGkyMDMsICBpMjA0LCAgaTIwNSwgIGkyMDYsICBpMjA3LAorLi4uICAgaTIwOCwgIGkyMDksICBpMjEwLCAgaTIxMSwgIGkyMTIsICBpMjEzLCAgaTIxNCwgIGkyMTUsICBpMjE2LAorLi4uICAgaTIxNywgIGkyMTgsICBpMjE5LCAgaTIyMCwgIGkyMjEsICBpMjIyLCAgaTIyMywgIGkyMjQsICBpMjI1LAorLi4uICAgaTIyNiwgIGkyMjcsICBpMjI4LCAgaTIyOSwgIGkyMzAsICBpMjMxLCAgaTIzMiwgIGkyMzMsICBpMjM0LAorLi4uICAgaTIzNSwgIGkyMzYsICBpMjM3LCAgaTIzOCwgIGkyMzksICBpMjQwLCAgaTI0MSwgIGkyNDIsICBpMjQzLAorLi4uICAgaTI0NCwgIGkyNDUsICBpMjQ2LCAgaTI0NywgIGkyNDgsICBpMjQ5LCAgaTI1MCwgIGkyNTEsICBpMjUyLAorLi4uICAgaTI1MywgIGkyNTQsICBpMjU1KQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzI1XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBtb3JlIHRoYW4gMjU1IGFyZ3VtZW50cworCitUaGUgYWN0dWFsIGVycm9yIGNhc2VzIGNvdW50cyBwb3NpdGlvbmFsIGFyZ3VtZW50cywga2V5d29yZCBhcmd1bWVudHMsCithbmQgZ2VuZXJhdG9yIGV4cHJlc3Npb24gYXJndW1lbnRzIHNlcGFyYXRlbHkuICBUaGlzIHRlc3QgY29tYmluZXMgdGhlCit0aHJlZS4KKworPj4+IGYoaTAsICBpMSwgIGkyLCAgaTMsICBpNCwgIGk1LCAgaTYsICBpNywgIGk4LCAgaTksICBpMTAsICBpMTEsCisuLi4gICBpMTIsICBpMTMsICBpMTQsICBpMTUsICBpMTYsICBpMTcsICBpMTgsICBpMTksICBpMjAsICBpMjEsICBpMjIsCisuLi4gICBpMjMsICBpMjQsICBpMjUsICBpMjYsICBpMjcsICBpMjgsICBpMjksICBpMzAsICBpMzEsICBpMzIsICBpMzMsCisuLi4gICBpMzQsICBpMzUsICBpMzYsICBpMzcsICBpMzgsICBpMzksICBpNDAsICBpNDEsICBpNDIsICBpNDMsICBpNDQsCisuLi4gICBpNDUsICBpNDYsICBpNDcsICBpNDgsICBpNDksICBpNTAsICBpNTEsICBpNTIsICBpNTMsICBpNTQsICBpNTUsCisuLi4gICBpNTYsICBpNTcsICBpNTgsICBpNTksICBpNjAsICBpNjEsICBpNjIsICBpNjMsICBpNjQsICBpNjUsICBpNjYsCisuLi4gICBpNjcsICBpNjgsICBpNjksICBpNzAsICBpNzEsICBpNzIsICBpNzMsICBpNzQsICBpNzUsICBpNzYsICBpNzcsCisuLi4gICBpNzgsICBpNzksICBpODAsICBpODEsICBpODIsICBpODMsICBpODQsICBpODUsICBpODYsICBpODcsICBpODgsCisuLi4gICBpODksICBpOTAsICBpOTEsICBpOTIsICBpOTMsICBpOTQsICBpOTUsICBpOTYsICBpOTcsICBpOTgsICBpOTksCisuLi4gICBpMTAwLCAgaTEwMSwgIGkxMDIsICBpMTAzLCAgaTEwNCwgIGkxMDUsICBpMTA2LCAgaTEwNywgIGkxMDgsCisuLi4gICBpMTA5LCAgaTExMCwgIGkxMTEsICBpMTEyLCAgaTExMywgIGkxMTQsICBpMTE1LCAgaTExNiwgIGkxMTcsCisuLi4gICBpMTE4LCAgaTExOSwgIGkxMjAsICBpMTIxLCAgaTEyMiwgIGkxMjMsICBpMTI0LCAgaTEyNSwgIGkxMjYsCisuLi4gICBpMTI3LCAgaTEyOCwgIGkxMjksICBpMTMwLCAgaTEzMSwgIGkxMzIsICBpMTMzLCAgaTEzNCwgIGkxMzUsCisuLi4gICBpMTM2LCAgaTEzNywgIGkxMzgsICBpMTM5LCAgaTE0MCwgIGkxNDEsICBpMTQyLCAgaTE0MywgIGkxNDQsCisuLi4gICBpMTQ1LCAgaTE0NiwgIGkxNDcsICBpMTQ4LCAgaTE0OSwgIGkxNTAsICBpMTUxLCAgaTE1MiwgIGkxNTMsCisuLi4gICBpMTU0LCAgaTE1NSwgIGkxNTYsICBpMTU3LCAgaTE1OCwgIGkxNTksICBpMTYwLCAgaTE2MSwgIGkxNjIsCisuLi4gICBpMTYzLCAgaTE2NCwgIGkxNjUsICBpMTY2LCAgaTE2NywgIGkxNjgsICBpMTY5LCAgaTE3MCwgIGkxNzEsCisuLi4gICBpMTcyLCAgaTE3MywgIGkxNzQsICBpMTc1LCAgaTE3NiwgIGkxNzcsICBpMTc4LCAgaTE3OSwgIGkxODAsCisuLi4gICBpMTgxLCAgaTE4MiwgIGkxODMsICBpMTg0LCAgaTE4NSwgIGkxODYsICBpMTg3LCAgaTE4OCwgIGkxODksCisuLi4gICBpMTkwLCAgaTE5MSwgIGkxOTIsICBpMTkzLCAgaTE5NCwgIGkxOTUsICBpMTk2LCAgaTE5NywgIGkxOTgsCisuLi4gICBpMTk5LCAgaTIwMCwgIGkyMDEsICBpMjAyLCAgaTIwMywgIGkyMDQsICBpMjA1LCAgaTIwNiwgIGkyMDcsCisuLi4gICBpMjA4LCAgaTIwOSwgIGkyMTAsICBpMjExLCAgaTIxMiwgIGkyMTMsICBpMjE0LCAgaTIxNSwgIGkyMTYsCisuLi4gICBpMjE3LCAgaTIxOCwgIGkyMTksICBpMjIwLCAgaTIyMSwgIGkyMjIsICBpMjIzLCAgaTIyNCwgIGkyMjUsCisuLi4gICBpMjI2LCAgaTIyNywgIGkyMjgsICBpMjI5LCAgaTIzMCwgIGkyMzEsICBpMjMyLCAgaTIzMywgIGkyMzQsCisuLi4gICBpMjM1LCBpMjM2LCAgaTIzNywgIGkyMzgsICBpMjM5LCAgaTI0MCwgIGkyNDEsICBpMjQyLCAgaTI0MywKKy4uLiAgICh4IGZvciB4IGluIGkyNDQpLCAgaTI0NSwgIGkyNDYsICBpMjQ3LCAgaTI0OCwgIGkyNDksICBpMjUwLCAgaTI1MSwKKy4uLiAgICBpMjUyPTEsIGkyNTM9MSwgIGkyNTQ9MSwgIGkyNTU9MSkKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFsyNl0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogbW9yZSB0aGFuIDI1NSBhcmd1bWVudHMKKworPj4+IGYobGFtYmRhIHg6IHhbMF0gPSAzKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzI3XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBsYW1iZGEgY2Fubm90IGNvbnRhaW4gYXNzaWdubWVudAorCitUaGUgZ3JhbW1hciBhY2NlcHRzIGFueSB0ZXN0IChiYXNpY2FsbHksIGFueSBleHByZXNzaW9uKSBpbiB0aGUKK2tleXdvcmQgc2xvdCBvZiBhIGNhbGwgc2l0ZS4gIFRlc3QgYSBmZXcgZGlmZmVyZW50IG9wdGlvbnMuCisKKz4+PiBmKHgoKT0yKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzI4XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBrZXl3b3JkIGNhbid0IGJlIGFuIGV4cHJlc3Npb24KKz4+PiBmKGEgb3IgYj0xKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzI5XT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBrZXl3b3JkIGNhbid0IGJlIGFuIGV4cHJlc3Npb24KKz4+PiBmKHgueT0xKQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzMwXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBrZXl3b3JkIGNhbid0IGJlIGFuIGV4cHJlc3Npb24KKworCitNb3JlIHNldF9jb250ZXh0KCk6CisKKz4+PiAoeCBmb3IgeCBpbiB4KSArPSAxCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzFdPiIsIGxpbmUgMQorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBnZW5lcmF0b3IgZXhwcmVzc2lvbgorPj4+IE5vbmUgKz0gMQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzMyXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW5ub3QgYXNzaWduIHRvIE5vbmUKKz4+PiBmKCkgKz0gMQorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzMzXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbAorCisKK1Rlc3QgY29udGludWUgaW4gZmluYWxseSBpbiB3ZWlyZCBjb21iaW5hdGlvbnMuCisKK2NvbnRpbnVlIGluIGZvciBsb29wIHVuZGVyIGZpbmFsbHkgc2hvdWxkIGJlIG9rLgorCisgICAgPj4+IGRlZiB0ZXN0KCk6CisgICAgLi4uICAgICB0cnk6CisgICAgLi4uICAgICAgICAgcGFzcworICAgIC4uLiAgICAgZmluYWxseToKKyAgICAuLi4gICAgICAgICBmb3IgYWJjIGluIHJhbmdlKDEwKToKKyAgICAuLi4gICAgICAgICAgICAgY29udGludWUKKyAgICAuLi4gICAgIHByaW50IGFiYworICAgID4+PiB0ZXN0KCkKKyAgICA5CisKK1N0YXJ0IHNpbXBsZSwgYSBjb250aW51ZSBpbiBhIGZpbmFsbHkgc2hvdWxkIG5vdCBiZSBhbGxvd2VkLgorCisgICAgPj4+IGRlZiB0ZXN0KCk6CisgICAgLi4uICAgIGZvciBhYmMgaW4gcmFuZ2UoMTApOgorICAgIC4uLiAgICAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgICAgIHBhc3MKKyAgICAuLi4gICAgICAgIGZpbmFsbHk6CisgICAgLi4uICAgICAgICAgICAgY29udGludWUKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzZdPiIsIGxpbmUgNgorICAgIFN5bnRheEVycm9yOiAnY29udGludWUnIG5vdCBzdXBwb3J0ZWQgaW5zaWRlICdmaW5hbGx5JyBjbGF1c2UKKworVGhpcyBpcyBlc3NlbnRpYWxseSBhIGNvbnRpbnVlIGluIGEgZmluYWxseSB3aGljaCBzaG91bGQgbm90IGJlIGFsbG93ZWQuCisKKyAgICA+Pj4gZGVmIHRlc3QoKToKKyAgICAuLi4gICAgZm9yIGFiYyBpbiByYW5nZSgxMCk6CisgICAgLi4uICAgICAgICB0cnk6CisgICAgLi4uICAgICAgICAgICAgcGFzcworICAgIC4uLiAgICAgICAgZmluYWxseToKKyAgICAuLi4gICAgICAgICAgICB0cnk6CisgICAgLi4uICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgLi4uICAgICAgICAgICAgZXhjZXB0OgorICAgIC4uLiAgICAgICAgICAgICAgICBwYXNzCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzM3XT4iLCBsaW5lIDYKKyAgICBTeW50YXhFcnJvcjogJ2NvbnRpbnVlJyBub3Qgc3VwcG9ydGVkIGluc2lkZSAnZmluYWxseScgY2xhdXNlCisKKyAgICA+Pj4gZGVmIGZvbygpOgorICAgIC4uLiAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgIHBhc3MKKyAgICAuLi4gICAgIGZpbmFsbHk6CisgICAgLi4uICAgICAgICAgY29udGludWUKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzhdPiIsIGxpbmUgNQorICAgIFN5bnRheEVycm9yOiAnY29udGludWUnIG5vdCBzdXBwb3J0ZWQgaW5zaWRlICdmaW5hbGx5JyBjbGF1c2UKKworICAgID4+PiBkZWYgZm9vKCk6CisgICAgLi4uICAgICBmb3IgYSBpbiAoKToKKyAgICAuLi4gICAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgICAgcGFzcworICAgIC4uLiAgICAgICBmaW5hbGx5OgorICAgIC4uLiAgICAgICAgICAgY29udGludWUKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbMzldPiIsIGxpbmUgNgorICAgIFN5bnRheEVycm9yOiAnY29udGludWUnIG5vdCBzdXBwb3J0ZWQgaW5zaWRlICdmaW5hbGx5JyBjbGF1c2UKKworICAgID4+PiBkZWYgZm9vKCk6CisgICAgLi4uICAgICBmb3IgYSBpbiAoKToKKyAgICAuLi4gICAgICAgICB0cnk6CisgICAgLi4uICAgICAgICAgICAgIHBhc3MKKyAgICAuLi4gICAgICAgICBmaW5hbGx5OgorICAgIC4uLiAgICAgICAgICAgICB0cnk6CisgICAgLi4uICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgIC4uLiAgICAgICAgICAgICBmaW5hbGx5OgorICAgIC4uLiAgICAgICAgICAgICAgICAgcGFzcworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0MF0+IiwgbGluZSA3CisgICAgU3ludGF4RXJyb3I6ICdjb250aW51ZScgbm90IHN1cHBvcnRlZCBpbnNpZGUgJ2ZpbmFsbHknIGNsYXVzZQorCisgICAgPj4+IGRlZiBmb28oKToKKyAgICAuLi4gIGZvciBhIGluICgpOgorICAgIC4uLiAgIHRyeTogcGFzcworICAgIC4uLiAgIGZpbmFsbHk6CisgICAgLi4uICAgIHRyeToKKyAgICAuLi4gICAgIHBhc3MKKyAgICAuLi4gICAgZXhjZXB0OgorICAgIC4uLiAgICAgY29udGludWUKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDFdPiIsIGxpbmUgOAorICAgIFN5bnRheEVycm9yOiAnY29udGludWUnIG5vdCBzdXBwb3J0ZWQgaW5zaWRlICdmaW5hbGx5JyBjbGF1c2UKKworVGhlcmUgaXMgb25lIHRlc3QgZm9yIGEgYnJlYWsgdGhhdCBpcyBub3QgaW4gYSBsb29wLiAgVGhlIGNvbXBpbGVyCit1c2VzIGEgc2luZ2xlIGRhdGEgc3RydWN0dXJlIHRvIGtlZXAgdHJhY2sgb2YgdHJ5LWZpbmFsbHkgYW5kIGxvb3BzLAorc28gd2UgbmVlZCB0byBiZSBzdXJlIHRoYXQgYSBicmVhayBpcyBhY3R1YWxseSBpbnNpZGUgYSBsb29wLiAgSWYgaXQKK2lzbid0LCB0aGVyZSBzaG91bGQgYmUgYSBzeW50YXggZXJyb3IuCisKKyAgID4+PiB0cnk6CisgICAuLi4gICAgIHByaW50IDEKKyAgIC4uLiAgICAgYnJlYWsKKyAgIC4uLiAgICAgcHJpbnQgMgorICAgLi4uIGZpbmFsbHk6CisgICAuLi4gICAgIHByaW50IDMKKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgLi4uCisgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDJdPiIsIGxpbmUgMworICAgU3ludGF4RXJyb3I6ICdicmVhaycgb3V0c2lkZSBsb29wCisKK1RoaXMgc2hvdWxkIHByb2JhYmx5IHJhaXNlIGEgYmV0dGVyIGVycm9yIHRoYW4gYSBTeXN0ZW1FcnJvciAob3Igbm9uZSBhdCBhbGwpLgorSW4gMi41IHRoZXJlIHdhcyBhIG1pc3NpbmcgZXhjZXB0aW9uIGFuZCBhbiBhc3NlcnQgd2FzIHRyaWdnZXJlZCBpbiBhIGRlYnVnCitidWlsZC4gIFRoZSBudW1iZXIgb2YgYmxvY2tzIG11c3QgYmUgZ3JlYXRlciB0aGFuIENPX01BWEJMT0NLUy4gIFNGICMxNTY1NTE0CisKKyAgID4+PiB3aGlsZSAxOgorICAgLi4uICB3aGlsZSAyOgorICAgLi4uICAgd2hpbGUgMzoKKyAgIC4uLiAgICB3aGlsZSA0OgorICAgLi4uICAgICB3aGlsZSA1OgorICAgLi4uICAgICAgd2hpbGUgNjoKKyAgIC4uLiAgICAgICB3aGlsZSA4OgorICAgLi4uICAgICAgICB3aGlsZSA5OgorICAgLi4uICAgICAgICAgd2hpbGUgMTA6CisgICAuLi4gICAgICAgICAgd2hpbGUgMTE6CisgICAuLi4gICAgICAgICAgIHdoaWxlIDEyOgorICAgLi4uICAgICAgICAgICAgd2hpbGUgMTM6CisgICAuLi4gICAgICAgICAgICAgd2hpbGUgMTQ6CisgICAuLi4gICAgICAgICAgICAgIHdoaWxlIDE1OgorICAgLi4uICAgICAgICAgICAgICAgd2hpbGUgMTY6CisgICAuLi4gICAgICAgICAgICAgICAgd2hpbGUgMTc6CisgICAuLi4gICAgICAgICAgICAgICAgIHdoaWxlIDE4OgorICAgLi4uICAgICAgICAgICAgICAgICAgd2hpbGUgMTk6CisgICAuLi4gICAgICAgICAgICAgICAgICAgd2hpbGUgMjA6CisgICAuLi4gICAgICAgICAgICAgICAgICAgIHdoaWxlIDIxOgorICAgLi4uICAgICAgICAgICAgICAgICAgICAgd2hpbGUgMjI6CisgICAuLi4gICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgLi4uCisgICBTeXN0ZW1FcnJvcjogdG9vIG1hbnkgc3RhdGljYWxseSBuZXN0ZWQgYmxvY2tzCisKK1RoaXMgdGVzdHMgYXNzaWdubWVudC1jb250ZXh0OyB0aGVyZSB3YXMgYSBidWcgaW4gUHl0aG9uIDIuNSB3aGVyZSBjb21waWxpbmcKK2EgY29tcGxleCAnaWYnIChvbmUgd2l0aCAnZWxpZicpIHdvdWxkIGZhaWwgdG8gbm90aWNlIGFuIGludmFsaWQgc3VpdGUsCitsZWFkaW5nIHRvIHNwdXJpb3VzIGVycm9ycy4KKworICAgPj4+IGlmIDE6CisgICAuLi4gICB4KCkgPSAxCisgICAuLi4gZWxpZiAxOgorICAgLi4uICAgcGFzcworICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAuLi4KKyAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0NF0+IiwgbGluZSAyCisgICBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGZ1bmN0aW9uIGNhbGwKKworICAgPj4+IGlmIDE6CisgICAuLi4gICBwYXNzCisgICAuLi4gZWxpZiAxOgorICAgLi4uICAgeCgpID0gMQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAuLi4KKyAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0NV0+IiwgbGluZSA0CisgICBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGZ1bmN0aW9uIGNhbGwKKworICAgPj4+IGlmIDE6CisgICAuLi4gICB4KCkgPSAxCisgICAuLi4gZWxpZiAxOgorICAgLi4uICAgcGFzcworICAgLi4uIGVsc2U6CisgICAuLi4gICBwYXNzCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIC4uLgorICAgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzQ2XT4iLCBsaW5lIDIKKyAgIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbAorCisgICA+Pj4gaWYgMToKKyAgIC4uLiAgIHBhc3MKKyAgIC4uLiBlbGlmIDE6CisgICAuLi4gICB4KCkgPSAxCisgICAuLi4gZWxzZToKKyAgIC4uLiAgIHBhc3MKKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgLi4uCisgICAgIEZpbGUgIjxkb2N0ZXN0IHRlc3QudGVzdF9zeW50YXhbNDddPiIsIGxpbmUgNAorICAgU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBmdW5jdGlvbiBjYWxsCisKKyAgID4+PiBpZiAxOgorICAgLi4uICAgcGFzcworICAgLi4uIGVsaWYgMToKKyAgIC4uLiAgIHBhc3MKKyAgIC4uLiBlbHNlOgorICAgLi4uICAgeCgpID0gMQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAuLi4KKyAgICAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0OF0+IiwgbGluZSA2CisgICBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGZ1bmN0aW9uIGNhbGwKKworPj4+IGYoYT0yMywgYT0yMzQpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAuLi4KKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs0OV0+IiwgbGluZSAxCitTeW50YXhFcnJvcjoga2V5d29yZCBhcmd1bWVudCByZXBlYXRlZAorCis+Pj4gZGVsICgpCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAuLi4KKyAgRmlsZSAiPGRvY3Rlc3QgdGVzdC50ZXN0X3N5bnRheFs1MF0+IiwgbGluZSAxCitTeW50YXhFcnJvcjogY2FuJ3QgZGVsZXRlICgpCisKKz4+PiB7MSwgMiwgM30gPSA0MgorVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgLi4uCisgICBGaWxlICI8ZG9jdGVzdCB0ZXN0LnRlc3Rfc3ludGF4WzUwXT4iLCBsaW5lIDEKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gbGl0ZXJhbAorCitDb3JuZXItY2FzZSB0aGF0IHVzZWQgdG8gY3Jhc2g6CisKKyAgICA+Pj4gZGVmIGYoKnh4LCAqKl9fZGVidWdfXyk6IHBhc3MKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgU3ludGF4RXJyb3I6IGNhbm5vdCBhc3NpZ24gdG8gX19kZWJ1Z19fCisKKyIiIgorCitpbXBvcnQgcmUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIFN5bnRheFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfY2hlY2tfZXJyb3Ioc2VsZiwgY29kZSwgZXJydGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPSI8dGVzdGNhc2U+IiwgbW9kZT0iZXhlYyIsIHN1YmNsYXNzPU5vbmUpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGNvbXBpbGluZyBjb2RlIHJhaXNlcyBTeW50YXhFcnJvciB3aXRoIGVycnRleHQuCisKKyAgICAgICAgZXJydGVzdCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG11c3QgYmUgcHJlc2VudCBpbiB0aGUKKyAgICAgICAgdGVzdCBvZiB0aGUgZXhjZXB0aW9uIHJhaXNlZC4gIElmIHN1YmNsYXNzIGlzIHNwZWNpZmllZCBpdAorICAgICAgICBpcyB0aGUgZXhwZWN0ZWQgc3ViY2xhc3Mgb2YgU3ludGF4RXJyb3IgKGUuZy4gSW5kZW50YXRpb25FcnJvcikuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21waWxlKGNvZGUsIGZpbGVuYW1lLCBtb2RlKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IsIGVycjoKKyAgICAgICAgICAgIGlmIHN1YmNsYXNzIGFuZCBub3QgaXNpbnN0YW5jZShlcnIsIHN1YmNsYXNzKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlN5bnRheEVycm9yIGlzIG5vdCBhICVzIiAlIHN1YmNsYXNzLl9fbmFtZV9fKQorICAgICAgICAgICAgbW8gPSByZS5zZWFyY2goZXJydGV4dCwgc3RyKGVycikpCisgICAgICAgICAgICBpZiBtbyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXMgZGlkIG5vdCBjb250YWluICclciciICUgKGVyciwgZXJydGV4dCwpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJjb21waWxlKCkgZGlkIG5vdCByYWlzZSBTeW50YXhFcnJvciIpCisKKyAgICBkZWYgdGVzdF9wYXJlbl9hcmdfd2l0aF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19lcnJvcigiZGVmIGYoKHgpPTIzKTogcGFzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJlbnRoZXNpemVkIGFyZyB3aXRoIGRlZmF1bHQiKQorCisgICAgZGVmIHRlc3RfYXNzaWduX2NhbGwoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2Vycm9yKCJmKCkgPSAxIiwgImFzc2lnbiIpCisKKyAgICBkZWYgdGVzdF9hc3NpZ25fZGVsKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19lcnJvcigiZGVsIGYoKSIsICJkZWxldGUiKQorCisgICAgZGVmIHRlc3RfZ2xvYmFsX2Vycl90aGVuX3dhcm4oc2VsZik6CisgICAgICAgICMgQnVnIHRpY2tsZXI6ICBUaGUgU3ludGF4RXJyb3IgcmFpc2VkIGZvciBvbmUgZ2xvYmFsIHN0YXRlbWVudAorICAgICAgICAjIHNob3VsZG4ndCBiZSBjbG9iYmVyZWQgYnkgYSBTeW50YXhXYXJuaW5nIGlzc3VlZCBmb3IgYSBsYXRlciBvbmUuCisgICAgICAgIHNvdXJjZSA9IHJlLnN1YignKD9tKV4gKjonLCAnJywgIiIiXAorICAgICAgICAgICAgOmRlZiBlcnJvcihhKToKKyAgICAgICAgICAgIDogICAgZ2xvYmFsIGEgICMgU3ludGF4RXJyb3IKKyAgICAgICAgICAgIDpkZWYgd2FybmluZygpOgorICAgICAgICAgICAgOiAgICBiID0gMQorICAgICAgICAgICAgOiAgICBnbG9iYWwgYiAgIyBTeW50YXhXYXJuaW5nCisgICAgICAgICAgICA6IiIiKQorICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncyhhY3Rpb249J2lnbm9yZScsIGNhdGVnb3J5PVN5bnRheFdhcm5pbmcpCisgICAgICAgIHNlbGYuX2NoZWNrX2Vycm9yKHNvdXJjZSwgImdsb2JhbCIpCisgICAgICAgIHdhcm5pbmdzLmZpbHRlcnMucG9wKDApCisKKyAgICBkZWYgdGVzdF9icmVha19vdXRzaWRlX2xvb3Aoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2Vycm9yKCJicmVhayIsICJvdXRzaWRlIGxvb3AiKQorCisgICAgZGVmIHRlc3RfZGVsZXRlX2RlcmVmKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSByZS5zdWIoJyg/bSleICo6JywgJycsICIiIlwKKyAgICAgICAgICAgIDpkZWYgZm9vKHgpOgorICAgICAgICAgICAgOiAgZGVmIGJhcigpOgorICAgICAgICAgICAgOiAgICBwcmludCB4CisgICAgICAgICAgICA6ICBkZWwgeAorICAgICAgICAgICAgOiIiIikKKyAgICAgICAgc2VsZi5fY2hlY2tfZXJyb3Ioc291cmNlLCAibmVzdGVkIHNjb3BlIikKKworICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfaW5kZW50KHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19lcnJvcigiZm9vKClcbiBiYXIoKVxuIiwgInVuZXhwZWN0ZWQgaW5kZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViY2xhc3M9SW5kZW50YXRpb25FcnJvcikKKworICAgIGRlZiB0ZXN0X25vX2luZGVudChzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfZXJyb3IoImlmIDE6XG5mb28oKSIsICJleHBlY3RlZCBhbiBpbmRlbnRlZCBibG9jayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmNsYXNzPUluZGVudGF0aW9uRXJyb3IpCisKKyAgICBkZWYgdGVzdF9iYWRfb3V0ZGVudChzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfZXJyb3IoImlmIDE6XG4gIGZvbygpXG4gYmFyKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAidW5pbmRlbnQgZG9lcyBub3QgbWF0Y2ggLiogbGV2ZWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJjbGFzcz1JbmRlbnRhdGlvbkVycm9yKQorCisgICAgZGVmIHRlc3Rfa3dhcmdzX2xhc3Qoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2Vycm9yKCJpbnQoYmFzZT0xMCwgJzInKSIsICJub24ta2V5d29yZCBhcmciKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTeW50YXhUZXN0Q2FzZSkKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3ludGF4CisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygoImJhY2txdW90ZSBub3Qgc3VwcG9ydGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bnRheFdhcm5pbmcpKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3Rfc3ludGF4LCB2ZXJib3NpdHk9VHJ1ZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3lzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3lzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZWE2NTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zeXMucHkKQEAgLTAsMCArMSw3NzYgQEAKKyMgLSotIGNvZGluZzogaXNvLTg4NTktMSAtKi0KK2ltcG9ydCB1bml0dGVzdCwgdGVzdC50ZXN0X3N1cHBvcnQKK2ltcG9ydCBzeXMsIG9zLCBjU3RyaW5nSU8KK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBvcGVyYXRvcgorCitjbGFzcyBTeXNNb2R1bGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdGVzdC50ZXN0X3N1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKKyAgICBkZWYgdGVzdF9vcmlnaW5hbF9kaXNwbGF5aG9vayhzZWxmKToKKyAgICAgICAgaW1wb3J0IF9fYnVpbHRpbl9fCisgICAgICAgIHNhdmVzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIG91dCA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHN5cy5zdGRvdXQgPSBvdXQKKworICAgICAgICBkaCA9IHN5cy5fX2Rpc3BsYXlob29rX18KKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRoKQorICAgICAgICBpZiBoYXNhdHRyKF9fYnVpbHRpbl9fLCAiXyIpOgorICAgICAgICAgICAgZGVsIF9fYnVpbHRpbl9fLl8KKworICAgICAgICBkaChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXR2YWx1ZSgpLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKF9fYnVpbHRpbl9fLCAiXyIpKQorICAgICAgICBkaCg0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0dmFsdWUoKSwgIjQyXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9fYnVpbHRpbl9fLl8sIDQyKQorCisgICAgICAgIGRlbCBzeXMuc3Rkb3V0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZGgsIDQyKQorCisgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlc3Rkb3V0CisKKyAgICBkZWYgdGVzdF9sb3N0X2Rpc3BsYXlob29rKHNlbGYpOgorICAgICAgICBvbGRkaXNwbGF5aG9vayA9IHN5cy5kaXNwbGF5aG9vaworICAgICAgICBkZWwgc3lzLmRpc3BsYXlob29rCisgICAgICAgIGNvZGUgPSBjb21waWxlKCI0MiIsICI8c3RyaW5nPiIsICJzaW5nbGUiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGV2YWwsIGNvZGUpCisgICAgICAgIHN5cy5kaXNwbGF5aG9vayA9IG9sZGRpc3BsYXlob29rCisKKyAgICBkZWYgdGVzdF9jdXN0b21fZGlzcGxheWhvb2soc2VsZik6CisgICAgICAgIG9sZGRpc3BsYXlob29rID0gc3lzLmRpc3BsYXlob29rCisgICAgICAgIGRlZiBiYWRkaXNwbGF5aG9vayhvYmopOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzeXMuZGlzcGxheWhvb2sgPSBiYWRkaXNwbGF5aG9vaworICAgICAgICBjb2RlID0gY29tcGlsZSgiNDIiLCAiPHN0cmluZz4iLCAic2luZ2xlIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXZhbCwgY29kZSkKKyAgICAgICAgc3lzLmRpc3BsYXlob29rID0gb2xkZGlzcGxheWhvb2sKKworICAgIGRlZiB0ZXN0X29yaWdpbmFsX2V4Y2VwdGhvb2soc2VsZik6CisgICAgICAgIHNhdmVzdGRlcnIgPSBzeXMuc3RkZXJyCisgICAgICAgIGVyciA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHN5cy5zdGRlcnIgPSBlcnIKKworICAgICAgICBlaCA9IHN5cy5fX2V4Y2VwdGhvb2tfXworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZWgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoNDIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBleGM6CisgICAgICAgICAgICBlaCgqc3lzLmV4Y19pbmZvKCkpCisKKyAgICAgICAgc3lzLnN0ZGVyciA9IHNhdmVzdGRlcnIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5nZXR2YWx1ZSgpLmVuZHN3aXRoKCJWYWx1ZUVycm9yOiA0MlxuIikpCisKKyAgICAjIEZJWE1FOiB0ZXN0aW5nIHRoZSBjb2RlIGZvciBhIGxvc3Qgb3IgcmVwbGFjZWQgZXhjZXB0aG9vayBpbgorICAgICMgUHl0aG9uL3B5dGhvbnJ1bi5jOjpQeUVycl9QcmludEV4KCkgaXMgdHJpY2t5LgorCisgICAgZGVmIHRlc3RfZXhjX2NsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5leGNfY2xlYXIsIDQyKQorCisgICAgICAgICMgVmVyaWZ5IHRoYXQgZXhjX2luZm8gaXMgcHJlc2VudCBhbmQgbWF0Y2hlcyBleGMsIHRoZW4gY2xlYXIgaXQsIGFuZAorICAgICAgICAjIGNoZWNrIHRoYXQgaXQgd29ya2VkLgorICAgICAgICBkZWYgY2xlYXJfY2hlY2soZXhjKToKKyAgICAgICAgICAgIHR5cCwgdmFsdWUsIHRyYWNlYmFjayA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwIGlzIG5vdCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbHVlIGlzIGV4YykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFjZWJhY2sgaXMgbm90IE5vbmUpCisKKyAgICAgICAgICAgIHdpdGggdGVzdC50ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHN5cy5leGNfY2xlYXIoKQorCisgICAgICAgICAgICB0eXAsIHZhbHVlLCB0cmFjZWJhY2sgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cCBpcyBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbHVlIGlzIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhY2ViYWNrIGlzIE5vbmUpCisKKyAgICAgICAgZGVmIGNsZWFyKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgNDIKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBleGM6CisgICAgICAgICAgICAgICAgY2xlYXJfY2hlY2soZXhjKQorCisgICAgICAgICMgUmFpc2UgYW4gZXhjZXB0aW9uIGFuZCBjaGVjayB0aGF0IGl0IGNhbiBiZSBjbGVhcmVkCisgICAgICAgIGNsZWFyKCkKKworICAgICAgICAjIFZlcmlmeSB0aGF0IGEgZnJhbWUgY3VycmVudGx5IGhhbmRsaW5nIGFuIGV4Y2VwdGlvbiBpcworICAgICAgICAjIHVuYWZmZWN0ZWQgYnkgY2FsbGluZyBleGNfY2xlYXIgaW4gYSBuZXN0ZWQgZnJhbWUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsIDEzCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBleGM6CisgICAgICAgICAgICB0eXAxLCB2YWx1ZTEsIHRyYWNlYmFjazEgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgY2xlYXIoKQorICAgICAgICAgICAgdHlwMiwgdmFsdWUyLCB0cmFjZWJhY2syID0gc3lzLmV4Y19pbmZvKCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cDEgaXMgdHlwMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWx1ZTEgaXMgZXhjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbHVlMSBpcyB2YWx1ZTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhY2ViYWNrMSBpcyB0cmFjZWJhY2syKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCBhbiBleGNlcHRpb24gY2FuIGJlIGNsZWFyZWQgb3V0c2lkZSBvZiBhbiBleGNlcHQgYmxvY2sKKyAgICAgICAgY2xlYXJfY2hlY2soZXhjKQorCisgICAgZGVmIHRlc3RfZXhpdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuZXhpdCwgNDIsIDQyKQorCisgICAgICAgICMgY2FsbCB3aXRob3V0IGFyZ3VtZW50CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5leGl0KDApCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0LCBleGM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Yy5jb2RlLCAwKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIndyb25nIGV4Y2VwdGlvbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgIyBjYWxsIHdpdGggdHVwbGUgYXJndW1lbnQgd2l0aCBvbmUgZW50cnkKKyAgICAgICAgIyBlbnRyeSB3aWxsIGJlIHVucGFja2VkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5leGl0KDQyKQorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCwgZXhjOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGMuY29kZSwgNDIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXhjZXB0aW9uIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gZXhjZXB0aW9uIikKKworICAgICAgICAjIGNhbGwgd2l0aCBpbnRlZ2VyIGFyZ3VtZW50CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5leGl0KCg0MiwpKQorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCwgZXhjOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGMuY29kZSwgNDIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgZXhjZXB0aW9uIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gZXhjZXB0aW9uIikKKworICAgICAgICAjIGNhbGwgd2l0aCBzdHJpbmcgYXJndW1lbnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLmV4aXQoImV4aXQiKQorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCwgZXhjOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGMuY29kZSwgImV4aXQiKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIndyb25nIGV4Y2VwdGlvbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgIyBjYWxsIHdpdGggdHVwbGUgYXJndW1lbnQgd2l0aCB0d28gZW50cmllcworICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuZXhpdCgoMTcsIDIzKSkKKyAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQsIGV4YzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLmNvZGUsICgxNywgMjMpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIndyb25nIGV4Y2VwdGlvbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIGV4Y2VwdGlvbiIpCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgdGhlIGV4aXQgbWFjaGluZXJ5IGhhbmRsZXMgU3lzdGVtRXhpdHMgcHJvcGVybHkKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgIyBib3RoIHVubm9ybWFsaXplZC4uLgorICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmFpc2UgU3lzdGVtRXhpdCwgNDYiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgNDYpCisgICAgICAgICMgLi4uIGFuZCBub3JtYWxpemVkCisgICAgICAgIHJjID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyYWlzZSBTeXN0ZW1FeGl0KDQ3KSJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCA0NykKKworICAgICAgICBkZWYgY2hlY2tfZXhpdF9tZXNzYWdlKGNvZGUsIGV4cGVjdGVkLCBlbnY9Tm9uZSk6CisgICAgICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsIGNvZGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgZW52PWVudikKKyAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Nlc3MucmV0dXJuY29kZSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGRlcnIuc3RhcnRzd2l0aChleHBlY3RlZCksCisgICAgICAgICAgICAgICAgIiVzIGRvZXNuJ3Qgc3RhcnQgd2l0aCAlcyIgJSAocmVwcihzdGRlcnIpLCByZXByKGV4cGVjdGVkKSkpCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgc3RkZXJyIGJ1ZmZlciBpZiBmbHVzaGVkIGJlZm9yZSB0aGUgZXhpdCBtZXNzYWdlIGlzIHdyaXR0ZW4KKyAgICAgICAgIyBpbnRvIHN0ZGVycgorICAgICAgICBjaGVja19leGl0X21lc3NhZ2UoCisgICAgICAgICAgICByJ2ltcG9ydCBzeXM7IHN5cy5zdGRlcnIud3JpdGUoInVuZmx1c2hlZCwiKTsgc3lzLmV4aXQoIm1lc3NhZ2UiKScsCisgICAgICAgICAgICBiInVuZmx1c2hlZCxtZXNzYWdlIikKKworICAgICAgICAjIHRlc3QgdGhhdCB0aGUgdW5pY29kZSBtZXNzYWdlIGlzIGVuY29kZWQgdG8gdGhlIHN0ZGVyciBlbmNvZGluZworICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbJ1BZVEhPTklPRU5DT0RJTkcnXSA9ICdsYXRpbi0xJworICAgICAgICBjaGVja19leGl0X21lc3NhZ2UoCisgICAgICAgICAgICByJ2ltcG9ydCBzeXM7IHN5cy5leGl0KHUiaFx4ZTkiKScsCisgICAgICAgICAgICBiImhceGU5IiwgZW52PWVudikKKworICAgIGRlZiB0ZXN0X2dldGRlZmF1bHRlbmNvZGluZyhzZWxmKToKKyAgICAgICAgaWYgdGVzdC50ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuZ2V0ZGVmYXVsdGVuY29kaW5nLCA0MikKKyAgICAgICAgICAgICMgY2FuJ3QgY2hlY2sgbW9yZSB0aGFuIHRoZSB0eXBlLCBhcyB0aGUgdXNlciBtaWdodCBoYXZlIGNoYW5nZWQgaXQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuZ2V0ZGVmYXVsdGVuY29kaW5nKCksIHN0cikKKworICAgICMgdGVzdGluZyBzeXMuc2V0dHJhY2UoKSBpcyBkb25lIGluIHRlc3Rfc3lzX3NldHRyYWNlLnB5CisgICAgIyB0ZXN0aW5nIHN5cy5zZXRwcm9maWxlKCkgaXMgZG9uZSBpbiB0ZXN0X3N5c19zZXRwcm9maWxlLnB5CisKKyAgICBkZWYgdGVzdF9zZXRjaGVja2ludGVydmFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5zZXRjaGVja2ludGVydmFsKQorICAgICAgICBvcmlnID0gc3lzLmdldGNoZWNraW50ZXJ2YWwoKQorICAgICAgICBmb3IgbiBpbiAwLCAxMDAsIDEyMCwgb3JpZzogIyBvcmlnIGxhc3QgdG8gcmVzdG9yZSBzdGFydGluZyBzdGF0ZQorICAgICAgICAgICAgc3lzLnNldGNoZWNraW50ZXJ2YWwobikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldGNoZWNraW50ZXJ2YWwoKSwgbikKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbmxpbWl0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5nZXRyZWN1cnNpb25saW1pdCwgNDIpCisgICAgICAgIG9sZGxpbWl0ID0gc3lzLmdldHJlY3Vyc2lvbmxpbWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuc2V0cmVjdXJzaW9ubGltaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN5cy5zZXRyZWN1cnNpb25saW1pdCwgLTQyKQorICAgICAgICBzeXMuc2V0cmVjdXJzaW9ubGltaXQoMTAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHJlY3Vyc2lvbmxpbWl0KCksIDEwMDAwKQorICAgICAgICBzeXMuc2V0cmVjdXJzaW9ubGltaXQob2xkbGltaXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc3lzLnNldHJlY3Vyc2lvbmxpbWl0LCAxIDw8IDMxKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuc2V0cmVjdXJzaW9ubGltaXQoKDEgPDwgMzEpIC0gNSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIGlzc3VlMTM1NDY6IGlzaW5zdGFuY2UoZSwgVmFsdWVFcnJvcikgdXNlZCB0byBmYWlsCisgICAgICAgICAgICAgICAgIyB3aGVuIHRoZSByZWN1cnNpb24gbGltaXQgaXMgY2xvc2UgdG8gMTw8MzEKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zZXRyZWN1cnNpb25saW1pdChvbGRsaW1pdCkKKworICAgIGRlZiB0ZXN0X2dldHdpbmRvd3N2ZXJzaW9uKHNlbGYpOgorICAgICAgICAjIFJhaXNlIFNraXBUZXN0IGlmIHN5cyBkb2Vzbid0IGhhdmUgZ2V0d2luZG93c3ZlcnNpb24gYXR0cmlidXRlCisgICAgICAgIHRlc3QudGVzdF9zdXBwb3J0LmdldF9hdHRyaWJ1dGUoc3lzLCAiZ2V0d2luZG93c3ZlcnNpb24iKQorICAgICAgICB2ID0gc3lzLmdldHdpbmRvd3N2ZXJzaW9uKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2WzBdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2WzFdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2WzJdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2WzNdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2WzRdLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0sIHYsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2Lm1ham9yLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2Lm1pbm9yLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LmJ1aWxkLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LnBsYXRmb3JtLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LnNlcnZpY2VfcGFjaywgc3RyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uodi5zZXJ2aWNlX3BhY2tfbWlub3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYuc2VydmljZV9wYWNrX21ham9yLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LnN1aXRlX21hc2ssIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYucHJvZHVjdF90eXBlLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodlswXSwgdi5tYWpvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2WzFdLCB2Lm1pbm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbMl0sIHYuYnVpbGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodlszXSwgdi5wbGF0Zm9ybSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2WzRdLCB2LnNlcnZpY2VfcGFjaykKKworICAgICAgICAjIFRoaXMgaXMgaG93IHBsYXRmb3JtLnB5IGNhbGxzIGl0LiBNYWtlIHN1cmUgdHVwbGUKKyAgICAgICAgIyAgc3RpbGwgaGFzIDUgZWxlbWVudHMKKyAgICAgICAgbWFqLCBtaW4sIGJ1aWxkbm8sIHBsYXQsIGNzZCA9IHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpCisKKyAgICBkZWYgdGVzdF9kbG9wZW5mbGFncyhzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihzeXMsICJzZXRkbG9wZW5mbGFncyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3lzLCAiZ2V0ZGxvcGVuZmxhZ3MiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLmdldGRsb3BlbmZsYWdzLCA0MikKKyAgICAgICAgICAgIG9sZGZsYWdzID0gc3lzLmdldGRsb3BlbmZsYWdzKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLnNldGRsb3BlbmZsYWdzKQorICAgICAgICAgICAgc3lzLnNldGRsb3BlbmZsYWdzKG9sZGZsYWdzKzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRkbG9wZW5mbGFncygpLCBvbGRmbGFncysxKQorICAgICAgICAgICAgc3lzLnNldGRsb3BlbmZsYWdzKG9sZGZsYWdzKQorCisgICAgZGVmIHRlc3RfcmVmY291bnQoc2VsZik6CisgICAgICAgICMgbiBoZXJlIG11c3QgYmUgYSBnbG9iYWwgaW4gb3JkZXIgZm9yIHRoaXMgdGVzdCB0byBwYXNzIHdoaWxlCisgICAgICAgICMgdHJhY2luZyB3aXRoIGEgcHl0aG9uIGZ1bmN0aW9uLiAgVHJhY2luZyBjYWxscyBQeUZyYW1lX0Zhc3RUb0xvY2FscworICAgICAgICAjIHdoaWNoIHdpbGwgYWRkIGEgY29weSBvZiBhbnkgbG9jYWxzIHRvIHRoZSBmcmFtZSBvYmplY3QsIGNhdXNpbmcKKyAgICAgICAgIyB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIGluY3JlYXNlIGJ5IDIgaW5zdGVhZCBvZiAxLgorICAgICAgICBnbG9iYWwgbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5nZXRyZWZjb3VudCkKKyAgICAgICAgYyA9IHN5cy5nZXRyZWZjb3VudChOb25lKQorICAgICAgICBuID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWZjb3VudChOb25lKSwgYysxKQorICAgICAgICBkZWwgbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWZjb3VudChOb25lKSwgYykKKyAgICAgICAgaWYgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmdldHRvdGFscmVmY291bnQoKSwgaW50KQorCisgICAgZGVmIHRlc3RfZ2V0ZnJhbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLl9nZXRmcmFtZSwgNDIsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzeXMuX2dldGZyYW1lLCAyMDAwMDAwMDAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBTeXNNb2R1bGVUZXN0LnRlc3RfZ2V0ZnJhbWUuaW1fZnVuYy5mdW5jX2NvZGUgXAorICAgICAgICAgICAgaXMgc3lzLl9nZXRmcmFtZSgpLmZfY29kZQorICAgICAgICApCisKKyAgICAjIHN5cy5fY3VycmVudF9mcmFtZXMoKSBpcyBhIENQeXRob24tb25seSBnaW1taWNrLgorICAgIGRlZiB0ZXN0X2N1cnJlbnRfZnJhbWVzKHNlbGYpOgorICAgICAgICBoYXZlX3RocmVhZHMgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWQKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgaGF2ZV90aHJlYWRzID0gRmFsc2UKKworICAgICAgICBpZiBoYXZlX3RocmVhZHM6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWVzX3dpdGhfdGhyZWFkcygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWVzX3dpdGhvdXRfdGhyZWFkcygpCisKKyAgICAjIFRlc3Qgc3lzLl9jdXJyZW50X2ZyYW1lcygpIGluIGEgV0lUSF9USFJFQURTIGJ1aWxkLgorICAgIEB0ZXN0LnRlc3Rfc3VwcG9ydC5yZWFwX3RocmVhZHMKKyAgICBkZWYgY3VycmVudF9mcmFtZXNfd2l0aF90aHJlYWRzKHNlbGYpOgorICAgICAgICBpbXBvcnQgdGhyZWFkaW5nLCB0aHJlYWQKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworCisgICAgICAgICMgU3Bhd24gYSB0aHJlYWQgdGhhdCBibG9ja3MgYXQgYSBrbm93biBwbGFjZS4gIFRoZW4gdGhlIG1haW4KKyAgICAgICAgIyB0aHJlYWQgZG9lcyBzeXMuX2N1cnJlbnRfZnJhbWVzKCksIGFuZCB2ZXJpZmllcyB0aGF0IHRoZSBmcmFtZXMKKyAgICAgICAgIyByZXR1cm5lZCBtYWtlIHNlbnNlLgorICAgICAgICBlbnRlcmVkX2cgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBsZWF2ZV9nID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgdGhyZWFkX2luZm8gPSBbXSAgIyB0aGUgdGhyZWFkJ3MgaWQKKworICAgICAgICBkZWYgZjEyMygpOgorICAgICAgICAgICAgZzQ1NigpCisKKyAgICAgICAgZGVmIGc0NTYoKToKKyAgICAgICAgICAgIHRocmVhZF9pbmZvLmFwcGVuZCh0aHJlYWQuZ2V0X2lkZW50KCkpCisgICAgICAgICAgICBlbnRlcmVkX2cuc2V0KCkKKyAgICAgICAgICAgIGxlYXZlX2cud2FpdCgpCisKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYxMjMpCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBlbnRlcmVkX2cud2FpdCgpCisKKyAgICAgICAgIyBBdCB0aGlzIHBvaW50LCB0IGhhcyBmaW5pc2hlZCBpdHMgZW50ZXJlZF9nLnNldCgpLCBhbHRob3VnaCBpdCdzCisgICAgICAgICMgaW1wb3NzaWJsZSB0byBndWVzcyB3aGV0aGVyIGl0J3Mgc3RpbGwgb24gdGhhdCBsaW5lIG9yIGhhcyBtb3ZlZCBvbgorICAgICAgICAjIHRvIGl0cyBsZWF2ZV9nLndhaXQoKS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGhyZWFkX2luZm8pLCAxKQorICAgICAgICB0aHJlYWRfaWQgPSB0aHJlYWRfaW5mb1swXQorCisgICAgICAgIGQgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkKKworICAgICAgICBtYWluX2lkID0gdGhyZWFkLmdldF9pZGVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obWFpbl9pZCwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0aHJlYWRfaWQsIGQpCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgY2FwdHVyZWQgbWFpbi10aHJlYWQgZnJhbWUgaXMgX3RoaXNfIGZyYW1lLgorICAgICAgICBmcmFtZSA9IGQucG9wKG1haW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmcmFtZSBpcyBzeXMuX2dldGZyYW1lKCkpCisKKyAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgY2FwdHVyZWQgdGhyZWFkIGZyYW1lIGlzIGJsb2NrZWQgaW4gZzQ1NiwgY2FsbGVkCisgICAgICAgICMgZnJvbSBmMTIzLiAgVGhpcyBpcyBhIGxpdHRlIHRyaWNreSwgc2luY2UgdmFyaW91cyBiaXRzIG9mCisgICAgICAgICMgdGhyZWFkaW5nLnB5IGFyZSBhbHNvIGluIHRoZSB0aHJlYWQncyBjYWxsIHN0YWNrLgorICAgICAgICBmcmFtZSA9IGQucG9wKHRocmVhZF9pZCkKKyAgICAgICAgc3RhY2sgPSB0cmFjZWJhY2suZXh0cmFjdF9zdGFjayhmcmFtZSkKKyAgICAgICAgZm9yIGksIChmaWxlbmFtZSwgbGluZW5vLCBmdW5jbmFtZSwgc291cmNlbGluZSkgaW4gZW51bWVyYXRlKHN0YWNrKToKKyAgICAgICAgICAgIGlmIGZ1bmNuYW1lID09ICJmMTIzIjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJkaWRuJ3QgZmluZCBmMTIzKCkgb24gdGhyZWFkJ3MgY2FsbCBzdGFjayIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3VyY2VsaW5lLCAiZzQ1NigpIikKKworICAgICAgICAjIEFuZCB0aGUgbmV4dCByZWNvcmQgbXVzdCBiZSBmb3IgZzQ1NigpLgorICAgICAgICBmaWxlbmFtZSwgbGluZW5vLCBmdW5jbmFtZSwgc291cmNlbGluZSA9IHN0YWNrW2krMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jbmFtZSwgImc0NTYiKQorICAgICAgICBzZWxmLmFzc2VydEluKHNvdXJjZWxpbmUsIFsibGVhdmVfZy53YWl0KCkiLCAiZW50ZXJlZF9nLnNldCgpIl0pCisKKyAgICAgICAgIyBSZWFwIHRoZSBzcGF3bmVkIHRocmVhZC4KKyAgICAgICAgbGVhdmVfZy5zZXQoKQorICAgICAgICB0LmpvaW4oKQorCisgICAgIyBUZXN0IHN5cy5fY3VycmVudF9mcmFtZXMoKSB3aGVuIHRocmVhZCBzdXBwb3J0IGRvZXNuJ3QgZXhpc3QuCisgICAgZGVmIGN1cnJlbnRfZnJhbWVzX3dpdGhvdXRfdGhyZWFkcyhzZWxmKToKKyAgICAgICAgIyBOb3QgbXVjaCBoYXBwZW5zIGhlcmU6ICB0aGVyZSBpcyBvbmx5IG9uZSB0aHJlYWQsIHdpdGggYXJ0aWZpY2lhbAorICAgICAgICAjICJ0aHJlYWQgaWQiIDAuCisgICAgICAgIGQgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMCwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRbMF0gaXMgc3lzLl9nZXRmcmFtZSgpKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5hcGlfdmVyc2lvbiwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmFyZ3YsIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3lzLmJ5dGVvcmRlciwgKCJsaXR0bGUiLCAiYmlnIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMsIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmNvcHlyaWdodCwgYmFzZXN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5leGVjX3ByZWZpeCwgYmFzZXN0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5leGVjdXRhYmxlLCBiYXNlc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzeXMuZmxvYXRfaW5mbyksIDExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5mbG9hdF9pbmZvLnJhZGl4LCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzeXMubG9uZ19pbmZvKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN5cy5sb25nX2luZm8uYml0c19wZXJfZGlnaXQgJSA1ID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzeXMubG9uZ19pbmZvLnNpemVvZl9kaWdpdCA+PSAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc3lzLmxvbmdfaW5mby5iaXRzX3Blcl9kaWdpdCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHN5cy5sb25nX2luZm8uc2l6ZW9mX2RpZ2l0KSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmhleHZlcnNpb24sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5tYXhpbnQsIGludCkKKyAgICAgICAgaWYgdGVzdC50ZXN0X3N1cHBvcnQuaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5tYXh1bmljb2RlLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMucGxhdGZvcm0sIGJhc2VzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMucHJlZml4LCBiYXNlc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLnZlcnNpb24sIGJhc2VzdHJpbmcpCisgICAgICAgIHZpID0gc3lzLnZlcnNpb25faW5mbworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmlbOl0sIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2aSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aVswXSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmlbMV0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZpWzJdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odmlbM10sICgiYWxwaGEiLCAiYmV0YSIsICJjYW5kaWRhdGUiLCAiZmluYWwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZpWzRdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aS5tYWpvciwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmkubWlub3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZpLm1pY3JvLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odmkucmVsZWFzZWxldmVsLCAoImFscGhhIiwgImJldGEiLCAiY2FuZGlkYXRlIiwgImZpbmFsIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aS5zZXJpYWwsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aVswXSwgdmkubWFqb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlbMV0sIHZpLm1pbm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpWzJdLCB2aS5taWNybykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aVszXSwgdmkucmVsZWFzZWxldmVsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpWzRdLCB2aS5zZXJpYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2aSA+ICgxLDAsMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuZmxvYXRfcmVwcl9zdHlsZSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEluKHN5cy5mbG9hdF9yZXByX3N0eWxlLCAoJ3Nob3J0JywgJ2xlZ2FjeScpKQorCisgICAgZGVmIHRlc3RfNDM1ODEoc2VsZik6CisgICAgICAgICMgQ2FuJ3QgdXNlIHN5cy5zdGRvdXQsIGFzIHRoaXMgaXMgYSBjU3RyaW5nSU8gb2JqZWN0IHdoZW4KKyAgICAgICAgIyB0aGUgdGVzdCBydW5zIHVuZGVyIHJlZ3J0ZXN0LgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3lzLl9fc3Rkb3V0X18uZW5jb2RpbmcgPT0gc3lzLl9fc3RkZXJyX18uZW5jb2RpbmcpCisKKyAgICBkZWYgdGVzdF9zeXNfZmxhZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzeXMuZmxhZ3MpCisgICAgICAgIGF0dHJzID0gKCJkZWJ1ZyIsICJweTNrX3dhcm5pbmciLCAiZGl2aXNpb25fd2FybmluZyIsICJkaXZpc2lvbl9uZXciLAorICAgICAgICAgICAgICAgICAiaW5zcGVjdCIsICJpbnRlcmFjdGl2ZSIsICJvcHRpbWl6ZSIsICJkb250X3dyaXRlX2J5dGVjb2RlIiwKKyAgICAgICAgICAgICAgICAgIm5vX3NpdGUiLCAiaWdub3JlX2Vudmlyb25tZW50IiwgInRhYmNoZWNrIiwgInZlcmJvc2UiLAorICAgICAgICAgICAgICAgICAidW5pY29kZSIsICJieXRlc193YXJuaW5nIiwgImhhc2hfcmFuZG9taXphdGlvbiIpCisgICAgICAgIGZvciBhdHRyIGluIGF0dHJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3lzLmZsYWdzLCBhdHRyKSwgYXR0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShnZXRhdHRyKHN5cy5mbGFncywgYXR0cikpLCBpbnQsIGF0dHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHN5cy5mbGFncykpCisKKyAgICBkZWYgdGVzdF9jbGVhcl90eXBlX2NhY2hlKHNlbGYpOgorICAgICAgICBzeXMuX2NsZWFyX3R5cGVfY2FjaGUoKQorCisgICAgZGVmIHRlc3RfaW9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgZW52ID0gZGljdChvcy5lbnZpcm9uKQorCisgICAgICAgICMgVGVzdCBjaGFyYWN0ZXI6IGNlbnQgc2lnbiwgZW5jb2RlZCBhcyAweDRBIChBU0NJSSBKKSBpbiBDUDQyNCwKKyAgICAgICAgIyBub3QgcmVwcmVzZW50YWJsZSBpbiBBU0NJSS4KKworICAgICAgICBlbnZbIlBZVEhPTklPRU5DT0RJTkciXSA9ICJjcDQyNCIKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAncHJpbnQgdW5pY2hyKDB4YTIpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dCA9IHN1YnByb2Nlc3MuUElQRSwgZW52PWVudikKKyAgICAgICAgb3V0ID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIHVuaWNocigweGEyKS5lbmNvZGUoImNwNDI0IikpCisKKyAgICAgICAgZW52WyJQWVRIT05JT0VOQ09ESU5HIl0gPSAiYXNjaWk6cmVwbGFjZSIKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAncHJpbnQgdW5pY2hyKDB4YTIpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dCA9IHN1YnByb2Nlc3MuUElQRSwgZW52PWVudikKKyAgICAgICAgb3V0ID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsICc/JykKKworICAgIGRlZiB0ZXN0X2NhbGxfdHJhY2luZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuY2FsbF90cmFjaW5nKHN0ciwgKDIsKSksICIyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuY2FsbF90cmFjaW5nLCBzdHIsIDIpCisKKyAgICBkZWYgdGVzdF9leGVjdXRhYmxlKHNlbGYpOgorICAgICAgICAjIHN5cy5leGVjdXRhYmxlIHNob3VsZCBiZSBhYnNvbHV0ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYWJzcGF0aChzeXMuZXhlY3V0YWJsZSksIHN5cy5leGVjdXRhYmxlKQorCisgICAgICAgICMgSXNzdWUgIzc3NzQ6IEVuc3VyZSB0aGF0IHN5cy5leGVjdXRhYmxlIGlzIGFuIGVtcHR5IHN0cmluZyBpZiBhcmd2WzBdCisgICAgICAgICMgaGFzIGJlZW4gc2V0IHRvIGFuIG5vbiBleGlzdGVudCBwcm9ncmFtIG5hbWUgYW5kIFB5dGhvbiBpcyB1bmFibGUgdG8KKyAgICAgICAgIyByZXRyaWV2ZSB0aGUgcmVhbCBwcm9ncmFtIG5hbWUKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgIyBGb3IgYSBub3JtYWwgaW5zdGFsbGF0aW9uLCBpdCBzaG91bGQgd29yayB3aXRob3V0ICdjd2QnCisgICAgICAgICMgYXJndW1lbnQuIEZvciB0ZXN0IHJ1bnMgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSwgc2VlICM3Nzc0LgorICAgICAgICBweXRob25fZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgIFsibm9uZXhpc3RlbnQiLCAiLWMiLCAnaW1wb3J0IHN5czsgcHJpbnQgcmVwcihzeXMuZXhlY3V0YWJsZSknXSwKKyAgICAgICAgICAgIGV4ZWN1dGFibGU9c3lzLmV4ZWN1dGFibGUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGN3ZD1weXRob25fZGlyKQorICAgICAgICBleGVjdXRhYmxlID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKKyAgICAgICAgcC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihleGVjdXRhYmxlLCBbIicnIiwgcmVwcihzeXMuZXhlY3V0YWJsZSldKQorCitjbGFzcyBTaXplb2ZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5QID0gc3RydWN0LmNhbGNzaXplKCdQJykKKyAgICAgICAgc2VsZi5sb25nZGlnaXQgPSBzeXMubG9uZ19pbmZvLnNpemVvZl9kaWdpdAorICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgIHNlbGYuZ2NfaGVhZHNpemUgPSBfdGVzdGNhcGkuU0laRU9GX1BZR0NfSEVBRAorICAgICAgICBzZWxmLmZpbGUgPSBvcGVuKHRlc3QudGVzdF9zdXBwb3J0LlRFU1RGTiwgJ3diJykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKKyAgICAgICAgdGVzdC50ZXN0X3N1cHBvcnQudW5saW5rKHRlc3QudGVzdF9zdXBwb3J0LlRFU1RGTikKKworICAgIGNoZWNrX3NpemVvZiA9IHRlc3QudGVzdF9zdXBwb3J0LmNoZWNrX3NpemVvZgorCisgICAgZGVmIHRlc3RfZ2NfaGVhZF9zaXplKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgdGhlIGdjIGhlYWRlciBzaXplIGlzIGFkZGVkIHRvIG9iamVjdHMgdHJhY2tlZCBieSB0aGUgZ2MuCisgICAgICAgIHNpemUgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5jYWxjb2Jqc2l6ZQorICAgICAgICBnY19oZWFkZXJfc2l6ZSA9IHNlbGYuZ2NfaGVhZHNpemUKKyAgICAgICAgIyBib29sIG9iamVjdHMgYXJlIG5vdCBnYyB0cmFja2VkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHNpemVvZihUcnVlKSwgc2l6ZSgnbCcpKQorICAgICAgICAjIGJ1dCBsaXN0cyBhcmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0c2l6ZW9mKFtdKSwgc2l6ZSgnUCBQUCcpICsgZ2NfaGVhZGVyX3NpemUpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzaXplID0gdGVzdC50ZXN0X3N1cHBvcnQuY2FsY29ianNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0c2l6ZW9mKFRydWUsIC0xKSwgc2l6ZSgnbCcpKQorCisgICAgZGVmIHRlc3Rfb2JqZWN0dHlwZXMoc2VsZik6CisgICAgICAgICMgY2hlY2sgYWxsIHR5cGVzIGRlZmluZWQgaW4gT2JqZWN0cy8KKyAgICAgICAgc2l6ZSA9IHRlc3QudGVzdF9zdXBwb3J0LmNhbGNvYmpzaXplCisgICAgICAgIHZzaXplID0gdGVzdC50ZXN0X3N1cHBvcnQuY2FsY3ZvYmpzaXplCisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKKyAgICAgICAgIyBib29sCisgICAgICAgIGNoZWNrKFRydWUsIHNpemUoJ2wnKSkKKyAgICAgICAgIyBidWZmZXIKKyAgICAgICAgd2l0aCB0ZXN0LnRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICBjaGVjayhidWZmZXIoJycpLCBzaXplKCcyUDJQaWwnKSkKKyAgICAgICAgIyBidWlsdGluX2Z1bmN0aW9uX29yX21ldGhvZAorICAgICAgICBjaGVjayhsZW4sIHNpemUoJzNQJykpCisgICAgICAgICMgYnl0ZWFycmF5CisgICAgICAgIHNhbXBsZXMgPSBbJycsICd1JyoxMDAwMDBdCisgICAgICAgIGZvciBzYW1wbGUgaW4gc2FtcGxlczoKKyAgICAgICAgICAgIHggPSBieXRlYXJyYXkoc2FtcGxlKQorICAgICAgICAgICAgY2hlY2soeCwgdnNpemUoJ2lQUCcpICsgeC5fX2FsbG9jX18oKSkKKyAgICAgICAgIyBieXRlYXJyYXlfaXRlcmF0b3IKKyAgICAgICAgY2hlY2soaXRlcihieXRlYXJyYXkoKSksIHNpemUoJ1BQJykpCisgICAgICAgICMgY2VsbAorICAgICAgICBkZWYgZ2V0X2NlbGwoKToKKyAgICAgICAgICAgIHggPSA0MgorICAgICAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgICAgIHJldHVybiBpbm5lcgorICAgICAgICBjaGVjayhnZXRfY2VsbCgpLmZ1bmNfY2xvc3VyZVswXSwgc2l6ZSgnUCcpKQorICAgICAgICAjIGNsYXNzb2JqIChvbGQtc3R5bGUgY2xhc3MpCisgICAgICAgIGNsYXNzIGNsYXNzX29sZHN0eWxlKCk6CisgICAgICAgICAgICBkZWYgbWV0aG9kKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjaGVjayhjbGFzc19vbGRzdHlsZSwgc2l6ZSgnN1AnKSkKKyAgICAgICAgIyBpbnN0YW5jZSAob2xkLXN0eWxlIGNsYXNzKQorICAgICAgICBjaGVjayhjbGFzc19vbGRzdHlsZSgpLCBzaXplKCczUCcpKQorICAgICAgICAjIGluc3RhbmNlbWV0aG9kIChvbGQtc3R5bGUgY2xhc3MpCisgICAgICAgIGNoZWNrKGNsYXNzX29sZHN0eWxlKCkubWV0aG9kLCBzaXplKCc0UCcpKQorICAgICAgICAjIGNvbXBsZXgKKyAgICAgICAgY2hlY2soY29tcGxleCgwLDEpLCBzaXplKCcyZCcpKQorICAgICAgICAjIGNvZGUKKyAgICAgICAgY2hlY2soZ2V0X2NlbGwoKS5mdW5jX2NvZGUsIHNpemUoJzRpOFBpM1AnKSkKKyAgICAgICAgIyBCYXNlRXhjZXB0aW9uCisgICAgICAgIGNoZWNrKEJhc2VFeGNlcHRpb24oKSwgc2l6ZSgnM1AnKSkKKyAgICAgICAgIyBVbmljb2RlRW5jb2RlRXJyb3IKKyAgICAgICAgY2hlY2soVW5pY29kZUVuY29kZUVycm9yKCIiLCB1IiIsIDAsIDAsICIiKSwgc2l6ZSgnNVAyUFAnKSkKKyAgICAgICAgIyBVbmljb2RlRGVjb2RlRXJyb3IKKyAgICAgICAgY2hlY2soVW5pY29kZURlY29kZUVycm9yKCIiLCAiIiwgMCwgMCwgIiIpLCBzaXplKCc1UDJQUCcpKQorICAgICAgICAjIFVuaWNvZGVUcmFuc2xhdGVFcnJvcgorICAgICAgICBjaGVjayhVbmljb2RlVHJhbnNsYXRlRXJyb3IodSIiLCAwLCAxLCAiIiksIHNpemUoJzVQMlBQJykpCisgICAgICAgICMgbWV0aG9kX2Rlc2NyaXB0b3IgKGRlc2NyaXB0b3Igb2JqZWN0KQorICAgICAgICBjaGVjayhzdHIubG93ZXIsIHNpemUoJzJQUCcpKQorICAgICAgICAjIGNsYXNzbWV0aG9kX2Rlc2NyaXB0b3IgKGRlc2NyaXB0b3Igb2JqZWN0KQorICAgICAgICAjIFhYWAorICAgICAgICAjIG1lbWJlcl9kZXNjcmlwdG9yIChkZXNjcmlwdG9yIG9iamVjdCkKKyAgICAgICAgaW1wb3J0IGRhdGV0aW1lCisgICAgICAgIGNoZWNrKGRhdGV0aW1lLnRpbWVkZWx0YS5kYXlzLCBzaXplKCcyUFAnKSkKKyAgICAgICAgIyBnZXRzZXRfZGVzY3JpcHRvciAoZGVzY3JpcHRvciBvYmplY3QpCisgICAgICAgIGltcG9ydCBfX2J1aWx0aW5fXworICAgICAgICBjaGVjayhfX2J1aWx0aW5fXy5maWxlLmNsb3NlZCwgc2l6ZSgnMlBQJykpCisgICAgICAgICMgd3JhcHBlcl9kZXNjcmlwdG9yIChkZXNjcmlwdG9yIG9iamVjdCkKKyAgICAgICAgY2hlY2soaW50Ll9fYWRkX18sIHNpemUoJzJQMlAnKSkKKyAgICAgICAgIyBkaWN0cHJveHkKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOiBwYXNzCisgICAgICAgIGNoZWNrKEMuX19kaWN0X18sIHNpemUoJ1AnKSkKKyAgICAgICAgIyBtZXRob2Qtd3JhcHBlciAoZGVzY3JpcHRvciBvYmplY3QpCisgICAgICAgIGNoZWNrKHt9Ll9faXRlcl9fLCBzaXplKCcyUCcpKQorICAgICAgICAjIGRpY3QKKyAgICAgICAgY2hlY2soe30sIHNpemUoJzNQMlAnICsgOConUDJQJykpCisgICAgICAgIHggPSB7MToxLCAyOjIsIDM6MywgNDo0LCA1OjUsIDY6NiwgNzo3LCA4Ojh9CisgICAgICAgIGNoZWNrKHgsIHNpemUoJzNQMlAnICsgOConUDJQJykgKyAxNipzdHJ1Y3QuY2FsY3NpemUoJ1AyUCcpKQorICAgICAgICAjIGRpY3Rpb25hcnkta2V5aXRlcmF0b3IKKyAgICAgICAgY2hlY2soe30uaXRlcmtleXMoKSwgc2l6ZSgnUDJQUFAnKSkKKyAgICAgICAgIyBkaWN0aW9uYXJ5LXZhbHVlaXRlcmF0b3IKKyAgICAgICAgY2hlY2soe30uaXRlcnZhbHVlcygpLCBzaXplKCdQMlBQUCcpKQorICAgICAgICAjIGRpY3Rpb25hcnktaXRlbWl0ZXJhdG9yCisgICAgICAgIGNoZWNrKHt9Lml0ZXJpdGVtcygpLCBzaXplKCdQMlBQUCcpKQorICAgICAgICAjIGVsbGlwc2VzCisgICAgICAgIGNoZWNrKEVsbGlwc2lzLCBzaXplKCcnKSkKKyAgICAgICAgIyBFbmNvZGluZ01hcAorICAgICAgICBpbXBvcnQgY29kZWNzLCBlbmNvZGluZ3MuaXNvODg1OV8zCisgICAgICAgIHggPSBjb2RlY3MuY2hhcm1hcF9idWlsZChlbmNvZGluZ3MuaXNvODg1OV8zLmRlY29kaW5nX3RhYmxlKQorICAgICAgICBjaGVjayh4LCBzaXplKCczMkIyaUInKSkKKyAgICAgICAgIyBlbnVtZXJhdGUKKyAgICAgICAgY2hlY2soZW51bWVyYXRlKFtdKSwgc2l6ZSgnbDNQJykpCisgICAgICAgICMgZmlsZQorICAgICAgICBjaGVjayhzZWxmLmZpbGUsIHNpemUoJzRQMmk0UDNpM1AzaScpKQorICAgICAgICAjIGZsb2F0CisgICAgICAgIGNoZWNrKGZsb2F0KDApLCBzaXplKCdkJykpCisgICAgICAgICMgc3lzLmZsb2F0aW5mbworICAgICAgICBjaGVjayhzeXMuZmxvYXRfaW5mbywgdnNpemUoJycpICsgc2VsZi5QICogbGVuKHN5cy5mbG9hdF9pbmZvKSkKKyAgICAgICAgIyBmcmFtZQorICAgICAgICBpbXBvcnQgaW5zcGVjdAorICAgICAgICBDT19NQVhCTE9DS1MgPSAyMAorICAgICAgICB4ID0gaW5zcGVjdC5jdXJyZW50ZnJhbWUoKQorICAgICAgICBuY2VsbHMgPSBsZW4oeC5mX2NvZGUuY29fY2VsbHZhcnMpCisgICAgICAgIG5mcmVlcyA9IGxlbih4LmZfY29kZS5jb19mcmVldmFycykKKyAgICAgICAgZXh0cmFzID0geC5mX2NvZGUuY29fc3RhY2tzaXplICsgeC5mX2NvZGUuY29fbmxvY2FscyArXAorICAgICAgICAgICAgICAgICBuY2VsbHMgKyBuZnJlZXMgLSAxCisgICAgICAgIGNoZWNrKHgsIHZzaXplKCcxMlAzaScgKyBDT19NQVhCTE9DS1MqJzNpJyArICdQJyArIGV4dHJhcyonUCcpKQorICAgICAgICAjIGZ1bmN0aW9uCisgICAgICAgIGRlZiBmdW5jKCk6IHBhc3MKKyAgICAgICAgY2hlY2soZnVuYywgc2l6ZSgnOVAnKSkKKyAgICAgICAgY2xhc3MgYygpOgorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIGJhcihjbHMpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICMgc3RhdGljbWV0aG9kCisgICAgICAgICAgICBjaGVjayhmb28sIHNpemUoJ1AnKSkKKyAgICAgICAgICAgICMgY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGNoZWNrKGJhciwgc2l6ZSgnUCcpKQorICAgICAgICAjIGdlbmVyYXRvcgorICAgICAgICBkZWYgZ2V0X2dlbigpOiB5aWVsZCAxCisgICAgICAgIGNoZWNrKGdldF9nZW4oKSwgc2l6ZSgnUGkyUCcpKQorICAgICAgICAjIGludGVnZXIKKyAgICAgICAgY2hlY2soMSwgc2l6ZSgnbCcpKQorICAgICAgICBjaGVjaygxMDAsIHNpemUoJ2wnKSkKKyAgICAgICAgIyBpdGVyYXRvcgorICAgICAgICBjaGVjayhpdGVyKCdhYmMnKSwgc2l6ZSgnbFAnKSkKKyAgICAgICAgIyBjYWxsYWJsZS1pdGVyYXRvcgorICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgY2hlY2socmUuZmluZGl0ZXIoJycsJycpLCBzaXplKCcyUCcpKQorICAgICAgICAjIGxpc3QKKyAgICAgICAgc2FtcGxlcyA9IFtbXSwgWzEsMiwzXSwgWycxJywgJzInLCAnMyddXQorICAgICAgICBmb3Igc2FtcGxlIGluIHNhbXBsZXM6CisgICAgICAgICAgICBjaGVjayhzYW1wbGUsIHZzaXplKCdQUCcpICsgbGVuKHNhbXBsZSkqc2VsZi5QKQorICAgICAgICAjIHNvcnR3cmFwcGVyIChsaXN0KQorICAgICAgICAjIFhYWAorICAgICAgICAjIGNtcHdyYXBwZXIgKGxpc3QpCisgICAgICAgICMgWFhYCisgICAgICAgICMgbGlzdGl0ZXJhdG9yIChsaXN0KQorICAgICAgICBjaGVjayhpdGVyKFtdKSwgc2l6ZSgnbFAnKSkKKyAgICAgICAgIyBsaXN0cmV2ZXJzZWl0ZXJhdG9yIChsaXN0KQorICAgICAgICBjaGVjayhyZXZlcnNlZChbXSksIHNpemUoJ2xQJykpCisgICAgICAgICMgbG9uZworICAgICAgICBjaGVjaygwTCwgdnNpemUoJycpKQorICAgICAgICBjaGVjaygxTCwgdnNpemUoJycpICsgc2VsZi5sb25nZGlnaXQpCisgICAgICAgIGNoZWNrKC0xTCwgdnNpemUoJycpICsgc2VsZi5sb25nZGlnaXQpCisgICAgICAgIFB5TG9uZ19CQVNFID0gMioqc3lzLmxvbmdfaW5mby5iaXRzX3Blcl9kaWdpdAorICAgICAgICBjaGVjayhsb25nKFB5TG9uZ19CQVNFKSwgdnNpemUoJycpICsgMipzZWxmLmxvbmdkaWdpdCkKKyAgICAgICAgY2hlY2sobG9uZyhQeUxvbmdfQkFTRSoqMi0xKSwgdnNpemUoJycpICsgMipzZWxmLmxvbmdkaWdpdCkKKyAgICAgICAgY2hlY2sobG9uZyhQeUxvbmdfQkFTRSoqMiksIHZzaXplKCcnKSArIDMqc2VsZi5sb25nZGlnaXQpCisgICAgICAgICMgbW9kdWxlCisgICAgICAgIGNoZWNrKHVuaXR0ZXN0LCBzaXplKCdQJykpCisgICAgICAgICMgTm9uZQorICAgICAgICBjaGVjayhOb25lLCBzaXplKCcnKSkKKyAgICAgICAgIyBvYmplY3QKKyAgICAgICAgY2hlY2sob2JqZWN0KCksIHNpemUoJycpKQorICAgICAgICAjIHByb3BlcnR5IChkZXNjcmlwdG9yIG9iamVjdCkKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIGdldHgoc2VsZik6IHJldHVybiBzZWxmLl9feAorICAgICAgICAgICAgZGVmIHNldHgoc2VsZiwgdmFsdWUpOiBzZWxmLl9feCA9IHZhbHVlCisgICAgICAgICAgICBkZWYgZGVseChzZWxmKTogZGVsIHNlbGYuX194CisgICAgICAgICAgICB4ID0gcHJvcGVydHkoZ2V0eCwgc2V0eCwgZGVseCwgIiIpCisgICAgICAgICAgICBjaGVjayh4LCBzaXplKCc0UGknKSkKKyAgICAgICAgIyBQeUNPYmplY3QKKyAgICAgICAgIyBQeUNhcHN1bGUKKyAgICAgICAgIyBYWFgKKyAgICAgICAgIyByYW5nZWl0ZXJhdG9yCisgICAgICAgIGNoZWNrKGl0ZXIoeHJhbmdlKDEpKSwgc2l6ZSgnNGwnKSkKKyAgICAgICAgIyByZXZlcnNlCisgICAgICAgIGNoZWNrKHJldmVyc2VkKCcnKSwgc2l6ZSgnUFAnKSkKKyAgICAgICAgIyBzZXQKKyAgICAgICAgIyBmcm96ZW5zZXQKKyAgICAgICAgUHlTZXRfTUlOU0laRSA9IDgKKyAgICAgICAgc2FtcGxlcyA9IFtbXSwgcmFuZ2UoMTApLCByYW5nZSg1MCldCisgICAgICAgIHMgPSBzaXplKCczUDJQJyArIFB5U2V0X01JTlNJWkUqJ2xQJyArICdsUCcpCisgICAgICAgIGZvciBzYW1wbGUgaW4gc2FtcGxlczoKKyAgICAgICAgICAgIG1pbnVzZWQgPSBsZW4oc2FtcGxlKQorICAgICAgICAgICAgaWYgbWludXNlZCA9PSAwOiB0bXAgPSAxCisgICAgICAgICAgICAjIHRoZSBjb21wdXRhdGlvbiBvZiBtaW51c2VkIGlzIGFjdHVhbGx5IGEgYml0IG1vcmUgY29tcGxpY2F0ZWQKKyAgICAgICAgICAgICMgYnV0IHRoaXMgc3VmZmljZXMgZm9yIHRoZSBzaXplb2YgdGVzdAorICAgICAgICAgICAgbWludXNlZCA9IG1pbnVzZWQqMgorICAgICAgICAgICAgbmV3c2l6ZSA9IFB5U2V0X01JTlNJWkUKKyAgICAgICAgICAgIHdoaWxlIG5ld3NpemUgPD0gbWludXNlZDoKKyAgICAgICAgICAgICAgICBuZXdzaXplID0gbmV3c2l6ZSA8PCAxCisgICAgICAgICAgICBpZiBuZXdzaXplIDw9IDg6CisgICAgICAgICAgICAgICAgY2hlY2soc2V0KHNhbXBsZSksIHMpCisgICAgICAgICAgICAgICAgY2hlY2soZnJvemVuc2V0KHNhbXBsZSksIHMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNoZWNrKHNldChzYW1wbGUpLCBzICsgbmV3c2l6ZSpzdHJ1Y3QuY2FsY3NpemUoJ2xQJykpCisgICAgICAgICAgICAgICAgY2hlY2soZnJvemVuc2V0KHNhbXBsZSksIHMgKyBuZXdzaXplKnN0cnVjdC5jYWxjc2l6ZSgnbFAnKSkKKyAgICAgICAgIyBzZXRpdGVyYXRvcgorICAgICAgICBjaGVjayhpdGVyKHNldCgpKSwgc2l6ZSgnUDNQJykpCisgICAgICAgICMgc2xpY2UKKyAgICAgICAgY2hlY2soc2xpY2UoMSksIHNpemUoJzNQJykpCisgICAgICAgICMgc3RyCisgICAgICAgIHZoID0gdGVzdC50ZXN0X3N1cHBvcnQuX3ZoZWFkZXIKKyAgICAgICAgY2hlY2soJycsIHN0cnVjdC5jYWxjc2l6ZSh2aCArICdsaWMnKSkKKyAgICAgICAgY2hlY2soJ2FiYycsIHN0cnVjdC5jYWxjc2l6ZSh2aCArICdsaWMnKSArIDMpCisgICAgICAgICMgc3VwZXIKKyAgICAgICAgY2hlY2soc3VwZXIoaW50KSwgc2l6ZSgnM1AnKSkKKyAgICAgICAgIyB0dXBsZQorICAgICAgICBjaGVjaygoKSwgdnNpemUoJycpKQorICAgICAgICBjaGVjaygoMSwyLDMpLCB2c2l6ZSgnJykgKyAzKnNlbGYuUCkKKyAgICAgICAgIyB0dXBsZWl0ZXJhdG9yCisgICAgICAgIGNoZWNrKGl0ZXIoKCkpLCBzaXplKCdsUCcpKQorICAgICAgICAjIHR5cGUKKyAgICAgICAgIyAoUHlUeXBlT2JqZWN0ICsgUHlOdW1iZXJNZXRob2RzICsgIFB5TWFwcGluZ01ldGhvZHMgKworICAgICAgICAjICBQeVNlcXVlbmNlTWV0aG9kcyArIFB5QnVmZmVyUHJvY3MpCisgICAgICAgIHMgPSB2c2l6ZSgnUDJQMTVQbDRQUDlQUDExUEknKSArIHN0cnVjdC5jYWxjc2l6ZSgnNDFQIDEwUCAzUCA2UCcpCisgICAgICAgIGNsYXNzIG5ld3N0eWxlY2xhc3Mob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2hlY2sobmV3c3R5bGVjbGFzcywgcykKKyAgICAgICAgIyBidWlsdGluIHR5cGUKKyAgICAgICAgY2hlY2soaW50LCBzKQorICAgICAgICAjIE5vdEltcGxlbWVudGVkVHlwZQorICAgICAgICBpbXBvcnQgdHlwZXMKKyAgICAgICAgY2hlY2sodHlwZXMuTm90SW1wbGVtZW50ZWRUeXBlLCBzKQorICAgICAgICAjIHVuaWNvZGUKKyAgICAgICAgdXNpemUgPSBsZW4odSdcMCcuZW5jb2RlKCd1bmljb2RlLWludGVybmFsJykpCisgICAgICAgIHNhbXBsZXMgPSBbdScnLCB1JzEnKjEwMF0KKyAgICAgICAgIyB3ZSBuZWVkIHRvIHRlc3QgZm9yIGJvdGggc2l6ZXMsIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGUgc3RyaW5nCisgICAgICAgICMgaGFzIGJlZW4gY2FjaGVkCisgICAgICAgIGZvciBzIGluIHNhbXBsZXM6CisgICAgICAgICAgICBjaGVjayhzLCBzaXplKCdQUGxQJykgKyB1c2l6ZSAqIChsZW4ocykgKyAxKSkKKyAgICAgICAgIyB3ZWFrcmVmCisgICAgICAgIGltcG9ydCB3ZWFrcmVmCisgICAgICAgIGNoZWNrKHdlYWtyZWYucmVmKGludCksIHNpemUoJzJQbDJQJykpCisgICAgICAgICMgd2Vha3Byb3h5CisgICAgICAgICMgWFhYCisgICAgICAgICMgd2Vha2NhbGxhYmxlcHJveHkKKyAgICAgICAgY2hlY2sod2Vha3JlZi5wcm94eShpbnQpLCBzaXplKCcyUGwyUCcpKQorICAgICAgICAjIHhyYW5nZQorICAgICAgICBjaGVjayh4cmFuZ2UoMSksIHNpemUoJzNsJykpCisgICAgICAgIGNoZWNrKHhyYW5nZSg2NjAwMCksIHNpemUoJzNsJykpCisKKyAgICBkZWYgdGVzdF9weXRob250eXBlcyhzZWxmKToKKyAgICAgICAgIyBjaGVjayBhbGwgdHlwZXMgZGVmaW5lZCBpbiBQeXRob24vCisgICAgICAgIHNpemUgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5jYWxjb2Jqc2l6ZQorICAgICAgICB2c2l6ZSA9IHRlc3QudGVzdF9zdXBwb3J0LmNhbGN2b2Jqc2l6ZQorICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfc2l6ZW9mCisgICAgICAgICMgX2FzdC5BU1QKKyAgICAgICAgaW1wb3J0IF9hc3QKKyAgICAgICAgY2hlY2soX2FzdC5BU1QoKSwgc2l6ZSgnJykpCisgICAgICAgICMgaW1wLk51bGxJbXBvcnRlcgorICAgICAgICBpbXBvcnQgaW1wCisgICAgICAgIGNoZWNrKGltcC5OdWxsSW1wb3J0ZXIoc2VsZi5maWxlLm5hbWUpLCBzaXplKCcnKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICB0YiA9IHN5cy5leGNfaW5mbygpWzJdCisgICAgICAgICAgICAjIHRyYWNlYmFjaworICAgICAgICAgICAgaWYgdGIgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBjaGVjayh0Yiwgc2l6ZSgnMlAyaScpKQorICAgICAgICAjIHN5bXRhYmxlIGVudHJ5CisgICAgICAgICMgWFhYCisgICAgICAgICMgc3lzLmZsYWdzCisgICAgICAgIGNoZWNrKHN5cy5mbGFncywgdnNpemUoJycpICsgc2VsZi5QICogbGVuKHN5cy5mbGFncykpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3RfY2xhc3NlcyA9IChTeXNNb2R1bGVUZXN0LCBTaXplb2ZUZXN0KQorCisgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N5c19zZXRwcm9maWxlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3lzX3NldHByb2ZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyNTU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N5c19zZXRwcm9maWxlLnB5CkBAIC0wLDAgKzEsMzg2IEBACitpbXBvcnQgZ2MKK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitjbGFzcyBUZXN0R2V0UHJvZmlsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzeXMuc2V0cHJvZmlsZShOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzeXMuc2V0cHJvZmlsZShOb25lKQorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHN5cy5nZXRwcm9maWxlKCkpCisKKyAgICBkZWYgdGVzdF9zZXRnZXQoc2VsZik6CisgICAgICAgIGRlZiBmbigqYXJncyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc3lzLnNldHByb2ZpbGUoZm4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLmdldHByb2ZpbGUoKSwgZm4pCisKK2NsYXNzIEhvb2tXYXRjaGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5mcmFtZXMgPSBbXQorICAgICAgICBzZWxmLmV2ZW50cyA9IFtdCisKKyAgICBkZWYgY2FsbGJhY2soc2VsZiwgZnJhbWUsIGV2ZW50LCBhcmcpOgorICAgICAgICBpZiAoZXZlbnQgPT0gImNhbGwiCisgICAgICAgICAgICBvciBldmVudCA9PSAicmV0dXJuIgorICAgICAgICAgICAgb3IgZXZlbnQgPT0gImV4Y2VwdGlvbiIpOgorICAgICAgICAgICAgc2VsZi5hZGRfZXZlbnQoZXZlbnQsIGZyYW1lKQorCisgICAgZGVmIGFkZF9ldmVudChzZWxmLCBldmVudCwgZnJhbWU9Tm9uZSk6CisgICAgICAgICIiIkFkZCBhbiBldmVudCB0byB0aGUgbG9nLiIiIgorICAgICAgICBpZiBmcmFtZSBpcyBOb25lOgorICAgICAgICAgICAgZnJhbWUgPSBzeXMuX2dldGZyYW1lKDEpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJhbWVubyA9IHNlbGYuZnJhbWVzLmluZGV4KGZyYW1lKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGZyYW1lbm8gPSBsZW4oc2VsZi5mcmFtZXMpCisgICAgICAgICAgICBzZWxmLmZyYW1lcy5hcHBlbmQoZnJhbWUpCisKKyAgICAgICAgc2VsZi5ldmVudHMuYXBwZW5kKChmcmFtZW5vLCBldmVudCwgaWRlbnQoZnJhbWUpKSkKKworICAgIGRlZiBnZXRfZXZlbnRzKHNlbGYpOgorICAgICAgICAiIiJSZW1vdmUgY2FsbHMgdG8gYWRkX2V2ZW50KCkuIiIiCisgICAgICAgIGRpc2FsbG93ZWQgPSBbaWRlbnQoc2VsZi5hZGRfZXZlbnQuaW1fZnVuYyksIGlkZW50KGlkZW50KV0KKyAgICAgICAgc2VsZi5mcmFtZXMgPSBOb25lCisKKyAgICAgICAgcmV0dXJuIFtpdGVtIGZvciBpdGVtIGluIHNlbGYuZXZlbnRzIGlmIGl0ZW1bMl0gbm90IGluIGRpc2FsbG93ZWRdCisKKworY2xhc3MgUHJvZmlsZVNpbXVsYXRvcihIb29rV2F0Y2hlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RjYXNlKToKKyAgICAgICAgc2VsZi50ZXN0Y2FzZSA9IHRlc3RjYXNlCisgICAgICAgIHNlbGYuc3RhY2sgPSBbXQorICAgICAgICBIb29rV2F0Y2hlci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIGNhbGxiYWNrKHNlbGYsIGZyYW1lLCBldmVudCwgYXJnKToKKyAgICAgICAgIyBDYWxsYmFjayByZWdpc3RlcmVkIHdpdGggc3lzLnNldHByb2ZpbGUoKS9zeXMuc2V0dHJhY2UoKQorICAgICAgICBzZWxmLmRpc3BhdGNoW2V2ZW50XShzZWxmLCBmcmFtZSkKKworICAgIGRlZiB0cmFjZV9jYWxsKHNlbGYsIGZyYW1lKToKKyAgICAgICAgc2VsZi5hZGRfZXZlbnQoJ2NhbGwnLCBmcmFtZSkKKyAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoZnJhbWUpCisKKyAgICBkZWYgdHJhY2VfcmV0dXJuKHNlbGYsIGZyYW1lKToKKyAgICAgICAgc2VsZi5hZGRfZXZlbnQoJ3JldHVybicsIGZyYW1lKQorICAgICAgICBzZWxmLnN0YWNrLnBvcCgpCisKKyAgICBkZWYgdHJhY2VfZXhjZXB0aW9uKHNlbGYsIGZyYW1lKToKKyAgICAgICAgc2VsZi50ZXN0Y2FzZS5mYWlsKAorICAgICAgICAgICAgInRoZSBwcm9maWxlciBzaG91bGQgbmV2ZXIgcmVjZWl2ZSBleGNlcHRpb24gZXZlbnRzIikKKworICAgIGRlZiB0cmFjZV9wYXNzKHNlbGYsIGZyYW1lKToKKyAgICAgICAgcGFzcworCisgICAgZGlzcGF0Y2ggPSB7CisgICAgICAgICdjYWxsJzogdHJhY2VfY2FsbCwKKyAgICAgICAgJ2V4Y2VwdGlvbic6IHRyYWNlX2V4Y2VwdGlvbiwKKyAgICAgICAgJ3JldHVybic6IHRyYWNlX3JldHVybiwKKyAgICAgICAgJ2NfY2FsbCc6IHRyYWNlX3Bhc3MsCisgICAgICAgICdjX3JldHVybic6IHRyYWNlX3Bhc3MsCisgICAgICAgICdjX2V4Y2VwdGlvbic6IHRyYWNlX3Bhc3MsCisgICAgICAgIH0KKworCitjbGFzcyBUZXN0Q2FzZUJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjaGVja19ldmVudHMoc2VsZiwgY2FsbGFibGUsIGV4cGVjdGVkKToKKyAgICAgICAgZXZlbnRzID0gY2FwdHVyZV9ldmVudHMoY2FsbGFibGUsIHNlbGYubmV3X3dhdGNoZXIoKSkKKyAgICAgICAgaWYgZXZlbnRzICE9IGV4cGVjdGVkOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBldmVudHM6XG4lc1xuUmVjZWl2ZWQgZXZlbnRzOlxuJXMiCisgICAgICAgICAgICAgICAgICAgICAgJSAocHByaW50LnBmb3JtYXQoZXhwZWN0ZWQpLCBwcHJpbnQucGZvcm1hdChldmVudHMpKSkKKworCitjbGFzcyBQcm9maWxlSG9va1Rlc3RDYXNlKFRlc3RDYXNlQmFzZSk6CisgICAgZGVmIG5ld193YXRjaGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gSG9va1dhdGNoZXIoKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICBkZWYgZihwKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZl9pZGVudCA9IGlkZW50KGYpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKGYsIFsoMSwgJ2NhbGwnLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAncmV0dXJuJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBkZWYgZihwKToKKyAgICAgICAgICAgIDEuLzAKKyAgICAgICAgZl9pZGVudCA9IGlkZW50KGYpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKGYsIFsoMSwgJ2NhbGwnLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAncmV0dXJuJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfY2F1Z2h0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZGVmIGYocCk6CisgICAgICAgICAgICB0cnk6IDEuLzAKKyAgICAgICAgICAgIGV4Y2VwdDogcGFzcworICAgICAgICBmX2lkZW50ID0gaWRlbnQoZikKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoZiwgWygxLCAnY2FsbCcsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9jYXVnaHRfbmVzdGVkX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZGVmIGYocCk6CisgICAgICAgICAgICB0cnk6IDEuLzAKKyAgICAgICAgICAgIGV4Y2VwdDogcGFzcworICAgICAgICBmX2lkZW50ID0gaWRlbnQoZikKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoZiwgWygxLCAnY2FsbCcsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9uZXN0ZWRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBkZWYgZihwKToKKyAgICAgICAgICAgIDEuLzAKKyAgICAgICAgZl9pZGVudCA9IGlkZW50KGYpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKGYsIFsoMSwgJ2NhbGwnLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpc24ndCB3aGF0IEkgZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICgwLCAnZXhjZXB0aW9uJywgcHJvdGVjdF9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEkgZXhwZWN0ZWQgdGhpcyBhZ2FpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAncmV0dXJuJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX2luX2V4Y2VwdF9jbGF1c2Uoc2VsZik6CisgICAgICAgIGRlZiBmKHApOgorICAgICAgICAgICAgMS4vMAorICAgICAgICBkZWYgZyhwKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmKHApCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgdHJ5OiBmKHApCisgICAgICAgICAgICAgICAgZXhjZXB0OiBwYXNzCisgICAgICAgIGZfaWRlbnQgPSBpZGVudChmKQorICAgICAgICBnX2lkZW50ID0gaWRlbnQoZykKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoZywgWygxLCAnY2FsbCcsIGdfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdjYWxsJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ3JldHVybicsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdjYWxsJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ3JldHVybicsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nLCBnX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fcHJvcG9nYXRpb24oc2VsZik6CisgICAgICAgIGRlZiBmKHApOgorICAgICAgICAgICAgMS4vMAorICAgICAgICBkZWYgZyhwKToKKyAgICAgICAgICAgIHRyeTogZihwKQorICAgICAgICAgICAgZmluYWxseTogcC5hZGRfZXZlbnQoImZhbGxpbmcgdGhyb3VnaCIpCisgICAgICAgIGZfaWRlbnQgPSBpZGVudChmKQorICAgICAgICBnX2lkZW50ID0gaWRlbnQoZykKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoZywgWygxLCAnY2FsbCcsIGdfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdjYWxsJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ3JldHVybicsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdmYWxsaW5nIHRocm91Z2gnLCBnX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAncmV0dXJuJywgZ19pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfcmFpc2VfdHdpY2Uoc2VsZik6CisgICAgICAgIGRlZiBmKHApOgorICAgICAgICAgICAgdHJ5OiAxLi8wCisgICAgICAgICAgICBleGNlcHQ6IDEuLzAKKyAgICAgICAgZl9pZGVudCA9IGlkZW50KGYpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKGYsIFsoMSwgJ2NhbGwnLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAncmV0dXJuJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfcmFpc2VfcmVyYWlzZShzZWxmKToKKyAgICAgICAgZGVmIGYocCk6CisgICAgICAgICAgICB0cnk6IDEuLzAKKyAgICAgICAgICAgIGV4Y2VwdDogcmFpc2UKKyAgICAgICAgZl9pZGVudCA9IGlkZW50KGYpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKGYsIFsoMSwgJ2NhbGwnLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAncmV0dXJuJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfcmFpc2Uoc2VsZik6CisgICAgICAgIGRlZiBmKHApOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCkKKyAgICAgICAgZl9pZGVudCA9IGlkZW50KGYpCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKGYsIFsoMSwgJ2NhbGwnLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAncmV0dXJuJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfZGlzdGFudF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAxLi8wCisgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICBmKCkKKyAgICAgICAgZGVmIGgoKToKKyAgICAgICAgICAgIGcoKQorICAgICAgICBkZWYgaSgpOgorICAgICAgICAgICAgaCgpCisgICAgICAgIGRlZiBqKHApOgorICAgICAgICAgICAgaSgpCisgICAgICAgIGZfaWRlbnQgPSBpZGVudChmKQorICAgICAgICBnX2lkZW50ID0gaWRlbnQoZykKKyAgICAgICAgaF9pZGVudCA9IGlkZW50KGgpCisgICAgICAgIGlfaWRlbnQgPSBpZGVudChpKQorICAgICAgICBqX2lkZW50ID0gaWRlbnQoaikKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoaiwgWygxLCAnY2FsbCcsIGpfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdjYWxsJywgaV9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ2NhbGwnLCBoX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnY2FsbCcsIGdfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdjYWxsJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ3JldHVybicsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdyZXR1cm4nLCBnX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAncmV0dXJuJywgaF9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ3JldHVybicsIGlfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nLCBqX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKKyAgICAgICAgICAgICAgICB5aWVsZCBpCisgICAgICAgIGRlZiBnKHApOgorICAgICAgICAgICAgZm9yIGkgaW4gZigpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZl9pZGVudCA9IGlkZW50KGYpCisgICAgICAgIGdfaWRlbnQgPSBpZGVudChnKQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhnLCBbKDEsICdjYWxsJywgZ19pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNhbGwgdGhlIGl0ZXJhdG9yIHR3aWNlIHRvIGdlbmVyYXRlIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdjYWxsJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ3JldHVybicsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdjYWxsJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ3JldHVybicsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvbmNlIG1vcmU7IHJldHVybnMgZW5kLW9mLWl0ZXJhdGlvbiB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFjdHVhbGx5IHJhaXNpbmcgYW4gZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2NhbGwnLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAncmV0dXJuJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ3JldHVybicsIGdfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X3N0b3BfaXRlcmF0aW9uKHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6CisgICAgICAgICAgICAgICAgeWllbGQgaQorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICBkZWYgZyhwKToKKyAgICAgICAgICAgIGZvciBpIGluIGYoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGZfaWRlbnQgPSBpZGVudChmKQorICAgICAgICBnX2lkZW50ID0gaWRlbnQoZykKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoZywgWygxLCAnY2FsbCcsIGdfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjYWxsIHRoZSBpdGVyYXRvciB0d2ljZSB0byBnZW5lcmF0ZSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnY2FsbCcsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdyZXR1cm4nLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnY2FsbCcsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdyZXR1cm4nLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb25jZSBtb3JlIHRvIGhpdCB0aGUgcmFpc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2NhbGwnLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAncmV0dXJuJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ3JldHVybicsIGdfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworCitjbGFzcyBQcm9maWxlU2ltdWxhdG9yVGVzdENhc2UoVGVzdENhc2VCYXNlKToKKyAgICBkZWYgbmV3X3dhdGNoZXIoc2VsZik6CisgICAgICAgIHJldHVybiBQcm9maWxlU2ltdWxhdG9yKHNlbGYpCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIGRlZiBmKHApOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmX2lkZW50ID0gaWRlbnQoZikKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoZiwgWygxLCAnY2FsbCcsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9iYXNpY19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGRlZiBmKHApOgorICAgICAgICAgICAgMS4vMAorICAgICAgICBmX2lkZW50ID0gaWRlbnQoZikKKyAgICAgICAgc2VsZi5jaGVja19ldmVudHMoZiwgWygxLCAnY2FsbCcsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICdyZXR1cm4nLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9jYXVnaHRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBkZWYgZihwKToKKyAgICAgICAgICAgIHRyeTogMS4vMAorICAgICAgICAgICAgZXhjZXB0OiBwYXNzCisgICAgICAgIGZfaWRlbnQgPSBpZGVudChmKQorICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cyhmLCBbKDEsICdjYWxsJywgZl9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ3JldHVybicsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X2Rpc3RhbnRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgMS4vMAorICAgICAgICBkZWYgZygpOgorICAgICAgICAgICAgZigpCisgICAgICAgIGRlZiBoKCk6CisgICAgICAgICAgICBnKCkKKyAgICAgICAgZGVmIGkoKToKKyAgICAgICAgICAgIGgoKQorICAgICAgICBkZWYgaihwKToKKyAgICAgICAgICAgIGkoKQorICAgICAgICBmX2lkZW50ID0gaWRlbnQoZikKKyAgICAgICAgZ19pZGVudCA9IGlkZW50KGcpCisgICAgICAgIGhfaWRlbnQgPSBpZGVudChoKQorICAgICAgICBpX2lkZW50ID0gaWRlbnQoaSkKKyAgICAgICAgal9pZGVudCA9IGlkZW50KGopCisgICAgICAgIHNlbGYuY2hlY2tfZXZlbnRzKGosIFsoMSwgJ2NhbGwnLCBqX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnY2FsbCcsIGlfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMsICdjYWxsJywgaF9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2NhbGwnLCBnX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnY2FsbCcsIGZfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdyZXR1cm4nLCBmX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAncmV0dXJuJywgZ19pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ3JldHVybicsIGhfaWRlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdyZXR1cm4nLCBpX2lkZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAncmV0dXJuJywgal9pZGVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQorCisKK2RlZiBpZGVudChmdW5jdGlvbik6CisgICAgaWYgaGFzYXR0cihmdW5jdGlvbiwgImZfY29kZSIpOgorICAgICAgICBjb2RlID0gZnVuY3Rpb24uZl9jb2RlCisgICAgZWxzZToKKyAgICAgICAgY29kZSA9IGZ1bmN0aW9uLmZ1bmNfY29kZQorICAgIHJldHVybiBjb2RlLmNvX2ZpcnN0bGluZW5vLCBjb2RlLmNvX25hbWUKKworCitkZWYgcHJvdGVjdChmLCBwKToKKyAgICB0cnk6IGYocCkKKyAgICBleGNlcHQ6IHBhc3MKKworcHJvdGVjdF9pZGVudCA9IGlkZW50KHByb3RlY3QpCisKKworZGVmIGNhcHR1cmVfZXZlbnRzKGNhbGxhYmxlLCBwPU5vbmUpOgorICAgIGlmIHAgaXMgTm9uZToKKyAgICAgICAgcCA9IEhvb2tXYXRjaGVyKCkKKyAgICAjIERpc2FibGUgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBUaGlzIHByZXZlbnRzIF9fZGVsX19zIGZyb20gc2hvd2luZyB1cCBpbgorICAgICMgdHJhY2VzLgorICAgIG9sZF9nYyA9IGdjLmlzZW5hYmxlZCgpCisgICAgZ2MuZGlzYWJsZSgpCisgICAgdHJ5OgorICAgICAgICBzeXMuc2V0cHJvZmlsZShwLmNhbGxiYWNrKQorICAgICAgICBwcm90ZWN0KGNhbGxhYmxlLCBwKQorICAgICAgICBzeXMuc2V0cHJvZmlsZShOb25lKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIG9sZF9nYzoKKyAgICAgICAgICAgIGdjLmVuYWJsZSgpCisgICAgcmV0dXJuIHAuZ2V0X2V2ZW50cygpWzE6LTFdCisKKworZGVmIHNob3dfZXZlbnRzKGNhbGxhYmxlKToKKyAgICBpbXBvcnQgcHByaW50CisgICAgcHByaW50LnBwcmludChjYXB0dXJlX2V2ZW50cyhjYWxsYWJsZSkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIFRlc3RHZXRQcm9maWxlLAorICAgICAgICBQcm9maWxlSG9va1Rlc3RDYXNlLAorICAgICAgICBQcm9maWxlU2ltdWxhdG9yVGVzdENhc2UKKyAgICApCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3lzX3NldHRyYWNlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3lzX3NldHRyYWNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljN2JjZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF9zeXNfc2V0dHJhY2UucHkKQEAgLTAsMCArMSw4MDAgQEAKKyMgVGVzdGluZyB0aGUgbGluZSB0cmFjZSBmYWNpbGl0eS4KKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IGRpZmZsaWIKK2ltcG9ydCBnYworCisjIEEgdmVyeSBiYXNpYyBleGFtcGxlLiAgSWYgdGhpcyBmYWlscywgd2UncmUgaW4gZGVlcCB0cm91YmxlLgorZGVmIGJhc2ljKCk6CisgICAgcmV0dXJuIDEKKworYmFzaWMuZXZlbnRzID0gWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgICgxLCAncmV0dXJuJyldCisKKyMgTWFueSBvZiB0aGUgdGVzdHMgYmVsb3cgYXJlIHRyaWNreSBiZWNhdXNlIHRoZXkgaW52b2x2ZSBwYXNzIHN0YXRlbWVudHMuCisjIElmIHRoZXJlIGlzIGltcGxpY2l0IGNvbnRyb2wgZmxvdyBhcm91bmQgYSBwYXNzIHN0YXRlbWVudCAoaW4gYW4gZXhjZXB0CisjIGNsYXVzZSBvciBlbHNlIGNhbHVzZSkgdW5kZXIgd2hhdCBjb25kaXRpb25zIGRvIHlvdSBzZXQgYSBsaW5lIG51bWJlcgorIyBmb2xsb3dpbmcgdGhhdCBjbGF1c2U/CisKKworIyBUaGUgZW50aXJlICJ3aGlsZSAwOiIgc3RhdGVtZW50IGlzIG9wdGltaXplZCBhd2F5LiAgTm8gY29kZQorIyBleGlzdHMgZm9yIGl0LCBzbyB0aGUgbGluZSBudW1iZXJzIHNraXAgZGlyZWN0bHkgZnJvbSAiZGVsIHgiCisjIHRvICJ4ID0gMSIuCitkZWYgYXJpZ29fZXhhbXBsZSgpOgorICAgIHggPSAxCisgICAgZGVsIHgKKyAgICB3aGlsZSAwOgorICAgICAgICBwYXNzCisgICAgeCA9IDEKKworYXJpZ29fZXhhbXBsZS5ldmVudHMgPSBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgKDUsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoNSwgJ3JldHVybicpXQorCisjIGNoZWNrIHRoYXQgbGluZXMgY29uc2lzdGluZyBvZiBqdXN0IG9uZSBpbnN0cnVjdGlvbiBnZXQgdHJhY2VkOgorZGVmIG9uZV9pbnN0cl9saW5lKCk6CisgICAgeCA9IDEKKyAgICBkZWwgeAorICAgIHggPSAxCisKK29uZV9pbnN0cl9saW5lLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ3JldHVybicpXQorCitkZWYgbm9fcG9wX3RvcHMoKTogICAgICAjIDAKKyAgICB4ID0gMSAgICAgICAgICAgICAgICMgMQorICAgIGZvciBhIGluIHJhbmdlKDIpOiAgIyAyCisgICAgICAgIGlmIGE6ICAgICAgICAgICAjIDMKKyAgICAgICAgICAgIHggPSAxICAgICAgICMgNAorICAgICAgICBlbHNlOiAgICAgICAgICAgIyA1CisgICAgICAgICAgICB4ID0gMSAgICAgICAjIDYKKworbm9fcG9wX3RvcHMuZXZlbnRzID0gWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICg2LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICgyLCAncmV0dXJuJyldCisKK2RlZiBub19wb3BfYmxvY2tzKCk6CisgICAgeSA9IDEKKyAgICB3aGlsZSBub3QgeToKKyAgICAgICAgYmxhCisgICAgeCA9IDEKKworbm9fcG9wX2Jsb2Nrcy5ldmVudHMgPSBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ3JldHVybicpXQorCitkZWYgY2FsbGVkKCk6ICMgbGluZSAtMworICAgIHggPSAxCisKK2RlZiBjYWxsKCk6ICAgIyBsaW5lIDAKKyAgICBjYWxsZWQoKQorCitjYWxsLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgKC0zLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgKC0yLCAnbGluZScpLAorICAgICAgICAgICAgICAgKC0yLCAncmV0dXJuJyksCisgICAgICAgICAgICAgICAoMSwgJ3JldHVybicpXQorCitkZWYgcmFpc2VzKCk6CisgICAgcmFpc2UgRXhjZXB0aW9uCisKK2RlZiB0ZXN0X3JhaXNlKCk6CisgICAgdHJ5OgorICAgICAgICByYWlzZXMoKQorICAgIGV4Y2VwdCBFeGNlcHRpb24sIGV4YzoKKyAgICAgICAgeCA9IDEKKwordGVzdF9yYWlzZS5ldmVudHMgPSBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgKC0zLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgICAgICAgKC0yLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgKC0yLCAnZXhjZXB0aW9uJyksCisgICAgICAgICAgICAgICAgICAgICAoLTIsICdyZXR1cm4nKSwKKyAgICAgICAgICAgICAgICAgICAgICgyLCAnZXhjZXB0aW9uJyksCisgICAgICAgICAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgKDQsICdyZXR1cm4nKV0KKworZGVmIF9zZXR0cmFjZV9hbmRfcmV0dXJuKHRyYWNlZnVuYyk6CisgICAgc3lzLnNldHRyYWNlKHRyYWNlZnVuYykKKyAgICBzeXMuX2dldGZyYW1lKCkuZl9iYWNrLmZfdHJhY2UgPSB0cmFjZWZ1bmMKK2RlZiBzZXR0cmFjZV9hbmRfcmV0dXJuKHRyYWNlZnVuYyk6CisgICAgX3NldHRyYWNlX2FuZF9yZXR1cm4odHJhY2VmdW5jKQorCitzZXR0cmFjZV9hbmRfcmV0dXJuLmV2ZW50cyA9IFsoMSwgJ3JldHVybicpXQorCitkZWYgX3NldHRyYWNlX2FuZF9yYWlzZSh0cmFjZWZ1bmMpOgorICAgIHN5cy5zZXR0cmFjZSh0cmFjZWZ1bmMpCisgICAgc3lzLl9nZXRmcmFtZSgpLmZfYmFjay5mX3RyYWNlID0gdHJhY2VmdW5jCisgICAgcmFpc2UgUnVudGltZUVycm9yCitkZWYgc2V0dHJhY2VfYW5kX3JhaXNlKHRyYWNlZnVuYyk6CisgICAgdHJ5OgorICAgICAgICBfc2V0dHJhY2VfYW5kX3JhaXNlKHRyYWNlZnVuYykKKyAgICBleGNlcHQgUnVudGltZUVycm9yLCBleGM6CisgICAgICAgIHBhc3MKKworc2V0dHJhY2VfYW5kX3JhaXNlLmV2ZW50cyA9IFsoMiwgJ2V4Y2VwdGlvbicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAncmV0dXJuJyldCisKKyMgaW1wbGljaXQgcmV0dXJuIGV4YW1wbGUKKyMgVGhpcyB0ZXN0IGlzIGludGVyZXN0aW5nIGJlY2F1c2Ugb2YgdGhlIGVsc2U6IHBhc3MKKyMgcGFydCBvZiB0aGUgY29kZS4gIFRoZSBjb2RlIGdlbmVyYXRlIGZvciB0aGUgdHJ1ZQorIyBwYXJ0IG9mIHRoZSBpZiBjb250YWlucyBhIGp1bXAgcGFzdCB0aGUgZWxzZSBicmFuY2guCisjIFRoZSBjb21waWxlciB0aGVuIGdlbmVyYXRlcyBhbiBpbXBsaWNpdCAicmV0dXJuIE5vbmUiCisjIEludGVybmFsbHksIHRoZSBjb21waWxlciB2aXNpdHMgdGhlIHBhc3Mgc3RhdGVtZW50CisjIGFuZCBzdG9yZXMgaXRzIGxpbmUgbnVtYmVyIGZvciB1c2Ugb24gdGhlIG5leHQgaW5zdHJ1Y3Rpb24uCisjIFRoZSBuZXh0IGluc3RydWN0aW9uIGlzIHRoZSBpbXBsaWNpdCByZXR1cm4gTm9uZS4KK2RlZiBpcmV0dXJuX2V4YW1wbGUoKToKKyAgICBhID0gNQorICAgIGIgPSA1CisgICAgaWYgYSA9PSBiOgorICAgICAgICBiID0gYSsxCisgICAgZWxzZToKKyAgICAgICAgcGFzcworCitpcmV0dXJuX2V4YW1wbGUuZXZlbnRzID0gWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDYsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICg2LCAncmV0dXJuJyldCisKKyMgVGlnaHQgbG9vcCB3aXRoIHdoaWxlKDEpIGV4YW1wbGUgKFNGICM3NjU2MjQpCitkZWYgdGlnaHRsb29wX2V4YW1wbGUoKToKKyAgICBpdGVtcyA9IHJhbmdlKDAsIDMpCisgICAgdHJ5OgorICAgICAgICBpID0gMAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgYiA9IGl0ZW1zW2ldOyBpKz0xCisgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgIHBhc3MKKwordGlnaHRsb29wX2V4YW1wbGUuZXZlbnRzID0gWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnZXhjZXB0aW9uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDcsICdsaW5lJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDcsICdyZXR1cm4nKV0KKworZGVmIHRpZ2h0ZXJsb29wX2V4YW1wbGUoKToKKyAgICBpdGVtcyA9IHJhbmdlKDEsIDQpCisgICAgdHJ5OgorICAgICAgICBpID0gMAorICAgICAgICB3aGlsZSAxOiBpID0gaXRlbXNbaV0KKyAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgcGFzcworCit0aWdodGVybG9vcF9leGFtcGxlLmV2ZW50cyA9IFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMywgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCwgJ2V4Y2VwdGlvbicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2LCAncmV0dXJuJyldCisKK2RlZiBnZW5lcmF0b3JfZnVuY3Rpb24oKToKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIFRydWUKKyAgICAgICAgImNvbnRpbnVlZCIKKyAgICBmaW5hbGx5OgorICAgICAgICAiZmluYWxseSIKK2RlZiBnZW5lcmF0b3JfZXhhbXBsZSgpOgorICAgICMgYW55KCkgd2lsbCBsZWF2ZSB0aGUgZ2VuZXJhdG9yIGJlZm9yZSBpdHMgZW5kCisgICAgeCA9IGFueShnZW5lcmF0b3JfZnVuY3Rpb24oKSkKKworICAgICMgdGhlIGZvbGxvd2luZyBsaW5lcyB3ZXJlIG5vdCB0cmFjZWQKKyAgICBmb3IgeCBpbiByYW5nZSgxMCk6CisgICAgICAgIHkgPSB4CisKK2dlbmVyYXRvcl9leGFtcGxlLmV2ZW50cyA9IChbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTYsICdjYWxsJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtNSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC00LCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTQsICdyZXR1cm4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC00LCAnY2FsbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTQsICdleGNlcHRpb24nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xLCAnbGluZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTEsICdyZXR1cm4nKV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoNSwgJ2xpbmUnKSwgKDYsICdsaW5lJyldICogMTAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoNSwgJ2xpbmUnKSwgKDUsICdyZXR1cm4nKV0pCisKKworY2xhc3MgVHJhY2VyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5ldmVudHMgPSBbXQorICAgIGRlZiB0cmFjZShzZWxmLCBmcmFtZSwgZXZlbnQsIGFyZyk6CisgICAgICAgIHNlbGYuZXZlbnRzLmFwcGVuZCgoZnJhbWUuZl9saW5lbm8sIGV2ZW50KSkKKyAgICAgICAgcmV0dXJuIHNlbGYudHJhY2UKKyAgICBkZWYgdHJhY2VXaXRoR2VuZXhwKHNlbGYsIGZyYW1lLCBldmVudCwgYXJnKToKKyAgICAgICAgKG8gZm9yIG8gaW4gWzFdKQorICAgICAgICBzZWxmLmV2ZW50cy5hcHBlbmQoKGZyYW1lLmZfbGluZW5vLCBldmVudCkpCisgICAgICAgIHJldHVybiBzZWxmLnRyYWNlCisKK2NsYXNzIFRyYWNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBEaXNhYmxlIGdjIGNvbGxlY3Rpb24gd2hlbiB0cmFjaW5nLCBvdGhlcndpc2UgdGhlCisgICAgIyBkZWFsbG9jYXRvcnMgbWF5IGJlIHRyYWNlZCBhcyB3ZWxsLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi51c2luZ19nYyA9IGdjLmlzZW5hYmxlZCgpCisgICAgICAgIGdjLmRpc2FibGUoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnVzaW5nX2djOgorICAgICAgICAgICAgZ2MuZW5hYmxlKCkKKworICAgIGRlZiBjb21wYXJlX2V2ZW50cyhzZWxmLCBsaW5lX29mZnNldCwgZXZlbnRzLCBleHBlY3RlZF9ldmVudHMpOgorICAgICAgICBldmVudHMgPSBbKGwgLSBsaW5lX29mZnNldCwgZSkgZm9yIChsLCBlKSBpbiBldmVudHNdCisgICAgICAgIGlmIGV2ZW50cyAhPSBleHBlY3RlZF9ldmVudHM6CisgICAgICAgICAgICBzZWxmLmZhaWwoCisgICAgICAgICAgICAgICAgImV2ZW50cyBkaWQgbm90IG1hdGNoIGV4cGVjdGF0aW9uOlxuIiArCisgICAgICAgICAgICAgICAgIlxuIi5qb2luKGRpZmZsaWIubmRpZmYoW3N0cih4KSBmb3IgeCBpbiBleHBlY3RlZF9ldmVudHNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHIoeCkgZm9yIHggaW4gZXZlbnRzXSkpKQorCisgICAgZGVmIHJ1bl9hbmRfY29tcGFyZShzZWxmLCBmdW5jLCBldmVudHMpOgorICAgICAgICB0cmFjZXIgPSBUcmFjZXIoKQorICAgICAgICBzeXMuc2V0dHJhY2UodHJhY2VyLnRyYWNlKQorICAgICAgICBmdW5jKCkKKyAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCisgICAgICAgIHNlbGYuY29tcGFyZV9ldmVudHMoZnVuYy5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VyLmV2ZW50cywgZXZlbnRzKQorCisgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGZ1bmMpOgorICAgICAgICBzZWxmLnJ1bl9hbmRfY29tcGFyZShmdW5jLCBmdW5jLmV2ZW50cykKKworICAgIGRlZiBydW5fdGVzdDIoc2VsZiwgZnVuYyk6CisgICAgICAgIHRyYWNlciA9IFRyYWNlcigpCisgICAgICAgIGZ1bmModHJhY2VyLnRyYWNlKQorICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKKyAgICAgICAgc2VsZi5jb21wYXJlX2V2ZW50cyhmdW5jLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZXIuZXZlbnRzLCBmdW5jLmV2ZW50cykKKworICAgIGRlZiB0ZXN0X3NldF9hbmRfcmV0cmlldmVfbm9uZShzZWxmKToKKyAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCisgICAgICAgIGFzc2VydCBzeXMuZ2V0dHJhY2UoKSBpcyBOb25lCisKKyAgICBkZWYgdGVzdF9zZXRfYW5kX3JldHJpZXZlX2Z1bmMoc2VsZik6CisgICAgICAgIGRlZiBmbigqYXJncyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc3lzLnNldHRyYWNlKGZuKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhc3NlcnQgc3lzLmdldHRyYWNlKCkgaXMgZm4KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQorCisgICAgZGVmIHRlc3RfMDFfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoYmFzaWMpCisgICAgZGVmIHRlc3RfMDJfYXJpZ28oc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoYXJpZ29fZXhhbXBsZSkKKyAgICBkZWYgdGVzdF8wM19vbmVfaW5zdHIoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qob25lX2luc3RyX2xpbmUpCisgICAgZGVmIHRlc3RfMDRfbm9fcG9wX2Jsb2NrcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19wb3BfYmxvY2tzKQorICAgIGRlZiB0ZXN0XzA1X25vX3BvcF90b3BzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX3BvcF90b3BzKQorICAgIGRlZiB0ZXN0XzA2X2NhbGwoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoY2FsbCkKKyAgICBkZWYgdGVzdF8wN19yYWlzZShzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdCh0ZXN0X3JhaXNlKQorCisgICAgZGVmIHRlc3RfMDhfc2V0dHJhY2VfYW5kX3JldHVybihzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdDIoc2V0dHJhY2VfYW5kX3JldHVybikKKyAgICBkZWYgdGVzdF8wOV9zZXR0cmFjZV9hbmRfcmFpc2Uoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QyKHNldHRyYWNlX2FuZF9yYWlzZSkKKyAgICBkZWYgdGVzdF8xMF9pcmV0dXJuKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGlyZXR1cm5fZXhhbXBsZSkKKyAgICBkZWYgdGVzdF8xMV90aWdodGxvb3Aoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QodGlnaHRsb29wX2V4YW1wbGUpCisgICAgZGVmIHRlc3RfMTJfdGlnaHRlcmxvb3Aoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QodGlnaHRlcmxvb3BfZXhhbXBsZSkKKworICAgIGRlZiB0ZXN0XzEzX2dlbmV4cChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChnZW5lcmF0b3JfZXhhbXBsZSkKKyAgICAgICAgIyBpc3N1ZTEyNjU6IGlmIHRoZSB0cmFjZSBmdW5jdGlvbiBjb250YWlucyBhIGdlbmVyYXRvciwKKyAgICAgICAgIyBhbmQgaWYgdGhlIHRyYWNlZCBmdW5jdGlvbiBjb250YWlucyBhbm90aGVyIGdlbmVyYXRvcgorICAgICAgICAjIHRoYXQgaXMgbm90IGNvbXBsZXRlbHkgZXhoYXVzdGVkLCB0aGUgdHJhY2Ugc3RvcHBlZC4KKyAgICAgICAgIyBXb3JzZTogdGhlICdmaW5hbGx5JyBjbGF1c2Ugd2FzIG5vdCBpbnZva2VkLgorICAgICAgICB0cmFjZXIgPSBUcmFjZXIoKQorICAgICAgICBzeXMuc2V0dHJhY2UodHJhY2VyLnRyYWNlV2l0aEdlbmV4cCkKKyAgICAgICAgZ2VuZXJhdG9yX2V4YW1wbGUoKQorICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKKyAgICAgICAgc2VsZi5jb21wYXJlX2V2ZW50cyhnZW5lcmF0b3JfZXhhbXBsZS5fX2NvZGVfXy5jb19maXJzdGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZXIuZXZlbnRzLCBnZW5lcmF0b3JfZXhhbXBsZS5ldmVudHMpCisKKyAgICBkZWYgdGVzdF8xNF9vbmxpbmVyX2lmKHNlbGYpOgorICAgICAgICBkZWYgb25saW5lcnMoKToKKyAgICAgICAgICAgIGlmIFRydWU6IEZhbHNlCisgICAgICAgICAgICBlbHNlOiBUcnVlCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBzZWxmLnJ1bl9hbmRfY29tcGFyZSgKKyAgICAgICAgICAgIG9ubGluZXJzLAorICAgICAgICAgICAgWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICgxLCAnbGluZScpLAorICAgICAgICAgICAgICgzLCAnbGluZScpLAorICAgICAgICAgICAgICgzLCAncmV0dXJuJyldKQorCisgICAgZGVmIHRlc3RfMTVfbG9vcHMoc2VsZik6CisgICAgICAgICMgaXNzdWUxNzUwMDc2OiAid2hpbGUiIGV4cHJlc3Npb24gaXMgc2tpcHBlZCBieSBkZWJ1Z2dlcgorICAgICAgICBkZWYgZm9yX2V4YW1wbGUoKToKKyAgICAgICAgICAgIGZvciB4IGluIHJhbmdlKDIpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5ydW5fYW5kX2NvbXBhcmUoCisgICAgICAgICAgICBmb3JfZXhhbXBsZSwKKyAgICAgICAgICAgIFsoMCwgJ2NhbGwnKSwKKyAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMiwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMSwgJ2xpbmUnKSwKKyAgICAgICAgICAgICAoMSwgJ3JldHVybicpXSkKKworICAgICAgICBkZWYgd2hpbGVfZXhhbXBsZSgpOgorICAgICAgICAgICAgIyBXaGlsZSBleHByZXNzaW9uIHNob3VsZCBiZSB0cmFjZWQgb24gZXZlcnkgbG9vcAorICAgICAgICAgICAgeCA9IDIKKyAgICAgICAgICAgIHdoaWxlIHggPiAwOgorICAgICAgICAgICAgICAgIHggLT0gMQorICAgICAgICBzZWxmLnJ1bl9hbmRfY29tcGFyZSgKKyAgICAgICAgICAgIHdoaWxlX2V4YW1wbGUsCisgICAgICAgICAgICBbKDAsICdjYWxsJyksCisgICAgICAgICAgICAgKDIsICdsaW5lJyksCisgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgKDQsICdsaW5lJyksCisgICAgICAgICAgICAgKDMsICdsaW5lJyksCisgICAgICAgICAgICAgKDMsICdyZXR1cm4nKV0pCisKKyAgICBkZWYgdGVzdF8xNl9ibGFua19saW5lcyhzZWxmKToKKyAgICAgICAgZXhlYygiZGVmIGYoKTpcbiIgKyAiXG4iICogMjU2ICsgIiAgICBwYXNzIikKKyAgICAgICAgc2VsZi5ydW5fYW5kX2NvbXBhcmUoCisgICAgICAgICAgICBmLAorICAgICAgICAgICAgWygwLCAnY2FsbCcpLAorICAgICAgICAgICAgICgyNTcsICdsaW5lJyksCisgICAgICAgICAgICAgKDI1NywgJ3JldHVybicpXSkKKworCitjbGFzcyBSYWlzaW5nVHJhY2VGdW5jVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0cmFjZShzZWxmLCBmcmFtZSwgZXZlbnQsIGFyZyk6CisgICAgICAgICIiIkEgdHJhY2UgZnVuY3Rpb24gdGhhdCByYWlzZXMgYW4gZXhjZXB0aW9uIGluIHJlc3BvbnNlIHRvIGEKKyAgICAgICAgc3BlY2lmaWMgdHJhY2UgZXZlbnQuIiIiCisgICAgICAgIGlmIGV2ZW50ID09IHNlbGYucmFpc2VPbkV2ZW50OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciAjIGp1c3Qgc29tZXRoaW5nIHRoYXQgaXNuJ3QgUnVudGltZUVycm9yCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50cmFjZQorCisgICAgZGVmIGYoc2VsZik6CisgICAgICAgICIiIlRoZSBmdW5jdGlvbiB0byB0cmFjZTsgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiB0aGF0J3MgdGhlIGNhc2UKKyAgICAgICAgd2UncmUgdGVzdGluZywgc28gdGhhdCB0aGUgJ2V4Y2VwdGlvbicgdHJhY2UgZXZlbnQgZmlyZXMuIiIiCisgICAgICAgIGlmIHNlbGYucmFpc2VPbkV2ZW50ID09ICdleGNlcHRpb24nOgorICAgICAgICAgICAgeCA9IDAKKyAgICAgICAgICAgIHkgPSAxIC8vIHgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICBkZWYgcnVuX3Rlc3RfZm9yX2V2ZW50KHNlbGYsIGV2ZW50KToKKyAgICAgICAgIiIiVGVzdHMgdGhhdCBhbiBleGNlcHRpb24gcmFpc2VkIGluIHJlc3BvbnNlIHRvIHRoZSBnaXZlbiBldmVudCBpcworICAgICAgICBoYW5kbGVkIE9LLiIiIgorICAgICAgICBzZWxmLnJhaXNlT25FdmVudCA9IGV2ZW50CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShzeXMuZ2V0cmVjdXJzaW9ubGltaXQoKSArIDEpOgorICAgICAgICAgICAgICAgIHN5cy5zZXR0cmFjZShzZWxmLnRyYWNlKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhjZXB0aW9uIG5vdCByYWlzZWQhIikKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVjdXJzaW9uIGNvdW50ZXIgbm90IHJlc2V0IikKKworICAgICMgVGVzdCB0aGUgaGFuZGxpbmcgb2YgZXhjZXB0aW9ucyByYWlzZWQgYnkgZWFjaCBraW5kIG9mIHRyYWNlIGV2ZW50LgorICAgIGRlZiB0ZXN0X2NhbGwoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfZm9yX2V2ZW50KCdjYWxsJykKKyAgICBkZWYgdGVzdF9saW5lKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X2Zvcl9ldmVudCgnbGluZScpCisgICAgZGVmIHRlc3RfcmV0dXJuKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X2Zvcl9ldmVudCgncmV0dXJuJykKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfZm9yX2V2ZW50KCdleGNlcHRpb24nKQorCisgICAgZGVmIHRlc3RfdHJhc2hfc3RhY2soc2VsZik6CisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKKyAgICAgICAgICAgICAgICBwcmludCBpICAjIGxpbmUgdHJhY2luZyB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhdCB0aGlzIGxpbmUKKworICAgICAgICBkZWYgZyhmcmFtZSwgd2h5LCBleHRyYSk6CisgICAgICAgICAgICBpZiAod2h5ID09ICdsaW5lJyBhbmQKKyAgICAgICAgICAgICAgICBmcmFtZS5mX2xpbmVubyA9PSBmLmZ1bmNfY29kZS5jb19maXJzdGxpbmVubyArIDIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgImkgYW0gY3Jhc2hpbmciCisgICAgICAgICAgICByZXR1cm4gZworCisgICAgICAgIHN5cy5zZXR0cmFjZShnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmKCkKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICMgdGhlIHRlc3QgaXMgcmVhbGx5IHRoYXQgdGhpcyBkb2Vzbid0IHNlZ2ZhdWx0OgorICAgICAgICAgICAgaW1wb3J0IGdjCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhjZXB0aW9uIG5vdCBwcm9wYWdhdGVkIikKKworCisjICdKdW1wJyB0ZXN0czogYXNzaWduaW5nIHRvIGZyYW1lLmZfbGluZW5vIHdpdGhpbiBhIHRyYWNlIGZ1bmN0aW9uCisjIG1vdmVzIHRoZSBleGVjdXRpb24gcG9zaXRpb24gLSBpdCdzIGhvdyBkZWJ1Z2dlcnMgaW1wbGVtZW50IGEgSnVtcAorIyBjb21tYW5kIChha2EuICJTZXQgbmV4dCBzdGF0ZW1lbnQiKS4KKworY2xhc3MgSnVtcFRyYWNlcjoKKyAgICAiIiJEZWZpbmVzIGEgdHJhY2UgZnVuY3Rpb24gdGhhdCBqdW1wcyBmcm9tIG9uZSBwbGFjZSB0byBhbm90aGVyLAorICAgIHdpdGggdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbGluZXMgb2YgdGhlIGp1bXAgYmVpbmcgZGVmaW5lZCBieQorICAgIHRoZSAnanVtcCcgcHJvcGVydHkgb2YgdGhlIGZ1bmN0aW9uIHVuZGVyIHRlc3QuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuY3Rpb24pOgorICAgICAgICBzZWxmLmZ1bmN0aW9uID0gZnVuY3Rpb24KKyAgICAgICAgc2VsZi5qdW1wRnJvbSA9IGZ1bmN0aW9uLmp1bXBbMF0KKyAgICAgICAgc2VsZi5qdW1wVG8gPSBmdW5jdGlvbi5qdW1wWzFdCisgICAgICAgIHNlbGYuZG9uZSA9IEZhbHNlCisKKyAgICBkZWYgdHJhY2Uoc2VsZiwgZnJhbWUsIGV2ZW50LCBhcmcpOgorICAgICAgICBpZiBub3Qgc2VsZi5kb25lIGFuZCBmcmFtZS5mX2NvZGUgPT0gc2VsZi5mdW5jdGlvbi5mdW5jX2NvZGU6CisgICAgICAgICAgICBmaXJzdExpbmUgPSBmcmFtZS5mX2NvZGUuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgIGlmIGV2ZW50ID09ICdsaW5lJyBhbmQgZnJhbWUuZl9saW5lbm8gPT0gZmlyc3RMaW5lICsgc2VsZi5qdW1wRnJvbToKKyAgICAgICAgICAgICAgICAjIENvcGUgd2l0aCBub24taW50ZWdlciBzZWxmLmp1bXBUbyAoYmVjYXVzZSBvZgorICAgICAgICAgICAgICAgICMgbm9fanVtcF90b19ub25faW50ZWdlcnMgYmVsb3cpLgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUuZl9saW5lbm8gPSBmaXJzdExpbmUgKyBzZWxmLmp1bXBUbworICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGZyYW1lLmZfbGluZW5vID0gc2VsZi5qdW1wVG8KKyAgICAgICAgICAgICAgICBzZWxmLmRvbmUgPSBUcnVlCisgICAgICAgIHJldHVybiBzZWxmLnRyYWNlCisKKyMgVGhlIGZpcnN0IHNldCBvZiAnanVtcCcgdGVzdHMgYXJlIGZvciB0aGluZ3MgdGhhdCBhcmUgYWxsb3dlZDoKKworZGVmIGp1bXBfc2ltcGxlX2ZvcndhcmRzKG91dHB1dCk6CisgICAgb3V0cHV0LmFwcGVuZCgxKQorICAgIG91dHB1dC5hcHBlbmQoMikKKyAgICBvdXRwdXQuYXBwZW5kKDMpCisKK2p1bXBfc2ltcGxlX2ZvcndhcmRzLmp1bXAgPSAoMSwgMykKK2p1bXBfc2ltcGxlX2ZvcndhcmRzLm91dHB1dCA9IFszXQorCitkZWYganVtcF9zaW1wbGVfYmFja3dhcmRzKG91dHB1dCk6CisgICAgb3V0cHV0LmFwcGVuZCgxKQorICAgIG91dHB1dC5hcHBlbmQoMikKKworanVtcF9zaW1wbGVfYmFja3dhcmRzLmp1bXAgPSAoMiwgMSkKK2p1bXBfc2ltcGxlX2JhY2t3YXJkcy5vdXRwdXQgPSBbMSwgMSwgMl0KKworZGVmIGp1bXBfb3V0X29mX2Jsb2NrX2ZvcndhcmRzKG91dHB1dCk6CisgICAgZm9yIGkgaW4gMSwgMjoKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgICAgICBmb3IgaiBpbiBbM106ICAjIEFsc28gdGVzdHMganVtcGluZyBvdmVyIGEgYmxvY2sKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNCkKKyAgICBvdXRwdXQuYXBwZW5kKDUpCisKK2p1bXBfb3V0X29mX2Jsb2NrX2ZvcndhcmRzLmp1bXAgPSAoMywgNSkKK2p1bXBfb3V0X29mX2Jsb2NrX2ZvcndhcmRzLm91dHB1dCA9IFsyLCA1XQorCitkZWYganVtcF9vdXRfb2ZfYmxvY2tfYmFja3dhcmRzKG91dHB1dCk6CisgICAgb3V0cHV0LmFwcGVuZCgxKQorICAgIGZvciBpIGluIFsxXToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgzKQorICAgICAgICBmb3IgaiBpbiBbMl06ICAjIEFsc28gdGVzdHMganVtcGluZyBvdmVyIGEgYmxvY2sKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNSkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCg2KQorICAgIG91dHB1dC5hcHBlbmQoNykKKworanVtcF9vdXRfb2ZfYmxvY2tfYmFja3dhcmRzLmp1bXAgPSAoNiwgMSkKK2p1bXBfb3V0X29mX2Jsb2NrX2JhY2t3YXJkcy5vdXRwdXQgPSBbMSwgMywgNSwgMSwgMywgNSwgNiwgN10KKworZGVmIGp1bXBfdG9fY29kZWxlc3NfbGluZShvdXRwdXQpOgorICAgIG91dHB1dC5hcHBlbmQoMSkKKyAgICAjIEp1bXBpbmcgdG8gdGhpcyBsaW5lIHNob3VsZCBza2lwIHRvIHRoZSBuZXh0IG9uZS4KKyAgICBvdXRwdXQuYXBwZW5kKDMpCisKK2p1bXBfdG9fY29kZWxlc3NfbGluZS5qdW1wID0gKDEsIDIpCitqdW1wX3RvX2NvZGVsZXNzX2xpbmUub3V0cHV0ID0gWzNdCisKK2RlZiBqdW1wX3RvX3NhbWVfbGluZShvdXRwdXQpOgorICAgIG91dHB1dC5hcHBlbmQoMSkKKyAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgb3V0cHV0LmFwcGVuZCgzKQorCitqdW1wX3RvX3NhbWVfbGluZS5qdW1wID0gKDIsIDIpCitqdW1wX3RvX3NhbWVfbGluZS5vdXRwdXQgPSBbMSwgMiwgM10KKworIyBUZXN0cyBqdW1waW5nIHdpdGhpbiBhIGZpbmFsbHkgYmxvY2ssIGFuZCBvdmVyIG9uZS4KK2RlZiBqdW1wX2luX25lc3RlZF9maW5hbGx5KG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgZmluYWxseToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCg0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDYpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDgpCisgICAgICAgIG91dHB1dC5hcHBlbmQoOSkKKworanVtcF9pbl9uZXN0ZWRfZmluYWxseS5qdW1wID0gKDQsIDkpCitqdW1wX2luX25lc3RlZF9maW5hbGx5Lm91dHB1dCA9IFsyLCA5XQorCisjIFRoZSBzZWNvbmQgc2V0IG9mICdqdW1wJyB0ZXN0cyBhcmUgZm9yIHRoaW5ncyB0aGF0IGFyZSBub3QgYWxsb3dlZDoKKworZGVmIG5vX2p1bXBfdG9vX2Zhcl9mb3J3YXJkcyhvdXRwdXQpOgorICAgIHRyeToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgICAgICBvdXRwdXQuYXBwZW5kKDMpCisgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2FmdGVyJyBpbiBzdHIoZSkpCisKK25vX2p1bXBfdG9vX2Zhcl9mb3J3YXJkcy5qdW1wID0gKDMsIDYpCitub19qdW1wX3Rvb19mYXJfZm9yd2FyZHMub3V0cHV0ID0gWzIsIFRydWVdCisKK2RlZiBub19qdW1wX3Rvb19mYXJfYmFja3dhcmRzKG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgICAgIG91dHB1dC5hcHBlbmQoMykKKyAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnYmVmb3JlJyBpbiBzdHIoZSkpCisKK25vX2p1bXBfdG9vX2Zhcl9iYWNrd2FyZHMuanVtcCA9ICgzLCAtMSkKK25vX2p1bXBfdG9vX2Zhcl9iYWNrd2FyZHMub3V0cHV0ID0gWzIsIFRydWVdCisKKyMgVGVzdCBlYWNoIGtpbmQgb2YgJ2V4Y2VwdCcgbGluZS4KK2RlZiBub19qdW1wX3RvX2V4Y2VwdF8xKG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgZXhjZXB0OgorICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnZXhjZXB0JyBpbiBzdHIoZSkpCisKK25vX2p1bXBfdG9fZXhjZXB0XzEuanVtcCA9ICgyLCAzKQorbm9fanVtcF90b19leGNlcHRfMS5vdXRwdXQgPSBbVHJ1ZV0KKworZGVmIG5vX2p1bXBfdG9fZXhjZXB0XzIob3V0cHV0KToKKyAgICB0cnk6CisgICAgICAgIG91dHB1dC5hcHBlbmQoMikKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2V4Y2VwdCcgaW4gc3RyKGUpKQorCitub19qdW1wX3RvX2V4Y2VwdF8yLmp1bXAgPSAoMiwgMykKK25vX2p1bXBfdG9fZXhjZXB0XzIub3V0cHV0ID0gW1RydWVdCisKK2RlZiBub19qdW1wX3RvX2V4Y2VwdF8zKG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2V4Y2VwdCcgaW4gc3RyKGUpKQorCitub19qdW1wX3RvX2V4Y2VwdF8zLmp1bXAgPSAoMiwgMykKK25vX2p1bXBfdG9fZXhjZXB0XzMub3V0cHV0ID0gW1RydWVdCisKK2RlZiBub19qdW1wX3RvX2V4Y2VwdF80KG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBSdW50aW1lRXJyb3IpLCBlOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCdleGNlcHQnIGluIHN0cihlKSkKKworbm9fanVtcF90b19leGNlcHRfNC5qdW1wID0gKDIsIDMpCitub19qdW1wX3RvX2V4Y2VwdF80Lm91dHB1dCA9IFtUcnVlXQorCitkZWYgbm9fanVtcF9mb3J3YXJkc19pbnRvX2Jsb2NrKG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICBvdXRwdXQuYXBwZW5kKDIpCisgICAgICAgIGZvciBpIGluIDEsIDI6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDQpCisgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2ludG8nIGluIHN0cihlKSkKKworbm9fanVtcF9mb3J3YXJkc19pbnRvX2Jsb2NrLmp1bXAgPSAoMiwgNCkKK25vX2p1bXBfZm9yd2FyZHNfaW50b19ibG9jay5vdXRwdXQgPSBbVHJ1ZV0KKworZGVmIG5vX2p1bXBfYmFja3dhcmRzX2ludG9fYmxvY2sob3V0cHV0KToKKyAgICB0cnk6CisgICAgICAgIGZvciBpIGluIDEsIDI6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDMpCisgICAgICAgIG91dHB1dC5hcHBlbmQoNCkKKyAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnaW50bycgaW4gc3RyKGUpKQorCitub19qdW1wX2JhY2t3YXJkc19pbnRvX2Jsb2NrLmp1bXAgPSAoNCwgMykKK25vX2p1bXBfYmFja3dhcmRzX2ludG9fYmxvY2sub3V0cHV0ID0gWzMsIDMsIFRydWVdCisKK2RlZiBub19qdW1wX2ludG9fZmluYWxseV9ibG9jayhvdXRwdXQpOgorICAgIHRyeToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgzKQorICAgICAgICAgICAgeCA9IDEKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoNikKKyAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnZmluYWxseScgaW4gc3RyKGUpKQorCitub19qdW1wX2ludG9fZmluYWxseV9ibG9jay5qdW1wID0gKDQsIDYpCitub19qdW1wX2ludG9fZmluYWxseV9ibG9jay5vdXRwdXQgPSBbMywgNiwgVHJ1ZV0gICMgVGhlICdmaW5hbGx5JyBzdGlsbCBydW5zCisKK2RlZiBub19qdW1wX291dF9vZl9maW5hbGx5X2Jsb2NrKG91dHB1dCk6CisgICAgdHJ5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDUpCisgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKDYpCisgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgIG91dHB1dC5hcHBlbmQoJ2ZpbmFsbHknIGluIHN0cihlKSkKKworbm9fanVtcF9vdXRfb2ZfZmluYWxseV9ibG9jay5qdW1wID0gKDUsIDEpCitub19qdW1wX291dF9vZl9maW5hbGx5X2Jsb2NrLm91dHB1dCA9IFszLCBUcnVlXQorCisjIFRoaXMgdmVyaWZpZXMgdGhlIGxpbmUtbnVtYmVycy1tdXN0LWJlLWludGVnZXJzIHJ1bGUuCitkZWYgbm9fanVtcF90b19ub25faW50ZWdlcnMob3V0cHV0KToKKyAgICB0cnk6CisgICAgICAgIG91dHB1dC5hcHBlbmQoMikKKyAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgnaW50ZWdlcicgaW4gc3RyKGUpKQorCitub19qdW1wX3RvX25vbl9pbnRlZ2Vycy5qdW1wID0gKDIsICJTcGFtIikKK25vX2p1bXBfdG9fbm9uX2ludGVnZXJzLm91dHB1dCA9IFtUcnVlXQorCitkZWYganVtcF9hY3Jvc3Nfd2l0aChvdXRwdXQpOgorICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmcDoKKyAgICAgICAgcGFzcworICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmcDoKKyAgICAgICAgcGFzcworanVtcF9hY3Jvc3Nfd2l0aC5qdW1wID0gKDEsIDMpCitqdW1wX2Fjcm9zc193aXRoLm91dHB1dCA9IFtdCisKKyMgVGhpcyB2ZXJpZmllcyB0aGF0IHlvdSBjYW4ndCBzZXQgZl9saW5lbm8gdmlhIF9nZXRmcmFtZSBvciBzaW1pbGFyCisjIHRyaWNrZXJ5LgorZGVmIG5vX2p1bXBfd2l0aG91dF90cmFjZV9mdW5jdGlvbigpOgorICAgIHRyeToKKyAgICAgICAgcHJldmlvdXNfZnJhbWUgPSBzeXMuX2dldGZyYW1lKCkuZl9iYWNrCisgICAgICAgIHByZXZpb3VzX2ZyYW1lLmZfbGluZW5vID0gcHJldmlvdXNfZnJhbWUuZl9saW5lbm8KKyAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAgIyBUaGlzIGlzIHRoZSBleGNlcHRpb24gd2Ugd2FudGVkOyBtYWtlIHN1cmUgdGhlIGVycm9yIG1lc3NhZ2UKKyAgICAgICAgIyB0YWxrcyBhYm91dCB0cmFjZSBmdW5jdGlvbnMuCisgICAgICAgIGlmICd0cmFjZScgbm90IGluIHN0cihlKToKKyAgICAgICAgICAgIHJhaXNlCisgICAgZWxzZToKKyAgICAgICAgIyBTb21ldGhpbmcncyB3cm9uZyAtIHRoZSBleHBlY3RlZCBleGNlcHRpb24gd2Fzbid0IHJhaXNlZC4KKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiVHJhY2UtZnVuY3Rpb24tbGVzcyBqdW1wIGZhaWxlZCB0byBmYWlsIgorCisKK2NsYXNzIEp1bXBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGNvbXBhcmVfanVtcF9vdXRwdXQoc2VsZiwgZXhwZWN0ZWQsIHJlY2VpdmVkKToKKyAgICAgICAgaWYgcmVjZWl2ZWQgIT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoICJPdXRwdXRzIGRvbid0IG1hdGNoOlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZDogIiArIHJlcHIoZXhwZWN0ZWQpICsgIlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICJSZWNlaXZlZDogIiArIHJlcHIocmVjZWl2ZWQpKQorCisgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGZ1bmMpOgorICAgICAgICB0cmFjZXIgPSBKdW1wVHJhY2VyKGZ1bmMpCisgICAgICAgIHN5cy5zZXR0cmFjZSh0cmFjZXIudHJhY2UpCisgICAgICAgIG91dHB1dCA9IFtdCisgICAgICAgIGZ1bmMob3V0cHV0KQorICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKKyAgICAgICAgc2VsZi5jb21wYXJlX2p1bXBfb3V0cHV0KGZ1bmMub3V0cHV0LCBvdXRwdXQpCisKKyAgICBkZWYgdGVzdF8wMV9qdW1wX3NpbXBsZV9mb3J3YXJkcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChqdW1wX3NpbXBsZV9mb3J3YXJkcykKKyAgICBkZWYgdGVzdF8wMl9qdW1wX3NpbXBsZV9iYWNrd2FyZHMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF9zaW1wbGVfYmFja3dhcmRzKQorICAgIGRlZiB0ZXN0XzAzX2p1bXBfb3V0X29mX2Jsb2NrX2ZvcndhcmRzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfb3V0X29mX2Jsb2NrX2ZvcndhcmRzKQorICAgIGRlZiB0ZXN0XzA0X2p1bXBfb3V0X29mX2Jsb2NrX2JhY2t3YXJkcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChqdW1wX291dF9vZl9ibG9ja19iYWNrd2FyZHMpCisgICAgZGVmIHRlc3RfMDVfanVtcF90b19jb2RlbGVzc19saW5lKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfdG9fY29kZWxlc3NfbGluZSkKKyAgICBkZWYgdGVzdF8wNl9qdW1wX3RvX3NhbWVfbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChqdW1wX3RvX3NhbWVfbGluZSkKKyAgICBkZWYgdGVzdF8wN19qdW1wX2luX25lc3RlZF9maW5hbGx5KHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfaW5fbmVzdGVkX2ZpbmFsbHkpCisgICAgZGVmIHRlc3RfMDhfbm9fanVtcF90b29fZmFyX2ZvcndhcmRzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9vX2Zhcl9mb3J3YXJkcykKKyAgICBkZWYgdGVzdF8wOV9ub19qdW1wX3Rvb19mYXJfYmFja3dhcmRzKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9vX2Zhcl9iYWNrd2FyZHMpCisgICAgZGVmIHRlc3RfMTBfbm9fanVtcF90b19leGNlcHRfMShzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX3RvX2V4Y2VwdF8xKQorICAgIGRlZiB0ZXN0XzExX25vX2p1bXBfdG9fZXhjZXB0XzIoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF90b19leGNlcHRfMikKKyAgICBkZWYgdGVzdF8xMl9ub19qdW1wX3RvX2V4Y2VwdF8zKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfdG9fZXhjZXB0XzMpCisgICAgZGVmIHRlc3RfMTNfbm9fanVtcF90b19leGNlcHRfNChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX3RvX2V4Y2VwdF80KQorICAgIGRlZiB0ZXN0XzE0X25vX2p1bXBfZm9yd2FyZHNfaW50b19ibG9jayhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX2ZvcndhcmRzX2ludG9fYmxvY2spCisgICAgZGVmIHRlc3RfMTVfbm9fanVtcF9iYWNrd2FyZHNfaW50b19ibG9jayhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX2JhY2t3YXJkc19pbnRvX2Jsb2NrKQorICAgIGRlZiB0ZXN0XzE2X25vX2p1bXBfaW50b19maW5hbGx5X2Jsb2NrKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0KG5vX2p1bXBfaW50b19maW5hbGx5X2Jsb2NrKQorICAgIGRlZiB0ZXN0XzE3X25vX2p1bXBfb3V0X29mX2ZpbmFsbHlfYmxvY2soc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Qobm9fanVtcF9vdXRfb2ZfZmluYWxseV9ibG9jaykKKyAgICBkZWYgdGVzdF8xOF9ub19qdW1wX3RvX25vbl9pbnRlZ2VycyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX3RvX25vbl9pbnRlZ2VycykKKyAgICBkZWYgdGVzdF8xOV9ub19qdW1wX3dpdGhvdXRfdHJhY2VfZnVuY3Rpb24oc2VsZik6CisgICAgICAgIG5vX2p1bXBfd2l0aG91dF90cmFjZV9mdW5jdGlvbigpCisgICAgZGVmIHRlc3RfanVtcF9hY3Jvc3Nfd2l0aChzZWxmKToKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRlc3Rfc3VwcG9ydC51bmxpbmssIHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF9hY3Jvc3Nfd2l0aCkKKworICAgIGRlZiB0ZXN0XzIwX2xhcmdlX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYygiIiJkZWYgZihvdXRwdXQpOiAgICAgICAgIyBsaW5lIDAKKyAgICAgICAgICAgIHggPSAwICAgICAgICAgICAgICAgICAgICAgIyBsaW5lIDEKKyAgICAgICAgICAgIHkgPSAxICAgICAgICAgICAgICAgICAgICAgIyBsaW5lIDIKKyAgICAgICAgICAgICcnJyAgICAgICAgICAgICAgICAgICAgICAgIyBsaW5lIDMKKyAgICAgICAgICAgICVzICAgICAgICAgICAgICAgICAgICAgICAgIyBsaW5lcyA0LTEwMDQKKyAgICAgICAgICAgICcnJyAgICAgICAgICAgICAgICAgICAgICAgIyBsaW5lIDEwMDUKKyAgICAgICAgICAgIHggKz0gMSAgICAgICAgICAgICAgICAgICAgIyBsaW5lIDEwMDYKKyAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoeCkgICAgICAgICAgIyBsaW5lIDEwMDcKKyAgICAgICAgICAgIHJldHVybiIiIiAlICgnXG4nICogMTAwMCwpLCBkKQorICAgICAgICBmID0gZFsnZiddCisKKyAgICAgICAgZi5qdW1wID0gKDIsIDEwMDcpCisgICAgICAgIGYub3V0cHV0ID0gWzBdCisgICAgICAgIHNlbGYucnVuX3Rlc3QoZikKKworICAgIGRlZiB0ZXN0X2p1bXBfdG9fZmlyc3RsaW5lbm8oc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0cyB0aGF0IFBEQiBjYW4ganVtcCBiYWNrIHRvIHRoZSBmaXJzdCBsaW5lIGluIGEKKyAgICAgICAgIyBmaWxlLiAgU2VlIGlzc3VlICMxNjg5NDU4LiAgSXQgY2FuIG9ubHkgYmUgdHJpZ2dlcmVkIGluIGEKKyAgICAgICAgIyBmdW5jdGlvbiBjYWxsIGlmIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIG9uIGEgc2luZ2xlIGxpbmUuCisgICAgICAgIGNvZGUgPSBjb21waWxlKCIiIgorIyBDb21tZW50cyBkb24ndCBjb3VudC4KK291dHB1dC5hcHBlbmQoMikgICMgZmlyc3RsaW5lbm8gaXMgaGVyZS4KK291dHB1dC5hcHBlbmQoMykKK291dHB1dC5hcHBlbmQoNCkKKyIiIiwgIjxmYWtlIG1vZHVsZT4iLCAiZXhlYyIpCisgICAgICAgIGNsYXNzIGZha2VfZnVuY3Rpb246CisgICAgICAgICAgICBmdW5jX2NvZGUgPSBjb2RlCisgICAgICAgICAgICBqdW1wID0gKDIsIDApCisgICAgICAgIHRyYWNlciA9IEp1bXBUcmFjZXIoZmFrZV9mdW5jdGlvbikKKyAgICAgICAgc3lzLnNldHRyYWNlKHRyYWNlci50cmFjZSkKKyAgICAgICAgbmFtZXNwYWNlID0geyJvdXRwdXQiOiBbXX0KKyAgICAgICAgZXhlYyBjb2RlIGluIG5hbWVzcGFjZQorICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKKyAgICAgICAgc2VsZi5jb21wYXJlX2p1bXBfb3V0cHV0KFsyLCAzLCAyLCAzLCA0XSwgbmFtZXNwYWNlWyJvdXRwdXQiXSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgVHJhY2VUZXN0Q2FzZSwKKyAgICAgICAgUmFpc2luZ1RyYWNlRnVuY1Rlc3RDYXNlLAorICAgICAgICBKdW1wVGVzdENhc2UKKyAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N5c2NvbmZpZy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3N5c2NvbmZpZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTVmMzVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfc3lzY29uZmlnLnB5CkBAIC0wLDAgKzEsMzI4IEBACisiIiJUZXN0cyBmb3Igc3lzY29uZmlnLiIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKK2Zyb20gY29weSBpbXBvcnQgY29weSwgZGVlcGNvcHkKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4sIHVubGluaywgZ2V0X2F0dHJpYnV0ZQorCitpbXBvcnQgc3lzY29uZmlnCitmcm9tIHN5c2NvbmZpZyBpbXBvcnQgKGdldF9wYXRocywgZ2V0X3BsYXRmb3JtLCBnZXRfY29uZmlnX3ZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgIGdldF9wYXRoLCBnZXRfcGF0aF9uYW1lcywgX0lOU1RBTExfU0NIRU1FUywKKyAgICAgICAgICAgICAgICAgICAgICAgX2dldF9kZWZhdWx0X3NjaGVtZSwgX2V4cGFuZF92YXJzLAorICAgICAgICAgICAgICAgICAgICAgICBnZXRfc2NoZW1lX25hbWVzLCBnZXRfY29uZmlnX3ZhcikKK2ltcG9ydCBfb3N4X3N1cHBvcnQKKworY2xhc3MgVGVzdFN5c0NvbmZpZyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICIiIk1ha2UgYSBjb3B5IG9mIHN5cy5wYXRoIiIiCisgICAgICAgIHN1cGVyKFRlc3RTeXNDb25maWcsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCisgICAgICAgIHNlbGYubWFrZWZpbGUgPSBOb25lCisgICAgICAgICMgcGF0Y2hpbmcgb3MudW5hbWUKKyAgICAgICAgaWYgaGFzYXR0cihvcywgJ3VuYW1lJyk6CisgICAgICAgICAgICBzZWxmLnVuYW1lID0gb3MudW5hbWUKKyAgICAgICAgICAgIHNlbGYuX3VuYW1lID0gb3MudW5hbWUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi51bmFtZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3VuYW1lID0gTm9uZQorICAgICAgICBvcy51bmFtZSA9IHNlbGYuX2dldF91bmFtZQorICAgICAgICAjIHNhdmluZyB0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgc2VsZi5uYW1lID0gb3MubmFtZQorICAgICAgICBzZWxmLnBsYXRmb3JtID0gc3lzLnBsYXRmb3JtCisgICAgICAgIHNlbGYudmVyc2lvbiA9IHN5cy52ZXJzaW9uCisgICAgICAgIHNlbGYuc2VwID0gb3Muc2VwCisgICAgICAgIHNlbGYuam9pbiA9IG9zLnBhdGguam9pbgorICAgICAgICBzZWxmLmlzYWJzID0gb3MucGF0aC5pc2FicworICAgICAgICBzZWxmLnNwbGl0ZHJpdmUgPSBvcy5wYXRoLnNwbGl0ZHJpdmUKKyAgICAgICAgc2VsZi5fY29uZmlnX3ZhcnMgPSBjb3B5KHN5c2NvbmZpZy5fQ09ORklHX1ZBUlMpCisgICAgICAgIHNlbGYub2xkX2Vudmlyb24gPSBkZWVwY29weShvcy5lbnZpcm9uKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAiIiJSZXN0b3JlIHN5cy5wYXRoIiIiCisgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5zeXNfcGF0aAorICAgICAgICBpZiBzZWxmLm1ha2VmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb3MudW5saW5rKHNlbGYubWFrZWZpbGUpCisgICAgICAgIHNlbGYuX2NsZWFudXBfdGVzdGZuKCkKKyAgICAgICAgaWYgc2VsZi51bmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG9zLnVuYW1lID0gc2VsZi51bmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVsIG9zLnVuYW1lCisgICAgICAgIG9zLm5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgc3lzLnBsYXRmb3JtID0gc2VsZi5wbGF0Zm9ybQorICAgICAgICBzeXMudmVyc2lvbiA9IHNlbGYudmVyc2lvbgorICAgICAgICBvcy5zZXAgPSBzZWxmLnNlcAorICAgICAgICBvcy5wYXRoLmpvaW4gPSBzZWxmLmpvaW4KKyAgICAgICAgb3MucGF0aC5pc2FicyA9IHNlbGYuaXNhYnMKKyAgICAgICAgb3MucGF0aC5zcGxpdGRyaXZlID0gc2VsZi5zcGxpdGRyaXZlCisgICAgICAgIHN5c2NvbmZpZy5fQ09ORklHX1ZBUlMgPSBjb3B5KHNlbGYuX2NvbmZpZ192YXJzKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLm9sZF9lbnZpcm9uLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBvcy5lbnZpcm9uLmdldChrZXkpICE9IHZhbHVlOgorICAgICAgICAgICAgICAgIG9zLmVudmlyb25ba2V5XSA9IHZhbHVlCisKKyAgICAgICAgZm9yIGtleSBpbiBvcy5lbnZpcm9uLmtleXMoKToKKyAgICAgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZi5vbGRfZW52aXJvbjoKKyAgICAgICAgICAgICAgICBkZWwgb3MuZW52aXJvbltrZXldCisKKyAgICAgICAgc3VwZXIoVGVzdFN5c0NvbmZpZywgc2VsZikudGVhckRvd24oKQorCisgICAgZGVmIF9zZXRfdW5hbWUoc2VsZiwgdW5hbWUpOgorICAgICAgICBzZWxmLl91bmFtZSA9IHVuYW1lCisKKyAgICBkZWYgX2dldF91bmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3VuYW1lCisKKyAgICBkZWYgX2NsZWFudXBfdGVzdGZuKHNlbGYpOgorICAgICAgICBwYXRoID0gVEVTVEZOCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpOgorICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGgpCisgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUocGF0aCkKKworICAgIGRlZiB0ZXN0X2dldF9wYXRoX25hbWVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wYXRoX25hbWVzKCksIHN5c2NvbmZpZy5fU0NIRU1FX0tFWVMpCisKKyAgICBkZWYgdGVzdF9nZXRfcGF0aHMoc2VsZik6CisgICAgICAgIHNjaGVtZSA9IGdldF9wYXRocygpCisgICAgICAgIGRlZmF1bHRfc2NoZW1lID0gX2dldF9kZWZhdWx0X3NjaGVtZSgpCisgICAgICAgIHdhbnRlZCA9IF9leHBhbmRfdmFycyhkZWZhdWx0X3NjaGVtZSwgTm9uZSkKKyAgICAgICAgd2FudGVkID0gd2FudGVkLml0ZW1zKCkKKyAgICAgICAgd2FudGVkLnNvcnQoKQorICAgICAgICBzY2hlbWUgPSBzY2hlbWUuaXRlbXMoKQorICAgICAgICBzY2hlbWUuc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2NoZW1lLCB3YW50ZWQpCisKKyAgICBkZWYgdGVzdF9nZXRfcGF0aChzZWxmKToKKyAgICAgICAgIyB4eHggbWFrZSByZWFsIHRlc3RzIGhlcmUKKyAgICAgICAgZm9yIHNjaGVtZSBpbiBfSU5TVEFMTF9TQ0hFTUVTOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gX0lOU1RBTExfU0NIRU1FU1tzY2hlbWVdOgorICAgICAgICAgICAgICAgIHJlcyA9IGdldF9wYXRoKG5hbWUsIHNjaGVtZSkKKworICAgIGRlZiB0ZXN0X2dldF9jb25maWdfdmFycyhzZWxmKToKKyAgICAgICAgY3ZhcnMgPSBnZXRfY29uZmlnX3ZhcnMoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY3ZhcnMsIGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjdmFycykKKworICAgIGRlZiB0ZXN0X2dldF9wbGF0Zm9ybShzZWxmKToKKyAgICAgICAgIyB3aW5kb3dzIFhQLCAzMmJpdHMKKyAgICAgICAgb3MubmFtZSA9ICdudCcKKyAgICAgICAgc3lzLnZlcnNpb24gPSAoJzIuNC40ICgjNzEsIE9jdCAxOCAyMDA2LCAwODozNDo0MykgJworICAgICAgICAgICAgICAgICAgICAgICAnW01TQyB2LjEzMTAgMzIgYml0IChJbnRlbCldJykKKyAgICAgICAgc3lzLnBsYXRmb3JtID0gJ3dpbjMyJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnd2luMzInKQorCisgICAgICAgICMgd2luZG93cyBYUCwgYW1kNjQKKyAgICAgICAgb3MubmFtZSA9ICdudCcKKyAgICAgICAgc3lzLnZlcnNpb24gPSAoJzIuNC40ICgjNzEsIE9jdCAxOCAyMDA2LCAwODozNDo0MykgJworICAgICAgICAgICAgICAgICAgICAgICAnW01TQyB2LjEzMTAgMzIgYml0IChBbWQ2NCldJykKKyAgICAgICAgc3lzLnBsYXRmb3JtID0gJ3dpbjMyJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnd2luLWFtZDY0JykKKworICAgICAgICAjIHdpbmRvd3MgWFAsIGl0YW5pdW0KKyAgICAgICAgb3MubmFtZSA9ICdudCcKKyAgICAgICAgc3lzLnZlcnNpb24gPSAoJzIuNC40ICgjNzEsIE9jdCAxOCAyMDA2LCAwODozNDo0MykgJworICAgICAgICAgICAgICAgICAgICAgICAnW01TQyB2LjEzMTAgMzIgYml0IChJdGFuaXVtKV0nKQorICAgICAgICBzeXMucGxhdGZvcm0gPSAnd2luMzInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICd3aW4taWE2NCcpCisKKyAgICAgICAgIyBtYWNib29rCisgICAgICAgIG9zLm5hbWUgPSAncG9zaXgnCisgICAgICAgIHN5cy52ZXJzaW9uID0gKCcyLjUgKHIyNTo1MTkxOCwgU2VwIDE5IDIwMDYsIDA4OjQ5OjEzKSAnCisgICAgICAgICAgICAgICAgICAgICAgICdcbltHQ0MgNC4wLjEgKEFwcGxlIENvbXB1dGVyLCBJbmMuIGJ1aWxkIDUzNDEpXScpCisgICAgICAgIHN5cy5wbGF0Zm9ybSA9ICdkYXJ3aW4nCisgICAgICAgIHNlbGYuX3NldF91bmFtZSgoJ0RhcndpbicsICdtYWN6aWFkZScsICc4LjExLjEnLAorICAgICAgICAgICAgICAgICAgICgnRGFyd2luIEtlcm5lbCBWZXJzaW9uIDguMTEuMTogJworICAgICAgICAgICAgICAgICAgICAnV2VkIE9jdCAxMCAxODoyMzoyOCBQRFQgMjAwNzsgJworICAgICAgICAgICAgICAgICAgICAncm9vdDp4bnUtNzkyLjI1LjIwfjEvUkVMRUFTRV9JMzg2JyksICdQb3dlclBDJykpCisgICAgICAgIF9vc3hfc3VwcG9ydC5fcmVtb3ZlX29yaWdpbmFsX3ZhbHVlcyhnZXRfY29uZmlnX3ZhcnMoKSkKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddID0gJzEwLjMnCisKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gKCctZm5vLXN0cmljdC1hbGlhc2luZyAtRE5ERUJVRyAtZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZ3cmFwdiAtTzMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcycpCisKKyAgICAgICAgbWF4aW50ID0gc3lzLm1heGludAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMubWF4aW50ID0gMjE0NzQ4MzY0NworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC4zLXBwYycpCisgICAgICAgICAgICBzeXMubWF4aW50ID0gOTIyMzM3MjAzNjg1NDc3NTgwNworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC4zLXBwYzY0JykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5tYXhpbnQgPSBtYXhpbnQKKworCisgICAgICAgIHNlbGYuX3NldF91bmFtZSgoJ0RhcndpbicsICdtYWN6aWFkZScsICc4LjExLjEnLAorICAgICAgICAgICAgICAgICAgICgnRGFyd2luIEtlcm5lbCBWZXJzaW9uIDguMTEuMTogJworICAgICAgICAgICAgICAgICAgICAnV2VkIE9jdCAxMCAxODoyMzoyOCBQRFQgMjAwNzsgJworICAgICAgICAgICAgICAgICAgICAncm9vdDp4bnUtNzkyLjI1LjIwfjEvUkVMRUFTRV9JMzg2JyksICdpMzg2JykpCisgICAgICAgIF9vc3hfc3VwcG9ydC5fcmVtb3ZlX29yaWdpbmFsX3ZhbHVlcyhnZXRfY29uZmlnX3ZhcnMoKSkKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddID0gJzEwLjMnCisKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gKCctZm5vLXN0cmljdC1hbGlhc2luZyAtRE5ERUJVRyAtZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZ3cmFwdiAtTzMgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcycpCisKKyAgICAgICAgbWF4aW50ID0gc3lzLm1heGludAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMubWF4aW50ID0gMjE0NzQ4MzY0NworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC4zLWkzODYnKQorICAgICAgICAgICAgc3lzLm1heGludCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdtYWNvc3gtMTAuMy14ODZfNjQnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLm1heGludCA9IG1heGludAorCisgICAgICAgICMgbWFjYm9vayB3aXRoIGZhdCBiaW5hcmllcyAoZmF0LCB1bml2ZXJzYWwgb3IgZmF0NjQpCisgICAgICAgIF9vc3hfc3VwcG9ydC5fcmVtb3ZlX29yaWdpbmFsX3ZhbHVlcyhnZXRfY29uZmlnX3ZhcnMoKSkKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddID0gJzEwLjQnCisgICAgICAgIGdldF9jb25maWdfdmFycygpWydDRkxBR1MnXSA9ICgnLWFyY2ggcHBjIC1hcmNoIGkzODYgLWlzeXNyb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrICAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1keW5hbWljIC1ETkRFQlVHIC1nIC1PMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC40LWZhdCcpCisKKyAgICAgICAgX29zeF9zdXBwb3J0Ll9yZW1vdmVfb3JpZ2luYWxfdmFsdWVzKGdldF9jb25maWdfdmFycygpKQorICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnQ0ZMQUdTJ10gPSAoJy1hcmNoIHg4Nl82NCAtYXJjaCBpMzg2IC1pc3lzcm9vdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayAgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tY29tbW9uICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZHluYW1pYyAtRE5ERUJVRyAtZyAtTzMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdtYWNvc3gtMTAuNC1pbnRlbCcpCisKKyAgICAgICAgX29zeF9zdXBwb3J0Ll9yZW1vdmVfb3JpZ2luYWxfdmFsdWVzKGdldF9jb25maWdfdmFycygpKQorICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnQ0ZMQUdTJ10gPSAoJy1hcmNoIHg4Nl82NCAtYXJjaCBwcGMgLWFyY2ggaTM4NiAtaXN5c3Jvb3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsgICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLWNvbW1vbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWR5bmFtaWMgLUROREVCVUcgLWcgLU8zJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC40LWZhdDMnKQorCisgICAgICAgIF9vc3hfc3VwcG9ydC5fcmVtb3ZlX29yaWdpbmFsX3ZhbHVlcyhnZXRfY29uZmlnX3ZhcnMoKSkKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gKCctYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQgLWFyY2ggcHBjIC1hcmNoIGkzODYgLWlzeXNyb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrICAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1keW5hbWljIC1ETkRFQlVHIC1nIC1PMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdtYWNvc3gtMTAuNC11bml2ZXJzYWwnKQorCisgICAgICAgIF9vc3hfc3VwcG9ydC5fcmVtb3ZlX29yaWdpbmFsX3ZhbHVlcyhnZXRfY29uZmlnX3ZhcnMoKSkKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gKCctYXJjaCB4ODZfNjQgLWFyY2ggcHBjNjQgLWlzeXNyb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrICAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1keW5hbWljIC1ETkRFQlVHIC1nIC1PMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC40LWZhdDY0JykKKworICAgICAgICBmb3IgYXJjaCBpbiAoJ3BwYycsICdpMzg2JywgJ3g4Nl82NCcsICdwcGM2NCcpOgorICAgICAgICAgICAgX29zeF9zdXBwb3J0Ll9yZW1vdmVfb3JpZ2luYWxfdmFsdWVzKGdldF9jb25maWdfdmFycygpKQorICAgICAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gKCctYXJjaCAlcyAtaXN5c3Jvb3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrICAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tY29tbW9uICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWR5bmFtaWMgLUROREVCVUcgLWcgLU8zJyUoYXJjaCwpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjQtJXMnJShhcmNoLCkpCisKKyAgICAgICAgIyBsaW51eCBkZWJpYW4gc2FyZ2UKKyAgICAgICAgb3MubmFtZSA9ICdwb3NpeCcKKyAgICAgICAgc3lzLnZlcnNpb24gPSAoJzIuMy41ICgjMSwgSnVsICA0IDIwMDcsIDE3OjI4OjU5KSAnCisgICAgICAgICAgICAgICAgICAgICAgICdcbltHQ0MgNC4xLjIgMjAwNjExMTUgKHByZXJlbGVhc2UpIChEZWJpYW4gNC4xLjEtMjEpXScpCisgICAgICAgIHN5cy5wbGF0Zm9ybSA9ICdsaW51eDInCisgICAgICAgIHNlbGYuX3NldF91bmFtZSgoJ0xpbnV4JywgJ2FnbGFlJywgJzIuNi4yMS4xZGVkaWJveC1yNycsCisgICAgICAgICAgICAgICAgICAgICcjMSBNb24gQXByIDMwIDE3OjI1OjM4IENFU1QgMjAwNycsICdpNjg2JykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ2xpbnV4LWk2ODYnKQorCisgICAgICAgICMgWFhYIG1vcmUgcGxhdGZvcm1zIHRvIHRlc3RzIGhlcmUKKworICAgIGRlZiB0ZXN0X2dldF9jb25maWdfaF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgY29uZmlnX2ggPSBzeXNjb25maWcuZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNvbmZpZ19oKSwgY29uZmlnX2gpCisKKyAgICBkZWYgdGVzdF9nZXRfc2NoZW1lX25hbWVzKHNlbGYpOgorICAgICAgICB3YW50ZWQgPSAoJ250JywgJ250X3VzZXInLCAnb3MyJywgJ29zMl9ob21lJywgJ29zeF9mcmFtZXdvcmtfdXNlcicsCisgICAgICAgICAgICAgICAgICAncG9zaXhfaG9tZScsICdwb3NpeF9wcmVmaXgnLCAncG9zaXhfdXNlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3NjaGVtZV9uYW1lcygpLCB3YW50ZWQpCisKKyAgICBkZWYgdGVzdF9zeW1saW5rKHNlbGYpOgorICAgICAgICAjIElzc3VlIDc4ODAKKyAgICAgICAgc3ltbGluayA9IGdldF9hdHRyaWJ1dGUob3MsICJzeW1saW5rIikKKyAgICAgICAgZGVmIGdldChweXRob24pOgorICAgICAgICAgICAgY21kID0gW3B5dGhvbiwgJy1jJywKKyAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQgc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpJ10KKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgIHJldHVybiBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgcmVhbCA9IG9zLnBhdGgucmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgIGxpbmsgPSBvcy5wYXRoLmFic3BhdGgoVEVTVEZOKQorICAgICAgICBzeW1saW5rKHJlYWwsIGxpbmspCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0KHJlYWwpLCBnZXQobGluaykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB1bmxpbmsobGluaykKKworICAgIGRlZiB0ZXN0X3VzZXJfc2ltaWxhcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjODc1OTogbWFrZSBzdXJlIHRoZSBwb3NpeCBzY2hlbWUgZm9yIHRoZSB1c2VycworICAgICAgICAjIGlzIHNpbWlsYXIgdG8gdGhlIGdsb2JhbCBwb3NpeF9wcmVmaXggb25lCisgICAgICAgIGJhc2UgPSBnZXRfY29uZmlnX3ZhcignYmFzZScpCisgICAgICAgIHVzZXIgPSBnZXRfY29uZmlnX3ZhcigndXNlcmJhc2UnKQorICAgICAgICAjIHRoZSBnbG9iYWwgc2NoZW1lIG1pcnJvcnMgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gcHJlZml4IGFuZAorICAgICAgICAjIGV4ZWMtcHJlZml4IGJ1dCBub3QgdGhlIHVzZXIgc2NoZW1lLCBzbyB3ZSBoYXZlIHRvIGFkYXB0IHRoZSBwYXRocworICAgICAgICAjIGJlZm9yZSBjb21wYXJpbmcgKGlzc3VlICM5MTAwKQorICAgICAgICBhZGFwdCA9IHN5cy5wcmVmaXggIT0gc3lzLmV4ZWNfcHJlZml4CisgICAgICAgIGZvciBuYW1lIGluICgnc3RkbGliJywgJ3BsYXRzdGRsaWInLCAncHVyZWxpYicsICdwbGF0bGliJyk6CisgICAgICAgICAgICBnbG9iYWxfcGF0aCA9IGdldF9wYXRoKG5hbWUsICdwb3NpeF9wcmVmaXgnKQorICAgICAgICAgICAgaWYgYWRhcHQ6CisgICAgICAgICAgICAgICAgZ2xvYmFsX3BhdGggPSBnbG9iYWxfcGF0aC5yZXBsYWNlKHN5cy5leGVjX3ByZWZpeCwgc3lzLnByZWZpeCkKKyAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS5yZXBsYWNlKHN5cy5leGVjX3ByZWZpeCwgc3lzLnByZWZpeCkKKyAgICAgICAgICAgIHVzZXJfcGF0aCA9IGdldF9wYXRoKG5hbWUsICdwb3NpeF91c2VyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXNlcl9wYXRoLCBnbG9iYWxfcGF0aC5yZXBsYWNlKGJhc2UsIHVzZXIsIDEpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iLCAidGVzdCBvbmx5IHJlbGV2YW50IG9uIE1hY09TWCIpCisgICAgZGVmIHRlc3RfcGxhdGZvcm1faW5fc3VicHJvY2VzcyhzZWxmKToKKyAgICAgICAgbXlfcGxhdGZvcm0gPSBzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCkKKworICAgICAgICAjIFRlc3Qgd2l0aG91dCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgaW4gdGhlIGVudmlyb25tZW50CisKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgaWYgJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcgaW4gZW52OgorICAgICAgICAgICAgZGVsIGVudlsnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJ10KKworICAgICAgICB3aXRoIG9wZW4oJy9kZXYvbnVsbCcsICd3JykgYXMgZGV2bnVsbF9mcDoKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsKKyAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXNjb25maWc7IHByaW50KHN5c2NvbmZpZy5nZXRfcGxhdGZvcm0oKSknLAorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICBzdGRlcnI9ZGV2bnVsbF9mcCwKKyAgICAgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKKyAgICAgICAgdGVzdF9wbGF0Zm9ybSA9IHRlc3RfcGxhdGZvcm0uZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIHN0YXR1cyA9IHAud2FpdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlfcGxhdGZvcm0sIHRlc3RfcGxhdGZvcm0pCisKKworICAgICAgICAjIFRlc3Qgd2l0aCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgaW4gdGhlIGVudmlyb25tZW50LCBhbmQKKyAgICAgICAgIyB1c2luZyBhIHZhbHVlIHRoYXQgaXMgdW5saWtlbHkgdG8gYmUgdGhlIGRlZmF1bHQgb25lLgorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddID0gJzEwLjEnCisKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWworICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzY29uZmlnOyBwcmludChzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCkpJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgc3RkZXJyPW9wZW4oJy9kZXYvbnVsbCcpLAorICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgdGVzdF9wbGF0Zm9ybSA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCisgICAgICAgIHRlc3RfcGxhdGZvcm0gPSB0ZXN0X3BsYXRmb3JtLmRlY29kZSgndXRmLTgnKQorICAgICAgICBzdGF0dXMgPSBwLndhaXQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG15X3BsYXRmb3JtLCB0ZXN0X3BsYXRmb3JtKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFRlc3RTeXNDb25maWcpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RhcmZpbGUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90YXJmaWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDM0MmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90YXJmaWxlLnB5CkBAIC0wLDAgKzEsMTY2NyBAQAorIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi0KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgU3RyaW5nSU8KK2Zyb20gaGFzaGxpYiBpbXBvcnQgbWQ1CitpbXBvcnQgZXJybm8KKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGFyZmlsZQorCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisjIENoZWNrIGZvciBvdXIgY29tcHJlc3Npb24gbW9kdWxlcy4KK3RyeToKKyAgICBpbXBvcnQgZ3ppcAorICAgIGd6aXAuR3ppcEZpbGUKK2V4Y2VwdCAoSW1wb3J0RXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICBnemlwID0gTm9uZQordHJ5OgorICAgIGltcG9ydCBiejIKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBiejIgPSBOb25lCisKK2RlZiBtZDVzdW0oZGF0YSk6CisgICAgcmV0dXJuIG1kNShkYXRhKS5oZXhkaWdlc3QoKQorCitURU1QRElSID0gb3MucGF0aC5hYnNwYXRoKHRlc3Rfc3VwcG9ydC5URVNURk4pCit0YXJuYW1lID0gdGVzdF9zdXBwb3J0LmZpbmRmaWxlKCJ0ZXN0dGFyLnRhciIpCitnemlwbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIuZ3oiKQorYnoybmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIuYnoyIikKK3RtcG5hbWUgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInRtcC50YXIiKQorCittZDVfcmVndHlwZSA9ICI2NWY0NzdjODE4YWQ5ZTE1ZjdmZWFiMGM2ZDM3NzQyZiIKK21kNV9zcGFyc2UgPSAiYTU0ZmJjNGNhNGY0Mzk5YTkwZTFiMjcxNjQwMTJmYzYiCisKKworY2xhc3MgUmVhZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgdGFybmFtZSA9IHRhcm5hbWUKKyAgICBtb2RlID0gInI6IgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRhciA9IHRhcmZpbGUub3BlbihzZWxmLnRhcm5hbWUsIG1vZGU9c2VsZi5tb2RlLCBlbmNvZGluZz0iaXNvODg1OS0xIikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi50YXIuY2xvc2UoKQorCisKK2NsYXNzIFVzdGFyUmVhZFRlc3QoUmVhZFRlc3QpOgorCisgICAgZGVmIHRlc3RfZmlsZW9ial9yZWd1bGFyX2ZpbGUoc2VsZik6CisgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoInVzdGFyL3JlZ3R5cGUiKQorICAgICAgICBmb2JqID0gc2VsZi50YXIuZXh0cmFjdGZpbGUodGFyaW5mbykKKyAgICAgICAgZGF0YSA9IGZvYmoucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgobGVuKGRhdGEpLCBtZDVzdW0oZGF0YSkpID09ICh0YXJpbmZvLnNpemUsIG1kNV9yZWd0eXBlKSwKKyAgICAgICAgICAgICAgICAicmVndWxhciBmaWxlIGV4dHJhY3Rpb24gZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X2ZpbGVvYmpfcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICBzZWxmLnRhci5leHRyYWN0KCJ1c3Rhci9yZWd0eXBlIiwgVEVNUERJUikKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvcmVndHlwZSIpCisgICAgICAgIGZvYmoxID0gb3Blbihvcy5wYXRoLmpvaW4oVEVNUERJUiwgInVzdGFyL3JlZ3R5cGUiKSwgInJVIikKKyAgICAgICAgZm9iajIgPSBzZWxmLnRhci5leHRyYWN0ZmlsZSh0YXJpbmZvKQorCisgICAgICAgIGxpbmVzMSA9IGZvYmoxLnJlYWRsaW5lcygpCisgICAgICAgIGxpbmVzMiA9IGZvYmoyLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lczEgPT0gbGluZXMyLAorICAgICAgICAgICAgICAgICJmaWxlb2JqLnJlYWRsaW5lcygpIGZhaWxlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4obGluZXMyKSA9PSAxMTQsCisgICAgICAgICAgICAgICAgImZpbGVvYmoucmVhZGxpbmVzKCkgZmFpbGVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzMls4M10gPT0KKyAgICAgICAgICAgICAgICAiSSB3aWxsIGdsYWRseSBhZG1pdCB0aGF0IFB5dGhvbiBpcyBub3QgdGhlIGZhc3Rlc3QgcnVubmluZyBzY3JpcHRpbmcgbGFuZ3VhZ2UuXG4iLAorICAgICAgICAgICAgICAgICJmaWxlb2JqLnJlYWRsaW5lcygpIGZhaWxlZCIpCisKKyAgICBkZWYgdGVzdF9maWxlb2JqX2l0ZXIoc2VsZik6CisgICAgICAgIHNlbGYudGFyLmV4dHJhY3QoInVzdGFyL3JlZ3R5cGUiLCBURU1QRElSKQorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJ1c3Rhci9yZWd0eXBlIikKKyAgICAgICAgZm9iajEgPSBvcGVuKG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvcmVndHlwZSIpLCAiclUiKQorICAgICAgICBmb2JqMiA9IHNlbGYudGFyLmV4dHJhY3RmaWxlKHRhcmluZm8pCisgICAgICAgIGxpbmVzMSA9IGZvYmoxLnJlYWRsaW5lcygpCisgICAgICAgIGxpbmVzMiA9IFtsaW5lIGZvciBsaW5lIGluIGZvYmoyXQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXMxID09IGxpbmVzMiwKKyAgICAgICAgICAgICAgICAgICAgICJmaWxlb2JqLl9faXRlcl9fKCkgZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X2ZpbGVvYmpfc2VlayhzZWxmKToKKyAgICAgICAgc2VsZi50YXIuZXh0cmFjdCgidXN0YXIvcmVndHlwZSIsIFRFTVBESVIpCisgICAgICAgIGZvYmogPSBvcGVuKG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvcmVndHlwZSIpLCAicmIiKQorICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKKyAgICAgICAgZm9iai5jbG9zZSgpCisKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvcmVndHlwZSIpCisgICAgICAgIGZvYmogPSBzZWxmLnRhci5leHRyYWN0ZmlsZSh0YXJpbmZvKQorCisgICAgICAgIHRleHQgPSBmb2JqLnJlYWQoKQorICAgICAgICBmb2JqLnNlZWsoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPT0gZm9iai50ZWxsKCksCisgICAgICAgICAgICAgICAgICAgICAic2VlaygpIHRvIGZpbGUncyBzdGFydCBmYWlsZWQiKQorICAgICAgICBmb2JqLnNlZWsoMjA0OCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIwNDggPT0gZm9iai50ZWxsKCksCisgICAgICAgICAgICAgICAgICAgICAic2VlaygpIHRvIGFic29sdXRlIHBvc2l0aW9uIGZhaWxlZCIpCisgICAgICAgIGZvYmouc2VlaygtMTAyNCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDEwMjQgPT0gZm9iai50ZWxsKCksCisgICAgICAgICAgICAgICAgICAgICAic2VlaygpIHRvIG5lZ2F0aXZlIHJlbGF0aXZlIHBvc2l0aW9uIGZhaWxlZCIpCisgICAgICAgIGZvYmouc2VlaygxMDI0LCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMjA0OCA9PSBmb2JqLnRlbGwoKSwKKyAgICAgICAgICAgICAgICAgICAgICJzZWVrKCkgdG8gcG9zaXRpdmUgcmVsYXRpdmUgcG9zaXRpb24gZmFpbGVkIikKKyAgICAgICAgcyA9IGZvYmoucmVhZCgxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMgPT0gZGF0YVsyMDQ4OjIwNThdLAorICAgICAgICAgICAgICAgICAgICAgInJlYWQoKSBhZnRlciBzZWVrIGZhaWxlZCIpCisgICAgICAgIGZvYmouc2VlaygwLCAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyaW5mby5zaXplID09IGZvYmoudGVsbCgpLAorICAgICAgICAgICAgICAgICAgICAgInNlZWsoKSB0byBmaWxlJ3MgZW5kIGZhaWxlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb2JqLnJlYWQoKSA9PSAiIiwKKyAgICAgICAgICAgICAgICAgICAgICJyZWFkKCkgYXQgZmlsZSdzIGVuZCBkaWQgbm90IHJldHVybiBlbXB0eSBzdHJpbmciKQorICAgICAgICBmb2JqLnNlZWsoLXRhcmluZm8uc2l6ZSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPT0gZm9iai50ZWxsKCksCisgICAgICAgICAgICAgICAgICAgICAicmVsYXRpdmUgc2VlaygpIHRvIGZpbGUncyBzdGFydCBmYWlsZWQiKQorICAgICAgICBmb2JqLnNlZWsoNTEyKQorICAgICAgICBzMSA9IGZvYmoucmVhZGxpbmVzKCkKKyAgICAgICAgZm9iai5zZWVrKDUxMikKKyAgICAgICAgczIgPSBmb2JqLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzMSA9PSBzMiwKKyAgICAgICAgICAgICAgICAgICAgICJyZWFkbGluZXMoKSBhZnRlciBzZWVrIGZhaWxlZCIpCisgICAgICAgIGZvYmouc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGZvYmoucmVhZGxpbmUoKSkgPT0gZm9iai50ZWxsKCksCisgICAgICAgICAgICAgICAgICAgICAidGVsbCgpIGFmdGVyIHJlYWRsaW5lKCkgZmFpbGVkIikKKyAgICAgICAgZm9iai5zZWVrKDUxMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihmb2JqLnJlYWRsaW5lKCkpICsgNTEyID09IGZvYmoudGVsbCgpLAorICAgICAgICAgICAgICAgICAgICAgInRlbGwoKSBhZnRlciBzZWVrKCkgYW5kIHJlYWRsaW5lKCkgZmFpbGVkIikKKyAgICAgICAgZm9iai5zZWVrKDApCisgICAgICAgIGxpbmUgPSBmb2JqLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvYmoucmVhZCgpID09IGRhdGFbbGVuKGxpbmUpOl0sCisgICAgICAgICAgICAgICAgICAgICAicmVhZCgpIGFmdGVyIHJlYWRsaW5lKCkgZmFpbGVkIikKKyAgICAgICAgZm9iai5jbG9zZSgpCisKKyAgICAjIFRlc3QgaWYgc3ltYm9saWMgYW5kIGhhcmQgbGlua3MgYXJlIHJlc29sdmVkIGJ5IGV4dHJhY3RmaWxlKCkuICBUaGUKKyAgICAjIHRlc3QgbGluayBtZW1iZXJzIGVhY2ggcG9pbnQgdG8gYSByZWd1bGFyIG1lbWJlciB3aG9zZSBkYXRhIGlzCisgICAgIyBzdXBwb3NlZCB0byBiZSBleHBvcnRlZC4KKyAgICBkZWYgX3Rlc3RfZmlsZW9ial9saW5rKHNlbGYsIGxua3R5cGUsIHJlZ3R5cGUpOgorICAgICAgICBhID0gc2VsZi50YXIuZXh0cmFjdGZpbGUobG5rdHlwZSkKKyAgICAgICAgYiA9IHNlbGYudGFyLmV4dHJhY3RmaWxlKHJlZ3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5uYW1lLCBiLm5hbWUpCisKKyAgICBkZWYgdGVzdF9maWxlb2JqX2xpbmsxKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVvYmpfbGluaygidXN0YXIvbG5rdHlwZSIsICJ1c3Rhci9yZWd0eXBlIikKKworICAgIGRlZiB0ZXN0X2ZpbGVvYmpfbGluazIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZmlsZW9ial9saW5rKCIuL3VzdGFyL2xpbmt0ZXN0Mi9sbmt0eXBlIiwgInVzdGFyL2xpbmt0ZXN0MS9yZWd0eXBlIikKKworICAgIGRlZiB0ZXN0X2ZpbGVvYmpfc3ltbGluazEoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZmlsZW9ial9saW5rKCJ1c3Rhci9zeW10eXBlIiwgInVzdGFyL3JlZ3R5cGUiKQorCisgICAgZGVmIHRlc3RfZmlsZW9ial9zeW1saW5rMihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9maWxlb2JqX2xpbmsoIi4vdXN0YXIvbGlua3Rlc3QyL3N5bXR5cGUiLCAidXN0YXIvbGlua3Rlc3QxL3JlZ3R5cGUiKQorCisgICAgZGVmIHRlc3RfaXNzdWUxNDE2MChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9maWxlb2JqX2xpbmsoInN5bXR5cGUyIiwgInVzdGFyL3JlZ3R5cGUiKQorCisKK2NsYXNzIENvbW1vblJlYWRUZXN0KFJlYWRUZXN0KToKKworICAgIGRlZiB0ZXN0X2VtcHR5X3RhcmZpbGUoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgaXNzdWU2MTIzOiBBbGxvdyBvcGVuaW5nIGVtcHR5IGFyY2hpdmVzLgorICAgICAgICAjIFRoaXMgdGVzdCBjaGVja3MgaWYgdGFyZmlsZS5vcGVuKCkgaXMgYWJsZSB0byBvcGVuIGFuIGVtcHR5IHRhcgorICAgICAgICAjIGFyY2hpdmUgc3VjY2Vzc2Z1bGx5LiBOb3RlIHRoYXQgYW4gZW1wdHkgdGFyIGFyY2hpdmUgaXMgbm90IHRoZQorICAgICAgICAjIHNhbWUgYXMgYW4gZW1wdHkgZmlsZSEKKyAgICAgICAgdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZS5yZXBsYWNlKCJyIiwgInciKSkuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlKQorICAgICAgICAgICAgdGFyLmdldG5hbWVzKCkKKyAgICAgICAgZXhjZXB0IHRhcmZpbGUuUmVhZEVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJ0YXJmaWxlLm9wZW4oKSBmYWlsZWQgb24gZW1wdHkgYXJjaGl2ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKHRhci5nZXRtZW1iZXJzKCksIFtdKQorCisgICAgZGVmIHRlc3RfbnVsbF90YXJmaWxlKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIGlzc3VlNjEyMzogQWxsb3cgb3BlbmluZyBlbXB0eSBhcmNoaXZlcy4KKyAgICAgICAgIyBUaGlzIHRlc3QgZ3VhcmFudGVlcyB0aGF0IHRhcmZpbGUub3BlbigpIGRvZXMgbm90IHRyZWF0IGFuIGVtcHR5CisgICAgICAgICMgZmlsZSBhcyBhbiBlbXB0eSB0YXIgYXJjaGl2ZS4KKyAgICAgICAgb3Blbih0bXBuYW1lLCAid2IiKS5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuUmVhZEVycm9yLCB0YXJmaWxlLm9wZW4sIHRtcG5hbWUsIHNlbGYubW9kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgdG1wbmFtZSkKKworICAgIGRlZiB0ZXN0X2lnbm9yZV96ZXJvcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IFRhckZpbGUncyBpZ25vcmVfemVyb3Mgb3B0aW9uLgorICAgICAgICBpZiBzZWxmLm1vZGUuZW5kc3dpdGgoIjpneiIpOgorICAgICAgICAgICAgX29wZW4gPSBnemlwLkd6aXBGaWxlCisgICAgICAgIGVsaWYgc2VsZi5tb2RlLmVuZHN3aXRoKCI6YnoyIik6CisgICAgICAgICAgICBfb3BlbiA9IGJ6Mi5CWjJGaWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfb3BlbiA9IG9wZW4KKworICAgICAgICBmb3IgY2hhciBpbiAoJ1wwJywgJ2EnKToKKyAgICAgICAgICAgICMgVGVzdCBpZiBFT0ZIZWFkZXJFcnJvciAoJ1wwJykgYW5kIEludmFsaWRIZWFkZXJFcnJvciAoJ2EnKQorICAgICAgICAgICAgIyBhcmUgaWdub3JlZCBjb3JyZWN0bHkuCisgICAgICAgICAgICBmb2JqID0gX29wZW4odG1wbmFtZSwgIndiIikKKyAgICAgICAgICAgIGZvYmoud3JpdGUoY2hhciAqIDEwMjQpCisgICAgICAgICAgICBmb2JqLndyaXRlKHRhcmZpbGUuVGFySW5mbygiZm9vIikudG9idWYoKSkKKyAgICAgICAgICAgIGZvYmouY2xvc2UoKQorCisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgbW9kZT0iciIsIGlnbm9yZV96ZXJvcz1UcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwodGFyLmdldG5hbWVzKCksIFsiZm9vIl0sCisgICAgICAgICAgICAgICAgICAgICJpZ25vcmVfemVyb3M9VHJ1ZSBzaG91bGQgaGF2ZSBza2lwcGVkIHRoZSAlci1ibG9ja3MiICUgY2hhcikKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKworY2xhc3MgTWlzY1JlYWRUZXN0KENvbW1vblJlYWRUZXN0KToKKworICAgIGRlZiB0ZXN0X25vX25hbWVfYXJndW1lbnQoc2VsZik6CisgICAgICAgIGZvYmogPSBvcGVuKHNlbGYudGFybmFtZSwgInJiIikKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKGZpbGVvYmo9Zm9iaiwgbW9kZT1zZWxmLm1vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLm5hbWUsIG9zLnBhdGguYWJzcGF0aChmb2JqLm5hbWUpKQorCisgICAgZGVmIHRlc3Rfbm9fbmFtZV9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGRhdGEgPSBvcGVuKHNlbGYudGFybmFtZSwgInJiIikucmVhZCgpCisgICAgICAgIGZvYmogPSBTdHJpbmdJTy5TdHJpbmdJTyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgZm9iaiwgIm5hbWUiKQorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIubmFtZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2VtcHR5X25hbWVfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBkYXRhID0gb3BlbihzZWxmLnRhcm5hbWUsICJyYiIpLnJlYWQoKQorICAgICAgICBmb2JqID0gU3RyaW5nSU8uU3RyaW5nSU8oZGF0YSkKKyAgICAgICAgZm9iai5uYW1lID0gIiIKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKGZpbGVvYmo9Zm9iaiwgbW9kZT1zZWxmLm1vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLm5hbWUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9maWxlb2JqX3dpdGhfb2Zmc2V0KHNlbGYpOgorICAgICAgICAjIFNraXAgdGhlIGZpcnN0IG1lbWJlciBhbmQgc3RvcmUgdmFsdWVzIGZyb20gdGhlIHNlY29uZCBtZW1iZXIKKyAgICAgICAgIyBvZiB0aGUgdGVzdHRhci4KKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHNlbGYudGFybmFtZSwgbW9kZT1zZWxmLm1vZGUpCisgICAgICAgIHRhci5uZXh0KCkKKyAgICAgICAgdCA9IHRhci5uZXh0KCkKKyAgICAgICAgbmFtZSA9IHQubmFtZQorICAgICAgICBvZmZzZXQgPSB0Lm9mZnNldAorICAgICAgICBkYXRhID0gdGFyLmV4dHJhY3RmaWxlKHQpLnJlYWQoKQorICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgICAgICMgT3BlbiB0aGUgdGVzdHRhciBhbmQgc2VlayB0byB0aGUgb2Zmc2V0IG9mIHRoZSBzZWNvbmQgbWVtYmVyLgorICAgICAgICBpZiBzZWxmLm1vZGUuZW5kc3dpdGgoIjpneiIpOgorICAgICAgICAgICAgX29wZW4gPSBnemlwLkd6aXBGaWxlCisgICAgICAgIGVsaWYgc2VsZi5tb2RlLmVuZHN3aXRoKCI6YnoyIik6CisgICAgICAgICAgICBfb3BlbiA9IGJ6Mi5CWjJGaWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfb3BlbiA9IG9wZW4KKyAgICAgICAgZm9iaiA9IF9vcGVuKHNlbGYudGFybmFtZSwgInJiIikKKyAgICAgICAgZm9iai5zZWVrKG9mZnNldCkKKworICAgICAgICAjIFRlc3QgaWYgdGhlIHRhcmZpbGUgc3RhcnRzIHdpdGggdGhlIHNlY29uZCBtZW1iZXIuCisgICAgICAgIHRhciA9IHRhci5vcGVuKHNlbGYudGFybmFtZSwgbW9kZT0icjoiLCBmaWxlb2JqPWZvYmopCisgICAgICAgIHQgPSB0YXIubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5uYW1lLCBuYW1lKQorICAgICAgICAjIFJlYWQgdG8gdGhlIGVuZCBvZiBmaWxlb2JqIGFuZCB0ZXN0IGlmIHNlZWtpbmcgYmFjayB0byB0aGUKKyAgICAgICAgIyBiZWdpbm5pbmcgd29ya3MuCisgICAgICAgIHRhci5nZXRtZW1iZXJzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIuZXh0cmFjdGZpbGUodCkucmVhZCgpLCBkYXRhLAorICAgICAgICAgICAgICAgICJzZWVrIGJhY2sgZGlkIG5vdCB3b3JrIikKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2ZhaWxfY29tcChzZWxmKToKKyAgICAgICAgIyBGb3IgR3ppcCBhbmQgQnoyIFRlc3RzOiBmYWlsIHdpdGggYSBSZWFkRXJyb3Igb24gYW4gdW5jb21wcmVzc2VkIGZpbGUuCisgICAgICAgIGlmIHNlbGYubW9kZSA9PSAicjoiOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuUmVhZEVycm9yLCB0YXJmaWxlLm9wZW4sIHRhcm5hbWUsIHNlbGYubW9kZSkKKyAgICAgICAgZm9iaiA9IG9wZW4odGFybmFtZSwgInJiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkKKworICAgIGRlZiB0ZXN0X3Y3X2RpcnR5cGUoc2VsZik6CisgICAgICAgICMgVGVzdCBvbGQgc3R5bGUgZGlydHlwZSBtZW1iZXIgKGJ1ZyAjMTMzNjYyMyk6CisgICAgICAgICMgT2xkIFY3IHRhcnMgY3JlYXRlIGRpcmVjdG9yeSBtZW1iZXJzIHVzaW5nIGFuIEFSRUdUWVBFCisgICAgICAgICMgaGVhZGVyIHdpdGggYSAiLyIgYXBwZW5kZWQgdG8gdGhlIGZpbGVuYW1lIGZpZWxkLgorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJtaXNjL2RpcnR5cGUtb2xkLXY3IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmluZm8udHlwZSA9PSB0YXJmaWxlLkRJUlRZUEUsCisgICAgICAgICAgICAgICAgInY3IGRpcnR5cGUgZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X3hzdGFyX3R5cGUoc2VsZik6CisgICAgICAgICMgVGhlIHhzdGFyIGZvcm1hdCBzdG9yZXMgZXh0cmEgYXRpbWUgYW5kIGN0aW1lIGZpZWxkcyBpbnNpZGUgdGhlCisgICAgICAgICMgc3BhY2UgcmVzZXJ2ZWQgZm9yIHRoZSBwcmVmaXggZmllbGQuIFRoZSBwcmVmaXggZmllbGQgbXVzdCBiZQorICAgICAgICAjIGlnbm9yZWQgaW4gdGhpcyBjYXNlLCBvdGhlcndpc2UgaXQgd2lsbCBtZXNzIHVwIHRoZSBuYW1lLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnRhci5nZXRtZW1iZXIoIm1pc2MvcmVndHlwZS14c3RhciIpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZmFpbGVkIHRvIGZpbmQgbWlzYy9yZWd0eXBlLXhzdGFyIChtYW5nbGVkIHByZWZpeD8pIikKKworICAgIGRlZiB0ZXN0X2NoZWNrX21lbWJlcnMoc2VsZik6CisgICAgICAgIGZvciB0YXJpbmZvIGluIHNlbGYudGFyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludCh0YXJpbmZvLm10aW1lKSA9PSAwNzYwNjEzNjYxNywKKyAgICAgICAgICAgICAgICAgICAgIndyb25nIG10aW1lIGZvciAlcyIgJSB0YXJpbmZvLm5hbWUpCisgICAgICAgICAgICBpZiBub3QgdGFyaW5mby5uYW1lLnN0YXJ0c3dpdGgoInVzdGFyLyIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyaW5mby51bmFtZSA9PSAidGFyZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICJ3cm9uZyB1bmFtZSBmb3IgJXMiICUgdGFyaW5mby5uYW1lKQorCisgICAgZGVmIHRlc3RfZmluZF9tZW1iZXJzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50YXIuZ2V0bWVtYmVycygpWy0xXS5uYW1lID09ICJtaXNjL2VvZiIsCisgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBmaW5kIGFsbCBtZW1iZXJzIikKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfaGFyZGxpbmsoc2VsZik6CisgICAgICAgICMgVGVzdCBoYXJkbGluayBleHRyYWN0aW9uIChlLmcuIGJ1ZyAjODU3Mjk3KS4KKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFybmFtZSwgZXJyb3JsZXZlbD0xLCBlbmNvZGluZz0iaXNvODg1OS0xIikgYXMgdGFyOgorICAgICAgICAgICAgdGFyLmV4dHJhY3QoInVzdGFyL3JlZ3R5cGUiLCBURU1QRElSKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLnJlbW92ZSwgb3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9yZWd0eXBlIikpCisKKyAgICAgICAgICAgIHRhci5leHRyYWN0KCJ1c3Rhci9sbmt0eXBlIiwgVEVNUERJUikKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5yZW1vdmUsIG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvbG5rdHlwZSIpKQorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvbG5rdHlwZSIpLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZDVzdW0oZGF0YSksIG1kNV9yZWd0eXBlKQorCisgICAgICAgICAgICB0YXIuZXh0cmFjdCgidXN0YXIvc3ltdHlwZSIsIFRFTVBESVIpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MucmVtb3ZlLCBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInVzdGFyL3N5bXR5cGUiKSkKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oVEVNUERJUiwgInVzdGFyL3N5bXR5cGUiKSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWQ1c3VtKGRhdGEpLCBtZDVfcmVndHlwZSkKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RhbGwoc2VsZik6CisgICAgICAgICMgVGVzdCBpZiBleHRyYWN0YWxsKCkgY29ycmVjdGx5IHJlc3RvcmVzIGRpcmVjdG9yeSBwZXJtaXNzaW9ucworICAgICAgICAjIGFuZCB0aW1lcyAoc2VlIGlzc3VlMTczNSkuCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0YXJuYW1lLCBlbmNvZGluZz0iaXNvODg1OS0xIikKKyAgICAgICAgZGlyZWN0b3JpZXMgPSBbdCBmb3IgdCBpbiB0YXIgaWYgdC5pc2RpcigpXQorICAgICAgICB0YXIuZXh0cmFjdGFsbChURU1QRElSLCBkaXJlY3RvcmllcykKKyAgICAgICAgZm9yIHRhcmluZm8gaW4gZGlyZWN0b3JpZXM6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKFRFTVBESVIsIHRhcmluZm8ubmFtZSkKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAid2luMzIiOgorICAgICAgICAgICAgICAgICMgV2luMzIgaGFzIG5vIHN1cHBvcnQgZm9yIGZpbmUgZ3JhaW5lZCBwZXJtaXNzaW9ucy4KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ubW9kZSAmIDA3NzcsIG9zLnN0YXQocGF0aCkuc3RfbW9kZSAmIDA3NzcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ubXRpbWUsIG9zLnBhdGguZ2V0bXRpbWUocGF0aCkpCisgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9pbml0X2Nsb3NlX2ZvYmooc2VsZik6CisgICAgICAgICMgSXNzdWUgIzczNDE6IENsb3NlIHRoZSBpbnRlcm5hbCBmaWxlIG9iamVjdCBpbiB0aGUgVGFyRmlsZQorICAgICAgICAjIGNvbnN0cnVjdG9yIGluIGNhc2Ugb2YgYW4gZXJyb3IuIEZvciB0aGUgdGVzdCB3ZSByZWx5IG9uCisgICAgICAgICMgdGhlIGZhY3QgdGhhdCBvcGVuaW5nIGFuIGVtcHR5IGZpbGUgcmFpc2VzIGEgUmVhZEVycm9yLgorICAgICAgICBlbXB0eSA9IG9zLnBhdGguam9pbihURU1QRElSLCAiZW1wdHkiKQorICAgICAgICBvcGVuKGVtcHR5LCAid2IiKS53cml0ZSgiIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB0YXIgPSBvYmplY3QuX19uZXdfXyh0YXJmaWxlLlRhckZpbGUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGFyLl9faW5pdF9fKGVtcHR5KQorICAgICAgICAgICAgZXhjZXB0IHRhcmZpbGUuUmVhZEVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuZmlsZW9iai5jbG9zZWQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUmVhZEVycm9yIG5vdCByYWlzZWQiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKGVtcHR5KQorCisgICAgZGVmIHRlc3RfcGFyYWxsZWxfaXRlcmF0aW9uKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNjYwMTogUmVzdGFydGluZyBpdGVyYXRpb24gb3ZlciB0YXJmaWxlIGNvbnRpbnVlZAorICAgICAgICAjIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYuCisgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHNlbGYudGFybmFtZSkgYXMgdGFyOgorICAgICAgICAgICAgZm9yIG0xLCBtMiBpbiB6aXAodGFyLCB0YXIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTEub2Zmc2V0LCBtMi5vZmZzZXQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMS5uYW1lLCBtMi5uYW1lKQorCisKK2NsYXNzIFN0cmVhbVJlYWRUZXN0KENvbW1vblJlYWRUZXN0KToKKworICAgIG1vZGU9InJ8IgorCisgICAgZGVmIHRlc3RfZmlsZW9ial9yZWd1bGFyX2ZpbGUoc2VsZik6CisgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5uZXh0KCkgIyBnZXQgInJlZ3R5cGUiIChjYW4ndCB1c2UgZ2V0bWVtYmVyKQorICAgICAgICBmb2JqID0gc2VsZi50YXIuZXh0cmFjdGZpbGUodGFyaW5mbykKKyAgICAgICAgZGF0YSA9IGZvYmoucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgobGVuKGRhdGEpLCBtZDVzdW0oZGF0YSkpID09ICh0YXJpbmZvLnNpemUsIG1kNV9yZWd0eXBlKSwKKyAgICAgICAgICAgICAgICAicmVndWxhciBmaWxlIGV4dHJhY3Rpb24gZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X3Byb3Zva2Vfc3RyZWFtX2Vycm9yKHNlbGYpOgorICAgICAgICB0YXJpbmZvcyA9IHNlbGYudGFyLmdldG1lbWJlcnMoKQorICAgICAgICBmID0gc2VsZi50YXIuZXh0cmFjdGZpbGUodGFyaW5mb3NbMF0pICMgcmVhZCB0aGUgZmlyc3QgbWVtYmVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuU3RyZWFtRXJyb3IsIGYucmVhZCkKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfbWVtYmVycyhzZWxmKToKKyAgICAgICAgdGFyMSA9IHRhcmZpbGUub3Blbih0YXJuYW1lLCBlbmNvZGluZz0iaXNvODg1OS0xIikKKyAgICAgICAgdGFyMiA9IHNlbGYudGFyCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHQxID0gdGFyMS5uZXh0KCkKKyAgICAgICAgICAgIHQyID0gdGFyMi5uZXh0KCkKKyAgICAgICAgICAgIGlmIHQxIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiBpcyBub3QgTm9uZSwgInN0cmVhbS5uZXh0KCkgZmFpbGVkLiIpCisKKyAgICAgICAgICAgIGlmIHQyLmlzbG5rKCkgb3IgdDIuaXNzeW0oKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlN0cmVhbUVycm9yLCB0YXIyLmV4dHJhY3RmaWxlLCB0MikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB2MSA9IHRhcjEuZXh0cmFjdGZpbGUodDEpCisgICAgICAgICAgICB2MiA9IHRhcjIuZXh0cmFjdGZpbGUodDIpCisgICAgICAgICAgICBpZiB2MSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodjIgaXMgbm90IE5vbmUsICJzdHJlYW0uZXh0cmFjdGZpbGUoKSBmYWlsZWQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYxLnJlYWQoKSA9PSB2Mi5yZWFkKCksICJzdHJlYW0gZXh0cmFjdGlvbiBmYWlsZWQiKQorCisgICAgICAgIHRhcjEuY2xvc2UoKQorCisKK2NsYXNzIERldGVjdFJlYWRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfdGVzdGZ1bmNfZmlsZShzZWxmLCBuYW1lLCBtb2RlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFyZmlsZS5vcGVuKG5hbWUsIG1vZGUpCisgICAgICAgIGV4Y2VwdCB0YXJmaWxlLlJlYWRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgpCisKKyAgICBkZWYgX3Rlc3RmdW5jX2ZpbGVvYmooc2VsZiwgbmFtZSwgbW9kZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhcmZpbGUub3BlbihuYW1lLCBtb2RlLCBmaWxlb2JqPW9wZW4obmFtZSwgInJiIikpCisgICAgICAgIGV4Y2VwdCB0YXJmaWxlLlJlYWRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgpCisKKyAgICBkZWYgX3Rlc3RfbW9kZXMoc2VsZiwgdGVzdGZ1bmMpOgorICAgICAgICB0ZXN0ZnVuYyh0YXJuYW1lLCAiciIpCisgICAgICAgIHRlc3RmdW5jKHRhcm5hbWUsICJyOiIpCisgICAgICAgIHRlc3RmdW5jKHRhcm5hbWUsICJyOioiKQorICAgICAgICB0ZXN0ZnVuYyh0YXJuYW1lLCAicnwiKQorICAgICAgICB0ZXN0ZnVuYyh0YXJuYW1lLCAicnwqIikKKworICAgICAgICBpZiBnemlwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgdGFybmFtZSwgbW9kZT0icjpneiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgdGFyZmlsZS5vcGVuLCB0YXJuYW1lLCBtb2RlPSJyfGd6IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuUmVhZEVycm9yLCB0YXJmaWxlLm9wZW4sIGd6aXBuYW1lLCBtb2RlPSJyOiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgdGFyZmlsZS5vcGVuLCBnemlwbmFtZSwgbW9kZT0icnwiKQorCisgICAgICAgICAgICB0ZXN0ZnVuYyhnemlwbmFtZSwgInIiKQorICAgICAgICAgICAgdGVzdGZ1bmMoZ3ppcG5hbWUsICJyOioiKQorICAgICAgICAgICAgdGVzdGZ1bmMoZ3ppcG5hbWUsICJyOmd6IikKKyAgICAgICAgICAgIHRlc3RmdW5jKGd6aXBuYW1lLCAicnwqIikKKyAgICAgICAgICAgIHRlc3RmdW5jKGd6aXBuYW1lLCAicnxneiIpCisKKyAgICAgICAgaWYgYnoyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgdGFybmFtZSwgbW9kZT0icjpiejIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgdGFybmFtZSwgbW9kZT0icnxiejIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgYnoybmFtZSwgbW9kZT0icjoiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgYnoybmFtZSwgbW9kZT0icnwiKQorCisgICAgICAgICAgICB0ZXN0ZnVuYyhiejJuYW1lLCAiciIpCisgICAgICAgICAgICB0ZXN0ZnVuYyhiejJuYW1lLCAicjoqIikKKyAgICAgICAgICAgIHRlc3RmdW5jKGJ6Mm5hbWUsICJyOmJ6MiIpCisgICAgICAgICAgICB0ZXN0ZnVuYyhiejJuYW1lLCAicnwqIikKKyAgICAgICAgICAgIHRlc3RmdW5jKGJ6Mm5hbWUsICJyfGJ6MiIpCisKKyAgICBkZWYgdGVzdF9kZXRlY3RfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9tb2RlcyhzZWxmLl90ZXN0ZnVuY19maWxlKQorCisgICAgZGVmIHRlc3RfZGV0ZWN0X2ZpbGVvYmooc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfbW9kZXMoc2VsZi5fdGVzdGZ1bmNfZmlsZW9iaikKKworICAgIGRlZiB0ZXN0X2RldGVjdF9zdHJlYW1fYnoyKHNlbGYpOgorICAgICAgICAjIE9yaWdpbmFsbHksIHRhcmZpbGUncyBzdHJlYW0gZGV0ZWN0aW9uIGxvb2tlZCBmb3IgdGhlIHN0cmluZworICAgICAgICAjICJCWmg5MSIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLiBUaGlzIGlzIGluY29ycmVjdCBiZWNhdXNlCisgICAgICAgICMgdGhlICc5JyByZXByZXNlbnRzIHRoZSBibG9ja3NpemUgKDkwMGtCKS4gSWYgdGhlIGZpbGUgd2FzCisgICAgICAgICMgY29tcHJlc3NlZCB1c2luZyBhbm90aGVyIGJsb2Nrc2l6ZSBhdXRvZGV0ZWN0aW9uIGZhaWxzLgorICAgICAgICBpZiBub3QgYnoyOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd2l0aCBvcGVuKHRhcm5hbWUsICJyYiIpIGFzIGZvYmo6CisgICAgICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKKworICAgICAgICAjIENvbXByZXNzIHdpdGggYmxvY2tzaXplIDEwMGtCLCB0aGUgZmlsZSBzdGFydHMgd2l0aCAiQlpoMTEiLgorICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHRtcG5hbWUsICJ3YiIsIGNvbXByZXNzbGV2ZWw9MSkgYXMgZm9iajoKKyAgICAgICAgICAgIGZvYmoud3JpdGUoZGF0YSkKKworICAgICAgICBzZWxmLl90ZXN0ZnVuY19maWxlKHRtcG5hbWUsICJyfCoiKQorCisKK2NsYXNzIE1lbWJlclJlYWRUZXN0KFJlYWRUZXN0KToKKworICAgIGRlZiBfdGVzdF9tZW1iZXIoc2VsZiwgdGFyaW5mbywgY2hrc3VtPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgaWYgY2hrc3VtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1kNXN1bShzZWxmLnRhci5leHRyYWN0ZmlsZSh0YXJpbmZvKS5yZWFkKCkpID09IGNoa3N1bSwKKyAgICAgICAgICAgICAgICAgICAgIndyb25nIG1kNXN1bSBmb3IgJXMiICUgdGFyaW5mby5uYW1lKQorCisgICAgICAgIGt3YXJnc1sibXRpbWUiXSA9IDA3NjA2MTM2NjE3CisgICAgICAgIGt3YXJnc1sidWlkIl0gPSAxMDAwCisgICAgICAgIGt3YXJnc1siZ2lkIl0gPSAxMDAKKyAgICAgICAgaWYgIm9sZC12NyIgbm90IGluIHRhcmluZm8ubmFtZToKKyAgICAgICAgICAgICMgVjcgdGFyIGNhbid0IGhhbmRsZSBhbHBoYWJldGljIG93bmVycy4KKyAgICAgICAgICAgIGt3YXJnc1sidW5hbWUiXSA9ICJ0YXJmaWxlIgorICAgICAgICAgICAga3dhcmdzWyJnbmFtZSJdID0gInRhcmZpbGUiCisgICAgICAgIGZvciBrLCB2IGluIGt3YXJncy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnZXRhdHRyKHRhcmluZm8sIGspID09IHYsCisgICAgICAgICAgICAgICAgICAgICJ3cm9uZyB2YWx1ZSBpbiAlcyBmaWVsZCBvZiAlcyIgJSAoaywgdGFyaW5mby5uYW1lKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfcmVndHlwZShzZWxmKToKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvcmVndHlwZSIpCisgICAgICAgIHNlbGYuX3Rlc3RfbWVtYmVyKHRhcmluZm8sIHNpemU9NzAxMSwgY2hrc3VtPW1kNV9yZWd0eXBlKQorCisgICAgZGVmIHRlc3RfZmluZF9jb250dHlwZShzZWxmKToKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvY29udHR5cGUiKQorICAgICAgICBzZWxmLl90ZXN0X21lbWJlcih0YXJpbmZvLCBzaXplPTcwMTEsIGNoa3N1bT1tZDVfcmVndHlwZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfZGlydHlwZShzZWxmKToKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvZGlydHlwZSIpCisgICAgICAgIHNlbGYuX3Rlc3RfbWVtYmVyKHRhcmluZm8sIHNpemU9MCkKKworICAgIGRlZiB0ZXN0X2ZpbmRfZGlydHlwZV93aXRoX3NpemUoc2VsZik6CisgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoInVzdGFyL2RpcnR5cGUtd2l0aC1zaXplIikKKyAgICAgICAgc2VsZi5fdGVzdF9tZW1iZXIodGFyaW5mbywgc2l6ZT0yNTUpCisKKyAgICBkZWYgdGVzdF9maW5kX2xua3R5cGUoc2VsZik6CisgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoInVzdGFyL2xua3R5cGUiKQorICAgICAgICBzZWxmLl90ZXN0X21lbWJlcih0YXJpbmZvLCBzaXplPTAsIGxpbmtuYW1lPSJ1c3Rhci9yZWd0eXBlIikKKworICAgIGRlZiB0ZXN0X2ZpbmRfc3ltdHlwZShzZWxmKToKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvc3ltdHlwZSIpCisgICAgICAgIHNlbGYuX3Rlc3RfbWVtYmVyKHRhcmluZm8sIHNpemU9MCwgbGlua25hbWU9InJlZ3R5cGUiKQorCisgICAgZGVmIHRlc3RfZmluZF9ibGt0eXBlKHNlbGYpOgorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJ1c3Rhci9ibGt0eXBlIikKKyAgICAgICAgc2VsZi5fdGVzdF9tZW1iZXIodGFyaW5mbywgc2l6ZT0wLCBkZXZtYWpvcj0zLCBkZXZtaW5vcj0wKQorCisgICAgZGVmIHRlc3RfZmluZF9jaHJ0eXBlKHNlbGYpOgorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJ1c3Rhci9jaHJ0eXBlIikKKyAgICAgICAgc2VsZi5fdGVzdF9tZW1iZXIodGFyaW5mbywgc2l6ZT0wLCBkZXZtYWpvcj0xLCBkZXZtaW5vcj0zKQorCisgICAgZGVmIHRlc3RfZmluZF9maWZvdHlwZShzZWxmKToKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvZmlmb3R5cGUiKQorICAgICAgICBzZWxmLl90ZXN0X21lbWJlcih0YXJpbmZvLCBzaXplPTApCisKKyAgICBkZWYgdGVzdF9maW5kX3NwYXJzZShzZWxmKToKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvc3BhcnNlIikKKyAgICAgICAgc2VsZi5fdGVzdF9tZW1iZXIodGFyaW5mbywgc2l6ZT04NjAxNiwgY2hrc3VtPW1kNV9zcGFyc2UpCisKKyAgICBkZWYgdGVzdF9maW5kX3VtbGF1dHMoc2VsZik6CisgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoInVzdGFyL3VtbGF1dHMtxNbc5Pb83yIpCisgICAgICAgIHNlbGYuX3Rlc3RfbWVtYmVyKHRhcmluZm8sIHNpemU9NzAxMSwgY2hrc3VtPW1kNV9yZWd0eXBlKQorCisgICAgZGVmIHRlc3RfZmluZF91c3Rhcl9sb25nbmFtZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICJ1c3Rhci8iICsgIjEyMzQ1LyIgKiAzOSArICIxMjM0NTY3L2xvbmduYW1lIgorICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHNlbGYudGFyLmdldG5hbWVzKCkpCisKKyAgICBkZWYgdGVzdF9maW5kX3JlZ3R5cGVfb2xkdjcoc2VsZik6CisgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoIm1pc2MvcmVndHlwZS1vbGQtdjciKQorICAgICAgICBzZWxmLl90ZXN0X21lbWJlcih0YXJpbmZvLCBzaXplPTcwMTEsIGNoa3N1bT1tZDVfcmVndHlwZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfcGF4X3VtbGF1dHMoc2VsZik6CisgICAgICAgIHNlbGYudGFyID0gdGFyZmlsZS5vcGVuKHNlbGYudGFybmFtZSwgbW9kZT1zZWxmLm1vZGUsIGVuY29kaW5nPSJpc284ODU5LTEiKQorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJwYXgvdW1sYXV0cy3E1tzk9vzfIikKKyAgICAgICAgc2VsZi5fdGVzdF9tZW1iZXIodGFyaW5mbywgc2l6ZT03MDExLCBjaGtzdW09bWQ1X3JlZ3R5cGUpCisKKworY2xhc3MgTG9uZ25hbWVUZXN0KFJlYWRUZXN0KToKKworICAgIGRlZiB0ZXN0X3JlYWRfbG9uZ25hbWUoc2VsZik6CisgICAgICAgICMgVGVzdCByZWFkaW5nIG9mIGxvbmduYW1lIChidWcgIzE0NzE0MjcpLgorICAgICAgICBsb25nbmFtZSA9IHNlbGYuc3ViZGlyICsgIi8iICsgIjEyMy8iICogMTI1ICsgImxvbmduYW1lIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKGxvbmduYW1lKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoImxvbmduYW1lIG5vdCBmb3VuZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJpbmZvLnR5cGUgIT0gdGFyZmlsZS5ESVJUWVBFLCAicmVhZCBsb25nbmFtZSBhcyBkaXJ0eXBlIikKKworICAgIGRlZiB0ZXN0X3JlYWRfbG9uZ2xpbmsoc2VsZik6CisgICAgICAgIGxvbmduYW1lID0gc2VsZi5zdWJkaXIgKyAiLyIgKyAiMTIzLyIgKiAxMjUgKyAibG9uZ25hbWUiCisgICAgICAgIGxvbmdsaW5rID0gc2VsZi5zdWJkaXIgKyAiLyIgKyAiMTIzLyIgKiAxMjUgKyAibG9uZ2xpbmsiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIobG9uZ2xpbmspCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgibG9uZ2xpbmsgbm90IGZvdW5kIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmluZm8ubGlua25hbWUgPT0gbG9uZ25hbWUsICJsaW5rbmFtZSB3cm9uZyIpCisKKyAgICBkZWYgdGVzdF90cnVuY2F0ZWRfbG9uZ25hbWUoc2VsZik6CisgICAgICAgIGxvbmduYW1lID0gc2VsZi5zdWJkaXIgKyAiLyIgKyAiMTIzLyIgKiAxMjUgKyAibG9uZ25hbWUiCisgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIobG9uZ25hbWUpCisgICAgICAgIG9mZnNldCA9IHRhcmluZm8ub2Zmc2V0CisgICAgICAgIHNlbGYudGFyLmZpbGVvYmouc2VlayhvZmZzZXQpCisgICAgICAgIGZvYmogPSBTdHJpbmdJTy5TdHJpbmdJTyhzZWxmLnRhci5maWxlb2JqLnJlYWQoMyAqIDUxMikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuUmVhZEVycm9yLCB0YXJmaWxlLm9wZW4sIG5hbWU9ImZvby50YXIiLCBmaWxlb2JqPWZvYmopCisKKyAgICBkZWYgdGVzdF9oZWFkZXJfb2Zmc2V0KHNlbGYpOgorICAgICAgICAjIFRlc3QgaWYgdGhlIHN0YXJ0IG9mZnNldCBvZiB0aGUgVGFySW5mbyBvYmplY3QgaW5jbHVkZXMKKyAgICAgICAgIyB0aGUgcHJlY2VkaW5nIGV4dGVuZGVkIGhlYWRlci4KKyAgICAgICAgbG9uZ25hbWUgPSBzZWxmLnN1YmRpciArICIvIiArICIxMjMvIiAqIDEyNSArICJsb25nbmFtZSIKKyAgICAgICAgb2Zmc2V0ID0gc2VsZi50YXIuZ2V0bWVtYmVyKGxvbmduYW1lKS5vZmZzZXQKKyAgICAgICAgZm9iaiA9IG9wZW4odGFybmFtZSkKKyAgICAgICAgZm9iai5zZWVrKG9mZnNldCkKKyAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mby5mcm9tYnVmKGZvYmoucmVhZCg1MTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8udHlwZSwgc2VsZi5sb25nbmFtZXR5cGUpCisKKworY2xhc3MgR05VUmVhZFRlc3QoTG9uZ25hbWVUZXN0KToKKworICAgIHN1YmRpciA9ICJnbnUiCisgICAgbG9uZ25hbWV0eXBlID0gdGFyZmlsZS5HTlVUWVBFX0xPTkdOQU1FCisKKyAgICBkZWYgdGVzdF9zcGFyc2VfZmlsZShzZWxmKToKKyAgICAgICAgdGFyaW5mbzEgPSBzZWxmLnRhci5nZXRtZW1iZXIoInVzdGFyL3NwYXJzZSIpCisgICAgICAgIGZvYmoxID0gc2VsZi50YXIuZXh0cmFjdGZpbGUodGFyaW5mbzEpCisgICAgICAgIHRhcmluZm8yID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJnbnUvc3BhcnNlIikKKyAgICAgICAgZm9iajIgPSBzZWxmLnRhci5leHRyYWN0ZmlsZSh0YXJpbmZvMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvYmoxLnJlYWQoKSA9PSBmb2JqMi5yZWFkKCksCisgICAgICAgICAgICAgICAgInNwYXJzZSBmaWxlIGV4dHJhY3Rpb24gZmFpbGVkIikKKworCitjbGFzcyBQYXhSZWFkVGVzdChMb25nbmFtZVRlc3QpOgorCisgICAgc3ViZGlyID0gInBheCIKKyAgICBsb25nbmFtZXR5cGUgPSB0YXJmaWxlLlhIRFRZUEUKKworICAgIGRlZiB0ZXN0X3BheF9nbG9iYWxfaGVhZGVycyhzZWxmKToKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUsIGVuY29kaW5nPSJpc284ODU5LTEiKQorCisgICAgICAgIHRhcmluZm8gPSB0YXIuZ2V0bWVtYmVyKCJwYXgvcmVndHlwZTEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8udW5hbWUsICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uZ25hbWUsICJiYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ucGF4X2hlYWRlcnMuZ2V0KCJWRU5ET1IudW1sYXV0cyIpLCB1IsTW3OT2/N8iKQorCisgICAgICAgIHRhcmluZm8gPSB0YXIuZ2V0bWVtYmVyKCJwYXgvcmVndHlwZTIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8udW5hbWUsICIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uZ25hbWUsICJiYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ucGF4X2hlYWRlcnMuZ2V0KCJWRU5ET1IudW1sYXV0cyIpLCB1IsTW3OT2/N8iKQorCisgICAgICAgIHRhcmluZm8gPSB0YXIuZ2V0bWVtYmVyKCJwYXgvcmVndHlwZTMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8udW5hbWUsICJ0YXJmaWxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLmduYW1lLCAidGFyZmlsZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5wYXhfaGVhZGVycy5nZXQoIlZFTkRPUi51bWxhdXRzIiksIHUixNbc5Pb83yIpCisKKyAgICBkZWYgdGVzdF9wYXhfbnVtYmVyX2ZpZWxkcyhzZWxmKToKKyAgICAgICAgIyBBbGwgZm9sbG93aW5nIG51bWJlciBmaWVsZHMgYXJlIHJlYWQgZnJvbSB0aGUgcGF4IGhlYWRlci4KKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUsIGVuY29kaW5nPSJpc284ODU5LTEiKQorICAgICAgICB0YXJpbmZvID0gdGFyLmdldG1lbWJlcigicGF4L3JlZ3R5cGU0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnNpemUsIDcwMTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby51aWQsIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLmdpZCwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ubXRpbWUsIDEwNDE4MDg3ODMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHRhcmluZm8ubXRpbWUpLCBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCh0YXJpbmZvLnBheF9oZWFkZXJzWyJhdGltZSJdKSwgMTA0MTgwODc4My4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHRhcmluZm8ucGF4X2hlYWRlcnNbImN0aW1lIl0pLCAxMDQxODA4NzgzLjApCisKKworY2xhc3MgV3JpdGVUZXN0QmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBQdXQgYWxsIHdyaXRlIHRlc3RzIGluIGhlcmUgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgdGVzdGVkCisgICAgIyBpbiBhbGwgcG9zc2libGUgbW9kZSBjb21iaW5hdGlvbnMuCisKKyAgICBkZWYgdGVzdF9maWxlb2JqX25vX2Nsb3NlKHNlbGYpOgorICAgICAgICBmb2JqID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkKKyAgICAgICAgdGFyLmFkZGZpbGUodGFyZmlsZS5UYXJJbmZvKCJmb28iKSkKKyAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvYmouY2xvc2VkIGlzIEZhbHNlLCAiZXh0ZXJuYWwgZmlsZW9ianMgbXVzdCBuZXZlciBjbG9zZWQiKQorCisKK2NsYXNzIFdyaXRlVGVzdChXcml0ZVRlc3RCYXNlKToKKworICAgIG1vZGUgPSAidzoiCisKKyAgICBkZWYgdGVzdF8xMDBfY2hhcl9uYW1lKHNlbGYpOgorICAgICAgICAjIFRoZSBuYW1lIGZpZWxkIGluIGEgdGFyIGhlYWRlciBzdG9yZXMgc3RyaW5ncyBvZiBhdCBtb3N0IDEwMCBjaGFycy4KKyAgICAgICAgIyBJZiBhIHN0cmluZyBpcyBzaG9ydGVyIHRoYW4gMTAwIGNoYXJzIGl0IGhhcyB0byBiZSBwYWRkZWQgd2l0aCAnXDAnLAorICAgICAgICAjIHdoaWNoIGltcGxpZXMgdGhhdCBhIHN0cmluZyBvZiBleGFjdGx5IDEwMCBjaGFycyBpcyBzdG9yZWQgd2l0aG91dAorICAgICAgICAjIGEgdHJhaWxpbmcgJ1wwJy4KKyAgICAgICAgbmFtZSA9ICIwMTIzNDU2Nzg5IiAqIDEwCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgIHQgPSB0YXJmaWxlLlRhckluZm8obmFtZSkKKyAgICAgICAgdGFyLmFkZGZpbGUodCkKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5nZXRuYW1lcygpWzBdID09IG5hbWUsCisgICAgICAgICAgICAgICAgImZhaWxlZCB0byBzdG9yZSAxMDAgY2hhciBmaWxlbmFtZSIpCisgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF90YXJfc2l6ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBidWcgIzEwMTM4ODIuCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImZpbGUiKQorICAgICAgICBmb2JqID0gb3BlbihwYXRoLCAid2IiKQorICAgICAgICBmb2JqLndyaXRlKCJhYWEiKQorICAgICAgICBmb2JqLmNsb3NlKCkKKyAgICAgICAgdGFyLmFkZChwYXRoKQorICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5nZXRzaXplKHRtcG5hbWUpID4gMCwKKyAgICAgICAgICAgICAgICAidGFyZmlsZSBpcyBlbXB0eSIpCisKKyAgICAjIFRoZSB0ZXN0Xypfc2l6ZSB0ZXN0cyB0ZXN0IGZvciBidWcgIzExNjcxMjguCisgICAgZGVmIHRlc3RfZmlsZV9zaXplKHNlbGYpOgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlKQorCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImZpbGUiKQorICAgICAgICBmb2JqID0gb3BlbihwYXRoLCAid2IiKQorICAgICAgICBmb2JqLmNsb3NlKCkKKyAgICAgICAgdGFyaW5mbyA9IHRhci5nZXR0YXJpbmZvKHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5zaXplLCAwKQorCisgICAgICAgIGZvYmogPSBvcGVuKHBhdGgsICJ3YiIpCisgICAgICAgIGZvYmoud3JpdGUoImFhYSIpCisgICAgICAgIGZvYmouY2xvc2UoKQorICAgICAgICB0YXJpbmZvID0gdGFyLmdldHRhcmluZm8ocGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnNpemUsIDMpCisKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2RpcmVjdG9yeV9zaXplKHNlbGYpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJkaXJlY3RvcnkiKQorICAgICAgICBvcy5ta2RpcihwYXRoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlKQorICAgICAgICAgICAgdGFyaW5mbyA9IHRhci5nZXR0YXJpbmZvKHBhdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uc2l6ZSwgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJtZGlyKHBhdGgpCisKKyAgICBkZWYgdGVzdF9saW5rX3NpemUoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIob3MsICJsaW5rIik6CisgICAgICAgICAgICBsaW5rID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJsaW5rIikKKyAgICAgICAgICAgIHRhcmdldCA9IG9zLnBhdGguam9pbihURU1QRElSLCAibGlua190YXJnZXQiKQorICAgICAgICAgICAgZm9iaiA9IG9wZW4odGFyZ2V0LCAid2IiKQorICAgICAgICAgICAgZm9iai53cml0ZSgiYWFhIikKKyAgICAgICAgICAgIGZvYmouY2xvc2UoKQorICAgICAgICAgICAgb3MubGluayh0YXJnZXQsIGxpbmspCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkKKyAgICAgICAgICAgICAgICAjIFJlY29yZCB0aGUgbGluayB0YXJnZXQgaW4gdGhlIGlub2RlcyBsaXN0LgorICAgICAgICAgICAgICAgIHRhci5nZXR0YXJpbmZvKHRhcmdldCkKKyAgICAgICAgICAgICAgICB0YXJpbmZvID0gdGFyLmdldHRhcmluZm8obGluaykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uc2l6ZSwgMCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRhcmdldCkKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUobGluaykKKworICAgIGRlZiB0ZXN0X3N5bWxpbmtfc2l6ZShzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihvcywgInN5bWxpbmsiKToKKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInN5bWxpbmsiKQorICAgICAgICAgICAgb3Muc3ltbGluaygibGlua190YXJnZXQiLCBwYXRoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgICAgICAgICAgdGFyaW5mbyA9IHRhci5nZXR0YXJpbmZvKHBhdGgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnNpemUsIDApCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwYXRoKQorCisgICAgZGVmIHRlc3RfYWRkX3NlbGYoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgIzEyNTcyNTUuCisgICAgICAgIGRzdG5hbWUgPSBvcy5wYXRoLmFic3BhdGgodG1wbmFtZSkKKworICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLm5hbWUgPT0gZHN0bmFtZSwgImFyY2hpdmUgbmFtZSBtdXN0IGJlIGFic29sdXRlIikKKworICAgICAgICB0YXIuYWRkKGRzdG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuZ2V0bmFtZXMoKSA9PSBbXSwgImFkZGVkIHRoZSBhcmNoaXZlIHRvIGl0c2VsZiIpCisKKyAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIoVEVNUERJUikKKyAgICAgICAgdGFyLmFkZChkc3RuYW1lKQorICAgICAgICBvcy5jaGRpcihjd2QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuZ2V0bmFtZXMoKSA9PSBbXSwgImFkZGVkIHRoZSBhcmNoaXZlIHRvIGl0c2VsZiIpCisKKyAgICBkZWYgdGVzdF9leGNsdWRlKHNlbGYpOgorICAgICAgICB0ZW1wZGlyID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJleGNsdWRlIikKKyAgICAgICAgb3MubWtkaXIodGVtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gKCJmb28iLCAiYmFyIiwgImJheiIpOgorICAgICAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgbmFtZSkKKyAgICAgICAgICAgICAgICBvcGVuKG5hbWUsICJ3YiIpLmNsb3NlKCkKKworICAgICAgICAgICAgZXhjbHVkZSA9IG9zLnBhdGguaXNmaWxlCisKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUsIGVuY29kaW5nPSJpc284ODU5LTEiKQorICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCJ1c2UgdGhlIGZpbHRlciBhcmd1bWVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgdGFyLmFkZCh0ZW1wZGlyLCBhcmNuYW1lPSJlbXB0eV9kaXIiLCBleGNsdWRlPWV4Y2x1ZGUpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGFyLmdldG1lbWJlcnMoKSksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5nZXRuYW1lcygpWzBdLCAiZW1wdHlfZGlyIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcGRpcikKKworICAgIGRlZiB0ZXN0X2ZpbHRlcihzZWxmKToKKyAgICAgICAgdGVtcGRpciA9IG9zLnBhdGguam9pbihURU1QRElSLCAiZmlsdGVyIikKKyAgICAgICAgb3MubWtkaXIodGVtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gKCJmb28iLCAiYmFyIiwgImJheiIpOgorICAgICAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgbmFtZSkKKyAgICAgICAgICAgICAgICBvcGVuKG5hbWUsICJ3YiIpLmNsb3NlKCkKKworICAgICAgICAgICAgZGVmIGZpbHRlcih0YXJpbmZvKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKHRhcmluZm8ubmFtZSkgPT0gImJhciI6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIHRhcmluZm8udWlkID0gMTIzCisgICAgICAgICAgICAgICAgdGFyaW5mby51bmFtZSA9ICJmb28iCisgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmluZm8KKworICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCisgICAgICAgICAgICB0YXIuYWRkKHRlbXBkaXIsIGFyY25hbWU9ImVtcHR5X2RpciIsIGZpbHRlcj1maWx0ZXIpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInIiKQorICAgICAgICAgICAgZm9yIHRhcmluZm8gaW4gdGFyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby51aWQsIDEyMykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8udW5hbWUsICJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGFyLmdldG1lbWJlcnMoKSksIDMpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorCisgICAgIyBHdWFyYW50ZWUgdGhhdCBzdG9yZWQgcGF0aG5hbWVzIGFyZSBub3QgbW9kaWZpZWQuIERvbid0CisgICAgIyByZW1vdmUgLi8gb3IgLi4vIG9yIGRvdWJsZSBzbGFzaGVzLiBTdGlsbCBtYWtlIGFic29sdXRlCisgICAgIyBwYXRobmFtZXMgcmVsYXRpdmUuCisgICAgIyBGb3IgZGV0YWlscyBzZWUgYnVnICM2MDU0LgorICAgIGRlZiBfdGVzdF9wYXRobmFtZShzZWxmLCBwYXRoLCBjbXBfcGF0aD1Ob25lLCBkaXI9RmFsc2UpOgorICAgICAgICAjIENyZWF0ZSBhIHRhcmZpbGUgd2l0aCBhbiBlbXB0eSBtZW1iZXIgbmFtZWQgcGF0aAorICAgICAgICAjIGFuZCBjb21wYXJlIHRoZSBzdG9yZWQgbmFtZSB3aXRoIHRoZSBvcmlnaW5hbC4KKyAgICAgICAgZm9vID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJmb28iKQorICAgICAgICBpZiBub3QgZGlyOgorICAgICAgICAgICAgb3Blbihmb28sICJ3IikuY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MubWtkaXIoZm9vKQorCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgIHRhci5hZGQoZm9vLCBhcmNuYW1lPXBhdGgpCisgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJyIikKKyAgICAgICAgdCA9IHRhci5uZXh0KCkKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgICAgICBpZiBub3QgZGlyOgorICAgICAgICAgICAgb3MucmVtb3ZlKGZvbykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLnJtZGlyKGZvbykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubmFtZSwgY21wX3BhdGggb3IgcGF0aC5yZXBsYWNlKG9zLnNlcCwgIi8iKSkKKworICAgIGRlZiB0ZXN0X3BhdGhuYW1lcyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZSgiZm9vIikKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oImZvbyIsICIuIiwgImJhciIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiZm9vIiwgIi4uIiwgImJhciIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLiIsICJmb28iKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oIi4iLCAiZm9vIiwgIi4iKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oIi4iLCAiZm9vIiwgIi4iLCAiYmFyIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCIuIiwgImZvbyIsICIuLiIsICJiYXIiKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oIi4iLCAiZm9vIiwgIi4uIiwgImJhciIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLi4iLCAiZm9vIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCIuLiIsICJmb28iLCAiLi4iKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oIi4uIiwgImZvbyIsICIuIiwgImJhciIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLi4iLCAiZm9vIiwgIi4uIiwgImJhciIpKQorCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUoImZvbyIgKyBvcy5zZXAgKyBvcy5zZXAgKyAiYmFyIikKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZSgiZm9vIiArIG9zLnNlcCArIG9zLnNlcCwgImZvbyIsIGRpcj1UcnVlKQorCisgICAgZGVmIHRlc3RfYWJzX3BhdGhuYW1lcyhzZWxmKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKCJDOlxcZm9vIiwgImZvbyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKCIvZm9vIiwgImZvbyIpCisgICAgICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKCIvLy9mb28iLCAiZm9vIikKKworICAgIGRlZiB0ZXN0X2N3ZChzZWxmKToKKyAgICAgICAgIyBUZXN0IGFkZGluZyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIoVEVNUERJUikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3BlbigiZm9vIiwgInciKS5jbG9zZSgpCisKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgICAgICB0YXIuYWRkKCIuIikKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAiciIpCisgICAgICAgICAgICBmb3IgdCBpbiB0YXI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQubmFtZSA9PSAiLiIgb3IgdC5uYW1lLnN0YXJ0c3dpdGgoIi4vIikpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIoY3dkKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3N5bWxpbmsnKSwgIm5lZWRzIG9zLnN5bWxpbmsiKQorICAgIGRlZiB0ZXN0X2V4dHJhY3RhbGxfc3ltbGlua3Moc2VsZik6CisgICAgICAgICMgVGVzdCBpZiBleHRyYWN0YWxsIHdvcmtzIHByb3Blcmx5IHdoZW4gdGFyZmlsZSBjb250YWlucyBzeW1saW5rcworICAgICAgICB0ZW1wZGlyID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0ZXN0c3ltbGlua3MiKQorICAgICAgICB0ZW1wYXJjaGl2ZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHN5bWxpbmtzLnRhciIpCisgICAgICAgIG9zLm1rZGlyKHRlbXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvdXJjZV9maWxlID0gb3MucGF0aC5qb2luKHRlbXBkaXIsJ3NvdXJjZScpCisgICAgICAgICAgICB0YXJnZXRfZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCdzeW1saW5rJykKKyAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2VfZmlsZSwndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnc29tZXRoaW5nXG4nKQorICAgICAgICAgICAgb3Muc3ltbGluayhzb3VyY2VfZmlsZSwgdGFyZ2V0X2ZpbGUpCisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGVtcGFyY2hpdmUsJ3cnKQorICAgICAgICAgICAgdGFyLmFkZChzb3VyY2VfZmlsZSwgYXJjbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHNvdXJjZV9maWxlKSkKKyAgICAgICAgICAgIHRhci5hZGQodGFyZ2V0X2ZpbGUsIGFyY25hbWU9b3MucGF0aC5iYXNlbmFtZSh0YXJnZXRfZmlsZSkpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICAgICAgIyBMZXQncyBleHRyYWN0IGl0IHRvIHRoZSBsb2NhdGlvbiB3aGljaCBjb250YWlucyB0aGUgc3ltbGluaworICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRlbXBhcmNoaXZlLCdyJykKKyAgICAgICAgICAgICMgdGhpcyBzaG91bGQgbm90IHJhaXNlIE9TRXJyb3I6IFtFcnJubyAxN10gRmlsZSBleGlzdHMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXIuZXh0cmFjdGFsbChwYXRoPXRlbXBkaXIpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4dHJhY3RhbGwgZmFpbGVkIHdpdGggc3ltbGlua2VkIGZpbGVzIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayh0ZW1wYXJjaGl2ZSkKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodGVtcGRpcikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzeW1saW5rJyksICJuZWVkcyBvcy5zeW1saW5rIikKKyAgICBkZWYgdGVzdF9leHRyYWN0YWxsX2Jyb2tlbl9zeW1saW5rcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGlmIGV4dHJhY3RhbGwgd29ya3MgcHJvcGVybHkgd2hlbiB0YXJmaWxlIGNvbnRhaW5zIGJyb2tlbgorICAgICAgICAjIHN5bWxpbmtzCisgICAgICAgIHRlbXBkaXIgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInRlc3RzeW1saW5rcyIpCisgICAgICAgIHRlbXBhcmNoaXZlID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0ZXN0c3ltbGlua3MudGFyIikKKyAgICAgICAgb3MubWtkaXIodGVtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc291cmNlX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwnc291cmNlJykKKyAgICAgICAgICAgIHRhcmdldF9maWxlID0gb3MucGF0aC5qb2luKHRlbXBkaXIsJ3N5bWxpbmsnKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZV9maWxlLCd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdzb21ldGhpbmdcbicpCisgICAgICAgICAgICBvcy5zeW1saW5rKHNvdXJjZV9maWxlLCB0YXJnZXRfZmlsZSkKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0ZW1wYXJjaGl2ZSwndycpCisgICAgICAgICAgICB0YXIuYWRkKHRhcmdldF9maWxlLCBhcmNuYW1lPW9zLnBhdGguYmFzZW5hbWUodGFyZ2V0X2ZpbGUpKQorICAgICAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgICAgICMgcmVtb3ZlIHRoZSByZWFsIGZpbGUKKyAgICAgICAgICAgIG9zLnVubGluayhzb3VyY2VfZmlsZSkKKyAgICAgICAgICAgICMgTGV0J3MgZXh0cmFjdCBpdCB0byB0aGUgbG9jYXRpb24gd2hpY2ggY29udGFpbnMgdGhlIHN5bWxpbmsKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0ZW1wYXJjaGl2ZSwncicpCisgICAgICAgICAgICAjIHRoaXMgc2hvdWxkIG5vdCByYWlzZSBPU0Vycm9yOiBbRXJybm8gMTddIEZpbGUgZXhpc3RzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGFyLmV4dHJhY3RhbGwocGF0aD10ZW1wZGlyKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHRyYWN0YWxsIGZhaWxlZCB3aXRoIGJyb2tlbiBzeW1saW5rZWQgZmlsZXMiKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKHRlbXBhcmNoaXZlKQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2xpbmsnKSwgIm5lZWRzIG9zLmxpbmsiKQorICAgIGRlZiB0ZXN0X2V4dHJhY3RhbGxfaGFyZGxpbmtzKHNlbGYpOgorICAgICAgICAjIFRlc3QgaWYgZXh0cmFjdGFsbCB3b3JrcyBwcm9wZXJseSB3aGVuIHRhcmZpbGUgY29udGFpbnMgc3ltbGlua3MKKyAgICAgICAgdGVtcGRpciA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHN5bWxpbmtzIikKKyAgICAgICAgdGVtcGFyY2hpdmUgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInRlc3RzeW1saW5rcy50YXIiKQorICAgICAgICBvcy5ta2Rpcih0ZW1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb3VyY2VfZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCdzb3VyY2UnKQorICAgICAgICAgICAgdGFyZ2V0X2ZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwnc3ltbGluaycpCisgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlX2ZpbGUsJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ3NvbWV0aGluZ1xuJykKKyAgICAgICAgICAgIG9zLmxpbmsoc291cmNlX2ZpbGUsIHRhcmdldF9maWxlKQorICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRlbXBhcmNoaXZlLCd3JykKKyAgICAgICAgICAgIHRhci5hZGQoc291cmNlX2ZpbGUsIGFyY25hbWU9b3MucGF0aC5iYXNlbmFtZShzb3VyY2VfZmlsZSkpCisgICAgICAgICAgICB0YXIuYWRkKHRhcmdldF9maWxlLCBhcmNuYW1lPW9zLnBhdGguYmFzZW5hbWUodGFyZ2V0X2ZpbGUpKQorICAgICAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgICAgICMgTGV0J3MgZXh0cmFjdCBpdCB0byB0aGUgbG9jYXRpb24gd2hpY2ggY29udGFpbnMgdGhlIHN5bWxpbmsKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0ZW1wYXJjaGl2ZSwncicpCisgICAgICAgICAgICAjIHRoaXMgc2hvdWxkIG5vdCByYWlzZSBPU0Vycm9yOiBbRXJybm8gMTddIEZpbGUgZXhpc3RzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGFyLmV4dHJhY3RhbGwocGF0aD10ZW1wZGlyKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHRyYWN0YWxsIGZhaWxlZCB3aXRoIGxpbmtlZCBmaWxlcyIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bmxpbmsodGVtcGFyY2hpdmUpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCisKK2NsYXNzIFN0cmVhbVdyaXRlVGVzdChXcml0ZVRlc3RCYXNlKToKKworICAgIG1vZGUgPSAid3wiCisKKyAgICBkZWYgdGVzdF9zdHJlYW1fcGFkZGluZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBidWcgIzE1NDMzMDMuCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgaWYgc2VsZi5tb2RlLmVuZHN3aXRoKCJneiIpOgorICAgICAgICAgICAgZm9iaiA9IGd6aXAuR3ppcEZpbGUodG1wbmFtZSkKKyAgICAgICAgICAgIGRhdGEgPSBmb2JqLnJlYWQoKQorICAgICAgICAgICAgZm9iai5jbG9zZSgpCisgICAgICAgIGVsaWYgc2VsZi5tb2RlLmVuZHN3aXRoKCJiejIiKToKKyAgICAgICAgICAgIGRlYyA9IGJ6Mi5CWjJEZWNvbXByZXNzb3IoKQorICAgICAgICAgICAgZGF0YSA9IG9wZW4odG1wbmFtZSwgInJiIikucmVhZCgpCisgICAgICAgICAgICBkYXRhID0gZGVjLmRlY29tcHJlc3MoZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZGVjLnVudXNlZF9kYXRhKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAiZm91bmQgdHJhaWxpbmcgZGF0YSIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb2JqID0gb3Blbih0bXBuYW1lLCAicmIiKQorICAgICAgICAgICAgZGF0YSA9IGZvYmoucmVhZCgpCisgICAgICAgICAgICBmb2JqLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5jb3VudCgiXDAiKSA9PSB0YXJmaWxlLlJFQ09SRFNJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgImluY29ycmVjdCB6ZXJvIHBhZGRpbmciKQorCisgICAgZGVmIHRlc3RfZmlsZV9tb2RlKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIGlzc3VlICM4NDY0OiBDcmVhdGUgZmlsZXMgd2l0aCBjb3JyZWN0CisgICAgICAgICMgcGVybWlzc2lvbnMuCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiIG9yIG5vdCBoYXNhdHRyKG9zLCAidW1hc2siKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRtcG5hbWUpOgorICAgICAgICAgICAgb3MucmVtb3ZlKHRtcG5hbWUpCisKKyAgICAgICAgb3JpZ2luYWxfdW1hc2sgPSBvcy51bWFzaygwMDIyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlKQorICAgICAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgICAgIG1vZGUgPSBvcy5zdGF0KHRtcG5hbWUpLnN0X21vZGUgJiAwNzc3CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGUsIDA2NDQsICJ3cm9uZyBmaWxlIHBlcm1pc3Npb25zIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVtYXNrKG9yaWdpbmFsX3VtYXNrKQorCisgICAgZGVmIHRlc3RfaXNzdWUxMzYzOShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odW5pY29kZSh0bXBuYW1lLCBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkpLCBzZWxmLm1vZGUpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiX1N0cmVhbSBmYWlsZWQgdG8gd3JpdGUgdW5pY29kZSBmaWxlbmFtZSIpCisKKworY2xhc3MgR05VV3JpdGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRoaXMgdGVzdGNhc2UgY2hlY2tzIGZvciBjb3JyZWN0IGNyZWF0aW9uIG9mIEdOVSBMb25nbmFtZQorICAgICMgYW5kIExvbmdsaW5rIGV4dGVuZGVkIGhlYWRlcnMgKGNwLiBidWcgIzgxMjMyNSkuCisKKyAgICBkZWYgX2xlbmd0aChzZWxmLCBzKToKKyAgICAgICAgYmxvY2tzLCByZW1haW5kZXIgPSBkaXZtb2QobGVuKHMpICsgMSwgNTEyKQorICAgICAgICBpZiByZW1haW5kZXI6CisgICAgICAgICAgICBibG9ja3MgKz0gMQorICAgICAgICByZXR1cm4gYmxvY2tzICogNTEyCisKKyAgICBkZWYgX2NhbGNfc2l6ZShzZWxmLCBuYW1lLCBsaW5rPU5vbmUpOgorICAgICAgICAjIEluaXRpYWwgdGFyIGhlYWRlcgorICAgICAgICBjb3VudCA9IDUxMgorCisgICAgICAgIGlmIGxlbihuYW1lKSA+IHRhcmZpbGUuTEVOR1RIX05BTUU6CisgICAgICAgICAgICAjIEdOVSBsb25nbmFtZSBleHRlbmRlZCBoZWFkZXIgKyBsb25nbmFtZQorICAgICAgICAgICAgY291bnQgKz0gNTEyCisgICAgICAgICAgICBjb3VudCArPSBzZWxmLl9sZW5ndGgobmFtZSkKKyAgICAgICAgaWYgbGluayBpcyBub3QgTm9uZSBhbmQgbGVuKGxpbmspID4gdGFyZmlsZS5MRU5HVEhfTElOSzoKKyAgICAgICAgICAgICMgR05VIGxvbmdsaW5rIGV4dGVuZGVkIGhlYWRlciArIGxvbmdsaW5rCisgICAgICAgICAgICBjb3VudCArPSA1MTIKKyAgICAgICAgICAgIGNvdW50ICs9IHNlbGYuX2xlbmd0aChsaW5rKQorICAgICAgICByZXR1cm4gY291bnQKKworICAgIGRlZiBfdGVzdChzZWxmLCBuYW1lLCBsaW5rPU5vbmUpOgorICAgICAgICB0YXJpbmZvID0gdGFyZmlsZS5UYXJJbmZvKG5hbWUpCisgICAgICAgIGlmIGxpbms6CisgICAgICAgICAgICB0YXJpbmZvLmxpbmtuYW1lID0gbGluaworICAgICAgICAgICAgdGFyaW5mby50eXBlID0gdGFyZmlsZS5MTktUWVBFCisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IikKKyAgICAgICAgdGFyLmZvcm1hdCA9IHRhcmZpbGUuR05VX0ZPUk1BVAorICAgICAgICB0YXIuYWRkZmlsZSh0YXJpbmZvKQorCisgICAgICAgIHYxID0gc2VsZi5fY2FsY19zaXplKG5hbWUsIGxpbmspCisgICAgICAgIHYyID0gdGFyLm9mZnNldAorICAgICAgICBzZWxmLmFzc2VydFRydWUodjEgPT0gdjIsICJHTlUgbG9uZ25hbWUvbG9uZ2xpbmsgY3JlYXRpb24gZmFpbGVkIikKKworICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lKQorICAgICAgICBtZW1iZXIgPSB0YXIubmV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG1lbWJlciwKKyAgICAgICAgICAgICAgICAidW5hYmxlIHRvIHJlYWQgbG9uZ25hbWUgbWVtYmVyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLm5hbWUsIG1lbWJlci5uYW1lLAorICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gcmVhZCBsb25nbmFtZSBtZW1iZXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ubGlua25hbWUsIG1lbWJlci5saW5rbmFtZSwKKyAgICAgICAgICAgICAgICAidW5hYmxlIHRvIHJlYWQgbG9uZ25hbWUgbWVtYmVyIikKKworICAgIGRlZiB0ZXN0X2xvbmduYW1lXzEwMjMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoKCJsb25nbmFtLyIgKiAxMjcpICsgImxvbmduYW0iKQorCisgICAgZGVmIHRlc3RfbG9uZ25hbWVfMTAyNChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgoImxvbmduYW0vIiAqIDEyNykgKyAibG9uZ25hbWUiKQorCisgICAgZGVmIHRlc3RfbG9uZ25hbWVfMTAyNShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgoImxvbmduYW0vIiAqIDEyNykgKyAibG9uZ25hbWVfIikKKworICAgIGRlZiB0ZXN0X2xvbmdsaW5rXzEwMjMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoIm5hbWUiLCAoImxvbmdsbmsvIiAqIDEyNykgKyAibG9uZ2xuayIpCisKKyAgICBkZWYgdGVzdF9sb25nbGlua18xMDI0KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCJuYW1lIiwgKCJsb25nbG5rLyIgKiAxMjcpICsgImxvbmdsaW5rIikKKworICAgIGRlZiB0ZXN0X2xvbmdsaW5rXzEwMjUoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoIm5hbWUiLCAoImxvbmdsbmsvIiAqIDEyNykgKyAibG9uZ2xpbmtfIikKKworICAgIGRlZiB0ZXN0X2xvbmduYW1lbGlua18xMDIzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCgibG9uZ25hbS8iICogMTI3KSArICJsb25nbmFtIiwKKyAgICAgICAgICAgICAgICAgICAoImxvbmdsbmsvIiAqIDEyNykgKyAibG9uZ2xuayIpCisKKyAgICBkZWYgdGVzdF9sb25nbmFtZWxpbmtfMTAyNChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgoImxvbmduYW0vIiAqIDEyNykgKyAibG9uZ25hbWUiLAorICAgICAgICAgICAgICAgICAgICgibG9uZ2xuay8iICogMTI3KSArICJsb25nbGluayIpCisKKyAgICBkZWYgdGVzdF9sb25nbmFtZWxpbmtfMTAyNShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgoImxvbmduYW0vIiAqIDEyNykgKyAibG9uZ25hbWVfIiwKKyAgICAgICAgICAgICAgICAgICAoImxvbmdsbmsvIiAqIDEyNykgKyAibG9uZ2xpbmtfIikKKworCitjbGFzcyBIYXJkbGlua1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCB0aGUgY3JlYXRpb24gb2YgTE5LVFlQRSAoaGFyZGxpbmspIG1lbWJlcnMgaW4gYW4gYXJjaGl2ZS4KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mb28gPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImZvbyIpCisgICAgICAgIHNlbGYuYmFyID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJiYXIiKQorCisgICAgICAgIGZvYmogPSBvcGVuKHNlbGYuZm9vLCAid2IiKQorICAgICAgICBmb2JqLndyaXRlKCJmb28iKQorICAgICAgICBmb2JqLmNsb3NlKCkKKworICAgICAgICBvcy5saW5rKHNlbGYuZm9vLCBzZWxmLmJhcikKKworICAgICAgICBzZWxmLnRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAidyIpCisgICAgICAgIHNlbGYudGFyLmFkZChzZWxmLmZvbykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi50YXIuY2xvc2UoKQorICAgICAgICBvcy5yZW1vdmUoc2VsZi5mb28pCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmJhcikKKworICAgIGRlZiB0ZXN0X2FkZF90d2ljZShzZWxmKToKKyAgICAgICAgIyBUaGUgc2FtZSBuYW1lIHdpbGwgYmUgYWRkZWQgYXMgYSBSRUdUWVBFIGV2ZXJ5CisgICAgICAgICMgdGltZSByZWdhcmRsZXNzIG9mIHN0X25saW5rLgorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0dGFyaW5mbyhzZWxmLmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmluZm8udHlwZSA9PSB0YXJmaWxlLlJFR1RZUEUsCisgICAgICAgICAgICAgICAgImFkZCBmaWxlIGFzIHJlZ3VsYXIgZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X2FkZF9oYXJkbGluayhzZWxmKToKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldHRhcmluZm8oc2VsZi5iYXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJpbmZvLnR5cGUgPT0gdGFyZmlsZS5MTktUWVBFLAorICAgICAgICAgICAgICAgICJhZGQgZmlsZSBhcyBoYXJkbGluayBmYWlsZWQiKQorCisgICAgZGVmIHRlc3RfZGVyZWZlcmVuY2VfaGFyZGxpbmsoc2VsZik6CisgICAgICAgIHNlbGYudGFyLmRlcmVmZXJlbmNlID0gVHJ1ZQorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0dGFyaW5mbyhzZWxmLmJhcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmluZm8udHlwZSA9PSB0YXJmaWxlLlJFR1RZUEUsCisgICAgICAgICAgICAgICAgImRlcmVmZXJlbmNpbmcgaGFyZGxpbmsgZmFpbGVkIikKKworCitjbGFzcyBQYXhXcml0ZVRlc3QoR05VV3JpdGVUZXN0KToKKworICAgIGRlZiBfdGVzdChzZWxmLCBuYW1lLCBsaW5rPU5vbmUpOgorICAgICAgICAjIFNlZSBHTlVXcml0ZVRlc3QuCisgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8obmFtZSkKKyAgICAgICAgaWYgbGluazoKKyAgICAgICAgICAgIHRhcmluZm8ubGlua25hbWUgPSBsaW5rCisgICAgICAgICAgICB0YXJpbmZvLnR5cGUgPSB0YXJmaWxlLkxOS1RZUEUKKworICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInciLCBmb3JtYXQ9dGFyZmlsZS5QQVhfRk9STUFUKQorICAgICAgICB0YXIuYWRkZmlsZSh0YXJpbmZvKQorICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lKQorICAgICAgICBpZiBsaW5rOgorICAgICAgICAgICAgbCA9IHRhci5nZXRtZW1iZXJzKClbMF0ubGlua25hbWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5rID09IGwsICJQQVggbG9uZ2xpbmsgY3JlYXRpb24gZmFpbGVkIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG4gPSB0YXIuZ2V0bWVtYmVycygpWzBdLm5hbWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuYW1lID09IG4sICJQQVggbG9uZ25hbWUgY3JlYXRpb24gZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X3BheF9nbG9iYWxfaGVhZGVyKHNlbGYpOgorICAgICAgICBwYXhfaGVhZGVycyA9IHsKKyAgICAgICAgICAgICAgICB1ImZvbyI6IHUiYmFyIiwKKyAgICAgICAgICAgICAgICB1InVpZCI6IHUiMCIsCisgICAgICAgICAgICAgICAgdSJtdGltZSI6IHUiMS4yMyIsCisgICAgICAgICAgICAgICAgdSJ0ZXN0IjogdSLk9vwiLAorICAgICAgICAgICAgICAgIHUi5Pb8IjogdSJ0ZXN0In0KKworICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInciLCBmb3JtYXQ9dGFyZmlsZS5QQVhfRk9STUFULAorICAgICAgICAgICAgICAgIHBheF9oZWFkZXJzPXBheF9oZWFkZXJzKQorICAgICAgICB0YXIuYWRkZmlsZSh0YXJmaWxlLlRhckluZm8oInRlc3QiKSkKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgICAgICAjIFRlc3QgaWYgdGhlIGdsb2JhbCBoZWFkZXIgd2FzIHdyaXR0ZW4gY29ycmVjdGx5LgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLnBheF9oZWFkZXJzLCBwYXhfaGVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIuZ2V0bWVtYmVycygpWzBdLnBheF9oZWFkZXJzLCBwYXhfaGVhZGVycykKKworICAgICAgICAjIFRlc3QgaWYgYWxsIHRoZSBmaWVsZHMgYXJlIHVuaWNvZGUuCisgICAgICAgIGZvciBrZXksIHZhbCBpbiB0YXIucGF4X2hlYWRlcnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShrZXkpIGlzIHVuaWNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh2YWwpIGlzIHVuaWNvZGUpCisgICAgICAgICAgICBpZiBrZXkgaW4gdGFyZmlsZS5QQVhfTlVNQkVSX0ZJRUxEUzoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHRhcmZpbGUuUEFYX05VTUJFUl9GSUVMRFNba2V5XSh2YWwpCisgICAgICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInVuYWJsZSB0byBjb252ZXJ0IHBheCBoZWFkZXIgZmllbGQiKQorCisgICAgZGVmIHRlc3RfcGF4X2V4dGVuZGVkX2hlYWRlcihzZWxmKToKKyAgICAgICAgIyBUaGUgZmllbGRzIGZyb20gdGhlIHBheCBoZWFkZXIgaGF2ZSBwcmlvcml0eSBvdmVyIHRoZQorICAgICAgICAjIFRhckluZm8uCisgICAgICAgIHBheF9oZWFkZXJzID0ge3UicGF0aCI6IHUiZm9vIiwgdSJ1aWQiOiB1IjEyMyJ9CisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IiwgZm9ybWF0PXRhcmZpbGUuUEFYX0ZPUk1BVCwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCisgICAgICAgIHQgPSB0YXJmaWxlLlRhckluZm8oKQorICAgICAgICB0Lm5hbWUgPSB1IuT2/CIgICAgICMgbm9uLUFTQ0lJCisgICAgICAgIHQudWlkID0gOCoqOCAgICAgICAgIyB0b28gbGFyZ2UKKyAgICAgICAgdC5wYXhfaGVhZGVycyA9IHBheF9oZWFkZXJzCisgICAgICAgIHRhci5hZGRmaWxlKHQpCisgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIGVuY29kaW5nPSJpc284ODU5LTEiKQorICAgICAgICB0ID0gdGFyLmdldG1lbWJlcnMoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucGF4X2hlYWRlcnMsIHBheF9oZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubmFtZSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC51aWQsIDEyMykKKworCitjbGFzcyBVc3RhclVuaWNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIEFsbCAqVW5pY29kZVRlc3RzIEZJWE1FCisKKyAgICBmb3JtYXQgPSB0YXJmaWxlLlVTVEFSX0ZPUk1BVAorCisgICAgZGVmIHRlc3RfaXNvODg1OV8xX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3VuaWNvZGVfZmlsZW5hbWUoImlzbzg4NTktMSIpCisKKyAgICBkZWYgdGVzdF91dGY3X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3VuaWNvZGVfZmlsZW5hbWUoInV0ZjciKQorCisgICAgZGVmIHRlc3RfdXRmOF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF91bmljb2RlX2ZpbGVuYW1lKCJ1dGY4IikKKworICAgIGRlZiBfdGVzdF91bmljb2RlX2ZpbGVuYW1lKHNlbGYsIGVuY29kaW5nKToKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IiwgZm9ybWF0PXNlbGYuZm9ybWF0LCBlbmNvZGluZz1lbmNvZGluZywgZXJyb3JzPSJzdHJpY3QiKQorICAgICAgICBuYW1lID0gdSLk9vwiCisgICAgICAgIHRhci5hZGRmaWxlKHRhcmZpbGUuVGFySW5mbyhuYW1lKSkKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgZW5jb2Rpbmc9ZW5jb2RpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHRhci5nZXRuYW1lcygpWzBdKSBpcyBub3QgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIuZ2V0bWVtYmVycygpWzBdLm5hbWUsIG5hbWUuZW5jb2RlKGVuY29kaW5nKSkKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfZmlsZW5hbWVfZXJyb3Ioc2VsZik6CisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAidyIsIGZvcm1hdD1zZWxmLmZvcm1hdCwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJzdHJpY3QiKQorICAgICAgICB0YXJpbmZvID0gdGFyZmlsZS5UYXJJbmZvKCkKKworICAgICAgICB0YXJpbmZvLm5hbWUgPSAi5Pb8IgorICAgICAgICBpZiBzZWxmLmZvcm1hdCA9PSB0YXJmaWxlLlBBWF9GT1JNQVQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHRhci5hZGRmaWxlLCB0YXJpbmZvKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFyLmFkZGZpbGUodGFyaW5mbykKKworICAgICAgICB0YXJpbmZvLm5hbWUgPSB1IuT2/CIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB0YXIuYWRkZmlsZSwgdGFyaW5mbykKKworICAgICAgICB0YXJpbmZvLm5hbWUgPSAiZm9vIgorICAgICAgICB0YXJpbmZvLnVuYW1lID0gdSLk9vwiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdGFyLmFkZGZpbGUsIHRhcmluZm8pCisKKyAgICBkZWYgdGVzdF91bmljb2RlX2FyZ3VtZW50KHNlbGYpOgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFybmFtZSwgInIiLCBlbmNvZGluZz0iaXNvODg1OS0xIiwgZXJyb3JzPSJzdHJpY3QiKQorICAgICAgICBmb3IgdCBpbiB0YXI6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0Lm5hbWUpIGlzIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQubGlua25hbWUpIGlzIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQudW5hbWUpIGlzIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQuZ25hbWUpIGlzIHN0cikKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3VuYW1lX3VuaWNvZGUoc2VsZik6CisgICAgICAgIGZvciBuYW1lIGluICh1IuT2/CIsICLk9vwiKToKKyAgICAgICAgICAgIHQgPSB0YXJmaWxlLlRhckluZm8oImZvbyIpCisgICAgICAgICAgICB0LnVuYW1lID0gbmFtZQorICAgICAgICAgICAgdC5nbmFtZSA9IG5hbWUKKworICAgICAgICAgICAgZm9iaiA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbigiZm9vLnRhciIsIG1vZGU9InciLCBmaWxlb2JqPWZvYmosIGZvcm1hdD1zZWxmLmZvcm1hdCwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCisgICAgICAgICAgICB0YXIuYWRkZmlsZSh0KQorICAgICAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgICAgIGZvYmouc2VlaygwKQorCisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oImZvby50YXIiLCBmaWxlb2JqPWZvYmosIGVuY29kaW5nPSJpc284ODU5LTEiKQorICAgICAgICAgICAgdCA9IHRhci5nZXRtZW1iZXIoImZvbyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudW5hbWUsICLk9vwiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmduYW1lLCAi5Pb8IikKKworCitjbGFzcyBHTlVVbmljb2RlVGVzdChVc3RhclVuaWNvZGVUZXN0KToKKworICAgIGZvcm1hdCA9IHRhcmZpbGUuR05VX0ZPUk1BVAorCisKK2NsYXNzIFBheFVuaWNvZGVUZXN0KFVzdGFyVW5pY29kZVRlc3QpOgorCisgICAgZm9ybWF0ID0gdGFyZmlsZS5QQVhfRk9STUFUCisKKyAgICBkZWYgX2NyZWF0ZV91bmljb2RlX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAidyIsIGZvcm1hdD1zZWxmLmZvcm1hdCkKKyAgICAgICAgdCA9IHRhcmZpbGUuVGFySW5mbygpCisgICAgICAgIHQucGF4X2hlYWRlcnNbInBhdGgiXSA9IG5hbWUKKyAgICAgICAgdGFyLmFkZGZpbGUodCkKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2Vycm9yX2hhbmRsZXJzKHNlbGYpOgorICAgICAgICAjIFRlc3QgaWYgdGhlIHVuaWNvZGUgZXJyb3IgaGFuZGxlcnMgd29yayBjb3JyZWN0bHkgZm9yIGNoYXJhY3RlcnMKKyAgICAgICAgIyB0aGF0IGNhbm5vdCBiZSBleHByZXNzZWQgaW4gYSBnaXZlbiBlbmNvZGluZy4KKyAgICAgICAgc2VsZi5fY3JlYXRlX3VuaWNvZGVfbmFtZSh1IuT2/CIpCisKKyAgICAgICAgZm9yIGhhbmRsZXIsIG5hbWUgaW4gKCgidXRmLTgiLCB1IuT2/CIuZW5jb2RlKCJ1dGY4IikpLAorICAgICAgICAgICAgICAgICAgICAoInJlcGxhY2UiLCAiPz8/IiksICgiaWdub3JlIiwgIiIpKToKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBmb3JtYXQ9c2VsZi5mb3JtYXQsIGVuY29kaW5nPSJhc2NpaSIsCisgICAgICAgICAgICAgICAgICAgIGVycm9ycz1oYW5kbGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIuZ2V0bmFtZXMoKVswXSwgbmFtZSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHRhcmZpbGUub3BlbiwgdG1wbmFtZSwKKyAgICAgICAgICAgICAgICBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9InN0cmljdCIpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9oYW5kbGVyX3V0Zjgoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIGEgcGF0aG5hbWUgdGhhdCBoYXMgb25lIGNvbXBvbmVudCByZXByZXNlbnRhYmxlIHVzaW5nCisgICAgICAgICMgaXNvODg1OS0xIGFuZCB0aGUgb3RoZXIgb25seSBpbiBpc284ODU5LTE1LgorICAgICAgICBzZWxmLl9jcmVhdGVfdW5pY29kZV9uYW1lKHUi5Pb8L6QiKQorCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBmb3JtYXQ9c2VsZi5mb3JtYXQsIGVuY29kaW5nPSJpc284ODU5LTEiLAorICAgICAgICAgICAgICAgIGVycm9ycz0idXRmLTgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5nZXRuYW1lcygpWzBdLCAi5Pb8LyIgKyB1IqQiLmVuY29kZSgidXRmOCIpKQorCisKK2NsYXNzIEFwcGVuZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCBhcHBlbmQgbW9kZSAoY3AuIHBhdGNoICMxNjUyNjgxKS4KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50YXJuYW1lID0gdG1wbmFtZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnRhcm5hbWUpOgorICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYudGFybmFtZSkKKworICAgIGRlZiBfYWRkX3Rlc3RmaWxlKHNlbGYsIGZpbGVvYmo9Tm9uZSk6CisgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihzZWxmLnRhcm5hbWUsICJhIiwgZmlsZW9iaj1maWxlb2JqKQorICAgICAgICB0YXIuYWRkZmlsZSh0YXJmaWxlLlRhckluZm8oImJhciIpKQorICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgZGVmIF9jcmVhdGVfdGVzdHRhcihzZWxmLCBtb2RlPSJ3OiIpOgorICAgICAgICBzcmMgPSB0YXJmaWxlLm9wZW4odGFybmFtZSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCisgICAgICAgIHQgPSBzcmMuZ2V0bWVtYmVyKCJ1c3Rhci9yZWd0eXBlIikKKyAgICAgICAgdC5uYW1lID0gImZvbyIKKyAgICAgICAgZiA9IHNyYy5leHRyYWN0ZmlsZSh0KQorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oc2VsZi50YXJuYW1lLCBtb2RlKQorICAgICAgICB0YXIuYWRkZmlsZSh0LCBmKQorICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgZGVmIF90ZXN0KHNlbGYsIG5hbWVzPVsiYmFyIl0sIGZpbGVvYmo9Tm9uZSk6CisgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihzZWxmLnRhcm5hbWUsIGZpbGVvYmo9ZmlsZW9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIuZ2V0bmFtZXMoKSwgbmFtZXMpCisKKyAgICBkZWYgdGVzdF9ub25fZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX2FkZF90ZXN0ZmlsZSgpCisgICAgICAgIHNlbGYuX3Rlc3QoKQorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIHRhcmZpbGUub3BlbihzZWxmLnRhcm5hbWUsICJ3OiIpLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fYWRkX3Rlc3RmaWxlKCkKKyAgICAgICAgc2VsZi5fdGVzdCgpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9maWxlb2JqKHNlbGYpOgorICAgICAgICBmb2JqID0gU3RyaW5nSU8uU3RyaW5nSU8oIlwwIiAqIDEwMjQpCisgICAgICAgIHNlbGYuX2FkZF90ZXN0ZmlsZShmb2JqKQorICAgICAgICBmb2JqLnNlZWsoMCkKKyAgICAgICAgc2VsZi5fdGVzdChmaWxlb2JqPWZvYmopCisKKyAgICBkZWYgdGVzdF9maWxlb2JqKHNlbGYpOgorICAgICAgICBzZWxmLl9jcmVhdGVfdGVzdHRhcigpCisgICAgICAgIGRhdGEgPSBvcGVuKHNlbGYudGFybmFtZSkucmVhZCgpCisgICAgICAgIGZvYmogPSBTdHJpbmdJTy5TdHJpbmdJTyhkYXRhKQorICAgICAgICBzZWxmLl9hZGRfdGVzdGZpbGUoZm9iaikKKyAgICAgICAgZm9iai5zZWVrKDApCisgICAgICAgIHNlbGYuX3Rlc3QobmFtZXM9WyJmb28iLCAiYmFyIl0sIGZpbGVvYmo9Zm9iaikKKworICAgIGRlZiB0ZXN0X2V4aXN0aW5nKHNlbGYpOgorICAgICAgICBzZWxmLl9jcmVhdGVfdGVzdHRhcigpCisgICAgICAgIHNlbGYuX2FkZF90ZXN0ZmlsZSgpCisgICAgICAgIHNlbGYuX3Rlc3QobmFtZXM9WyJmb28iLCAiYmFyIl0pCisKKyAgICBkZWYgdGVzdF9hcHBlbmRfZ3ooc2VsZik6CisgICAgICAgIGlmIGd6aXAgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9jcmVhdGVfdGVzdHRhcigidzpneiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuUmVhZEVycm9yLCB0YXJmaWxlLm9wZW4sIHRtcG5hbWUsICJhIikKKworICAgIGRlZiB0ZXN0X2FwcGVuZF9iejIoc2VsZik6CisgICAgICAgIGlmIGJ6MiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2NyZWF0ZV90ZXN0dGFyKCJ3OmJ6MiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuUmVhZEVycm9yLCB0YXJmaWxlLm9wZW4sIHRtcG5hbWUsICJhIikKKworICAgICMgQXBwZW5kIG1vZGUgaXMgc3VwcG9zZWQgdG8gZmFpbCBpZiB0aGUgdGFyZmlsZSB0byBhcHBlbmQgdG8KKyAgICAjIGRvZXMgbm90IGVuZCB3aXRoIGEgemVybyBibG9jay4KKyAgICBkZWYgX3Rlc3RfZXJyb3Ioc2VsZiwgZGF0YSk6CisgICAgICAgIG9wZW4oc2VsZi50YXJuYW1lLCAid2IiKS53cml0ZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgc2VsZi5fYWRkX3Rlc3RmaWxlKQorCisgICAgZGVmIHRlc3RfbnVsbChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9lcnJvcigiIikKKworICAgIGRlZiB0ZXN0X2luY29tcGxldGUoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZXJyb3IoIlwwIiAqIDEzKQorCisgICAgZGVmIHRlc3RfcHJlbWF0dXJlX2VvZihzZWxmKToKKyAgICAgICAgZGF0YSA9IHRhcmZpbGUuVGFySW5mbygiZm9vIikudG9idWYoKQorICAgICAgICBzZWxmLl90ZXN0X2Vycm9yKGRhdGEpCisKKyAgICBkZWYgdGVzdF90cmFpbGluZ19nYXJiYWdlKHNlbGYpOgorICAgICAgICBkYXRhID0gdGFyZmlsZS5UYXJJbmZvKCJmb28iKS50b2J1ZigpCisgICAgICAgIHNlbGYuX3Rlc3RfZXJyb3IoZGF0YSArICJcMCIgKiAxMykKKworICAgIGRlZiB0ZXN0X2ludmFsaWQoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZXJyb3IoImEiICogNTEyKQorCisKK2NsYXNzIExpbWl0c1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdXN0YXJfbGltaXRzKHNlbGYpOgorICAgICAgICAjIDEwMCBjaGFyIG5hbWUKKyAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygiMDEyMzQ1Njc4OSIgKiAxMCkKKyAgICAgICAgdGFyaW5mby50b2J1Zih0YXJmaWxlLlVTVEFSX0ZPUk1BVCkKKworICAgICAgICAjIDEwMSBjaGFyIG5hbWUgdGhhdCBjYW5ub3QgYmUgc3RvcmVkCisgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8oIjAxMjM0NTY3ODkiICogMTAgKyAiMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRhcmluZm8udG9idWYsIHRhcmZpbGUuVVNUQVJfRk9STUFUKQorCisgICAgICAgICMgMjU2IGNoYXIgbmFtZSB3aXRoIGEgc2xhc2ggYXQgcG9zIDE1NgorICAgICAgICB0YXJpbmZvID0gdGFyZmlsZS5UYXJJbmZvKCIxMjMvIiAqIDYyICsgImxvbmduYW1lIikKKyAgICAgICAgdGFyaW5mby50b2J1Zih0YXJmaWxlLlVTVEFSX0ZPUk1BVCkKKworICAgICAgICAjIDI1NiBjaGFyIG5hbWUgdGhhdCBjYW5ub3QgYmUgc3RvcmVkCisgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8oIjEyMzQ1NjcvIiAqIDMxICsgImxvbmduYW1lIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGFyaW5mby50b2J1ZiwgdGFyZmlsZS5VU1RBUl9GT1JNQVQpCisKKyAgICAgICAgIyA1MTIgY2hhciBuYW1lCisgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8oIjEyMy8iICogMTI2ICsgImxvbmduYW1lIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGFyaW5mby50b2J1ZiwgdGFyZmlsZS5VU1RBUl9GT1JNQVQpCisKKyAgICAgICAgIyA1MTIgY2hhciBsaW5rbmFtZQorICAgICAgICB0YXJpbmZvID0gdGFyZmlsZS5UYXJJbmZvKCJsb25nbGluayIpCisgICAgICAgIHRhcmluZm8ubGlua25hbWUgPSAiMTIzLyIgKiAxMjYgKyAibG9uZ25hbWUiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRhcmluZm8udG9idWYsIHRhcmZpbGUuVVNUQVJfRk9STUFUKQorCisgICAgICAgICMgdWlkID4gOCBkaWdpdHMKKyAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygibmFtZSIpCisgICAgICAgIHRhcmluZm8udWlkID0gMDEwMDAwMDAwCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRhcmluZm8udG9idWYsIHRhcmZpbGUuVVNUQVJfRk9STUFUKQorCisgICAgZGVmIHRlc3RfZ251X2xpbWl0cyhzZWxmKToKKyAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygiMTIzLyIgKiAxMjYgKyAibG9uZ25hbWUiKQorICAgICAgICB0YXJpbmZvLnRvYnVmKHRhcmZpbGUuR05VX0ZPUk1BVCkKKworICAgICAgICB0YXJpbmZvID0gdGFyZmlsZS5UYXJJbmZvKCJsb25nbGluayIpCisgICAgICAgIHRhcmluZm8ubGlua25hbWUgPSAiMTIzLyIgKiAxMjYgKyAibG9uZ25hbWUiCisgICAgICAgIHRhcmluZm8udG9idWYodGFyZmlsZS5HTlVfRk9STUFUKQorCisgICAgICAgICMgdWlkID49IDI1NiAqKiA3CisgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8oIm5hbWUiKQorICAgICAgICB0YXJpbmZvLnVpZCA9IDA0MDAwMDAwMDAwMDAwMDAwMDAwTAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0YXJpbmZvLnRvYnVmLCB0YXJmaWxlLkdOVV9GT1JNQVQpCisKKyAgICBkZWYgdGVzdF9wYXhfbGltaXRzKHNlbGYpOgorICAgICAgICB0YXJpbmZvID0gdGFyZmlsZS5UYXJJbmZvKCIxMjMvIiAqIDEyNiArICJsb25nbmFtZSIpCisgICAgICAgIHRhcmluZm8udG9idWYodGFyZmlsZS5QQVhfRk9STUFUKQorCisgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8oImxvbmdsaW5rIikKKyAgICAgICAgdGFyaW5mby5saW5rbmFtZSA9ICIxMjMvIiAqIDEyNiArICJsb25nbmFtZSIKKyAgICAgICAgdGFyaW5mby50b2J1Zih0YXJmaWxlLlBBWF9GT1JNQVQpCisKKyAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygibmFtZSIpCisgICAgICAgIHRhcmluZm8udWlkID0gMDQwMDAwMDAwMDAwMDAwMDAwMDBMCisgICAgICAgIHRhcmluZm8udG9idWYodGFyZmlsZS5QQVhfRk9STUFUKQorCisKK2NsYXNzIENvbnRleHRNYW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFybmFtZSkgYXMgdGFyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXIuY2xvc2VkLCAiY2xvc2VkIGluc2lkZSBydW50aW1lIGNvbnRleHQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmNsb3NlZCwgImNvbnRleHQgbWFuYWdlciBmYWlsZWQiKQorCisgICAgZGVmIHRlc3RfY2xvc2VkKHNlbGYpOgorICAgICAgICAjIFRoZSBfX2VudGVyX18oKSBtZXRob2QgaXMgc3VwcG9zZWQgdG8gcmFpc2UgSU9FcnJvcgorICAgICAgICAjIGlmIHRoZSBUYXJGaWxlIG9iamVjdCBpcyBhbHJlYWR5IGNsb3NlZC4KKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUpCisgICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcik6CisgICAgICAgICAgICB3aXRoIHRhcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgICMgVGVzdCBpZiB0aGUgSU9FcnJvciBleGNlcHRpb24gaXMgcGFzc2VkIHRocm91Z2ggcHJvcGVybHkuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKSBhcyBleGM6CisgICAgICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0YXJuYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXhjLmV4Y2VwdGlvbiwgSU9FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBleGNlcHRpb24gcmFpc2VkIGluIGNvbnRleHQgbWFuYWdlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCisKKyAgICBkZWYgdGVzdF9ub19lb2Yoc2VsZik6CisgICAgICAgICMgX19leGl0X18oKSBtdXN0IG5vdCB3cml0ZSBlbmQtb2YtYXJjaGl2ZSBibG9ja3MgaWYgYW4KKyAgICAgICAgIyBleGNlcHRpb24gd2FzIHJhaXNlZC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInciKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldHNpemUodG1wbmFtZSksIDAsCisgICAgICAgICAgICAgICAgImNvbnRleHQgbWFuYWdlciB3cm90ZSBhbiBlbmQtb2YtYXJjaGl2ZSBibG9jayIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCisKKyAgICBkZWYgdGVzdF9lb2Yoc2VsZik6CisgICAgICAgICMgX19leGl0X18oKSBtdXN0IHdyaXRlIGVuZC1vZi1hcmNoaXZlIGJsb2NrcywgaS5lLiBjYWxsCisgICAgICAgICMgVGFyRmlsZS5jbG9zZSgpIGlmIHRoZXJlIHdhcyBubyBlcnJvci4KKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInciKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChvcy5wYXRoLmdldHNpemUodG1wbmFtZSksIDAsCisgICAgICAgICAgICAgICAgImNvbnRleHQgbWFuYWdlciB3cm90ZSBubyBlbmQtb2YtYXJjaGl2ZSBibG9jayIpCisKKyAgICBkZWYgdGVzdF9maWxlb2JqKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBfX2V4aXRfXygpIGRpZCBub3QgY2xvc2UgdGhlIGV4dGVybmFsIGZpbGUKKyAgICAgICAgIyBvYmplY3QuCisgICAgICAgIGZvYmogPSBvcGVuKHRtcG5hbWUsICJ3YiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKGZpbGVvYmo9Zm9iaiwgbW9kZT0idyIpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZvYmouY2xvc2VkLCAiZXh0ZXJuYWwgZmlsZSBvYmplY3Qgd2FzIGNsb3NlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCisgICAgICAgIGZvYmouY2xvc2UoKQorCisKK2NsYXNzIExpbmtFbXVsYXRpb25UZXN0KFJlYWRUZXN0KToKKworICAgICMgVGVzdCBmb3IgaXNzdWUgIzg3NDEgcmVncmVzc2lvbi4gT24gcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQKKyAgICAjIHN5bWJvbGljIG9yIGhhcmQgbGlua3MgdGFyZmlsZSB0cmllcyB0byBleHRyYWN0IHRoZXNlIHR5cGVzIG9mIG1lbWJlcnMgYXMKKyAgICAjIHRoZSByZWd1bGFyIGZpbGVzIHRoZXkgcG9pbnQgdG8uCisgICAgZGVmIF90ZXN0X2xpbmtfZXh0cmFjdGlvbihzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi50YXIuZXh0cmFjdChuYW1lLCBURU1QRElSKQorICAgICAgICBkYXRhID0gb3Blbihvcy5wYXRoLmpvaW4oVEVNUERJUiwgbmFtZSksICJyYiIpLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1kNXN1bShkYXRhKSwgbWQ1X3JlZ3R5cGUpCisKKyAgICBkZWYgdGVzdF9oYXJkbGlua19leHRyYWN0aW9uMShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9saW5rX2V4dHJhY3Rpb24oInVzdGFyL2xua3R5cGUiKQorCisgICAgZGVmIHRlc3RfaGFyZGxpbmtfZXh0cmFjdGlvbjIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfbGlua19leHRyYWN0aW9uKCIuL3VzdGFyL2xpbmt0ZXN0Mi9sbmt0eXBlIikKKworICAgIGRlZiB0ZXN0X3N5bWxpbmtfZXh0cmFjdGlvbjEoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfbGlua19leHRyYWN0aW9uKCJ1c3Rhci9zeW10eXBlIikKKworICAgIGRlZiB0ZXN0X3N5bWxpbmtfZXh0cmFjdGlvbjIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfbGlua19leHRyYWN0aW9uKCIuL3VzdGFyL2xpbmt0ZXN0Mi9zeW10eXBlIikKKworCitjbGFzcyBHemlwTWlzY1JlYWRUZXN0KE1pc2NSZWFkVGVzdCk6CisgICAgdGFybmFtZSA9IGd6aXBuYW1lCisgICAgbW9kZSA9ICJyOmd6IgorY2xhc3MgR3ppcFVzdGFyUmVhZFRlc3QoVXN0YXJSZWFkVGVzdCk6CisgICAgdGFybmFtZSA9IGd6aXBuYW1lCisgICAgbW9kZSA9ICJyOmd6IgorY2xhc3MgR3ppcFN0cmVhbVJlYWRUZXN0KFN0cmVhbVJlYWRUZXN0KToKKyAgICB0YXJuYW1lID0gZ3ppcG5hbWUKKyAgICBtb2RlID0gInJ8Z3oiCitjbGFzcyBHemlwV3JpdGVUZXN0KFdyaXRlVGVzdCk6CisgICAgbW9kZSA9ICJ3Omd6IgorY2xhc3MgR3ppcFN0cmVhbVdyaXRlVGVzdChTdHJlYW1Xcml0ZVRlc3QpOgorICAgIG1vZGUgPSAid3xneiIKKworCitjbGFzcyBCejJNaXNjUmVhZFRlc3QoTWlzY1JlYWRUZXN0KToKKyAgICB0YXJuYW1lID0gYnoybmFtZQorICAgIG1vZGUgPSAicjpiejIiCitjbGFzcyBCejJVc3RhclJlYWRUZXN0KFVzdGFyUmVhZFRlc3QpOgorICAgIHRhcm5hbWUgPSBiejJuYW1lCisgICAgbW9kZSA9ICJyOmJ6MiIKK2NsYXNzIEJ6MlN0cmVhbVJlYWRUZXN0KFN0cmVhbVJlYWRUZXN0KToKKyAgICB0YXJuYW1lID0gYnoybmFtZQorICAgIG1vZGUgPSAicnxiejIiCitjbGFzcyBCejJXcml0ZVRlc3QoV3JpdGVUZXN0KToKKyAgICBtb2RlID0gInc6YnoyIgorY2xhc3MgQnoyU3RyZWFtV3JpdGVUZXN0KFN0cmVhbVdyaXRlVGVzdCk6CisgICAgbW9kZSA9ICJ3fGJ6MiIKKworY2xhc3MgQnoyUGFydGlhbFJlYWRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIElzc3VlNTA2ODogVGhlIF9CWjJQcm94eS5yZWFkKCkgbWV0aG9kIGxvb3BzIGZvcmV2ZXIKKyAgICAjIG9uIGFuIGVtcHR5IG9yIHBhcnRpYWwgYnppcHBlZCBmaWxlLgorCisgICAgZGVmIF90ZXN0X3BhcnRpYWxfaW5wdXQoc2VsZiwgbW9kZSk6CisgICAgICAgIGNsYXNzIE15U3RyaW5nSU8oU3RyaW5nSU8uU3RyaW5nSU8pOgorICAgICAgICAgICAgaGl0X2VvZiA9IEZhbHNlCisgICAgICAgICAgICBkZWYgcmVhZChzZWxmLCBuKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmhpdF9lb2Y6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJpbmZpbml0ZSBsb29wIGRldGVjdGVkIGluIHRhcmZpbGUub3BlbigpIikKKyAgICAgICAgICAgICAgICBzZWxmLmhpdF9lb2YgPSBzZWxmLnBvcyA9PSBzZWxmLmxlbgorICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmdJTy5TdHJpbmdJTy5yZWFkKHNlbGYsIG4pCisgICAgICAgICAgICBkZWYgc2VlayhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgc2VsZi5oaXRfZW9mID0gRmFsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nSU8uU3RyaW5nSU8uc2VlayhzZWxmLCAqYXJncykKKworICAgICAgICBkYXRhID0gYnoyLmNvbXByZXNzKHRhcmZpbGUuVGFySW5mbygiZm9vIikudG9idWYoKSkKKyAgICAgICAgZm9yIHggaW4gcmFuZ2UobGVuKGRhdGEpICsgMSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGFyZmlsZS5vcGVuKGZpbGVvYmo9TXlTdHJpbmdJTyhkYXRhWzp4XSksIG1vZGU9bW9kZSkKKyAgICAgICAgICAgIGV4Y2VwdCB0YXJmaWxlLlJlYWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzICMgd2UgaGF2ZSBubyBpbnRlcmVzdCBpbiBSZWFkRXJyb3JzCisKKyAgICBkZWYgdGVzdF9wYXJ0aWFsX2lucHV0KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3BhcnRpYWxfaW5wdXQoInIiKQorCisgICAgZGVmIHRlc3RfcGFydGlhbF9pbnB1dF9iejIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcGFydGlhbF9pbnB1dCgicjpiejIiKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBvcy5tYWtlZGlycyhURU1QRElSKQorCisgICAgdGVzdHMgPSBbCisgICAgICAgIFVzdGFyUmVhZFRlc3QsCisgICAgICAgIE1pc2NSZWFkVGVzdCwKKyAgICAgICAgU3RyZWFtUmVhZFRlc3QsCisgICAgICAgIERldGVjdFJlYWRUZXN0LAorICAgICAgICBNZW1iZXJSZWFkVGVzdCwKKyAgICAgICAgR05VUmVhZFRlc3QsCisgICAgICAgIFBheFJlYWRUZXN0LAorICAgICAgICBXcml0ZVRlc3QsCisgICAgICAgIFN0cmVhbVdyaXRlVGVzdCwKKyAgICAgICAgR05VV3JpdGVUZXN0LAorICAgICAgICBQYXhXcml0ZVRlc3QsCisgICAgICAgIFVzdGFyVW5pY29kZVRlc3QsCisgICAgICAgIEdOVVVuaWNvZGVUZXN0LAorICAgICAgICBQYXhVbmljb2RlVGVzdCwKKyAgICAgICAgQXBwZW5kVGVzdCwKKyAgICAgICAgTGltaXRzVGVzdCwKKyAgICAgICAgQ29udGV4dE1hbmFnZXJUZXN0LAorICAgIF0KKworICAgIGlmIGhhc2F0dHIob3MsICJsaW5rIik6CisgICAgICAgIHRlc3RzLmFwcGVuZChIYXJkbGlua1Rlc3QpCisgICAgZWxzZToKKyAgICAgICAgdGVzdHMuYXBwZW5kKExpbmtFbXVsYXRpb25UZXN0KQorCisgICAgZm9iaiA9IG9wZW4odGFybmFtZSwgInJiIikKKyAgICBkYXRhID0gZm9iai5yZWFkKCkKKyAgICBmb2JqLmNsb3NlKCkKKworICAgIGlmIGd6aXA6CisgICAgICAgICMgQ3JlYXRlIHRlc3R0YXIudGFyLmd6IGFuZCBhZGQgZ3ppcC1zcGVjaWZpYyB0ZXN0cy4KKyAgICAgICAgdGFyID0gZ3ppcC5vcGVuKGd6aXBuYW1lLCAid2IiKQorICAgICAgICB0YXIud3JpdGUoZGF0YSkKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgICAgICB0ZXN0cyArPSBbCisgICAgICAgICAgICBHemlwTWlzY1JlYWRUZXN0LAorICAgICAgICAgICAgR3ppcFVzdGFyUmVhZFRlc3QsCisgICAgICAgICAgICBHemlwU3RyZWFtUmVhZFRlc3QsCisgICAgICAgICAgICBHemlwV3JpdGVUZXN0LAorICAgICAgICAgICAgR3ppcFN0cmVhbVdyaXRlVGVzdCwKKyAgICAgICAgXQorCisgICAgaWYgYnoyOgorICAgICAgICAjIENyZWF0ZSB0ZXN0dGFyLnRhci5iejIgYW5kIGFkZCBiejItc3BlY2lmaWMgdGVzdHMuCisgICAgICAgIHRhciA9IGJ6Mi5CWjJGaWxlKGJ6Mm5hbWUsICJ3YiIpCisgICAgICAgIHRhci53cml0ZShkYXRhKQorICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgICAgIHRlc3RzICs9IFsKKyAgICAgICAgICAgIEJ6Mk1pc2NSZWFkVGVzdCwKKyAgICAgICAgICAgIEJ6MlVzdGFyUmVhZFRlc3QsCisgICAgICAgICAgICBCejJTdHJlYW1SZWFkVGVzdCwKKyAgICAgICAgICAgIEJ6MldyaXRlVGVzdCwKKyAgICAgICAgICAgIEJ6MlN0cmVhbVdyaXRlVGVzdCwKKyAgICAgICAgICAgIEJ6MlBhcnRpYWxSZWFkVGVzdCwKKyAgICAgICAgXQorCisgICAgdHJ5OgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhURU1QRElSKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVNUERJUikKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdGNsLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdGNsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZTllNjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90Y2wucHkKQEAgLTAsMCArMSwxOTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4sIFBJUEUKKworIyBTa2lwIHRoaXMgdGVzdCBpZiB0aGUgX3RraW50ZXIgbW9kdWxlIHdhc24ndCBidWlsdC4KK190a2ludGVyID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190a2ludGVyJykKKworZnJvbSBUa2ludGVyIGltcG9ydCBUY2wKK2Zyb20gX3RraW50ZXIgaW1wb3J0IFRjbEVycm9yCisKKworY2xhc3MgVGtpbnRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RGbGF0dGVuTGVuKHNlbGYpOgorICAgICAgICAjIGZsYXR0ZW4oPG9iamVjdCB3aXRoIG5vIGxlbmd0aD4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgX3RraW50ZXIuX2ZsYXR0ZW4sIFRydWUpCisKKworY2xhc3MgVGNsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuaW50ZXJwID0gVGNsKCkKKworICAgIGRlZiB0ZXN0RXZhbChzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKKyAgICAgICAgdGNsLmV2YWwoJ3NldCBhIDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5ldmFsKCdzZXQgYScpLCcxJykKKworICAgIGRlZiB0ZXN0RXZhbEV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsdGNsLmV2YWwsJ3NldCBhJykKKworICAgIGRlZiB0ZXN0RXZhbEV4Y2VwdGlvbjIoc2VsZik6CisgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLHRjbC5ldmFsLCd0aGlzIGlzIHdyb25nJykKKworICAgIGRlZiB0ZXN0Q2FsbChzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKKyAgICAgICAgdGNsLmNhbGwoJ3NldCcsJ2EnLCcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Y2wuY2FsbCgnc2V0JywnYScpLCcxJykKKworICAgIGRlZiB0ZXN0Q2FsbEV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsdGNsLmNhbGwsJ3NldCcsJ2EnKQorCisgICAgZGVmIHRlc3RDYWxsRXhjZXB0aW9uMihzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsdGNsLmNhbGwsJ3RoaXMnLCdpcycsJ3dyb25nJykKKworICAgIGRlZiB0ZXN0U2V0VmFyKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICB0Y2wuc2V0dmFyKCdhJywnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmV2YWwoJ3NldCBhJyksJzEnKQorCisgICAgZGVmIHRlc3RTZXRWYXJBcnJheShzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKKyAgICAgICAgdGNsLnNldHZhcignYSgxKScsJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5ldmFsKCdzZXQgYSgxKScpLCcxJykKKworICAgIGRlZiB0ZXN0R2V0VmFyKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICB0Y2wuZXZhbCgnc2V0IGEgMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmdldHZhcignYScpLCcxJykKKworICAgIGRlZiB0ZXN0R2V0VmFyQXJyYXkoc2VsZik6CisgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwCisgICAgICAgIHRjbC5ldmFsKCdzZXQgYSgxKSAxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Y2wuZ2V0dmFyKCdhKDEpJyksJzEnKQorCisgICAgZGVmIHRlc3RHZXRWYXJFeGNlcHRpb24oc2VsZik6CisgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLHRjbC5nZXR2YXIsJ2EnKQorCisgICAgZGVmIHRlc3RHZXRWYXJBcnJheUV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsdGNsLmdldHZhciwnYSgxKScpCisKKyAgICBkZWYgdGVzdFVuc2V0VmFyKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICB0Y2wuc2V0dmFyKCdhJywxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5ldmFsKCdpbmZvIGV4aXN0cyBhJyksJzEnKQorICAgICAgICB0Y2wudW5zZXR2YXIoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5ldmFsKCdpbmZvIGV4aXN0cyBhJyksJzAnKQorCisgICAgZGVmIHRlc3RVbnNldFZhckFycmF5KHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICB0Y2wuc2V0dmFyKCdhKDEpJywxKQorICAgICAgICB0Y2wuc2V0dmFyKCdhKDIpJywyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5ldmFsKCdpbmZvIGV4aXN0cyBhKDEpJyksJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5ldmFsKCdpbmZvIGV4aXN0cyBhKDIpJyksJzEnKQorICAgICAgICB0Y2wudW5zZXR2YXIoJ2EoMSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5ldmFsKCdpbmZvIGV4aXN0cyBhKDEpJyksJzAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5ldmFsKCdpbmZvIGV4aXN0cyBhKDIpJyksJzEnKQorCisgICAgZGVmIHRlc3RVbnNldFZhckV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsdGNsLnVuc2V0dmFyLCdhJykKKworICAgIGRlZiB0ZXN0RXZhbEZpbGUoc2VsZik6CisgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwCisgICAgICAgIGZpbGVuYW1lID0gInRlc3RFdmFsRmlsZS50Y2wiCisgICAgICAgIGZkID0gb3BlbihmaWxlbmFtZSwndycpCisgICAgICAgIHNjcmlwdCA9ICIiInNldCBhIDEKKyAgICAgICAgc2V0IGIgMgorICAgICAgICBzZXQgYyBbIGV4cHIgJGEgKyAkYiBdCisgICAgICAgICIiIgorICAgICAgICBmZC53cml0ZShzY3JpcHQpCisgICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgdGNsLmV2YWxmaWxlKGZpbGVuYW1lKQorICAgICAgICBvcy5yZW1vdmUoZmlsZW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmV2YWwoJ3NldCBhJyksJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5ldmFsKCdzZXQgYicpLCcyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Y2wuZXZhbCgnc2V0IGMnKSwnMycpCisKKyAgICBkZWYgdGVzdEV2YWxGaWxlRXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICBmaWxlbmFtZSA9ICJkb2Vzbm90ZXhpc3RzIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW1vdmUoZmlsZW5hbWUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sZToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsdGNsLmV2YWxmaWxlLGZpbGVuYW1lKQorCisgICAgZGVmIHRlc3RQYWNrYWdlUmVxdWlyZUV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsdGNsLmV2YWwsJ3BhY2thZ2UgcmVxdWlyZSBETkUnKQorCisgICAgZGVmIHRlc3RMb2FkV2l0aFVOQyhzZWxmKToKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgQnVpbGQgYSBVTkMgcGF0aCBmcm9tIHRoZSByZWd1bGFyIHBhdGguCisgICAgICAgICMgU29tZXRoaW5nIGxpa2UKKyAgICAgICAgIyAgIFxcJUNPTVBVVEVSTkFNRSVcYyRccHl0aG9uMjdccHl0aG9uLmV4ZQorCisgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5hYnNwYXRoKHN5cy5leGVjdXRhYmxlKQorICAgICAgICBpZiBmdWxsbmFtZVsxXSAhPSAnOic6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdW5jX25hbWUgPSByJ1xcJXNcJXMkXCVzJyAlIChvcy5lbnZpcm9uWydDT01QVVRFUk5BTUUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxuYW1lWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbG5hbWVbMzpdKQorCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBlbnYudW5zZXQoIlRDTF9MSUJSQVJZIikKKyAgICAgICAgICAgIGNtZCA9ICclcyAtYyAiaW1wb3J0IFRraW50ZXI7IHByaW50IFRraW50ZXIiJyAlICh1bmNfbmFtZSwpCisKKyAgICAgICAgICAgIHAgPSBQb3BlbihjbWQsIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSkKKyAgICAgICAgICAgIG91dF9kYXRhLCBlcnJfZGF0YSA9IHAuY29tbXVuaWNhdGUoKQorCisgICAgICAgICAgICBtc2cgPSAnXG5cbicuam9pbihbJyJUa2ludGVyLnB5IiBub3QgaW4gb3V0cHV0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29tbWFuZDonLCBjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0ZG91dDonLCBvdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RkZXJyOicsIGVycl9kYXRhXSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignVGtpbnRlci5weScsIG91dF9kYXRhLCBtc2cpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC53YWl0KCksIDAsICdOb24temVybyBleGl0IGNvZGUnKQorCisKKyAgICBkZWYgdGVzdF9wYXNzaW5nX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgZGVmIHBhc3NWYWx1ZSh2YWx1ZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5pbnRlcnAuY2FsbCgnc2V0JywgJ18nLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoVHJ1ZSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKEZhbHNlKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKCdzdHJpbmcnKSwgJ3N0cmluZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKCdzdHJpbmdcdTIwYWMnKSwgJ3N0cmluZ1x1MjBhYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKHUnc3RyaW5nJyksIHUnc3RyaW5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUodSdzdHJpbmdcdTIwYWMnKSwgdSdzdHJpbmdcdTIwYWMnKQorICAgICAgICBmb3IgaSBpbiAoMCwgMSwgLTEsIGludCgyKiozMS0xKSwgaW50KC0yKiozMSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoaSksIGkpCisgICAgICAgIGZvciBmIGluICgwLjAsIDEuMCwgLTEuMCwgMS8vMywgMS8zLjAsCisgICAgICAgICAgICAgICAgICBzeXMuZmxvYXRfaW5mby5taW4sIHN5cy5mbG9hdF9pbmZvLm1heCwKKyAgICAgICAgICAgICAgICAgIC1zeXMuZmxvYXRfaW5mby5taW4sIC1zeXMuZmxvYXRfaW5mby5tYXgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoZiksIGYpCisgICAgICAgIGZvciBmIGluIGZsb2F0KCduYW4nKSwgZmxvYXQoJ2luZicpLCAtZmxvYXQoJ2luZicpOgorICAgICAgICAgICAgaWYgZiAhPSBmOiAjIE5hTgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocGFzc1ZhbHVlKGYpLCBmKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3NWYWx1ZShmKSwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoKDEsICcyJywgKDMuNCwpKSksICgxLCAnMicsICgzLjQsKSkpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGNsVGVzdCwgVGtpbnRlclRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RlbG5ldGxpYi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RlbG5ldGxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmRiNDllCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CkBAIC0wLDAgKzEsNDU0IEBACitpbXBvcnQgc29ja2V0CitpbXBvcnQgdGVsbmV0bGliCitpbXBvcnQgdGltZQoraW1wb3J0IFF1ZXVlCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Cit0aHJlYWRpbmcgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKKworSE9TVCA9IHRlc3Rfc3VwcG9ydC5IT1NUCitFT0Zfc2lnaWwgPSBvYmplY3QoKQorCitkZWYgc2VydmVyKGV2dCwgc2VydiwgZGF0YXE9Tm9uZSk6CisgICAgIiIiIE9wZW4gYSB0Y3Agc2VydmVyIGluIHRocmVlIHN0ZXBzCisgICAgICAgIDEpIHNldCBldnQgdG8gdHJ1ZSB0byBsZXQgdGhlIHBhcmVudCBrbm93IHdlIGFyZSByZWFkeQorICAgICAgICAyKSBbb3B0aW9uYWxdIGlmIGlzIG5vdCBGYWxzZSwgd3JpdGUgdGhlIGxpc3Qgb2YgZGF0YSBmcm9tIGRhdGFxLmdldCgpCisgICAgICAgICAgIHRvIHRoZSBzb2NrZXQuCisgICAgIiIiCisgICAgc2Vydi5saXN0ZW4oNSkKKyAgICBldnQuc2V0KCkKKyAgICB0cnk6CisgICAgICAgIGNvbm4sIGFkZHIgPSBzZXJ2LmFjY2VwdCgpCisgICAgICAgIGlmIGRhdGFxOgorICAgICAgICAgICAgZGF0YSA9ICcnCisgICAgICAgICAgICBuZXdfZGF0YSA9IGRhdGFxLmdldChUcnVlLCAwLjUpCisgICAgICAgICAgICBkYXRhcS50YXNrX2RvbmUoKQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gbmV3X2RhdGE6CisgICAgICAgICAgICAgICAgaWYgaXRlbSA9PSBFT0Zfc2lnaWw6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgdHlwZShpdGVtKSBpbiBbaW50LCBmbG9hdF06CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoaXRlbSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGl0ZW0KKyAgICAgICAgICAgICAgICB3cml0dGVuID0gY29ubi5zZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbd3JpdHRlbjpdCisgICAgICAgIGNvbm4uY2xvc2UoKQorICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyAgICAgICAgcGFzcworICAgIGZpbmFsbHk6CisgICAgICAgIHNlcnYuY2xvc2UoKQorCitjbGFzcyBHZW5lcmFsVGVzdHMoVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmV2dCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoNjApICAjIFNhZmV0eSBuZXQuIExvb2sgaXNzdWUgMTE4MTIKKyAgICAgICAgc2VsZi5wb3J0ID0gdGVzdF9zdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2spCisgICAgICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmVyLCBhcmdzPShzZWxmLmV2dCxzZWxmLnNvY2spKQorICAgICAgICBzZWxmLnRocmVhZC5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQorICAgICAgICBzZWxmLmV2dC53YWl0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi50aHJlYWQuam9pbigpCisKKyAgICBkZWYgdGVzdEJhc2ljKHNlbGYpOgorICAgICAgICAjIGNvbm5lY3RzCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICB0ZWxuZXQuc29jay5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFRpbWVvdXREZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlbG5ldC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCisgICAgICAgIHRlbG5ldC5zb2NrLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0VGltZW91dE5vbmUoc2VsZik6CisgICAgICAgICMgTm9uZSwgaGF2aW5nIG90aGVyIGRlZmF1bHQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgzMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQsIHRpbWVvdXQ9Tm9uZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGVsbmV0LnNvY2suZ2V0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHRlbG5ldC5zb2NrLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0VGltZW91dFZhbHVlKHNlbGYpOgorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCwgdGltZW91dD0zMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZWxuZXQuc29jay5nZXR0aW1lb3V0KCksIDMwKQorICAgICAgICB0ZWxuZXQuc29jay5jbG9zZSgpCisKKyAgICBkZWYgdGVzdFRpbWVvdXRPcGVuKHNlbGYpOgorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KCkKKyAgICAgICAgdGVsbmV0Lm9wZW4oSE9TVCwgc2VsZi5wb3J0LCB0aW1lb3V0PTMwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlbG5ldC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCisgICAgICAgIHRlbG5ldC5zb2NrLmNsb3NlKCkKKworZGVmIF9yZWFkX3NldFVwKHNlbGYpOgorICAgIHNlbGYuZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICBzZWxmLmRhdGFxID0gUXVldWUuUXVldWUoKQorICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICBzZWxmLnNvY2suc2V0dGltZW91dCgxMCkKKyAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaykKKyAgICBzZWxmLnRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlcnZlciwgYXJncz0oc2VsZi5ldnQsc2VsZi5zb2NrLCBzZWxmLmRhdGFxKSkKKyAgICBzZWxmLnRocmVhZC5zdGFydCgpCisgICAgc2VsZi5ldnQud2FpdCgpCisKK2RlZiBfcmVhZF90ZWFyRG93bihzZWxmKToKKyAgICBzZWxmLnRocmVhZC5qb2luKCkKKworY2xhc3MgUmVhZFRlc3RzKFRlc3RDYXNlKToKKyAgICBzZXRVcCA9IF9yZWFkX3NldFVwCisgICAgdGVhckRvd24gPSBfcmVhZF90ZWFyRG93bgorCisgICAgIyB1c2UgYSBzaW1pbGFyIGFwcHJvYWNoIHRvIHRlc3RpbmcgdGltZW91dHMgYXMgdGVzdF90aW1lb3V0LnB5CisgICAgIyB0aGVzZSB3aWxsIG5ldmVyIHBhc3MgMTAwJSBidXQgbWFrZSB0aGUgZnV6eiBiaWcgZW5vdWdoIHRoYXQgaXQgaXMgcmFyZQorICAgIGJsb2NrX2xvbmcgPSAwLjYKKyAgICBibG9ja19zaG9ydCA9IDAuMworICAgIGRlZiB0ZXN0X3JlYWRfdW50aWxfQShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHJlYWRfdW50aWwoZXhwZWN0ZWQsIFt0aW1lb3V0XSkKKyAgICAgICAgICBSZWFkIHVudGlsIHRoZSBleHBlY3RlZCBzdHJpbmcgaGFzIGJlZW4gc2Vlbiwgb3IgYSB0aW1lb3V0IGlzCisgICAgICAgICAgaGl0IChkZWZhdWx0IGlzIG5vIHRpbWVvdXQpOyBtYXkgYmxvY2suCisgICAgICAgICIiIgorICAgICAgICB3YW50ID0gWyd4JyAqIDEwLCAnbWF0Y2gnLCAneScgKiAxMCwgRU9GX3NpZ2lsXQorICAgICAgICBzZWxmLmRhdGFxLnB1dCh3YW50KQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX3VudGlsKCdtYXRjaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgJycuam9pbih3YW50WzotMl0pKQorCisgICAgZGVmIHRlc3RfcmVhZF91bnRpbF9CKHNlbGYpOgorICAgICAgICAjIHRlc3QgdGhlIHRpbWVvdXQgLSBpdCBkb2VzIE5PVCByYWlzZSBzb2NrZXQudGltZW91dAorICAgICAgICB3YW50ID0gWydoZWxsbycsIHNlbGYuYmxvY2tfbG9uZywgJ25vdCBzZWVuJywgRU9GX3NpZ2lsXQorICAgICAgICBzZWxmLmRhdGFxLnB1dCh3YW50KQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX3VudGlsKCdub3Qgc2VlbicsIHNlbGYuYmxvY2tfc2hvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgd2FudFswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZWxuZXQucmVhZF9hbGwoKSwgJ25vdCBzZWVuJykKKworICAgIGRlZiB0ZXN0X3JlYWRfdW50aWxfd2l0aF9wb2xsKHNlbGYpOgorICAgICAgICAiIiJVc2Ugc2VsZWN0LnBvbGwoKSB0byBpbXBsZW1lbnQgdGVsbmV0LnJlYWRfdW50aWwoKS4iIiIKKyAgICAgICAgd2FudCA9IFsneCcgKiAxMCwgJ21hdGNoJywgJ3knICogMTAsIEVPRl9zaWdpbF0KKyAgICAgICAgc2VsZi5kYXRhcS5wdXQod2FudCkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIGlmIG5vdCB0ZWxuZXQuX2hhc19wb2xsOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3NlbGVjdC5wb2xsKCkgaXMgcmVxdWlyZWQnKQorICAgICAgICB0ZWxuZXQuX2hhc19wb2xsID0gVHJ1ZQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBkYXRhID0gdGVsbmV0LnJlYWRfdW50aWwoJ21hdGNoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAnJy5qb2luKHdhbnRbOi0yXSkpCisKKyAgICBkZWYgdGVzdF9yZWFkX3VudGlsX3dpdGhfc2VsZWN0KHNlbGYpOgorICAgICAgICAiIiJVc2Ugc2VsZWN0LnNlbGVjdCgpIHRvIGltcGxlbWVudCB0ZWxuZXQucmVhZF91bnRpbCgpLiIiIgorICAgICAgICB3YW50ID0gWyd4JyAqIDEwLCAnbWF0Y2gnLCAneScgKiAxMCwgRU9GX3NpZ2lsXQorICAgICAgICBzZWxmLmRhdGFxLnB1dCh3YW50KQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgdGVsbmV0Ll9oYXNfcG9sbCA9IEZhbHNlCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIGRhdGEgPSB0ZWxuZXQucmVhZF91bnRpbCgnbWF0Y2gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICcnLmpvaW4od2FudFs6LTJdKSkKKworICAgIGRlZiB0ZXN0X3JlYWRfYWxsX0Eoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICByZWFkX2FsbCgpCisgICAgICAgICAgUmVhZCBhbGwgZGF0YSB1bnRpbCBFT0Y7IG1heSBibG9jay4KKyAgICAgICAgIiIiCisgICAgICAgIHdhbnQgPSBbJ3gnICogNTAwLCAneScgKiA1MDAsICd6JyAqIDUwMCwgRU9GX3NpZ2lsXQorICAgICAgICBzZWxmLmRhdGFxLnB1dCh3YW50KQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX2FsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgJycuam9pbih3YW50WzotMV0pKQorICAgICAgICByZXR1cm4KKworICAgIGRlZiBfdGVzdF9ibG9ja2luZyhzZWxmLCBmdW5jKToKKyAgICAgICAgc2VsZi5kYXRhcS5wdXQoW3NlbGYuYmxvY2tfbG9uZywgRU9GX3NpZ2lsXSkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQorICAgICAgICBkYXRhID0gZnVuYygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmJsb2NrX3Nob3J0IDw9IHRpbWUudGltZSgpIC0gc3RhcnQpCisKKyAgICBkZWYgdGVzdF9yZWFkX2FsbF9CKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Jsb2NraW5nKHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KS5yZWFkX2FsbCkKKworICAgIGRlZiB0ZXN0X3JlYWRfYWxsX0Moc2VsZik6CisgICAgICAgIHNlbGYuZGF0YXEucHV0KFtFT0Zfc2lnaWxdKQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgdGVsbmV0LnJlYWRfYWxsKCkKKyAgICAgICAgdGVsbmV0LnJlYWRfYWxsKCkgIyBzaG91bGRuJ3QgcmFpc2UKKworICAgIGRlZiB0ZXN0X3JlYWRfc29tZV9BKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgcmVhZF9zb21lKCkKKyAgICAgICAgICBSZWFkIGF0IGxlYXN0IG9uZSBieXRlIG9yIEVPRjsgbWF5IGJsb2NrLgorICAgICAgICAiIiIKKyAgICAgICAgIyB0ZXN0ICdhdCBsZWFzdCBvbmUgYnl0ZScKKyAgICAgICAgd2FudCA9IFsneCcgKiA1MDAsIEVPRl9zaWdpbF0KKyAgICAgICAgc2VsZi5kYXRhcS5wdXQod2FudCkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIGRhdGEgPSB0ZWxuZXQucmVhZF9hbGwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGRhdGEpID49IDEpCisKKyAgICBkZWYgdGVzdF9yZWFkX3NvbWVfQihzZWxmKToKKyAgICAgICAgIyB0ZXN0IEVPRgorICAgICAgICBzZWxmLmRhdGFxLnB1dChbRU9GX3NpZ2lsXSkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHRlbG5ldC5yZWFkX3NvbWUoKSkKKworICAgIGRlZiB0ZXN0X3JlYWRfc29tZV9DKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Jsb2NraW5nKHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KS5yZWFkX3NvbWUpCisKKyAgICBkZWYgX3Rlc3RfcmVhZF9hbnlfZWFnZXJfQShzZWxmLCBmdW5jX25hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgcmVhZF92ZXJ5X2VhZ2VyKCkKKyAgICAgICAgICBSZWFkIGFsbCBkYXRhIGF2YWlsYWJsZSBhbHJlYWR5IHF1ZXVlZCBvciBvbiB0aGUgc29ja2V0LAorICAgICAgICAgIHdpdGhvdXQgYmxvY2tpbmcuCisgICAgICAgICIiIgorICAgICAgICB3YW50ID0gW3NlbGYuYmxvY2tfbG9uZywgJ3gnICogMTAwLCAneScgKiAxMDAsIEVPRl9zaWdpbF0KKyAgICAgICAgZXhwZWN0cyA9IHdhbnRbMV0gKyB3YW50WzJdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHdhbnQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBmdW5jID0gZ2V0YXR0cih0ZWxuZXQsIGZ1bmNfbmFtZSkKKyAgICAgICAgZGF0YSA9ICcnCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGF0YSArPSBmdW5jKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0cy5zdGFydHN3aXRoKGRhdGEpKQorICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0cywgZGF0YSkKKworICAgIGRlZiBfdGVzdF9yZWFkX2FueV9lYWdlcl9CKHNlbGYsIGZ1bmNfbmFtZSk6CisgICAgICAgICMgdGVzdCBFT0YKKyAgICAgICAgc2VsZi5kYXRhcS5wdXQoW0VPRl9zaWdpbF0pCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICB0aW1lLnNsZWVwKHNlbGYuYmxvY2tfc2hvcnQpCisgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHRlbG5ldCwgZnVuY19uYW1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZnVuYykKKworICAgICMgcmVhZF9lYWdlciBhbmQgcmVhZF92ZXJ5X2VhZ2VyIG1ha2UgdGhlIHNhbWUgZ2F1cmFudGVlcworICAgICMgKHRoZXkgYmVoYXZlIGRpZmZlcmVudGx5IGJ1dCB3ZSBvbmx5IHRlc3QgdGhlIGdhdXJhbnRlZXMpCisgICAgZGVmIHRlc3RfcmVhZF92ZXJ5X2VhZ2VyX0Eoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZF9hbnlfZWFnZXJfQSgncmVhZF92ZXJ5X2VhZ2VyJykKKyAgICBkZWYgdGVzdF9yZWFkX3ZlcnlfZWFnZXJfQihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkX2FueV9lYWdlcl9CKCdyZWFkX3ZlcnlfZWFnZXInKQorICAgIGRlZiB0ZXN0X3JlYWRfZWFnZXJfQShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkX2FueV9lYWdlcl9BKCdyZWFkX2VhZ2VyJykKKyAgICBkZWYgdGVzdF9yZWFkX2VhZ2VyX0Ioc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZF9hbnlfZWFnZXJfQigncmVhZF9lYWdlcicpCisgICAgIyBOQiAtLSB3ZSBuZWVkIHRvIHRlc3QgdGhlIElBQyBibG9jayB3aGljaCBpcyBtZW50aW9uZWQgaW4gdGhlIGRvY3N0cmluZworICAgICMgYnV0IG5vdCBpbiB0aGUgbW9kdWxlIGRvY3MKKworICAgIGRlZiBfdGVzdF9yZWFkX2FueV9sYXp5X0Ioc2VsZiwgZnVuY19uYW1lKToKKyAgICAgICAgc2VsZi5kYXRhcS5wdXQoW0VPRl9zaWdpbF0pCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBmdW5jID0gZ2V0YXR0cih0ZWxuZXQsIGZ1bmNfbmFtZSkKKyAgICAgICAgdGVsbmV0LmZpbGxfcmF3cSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmdW5jKQorCisgICAgZGVmIHRlc3RfcmVhZF9sYXp5X0Eoc2VsZik6CisgICAgICAgIHdhbnQgPSBbJ3gnICogMTAwLCBFT0Zfc2lnaWxdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHdhbnQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICB0aW1lLnNsZWVwKHNlbGYuYmxvY2tfc2hvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHRlbG5ldC5yZWFkX2xhenkoKSkKKyAgICAgICAgZGF0YSA9ICcnCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVhZF9kYXRhID0gdGVsbmV0LnJlYWRfbGF6eSgpCisgICAgICAgICAgICAgICAgZGF0YSArPSByZWFkX2RhdGEKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgorICAgICAgICAgICAgICAgICAgICB0ZWxuZXQuZmlsbF9yYXdxKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhbnRbMF0uc3RhcnRzd2l0aChkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCB3YW50WzBdKQorCisgICAgZGVmIHRlc3RfcmVhZF9sYXp5X0Ioc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZF9hbnlfbGF6eV9CKCdyZWFkX2xhenknKQorCisgICAgZGVmIHRlc3RfcmVhZF92ZXJ5X2xhenlfQShzZWxmKToKKyAgICAgICAgd2FudCA9IFsneCcgKiAxMDAsIEVPRl9zaWdpbF0KKyAgICAgICAgc2VsZi5kYXRhcS5wdXQod2FudCkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIHRpbWUuc2xlZXAoc2VsZi5ibG9ja19zaG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgdGVsbmV0LnJlYWRfdmVyeV9sYXp5KCkpCisgICAgICAgIGRhdGEgPSAnJworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlYWRfZGF0YSA9IHRlbG5ldC5yZWFkX3ZlcnlfbGF6eSgpCisgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGRhdGEgKz0gcmVhZF9kYXRhCisgICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgorICAgICAgICAgICAgICAgIHRlbG5ldC5maWxsX3Jhd3EoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHRlbG5ldC5jb29rZWRxKQorICAgICAgICAgICAgICAgIHRlbG5ldC5wcm9jZXNzX3Jhd3EoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhbnRbMF0uc3RhcnRzd2l0aChkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCB3YW50WzBdKQorCisgICAgZGVmIHRlc3RfcmVhZF92ZXJ5X2xhenlfQihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkX2FueV9sYXp5X0IoJ3JlYWRfdmVyeV9sYXp5JykKKworY2xhc3MgbmVnb19jb2xsZWN0b3Iob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2JfZ2V0dGVyPU5vbmUpOgorICAgICAgICBzZWxmLnNlZW4gPSAnJworICAgICAgICBzZWxmLnNiX2dldHRlciA9IHNiX2dldHRlcgorICAgICAgICBzZWxmLnNiX3NlZW4gPSAnJworCisgICAgZGVmIGRvX25lZ28oc2VsZiwgc29jaywgY21kLCBvcHQpOgorICAgICAgICBzZWxmLnNlZW4gKz0gY21kICsgb3B0CisgICAgICAgIGlmIGNtZCA9PSB0bC5TRSBhbmQgc2VsZi5zYl9nZXR0ZXI6CisgICAgICAgICAgICBzYl9kYXRhID0gc2VsZi5zYl9nZXR0ZXIoKQorICAgICAgICAgICAgc2VsZi5zYl9zZWVuICs9IHNiX2RhdGEKKwordGwgPSB0ZWxuZXRsaWIKK2NsYXNzIE9wdGlvblRlc3RzKFRlc3RDYXNlKToKKyAgICBzZXRVcCA9IF9yZWFkX3NldFVwCisgICAgdGVhckRvd24gPSBfcmVhZF90ZWFyRG93bgorICAgICMgUkZDIDg1NCBjb21tYW5kcworICAgIGNtZHMgPSBbdGwuQU8sIHRsLkFZVCwgdGwuQlJLLCB0bC5FQywgdGwuRUwsIHRsLkdBLCB0bC5JUCwgdGwuTk9QXQorCisgICAgZGVmIF90ZXN0X2NvbW1hbmQoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIiBoZWxwZXIgZm9yIHRlc3RpbmcgSUFDICsgY21kICIiIgorICAgICAgICBzZWxmLnNldFVwKCkKKyAgICAgICAgc2VsZi5kYXRhcS5wdXQoZGF0YSkKKyAgICAgICAgdGVsbmV0ID0gdGVsbmV0bGliLlRlbG5ldChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIG5lZ28gPSBuZWdvX2NvbGxlY3RvcigpCisgICAgICAgIHRlbG5ldC5zZXRfb3B0aW9uX25lZ290aWF0aW9uX2NhbGxiYWNrKG5lZ28uZG9fbmVnbykKKyAgICAgICAgdHh0ID0gdGVsbmV0LnJlYWRfYWxsKCkKKyAgICAgICAgY21kID0gbmVnby5zZWVuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oY21kKSA+IDApICMgd2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBjb21tYW5kCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oY21kWzBdLCBzZWxmLmNtZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kWzFdLCB0bC5OT09QVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oJycuam9pbihkYXRhWzotMV0pKSwgbGVuKHR4dCArIGNtZCkpCisgICAgICAgIG5lZ28uc2JfZ2V0dGVyID0gTm9uZSAjIGJyZWFrIHRoZSBuZWdvID0+IHRlbG5ldCBjeWNsZQorICAgICAgICBzZWxmLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X0lBQ19jb21tYW5kcyhzZWxmKToKKyAgICAgICAgIyByZXNldCBvdXIgc2V0dXAKKyAgICAgICAgc2VsZi5kYXRhcS5wdXQoW0VPRl9zaWdpbF0pCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBzZWxmLnRlYXJEb3duKCkKKworICAgICAgICBmb3IgY21kIGluIHNlbGYuY21kczoKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfY29tbWFuZChbJ3gnICogMTAwLCB0bC5JQUMgKyBjbWQsICd5JyoxMDAsIEVPRl9zaWdpbF0pCisgICAgICAgICAgICBzZWxmLl90ZXN0X2NvbW1hbmQoWyd4JyAqIDEwLCB0bC5JQUMgKyBjbWQsICd5JyoxMCwgRU9GX3NpZ2lsXSkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfY29tbWFuZChbdGwuSUFDICsgY21kLCBFT0Zfc2lnaWxdKQorICAgICAgICAjIGFsbCBhdCBvbmNlCisgICAgICAgIHNlbGYuX3Rlc3RfY29tbWFuZChbdGwuSUFDICsgY21kIGZvciAoY21kKSBpbiBzZWxmLmNtZHNdICsgW0VPRl9zaWdpbF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHRlbG5ldC5yZWFkX3NiX2RhdGEoKSkKKworICAgIGRlZiB0ZXN0X1NCX2NvbW1hbmRzKHNlbGYpOgorICAgICAgICAjIFJGQyA4NTUsIHN1Ym5lZ290aWF0aW9ucyBwb3J0aW9uCisgICAgICAgIHNlbmQgPSBbdGwuSUFDICsgdGwuU0IgKyB0bC5JQUMgKyB0bC5TRSwKKyAgICAgICAgICAgICAgICB0bC5JQUMgKyB0bC5TQiArIHRsLklBQyArIHRsLklBQyArIHRsLklBQyArIHRsLlNFLAorICAgICAgICAgICAgICAgIHRsLklBQyArIHRsLlNCICsgdGwuSUFDICsgdGwuSUFDICsgJ2FhJyArIHRsLklBQyArIHRsLlNFLAorICAgICAgICAgICAgICAgIHRsLklBQyArIHRsLlNCICsgJ2JiJyArIHRsLklBQyArIHRsLklBQyArIHRsLklBQyArIHRsLlNFLAorICAgICAgICAgICAgICAgIHRsLklBQyArIHRsLlNCICsgJ2NjJyArIHRsLklBQyArIHRsLklBQyArICdkZCcgKyB0bC5JQUMgKyB0bC5TRSwKKyAgICAgICAgICAgICAgICBFT0Zfc2lnaWwsCisgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHNlbmQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICBuZWdvID0gbmVnb19jb2xsZWN0b3IodGVsbmV0LnJlYWRfc2JfZGF0YSkKKyAgICAgICAgdGVsbmV0LnNldF9vcHRpb25fbmVnb3RpYXRpb25fY2FsbGJhY2sobmVnby5kb19uZWdvKQorICAgICAgICB0eHQgPSB0ZWxuZXQucmVhZF9hbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR4dCwgJycpCisgICAgICAgIHdhbnRfc2JfZGF0YSA9IHRsLklBQyArIHRsLklBQyArICdhYWJiJyArIHRsLklBQyArICdjYycgKyB0bC5JQUMgKyAnZGQnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmVnby5zYl9zZWVuLCB3YW50X3NiX2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIHRlbG5ldC5yZWFkX3NiX2RhdGEoKSkKKyAgICAgICAgbmVnby5zYl9nZXR0ZXIgPSBOb25lICMgYnJlYWsgdGhlIG5lZ28gPT4gdGVsbmV0IGN5Y2xlCisKKworY2xhc3MgRXhwZWN0VGVzdHMoVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLmRhdGFxID0gUXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDEwKQorICAgICAgICBzZWxmLnBvcnQgPSB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaykKKyAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZXJ2ZXIsIGFyZ3M9KHNlbGYuZXZ0LHNlbGYuc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YXEpKQorICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCisgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKworICAgICMgdXNlIGEgc2ltaWxhciBhcHByb2FjaCB0byB0ZXN0aW5nIHRpbWVvdXRzIGFzIHRlc3RfdGltZW91dC5weQorICAgICMgdGhlc2Ugd2lsbCBuZXZlciBwYXNzIDEwMCUgYnV0IG1ha2UgdGhlIGZ1enogYmlnIGVub3VnaCB0aGF0IGl0IGlzIHJhcmUKKyAgICBibG9ja19sb25nID0gMC42CisgICAgYmxvY2tfc2hvcnQgPSAwLjMKKyAgICBkZWYgdGVzdF9leHBlY3RfQShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIGV4cGVjdChleHBlY3RlZCwgW3RpbWVvdXRdKQorICAgICAgICAgIFJlYWQgdW50aWwgdGhlIGV4cGVjdGVkIHN0cmluZyBoYXMgYmVlbiBzZWVuLCBvciBhIHRpbWVvdXQgaXMKKyAgICAgICAgICBoaXQgKGRlZmF1bHQgaXMgbm8gdGltZW91dCk7IG1heSBibG9jay4KKyAgICAgICAgIiIiCisgICAgICAgIHdhbnQgPSBbJ3gnICogMTAsICdtYXRjaCcsICd5JyAqIDEwLCBFT0Zfc2lnaWxdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHdhbnQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICAoXyxfLGRhdGEpID0gdGVsbmV0LmV4cGVjdChbJ21hdGNoJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgJycuam9pbih3YW50WzotMl0pKQorCisgICAgZGVmIHRlc3RfZXhwZWN0X0Ioc2VsZik6CisgICAgICAgICMgdGVzdCB0aGUgdGltZW91dCAtIGl0IGRvZXMgTk9UIHJhaXNlIHNvY2tldC50aW1lb3V0CisgICAgICAgIHdhbnQgPSBbJ2hlbGxvJywgc2VsZi5ibG9ja19sb25nLCAnbm90IHNlZW4nLCBFT0Zfc2lnaWxdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHdhbnQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmRhdGFxLmpvaW4oKQorICAgICAgICAoXyxfLGRhdGEpID0gdGVsbmV0LmV4cGVjdChbJ25vdCBzZWVuJ10sIHNlbGYuYmxvY2tfc2hvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgd2FudFswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZWxuZXQucmVhZF9hbGwoKSwgJ25vdCBzZWVuJykKKworICAgIGRlZiB0ZXN0X2V4cGVjdF93aXRoX3BvbGwoc2VsZik6CisgICAgICAgICIiIlVzZSBzZWxlY3QucG9sbCgpIHRvIGltcGxlbWVudCB0ZWxuZXQuZXhwZWN0KCkuIiIiCisgICAgICAgIHdhbnQgPSBbJ3gnICogMTAsICdtYXRjaCcsICd5JyAqIDEwLCBFT0Zfc2lnaWxdCisgICAgICAgIHNlbGYuZGF0YXEucHV0KHdhbnQpCisgICAgICAgIHRlbG5ldCA9IHRlbG5ldGxpYi5UZWxuZXQoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBpZiBub3QgdGVsbmV0Ll9oYXNfcG9sbDoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdzZWxlY3QucG9sbCgpIGlzIHJlcXVpcmVkJykKKyAgICAgICAgdGVsbmV0Ll9oYXNfcG9sbCA9IFRydWUKKyAgICAgICAgc2VsZi5kYXRhcS5qb2luKCkKKyAgICAgICAgKF8sXyxkYXRhKSA9IHRlbG5ldC5leHBlY3QoWydtYXRjaCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICcnLmpvaW4od2FudFs6LTJdKSkKKworICAgIGRlZiB0ZXN0X2V4cGVjdF93aXRoX3NlbGVjdChzZWxmKToKKyAgICAgICAgIiIiVXNlIHNlbGVjdC5zZWxlY3QoKSB0byBpbXBsZW1lbnQgdGVsbmV0LmV4cGVjdCgpLiIiIgorICAgICAgICB3YW50ID0gWyd4JyAqIDEwLCAnbWF0Y2gnLCAneScgKiAxMCwgRU9GX3NpZ2lsXQorICAgICAgICBzZWxmLmRhdGFxLnB1dCh3YW50KQorICAgICAgICB0ZWxuZXQgPSB0ZWxuZXRsaWIuVGVsbmV0KEhPU1QsIHNlbGYucG9ydCkKKyAgICAgICAgdGVsbmV0Ll9oYXNfcG9sbCA9IEZhbHNlCisgICAgICAgIHNlbGYuZGF0YXEuam9pbigpCisgICAgICAgIChfLF8sZGF0YSkgPSB0ZWxuZXQuZXhwZWN0KFsnbWF0Y2gnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAnJy5qb2luKHdhbnRbOi0yXSkpCisKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoR2VuZXJhbFRlc3RzLCBSZWFkVGVzdHMsIE9wdGlvblRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwZWN0VGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RlbXBmaWxlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdGVtcGZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkMjNhZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RlbXBmaWxlLnB5CkBAIC0wLDAgKzEsOTY1IEBACisjIHRlbXBmaWxlLnB5IHVuaXQgdGVzdHMuCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBlcnJubworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHdhcm5pbmdzCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAorCit3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PVJ1bnRpbWVXYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0ibWt0ZW1wIiwgbW9kdWxlPV9fbmFtZV9fKQorCitpZiBoYXNhdHRyKG9zLCAnc3RhdCcpOgorICAgIGltcG9ydCBzdGF0CisgICAgaGFzX3N0YXQgPSAxCitlbHNlOgorICAgIGhhc19zdGF0ID0gMAorCitoYXNfdGV4dG1vZGUgPSAodGVtcGZpbGUuX3RleHRfb3BlbmZsYWdzICE9IHRlbXBmaWxlLl9iaW5fb3BlbmZsYWdzKQoraGFzX3NwYXdubCA9IGhhc2F0dHIob3MsICdzcGF3bmwnKQorCisjIFRFU1RfRklMRVMgbWF5IG5lZWQgdG8gYmUgdHdlYWtlZCBmb3Igc3lzdGVtcyBkZXBlbmRpbmcgb24gdGhlIG1heGltdW0KKyMgbnVtYmVyIG9mIGZpbGVzIHRoYXQgY2FuIGJlIG9wZW5lZCBhdCBvbmUgdGltZSAoc2VlIHVsaW1pdCAtbikKK2lmIHN5cy5wbGF0Zm9ybSBpbiAoJ29wZW5ic2QzJywgJ29wZW5ic2Q0Jyk6CisgICAgVEVTVF9GSUxFUyA9IDQ4CitlbHNlOgorICAgIFRFU1RfRklMRVMgPSAxMDAKKworIyBUaGlzIGlzIG9yZ2FuaXplZCBhcyBvbmUgdGVzdCBmb3IgZWFjaCBjaHVuayBvZiBjb2RlIGluIHRlbXBmaWxlLnB5LAorIyBpbiBvcmRlciBvZiB0aGVpciBhcHBlYXJhbmNlIGluIHRoZSBmaWxlLiAgVGVzdGluZyB3aGljaCByZXF1aXJlcworIyB0aHJlYWRzIGlzIG5vdCBkb25lIGhlcmUuCisKKyMgQ29tbW9uIGZ1bmN0aW9uYWxpdHkuCitjbGFzcyBUQyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBzdHJfY2hlY2sgPSByZS5jb21waWxlKHIiW2EtekEtWjAtOV8tXXs2fSQiKQorCisgICAgZGVmIGZhaWxPbkV4Y2VwdGlvbihzZWxmLCB3aGF0LCBlaT1Ob25lKToKKyAgICAgICAgaWYgZWkgaXMgTm9uZToKKyAgICAgICAgICAgIGVpID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgc2VsZi5mYWlsKCIlcyByYWlzZWQgJXM6ICVzIiAlICh3aGF0LCBlaVswXSwgZWlbMV0pKQorCisgICAgZGVmIG5hbWVDaGVjayhzZWxmLCBuYW1lLCBkaXIsIHByZSwgc3VmKToKKyAgICAgICAgKG5kaXIsIG5iYXNlKSA9IG9zLnBhdGguc3BsaXQobmFtZSkKKyAgICAgICAgbnByZSAgPSBuYmFzZVs6bGVuKHByZSldCisgICAgICAgIG5zdWYgID0gbmJhc2VbbGVuKG5iYXNlKS1sZW4oc3VmKTpdCisKKyAgICAgICAgIyBjaGVjayBmb3IgZXF1YWxpdHkgb2YgdGhlIGFic29sdXRlIHBhdGhzIQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYWJzcGF0aChuZGlyKSwgb3MucGF0aC5hYnNwYXRoKGRpciksCisgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUgJyVzJyBub3QgaW4gZGlyZWN0b3J5ICclcyciICUgKG5hbWUsIGRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnByZSwgcHJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlICclcycgZG9lcyBub3QgYmVnaW4gd2l0aCAnJXMnIiAlIChuYmFzZSwgcHJlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuc3VmLCBzdWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnJXMnIiAlIChuYmFzZSwgc3VmKSkKKworICAgICAgICBuYmFzZSA9IG5iYXNlW2xlbihwcmUpOmxlbihuYmFzZSktbGVuKHN1ZildCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnN0cl9jaGVjay5tYXRjaChuYmFzZSksCisgICAgICAgICAgICAgICAgICAgICAicmFuZG9tIHN0cmluZyAnJXMnIGRvZXMgbm90IG1hdGNoIC9eW2EtekEtWjAtOV8tXXs2fSQvIgorICAgICAgICAgICAgICAgICAgICAgJSBuYmFzZSkKKwordGVzdF9jbGFzc2VzID0gW10KKworY2xhc3MgdGVzdF9leHBvcnRzKFRDKToKKyAgICBkZWYgdGVzdF9leHBvcnRzKHNlbGYpOgorICAgICAgICAjIFRoZXJlIGFyZSBubyBzdXJwcmlzaW5nIHN5bWJvbHMgaW4gdGhlIHRlbXBmaWxlIG1vZHVsZQorICAgICAgICBkaWN0ID0gdGVtcGZpbGUuX19kaWN0X18KKworICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgICJOYW1lZFRlbXBvcmFyeUZpbGUiIDogMSwKKyAgICAgICAgICAgICJUZW1wb3JhcnlGaWxlIiA6IDEsCisgICAgICAgICAgICAibWtzdGVtcCIgOiAxLAorICAgICAgICAgICAgIm1rZHRlbXAiIDogMSwKKyAgICAgICAgICAgICJta3RlbXAiIDogMSwKKyAgICAgICAgICAgICJUTVBfTUFYIiA6IDEsCisgICAgICAgICAgICAiZ2V0dGVtcHByZWZpeCIgOiAxLAorICAgICAgICAgICAgImdldHRlbXBkaXIiIDogMSwKKyAgICAgICAgICAgICJ0ZW1wZGlyIiA6IDEsCisgICAgICAgICAgICAidGVtcGxhdGUiIDogMSwKKyAgICAgICAgICAgICJTcG9vbGVkVGVtcG9yYXJ5RmlsZSIgOiAxCisgICAgICAgIH0KKworICAgICAgICB1bmV4cCA9IFtdCisgICAgICAgIGZvciBrZXkgaW4gZGljdDoKKyAgICAgICAgICAgIGlmIGtleVswXSAhPSAnXycgYW5kIGtleSBub3QgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgdW5leHAuYXBwZW5kKGtleSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbih1bmV4cCkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIGtleXM6ICVzIiAlIHVuZXhwKQorCit0ZXN0X2NsYXNzZXMuYXBwZW5kKHRlc3RfZXhwb3J0cykKKworCitjbGFzcyB0ZXN0X19SYW5kb21OYW1lU2VxdWVuY2UoVEMpOgorICAgICIiIlRlc3QgdGhlIGludGVybmFsIGl0ZXJhdG9yIG9iamVjdCBfUmFuZG9tTmFtZVNlcXVlbmNlLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnIgPSB0ZW1wZmlsZS5fUmFuZG9tTmFtZVNlcXVlbmNlKCkKKworICAgIGRlZiB0ZXN0X2dldF9zaXhfY2hhcl9zdHIoc2VsZik6CisgICAgICAgICMgX1JhbmRvbU5hbWVTZXF1ZW5jZSByZXR1cm5zIGEgc2l4LWNoYXJhY3RlciBzdHJpbmcKKyAgICAgICAgcyA9IHNlbGYuci5uZXh0KCkKKyAgICAgICAgc2VsZi5uYW1lQ2hlY2socywgJycsICcnLCAnJykKKworICAgIGRlZiB0ZXN0X21hbnkoc2VsZik6CisgICAgICAgICMgX1JhbmRvbU5hbWVTZXF1ZW5jZSByZXR1cm5zIG5vIGR1cGxpY2F0ZSBzdHJpbmdzIChzdG9jaGFzdGljKQorCisgICAgICAgIGRpY3QgPSB7fQorICAgICAgICByID0gc2VsZi5yCisgICAgICAgIGZvciBpIGluIHhyYW5nZShURVNUX0ZJTEVTKToKKyAgICAgICAgICAgIHMgPSByLm5leHQoKQorICAgICAgICAgICAgc2VsZi5uYW1lQ2hlY2socywgJycsICcnLCAnJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocywgZGljdCkKKyAgICAgICAgICAgIGRpY3Rbc10gPSAxCisKKyAgICBkZWYgdGVzdF9zdXBwb3J0c19pdGVyKHNlbGYpOgorICAgICAgICAjIF9SYW5kb21OYW1lU2VxdWVuY2Ugc3VwcG9ydHMgdGhlIGl0ZXJhdG9yIHByb3RvY29sCisKKyAgICAgICAgaSA9IDAKKyAgICAgICAgciA9IHNlbGYucgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgcyBpbiByOgorICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgICAgIGlmIGkgPT0gMjA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbE9uRXhjZXB0aW9uKCJpdGVyYXRpb24iKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwKKyAgICAgICAgIm9zLmZvcmsgaXMgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCIpCisgICAgZGVmIHRlc3RfcHJvY2Vzc19hd2FyZW5lc3Moc2VsZik6CisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIHJhbmRvbSBzb3VyY2UgZGlmZmVycyBiZXR3ZWVuCisgICAgICAgICMgY2hpbGQgYW5kIHBhcmVudC4KKyAgICAgICAgcmVhZF9mZCwgd3JpdGVfZmQgPSBvcy5waXBlKCkKKyAgICAgICAgcGlkID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgIGlmIG5vdCBwaWQ6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UocmVhZF9mZCkKKyAgICAgICAgICAgICAgICBvcy53cml0ZSh3cml0ZV9mZCwgbmV4dChzZWxmLnIpLmVuY29kZSgiYXNjaWkiKSkKKyAgICAgICAgICAgICAgICBvcy5jbG9zZSh3cml0ZV9mZCkKKyAgICAgICAgICAgICAgICAjIGJ5cGFzcyB0aGUgbm9ybWFsIGV4aXQgaGFuZGxlcnMtIGxlYXZlIHRob3NlIHRvCisgICAgICAgICAgICAgICAgIyB0aGUgcGFyZW50LgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgICAgICAgICBwYXJlbnRfdmFsdWUgPSBuZXh0KHNlbGYucikKKyAgICAgICAgICAgIGNoaWxkX3ZhbHVlID0gb3MucmVhZChyZWFkX2ZkLCBsZW4ocGFyZW50X3ZhbHVlKSkuZGVjb2RlKCJhc2NpaSIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBwaWQ6CisgICAgICAgICAgICAgICAgIyBiZXN0IGVmZm9ydCB0byBlbnN1cmUgdGhlIHByb2Nlc3MgY2FuJ3QgYmxlZWQgb3V0CisgICAgICAgICAgICAgICAgIyB2aWEgYW55IGJ1Z3MgYWJvdmUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lMTCkKKyAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgb3MuY2xvc2UocmVhZF9mZCkKKyAgICAgICAgICAgIG9zLmNsb3NlKHdyaXRlX2ZkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNoaWxkX3ZhbHVlLCBwYXJlbnRfdmFsdWUpCisKKwordGVzdF9jbGFzc2VzLmFwcGVuZCh0ZXN0X19SYW5kb21OYW1lU2VxdWVuY2UpCisKKworY2xhc3MgdGVzdF9fY2FuZGlkYXRlX3RlbXBkaXJfbGlzdChUQyk6CisgICAgIiIiVGVzdCB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gX2NhbmRpZGF0ZV90ZW1wZGlyX2xpc3QuIiIiCisKKyAgICBkZWYgdGVzdF9ub25lbXB0eV9saXN0KHNlbGYpOgorICAgICAgICAjIF9jYW5kaWRhdGVfdGVtcGRpcl9saXN0IHJldHVybnMgYSBub25lbXB0eSBsaXN0IG9mIHN0cmluZ3MKKworICAgICAgICBjYW5kID0gdGVtcGZpbGUuX2NhbmRpZGF0ZV90ZW1wZGlyX2xpc3QoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKGNhbmQpID09IDApCisgICAgICAgIGZvciBjIGluIGNhbmQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYywgYmFzZXN0cmluZykKKworICAgIGRlZiB0ZXN0X3dhbnRlZF9kaXJzKHNlbGYpOgorICAgICAgICAjIF9jYW5kaWRhdGVfdGVtcGRpcl9saXN0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkaXJlY3RvcmllcworCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSBpbnRlcmVzdGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGFsbCBzZXQuCisgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZm9yIGVudm5hbWUgaW4gJ1RNUERJUicsICdURU1QJywgJ1RNUCc6CisgICAgICAgICAgICAgICAgZGlybmFtZSA9IG9zLmdldGVudihlbnZuYW1lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkaXJuYW1lOgorICAgICAgICAgICAgICAgICAgICBlbnZbZW52bmFtZV0gPSBvcy5wYXRoLmFic3BhdGgoZW52bmFtZSkKKworICAgICAgICAgICAgY2FuZCA9IHRlbXBmaWxlLl9jYW5kaWRhdGVfdGVtcGRpcl9saXN0KCkKKworICAgICAgICAgICAgZm9yIGVudm5hbWUgaW4gJ1RNUERJUicsICdURU1QJywgJ1RNUCc6CisgICAgICAgICAgICAgICAgZGlybmFtZSA9IG9zLmdldGVudihlbnZuYW1lKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkaXJuYW1lOiByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihkaXJuYW1lLCBjYW5kKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGlybmFtZSA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBvcy5lcnJvcik6CisgICAgICAgICAgICAgICAgZGlybmFtZSA9IG9zLmN1cmRpcgorCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGRpcm5hbWUsIGNhbmQpCisKKyAgICAgICAgICAgICMgTm90IHByYWN0aWNhbCB0byB0cnkgdG8gdmVyaWZ5IHRoZSBwcmVzZW5jZSBvZiBPUy1zcGVjaWZpYworICAgICAgICAgICAgIyBwYXRocyBpbiB0aGlzIGxpc3QuCisKK3Rlc3RfY2xhc3Nlcy5hcHBlbmQodGVzdF9fY2FuZGlkYXRlX3RlbXBkaXJfbGlzdCkKKworIyBXZSB0ZXN0IF9nZXRfZGVmYXVsdF90ZW1wZGlyIHNvbWUgbW9yZSBieSB0ZXN0aW5nIGdldHRlbXBkaXIuCisKK2NsYXNzIFRlc3RHZXREZWZhdWx0VGVtcGRpcihUQyk6CisgICAgIiIiVGVzdCBfZ2V0X2RlZmF1bHRfdGVtcGRpcigpLiIiIgorCisgICAgZGVmIHRlc3Rfbm9fZmlsZXNfbGVmdF9iZWhpbmQoc2VsZik6CisgICAgICAgICMgdXNlIGEgcHJpdmF0ZSBlbXB0eSBkaXJlY3RvcnkKKyAgICAgICAgb3VyX3RlbXBfZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgZm9yY2UgX2dldF9kZWZhdWx0X3RlbXBkaXIoKSB0byBjb25zaWRlciBvdXIgZW1wdHkgZGlyZWN0b3J5CisgICAgICAgICAgICBkZWYgb3VyX2NhbmRpZGF0ZV9saXN0KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtvdXJfdGVtcF9kaXJlY3RvcnldCisKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIodGVtcGZpbGUsICJfY2FuZGlkYXRlX3RlbXBkaXJfbGlzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91cl9jYW5kaWRhdGVfbGlzdCk6CisgICAgICAgICAgICAgICAgIyB2ZXJpZnkgb3VyIGRpcmVjdG9yeSBpcyBlbXB0eSBhZnRlciBfZ2V0X2RlZmF1bHRfdGVtcGRpcigpCisgICAgICAgICAgICAgICAgdGVtcGZpbGUuX2dldF9kZWZhdWx0X3RlbXBkaXIoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubGlzdGRpcihvdXJfdGVtcF9kaXJlY3RvcnkpLCBbXSkKKworICAgICAgICAgICAgICAgIGRlZiByYWlzZV9PU0Vycm9yKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoLTEpCisKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuc3dhcF9hdHRyKGlvLCAib3BlbiIsIHJhaXNlX09TRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAjIHRlc3QgYWdhaW4gd2l0aCBmYWlsaW5nIGlvLm9wZW4oKQorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGZpbGUuX2dldF9kZWZhdWx0X3RlbXBkaXIoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmxpc3RkaXIob3VyX3RlbXBfZGlyZWN0b3J5KSwgW10pCisKKyAgICAgICAgICAgICAgICBvcGVuID0gaW8ub3BlbgorICAgICAgICAgICAgICAgIGRlZiBiYWRfd3JpdGVyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgICAgIGZwID0gb3BlbigqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIGZwLndyaXRlID0gcmFpc2VfT1NFcnJvcgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnAKKworICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIoaW8sICJvcGVuIiwgYmFkX3dyaXRlcik6CisgICAgICAgICAgICAgICAgICAgICMgdGVzdCBhZ2FpbiB3aXRoIGZhaWxpbmcgd3JpdGUoKQorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGZpbGUuX2dldF9kZWZhdWx0X3RlbXBkaXIoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmxpc3RkaXIob3VyX3RlbXBfZGlyZWN0b3J5KSwgW10pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKG91cl90ZW1wX2RpcmVjdG9yeSkKKwordGVzdF9jbGFzc2VzLmFwcGVuZChUZXN0R2V0RGVmYXVsdFRlbXBkaXIpCisKKworY2xhc3MgdGVzdF9fZ2V0X2NhbmRpZGF0ZV9uYW1lcyhUQyk6CisgICAgIiIiVGVzdCB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gX2dldF9jYW5kaWRhdGVfbmFtZXMuIiIiCisKKyAgICBkZWYgdGVzdF9yZXR2YWwoc2VsZik6CisgICAgICAgICMgX2dldF9jYW5kaWRhdGVfbmFtZXMgcmV0dXJucyBhIF9SYW5kb21OYW1lU2VxdWVuY2Ugb2JqZWN0CisgICAgICAgIG9iaiA9IHRlbXBmaWxlLl9nZXRfY2FuZGlkYXRlX25hbWVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9iaiwgdGVtcGZpbGUuX1JhbmRvbU5hbWVTZXF1ZW5jZSkKKworICAgIGRlZiB0ZXN0X3NhbWVfdGhpbmcoc2VsZik6CisgICAgICAgICMgX2dldF9jYW5kaWRhdGVfbmFtZXMgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0CisgICAgICAgIGEgPSB0ZW1wZmlsZS5fZ2V0X2NhbmRpZGF0ZV9uYW1lcygpCisgICAgICAgIGIgPSB0ZW1wZmlsZS5fZ2V0X2NhbmRpZGF0ZV9uYW1lcygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaXMgYikKKwordGVzdF9jbGFzc2VzLmFwcGVuZCh0ZXN0X19nZXRfY2FuZGlkYXRlX25hbWVzKQorCisKK2NsYXNzIHRlc3RfX21rc3RlbXBfaW5uZXIoVEMpOgorICAgICIiIlRlc3QgdGhlIGludGVybmFsIGZ1bmN0aW9uIF9ta3N0ZW1wX2lubmVyLiIiIgorCisgICAgY2xhc3MgbWtzdGVtcGVkOgorICAgICAgICBfYmZsYWdzID0gdGVtcGZpbGUuX2Jpbl9vcGVuZmxhZ3MKKyAgICAgICAgX3RmbGFncyA9IHRlbXBmaWxlLl90ZXh0X29wZW5mbGFncworICAgICAgICBfY2xvc2UgPSBvcy5jbG9zZQorICAgICAgICBfdW5saW5rID0gb3MudW5saW5rCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpciwgcHJlLCBzdWYsIGJpbik6CisgICAgICAgICAgICBpZiBiaW46IGZsYWdzID0gc2VsZi5fYmZsYWdzCisgICAgICAgICAgICBlbHNlOiAgIGZsYWdzID0gc2VsZi5fdGZsYWdzCisKKyAgICAgICAgICAgIChzZWxmLmZkLCBzZWxmLm5hbWUpID0gdGVtcGZpbGUuX21rc3RlbXBfaW5uZXIoZGlyLCBwcmUsIHN1ZiwgZmxhZ3MpCisKKyAgICAgICAgZGVmIHdyaXRlKHNlbGYsIHN0cik6CisgICAgICAgICAgICBvcy53cml0ZShzZWxmLmZkLCBzdHIpCisKKyAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICBzZWxmLl9jbG9zZShzZWxmLmZkKQorICAgICAgICAgICAgc2VsZi5fdW5saW5rKHNlbGYubmFtZSkKKworICAgIGRlZiBkb19jcmVhdGUoc2VsZiwgZGlyPU5vbmUsIHByZT0iIiwgc3VmPSIiLCBiaW49MSk6CisgICAgICAgIGlmIGRpciBpcyBOb25lOgorICAgICAgICAgICAgZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbGUgPSBzZWxmLm1rc3RlbXBlZChkaXIsIHByZSwgc3VmLCBiaW4pCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbE9uRXhjZXB0aW9uKCJfbWtzdGVtcF9pbm5lciIpCisKKyAgICAgICAgc2VsZi5uYW1lQ2hlY2soZmlsZS5uYW1lLCBkaXIsIHByZSwgc3VmKQorICAgICAgICByZXR1cm4gZmlsZQorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMgX21rc3RlbXBfaW5uZXIgY2FuIGNyZWF0ZSBmaWxlcworICAgICAgICBzZWxmLmRvX2NyZWF0ZSgpLndyaXRlKCJibGF0IikKKyAgICAgICAgc2VsZi5kb19jcmVhdGUocHJlPSJhIikud3JpdGUoImJsYXQiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShzdWY9ImIiKS53cml0ZSgiYmxhdCIpCisgICAgICAgIHNlbGYuZG9fY3JlYXRlKHByZT0iYSIsIHN1Zj0iYiIpLndyaXRlKCJibGF0IikKKyAgICAgICAgc2VsZi5kb19jcmVhdGUocHJlPSJhYSIsIHN1Zj0iLnR4dCIpLndyaXRlKCJibGF0IikKKworICAgIGRlZiB0ZXN0X2Jhc2ljX21hbnkoc2VsZik6CisgICAgICAgICMgX21rc3RlbXBfaW5uZXIgY2FuIGNyZWF0ZSBtYW55IGZpbGVzIChzdG9jaGFzdGljKQorICAgICAgICBleHRhbnQgPSByYW5nZShURVNUX0ZJTEVTKQorICAgICAgICBmb3IgaSBpbiBleHRhbnQ6CisgICAgICAgICAgICBleHRhbnRbaV0gPSBzZWxmLmRvX2NyZWF0ZShwcmU9ImFhIikKKworICAgIGRlZiB0ZXN0X2Nob29zZV9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgICMgX21rc3RlbXBfaW5uZXIgY2FuIGNyZWF0ZSBmaWxlcyBpbiBhIHVzZXItc2VsZWN0ZWQgZGlyZWN0b3J5CisgICAgICAgIGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmRvX2NyZWF0ZShkaXI9ZGlyKS53cml0ZSgiYmxhdCIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5ybWRpcihkaXIpCisKKyAgICBkZWYgdGVzdF9maWxlX21vZGUoc2VsZik6CisgICAgICAgICMgX21rc3RlbXBfaW5uZXIgY3JlYXRlcyBmaWxlcyB3aXRoIHRoZSBwcm9wZXIgbW9kZQorICAgICAgICBpZiBub3QgaGFzX3N0YXQ6CisgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAjIHVnaCwgY2FuJ3QgdXNlIFNraXBUZXN0LgorCisgICAgICAgIGZpbGUgPSBzZWxmLmRvX2NyZWF0ZSgpCisgICAgICAgIG1vZGUgPSBzdGF0LlNfSU1PREUob3Muc3RhdChmaWxlLm5hbWUpLnN0X21vZGUpCisgICAgICAgIGV4cGVjdGVkID0gMDYwMAorICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCd3aW4zMicsICdvczJlbXgnKToKKyAgICAgICAgICAgICMgVGhlcmUncyBubyBkaXN0aW5jdGlvbiBhbW9uZyAndXNlcicsICdncm91cCcgYW5kICd3b3JsZCc7CisgICAgICAgICAgICAjIHJlcGxpY2F0ZSB0aGUgJ3VzZXInIGJpdHMuCisgICAgICAgICAgICB1c2VyID0gZXhwZWN0ZWQgPj4gNgorICAgICAgICAgICAgZXhwZWN0ZWQgPSB1c2VyICogKDEgKyA4ICsgNjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9ub2luaGVyaXQoc2VsZik6CisgICAgICAgICMgX21rc3RlbXBfaW5uZXIgZmlsZSBoYW5kbGVzIGFyZSBub3QgaW5oZXJpdGVkIGJ5IGNoaWxkIHByb2Nlc3NlcworICAgICAgICBpZiBub3QgaGFzX3NwYXdubDoKKyAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICMgdWdoLCBjYW4ndCB1c2UgU2tpcFRlc3QuCisKKyAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgdj0idiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHY9InEiCisKKyAgICAgICAgZmlsZSA9IHNlbGYuZG9fY3JlYXRlKCkKKyAgICAgICAgZmQgPSAiJWQiICUgZmlsZS5mZAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1lID0gX19maWxlX18KKyAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICAgIG1lID0gc3lzLmFyZ3ZbMF0KKworICAgICAgICAjIFdlIGhhdmUgdG8gZXhlYyBzb21ldGhpbmcsIHNvIHRoYXQgRkRfQ0xPRVhFQyB3aWxsIHRha2UKKyAgICAgICAgIyBlZmZlY3QuICBUaGUgY29yZSBvZiB0aGlzIHRlc3QgaXMgdGhlcmVmb3JlIGluCisgICAgICAgICMgdGZfaW5oZXJpdF9jaGVjay5weSwgd2hpY2ggc2VlLgorICAgICAgICB0ZXN0ZXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChtZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRmX2luaGVyaXRfY2hlY2sucHkiKQorCisgICAgICAgICMgT24gV2luZG93cyBhIHNwYXduKiAvcGF0aC8gd2l0aCBlbWJlZGRlZCBzcGFjZXMgc2hvdWxkbid0IGJlIHF1b3RlZCwKKyAgICAgICAgIyBidXQgYW4gYXJnIHdpdGggZW1iZWRkZWQgc3BhY2VzIHNob3VsZCBiZSBkZWNvcmF0ZWQgd2l0aCBkb3VibGUKKyAgICAgICAgIyBxdW90ZXMgb24gZWFjaCBlbmQKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCk6CisgICAgICAgICAgICBkZWNvcmF0ZWQgPSAnIiVzIicgJSBzeXMuZXhlY3V0YWJsZQorICAgICAgICAgICAgdGVzdGVyID0gJyIlcyInICUgdGVzdGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWNvcmF0ZWQgPSBzeXMuZXhlY3V0YWJsZQorCisgICAgICAgIHJldHZhbCA9IG9zLnNwYXdubChvcy5QX1dBSVQsIHN5cy5leGVjdXRhYmxlLCBkZWNvcmF0ZWQsIHRlc3RlciwgdiwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmV0dmFsIDwgMCwKKyAgICAgICAgICAgICAgICAgICAgImNoaWxkIHByb2Nlc3MgY2F1Z2h0IGZhdGFsIHNpZ25hbCAlZCIgJSAtcmV0dmFsKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJldHZhbCA+IDAsICJjaGlsZCBwcm9jZXNzIHJlcG9ydHMgZmFpbHVyZSAlZCIlcmV0dmFsKQorCisgICAgZGVmIHRlc3RfdGV4dG1vZGUoc2VsZik6CisgICAgICAgICMgX21rc3RlbXBfaW5uZXIgY2FuIGNyZWF0ZSBmaWxlcyBpbiB0ZXh0IG1vZGUKKyAgICAgICAgaWYgbm90IGhhc190ZXh0bW9kZToKKyAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICMgdWdoLCBjYW4ndCB1c2UgU2tpcFRlc3QuCisKKyAgICAgICAgc2VsZi5kb19jcmVhdGUoYmluPTApLndyaXRlKCJibGF0XG4iKQorICAgICAgICAjIFhYWCBzaG91bGQgdGVzdCB0aGF0IHRoZSBmaWxlIHJlYWxseSBpcyBhIHRleHQgZmlsZQorCit0ZXN0X2NsYXNzZXMuYXBwZW5kKHRlc3RfX21rc3RlbXBfaW5uZXIpCisKKworY2xhc3MgdGVzdF9nZXR0ZW1wcHJlZml4KFRDKToKKyAgICAiIiJUZXN0IGdldHRlbXBwcmVmaXgoKS4iIiIKKworICAgIGRlZiB0ZXN0X3NhbmVfdGVtcGxhdGUoc2VsZik6CisgICAgICAgICMgZ2V0dGVtcHByZWZpeCByZXR1cm5zIGEgbm9uZW1wdHkgcHJlZml4IHN0cmluZworICAgICAgICBwID0gdGVtcGZpbGUuZ2V0dGVtcHByZWZpeCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHAsIGJhc2VzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ocCkgPiAwKQorCisgICAgZGVmIHRlc3RfdXNhYmxlX3RlbXBsYXRlKHNlbGYpOgorICAgICAgICAjIGdldHRlbXBwcmVmaXggcmV0dXJucyBhIHVzYWJsZSBwcmVmaXggc3RyaW5nCisKKyAgICAgICAgIyBDcmVhdGUgYSB0ZW1wIGRpcmVjdG9yeSwgYXZvaWRpbmcgdXNlIG9mIHRoZSBwcmVmaXguCisgICAgICAgICMgVGhlbiBhdHRlbXB0IHRvIGNyZWF0ZSBhIGZpbGUgd2hvc2UgbmFtZSBpcworICAgICAgICAjIHByZWZpeCArICd4eHh4eHgueHh4JyBpbiB0aGF0IGRpcmVjdG9yeS4KKyAgICAgICAgcCA9IHRlbXBmaWxlLmdldHRlbXBwcmVmaXgoKSArICJ4eHh4eHgueHh4IgorICAgICAgICBkID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9IiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSBvcy5wYXRoLmpvaW4oZCwgcCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZCA9IG9zLm9wZW4ocCwgb3MuT19SRFdSIHwgb3MuT19DUkVBVCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxPbkV4Y2VwdGlvbigib3Mub3BlbiIpCisgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgICAgIG9zLnVubGluayhwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3Mucm1kaXIoZCkKKwordGVzdF9jbGFzc2VzLmFwcGVuZCh0ZXN0X2dldHRlbXBwcmVmaXgpCisKKworY2xhc3MgdGVzdF9nZXR0ZW1wZGlyKFRDKToKKyAgICAiIiJUZXN0IGdldHRlbXBkaXIoKS4iIiIKKworICAgIGRlZiB0ZXN0X2RpcmVjdG9yeV9leGlzdHMoc2VsZik6CisgICAgICAgICMgZ2V0dGVtcGRpciByZXR1cm5zIGEgZGlyZWN0b3J5IHdoaWNoIGV4aXN0cworCisgICAgICAgIGRpciA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2FicyhkaXIpIG9yIGRpciA9PSBvcy5jdXJkaXIsCisgICAgICAgICAgICAgICAgICAgICAiJXMgaXMgbm90IGFuIGFic29sdXRlIHBhdGgiICUgZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2RpcihkaXIpLAorICAgICAgICAgICAgICAgICAgICAgIiVzIGlzIG5vdCBhIGRpcmVjdG9yeSIgJSBkaXIpCisKKyAgICBkZWYgdGVzdF9kaXJlY3Rvcnlfd3JpdGFibGUoc2VsZik6CisgICAgICAgICMgZ2V0dGVtcGRpciByZXR1cm5zIGEgZGlyZWN0b3J5IHdyaXRhYmxlIGJ5IHRoZSB1c2VyCisKKyAgICAgICAgIyBzbmVha3k6IGp1c3QgaW5zdGFudGlhdGUgYSBOYW1lZFRlbXBvcmFyeUZpbGUsIHdoaWNoCisgICAgICAgICMgZGVmYXVsdHMgdG8gd3JpdGluZyBpbnRvIHRoZSBkaXJlY3RvcnkgcmV0dXJuZWQgYnkKKyAgICAgICAgIyBnZXR0ZW1wZGlyLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgICAgIGZpbGUud3JpdGUoImJsYXQiKQorICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbE9uRXhjZXB0aW9uKCJjcmVhdGUgZmlsZSBpbiAlcyIgJSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkpCisKKyAgICBkZWYgdGVzdF9zYW1lX3RoaW5nKHNlbGYpOgorICAgICAgICAjIGdldHRlbXBkaXIgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0CisgICAgICAgIGEgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKKyAgICAgICAgYiA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCisKK3Rlc3RfY2xhc3Nlcy5hcHBlbmQodGVzdF9nZXR0ZW1wZGlyKQorCisKK2NsYXNzIHRlc3RfbWtzdGVtcChUQyk6CisgICAgIiIiVGVzdCBta3N0ZW1wKCkuIiIiCisKKyAgICBkZWYgZG9fY3JlYXRlKHNlbGYsIGRpcj1Ob25lLCBwcmU9IiIsIHN1Zj0iIik6CisgICAgICAgIGlmIGRpciBpcyBOb25lOgorICAgICAgICAgICAgZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIChmZCwgbmFtZSkgPSB0ZW1wZmlsZS5ta3N0ZW1wKGRpcj1kaXIsIHByZWZpeD1wcmUsIHN1ZmZpeD1zdWYpCisgICAgICAgICAgICAobmRpciwgbmJhc2UpID0gb3MucGF0aC5zcGxpdChuYW1lKQorICAgICAgICAgICAgYWRpciA9IG9zLnBhdGguYWJzcGF0aChkaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkaXIsIG5kaXIsCisgICAgICAgICAgICAgICAgIkRpcmVjdG9yeSAnJXMnIGluY29ycmVjdGx5IHJldHVybmVkIGFzICclcyciICUgKGFkaXIsIG5kaXIpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWxPbkV4Y2VwdGlvbigibWtzdGVtcCIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5uYW1lQ2hlY2sobmFtZSwgZGlyLCBwcmUsIHN1ZikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBta3N0ZW1wIGNhbiBjcmVhdGUgZmlsZXMKKyAgICAgICAgc2VsZi5kb19jcmVhdGUoKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShwcmU9ImEiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShzdWY9ImIiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShwcmU9ImEiLCBzdWY9ImIiKQorICAgICAgICBzZWxmLmRvX2NyZWF0ZShwcmU9ImFhIiwgc3VmPSIudHh0IikKKyAgICAgICAgc2VsZi5kb19jcmVhdGUoZGlyPSIuIikKKworICAgIGRlZiB0ZXN0X2Nob29zZV9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgICMgbWtzdGVtcCBjYW4gY3JlYXRlIGRpcmVjdG9yaWVzIGluIGEgdXNlci1zZWxlY3RlZCBkaXJlY3RvcnkKKyAgICAgICAgZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZG9fY3JlYXRlKGRpcj1kaXIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5ybWRpcihkaXIpCisKK3Rlc3RfY2xhc3Nlcy5hcHBlbmQodGVzdF9ta3N0ZW1wKQorCisKK2NsYXNzIHRlc3RfbWtkdGVtcChUQyk6CisgICAgIiIiVGVzdCBta2R0ZW1wKCkuIiIiCisKKyAgICBkZWYgZG9fY3JlYXRlKHNlbGYsIGRpcj1Ob25lLCBwcmU9IiIsIHN1Zj0iIik6CisgICAgICAgIGlmIGRpciBpcyBOb25lOgorICAgICAgICAgICAgZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWUgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj1kaXIsIHByZWZpeD1wcmUsIHN1ZmZpeD1zdWYpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbE9uRXhjZXB0aW9uKCJta2R0ZW1wIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLm5hbWVDaGVjayhuYW1lLCBkaXIsIHByZSwgc3VmKQorICAgICAgICAgICAgcmV0dXJuIG5hbWUKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgb3Mucm1kaXIobmFtZSkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBta2R0ZW1wIGNhbiBjcmVhdGUgZGlyZWN0b3JpZXMKKyAgICAgICAgb3Mucm1kaXIoc2VsZi5kb19jcmVhdGUoKSkKKyAgICAgICAgb3Mucm1kaXIoc2VsZi5kb19jcmVhdGUocHJlPSJhIikpCisgICAgICAgIG9zLnJtZGlyKHNlbGYuZG9fY3JlYXRlKHN1Zj0iYiIpKQorICAgICAgICBvcy5ybWRpcihzZWxmLmRvX2NyZWF0ZShwcmU9ImEiLCBzdWY9ImIiKSkKKyAgICAgICAgb3Mucm1kaXIoc2VsZi5kb19jcmVhdGUocHJlPSJhYSIsIHN1Zj0iLnR4dCIpKQorCisgICAgZGVmIHRlc3RfYmFzaWNfbWFueShzZWxmKToKKyAgICAgICAgIyBta2R0ZW1wIGNhbiBjcmVhdGUgbWFueSBkaXJlY3RvcmllcyAoc3RvY2hhc3RpYykKKyAgICAgICAgZXh0YW50ID0gcmFuZ2UoVEVTVF9GSUxFUykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGkgaW4gZXh0YW50OgorICAgICAgICAgICAgICAgIGV4dGFudFtpXSA9IHNlbGYuZG9fY3JlYXRlKHByZT0iYWEiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIGkgaW4gZXh0YW50OgorICAgICAgICAgICAgICAgIGlmKGlzaW5zdGFuY2UoaSwgYmFzZXN0cmluZykpOgorICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihpKQorCisgICAgZGVmIHRlc3RfY2hvb3NlX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgIyBta2R0ZW1wIGNhbiBjcmVhdGUgZGlyZWN0b3JpZXMgaW4gYSB1c2VyLXNlbGVjdGVkIGRpcmVjdG9yeQorICAgICAgICBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Mucm1kaXIoc2VsZi5kb19jcmVhdGUoZGlyPWRpcikpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5ybWRpcihkaXIpCisKKyAgICBkZWYgdGVzdF9tb2RlKHNlbGYpOgorICAgICAgICAjIG1rZHRlbXAgY3JlYXRlcyBkaXJlY3RvcmllcyB3aXRoIHRoZSBwcm9wZXIgbW9kZQorICAgICAgICBpZiBub3QgaGFzX3N0YXQ6CisgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAjIHVnaCwgY2FuJ3QgdXNlIFNraXBUZXN0LgorCisgICAgICAgIGRpciA9IHNlbGYuZG9fY3JlYXRlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kZSA9IHN0YXQuU19JTU9ERShvcy5zdGF0KGRpcikuc3RfbW9kZSkKKyAgICAgICAgICAgIG1vZGUgJj0gMDc3NyAjIE1hc2sgb2ZmIHN0aWNreSBiaXRzIGluaGVyaXRlZCBmcm9tIC90bXAKKyAgICAgICAgICAgIGV4cGVjdGVkID0gMDcwMAorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCAnb3MyZW14Jyk6CisgICAgICAgICAgICAgICAgIyBUaGVyZSdzIG5vIGRpc3RpbmN0aW9uIGFtb25nICd1c2VyJywgJ2dyb3VwJyBhbmQgJ3dvcmxkJzsKKyAgICAgICAgICAgICAgICAjIHJlcGxpY2F0ZSB0aGUgJ3VzZXInIGJpdHMuCisgICAgICAgICAgICAgICAgdXNlciA9IGV4cGVjdGVkID4+IDYKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHVzZXIgKiAoMSArIDggKyA2NCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZSwgZXhwZWN0ZWQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5ybWRpcihkaXIpCisKK3Rlc3RfY2xhc3Nlcy5hcHBlbmQodGVzdF9ta2R0ZW1wKQorCisKK2NsYXNzIHRlc3RfbWt0ZW1wKFRDKToKKyAgICAiIiJUZXN0IG1rdGVtcCgpLiIiIgorCisgICAgIyBGb3Igc2FmZXR5LCBhbGwgdXNlIG9mIG1rdGVtcCBtdXN0IG9jY3VyIGluIGEgcHJpdmF0ZSBkaXJlY3RvcnkuCisgICAgIyBXZSBtdXN0IGFsc28gc3VwcHJlc3MgdGhlIFJ1bnRpbWVXYXJuaW5nIGl0IGdlbmVyYXRlcy4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGlyOgorICAgICAgICAgICAgb3Mucm1kaXIoc2VsZi5kaXIpCisgICAgICAgICAgICBzZWxmLmRpciA9IE5vbmUKKworICAgIGNsYXNzIG1rdGVtcGVkOgorICAgICAgICBfdW5saW5rID0gb3MudW5saW5rCisgICAgICAgIF9iZmxhZ3MgPSB0ZW1wZmlsZS5fYmluX29wZW5mbGFncworCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXIsIHByZSwgc3VmKToKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IHRlbXBmaWxlLm1rdGVtcChkaXI9ZGlyLCBwcmVmaXg9cHJlLCBzdWZmaXg9c3VmKQorICAgICAgICAgICAgIyBDcmVhdGUgdGhlIGZpbGUuICBUaGlzIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0J3MKKyAgICAgICAgICAgICMgbXlzdGVyaW91c2x5IGFwcGVhcmVkIGluIHRoZSBtZWFud2hpbGUuCisgICAgICAgICAgICBvcy5jbG9zZShvcy5vcGVuKHNlbGYubmFtZSwgc2VsZi5fYmZsYWdzLCAwNjAwKSkKKworICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX3VubGluayhzZWxmLm5hbWUpCisKKyAgICBkZWYgZG9fY3JlYXRlKHNlbGYsIHByZT0iIiwgc3VmPSIiKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZSA9IHNlbGYubWt0ZW1wZWQoc2VsZi5kaXIsIHByZSwgc3VmKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWxPbkV4Y2VwdGlvbigibWt0ZW1wIikKKworICAgICAgICBzZWxmLm5hbWVDaGVjayhmaWxlLm5hbWUsIHNlbGYuZGlyLCBwcmUsIHN1ZikKKyAgICAgICAgcmV0dXJuIGZpbGUKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICAjIG1rdGVtcCBjYW4gY2hvb3NlIHVzYWJsZSBmaWxlIG5hbWVzCisgICAgICAgIHNlbGYuZG9fY3JlYXRlKCkKKyAgICAgICAgc2VsZi5kb19jcmVhdGUocHJlPSJhIikKKyAgICAgICAgc2VsZi5kb19jcmVhdGUoc3VmPSJiIikKKyAgICAgICAgc2VsZi5kb19jcmVhdGUocHJlPSJhIiwgc3VmPSJiIikKKyAgICAgICAgc2VsZi5kb19jcmVhdGUocHJlPSJhYSIsIHN1Zj0iLnR4dCIpCisKKyAgICBkZWYgdGVzdF9tYW55KHNlbGYpOgorICAgICAgICAjIG1rdGVtcCBjYW4gY2hvb3NlIG1hbnkgdXNhYmxlIGZpbGUgbmFtZXMgKHN0b2NoYXN0aWMpCisgICAgICAgIGV4dGFudCA9IHJhbmdlKFRFU1RfRklMRVMpCisgICAgICAgIGZvciBpIGluIGV4dGFudDoKKyAgICAgICAgICAgIGV4dGFudFtpXSA9IHNlbGYuZG9fY3JlYXRlKHByZT0iYWEiKQorCisjIyAgICAgZGVmIHRlc3Rfd2FybmluZyhzZWxmKToKKyMjICAgICAgICAgIyBta3RlbXAgaXNzdWVzIGEgd2FybmluZyB3aGVuIHVzZWQKKyMjICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImVycm9yIiwKKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9UnVudGltZVdhcm5pbmcsCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9Im1rdGVtcCIpCisjIyAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVXYXJuaW5nLAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wZmlsZS5ta3RlbXAsIGRpcj1zZWxmLmRpcikKKwordGVzdF9jbGFzc2VzLmFwcGVuZCh0ZXN0X21rdGVtcCkKKworCisjIFdlIHRlc3QgX1RlbXBvcmFyeUZpbGVXcmFwcGVyIGJ5IHRlc3RpbmcgTmFtZWRUZW1wb3JhcnlGaWxlLgorCisKK2NsYXNzIHRlc3RfTmFtZWRUZW1wb3JhcnlGaWxlKFRDKToKKyAgICAiIiJUZXN0IE5hbWVkVGVtcG9yYXJ5RmlsZSgpLiIiIgorCisgICAgZGVmIGRvX2NyZWF0ZShzZWxmLCBkaXI9Tm9uZSwgcHJlPSIiLCBzdWY9IiIsIGRlbGV0ZT1UcnVlKToKKyAgICAgICAgaWYgZGlyIGlzIE5vbmU6CisgICAgICAgICAgICBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkaXI9ZGlyLCBwcmVmaXg9cHJlLCBzdWZmaXg9c3VmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGU9ZGVsZXRlKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWxPbkV4Y2VwdGlvbigiTmFtZWRUZW1wb3JhcnlGaWxlIikKKworICAgICAgICBzZWxmLm5hbWVDaGVjayhmaWxlLm5hbWUsIGRpciwgcHJlLCBzdWYpCisgICAgICAgIHJldHVybiBmaWxlCisKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICAjIE5hbWVkVGVtcG9yYXJ5RmlsZSBjYW4gY3JlYXRlIGZpbGVzCisgICAgICAgIHNlbGYuZG9fY3JlYXRlKCkKKyAgICAgICAgc2VsZi5kb19jcmVhdGUocHJlPSJhIikKKyAgICAgICAgc2VsZi5kb19jcmVhdGUoc3VmPSJiIikKKyAgICAgICAgc2VsZi5kb19jcmVhdGUocHJlPSJhIiwgc3VmPSJiIikKKyAgICAgICAgc2VsZi5kb19jcmVhdGUocHJlPSJhYSIsIHN1Zj0iLnR4dCIpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVzX25hbWVkKHNlbGYpOgorICAgICAgICAjIE5hbWVkVGVtcG9yYXJ5RmlsZSBjcmVhdGVzIGZpbGVzIHdpdGggbmFtZXMKKyAgICAgICAgZiA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmLm5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIk5hbWVkVGVtcG9yYXJ5RmlsZSAlcyBkb2VzIG5vdCBleGlzdCIgJSBmLm5hbWUpCisKKyAgICBkZWYgdGVzdF9kZWxfb25fY2xvc2Uoc2VsZik6CisgICAgICAgICMgQSBOYW1lZFRlbXBvcmFyeUZpbGUgaXMgZGVsZXRlZCB3aGVuIGNsb3NlZAorICAgICAgICBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkaXI9ZGlyKQorICAgICAgICAgICAgZi53cml0ZSgnYmxhdCcpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoZi5uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJOYW1lZFRlbXBvcmFyeUZpbGUgJXMgZXhpc3RzIGFmdGVyIGNsb3NlIiAlIGYubmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJtZGlyKGRpcikKKworICAgIGRlZiB0ZXN0X2Rpc19kZWxfb25fY2xvc2Uoc2VsZik6CisgICAgICAgICMgVGVzdHMgdGhhdCBkZWxldGUtb24tY2xvc2UgY2FuIGJlIGRpc2FibGVkCisgICAgICAgIGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICB0bXAgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGlyPWRpciwgZGVsZXRlPUZhbHNlKQorICAgICAgICAgICAgdG1wID0gZi5uYW1lCisgICAgICAgICAgICBmLndyaXRlKCdibGF0JykKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGYubmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAiTmFtZWRUZW1wb3JhcnlGaWxlICVzIG1pc3NpbmcgYWZ0ZXIgY2xvc2UiICUgZi5uYW1lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgdG1wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG9zLnVubGluayh0bXApCisgICAgICAgICAgICBvcy5ybWRpcihkaXIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9jbG9zZShzZWxmKToKKyAgICAgICAgIyBBIE5hbWVkVGVtcG9yYXJ5RmlsZSBjYW4gYmUgY2xvc2VkIG1hbnkgdGltZXMgd2l0aG91dCBlcnJvcgorICAgICAgICBmID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgZi53cml0ZSgnYWJjXG4nKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsT25FeGNlcHRpb24oImNsb3NlIikKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgIyBBIE5hbWVkVGVtcG9yYXJ5RmlsZSBjYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlcgorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZi5uYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmLm5hbWUpKQorICAgICAgICBkZWYgdXNlX2Nsb3NlZCgpOgorICAgICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdXNlX2Nsb3NlZCkKKworICAgICMgSG93IHRvIHRlc3QgdGhlIG1vZGUgYW5kIGJ1ZnNpemUgcGFyYW1ldGVycz8KKwordGVzdF9jbGFzc2VzLmFwcGVuZCh0ZXN0X05hbWVkVGVtcG9yYXJ5RmlsZSkKKworY2xhc3MgdGVzdF9TcG9vbGVkVGVtcG9yYXJ5RmlsZShUQyk6CisgICAgIiIiVGVzdCBTcG9vbGVkVGVtcG9yYXJ5RmlsZSgpLiIiIgorCisgICAgZGVmIGRvX2NyZWF0ZShzZWxmLCBtYXhfc2l6ZT0wLCBkaXI9Tm9uZSwgcHJlPSIiLCBzdWY9IiIpOgorICAgICAgICBpZiBkaXIgaXMgTm9uZToKKyAgICAgICAgICAgIGRpciA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWxlID0gdGVtcGZpbGUuU3Bvb2xlZFRlbXBvcmFyeUZpbGUobWF4X3NpemU9bWF4X3NpemUsIGRpcj1kaXIsIHByZWZpeD1wcmUsIHN1ZmZpeD1zdWYpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbE9uRXhjZXB0aW9uKCJTcG9vbGVkVGVtcG9yYXJ5RmlsZSIpCisKKyAgICAgICAgcmV0dXJuIGZpbGUKKworCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgY2FuIGNyZWF0ZSBmaWxlcworICAgICAgICBmID0gc2VsZi5kb19jcmVhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKKyAgICAgICAgZiA9IHNlbGYuZG9fY3JlYXRlKG1heF9zaXplPTEwMCwgcHJlPSJhIiwgc3VmPSIudHh0IikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCisKKyAgICBkZWYgdGVzdF9kZWxfb25fY2xvc2Uoc2VsZik6CisgICAgICAgICMgQSBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBpcyBkZWxldGVkIHdoZW4gY2xvc2VkCisgICAgICAgIGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gdGVtcGZpbGUuU3Bvb2xlZFRlbXBvcmFyeUZpbGUobWF4X3NpemU9MTAsIGRpcj1kaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKKyAgICAgICAgICAgIGYud3JpdGUoJ2JsYXQgJyAqIDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fcm9sbGVkKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBmLm5hbWUKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAiU3Bvb2xlZFRlbXBvcmFyeUZpbGUgJXMgZXhpc3RzIGFmdGVyIGNsb3NlIiAlIGZpbGVuYW1lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3Mucm1kaXIoZGlyKQorCisgICAgZGVmIHRlc3RfcmV3cml0ZV9zbWFsbChzZWxmKToKKyAgICAgICAgIyBBIFNwb29sZWRUZW1wb3JhcnlGaWxlIGNhbiBiZSB3cml0dGVuIHRvIG11bHRpcGxlIHdpdGhpbiB0aGUgbWF4X3NpemUKKyAgICAgICAgZiA9IHNlbGYuZG9fY3JlYXRlKG1heF9zaXplPTMwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICBmLnNlZWsoMCwgMCkKKyAgICAgICAgICAgIGYud3JpdGUoJ3gnICogMjApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfc2VxdWVudGlhbChzZWxmKToKKyAgICAgICAgIyBBIFNwb29sZWRUZW1wb3JhcnlGaWxlIHNob3VsZCBob2xkIGV4YWN0bHkgbWF4X3NpemUgYnl0ZXMsIGFuZCByb2xsCisgICAgICAgICMgb3ZlciBhZnRlcndhcmQKKyAgICAgICAgZiA9IHNlbGYuZG9fY3JlYXRlKG1heF9zaXplPTMwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKKyAgICAgICAgZi53cml0ZSgneCcgKiAyMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCisgICAgICAgIGYud3JpdGUoJ3gnICogMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQorICAgICAgICBmLndyaXRlKCd4JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX3JvbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlbGluZXMoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHdyaXRlbGluZXMgd2l0aCBhIFNwb29sZWRUZW1wb3JhcnlGaWxlCisgICAgICAgIGYgPSBzZWxmLmRvX2NyZWF0ZSgpCisgICAgICAgIGYud3JpdGVsaW5lcygoYid4JywgYid5JywgYid6JykpCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBidWYgPSBmLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZiwgYid4eXonKQorCisgICAgZGVmIHRlc3Rfd3JpdGVsaW5lc19zZXF1ZW50aWFsKHNlbGYpOgorICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgc2hvdWxkIGhvbGQgZXhhY3RseSBtYXhfc2l6ZSBieXRlcywgYW5kIHJvbGwKKyAgICAgICAgIyBvdmVyIGFmdGVyd2FyZAorICAgICAgICBmID0gc2VsZi5kb19jcmVhdGUobWF4X3NpemU9MzUpCisgICAgICAgIGYud3JpdGVsaW5lcygoYid4JyAqIDIwLCBiJ3gnICogMTAsIGIneCcgKiA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCisgICAgICAgIGYud3JpdGUoYid4JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX3JvbGxlZCkKKworICAgIGRlZiB0ZXN0X3hyZWFkbGluZXMoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmRvX2NyZWF0ZShtYXhfc2l6ZT0yMCkKKyAgICAgICAgZi53cml0ZShiJ2FiY1xuJyAqIDUpCisgICAgICAgIGYuc2VlaygwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGYueHJlYWRsaW5lcygpKSwgW2InYWJjXG4nXSAqIDUpCisgICAgICAgIGYud3JpdGUoYid4XG55JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX3JvbGxlZCkKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChmLnhyZWFkbGluZXMoKSksIFtiJ2FiY1xuJ10gKiA1ICsgW2IneFxuJywgYid5J10pCisKKyAgICBkZWYgdGVzdF9zcGFyc2Uoc2VsZik6CisgICAgICAgICMgQSBTcG9vbGVkVGVtcG9yYXJ5RmlsZSB0aGF0IGlzIHdyaXR0ZW4gbGF0ZSBpbiB0aGUgZmlsZSB3aWxsIGV4dGVuZAorICAgICAgICAjIHdoZW4gdGhhdCBvY2N1cnMKKyAgICAgICAgZiA9IHNlbGYuZG9fY3JlYXRlKG1heF9zaXplPTMwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKKyAgICAgICAgZi5zZWVrKDEwMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCisgICAgICAgIGYud3JpdGUoJ3gnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fcm9sbGVkKQorCisgICAgZGVmIHRlc3RfZmlsZW5vKHNlbGYpOgorICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgc2hvdWxkIHJvbGwgb3ZlciB0byBhIHJlYWwgZmlsZSBvbiBmaWxlbm8oKQorICAgICAgICBmID0gc2VsZi5kb19jcmVhdGUobWF4X3NpemU9MzApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5maWxlbm8oKSA+IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9yb2xsZWQpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9jbG9zZV9iZWZvcmVfcm9sbG92ZXIoc2VsZik6CisgICAgICAgICMgQSBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBjYW4gYmUgY2xvc2VkIG1hbnkgdGltZXMgd2l0aG91dCBlcnJvcgorICAgICAgICBmID0gdGVtcGZpbGUuU3Bvb2xlZFRlbXBvcmFyeUZpbGUoKQorICAgICAgICBmLndyaXRlKCdhYmNcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsT25FeGNlcHRpb24oImNsb3NlIikKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2Nsb3NlX2FmdGVyX3JvbGxvdmVyKHNlbGYpOgorICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgY2FuIGJlIGNsb3NlZCBtYW55IHRpbWVzIHdpdGhvdXQgZXJyb3IKKyAgICAgICAgZiA9IHRlbXBmaWxlLlNwb29sZWRUZW1wb3JhcnlGaWxlKG1heF9zaXplPTEpCisgICAgICAgIGYud3JpdGUoJ2FiY1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX3JvbGxlZCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbE9uRXhjZXB0aW9uKCJjbG9zZSIpCisKKyAgICBkZWYgdGVzdF9ib3VuZF9tZXRob2RzKHNlbGYpOgorICAgICAgICAjIEl0IHNob3VsZCBiZSBPSyB0byBzdGVhbCBhIGJvdW5kIG1ldGhvZCBmcm9tIGEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUKKyAgICAgICAgIyBhbmQgdXNlIGl0IGluZGVwZW5kZW50bHk7IHdoZW4gdGhlIGZpbGUgcm9sbHMgb3ZlciwgdGhvc2UgYm91bmQKKyAgICAgICAgIyBtZXRob2RzIHNob3VsZCBjb250aW51ZSB0byBmdW5jdGlvbgorICAgICAgICBmID0gc2VsZi5kb19jcmVhdGUobWF4X3NpemU9MzApCisgICAgICAgIHJlYWQgPSBmLnJlYWQKKyAgICAgICAgd3JpdGUgPSBmLndyaXRlCisgICAgICAgIHNlZWsgPSBmLnNlZWsKKworICAgICAgICB3cml0ZSgiYSIgKiAzNSkKKyAgICAgICAgd3JpdGUoImIiICogMzUpCisgICAgICAgIHNlZWsoMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlYWQoNzApID09ICdhJyozNSArICdiJyozNSkKKworICAgIGRlZiB0ZXN0X3Byb3BlcnRpZXMoc2VsZik6CisgICAgICAgIGYgPSB0ZW1wZmlsZS5TcG9vbGVkVGVtcG9yYXJ5RmlsZShtYXhfc2l6ZT0xMCkKKyAgICAgICAgZi53cml0ZShiJ3gnICogMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fcm9sbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubW9kZSwgJ3crYicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYubmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBmLm5ld2xpbmVzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZi5lbmNvZGluZworCisgICAgICAgIGYud3JpdGUoYid4JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX3JvbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm1vZGUsICd3K2InKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShmLm5hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZi5uZXdsaW5lcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGYuZW5jb2RpbmcKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl9iZWZvcmVfcm9sbG92ZXIoc2VsZik6CisgICAgICAgICMgQSBTcG9vbGVkVGVtcG9yYXJ5RmlsZSBjYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlcgorICAgICAgICB3aXRoIHRlbXBmaWxlLlNwb29sZWRUZW1wb3JhcnlGaWxlKG1heF9zaXplPTEpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX3JvbGxlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKKyAgICAgICAgZGVmIHVzZV9jbG9zZWQoKToKKyAgICAgICAgICAgIHdpdGggZjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHVzZV9jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfZHVyaW5nX3JvbGxvdmVyKHNlbGYpOgorICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgY2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5TcG9vbGVkVGVtcG9yYXJ5RmlsZShtYXhfc2l6ZT0xKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9yb2xsZWQpCisgICAgICAgICAgICBmLndyaXRlKCdhYmNcbicpCisgICAgICAgICAgICBmLmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9yb2xsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCisgICAgICAgIGRlZiB1c2VfY2xvc2VkKCk6CisgICAgICAgICAgICB3aXRoIGY6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1c2VfY2xvc2VkKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX2FmdGVyX3JvbGxvdmVyKHNlbGYpOgorICAgICAgICAjIEEgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgY2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIKKyAgICAgICAgZiA9IHRlbXBmaWxlLlNwb29sZWRUZW1wb3JhcnlGaWxlKG1heF9zaXplPTEpCisgICAgICAgIGYud3JpdGUoJ2FiY1xuJykKKyAgICAgICAgZi5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9yb2xsZWQpCisgICAgICAgIHdpdGggZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKKyAgICAgICAgZGVmIHVzZV9jbG9zZWQoKToKKyAgICAgICAgICAgIHdpdGggZjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHVzZV9jbG9zZWQpCisKKwordGVzdF9jbGFzc2VzLmFwcGVuZCh0ZXN0X1Nwb29sZWRUZW1wb3JhcnlGaWxlKQorCisKK2NsYXNzIHRlc3RfVGVtcG9yYXJ5RmlsZShUQyk6CisgICAgIiIiVGVzdCBUZW1wb3JhcnlGaWxlKCkuIiIiCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBUZW1wb3JhcnlGaWxlIGNhbiBjcmVhdGUgZmlsZXMKKyAgICAgICAgIyBObyBwb2ludCBpbiB0ZXN0aW5nIHRoZSBuYW1lIHBhcmFtcyAtIHRoZSBmaWxlIGhhcyBubyBuYW1lLgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsT25FeGNlcHRpb24oIlRlbXBvcmFyeUZpbGUiKQorCisgICAgZGVmIHRlc3RfaGFzX25vX25hbWUoc2VsZik6CisgICAgICAgICMgVGVtcG9yYXJ5RmlsZSBjcmVhdGVzIGZpbGVzIHdpdGggbm8gbmFtZXMgKG9uIHRoaXMgc3lzdGVtKQorICAgICAgICBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoZGlyPWRpcikKKyAgICAgICAgZi53cml0ZSgnYmxhdCcpCisKKyAgICAgICAgIyBTbmVha3k6IGJlY2F1c2UgdGhpcyBmaWxlIGhhcyBubyBuYW1lLCBpdCBzaG91bGQgbm90IHByZXZlbnQKKyAgICAgICAgIyB1cyBmcm9tIHJlbW92aW5nIHRoZSBkaXJlY3RvcnkgaXQgd2FzIGNyZWF0ZWQgaW4uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJtZGlyKGRpcikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZWkgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgIyBjbGVhbnVwCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJtZGlyKGRpcikKKyAgICAgICAgICAgIHNlbGYuZmFpbE9uRXhjZXB0aW9uKCJybWRpciIsIGVpKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfY2xvc2Uoc2VsZik6CisgICAgICAgICMgQSBUZW1wb3JhcnlGaWxlIGNhbiBiZSBjbG9zZWQgbWFueSB0aW1lcyB3aXRob3V0IGVycm9yCisgICAgICAgIGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgZi53cml0ZSgnYWJjXG4nKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsT25FeGNlcHRpb24oImNsb3NlIikKKworICAgICMgSG93IHRvIHRlc3QgdGhlIG1vZGUgYW5kIGJ1ZnNpemUgcGFyYW1ldGVycz8KKworCitpZiB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUgaXMgbm90IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGU6CisgICAgdGVzdF9jbGFzc2VzLmFwcGVuZCh0ZXN0X1RlbXBvcmFyeUZpbGUpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90ZXh0d3JhcC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RleHR3cmFwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNzI2NzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90ZXh0d3JhcC5weQpAQCAtMCwwICsxLDY1OCBAQAorIworIyBUZXN0IHN1aXRlIGZvciB0aGUgdGV4dHdyYXAgbW9kdWxlLgorIworIyBPcmlnaW5hbCB0ZXN0cyB3cml0dGVuIGJ5IEdyZWcgV2FyZCA8Z3dhcmRAcHl0aG9uLm5ldD4uCisjIENvbnZlcnRlZCB0byBQeVVuaXQgYnkgUGV0ZXIgSGFuc2VuIDxwZXRlckBlbmdjb3JwLmNvbT4uCisjIEN1cnJlbnRseSBtYWludGFpbmVkIGJ5IEdyZWcgV2FyZC4KKyMKKyMgJElkJAorIworCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2Zyb20gdGV4dHdyYXAgaW1wb3J0IFRleHRXcmFwcGVyLCB3cmFwLCBmaWxsLCBkZWRlbnQKKworCitjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICcnJ1BhcmVudCBjbGFzcyB3aXRoIHV0aWxpdHkgbWV0aG9kcyBmb3IgdGV4dHdyYXAgdGVzdHMuJycnCisKKyAgICBkZWYgc2hvdyhzZWxmLCB0ZXh0aW4pOgorICAgICAgICBpZiBpc2luc3RhbmNlKHRleHRpbiwgbGlzdCk6CisgICAgICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHRleHRpbikpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIiAgJWQ6ICVyIiAlIChpLCB0ZXh0aW5baV0pKQorICAgICAgICAgICAgcmVzdWx0ID0gJ1xuJy5qb2luKHJlc3VsdCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHRleHRpbiwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICByZXN1bHQgPSAiICAlc1xuIiAlIHJlcHIodGV4dGluKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKworICAgIGRlZiBjaGVjayhzZWxmLCByZXN1bHQsIGV4cGVjdCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3QsCisgICAgICAgICAgICAnZXhwZWN0ZWQ6XG4lc1xuYnV0IGdvdDpcbiVzJyAlICgKKyAgICAgICAgICAgICAgICBzZWxmLnNob3coZXhwZWN0KSwgc2VsZi5zaG93KHJlc3VsdCkpKQorCisgICAgZGVmIGNoZWNrX3dyYXAoc2VsZiwgdGV4dCwgd2lkdGgsIGV4cGVjdCwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSB3cmFwKHRleHQsIHdpZHRoLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5jaGVjayhyZXN1bHQsIGV4cGVjdCkKKworICAgIGRlZiBjaGVja19zcGxpdChzZWxmLCB0ZXh0LCBleHBlY3QpOgorICAgICAgICByZXN1bHQgPSBzZWxmLndyYXBwZXIuX3NwbGl0KHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlxuZXhwZWN0ZWQgJXJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0IGdvdCAgJXIiICUgKGV4cGVjdCwgcmVzdWx0KSkKKworCitjbGFzcyBXcmFwVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi53cmFwcGVyID0gVGV4dFdyYXBwZXIod2lkdGg9NDUpCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgICMgU2ltcGxlIGNhc2U6IGp1c3Qgd29yZHMsIHNwYWNlcywgYW5kIGEgYml0IG9mIHB1bmN0dWF0aW9uCisKKyAgICAgICAgdGV4dCA9ICJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdGhpcyBmaW5lIGRheT8gIEknbSBnbGFkIHRvIGhlYXIgaXQhIgorCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG93IGFyZSB5b3UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGlzIGZpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJkYXk/ICBJJ20iLAorICAgICAgICAgICAgICAgICAgICAgICAgICJnbGFkIHRvIGhlYXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJpdCEiXSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDQyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdGhpcyBmaW5lIGRheT8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICJJJ20gZ2xhZCB0byBoZWFyIGl0ISJdKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgODAsIFt0ZXh0XSkKKworICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHdyYXBwaW5nIHRoZSBlbXB0eSBzdHJpbmcgcmV0dXJucyBhbiBlbXB0eSBsaXN0LgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoIiIsIDYsIFtdKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoIiIsIDYsIFtdLCBkcm9wX3doaXRlc3BhY2U9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmdfd2l0aF9pbml0aWFsX2luZGVudChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBlbXB0eSBzdHJpbmcgaXMgbm90IGluZGVudGVkLgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoIiIsIDYsIFtdLCBpbml0aWFsX2luZGVudD0iKysiKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoIiIsIDYsIFtdLCBpbml0aWFsX2luZGVudD0iKysiLCBkcm9wX3doaXRlc3BhY2U9RmFsc2UpCisKKyAgICBkZWYgdGVzdF93aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICAjIFdoaXRlc3BhY2UgbXVuZ2luZyBhbmQgZW5kLW9mLXNlbnRlbmNlIGRldGVjdGlvbgorCisgICAgICAgIHRleHQgPSAiIiJcCitUaGlzIGlzIGEgcGFyYWdyYXBoIHRoYXQgYWxyZWFkeSBoYXMKK2xpbmUgYnJlYWtzLiAgQnV0IHNvbWUgb2YgaXRzIGxpbmVzIGFyZSBtdWNoIGxvbmdlciB0aGFuIHRoZSBvdGhlcnMsCitzbyBpdCBuZWVkcyB0byBiZSB3cmFwcGVkLgorU29tZSBsaW5lcyBhcmUgXHR0YWJiZWQgdG9vLgorV2hhdCBhIG1lc3MhCisiIiIKKworICAgICAgICBleHBlY3QgPSBbIlRoaXMgaXMgYSBwYXJhZ3JhcGggdGhhdCBhbHJlYWR5IGhhcyBsaW5lIiwKKyAgICAgICAgICAgICAgICAgICJicmVha3MuICBCdXQgc29tZSBvZiBpdHMgbGluZXMgYXJlIG11Y2giLAorICAgICAgICAgICAgICAgICAgImxvbmdlciB0aGFuIHRoZSBvdGhlcnMsIHNvIGl0IG5lZWRzIHRvIGJlIiwKKyAgICAgICAgICAgICAgICAgICJ3cmFwcGVkLiAgU29tZSBsaW5lcyBhcmUgIHRhYmJlZCB0b28uICBXaGF0IGEiLAorICAgICAgICAgICAgICAgICAgIm1lc3MhIl0KKworICAgICAgICB3cmFwcGVyID0gVGV4dFdyYXBwZXIoNDUsIGZpeF9zZW50ZW5jZV9lbmRpbmdzPVRydWUpCisgICAgICAgIHJlc3VsdCA9IHdyYXBwZXIud3JhcCh0ZXh0KQorICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgZXhwZWN0KQorCisgICAgICAgIHJlc3VsdCA9IHdyYXBwZXIuZmlsbCh0ZXh0KQorICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgJ1xuJy5qb2luKGV4cGVjdCkpCisKKyAgICBkZWYgdGVzdF9maXhfc2VudGVuY2VfZW5kaW5ncyhzZWxmKToKKyAgICAgICAgd3JhcHBlciA9IFRleHRXcmFwcGVyKDYwLCBmaXhfc2VudGVuY2VfZW5kaW5ncz1UcnVlKQorCisgICAgICAgICMgU0YgIzg0NzM0NjogZW5zdXJlIHRoYXQgZml4X3NlbnRlbmNlX2VuZGluZ3M9VHJ1ZSBkb2VzIHRoZQorICAgICAgICAjIHJpZ2h0IHRoaW5nIGV2ZW4gb24gaW5wdXQgc2hvcnQgZW5vdWdoIHRoYXQgaXQgZG9lc24ndCBuZWVkIHRvCisgICAgICAgICMgYmUgd3JhcHBlZC4KKyAgICAgICAgdGV4dCA9ICJBIHNob3J0IGxpbmUuIE5vdGUgdGhlIHNpbmdsZSBzcGFjZS4iCisgICAgICAgIGV4cGVjdCA9IFsiQSBzaG9ydCBsaW5lLiAgTm90ZSB0aGUgc2luZ2xlIHNwYWNlLiJdCisgICAgICAgIHNlbGYuY2hlY2sod3JhcHBlci53cmFwKHRleHQpLCBleHBlY3QpCisKKyAgICAgICAgIyBUZXN0IHNvbWUgb2YgdGhlIGhhaXJ5IGVuZCBjYXNlcyB0aGF0IF9maXhfc2VudGVuY2VfZW5kaW5ncygpCisgICAgICAgICMgaXMgc3VwcG9zZWQgdG8gaGFuZGxlICh0aGUgZWFzeSBzdHVmZiBpcyB0ZXN0ZWQgaW4KKyAgICAgICAgIyB0ZXN0X3doaXRlc3BhY2UoKSBhYm92ZSkuCisgICAgICAgIHRleHQgPSAiV2VsbCwgRG9jdG9yPyBXaGF0IGRvIHlvdSB0aGluaz8iCisgICAgICAgIGV4cGVjdCA9IFsiV2VsbCwgRG9jdG9yPyAgV2hhdCBkbyB5b3UgdGhpbms/Il0KKyAgICAgICAgc2VsZi5jaGVjayh3cmFwcGVyLndyYXAodGV4dCksIGV4cGVjdCkKKworICAgICAgICB0ZXh0ID0gIldlbGwsIERvY3Rvcj9cbldoYXQgZG8geW91IHRoaW5rPyIKKyAgICAgICAgc2VsZi5jaGVjayh3cmFwcGVyLndyYXAodGV4dCksIGV4cGVjdCkKKworICAgICAgICB0ZXh0ID0gJ0kgc2F5LCBjaGFwcyEgQW55b25lIGZvciAidGVubmlzPyJcbkhtbXBoIScKKyAgICAgICAgZXhwZWN0ID0gWydJIHNheSwgY2hhcHMhICBBbnlvbmUgZm9yICJ0ZW5uaXM/IiAgSG1tcGghJ10KKyAgICAgICAgc2VsZi5jaGVjayh3cmFwcGVyLndyYXAodGV4dCksIGV4cGVjdCkKKworICAgICAgICB3cmFwcGVyLndpZHRoID0gMjAKKyAgICAgICAgZXhwZWN0ID0gWydJIHNheSwgY2hhcHMhJywgJ0FueW9uZSBmb3IgInRlbm5pcz8iJywgJ0htbXBoISddCisgICAgICAgIHNlbGYuY2hlY2sod3JhcHBlci53cmFwKHRleHQpLCBleHBlY3QpCisKKyAgICAgICAgdGV4dCA9ICdBbmQgc2hlIHNhaWQsICJHbyB0byBoZWxsISJcbkNhbiB5b3UgYmVsaWV2ZSB0aGF0PycKKyAgICAgICAgZXhwZWN0ID0gWydBbmQgc2hlIHNhaWQsICJHbyB0bycsCisgICAgICAgICAgICAgICAgICAnaGVsbCEiICBDYW4geW91JywKKyAgICAgICAgICAgICAgICAgICdiZWxpZXZlIHRoYXQ/J10KKyAgICAgICAgc2VsZi5jaGVjayh3cmFwcGVyLndyYXAodGV4dCksIGV4cGVjdCkKKworICAgICAgICB3cmFwcGVyLndpZHRoID0gNjAKKyAgICAgICAgZXhwZWN0ID0gWydBbmQgc2hlIHNhaWQsICJHbyB0byBoZWxsISIgIENhbiB5b3UgYmVsaWV2ZSB0aGF0PyddCisgICAgICAgIHNlbGYuY2hlY2sod3JhcHBlci53cmFwKHRleHQpLCBleHBlY3QpCisKKyAgICAgICAgdGV4dCA9ICdGaWxlIHN0ZGlvLmggaXMgbmljZS4nCisgICAgICAgIGV4cGVjdCA9IFsnRmlsZSBzdGRpby5oIGlzIG5pY2UuJ10KKyAgICAgICAgc2VsZi5jaGVjayh3cmFwcGVyLndyYXAodGV4dCksIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X3dyYXBfc2hvcnQoc2VsZik6CisgICAgICAgICMgV3JhcHBpbmcgdG8gbWFrZSBzaG9ydCBsaW5lcyBsb25nZXIKKworICAgICAgICB0ZXh0ID0gIlRoaXMgaXMgYVxuc2hvcnQgcGFyYWdyYXBoLiIKKworICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMjAsIFsiVGhpcyBpcyBhIHNob3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFncmFwaC4iXSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDQwLCBbIlRoaXMgaXMgYSBzaG9ydCBwYXJhZ3JhcGguIl0pCisKKworICAgIGRlZiB0ZXN0X3dyYXBfc2hvcnRfMWxpbmUoc2VsZik6CisgICAgICAgICMgVGVzdCBlbmRjYXNlcworCisgICAgICAgIHRleHQgPSAiVGhpcyBpcyBhIHNob3J0IGxpbmUuIgorCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAzMCwgWyJUaGlzIGlzIGEgc2hvcnQgbGluZS4iXSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDMwLCBbIigxKSBUaGlzIGlzIGEgc2hvcnQgbGluZS4iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PSIoMSkgIikKKworCisgICAgZGVmIHRlc3RfaHlwaGVuYXRlZChzZWxmKToKKyAgICAgICAgIyBUZXN0IGJyZWFraW5nIGh5cGhlbmF0ZWQgd29yZHMKKworICAgICAgICB0ZXh0ID0gKCJ0aGlzLWlzLWEtdXNlZnVsLWZlYXR1cmUtZm9yLSIKKyAgICAgICAgICAgICAgICAicmVmb3JtYXR0aW5nLXBvc3RzLWZyb20tdGltLXBldGVycydseSIpCisKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDQwLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJ0aGlzLWlzLWEtdXNlZnVsLWZlYXR1cmUtZm9yLSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlZm9ybWF0dGluZy1wb3N0cy1mcm9tLXRpbS1wZXRlcnMnbHkiXSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDQxLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJ0aGlzLWlzLWEtdXNlZnVsLWZlYXR1cmUtZm9yLSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlZm9ybWF0dGluZy1wb3N0cy1mcm9tLXRpbS1wZXRlcnMnbHkiXSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDQyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJ0aGlzLWlzLWEtdXNlZnVsLWZlYXR1cmUtZm9yLXJlZm9ybWF0dGluZy0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICJwb3N0cy1mcm9tLXRpbS1wZXRlcnMnbHkiXSkKKworICAgIGRlZiB0ZXN0X2h5cGhlbmF0ZWRfbnVtYmVycyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgaHlwaGVuYXRlZCBudW1iZXJzIChlZy4gZGF0ZXMpIGFyZSBub3QgYnJva2VuIGxpa2Ugd29yZHMuCisgICAgICAgIHRleHQgPSAoIlB5dGhvbiAxLjAuMCB3YXMgcmVsZWFzZWQgb24gMTk5NC0wMS0yNi4gIFB5dGhvbiAxLjAuMSB3YXNcbiIKKyAgICAgICAgICAgICAgICAicmVsZWFzZWQgb24gMTk5NC0wMi0xNS4iKQorCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAzNSwgWydQeXRob24gMS4wLjAgd2FzIHJlbGVhc2VkIG9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzE5OTQtMDEtMjYuICBQeXRob24gMS4wLjEgd2FzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGVhc2VkIG9uIDE5OTQtMDItMTUuJ10pCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCA0MCwgWydQeXRob24gMS4wLjAgd2FzIHJlbGVhc2VkIG9uIDE5OTQtMDEtMjYuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B5dGhvbiAxLjAuMSB3YXMgcmVsZWFzZWQgb24gMTk5NC0wMi0xNS4nXSkKKworICAgICAgICB0ZXh0ID0gIkkgZG8gYWxsIG15IHNob3BwaW5nIGF0IDctMTEuIgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMjUsIFsiSSBkbyBhbGwgbXkgc2hvcHBpbmcgYXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNy0xMS4iXSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDI3LCBbIkkgZG8gYWxsIG15IHNob3BwaW5nIGF0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjctMTEuIl0pCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAyOSwgWyJJIGRvIGFsbCBteSBzaG9wcGluZyBhdCA3LTExLiJdKQorCisgICAgZGVmIHRlc3RfZW1fZGFzaChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRleHQgd2l0aCBlbS1kYXNoZXMKKyAgICAgICAgdGV4dCA9ICJFbS1kYXNoZXMgc2hvdWxkIGJlIHdyaXR0ZW4gLS0gdGh1cy4iCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAyNSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiRW0tZGFzaGVzIHNob3VsZCBiZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIndyaXR0ZW4gLS0gdGh1cy4iXSkKKworICAgICAgICAjIFByb2JlIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBwcm9wZXJseSB3cml0dGVuIGVtLWRhc2gsCisgICAgICAgICMgaWUuICIgLS0gIi4KKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDI5LAorICAgICAgICAgICAgICAgICAgICAgICAgWyJFbS1kYXNoZXMgc2hvdWxkIGJlIHdyaXR0ZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICItLSB0aHVzLiJdKQorICAgICAgICBleHBlY3QgPSBbIkVtLWRhc2hlcyBzaG91bGQgYmUgd3JpdHRlbiAtLSIsCisgICAgICAgICAgICAgICAgICAidGh1cy4iXQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMzAsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDM1LCBleHBlY3QpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAzNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiRW0tZGFzaGVzIHNob3VsZCBiZSB3cml0dGVuIC0tIHRodXMuIl0pCisKKyAgICAgICAgIyBUaGUgaW1wcm9wZXJseSB3cml0dGVuIGVtLWRhc2ggaXMgaGFuZGxlZCB0b28sIGJlY2F1c2UKKyAgICAgICAgIyBpdCdzIGFkamFjZW50IHRvIG5vbi13aGl0ZXNwYWNlIG9uIGJvdGggc2lkZXMuCisgICAgICAgIHRleHQgPSAiWW91IGNhbiBhbHNvIGRvLS10aGlzIG9yIGV2ZW4tLS10aGlzLiIKKyAgICAgICAgZXhwZWN0ID0gWyJZb3UgY2FuIGFsc28gZG8iLAorICAgICAgICAgICAgICAgICAgIi0tdGhpcyBvciBldmVuIiwKKyAgICAgICAgICAgICAgICAgICItLS10aGlzLiJdCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAxNSwgZXhwZWN0KQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMTYsIGV4cGVjdCkKKyAgICAgICAgZXhwZWN0ID0gWyJZb3UgY2FuIGFsc28gZG8tLSIsCisgICAgICAgICAgICAgICAgICAidGhpcyBvciBldmVuLS0tIiwKKyAgICAgICAgICAgICAgICAgICJ0aGlzLiJdCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAxNywgZXhwZWN0KQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMTksIGV4cGVjdCkKKyAgICAgICAgZXhwZWN0ID0gWyJZb3UgY2FuIGFsc28gZG8tLXRoaXMgb3IgZXZlbiIsCisgICAgICAgICAgICAgICAgICAiLS0tdGhpcy4iXQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMjksIGV4cGVjdCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDMxLCBleHBlY3QpCisgICAgICAgIGV4cGVjdCA9IFsiWW91IGNhbiBhbHNvIGRvLS10aGlzIG9yIGV2ZW4tLS0iLAorICAgICAgICAgICAgICAgICAgInRoaXMuIl0KKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDMyLCBleHBlY3QpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAzNSwgZXhwZWN0KQorCisgICAgICAgICMgQWxsIG9mIHRoZSBhYm92ZSBiZWhhdmlvdXIgY291bGQgYmUgZGVkdWNlZCBieSBwcm9iaW5nIHRoZQorICAgICAgICAjIF9zcGxpdCgpIG1ldGhvZC4KKyAgICAgICAgdGV4dCA9ICJIZXJlJ3MgYW4gLS0gZW0tZGFzaCBhbmQtLWhlcmUncyBhbm90aGVyLS0tYW5kIGFub3RoZXIhIgorICAgICAgICBleHBlY3QgPSBbIkhlcmUncyIsICIgIiwgImFuIiwgIiAiLCAiLS0iLCAiICIsICJlbS0iLCAiZGFzaCIsICIgIiwKKyAgICAgICAgICAgICAgICAgICJhbmQiLCAiLS0iLCAiaGVyZSdzIiwgIiAiLCAiYW5vdGhlciIsICItLS0iLAorICAgICAgICAgICAgICAgICAgImFuZCIsICIgIiwgImFub3RoZXIhIl0KKyAgICAgICAgc2VsZi5jaGVja19zcGxpdCh0ZXh0LCBleHBlY3QpCisKKyAgICAgICAgdGV4dCA9ICJhbmQgdGhlbi0tYmFtIS0taGUgd2FzIGdvbmUiCisgICAgICAgIGV4cGVjdCA9IFsiYW5kIiwgIiAiLCAidGhlbiIsICItLSIsICJiYW0hIiwgIi0tIiwKKyAgICAgICAgICAgICAgICAgICJoZSIsICIgIiwgIndhcyIsICIgIiwgImdvbmUiXQorICAgICAgICBzZWxmLmNoZWNrX3NwbGl0KHRleHQsIGV4cGVjdCkKKworCisgICAgZGVmIHRlc3RfdW5peF9vcHRpb25zIChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgVW5peC1zdHlsZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgd3JhcHBlZCBjb3JyZWN0bHkuCisgICAgICAgICMgQm90aCBPcHRpayAoT3B0aW9uUGFyc2VyKSBhbmQgRG9jdXRpbHMgcmVseSBvbiB0aGlzIGJlaGF2aW91ciEKKworICAgICAgICB0ZXh0ID0gIllvdSBzaG91bGQgdXNlIHRoZSAtbiBvcHRpb24sIG9yIC0tZHJ5LXJ1biBpbiBpdHMgbG9uZyBmb3JtLiIKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDIwLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJZb3Ugc2hvdWxkIHVzZSB0aGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICItbiBvcHRpb24sIG9yIC0tZHJ5LSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJ1biBpbiBpdHMgbG9uZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImZvcm0uIl0pCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAyMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiWW91IHNob3VsZCB1c2UgdGhlIC1uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uLCBvciAtLWRyeS1ydW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBpdHMgbG9uZyBmb3JtLiJdKQorICAgICAgICBleHBlY3QgPSBbIllvdSBzaG91bGQgdXNlIHRoZSAtbiBvcHRpb24sIG9yIiwKKyAgICAgICAgICAgICAgICAgICItLWRyeS1ydW4gaW4gaXRzIGxvbmcgZm9ybS4iXQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMzIsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDM0LCBleHBlY3QpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAzNSwgZXhwZWN0KQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgMzgsIGV4cGVjdCkKKyAgICAgICAgZXhwZWN0ID0gWyJZb3Ugc2hvdWxkIHVzZSB0aGUgLW4gb3B0aW9uLCBvciAtLWRyeS0iLAorICAgICAgICAgICAgICAgICAgInJ1biBpbiBpdHMgbG9uZyBmb3JtLiJdCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAzOSwgZXhwZWN0KQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgNDEsIGV4cGVjdCkKKyAgICAgICAgZXhwZWN0ID0gWyJZb3Ugc2hvdWxkIHVzZSB0aGUgLW4gb3B0aW9uLCBvciAtLWRyeS1ydW4iLAorICAgICAgICAgICAgICAgICAgImluIGl0cyBsb25nIGZvcm0uIl0KKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDQyLCBleHBlY3QpCisKKyAgICAgICAgIyBBZ2FpbiwgYWxsIG9mIHRoZSBhYm92ZSBjYW4gYmUgZGVkdWNlZCBmcm9tIF9zcGxpdCgpLgorICAgICAgICB0ZXh0ID0gInRoZSAtbiBvcHRpb24sIG9yIC0tZHJ5LXJ1biBvciAtLWRyeXJ1biIKKyAgICAgICAgZXhwZWN0ID0gWyJ0aGUiLCAiICIsICItbiIsICIgIiwgIm9wdGlvbiwiLCAiICIsICJvciIsICIgIiwKKyAgICAgICAgICAgICAgICAgICItLWRyeS0iLCAicnVuIiwgIiAiLCAib3IiLCAiICIsICItLWRyeXJ1biJdCisgICAgICAgIHNlbGYuY2hlY2tfc3BsaXQodGV4dCwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfZnVua3lfaHlwaGVucyAoc2VsZik6CisgICAgICAgICMgU2NyZXd5IGVkZ2UgY2FzZXMgY29va2VkIHVwIGJ5IERhdmlkIEdvb2RnZXIuICBBbGwgcmVwb3J0ZWQKKyAgICAgICAgIyBpbiBTRiBidWcgIzU5NjQzNC4KKyAgICAgICAgc2VsZi5jaGVja19zcGxpdCgid2hhdCB0aGUtLWhleSEiLCBbIndoYXQiLCAiICIsICJ0aGUiLCAiLS0iLCAiaGV5ISJdKQorICAgICAgICBzZWxmLmNoZWNrX3NwbGl0KCJ3aGF0IHRoZS0tIiwgWyJ3aGF0IiwgIiAiLCAidGhlLS0iXSkKKyAgICAgICAgc2VsZi5jaGVja19zcGxpdCgid2hhdCB0aGUtLS4iLCBbIndoYXQiLCAiICIsICJ0aGUtLS4iXSkKKyAgICAgICAgc2VsZi5jaGVja19zcGxpdCgiLS10ZXh0LS0uIiwgWyItLXRleHQtLS4iXSkKKworICAgICAgICAjIFdoZW4gSSBmaXJzdCByZWFkIGJ1ZyAjNTk2NDM0LCB0aGlzIGlzIHdoYXQgSSB0aG91Z2h0IERhdmlkCisgICAgICAgICMgd2FzIHRhbGtpbmcgYWJvdXQuICBJIHdhcyB3cm9uZzsgdGhlc2UgaGF2ZSBhbHdheXMgd29ya2VkCisgICAgICAgICMgZmluZS4gIFRoZSByZWFsIHByb2JsZW0gaXMgdGVzdGVkIGluIHRlc3RfZnVua3lfcGFyZW5zKCkKKyAgICAgICAgIyBiZWxvdy4uLgorICAgICAgICBzZWxmLmNoZWNrX3NwbGl0KCItLW9wdGlvbiIsIFsiLS1vcHRpb24iXSkKKyAgICAgICAgc2VsZi5jaGVja19zcGxpdCgiLS1vcHRpb24tb3B0IiwgWyItLW9wdGlvbi0iLCAib3B0Il0pCisgICAgICAgIHNlbGYuY2hlY2tfc3BsaXQoImZvbyAtLW9wdGlvbi1vcHQgYmFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbImZvbyIsICIgIiwgIi0tb3B0aW9uLSIsICJvcHQiLCAiICIsICJiYXIiXSkKKworICAgIGRlZiB0ZXN0X3B1bmN0X2h5cGhlbnMoc2VsZik6CisgICAgICAgICMgT2ggYm90aGVyLCBTRiAjOTY1NDI1IGZvdW5kIGFub3RoZXIgcHJvYmxlbSB3aXRoIGh5cGhlbnMgLS0KKyAgICAgICAgIyBoeXBoZW5hdGVkIHdvcmRzIGluIHNpbmdsZSBxdW90ZXMgd2VyZW4ndCBoYW5kbGVkIGNvcnJlY3RseS4KKyAgICAgICAgIyBJbiBmYWN0LCB0aGUgYnVnIGlzIHRoYXQgKmFueSogcHVuY3R1YXRpb24gYXJvdW5kIGEgaHlwaGVuYXRlZAorICAgICAgICAjIHdvcmQgd2FzIGhhbmRsZWQgaW5jb3JyZWN0bHksIGV4Y2VwdCBmb3IgYSBsZWFkaW5nICItLSIsIHdoaWNoCisgICAgICAgICMgd2FzIHNwZWNpYWwtY2FzZWQgZm9yIE9wdGlrIGFuZCBEb2N1dGlscy4gIFNvIHRlc3QgYSB2YXJpZXR5CisgICAgICAgICMgb2Ygc3R5bGVzIG9mIHB1bmN0dWF0aW9uIGFyb3VuZCBhIGh5cGhlbmF0ZWQgd29yZC4KKyAgICAgICAgIyAoQWN0dWFsbHkgdGhpcyBpcyBiYXNlZCBvbiBhbiBPcHRpayBidWcgcmVwb3J0LCAjODEzMDc3KS4KKyAgICAgICAgc2VsZi5jaGVja19zcGxpdCgidGhlICd3aWJibGUtd29iYmxlJyB3aWRnZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsndGhlJywgJyAnLCAiJ3dpYmJsZS0iLCAid29iYmxlJyIsICcgJywgJ3dpZGdldCddKQorICAgICAgICBzZWxmLmNoZWNrX3NwbGl0KCd0aGUgIndpYmJsZS13b2JibGUiIHdpZGdldCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyd0aGUnLCAnICcsICcid2liYmxlLScsICd3b2JibGUiJywgJyAnLCAnd2lkZ2V0J10pCisgICAgICAgIHNlbGYuY2hlY2tfc3BsaXQoInRoZSAod2liYmxlLXdvYmJsZSkgd2lkZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3RoZScsICcgJywgIih3aWJibGUtIiwgIndvYmJsZSkiLCAnICcsICd3aWRnZXQnXSkKKyAgICAgICAgc2VsZi5jaGVja19zcGxpdCgidGhlIFsnd2liYmxlLXdvYmJsZSddIHdpZGdldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyd0aGUnLCAnICcsICJbJ3dpYmJsZS0iLCAid29iYmxlJ10iLCAnICcsICd3aWRnZXQnXSkKKworICAgIGRlZiB0ZXN0X2Z1bmt5X3BhcmVucyAoc2VsZik6CisgICAgICAgICMgU2Vjb25kIHBhcnQgb2YgU0YgYnVnICM1OTY0MzQ6IGxvbmcgb3B0aW9uIHN0cmluZ3MgaW5zaWRlCisgICAgICAgICMgcGFyZW50aGVzZXMuCisgICAgICAgIHNlbGYuY2hlY2tfc3BsaXQoImZvbyAoLS1vcHRpb24pIGJhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyJmb28iLCAiICIsICIoLS1vcHRpb24pIiwgIiAiLCAiYmFyIl0pCisKKyAgICAgICAgIyBSZWxhdGVkIHN0dWZmIC0tIG1ha2Ugc3VyZSBwYXJlbnMgd29yayBpbiBzaW1wbGVyIGNvbnRleHRzLgorICAgICAgICBzZWxmLmNoZWNrX3NwbGl0KCJmb28gKGJhcikgYmF6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbImZvbyIsICIgIiwgIihiYXIpIiwgIiAiLCAiYmF6Il0pCisgICAgICAgIHNlbGYuY2hlY2tfc3BsaXQoImJsYWggKGRpbmcgZG9uZyksIHd1YmJhIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbImJsYWgiLCAiICIsICIoZGluZyIsICIgIiwgImRvbmcpLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiwgInd1YmJhIl0pCisKKyAgICBkZWYgdGVzdF9kcm9wX3doaXRlc3BhY2VfZmFsc2Uoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBkcm9wX3doaXRlc3BhY2U9RmFsc2UgcHJlc2VydmVzIHdoaXRlc3BhY2UuCisgICAgICAgICMgU0YgcGF0Y2ggIzE1ODEwNzMKKyAgICAgICAgdGV4dCA9ICIgVGhpcyBpcyBhICAgIHNlbnRlbmNlIHdpdGggICAgIG11Y2ggd2hpdGVzcGFjZS4iCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiIFRoaXMgaXMgYSIsICIgICAgIiwgInNlbnRlbmNlICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggICAgICIsICJtdWNoIHdoaXRlIiwgInNwYWNlLiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgZHJvcF93aGl0ZXNwYWNlPUZhbHNlKQorCisgICAgZGVmIHRlc3RfZHJvcF93aGl0ZXNwYWNlX2ZhbHNlX3doaXRlc3BhY2Vfb25seShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGRyb3Bfd2hpdGVzcGFjZT1GYWxzZSBwcmVzZXJ2ZXMgYSB3aGl0ZXNwYWNlLW9ubHkgc3RyaW5nLgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoIiAgICIsIDYsIFsiICAgIl0sIGRyb3Bfd2hpdGVzcGFjZT1GYWxzZSkKKworICAgIGRlZiB0ZXN0X2Ryb3Bfd2hpdGVzcGFjZV9mYWxzZV93aGl0ZXNwYWNlX29ubHlfd2l0aF9pbmRlbnQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBhIHdoaXRlc3BhY2Utb25seSBzdHJpbmcgZ2V0cyBpbmRlbnRlZCAod2hlbgorICAgICAgICAjIGRyb3Bfd2hpdGVzcGFjZSBpcyBGYWxzZSkuCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCgiICAgIiwgNiwgWyIgICAgICJdLCBkcm9wX3doaXRlc3BhY2U9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2luZGVudD0iICAiKQorCisgICAgZGVmIHRlc3RfZHJvcF93aGl0ZXNwYWNlX3doaXRlc3BhY2Vfb25seShzZWxmKToKKyAgICAgICAgIyBDaGVjayBkcm9wX3doaXRlc3BhY2Ugb24gYSB3aGl0ZXNwYWNlLW9ubHkgc3RyaW5nLgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoIiAgIiwgNiwgW10pCisKKyAgICBkZWYgdGVzdF9kcm9wX3doaXRlc3BhY2VfbGVhZGluZ193aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgZHJvcF93aGl0ZXNwYWNlIGRvZXMgbm90IGRyb3AgbGVhZGluZyB3aGl0ZXNwYWNlIChpZgorICAgICAgICAjIGZvbGxvd2VkIGJ5IG5vbi13aGl0ZXNwYWNlKS4KKyAgICAgICAgIyBTRiBidWcgIzYyMjg0OSByZXBvcnRlZCBpbmNvbnNpc3RlbnQgaGFuZGxpbmcgb2YgbGVhZGluZworICAgICAgICAjIHdoaXRlc3BhY2U7IGxldCdzIHRlc3QgdGhhdCBhIGJpdCwgc2hhbGwgd2U/CisgICAgICAgIHRleHQgPSAiIFRoaXMgaXMgYSBzZW50ZW5jZSB3aXRoIGxlYWRpbmcgd2hpdGVzcGFjZS4iCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCA1MCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiIFRoaXMgaXMgYSBzZW50ZW5jZSB3aXRoIGxlYWRpbmcgd2hpdGVzcGFjZS4iXSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDMwLAorICAgICAgICAgICAgICAgICAgICAgICAgWyIgVGhpcyBpcyBhIHNlbnRlbmNlIHdpdGgiLCAibGVhZGluZyB3aGl0ZXNwYWNlLiJdKQorCisgICAgZGVmIHRlc3RfZHJvcF93aGl0ZXNwYWNlX3doaXRlc3BhY2VfbGluZShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGRyb3Bfd2hpdGVzcGFjZSBza2lwcyB0aGUgd2hvbGUgbGluZSBpZiBhIG5vbi1sZWFkaW5nCisgICAgICAgICMgbGluZSBjb25zaXN0cyBvbmx5IG9mIHdoaXRlc3BhY2UuCisgICAgICAgIHRleHQgPSAiYWJjZCAgICBlZmdoIgorICAgICAgICAjIEluY2x1ZGUgdGhlIHJlc3VsdCBmb3IgZHJvcF93aGl0ZXNwYWNlPUZhbHNlIGZvciBjb21wYXJpc29uLgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgNiwgWyJhYmNkIiwgIiAgICAiLCAiZWZnaCJdLAorICAgICAgICAgICAgICAgICAgICAgICAgZHJvcF93aGl0ZXNwYWNlPUZhbHNlKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgNiwgWyJhYmNkIiwgImVmZ2giXSkKKworICAgIGRlZiB0ZXN0X2Ryb3Bfd2hpdGVzcGFjZV93aGl0ZXNwYWNlX29ubHlfd2l0aF9pbmRlbnQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBpbml0aWFsX2luZGVudCBpcyBub3QgYXBwbGllZCB0byBhIHdoaXRlc3BhY2Utb25seQorICAgICAgICAjIHN0cmluZy4gIFRoaXMgY2hlY2tzIGEgc3BlY2lhbCBjYXNlIG9mIHRoZSBmYWN0IHRoYXQgZHJvcHBpbmcKKyAgICAgICAgIyB3aGl0ZXNwYWNlIG9jY3VycyBiZWZvcmUgaW5kZW50aW5nLgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoIiAgIiwgNiwgW10sIGluaXRpYWxfaW5kZW50PSIrKyIpCisKKyAgICBkZWYgdGVzdF9kcm9wX3doaXRlc3BhY2Vfd2hpdGVzcGFjZV9pbmRlbnQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBkcm9wX3doaXRlc3BhY2UgZG9lcyBub3QgZHJvcCB3aGl0ZXNwYWNlIGluZGVudHMuCisgICAgICAgICMgVGhpcyBjaGVja3MgYSBzcGVjaWFsIGNhc2Ugb2YgdGhlIGZhY3QgdGhhdCBkcm9wcGluZyB3aGl0ZXNwYWNlCisgICAgICAgICMgb2NjdXJzIGJlZm9yZSBpbmRlbnRpbmcuCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCgiYWJjZCBlZmdoIiwgNiwgWyIgIGFiY2QiLCAiICBlZmdoIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2luZGVudD0iICAiLCBzdWJzZXF1ZW50X2luZGVudD0iICAiKQorCisgICAgaWYgdGVzdF9zdXBwb3J0LmhhdmVfdW5pY29kZToKKyAgICAgICAgZGVmIHRlc3RfdW5pY29kZShzZWxmKToKKyAgICAgICAgICAgICMgKlZlcnkqIHNpbXBsZSB0ZXN0IG9mIHdyYXBwaW5nIFVuaWNvZGUgc3RyaW5ncy4gIEknbSBzdXJlCisgICAgICAgICAgICAjIHRoZXJlJ3MgbW9yZSB0byBpdCB0aGFuIHRoaXMsIGJ1dCBsZXQncyBhdCBsZWFzdCBtYWtlCisgICAgICAgICAgICAjIHN1cmUgdGV4dHdyYXAgZG9lc24ndCBjcmFzaCBvbiBVbmljb2RlIGlucHV0IQorICAgICAgICAgICAgdGV4dCA9IHUiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRvZGF5PyIKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCA1MCwgW3UiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRvZGF5PyJdKQorICAgICAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDIwLCBbdSJIZWxsbyB0aGVyZSwgaG93IGFyZSIsICJ5b3UgdG9kYXk/Il0pCisgICAgICAgICAgICBvbGluZXMgPSBzZWxmLndyYXBwZXIud3JhcCh0ZXh0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9saW5lcywgbGlzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvbGluZXNbMF0sIHVuaWNvZGUpCisgICAgICAgICAgICBvdGV4dCA9IHNlbGYud3JhcHBlci5maWxsKHRleHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob3RleHQsIHVuaWNvZGUpCisKKyAgICAgICAgZGVmIHRlc3Rfbm9fc3BsaXRfYXRfdW1sYXV0KHNlbGYpOgorICAgICAgICAgICAgdGV4dCA9IHUiRGllIEVtcGZceGU0bmdlci1BdXN3YWhsIgorICAgICAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDEzLCBbdSJEaWUiLCB1IkVtcGZceGU0bmdlci0iLCB1IkF1c3dhaGwiXSkKKworICAgICAgICBkZWYgdGVzdF91bWxhdXRfZm9sbG93ZWRfYnlfZGFzaChzZWxmKToKKyAgICAgICAgICAgIHRleHQgPSB1ImFhIFx4ZTRceGU0LVx4ZTRceGU0IgorICAgICAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDcsIFt1ImFhIFx4ZTRceGU0LSIsIHUiXHhlNFx4ZTQiXSkKKworICAgIGRlZiB0ZXN0X3NwbGl0KHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSBzdGFuZGFyZCBfc3BsaXQoKSBtZXRob2Qgd29ya3MgYXMgYWR2ZXJ0aXNlZAorICAgICAgICAjIGluIHRoZSBjb21tZW50cworCisgICAgICAgIHRleHQgPSAiSGVsbG8gdGhlcmUgLS0geW91IGdvb2YtYmFsbCwgdXNlIHRoZSAtYiBvcHRpb24hIgorCisgICAgICAgIHJlc3VsdCA9IHNlbGYud3JhcHBlci5fc3BsaXQodGV4dCkKKyAgICAgICAgc2VsZi5jaGVjayhyZXN1bHQsCisgICAgICAgICAgICAgWyJIZWxsbyIsICIgIiwgInRoZXJlIiwgIiAiLCAiLS0iLCAiICIsICJ5b3UiLCAiICIsICJnb29mLSIsCisgICAgICAgICAgICAgICJiYWxsLCIsICIgIiwgInVzZSIsICIgIiwgInRoZSIsICIgIiwgIi1iIiwgIiAiLCAgIm9wdGlvbiEiXSkKKworICAgIGRlZiB0ZXN0X2JyZWFrX29uX2h5cGhlbnMoc2VsZik6CisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIGJyZWFrX29uX2h5cGhlbnMgYXR0cmlidXRlcyB3b3JrCisgICAgICAgIHRleHQgPSAieWFiYSBkYWJhLWRvbyIKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDEwLCBbInlhYmEgZGFiYS0iLCAiZG9vIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBicmVha19vbl9oeXBoZW5zPVRydWUpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCh0ZXh0LCAxMCwgWyJ5YWJhIiwgImRhYmEtZG9vIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBicmVha19vbl9oeXBoZW5zPUZhbHNlKQorCisgICAgZGVmIHRlc3RfYmFkX3dpZHRoKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IHdpZHRoIDw9IDAgaXMgY2F1Z2h0LgorICAgICAgICB0ZXh0ID0gIldoYXRldmVyLCBpdCBkb2Vzbid0IG1hdHRlci4iCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHdyYXAsIHRleHQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHdyYXAsIHRleHQsIC0xKQorCisKK2NsYXNzIExvbmdXb3JkVGVzdENhc2UgKEJhc2VUZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLndyYXBwZXIgPSBUZXh0V3JhcHBlcigpCisgICAgICAgIHNlbGYudGV4dCA9ICcnJ1wKK0RpZCB5b3Ugc2F5ICJzdXBlcmNhbGlmcmFnaWxpc3RpY2V4cGlhbGlkb2Npb3VzPyIKK0hvdyAqZG8qIHlvdSBzcGVsbCB0aGF0IG9kZCB3b3JkLCBhbnl3YXlzPworJycnCisKKyAgICBkZWYgdGVzdF9icmVha19sb25nKHNlbGYpOgorICAgICAgICAjIFdyYXAgdGV4dCB3aXRoIGxvbmcgd29yZHMgYW5kIGxvdHMgb2YgcHVuY3R1YXRpb24KKworICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAzMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsnRGlkIHlvdSBzYXkgInN1cGVyY2FsaWZyYWdpbGlzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGljZXhwaWFsaWRvY2lvdXM/IiBIb3cgKmRvKicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3lvdSBzcGVsbCB0aGF0IG9kZCB3b3JkLCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FueXdheXM/J10pCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDUwLAorICAgICAgICAgICAgICAgICAgICAgICAgWydEaWQgeW91IHNheSAic3VwZXJjYWxpZnJhZ2lsaXN0aWNleHBpYWxpZG9jaW91cz8iJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnSG93ICpkbyogeW91IHNwZWxsIHRoYXQgb2RkIHdvcmQsIGFueXdheXM/J10pCisKKyAgICAgICAgIyBTRiBidWcgNzk3NjUwLiAgUHJldmVudCBhbiBpbmZpbml0ZSBsb29wIGJ5IG1ha2luZyBzdXJlIHRoYXQgYXQKKyAgICAgICAgIyBsZWFzdCBvbmUgY2hhcmFjdGVyIGdldHMgc3BsaXQgb2ZmIG9uIGV2ZXJ5IHBhc3MuCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcCgnLScqMTArJ2hlbGxvJywgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICBbJy0tLS0tLS0tLS0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICBoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgIGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICBsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgbyddLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2VxdWVudF9pbmRlbnQgPSAnICcqMTUpCisKKyAgICAgICAgIyBidWcgMTE0Ni4gIFByZXZlbnQgYSBsb25nIHdvcmQgdG8gYmUgd3JvbmdseSB3cmFwcGVkIHdoZW4gdGhlCisgICAgICAgICMgcHJlY2VkaW5nIHdvcmQgaXMgZXhhY3RseSBvbmUgY2hhcmFjdGVyIHNob3J0ZXIgdGhhbiB0aGUgd2lkdGgKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbJ0RpZCB5b3Ugc2F5ICcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyJzdXBlcmNhbGlmcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FnaWxpc3RpY2V4cCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2lhbGlkb2Npb3VzPycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyIgSG93ICpkbyonLAorICAgICAgICAgICAgICAgICAgICAgICAgICd5b3Ugc3BlbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICd0aGF0IG9kZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3dvcmQsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYW55d2F5cz8nXSkKKworICAgIGRlZiB0ZXN0X25vYnJlYWtfbG9uZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHdpdGggYnJlYWtfbG9uZ193b3JkcyBkaXNhYmxlZAorICAgICAgICBzZWxmLndyYXBwZXIuYnJlYWtfbG9uZ193b3JkcyA9IDAKKyAgICAgICAgc2VsZi53cmFwcGVyLndpZHRoID0gMzAKKyAgICAgICAgZXhwZWN0ID0gWydEaWQgeW91IHNheScsCisgICAgICAgICAgICAgICAgICAnInN1cGVyY2FsaWZyYWdpbGlzdGljZXhwaWFsaWRvY2lvdXM/IicsCisgICAgICAgICAgICAgICAgICAnSG93ICpkbyogeW91IHNwZWxsIHRoYXQgb2RkJywKKyAgICAgICAgICAgICAgICAgICd3b3JkLCBhbnl3YXlzPycKKyAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgcmVzdWx0ID0gc2VsZi53cmFwcGVyLndyYXAoc2VsZi50ZXh0KQorICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgZXhwZWN0KQorCisgICAgICAgICMgU2FtZSB0aGluZyB3aXRoIGt3YXJncyBwYXNzZWQgdG8gc3RhbmRhbG9uZSB3cmFwKCkgZnVuY3Rpb24uCisgICAgICAgIHJlc3VsdCA9IHdyYXAoc2VsZi50ZXh0LCB3aWR0aD0zMCwgYnJlYWtfbG9uZ193b3Jkcz0wKQorICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgZXhwZWN0KQorCisKK2NsYXNzIEluZGVudFRlc3RDYXNlcyhCYXNlVGVzdENhc2UpOgorCisgICAgIyBjYWxsZWQgYmVmb3JlIGVhY2ggdGVzdCBtZXRob2QKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudGV4dCA9ICcnJ1wKK1RoaXMgcGFyYWdyYXBoIHdpbGwgYmUgZmlsbGVkLCBmaXJzdCB3aXRob3V0IGFueSBpbmRlbnRhdGlvbiwKK2FuZCB0aGVuIHdpdGggc29tZSAoaW5jbHVkaW5nIGEgaGFuZ2luZyBpbmRlbnQpLicnJworCisKKyAgICBkZWYgdGVzdF9maWxsKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIGZpbGwoKSBtZXRob2QKKworICAgICAgICBleHBlY3QgPSAnJydcCitUaGlzIHBhcmFncmFwaCB3aWxsIGJlIGZpbGxlZCwgZmlyc3QKK3dpdGhvdXQgYW55IGluZGVudGF0aW9uLCBhbmQgdGhlbiB3aXRoCitzb21lIChpbmNsdWRpbmcgYSBoYW5naW5nIGluZGVudCkuJycnCisKKyAgICAgICAgcmVzdWx0ID0gZmlsbChzZWxmLnRleHQsIDQwKQorICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgZXhwZWN0KQorCisKKyAgICBkZWYgdGVzdF9pbml0aWFsX2luZGVudChzZWxmKToKKyAgICAgICAgIyBUZXN0IGluaXRpYWxfaW5kZW50IHBhcmFtZXRlcgorCisgICAgICAgIGV4cGVjdCA9IFsiICAgICBUaGlzIHBhcmFncmFwaCB3aWxsIGJlIGZpbGxlZCwiLAorICAgICAgICAgICAgICAgICAgImZpcnN0IHdpdGhvdXQgYW55IGluZGVudGF0aW9uLCBhbmQgdGhlbiIsCisgICAgICAgICAgICAgICAgICAid2l0aCBzb21lIChpbmNsdWRpbmcgYSBoYW5naW5nIGluZGVudCkuIl0KKyAgICAgICAgcmVzdWx0ID0gd3JhcChzZWxmLnRleHQsIDQwLCBpbml0aWFsX2luZGVudD0iICAgICAiKQorICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgZXhwZWN0KQorCisgICAgICAgIGV4cGVjdCA9ICJcbiIuam9pbihleHBlY3QpCisgICAgICAgIHJlc3VsdCA9IGZpbGwoc2VsZi50ZXh0LCA0MCwgaW5pdGlhbF9pbmRlbnQ9IiAgICAgIikKKyAgICAgICAgc2VsZi5jaGVjayhyZXN1bHQsIGV4cGVjdCkKKworCisgICAgZGVmIHRlc3Rfc3Vic2VxdWVudF9pbmRlbnQoc2VsZik6CisgICAgICAgICMgVGVzdCBzdWJzZXF1ZW50X2luZGVudCBwYXJhbWV0ZXIKKworICAgICAgICBleHBlY3QgPSAnJydcCisgICogVGhpcyBwYXJhZ3JhcGggd2lsbCBiZSBmaWxsZWQsIGZpcnN0CisgICAgd2l0aG91dCBhbnkgaW5kZW50YXRpb24sIGFuZCB0aGVuCisgICAgd2l0aCBzb21lIChpbmNsdWRpbmcgYSBoYW5naW5nCisgICAgaW5kZW50KS4nJycKKworICAgICAgICByZXN1bHQgPSBmaWxsKHNlbGYudGV4dCwgNDAsCisgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9pbmRlbnQ9IiAgKiAiLCBzdWJzZXF1ZW50X2luZGVudD0iICAgICIpCisgICAgICAgIHNlbGYuY2hlY2socmVzdWx0LCBleHBlY3QpCisKKworIyBEZXNwaXRlIHRoZSBzaW1pbGFyIG5hbWVzLCBEZWRlbnRUZXN0Q2FzZSBpcyAqbm90KiB0aGUgaW52ZXJzZQorIyBvZiBJbmRlbnRUZXN0Q2FzZSEKK2NsYXNzIERlZGVudFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBhc3NlcnRVbmNoYW5nZWQoc2VsZiwgdGV4dCk6CisgICAgICAgICIiImFzc2VydCB0aGF0IGRlZGVudCgpIGhhcyBubyBlZmZlY3Qgb24gJ3RleHQnIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgZGVkZW50KHRleHQpKQorCisgICAgZGVmIHRlc3RfZGVkZW50X25vbWFyZ2luKHNlbGYpOgorICAgICAgICAjIE5vIGxpbmVzIGluZGVudGVkLgorICAgICAgICB0ZXh0ID0gIkhlbGxvIHRoZXJlLlxuSG93IGFyZSB5b3U/XG5PaCBnb29kLCBJJ20gZ2xhZC4iCisgICAgICAgIHNlbGYuYXNzZXJ0VW5jaGFuZ2VkKHRleHQpCisKKyAgICAgICAgIyBTaW1pbGFyLCB3aXRoIGEgYmxhbmsgbGluZS4KKyAgICAgICAgdGV4dCA9ICJIZWxsbyB0aGVyZS5cblxuQm9vISIKKyAgICAgICAgc2VsZi5hc3NlcnRVbmNoYW5nZWQodGV4dCkKKworICAgICAgICAjIFNvbWUgbGluZXMgaW5kZW50ZWQsIGJ1dCBvdmVyYWxsIG1hcmdpbiBpcyBzdGlsbCB6ZXJvLgorICAgICAgICB0ZXh0ID0gIkhlbGxvIHRoZXJlLlxuICBUaGlzIGlzIGluZGVudGVkLiIKKyAgICAgICAgc2VsZi5hc3NlcnRVbmNoYW5nZWQodGV4dCkKKworICAgICAgICAjIEFnYWluLCBhZGQgYSBibGFuayBsaW5lLgorICAgICAgICB0ZXh0ID0gIkhlbGxvIHRoZXJlLlxuXG4gIEJvbyFcbiIKKyAgICAgICAgc2VsZi5hc3NlcnRVbmNoYW5nZWQodGV4dCkKKworICAgIGRlZiB0ZXN0X2RlZGVudF9ldmVuKHNlbGYpOgorICAgICAgICAjIEFsbCBsaW5lcyBpbmRlbnRlZCBieSB0d28gc3BhY2VzLgorICAgICAgICB0ZXh0ID0gIiAgSGVsbG8gdGhlcmUuXG4gIEhvdyBhcmUgeWE/XG4gIE9oIGdvb2QuIgorICAgICAgICBleHBlY3QgPSAiSGVsbG8gdGhlcmUuXG5Ib3cgYXJlIHlhP1xuT2ggZ29vZC4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBkZWRlbnQodGV4dCkpCisKKyAgICAgICAgIyBTYW1lLCB3aXRoIGJsYW5rIGxpbmVzLgorICAgICAgICB0ZXh0ID0gIiAgSGVsbG8gdGhlcmUuXG5cbiAgSG93IGFyZSB5YT9cbiAgT2ggZ29vZC5cbiIKKyAgICAgICAgZXhwZWN0ID0gIkhlbGxvIHRoZXJlLlxuXG5Ib3cgYXJlIHlhP1xuT2ggZ29vZC5cbiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKKworICAgICAgICAjIE5vdyBpbmRlbnQgb25lIG9mIHRoZSBibGFuayBsaW5lcy4KKyAgICAgICAgdGV4dCA9ICIgIEhlbGxvIHRoZXJlLlxuICBcbiAgSG93IGFyZSB5YT9cbiAgT2ggZ29vZC5cbiIKKyAgICAgICAgZXhwZWN0ID0gIkhlbGxvIHRoZXJlLlxuXG5Ib3cgYXJlIHlhP1xuT2ggZ29vZC5cbiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKKworICAgIGRlZiB0ZXN0X2RlZGVudF91bmV2ZW4oc2VsZik6CisgICAgICAgICMgTGluZXMgaW5kZW50ZWQgdW5ldmVubHkuCisgICAgICAgIHRleHQgPSAnJydcCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbworICAgICAgICAnJycKKyAgICAgICAgZXhwZWN0ID0gJycnXAorZGVmIGZvbygpOgorICAgIHdoaWxlIDE6CisgICAgICAgIHJldHVybiBmb28KKycnJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KHRleHQpKQorCisgICAgICAgICMgVW5ldmVuIGluZGVudGF0aW9uIHdpdGggYSBibGFuayBsaW5lLgorICAgICAgICB0ZXh0ID0gIiAgRm9vXG4gICAgQmFyXG5cbiAgIEJhelxuIgorICAgICAgICBleHBlY3QgPSAiRm9vXG4gIEJhclxuXG4gQmF6XG4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBkZWRlbnQodGV4dCkpCisKKyAgICAgICAgIyBVbmV2ZW4gaW5kZW50YXRpb24gd2l0aCBhIHdoaXRlc3BhY2Utb25seSBsaW5lLgorICAgICAgICB0ZXh0ID0gIiAgRm9vXG4gICAgQmFyXG4gXG4gICBCYXpcbiIKKyAgICAgICAgZXhwZWN0ID0gIkZvb1xuICBCYXJcblxuIEJhelxuIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgZGVkZW50KHRleHQpKQorCisgICAgIyBkZWRlbnQoKSBzaG91bGQgbm90IG1hbmdsZSBpbnRlcm5hbCB0YWJzCisgICAgZGVmIHRlc3RfZGVkZW50X3ByZXNlcnZlX2ludGVybmFsX3RhYnMoc2VsZik6CisgICAgICAgIHRleHQgPSAiICBoZWxsb1x0dGhlcmVcbiAgaG93IGFyZVx0eW91PyIKKyAgICAgICAgZXhwZWN0ID0gImhlbGxvXHR0aGVyZVxuaG93IGFyZVx0eW91PyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKKworICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IGl0IHByZXNlcnZlcyB0YWJzIHdoZW4gaXQncyBub3QgbWFraW5nIGFueQorICAgICAgICAjIGNoYW5nZXMgYXQgYWxsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBkZWRlbnQoZXhwZWN0KSkKKworICAgICMgZGVkZW50KCkgc2hvdWxkIG5vdCBtYW5nbGUgdGFicyBpbiB0aGUgbWFyZ2luIChpLmUuCisgICAgIyB0YWJzIGFuZCBzcGFjZXMgYm90aCBjb3VudCBhcyBtYXJnaW4sIGJ1dCBhcmUgKm5vdCoKKyAgICAjIGNvbnNpZGVyZWQgZXF1aXZhbGVudCkKKyAgICBkZWYgdGVzdF9kZWRlbnRfcHJlc2VydmVfbWFyZ2luX3RhYnMoc2VsZik6CisgICAgICAgIHRleHQgPSAiICBoZWxsbyB0aGVyZVxuXHRob3cgYXJlIHlvdT8iCisgICAgICAgIHNlbGYuYXNzZXJ0VW5jaGFuZ2VkKHRleHQpCisKKyAgICAgICAgIyBzYW1lIGVmZmVjdCBldmVuIGlmIHdlIGhhdmUgOCBzcGFjZXMKKyAgICAgICAgdGV4dCA9ICIgICAgICAgIGhlbGxvIHRoZXJlXG5cdGhvdyBhcmUgeW91PyIKKyAgICAgICAgc2VsZi5hc3NlcnRVbmNoYW5nZWQodGV4dCkKKworICAgICAgICAjIGRlZGVudCgpIG9ubHkgcmVtb3ZlcyB3aGl0ZXNwYWNlIHRoYXQgY2FuIGJlIHVuaWZvcm1seSByZW1vdmVkIQorICAgICAgICB0ZXh0ID0gIlx0aGVsbG8gdGhlcmVcblx0aG93IGFyZSB5b3U/IgorICAgICAgICBleHBlY3QgPSAiaGVsbG8gdGhlcmVcbmhvdyBhcmUgeW91PyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKKworICAgICAgICB0ZXh0ID0gIiAgXHRoZWxsbyB0aGVyZVxuICBcdGhvdyBhcmUgeW91PyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKKworICAgICAgICB0ZXh0ID0gIiAgXHQgIGhlbGxvIHRoZXJlXG4gIFx0ICBob3cgYXJlIHlvdT8iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBkZWRlbnQodGV4dCkpCisKKyAgICAgICAgdGV4dCA9ICIgIFx0aGVsbG8gdGhlcmVcbiAgXHQgIGhvdyBhcmUgeW91PyIKKyAgICAgICAgZXhwZWN0ID0gImhlbGxvIHRoZXJlXG4gIGhvdyBhcmUgeW91PyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChXcmFwVGVzdENhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb25nV29yZFRlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZW50VGVzdENhc2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVkZW50VGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTM4ODlhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdGhyZWFkLnB5CkBAIC0wLDAgKzEsMjY1IEBACitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHJhbmRvbQorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK3RocmVhZCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWQnKQoraW1wb3J0IHRpbWUKK2ltcG9ydCBzeXMKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gdGVzdCBpbXBvcnQgbG9ja190ZXN0cworCitOVU1UQVNLUyA9IDEwCitOVU1UUklQUyA9IDMKKworCitfcHJpbnRfbXV0ZXggPSB0aHJlYWQuYWxsb2NhdGVfbG9jaygpCisKK2RlZiB2ZXJib3NlX3ByaW50KGFyZyk6CisgICAgIiIiSGVscGVyIGZ1bmN0aW9uIGZvciBwcmludGluZyBvdXQgZGVidWdnaW5nIG91dHB1dC4iIiIKKyAgICBpZiB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgd2l0aCBfcHJpbnRfbXV0ZXg6CisgICAgICAgICAgICBwcmludCBhcmcKKworCitjbGFzcyBCYXNpY1RocmVhZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmRvbmVfbXV0ZXggPSB0aHJlYWQuYWxsb2NhdGVfbG9jaygpCisgICAgICAgIHNlbGYuZG9uZV9tdXRleC5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5ydW5uaW5nX211dGV4ID0gdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorICAgICAgICBzZWxmLnJhbmRvbV9tdXRleCA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgc2VsZi5jcmVhdGVkID0gMAorICAgICAgICBzZWxmLnJ1bm5pbmcgPSAwCisgICAgICAgIHNlbGYubmV4dF9pZGVudCA9IDAKKworCitjbGFzcyBUaHJlYWRSdW5uaW5nVGVzdHMoQmFzaWNUaHJlYWRUZXN0KToKKworICAgIGRlZiBuZXd0YXNrKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYucnVubmluZ19tdXRleDoKKyAgICAgICAgICAgIHNlbGYubmV4dF9pZGVudCArPSAxCisgICAgICAgICAgICB2ZXJib3NlX3ByaW50KCJjcmVhdGluZyB0YXNrICVzIiAlIHNlbGYubmV4dF9pZGVudCkKKyAgICAgICAgICAgIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKHNlbGYudGFzaywgKHNlbGYubmV4dF9pZGVudCwpKQorICAgICAgICAgICAgc2VsZi5jcmVhdGVkICs9IDEKKyAgICAgICAgICAgIHNlbGYucnVubmluZyArPSAxCisKKyAgICBkZWYgdGFzayhzZWxmLCBpZGVudCk6CisgICAgICAgIHdpdGggc2VsZi5yYW5kb21fbXV0ZXg6CisgICAgICAgICAgICBkZWxheSA9IHJhbmRvbS5yYW5kb20oKSAvIDEwMDAwLjAKKyAgICAgICAgdmVyYm9zZV9wcmludCgidGFzayAlcyB3aWxsIHJ1biBmb3IgJXN1cyIgJSAoaWRlbnQsIHJvdW5kKGRlbGF5KjFlNikpKQorICAgICAgICB0aW1lLnNsZWVwKGRlbGF5KQorICAgICAgICB2ZXJib3NlX3ByaW50KCJ0YXNrICVzIGRvbmUiICUgaWRlbnQpCisgICAgICAgIHdpdGggc2VsZi5ydW5uaW5nX211dGV4OgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nIC09IDEKKyAgICAgICAgICAgIGlmIHNlbGYuY3JlYXRlZCA9PSBOVU1UQVNLUyBhbmQgc2VsZi5ydW5uaW5nID09IDA6CisgICAgICAgICAgICAgICAgc2VsZi5kb25lX211dGV4LnJlbGVhc2UoKQorCisgICAgZGVmIHRlc3Rfc3RhcnRpbmdfdGhyZWFkcyhzZWxmKToKKyAgICAgICAgIyBCYXNpYyB0ZXN0IGZvciB0aHJlYWQgY3JlYXRpb24uCisgICAgICAgIGZvciBpIGluIHJhbmdlKE5VTVRBU0tTKToKKyAgICAgICAgICAgIHNlbGYubmV3dGFzaygpCisgICAgICAgIHZlcmJvc2VfcHJpbnQoIndhaXRpbmcgZm9yIHRhc2tzIHRvIGNvbXBsZXRlLi4uIikKKyAgICAgICAgc2VsZi5kb25lX211dGV4LmFjcXVpcmUoKQorICAgICAgICB2ZXJib3NlX3ByaW50KCJhbGwgdGFza3MgZG9uZSIpCisKKyAgICBkZWYgdGVzdF9zdGFja19zaXplKHNlbGYpOgorICAgICAgICAjIFZhcmlvdXMgc3RhY2sgc2l6ZSB0ZXN0cy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aHJlYWQuc3RhY2tfc2l6ZSgpLCAwLCAiaW5pdGlhbCBzdGFjayBzaXplIGlzIG5vdCAwIikKKworICAgICAgICB0aHJlYWQuc3RhY2tfc2l6ZSgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRocmVhZC5zdGFja19zaXplKCksIDAsICJzdGFja19zaXplIG5vdCByZXNldCB0byBkZWZhdWx0IikKKworICAgICAgICBpZiBvcy5uYW1lIG5vdCBpbiAoIm50IiwgIm9zMiIsICJwb3NpeCIpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHNzX3N1cHBvcnRlZCA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGhyZWFkLnN0YWNrX3NpemUoNDA5NikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICB2ZXJib3NlX3ByaW50KCJjYXVnaHQgZXhwZWN0ZWQgVmFsdWVFcnJvciBzZXR0aW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhY2tfc2l6ZSg0MDk2KSIpCisgICAgICAgIGV4Y2VwdCB0aHJlYWQuZXJyb3I6CisgICAgICAgICAgICB0c3Nfc3VwcG9ydGVkID0gRmFsc2UKKyAgICAgICAgICAgIHZlcmJvc2VfcHJpbnQoInBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgY2hhbmdpbmcgdGhyZWFkIHN0YWNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l6ZSIpCisKKyAgICAgICAgaWYgdHNzX3N1cHBvcnRlZDoKKyAgICAgICAgICAgIGZhaWxfbXNnID0gInN0YWNrX3NpemUoJWQpIGZhaWxlZCAtIHNob3VsZCBzdWNjZWVkIgorICAgICAgICAgICAgZm9yIHRzcyBpbiAoMjYyMTQ0LCAweDEwMDAwMCwgMCk6CisgICAgICAgICAgICAgICAgdGhyZWFkLnN0YWNrX3NpemUodHNzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhyZWFkLnN0YWNrX3NpemUoKSwgdHNzLCBmYWlsX21zZyAlIHRzcykKKyAgICAgICAgICAgICAgICB2ZXJib3NlX3ByaW50KCJzdWNjZXNzZnVsbHkgc2V0IHN0YWNrX3NpemUoJWQpIiAlIHRzcykKKworICAgICAgICAgICAgZm9yIHRzcyBpbiAoMjYyMTQ0LCAweDEwMDAwMCk6CisgICAgICAgICAgICAgICAgdmVyYm9zZV9wcmludCgidHJ5aW5nIHN0YWNrX3NpemUgPSAoJWQpIiAlIHRzcykKKyAgICAgICAgICAgICAgICBzZWxmLm5leHRfaWRlbnQgPSAwCisgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVkID0gMAorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE5VTVRBU0tTKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXd0YXNrKCkKKworICAgICAgICAgICAgICAgIHZlcmJvc2VfcHJpbnQoIndhaXRpbmcgZm9yIGFsbCB0YXNrcyB0byBjb21wbGV0ZSIpCisgICAgICAgICAgICAgICAgc2VsZi5kb25lX211dGV4LmFjcXVpcmUoKQorICAgICAgICAgICAgICAgIHZlcmJvc2VfcHJpbnQoImFsbCB0YXNrcyBkb25lIikKKworICAgICAgICAgICAgdGhyZWFkLnN0YWNrX3NpemUoMCkKKworICAgIGRlZiB0ZXN0X19jb3VudChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBfY291bnQoKSBmdW5jdGlvbi4KKyAgICAgICAgb3JpZyA9IHRocmVhZC5fY291bnQoKQorICAgICAgICBtdXQgPSB0aHJlYWQuYWxsb2NhdGVfbG9jaygpCisgICAgICAgIG11dC5hY3F1aXJlKCkKKyAgICAgICAgc3RhcnRlZCA9IFtdCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICBzdGFydGVkLmFwcGVuZChOb25lKQorICAgICAgICAgICAgbXV0LmFjcXVpcmUoKQorICAgICAgICAgICAgbXV0LnJlbGVhc2UoKQorICAgICAgICB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZCh0YXNrLCAoKSkKKyAgICAgICAgd2hpbGUgbm90IHN0YXJ0ZWQ6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhyZWFkLl9jb3VudCgpLCBvcmlnICsgMSkKKyAgICAgICAgIyBBbGxvdyB0aGUgdGFzayB0byBmaW5pc2guCisgICAgICAgIG11dC5yZWxlYXNlKCkKKyAgICAgICAgIyBUaGUgb25seSByZWxpYWJsZSB3YXkgdG8gYmUgc3VyZSB0aGF0IHRoZSB0aHJlYWQgZW5kZWQgZnJvbSB0aGUKKyAgICAgICAgIyBpbnRlcnByZXRlcidzIHBvaW50IG9mIHZpZXcgaXMgdG8gd2FpdCBmb3IgdGhlIGZ1bmN0aW9uIG9iamVjdCB0byBiZQorICAgICAgICAjIGRlc3Ryb3llZC4KKyAgICAgICAgZG9uZSA9IFtdCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYodGFzaywgbGFtYmRhIF86IGRvbmUuYXBwZW5kKE5vbmUpKQorICAgICAgICBkZWwgdGFzaworICAgICAgICB3aGlsZSBub3QgZG9uZToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aHJlYWQuX2NvdW50KCksIG9yaWcpCisKKyAgICBkZWYgdGVzdF9zYXZlX2V4Y2VwdGlvbl9zdGF0ZV9vbl9lcnJvcihzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgIzE0NDc0CisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICBzdGFydGVkLnJlbGVhc2UoKQorICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKKyAgICAgICAgZGVmIG15d3JpdGUoc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJlYWxfd3JpdGUoc2VsZiwgKmFyZ3MpCisgICAgICAgIGMgPSB0aHJlYWQuX2NvdW50KCkKKyAgICAgICAgc3RhcnRlZCA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBzdGRlcnI6CisgICAgICAgICAgICByZWFsX3dyaXRlID0gc3RkZXJyLndyaXRlCisgICAgICAgICAgICBzdGRlcnIud3JpdGUgPSBteXdyaXRlCisgICAgICAgICAgICBzdGFydGVkLmFjcXVpcmUoKQorICAgICAgICAgICAgdGhyZWFkLnN0YXJ0X25ld190aHJlYWQodGFzaywgKCkpCisgICAgICAgICAgICBzdGFydGVkLmFjcXVpcmUoKQorICAgICAgICAgICAgd2hpbGUgdGhyZWFkLl9jb3VudCgpID4gYzoKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlRyYWNlYmFjayIsIHN0ZGVyci5nZXR2YWx1ZSgpKQorCisKK2NsYXNzIEJhcnJpZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG51bV90aHJlYWRzKToKKyAgICAgICAgc2VsZi5udW1fdGhyZWFkcyA9IG51bV90aHJlYWRzCisgICAgICAgIHNlbGYud2FpdGluZyA9IDAKKyAgICAgICAgc2VsZi5jaGVja2luX211dGV4ICA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgc2VsZi5jaGVja291dF9tdXRleCA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgc2VsZi5jaGVja291dF9tdXRleC5hY3F1aXJlKCkKKworICAgIGRlZiBlbnRlcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2luX211dGV4LmFjcXVpcmUoKQorICAgICAgICBzZWxmLndhaXRpbmcgPSBzZWxmLndhaXRpbmcgKyAxCisgICAgICAgIGlmIHNlbGYud2FpdGluZyA9PSBzZWxmLm51bV90aHJlYWRzOgorICAgICAgICAgICAgc2VsZi53YWl0aW5nID0gc2VsZi5udW1fdGhyZWFkcyAtIDEKKyAgICAgICAgICAgIHNlbGYuY2hlY2tvdXRfbXV0ZXgucmVsZWFzZSgpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5jaGVja2luX211dGV4LnJlbGVhc2UoKQorCisgICAgICAgIHNlbGYuY2hlY2tvdXRfbXV0ZXguYWNxdWlyZSgpCisgICAgICAgIHNlbGYud2FpdGluZyA9IHNlbGYud2FpdGluZyAtIDEKKyAgICAgICAgaWYgc2VsZi53YWl0aW5nID09IDA6CisgICAgICAgICAgICBzZWxmLmNoZWNraW5fbXV0ZXgucmVsZWFzZSgpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5jaGVja291dF9tdXRleC5yZWxlYXNlKCkKKworCitjbGFzcyBCYXJyaWVyVGVzdChCYXNpY1RocmVhZFRlc3QpOgorCisgICAgZGVmIHRlc3RfYmFycmllcihzZWxmKToKKyAgICAgICAgc2VsZi5iYXIgPSBCYXJyaWVyKE5VTVRBU0tTKQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBOVU1UQVNLUworICAgICAgICBmb3IgaSBpbiByYW5nZShOVU1UQVNLUyk6CisgICAgICAgICAgICB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZChzZWxmLnRhc2syLCAoaSwpKQorICAgICAgICB2ZXJib3NlX3ByaW50KCJ3YWl0aW5nIGZvciB0YXNrcyB0byBlbmQiKQorICAgICAgICBzZWxmLmRvbmVfbXV0ZXguYWNxdWlyZSgpCisgICAgICAgIHZlcmJvc2VfcHJpbnQoInRhc2tzIGRvbmUiKQorCisgICAgZGVmIHRhc2syKHNlbGYsIGlkZW50KToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNVFJJUFMpOgorICAgICAgICAgICAgaWYgaWRlbnQgPT0gMDoKKyAgICAgICAgICAgICAgICAjIGdpdmUgaXQgYSBnb29kIGNoYW5jZSB0byBlbnRlciB0aGUgbmV4dAorICAgICAgICAgICAgICAgICMgYmFycmllciBiZWZvcmUgdGhlIG90aGVycyBhcmUgYWxsIG91dAorICAgICAgICAgICAgICAgICMgb2YgdGhlIGN1cnJlbnQgb25lCisgICAgICAgICAgICAgICAgZGVsYXkgPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5yYW5kb21fbXV0ZXg6CisgICAgICAgICAgICAgICAgICAgIGRlbGF5ID0gcmFuZG9tLnJhbmRvbSgpIC8gMTAwMDAuMAorICAgICAgICAgICAgdmVyYm9zZV9wcmludCgidGFzayAlcyB3aWxsIHJ1biBmb3IgJXN1cyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAoaWRlbnQsIHJvdW5kKGRlbGF5ICogMWU2KSkpCisgICAgICAgICAgICB0aW1lLnNsZWVwKGRlbGF5KQorICAgICAgICAgICAgdmVyYm9zZV9wcmludCgidGFzayAlcyBlbnRlcmluZyAlcyIgJSAoaWRlbnQsIGkpKQorICAgICAgICAgICAgc2VsZi5iYXIuZW50ZXIoKQorICAgICAgICAgICAgdmVyYm9zZV9wcmludCgidGFzayAlcyBsZWF2aW5nIGJhcnJpZXIiICUgaWRlbnQpCisgICAgICAgIHdpdGggc2VsZi5ydW5uaW5nX211dGV4OgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nIC09IDEKKyAgICAgICAgICAgICMgTXVzdCByZWxlYXNlIG11dGV4IGJlZm9yZSByZWxlYXNpbmcgZG9uZSwgZWxzZSB0aGUgbWFpbiB0aHJlYWQgY2FuCisgICAgICAgICAgICAjIGV4aXQgYW5kIHNldCBtdXRleCB0byBOb25lIGFzIHBhcnQgb2YgZ2xvYmFsIHRlYXJkb3duOyB0aGVuCisgICAgICAgICAgICAjIG11dGV4LnJlbGVhc2UoKSByYWlzZXMgQXR0cmlidXRlRXJyb3IuCisgICAgICAgICAgICBmaW5pc2hlZCA9IHNlbGYucnVubmluZyA9PSAwCisgICAgICAgIGlmIGZpbmlzaGVkOgorICAgICAgICAgICAgc2VsZi5kb25lX211dGV4LnJlbGVhc2UoKQorCisKK2NsYXNzIExvY2tUZXN0cyhsb2NrX3Rlc3RzLkxvY2tUZXN0cyk6CisgICAgbG9ja3R5cGUgPSB0aHJlYWQuYWxsb2NhdGVfbG9jaworCisKK2NsYXNzIFRlc3RGb3JrSW5UaHJlYWQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5yZWFkX2ZkLCBzZWxmLndyaXRlX2ZkID0gb3MucGlwZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwKKyAgICAgICAgICAgICAgICAgICAgICJUaGlzIHRlc3QgaXMgb25seSBhcHByb3ByaWF0ZSBmb3IgUE9TSVgtbGlrZSBzeXN0ZW1zLiIpCisgICAgQHRlc3Rfc3VwcG9ydC5yZWFwX3RocmVhZHMKKyAgICBkZWYgdGVzdF9mb3JraW50aHJlYWQoc2VsZik6CisgICAgICAgIGRlZiB0aHJlYWQxKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpICMgZm9yayBpbiBhIHRocmVhZAorICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgwKSAjIGV4aXQgdGhlIGNoaWxkCisKKyAgICAgICAgICAgIGlmIHBpZCA9PSAwOiAjIGNoaWxkCisgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2VsZi5yZWFkX2ZkKQorICAgICAgICAgICAgICAgIG9zLndyaXRlKHNlbGYud3JpdGVfZmQsICJPSyIpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMCkKKyAgICAgICAgICAgIGVsc2U6ICMgcGFyZW50CisgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2VsZi53cml0ZV9mZCkKKworICAgICAgICB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZCh0aHJlYWQxLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5yZWFkKHNlbGYucmVhZF9mZCwgMiksICJPSyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBmb3JrKCkgaW4gdGhyZWFkIikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuY2xvc2Uoc2VsZi5yZWFkX2ZkKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5jbG9zZShzZWxmLndyaXRlX2ZkKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUaHJlYWRSdW5uaW5nVGVzdHMsIEJhcnJpZXJUZXN0LCBMb2NrVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0Rm9ya0luVGhyZWFkKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxZmRmMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weQpAQCAtMCwwICsxLDc2IEBACisjIFRoaXMgaXMgYSB2YXJpYW50IG9mIHRoZSB2ZXJ5IG9sZCAoZWFybHkgOTAncykgZmlsZQorIyBEZW1vL3RocmVhZHMvYnVnLnB5LiAgSXQgc2ltcGx5IHByb3Zva2VzIGEgbnVtYmVyIG9mIHRocmVhZHMgaW50bworIyB0cnlpbmcgdG8gaW1wb3J0IHRoZSBzYW1lIG1vZHVsZSAiYXQgdGhlIHNhbWUgdGltZSIuCisjIFRoZXJlIGFyZSBubyBwbGVhc2FudCBmYWlsdXJlIG1vZGVzIC0tIG1vc3QgbGlrZWx5IGlzIHRoYXQgUHl0aG9uCisjIGNvbXBsYWlucyBzZXZlcmFsIHRpbWVzIGFib3V0IG1vZHVsZSByYW5kb20gaGF2aW5nIG5vIGF0dHJpYnV0ZQorIyByYW5kcmFuZ2UsIGFuZCB0aGVuIFB5dGhvbiBoYW5ncy4KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBUZXN0RmFpbGVkLCBpbXBvcnRfbW9kdWxlCit0aHJlYWQgPSBpbXBvcnRfbW9kdWxlKCd0aHJlYWQnKQorCitjcml0aWNhbF9zZWN0aW9uID0gdGhyZWFkLmFsbG9jYXRlX2xvY2soKQorZG9uZSA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKworZGVmIHRhc2soKToKKyAgICBnbG9iYWwgTiwgY3JpdGljYWxfc2VjdGlvbiwgZG9uZQorICAgIGltcG9ydCByYW5kb20KKyAgICB4ID0gcmFuZG9tLnJhbmRyYW5nZSgxLCAzKQorICAgIGNyaXRpY2FsX3NlY3Rpb24uYWNxdWlyZSgpCisgICAgTiAtPSAxCisgICAgIyBNdXN0IHJlbGVhc2UgY3JpdGljYWxfc2VjdGlvbiBiZWZvcmUgcmVsZWFzaW5nIGRvbmUsIGVsc2UgdGhlIG1haW4KKyAgICAjIHRocmVhZCBjYW4gZXhpdCBhbmQgc2V0IGNyaXRpY2FsX3NlY3Rpb24gdG8gTm9uZSBhcyBwYXJ0IG9mIGdsb2JhbAorICAgICMgdGVhcmRvd247IHRoZW4gY3JpdGljYWxfc2VjdGlvbi5yZWxlYXNlKCkgcmFpc2VzIEF0dHJpYnV0ZUVycm9yLgorICAgIGZpbmlzaGVkID0gTiA9PSAwCisgICAgY3JpdGljYWxfc2VjdGlvbi5yZWxlYXNlKCkKKyAgICBpZiBmaW5pc2hlZDoKKyAgICAgICAgZG9uZS5yZWxlYXNlKCkKKworZGVmIHRlc3RfaW1wb3J0X2hhbmdlcnMoKToKKyAgICBpbXBvcnQgc3lzCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgInRlc3RpbmcgaW1wb3J0IGhhbmdlcnMgLi4uIiwKKworICAgIGltcG9ydCB0ZXN0LnRocmVhZGVkX2ltcG9ydF9oYW5nZXJzCisgICAgdHJ5OgorICAgICAgICBpZiB0ZXN0LnRocmVhZGVkX2ltcG9ydF9oYW5nZXJzLmVycm9yczoKKyAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQodGVzdC50aHJlYWRlZF9pbXBvcnRfaGFuZ2Vycy5lcnJvcnMpCisgICAgICAgIGVsaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJPSy4iCisgICAgZmluYWxseToKKyAgICAgICAgIyBJbiBjYXNlIHRoaXMgdGVzdCBpcyBydW4gYWdhaW4sIG1ha2Ugc3VyZSB0aGUgaGVscGVyIG1vZHVsZQorICAgICAgICAjIGdldHMgbG9hZGVkIGZyb20gc2NyYXRjaCBhZ2Fpbi4KKyAgICAgICAgZGVsIHN5cy5tb2R1bGVzWyd0ZXN0LnRocmVhZGVkX2ltcG9ydF9oYW5nZXJzJ10KKworIyBUcmlja3k6ICBXaGVuIHJlZ3J0ZXN0IGltcG9ydHMgdGhpcyBtb2R1bGUsIHRoZSB0aHJlYWQgcnVubmluZyByZWdydGVzdAorIyBncmFicyB0aGUgaW1wb3J0IGxvY2sgYW5kIHdvbid0IGxldCBnbyBvZiBpdCB1bnRpbCB0aGlzIG1vZHVsZSByZXR1cm5zLgorIyBBbGwgb3RoZXIgdGhyZWFkcyBhdHRlbXB0aW5nIGFuIGltcG9ydCBoYW5nIGZvciB0aGUgZHVyYXRpb24uICBTaW5jZQorIyB0aGlzIHRlc3Qgc3Bhd25zIHRocmVhZHMgdGhhdCBkbyBsaXR0bGUgKmJ1dCogaW1wb3J0LCB3ZSBjYW4ndCBkbyB0aGF0CisjIHN1Y2Nlc3NmdWxseSB1bnRpbCBhZnRlciB0aGlzIG1vZHVsZSBmaW5pc2hlcyBpbXBvcnRpbmcgYW5kIHJlZ3J0ZXN0CisjIHJlZ2FpbnMgY29udHJvbC4gIFRvIG1ha2UgdGhpcyB3b3JrLCBhIHNwZWNpYWwgY2FzZSB3YXMgYWRkZWQgdG8KKyMgcmVncnRlc3QgdG8gaW52b2tlIGEgbW9kdWxlJ3MgInRlc3RfbWFpbiIgZnVuY3Rpb24gKGlmIGFueSkgYWZ0ZXIKKyMgaW1wb3J0aW5nIGl0LgorCitkZWYgdGVzdF9tYWluKCk6ICAgICAgICAjIG1hZ2ljIG5hbWUhICBzZWUgYWJvdmUKKyAgICBnbG9iYWwgTiwgZG9uZQorCisgICAgaW1wb3J0IGltcAorICAgIGlmIGltcC5sb2NrX2hlbGQoKToKKyAgICAgICAgIyBUaGlzIHRyaWdnZXJzIG9uLCBlLmcuLCBmcm9tIHRlc3QgaW1wb3J0IGF1dG90ZXN0LgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiY2FuJ3QgcnVuIHdoZW4gaW1wb3J0IGxvY2sgaXMgaGVsZCIpCisKKyAgICBkb25lLmFjcXVpcmUoKQorICAgIGZvciBOIGluICgyMCwgNTApICogMzoKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJUcnlpbmciLCBOLCAidGhyZWFkcyAuLi4iLAorICAgICAgICBmb3IgaSBpbiByYW5nZShOKToKKyAgICAgICAgICAgIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKHRhc2ssICgpKQorICAgICAgICBkb25lLmFjcXVpcmUoKQorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIk9LLiIKKyAgICBkb25lLnJlbGVhc2UoKQorCisgICAgdGVzdF9pbXBvcnRfaGFuZ2VycygpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGVkdGVtcGZpbGUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90aHJlYWRlZHRlbXBmaWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZDk2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90aHJlYWRlZHRlbXBmaWxlLnB5CkBAIC0wLDAgKzEsNzggQEAKKyIiIgorQ3JlYXRlIGFuZCBkZWxldGUgRklMRVNfUEVSX1RIUkVBRCB0ZW1wIGZpbGVzICh2aWEgdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSkKK2luIGVhY2ggb2YgTlVNX1RIUkVBRFMgdGhyZWFkcywgcmVjb3JkaW5nIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzIGFuZAorZmFpbHVyZXMuICBBIGZhaWx1cmUgaXMgYSBidWcgaW4gdGVtcGZpbGUsIGFuZCBtYXkgYmUgZHVlIHRvOgorCisrIFRyeWluZyB0byBjcmVhdGUgbW9yZSB0aGFuIG9uZSB0ZW1wZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUuCisrIFRyeWluZyB0byBkZWxldGUgYSB0ZW1wZmlsZSB0aGF0IGRvZXNuJ3Qgc3RpbGwgZXhpc3QuCisrIFNvbWV0aGluZyB3ZSd2ZSBuZXZlciBzZWVuIGJlZm9yZS4KKworQnkgZGVmYXVsdCwgTlVNX1RIUkVBRFMgPT0gMjAgYW5kIEZJTEVTX1BFUl9USFJFQUQgPT0gNTAuICBUaGlzIGlzIGVub3VnaCB0bworY3JlYXRlIGFib3V0IDE1MCBmYWlsdXJlcyBwZXIgcnVuIHVuZGVyIFdpbjk4U0UgaW4gMi4wLCBhbmQgcnVucyBwcmV0dHkKK3F1aWNrbHkuIEd1aWRvIHJlcG9ydHMgbmVlZGluZyB0byBib29zdCBGSUxFU19QRVJfVEhSRUFEIHRvIDUwMCBiZWZvcmUKK3Byb3Zva2luZyBhIDIuMCBmYWlsdXJlIHVuZGVyIExpbnV4LgorIiIiCisKK05VTV9USFJFQURTID0gMjAKK0ZJTEVTX1BFUl9USFJFQUQgPSA1MAorCitpbXBvcnQgdGVtcGZpbGUKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdGhyZWFkaW5nX3NldHVwLCB0aHJlYWRpbmdfY2xlYW51cCwgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCit0aHJlYWRpbmcgPSBpbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgU3RyaW5nSU8KK2Zyb20gdHJhY2ViYWNrIGltcG9ydCBwcmludF9leGMKKworc3RhcnRFdmVudCA9IHRocmVhZGluZy5FdmVudCgpCisKK2NsYXNzIFRlbXBGaWxlR3JlZWR5KHRocmVhZGluZy5UaHJlYWQpOgorICAgIGVycm9yX2NvdW50ID0gMAorICAgIG9rX2NvdW50ID0gMAorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5lcnJvcnMgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHN0YXJ0RXZlbnQud2FpdCgpCisgICAgICAgIGZvciBpIGluIHJhbmdlKEZJTEVTX1BFUl9USFJFQUQpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCJ3K2IiKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JfY291bnQgKz0gMQorICAgICAgICAgICAgICAgIHByaW50X2V4YyhmaWxlPXNlbGYuZXJyb3JzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLm9rX2NvdW50ICs9IDEKKworCitjbGFzcyBUaHJlYWRlZFRlbXBGaWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbWFpbihzZWxmKToKKyAgICAgICAgdGhyZWFkcyA9IFtdCisgICAgICAgIHRocmVhZF9pbmZvID0gdGhyZWFkaW5nX3NldHVwKCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShOVU1fVEhSRUFEUyk6CisgICAgICAgICAgICB0ID0gVGVtcEZpbGVHcmVlZHkoKQorICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodCkKKyAgICAgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgIHN0YXJ0RXZlbnQuc2V0KCkKKworICAgICAgICBvayA9IDAKKyAgICAgICAgZXJyb3JzID0gW10KKyAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICBvayArPSB0Lm9rX2NvdW50CisgICAgICAgICAgICBpZiB0LmVycm9yX2NvdW50OgorICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoc3RyKHQuZ2V0TmFtZSgpKSArIHN0cih0LmVycm9ycy5nZXR2YWx1ZSgpKSkKKworICAgICAgICB0aHJlYWRpbmdfY2xlYW51cCgqdGhyZWFkX2luZm8pCisKKyAgICAgICAgbXNnID0gIkVycm9yczogZXJyb3JzICVkIG9rICVkXG4lcyIgJSAobGVuKGVycm9ycyksIG9rLAorICAgICAgICAgICAgJ1xuJy5qb2luKGVycm9ycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3JzLCBbXSwgbXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9rLCBOVU1fVEhSRUFEUyAqIEZJTEVTX1BFUl9USFJFQUQpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoVGhyZWFkZWRUZW1wRmlsZVRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGluZy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjA0Y2QzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5CkBAIC0wLDAgKzEsNzc4IEBACisjIFZlcnkgcnVkaW1lbnRhcnkgdGVzdCBvZiB0aHJlYWRpbmcgbW9kdWxlCisKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZQorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKKworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHJlCitpbXBvcnQgc3lzCit0aHJlYWQgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWQnKQordGhyZWFkaW5nID0gdGVzdC50ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gdGVzdCBpbXBvcnQgbG9ja190ZXN0cworCisjIEEgdHJpdmlhbCBtdXRhYmxlIGNvdW50ZXIuCitjbGFzcyBDb3VudGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnZhbHVlID0gMAorICAgIGRlZiBpbmMoc2VsZik6CisgICAgICAgIHNlbGYudmFsdWUgKz0gMQorICAgIGRlZiBkZWMoc2VsZik6CisgICAgICAgIHNlbGYudmFsdWUgLT0gMQorICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKK2NsYXNzIFRlc3RUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHRlc3RjYXNlLCBzZW1hLCBtdXRleCwgbnJ1bm5pbmcpOgorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYsIG5hbWU9bmFtZSkKKyAgICAgICAgc2VsZi50ZXN0Y2FzZSA9IHRlc3RjYXNlCisgICAgICAgIHNlbGYuc2VtYSA9IHNlbWEKKyAgICAgICAgc2VsZi5tdXRleCA9IG11dGV4CisgICAgICAgIHNlbGYubnJ1bm5pbmcgPSBucnVubmluZworCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgZGVsYXkgPSByYW5kb20ucmFuZG9tKCkgLyAxMDAwMC4wCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAndGFzayAlcyB3aWxsIHJ1biBmb3IgJS4xZiB1c2VjJyAlICgKKyAgICAgICAgICAgICAgICBzZWxmLm5hbWUsIGRlbGF5ICogMWU2KQorCisgICAgICAgIHdpdGggc2VsZi5zZW1hOgorICAgICAgICAgICAgd2l0aCBzZWxmLm11dGV4OgorICAgICAgICAgICAgICAgIHNlbGYubnJ1bm5pbmcuaW5jKCkKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCBzZWxmLm5ydW5uaW5nLmdldCgpLCAndGFza3MgYXJlIHJ1bm5pbmcnCisgICAgICAgICAgICAgICAgc2VsZi50ZXN0Y2FzZS5hc3NlcnRUcnVlKHNlbGYubnJ1bm5pbmcuZ2V0KCkgPD0gMykKKworICAgICAgICAgICAgdGltZS5zbGVlcChkZWxheSkKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ3Rhc2snLCBzZWxmLm5hbWUsICdkb25lJworCisgICAgICAgICAgICB3aXRoIHNlbGYubXV0ZXg6CisgICAgICAgICAgICAgICAgc2VsZi5ucnVubmluZy5kZWMoKQorICAgICAgICAgICAgICAgIHNlbGYudGVzdGNhc2UuYXNzZXJ0VHJ1ZShzZWxmLm5ydW5uaW5nLmdldCgpID49IDApCisgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJyVzIGlzIGZpbmlzaGVkLiAlZCB0YXNrcyBhcmUgcnVubmluZycgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5hbWUsIHNlbGYubnJ1bm5pbmcuZ2V0KCkpCisKK2NsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl90aHJlYWRzID0gdGVzdC50ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdGVzdC50ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCisgICAgICAgIHRlc3QudGVzdF9zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorCisKK2NsYXNzIFRocmVhZFRlc3RzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICAjIENyZWF0ZSBhIGJ1bmNoIG9mIHRocmVhZHMsIGxldCBlYWNoIGRvIHNvbWUgd29yaywgd2FpdCB1bnRpbCBhbGwgYXJlCisgICAgIyBkb25lLgorICAgIGRlZiB0ZXN0X3ZhcmlvdXNfb3BzKHNlbGYpOgorICAgICAgICAjIFRoaXMgdGFrZXMgYWJvdXQgbi8zIHNlY29uZHMgdG8gcnVuIChhYm91dCBuLzMgY2x1bXBzIG9mIHRhc2tzLAorICAgICAgICAjIHRpbWVzIGFib3V0IDEgc2Vjb25kIHBlciBjbHVtcCkuCisgICAgICAgIE5VTVRBU0tTID0gMTAKKworICAgICAgICAjIG5vIG1vcmUgdGhhbiAzIG9mIHRoZSAxMCBjYW4gcnVuIGF0IG9uY2UKKyAgICAgICAgc2VtYSA9IHRocmVhZGluZy5Cb3VuZGVkU2VtYXBob3JlKHZhbHVlPTMpCisgICAgICAgIG11dGV4ID0gdGhyZWFkaW5nLlJMb2NrKCkKKyAgICAgICAgbnVtcnVubmluZyA9IENvdW50ZXIoKQorCisgICAgICAgIHRocmVhZHMgPSBbXQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKE5VTVRBU0tTKToKKyAgICAgICAgICAgIHQgPSBUZXN0VGhyZWFkKCI8dGhyZWFkICVkPiIlaSwgc2VsZiwgc2VtYSwgbXV0ZXgsIG51bXJ1bm5pbmcpCisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmlkZW50LCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCc8VGVzdFRocmVhZFwoLiosIGluaXRpYWxcKT4nLCByZXByKHQpKSkKKyAgICAgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnd2FpdGluZyBmb3IgYWxsIHRhc2tzIHRvIGNvbXBsZXRlJworICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgdC5qb2luKE5VTVRBU0tTKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0LmlzX2FsaXZlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHQuaWRlbnQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuaWRlbnQgaXMgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgnPFRlc3RUaHJlYWRcKC4qLCBcdysgLT9cZCtcKT4nLCByZXByKHQpKSkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICdhbGwgdGFza3MgZG9uZScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1ydW5uaW5nLmdldCgpLCAwKQorCisgICAgZGVmIHRlc3RfaWRlbnRfb2Zfbm9fdGhyZWFkaW5nX3RocmVhZHMoc2VsZik6CisgICAgICAgICMgVGhlIGlkZW50IHN0aWxsIG11c3Qgd29yayBmb3IgdGhlIG1haW4gdGhyZWFkIGFuZCBkdW1teSB0aHJlYWRzLgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRocmVhZGluZy5jdXJyZW50VGhyZWFkKCkuaWRlbnQgaXMgTm9uZSkKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIGlkZW50LmFwcGVuZCh0aHJlYWRpbmcuY3VycmVudFRocmVhZCgpLmlkZW50KQorICAgICAgICAgICAgZG9uZS5zZXQoKQorICAgICAgICBkb25lID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgaWRlbnQgPSBbXQorICAgICAgICB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZChmLCAoKSkKKyAgICAgICAgZG9uZS53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpZGVudFswXSBpcyBOb25lKQorICAgICAgICAjIEtpbGwgdGhlICJpbW1vcnRhbCIgX0R1bW15VGhyZWFkCisgICAgICAgIGRlbCB0aHJlYWRpbmcuX2FjdGl2ZVtpZGVudFswXV0KKworICAgICMgcnVuIHdpdGggYSBzbWFsbChpc2gpIHRocmVhZCBzdGFjayBzaXplICgyNTZrQikKKyAgICBkZWYgdGVzdF92YXJpb3VzX29wc19zbWFsbF9zdGFjayhzZWxmKToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICd3aXRoIDI1NmtCIHRocmVhZCBzdGFjayBzaXplLi4uJworICAgICAgICB0cnk6CisgICAgICAgICAgICB0aHJlYWRpbmcuc3RhY2tfc2l6ZSgyNjIxNDQpCisgICAgICAgIGV4Y2VwdCB0aHJlYWQuZXJyb3I6CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICdwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IGNoYW5naW5nIHRocmVhZCBzdGFjayBzaXplJworICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYudGVzdF92YXJpb3VzX29wcygpCisgICAgICAgIHRocmVhZGluZy5zdGFja19zaXplKDApCisKKyAgICAjIHJ1biB3aXRoIGEgbGFyZ2UgdGhyZWFkIHN0YWNrIHNpemUgKDFNQikKKyAgICBkZWYgdGVzdF92YXJpb3VzX29wc19sYXJnZV9zdGFjayhzZWxmKToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICd3aXRoIDFNQiB0aHJlYWQgc3RhY2sgc2l6ZS4uLicKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGhyZWFkaW5nLnN0YWNrX3NpemUoMHgxMDAwMDApCisgICAgICAgIGV4Y2VwdCB0aHJlYWQuZXJyb3I6CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICdwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IGNoYW5naW5nIHRocmVhZCBzdGFjayBzaXplJworICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYudGVzdF92YXJpb3VzX29wcygpCisgICAgICAgIHRocmVhZGluZy5zdGFja19zaXplKDApCisKKyAgICBkZWYgdGVzdF9mb3JlaWduX3RocmVhZChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGEgImZvcmVpZ24iIHRocmVhZCBjYW4gdXNlIHRoZSB0aHJlYWRpbmcgbW9kdWxlLgorICAgICAgICBkZWYgZihtdXRleCk6CisgICAgICAgICAgICAjIENhbGxpbmcgY3VycmVudF90aHJlYWQoKSBmb3JjZXMgYW4gZW50cnkgZm9yIHRoZSBmb3JlaWduCisgICAgICAgICAgICAjIHRocmVhZCB0byBnZXQgbWFkZSBpbiB0aGUgdGhyZWFkaW5nLl9hY3RpdmUgbWFwLgorICAgICAgICAgICAgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkKKyAgICAgICAgICAgIG11dGV4LnJlbGVhc2UoKQorCisgICAgICAgIG11dGV4ID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBtdXRleC5hY3F1aXJlKCkKKyAgICAgICAgdGlkID0gdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoZiwgKG11dGV4LCkpCisgICAgICAgICMgV2FpdCBmb3IgdGhlIHRocmVhZCB0byBmaW5pc2guCisgICAgICAgIG11dGV4LmFjcXVpcmUoKQorICAgICAgICBzZWxmLmFzc2VydEluKHRpZCwgdGhyZWFkaW5nLl9hY3RpdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0aHJlYWRpbmcuX2FjdGl2ZVt0aWRdLCB0aHJlYWRpbmcuX0R1bW15VGhyZWFkKQorICAgICAgICBkZWwgdGhyZWFkaW5nLl9hY3RpdmVbdGlkXQorCisgICAgIyBQeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjKCkgaXMgYSBDUHl0aG9uLW9ubHkgZ2ltbWljaywgbm90IChjdXJyZW50bHkpCisgICAgIyBleHBvc2VkIGF0IHRoZSBQeXRob24gbGV2ZWwuICBUaGlzIHRlc3QgcmVsaWVzIG9uIGN0eXBlcyB0byBnZXQgYXQgaXQuCisgICAgZGVmIHRlc3RfUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4YyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGN0eXBlcworICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJ0ZXN0X1B5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGMgY2FuJ3QgaW1wb3J0IGN0eXBlcyIKKyAgICAgICAgICAgIHJldHVybiAgIyBjYW4ndCBkbyBhbnl0aGluZworCisgICAgICAgIHNldF9hc3luY19leGMgPSBjdHlwZXMucHl0aG9uYXBpLlB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGMKKworICAgICAgICBjbGFzcyBBc3luY0V4YyhFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGV4Y2VwdGlvbiA9IGN0eXBlcy5weV9vYmplY3QoQXN5bmNFeGMpCisKKyAgICAgICAgIyBGaXJzdCBjaGVjayBpdCB3b3JrcyB3aGVuIHNldHRpbmcgdGhlIGV4Y2VwdGlvbiBmcm9tIHRoZSBzYW1lIHRocmVhZC4KKyAgICAgICAgdGlkID0gdGhyZWFkLmdldF9pZGVudCgpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gc2V0X2FzeW5jX2V4YyhjdHlwZXMuY19sb25nKHRpZCksIGV4Y2VwdGlvbikKKyAgICAgICAgICAgICMgVGhlIGV4Y2VwdGlvbiBpcyBhc3luYywgc28gd2UgbWlnaHQgaGF2ZSB0byBrZWVwIHRoZSBWTSBidXN5IHVudGlsCisgICAgICAgICAgICAjIGl0IG5vdGljZXMuCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEFzeW5jRXhjOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYnV0IGl0IHJlZmxlY3RzIHRoZSBpbnRlbnQuIElmIHdlIHdhbnRlZAorICAgICAgICAgICAgIyB0byBiZSBzbWFydGVyIHRoZSBhYm92ZSBsb29wIHdvdWxkbid0IGJlIGluZmluaXRlLgorICAgICAgICAgICAgc2VsZi5mYWlsKCJBc3luY0V4YyBub3QgcmFpc2VkIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDEpICMgb25lIHRocmVhZCBzdGF0ZSBtb2RpZmllZAorICAgICAgICBleGNlcHQgVW5ib3VuZExvY2FsRXJyb3I6CisgICAgICAgICAgICAjIFRoZSBleGNlcHRpb24gd2FzIHJhaXNlZCB0b28gcXVpY2tseSBmb3IgdXMgdG8gZ2V0IHRoZSByZXN1bHQuCisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBgd29ya2VyX3N0YXJ0ZWRgIGlzIHNldCBieSB0aGUgdGhyZWFkIHdoZW4gaXQncyBpbnNpZGUgYSB0cnkvZXhjZXB0CisgICAgICAgICMgYmxvY2sgd2FpdGluZyB0byBjYXRjaCB0aGUgYXN5bmNocm9ub3VzbHkgc2V0IEFzeW5jRXhjIGV4Y2VwdGlvbi4KKyAgICAgICAgIyBgd29ya2VyX3Nhd19leGNlcHRpb25gIGlzIHNldCBieSB0aGUgdGhyZWFkIHVwb24gY2F0Y2hpbmcgdGhhdAorICAgICAgICAjIGV4Y2VwdGlvbi4KKyAgICAgICAgd29ya2VyX3N0YXJ0ZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICB3b3JrZXJfc2F3X2V4Y2VwdGlvbiA9IHRocmVhZGluZy5FdmVudCgpCisKKyAgICAgICAgY2xhc3MgV29ya2VyKHRocmVhZGluZy5UaHJlYWQpOgorICAgICAgICAgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmlkID0gdGhyZWFkLmdldF9pZGVudCgpCisgICAgICAgICAgICAgICAgc2VsZi5maW5pc2hlZCA9IEZhbHNlCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJfc3RhcnRlZC5zZXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgICAgICAgICAgICAgZXhjZXB0IEFzeW5jRXhjOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICB3b3JrZXJfc2F3X2V4Y2VwdGlvbi5zZXQoKQorCisgICAgICAgIHQgPSBXb3JrZXIoKQorICAgICAgICB0LmRhZW1vbiA9IFRydWUgIyBzbyBpZiB0aGlzIGZhaWxzLCB3ZSBkb24ndCBoYW5nIFB5dGhvbiBhdCBzaHV0ZG93bgorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICIgICAgc3RhcnRlZCB3b3JrZXIgdGhyZWFkIgorCisgICAgICAgICMgVHJ5IGEgdGhyZWFkIGlkIHRoYXQgZG9lc24ndCBtYWtlIHNlbnNlLgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIiAgICB0cnlpbmcgbm9uc2Vuc2ljYWwgdGhyZWFkIGlkIgorICAgICAgICByZXN1bHQgPSBzZXRfYXN5bmNfZXhjKGN0eXBlcy5jX2xvbmcoLTEpLCBleGNlcHRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAwKSAgIyBubyB0aHJlYWQgc3RhdGVzIG1vZGlmaWVkCisKKyAgICAgICAgIyBOb3cgcmFpc2UgYW4gZXhjZXB0aW9uIGluIHRoZSB3b3JrZXIgdGhyZWFkLgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgIiAgICB3YWl0aW5nIGZvciB3b3JrZXIgdGhyZWFkIHRvIGdldCBzdGFydGVkIgorICAgICAgICByZXQgPSB3b3JrZXJfc3RhcnRlZC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJldCkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICIgICAgdmVyaWZ5aW5nIHdvcmtlciBoYXNuJ3QgZXhpdGVkIgorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQuZmluaXNoZWQpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiICAgIGF0dGVtcHRpbmcgdG8gcmFpc2UgYXN5bmNoIGV4Y2VwdGlvbiBpbiB3b3JrZXIiCisgICAgICAgIHJlc3VsdCA9IHNldF9hc3luY19leGMoY3R5cGVzLmNfbG9uZyh0LmlkKSwgZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMSkgIyBvbmUgdGhyZWFkIHN0YXRlIG1vZGlmaWVkCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiICAgIHdhaXRpbmcgZm9yIHdvcmtlciB0byBzYXkgaXQgY2F1Z2h0IHRoZSBleGNlcHRpb24iCisgICAgICAgIHdvcmtlcl9zYXdfZXhjZXB0aW9uLndhaXQodGltZW91dD0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZmluaXNoZWQpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiICAgIGFsbCBPSyAtLSBqb2luaW5nIHdvcmtlciIKKyAgICAgICAgaWYgdC5maW5pc2hlZDoKKyAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICMgZWxzZSB0aGUgdGhyZWFkIGlzIHN0aWxsIHJ1bm5pbmcsIGFuZCB3ZSBoYXZlIG5vIHdheSB0byBraWxsIGl0CisKKyAgICBkZWYgdGVzdF9saW1ib19jbGVhbnVwKHNlbGYpOgorICAgICAgICAjIElzc3VlIDc0ODE6IEZhaWx1cmUgdG8gc3RhcnQgdGhyZWFkIHNob3VsZCBjbGVhbnVwIHRoZSBsaW1ibyBtYXAuCisgICAgICAgIGRlZiBmYWlsX25ld190aHJlYWQoKmFyZ3MpOgorICAgICAgICAgICAgcmFpc2UgdGhyZWFkLmVycm9yKCkKKyAgICAgICAgX3N0YXJ0X25ld190aHJlYWQgPSB0aHJlYWRpbmcuX3N0YXJ0X25ld190aHJlYWQKKyAgICAgICAgdGhyZWFkaW5nLl9zdGFydF9uZXdfdGhyZWFkID0gZmFpbF9uZXdfdGhyZWFkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1sYW1iZGE6IE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0aHJlYWQuZXJyb3IsIHQuc3RhcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKAorICAgICAgICAgICAgICAgIHQgaW4gdGhyZWFkaW5nLl9saW1ibywKKyAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNsZWFudXAgX2xpbWJvIG1hcCBvbiBmYWlsdXJlIG9mIFRocmVhZC5zdGFydCgpLiIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0aHJlYWRpbmcuX3N0YXJ0X25ld190aHJlYWQgPSBfc3RhcnRfbmV3X3RocmVhZAorCisgICAgZGVmIHRlc3RfZmluYWxpemVfcnVubm5pbmdfdGhyZWFkKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE0MDI6IHRoZSBQeUdJTFN0YXRlX0Vuc3VyZSAvIF9SZWxlYXNlIGZ1bmN0aW9ucyBtYXkgYmUgY2FsbGVkCisgICAgICAgICMgdmVyeSBsYXRlIG9uIHB5dGhvbiBleGl0OiBvbiBkZWFsbG9jYXRpb24gb2YgYSBydW5uaW5nIHRocmVhZCBmb3IKKyAgICAgICAgIyBleGFtcGxlLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgY3R5cGVzCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoInRlc3RfZmluYWxpemVfd2l0aF9ydW5ubmluZ190aHJlYWQgY2FuJ3QgaW1wb3J0IGN0eXBlcyIpCisgICAgICAgICAgICByZXR1cm4gICMgY2FuJ3QgZG8gYW55dGhpbmcKKworICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgY3R5cGVzLCBzeXMsIHRpbWUsIHRocmVhZAorCisgICAgICAgICAgICAjIFRoaXMgbG9jayBpcyB1c2VkIGFzIGEgc2ltcGxlIGV2ZW50IHZhcmlhYmxlLgorICAgICAgICAgICAgcmVhZHkgPSB0aHJlYWQuYWxsb2NhdGVfbG9jaygpCisgICAgICAgICAgICByZWFkeS5hY3F1aXJlKCkKKworICAgICAgICAgICAgIyBNb2R1bGUgZ2xvYmFscyBhcmUgY2xlYXJlZCBiZWZvcmUgX19kZWxfXyBpcyBydW4KKyAgICAgICAgICAgICMgU28gd2Ugc2F2ZSB0aGUgZnVuY3Rpb25zIGluIGNsYXNzIGRpY3QKKyAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgZW5zdXJlID0gY3R5cGVzLnB5dGhvbmFwaS5QeUdJTFN0YXRlX0Vuc3VyZQorICAgICAgICAgICAgICAgIHJlbGVhc2UgPSBjdHlwZXMucHl0aG9uYXBpLlB5R0lMU3RhdGVfUmVsZWFzZQorICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHNlbGYuZW5zdXJlKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWxlYXNlKHN0YXRlKQorCisgICAgICAgICAgICBkZWYgd2FpdGluZ1RocmVhZCgpOgorICAgICAgICAgICAgICAgIHggPSBDKCkKKyAgICAgICAgICAgICAgICByZWFkeS5yZWxlYXNlKCkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEwMCkKKworICAgICAgICAgICAgdGhyZWFkLnN0YXJ0X25ld190aHJlYWQod2FpdGluZ1RocmVhZCwgKCkpCisgICAgICAgICAgICByZWFkeS5hY3F1aXJlKCkgICMgQmUgc3VyZSB0aGUgb3RoZXIgdGhyZWFkIGlzIHdhaXRpbmcuCisgICAgICAgICAgICBzeXMuZXhpdCg0MikKKyAgICAgICAgICAgICIiIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDQyKQorCisgICAgZGVmIHRlc3RfZmluYWxpemVfd2l0aF90cmFjZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZTE3MzM3NTcKKyAgICAgICAgIyBBdm9pZCBhIGRlYWRsb2NrIHdoZW4gc3lzLnNldHRyYWNlIHN0ZXBzIGludG8gdGhyZWFkaW5nLl9zaHV0ZG93bgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgc3lzLCB0aHJlYWRpbmcKKworICAgICAgICAgICAgIyBBIGRlYWRsb2NrLWtpbGxlciwgdG8gcHJldmVudCB0aGUKKyAgICAgICAgICAgICMgdGVzdHN1aXRlIHRvIGhhbmcgZm9yZXZlcgorICAgICAgICAgICAgZGVmIGtpbGxlcigpOgorICAgICAgICAgICAgICAgIGltcG9ydCBvcywgdGltZQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMikKKyAgICAgICAgICAgICAgICBwcmludCAncHJvZ3JhbSBibG9ja2VkOyBhYm9ydGluZycKKyAgICAgICAgICAgICAgICBvcy5fZXhpdCgyKQorICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWtpbGxlcikKKyAgICAgICAgICAgIHQuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgICAgICMgVGhpcyBpcyB0aGUgdHJhY2UgZnVuY3Rpb24KKyAgICAgICAgICAgIGRlZiBmdW5jKGZyYW1lLCBldmVudCwgYXJnKToKKyAgICAgICAgICAgICAgICB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKQorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jCisKKyAgICAgICAgICAgIHN5cy5zZXR0cmFjZShmdW5jKQorICAgICAgICAgICAgIiIiXSwKKyAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgcmMgPSBwLnJldHVybmNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyYyA9PSAyLCAiaW50ZXJwcmV0ZWQgd2FzIGJsb2NrZWQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmMgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGVycm9yOiAiICsgcmVwcihzdGRlcnIpKQorCisgICAgZGVmIHRlc3Rfam9pbl9ub25kYWVtb25fb25fc2h1dGRvd24oc2VsZik6CisgICAgICAgICMgSXNzdWUgMTcyMjM0NAorICAgICAgICAjIFJhaXNpbmcgU3lzdGVtRXhpdCBza2lwcGVkIHRocmVhZGluZy5fc2h1dGRvd24KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIiJpZiAxOgorICAgICAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgICAgICBmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCisKKyAgICAgICAgICAgICAgICBkZWYgY2hpbGQoKToKKyAgICAgICAgICAgICAgICAgICAgc2xlZXAoMSkKKyAgICAgICAgICAgICAgICAgICAgIyBBcyBhIG5vbi1kYWVtb24gdGhyZWFkIHdlIFNIT1VMRCB3YWtlIHVwIGFuZCBub3RoaW5nCisgICAgICAgICAgICAgICAgICAgICMgc2hvdWxkIGJlIHRvcm4gZG93biB5ZXQKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIldva2UgdXAsIHNsZWVwIGZ1bmN0aW9uIGlzOiIsIHNsZWVwCisKKyAgICAgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1jaGlsZCkuc3RhcnQoKQorICAgICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKKyAgICAgICAgICAgICIiIl0sCisgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnN0cmlwKCksCisgICAgICAgICAgICAiV29rZSB1cCwgc2xlZXAgZnVuY3Rpb24gaXM6IDxidWlsdC1pbiBmdW5jdGlvbiBzbGVlcD4iKQorICAgICAgICBzdGRlcnIgPSByZS5zdWIociJeXFtcZCsgcmVmc1xdIiwgIiIsIHN0ZGVyciwgcmUuTVVMVElMSU5FKS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLCAiIikKKworICAgIGRlZiB0ZXN0X2VudW1lcmF0ZV9hZnRlcl9qb2luKHNlbGYpOgorICAgICAgICAjIFRyeSBoYXJkIHRvIHRyaWdnZXIgIzE3MDM0NDg6IGEgdGhyZWFkIGlzIHN0aWxsIHJldHVybmVkIGluCisgICAgICAgICMgdGhyZWFkaW5nLmVudW1lcmF0ZSgpIGFmdGVyIGl0IGhhcyBiZWVuIGpvaW4oKWVkLgorICAgICAgICBlbnVtID0gdGhyZWFkaW5nLmVudW1lcmF0ZQorICAgICAgICBvbGRfaW50ZXJ2YWwgPSBzeXMuZ2V0Y2hlY2tpbnRlcnZhbCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgxLCAxMDApOgorICAgICAgICAgICAgICAgICMgVHJ5IGEgY291cGxlIHRpbWVzIGF0IGVhY2ggdGhyZWFkLXN3aXRjaGluZyBpbnRlcnZhbAorICAgICAgICAgICAgICAgICMgdG8gZ2V0IG1vcmUgaW50ZXJsZWF2aW5ncy4KKyAgICAgICAgICAgICAgICBzeXMuc2V0Y2hlY2tpbnRlcnZhbChpIC8vIDUpCisgICAgICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWxhbWJkYTogTm9uZSkKKyAgICAgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICAgICAgICAgIGwgPSBlbnVtKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHQsIGwsCisgICAgICAgICAgICAgICAgICAgICIjMTcwMzQ0OCB0cmlnZ2VyZWQgYWZ0ZXIgJWQgdHJpYWxzOiAlcyIgJSAoaSwgbCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc2V0Y2hlY2tpbnRlcnZhbChvbGRfaW50ZXJ2YWwpCisKKyAgICBkZWYgdGVzdF9ub19yZWZjeWNsZV90aHJvdWdoX3RhcmdldChzZWxmKToKKyAgICAgICAgY2xhc3MgUnVuU2VsZkZ1bmN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2hvdWxkX3JhaXNlKToKKyAgICAgICAgICAgICAgICAjIFRoZSBsaW5rcyBpbiB0aGlzIHJlZmN5Y2xlIGZyb20gVGhyZWFkIGJhY2sgdG8gc2VsZgorICAgICAgICAgICAgICAgICMgc2hvdWxkIGJlIGNsZWFuZWQgdXAgd2hlbiB0aGUgdGhyZWFkIGNvbXBsZXRlcy4KKyAgICAgICAgICAgICAgICBzZWxmLnNob3VsZF9yYWlzZSA9IHNob3VsZF9yYWlzZQorICAgICAgICAgICAgICAgIHNlbGYudGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5fcnVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShzZWxmLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJncz17J3lldF9hbm90aGVyJzpzZWxmfSkKKyAgICAgICAgICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCisKKyAgICAgICAgICAgIGRlZiBfcnVuKHNlbGYsIG90aGVyX3JlZiwgeWV0X2Fub3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc2hvdWxkX3JhaXNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CisKKyAgICAgICAgY3ljbGljX29iamVjdCA9IFJ1blNlbGZGdW5jdGlvbihzaG91bGRfcmFpc2U9RmFsc2UpCisgICAgICAgIHdlYWtfY3ljbGljX29iamVjdCA9IHdlYWtyZWYucmVmKGN5Y2xpY19vYmplY3QpCisgICAgICAgIGN5Y2xpY19vYmplY3QudGhyZWFkLmpvaW4oKQorICAgICAgICBkZWwgY3ljbGljX29iamVjdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHdlYWtfY3ljbGljX29iamVjdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0oJyVkIHJlZmVyZW5jZXMgc3RpbGwgYXJvdW5kJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZ2V0cmVmY291bnQod2Vha19jeWNsaWNfb2JqZWN0KCkpKSkKKworICAgICAgICByYWlzaW5nX2N5Y2xpY19vYmplY3QgPSBSdW5TZWxmRnVuY3Rpb24oc2hvdWxkX3JhaXNlPVRydWUpCisgICAgICAgIHdlYWtfcmFpc2luZ19jeWNsaWNfb2JqZWN0ID0gd2Vha3JlZi5yZWYocmFpc2luZ19jeWNsaWNfb2JqZWN0KQorICAgICAgICByYWlzaW5nX2N5Y2xpY19vYmplY3QudGhyZWFkLmpvaW4oKQorICAgICAgICBkZWwgcmFpc2luZ19jeWNsaWNfb2JqZWN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgd2Vha19yYWlzaW5nX2N5Y2xpY19vYmplY3QoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9KCclZCByZWZlcmVuY2VzIHN0aWxsIGFyb3VuZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmdldHJlZmNvdW50KHdlYWtfcmFpc2luZ19jeWNsaWNfb2JqZWN0KCkpKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICd0ZXN0IG5lZWRzIGZvcmsoKScpCisgICAgZGVmIHRlc3RfZHVtbXlfdGhyZWFkX2FmdGVyX2Zvcmsoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE0MzA4OiBhIGR1bW15IHRocmVhZCBpbiB0aGUgYWN0aXZlIGxpc3QgZG9lc24ndCBtZXNzIHVwCisgICAgICAgICMgdGhlIGFmdGVyLWZvcmsgbWVjaGFuaXNtLgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWQsIHRocmVhZGluZywgb3MsIHRpbWUKKworICAgICAgICAgICAgZGVmIGJhY2tncm91bmRfdGhyZWFkKGV2dCk6CisgICAgICAgICAgICAgICAgIyBDcmVhdGVzIGFuZCByZWdpc3RlcnMgdGhlIF9EdW1teVRocmVhZCBpbnN0YW5jZQorICAgICAgICAgICAgICAgIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpCisgICAgICAgICAgICAgICAgZXZ0LnNldCgpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgICAgICAgICAgZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgICAgIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKGJhY2tncm91bmRfdGhyZWFkLCAoZXZ0LCkpCisgICAgICAgICAgICBldnQud2FpdCgpCisgICAgICAgICAgICBhc3NlcnQgdGhyZWFkaW5nLmFjdGl2ZV9jb3VudCgpID09IDIsIHRocmVhZGluZy5hY3RpdmVfY291bnQoKQorICAgICAgICAgICAgaWYgb3MuZm9yaygpID09IDA6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHRocmVhZGluZy5hY3RpdmVfY291bnQoKSA9PSAxLCB0aHJlYWRpbmcuYWN0aXZlX2NvdW50KCkKKyAgICAgICAgICAgICAgICBvcy5fZXhpdCgwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcy53YWl0KCkKKyAgICAgICAgIiIiCisgICAgICAgIF8sIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCAnJykKKworCitjbGFzcyBUaHJlYWRKb2luT25TaHV0ZG93bihCYXNlVGVzdENhc2UpOgorCisgICAgIyBCZXR3ZWVuIGZvcmsoKSBhbmQgZXhlYygpLCBvbmx5IGFzeW5jLXNhZmUgZnVuY3Rpb25zIGFyZSBhbGxvd2VkIChpc3N1ZXMKKyAgICAjICMxMjMxNiBhbmQgIzExODcwKSwgYW5kIGZvcmsoKSBmcm9tIGEgd29ya2VyIHRocmVhZCBpcyBrbm93biB0byB0cmlnZ2VyCisgICAgIyBwcm9ibGVtcyB3aXRoIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgKGlzc3VlICMzODYzKTogc2tpcCBwcm9ibGVtYXRpYyB0ZXN0cworICAgICMgb24gcGxhdGZvcm1zIGtub3duIHRvIGJlaGF2ZSBiYWRseS4KKyAgICBwbGF0Zm9ybXNfdG9fc2tpcCA9ICgnZnJlZWJzZDQnLCAnZnJlZWJzZDUnLCAnZnJlZWJzZDYnLCAnbmV0YnNkNScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ29zMmVteCcpCisKKyAgICBkZWYgX3J1bl9hbmRfam9pbihzZWxmLCBzY3JpcHQpOgorICAgICAgICBzY3JpcHQgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IHN5cywgb3MsIHRpbWUsIHRocmVhZGluZworCisgICAgICAgICAgICAjIGEgdGhyZWFkLCB3aGljaCB3YWl0cyBmb3IgdGhlIG1haW4gcHJvZ3JhbSB0byB0ZXJtaW5hdGUKKyAgICAgICAgICAgIGRlZiBqb2luaW5nZnVuYyhtYWludGhyZWFkKToKKyAgICAgICAgICAgICAgICBtYWludGhyZWFkLmpvaW4oKQorICAgICAgICAgICAgICAgIHByaW50ICdlbmQgb2YgdGhyZWFkJworICAgICAgICBcbiIiIiArIHNjcmlwdAorCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgc2NyaXB0XSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgcmMgPSBwLndhaXQoKQorICAgICAgICBkYXRhID0gcC5zdGRvdXQucmVhZCgpLnJlcGxhY2UoJ1xyJywgJycpCisgICAgICAgIHAuc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAiZW5kIG9mIG1haW5cbmVuZCBvZiB0aHJlYWRcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmMgPT0gMiwgImludGVycHJldGVyIHdhcyBibG9ja2VkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJjID09IDAsICJVbmV4cGVjdGVkIGVycm9yIikKKworICAgIGRlZiB0ZXN0XzFfam9pbl9vbl9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgIyBUaGUgdXN1YWwgY2FzZTogb24gZXhpdCwgd2FpdCBmb3IgYSBub24tZGFlbW9uIHRocmVhZAorICAgICAgICBzY3JpcHQgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG9zCisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9am9pbmluZ2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPSh0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSwpKQorICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgIHByaW50ICdlbmQgb2YgbWFpbicKKyAgICAgICAgICAgICIiIgorICAgICAgICBzZWxmLl9ydW5fYW5kX2pvaW4oc2NyaXB0KQorCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAibmVlZHMgb3MuZm9yaygpIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSBpbiBwbGF0Zm9ybXNfdG9fc2tpcCwgImR1ZSB0byBrbm93biBPUyBidWciKQorICAgIGRlZiB0ZXN0XzJfam9pbl9pbl9mb3JrZWRfcHJvY2VzcyhzZWxmKToKKyAgICAgICAgIyBMaWtlIHRoZSB0ZXN0IGFib3ZlLCBidXQgZnJvbSBhIGZvcmtlZCBpbnRlcnByZXRlcgorICAgICAgICBzY3JpcHQgPSAiIiJpZiAxOgorICAgICAgICAgICAgY2hpbGRwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgIGlmIGNoaWxkcGlkICE9IDA6CisgICAgICAgICAgICAgICAgb3Mud2FpdHBpZChjaGlsZHBpZCwgMCkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgwKQorCisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9am9pbmluZ2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPSh0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSwpKQorICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICBwcmludCAnZW5kIG9mIG1haW4nCisgICAgICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcnVuX2FuZF9qb2luKHNjcmlwdCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJuZWVkcyBvcy5mb3JrKCkiKQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluIHBsYXRmb3Jtc190b19za2lwLCAiZHVlIHRvIGtub3duIE9TIGJ1ZyIpCisgICAgZGVmIHRlc3RfM19qb2luX2luX2ZvcmtlZF9mcm9tX3RocmVhZChzZWxmKToKKyAgICAgICAgIyBMaWtlIHRoZSB0ZXN0IGFib3ZlLCBidXQgZm9yaygpIHdhcyBjYWxsZWQgZnJvbSBhIHdvcmtlciB0aHJlYWQKKyAgICAgICAgIyBJbiB0aGUgZm9ya2VkIHByb2Nlc3MsIHRoZSBtYWluIFRocmVhZCBvYmplY3QgbXVzdCBiZSBtYXJrZWQgYXMgc3RvcHBlZC4KKyAgICAgICAgc2NyaXB0ID0gIiIiaWYgMToKKyAgICAgICAgICAgIG1haW5fdGhyZWFkID0gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkKKyAgICAgICAgICAgIGRlZiB3b3JrZXIoKToKKyAgICAgICAgICAgICAgICBjaGlsZHBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgICAgIGlmIGNoaWxkcGlkICE9IDA6CisgICAgICAgICAgICAgICAgICAgIG9zLndhaXRwaWQoY2hpbGRwaWQsIDApCisgICAgICAgICAgICAgICAgICAgIHN5cy5leGl0KDApCisKKyAgICAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9am9pbmluZ2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0obWFpbl90aHJlYWQsKSkKKyAgICAgICAgICAgICAgICBwcmludCAnZW5kIG9mIG1haW4nCisgICAgICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICAgICAgdC5qb2luKCkgIyBTaG91bGQgbm90IGJsb2NrOiBtYWluX3RocmVhZCBpcyBhbHJlYWR5IHN0b3BwZWQKKworICAgICAgICAgICAgdyA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXdvcmtlcikKKyAgICAgICAgICAgIHcuc3RhcnQoKQorICAgICAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3J1bl9hbmRfam9pbihzY3JpcHQpCisKKyAgICBkZWYgYXNzZXJ0U2NyaXB0SGFzT3V0cHV0KHNlbGYsIHNjcmlwdCwgZXhwZWN0ZWRfb3V0cHV0KToKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBzY3JpcHRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICByYyA9IHAud2FpdCgpCisgICAgICAgIGRhdGEgPSBwLnN0ZG91dC5yZWFkKCkuZGVjb2RlKCkucmVwbGFjZSgnXHInLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMCwgIlVuZXhwZWN0ZWQgZXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdGVkX291dHB1dCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJuZWVkcyBvcy5mb3JrKCkiKQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluIHBsYXRmb3Jtc190b19za2lwLCAiZHVlIHRvIGtub3duIE9TIGJ1ZyIpCisgICAgZGVmIHRlc3RfNF9qb2luaW5nX2Fjcm9zc19mb3JrX2luX3dvcmtlcl90aHJlYWQoc2VsZik6CisgICAgICAgICMgVGhlcmUgdXNlZCB0byBiZSBhIHBvc3NpYmxlIGRlYWRsb2NrIHdoZW4gZm9ya2luZyBmcm9tIGEgY2hpbGQKKyAgICAgICAgIyB0aHJlYWQuICBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTY2NDMuCisKKyAgICAgICAgIyBUaGUgc2NyaXB0IHRha2VzIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgICAgICMgLSBUaGUgbWFpbiB0aHJlYWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzIHN0YXJ0cyBhIG5ldyB0aHJlYWQgYW5kIHRoZW4KKyAgICAgICAgIyAgIHRyaWVzIHRvIGpvaW4gaXQuCisgICAgICAgICMgLSBUaGUgam9pbiBvcGVyYXRpb24gYWNxdWlyZXMgdGhlIExvY2sgaW5zaWRlIHRoZSB0aHJlYWQncyBfYmxvY2sKKyAgICAgICAgIyAgIENvbmRpdGlvbi4gIChTZWUgdGhyZWFkaW5nLnB5OlRocmVhZC5qb2luKCkuKQorICAgICAgICAjIC0gV2Ugc3R1YiBvdXQgdGhlIGFjcXVpcmUgbWV0aG9kIG9uIHRoZSBjb25kaXRpb24gdG8gZm9yY2UgaXQgdG8gd2FpdAorICAgICAgICAjICAgdW50aWwgdGhlIGNoaWxkIHRocmVhZCBmb3Jrcy4gIChTZWUgTE9DSyBBQ1FVSVJFRCBIRVJFKQorICAgICAgICAjIC0gVGhlIGNoaWxkIHRocmVhZCBmb3Jrcy4gIChTZWUgTE9DSyBIRUxEIGFuZCBXT1JLRVIgVEhSRUFEIEZPUktTCisgICAgICAgICMgICBIRVJFKQorICAgICAgICAjIC0gVGhlIG1haW4gdGhyZWFkIG9mIHRoZSBwYXJlbnQgcHJvY2VzcyBlbnRlcnMgQ29uZGl0aW9uLndhaXQoKSwKKyAgICAgICAgIyAgIHdoaWNoIHJlbGVhc2VzIHRoZSBsb2NrIG9uIHRoZSBjaGlsZCB0aHJlYWQuCisgICAgICAgICMgLSBUaGUgY2hpbGQgcHJvY2VzcyByZXR1cm5zLiAgV2l0aG91dCB0aGUgbmVjZXNzYXJ5IGZpeCwgd2hlbiB0aGUKKyAgICAgICAgIyAgIG1haW4gdGhyZWFkIG9mIHRoZSBjaGlsZCBwcm9jZXNzICh3aGljaCB1c2VkIHRvIGJlIHRoZSBjaGlsZCB0aHJlYWQKKyAgICAgICAgIyAgIGluIHRoZSBwYXJlbnQgcHJvY2VzcykgYXR0ZW1wdHMgdG8gZXhpdCwgaXQgd2lsbCB0cnkgdG8gYWNxdWlyZSB0aGUKKyAgICAgICAgIyAgIGxvY2sgaW4gdGhlIFRocmVhZC5fYmxvY2sgQ29uZGl0aW9uIG9iamVjdCBhbmQgaGFuZywgYmVjYXVzZSB0aGUKKyAgICAgICAgIyAgIGxvY2sgd2FzIGhlbGQgYWNyb3NzIHRoZSBmb3JrLgorCisgICAgICAgIHNjcmlwdCA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MsIHRpbWUsIHRocmVhZGluZworCisgICAgICAgICAgICBmaW5pc2hfam9pbiA9IEZhbHNlCisgICAgICAgICAgICBzdGFydF9mb3JrID0gRmFsc2UKKworICAgICAgICAgICAgZGVmIHdvcmtlcigpOgorICAgICAgICAgICAgICAgICMgV2FpdCB1bnRpbCB0aGlzIHRocmVhZCdzIGxvY2sgaXMgYWNxdWlyZWQgYmVmb3JlIGZvcmtpbmcgdG8KKyAgICAgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgZGVhZGxvY2suCisgICAgICAgICAgICAgICAgZ2xvYmFsIGZpbmlzaF9qb2luCisgICAgICAgICAgICAgICAgd2hpbGUgbm90IHN0YXJ0X2Zvcms6CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgICAgICAgICAjIExPQ0sgSEVMRDogTWFpbiB0aHJlYWQgaG9sZHMgbG9jayBhY3Jvc3MgdGhpcyBjYWxsLgorICAgICAgICAgICAgICAgIGNoaWxkcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICAgICAgZmluaXNoX2pvaW4gPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgY2hpbGRwaWQgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgIyBQYXJlbnQgcHJvY2VzcyBqdXN0IHdhaXRzIGZvciBjaGlsZC4KKyAgICAgICAgICAgICAgICAgICAgb3Mud2FpdHBpZChjaGlsZHBpZCwgMCkKKyAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgc2hvdWxkIGp1c3QgcmV0dXJuLgorCisgICAgICAgICAgICB3ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9d29ya2VyKQorCisgICAgICAgICAgICAjIFN0dWIgb3V0IHRoZSBwcml2YXRlIGNvbmRpdGlvbiB2YXJpYWJsZSdzIGxvY2sgYWNxdWlyZSBtZXRob2QuCisgICAgICAgICAgICAjIFRoaXMgYWNxdWlyZXMgdGhlIGxvY2sgYW5kIHRoZW4gd2FpdHMgdW50aWwgdGhlIGNoaWxkIGhhcyBmb3JrZWQKKyAgICAgICAgICAgICMgYmVmb3JlIHJldHVybmluZywgd2hpY2ggd2lsbCByZWxlYXNlIHRoZSBsb2NrIHNvb24gYWZ0ZXIuICBJZgorICAgICAgICAgICAgIyBzb21lb25lIGVsc2UgdHJpZXMgdG8gZml4IHRoaXMgdGVzdCBjYXNlIGJ5IGFjcXVpcmluZyB0aGlzIGxvY2sKKyAgICAgICAgICAgICMgYmVmb3JlIGZvcmtpbmcgaW5zdGVhZCBvZiByZXNldHRpbmcgaXQsIHRoZSB0ZXN0IGNhc2Ugd2lsbAorICAgICAgICAgICAgIyBkZWFkbG9jayB3aGVuIGl0IHNob3VsZG4ndC4KKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IHcuX2Jsb2NrCisgICAgICAgICAgICBvcmlnX2FjcXVpcmUgPSBjb25kaXRpb24uYWNxdWlyZQorICAgICAgICAgICAgY2FsbF9jb3VudF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICAgICAgY2FsbF9jb3VudCA9IDAKKyAgICAgICAgICAgIGRlZiBteV9hY3F1aXJlKCk6CisgICAgICAgICAgICAgICAgZ2xvYmFsIGNhbGxfY291bnQKKyAgICAgICAgICAgICAgICBnbG9iYWwgc3RhcnRfZm9yaworICAgICAgICAgICAgICAgIG9yaWdfYWNxdWlyZSgpICAjIExPQ0sgQUNRVUlSRUQgSEVSRQorICAgICAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgY2FsbF9jb3VudCA9PSAwOgorICAgICAgICAgICAgICAgICAgICB3aGlsZSBub3QgZmluaXNoX2pvaW46CisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICAjIFdPUktFUiBUSFJFQUQgRk9SS1MgSEVSRQorICAgICAgICAgICAgICAgIHdpdGggY2FsbF9jb3VudF9sb2NrOgorICAgICAgICAgICAgICAgICAgICBjYWxsX2NvdW50ICs9IDEKKyAgICAgICAgICAgIGNvbmRpdGlvbi5hY3F1aXJlID0gbXlfYWNxdWlyZQorCisgICAgICAgICAgICB3LnN0YXJ0KCkKKyAgICAgICAgICAgIHcuam9pbigpCisgICAgICAgICAgICBwcmludCgnZW5kIG9mIG1haW4nKQorICAgICAgICAgICAgIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0U2NyaXB0SGFzT3V0cHV0KHNjcmlwdCwgImVuZCBvZiBtYWluXG4iKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gcGxhdGZvcm1zX3RvX3NraXAsICJkdWUgdG8ga25vd24gT1MgYnVnIikKKyAgICBkZWYgdGVzdF81X2NsZWFyX3dhaXRlcl9sb2Nrc190b19hdm9pZF9jcmFzaChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGEgc3Bhd25lZCB0aHJlYWQgdGhhdCBmb3JrcyBkb2Vzbid0IHNlZ2ZhdWx0IG9uIGNlcnRhaW4KKyAgICAgICAgIyBwbGF0Zm9ybXMsIG5hbWVseSBPUyBYLiAgVGhpcyB1c2VkIHRvIGhhcHBlbiBpZiB0aGVyZSB3YXMgYSB3YWl0ZXIKKyAgICAgICAgIyBsb2NrIGluIHRoZSB0aHJlYWQncyBjb25kaXRpb24gdmFyaWFibGUncyB3YWl0ZXJzIGxpc3QuICBFdmVuIHRob3VnaAorICAgICAgICAjIHdlIGtub3cgdGhlIGxvY2sgd2lsbCBiZSBoZWxkIGFjcm9zcyB0aGUgZm9yaywgaXQgaXMgbm90IHNhZmUgdG8KKyAgICAgICAgIyByZWxlYXNlIGxvY2tzIGhlbGQgYWNyb3NzIGZvcmtzIG9uIGFsbCBwbGF0Zm9ybXMsIHNvIHJlbGVhc2luZyB0aGUKKyAgICAgICAgIyB3YWl0ZXIgbG9jayBjYXVzZWQgYSBzZWdmYXVsdCBvbiBPUyBYLiAgRnVydGhlcm1vcmUsIHNpbmNlIGxvY2tzIG9uCisgICAgICAgICMgT1MgWCBhcmUgKGFzIG9mIHRoaXMgd3JpdGluZykgaW1wbGVtZW50ZWQgd2l0aCBhIG11dGV4ICsgY29uZGl0aW9uCisgICAgICAgICMgdmFyaWFibGUgaW5zdGVhZCBvZiBhIHNlbWFwaG9yZSwgd2hpbGUgd2Uga25vdyB0aGF0IHRoZSBQeXRob24tbGV2ZWwKKyAgICAgICAgIyBsb2NrIHdpbGwgYmUgYWNxdWlyZWQsIHdlIGNhbid0IGtub3cgaWYgdGhlIGludGVybmFsIG11dGV4IHdpbGwgYmUKKyAgICAgICAgIyBhY3F1aXJlZCBhdCB0aGUgdGltZSBvZiB0aGUgZm9yay4KKworICAgICAgICBzY3JpcHQgPSAiIiJpZiBUcnVlOgorICAgICAgICAgICAgaW1wb3J0IG9zLCB0aW1lLCB0aHJlYWRpbmcKKworICAgICAgICAgICAgc3RhcnRfZm9yayA9IEZhbHNlCisKKyAgICAgICAgICAgIGRlZiB3b3JrZXIoKToKKyAgICAgICAgICAgICAgICAjIFdhaXQgdW50aWwgdGhlIG1haW4gdGhyZWFkIGhhcyBhdHRlbXB0ZWQgdG8gam9pbiB0aGlzIHRocmVhZAorICAgICAgICAgICAgICAgICMgYmVmb3JlIGNvbnRpbnVpbmcuCisgICAgICAgICAgICAgICAgd2hpbGUgbm90IHN0YXJ0X2Zvcms6CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgICAgICAgICBjaGlsZHBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgICAgIGlmIGNoaWxkcGlkICE9IDA6CisgICAgICAgICAgICAgICAgICAgICMgUGFyZW50IHByb2Nlc3MganVzdCB3YWl0cyBmb3IgY2hpbGQuCisgICAgICAgICAgICAgICAgICAgIChjcGlkLCByYykgPSBvcy53YWl0cGlkKGNoaWxkcGlkLCAwKQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgY3BpZCA9PSBjaGlsZHBpZAorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcmMgPT0gMAorICAgICAgICAgICAgICAgICAgICBwcmludCgnZW5kIG9mIHdvcmtlciB0aHJlYWQnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgQ2hpbGQgcHJvY2VzcyBzaG91bGQganVzdCByZXR1cm4uCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgdyA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXdvcmtlcikKKworICAgICAgICAgICAgIyBTdHViIG91dCB0aGUgcHJpdmF0ZSBjb25kaXRpb24gdmFyaWFibGUncyBfcmVsZWFzZV9zYXZlIG1ldGhvZC4KKyAgICAgICAgICAgICMgVGhpcyByZWxlYXNlcyB0aGUgY29uZGl0aW9uJ3MgbG9jayBhbmQgZmxpcHMgdGhlIGdsb2JhbCB0aGF0CisgICAgICAgICAgICAjIGNhdXNlcyB0aGUgd29ya2VyIHRvIGZvcmsuICBBdCB0aGlzIHBvaW50LCB0aGUgcHJvYmxlbWF0aWMgd2FpdGVyCisgICAgICAgICAgICAjIGxvY2sgaGFzIGJlZW4gYWNxdWlyZWQgb25jZSBieSB0aGUgd2FpdGVyIGFuZCBoYXMgYmVlbiBwdXQgb250bworICAgICAgICAgICAgIyB0aGUgd2FpdGVycyBsaXN0LgorICAgICAgICAgICAgY29uZGl0aW9uID0gdy5fYmxvY2sKKyAgICAgICAgICAgIG9yaWdfcmVsZWFzZV9zYXZlID0gY29uZGl0aW9uLl9yZWxlYXNlX3NhdmUKKyAgICAgICAgICAgIGRlZiBteV9yZWxlYXNlX3NhdmUoKToKKyAgICAgICAgICAgICAgICBnbG9iYWwgc3RhcnRfZm9yaworICAgICAgICAgICAgICAgIG9yaWdfcmVsZWFzZV9zYXZlKCkKKyAgICAgICAgICAgICAgICAjIFdhaXRlciBsb2NrIGhlbGQgaGVyZSwgY29uZGl0aW9uIGxvY2sgcmVsZWFzZWQuCisgICAgICAgICAgICAgICAgc3RhcnRfZm9yayA9IFRydWUKKyAgICAgICAgICAgIGNvbmRpdGlvbi5fcmVsZWFzZV9zYXZlID0gbXlfcmVsZWFzZV9zYXZlCisKKyAgICAgICAgICAgIHcuc3RhcnQoKQorICAgICAgICAgICAgdy5qb2luKCkKKyAgICAgICAgICAgIHByaW50KCdlbmQgb2YgbWFpbiB0aHJlYWQnKQorICAgICAgICAgICAgIiIiCisgICAgICAgIG91dHB1dCA9ICJlbmQgb2Ygd29ya2VyIHRocmVhZFxuZW5kIG9mIG1haW4gdGhyZWFkXG4iCisgICAgICAgIHNlbGYuYXNzZXJ0U2NyaXB0SGFzT3V0cHV0KHNjcmlwdCwgb3V0cHV0KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gcGxhdGZvcm1zX3RvX3NraXAsICJkdWUgdG8ga25vd24gT1MgYnVnIikKKyAgICBkZWYgdGVzdF9yZWluaXRfdGxzX2FmdGVyX2Zvcmsoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEzODE3OiBmb3JrKCkgd291bGQgZGVhZGxvY2sgaW4gYSBtdWx0aXRocmVhZGVkIHByb2dyYW0gd2l0aAorICAgICAgICAjIHRoZSBhZC1ob2MgVExTIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIGRlZiBkb19mb3JrX2FuZF93YWl0KCk6CisgICAgICAgICAgICAjIGp1c3QgZm9yayBhIGNoaWxkIHByb2Nlc3MgYW5kIHdhaXQgaXQKKyAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgaWYgcGlkID4gMDoKKyAgICAgICAgICAgICAgICBvcy53YWl0cGlkKHBpZCwgMCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3MuX2V4aXQoMCkKKworICAgICAgICAjIHN0YXJ0IGEgYnVuY2ggb2YgdGhyZWFkcyB0aGF0IHdpbGwgZm9yaygpIGNoaWxkIHByb2Nlc3NlcworICAgICAgICB0aHJlYWRzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTYpOgorICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWRvX2ZvcmtfYW5kX3dhaXQpCisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQorICAgICAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgIHQuam9pbigpCisKKworY2xhc3MgVGhyZWFkaW5nRXhjZXB0aW9uVGVzdHMoQmFzZVRlc3RDYXNlKToKKyAgICAjIEEgUnVudGltZUVycm9yIHNob3VsZCBiZSByYWlzZWQgaWYgVGhyZWFkLnN0YXJ0KCkgaXMgY2FsbGVkCisgICAgIyBtdWx0aXBsZSB0aW1lcy4KKyAgICBkZWYgdGVzdF9zdGFydF90aHJlYWRfYWdhaW4oc2VsZik6CisgICAgICAgIHRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQoKQorICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHRocmVhZC5zdGFydCkKKworICAgIGRlZiB0ZXN0X2pvaW5pbmdfY3VycmVudF90aHJlYWQoc2VsZik6CisgICAgICAgIGN1cnJlbnRfdGhyZWFkID0gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjdXJyZW50X3RocmVhZC5qb2luKTsKKworICAgIGRlZiB0ZXN0X2pvaW5pbmdfaW5hY3RpdmVfdGhyZWFkKHNlbGYpOgorICAgICAgICB0aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB0aHJlYWQuam9pbikKKworICAgIGRlZiB0ZXN0X2RhZW1vbml6ZV9hY3RpdmVfdGhyZWFkKHNlbGYpOgorICAgICAgICB0aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKCkKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZXRhdHRyLCB0aHJlYWQsICJkYWVtb24iLCBUcnVlKQorCisKK2NsYXNzIExvY2tUZXN0cyhsb2NrX3Rlc3RzLkxvY2tUZXN0cyk6CisgICAgbG9ja3R5cGUgPSBzdGF0aWNtZXRob2QodGhyZWFkaW5nLkxvY2spCisKK2NsYXNzIFJMb2NrVGVzdHMobG9ja190ZXN0cy5STG9ja1Rlc3RzKToKKyAgICBsb2NrdHlwZSA9IHN0YXRpY21ldGhvZCh0aHJlYWRpbmcuUkxvY2spCisKK2NsYXNzIEV2ZW50VGVzdHMobG9ja190ZXN0cy5FdmVudFRlc3RzKToKKyAgICBldmVudHR5cGUgPSBzdGF0aWNtZXRob2QodGhyZWFkaW5nLkV2ZW50KQorCitjbGFzcyBDb25kaXRpb25Bc1JMb2NrVGVzdHMobG9ja190ZXN0cy5STG9ja1Rlc3RzKToKKyAgICAjIEFuIENvbmRpdGlvbiB1c2VzIGFuIFJMb2NrIGJ5IGRlZmF1bHQgYW5kIGV4cG9ydHMgaXRzIEFQSS4KKyAgICBsb2NrdHlwZSA9IHN0YXRpY21ldGhvZCh0aHJlYWRpbmcuQ29uZGl0aW9uKQorCitjbGFzcyBDb25kaXRpb25UZXN0cyhsb2NrX3Rlc3RzLkNvbmRpdGlvblRlc3RzKToKKyAgICBjb25kdHlwZSA9IHN0YXRpY21ldGhvZCh0aHJlYWRpbmcuQ29uZGl0aW9uKQorCitjbGFzcyBTZW1hcGhvcmVUZXN0cyhsb2NrX3Rlc3RzLlNlbWFwaG9yZVRlc3RzKToKKyAgICBzZW10eXBlID0gc3RhdGljbWV0aG9kKHRocmVhZGluZy5TZW1hcGhvcmUpCisKK2NsYXNzIEJvdW5kZWRTZW1hcGhvcmVUZXN0cyhsb2NrX3Rlc3RzLkJvdW5kZWRTZW1hcGhvcmVUZXN0cyk6CisgICAgc2VtdHlwZSA9IHN0YXRpY21ldGhvZCh0aHJlYWRpbmcuQm91bmRlZFNlbWFwaG9yZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJywgJ3Rlc3QgbWFjb3N4IHByb2JsZW0nKQorICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbl9saW1pdChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA5NjcwCisgICAgICAgICMgdGVzdCB0aGF0IGV4Y2Vzc2l2ZSByZWN1cnNpb24gd2l0aGluIGEgbm9uLW1haW4gdGhyZWFkIGNhdXNlcworICAgICAgICAjIGFuIGV4Y2VwdGlvbiByYXRoZXIgdGhhbiBjcmFzaGluZyB0aGUgaW50ZXJwcmV0ZXIgb24gcGxhdGZvcm1zCisgICAgICAgICMgbGlrZSBNYWMgT1MgWCBvciBGcmVlQlNEIHdoaWNoIGhhdmUgc21hbGwgZGVmYXVsdCBzdGFjayBzaXplcworICAgICAgICAjIGZvciB0aHJlYWRzCisgICAgICAgIHNjcmlwdCA9ICIiImlmIFRydWU6CisgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisKKyAgICAgICAgICAgIGRlZiByZWN1cnNlKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2UoKQorCisgICAgICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2UoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgdyA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PW91dGVyKQorICAgICAgICAgICAgdy5zdGFydCgpCisgICAgICAgICAgICB3LmpvaW4oKQorICAgICAgICAgICAgcHJpbnQoJ2VuZCBvZiBtYWluIHRocmVhZCcpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgZXhwZWN0ZWRfb3V0cHV0ID0gImVuZCBvZiBtYWluIHRocmVhZFxuIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsIHNjcmlwdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIGRhdGEgPSBzdGRvdXQuZGVjb2RlKCkucmVwbGFjZSgnXHInLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDAsICJVbmV4cGVjdGVkIGVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBleHBlY3RlZF9vdXRwdXQpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoTG9ja1Rlc3RzLCBSTG9ja1Rlc3RzLCBFdmVudFRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb25Bc1JMb2NrVGVzdHMsIENvbmRpdGlvblRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZW1hcGhvcmVUZXN0cywgQm91bmRlZFNlbWFwaG9yZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkSm9pbk9uU2h1dGRvd24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZGluZ0V4Y2VwdGlvblRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGluZ19sb2NhbC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGluZ19sb2NhbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzlmMjk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdGhyZWFkaW5nX2xvY2FsLnB5CkBAIC0wLDAgKzEsMjM0IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gZG9jdGVzdCBpbXBvcnQgRG9jVGVzdFN1aXRlCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHdlYWtyZWYKK2ltcG9ydCBnYworCisjIE1vZHVsZXMgdW5kZXIgdGVzdAorX3RocmVhZCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWQnKQordGhyZWFkaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCitpbXBvcnQgX3RocmVhZGluZ19sb2NhbAorCisKK2NsYXNzIFdlYWsob2JqZWN0KToKKyAgICBwYXNzCisKK2RlZiB0YXJnZXQobG9jYWwsIHdlYWtsaXN0KToKKyAgICB3ZWFrID0gV2VhaygpCisgICAgbG9jYWwud2VhayA9IHdlYWsKKyAgICB3ZWFrbGlzdC5hcHBlbmQod2Vha3JlZi5yZWYod2VhaykpCisKK2NsYXNzIEJhc2VMb2NhbFRlc3Q6CisKKyAgICBkZWYgdGVzdF9sb2NhbF9yZWZzKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2NhbF9yZWZzKDIwKQorICAgICAgICBzZWxmLl9sb2NhbF9yZWZzKDUwKQorICAgICAgICBzZWxmLl9sb2NhbF9yZWZzKDEwMCkKKworICAgIGRlZiBfbG9jYWxfcmVmcyhzZWxmLCBuKToKKyAgICAgICAgbG9jYWwgPSBzZWxmLl9sb2NhbCgpCisgICAgICAgIHdlYWtsaXN0ID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9dGFyZ2V0LCBhcmdzPShsb2NhbCwgd2Vha2xpc3QpKQorICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICBkZWwgdAorCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3ZWFrbGlzdCksIG4pCisKKyAgICAgICAgIyBYWFggX3RocmVhZGluZ19sb2NhbCBrZWVwcyB0aGUgbG9jYWwgb2YgdGhlIGxhc3Qgc3RvcHBlZCB0aHJlYWQgYWxpdmUuCisgICAgICAgIGRlYWRsaXN0ID0gW3dlYWsgZm9yIHdlYWsgaW4gd2Vha2xpc3QgaWYgd2VhaygpIGlzIE5vbmVdCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obGVuKGRlYWRsaXN0KSwgKG4tMSwgbikpCisKKyAgICAgICAgIyBBc3NpZ25tZW50IHRvIHRoZSBzYW1lIHRocmVhZCBsb2NhbCBmcmVlcyBpdCBzb21ldGltZXMgKCEpCisgICAgICAgIGxvY2FsLnNvbWVvdGhlcnZhciA9IE5vbmUKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGRlYWRsaXN0ID0gW3dlYWsgZm9yIHdlYWsgaW4gd2Vha2xpc3QgaWYgd2VhaygpIGlzIE5vbmVdCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obGVuKGRlYWRsaXN0KSwgKG4tMSwgbiksIChuLCBsZW4oZGVhZGxpc3QpKSkKKworICAgIGRlZiB0ZXN0X2Rlcml2ZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgMzA4ODogaWYgdGhlcmUgaXMgYSB0aHJlYWRzIHN3aXRjaCBpbnNpZGUgdGhlIF9faW5pdF9fCisgICAgICAgICMgb2YgYSB0aHJlYWRpbmcubG9jYWwgZGVyaXZlZCBjbGFzcywgdGhlIHBlci10aHJlYWQgZGljdGlvbmFyeQorICAgICAgICAjIGlzIGNyZWF0ZWQgYnV0IG5vdCBjb3JyZWN0bHkgc2V0IG9uIHRoZSBvYmplY3QuCisgICAgICAgICMgVGhlIGZpcnN0IG1lbWJlciBzZXQgbWF5IGJlIGJvZ3VzLgorICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICBjbGFzcyBMb2NhbChzZWxmLl9sb2NhbCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICBsb2NhbCA9IExvY2FsKCkKKworICAgICAgICBkZWYgZihpKToKKyAgICAgICAgICAgIGxvY2FsLnggPSBpCisgICAgICAgICAgICAjIFNpbXBseSBjaGVjayB0aGF0IHRoZSB2YXJpYWJsZSBpcyBjb3JyZWN0bHkgc2V0CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsLngsIGkpCisKKyAgICAgICAgdGhyZWFkcz0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYsIGFyZ3M9KGksKSkKKyAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodCkKKworICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgdC5qb2luKCkKKworICAgIGRlZiB0ZXN0X2Rlcml2ZWRfY3ljbGVfZGVhbGxvYyhzZWxmKToKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjk5MAorICAgICAgICBjbGFzcyBMb2NhbChzZWxmLl9sb2NhbCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGxvY2FscyA9IE5vbmUKKyAgICAgICAgcGFzc2VkID0gW0ZhbHNlXQorICAgICAgICBlMSA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIGUyID0gdGhyZWFkaW5nLkV2ZW50KCkKKworICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgIyAxKSBJbnZvbHZlIExvY2FsIGluIGEgY3ljbGUKKyAgICAgICAgICAgIGN5Y2xlID0gW0xvY2FsKCldCisgICAgICAgICAgICBjeWNsZS5hcHBlbmQoY3ljbGUpCisgICAgICAgICAgICBjeWNsZVswXS5mb28gPSAnYmFyJworCisgICAgICAgICAgICAjIDIpIEdDIHRoZSBjeWNsZSAodHJpZ2dlcnMgdGhyZWFkbW9kdWxlLmM6OmxvY2FsX2NsZWFyCisgICAgICAgICAgICAjIGJlZm9yZSBsb2NhbF9kZWFsbG9jKQorICAgICAgICAgICAgZGVsIGN5Y2xlCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIGUxLnNldCgpCisgICAgICAgICAgICBlMi53YWl0KCkKKworICAgICAgICAgICAgIyA0KSBOZXcgTG9jYWxzIHNob3VsZCBiZSBlbXB0eQorICAgICAgICAgICAgcGFzc2VkWzBdID0gYWxsKG5vdCBoYXNhdHRyKGxvY2FsLCAnZm9vJykgZm9yIGxvY2FsIGluIGxvY2FscykKKworICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIGUxLndhaXQoKQorCisgICAgICAgICMgMykgTmV3IExvY2FscyBzaG91bGQgcmVjeWNsZSB0aGUgb3JpZ2luYWwncyBhZGRyZXNzLiBDcmVhdGluZworICAgICAgICAjIHRoZW0gaW4gdGhlIHRocmVhZCBvdmVyd3JpdGVzIHRoZSB0aHJlYWQgc3RhdGUgYW5kIGF2b2lkcyB0aGUKKyAgICAgICAgIyBidWcKKyAgICAgICAgbG9jYWxzID0gW0xvY2FsKCkgZm9yIGkgaW4gcmFuZ2UoMTApXQorICAgICAgICBlMi5zZXQoKQorICAgICAgICB0LmpvaW4oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzZWRbMF0pCisKKyAgICBkZWYgdGVzdF9hcmd1bWVudHMoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTUyMjIzNworICAgICAgICBmcm9tIHRocmVhZCBpbXBvcnQgX2xvY2FsIGFzIGxvY2FsCisgICAgICAgIGZyb20gX3RocmVhZGluZ19sb2NhbCBpbXBvcnQgbG9jYWwgYXMgcHlfbG9jYWwKKworICAgICAgICBmb3IgY2xzIGluIChsb2NhbCwgcHlfbG9jYWwpOgorICAgICAgICAgICAgY2xhc3MgTXlMb2NhbChjbHMpOgorICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIE15TG9jYWwoYT0xKQorICAgICAgICAgICAgTXlMb2NhbCgxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbHMsIGE9MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2xzLCAxKQorCisgICAgZGVmIF90ZXN0X29uZV9jbGFzcyhzZWxmLCBjKToKKyAgICAgICAgc2VsZi5fZmFpbGVkID0gIk5vIGVycm9yIG1lc3NhZ2Ugc2V0IG9yIGNsZWFyZWQuIgorICAgICAgICBvYmogPSBjKCkKKyAgICAgICAgZTEgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBlMiA9IHRocmVhZGluZy5FdmVudCgpCisKKyAgICAgICAgZGVmIGYxKCk6CisgICAgICAgICAgICBvYmoueCA9ICdmb28nCisgICAgICAgICAgICBvYmoueSA9ICdiYXInCisgICAgICAgICAgICBkZWwgb2JqLnkKKyAgICAgICAgICAgIGUxLnNldCgpCisgICAgICAgICAgICBlMi53YWl0KCkKKworICAgICAgICBkZWYgZjIoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb28gPSBvYmoueAorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyBleHBlY3RlZCAtLSB3ZSBoYXZlbid0IHNldCBvYmoueCBpbiB0aGlzIHRocmVhZCB5ZXQhCisgICAgICAgICAgICAgICAgc2VsZi5fZmFpbGVkID0gIiIgICMgcGFzc2VkCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZhaWxlZCA9ICgnSW5jb3JyZWN0bHkgZ290IHZhbHVlICVyIGZyb20gY2xhc3MgJXJcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9vLCBjKSkKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHNlbGYuX2ZhaWxlZCkKKworICAgICAgICB0MSA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYxKQorICAgICAgICB0MS5zdGFydCgpCisgICAgICAgIGUxLndhaXQoKQorICAgICAgICB0MiA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYyKQorICAgICAgICB0Mi5zdGFydCgpCisgICAgICAgIHQyLmpvaW4oKQorICAgICAgICAjIFRoZSB0ZXN0IGlzIGRvbmU7IGp1c3QgbGV0IHQxIGtub3cgaXQgY2FuIGV4aXQsIGFuZCB3YWl0IGZvciBpdC4KKyAgICAgICAgZTIuc2V0KCkKKyAgICAgICAgdDEuam9pbigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLl9mYWlsZWQsIHNlbGYuX2ZhaWxlZCkKKworICAgIGRlZiB0ZXN0X3RocmVhZGluZ19sb2NhbChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9vbmVfY2xhc3Moc2VsZi5fbG9jYWwpCisKKyAgICBkZWYgdGVzdF90aHJlYWRpbmdfbG9jYWxfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIExvY2FsU3ViY2xhc3Moc2VsZi5fbG9jYWwpOgorICAgICAgICAgICAgIiIiVG8gdGVzdCB0aGF0IHN1YmNsYXNzZXMgYmVoYXZlIHByb3Blcmx5LiIiIgorICAgICAgICBzZWxmLl90ZXN0X29uZV9jbGFzcyhMb2NhbFN1YmNsYXNzKQorCisgICAgZGVmIF90ZXN0X2RpY3RfYXR0cmlidXRlKHNlbGYsIGNscyk6CisgICAgICAgIG9iaiA9IGNscygpCisgICAgICAgIG9iai54ID0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RpY3RfXywgeyd4JzogNX0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgb2JqLl9fZGljdF9fID0ge30KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgb2JqLl9fZGljdF9fCisKKyAgICBkZWYgdGVzdF9kaWN0X2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9kaWN0X2F0dHJpYnV0ZShzZWxmLl9sb2NhbCkKKworICAgIGRlZiB0ZXN0X2RpY3RfYXR0cmlidXRlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2NhbFN1YmNsYXNzKHNlbGYuX2xvY2FsKToKKyAgICAgICAgICAgICIiIlRvIHRlc3QgdGhhdCBzdWJjbGFzc2VzIGJlaGF2ZSBwcm9wZXJseS4iIiIKKyAgICAgICAgc2VsZi5fdGVzdF9kaWN0X2F0dHJpYnV0ZShMb2NhbFN1YmNsYXNzKQorCisKK2NsYXNzIFRocmVhZExvY2FsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgQmFzZUxvY2FsVGVzdCk6CisgICAgX2xvY2FsID0gX3RocmVhZC5fbG9jYWwKKworICAgICMgRmFpbHMgZm9yIHRoZSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbgorICAgIGRlZiB0ZXN0X2N5Y2xlX2NvbGxlY3Rpb24oc2VsZik6CisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgeCA9IFgoKQorICAgICAgICB4LmxvY2FsID0gc2VsZi5fbG9jYWwoKQorICAgICAgICB4LmxvY2FsLnggPSB4CisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoeCkKKyAgICAgICAgZGVsIHgKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworY2xhc3MgUHlUaHJlYWRpbmdMb2NhbFRlc3QodW5pdHRlc3QuVGVzdENhc2UsIEJhc2VMb2NhbFRlc3QpOgorICAgIF9sb2NhbCA9IF90aHJlYWRpbmdfbG9jYWwubG9jYWwKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIHN1aXRlLmFkZFRlc3QoRG9jVGVzdFN1aXRlKCdfdGhyZWFkaW5nX2xvY2FsJykpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoVGhyZWFkTG9jYWxUZXN0KSkKKyAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShQeVRocmVhZGluZ0xvY2FsVGVzdCkpCisKKyAgICB0cnk6CisgICAgICAgIGZyb20gdGhyZWFkIGltcG9ydCBfbG9jYWwKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBpbXBvcnQgX3RocmVhZGluZ19sb2NhbAorICAgICAgICBsb2NhbF9vcmlnID0gX3RocmVhZGluZ19sb2NhbC5sb2NhbAorICAgICAgICBkZWYgc2V0VXAodGVzdCk6CisgICAgICAgICAgICBfdGhyZWFkaW5nX2xvY2FsLmxvY2FsID0gX2xvY2FsCisgICAgICAgIGRlZiB0ZWFyRG93bih0ZXN0KToKKyAgICAgICAgICAgIF90aHJlYWRpbmdfbG9jYWwubG9jYWwgPSBsb2NhbF9vcmlnCisgICAgICAgIHN1aXRlLmFkZFRlc3QoRG9jVGVzdFN1aXRlKCdfdGhyZWFkaW5nX2xvY2FsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VXA9c2V0VXAsIHRlYXJEb3duPXRlYXJEb3duKQorICAgICAgICAgICAgICAgICAgICAgICkKKworICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3Qoc3VpdGUpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmN2ViNjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5CkBAIC0wLDAgKzEsODUgQEAKKyIiIlB5VW5pdCB0ZXN0aW5nIHRoYXQgdGhyZWFkcyBob25vciBvdXIgc2lnbmFsIHNlbWFudGljcyIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBvcworaW1wb3J0IHN5cworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlLCByZWFwX3RocmVhZHMKK3RocmVhZCA9IGltcG9ydF9tb2R1bGUoJ3RocmVhZCcpCisKK2lmIHN5cy5wbGF0Zm9ybVs6M10gaW4gKCd3aW4nLCAnb3MyJykgb3Igc3lzLnBsYXRmb3JtPT0ncmlzY29zJzoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgIkNhbid0IHRlc3Qgc2lnbmFsIG9uICVzIiAlIHN5cy5wbGF0Zm9ybQorCitwcm9jZXNzX3BpZCA9IG9zLmdldHBpZCgpCitzaWduYWxsZWRfYWxsPXRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKworCitkZWYgcmVnaXN0ZXJTaWduYWxzKGZvcl91c3IxLCBmb3JfdXNyMiwgZm9yX2Fscm0pOgorICAgIHVzcjEgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdVU1IxLCBmb3JfdXNyMSkKKyAgICB1c3IyID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVVNSMiwgZm9yX3VzcjIpCisgICAgYWxybSA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGZvcl9hbHJtKQorICAgIHJldHVybiB1c3IxLCB1c3IyLCBhbHJtCisKKworIyBUaGUgc2lnbmFsIGhhbmRsZXIuIEp1c3Qgbm90ZSB0aGF0IHRoZSBzaWduYWwgb2NjdXJyZWQgYW5kCisjIGZyb20gd2hvLgorZGVmIGhhbmRsZV9zaWduYWxzKHNpZyxmcmFtZSk6CisgICAgc2lnbmFsX2JsYWNrYm9hcmRbc2lnXVsndHJpcHBlZCddICs9IDEKKyAgICBzaWduYWxfYmxhY2tib2FyZFtzaWddWyd0cmlwcGVkX2J5J10gPSB0aHJlYWQuZ2V0X2lkZW50KCkKKworIyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBzcGF3bmVkIGFzIGEgc2VwYXJhdGUgdGhyZWFkLgorZGVmIHNlbmRfc2lnbmFscygpOgorICAgIG9zLmtpbGwocHJvY2Vzc19waWQsIHNpZ25hbC5TSUdVU1IxKQorICAgIG9zLmtpbGwocHJvY2Vzc19waWQsIHNpZ25hbC5TSUdVU1IyKQorICAgIHNpZ25hbGxlZF9hbGwucmVsZWFzZSgpCisKK2NsYXNzIFRocmVhZFNpZ25hbHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3Qgc2lnbmFsIGhhbmRsaW5nIHNlbWFudGljcyBvZiB0aHJlYWRzLgorICAgICAgIFdlIHNwYXduIGEgdGhyZWFkLCBoYXZlIHRoZSB0aHJlYWQgc2VuZCB0d28gc2lnbmFscywgYW5kCisgICAgICAgd2FpdCBmb3IgaXQgdG8gZmluaXNoLiBDaGVjayB0aGF0IHdlIGdvdCBib3RoIHNpZ25hbHMKKyAgICAgICBhbmQgdGhhdCB0aGV5IHdlcmUgcnVuIGJ5IHRoZSBtYWluIHRocmVhZC4KKyAgICAiIiIKKyAgICBAcmVhcF90aHJlYWRzCisgICAgZGVmIHRlc3Rfc2lnbmFscyhzZWxmKToKKyAgICAgICAgc2lnbmFsbGVkX2FsbC5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5zcGF3blNpZ25hbGxpbmdUaHJlYWQoKQorICAgICAgICBzaWduYWxsZWRfYWxsLmFjcXVpcmUoKQorICAgICAgICAjIHRoZSBzaWduYWxzIHRoYXQgd2UgYXNrZWQgdGhlIGtlcm5lbCB0byBzZW5kCisgICAgICAgICMgd2lsbCBjb21lIGJhY2ssIGJ1dCB3ZSBkb24ndCBrbm93IHdoZW4uCisgICAgICAgICMgKGl0IG1pZ2h0IGV2ZW4gYmUgYWZ0ZXIgdGhlIHRocmVhZCBleGl0cworICAgICAgICAjIGFuZCBtaWdodCBiZSBvdXQgb2Ygb3JkZXIuKSAgSWYgd2UgaGF2ZW4ndCBzZWVuCisgICAgICAgICMgdGhlIHNpZ25hbHMgeWV0LCBzZW5kIHlldCBhbm90aGVyIHNpZ25hbCBhbmQKKyAgICAgICAgIyB3YWl0IGZvciBpdCByZXR1cm4uCisgICAgICAgIGlmIHNpZ25hbF9ibGFja2JvYXJkW3NpZ25hbC5TSUdVU1IxXVsndHJpcHBlZCddID09IDAgXAorICAgICAgICAgICBvciBzaWduYWxfYmxhY2tib2FyZFtzaWduYWwuU0lHVVNSMl1bJ3RyaXBwZWQnXSA9PSAwOgorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICBzaWduYWwucGF1c2UoKQorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2lnbmFsX2JsYWNrYm9hcmRbc2lnbmFsLlNJR1VTUjFdWyd0cmlwcGVkJ10sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIHNpZ25hbF9ibGFja2JvYXJkW3NpZ25hbC5TSUdVU1IxXVsndHJpcHBlZF9ieSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLmdldF9pZGVudCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCBzaWduYWxfYmxhY2tib2FyZFtzaWduYWwuU0lHVVNSMl1bJ3RyaXBwZWQnXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggc2lnbmFsX2JsYWNrYm9hcmRbc2lnbmFsLlNJR1VTUjJdWyd0cmlwcGVkX2J5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQuZ2V0X2lkZW50KCkpCisgICAgICAgIHNpZ25hbGxlZF9hbGwucmVsZWFzZSgpCisKKyAgICBkZWYgc3Bhd25TaWduYWxsaW5nVGhyZWFkKHNlbGYpOgorICAgICAgICB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZChzZW5kX3NpZ25hbHMsICgpKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBnbG9iYWwgc2lnbmFsX2JsYWNrYm9hcmQKKworICAgIHNpZ25hbF9ibGFja2JvYXJkID0geyBzaWduYWwuU0lHVVNSMSA6IHsndHJpcHBlZCc6IDAsICd0cmlwcGVkX2J5JzogMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwuU0lHVVNSMiA6IHsndHJpcHBlZCc6IDAsICd0cmlwcGVkX2J5JzogMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwuU0lHQUxSTSA6IHsndHJpcHBlZCc6IDAsICd0cmlwcGVkX2J5JzogMCB9IH0KKworICAgIG9sZHNpZ3MgPSByZWdpc3RlclNpZ25hbHMoaGFuZGxlX3NpZ25hbHMsIGhhbmRsZV9zaWduYWxzLCBoYW5kbGVfc2lnbmFscykKKyAgICB0cnk6CisgICAgICAgIHJ1bl91bml0dGVzdChUaHJlYWRTaWduYWxzKQorICAgIGZpbmFsbHk6CisgICAgICAgIHJlZ2lzdGVyU2lnbmFscygqb2xkc2lncykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdGltZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RpbWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3MWMxMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RpbWUucHkKQEAgLTAsMCArMSwyNTUgQEAKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCisKKworY2xhc3MgVGltZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50ID0gdGltZS50aW1lKCkKKworICAgIGRlZiB0ZXN0X2RhdGFfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgdGltZS5hbHR6b25lCisgICAgICAgIHRpbWUuZGF5bGlnaHQKKyAgICAgICAgdGltZS50aW1lem9uZQorICAgICAgICB0aW1lLnR6bmFtZQorCisgICAgZGVmIHRlc3RfY2xvY2soc2VsZik6CisgICAgICAgIHRpbWUuY2xvY2soKQorCisgICAgZGVmIHRlc3RfY29udmVyc2lvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lLmN0aW1lKHNlbGYudCkKKyAgICAgICAgICAgICAgICAgICAgID09IHRpbWUuYXNjdGltZSh0aW1lLmxvY2FsdGltZShzZWxmLnQpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvbmcodGltZS5ta3RpbWUodGltZS5sb2NhbHRpbWUoc2VsZi50KSkpCisgICAgICAgICAgICAgICAgICAgICA9PSBsb25nKHNlbGYudCkpCisKKyAgICBkZWYgdGVzdF9zbGVlcChzZWxmKToKKyAgICAgICAgdGltZS5zbGVlcCgxLjIpCisKKyAgICBkZWYgdGVzdF9zdHJmdGltZShzZWxmKToKKyAgICAgICAgdHQgPSB0aW1lLmdtdGltZShzZWxmLnQpCisgICAgICAgIGZvciBkaXJlY3RpdmUgaW4gKCdhJywgJ0EnLCAnYicsICdCJywgJ2MnLCAnZCcsICdIJywgJ0knLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnaicsICdtJywgJ00nLCAncCcsICdTJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ1UnLCAndycsICdXJywgJ3gnLCAnWCcsICd5JywgJ1knLCAnWicsICclJyk6CisgICAgICAgICAgICBmb3JtYXQgPSAnICUnICsgZGlyZWN0aXZlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGltZS5zdHJmdGltZShmb3JtYXQsIHR0KQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdjb252ZXJzaW9uIHNwZWNpZmllcjogJXIgZmFpbGVkLicgJSBmb3JtYXQpCisKKyAgICAgICAgIyBJc3N1ZSAjMTA3NjI6IEd1YXJkIGFnYWluc3QgaW52YWxpZC9ub24tc3VwcG9ydGVkIGZvcm1hdCBzdHJpbmcKKyAgICAgICAgIyBzbyB0aGF0IFB5dGhvbiBkb24ndCBjcmFzaCAoV2luZG93cyBjcmFzaGVzIHdoZW4gdGhlIGZvcm1hdCBzdHJpbmcKKyAgICAgICAgIyBpbnB1dCB0byBbd11zdHJmdGltZSBpcyBub3Qga29zaGVyLgorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHRpbWUuc3RyZnRpbWUoJyVmJykKKworICAgIGRlZiB0ZXN0X3N0cmZ0aW1lX2JvdW5kc19jaGVja2luZyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBzdHJmdGltZSgpIGNoZWNrcyB0aGUgYm91bmRzIG9mIHRoZSB2YXJpb3VzIHBhcnRzCisgICAgICAgICNvZiB0aGUgdGltZSB0dXBsZSAoMCBpcyB2YWxpZCBmb3IgKmFsbCogdmFsdWVzKS4KKworICAgICAgICAjIENoZWNrIHllYXIgWzE5MDAsIG1heChpbnQpXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTg5OSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgLTEpKQorICAgICAgICBpZiB0aW1lLmFjY2VwdDJkeWVhcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTEsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIC0xKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTAwLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAtMSkpCisgICAgICAgICMgQ2hlY2sgbW9udGggWzEsIDEyXSArIHplcm8gc3VwcG9ydAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgLTEsIDEsIDAsIDAsIDAsIDAsIDEsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIDEzLCAxLCAwLCAwLCAwLCAwLCAxLCAtMSkpCisgICAgICAgICMgQ2hlY2sgZGF5IG9mIG1vbnRoIFsxLCAzMV0gKyB6ZXJvIHN1cHBvcnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIDEsIC0xLCAwLCAwLCAwLCAwLCAxLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTAwLCAxLCAzMiwgMCwgMCwgMCwgMCwgMSwgLTEpKQorICAgICAgICAjIENoZWNrIGhvdXIgWzAsIDIzXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgMSwgLTEsIDAsIDAsIDAsIDEsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIDEsIDEsIDI0LCAwLCAwLCAwLCAxLCAtMSkpCisgICAgICAgICMgQ2hlY2sgbWludXRlIFswLCA1OV0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIDEsIDEsIDAsIC0xLCAwLCAwLCAxLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTAwLCAxLCAxLCAwLCA2MCwgMCwgMCwgMSwgLTEpKQorICAgICAgICAjIENoZWNrIHNlY29uZCBbMCwgNjFdCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTAwLCAxLCAxLCAwLCAwLCAtMSwgMCwgMSwgLTEpKQorICAgICAgICAjIEM5OSBvbmx5IHJlcXVpcmVzIGFsbG93aW5nIGZvciBvbmUgbGVhcCBzZWNvbmQsIGJ1dCBQeXRob24ncyBkb2NzIHNheQorICAgICAgICAjIGFsbG93IHR3byBsZWFwIHNlY29uZHMgKDAuLjYxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgMSwgMCwgMCwgNjIsIDAsIDEsIC0xKSkKKyAgICAgICAgIyBObyBjaGVjayBmb3IgdXBwZXItYm91bmQgZGF5IG9mIHdlZWs7CisgICAgICAgICMgIHZhbHVlIGZvcmNlZCBpbnRvIHJhbmdlIGJ5IGEgYGAlIDdgYCBjYWxjdWxhdGlvbi4KKyAgICAgICAgIyBTdGFydCBjaGVjayBhdCAtMiBzaW5jZSBnZXR0bWFyZygpIGluY3JlbWVudHMgdmFsdWUgYmVmb3JlIHRha2luZworICAgICAgICAjICBtb2R1bG8uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTAwLCAxLCAxLCAwLCAwLCAwLCAtMiwgMSwgLTEpKQorICAgICAgICAjIENoZWNrIGRheSBvZiB0aGUgeWVhciBbMSwgMzY2XSArIHplcm8gc3VwcG9ydAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgMSwgMCwgMCwgMCwgMCwgLTEsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIDEsIDEsIDAsIDAsIDAsIDAsIDM2NywgLTEpKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF92YWx1ZXNfZm9yX3plcm8oc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdXNpbmcgYWxsIHplcm9zIHVzZXMgdGhlIHByb3BlciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgIyBObyB0ZXN0IGZvciBkYXlsaWdodCBzYXZpbmdzIHNpbmNlIHN0cmZ0aW1lKCkgZG9lcyBub3QgY2hhbmdlIG91dHB1dAorICAgICAgICAjIGJhc2VkIG9uIGl0cyB2YWx1ZS4KKyAgICAgICAgZXhwZWN0ZWQgPSAiMjAwMCAwMSAwMSAwMCAwMCAwMCAxIDAwMSIKKyAgICAgICAgcmVzdWx0ID0gdGltZS5zdHJmdGltZSgiJVkgJW0gJWQgJUggJU0gJVMgJXcgJWoiLCAoMCwpKjkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X3N0cnB0aW1lKHNlbGYpOgorICAgICAgICAjIFNob3VsZCBiZSBhYmxlIHRvIGdvIHJvdW5kLXRyaXAgZnJvbSBzdHJmdGltZSB0byBzdHJwdGltZSB3aXRob3V0CisgICAgICAgICMgcmFpc2luZyBhbiBleGNlcHRpb24uCisgICAgICAgIHR0ID0gdGltZS5nbXRpbWUoc2VsZi50KQorICAgICAgICBmb3IgZGlyZWN0aXZlIGluICgnYScsICdBJywgJ2InLCAnQicsICdjJywgJ2QnLCAnSCcsICdJJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2onLCAnbScsICdNJywgJ3AnLCAnUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdVJywgJ3cnLCAnVycsICd4JywgJ1gnLCAneScsICdZJywgJ1onLCAnJScpOgorICAgICAgICAgICAgZm9ybWF0ID0gJyUnICsgZGlyZWN0aXZlCisgICAgICAgICAgICBzdHJmX291dHB1dCA9IHRpbWUuc3RyZnRpbWUoZm9ybWF0LCB0dCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0aW1lLnN0cnB0aW1lKHN0cmZfb3V0cHV0LCBmb3JtYXQpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImNvbnZlcnNpb24gc3BlY2lmaWVyICVyIGZhaWxlZCB3aXRoICclcycgaW5wdXQuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQsIHN0cmZfb3V0cHV0KSkKKworICAgIGRlZiB0ZXN0X2FzY3RpbWUoc2VsZik6CisgICAgICAgIHRpbWUuYXNjdGltZSh0aW1lLmdtdGltZShzZWxmLnQpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRpbWUuYXNjdGltZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0aW1lLmFzY3RpbWUsICgpKQorICAgICAgICAjIFhYWDogUG9zaXggY29tcGlhbnQgYXNjdGltZSBzaG91bGQgcmVmdXNlIHRvIGNvbnZlcnQKKyAgICAgICAgIyB5ZWFyID4gOTk5OSwgYnV0IExpbnV4IGltcGxlbWVudGF0aW9uIGRvZXMgbm90LgorICAgICAgICAjIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuYXNjdGltZSwKKyAgICAgICAgIyAgICAgICAgICAgICAgICAgICgxMjM0NSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCkpCisgICAgICAgICMgWFhYOiBGb3Igbm93LCBqdXN0IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIGEgY3Jhc2g6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRpbWUuYXNjdGltZSgoMTIzNDUsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDApKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIodGltZSwgInR6c2V0IiksCisgICAgICAgICJ0aW1lIG1vZHVsZSBoYXMgbm8gYXR0cmlidXRlIHR6c2V0IikKKyAgICBkZWYgdGVzdF90enNldChzZWxmKToKKworICAgICAgICBmcm9tIG9zIGltcG9ydCBlbnZpcm9uCisKKyAgICAgICAgIyBFcG9jaCB0aW1lIG9mIG1pZG5pZ2h0IERlYyAyNXRoIDIwMDIuIE5ldmVyIERTVCBpbiBub3J0aGVybgorICAgICAgICAjIGhlbWlzcGhlcmUuCisgICAgICAgIHhtYXMyMDAyID0gMTA0MDc3NDQwMC4wCisKKyAgICAgICAgIyBUaGVzZSBmb3JtYXRzIGFyZSBjb3JyZWN0IGZvciAyMDAyLCBhbmQgcG9zc2libHkgZnV0dXJlIHllYXJzCisgICAgICAgICMgVGhpcyBmb3JtYXQgaXMgdGhlICdzdGFuZGFyZCcgYXMgZG9jdW1lbnRlZCBhdDoKKyAgICAgICAgIyBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDc5MDQ5NzUvYmFzZWRlZnMveGJkX2NoYXAwOC5odG1sCisgICAgICAgICMgVGhleSBhcmUgYWxzbyBkb2N1bWVudGVkIGluIHRoZSB0enNldCgzKSBtYW4gcGFnZSBvbiBtb3N0IFVuaXgKKyAgICAgICAgIyBzeXN0ZW1zLgorICAgICAgICBlYXN0ZXJuID0gJ0VTVCswNUVEVCxNNC4xLjAsTTEwLjUuMCcKKyAgICAgICAgdmljdG9yaWEgPSAnQUVTVC0xMEFFRFQtMTEsTTEwLjUuMCxNMy41LjAnCisgICAgICAgIHV0Yz0nVVRDKzAnCisKKyAgICAgICAgb3JnX1RaID0gZW52aXJvbi5nZXQoJ1RaJyxOb25lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBjYW4gc3dpdGNoIHRvIFVUQyB0aW1lIGFuZCByZXN1bHRzIGFyZSBjb3JyZWN0CisgICAgICAgICAgICAjIE5vdGUgdGhhdCB1bmtub3duIHRpbWV6b25lcyBkZWZhdWx0IHRvIFVUQy4KKyAgICAgICAgICAgICMgTm90ZSB0aGF0IGFsdHpvbmUgaXMgdW5kZWZpbmVkIGluIFVUQywgYXMgdGhlcmUgaXMgbm8gRFNUCisgICAgICAgICAgICBlbnZpcm9uWydUWiddID0gZWFzdGVybgorICAgICAgICAgICAgdGltZS50enNldCgpCisgICAgICAgICAgICBlbnZpcm9uWydUWiddID0gdXRjCisgICAgICAgICAgICB0aW1lLnR6c2V0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgdGltZS5nbXRpbWUoeG1hczIwMDIpLCB0aW1lLmxvY2FsdGltZSh4bWFzMjAwMikKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUuZGF5bGlnaHQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUudGltZXpvbmUsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUubG9jYWx0aW1lKHhtYXMyMDAyKS50bV9pc2RzdCwgMCkKKworICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgY2FuIHN3aXRjaCB0byBVUy9FYXN0ZXJuCisgICAgICAgICAgICBlbnZpcm9uWydUWiddID0gZWFzdGVybgorICAgICAgICAgICAgdGltZS50enNldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHRpbWUuZ210aW1lKHhtYXMyMDAyKSwgdGltZS5sb2NhbHRpbWUoeG1hczIwMDIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLnR6bmFtZSwgKCdFU1QnLCAnRURUJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0aW1lLnR6bmFtZSksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUuZGF5bGlnaHQsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUudGltZXpvbmUsIDE4MDAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmFsdHpvbmUsIDE0NDAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmxvY2FsdGltZSh4bWFzMjAwMikudG1faXNkc3QsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0aW1lLnR6bmFtZSksIDIpCisKKyAgICAgICAgICAgICMgTm93IGdvIHRvIHRoZSBzb3V0aGVybiBoZW1pc3BoZXJlLgorICAgICAgICAgICAgZW52aXJvblsnVFonXSA9IHZpY3RvcmlhCisgICAgICAgICAgICB0aW1lLnR6c2V0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodGltZS5nbXRpbWUoeG1hczIwMDIpLCB0aW1lLmxvY2FsdGltZSh4bWFzMjAwMikpCisKKyAgICAgICAgICAgICMgSXNzdWUgIzExODg2OiBBdXN0cmFsaWFuIEVhc3Rlcm4gU3RhbmRhcmQgVGltZSAoVVRDKzEwKSBpcyBjYWxsZWQKKyAgICAgICAgICAgICMgIkVTVCIgKGFzIEVhc3Rlcm4gU3RhbmRhcmQgVGltZSwgVVRDLTUpIGluc3RlYWQgb2YgIkFFU1QiIG9uIHNvbWUKKyAgICAgICAgICAgICMgb3BlcmF0aW5nIHN5c3RlbXMgKGUuZy4gRnJlZUJTRCksIHdoaWNoIGlzIHdyb25nLiBTZWUgZm9yIGV4YW1wbGUKKyAgICAgICAgICAgICMgdGhpcyBidWc6IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP2J1Zz05MzgxMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih0aW1lLnR6bmFtZVswXSwgKCdBRVNUJyAnRVNUJyksIHRpbWUudHpuYW1lWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUudHpuYW1lWzFdID09ICdBRURUJywgc3RyKHRpbWUudHpuYW1lWzFdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRpbWUudHpuYW1lKSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5kYXlsaWdodCwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS50aW1lem9uZSwgLTM2MDAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmFsdHpvbmUsIC0zOTYwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5sb2NhbHRpbWUoeG1hczIwMDIpLnRtX2lzZHN0LCAxKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIFJlcGFpciBUWiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbiBjYXNlIGFueSBvdGhlciB0ZXN0cworICAgICAgICAgICAgIyByZWx5IG9uIGl0LgorICAgICAgICAgICAgaWYgb3JnX1RaIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGVudmlyb25bJ1RaJ10gPSBvcmdfVFoKKyAgICAgICAgICAgIGVsaWYgZW52aXJvbi5oYXNfa2V5KCdUWicpOgorICAgICAgICAgICAgICAgIGRlbCBlbnZpcm9uWydUWiddCisgICAgICAgICAgICB0aW1lLnR6c2V0KCkKKworICAgIGRlZiB0ZXN0X2luc2FuZV90aW1lc3RhbXBzKHNlbGYpOgorICAgICAgICAjIEl0J3MgcG9zc2libGUgdGhhdCBzb21lIHBsYXRmb3JtIG1hcHMgdGltZV90IHRvIGRvdWJsZSwKKyAgICAgICAgIyBhbmQgdGhhdCB0aGlzIHRlc3Qgd2lsbCBmYWlsIHRoZXJlLiAgVGhpcyB0ZXN0IHNob3VsZAorICAgICAgICAjIGV4ZW1wdCBzdWNoIHBsYXRmb3JtcyAocHJvdmlkZWQgdGhleSByZXR1cm4gcmVhc29uYWJsZQorICAgICAgICAjIHJlc3VsdHMhKS4KKyAgICAgICAgZm9yIGZ1bmMgaW4gdGltZS5jdGltZSwgdGltZS5nbXRpbWUsIHRpbWUubG9jYWx0aW1lOgorICAgICAgICAgICAgZm9yIHVucmVhc29uYWJsZSBpbiAtMWUyMDAsIDFlMjAwOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZ1bmMsIHVucmVhc29uYWJsZSkKKworICAgIGRlZiB0ZXN0X2N0aW1lX3dpdGhvdXRfYXJnKHNlbGYpOgorICAgICAgICAjIE5vdCBzdXJlIGhvdyB0byBjaGVjayB0aGUgdmFsdWVzLCBzaW5jZSB0aGUgY2xvY2sgY291bGQgdGljaworICAgICAgICAjIGF0IGFueSB0aW1lLiAgTWFrZSBzdXJlIHRoZXNlIGFyZSBhdCBsZWFzdCBhY2NlcHRlZCBhbmQKKyAgICAgICAgIyBkb24ndCByYWlzZSBlcnJvcnMuCisgICAgICAgIHRpbWUuY3RpbWUoKQorICAgICAgICB0aW1lLmN0aW1lKE5vbmUpCisKKyAgICBkZWYgdGVzdF9nbXRpbWVfd2l0aG91dF9hcmcoc2VsZik6CisgICAgICAgIGd0MCA9IHRpbWUuZ210aW1lKCkKKyAgICAgICAgZ3QxID0gdGltZS5nbXRpbWUoTm9uZSkKKyAgICAgICAgdDAgPSB0aW1lLm1rdGltZShndDApCisgICAgICAgIHQxID0gdGltZS5ta3RpbWUoZ3QxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8PSAodDEtdDApIDwgMC4yKQorCisgICAgZGVmIHRlc3RfbG9jYWx0aW1lX3dpdGhvdXRfYXJnKHNlbGYpOgorICAgICAgICBsdDAgPSB0aW1lLmxvY2FsdGltZSgpCisgICAgICAgIGx0MSA9IHRpbWUubG9jYWx0aW1lKE5vbmUpCisgICAgICAgIHQwID0gdGltZS5ta3RpbWUobHQwKQorICAgICAgICB0MSA9IHRpbWUubWt0aW1lKGx0MSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gKHQxLXQwKSA8IDAuMikKKworICAgIGRlZiB0ZXN0X21rdGltZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTcyNjY4NworICAgICAgICBmb3IgdCBpbiAoLTIsIC0xLCAwLCAxKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0dCA9IHRpbWUubG9jYWx0aW1lKHQpCisgICAgICAgICAgICBleGNlcHQgKE92ZXJmbG93RXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLm1rdGltZSh0dCksIHQpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGltZVRlc3RDYXNlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RpbWVvdXQucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90aW1lb3V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYzEyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90aW1lb3V0LnB5CkBAIC0wLDAgKzEsMjAyIEBACisiIiJVbml0IHRlc3RzIGZvciBzb2NrZXQgdGltZW91dCBmZWF0dXJlLiIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKyMgVGhpcyByZXF1aXJlcyB0aGUgJ25ldHdvcmsnIHJlc291cmNlIGFzIGdpdmVuIG9uIHRoZSByZWdydGVzdCBjb21tYW5kIGxpbmUuCitza2lwX2V4cGVjdGVkID0gbm90IHRlc3Rfc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCduZXR3b3JrJykKKworaW1wb3J0IHRpbWUKK2ltcG9ydCBzb2NrZXQKKworCitjbGFzcyBDcmVhdGlvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGNhc2UgZm9yIHNvY2tldC5nZXR0aW1lb3V0KCkgYW5kIHNvY2tldC5zZXR0aW1lb3V0KCkiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorCisgICAgZGVmIHRlc3RPYmplY3RDcmVhdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IFNvY2tldCBjcmVhdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc29jay5nZXR0aW1lb3V0KCksIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgbm90IGRpc2FibGVkIGJ5IGRlZmF1bHQiKQorCisgICAgZGVmIHRlc3RGbG9hdFJldHVyblZhbHVlKHNlbGYpOgorICAgICAgICAjIFRlc3QgcmV0dXJuIHZhbHVlIG9mIGdldHRpbWVvdXQoKQorICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dCg3LjM0NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNvY2suZ2V0dGltZW91dCgpLCA3LjM0NSkKKworICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dCgzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc29jay5nZXR0aW1lb3V0KCksIDMpCisKKyAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNvY2suZ2V0dGltZW91dCgpLCBOb25lKQorCisgICAgZGVmIHRlc3RSZXR1cm5UeXBlKHNlbGYpOgorICAgICAgICAjIFRlc3QgcmV0dXJuIHR5cGUgb2YgZ2V0dGltZW91dCgpCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzZWxmLnNvY2suZ2V0dGltZW91dCgpKSwgdHlwZSgxLjApKQorCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDMuOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHNlbGYuc29jay5nZXR0aW1lb3V0KCkpLCB0eXBlKDEuMCkpCisKKyAgICBkZWYgdGVzdFR5cGVDaGVjayhzZWxmKToKKyAgICAgICAgIyBUZXN0IHR5cGUgY2hlY2tpbmcgYnkgc2V0dGltZW91dCgpCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDApCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDBMKQorICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dCgwLjApCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zb2NrLnNldHRpbWVvdXQsICIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuc29jay5zZXR0aW1lb3V0LCB1IiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zb2NrLnNldHRpbWVvdXQsICgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuc29jay5zZXR0aW1lb3V0LCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnNvY2suc2V0dGltZW91dCwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zb2NrLnNldHRpbWVvdXQsIDBqKQorCisgICAgZGVmIHRlc3RSYW5nZUNoZWNrKHNlbGYpOgorICAgICAgICAjIFRlc3QgcmFuZ2UgY2hlY2tpbmcgYnkgc2V0dGltZW91dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuc29jay5zZXR0aW1lb3V0LCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5zb2NrLnNldHRpbWVvdXQsIC0xTCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5zb2NrLnNldHRpbWVvdXQsIC0xLjApCisKKyAgICBkZWYgdGVzdFRpbWVvdXRUaGVuQmxvY2tpbmcoc2VsZik6CisgICAgICAgICMgVGVzdCBzZXR0aW1lb3V0KCkgZm9sbG93ZWQgYnkgc2V0YmxvY2tpbmcoKQorICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dCgxMCkKKyAgICAgICAgc2VsZi5zb2NrLnNldGJsb2NraW5nKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zb2NrLmdldHRpbWVvdXQoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5zb2NrLnNldGJsb2NraW5nKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zb2NrLmdldHRpbWVvdXQoKSwgMC4wKQorCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDEwKQorICAgICAgICBzZWxmLnNvY2suc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNvY2suZ2V0dGltZW91dCgpLCAwLjApCisgICAgICAgIHNlbGYuc29jay5zZXRibG9ja2luZygxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc29jay5nZXR0aW1lb3V0KCksIE5vbmUpCisKKyAgICBkZWYgdGVzdEJsb2NraW5nVGhlblRpbWVvdXQoc2VsZik6CisgICAgICAgICMgVGVzdCBzZXRibG9ja2luZygpIGZvbGxvd2VkIGJ5IHNldHRpbWVvdXQoKQorICAgICAgICBzZWxmLnNvY2suc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNvY2suZ2V0dGltZW91dCgpLCAxKQorCisgICAgICAgIHNlbGYuc29jay5zZXRibG9ja2luZygxKQorICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dCgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc29jay5nZXR0aW1lb3V0KCksIDEpCisKKworY2xhc3MgVGltZW91dFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGNhc2UgZm9yIHNvY2tldC5zb2NrZXQoKSB0aW1lb3V0IGZ1bmN0aW9ucyIiIgorCisgICAgIyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgdGVzdHMgaGVyZSB0cnlpbmcgdG8gbWFrZSBzdXJlIHRoYXQgYW4gb3BlcmF0aW9uCisgICAgIyBkb2Vzbid0IHRha2UgdG9vIG11Y2ggbG9uZ2VyIHRoYW4gZXhwZWN0ZWQuICBCdXQgY29tcGV0aW5nIG1hY2hpbmUKKyAgICAjIGFjdGl2aXR5IG1ha2VzIGl0IGluZXZpdGFibGUgdGhhdCBzdWNoIHRlc3RzIHdpbGwgZmFpbCBhdCB0aW1lcy4KKyAgICAjIFdoZW4gZnV6eiB3YXMgYXQgMS4wLCBJICh0aW0pIHJvdXRpbmVseSBzYXcgYm9ndXMgZmFpbHVyZXMgb24gV2luMksKKyAgICAjIGFuZCBXaW45OFNFLiAgQm9vc3RpbmcgaXQgdG8gMi4wIGhlbHBlZCBhIGxvdCwgYnV0IGlzbid0IGEgcmVhbAorICAgICMgc29sdXRpb24uCisgICAgZnV6eiA9IDIuMAorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuYWRkcl9yZW1vdGUgPSAoJ3d3dy5weXRob24ub3JnLicsIDgwKQorICAgICAgICBzZWxmLmxvY2FsaG9zdCA9ICcxMjcuMC4wLjEnCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCisKKyAgICBkZWYgdGVzdENvbm5lY3RUaW1lb3V0KHNlbGYpOgorICAgICAgICAjIENob29zZSBhIHByaXZhdGUgYWRkcmVzcyB0aGF0IGlzIHVubGlrZWx5IHRvIGV4aXN0IHRvIHByZXZlbnQKKyAgICAgICAgIyBmYWlsdXJlcyBkdWUgdG8gdGhlIGNvbm5lY3Qgc3VjY2VlZGluZyBiZWZvcmUgdGhlIHRpbWVvdXQuCisgICAgICAgICMgVXNlIGEgZG90dGVkIElQIGFkZHJlc3MgdG8gYXZvaWQgaW5jbHVkaW5nIHRoZSBETlMgbG9va3VwIHRpbWUKKyAgICAgICAgIyB3aXRoIHRoZSBjb25uZWN0IHRpbWUuICBUaGlzIGF2b2lkcyBmYWlsaW5nIHRoZSBhc3NlcnRpb24gdGhhdAorICAgICAgICAjIHRoZSB0aW1lb3V0IG9jY3VycmVkIGZhc3QgZW5vdWdoLgorICAgICAgICBhZGRyID0gKCcxMC4wLjAuMCcsIDEyMzQ1KQorCisgICAgICAgICMgVGVzdCBjb25uZWN0KCkgdGltZW91dAorICAgICAgICBfdGltZW91dCA9IDAuMDAxCisgICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KF90aW1lb3V0KQorCisgICAgICAgIF90MSA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5zb2NrLmNvbm5lY3QsIGFkZHIpCisgICAgICAgIF90MiA9IHRpbWUudGltZSgpCisKKyAgICAgICAgX2RlbHRhID0gYWJzKF90MSAtIF90MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9kZWx0YSA8IF90aW1lb3V0ICsgc2VsZi5mdXp6LAorICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgKCVnKSBpcyBtb3JlIHRoYW4gJWcgc2Vjb25kcyBtb3JlIHRoYW4gZXhwZWN0ZWQgKCVnKSIKKyAgICAgICAgICAgICAgICAgICAgICUoX2RlbHRhLCBzZWxmLmZ1enosIF90aW1lb3V0KSkKKworICAgIGRlZiB0ZXN0UmVjdlRpbWVvdXQoc2VsZik6CisgICAgICAgICMgVGVzdCByZWN2KCkgdGltZW91dAorICAgICAgICBfdGltZW91dCA9IDAuMDIKKworICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi5hZGRyX3JlbW90ZVswXSk6CisgICAgICAgICAgICBzZWxmLnNvY2suY29ubmVjdChzZWxmLmFkZHJfcmVtb3RlKQorICAgICAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoX3RpbWVvdXQpCisKKyAgICAgICAgICAgIF90MSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQudGltZW91dCwgc2VsZi5zb2NrLnJlY3YsIDEwMjQpCisgICAgICAgICAgICBfdDIgPSB0aW1lLnRpbWUoKQorCisgICAgICAgICAgICBfZGVsdGEgPSBhYnMoX3QxIC0gX3QyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9kZWx0YSA8IF90aW1lb3V0ICsgc2VsZi5mdXp6LAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0ICglZykgaXMgJWcgc2Vjb25kcyBtb3JlIHRoYW4gZXhwZWN0ZWQgKCVnKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAlKF9kZWx0YSwgc2VsZi5mdXp6LCBfdGltZW91dCkpCisKKyAgICBkZWYgdGVzdEFjY2VwdFRpbWVvdXQoc2VsZik6CisgICAgICAgICMgVGVzdCBhY2NlcHQoKSB0aW1lb3V0CisgICAgICAgIF90aW1lb3V0ID0gMgorICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dChfdGltZW91dCkKKyAgICAgICAgIyBQcmV2ZW50ICJBZGRyZXNzIGFscmVhZHkgaW4gdXNlIiBzb2NrZXQgZXhjZXB0aW9ucworICAgICAgICB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaywgc2VsZi5sb2NhbGhvc3QpCisgICAgICAgIHNlbGYuc29jay5saXN0ZW4oNSkKKworICAgICAgICBfdDEgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuc29jay5hY2NlcHQpCisgICAgICAgIF90MiA9IHRpbWUudGltZSgpCisKKyAgICAgICAgX2RlbHRhID0gYWJzKF90MSAtIF90MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9kZWx0YSA8IF90aW1lb3V0ICsgc2VsZi5mdXp6LAorICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgKCVnKSBpcyAlZyBzZWNvbmRzIG1vcmUgdGhhbiBleHBlY3RlZCAoJWcpIgorICAgICAgICAgICAgICAgICAgICAgJShfZGVsdGEsIHNlbGYuZnV6eiwgX3RpbWVvdXQpKQorCisgICAgZGVmIHRlc3RSZWN2ZnJvbVRpbWVvdXQoc2VsZik6CisgICAgICAgICMgVGVzdCByZWN2ZnJvbSgpIHRpbWVvdXQKKyAgICAgICAgX3RpbWVvdXQgPSAyCisgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dChfdGltZW91dCkKKyAgICAgICAgIyBQcmV2ZW50ICJBZGRyZXNzIGFscmVhZHkgaW4gdXNlIiBzb2NrZXQgZXhjZXB0aW9ucworICAgICAgICB0ZXN0X3N1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaywgc2VsZi5sb2NhbGhvc3QpCisKKyAgICAgICAgX3QxID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLnNvY2sucmVjdmZyb20sIDgxOTIpCisgICAgICAgIF90MiA9IHRpbWUudGltZSgpCisKKyAgICAgICAgX2RlbHRhID0gYWJzKF90MSAtIF90MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9kZWx0YSA8IF90aW1lb3V0ICsgc2VsZi5mdXp6LAorICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgKCVnKSBpcyAlZyBzZWNvbmRzIG1vcmUgdGhhbiBleHBlY3RlZCAoJWcpIgorICAgICAgICAgICAgICAgICAgICAgJShfZGVsdGEsIHNlbGYuZnV6eiwgX3RpbWVvdXQpKQorCisgICAgZGVmIHRlc3RTZW5kKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc2VuZCgpIHRpbWVvdXQKKyAgICAgICAgIyBjb3VsZG4ndCBmaWd1cmUgb3V0IGhvdyB0byB0ZXN0IGl0CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0U2VuZHRvKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc2VuZHRvKCkgdGltZW91dAorICAgICAgICAjIGNvdWxkbid0IGZpZ3VyZSBvdXQgaG93IHRvIHRlc3QgaXQKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RTZW5kYWxsKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc2VuZGFsbCgpIHRpbWVvdXQKKyAgICAgICAgIyBjb3VsZG4ndCBmaWd1cmUgb3V0IGhvdyB0byB0ZXN0IGl0CisgICAgICAgIHBhc3MKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENyZWF0aW9uVGVzdENhc2UsIFRpbWVvdXRUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdGsucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90ay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjI1ZGIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdGsucHkKQEAgLTAsMCArMSwyOSBAQAoraW1wb3J0IG9zCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCisjIFNraXAgdGVzdCBpZiBfdGtpbnRlciB3YXNuJ3QgYnVpbHQuCit0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnX3RraW50ZXInKQorCit0aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQorbGliX3RrX3Rlc3QgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHRoaXNfZGlyLCBvcy5wYXRoLnBhcmRpciwKKyAgICAnbGliLXRrJywgJ3Rlc3QnKSkKKword2l0aCB0ZXN0X3N1cHBvcnQuRGlyc09uU3lzUGF0aChsaWJfdGtfdGVzdCk6CisgICAgaW1wb3J0IHJ1bnRrdGVzdHMKKworIyBTa2lwIHRlc3QgaWYgdGsgY2Fubm90IGJlIGluaXRpYWxpemVkLgorcnVudGt0ZXN0cy5jaGVja190a19hdmFpbGFiaWxpdHkoKQorCitkZWYgdGVzdF9tYWluKGVuYWJsZV9ndWk9RmFsc2UpOgorICAgIGlmIGVuYWJsZV9ndWk6CisgICAgICAgIGlmIHRlc3Rfc3VwcG9ydC51c2VfcmVzb3VyY2VzIGlzIE5vbmU6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlcyA9IFsnZ3VpJ10KKyAgICAgICAgZWxpZiAnZ3VpJyBub3QgaW4gdGVzdF9zdXBwb3J0LnVzZV9yZXNvdXJjZXM6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlcy5hcHBlbmQoJ2d1aScpCisKKyAgICB3aXRoIHRlc3Rfc3VwcG9ydC5EaXJzT25TeXNQYXRoKGxpYl90a190ZXN0KToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgICAgICpydW50a3Rlc3RzLmdldF90ZXN0cyh0ZXh0PUZhbHNlLCBwYWNrYWdlcz1bJ3Rlc3RfdGtpbnRlciddKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oZW5hYmxlX2d1aT1UcnVlKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdG9rZW5pemUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90b2tlbml6ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODlmNjhmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdG9rZW5pemUucHkKQEAgLTAsMCArMSw2MjUgQEAKK2RvY3Rlc3RzID0gIiIiCitUZXN0cyBmb3IgdGhlIHRva2VuaXplIG1vZHVsZS4KKworICAgID4+PiBpbXBvcnQgZ2xvYiwgcmFuZG9tLCBzeXMKKworVGhlIHRlc3RzIGNhbiBiZSByZWFsbHkgc2ltcGxlLiBHaXZlbiBhIHNtYWxsIGZyYWdtZW50IG9mIHNvdXJjZQorY29kZSwgcHJpbnQgb3V0IGEgdGFibGUgd2l0aCB0b2tlbnMuIFRoZSBFTkRNQVJLIGlzIG9taXR0ZWQgZm9yCiticmV2aXR5LgorCisgICAgPj4+IGR1bXBfdG9rZW5zKCIxICsgMSIpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNCkgKDEsIDUpCisKKyAgICA+Pj4gZHVtcF90b2tlbnMoImlmIEZhbHNlOlxcbiIKKyAgICAuLi4gICAgICAgICAgICAgIiAgICAjIE5MXFxuIgorICAgIC4uLiAgICAgICAgICAgICAiICAgIFRydWUgPSBGYWxzZSAjIE5FV0xJTkVcXG4iKQorICAgIE5BTUUgICAgICAgJ2lmJyAgICAgICAgICAoMSwgMCkgKDEsIDIpCisgICAgTkFNRSAgICAgICAnRmFsc2UnICAgICAgICgxLCAzKSAoMSwgOCkKKyAgICBPUCAgICAgICAgICc6JyAgICAgICAgICAgKDEsIDgpICgxLCA5KQorICAgIE5FV0xJTkUgICAgJ1xcbicgICAgICAgICAgKDEsIDkpICgxLCAxMCkKKyAgICBDT01NRU5UICAgICcjIE5MJyAgICAgICAgKDIsIDQpICgyLCA4KQorICAgIE5MICAgICAgICAgJ1xcbicgICAgICAgICAgKDIsIDgpICgyLCA5KQorICAgIElOREVOVCAgICAgJyAgICAnICAgICAgICAoMywgMCkgKDMsIDQpCisgICAgTkFNRSAgICAgICAnVHJ1ZScgICAgICAgICgzLCA0KSAoMywgOCkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDMsIDkpICgzLCAxMCkKKyAgICBOQU1FICAgICAgICdGYWxzZScgICAgICAgKDMsIDExKSAoMywgMTYpCisgICAgQ09NTUVOVCAgICAnIyBORVdMSU5FJyAgICgzLCAxNykgKDMsIDI2KQorICAgIE5FV0xJTkUgICAgJ1xcbicgICAgICAgICAgKDMsIDI2KSAoMywgMjcpCisgICAgREVERU5UICAgICAnJyAgICAgICAgICAgICg0LCAwKSAoNCwgMCkKKworICAgID4+PiBpbmRlbnRfZXJyb3JfZmlsZSA9IFwiIiIKKyAgICAuLi4gZGVmIGsoeCk6CisgICAgLi4uICAgICB4ICs9IDIKKyAgICAuLi4gICB4ICs9IDUKKyAgICAuLi4gXCIiIgorCisgICAgPj4+IGZvciB0b2sgaW4gZ2VuZXJhdGVfdG9rZW5zKFN0cmluZ0lPKGluZGVudF9lcnJvcl9maWxlKS5yZWFkbGluZSk6IHBhc3MKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIC4uLgorICAgIEluZGVudGF0aW9uRXJyb3I6IHVuaW5kZW50IGRvZXMgbm90IG1hdGNoIGFueSBvdXRlciBpbmRlbnRhdGlvbiBsZXZlbAorCitUZXN0IHJvdW5kdHJpcCBmb3IgYHVudG9rZW5pemVgLiBgZmAgaXMgYW4gb3BlbiBmaWxlIG9yIGEgc3RyaW5nLiBUaGUgc291cmNlCitjb2RlIGluIGYgaXMgdG9rZW5pemVkLCBjb252ZXJ0ZWQgYmFjayB0byBzb3VyY2UgY29kZSB2aWEgdG9rZW5pemUudW50b2tlbml6ZSgpLAorYW5kIHRva2VuaXplZCBhZ2FpbiBmcm9tIHRoZSBsYXR0ZXIuIFRoZSB0ZXN0IGZhaWxzIGlmIHRoZSBzZWNvbmQgdG9rZW5pemF0aW9uCitkb2Vzbid0IG1hdGNoIHRoZSBmaXJzdC4KKworICAgID4+PiBkZWYgcm91bmR0cmlwKGYpOgorICAgIC4uLiAgICAgaWYgaXNpbnN0YW5jZShmLCBzdHIpOiBmID0gU3RyaW5nSU8oZikKKyAgICAuLi4gICAgIHRva2VuX2xpc3QgPSBsaXN0KGdlbmVyYXRlX3Rva2VucyhmLnJlYWRsaW5lKSkKKyAgICAuLi4gICAgIGYuY2xvc2UoKQorICAgIC4uLiAgICAgdG9rZW5zMSA9IFt0b2tbOjJdIGZvciB0b2sgaW4gdG9rZW5fbGlzdF0KKyAgICAuLi4gICAgIG5ld190ZXh0ID0gdW50b2tlbml6ZSh0b2tlbnMxKQorICAgIC4uLiAgICAgcmVhZGxpbmUgPSBpdGVyKG5ld190ZXh0LnNwbGl0bGluZXMoMSkpLm5leHQKKyAgICAuLi4gICAgIHRva2VuczIgPSBbdG9rWzoyXSBmb3IgdG9rIGluIGdlbmVyYXRlX3Rva2VucyhyZWFkbGluZSldCisgICAgLi4uICAgICByZXR1cm4gdG9rZW5zMSA9PSB0b2tlbnMyCisgICAgLi4uCisKK1RoZXJlIGFyZSBzb21lIHN0YW5kYXJkIGZvcm1hdHRpbmcgcHJhY3RpY2VzIHRoYXQgYXJlIGVhc3kgdG8gZ2V0IHJpZ2h0LgorCisgICAgPj4+IHJvdW5kdHJpcCgiaWYgeCA9PSAxOlxcbiIKKyAgICAuLi4gICAgICAgICAgICIgICAgcHJpbnQgeFxcbiIpCisgICAgVHJ1ZQorCisgICAgPj4+IHJvdW5kdHJpcCgiIyBUaGlzIGlzIGEgY29tbWVudFxcbiMgVGhpcyBhbHNvIikKKyAgICBUcnVlCisKK1NvbWUgcGVvcGxlIHVzZSBkaWZmZXJlbnQgZm9ybWF0dGluZyBjb252ZW50aW9ucywgd2hpY2ggbWFrZXMKK3VudG9rZW5pemUgYSBsaXR0bGUgdHJpY2tpZXIuIE5vdGUgdGhhdCB0aGlzIHRlc3QgaW52b2x2ZXMgdHJhaWxpbmcKK3doaXRlc3BhY2UgYWZ0ZXIgdGhlIGNvbG9uLiBOb3RlIHRoYXQgd2UgdXNlIGhleCBlc2NhcGVzIHRvIG1ha2UgdGhlCit0d28gdHJhaWxpbmcgYmxhbmtzIGFwcGVyYW50IGluIHRoZSBleHBlY3RlZCBvdXRwdXQuCisKKyAgICA+Pj4gcm91bmR0cmlwKCJpZiB4ID09IDEgOiBcXG4iCisgICAgLi4uICAgICAgICAgICAiICBwcmludCB4XFxuIikKKyAgICBUcnVlCisKKyAgICA+Pj4gZiA9IHRlc3Rfc3VwcG9ydC5maW5kZmlsZSgidG9rZW5pemVfdGVzdHMiICsgb3MuZXh0c2VwICsgInR4dCIpCisgICAgPj4+IHJvdW5kdHJpcChvcGVuKGYpKQorICAgIFRydWUKKworICAgID4+PiByb3VuZHRyaXAoImlmIHggPT0gMTpcXG4iCisgICAgLi4uICAgICAgICAgICAiICAgICMgQSBjb21tZW50IGJ5IGl0c2VsZi5cXG4iCisgICAgLi4uICAgICAgICAgICAiICAgIHByaW50IHggIyBDb21tZW50IGhlcmUsIHRvby5cXG4iCisgICAgLi4uICAgICAgICAgICAiICAgICMgQW5vdGhlciBjb21tZW50LlxcbiIKKyAgICAuLi4gICAgICAgICAgICJhZnRlcl9pZiA9IFRydWVcXG4iKQorICAgIFRydWUKKworICAgID4+PiByb3VuZHRyaXAoImlmICh4ICMgVGhlIGNvbW1lbnRzIG5lZWQgdG8gZ28gaW4gdGhlIHJpZ2h0IHBsYWNlXFxuIgorICAgIC4uLiAgICAgICAgICAgIiAgICA9PSAxKTpcXG4iCisgICAgLi4uICAgICAgICAgICAiICAgIHByaW50ICd4PT0xJ1xcbiIpCisgICAgVHJ1ZQorCisgICAgPj4+IHJvdW5kdHJpcCgiY2xhc3MgVGVzdDogIyBBIGNvbW1lbnQgaGVyZVxcbiIKKyAgICAuLi4gICAgICAgICAgICIgICMgQSBjb21tZW50IHdpdGggd2VpcmQgaW5kZW50XFxuIgorICAgIC4uLiAgICAgICAgICAgIiAgYWZ0ZXJfY29tID0gNVxcbiIKKyAgICAuLi4gICAgICAgICAgICIgIGRlZiB4KG0pOiByZXR1cm4gbSo1ICMgYSBvbmUgbGluZXJcXG4iCisgICAgLi4uICAgICAgICAgICAiICBkZWYgeShtKTogIyBBIHdoaXRlc3BhY2UgYWZ0ZXIgdGhlIGNvbG9uXFxuIgorICAgIC4uLiAgICAgICAgICAgIiAgICAgcmV0dXJuIHkqNCAjIDMtc3BhY2UgaW5kZW50XFxuIikKKyAgICBUcnVlCisKK1NvbWUgZXJyb3ItaGFuZGxpbmcgY29kZQorCisgICAgPj4+IHJvdW5kdHJpcCgidHJ5OiBpbXBvcnQgc29tZW1vZHVsZVxcbiIKKyAgICAuLi4gICAgICAgICAgICJleGNlcHQgSW1wb3J0RXJyb3I6ICMgY29tbWVudFxcbiIKKyAgICAuLi4gICAgICAgICAgICIgICAgcHJpbnQgJ0NhbiBub3QgaW1wb3J0JyAjIGNvbW1lbnQyXFxuIgorICAgIC4uLiAgICAgICAgICAgImVsc2U6ICAgcHJpbnQgJ0xvYWRlZCdcXG4iKQorICAgIFRydWUKKworQmFsYW5jaW5nIGNvbnRpbnVhdGlvbgorCisgICAgPj4+IHJvdW5kdHJpcCgiYSA9ICgzLDQsIFxcbiIKKyAgICAuLi4gICAgICAgICAgICI1LDYpXFxuIgorICAgIC4uLiAgICAgICAgICAgInkgPSBbMywgNCxcXG4iCisgICAgLi4uICAgICAgICAgICAiNV1cXG4iCisgICAgLi4uICAgICAgICAgICAieiA9IHsnYSc6IDUsXFxuIgorICAgIC4uLiAgICAgICAgICAgIidiJzoxNSwgJ2MnOlRydWV9XFxuIgorICAgIC4uLiAgICAgICAgICAgInggPSBsZW4oeSkgKyA1IC0gYVtcXG4iCisgICAgLi4uICAgICAgICAgICAiM10gLSBhWzJdXFxuIgorICAgIC4uLiAgICAgICAgICAgIisgbGVuKHopIC0geltcXG4iCisgICAgLi4uICAgICAgICAgICAiJ2InXVxcbiIpCisgICAgVHJ1ZQorCitPcmRpbmFyeSBpbnRlZ2VycyBhbmQgYmluYXJ5IG9wZXJhdG9ycworCisgICAgPj4+IGR1bXBfdG9rZW5zKCIweGZmIDw9IDI1NSIpCisgICAgTlVNQkVSICAgICAnMHhmZicgICAgICAgICgxLCAwKSAoMSwgNCkKKyAgICBPUCAgICAgICAgICc8PScgICAgICAgICAgKDEsIDUpICgxLCA3KQorICAgIE5VTUJFUiAgICAgJzI1NScgICAgICAgICAoMSwgOCkgKDEsIDExKQorICAgID4+PiBkdW1wX3Rva2VucygiMGIxMCA8PSAyNTUiKQorICAgIE5VTUJFUiAgICAgJzBiMTAnICAgICAgICAoMSwgMCkgKDEsIDQpCisgICAgT1AgICAgICAgICAnPD0nICAgICAgICAgICgxLCA1KSAoMSwgNykKKyAgICBOVU1CRVIgICAgICcyNTUnICAgICAgICAgKDEsIDgpICgxLCAxMSkKKyAgICA+Pj4gZHVtcF90b2tlbnMoIjBvMTIzIDw9IDAxMjMiKQorICAgIE5VTUJFUiAgICAgJzBvMTIzJyAgICAgICAoMSwgMCkgKDEsIDUpCisgICAgT1AgICAgICAgICAnPD0nICAgICAgICAgICgxLCA2KSAoMSwgOCkKKyAgICBOVU1CRVIgICAgICcwMTIzJyAgICAgICAgKDEsIDkpICgxLCAxMykKKyAgICA+Pj4gZHVtcF90b2tlbnMoIjAxMjM0NTY3ID4gfjB4MTUiKQorICAgIE5VTUJFUiAgICAgJzAxMjM0NTY3JyAgICAoMSwgMCkgKDEsIDgpCisgICAgT1AgICAgICAgICAnPicgICAgICAgICAgICgxLCA5KSAoMSwgMTApCisgICAgT1AgICAgICAgICAnficgICAgICAgICAgICgxLCAxMSkgKDEsIDEyKQorICAgIE5VTUJFUiAgICAgJzB4MTUnICAgICAgICAoMSwgMTIpICgxLCAxNikKKyAgICA+Pj4gZHVtcF90b2tlbnMoIjIxMzQ1NjggIT0gMDEyMzE1MTUiKQorICAgIE5VTUJFUiAgICAgJzIxMzQ1NjgnICAgICAoMSwgMCkgKDEsIDcpCisgICAgT1AgICAgICAgICAnIT0nICAgICAgICAgICgxLCA4KSAoMSwgMTApCisgICAgTlVNQkVSICAgICAnMDEyMzE1MTUnICAgICgxLCAxMSkgKDEsIDE5KQorICAgID4+PiBkdW1wX3Rva2VucygiKC0xMjQ1NjEtMSkgJiAwMjAwMDAwMDAwIikKKyAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJy0nICAgICAgICAgICAoMSwgMSkgKDEsIDIpCisgICAgTlVNQkVSICAgICAnMTI0NTYxJyAgICAgICgxLCAyKSAoMSwgOCkKKyAgICBPUCAgICAgICAgICctJyAgICAgICAgICAgKDEsIDgpICgxLCA5KQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgOSkgKDEsIDEwKQorICAgIE9QICAgICAgICAgJyknICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKKyAgICBPUCAgICAgICAgICcmJyAgICAgICAgICAgKDEsIDEyKSAoMSwgMTMpCisgICAgTlVNQkVSICAgICAnMDIwMDAwMDAwMCcgICgxLCAxNCkgKDEsIDI0KQorICAgID4+PiBkdW1wX3Rva2VucygiMHhkZWFkYmVlZiAhPSAtMSIpCisgICAgTlVNQkVSICAgICAnMHhkZWFkYmVlZicgICgxLCAwKSAoMSwgMTApCisgICAgT1AgICAgICAgICAnIT0nICAgICAgICAgICgxLCAxMSkgKDEsIDEzKQorICAgIE9QICAgICAgICAgJy0nICAgICAgICAgICAoMSwgMTQpICgxLCAxNSkKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDE1KSAoMSwgMTYpCisgICAgPj4+IGR1bXBfdG9rZW5zKCIweGRlYWRjMGRlICYgMDEyMzQ1IikKKyAgICBOVU1CRVIgICAgICcweGRlYWRjMGRlJyAgKDEsIDApICgxLCAxMCkKKyAgICBPUCAgICAgICAgICcmJyAgICAgICAgICAgKDEsIDExKSAoMSwgMTIpCisgICAgTlVNQkVSICAgICAnMDEyMzQ1JyAgICAgICgxLCAxMykgKDEsIDE5KQorICAgID4+PiBkdW1wX3Rva2VucygiMHhGRiAmIDB4MTUgfCAxMjM0IikKKyAgICBOVU1CRVIgICAgICcweEZGJyAgICAgICAgKDEsIDApICgxLCA0KQorICAgIE9QICAgICAgICAgJyYnICAgICAgICAgICAoMSwgNSkgKDEsIDYpCisgICAgTlVNQkVSICAgICAnMHgxNScgICAgICAgICgxLCA3KSAoMSwgMTEpCisgICAgT1AgICAgICAgICAnfCcgICAgICAgICAgICgxLCAxMikgKDEsIDEzKQorICAgIE5VTUJFUiAgICAgJzEyMzQnICAgICAgICAoMSwgMTQpICgxLCAxOCkKKworTG9uZyBpbnRlZ2VycworCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gMEwiKQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKKyAgICBOVU1CRVIgICAgICcwTCcgICAgICAgICAgKDEsIDQpICgxLCA2KQorICAgID4+PiBkdW1wX3Rva2VucygieCA9IDB4ZmZmZmZmZmZmZmYiKQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKKyAgICBOVU1CRVIgICAgICcweGZmZmZmZmZmZmYgKDEsIDQpICgxLCAxNykKKyAgICA+Pj4gZHVtcF90b2tlbnMoInggPSAxMjMxNDEyNDIxNTEyNTE2MTYxMTBsIikKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCisgICAgTlVNQkVSICAgICAnMTIzMTQxMjQyMTUxICgxLCA0KSAoMSwgMjYpCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gLTE1OTIxNTkwMjE1MDEyNTkxTCIpCisgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIE9QICAgICAgICAgJy0nICAgICAgICAgICAoMSwgNCkgKDEsIDUpCisgICAgTlVNQkVSICAgICAnMTU5MjE1OTAyMTUwICgxLCA1KSAoMSwgMjMpCisKK0Zsb2F0aW5nIHBvaW50IG51bWJlcnMKKworICAgID4+PiBkdW1wX3Rva2VucygieCA9IDMuMTQxNTkiKQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKKyAgICBOVU1CRVIgICAgICczLjE0MTU5JyAgICAgKDEsIDQpICgxLCAxMSkKKyAgICA+Pj4gZHVtcF90b2tlbnMoInggPSAzMTQxNTkuIikKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCisgICAgTlVNQkVSICAgICAnMzE0MTU5LicgICAgICgxLCA0KSAoMSwgMTEpCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gLjMxNDE1OSIpCisgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIE5VTUJFUiAgICAgJy4zMTQxNTknICAgICAoMSwgNCkgKDEsIDExKQorICAgID4+PiBkdW1wX3Rva2VucygieCA9IDNlMTQxNTkiKQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKKyAgICBOVU1CRVIgICAgICczZTE0MTU5JyAgICAgKDEsIDQpICgxLCAxMSkKKyAgICA+Pj4gZHVtcF90b2tlbnMoInggPSAzRTEyMyIpCisgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIE5VTUJFUiAgICAgJzNFMTIzJyAgICAgICAoMSwgNCkgKDEsIDkpCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ4K3kgPSAzZS0xMjMwIikKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMSkgKDEsIDIpCisgICAgTkFNRSAgICAgICAneScgICAgICAgICAgICgxLCAyKSAoMSwgMykKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDQpICgxLCA1KQorICAgIE5VTUJFUiAgICAgJzNlLTEyMzAnICAgICAoMSwgNikgKDEsIDEzKQorICAgID4+PiBkdW1wX3Rva2VucygieCA9IDMuMTRlMTU5IikKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCisgICAgTlVNQkVSICAgICAnMy4xNGUxNTknICAgICgxLCA0KSAoMSwgMTIpCisKK1N0cmluZyBsaXRlcmFscworCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gJyc7IHkgPSBcXFwiXFxcIiIpCisgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIFNUUklORyAgICAgIicnIiAgICAgICAgICAoMSwgNCkgKDEsIDYpCisgICAgT1AgICAgICAgICAnOycgICAgICAgICAgICgxLCA2KSAoMSwgNykKKyAgICBOQU1FICAgICAgICd5JyAgICAgICAgICAgKDEsIDgpICgxLCA5KQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKKyAgICBTVFJJTkcgICAgICciIicgICAgICAgICAgKDEsIDEyKSAoMSwgMTQpCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gJ1xcXCInOyB5ID0gXFxcIidcXFwiIikKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCisgICAgU1RSSU5HICAgICAnXFwnIlxcJycgICAgICAgKDEsIDQpICgxLCA3KQorICAgIE9QICAgICAgICAgJzsnICAgICAgICAgICAoMSwgNykgKDEsIDgpCisgICAgTkFNRSAgICAgICAneScgICAgICAgICAgICgxLCA5KSAoMSwgMTApCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAxMSkgKDEsIDEyKQorICAgIFNUUklORyAgICAgJyJcXCciJyAgICAgICAgKDEsIDEzKSAoMSwgMTYpCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gXFxcImRvZXNuJ3QgXFxcInNocmlua1xcXCIsIGRvZXMgaXRcXFwiIikKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCisgICAgU1RSSU5HICAgICAnImRvZXNuXFwndCAiJyAoMSwgNCkgKDEsIDE0KQorICAgIE5BTUUgICAgICAgJ3NocmluaycgICAgICAoMSwgMTQpICgxLCAyMCkKKyAgICBTVFJJTkcgICAgICciLCBkb2VzIGl0IicgKDEsIDIwKSAoMSwgMzEpCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gdSdhYmMnICsgVSdBQkMnIikKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCisgICAgU1RSSU5HICAgICAidSdhYmMnIiAgICAgICgxLCA0KSAoMSwgMTApCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAxMSkgKDEsIDEyKQorICAgIFNUUklORyAgICAgIlUnQUJDJyIgICAgICAoMSwgMTMpICgxLCAxOSkKKyAgICA+Pj4gZHVtcF90b2tlbnMoJ3kgPSB1IkFCQyIgKyBVIkFCQyInKQorICAgIE5BTUUgICAgICAgJ3knICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKKyAgICBTVFJJTkcgICAgICd1IkFCQyInICAgICAgKDEsIDQpICgxLCAxMCkKKyAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDExKSAoMSwgMTIpCisgICAgU1RSSU5HICAgICAnVSJBQkMiJyAgICAgICgxLCAxMykgKDEsIDE5KQorICAgID4+PiBkdW1wX3Rva2VucygieCA9IHVyJ2FiYycgKyBVcidBQkMnICsgdVInQUJDJyArIFVSJ0FCQyciKQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKKyAgICBTVFJJTkcgICAgICJ1cidhYmMnIiAgICAgKDEsIDQpICgxLCAxMSkKKyAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDEyKSAoMSwgMTMpCisgICAgU1RSSU5HICAgICAiVXInQUJDJyIgICAgICgxLCAxNCkgKDEsIDIxKQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMjIpICgxLCAyMykKKyAgICBTVFJJTkcgICAgICJ1UidBQkMnIiAgICAgKDEsIDI0KSAoMSwgMzEpCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAzMikgKDEsIDMzKQorICAgIFNUUklORyAgICAgIlVSJ0FCQyciICAgICAoMSwgMzQpICgxLCA0MSkKKyAgICA+Pj4gZHVtcF90b2tlbnMoJ3kgPSB1ciJhYmMiICsgVXIiQUJDIiArIHVSIkFCQyIgKyBVUiJBQkMiJykKKyAgICBOQU1FICAgICAgICd5JyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCisgICAgU1RSSU5HICAgICAndXIiYWJjIicgICAgICgxLCA0KSAoMSwgMTEpCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAxMikgKDEsIDEzKQorICAgIFNUUklORyAgICAgJ1VyIkFCQyInICAgICAoMSwgMTQpICgxLCAyMSkKKyAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDIyKSAoMSwgMjMpCisgICAgU1RSSU5HICAgICAndVIiQUJDIicgICAgICgxLCAyNCkgKDEsIDMxKQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMzIpICgxLCAzMykKKyAgICBTVFJJTkcgICAgICdVUiJBQkMiJyAgICAgKDEsIDM0KSAoMSwgNDEpCisKKyAgICA+Pj4gZHVtcF90b2tlbnMoImInYWJjJyArIEInYWJjJyIpCisgICAgU1RSSU5HICAgICAiYidhYmMnIiAgICAgICgxLCAwKSAoMSwgNikKKyAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDcpICgxLCA4KQorICAgIFNUUklORyAgICAgIkInYWJjJyIgICAgICAoMSwgOSkgKDEsIDE1KQorICAgID4+PiBkdW1wX3Rva2VucygnYiJhYmMiICsgQiJhYmMiJykKKyAgICBTVFJJTkcgICAgICdiImFiYyInICAgICAgKDEsIDApICgxLCA2KQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgNykgKDEsIDgpCisgICAgU1RSSU5HICAgICAnQiJhYmMiJyAgICAgICgxLCA5KSAoMSwgMTUpCisgICAgPj4+IGR1bXBfdG9rZW5zKCJicidhYmMnICsgYlInYWJjJyArIEJyJ2FiYycgKyBCUidhYmMnIikKKyAgICBTVFJJTkcgICAgICJicidhYmMnIiAgICAgKDEsIDApICgxLCA3KQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgOCkgKDEsIDkpCisgICAgU1RSSU5HICAgICAiYlInYWJjJyIgICAgICgxLCAxMCkgKDEsIDE3KQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMTgpICgxLCAxOSkKKyAgICBTVFJJTkcgICAgICJCcidhYmMnIiAgICAgKDEsIDIwKSAoMSwgMjcpCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAyOCkgKDEsIDI5KQorICAgIFNUUklORyAgICAgIkJSJ2FiYyciICAgICAoMSwgMzApICgxLCAzNykKKyAgICA+Pj4gZHVtcF90b2tlbnMoJ2JyImFiYyIgKyBiUiJhYmMiICsgQnIiYWJjIiArIEJSImFiYyInKQorICAgIFNUUklORyAgICAgJ2JyImFiYyInICAgICAoMSwgMCkgKDEsIDcpCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCA4KSAoMSwgOSkKKyAgICBTVFJJTkcgICAgICdiUiJhYmMiJyAgICAgKDEsIDEwKSAoMSwgMTcpCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAxOCkgKDEsIDE5KQorICAgIFNUUklORyAgICAgJ0JyImFiYyInICAgICAoMSwgMjApICgxLCAyNykKKyAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDI4KSAoMSwgMjkpCisgICAgU1RSSU5HICAgICAnQlIiYWJjIicgICAgICgxLCAzMCkgKDEsIDM3KQorCitPcGVyYXRvcnMKKworICAgID4+PiBkdW1wX3Rva2VucygiZGVmIGQyMihhLCBiLCBjPTIsIGQ9MiwgKmspOiBwYXNzIikKKyAgICBOQU1FICAgICAgICdkZWYnICAgICAgICAgKDEsIDApICgxLCAzKQorICAgIE5BTUUgICAgICAgJ2QyMicgICAgICAgICAoMSwgNCkgKDEsIDcpCisgICAgT1AgICAgICAgICAnKCcgICAgICAgICAgICgxLCA3KSAoMSwgOCkKKyAgICBOQU1FICAgICAgICdhJyAgICAgICAgICAgKDEsIDgpICgxLCA5KQorICAgIE9QICAgICAgICAgJywnICAgICAgICAgICAoMSwgOSkgKDEsIDEwKQorICAgIE5BTUUgICAgICAgJ2InICAgICAgICAgICAoMSwgMTEpICgxLCAxMikKKyAgICBPUCAgICAgICAgICcsJyAgICAgICAgICAgKDEsIDEyKSAoMSwgMTMpCisgICAgTkFNRSAgICAgICAnYycgICAgICAgICAgICgxLCAxNCkgKDEsIDE1KQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMTUpICgxLCAxNikKKyAgICBOVU1CRVIgICAgICcyJyAgICAgICAgICAgKDEsIDE2KSAoMSwgMTcpCisgICAgT1AgICAgICAgICAnLCcgICAgICAgICAgICgxLCAxNykgKDEsIDE4KQorICAgIE5BTUUgICAgICAgJ2QnICAgICAgICAgICAoMSwgMTkpICgxLCAyMCkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIwKSAoMSwgMjEpCisgICAgTlVNQkVSICAgICAnMicgICAgICAgICAgICgxLCAyMSkgKDEsIDIyKQorICAgIE9QICAgICAgICAgJywnICAgICAgICAgICAoMSwgMjIpICgxLCAyMykKKyAgICBPUCAgICAgICAgICcqJyAgICAgICAgICAgKDEsIDI0KSAoMSwgMjUpCisgICAgTkFNRSAgICAgICAnaycgICAgICAgICAgICgxLCAyNSkgKDEsIDI2KQorICAgIE9QICAgICAgICAgJyknICAgICAgICAgICAoMSwgMjYpICgxLCAyNykKKyAgICBPUCAgICAgICAgICc6JyAgICAgICAgICAgKDEsIDI3KSAoMSwgMjgpCisgICAgTkFNRSAgICAgICAncGFzcycgICAgICAgICgxLCAyOSkgKDEsIDMzKQorICAgID4+PiBkdW1wX3Rva2VucygiZGVmIGQwMXZfKGE9MSwgKmssICoqdyk6IHBhc3MiKQorICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoMSwgMCkgKDEsIDMpCisgICAgTkFNRSAgICAgICAnZDAxdl8nICAgICAgICgxLCA0KSAoMSwgOSkKKyAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDEsIDkpICgxLCAxMCkKKyAgICBOQU1FICAgICAgICdhJyAgICAgICAgICAgKDEsIDEwKSAoMSwgMTEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAxMSkgKDEsIDEyKQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgMTIpICgxLCAxMykKKyAgICBPUCAgICAgICAgICcsJyAgICAgICAgICAgKDEsIDEzKSAoMSwgMTQpCisgICAgT1AgICAgICAgICAnKicgICAgICAgICAgICgxLCAxNSkgKDEsIDE2KQorICAgIE5BTUUgICAgICAgJ2snICAgICAgICAgICAoMSwgMTYpICgxLCAxNykKKyAgICBPUCAgICAgICAgICcsJyAgICAgICAgICAgKDEsIDE3KSAoMSwgMTgpCisgICAgT1AgICAgICAgICAnKionICAgICAgICAgICgxLCAxOSkgKDEsIDIxKQorICAgIE5BTUUgICAgICAgJ3cnICAgICAgICAgICAoMSwgMjEpICgxLCAyMikKKyAgICBPUCAgICAgICAgICcpJyAgICAgICAgICAgKDEsIDIyKSAoMSwgMjMpCisgICAgT1AgICAgICAgICAnOicgICAgICAgICAgICgxLCAyMykgKDEsIDI0KQorICAgIE5BTUUgICAgICAgJ3Bhc3MnICAgICAgICAoMSwgMjUpICgxLCAyOSkKKworQ29tcGFyaXNvbgorCisgICAgPj4+IGR1bXBfdG9rZW5zKCJpZiAxIDwgMSA+IDEgPT0gMSA+PSA1IDw9IDB4MTUgPD0gMHgxMiAhPSAiICsKKyAgICAuLi4gICAgICAgICAgICAgIjEgYW5kIDUgaW4gMSBub3QgaW4gMSBpcyAxIG9yIDUgaXMgbm90IDE6IHBhc3MiKQorICAgIE5BTUUgICAgICAgJ2lmJyAgICAgICAgICAoMSwgMCkgKDEsIDIpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAzKSAoMSwgNCkKKyAgICBPUCAgICAgICAgICc8JyAgICAgICAgICAgKDEsIDUpICgxLCA2KQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNykgKDEsIDgpCisgICAgT1AgICAgICAgICAnPicgICAgICAgICAgICgxLCA5KSAoMSwgMTApCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAxMSkgKDEsIDEyKQorICAgIE9QICAgICAgICAgJz09JyAgICAgICAgICAoMSwgMTMpICgxLCAxNSkKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDE2KSAoMSwgMTcpCisgICAgT1AgICAgICAgICAnPj0nICAgICAgICAgICgxLCAxOCkgKDEsIDIwKQorICAgIE5VTUJFUiAgICAgJzUnICAgICAgICAgICAoMSwgMjEpICgxLCAyMikKKyAgICBPUCAgICAgICAgICc8PScgICAgICAgICAgKDEsIDIzKSAoMSwgMjUpCisgICAgTlVNQkVSICAgICAnMHgxNScgICAgICAgICgxLCAyNikgKDEsIDMwKQorICAgIE9QICAgICAgICAgJzw9JyAgICAgICAgICAoMSwgMzEpICgxLCAzMykKKyAgICBOVU1CRVIgICAgICcweDEyJyAgICAgICAgKDEsIDM0KSAoMSwgMzgpCisgICAgT1AgICAgICAgICAnIT0nICAgICAgICAgICgxLCAzOSkgKDEsIDQxKQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNDIpICgxLCA0MykKKyAgICBOQU1FICAgICAgICdhbmQnICAgICAgICAgKDEsIDQ0KSAoMSwgNDcpCisgICAgTlVNQkVSICAgICAnNScgICAgICAgICAgICgxLCA0OCkgKDEsIDQ5KQorICAgIE5BTUUgICAgICAgJ2luJyAgICAgICAgICAoMSwgNTApICgxLCA1MikKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDUzKSAoMSwgNTQpCisgICAgTkFNRSAgICAgICAnbm90JyAgICAgICAgICgxLCA1NSkgKDEsIDU4KQorICAgIE5BTUUgICAgICAgJ2luJyAgICAgICAgICAoMSwgNTkpICgxLCA2MSkKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDYyKSAoMSwgNjMpCisgICAgTkFNRSAgICAgICAnaXMnICAgICAgICAgICgxLCA2NCkgKDEsIDY2KQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNjcpICgxLCA2OCkKKyAgICBOQU1FICAgICAgICdvcicgICAgICAgICAgKDEsIDY5KSAoMSwgNzEpCisgICAgTlVNQkVSICAgICAnNScgICAgICAgICAgICgxLCA3MikgKDEsIDczKQorICAgIE5BTUUgICAgICAgJ2lzJyAgICAgICAgICAoMSwgNzQpICgxLCA3NikKKyAgICBOQU1FICAgICAgICdub3QnICAgICAgICAgKDEsIDc3KSAoMSwgODApCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCA4MSkgKDEsIDgyKQorICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMSwgODIpICgxLCA4MykKKyAgICBOQU1FICAgICAgICdwYXNzJyAgICAgICAgKDEsIDg0KSAoMSwgODgpCisKK1NoaWZ0CisKKyAgICA+Pj4gZHVtcF90b2tlbnMoInggPSAxIDw8IDEgPj4gNSIpCisgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNCkgKDEsIDUpCisgICAgT1AgICAgICAgICAnPDwnICAgICAgICAgICgxLCA2KSAoMSwgOCkKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDkpICgxLCAxMCkKKyAgICBPUCAgICAgICAgICc+PicgICAgICAgICAgKDEsIDExKSAoMSwgMTMpCisgICAgTlVNQkVSICAgICAnNScgICAgICAgICAgICgxLCAxNCkgKDEsIDE1KQorCitBZGRpdGl2ZQorCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gMSAtIHkgKyAxNSAtIDAxICsgMHgxMjQgKyB6ICsgYVs1XSIpCisgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKKyAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNCkgKDEsIDUpCisgICAgT1AgICAgICAgICAnLScgICAgICAgICAgICgxLCA2KSAoMSwgNykKKyAgICBOQU1FICAgICAgICd5JyAgICAgICAgICAgKDEsIDgpICgxLCA5KQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKKyAgICBOVU1CRVIgICAgICcxNScgICAgICAgICAgKDEsIDEyKSAoMSwgMTQpCisgICAgT1AgICAgICAgICAnLScgICAgICAgICAgICgxLCAxNSkgKDEsIDE2KQorICAgIE5VTUJFUiAgICAgJzAxJyAgICAgICAgICAoMSwgMTcpICgxLCAxOSkKKyAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDIwKSAoMSwgMjEpCisgICAgTlVNQkVSICAgICAnMHgxMjQnICAgICAgICgxLCAyMikgKDEsIDI3KQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMjgpICgxLCAyOSkKKyAgICBOQU1FICAgICAgICd6JyAgICAgICAgICAgKDEsIDMwKSAoMSwgMzEpCisgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAzMikgKDEsIDMzKQorICAgIE5BTUUgICAgICAgJ2EnICAgICAgICAgICAoMSwgMzQpICgxLCAzNSkKKyAgICBPUCAgICAgICAgICdbJyAgICAgICAgICAgKDEsIDM1KSAoMSwgMzYpCisgICAgTlVNQkVSICAgICAnNScgICAgICAgICAgICgxLCAzNikgKDEsIDM3KQorICAgIE9QICAgICAgICAgJ10nICAgICAgICAgICAoMSwgMzcpICgxLCAzOCkKKworTXVsdGlwbGljYXRpdmUKKworICAgID4+PiBkdW1wX3Rva2VucygieCA9IDEvLzEqMS81KjEyJTB4MTIiKQorICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDQpICgxLCA1KQorICAgIE9QICAgICAgICAgJy8vJyAgICAgICAgICAoMSwgNSkgKDEsIDcpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCA3KSAoMSwgOCkKKyAgICBPUCAgICAgICAgICcqJyAgICAgICAgICAgKDEsIDgpICgxLCA5KQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgOSkgKDEsIDEwKQorICAgIE9QICAgICAgICAgJy8nICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKKyAgICBOVU1CRVIgICAgICc1JyAgICAgICAgICAgKDEsIDExKSAoMSwgMTIpCisgICAgT1AgICAgICAgICAnKicgICAgICAgICAgICgxLCAxMikgKDEsIDEzKQorICAgIE5VTUJFUiAgICAgJzEyJyAgICAgICAgICAoMSwgMTMpICgxLCAxNSkKKyAgICBPUCAgICAgICAgICclJyAgICAgICAgICAgKDEsIDE1KSAoMSwgMTYpCisgICAgTlVNQkVSICAgICAnMHgxMicgICAgICAgICgxLCAxNikgKDEsIDIwKQorCitVbmFyeQorCisgICAgPj4+IGR1bXBfdG9rZW5zKCJ+MSBeIDEgJiAxIHwxIF4gLTEiKQorICAgIE9QICAgICAgICAgJ34nICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAxKSAoMSwgMikKKyAgICBPUCAgICAgICAgICdeJyAgICAgICAgICAgKDEsIDMpICgxLCA0KQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNSkgKDEsIDYpCisgICAgT1AgICAgICAgICAnJicgICAgICAgICAgICgxLCA3KSAoMSwgOCkKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDkpICgxLCAxMCkKKyAgICBPUCAgICAgICAgICd8JyAgICAgICAgICAgKDEsIDExKSAoMSwgMTIpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAxMikgKDEsIDEzKQorICAgIE9QICAgICAgICAgJ14nICAgICAgICAgICAoMSwgMTQpICgxLCAxNSkKKyAgICBPUCAgICAgICAgICctJyAgICAgICAgICAgKDEsIDE2KSAoMSwgMTcpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAxNykgKDEsIDE4KQorICAgID4+PiBkdW1wX3Rva2VucygiLTEqMS8xKzEqMS8vMSAtIC0tLTEqKjEiKQorICAgIE9QICAgICAgICAgJy0nICAgICAgICAgICAoMSwgMCkgKDEsIDEpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAxKSAoMSwgMikKKyAgICBPUCAgICAgICAgICcqJyAgICAgICAgICAgKDEsIDIpICgxLCAzKQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgMykgKDEsIDQpCisgICAgT1AgICAgICAgICAnLycgICAgICAgICAgICgxLCA0KSAoMSwgNSkKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDUpICgxLCA2KQorICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgNikgKDEsIDcpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCA3KSAoMSwgOCkKKyAgICBPUCAgICAgICAgICcqJyAgICAgICAgICAgKDEsIDgpICgxLCA5KQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgOSkgKDEsIDEwKQorICAgIE9QICAgICAgICAgJy8vJyAgICAgICAgICAoMSwgMTApICgxLCAxMikKKyAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDEyKSAoMSwgMTMpCisgICAgT1AgICAgICAgICAnLScgICAgICAgICAgICgxLCAxNCkgKDEsIDE1KQorICAgIE9QICAgICAgICAgJy0nICAgICAgICAgICAoMSwgMTYpICgxLCAxNykKKyAgICBPUCAgICAgICAgICctJyAgICAgICAgICAgKDEsIDE3KSAoMSwgMTgpCisgICAgT1AgICAgICAgICAnLScgICAgICAgICAgICgxLCAxOCkgKDEsIDE5KQorICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgMTkpICgxLCAyMCkKKyAgICBPUCAgICAgICAgICcqKicgICAgICAgICAgKDEsIDIwKSAoMSwgMjIpCisgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAyMikgKDEsIDIzKQorCitTZWxlY3RvcgorCisgICAgPj4+IGR1bXBfdG9rZW5zKCJpbXBvcnQgc3lzLCB0aW1lXFxueCA9IHN5cy5tb2R1bGVzWyd0aW1lJ10udGltZSgpIikKKyAgICBOQU1FICAgICAgICdpbXBvcnQnICAgICAgKDEsIDApICgxLCA2KQorICAgIE5BTUUgICAgICAgJ3N5cycgICAgICAgICAoMSwgNykgKDEsIDEwKQorICAgIE9QICAgICAgICAgJywnICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKKyAgICBOQU1FICAgICAgICd0aW1lJyAgICAgICAgKDEsIDEyKSAoMSwgMTYpCisgICAgTkVXTElORSAgICAnXFxuJyAgICAgICAgICAoMSwgMTYpICgxLCAxNykKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDIsIDApICgyLCAxKQorICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMiwgMikgKDIsIDMpCisgICAgTkFNRSAgICAgICAnc3lzJyAgICAgICAgICgyLCA0KSAoMiwgNykKKyAgICBPUCAgICAgICAgICcuJyAgICAgICAgICAgKDIsIDcpICgyLCA4KQorICAgIE5BTUUgICAgICAgJ21vZHVsZXMnICAgICAoMiwgOCkgKDIsIDE1KQorICAgIE9QICAgICAgICAgJ1snICAgICAgICAgICAoMiwgMTUpICgyLCAxNikKKyAgICBTVFJJTkcgICAgICIndGltZSciICAgICAgKDIsIDE2KSAoMiwgMjIpCisgICAgT1AgICAgICAgICAnXScgICAgICAgICAgICgyLCAyMikgKDIsIDIzKQorICAgIE9QICAgICAgICAgJy4nICAgICAgICAgICAoMiwgMjMpICgyLCAyNCkKKyAgICBOQU1FICAgICAgICd0aW1lJyAgICAgICAgKDIsIDI0KSAoMiwgMjgpCisgICAgT1AgICAgICAgICAnKCcgICAgICAgICAgICgyLCAyOCkgKDIsIDI5KQorICAgIE9QICAgICAgICAgJyknICAgICAgICAgICAoMiwgMjkpICgyLCAzMCkKKworTWV0aG9kcworCisgICAgPj4+IGR1bXBfdG9rZW5zKCJAc3RhdGljbWV0aG9kXFxuZGVmIGZvbyh4LHkpOiBwYXNzIikKKyAgICBPUCAgICAgICAgICdAJyAgICAgICAgICAgKDEsIDApICgxLCAxKQorICAgIE5BTUUgICAgICAgJ3N0YXRpY21ldGhvZCAoMSwgMSkgKDEsIDEzKQorICAgIE5FV0xJTkUgICAgJ1xcbicgICAgICAgICAgKDEsIDEzKSAoMSwgMTQpCisgICAgTkFNRSAgICAgICAnZGVmJyAgICAgICAgICgyLCAwKSAoMiwgMykKKyAgICBOQU1FICAgICAgICdmb28nICAgICAgICAgKDIsIDQpICgyLCA3KQorICAgIE9QICAgICAgICAgJygnICAgICAgICAgICAoMiwgNykgKDIsIDgpCisgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgyLCA4KSAoMiwgOSkKKyAgICBPUCAgICAgICAgICcsJyAgICAgICAgICAgKDIsIDkpICgyLCAxMCkKKyAgICBOQU1FICAgICAgICd5JyAgICAgICAgICAgKDIsIDEwKSAoMiwgMTEpCisgICAgT1AgICAgICAgICAnKScgICAgICAgICAgICgyLCAxMSkgKDIsIDEyKQorICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMiwgMTIpICgyLCAxMykKKyAgICBOQU1FICAgICAgICdwYXNzJyAgICAgICAgKDIsIDE0KSAoMiwgMTgpCisKK0JhY2tzbGFzaCBtZWFucyBsaW5lIGNvbnRpbnVhdGlvbiwgZXhjZXB0IGZvciBjb21tZW50cworCisgICAgPj4+IHJvdW5kdHJpcCgieD0xK1xcXFxuIgorICAgIC4uLiAgICAgICAgICAgIjFcXG4iCisgICAgLi4uICAgICAgICAgICAiIyBUaGlzIGlzIGEgY29tbWVudFxcXFxuIgorICAgIC4uLiAgICAgICAgICAgIiMgVGhpcyBhbHNvXFxuIikKKyAgICBUcnVlCisgICAgPj4+IHJvdW5kdHJpcCgiIyBDb21tZW50IFxcXFxueCA9IDAiKQorICAgIFRydWUKKworVHdvIHN0cmluZyBsaXRlcmFscyBvbiB0aGUgc2FtZSBsaW5lCisKKyAgICA+Pj4gcm91bmR0cmlwKCInJyAnJyIpCisgICAgVHJ1ZQorCitUZXN0IHJvdW5kdHJpcCBvbiByYW5kb20gcHl0aG9uIG1vZHVsZXMuCitwYXNzIHRoZSAnLXVjcHUnIG9wdGlvbiB0byBwcm9jZXNzIHRoZSBmdWxsIGRpcmVjdG9yeS4KKworICAgID4+PgorICAgID4+PiB0ZW1wZGlyID0gb3MucGF0aC5kaXJuYW1lKGYpIG9yIG9zLmN1cmRpcgorICAgID4+PiB0ZXN0ZmlsZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHRlbXBkaXIsICJ0ZXN0Ki5weSIpKQorCisgICAgPj4+IGlmIG5vdCB0ZXN0X3N1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgiY3B1Iik6CisgICAgLi4uICAgICB0ZXN0ZmlsZXMgPSByYW5kb20uc2FtcGxlKHRlc3RmaWxlcywgMTApCisgICAgLi4uCisgICAgPj4+IGZvciB0ZXN0ZmlsZSBpbiB0ZXN0ZmlsZXM6CisgICAgLi4uICAgICBpZiBub3Qgcm91bmR0cmlwKG9wZW4odGVzdGZpbGUpKToKKyAgICAuLi4gICAgICAgICBwcmludCAiUm91bmR0cmlwIGZhaWxlZCBmb3IgZmlsZSAlcyIgJSB0ZXN0ZmlsZQorICAgIC4uLiAgICAgICAgIGJyZWFrCisgICAgLi4uIGVsc2U6IFRydWUKKyAgICBUcnVlCisKK0V2aWwgdGFicworICAgID4+PiBkdW1wX3Rva2VucygiZGVmIGYoKTpcXG5cXHRpZiB4XFxuICAgICAgICBcXHRwYXNzIikKKyAgICBOQU1FICAgICAgICdkZWYnICAgICAgICAgKDEsIDApICgxLCAzKQorICAgIE5BTUUgICAgICAgJ2YnICAgICAgICAgICAoMSwgNCkgKDEsIDUpCisgICAgT1AgICAgICAgICAnKCcgICAgICAgICAgICgxLCA1KSAoMSwgNikKKyAgICBPUCAgICAgICAgICcpJyAgICAgICAgICAgKDEsIDYpICgxLCA3KQorICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMSwgNykgKDEsIDgpCisgICAgTkVXTElORSAgICAnXFxuJyAgICAgICAgICAoMSwgOCkgKDEsIDkpCisgICAgSU5ERU5UICAgICAnXFx0JyAgICAgICAgICAoMiwgMCkgKDIsIDEpCisgICAgTkFNRSAgICAgICAnaWYnICAgICAgICAgICgyLCAxKSAoMiwgMykKKyAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDIsIDQpICgyLCA1KQorICAgIE5FV0xJTkUgICAgJ1xcbicgICAgICAgICAgKDIsIDUpICgyLCA2KQorICAgIElOREVOVCAgICAgJyAgICAgICAgXFx0JyAgKDMsIDApICgzLCA5KQorICAgIE5BTUUgICAgICAgJ3Bhc3MnICAgICAgICAoMywgOSkgKDMsIDEzKQorICAgIERFREVOVCAgICAgJycgICAgICAgICAgICAoNCwgMCkgKDQsIDApCisgICAgREVERU5UICAgICAnJyAgICAgICAgICAgICg0LCAwKSAoNCwgMCkKKworUGF0aG9sb2dpY2FsIHdoaXRlc3BhY2UgKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNjE1MikKKyAgICA+Pj4gZHVtcF90b2tlbnMoIkAgICAgICAgICAgIikKKyAgICBPUCAgICAgICAgICdAJyAgICAgICAgICAgKDEsIDApICgxLCAxKQorIiIiCisKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdG9rZW5pemUgaW1wb3J0ICh1bnRva2VuaXplLCBnZW5lcmF0ZV90b2tlbnMsIE5VTUJFUiwgTkFNRSwgT1AsCisgICAgICAgICAgICAgICAgICAgICBTVFJJTkcsIEVORE1BUktFUiwgdG9rX25hbWUpCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworaW1wb3J0IG9zCisKK2RlZiBkdW1wX3Rva2VucyhzKToKKyAgICAiIiJQcmludCBvdXQgdGhlIHRva2VucyBpbiBzIGluIGEgdGFibGUgZm9ybWF0LgorCisgICAgVGhlIEVORE1BUktFUiBpcyBvbWl0dGVkLgorICAgICIiIgorICAgIGYgPSBTdHJpbmdJTyhzKQorICAgIGZvciB0eXBlLCB0b2tlbiwgc3RhcnQsIGVuZCwgbGluZSBpbiBnZW5lcmF0ZV90b2tlbnMoZi5yZWFkbGluZSk6CisgICAgICAgIGlmIHR5cGUgPT0gRU5ETUFSS0VSOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgdHlwZSA9IHRva19uYW1lW3R5cGVdCisgICAgICAgIHByaW50KCIlKHR5cGUpLTEwLjEwcyAlKHRva2VuKS0xMy4xM3IgJShzdGFydClzICUoZW5kKXMiICUgbG9jYWxzKCkpCisKKyMgVGhpcyBpcyBhbiBleGFtcGxlIGZyb20gdGhlIGRvY3MsIHNldCB1cCBhcyBhIGRvY3Rlc3QuCitkZWYgZGVjaXN0bXQocyk6CisgICAgIiIiU3Vic3RpdHV0ZSBEZWNpbWFscyBmb3IgZmxvYXRzIGluIGEgc3RyaW5nIG9mIHN0YXRlbWVudHMuCisKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCisgICAgPj4+IHMgPSAncHJpbnQgKzIxLjNlLTUqLS4xMjM0LzgxLjcnCisgICAgPj4+IGRlY2lzdG10KHMpCisgICAgInByaW50ICtEZWNpbWFsICgnMjEuM2UtNScpKi1EZWNpbWFsICgnLjEyMzQnKS9EZWNpbWFsICgnODEuNycpIgorCisgICAgVGhlIGZvcm1hdCBvZiB0aGUgZXhwb25lbnQgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHBsYXRmb3JtIEMgbGlicmFyeS4KKyAgICBLbm93biBjYXNlcyBhcmUgImUtMDA3IiAoV2luZG93cykgYW5kICJlLTA3IiAobm90IFdpbmRvd3MpLiAgU2luY2UKKyAgICB3ZSdyZSBvbmx5IHNob3dpbmcgMTIgZGlnaXRzLCBhbmQgdGhlIDEzdGggaXNuJ3QgY2xvc2UgdG8gNSwgdGhlCisgICAgcmVzdCBvZiB0aGUgb3V0cHV0IHNob3VsZCBiZSBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KKworICAgID4+PiBleGVjKHMpICNkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAtMy4yMTcxNjAzNDI3MmUtMC4uLjcKKworICAgIE91dHB1dCBmcm9tIGNhbGN1bGF0aW9ucyB3aXRoIERlY2ltYWwgc2hvdWxkIGJlIGlkZW50aWNhbCBhY3Jvc3MgYWxsCisgICAgcGxhdGZvcm1zLgorCisgICAgPj4+IGV4ZWMoZGVjaXN0bXQocykpCisgICAgLTMuMjE3MTYwMzQyNzE3MjU4MjYxOTMzOTA0NTI5RS03CisgICAgIiIiCisKKyAgICByZXN1bHQgPSBbXQorICAgIGcgPSBnZW5lcmF0ZV90b2tlbnMoU3RyaW5nSU8ocykucmVhZGxpbmUpICAgIyB0b2tlbml6ZSB0aGUgc3RyaW5nCisgICAgZm9yIHRva251bSwgdG9rdmFsLCBfLCBfLCBfICBpbiBnOgorICAgICAgICBpZiB0b2tudW0gPT0gTlVNQkVSIGFuZCAnLicgaW4gdG9rdmFsOiAgIyByZXBsYWNlIE5VTUJFUiB0b2tlbnMKKyAgICAgICAgICAgIHJlc3VsdC5leHRlbmQoWworICAgICAgICAgICAgICAgIChOQU1FLCAnRGVjaW1hbCcpLAorICAgICAgICAgICAgICAgIChPUCwgJygnKSwKKyAgICAgICAgICAgICAgICAoU1RSSU5HLCByZXByKHRva3ZhbCkpLAorICAgICAgICAgICAgICAgIChPUCwgJyknKQorICAgICAgICAgICAgXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKHRva251bSwgdG9rdmFsKSkKKyAgICByZXR1cm4gdW50b2tlbml6ZShyZXN1bHQpCisKKworX190ZXN0X18gPSB7ImRvY3Rlc3RzIiA6IGRvY3Rlc3RzLCAnZGVjaXN0bXQnOiBkZWNpc3RtdH0KKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3Rva2VuaXplCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfdG9rZW5pemUsIFRydWUpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3Rvb2xzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdG9vbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYwYjRjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3Rvb2xzLnB5CkBAIC0wLDAgKzEsMzY4IEBACisiIiJUZXN0cyBmb3Igc2NyaXB0cyBpbiB0aGUgVG9vbHMgZGlyZWN0b3J5LgorCitUaGlzIGZpbGUgY29udGFpbnMgcmVncmVzc2lvbiB0ZXN0cyBmb3Igc29tZSBvZiB0aGUgc2NyaXB0cyBmb3VuZCBpbiB0aGUKK1Rvb2xzIGRpcmVjdG9yeSBvZiBhIFB5dGhvbiBjaGVja291dCBvciB0YXJiYWxsLCBzdWNoIGFzIHJlaW5kZW50LnB5LgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5c2NvbmZpZworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGV4dHdyYXAKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaywgdGVtcF9kaXIKKworaWYgbm90IHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKToKKyAgICAjIFhYWCBzb21lIGluc3RhbGxlcnMgZG8gY29udGFpbiB0aGUgdG9vbHMsIHNob3VsZCB3ZSBkZXRlY3QgdGhhdAorICAgICMgYW5kIHJ1biB0aGUgdGVzdHMgaW4gdGhhdCBjYXNlIHRvbz8KKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgndGVzdCBpcnJlbGV2YW50IGZvciBhbiBpbnN0YWxsZWQgUHl0aG9uJykKKworYmFzZXBhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSksCisgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbHMnKQorc2NyaXB0c2RpciA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgJ3NjcmlwdHMnKQorCisKK2NsYXNzIFJlaW5kZW50VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHNjcmlwdCA9IG9zLnBhdGguam9pbihzY3JpcHRzZGlyLCAncmVpbmRlbnQucHknKQorCisgICAgZGVmIHRlc3Rfbm9hcmdzKHNlbGYpOgorICAgICAgICBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0KQorCisgICAgZGVmIHRlc3RfaGVscChzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vayhzZWxmLnNjcmlwdCwgJy1oJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGVyciwgYicnKQorCisKK2NsYXNzIFBpbmRlbnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgc2NyaXB0ID0gb3MucGF0aC5qb2luKHNjcmlwdHNkaXIsICdwaW5kZW50LnB5JykKKworICAgIGRlZiBhc3NlcnRGaWxlRXF1YWwoc2VsZiwgZm4xLCBmbjIpOgorICAgICAgICB3aXRoIG9wZW4oZm4xKSBhcyBmMSwgb3BlbihmbjIpIGFzIGYyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMS5yZWFkbGluZXMoKSwgZjIucmVhZGxpbmVzKCkpCisKKyAgICBkZWYgcGluZGVudChzZWxmLCBzb3VyY2UsICphcmdzKToKKyAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgICAgICAgICAgKHN5cy5leGVjdXRhYmxlLCBzZWxmLnNjcmlwdCkgKyBhcmdzLAorICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKKyAgICAgICAgb3V0LCBlcnIgPSBwcm9jLmNvbW11bmljYXRlKHNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZXJyKQorICAgICAgICByZXR1cm4gb3V0CisKKyAgICBkZWYgbHN0cmlwbGluZXMoc2VsZiwgZGF0YSk6CisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZS5sc3RyaXAoKSBmb3IgbGluZSBpbiBkYXRhLnNwbGl0bGluZXMoKSkgKyAnXG4nCisKKyAgICBkZWYgdGVzdF9zZWxmdGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgZGlyZWN0b3J5OgorICAgICAgICAgICAgZGF0YV9wYXRoID0gb3MucGF0aC5qb2luKGRpcmVjdG9yeSwgJ190ZXN0LnB5JykKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLnNjcmlwdCkgYXMgZjoKKyAgICAgICAgICAgICAgICBjbG9zZWQgPSBmLnJlYWQoKQorICAgICAgICAgICAgd2l0aCBvcGVuKGRhdGFfcGF0aCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoY2xvc2VkKQorCisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0LCAnLWQnLCBkYXRhX3BhdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKyAgICAgICAgICAgIGJhY2t1cCA9IGRhdGFfcGF0aCArICd+JworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGJhY2t1cCkpCisgICAgICAgICAgICB3aXRoIG9wZW4oYmFja3VwKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGNsb3NlZCkKKyAgICAgICAgICAgIHdpdGggb3BlbihkYXRhX3BhdGgpIGFzIGY6CisgICAgICAgICAgICAgICAgY2xlYW4gPSBmLnJlYWQoKQorICAgICAgICAgICAgY29tcGlsZShjbGVhbiwgJ190ZXN0LnB5JywgJ2V4ZWMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBpbmRlbnQoY2xlYW4sICctYycpLCBjbG9zZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGluZGVudChjbG9zZWQsICctZCcpLCBjbGVhbikKKworICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vayhzZWxmLnNjcmlwdCwgJy1jJywgZGF0YV9wYXRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCisgICAgICAgICAgICB3aXRoIG9wZW4oYmFja3VwKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGNsZWFuKQorICAgICAgICAgICAgd2l0aCBvcGVuKGRhdGFfcGF0aCkgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBjbG9zZWQpCisKKyAgICAgICAgICAgIGJyb2tlbiA9IHNlbGYubHN0cmlwbGluZXMoY2xvc2VkKQorICAgICAgICAgICAgd2l0aCBvcGVuKGRhdGFfcGF0aCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoYnJva2VuKQorICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vayhzZWxmLnNjcmlwdCwgJy1yJywgZGF0YV9wYXRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCisgICAgICAgICAgICB3aXRoIG9wZW4oYmFja3VwKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGJyb2tlbikKKyAgICAgICAgICAgIHdpdGggb3BlbihkYXRhX3BhdGgpIGFzIGY6CisgICAgICAgICAgICAgICAgaW5kZW50ZWQgPSBmLnJlYWQoKQorICAgICAgICAgICAgY29tcGlsZShpbmRlbnRlZCwgJ190ZXN0LnB5JywgJ2V4ZWMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBpbmRlbnQoYnJva2VuLCAnLXInKSwgaW5kZW50ZWQpCisKKyAgICBkZWYgcGluZGVudF90ZXN0KHNlbGYsIGNsZWFuLCBjbG9zZWQpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGluZGVudChjbGVhbiwgJy1jJyksIGNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBpbmRlbnQoY2xvc2VkLCAnLWQnKSwgY2xlYW4pCisgICAgICAgIGJyb2tlbiA9IHNlbGYubHN0cmlwbGluZXMoY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGluZGVudChicm9rZW4sICctcicsICctZScsICctcycsICc0JyksIGNsb3NlZCkKKworICAgIGRlZiB0ZXN0X3N0YXRlbWVudHMoc2VsZik6CisgICAgICAgIGNsZWFuID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIGlmIGE6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBpZiBhOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBpZiBhOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsaWY6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIHdoaWxlIGE6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgd2hpbGUgYToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGZvciBpIGluIGE6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgZm9yIGkgaW4gYToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICB3aXRoIGE6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAiIiIpCisKKyAgICAgICAgY2xvc2VkID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIGlmIGE6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBlbmQgaWYKKworICAgICAgICAgICAgaWYgYToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICMgZW5kIGlmCisKKyAgICAgICAgICAgIGlmIGE6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxpZjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICMgZW5kIGlmCisKKyAgICAgICAgICAgIHdoaWxlIGE6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICMgZW5kIHdoaWxlCisKKyAgICAgICAgICAgIHdoaWxlIGE6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBlbmQgd2hpbGUKKworICAgICAgICAgICAgZm9yIGkgaW4gYToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgIyBlbmQgZm9yCisKKyAgICAgICAgICAgIGZvciBpIGluIGE6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBlbmQgZm9yCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICMgZW5kIHRyeQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICMgZW5kIHRyeQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICMgZW5kIHRyeQorCisgICAgICAgICAgICB3aXRoIGE6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBlbmQgd2l0aAorCisgICAgICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICMgZW5kIGNsYXNzIEEKKworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAjIGVuZCBkZWYgZgorICAgICAgICAgICAgIiIiKQorICAgICAgICBzZWxmLnBpbmRlbnRfdGVzdChjbGVhbiwgY2xvc2VkKQorCisgICAgZGVmIHRlc3RfbXVsdGlsZXZlbChzZWxmKToKKyAgICAgICAgY2xlYW4gPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgZGVmIGZvb2JhcihhLCBiKToKKyAgICAgICAgICAgICAgICBpZiBhID09IGI6CisgICAgICAgICAgICAgICAgICAgIGEgPSBhKzEKKyAgICAgICAgICAgICAgICBlbGlmIGEgPCBiOgorICAgICAgICAgICAgICAgICAgICBiID0gYi0xCisgICAgICAgICAgICAgICAgICAgIGlmIGIgPiBhOiBhID0gYS0xCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ29vcHMhJworICAgICAgICAgICAgIiIiKQorICAgICAgICBjbG9zZWQgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgZGVmIGZvb2JhcihhLCBiKToKKyAgICAgICAgICAgICAgICBpZiBhID09IGI6CisgICAgICAgICAgICAgICAgICAgIGEgPSBhKzEKKyAgICAgICAgICAgICAgICBlbGlmIGEgPCBiOgorICAgICAgICAgICAgICAgICAgICBiID0gYi0xCisgICAgICAgICAgICAgICAgICAgIGlmIGIgPiBhOiBhID0gYS0xCisgICAgICAgICAgICAgICAgICAgICMgZW5kIGlmCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ29vcHMhJworICAgICAgICAgICAgICAgICMgZW5kIGlmCisgICAgICAgICAgICAjIGVuZCBkZWYgZm9vYmFyCisgICAgICAgICAgICAiIiIpCisgICAgICAgIHNlbGYucGluZGVudF90ZXN0KGNsZWFuLCBjbG9zZWQpCisKKyAgICBkZWYgdGVzdF9wcmVzZXJ2ZV9pbmRlbnRzKHNlbGYpOgorICAgICAgICBjbGVhbiA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBpZiBhOgorICAgICAgICAgICAgICAgICAgICAgaWYgYjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgY2xvc2VkID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIGlmIGE6CisgICAgICAgICAgICAgICAgICAgICBpZiBiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICAgIyBlbmQgaWYKKyAgICAgICAgICAgICMgZW5kIGlmCisgICAgICAgICAgICAiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5waW5kZW50KGNsZWFuLCAnLWMnKSwgY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGluZGVudChjbG9zZWQsICctZCcpLCBjbGVhbikKKyAgICAgICAgYnJva2VuID0gc2VsZi5sc3RyaXBsaW5lcyhjbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5waW5kZW50KGJyb2tlbiwgJy1yJywgJy1lJywgJy1zJywgJzknKSwgY2xvc2VkKQorICAgICAgICBjbGVhbiA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBpZiBhOgorICAgICAgICAgICAgXHRpZiBiOgorICAgICAgICAgICAgXHRcdHBhc3MKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgY2xvc2VkID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIGlmIGE6CisgICAgICAgICAgICBcdGlmIGI6CisgICAgICAgICAgICBcdFx0cGFzcworICAgICAgICAgICAgXHQjIGVuZCBpZgorICAgICAgICAgICAgIyBlbmQgaWYKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBpbmRlbnQoY2xlYW4sICctYycpLCBjbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5waW5kZW50KGNsb3NlZCwgJy1kJyksIGNsZWFuKQorICAgICAgICBicm9rZW4gPSBzZWxmLmxzdHJpcGxpbmVzKGNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBpbmRlbnQoYnJva2VuLCAnLXInKSwgY2xvc2VkKQorCisgICAgZGVmIHRlc3RfZXNjYXBlZF9uZXdsaW5lKHNlbGYpOgorICAgICAgICBjbGVhbiA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBjbGFzc1xcCisgICAgICAgICAgICBcXAorICAgICAgICAgICAgIEE6CisgICAgICAgICAgICAgICBkZWZcCisgICAgICAgICAgICBcXAorICAgICAgICAgICAgZjoKKyAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgY2xvc2VkID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIGNsYXNzXFwKKyAgICAgICAgICAgIFxcCisgICAgICAgICAgICAgQToKKyAgICAgICAgICAgICAgIGRlZlwKKyAgICAgICAgICAgIFxcCisgICAgICAgICAgICBmOgorICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIyBlbmQgZGVmIGYKKyAgICAgICAgICAgICMgZW5kIGNsYXNzIEEKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBpbmRlbnQoY2xlYW4sICctYycpLCBjbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5waW5kZW50KGNsb3NlZCwgJy1kJyksIGNsZWFuKQorCisgICAgZGVmIHRlc3RfZW1wdHlfbGluZShzZWxmKToKKyAgICAgICAgY2xlYW4gPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgaWYgYToKKworICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgY2xvc2VkID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIGlmIGE6CisKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAjIGVuZCBpZgorICAgICAgICAgICAgIiIiKQorICAgICAgICBzZWxmLnBpbmRlbnRfdGVzdChjbGVhbiwgY2xvc2VkKQorCisgICAgZGVmIHRlc3Rfb25lbGluZShzZWxmKToKKyAgICAgICAgY2xlYW4gPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgaWYgYTogcGFzcworICAgICAgICAgICAgIiIiKQorICAgICAgICBjbG9zZWQgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgaWYgYTogcGFzcworICAgICAgICAgICAgIyBlbmQgaWYKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgc2VsZi5waW5kZW50X3Rlc3QoY2xlYW4sIGNsb3NlZCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgqW29iaiBmb3Igb2JqIGluIGdsb2JhbHMoKS52YWx1ZXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIHR5cGUpXSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdHJhY2UucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90cmFjZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjkyYWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdHJhY2UucHkKQEAgLTAsMCArMSwzNDEgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgVEVTVEZOLCBybXRyZWUsIHVubGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQpCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IHRyYWNlCitmcm9tIHRyYWNlIGltcG9ydCBDb3ZlcmFnZVJlc3VsdHMsIFRyYWNlCisKK2Zyb20gdGVzdC50cmFjZWRtb2R1bGVzIGltcG9ydCB0ZXN0bW9kCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVXRpbGl0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworCitkZWYgZml4X2V4dF9weShmaWxlbmFtZSk6CisgICAgIiIiR2l2ZW4gYSAucHljLy5weW8gZmlsZW5hbWUgY29udmVydHMgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIC5weSIiIgorICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCgnLnB5YycsICcucHlvJykpOgorICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lWzotMV0KKyAgICByZXR1cm4gZmlsZW5hbWUKKworZGVmIG15X2ZpbGVfYW5kX21vZG5hbWUoKToKKyAgICAiIiJUaGUgLnB5IGZpbGUgYW5kIG1vZHVsZSBuYW1lIG9mIHRoaXMgZmlsZSAoX19maWxlX18pIiIiCisgICAgbW9kbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShfX2ZpbGVfXykpWzBdCisgICAgcmV0dXJuIGZpeF9leHRfcHkoX19maWxlX18pLCBtb2RuYW1lCisKK2RlZiBnZXRfZmlyc3RsaW5lbm8oZnVuYyk6CisgICAgcmV0dXJuIGZ1bmMuX19jb2RlX18uY29fZmlyc3RsaW5lbm8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tIFRhcmdldCBmdW5jdGlvbnMgZm9yIHRyYWNpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworIworIyBUaGUgcmVsYXRpdmUgbGluZSBudW1iZXJzIG9mIGxpbmVzIGluIHRoZXNlIGZ1bmN0aW9ucyBtYXR0ZXIgZm9yIHZlcmlmeWluZworIyB0cmFjaW5nLiBQbGVhc2UgbW9kaWZ5IHRoZSBhcHByb3ByaWF0ZSB0ZXN0cyBpZiB5b3UgY2hhbmdlIG9uZSBvZiB0aGUKKyMgZnVuY3Rpb25zLiBBYnNvbHV0ZSBsaW5lIG51bWJlcnMgZG9uJ3QgbWF0dGVyLgorIworCitkZWYgdHJhY2VkX2Z1bmNfbGluZWFyKHgsIHkpOgorICAgIGEgPSB4CisgICAgYiA9IHkKKyAgICBjID0gYSArIGIKKyAgICByZXR1cm4gYworCitkZWYgdHJhY2VkX2Z1bmNfbG9vcCh4LCB5KToKKyAgICBjID0geAorICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICBjICs9IHkKKyAgICByZXR1cm4gYworCitkZWYgdHJhY2VkX2Z1bmNfaW1wb3J0aW5nKHgsIHkpOgorICAgIHJldHVybiB4ICsgeSArIHRlc3Rtb2QuZnVuYygxKQorCitkZWYgdHJhY2VkX2Z1bmNfc2ltcGxlX2NhbGxlcih4KToKKyAgICBjID0gdHJhY2VkX2Z1bmNfbGluZWFyKHgsIHgpCisgICAgcmV0dXJuIGMgKyB4CisKK2RlZiB0cmFjZWRfZnVuY19pbXBvcnRpbmdfY2FsbGVyKHgpOgorICAgIGsgPSB0cmFjZWRfZnVuY19zaW1wbGVfY2FsbGVyKHgpCisgICAgayArPSB0cmFjZWRfZnVuY19pbXBvcnRpbmcoaywgeCkKKyAgICByZXR1cm4gaworCitkZWYgdHJhY2VkX2Z1bmNfZ2VuZXJhdG9yKG51bSk6CisgICAgYyA9IDUgICAgICAgIyBleGVjdXRlZCBvbmNlCisgICAgZm9yIGkgaW4gcmFuZ2UobnVtKToKKyAgICAgICAgeWllbGQgaSArIGMKKworZGVmIHRyYWNlZF9mdW5jX2NhbGxpbmdfZ2VuZXJhdG9yKCk6CisgICAgayA9IDAKKyAgICBmb3IgaSBpbiB0cmFjZWRfZnVuY19nZW5lcmF0b3IoMTApOgorICAgICAgICBrICs9IGkKKworZGVmIHRyYWNlZF9kb3VibGVyKG51bSk6CisgICAgcmV0dXJuIG51bSAqIDIKKworZGVmIHRyYWNlZF9jYWxsZXJfbGlzdF9jb21wcmVoZW5zaW9uKCk6CisgICAgayA9IDEwCisgICAgbXlsaXN0ID0gW3RyYWNlZF9kb3VibGVyKGkpIGZvciBpIGluIHJhbmdlKGspXQorICAgIHJldHVybiBteWxpc3QKKworCitjbGFzcyBUcmFjZWRDbGFzcyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgc2VsZi5hID0geAorCisgICAgZGVmIGluc3RfbWV0aG9kX2xpbmVhcihzZWxmLCB5KToKKyAgICAgICAgcmV0dXJuIHNlbGYuYSArIHkKKworICAgIGRlZiBpbnN0X21ldGhvZF9jYWxsaW5nKHNlbGYsIHgpOgorICAgICAgICBjID0gc2VsZi5pbnN0X21ldGhvZF9saW5lYXIoeCkKKyAgICAgICAgcmV0dXJuIGMgKyB0cmFjZWRfZnVuY19saW5lYXIoeCwgYykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjbGFzc19tZXRob2RfbGluZWFyKGNscywgeSk6CisgICAgICAgIHJldHVybiB5ICogMgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzdGF0aWNfbWV0aG9kX2xpbmVhcih5KToKKyAgICAgICAgcmV0dXJuIHkgKiAyCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IGNhc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIworCisKK2NsYXNzIFRlc3RMaW5lQ291bnRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJXaGl0ZS1ib3ggdGVzdGluZyBvZiBsaW5lLWNvdW50aW5nLCB2aWEgcnVuZnVuYyIiIgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIgPSBUcmFjZShjb3VudD0xLCB0cmFjZT0wLCBjb3VudGZ1bmNzPTAsIGNvdW50Y2FsbGVycz0wKQorICAgICAgICBzZWxmLm15X3B5X2ZpbGVuYW1lID0gZml4X2V4dF9weShfX2ZpbGVfXykKKworICAgIGRlZiB0ZXN0X3RyYWNlZF9mdW5jX2xpbmVhcihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfZnVuY19saW5lYXIsIDIsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCA3KQorCisgICAgICAgICMgYWxsIGxpbmVzIGFyZSBleGVjdXRlZCBvbmNlCisgICAgICAgIGV4cGVjdGVkID0ge30KKyAgICAgICAgZmlyc3RsaW5lbm8gPSBnZXRfZmlyc3RsaW5lbm8odHJhY2VkX2Z1bmNfbGluZWFyKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCA1KToKKyAgICAgICAgICAgIGV4cGVjdGVkWyhzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArICBpKV0gPSAxCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY291bnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3RyYWNlZF9mdW5jX2xvb3Aoc2VsZik6CisgICAgICAgIHNlbGYudHJhY2VyLnJ1bmZ1bmModHJhY2VkX2Z1bmNfbG9vcCwgMiwgMykKKworICAgICAgICBmaXJzdGxpbmVubyA9IGdldF9maXJzdGxpbmVubyh0cmFjZWRfZnVuY19sb29wKQorICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArIDEpOiAxLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vICsgMik6IDYsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm8gKyAzKTogNSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArIDQpOiAxLAorICAgICAgICB9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmFjZXIucmVzdWx0cygpLmNvdW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF90cmFjZWRfZnVuY19pbXBvcnRpbmcoc2VsZik6CisgICAgICAgIHNlbGYudHJhY2VyLnJ1bmZ1bmModHJhY2VkX2Z1bmNfaW1wb3J0aW5nLCAyLCA1KQorCisgICAgICAgIGZpcnN0bGluZW5vID0gZ2V0X2ZpcnN0bGluZW5vKHRyYWNlZF9mdW5jX2ltcG9ydGluZykKKyAgICAgICAgZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm8gKyAxKTogMSwKKyAgICAgICAgICAgIChmaXhfZXh0X3B5KHRlc3Rtb2QuX19maWxlX18pLCAyKTogMSwKKyAgICAgICAgICAgIChmaXhfZXh0X3B5KHRlc3Rtb2QuX19maWxlX18pLCAzKTogMSwKKyAgICAgICAgfQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmFjZXIucmVzdWx0cygpLmNvdW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF90cmFjZV9mdW5jX2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfZnVuY19jYWxsaW5nX2dlbmVyYXRvcikKKworICAgICAgICBmaXJzdGxpbmVub19jYWxsaW5nID0gZ2V0X2ZpcnN0bGluZW5vKHRyYWNlZF9mdW5jX2NhbGxpbmdfZ2VuZXJhdG9yKQorICAgICAgICBmaXJzdGxpbmVub19nZW4gPSBnZXRfZmlyc3RsaW5lbm8odHJhY2VkX2Z1bmNfZ2VuZXJhdG9yKQorICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVub19jYWxsaW5nICsgMSk6IDEsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm9fY2FsbGluZyArIDIpOiAxMSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVub19jYWxsaW5nICsgMyk6IDEwLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2dlbiArIDEpOiAxLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2dlbiArIDIpOiAxMSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVub19nZW4gKyAzKTogMTAsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY291bnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3RyYWNlX2xpc3RfY29tcHJlaGVuc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfY2FsbGVyX2xpc3RfY29tcHJlaGVuc2lvbikKKworICAgICAgICBmaXJzdGxpbmVub19jYWxsaW5nID0gZ2V0X2ZpcnN0bGluZW5vKHRyYWNlZF9jYWxsZXJfbGlzdF9jb21wcmVoZW5zaW9uKQorICAgICAgICBmaXJzdGxpbmVub19jYWxsZWQgPSBnZXRfZmlyc3RsaW5lbm8odHJhY2VkX2RvdWJsZXIpCisgICAgICAgIGV4cGVjdGVkID0geworICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2NhbGxpbmcgKyAxKTogMSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVub19jYWxsaW5nICsgMik6IDExLAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2NhbGxpbmcgKyAzKTogMSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVub19jYWxsZWQgKyAxKTogMTAsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY291bnRzLCBleHBlY3RlZCkKKworCisgICAgZGVmIHRlc3RfbGluZWFyX21ldGhvZHMoc2VsZik6CisgICAgICAgICMgWFhYIHRvZG86IGxhdGVyIGFkZCAnc3RhdGljX21ldGhvZF9saW5lYXInIGFuZCAnY2xhc3NfbWV0aG9kX2xpbmVhcicKKyAgICAgICAgIyBoZXJlLCBvbmNlIGlzc3VlMTc2NDI4NiBpcyByZXNvbHZlZAorICAgICAgICAjCisgICAgICAgIGZvciBtZXRobmFtZSBpbiBbJ2luc3RfbWV0aG9kX2xpbmVhcicsXToKKyAgICAgICAgICAgIHRyYWNlciA9IFRyYWNlKGNvdW50PTEsIHRyYWNlPTAsIGNvdW50ZnVuY3M9MCwgY291bnRjYWxsZXJzPTApCisgICAgICAgICAgICB0cmFjZWRfb2JqID0gVHJhY2VkQ2xhc3MoMjUpCisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHRyYWNlZF9vYmosIG1ldGhuYW1lKQorICAgICAgICAgICAgdHJhY2VyLnJ1bmZ1bmMobWV0aG9kLCAyMCkKKworICAgICAgICAgICAgZmlyc3RsaW5lbm8gPSBnZXRfZmlyc3RsaW5lbm8obWV0aG9kKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vICsgMSk6IDEsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlci5yZXN1bHRzKCkuY291bnRzLCBleHBlY3RlZCkKKworY2xhc3MgVGVzdFJ1bkV4ZWNDb3VudHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkEgc2ltcGxlIHNhbml0eSB0ZXN0IG9mIGxpbmUtY291bnRpbmcsIHZpYSBydW5jdHggKGV4ZWMpIiIiCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm15X3B5X2ZpbGVuYW1lID0gZml4X2V4dF9weShfX2ZpbGVfXykKKworICAgIGRlZiB0ZXN0X2V4ZWNfY291bnRzKHNlbGYpOgorICAgICAgICBzZWxmLnRyYWNlciA9IFRyYWNlKGNvdW50PTEsIHRyYWNlPTAsIGNvdW50ZnVuY3M9MCwgY291bnRjYWxsZXJzPTApCisgICAgICAgIGNvZGUgPSByJycndHJhY2VkX2Z1bmNfbG9vcCgyLCA1KScnJworICAgICAgICBjb2RlID0gY29tcGlsZShjb2RlLCBfX2ZpbGVfXywgJ2V4ZWMnKQorICAgICAgICBzZWxmLnRyYWNlci5ydW5jdHgoY29kZSwgZ2xvYmFscygpLCB2YXJzKCkpCisKKyAgICAgICAgZmlyc3RsaW5lbm8gPSBnZXRfZmlyc3RsaW5lbm8odHJhY2VkX2Z1bmNfbG9vcCkKKyAgICAgICAgZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm8gKyAxKTogMSwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVubyArIDIpOiA2LAorICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vICsgMyk6IDUsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm8gKyA0KTogMSwKKyAgICAgICAgfQorCisgICAgICAgICMgV2hlbiB1c2VkIHRocm91Z2ggJ3J1bicsIHNvbWUgb3RoZXIgc3B1cmlvdXMgY291bnRzIGFyZSBwcm9kdWNlZCwgbGlrZQorICAgICAgICAjIHRoZSBzZXR0cmFjZSBvZiB0aHJlYWRpbmcsIHdoaWNoIHdlIGlnbm9yZSwganVzdCBtYWtpbmcgc3VyZSB0aGF0IHRoZQorICAgICAgICAjIGNvdW50cyBmbyB0cmFjZWRfZnVuY19sb29wIHdlcmUgcmlnaHQuCisgICAgICAgICMKKyAgICAgICAgZm9yIGsgaW4gZXhwZWN0ZWQua2V5cygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY291bnRzW2tdLCBleHBlY3RlZFtrXSkKKworCitjbGFzcyBUZXN0RnVuY3ModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIldoaXRlLWJveCB0ZXN0aW5nIG9mIGZ1bmNzIHRyYWNpbmciIiIKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudHJhY2VyID0gVHJhY2UoY291bnQ9MCwgdHJhY2U9MCwgY291bnRmdW5jcz0xKQorICAgICAgICBzZWxmLmZpbGVtb2QgPSBteV9maWxlX2FuZF9tb2RuYW1lKCkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9jYWxsZXIoc2VsZik6CisgICAgICAgIHNlbGYudHJhY2VyLnJ1bmZ1bmModHJhY2VkX2Z1bmNfc2ltcGxlX2NhbGxlciwgMSkKKworICAgICAgICBleHBlY3RlZCA9IHsKKyAgICAgICAgICAgIHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfc2ltcGxlX2NhbGxlcicsKTogMSwKKyAgICAgICAgICAgIHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfbGluZWFyJywpOiAxLAorICAgICAgICB9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmFjZXIucmVzdWx0cygpLmNhbGxlZGZ1bmNzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2xvb3BfY2FsbGVyX2ltcG9ydGluZyhzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfZnVuY19pbXBvcnRpbmdfY2FsbGVyLCAxKQorCisgICAgICAgIGV4cGVjdGVkID0geworICAgICAgICAgICAgc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19zaW1wbGVfY2FsbGVyJywpOiAxLAorICAgICAgICAgICAgc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19saW5lYXInLCk6IDEsCisgICAgICAgICAgICBzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX2ltcG9ydGluZ19jYWxsZXInLCk6IDEsCisgICAgICAgICAgICBzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX2ltcG9ydGluZycsKTogMSwKKyAgICAgICAgICAgIChmaXhfZXh0X3B5KHRlc3Rtb2QuX19maWxlX18pLCAndGVzdG1vZCcsICdmdW5jJyk6IDEsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY2FsbGVkZnVuY3MsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfaW5zdF9tZXRob2RfY2FsbGluZyhzZWxmKToKKyAgICAgICAgb2JqID0gVHJhY2VkQ2xhc3MoMjApCisgICAgICAgIHNlbGYudHJhY2VyLnJ1bmZ1bmMob2JqLmluc3RfbWV0aG9kX2NhbGxpbmcsIDEpCisKKyAgICAgICAgZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICBzZWxmLmZpbGVtb2QgKyAoJ1RyYWNlZENsYXNzLmluc3RfbWV0aG9kX2NhbGxpbmcnLCk6IDEsCisgICAgICAgICAgICBzZWxmLmZpbGVtb2QgKyAoJ1RyYWNlZENsYXNzLmluc3RfbWV0aG9kX2xpbmVhcicsKTogMSwKKyAgICAgICAgICAgIHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfbGluZWFyJywpOiAxLAorICAgICAgICB9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmFjZXIucmVzdWx0cygpLmNhbGxlZGZ1bmNzLCBleHBlY3RlZCkKKworCitjbGFzcyBUZXN0Q2FsbGVycyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiV2hpdGUtYm94IHRlc3Rpbmcgb2YgY2FsbGVycyB0cmFjaW5nIiIiCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRyYWNlciA9IFRyYWNlKGNvdW50PTAsIHRyYWNlPTAsIGNvdW50Y2FsbGVycz0xKQorICAgICAgICBzZWxmLmZpbGVtb2QgPSBteV9maWxlX2FuZF9tb2RuYW1lKCkKKworICAgIGRlZiB0ZXN0X2xvb3BfY2FsbGVyX2ltcG9ydGluZyhzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfZnVuY19pbXBvcnRpbmdfY2FsbGVyLCAxKQorCisgICAgICAgIGV4cGVjdGVkID0geworICAgICAgICAgICAgKChvcy5wYXRoLnNwbGl0ZXh0KHRyYWNlLl9fZmlsZV9fKVswXSArICcucHknLCAndHJhY2UnLCAnVHJhY2UucnVuZnVuYycpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVtb2QgKyAoJ3RyYWNlZF9mdW5jX2ltcG9ydGluZ19jYWxsZXInLCkpKTogMSwKKyAgICAgICAgICAgICgoc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19zaW1wbGVfY2FsbGVyJywpKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19saW5lYXInLCkpKTogMSwKKyAgICAgICAgICAgICgoc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19pbXBvcnRpbmdfY2FsbGVyJywpKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbW9kICsgKCd0cmFjZWRfZnVuY19zaW1wbGVfY2FsbGVyJywpKSk6IDEsCisgICAgICAgICAgICAoKHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfaW1wb3J0aW5nX2NhbGxlcicsKSksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfaW1wb3J0aW5nJywpKSk6IDEsCisgICAgICAgICAgICAoKHNlbGYuZmlsZW1vZCArICgndHJhY2VkX2Z1bmNfaW1wb3J0aW5nJywpKSwKKyAgICAgICAgICAgICAgICAoZml4X2V4dF9weSh0ZXN0bW9kLl9fZmlsZV9fKSwgJ3Rlc3Rtb2QnLCAnZnVuYycpKTogMSwKKyAgICAgICAgfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHJhY2VyLnJlc3VsdHMoKS5jYWxsZXJzLCBleHBlY3RlZCkKKworCisjIENyZWF0ZWQgc2VwYXJhdGVseSBmb3IgaXNzdWUgIzM4MjEKK2NsYXNzIFRlc3RDb3ZlcmFnZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBybXRyZWUoVEVTVEZOKQorICAgICAgICB1bmxpbmsoVEVTVEZOKQorCisgICAgZGVmIF9jb3ZlcmFnZShzZWxmLCB0cmFjZXIsCisgICAgICAgICAgICAgICAgICBjbWQ9J2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9wcHJpbnQ7IHRlc3RfcHByaW50LnRlc3RfbWFpbigpJyk6CisgICAgICAgIHRyYWNlci5ydW4oY21kKQorICAgICAgICByID0gdHJhY2VyLnJlc3VsdHMoKQorICAgICAgICByLndyaXRlX3Jlc3VsdHMoc2hvd19taXNzaW5nPVRydWUsIHN1bW1hcnk9VHJ1ZSwgY292ZXJkaXI9VEVTVEZOKQorCisgICAgZGVmIHRlc3RfY292ZXJhZ2Uoc2VsZik6CisgICAgICAgIHRyYWNlciA9IHRyYWNlLlRyYWNlKHRyYWNlPTAsIGNvdW50PTEpCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fY292ZXJhZ2UodHJhY2VyKQorICAgICAgICBzdGRvdXQgPSBzdGRvdXQuZ2V0dmFsdWUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInBwcmludC5weSIgaW4gc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoImNhc2UucHkiIGluIHN0ZG91dCkgICAjIGZyb20gdW5pdHRlc3QKKyAgICAgICAgZmlsZXMgPSBvcy5saXN0ZGlyKFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJwcHJpbnQuY292ZXIiIGluIGZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInVuaXR0ZXN0LmNhc2UuY292ZXIiIGluIGZpbGVzKQorCisgICAgZGVmIHRlc3RfY292ZXJhZ2VfaWdub3JlKHNlbGYpOgorICAgICAgICAjIElnbm9yZSBhbGwgZmlsZXMsIG5vdGhpbmcgc2hvdWxkIGJlIHRyYWNlZCBub3IgcHJpbnRlZAorICAgICAgICBsaWJwYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmRpcm5hbWUob3MuX19maWxlX18pKQorICAgICAgICAjIHN5cy5wcmVmaXggZG9lcyBub3Qgd29yayB3aGVuIHJ1bm5pbmcgZnJvbSBhIGNoZWNrb3V0CisgICAgICAgIHRyYWNlciA9IHRyYWNlLlRyYWNlKGlnbm9yZWRpcnM9W3N5cy5wcmVmaXgsIHN5cy5leGVjX3ByZWZpeCwgbGlicGF0aF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlPTAsIGNvdW50PTEpCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fY292ZXJhZ2UodHJhY2VyKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhURVNURk4pOgorICAgICAgICAgICAgZmlsZXMgPSBvcy5saXN0ZGlyKFRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXMsIFtdKQorCisgICAgZGVmIHRlc3RfaXNzdWU5OTM2KHNlbGYpOgorICAgICAgICB0cmFjZXIgPSB0cmFjZS5UcmFjZSh0cmFjZT0wLCBjb3VudD0xKQorICAgICAgICBtb2RuYW1lID0gJ3Rlc3QudHJhY2VkbW9kdWxlcy50ZXN0bW9kJworICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSBtb2R1bGUgaXMgZXhlY3V0ZWQgaW4gaW1wb3J0CisgICAgICAgIGlmIG1vZG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kbmFtZV0KKyAgICAgICAgY21kID0gKCJpbXBvcnQgdGVzdC50cmFjZWRtb2R1bGVzLnRlc3Rtb2QgYXMgdDsiCisgICAgICAgICAgICAgICAidC5mdW5jKDApOyB0LmZ1bmMyKCk7IikKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICBzZWxmLl9jb3ZlcmFnZSh0cmFjZXIsIGNtZCkKKyAgICAgICAgc3Rkb3V0LnNlZWsoMCkKKyAgICAgICAgc3Rkb3V0LnJlYWRsaW5lKCkKKyAgICAgICAgY292ZXJhZ2UgPSB7fQorICAgICAgICBmb3IgbGluZSBpbiBzdGRvdXQ6CisgICAgICAgICAgICBsaW5lcywgY292LCBtb2R1bGUgPSBsaW5lLnNwbGl0KClbOjNdCisgICAgICAgICAgICBjb3ZlcmFnZVttb2R1bGVdID0gKGludChsaW5lcyksIGludChjb3ZbOi0xXSkpCisgICAgICAgICMgWFhYIFRoaXMgaXMgbmVlZGVkIHRvIHJ1biByZWdydGVzdC5weSBhcyBhIHNjcmlwdAorICAgICAgICBtb2RuYW1lID0gdHJhY2UuZnVsbG1vZG5hbWUoc3lzLm1vZHVsZXNbbW9kbmFtZV0uX19maWxlX18pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kbmFtZSwgY292ZXJhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY292ZXJhZ2VbbW9kbmFtZV0sICg1LCAxMDApKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoX19uYW1lX18pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNzZiZTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKQEAgLTAsMCArMSwyMDQgQEAKKyIiIlRlc3QgY2FzZXMgZm9yIHRyYWNlYmFjayBtb2R1bGUiIiIKKworZnJvbSBfdGVzdGNhcGkgaW1wb3J0IHRyYWNlYmFja19wcmludAorZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBpbXAgaW1wb3J0IHJlbG9hZAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpc19qeXRob24sIEVycm9yCisKK2ltcG9ydCB0cmFjZWJhY2sKKworCitjbGFzcyBUcmFjZWJhY2tDYXNlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBGb3Igbm93LCBhIHZlcnkgbWluaW1hbCBzZXQgb2YgdGVzdHMuICBJIHdhbnQgdG8gYmUgc3VyZSB0aGF0CisgICAgIyBmb3JtYXR0aW5nIG9mIFN5bnRheEVycm9ycyB3b3JrcyBiYXNlZCBvbiBjaGFuZ2VzIGZvciAyLjEuCisKKyAgICBkZWYgZ2V0X2V4Y2VwdGlvbl9mb3JtYXQoc2VsZiwgZnVuYywgZXhjKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnVuYygpCisgICAgICAgIGV4Y2VwdCBleGMsIHZhbHVlOgorICAgICAgICAgICAgcmV0dXJuIHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoZXhjLCB2YWx1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJjYWxsIGRpZCBub3QgcmFpc2UgZXhjZXB0aW9uIgorCisgICAgZGVmIHN5bnRheF9lcnJvcl93aXRoX2NhcmV0KHNlbGYpOgorICAgICAgICBjb21waWxlKCJkZWYgZmFjdCh4KTpcblx0cmV0dXJuIHghXG4iLCAiPyIsICJleGVjIikKKworICAgIGRlZiBzeW50YXhfZXJyb3Jfd2l0aF9jYXJldF8yKHNlbGYpOgorICAgICAgICBjb21waWxlKCIxICtcbiIsICI/IiwgImV4ZWMiKQorCisgICAgZGVmIHN5bnRheF9lcnJvcl93aXRob3V0X2NhcmV0KHNlbGYpOgorICAgICAgICAjIFhYWCB3aHkgZG9lc24ndCBjb21waWxlIHJhaXNlIHRoZSBzYW1lIHRyYWNlYmFjaz8KKyAgICAgICAgaW1wb3J0IHRlc3QuYmFkc3ludGF4X25vY2FyZXQKKworICAgIGRlZiBzeW50YXhfZXJyb3JfYmFkX2luZGVudGF0aW9uKHNlbGYpOgorICAgICAgICBjb21waWxlKCJkZWYgc3BhbSgpOlxuICBwcmludCAxXG4gcHJpbnQgMiIsICI/IiwgImV4ZWMiKQorCisgICAgZGVmIHRlc3RfY2FyZXQoc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYuZ2V0X2V4Y2VwdGlvbl9mb3JtYXQoc2VsZi5zeW50YXhfZXJyb3Jfd2l0aF9jYXJldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW50YXhFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihlcnIpID09IDQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnJbMV0uc3RyaXAoKSA9PSAicmV0dXJuIHghIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiXiIsIGVyclsyXSkgIyB0aGlyZCBsaW5lIGhhcyBjYXJldAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyWzFdLmZpbmQoIiEiKSA9PSBlcnJbMl0uZmluZCgiXiIpKSAjIGluIHRoZSByaWdodCBwbGFjZQorCisgICAgICAgIGVyciA9IHNlbGYuZ2V0X2V4Y2VwdGlvbl9mb3JtYXQoc2VsZi5zeW50YXhfZXJyb3Jfd2l0aF9jYXJldF8yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bnRheEVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEluKCJeIiwgZXJyWzJdKSAjIHRoaXJkIGxpbmUgaGFzIGNhcmV0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnJbMl0uY291bnQoJ1xuJykgPT0gMSkgIyBhbmQgbm8gYWRkaXRpb25hbCBuZXdsaW5lCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnJbMV0uZmluZCgiKyIpID09IGVyclsyXS5maW5kKCJeIikpICMgaW4gdGhlIHJpZ2h0IHBsYWNlCisKKyAgICBkZWYgdGVzdF9ub2NhcmV0KHNlbGYpOgorICAgICAgICBpZiBpc19qeXRob246CisgICAgICAgICAgICAjIGp5dGhvbiBhZGRzIGEgY2FyZXQgaW4gdGhpcyBjYXNlICh3aHkgc2hvdWxkbid0IGl0PykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlcnIgPSBzZWxmLmdldF9leGNlcHRpb25fZm9ybWF0KHNlbGYuc3ludGF4X2Vycm9yX3dpdGhvdXRfY2FyZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ludGF4RXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZXJyKSA9PSAzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyWzFdLnN0cmlwKCkgPT0gIlt4IGZvciB4IGluIHhdID0geCIpCisKKyAgICBkZWYgdGVzdF9iYWRfaW5kZW50YXRpb24oc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYuZ2V0X2V4Y2VwdGlvbl9mb3JtYXQoc2VsZi5zeW50YXhfZXJyb3JfYmFkX2luZGVudGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGVudGF0aW9uRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZXJyKSA9PSA0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyWzFdLnN0cmlwKCkgPT0gInByaW50IDIiKQorICAgICAgICBzZWxmLmFzc2VydEluKCJeIiwgZXJyWzJdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyWzFdLmZpbmQoIjIiKSA9PSBlcnJbMl0uZmluZCgiXiIpKQorCisgICAgZGVmIHRlc3RfYnVnNzM3NDczKHNlbGYpOgorICAgICAgICBpbXBvcnQgb3MsIHRlbXBmaWxlLCB0aW1lCisKKyAgICAgICAgc2F2ZWRwYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgdGVzdGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgdGVzdGRpcikKKyAgICAgICAgICAgIHRlc3RmaWxlID0gb3MucGF0aC5qb2luKHRlc3RkaXIsICd0ZXN0X2J1ZzczNzQ3My5weScpCisgICAgICAgICAgICBwcmludCA+PiBvcGVuKHRlc3RmaWxlLCAndycpLCAiIiIKK2RlZiB0ZXN0KCk6CisgICAgcmFpc2UgVmFsdWVFcnJvciIiIgorCisgICAgICAgICAgICBpZiAndGVzdF9idWc3Mzc0NzMnIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1sndGVzdF9idWc3Mzc0NzMnXQorICAgICAgICAgICAgaW1wb3J0IHRlc3RfYnVnNzM3NDczCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZXN0X2J1ZzczNzQ3My50ZXN0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICMgdGhpcyBsb2FkcyBzb3VyY2UgY29kZSB0byBsaW5lY2FjaGUKKyAgICAgICAgICAgICAgICB0cmFjZWJhY2suZXh0cmFjdF90YihzeXMuZXhjX3RyYWNlYmFjaykKKworICAgICAgICAgICAgIyBJZiB0aGlzIHRlc3QgcnVucyB0b28gcXVpY2tseSwgdGVzdF9idWc3Mzc0NzMucHkncyBtdGltZQorICAgICAgICAgICAgIyBhdHRyaWJ1dGUgd2lsbCByZW1haW4gdW5jaGFuZ2VkIGV2ZW4gaWYgdGhlIGZpbGUgaXMgcmV3cml0dGVuLgorICAgICAgICAgICAgIyBDb25zZXF1ZW50bHksIHRoZSBmaWxlIHdvdWxkIG5vdCByZWxvYWQuICBTbywgYWRkZWQgYSBzbGVlcCgpCisgICAgICAgICAgICAjIGRlbGF5IHRvIGFzc3VyZSB0aGF0IGEgbmV3LCBkaXN0aW5jdCB0aW1lc3RhbXAgaXMgd3JpdHRlbi4KKyAgICAgICAgICAgICMgU2luY2UgV2luTUUgd2l0aCBGQVQzMiBoYXMgbXVsdGlzZWNvbmQgcmVzb2x1dGlvbiwgbW9yZSB0aGFuCisgICAgICAgICAgICAjIHRocmVlIHNlY29uZHMgYXJlIG5lZWRlZCBmb3IgdGhpcyB0ZXN0IHRvIHBhc3MgcmVsaWFibHkgOi0oCisgICAgICAgICAgICB0aW1lLnNsZWVwKDQpCisKKyAgICAgICAgICAgIHByaW50ID4+IG9wZW4odGVzdGZpbGUsICd3JyksICIiIgorZGVmIHRlc3QoKToKKyAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yIiIiCisgICAgICAgICAgICByZWxvYWQodGVzdF9idWc3Mzc0NzMpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGVzdF9idWc3Mzc0NzMudGVzdCgpCisgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBzcmMgPSB0cmFjZWJhY2suZXh0cmFjdF90YihzeXMuZXhjX3RyYWNlYmFjaylbLTFdWy0xXQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjLCAncmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcicpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMucGF0aFs6XSA9IHNhdmVkcGF0aAorICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcih0ZXN0ZGlyKToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKHRlc3RkaXIsIGYpKQorICAgICAgICAgICAgb3Mucm1kaXIodGVzdGRpcikKKworICAgIGRlZiB0ZXN0X2Jhc2VfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBleGNlcHRpb25zIGRlcml2ZWQgZnJvbSBCYXNlRXhjZXB0aW9uIGFyZSBmb3JtYXR0ZWQgcmlnaHQKKyAgICAgICAgZSA9IEtleWJvYXJkSW50ZXJydXB0KCkKKyAgICAgICAgbHN0ID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seShlLl9fY2xhc3NfXywgZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QsIFsnS2V5Ym9hcmRJbnRlcnJ1cHRcbiddKQorCisgICAgIyBTdHJpbmcgZXhjZXB0aW9ucyBhcmUgZGVwcmVjYXRlZCwgYnV0IGxlZ2FsLiAgVGhlIHF1aXJreSBmb3JtIHdpdGgKKyAgICAjIHNlcGFyYXRlICJ0eXBlIiBhbmQgInZhbHVlIiB0ZW5kcyB0byBicmVhayB0aGluZ3MsIGJlY2F1c2UKKyAgICAjICAgICBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgdHlwZSkKKyAgICAjIGFuZCBhIHN0cmluZyBjYW5ub3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGlzc3ViY2xhc3MuCisgICAgIworICAgICMgTm90ZSB0aGF0IHN5cy5sYXN0X3R5cGUgYW5kIHN5cy5sYXN0X3ZhbHVlIGRvIG5vdCBnZXQgc2V0IGlmIGFuCisgICAgIyBleGNlcHRpb24gaXMgY2F1Z2h0LCBzbyB3ZSBzb3J0IG9mIGNoZWF0IGFuZCBqdXN0IGVtdWxhdGUgdGhlbS4KKyAgICAjCisgICAgIyB0ZXN0X3N0cmluZ19leGNlcHRpb24xIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAjCisgICAgIyA+Pj4gcmFpc2UgIlN0cmluZyBFeGNlcHRpb24iCisgICAgIworICAgICMgdGVzdF9zdHJpbmdfZXhjZXB0aW9uMiBpcyBlcXVpdmFsZW50IHRvCisgICAgIworICAgICMgPj4+IHJhaXNlICJTdHJpbmcgRXhjZXB0aW9uIiwgIlN0cmluZyBWYWx1ZSIKKyAgICAjCisgICAgZGVmIHRlc3Rfc3RyaW5nX2V4Y2VwdGlvbjEoc2VsZik6CisgICAgICAgIHN0cl90eXBlID0gIlN0cmluZyBFeGNlcHRpb24iCisgICAgICAgIGVyciA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoc3RyX3R5cGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVyciksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyWzBdLCBzdHJfdHlwZSArICdcbicpCisKKyAgICBkZWYgdGVzdF9zdHJpbmdfZXhjZXB0aW9uMihzZWxmKToKKyAgICAgICAgc3RyX3R5cGUgPSAiU3RyaW5nIEV4Y2VwdGlvbiIKKyAgICAgICAgc3RyX3ZhbHVlID0gIlN0cmluZyBWYWx1ZSIKKyAgICAgICAgZXJyID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seShzdHJfdHlwZSwgc3RyX3ZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlcnIpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyclswXSwgc3RyX3R5cGUgKyAnOiAnICsgc3RyX3ZhbHVlICsgJ1xuJykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9leGNlcHRpb25fb25seV9iYWRfX3N0cl9fKHNlbGYpOgorICAgICAgICBjbGFzcyBYKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAxIC8vIDAKKyAgICAgICAgZXJyID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seShYLCBYKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVyciksIDEpCisgICAgICAgIHN0cl92YWx1ZSA9ICc8dW5wcmludGFibGUgJXMgb2JqZWN0PicgJSBYLl9fbmFtZV9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyWzBdLCBYLl9fbmFtZV9fICsgJzogJyArIHN0cl92YWx1ZSArICdcbicpCisKKyAgICBkZWYgdGVzdF93aXRob3V0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXJyID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seShOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgWydOb25lXG4nXSkKKworICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CisgICAgICAgIGVyciA9IEFzc2VydGlvbkVycm9yKCdceGZmJykKKyAgICAgICAgbGluZXMgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KHR5cGUoZXJyKSwgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbJ0Fzc2VydGlvbkVycm9yOiBceGZmXG4nXSkKKworICAgICAgICBlcnIgPSBBc3NlcnRpb25FcnJvcih1J1x4ZTknKQorICAgICAgICBsaW5lcyA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkodHlwZShlcnIpLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFsnQXNzZXJ0aW9uRXJyb3I6IFxceGU5XG4nXSkKKworCitjbGFzcyBUcmFjZWJhY2tGb3JtYXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90cmFjZWJhY2tfZm9ybWF0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignYmxhaCcpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHR5cGVfLCB2YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgdHJhY2ViYWNrX2ZtdCA9ICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF90Yih0YikpCisgICAgICAgICAgICBmaWxlXyA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHRyYWNlYmFja19wcmludCh0YiwgZmlsZV8pCisgICAgICAgICAgICBweXRob25fZm10ICA9IGZpbGVfLmdldHZhbHVlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEVycm9yKCJ1bmFibGUgdG8gY3JlYXRlIHRlc3QgdHJhY2ViYWNrIHN0cmluZyIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBQeXRob24gYW5kIHRoZSB0cmFjZWJhY2sgbW9kdWxlIGZvcm1hdCB0aGUgc2FtZSB0aGluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFja19mbXQsIHB5dGhvbl9mbXQpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgdHJhY2ViYWNrIGlzIHByb3Blcmx5IGluZGVudGVkLgorICAgICAgICB0Yl9saW5lcyA9IHB5dGhvbl9mbXQuc3BsaXRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRiX2xpbmVzKSwgMykKKyAgICAgICAgYmFubmVyLCBsb2NhdGlvbiwgc291cmNlX2xpbmUgPSB0Yl9saW5lcworICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFubmVyLnN0YXJ0c3dpdGgoJ1RyYWNlYmFjaycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jYXRpb24uc3RhcnRzd2l0aCgnICBGaWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb3VyY2VfbGluZS5zdGFydHN3aXRoKCcgICAgcmFpc2UnKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFRyYWNlYmFja0Nhc2VzLCBUcmFjZWJhY2tGb3JtYXRUZXN0cykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90cmFuc2Zvcm1lci5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RyYW5zZm9ybWVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OTFhYzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90cmFuc2Zvcm1lci5weQpAQCAtMCwwICsxLDM4IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKyMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKK3Rlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdjb21waWxlcicsIGRlcHJlY2F0ZWQ9VHJ1ZSkKK2Zyb20gY29tcGlsZXIgaW1wb3J0IHRyYW5zZm9ybWVyLCBhc3QKK2Zyb20gY29tcGlsZXIgaW1wb3J0IGNvbXBpbGUKKworY2xhc3MgVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RNdWx0aXBsZUxIUyhzZWxmKToKKyAgICAgICAgIiIiIFRlc3QgbXVsdGlwbGUgdGFyZ2V0cyBvbiB0aGUgbGVmdCBoYW5kIHNpZGUuICIiIgorCisgICAgICAgIHNuaXBwZXRzID0gWydhLCBiID0gMSwgMicsCisgICAgICAgICAgICAgICAgICAgICcoYSwgYikgPSAxLCAyJywKKyAgICAgICAgICAgICAgICAgICAgJygoYSwgYiksIGMpID0gKDEsIDIpLCAzJ10KKworICAgICAgICBmb3IgcyBpbiBzbmlwcGV0czoKKyAgICAgICAgICAgIGEgPSB0cmFuc2Zvcm1lci5wYXJzZShzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGEsIGFzdC5Nb2R1bGUpCisgICAgICAgICAgICBjaGlsZDEgPSBhLmdldENoaWxkTm9kZXMoKVswXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNoaWxkMSwgYXN0LlN0bXQpCisgICAgICAgICAgICBjaGlsZDIgPSBjaGlsZDEuZ2V0Q2hpbGROb2RlcygpWzBdCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY2hpbGQyLCBhc3QuQXNzaWduKQorCisgICAgICAgICAgICAjIFRoaXMgYWN0dWFsbHkgdGVzdHMgdGhlIGNvbXBpbGVyLCBidXQgaXQncyBhIHdheSB0byBhc3N1cmUgdGhlIGFzdAorICAgICAgICAgICAgIyBpcyBjb3JyZWN0CisgICAgICAgICAgICBjID0gY29tcGlsZShzLCAnPHN0cmluZz4nLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHZhbHMgPSB7fQorICAgICAgICAgICAgZXhlYyBjIGluIHZhbHMKKyAgICAgICAgICAgIGFzc2VydCB2YWxzWydhJ10gPT0gMQorICAgICAgICAgICAgYXNzZXJ0IHZhbHNbJ2InXSA9PSAyCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90dGtfZ3Vpb25seS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3R0a19ndWlvbmx5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMzY4YmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90dGtfZ3Vpb25seS5weQpAQCAtMCwwICsxLDQzIEBACitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBTa2lwIHRoaXMgdGVzdCBpZiBfdGtpbnRlciB3YXNuJ3QgYnVpbHQuCit0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnX3RraW50ZXInKQorCit0aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQorbGliX3RrX3Rlc3QgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHRoaXNfZGlyLCBvcy5wYXRoLnBhcmRpciwKKyAgICAnbGliLXRrJywgJ3Rlc3QnKSkKKword2l0aCB0ZXN0X3N1cHBvcnQuRGlyc09uU3lzUGF0aChsaWJfdGtfdGVzdCk6CisgICAgaW1wb3J0IHJ1bnRrdGVzdHMKKworIyBTa2lwIHRlc3QgaWYgdGsgY2Fubm90IGJlIGluaXRpYWxpemVkLgorcnVudGt0ZXN0cy5jaGVja190a19hdmFpbGFiaWxpdHkoKQorCitpbXBvcnQgdHRrCitmcm9tIF90a2ludGVyIGltcG9ydCBUY2xFcnJvcgorCit0cnk6CisgICAgdHRrLkJ1dHRvbigpCitleGNlcHQgVGNsRXJyb3IsIG1zZzoKKyAgICAjIGFzc3VtaW5nIHR0ayBpcyBub3QgYXZhaWxhYmxlCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInR0ayBub3QgYXZhaWxhYmxlOiAlcyIgJSBtc2cpCisKK2RlZiB0ZXN0X21haW4oZW5hYmxlX2d1aT1GYWxzZSk6CisgICAgaWYgZW5hYmxlX2d1aToKKyAgICAgICAgaWYgdGVzdF9zdXBwb3J0LnVzZV9yZXNvdXJjZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gWydndWknXQorICAgICAgICBlbGlmICdndWknIG5vdCBpbiB0ZXN0X3N1cHBvcnQudXNlX3Jlc291cmNlczoKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51c2VfcmVzb3VyY2VzLmFwcGVuZCgnZ3VpJykKKworICAgIHdpdGggdGVzdF9zdXBwb3J0LkRpcnNPblN5c1BhdGgobGliX3RrX3Rlc3QpOgorICAgICAgICBmcm9tIHRlc3RfdHRrLnN1cHBvcnQgaW1wb3J0IGdldF90a19yb290CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgICAgICAgICAgKnJ1bnRrdGVzdHMuZ2V0X3Rlc3RzKHRleHQ9RmFsc2UsIHBhY2thZ2VzPVsndGVzdF90dGsnXSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBnZXRfdGtfcm9vdCgpLmRlc3Ryb3koKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbihlbmFibGVfZ3VpPVRydWUpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90dGtfdGV4dG9ubHkucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90dGtfdGV4dG9ubHkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5MjA0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3R0a190ZXh0b25seS5weQpAQCAtMCwwICsxLDE5IEBACitpbXBvcnQgb3MKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKyMgU2tpcCB0aGlzIHRlc3QgaWYgX3RraW50ZXIgZG9lcyBub3QgZXhpc3QuCit0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnX3RraW50ZXInKQorCit0aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQorbGliX3RrX3Rlc3QgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHRoaXNfZGlyLCAnLi4nLCAnbGliLXRrJywgJ3Rlc3QnKSkKKword2l0aCB0ZXN0X3N1cHBvcnQuRGlyc09uU3lzUGF0aChsaWJfdGtfdGVzdCk6CisgICAgaW1wb3J0IHJ1bnRrdGVzdHMKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHdpdGggdGVzdF9zdXBwb3J0LkRpcnNPblN5c1BhdGgobGliX3RrX3Rlc3QpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICAgICAgKnJ1bnRrdGVzdHMuZ2V0X3Rlc3RzKGd1aT1GYWxzZSwgcGFja2FnZXM9Wyd0ZXN0X3R0ayddKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdHVwbGUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90dXBsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzMwOGYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdHVwbGUucHkKQEAgLTAsMCArMSwxNjEgQEAKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCBzZXFfdGVzdHMKKworaW1wb3J0IGdjCisKK2NsYXNzIFR1cGxlVGVzdChzZXFfdGVzdHMuQ29tbW9uVGVzdCk6CisgICAgdHlwZTJ0ZXN0ID0gdHVwbGUKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9ycyhzZWxmKToKKyAgICAgICAgc3VwZXIoVHVwbGVUZXN0LCBzZWxmKS50ZXN0X2NvbnN0cnVjdG9ycygpCisgICAgICAgICMgY2FsbGluZyBidWlsdC1pbiB0eXBlcyB3aXRob3V0IGFyZ3VtZW50IG11c3QgcmV0dXJuIGVtcHR5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUoKSwgKCkpCisgICAgICAgIHQwXzMgPSAoMCwgMSwgMiwgMykKKyAgICAgICAgdDBfM19iaXMgPSB0dXBsZSh0MF8zKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDBfMyBpcyB0MF8zX2JpcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZShbXSksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKFswLCAxLCAyLCAzXSksICgwLCAxLCAyLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZSgnJyksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKCdzcGFtJyksICgncycsICdwJywgJ2EnLCAnbScpKQorCisgICAgZGVmIHRlc3RfdHJ1dGgoc2VsZik6CisgICAgICAgIHN1cGVyKFR1cGxlVGVzdCwgc2VsZikudGVzdF90cnV0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoNDIsICkpCisKKyAgICBkZWYgdGVzdF9sZW4oc2VsZik6CisgICAgICAgIHN1cGVyKFR1cGxlVGVzdCwgc2VsZikudGVzdF9sZW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbigoKSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKCgwLCkpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbigoMCwgMSwgMikpLCAzKQorCisgICAgZGVmIHRlc3RfaWFkZChzZWxmKToKKyAgICAgICAgc3VwZXIoVHVwbGVUZXN0LCBzZWxmKS50ZXN0X2lhZGQoKQorICAgICAgICB1ID0gKDAsIDEpCisgICAgICAgIHUyID0gdQorICAgICAgICB1ICs9ICgyLCAzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSBpcyBub3QgdTIpCisKKyAgICBkZWYgdGVzdF9pbXVsKHNlbGYpOgorICAgICAgICBzdXBlcihUdXBsZVRlc3QsIHNlbGYpLnRlc3RfaW11bCgpCisgICAgICAgIHUgPSAoMCwgMSkKKyAgICAgICAgdTIgPSB1CisgICAgICAgIHUgKj0gMworICAgICAgICBzZWxmLmFzc2VydFRydWUodSBpcyBub3QgdTIpCisKKyAgICBkZWYgdGVzdF90dXBsZXJlc2l6ZWJ1ZyhzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGEgc3BlY2lmaWMgYnVnIGluIF9QeVR1cGxlX1Jlc2l6ZSgpIGlzIHNxdWFzaGVkLgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICAgICAgeWllbGQgaQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QodHVwbGUoZigpKSksIHJhbmdlKDEwMDApKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgIyBTZWUgU0YgYnVnIDk0Mjk1MjogIFdlYWtuZXNzIGluIHR1cGxlIGhhc2gKKyAgICAgICAgIyBUaGUgaGFzaCBzaG91bGQ6CisgICAgICAgICMgICAgICBiZSBub24tY29tbXV0YXRpdmUKKyAgICAgICAgIyAgICAgIHNob3VsZCBzcHJlYWQtb3V0IGNsb3NlbHkgc3BhY2VkIHZhbHVlcworICAgICAgICAjICAgICAgc2hvdWxkIG5vdCBleGhpYml0IGNhbmNlbGxhdGlvbiBpbiB0dXBsZXMgbGlrZSAoeCwoeCx5KSkKKyAgICAgICAgIyAgICAgIHNob3VsZCBiZSBkaXN0aW5jdCBmcm9tIGVsZW1lbnQgaGFzaGVzOiAgaGFzaCh4KSE9aGFzaCgoeCwpKQorICAgICAgICAjIFRoaXMgdGVzdCBleGVyY2lzZXMgdGhvc2UgY2FzZXMuCisgICAgICAgICMgRm9yIGEgcHVyZSByYW5kb20gaGFzaCBhbmQgTj01MCwgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBvY2N1cGllZAorICAgICAgICAjICAgICAgYnVja2V0cyB3aGVuIHRvc3NpbmcgMjUyLDYwMCBiYWxscyBpbnRvIDIqKjMyIGJ1Y2tldHMKKyAgICAgICAgIyAgICAgIGlzIDI1Miw1OTIuNiwgb3IgYWJvdXQgNy40IGV4cGVjdGVkIGNvbGxpc2lvbnMuICBUaGUKKyAgICAgICAgIyAgICAgIHN0YW5kYXJkIGRldmlhdGlvbiBpcyAyLjczLiAgT24gYSBib3ggd2l0aCA2NC1iaXQgaGFzaAorICAgICAgICAjICAgICAgY29kZXMsIG5vIGNvbGxpc2lvbnMgYXJlIGV4cGVjdGVkLiAgSGVyZSB3ZSBhY2NlcHQgbm8KKyAgICAgICAgIyAgICAgIG1vcmUgdGhhbiAxNSBjb2xsaXNpb25zLiAgQW55IHdvcnNlIGFuZCB0aGUgaGFzaCBmdW5jdGlvbgorICAgICAgICAjICAgICAgaXMgc29yZWx5IHN1c3BlY3QuCisKKyAgICAgICAgTj01MAorICAgICAgICBiYXNlID0gcmFuZ2UoTikKKyAgICAgICAgeHAgPSBbKGksIGopIGZvciBpIGluIGJhc2UgZm9yIGogaW4gYmFzZV0KKyAgICAgICAgaW5wcyA9IGJhc2UgKyBbKGksIGopIGZvciBpIGluIGJhc2UgZm9yIGogaW4geHBdICsgXAorICAgICAgICAgICAgICAgICAgICAgWyhpLCBqKSBmb3IgaSBpbiB4cCBmb3IgaiBpbiBiYXNlXSArIHhwICsgemlwKGJhc2UpCisgICAgICAgIGNvbGxpc2lvbnMgPSBsZW4oaW5wcykgLSBsZW4oc2V0KG1hcChoYXNoLCBpbnBzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb2xsaXNpb25zIDw9IDE1KQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgbDAgPSB0dXBsZSgpCisgICAgICAgIGwyID0gKDAsIDEsIDIpCisgICAgICAgIGEwID0gc2VsZi50eXBlMnRlc3QobDApCisgICAgICAgIGEyID0gc2VsZi50eXBlMnRlc3QobDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYTApLCByZXByKGwwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYTIpLCByZXByKGwyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGEwKSwgIigpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGEyKSwgIigwLCAxLCAyKSIpCisKKyAgICBkZWYgX25vdF90cmFja2VkKHNlbGYsIHQpOgorICAgICAgICAjIE5lc3RlZCB0dXBsZXMgY2FuIHRha2Ugc2V2ZXJhbCBjb2xsZWN0aW9ucyB0byB1bnRyYWNrCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKHQpLCB0KQorCisgICAgZGVmIF90cmFja2VkKHNlbGYsIHQpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZCh0KSwgdCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2MuaXNfdHJhY2tlZCh0KSwgdCkKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfdHJhY2tfbGl0ZXJhbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBHQy1vcHRpbWl6YXRpb24gb2YgdHVwbGUgbGl0ZXJhbHMKKyAgICAgICAgeCwgeSwgeiA9IDEuNSwgImEiLCBbXQorCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKCgpKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCgoMSwpKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCgoMSwgMikpCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKCgxLCAyLCAiYSIpKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCgoMSwgMiwgKE5vbmUsIFRydWUsIEZhbHNlLCAoKSksIGludCkpCisgICAgICAgIHNlbGYuX25vdF90cmFja2VkKChvYmplY3QoKSwpKQorICAgICAgICBzZWxmLl9ub3RfdHJhY2tlZCgoKDEsIHgpLCB5LCAoMiwgMykpKQorCisgICAgICAgICMgVHVwbGVzIHdpdGggbXV0YWJsZSBlbGVtZW50cyBhcmUgYWx3YXlzIHRyYWNrZWQsIGV2ZW4gaWYgdGhvc2UKKyAgICAgICAgIyBlbGVtZW50cyBhcmUgbm90IHRyYWNrZWQgcmlnaHQgbm93LgorICAgICAgICBzZWxmLl90cmFja2VkKChbXSwpKQorICAgICAgICBzZWxmLl90cmFja2VkKChbMV0sKSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCgoe30sKSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCgoc2V0KCksKSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCgoeCwgeSwgeikpCisKKyAgICBkZWYgY2hlY2tfdHJhY2tfZHluYW1pYyhzZWxmLCB0cCwgYWx3YXlzX3RyYWNrKToKKyAgICAgICAgeCwgeSwgeiA9IDEuNSwgImEiLCBbXQorCisgICAgICAgIGNoZWNrID0gc2VsZi5fdHJhY2tlZCBpZiBhbHdheXNfdHJhY2sgZWxzZSBzZWxmLl9ub3RfdHJhY2tlZAorICAgICAgICBjaGVjayh0cCgpKQorICAgICAgICBjaGVjayh0cChbXSkpCisgICAgICAgIGNoZWNrKHRwKHNldCgpKSkKKyAgICAgICAgY2hlY2sodHAoWzEsIHgsIHldKSkKKyAgICAgICAgY2hlY2sodHAob2JqIGZvciBvYmogaW4gWzEsIHgsIHldKSkKKyAgICAgICAgY2hlY2sodHAoc2V0KFsxLCB4LCB5XSkpKQorICAgICAgICBjaGVjayh0cCh0dXBsZShbb2JqXSkgZm9yIG9iaiBpbiBbMSwgeCwgeV0pKQorICAgICAgICBjaGVjayh0dXBsZSh0cChbb2JqXSkgZm9yIG9iaiBpbiBbMSwgeCwgeV0pKQorCisgICAgICAgIHNlbGYuX3RyYWNrZWQodHAoW3pdKSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCh0cChbW3gsIHldXSkpCisgICAgICAgIHNlbGYuX3RyYWNrZWQodHAoW3t4OiB5fV0pKQorICAgICAgICBzZWxmLl90cmFja2VkKHRwKG9iaiBmb3Igb2JqIGluIFt4LCB5LCB6XSkpCisgICAgICAgIHNlbGYuX3RyYWNrZWQodHAodHVwbGUoW29ial0pIGZvciBvYmogaW4gW3gsIHksIHpdKSkKKyAgICAgICAgc2VsZi5fdHJhY2tlZCh0dXBsZSh0cChbb2JqXSkgZm9yIG9iaiBpbiBbeCwgeSwgel0pKQorCisgICAgQHRlc3Rfc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF90cmFja19keW5hbWljKHNlbGYpOgorICAgICAgICAjIFRlc3QgR0Mtb3B0aW1pemF0aW9uIG9mIGR5bmFtaWNhbGx5IGNvbnN0cnVjdGVkIHR1cGxlcy4KKyAgICAgICAgc2VsZi5jaGVja190cmFja19keW5hbWljKHR1cGxlLCBGYWxzZSkKKworICAgIEB0ZXN0X3N1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfdHJhY2tfc3VidHlwZXMoc2VsZik6CisgICAgICAgICMgVHVwbGUgc3VidHlwZXMgbXVzdCBhbHdheXMgYmUgdHJhY2tlZAorICAgICAgICBjbGFzcyBNeVR1cGxlKHR1cGxlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5jaGVja190cmFja19keW5hbWljKE15VHVwbGUsIFRydWUpCisKKyAgICBAdGVzdF9zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2J1Zzc0NjYoc2VsZik6CisgICAgICAgICMgVHJ5aW5nIHRvIHVudHJhY2sgYW4gdW5maW5pc2hlZCB0dXBsZSBjb3VsZCBjcmFzaCBQeXRob24KKyAgICAgICAgc2VsZi5fbm90X3RyYWNrZWQodHVwbGUoZ2MuY29sbGVjdCgpIGZvciBpIGluIHJhbmdlKDEwMSkpKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUdXBsZVRlc3QpCisKK2lmIF9fbmFtZV9fPT0iX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90eXBlY2hlY2tzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdHlwZWNoZWNrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2YwMTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdHlwZWNoZWNrcy5weQpAQCAtMCwwICsxLDkzIEBACisiIiJVbml0IHRlc3RzIGZvciBfX2luc3RhbmNlY2hlY2tfXyBhbmQgX19zdWJjbGFzc2NoZWNrX18uIiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworCitjbGFzcyBBQkModHlwZSk6CisKKyAgICBkZWYgX19pbnN0YW5jZWNoZWNrX18oY2xzLCBpbnN0KToKKyAgICAgICAgIiIiSW1wbGVtZW50IGlzaW5zdGFuY2UoaW5zdCwgY2xzKS4iIiIKKyAgICAgICAgcmV0dXJuIGFueShjbHMuX19zdWJjbGFzc2NoZWNrX18oYykKKyAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiBzZXQoW3R5cGUoaW5zdCksIGluc3QuX19jbGFzc19fXSkpCisKKyAgICBkZWYgX19zdWJjbGFzc2NoZWNrX18oY2xzLCBzdWIpOgorICAgICAgICAiIiJJbXBsZW1lbnQgaXNzdWJjbGFzcyhzdWIsIGNscykuIiIiCisgICAgICAgIGNhbmRpZGF0ZXMgPSBjbHMuX19kaWN0X18uZ2V0KCJfX3N1YmNsYXNzX18iLCBzZXQoKSkgfCBzZXQoW2Nsc10pCisgICAgICAgIHJldHVybiBhbnkoYyBpbiBjYW5kaWRhdGVzIGZvciBjIGluIHN1Yi5tcm8oKSkKKworCitjbGFzcyBJbnRlZ2VyOgorCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQworCisgICAgX19zdWJjbGFzc19fID0gc2V0KFtpbnRdKQorCisKK2NsYXNzIFN1YkludChJbnRlZ2VyKToKKworICAgIHBhc3MKKworCitjbGFzcyBUeXBlQ2hlY2tzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdElzU3ViY2xhc3NJbnRlcm5hbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJbnRlZ2VyLl9fc3ViY2xhc3NjaGVja19fKGludCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSW50ZWdlci5fX3N1YmNsYXNzY2hlY2tfXyhmbG9hdCksIEZhbHNlKQorCisgICAgZGVmIHRlc3RJc1N1YmNsYXNzQnVpbHRpbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKGludCwgSW50ZWdlciksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNzdWJjbGFzcyhpbnQsIChJbnRlZ2VyLCkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3MoZmxvYXQsIEludGVnZXIpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKGZsb2F0LCAoSW50ZWdlciwpKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdElzSW5zdGFuY2VCdWlsdGluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoNDIsIEludGVnZXIpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoNDIsIChJbnRlZ2VyLCkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoMy4xNCwgSW50ZWdlciksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoMy4xNCwgKEludGVnZXIsKSksIEZhbHNlKQorCisgICAgZGVmIHRlc3RJc0luc3RhbmNlQWN0dWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoSW50ZWdlcigpLCBJbnRlZ2VyKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKEludGVnZXIoKSwgKEludGVnZXIsKSksIFRydWUpCisKKyAgICBkZWYgdGVzdElzU3ViY2xhc3NBY3R1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNzdWJjbGFzcyhJbnRlZ2VyLCBJbnRlZ2VyKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKEludGVnZXIsIChJbnRlZ2VyLCkpLCBUcnVlKQorCisgICAgZGVmIHRlc3RTdWJjbGFzc0JlaGF2aW9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3MoU3ViSW50LCBJbnRlZ2VyKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKFN1YkludCwgKEludGVnZXIsKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNzdWJjbGFzcyhTdWJJbnQsIFN1YkludCksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNzdWJjbGFzcyhTdWJJbnQsIChTdWJJbnQsKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNzdWJjbGFzcyhJbnRlZ2VyLCBTdWJJbnQpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKEludGVnZXIsIChTdWJJbnQsKSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzc3ViY2xhc3MoaW50LCBTdWJJbnQpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc3N1YmNsYXNzKGludCwgKFN1YkludCwpKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShTdWJJbnQoKSwgSW50ZWdlciksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShTdWJJbnQoKSwgKEludGVnZXIsKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShTdWJJbnQoKSwgU3ViSW50KSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKFN1YkludCgpLCAoU3ViSW50LCkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoNDIsIFN1YkludCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoNDIsIChTdWJJbnQsKSksIEZhbHNlKQorCisgICAgZGVmIHRlc3Rfb2xkc3R5bGUoc2VsZik6CisgICAgICAgICMgVGhlc2Ugc2hvdWxkIGp1c3QgYmUgaWdub3JlZC4KKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIGRlZiBfX2luc3RhbmNlY2hlY2tfXyhzZWxmLCBpbnN0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZGVmIF9fc3ViY2xhc3NjaGVja19fKHNlbGYsIGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgY2xhc3MgU3ViKFgpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSgzLCBYKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoWCgpLCBYKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoaW50LCBYKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoU3ViLCBYKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUeXBlQ2hlY2tzVGVzdCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdHlwZXMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90eXBlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGY2ZDJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdHlwZXMucHkKQEAgLTAsMCArMSw3NTYgQEAKKyMgUHl0aG9uIHRlc3Qgc2V0IC0tIHBhcnQgNiwgYnVpbHQtaW4gdHlwZXMKKworZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBoYXZlX3VuaWNvZGUsIHJ1bl93aXRoX2xvY2FsZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfcHkza193YXJuaW5ncworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgbG9jYWxlCisKK2NsYXNzIFR5cGVzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdHJ1dGhfdmFsdWVzKHNlbGYpOgorICAgICAgICBpZiBOb25lOiBzZWxmLmZhaWwoJ05vbmUgaXMgdHJ1ZSBpbnN0ZWFkIG9mIGZhbHNlJykKKyAgICAgICAgaWYgMDogc2VsZi5mYWlsKCcwIGlzIHRydWUgaW5zdGVhZCBvZiBmYWxzZScpCisgICAgICAgIGlmIDBMOiBzZWxmLmZhaWwoJzBMIGlzIHRydWUgaW5zdGVhZCBvZiBmYWxzZScpCisgICAgICAgIGlmIDAuMDogc2VsZi5mYWlsKCcwLjAgaXMgdHJ1ZSBpbnN0ZWFkIG9mIGZhbHNlJykKKyAgICAgICAgaWYgJyc6IHNlbGYuZmFpbCgnXCdcJyBpcyB0cnVlIGluc3RlYWQgb2YgZmFsc2UnKQorICAgICAgICBpZiBub3QgMTogc2VsZi5mYWlsKCcxIGlzIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZScpCisgICAgICAgIGlmIG5vdCAxTDogc2VsZi5mYWlsKCcxTCBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQorICAgICAgICBpZiBub3QgMS4wOiBzZWxmLmZhaWwoJzEuMCBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQorICAgICAgICBpZiBub3QgJ3gnOiBzZWxmLmZhaWwoJ1wneFwnIGlzIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZScpCisgICAgICAgIGlmIG5vdCB7J3gnOiAxfTogc2VsZi5mYWlsKCd7XCd4XCc6IDF9IGlzIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZScpCisgICAgICAgIGRlZiBmKCk6IHBhc3MKKyAgICAgICAgY2xhc3MgQzogcGFzcworICAgICAgICB4ID0gQygpCisgICAgICAgIGlmIG5vdCBmOiBzZWxmLmZhaWwoJ2YgaXMgZmFsc2UgaW5zdGVhZCBvZiB0cnVlJykKKyAgICAgICAgaWYgbm90IEM6IHNlbGYuZmFpbCgnQyBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQorICAgICAgICBpZiBub3Qgc3lzOiBzZWxmLmZhaWwoJ3N5cyBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQorICAgICAgICBpZiBub3QgeDogc2VsZi5mYWlsKCd4IGlzIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZScpCisKKyAgICBkZWYgdGVzdF9ib29sZWFuX29wcyhzZWxmKToKKyAgICAgICAgaWYgMCBvciAwOiBzZWxmLmZhaWwoJzAgb3IgMCBpcyB0cnVlIGluc3RlYWQgb2YgZmFsc2UnKQorICAgICAgICBpZiAxIGFuZCAxOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnMSBhbmQgMSBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQorICAgICAgICBpZiBub3QgMTogc2VsZi5mYWlsKCdub3QgMSBpcyB0cnVlIGluc3RlYWQgb2YgZmFsc2UnKQorCisgICAgZGVmIHRlc3RfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIGlmIDAgPCAxIDw9IDEgPT0gMSA+PSAxID4gMCAhPSAxOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnaW50IGNvbXBhcmlzb25zIGZhaWxlZCcpCisgICAgICAgIGlmIDBMIDwgMUwgPD0gMUwgPT0gMUwgPj0gMUwgPiAwTCAhPSAxTDogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2xvbmcgaW50IGNvbXBhcmlzb25zIGZhaWxlZCcpCisgICAgICAgIGlmIDAuMCA8IDEuMCA8PSAxLjAgPT0gMS4wID49IDEuMCA+IDAuMCAhPSAxLjA6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCdmbG9hdCBjb21wYXJpc29ucyBmYWlsZWQnKQorICAgICAgICBpZiAnJyA8ICdhJyA8PSAnYScgPT0gJ2EnIDwgJ2FiYycgPCAnYWJkJyA8ICdiJzogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ3N0cmluZyBjb21wYXJpc29ucyBmYWlsZWQnKQorICAgICAgICBpZiBOb25lIGlzIE5vbmU6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCdpZGVudGl0eSB0ZXN0IGZhaWxlZCcpCisKKyAgICBkZWYgdGVzdF9mbG9hdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgJzVcMCcpCisKKyAgICBkZWYgdGVzdF96ZXJvX2RpdmlzaW9uKHNlbGYpOgorICAgICAgICB0cnk6IDUuMCAvIDAuMAorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCI1LjAgLyAwLjAgZGlkbid0IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yIikKKworICAgICAgICB0cnk6IDUuMCAvLyAwLjAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiNS4wIC8vIDAuMCBkaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiKQorCisgICAgICAgIHRyeTogNS4wICUgMC4wCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoIjUuMCAlIDAuMCBkaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiKQorCisgICAgICAgIHRyeTogNSAvIDBMCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoIjUgLyAwTCBkaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiKQorCisgICAgICAgIHRyeTogNSAvLyAwTAorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCI1IC8vIDBMIGRpZG4ndCByYWlzZSBaZXJvRGl2aXNpb25FcnJvciIpCisKKyAgICAgICAgdHJ5OiA1ICUgMEwKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiNSAlIDBMIGRpZG4ndCByYWlzZSBaZXJvRGl2aXNpb25FcnJvciIpCisKKyAgICBkZWYgdGVzdF9udW1lcmljX3R5cGVzKHNlbGYpOgorICAgICAgICBpZiAwICE9IDBMIG9yIDAgIT0gMC4wIG9yIDBMICE9IDAuMDogc2VsZi5mYWlsKCdtaXhlZCBjb21wYXJpc29ucycpCisgICAgICAgIGlmIDEgIT0gMUwgb3IgMSAhPSAxLjAgb3IgMUwgIT0gMS4wOiBzZWxmLmZhaWwoJ21peGVkIGNvbXBhcmlzb25zJykKKyAgICAgICAgaWYgLTEgIT0gLTFMIG9yIC0xICE9IC0xLjAgb3IgLTFMICE9IC0xLjA6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2ludC9sb25nL2Zsb2F0IHZhbHVlIG5vdCBlcXVhbCcpCisgICAgICAgICMgY2FsbGluZyBidWlsdC1pbiB0eXBlcyB3aXRob3V0IGFyZ3VtZW50IG11c3QgcmV0dXJuIDAKKyAgICAgICAgaWYgaW50KCkgIT0gMDogc2VsZi5mYWlsKCdpbnQoKSBkb2VzIG5vdCByZXR1cm4gMCcpCisgICAgICAgIGlmIGxvbmcoKSAhPSAwTDogc2VsZi5mYWlsKCdsb25nKCkgZG9lcyBub3QgcmV0dXJuIDBMJykKKyAgICAgICAgaWYgZmxvYXQoKSAhPSAwLjA6IHNlbGYuZmFpbCgnZmxvYXQoKSBkb2VzIG5vdCByZXR1cm4gMC4wJykKKyAgICAgICAgaWYgaW50KDEuOSkgPT0gMSA9PSBpbnQoMS4xKSBhbmQgaW50KC0xLjEpID09IC0xID09IGludCgtMS45KTogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2ludCgpIGRvZXMgbm90IHJvdW5kIHByb3Blcmx5JykKKyAgICAgICAgaWYgbG9uZygxLjkpID09IDFMID09IGxvbmcoMS4xKSBhbmQgbG9uZygtMS4xKSA9PSAtMUwgPT0gbG9uZygtMS45KTogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2xvbmcoKSBkb2VzIG5vdCByb3VuZCBwcm9wZXJseScpCisgICAgICAgIGlmIGZsb2F0KDEpID09IDEuMCBhbmQgZmxvYXQoLTEpID09IC0xLjAgYW5kIGZsb2F0KDApID09IDAuMDogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2Zsb2F0KCkgZG9lcyBub3Qgd29yayBwcm9wZXJseScpCisKKyAgICBkZWYgdGVzdF9mbG9hdF90b19zdHJpbmcoc2VsZik6CisgICAgICAgIGRlZiB0ZXN0KGYsIHJlc3VsdCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuX19mb3JtYXRfXygnZScpLCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclZScgJSBmLCByZXN1bHQpCisKKyAgICAgICAgIyB0ZXN0IGFsbCAyIGRpZ2l0IGV4cG9uZW50cywgYm90aCB3aXRoIF9fZm9ybWF0X18gYW5kIHdpdGgKKyAgICAgICAgIyAgJyUnIGZvcm1hdHRpbmcKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoLTk5LCAxMDApOgorICAgICAgICAgICAgdGVzdChmbG9hdCgnMS41ZScrc3RyKGkpKSwgJzEuNTAwMDAwZXswOiswM2R9Jy5mb3JtYXQoaSkpCisKKyAgICAgICAgIyB0ZXN0IHNvbWUgMyBkaWdpdCBleHBvbmVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLjVlMTAwLl9fZm9ybWF0X18oJ2UnKSwgJzEuNTAwMDAwZSsxMDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclZScgJSAxLjVlMTAwLCAnMS41MDAwMDBlKzEwMCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLjVlMTAxLl9fZm9ybWF0X18oJ2UnKSwgJzEuNTAwMDAwZSsxMDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclZScgJSAxLjVlMTAxLCAnMS41MDAwMDBlKzEwMScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLjVlLTEwMC5fX2Zvcm1hdF9fKCdlJyksICcxLjUwMDAwMGUtMTAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJWUnICUgMS41ZS0xMDAsICcxLjUwMDAwMGUtMTAwJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEuNWUtMTAxLl9fZm9ybWF0X18oJ2UnKSwgJzEuNTAwMDAwZS0xMDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclZScgJSAxLjVlLTEwMSwgJzEuNTAwMDAwZS0xMDEnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyVnJyAlIDEuMCwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclI2cnICUgMS4wLCAnMS4wMDAwMCcpCisKKyAgICBkZWYgdGVzdF9ub3JtYWxfaW50ZWdlcnMoc2VsZik6CisgICAgICAgICMgRW5zdXJlIHRoZSBmaXJzdCAyNTYgaW50ZWdlcnMgYXJlIHNoYXJlZAorICAgICAgICBhID0gMjU2CisgICAgICAgIGIgPSAxMjgqMgorICAgICAgICBpZiBhIGlzIG5vdCBiOiBzZWxmLmZhaWwoJzI1NiBpcyBub3Qgc2hhcmVkJykKKyAgICAgICAgaWYgMTIgKyAyNCAhPSAzNjogc2VsZi5mYWlsKCdpbnQgb3AnKQorICAgICAgICBpZiAxMiArICgtMjQpICE9IC0xMjogc2VsZi5mYWlsKCdpbnQgb3AnKQorICAgICAgICBpZiAoLTEyKSArIDI0ICE9IDEyOiBzZWxmLmZhaWwoJ2ludCBvcCcpCisgICAgICAgIGlmICgtMTIpICsgKC0yNCkgIT0gLTM2OiBzZWxmLmZhaWwoJ2ludCBvcCcpCisgICAgICAgIGlmIG5vdCAxMiA8IDI0OiBzZWxmLmZhaWwoJ2ludCBvcCcpCisgICAgICAgIGlmIG5vdCAtMjQgPCAtMTI6IHNlbGYuZmFpbCgnaW50IG9wJykKKyAgICAgICAgIyBUZXN0IGZvciBhIHBhcnRpY3VsYXIgYnVnIGluIGludGVnZXIgbXVsdGlwbHkKKyAgICAgICAgeHNpemUsIHlzaXplLCB6c2l6ZSA9IDIzOCwgMzU2LCA0CisgICAgICAgIGlmIG5vdCAoeHNpemUqeXNpemUqenNpemUgPT0genNpemUqeHNpemUqeXNpemUgPT0gMzM4OTEyKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnaW50IG11bCBjb21tdXRhdGl2aXR5JykKKyAgICAgICAgIyBBbmQgYW5vdGhlci4KKyAgICAgICAgbSA9IC1zeXMubWF4aW50IC0gMQorICAgICAgICBmb3IgZGl2aXNvciBpbiAxLCAyLCA0LCA4LCAxNiwgMzI6CisgICAgICAgICAgICBqID0gbSAvLyBkaXZpc29yCisgICAgICAgICAgICBwcm9kID0gZGl2aXNvciAqIGoKKyAgICAgICAgICAgIGlmIHByb2QgIT0gbToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVyICogJXIgPT0gJXIgIT0gJXIiICUgKGRpdmlzb3IsIGosIHByb2QsIG0pKQorICAgICAgICAgICAgaWYgdHlwZShwcm9kKSBpcyBub3QgaW50OgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgdHlwZShwcm9kKSB0byBiZSBpbnQsIG5vdCAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKHByb2QpKQorICAgICAgICAjIENoZWNrIGZvciBleHBlY3RlZCAqIG92ZXJmbG93IHRvIGxvbmcuCisgICAgICAgIGZvciBkaXZpc29yIGluIDEsIDIsIDQsIDgsIDE2LCAzMjoKKyAgICAgICAgICAgIGogPSBtIC8vIGRpdmlzb3IgLSAxCisgICAgICAgICAgICBwcm9kID0gZGl2aXNvciAqIGoKKyAgICAgICAgICAgIGlmIHR5cGUocHJvZCkgaXMgbm90IGxvbmc6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCB0eXBlKCVyKSB0byBiZSBsb25nLCBub3QgJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2QsIHR5cGUocHJvZCkpKQorICAgICAgICAjIENoZWNrIGZvciBleHBlY3RlZCAqIG92ZXJmbG93IHRvIGxvbmcuCisgICAgICAgIG0gPSBzeXMubWF4aW50CisgICAgICAgIGZvciBkaXZpc29yIGluIDEsIDIsIDQsIDgsIDE2LCAzMjoKKyAgICAgICAgICAgIGogPSBtIC8vIGRpdmlzb3IgKyAxCisgICAgICAgICAgICBwcm9kID0gZGl2aXNvciAqIGoKKyAgICAgICAgICAgIGlmIHR5cGUocHJvZCkgaXMgbm90IGxvbmc6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCB0eXBlKCVyKSB0byBiZSBsb25nLCBub3QgJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2QsIHR5cGUocHJvZCkpKQorCisgICAgZGVmIHRlc3RfbG9uZ19pbnRlZ2VycyhzZWxmKToKKyAgICAgICAgaWYgMTJMICsgMjRMICE9IDM2TDogc2VsZi5mYWlsKCdsb25nIG9wJykKKyAgICAgICAgaWYgMTJMICsgKC0yNEwpICE9IC0xMkw6IHNlbGYuZmFpbCgnbG9uZyBvcCcpCisgICAgICAgIGlmICgtMTJMKSArIDI0TCAhPSAxMkw6IHNlbGYuZmFpbCgnbG9uZyBvcCcpCisgICAgICAgIGlmICgtMTJMKSArICgtMjRMKSAhPSAtMzZMOiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQorICAgICAgICBpZiBub3QgMTJMIDwgMjRMOiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQorICAgICAgICBpZiBub3QgLTI0TCA8IC0xMkw6IHNlbGYuZmFpbCgnbG9uZyBvcCcpCisgICAgICAgIHggPSBzeXMubWF4aW50CisgICAgICAgIGlmIGludChsb25nKHgpKSAhPSB4OiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQorICAgICAgICB0cnk6IHkgPSBpbnQobG9uZyh4KSsxTCkKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6IHNlbGYuZmFpbCgnbG9uZyBvcCcpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHksIGxvbmcpOiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQorICAgICAgICB4ID0gLXgKKyAgICAgICAgaWYgaW50KGxvbmcoeCkpICE9IHg6IHNlbGYuZmFpbCgnbG9uZyBvcCcpCisgICAgICAgIHggPSB4LTEKKyAgICAgICAgaWYgaW50KGxvbmcoeCkpICE9IHg6IHNlbGYuZmFpbCgnbG9uZyBvcCcpCisgICAgICAgIHRyeTogeSA9IGludChsb25nKHgpLTFMKQorICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjogc2VsZi5mYWlsKCdsb25nIG9wJykKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoeSwgbG9uZyk6IHNlbGYuZmFpbCgnbG9uZyBvcCcpCisKKyAgICAgICAgdHJ5OiA1IDw8IC01CisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnaW50IG5lZ2F0aXZlIHNoaWZ0IDw8JykKKworICAgICAgICB0cnk6IDVMIDw8IC01TAorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2xvbmcgbmVnYXRpdmUgc2hpZnQgPDwnKQorCisgICAgICAgIHRyeTogNSA+PiAtNQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2ludCBuZWdhdGl2ZSBzaGlmdCA+PicpCisKKyAgICAgICAgdHJ5OiA1TCA+PiAtNUwKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCdsb25nIG5lZ2F0aXZlIHNoaWZ0ID4+JykKKworICAgIGRlZiB0ZXN0X2Zsb2F0cyhzZWxmKToKKyAgICAgICAgaWYgMTIuMCArIDI0LjAgIT0gMzYuMDogc2VsZi5mYWlsKCdmbG9hdCBvcCcpCisgICAgICAgIGlmIDEyLjAgKyAoLTI0LjApICE9IC0xMi4wOiBzZWxmLmZhaWwoJ2Zsb2F0IG9wJykKKyAgICAgICAgaWYgKC0xMi4wKSArIDI0LjAgIT0gMTIuMDogc2VsZi5mYWlsKCdmbG9hdCBvcCcpCisgICAgICAgIGlmICgtMTIuMCkgKyAoLTI0LjApICE9IC0zNi4wOiBzZWxmLmZhaWwoJ2Zsb2F0IG9wJykKKyAgICAgICAgaWYgbm90IDEyLjAgPCAyNC4wOiBzZWxmLmZhaWwoJ2Zsb2F0IG9wJykKKyAgICAgICAgaWYgbm90IC0yNC4wIDwgLTEyLjA6IHNlbGYuZmFpbCgnZmxvYXQgb3AnKQorCisgICAgZGVmIHRlc3Rfc3RyaW5ncyhzZWxmKToKKyAgICAgICAgaWYgbGVuKCcnKSAhPSAwOiBzZWxmLmZhaWwoJ2xlbihcJ1wnKScpCisgICAgICAgIGlmIGxlbignYScpICE9IDE6IHNlbGYuZmFpbCgnbGVuKFwnYVwnKScpCisgICAgICAgIGlmIGxlbignYWJjZGVmJykgIT0gNjogc2VsZi5mYWlsKCdsZW4oXCdhYmNkZWZcJyknKQorICAgICAgICBpZiAneHl6JyArICdhYmNkZScgIT0gJ3h5emFiY2RlJzogc2VsZi5mYWlsKCdzdHJpbmcgY29uY2F0ZW5hdGlvbicpCisgICAgICAgIGlmICd4eXonKjMgIT0gJ3h5enh5enh5eic6IHNlbGYuZmFpbCgnc3RyaW5nIHJlcGV0aXRpb24gKjMnKQorICAgICAgICBpZiAwKidhYmNkZScgIT0gJyc6IHNlbGYuZmFpbCgnc3RyaW5nIHJlcGV0aXRpb24gMConKQorICAgICAgICBpZiBtaW4oJ2FiYycpICE9ICdhJyBvciBtYXgoJ2FiYycpICE9ICdjJzogc2VsZi5mYWlsKCdtaW4vbWF4IHN0cmluZycpCisgICAgICAgIGlmICdhJyBpbiAnYWJjJyBhbmQgJ2InIGluICdhYmMnIGFuZCAnYycgaW4gJ2FiYycgYW5kICdkJyBub3QgaW4gJ2FiYyc6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCdpbi9ub3QgaW4gc3RyaW5nJykKKyAgICAgICAgeCA9ICd4JyoxMDMKKyAgICAgICAgaWYgJyVzIScleCAhPSB4KychJzogc2VsZi5mYWlsKCduYXN0eSBzdHJpbmcgZm9ybWF0dGluZyBidWcnKQorCisgICAgICAgICNleHRlbmRlZCBzbGljZXMgZm9yIHN0cmluZ3MKKyAgICAgICAgYSA9ICcwMTIzNDU2Nzg5JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOjpdLCBhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOjoyXSwgJzAyNDY4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzE6OjJdLCAnMTM1NzknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOjotMV0sJzk4NzY1NDMyMTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOjotMl0sICc5NzUzMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVszOjotMl0sICczMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVstMTAwOjEwMDpdLCBhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMTAwOi0xMDA6LTFdLCBhWzo6LTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbLTEwMEw6MTAwTDoyTF0sICcwMjQ2OCcpCisKKyAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgYSA9IHVuaWNvZGUoJzAxMjM0NTY3ODknLCAnYXNjaWknKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzo6XSwgYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYVs6OjJdLCB1bmljb2RlKCcwMjQ2OCcsICdhc2NpaScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzE6OjJdLCB1bmljb2RlKCcxMzU3OScsICdhc2NpaScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWzo6LTFdLCB1bmljb2RlKCc5ODc2NTQzMjEwJywgJ2FzY2lpJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbOjotMl0sIHVuaWNvZGUoJzk3NTMxJywgJ2FzY2lpJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMzo6LTJdLCB1bmljb2RlKCczMScsICdhc2NpaScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWy0xMDA6MTAwOl0sIGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFbMTAwOi0xMDA6LTFdLCBhWzo6LTFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhWy0xMDBMOjEwMEw6MkxdLCB1bmljb2RlKCcwMjQ2OCcsICdhc2NpaScpKQorCisKKyAgICBkZWYgdGVzdF90eXBlX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHR5cGUsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHlwZSwgMSwgMiwgMywgNCkKKworICAgIGRlZiB0ZXN0X2J1ZmZlcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmZlciwgJ2FzZGYnLCAtMSkKKyAgICAgICAgY21wKGJ1ZmZlcigiYWJjIiksIGJ1ZmZlcigiZGVmIikpICMgdXNlZCB0byByYWlzZSBhIHdhcm5pbmc6IHRwX2NvbXBhcmUgZGlkbid0IHJldHVybiAtMSwgMCwgb3IgMQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnVmZmVyLCBOb25lKQorCisgICAgICAgIGEgPSBidWZmZXIoJ2FzZGYnKQorICAgICAgICBoYXNoKGEpCisgICAgICAgIGIgPSBhICogNQorICAgICAgICBpZiBhID09IGI6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2J1ZmZlcnMgc2hvdWxkIG5vdCBiZSBlcXVhbCcpCisgICAgICAgIGlmIHN0cihiKSAhPSAoJ2FzZGYnICogNSk6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ3JlcGVhdGVkIGJ1ZmZlciBoYXMgd3JvbmcgY29udGVudCcpCisgICAgICAgIGlmIHN0cihhICogMCkgIT0gJyc6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ3JlcGVhdGVkIGJ1ZmZlciB6ZXJvIHRpbWVzIGhhcyB3cm9uZyBjb250ZW50JykKKyAgICAgICAgaWYgc3RyKGEgKyBidWZmZXIoJ2RlZicpKSAhPSAnYXNkZmRlZic6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2NvbmNhdGVuYXRpb24gb2YgYnVmZmVycyB5aWVsZHMgd3JvbmcgY29udGVudCcpCisgICAgICAgIGlmIHN0cihidWZmZXIoYSkpICE9ICdhc2RmJzoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnY29tcG9zaW5nIGJ1ZmZlcnMgZmFpbGVkJykKKyAgICAgICAgaWYgc3RyKGJ1ZmZlcihhLCAyKSkgIT0gJ2RmJzoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnc3BlY2lmeWluZyBidWZmZXIgb2Zmc2V0IGZhaWxlZCcpCisgICAgICAgIGlmIHN0cihidWZmZXIoYSwgMCwgMikpICE9ICdhcyc6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ3NwZWNpZnlpbmcgYnVmZmVyIHNpemUgZmFpbGVkJykKKyAgICAgICAgaWYgc3RyKGJ1ZmZlcihhLCAxLCAyKSkgIT0gJ3NkJzoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnc3BlY2lmeWluZyBidWZmZXIgb2Zmc2V0IGFuZCBzaXplIGZhaWxlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmZlciwgYnVmZmVyKCdhc2RmJywgMSksIC0xKQorICAgICAgICBpZiBzdHIoYnVmZmVyKGJ1ZmZlcignYXNkZicsIDAsIDIpLCAwKSkgIT0gJ2FzJzoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnY29tcG9zaW5nIGxlbmd0aC1zcGVjaWZpZWQgYnVmZmVyIGZhaWxlZCcpCisgICAgICAgIGlmIHN0cihidWZmZXIoYnVmZmVyKCdhc2RmJywgMCwgMiksIDAsIDUwMDApKSAhPSAnYXMnOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdjb21wb3NpbmcgbGVuZ3RoLXNwZWNpZmllZCBidWZmZXIgZmFpbGVkJykKKyAgICAgICAgaWYgc3RyKGJ1ZmZlcihidWZmZXIoJ2FzZGYnLCAwLCAyKSwgMCwgLTEpKSAhPSAnYXMnOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdjb21wb3NpbmcgbGVuZ3RoLXNwZWNpZmllZCBidWZmZXIgZmFpbGVkJykKKyAgICAgICAgaWYgc3RyKGJ1ZmZlcihidWZmZXIoJ2FzZGYnLCAwLCAyKSwgMSwgMikpICE9ICdzJzoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnY29tcG9zaW5nIGxlbmd0aC1zcGVjaWZpZWQgYnVmZmVyIGZhaWxlZCcpCisKKyAgICAgICAgdHJ5OiBhWzFdID0gJ2cnCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCJidWZmZXIgYXNzaWdubWVudCBzaG91bGQgcmFpc2UgVHlwZUVycm9yIikKKworICAgICAgICB0cnk6IGFbMDoxXSA9ICdnJworICAgICAgICBleGNlcHQgVHlwZUVycm9yOiBwYXNzCisgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiYnVmZmVyIHNsaWNlIGFzc2lnbm1lbnQgc2hvdWxkIHJhaXNlIFR5cGVFcnJvciIpCisKKyAgICAgICAgIyBhcnJheS5hcnJheSgpIHJldHVybnMgYW4gb2JqZWN0IHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGEgY2hhciBidWZmZXIsCisgICAgICAgICMgc29tZXRoaW5nIHdoaWNoIGludCgpIHVzZXMgZm9yIGNvbnZlcnNpb24uCisgICAgICAgIGltcG9ydCBhcnJheQorICAgICAgICB0cnk6IGludChidWZmZXIoYXJyYXkuYXJyYXkoJ2MnKSkpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6IHBhc3MKKyAgICAgICAgZWxzZTogc2VsZi5mYWlsKCJjaGFyIGJ1ZmZlciAoYXQgQyBsZXZlbCkgbm90IHdvcmtpbmciKQorCisgICAgZGVmIHRlc3RfaW50X19mb3JtYXRfXyhzZWxmKToKKyAgICAgICAgZGVmIHRlc3QoaSwgZm9ybWF0X3NwZWMsIHJlc3VsdCk6CisgICAgICAgICAgICAjIGp1c3QgbWFrZSBzdXJlIEknbSBub3QgYWNjaWRlbnRhbGx5IGNoZWNraW5nIGxvbmdzCisgICAgICAgICAgICBhc3NlcnQgdHlwZShpKSA9PSBpbnQKKyAgICAgICAgICAgIGFzc2VydCB0eXBlKGZvcm1hdF9zcGVjKSA9PSBzdHIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaS5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKSwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLl9fZm9ybWF0X18odW5pY29kZShmb3JtYXRfc3BlYykpLCByZXN1bHQpCisKKyAgICAgICAgdGVzdCgxMjM0NTY3ODksICdkJywgJzEyMzQ1Njc4OScpCisgICAgICAgIHRlc3QoMTIzNDU2Nzg5LCAnZCcsICcxMjM0NTY3ODknKQorCisgICAgICAgIHRlc3QoMSwgJ2MnLCAnXDAxJykKKworICAgICAgICAjIHNpZ24gYW5kIGFsaWduaW5nIGFyZSBpbnRlcmRlcGVuZGVudAorICAgICAgICB0ZXN0KDEsICItIiwgJzEnKQorICAgICAgICB0ZXN0KC0xLCAiLSIsICctMScpCisgICAgICAgIHRlc3QoMSwgIi0zIiwgJyAgMScpCisgICAgICAgIHRlc3QoLTEsICItMyIsICcgLTEnKQorICAgICAgICB0ZXN0KDEsICIrMyIsICcgKzEnKQorICAgICAgICB0ZXN0KC0xLCAiKzMiLCAnIC0xJykKKyAgICAgICAgdGVzdCgxLCAiIDMiLCAnICAxJykKKyAgICAgICAgdGVzdCgtMSwgIiAzIiwgJyAtMScpCisgICAgICAgIHRlc3QoMSwgIiAiLCAnIDEnKQorICAgICAgICB0ZXN0KC0xLCAiICIsICctMScpCisKKyAgICAgICAgIyBoZXgKKyAgICAgICAgdGVzdCgzLCAieCIsICIzIikKKyAgICAgICAgdGVzdCgzLCAiWCIsICIzIikKKyAgICAgICAgdGVzdCgxMjM0LCAieCIsICI0ZDIiKQorICAgICAgICB0ZXN0KC0xMjM0LCAieCIsICItNGQyIikKKyAgICAgICAgdGVzdCgxMjM0LCAiOHgiLCAiICAgICA0ZDIiKQorICAgICAgICB0ZXN0KC0xMjM0LCAiOHgiLCAiICAgIC00ZDIiKQorICAgICAgICB0ZXN0KDEyMzQsICJ4IiwgIjRkMiIpCisgICAgICAgIHRlc3QoLTEyMzQsICJ4IiwgIi00ZDIiKQorICAgICAgICB0ZXN0KC0zLCAieCIsICItMyIpCisgICAgICAgIHRlc3QoLTMsICJYIiwgIi0zIikKKyAgICAgICAgdGVzdChpbnQoJ2JlJywgMTYpLCAieCIsICJiZSIpCisgICAgICAgIHRlc3QoaW50KCdiZScsIDE2KSwgIlgiLCAiQkUiKQorICAgICAgICB0ZXN0KC1pbnQoJ2JlJywgMTYpLCAieCIsICItYmUiKQorICAgICAgICB0ZXN0KC1pbnQoJ2JlJywgMTYpLCAiWCIsICItQkUiKQorCisgICAgICAgICMgb2N0YWwKKyAgICAgICAgdGVzdCgzLCAibyIsICIzIikKKyAgICAgICAgdGVzdCgtMywgIm8iLCAiLTMiKQorICAgICAgICB0ZXN0KDY1LCAibyIsICIxMDEiKQorICAgICAgICB0ZXN0KC02NSwgIm8iLCAiLTEwMSIpCisgICAgICAgIHRlc3QoMTIzNCwgIm8iLCAiMjMyMiIpCisgICAgICAgIHRlc3QoLTEyMzQsICJvIiwgIi0yMzIyIikKKyAgICAgICAgdGVzdCgxMjM0LCAiLW8iLCAiMjMyMiIpCisgICAgICAgIHRlc3QoLTEyMzQsICItbyIsICItMjMyMiIpCisgICAgICAgIHRlc3QoMTIzNCwgIiBvIiwgIiAyMzIyIikKKyAgICAgICAgdGVzdCgtMTIzNCwgIiBvIiwgIi0yMzIyIikKKyAgICAgICAgdGVzdCgxMjM0LCAiK28iLCAiKzIzMjIiKQorICAgICAgICB0ZXN0KC0xMjM0LCAiK28iLCAiLTIzMjIiKQorCisgICAgICAgICMgYmluYXJ5CisgICAgICAgIHRlc3QoMywgImIiLCAiMTEiKQorICAgICAgICB0ZXN0KC0zLCAiYiIsICItMTEiKQorICAgICAgICB0ZXN0KDEyMzQsICJiIiwgIjEwMDExMDEwMDEwIikKKyAgICAgICAgdGVzdCgtMTIzNCwgImIiLCAiLTEwMDExMDEwMDEwIikKKyAgICAgICAgdGVzdCgxMjM0LCAiLWIiLCAiMTAwMTEwMTAwMTAiKQorICAgICAgICB0ZXN0KC0xMjM0LCAiLWIiLCAiLTEwMDExMDEwMDEwIikKKyAgICAgICAgdGVzdCgxMjM0LCAiIGIiLCAiIDEwMDExMDEwMDEwIikKKyAgICAgICAgdGVzdCgtMTIzNCwgIiBiIiwgIi0xMDAxMTAxMDAxMCIpCisgICAgICAgIHRlc3QoMTIzNCwgIitiIiwgIisxMDAxMTAxMDAxMCIpCisgICAgICAgIHRlc3QoLTEyMzQsICIrYiIsICItMTAwMTEwMTAwMTAiKQorCisgICAgICAgICMgYWx0ZXJuYXRlICgjKSBmb3JtYXR0aW5nCisgICAgICAgIHRlc3QoMCwgIiNiIiwgJzBiMCcpCisgICAgICAgIHRlc3QoMCwgIi0jYiIsICcwYjAnKQorICAgICAgICB0ZXN0KDEsICItI2IiLCAnMGIxJykKKyAgICAgICAgdGVzdCgtMSwgIi0jYiIsICctMGIxJykKKyAgICAgICAgdGVzdCgtMSwgIi0jNWIiLCAnIC0wYjEnKQorICAgICAgICB0ZXN0KDEsICIrIzViIiwgJyArMGIxJykKKyAgICAgICAgdGVzdCgxMDAsICIrI2IiLCAnKzBiMTEwMDEwMCcpCisgICAgICAgIHRlc3QoMTAwLCAiIzAxMmIiLCAnMGIwMDAxMTAwMTAwJykKKyAgICAgICAgdGVzdCgtMTAwLCAiIzAxMmIiLCAnLTBiMDAxMTAwMTAwJykKKworICAgICAgICB0ZXN0KDAsICIjbyIsICcwbzAnKQorICAgICAgICB0ZXN0KDAsICItI28iLCAnMG8wJykKKyAgICAgICAgdGVzdCgxLCAiLSNvIiwgJzBvMScpCisgICAgICAgIHRlc3QoLTEsICItI28iLCAnLTBvMScpCisgICAgICAgIHRlc3QoLTEsICItIzVvIiwgJyAtMG8xJykKKyAgICAgICAgdGVzdCgxLCAiKyM1byIsICcgKzBvMScpCisgICAgICAgIHRlc3QoMTAwLCAiKyNvIiwgJyswbzE0NCcpCisgICAgICAgIHRlc3QoMTAwLCAiIzAxMm8iLCAnMG8wMDAwMDAwMTQ0JykKKyAgICAgICAgdGVzdCgtMTAwLCAiIzAxMm8iLCAnLTBvMDAwMDAwMTQ0JykKKworICAgICAgICB0ZXN0KDAsICIjeCIsICcweDAnKQorICAgICAgICB0ZXN0KDAsICItI3giLCAnMHgwJykKKyAgICAgICAgdGVzdCgxLCAiLSN4IiwgJzB4MScpCisgICAgICAgIHRlc3QoLTEsICItI3giLCAnLTB4MScpCisgICAgICAgIHRlc3QoLTEsICItIzV4IiwgJyAtMHgxJykKKyAgICAgICAgdGVzdCgxLCAiKyM1eCIsICcgKzB4MScpCisgICAgICAgIHRlc3QoMTAwLCAiKyN4IiwgJysweDY0JykKKyAgICAgICAgdGVzdCgxMDAsICIjMDEyeCIsICcweDAwMDAwMDAwNjQnKQorICAgICAgICB0ZXN0KC0xMDAsICIjMDEyeCIsICctMHgwMDAwMDAwNjQnKQorICAgICAgICB0ZXN0KDEyMzQ1NiwgIiMwMTJ4IiwgJzB4MDAwMDAxZTI0MCcpCisgICAgICAgIHRlc3QoLTEyMzQ1NiwgIiMwMTJ4IiwgJy0weDAwMDAxZTI0MCcpCisKKyAgICAgICAgdGVzdCgwLCAiI1giLCAnMFgwJykKKyAgICAgICAgdGVzdCgwLCAiLSNYIiwgJzBYMCcpCisgICAgICAgIHRlc3QoMSwgIi0jWCIsICcwWDEnKQorICAgICAgICB0ZXN0KC0xLCAiLSNYIiwgJy0wWDEnKQorICAgICAgICB0ZXN0KC0xLCAiLSM1WCIsICcgLTBYMScpCisgICAgICAgIHRlc3QoMSwgIisjNVgiLCAnICswWDEnKQorICAgICAgICB0ZXN0KDEwMCwgIisjWCIsICcrMFg2NCcpCisgICAgICAgIHRlc3QoMTAwLCAiIzAxMlgiLCAnMFgwMDAwMDAwMDY0JykKKyAgICAgICAgdGVzdCgtMTAwLCAiIzAxMlgiLCAnLTBYMDAwMDAwMDY0JykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIjMDEyWCIsICcwWDAwMDAwMUUyNDAnKQorICAgICAgICB0ZXN0KC0xMjM0NTYsICIjMDEyWCIsICctMFgwMDAwMUUyNDAnKQorCisgICAgICAgICMgaXNzdWUgNTc4MiwgY29tbWFzIHdpdGggbm8gc3BlY2lmaWVyIHR5cGUKKyAgICAgICAgdGVzdCgxMjM0LCAnMDEwLCcsICcwMCwwMDEsMjM0JykKKworICAgICAgICAjIG1ha2Ugc3VyZSB0aGVzZSBhcmUgZXJyb3JzCisKKyAgICAgICAgIyBwcmVjaXNpb24gZGlzYWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAzIC5fX2Zvcm1hdF9fLCAiMS4zIikKKyAgICAgICAgIyBzaWduIG5vdCBhbGxvd2VkIHdpdGggJ2MnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIDMgLl9fZm9ybWF0X18sICIrYyIpCisgICAgICAgICMgZm9ybWF0IHNwZWMgbXVzdCBiZSBzdHJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAzIC5fX2Zvcm1hdF9fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIDMgLl9fZm9ybWF0X18sIDApCisKKyAgICAgICAgIyBjYW4ndCBoYXZlICcsJyB3aXRoICdjJworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAzIC5fX2Zvcm1hdF9fLCAiLGMiKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgb25seSBpbnQgYW5kIGZsb2F0IHR5cGUgc3BlY2lmaWVycyB3b3JrCisgICAgICAgIGZvciBmb3JtYXRfc3BlYyBpbiAoW2Nocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ2EnKSwgb3JkKCd6JykrMSldICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnQScpLCBvcmQoJ1onKSsxKV0pOgorICAgICAgICAgICAgaWYgbm90IGZvcm1hdF9zcGVjIGluICdiY2RveFhlRWZGZ0duJSc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgMCAuX19mb3JtYXRfXywgZm9ybWF0X3NwZWMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgMSAuX19mb3JtYXRfXywgZm9ybWF0X3NwZWMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgKC0xKSAuX19mb3JtYXRfXywgZm9ybWF0X3NwZWMpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCBmbG9hdCB0eXBlIHNwZWNpZmllcnMgd29yazsgZm9ybWF0IGNvbnZlcnRzCisgICAgICAgICMgIHRoZSBpbnQgdG8gYSBmbG9hdAorICAgICAgICBmb3IgZm9ybWF0X3NwZWMgaW4gJ2VFZkZnRyUnOgorICAgICAgICAgICAgZm9yIHZhbHVlIGluIFswLCAxLCAtMSwgMTAwLCAtMTAwLCAxMjM0NTY3ODkwLCAtMTIzNDU2Nzg5MF06CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZS5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KHZhbHVlKS5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKSkKKworICAgICAgICAjIElzc3VlIDY5MDIKKyAgICAgICAgdGVzdCgxMjM0NTYsICIwPDIwIiwgJzEyMzQ1NjAwMDAwMDAwMDAwMDAwJykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIxPDIwIiwgJzEyMzQ1NjExMTExMTExMTExMTExJykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIqPDIwIiwgJzEyMzQ1NioqKioqKioqKioqKioqJykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIwPjIwIiwgJzAwMDAwMDAwMDAwMDAwMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIxPjIwIiwgJzExMTExMTExMTExMTExMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIqPjIwIiwgJyoqKioqKioqKioqKioqMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIwPTIwIiwgJzAwMDAwMDAwMDAwMDAwMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIxPTIwIiwgJzExMTExMTExMTExMTExMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTYsICIqPTIwIiwgJyoqKioqKioqKioqKioqMTIzNDU2JykKKworICAgIGRlZiB0ZXN0X2xvbmdfX2Zvcm1hdF9fKHNlbGYpOgorICAgICAgICBkZWYgdGVzdChpLCBmb3JtYXRfc3BlYywgcmVzdWx0KToKKyAgICAgICAgICAgICMgbWFrZSBzdXJlIHdlJ3JlIG5vdCBhY2NpZGVudGFsbHkgY2hlY2tpbmcgaW50cworICAgICAgICAgICAgYXNzZXJ0IHR5cGUoaSkgPT0gbG9uZworICAgICAgICAgICAgYXNzZXJ0IHR5cGUoZm9ybWF0X3NwZWMpID09IHN0cgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLl9fZm9ybWF0X18oZm9ybWF0X3NwZWMpLCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkuX19mb3JtYXRfXyh1bmljb2RlKGZvcm1hdF9zcGVjKSksIHJlc3VsdCkKKworICAgICAgICB0ZXN0KDEwKioxMDAsICdkJywgJzEnICsgJzAnICogMTAwKQorICAgICAgICB0ZXN0KDEwKioxMDArMTAwLCAnZCcsICcxJyArICcwJyAqIDk3ICsgJzEwMCcpCisKKyAgICAgICAgdGVzdCgxMjM0NTY3ODlMLCAnZCcsICcxMjM0NTY3ODknKQorICAgICAgICB0ZXN0KDEyMzQ1Njc4OUwsICdkJywgJzEyMzQ1Njc4OScpCisKKyAgICAgICAgIyBzaWduIGFuZCBhbGlnbmluZyBhcmUgaW50ZXJkZXBlbmRlbnQKKyAgICAgICAgdGVzdCgxTCwgIi0iLCAnMScpCisgICAgICAgIHRlc3QoLTFMLCAiLSIsICctMScpCisgICAgICAgIHRlc3QoMUwsICItMyIsICcgIDEnKQorICAgICAgICB0ZXN0KC0xTCwgIi0zIiwgJyAtMScpCisgICAgICAgIHRlc3QoMUwsICIrMyIsICcgKzEnKQorICAgICAgICB0ZXN0KC0xTCwgIiszIiwgJyAtMScpCisgICAgICAgIHRlc3QoMUwsICIgMyIsICcgIDEnKQorICAgICAgICB0ZXN0KC0xTCwgIiAzIiwgJyAtMScpCisgICAgICAgIHRlc3QoMUwsICIgIiwgJyAxJykKKyAgICAgICAgdGVzdCgtMUwsICIgIiwgJy0xJykKKworICAgICAgICB0ZXN0KDFMLCAnYycsICdcMDEnKQorCisgICAgICAgICMgaGV4CisgICAgICAgIHRlc3QoM0wsICJ4IiwgIjMiKQorICAgICAgICB0ZXN0KDNMLCAiWCIsICIzIikKKyAgICAgICAgdGVzdCgxMjM0TCwgIngiLCAiNGQyIikKKyAgICAgICAgdGVzdCgtMTIzNEwsICJ4IiwgIi00ZDIiKQorICAgICAgICB0ZXN0KDEyMzRMLCAiOHgiLCAiICAgICA0ZDIiKQorICAgICAgICB0ZXN0KC0xMjM0TCwgIjh4IiwgIiAgICAtNGQyIikKKyAgICAgICAgdGVzdCgxMjM0TCwgIngiLCAiNGQyIikKKyAgICAgICAgdGVzdCgtMTIzNEwsICJ4IiwgIi00ZDIiKQorICAgICAgICB0ZXN0KC0zTCwgIngiLCAiLTMiKQorICAgICAgICB0ZXN0KC0zTCwgIlgiLCAiLTMiKQorICAgICAgICB0ZXN0KGxvbmcoJ2JlJywgMTYpLCAieCIsICJiZSIpCisgICAgICAgIHRlc3QobG9uZygnYmUnLCAxNiksICJYIiwgIkJFIikKKyAgICAgICAgdGVzdCgtbG9uZygnYmUnLCAxNiksICJ4IiwgIi1iZSIpCisgICAgICAgIHRlc3QoLWxvbmcoJ2JlJywgMTYpLCAiWCIsICItQkUiKQorCisgICAgICAgICMgb2N0YWwKKyAgICAgICAgdGVzdCgzTCwgIm8iLCAiMyIpCisgICAgICAgIHRlc3QoLTNMLCAibyIsICItMyIpCisgICAgICAgIHRlc3QoNjVMLCAibyIsICIxMDEiKQorICAgICAgICB0ZXN0KC02NUwsICJvIiwgIi0xMDEiKQorICAgICAgICB0ZXN0KDEyMzRMLCAibyIsICIyMzIyIikKKyAgICAgICAgdGVzdCgtMTIzNEwsICJvIiwgIi0yMzIyIikKKyAgICAgICAgdGVzdCgxMjM0TCwgIi1vIiwgIjIzMjIiKQorICAgICAgICB0ZXN0KC0xMjM0TCwgIi1vIiwgIi0yMzIyIikKKyAgICAgICAgdGVzdCgxMjM0TCwgIiBvIiwgIiAyMzIyIikKKyAgICAgICAgdGVzdCgtMTIzNEwsICIgbyIsICItMjMyMiIpCisgICAgICAgIHRlc3QoMTIzNEwsICIrbyIsICIrMjMyMiIpCisgICAgICAgIHRlc3QoLTEyMzRMLCAiK28iLCAiLTIzMjIiKQorCisgICAgICAgICMgYmluYXJ5CisgICAgICAgIHRlc3QoM0wsICJiIiwgIjExIikKKyAgICAgICAgdGVzdCgtM0wsICJiIiwgIi0xMSIpCisgICAgICAgIHRlc3QoMTIzNEwsICJiIiwgIjEwMDExMDEwMDEwIikKKyAgICAgICAgdGVzdCgtMTIzNEwsICJiIiwgIi0xMDAxMTAxMDAxMCIpCisgICAgICAgIHRlc3QoMTIzNEwsICItYiIsICIxMDAxMTAxMDAxMCIpCisgICAgICAgIHRlc3QoLTEyMzRMLCAiLWIiLCAiLTEwMDExMDEwMDEwIikKKyAgICAgICAgdGVzdCgxMjM0TCwgIiBiIiwgIiAxMDAxMTAxMDAxMCIpCisgICAgICAgIHRlc3QoLTEyMzRMLCAiIGIiLCAiLTEwMDExMDEwMDEwIikKKyAgICAgICAgdGVzdCgxMjM0TCwgIitiIiwgIisxMDAxMTAxMDAxMCIpCisgICAgICAgIHRlc3QoLTEyMzRMLCAiK2IiLCAiLTEwMDExMDEwMDEwIikKKworICAgICAgICAjIG1ha2Ugc3VyZSB0aGVzZSBhcmUgZXJyb3JzCisKKyAgICAgICAgIyBwcmVjaXNpb24gZGlzYWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAzTCAuX19mb3JtYXRfXywgIjEuMyIpCisgICAgICAgICMgc2lnbiBub3QgYWxsb3dlZCB3aXRoICdjJworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAzTCAuX19mb3JtYXRfXywgIitjIikKKyAgICAgICAgIyBmb3JtYXQgc3BlYyBtdXN0IGJlIHN0cmluZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIDNMIC5fX2Zvcm1hdF9fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIDNMIC5fX2Zvcm1hdF9fLCAwKQorICAgICAgICAjIGFsdGVybmF0ZSBzcGVjaWZpZXIgaW4gd3JvbmcgcGxhY2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgMUwgLl9fZm9ybWF0X18sICIjKzV4IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgMUwgLl9fZm9ybWF0X18sICIrNSN4IikKKworICAgICAgICAjIGVuc3VyZSB0aGF0IG9ubHkgaW50IGFuZCBmbG9hdCB0eXBlIHNwZWNpZmllcnMgd29yaworICAgICAgICBmb3IgZm9ybWF0X3NwZWMgaW4gKFtjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdhJyksIG9yZCgneicpKzEpXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ0EnKSwgb3JkKCdaJykrMSldKToKKyAgICAgICAgICAgIGlmIG5vdCBmb3JtYXRfc3BlYyBpbiAnYmNkb3hYZUVmRmdHbiUnOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIDBMIC5fX2Zvcm1hdF9fLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAxTCAuX19mb3JtYXRfXywgZm9ybWF0X3NwZWMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgKC0xTCkgLl9fZm9ybWF0X18sIGZvcm1hdF9zcGVjKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgZmxvYXQgdHlwZSBzcGVjaWZpZXJzIHdvcms7IGZvcm1hdCBjb252ZXJ0cworICAgICAgICAjICB0aGUgbG9uZyB0byBhIGZsb2F0CisgICAgICAgIGZvciBmb3JtYXRfc3BlYyBpbiAnZUVmRmdHJSc6CisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gWzBMLCAxTCwgLTFMLCAxMDBMLCAtMTAwTCwgMTIzNDU2Nzg5MEwsIC0xMjM0NTY3ODkwTF06CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZS5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KHZhbHVlKS5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKSkKKyAgICAgICAgIyBJc3N1ZSA2OTAyCisgICAgICAgIHRlc3QoMTIzNDU2TCwgIjA8MjAiLCAnMTIzNDU2MDAwMDAwMDAwMDAwMDAnKQorICAgICAgICB0ZXN0KDEyMzQ1NkwsICIxPDIwIiwgJzEyMzQ1NjExMTExMTExMTExMTExJykKKyAgICAgICAgdGVzdCgxMjM0NTZMLCAiKjwyMCIsICcxMjM0NTYqKioqKioqKioqKioqKicpCisgICAgICAgIHRlc3QoMTIzNDU2TCwgIjA+MjAiLCAnMDAwMDAwMDAwMDAwMDAxMjM0NTYnKQorICAgICAgICB0ZXN0KDEyMzQ1NkwsICIxPjIwIiwgJzExMTExMTExMTExMTExMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTZMLCAiKj4yMCIsICcqKioqKioqKioqKioqKjEyMzQ1NicpCisgICAgICAgIHRlc3QoMTIzNDU2TCwgIjA9MjAiLCAnMDAwMDAwMDAwMDAwMDAxMjM0NTYnKQorICAgICAgICB0ZXN0KDEyMzQ1NkwsICIxPTIwIiwgJzExMTExMTExMTExMTExMTIzNDU2JykKKyAgICAgICAgdGVzdCgxMjM0NTZMLCAiKj0yMCIsICcqKioqKioqKioqKioqKjEyMzQ1NicpCisKKyAgICBAcnVuX3dpdGhfbG9jYWxlKCdMQ19OVU1FUklDJywgJ2VuX1VTLlVURjgnKQorICAgIGRlZiB0ZXN0X2Zsb2F0X19mb3JtYXRfX2xvY2FsZShzZWxmKToKKyAgICAgICAgIyB0ZXN0IGxvY2FsZSBzdXBwb3J0IGZvciBfX2Zvcm1hdF9fIGNvZGUgJ24nCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoLTEwLCAxMCk6CisgICAgICAgICAgICB4ID0gMTIzNDU2Nzg5MC4wICogKDEwLjAgKiogaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jYWxlLmZvcm1hdCgnJWcnLCB4LCBncm91cGluZz1UcnVlKSwgZm9ybWF0KHgsICduJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsZS5mb3JtYXQoJyUuMTBnJywgeCwgZ3JvdXBpbmc9VHJ1ZSksIGZvcm1hdCh4LCAnLjEwbicpKQorCisgICAgQHJ1bl93aXRoX2xvY2FsZSgnTENfTlVNRVJJQycsICdlbl9VUy5VVEY4JykKKyAgICBkZWYgdGVzdF9pbnRfX2Zvcm1hdF9fbG9jYWxlKHNlbGYpOgorICAgICAgICAjIHRlc3QgbG9jYWxlIHN1cHBvcnQgZm9yIF9fZm9ybWF0X18gY29kZSAnbicgZm9yIGludGVnZXJzCisKKyAgICAgICAgeCA9IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MAorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCAzMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsZS5mb3JtYXQoJyVkJywgeCwgZ3JvdXBpbmc9VHJ1ZSksIGZvcm1hdCh4LCAnbicpKQorCisgICAgICAgICAgICAjIG1vdmUgdG8gdGhlIG5leHQgaW50ZWdlciB0byB0ZXN0CisgICAgICAgICAgICB4ID0geCAvLyAxMAorCisgICAgICAgIHJmbXQgPSAiPjIwbiIKKyAgICAgICAgbGZtdCA9ICI8MjBuIgorICAgICAgICBjZm10ID0gIl4yMG4iCisgICAgICAgIGZvciB4IGluICgxMjM0LCAxMjM0NSwgMTIzNDU2LCAxMjM0NTY3LCAxMjM0NTY3OCwgMTIzNDU2Nzg5LCAxMjM0NTY3ODkwLCAxMjM0NTY3ODkwMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmb3JtYXQoMCwgcmZtdCkpLCBsZW4oZm9ybWF0KHgsIHJmbXQpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZvcm1hdCgwLCBsZm10KSksIGxlbihmb3JtYXQoeCwgbGZtdCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZm9ybWF0KDAsIGNmbXQpKSwgbGVuKGZvcm1hdCh4LCBjZm10KSkpCisKKyAgICBkZWYgdGVzdF9mbG9hdF9fZm9ybWF0X18oc2VsZik6CisgICAgICAgICMgdGhlc2Ugc2hvdWxkIGJlIHJld3JpdHRlbiB0byB1c2UgYm90aCBmb3JtYXQoeCwgc3BlYykgYW5kCisgICAgICAgICMgeC5fX2Zvcm1hdF9fKHNwZWMpCisKKyAgICAgICAgZGVmIHRlc3QoZiwgZm9ybWF0X3NwZWMsIHJlc3VsdCk6CisgICAgICAgICAgICBhc3NlcnQgdHlwZShmKSA9PSBmbG9hdAorICAgICAgICAgICAgYXNzZXJ0IHR5cGUoZm9ybWF0X3NwZWMpID09IHN0cgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLl9fZm9ybWF0X18oZm9ybWF0X3NwZWMpLCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuX19mb3JtYXRfXyh1bmljb2RlKGZvcm1hdF9zcGVjKSksIHJlc3VsdCkKKworICAgICAgICB0ZXN0KDAuMCwgJ2YnLCAnMC4wMDAwMDAnKQorCisgICAgICAgICMgdGhlIGRlZmF1bHQgaXMgJ2cnLCBleGNlcHQgZm9yIGVtcHR5IGZvcm1hdCBzcGVjCisgICAgICAgIHRlc3QoMC4wLCAnJywgJzAuMCcpCisgICAgICAgIHRlc3QoMC4wMSwgJycsICcwLjAxJykKKyAgICAgICAgdGVzdCgwLjAxLCAnZycsICcwLjAxJykKKworICAgICAgICAjIHRlc3QgZm9yIGlzc3VlIDM0MTEKKyAgICAgICAgdGVzdCgxLjIzLCAnMScsICcxLjIzJykKKyAgICAgICAgdGVzdCgtMS4yMywgJzEnLCAnLTEuMjMnKQorICAgICAgICB0ZXN0KDEuMjMsICcxZycsICcxLjIzJykKKyAgICAgICAgdGVzdCgtMS4yMywgJzFnJywgJy0xLjIzJykKKworICAgICAgICB0ZXN0KCAxLjAsICcgZycsICcgMScpCisgICAgICAgIHRlc3QoLTEuMCwgJyBnJywgJy0xJykKKyAgICAgICAgdGVzdCggMS4wLCAnK2cnLCAnKzEnKQorICAgICAgICB0ZXN0KC0xLjAsICcrZycsICctMScpCisgICAgICAgIHRlc3QoMS4xMjM0ZTIwMCwgJ2cnLCAnMS4xMjM0ZSsyMDAnKQorICAgICAgICB0ZXN0KDEuMTIzNGUyMDAsICdHJywgJzEuMTIzNEUrMjAwJykKKworCisgICAgICAgIHRlc3QoMS4wLCAnZicsICcxLjAwMDAwMCcpCisKKyAgICAgICAgdGVzdCgtMS4wLCAnZicsICctMS4wMDAwMDAnKQorCisgICAgICAgIHRlc3QoIDEuMCwgJyBmJywgJyAxLjAwMDAwMCcpCisgICAgICAgIHRlc3QoLTEuMCwgJyBmJywgJy0xLjAwMDAwMCcpCisgICAgICAgIHRlc3QoIDEuMCwgJytmJywgJysxLjAwMDAwMCcpCisgICAgICAgIHRlc3QoLTEuMCwgJytmJywgJy0xLjAwMDAwMCcpCisKKyAgICAgICAgIyBQeXRob24gdmVyc2lvbnMgPD0gMi42IHN3aXRjaGVkIGZyb20gJ2YnIHRvICdnJyBmb3JtYXR0aW5nIGZvcgorICAgICAgICAjIHZhbHVlcyBsYXJnZXIgdGhhbiAxZTUwLiAgTm8gbG9uZ2VyLgorICAgICAgICBmID0gMS4xMjM0ZTkwCisgICAgICAgIGZvciBmbXQgaW4gJ2YnLCAnRic6CisgICAgICAgICAgICAjIGRvbid0IGRvIGEgZGlyZWN0IGVxdWFsaXR5IGNoZWNrLCBzaW5jZSBvbiBzb21lCisgICAgICAgICAgICAjIHBsYXRmb3JtcyBvbmx5IHRoZSBmaXJzdCBmZXcgZGlnaXRzIG9mIGR0b2EKKyAgICAgICAgICAgICMgd2lsbCBiZSByZWxpYWJsZQorICAgICAgICAgICAgcmVzdWx0ID0gZi5fX2Zvcm1hdF9fKGZtdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdCksIDk4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbLTddLCAnLicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHJlc3VsdFs6MTJdLCAoJzExMjM0MDAwMDAwMCcsICcxMTIzMzk5OTk5OTknKSkKKyAgICAgICAgZiA9IDEuMTIzNGUyMDAKKyAgICAgICAgZm9yIGZtdCBpbiAnZicsICdGJzoKKyAgICAgICAgICAgIHJlc3VsdCA9IGYuX19mb3JtYXRfXyhmbXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCAyMDgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstN10sICcuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVzdWx0WzoxMl0sICgnMTEyMzQwMDAwMDAwJywgJzExMjMzOTk5OTk5OScpKQorCisKKyAgICAgICAgdGVzdCggMS4wLCAnZScsICcxLjAwMDAwMGUrMDAnKQorICAgICAgICB0ZXN0KC0xLjAsICdlJywgJy0xLjAwMDAwMGUrMDAnKQorICAgICAgICB0ZXN0KCAxLjAsICdFJywgJzEuMDAwMDAwRSswMCcpCisgICAgICAgIHRlc3QoLTEuMCwgJ0UnLCAnLTEuMDAwMDAwRSswMCcpCisgICAgICAgIHRlc3QoMS4xMjM0ZTIwLCAnZScsICcxLjEyMzQwMGUrMjAnKQorICAgICAgICB0ZXN0KDEuMTIzNGUyMCwgJ0UnLCAnMS4xMjM0MDBFKzIwJykKKworICAgICAgICAjIE5vIGZvcm1hdCBjb2RlIG1lYW5zIHVzZSBnLCBidXQgbXVzdCBoYXZlIGEgZGVjaW1hbAorICAgICAgICAjIGFuZCBhIG51bWJlciBhZnRlciB0aGUgZGVjaW1hbC4gIFRoaXMgaXMgdHJpY2t5LCBiZWNhdXNlCisgICAgICAgICMgYSB0b3RhbHkgZW1wdHkgZm9ybWF0IHNwZWNpZmllciBtZWFucyBzb21ldGhpbmcgZWxzZS4KKyAgICAgICAgIyBTbywganVzdCB1c2UgYSBzaWduIGZsYWcKKyAgICAgICAgdGVzdCgxZTIwMCwgJytnJywgJysxZSsyMDAnKQorICAgICAgICB0ZXN0KDFlMjAwLCAnKycsICcrMWUrMjAwJykKKyAgICAgICAgdGVzdCgxLjFlMjAwLCAnK2cnLCAnKzEuMWUrMjAwJykKKyAgICAgICAgdGVzdCgxLjFlMjAwLCAnKycsICcrMS4xZSsyMDAnKQorCisgICAgICAgIHRlc3QoMS4xZTIwMCwgJytnJywgJysxLjFlKzIwMCcpCisgICAgICAgIHRlc3QoMS4xZTIwMCwgJysnLCAnKzEuMWUrMjAwJykKKworICAgICAgICAjIDAgcGFkZGluZworICAgICAgICB0ZXN0KDEyMzQuLCAnMDEwZicsICcxMjM0LjAwMDAwMCcpCisgICAgICAgIHRlc3QoMTIzNC4sICcwMTFmJywgJzEyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgxMjM0LiwgJzAxMmYnLCAnMDEyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNC4sICcwMTFmJywgJy0xMjM0LjAwMDAwMCcpCisgICAgICAgIHRlc3QoLTEyMzQuLCAnMDEyZicsICctMTIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KC0xMjM0LiwgJzAxM2YnLCAnLTAxMjM0LjAwMDAwMCcpCisgICAgICAgIHRlc3QoLTEyMzQuMTIzNDEyMzQsICcwMTNmJywgJy0wMTIzNC4xMjM0MTInKQorICAgICAgICB0ZXN0KC0xMjM0NTYuMTIzNDEyMzQsICcwMTEuMmYnLCAnLTAxMjM0NTYuMTInKQorCisgICAgICAgICMgaXNzdWUgNTc4MiwgY29tbWFzIHdpdGggbm8gc3BlY2lmaWVyIHR5cGUKKyAgICAgICAgdGVzdCgxLjIsICcwMTAsLjInLCAnMCwwMDAsMDAxLjInKQorCisgICAgICAgICMgMCBwYWRkaW5nIHdpdGggY29tbWFzCisgICAgICAgIHRlc3QoMTIzNC4sICcwMTEsZicsICcxLDIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KDEyMzQuLCAnMDEyLGYnLCAnMSwyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgxMjM0LiwgJzAxMyxmJywgJzAxLDIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KC0xMjM0LiwgJzAxMixmJywgJy0xLDIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KC0xMjM0LiwgJzAxMyxmJywgJy0xLDIzNC4wMDAwMDAnKQorICAgICAgICB0ZXN0KC0xMjM0LiwgJzAxNCxmJywgJy0wMSwyMzQuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNDUuLCAnMDE1LGYnLCAnLTAxMiwzNDUuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNDU2LiwgJzAxNixmJywgJy0wLDEyMyw0NTYuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNDU2LiwgJzAxNyxmJywgJy0wLDEyMyw0NTYuMDAwMDAwJykKKyAgICAgICAgdGVzdCgtMTIzNDU2LjEyMzQxMjM0LCAnMDE3LGYnLCAnLTAsMTIzLDQ1Ni4xMjM0MTInKQorICAgICAgICB0ZXN0KC0xMjM0NTYuMTIzNDEyMzQsICcwMTMsLjJmJywgJy0wLDEyMyw0NTYuMTInKQorCisgICAgICAgICAjICUgZm9ybWF0dGluZworICAgICAgICB0ZXN0KC0xLjAsICclJywgJy0xMDAuMDAwMDAwJScpCisKKyAgICAgICAgIyBmb3JtYXQgc3BlYyBtdXN0IGJlIHN0cmluZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIDMuMC5fX2Zvcm1hdF9fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIDMuMC5fX2Zvcm1hdF9fLCAwKQorCisgICAgICAgICMgb3RoZXIgZm9ybWF0IHNwZWNpZmllcnMgc2hvdWxkbid0IHdvcmsgb24gZmxvYXRzLAorICAgICAgICAjICBpbiBwYXJ0aWN1bGFyIGludCBzcGVjaWZpZXJzCisgICAgICAgIGZvciBmb3JtYXRfc3BlYyBpbiAoW2Nocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ2EnKSwgb3JkKCd6JykrMSldICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnQScpLCBvcmQoJ1onKSsxKV0pOgorICAgICAgICAgICAgaWYgbm90IGZvcm1hdF9zcGVjIGluICdlRWZGZ0duJSc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAwLjAsIGZvcm1hdF9zcGVjKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgMS4wLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIC0xLjAsIGZvcm1hdF9zcGVjKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgMWUxMDAsIGZvcm1hdF9zcGVjKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgLTFlMTAwLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDFlLTEwMCwgZm9ybWF0X3NwZWMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAtMWUtMTAwLCBmb3JtYXRfc3BlYykKKworICAgICAgICAjIEFsdGVybmF0ZSBmb3JtYXR0aW5nIGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAwLjAsICcjJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAwLjAsICcjMjBmJykKKworICAgICAgICAjIElzc3VlIDY5MDIKKyAgICAgICAgdGVzdCgxMjM0NS42LCAiMDwyMCIsICcxMjM0NS42MDAwMDAwMDAwMDAwMCcpCisgICAgICAgIHRlc3QoMTIzNDUuNiwgIjE8MjAiLCAnMTIzNDUuNjExMTExMTExMTExMTEnKQorICAgICAgICB0ZXN0KDEyMzQ1LjYsICIqPDIwIiwgJzEyMzQ1LjYqKioqKioqKioqKioqJykKKyAgICAgICAgdGVzdCgxMjM0NS42LCAiMD4yMCIsICcwMDAwMDAwMDAwMDAwMTIzNDUuNicpCisgICAgICAgIHRlc3QoMTIzNDUuNiwgIjE+MjAiLCAnMTExMTExMTExMTExMTEyMzQ1LjYnKQorICAgICAgICB0ZXN0KDEyMzQ1LjYsICIqPjIwIiwgJyoqKioqKioqKioqKioxMjM0NS42JykKKyAgICAgICAgdGVzdCgxMjM0NS42LCAiMD0yMCIsICcwMDAwMDAwMDAwMDAwMTIzNDUuNicpCisgICAgICAgIHRlc3QoMTIzNDUuNiwgIjE9MjAiLCAnMTExMTExMTExMTExMTEyMzQ1LjYnKQorICAgICAgICB0ZXN0KDEyMzQ1LjYsICIqPTIwIiwgJyoqKioqKioqKioqKioxMjM0NS42JykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9zcGVjX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBpbnQsIGZsb2F0LCBhbmQgc3RyaW5nIGFsbCBzaGFyZSB0aGUgc2FtZSBmb3JtYXQgc3BlYworICAgICAgICAjIG1pbmktbGFuZ3VhZ2UgcGFyc2VyLgorCisgICAgICAgICMgQ2hlY2sgdGhhdCB3ZSBjYW4ndCBhc2sgZm9yIHRvbyBtYW55IGRpZ2l0cy4gVGhpcyBpcworICAgICAgICAjIHByb2JhYmx5IGEgQ1B5dGhvbiBzcGVjaWZpYyB0ZXN0LiBJdCB0cmllcyB0byBwdXQgdGhlIHdpZHRoCisgICAgICAgICMgaW50byBhIEMgbG9uZy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAwLCAnMScqMTAwMDAgKyAnZCcpCisKKyAgICAgICAgIyBTaW1pbGFyIHdpdGggdGhlIHByZWNpc2lvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAwLCAnLicgKyAnMScqMTAwMDAgKyAnZCcpCisKKyAgICAgICAgIyBBbmQgbWF5IGFzIHdlbGwgdGVzdCBib3RoLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDAsICcxJyoxMDAwICsgJy4nICsgJzEnKjEwMDAwICsgJ2QnKQorCisgICAgICAgICMgTWFrZSBzdXJlIGNvbW1hcyBhcmVuJ3QgYWxsb3dlZCB3aXRoIHZhcmlvdXMgdHlwZSBjb2RlcworICAgICAgICBmb3IgY29kZSBpbiAneFhvYm5zJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZvcm1hdCwgMCwgJywnICsgY29kZSkKKworICAgIGRlZiB0ZXN0X2ludGVybmFsX3NpemVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIob2JqZWN0Ll9fYmFzaWNzaXplX18sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih0dXBsZS5fX2l0ZW1zaXplX18sIDApCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHdpdGggY2hlY2tfcHkza193YXJuaW5ncygKKyAgICAgICAgICAgICgiYnVmZmVyLi4gbm90IHN1cHBvcnRlZCIsIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICAoImNsYXNzaWMgbG9uZyBkaXZpc2lvbiIsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICBydW5fdW5pdHRlc3QoVHlwZXNUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdWNuLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdWNuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYTRmMDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91Y24ucHkKQEAgLTAsMCArMSwxNjcgQEAKKyIiIiBUZXN0IHNjcmlwdCBmb3IgdGhlIFVuaWNvZGUgaW1wbGVtZW50YXRpb24uCisKK1dyaXR0ZW4gYnkgQmlsbCBUdXR0LgorTW9kaWZpZWQgZm9yIFB5dGhvbiAyLjAgYnkgRnJlZHJpayBMdW5kaCAoZnJlZHJpa0BweXRob253YXJlLmNvbSkKKworKGMpIENvcHlyaWdodCBDTlJJLCBBbGwgUmlnaHRzIFJlc2VydmVkLiBOTyBXQVJSQU5UWS4KKworIiIiIyIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgX3Rlc3RjYXBpCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIFVuaWNvZGVOYW1lc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrbGV0dGVyKHNlbGYsIG5hbWUsIGNvZGUpOgorICAgICAgICAjIEhlbHBlciB0aGF0IHB1dCBhbGwgXE4gZXNjYXBlcyBpbnNpZGUgZXZhbCdkIHJhdyBzdHJpbmdzLAorICAgICAgICAjIHRvIG1ha2Ugc3VyZSB0aGlzIHNjcmlwdCBydW5zIGV2ZW4gaWYgdGhlIGNvbXBpbGVyCisgICAgICAgICMgY2hva2VzIG9uIFxOIGVzY2FwZXMKKyAgICAgICAgcmVzID0gZXZhbCh1cid1IlxOeyVzfSInICUgbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIGNvZGUpCisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiB0ZXN0X2dlbmVyYWwoc2VsZik6CisgICAgICAgICMgR2VuZXJhbCBhbmQgY2FzZSBpbnNlbnNpdGl2aXR5IHRlc3Q6CisgICAgICAgIGNoYXJzID0gWworICAgICAgICAgICAgIkxBVElOIENBUElUQUwgTEVUVEVSIFQiLAorICAgICAgICAgICAgIkxBVElOIFNNQUxMIExFVFRFUiBIIiwKKyAgICAgICAgICAgICJMQVRJTiBTTUFMTCBMRVRURVIgRSIsCisgICAgICAgICAgICAiU1BBQ0UiLAorICAgICAgICAgICAgIkxBVElOIFNNQUxMIExFVFRFUiBSIiwKKyAgICAgICAgICAgICJMQVRJTiBDQVBJVEFMIExFVFRFUiBFIiwKKyAgICAgICAgICAgICJMQVRJTiBTTUFMTCBMRVRURVIgRCIsCisgICAgICAgICAgICAiU1BBQ0UiLAorICAgICAgICAgICAgIkxBVElOIFNNQUxMIExFVFRFUiBmIiwKKyAgICAgICAgICAgICJMQVRJTiBDQVBJVEFMIExlVHRFciBvIiwKKyAgICAgICAgICAgICJMQVRJTiBTTWFMbCBMRVRURVIgeCIsCisgICAgICAgICAgICAiU1BBQ0UiLAorICAgICAgICAgICAgIkxBVElOIFNNQUxMIExFVFRFUiBBIiwKKyAgICAgICAgICAgICJMQVRJTiBTTUFMTCBMRVRURVIgVCIsCisgICAgICAgICAgICAiTEFUSU4gU01BTEwgTEVUVEVSIEUiLAorICAgICAgICAgICAgIlNQQUNFIiwKKyAgICAgICAgICAgICJMQVRJTiBTTUFMTCBMRVRURVIgVCIsCisgICAgICAgICAgICAiTEFUSU4gU01BTEwgTEVUVEVSIEgiLAorICAgICAgICAgICAgIkxBVElOIFNNQUxMIExFVFRFUiBFIiwKKyAgICAgICAgICAgICJTcEFjRSIsCisgICAgICAgICAgICAiTEFUSU4gU01BTEwgTEVUVEVSIFMiLAorICAgICAgICAgICAgIkxBVElOIFNNQUxMIExFVFRFUiBIIiwKKyAgICAgICAgICAgICJMQVRJTiBzbWFsbCBMRVRURVIgZSIsCisgICAgICAgICAgICAiTEFUSU4gc21hbGwgTEVUVEVSIGUiLAorICAgICAgICAgICAgIkxBVElOIFNNQUxMIExFVFRFUiBQIiwKKyAgICAgICAgICAgICJGVUxMIFNUT1AiCisgICAgICAgIF0KKyAgICAgICAgc3RyaW5nID0gdSJUaGUgckVkIGZPeCBhdGUgdGhlIHNoZWVwLiIKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdSIiLmpvaW4oW3NlbGYuY2hlY2tsZXR0ZXIoKmFyZ3MpIGZvciBhcmdzIGluIHppcChjaGFycywgc3RyaW5nKV0pLAorICAgICAgICAgICAgc3RyaW5nCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2FzY2lpX2xldHRlcnMoc2VsZik6CisgICAgICAgIGltcG9ydCB1bmljb2RlZGF0YQorCisgICAgICAgIGZvciBjaGFyIGluICIiLmpvaW4obWFwKGNociwgeHJhbmdlKG9yZCgiYSIpLCBvcmQoInoiKSkpKToKKyAgICAgICAgICAgIG5hbWUgPSAiTEFUSU4gU01BTEwgTEVUVEVSICVzIiAlIGNoYXIudXBwZXIoKQorICAgICAgICAgICAgY29kZSA9IHVuaWNvZGVkYXRhLmxvb2t1cChuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlZGF0YS5uYW1lKGNvZGUpLCBuYW1lKQorCisgICAgZGVmIHRlc3RfaGFuZ3VsX3N5bGxhYmxlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiSEFOR1VMIFNZTExBQkxFIEdBIiwgdSJcdWFjMDAiKQorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJIQU5HVUwgU1lMTEFCTEUgR0dXRU9TUyIsIHUiXHVhZmU4IikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiSEFOR1VMIFNZTExBQkxFIERPTFMiLCB1Ilx1YjNkMCIpCisgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIkhBTkdVTCBTWUxMQUJMRSBSWUFOIiwgdSJcdWI3YjgiKQorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJIQU5HVUwgU1lMTEFCTEUgTVdJSyIsIHUiXHViYmEwIikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiSEFOR1VMIFNZTExBQkxFIEJCV0FFTSIsIHUiXHViZjg4IikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiSEFOR1VMIFNZTExBQkxFIFNTRU9MIiwgdSJcdWMzNzAiKQorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJIQU5HVUwgU1lMTEFCTEUgWUkiLCB1Ilx1Yzc1OCIpCisgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIkhBTkdVTCBTWUxMQUJMRSBKSllPU1MiLCB1Ilx1Y2I0MCIpCisgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIkhBTkdVTCBTWUxMQUJMRSBLWUVPTFMiLCB1Ilx1Y2YyOCIpCisgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIkhBTkdVTCBTWUxMQUJMRSBQQU4iLCB1Ilx1ZDMxMCIpCisgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIkhBTkdVTCBTWUxMQUJMRSBIV0VPSyIsIHUiXHVkNmY4IikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiSEFOR1VMIFNZTExBQkxFIEhJSCIsIHUiXHVkN2EzIikKKworICAgICAgICBpbXBvcnQgdW5pY29kZWRhdGEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdW5pY29kZWRhdGEubmFtZSwgdSJcdWQ3YTQiKQorCisgICAgZGVmIHRlc3RfY2prX3VuaWZpZWRfaWRlb2dyYXBocyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiQ0pLIFVOSUZJRUQgSURFT0dSQVBILTM0MDAiLCB1Ilx1MzQwMCIpCisgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIkNKSyBVTklGSUVEIElERU9HUkFQSC00REI1IiwgdSJcdTRkYjUiKQorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJDSksgVU5JRklFRCBJREVPR1JBUEgtNEUwMCIsIHUiXHU0ZTAwIikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiQ0pLIFVOSUZJRUQgSURFT0dSQVBILTlGQTUiLCB1Ilx1OWZhNSIpCisgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIkNKSyBVTklGSUVEIElERU9HUkFQSC0yMDAwMCIsIHUiXFUwMDAyMDAwMCIpCisgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIkNKSyBVTklGSUVEIElERU9HUkFQSC0yQTZENiIsIHUiXFUwMDAyYTZkNiIpCisKKyAgICBkZWYgdGVzdF9ibXBfY2hhcmFjdGVycyhzZWxmKToKKyAgICAgICAgaW1wb3J0IHVuaWNvZGVkYXRhCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICBmb3IgY29kZSBpbiB4cmFuZ2UoMHgxMDAwMCk6CisgICAgICAgICAgICBjaGFyID0gdW5pY2hyKGNvZGUpCisgICAgICAgICAgICBuYW1lID0gdW5pY29kZWRhdGEubmFtZShjaGFyLCBOb25lKQorICAgICAgICAgICAgaWYgbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGVkYXRhLmxvb2t1cChuYW1lKSwgY2hhcikKKyAgICAgICAgICAgICAgICBjb3VudCArPSAxCisKKyAgICBkZWYgdGVzdF9taXNjX3N5bWJvbHMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIlBJTENST1cgU0lHTiIsIHUiXHUwMGI2IikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiUkVQTEFDRU1FTlQgQ0hBUkFDVEVSIiwgdSJcdUZGRkQiKQorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJIQUxGV0lEVEggS0FUQUtBTkEgU0VNSS1WT0lDRUQgU09VTkQgTUFSSyIsIHUiXHVGRjlGIikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiRlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBBIiwgdSJcdUZGNDEiKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICBpbXBvcnQgdW5pY29kZWRhdGEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1bmljb2RlZGF0YS5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHVuaWNvZGVkYXRhLm5hbWUsIHUneHgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHVuaWNvZGVkYXRhLmxvb2t1cCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHVuaWNvZGVkYXRhLmxvb2t1cCwgdSd1bmtub3duJykKKworICAgIGRlZiB0ZXN0X3N0cmljdF9lcm9yX2hhbmRsaW5nKHNlbGYpOgorICAgICAgICAjIGJvZ3VzIGNoYXJhY3RlciBuYW1lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVW5pY29kZUVycm9yLAorICAgICAgICAgICAgdW5pY29kZSwgIlxcTntibGFofSIsICd1bmljb2RlLWVzY2FwZScsICdzdHJpY3QnCisgICAgICAgICkKKyAgICAgICAgIyBsb25nIGJvZ3VzIGNoYXJhY3RlciBuYW1lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVW5pY29kZUVycm9yLAorICAgICAgICAgICAgdW5pY29kZSwgIlxcTnslc30iICUgKCJ4IiAqIDEwMDAwMCksICd1bmljb2RlLWVzY2FwZScsICdzdHJpY3QnCisgICAgICAgICkKKyAgICAgICAgIyBtaXNzaW5nIGNsb3NpbmcgYnJhY2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBVbmljb2RlRXJyb3IsCisgICAgICAgICAgICB1bmljb2RlLCAiXFxOe1NQQUNFIiwgJ3VuaWNvZGUtZXNjYXBlJywgJ3N0cmljdCcKKyAgICAgICAgKQorICAgICAgICAjIG1pc3Npbmcgb3BlbmluZyBicmFjZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFVuaWNvZGVFcnJvciwKKyAgICAgICAgICAgIHVuaWNvZGUsICJcXE5TUEFDRSIsICd1bmljb2RlLWVzY2FwZScsICdzdHJpY3QnCisgICAgICAgICkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKF90ZXN0Y2FwaS5JTlRfTUFYIDwgX3Rlc3RjYXBpLlBZX1NTSVpFX1RfTUFYLAorICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBVSU5UX01BWCA8IFNJWkVfTUFYIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhfdGVzdGNhcGkuVUlOVF9NQVggPCBzeXMubWF4aW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBVSU5UX01BWCA8IHN5cy5tYXhpbnQiKQorICAgIEB0ZXN0X3N1cHBvcnQuYmlnbWVtdGVzdChtaW5zaXplPV90ZXN0Y2FwaS5VSU5UX01BWCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXVzZT0yICsgNCAvLyBsZW4odSdcVTAwMDEwMDAwJykpCisgICAgZGVmIHRlc3RfaXNzdWUxNjMzNShzZWxmLCBzaXplKToKKyAgICAgICAgZnVuYyA9IHNlbGYudGVzdF9pc3N1ZTE2MzM1CisgICAgICAgIGlmIHNpemUgPCBmdW5jLm1pbnNpemU6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibm90IGVub3VnaCBtZW1vcnk6ICUuMWZHIG1pbmltdW0gbmVlZGVkIiAlCisgICAgICAgICAgICAgICAgICAgIChmdW5jLm1pbnNpemUgKiBmdW5jLm1lbXVzZSAvIGZsb2F0KDEwMjQqKjMpLCkpCisgICAgICAgICMgdmVyeSB2ZXJ5IGxvbmcgYm9ndXMgY2hhcmFjdGVyIG5hbWUKKyAgICAgICAgeCA9IGInXFxOe1NQQUNFJyArIGIneCcgKiBpbnQoX3Rlc3RjYXBpLlVJTlRfTUFYICsgMSkgKyBiJ30nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCBsZW4oYidcXE57U1BBQ0V9JykgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF90ZXN0Y2FwaS5VSU5UX01BWCArIDEpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChVbmljb2RlRXJyb3IsCisgICAgICAgICAgICAndW5rbm93biBVbmljb2RlIGNoYXJhY3RlciBuYW1lJywKKyAgICAgICAgICAgIHguZGVjb2RlLCAndW5pY29kZS1lc2NhcGUnCisgICAgICAgICkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChVbmljb2RlTmFtZXNUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91bmFyeS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3VuYXJ5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5OGZjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91bmFyeS5weQpAQCAtMCwwICsxLDU5IEBACisiIiJUZXN0IGNvbXBpbGVyIGNoYW5nZXMgZm9yIHVuYXJ5IG9wcyAoKywgLSwgfikgaW50cm9kdWNlZCBpbiBQeXRob24gMi4yIiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBoYXZlX3VuaWNvZGUKKworY2xhc3MgVW5hcnlPcFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X25lZ2F0aXZlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoLTIgPT0gMCAtIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMCA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoLS0yID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMkwgPT0gMCAtIDJMKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoLTIuMCA9PSAwIC0gMi4wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoLTJqID09IDAgLSAyaikKKworICAgIGRlZiB0ZXN0X3Bvc2l0aXZlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoKzIgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCswID09IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgrKzIgPT0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCsyTCA9PSAyTCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCsyLjAgPT0gMi4wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKzJqID09IDJqKQorCisgICAgZGVmIHRlc3RfaW52ZXJ0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoLTIgPT0gMCAtIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMCA9PSAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoLS0yID09IDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgtMkwgPT0gMCAtIDJMKQorCisgICAgZGVmIHRlc3Rfbm9fb3ZlcmZsb3coc2VsZik6CisgICAgICAgIG5pbmVzID0gIjkiICogMzIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV2YWwoIisiICsgbmluZXMpID09IGV2YWwoIisiICsgbmluZXMgKyAiTCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZhbCgiLSIgKyBuaW5lcykgPT0gZXZhbCgiLSIgKyBuaW5lcyArICJMIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmFsKCJ+IiArIG5pbmVzKSA9PSBldmFsKCJ+IiArIG5pbmVzICsgIkwiKSkKKworICAgIGRlZiB0ZXN0X25lZ2F0aW9uX29mX2V4cG9uZW50aWF0aW9uKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSAnKionIGRvZXMgdGhlIHJpZ2h0IHRoaW5nOyB0aGVzZSBmb3JtIGEKKyAgICAgICAgIyByZWdyZXNzaW9uIHRlc3QgZm9yIFNvdXJjZUZvcmdlIGJ1ZyAjNDU2NzU2LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0yICoqIDMsIC04KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtMikgKiogMywgLTgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTIgKiogNCwgLTE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtMikgKiogNCwgMTYpCisKKyAgICBkZWYgdGVzdF9iYWRfdHlwZXMoc2VsZik6CisgICAgICAgIGZvciBvcCBpbiAnKycsICctJywgJ34nOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCBvcCArICInYSciKQorICAgICAgICAgICAgaWYgaGF2ZV91bmljb2RlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgb3AgKyAidSdhJyIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAifjJqIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAifjIuMCIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChVbmFyeU9wVGVzdENhc2UpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdW5kb2N1bWVudGVkX2RldGFpbHMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91bmRvY3VtZW50ZWRfZGV0YWlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGZjMjgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdW5kb2N1bWVudGVkX2RldGFpbHMucHkKQEAgLTAsMCArMSwzOSBAQAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjaGVja19weTNrX3dhcm5pbmdzCitpbXBvcnQgdW5pdHRlc3QKKworY2xhc3MgVGVzdEltcGxlbWVudGF0aW9uQ29tcGFyaXNvbnModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdHlwZV9jb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0ciA8IGludCBvciBzdHIgPiBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQgPD0gc3RyIG9yIGludCA+PSBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbXAoaW50LCBzdHIpICE9IDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQgaXMgaW50KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyID09IHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludCAhPSBzdHIpCisKKyAgICBkZWYgdGVzdF9jZWxsX2NvbXBhcmlzb25zKHNlbGYpOgorICAgICAgICBkZWYgZih4KToKKyAgICAgICAgICAgIGlmIHg6CisgICAgICAgICAgICAgICAgeSA9IDEKKyAgICAgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgICAgIGRlZiBoKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHkKKyAgICAgICAgICAgIHJldHVybiBnLCBoCisgICAgICAgIGcsIGggPSBmKDApCisgICAgICAgIGdfY2VsbCwgPSBnLmZ1bmNfY2xvc3VyZQorICAgICAgICBoX2NlbGwsID0gaC5mdW5jX2Nsb3N1cmUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhfY2VsbCA8IGdfY2VsbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdfY2VsbCA+PSBoX2NlbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKGdfY2VsbCwgaF9jZWxsKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdfY2VsbCBpcyBnX2NlbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnX2NlbGwgPT0gZ19jZWxsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaF9jZWxsID09IGhfY2VsbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdfY2VsbCAhPSBoX2NlbGwpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB3aXRoIGNoZWNrX3B5M2tfd2FybmluZ3MoKToKKyAgICAgICAgcnVuX3VuaXR0ZXN0KFRlc3RJbXBsZW1lbnRhdGlvbkNvbXBhcmlzb25zKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91bmljb2RlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdW5pY29kZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDRmZTAzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdW5pY29kZS5weQpAQCAtMCwwICsxLDE2NjYgQEAKKyIiIiBUZXN0IHNjcmlwdCBmb3IgdGhlIFVuaWNvZGUgaW1wbGVtZW50YXRpb24uCisKK1dyaXR0ZW4gYnkgTWFyYy1BbmRyZSBMZW1idXJnIChtYWxAbGVtYnVyZy5jb20pLgorCisoYykgQ29weXJpZ2h0IENOUkksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIE5PIFdBUlJBTlRZLgorCisiIiIjIgoraW1wb3J0IHN5cworaW1wb3J0IHN0cnVjdAoraW1wb3J0IGNvZGVjcworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCwgc3RyaW5nX3Rlc3RzCisKKyMgZGVjb3JhdG9yIHRvIHNraXAgdGVzdHMgb24gbmFycm93IGJ1aWxkcworcmVxdWlyZXNfd2lkZV9idWlsZCA9IHVuaXR0ZXN0LnNraXBJZihzeXMubWF4dW5pY29kZSA9PSA2NTUzNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzIHdpZGUgYnVpbGQnKQorCisjIEVycm9yIGhhbmRsaW5nIChiYWQgZGVjb2RlciByZXR1cm4pCitkZWYgc2VhcmNoX2Z1bmN0aW9uKGVuY29kaW5nKToKKyAgICBkZWYgZGVjb2RlMShpbnB1dCwgZXJyb3JzPSJzdHJpY3QiKToKKyAgICAgICAgcmV0dXJuIDQyICMgbm90IGEgdHVwbGUKKyAgICBkZWYgZW5jb2RlMShpbnB1dCwgZXJyb3JzPSJzdHJpY3QiKToKKyAgICAgICAgcmV0dXJuIDQyICMgbm90IGEgdHVwbGUKKyAgICBkZWYgZW5jb2RlMihpbnB1dCwgZXJyb3JzPSJzdHJpY3QiKToKKyAgICAgICAgcmV0dXJuICg0MiwgNDIpICMgbm8gdW5pY29kZQorICAgIGRlZiBkZWNvZGUyKGlucHV0LCBlcnJvcnM9InN0cmljdCIpOgorICAgICAgICByZXR1cm4gKDQyLCA0MikgIyBubyB1bmljb2RlCisgICAgaWYgZW5jb2Rpbmc9PSJ0ZXN0LnVuaWNvZGUxIjoKKyAgICAgICAgcmV0dXJuIChlbmNvZGUxLCBkZWNvZGUxLCBOb25lLCBOb25lKQorICAgIGVsaWYgZW5jb2Rpbmc9PSJ0ZXN0LnVuaWNvZGUyIjoKKyAgICAgICAgcmV0dXJuIChlbmNvZGUyLCBkZWNvZGUyLCBOb25lLCBOb25lKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCitjb2RlY3MucmVnaXN0ZXIoc2VhcmNoX2Z1bmN0aW9uKQorCitjbGFzcyBVbmljb2RlVGVzdCgKKyAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdCwKKyAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QsCisgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVRlc3QsCisgICAgKToKKyAgICB0eXBlMnRlc3QgPSB1bmljb2RlCisKKyAgICBkZWYgYXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgorICAgICAgICAjIHN0cmljdCBhc3NlcnRFcXVhbCBtZXRob2Q6IHJlamVjdCBpbXBsaWNpdCBieXRlcy91bmljb2RlIGVxdWFsaXR5CisgICAgICAgIHN1cGVyKFVuaWNvZGVUZXN0LCBzZWxmKS5hc3NlcnRFcXVhbChmaXJzdCwgc2Vjb25kLCBtc2cpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZmlyc3QsIHVuaWNvZGUpIG9yIGlzaW5zdGFuY2Uoc2Vjb25kLCB1bmljb2RlKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmaXJzdCwgdW5pY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWNvbmQsIHVuaWNvZGUpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShmaXJzdCwgc3RyKSBvciBpc2luc3RhbmNlKHNlY29uZCwgc3RyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmaXJzdCwgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlY29uZCwgc3RyKQorCisgICAgZGVmIGNoZWNrZXF1YWxub2ZpeChzZWxmLCByZXN1bHQsIG9iamVjdCwgbWV0aG9kbmFtZSwgKmFyZ3MpOgorICAgICAgICBtZXRob2QgPSBnZXRhdHRyKG9iamVjdCwgbWV0aG9kbmFtZSkKKyAgICAgICAgcmVhbHJlc3VsdCA9IG1ldGhvZCgqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscmVzdWx0LCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHJlYWxyZXN1bHQpIGlzIHR5cGUocmVzdWx0KSkKKworICAgICAgICAjIGlmIHRoZSBvcmlnaW5hbCBpcyByZXR1cm5lZCBtYWtlIHN1cmUgdGhhdAorICAgICAgICAjIHRoaXMgZG9lc24ndCBoYXBwZW4gd2l0aCBzdWJjbGFzc2VzCisgICAgICAgIGlmIHJlYWxyZXN1bHQgaXMgb2JqZWN0OgorICAgICAgICAgICAgY2xhc3MgdXN1Yih1bmljb2RlKToKKyAgICAgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAndXN1YiglciknICUgdW5pY29kZS5fX3JlcHJfXyhzZWxmKQorICAgICAgICAgICAgb2JqZWN0ID0gdXN1YihvYmplY3QpCisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKG9iamVjdCwgbWV0aG9kbmFtZSkKKyAgICAgICAgICAgIHJlYWxyZXN1bHQgPSBtZXRob2QoKmFyZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxyZXN1bHQsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYmplY3QgaXMgbm90IHJlYWxyZXN1bHQpCisKKyAgICBkZWYgdGVzdF9saXRlcmFscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x4ZmYnLCB1J1x1MDBmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcdWZmZmYnLCB1J1xVMDAwMGZmZmYnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgJ3VcJ1xcVWZmZmZmZmZlXCcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgJ3VcJ1xcVWZmZmZmZmZmXCcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgJ3VcJ1xcVSUwOHhcJycgJSAweDExMDAwMCkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgorICAgICAgICAgICAgIyBUZXN0IGJhc2ljIHNhbml0eSBvZiByZXByKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1J2FiYycpLCAidSdhYmMnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1J2FiXFxjJyksICJ1J2FiXFxcXGMnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1J2FiXFwnKSwgInUnYWJcXFxcJyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodSdcXGMnKSwgInUnXFxcXGMnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1J1xcJyksICJ1J1xcXFwnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1J1xuJyksICJ1J1xcbiciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUnXHInKSwgInUnXFxyJyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodSdcdCcpLCAidSdcXHQnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1J1xiJyksICJ1J1xceDA4JyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodSInXCIiKSwgIiIidSdcXCciJyIiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1IidcIiIpLCAiIiJ1J1xcJyInIiIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUiJyIpLCAnJyd1IiciJycnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUnIicpLCAiIiJ1JyInIiIiKQorICAgICAgICAgICAgbGF0aW4xcmVwciA9ICgKKyAgICAgICAgICAgICAgICAidSdcXHgwMFxceDAxXFx4MDJcXHgwM1xceDA0XFx4MDVcXHgwNlxceDA3XFx4MDhcXHRcXG5cXHgwYlxceDBjXFxyIgorICAgICAgICAgICAgICAgICJcXHgwZVxceDBmXFx4MTBcXHgxMVxceDEyXFx4MTNcXHgxNFxceDE1XFx4MTZcXHgxN1xceDE4XFx4MTlcXHgxYSIKKyAgICAgICAgICAgICAgICAiXFx4MWJcXHgxY1xceDFkXFx4MWVcXHgxZiAhXCIjJCUmXFwnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISSIKKyAgICAgICAgICAgICAgICAiSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5cXHg3ZiIKKyAgICAgICAgICAgICAgICAiXFx4ODBcXHg4MVxceDgyXFx4ODNcXHg4NFxceDg1XFx4ODZcXHg4N1xceDg4XFx4ODlcXHg4YVxceDhiXFx4OGNcXHg4ZCIKKyAgICAgICAgICAgICAgICAiXFx4OGVcXHg4ZlxceDkwXFx4OTFcXHg5MlxceDkzXFx4OTRcXHg5NVxceDk2XFx4OTdcXHg5OFxceDk5XFx4OWFcXHg5YiIKKyAgICAgICAgICAgICAgICAiXFx4OWNcXHg5ZFxceDllXFx4OWZcXHhhMFxceGExXFx4YTJcXHhhM1xceGE0XFx4YTVcXHhhNlxceGE3XFx4YThcXHhhOSIKKyAgICAgICAgICAgICAgICAiXFx4YWFcXHhhYlxceGFjXFx4YWRcXHhhZVxceGFmXFx4YjBcXHhiMVxceGIyXFx4YjNcXHhiNFxceGI1XFx4YjZcXHhiNyIKKyAgICAgICAgICAgICAgICAiXFx4YjhcXHhiOVxceGJhXFx4YmJcXHhiY1xceGJkXFx4YmVcXHhiZlxceGMwXFx4YzFcXHhjMlxceGMzXFx4YzRcXHhjNSIKKyAgICAgICAgICAgICAgICAiXFx4YzZcXHhjN1xceGM4XFx4YzlcXHhjYVxceGNiXFx4Y2NcXHhjZFxceGNlXFx4Y2ZcXHhkMFxceGQxXFx4ZDJcXHhkMyIKKyAgICAgICAgICAgICAgICAiXFx4ZDRcXHhkNVxceGQ2XFx4ZDdcXHhkOFxceGQ5XFx4ZGFcXHhkYlxceGRjXFx4ZGRcXHhkZVxceGRmXFx4ZTBcXHhlMSIKKyAgICAgICAgICAgICAgICAiXFx4ZTJcXHhlM1xceGU0XFx4ZTVcXHhlNlxceGU3XFx4ZThcXHhlOVxceGVhXFx4ZWJcXHhlY1xceGVkXFx4ZWVcXHhlZiIKKyAgICAgICAgICAgICAgICAiXFx4ZjBcXHhmMVxceGYyXFx4ZjNcXHhmNFxceGY1XFx4ZjZcXHhmN1xceGY4XFx4ZjlcXHhmYVxceGZiXFx4ZmNcXHhmZCIKKyAgICAgICAgICAgICAgICAiXFx4ZmVcXHhmZiciKQorICAgICAgICAgICAgdGVzdHJlcHIgPSByZXByKHUnJy5qb2luKG1hcCh1bmljaHIsIHhyYW5nZSgyNTYpKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RyZXByLCBsYXRpbjFyZXByKQorICAgICAgICAgICAgIyBUZXN0IHJlcHIgd29ya3Mgb24gd2lkZSB1bmljb2RlIGVzY2FwZXMgd2l0aG91dCBvdmVyZmxvdy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1IlxVMDAwMTAwMDAiICogMzkgKyB1Ilx1ZmZmZiIgKiA0MDk2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcih1IlxVMDAwMTAwMDAiICogMzkgKyB1Ilx1ZmZmZiIgKiA0MDk2KSkKKworCisgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LnRlc3RfY291bnQoc2VsZikKKyAgICAgICAgIyBjaGVjayBtaXhlZCBhcmd1bWVudCB0eXBlcworICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgzLCAgJ2FhYScsICdjb3VudCcsIHUnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDAsICAnYWFhJywgJ2NvdW50JywgdSdiJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMywgdSdhYWEnLCAnY291bnQnLCAgJ2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgwLCB1J2FhYScsICdjb3VudCcsICAnYicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDAsIHUnYWFhJywgJ2NvdW50JywgICdiJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMSwgdSdhYWEnLCAnY291bnQnLCAgJ2EnLCAtMSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMywgdSdhYWEnLCAnY291bnQnLCAgJ2EnLCAtMTApCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDIsIHUnYWFhJywgJ2NvdW50JywgICdhJywgMCwgLTEpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDAsIHUnYWFhJywgJ2NvdW50JywgICdhJywgMCwgLTEwKQorCisgICAgZGVmIHRlc3RfZmluZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMCwgIHUnYWJjZGVmZ2hpYWJjJywgJ2ZpbmQnLCB1J2FiYycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDksICB1J2FiY2RlZmdoaWFiYycsICdmaW5kJywgdSdhYmMnLCAxKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgtMSwgdSdhYmNkZWZnaGlhYmMnLCAnZmluZCcsIHUnZGVmJywgNCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUnaGVsbG8nLmZpbmQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSdoZWxsbycuZmluZCwgNDIpCisKKyAgICBkZWYgdGVzdF9yZmluZChzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QudGVzdF9yZmluZChzZWxmKQorICAgICAgICAjIGNoZWNrIG1peGVkIGFyZ3VtZW50IHR5cGVzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDksICAgJ2FiY2RlZmdoaWFiYycsICdyZmluZCcsIHUnYWJjJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMTIsICAnYWJjZGVmZ2hpYWJjJywgJ3JmaW5kJywgdScnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgxMiwgdSdhYmNkZWZnaGlhYmMnLCAncmZpbmQnLCAgJycpCisKKyAgICBkZWYgdGVzdF9pbmRleChzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QudGVzdF9pbmRleChzZWxmKQorICAgICAgICAjIGNoZWNrIG1peGVkIGFyZ3VtZW50IHR5cGVzCisgICAgICAgIGZvciAodDEsIHQyKSBpbiAoKHN0ciwgdW5pY29kZSksICh1bmljb2RlLCBzdHIpKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDAsIHQxKCdhYmNkZWZnaGlhYmMnKSwgJ2luZGV4JywgIHQyKCcnKSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDMsIHQxKCdhYmNkZWZnaGlhYmMnKSwgJ2luZGV4JywgIHQyKCdkZWYnKSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDAsIHQxKCdhYmNkZWZnaGlhYmMnKSwgJ2luZGV4JywgIHQyKCdhYmMnKSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDksIHQxKCdhYmNkZWZnaGlhYmMnKSwgJ2luZGV4JywgIHQyKCdhYmMnKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQxKCdhYmNkZWZnaGlhYmMnKS5pbmRleCwgdDIoJ2hpYicpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdDEoJ2FiY2RlZmdoaWFiJykuaW5kZXgsICB0MignYWJjJyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0MSgnYWJjZGVmZ2hpJykuaW5kZXgsICB0MignZ2hpJyksIDgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0MSgnYWJjZGVmZ2hpJykuaW5kZXgsICB0MignZ2hpJyksIC0xKQorCisgICAgZGVmIHRlc3RfcmluZGV4KHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdC50ZXN0X3JpbmRleChzZWxmKQorICAgICAgICAjIGNoZWNrIG1peGVkIGFyZ3VtZW50IHR5cGVzCisgICAgICAgIGZvciAodDEsIHQyKSBpbiAoKHN0ciwgdW5pY29kZSksICh1bmljb2RlLCBzdHIpKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDEyLCB0MSgnYWJjZGVmZ2hpYWJjJyksICdyaW5kZXgnLCAgdDIoJycpKQorICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMywgIHQxKCdhYmNkZWZnaGlhYmMnKSwgJ3JpbmRleCcsICB0MignZGVmJykpCisgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCg5LCAgdDEoJ2FiY2RlZmdoaWFiYycpLCAncmluZGV4JywgIHQyKCdhYmMnKSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDAsICB0MSgnYWJjZGVmZ2hpYWJjJyksICdyaW5kZXgnLCAgdDIoJ2FiYycpLCAwLCAtMSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdDEoJ2FiY2RlZmdoaWFiYycpLnJpbmRleCwgIHQyKCdoaWInKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQxKCdkZWZnaGlhYmMnKS5yaW5kZXgsICB0MignZGVmJyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0MSgnZGVmZ2hpYWJjJykucmluZGV4LCAgdDIoJ2FiYycpLCAwLCAtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQxKCdhYmNkZWZnaGknKS5yaW5kZXgsICB0MignZ2hpJyksIDAsIDgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0MSgnYWJjZGVmZ2hpJykucmluZGV4LCAgdDIoJ2doaScpLCAwLCAtMSkKKworICAgIGRlZiB0ZXN0X3RyYW5zbGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSdiYmJjJywgdSdhYmFiYWJjJywgJ3RyYW5zbGF0ZScsIHtvcmQoJ2EnKTpOb25lfSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSdpaWljJywgdSdhYmFiYWJjJywgJ3RyYW5zbGF0ZScsIHtvcmQoJ2EnKTpOb25lLCBvcmQoJ2InKTpvcmQoJ2knKX0pCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KHUnaWlpeCcsIHUnYWJhYmFiYycsICd0cmFuc2xhdGUnLCB7b3JkKCdhJyk6Tm9uZSwgb3JkKCdiJyk6b3JkKCdpJyksIG9yZCgnYycpOnUneCd9KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCh1JzxpPjxpPjxpPmMnLCB1J2FiYWJhYmMnLCAndHJhbnNsYXRlJywge29yZCgnYScpOk5vbmUsIG9yZCgnYicpOnUnPGk+J30pCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KHUnYycsIHUnYWJhYmFiYycsICd0cmFuc2xhdGUnLCB7b3JkKCdhJyk6Tm9uZSwgb3JkKCdiJyk6dScnfSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSd4eXl4JywgdSd4engnLCAndHJhbnNsYXRlJywge29yZCgneicpOnUneXknfSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUnaGVsbG8nLnRyYW5zbGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1J2FiYWJhYmMnLnRyYW5zbGF0ZSwge29yZCgnYScpOicnfSkKKworICAgIGRlZiB0ZXN0X3NwbGl0KHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdC50ZXN0X3NwbGl0KHNlbGYpCisKKyAgICAgICAgIyBNaXhlZCBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoW3UnYScsIHUnYicsIHUnYycsIHUnZCddLCB1J2EvL2IvL2MvL2QnLCAnc3BsaXQnLCAnLy8nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChbdSdhJywgdSdiJywgdSdjJywgdSdkJ10sICdhLy9iLy9jLy9kJywgJ3NwbGl0JywgdScvLycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFt1J2VuZGNhc2UgJywgdScnXSwgdSdlbmRjYXNlIHRlc3QnLCAnc3BsaXQnLCAndGVzdCcpCisKKyAgICBkZWYgdGVzdF9qb2luKHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QudGVzdF9qb2luKHNlbGYpCisKKyAgICAgICAgIyBtaXhlZCBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSdhIGIgYyBkJywgdScgJywgJ2pvaW4nLCBbJ2EnLCAnYicsIHUnYycsIHUnZCddKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCh1J2FiY2QnLCB1JycsICdqb2luJywgKHUnYScsIHUnYicsIHUnYycsIHUnZCcpKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCh1J3cgeCB5IHonLCB1JyAnLCAnam9pbicsIHN0cmluZ190ZXN0cy5TZXF1ZW5jZSgnd3h5eicpKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCh1J2EgYiBjIGQnLCAnICcsICdqb2luJywgW3UnYScsIHUnYicsIHUnYycsIHUnZCddKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCh1J2EgYiBjIGQnLCAnICcsICdqb2luJywgWydhJywgJ2InLCB1J2MnLCB1J2QnXSkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgodSdhYmNkJywgJycsICdqb2luJywgKHUnYScsIHUnYicsIHUnYycsIHUnZCcpKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCh1J3cgeCB5IHonLCAnICcsICdqb2luJywgc3RyaW5nX3Rlc3RzLlNlcXVlbmNlKHUnd3h5eicpKQorCisgICAgZGVmIHRlc3Rfc3RyaXAoc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LnRlc3Rfc3RyaXAoc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB1ImhlbGxvIi5zdHJpcCwgIlx4ZmYiKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZShzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QudGVzdF9yZXBsYWNlKHNlbGYpCisKKyAgICAgICAgIyBtZXRob2QgY2FsbCBmb3J3YXJkZWQgZnJvbSBzdHIgaW1wbGVtZW50YXRpb24gYmVjYXVzZSBvZiB1bmljb2RlIGFyZ3VtZW50CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KHUnb25lQHR3byF0aHJlZSEnLCAnb25lIXR3byF0aHJlZSEnLCAncmVwbGFjZScsIHUnIScsIHUnQCcsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgJ3JlcGxhY2UnLnJlcGxhY2UsIHUiciIsIDQyKQorCisgICAgZGVmIHRlc3RfY29tcGFyaXNvbihzZWxmKToKKyAgICAgICAgIyBDb21wYXJpc29uczoKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUnYWJjJyA9PSAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhYmMnID09IHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUnYWJjJyA9PSB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J2FiY2QnID4gJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYWJjZCcgPiB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J2FiY2QnID4gdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdhYmMnIDwgJ2FiY2QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2FiYycgPCB1J2FiY2QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdhYmMnIDwgdSdhYmNkJykKKworICAgICAgICBpZiAwOgorICAgICAgICAgICAgIyBNb3ZlIHRoZXNlIHRlc3RzIHRvIGEgVW5pY29kZSBjb2xsYXRpb24gbW9kdWxlIHRlc3QuLi4KKyAgICAgICAgICAgICMgVGVzdGluZyBVVEYtMTYgY29kZSBwb2ludCBvcmRlciBjb21wYXJpc29ucy4uLgorCisgICAgICAgICAgICAjIE5vIHN1cnJvZ2F0ZXMsIG5vIGZpeHVwIHJlcXVpcmVkLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUnXHUwMDYxJyA8IHUnXHUyMGFjJykKKyAgICAgICAgICAgICMgTm9uIHN1cnJvZ2F0ZSBiZWxvdyBzdXJyb2dhdGUgdmFsdWUsIG5vIGZpeHVwIHJlcXVpcmVkCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodSdcdTAwNjEnIDwgdSdcdWQ4MDBcdWRjMDInKQorCisgICAgICAgICAgICAjIE5vbiBzdXJyb2dhdGUgYWJvdmUgc3Vycm9nYXRlIHZhbHVlLCBmaXh1cCByZXF1aXJlZAorICAgICAgICAgICAgZGVmIHRlc3RfbGVjbXAocywgczIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzIDwgczIpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X2ZpeHVwKHMpOgorICAgICAgICAgICAgICAgIHMyID0gdSdcdWQ4MDBcdWRjMDEnCisgICAgICAgICAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKKyAgICAgICAgICAgICAgICBzMiA9IHUnXHVkOTAwXHVkYzAxJworICAgICAgICAgICAgICAgIHRlc3RfbGVjbXAocywgczIpCisgICAgICAgICAgICAgICAgczIgPSB1J1x1ZGEwMFx1ZGMwMScKKyAgICAgICAgICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQorICAgICAgICAgICAgICAgIHMyID0gdSdcdWRiMDBcdWRjMDEnCisgICAgICAgICAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKKyAgICAgICAgICAgICAgICBzMiA9IHUnXHVkODAwXHVkZDAxJworICAgICAgICAgICAgICAgIHRlc3RfbGVjbXAocywgczIpCisgICAgICAgICAgICAgICAgczIgPSB1J1x1ZDkwMFx1ZGQwMScKKyAgICAgICAgICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQorICAgICAgICAgICAgICAgIHMyID0gdSdcdWRhMDBcdWRkMDEnCisgICAgICAgICAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKKyAgICAgICAgICAgICAgICBzMiA9IHUnXHVkYjAwXHVkZDAxJworICAgICAgICAgICAgICAgIHRlc3RfbGVjbXAocywgczIpCisgICAgICAgICAgICAgICAgczIgPSB1J1x1ZDgwMFx1ZGUwMScKKyAgICAgICAgICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQorICAgICAgICAgICAgICAgIHMyID0gdSdcdWQ5MDBcdWRlMDEnCisgICAgICAgICAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKKyAgICAgICAgICAgICAgICBzMiA9IHUnXHVkYTAwXHVkZTAxJworICAgICAgICAgICAgICAgIHRlc3RfbGVjbXAocywgczIpCisgICAgICAgICAgICAgICAgczIgPSB1J1x1ZGIwMFx1ZGUwMScKKyAgICAgICAgICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQorICAgICAgICAgICAgICAgIHMyID0gdSdcdWQ4MDBcdWRmZmYnCisgICAgICAgICAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKKyAgICAgICAgICAgICAgICBzMiA9IHUnXHVkOTAwXHVkZmZmJworICAgICAgICAgICAgICAgIHRlc3RfbGVjbXAocywgczIpCisgICAgICAgICAgICAgICAgczIgPSB1J1x1ZGEwMFx1ZGZmZicKKyAgICAgICAgICAgICAgICB0ZXN0X2xlY21wKHMsIHMyKQorICAgICAgICAgICAgICAgIHMyID0gdSdcdWRiMDBcdWRmZmYnCisgICAgICAgICAgICAgICAgdGVzdF9sZWNtcChzLCBzMikKKworICAgICAgICAgICAgICAgIHRlc3RfZml4dXAodSdcdWUwMDAnKQorICAgICAgICAgICAgICAgIHRlc3RfZml4dXAodSdcdWZmNjEnKQorCisgICAgICAgICMgU3Vycm9nYXRlcyBvbiBib3RoIHNpZGVzLCBubyBmaXh1cCByZXF1aXJlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdcdWQ4MDBcdWRjMDInIDwgdSdcdWQ4NGRcdWRjNTYnKQorCisgICAgZGVmIHRlc3RfY2FwaXRhbGl6ZShzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QudGVzdF9jYXBpdGFsaXplKHNlbGYpCisgICAgICAgICMgY2hlY2sgdGhhdCB0aXRsZWNhc2VkIGNoYXJzIGFyZSBsb3dlcmVkIGNvcnJlY3RseQorICAgICAgICAjIFx1MWZmYyBpcyB0aGUgdGl0bGVjYXNlZCBjaGFyCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1J1x1MWZmY1x1MWZmM1x1MWZmM1x1MWZmMycsCisgICAgICAgICAgICAgICAgICAgICAgICB1J1x1MWZmM1x1MWZmM1x1MWZmY1x1MWZmYycsICdjYXBpdGFsaXplJykKKyAgICAgICAgIyBjaGVjayB3aXRoIGNhc2VkIG5vbi1sZXR0ZXIgY2hhcnMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKHUnXHUyNGM1XHUyNGU4XHUyNGUzXHUyNGQ3XHUyNGRlXHUyNGRkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHUnXHUyNGM1XHUyNGNlXHUyNGM5XHUyNGJkXHUyNGM0XHUyNGMzJywgJ2NhcGl0YWxpemUnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwodSdcdTI0YzVcdTI0ZThcdTI0ZTNcdTI0ZDdcdTI0ZGVcdTI0ZGQnLAorICAgICAgICAgICAgICAgICAgICAgICAgdSdcdTI0ZGZcdTI0ZThcdTI0ZTNcdTI0ZDdcdTI0ZGVcdTI0ZGQnLCAnY2FwaXRhbGl6ZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1J1x1MjE2MFx1MjE3MVx1MjE3MicsCisgICAgICAgICAgICAgICAgICAgICAgICB1J1x1MjE2MFx1MjE2MVx1MjE2MicsICdjYXBpdGFsaXplJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKHUnXHUyMTYwXHUyMTcxXHUyMTcyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHUnXHUyMTcwXHUyMTcxXHUyMTcyJywgJ2NhcGl0YWxpemUnKQorICAgICAgICAjIGNoZWNrIHdpdGggTGwgY2hhcnMgd2l0aCBubyB1cHBlciAtIG5vdGhpbmcgY2hhbmdlcyBoZXJlCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCh1J1x1MDE5Ylx1MWQwMFx1MWQ4Nlx1MDIyMVx1MWZiNycsCisgICAgICAgICAgICAgICAgICAgICAgICB1J1x1MDE5Ylx1MWQwMFx1MWQ4Nlx1MDIyMVx1MWZiNycsICdjYXBpdGFsaXplJykKKworICAgIGRlZiB0ZXN0X2lzbG93ZXIoc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X2lzbG93ZXIoc2VsZikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsIHUnXHUxRkZjJywgJ2lzbG93ZXInKQorCisgICAgQHJlcXVpcmVzX3dpZGVfYnVpbGQKKyAgICBkZWYgdGVzdF9pc2xvd2VyX25vbl9ibXAoc2VsZik6CisgICAgICAgICMgbm9uLUJNUCwgdXBwZXJjYXNlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodSdcVTAwMDEwNDAxJy5pc2xvd2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodSdcVTAwMDEwNDI3Jy5pc2xvd2VyKCkpCisgICAgICAgICMgbm9uLUJNUCwgbG93ZXJjYXNlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J1xVMDAwMTA0MjknLmlzbG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUnXFUwMDAxMDQ0RScuaXNsb3dlcigpKQorICAgICAgICAjIG5vbi1CTVAsIG5vbi1jYXNlZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHUnXFUwMDAxRjQwRCcuaXNsb3dlcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHUnXFUwMDAxRjQ2RicuaXNsb3dlcigpKQorCisgICAgZGVmIHRlc3RfaXN1cHBlcihzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LnRlc3RfaXN1cHBlcihzZWxmKQorICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KEZhbHNlLCB1J1x1MUZGYycsICdpc3VwcGVyJykKKworICAgIEByZXF1aXJlc193aWRlX2J1aWxkCisgICAgZGVmIHRlc3RfaXN1cHBlcl9ub25fYm1wKHNlbGYpOgorICAgICAgICAjIG5vbi1CTVAsIHVwcGVyY2FzZQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdcVTAwMDEwNDAxJy5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J1xVMDAwMTA0MjcnLmlzdXBwZXIoKSkKKyAgICAgICAgIyBub24tQk1QLCBsb3dlcmNhc2UKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1J1xVMDAwMTA0MjknLmlzdXBwZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1J1xVMDAwMTA0NEUnLmlzdXBwZXIoKSkKKyAgICAgICAgIyBub24tQk1QLCBub24tY2FzZWQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1J1xVMDAwMUY0MEQnLmlzdXBwZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1J1xVMDAwMUY0NkYnLmlzdXBwZXIoKSkKKworICAgIGRlZiB0ZXN0X2lzdGl0bGUoc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X2lzdGl0bGUoc2VsZikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgdSdcdTFGRmMnLCAnaXN0aXRsZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFRydWUsIHUnR3JlZWsgXHUxRkZjaXRsZWNhc2VzIC4uLicsICdpc3RpdGxlJykKKworICAgIEByZXF1aXJlc193aWRlX2J1aWxkCisgICAgZGVmIHRlc3RfaXN0aXRsZV9ub25fYm1wKHNlbGYpOgorICAgICAgICAjIG5vbi1CTVAsIHVwcGVyY2FzZSArIGxvd2VyY2FzZQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdcVTAwMDEwNDAxXFUwMDAxMDQyOScuaXN0aXRsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdcVTAwMDEwNDI3XFUwMDAxMDQ0RScuaXN0aXRsZSgpKQorICAgICAgICAjIGFwcGFyZW50bHkgdGhlcmUgYXJlIG5vIHRpdGxlY2FzZWQgKEx0KSBub24tQk1QIGNoYXJzIGluIFVuaWNvZGUgNgorICAgICAgICBmb3IgY2ggaW4gW3UnXFUwMDAxMDQyOScsIHUnXFUwMDAxMDQ0RScsIHUnXFUwMDAxRjQwRCcsIHUnXFUwMDAxRjQ2RiddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjaC5pc3RpdGxlKCksICd7IXJ9IGlzIG5vdCB0aXRsZScuZm9ybWF0KGNoKSkKKworICAgIGRlZiB0ZXN0X2lzc3BhY2Uoc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X2lzc3BhY2Uoc2VsZikKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgdSdcdTIwMDAnLCAnaXNzcGFjZScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFRydWUsIHUnXHUyMDBhJywgJ2lzc3BhY2UnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChGYWxzZSwgdSdcdTIwMTQnLCAnaXNzcGFjZScpCisKKyAgICBAcmVxdWlyZXNfd2lkZV9idWlsZAorICAgIGRlZiB0ZXN0X2lzc3BhY2Vfbm9uX2JtcChzZWxmKToKKyAgICAgICAgIyBhcHBhcmVudGx5IHRoZXJlIGFyZSBubyBub24tQk1QIHNwYWNlcyBjaGFycyBpbiBVbmljb2RlIDYKKyAgICAgICAgZm9yIGNoIGluIFt1J1xVMDAwMTA0MDEnLCB1J1xVMDAwMTA0MjcnLCB1J1xVMDAwMTA0MjknLCB1J1xVMDAwMTA0NEUnLAorICAgICAgICAgICAgICAgICAgIHUnXFUwMDAxRjQwRCcsIHUnXFUwMDAxRjQ2RiddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjaC5pc3NwYWNlKCksICd7IXJ9IGlzIG5vdCBzcGFjZS4nLmZvcm1hdChjaCkpCisKKyAgICBAcmVxdWlyZXNfd2lkZV9idWlsZAorICAgIGRlZiB0ZXN0X2lzYWxudW1fbm9uX2JtcChzZWxmKToKKyAgICAgICAgZm9yIGNoIGluIFt1J1xVMDAwMTA0MDEnLCB1J1xVMDAwMTA0MjcnLCB1J1xVMDAwMTA0MjknLCB1J1xVMDAwMTA0NEUnLAorICAgICAgICAgICAgICAgICAgIHUnXFUwMDAxRDdGNicsIHUnXFUwMDAxMDRBMCcsIHUnXFUwMDAxMDRBMCcsIHUnXFUwMDAxRjEwNyddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoLmlzYWxudW0oKSwgJ3shcn0gaXMgYWxudW0uJy5mb3JtYXQoY2gpKQorCisgICAgZGVmIHRlc3RfaXNhbHBoYShzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LnRlc3RfaXNhbHBoYShzZWxmKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1J1x1MUZGYycsICdpc2FscGhhJykKKworICAgIEByZXF1aXJlc193aWRlX2J1aWxkCisgICAgZGVmIHRlc3RfaXNhbHBoYV9ub25fYm1wKHNlbGYpOgorICAgICAgICAjIG5vbi1CTVAsIGNhc2VkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J1xVMDAwMTA0MDEnLmlzYWxwaGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUnXFUwMDAxMDQyNycuaXNhbHBoYSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSdcVTAwMDEwNDI5Jy5pc2FscGhhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1J1xVMDAwMTA0NEUnLmlzYWxwaGEoKSkKKyAgICAgICAgIyBub24tQk1QLCBub24tY2FzZWQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1J1xVMDAwMUY0MEQnLmlzYWxwaGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1J1xVMDAwMUY0NkYnLmlzYWxwaGEoKSkKKworICAgIGRlZiB0ZXN0X2lzZGVjaW1hbChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsIHUnJywgJ2lzZGVjaW1hbCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KEZhbHNlLCB1J2EnLCAnaXNkZWNpbWFsJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgdScwJywgJ2lzZGVjaW1hbCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KEZhbHNlLCB1J1x1MjQ2MCcsICdpc2RlY2ltYWwnKSAjIENJUkNMRUQgRElHSVQgT05FCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KEZhbHNlLCB1J1x4YmMnLCAnaXNkZWNpbWFsJykgIyBWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVIKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgdSdcdTA2NjAnLCAnaXNkZWNpbWFsJykgIyBBUkFCSUMtSU5ESUMgRElHSVQgWkVSTworICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1JzAxMjM0NTY3ODknLCAnaXNkZWNpbWFsJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoRmFsc2UsIHUnMDEyMzQ1Njc4OWEnLCAnaXNkZWNpbWFsJykKKworICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2FiYycsICdpc2RlY2ltYWwnLCA0MikKKworICAgIEByZXF1aXJlc193aWRlX2J1aWxkCisgICAgZGVmIHRlc3RfaXNkZWNpbWFsX25vbl9ibXAoc2VsZik6CisgICAgICAgIGZvciBjaCBpbiBbdSdcVTAwMDEwNDAxJywgdSdcVTAwMDEwNDI3JywgdSdcVTAwMDEwNDI5JywgdSdcVTAwMDEwNDRFJywKKyAgICAgICAgICAgICAgICAgICB1J1xVMDAwMUY0MEQnLCB1J1xVMDAwMUY0NkYnLCB1J1xVMDAwMTEwNjUnLCB1J1xVMDAwMUYxMDcnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2guaXNkZWNpbWFsKCksICd7IXJ9IGlzIG5vdCBkZWNpbWFsLicuZm9ybWF0KGNoKSkKKyAgICAgICAgZm9yIGNoIGluIFt1J1xVMDAwMUQ3RjYnLCB1J1xVMDAwMTA0QTAnLCB1J1xVMDAwMTA0QTAnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaC5pc2RlY2ltYWwoKSwgJ3shcn0gaXMgZGVjaW1hbC4nLmZvcm1hdChjaCkpCisKKyAgICBkZWYgdGVzdF9pc2RpZ2l0KHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QudGVzdF9pc2RpZ2l0KHNlbGYpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFRydWUsIHUnXHUyNDYwJywgJ2lzZGlnaXQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChGYWxzZSwgdSdceGJjJywgJ2lzZGlnaXQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1J1x1MDY2MCcsICdpc2RpZ2l0JykKKworICAgIEByZXF1aXJlc193aWRlX2J1aWxkCisgICAgZGVmIHRlc3RfaXNkaWdpdF9ub25fYm1wKHNlbGYpOgorICAgICAgICBmb3IgY2ggaW4gW3UnXFUwMDAxMDQwMScsIHUnXFUwMDAxMDQyNycsIHUnXFUwMDAxMDQyOScsIHUnXFUwMDAxMDQ0RScsCisgICAgICAgICAgICAgICAgICAgdSdcVTAwMDFGNDBEJywgdSdcVTAwMDFGNDZGJywgdSdcVTAwMDExMDY1J106CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNoLmlzZGlnaXQoKSwgJ3shcn0gaXMgbm90IGEgZGlnaXQuJy5mb3JtYXQoY2gpKQorICAgICAgICBmb3IgY2ggaW4gW3UnXFUwMDAxRDdGNicsIHUnXFUwMDAxMDRBMCcsIHUnXFUwMDAxMDRBMCcsIHUnXFUwMDAxRjEwNyddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoLmlzZGlnaXQoKSwgJ3shcn0gaXMgYSBkaWdpdC4nLmZvcm1hdChjaCkpCisKKyAgICBkZWYgdGVzdF9pc251bWVyaWMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KEZhbHNlLCB1JycsICdpc251bWVyaWMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChGYWxzZSwgdSdhJywgJ2lzbnVtZXJpYycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KFRydWUsIHUnMCcsICdpc251bWVyaWMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1J1x1MjQ2MCcsICdpc251bWVyaWMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeChUcnVlLCB1J1x4YmMnLCAnaXNudW1lcmljJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgdSdcdTA2NjAnLCAnaXNudW1lcmljJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoVHJ1ZSwgdScwMTIzNDU2Nzg5JywgJ2lzbnVtZXJpYycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KEZhbHNlLCB1JzAxMjM0NTY3ODlhJywgJ2lzbnVtZXJpYycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1ImFiYyIuaXNudW1lcmljLCA0MikKKworICAgIEByZXF1aXJlc193aWRlX2J1aWxkCisgICAgZGVmIHRlc3RfaXNudW1lcmljX25vbl9ibXAoc2VsZik6CisgICAgICAgIGZvciBjaCBpbiBbdSdcVTAwMDEwNDAxJywgdSdcVTAwMDEwNDI3JywgdSdcVTAwMDEwNDI5JywgdSdcVTAwMDEwNDRFJywKKyAgICAgICAgICAgICAgICAgICB1J1xVMDAwMUY0MEQnLCB1J1xVMDAwMUY0NkYnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2guaXNudW1lcmljKCksICd7IXJ9IGlzIG5vdCBudW1lcmljLicuZm9ybWF0KGNoKSkKKyAgICAgICAgZm9yIGNoIGluIFt1J1xVMDAwMTAxMDcnLCB1J1xVMDAwMUQ3RjYnLCB1J1xVMDAwMjNiMWInLAorICAgICAgICAgICAgICAgICAgIHUnXFUwMDAxMDRBMCcsIHUnXFUwMDAxRjEwNyddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoLmlzbnVtZXJpYygpLCAneyFyfSBpcyBudW1lcmljLicuZm9ybWF0KGNoKSkKKworICAgIEByZXF1aXJlc193aWRlX2J1aWxkCisgICAgZGVmIHRlc3Rfc3Vycm9nYXRlcyhzZWxmKToKKyAgICAgICAgIyB0aGlzIHRlc3QgYWN0dWFsbHkgcGFzc2VzIG9uIG5hcnJvdyB0b28sIGJ1dCBpdCdzIGp1c3QgYnkgYWNjaWRlbnQuCisgICAgICAgICMgU3Vycm9nYXRlcyBhcmUgc2VlbiBhcyBub24tY2FzZWQgY2hhcnMsIHNvIHUnWFx1RDgwMFgnIGlzIGFzCisgICAgICAgICMgdXBwZXJjYXNlIGFzICdYIFgnCisgICAgICAgIGZvciBzIGluICh1J2FcdUQ4MDBiXHVERkZGJywgdSdhXHVERkZGYlx1RDgwMCcsCisgICAgICAgICAgICAgICAgICB1J2FcdUQ4MDBiXHVERkZGYScsIHUnYVx1REZGRmJcdUQ4MDBhJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5pc2xvd2VyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuaXN1cHBlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLmlzdGl0bGUoKSkKKyAgICAgICAgZm9yIHMgaW4gKHUnQVx1RDgwMEJcdURGRkYnLCB1J0FcdURGRkZCXHVEODAwJywKKyAgICAgICAgICAgICAgICAgIHUnQVx1RDgwMEJcdURGRkZBJywgdSdBXHVERkZGQlx1RDgwMEEnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5pc2xvd2VyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5pc3VwcGVyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5pc3RpdGxlKCkpCisKKyAgICAgICAgZm9yIG1ldGhfbmFtZSBpbiAoJ2lzbG93ZXInLCAnaXN1cHBlcicsICdpc3RpdGxlJyk6CisgICAgICAgICAgICBtZXRoID0gZ2V0YXR0cih1bmljb2RlLCBtZXRoX25hbWUpCisgICAgICAgICAgICBmb3IgcyBpbiAodSdcdUQ4MDAnLCB1J1x1REZGRicsIHUnXHVEODAwXHVEODAwJywgdSdcdURGRkZcdURGRkYnKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1ldGgocyksICclci4lcygpIGlzIEZhbHNlJyAlIChzLCBtZXRoX25hbWUpKQorCisgICAgICAgIGZvciBtZXRoX25hbWUgaW4gKCdpc2FscGhhJywgJ2lzYWxudW0nLCAnaXNkaWdpdCcsICdpc3NwYWNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzZGVjaW1hbCcsICdpc251bWVyaWMnKToKKyAgICAgICAgICAgIG1ldGggPSBnZXRhdHRyKHVuaWNvZGUsIG1ldGhfbmFtZSkKKyAgICAgICAgICAgIGZvciBzIGluICh1J1x1RDgwMCcsIHUnXHVERkZGJywgdSdcdUQ4MDBcdUQ4MDAnLCB1J1x1REZGRlx1REZGRicsCisgICAgICAgICAgICAgICAgICAgICAgdSdhXHVEODAwYlx1REZGRicsIHUnYVx1REZGRmJcdUQ4MDAnLAorICAgICAgICAgICAgICAgICAgICAgIHUnYVx1RDgwMGJcdURGRkZhJywgdSdhXHVERkZGYlx1RDgwMGEnKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1ldGgocyksICclci4lcygpIGlzIEZhbHNlJyAlIChzLCBtZXRoX25hbWUpKQorCisKKyAgICBAcmVxdWlyZXNfd2lkZV9idWlsZAorICAgIGRlZiB0ZXN0X2xvd2VyKHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdC50ZXN0X2xvd2VyKHNlbGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwNDI3Jy5sb3dlcigpLCB1J1xVMDAwMTA0NEYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXFUwMDAxMDQyN1xVMDAwMTA0MjcnLmxvd2VyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSdcVTAwMDEwNDRGXFUwMDAxMDQ0RicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwNDI3XFUwMDAxMDQ0RicubG93ZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1xVMDAwMTA0NEZcVTAwMDEwNDRGJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1hcVTAwMDEwNDI3eFxVMDAwMTA0NEYnLmxvd2VyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSd4XFUwMDAxMDQ0RnhcVTAwMDEwNDRGJykKKworICAgIEByZXF1aXJlc193aWRlX2J1aWxkCisgICAgZGVmIHRlc3RfdXBwZXIoc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LnRlc3RfdXBwZXIoc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTA0NEYnLnVwcGVyKCksIHUnXFUwMDAxMDQyNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwNDRGXFUwMDAxMDQ0RicudXBwZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1xVMDAwMTA0MjdcVTAwMDEwNDI3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTA0MjdcVTAwMDEwNDRGJy51cHBlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnXFUwMDAxMDQyN1xVMDAwMTA0MjcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnWFxVMDAwMTA0Mjd4XFUwMDAxMDQ0RicudXBwZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1hcVTAwMDEwNDI3WFxVMDAwMTA0MjcnKQorCisgICAgQHJlcXVpcmVzX3dpZGVfYnVpbGQKKyAgICBkZWYgdGVzdF9jYXBpdGFsaXplKHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdC50ZXN0X2NhcGl0YWxpemUoc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTA0NEYnLmNhcGl0YWxpemUoKSwgdSdcVTAwMDEwNDI3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTA0NEZcVTAwMDEwNDRGJy5jYXBpdGFsaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSdcVTAwMDEwNDI3XFUwMDAxMDQ0RicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwNDI3XFUwMDAxMDQ0RicuY2FwaXRhbGl6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnXFUwMDAxMDQyN1xVMDAwMTA0NEYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXFUwMDAxMDQ0RlxVMDAwMTA0MjcnLmNhcGl0YWxpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1xVMDAwMTA0MjdcVTAwMDEwNDRGJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1hcVTAwMDEwNDI3eFxVMDAwMTA0NEYnLmNhcGl0YWxpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1hcVTAwMDEwNDRGeFxVMDAwMTA0NEYnKQorCisgICAgQHJlcXVpcmVzX3dpZGVfYnVpbGQKKyAgICBkZWYgdGVzdF90aXRsZShzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LnRlc3RfdGl0bGUoc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTA0NEYnLnRpdGxlKCksIHUnXFUwMDAxMDQyNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwNDRGXFUwMDAxMDQ0RicudGl0bGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1xVMDAwMTA0MjdcVTAwMDEwNDRGJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTA0NEZcVTAwMDEwNDRGIFxVMDAwMTA0NEZcVTAwMDEwNDRGJy50aXRsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnXFUwMDAxMDQyN1xVMDAwMTA0NEYgXFUwMDAxMDQyN1xVMDAwMTA0NEYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXFUwMDAxMDQyN1xVMDAwMTA0NEYgXFUwMDAxMDQyN1xVMDAwMTA0NEYnLnRpdGxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSdcVTAwMDEwNDI3XFUwMDAxMDQ0RiBcVTAwMDEwNDI3XFUwMDAxMDQ0RicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwNDRGXFUwMDAxMDQyNyBcVTAwMDEwNDRGXFUwMDAxMDQyNycudGl0bGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1xVMDAwMTA0MjdcVTAwMDEwNDRGIFxVMDAwMTA0MjdcVTAwMDEwNDRGJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1hcVTAwMDEwNDI3eFxVMDAwMTA0NEYgWFxVMDAwMTA0Mjd4XFUwMDAxMDQ0RicudGl0bGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1hcVTAwMDEwNDRGeFxVMDAwMTA0NEYgWFxVMDAwMTA0NEZ4XFUwMDAxMDQ0RicpCisKKyAgICBAcmVxdWlyZXNfd2lkZV9idWlsZAorICAgIGRlZiB0ZXN0X3N3YXBjYXNlKHNlbGYpOgorICAgICAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdC50ZXN0X3N3YXBjYXNlKHNlbGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwNDRGJy5zd2FwY2FzZSgpLCB1J1xVMDAwMTA0MjcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXFUwMDAxMDQyNycuc3dhcGNhc2UoKSwgdSdcVTAwMDEwNDRGJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1xVMDAwMTA0NEZcVTAwMDEwNDRGJy5zd2FwY2FzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUnXFUwMDAxMDQyN1xVMDAwMTA0MjcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXFUwMDAxMDQyN1xVMDAwMTA0NEYnLnN3YXBjYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSdcVTAwMDEwNDRGXFUwMDAxMDQyNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcVTAwMDEwNDRGXFUwMDAxMDQyNycuc3dhcGNhc2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J1xVMDAwMTA0MjdcVTAwMDEwNDRGJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1hcVTAwMDEwNDI3eFxVMDAwMTA0NEYnLnN3YXBjYXNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSd4XFUwMDAxMDQ0RlhcVTAwMDEwNDI3JykKKworICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgorICAgICAgICAjIFRlc3RpbmcgVW5pY29kZSBjb250YWlucyBtZXRob2QKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIHUnYWJkYicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCB1J2JkYWInKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgdSdiZGFiYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCB1J2JkYmEnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgdSdiZGJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2EnLCB1J2JkYmEnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUnYScsIHUnYmRiJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih1J2EnLCAnYmRiJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2EnLCAnYmRiYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdhJywgKCdhJywxLE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYScsICgxLE5vbmUsJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2EnLCAoMSxOb25lLHUnYScpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgKCdhJywxLE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgKDEsTm9uZSwnYScpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgKDEsTm9uZSx1J2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYScsICgneCcsMSx1J3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYScsICgneCcsMSxOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih1J2FiY2QnLCB1J2FiY3h4eHgnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnYWInLCB1J2FiY2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhYicsIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2FiJywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdhYicsICgxLE5vbmUsdSdhYicpKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnJywgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCcnLCB1J2FiYycpCisKKyAgICAgICAgIyBJZiB0aGUgZm9sbG93aW5nIGZhaWxzIGVpdGhlcgorICAgICAgICAjIHRoZSBjb250YWlucyBvcGVyYXRvciBkb2VzIG5vdCBwcm9wYWdhdGUgVW5pY29kZUVycm9ycyBvcgorICAgICAgICAjIHNvbWVvbmUgaGFzIGNoYW5nZWQgdGhlIGRlZmF1bHQgZW5jb2RpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCAnZ1x4ZTJ0ZWF1Jy5fX2NvbnRhaW5zX18sIHUnXHhlMicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgdSdnXHhlMnRlYXUnLl9fY29udGFpbnNfXywgJ1x4ZTInKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odScnLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJywgdScnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnJywgdScnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnJywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJycsIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1JycsIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih1J1wwJywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1wwJywgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUnXDAnLCB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdcMCcsICdcMGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1wwJywgdSdcMGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdcMCcsIHUnXDBhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnXDAnLCAnYWJjXDAnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdcMCcsIHUnYWJjXDAnKQorICAgICAgICBzZWxmLmFzc2VydEluKHUnXDAnLCB1J2FiY1wwJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2EnLCAnXDBhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgdSdcMGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdhJywgdSdcMGFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odSdhc2RmJywgJ2FzZGYnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhc2RmJywgdSdhc2RmJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1J2FzZGYnLCB1J2FzZGYnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUnYXNkZicsICdhc2QnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhc2RmJywgdSdhc2QnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUnYXNkZicsIHUnYXNkJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih1J2FzZGYnLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYXNkZicsIHUnJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih1J2FzZGYnLCB1JycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1ImFiYyIuX19jb250YWluc19fKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHUiYWJjIi5fX2NvbnRhaW5zX18sIG9iamVjdCgpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0dGluZyhzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LnRlc3RfZm9ybWF0dGluZyhzZWxmKQorICAgICAgICAjIFRlc3RpbmcgVW5pY29kZSBmb3JtYXR0aW5nIHN0cmluZ3MuLi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiVzLCAlcyIgJSAodSJhYmMiLCAiYWJjIiksIHUnYWJjLCBhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiJXMsICVzLCAlaSwgJWYsICU1LjJmIiAlICh1ImFiYyIsICJhYmMiLCAxLCAyLCAzKSwgdSdhYmMsIGFiYywgMSwgMi4wMDAwMDAsICAzLjAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiVzLCAlcywgJWksICVmLCAlNS4yZiIgJSAodSJhYmMiLCAiYWJjIiwgMSwgLTIsIDMpLCB1J2FiYywgYWJjLCAxLCAtMi4wMDAwMDAsICAzLjAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiVzLCAlcywgJWksICVmLCAlNS4yZiIgJSAodSJhYmMiLCAiYWJjIiwgLTEsIC0yLCAzLjUpLCB1J2FiYywgYWJjLCAtMSwgLTIuMDAwMDAwLCAgMy41MCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIlcywgJXMsICVpLCAlZiwgJTUuMmYiICUgKHUiYWJjIiwgImFiYyIsIC0xLCAtMiwgMy41NyksIHUnYWJjLCBhYmMsIC0xLCAtMi4wMDAwMDAsICAzLjU3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiVzLCAlcywgJWksICVmLCAlNS4yZiIgJSAodSJhYmMiLCAiYWJjIiwgLTEsIC0yLCAxMDAzLjU3KSwgdSdhYmMsIGFiYywgLTEsIC0yLjAwMDAwMCwgMTAwMy41NycpCisgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1IiVyLCAlciIgJSAodSJhYmMiLCAiYWJjIiksIHUidSdhYmMnLCAnYWJjJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIlKHgpcywgJSh5KXMiICUgeyd4Jzp1ImFiYyIsICd5JzoiZGVmIn0sIHUnYWJjLCBkZWYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiJSh4KXMsICUoXHhmYylzIiAlIHsneCc6dSJhYmMiLCB1J1x4ZmMnOiJkZWYifSwgdSdhYmMsIGRlZicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1JyVjJyAlIDB4MTIzNCwgdSdcdTEyMzQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCB1IiVjIi5fX21vZF9fLCAoc3lzLm1heHVuaWNvZGUrMSwpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1IiUuMVx1MTAzMmYiLl9fbW9kX18sICgxLjAvMykpCisKKyAgICAgICAgZm9yIG51bSBpbiByYW5nZSgweDAwLDB4ODApOgorICAgICAgICAgICAgY2hhciA9IGNocihudW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiJWMiICUgY2hhciwgdW5pY29kZShjaGFyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSIlYyIgJSBudW0sIHVuaWNvZGUoY2hhcikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hhciA9PSB1IiVjIiAlIGNoYXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hhciA9PSB1IiVjIiAlIG51bSkKKyAgICAgICAgIyBJc3N1ZSA3NjQ5CisgICAgICAgIGZvciBudW0gaW4gcmFuZ2UoMHg4MCwweDEwMCk6CisgICAgICAgICAgICB1Y2hhciA9IHVuaWNocihudW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVjaGFyLCB1IiVjIiAlIG51bSkgICAjIHdvcmtzIG9ubHkgd2l0aCBpbnRzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVjaGFyLCB1IiVjIiAlIHVjaGFyKSAjIGFuZCB1bmljb2RlIGNoYXJzCisgICAgICAgICAgICAjIHRoZSBpbXBsaWNpdCBkZWNvZGluZyBzaG91bGQgZmFpbCBmb3Igbm9uLWFzY2lpIGNoYXJzCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIHUiJWMiLl9fbW9kX18sIGNocihudW0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCB1IiVzIi5fX21vZF9fLCBjaHIobnVtKSkKKworICAgICAgICAjIGZvcm1hdHRpbmcgam9icyBkZWxlZ2F0ZWQgZnJvbSB0aGUgc3RyaW5nIGltcGxlbWVudGF0aW9uOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylzLi4uJyAlIHsnZm9vJzp1ImFiYyJ9LCB1Jy4uLmFiYy4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKXMuLi4nICUgeydmb28nOiJhYmMifSwgJy4uLmFiYy4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKXMuLi4nICUge3UnZm9vJzoiYWJjIn0sICcuLi5hYmMuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylzLi4uJyAlIHt1J2Zvbyc6dSJhYmMifSwgdScuLi5hYmMuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylzLi4uJyAlIHt1J2Zvbyc6dSJhYmMiLCdkZWYnOjEyM30sICB1Jy4uLmFiYy4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKXMuLi4nICUge3UnZm9vJzp1ImFiYyIsdSdkZWYnOjEyM30sIHUnLi4uYWJjLi4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJXMuLi4lcy4uLiVzLi4uJXMuLi4nICUgKDEsMiwzLHUiYWJjIiksIHUnLi4uMS4uLjIuLi4zLi4uYWJjLi4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJSUuLi4lJXMuLi4lcy4uLiVzLi4uJXMuLi4lcy4uLicgJSAoMSwyLDMsdSJhYmMiKSwgdScuLi4lLi4uJXMuLi4xLi4uMi4uLjMuLi5hYmMuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lcy4uLicgJSB1ImFiYyIsIHUnLi4uYWJjLi4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJSpzJyAlICg1LHUnYWJjJywpLCB1JyAgYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJSpzJyAlICgtNSx1J2FiYycsKSwgdSdhYmMgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyUqLipzJyAlICg1LDIsdSdhYmMnLCksIHUnICAgYWInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclKi4qcycgJSAoNSwzLHUnYWJjJywpLCB1JyAgYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJWkgJSouKnMnICUgKDEwLCA1LDMsdSdhYmMnLCksIHUnMTAgICBhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclaSVzICUqLipzJyAlICgxMCwgMywgNSwgMywgdSdhYmMnLCksIHUnMTAzICAgYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJWMnICUgdSdhJywgdSdhJykKKyAgICAgICAgY2xhc3MgV3JhcHBlcjoKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1J1x1MTIzNCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJXMnICUgV3JhcHBlcigpLCB1J1x1MTIzNCcpCisKKyAgICBAdGVzdF9zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2Zvcm1hdHRpbmdfaHVnZV9wcmVjaXNpb24oc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBJTlRfTUFYCisgICAgICAgIGZvcm1hdF9zdHJpbmcgPSB1IiUue31mIi5mb3JtYXQoSU5UX01BWCArIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICByZXN1bHQgPSBmb3JtYXRfc3RyaW5nICUgMi4zNAorCisgICAgZGVmIHRlc3RfZm9ybWF0dGluZ19odWdlX3dpZHRoKHNlbGYpOgorICAgICAgICBmb3JtYXRfc3RyaW5nID0gdSIle31mIi5mb3JtYXQoc3lzLm1heHNpemUgKyAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0X3N0cmluZyAlIDIuMzQKKworICAgIGRlZiB0ZXN0X3N0YXJ0c3dpdGhfZW5kc3dpdGhfZXJyb3JzKHNlbGYpOgorICAgICAgICBmb3IgbWV0aCBpbiAodSdmb28nLnN0YXJ0c3dpdGgsIHUnZm9vJy5lbmRzd2l0aCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvcik6CisgICAgICAgICAgICAgICAgbWV0aCgnXHhmZicpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgbWV0aChbJ2YnXSkKKyAgICAgICAgICAgIGV4YyA9IHN0cihjbS5leGNlcHRpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCd1bmljb2RlJywgZXhjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignc3RyJywgZXhjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigndHVwbGUnLCBleGMpCisKKyAgICBAdGVzdF9zdXBwb3J0LnJ1bl93aXRoX2xvY2FsZSgnTENfQUxMJywgJ2RlX0RFJywgJ2ZyX0ZSJykKKyAgICBkZWYgdGVzdF9mb3JtYXRfZmxvYXQoc2VsZik6CisgICAgICAgICMgc2hvdWxkIG5vdCBmb3JtYXQgd2l0aCBhIGNvbW1hLCBidXQgYWx3YXlzIHdpdGggQyBsb2NhbGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1JzEuMCcsIHUnJS4xZicgJSAxLjApCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgIyB1bmljb2RlKG9iaikgdGVzdHMgKHRoaXMgbWFwcyB0byBQeU9iamVjdF9Vbmljb2RlKCkgYXQgQyBsZXZlbCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdW5pY29kZSh1J3VuaWNvZGUgcmVtYWlucyB1bmljb2RlJyksCisgICAgICAgICAgICB1J3VuaWNvZGUgcmVtYWlucyB1bmljb2RlJworICAgICAgICApCisKKyAgICAgICAgY2xhc3MgVW5pY29kZVN1YmNsYXNzKHVuaWNvZGUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1bmljb2RlKFVuaWNvZGVTdWJjbGFzcygndW5pY29kZSBzdWJjbGFzcyBiZWNvbWVzIHVuaWNvZGUnKSksCisgICAgICAgICAgICB1J3VuaWNvZGUgc3ViY2xhc3MgYmVjb21lcyB1bmljb2RlJworICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHVuaWNvZGUoJ3N0cmluZ3MgYXJlIGNvbnZlcnRlZCB0byB1bmljb2RlJyksCisgICAgICAgICAgICB1J3N0cmluZ3MgYXJlIGNvbnZlcnRlZCB0byB1bmljb2RlJworICAgICAgICApCisKKyAgICAgICAgY2xhc3MgVW5pY29kZUNvbXBhdDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYueAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1bmljb2RlKFVuaWNvZGVDb21wYXQoJ19fdW5pY29kZV9fIGNvbXBhdGlibGUgb2JqZWN0cyBhcmUgcmVjb2duaXplZCcpKSwKKyAgICAgICAgICAgIHUnX191bmljb2RlX18gY29tcGF0aWJsZSBvYmplY3RzIGFyZSByZWNvZ25pemVkJykKKworICAgICAgICBjbGFzcyBTdHJpbmdDb21wYXQ6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYueAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1bmljb2RlKFN0cmluZ0NvbXBhdCgnX19zdHJfXyBjb21wYXRpYmxlIG9iamVjdHMgYXJlIHJlY29nbml6ZWQnKSksCisgICAgICAgICAgICB1J19fc3RyX18gY29tcGF0aWJsZSBvYmplY3RzIGFyZSByZWNvZ25pemVkJworICAgICAgICApCisKKyAgICAgICAgIyB1bmljb2RlKG9iaikgaXMgY29tcGF0aWJsZSB0byBzdHIoKToKKworICAgICAgICBvID0gU3RyaW5nQ29tcGF0KCd1bmljb2RlKG9iaikgaXMgY29tcGF0aWJsZSB0byBzdHIoKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShvKSwgdSd1bmljb2RlKG9iaikgaXMgY29tcGF0aWJsZSB0byBzdHIoKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG8pLCAndW5pY29kZShvYmopIGlzIGNvbXBhdGlibGUgdG8gc3RyKCknKQorCisgICAgICAgICMgJS1mb3JtYXR0aW5nIGFuZCAuX191bmljb2RlX18oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICBVbmljb2RlQ29tcGF0KHUidSclcycgJSBvYmogdXNlcyBvYmouX191bmljb2RlX18oKSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUidSclcycgJSBvYmogdXNlcyBvYmouX191bmljb2RlX18oKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSclcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVDb21wYXQodSJ1JyVzJyAlIG9iaiBmYWxscyBiYWNrIHRvIG9iai5fX3N0cl9fKCkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1InUnJXMnICUgb2JqIGZhbGxzIGJhY2sgdG8gb2JqLl9fc3RyX18oKSIpCisKKyAgICAgICAgZm9yIG9iaiBpbiAoMTIzLCAxMjMuNDUsIDEyM0wpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKG9iaiksIHVuaWNvZGUoc3RyKG9iaikpKQorCisgICAgICAgICMgdW5pY29kZShvYmosIGVuY29kaW5nLCBlcnJvcikgdGVzdHMgKHRoaXMgbWFwcyB0bworICAgICAgICAjIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdCgpIGF0IEMgbGV2ZWwpCisKKyAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdqYXZhJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgICAgICBUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgdW5pY29kZSwKKyAgICAgICAgICAgICAgICB1J2RlY29kaW5nIHVuaWNvZGUgaXMgbm90IHN1cHBvcnRlZCcsCisgICAgICAgICAgICAgICAgJ3V0Zi04JywKKyAgICAgICAgICAgICAgICAnc3RyaWN0JworICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB1bmljb2RlKCdzdHJpbmdzIGFyZSBkZWNvZGVkIHRvIHVuaWNvZGUnLCAndXRmLTgnLCAnc3RyaWN0JyksCisgICAgICAgICAgICB1J3N0cmluZ3MgYXJlIGRlY29kZWQgdG8gdW5pY29kZScKKyAgICAgICAgKQorCisgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpOgorICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1ZmZlcignY2hhcmFjdGVyIGJ1ZmZlcnMgYXJlIGRlY29kZWQgdG8gdW5pY29kZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHVuaWNvZGUoCisgICAgICAgICAgICAgICAgICAgIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgJ3V0Zi04JywKKyAgICAgICAgICAgICAgICAgICAgJ3N0cmljdCcKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIHUnY2hhcmFjdGVyIGJ1ZmZlcnMgYXJlIGRlY29kZWQgdG8gdW5pY29kZScKKyAgICAgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHVuaWNvZGUsIDQyLCA0MiwgNDIpCisKKyAgICBkZWYgdGVzdF9jb2RlY3NfdXRmNyhzZWxmKToKKyAgICAgICAgdXRmVGVzdHMgPSBbCisgICAgICAgICAgICAodSdBXHUyMjYyXHUwMzkxLicsICdBK0ltSURrUS4nKSwgICAgICAgICAgICAgIyBSRkMyMTUyIGV4YW1wbGUKKyAgICAgICAgICAgICh1J0hpIE1vbSAtXHUyNjNhLSEnLCAnSGkgTW9tIC0rSmpvLS0hJyksICAgICAjIFJGQzIxNTIgZXhhbXBsZQorICAgICAgICAgICAgKHUnXHU2NUU1XHU2NzJDXHU4QTlFJywgJytaZVZuTElxZS0nKSwgICAgICAgICMgUkZDMjE1MiBleGFtcGxlCisgICAgICAgICAgICAodSdJdGVtIDMgaXMgXHUwMGEzMS4nLCAnSXRlbSAzIGlzICtBS00tMS4nKSwgIyBSRkMyMTUyIGV4YW1wbGUKKyAgICAgICAgICAgICh1JysnLCAnKy0nKSwKKyAgICAgICAgICAgICh1JystJywgJystLScpLAorICAgICAgICAgICAgKHUnKz8nLCAnKy0/JyksCisgICAgICAgICAgICAodSdcPycsICcrQUZ3PycpLAorICAgICAgICAgICAgKHUnKz8nLCAnKy0/JyksCisgICAgICAgICAgICAodXInXFw/JywgJytBRndBWEE/JyksCisgICAgICAgICAgICAodXInXFxcPycsICcrQUZ3QVhBQmM/JyksCisgICAgICAgICAgICAodXInKystLScsICcrLSstLS0nKSwKKyAgICAgICAgICAgICh1J1xVMDAwYWJjZGUnLCAnKzJtL2MzZy0nKSwgICAgICAgICAgICAgICAgICAjIHN1cnJvZ2F0ZSBwYWlycworICAgICAgICAgICAgKHUnLycsICcvJyksCisgICAgICAgIF0KKworICAgICAgICBmb3IgKHgsIHkpIGluIHV0ZlRlc3RzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmVuY29kZSgndXRmLTcnKSwgeSkKKworICAgICAgICAjIFVucGFpcmVkIHN1cnJvZ2F0ZXMgYXJlIHBhc3NlZCB0aHJvdWdoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcdUQ4MDEnLmVuY29kZSgndXRmLTcnKSwgJysyQUUtJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1RDgwMXgnLmVuY29kZSgndXRmLTcnKSwgJysyQUUteCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcdURDMDEnLmVuY29kZSgndXRmLTcnKSwgJyszQUUtJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1REMwMXgnLmVuY29kZSgndXRmLTcnKSwgJyszQUUteCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJysyQUUtJy5kZWNvZGUoJ3V0Zi03JyksIHUnXHVEODAxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnKzJBRS14Jy5kZWNvZGUoJ3V0Zi03JyksIHUnXHVEODAxeCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyszQUUtJy5kZWNvZGUoJ3V0Zi03JyksIHUnXHVEQzAxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnKzNBRS14Jy5kZWNvZGUoJ3V0Zi03JyksIHUnXHVEQzAxeCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1RDgwMVxVMDAwYWJjZGUnLmVuY29kZSgndXRmLTcnKSwgJysyQUhhYjl6ZS0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcrMkFIYWI5emUtJy5kZWNvZGUoJ3V0Zi03JyksIHUnXHVEODAxXFUwMDBhYmNkZScpCisKKyAgICAgICAgIyBEaXJlY3QgZW5jb2RlZCBjaGFyYWN0ZXJzCisgICAgICAgIHNldF9kID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JygpLC0uLzo/IgorICAgICAgICAjIE9wdGlvbmFsIGRpcmVjdCBjaGFyYWN0ZXJzCisgICAgICAgIHNldF9vID0gJyEiIyQlJio7PD0+QFtdXl9ge3x9JworICAgICAgICBmb3IgYyBpbiBzZXRfZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5lbmNvZGUoJ3V0ZjcnKSwgYy5lbmNvZGUoJ2FzY2lpJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZW5jb2RlKCdhc2NpaScpLmRlY29kZSgndXRmNycpLCB1bmljb2RlKGMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMgPT0gYy5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKCd1dGY3JykpCisgICAgICAgIGZvciBjIGluIHNldF9vOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmVuY29kZSgnYXNjaWknKS5kZWNvZGUoJ3V0ZjcnKSwgdW5pY29kZShjKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjID09IGMuZW5jb2RlKCdhc2NpaScpLmRlY29kZSgndXRmNycpKQorCisgICAgZGVmIHRlc3RfY29kZWNzX3V0Zjgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodScnLmVuY29kZSgndXRmLTgnKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcdTIwYWMnLmVuY29kZSgndXRmLTgnKSwgJ1x4ZTJceDgyXHhhYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdcdWQ4MDBcdWRjMDInLmVuY29kZSgndXRmLTgnKSwgJ1x4ZjBceDkwXHg4MFx4ODInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnXHVkODRkXHVkYzU2Jy5lbmNvZGUoJ3V0Zi04JyksICdceGYwXHhhM1x4OTFceDk2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1ZDgwMCcuZW5jb2RlKCd1dGYtOCcpLCAnXHhlZFx4YTBceDgwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1x1ZGMwMCcuZW5jb2RlKCd1dGYtOCcpLCAnXHhlZFx4YjBceDgwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICh1J1x1ZDgwMFx1ZGMwMicqMTAwMCkuZW5jb2RlKCd1dGYtOCcpLAorICAgICAgICAgICAgJ1x4ZjBceDkwXHg4MFx4ODInKjEwMDAKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdSdcdTZiNjNcdTc4YmFcdTMwNmJcdThhMDBcdTMwNDZcdTMwNjhcdTdmZmJcdThhMzNcdTMwNmYnCisgICAgICAgICAgICB1J1x1MzA1NVx1MzA4Y1x1MzA2Nlx1MzA0NFx1MzA3ZVx1MzA1Ylx1MzA5M1x1MzAwMlx1NGUwMCcKKyAgICAgICAgICAgIHUnXHU5MGU4XHUzMDZmXHUzMGM5XHUzMGE0XHUzMGM0XHU4YTllXHUzMDY3XHUzMDU5XHUzMDRjJworICAgICAgICAgICAgdSdcdTMwMDFcdTMwNDJcdTMwNjhcdTMwNmZcdTMwNjdcdTMwNWZcdTMwODlcdTMwODFcdTMwNjcnCisgICAgICAgICAgICB1J1x1MzA1OVx1MzAwMlx1NWI5Zlx1OTY5Ylx1MzA2Ylx1MzA2Zlx1MzAwY1dlbm4gaXN0IGRhcycKKyAgICAgICAgICAgIHUnIE51bnN0dWNrIGdpdCB1bmQnLmVuY29kZSgndXRmLTgnKSwKKyAgICAgICAgICAgICdceGU2XHhhZFx4YTNceGU3XHhhMlx4YmFceGUzXHg4MVx4YWJceGU4XHhhOFx4ODBceGUzXHg4MScKKyAgICAgICAgICAgICdceDg2XHhlM1x4ODFceGE4XHhlN1x4YmZceGJiXHhlOFx4YThceGIzXHhlM1x4ODFceGFmXHhlMycKKyAgICAgICAgICAgICdceDgxXHg5NVx4ZTNceDgyXHg4Y1x4ZTNceDgxXHhhNlx4ZTNceDgxXHg4NFx4ZTNceDgxXHhiZScKKyAgICAgICAgICAgICdceGUzXHg4MVx4OWJceGUzXHg4Mlx4OTNceGUzXHg4MFx4ODJceGU0XHhiOFx4ODBceGU5XHg4MycKKyAgICAgICAgICAgICdceGE4XHhlM1x4ODFceGFmXHhlM1x4ODNceDg5XHhlM1x4ODJceGE0XHhlM1x4ODNceDg0XHhlOCcKKyAgICAgICAgICAgICdceGFhXHg5ZVx4ZTNceDgxXHhhN1x4ZTNceDgxXHg5OVx4ZTNceDgxXHg4Y1x4ZTNceDgwXHg4MScKKyAgICAgICAgICAgICdceGUzXHg4MVx4ODJceGUzXHg4MVx4YThceGUzXHg4MVx4YWZceGUzXHg4MVx4YTdceGUzXHg4MScKKyAgICAgICAgICAgICdceDlmXHhlM1x4ODJceDg5XHhlM1x4ODJceDgxXHhlM1x4ODFceGE3XHhlM1x4ODFceDk5XHhlMycKKyAgICAgICAgICAgICdceDgwXHg4Mlx4ZTVceGFlXHg5Zlx4ZTlceDlhXHg5Ylx4ZTNceDgxXHhhYlx4ZTNceDgxXHhhZicKKyAgICAgICAgICAgICdceGUzXHg4MFx4OGNXZW5uIGlzdCBkYXMgTnVuc3R1Y2sgZ2l0IHVuZCcKKyAgICAgICAgKQorCisgICAgICAgICMgVVRGLTggc3BlY2lmaWMgZGVjb2RpbmcgdGVzdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKCdceGYwXHhhM1x4OTFceDk2JywgJ3V0Zi04JyksIHUnXFUwMDAyMzQ1NicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnXHhmMFx4OTBceDgwXHg4MicsICd1dGYtOCcpLCB1J1xVMDAwMTAwMDInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ1x4ZTJceDgyXHhhYycsICd1dGYtOCcpLCB1J1x1MjBhYycpCisKKyAgICAgICAgIyBPdGhlciBwb3NzaWJsZSB1dGYtOCB0ZXN0IGNhc2VzOgorICAgICAgICAjICogc3RyaWN0IGRlY29kaW5nIHRlc3RpbmcgZm9yIGFsbCBvZiB0aGUKKyAgICAgICAgIyAgIFVURjhfRVJST1IgY2FzZXMgaW4gUHlVbmljb2RlX0RlY29kZVVURjgKKworICAgIGRlZiB0ZXN0X3V0ZjhfZGVjb2RlX3ZhbGlkX3NlcXVlbmNlcyhzZWxmKToKKyAgICAgICAgc2VxdWVuY2VzID0gWworICAgICAgICAgICAgIyBzaW5nbGUgYnl0ZQorICAgICAgICAgICAgKCdceDAwJywgdSdceDAwJyksICgnYScsIHUnYScpLCAoJ1x4N2YnLCB1J1x4N2YnKSwKKyAgICAgICAgICAgICMgMiBieXRlcworICAgICAgICAgICAgKCdceGMyXHg4MCcsIHUnXHg4MCcpLCAoJ1x4ZGZceGJmJywgdSdcdTA3ZmYnKSwKKyAgICAgICAgICAgICMgMyBieXRlcworICAgICAgICAgICAgKCdceGUwXHhhMFx4ODAnLCB1J1x1MDgwMCcpLCAoJ1x4ZWRceDlmXHhiZicsIHUnXHVkN2ZmJyksCisgICAgICAgICAgICAoJ1x4ZWVceDgwXHg4MCcsIHUnXHVFMDAwJyksICgnXHhlZlx4YmZceGJmJywgdSdcdWZmZmYnKSwKKyAgICAgICAgICAgICMgNCBieXRlcworICAgICAgICAgICAgKCdceEYwXHg5MFx4ODBceDgwJywgdSdcVTAwMDEwMDAwJyksCisgICAgICAgICAgICAoJ1x4ZjRceDhmXHhiZlx4YmYnLCB1J1xVMDAxMEZGRkYnKQorICAgICAgICBdCisgICAgICAgIGZvciBzZXEsIHJlcyBpbiBzZXF1ZW5jZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcS5kZWNvZGUoJ3V0Zi04JyksIHJlcykKKworICAgICAgICBmb3IgY2ggaW4gbWFwKHVuaWNociwgcmFuZ2UoMCwgc3lzLm1heHVuaWNvZGUpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2gsIGNoLmVuY29kZSgndXRmLTgnKS5kZWNvZGUoJ3V0Zi04JykpCisKKyAgICBkZWYgdGVzdF91dGY4X2RlY29kZV9pbnZhbGlkX3NlcXVlbmNlcyhzZWxmKToKKyAgICAgICAgIyBjb250aW51YXRpb24gYnl0ZXMgaW4gYSBzZXF1ZW5jZSBvZiAyLCAzLCBvciA0IGJ5dGVzCisgICAgICAgIGNvbnRpbnVhdGlvbl9ieXRlcyA9IG1hcChjaHIsIHJhbmdlKDB4ODAsIDB4QzApKQorICAgICAgICAjIHN0YXJ0IGJ5dGVzIG9mIGEgMi1ieXRlIHNlcXVlbmNlIGVxdWl2YWxlbnQgdG8gY29kZXBvaW50cyA8IDB4N0YKKyAgICAgICAgaW52YWxpZF8yQl9zZXFfc3RhcnRfYnl0ZXMgPSBtYXAoY2hyLCByYW5nZSgweEMwLCAweEMyKSkKKyAgICAgICAgIyBzdGFydCBieXRlcyBvZiBhIDQtYnl0ZSBzZXF1ZW5jZSBlcXVpdmFsZW50IHRvIGNvZGVwb2ludHMgPiAweDEwRkZGRgorICAgICAgICBpbnZhbGlkXzRCX3NlcV9zdGFydF9ieXRlcyA9IG1hcChjaHIsIHJhbmdlKDB4RjUsIDB4RjgpKQorICAgICAgICBpbnZhbGlkX3N0YXJ0X2J5dGVzID0gKAorICAgICAgICAgICAgY29udGludWF0aW9uX2J5dGVzICsgaW52YWxpZF8yQl9zZXFfc3RhcnRfYnl0ZXMgKworICAgICAgICAgICAgaW52YWxpZF80Ql9zZXFfc3RhcnRfYnl0ZXMgKyBtYXAoY2hyLCByYW5nZSgweEY3LCAweDEwMCkpCisgICAgICAgICkKKworICAgICAgICBmb3IgYnl0ZSBpbiBpbnZhbGlkX3N0YXJ0X2J5dGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBieXRlLmRlY29kZSwgJ3V0Zi04JykKKworICAgICAgICBmb3Igc2IgaW4gaW52YWxpZF8yQl9zZXFfc3RhcnRfYnl0ZXM6CisgICAgICAgICAgICBmb3IgY2IgaW4gY29udGludWF0aW9uX2J5dGVzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgKHNiK2NiKS5kZWNvZGUsICd1dGYtOCcpCisKKyAgICAgICAgZm9yIHNiIGluIGludmFsaWRfNEJfc2VxX3N0YXJ0X2J5dGVzOgorICAgICAgICAgICAgZm9yIGNiMSBpbiBjb250aW51YXRpb25fYnl0ZXNbOjNdOgorICAgICAgICAgICAgICAgIGZvciBjYjMgaW4gY29udGludWF0aW9uX2J5dGVzWzozXToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2IrY2IxKydceDgwJytjYjMpLmRlY29kZSwgJ3V0Zi04JykKKworICAgICAgICBmb3IgY2IgaW4gbWFwKGNociwgcmFuZ2UoMHg4MCwgMHhBMCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdceEUwJytjYisnXHg4MCcpLmRlY29kZSwgJ3V0Zi04JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnXHhFMCcrY2IrJ1x4QkYnKS5kZWNvZGUsICd1dGYtOCcpCisgICAgICAgICMgWFhYOiBzdXJyb2dhdGVzIHNob3VsZG4ndCBiZSB2YWxpZCBVVEYtOCEKKyAgICAgICAgIyBzZWUgaHR0cDovL3d3dy51bmljb2RlLm9yZy92ZXJzaW9ucy9Vbmljb2RlNS4yLjAvY2gwMy5wZGYKKyAgICAgICAgIyAodGFibGUgMy03KSBhbmQgaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMzYyOS50eHQKKyAgICAgICAgI2ZvciBjYiBpbiBtYXAoY2hyLCByYW5nZSgweEEwLCAweEMwKSk6CisgICAgICAgICAgICAjc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIygnXHhFRCcrY2IrJ1x4ODAnKS5kZWNvZGUsICd1dGYtOCcpCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIygnXHhFRCcrY2IrJ1x4QkYnKS5kZWNvZGUsICd1dGYtOCcpCisgICAgICAgICMgYnV0IHNpbmNlIHRoZXkgYXJlIHZhbGlkIG9uIFB5dGhvbiAyIGFkZCBhIHRlc3QgZm9yIHRoYXQ6CisgICAgICAgIGZvciBjYiwgc3Vycm9nYXRlIGluIHppcChtYXAoY2hyLCByYW5nZSgweEEwLCAweEMwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAodW5pY2hyLCByYW5nZSgweGQ4MDAsIDB4ZTAwMCwgNjQpKSk6CisgICAgICAgICAgICBlbmNvZGVkID0gJ1x4RUQnK2NiKydceDgwJworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVkLmRlY29kZSgndXRmLTgnKSwgc3Vycm9nYXRlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdXJyb2dhdGUuZW5jb2RlKCd1dGYtOCcpLCBlbmNvZGVkKQorCisgICAgICAgIGZvciBjYiBpbiBtYXAoY2hyLCByYW5nZSgweDgwLCAweDkwKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1x4RjAnK2NiKydceDgwXHg4MCcpLmRlY29kZSwgJ3V0Zi04JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnXHhGMCcrY2IrJ1x4QkZceEJGJykuZGVjb2RlLCAndXRmLTgnKQorICAgICAgICBmb3IgY2IgaW4gbWFwKGNociwgcmFuZ2UoMHg5MCwgMHhDMCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdceEY0JytjYisnXHg4MFx4ODAnKS5kZWNvZGUsICd1dGYtOCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1x4RjQnK2NiKydceEJGXHhCRicpLmRlY29kZSwgJ3V0Zi04JykKKworICAgIGRlZiB0ZXN0X2lzc3VlODI3MShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjODI3MTogZHVyaW5nIHRoZSBkZWNvZGluZyBvZiBhbiBpbnZhbGlkIFVURi04IGJ5dGUgc2VxdWVuY2UsCisgICAgICAgICMgb25seSB0aGUgc3RhcnQgYnl0ZSBhbmQgdGhlIGNvbnRpbnVhdGlvbiBieXRlKHMpIGFyZSBub3cgY29uc2lkZXJlZAorICAgICAgICAjIGludmFsaWQsIGluc3RlYWQgb2YgdGhlIG51bWJlciBvZiBieXRlcyBzcGVjaWZpZWQgYnkgdGhlIHN0YXJ0IGJ5dGUuCisgICAgICAgICMgU2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvdmVyc2lvbnMvVW5pY29kZTUuMi4wL2NoMDMucGRmIChwYWdlIDk1LAorICAgICAgICAjIHRhYmxlIDMtOCwgUm93IDIpIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhbGdvcml0aG0gdXNlZC4KKyAgICAgICAgRkZGRCA9IHUnXHVmZmZkJworICAgICAgICBzZXF1ZW5jZXMgPSBbCisgICAgICAgICAgICAjIGludmFsaWQgc3RhcnQgYnl0ZXMKKyAgICAgICAgICAgICgnXHg4MCcsIEZGRkQpLCAjIGNvbnRpbnVhdGlvbiBieXRlCisgICAgICAgICAgICAoJ1x4ODBceDgwJywgRkZGRCoyKSwgIyAyIGNvbnRpbnVhdGlvbiBieXRlcworICAgICAgICAgICAgKCdceGMwJywgRkZGRCksCisgICAgICAgICAgICAoJ1x4YzBceGMwJywgRkZGRCoyKSwKKyAgICAgICAgICAgICgnXHhjMScsIEZGRkQpLAorICAgICAgICAgICAgKCdceGMxXHhjMCcsIEZGRkQqMiksCisgICAgICAgICAgICAoJ1x4YzBceGMxJywgRkZGRCoyKSwKKyAgICAgICAgICAgICMgd2l0aCBzdGFydCBieXRlIG9mIGEgMi1ieXRlIHNlcXVlbmNlCisgICAgICAgICAgICAoJ1x4YzInLCBGRkZEKSwgIyBvbmx5IHRoZSBzdGFydCBieXRlCisgICAgICAgICAgICAoJ1x4YzJceGMyJywgRkZGRCoyKSwgIyAyIHN0YXJ0IGJ5dGVzCisgICAgICAgICAgICAoJ1x4YzJceGMyXHhjMicsIEZGRkQqMyksICMgMiBzdGFydCBieXRlcworICAgICAgICAgICAgKCdceGMyXHg0MScsIEZGRkQrJ0EnKSwgIyBpbnZhbGlkIGNvbnRpbnVhdGlvbiBieXRlCisgICAgICAgICAgICAjIHdpdGggc3RhcnQgYnl0ZSBvZiBhIDMtYnl0ZSBzZXF1ZW5jZQorICAgICAgICAgICAgKCdceGUxJywgRkZGRCksICMgb25seSB0aGUgc3RhcnQgYnl0ZQorICAgICAgICAgICAgKCdceGUxXHhlMScsIEZGRkQqMiksICMgMiBzdGFydCBieXRlcworICAgICAgICAgICAgKCdceGUxXHhlMVx4ZTEnLCBGRkZEKjMpLCAjIDMgc3RhcnQgYnl0ZXMKKyAgICAgICAgICAgICgnXHhlMVx4ZTFceGUxXHhlMScsIEZGRkQqNCksICMgNCBzdGFydCBieXRlcworICAgICAgICAgICAgKCdceGUxXHg4MCcsIEZGRkQpLCAjIG9ubHkgMSBjb250aW51YXRpb24gYnl0ZQorICAgICAgICAgICAgKCdceGUxXHg0MScsIEZGRkQrJ0EnKSwgIyBpbnZhbGlkIGNvbnRpbnVhdGlvbiBieXRlCisgICAgICAgICAgICAoJ1x4ZTFceDQxXHg4MCcsIEZGRkQrJ0EnK0ZGRkQpLCAjIGludmFsaWQgY2IgZm9sbG93ZWQgYnkgdmFsaWQgY2IKKyAgICAgICAgICAgICgnXHhlMVx4NDFceDQxJywgRkZGRCsnQUEnKSwgIyAyIGludmFsaWQgY29udGludWF0aW9uIGJ5dGVzCisgICAgICAgICAgICAoJ1x4ZTFceDgwXHg0MScsIEZGRkQrJ0EnKSwgIyBvbmx5IDEgdmFsaWQgY29udGludWF0aW9uIGJ5dGUKKyAgICAgICAgICAgICgnXHhlMVx4ODBceGUxXHg0MScsIEZGRkQqMisnQScpLCAjIDEgdmFsaWQgYW5kIHRoZSBvdGhlciBpbnZhbGlkCisgICAgICAgICAgICAoJ1x4ZTFceDQxXHhlMVx4ODAnLCBGRkZEKydBJytGRkZEKSwgIyAxIGludmFsaWQgYW5kIHRoZSBvdGhlciB2YWxpZAorICAgICAgICAgICAgIyB3aXRoIHN0YXJ0IGJ5dGUgb2YgYSA0LWJ5dGUgc2VxdWVuY2UKKyAgICAgICAgICAgICgnXHhmMScsIEZGRkQpLCAjIG9ubHkgdGhlIHN0YXJ0IGJ5dGUKKyAgICAgICAgICAgICgnXHhmMVx4ZjEnLCBGRkZEKjIpLCAjIDIgc3RhcnQgYnl0ZXMKKyAgICAgICAgICAgICgnXHhmMVx4ZjFceGYxJywgRkZGRCozKSwgIyAzIHN0YXJ0IGJ5dGVzCisgICAgICAgICAgICAoJ1x4ZjFceGYxXHhmMVx4ZjEnLCBGRkZEKjQpLCAjIDQgc3RhcnQgYnl0ZXMKKyAgICAgICAgICAgICgnXHhmMVx4ZjFceGYxXHhmMVx4ZjEnLCBGRkZEKjUpLCAjIDUgc3RhcnQgYnl0ZXMKKyAgICAgICAgICAgICgnXHhmMVx4ODAnLCBGRkZEKSwgIyBvbmx5IDEgY29udGludWF0aW9uIGJ5dGVzCisgICAgICAgICAgICAoJ1x4ZjFceDgwXHg4MCcsIEZGRkQpLCAjIG9ubHkgMiBjb250aW51YXRpb24gYnl0ZXMKKyAgICAgICAgICAgICgnXHhmMVx4ODBceDQxJywgRkZGRCsnQScpLCAjIDEgdmFsaWQgY2IgYW5kIDEgaW52YWxpZAorICAgICAgICAgICAgKCdceGYxXHg4MFx4NDFceDQxJywgRkZGRCsnQUEnKSwgIyAxIHZhbGlkIGNiIGFuZCAxIGludmFsaWQKKyAgICAgICAgICAgICgnXHhmMVx4ODBceDgwXHg0MScsIEZGRkQrJ0EnKSwgIyAyIHZhbGlkIGNiIGFuZCAxIGludmFsaWQKKyAgICAgICAgICAgICgnXHhmMVx4NDFceDgwJywgRkZGRCsnQScrRkZGRCksICMgMSBpbnZhbGlkIGN2IGFuZCAxIHZhbGlkCisgICAgICAgICAgICAoJ1x4ZjFceDQxXHg4MFx4ODAnLCBGRkZEKydBJytGRkZEKjIpLCAjIDEgaW52YWxpZCBjYiBhbmQgMiBpbnZhbGlkCisgICAgICAgICAgICAoJ1x4ZjFceDQxXHg4MFx4NDEnLCBGRkZEKydBJytGRkZEKydBJyksICMgMiBpbnZhbGlkIGNiIGFuZCAxIGludmFsaWQKKyAgICAgICAgICAgICgnXHhmMVx4NDFceDQxXHg4MCcsIEZGRkQrJ0FBJytGRkZEKSwgIyAxIHZhbGlkIGNiIGFuZCAxIGludmFsaWQKKyAgICAgICAgICAgICgnXHhmMVx4NDFceGYxXHg4MCcsIEZGRkQrJ0EnK0ZGRkQpLAorICAgICAgICAgICAgKCdceGYxXHg0MVx4ODBceGYxJywgRkZGRCsnQScrRkZGRCoyKSwKKyAgICAgICAgICAgICgnXHhmMVx4ZjFceDgwXHg0MScsIEZGRkQqMisnQScpLAorICAgICAgICAgICAgKCdceGYxXHg0MVx4ZjFceGYxJywgRkZGRCsnQScrRkZGRCoyKSwKKyAgICAgICAgICAgICMgd2l0aCBpbnZhbGlkIHN0YXJ0IGJ5dGUgb2YgYSA0LWJ5dGUgc2VxdWVuY2UgKHJmYzIyNzkpCisgICAgICAgICAgICAoJ1x4ZjUnLCBGRkZEKSwgIyBvbmx5IHRoZSBzdGFydCBieXRlCisgICAgICAgICAgICAoJ1x4ZjVceGY1JywgRkZGRCoyKSwgIyAyIHN0YXJ0IGJ5dGVzCisgICAgICAgICAgICAoJ1x4ZjVceDgwJywgRkZGRCoyKSwgIyBvbmx5IDEgY29udGludWF0aW9uIGJ5dGUKKyAgICAgICAgICAgICgnXHhmNVx4ODBceDgwJywgRkZGRCozKSwgIyBvbmx5IDIgY29udGludWF0aW9uIGJ5dGUKKyAgICAgICAgICAgICgnXHhmNVx4ODBceDgwXHg4MCcsIEZGRkQqNCksICMgMyBjb250aW51YXRpb24gYnl0ZXMKKyAgICAgICAgICAgICgnXHhmNVx4ODBceDQxJywgRkZGRCoyKydBJyksICMgIDEgdmFsaWQgY2IgYW5kIDEgaW52YWxpZAorICAgICAgICAgICAgKCdceGY1XHg4MFx4NDFceGY1JywgRkZGRCoyKydBJytGRkZEKSwKKyAgICAgICAgICAgICgnXHhmNVx4NDFceDgwXHg4MFx4NDEnLCBGRkZEKydBJytGRkZEKjIrJ0EnKSwKKyAgICAgICAgICAgICMgd2l0aCBpbnZhbGlkIHN0YXJ0IGJ5dGUgb2YgYSA1LWJ5dGUgc2VxdWVuY2UgKHJmYzIyNzkpCisgICAgICAgICAgICAoJ1x4ZjgnLCBGRkZEKSwgIyBvbmx5IHRoZSBzdGFydCBieXRlCisgICAgICAgICAgICAoJ1x4ZjhceGY4JywgRkZGRCoyKSwgIyAyIHN0YXJ0IGJ5dGVzCisgICAgICAgICAgICAoJ1x4ZjhceDgwJywgRkZGRCoyKSwgIyBvbmx5IG9uZSBjb250aW51YXRpb24gYnl0ZQorICAgICAgICAgICAgKCdceGY4XHg4MFx4NDEnLCBGRkZEKjIgKyAnQScpLCAjIDEgdmFsaWQgY2IgYW5kIDEgaW52YWxpZAorICAgICAgICAgICAgKCdceGY4XHg4MFx4ODBceDgwXHg4MCcsIEZGRkQqNSksICMgaW52YWxpZCA1IGJ5dGVzIHNlcSB3aXRoIDUgYnl0ZXMKKyAgICAgICAgICAgICMgd2l0aCBpbnZhbGlkIHN0YXJ0IGJ5dGUgb2YgYSA2LWJ5dGUgc2VxdWVuY2UgKHJmYzIyNzkpCisgICAgICAgICAgICAoJ1x4ZmMnLCBGRkZEKSwgIyBvbmx5IHRoZSBzdGFydCBieXRlCisgICAgICAgICAgICAoJ1x4ZmNceGZjJywgRkZGRCoyKSwgIyAyIHN0YXJ0IGJ5dGVzCisgICAgICAgICAgICAoJ1x4ZmNceDgwXHg4MCcsIEZGRkQqMyksICMgb25seSAyIGNvbnRpbnVhdGlvbiBieXRlcworICAgICAgICAgICAgKCdceGZjXHg4MFx4ODBceDgwXHg4MFx4ODAnLCBGRkZEKjYpLCAjIDYgY29udGludWF0aW9uIGJ5dGVzCisgICAgICAgICAgICAjIGludmFsaWQgc3RhcnQgYnl0ZQorICAgICAgICAgICAgKCdceGZlJywgRkZGRCksCisgICAgICAgICAgICAoJ1x4ZmVceDgwXHg4MCcsIEZGRkQqMyksCisgICAgICAgICAgICAjIG90aGVyIHNlcXVlbmNlcworICAgICAgICAgICAgKCdceGYxXHg4MFx4NDFceDQyXHg0MycsIHUnXHVmZmZkXHg0MVx4NDJceDQzJyksCisgICAgICAgICAgICAoJ1x4ZjFceDgwXHhmZlx4NDJceDQzJywgdSdcdWZmZmRcdWZmZmRceDQyXHg0MycpLAorICAgICAgICAgICAgKCdceGYxXHg4MFx4YzJceDgxXHg0MycsIHUnXHVmZmZkXHg4MVx4NDMnKSwKKyAgICAgICAgICAgICgnXHg2MVx4RjFceDgwXHg4MFx4RTFceDgwXHhDMlx4NjJceDgwXHg2M1x4ODBceEJGXHg2NCcsCisgICAgICAgICAgICAgdSdceDYxXHVGRkZEXHVGRkZEXHVGRkZEXHg2Mlx1RkZGRFx4NjNcdUZGRkRcdUZGRkRceDY0JyksCisgICAgICAgIF0KKyAgICAgICAgZm9yIG4sIChzZXEsIHJlcykgaW4gZW51bWVyYXRlKHNlcXVlbmNlcyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIHNlcS5kZWNvZGUsICd1dGYtOCcsICdzdHJpY3QnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXEuZGVjb2RlKCd1dGYtOCcsICdyZXBsYWNlJyksIHJlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHNlcSsnYicpLmRlY29kZSgndXRmLTgnLCAncmVwbGFjZScpLCByZXMrJ2InKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXEuZGVjb2RlKCd1dGYtOCcsICdpZ25vcmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnJlcGxhY2UodSdcdUZGRkQnLCAnJykpCisKKyAgICBkZWYgdGVzdF9jb2RlY3NfaWRuYShzZWxmKToKKyAgICAgICAgIyBUZXN0IHdoZXRoZXIgdHJhaWxpbmcgZG90IGlzIHByZXNlcnZlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUid3d3LnB5dGhvbi5vcmcuIi5lbmNvZGUoImlkbmEiKSwgInd3dy5weXRob24ub3JnLiIpCisKKyAgICBkZWYgdGVzdF9jb2RlY3NfZXJyb3JzKHNlbGYpOgorICAgICAgICAjIEVycm9yIGhhbmRsaW5nIChlbmNvZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB1J0FuZHJcMjAyIHgnLmVuY29kZSwgJ2FzY2lpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB1J0FuZHJcMjAyIHgnLmVuY29kZSwgJ2FzY2lpJywnc3RyaWN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J0FuZHJcMjAyIHgnLmVuY29kZSgnYXNjaWknLCdpZ25vcmUnKSwgIkFuZHIgeCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdBbmRyXDIwMiB4Jy5lbmNvZGUoJ2FzY2lpJywncmVwbGFjZScpLCAiQW5kcj8geCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdBbmRyXDIwMiB4Jy5lbmNvZGUoJ2FzY2lpJywgJ3JlcGxhY2UnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J0FuZHJcMjAyIHgnLmVuY29kZSgnYXNjaWknLCBlcnJvcnM9J3JlcGxhY2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J0FuZHJcMjAyIHgnLmVuY29kZSgnYXNjaWknLCAnaWdub3JlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgdSdBbmRyXDIwMiB4Jy5lbmNvZGUoZW5jb2Rpbmc9J2FzY2lpJywgZXJyb3JzPSdpZ25vcmUnKSkKKworICAgICAgICAjIEVycm9yIGhhbmRsaW5nIChkZWNvZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB1bmljb2RlLCAnQW5kclwyMDIgeCcsICdhc2NpaScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdW5pY29kZSwgJ0FuZHJcMjAyIHgnLCAnYXNjaWknLCdzdHJpY3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoJ0FuZHJcMjAyIHgnLCdhc2NpaScsJ2lnbm9yZScpLCB1IkFuZHIgeCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSgnQW5kclwyMDIgeCcsJ2FzY2lpJywncmVwbGFjZScpLCB1J0FuZHJcdUZGRkQgeCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdhYmNkZScuZGVjb2RlKCdhc2NpaScsICdpZ25vcmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J2FiY2RlJy5kZWNvZGUoJ2FzY2lpJywgZXJyb3JzPSdpZ25vcmUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2FiY2RlJy5kZWNvZGUoJ2FzY2lpJywgJ3JlcGxhY2UnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1J2FiY2RlJy5kZWNvZGUoZW5jb2Rpbmc9J2FzY2lpJywgZXJyb3JzPSdyZXBsYWNlJykpCisKKyAgICAgICAgIyBFcnJvciBoYW5kbGluZyAodW5rbm93biBjaGFyYWN0ZXIgbmFtZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlxcTntmb299eHgiLmRlY29kZSgidW5pY29kZS1lc2NhcGUiLCAiaWdub3JlIiksIHUieHgiKQorCisgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgKHRydW5jYXRlZCBlc2NhcGUgc2VxdWVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgIlxcIi5kZWNvZGUsICJ1bmljb2RlLWVzY2FwZSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAiaGVsbG8iLmRlY29kZSwgInRlc3QudW5pY29kZTEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHVuaWNvZGUsICJoZWxsbyIsICJ0ZXN0LnVuaWNvZGUyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1ImhlbGxvIi5lbmNvZGUsICJ0ZXN0LnVuaWNvZGUxIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1ImhlbGxvIi5lbmNvZGUsICJ0ZXN0LnVuaWNvZGUyIikKKyAgICAgICAgIyBleGVjdXRlcyBQeVVuaWNvZGVfRW5jb2RlKCkKKyAgICAgICAgaW1wb3J0IGltcAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEltcG9ydEVycm9yLAorICAgICAgICAgICAgaW1wLmZpbmRfbW9kdWxlLAorICAgICAgICAgICAgIm5vbi1leGlzdGluZyBtb2R1bGUiLAorICAgICAgICAgICAgW3Uibm9uLWV4aXN0aW5nIGRpciJdCisgICAgICAgICkKKworICAgICAgICAjIEVycm9yIGhhbmRsaW5nICh3cm9uZyBhcmd1bWVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdSJoZWxsbyIuZW5jb2RlLCA0MiwgNDIsIDQyKQorCisgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgKFB5VW5pY29kZV9FbmNvZGVEZWNpbWFsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgaW50LCB1Ilx1MDIwMCIpCisKKyAgICBkZWYgdGVzdF9jb2RlY3Moc2VsZik6CisgICAgICAgICMgRW5jb2RpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2hlbGxvJy5lbmNvZGUoJ2FzY2lpJyksICdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdoZWxsbycuZW5jb2RlKCd1dGYtNycpLCAnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnaGVsbG8nLmVuY29kZSgndXRmLTgnKSwgJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2hlbGxvJy5lbmNvZGUoJ3V0ZjgnKSwgJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2hlbGxvJy5lbmNvZGUoJ3V0Zi0xNi1sZScpLCAnaFwwMDBlXDAwMGxcMDAwbFwwMDBvXDAwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdoZWxsbycuZW5jb2RlKCd1dGYtMTYtYmUnKSwgJ1wwMDBoXDAwMGVcMDAwbFwwMDBsXDAwMG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnaGVsbG8nLmVuY29kZSgnbGF0aW4tMScpLCAnaGVsbG8nKQorCisgICAgICAgICMgUm91bmR0cmlwIHNhZmV0eSBmb3IgQk1QIChqdXN0IHRoZSBmaXJzdCAxMDI0IGNoYXJzKQorICAgICAgICBmb3IgYyBpbiB4cmFuZ2UoMTAyNCk6CisgICAgICAgICAgICB1ID0gdW5pY2hyKGMpCisgICAgICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKCd1dGYtNycsICd1dGYtOCcsICd1dGYtMTYnLCAndXRmLTE2LWxlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3V0Zi0xNi1iZScsICdyYXdfdW5pY29kZV9lc2NhcGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5pY29kZV9lc2NhcGUnLCAndW5pY29kZV9pbnRlcm5hbCcpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSh1LmVuY29kZShlbmNvZGluZyksZW5jb2RpbmcpLCB1KQorCisgICAgICAgICMgUm91bmR0cmlwIHNhZmV0eSBmb3IgQk1QIChqdXN0IHRoZSBmaXJzdCAyNTYgY2hhcnMpCisgICAgICAgIGZvciBjIGluIHhyYW5nZSgyNTYpOgorICAgICAgICAgICAgdSA9IHVuaWNocihjKQorICAgICAgICAgICAgZm9yIGVuY29kaW5nIGluICgnbGF0aW4tMScsKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUodS5lbmNvZGUoZW5jb2RpbmcpLGVuY29kaW5nKSwgdSkKKworICAgICAgICAjIFJvdW5kdHJpcCBzYWZldHkgZm9yIEJNUCAoanVzdCB0aGUgZmlyc3QgMTI4IGNoYXJzKQorICAgICAgICBmb3IgYyBpbiB4cmFuZ2UoMTI4KToKKyAgICAgICAgICAgIHUgPSB1bmljaHIoYykKKyAgICAgICAgICAgIGZvciBlbmNvZGluZyBpbiAoJ2FzY2lpJywpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSh1LmVuY29kZShlbmNvZGluZyksZW5jb2RpbmcpLCB1KQorCisgICAgICAgICMgUm91bmR0cmlwIHNhZmV0eSBmb3Igbm9uLUJNUCAoanVzdCBhIGZldyBjaGFycykKKyAgICAgICAgdSA9IHUnXFUwMDAxMDAwMVxVMDAwMjAwMDJcVTAwMDMwMDAzXFUwMDA0MDAwNFxVMDAwNTAwMDUnCisgICAgICAgIGZvciBlbmNvZGluZyBpbiAoJ3V0Zi04JywgJ3V0Zi0xNicsICd1dGYtMTYtbGUnLCAndXRmLTE2LWJlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAjJ3Jhd191bmljb2RlX2VzY2FwZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuaWNvZGVfZXNjYXBlJywgJ3VuaWNvZGVfaW50ZXJuYWwnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSh1LmVuY29kZShlbmNvZGluZyksZW5jb2RpbmcpLCB1KQorCisgICAgICAgICMgVVRGLTggbXVzdCBiZSByb3VuZHRyaXAgc2FmZSBmb3IgYWxsIFVDUy0yIGNvZGUgcG9pbnRzCisgICAgICAgICMgVGhpcyBleGNsdWRlcyBzdXJyb2dhdGVzOiBpbiB0aGUgZnVsbCByYW5nZSwgdGhlcmUgd291bGQgYmUKKyAgICAgICAgIyBhIHN1cnJvZ2F0ZSBwYWlyIChcdWRiZmZcdWRjMDApLCB3aGljaCBnZXRzIGNvbnZlcnRlZCBiYWNrCisgICAgICAgICMgdG8gYSBub24tQk1QIGNoYXJhY3RlciAoXFUwMDEwZmMwMCkKKyAgICAgICAgdSA9IHUnJy5qb2luKG1hcCh1bmljaHIsIHJhbmdlKDAsMHhkODAwKStyYW5nZSgweGUwMDAsMHgxMDAwMCkpKQorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKCd1dGYtOCcsKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZSh1LmVuY29kZShlbmNvZGluZyksZW5jb2RpbmcpLCB1KQorCisgICAgZGVmIHRlc3RfY29kZWNzX2NoYXJtYXAoc2VsZik6CisgICAgICAgICMgMC0xMjcKKyAgICAgICAgcyA9ICcnLmpvaW4obWFwKGNociwgeHJhbmdlKDEyOCkpKQorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKAorICAgICAgICAgICAgJ2NwMDM3JywgJ2NwMTAyNicsCisgICAgICAgICAgICAnY3A0MzcnLCAnY3A1MDAnLCAnY3A3MjAnLCAnY3A3MzcnLCAnY3A3NzUnLCAnY3A4NTAnLAorICAgICAgICAgICAgJ2NwODUyJywgJ2NwODU1JywgJ2NwODU4JywgJ2NwODYwJywgJ2NwODYxJywgJ2NwODYyJywKKyAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsCisgICAgICAgICAgICAnaXNvODg1OV8xMCcsICdpc284ODU5XzEzJywgJ2lzbzg4NTlfMTQnLCAnaXNvODg1OV8xNScsCisgICAgICAgICAgICAnaXNvODg1OV8yJywgJ2lzbzg4NTlfMycsICdpc284ODU5XzQnLCAnaXNvODg1OV81JywgJ2lzbzg4NTlfNicsCisgICAgICAgICAgICAnaXNvODg1OV83JywgJ2lzbzg4NTlfOScsICdrb2k4X3InLCAnbGF0aW5fMScsCisgICAgICAgICAgICAnbWFjX2N5cmlsbGljJywgJ21hY19sYXRpbjInLAorCisgICAgICAgICAgICAnY3AxMjUwJywgJ2NwMTI1MScsICdjcDEyNTInLCAnY3AxMjUzJywgJ2NwMTI1NCcsICdjcDEyNTUnLAorICAgICAgICAgICAgJ2NwMTI1NicsICdjcDEyNTcnLCAnY3AxMjU4JywKKyAgICAgICAgICAgICdjcDg1NicsICdjcDg1NycsICdjcDg2NCcsICdjcDg2OScsICdjcDg3NCcsCisKKyAgICAgICAgICAgICdtYWNfZ3JlZWsnLCAnbWFjX2ljZWxhbmQnLCdtYWNfcm9tYW4nLCAnbWFjX3R1cmtpc2gnLAorICAgICAgICAgICAgJ2NwMTAwNicsICdpc284ODU5XzgnLAorCisgICAgICAgICAgICAjIyMgVGhlc2UgaGF2ZSB1bmRlZmluZWQgbWFwcGluZ3M6CisgICAgICAgICAgICAjJ2NwNDI0JywKKworICAgICAgICAgICAgIyMjIFRoZXNlIGZhaWwgdGhlIHJvdW5kLXRyaXA6CisgICAgICAgICAgICAjJ2NwODc1JworCisgICAgICAgICAgICApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKHMsIGVuY29kaW5nKS5lbmNvZGUoZW5jb2RpbmcpLCBzKQorCisgICAgICAgICMgMTI4LTI1NQorICAgICAgICBzID0gJycuam9pbihtYXAoY2hyLCB4cmFuZ2UoMTI4LCAyNTYpKSkKKyAgICAgICAgZm9yIGVuY29kaW5nIGluICgKKyAgICAgICAgICAgICdjcDAzNycsICdjcDEwMjYnLAorICAgICAgICAgICAgJ2NwNDM3JywgJ2NwNTAwJywgJ2NwNzIwJywgJ2NwNzM3JywgJ2NwNzc1JywgJ2NwODUwJywKKyAgICAgICAgICAgICdjcDg1MicsICdjcDg1NScsICdjcDg1OCcsICdjcDg2MCcsICdjcDg2MScsICdjcDg2MicsCisgICAgICAgICAgICAnY3A4NjMnLCAnY3A4NjUnLCAnY3A4NjYnLAorICAgICAgICAgICAgJ2lzbzg4NTlfMTAnLCAnaXNvODg1OV8xMycsICdpc284ODU5XzE0JywgJ2lzbzg4NTlfMTUnLAorICAgICAgICAgICAgJ2lzbzg4NTlfMicsICdpc284ODU5XzQnLCAnaXNvODg1OV81JywKKyAgICAgICAgICAgICdpc284ODU5XzknLCAna29pOF9yJywgJ2xhdGluXzEnLAorICAgICAgICAgICAgJ21hY19jeXJpbGxpYycsICdtYWNfbGF0aW4yJywKKworICAgICAgICAgICAgIyMjIFRoZXNlIGhhdmUgdW5kZWZpbmVkIG1hcHBpbmdzOgorICAgICAgICAgICAgIydjcDEyNTAnLCAnY3AxMjUxJywgJ2NwMTI1MicsICdjcDEyNTMnLCAnY3AxMjU0JywgJ2NwMTI1NScsCisgICAgICAgICAgICAjJ2NwMTI1NicsICdjcDEyNTcnLCAnY3AxMjU4JywKKyAgICAgICAgICAgICMnY3A0MjQnLCAnY3A4NTYnLCAnY3A4NTcnLCAnY3A4NjQnLCAnY3A4NjknLCAnY3A4NzQnLAorICAgICAgICAgICAgIydpc284ODU5XzMnLCAnaXNvODg1OV82JywgJ2lzbzg4NTlfNycsCisgICAgICAgICAgICAjJ21hY19ncmVlaycsICdtYWNfaWNlbGFuZCcsJ21hY19yb21hbicsICdtYWNfdHVya2lzaCcsCisKKyAgICAgICAgICAgICMjIyBUaGVzZSBmYWlsIHRoZSByb3VuZC10cmlwOgorICAgICAgICAgICAgIydjcDEwMDYnLCAnY3A4NzUnLCAnaXNvODg1OV84JywKKworICAgICAgICAgICAgKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShzLCBlbmNvZGluZykuZW5jb2RlKGVuY29kaW5nKSwgcykKKworICAgIGRlZiB0ZXN0X2NvbmNhdGVuYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHUiYWJjIiB1ImRlZiIpLCB1ImFiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCJhYmMiIHUiZGVmIiksIHUiYWJjZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodSJhYmMiICJkZWYiKSwgdSJhYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh1ImFiYyIgdSJkZWYiICJnaGkiKSwgdSJhYmNkZWZnaGkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgiYWJjIiAiZGVmIiB1ImdoaSIpLCB1ImFiY2RlZmdoaSIpCisKKyAgICBkZWYgdGVzdF9wcmludGluZyhzZWxmKToKKyAgICAgICAgY2xhc3MgQml0QnVja2V0OgorICAgICAgICAgICAgZGVmIHdyaXRlKHNlbGYsIHRleHQpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBvdXQgPSBCaXRCdWNrZXQoKQorICAgICAgICBwcmludCA+Pm91dCwgdSdhYmMnCisgICAgICAgIHByaW50ID4+b3V0LCB1J2FiYycsIHUnZGVmJworICAgICAgICBwcmludCA+Pm91dCwgdSdhYmMnLCAnZGVmJworICAgICAgICBwcmludCA+Pm91dCwgJ2FiYycsIHUnZGVmJworICAgICAgICBwcmludCA+Pm91dCwgdSdhYmNcbicKKyAgICAgICAgcHJpbnQgPj5vdXQsIHUnYWJjXG4nLAorICAgICAgICBwcmludCA+Pm91dCwgdSdhYmNcbicsCisgICAgICAgIHByaW50ID4+b3V0LCB1J2RlZlxuJworICAgICAgICBwcmludCA+Pm91dCwgdSdkZWZcbicKKworICAgIGRlZiB0ZXN0X3VjczQoc2VsZik6CisgICAgICAgIHggPSB1J1xVMDAxMDAwMDAnCisgICAgICAgIHkgPSB4LmVuY29kZSgicmF3LXVuaWNvZGUtZXNjYXBlIikuZGVjb2RlKCJyYXctdW5pY29kZS1lc2NhcGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisKKyAgICAgICAgeSA9IHInXFUwMDEwMDAwMCcKKyAgICAgICAgeCA9IHkuZGVjb2RlKCJyYXctdW5pY29kZS1lc2NhcGUiKS5lbmNvZGUoInJhdy11bmljb2RlLWVzY2FwZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgeSA9IHInXFUwMDAxMDAwMCcKKyAgICAgICAgeCA9IHkuZGVjb2RlKCJyYXctdW5pY29kZS1lc2NhcGUiKS5lbmNvZGUoInJhdy11bmljb2RlLWVzY2FwZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAnXFUxMTExMTExMScuZGVjb2RlKCJyYXctdW5pY29kZS1lc2NhcGUiKQorICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuc3RhcnQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZW5kLCAxMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIFVuaWNvZGVEZWNvZGVFcnJvciIpCisKKyAgICBkZWYgdGVzdF9jb252ZXJzaW9uKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBfX3VuaWNvZGVfXygpIHdvcmtzIHByb3Blcmx5CisgICAgICAgIGNsYXNzIEZvbzA6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKKworICAgICAgICBjbGFzcyBGb28xOgorICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1ImZvbyIKKworICAgICAgICBjbGFzcyBGb28yKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUiZm9vIgorCisgICAgICAgIGNsYXNzIEZvbzMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKKworICAgICAgICBjbGFzcyBGb280KHN0cik6CisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJmb28iCisKKyAgICAgICAgY2xhc3MgRm9vNSh1bmljb2RlKToKKyAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKKworICAgICAgICBjbGFzcyBGb282KHN0cik6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImZvb3MiCisKKyAgICAgICAgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdSJmb291IgorCisgICAgICAgIGNsYXNzIEZvbzcodW5pY29kZSk6CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImZvb3MiCisgICAgICAgICAgICBkZWYgX191bmljb2RlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUiZm9vdSIKKworICAgICAgICBjbGFzcyBGb284KHVuaWNvZGUpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBjb250ZW50PSIiKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5pY29kZS5fX25ld19fKGNscywgMipjb250ZW50KQorICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgY2xhc3MgRm9vOSh1bmljb2RlKToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5nIgorICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAibm90IHVuaWNvZGUiCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKEZvbzAoKSksIHUiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKEZvbzEoKSksIHUiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKEZvbzIoKSksIHUiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKEZvbzMoKSksIHUiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKEZvbzQoImJhciIpKSwgdSJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGUoRm9vNSgiYmFyIikpLCB1ImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShGb282KCJiYXIiKSksIHUiZm9vdSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShGb283KCJiYXIiKSksIHUiZm9vdSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZShGb284KCJmb28iKSksIHUiZm9vZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vOSgiZm9vIikpLCAic3RyaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKEZvbzkoImZvbyIpKSwgdSJub3QgdW5pY29kZSIpCisKKyAgICBkZWYgdGVzdF91bmljb2RlX3JlcHIoc2VsZik6CisgICAgICAgIGNsYXNzIHMxOgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnXFxuJworCisgICAgICAgIGNsYXNzIHMyOgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1J1xcbicKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoczEoKSksICdcXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoczIoKSksICdcXG4nKQorCisgICAgZGVmIHRlc3RfZXhwYW5kdGFic19vdmVyZmxvd3NfZ3JhY2VmdWxseShzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3Qgb25seSBhZmZlY3RzIDMyLWJpdCBwbGF0Zm9ybXMgYmVjYXVzZSBleHBhbmR0YWJzIGNhbiBvbmx5IHRha2UKKyAgICAgICAgIyBhbiBpbnQgYXMgdGhlIG1heCB2YWx1ZSwgbm90IGEgNjQtYml0IEMgbG9uZy4gIElmIGV4cGFuZHRhYnMgaXMgY2hhbmdlZAorICAgICAgICAjIHRvIHRha2UgYSA2NC1iaXQgbG9uZywgdGhpcyB0ZXN0IHNob3VsZCBhcHBseSB0byBhbGwgcGxhdGZvcm1zLgorICAgICAgICBpZiBzeXMubWF4aW50ID4gKDEgPDwgMzIpIG9yIHN0cnVjdC5jYWxjc2l6ZSgnUCcpICE9IDQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgdSd0XHR0XHQnLmV4cGFuZHRhYnMsIHN5cy5tYXhpbnQpCisKKyAgICBkZWYgdGVzdF9fZm9ybWF0X18oc2VsZik6CisgICAgICAgIGRlZiB0ZXN0KHZhbHVlLCBmb3JtYXQsIGV4cGVjdGVkKToKKyAgICAgICAgICAgICMgdGVzdCBib3RoIHdpdGggYW5kIHdpdGhvdXQgdGhlIHRyYWlsaW5nICdzJworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZS5fX2Zvcm1hdF9fKGZvcm1hdCksIGV4cGVjdGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZS5fX2Zvcm1hdF9fKGZvcm1hdCArIHUncycpLCBleHBlY3RlZCkKKworICAgICAgICB0ZXN0KHUnJywgdScnLCB1JycpCisgICAgICAgIHRlc3QodSdhYmMnLCB1JycsIHUnYWJjJykKKyAgICAgICAgdGVzdCh1J2FiYycsIHUnLjMnLCB1J2FiYycpCisgICAgICAgIHRlc3QodSdhYicsIHUnLjMnLCB1J2FiJykKKyAgICAgICAgdGVzdCh1J2FiY2RlZicsIHUnLjMnLCB1J2FiYycpCisgICAgICAgIHRlc3QodSdhYmNkZWYnLCB1Jy4wJywgdScnKQorICAgICAgICB0ZXN0KHUnYWJjJywgdSczLjMnLCB1J2FiYycpCisgICAgICAgIHRlc3QodSdhYmMnLCB1JzIuMycsIHUnYWJjJykKKyAgICAgICAgdGVzdCh1J2FiYycsIHUnMi4yJywgdSdhYicpCisgICAgICAgIHRlc3QodSdhYmMnLCB1JzMuMicsIHUnYWIgJykKKyAgICAgICAgdGVzdCh1J3Jlc3VsdCcsIHUneDwwJywgdSdyZXN1bHQnKQorICAgICAgICB0ZXN0KHUncmVzdWx0JywgdSd4PDUnLCB1J3Jlc3VsdCcpCisgICAgICAgIHRlc3QodSdyZXN1bHQnLCB1J3g8NicsIHUncmVzdWx0JykKKyAgICAgICAgdGVzdCh1J3Jlc3VsdCcsIHUneDw3JywgdSdyZXN1bHR4JykKKyAgICAgICAgdGVzdCh1J3Jlc3VsdCcsIHUneDw4JywgdSdyZXN1bHR4eCcpCisgICAgICAgIHRlc3QodSdyZXN1bHQnLCB1JyA8NycsIHUncmVzdWx0ICcpCisgICAgICAgIHRlc3QodSdyZXN1bHQnLCB1Jzw3JywgdSdyZXN1bHQgJykKKyAgICAgICAgdGVzdCh1J3Jlc3VsdCcsIHUnPjcnLCB1JyByZXN1bHQnKQorICAgICAgICB0ZXN0KHUncmVzdWx0JywgdSc+OCcsIHUnICByZXN1bHQnKQorICAgICAgICB0ZXN0KHUncmVzdWx0JywgdSdeOCcsIHUnIHJlc3VsdCAnKQorICAgICAgICB0ZXN0KHUncmVzdWx0JywgdSdeOScsIHUnIHJlc3VsdCAgJykKKyAgICAgICAgdGVzdCh1J3Jlc3VsdCcsIHUnXjEwJywgdScgIHJlc3VsdCAgJykKKyAgICAgICAgdGVzdCh1J2EnLCB1JzEwMDAwJywgdSdhJyArIHUnICcgKiA5OTk5KQorICAgICAgICB0ZXN0KHUnJywgdScxMDAwMCcsIHUnICcgKiAxMDAwMCkKKyAgICAgICAgdGVzdCh1JycsIHUnMTAwMDAwMDAnLCB1JyAnICogMTAwMDAwMDApCisKKyAgICAgICAgIyB0ZXN0IG1peGluZyB1bmljb2RlIGFuZCBzdHIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2FiYycuX19mb3JtYXRfXygncycpLCB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdhYmMnLl9fZm9ybWF0X18oJy0+MTBzJyksIHUnLS0tLS0tLWFiYycpCisKKyAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodScnLmZvcm1hdCgpLCB1JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdhJy5mb3JtYXQoKSwgdSdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2FiJy5mb3JtYXQoKSwgdSdhYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdhe3snLmZvcm1hdCgpLCB1J2F7JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2F9fScuZm9ybWF0KCksIHUnYX0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUne3tiJy5mb3JtYXQoKSwgdSd7YicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd9fWInLmZvcm1hdCgpLCB1J31iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2F7e2InLmZvcm1hdCgpLCB1J2F7YicpCisKKyAgICAgICAgIyBleGFtcGxlcyBmcm9tIHRoZSBQRVA6CisgICAgICAgIGltcG9ydCBkYXRldGltZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiTXkgbmFtZSBpcyB7MH0iLmZvcm1hdCh1J0ZyZWQnKSwgdSJNeSBuYW1lIGlzIEZyZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiTXkgbmFtZSBpcyB7MFtuYW1lXX0iLmZvcm1hdChkaWN0KG5hbWU9dSdGcmVkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUiTXkgbmFtZSBpcyBGcmVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ik15IG5hbWUgaXMgezB9IDote3t9fSIuZm9ybWF0KHUnRnJlZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUiTXkgbmFtZSBpcyBGcmVkIDote30iKQorCisgICAgICAgICMgZGF0ZXRpbWUuX19mb3JtYXRfXyBkb2Vzbid0IHdvcmsgd2l0aCB1bmljb2RlCisgICAgICAgICNkID0gZGF0ZXRpbWUuZGF0ZSgyMDA3LCA4LCAxOCkKKyAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWwoIlRoZSB5ZWFyIGlzIHswLnllYXJ9Ii5mb3JtYXQoZCksCisgICAgICAgICMgICAgICAgICAgICAgICAgICJUaGUgeWVhciBpcyAyMDA3IikKKworICAgICAgICAjIGNsYXNzZXMgd2UnbGwgdXNlIGZvciB0ZXN0aW5nCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeD0xMDApOgorICAgICAgICAgICAgICAgIHNlbGYuX3ggPSB4CisgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBzcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlYworCisgICAgICAgIGNsYXNzIEQ6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cihzZWxmLngpCisKKyAgICAgICAgIyBjbGFzcyB3aXRoIF9fc3RyX18sIGJ1dCBubyBfX2Zvcm1hdF9fCisgICAgICAgIGNsYXNzIEU6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0geAorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUnRSgnICsgc2VsZi54ICsgdScpJworCisgICAgICAgICMgY2xhc3Mgd2l0aCBfX3JlcHJfXywgYnV0IG5vIF9fZm9ybWF0X18gb3IgX19zdHJfXworICAgICAgICBjbGFzcyBGOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgIHNlbGYueCA9IHgKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdSdGKCcgKyBzZWxmLnggKyB1JyknCisKKyAgICAgICAgIyBjbGFzcyB3aXRoIF9fZm9ybWF0X18gdGhhdCBmb3J3YXJkcyB0byBzdHJpbmcsIGZvciBzb21lIGZvcm1hdF9zcGVjJ3MKKyAgICAgICAgY2xhc3MgRzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdSJzdHJpbmcgaXMgIiArIHNlbGYueAorICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgIGlmIGZvcm1hdF9zcGVjID09ICdkJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHUnRygnICsgc2VsZi54ICsgdScpJworICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYykKKworICAgICAgICAjIGNsYXNzIHRoYXQgcmV0dXJucyBhIGJhZCB0eXBlIGZyb20gX19mb3JtYXRfXworICAgICAgICBjbGFzcyBIOgorICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiAxLjAKKworICAgICAgICBjbGFzcyBJKGRhdGV0aW1lLmRhdGUpOgorICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnN0cmZ0aW1lKGZvcm1hdF9zcGVjKQorCisgICAgICAgIGNsYXNzIEooaW50KToKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50Ll9fZm9ybWF0X18oc2VsZiAqIDIsIGZvcm1hdF9zcGVjKQorCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1JycuZm9ybWF0KCksIHUnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2FiYycuZm9ybWF0KCksIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swfScuZm9ybWF0KHUnYWJjJyksIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOn0nLmZvcm1hdCh1J2FiYycpLCB1J2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdYezB9Jy5mb3JtYXQodSdhYmMnKSwgdSdYYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swfVgnLmZvcm1hdCh1J2FiYycpLCB1J2FiY1gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnWHswfVknLmZvcm1hdCh1J2FiYycpLCB1J1hhYmNZJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3sxfScuZm9ybWF0KDEsIHUnYWJjJyksIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J1h7MX0nLmZvcm1hdCgxLCB1J2FiYycpLCB1J1hhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezF9WCcuZm9ybWF0KDEsIHUnYWJjJyksIHUnYWJjWCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdYezF9WScuZm9ybWF0KDEsIHUnYWJjJyksIHUnWGFiY1knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezB9Jy5mb3JtYXQoLTE1KSwgdSctMTUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezB9ezF9Jy5mb3JtYXQoLTE1LCB1J2FiYycpLCB1Jy0xNWFiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MH1YezF9Jy5mb3JtYXQoLTE1LCB1J2FiYycpLCB1Jy0xNVhhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUne3snLmZvcm1hdCgpLCB1J3snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnfX0nLmZvcm1hdCgpLCB1J30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUne3t9fScuZm9ybWF0KCksIHUne30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUne3t4fX0nLmZvcm1hdCgpLCB1J3t4fScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7e3swfX19Jy5mb3JtYXQoMTIzKSwgdSd7MTIzfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7e3t7MH19fX0nLmZvcm1hdCgpLCB1J3t7MH19JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J319e3snLmZvcm1hdCgpLCB1J317JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J319eHt7Jy5mb3JtYXQoKSwgdSd9eHsnKQorCisgICAgICAgICMgd2VpcmQgZmllbGQgbmFtZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1InswW2Zvby1iYXJdfSIuZm9ybWF0KHt1J2Zvby1iYXInOnUnYmF6J30pLCB1J2JheicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJ7MFtmb28gYmFyXX0iLmZvcm1hdCh7dSdmb28gYmFyJzp1J2Jheid9KSwgdSdiYXonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiezBbIF19Ii5mb3JtYXQoe3UnICc6M30pLCB1JzMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7Zm9vLl94fScuZm9ybWF0KGZvbz1DKDIwKSksIHUnMjAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezF9ezB9Jy5mb3JtYXQoRCgxMCksIEQoMjApKSwgdScyMDEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swLl94Lnh9Jy5mb3JtYXQoQyhEKHUnYWJjJykpKSwgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezBbMF19Jy5mb3JtYXQoW3UnYWJjJywgdSdkZWYnXSksIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swWzFdfScuZm9ybWF0KFt1J2FiYycsIHUnZGVmJ10pLCB1J2RlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MFsxXVswXX0nLmZvcm1hdChbdSdhYmMnLCBbdSdkZWYnXV0pLCB1J2RlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MFsxXVswXS54fScuZm9ybWF0KFsnYWJjJywgW0QodSdkZWYnKV1dKSwgdSdkZWYnKQorCisgICAgICAgICMgc3RyaW5ncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6LjNzfScuZm9ybWF0KHUnYWJjJyksIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOi4zc30nLmZvcm1hdCh1J2FiJyksIHUnYWInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6LjNzfScuZm9ybWF0KHUnYWJjZGVmJyksIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOi4wc30nLmZvcm1hdCh1J2FiY2RlZicpLCB1JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDozLjNzfScuZm9ybWF0KHUnYWJjJyksIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOjIuM3N9Jy5mb3JtYXQodSdhYmMnKSwgdSdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6Mi4yc30nLmZvcm1hdCh1J2FiYycpLCB1J2FiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOjMuMnN9Jy5mb3JtYXQodSdhYmMnKSwgdSdhYiAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6eDwwc30nLmZvcm1hdCh1J3Jlc3VsdCcpLCB1J3Jlc3VsdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDp4PDVzfScuZm9ybWF0KHUncmVzdWx0JyksIHUncmVzdWx0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOng8NnN9Jy5mb3JtYXQodSdyZXN1bHQnKSwgdSdyZXN1bHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6eDw3c30nLmZvcm1hdCh1J3Jlc3VsdCcpLCB1J3Jlc3VsdHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6eDw4c30nLmZvcm1hdCh1J3Jlc3VsdCcpLCB1J3Jlc3VsdHh4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOiA8N3N9Jy5mb3JtYXQodSdyZXN1bHQnKSwgdSdyZXN1bHQgJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOjw3c30nLmZvcm1hdCh1J3Jlc3VsdCcpLCB1J3Jlc3VsdCAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6PjdzfScuZm9ybWF0KHUncmVzdWx0JyksIHUnIHJlc3VsdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDo+OHN9Jy5mb3JtYXQodSdyZXN1bHQnKSwgdScgIHJlc3VsdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDpeOHN9Jy5mb3JtYXQodSdyZXN1bHQnKSwgdScgcmVzdWx0ICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDpeOXN9Jy5mb3JtYXQodSdyZXN1bHQnKSwgdScgcmVzdWx0ICAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6XjEwc30nLmZvcm1hdCh1J3Jlc3VsdCcpLCB1JyAgcmVzdWx0ICAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6MTAwMDB9Jy5mb3JtYXQodSdhJyksIHUnYScgKyB1JyAnICogOTk5OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOjEwMDAwfScuZm9ybWF0KHUnJyksIHUnICcgKiAxMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOjEwMDAwMDAwfScuZm9ybWF0KHUnJyksIHUnICcgKiAxMDAwMDAwMCkKKworICAgICAgICAjIGZvcm1hdCBzcGVjaWZpZXJzIGZvciB1c2VyIGRlZmluZWQgdHlwZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6YWJjfScuZm9ybWF0KEMoKSksIHUnYWJjJykKKworICAgICAgICAjICFyIGFuZCAhcyBjb2VyY2lvbnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swIXN9Jy5mb3JtYXQodSdIZWxsbycpLCB1J0hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swIXM6fScuZm9ybWF0KHUnSGVsbG8nKSwgdSdIZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MCFzOjE1fScuZm9ybWF0KHUnSGVsbG8nKSwgdSdIZWxsbyAgICAgICAgICAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezAhczoxNXN9Jy5mb3JtYXQodSdIZWxsbycpLCB1J0hlbGxvICAgICAgICAgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MCFyfScuZm9ybWF0KHUnSGVsbG8nKSwgdSJ1J0hlbGxvJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MCFyOn0nLmZvcm1hdCh1J0hlbGxvJyksIHUidSdIZWxsbyciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezAhcn0nLmZvcm1hdChGKHUnSGVsbG8nKSksIHUnRihIZWxsbyknKQorCisgICAgICAgICMgdGVzdCBmYWxsYmFjayB0byBvYmplY3QuX19mb3JtYXRfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezB9Jy5mb3JtYXQoe30pLCB1J3t9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swfScuZm9ybWF0KFtdKSwgdSdbXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MH0nLmZvcm1hdChbMV0pLCB1J1sxXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MH0nLmZvcm1hdChFKHUnZGF0YScpKSwgdSdFKGRhdGEpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3swOmR9Jy5mb3JtYXQoRyh1J2RhdGEnKSksIHUnRyhkYXRhKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MCFzfScuZm9ybWF0KEcodSdkYXRhJykpLCB1J3N0cmluZyBpcyBkYXRhJykKKworICAgICAgICBtc2cgPSAnb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIGlzIGRlcHJlY2F0ZWQnCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKChtc2csIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDpeMTB9Jy5mb3JtYXQoRSh1J2RhdGEnKSksIHUnIEUoZGF0YSkgICcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6XjEwc30nLmZvcm1hdChFKHUnZGF0YScpKSwgdScgRShkYXRhKSAgJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7MDo+MTVzfScuZm9ybWF0KEcodSdkYXRhJykpLCB1JyBzdHJpbmcgaXMgZGF0YScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1InswOmRhdGU6ICVZLSVtLSVkfSIuZm9ybWF0KEkoeWVhcj0yMDA3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aD04LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXk9MjcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1ImRhdGU6IDIwMDctMDgtMjciKQorCisgICAgICAgICMgdGVzdCBkZXJpdmluZyBmcm9tIGEgYnVpbHRpbiB0eXBlIGFuZCBvdmVycmlkaW5nIF9fZm9ybWF0X18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1InswfSIuZm9ybWF0KEooMTApKSwgdSIyMCIpCisKKworICAgICAgICAjIHN0cmluZyBmb3JtYXQgc3BlY2lmaWVycworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezA6fScuZm9ybWF0KCdhJyksIHUnYScpCisKKyAgICAgICAgIyBjb21wdXRlZCBmb3JtYXQgc3BlY2lmaWVycworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiezA6LnsxfX0iLmZvcm1hdCh1J2hlbGxvIHdvcmxkJywgNSksIHUnaGVsbG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiezA6LnsxfXN9Ii5mb3JtYXQodSdoZWxsbyB3b3JsZCcsIDUpLCB1J2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1InswOi57cHJlY2lzaW9ufXN9Ii5mb3JtYXQoJ2hlbGxvIHdvcmxkJywgcHJlY2lzaW9uPTUpLCB1J2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1InswOnt3aWR0aH0ue3ByZWNpc2lvbn1zfSIuZm9ybWF0KCdoZWxsbyB3b3JsZCcsIHdpZHRoPTEwLCBwcmVjaXNpb249NSksIHUnaGVsbG8gICAgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJ7MDp7d2lkdGh9LntwcmVjaXNpb259c30iLmZvcm1hdCgnaGVsbG8gd29ybGQnLCB3aWR0aD0nMTAnLCBwcmVjaXNpb249JzUnKSwgdSdoZWxsbyAgICAgJykKKworICAgICAgICAjIHRlc3QgdmFyaW91cyBlcnJvcnMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSd7Jy5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUnfScuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1J2F7Jy5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUnYX0nLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSd7YScuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1J31hJy5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHUnezB9Jy5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHUnezF9Jy5mb3JtYXQsIHUnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsICAgdSd7eH0nLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ9eyIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InsiLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiYWJjezA6e30iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7MCIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCB1InswLn0iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7MC59Ii5mb3JtYXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHUiezBbfSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InswW30iLmZvcm1hdCwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCAgIHUiezBdfSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InswLltdfSIuZm9ybWF0LCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InswLi5mb299Ii5mb3JtYXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiezBbMH0iLmZvcm1hdCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7MFswOmZvb30iLmZvcm1hdCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsICAgdSJ7Y119Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUie3sge3t7MH19Ii5mb3JtYXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiezB9fSIuZm9ybWF0LCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgICB1Intmb299Ii5mb3JtYXQsIGJhcj0zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InswIXh9Ii5mb3JtYXQsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUiezAhfSIuZm9ybWF0LCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InswIXJzfSIuZm9ybWF0LCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InshfSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCB1Ins6fSIuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCB1Ins6c30iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdSJ7fSIuZm9ybWF0KQorICAgICAgICBiaWcgPSB1IjIzMDk4NDc1MDI5Mzg0NzAyOTgzNDc2MDk4MjMwNzU0OTczMjA5NDgyNTczIgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAodSJ7IiArIGJpZyArIHUifSIpLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgKHUie1siICsgYmlnICsgdSJdfSIpLmZvcm1hdCwgWzBdKQorCisgICAgICAgICMgaXNzdWUgNjA4OQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InswWzBdeH0iLmZvcm1hdCwgW05vbmVdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1InswWzBdKDEwKX0iLmZvcm1hdCwgW05vbmVdKQorCisgICAgICAgICMgY2FuJ3QgaGF2ZSBhIHJlcGxhY2VtZW50IG9uIHRoZSBmaWVsZCBuYW1lIHBvcnRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1J3swW3sxfV19Jy5mb3JtYXQsIHUnYWJjZGVmZycsIDQpCisKKyAgICAgICAgIyBleGNlZWQgbWF4aW11bSByZWN1cnNpb24gZGVwdGgKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7MDp7MTp7Mn19fSIuZm9ybWF0LCB1J2FiYycsIHUncycsIHUnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7MDp7MTp7Mjp7Mzp7NDp7NTp7Nn19fX19fX0iLmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNykKKworICAgICAgICAjIHN0cmluZyBmb3JtYXQgc3BlYyBlcnJvcnMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7MDotc30iLmZvcm1hdCwgdScnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIHUiIiwgdSItIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSJ7MDo9c30iLmZvcm1hdCwgdScnKQorCisgICAgICAgICMgdGVzdCBjb21iaW5pbmcgc3RyaW5nIGFuZCB1bmljb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJmb297MH0iLmZvcm1hdCgnYmFyJyksIHUnZm9vYmFyJykKKyAgICAgICAgIyBUaGlzIHdpbGwgdHJ5IHRvIGNvbnZlcnQgdGhlIGFyZ3VtZW50IGZyb20gdW5pY29kZSB0byBzdHIsIHdoaWNoCisgICAgICAgICMgIHdpbGwgc3VjY2VlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJmb297MH0iLmZvcm1hdCh1J2JhcicpLCAnZm9vYmFyJykKKyAgICAgICAgIyBUaGlzIHdpbGwgdHJ5IHRvIGNvbnZlcnQgdGhlIGFyZ3VtZW50IGZyb20gdW5pY29kZSB0byBzdHIsIHdoaWNoCisgICAgICAgICMgIHdpbGwgZmFpbAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsICJmb297MH0iLmZvcm1hdCwgdSdcdTEwMDBiYXInKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2h1Z2VfcHJlY2lzaW9uKHNlbGYpOgorICAgICAgICBmb3JtYXRfc3RyaW5nID0gdSIue31mIi5mb3JtYXQoc3lzLm1heHNpemUgKyAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0KDIuMzQsIGZvcm1hdF9zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfaHVnZV93aWR0aChzZWxmKToKKyAgICAgICAgZm9ybWF0X3N0cmluZyA9IHUie31mIi5mb3JtYXQoc3lzLm1heHNpemUgKyAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0KDIuMzQsIGZvcm1hdF9zdHJpbmcpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfaHVnZV9pdGVtX251bWJlcihzZWxmKToKKyAgICAgICAgZm9ybWF0X3N0cmluZyA9IHUie3t7fTouNmZ9fSIuZm9ybWF0KHN5cy5tYXhzaXplICsgMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHJlc3VsdCA9IGZvcm1hdF9zdHJpbmcuZm9ybWF0KDIuMzQpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfYXV0b19udW1iZXJpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeD0xMDApOgorICAgICAgICAgICAgICAgIHNlbGYuX3ggPSB4CisgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBzcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlYworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7fScuZm9ybWF0KDEwKSwgdScxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7OjV9Jy5mb3JtYXQoJ3MnKSwgdSdzICAgICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSd7IXJ9Jy5mb3JtYXQoJ3MnKSwgdSIncyciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUney5feH0nLmZvcm1hdChDKDEwKSksIHUnMTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUne1sxXX0nLmZvcm1hdChbMSwgMl0pLCB1JzInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUne1thXX0nLmZvcm1hdCh7J2EnOjQsICdiJzoyfSksIHUnNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdhe31ie31jJy5mb3JtYXQoMCwgMSksIHUnYTBiMWMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSdhezp7fX1iJy5mb3JtYXQoJ3gnLCAnXjEwJyksIHUnYSAgICB4ICAgICBiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J2F7Ont9eH1iJy5mb3JtYXQoMjAsICcjJyksIHUnYTB4MTRiJykKKworICAgICAgICAjIGNhbid0IG1peCBhbmQgbWF0Y2ggbnVtYmVyaW5nIGFuZCBhdXRvLW51bWJlcmluZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1J3t9ezF9Jy5mb3JtYXQsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUnezF9e30nLmZvcm1hdCwgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSd7OnsxfX0nLmZvcm1hdCwgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdSd7MDp7fX0nLmZvcm1hdCwgMSwgMikKKworICAgICAgICAjIGNhbiBtaXggYW5kIG1hdGNoIGF1dG8tbnVtYmVyaW5nIGFuZCBuYW1lZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUne2Z9e30nLmZvcm1hdCg0LCBmPSd0ZXN0JyksIHUndGVzdDQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUne317Zn0nLmZvcm1hdCg0LCBmPSd0ZXN0JyksIHUnNHRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUnezp7Zn19e2d9e30nLmZvcm1hdCgxLCAzLCBnPSdnJywgZj0yKSwgdScgMWczJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1J3tmOnt9fXt9e2d9Jy5mb3JtYXQoMiwgNCwgZj0xLCBnPSdnJyksIHUnIDE0ZycpCisKKyAgICBkZWYgdGVzdF9yYWlzZU1lbUVycm9yKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSBmcmVlbGlzdCBjb250YWlucyBhIGNvbnNpc3RlbnQgb2JqZWN0LCBldmVuCisgICAgICAgICMgd2hlbiBhIHN0cmluZyBhbGxvY2F0aW9uIGZhaWxzIHdpdGggYSBNZW1vcnlFcnJvci4KKyAgICAgICAgIyBUaGlzIHVzZWQgdG8gY3Jhc2ggdGhlIGludGVycHJldGVyLAorICAgICAgICAjIG9yIGxlYWsgcmVmZXJlbmNlcyB3aGVuIHRoZSBudW1iZXIgd2FzIHNtYWxsZXIuCisgICAgICAgIGNoYXJ3aWR0aCA9IDQgaWYgc3lzLm1heHVuaWNvZGUgPj0gMHgxMDAwMCBlbHNlIDIKKyAgICAgICAgIyBOb3RlOiBzeXMubWF4c2l6ZSBpcyBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4IGFsbG9jYXRpb24gYmVjYXVzZSBvZgorICAgICAgICAjIHRoZSBzaWduZWRuZXNzIG9mIFB5X3NzaXplX3QuCisgICAgICAgIGFsbG9jID0gbGFtYmRhOiB1ImEiICogKHN5cy5tYXhzaXplIC8vIGNoYXJ3aWR0aCAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE1lbW9yeUVycm9yLCBhbGxvYykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTWVtb3J5RXJyb3IsIGFsbG9jKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBVKHVuaWNvZGUpOgorICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1J19fdW5pY29kZV9fIG92ZXJyaWRkZW4nCisgICAgICAgIHUgPSBVKHUneHh4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiJXMiICUgdSwgdSdfX3VuaWNvZGVfXyBvdmVycmlkZGVuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgie30iLmZvcm1hdCh1KSwgJ19fdW5pY29kZV9fIG92ZXJyaWRkZW4nKQorCisgICAgZGVmIHRlc3RfZW5jb2RlX2RlY2ltYWwoc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCB1bmljb2RlX2VuY29kZWRlY2ltYWwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlX2VuY29kZWRlY2ltYWwodScxMjMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJzEyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZV9lbmNvZGVkZWNpbWFsKHUnXHUwNjYzLlx1MDY2MVx1MDY2NCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInMy4xNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZV9lbmNvZGVkZWNpbWFsKHUiXE57RU0gU1BBQ0V9My4xNFxOe0VOIFNQQUNFfSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInIDMuMTQgJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlX2VuY29kZWRlY2ltYWwsIHUiMTIzXHUyMGFjIiwgInN0cmljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZV9lbmNvZGVkZWNpbWFsKHUiMTIzXHUyMGFjIiwgInJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJzEyMz8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGVfZW5jb2RlZGVjaW1hbCh1IjEyM1x1MjBhYyIsICJpZ25vcmUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJzEyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZV9lbmNvZGVkZWNpbWFsKHUiMTIzXHUyMGFjIiwgInhtbGNoYXJyZWZyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgYicxMjMmIzgzNjQ7JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlX2VuY29kZWRlY2ltYWwodSIxMjNcdTIwYWMiLCAiYmFja3NsYXNocmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInMTIzXFx1MjBhYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5pY29kZV9lbmNvZGVkZWNpbWFsKHUiMTIzXHUyMGFjXE57RU0gU1BBQ0V9IiwgInJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJzEyMz8gJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlX2VuY29kZWRlY2ltYWwodSIxMjNcdTIwYWNcdTIwYWMiLCAicmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInMTIzPz8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuaWNvZGVfZW5jb2RlZGVjaW1hbCh1IjEyM1x1MjBhY1x1MDY2MCIsICJyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgYicxMjM/MCcpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3VuaWNvZGVfZmlsZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3VuaWNvZGVfZmlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDRiYWQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdW5pY29kZV9maWxlLnB5CkBAIC0wLDAgKzEsMjAwIEBACisjIFRlc3Qgc29tZSBVbmljb2RlIGZpbGUgbmFtZSBzZW1hbnRpY3MKKyMgV2UgZG9udCB0ZXN0IG1hbnkgb3BlcmF0aW9ucyBvbiBmaWxlcyBvdGhlciB0aGFuCisjIHRoYXQgdGhlaXIgbmFtZXMgY2FuIGJlIHVzZWQgd2l0aCBVbmljb2RlIGNoYXJhY3RlcnMuCitpbXBvcnQgb3MsIGdsb2IsIHRpbWUsIHNodXRpbAoraW1wb3J0IHVuaWNvZGVkYXRhCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk5fVU5JQ09ERQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOX0VOQ09ESU5HLCBURVNURk5fVU5FTkNPREFCTEUKK3RyeToKKyAgICBURVNURk5fRU5DT0RFRCA9IFRFU1RGTl9VTklDT0RFLmVuY29kZShURVNURk5fRU5DT0RJTkcpCitleGNlcHQgKFVuaWNvZGVFcnJvciwgVHlwZUVycm9yKToKKyAgICAjIEVpdGhlciB0aGUgZmlsZSBzeXN0ZW0gZW5jb2RpbmcgaXMgTm9uZSwgb3IgdGhlIGZpbGUgbmFtZQorICAgICMgY2Fubm90IGJlIGVuY29kZWQgaW4gdGhlIGZpbGUgc3lzdGVtIGVuY29kaW5nLgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJObyBVbmljb2RlIGZpbGVzeXN0ZW0gc2VtYW50aWNzIG9uIHRoaXMgcGxhdGZvcm0uIikKKworaWYgVEVTVEZOX0VOQ09ERUQuZGVjb2RlKFRFU1RGTl9FTkNPRElORykgIT0gVEVTVEZOX1VOSUNPREU6CisgICAgIyBUaGUgZmlsZSBzeXN0ZW0gZW5jb2RpbmcgZG9lcyBub3Qgc3VwcG9ydCBMYXRpbi0xCisgICAgIyAod2hpY2ggdGVzdF9zdXBwb3J0IGFzc3VtZXMpLCBzbyB0cnkgdGhlIGZpbGUgc3lzdGVtCisgICAgIyBlbmNvZGluZyBpbnN0ZWFkLgorICAgIGltcG9ydCBzeXMKKyAgICB0cnk6CisgICAgICAgIFRFU1RGTl9VTklDT0RFID0gdW5pY29kZSgiQHRlc3QtXHhlMFx4ZjIiLCBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkpCisgICAgICAgIFRFU1RGTl9FTkNPREVEID0gVEVTVEZOX1VOSUNPREUuZW5jb2RlKFRFU1RGTl9FTkNPRElORykKKyAgICAgICAgaWYgJz8nIGluIFRFU1RGTl9FTkNPREVEOgorICAgICAgICAgICAgIyBNQkNTIHdpbGwgbm90IHJlcG9ydCB0aGUgZXJyb3IgcHJvcGVybHkKKyAgICAgICAgICAgIHJhaXNlIFVuaWNvZGVFcnJvciwgIm1iY3MgZW5jb2RpbmcgcHJvYmxlbSIKKyAgICBleGNlcHQgKFVuaWNvZGVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNhbm5vdCBmaW5kIGEgc3VpdGVhYmxlIGZpbGVuYW1lLiIpCisKK2lmIFRFU1RGTl9FTkNPREVELmRlY29kZShURVNURk5fRU5DT0RJTkcpICE9IFRFU1RGTl9VTklDT0RFOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJDYW5ub3QgZmluZCBhIHN1aXRhYmxlIGZpbGVuYW1lLiIpCisKK2RlZiByZW1vdmVfaWZfZXhpc3RzKGZpbGVuYW1lKToKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CisgICAgICAgIG9zLnVubGluayhmaWxlbmFtZSkKKworY2xhc3MgVGVzdFVuaWNvZGVGaWxlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUaGUgJ2RvXycgZnVuY3Rpb25zIGFyZSB0aGUgYWN0dWFsIHRlc3RzLiAgVGhleSBnZW5lcmFsbHkgYXNzdW1lIHRoZQorICAgICMgZmlsZSBhbHJlYWR5IGV4aXN0cyBldGMuCisKKyAgICAjIERvIGFsbCB0aGUgdGVzdHMgd2UgY2FuIGdpdmVuIG9ubHkgYSBzaW5nbGUgZmlsZW5hbWUuICBUaGUgZmlsZSBzaG91bGQKKyAgICAjIGV4aXN0LgorICAgIGRlZiBfZG9fc2luZ2xlKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGZpbGVuYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLmFjY2VzcyhmaWxlbmFtZSwgb3MuUl9PSykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmFic3BhdGgoZmlsZW5hbWUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MuYWNjZXNzKG9zLnBhdGguYWJzcGF0aChmaWxlbmFtZSksIG9zLlJfT0spKQorICAgICAgICBvcy5jaG1vZChmaWxlbmFtZSwgMDc3NykKKyAgICAgICAgb3MudXRpbWUoZmlsZW5hbWUsIE5vbmUpCisgICAgICAgIG9zLnV0aW1lKGZpbGVuYW1lLCAodGltZS50aW1lKCksIHRpbWUudGltZSgpKSkKKyAgICAgICAgIyBDb3B5L3JlbmFtZSBldGMgdGVzdHMgdXNpbmcgdGhlIHNhbWUgZmlsZW5hbWUKKyAgICAgICAgc2VsZi5fZG9fY29weWlzaChmaWxlbmFtZSwgZmlsZW5hbWUpCisgICAgICAgICMgRmlsZW5hbWUgc2hvdWxkIGFwcGVhciBpbiBnbG9iIG91dHB1dAorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBvcy5wYXRoLmFic3BhdGgoZmlsZW5hbWUpPT1vcy5wYXRoLmFic3BhdGgoZ2xvYi5nbG9iKGZpbGVuYW1lKVswXSkpCisgICAgICAgICMgYmFzZW5hbWUgc2hvdWxkIGFwcGVhciBpbiBsaXN0ZGlyLgorICAgICAgICBwYXRoLCBiYXNlID0gb3MucGF0aC5zcGxpdChvcy5wYXRoLmFic3BhdGgoZmlsZW5hbWUpKQorICAgICAgICBpZiBpc2luc3RhbmNlKGJhc2UsIHN0cik6CisgICAgICAgICAgICBiYXNlID0gYmFzZS5kZWNvZGUoVEVTVEZOX0VOQ09ESU5HKQorICAgICAgICBmaWxlX2xpc3QgPSBvcy5saXN0ZGlyKHBhdGgpCisgICAgICAgICMgbGlzdGRpcigpIHdpdGggYSB1bmljb2RlIGFyZyBtYXkgb3IgbWF5IG5vdCByZXR1cm4gVW5pY29kZQorICAgICAgICAjIG9iamVjdHMsIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uCisgICAgICAgIGlmIGZpbGVfbGlzdCBhbmQgaXNpbnN0YW5jZShmaWxlX2xpc3RbMF0sIHN0cik6CisgICAgICAgICAgICBmaWxlX2xpc3QgPSBbZi5kZWNvZGUoVEVTVEZOX0VOQ09ESU5HKSBmb3IgZiBpbiBmaWxlX2xpc3RdCisKKyAgICAgICAgIyBOb3JtYWxpemUgdGhlIHVuaWNvZGUgc3RyaW5ncywgYXMgcm91bmQtdHJpcHBpbmcgdGhlIG5hbWUgdmlhIHRoZSBPUworICAgICAgICAjIG1heSByZXR1cm4gYSBkaWZmZXJlbnQgKGJ1dCBlcXVpdmFsZW50KSB2YWx1ZS4KKyAgICAgICAgYmFzZSA9IHVuaWNvZGVkYXRhLm5vcm1hbGl6ZSgiTkZEIiwgYmFzZSkKKyAgICAgICAgZmlsZV9saXN0ID0gW3VuaWNvZGVkYXRhLm5vcm1hbGl6ZSgiTkZEIiwgZikgZm9yIGYgaW4gZmlsZV9saXN0XQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYmFzZSwgZmlsZV9saXN0KQorCisgICAgIyBEbyBhcyBtYW55ICJlcXVpdmFsYW5jeScgdGVzdHMgYXMgd2UgY2FuIC0gaWUsIGNoZWNrIHRoYXQgYWx0aG91Z2ggd2UKKyAgICAjIGhhdmUgZGlmZmVyZW50IHR5cGVzIGZvciB0aGUgZmlsZW5hbWUsIHRoZXkgcmVmZXIgdG8gdGhlIHNhbWUgZmlsZS4KKyAgICBkZWYgX2RvX2VxdWl2YWxlbnQoc2VsZiwgZmlsZW5hbWUxLCBmaWxlbmFtZTIpOgorICAgICAgICAjIE5vdGUgd2Ugb25seSBjaGVjayAiZmlsZW5hbWUxIGFnYWluc3QgZmlsZW5hbWUyIiAtIHdlIGRvbid0IGJvdGhlcgorICAgICAgICAjIGNoZWNraW5nICJmaWxlbmFtZTIgYWdhaW5zdCAxIiwgYXMgd2UgYXNzdW1lIHdlIGFyZSBjYWxsZWQgYWdhaW4gd2l0aAorICAgICAgICAjIHRoZSBhcmdzIHJldmVyc2VkLgorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShmaWxlbmFtZTEpIT10eXBlKGZpbGVuYW1lMiksCisgICAgICAgICAgICAgICAgICAgICJObyBwb2ludCBjaGVja2luZyBlcXVpdmFsZW50IGZpbGVuYW1lcyBvZiB0aGUgc2FtZSB0eXBlIikKKyAgICAgICAgIyBzdGF0IGFuZCBsc3RhdCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdHMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChmaWxlbmFtZTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KGZpbGVuYW1lMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubHN0YXQoZmlsZW5hbWUxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MubHN0YXQoZmlsZW5hbWUyKSkKKyAgICAgICAgIyBDb3B5L3JlbmFtZSBldGMgdGVzdHMgdXNpbmcgZXF1aXZhbGVudCBmaWxlbmFtZQorICAgICAgICBzZWxmLl9kb19jb3B5aXNoKGZpbGVuYW1lMSwgZmlsZW5hbWUyKQorCisgICAgIyBUZXN0cyB0aGF0IGNvcHksIG1vdmUsIGV0YyBvbmUgZmlsZSB0byBhbm90aGVyLgorICAgIGRlZiBfZG9fY29weWlzaChzZWxmLCBmaWxlbmFtZTEsIGZpbGVuYW1lMik6CisgICAgICAgICMgU2hvdWxkIGJlIGFibGUgdG8gcmVuYW1lIHRoZSBmaWxlIHVzaW5nIGVpdGhlciBuYW1lLgorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUxKSkgIyBtdXN0IGV4aXN0LgorICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUxLCBmaWxlbmFtZTIgKyAiLm5ldyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShmaWxlbmFtZTErIi5uZXciKSkKKyAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lMSArICIubmV3IiwgZmlsZW5hbWUyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUyKSkKKworICAgICAgICBzaHV0aWwuY29weShmaWxlbmFtZTEsIGZpbGVuYW1lMiArICIubmV3IikKKyAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lMSArICIubmV3IikgIyByZW1vdmUgdXNpbmcgZXF1aXYgbmFtZS4KKyAgICAgICAgIyBBbmQgYSBjb3VwbGUgb2YgbW92ZXMsIG9uZSB1c2luZyBlYWNoIG5hbWUuCisgICAgICAgIHNodXRpbC5tb3ZlKGZpbGVuYW1lMSwgZmlsZW5hbWUyICsgIi5uZXciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lMikpCisgICAgICAgIHNodXRpbC5tb3ZlKGZpbGVuYW1lMSArICIubmV3IiwgZmlsZW5hbWUyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZmlsZW5hbWUxKSkKKyAgICAgICAgIyBOb3RlIC0gZHVlIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzaHV0aWwubW92ZSwKKyAgICAgICAgIyBpdCB0cmllcyBhIHJlbmFtZSBmaXJzdC4gIFRoaXMgb25seSBmYWlscyBvbiBXaW5kb3dzIHdoZW4gb24KKyAgICAgICAgIyBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zIC0gYW5kIHRoaXMgdGVzdCBjYW4ndCBlbnN1cmUgdGhhdC4KKyAgICAgICAgIyBTbyB3ZSB0ZXN0IHRoZSBzaHV0aWwuY29weTIgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSB0aGluZyBtb3N0CisgICAgICAgICMgbGlrZWx5IHRvIGZhaWwuCisgICAgICAgIHNodXRpbC5jb3B5MihmaWxlbmFtZTEsIGZpbGVuYW1lMiArICIubmV3IikKKyAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lMSArICIubmV3IikKKworICAgIGRlZiBfZG9fZGlyZWN0b3J5KHNlbGYsIG1ha2VfbmFtZSwgY2hkaXJfbmFtZSwgZW5jb2RlZCk6CisgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIobWFrZV9uYW1lKToKKyAgICAgICAgICAgIG9zLnJtZGlyKG1ha2VfbmFtZSkKKyAgICAgICAgb3MubWtkaXIobWFrZV9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5jaGRpcihjaGRpcl9uYW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG5vdCBlbmNvZGVkOgorICAgICAgICAgICAgICAgICAgICBjd2RfcmVzdWx0ID0gb3MuZ2V0Y3dkdSgpCisgICAgICAgICAgICAgICAgICAgIG5hbWVfcmVzdWx0ID0gbWFrZV9uYW1lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY3dkX3Jlc3VsdCA9IG9zLmdldGN3ZCgpLmRlY29kZShURVNURk5fRU5DT0RJTkcpCisgICAgICAgICAgICAgICAgICAgIG5hbWVfcmVzdWx0ID0gbWFrZV9uYW1lLmRlY29kZShURVNURk5fRU5DT0RJTkcpCisKKyAgICAgICAgICAgICAgICBjd2RfcmVzdWx0ID0gdW5pY29kZWRhdGEubm9ybWFsaXplKCJORkQiLCBjd2RfcmVzdWx0KQorICAgICAgICAgICAgICAgIG5hbWVfcmVzdWx0ID0gdW5pY29kZWRhdGEubm9ybWFsaXplKCJORkQiLCBuYW1lX3Jlc3VsdCkKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5iYXNlbmFtZShjd2RfcmVzdWx0KSxuYW1lX3Jlc3VsdCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuY2hkaXIoY3dkKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3Mucm1kaXIobWFrZV9uYW1lKQorCisgICAgIyBUaGUgJ190ZXN0JyBmdW5jdGlvbnMgJ2VudHJ5IHBvaW50cyB3aXRoIHBhcmFtcycgLSBpZSwgd2hhdCB0aGUKKyAgICAjIHRvcC1sZXZlbCAndGVzdCcgZnVuY3Rpb25zIHdvdWxkIGJlIGlmIHRoZXkgY291bGQgdGFrZSBwYXJhbXMKKyAgICBkZWYgX3Rlc3Rfc2luZ2xlKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgcmVtb3ZlX2lmX2V4aXN0cyhmaWxlbmFtZSkKKyAgICAgICAgZiA9IGZpbGUoZmlsZW5hbWUsICJ3IikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2RvX3NpbmdsZShmaWxlbmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayhmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSkpCisgICAgICAgICMgYW5kIGFnYWluIHdpdGggb3Mub3Blbi4KKyAgICAgICAgZiA9IG9zLm9wZW4oZmlsZW5hbWUsIG9zLk9fQ1JFQVQpCisgICAgICAgIG9zLmNsb3NlKGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2RvX3NpbmdsZShmaWxlbmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnVubGluayhmaWxlbmFtZSkKKworICAgIGRlZiBfdGVzdF9lcXVpdmFsZW50KHNlbGYsIGZpbGVuYW1lMSwgZmlsZW5hbWUyKToKKyAgICAgICAgcmVtb3ZlX2lmX2V4aXN0cyhmaWxlbmFtZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUyKSkKKyAgICAgICAgZiA9IGZpbGUoZmlsZW5hbWUxLCAidyIpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9kb19lcXVpdmFsZW50KGZpbGVuYW1lMSwgZmlsZW5hbWUyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lMSkKKworICAgICMgVGhlICd0ZXN0JyBmdW5jdGlvbnMgYXJlIHVuaXR0ZXN0IGVudHJ5IHBvaW50cywgYW5kIHNpbXBseSBjYWxsIG91cgorICAgICMgX3Rlc3QgZnVuY3Rpb25zIHdpdGggZWFjaCBvZiB0aGUgZmlsZW5hbWUgY29tYmluYXRpb25zIHdlIHdpc2ggdG8gdGVzdAorICAgIGRlZiB0ZXN0X3NpbmdsZV9maWxlcyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zaW5nbGUoVEVTVEZOX0VOQ09ERUQpCisgICAgICAgIHNlbGYuX3Rlc3Rfc2luZ2xlKFRFU1RGTl9VTklDT0RFKQorICAgICAgICBpZiBURVNURk5fVU5FTkNPREFCTEUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl90ZXN0X3NpbmdsZShURVNURk5fVU5FTkNPREFCTEUpCisKKyAgICBkZWYgdGVzdF9lcXVpdmFsZW50X2ZpbGVzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2VxdWl2YWxlbnQoVEVTVEZOX0VOQ09ERUQsIFRFU1RGTl9VTklDT0RFKQorICAgICAgICBzZWxmLl90ZXN0X2VxdWl2YWxlbnQoVEVTVEZOX1VOSUNPREUsIFRFU1RGTl9FTkNPREVEKQorCisgICAgZGVmIHRlc3RfZGlyZWN0b3JpZXMoc2VsZik6CisgICAgICAgICMgRm9yIGFsbCAnZXF1aXZhbGVudCcgY29tYmluYXRpb25zOgorICAgICAgICAjICBNYWtlIGRpciB3aXRoIGVuY29kZWQsIGNoZGlyIHdpdGggdW5pY29kZSwgY2hlY2tkaXIgd2l0aCBlbmNvZGVkCisgICAgICAgICMgIChvciB1bmljb2RlL2VuY29kZWQvdW5pY29kZSwgZXRjCisgICAgICAgIGV4dCA9ICIuZGlyIgorICAgICAgICBzZWxmLl9kb19kaXJlY3RvcnkoVEVTVEZOX0VOQ09ERUQrZXh0LCBURVNURk5fRU5DT0RFRCtleHQsIFRydWUpCisgICAgICAgIHNlbGYuX2RvX2RpcmVjdG9yeShURVNURk5fRU5DT0RFRCtleHQsIFRFU1RGTl9VTklDT0RFK2V4dCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5fZG9fZGlyZWN0b3J5KFRFU1RGTl9VTklDT0RFK2V4dCwgVEVTVEZOX0VOQ09ERUQrZXh0LCBGYWxzZSkKKyAgICAgICAgc2VsZi5fZG9fZGlyZWN0b3J5KFRFU1RGTl9VTklDT0RFK2V4dCwgVEVTVEZOX1VOSUNPREUrZXh0LCBGYWxzZSkKKyAgICAgICAgIyBPdXIgZGlyZWN0b3J5IG5hbWUgdGhhdCBjYW4ndCB1c2UgYSBub24tdW5pY29kZSBuYW1lLgorICAgICAgICBpZiBURVNURk5fVU5FTkNPREFCTEUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9kb19kaXJlY3RvcnkoVEVTVEZOX1VORU5DT0RBQkxFK2V4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNURk5fVU5FTkNPREFCTEUrZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMGVjZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weQpAQCAtMCwwICsxLDMxNyBAQAorIiIiIFRlc3Qgc2NyaXB0IGZvciB0aGUgdW5pY29kZWRhdGEgbW9kdWxlLgorCisgICAgV3JpdHRlbiBieSBNYXJjLUFuZHJlIExlbWJ1cmcgKG1hbEBsZW1idXJnLmNvbSkuCisKKyAgICAoYykgQ29weXJpZ2h0IENOUkksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIE5PIFdBUlJBTlRZLgorCisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAorCitlbmNvZGluZyA9ICd1dGYtOCcKKworCisjIyMgUnVuIHRlc3RzCisKK2NsYXNzIFVuaWNvZGVNZXRob2RzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIHVwZGF0ZSB0aGlzLCBpZiB0aGUgZGF0YWJhc2UgY2hhbmdlcworICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnNDUwNGRmZmQwMzViYWVhMDJjNWI5ZGU4MmJlYmMzZDY1ZTBlMGJhZicKKworICAgIGRlZiB0ZXN0X21ldGhvZF9jaGVja3N1bShzZWxmKToKKyAgICAgICAgaCA9IGhhc2hsaWIuc2hhMSgpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDB4MTAwMDApOgorICAgICAgICAgICAgY2hhciA9IHVuaWNocihpKQorICAgICAgICAgICAgZGF0YSA9IFsKKyAgICAgICAgICAgICAgICAjIFByZWRpY2F0ZXMgKHNpbmdsZSBjaGFyKQorICAgICAgICAgICAgICAgIHUiMDEiW2NoYXIuaXNhbG51bSgpXSwKKyAgICAgICAgICAgICAgICB1IjAxIltjaGFyLmlzYWxwaGEoKV0sCisgICAgICAgICAgICAgICAgdSIwMSJbY2hhci5pc2RlY2ltYWwoKV0sCisgICAgICAgICAgICAgICAgdSIwMSJbY2hhci5pc2RpZ2l0KCldLAorICAgICAgICAgICAgICAgIHUiMDEiW2NoYXIuaXNsb3dlcigpXSwKKyAgICAgICAgICAgICAgICB1IjAxIltjaGFyLmlzbnVtZXJpYygpXSwKKyAgICAgICAgICAgICAgICB1IjAxIltjaGFyLmlzc3BhY2UoKV0sCisgICAgICAgICAgICAgICAgdSIwMSJbY2hhci5pc3RpdGxlKCldLAorICAgICAgICAgICAgICAgIHUiMDEiW2NoYXIuaXN1cHBlcigpXSwKKworICAgICAgICAgICAgICAgICMgUHJlZGljYXRlcyAobXVsdGlwbGUgY2hhcnMpCisgICAgICAgICAgICAgICAgdSIwMSJbKGNoYXIgKyB1J2FiYycpLmlzYWxudW0oKV0sCisgICAgICAgICAgICAgICAgdSIwMSJbKGNoYXIgKyB1J2FiYycpLmlzYWxwaGEoKV0sCisgICAgICAgICAgICAgICAgdSIwMSJbKGNoYXIgKyB1JzEyMycpLmlzZGVjaW1hbCgpXSwKKyAgICAgICAgICAgICAgICB1IjAxIlsoY2hhciArIHUnMTIzJykuaXNkaWdpdCgpXSwKKyAgICAgICAgICAgICAgICB1IjAxIlsoY2hhciArIHUnYWJjJykuaXNsb3dlcigpXSwKKyAgICAgICAgICAgICAgICB1IjAxIlsoY2hhciArIHUnMTIzJykuaXNudW1lcmljKCldLAorICAgICAgICAgICAgICAgIHUiMDEiWyhjaGFyICsgdScgXHQnKS5pc3NwYWNlKCldLAorICAgICAgICAgICAgICAgIHUiMDEiWyhjaGFyICsgdSdhYmMnKS5pc3RpdGxlKCldLAorICAgICAgICAgICAgICAgIHUiMDEiWyhjaGFyICsgdSdBQkMnKS5pc3VwcGVyKCldLAorCisgICAgICAgICAgICAgICAgIyBNYXBwaW5ncyAoc2luZ2xlIGNoYXIpCisgICAgICAgICAgICAgICAgY2hhci5sb3dlcigpLAorICAgICAgICAgICAgICAgIGNoYXIudXBwZXIoKSwKKyAgICAgICAgICAgICAgICBjaGFyLnRpdGxlKCksCisKKyAgICAgICAgICAgICAgICAjIE1hcHBpbmdzIChtdWx0aXBsZSBjaGFycykKKyAgICAgICAgICAgICAgICAoY2hhciArIHUnYWJjJykubG93ZXIoKSwKKyAgICAgICAgICAgICAgICAoY2hhciArIHUnQUJDJykudXBwZXIoKSwKKyAgICAgICAgICAgICAgICAoY2hhciArIHUnYWJjJykudGl0bGUoKSwKKyAgICAgICAgICAgICAgICAoY2hhciArIHUnQUJDJykudGl0bGUoKSwKKworICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIGgudXBkYXRlKHUnJy5qb2luKGRhdGEpLmVuY29kZShlbmNvZGluZykpCisgICAgICAgIHJlc3VsdCA9IGguaGV4ZGlnZXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNlbGYuZXhwZWN0ZWRjaGVja3N1bSkKKworY2xhc3MgVW5pY29kZURhdGFiYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgSW4gY2FzZSB1bmljb2RlZGF0YSBpcyBub3QgYXZhaWxhYmxlLCB0aGlzIHdpbGwgcmFpc2UgYW4gSW1wb3J0RXJyb3IsCisgICAgICAgICMgYnV0IHRoZSBvdGhlciB0ZXN0IGNhc2VzIHdpbGwgc3RpbGwgYmUgcnVuCisgICAgICAgIGltcG9ydCB1bmljb2RlZGF0YQorICAgICAgICBzZWxmLmRiID0gdW5pY29kZWRhdGEKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZGVsIHNlbGYuZGIKKworY2xhc3MgVW5pY29kZUZ1bmN0aW9uc1Rlc3QoVW5pY29kZURhdGFiYXNlVGVzdCk6CisKKyAgICAjIHVwZGF0ZSB0aGlzLCBpZiB0aGUgZGF0YWJhc2UgY2hhbmdlcworICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnNmNjZjFiMWEzNjQ2MGQyNjk0ZjliMGIwZjAzMjQ5NDJmZTcwZWRlNicKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2NoZWNrc3VtKHNlbGYpOgorICAgICAgICBkYXRhID0gW10KKyAgICAgICAgaCA9IGhhc2hsaWIuc2hhMSgpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMHgxMDAwMCk6CisgICAgICAgICAgICBjaGFyID0gdW5pY2hyKGkpCisgICAgICAgICAgICBkYXRhID0gWworICAgICAgICAgICAgICAgICMgUHJvcGVydGllcworICAgICAgICAgICAgICAgIHN0cihzZWxmLmRiLmRpZ2l0KGNoYXIsIC0xKSksCisgICAgICAgICAgICAgICAgc3RyKHNlbGYuZGIubnVtZXJpYyhjaGFyLCAtMSkpLAorICAgICAgICAgICAgICAgIHN0cihzZWxmLmRiLmRlY2ltYWwoY2hhciwgLTEpKSwKKyAgICAgICAgICAgICAgICBzZWxmLmRiLmNhdGVnb3J5KGNoYXIpLAorICAgICAgICAgICAgICAgIHNlbGYuZGIuYmlkaXJlY3Rpb25hbChjaGFyKSwKKyAgICAgICAgICAgICAgICBzZWxmLmRiLmRlY29tcG9zaXRpb24oY2hhciksCisgICAgICAgICAgICAgICAgc3RyKHNlbGYuZGIubWlycm9yZWQoY2hhcikpLAorICAgICAgICAgICAgICAgIHN0cihzZWxmLmRiLmNvbWJpbmluZyhjaGFyKSksCisgICAgICAgICAgICBdCisgICAgICAgICAgICBoLnVwZGF0ZSgnJy5qb2luKGRhdGEpKQorICAgICAgICByZXN1bHQgPSBoLmhleGRpZ2VzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBzZWxmLmV4cGVjdGVkY2hlY2tzdW0pCisKKyAgICBkZWYgdGVzdF9kaWdpdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmRpZ2l0KHUnQScsIE5vbmUpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuZGlnaXQodSc5JyksIDkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5kaWdpdCh1J1x1MjE1YicsIE5vbmUpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuZGlnaXQodSdcdTI0NjgnKSwgOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmRpZ2l0KHUnXFUwMDAyMDAwMCcsIE5vbmUpLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kYi5kaWdpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmRiLmRpZ2l0LCB1J3h4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5kYi5kaWdpdCwgdSd4JykKKworICAgIGRlZiB0ZXN0X251bWVyaWMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5udW1lcmljKHUnQScsTm9uZSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5udW1lcmljKHUnOScpLCA5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubnVtZXJpYyh1J1x1MjE1YicpLCAwLjEyNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm51bWVyaWModSdcdTI0NjgnKSwgOS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubnVtZXJpYyh1J1x1YTYyNycpLCA3LjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5udW1lcmljKHUnXFUwMDAyMDAwMCcsIE5vbmUpLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kYi5udW1lcmljKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZGIubnVtZXJpYywgdSd4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZGIubnVtZXJpYywgdSd4JykKKworICAgIGRlZiB0ZXN0X2RlY2ltYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5kZWNpbWFsKHUnQScsTm9uZSksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5kZWNpbWFsKHUnOScpLCA5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuZGVjaW1hbCh1J1x1MjE1YicsIE5vbmUpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuZGVjaW1hbCh1J1x1MjQ2OCcsIE5vbmUpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuZGVjaW1hbCh1J1xVMDAwMjAwMDAnLCBOb25lKSwgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZGIuZGVjaW1hbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmRiLmRlY2ltYWwsIHUneHgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmRiLmRlY2ltYWwsIHUneCcpCisKKyAgICBkZWYgdGVzdF9jYXRlZ29yeShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmNhdGVnb3J5KHUnXHVGRkZFJyksICdDbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5jYXRlZ29yeSh1J2EnKSwgJ0xsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmNhdGVnb3J5KHUnQScpLCAnTHUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuY2F0ZWdvcnkodSdcVTAwMDIwMDAwJyksICdMbycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmRiLmNhdGVnb3J5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZGIuY2F0ZWdvcnksIHUneHgnKQorCisgICAgZGVmIHRlc3RfYmlkaXJlY3Rpb25hbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmJpZGlyZWN0aW9uYWwodSdcdUZGRkUnKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5iaWRpcmVjdGlvbmFsKHUnICcpLCAnV1MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuYmlkaXJlY3Rpb25hbCh1J0EnKSwgJ0wnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuYmlkaXJlY3Rpb25hbCh1J1xVMDAwMjAwMDAnKSwgJ0wnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kYi5iaWRpcmVjdGlvbmFsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZGIuYmlkaXJlY3Rpb25hbCwgdSd4eCcpCisKKyAgICBkZWYgdGVzdF9kZWNvbXBvc2l0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuZGVjb21wb3NpdGlvbih1J1x1RkZGRScpLCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuZGVjb21wb3NpdGlvbih1J1x1MDBiYycpLCAnPGZyYWN0aW9uPiAwMDMxIDIwNDQgMDAzNCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmRiLmRlY29tcG9zaXRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kYi5kZWNvbXBvc2l0aW9uLCB1J3h4JykKKworICAgIGRlZiB0ZXN0X21pcnJvcmVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubWlycm9yZWQodSdcdUZGRkUnKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm1pcnJvcmVkKHUnYScpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubWlycm9yZWQodSdcdTIyMDEnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm1pcnJvcmVkKHUnXFUwMDAyMDAwMCcpLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kYi5taXJyb3JlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmRiLm1pcnJvcmVkLCB1J3h4JykKKworICAgIGRlZiB0ZXN0X2NvbWJpbmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmNvbWJpbmluZyh1J1x1RkZGRScpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuY29tYmluaW5nKHUnYScpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuY29tYmluaW5nKHUnXHUyMGUxJyksIDIzMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmNvbWJpbmluZyh1J1xVMDAwMjAwMDAnKSwgMCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZGIuY29tYmluaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZGIuY29tYmluaW5nLCB1J3h4JykKKworICAgIGRlZiB0ZXN0X25vcm1hbGl6ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmRiLm5vcm1hbGl6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5kYi5ub3JtYWxpemUsICd1bmtub3duJywgdSd4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5ub3JtYWxpemUoJ05GS0MnLCB1JycpLCB1JycpCisgICAgICAgICMgVGhlIHJlc3QgY2FuIGJlIGZvdW5kIGluIHRlc3Rfbm9ybWFsaXphdGlvbi5weQorICAgICAgICAjIHdoaWNoIHJlcXVpcmVzIGFuIGV4dGVybmFsIGZpbGUuCisKKyAgICBkZWYgdGVzdF9wcjI5KHNlbGYpOgorICAgICAgICAjIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmV2aWV3L3ByLTI5Lmh0bWwKKyAgICAgICAgIyBTZWUgaXNzdWVzICMxMDU0OTQzIGFuZCAjMTAyNTQuCisgICAgICAgIGNvbXBvc2VkID0gKHUiXHUwYjQ3XHUwMzAwXHUwYjNlIiwgdSJcdTExMDBcdTAzMDBcdTExNjEiLAorICAgICAgICAgICAgICAgICAgICB1J0xpXHUwMzBkdC1zXHUxZTczXHUwMzAxJywKKyAgICAgICAgICAgICAgICAgICAgdSdcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MTUgXHUwOTFjXHUwOTNjJworICAgICAgICAgICAgICAgICAgICArIHUnXHUwOTQxXHUwOTE1XHUwOTQ3XHUwOTMwXHUwOTJjXHUwOTMwXHUwOTRkXHUwOTE3JywKKyAgICAgICAgICAgICAgICAgICAgdSdcdTA5MTVcdTA5M2ZcdTA5MzBcdTA5NGRcdTA5MTdcdTA5M2ZcdTA5MWNcdTA5M2MnCisgICAgICAgICAgICAgICAgICAgICsgJ3VcdTA5MzhcdTA5NGRcdTA5MjRcdTA5M2VcdTA5MjgnKQorICAgICAgICBmb3IgdGV4dCBpbiBjb21wb3NlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5ub3JtYWxpemUoJ05GQycsIHRleHQpLCB0ZXh0KQorCisgICAgZGVmIHRlc3RfaXNzdWUxMDI1NChzZWxmKToKKyAgICAgICAgIyBDcmFzaCByZXBvcnRlZCBpbiAjMTAyNTQKKyAgICAgICAgYSA9IHUnQ1x1MDMzOCcgKiAyMCAgKyB1J0NcdTAzMjcnCisgICAgICAgIGIgPSB1J0NcdTAzMzgnICogMjAgICsgdSdceEM3JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubm9ybWFsaXplKCdORkMnLCBhKSwgYikKKworICAgIGRlZiB0ZXN0X2Vhc3RfYXNpYW5fd2lkdGgoc2VsZik6CisgICAgICAgIGVhdyA9IHNlbGYuZGIuZWFzdF9hc2lhbl93aWR0aAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGVhdywgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGVhdywgdScnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGVhdywgdSdyYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWF3KHUnXHgxZScpLCAnTicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWF3KHUnXHgyMCcpLCAnTmEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVhdyh1J1x1Qzg5NCcpLCAnVycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWF3KHUnXHVGRjY2JyksICdIJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXcodSdcdUZGMUYnKSwgJ0YnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVhdyh1J1x1MjAxMCcpLCAnQScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWF3KHUnXFUwMDAyMDAwMCcpLCAnVycpCisKK2NsYXNzIFVuaWNvZGVNaXNjVGVzdChVbmljb2RlRGF0YWJhc2VUZXN0KToKKworICAgIGRlZiB0ZXN0X2ZhaWxlZF9pbXBvcnRfZHVyaW5nX2NvbXBpbGluZyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA0MzY3CisgICAgICAgICMgRGVjb2RpbmcgXE4gZXNjYXBlcyByZXF1aXJlcyB0aGUgdW5pY29kZWRhdGEgbW9kdWxlLiBJZiBpdCBjYW4ndCBiZQorICAgICAgICAjIGltcG9ydGVkLCB3ZSBzaG91bGRuJ3Qgc2VnZmF1bHQuCisKKyAgICAgICAgIyBUaGlzIHByb2dyYW0gc2hvdWxkIHJhaXNlIGEgU3ludGF4RXJyb3IgaW4gdGhlIGV2YWwuCisgICAgICAgIGNvZGUgPSAiaW1wb3J0IHN5czsiIFwKKyAgICAgICAgICAgICJzeXMubW9kdWxlc1sndW5pY29kZWRhdGEnXSA9IE5vbmU7IiBcCisgICAgICAgICAgICAiIiJldmFsKCJ1J1xOe1NPRlQgSFlQSEVOfSciKSIiIgorICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBjb2RlXQorICAgICAgICAjIFdlIHVzZSBhIHN1YnByb2Nlc3MgYmVjYXVzZSB0aGUgdW5pY29kZWRhdGEgbW9kdWxlIG1heSBhbHJlYWR5IGhhdmUKKyAgICAgICAgIyBiZWVuIGxvYWRlZCBpbiB0aGlzIHByb2Nlc3MuCisgICAgICAgIHBvcGVuID0gc3VicHJvY2Vzcy5Qb3BlbihhcmdzLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBwb3Blbi53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3Blbi5yZXR1cm5jb2RlLCAxKQorICAgICAgICBlcnJvciA9ICJTeW50YXhFcnJvcjogKHVuaWNvZGUgZXJyb3IpIFxOIGVzY2FwZXMgbm90IHN1cHBvcnRlZCAiIFwKKyAgICAgICAgICAgICIoY2FuJ3QgbG9hZCB1bmljb2RlZGF0YSBtb2R1bGUpIgorICAgICAgICBzZWxmLmFzc2VydEluKGVycm9yLCBwb3Blbi5zdGRlcnIucmVhZCgpKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbF9udW1lcmljX2NvbnNpc3RlbnQoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGRlY2ltYWwgYW5kIG51bWVyaWMgYXJlIGNvbnNpc3RlbnQsCisgICAgICAgICMgaS5lLiBpZiBhIGNoYXJhY3RlciBoYXMgYSBkZWNpbWFsIHZhbHVlLAorICAgICAgICAjIGl0cyBudW1lcmljIHZhbHVlIHNob3VsZCBiZSB0aGUgc2FtZS4KKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgweDEwMDAwKToKKyAgICAgICAgICAgIGMgPSB1bmljaHIoaSkKKyAgICAgICAgICAgIGRlYyA9IHNlbGYuZGIuZGVjaW1hbChjLCAtMSkKKyAgICAgICAgICAgIGlmIGRlYyAhPSAtMToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlYywgc2VsZi5kYi5udW1lcmljKGMpKQorICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvdW50ID49IDEwKSAjIHNob3VsZCBoYXZlIHRlc3RlZCBhdCBsZWFzdCB0aGUgQVNDSUkgZGlnaXRzCisKKyAgICBkZWYgdGVzdF9kaWdpdF9udW1lcmljX2NvbnNpc3RlbnQoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGRpZ2l0IGFuZCBudW1lcmljIGFyZSBjb25zaXN0ZW50LAorICAgICAgICAjIGkuZS4gaWYgYSBjaGFyYWN0ZXIgaGFzIGEgZGlnaXQgdmFsdWUsCisgICAgICAgICMgaXRzIG51bWVyaWMgdmFsdWUgc2hvdWxkIGJlIHRoZSBzYW1lLgorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDB4MTAwMDApOgorICAgICAgICAgICAgYyA9IHVuaWNocihpKQorICAgICAgICAgICAgZGVjID0gc2VsZi5kYi5kaWdpdChjLCAtMSkKKyAgICAgICAgICAgIGlmIGRlYyAhPSAtMToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlYywgc2VsZi5kYi5udW1lcmljKGMpKQorICAgICAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvdW50ID49IDEwKSAjIHNob3VsZCBoYXZlIHRlc3RlZCBhdCBsZWFzdCB0aGUgQVNDSUkgZGlnaXRzCisKKyAgICBkZWYgdGVzdF9idWdfMTcwNDc5MyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmxvb2t1cCgiR09USElDIExFVFRFUiBGQUlIVSIpLCB1J1xVMDAwMTAzNDYnKQorCisgICAgZGVmIHRlc3RfdWNkXzUxMChzZWxmKToKKyAgICAgICAgaW1wb3J0IHVuaWNvZGVkYXRhCisgICAgICAgICMgSW4gVUNEIDUuMS4wLCBhIG1pcnJvcmVkIHByb3BlcnR5IGNoYW5nZWQgd3J0LiBVQ0QgMy4yLjAKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVuaWNvZGVkYXRhLm1pcnJvcmVkKHUiXHUwZjNhIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdW5pY29kZWRhdGEudWNkXzNfMl8wLm1pcnJvcmVkKHUiXHUwZjNhIikpCisgICAgICAgICMgQWxzbywgd2Ugbm93IGhhdmUgdHdvIHdheXMgb2YgcmVwcmVzZW50aW5nCisgICAgICAgICMgdGhlIHVwcGVyLWNhc2UgbWFwcGluZzogYXMgZGVsdGEsIG9yIGFzIGFic29sdXRlIHZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1ImEiLnVwcGVyKCk9PXUnQScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1Ilx1MWQ3OSIudXBwZXIoKT09dSdcdWE3N2QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodSIuIi51cHBlcigpPT11Ii4iKQorCisgICAgZGVmIHRlc3RfYnVnXzU4Mjgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJcdTFkNzkiLmxvd2VyKCksIHUiXHUxZDc5IikKKyAgICAgICAgIyBPbmx5IFUrMDAwMCBzaG91bGQgaGF2ZSBVKzAwMDAgYXMgaXRzIHVwcGVyL2xvd2VyL3RpdGxlY2FzZSB2YXJpYW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgYyBmb3IgYyBpbiByYW5nZShzeXMubWF4dW5pY29kZSsxKQorICAgICAgICAgICAgICAgIGlmIHUiXHgwMCIgaW4gdW5pY2hyKGMpLmxvd2VyKCkrdW5pY2hyKGMpLnVwcGVyKCkrdW5pY2hyKGMpLnRpdGxlKCkKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBbMF0KKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYnVnXzQ5NzEoc2VsZik6CisgICAgICAgICMgTEVUVEVSIERaIFdJVEggQ0FST046IERaLCBEeiwgZHoKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ilx1MDFjNCIudGl0bGUoKSwgdSJcdTAxYzUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUiXHUwMWM1Ii50aXRsZSgpLCB1Ilx1MDFjNSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSJcdTAxYzYiLnRpdGxlKCksIHUiXHUwMWM1IikKKworICAgIGRlZiB0ZXN0X2xpbmVicmVha183NjQzKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgweDEwMDAwKToKKyAgICAgICAgICAgIGxpbmVzID0gKHVuaWNocihpKSArIHUnQScpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgaWYgaSBpbiAoMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHg4NSwKKyAgICAgICAgICAgICAgICAgICAgIDB4MWMsIDB4MWQsIDB4MWUsIDB4MjAyOCwgMHgyMDI5KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaW5lcyksIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlx1JS40eCBzaG91bGQgYmUgYSBsaW5lYnJlYWsiICUgaSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJcdSUuNHggc2hvdWxkIG5vdCBiZSBhIGxpbmVicmVhayIgJSBpKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBVbmljb2RlTWlzY1Rlc3QsCisgICAgICAgIFVuaWNvZGVNZXRob2RzVGVzdCwKKyAgICAgICAgVW5pY29kZUZ1bmN0aW9uc1Rlc3QKKyAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3VuaXR0ZXN0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZhOTk4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCB1bml0dGVzdC50ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QodW5pdHRlc3QudGVzdC5zdWl0ZSgpKQorICAgIHRlc3Rfc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91bml2bmV3bGluZXMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91bml2bmV3bGluZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhOTA5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3VuaXZuZXdsaW5lcy5weQpAQCAtMCwwICsxLDEzNSBAQAorIyBUZXN0cyB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0IGZvciBib3RoIHJlYWRpbmcgYW5kIHBhcnNpbmcgZmlsZXMuCisKKyMgTk9URTogdGhpcyBmaWxlIHRlc3RzIHRoZSBuZXcgYGlvYCBsaWJyYXJ5IGJhY2twb3J0ZWQgZnJvbSBQeXRob24gMy54LgorIyBTaW1pbGFyIHRlc3RzIGZvciB0aGUgYnVpbHRpbiBmaWxlIG9iamVjdCBjYW4gYmUgZm91bmQgaW4gdGVzdF91bml2bmV3bGluZXMyay5weS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCisKK2ltcG9ydCBpbworaW1wb3J0IF9weWlvIGFzIHB5aW8KK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CisKK2lmIG5vdCBoYXNhdHRyKHN5cy5zdGRpbiwgJ25ld2xpbmVzJyk6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoCisgICAgICAgICJUaGlzIFB5dGhvbiBkb2VzIG5vdCBoYXZlIHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQiKQorCitGQVRYID0gJ3gnICogKDIqKjE0KQorCitEQVRBX1RFTVBMQVRFID0gWworICAgICJsaW5lMT0xIiwKKyAgICAibGluZTI9J3RoaXMgaXMgYSB2ZXJ5IGxvbmcgbGluZSBkZXNpZ25lZCB0byBnbyBwYXN0IGFueSBkZWZhdWx0ICIgKworICAgICAgICAiYnVmZmVyIGxpbWl0cyB0aGF0IGV4aXN0IGluIGlvLnB5IGJ1dCB3ZSBhbHNvIHdhbnQgdG8gdGVzdCAiICsKKyAgICAgICAgInRoZSB1bmNvbW1vbiBjYXNlLCBuYXR1cmFsbHkuJyIsCisgICAgImRlZiBsaW5lMygpOnBhc3MiLAorICAgICJsaW5lNCA9ICclcyciICUgRkFUWCwKKyAgICBdCisKK0RBVEFfTEYgPSAiXG4iLmpvaW4oREFUQV9URU1QTEFURSkgKyAiXG4iCitEQVRBX0NSID0gIlxyIi5qb2luKERBVEFfVEVNUExBVEUpICsgIlxyIgorREFUQV9DUkxGID0gIlxyXG4iLmpvaW4oREFUQV9URU1QTEFURSkgKyAiXHJcbiIKKworIyBOb3RlIHRoYXQgREFUQV9NSVhFRCBhbHNvIHRlc3RzIHRoZSBhYmlsaXR5IHRvIHJlY29nbml6ZSBhIGxvbmUgXHIKKyMgYmVmb3JlIGVuZC1vZi1maWxlLgorREFUQV9NSVhFRCA9ICJcbiIuam9pbihEQVRBX1RFTVBMQVRFKSArICJcciIKK0RBVEFfU1BMSVQgPSBbeCArICJcbiIgZm9yIHggaW4gREFUQV9URU1QTEFURV0KKworY2xhc3MgVGVzdEdlbmVyaWNVbml2TmV3bGluZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgdXNlIGEgY2xhc3MgdmFyaWFibGUgREFUQSB0byBkZWZpbmUgdGhlIGRhdGEgdG8gd3JpdGUgdG8gdGhlIGZpbGUKKyAgICAjIGFuZCBhIGNsYXNzIHZhcmlhYmxlIE5FV0xJTkUgdG8gc2V0IHRoZSBleHBlY3RlZCBuZXdsaW5lcyB2YWx1ZQorICAgIFJFQURNT0RFID0gJ3InCisgICAgV1JJVEVNT0RFID0gJ3diJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBkYXRhID0gc2VsZi5EQVRBCisgICAgICAgIGlmICJiIiBpbiBzZWxmLldSSVRFTU9ERToKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhLmVuY29kZSgiYXNjaWkiKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi5XUklURU1PREUpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoZGF0YSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBkYXRhID0gZnAucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgREFUQV9MRikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZnAubmV3bGluZXMpLCBzZXQoc2VsZi5ORVdMSU5FKSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lcyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sIHNlbGYuUkVBRE1PREUpIGFzIGZwOgorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgREFUQV9TUExJVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZnAubmV3bGluZXMpLCBzZXQoc2VsZi5ORVdMSU5FKSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBkYXRhID0gW10KKyAgICAgICAgICAgIGQgPSBmcC5yZWFkbGluZSgpCisgICAgICAgICAgICB3aGlsZSBkOgorICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKGQpCisgICAgICAgICAgICAgICAgZCA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX1NQTElUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChmcC5uZXdsaW5lcyksIHNldChzZWxmLk5FV0xJTkUpKQorCisgICAgZGVmIHRlc3Rfc2VlayhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sIHNlbGYuUkVBRE1PREUpIGFzIGZwOgorICAgICAgICAgICAgZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgcG9zID0gZnAudGVsbCgpCisgICAgICAgICAgICBkYXRhID0gZnAucmVhZGxpbmVzKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgREFUQV9TUExJVFsxOl0pCisgICAgICAgICAgICBmcC5zZWVrKHBvcykKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIERBVEFfU1BMSVRbMTpdKQorCisKK2NsYXNzIFRlc3RDUk5ld2xpbmVzKFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKToKKyAgICBORVdMSU5FID0gJ1xyJworICAgIERBVEEgPSBEQVRBX0NSCisKK2NsYXNzIFRlc3RMRk5ld2xpbmVzKFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKToKKyAgICBORVdMSU5FID0gJ1xuJworICAgIERBVEEgPSBEQVRBX0xGCisKK2NsYXNzIFRlc3RDUkxGTmV3bGluZXMoVGVzdEdlbmVyaWNVbml2TmV3bGluZXMpOgorICAgIE5FV0xJTkUgPSAnXHJcbicKKyAgICBEQVRBID0gREFUQV9DUkxGCisKKyAgICBkZWYgdGVzdF90ZWxsKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKE5vbmUpKQorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHBvcyA9IGZwLnRlbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKHNlbGYuTkVXTElORSkpCisKK2NsYXNzIFRlc3RNaXhlZE5ld2xpbmVzKFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKToKKyAgICBORVdMSU5FID0gKCdccicsICdcbicpCisgICAgREFUQSA9IERBVEFfTUlYRUQKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgYmFzZV90ZXN0cyA9IChUZXN0Q1JOZXdsaW5lcywKKyAgICAgICAgICAgICAgICAgIFRlc3RMRk5ld2xpbmVzLAorICAgICAgICAgICAgICAgICAgVGVzdENSTEZOZXdsaW5lcywKKyAgICAgICAgICAgICAgICAgIFRlc3RNaXhlZE5ld2xpbmVzKQorICAgIHRlc3RzID0gW10KKyAgICAjIFRlc3QgdGhlIEMgYW5kIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMuCisgICAgZm9yIHRlc3QgaW4gYmFzZV90ZXN0czoKKyAgICAgICAgY2xhc3MgQ1Rlc3QodGVzdCk6CisgICAgICAgICAgICBvcGVuID0gaW8ub3BlbgorICAgICAgICBDVGVzdC5fX25hbWVfXyA9IHN0cigiQyIgKyB0ZXN0Ll9fbmFtZV9fKQorICAgICAgICBjbGFzcyBQeVRlc3QodGVzdCk6CisgICAgICAgICAgICBvcGVuID0gc3RhdGljbWV0aG9kKHB5aW8ub3BlbikKKyAgICAgICAgUHlUZXN0Ll9fbmFtZV9fID0gc3RyKCJQeSIgKyB0ZXN0Ll9fbmFtZV9fKQorICAgICAgICB0ZXN0cy5hcHBlbmQoQ1Rlc3QpCisgICAgICAgIHRlc3RzLmFwcGVuZChQeVRlc3QpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91bml2bmV3bGluZXMyay5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3VuaXZuZXdsaW5lczJrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlY2EzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91bml2bmV3bGluZXMyay5weQpAQCAtMCwwICsxLDEzMCBAQAorIyBUZXN0cyB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0IGZvciBib3RoIHJlYWRpbmcgYW5kIHBhcnNpbmcgZmlsZXMuCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworaWYgbm90IGhhc2F0dHIoc3lzLnN0ZGluLCAnbmV3bGluZXMnKToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgXAorICAgICAgICAiVGhpcyBQeXRob24gZG9lcyBub3QgaGF2ZSB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0IgorCitGQVRYID0gJ3gnICogKDIqKjE0KQorCitEQVRBX1RFTVBMQVRFID0gWworICAgICJsaW5lMT0xIiwKKyAgICAibGluZTI9J3RoaXMgaXMgYSB2ZXJ5IGxvbmcgbGluZSBkZXNpZ25lZCB0byBnbyBwYXN0IHRoZSBtYWdpYyAiICsKKyAgICAgICAgImh1bmRyZWQgY2hhcmFjdGVyIGxpbWl0IHRoYXQgaXMgaW5zaWRlIGZpbGVvYmplY3QuYyBhbmQgd2hpY2ggIiArCisgICAgICAgICJpcyBtZWFudCB0byBzcGVlZCB1cCB0aGUgY29tbW9uIGNhc2UsIGJ1dCB3ZSBhbHNvIHdhbnQgdG8gdGVzdCAiICsKKyAgICAgICAgInRoZSB1bmNvbW1vbiBjYXNlLCBuYXR1cmFsbHkuJyIsCisgICAgImRlZiBsaW5lMygpOnBhc3MiLAorICAgICJsaW5lNCA9ICclcyciICUgRkFUWCwKKyAgICBdCisKK0RBVEFfTEYgPSAiXG4iLmpvaW4oREFUQV9URU1QTEFURSkgKyAiXG4iCitEQVRBX0NSID0gIlxyIi5qb2luKERBVEFfVEVNUExBVEUpICsgIlxyIgorREFUQV9DUkxGID0gIlxyXG4iLmpvaW4oREFUQV9URU1QTEFURSkgKyAiXHJcbiIKKworIyBOb3RlIHRoYXQgREFUQV9NSVhFRCBhbHNvIHRlc3RzIHRoZSBhYmlsaXR5IHRvIHJlY29nbml6ZSBhIGxvbmUgXHIKKyMgYmVmb3JlIGVuZC1vZi1maWxlLgorREFUQV9NSVhFRCA9ICJcbiIuam9pbihEQVRBX1RFTVBMQVRFKSArICJcciIKK0RBVEFfU1BMSVQgPSBbeCArICJcbiIgZm9yIHggaW4gREFUQV9URU1QTEFURV0KK2RlbCB4CisKK2NsYXNzIFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIHVzZSBhIGNsYXNzIHZhcmlhYmxlIERBVEEgdG8gZGVmaW5lIHRoZSBkYXRhIHRvIHdyaXRlIHRvIHRoZSBmaWxlCisgICAgIyBhbmQgYSBjbGFzcyB2YXJpYWJsZSBORVdMSU5FIHRvIHNldCB0aGUgZXhwZWN0ZWQgbmV3bGluZXMgdmFsdWUKKyAgICBSRUFETU9ERSA9ICdVJworICAgIFdSSVRFTU9ERSA9ICd3YicKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHRlc3Rfc3VwcG9ydC5URVNURk4sIHNlbGYuV1JJVEVNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKHNlbGYuREFUQSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX0xGKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKHNlbGYuTkVXTElORSkpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CisgICAgICAgIHdpdGggb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCBzZWxmLlJFQURNT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIERBVEFfU1BMSVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmcC5uZXdsaW5lcyksIHJlcHIoc2VsZi5ORVdMSU5FKSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBkYXRhID0gW10KKyAgICAgICAgICAgIGQgPSBmcC5yZWFkbGluZSgpCisgICAgICAgICAgICB3aGlsZSBkOgorICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKGQpCisgICAgICAgICAgICAgICAgZCA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX1NQTElUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKHNlbGYuTkVXTElORSkpCisKKyAgICBkZWYgdGVzdF9zZWVrKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBmcC5yZWFkbGluZSgpCisgICAgICAgICAgICBwb3MgPSBmcC50ZWxsKCkKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkbGluZXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBEQVRBX1NQTElUWzE6XSkKKyAgICAgICAgICAgIGZwLnNlZWsocG9zKQorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgREFUQV9TUExJVFsxOl0pCisKKyAgICBkZWYgdGVzdF9leGVjZmlsZShzZWxmKToKKyAgICAgICAgbmFtZXNwYWNlID0ge30KKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgZXhlY2ZpbGUodGVzdF9zdXBwb3J0LlRFU1RGTiwgbmFtZXNwYWNlKQorICAgICAgICBmdW5jID0gbmFtZXNwYWNlWydsaW5lMyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYy5mdW5jX2NvZGUuY29fZmlyc3RsaW5lbm8sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXNwYWNlWydsaW5lNCddLCBGQVRYKQorCisKK2NsYXNzIFRlc3ROYXRpdmVOZXdsaW5lcyhUZXN0R2VuZXJpY1VuaXZOZXdsaW5lcyk6CisgICAgTkVXTElORSA9IE5vbmUKKyAgICBEQVRBID0gREFUQV9MRgorICAgIFJFQURNT0RFID0gJ3InCisgICAgV1JJVEVNT0RFID0gJ3cnCisKK2NsYXNzIFRlc3RDUk5ld2xpbmVzKFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKToKKyAgICBORVdMSU5FID0gJ1xyJworICAgIERBVEEgPSBEQVRBX0NSCisKK2NsYXNzIFRlc3RMRk5ld2xpbmVzKFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKToKKyAgICBORVdMSU5FID0gJ1xuJworICAgIERBVEEgPSBEQVRBX0xGCisKK2NsYXNzIFRlc3RDUkxGTmV3bGluZXMoVGVzdEdlbmVyaWNVbml2TmV3bGluZXMpOgorICAgIE5FV0xJTkUgPSAnXHJcbicKKyAgICBEQVRBID0gREFUQV9DUkxGCisKKyAgICBkZWYgdGVzdF90ZWxsKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4odGVzdF9zdXBwb3J0LlRFU1RGTiwgc2VsZi5SRUFETU9ERSkgYXMgZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKE5vbmUpKQorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHBvcyA9IGZwLnRlbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnAubmV3bGluZXMpLCByZXByKHNlbGYuTkVXTElORSkpCisKK2NsYXNzIFRlc3RNaXhlZE5ld2xpbmVzKFRlc3RHZW5lcmljVW5pdk5ld2xpbmVzKToKKyAgICBORVdMSU5FID0gKCdccicsICdcbicpCisgICAgREFUQSA9IERBVEFfTUlYRUQKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgVGVzdE5hdGl2ZU5ld2xpbmVzLAorICAgICAgICBUZXN0Q1JOZXdsaW5lcywKKyAgICAgICAgVGVzdExGTmV3bGluZXMsCisgICAgICAgIFRlc3RDUkxGTmV3bGluZXMsCisgICAgICAgIFRlc3RNaXhlZE5ld2xpbmVzCisgICAgICkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdW5wYWNrLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdW5wYWNrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZGJjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91bnBhY2sucHkKQEAgLTAsMCArMSwxMzAgQEAKK2RvY3Rlc3RzID0gIiIiCisKK1VucGFjayB0dXBsZQorCisgICAgPj4+IHQgPSAoMSwgMiwgMykKKyAgICA+Pj4gYSwgYiwgYyA9IHQKKyAgICA+Pj4gYSA9PSAxIGFuZCBiID09IDIgYW5kIGMgPT0gMworICAgIFRydWUKKworVW5wYWNrIGxpc3QKKworICAgID4+PiBsID0gWzQsIDUsIDZdCisgICAgPj4+IGEsIGIsIGMgPSBsCisgICAgPj4+IGEgPT0gNCBhbmQgYiA9PSA1IGFuZCBjID09IDYKKyAgICBUcnVlCisKK1VucGFjayBpbXBsaWVkIHR1cGxlCisKKyAgICA+Pj4gYSwgYiwgYyA9IDcsIDgsIDkKKyAgICA+Pj4gYSA9PSA3IGFuZCBiID09IDggYW5kIGMgPT0gOQorICAgIFRydWUKKworVW5wYWNrIHN0cmluZy4uLiBmdW4hCisKKyAgICA+Pj4gYSwgYiwgYyA9ICdvbmUnCisgICAgPj4+IGEgPT0gJ28nIGFuZCBiID09ICduJyBhbmQgYyA9PSAnZScKKyAgICBUcnVlCisKK1VucGFjayBnZW5lcmljIHNlcXVlbmNlCisKKyAgICA+Pj4gY2xhc3MgU2VxOgorICAgIC4uLiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgorICAgIC4uLiAgICAgICAgIGlmIGkgPj0gMCBhbmQgaSA8IDM6IHJldHVybiBpCisgICAgLi4uICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorICAgIC4uLgorICAgID4+PiBhLCBiLCBjID0gU2VxKCkKKyAgICA+Pj4gYSA9PSAwIGFuZCBiID09IDEgYW5kIGMgPT0gMgorICAgIFRydWUKKworU2luZ2xlIGVsZW1lbnQgdW5wYWNraW5nLCB3aXRoIGV4dHJhIHN5bnRheAorCisgICAgPj4+IHN0ID0gKDk5LCkKKyAgICA+Pj4gc2wgPSBbMTAwXQorICAgID4+PiBhLCA9IHN0CisgICAgPj4+IGEKKyAgICA5OQorICAgID4+PiBiLCA9IHNsCisgICAgPj4+IGIKKyAgICAxMDAKKworTm93IGZvciBzb21lIGZhaWx1cmVzCisKK1VucGFja2luZyBub24tc2VxdWVuY2UKKworICAgID4+PiBhLCBiLCBjID0gNworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogJ2ludCcgb2JqZWN0IGlzIG5vdCBpdGVyYWJsZQorCitVbnBhY2tpbmcgdHVwbGUgb2Ygd3Jvbmcgc2l6ZQorCisgICAgPj4+IGEsIGIgPSB0CisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVmFsdWVFcnJvcjogdG9vIG1hbnkgdmFsdWVzIHRvIHVucGFjaworCitVbnBhY2tpbmcgdHVwbGUgb2Ygd3Jvbmcgc2l6ZQorCisgICAgPj4+IGEsIGIgPSBsCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVmFsdWVFcnJvcjogdG9vIG1hbnkgdmFsdWVzIHRvIHVucGFjaworCitVbnBhY2tpbmcgc2VxdWVuY2UgdG9vIHNob3J0CisKKyAgICA+Pj4gYSwgYiwgYywgZCA9IFNlcSgpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVmFsdWVFcnJvcjogbmVlZCBtb3JlIHRoYW4gMyB2YWx1ZXMgdG8gdW5wYWNrCisKK1VucGFja2luZyBzZXF1ZW5jZSB0b28gbG9uZworCisgICAgPj4+IGEsIGIgPSBTZXEoKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIFZhbHVlRXJyb3I6IHRvbyBtYW55IHZhbHVlcyB0byB1bnBhY2sKKworVW5wYWNraW5nIGEgc2VxdWVuY2Ugd2hlcmUgdGhlIHRlc3QgZm9yIHRvbyBsb25nIHJhaXNlcyBhIGRpZmZlcmVudCBraW5kIG9mCitlcnJvcgorCisgICAgPj4+IGNsYXNzIEJvem9FcnJvcihFeGNlcHRpb24pOgorICAgIC4uLiAgICAgcGFzcworICAgIC4uLgorICAgID4+PiBjbGFzcyBCYWRTZXE6CisgICAgLi4uICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgLi4uICAgICAgICAgaWYgaSA+PSAwIGFuZCBpIDwgMzoKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAuLi4gICAgICAgICBlbGlmIGkgPT0gMzoKKyAgICAuLi4gICAgICAgICAgICAgcmFpc2UgQm96b0Vycm9yCisgICAgLi4uICAgICAgICAgZWxzZToKKyAgICAuLi4gICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorICAgIC4uLgorCitUcmlnZ2VyIGNvZGUgd2hpbGUgbm90IGV4cGVjdGluZyBhbiBJbmRleEVycm9yICh1bnBhY2sgc2VxdWVuY2UgdG9vIGxvbmcsIHdyb25nCitlcnJvcikKKworICAgID4+PiBhLCBiLCBjLCBkLCBlID0gQmFkU2VxKCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBCb3pvRXJyb3IKKworVHJpZ2dlciBjb2RlIHdoaWxlIGV4cGVjdGluZyBhbiBJbmRleEVycm9yICh1bnBhY2sgc2VxdWVuY2UgdG9vIHNob3J0LCB3cm9uZworZXJyb3IpCisKKyAgICA+Pj4gYSwgYiwgYyA9IEJhZFNlcSgpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgQm96b0Vycm9yCisKKyIiIgorCitfX3Rlc3RfXyA9IHsnZG9jdGVzdHMnIDogZG9jdGVzdHN9CisKK2RlZiB0ZXN0X21haW4odmVyYm9zZT1GYWxzZSk6CisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfdW5wYWNrCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfdW5wYWNrLCB2ZXJib3NlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91cmxsaWIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91cmxsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyNzNmOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3VybGxpYi5weQpAQCAtMCwwICsxLDkxMyBAQAorIiIiUmVncmVzc3Npb24gdGVzdHMgZm9yIHVybGxpYiIiIgorCitpbXBvcnQgdXJsbGliCitpbXBvcnQgaHR0cGxpYgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBtaW1ldG9vbHMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IFN0cmluZ0lPCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIGJhc2U2NCBpbXBvcnQgYjY0ZW5jb2RlCisKKworZGVmIGhleGVzY2FwZShjaGFyKToKKyAgICAiIiJFc2NhcGUgY2hhciBhcyBSRkMgMjM5NiBzcGVjaWZpZXMiIiIKKyAgICBoZXhfcmVwciA9IGhleChvcmQoY2hhcikpWzI6XS51cHBlcigpCisgICAgaWYgbGVuKGhleF9yZXByKSA9PSAxOgorICAgICAgICBoZXhfcmVwciA9ICIwJXMiICUgaGV4X3JlcHIKKyAgICByZXR1cm4gIiUiICsgaGV4X3JlcHIKKworCitjbGFzcyBGYWtlSFRUUE1peGluKG9iamVjdCk6CisgICAgZGVmIGZha2VodHRwKHNlbGYsIGZha2VkYXRhKToKKyAgICAgICAgY2xhc3MgRmFrZVNvY2tldChTdHJpbmdJTy5TdHJpbmdJTyk6CisKKyAgICAgICAgICAgIGRlZiBzZW5kYWxsKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgICAgIEZha2VIVFRQQ29ubmVjdGlvbi5idWYgPSBkYXRhCisKKyAgICAgICAgICAgIGRlZiBtYWtlZmlsZShzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgICBkZWYgcmVhZChzZWxmLCBhbXQ9Tm9uZSk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmdJTy5TdHJpbmdJTy5yZWFkKHNlbGYsIGFtdCkKKworICAgICAgICAgICAgZGVmIHJlYWRsaW5lKHNlbGYsIGxlbmd0aD1Ob25lKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZ0lPLlN0cmluZ0lPLnJlYWRsaW5lKHNlbGYsIGxlbmd0aCkKKworICAgICAgICBjbGFzcyBGYWtlSFRUUENvbm5lY3Rpb24oaHR0cGxpYi5IVFRQQ29ubmVjdGlvbik6CisKKyAgICAgICAgICAgICMgYnVmZmVyIHRvIHN0b3JlIGRhdGEgZm9yIHZlcmlmaWNhdGlvbiBpbiB1cmxvcGVuIHRlc3RzLgorICAgICAgICAgICAgYnVmID0gIiIKKworICAgICAgICAgICAgZGVmIGNvbm5lY3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gRmFrZVNvY2tldChmYWtlZGF0YSkKKworICAgICAgICBhc3NlcnQgaHR0cGxpYi5IVFRQLl9jb25uZWN0aW9uX2NsYXNzID09IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24KKworICAgICAgICBodHRwbGliLkhUVFAuX2Nvbm5lY3Rpb25fY2xhc3MgPSBGYWtlSFRUUENvbm5lY3Rpb24KKworICAgIGRlZiB1bmZha2VodHRwKHNlbGYpOgorICAgICAgICBodHRwbGliLkhUVFAuX2Nvbm5lY3Rpb25fY2xhc3MgPSBodHRwbGliLkhUVFBDb25uZWN0aW9uCisKKworY2xhc3MgdXJsb3Blbl9GaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXJsb3BlbigpIG9wZW5pbmcgYSB0ZW1wb3JhcnkgZmlsZS4KKworICAgIFRyeSB0byB0ZXN0IGFzIG11Y2ggZnVuY3Rpb25hbGl0eSBhcyBwb3NzaWJsZSBzbyBhcyB0byBjdXQgZG93biBvbiByZWxpYW5jZQorICAgIG9uIGNvbm5lY3RpbmcgdG8gdGhlIE5ldCBmb3IgdGVzdGluZy4KKworICAgICIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAiIiJTZXR1cCBvZiBhIHRlbXAgZmlsZSB0byB1c2UgZm9yIHRlc3RpbmciIiIKKyAgICAgICAgc2VsZi50ZXh0ID0gInRlc3RfdXJsbGliOiAlc1xuIiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgIEZJTEUgPSBmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3YicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEZJTEUud3JpdGUoc2VsZi50ZXh0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgRklMRS5jbG9zZSgpCisgICAgICAgIHNlbGYucGF0aG5hbWUgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOCisgICAgICAgIHNlbGYucmV0dXJuZWRfb2JqID0gdXJsbGliLnVybG9wZW4oImZpbGU6JXMiICUgc2VsZi5wYXRobmFtZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIiIiU2h1dCBkb3duIHRoZSBvcGVuIG9iamVjdCIiIgorICAgICAgICBzZWxmLnJldHVybmVkX29iai5jbG9zZSgpCisgICAgICAgIG9zLnJlbW92ZSh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfaW50ZXJmYWNlKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBvYmplY3QgcmV0dXJuZWQgYnkgdXJsb3BlbigpIGhhcyB0aGUgc3BlY2lmaWVkIG1ldGhvZHMKKyAgICAgICAgZm9yIGF0dHIgaW4gKCJyZWFkIiwgInJlYWRsaW5lIiwgInJlYWRsaW5lcyIsICJmaWxlbm8iLAorICAgICAgICAgICAgICAgICAgICAgImNsb3NlIiwgImluZm8iLCAiZ2V0dXJsIiwgImdldGNvZGUiLCAiX19pdGVyX18iKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYucmV0dXJuZWRfb2JqLCBhdHRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IHJldHVybmVkIGJ5IHVybG9wZW4oKSBsYWNrcyAlcyBhdHRyaWJ1dGUiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyKQorCisgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHQsIHNlbGYucmV0dXJuZWRfb2JqLnJlYWQoKSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dCwgc2VsZi5yZXR1cm5lZF9vYmoucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgc2VsZi5yZXR1cm5lZF9vYmoucmVhZGxpbmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY2FsbGluZyByZWFkbGluZSgpIGFmdGVyIGV4aGF1c3RpbmcgdGhlIGZpbGUgZGlkIG5vdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIHJldHVybiBhbiBlbXB0eSBzdHJpbmciKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICBsaW5lc19saXN0ID0gc2VsZi5yZXR1cm5lZF9vYmoucmVhZGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXNfbGlzdCksIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWRsaW5lcygpIHJldHVybmVkIHRoZSB3cm9uZyBudW1iZXIgb2YgbGluZXMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzX2xpc3RbMF0sIHNlbGYudGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZGxpbmVzKCkgcmV0dXJuZWQgaW1wcm9wZXIgdGV4dCIpCisKKyAgICBkZWYgdGVzdF9maWxlbm8oc2VsZik6CisgICAgICAgIGZpbGVfbnVtID0gc2VsZi5yZXR1cm5lZF9vYmouZmlsZW5vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZpbGVfbnVtLCBpbnQsICJmaWxlbm8oKSBkaWQgbm90IHJldHVybiBhbiBpbnQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQoZmlsZV9udW0sIGxlbihzZWxmLnRleHQpKSwgc2VsZi50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJSZWFkaW5nIG9uIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgZmlsZW5vKCkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJkaWQgbm90IHJldHVybiB0aGUgZXhwZWN0ZWQgdGV4dCIpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGNsb3NlKCkgYnkgY2FsbGluZyBpdCBoZWFyIGFuZCB0aGVuIGhhdmluZyBpdCBiZSBjYWxsZWQgYWdhaW4KKyAgICAgICAgIyBieSB0aGUgdGVhckRvd24oKSBtZXRob2QgZm9yIHRoZSB0ZXN0CisgICAgICAgIHNlbGYucmV0dXJuZWRfb2JqLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnJldHVybmVkX29iai5pbmZvKCksIG1pbWV0b29scy5NZXNzYWdlKQorCisgICAgZGVmIHRlc3RfZ2V0dXJsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmV0dXJuZWRfb2JqLmdldHVybCgpLCBzZWxmLnBhdGhuYW1lKQorCisgICAgZGVmIHRlc3RfZ2V0Y29kZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJldHVybmVkX29iai5nZXRjb2RlKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9pdGVyKHNlbGYpOgorICAgICAgICAjIFRlc3QgaXRlcmF0b3IKKyAgICAgICAgIyBEb24ndCBuZWVkIHRvIGNvdW50IG51bWJlciBvZiBpdGVyYXRpb25zIHNpbmNlIHRlc3Qgd291bGQgZmFpbCB0aGUKKyAgICAgICAgIyBpbnN0YW50IGl0IHJldHVybmVkIGFueXRoaW5nIGJleW9uZCB0aGUgZmlyc3QgbGluZSBmcm9tIHRoZQorICAgICAgICAjIGNvbXBhcmlzb24KKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5yZXR1cm5lZF9vYmouX19pdGVyX18oKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgc2VsZi50ZXh0KQorCisgICAgZGVmIHRlc3RfcmVsYXRpdmVsb2NhbGZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsdXJsbGliLnVybG9wZW4sJy4vJyArIHNlbGYucGF0aG5hbWUpCisKK2NsYXNzIFByb3h5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIFJlY29yZHMgY2hhbmdlcyB0byBlbnYgdmFycworICAgICAgICBzZWxmLmVudiA9IHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkKKyAgICAgICAgIyBEZWxldGUgYWxsIHByb3h5IHJlbGF0ZWQgZW52IHZhcnMKKyAgICAgICAgZm9yIGsgaW4gb3MuZW52aXJvbi5rZXlzKCk6CisgICAgICAgICAgICBpZiAncHJveHknIGluIGsubG93ZXIoKToKKyAgICAgICAgICAgICAgICBzZWxmLmVudi51bnNldChrKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIFJlc3RvcmUgYWxsIHByb3h5IHJlbGF0ZWQgZW52IHZhcnMKKyAgICAgICAgc2VsZi5lbnYuX19leGl0X18oKQorICAgICAgICBkZWwgc2VsZi5lbnYKKworICAgIGRlZiB0ZXN0X2dldHByb3hpZXNfZW52aXJvbm1lbnRfa2VlcF9ub19wcm94aWVzKHNlbGYpOgorICAgICAgICBzZWxmLmVudi5zZXQoJ05PX1BST1hZJywgJ2xvY2FsaG9zdCcpCisgICAgICAgIHByb3hpZXMgPSB1cmxsaWIuZ2V0cHJveGllc19lbnZpcm9ubWVudCgpCisgICAgICAgICMgZ2V0cHJveGllc19lbnZpcm9ubWVudCB1c2UgbG93ZXJlZCBjYXNlIHRydW5jYXRlZCAobm8gJ19wcm94eScpIGtleXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnbG9jYWxob3N0JywgcHJveGllc1snbm8nXSkKKyAgICAgICAgIyBMaXN0IG9mIG5vX3Byb3hpZXMgd2l0aCBzcGFjZS4KKyAgICAgICAgc2VsZi5lbnYuc2V0KCdOT19QUk9YWScsICdsb2NhbGhvc3QsIGFub3RoZXJkb21haW4uY29tLCBuZXdkb21haW4uY29tJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVybGxpYi5wcm94eV9ieXBhc3NfZW52aXJvbm1lbnQoJ2Fub3RoZXJkb21haW4uY29tJykpCisKKworY2xhc3MgdXJsb3Blbl9IdHRwVGVzdHModW5pdHRlc3QuVGVzdENhc2UsIEZha2VIVFRQTWl4aW4pOgorICAgICIiIlRlc3QgdXJsb3BlbigpIG9wZW5pbmcgYSBmYWtlIGh0dHAgY29ubmVjdGlvbi4iIiIKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIHNlbGYuZmFrZWh0dHAoJ0hlbGxvIScpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZwID0gdXJsbGliLnVybG9wZW4oImh0dHA6Ly9weXRob24ub3JnLyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKCksICdIZWxsbyEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSgpLCAnJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAuZ2V0dXJsKCksICdodHRwOi8vcHl0aG9uLm9yZy8nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5nZXRjb2RlKCksIDIwMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYudW5mYWtlaHR0cCgpCisKKyAgICBkZWYgdGVzdF91cmxfZnJhZ21lbnQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExNzAzOiBnZXR1cmwoKSBvbWl0cyBmcmFnbWVudHMgaW4gdGhlIG9yaWdpbmFsIFVSTC4KKyAgICAgICAgdXJsID0gJ2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91cmxsaWIuaHRtbCNPSycKKyAgICAgICAgc2VsZi5mYWtlaHR0cCgnSGVsbG8hJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnAgPSB1cmxsaWIudXJsb3Blbih1cmwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLmdldHVybCgpLCB1cmwpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQorCisgICAgZGVmIHRlc3RfcmVhZF9ib2d1cyhzZWxmKToKKyAgICAgICAgIyB1cmxvcGVuKCkgc2hvdWxkIHJhaXNlIElPRXJyb3IgZm9yIG1hbnkgZXJyb3IgY29kZXMuCisgICAgICAgIHNlbGYuZmFrZWh0dHAoJycnSFRUUC8xLjEgNDAxIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkCitEYXRlOiBXZWQsIDAyIEphbiAyMDA4IDAzOjAzOjU0IEdNVAorU2VydmVyOiBBcGFjaGUvMS4zLjMzIChEZWJpYW4gR05VL0xpbnV4KSBtb2Rfc3NsLzIuOC4yMiBPcGVuU1NMLzAuOS43ZQorQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEKKycnJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdXJsbGliLnVybG9wZW4sICJodHRwOi8vcHl0aG9uLm9yZy8iKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfcmVkaXJlY3Qoc2VsZik6CisgICAgICAgICMgdXJsb3BlbigpIHNob3VsZCByYWlzZSBJT0Vycm9yIGZvciBtYW55IGVycm9yIGNvZGVzLgorICAgICAgICBzZWxmLmZha2VodHRwKCIiIkhUVFAvMS4xIDMwMiBGb3VuZAorRGF0ZTogV2VkLCAwMiBKYW4gMjAwOCAwMzowMzo1NCBHTVQKK1NlcnZlcjogQXBhY2hlLzEuMy4zMyAoRGViaWFuIEdOVS9MaW51eCkgbW9kX3NzbC8yLjguMjIgT3BlblNTTC8wLjkuN2UKK0xvY2F0aW9uOiBmaWxlOlJFQURNRQorQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEKKyIiIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdXJsbGliLnVybG9wZW4sICJodHRwOi8vcHl0aG9uLm9yZy8iKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKKworICAgIGRlZiB0ZXN0X2VtcHR5X3NvY2tldChzZWxmKToKKyAgICAgICAgIyB1cmxvcGVuKCkgcmFpc2VzIElPRXJyb3IgaWYgdGhlIHVuZGVybHlpbmcgc29ja2V0IGRvZXMgbm90IHNlbmQgYW55CisgICAgICAgICMgZGF0YS4gKCMxNjgwMjMwKQorICAgICAgICBzZWxmLmZha2VodHRwKCcnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB1cmxsaWIudXJsb3BlbiwgJ2h0dHA6Ly9zb21ldGhpbmcnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfbG9jYWxmaWxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB1cmxsaWIudXJsb3BlbiwKKyAgICAgICAgICAgICAgICAnZmlsZTovL2xvY2FsaG9zdC9hL21pc3NpbmcvZmlsZS5weScpCisgICAgICAgIGZkLCB0bXBfZmlsZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICB0bXBfZmlsZXVybCA9ICdmaWxlOi8vbG9jYWxob3N0LycgKyB0bXBfZmlsZS5yZXBsYWNlKG9zLnBhdGguc2VwLCAnLycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0bXBfZmlsZSkpCisgICAgICAgICAgICBmcCA9IHVybGxpYi51cmxvcGVuKHRtcF9maWxldXJsKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIG9zLnVubGluayh0bXBfZmlsZSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHRtcF9maWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdXJsbGliLnVybG9wZW4sIHRtcF9maWxldXJsKQorCisgICAgZGVmIHRlc3RfZnRwX25vbmV4aXN0aW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB1cmxsaWIudXJsb3BlbiwKKyAgICAgICAgICAgICAgICAnZnRwOi8vbG9jYWxob3N0L25vdC9leGlzdGluZy9maWxlLnB5JykKKworCisgICAgZGVmIHRlc3RfdXNlcnBhc3NfaW51cmwoc2VsZik6CisgICAgICAgIHNlbGYuZmFrZWh0dHAoJ0hlbGxvIScpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZha2VodHRwX3dyYXBwZXIgPSBodHRwbGliLkhUVFAuX2Nvbm5lY3Rpb25fY2xhc3MKKyAgICAgICAgICAgIGZwID0gdXJsbGliLnVybG9wZW4oImh0dHA6Ly91c2VyOnBhc3NAcHl0aG9uLm9yZy8iKQorICAgICAgICAgICAgYXV0aG9yaXphdGlvbiA9ICgiQXV0aG9yaXphdGlvbjogQmFzaWMgJXNcclxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjY0ZW5jb2RlKCd1c2VyOnBhc3MnKSkKKyAgICAgICAgICAgICMgVGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIG11c3QgYmUgaW4gcGxhY2UKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYXV0aG9yaXphdGlvbiwgZmFrZWh0dHBfd3JhcHBlci5idWYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKCksICJIZWxsbyEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSgpLCAiIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAuZ2V0dXJsKCksICdodHRwOi8vdXNlcjpwYXNzQHB5dGhvbi5vcmcvJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAuZ2V0Y29kZSgpLCAyMDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQorCisgICAgZGVmIHRlc3RfdXNlcnBhc3Nfd2l0aF9zcGFjZXNfaW51cmwoc2VsZik6CisgICAgICAgIHNlbGYuZmFrZWh0dHAoJ0hlbGxvIScpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHVybCA9ICJodHRwOi8vYSBiOmMgZEBweXRob24ub3JnLyIKKyAgICAgICAgICAgIGZha2VodHRwX3dyYXBwZXIgPSBodHRwbGliLkhUVFAuX2Nvbm5lY3Rpb25fY2xhc3MKKyAgICAgICAgICAgIGF1dGhvcml6YXRpb24gPSAoIkF1dGhvcml6YXRpb246IEJhc2ljICVzXHJcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiNjRlbmNvZGUoJ2EgYjpjIGQnKSkKKyAgICAgICAgICAgIGZwID0gdXJsbGliLnVybG9wZW4odXJsKQorICAgICAgICAgICAgIyBUaGUgYXV0aG9yaXphdGlvbiBoZWFkZXIgbXVzdCBiZSBpbiBwbGFjZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihhdXRob3JpemF0aW9uLCBmYWtlaHR0cF93cmFwcGVyLmJ1ZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoKSwgIkhlbGxvISIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKCksICIiKQorICAgICAgICAgICAgIyB0aGUgc3BhY2VzIGFyZSBxdW90ZWQgaW4gVVJMIHNvIG5vIG1hdGNoCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZwLmdldHVybCgpLCB1cmwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLmdldGNvZGUoKSwgMjAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKKworCitjbGFzcyB1cmxyZXRyaWV2ZV9GaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXJsbGliLnVybHJldHJpZXZlKCkgb24gbG9jYWwgZmlsZXMiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgYSBsaXN0IG9mIHRlbXBvcmFyeSBmaWxlcy4gRWFjaCBpdGVtIGluIHRoZSBsaXN0IGlzIGEgZmlsZQorICAgICAgICAjIG5hbWUgKGFic29sdXRlIHBhdGggb3IgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpLgorICAgICAgICAjIEFsbCBmaWxlcyBpbiB0aGlzIGxpc3Qgd2lsbCBiZSBkZWxldGVkIGluIHRoZSB0ZWFyRG93biBtZXRob2QuIE5vdGUsCisgICAgICAgICMgdGhpcyBvbmx5IGhlbHBzIHRvIG1ha2VzIHN1cmUgdGVtcG9yYXJ5IGZpbGVzIGdldCBkZWxldGVkLCBidXQgaXQKKyAgICAgICAgIyBkb2VzIG5vdGhpbmcgYWJvdXQgdHJ5aW5nIHRvIGNsb3NlIGZpbGVzIHRoYXQgbWF5IHN0aWxsIGJlIG9wZW4uIEl0CisgICAgICAgICMgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBkZXZlbG9wZXIgdG8gcHJvcGVybHkgY2xvc2UgZmlsZXMgZXZlbgorICAgICAgICAjIHdoZW4gZXhjZXB0aW9uYWwgY29uZGl0aW9ucyBvY2N1ci4KKyAgICAgICAgc2VsZi50ZW1wRmlsZXMgPSBbXQorCisgICAgICAgICMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUuCisgICAgICAgIHNlbGYucmVnaXN0ZXJGaWxlRm9yQ2xlYW5VcCh0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLnRleHQgPSAndGVzdGluZyB1cmxsaWIudXJscmV0cmlldmUnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIEZJTEUgPSBmaWxlKHRlc3Rfc3VwcG9ydC5URVNURk4sICd3YicpCisgICAgICAgICAgICBGSUxFLndyaXRlKHNlbGYudGV4dCkKKyAgICAgICAgICAgIEZJTEUuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJ5OiBGSUxFLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdDogcGFzcworCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIERlbGV0ZSB0aGUgdGVtcG9yYXJ5IGZpbGVzLgorICAgICAgICBmb3IgZWFjaCBpbiBzZWxmLnRlbXBGaWxlczoKKyAgICAgICAgICAgIHRyeTogb3MucmVtb3ZlKGVhY2gpCisgICAgICAgICAgICBleGNlcHQ6IHBhc3MKKworICAgIGRlZiBjb25zdHJ1Y3RMb2NhbEZpbGVVcmwoc2VsZiwgZmlsZVBhdGgpOgorICAgICAgICByZXR1cm4gImZpbGU6Ly8lcyIgJSB1cmxsaWIucGF0aG5hbWUydXJsKG9zLnBhdGguYWJzcGF0aChmaWxlUGF0aCkpCisKKyAgICBkZWYgY3JlYXRlTmV3VGVtcEZpbGUoc2VsZiwgZGF0YT0iIik6CisgICAgICAgICIiIkNyZWF0ZXMgYSBuZXcgdGVtcG9yYXJ5IGZpbGUgY29udGFpbmluZyB0aGUgc3BlY2lmaWVkIGRhdGEsCisgICAgICAgIHJlZ2lzdGVycyB0aGUgZmlsZSBmb3IgZGVsZXRpb24gZHVyaW5nIHRoZSB0ZXN0IGZpeHR1cmUgdGVhciBkb3duLCBhbmQKKyAgICAgICAgcmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlsZS4iIiIKKworICAgICAgICBuZXdGZCwgbmV3RmlsZVBhdGggPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5yZWdpc3RlckZpbGVGb3JDbGVhblVwKG5ld0ZpbGVQYXRoKQorICAgICAgICAgICAgbmV3RmlsZSA9IG9zLmZkb3BlbihuZXdGZCwgIndiIikKKyAgICAgICAgICAgIG5ld0ZpbGUud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIG5ld0ZpbGUuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJ5OiBuZXdGaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdDogcGFzcworICAgICAgICByZXR1cm4gbmV3RmlsZVBhdGgKKworICAgIGRlZiByZWdpc3RlckZpbGVGb3JDbGVhblVwKHNlbGYsIGZpbGVOYW1lKToKKyAgICAgICAgc2VsZi50ZW1wRmlsZXMuYXBwZW5kKGZpbGVOYW1lKQorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgYSBsb2NhbCBmaWxlIGp1c3QgZ2V0cyBpdHMgb3duIGxvY2F0aW9uIHJldHVybmVkIGFuZAorICAgICAgICAjIGEgaGVhZGVycyB2YWx1ZSBpcyByZXR1cm5lZC4KKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybHJldHJpZXZlKCJmaWxlOiVzIiAlIHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WzBdLCB0ZXN0X3N1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0WzFdLCBtaW1ldG9vbHMuTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWQgbm90IGdldCBhIG1pbWV0b29scy5NZXNzYWdlIGluc3RhbmNlIGFzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWNvbmQgcmV0dXJuZWQgdmFsdWUiKQorCisgICAgZGVmIHRlc3RfY29weShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgc2V0dGluZyB0aGUgZmlsZW5hbWUgYXJndW1lbnQgd29ya3MuCisgICAgICAgIHNlY29uZF90ZW1wID0gIiVzLjIiICUgdGVzdF9zdXBwb3J0LlRFU1RGTgorICAgICAgICBzZWxmLnJlZ2lzdGVyRmlsZUZvckNsZWFuVXAoc2Vjb25kX3RlbXApCisgICAgICAgIHJlc3VsdCA9IHVybGxpYi51cmxyZXRyaWV2ZShzZWxmLmNvbnN0cnVjdExvY2FsRmlsZVVybCgKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4pLCBzZWNvbmRfdGVtcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWNvbmRfdGVtcCwgcmVzdWx0WzBdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2Vjb25kX3RlbXApLCAiY29weSBvZiB0aGUgZmlsZSB3YXMgbm90ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hZGUiKQorICAgICAgICBGSUxFID0gZmlsZShzZWNvbmRfdGVtcCwgJ3JiJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGV4dCA9IEZJTEUucmVhZCgpCisgICAgICAgICAgICBGSUxFLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyeTogRklMRS5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQ6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHQsIHRleHQpCisKKyAgICBkZWYgdGVzdF9yZXBvcnRob29rKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXBvcnRob29rIHdvcmtzLgorICAgICAgICBkZWYgaG9va3Rlc3Rlcihjb3VudCwgYmxvY2tfc2l6ZSwgdG90YWxfc2l6ZSwgY291bnRfaG9sZGVyPVswXSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY291bnQsIGludCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShibG9ja19zaXplLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodG90YWxfc2l6ZSwgaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgY291bnRfaG9sZGVyWzBdKQorICAgICAgICAgICAgY291bnRfaG9sZGVyWzBdID0gY291bnRfaG9sZGVyWzBdICsgMQorICAgICAgICBzZWNvbmRfdGVtcCA9ICIlcy4yIiAlIHRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICAgICAgc2VsZi5yZWdpc3RlckZpbGVGb3JDbGVhblVwKHNlY29uZF90ZW1wKQorICAgICAgICB1cmxsaWIudXJscmV0cmlldmUoc2VsZi5jb25zdHJ1Y3RMb2NhbEZpbGVVcmwodGVzdF9zdXBwb3J0LlRFU1RGTiksCisgICAgICAgICAgICBzZWNvbmRfdGVtcCwgaG9va3Rlc3RlcikKKworICAgIGRlZiB0ZXN0X3JlcG9ydGhvb2tfMF9ieXRlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG9uIHplcm8gbGVuZ3RoIGZpbGUuIFNob3VsZCBjYWxsIHJlcG9ydGhvb2sgb25seSAxIHRpbWUuCisgICAgICAgIHJlcG9ydCA9IFtdCisgICAgICAgIGRlZiBob29rdGVzdGVyKGNvdW50LCBibG9ja19zaXplLCB0b3RhbF9zaXplLCBfcmVwb3J0PXJlcG9ydCk6CisgICAgICAgICAgICBfcmVwb3J0LmFwcGVuZCgoY291bnQsIGJsb2NrX3NpemUsIHRvdGFsX3NpemUpKQorICAgICAgICBzcmNGaWxlTmFtZSA9IHNlbGYuY3JlYXRlTmV3VGVtcEZpbGUoKQorICAgICAgICB1cmxsaWIudXJscmV0cmlldmUoc2VsZi5jb25zdHJ1Y3RMb2NhbEZpbGVVcmwoc3JjRmlsZU5hbWUpLAorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiwgaG9va3Rlc3RlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVwb3J0KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXBvcnRbMF1bMl0sIDApCisKKyAgICBkZWYgdGVzdF9yZXBvcnRob29rXzVfYnl0ZXMoc2VsZik6CisgICAgICAgICMgVGVzdCBvbiA1IGJ5dGUgZmlsZS4gU2hvdWxkIGNhbGwgcmVwb3J0aG9vayBvbmx5IDIgdGltZXMgKG9uY2Ugd2hlbgorICAgICAgICAjIHRoZSAibmV0d29yayBjb25uZWN0aW9uIiBpcyBlc3RhYmxpc2hlZCBhbmQgb25jZSB3aGVuIHRoZSBibG9jayBpcworICAgICAgICAjIHJlYWQpLiBTaW5jZSB0aGUgYmxvY2sgc2l6ZSBpcyA4MTkyIGJ5dGVzLCBvbmx5IG9uZSBibG9jayByZWFkIGlzCisgICAgICAgICMgcmVxdWlyZWQgdG8gcmVhZCB0aGUgZW50aXJlIGZpbGUuCisgICAgICAgIHJlcG9ydCA9IFtdCisgICAgICAgIGRlZiBob29rdGVzdGVyKGNvdW50LCBibG9ja19zaXplLCB0b3RhbF9zaXplLCBfcmVwb3J0PXJlcG9ydCk6CisgICAgICAgICAgICBfcmVwb3J0LmFwcGVuZCgoY291bnQsIGJsb2NrX3NpemUsIHRvdGFsX3NpemUpKQorICAgICAgICBzcmNGaWxlTmFtZSA9IHNlbGYuY3JlYXRlTmV3VGVtcEZpbGUoIngiICogNSkKKyAgICAgICAgdXJsbGliLnVybHJldHJpZXZlKHNlbGYuY29uc3RydWN0TG9jYWxGaWxlVXJsKHNyY0ZpbGVOYW1lKSwKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4sIGhvb2t0ZXN0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcG9ydCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwb3J0WzBdWzFdLCA4MTkyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcG9ydFswXVsyXSwgNSkKKworICAgIGRlZiB0ZXN0X3JlcG9ydGhvb2tfODE5M19ieXRlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG9uIDgxOTMgYnl0ZSBmaWxlLiBTaG91bGQgY2FsbCByZXBvcnRob29rIG9ubHkgMyB0aW1lcyAob25jZQorICAgICAgICAjIHdoZW4gdGhlICJuZXR3b3JrIGNvbm5lY3Rpb24iIGlzIGVzdGFibGlzaGVkLCBvbmNlIGZvciB0aGUgbmV4dCA4MTkyCisgICAgICAgICMgYnl0ZXMsIGFuZCBvbmNlIGZvciB0aGUgbGFzdCBieXRlKS4KKyAgICAgICAgcmVwb3J0ID0gW10KKyAgICAgICAgZGVmIGhvb2t0ZXN0ZXIoY291bnQsIGJsb2NrX3NpemUsIHRvdGFsX3NpemUsIF9yZXBvcnQ9cmVwb3J0KToKKyAgICAgICAgICAgIF9yZXBvcnQuYXBwZW5kKChjb3VudCwgYmxvY2tfc2l6ZSwgdG90YWxfc2l6ZSkpCisgICAgICAgIHNyY0ZpbGVOYW1lID0gc2VsZi5jcmVhdGVOZXdUZW1wRmlsZSgieCIgKiA4MTkzKQorICAgICAgICB1cmxsaWIudXJscmV0cmlldmUoc2VsZi5jb25zdHJ1Y3RMb2NhbEZpbGVVcmwoc3JjRmlsZU5hbWUpLAorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LlRFU1RGTiwgaG9va3Rlc3RlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVwb3J0KSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXBvcnRbMF1bMV0sIDgxOTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwb3J0WzBdWzJdLCA4MTkzKQorCisKK2NsYXNzIHVybHJldHJpZXZlX0h0dHBUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSwgRmFrZUhUVFBNaXhpbik6CisgICAgIiIiVGVzdCB1cmxsaWIudXJscmV0cmlldmUoKSB1c2luZyBmYWtlIGh0dHAgY29ubmVjdGlvbnMiIiIKKworICAgIGRlZiB0ZXN0X3Nob3J0X2NvbnRlbnRfcmFpc2VzX0NvbnRlbnRUb29TaG9ydEVycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmZha2VodHRwKCcnJ0hUVFAvMS4xIDIwMCBPSworRGF0ZTogV2VkLCAwMiBKYW4gMjAwOCAwMzowMzo1NCBHTVQKK1NlcnZlcjogQXBhY2hlLzEuMy4zMyAoRGViaWFuIEdOVS9MaW51eCkgbW9kX3NzbC8yLjguMjIgT3BlblNTTC8wLjkuN2UKK0Nvbm5lY3Rpb246IGNsb3NlCitDb250ZW50LUxlbmd0aDogMTAwCitDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xCisKK0ZGCisnJycpCisKKyAgICAgICAgZGVmIF9yZXBvcnRob29rKHBhcjEsIHBhcjIsIHBhcjMpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5Db250ZW50VG9vU2hvcnRFcnJvciwgdXJsbGliLnVybHJldHJpZXZlLAorICAgICAgICAgICAgICAgICAgICAnaHR0cDovL2V4YW1wbGUuY29tJywgcmVwb3J0aG9vaz1fcmVwb3J0aG9vaykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYudW5mYWtlaHR0cCgpCisKKyAgICBkZWYgdGVzdF9zaG9ydF9jb250ZW50X3JhaXNlc19Db250ZW50VG9vU2hvcnRFcnJvcl93aXRob3V0X3JlcG9ydGhvb2soc2VsZik6CisgICAgICAgIHNlbGYuZmFrZWh0dHAoJycnSFRUUC8xLjEgMjAwIE9LCitEYXRlOiBXZWQsIDAyIEphbiAyMDA4IDAzOjAzOjU0IEdNVAorU2VydmVyOiBBcGFjaGUvMS4zLjMzIChEZWJpYW4gR05VL0xpbnV4KSBtb2Rfc3NsLzIuOC4yMiBPcGVuU1NMLzAuOS43ZQorQ29ubmVjdGlvbjogY2xvc2UKK0NvbnRlbnQtTGVuZ3RoOiAxMDAKK0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEKKworRkYKKycnJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModXJsbGliLkNvbnRlbnRUb29TaG9ydEVycm9yLCB1cmxsaWIudXJscmV0cmlldmUsICdodHRwOi8vZXhhbXBsZS5jb20vJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYudW5mYWtlaHR0cCgpCisKK2NsYXNzIFF1b3RpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgZm9yIHVybGxpYi5xdW90ZSgpIGFuZCB1cmxsaWIucXVvdGVfcGx1cygpCisKKyAgICBBY2NvcmRpbmcgdG8gUkZDIDIzOTYgKCJVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXJzKSwgdG8gZXNjYXBlIGEKKyAgICBjaGFyYWN0ZXIgeW91IHdyaXRlIGl0IGFzICclJyArIDwyIGNoYXJhY3RlciBVUy1BU0NJSSBoZXggdmFsdWU+LiAgVGhlIFB5dGhvbgorICAgIGNvZGUgb2YgYGAnJScgKyBoZXgob3JkKDxjaGFyYWN0ZXI+KSlbMjpdYGAgZXNjYXBlcyBhIGNoYXJhY3RlciBwcm9wZXJseS4KKyAgICBDYXNlIGRvZXMgbm90IG1hdHRlciBvbiB0aGUgaGV4IGxldHRlcnMuCisKKyAgICBUaGUgdmFyaW91cyBjaGFyYWN0ZXIgc2V0cyBzcGVjaWZpZWQgYXJlOgorCisgICAgUmVzZXJ2ZWQgY2hhcmFjdGVycyA6ICI7Lz86QCY9KyQsIgorICAgICAgICBIYXZlIHNwZWNpYWwgbWVhbmluZyBpbiBVUklzIGFuZCBtdXN0IGJlIGVzY2FwZWQgaWYgbm90IGJlaW5nIHVzZWQgZm9yCisgICAgICAgIHRoZWlyIHNwZWNpYWwgbWVhbmluZworICAgIERhdGEgY2hhcmFjdGVycyA6IGxldHRlcnMsIGRpZ2l0cywgYW5kICItXy4hfionKCkiCisgICAgICAgIFVucmVzZXJ2ZWQgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIGVzY2FwZWQ7IGNhbiBiZSwgdGhvdWdoLCBpZiBkZXNpcmVkCisgICAgQ29udHJvbCBjaGFyYWN0ZXJzIDogMHgwMCAtIDB4MUYsIDB4N0YKKyAgICAgICAgSGF2ZSBubyB1c2UgaW4gVVJJcyBzbyBtdXN0IGJlIGVzY2FwZWQKKyAgICBzcGFjZSA6IDB4MjAKKyAgICAgICAgTXVzdCBiZSBlc2NhcGVkCisgICAgRGVsaW1pdGVycyA6ICc8PiMlIicKKyAgICAgICAgTXVzdCBiZSBlc2NhcGVkCisgICAgVW53aXNlIDogInt9fFxeW11gIgorICAgICAgICBNdXN0IGJlIGVzY2FwZWQKKworICAgICIiIgorCisgICAgZGVmIHRlc3RfbmV2ZXJfcXVvdGUoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHF1b3RlKCkgZG9lcyBub3QgcXVvdGUgbGV0dGVycywgZGlnaXRzLCBhbmQgIl8sLi0iCisgICAgICAgIGRvX25vdF9xdW90ZSA9ICcnIC5qb2luKFsiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwMTIzNDU2Nzg5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfLi0iXSkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnF1b3RlKGRvX25vdF9xdW90ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb19ub3RfcXVvdGUsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgcXVvdGUoKTogJXMgIT0gJXMiICUgKGRvX25vdF9xdW90ZSwgcmVzdWx0KSkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnF1b3RlX3BsdXMoZG9fbm90X3F1b3RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvX25vdF9xdW90ZSwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHF1b3RlX3BsdXMoKTogJXMgIT0gJXMiICUgKGRvX25vdF9xdW90ZSwgcmVzdWx0KSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfc2FmZShzZWxmKToKKyAgICAgICAgIyBUZXN0ICcvJyBpcyBkZWZhdWx0IHZhbHVlIGZvciAnc2FmZScgcGFyYW1ldGVyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliLnF1b3RlLmZ1bmNfZGVmYXVsdHNbMF0sICcvJykKKworICAgIGRlZiB0ZXN0X3NhZmUoc2VsZik6CisgICAgICAgICMgVGVzdCBzZXR0aW5nICdzYWZlJyBwYXJhbWV0ZXIgZG9lcyB3aGF0IGl0IHNob3VsZCBkbworICAgICAgICBxdW90ZV9ieV9kZWZhdWx0ID0gIjw+IgorICAgICAgICByZXN1bHQgPSB1cmxsaWIucXVvdGUocXVvdGVfYnlfZGVmYXVsdCwgc2FmZT1xdW90ZV9ieV9kZWZhdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1b3RlX2J5X2RlZmF1bHQsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgcXVvdGUoKTogJXMgIT0gJXMiICUgKHF1b3RlX2J5X2RlZmF1bHQsIHJlc3VsdCkpCisgICAgICAgIHJlc3VsdCA9IHVybGxpYi5xdW90ZV9wbHVzKHF1b3RlX2J5X2RlZmF1bHQsIHNhZmU9cXVvdGVfYnlfZGVmYXVsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdW90ZV9ieV9kZWZhdWx0LCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHF1b3RlX3BsdXMoKTogJXMgIT0gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAocXVvdGVfYnlfZGVmYXVsdCwgcmVzdWx0KSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfcXVvdGluZyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgYWxsIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgYmUgcXVvdGVkIGFyZSBieSBkZWZhdWx0IHNhbnMKKyAgICAgICAgIyBzcGFjZSAoc2VwYXJhdGUgdGVzdCBmb3IgdGhhdCkuCisgICAgICAgIHNob3VsZF9xdW90ZSA9IFtjaHIobnVtKSBmb3IgbnVtIGluIHJhbmdlKDMyKV0gIyBGb3IgMHgwMCAtIDB4MUYKKyAgICAgICAgc2hvdWxkX3F1b3RlLmFwcGVuZCgnPD4jJSJ7fXxcXltdYCcpCisgICAgICAgIHNob3VsZF9xdW90ZS5hcHBlbmQoY2hyKDEyNykpICMgRm9yIDB4N0YKKyAgICAgICAgc2hvdWxkX3F1b3RlID0gJycuam9pbihzaG91bGRfcXVvdGUpCisgICAgICAgIGZvciBjaGFyIGluIHNob3VsZF9xdW90ZToKKyAgICAgICAgICAgIHJlc3VsdCA9IHVybGxpYi5xdW90ZShjaGFyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXhlc2NhcGUoY2hhciksIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHF1b3RlKCk6ICVzIHNob3VsZCBiZSBlc2NhcGVkIHRvICVzLCBub3QgJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIsIGhleGVzY2FwZShjaGFyKSwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHVybGxpYi5xdW90ZV9wbHVzKGNoYXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleGVzY2FwZShjaGFyKSwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgcXVvdGVfcGx1cygpOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBzaG91bGQgYmUgZXNjYXBlcyB0byAlcywgbm90ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyLCBoZXhlc2NhcGUoY2hhciksIHJlc3VsdCkpCisgICAgICAgIGRlbCBzaG91bGRfcXVvdGUKKyAgICAgICAgcGFydGlhbF9xdW90ZSA9ICJhYltdY2QiCisgICAgICAgIGV4cGVjdGVkID0gImFiJTVCJTVEY2QiCisgICAgICAgIHJlc3VsdCA9IHVybGxpYi5xdW90ZShwYXJ0aWFsX3F1b3RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHF1b3RlKCk6ICVzICE9ICVzIiAlIChleHBlY3RlZCwgcmVzdWx0KSkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnF1b3RlX3BsdXMocGFydGlhbF9xdW90ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBxdW90ZV9wbHVzKCk6ICVzICE9ICVzIiAlIChleHBlY3RlZCwgcmVzdWx0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1cmxsaWIucXVvdGUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9xdW90aW5nX3NwYWNlKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBxdW90ZSgpIGFuZCBxdW90ZV9wbHVzKCkgaGFuZGxlIHNwYWNlcyBhcyBzcGVjaWZpZWQgaW4KKyAgICAgICAgIyB0aGVpciB1bmlxdWUgd2F5CisgICAgICAgIHJlc3VsdCA9IHVybGxpYi5xdW90ZSgnICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBoZXhlc2NhcGUoJyAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgcXVvdGUoKTogJXMgIT0gJXMiICUgKHJlc3VsdCwgaGV4ZXNjYXBlKCcgJykpKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIucXVvdGVfcGx1cygnICcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAnKycsCisgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHF1b3RlX3BsdXMoKTogJXMgIT0gKyIgJSByZXN1bHQpCisgICAgICAgIGdpdmVuID0gImEgYiBjZCBlIGYiCisgICAgICAgIGV4cGVjdCA9IGdpdmVuLnJlcGxhY2UoJyAnLCBoZXhlc2NhcGUoJyAnKSkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnF1b3RlKGdpdmVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBxdW90ZSgpOiAlcyAhPSAlcyIgJSAoZXhwZWN0LCByZXN1bHQpKQorICAgICAgICBleHBlY3QgPSBnaXZlbi5yZXBsYWNlKCcgJywgJysnKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIucXVvdGVfcGx1cyhnaXZlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgcXVvdGVfcGx1cygpOiAlcyAhPSAlcyIgJSAoZXhwZWN0LCByZXN1bHQpKQorCisgICAgZGVmIHRlc3RfcXVvdGluZ19wbHVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybGxpYi5xdW90ZV9wbHVzKCdhbHBoYStiZXRhIGdhbW1hJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FscGhhJTJCYmV0YStnYW1tYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliLnF1b3RlX3BsdXMoJ2FscGhhK2JldGEgZ2FtbWEnLCAnKycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhbHBoYStiZXRhK2dhbW1hJykKKworY2xhc3MgVW5xdW90aW5nVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGZvciB1bnF1b3RlKCkgYW5kIHVucXVvdGVfcGx1cygpCisKKyAgICBTZWUgdGhlIGRvYyBzdHJpbmcgZm9yIHF1b3RpbmdfVGVzdHMgZm9yIGRldGFpbHMgb24gcXVvdGluZyBhbmQgc3VjaC4KKworICAgICIiIgorCisgICAgZGVmIHRlc3RfdW5xdW90aW5nKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB1bnF1b3Rpbmcgb2YgYWxsIEFTQ0lJIHZhbHVlcyB3b3JrcworICAgICAgICBlc2NhcGVfbGlzdCA9IFtdCisgICAgICAgIGZvciBudW0gaW4gcmFuZ2UoMTI4KToKKyAgICAgICAgICAgIGdpdmVuID0gaGV4ZXNjYXBlKGNocihudW0pKQorICAgICAgICAgICAgZXhwZWN0ID0gY2hyKG51bSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHVybGxpYi51bnF1b3RlKGdpdmVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHVucXVvdGUoKTogJXMgIT0gJXMiICUgKGV4cGVjdCwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHVybGxpYi51bnF1b3RlX3BsdXMoZ2l2ZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgdW5xdW90ZV9wbHVzKCk6ICVzICE9ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHBlY3QsIHJlc3VsdCkpCisgICAgICAgICAgICBlc2NhcGVfbGlzdC5hcHBlbmQoZ2l2ZW4pCisgICAgICAgIGVzY2FwZV9zdHJpbmcgPSAnJy5qb2luKGVzY2FwZV9saXN0KQorICAgICAgICBkZWwgZXNjYXBlX2xpc3QKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVucXVvdGUoZXNjYXBlX3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuY291bnQoJyUnKSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgcXVvdGUoKTogbm90IGFsbCBjaGFyYWN0ZXJzIGVzY2FwZWQ7ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KQorICAgICAgICByZXN1bHQgPSB1cmxsaWIudW5xdW90ZShlc2NhcGVfc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5jb3VudCgnJScpLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyB1bnF1b3RlKCk6IG5vdCBhbGwgY2hhcmFjdGVycyBlc2NhcGVkOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiAlIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X3VucXVvdGluZ19iYWRwZXJjZW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgdW5xdW90aW5nIG9uIGJhZCBwZXJjZW50LWVzY2FwZXMKKyAgICAgICAgZ2l2ZW4gPSAnJXhhYicKKyAgICAgICAgZXhwZWN0ID0gZ2l2ZW4KKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVucXVvdGUoZ2l2ZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCByZXN1bHQsICJ1c2luZyB1bnF1b3RlKCk6ICVyICE9ICVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICUgKGV4cGVjdCwgcmVzdWx0KSkKKyAgICAgICAgZ2l2ZW4gPSAnJXgnCisgICAgICAgIGV4cGVjdCA9IGdpdmVuCisgICAgICAgIHJlc3VsdCA9IHVybGxpYi51bnF1b3RlKGdpdmVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0LCAidXNpbmcgdW5xdW90ZSgpOiAlciAhPSAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAlIChleHBlY3QsIHJlc3VsdCkpCisgICAgICAgIGdpdmVuID0gJyUnCisgICAgICAgIGV4cGVjdCA9IGdpdmVuCisgICAgICAgIHJlc3VsdCA9IHVybGxpYi51bnF1b3RlKGdpdmVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0LCAidXNpbmcgdW5xdW90ZSgpOiAlciAhPSAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAlIChleHBlY3QsIHJlc3VsdCkpCisKKyAgICBkZWYgdGVzdF91bnF1b3RpbmdfbWl4ZWRfY2FzZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHVucXVvdGluZyBvbiBtaXhlZC1jYXNlIGhleCBkaWdpdHMgaW4gdGhlIHBlcmNlbnQtZXNjYXBlcworICAgICAgICBnaXZlbiA9ICclQWIlZUEnCisgICAgICAgIGV4cGVjdCA9ICdceGFiXHhlYScKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVucXVvdGUoZ2l2ZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCByZXN1bHQsICJ1c2luZyB1bnF1b3RlKCk6ICVyICE9ICVyIgorICAgICAgICAgICAgICAgICAgICAgICAgICUgKGV4cGVjdCwgcmVzdWx0KSkKKworICAgIGRlZiB0ZXN0X3VucXVvdGluZ19wYXJ0cyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdW5xdW90aW5nIHdvcmtzIHdoZW4gaGF2ZSBub24tcXVvdGVkIGNoYXJhY3RlcnMKKyAgICAgICAgIyBpbnRlcnNwZXJzZWQKKyAgICAgICAgZ2l2ZW4gPSAnYWIlc2QnICUgaGV4ZXNjYXBlKCdjJykKKyAgICAgICAgZXhwZWN0ID0gImFiY2QiCisgICAgICAgIHJlc3VsdCA9IHVybGxpYi51bnF1b3RlKGdpdmVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBxdW90ZSgpOiAlcyAhPSAlcyIgJSAoZXhwZWN0LCByZXN1bHQpKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIudW5xdW90ZV9wbHVzKGdpdmVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyB1bnF1b3RlX3BsdXMoKTogJXMgIT0gJXMiICUgKGV4cGVjdCwgcmVzdWx0KSkKKworICAgIGRlZiB0ZXN0X3VucXVvdGluZ19wbHVzKHNlbGYpOgorICAgICAgICAjIFRlc3QgZGlmZmVyZW5jZSBiZXR3ZWVuIHVucXVvdGUoKSBhbmQgdW5xdW90ZV9wbHVzKCkKKyAgICAgICAgZ2l2ZW4gPSAiYXJlK3RoZXJlK3NwYWNlcy4uLiIKKyAgICAgICAgZXhwZWN0ID0gZ2l2ZW4KKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVucXVvdGUoZ2l2ZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHVucXVvdGUoKTogJXMgIT0gJXMiICUgKGV4cGVjdCwgcmVzdWx0KSkKKyAgICAgICAgZXhwZWN0ID0gZ2l2ZW4ucmVwbGFjZSgnKycsICcgJykKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVucXVvdGVfcGx1cyhnaXZlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgdW5xdW90ZV9wbHVzKCk6ICVzICE9ICVzIiAlIChleHBlY3QsIHJlc3VsdCkpCisKKyAgICBkZWYgdGVzdF91bnF1b3RlX3dpdGhfdW5pY29kZShzZWxmKToKKyAgICAgICAgciA9IHVybGxpYi51bnF1b3RlKHUnYnIlQzMlQkNja25lcl9zYXBwb3JvXzIwMDUwOTMwLmRvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgdSdiclx4YzNceGJjY2tuZXJfc2FwcG9yb18yMDA1MDkzMC5kb2MnKQorCitjbGFzcyB1cmxlbmNvZGVfVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGZvciB1cmxlbmNvZGUoKSIiIgorCisgICAgZGVmIGhlbHBfaW5wdXR0eXBlKHNlbGYsIGdpdmVuLCB0ZXN0X3R5cGUpOgorICAgICAgICAiIiJIZWxwZXIgbWV0aG9kIGZvciB0ZXN0aW5nIGRpZmZlcmVudCBpbnB1dCB0eXBlcy4KKworICAgICAgICAnZ2l2ZW4nIG11c3QgbGVhZCB0byBvbmx5IHRoZSBwYWlyczoKKyAgICAgICAgICAgICogMXN0LCAxCisgICAgICAgICAgICAqIDJuZCwgMgorICAgICAgICAgICAgKiAzcmQsIDMKKworICAgICAgICBUZXN0IGNhbm5vdCBhc3N1bWUgYW55dGhpbmcgYWJvdXQgb3JkZXIuICBEb2NzIG1ha2Ugbm8gZ3VhcmFudGVlIGFuZAorICAgICAgICBoYXZlIHBvc3NpYmxlIGRpY3Rpb25hcnkgaW5wdXQuCisKKyAgICAgICAgIiIiCisgICAgICAgIGV4cGVjdF9zb21ld2hlcmUgPSBbIjFzdD0xIiwgIjJuZD0yIiwgIjNyZD0zIl0KKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybGVuY29kZShnaXZlbikKKyAgICAgICAgZm9yIGV4cGVjdGVkIGluIGV4cGVjdF9zb21ld2hlcmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGV4cGVjdGVkLCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RpbmcgJXM6ICVzIG5vdCBmb3VuZCBpbiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0X3R5cGUsIGV4cGVjdGVkLCByZXN1bHQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5jb3VudCgnJicpLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0aW5nICVzOiBleHBlY3RlZCAyICcmJ3M7IGdvdCAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0X3R5cGUsIHJlc3VsdC5jb3VudCgnJicpKSkKKyAgICAgICAgYW1wX2xvY2F0aW9uID0gcmVzdWx0LmluZGV4KCcmJykKKyAgICAgICAgb25fYW1wX2xlZnQgPSByZXN1bHRbYW1wX2xvY2F0aW9uIC0gMV0KKyAgICAgICAgb25fYW1wX3JpZ2h0ID0gcmVzdWx0W2FtcF9sb2NhdGlvbiArIDFdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvbl9hbXBfbGVmdC5pc2RpZ2l0KCkgYW5kIG9uX2FtcF9yaWdodC5pc2RpZ2l0KCksCisgICAgICAgICAgICAgICAgICAgICAidGVzdGluZyAlczogJyYnIG5vdCBsb2NhdGVkIGluIHByb3BlciBwbGFjZSBpbiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgKHRlc3RfdHlwZSwgcmVzdWx0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgKDUgKiAzKSArIDIsICM1IGNoYXJzIHBlciB0aGluZyBhbmQgYW1wcworICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0aW5nICVzOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnM6ICVzICE9ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfdHlwZSwgbGVuKHJlc3VsdCksICg1ICogMykgKyAyKSkKKworICAgIGRlZiB0ZXN0X3VzaW5nX21hcHBpbmcoc2VsZik6CisgICAgICAgICMgVGVzdCBwYXNzaW5nIGluIGEgbWFwcGluZyBvYmplY3QgYXMgYW4gYXJndW1lbnQuCisgICAgICAgIHNlbGYuaGVscF9pbnB1dHR5cGUoeyIxc3QiOicxJywgIjJuZCI6JzInLCAiM3JkIjonMyd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBkaWN0IGFzIGlucHV0IHR5cGUiKQorCisgICAgZGVmIHRlc3RfdXNpbmdfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCBwYXNzaW5nIGluIGEgc2VxdWVuY2Ugb2YgdHdvLWl0ZW0gc2VxdWVuY2VzIGFzIGFuIGFyZ3VtZW50LgorICAgICAgICBzZWxmLmhlbHBfaW5wdXR0eXBlKFsoJzFzdCcsICcxJyksICgnMm5kJywgJzInKSwgKCczcmQnLCAnMycpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgc2VxdWVuY2Ugb2YgdHdvLWl0ZW0gdHVwbGVzIGFzIGlucHV0IikKKworICAgIGRlZiB0ZXN0X3F1b3Rpbmcoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGtleXMgYW5kIHZhbHVlcyBhcmUgcXVvdGVkIHVzaW5nIHF1b3RlX3BsdXMoKQorICAgICAgICBnaXZlbiA9IHsiJiI6Ij0ifQorICAgICAgICBleHBlY3QgPSAiJXM9JXMiICUgKGhleGVzY2FwZSgnJicpLCBoZXhlc2NhcGUoJz0nKSkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybGVuY29kZShnaXZlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHJlc3VsdCkKKyAgICAgICAgZ2l2ZW4gPSB7ImtleSBuYW1lIjoiQSBidW5jaCBvZiBwbHVzZXMifQorICAgICAgICBleHBlY3QgPSAia2V5K25hbWU9QStidW5jaCtvZitwbHVzZXMiCisgICAgICAgIHJlc3VsdCA9IHVybGxpYi51cmxlbmNvZGUoZ2l2ZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9kb3NlcShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgcGFzc2luZyBUcnVlIGZvciAnZG9zZXEnIHBhcmFtZXRlciB3b3JrcyBjb3JyZWN0bHkKKyAgICAgICAgZ2l2ZW4gPSB7J3NlcXVlbmNlJzpbJzEnLCAnMicsICczJ119CisgICAgICAgIGV4cGVjdCA9ICJzZXF1ZW5jZT0lcyIgJSB1cmxsaWIucXVvdGVfcGx1cyhzdHIoWycxJywgJzInLCAnMyddKSkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybGVuY29kZShnaXZlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybGVuY29kZShnaXZlbiwgVHJ1ZSkKKyAgICAgICAgZm9yIHZhbHVlIGluIGdpdmVuWyJzZXF1ZW5jZSJdOgorICAgICAgICAgICAgZXhwZWN0ID0gInNlcXVlbmNlPSVzIiAlIHZhbHVlCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGV4cGVjdCwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5jb3VudCgnJicpLCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCAyICcmJ3MsIGdvdCAlcyIgJSByZXN1bHQuY291bnQoJyYnKSkKKworY2xhc3MgUGF0aG5hbWVfVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgcGF0aG5hbWUydXJsKCkgYW5kIHVybDJwYXRobmFtZSgpIiIiCisKKyAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgc2ltcGxlIHRlc3RzIHBhc3MKKyAgICAgICAgZXhwZWN0ZWRfcGF0aCA9IG9zLnBhdGguam9pbigicGFydHMiLCAib2YiLCAiYSIsICJwYXRoIikKKyAgICAgICAgZXhwZWN0ZWRfdXJsID0gInBhcnRzL29mL2EvcGF0aCIKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnBhdGhuYW1lMnVybChleHBlY3RlZF9wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX3VybCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRobmFtZTJ1cmwoKSBmYWlsZWQ7ICVzICE9ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdCwgZXhwZWN0ZWRfdXJsKSkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybDJwYXRobmFtZShleHBlY3RlZF91cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfcGF0aCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1cmwycGF0aGFtZSgpIGZhaWxlZDsgJXMgIT0gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0LCBleHBlY3RlZF9wYXRoKSkKKworICAgIGRlZiB0ZXN0X3F1b3Rpbmcoc2VsZik6CisgICAgICAgICMgVGVzdCBhdXRvbWF0aWMgcXVvdGluZyBhbmQgdW5xdW90aW5nIHdvcmtzIGZvciBwYXRobmFtMnVybCgpIGFuZAorICAgICAgICAjIHVybDJwYXRobmFtZSgpIHJlc3BlY3RpdmVseQorICAgICAgICBnaXZlbiA9IG9zLnBhdGguam9pbigibmVlZHMiLCAicXVvdD1pbmciLCAiaGVyZSIpCisgICAgICAgIGV4cGVjdCA9ICJuZWVkcy8lcy9oZXJlIiAlIHVybGxpYi5xdW90ZSgicXVvdD1pbmciKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIucGF0aG5hbWUydXJsKGdpdmVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJwYXRobmFtZTJ1cmwoKSBmYWlsZWQ7ICVzICE9ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdCwgcmVzdWx0KSkKKyAgICAgICAgZXhwZWN0ID0gZ2l2ZW4KKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybDJwYXRobmFtZShyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgInVybDJwYXRobmFtZSgpIGZhaWxlZDsgJXMgIT0gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0LCByZXN1bHQpKQorICAgICAgICBnaXZlbiA9IG9zLnBhdGguam9pbigibWFrZSBzdXJlIiwgInVzaW5nX3F1b3RlIikKKyAgICAgICAgZXhwZWN0ID0gIiVzL3VzaW5nX3F1b3RlIiAlIHVybGxpYi5xdW90ZSgibWFrZSBzdXJlIikKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnBhdGhuYW1lMnVybChnaXZlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicGF0aG5hbWUydXJsKCkgZmFpbGVkOyAlcyAhPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChleHBlY3QsIHJlc3VsdCkpCisgICAgICAgIGdpdmVuID0gIm1ha2Urc3VyZS91c2luZ191bnF1b3RlIgorICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oIm1ha2Urc3VyZSIsICJ1c2luZ191bnF1b3RlIikKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybDJwYXRobmFtZShnaXZlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidXJsMnBhdGhuYW1lKCkgZmFpbGVkOyAlcyAhPSAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChleHBlY3QsIHJlc3VsdCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBzcGVjaWZpYyB0byB0aGUgbnR1cmwycGF0aCBsaWJyYXJ5JykKKyAgICBkZWYgdGVzdF9udHBhdGgoc2VsZik6CisgICAgICAgIGdpdmVuID0gKCcvQzovJywgJy8vL0M6LycsICcvQ3wvLycpCisgICAgICAgIGV4cGVjdCA9ICdDOlxcJworICAgICAgICBmb3IgdXJsIGluIGdpdmVuOgorICAgICAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybDJwYXRobmFtZSh1cmwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnR1cmwycGF0aC51cmwycGF0aG5hbWUoKSBmYWlsZWQ7ICVzICE9ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHBlY3QsIHJlc3VsdCkpCisgICAgICAgIGdpdmVuID0gJy8vL0N8L3BhdGgnCisgICAgICAgIGV4cGVjdCA9ICdDOlxccGF0aCcKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnVybDJwYXRobmFtZShnaXZlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbnR1cmwycGF0aC51cmwycGF0aG5hbWUoKSBmYWlsZWQ7ICVzICE9ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdCwgcmVzdWx0KSkKKworY2xhc3MgVXRpbGl0eV9UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdGNhc2UgdG8gdGVzdCB0aGUgdmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucyBpbiB0aGUgdXJsbGliLiIiIgorCisgICAgZGVmIHRlc3Rfc3BsaXRwYXNzd2Qoc2VsZik6CisgICAgICAgICIiIlNvbWUgb2YgdGhlIHBhc3N3b3JkIGV4YW1wbGVzIGFyZSBub3Qgc2Vuc2libGUsIGJ1dCBpdCBpcyBhZGRlZCB0bworICAgICAgICBjb25maXJtaW5nIHRvIFJGQzI2MTcgYW5kIGFkZHJlc3NpbmcgaXNzdWU0Njc1LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYWInKSx1cmxsaWIuc3BsaXRwYXNzd2QoJ3VzZXI6YWInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYVxuYicpLHVybGxpYi5zcGxpdHBhc3N3ZCgndXNlcjphXG5iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyJywgJ2FcdGInKSx1cmxsaWIuc3BsaXRwYXNzd2QoJ3VzZXI6YVx0YicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcicsICdhXHJiJyksdXJsbGliLnNwbGl0cGFzc3dkKCd1c2VyOmFccmInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYVxmYicpLHVybGxpYi5zcGxpdHBhc3N3ZCgndXNlcjphXGZiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyJywgJ2FcdmInKSx1cmxsaWIuc3BsaXRwYXNzd2QoJ3VzZXI6YVx2YicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcicsICdhOmInKSx1cmxsaWIuc3BsaXRwYXNzd2QoJ3VzZXI6YTpiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyJywgJ2EgYicpLHVybGxpYi5zcGxpdHBhc3N3ZCgndXNlcjphIGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXIgMicsICdhYicpLHVybGxpYi5zcGxpdHBhc3N3ZCgndXNlciAyOmFiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyKzEnLCAnYStiJyksdXJsbGliLnNwbGl0cGFzc3dkKCd1c2VyKzE6YStiJykpCisKKworY2xhc3MgVVJMb3BlbmVyX1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0Y2FzZSB0byB0ZXN0IHRoZSBvcGVuIG1ldGhvZCBvZiBVUkxvcGVuZXIgY2xhc3MuIiIiCisKKyAgICBkZWYgdGVzdF9xdW90ZWRfb3BlbihzZWxmKToKKyAgICAgICAgY2xhc3MgRHVtbXlVUkxvcGVuZXIodXJsbGliLlVSTG9wZW5lcik6CisgICAgICAgICAgICBkZWYgb3Blbl9zcGFtKHNlbGYsIHVybCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVybAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRHVtbXlVUkxvcGVuZXIoKS5vcGVuKAorICAgICAgICAgICAgJ3NwYW06Ly9leGFtcGxlLyAvJyksJy8vZXhhbXBsZS8lMjAvJykKKworICAgICAgICAjIHRlc3QgdGhlIHNhZmUgY2hhcmFjdGVycyBhcmUgbm90IHF1b3RlZCBieSB1cmxvcGVuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRHVtbXlVUkxvcGVuZXIoKS5vcGVuKAorICAgICAgICAgICAgInNwYW06Ly9jOnx3aW5kb3dzJS86PSY/fiMrISQsOydAKCkqW118L3BhdGgvIiksCisgICAgICAgICAgICAiLy9jOnx3aW5kb3dzJS86PSY/fiMrISQsOydAKCkqW118L3BhdGgvIikKKworCisjIEp1c3QgY29tbWVudGVkIHRoZW0gb3V0LgorIyBDYW4ndCByZWFsbHkgdGVsbCB3aHkga2VlcCBmYWlsaW5nIGluIHdpbmRvd3MgYW5kIHNwYXJjLgorIyBFdmVyeXdoZXJlIGVsc2UgdGhleSB3b3JrIG9rLCBidXQgb24gdGhvc2UgbWFjaGluZXMsIHNvbWV0aW1lcworIyBmYWlsIGluIG9uZSBvZiB0aGUgdGVzdHMsIHNvbWV0aW1lcyBpbiBvdGhlci4gSSBoYXZlIGEgbGludXgsIGFuZAorIyB0aGUgdGVzdHMgZ28gb2suCisjIElmIGFueWJvZHkgaGFzIG9uZSBvZiB0aGUgcHJvYmxlbWF0aWMgZW52aXJvbWVudHMsIHBsZWFzZSBoZWxwIQorIyAuICAgRmFjdW5kbworIworIyBkZWYgc2VydmVyKGV2dCk6CisjICAgICBpbXBvcnQgc29ja2V0LCB0aW1lCisjICAgICBzZXJ2ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorIyAgICAgc2Vydi5zZXR0aW1lb3V0KDMpCisjICAgICBzZXJ2LnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisjICAgICBzZXJ2LmJpbmQoKCIiLCA5MDkzKSkKKyMgICAgIHNlcnYubGlzdGVuKDUpCisjICAgICB0cnk6CisjICAgICAgICAgY29ubiwgYWRkciA9IHNlcnYuYWNjZXB0KCkKKyMgICAgICAgICBjb25uLnNlbmQoIjEgSG9sYSBtdW5kb1xuIikKKyMgICAgICAgICBjYW50ZGF0YSA9IDAKKyMgICAgICAgICB3aGlsZSBjYW50ZGF0YSA8IDEzOgorIyAgICAgICAgICAgICBkYXRhID0gY29ubi5yZWN2KDEzLWNhbnRkYXRhKQorIyAgICAgICAgICAgICBjYW50ZGF0YSArPSBsZW4oZGF0YSkKKyMgICAgICAgICAgICAgdGltZS5zbGVlcCguMykKKyMgICAgICAgICBjb25uLnNlbmQoIjIgTm8gbW9yZSBsaW5lc1xuIikKKyMgICAgICAgICBjb25uLmNsb3NlKCkKKyMgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyMgICAgICAgICBwYXNzCisjICAgICBmaW5hbGx5OgorIyAgICAgICAgIHNlcnYuY2xvc2UoKQorIyAgICAgICAgIGV2dC5zZXQoKQorIworIyBjbGFzcyBGVFBXcmFwcGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorIworIyAgICAgZGVmIHNldFVwKHNlbGYpOgorIyAgICAgICAgIGltcG9ydCBmdHBsaWIsIHRpbWUsIHRocmVhZGluZworIyAgICAgICAgIGZ0cGxpYi5GVFAucG9ydCA9IDkwOTMKKyMgICAgICAgICBzZWxmLmV2dCA9IHRocmVhZGluZy5FdmVudCgpCisjICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmVyLCBhcmdzPShzZWxmLmV2dCwpKS5zdGFydCgpCisjICAgICAgICAgdGltZS5zbGVlcCguMSkKKyMKKyMgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyMgICAgICAgICBzZWxmLmV2dC53YWl0KCkKKyMKKyMgICAgIGRlZiB0ZXN0QmFzaWMoc2VsZik6CisjICAgICAgICAgIyBjb25uZWN0cworIyAgICAgICAgIGZ0cCA9IHVybGxpYi5mdHB3cmFwcGVyKCJteXVzZXIiLCAibXlwYXNzIiwgImxvY2FsaG9zdCIsIDkwOTMsIFtdKQorIyAgICAgICAgIGZ0cC5jbG9zZSgpCisjCisjICAgICBkZWYgdGVzdFRpbWVvdXROb25lKHNlbGYpOgorIyAgICAgICAgICMgZ2xvYmFsIGRlZmF1bHQgdGltZW91dCBpcyBpZ25vcmVkCisjICAgICAgICAgaW1wb3J0IHNvY2tldAorIyAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQorIyAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCgzMCkKKyMgICAgICAgICB0cnk6CisjICAgICAgICAgICAgIGZ0cCA9IHVybGxpYi5mdHB3cmFwcGVyKCJteXVzZXIiLCAibXlwYXNzIiwgImxvY2FsaG9zdCIsIDkwOTMsIFtdKQorIyAgICAgICAgIGZpbmFsbHk6CisjICAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorIyAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnRwLmZ0cC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCisjICAgICAgICAgZnRwLmNsb3NlKCkKKyMKKyMgICAgIGRlZiB0ZXN0VGltZW91dERlZmF1bHQoc2VsZik6CisjICAgICAgICAgIyBnbG9iYWwgZGVmYXVsdCB0aW1lb3V0IGlzIHVzZWQKKyMgICAgICAgICBpbXBvcnQgc29ja2V0CisjICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisjICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQorIyAgICAgICAgIHRyeToKKyMgICAgICAgICAgICAgZnRwID0gdXJsbGliLmZ0cHdyYXBwZXIoIm15dXNlciIsICJteXBhc3MiLCAibG9jYWxob3N0IiwgOTA5MywgW10pCisjICAgICAgICAgZmluYWxseToKKyMgICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisjICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdHAuZnRwLnNvY2suZ2V0dGltZW91dCgpLCAzMCkKKyMgICAgICAgICBmdHAuY2xvc2UoKQorIworIyAgICAgZGVmIHRlc3RUaW1lb3V0VmFsdWUoc2VsZik6CisjICAgICAgICAgZnRwID0gdXJsbGliLmZ0cHdyYXBwZXIoIm15dXNlciIsICJteXBhc3MiLCAibG9jYWxob3N0IiwgOTA5MywgW10sCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0zMCkKKyMgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ0cC5mdHAuc29jay5nZXR0aW1lb3V0KCksIDMwKQorIyAgICAgICAgIGZ0cC5jbG9zZSgpCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygnaWdub3JlJywgIi4qdXJsbGliXC51cmxvcGVuLipQeXRob24gMy4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICAgICAgdXJsb3Blbl9GaWxlVGVzdHMsCisgICAgICAgICAgICB1cmxvcGVuX0h0dHBUZXN0cywKKyAgICAgICAgICAgIHVybHJldHJpZXZlX0ZpbGVUZXN0cywKKyAgICAgICAgICAgIHVybHJldHJpZXZlX0h0dHBUZXN0cywKKyAgICAgICAgICAgIFByb3h5VGVzdHMsCisgICAgICAgICAgICBRdW90aW5nVGVzdHMsCisgICAgICAgICAgICBVbnF1b3RpbmdUZXN0cywKKyAgICAgICAgICAgIHVybGVuY29kZV9UZXN0cywKKyAgICAgICAgICAgIFBhdGhuYW1lX1Rlc3RzLAorICAgICAgICAgICAgVXRpbGl0eV9UZXN0cywKKyAgICAgICAgICAgIFVSTG9wZW5lcl9UZXN0cywKKyAgICAgICAgICAgICNGVFBXcmFwcGVyVGVzdHMsCisgICAgICAgICkKKworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3VybGxpYjIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91cmxsaWIyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYzk5NTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91cmxsaWIyLnB5CkBAIC0wLDAgKzEsMTM3OCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAorCitpbXBvcnQgb3MKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBTdHJpbmdJTworCitpbXBvcnQgdXJsbGliMgorZnJvbSB1cmxsaWIyIGltcG9ydCBSZXF1ZXN0LCBPcGVuZXJEaXJlY3RvcgorCisjIFhYWAorIyBSZXF1ZXN0CisjIENhY2hlRlRQSGFuZGxlciAoaGFyZCB0byB3cml0ZSkKKyMgcGFyc2Vfa2Vxdl9saXN0LCBwYXJzZV9odHRwX2xpc3QsIEhUVFBEaWdlc3RBdXRoSGFuZGxlcgorCitjbGFzcyBUcml2aWFsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3RyaXZpYWwoc2VsZik6CisgICAgICAgICMgQSBjb3VwbGUgdHJpdmlhbCB0ZXN0cworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHVybGxpYjIudXJsb3BlbiwgJ2JvZ3VzIHVybCcpCisKKyAgICAgICAgIyBYWFggTmFtZSBoYWNraW5nIHRvIGdldCB0aGlzIHRvIHdvcmsgb24gV2luZG93cy4KKyAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmFic3BhdGgodXJsbGliMi5fX2ZpbGVfXykucmVwbGFjZSgnXFwnLCAnLycpCisKKyAgICAgICAgIyBBbmQgbW9yZSBoYWNraW5nIHRvIGdldCBpdCB0byB3b3JrIG9uIE1hY09TLiBUaGlzIGFzc3VtZXMKKyAgICAgICAgIyB1cmxsaWIucGF0aG5hbWUydXJsIHdvcmtzLCB1bmZvcnR1bmF0ZWx5Li4uCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Jpc2Nvcyc6CisgICAgICAgICAgICBpbXBvcnQgc3RyaW5nCisgICAgICAgICAgICBmbmFtZSA9IG9zLmV4cGFuZChmbmFtZSkKKyAgICAgICAgICAgIGZuYW1lID0gZm5hbWUudHJhbnNsYXRlKHN0cmluZy5tYWtldHJhbnMoIi8uIiwgIi4vIikpCisKKyAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICAgICAgZmlsZV91cmwgPSAiZmlsZTovLy8lcyIgJSBmbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZV91cmwgPSAiZmlsZTovLyVzIiAlIGZuYW1lCisKKyAgICAgICAgZiA9IHVybGxpYjIudXJsb3BlbihmaWxlX3VybCkKKworICAgICAgICBidWYgPSBmLnJlYWQoKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3BhcnNlX2h0dHBfbGlzdChzZWxmKToKKyAgICAgICAgdGVzdHMgPSBbKCdhLGIsYycsIFsnYScsICdiJywgJ2MnXSksCisgICAgICAgICAgICAgICAgICgncGF0aCJvLGwib2ciaSJjYWwsIGV4YW1wbGUnLCBbJ3BhdGgibyxsIm9nImkiY2FsJywgJ2V4YW1wbGUnXSksCisgICAgICAgICAgICAgICAgICgnYSwgYiwgImMiLCAiZCIsICJlLGYiLCBnLCBoJywgWydhJywgJ2InLCAnImMiJywgJyJkIicsICciZSxmIicsICdnJywgJ2gnXSksCisgICAgICAgICAgICAgICAgICgnYT0iYlxcImMiLCBkPSJlXFwsZiIsIGc9ImhcXFxcaSInLCBbJ2E9ImIiYyInLCAnZD0iZSxmIicsICdnPSJoXFxpIiddKV0KKyAgICAgICAgZm9yIHN0cmluZywgbGlzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliMi5wYXJzZV9odHRwX2xpc3Qoc3RyaW5nKSwgbGlzdCkKKworCitkZWYgdGVzdF9yZXF1ZXN0X2hlYWRlcnNfZGljdCgpOgorICAgICIiIgorICAgIFRoZSBSZXF1ZXN0LmhlYWRlcnMgZGljdGlvbmFyeSBpcyBub3QgYSBkb2N1bWVudGVkIGludGVyZmFjZS4gIEl0IHNob3VsZAorICAgIHN0YXkgdGhhdCB3YXksIGJlY2F1c2UgdGhlIGNvbXBsZXRlIHNldCBvZiBoZWFkZXJzIGFyZSBvbmx5IGFjY2Vzc2libGUKKyAgICB0aHJvdWdoIHRoZSAuZ2V0X2hlYWRlcigpLCAuaGFzX2hlYWRlcigpLCAuaGVhZGVyX2l0ZW1zKCkgaW50ZXJmYWNlLgorICAgIEhvd2V2ZXIsIC5oZWFkZXJzIHByZS1kYXRlcyB0aG9zZSBtZXRob2RzLCBhbmQgc28gcmVhbCBjb2RlIHdpbGwgYmUgdXNpbmcKKyAgICB0aGUgZGljdGlvbmFyeS4KKworICAgIFRoZSBpbnRyb2R1Y3Rpb24gaW4gMi40IG9mIHRob3NlIG1ldGhvZHMgd2FzIGEgbWlzdGFrZSBmb3IgdGhlIHNhbWUgcmVhc29uOgorICAgIGNvZGUgdGhhdCBwcmV2aW91c2x5IHNhdyBhbGwgKHVybGxpYjIgdXNlciktcHJvdmlkZWQgaGVhZGVycyBpbiAuaGVhZGVycworICAgIG5vdyBzZWVzIG9ubHkgYSBzdWJzZXQgKGFuZCB0aGUgZnVuY3Rpb24gaW50ZXJmYWNlIGlzIHVnbHkgYW5kIGluY29tcGxldGUpLgorICAgIEEgYmV0dGVyIGNoYW5nZSB3b3VsZCBoYXZlIGJlZW4gdG8gcmVwbGFjZSAuaGVhZGVycyBkaWN0IHdpdGggYSBkaWN0CisgICAgc3ViY2xhc3MgKG9yIFVzZXJEaWN0LkRpY3RNaXhpbiBpbnN0YW5jZT8pICB0aGF0IHByZXNlcnZlZCB0aGUgLmhlYWRlcnMKKyAgICBpbnRlcmZhY2UgYW5kIGFsc28gcHJvdmlkZWQgYWNjZXNzIHRvIHRoZSAidW5yZWRpcmVjdGVkIiBoZWFkZXJzLiAgSXQncworICAgIHByb2JhYmx5IHRvbyBsYXRlIHRvIGZpeCB0aGF0LCB0aG91Z2guCisKKworICAgIENoZWNrIC5jYXBpdGFsaXplKCkgY2FzZSBub3JtYWxpemF0aW9uOgorCisgICAgPj4+IHVybCA9ICJodHRwOi8vZXhhbXBsZS5jb20iCisgICAgPj4+IFJlcXVlc3QodXJsLCBoZWFkZXJzPXsiU3BhbS1lZ2dzIjogImJsYWgifSkuaGVhZGVyc1siU3BhbS1lZ2dzIl0KKyAgICAnYmxhaCcKKyAgICA+Pj4gUmVxdWVzdCh1cmwsIGhlYWRlcnM9eyJzcGFtLUVnZ1MiOiAiYmxhaCJ9KS5oZWFkZXJzWyJTcGFtLWVnZ3MiXQorICAgICdibGFoJworCisgICAgQ3VycmVudGx5LCBSZXF1ZXN0KHVybCwgIlNwYW0tZWdncyIpLmhlYWRlcnNbIlNwYW0tRWdncyJdIHJhaXNlcyBLZXlFcnJvciwKKyAgICBidXQgdGhhdCBjb3VsZCBiZSBjaGFuZ2VkIGluIGZ1dHVyZS4KKworICAgICIiIgorCitkZWYgdGVzdF9yZXF1ZXN0X2hlYWRlcnNfbWV0aG9kcygpOgorICAgICIiIgorICAgIE5vdGUgdGhlIGNhc2Ugbm9ybWFsaXphdGlvbiBvZiBoZWFkZXIgbmFtZXMgaGVyZSwgdG8gLmNhcGl0YWxpemUoKS1jYXNlLgorICAgIFRoaXMgc2hvdWxkIGJlIHByZXNlcnZlZCBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkuICAoSW4gdGhlIEhUVFAgY2FzZSwKKyAgICBub3JtYWxpemF0aW9uIHRvIC50aXRsZSgpLWNhc2UgaXMgZG9uZSBieSB1cmxsaWIyIGJlZm9yZSBzZW5kaW5nIGhlYWRlcnMgdG8KKyAgICBodHRwbGliKS4KKworICAgID4+PiB1cmwgPSAiaHR0cDovL2V4YW1wbGUuY29tIgorICAgID4+PiByID0gUmVxdWVzdCh1cmwsIGhlYWRlcnM9eyJTcGFtLWVnZ3MiOiAiYmxhaCJ9KQorICAgID4+PiByLmhhc19oZWFkZXIoIlNwYW0tZWdncyIpCisgICAgVHJ1ZQorICAgID4+PiByLmhlYWRlcl9pdGVtcygpCisgICAgWygnU3BhbS1lZ2dzJywgJ2JsYWgnKV0KKyAgICA+Pj4gci5hZGRfaGVhZGVyKCJGb28tQmFyIiwgImJheiIpCisgICAgPj4+IGl0ZW1zID0gci5oZWFkZXJfaXRlbXMoKQorICAgID4+PiBpdGVtcy5zb3J0KCkKKyAgICA+Pj4gaXRlbXMKKyAgICBbKCdGb28tYmFyJywgJ2JheicpLCAoJ1NwYW0tZWdncycsICdibGFoJyldCisKKyAgICBOb3RlIHRoYXQgZS5nLiByLmhhc19oZWFkZXIoInNwYW0tRWdnUyIpIGlzIGN1cnJlbnRseSBGYWxzZSwgYW5kCisgICAgci5nZXRfaGVhZGVyKCJzcGFtLUVnZ1MiKSByZXR1cm5zIE5vbmUsIGJ1dCB0aGF0IGNvdWxkIGJlIGNoYW5nZWQgaW4KKyAgICBmdXR1cmUuCisKKyAgICA+Pj4gci5oYXNfaGVhZGVyKCJOb3QtdGhlcmUiKQorICAgIEZhbHNlCisgICAgPj4+IHByaW50IHIuZ2V0X2hlYWRlcigiTm90LXRoZXJlIikKKyAgICBOb25lCisgICAgPj4+IHIuZ2V0X2hlYWRlcigiTm90LXRoZXJlIiwgImRlZmF1bHQiKQorICAgICdkZWZhdWx0JworCisgICAgIiIiCisKKworZGVmIHRlc3RfcGFzc3dvcmRfbWFuYWdlcihzZWxmKToKKyAgICAiIiIKKyAgICA+Pj4gbWdyID0gdXJsbGliMi5IVFRQUGFzc3dvcmRNZ3IoKQorICAgID4+PiBhZGQgPSBtZ3IuYWRkX3Bhc3N3b3JkCisgICAgPj4+IGFkZCgiU29tZSBSZWFsbSIsICJodHRwOi8vZXhhbXBsZS5jb20vIiwgImpvZSIsICJwYXNzd29yZCIpCisgICAgPj4+IGFkZCgiU29tZSBSZWFsbSIsICJodHRwOi8vZXhhbXBsZS5jb20vbmkiLCAibmkiLCAibmkiKQorICAgID4+PiBhZGQoImMiLCAiaHR0cDovL2V4YW1wbGUuY29tL2ZvbyIsICJmb28iLCAibmkiKQorICAgID4+PiBhZGQoImMiLCAiaHR0cDovL2V4YW1wbGUuY29tL2JhciIsICJiYXIiLCAibmluaSIpCisgICAgPj4+IGFkZCgiYiIsICJodHRwOi8vZXhhbXBsZS5jb20vIiwgImZpcnN0IiwgImJsYWgiKQorICAgID4+PiBhZGQoImIiLCAiaHR0cDovL2V4YW1wbGUuY29tLyIsICJzZWNvbmQiLCAic3BhbSIpCisgICAgPj4+IGFkZCgiYSIsICJodHRwOi8vZXhhbXBsZS5jb20iLCAiMSIsICJhIikKKyAgICA+Pj4gYWRkKCJTb21lIFJlYWxtIiwgImh0dHA6Ly9jLmV4YW1wbGUuY29tOjMxMjgiLCAiMyIsICJjIikKKyAgICA+Pj4gYWRkKCJTb21lIFJlYWxtIiwgImQuZXhhbXBsZS5jb20iLCAiNCIsICJkIikKKyAgICA+Pj4gYWRkKCJTb21lIFJlYWxtIiwgImUuZXhhbXBsZS5jb206MzEyOCIsICI1IiwgImUiKQorCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoIlNvbWUgUmVhbG0iLCAiZXhhbXBsZS5jb20iKQorICAgICgnam9lJywgJ3Bhc3N3b3JkJykKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiU29tZSBSZWFsbSIsICJodHRwOi8vZXhhbXBsZS5jb20iKQorICAgICgnam9lJywgJ3Bhc3N3b3JkJykKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiU29tZSBSZWFsbSIsICJodHRwOi8vZXhhbXBsZS5jb20vIikKKyAgICAoJ2pvZScsICdwYXNzd29yZCcpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoIlNvbWUgUmVhbG0iLCAiaHR0cDovL2V4YW1wbGUuY29tL3NwYW0iKQorICAgICgnam9lJywgJ3Bhc3N3b3JkJykKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiU29tZSBSZWFsbSIsICJodHRwOi8vZXhhbXBsZS5jb20vc3BhbS9zcGFtIikKKyAgICAoJ2pvZScsICdwYXNzd29yZCcpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoImMiLCAiaHR0cDovL2V4YW1wbGUuY29tL2ZvbyIpCisgICAgKCdmb28nLCAnbmknKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJjIiwgImh0dHA6Ly9leGFtcGxlLmNvbS9iYXIiKQorICAgICgnYmFyJywgJ25pbmknKQorCisgICAgQWN0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHVuZGVmaW5lZCBBVE0KKyMjICAgICBDdXJyZW50bHksIHdlIHVzZSB0aGUgaGlnaGVzdC1sZXZlbCBwYXRoIHdoZXJlIG1vcmUgdGhhbiBvbmUgbWF0Y2g6CisKKyMjICAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiU29tZSBSZWFsbSIsICJodHRwOi8vZXhhbXBsZS5jb20vbmkiKQorIyMgICAgICgnam9lJywgJ3Bhc3N3b3JkJykKKworICAgIFVzZSBsYXRlc3QgYWRkX3Bhc3N3b3JkKCkgaW4gY2FzZSBvZiBjb25mbGljdDoKKworICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJiIiwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKQorICAgICgnc2Vjb25kJywgJ3NwYW0nKQorCisgICAgTm8gc3BlY2lhbCByZWxhdGlvbnNoaXAgYmV0d2VlbiBhLmV4YW1wbGUuY29tIGFuZCBleGFtcGxlLmNvbToKKworICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJhIiwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKQorICAgICgnMScsICdhJykKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiYSIsICJodHRwOi8vYS5leGFtcGxlLmNvbS8iKQorICAgIChOb25lLCBOb25lKQorCisgICAgUG9ydHM6CisKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiU29tZSBSZWFsbSIsICJjLmV4YW1wbGUuY29tIikKKyAgICAoTm9uZSwgTm9uZSkKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiU29tZSBSZWFsbSIsICJjLmV4YW1wbGUuY29tOjMxMjgiKQorICAgICgnMycsICdjJykKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiU29tZSBSZWFsbSIsICJodHRwOi8vYy5leGFtcGxlLmNvbTozMTI4IikKKyAgICAoJzMnLCAnYycpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoIlNvbWUgUmVhbG0iLCAiZC5leGFtcGxlLmNvbSIpCisgICAgKCc0JywgJ2QnKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJTb21lIFJlYWxtIiwgImUuZXhhbXBsZS5jb206MzEyOCIpCisgICAgKCc1JywgJ2UnKQorCisgICAgIiIiCisgICAgcGFzcworCisKK2RlZiB0ZXN0X3Bhc3N3b3JkX21hbmFnZXJfZGVmYXVsdF9wb3J0KHNlbGYpOgorICAgICIiIgorICAgID4+PiBtZ3IgPSB1cmxsaWIyLkhUVFBQYXNzd29yZE1ncigpCisgICAgPj4+IGFkZCA9IG1nci5hZGRfcGFzc3dvcmQKKworICAgIFRoZSBwb2ludCB0byBub3RlIGhlcmUgaXMgdGhhdCB3ZSBjYW4ndCBndWVzcyB0aGUgZGVmYXVsdCBwb3J0IGlmIHRoZXJlJ3MKKyAgICBubyBzY2hlbWUuICBUaGlzIGFwcGxpZXMgdG8gYm90aCBhZGRfcGFzc3dvcmQgYW5kIGZpbmRfdXNlcl9wYXNzd29yZC4KKworICAgID4+PiBhZGQoImYiLCAiaHR0cDovL2cuZXhhbXBsZS5jb206ODAiLCAiMTAiLCAiaiIpCisgICAgPj4+IGFkZCgiZyIsICJodHRwOi8vaC5leGFtcGxlLmNvbSIsICIxMSIsICJrIikKKyAgICA+Pj4gYWRkKCJoIiwgImkuZXhhbXBsZS5jb206ODAiLCAiMTIiLCAibCIpCisgICAgPj4+IGFkZCgiaSIsICJqLmV4YW1wbGUuY29tIiwgIjEzIiwgIm0iKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJmIiwgImcuZXhhbXBsZS5jb206MTAwIikKKyAgICAoTm9uZSwgTm9uZSkKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiZiIsICJnLmV4YW1wbGUuY29tOjgwIikKKyAgICAoJzEwJywgJ2onKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJmIiwgImcuZXhhbXBsZS5jb20iKQorICAgIChOb25lLCBOb25lKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJmIiwgImh0dHA6Ly9nLmV4YW1wbGUuY29tOjEwMCIpCisgICAgKE5vbmUsIE5vbmUpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoImYiLCAiaHR0cDovL2cuZXhhbXBsZS5jb206ODAiKQorICAgICgnMTAnLCAnaicpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoImYiLCAiaHR0cDovL2cuZXhhbXBsZS5jb20iKQorICAgICgnMTAnLCAnaicpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoImciLCAiaC5leGFtcGxlLmNvbSIpCisgICAgKCcxMScsICdrJykKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiZyIsICJoLmV4YW1wbGUuY29tOjgwIikKKyAgICAoJzExJywgJ2snKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJnIiwgImh0dHA6Ly9oLmV4YW1wbGUuY29tOjgwIikKKyAgICAoJzExJywgJ2snKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJoIiwgImkuZXhhbXBsZS5jb20iKQorICAgIChOb25lLCBOb25lKQorICAgID4+PiBtZ3IuZmluZF91c2VyX3Bhc3N3b3JkKCJoIiwgImkuZXhhbXBsZS5jb206ODAiKQorICAgICgnMTInLCAnbCcpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoImgiLCAiaHR0cDovL2kuZXhhbXBsZS5jb206ODAiKQorICAgICgnMTInLCAnbCcpCisgICAgPj4+IG1nci5maW5kX3VzZXJfcGFzc3dvcmQoImkiLCAiai5leGFtcGxlLmNvbSIpCisgICAgKCcxMycsICdtJykKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiaSIsICJqLmV4YW1wbGUuY29tOjgwIikKKyAgICAoTm9uZSwgTm9uZSkKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiaSIsICJodHRwOi8vai5leGFtcGxlLmNvbSIpCisgICAgKCcxMycsICdtJykKKyAgICA+Pj4gbWdyLmZpbmRfdXNlcl9wYXNzd29yZCgiaSIsICJodHRwOi8vai5leGFtcGxlLmNvbTo4MCIpCisgICAgKE5vbmUsIE5vbmUpCisKKyAgICAiIiIKKworY2xhc3MgTW9ja09wZW5lcjoKKyAgICBhZGRoZWFkZXJzID0gW10KKyAgICBkZWYgb3BlbihzZWxmLCByZXEsIGRhdGE9Tm9uZSx0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCk6CisgICAgICAgIHNlbGYucmVxLCBzZWxmLmRhdGEsIHNlbGYudGltZW91dCAgPSByZXEsIGRhdGEsIHRpbWVvdXQKKyAgICBkZWYgZXJyb3Ioc2VsZiwgcHJvdG8sICphcmdzKToKKyAgICAgICAgc2VsZi5wcm90bywgc2VsZi5hcmdzID0gcHJvdG8sIGFyZ3MKKworY2xhc3MgTW9ja0ZpbGU6CisgICAgZGVmIHJlYWQoc2VsZiwgY291bnQ9Tm9uZSk6IHBhc3MKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgY291bnQ9Tm9uZSk6IHBhc3MKKyAgICBkZWYgY2xvc2Uoc2VsZik6IHBhc3MKKworY2xhc3MgTW9ja0hlYWRlcnMoZGljdCk6CisgICAgZGVmIGdldGhlYWRlcnMoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlcygpCisKK2NsYXNzIE1vY2tSZXNwb25zZShTdHJpbmdJTy5TdHJpbmdJTyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvZGUsIG1zZywgaGVhZGVycywgZGF0YSwgdXJsPU5vbmUpOgorICAgICAgICBTdHJpbmdJTy5TdHJpbmdJTy5fX2luaXRfXyhzZWxmLCBkYXRhKQorICAgICAgICBzZWxmLmNvZGUsIHNlbGYubXNnLCBzZWxmLmhlYWRlcnMsIHNlbGYudXJsID0gY29kZSwgbXNnLCBoZWFkZXJzLCB1cmwKKyAgICBkZWYgaW5mbyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaGVhZGVycworICAgIGRlZiBnZXR1cmwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnVybAorCitjbGFzcyBNb2NrQ29va2llSmFyOgorICAgIGRlZiBhZGRfY29va2llX2hlYWRlcihzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgc2VsZi5hY2hfcmVxID0gcmVxdWVzdAorICAgIGRlZiBleHRyYWN0X2Nvb2tpZXMoc2VsZiwgcmVzcG9uc2UsIHJlcXVlc3QpOgorICAgICAgICBzZWxmLmVjX3JlcSwgc2VsZi5lY19yID0gcmVxdWVzdCwgcmVzcG9uc2UKKworY2xhc3MgRmFrZU1ldGhvZDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aF9uYW1lLCBhY3Rpb24sIGhhbmRsZSk6CisgICAgICAgIHNlbGYubWV0aF9uYW1lID0gbWV0aF9uYW1lCisgICAgICAgIHNlbGYuaGFuZGxlID0gaGFuZGxlCisgICAgICAgIHNlbGYuYWN0aW9uID0gYWN0aW9uCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlKHNlbGYubWV0aF9uYW1lLCBzZWxmLmFjdGlvbiwgKmFyZ3MpCisKK2NsYXNzIE1vY2tIVFRQUmVzcG9uc2U6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZwLCBtc2csIHN0YXR1cywgcmVhc29uKToKKyAgICAgICAgc2VsZi5mcCA9IGZwCisgICAgICAgIHNlbGYubXNnID0gbXNnCisgICAgICAgIHNlbGYuc3RhdHVzID0gc3RhdHVzCisgICAgICAgIHNlbGYucmVhc29uID0gcmVhc29uCisgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgIHJldHVybiAnJworCitjbGFzcyBNb2NrSFRUUENsYXNzOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5yZXFfaGVhZGVycyA9IFtdCisgICAgICAgIHNlbGYuZGF0YSA9IE5vbmUKKyAgICAgICAgc2VsZi5yYWlzZV9vbl9lbmRoZWFkZXJzID0gRmFsc2UKKyAgICAgICAgc2VsZi5fdHVubmVsX2hlYWRlcnMgPSB7fQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGhvc3QsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKKyAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgc2V0X2RlYnVnbGV2ZWwoc2VsZiwgbGV2ZWwpOgorICAgICAgICBzZWxmLmxldmVsID0gbGV2ZWwKKworICAgIGRlZiBzZXRfdHVubmVsKHNlbGYsIGhvc3QsIHBvcnQ9Tm9uZSwgaGVhZGVycz1Ob25lKToKKyAgICAgICAgc2VsZi5fdHVubmVsX2hvc3QgPSBob3N0CisgICAgICAgIHNlbGYuX3R1bm5lbF9wb3J0ID0gcG9ydAorICAgICAgICBpZiBoZWFkZXJzOgorICAgICAgICAgICAgc2VsZi5fdHVubmVsX2hlYWRlcnMgPSBoZWFkZXJzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl90dW5uZWxfaGVhZGVycy5jbGVhcigpCisKKyAgICBkZWYgcmVxdWVzdChzZWxmLCBtZXRob2QsIHVybCwgYm9keT1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgICAgICBzZWxmLm1ldGhvZCA9IG1ldGhvZAorICAgICAgICBzZWxmLnNlbGVjdG9yID0gdXJsCisgICAgICAgIGlmIGhlYWRlcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnJlcV9oZWFkZXJzICs9IGhlYWRlcnMuaXRlbXMoKQorICAgICAgICBzZWxmLnJlcV9oZWFkZXJzLnNvcnQoKQorICAgICAgICBpZiBib2R5OgorICAgICAgICAgICAgc2VsZi5kYXRhID0gYm9keQorICAgICAgICBpZiBzZWxmLnJhaXNlX29uX2VuZGhlYWRlcnM6CisgICAgICAgICAgICBpbXBvcnQgc29ja2V0CisgICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoKQorCisgICAgZGVmIGdldHJlc3BvbnNlKHNlbGYpOgorICAgICAgICByZXR1cm4gTW9ja0hUVFBSZXNwb25zZShNb2NrRmlsZSgpLCB7fSwgMjAwLCAiT0siKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBwYXNzCisKK2NsYXNzIE1vY2tIYW5kbGVyOgorICAgICMgdXNlZnVsIGZvciB0ZXN0aW5nIGhhbmRsZXIgbWFjaGluZXJ5CisgICAgIyBzZWUgYWRkX29yZGVyZWRfbW9ja19oYW5kbGVycygpIGRvY3N0cmluZworICAgIGhhbmRsZXJfb3JkZXIgPSA1MDAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kcyk6CisgICAgICAgIHNlbGYuX2RlZmluZV9tZXRob2RzKG1ldGhvZHMpCisgICAgZGVmIF9kZWZpbmVfbWV0aG9kcyhzZWxmLCBtZXRob2RzKToKKyAgICAgICAgZm9yIHNwZWMgaW4gbWV0aG9kczoKKyAgICAgICAgICAgIGlmIGxlbihzcGVjKSA9PSAyOiBuYW1lLCBhY3Rpb24gPSBzcGVjCisgICAgICAgICAgICBlbHNlOiBuYW1lLCBhY3Rpb24gPSBzcGVjLCBOb25lCisgICAgICAgICAgICBtZXRoID0gRmFrZU1ldGhvZChuYW1lLCBhY3Rpb24sIHNlbGYuaGFuZGxlKQorICAgICAgICAgICAgc2V0YXR0cihzZWxmLl9fY2xhc3NfXywgbmFtZSwgbWV0aCkKKyAgICBkZWYgaGFuZGxlKHNlbGYsIGZuX25hbWUsIGFjdGlvbiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHNlbGYucGFyZW50LmNhbGxzLmFwcGVuZCgoc2VsZiwgZm5fbmFtZSwgYXJncywga3dkcykpCisgICAgICAgIGlmIGFjdGlvbiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxpZiBhY3Rpb24gPT0gInJldHVybiBzZWxmIjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIGVsaWYgYWN0aW9uID09ICJyZXR1cm4gcmVzcG9uc2UiOgorICAgICAgICAgICAgcmVzID0gTW9ja1Jlc3BvbnNlKDIwMCwgIk9LIiwge30sICIiKQorICAgICAgICAgICAgcmV0dXJuIHJlcworICAgICAgICBlbGlmIGFjdGlvbiA9PSAicmV0dXJuIHJlcXVlc3QiOgorICAgICAgICAgICAgcmV0dXJuIFJlcXVlc3QoImh0dHA6Ly9ibGFoLyIpCisgICAgICAgIGVsaWYgYWN0aW9uLnN0YXJ0c3dpdGgoImVycm9yIik6CisgICAgICAgICAgICBjb2RlID0gYWN0aW9uW2FjdGlvbi5yZmluZCgiICIpKzE6XQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvZGUgPSBpbnQoY29kZSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJlcyA9IE1vY2tSZXNwb25zZSgyMDAsICJPSyIsIHt9LCAiIikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcmVudC5lcnJvcigiaHR0cCIsIGFyZ3NbMF0sIHJlcywgY29kZSwgIiIsIHt9KQorICAgICAgICBlbGlmIGFjdGlvbiA9PSAicmFpc2UiOgorICAgICAgICAgICAgcmFpc2UgdXJsbGliMi5VUkxFcnJvcigiYmxhaCIpCisgICAgICAgIGFzc2VydCBGYWxzZQorICAgIGRlZiBjbG9zZShzZWxmKTogcGFzcworICAgIGRlZiBhZGRfcGFyZW50KHNlbGYsIHBhcmVudCk6CisgICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50CisgICAgICAgIHNlbGYucGFyZW50LmNhbGxzID0gW10KKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIob3RoZXIsICJoYW5kbGVyX29yZGVyIik6CisgICAgICAgICAgICAjIE5vIGhhbmRsZXJfb3JkZXIsIGxlYXZlIGluIG9yaWdpbmFsIG9yZGVyLiAgWXVjay4KKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZXJfb3JkZXIgPCBvdGhlci5oYW5kbGVyX29yZGVyCisKK2RlZiBhZGRfb3JkZXJlZF9tb2NrX2hhbmRsZXJzKG9wZW5lciwgbWV0aF9zcGVjKToKKyAgICAiIiJDcmVhdGUgTW9ja0hhbmRsZXJzIGFuZCBhZGQgdGhlbSB0byBhbiBPcGVuZXJEaXJlY3Rvci4KKworICAgIG1ldGhfc3BlYzogbGlzdCBvZiBsaXN0cyBvZiB0dXBsZXMgYW5kIHN0cmluZ3MgZGVmaW5pbmcgbWV0aG9kcyB0byBkZWZpbmUKKyAgICBvbiBoYW5kbGVycy4gIGVnOgorCisgICAgW1siaHR0cF9lcnJvciIsICJmdHBfb3BlbiJdLCBbImh0dHBfb3BlbiJdXQorCisgICAgZGVmaW5lcyBtZXRob2RzIC5odHRwX2Vycm9yKCkgYW5kIC5mdHBfb3BlbigpIG9uIG9uZSBoYW5kbGVyLCBhbmQKKyAgICAuaHR0cF9vcGVuKCkgb24gYW5vdGhlci4gIFRoZXNlIG1ldGhvZHMganVzdCByZWNvcmQgdGhlaXIgYXJndW1lbnRzIGFuZAorICAgIHJldHVybiBOb25lLiAgVXNpbmcgYSB0dXBsZSBpbnN0ZWFkIG9mIGEgc3RyaW5nIGNhdXNlcyB0aGUgbWV0aG9kIHRvCisgICAgcGVyZm9ybSBzb21lIGFjdGlvbiAoc2VlIE1vY2tIYW5kbGVyLmhhbmRsZSgpKSwgZWc6CisKKyAgICBbWyJodHRwX2Vycm9yIl0sIFsoImh0dHBfb3BlbiIsICJyZXR1cm4gcmVxdWVzdCIpXV0KKworICAgIGRlZmluZXMgLmh0dHBfZXJyb3IoKSBvbiBvbmUgaGFuZGxlciAod2hpY2ggc2ltcGx5IHJldHVybnMgTm9uZSksIGFuZAorICAgIC5odHRwX29wZW4oKSBvbiBhbm90aGVyIGhhbmRsZXIsIHdoaWNoIHJldHVybnMgYSBSZXF1ZXN0IG9iamVjdC4KKworICAgICIiIgorICAgIGhhbmRsZXJzID0gW10KKyAgICBjb3VudCA9IDAKKyAgICBmb3IgbWV0aHMgaW4gbWV0aF9zcGVjOgorICAgICAgICBjbGFzcyBNb2NrSGFuZGxlclN1YmNsYXNzKE1vY2tIYW5kbGVyKTogcGFzcworICAgICAgICBoID0gTW9ja0hhbmRsZXJTdWJjbGFzcyhtZXRocykKKyAgICAgICAgaC5oYW5kbGVyX29yZGVyICs9IGNvdW50CisgICAgICAgIGguYWRkX3BhcmVudChvcGVuZXIpCisgICAgICAgIGNvdW50ID0gY291bnQgKyAxCisgICAgICAgIGhhbmRsZXJzLmFwcGVuZChoKQorICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoaCkKKyAgICByZXR1cm4gaGFuZGxlcnMKKworZGVmIGJ1aWxkX3Rlc3Rfb3BlbmVyKCpoYW5kbGVyX2luc3RhbmNlcyk6CisgICAgb3BlbmVyID0gT3BlbmVyRGlyZWN0b3IoKQorICAgIGZvciBoIGluIGhhbmRsZXJfaW5zdGFuY2VzOgorICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoaCkKKyAgICByZXR1cm4gb3BlbmVyCisKK2NsYXNzIE1vY2tIVFRQSGFuZGxlcih1cmxsaWIyLkJhc2VIYW5kbGVyKToKKyAgICAjIHVzZWZ1bCBmb3IgdGVzdGluZyByZWRpcmVjdGlvbnMgYW5kIGF1dGgKKyAgICAjIHNlbmRzIHN1cHBsaWVkIGhlYWRlcnMgYW5kIGNvZGUgYXMgZmlyc3QgcmVzcG9uc2UKKyAgICAjIHNlbmRzIDIwMCBPSyBhcyBzZWNvbmQgcmVzcG9uc2UKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29kZSwgaGVhZGVycyk6CisgICAgICAgIHNlbGYuY29kZSA9IGNvZGUKKyAgICAgICAgc2VsZi5oZWFkZXJzID0gaGVhZGVycworICAgICAgICBzZWxmLnJlc2V0KCkKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuX2NvdW50ID0gMAorICAgICAgICBzZWxmLnJlcXVlc3RzID0gW10KKyAgICBkZWYgaHR0cF9vcGVuKHNlbGYsIHJlcSk6CisgICAgICAgIGltcG9ydCBtaW1ldG9vbHMsIGh0dHBsaWIsIGNvcHkKKyAgICAgICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKyAgICAgICAgc2VsZi5yZXF1ZXN0cy5hcHBlbmQoY29weS5kZWVwY29weShyZXEpKQorICAgICAgICBpZiBzZWxmLl9jb3VudCA9PSAwOgorICAgICAgICAgICAgc2VsZi5fY291bnQgPSBzZWxmLl9jb3VudCArIDEKKyAgICAgICAgICAgIG5hbWUgPSBodHRwbGliLnJlc3BvbnNlc1tzZWxmLmNvZGVdCisgICAgICAgICAgICBtc2cgPSBtaW1ldG9vbHMuTWVzc2FnZShTdHJpbmdJTyhzZWxmLmhlYWRlcnMpKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50LmVycm9yKAorICAgICAgICAgICAgICAgICJodHRwIiwgcmVxLCBNb2NrRmlsZSgpLCBzZWxmLmNvZGUsIG5hbWUsIG1zZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucmVxID0gcmVxCisgICAgICAgICAgICBtc2cgPSBtaW1ldG9vbHMuTWVzc2FnZShTdHJpbmdJTygiXHJcblxyXG4iKSkKKyAgICAgICAgICAgIHJldHVybiBNb2NrUmVzcG9uc2UoMjAwLCAiT0siLCBtc2csICIiLCByZXEuZ2V0X2Z1bGxfdXJsKCkpCisKK2NsYXNzIE1vY2tIVFRQU0hhbmRsZXIodXJsbGliMi5BYnN0cmFjdEhUVFBIYW5kbGVyKToKKyAgICAjIFVzZWZ1bCBmb3IgdGVzdGluZyB0aGUgUHJveHktQXV0aG9yaXphdGlvbiByZXF1ZXN0IGJ5IHZlcmlmeWluZyB0aGUKKyAgICAjIHByb3BlcnRpZXMgb2YgaHR0cGNvbgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICB1cmxsaWIyLkFic3RyYWN0SFRUUEhhbmRsZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5odHRwY29ubiA9IE1vY2tIVFRQQ2xhc3MoKQorCisgICAgZGVmIGh0dHBzX29wZW4oc2VsZiwgcmVxKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZG9fb3BlbihzZWxmLmh0dHBjb25uLCByZXEpCisKK2NsYXNzIE1vY2tQYXNzd29yZE1hbmFnZXI6CisgICAgZGVmIGFkZF9wYXNzd29yZChzZWxmLCByZWFsbSwgdXJpLCB1c2VyLCBwYXNzd29yZCk6CisgICAgICAgIHNlbGYucmVhbG0gPSByZWFsbQorICAgICAgICBzZWxmLnVybCA9IHVyaQorICAgICAgICBzZWxmLnVzZXIgPSB1c2VyCisgICAgICAgIHNlbGYucGFzc3dvcmQgPSBwYXNzd29yZAorICAgIGRlZiBmaW5kX3VzZXJfcGFzc3dvcmQoc2VsZiwgcmVhbG0sIGF1dGh1cmkpOgorICAgICAgICBzZWxmLnRhcmdldF9yZWFsbSA9IHJlYWxtCisgICAgICAgIHNlbGYudGFyZ2V0X3VybCA9IGF1dGh1cmkKKyAgICAgICAgcmV0dXJuIHNlbGYudXNlciwgc2VsZi5wYXNzd29yZAorCisKK2NsYXNzIE9wZW5lckRpcmVjdG9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYWRkX25vbl9oYW5kbGVyKHNlbGYpOgorICAgICAgICBjbGFzcyBOb25IYW5kbGVyKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlbmVyRGlyZWN0b3IoKS5hZGRfaGFuZGxlciwgTm9uSGFuZGxlcigpKQorCisgICAgZGVmIHRlc3RfYmFkbHlfbmFtZWRfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHdvcmstYXJvdW5kIGZvciB0aHJlZSBtZXRob2RzIHRoYXQgYWNjaWRlbnRhbGx5IGZvbGxvdyB0aGUKKyAgICAgICAgIyBuYW1pbmcgY29udmVudGlvbnMgZm9yIGhhbmRsZXIgbWV0aG9kcworICAgICAgICAjICgqX29wZW4oKSAvICpfcmVxdWVzdCgpIC8gKl9yZXNwb25zZSgpKQorCisgICAgICAgICMgVGhlc2UgdXNlZCB0byBjYWxsIHRoZSBhY2NpZGVudGFsbHktbmFtZWQgbWV0aG9kcywgY2F1c2luZyBhCisgICAgICAgICMgVHlwZUVycm9yIGluIHJlYWwgY29kZTsgaGVyZSwgcmV0dXJuaW5nIHNlbGYgZnJvbSB0aGVzZSBtb2NrCisgICAgICAgICMgbWV0aG9kcyB3b3VsZCBlaXRoZXIgY2F1c2Ugbm8gZXhjZXB0aW9uLCBvciBBdHRyaWJ1dGVFcnJvci4KKworICAgICAgICBmcm9tIHVybGxpYjIgaW1wb3J0IFVSTEVycm9yCisKKyAgICAgICAgbyA9IE9wZW5lckRpcmVjdG9yKCkKKyAgICAgICAgbWV0aF9zcGVjID0gWworICAgICAgICAgICAgWygiZG9fb3BlbiIsICJyZXR1cm4gc2VsZiIpLCAoInByb3h5X29wZW4iLCAicmV0dXJuIHNlbGYiKV0sCisgICAgICAgICAgICBbKCJyZWRpcmVjdF9yZXF1ZXN0IiwgInJldHVybiBzZWxmIildLAorICAgICAgICAgICAgXQorICAgICAgICBoYW5kbGVycyA9IGFkZF9vcmRlcmVkX21vY2tfaGFuZGxlcnMobywgbWV0aF9zcGVjKQorICAgICAgICBvLmFkZF9oYW5kbGVyKHVybGxpYjIuVW5rbm93bkhhbmRsZXIoKSkKKyAgICAgICAgZm9yIHNjaGVtZSBpbiAiZG8iLCAicHJveHkiLCAicmVkaXJlY3QiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVVJMRXJyb3IsIG8ub3Blbiwgc2NoZW1lKyI6Ly9leGFtcGxlLmNvbS8iKQorCisgICAgZGVmIHRlc3RfaGFuZGxlZChzZWxmKToKKyAgICAgICAgIyBoYW5kbGVyIHJldHVybmluZyBub24tTm9uZSBtZWFucyBubyBtb3JlIGhhbmRsZXJzIHdpbGwgYmUgY2FsbGVkCisgICAgICAgIG8gPSBPcGVuZXJEaXJlY3RvcigpCisgICAgICAgIG1ldGhfc3BlYyA9IFsKKyAgICAgICAgICAgIFsiaHR0cF9vcGVuIiwgImZ0cF9vcGVuIiwgImh0dHBfZXJyb3JfMzAyIl0sCisgICAgICAgICAgICBbImZ0cF9vcGVuIl0sCisgICAgICAgICAgICBbKCJodHRwX29wZW4iLCAicmV0dXJuIHNlbGYiKV0sCisgICAgICAgICAgICBbKCJodHRwX29wZW4iLCAicmV0dXJuIHNlbGYiKV0sCisgICAgICAgICAgICBdCisgICAgICAgIGhhbmRsZXJzID0gYWRkX29yZGVyZWRfbW9ja19oYW5kbGVycyhvLCBtZXRoX3NwZWMpCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tLyIpCisgICAgICAgIHIgPSBvLm9wZW4ocmVxKQorICAgICAgICAjIFNlY29uZCAuaHR0cF9vcGVuKCkgZ2V0cyBjYWxsZWQsIHRoaXJkIGRvZXNuJ3QsIHNpbmNlIHNlY29uZCByZXR1cm5lZAorICAgICAgICAjIG5vbi1Ob25lLiAgSGFuZGxlcnMgd2l0aG91dCAuaHR0cF9vcGVuKCkgbmV2ZXIgZ2V0IGFueSBtZXRob2RzIGNhbGxlZAorICAgICAgICAjIG9uIHRoZW0uCisgICAgICAgICMgSW4gZmFjdCwgc2Vjb25kIG1vY2sgaGFuZGxlciBkZWZpbmluZyAuaHR0cF9vcGVuKCkgcmV0dXJucyBzZWxmCisgICAgICAgICMgKGluc3RlYWQgb2YgcmVzcG9uc2UpLCB3aGljaCBiZWNvbWVzIHRoZSBPcGVuZXJEaXJlY3RvcidzIHJldHVybgorICAgICAgICAjIHZhbHVlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIGhhbmRsZXJzWzJdKQorICAgICAgICBjYWxscyA9IFsoaGFuZGxlcnNbMF0sICJodHRwX29wZW4iKSwgKGhhbmRsZXJzWzJdLCAiaHR0cF9vcGVuIildCisgICAgICAgIGZvciBleHBlY3RlZCwgZ290IGluIHppcChjYWxscywgby5jYWxscyk6CisgICAgICAgICAgICBoYW5kbGVyLCBuYW1lLCBhcmdzLCBrd2RzID0gZ290CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChoYW5kbGVyLCBuYW1lKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIChyZXEsKSkKKworICAgIGRlZiB0ZXN0X2hhbmRsZXJfb3JkZXIoc2VsZik6CisgICAgICAgIG8gPSBPcGVuZXJEaXJlY3RvcigpCisgICAgICAgIGhhbmRsZXJzID0gW10KKyAgICAgICAgZm9yIG1ldGhzLCBoYW5kbGVyX29yZGVyIGluIFsKKyAgICAgICAgICAgIChbKCJodHRwX29wZW4iLCAicmV0dXJuIHNlbGYiKV0sIDUwMCksCisgICAgICAgICAgICAoWyJodHRwX29wZW4iXSwgMCksCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgY2xhc3MgTW9ja0hhbmRsZXJTdWJjbGFzcyhNb2NrSGFuZGxlcik6IHBhc3MKKyAgICAgICAgICAgIGggPSBNb2NrSGFuZGxlclN1YmNsYXNzKG1ldGhzKQorICAgICAgICAgICAgaC5oYW5kbGVyX29yZGVyID0gaGFuZGxlcl9vcmRlcgorICAgICAgICAgICAgaGFuZGxlcnMuYXBwZW5kKGgpCisgICAgICAgICAgICBvLmFkZF9oYW5kbGVyKGgpCisKKyAgICAgICAgciA9IG8ub3BlbigiaHR0cDovL2V4YW1wbGUuY29tLyIpCisgICAgICAgICMgaGFuZGxlcnMgY2FsbGVkIGluIHJldmVyc2Ugb3JkZXIsIHRoYW5rcyB0byB0aGVpciBzb3J0IG9yZGVyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5jYWxsc1swXVswXSwgaGFuZGxlcnNbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5jYWxsc1sxXVswXSwgaGFuZGxlcnNbMF0pCisKKyAgICBkZWYgdGVzdF9yYWlzZShzZWxmKToKKyAgICAgICAgIyByYWlzaW5nIFVSTEVycm9yIHN0b3BzIHByb2Nlc3Npbmcgb2YgcmVxdWVzdAorICAgICAgICBvID0gT3BlbmVyRGlyZWN0b3IoKQorICAgICAgICBtZXRoX3NwZWMgPSBbCisgICAgICAgICAgICBbKCJodHRwX29wZW4iLCAicmFpc2UiKV0sCisgICAgICAgICAgICBbKCJodHRwX29wZW4iLCAicmV0dXJuIHNlbGYiKV0sCisgICAgICAgICAgICBdCisgICAgICAgIGhhbmRsZXJzID0gYWRkX29yZGVyZWRfbW9ja19oYW5kbGVycyhvLCBtZXRoX3NwZWMpCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYjIuVVJMRXJyb3IsIG8ub3BlbiwgcmVxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8uY2FsbHMsIFsoaGFuZGxlcnNbMF0sICJodHRwX29wZW4iLCAocmVxLCksIHt9KV0pCisKKyMjICAgICBkZWYgdGVzdF9lcnJvcihzZWxmKToKKyMjICAgICAgICAgIyBYWFggdGhpcyBkb2Vzbid0IGFjdHVhbGx5IHNlZW0gdG8gYmUgdXNlZCBpbiBzdGFuZGFyZCBsaWJyYXJ5LAorIyMgICAgICAgICAjICBidXQgc2hvdWxkIHJlYWxseSBiZSB0ZXN0ZWQgYW55d2F5Li4uCisKKyAgICBkZWYgdGVzdF9odHRwX2Vycm9yKHNlbGYpOgorICAgICAgICAjIFhYWCBodHRwX2Vycm9yX2RlZmF1bHQKKyAgICAgICAgIyBodHRwIGVycm9ycyBhcmUgYSBzcGVjaWFsIGNhc2UKKyAgICAgICAgbyA9IE9wZW5lckRpcmVjdG9yKCkKKyAgICAgICAgbWV0aF9zcGVjID0gWworICAgICAgICAgICAgWygiaHR0cF9vcGVuIiwgImVycm9yIDMwMiIpXSwKKyAgICAgICAgICAgIFsoImh0dHBfZXJyb3JfNDAwIiwgInJhaXNlIiksICJodHRwX29wZW4iXSwKKyAgICAgICAgICAgIFsoImh0dHBfZXJyb3JfMzAyIiwgInJldHVybiByZXNwb25zZSIpLCAiaHR0cF9lcnJvcl8zMDMiLAorICAgICAgICAgICAgICJodHRwX2Vycm9yIl0sCisgICAgICAgICAgICBbKCJodHRwX2Vycm9yXzMwMiIpXSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgaGFuZGxlcnMgPSBhZGRfb3JkZXJlZF9tb2NrX2hhbmRsZXJzKG8sIG1ldGhfc3BlYykKKworICAgICAgICBjbGFzcyBVbmtub3duOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6IHJldHVybiBUcnVlCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tLyIpCisgICAgICAgIHIgPSBvLm9wZW4ocmVxKQorICAgICAgICBhc3NlcnQgbGVuKG8uY2FsbHMpID09IDIKKyAgICAgICAgY2FsbHMgPSBbKGhhbmRsZXJzWzBdLCAiaHR0cF9vcGVuIiwgKHJlcSwpKSwKKyAgICAgICAgICAgICAgICAgKGhhbmRsZXJzWzJdLCAiaHR0cF9lcnJvcl8zMDIiLAorICAgICAgICAgICAgICAgICAgKHJlcSwgVW5rbm93bigpLCAzMDIsICIiLCB7fSkpXQorICAgICAgICBmb3IgZXhwZWN0ZWQsIGdvdCBpbiB6aXAoY2FsbHMsIG8uY2FsbHMpOgorICAgICAgICAgICAgaGFuZGxlciwgbWV0aG9kX25hbWUsIGFyZ3MgPSBleHBlY3RlZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoaGFuZGxlciwgbWV0aG9kX25hbWUpLCBnb3RbOjJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBnb3RbMl0pCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzb3JzKHNlbGYpOgorICAgICAgICAjICpfcmVxdWVzdCAvICpfcmVzcG9uc2UgbWV0aG9kcyBnZXQgY2FsbGVkIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgbyA9IE9wZW5lckRpcmVjdG9yKCkKKyAgICAgICAgbWV0aF9zcGVjID0gWworICAgICAgICAgICAgWygiaHR0cF9yZXF1ZXN0IiwgInJldHVybiByZXF1ZXN0IiksCisgICAgICAgICAgICAgKCJodHRwX3Jlc3BvbnNlIiwgInJldHVybiByZXNwb25zZSIpXSwKKyAgICAgICAgICAgIFsoImh0dHBfcmVxdWVzdCIsICJyZXR1cm4gcmVxdWVzdCIpLAorICAgICAgICAgICAgICgiaHR0cF9yZXNwb25zZSIsICJyZXR1cm4gcmVzcG9uc2UiKV0sCisgICAgICAgICAgICBdCisgICAgICAgIGhhbmRsZXJzID0gYWRkX29yZGVyZWRfbW9ja19oYW5kbGVycyhvLCBtZXRoX3NwZWMpCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tLyIpCisgICAgICAgIHIgPSBvLm9wZW4ocmVxKQorICAgICAgICAjIHByb2Nlc3NvciBtZXRob2RzIGFyZSBjYWxsZWQgb24gKmFsbCogaGFuZGxlcnMgdGhhdCBkZWZpbmUgdGhlbSwKKyAgICAgICAgIyBub3QganVzdCB0aGUgZmlyc3QgaGFuZGxlciB0aGF0IGhhbmRsZXMgdGhlIHJlcXVlc3QKKyAgICAgICAgY2FsbHMgPSBbCisgICAgICAgICAgICAoaGFuZGxlcnNbMF0sICJodHRwX3JlcXVlc3QiKSwgKGhhbmRsZXJzWzFdLCAiaHR0cF9yZXF1ZXN0IiksCisgICAgICAgICAgICAoaGFuZGxlcnNbMF0sICJodHRwX3Jlc3BvbnNlIiksIChoYW5kbGVyc1sxXSwgImh0dHBfcmVzcG9uc2UiKV0KKworICAgICAgICBmb3IgaSwgKGhhbmRsZXIsIG5hbWUsIGFyZ3MsIGt3ZHMpIGluIGVudW1lcmF0ZShvLmNhbGxzKToKKyAgICAgICAgICAgIGlmIGkgPCAyOgorICAgICAgICAgICAgICAgICMgKl9yZXF1ZXN0CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoaGFuZGxlciwgbmFtZSksIGNhbGxzW2ldKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFyZ3MpLCAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhcmdzWzBdLCBSZXF1ZXN0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjICpfcmVzcG9uc2UKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChoYW5kbGVyLCBuYW1lKSwgY2FsbHNbaV0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYXJncyksIDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGFyZ3NbMF0sIFJlcXVlc3QpCisgICAgICAgICAgICAgICAgIyByZXNwb25zZSBmcm9tIG9wZW5lci5vcGVuIGlzIE5vbmUsIGJlY2F1c2UgdGhlcmUncyBubworICAgICAgICAgICAgICAgICMgaGFuZGxlciB0aGF0IGRlZmluZXMgaHR0cF9vcGVuIHRvIGhhbmRsZSBpdAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcmdzWzFdIGlzIE5vbmUgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShhcmdzWzFdLCBNb2NrUmVzcG9uc2UpKQorCisKK2RlZiBzYW5lcGF0aG5hbWUydXJsKHBhdGgpOgorICAgIGltcG9ydCB1cmxsaWIKKyAgICB1cmxwYXRoID0gdXJsbGliLnBhdGhuYW1lMnVybChwYXRoKQorICAgIGlmIG9zLm5hbWUgPT0gIm50IiBhbmQgdXJscGF0aC5zdGFydHN3aXRoKCIvLy8iKToKKyAgICAgICAgdXJscGF0aCA9IHVybHBhdGhbMjpdCisgICAgIyBYWFggZG9uJ3QgYXNrIG1lIGFib3V0IHRoZSBtYWMuLi4KKyAgICByZXR1cm4gdXJscGF0aAorCitjbGFzcyBIYW5kbGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZnRwKHNlbGYpOgorICAgICAgICBjbGFzcyBNb2NrRlRQV3JhcHBlcjoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKTogc2VsZi5kYXRhID0gZGF0YQorICAgICAgICAgICAgZGVmIHJldHJmaWxlKHNlbGYsIGZpbGVuYW1lLCBmaWxldHlwZSk6CisgICAgICAgICAgICAgICAgc2VsZi5maWxlbmFtZSwgc2VsZi5maWxldHlwZSA9IGZpbGVuYW1lLCBmaWxldHlwZQorICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmdJTy5TdHJpbmdJTyhzZWxmLmRhdGEpLCBsZW4oc2VsZi5kYXRhKQorICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOiBwYXNzCisKKyAgICAgICAgY2xhc3MgTnVsbEZUUEhhbmRsZXIodXJsbGliMi5GVFBIYW5kbGVyKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKTogc2VsZi5kYXRhID0gZGF0YQorICAgICAgICAgICAgZGVmIGNvbm5lY3RfZnRwKHNlbGYsIHVzZXIsIHBhc3N3ZCwgaG9zdCwgcG9ydCwgZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCk6CisgICAgICAgICAgICAgICAgc2VsZi51c2VyLCBzZWxmLnBhc3N3ZCA9IHVzZXIsIHBhc3N3ZAorICAgICAgICAgICAgICAgIHNlbGYuaG9zdCwgc2VsZi5wb3J0ID0gaG9zdCwgcG9ydAorICAgICAgICAgICAgICAgIHNlbGYuZGlycyA9IGRpcnMKKyAgICAgICAgICAgICAgICBzZWxmLmZ0cHdyYXBwZXIgPSBNb2NrRlRQV3JhcHBlcihzZWxmLmRhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZnRwd3JhcHBlcgorCisgICAgICAgIGltcG9ydCBmdHBsaWIKKyAgICAgICAgZGF0YSA9ICJyaGV1bSByaGFwb25pY3VtIgorICAgICAgICBoID0gTnVsbEZUUEhhbmRsZXIoZGF0YSkKKyAgICAgICAgbyA9IGgucGFyZW50ID0gTW9ja09wZW5lcigpCisKKyAgICAgICAgZm9yIHVybCwgaG9zdCwgcG9ydCwgdXNlciwgcGFzc3dkLCB0eXBlXywgZGlycywgZmlsZW5hbWUsIG1pbWV0eXBlIGluIFsKKyAgICAgICAgICAgICgiZnRwOi8vbG9jYWxob3N0L2Zvby9iYXIvYmF6Lmh0bWwiLAorICAgICAgICAgICAgICJsb2NhbGhvc3QiLCBmdHBsaWIuRlRQX1BPUlQsICIiLCAiIiwgIkkiLAorICAgICAgICAgICAgIFsiZm9vIiwgImJhciJdLCAiYmF6Lmh0bWwiLCAidGV4dC9odG1sIiksCisgICAgICAgICAgICAoImZ0cDovL3BhcnJvdEBsb2NhbGhvc3QvZm9vL2Jhci9iYXouaHRtbCIsCisgICAgICAgICAgICAgImxvY2FsaG9zdCIsIGZ0cGxpYi5GVFBfUE9SVCwgInBhcnJvdCIsICIiLCAiSSIsCisgICAgICAgICAgICAgWyJmb28iLCAiYmFyIl0sICJiYXouaHRtbCIsICJ0ZXh0L2h0bWwiKSwKKyAgICAgICAgICAgICgiZnRwOi8vJTI1cGFycm90QGxvY2FsaG9zdC9mb28vYmFyL2Jhei5odG1sIiwKKyAgICAgICAgICAgICAibG9jYWxob3N0IiwgZnRwbGliLkZUUF9QT1JULCAiJXBhcnJvdCIsICIiLCAiSSIsCisgICAgICAgICAgICAgWyJmb28iLCAiYmFyIl0sICJiYXouaHRtbCIsICJ0ZXh0L2h0bWwiKSwKKyAgICAgICAgICAgICgiZnRwOi8vJTI1NDJwYXJyb3RAbG9jYWxob3N0L2Zvby9iYXIvYmF6Lmh0bWwiLAorICAgICAgICAgICAgICJsb2NhbGhvc3QiLCBmdHBsaWIuRlRQX1BPUlQsICIlNDJwYXJyb3QiLCAiIiwgIkkiLAorICAgICAgICAgICAgIFsiZm9vIiwgImJhciJdLCAiYmF6Lmh0bWwiLCAidGV4dC9odG1sIiksCisgICAgICAgICAgICAoImZ0cDovL2xvY2FsaG9zdDo4MC9mb28vYmFyLyIsCisgICAgICAgICAgICAgImxvY2FsaG9zdCIsIDgwLCAiIiwgIiIsICJEIiwKKyAgICAgICAgICAgICBbImZvbyIsICJiYXIiXSwgIiIsIE5vbmUpLAorICAgICAgICAgICAgKCJmdHA6Ly9sb2NhbGhvc3QvYmF6LmdpZjt0eXBlPWEiLAorICAgICAgICAgICAgICJsb2NhbGhvc3QiLCBmdHBsaWIuRlRQX1BPUlQsICIiLCAiIiwgIkEiLAorICAgICAgICAgICAgIFtdLCAiYmF6LmdpZiIsIE5vbmUpLCAgIyBYWFggcmVhbGx5IHRoaXMgc2hvdWxkIGd1ZXNzIGltYWdlL2dpZgorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHJlcSA9IFJlcXVlc3QodXJsKQorICAgICAgICAgICAgcmVxLnRpbWVvdXQgPSBOb25lCisgICAgICAgICAgICByID0gaC5mdHBfb3BlbihyZXEpCisgICAgICAgICAgICAjIGZ0cCBhdXRoZW50aWNhdGlvbiBub3QgeWV0IGltcGxlbWVudGVkIGJ5IEZUUEhhbmRsZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC51c2VyLCB1c2VyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnBhc3N3ZCwgcGFzc3dkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhvc3QsIHNvY2tldC5nZXRob3N0YnluYW1lKGhvc3QpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnBvcnQsIHBvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZGlycywgZGlycykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5mdHB3cmFwcGVyLmZpbGVuYW1lLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5mdHB3cmFwcGVyLmZpbGV0eXBlLCB0eXBlXykKKyAgICAgICAgICAgIGhlYWRlcnMgPSByLmluZm8oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFkZXJzLmdldCgiQ29udGVudC10eXBlIiksIG1pbWV0eXBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoaGVhZGVyc1siQ29udGVudC1sZW5ndGgiXSksIGxlbihkYXRhKSkKKworICAgIGRlZiB0ZXN0X2ZpbGUoc2VsZik6CisgICAgICAgIGltcG9ydCByZmM4MjIsIHNvY2tldAorICAgICAgICBoID0gdXJsbGliMi5GaWxlSGFuZGxlcigpCisgICAgICAgIG8gPSBoLnBhcmVudCA9IE1vY2tPcGVuZXIoKQorCisgICAgICAgIFRFU1RGTiA9IHRlc3Rfc3VwcG9ydC5URVNURk4KKyAgICAgICAgdXJscGF0aCA9IHNhbmVwYXRobmFtZTJ1cmwob3MucGF0aC5hYnNwYXRoKFRFU1RGTikpCisgICAgICAgIHRvd3JpdGUgPSAiaGVsbG8sIHdvcmxkXG4iCisgICAgICAgIHVybHMgPSBbCisgICAgICAgICAgICAiZmlsZTovL2xvY2FsaG9zdCVzIiAlIHVybHBhdGgsCisgICAgICAgICAgICAiZmlsZTovLyVzIiAlIHVybHBhdGgsCisgICAgICAgICAgICAiZmlsZTovLyVzJXMiICUgKHNvY2tldC5nZXRob3N0YnluYW1lKCdsb2NhbGhvc3QnKSwgdXJscGF0aCksCisgICAgICAgICAgICBdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvY2FsYWRkciA9IHNvY2tldC5nZXRob3N0YnluYW1lKHNvY2tldC5nZXRob3N0bmFtZSgpKQorICAgICAgICBleGNlcHQgc29ja2V0LmdhaWVycm9yOgorICAgICAgICAgICAgbG9jYWxhZGRyID0gJycKKyAgICAgICAgaWYgbG9jYWxhZGRyOgorICAgICAgICAgICAgdXJscy5hcHBlbmQoImZpbGU6Ly8lcyVzIiAlIChsb2NhbGFkZHIsIHVybHBhdGgpKQorCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgIndiIikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUodG93cml0ZSkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgICAgIHIgPSBoLmZpbGVfb3BlbihSZXF1ZXN0KHVybCkpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gci5yZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVycyA9IHIuaW5mbygpCisgICAgICAgICAgICAgICAgICAgIHJlc3B1cmwgPSByLmdldHVybCgpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgci5jbG9zZSgpCisgICAgICAgICAgICAgICAgc3RhdHMgPSBvcy5zdGF0KFRFU1RGTikKKyAgICAgICAgICAgICAgICBtb2RpZmllZCA9IHJmYzgyMi5mb3JtYXRkYXRlKHN0YXRzLnN0X210aW1lKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCB0b3dyaXRlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFkZXJzWyJDb250ZW50LXR5cGUiXSwgInRleHQvcGxhaW4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFkZXJzWyJDb250ZW50LWxlbmd0aCJdLCAiMTMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFkZXJzWyJMYXN0LW1vZGlmaWVkIl0sIG1vZGlmaWVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwdXJsLCB1cmwpCisKKyAgICAgICAgZm9yIHVybCBpbiBbCisgICAgICAgICAgICAiZmlsZTovL2xvY2FsaG9zdDo4MCVzIiAlIHVybHBhdGgsCisgICAgICAgICAgICAiZmlsZTovLy9maWxlX2RvZXNfbm90X2V4aXN0LnR4dCIsCisgICAgICAgICAgICAiZmlsZTovLyVzOjgwJXMvJXMiICUgKHNvY2tldC5nZXRob3N0YnluYW1lKCdsb2NhbGhvc3QnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZ2V0Y3dkKCksIFRFU1RGTiksCisgICAgICAgICAgICAiZmlsZTovL3NvbWVyYW5kb21ob3N0Lm9udGhlaW50ZXJuZXQuY29tJXMvJXMiICUKKyAgICAgICAgICAgIChvcy5nZXRjd2QoKSwgVEVTVEZOKSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAid2IiKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSh0b3dyaXRlKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModXJsbGliMi5VUkxFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLmZpbGVfb3BlbiwgUmVxdWVzdCh1cmwpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQorCisgICAgICAgIGggPSB1cmxsaWIyLkZpbGVIYW5kbGVyKCkKKyAgICAgICAgbyA9IGgucGFyZW50ID0gTW9ja09wZW5lcigpCisgICAgICAgICMgWFhYWCB3aHkgZG9lcyAvLyBtZWFuIGZ0cCAoYW5kIC8vLyBtZWFuIG5vdCBmdHAhKSwgYW5kIHdoZXJlCisgICAgICAgICMgIGlzIGZpbGU6IHNjaGVtZSBzcGVjaWZpZWQ/ICBJIHRoaW5rIHRoaXMgaXMgcmVhbGx5IGEgYnVnLCBhbmQKKyAgICAgICAgIyAgd2hhdCB3YXMgaW50ZW5kZWQgd2FzIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gVVJMcyBsaWtlOgorICAgICAgICAjIGZpbGU6L2JsYWgudHh0IChhIGZpbGUpCisgICAgICAgICMgZmlsZTovL2xvY2FsaG9zdC9ibGFoLnR4dCAoYSBmaWxlKQorICAgICAgICAjIGZpbGU6Ly8vYmxhaC50eHQgKGEgZmlsZSkKKyAgICAgICAgIyBmaWxlOi8vZnRwLmV4YW1wbGUuY29tL2JsYWgudHh0IChhbiBmdHAgVVJMKQorICAgICAgICBmb3IgdXJsLCBmdHAgaW4gWworICAgICAgICAgICAgKCJmaWxlOi8vZnRwLmV4YW1wbGUuY29tLy9mb28udHh0IiwgVHJ1ZSksCisgICAgICAgICAgICAoImZpbGU6Ly9mdHAuZXhhbXBsZS5jb20vLy9mb28udHh0IiwgRmFsc2UpLAorIyBYWFhYIGJ1ZzogZmFpbHMgd2l0aCBPU0Vycm9yLCBzaG91bGQgYmUgVVJMRXJyb3IKKyAgICAgICAgICAgICgiZmlsZTovL2Z0cC5leGFtcGxlLmNvbS9mb28udHh0IiwgRmFsc2UpLAorICAgICAgICAgICAgKCJmaWxlOi8vc29tZWhvc3QvL2Zvby9zb21ldGhpbmcudHh0IiwgVHJ1ZSksCisgICAgICAgICAgICAoImZpbGU6Ly9sb2NhbGhvc3QvL2Zvby9zb21ldGhpbmcudHh0IiwgRmFsc2UpLAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHJlcSA9IFJlcXVlc3QodXJsKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGguZmlsZV9vcGVuKHJlcSkKKyAgICAgICAgICAgICMgWFhYWCByZW1vdmUgT1NFcnJvciB3aGVuIGJ1ZyBmaXhlZAorICAgICAgICAgICAgZXhjZXB0ICh1cmxsaWIyLlVSTEVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZ0cCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG8ucmVxIGlzIHJlcSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS50eXBlLCAiZnRwIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLnR5cGUgPT0gImZ0cCIsIGZ0cCkKKworICAgIGRlZiB0ZXN0X2h0dHAoc2VsZik6CisKKyAgICAgICAgaCA9IHVybGxpYjIuQWJzdHJhY3RIVFRQSGFuZGxlcigpCisgICAgICAgIG8gPSBoLnBhcmVudCA9IE1vY2tPcGVuZXIoKQorCisgICAgICAgIHVybCA9ICJodHRwOi8vZXhhbXBsZS5jb20vIgorICAgICAgICBmb3IgbWV0aG9kLCBkYXRhIGluIFsoIkdFVCIsIE5vbmUpLCAoIlBPU1QiLCAiYmxhaCIpXToKKyAgICAgICAgICAgIHJlcSA9IFJlcXVlc3QodXJsLCBkYXRhLCB7IkZvbyI6ICJiYXIifSkKKyAgICAgICAgICAgIHJlcS50aW1lb3V0ID0gTm9uZQorICAgICAgICAgICAgcmVxLmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVyKCJTcGFtIiwgImVnZ3MiKQorICAgICAgICAgICAgaHR0cCA9IE1vY2tIVFRQQ2xhc3MoKQorICAgICAgICAgICAgciA9IGguZG9fb3BlbihodHRwLCByZXEpCisKKyAgICAgICAgICAgICMgcmVzdWx0IGF0dHJpYnV0ZXMKKyAgICAgICAgICAgIHIucmVhZDsgci5yZWFkbGluZSAgIyB3cmFwcGVkIE1vY2tGaWxlIG1ldGhvZHMKKyAgICAgICAgICAgIHIuaW5mbzsgci5nZXR1cmwgICMgYWRkaW5mb3VybCBtZXRob2RzCisgICAgICAgICAgICByLmNvZGUsIHIubXNnID09IDIwMCwgIk9LIiAgIyBhZGRlZCBmcm9tIE1vY2tIVFRQQ2xhc3MuZ2V0cmVwbHkoKQorICAgICAgICAgICAgaGRycyA9IHIuaW5mbygpCisgICAgICAgICAgICBoZHJzLmdldDsgaGRycy5oYXNfa2V5ICAjIHIuaW5mbygpIGdpdmVzIGRpY3QgZnJvbSAuZ2V0cmVwbHkoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmdldHVybCgpLCB1cmwpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHR0cC5ob3N0LCAiZXhhbXBsZS5jb20iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodHRwLmxldmVsLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodHRwLm1ldGhvZCwgbWV0aG9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodHRwLnNlbGVjdG9yLCAiLyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0dHAucmVxX2hlYWRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoIkNvbm5lY3Rpb24iLCAiY2xvc2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiRm9vIiwgImJhciIpLCAoIlNwYW0iLCAiZWdncyIpXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHR0cC5kYXRhLCBkYXRhKQorCisgICAgICAgICMgY2hlY2sgc29ja2V0LmVycm9yIGNvbnZlcnRlZCB0byBVUkxFcnJvcgorICAgICAgICBodHRwLnJhaXNlX29uX2VuZGhlYWRlcnMgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYjIuVVJMRXJyb3IsIGguZG9fb3BlbiwgaHR0cCwgcmVxKQorCisgICAgICAgICMgY2hlY2sgYWRkaW5nIG9mIHN0YW5kYXJkIGhlYWRlcnMKKyAgICAgICAgby5hZGRoZWFkZXJzID0gWygiU3BhbSIsICJlZ2dzIildCisgICAgICAgIGZvciBkYXRhIGluICIiLCBOb25lOiAgIyBQT1NULCBHRVQKKyAgICAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly9leGFtcGxlLmNvbS8iLCBkYXRhKQorICAgICAgICAgICAgciA9IE1vY2tSZXNwb25zZSgyMDAsICJPSyIsIHt9LCAiIikKKyAgICAgICAgICAgIG5ld3JlcSA9IGguZG9fcmVxdWVzdF8ocmVxKQorICAgICAgICAgICAgaWYgZGF0YSBpcyBOb25lOiAgIyBHRVQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJDb250ZW50LWxlbmd0aCIsIHJlcS51bnJlZGlyZWN0ZWRfaGRycykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJDb250ZW50LXR5cGUiLCByZXEudW5yZWRpcmVjdGVkX2hkcnMpCisgICAgICAgICAgICBlbHNlOiAgIyBQT1NUCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEudW5yZWRpcmVjdGVkX2hkcnNbIkNvbnRlbnQtbGVuZ3RoIl0sICIwIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS51bnJlZGlyZWN0ZWRfaGRyc1siQ29udGVudC10eXBlIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKQorICAgICAgICAgICAgIyBYWFggdGhlIGRldGFpbHMgb2YgSG9zdCBjb3VsZCBiZSBiZXR0ZXIgdGVzdGVkCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS51bnJlZGlyZWN0ZWRfaGRyc1siSG9zdCJdLCAiZXhhbXBsZS5jb20iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEudW5yZWRpcmVjdGVkX2hkcnNbIlNwYW0iXSwgImVnZ3MiKQorCisgICAgICAgICAgICAjIGRvbid0IGNsb2JiZXIgZXhpc3RpbmcgaGVhZGVycworICAgICAgICAgICAgcmVxLmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIsICJmb28iKQorICAgICAgICAgICAgcmVxLmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVyKCJDb250ZW50LXR5cGUiLCAiYmFyIikKKyAgICAgICAgICAgIHJlcS5hZGRfdW5yZWRpcmVjdGVkX2hlYWRlcigiSG9zdCIsICJiYXoiKQorICAgICAgICAgICAgcmVxLmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVyKCJTcGFtIiwgImZvbyIpCisgICAgICAgICAgICBuZXdyZXEgPSBoLmRvX3JlcXVlc3RfKHJlcSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLnVucmVkaXJlY3RlZF9oZHJzWyJDb250ZW50LWxlbmd0aCJdLCAiZm9vIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLnVucmVkaXJlY3RlZF9oZHJzWyJDb250ZW50LXR5cGUiXSwgImJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS51bnJlZGlyZWN0ZWRfaGRyc1siSG9zdCJdLCAiYmF6IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLnVucmVkaXJlY3RlZF9oZHJzWyJTcGFtIl0sICJmb28iKQorCisgICAgZGVmIHRlc3RfaHR0cF9kb3VibGVzbGFzaChzZWxmKToKKyAgICAgICAgIyBDaGVja3MgdGhhdCB0aGUgcHJlc2VuY2Ugb2YgYW4gdW5uZWNlc3NhcnkgZG91YmxlIHNsYXNoIGluIGEgdXJsIGRvZXNuJ3QgYnJlYWsgYW55dGhpbmcKKyAgICAgICAgIyBQcmV2aW91c2x5LCBhIGRvdWJsZSBzbGFzaCBkaXJlY3RseSBhZnRlciB0aGUgaG9zdCBjb3VsZCBjYXVzZSBpbmNvcnJlY3QgcGFyc2luZyBvZiB0aGUgdXJsCisgICAgICAgIGggPSB1cmxsaWIyLkFic3RyYWN0SFRUUEhhbmRsZXIoKQorICAgICAgICBvID0gaC5wYXJlbnQgPSBNb2NrT3BlbmVyKCkKKworICAgICAgICBkYXRhID0gIiIKKyAgICAgICAgZHNfdXJscyA9IFsKKyAgICAgICAgICAgICJodHRwOi8vZXhhbXBsZS5jb20vZm9vL2Jhci9iYXouaHRtbCIsCisgICAgICAgICAgICAiaHR0cDovL2V4YW1wbGUuY29tLy9mb28vYmFyL2Jhei5odG1sIiwKKyAgICAgICAgICAgICJodHRwOi8vZXhhbXBsZS5jb20vZm9vLy9iYXIvYmF6Lmh0bWwiLAorICAgICAgICAgICAgImh0dHA6Ly9leGFtcGxlLmNvbS9mb28vYmFyLy9iYXouaHRtbCIsCisgICAgICAgIF0KKworICAgICAgICBmb3IgZHNfdXJsIGluIGRzX3VybHM6CisgICAgICAgICAgICBkc19yZXEgPSBSZXF1ZXN0KGRzX3VybCwgZGF0YSkKKworICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVyIGhvc3QgaXMgZGV0ZXJtaW5lZCBjb3JyZWN0bHkgaWYgdGhlcmUgaXMgbm8gcHJveHkKKyAgICAgICAgICAgIG5wX2RzX3JlcSA9IGguZG9fcmVxdWVzdF8oZHNfcmVxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucF9kc19yZXEudW5yZWRpcmVjdGVkX2hkcnNbIkhvc3QiXSwiZXhhbXBsZS5jb20iKQorCisgICAgICAgICAgICAjIENoZWNrIHdoZXRoZXIgaG9zdCBpcyBkZXRlcm1pbmVkIGNvcnJlY3RseSBpZiB0aGVyZSBpcyBhIHByb3h5CisgICAgICAgICAgICBkc19yZXEuc2V0X3Byb3h5KCJzb21lcHJveHk6MzEyOCIsTm9uZSkKKyAgICAgICAgICAgIHBfZHNfcmVxID0gaC5kb19yZXF1ZXN0Xyhkc19yZXEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBfZHNfcmVxLnVucmVkaXJlY3RlZF9oZHJzWyJIb3N0Il0sImV4YW1wbGUuY29tIikKKworICAgIGRlZiB0ZXN0X2ZpeHBhdGhfaW5fd2VpcmR1cmxzKHNlbGYpOgorICAgICAgICAjIElzc3VlNDQ5MzogdXJsbGliMiB0byBzdXBwbHkgJy8nIHdoZW4gdG8gdXJscyB3aGVyZSBwYXRoIGRvZXMgbm90CisgICAgICAgICMgc3RhcnQgd2l0aCcvJworCisgICAgICAgIGggPSB1cmxsaWIyLkFic3RyYWN0SFRUUEhhbmRsZXIoKQorICAgICAgICBvID0gaC5wYXJlbnQgPSBNb2NrT3BlbmVyKCkKKworICAgICAgICB3ZWlyZF91cmwgPSAnaHR0cDovL3d3dy5weXRob24ub3JnP2dldHNwYW0nCisgICAgICAgIHJlcSA9IFJlcXVlc3Qod2VpcmRfdXJsKQorICAgICAgICBuZXdyZXEgPSBoLmRvX3JlcXVlc3RfKHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdyZXEuZ2V0X2hvc3QoKSwnd3d3LnB5dGhvbi5vcmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld3JlcS5nZXRfc2VsZWN0b3IoKSwnLz9nZXRzcGFtJykKKworICAgICAgICB1cmxfd2l0aG91dF9wYXRoID0gJ2h0dHA6Ly93d3cucHl0aG9uLm9yZycKKyAgICAgICAgcmVxID0gUmVxdWVzdCh1cmxfd2l0aG91dF9wYXRoKQorICAgICAgICBuZXdyZXEgPSBoLmRvX3JlcXVlc3RfKHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdyZXEuZ2V0X2hvc3QoKSwnd3d3LnB5dGhvbi5vcmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld3JlcS5nZXRfc2VsZWN0b3IoKSwnJykKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgaCA9IHVybGxpYjIuSFRUUEVycm9yUHJvY2Vzc29yKCkKKyAgICAgICAgbyA9IGgucGFyZW50ID0gTW9ja09wZW5lcigpCisKKyAgICAgICAgdXJsID0gImh0dHA6Ly9leGFtcGxlLmNvbS8iCisgICAgICAgIHJlcSA9IFJlcXVlc3QodXJsKQorICAgICAgICAjIGFsbCAyeHggYXJlIHBhc3NlZCB0aHJvdWdoCisgICAgICAgIHIgPSBNb2NrUmVzcG9uc2UoMjAwLCAiT0siLCB7fSwgIiIsIHVybCkKKyAgICAgICAgbmV3ciA9IGguaHR0cF9yZXNwb25zZShyZXEsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyIGlzIG5ld3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihvLCAicHJvdG8iKSkgICMgby5lcnJvciBub3QgY2FsbGVkCisgICAgICAgIHIgPSBNb2NrUmVzcG9uc2UoMjAyLCAiQWNjZXB0ZWQiLCB7fSwgIiIsIHVybCkKKyAgICAgICAgbmV3ciA9IGguaHR0cF9yZXNwb25zZShyZXEsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyIGlzIG5ld3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihvLCAicHJvdG8iKSkgICMgby5lcnJvciBub3QgY2FsbGVkCisgICAgICAgIHIgPSBNb2NrUmVzcG9uc2UoMjA2LCAiUGFydGlhbCBjb250ZW50Iiwge30sICIiLCB1cmwpCisgICAgICAgIG5ld3IgPSBoLmh0dHBfcmVzcG9uc2UocmVxLCByKQorICAgICAgICBzZWxmLmFzc2VydFRydWUociBpcyBuZXdyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIobywgInByb3RvIikpICAjIG8uZXJyb3Igbm90IGNhbGxlZAorICAgICAgICAjIGFueXRoaW5nIGVsc2UgY2FsbHMgby5lcnJvciAoYW5kIE1vY2tPcGVuZXIgcmV0dXJucyBOb25lLCBoZXJlKQorICAgICAgICByID0gTW9ja1Jlc3BvbnNlKDUwMiwgIkJhZCBnYXRld2F5Iiwge30sICIiLCB1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoLmh0dHBfcmVzcG9uc2UocmVxLCByKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG8ucHJvdG8sICJodHRwIikgICMgby5lcnJvciBjYWxsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLmFyZ3MsIChyZXEsIHIsIDUwMiwgIkJhZCBnYXRld2F5Iiwge30pKQorCisgICAgZGVmIHRlc3RfY29va2llcyhzZWxmKToKKyAgICAgICAgY2ogPSBNb2NrQ29va2llSmFyKCkKKyAgICAgICAgaCA9IHVybGxpYjIuSFRUUENvb2tpZVByb2Nlc3NvcihjaikKKyAgICAgICAgbyA9IGgucGFyZW50ID0gTW9ja09wZW5lcigpCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tLyIpCisgICAgICAgIHIgPSBNb2NrUmVzcG9uc2UoMjAwLCAiT0siLCB7fSwgIiIpCisgICAgICAgIG5ld3JlcSA9IGguaHR0cF9yZXF1ZXN0KHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNqLmFjaF9yZXEgaXMgcmVxIGlzIG5ld3JlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X29yaWdpbl9yZXFfaG9zdCgpLCAiZXhhbXBsZS5jb20iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHJlcS5pc191bnZlcmlmaWFibGUoKSkKKyAgICAgICAgbmV3ciA9IGguaHR0cF9yZXNwb25zZShyZXEsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjai5lY19yZXEgaXMgcmVxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2ouZWNfciBpcyByIGlzIG5ld3IpCisKKyAgICBkZWYgdGVzdF9yZWRpcmVjdChzZWxmKToKKyAgICAgICAgZnJvbV91cmwgPSAiaHR0cDovL2V4YW1wbGUuY29tL2EuaHRtbCIKKyAgICAgICAgdG9fdXJsID0gImh0dHA6Ly9leGFtcGxlLmNvbS9iLmh0bWwiCisgICAgICAgIGggPSB1cmxsaWIyLkhUVFBSZWRpcmVjdEhhbmRsZXIoKQorICAgICAgICBvID0gaC5wYXJlbnQgPSBNb2NrT3BlbmVyKCkKKworICAgICAgICAjIG9yZGluYXJ5IHJlZGlyZWN0IGJlaGF2aW91cgorICAgICAgICBmb3IgY29kZSBpbiAzMDEsIDMwMiwgMzAzLCAzMDc6CisgICAgICAgICAgICBmb3IgZGF0YSBpbiBOb25lLCAiYmxhaFxuYmxhaFxuIjoKKyAgICAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKGgsICJodHRwX2Vycm9yXyVzIiAlIGNvZGUpCisgICAgICAgICAgICAgICAgcmVxID0gUmVxdWVzdChmcm9tX3VybCwgZGF0YSkKKyAgICAgICAgICAgICAgICByZXEuYWRkX2hlYWRlcigiTm9uc2Vuc2UiLCAidmlraW5nPXdpdGhob2xkIikKKyAgICAgICAgICAgICAgICByZXEudGltZW91dCA9IHNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVAorICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJlcS5hZGRfaGVhZGVyKCJDb250ZW50LUxlbmd0aCIsIHN0cihsZW4oZGF0YSkpKQorICAgICAgICAgICAgICAgIHJlcS5hZGRfdW5yZWRpcmVjdGVkX2hlYWRlcigiU3BhbSIsICJzcGFtIikKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG1ldGhvZChyZXEsIE1vY2tGaWxlKCksIGNvZGUsICJCbGFoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vY2tIZWFkZXJzKHsibG9jYXRpb24iOiB0b191cmx9KSkKKyAgICAgICAgICAgICAgICBleGNlcHQgdXJsbGliMi5IVFRQRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgMzA3IGluIHJlc3BvbnNlIHRvIFBPU1QgcmVxdWlyZXMgdXNlciBPSworICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29kZSA9PSAzMDcgYW5kIGRhdGEgaXMgbm90IE5vbmUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLnJlcS5nZXRfZnVsbF91cmwoKSwgdG9fdXJsKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLnJlcS5nZXRfbWV0aG9kKCksICJHRVQiKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvLnJlcS5oYXNfZGF0YSgpKQorCisgICAgICAgICAgICAgICAgIyBub3cgaXQncyBhIEdFVCwgdGhlcmUgc2hvdWxkIG5vdCBiZSBoZWFkZXJzIHJlZ2FyZGluZyBjb250ZW50CisgICAgICAgICAgICAgICAgIyAocG9zc2libHkgZHJhZ2dlZCBmcm9tIGJlZm9yZSBiZWluZyBhIFBPU1QpCisgICAgICAgICAgICAgICAgaGVhZGVycyA9IFt4Lmxvd2VyKCkgZm9yIHggaW4gby5yZXEuaGVhZGVyc10KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJjb250ZW50LWxlbmd0aCIsIGhlYWRlcnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiY29udGVudC10eXBlIiwgaGVhZGVycykKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5yZXEuaGVhZGVyc1siTm9uc2Vuc2UiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2aWtpbmc9d2l0aGhvbGQiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlNwYW0iLCBvLnJlcS5oZWFkZXJzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlNwYW0iLCBvLnJlcS51bnJlZGlyZWN0ZWRfaGRycykKKworICAgICAgICAjIGxvb3AgZGV0ZWN0aW9uCisgICAgICAgIHJlcSA9IFJlcXVlc3QoZnJvbV91cmwpCisgICAgICAgIHJlcS50aW1lb3V0ID0gc29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUCisgICAgICAgIGRlZiByZWRpcmVjdChoLCByZXEsIHVybD10b191cmwpOgorICAgICAgICAgICAgaC5odHRwX2Vycm9yXzMwMihyZXEsIE1vY2tGaWxlKCksIDMwMiwgIkJsYWgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2NrSGVhZGVycyh7ImxvY2F0aW9uIjogdXJsfSkpCisgICAgICAgICMgTm90ZSB0aGF0IHRoZSAqb3JpZ2luYWwqIHJlcXVlc3Qgc2hhcmVzIHRoZSBzYW1lIHJlY29yZCBvZgorICAgICAgICAjIHJlZGlyZWN0aW9ucyB3aXRoIHRoZSBzdWItcmVxdWVzdHMgY2F1c2VkIGJ5IHRoZSByZWRpcmVjdGlvbnMuCisKKyAgICAgICAgIyBkZXRlY3QgaW5maW5pdGUgbG9vcCByZWRpcmVjdCBvZiBhIFVSTCB0byBpdHNlbGYKKyAgICAgICAgcmVxID0gUmVxdWVzdChmcm9tX3VybCwgb3JpZ2luX3JlcV9ob3N0PSJleGFtcGxlLmNvbSIpCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICByZXEudGltZW91dCA9IHNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVAorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHJlZGlyZWN0KGgsIHJlcSwgImh0dHA6Ly9leGFtcGxlLmNvbS8iKQorICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxCisgICAgICAgIGV4Y2VwdCB1cmxsaWIyLkhUVFBFcnJvcjoKKyAgICAgICAgICAgICMgZG9uJ3Qgc3RvcCB1bnRpbCBtYXhfcmVwZWF0cywgYmVjYXVzZSBjb29raWVzIG1heSBpbnRyb2R1Y2Ugc3RhdGUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnQsIHVybGxpYjIuSFRUUFJlZGlyZWN0SGFuZGxlci5tYXhfcmVwZWF0cykKKworICAgICAgICAjIGRldGVjdCBlbmRsZXNzIG5vbi1yZXBlYXRpbmcgY2hhaW4gb2YgcmVkaXJlY3RzCisgICAgICAgIHJlcSA9IFJlcXVlc3QoZnJvbV91cmwsIG9yaWdpbl9yZXFfaG9zdD0iZXhhbXBsZS5jb20iKQorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgcmVxLnRpbWVvdXQgPSBzb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICByZWRpcmVjdChoLCByZXEsICJodHRwOi8vZXhhbXBsZS5jb20vJWQiICUgY291bnQpCisgICAgICAgICAgICAgICAgY291bnQgPSBjb3VudCArIDEKKyAgICAgICAgZXhjZXB0IHVybGxpYjIuSFRUUEVycm9yOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsbGliMi5IVFRQUmVkaXJlY3RIYW5kbGVyLm1heF9yZWRpcmVjdGlvbnMpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX3JlZGlyZWN0KHNlbGYpOgorICAgICAgICBmcm9tX3VybCA9ICJodHRwOi8vZXhhbXBsZS5jb20vYS5odG1sIgorICAgICAgICB2YWxpZF9zY2hlbWVzID0gWydodHRwJywgJ2h0dHBzJywgJ2Z0cCddCisgICAgICAgIGludmFsaWRfc2NoZW1lcyA9IFsnZmlsZScsICdpbWFwJywgJ2xkYXAnXQorICAgICAgICBzY2hlbWVsZXNzX3VybCA9ICJleGFtcGxlLmNvbS9iLmh0bWwiCisgICAgICAgIGggPSB1cmxsaWIyLkhUVFBSZWRpcmVjdEhhbmRsZXIoKQorICAgICAgICBvID0gaC5wYXJlbnQgPSBNb2NrT3BlbmVyKCkKKyAgICAgICAgcmVxID0gUmVxdWVzdChmcm9tX3VybCkKKyAgICAgICAgcmVxLnRpbWVvdXQgPSBzb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQKKworICAgICAgICBmb3Igc2NoZW1lIGluIGludmFsaWRfc2NoZW1lczoKKyAgICAgICAgICAgIGludmFsaWRfdXJsID0gc2NoZW1lICsgJzovLycgKyBzY2hlbWVsZXNzX3VybAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModXJsbGliMi5IVFRQRXJyb3IsIGguaHR0cF9lcnJvcl8zMDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEsIE1vY2tGaWxlKCksIDMwMiwgIlNlY3VyaXR5IExvb3Bob2xlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vY2tIZWFkZXJzKHsibG9jYXRpb24iOiBpbnZhbGlkX3VybH0pKQorCisgICAgICAgIGZvciBzY2hlbWUgaW4gdmFsaWRfc2NoZW1lczoKKyAgICAgICAgICAgIHZhbGlkX3VybCA9IHNjaGVtZSArICc6Ly8nICsgc2NoZW1lbGVzc191cmwKKyAgICAgICAgICAgIGguaHR0cF9lcnJvcl8zMDIocmVxLCBNb2NrRmlsZSgpLCAzMDIsICJUaGF0J3MgZmluZSIsCisgICAgICAgICAgICAgICAgTW9ja0hlYWRlcnMoeyJsb2NhdGlvbiI6IHZhbGlkX3VybH0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvLnJlcS5nZXRfZnVsbF91cmwoKSwgdmFsaWRfdXJsKQorCisgICAgZGVmIHRlc3RfY29va2llX3JlZGlyZWN0KHNlbGYpOgorICAgICAgICAjIGNvb2tpZXMgc2hvdWxkbid0IGxlYWsgaW50byByZWRpcmVjdGVkIHJlcXVlc3RzCisgICAgICAgIGZyb20gY29va2llbGliIGltcG9ydCBDb29raWVKYXIKKworICAgICAgICBmcm9tIHRlc3QudGVzdF9jb29raWVsaWIgaW1wb3J0IGludGVyYWN0X25ldHNjYXBlCisKKyAgICAgICAgY2ogPSBDb29raWVKYXIoKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjaiwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIiwgInNwYW09ZWdncyIpCisgICAgICAgIGhoID0gTW9ja0hUVFBIYW5kbGVyKDMwMiwgIkxvY2F0aW9uOiBodHRwOi8vd3d3LmNyYWNrZXIuY29tL1xyXG5cclxuIikKKyAgICAgICAgaGRlaCA9IHVybGxpYjIuSFRUUERlZmF1bHRFcnJvckhhbmRsZXIoKQorICAgICAgICBocmggPSB1cmxsaWIyLkhUVFBSZWRpcmVjdEhhbmRsZXIoKQorICAgICAgICBjcCA9IHVybGxpYjIuSFRUUENvb2tpZVByb2Nlc3NvcihjaikKKyAgICAgICAgbyA9IGJ1aWxkX3Rlc3Rfb3BlbmVyKGhoLCBoZGVoLCBocmgsIGNwKQorICAgICAgICBvLm9wZW4oImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoaC5yZXEuaGFzX2hlYWRlcigiQ29va2llIikpCisKKyAgICBkZWYgdGVzdF9yZWRpcmVjdF9mcmFnbWVudChzZWxmKToKKyAgICAgICAgcmVkaXJlY3RlZF91cmwgPSAnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbmRleC5odG1sI09LXHJcblxyXG4nCisgICAgICAgIGhoID0gTW9ja0hUVFBIYW5kbGVyKDMwMiwgJ0xvY2F0aW9uOiAnICsgcmVkaXJlY3RlZF91cmwpCisgICAgICAgIGhkZWggPSB1cmxsaWIyLkhUVFBEZWZhdWx0RXJyb3JIYW5kbGVyKCkKKyAgICAgICAgaHJoID0gdXJsbGliMi5IVFRQUmVkaXJlY3RIYW5kbGVyKCkKKyAgICAgICAgbyA9IGJ1aWxkX3Rlc3Rfb3BlbmVyKGhoLCBoZGVoLCBocmgpCisgICAgICAgIGZwID0gby5vcGVuKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5nZXR1cmwoKSwgcmVkaXJlY3RlZF91cmwuc3RyaXAoKSkKKworICAgIGRlZiB0ZXN0X3Byb3h5KHNlbGYpOgorICAgICAgICBvID0gT3BlbmVyRGlyZWN0b3IoKQorICAgICAgICBwaCA9IHVybGxpYjIuUHJveHlIYW5kbGVyKGRpY3QoaHR0cD0icHJveHkuZXhhbXBsZS5jb206MzEyOCIpKQorICAgICAgICBvLmFkZF9oYW5kbGVyKHBoKQorICAgICAgICBtZXRoX3NwZWMgPSBbCisgICAgICAgICAgICBbKCJodHRwX29wZW4iLCAicmV0dXJuIHJlc3BvbnNlIildCisgICAgICAgICAgICBdCisgICAgICAgIGhhbmRsZXJzID0gYWRkX29yZGVyZWRfbW9ja19oYW5kbGVycyhvLCBtZXRoX3NwZWMpCisKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL2FjbWUuZXhhbXBsZS5jb20vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hvc3QoKSwgImFjbWUuZXhhbXBsZS5jb20iKQorICAgICAgICByID0gby5vcGVuKHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hvc3QoKSwgInByb3h5LmV4YW1wbGUuY29tOjMxMjgiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyhoYW5kbGVyc1swXSwgImh0dHBfb3BlbiIpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbdHVwWzA6Ml0gZm9yIHR1cCBpbiBvLmNhbGxzXSkKKworICAgIGRlZiB0ZXN0X3Byb3h5X25vX3Byb3h5KHNlbGYpOgorICAgICAgICBvcy5lbnZpcm9uWydub19wcm94eSddID0gJ3B5dGhvbi5vcmcnCisgICAgICAgIG8gPSBPcGVuZXJEaXJlY3RvcigpCisgICAgICAgIHBoID0gdXJsbGliMi5Qcm94eUhhbmRsZXIoZGljdChodHRwPSJwcm94eS5leGFtcGxlLmNvbSIpKQorICAgICAgICBvLmFkZF9oYW5kbGVyKHBoKQorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnBlcmwub3JnLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9ob3N0KCksICJ3d3cucGVybC5vcmciKQorICAgICAgICByID0gby5vcGVuKHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hvc3QoKSwgInByb3h5LmV4YW1wbGUuY29tIikKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hvc3QoKSwgInd3dy5weXRob24ub3JnIikKKyAgICAgICAgciA9IG8ub3BlbihyZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9ob3N0KCksICJ3d3cucHl0aG9uLm9yZyIpCisgICAgICAgIGRlbCBvcy5lbnZpcm9uWydub19wcm94eSddCisKKworICAgIGRlZiB0ZXN0X3Byb3h5X2h0dHBzKHNlbGYpOgorICAgICAgICBvID0gT3BlbmVyRGlyZWN0b3IoKQorICAgICAgICBwaCA9IHVybGxpYjIuUHJveHlIYW5kbGVyKGRpY3QoaHR0cHM9J3Byb3h5LmV4YW1wbGUuY29tOjMxMjgnKSkKKyAgICAgICAgby5hZGRfaGFuZGxlcihwaCkKKyAgICAgICAgbWV0aF9zcGVjID0gWworICAgICAgICAgICAgWygiaHR0cHNfb3BlbiIsInJldHVybiByZXNwb25zZSIpXQorICAgICAgICBdCisgICAgICAgIGhhbmRsZXJzID0gYWRkX29yZGVyZWRfbW9ja19oYW5kbGVycyhvLCBtZXRoX3NwZWMpCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHBzOi8vd3d3LmV4YW1wbGUuY29tLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9ob3N0KCksICJ3d3cuZXhhbXBsZS5jb20iKQorICAgICAgICByID0gby5vcGVuKHJlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hvc3QoKSwgInByb3h5LmV4YW1wbGUuY29tOjMxMjgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoaGFuZGxlcnNbMF0sICJodHRwc19vcGVuIildLAorICAgICAgICAgICAgICAgICAgICAgICAgIFt0dXBbMDoyXSBmb3IgdHVwIGluIG8uY2FsbHNdKQorCisgICAgZGVmIHRlc3RfcHJveHlfaHR0cHNfcHJveHlfYXV0aG9yaXphdGlvbihzZWxmKToKKyAgICAgICAgbyA9IE9wZW5lckRpcmVjdG9yKCkKKyAgICAgICAgcGggPSB1cmxsaWIyLlByb3h5SGFuZGxlcihkaWN0KGh0dHBzPSdwcm94eS5leGFtcGxlLmNvbTozMTI4JykpCisgICAgICAgIG8uYWRkX2hhbmRsZXIocGgpCisgICAgICAgIGh0dHBzX2hhbmRsZXIgPSBNb2NrSFRUUFNIYW5kbGVyKCkKKyAgICAgICAgby5hZGRfaGFuZGxlcihodHRwc19oYW5kbGVyKQorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwczovL3d3dy5leGFtcGxlLmNvbS8iKQorICAgICAgICByZXEuYWRkX2hlYWRlcigiUHJveHktQXV0aG9yaXphdGlvbiIsIkZvb0JhciIpCisgICAgICAgIHJlcS5hZGRfaGVhZGVyKCJVc2VyLUFnZW50IiwiR3JhaWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaG9zdCgpLCAid3d3LmV4YW1wbGUuY29tIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVxLl90dW5uZWxfaG9zdCkKKyAgICAgICAgciA9IG8ub3BlbihyZXEpCisgICAgICAgICMgVmVyaWZ5IFByb3h5LUF1dGhvcml6YXRpb24gZ2V0cyB0dW5uZWxlZCB0byByZXF1ZXN0LgorICAgICAgICAjIGh0dHBzY29ubiByZXFfaGVhZGVycyBkbyBub3QgaGF2ZSB0aGUgUHJveHktQXV0aG9yaXphdGlvbiBoZWFkZXIgYnV0CisgICAgICAgICMgdGhlIHJlcSB3aWxsIGhhdmUuCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKCJQcm94eS1BdXRob3JpemF0aW9uIiwiRm9vQmFyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHNfaGFuZGxlci5odHRwY29ubi5yZXFfaGVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoIlVzZXItQWdlbnQiLCJHcmFpbCIpLAorICAgICAgICAgICAgICAgICAgICAgIGh0dHBzX2hhbmRsZXIuaHR0cGNvbm4ucmVxX2hlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlcS5fdHVubmVsX2hvc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9ob3N0KCksICJwcm94eS5leGFtcGxlLmNvbTozMTI4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hlYWRlcigiUHJveHktYXV0aG9yaXphdGlvbiIpLCJGb29CYXIiKQorCisgICAgZGVmIHRlc3RfYmFzaWNfYXV0aChzZWxmLCBxdW90ZV9jaGFyPSciJyk6CisgICAgICAgIG9wZW5lciA9IE9wZW5lckRpcmVjdG9yKCkKKyAgICAgICAgcGFzc3dvcmRfbWFuYWdlciA9IE1vY2tQYXNzd29yZE1hbmFnZXIoKQorICAgICAgICBhdXRoX2hhbmRsZXIgPSB1cmxsaWIyLkhUVFBCYXNpY0F1dGhIYW5kbGVyKHBhc3N3b3JkX21hbmFnZXIpCisgICAgICAgIHJlYWxtID0gIkFDTUUgV2lkZ2V0IFN0b3JlIgorICAgICAgICBodHRwX2hhbmRsZXIgPSBNb2NrSFRUUEhhbmRsZXIoCisgICAgICAgICAgICA0MDEsICdXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0lcyVzJXNcclxuXHJcbicgJQorICAgICAgICAgICAgKHF1b3RlX2NoYXIsIHJlYWxtLCBxdW90ZV9jaGFyKSApCisgICAgICAgIG9wZW5lci5hZGRfaGFuZGxlcihhdXRoX2hhbmRsZXIpCisgICAgICAgIG9wZW5lci5hZGRfaGFuZGxlcihodHRwX2hhbmRsZXIpCisgICAgICAgIHNlbGYuX3Rlc3RfYmFzaWNfYXV0aChvcGVuZXIsIGF1dGhfaGFuZGxlciwgIkF1dGhvcml6YXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIGh0dHBfaGFuZGxlciwgcGFzc3dvcmRfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vYWNtZS5leGFtcGxlLmNvbS9wcm90ZWN0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9hY21lLmV4YW1wbGUuY29tL3Byb3RlY3RlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYmFzaWNfYXV0aF93aXRoX3NpbmdsZV9xdW90ZWRfcmVhbG0oc2VsZik6CisgICAgICAgIHNlbGYudGVzdF9iYXNpY19hdXRoKHF1b3RlX2NoYXI9IiciKQorCisgICAgZGVmIHRlc3RfYmFzaWNfYXV0aF93aXRoX3VucXVvdGVkX3JlYWxtKHNlbGYpOgorICAgICAgICBvcGVuZXIgPSBPcGVuZXJEaXJlY3RvcigpCisgICAgICAgIHBhc3N3b3JkX21hbmFnZXIgPSBNb2NrUGFzc3dvcmRNYW5hZ2VyKCkKKyAgICAgICAgYXV0aF9oYW5kbGVyID0gdXJsbGliMi5IVFRQQmFzaWNBdXRoSGFuZGxlcihwYXNzd29yZF9tYW5hZ2VyKQorICAgICAgICByZWFsbSA9ICJBQ01FIFdpZGdldCBTdG9yZSIKKyAgICAgICAgaHR0cF9oYW5kbGVyID0gTW9ja0hUVFBIYW5kbGVyKAorICAgICAgICAgICAgNDAxLCAnV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09JXNcclxuXHJcbicgJSByZWFsbSkKKyAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGF1dGhfaGFuZGxlcikKKyAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGh0dHBfaGFuZGxlcikKKyAgICAgICAgbXNnID0gIkJhc2ljIEF1dGggUmVhbG0gd2FzIHVucXVvdGVkIgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygobXNnLCBVc2VyV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9iYXNpY19hdXRoKG9wZW5lciwgYXV0aF9oYW5kbGVyLCAiQXV0aG9yaXphdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbG0sIGh0dHBfaGFuZGxlciwgcGFzc3dvcmRfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2FjbWUuZXhhbXBsZS5jb20vcHJvdGVjdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2FjbWUuZXhhbXBsZS5jb20vcHJvdGVjdGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisKKyAgICBkZWYgdGVzdF9wcm94eV9iYXNpY19hdXRoKHNlbGYpOgorICAgICAgICBvcGVuZXIgPSBPcGVuZXJEaXJlY3RvcigpCisgICAgICAgIHBoID0gdXJsbGliMi5Qcm94eUhhbmRsZXIoZGljdChodHRwPSJwcm94eS5leGFtcGxlLmNvbTozMTI4IikpCisgICAgICAgIG9wZW5lci5hZGRfaGFuZGxlcihwaCkKKyAgICAgICAgcGFzc3dvcmRfbWFuYWdlciA9IE1vY2tQYXNzd29yZE1hbmFnZXIoKQorICAgICAgICBhdXRoX2hhbmRsZXIgPSB1cmxsaWIyLlByb3h5QmFzaWNBdXRoSGFuZGxlcihwYXNzd29yZF9tYW5hZ2VyKQorICAgICAgICByZWFsbSA9ICJBQ01FIE5ldHdvcmtzIgorICAgICAgICBodHRwX2hhbmRsZXIgPSBNb2NrSFRUUEhhbmRsZXIoCisgICAgICAgICAgICA0MDcsICdQcm94eS1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPSIlcyJcclxuXHJcbicgJSByZWFsbSkKKyAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGF1dGhfaGFuZGxlcikKKyAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGh0dHBfaGFuZGxlcikKKyAgICAgICAgc2VsZi5fdGVzdF9iYXNpY19hdXRoKG9wZW5lciwgYXV0aF9oYW5kbGVyLCAiUHJveHktYXV0aG9yaXphdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgaHR0cF9oYW5kbGVyLCBwYXNzd29yZF9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9hY21lLmV4YW1wbGUuY29tOjMxMjgvcHJvdGVjdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm94eS5leGFtcGxlLmNvbTozMTI4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2FuZF9kaWdlc3RfYXV0aF9oYW5kbGVycyhzZWxmKToKKyAgICAgICAgIyBIVFRQRGlnZXN0QXV0aEhhbmRsZXIgcmFpc2VkIGFuIGV4Y2VwdGlvbiBpZiBpdCBjb3VsZG4ndCBoYW5kbGUgYSA0MCoKKyAgICAgICAgIyByZXNwb25zZSAoaHR0cDovL3B5dGhvbi5vcmcvc2YvMTQ3OTMwMiksIHdoZXJlIGl0IHNob3VsZCBpbnN0ZWFkCisgICAgICAgICMgcmV0dXJuIE5vbmUgdG8gYWxsb3cgYW5vdGhlciBoYW5kbGVyIChlc3BlY2lhbGx5CisgICAgICAgICMgSFRUUEJhc2ljQXV0aEhhbmRsZXIpIHRvIGhhbmRsZSB0aGUgcmVzcG9uc2UuCisKKyAgICAgICAgIyBBbHNvIChodHRwOi8vcHl0aG9uLm9yZy9zZi8xNDc5NzAyNywgUkZDIDI2MTcgc2VjdGlvbiAxLjIpLCB3ZSBtdXN0CisgICAgICAgICMgdHJ5IGRpZ2VzdCBmaXJzdCAoc2luY2UgaXQncyB0aGUgc3Ryb25nZXN0IGF1dGggc2NoZW1lKSwgc28gd2UgcmVjb3JkCisgICAgICAgICMgb3JkZXIgb2YgY2FsbHMgaGVyZSB0byBjaGVjayBkaWdlc3QgY29tZXMgZmlyc3Q6CisgICAgICAgIGNsYXNzIFJlY29yZGluZ09wZW5lckRpcmVjdG9yKE9wZW5lckRpcmVjdG9yKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBPcGVuZXJEaXJlY3Rvci5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYucmVjb3JkZWQgPSBbXQorICAgICAgICAgICAgZGVmIHJlY29yZChzZWxmLCBpbmZvKToKKyAgICAgICAgICAgICAgICBzZWxmLnJlY29yZGVkLmFwcGVuZChpbmZvKQorICAgICAgICBjbGFzcyBUZXN0RGlnZXN0QXV0aEhhbmRsZXIodXJsbGliMi5IVFRQRGlnZXN0QXV0aEhhbmRsZXIpOgorICAgICAgICAgICAgZGVmIGh0dHBfZXJyb3JfNDAxKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyZW50LnJlY29yZCgiZGlnZXN0IikKKyAgICAgICAgICAgICAgICB1cmxsaWIyLkhUVFBEaWdlc3RBdXRoSGFuZGxlci5odHRwX2Vycm9yXzQwMShzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphcmdzLCAqKmt3ZHMpCisgICAgICAgIGNsYXNzIFRlc3RCYXNpY0F1dGhIYW5kbGVyKHVybGxpYjIuSFRUUEJhc2ljQXV0aEhhbmRsZXIpOgorICAgICAgICAgICAgZGVmIGh0dHBfZXJyb3JfNDAxKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyZW50LnJlY29yZCgiYmFzaWMiKQorICAgICAgICAgICAgICAgIHVybGxpYjIuSFRUUEJhc2ljQXV0aEhhbmRsZXIuaHR0cF9lcnJvcl80MDEoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphcmdzLCAqKmt3ZHMpCisKKyAgICAgICAgb3BlbmVyID0gUmVjb3JkaW5nT3BlbmVyRGlyZWN0b3IoKQorICAgICAgICBwYXNzd29yZF9tYW5hZ2VyID0gTW9ja1Bhc3N3b3JkTWFuYWdlcigpCisgICAgICAgIGRpZ2VzdF9oYW5kbGVyID0gVGVzdERpZ2VzdEF1dGhIYW5kbGVyKHBhc3N3b3JkX21hbmFnZXIpCisgICAgICAgIGJhc2ljX2hhbmRsZXIgPSBUZXN0QmFzaWNBdXRoSGFuZGxlcihwYXNzd29yZF9tYW5hZ2VyKQorICAgICAgICByZWFsbSA9ICJBQ01FIE5ldHdvcmtzIgorICAgICAgICBodHRwX2hhbmRsZXIgPSBNb2NrSFRUUEhhbmRsZXIoCisgICAgICAgICAgICA0MDEsICdXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0iJXMiXHJcblxyXG4nICUgcmVhbG0pCisgICAgICAgIG9wZW5lci5hZGRfaGFuZGxlcihiYXNpY19oYW5kbGVyKQorICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoZGlnZXN0X2hhbmRsZXIpCisgICAgICAgIG9wZW5lci5hZGRfaGFuZGxlcihodHRwX2hhbmRsZXIpCisKKyAgICAgICAgIyBjaGVjayBiYXNpYyBhdXRoIGlzbid0IGJsb2NrZWQgYnkgZGlnZXN0IGhhbmRsZXIgZmFpbGluZworICAgICAgICBzZWxmLl90ZXN0X2Jhc2ljX2F1dGgob3BlbmVyLCBiYXNpY19oYW5kbGVyLCAiQXV0aG9yaXphdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFsbSwgaHR0cF9oYW5kbGVyLCBwYXNzd29yZF9tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9hY21lLmV4YW1wbGUuY29tL3Byb3RlY3RlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2FjbWUuZXhhbXBsZS5jb20vcHJvdGVjdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgIyBjaGVjayBkaWdlc3Qgd2FzIHRyaWVkIGJlZm9yZSBiYXNpYyAodHdpY2UsIGJlY2F1c2UKKyAgICAgICAgIyBfdGVzdF9iYXNpY19hdXRoIGNhbGxlZCAub3BlbigpIHR3aWNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW5lci5yZWNvcmRlZCwgWyJkaWdlc3QiLCAiYmFzaWMiXSoyKQorCisgICAgZGVmIF90ZXN0X2Jhc2ljX2F1dGgoc2VsZiwgb3BlbmVyLCBhdXRoX2hhbmRsZXIsIGF1dGhfaGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxtLCBodHRwX2hhbmRsZXIsIHBhc3N3b3JkX21hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF91cmwsIHByb3RlY3RlZF91cmwpOgorICAgICAgICBpbXBvcnQgYmFzZTY0CisgICAgICAgIHVzZXIsIHBhc3N3b3JkID0gIndpbGUiLCAiY295b3RlIgorCisgICAgICAgICMgLmFkZF9wYXNzd29yZCgpIGZlZCB0aHJvdWdoIHRvIHBhc3N3b3JkIG1hbmFnZXIKKyAgICAgICAgYXV0aF9oYW5kbGVyLmFkZF9wYXNzd29yZChyZWFsbSwgcmVxdWVzdF91cmwsIHVzZXIsIHBhc3N3b3JkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxtLCBwYXNzd29yZF9tYW5hZ2VyLnJlYWxtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RfdXJsLCBwYXNzd29yZF9tYW5hZ2VyLnVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1c2VyLCBwYXNzd29yZF9tYW5hZ2VyLnVzZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc3dvcmQsIHBhc3N3b3JkX21hbmFnZXIucGFzc3dvcmQpCisKKyAgICAgICAgciA9IG9wZW5lci5vcGVuKHJlcXVlc3RfdXJsKQorCisgICAgICAgICMgc2hvdWxkIGhhdmUgYXNrZWQgdGhlIHBhc3N3b3JkIG1hbmFnZXIgZm9yIHRoZSB1c2VybmFtZS9wYXNzd29yZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3N3b3JkX21hbmFnZXIudGFyZ2V0X3JlYWxtLCByZWFsbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzd29yZF9tYW5hZ2VyLnRhcmdldF91cmwsIHByb3RlY3RlZF91cmwpCisKKyAgICAgICAgIyBleHBlY3Qgb25lIHJlcXVlc3Qgd2l0aG91dCBhdXRob3JpemF0aW9uLCB0aGVuIG9uZSB3aXRoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGh0dHBfaGFuZGxlci5yZXF1ZXN0cyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaHR0cF9oYW5kbGVyLnJlcXVlc3RzWzBdLmhhc19oZWFkZXIoYXV0aF9oZWFkZXIpKQorICAgICAgICB1c2VycGFzcyA9ICclczolcycgJSAodXNlciwgcGFzc3dvcmQpCisgICAgICAgIGF1dGhfaGRyX3ZhbHVlID0gJ0Jhc2ljICcrYmFzZTY0LmVuY29kZXN0cmluZyh1c2VycGFzcykuc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0dHBfaGFuZGxlci5yZXF1ZXN0c1sxXS5nZXRfaGVhZGVyKGF1dGhfaGVhZGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2hkcl92YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodHRwX2hhbmRsZXIucmVxdWVzdHNbMV0udW5yZWRpcmVjdGVkX2hkcnNbYXV0aF9oZWFkZXJdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfaGRyX3ZhbHVlKQorICAgICAgICAjIGlmIHRoZSBwYXNzd29yZCBtYW5hZ2VyIGNhbid0IGZpbmQgYSBwYXNzd29yZCwgdGhlIGhhbmRsZXIgd29uJ3QKKyAgICAgICAgIyBoYW5kbGUgdGhlIEhUVFAgYXV0aCBlcnJvcgorICAgICAgICBwYXNzd29yZF9tYW5hZ2VyLnVzZXIgPSBwYXNzd29yZF9tYW5hZ2VyLnBhc3N3b3JkID0gTm9uZQorICAgICAgICBodHRwX2hhbmRsZXIucmVzZXQoKQorICAgICAgICByID0gb3BlbmVyLm9wZW4ocmVxdWVzdF91cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGh0dHBfaGFuZGxlci5yZXF1ZXN0cyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaHR0cF9oYW5kbGVyLnJlcXVlc3RzWzBdLmhhc19oZWFkZXIoYXV0aF9oZWFkZXIpKQorCitjbGFzcyBNaXNjVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYnVpbGRfb3BlbmVyKHNlbGYpOgorICAgICAgICBjbGFzcyBNeUhUVFBIYW5kbGVyKHVybGxpYjIuSFRUUEhhbmRsZXIpOiBwYXNzCisgICAgICAgIGNsYXNzIEZvb0hhbmRsZXIodXJsbGliMi5CYXNlSGFuZGxlcik6CisgICAgICAgICAgICBkZWYgZm9vX29wZW4oc2VsZik6IHBhc3MKKyAgICAgICAgY2xhc3MgQmFySGFuZGxlcih1cmxsaWIyLkJhc2VIYW5kbGVyKToKKyAgICAgICAgICAgIGRlZiBiYXJfb3BlbihzZWxmKTogcGFzcworCisgICAgICAgIGJ1aWxkX29wZW5lciA9IHVybGxpYjIuYnVpbGRfb3BlbmVyCisKKyAgICAgICAgbyA9IGJ1aWxkX29wZW5lcihGb29IYW5kbGVyLCBCYXJIYW5kbGVyKQorICAgICAgICBzZWxmLm9wZW5lcl9oYXNfaGFuZGxlcihvLCBGb29IYW5kbGVyKQorICAgICAgICBzZWxmLm9wZW5lcl9oYXNfaGFuZGxlcihvLCBCYXJIYW5kbGVyKQorCisgICAgICAgICMgY2FuIHRha2UgYSBtaXggb2YgY2xhc3NlcyBhbmQgaW5zdGFuY2VzCisgICAgICAgIG8gPSBidWlsZF9vcGVuZXIoRm9vSGFuZGxlciwgQmFySGFuZGxlcigpKQorICAgICAgICBzZWxmLm9wZW5lcl9oYXNfaGFuZGxlcihvLCBGb29IYW5kbGVyKQorICAgICAgICBzZWxmLm9wZW5lcl9oYXNfaGFuZGxlcihvLCBCYXJIYW5kbGVyKQorCisgICAgICAgICMgc3ViY2xhc3NlcyBvZiBkZWZhdWx0IGhhbmRsZXJzIG92ZXJyaWRlIGRlZmF1bHQgaGFuZGxlcnMKKyAgICAgICAgbyA9IGJ1aWxkX29wZW5lcihNeUhUVFBIYW5kbGVyKQorICAgICAgICBzZWxmLm9wZW5lcl9oYXNfaGFuZGxlcihvLCBNeUhUVFBIYW5kbGVyKQorCisgICAgICAgICMgYSBwYXJ0aWN1bGFyIGNhc2Ugb2Ygb3ZlcnJpZGluZzogZGVmYXVsdCBoYW5kbGVycyBjYW4gYmUgcGFzc2VkCisgICAgICAgICMgaW4gZXhwbGljaXRseQorICAgICAgICBvID0gYnVpbGRfb3BlbmVyKCkKKyAgICAgICAgc2VsZi5vcGVuZXJfaGFzX2hhbmRsZXIobywgdXJsbGliMi5IVFRQSGFuZGxlcikKKyAgICAgICAgbyA9IGJ1aWxkX29wZW5lcih1cmxsaWIyLkhUVFBIYW5kbGVyKQorICAgICAgICBzZWxmLm9wZW5lcl9oYXNfaGFuZGxlcihvLCB1cmxsaWIyLkhUVFBIYW5kbGVyKQorICAgICAgICBvID0gYnVpbGRfb3BlbmVyKHVybGxpYjIuSFRUUEhhbmRsZXIoKSkKKyAgICAgICAgc2VsZi5vcGVuZXJfaGFzX2hhbmRsZXIobywgdXJsbGliMi5IVFRQSGFuZGxlcikKKworICAgICAgICAjIElzc3VlMjY3MDogbXVsdGlwbGUgaGFuZGxlcnMgc2hhcmluZyB0aGUgc2FtZSBiYXNlIGNsYXNzCisgICAgICAgIGNsYXNzIE15T3RoZXJIVFRQSGFuZGxlcih1cmxsaWIyLkhUVFBIYW5kbGVyKTogcGFzcworICAgICAgICBvID0gYnVpbGRfb3BlbmVyKE15SFRUUEhhbmRsZXIsIE15T3RoZXJIVFRQSGFuZGxlcikKKyAgICAgICAgc2VsZi5vcGVuZXJfaGFzX2hhbmRsZXIobywgTXlIVFRQSGFuZGxlcikKKyAgICAgICAgc2VsZi5vcGVuZXJfaGFzX2hhbmRsZXIobywgTXlPdGhlckhUVFBIYW5kbGVyKQorCisgICAgZGVmIG9wZW5lcl9oYXNfaGFuZGxlcihzZWxmLCBvcGVuZXIsIGhhbmRsZXJfY2xhc3MpOgorICAgICAgICBmb3IgaCBpbiBvcGVuZXIuaGFuZGxlcnM6CisgICAgICAgICAgICBpZiBoLl9fY2xhc3NfXyA9PSBoYW5kbGVyX2NsYXNzOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoRmFsc2UpCisKK2NsYXNzIFJlcXVlc3RUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZ2V0ID0gdXJsbGliMi5SZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iKQorICAgICAgICBzZWxmLnBvc3QgPSB1cmxsaWIyLlJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzPXsiWC1UZXN0IjogInRlc3QifSkKKworICAgIGRlZiB0ZXN0X21ldGhvZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUE9TVCIsIHNlbGYucG9zdC5nZXRfbWV0aG9kKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkdFVCIsIHNlbGYuZ2V0LmdldF9tZXRob2QoKSkKKworICAgIGRlZiB0ZXN0X2FkZF9kYXRhKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHNlbGYuZ2V0Lmhhc19kYXRhKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkdFVCIsIHNlbGYuZ2V0LmdldF9tZXRob2QoKSkKKyAgICAgICAgc2VsZi5nZXQuYWRkX2RhdGEoInNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5nZXQuaGFzX2RhdGEoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUE9TVCIsIHNlbGYuZ2V0LmdldF9tZXRob2QoKSkKKworICAgIGRlZiB0ZXN0X2dldF9mdWxsX3VybChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldC5nZXRfZnVsbF91cmwoKSkKKworICAgIGRlZiB0ZXN0X3NlbGVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIvfmplcmVteS8iLCBzZWxmLmdldC5nZXRfc2VsZWN0b3IoKSkKKyAgICAgICAgcmVxID0gdXJsbGliMi5SZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiLyIsIHJlcS5nZXRfc2VsZWN0b3IoKSkKKworICAgIGRlZiB0ZXN0X2dldF90eXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJodHRwIiwgc2VsZi5nZXQuZ2V0X3R5cGUoKSkKKworICAgIGRlZiB0ZXN0X2dldF9ob3N0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ3d3cucHl0aG9uLm9yZyIsIHNlbGYuZ2V0LmdldF9ob3N0KCkpCisKKyAgICBkZWYgdGVzdF9nZXRfaG9zdF91bnF1b3RlKHNlbGYpOgorICAgICAgICByZXEgPSB1cmxsaWIyLlJlcXVlc3QoImh0dHA6Ly93d3cuJTcweXRob24ub3JnLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInd3dy5weXRob24ub3JnIiwgcmVxLmdldF9ob3N0KCkpCisKKyAgICBkZWYgdGVzdF9wcm94eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLmdldC5oYXNfcHJveHkoKSkKKyAgICAgICAgc2VsZi5nZXQuc2V0X3Byb3h5KCJ3d3cucGVybC5vcmciLCAiaHR0cCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmdldC5oYXNfcHJveHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgid3d3LnB5dGhvbi5vcmciLCBzZWxmLmdldC5nZXRfb3JpZ2luX3JlcV9ob3N0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInd3dy5wZXJsLm9yZyIsIHNlbGYuZ2V0LmdldF9ob3N0KCkpCisKKyAgICBkZWYgdGVzdF93cmFwcGVkX3VybChzZWxmKToKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiPFVSTDpodHRwOi8vd3d3LnB5dGhvbi5vcmc+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgid3d3LnB5dGhvbi5vcmciLCByZXEuZ2V0X2hvc3QoKSkKKworICAgIGRlZiB0ZXN0X3VybF9mcmFnbWVudChzZWxmKToKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnLz9xcz1xdWVyeSNmcmFnbWVudD10cnVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiLz9xcz1xdWVyeSIsIHJlcS5nZXRfc2VsZWN0b3IoKSkKKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnLyNmdW49dHJ1ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIi8iLCByZXEuZ2V0X3NlbGVjdG9yKCkpCisKKyAgICAgICAgIyBJc3N1ZSAxMTcwMzogZ2V0dXJsKCkgb21pdHMgZnJhZ21lbnQgaW4gdGhlIG9yaWdpbmFsIFVSTC4KKyAgICAgICAgdXJsID0gJ2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91cmxsaWIyLmh0bWwjT0snCisgICAgICAgIHJlcSA9IFJlcXVlc3QodXJsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfZnVsbF91cmwoKSwgdXJsKQorCisgICAgZGVmIHRlc3RfSFRUUEVycm9yX2ludGVyZmFjZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIElzc3VlIDEzMjExIHJldmVhbHMgdGhhdCBIVFRQRXJyb3IgZGlkbid0IGltcGxlbWVudCB0aGUgVVJMRXJyb3IKKyAgICAgICAgaW50ZXJmYWNlIGV2ZW4gdGhvdWdoIEhUVFBFcnJvciBpcyBhIHN1YmNsYXNzIG9mIFVSTEVycm9yLgorCisgICAgICAgID4+PiBlcnIgPSB1cmxsaWIyLkhUVFBFcnJvcihtc2c9J3NvbWV0aGluZyBiYWQgaGFwcGVuZWQnLCB1cmw9Tm9uZSwgY29kZT1Ob25lLCBoZHJzPU5vbmUsIGZwPU5vbmUpCisgICAgICAgID4+PiBhc3NlcnQgaGFzYXR0cihlcnIsICdyZWFzb24nKQorICAgICAgICA+Pj4gZXJyLnJlYXNvbgorICAgICAgICAnc29tZXRoaW5nIGJhZCBoYXBwZW5lZCcKKyAgICAgICAgIiIiCisKKyAgICBkZWYgdGVzdF9IVFRQRXJyb3JfaW50ZXJmYWNlX2NhbGwoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBJc3N1ZSAxNTcwMT0gLSBIVFRQRXJyb3IgaW50ZXJmYWNlIGhhcyBpbmZvIG1ldGhvZCBhdmFpbGFibGUgZnJvbSBVUkxFcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIGVyciA9IHVybGxpYjIuSFRUUEVycm9yKG1zZz0nc29tZXRoaW5nIGJhZCBoYXBwZW5lZCcsIHVybD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlPU5vbmUsIGhkcnM9J0NvbnRlbnQtTGVuZ3RoOjQyJywgZnA9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJyLCAncmVhc29uJykpCisgICAgICAgIGFzc2VydCBoYXNhdHRyKGVyciwgJ3JlYXNvbicpCisgICAgICAgIGFzc2VydCBoYXNhdHRyKGVyciwgJ2luZm8nKQorICAgICAgICBhc3NlcnQgY2FsbGFibGUoZXJyLmluZm8pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVyci5pbmZvKCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJlcnIuaW5mbygpIGZhaWxlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmluZm8oKSwgIkNvbnRlbnQtTGVuZ3RoOjQyIikKKworZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF91cmxsaWIyCisgICAgdGVzdF9zdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfdXJsbGliMiwgdmVyYm9zZSkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodXJsbGliMiwgdmVyYm9zZSkKKyAgICB0ZXN0cyA9IChUcml2aWFsVGVzdHMsCisgICAgICAgICAgICAgT3BlbmVyRGlyZWN0b3JUZXN0cywKKyAgICAgICAgICAgICBIYW5kbGVyVGVzdHMsCisgICAgICAgICAgICAgTWlzY1Rlc3RzLAorICAgICAgICAgICAgIFJlcXVlc3RUZXN0cykKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgwMmY2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkKQEAgLTAsMCArMSw1NTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgdXJscGFyc2UKK2ltcG9ydCB1cmxsaWIyCitpbXBvcnQgQmFzZUhUVFBTZXJ2ZXIKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGhhc2hsaWIKKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworbWltZXRvb2xzID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ21pbWV0b29scycsIGRlcHJlY2F0ZWQ9VHJ1ZSkKK3RocmVhZGluZyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQorCisjIExvb3BiYWNrIGh0dHAgc2VydmVyIGluZnJhc3RydWN0dXJlCisKK2NsYXNzIExvb3BiYWNrSHR0cFNlcnZlcihCYXNlSFRUUFNlcnZlci5IVFRQU2VydmVyKToKKyAgICAiIiJIVFRQIHNlcnZlciB3LyBhIGZldyBtb2RpZmljYXRpb25zIHRoYXQgbWFrZSBpdCB1c2VmdWwgZm9yCisgICAgbG9vcGJhY2sgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXJfYWRkcmVzcywgUmVxdWVzdEhhbmRsZXJDbGFzcyk6CisgICAgICAgIEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIuX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0SGFuZGxlckNsYXNzKQorCisgICAgICAgICMgU2V0IHRoZSB0aW1lb3V0IG9mIG91ciBsaXN0ZW5pbmcgc29ja2V0IHJlYWxseSBsb3cgc28KKyAgICAgICAgIyB0aGF0IHdlIGNhbiBzdG9wIHRoZSBzZXJ2ZXIgZWFzaWx5LgorICAgICAgICBzZWxmLnNvY2tldC5zZXR0aW1lb3V0KDEuMCkKKworICAgIGRlZiBnZXRfcmVxdWVzdChzZWxmKToKKyAgICAgICAgIiIiQmFzZUhUVFBTZXJ2ZXIgbWV0aG9kLCBvdmVycmlkZGVuLiIiIgorCisgICAgICAgIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKKworICAgICAgICAjIEl0J3MgYSBsb29wYmFjayBjb25uZWN0aW9uLCBzbyBzZXR0aW5nIHRoZSB0aW1lb3V0CisgICAgICAgICMgcmVhbGx5IGxvdyBzaG91bGRuJ3QgYWZmZWN0IGFueXRoaW5nLCBidXQgc2hvdWxkIG1ha2UKKyAgICAgICAgIyBkZWFkbG9ja3MgbGVzcyBsaWtlbHkgdG8gb2NjdXIuCisgICAgICAgIHJlcXVlc3Quc2V0dGltZW91dCgxMC4wKQorCisgICAgICAgIHJldHVybiAocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCisKK2NsYXNzIExvb3BiYWNrSHR0cFNlcnZlclRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAiIiJTdG9wcGFibGUgdGhyZWFkIHRoYXQgcnVucyBhIGxvb3BiYWNrIGh0dHAgc2VydmVyLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3RfaGFuZGxlcik6CisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fc3RvcCA9IEZhbHNlCisgICAgICAgIHNlbGYucmVhZHkgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICByZXF1ZXN0X2hhbmRsZXIucHJvdG9jb2xfdmVyc2lvbiA9ICJIVFRQLzEuMCIKKyAgICAgICAgc2VsZi5odHRwZCA9IExvb3BiYWNrSHR0cFNlcnZlcigoJzEyNy4wLjAuMScsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfaGFuZGxlcikKKyAgICAgICAgI3ByaW50ICJTZXJ2aW5nIEhUVFAgb24gJXMgcG9ydCAlcyIgJSAoc2VsZi5odHRwZC5zZXJ2ZXJfbmFtZSwKKyAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5odHRwZC5zZXJ2ZXJfcG9ydCkKKyAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5odHRwZC5zZXJ2ZXJfcG9ydAorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIlN0b3BzIHRoZSB3ZWJzZXJ2ZXIgaWYgaXQncyBjdXJyZW50bHkgcnVubmluZy4iIiIKKworICAgICAgICAjIFNldCB0aGUgc3RvcCBmbGFnLgorICAgICAgICBzZWxmLl9zdG9wID0gVHJ1ZQorCisgICAgICAgIHNlbGYuam9pbigpCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWR5LnNldCgpCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zdG9wOgorICAgICAgICAgICAgc2VsZi5odHRwZC5oYW5kbGVfcmVxdWVzdCgpCisKKyMgQXV0aGVudGljYXRpb24gaW5mcmFzdHJ1Y3R1cmUKKworY2xhc3MgRGlnZXN0QXV0aEhhbmRsZXI6CisgICAgIiIiSGFuZGxlciBmb3IgcGVyZm9ybWluZyBkaWdlc3QgYXV0aGVudGljYXRpb24uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX3JlcXVlc3RfbnVtID0gMAorICAgICAgICBzZWxmLl9ub25jZXMgPSBbXQorICAgICAgICBzZWxmLl91c2VycyA9IHt9CisgICAgICAgIHNlbGYuX3JlYWxtX25hbWUgPSAiVGVzdCBSZWFsbSIKKyAgICAgICAgc2VsZi5fcW9wID0gImF1dGgiCisKKyAgICBkZWYgc2V0X3FvcChzZWxmLCBxb3ApOgorICAgICAgICBzZWxmLl9xb3AgPSBxb3AKKworICAgIGRlZiBzZXRfdXNlcnMoc2VsZiwgdXNlcnMpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh1c2VycywgZGljdCkKKyAgICAgICAgc2VsZi5fdXNlcnMgPSB1c2VycworCisgICAgZGVmIHNldF9yZWFsbShzZWxmLCByZWFsbSk6CisgICAgICAgIHNlbGYuX3JlYWxtX25hbWUgPSByZWFsbQorCisgICAgZGVmIF9nZW5lcmF0ZV9ub25jZShzZWxmKToKKyAgICAgICAgc2VsZi5fcmVxdWVzdF9udW0gKz0gMQorICAgICAgICBub25jZSA9IGhhc2hsaWIubWQ1KHN0cihzZWxmLl9yZXF1ZXN0X251bSkpLmhleGRpZ2VzdCgpCisgICAgICAgIHNlbGYuX25vbmNlcy5hcHBlbmQobm9uY2UpCisgICAgICAgIHJldHVybiBub25jZQorCisgICAgZGVmIF9jcmVhdGVfYXV0aF9kaWN0KHNlbGYsIGF1dGhfc3RyKToKKyAgICAgICAgZmlyc3Rfc3BhY2VfaW5kZXggPSBhdXRoX3N0ci5maW5kKCIgIikKKyAgICAgICAgYXV0aF9zdHIgPSBhdXRoX3N0cltmaXJzdF9zcGFjZV9pbmRleCsxOl0KKworICAgICAgICBwYXJ0cyA9IGF1dGhfc3RyLnNwbGl0KCIsIikKKworICAgICAgICBhdXRoX2RpY3QgPSB7fQorICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgIG5hbWUsIHZhbHVlID0gcGFydC5zcGxpdCgiPSIpCisgICAgICAgICAgICBuYW1lID0gbmFtZS5zdHJpcCgpCisgICAgICAgICAgICBpZiB2YWx1ZVswXSA9PSAnIicgYW5kIHZhbHVlWy0xXSA9PSAnIic6CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVsxOi0xXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN0cmlwKCkKKyAgICAgICAgICAgIGF1dGhfZGljdFtuYW1lXSA9IHZhbHVlCisgICAgICAgIHJldHVybiBhdXRoX2RpY3QKKworICAgIGRlZiBfdmFsaWRhdGVfYXV0aChzZWxmLCBhdXRoX2RpY3QsIHBhc3N3b3JkLCBtZXRob2QsIHVyaSk6CisgICAgICAgIGZpbmFsX2RpY3QgPSB7fQorICAgICAgICBmaW5hbF9kaWN0LnVwZGF0ZShhdXRoX2RpY3QpCisgICAgICAgIGZpbmFsX2RpY3RbInBhc3N3b3JkIl0gPSBwYXNzd29yZAorICAgICAgICBmaW5hbF9kaWN0WyJtZXRob2QiXSA9IG1ldGhvZAorICAgICAgICBmaW5hbF9kaWN0WyJ1cmkiXSA9IHVyaQorICAgICAgICBIQTFfc3RyID0gIiUodXNlcm5hbWUpczolKHJlYWxtKXM6JShwYXNzd29yZClzIiAlIGZpbmFsX2RpY3QKKyAgICAgICAgSEExID0gaGFzaGxpYi5tZDUoSEExX3N0cikuaGV4ZGlnZXN0KCkKKyAgICAgICAgSEEyX3N0ciA9ICIlKG1ldGhvZClzOiUodXJpKXMiICUgZmluYWxfZGljdAorICAgICAgICBIQTIgPSBoYXNobGliLm1kNShIQTJfc3RyKS5oZXhkaWdlc3QoKQorICAgICAgICBmaW5hbF9kaWN0WyJIQTEiXSA9IEhBMQorICAgICAgICBmaW5hbF9kaWN0WyJIQTIiXSA9IEhBMgorICAgICAgICByZXNwb25zZV9zdHIgPSAiJShIQTEpczolKG5vbmNlKXM6JShuYylzOiIgXAorICAgICAgICAgICAgICAgICAgICAgICAiJShjbm9uY2UpczolKHFvcClzOiUoSEEyKXMiICUgZmluYWxfZGljdAorICAgICAgICByZXNwb25zZSA9IGhhc2hsaWIubWQ1KHJlc3BvbnNlX3N0cikuaGV4ZGlnZXN0KCkKKworICAgICAgICByZXR1cm4gcmVzcG9uc2UgPT0gYXV0aF9kaWN0WyJyZXNwb25zZSJdCisKKyAgICBkZWYgX3JldHVybl9hdXRoX2NoYWxsZW5nZShzZWxmLCByZXF1ZXN0X2hhbmRsZXIpOgorICAgICAgICByZXF1ZXN0X2hhbmRsZXIuc2VuZF9yZXNwb25zZSg0MDcsICJQcm94eSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCIpCisgICAgICAgIHJlcXVlc3RfaGFuZGxlci5zZW5kX2hlYWRlcigiQ29udGVudC1UeXBlIiwgInRleHQvaHRtbCIpCisgICAgICAgIHJlcXVlc3RfaGFuZGxlci5zZW5kX2hlYWRlcigKKyAgICAgICAgICAgICdQcm94eS1BdXRoZW50aWNhdGUnLCAnRGlnZXN0IHJlYWxtPSIlcyIsICcKKyAgICAgICAgICAgICdxb3A9IiVzIiwnCisgICAgICAgICAgICAnbm9uY2U9IiVzIiwgJyAlIFwKKyAgICAgICAgICAgIChzZWxmLl9yZWFsbV9uYW1lLCBzZWxmLl9xb3AsIHNlbGYuX2dlbmVyYXRlX25vbmNlKCkpKQorICAgICAgICAjIFhYWDogTm90IHN1cmUgaWYgd2UncmUgc3VwcG9zZWQgdG8gYWRkIHRoaXMgbmV4dCBoZWFkZXIgb3IKKyAgICAgICAgIyBub3QuCisgICAgICAgICNyZXF1ZXN0X2hhbmRsZXIuc2VuZF9oZWFkZXIoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKQorICAgICAgICByZXF1ZXN0X2hhbmRsZXIuZW5kX2hlYWRlcnMoKQorICAgICAgICByZXF1ZXN0X2hhbmRsZXIud2ZpbGUud3JpdGUoIlByb3h5IEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkLiIpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGhhbmRsZV9yZXF1ZXN0KHNlbGYsIHJlcXVlc3RfaGFuZGxlcik6CisgICAgICAgICIiIlBlcmZvcm1zIGRpZ2VzdCBhdXRoZW50aWNhdGlvbiBvbiB0aGUgZ2l2ZW4gSFRUUCByZXF1ZXN0CisgICAgICAgIGhhbmRsZXIuICBSZXR1cm5zIFRydWUgaWYgYXV0aGVudGljYXRpb24gd2FzIHN1Y2Nlc3NmdWwsIEZhbHNlCisgICAgICAgIG90aGVyd2lzZS4KKworICAgICAgICBJZiBubyB1c2VycyBoYXZlIGJlZW4gc2V0LCB0aGVuIGRpZ2VzdCBhdXRoIGlzIGVmZmVjdGl2ZWx5CisgICAgICAgIGRpc2FibGVkIGFuZCB0aGlzIG1ldGhvZCB3aWxsIGFsd2F5cyByZXR1cm4gVHJ1ZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbGVuKHNlbGYuX3VzZXJzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBpZiAnUHJveHktQXV0aG9yaXphdGlvbicgbm90IGluIHJlcXVlc3RfaGFuZGxlci5oZWFkZXJzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JldHVybl9hdXRoX2NoYWxsZW5nZShyZXF1ZXN0X2hhbmRsZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhdXRoX2RpY3QgPSBzZWxmLl9jcmVhdGVfYXV0aF9kaWN0KAorICAgICAgICAgICAgICAgIHJlcXVlc3RfaGFuZGxlci5oZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10KKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBpZiBhdXRoX2RpY3RbInVzZXJuYW1lIl0gaW4gc2VsZi5fdXNlcnM6CisgICAgICAgICAgICAgICAgcGFzc3dvcmQgPSBzZWxmLl91c2Vyc1sgYXV0aF9kaWN0WyJ1c2VybmFtZSJdIF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JldHVybl9hdXRoX2NoYWxsZW5nZShyZXF1ZXN0X2hhbmRsZXIpCisgICAgICAgICAgICBpZiBub3QgYXV0aF9kaWN0LmdldCgibm9uY2UiKSBpbiBzZWxmLl9ub25jZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JldHVybl9hdXRoX2NoYWxsZW5nZShyZXF1ZXN0X2hhbmRsZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX25vbmNlcy5yZW1vdmUoYXV0aF9kaWN0WyJub25jZSJdKQorCisgICAgICAgICAgICBhdXRoX3ZhbGlkYXRlZCA9IEZhbHNlCisKKyAgICAgICAgICAgICMgTVNJRSB1c2VzIHNob3J0X3BhdGggaW4gaXRzIHZhbGlkYXRpb24sIGJ1dCBQeXRob24ncworICAgICAgICAgICAgIyB1cmxsaWIyIHVzZXMgdGhlIGZ1bGwgcGF0aCwgc28gd2UncmUgZ29pbmcgdG8gc2VlIGlmCisgICAgICAgICAgICAjIGVpdGhlciBvZiB0aGVtIHdvcmtzIGhlcmUuCisKKyAgICAgICAgICAgIGZvciBwYXRoIGluIFtyZXF1ZXN0X2hhbmRsZXIucGF0aCwgcmVxdWVzdF9oYW5kbGVyLnNob3J0X3BhdGhdOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3ZhbGlkYXRlX2F1dGgoYXV0aF9kaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2hhbmRsZXIuY29tbWFuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBhdXRoX3ZhbGlkYXRlZCA9IFRydWUKKworICAgICAgICAgICAgaWYgbm90IGF1dGhfdmFsaWRhdGVkOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZXR1cm5fYXV0aF9jaGFsbGVuZ2UocmVxdWVzdF9oYW5kbGVyKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworIyBQcm94eSB0ZXN0IGluZnJhc3RydWN0dXJlCisKK2NsYXNzIEZha2VQcm94eUhhbmRsZXIoQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgIiIiVGhpcyBpcyBhICdmYWtlIHByb3h5JyB0aGF0IG1ha2VzIGl0IGxvb2sgbGlrZSB0aGUgZW50aXJlCisgICAgaW50ZXJuZXQgaGFzIGdvbmUgZG93biBkdWUgdG8gYSBzdWRkZW4gem9tYmllIGludmFzaW9uLiAgSXQgbWFpbgorICAgIHV0aWxpdHkgaXMgaW4gcHJvdmlkaW5nIHVzIHdpdGggYXV0aGVudGljYXRpb24gc3VwcG9ydCBmb3IKKyAgICB0ZXN0aW5nLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpZ2VzdF9hdXRoX2hhbmRsZXIsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICMgVGhpcyBoYXMgdG8gYmUgc2V0IGJlZm9yZSBjYWxsaW5nIG91ciBwYXJlbnQncyBfX2luaXRfXygpLCB3aGljaCB3aWxsCisgICAgICAgICMgdHJ5IHRvIGNhbGwgZG9fR0VUKCkuCisgICAgICAgIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlciA9IGRpZ2VzdF9hdXRoX2hhbmRsZXIKKyAgICAgICAgQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgICMgVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgZm9yIGRlYnVnZ2luZy4KKyAgICAgICAgI3N5cy5zdGRlcnIud3JpdGUoZm9ybWF0ICUgYXJncykKKyAgICAgICAgcGFzcworCisgICAgZGVmIGRvX0dFVChzZWxmKToKKyAgICAgICAgKHNjbSwgbmV0bG9jLCBwYXRoLCBwYXJhbXMsIHF1ZXJ5LCBmcmFnbWVudCkgPSB1cmxwYXJzZS51cmxwYXJzZSgKKyAgICAgICAgICAgIHNlbGYucGF0aCwgJ2h0dHAnKQorICAgICAgICBzZWxmLnNob3J0X3BhdGggPSBwYXRoCisgICAgICAgIGlmIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlci5oYW5kbGVfcmVxdWVzdChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDAsICJPSyIpCisgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCAidGV4dC9odG1sIikKKyAgICAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZSgiWW91J3ZlIHJlYWNoZWQgJXMhPEJSPiIgJSBzZWxmLnBhdGgpCisgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKCJPdXIgYXBvbG9naWVzLCBidXQgb3VyIHNlcnZlciBpcyBkb3duIGR1ZSB0byAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYSBzdWRkZW4gem9tYmllIGludmFzaW9uLiIpCisKKyMgVGVzdCBjYXNlcworCitjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fdGhyZWFkcyA9IHRlc3Rfc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCisKKworY2xhc3MgUHJveHlBdXRoVGVzdHMoQmFzZVRlc3RDYXNlKToKKyAgICBVUkwgPSAiaHR0cDovL2xvY2FsaG9zdCIKKworICAgIFVTRVIgPSAidGVzdGVyIgorICAgIFBBU1NXRCA9ICJ0ZXN0MTIzIgorICAgIFJFQUxNID0gIlRlc3RSZWFsbSIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoUHJveHlBdXRoVGVzdHMsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyID0gRGlnZXN0QXV0aEhhbmRsZXIoKQorICAgICAgICBzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIuc2V0X3VzZXJzKHtzZWxmLlVTRVI6IHNlbGYuUEFTU1dEfSkKKyAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF9yZWFsbShzZWxmLlJFQUxNKQorICAgICAgICBkZWYgY3JlYXRlX2Zha2VfcHJveHlfaGFuZGxlcigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIEZha2VQcm94eUhhbmRsZXIoc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBMb29wYmFja0h0dHBTZXJ2ZXJUaHJlYWQoY3JlYXRlX2Zha2VfcHJveHlfaGFuZGxlcikKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQorICAgICAgICBzZWxmLnNlcnZlci5yZWFkeS53YWl0KCkKKyAgICAgICAgcHJveHlfdXJsID0gImh0dHA6Ly8xMjcuMC4wLjE6JWQiICUgc2VsZi5zZXJ2ZXIucG9ydAorICAgICAgICBoYW5kbGVyID0gdXJsbGliMi5Qcm94eUhhbmRsZXIoeyJodHRwIiA6IHByb3h5X3VybH0pCisgICAgICAgIHNlbGYucHJveHlfZGlnZXN0X2hhbmRsZXIgPSB1cmxsaWIyLlByb3h5RGlnZXN0QXV0aEhhbmRsZXIoKQorICAgICAgICBzZWxmLm9wZW5lciA9IHVybGxpYjIuYnVpbGRfb3BlbmVyKGhhbmRsZXIsIHNlbGYucHJveHlfZGlnZXN0X2hhbmRsZXIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorICAgICAgICBzdXBlcihQcm94eUF1dGhUZXN0cywgc2VsZikudGVhckRvd24oKQorCisgICAgZGVmIHRlc3RfcHJveHlfd2l0aF9iYWRfcGFzc3dvcmRfcmFpc2VzX2h0dHBlcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5wcm94eV9kaWdlc3RfaGFuZGxlci5hZGRfcGFzc3dvcmQoc2VsZi5SRUFMTSwgc2VsZi5VUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuVVNFUiwgc2VsZi5QQVNTV0QrImJhZCIpCisgICAgICAgIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlci5zZXRfcW9wKCJhdXRoIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModXJsbGliMi5IVFRQRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3BlbmVyLm9wZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuVVJMKQorCisgICAgZGVmIHRlc3RfcHJveHlfd2l0aF9ub19wYXNzd29yZF9yYWlzZXNfaHR0cGVycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIuc2V0X3FvcCgiYXV0aCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYjIuSFRUUEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW5lci5vcGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlVSTCkKKworICAgIGRlZiB0ZXN0X3Byb3h5X3FvcF9hdXRoX3dvcmtzKHNlbGYpOgorICAgICAgICBzZWxmLnByb3h5X2RpZ2VzdF9oYW5kbGVyLmFkZF9wYXNzd29yZChzZWxmLlJFQUxNLCBzZWxmLlVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5VU0VSLCBzZWxmLlBBU1NXRCkKKyAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF9xb3AoImF1dGgiKQorICAgICAgICByZXN1bHQgPSBzZWxmLm9wZW5lci5vcGVuKHNlbGYuVVJMKQorICAgICAgICB3aGlsZSByZXN1bHQucmVhZCgpOgorICAgICAgICAgICAgcGFzcworICAgICAgICByZXN1bHQuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcHJveHlfcW9wX2F1dGhfaW50X3dvcmtzX29yX3Rocm93c191cmxlcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5wcm94eV9kaWdlc3RfaGFuZGxlci5hZGRfcGFzc3dvcmQoc2VsZi5SRUFMTSwgc2VsZi5VUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuVVNFUiwgc2VsZi5QQVNTV0QpCisgICAgICAgIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlci5zZXRfcW9wKCJhdXRoLWludCIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYub3BlbmVyLm9wZW4oc2VsZi5VUkwpCisgICAgICAgIGV4Y2VwdCB1cmxsaWIyLlVSTEVycm9yOgorICAgICAgICAgICAgIyBJdCdzIG9rYXkgaWYgd2UgZG9uJ3Qgc3VwcG9ydCBhdXRoLWludCwgYnV0IHdlIGNlcnRhaW5seQorICAgICAgICAgICAgIyBzaG91bGRuJ3QgcmVjZWl2ZSBhbnkga2luZCBvZiBleGNlcHRpb24gaGVyZSBvdGhlciB0aGFuCisgICAgICAgICAgICAjIGEgVVJMRXJyb3IuCisgICAgICAgICAgICByZXN1bHQgPSBOb25lCisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIHdoaWxlIHJlc3VsdC5yZWFkKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmVzdWx0LmNsb3NlKCkKKworCitkZWYgR2V0UmVxdWVzdEhhbmRsZXIocmVzcG9uc2VzKToKKworICAgIGNsYXNzIEZha2VIVFRQUmVxdWVzdEhhbmRsZXIoQmFzZUhUVFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisKKyAgICAgICAgc2VydmVyX3ZlcnNpb24gPSAiVGVzdEhUVFAvIgorICAgICAgICByZXF1ZXN0cyA9IFtdCisgICAgICAgIGhlYWRlcnNfcmVjZWl2ZWQgPSBbXQorICAgICAgICBwb3J0ID0gODAKKworICAgICAgICBkZWYgZG9fR0VUKHNlbGYpOgorICAgICAgICAgICAgYm9keSA9IHNlbGYuc2VuZF9oZWFkKCkKKyAgICAgICAgICAgIGlmIGJvZHk6CisgICAgICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShib2R5KQorCisgICAgICAgIGRlZiBkb19QT1NUKHNlbGYpOgorICAgICAgICAgICAgY29udGVudF9sZW5ndGggPSBzZWxmLmhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10KKyAgICAgICAgICAgIHBvc3RfZGF0YSA9IHNlbGYucmZpbGUucmVhZChpbnQoY29udGVudF9sZW5ndGgpKQorICAgICAgICAgICAgc2VsZi5kb19HRVQoKQorICAgICAgICAgICAgc2VsZi5yZXF1ZXN0cy5hcHBlbmQocG9zdF9kYXRhKQorCisgICAgICAgIGRlZiBzZW5kX2hlYWQoc2VsZik6CisgICAgICAgICAgICBGYWtlSFRUUFJlcXVlc3RIYW5kbGVyLmhlYWRlcnNfcmVjZWl2ZWQgPSBzZWxmLmhlYWRlcnMKKyAgICAgICAgICAgIHNlbGYucmVxdWVzdHMuYXBwZW5kKHNlbGYucGF0aCkKKyAgICAgICAgICAgIHJlc3BvbnNlX2NvZGUsIGhlYWRlcnMsIGJvZHkgPSByZXNwb25zZXMucG9wKDApCisKKyAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZShyZXNwb25zZV9jb2RlKQorCisgICAgICAgICAgICBmb3IgKGhlYWRlciwgdmFsdWUpIGluIGhlYWRlcnM6CisgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcihoZWFkZXIsIHZhbHVlICUgc2VsZi5wb3J0KQorICAgICAgICAgICAgaWYgYm9keToKKyAgICAgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbicpCisgICAgICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJvZHkKKyAgICAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorCisgICAgICAgIGRlZiBsb2dfbWVzc2FnZShzZWxmLCAqYXJncyk6CisgICAgICAgICAgICBwYXNzCisKKworICAgIHJldHVybiBGYWtlSFRUUFJlcXVlc3RIYW5kbGVyCisKKworY2xhc3MgVGVzdFVybG9wZW4oQmFzZVRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB1cmxsaWIyLnVybG9wZW4gdXNpbmcgdGhlIG5ldHdvcmsuCisKKyAgICBUaGVzZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICBBc3N1bWluZyB0aGF0IHRlc3RpbmcgdXNpbmcgZmlsZXMgZG9lcyBhCisgICAgZ29vZCBqb2Igb3ZlcmFsbCBvZiBzb21lIG9mIHRoZSBiYXNpYyBpbnRlcmZhY2UgZmVhdHVyZXMuICBUaGVyZSBhcmUgbm8KKyAgICB0ZXN0cyBleGVyY2lzaW5nIHRoZSBvcHRpb25hbCAnZGF0YScgYW5kICdwcm94aWVzJyBhcmd1bWVudHMuICBObyB0ZXN0cworICAgIGZvciB0cmFuc3BhcmVudCByZWRpcmVjdGlvbiBoYXZlIGJlZW4gd3JpdHRlbi4KKyAgICAiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgcHJveHlfaGFuZGxlciA9IHVybGxpYjIuUHJveHlIYW5kbGVyKHt9KQorICAgICAgICBvcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcihwcm94eV9oYW5kbGVyKQorICAgICAgICB1cmxsaWIyLmluc3RhbGxfb3BlbmVyKG9wZW5lcikKKyAgICAgICAgc3VwZXIoVGVzdFVybG9wZW4sIHNlbGYpLnNldFVwKCkKKworICAgIGRlZiBzdGFydF9zZXJ2ZXIoc2VsZiwgcmVzcG9uc2VzKToKKyAgICAgICAgaGFuZGxlciA9IEdldFJlcXVlc3RIYW5kbGVyKHJlc3BvbnNlcykKKworICAgICAgICBzZWxmLnNlcnZlciA9IExvb3BiYWNrSHR0cFNlcnZlclRocmVhZChoYW5kbGVyKQorICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgIHNlbGYuc2VydmVyLnJlYWR5LndhaXQoKQorICAgICAgICBwb3J0ID0gc2VsZi5zZXJ2ZXIucG9ydAorICAgICAgICBoYW5kbGVyLnBvcnQgPSBwb3J0CisgICAgICAgIHJldHVybiBoYW5kbGVyCisKKworICAgIGRlZiB0ZXN0X3JlZGlyZWN0aW9uKHNlbGYpOgorICAgICAgICBleHBlY3RlZF9yZXNwb25zZSA9ICdXZSBnb3QgaGVyZS4uLicKKyAgICAgICAgcmVzcG9uc2VzID0gWworICAgICAgICAgICAgKDMwMiwgWygnTG9jYXRpb24nLCAnaHR0cDovL2xvY2FsaG9zdDolcy9zb21ld2hlcmVfZWxzZScpXSwgJycpLAorICAgICAgICAgICAgKDIwMCwgW10sIGV4cGVjdGVkX3Jlc3BvbnNlKQorICAgICAgICBdCisKKyAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfc2VydmVyKHJlc3BvbnNlcykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gdXJsbGliMi51cmxvcGVuKCdodHRwOi8vbG9jYWxob3N0OiVzLycgJSBoYW5kbGVyLnBvcnQpCisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdGVkX3Jlc3BvbnNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyLnJlcXVlc3RzLCBbJy8nLCAnL3NvbWV3aGVyZV9lbHNlJ10pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKworCisgICAgZGVmIHRlc3RfNDA0KHNlbGYpOgorICAgICAgICBleHBlY3RlZF9yZXNwb25zZSA9ICdCYWQgYmFkIGJhZC4uLicKKyAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfc2VydmVyKFsoNDA0LCBbXSwgZXhwZWN0ZWRfcmVzcG9uc2UpXSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdXJsbGliMi51cmxvcGVuKCdodHRwOi8vbG9jYWxob3N0OiVzL3dlZWJsZScgJSBoYW5kbGVyLnBvcnQpCisgICAgICAgICAgICBleGNlcHQgdXJsbGliMi5VUkxFcnJvciwgZjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnNDA0IHNob3VsZCByYWlzZSBVUkxFcnJvcicpCisKKyAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0ZWRfcmVzcG9uc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIucmVxdWVzdHMsIFsnL3dlZWJsZSddKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKworICAgIGRlZiB0ZXN0XzIwMChzZWxmKToKKyAgICAgICAgZXhwZWN0ZWRfcmVzcG9uc2UgPSAncHljb24gMjAwOC4uLicKKyAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfc2VydmVyKFsoMjAwLCBbXSwgZXhwZWN0ZWRfcmVzcG9uc2UpXSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gdXJsbGliMi51cmxvcGVuKCdodHRwOi8vbG9jYWxob3N0OiVzL2JpemFycmUnICUgaGFuZGxlci5wb3J0KQorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBleHBlY3RlZF9yZXNwb25zZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5yZXF1ZXN0cywgWycvYml6YXJyZSddKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgdGVzdF8yMDBfd2l0aF9wYXJhbWV0ZXJzKHNlbGYpOgorICAgICAgICBleHBlY3RlZF9yZXNwb25zZSA9ICdweWNvbiAyMDA4Li4uJworICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9zZXJ2ZXIoWygyMDAsIFtdLCBleHBlY3RlZF9yZXNwb25zZSldKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSB1cmxsaWIyLnVybG9wZW4oJ2h0dHA6Ly9sb2NhbGhvc3Q6JXMvYml6YXJyZScgJSBoYW5kbGVyLnBvcnQsICdnZXQ9d2l0aF9mZWVsaW5nJykKKyAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0ZWRfcmVzcG9uc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIucmVxdWVzdHMsIFsnL2JpemFycmUnLCAnZ2V0PXdpdGhfZmVlbGluZyddKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKworICAgIGRlZiB0ZXN0X3NlbmRpbmdfaGVhZGVycyhzZWxmKToKKyAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfc2VydmVyKFsoMjAwLCBbXSwgIndlIGRvbid0IGNhcmUiKV0pCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVxID0gdXJsbGliMi5SZXF1ZXN0KCJodHRwOi8vbG9jYWxob3N0OiVzLyIgJSBoYW5kbGVyLnBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz17J1JhbmdlJzogJ2J5dGVzPTIwLTM5J30pCisgICAgICAgICAgICB1cmxsaWIyLnVybG9wZW4ocmVxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyLmhlYWRlcnNfcmVjZWl2ZWRbJ1JhbmdlJ10sICdieXRlcz0yMC0zOScpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9zZXJ2ZXIoWygyMDAsIFtdLCAid2UgZG9uJ3QgY2FyZSIpXSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcGVuX3VybCA9IHVybGxpYjIudXJsb3BlbigiaHR0cDovL2xvY2FsaG9zdDolcyIgJSBoYW5kbGVyLnBvcnQpCisgICAgICAgICAgICBmb3IgYXR0ciBpbiAoInJlYWQiLCAiY2xvc2UiLCAiaW5mbyIsICJnZXR1cmwiKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihvcGVuX3VybCwgYXR0ciksICJvYmplY3QgcmV0dXJuZWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1cmxvcGVuIGxhY2tzIHRoZSAlcyBhdHRyaWJ1dGUiICUgYXR0cikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3Blbl91cmwucmVhZCgpLCAiY2FsbGluZyAncmVhZCcgZmFpbGVkIikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3Blbl91cmwuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9zZXJ2ZXIoWygyMDAsIFtdLCAid2UgZG9uJ3QgY2FyZSIpXSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcGVuX3VybCA9IHVybGxpYjIudXJsb3BlbigiaHR0cDovL2xvY2FsaG9zdDolcyIgJSBoYW5kbGVyLnBvcnQpCisgICAgICAgICAgICBpbmZvX29iaiA9IG9wZW5fdXJsLmluZm8oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGluZm9fb2JqLCBtaW1ldG9vbHMuTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IHJldHVybmVkIGJ5ICdpbmZvJyBpcyBub3QgYW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YW5jZSBvZiBtaW1ldG9vbHMuTWVzc2FnZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9fb2JqLmdldHN1YnR5cGUoKSwgInBsYWluIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorCisgICAgZGVmIHRlc3RfZ2V0dXJsKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBzYW1lIFVSTCBhcyBvcGVuZWQgaXMgcmV0dXJuZWQgYnkgZ2V0dXJsLgorICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9zZXJ2ZXIoWygyMDAsIFtdLCAid2UgZG9uJ3QgY2FyZSIpXSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcGVuX3VybCA9IHVybGxpYjIudXJsb3BlbigiaHR0cDovL2xvY2FsaG9zdDolcyIgJSBoYW5kbGVyLnBvcnQpCisgICAgICAgICAgICB1cmwgPSBvcGVuX3VybC5nZXR1cmwoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmwsICJodHRwOi8vbG9jYWxob3N0OiVzIiAlIGhhbmRsZXIucG9ydCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorCisKKyAgICBkZWYgdGVzdF9iYWRfYWRkcmVzcyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgcHJvcGVyIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiBjb25uZWN0aW5nIHRvIGEgYm9ndXMKKyAgICAgICAgIyBhZGRyZXNzLgorCisgICAgICAgICMgYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb21tZW50IGJlbG93LCB0aGlzIG1pZ2h0IGZhaWwgd2l0aCBzb21lIElTUCwKKyAgICAgICAgIyBzbyB3ZSBydW4gdGhlIHRlc3Qgb25seSB3aGVuIC11bmV0d29yay8tdWFsbCBpcyBzcGVjaWZpZWQgdG8KKyAgICAgICAgIyBtaXRpZ2F0ZSB0aGUgcHJvYmxlbSBhIGJpdCAoc2VlICMxNzU2NCkKKyAgICAgICAgdGVzdF9zdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHaXZlbiB0aGF0IGJvdGggVmVyaVNpZ24gYW5kIHZhcmlvdXMgSVNQcyBoYXZlIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIHBhc3Qgb3IgYXJlIHByZXNlbnRseSBoaWphY2tpbmcgdmFyaW91cyBpbnZhbGlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgZG9tYWluIG5hbWUgcmVxdWVzdHMgaW4gYW4gYXR0ZW1wdCB0byBib29zdCB0cmFmZmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgdG8gdGhlaXIgb3duIHNpdGVzLCBmaW5kaW5nIGEgZG9tYWluIG5hbWUgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgZm9yIHRoaXMgdGVzdCBpcyBkaWZmaWN1bHQuICBSRkMyNjA2IGxlYWRzIG9uZSB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJlbGlldmUgdGhhdCAnLmludmFsaWQnIHNob3VsZCB3b3JrLCBidXQgZXhwZXJpZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNlZW1lZCB0byBpbmRpY2F0ZSBvdGhlcndpc2UuICBTaW5nbGUgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgVExEcyBhcmUgbGlrZWx5IHRvIHJlbWFpbiBpbnZhbGlkLCBzbyB0aGlzIHNlZW1zIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgYmUgdGhlIGJlc3QgY2hvaWNlLiBUaGUgdHJhaWxpbmcgJy4nIHByZXZlbnRzIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZWxhdGVkIHByb2JsZW06IFRoZSBub3JtYWwgRE5TIHJlc29sdmVyIGFwcGVuZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgZG9tYWluIG5hbWVzIGZyb20gdGhlIHNlYXJjaCBwYXRoIGlmIHRoZXJlIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm8gJy4nIHRoZSBlbmQgYW5kLCBhbmQgaWYgb25lIG9mIHRob3NlIGRvbWFpbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbXBsZW1lbnRzIGEgJyonIHJ1bGUgYSByZXN1bHQgaXMgcmV0dXJuZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgSG93ZXZlciwgbm9uZSBvZiB0aGlzIHdpbGwgcHJldmVudCB0aGUgdGVzdCBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmFpbGluZyBpZiB0aGUgSVNQIGhpamFja3MgYWxsIGludmFsaWQgZG9tYWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVxdWVzdHMuICBUaGUgcmVhbCBzb2x1dGlvbiB3b3VsZCBiZSB0byBiZSBhYmxlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGFyYW1ldGVyaXplIHRoZSBmcmFtZXdvcmsgd2l0aCBhIG1vY2sgcmVzb2x2ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVybGxpYjIudXJsb3BlbiwgImh0dHA6Ly9zYWRmbGtqc2FzZi5pLm52YWxpLmQuLyIpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRpb24oc2VsZik6CisgICAgICAgIGV4cGVjdGVkX3Jlc3BvbnNlID0gInB5Y29uIDIwMDguLi4iCisgICAgICAgIGhhbmRsZXIgPSBzZWxmLnN0YXJ0X3NlcnZlcihbKDIwMCwgW10sIGV4cGVjdGVkX3Jlc3BvbnNlKV0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSB1cmxsaWIyLnVybG9wZW4oImh0dHA6Ly9sb2NhbGhvc3Q6JXMiICUgaGFuZGxlci5wb3J0KQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGV4cGVjdGVkX3Jlc3BvbnNlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgenRlc3RfbGluZV9pdGVyYXRpb24oc2VsZik6CisgICAgICAgIGxpbmVzID0gWyJXZVxuIiwgImdvdFxuIiwgImhlcmVcbiIsICJ2ZXJ5bG9uZyAiICogODE5MiArICJcbiJdCisgICAgICAgIGV4cGVjdGVkX3Jlc3BvbnNlID0gIiIuam9pbihsaW5lcykKKyAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfc2VydmVyKFsoMjAwLCBbXSwgZXhwZWN0ZWRfcmVzcG9uc2UpXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHVybGxpYjIudXJsb3BlbigiaHR0cDovL2xvY2FsaG9zdDolcyIgJSBoYW5kbGVyLnBvcnQpCisgICAgICAgICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKGRhdGEpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgbGluZXNbaW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZldGNoZWQgbGluZSBudW1iZXIgJXMgZG9lc24ndCBtYXRjaCBleHBlY3RlZDpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgRXhwZWN0ZWQgbGVuZ3RoIHdhcyAlcywgZ290ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5kZXgsIGxlbihsaW5lc1tpbmRleF0pLCBsZW4obGluZSkpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5kZXggKyAxLCBsZW4obGluZXMpKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgIyBXZSB3aWxsIE5PVCBkZXBlbmQgb24gdGhlIG5ldHdvcmsgcmVzb3VyY2UgZmxhZworICAgICMgKExpYi90ZXN0L3JlZ3J0ZXN0LnB5IC11IG5ldHdvcmspIHNpbmNlIGFsbCB0ZXN0cyBoZXJlIGFyZSBvbmx5CisgICAgIyBsb2NhbGhvc3QuICBIb3dldmVyLCBpZiB0aGlzIGlzIGEgYmFkIHJhdGlvbmFsZSwgdGhlbiB1bmNvbW1lbnQKKyAgICAjIHRoZSBuZXh0IGxpbmUuCisgICAgI3Rlc3Rfc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCisKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFByb3h5QXV0aFRlc3RzLCBUZXN0VXJsb3BlbikKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ3M2FjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkKQEAgLTAsMCArMSwzMzIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QudGVzdF91cmxsaWIyIGltcG9ydCBzYW5lcGF0aG5hbWUydXJsCisKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB1cmxsaWIyCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworVElNRU9VVCA9IDYwICAjIHNlY29uZHMKKworCitkZWYgX3JldHJ5X3RocmljZShmdW5jLCBleGMsICphcmdzLCAqKmt3YXJncyk6CisgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IGV4YywgbGFzdF9leGM6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByYWlzZQorICAgIHJhaXNlIGxhc3RfZXhjCisKK2RlZiBfd3JhcF93aXRoX3JldHJ5X3RocmljZShmdW5jLCBleGMpOgorICAgIGRlZiB3cmFwcGVkKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBfcmV0cnlfdGhyaWNlKGZ1bmMsIGV4YywgKmFyZ3MsICoqa3dhcmdzKQorICAgIHJldHVybiB3cmFwcGVkCisKKyMgQ29ubmVjdGluZyB0byByZW1vdGUgaG9zdHMgaXMgZmxha3kuICBNYWtlIGl0IG1vcmUgcm9idXN0IGJ5IHJldHJ5aW5nCisjIHRoZSBjb25uZWN0aW9uIHNldmVyYWwgdGltZXMuCitfdXJsb3Blbl93aXRoX3JldHJ5ID0gX3dyYXBfd2l0aF9yZXRyeV90aHJpY2UodXJsbGliMi51cmxvcGVuLCB1cmxsaWIyLlVSTEVycm9yKQorCisKK2NsYXNzIEF1dGhUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdXJsbGliMiBhdXRoZW50aWNhdGlvbiBmZWF0dXJlcy4iIiIKKworIyMgRGlzYWJsZWQgYXQgdGhlIG1vbWVudCBzaW5jZSB0aGVyZSBpcyBubyBwYWdlIHVuZGVyIHB5dGhvbi5vcmcgd2hpY2gKKyMjIGNvdWxkIGJlIHVzZWQgdG8gSFRUUCBhdXRoZW50aWNhdGlvbi4KKyMKKyMgICAgZGVmIHRlc3RfYmFzaWNfYXV0aChzZWxmKToKKyMgICAgICAgIGltcG9ydCBodHRwbGliCisjCisjICAgICAgICB0ZXN0X3VybCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvdGVzdC90ZXN0X3VybGxpYjIvYmFzaWNfYXV0aCIKKyMgICAgICAgIHRlc3RfaG9zdHBvcnQgPSAid3d3LnB5dGhvbi5vcmciCisjICAgICAgICB0ZXN0X3JlYWxtID0gJ1Rlc3QgUmVhbG0nCisjICAgICAgICB0ZXN0X3VzZXIgPSAndGVzdC50ZXN0X3VybGxpYjJuZXQnCisjICAgICAgICB0ZXN0X3Bhc3N3b3JkID0gJ2JsYWgnCisjCisjICAgICAgICAjIGZhaWx1cmUKKyMgICAgICAgIHRyeToKKyMgICAgICAgICAgICBfdXJsb3Blbl93aXRoX3JldHJ5KHRlc3RfdXJsKQorIyAgICAgICAgZXhjZXB0IHVybGxpYjIuSFRUUEVycm9yLCBleGM6CisjICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGMuY29kZSwgNDAxKQorIyAgICAgICAgZWxzZToKKyMgICAgICAgICAgICBzZWxmLmZhaWwoInVybG9wZW4oKSBzaG91bGQgaGF2ZSBmYWlsZWQgd2l0aCA0MDEiKQorIworIyAgICAgICAgIyBzdWNjZXNzCisjICAgICAgICBhdXRoX2hhbmRsZXIgPSB1cmxsaWIyLkhUVFBCYXNpY0F1dGhIYW5kbGVyKCkKKyMgICAgICAgIGF1dGhfaGFuZGxlci5hZGRfcGFzc3dvcmQodGVzdF9yZWFsbSwgdGVzdF9ob3N0cG9ydCwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF91c2VyLCB0ZXN0X3Bhc3N3b3JkKQorIyAgICAgICAgb3BlbmVyID0gdXJsbGliMi5idWlsZF9vcGVuZXIoYXV0aF9oYW5kbGVyKQorIyAgICAgICAgZiA9IG9wZW5lci5vcGVuKCdodHRwOi8vbG9jYWxob3N0LycpCisjICAgICAgICByZXNwb25zZSA9IF91cmxvcGVuX3dpdGhfcmV0cnkoImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKQorIworIyAgICAgICAgIyBUaGUgJ3VzZXJpbmZvJyBVUkwgY29tcG9uZW50IGlzIGRlcHJlY2F0ZWQgYnkgUkZDIDM5ODYgZm9yIHNlY3VyaXR5CisjICAgICAgICAjIHJlYXNvbnMsIGxldCdzIG5vdCBpbXBsZW1lbnQgaXQhICAoaXQncyBhbHJlYWR5IGltcGxlbWVudGVkIGZvciBwcm94eQorIyAgICAgICAgIyBzcGVjaWZpY2F0aW9uIHN0cmluZ3MgKHRoYXQgaXMsIFVSTHMgb3IgYXV0aG9yaXRpZXMgc3BlY2lmeWluZyBhCisjICAgICAgICAjIHByb3h5KSwgc28gd2UgbXVzdCBrZWVwIHRoYXQpCisjICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhodHRwbGliLkludmFsaWRVUkwsCisjICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxsaWIyLnVybG9wZW4sICJodHRwOi8vZXZpbDp0aGluZ0BleGFtcGxlLmNvbSIpCisKKworY2xhc3MgQ2xvc2VTb2NrZXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBpbXBvcnQgaHR0cGxpYgorCisgICAgICAgICMgY2FsbGluZyAuY2xvc2UoKSBvbiB1cmxsaWIyJ3MgcmVzcG9uc2Ugb2JqZWN0cyBzaG91bGQgY2xvc2UgdGhlCisgICAgICAgICMgdW5kZXJseWluZyBzb2NrZXQKKworICAgICAgICAjIGRlbHZlIGRlZXAgaW50byByZXNwb25zZSB0byBmZXRjaCBzb2NrZXQuX3NvY2tldG9iamVjdAorICAgICAgICByZXNwb25zZSA9IF91cmxvcGVuX3dpdGhfcmV0cnkoImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKQorICAgICAgICBhYnVzZWRfZmlsZW9iamVjdCA9IHJlc3BvbnNlLmZwCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhYnVzZWRfZmlsZW9iamVjdC5fX2NsYXNzX18gaXMgc29ja2V0Ll9maWxlb2JqZWN0KQorICAgICAgICBodHRwcmVzcG9uc2UgPSBhYnVzZWRfZmlsZW9iamVjdC5fc29jaworICAgICAgICBzZWxmLmFzc2VydFRydWUoaHR0cHJlc3BvbnNlLl9fY2xhc3NfXyBpcyBodHRwbGliLkhUVFBSZXNwb25zZSkKKyAgICAgICAgZmlsZW9iamVjdCA9IGh0dHByZXNwb25zZS5mcAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZW9iamVjdC5fX2NsYXNzX18gaXMgc29ja2V0Ll9maWxlb2JqZWN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZmlsZW9iamVjdC5jbG9zZWQpCisgICAgICAgIHJlc3BvbnNlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVvYmplY3QuY2xvc2VkKQorCitjbGFzcyBPdGhlck5ldHdvcmtUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiAwOiAgIyBmb3IgZGVidWdnaW5nCisgICAgICAgICAgICBpbXBvcnQgbG9nZ2luZworICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInRlc3RfdXJsbGliMm5ldCIpCisgICAgICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKSkKKworICAgICMgWFhYIFRoZSByZXN0IG9mIHRoZXNlIHRlc3RzIGFyZW4ndCB2ZXJ5IGdvb2QgLS0gdGhleSBkb24ndCBjaGVjayBtdWNoLgorICAgICMgVGhleSBkbyBzb21ldGltZXMgY2F0Y2ggc29tZSBtYWpvciBkaXNhc3RlcnMsIHRob3VnaC4KKworICAgIGRlZiB0ZXN0X2Z0cChzZWxmKToKKyAgICAgICAgdXJscyA9IFsKKyAgICAgICAgICAgICdmdHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL1JFQURNRScsCisgICAgICAgICAgICAnZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9ub24tZXhpc3RlbnQtZmlsZScsCisgICAgICAgICAgICAjJ2Z0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9sZWVub3gva2VybmVsL3Rlc3QnLAorICAgICAgICAgICAgJ2Z0cDovL2dhdGVrZWVwZXIucmVzZWFyY2guY29tcGFxLmNvbS9wdWIvREVDL1NSQycKKyAgICAgICAgICAgICAgICAnL3Jlc2VhcmNoLXJlcG9ydHMvMDBSRUFETUUtTGVnYWwtUnVsZXMtUmVncycsCisgICAgICAgICAgICBdCisgICAgICAgIHNlbGYuX3Rlc3RfdXJscyh1cmxzLCBzZWxmLl9leHRyYV9oYW5kbGVycygpKQorCisgICAgZGVmIHRlc3RfZmlsZShzZWxmKToKKyAgICAgICAgVEVTVEZOID0gdGVzdF9zdXBwb3J0LlRFU1RGTgorICAgICAgICBmID0gb3BlbihURVNURk4sICd3JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi53cml0ZSgnaGkgdGhlcmVcbicpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHVybHMgPSBbCisgICAgICAgICAgICAgICAgJ2ZpbGU6JytzYW5lcGF0aG5hbWUydXJsKG9zLnBhdGguYWJzcGF0aChURVNURk4pKSwKKyAgICAgICAgICAgICAgICAoJ2ZpbGU6Ly8vbm9uc2Vuc2VuYW1lL2V0Yy9wYXNzd2QnLCBOb25lLCB1cmxsaWIyLlVSTEVycm9yKSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICBzZWxmLl90ZXN0X3VybHModXJscywgc2VsZi5fZXh0cmFfaGFuZGxlcnMoKSwgcmV0cnk9VHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZShURVNURk4pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdXJsbGliMi51cmxvcGVuLCcuL3JlbGF0aXZlX3BhdGgvdG8vZmlsZScpCisKKyAgICAjIFhYWCBGb2xsb3dpbmcgdGVzdCBkZXBlbmRzIG9uIG1hY2hpbmUgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgaW50ZXJuYWwKKyAgICAjIHRvIENOUkkuICBOZWVkIHRvIHNldCB1cCBhIHB1YmxpYyBzZXJ2ZXIgd2l0aCB0aGUgcmlnaHQgYXV0aGVudGljYXRpb24KKyAgICAjIGNvbmZpZ3VyYXRpb24gZm9yIHRlc3QgcHVycG9zZXMuCisKKyMjICAgICBkZWYgdGVzdF9jbnJpKHNlbGYpOgorIyMgICAgICAgICBpZiBzb2NrZXQuZ2V0aG9zdG5hbWUoKSA9PSAnYml0ZGlkZGxlJzoKKyMjICAgICAgICAgICAgIGxvY2FsaG9zdCA9ICdiaXRkaWRkbGUuY25yaS5yZXN0b24udmEudXMnCisjIyAgICAgICAgIGVsaWYgc29ja2V0LmdldGhvc3RuYW1lKCkgPT0gJ2JpdGRpZGRsZS5jb25jZW50cmljLm5ldCc6CisjIyAgICAgICAgICAgICBsb2NhbGhvc3QgPSAnbG9jYWxob3N0JworIyMgICAgICAgICBlbHNlOgorIyMgICAgICAgICAgICAgbG9jYWxob3N0ID0gTm9uZQorIyMgICAgICAgICBpZiBsb2NhbGhvc3QgaXMgbm90IE5vbmU6CisjIyAgICAgICAgICAgICB1cmxzID0gWworIyMgICAgICAgICAgICAgICAgICdmaWxlOi8vJXMvZXRjL3Bhc3N3ZCcgJSBsb2NhbGhvc3QsCisjIyAgICAgICAgICAgICAgICAgJ2h0dHA6Ly8lcy9zaW1wbGUvJyAlIGxvY2FsaG9zdCwKKyMjICAgICAgICAgICAgICAgICAnaHR0cDovLyVzL2RpZ2VzdC8nICUgbG9jYWxob3N0LAorIyMgICAgICAgICAgICAgICAgICdodHRwOi8vJXMvbm90L2ZvdW5kLmgnICUgbG9jYWxob3N0LAorIyMgICAgICAgICAgICAgICAgIF0KKworIyMgICAgICAgICAgICAgYmF1dGggPSBIVFRQQmFzaWNBdXRoSGFuZGxlcigpCisjIyAgICAgICAgICAgICBiYXV0aC5hZGRfcGFzc3dvcmQoJ2Jhc2ljX3Rlc3RfcmVhbG0nLCBsb2NhbGhvc3QsICdqaHlsdG9uJywKKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFzc3dvcmQnKQorIyMgICAgICAgICAgICAgZGF1dGggPSBIVFRQRGlnZXN0QXV0aEhhbmRsZXIoKQorIyMgICAgICAgICAgICAgZGF1dGguYWRkX3Bhc3N3b3JkKCdkaWdlc3RfdGVzdF9yZWFsbScsIGxvY2FsaG9zdCwgJ2poeWx0b24nLAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzd29yZCcpCisKKyMjICAgICAgICAgICAgIHNlbGYuX3Rlc3RfdXJscyh1cmxzLCBzZWxmLl9leHRyYV9oYW5kbGVycygpK1tiYXV0aCwgZGF1dGhdKQorCisgICAgZGVmIHRlc3RfdXJsd2l0aGZyYWcoc2VsZik6CisgICAgICAgIHVybHdpdGhfZnJhZyA9ICJodHRwOi8vZG9jcy5weXRob24ub3JnLzIvZ2xvc3NhcnkuaHRtbCNnbG9zc2FyeSIKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybHdpdGhfZnJhZyk6CisgICAgICAgICAgICByZXEgPSB1cmxsaWIyLlJlcXVlc3QodXJsd2l0aF9mcmFnKQorICAgICAgICAgICAgcmVzID0gdXJsbGliMi51cmxvcGVuKHJlcSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLmdldHVybCgpLAorICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjZ2xvc3NhcnkiKQorCisgICAgZGVmIHRlc3RfZmlsZW5vKHNlbGYpOgorICAgICAgICByZXEgPSB1cmxsaWIyLlJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZyIpCisgICAgICAgIG9wZW5lciA9IHVybGxpYjIuYnVpbGRfb3BlbmVyKCkKKyAgICAgICAgcmVzID0gb3BlbmVyLm9wZW4ocmVxKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXMuZmlsZW5vKCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJIVFRQUmVzcG9uc2Ugb2JqZWN0IHNob3VsZCByZXR1cm4gYSB2YWxpZCBmaWxlbm8iKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcmVzLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2N1c3RvbV9oZWFkZXJzKHNlbGYpOgorICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CisgICAgICAgICAgICBvcGVuZXIgPSB1cmxsaWIyLmJ1aWxkX29wZW5lcigpCisgICAgICAgICAgICByZXF1ZXN0ID0gdXJsbGliMi5SZXF1ZXN0KHVybCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVxdWVzdC5oZWFkZXJfaXRlbXMoKSkKKyAgICAgICAgICAgIG9wZW5lci5vcGVuKHJlcXVlc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVxdWVzdC5oZWFkZXJfaXRlbXMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXF1ZXN0Lmhhc19oZWFkZXIoJ1VzZXItYWdlbnQnKSkKKyAgICAgICAgICAgIHJlcXVlc3QuYWRkX2hlYWRlcignVXNlci1BZ2VudCcsJ1Rlc3QtQWdlbnQnKQorICAgICAgICAgICAgb3BlbmVyLm9wZW4ocmVxdWVzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxdWVzdC5nZXRfaGVhZGVyKCdVc2VyLWFnZW50JyksJ1Rlc3QtQWdlbnQnKQorCisgICAgZGVmIHRlc3Rfc2l0ZXNfbm9fY29ubmVjdGlvbl9jbG9zZShzZWxmKToKKyAgICAgICAgIyBTb21lIHNpdGVzIGRvIG5vdCBzZW5kIENvbm5lY3Rpb246IGNsb3NlIGhlYWRlci4KKyAgICAgICAgIyBWZXJpZnkgdGhhdCB0aG9zZSB3b3JrIHByb3Blcmx5LiAoI2lzc3VlMTI1NzYpCisKKyAgICAgICAgVVJMID0gJ2h0dHA6Ly93d3cuaW1kYi5jb20nICMgTm8gQ29ubmVjdGlvbjpjbG9zZQorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoVVJMKToKKyAgICAgICAgICAgIHJlcSA9IHVybGxpYjIudXJsb3BlbihVUkwpCisgICAgICAgICAgICByZXMgPSByZXEucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzKQorCisgICAgZGVmIF90ZXN0X3VybHMoc2VsZiwgdXJscywgaGFuZGxlcnMsIHJldHJ5PVRydWUpOgorICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICBpbXBvcnQgbG9nZ2luZworICAgICAgICBkZWJ1ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0ZXN0X3VybGxpYjIiKS5kZWJ1ZworCisgICAgICAgIHVybG9wZW4gPSB1cmxsaWIyLmJ1aWxkX29wZW5lcigqaGFuZGxlcnMpLm9wZW4KKyAgICAgICAgaWYgcmV0cnk6CisgICAgICAgICAgICB1cmxvcGVuID0gX3dyYXBfd2l0aF9yZXRyeV90aHJpY2UodXJsb3BlbiwgdXJsbGliMi5VUkxFcnJvcikKKworICAgICAgICBmb3IgdXJsIGluIHVybHM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHVybCwgdHVwbGUpOgorICAgICAgICAgICAgICAgIHVybCwgcmVxLCBleHBlY3RlZF9lcnIgPSB1cmwKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVxID0gZXhwZWN0ZWRfZXJyID0gTm9uZQorICAgICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CisgICAgICAgICAgICAgICAgZGVidWcodXJsKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZiA9IHVybG9wZW4odXJsLCByZXEsIFRJTUVPVVQpCisgICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhlcnIpCisgICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdGVkX2VycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgiRGlkbid0IGdldCBleHBlY3RlZCBlcnJvcihzKSAlcyBmb3IgJXMgJXMsIGdvdCAlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRfZXJyLCB1cmwsIHJlcSwgdHlwZShlcnIpLCBlcnIpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVyciwgZXhwZWN0ZWRfZXJyLCBtc2cpCisgICAgICAgICAgICAgICAgZXhjZXB0IHVybGxpYjIuVVJMRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVyclswXSwgc29ja2V0LnRpbWVvdXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiPHRpbWVvdXQ6ICVzPiIgJSB1cmwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoInJlYWQgJWQgYnl0ZXMiICUgbGVuKGJ1ZikpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgIjx0aW1lb3V0OiAlcz4iICUgdXJsCisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZGVidWcoIioqKioqKioqIG5leHQgdXJsIGNvbWluZyB1cC4uLiIpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKworICAgIGRlZiBfZXh0cmFfaGFuZGxlcnMoc2VsZik6CisgICAgICAgIGhhbmRsZXJzID0gW10KKworICAgICAgICBjZmggPSB1cmxsaWIyLkNhY2hlRlRQSGFuZGxlcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjZmguY2xlYXJfY2FjaGUpCisgICAgICAgIGNmaC5zZXRUaW1lb3V0KDEpCisgICAgICAgIGhhbmRsZXJzLmFwcGVuZChjZmgpCisKKyAgICAgICAgcmV0dXJuIGhhbmRsZXJzCisKKworY2xhc3MgVGltZW91dFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2h0dHBfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQorICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5weXRob24ub3JnIgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkodXJsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUuZnAuX3NvY2suZnAuX3NvY2suZ2V0dGltZW91dCgpIGlzIE5vbmUpCisKKyAgICBkZWYgdGVzdF9odHRwX2RlZmF1bHRfdGltZW91dChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmciCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwpOgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDYwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHVybCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZnAuX3NvY2suZnAuX3NvY2suZ2V0dGltZW91dCgpLCA2MCkKKworICAgIGRlZiB0ZXN0X2h0dHBfbm9fdGltZW91dChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmciCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwpOgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDYwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHVybCwgdGltZW91dD1Ob25lKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1LmZwLl9zb2NrLmZwLl9zb2NrLmdldHRpbWVvdXQoKSBpcyBOb25lKQorCisgICAgZGVmIHRlc3RfaHR0cF90aW1lb3V0KHNlbGYpOgorICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5weXRob24ub3JnIgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKKyAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHVybCwgdGltZW91dD0xMjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZnAuX3NvY2suZnAuX3NvY2suZ2V0dGltZW91dCgpLCAxMjApCisKKyAgICBGVFBfSE9TVCA9ICJmdHA6Ly9mdHAubWlycm9yLm5sL3B1Yi9nbnUvIgorCisgICAgZGVmIHRlc3RfZnRwX2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYuRlRQX0hPU1QsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICAgICB1ID0gX3VybG9wZW5fd2l0aF9yZXRyeShzZWxmLkZUUF9IT1NUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUuZnAuZnAuX3NvY2suZ2V0dGltZW91dCgpIGlzIE5vbmUpCisKKyAgICBkZWYgdGVzdF9mdHBfZGVmYXVsdF90aW1lb3V0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYuRlRQX0hPU1QpOgorICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDYwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHNlbGYuRlRQX0hPU1QpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmZwLmZwLl9zb2NrLmdldHRpbWVvdXQoKSwgNjApCisKKyAgICBkZWYgdGVzdF9mdHBfbm9fdGltZW91dChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChzZWxmLkZUUF9IT1NUKToKKyAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCg2MCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1ID0gX3VybG9wZW5fd2l0aF9yZXRyeShzZWxmLkZUUF9IT1NULCB0aW1lb3V0PU5vbmUpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUuZnAuZnAuX3NvY2suZ2V0dGltZW91dCgpIGlzIE5vbmUpCisKKyAgICBkZWYgdGVzdF9mdHBfdGltZW91dChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYuRlRQX0hPU1QpOgorICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkoc2VsZi5GVFBfSE9TVCwgdGltZW91dD02MCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mcC5mcC5fc29jay5nZXR0aW1lb3V0KCksIDYwKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucmVxdWlyZXMoIm5ldHdvcmsiKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoQXV0aFRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXJOZXR3b3JrVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbG9zZVNvY2tldFRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lb3V0VGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkODgzMzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91cmxsaWJuZXQucHkKQEAgLTAsMCArMSwyMTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB1cmxsaWIKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKKworbWltZXRvb2xzID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoIm1pbWV0b29scyIsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKworCitkZWYgX29wZW5fd2l0aF9yZXRyeShmdW5jLCBob3N0LCAqYXJncywgKiprd2FyZ3MpOgorICAgICMgQ29ubmVjdGluZyB0byByZW1vdGUgaG9zdHMgaXMgZmxha3kuICBNYWtlIGl0IG1vcmUgcm9idXN0CisgICAgIyBieSByZXRyeWluZyB0aGUgY29ubmVjdGlvbiBzZXZlcmFsIHRpbWVzLgorICAgIGZvciBpIGluIHJhbmdlKDMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZnVuYyhob3N0LCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBsYXN0X2V4YzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgcmFpc2UgbGFzdF9leGMKKworCitjbGFzcyBVUkxUaW1lb3V0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBUSU1FT1VUID0gMTAuMAorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoc2VsZi5USU1FT1VUKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKworICAgIGRlZiB0ZXN0VVJMcmVhZChzZWxmKToKKyAgICAgICAgZiA9IF9vcGVuX3dpdGhfcmV0cnkodXJsbGliLnVybG9wZW4sICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikKKyAgICAgICAgeCA9IGYucmVhZCgpCisKK2NsYXNzIHVybG9wZW5OZXR3b3JrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHVybGxpYi51cmxvcGVuIHVzaW5nIHRoZSBuZXR3b3JrLgorCisgICAgVGhlc2UgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgQXNzdW1pbmcgdGhhdCB0ZXN0aW5nIHVzaW5nIGZpbGVzIGRvZXMgYQorICAgIGdvb2Qgam9iIG92ZXJhbGwgb2Ygc29tZSBvZiB0aGUgYmFzaWMgaW50ZXJmYWNlIGZlYXR1cmVzLiAgVGhlcmUgYXJlIG5vCisgICAgdGVzdHMgZXhlcmNpc2luZyB0aGUgb3B0aW9uYWwgJ2RhdGEnIGFuZCAncHJveGllcycgYXJndW1lbnRzLiAgTm8gdGVzdHMKKyAgICBmb3IgdHJhbnNwYXJlbnQgcmVkaXJlY3Rpb24gaGF2ZSBiZWVuIHdyaXR0ZW4uCisKKyAgICBzZXRVcCBpcyBub3QgdXNlZCBmb3IgYWx3YXlzIGNvbnN0cnVjdGluZyBhIGNvbm5lY3Rpb24gdG8KKyAgICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvIHNpbmNlIHRoZXJlIGEgZmV3IHRlc3RzIHRoYXQgZG9uJ3QgdXNlIHRoYXQgYWRkcmVzcworICAgIGFuZCBtYWtpbmcgYSBjb25uZWN0aW9uIGlzIGV4cGVuc2l2ZSBlbm91Z2ggdG8gd2FycmFudCBtaW5pbWl6aW5nIHVubmVlZGVkCisgICAgY29ubmVjdGlvbnMuCisKKyAgICAiIiIKKworICAgIGRlZiB1cmxvcGVuKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuIF9vcGVuX3dpdGhfcmV0cnkodXJsbGliLnVybG9wZW4sICphcmdzKQorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMgU2ltcGxlIHRlc3QgZXhwZWN0ZWQgdG8gcGFzcy4KKyAgICAgICAgb3Blbl91cmwgPSBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKQorICAgICAgICBmb3IgYXR0ciBpbiAoInJlYWQiLCAicmVhZGxpbmUiLCAicmVhZGxpbmVzIiwgImZpbGVubyIsICJjbG9zZSIsCisgICAgICAgICAgICAgICAgICAgICAiaW5mbyIsICJnZXR1cmwiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG9wZW5fdXJsLCBhdHRyKSwgIm9iamVjdCByZXR1cm5lZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXJsb3BlbiBsYWNrcyB0aGUgJXMgYXR0cmlidXRlIiAlIGF0dHIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVuX3VybC5yZWFkKCksICJjYWxsaW5nICdyZWFkJyBmYWlsZWQiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3Blbl91cmwuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYm90aCByZWFkbGluZSBhbmQgcmVhZGxpbmVzLgorICAgICAgICBvcGVuX3VybCA9IHNlbGYudXJsb3BlbigiaHR0cDovL3d3dy5weXRob24ub3JnLyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvcGVuX3VybC5yZWFkbGluZSgpLCBiYXNlc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkbGluZSBkaWQgbm90IHJldHVybiBhIHN0cmluZyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob3Blbl91cmwucmVhZGxpbmVzKCksIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWRsaW5lcyBkaWQgbm90IHJldHVybiBhIGxpc3QiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3Blbl91cmwuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfaW5mbyhzZWxmKToKKyAgICAgICAgIyBUZXN0ICdpbmZvJy4KKyAgICAgICAgb3Blbl91cmwgPSBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbmZvX29iaiA9IG9wZW5fdXJsLmluZm8oKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3Blbl91cmwuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGluZm9fb2JqLCBtaW1ldG9vbHMuTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IHJldHVybmVkIGJ5ICdpbmZvJyBpcyBub3QgYW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YW5jZSBvZiBtaW1ldG9vbHMuTWVzc2FnZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9fb2JqLmdldHN1YnR5cGUoKSwgImh0bWwiKQorCisgICAgZGVmIHRlc3RfZ2V0dXJsKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBzYW1lIFVSTCBhcyBvcGVuZWQgaXMgcmV0dXJuZWQgYnkgZ2V0dXJsLgorICAgICAgICBVUkwgPSAiaHR0cDovL3d3dy5weXRob24ub3JnLyIKKyAgICAgICAgb3Blbl91cmwgPSBzZWxmLnVybG9wZW4oVVJMKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBnb3R0ZW5fdXJsID0gb3Blbl91cmwuZ2V0dXJsKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9wZW5fdXJsLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3R0ZW5fdXJsLCBVUkwpCisKKyAgICBkZWYgdGVzdF9nZXRjb2RlKHNlbGYpOgorICAgICAgICAjIHRlc3QgZ2V0Y29kZSgpIHdpdGggdGhlIGZhbmN5IG9wZW5lciB0byBnZXQgNDA0IGVycm9yIGNvZGVzCisgICAgICAgIFVSTCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvWFhYaW52YWxpZFhYWCIKKyAgICAgICAgb3Blbl91cmwgPSB1cmxsaWIuRmFuY3lVUkxvcGVuZXIoKS5vcGVuKFVSTCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29kZSA9IG9wZW5fdXJsLmdldGNvZGUoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3Blbl91cmwuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUsIDQwNCkKKworICAgIGRlZiB0ZXN0X2ZpbGVubyhzZWxmKToKKyAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywpIG9yCisgICAgICAgICAgICAgICAgbm90IGhhc2F0dHIob3MsICdmZG9wZW4nKSk6CisgICAgICAgICAgICAjIE9uIFdpbmRvd3MsIHNvY2tldCBoYW5kbGVzIGFyZSBub3QgZmlsZSBkZXNjcmlwdG9yczsgdGhpcworICAgICAgICAgICAgIyB0ZXN0IGNhbid0IHBhc3Mgb24gV2luZG93cy4KKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIE1ha2Ugc3VyZSBmZCByZXR1cm5lZCBieSBmaWxlbm8gaXMgdmFsaWQuCisgICAgICAgIG9wZW5fdXJsID0gc2VsZi51cmxvcGVuKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikKKyAgICAgICAgZmQgPSBvcGVuX3VybC5maWxlbm8oKQorICAgICAgICBGSUxFID0gb3MuZmRvcGVuKGZkKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoRklMRS5yZWFkKCksICJyZWFkaW5nIGZyb20gZmlsZSBjcmVhdGVkIHVzaW5nIGZkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkIGJ5IGZpbGVubyBmYWlsZWQiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgRklMRS5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9iYWRfYWRkcmVzcyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgcHJvcGVyIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiBjb25uZWN0aW5nIHRvIGEgYm9ndXMKKyAgICAgICAgIyBhZGRyZXNzLgorICAgICAgICBib2d1c19kb21haW4gPSAic2FkZmxranNhc2YuaS5udmFsaS5kIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShib2d1c19kb21haW4pCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZ2FpZXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoaXMgaGFwcGVucyB3aXRoIHNvbWUgb3ZlcnplYWxvdXMgRE5TIHByb3ZpZGVycyBzdWNoIGFzIE9wZW5ETlMKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIiVyIHNob3VsZCBub3QgcmVzb2x2ZSBmb3IgdGVzdCB0byB3b3JrIiAlIGJvZ3VzX2RvbWFpbikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTRiBwYXRjaCA4MDk5MTU6ICBJbiBTZXAgMjAwMywgVmVyaVNpZ24gc3RhcnRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAjIGhpZ2hqYWNraW5nIGludmFsaWQgLmNvbSBhbmQgLm5ldCBhZGRyZXNzZXMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBib29zdCB0cmFmZmljIHRvIHRoZWlyIG93biBzaXRlLiAgVGhpcyB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RhcnRlZCBmYWlsaW5nIHRoZW4uICBPbmUgaG9wZXMgdGhlIC5pbnZhbGlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgZG9tYWluIHdpbGwgYmUgc3BhcmVkIHRvIHNlcnZlIGl0cyBkZWZpbmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgcHVycG9zZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1cmxsaWIudXJsb3BlbiwgImh0dHA6Ly93d3cuc2FkZmxranNhc2FkZi5jb20vIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsbGliLnVybG9wZW4sICJodHRwOi8vc2FkZmxranNhc2YuaS5udmFsaS5kLyIpCisKK2NsYXNzIHVybHJldHJpZXZlTmV0d29ya1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB1cmxsaWIudXJscmV0cmlldmUgdXNpbmcgdGhlIG5ldHdvcmsuIiIiCisKKyAgICBkZWYgdXJscmV0cmlldmUoc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gX29wZW5fd2l0aF9yZXRyeSh1cmxsaWIudXJscmV0cmlldmUsICphcmdzKQorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMgVGVzdCBiYXNpYyBmdW5jdGlvbmFsaXR5LgorICAgICAgICBmaWxlX2xvY2F0aW9uLGluZm8gPSBzZWxmLnVybHJldHJpZXZlKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZpbGVfbG9jYXRpb24pLCAiZmlsZSBsb2NhdGlvbiByZXR1cm5lZCBieSIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgdXJscmV0cmlldmUgaXMgbm90IGEgdmFsaWQgcGF0aCIpCisgICAgICAgIEZJTEUgPSBmaWxlKGZpbGVfbG9jYXRpb24pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGSUxFLnJlYWQoKSwgInJlYWRpbmcgZnJvbSB0aGUgZmlsZSBsb2NhdGlvbiByZXR1cm5lZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIGJ5IHVybHJldHJpZXZlIGZhaWxlZCIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBGSUxFLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnVubGluayhmaWxlX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY2lmaWVkX3BhdGgoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgc3BlY2lmeWluZyB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gd3JpdGUgdG8gd29ya3MuCisgICAgICAgIGZpbGVfbG9jYXRpb24saW5mbyA9IHNlbGYudXJscmV0cmlldmUoImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9sb2NhdGlvbiwgdGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZpbGVfbG9jYXRpb24pKQorICAgICAgICBGSUxFID0gZmlsZShmaWxlX2xvY2F0aW9uKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoRklMRS5yZWFkKCksICJyZWFkaW5nIGZyb20gdGVtcG9yYXJ5IGZpbGUgZmFpbGVkIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIEZJTEUuY2xvc2UoKQorICAgICAgICAgICAgb3MudW5saW5rKGZpbGVfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9oZWFkZXIoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGhlYWRlciByZXR1cm5lZCBhcyAybmQgdmFsdWUgZnJvbSB1cmxyZXRyaWV2ZSBpcyBnb29kLgorICAgICAgICBmaWxlX2xvY2F0aW9uLCBoZWFkZXIgPSBzZWxmLnVybHJldHJpZXZlKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikKKyAgICAgICAgb3MudW5saW5rKGZpbGVfbG9jYXRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoZWFkZXIsIG1pbWV0b29scy5NZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlYWRlciBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgbWltZXRvb2xzLk1lc3NhZ2UiKQorCisgICAgZGVmIHRlc3RfZGF0YV9oZWFkZXIoc2VsZik6CisgICAgICAgIGxvZ28gPSAiaHR0cDovL3d3dy5weXRob24ub3JnL2NvbW11bml0eS9sb2dvcy9weXRob24tbG9nby1tYXN0ZXItdjMtVE0ucG5nIgorICAgICAgICBmaWxlX2xvY2F0aW9uLCBmaWxlaGVhZGVycyA9IHNlbGYudXJscmV0cmlldmUobG9nbykKKyAgICAgICAgb3MudW5saW5rKGZpbGVfbG9jYXRpb24pCisgICAgICAgIGRhdGV2YWx1ZSA9IGZpbGVoZWFkZXJzLmdldGhlYWRlcignRGF0ZScpCisgICAgICAgIGRhdGVmb3JtYXQgPSAnJWEsICVkICViICVZICVIOiVNOiVTIEdNVCcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGltZS5zdHJwdGltZShkYXRldmFsdWUsIGRhdGVmb3JtYXQpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdEYXRlIHZhbHVlIG5vdCBpbiAlciBmb3JtYXQnLCBkYXRlZm9ybWF0KQorCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5yZXF1aXJlcygnbmV0d29yaycpCisgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygKKyAgICAgICAgICAgICgidXJsbGliLnVybG9wZW4uLiBoYXMgYmVlbiByZW1vdmVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVVJMVGltZW91dFRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsb3Blbk5ldHdvcmtUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxyZXRyaWV2ZU5ldHdvcmtUZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdXJscGFyc2UucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91cmxwYXJzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmViZmFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdXJscGFyc2UucHkKQEAgLTAsMCArMSw1NzEgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVybHBhcnNlCisKK1JGQzE4MDhfQkFTRSA9ICJodHRwOi8vYS9iL2MvZDtwP3EjZiIKK1JGQzIzOTZfQkFTRSA9ICJodHRwOi8vYS9iL2MvZDtwP3EiCitSRkMzOTg2X0JBU0UgPSAnaHR0cDovL2EvYi9jL2Q7cD9xJworU0lNUExFX0JBU0UgID0gJ2h0dHA6Ly9hL2IvYy9kJworCisjIEEgbGlzdCBvZiB0ZXN0IGNhc2VzLiAgRWFjaCB0ZXN0IGNhc2UgaXMgYSB0d28tdHVwbGUgdGhhdCBjb250YWlucworIyBhIHN0cmluZyB3aXRoIHRoZSBxdWVyeSBhbmQgYSBkaWN0aW9uYXJ5IHdpdGggdGhlIGV4cGVjdGVkIHJlc3VsdC4KKworcGFyc2VfcXNsX3Rlc3RfY2FzZXMgPSBbCisgICAgKCIiLCBbXSksCisgICAgKCImIiwgW10pLAorICAgICgiJiYiLCBbXSksCisgICAgKCI9IiwgWygnJywgJycpXSksCisgICAgKCI9YSIsIFsoJycsICdhJyldKSwKKyAgICAoImEiLCBbKCdhJywgJycpXSksCisgICAgKCJhPSIsIFsoJ2EnLCAnJyldKSwKKyAgICAoImE9IiwgWygnYScsICcnKV0pLAorICAgICgiJmE9YiIsIFsoJ2EnLCAnYicpXSksCisgICAgKCJhPWErYiZiPWIrYyIsIFsoJ2EnLCAnYSBiJyksICgnYicsICdiIGMnKV0pLAorICAgICgiYT0xJmE9MiIsIFsoJ2EnLCAnMScpLCAoJ2EnLCAnMicpXSksCitdCisKK2NsYXNzIFVybFBhcnNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrUm91bmR0cmlwcyhzZWxmLCB1cmwsIHBhcnNlZCwgc3BsaXQpOgorICAgICAgICByZXN1bHQgPSB1cmxwYXJzZS51cmxwYXJzZSh1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBwYXJzZWQpCisgICAgICAgIHQgPSAocmVzdWx0LnNjaGVtZSwgcmVzdWx0Lm5ldGxvYywgcmVzdWx0LnBhdGgsCisgICAgICAgICAgICAgcmVzdWx0LnBhcmFtcywgcmVzdWx0LnF1ZXJ5LCByZXN1bHQuZnJhZ21lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgcGFyc2VkKQorICAgICAgICAjIHB1dCBpdCBiYWNrIHRvZ2V0aGVyIGFuZCBpdCBzaG91bGQgYmUgdGhlIHNhbWUKKyAgICAgICAgcmVzdWx0MiA9IHVybHBhcnNlLnVybHVucGFyc2UocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDIsIHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQyLCByZXN1bHQuZ2V0dXJsKCkpCisKKyAgICAgICAgIyB0aGUgcmVzdWx0IG9mIGdldHVybCgpIGlzIGEgZml4cG9pbnQ7IHdlIGNhbiBhbHdheXMgcGFyc2UgaXQKKyAgICAgICAgIyBhZ2FpbiB0byBnZXQgdGhlIHNhbWUgcmVzdWx0OgorICAgICAgICByZXN1bHQzID0gdXJscGFyc2UudXJscGFyc2UocmVzdWx0LmdldHVybCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMuZ2V0dXJsKCksIHJlc3VsdC5nZXR1cmwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQzLCAgICAgICAgICByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0My5zY2hlbWUsICAgcmVzdWx0LnNjaGVtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQzLm5ldGxvYywgICByZXN1bHQubmV0bG9jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMucGF0aCwgICAgIHJlc3VsdC5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMucGFyYW1zLCAgIHJlc3VsdC5wYXJhbXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0My5xdWVyeSwgICAgcmVzdWx0LnF1ZXJ5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMuZnJhZ21lbnQsIHJlc3VsdC5mcmFnbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQzLnVzZXJuYW1lLCByZXN1bHQudXNlcm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0My5wYXNzd29yZCwgcmVzdWx0LnBhc3N3b3JkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMuaG9zdG5hbWUsIHJlc3VsdC5ob3N0bmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQzLnBvcnQsICAgICByZXN1bHQucG9ydCkKKworICAgICAgICAjIGNoZWNrIHRoZSByb3VuZHRyaXAgdXNpbmcgdXJsc3BsaXQoKSBhcyB3ZWxsCisgICAgICAgIHJlc3VsdCA9IHVybHBhcnNlLnVybHNwbGl0KHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHNwbGl0KQorICAgICAgICB0ID0gKHJlc3VsdC5zY2hlbWUsIHJlc3VsdC5uZXRsb2MsIHJlc3VsdC5wYXRoLAorICAgICAgICAgICAgIHJlc3VsdC5xdWVyeSwgcmVzdWx0LmZyYWdtZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHNwbGl0KQorICAgICAgICByZXN1bHQyID0gdXJscGFyc2UudXJsdW5zcGxpdChyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0MiwgdXJsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDIsIHJlc3VsdC5nZXR1cmwoKSkKKworICAgICAgICAjIGNoZWNrIHRoZSBmaXhwb2ludCBwcm9wZXJ0eSBvZiByZS1wYXJzaW5nIHRoZSByZXN1bHQgb2YgZ2V0dXJsKCkKKyAgICAgICAgcmVzdWx0MyA9IHVybHBhcnNlLnVybHNwbGl0KHJlc3VsdC5nZXR1cmwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQzLmdldHVybCgpLCByZXN1bHQuZ2V0dXJsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0MywgICAgICAgICAgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMuc2NoZW1lLCAgIHJlc3VsdC5zY2hlbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0My5uZXRsb2MsICAgcmVzdWx0Lm5ldGxvYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQzLnBhdGgsICAgICByZXN1bHQucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQzLnF1ZXJ5LCAgICByZXN1bHQucXVlcnkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0My5mcmFnbWVudCwgcmVzdWx0LmZyYWdtZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMudXNlcm5hbWUsIHJlc3VsdC51c2VybmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQzLnBhc3N3b3JkLCByZXN1bHQucGFzc3dvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0My5ob3N0bmFtZSwgcmVzdWx0Lmhvc3RuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdDMucG9ydCwgICAgIHJlc3VsdC5wb3J0KQorCisgICAgZGVmIHRlc3RfcXNsKHNlbGYpOgorICAgICAgICBmb3Igb3JpZywgZXhwZWN0IGluIHBhcnNlX3FzbF90ZXN0X2Nhc2VzOgorICAgICAgICAgICAgcmVzdWx0ID0gdXJscGFyc2UucGFyc2VfcXNsKG9yaWcsIGtlZXBfYmxhbmtfdmFsdWVzPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0LCAiRXJyb3IgcGFyc2luZyAlciIgJSBvcmlnKQorICAgICAgICAgICAgZXhwZWN0X3dpdGhvdXRfYmxhbmtzID0gW3YgZm9yIHYgaW4gZXhwZWN0IGlmIGxlbih2WzFdKV0KKyAgICAgICAgICAgIHJlc3VsdCA9IHVybHBhcnNlLnBhcnNlX3FzbChvcmlnLCBrZWVwX2JsYW5rX3ZhbHVlcz1GYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3Rfd2l0aG91dF9ibGFua3MsCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBwYXJzaW5nICVyIiAlIG9yaWcpCisKKworICAgIGRlZiB0ZXN0X3JvdW5kdHJpcHMoc2VsZik6CisgICAgICAgIHRlc3RjYXNlcyA9IFsKKyAgICAgICAgICAgICgnZmlsZTovLy90bXAvanVuay50eHQnLAorICAgICAgICAgICAgICgnZmlsZScsICcnLCAnL3RtcC9qdW5rLnR4dCcsICcnLCAnJywgJycpLAorICAgICAgICAgICAgICgnZmlsZScsICcnLCAnL3RtcC9qdW5rLnR4dCcsICcnLCAnJykpLAorICAgICAgICAgICAgKCdpbWFwOi8vbWFpbC5weXRob24ub3JnL21ib3gxJywKKyAgICAgICAgICAgICAoJ2ltYXAnLCAnbWFpbC5weXRob24ub3JnJywgJy9tYm94MScsICcnLCAnJywgJycpLAorICAgICAgICAgICAgICgnaW1hcCcsICdtYWlsLnB5dGhvbi5vcmcnLCAnL21ib3gxJywgJycsICcnKSksCisgICAgICAgICAgICAoJ21tczovL3dtcy5zeXMuaGluZXQubmV0L2N0cy9EcmFtYS8wOTAwNjI1MTEwMC5hc2YnLAorICAgICAgICAgICAgICgnbW1zJywgJ3dtcy5zeXMuaGluZXQubmV0JywgJy9jdHMvRHJhbWEvMDkwMDYyNTExMDAuYXNmJywKKyAgICAgICAgICAgICAgJycsICcnLCAnJyksCisgICAgICAgICAgICAgKCdtbXMnLCAnd21zLnN5cy5oaW5ldC5uZXQnLCAnL2N0cy9EcmFtYS8wOTAwNjI1MTEwMC5hc2YnLAorICAgICAgICAgICAgICAnJywgJycpKSwKKyAgICAgICAgICAgICgnbmZzOi8vc2VydmVyL3BhdGgvdG8vZmlsZS50eHQnLAorICAgICAgICAgICAgICgnbmZzJywgJ3NlcnZlcicsICcvcGF0aC90by9maWxlLnR4dCcsICAnJywgJycsICcnKSwKKyAgICAgICAgICAgICAoJ25mcycsICdzZXJ2ZXInLCAnL3BhdGgvdG8vZmlsZS50eHQnLCAnJywgJycpKSwKKyAgICAgICAgICAgICgnc3ZuK3NzaDovL3N2bi56b3BlLm9yZy9yZXBvcy9tYWluL1pDb25maWcvdHJ1bmsvJywKKyAgICAgICAgICAgICAoJ3N2bitzc2gnLCAnc3ZuLnpvcGUub3JnJywgJy9yZXBvcy9tYWluL1pDb25maWcvdHJ1bmsvJywKKyAgICAgICAgICAgICAgJycsICcnLCAnJyksCisgICAgICAgICAgICAgKCdzdm4rc3NoJywgJ3N2bi56b3BlLm9yZycsICcvcmVwb3MvbWFpbi9aQ29uZmlnL3RydW5rLycsCisgICAgICAgICAgICAgICcnLCAnJykpLAorICAgICAgICAgICAgKCdnaXQrc3NoOi8vZ2l0QGdpdGh1Yi5jb20vdXNlci9wcm9qZWN0LmdpdCcsCisgICAgICAgICAgICAoJ2dpdCtzc2gnLCAnZ2l0QGdpdGh1Yi5jb20nLCcvdXNlci9wcm9qZWN0LmdpdCcsCisgICAgICAgICAgICAgJycsJycsJycpLAorICAgICAgICAgICAgKCdnaXQrc3NoJywgJ2dpdEBnaXRodWIuY29tJywnL3VzZXIvcHJvamVjdC5naXQnLAorICAgICAgICAgICAgICcnLCAnJykpCisgICAgICAgICAgICBdCisgICAgICAgIGZvciB1cmwsIHBhcnNlZCwgc3BsaXQgaW4gdGVzdGNhc2VzOgorICAgICAgICAgICAgc2VsZi5jaGVja1JvdW5kdHJpcHModXJsLCBwYXJzZWQsIHNwbGl0KQorCisgICAgZGVmIHRlc3RfaHR0cF9yb3VuZHRyaXBzKHNlbGYpOgorICAgICAgICAjIHVybHBhcnNlLnVybHNwbGl0IHRyZWF0cyAnaHR0cDonIGFzIGFuIG9wdGltaXplZCBzcGVjaWFsIGNhc2UsCisgICAgICAgICMgc28gd2UgdGVzdCBib3RoICdodHRwOicgYW5kICdodHRwczonIGluIGFsbCB0aGUgZm9sbG93aW5nLgorICAgICAgICAjIFRocmVlIGNoZWVycyBmb3Igd2hpdGUgYm94IGtub3dsZWRnZSEKKyAgICAgICAgdGVzdGNhc2VzID0gWworICAgICAgICAgICAgKCc6Ly93d3cucHl0aG9uLm9yZycsCisgICAgICAgICAgICAgKCd3d3cucHl0aG9uLm9yZycsICcnLCAnJywgJycsICcnKSwKKyAgICAgICAgICAgICAoJ3d3dy5weXRob24ub3JnJywgJycsICcnLCAnJykpLAorICAgICAgICAgICAgKCc6Ly93d3cucHl0aG9uLm9yZyNhYmMnLAorICAgICAgICAgICAgICgnd3d3LnB5dGhvbi5vcmcnLCAnJywgJycsICcnLCAnYWJjJyksCisgICAgICAgICAgICAgKCd3d3cucHl0aG9uLm9yZycsICcnLCAnJywgJ2FiYycpKSwKKyAgICAgICAgICAgICgnOi8vd3d3LnB5dGhvbi5vcmc/cT1hYmMnLAorICAgICAgICAgICAgICgnd3d3LnB5dGhvbi5vcmcnLCAnJywgJycsICdxPWFiYycsICcnKSwKKyAgICAgICAgICAgICAoJ3d3dy5weXRob24ub3JnJywgJycsICdxPWFiYycsICcnKSksCisgICAgICAgICAgICAoJzovL3d3dy5weXRob24ub3JnLyNhYmMnLAorICAgICAgICAgICAgICgnd3d3LnB5dGhvbi5vcmcnLCAnLycsICcnLCAnJywgJ2FiYycpLAorICAgICAgICAgICAgICgnd3d3LnB5dGhvbi5vcmcnLCAnLycsICcnLCAnYWJjJykpLAorICAgICAgICAgICAgKCc6Ly9hL2IvYy9kO3A/cSNmJywKKyAgICAgICAgICAgICAoJ2EnLCAnL2IvYy9kJywgJ3AnLCAncScsICdmJyksCisgICAgICAgICAgICAgKCdhJywgJy9iL2MvZDtwJywgJ3EnLCAnZicpKSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHNjaGVtZSBpbiAoJ2h0dHAnLCAnaHR0cHMnKToKKyAgICAgICAgICAgIGZvciB1cmwsIHBhcnNlZCwgc3BsaXQgaW4gdGVzdGNhc2VzOgorICAgICAgICAgICAgICAgIHVybCA9IHNjaGVtZSArIHVybAorICAgICAgICAgICAgICAgIHBhcnNlZCA9IChzY2hlbWUsKSArIHBhcnNlZAorICAgICAgICAgICAgICAgIHNwbGl0ID0gKHNjaGVtZSwpICsgc3BsaXQKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrUm91bmR0cmlwcyh1cmwsIHBhcnNlZCwgc3BsaXQpCisKKyAgICBkZWYgY2hlY2tKb2luKHNlbGYsIGJhc2UsIHJlbHVybCwgZXhwZWN0ZWQpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlLnVybGpvaW4oYmFzZSwgcmVsdXJsKSwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgKGJhc2UsIHJlbHVybCwgZXhwZWN0ZWQpKQorCisgICAgZGVmIHRlc3RfdW5wYXJzZV9wYXJzZShzZWxmKToKKyAgICAgICAgZm9yIHUgaW4gWydQeXRob24nLCAnLi9QeXRob24nLCd4LW5ld3NjaGVtZTovL2Zvby5jb20vc3R1ZmYnLCd4Oi8veScsJ3g6L3knLCd4Oi8nLCcvJyxdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmx1bnNwbGl0KHVybHBhcnNlLnVybHNwbGl0KHUpKSwgdSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJsdW5wYXJzZSh1cmxwYXJzZS51cmxwYXJzZSh1KSksIHUpCisKKyAgICBkZWYgdGVzdF9SRkMxODA4KHNlbGYpOgorICAgICAgICAjICJub3JtYWwiIGNhc2VzIGZyb20gUkZDIDE4MDg6CisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJ2c6aCcsICdnOmgnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdnJywgJ2h0dHA6Ly9hL2IvYy9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnLi9nJywgJ2h0dHA6Ly9hL2IvYy9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnZy8nLCAnaHR0cDovL2EvYi9jL2cvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnL2cnLCAnaHR0cDovL2EvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJy8vZycsICdodHRwOi8vZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJ2c/eScsICdodHRwOi8vYS9iL2MvZz95JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnZz95Ly4veCcsICdodHRwOi8vYS9iL2MvZz95Ly4veCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJyNzJywgJ2h0dHA6Ly9hL2IvYy9kO3A/cSNzJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnZyNzJywgJ2h0dHA6Ly9hL2IvYy9nI3MnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdnI3MvLi94JywgJ2h0dHA6Ly9hL2IvYy9nI3MvLi94JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnZz95I3MnLCAnaHR0cDovL2EvYi9jL2c/eSNzJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnZzt4JywgJ2h0dHA6Ly9hL2IvYy9nO3gnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdnO3g/eSNzJywgJ2h0dHA6Ly9hL2IvYy9nO3g/eSNzJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnLicsICdodHRwOi8vYS9iL2MvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnLi8nLCAnaHR0cDovL2EvYi9jLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJy4uJywgJ2h0dHA6Ly9hL2IvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnLi4vJywgJ2h0dHA6Ly9hL2IvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnLi4vZycsICdodHRwOi8vYS9iL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuLi8uLicsICdodHRwOi8vYS8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuLi8uLi8nLCAnaHR0cDovL2EvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnLi4vLi4vZycsICdodHRwOi8vYS9nJykKKworICAgICAgICAjICJhYm5vcm1hbCIgY2FzZXMgZnJvbSBSRkMgMTgwODoKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnJywgJ2h0dHA6Ly9hL2IvYy9kO3A/cSNmJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnLi4vLi4vLi4vZycsICdodHRwOi8vYS8uLi9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnLi4vLi4vLi4vLi4vZycsICdodHRwOi8vYS8uLi8uLi9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnLy4vZycsICdodHRwOi8vYS8uL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcvLi4vZycsICdodHRwOi8vYS8uLi9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnZy4nLCAnaHR0cDovL2EvYi9jL2cuJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnLmcnLCAnaHR0cDovL2EvYi9jLy5nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnZy4uJywgJ2h0dHA6Ly9hL2IvYy9nLi4nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuLmcnLCAnaHR0cDovL2EvYi9jLy4uZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJy4vLi4vZycsICdodHRwOi8vYS9iL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICcuL2cvLicsICdodHRwOi8vYS9iL2MvZy8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdnLy4vaCcsICdodHRwOi8vYS9iL2MvZy9oJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMTgwOF9CQVNFLCAnZy8uLi9oJywgJ2h0dHA6Ly9hL2IvYy9oJykKKworICAgICAgICAjIFJGQyAxODA4IGFuZCBSRkMgMTYzMCBkaXNhZ3JlZSBvbiB0aGVzZSAoYWNjb3JkaW5nIHRvIFJGQyAxODA4KSwKKyAgICAgICAgIyBzbyB3ZSdsbCBub3QgYWN0dWFsbHkgcnVuIHRoZXNlIHRlc3RzICh3aGljaCBleHBlY3QgMTgwOCBiZWhhdmlvcikuCisgICAgICAgICNzZWxmLmNoZWNrSm9pbihSRkMxODA4X0JBU0UsICdodHRwOmcnLCAnaHR0cDpnJykKKyAgICAgICAgI3NlbGYuY2hlY2tKb2luKFJGQzE4MDhfQkFTRSwgJ2h0dHA6JywgJ2h0dHA6JykKKworICAgIGRlZiB0ZXN0X1JGQzIzNjgoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTE0Njc6IHBhdGggdGhhdCBzdGFydHMgd2l0aCBhIG51bWJlciBpcyBub3QgcGFyc2VkIGNvcnJlY3RseQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlLnVybHBhcnNlKCdtYWlsdG86MTMzN0BleGFtcGxlLm9yZycpLAorICAgICAgICAgICAgICAgICgnbWFpbHRvJywgJycsICcxMzM3QGV4YW1wbGUub3JnJywgJycsICcnLCAnJykpCisKKyAgICBkZWYgdGVzdF9SRkMyMzk2KHNlbGYpOgorICAgICAgICAjIGNhc2VzIGZyb20gUkZDIDIzOTYKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnZzpoJywgJ2c6aCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJ2cnLCAnaHR0cDovL2EvYi9jL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuL2cnLCAnaHR0cDovL2EvYi9jL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnLycsICdodHRwOi8vYS9iL2MvZy8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcvZycsICdodHRwOi8vYS9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnLy9nJywgJ2h0dHA6Ly9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnZz95JywgJ2h0dHA6Ly9hL2IvYy9nP3knKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcjcycsICdodHRwOi8vYS9iL2MvZDtwP3EjcycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJ2cjcycsICdodHRwOi8vYS9iL2MvZyNzJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnZz95I3MnLCAnaHR0cDovL2EvYi9jL2c/eSNzJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnZzt4JywgJ2h0dHA6Ly9hL2IvYy9nO3gnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnO3g/eSNzJywgJ2h0dHA6Ly9hL2IvYy9nO3g/eSNzJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnLicsICdodHRwOi8vYS9iL2MvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnLi8nLCAnaHR0cDovL2EvYi9jLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJy4uJywgJ2h0dHA6Ly9hL2IvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnLi4vJywgJ2h0dHA6Ly9hL2IvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnLi4vZycsICdodHRwOi8vYS9iL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuLi8uLicsICdodHRwOi8vYS8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuLi8uLi8nLCAnaHR0cDovL2EvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnLi4vLi4vZycsICdodHRwOi8vYS9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnJywgUkZDMjM5Nl9CQVNFKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuLi8uLi8uLi9nJywgJ2h0dHA6Ly9hLy4uL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuLi8uLi8uLi8uLi9nJywgJ2h0dHA6Ly9hLy4uLy4uL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcvLi9nJywgJ2h0dHA6Ly9hLy4vZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJy8uLi9nJywgJ2h0dHA6Ly9hLy4uL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnLicsICdodHRwOi8vYS9iL2MvZy4nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICcuZycsICdodHRwOi8vYS9iL2MvLmcnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnLi4nLCAnaHR0cDovL2EvYi9jL2cuLicpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJy4uZycsICdodHRwOi8vYS9iL2MvLi5nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnLi8uLi9nJywgJ2h0dHA6Ly9hL2IvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJy4vZy8uJywgJ2h0dHA6Ly9hL2IvYy9nLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJ2cvLi9oJywgJ2h0dHA6Ly9hL2IvYy9nL2gnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnLy4uL2gnLCAnaHR0cDovL2EvYi9jL2gnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnO3g9MS8uL3knLCAnaHR0cDovL2EvYi9jL2c7eD0xL3knKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnO3g9MS8uLi95JywgJ2h0dHA6Ly9hL2IvYy95JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnZz95Ly4veCcsICdodHRwOi8vYS9iL2MvZz95Ly4veCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJ2c/eS8uLi94JywgJ2h0dHA6Ly9hL2IvYy9nP3kvLi4veCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJ2cjcy8uL3gnLCAnaHR0cDovL2EvYi9jL2cjcy8uL3gnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnI3MvLi4veCcsICdodHRwOi8vYS9iL2MvZyNzLy4uL3gnKQorCisgICAgZGVmIHRlc3RfUkZDMzk4NihzZWxmKToKKyAgICAgICAgIyBUZXN0IGNhc2VzIGZyb20gUkZDMzk4NgorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICc/eScsJ2h0dHA6Ly9hL2IvYy9kO3A/eScpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJzt4JywgJ2h0dHA6Ly9hL2IvYy87eCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2c6aCcsJ2c6aCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2cnLCdodHRwOi8vYS9iL2MvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy4vZycsJ2h0dHA6Ly9hL2IvYy9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnZy8nLCdodHRwOi8vYS9iL2MvZy8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcvZycsJ2h0dHA6Ly9hL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcvL2cnLCdodHRwOi8vZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJz95JywnaHR0cDovL2EvYi9jL2Q7cD95JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnZz95JywnaHR0cDovL2EvYi9jL2c/eScpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJyNzJywnaHR0cDovL2EvYi9jL2Q7cD9xI3MnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdnI3MnLCdodHRwOi8vYS9iL2MvZyNzJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnZz95I3MnLCdodHRwOi8vYS9iL2MvZz95I3MnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICc7eCcsJ2h0dHA6Ly9hL2IvYy87eCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2c7eCcsJ2h0dHA6Ly9hL2IvYy9nO3gnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdnO3g/eSNzJywnaHR0cDovL2EvYi9jL2c7eD95I3MnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcnLCdodHRwOi8vYS9iL2MvZDtwP3EnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcuJywnaHR0cDovL2EvYi9jLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy4vJywnaHR0cDovL2EvYi9jLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy4uJywnaHR0cDovL2EvYi8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcuLi8nLCdodHRwOi8vYS9iLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy4uL2cnLCdodHRwOi8vYS9iL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcuLi8uLicsJ2h0dHA6Ly9hLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy4uLy4uLycsJ2h0dHA6Ly9hLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy4uLy4uL2cnLCdodHRwOi8vYS9nJykKKworICAgICAgICAjQWJub3JtYWwgRXhhbXBsZXMKKworICAgICAgICAjIFRoZSAnYWJub3JtYWwgc2NlbmFyaW9zJyBhcmUgaW5jb21wYXRpYmxlIHdpdGggUkZDMjk4NiBwYXJzaW5nCisgICAgICAgICMgVGVzdHMgYXJlIGhlcmUgZm9yIHJlZmVyZW5jZS4KKworICAgICAgICAjc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLi4vLi4vLi4vZycsJ2h0dHA6Ly9hL2cnKQorICAgICAgICAjc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLi4vLi4vLi4vLi4vZycsJ2h0dHA6Ly9hL2cnKQorICAgICAgICAjc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLy4vZycsJ2h0dHA6Ly9hL2cnKQorICAgICAgICAjc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnLy4uL2cnLCdodHRwOi8vYS9nJykKKworICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdnLicsJ2h0dHA6Ly9hL2IvYy9nLicpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy5nJywnaHR0cDovL2EvYi9jLy5nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnZy4uJywnaHR0cDovL2EvYi9jL2cuLicpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJy4uZycsJ2h0dHA6Ly9hL2IvYy8uLmcnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcuLy4uL2cnLCdodHRwOi8vYS9iL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcuL2cvLicsJ2h0dHA6Ly9hL2IvYy9nLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2cvLi9oJywnaHR0cDovL2EvYi9jL2cvaCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2cvLi4vaCcsJ2h0dHA6Ly9hL2IvYy9oJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMzk4Nl9CQVNFLCAnZzt4PTEvLi95JywnaHR0cDovL2EvYi9jL2c7eD0xL3knKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdnO3g9MS8uLi95JywnaHR0cDovL2EvYi9jL3knKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdnP3kvLi94JywnaHR0cDovL2EvYi9jL2c/eS8uL3gnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdnP3kvLi4veCcsJ2h0dHA6Ly9hL2IvYy9nP3kvLi4veCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2cjcy8uL3gnLCdodHRwOi8vYS9iL2MvZyNzLy4veCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2cjcy8uLi94JywnaHR0cDovL2EvYi9jL2cjcy8uLi94JykKKyAgICAgICAgI3NlbGYuY2hlY2tKb2luKFJGQzM5ODZfQkFTRSwgJ2h0dHA6ZycsJ2h0dHA6ZycpICMgc3RyaWN0IHBhcnNlcgorICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICdodHRwOmcnLCdodHRwOi8vYS9iL2MvZycpICMgcmVsYXhlZCBwYXJzZXIKKworICAgICAgICAjIFRlc3QgZm9yIGlzc3VlOTcyMQorICAgICAgICBzZWxmLmNoZWNrSm9pbignaHR0cDovL2EvYi9jL2RlJywgJzt4JywnaHR0cDovL2EvYi9jLzt4JykKKworICAgIGRlZiB0ZXN0X3VybGpvaW5zKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJ2c6aCcsJ2c6aCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnaHR0cDpnJywnaHR0cDovL2EvYi9jL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJ2h0dHA6JywnaHR0cDovL2EvYi9jL2QnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJ2cnLCdodHRwOi8vYS9iL2MvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnLi9nJywnaHR0cDovL2EvYi9jL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJ2cvJywnaHR0cDovL2EvYi9jL2cvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICcvZycsJ2h0dHA6Ly9hL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJy8vZycsJ2h0dHA6Ly9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICc/eScsJ2h0dHA6Ly9hL2IvYy9kP3knKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJ2c/eScsJ2h0dHA6Ly9hL2IvYy9nP3knKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJ2c/eS8uL3gnLCdodHRwOi8vYS9iL2MvZz95Ly4veCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnLicsJ2h0dHA6Ly9hL2IvYy8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJy4vJywnaHR0cDovL2EvYi9jLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnLi4nLCdodHRwOi8vYS9iLycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnLi4vJywnaHR0cDovL2EvYi8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJy4uL2cnLCdodHRwOi8vYS9iL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJy4uLy4uJywnaHR0cDovL2EvJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICcuLi8uLi9nJywnaHR0cDovL2EvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnLi4vLi4vLi4vZycsJ2h0dHA6Ly9hLy4uL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJy4vLi4vZycsJ2h0dHA6Ly9hL2IvZycpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnLi9nLy4nLCdodHRwOi8vYS9iL2MvZy8nKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJy8uL2cnLCdodHRwOi8vYS8uL2cnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJ2cvLi9oJywnaHR0cDovL2EvYi9jL2cvaCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnZy8uLi9oJywnaHR0cDovL2EvYi9jL2gnKQorICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJ2h0dHA6ZycsJ2h0dHA6Ly9hL2IvYy9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICdodHRwOicsJ2h0dHA6Ly9hL2IvYy9kJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICdodHRwOj95JywnaHR0cDovL2EvYi9jL2Q/eScpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKFNJTVBMRV9CQVNFLCAnaHR0cDpnP3knLCdodHRwOi8vYS9iL2MvZz95JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICdodHRwOmc/eS8uL3gnLCdodHRwOi8vYS9iL2MvZz95Ly4veCcpCisgICAgICAgIHNlbGYuY2hlY2tKb2luKCdodHRwOi8vLycsICcuLicsJ2h0dHA6Ly8vJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oJycsICdodHRwOi8vYS9iL2MvZz95Ly4veCcsJ2h0dHA6Ly9hL2IvYy9nP3kvLi94JykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oJycsICdodHRwOi8vYS8uL2cnLCAnaHR0cDovL2EvLi9nJykKKyAgICAgICAgc2VsZi5jaGVja0pvaW4oJ3N2bjovL3BhdGh0b3JlcG8vZGlyMScsJ2RpcjInLCdzdm46Ly9wYXRodG9yZXBvL2RpcjInKQorICAgICAgICBzZWxmLmNoZWNrSm9pbignc3ZuK3NzaDovL3BhdGh0b3JlcG8vZGlyMScsJ2RpcjInLCdzdm4rc3NoOi8vcGF0aHRvcmVwby9kaXIyJykKKworICAgIGRlZiB0ZXN0X1JGQzI3MzIoc2VsZik6CisgICAgICAgIGZvciB1cmwsIGhvc3RuYW1lLCBwb3J0IGluIFsKKyAgICAgICAgICAgICgnaHR0cDovL1Rlc3QucHl0aG9uLm9yZzo1NDMyL2Zvby8nLCAndGVzdC5weXRob24ub3JnJywgNTQzMiksCisgICAgICAgICAgICAoJ2h0dHA6Ly8xMi4zNC41Ni43ODo1NDMyL2Zvby8nLCAnMTIuMzQuNTYuNzgnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1s6OjFdOjU0MzIvZm9vLycsICc6OjEnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1tkZWFkOmJlZWY6OjFdOjU0MzIvZm9vLycsICdkZWFkOmJlZWY6OjEnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1tkZWFkOmJlZWY6Ol06NTQzMi9mb28vJywgJ2RlYWQ6YmVlZjo6JywgNTQzMiksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bZGVhZDpiZWVmOmNhZmU6NTQxNzphZmZlOjhGQTM6ZGVhZjpmZWVkXTo1NDMyL2Zvby8nLAorICAgICAgICAgICAgICdkZWFkOmJlZWY6Y2FmZTo1NDE3OmFmZmU6OGZhMzpkZWFmOmZlZWQnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1s6OjEyLjM0LjU2Ljc4XTo1NDMyL2Zvby8nLCAnOjoxMi4zNC41Ni43OCcsIDU0MzIpLAorICAgICAgICAgICAgKCdodHRwOi8vWzo6ZmZmZjoxMi4zNC41Ni43OF06NTQzMi9mb28vJywKKyAgICAgICAgICAgICAnOjpmZmZmOjEyLjM0LjU2Ljc4JywgNTQzMiksCisgICAgICAgICAgICAoJ2h0dHA6Ly9UZXN0LnB5dGhvbi5vcmcvZm9vLycsICd0ZXN0LnB5dGhvbi5vcmcnLCBOb25lKSwKKyAgICAgICAgICAgICgnaHR0cDovLzEyLjM0LjU2Ljc4L2Zvby8nLCAnMTIuMzQuNTYuNzgnLCBOb25lKSwKKyAgICAgICAgICAgICgnaHR0cDovL1s6OjFdL2Zvby8nLCAnOjoxJywgTm9uZSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bZGVhZDpiZWVmOjoxXS9mb28vJywgJ2RlYWQ6YmVlZjo6MScsIE5vbmUpLAorICAgICAgICAgICAgKCdodHRwOi8vW2RlYWQ6YmVlZjo6XS9mb28vJywgJ2RlYWQ6YmVlZjo6JywgTm9uZSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bZGVhZDpiZWVmOmNhZmU6NTQxNzphZmZlOjhGQTM6ZGVhZjpmZWVkXS9mb28vJywKKyAgICAgICAgICAgICAnZGVhZDpiZWVmOmNhZmU6NTQxNzphZmZlOjhmYTM6ZGVhZjpmZWVkJywgTm9uZSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bOjoxMi4zNC41Ni43OF0vZm9vLycsICc6OjEyLjM0LjU2Ljc4JywgTm9uZSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bOjpmZmZmOjEyLjM0LjU2Ljc4XS9mb28vJywKKyAgICAgICAgICAgICAnOjpmZmZmOjEyLjM0LjU2Ljc4JywgTm9uZSksCisgICAgICAgICAgICBdOgorICAgICAgICAgICAgdXJscGFyc2VkID0gdXJscGFyc2UudXJscGFyc2UodXJsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodXJscGFyc2VkLmhvc3RuYW1lLCB1cmxwYXJzZWQucG9ydCkgLCAoaG9zdG5hbWUsIHBvcnQpKQorCisgICAgICAgIGZvciBpbnZhbGlkX3VybCBpbiBbCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly86OjEyLjM0LjU2Ljc4XS8nLAorICAgICAgICAgICAgICAgICdodHRwOi8vWzo6MS9mb28vJywKKyAgICAgICAgICAgICAgICAnZnRwOi8vWzo6MS9mb28vYmFkXS9iYWQnLAorICAgICAgICAgICAgICAgICdodHRwOi8vWzo6MS9mb28vYmFkXS9iYWQnLAorICAgICAgICAgICAgICAgICdodHRwOi8vWzo6ZmZmZjoxMi4zNC41Ni43OCddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdXJscGFyc2UudXJscGFyc2UsIGludmFsaWRfdXJsKQorCisgICAgZGVmIHRlc3RfdXJsZGVmcmFnKHNlbGYpOgorICAgICAgICBmb3IgdXJsLCBkZWZyYWcsIGZyYWcgaW4gWworICAgICAgICAgICAgKCdodHRwOi8vcHl0aG9uLm9yZyNmcmFnJywgJ2h0dHA6Ly9weXRob24ub3JnJywgJ2ZyYWcnKSwKKyAgICAgICAgICAgICgnaHR0cDovL3B5dGhvbi5vcmcnLCAnaHR0cDovL3B5dGhvbi5vcmcnLCAnJyksCisgICAgICAgICAgICAoJ2h0dHA6Ly9weXRob24ub3JnLyNmcmFnJywgJ2h0dHA6Ly9weXRob24ub3JnLycsICdmcmFnJyksCisgICAgICAgICAgICAoJ2h0dHA6Ly9weXRob24ub3JnLycsICdodHRwOi8vcHl0aG9uLm9yZy8nLCAnJyksCisgICAgICAgICAgICAoJ2h0dHA6Ly9weXRob24ub3JnLz9xI2ZyYWcnLCAnaHR0cDovL3B5dGhvbi5vcmcvP3EnLCAnZnJhZycpLAorICAgICAgICAgICAgKCdodHRwOi8vcHl0aG9uLm9yZy8/cScsICdodHRwOi8vcHl0aG9uLm9yZy8/cScsICcnKSwKKyAgICAgICAgICAgICgnaHR0cDovL3B5dGhvbi5vcmcvcCNmcmFnJywgJ2h0dHA6Ly9weXRob24ub3JnL3AnLCAnZnJhZycpLAorICAgICAgICAgICAgKCdodHRwOi8vcHl0aG9uLm9yZy9wP3EnLCAnaHR0cDovL3B5dGhvbi5vcmcvcD9xJywgJycpLAorICAgICAgICAgICAgKFJGQzE4MDhfQkFTRSwgJ2h0dHA6Ly9hL2IvYy9kO3A/cScsICdmJyksCisgICAgICAgICAgICAoUkZDMjM5Nl9CQVNFLCAnaHR0cDovL2EvYi9jL2Q7cD9xJywgJycpLAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJsZGVmcmFnKHVybCksIChkZWZyYWcsIGZyYWcpKQorCisgICAgZGVmIHRlc3RfdXJsc3BsaXRfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgdXJsID0gIkhUVFA6Ly9XV1cuUFlUSE9OLk9SRy9kb2MvI2ZyYWciCisgICAgICAgIHAgPSB1cmxwYXJzZS51cmxzcGxpdCh1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zY2hlbWUsICJodHRwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm5ldGxvYywgIldXVy5QWVRIT04uT1JHIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhdGgsICIvZG9jLyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5xdWVyeSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5mcmFnbWVudCwgImZyYWciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudXNlcm5hbWUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXNzd29yZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmhvc3RuYW1lLCAid3d3LnB5dGhvbi5vcmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG9ydCwgTm9uZSkKKyAgICAgICAgIyBnZXR1cmwoKSB3b24ndCByZXR1cm4gZXhhY3RseSB0aGUgb3JpZ2luYWwgVVJMIGluIHRoaXMgY2FzZQorICAgICAgICAjIHNpbmNlIHRoZSBzY2hlbWUgaXMgYWx3YXlzIGNhc2Utbm9ybWFsaXplZAorICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChwLmdldHVybCgpLCB1cmwpCisKKyAgICAgICAgdXJsID0gImh0dHA6Ly9Vc2VyOlBhc3NAd3d3LnB5dGhvbi5vcmc6MDgwL2RvYy8/cXVlcnk9eWVzI2ZyYWciCisgICAgICAgIHAgPSB1cmxwYXJzZS51cmxzcGxpdCh1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zY2hlbWUsICJodHRwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm5ldGxvYywgIlVzZXI6UGFzc0B3d3cucHl0aG9uLm9yZzowODAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGF0aCwgIi9kb2MvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnF1ZXJ5LCAicXVlcnk9eWVzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmZyYWdtZW50LCAiZnJhZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51c2VybmFtZSwgIlVzZXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFzc3dvcmQsICJQYXNzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmhvc3RuYW1lLCAid3d3LnB5dGhvbi5vcmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG9ydCwgODApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5nZXR1cmwoKSwgdXJsKQorCisgICAgICAgICMgQWRkcmVzc2luZyBpc3N1ZTE2OTgsIHdoaWNoIHN1Z2dlc3RzIFVzZXJuYW1lIGNhbiBjb250YWluCisgICAgICAgICMgIkAiIGNoYXJhY3RlcnMuICBUaG91Z2ggbm90IFJGQyBjb21wbGlhbnQsIG1hbnkgZnRwIHNpdGVzIGFsbG93CisgICAgICAgICMgYW5kIHJlcXVlc3QgZW1haWwgYWRkcmVzc2VzIGFzIHVzZXJuYW1lcy4KKworICAgICAgICB1cmwgPSAiaHR0cDovL1VzZXJAZXhhbXBsZS5jb206UGFzc0B3d3cucHl0aG9uLm9yZzowODAvZG9jLz9xdWVyeT15ZXMjZnJhZyIKKyAgICAgICAgcCA9IHVybHBhcnNlLnVybHNwbGl0KHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnNjaGVtZSwgImh0dHAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubmV0bG9jLCAiVXNlckBleGFtcGxlLmNvbTpQYXNzQHd3dy5weXRob24ub3JnOjA4MCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXRoLCAiL2RvYy8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucXVlcnksICJxdWVyeT15ZXMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZnJhZ21lbnQsICJmcmFnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVzZXJuYW1lLCAiVXNlckBleGFtcGxlLmNvbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXNzd29yZCwgIlBhc3MiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaG9zdG5hbWUsICJ3d3cucHl0aG9uLm9yZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3J0LCA4MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldHVybCgpLCB1cmwpCisKKyAgICAgICAgIyBWZXJpZnkgYW4gaWxsZWdhbCBwb3J0IG9mIHZhbHVlIGdyZWF0ZXIgdGhhbiA2NTUzNSBpcyBzZXQgYXMgTm9uZQorICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5weXRob24ub3JnOjY1NTM2IgorICAgICAgICBwID0gdXJscGFyc2UudXJsc3BsaXQodXJsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG9ydCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2lzc3VlMTQwNzIoc2VsZik6CisgICAgICAgIHAxID0gdXJscGFyc2UudXJsc3BsaXQoJ3RlbDorMzEtNjQxMDQ0MTUzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5zY2hlbWUsICd0ZWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnBhdGgsICcrMzEtNjQxMDQ0MTUzJykKKworICAgICAgICBwMiA9IHVybHBhcnNlLnVybHNwbGl0KCd0ZWw6KzMxNjQxMDQ0MTUzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMi5zY2hlbWUsICd0ZWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAyLnBhdGgsICcrMzE2NDEwNDQxNTMnKQorCisgICAgICAgICMgQXNzZXJ0IGZvciB1cmxwYXJzZQorICAgICAgICBwMSA9IHVybHBhcnNlLnVybHBhcnNlKCd0ZWw6KzMxLTY0MTA0NDE1MycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEuc2NoZW1lLCAndGVsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5wYXRoLCAnKzMxLTY0MTA0NDE1MycpCisKKyAgICAgICAgcDIgPSB1cmxwYXJzZS51cmxwYXJzZSgndGVsOiszMTY0MTA0NDE1MycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDIuc2NoZW1lLCAndGVsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMi5wYXRoLCAnKzMxNjQxMDQ0MTUzJykKKworCisgICAgZGVmIHRlc3RfdGVsdXJsX3BhcmFtcyhzZWxmKToKKyAgICAgICAgcDEgPSB1cmxwYXJzZS51cmxwYXJzZSgndGVsOjEyMy00O3Bob25lLWNvbnRleHQ9KzEtNjUwLTUxNicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEuc2NoZW1lLCAndGVsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5wYXRoLCAnMTIzLTQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnBhcmFtcywgJ3Bob25lLWNvbnRleHQ9KzEtNjUwLTUxNicpCisKKyAgICAgICAgcDEgPSB1cmxwYXJzZS51cmxwYXJzZSgndGVsOisxLTIwMS01NTUtMDEyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEuc2NoZW1lLCAndGVsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5wYXRoLCAnKzEtMjAxLTU1NS0wMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5wYXJhbXMsICcnKQorCisgICAgICAgIHAxID0gdXJscGFyc2UudXJscGFyc2UoJ3RlbDo3MDQyO3Bob25lLWNvbnRleHQ9ZXhhbXBsZS5jb20nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnNjaGVtZSwgJ3RlbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEucGF0aCwgJzcwNDInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnBhcmFtcywgJ3Bob25lLWNvbnRleHQ9ZXhhbXBsZS5jb20nKQorCisgICAgICAgIHAxID0gdXJscGFyc2UudXJscGFyc2UoJ3RlbDo4NjMtMTIzNDtwaG9uZS1jb250ZXh0PSsxLTkxNC01NTUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnNjaGVtZSwgJ3RlbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEucGF0aCwgJzg2My0xMjM0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5wYXJhbXMsICdwaG9uZS1jb250ZXh0PSsxLTkxNC01NTUnKQorCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzX2JhZF9wb3J0KHNlbGYpOgorICAgICAgICAiIiJDaGVjayBoYW5kbGluZyBvZiBub24taW50ZWdlciBwb3J0cy4iIiIKKyAgICAgICAgcCA9IHVybHBhcnNlLnVybHNwbGl0KCJodHRwOi8vd3d3LmV4YW1wbGUubmV0OmZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5uZXRsb2MsICJ3d3cuZXhhbXBsZS5uZXQ6Zm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBwLnBvcnQpCisKKyAgICAgICAgcCA9IHVybHBhcnNlLnVybHBhcnNlKCJodHRwOi8vd3d3LmV4YW1wbGUubmV0OmZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5uZXRsb2MsICJ3d3cuZXhhbXBsZS5uZXQ6Zm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBwLnBvcnQpCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzX3dpdGhvdXRfbmV0bG9jKHNlbGYpOgorICAgICAgICAjIFRoaXMgZXhhbXBsZSBpcyBzdHJhaWdodCBmcm9tIFJGQyAzMjYxLiAgSXQgbG9va3MgbGlrZSBpdAorICAgICAgICAjIHNob3VsZCBhbGxvdyB0aGUgdXNlcm5hbWUsIGhvc3RuYW1lLCBhbmQgcG9ydCB0byBiZSBmaWxsZWQKKyAgICAgICAgIyBpbiwgYnV0IGRvZXNuJ3QuICBTaW5jZSBpdCdzIGEgVVJJIGFuZCBkb2Vzbid0IHVzZSB0aGUKKyAgICAgICAgIyBzY2hlbWU6Ly9uZXRsb2Mgc3ludGF4LCB0aGUgbmV0bG9jIGFuZCByZWxhdGVkIGF0dHJpYnV0ZXMKKyAgICAgICAgIyBzaG91bGQgYmUgbGVmdCBlbXB0eS4KKyAgICAgICAgdXJpID0gInNpcDphbGljZUBhdGxhbnRhLmNvbTttYWRkcj0yMzkuMjU1LjI1NS4xO3R0bD0xNSIKKyAgICAgICAgcCA9IHVybHBhcnNlLnVybHNwbGl0KHVyaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm5ldGxvYywgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51c2VybmFtZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhc3N3b3JkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaG9zdG5hbWUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3J0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0dXJsKCksIHVyaSkKKworICAgICAgICBwID0gdXJscGFyc2UudXJscGFyc2UodXJpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubmV0bG9jLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVzZXJuYW1lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFzc3dvcmQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5ob3N0bmFtZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvcnQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5nZXR1cmwoKSwgdXJpKQorCisgICAgZGVmIHRlc3RfY2FjaGluZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGNhc2UgZm9yIGJ1ZyAjMTMxMzExOQorICAgICAgICB1cmkgPSAiaHR0cDovL2V4YW1wbGUuY29tL2RvYy8iCisgICAgICAgIHVuaWNvZGVfdXJpID0gdW5pY29kZSh1cmkpCisKKyAgICAgICAgdXJscGFyc2UudXJscGFyc2UodW5pY29kZV91cmkpCisgICAgICAgIHAgPSB1cmxwYXJzZS51cmxwYXJzZSh1cmkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShwLnNjaGVtZSksIHR5cGUodXJpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHAuaG9zdG5hbWUpLCB0eXBlKHVyaSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShwLnBhdGgpLCB0eXBlKHVyaSkpCisKKyAgICBkZWYgdGVzdF9ub3NsYXNoKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE2Mzc6IGh0dHA6Ly9mb28uY29tP3F1ZXJ5IGlzIGxlZ2FsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJscGFyc2UoImh0dHA6Ly9leGFtcGxlLmNvbT9ibGFoYmxhaD0vZm9vIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwJywgJ2V4YW1wbGUuY29tJywgJycsICcnLCAnYmxhaGJsYWg9L2ZvbycsICcnKSkKKworICAgIGRlZiB0ZXN0X2FueXNjaGVtZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA3OTA0OiBzMzovL2Zvby5jb20vc3R1ZmYgaGFzIG5ldGxvYyAiZm9vLmNvbSIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJscGFyc2UoInMzOi8vZm9vLmNvbS9zdHVmZiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnczMnLCdmb28uY29tJywnL3N0dWZmJywnJywnJywnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJscGFyc2UoIngtbmV3c2NoZW1lOi8vZm9vLmNvbS9zdHVmZiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgneC1uZXdzY2hlbWUnLCdmb28uY29tJywnL3N0dWZmJywnJywnJywnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJscGFyc2UoIngtbmV3c2NoZW1lOi8vZm9vLmNvbS9zdHVmZj9xdWVyeSNmcmFnbWVudCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgneC1uZXdzY2hlbWUnLCdmb28uY29tJywnL3N0dWZmJywnJywncXVlcnknLCdmcmFnbWVudCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlLnVybHBhcnNlKCJ4LW5ld3NjaGVtZTovL2Zvby5jb20vc3R1ZmY/cXVlcnkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ3gtbmV3c2NoZW1lJywnZm9vLmNvbScsJy9zdHVmZicsJycsJ3F1ZXJ5JywnJykpCisKKyAgICBkZWYgdGVzdF93aXRob3V0c2NoZW1lKHNlbGYpOgorICAgICAgICAjIFRlc3QgdXJscGFyc2Ugd2l0aG91dCBzY2hlbWUKKyAgICAgICAgIyBJc3N1ZSA3NTQwMTY6IHVybHBhcnNlIGdvZXMgd3Jvbmcgd2l0aCBJUDpwb3J0IHdpdGhvdXQgc2NoZW1lCisgICAgICAgICMgUkZDIDE4MDggc3BlY2lmaWVzIHRoYXQgbmV0bG9jIHNob3VsZCBzdGFydCB3aXRoIC8vLCB1cmxwYXJzZSBleHBlY3RzCisgICAgICAgICMgdGhlIHNhbWUsIG90aGVyd2lzZSBpdCBjbGFzc2lmaWVzIHRoZSBwb3J0aW9uIG9mIHVybCBhcyBwYXRoLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlLnVybHBhcnNlKCJwYXRoIiksCisgICAgICAgICAgICAgICAgKCcnLCcnLCdwYXRoJywnJywnJywnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJscGFyc2UoIi8vd3d3LnB5dGhvbi5vcmc6ODAiKSwKKyAgICAgICAgICAgICAgICAoJycsJ3d3dy5weXRob24ub3JnOjgwJywnJywnJywnJywnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJscGFyc2UoImh0dHA6Ly93d3cucHl0aG9uLm9yZzo4MCIpLAorICAgICAgICAgICAgICAgICgnaHR0cCcsJ3d3dy5weXRob24ub3JnOjgwJywnJywnJywnJywnJykpCisKKyAgICBkZWYgdGVzdF9wb3J0c2VwYXJhdG9yKHNlbGYpOgorICAgICAgICAjIElzc3VlIDc1NDAxNiBtYWtlcyBjaGFuZ2VzIGZvciBwb3J0IHNlcGFyYXRvciAnOicgZnJvbSBzY2hlbWUgc2VwYXJhdG9yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2UudXJscGFyc2UoInBhdGg6ODAiKSwKKyAgICAgICAgICAgICAgICAoJycsJycsJ3BhdGg6ODAnLCcnLCcnLCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxwYXJzZSgiaHR0cDoiKSwoJ2h0dHAnLCcnLCcnLCcnLCcnLCcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZS51cmxwYXJzZSgiaHR0cHM6IiksKCdodHRwcycsJycsJycsJycsJycsJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlLnVybHBhcnNlKCJodHRwOi8vd3d3LnB5dGhvbi5vcmc6ODAiKSwKKyAgICAgICAgICAgICAgICAoJ2h0dHAnLCd3d3cucHl0aG9uLm9yZzo4MCcsJycsJycsJycsJycpKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChVcmxQYXJzZVRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91c2VyZGljdC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3VzZXJkaWN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Y2VjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91c2VyZGljdC5weQpAQCAtMCwwICsxLDM1MCBAQAorIyBDaGVjayBldmVyeSBwYXRoIHRocm91Z2ggZXZlcnkgbWV0aG9kIG9mIFVzZXJEaWN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0LCBtYXBwaW5nX3Rlc3RzCitpbXBvcnQgVXNlckRpY3QKKworZDAgPSB7fQorZDEgPSB7Im9uZSI6IDF9CitkMiA9IHsib25lIjogMSwgInR3byI6IDJ9CitkMyA9IHsib25lIjogMSwgInR3byI6IDMsICJ0aHJlZSI6IDV9CitkNCA9IHsib25lIjogTm9uZSwgInR3byI6IE5vbmV9CitkNSA9IHsib25lIjogMSwgInR3byI6IDF9CisKK2NsYXNzIFVzZXJEaWN0VGVzdChtYXBwaW5nX3Rlc3RzLlRlc3RIYXNoTWFwcGluZ1Byb3RvY29sKToKKyAgICB0eXBlMnRlc3QgPSBVc2VyRGljdC5JdGVyYWJsZVVzZXJEaWN0CisKKyAgICBkZWYgdGVzdF9hbGwoc2VsZik6CisgICAgICAgICMgVGVzdCBjb25zdHJ1Y3RvcnMKKyAgICAgICAgdSA9IFVzZXJEaWN0LlVzZXJEaWN0KCkKKyAgICAgICAgdTAgPSBVc2VyRGljdC5Vc2VyRGljdChkMCkKKyAgICAgICAgdTEgPSBVc2VyRGljdC5Vc2VyRGljdChkMSkKKyAgICAgICAgdTIgPSBVc2VyRGljdC5JdGVyYWJsZVVzZXJEaWN0KGQyKQorCisgICAgICAgIHV1ID0gVXNlckRpY3QuVXNlckRpY3QodSkKKyAgICAgICAgdXUwID0gVXNlckRpY3QuVXNlckRpY3QodTApCisgICAgICAgIHV1MSA9IFVzZXJEaWN0LlVzZXJEaWN0KHUxKQorICAgICAgICB1dTIgPSBVc2VyRGljdC5Vc2VyRGljdCh1MikKKworICAgICAgICAjIGtleXdvcmQgYXJnIGNvbnN0cnVjdG9yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXNlckRpY3QuVXNlckRpY3Qob25lPTEsIHR3bz0yKSwgZDIpCisgICAgICAgICMgaXRlbSBzZXF1ZW5jZSBjb25zdHJ1Y3RvcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVzZXJEaWN0LlVzZXJEaWN0KFsoJ29uZScsMSksICgndHdvJywyKV0pLCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVc2VyRGljdC5Vc2VyRGljdChkaWN0PVsoJ29uZScsMSksICgndHdvJywyKV0pLCBkMikKKyAgICAgICAgIyBib3RoIHRvZ2V0aGVyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXNlckRpY3QuVXNlckRpY3QoWygnb25lJywxKSwgKCd0d28nLDIpXSwgdHdvPTMsIHRocmVlPTUpLCBkMykKKworICAgICAgICAjIGFsdGVybmF0ZSBjb25zdHJ1Y3RvcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVzZXJEaWN0LlVzZXJEaWN0LmZyb21rZXlzKCdvbmUgdHdvJy5zcGxpdCgpKSwgZDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXNlckRpY3QuVXNlckRpY3QoKS5mcm9ta2V5cygnb25lIHR3bycuc3BsaXQoKSksIGQ0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVzZXJEaWN0LlVzZXJEaWN0LmZyb21rZXlzKCdvbmUgdHdvJy5zcGxpdCgpLCAxKSwgZDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVXNlckRpY3QuVXNlckRpY3QoKS5mcm9ta2V5cygnb25lIHR3bycuc3BsaXQoKSwgMSksIGQ1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodTEuZnJvbWtleXMoJ29uZSB0d28nLnNwbGl0KCkpIGlzIG5vdCB1MSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHUxLmZyb21rZXlzKCdvbmUgdHdvJy5zcGxpdCgpKSwgVXNlckRpY3QuVXNlckRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh1Mi5mcm9ta2V5cygnb25lIHR3bycuc3BsaXQoKSksIFVzZXJEaWN0Lkl0ZXJhYmxlVXNlckRpY3QpCisKKyAgICAgICAgIyBUZXN0IF9fcmVwcl9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHUwKSwgc3RyKGQwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUxKSwgcmVwcihkMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1MiksIHJlcHIoZDIpKQorCisgICAgICAgICMgVGVzdCBfX2NtcF9fIGFuZCBfX2xlbl9fCisgICAgICAgIGFsbCA9IFtkMCwgZDEsIGQyLCB1LCB1MCwgdTEsIHUyLCB1dSwgdXUwLCB1dTEsIHV1Ml0KKyAgICAgICAgZm9yIGEgaW4gYWxsOgorICAgICAgICAgICAgZm9yIGIgaW4gYWxsOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKGEsIGIpLCBjbXAobGVuKGEpLCBsZW4oYikpKQorCisgICAgICAgICMgVGVzdCBfX2dldGl0ZW1fXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyWyJvbmUiXSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHUxLl9fZ2V0aXRlbV9fLCAidHdvIikKKworICAgICAgICAjIFRlc3QgX19zZXRpdGVtX18KKyAgICAgICAgdTMgPSBVc2VyRGljdC5Vc2VyRGljdCh1MikKKyAgICAgICAgdTNbInR3byJdID0gMgorICAgICAgICB1M1sidGhyZWUiXSA9IDMKKworICAgICAgICAjIFRlc3QgX19kZWxpdGVtX18KKyAgICAgICAgZGVsIHUzWyJ0aHJlZSJdCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCB1My5fX2RlbGl0ZW1fXywgInRocmVlIikKKworICAgICAgICAjIFRlc3QgY2xlYXIKKyAgICAgICAgdTMuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUzLCB7fSkKKworICAgICAgICAjIFRlc3QgY29weSgpCisgICAgICAgIHUyYSA9IHUyLmNvcHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyYSwgdTIpCisgICAgICAgIHUyYiA9IFVzZXJEaWN0LlVzZXJEaWN0KHg9NDIsIHk9MjMpCisgICAgICAgIHUyYyA9IHUyYi5jb3B5KCkgIyBtYWtpbmcgYSBjb3B5IG9mIGEgVXNlckRpY3QgaXMgc3BlY2lhbCBjYXNlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyYiwgdTJjKQorCisgICAgICAgIGNsYXNzIE15VXNlckRpY3QoVXNlckRpY3QuVXNlckRpY3QpOgorICAgICAgICAgICAgZGVmIGRpc3BsYXkoc2VsZik6IHByaW50IHNlbGYKKworICAgICAgICBtMiA9IE15VXNlckRpY3QodTIpCisgICAgICAgIG0yYSA9IG0yLmNvcHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0yYSwgbTIpCisKKyAgICAgICAgIyBTRiBidWcgIzQ3NjYxNiAtLSBjb3B5KCkgb2YgVXNlckRpY3Qgc3ViY2xhc3Mgc2hhcmVkIGRhdGEKKyAgICAgICAgbTJbJ2ZvbyddID0gJ2JhcicKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChtMmEsIG0yKQorCisgICAgICAgICMgVGVzdCBrZXlzLCBpdGVtcywgdmFsdWVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIua2V5cygpLCBkMi5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIuaXRlbXMoKSwgZDIuaXRlbXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Mi52YWx1ZXMoKSwgZDIudmFsdWVzKCkpCisKKyAgICAgICAgIyBUZXN0IGhhc19rZXkgYW5kICJpbiIuCisgICAgICAgIGZvciBpIGluIHUyLmtleXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaSwgdTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgaW4gdTEsIGkgaW4gZDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgaW4gdTAsIGkgaW4gZDApCisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja19weTNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUyLmhhc19rZXkoaSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1MS5oYXNfa2V5KGkpLCBkMS5oYXNfa2V5KGkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTAuaGFzX2tleShpKSwgZDAuaGFzX2tleShpKSkKKworICAgICAgICAjIFRlc3QgdXBkYXRlCisgICAgICAgIHQgPSBVc2VyRGljdC5Vc2VyRGljdCgpCisgICAgICAgIHQudXBkYXRlKHUyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHUyKQorICAgICAgICBjbGFzcyBJdGVtczoKKyAgICAgICAgICAgIGRlZiBpdGVtcyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCgieCIsIDQyKSwgKCJ5IiwgMjMpKQorICAgICAgICB0ID0gVXNlckRpY3QuVXNlckRpY3QoKQorICAgICAgICB0LnVwZGF0ZShJdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHsieCI6IDQyLCAieSI6IDIzfSkKKworICAgICAgICAjIFRlc3QgZ2V0CisgICAgICAgIGZvciBpIGluIHUyLmtleXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIuZ2V0KGkpLCB1MltpXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTEuZ2V0KGkpLCBkMS5nZXQoaSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUwLmdldChpKSwgZDAuZ2V0KGkpKQorCisgICAgICAgICMgVGVzdCAiaW4iIGl0ZXJhdGlvbi4KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDIwKToKKyAgICAgICAgICAgIHUyW2ldID0gc3RyKGkpCisgICAgICAgIGlrZXlzID0gW10KKyAgICAgICAgZm9yIGsgaW4gdTI6CisgICAgICAgICAgICBpa2V5cy5hcHBlbmQoaykKKyAgICAgICAga2V5cyA9IHUyLmtleXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChpa2V5cyksIHNldChrZXlzKSkKKworICAgICAgICAjIFRlc3Qgc2V0ZGVmYXVsdAorICAgICAgICB0ID0gVXNlckRpY3QuVXNlckRpY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2V0ZGVmYXVsdCgieCIsIDQyKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Lmhhc19rZXkoIngiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnNldGRlZmF1bHQoIngiLCAyMyksIDQyKQorCisgICAgICAgICMgVGVzdCBwb3AKKyAgICAgICAgdCA9IFVzZXJEaWN0LlVzZXJEaWN0KHg9NDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5wb3AoIngiKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCB0LnBvcCwgIngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucG9wKCJ4IiwgMSksIDEpCisgICAgICAgIHRbIngiXSA9IDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5wb3AoIngiLCAxKSwgNDIpCisKKyAgICAgICAgIyBUZXN0IHBvcGl0ZW0KKyAgICAgICAgdCA9IFVzZXJEaWN0LlVzZXJEaWN0KHg9NDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5wb3BpdGVtKCksICgieCIsIDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHQucG9waXRlbSkKKworICAgIGRlZiB0ZXN0X21pc3Npbmcoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIFVzZXJEaWN0IGRvZXNuJ3QgaGF2ZSBhIF9fbWlzc2luZ19fIG1ldGhvZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2F0dHIoVXNlckRpY3QsICJfX21pc3NpbmdfXyIpLCBGYWxzZSkKKyAgICAgICAgIyBUZXN0IHNldmVyYWwgY2FzZXM6CisgICAgICAgICMgKEQpIHN1YmNsYXNzIGRlZmluZXMgX19taXNzaW5nX18gbWV0aG9kIHJldHVybmluZyBhIHZhbHVlCisgICAgICAgICMgKEUpIHN1YmNsYXNzIGRlZmluZXMgX19taXNzaW5nX18gbWV0aG9kIHJhaXNpbmcgUnVudGltZUVycm9yCisgICAgICAgICMgKEYpIHN1YmNsYXNzIHNldHMgX19taXNzaW5nX18gaW5zdGFuY2UgdmFyaWFibGUgKG5vIGVmZmVjdCkKKyAgICAgICAgIyAoRykgc3ViY2xhc3MgZG9lc24ndCBkZWZpbmUgX19taXNzaW5nX18gYXQgYSBhbGwKKyAgICAgICAgY2xhc3MgRChVc2VyRGljdC5Vc2VyRGljdCk6CisgICAgICAgICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgZCA9IEQoezE6IDIsIDM6IDR9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMV0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFszXSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigyLCBkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDIsIGQua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMl0sIDQyKQorICAgICAgICBjbGFzcyBFKFVzZXJEaWN0LlVzZXJEaWN0KToKKyAgICAgICAgICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihrZXkpCisgICAgICAgIGUgPSBFKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZVs0Ml0KKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciwgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJncywgKDQyLCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImVbNDJdIGRpZG4ndCByYWlzZSBSdW50aW1lRXJyb3IiKQorICAgICAgICBjbGFzcyBGKFVzZXJEaWN0LlVzZXJEaWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIEFuIGluc3RhbmNlIHZhcmlhYmxlIF9fbWlzc2luZ19fIHNob3VsZCBoYXZlIG5vIGVmZmVjdAorICAgICAgICAgICAgICAgIHNlbGYuX19taXNzaW5nX18gPSBsYW1iZGEga2V5OiBOb25lCisgICAgICAgICAgICAgICAgVXNlckRpY3QuVXNlckRpY3QuX19pbml0X18oc2VsZikKKyAgICAgICAgZiA9IEYoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmWzQyXQorICAgICAgICBleGNlcHQgS2V5RXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3MsICg0MiwpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJmWzQyXSBkaWRuJ3QgcmFpc2UgS2V5RXJyb3IiKQorICAgICAgICBjbGFzcyBHKFVzZXJEaWN0LlVzZXJEaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZyA9IEcoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBnWzQyXQorICAgICAgICBleGNlcHQgS2V5RXJyb3IsIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmFyZ3MsICg0MiwpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJnWzQyXSBkaWRuJ3QgcmFpc2UgS2V5RXJyb3IiKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUZXN0IERpY3QgTWl4aW4KKworY2xhc3MgU2VxRGljdChVc2VyRGljdC5EaWN0TWl4aW4pOgorICAgICIiIkRpY3Rpb25hcnkgbG9va2FsaWtlIGltcGxlbWVudGVkIHdpdGggbGlzdHMuCisKKyAgICBVc2VkIHRvIHRlc3QgYW5kIGRlbW9uc3RyYXRlIERpY3RNaXhpbgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdGhlcj1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYua2V5bGlzdCA9IFtdCisgICAgICAgIHNlbGYudmFsdWVsaXN0ID0gW10KKyAgICAgICAgaWYgb3RoZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgKGtleSwgdmFsdWUpIGluIG90aGVyOgorICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IHZhbHVlCisgICAgICAgIGZvciAoa2V5LCB2YWx1ZSkgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc2VsZltrZXldID0gdmFsdWUKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaSA9IHNlbGYua2V5bGlzdC5pbmRleChrZXkpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgcmV0dXJuIHNlbGYudmFsdWVsaXN0W2ldCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpID0gc2VsZi5rZXlsaXN0LmluZGV4KGtleSkKKyAgICAgICAgICAgIHNlbGYudmFsdWVsaXN0W2ldID0gdmFsdWUKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBzZWxmLmtleWxpc3QuYXBwZW5kKGtleSkKKyAgICAgICAgICAgIHNlbGYudmFsdWVsaXN0LmFwcGVuZCh2YWx1ZSkKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaSA9IHNlbGYua2V5bGlzdC5pbmRleChrZXkpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgc2VsZi5rZXlsaXN0LnBvcChpKQorICAgICAgICBzZWxmLnZhbHVlbGlzdC5wb3AoaSkKKyAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5rZXlsaXN0KQorICAgIGRlZiBjb3B5KHNlbGYpOgorICAgICAgICBkID0gc2VsZi5fX2NsYXNzX18oKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgZFtrZXldID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIGQKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbWtleXMoY2xzLCBrZXlzLCB2YWx1ZT1Ob25lKToKKyAgICAgICAgZCA9IGNscygpCisgICAgICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgICAgIGRba2V5XSA9IHZhbHVlCisgICAgICAgIHJldHVybiBkCisKK2NsYXNzIFVzZXJEaWN0TWl4aW5UZXN0KG1hcHBpbmdfdGVzdHMuVGVzdE1hcHBpbmdQcm90b2NvbCk6CisgICAgdHlwZTJ0ZXN0ID0gU2VxRGljdAorCisgICAgZGVmIHRlc3RfYWxsKHNlbGYpOgorICAgICAgICAjIyBTZXR1cCB0ZXN0IGFuZCB2ZXJpZnkgd29ya2luZyBvZiB0aGUgdGVzdCBjbGFzcworCisgICAgICAgICMgY2hlY2sgaW5pdAorICAgICAgICBzID0gU2VxRGljdCgpCisKKyAgICAgICAgIyBleGVyY2lzZSBzZXRpdGVtCisgICAgICAgIHNbMTBdID0gJ3RlbicKKyAgICAgICAgc1syMF0gPSAndHdlbnR5JworICAgICAgICBzWzMwXSA9ICd0aGlydHknCisKKyAgICAgICAgIyBleGVyY2lzZSBkZWxpdGVtCisgICAgICAgIGRlbCBzWzIwXQorICAgICAgICAjIGNoZWNrIGdldGl0ZW0gYW5kIHNldGl0ZW0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWzEwXSwgJ3RlbicpCisgICAgICAgICMgY2hlY2sga2V5cygpIGFuZCBkZWxpdGVtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5rZXlzKCksIFsxMCwgMzBdKQorCisgICAgICAgICMjIE5vdywgdGVzdCB0aGUgRGljdE1peGluIG1ldGhvZHMgb25lIGJ5IG9uZQorICAgICAgICAjIGhhc19rZXkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuaGFzX2tleSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgcy5oYXNfa2V5KDIwKSkKKworICAgICAgICAjIF9fY29udGFpbnNfXworICAgICAgICBzZWxmLmFzc2VydEluKDEwLCBzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDIwLCBzKQorCisgICAgICAgICMgX19pdGVyX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbayBmb3IgayBpbiBzXSwgWzEwLCAzMF0pCisKKyAgICAgICAgIyBfX2xlbl9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCAyKQorCisgICAgICAgICMgaXRlcml0ZW1zCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzLml0ZXJpdGVtcygpKSwgWygxMCwndGVuJyksICgzMCwgJ3RoaXJ0eScpXSkKKworICAgICAgICAjIGl0ZXJrZXlzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzLml0ZXJrZXlzKCkpLCBbMTAsIDMwXSkKKworICAgICAgICAjIGl0ZXJ2YWx1ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHMuaXRlcnZhbHVlcygpKSwgWyd0ZW4nLCAndGhpcnR5J10pCisKKyAgICAgICAgIyB2YWx1ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnZhbHVlcygpLCBbJ3RlbicsICd0aGlydHknXSkKKworICAgICAgICAjIGl0ZW1zCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5pdGVtcygpLCBbKDEwLCd0ZW4nKSwgKDMwLCAndGhpcnR5JyldKQorCisgICAgICAgICMgZ2V0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXQoMTApLCAndGVuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldCgxNSwnZmlmdGVlbicpLCAnZmlmdGVlbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXQoMTUpLCBOb25lKQorCisgICAgICAgICMgc2V0ZGVmYXVsdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc2V0ZGVmYXVsdCg0MCwgJ2ZvcnR5JyksICdmb3J0eScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zZXRkZWZhdWx0KDEwLCAnbnVsbCcpLCAndGVuJykKKyAgICAgICAgZGVsIHNbNDBdCisKKyAgICAgICAgIyBwb3AKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnBvcCgxMCksICd0ZW4nKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEwLCBzKQorICAgICAgICBzWzEwXSA9ICd0ZW4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5wb3AoIngiLCAxKSwgMSkKKyAgICAgICAgc1sieCJdID0gNDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnBvcCgieCIsIDEpLCA0MikKKworICAgICAgICAjIHBvcGl0ZW0KKyAgICAgICAgaywgdiA9IHMucG9waXRlbSgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oaywgcykKKyAgICAgICAgc1trXSA9IHYKKworICAgICAgICAjIGNsZWFyCisgICAgICAgIHMuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgMCkKKworICAgICAgICAjIGVtcHR5IHBvcGl0ZW0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMucG9waXRlbSkKKworICAgICAgICAjIHVwZGF0ZQorICAgICAgICBzLnVwZGF0ZSh7MTA6ICd0ZW4nLCAyMDondHdlbnR5J30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1sxMF0sICd0ZW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbMjBdLCAndHdlbnR5JykKKworICAgICAgICAjIGNtcAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHsxMDogJ3RlbicsIDIwOid0d2VudHknfSkKKyAgICAgICAgdCA9IFNlcURpY3QoKQorICAgICAgICB0WzIwXSA9ICd0d2VudHknCisgICAgICAgIHRbMTBdID0gJ3RlbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCB0KQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgVXNlckRpY3RUZXN0LAorICAgICAgICBVc2VyRGljdE1peGluVGVzdAorICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdXNlcmxpc3QucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91c2VybGlzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjYwMWJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdXNlcmxpc3QucHkKQEAgLTAsMCArMSw2MSBAQAorIyBDaGVjayBldmVyeSBwYXRoIHRocm91Z2ggZXZlcnkgbWV0aG9kIG9mIFVzZXJMaXN0CisKK2Zyb20gVXNlckxpc3QgaW1wb3J0IFVzZXJMaXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCwgbGlzdF90ZXN0cworCitjbGFzcyBVc2VyTGlzdFRlc3QobGlzdF90ZXN0cy5Db21tb25UZXN0KToKKyAgICB0eXBlMnRlc3QgPSBVc2VyTGlzdAorCisgICAgZGVmIHRlc3RfZ2V0c2xpY2Uoc2VsZik6CisgICAgICAgIHN1cGVyKFVzZXJMaXN0VGVzdCwgc2VsZikudGVzdF9nZXRzbGljZSgpCisgICAgICAgIGwgPSBbMCwgMSwgMiwgMywgNF0KKyAgICAgICAgdSA9IHNlbGYudHlwZTJ0ZXN0KGwpCisgICAgICAgIGZvciBpIGluIHJhbmdlKC0zLCA2KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVs6aV0sIGxbOmldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1W2k6XSwgbFtpOl0pCisgICAgICAgICAgICBmb3IgaiBpbiB4cmFuZ2UoLTMsIDYpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodVtpOmpdLCBsW2k6al0pCisKKyAgICBkZWYgdGVzdF9hZGRfc3BlY2lhbHMoc2VsZik6CisgICAgICAgIHUgPSBVc2VyTGlzdCgic3BhbSIpCisgICAgICAgIHUyID0gdSArICJlZ2dzIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyLCBsaXN0KCJzcGFtZWdncyIpKQorCisgICAgZGVmIHRlc3RfcmFkZF9zcGVjaWFscyhzZWxmKToKKyAgICAgICAgdSA9IFVzZXJMaXN0KCJlZ2dzIikKKyAgICAgICAgdTIgPSAic3BhbSIgKyB1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIsIGxpc3QoInNwYW1lZ2dzIikpCisgICAgICAgIHUyID0gdS5fX3JhZGRfXyhVc2VyTGlzdCgic3BhbSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyLCBsaXN0KCJzcGFtZWdncyIpKQorCisgICAgZGVmIHRlc3RfaWFkZChzZWxmKToKKyAgICAgICAgc3VwZXIoVXNlckxpc3RUZXN0LCBzZWxmKS50ZXN0X2lhZGQoKQorICAgICAgICB1ID0gWzAsIDFdCisgICAgICAgIHUgKz0gVXNlckxpc3QoWzAsIDFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIFswLCAxLCAwLCAxXSkKKworICAgIGRlZiB0ZXN0X21peGVkY21wKHNlbGYpOgorICAgICAgICB1ID0gc2VsZi50eXBlMnRlc3QoWzAsIDFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUsIFswLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh1LCBbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodSwgWzAsIDJdKQorCisgICAgZGVmIHRlc3RfbWl4ZWRhZGQoc2VsZik6CisgICAgICAgIHUgPSBzZWxmLnR5cGUydGVzdChbMCwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodSArIFtdLCB1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUgKyBbMl0sIFswLCAxLCAyXSkKKworICAgIGRlZiB0ZXN0X2dldGl0ZW1vdmVyd3JpdGVpdGVyKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IF9fZ2V0aXRlbV9fIG92ZXJyaWRlcyAqYXJlKiByZWNvZ25pemVkIGJ5IF9faXRlcl9fCisgICAgICAgIGNsYXNzIFQoc2VsZi50eXBlMnRlc3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cihrZXkpICsgJyEhIScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVyKFQoKDEsMikpKS5uZXh0KCksICIwISEhIikKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3B5M2tfd2FybmluZ3MoCisgICAgICAgICAgICAoIi4rX18oZ2V0fHNldHxkZWwpc2xpY2VfXyBoYXMgYmVlbiByZW1vdmVkIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVXNlckxpc3RUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91c2Vyc3RyaW5nLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdXNlcnN0cmluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNjI1OTg1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdXNlcnN0cmluZy5weQpAQCAtMCwwICsxLDE0NyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIFVzZXJTdHJpbmcgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIGJ1aWx0aW4gc3RyaW5nIHR5cGUuCisjIFVzZXJTdHJpbmcgaW5zdGFuY2VzIHNob3VsZCBiZWhhdmUgc2ltaWxhciB0byBidWlsdGluIHN0cmluZyBvYmplY3RzLgorCitpbXBvcnQgc3RyaW5nCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydCwgc3RyaW5nX3Rlc3RzCitmcm9tIFVzZXJTdHJpbmcgaW1wb3J0IFVzZXJTdHJpbmcsIE11dGFibGVTdHJpbmcKK2ltcG9ydCB3YXJuaW5ncworCitjbGFzcyBVc2VyU3RyaW5nVGVzdCgKKyAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdCwKKyAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QsCisgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyU3RyaW5nVXNlclN0cmluZ1Rlc3QsCisgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVXNlclN0cmluZ1Rlc3QKKyAgICApOgorCisgICAgdHlwZTJ0ZXN0ID0gVXNlclN0cmluZworCisgICAgIyBPdmVyd3JpdGUgdGhlIHRocmVlIHRlc3RpbmcgbWV0aG9kcywgYmVjYXVzZSBVc2VyU3RyaW5nCisgICAgIyBjYW4ndCBjb3BlIHdpdGggYXJndW1lbnRzIHByb3BhZ2F0ZWQgdG8gVXNlclN0cmluZworICAgICMgKGFuZCB3ZSBkb24ndCB0ZXN0IHdpdGggc3ViY2xhc3NlcykKKyAgICBkZWYgY2hlY2tlcXVhbChzZWxmLCByZXN1bHQsIG9iamVjdCwgbWV0aG9kbmFtZSwgKmFyZ3MpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmZpeHR5cGUocmVzdWx0KQorICAgICAgICBvYmplY3QgPSBzZWxmLmZpeHR5cGUob2JqZWN0KQorICAgICAgICAjIHdlIGRvbid0IGZpeCB0aGUgYXJndW1lbnRzLCBiZWNhdXNlIFVzZXJTdHJpbmcgY2FuJ3QgY29wZSB3aXRoIGl0CisgICAgICAgIHJlYWxyZXN1bHQgPSBnZXRhdHRyKG9iamVjdCwgbWV0aG9kbmFtZSkoKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICByZXN1bHQsCisgICAgICAgICAgICByZWFscmVzdWx0CisgICAgICAgICkKKworICAgIGRlZiBjaGVja3JhaXNlcyhzZWxmLCBleGMsIG9iamVjdCwgbWV0aG9kbmFtZSwgKmFyZ3MpOgorICAgICAgICBvYmplY3QgPSBzZWxmLmZpeHR5cGUob2JqZWN0KQorICAgICAgICAjIHdlIGRvbid0IGZpeCB0aGUgYXJndW1lbnRzLCBiZWNhdXNlIFVzZXJTdHJpbmcgY2FuJ3QgY29wZSB3aXRoIGl0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZXhjLAorICAgICAgICAgICAgZ2V0YXR0cihvYmplY3QsIG1ldGhvZG5hbWUpLAorICAgICAgICAgICAgKmFyZ3MKKyAgICAgICAgKQorCisgICAgZGVmIGNoZWNrY2FsbChzZWxmLCBvYmplY3QsIG1ldGhvZG5hbWUsICphcmdzKToKKyAgICAgICAgb2JqZWN0ID0gc2VsZi5maXh0eXBlKG9iamVjdCkKKyAgICAgICAgIyB3ZSBkb24ndCBmaXggdGhlIGFyZ3VtZW50cywgYmVjYXVzZSBVc2VyU3RyaW5nIGNhbid0IGNvcGUgd2l0aCBpdAorICAgICAgICBnZXRhdHRyKG9iamVjdCwgbWV0aG9kbmFtZSkoKmFyZ3MpCisKK2NsYXNzIE11dGFibGVTdHJpbmdUZXN0KFVzZXJTdHJpbmdUZXN0KToKKyAgICB0eXBlMnRlc3QgPSBNdXRhYmxlU3RyaW5nCisKKyAgICAjIE11dGFibGVTdHJpbmdzIGNhbiBiZSBoYXNoZWQgPT4gZGVhY3RpdmF0ZSB0ZXN0CisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3Rfc2V0aXRlbShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYudHlwZTJ0ZXN0KCJmb28iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBzLl9fc2V0aXRlbV9fLCAtNCwgImJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIHMuX19zZXRpdGVtX18sIDMsICJiYXIiKQorICAgICAgICBzWy0xXSA9ICJiYXIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgImZvYmFyIikKKyAgICAgICAgc1swXSA9ICJiYXIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgImJhcm9iYXIiKQorCisgICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYudHlwZTJ0ZXN0KCJmb28iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBzLl9fZGVsaXRlbV9fLCAtNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgcy5fX2RlbGl0ZW1fXywgMykKKyAgICAgICAgZGVsIHNbLTFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgImZvIikKKyAgICAgICAgZGVsIHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAibyIpCisgICAgICAgIGRlbCBzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIiIpCisKKyAgICBkZWYgdGVzdF9zZXRzbGljZShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYudHlwZTJ0ZXN0KCJmb28iKQorICAgICAgICBzWzpdID0gImJhciIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiYmFyIikKKyAgICAgICAgc1sxOjJdID0gImZvbyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiYmZvb3IiKQorICAgICAgICBzWzE6LTFdID0gVXNlclN0cmluZygiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgImJhciIpCisgICAgICAgIHNbMDoxMF0gPSA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICI0MiIpCisKKyAgICBkZWYgdGVzdF9kZWxzbGljZShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYudHlwZTJ0ZXN0KCJmb29iYXIiKQorICAgICAgICBkZWwgc1szOjEwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJmb28iKQorICAgICAgICBkZWwgc1stMToxMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiZm8iKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kZWRfc2V0X2RlbF9zbGljZShzZWxmKToKKyAgICAgICAgaW5kaWNlcyA9ICgwLCBOb25lLCAxLCAzLCAxOSwgMTAwLCAtMSwgLTIsIC0zMSwgLTEwMCkKKyAgICAgICAgb3JpZyA9IHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cworICAgICAgICBmb3Igc3RhcnQgaW4gaW5kaWNlczoKKyAgICAgICAgICAgIGZvciBzdG9wIGluIGluZGljZXM6CisgICAgICAgICAgICAgICAgIyBVc2UgaW5kaWNlc1sxOl0gd2hlbiBNdXRhYmxlU3RyaW5nIGNhbiBoYW5kbGUgcmVhbAorICAgICAgICAgICAgICAgICMgZXh0ZW5kZWQgc2xpY2VzCisgICAgICAgICAgICAgICAgZm9yIHN0ZXAgaW4gKE5vbmUsIDEsIC0xKToKKyAgICAgICAgICAgICAgICAgICAgcyA9IHNlbGYudHlwZTJ0ZXN0KG9yaWcpCisgICAgICAgICAgICAgICAgICAgIEwgPSBsaXN0KG9yaWcpCisgICAgICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGhhdmUgYSBzbGljZSBvZiBleGFjdGx5IHRoZSByaWdodCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICMgYnV0IHdpdGggKGhvcGVmdWxseSkgZGlmZmVyZW50IGRhdGEuCisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBMW3N0YXJ0OnN0b3A6c3RlcF0KKyAgICAgICAgICAgICAgICAgICAgZGF0YS5yZXZlcnNlKCkKKyAgICAgICAgICAgICAgICAgICAgTFtzdGFydDpzdG9wOnN0ZXBdID0gZGF0YQorICAgICAgICAgICAgICAgICAgICBzW3N0YXJ0OnN0b3A6c3RlcF0gPSAiIi5qb2luKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIiIuam9pbihMKSkKKworICAgICAgICAgICAgICAgICAgICBkZWwgTFtzdGFydDpzdG9wOnN0ZXBdCisgICAgICAgICAgICAgICAgICAgIGRlbCBzW3N0YXJ0OnN0b3A6c3RlcF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiIi5qb2luKEwpKQorCisgICAgZGVmIHRlc3RfaW1tdXRhYmxlKHNlbGYpOgorICAgICAgICBzID0gc2VsZi50eXBlMnRlc3QoImZvb2JhciIpCisgICAgICAgIHMyID0gcy5pbW11dGFibGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHMyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoczIsIFVzZXJTdHJpbmcpCisKKyAgICBkZWYgdGVzdF9pYWRkKHNlbGYpOgorICAgICAgICBzID0gc2VsZi50eXBlMnRlc3QoImZvbyIpCisgICAgICAgIHMgKz0gImJhciIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiZm9vYmFyIikKKyAgICAgICAgcyArPSBVc2VyU3RyaW5nKCJiYXoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJmb29iYXJiYXoiKQorICAgICAgICBzICs9IDQyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgImZvb2JhcmJhejQyIikKKworICAgIGRlZiB0ZXN0X2ltdWwoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLnR5cGUydGVzdCgiZm9vIikKKyAgICAgICAgcyAqPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgImZvbyIpCisgICAgICAgIHMgKj0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJmb29mb28iKQorICAgICAgICBzICo9IC0xCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIiIpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAiLipNdXRhYmxlU3RyaW5nIGhhcyBiZWVuIHJlbW92ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLipfXyhnZXR8c2V0fGRlbClzbGljZV9fIGhhcyBiZWVuIHJlbW92ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVXNlclN0cmluZ1Rlc3QsIE11dGFibGVTdHJpbmdUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91dS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3V1LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMDQ2YjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF91dS5weQpAQCAtMCwwICsxLDIwMSBAQAorIiIiCitUZXN0cyBmb3IgdXUgbW9kdWxlLgorTmljayBNYXRoZXdzb24KKyIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2ltcG9ydCBzeXMsIG9zLCB1dSwgY1N0cmluZ0lPCitpbXBvcnQgdXUKKworcGxhaW50ZXh0ID0gIlRoZSBzbW9vdGgtc2NhbGVkIHB5dGhvbiBjcmVwdCBvdmVyIHRoZSBzbGVlcGluZyBkb2dcbiIKKworZW5jb2RlZHRleHQgPSAiIiJcCitNNSZBRSgnLU07Vl1UOlwiVVM4ViVMOTYwQDwnRVQ6Jl1OKCYtUjk3IVQoJl1WOTcoQD0mQUUoJy1MOTY1UAorKDo2WUcoJjFPOVBIICIiIgorCitlbmNvZGVkdGV4dHdyYXBwZWQgPSAiYmVnaW4gJTAzbyAlc1xuIiArIGVuY29kZWR0ZXh0LnJlcGxhY2UoIiUiLCAiJSUiKSArICJcbiBcbmVuZFxuIgorCitjbGFzcyBVVVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZW5jb2RlKHNlbGYpOgorICAgICAgICBpbnAgPSBjU3RyaW5nSU8uU3RyaW5nSU8ocGxhaW50ZXh0KQorICAgICAgICBvdXQgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICB1dS5lbmNvZGUoaW5wLCBvdXQsICJ0MSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmdldHZhbHVlKCksIGVuY29kZWR0ZXh0d3JhcHBlZCAlICgwNjY2LCAidDEiKSkKKyAgICAgICAgaW5wID0gY1N0cmluZ0lPLlN0cmluZ0lPKHBsYWludGV4dCkKKyAgICAgICAgb3V0ID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgdXUuZW5jb2RlKGlucCwgb3V0LCAidDEiLCAwNjQ0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXR2YWx1ZSgpLCBlbmNvZGVkdGV4dHdyYXBwZWQgJSAoMDY0NCwgInQxIikpCisKKyAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZik6CisgICAgICAgIGlucCA9IGNTdHJpbmdJTy5TdHJpbmdJTyhlbmNvZGVkdGV4dHdyYXBwZWQgJSAoMDY2NiwgInQxIikpCisgICAgICAgIG91dCA9IGNTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgIHV1LmRlY29kZShpbnAsIG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0dmFsdWUoKSwgcGxhaW50ZXh0KQorICAgICAgICBpbnAgPSBjU3RyaW5nSU8uU3RyaW5nSU8oCisgICAgICAgICAgICAiVVVlbmNvZGVkIGZpbGVzIG1heSBjb250YWluIG1hbnkgbGluZXMsXG4iICsKKyAgICAgICAgICAgICJldmVuIHNvbWUgdGhhdCBoYXZlICdiZWdpbicgaW4gdGhlbS5cbiIgKworICAgICAgICAgICAgZW5jb2RlZHRleHR3cmFwcGVkICUgKDA2NjYsICJ0MSIpCisgICAgICAgICkKKyAgICAgICAgb3V0ID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgdXUuZGVjb2RlKGlucCwgb3V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXR2YWx1ZSgpLCBwbGFpbnRleHQpCisKKyAgICBkZWYgdGVzdF90cnVuY2F0ZWRpbnB1dChzZWxmKToKKyAgICAgICAgaW5wID0gY1N0cmluZ0lPLlN0cmluZ0lPKCJiZWdpbiA2NDQgdDFcbiIgKyBlbmNvZGVkdGV4dCkKKyAgICAgICAgb3V0ID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdXUuZGVjb2RlKGlucCwgb3V0KQorICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gcmFpc2VkIikKKyAgICAgICAgZXhjZXB0IHV1LkVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJUcnVuY2F0ZWQgaW5wdXQgZmlsZSIpCisKKyAgICBkZWYgdGVzdF9taXNzaW5nYmVnaW4oc2VsZik6CisgICAgICAgIGlucCA9IGNTdHJpbmdJTy5TdHJpbmdJTygiIikKKyAgICAgICAgb3V0ID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdXUuZGVjb2RlKGlucCwgb3V0KQorICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gcmFpc2VkIikKKyAgICAgICAgZXhjZXB0IHV1LkVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJObyB2YWxpZCBiZWdpbiBsaW5lIGZvdW5kIGluIGlucHV0IGZpbGUiKQorCitjbGFzcyBVVVN0ZElPVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc3RkaW4gPSBzeXMuc3RkaW4KKyAgICAgICAgc2VsZi5zdGRvdXQgPSBzeXMuc3Rkb3V0CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN5cy5zdGRpbiA9IHNlbGYuc3RkaW4KKyAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuc3Rkb3V0CisKKyAgICBkZWYgdGVzdF9lbmNvZGUoc2VsZik6CisgICAgICAgIHN5cy5zdGRpbiA9IGNTdHJpbmdJTy5TdHJpbmdJTyhwbGFpbnRleHQpCisgICAgICAgIHN5cy5zdGRvdXQgPSBjU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICB1dS5lbmNvZGUoIi0iLCAiLSIsICJ0MSIsIDA2NjYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzeXMuc3Rkb3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICBlbmNvZGVkdGV4dHdyYXBwZWQgJSAoMDY2NiwgInQxIikKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZGVjb2RlKHNlbGYpOgorICAgICAgICBzeXMuc3RkaW4gPSBjU3RyaW5nSU8uU3RyaW5nSU8oZW5jb2RlZHRleHR3cmFwcGVkICUgKDA2NjYsICJ0MSIpKQorICAgICAgICBzeXMuc3Rkb3V0ID0gY1N0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgdXUuZGVjb2RlKCItIiwgIi0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5zdGRvdXQuZ2V0dmFsdWUoKSwgcGxhaW50ZXh0KQorCitjbGFzcyBVVUZpbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfa2lsbChzZWxmLCBmKToKKyAgICAgICAgIyBjbG9zZSBhbmQgcmVtb3ZlIGZpbGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCAoU3lzdGVtRXhpdCwgS2V5Ym9hcmRJbnRlcnJ1cHQpOgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsoZi5uYW1lKQorICAgICAgICBleGNlcHQgKFN5c3RlbUV4aXQsIEtleWJvYXJkSW50ZXJydXB0KToKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi50bXBpbiAgPSB0ZXN0X3N1cHBvcnQuVEVTVEZOICsgImkiCisgICAgICAgIHNlbGYudG1wb3V0ID0gdGVzdF9zdXBwb3J0LlRFU1RGTiArICJvIgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi50bXBpbgorICAgICAgICBkZWwgc2VsZi50bXBvdXQKKworICAgIGRlZiB0ZXN0X2VuY29kZShzZWxmKToKKyAgICAgICAgZmluID0gZm91dCA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhzZWxmLnRtcGluKQorICAgICAgICAgICAgZmluID0gb3BlbihzZWxmLnRtcGluLCAnd2InKQorICAgICAgICAgICAgZmluLndyaXRlKHBsYWludGV4dCkKKyAgICAgICAgICAgIGZpbi5jbG9zZSgpCisKKyAgICAgICAgICAgIGZpbiA9IG9wZW4oc2VsZi50bXBpbiwgJ3JiJykKKyAgICAgICAgICAgIGZvdXQgPSBvcGVuKHNlbGYudG1wb3V0LCAndycpCisgICAgICAgICAgICB1dS5lbmNvZGUoZmluLCBmb3V0LCBzZWxmLnRtcGluLCBtb2RlPTA2NDQpCisgICAgICAgICAgICBmaW4uY2xvc2UoKQorICAgICAgICAgICAgZm91dC5jbG9zZSgpCisKKyAgICAgICAgICAgIGZvdXQgPSBvcGVuKHNlbGYudG1wb3V0LCAncicpCisgICAgICAgICAgICBzID0gZm91dC5yZWFkKCkKKyAgICAgICAgICAgIGZvdXQuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBlbmNvZGVkdGV4dHdyYXBwZWQgJSAoMDY0NCwgc2VsZi50bXBpbikpCisKKyAgICAgICAgICAgICMgaW5fZmlsZSBhbmQgb3V0X2ZpbGUgYXMgZmlsZW5hbWVzCisgICAgICAgICAgICB1dS5lbmNvZGUoc2VsZi50bXBpbiwgc2VsZi50bXBvdXQsIHNlbGYudG1waW4sIG1vZGU9MDY0NCkKKyAgICAgICAgICAgIGZvdXQgPSBvcGVuKHNlbGYudG1wb3V0LCAncicpCisgICAgICAgICAgICBzID0gZm91dC5yZWFkKCkKKyAgICAgICAgICAgIGZvdXQuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBlbmNvZGVkdGV4dHdyYXBwZWQgJSAoMDY0NCwgc2VsZi50bXBpbikpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2tpbGwoZmluKQorICAgICAgICAgICAgc2VsZi5fa2lsbChmb3V0KQorCisgICAgZGVmIHRlc3RfZGVjb2RlKHNlbGYpOgorICAgICAgICBmID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKHNlbGYudG1waW4pCisgICAgICAgICAgICBmID0gb3BlbihzZWxmLnRtcGluLCAndycpCisgICAgICAgICAgICBmLndyaXRlKGVuY29kZWR0ZXh0d3JhcHBlZCAlICgwNjQ0LCBzZWxmLnRtcG91dCkpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi50bXBpbiwgJ3InKQorICAgICAgICAgICAgdXUuZGVjb2RlKGYpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi50bXBvdXQsICdyJykKKyAgICAgICAgICAgIHMgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHBsYWludGV4dCkKKyAgICAgICAgICAgICMgWFhYIGlzIHRoZXJlIGFuIHhwIHdheSB0byB2ZXJpZnkgdGhlIG1vZGU/CisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9raWxsKGYpCisKKyAgICBkZWYgdGVzdF9kZWNvZGVfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIGYgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoc2VsZi50bXBpbikKKyAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYudG1waW4sICd3JykKKyAgICAgICAgICAgIGYud3JpdGUoZW5jb2RlZHRleHR3cmFwcGVkICUgKDA2NDQsIHNlbGYudG1wb3V0KSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICB1dS5kZWNvZGUoc2VsZi50bXBpbikKKworICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi50bXBvdXQsICdyJykKKyAgICAgICAgICAgIHMgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHBsYWludGV4dCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2tpbGwoZikKKworICAgIGRlZiB0ZXN0X2RlY29kZXR3aWNlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IGRlY29kZSgpIHdpbGwgcmVmdXNlIHRvIG92ZXJ3cml0ZSBhbiBleGlzdGluZyBmaWxlCisgICAgICAgIGYgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBjU3RyaW5nSU8uU3RyaW5nSU8oZW5jb2RlZHRleHR3cmFwcGVkICUgKDA2NDQsIHNlbGYudG1wb3V0KSkKKworICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi50bXBpbiwgJ3InKQorICAgICAgICAgICAgdXUuZGVjb2RlKGYpCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi50bXBpbiwgJ3InKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModXUuRXJyb3IsIHV1LmRlY29kZSwgZikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fa2lsbChmKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChVVVRlc3QsIFVVU3RkSU9UZXN0LCBVVUZpbGVUZXN0KQorCitpZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdXVpZC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3V1aWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwMzA4NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3V1aWQucHkKQEAgLTAsMCArMSw0ODIgQEAKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHV1aWQKKworZGVmIGltcG9ydGFibGUobmFtZSk6CisgICAgdHJ5OgorICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0OgorICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgVGVzdFVVSUQoVGVzdENhc2UpOgorICAgIGxhc3Rfbm9kZSA9IE5vbmUKKyAgICBzb3VyY2Uybm9kZSA9IHt9CisKKyAgICBkZWYgdGVzdF9VVUlEKHNlbGYpOgorICAgICAgICBlcXVhbCA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgYXNjZW5kaW5nID0gW10KKyAgICAgICAgZm9yIChzdHJpbmcsIGN1cmx5LCBoZXgsIGJ5dGVzLCBieXRlc19sZSwgZmllbGRzLCBpbnRlZ2VyLCB1cm4sCisgICAgICAgICAgICAgdGltZSwgY2xvY2tfc2VxLCB2YXJpYW50LCB2ZXJzaW9uKSBpbiBbCisgICAgICAgICAgICAoJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcsCisgICAgICAgICAgICAgJ3swMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDB9JywKKyAgICAgICAgICAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLAorICAgICAgICAgICAgICdcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCcsCisgICAgICAgICAgICAgJ1wwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwJywKKyAgICAgICAgICAgICAoMCwgMCwgMCwgMCwgMCwgMCksCisgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAndXJuOnV1aWQ6MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJywKKyAgICAgICAgICAgICAwLCAwLCB1dWlkLlJFU0VSVkVEX05DUywgTm9uZSksCisgICAgICAgICAgICAoJzAwMDEwMjAzLTA0MDUtMDYwNy0wODA5LTBhMGIwYzBkMGUwZicsCisgICAgICAgICAgICAgJ3swMDAxMDIwMy0wNDA1LTA2MDctMDgwOS0wYTBiMGMwZDBlMGZ9JywKKyAgICAgICAgICAgICAnMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYnLAorICAgICAgICAgICAgICdcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHRcblx4MGJceDBjXHgwZFx4MGVceDBmJywKKyAgICAgICAgICAgICAnXHgwM1x4MDJceDAxXDBceDA1XHgwNFx4MDdceDA2XHgwOFx0XG5ceDBiXHgwY1x4MGRceDBlXHgwZicsCisgICAgICAgICAgICAgKDB4MDAwMTAyMDNMLCAweDA0MDUsIDB4MDYwNywgOCwgOSwgMHgwYTBiMGMwZDBlMGZMKSwKKyAgICAgICAgICAgICAweDAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmTCwKKyAgICAgICAgICAgICAndXJuOnV1aWQ6MDAwMTAyMDMtMDQwNS0wNjA3LTA4MDktMGEwYjBjMGQwZTBmJywKKyAgICAgICAgICAgICAweDYwNzA0MDUwMDAxMDIwM0wsIDB4ODA5LCB1dWlkLlJFU0VSVkVEX05DUywgTm9uZSksCisgICAgICAgICAgICAoJzAyZDllNmQ1LTk0NjctMzgyZS04ZjliLTkzMDBhNjRhYzNjZCcsCisgICAgICAgICAgICAgJ3swMmQ5ZTZkNS05NDY3LTM4MmUtOGY5Yi05MzAwYTY0YWMzY2R9JywKKyAgICAgICAgICAgICAnMDJkOWU2ZDU5NDY3MzgyZThmOWI5MzAwYTY0YWMzY2QnLAorICAgICAgICAgICAgICdceDAyXHhkOVx4ZTZceGQ1XHg5NFx4NjdceDM4XHgyZVx4OGZceDliXHg5M1x4MDBceGE2XHg0YVx4YzNceGNkJywKKyAgICAgICAgICAgICAnXHhkNVx4ZTZceGQ5XHgwMlx4NjdceDk0XHgyZVx4MzhceDhmXHg5Ylx4OTNceDAwXHhhNlx4NGFceGMzXHhjZCcsCisgICAgICAgICAgICAgKDB4MDJkOWU2ZDVMLCAweDk0NjcsIDB4MzgyZSwgMHg4ZiwgMHg5YiwgMHg5MzAwYTY0YWMzY2RMKSwKKyAgICAgICAgICAgICAweDAyZDllNmQ1OTQ2NzM4MmU4ZjliOTMwMGE2NGFjM2NkTCwKKyAgICAgICAgICAgICAndXJuOnV1aWQ6MDJkOWU2ZDUtOTQ2Ny0zODJlLThmOWItOTMwMGE2NGFjM2NkJywKKyAgICAgICAgICAgICAweDgyZTk0NjcwMmQ5ZTZkNUwsIDB4ZjliLCB1dWlkLlJGQ180MTIyLCAzKSwKKyAgICAgICAgICAgICgnMTIzNDU2NzgtMTIzNC01Njc4LTEyMzQtNTY3ODEyMzQ1Njc4JywKKyAgICAgICAgICAgICAnezEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OH0nLAorICAgICAgICAgICAgICcxMjM0NTY3ODEyMzQ1Njc4MTIzNDU2NzgxMjM0NTY3OCcsCisgICAgICAgICAgICAgJ1x4MTJceDM0XHg1Nlx4NzgnKjQsCisgICAgICAgICAgICAgJ1x4NzhceDU2XHgzNFx4MTJceDM0XHgxMlx4NzhceDU2XHgxMlx4MzRceDU2XHg3OFx4MTJceDM0XHg1Nlx4NzgnLAorICAgICAgICAgICAgICgweDEyMzQ1Njc4LCAweDEyMzQsIDB4NTY3OCwgMHgxMiwgMHgzNCwgMHg1Njc4MTIzNDU2NzgpLAorICAgICAgICAgICAgIDB4MTIzNDU2NzgxMjM0NTY3ODEyMzQ1Njc4MTIzNDU2NzgsCisgICAgICAgICAgICAgJ3Vybjp1dWlkOjEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OCcsCisgICAgICAgICAgICAgMHg2NzgxMjM0MTIzNDU2NzhMLCAweDEyMzQsIHV1aWQuUkVTRVJWRURfTkNTLCBOb25lKSwKKyAgICAgICAgICAgICgnNmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JywKKyAgICAgICAgICAgICAnezZiYTdiODEwLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOH0nLAorICAgICAgICAgICAgICc2YmE3YjgxMDlkYWQxMWQxODBiNDAwYzA0ZmQ0MzBjOCcsCisgICAgICAgICAgICAgJ1x4NmJceGE3XHhiOFx4MTBceDlkXHhhZFx4MTFceGQxXHg4MFx4YjRceDAwXHhjMFx4NGZceGQ0XHgzMFx4YzgnLAorICAgICAgICAgICAgICdceDEwXHhiOFx4YTdceDZiXHhhZFx4OWRceGQxXHgxMVx4ODBceGI0XHgwMFx4YzBceDRmXHhkNFx4MzBceGM4JywKKyAgICAgICAgICAgICAoMHg2YmE3YjgxMEwsIDB4OWRhZCwgMHgxMWQxLCAweDgwLCAweGI0LCAweDAwYzA0ZmQ0MzBjOEwpLAorICAgICAgICAgICAgIDB4NmJhN2I4MTA5ZGFkMTFkMTgwYjQwMGMwNGZkNDMwYzhMLAorICAgICAgICAgICAgICd1cm46dXVpZDo2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnLAorICAgICAgICAgICAgIDB4MWQxOWRhZDZiYTdiODEwTCwgMHhiNCwgdXVpZC5SRkNfNDEyMiwgMSksCisgICAgICAgICAgICAoJzZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCcsCisgICAgICAgICAgICAgJ3s2YmE3YjgxMS05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzh9JywKKyAgICAgICAgICAgICAnNmJhN2I4MTE5ZGFkMTFkMTgwYjQwMGMwNGZkNDMwYzgnLAorICAgICAgICAgICAgICdceDZiXHhhN1x4YjhceDExXHg5ZFx4YWRceDExXHhkMVx4ODBceGI0XHgwMFx4YzBceDRmXHhkNFx4MzBceGM4JywKKyAgICAgICAgICAgICAnXHgxMVx4YjhceGE3XHg2Ylx4YWRceDlkXHhkMVx4MTFceDgwXHhiNFx4MDBceGMwXHg0Zlx4ZDRceDMwXHhjOCcsCisgICAgICAgICAgICAgKDB4NmJhN2I4MTFMLCAweDlkYWQsIDB4MTFkMSwgMHg4MCwgMHhiNCwgMHgwMGMwNGZkNDMwYzhMKSwKKyAgICAgICAgICAgICAweDZiYTdiODExOWRhZDExZDE4MGI0MDBjMDRmZDQzMGM4TCwKKyAgICAgICAgICAgICAndXJuOnV1aWQ6NmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JywKKyAgICAgICAgICAgICAweDFkMTlkYWQ2YmE3YjgxMUwsIDB4YjQsIHV1aWQuUkZDXzQxMjIsIDEpLAorICAgICAgICAgICAgKCc2YmE3YjgxMi05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnLAorICAgICAgICAgICAgICd7NmJhN2I4MTItOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4fScsCisgICAgICAgICAgICAgJzZiYTdiODEyOWRhZDExZDE4MGI0MDBjMDRmZDQzMGM4JywKKyAgICAgICAgICAgICAnXHg2Ylx4YTdceGI4XHgxMlx4OWRceGFkXHgxMVx4ZDFceDgwXHhiNFx4MDBceGMwXHg0Zlx4ZDRceDMwXHhjOCcsCisgICAgICAgICAgICAgJ1x4MTJceGI4XHhhN1x4NmJceGFkXHg5ZFx4ZDFceDExXHg4MFx4YjRceDAwXHhjMFx4NGZceGQ0XHgzMFx4YzgnLAorICAgICAgICAgICAgICgweDZiYTdiODEyTCwgMHg5ZGFkLCAweDExZDEsIDB4ODAsIDB4YjQsIDB4MDBjMDRmZDQzMGM4TCksCisgICAgICAgICAgICAgMHg2YmE3YjgxMjlkYWQxMWQxODBiNDAwYzA0ZmQ0MzBjOEwsCisgICAgICAgICAgICAgJ3Vybjp1dWlkOjZiYTdiODEyLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCcsCisgICAgICAgICAgICAgMHgxZDE5ZGFkNmJhN2I4MTJMLCAweGI0LCB1dWlkLlJGQ180MTIyLCAxKSwKKyAgICAgICAgICAgICgnNmJhN2I4MTQtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JywKKyAgICAgICAgICAgICAnezZiYTdiODE0LTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOH0nLAorICAgICAgICAgICAgICc2YmE3YjgxNDlkYWQxMWQxODBiNDAwYzA0ZmQ0MzBjOCcsCisgICAgICAgICAgICAgJ1x4NmJceGE3XHhiOFx4MTRceDlkXHhhZFx4MTFceGQxXHg4MFx4YjRceDAwXHhjMFx4NGZceGQ0XHgzMFx4YzgnLAorICAgICAgICAgICAgICdceDE0XHhiOFx4YTdceDZiXHhhZFx4OWRceGQxXHgxMVx4ODBceGI0XHgwMFx4YzBceDRmXHhkNFx4MzBceGM4JywKKyAgICAgICAgICAgICAoMHg2YmE3YjgxNEwsIDB4OWRhZCwgMHgxMWQxLCAweDgwLCAweGI0LCAweDAwYzA0ZmQ0MzBjOEwpLAorICAgICAgICAgICAgIDB4NmJhN2I4MTQ5ZGFkMTFkMTgwYjQwMGMwNGZkNDMwYzhMLAorICAgICAgICAgICAgICd1cm46dXVpZDo2YmE3YjgxNC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnLAorICAgICAgICAgICAgIDB4MWQxOWRhZDZiYTdiODE0TCwgMHhiNCwgdXVpZC5SRkNfNDEyMiwgMSksCisgICAgICAgICAgICAoJzdkNDQ0ODQwLTlkYzAtMTFkMS1iMjQ1LTVmZmRjZTc0ZmFkMicsCisgICAgICAgICAgICAgJ3s3ZDQ0NDg0MC05ZGMwLTExZDEtYjI0NS01ZmZkY2U3NGZhZDJ9JywKKyAgICAgICAgICAgICAnN2Q0NDQ4NDA5ZGMwMTFkMWIyNDU1ZmZkY2U3NGZhZDInLAorICAgICAgICAgICAgICdceDdkXHg0NFx4NDhceDQwXHg5ZFx4YzBceDExXHhkMVx4YjJceDQ1XHg1Zlx4ZmRceGNlXHg3NFx4ZmFceGQyJywKKyAgICAgICAgICAgICAnXHg0MFx4NDhceDQ0XHg3ZFx4YzBceDlkXHhkMVx4MTFceGIyXHg0NVx4NWZceGZkXHhjZVx4NzRceGZhXHhkMicsCisgICAgICAgICAgICAgKDB4N2Q0NDQ4NDBMLCAweDlkYzAsIDB4MTFkMSwgMHhiMiwgMHg0NSwgMHg1ZmZkY2U3NGZhZDJMKSwKKyAgICAgICAgICAgICAweDdkNDQ0ODQwOWRjMDExZDFiMjQ1NWZmZGNlNzRmYWQyTCwKKyAgICAgICAgICAgICAndXJuOnV1aWQ6N2Q0NDQ4NDAtOWRjMC0xMWQxLWIyNDUtNWZmZGNlNzRmYWQyJywKKyAgICAgICAgICAgICAweDFkMTlkYzA3ZDQ0NDg0MEwsIDB4MzI0NSwgdXVpZC5SRkNfNDEyMiwgMSksCisgICAgICAgICAgICAoJ2U5MDI4OTNhLTlkMjItM2M3ZS1hN2I4LWQ2ZTMxM2I3MWQ5ZicsCisgICAgICAgICAgICAgJ3tlOTAyODkzYS05ZDIyLTNjN2UtYTdiOC1kNmUzMTNiNzFkOWZ9JywKKyAgICAgICAgICAgICAnZTkwMjg5M2E5ZDIyM2M3ZWE3YjhkNmUzMTNiNzFkOWYnLAorICAgICAgICAgICAgICdceGU5XHgwMlx4ODlceDNhXHg5ZFx4MjJceDNjXHg3ZVx4YTdceGI4XHhkNlx4ZTNceDEzXHhiN1x4MWRceDlmJywKKyAgICAgICAgICAgICAnXHgzYVx4ODlceDAyXHhlOVx4MjJceDlkXHg3ZVx4M2NceGE3XHhiOFx4ZDZceGUzXHgxM1x4YjdceDFkXHg5ZicsCisgICAgICAgICAgICAgKDB4ZTkwMjg5M2FMLCAweDlkMjIsIDB4M2M3ZSwgMHhhNywgMHhiOCwgMHhkNmUzMTNiNzFkOWZMKSwKKyAgICAgICAgICAgICAweGU5MDI4OTNhOWQyMjNjN2VhN2I4ZDZlMzEzYjcxZDlmTCwKKyAgICAgICAgICAgICAndXJuOnV1aWQ6ZTkwMjg5M2EtOWQyMi0zYzdlLWE3YjgtZDZlMzEzYjcxZDlmJywKKyAgICAgICAgICAgICAweGM3ZTlkMjJlOTAyODkzYUwsIDB4MjdiOCwgdXVpZC5SRkNfNDEyMiwgMyksCisgICAgICAgICAgICAoJ2ViNDI0MDI2LTZmNTQtNGVmOC1hNGQwLWJiNjU4YTFmYzZjZicsCisgICAgICAgICAgICAgJ3tlYjQyNDAyNi02ZjU0LTRlZjgtYTRkMC1iYjY1OGExZmM2Y2Z9JywKKyAgICAgICAgICAgICAnZWI0MjQwMjY2ZjU0NGVmOGE0ZDBiYjY1OGExZmM2Y2YnLAorICAgICAgICAgICAgICdceGViXHg0Mlx4NDBceDI2XHg2Zlx4NTRceDRlXHhmOFx4YTRceGQwXHhiYlx4NjVceDhhXHgxZlx4YzZceGNmJywKKyAgICAgICAgICAgICAnXHgyNlx4NDBceDQyXHhlYlx4NTRceDZmXHhmOFx4NGVceGE0XHhkMFx4YmJceDY1XHg4YVx4MWZceGM2XHhjZicsCisgICAgICAgICAgICAgKDB4ZWI0MjQwMjZMLCAweDZmNTQsIDB4NGVmOCwgMHhhNCwgMHhkMCwgMHhiYjY1OGExZmM2Y2ZMKSwKKyAgICAgICAgICAgICAweGViNDI0MDI2NmY1NDRlZjhhNGQwYmI2NThhMWZjNmNmTCwKKyAgICAgICAgICAgICAndXJuOnV1aWQ6ZWI0MjQwMjYtNmY1NC00ZWY4LWE0ZDAtYmI2NThhMWZjNmNmJywKKyAgICAgICAgICAgICAweGVmODZmNTRlYjQyNDAyNkwsIDB4MjRkMCwgdXVpZC5SRkNfNDEyMiwgNCksCisgICAgICAgICAgICAoJ2Y4MWQ0ZmFlLTdkZWMtMTFkMC1hNzY1LTAwYTBjOTFlNmJmNicsCisgICAgICAgICAgICAgJ3tmODFkNGZhZS03ZGVjLTExZDAtYTc2NS0wMGEwYzkxZTZiZjZ9JywKKyAgICAgICAgICAgICAnZjgxZDRmYWU3ZGVjMTFkMGE3NjUwMGEwYzkxZTZiZjYnLAorICAgICAgICAgICAgICdceGY4XHgxZFx4NGZceGFlXHg3ZFx4ZWNceDExXHhkMFx4YTdceDY1XHgwMFx4YTBceGM5XHgxZVx4NmJceGY2JywKKyAgICAgICAgICAgICAnXHhhZVx4NGZceDFkXHhmOFx4ZWNceDdkXHhkMFx4MTFceGE3XHg2NVx4MDBceGEwXHhjOVx4MWVceDZiXHhmNicsCisgICAgICAgICAgICAgKDB4ZjgxZDRmYWVMLCAweDdkZWMsIDB4MTFkMCwgMHhhNywgMHg2NSwgMHgwMGEwYzkxZTZiZjZMKSwKKyAgICAgICAgICAgICAweGY4MWQ0ZmFlN2RlYzExZDBhNzY1MDBhMGM5MWU2YmY2TCwKKyAgICAgICAgICAgICAndXJuOnV1aWQ6ZjgxZDRmYWUtN2RlYy0xMWQwLWE3NjUtMDBhMGM5MWU2YmY2JywKKyAgICAgICAgICAgICAweDFkMDdkZWNmODFkNGZhZUwsIDB4Mjc2NSwgdXVpZC5SRkNfNDEyMiwgMSksCisgICAgICAgICAgICAoJ2ZmZmVmZGZjLWZmZmUtZmZmZS1mZmZlLWZmZmVmZGZjZmJmYScsCisgICAgICAgICAgICAgJ3tmZmZlZmRmYy1mZmZlLWZmZmUtZmZmZS1mZmZlZmRmY2ZiZmF9JywKKyAgICAgICAgICAgICAnZmZmZWZkZmNmZmZlZmZmZWZmZmVmZmZlZmRmY2ZiZmEnLAorICAgICAgICAgICAgICdceGZmXHhmZVx4ZmRceGZjXHhmZlx4ZmVceGZmXHhmZVx4ZmZceGZlXHhmZlx4ZmVceGZkXHhmY1x4ZmJceGZhJywKKyAgICAgICAgICAgICAnXHhmY1x4ZmRceGZlXHhmZlx4ZmVceGZmXHhmZVx4ZmZceGZmXHhmZVx4ZmZceGZlXHhmZFx4ZmNceGZiXHhmYScsCisgICAgICAgICAgICAgKDB4ZmZmZWZkZmNMLCAweGZmZmUsIDB4ZmZmZSwgMHhmZiwgMHhmZSwgMHhmZmZlZmRmY2ZiZmFMKSwKKyAgICAgICAgICAgICAweGZmZmVmZGZjZmZmZWZmZmVmZmZlZmZmZWZkZmNmYmZhTCwKKyAgICAgICAgICAgICAndXJuOnV1aWQ6ZmZmZWZkZmMtZmZmZS1mZmZlLWZmZmUtZmZmZWZkZmNmYmZhJywKKyAgICAgICAgICAgICAweGZmZWZmZmVmZmZlZmRmY0wsIDB4M2ZmZSwgdXVpZC5SRVNFUlZFRF9GVVRVUkUsIE5vbmUpLAorICAgICAgICAgICAgKCdmZmZmZmZmZi1mZmZmLWZmZmYtZmZmZi1mZmZmZmZmZmZmZmYnLAorICAgICAgICAgICAgICd7ZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmfScsCisgICAgICAgICAgICAgJ2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmJywKKyAgICAgICAgICAgICAnXHhmZicqMTYsCisgICAgICAgICAgICAgJ1x4ZmYnKjE2LAorICAgICAgICAgICAgICgweGZmZmZmZmZmTCwgMHhmZmZmTCwgMHhmZmZmTCwgMHhmZiwgMHhmZiwgMHhmZmZmZmZmZmZmZmZMKSwKKyAgICAgICAgICAgICAweGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmTCwKKyAgICAgICAgICAgICAndXJuOnV1aWQ6ZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmJywKKyAgICAgICAgICAgICAweGZmZmZmZmZmZmZmZmZmZkwsIDB4M2ZmZiwgdXVpZC5SRVNFUlZFRF9GVVRVUkUsIE5vbmUpLAorICAgICAgICAgICAgXToKKyAgICAgICAgICAgIGVxdWl2YWxlbnRzID0gW10KKyAgICAgICAgICAgICMgQ29uc3RydWN0IGVhY2ggVVVJRCBpbiBzZXZlcmFsIGRpZmZlcmVudCB3YXlzLgorICAgICAgICAgICAgZm9yIHUgaW4gW3V1aWQuVVVJRChzdHJpbmcpLCB1dWlkLlVVSUQoY3VybHkpLCB1dWlkLlVVSUQoaGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICB1dWlkLlVVSUQoYnl0ZXM9Ynl0ZXMpLCB1dWlkLlVVSUQoYnl0ZXNfbGU9Ynl0ZXNfbGUpLAorICAgICAgICAgICAgICAgICAgICAgIHV1aWQuVVVJRChmaWVsZHM9ZmllbGRzKSwgdXVpZC5VVUlEKGludD1pbnRlZ2VyKSwKKyAgICAgICAgICAgICAgICAgICAgICB1dWlkLlVVSUQodXJuKV06CisgICAgICAgICAgICAgICAgIyBUZXN0IGFsbCBjb252ZXJzaW9ucyBhbmQgcHJvcGVydGllcyBvZiB0aGUgVVVJRCBvYmplY3QuCisgICAgICAgICAgICAgICAgZXF1YWwoc3RyKHUpLCBzdHJpbmcpCisgICAgICAgICAgICAgICAgZXF1YWwoaW50KHUpLCBpbnRlZ2VyKQorICAgICAgICAgICAgICAgIGVxdWFsKHUuYnl0ZXMsIGJ5dGVzKQorICAgICAgICAgICAgICAgIGVxdWFsKHUuYnl0ZXNfbGUsIGJ5dGVzX2xlKQorICAgICAgICAgICAgICAgIGVxdWFsKHUuZmllbGRzLCBmaWVsZHMpCisgICAgICAgICAgICAgICAgZXF1YWwodS50aW1lX2xvdywgZmllbGRzWzBdKQorICAgICAgICAgICAgICAgIGVxdWFsKHUudGltZV9taWQsIGZpZWxkc1sxXSkKKyAgICAgICAgICAgICAgICBlcXVhbCh1LnRpbWVfaGlfdmVyc2lvbiwgZmllbGRzWzJdKQorICAgICAgICAgICAgICAgIGVxdWFsKHUuY2xvY2tfc2VxX2hpX3ZhcmlhbnQsIGZpZWxkc1szXSkKKyAgICAgICAgICAgICAgICBlcXVhbCh1LmNsb2NrX3NlcV9sb3csIGZpZWxkc1s0XSkKKyAgICAgICAgICAgICAgICBlcXVhbCh1Lm5vZGUsIGZpZWxkc1s1XSkKKyAgICAgICAgICAgICAgICBlcXVhbCh1LmhleCwgaGV4KQorICAgICAgICAgICAgICAgIGVxdWFsKHUuaW50LCBpbnRlZ2VyKQorICAgICAgICAgICAgICAgIGVxdWFsKHUudXJuLCB1cm4pCisgICAgICAgICAgICAgICAgZXF1YWwodS50aW1lLCB0aW1lKQorICAgICAgICAgICAgICAgIGVxdWFsKHUuY2xvY2tfc2VxLCBjbG9ja19zZXEpCisgICAgICAgICAgICAgICAgZXF1YWwodS52YXJpYW50LCB2YXJpYW50KQorICAgICAgICAgICAgICAgIGVxdWFsKHUudmVyc2lvbiwgdmVyc2lvbikKKyAgICAgICAgICAgICAgICBlcXVpdmFsZW50cy5hcHBlbmQodSkKKworICAgICAgICAgICAgIyBEaWZmZXJlbnQgY29uc3RydWN0aW9uIG1ldGhvZHMgc2hvdWxkIGdpdmUgdGhlIHNhbWUgVVVJRC4KKyAgICAgICAgICAgIGZvciB1IGluIGVxdWl2YWxlbnRzOgorICAgICAgICAgICAgICAgIGZvciB2IGluIGVxdWl2YWxlbnRzOgorICAgICAgICAgICAgICAgICAgICBlcXVhbCh1LCB2KQorICAgICAgICAgICAgYXNjZW5kaW5nLmFwcGVuZCh1KQorCisgICAgICAgICMgVGVzdCBjb21wYXJpc29uIG9mIFVVSURzLgorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oYXNjZW5kaW5nKSk6CisgICAgICAgICAgICBmb3IgaiBpbiByYW5nZShsZW4oYXNjZW5kaW5nKSk6CisgICAgICAgICAgICAgICAgZXF1YWwoY21wKGksIGopLCBjbXAoYXNjZW5kaW5nW2ldLCBhc2NlbmRpbmdbal0pKQorCisgICAgICAgICMgVGVzdCBzb3J0aW5nIG9mIFVVSURzIChhYm92ZSBsaXN0IGlzIGluIGFzY2VuZGluZyBvcmRlcikuCisgICAgICAgIHJlc29ydGVkID0gYXNjZW5kaW5nWzpdCisgICAgICAgIHJlc29ydGVkLnJldmVyc2UoKQorICAgICAgICByZXNvcnRlZC5zb3J0KCkKKyAgICAgICAgZXF1YWwoYXNjZW5kaW5nLCByZXNvcnRlZCkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIGJhZHZhbHVlID0gbGFtYmRhIGY6IHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYpCisgICAgICAgIGJhZHR5cGUgPSBsYW1iZGEgZjogc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmKQorCisgICAgICAgICMgQmFkbHkgZm9ybWVkIGhleCBzdHJpbmdzLgorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRCgnJykpCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKCdhYmMnKSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoJzEyMzQ1Njc4MTIzNDU2NzgxMjM0NTY3ODEyMzQ1NjcnKSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoJzEyMzQ1Njc4MTIzNDU2NzgxMjM0NTY3ODEyMzQ1Njc4OScpKQorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRCgnMTIzNDU2NzgxMjM0NTY3ODEyMzQ1Njc4ejIzNDU2NzgnKSkKKworICAgICAgICAjIEJhZGx5IGZvcm1lZCBieXRlcy4KKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoYnl0ZXM9J2FiYycpKQorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChieXRlcz0nXDAnKjE1KSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoYnl0ZXM9J1wwJyoxNykpCisKKyAgICAgICAgIyBCYWRseSBmb3JtZWQgYnl0ZXNfbGUuCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKGJ5dGVzX2xlPSdhYmMnKSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoYnl0ZXNfbGU9J1wwJyoxNSkpCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKGJ5dGVzX2xlPSdcMCcqMTcpKQorCisgICAgICAgICMgQmFkbHkgZm9ybWVkIGZpZWxkcy4KKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoZmllbGRzPSgxLCkpKQorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChmaWVsZHM9KDEsIDIsIDMsIDQsIDUpKSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoZmllbGRzPSgxLCAyLCAzLCA0LCA1LCA2LCA3KSkpCisKKyAgICAgICAgIyBGaWVsZCB2YWx1ZXMgb3V0IG9mIHJhbmdlLgorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChmaWVsZHM9KC0xLCAwLCAwLCAwLCAwLCAwKSkpCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKGZpZWxkcz0oMHgxMDAwMDAwMDBMLCAwLCAwLCAwLCAwLCAwKSkpCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKGZpZWxkcz0oMCwgLTEsIDAsIDAsIDAsIDApKSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoZmllbGRzPSgwLCAweDEwMDAwTCwgMCwgMCwgMCwgMCkpKQorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChmaWVsZHM9KDAsIDAsIC0xLCAwLCAwLCAwKSkpCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKGZpZWxkcz0oMCwgMCwgMHgxMDAwMEwsIDAsIDAsIDApKSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoZmllbGRzPSgwLCAwLCAwLCAtMSwgMCwgMCkpKQorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChmaWVsZHM9KDAsIDAsIDAsIDB4MTAwTCwgMCwgMCkpKQorICAgICAgICBiYWR2YWx1ZShsYW1iZGE6IHV1aWQuVVVJRChmaWVsZHM9KDAsIDAsIDAsIDAsIC0xLCAwKSkpCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKGZpZWxkcz0oMCwgMCwgMCwgMCwgMHgxMDBMLCAwKSkpCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKGZpZWxkcz0oMCwgMCwgMCwgMCwgMCwgLTEpKSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoZmllbGRzPSgwLCAwLCAwLCAwLCAwLCAweDEwMDAwMDAwMDAwMDBMKSkpCisKKyAgICAgICAgIyBWZXJzaW9uIG51bWJlciBvdXQgb2YgcmFuZ2UuCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKCcwMCcqMTYsIHZlcnNpb249MCkpCisgICAgICAgIGJhZHZhbHVlKGxhbWJkYTogdXVpZC5VVUlEKCcwMCcqMTYsIHZlcnNpb249NikpCisKKyAgICAgICAgIyBJbnRlZ2VyIHZhbHVlIG91dCBvZiByYW5nZS4KKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoaW50PS0xKSkKKyAgICAgICAgYmFkdmFsdWUobGFtYmRhOiB1dWlkLlVVSUQoaW50PTE8PDEyOEwpKQorCisgICAgICAgICMgTXVzdCBzdXBwbHkgZXhhY3RseSBvbmUgb2YgaGV4LCBieXRlcywgZmllbGRzLCBpbnQuCisgICAgICAgIGgsIGIsIGYsIGkgPSAnMDAnKjE2LCAnXDAnKjE2LCAoMCwgMCwgMCwgMCwgMCwgMCksIDAKKyAgICAgICAgdXVpZC5VVUlEKGgpCisgICAgICAgIHV1aWQuVVVJRChoZXg9aCkKKyAgICAgICAgdXVpZC5VVUlEKGJ5dGVzPWIpCisgICAgICAgIHV1aWQuVVVJRChieXRlc19sZT1iKQorICAgICAgICB1dWlkLlVVSUQoZmllbGRzPWYpCisgICAgICAgIHV1aWQuVVVJRChpbnQ9aSkKKworICAgICAgICAjIFdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgKHBvc2l0aW9uYWwpLgorICAgICAgICBiYWR0eXBlKGxhbWJkYTogdXVpZC5VVUlEKCkpCisgICAgICAgIGJhZHR5cGUobGFtYmRhOiB1dWlkLlVVSUQoaCwgYikpCisgICAgICAgIGJhZHR5cGUobGFtYmRhOiB1dWlkLlVVSUQoaCwgYiwgYikpCisgICAgICAgIGJhZHR5cGUobGFtYmRhOiB1dWlkLlVVSUQoaCwgYiwgYiwgZikpCisgICAgICAgIGJhZHR5cGUobGFtYmRhOiB1dWlkLlVVSUQoaCwgYiwgYiwgZiwgaSkpCisKKyAgICAgICAgIyBEdXBsaWNhdGUgYXJndW1lbnRzLgorICAgICAgICBmb3IgaGggaW4gW1tdLCBbKCdoZXgnLCBoKV1dOgorICAgICAgICAgICAgZm9yIGJiIGluIFtbXSwgWygnYnl0ZXMnLCBiKV1dOgorICAgICAgICAgICAgICAgIGZvciBiYmxlIGluIFtbXSwgWygnYnl0ZXNfbGUnLCBiKV1dOgorICAgICAgICAgICAgICAgICAgICBmb3IgaWkgaW4gW1tdLCBbKCdpbnQnLCBpKV1dOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZmIGluIFtbXSwgWygnZmllbGRzJywgZildXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gZGljdChoaCArIGJiICsgYmJsZSArIGlpICsgZmYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGFyZ3MpICE9IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZHR5cGUobGFtYmRhOiB1dWlkLlVVSUQoaCwgKiphcmdzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgIT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkdHlwZShsYW1iZGE6IHV1aWQuVVVJRCgqKmFyZ3MpKQorCisgICAgICAgICMgSW1tdXRhYmlsaXR5LgorICAgICAgICB1ID0gdXVpZC5VVUlEKGgpCisgICAgICAgIGJhZHR5cGUobGFtYmRhOiBzZXRhdHRyKHUsICdoZXgnLCBoKSkKKyAgICAgICAgYmFkdHlwZShsYW1iZGE6IHNldGF0dHIodSwgJ2J5dGVzJywgYikpCisgICAgICAgIGJhZHR5cGUobGFtYmRhOiBzZXRhdHRyKHUsICdieXRlc19sZScsIGIpKQorICAgICAgICBiYWR0eXBlKGxhbWJkYTogc2V0YXR0cih1LCAnZmllbGRzJywgZikpCisgICAgICAgIGJhZHR5cGUobGFtYmRhOiBzZXRhdHRyKHUsICdpbnQnLCBpKSkKKyAgICAgICAgYmFkdHlwZShsYW1iZGE6IHNldGF0dHIodSwgJ3RpbWVfbG93JywgMCkpCisgICAgICAgIGJhZHR5cGUobGFtYmRhOiBzZXRhdHRyKHUsICd0aW1lX21pZCcsIDApKQorICAgICAgICBiYWR0eXBlKGxhbWJkYTogc2V0YXR0cih1LCAndGltZV9oaV92ZXJzaW9uJywgMCkpCisgICAgICAgIGJhZHR5cGUobGFtYmRhOiBzZXRhdHRyKHUsICd0aW1lX2hpX3ZlcnNpb24nLCAwKSkKKyAgICAgICAgYmFkdHlwZShsYW1iZGE6IHNldGF0dHIodSwgJ2Nsb2NrX3NlcV9oaV92YXJpYW50JywgMCkpCisgICAgICAgIGJhZHR5cGUobGFtYmRhOiBzZXRhdHRyKHUsICdjbG9ja19zZXFfbG93JywgMCkpCisgICAgICAgIGJhZHR5cGUobGFtYmRhOiBzZXRhdHRyKHUsICdub2RlJywgMCkpCisKKyAgICBkZWYgY2hlY2tfbm9kZShzZWxmLCBub2RlLCBzb3VyY2UpOgorICAgICAgICBtZXNzYWdlID0gIiUwMTJ4IGlzIG5vdCBhbiBSRkMgNDEyMiBub2RlIElEIiAlIG5vZGUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPCBub2RlLCBtZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm9kZSA8ICgxTCA8PCA0OCksIG1lc3NhZ2UpCisKKyAgICAgICAgVGVzdFVVSUQuc291cmNlMm5vZGVbc291cmNlXSA9IG5vZGUKKyAgICAgICAgaWYgVGVzdFVVSUQubGFzdF9ub2RlOgorICAgICAgICAgICAgaWYgVGVzdFVVSUQubGFzdF9ub2RlICE9IG5vZGU6CisgICAgICAgICAgICAgICAgbXNnID0gImRpZmZlcmVudCBzb3VyY2VzIGRpc2FncmVlIG9uIG5vZGU6XG4iCisgICAgICAgICAgICAgICAgZm9yIHMsIG4gaW4gVGVzdFVVSUQuc291cmNlMm5vZGUuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIG1zZyArPSAiICAgIGZyb20gc291cmNlICVyLCBub2RlIHdhcyAlMDEyeFxuIiAlIChzLCBuKQorICAgICAgICAgICAgICAgICMgVGhlcmUncyBhY3R1YWxseSBubyByZWFzb24gdG8gZXhwZWN0IHRoZSBNQUMgYWRkcmVzc2VzCisgICAgICAgICAgICAgICAgIyB0byBhZ3JlZSBhY3Jvc3MgdmFyaW91cyBtZXRob2RzIC0tIGUuZy4sIGEgYm94IG1heSBoYXZlCisgICAgICAgICAgICAgICAgIyBtdWx0aXBsZSBuZXR3b3JrIGludGVyZmFjZXMsIGFuZCBkaWZmZXJlbnQgd2F5cyBvZiBnZXR0aW5nCisgICAgICAgICAgICAgICAgIyBhIE1BQyBhZGRyZXNzIG1heSBmYXZvciBkaWZmZXJlbnQgSFcuCisgICAgICAgICAgICAgICAgIyNzZWxmLmZhaWwobXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgVGVzdFVVSUQubGFzdF9ub2RlID0gbm9kZQorCisgICAgZGVmIHRlc3RfaWZjb25maWdfZ2V0bm9kZShzZWxmKToKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgbm9kZSA9IHV1aWQuX2lmY29uZmlnX2dldG5vZGUoKQorICAgICAgICAgICAgaWYgbm9kZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX25vZGUobm9kZSwgJ2lmY29uZmlnJykKKworICAgIGRlZiB0ZXN0X2lwY29uZmlnX2dldG5vZGUoc2VsZik6CisgICAgICAgIGltcG9ydCBvcworICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICBub2RlID0gdXVpZC5faXBjb25maWdfZ2V0bm9kZSgpCisgICAgICAgICAgICBpZiBub2RlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlLCAnaXBjb25maWcnKQorCisgICAgZGVmIHRlc3RfbmV0Ymlvc19nZXRub2RlKHNlbGYpOgorICAgICAgICBpZiBpbXBvcnRhYmxlKCd3aW4zMnduZXQnKSBhbmQgaW1wb3J0YWJsZSgnbmV0YmlvcycpOgorICAgICAgICAgICAgc2VsZi5jaGVja19ub2RlKHV1aWQuX25ldGJpb3NfZ2V0bm9kZSgpLCAnbmV0YmlvcycpCisKKyAgICBkZWYgdGVzdF9yYW5kb21fZ2V0bm9kZShzZWxmKToKKyAgICAgICAgbm9kZSA9IHV1aWQuX3JhbmRvbV9nZXRub2RlKCkKKyAgICAgICAgIyBMZWFzdCBzaWduaWZpY2FudCBiaXQgb2YgZmlyc3Qgb2N0ZXQgbXVzdCBiZSBzZXQuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlICYgMHgwMTAwMDAwMDAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlIDwgKDFMIDw8IDQ4KSkKKworICAgIGRlZiB0ZXN0X3VuaXhkbGxfZ2V0bm9kZShzZWxmKToKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgaWYgaW1wb3J0YWJsZSgnY3R5cGVzJykgYW5kIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKKyAgICAgICAgICAgIHRyeTogIyBJc3N1ZXMgMTQ4MSwgMzU4MTogX3V1aWRfZ2VuZXJhdGVfdGltZSgpIG1pZ2h0IGJlIE5vbmUuCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19ub2RlKHV1aWQuX3VuaXhkbGxfZ2V0bm9kZSgpLCAndW5peGRsbCcpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3dpbmRsbF9nZXRub2RlKHNlbGYpOgorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgaWYgaW1wb3J0YWJsZSgnY3R5cGVzJykgYW5kIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfbm9kZSh1dWlkLl93aW5kbGxfZ2V0bm9kZSgpLCAnd2luZGxsJykKKworICAgIGRlZiB0ZXN0X2dldG5vZGUoc2VsZik6CisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgbm9kZTEgPSB1dWlkLmdldG5vZGUoKQorICAgICAgICBzZWxmLmNoZWNrX25vZGUobm9kZTEsICJnZXRub2RlMSIpCisKKyAgICAgICAgIyBUZXN0IGl0IGFnYWluIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS4KKyAgICAgICAgbm9kZTIgPSB1dWlkLmdldG5vZGUoKQorICAgICAgICBzZWxmLmNoZWNrX25vZGUobm9kZTIsICJnZXRub2RlMiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub2RlMSwgbm9kZTIpCisKKyAgICBkZWYgdGVzdF91dWlkMShzZWxmKToKKyAgICAgICAgIyB1dWlkMSByZXF1aXJlcyBjdHlwZXMuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBjdHlwZXMKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdXVpZDEoKSBnZW5lcmF0ZXMgVVVJRHMgdGhhdCBhcmUgYWN0dWFsbHkgdmVyc2lvbiAxLgorICAgICAgICBmb3IgdSBpbiBbdXVpZC51dWlkMSgpIGZvciBpIGluIHJhbmdlKDEwKV06CisgICAgICAgICAgICBlcXVhbCh1LnZhcmlhbnQsIHV1aWQuUkZDXzQxMjIpCisgICAgICAgICAgICBlcXVhbCh1LnZlcnNpb24sIDEpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGdlbmVyYXRlZCBVVUlEcyBhcmUgYWN0dWFsbHkgdW5pcXVlLgorICAgICAgICB1dWlkcyA9IHt9CisgICAgICAgIGZvciB1IGluIFt1dWlkLnV1aWQxKCkgZm9yIGkgaW4gcmFuZ2UoMTAwMCldOgorICAgICAgICAgICAgdXVpZHNbdV0gPSAxCisgICAgICAgIGVxdWFsKGxlbih1dWlkcy5rZXlzKCkpLCAxMDAwKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSBzdXBwbGllZCBub2RlIElEIGFwcGVhcnMgaW4gdGhlIFVVSUQuCisgICAgICAgIHUgPSB1dWlkLnV1aWQxKDApCisgICAgICAgIGVxdWFsKHUubm9kZSwgMCkKKyAgICAgICAgdSA9IHV1aWQudXVpZDEoMHgxMjM0NTY3ODlhYmMpCisgICAgICAgIGVxdWFsKHUubm9kZSwgMHgxMjM0NTY3ODlhYmMpCisgICAgICAgIHUgPSB1dWlkLnV1aWQxKDB4ZmZmZmZmZmZmZmZmKQorICAgICAgICBlcXVhbCh1Lm5vZGUsIDB4ZmZmZmZmZmZmZmZmKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSBzdXBwbGllZCBjbG9jayBzZXF1ZW5jZSBhcHBlYXJzIGluIHRoZSBVVUlELgorICAgICAgICB1ID0gdXVpZC51dWlkMSgweDEyMzQ1Njc4OWFiYywgMCkKKyAgICAgICAgZXF1YWwodS5ub2RlLCAweDEyMzQ1Njc4OWFiYykKKyAgICAgICAgZXF1YWwoKCh1LmNsb2NrX3NlcV9oaV92YXJpYW50ICYgMHgzZikgPDwgOCkgfCB1LmNsb2NrX3NlcV9sb3csIDApCisgICAgICAgIHUgPSB1dWlkLnV1aWQxKDB4MTIzNDU2Nzg5YWJjLCAweDEyMzQpCisgICAgICAgIGVxdWFsKHUubm9kZSwgMHgxMjM0NTY3ODlhYmMpCisgICAgICAgIGVxdWFsKCgodS5jbG9ja19zZXFfaGlfdmFyaWFudCAmIDB4M2YpIDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1LmNsb2NrX3NlcV9sb3csIDB4MTIzNCkKKyAgICAgICAgdSA9IHV1aWQudXVpZDEoMHgxMjM0NTY3ODlhYmMsIDB4M2ZmZikKKyAgICAgICAgZXF1YWwodS5ub2RlLCAweDEyMzQ1Njc4OWFiYykKKyAgICAgICAgZXF1YWwoKCh1LmNsb2NrX3NlcV9oaV92YXJpYW50ICYgMHgzZikgPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgIHUuY2xvY2tfc2VxX2xvdywgMHgzZmZmKQorCisgICAgZGVmIHRlc3RfdXVpZDMoc2VsZik6CisgICAgICAgIGVxdWFsID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgICMgVGVzdCBzb21lIGtub3duIHZlcnNpb24tMyBVVUlEcy4KKyAgICAgICAgZm9yIHUsIHYgaW4gWyh1dWlkLnV1aWQzKHV1aWQuTkFNRVNQQUNFX0ROUywgJ3B5dGhvbi5vcmcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAnNmZhNDU5ZWEtZWU4YS0zY2E0LTg5NGUtZGI3N2UxNjAzNTVlJyksCisgICAgICAgICAgICAgICAgICAgICAodXVpZC51dWlkMyh1dWlkLk5BTUVTUEFDRV9VUkwsICdodHRwOi8vcHl0aG9uLm9yZy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAnOWZlOGU4YzQtYWFhOC0zMmE5LWE1NWMtNDUzNWE4OGI3NDhkJyksCisgICAgICAgICAgICAgICAgICAgICAodXVpZC51dWlkMyh1dWlkLk5BTUVTUEFDRV9PSUQsICcxLjMuNi4xJyksCisgICAgICAgICAgICAgICAgICAgICAgJ2RkMWExY2VmLTEzZDUtMzY4YS1hZDgyLWVjYTcxYWNkNGNkMScpLAorICAgICAgICAgICAgICAgICAgICAgKHV1aWQudXVpZDModXVpZC5OQU1FU1BBQ0VfWDUwMCwgJ2M9Y2EnKSwKKyAgICAgICAgICAgICAgICAgICAgICAnNjU4ZDMwMDItZGI2Yi0zMDQwLWExZDEtOGRkZDdkMTg5YTRkJyksCisgICAgICAgICAgICAgICAgICAgIF06CisgICAgICAgICAgICBlcXVhbCh1LnZhcmlhbnQsIHV1aWQuUkZDXzQxMjIpCisgICAgICAgICAgICBlcXVhbCh1LnZlcnNpb24sIDMpCisgICAgICAgICAgICBlcXVhbCh1LCB1dWlkLlVVSUQodikpCisgICAgICAgICAgICBlcXVhbChzdHIodSksIHYpCisKKyAgICBkZWYgdGVzdF91dWlkNChzZWxmKToKKyAgICAgICAgIyB1dWlkNCByZXF1aXJlcyBjdHlwZXMuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBjdHlwZXMKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdXVpZDQoKSBnZW5lcmF0ZXMgVVVJRHMgdGhhdCBhcmUgYWN0dWFsbHkgdmVyc2lvbiA0LgorICAgICAgICBmb3IgdSBpbiBbdXVpZC51dWlkNCgpIGZvciBpIGluIHJhbmdlKDEwKV06CisgICAgICAgICAgICBlcXVhbCh1LnZhcmlhbnQsIHV1aWQuUkZDXzQxMjIpCisgICAgICAgICAgICBlcXVhbCh1LnZlcnNpb24sIDQpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGdlbmVyYXRlZCBVVUlEcyBhcmUgYWN0dWFsbHkgdW5pcXVlLgorICAgICAgICB1dWlkcyA9IHt9CisgICAgICAgIGZvciB1IGluIFt1dWlkLnV1aWQ0KCkgZm9yIGkgaW4gcmFuZ2UoMTAwMCldOgorICAgICAgICAgICAgdXVpZHNbdV0gPSAxCisgICAgICAgIGVxdWFsKGxlbih1dWlkcy5rZXlzKCkpLCAxMDAwKQorCisgICAgZGVmIHRlc3RfdXVpZDUoc2VsZik6CisgICAgICAgIGVxdWFsID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgICMgVGVzdCBzb21lIGtub3duIHZlcnNpb24tNSBVVUlEcy4KKyAgICAgICAgZm9yIHUsIHYgaW4gWyh1dWlkLnV1aWQ1KHV1aWQuTkFNRVNQQUNFX0ROUywgJ3B5dGhvbi5vcmcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAnODg2MzEzZTEtM2I4YS01MzcyLTliOTAtMGM5YWVlMTk5ZTVkJyksCisgICAgICAgICAgICAgICAgICAgICAodXVpZC51dWlkNSh1dWlkLk5BTUVTUEFDRV9VUkwsICdodHRwOi8vcHl0aG9uLm9yZy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAnNGM1NjVmMGQtM2Y1YS01ODkwLWI0MWItMjBjZjQ3NzAxYzVlJyksCisgICAgICAgICAgICAgICAgICAgICAodXVpZC51dWlkNSh1dWlkLk5BTUVTUEFDRV9PSUQsICcxLjMuNi4xJyksCisgICAgICAgICAgICAgICAgICAgICAgJzE0NDdmYTYxLTUyNzctNWZlZi1hOWIzLWZiYzZlNDRmNGFmMycpLAorICAgICAgICAgICAgICAgICAgICAgKHV1aWQudXVpZDUodXVpZC5OQU1FU1BBQ0VfWDUwMCwgJ2M9Y2EnKSwKKyAgICAgICAgICAgICAgICAgICAgICAnY2M5NTdkZDEtYTk3Mi01MzQ5LTk4Y2QtODc0MTkwMDAyNzk4JyksCisgICAgICAgICAgICAgICAgICAgIF06CisgICAgICAgICAgICBlcXVhbCh1LnZhcmlhbnQsIHV1aWQuUkZDXzQxMjIpCisgICAgICAgICAgICBlcXVhbCh1LnZlcnNpb24sIDUpCisgICAgICAgICAgICBlcXVhbCh1LCB1dWlkLlVVSUQodikpCisgICAgICAgICAgICBlcXVhbChzdHIodSksIHYpCisKKyAgICBkZWYgdGVzdElzc3VlODYyMShzZWxmKToKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgaWYgb3MubmFtZSAhPSAncG9zaXgnOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBPbiBhdCBsZWFzdCBzb21lIHZlcnNpb25zIG9mIE9TWCB1dWlkLnV1aWQ0IGdlbmVyYXRlcworICAgICAgICAjIHRoZSBzYW1lIHNlcXVlbmNlIG9mIFVVSURzIGluIHRoZSBwYXJlbnQgYW5kIGFueQorICAgICAgICAjIGNoaWxkcmVuIHN0YXJ0ZWQgdXNpbmcgZm9yay4KKyAgICAgICAgZmRzID0gb3MucGlwZSgpCisgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkc1swXSkKKyAgICAgICAgICAgIHZhbHVlID0gdXVpZC51dWlkNCgpCisgICAgICAgICAgICBvcy53cml0ZShmZHNbMV0sIHZhbHVlLmhleCkKKyAgICAgICAgICAgIG9zLl9leGl0KDApCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkc1sxXSkKKyAgICAgICAgICAgIHBhcmVudF92YWx1ZSA9IHV1aWQudXVpZDQoKS5oZXgKKyAgICAgICAgICAgIG9zLndhaXRwaWQocGlkLCAwKQorICAgICAgICAgICAgY2hpbGRfdmFsdWUgPSBvcy5yZWFkKGZkc1swXSwgMTAwKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHBhcmVudF92YWx1ZSwgY2hpbGRfdmFsdWUpCisKKworCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFVVSUQpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dhaXQzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfd2FpdDMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwNzgzYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dhaXQzLnB5CkBAIC0wLDAgKzEsMzkgQEAKKyIiIlRoaXMgdGVzdCBjaGVja3MgZm9yIGNvcnJlY3Qgd2FpdDMoKSBiZWhhdmlvci4KKyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC5mb3JrX3dhaXQgaW1wb3J0IEZvcmtXYWl0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJlYXBfY2hpbGRyZW4KKwordHJ5OgorICAgIG9zLmZvcmsKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCwgIm9zLmZvcmsgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF93YWl0MyIKKwordHJ5OgorICAgIG9zLndhaXQzCitleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QsICJvcy53YWl0MyBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X3dhaXQzIgorCitjbGFzcyBXYWl0M1Rlc3QoRm9ya1dhaXQpOgorICAgIGRlZiB3YWl0X2ltcGwoc2VsZiwgY3BpZCk6CisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgICMgd2FpdDMoKSBzaG91bGRuJ3QgaGFuZywgYnV0IHNvbWUgb2YgdGhlIGJ1aWxkYm90cyBzZWVtIHRvIGhhbmcKKyAgICAgICAgICAgICMgaW4gdGhlIGZvcmtpbmcgdGVzdHMuICBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gZml4IHRoZSBwcm9ibGVtLgorICAgICAgICAgICAgc3BpZCwgc3RhdHVzLCBydXNhZ2UgPSBvcy53YWl0Myhvcy5XTk9IQU5HKQorICAgICAgICAgICAgaWYgc3BpZCA9PSBjcGlkOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEuMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwaWQsIGNwaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAiY2F1c2UgPSAlZCwgZXhpdCA9ICVkIiAlIChzdGF0dXMmMHhmZiwgc3RhdHVzPj44KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1c2FnZSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChXYWl0M1Rlc3QpCisgICAgcmVhcF9jaGlsZHJlbigpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dhaXQ0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfd2FpdDQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA0YTExYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dhaXQ0LnB5CkBAIC0wLDAgKzEsMzIgQEAKKyIiIlRoaXMgdGVzdCBjaGVja3MgZm9yIGNvcnJlY3Qgd2FpdDQoKSBiZWhhdmlvci4KKyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCitmcm9tIHRlc3QuZm9ya193YWl0IGltcG9ydCBGb3JrV2FpdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCByZWFwX2NoaWxkcmVuLCBnZXRfYXR0cmlidXRlCisKKyMgSWYgZWl0aGVyIG9mIHRoZXNlIGRvIG5vdCBleGlzdCwgc2tpcCB0aGlzIHRlc3QuCitnZXRfYXR0cmlidXRlKG9zLCAnZm9yaycpCitnZXRfYXR0cmlidXRlKG9zLCAnd2FpdDQnKQorCisKK2NsYXNzIFdhaXQ0VGVzdChGb3JrV2FpdCk6CisgICAgZGVmIHdhaXRfaW1wbChzZWxmLCBjcGlkKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgIyB3YWl0NCgpIHNob3VsZG4ndCBoYW5nLCBidXQgc29tZSBvZiB0aGUgYnVpbGRib3RzIHNlZW0gdG8gaGFuZworICAgICAgICAgICAgIyBpbiB0aGUgZm9ya2luZyB0ZXN0cy4gIFRoaXMgaXMgYW4gYXR0ZW1wdCB0byBmaXggdGhlIHByb2JsZW0uCisgICAgICAgICAgICBzcGlkLCBzdGF0dXMsIHJ1c2FnZSA9IG9zLndhaXQ0KGNwaWQsIG9zLldOT0hBTkcpCisgICAgICAgICAgICBpZiBzcGlkID09IGNwaWQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwaWQsIGNwaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAiY2F1c2UgPSAlZCwgZXhpdCA9ICVkIiAlIChzdGF0dXMmMHhmZiwgc3RhdHVzPj44KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1c2FnZSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChXYWl0NFRlc3QpCisgICAgcmVhcF9jaGlsZHJlbigpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dhcm5pbmdzLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfd2FybmluZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwMmVkOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dhcm5pbmdzLnB5CkBAIC0wLDAgKzEsNzYxIEBACitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCitpbXBvcnQgbGluZWNhY2hlCitpbXBvcnQgb3MKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3VicHJvY2VzcworZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCisKK2ltcG9ydCB3YXJuaW5nX3Rlc3RzCisKK2ltcG9ydCB3YXJuaW5ncyBhcyBvcmlnaW5hbF93YXJuaW5ncworCitweV93YXJuaW5ncyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCd3YXJuaW5ncycsIGJsb2NrZWQ9Wydfd2FybmluZ3MnXSkKK2Nfd2FybmluZ3MgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnd2FybmluZ3MnLCBmcmVzaD1bJ193YXJuaW5ncyddKQorCitAY29udGV4dG1hbmFnZXIKK2RlZiB3YXJuaW5nc19zdGF0ZShtb2R1bGUpOgorICAgICIiIlVzZSBhIHNwZWNpZmljIHdhcm5pbmdzIGltcGxlbWVudGF0aW9uIGluIHdhcm5pbmdfdGVzdHMuIiIiCisgICAgZ2xvYmFsIF9fd2FybmluZ3JlZ2lzdHJ5X18KKyAgICBmb3IgdG9fY2xlYXIgaW4gKHN5cywgd2FybmluZ190ZXN0cyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRvX2NsZWFyLl9fd2FybmluZ3JlZ2lzdHJ5X18uY2xlYXIoKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgdHJ5OgorICAgICAgICBfX3dhcm5pbmdyZWdpc3RyeV9fLmNsZWFyKCkKKyAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICBwYXNzCisgICAgb3JpZ2luYWxfd2FybmluZ3MgPSB3YXJuaW5nX3Rlc3RzLndhcm5pbmdzCisgICAgb3JpZ2luYWxfZmlsdGVycyA9IG1vZHVsZS5maWx0ZXJzCisgICAgdHJ5OgorICAgICAgICBtb2R1bGUuZmlsdGVycyA9IG9yaWdpbmFsX2ZpbHRlcnNbOl0KKyAgICAgICAgbW9kdWxlLnNpbXBsZWZpbHRlcigib25jZSIpCisgICAgICAgIHdhcm5pbmdfdGVzdHMud2FybmluZ3MgPSBtb2R1bGUKKyAgICAgICAgeWllbGQKKyAgICBmaW5hbGx5OgorICAgICAgICB3YXJuaW5nX3Rlc3RzLndhcm5pbmdzID0gb3JpZ2luYWxfd2FybmluZ3MKKyAgICAgICAgbW9kdWxlLmZpbHRlcnMgPSBvcmlnaW5hbF9maWx0ZXJzCisKKworY2xhc3MgQmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiQmFzaWMgYm9va2tlZXBpbmcgcmVxdWlyZWQgZm9yIHRlc3RpbmcuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgVGhlIF9fd2FybmluZ3JlZ2lzdHJ5X18gbmVlZHMgdG8gYmUgaW4gYSBwcmlzdGluZSBzdGF0ZSBmb3IgdGVzdHMKKyAgICAgICAgIyB0byB3b3JrIHByb3Blcmx5LgorICAgICAgICBpZiAnX193YXJuaW5ncmVnaXN0cnlfXycgaW4gZ2xvYmFscygpOgorICAgICAgICAgICAgZGVsIGdsb2JhbHMoKVsnX193YXJuaW5ncmVnaXN0cnlfXyddCisgICAgICAgIGlmIGhhc2F0dHIod2FybmluZ190ZXN0cywgJ19fd2FybmluZ3JlZ2lzdHJ5X18nKToKKyAgICAgICAgICAgIGRlbCB3YXJuaW5nX3Rlc3RzLl9fd2FybmluZ3JlZ2lzdHJ5X18KKyAgICAgICAgaWYgaGFzYXR0cihzeXMsICdfX3dhcm5pbmdyZWdpc3RyeV9fJyk6CisgICAgICAgICAgICBkZWwgc3lzLl9fd2FybmluZ3JlZ2lzdHJ5X18KKyAgICAgICAgIyBUaGUgJ3dhcm5pbmdzJyBtb2R1bGUgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBzbyB0aGF0IHRoZSBwcm9wZXIKKyAgICAgICAgIyBpbnRlcmFjdGlvbiBiZXR3ZWVuIF93YXJuaW5ncyBhbmQgJ3dhcm5pbmdzJyBjYW4gYmUgY29udHJvbGxlZC4KKyAgICAgICAgc3lzLm1vZHVsZXNbJ3dhcm5pbmdzJ10gPSBzZWxmLm1vZHVsZQorICAgICAgICBzdXBlcihCYXNlVGVzdCwgc2VsZikuc2V0VXAoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzeXMubW9kdWxlc1snd2FybmluZ3MnXSA9IG9yaWdpbmFsX3dhcm5pbmdzCisgICAgICAgIHN1cGVyKEJhc2VUZXN0LCBzZWxmKS50ZWFyRG93bigpCisKKworY2xhc3MgRmlsdGVyVGVzdHMob2JqZWN0KToKKworICAgICIiIlRlc3RpbmcgdGhlIGZpbHRlcmluZyBmdW5jdGlvbmFsaXR5LiIiIgorCisgICAgZGVmIHRlc3RfZXJyb3Ioc2VsZik6CisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVzZXJXYXJuaW5nLCBzZWxmLm1vZHVsZS53YXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsdGVyVGVzdHMudGVzdF9lcnJvciIpCisKKyAgICBkZWYgdGVzdF9pZ25vcmUoc2VsZik6CisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKCJGaWx0ZXJUZXN0cy50ZXN0X2lnbm9yZSIsIFVzZXJXYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDApCisKKyAgICBkZWYgdGVzdF9hbHdheXMoc2VsZik6CisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiYWx3YXlzIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBtZXNzYWdlID0gIkZpbHRlclRlc3RzLnRlc3RfYWx3YXlzIgorICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybihtZXNzYWdlLCBVc2VyV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXNzYWdlLCB3Wy0xXS5tZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybihtZXNzYWdlLCBVc2VyV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3Wy0xXS5tZXNzYWdlLCBtZXNzYWdlKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdChzZWxmKToKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5yZXNldHdhcm5pbmdzKCkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJkZWZhdWx0IiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBtZXNzYWdlID0gVXNlcldhcm5pbmcoIkZpbHRlclRlc3RzLnRlc3RfZGVmYXVsdCIpCisgICAgICAgICAgICBmb3IgeCBpbiB4cmFuZ2UoMik6CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybihtZXNzYWdlLCBVc2VyV2FybmluZykKKyAgICAgICAgICAgICAgICBpZiB4ID09IDA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKKyAgICAgICAgICAgICAgICAgICAgZGVsIHdbOl0KKyAgICAgICAgICAgICAgICBlbGlmIHggPT0gMToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibG9vcCB2YXJpYW50IHVuaGFuZGxlZCIpCisKKyAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygibW9kdWxlIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBtZXNzYWdlID0gVXNlcldhcm5pbmcoIkZpbHRlclRlc3RzLnRlc3RfbW9kdWxlIikKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4obWVzc2FnZSwgVXNlcldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdbLTFdLm1lc3NhZ2UsIG1lc3NhZ2UpCisgICAgICAgICAgICBkZWwgd1s6XQorICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybihtZXNzYWdlLCBVc2VyV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQorCisgICAgZGVmIHRlc3Rfb25jZShzZWxmKToKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5yZXNldHdhcm5pbmdzKCkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJvbmNlIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBtZXNzYWdlID0gVXNlcldhcm5pbmcoIkZpbHRlclRlc3RzLnRlc3Rfb25jZSIpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KG1lc3NhZ2UsIFVzZXJXYXJuaW5nLCAidGVzdF93YXJuaW5ncy5weSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKKyAgICAgICAgICAgIGRlbCB3WzpdCisgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KG1lc3NhZ2UsIFVzZXJXYXJuaW5nLCAidGVzdF93YXJuaW5ncy5weSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdChtZXNzYWdlLCBVc2VyV2FybmluZywgInRlc3Rfd2FybmluZ3MyLnB5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDApCisKKyAgICBkZWYgdGVzdF9pbmhlcml0YW5jZShzZWxmKToKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5yZXNldHdhcm5pbmdzKCkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJlcnJvciIsIGNhdGVnb3J5PVdhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVc2VyV2FybmluZywgc2VsZi5tb2R1bGUud2FybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbHRlclRlc3RzLnRlc3RfaW5oZXJpdGFuY2UiLCBVc2VyV2FybmluZykKKworICAgIGRlZiB0ZXN0X29yZGVyaW5nKHNlbGYpOgorICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLAorICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kPVRydWUpCisgICAgICAgICAgICBkZWwgd1s6XQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4oIkZpbHRlclRlc3RzLnRlc3Rfb3JkZXJpbmciLCBVc2VyV2FybmluZykKKyAgICAgICAgICAgIGV4Y2VwdCBVc2VyV2FybmluZzoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm9yZGVyIGhhbmRsaW5nIGZvciBhY3Rpb25zIGZhaWxlZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKKworICAgIGRlZiB0ZXN0X2ZpbHRlcndhcm5pbmdzKHNlbGYpOgorICAgICAgICAjIFRlc3QgZmlsdGVyd2FybmluZ3MoKS4KKyAgICAgICAgIyBJbXBsaWNpdGx5IGFsc28gdGVzdHMgcmVzZXR3YXJuaW5ncygpLgorICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLAorICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJlcnJvciIsICIiLCBXYXJuaW5nLCAiIiwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVzZXJXYXJuaW5nLCBzZWxmLm1vZHVsZS53YXJuLCAnY29udmVydCB0byBlcnJvcicpCisKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgdGV4dCA9ICdoYW5kbGUgbm9ybWFsbHknCisgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKHRleHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Wy0xXS5tZXNzYWdlKSwgdGV4dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3Wy0xXS5jYXRlZ29yeSBpcyBVc2VyV2FybmluZykKKworICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIiLCBXYXJuaW5nLCAiIiwgMCkKKyAgICAgICAgICAgIHRleHQgPSAnZmlsdGVyZWQgb3V0JworICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybih0ZXh0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzdHIod1stMV0ubWVzc2FnZSksIHRleHQpCisKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgImhleCoiLCBXYXJuaW5nLCAiIiwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVzZXJXYXJuaW5nLCBzZWxmLm1vZHVsZS53YXJuLCAnaGV4L29jdCcpCisgICAgICAgICAgICB0ZXh0ID0gJ25vbm1hdGNoaW5nIHRleHQnCisgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKHRleHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Wy0xXS5tZXNzYWdlKSwgdGV4dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3Wy0xXS5jYXRlZ29yeSBpcyBVc2VyV2FybmluZykKKworY2xhc3MgQ0ZpbHRlclRlc3RzKEJhc2VUZXN0LCBGaWx0ZXJUZXN0cyk6CisgICAgbW9kdWxlID0gY193YXJuaW5ncworCitjbGFzcyBQeUZpbHRlclRlc3RzKEJhc2VUZXN0LCBGaWx0ZXJUZXN0cyk6CisgICAgbW9kdWxlID0gcHlfd2FybmluZ3MKKworCitjbGFzcyBXYXJuVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVGVzdCB3YXJuaW5ncy53YXJuKCkgYW5kIHdhcm5pbmdzLndhcm5fZXhwbGljaXQoKS4iIiIKKworICAgIGRlZiB0ZXN0X21lc3NhZ2Uoc2VsZik6CisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5tb2R1bGUuc2ltcGxlZmlsdGVyKCJvbmNlIikKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDQpOgorICAgICAgICAgICAgICAgIHRleHQgPSAnbXVsdGkgJWQnICVpICAjIERpZmZlcmVudCB0ZXh0IG9uIGVhY2ggY2FsbC4KKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKHRleHQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIod1stMV0ubWVzc2FnZSksIHRleHQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdbLTFdLmNhdGVnb3J5IGlzIFVzZXJXYXJuaW5nKQorCisgICAgZGVmIHRlc3RfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHdpdGggd2FybmluZ3Nfc3RhdGUoc2VsZi5tb2R1bGUpOgorICAgICAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuaW5uZXIoInNwYW0xIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUod1stMV0uZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhcm5pbmdfdGVzdHMucHkiKQorICAgICAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMub3V0ZXIoInNwYW0yIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUod1stMV0uZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhcm5pbmdfdGVzdHMucHkiKQorCisgICAgZGVmIHRlc3Rfc3RhY2tsZXZlbChzZWxmKToKKyAgICAgICAgIyBUZXN0IHN0YWNrbGV2ZWwgYXJndW1lbnQKKyAgICAgICAgIyBtYWtlIHN1cmUgYWxsIG1lc3NhZ2VzIGFyZSBkaWZmZXJlbnQsIHNvIHRoZSB3YXJuaW5nIHdvbid0IGJlIHNraXBwZWQKKyAgICAgICAgd2l0aCB3YXJuaW5nc19zdGF0ZShzZWxmLm1vZHVsZSk6CisgICAgICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICAgICAgd2FybmluZ190ZXN0cy5pbm5lcigic3BhbTMiLCBzdGFja2xldmVsPTEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKHdbLTFdLmZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3YXJuaW5nX3Rlc3RzLnB5IikKKyAgICAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLm91dGVyKCJzcGFtNCIsIHN0YWNrbGV2ZWw9MSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUod1stMV0uZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhcm5pbmdfdGVzdHMucHkiKQorCisgICAgICAgICAgICAgICAgd2FybmluZ190ZXN0cy5pbm5lcigic3BhbTUiLCBzdGFja2xldmVsPTIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKHdbLTFdLmZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3dhcm5pbmdzLnB5IikKKyAgICAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLm91dGVyKCJzcGFtNiIsIHN0YWNrbGV2ZWw9MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUod1stMV0uZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhcm5pbmdfdGVzdHMucHkiKQorICAgICAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMub3V0ZXIoInNwYW02LjUiLCBzdGFja2xldmVsPTMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKHdbLTFdLmZpbGVuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3dhcm5pbmdzLnB5IikKKworICAgICAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuaW5uZXIoInNwYW03Iiwgc3RhY2tsZXZlbD05OTk5KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5iYXNlbmFtZSh3Wy0xXS5maWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzIikKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfZmlsZW5hbWVfbm90X21haW4oc2VsZik6CisgICAgICAgICMgSWYgX19maWxlX18gaXMgbm90IHNwZWNpZmllZCBhbmQgX19tYWluX18gaXMgbm90IHRoZSBtb2R1bGUgbmFtZSwKKyAgICAgICAgIyB0aGVuIF9fZmlsZV9fIHNob3VsZCBiZSBzZXQgdG8gdGhlIG1vZHVsZSBuYW1lLgorICAgICAgICBmaWxlbmFtZSA9IHdhcm5pbmdfdGVzdHMuX19maWxlX18KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHdhcm5pbmdfdGVzdHMuX19maWxlX18KKyAgICAgICAgICAgIHdpdGggd2FybmluZ3Nfc3RhdGUoc2VsZi5tb2R1bGUpOgorICAgICAgICAgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuaW5uZXIoInNwYW04Iiwgc3RhY2tsZXZlbD0xKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdbLTFdLmZpbGVuYW1lLCB3YXJuaW5nX3Rlc3RzLl9fbmFtZV9fKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgd2FybmluZ190ZXN0cy5fX2ZpbGVfXyA9IGZpbGVuYW1lCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX2ZpbGVuYW1lX21haW5fd2l0aF9hcmd2KHNlbGYpOgorICAgICAgICAjIElmIF9fZmlsZV9fIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBjYWxsZXIgaXMgX19tYWluX18gYW5kIHN5cy5hcmd2CisgICAgICAgICMgZXhpc3RzLCB0aGVuIHVzZSBzeXMuYXJndlswXSBhcyB0aGUgZmlsZS4KKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc3lzLCAnYXJndicpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZpbGVuYW1lID0gd2FybmluZ190ZXN0cy5fX2ZpbGVfXworICAgICAgICBtb2R1bGVfbmFtZSA9IHdhcm5pbmdfdGVzdHMuX19uYW1lX18KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHdhcm5pbmdfdGVzdHMuX19maWxlX18KKyAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuX19uYW1lX18gPSAnX19tYWluX18nCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzX3N0YXRlKHNlbGYubW9kdWxlKToKKyAgICAgICAgICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLmlubmVyKCdzcGFtOScsIHN0YWNrbGV2ZWw9MSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5maWxlbmFtZSwgc3lzLmFyZ3ZbMF0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLl9fZmlsZV9fID0gZmlsZW5hbWUKKyAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuX19uYW1lX18gPSBtb2R1bGVfbmFtZQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19maWxlbmFtZV9tYWluX3dpdGhvdXRfYXJndihzZWxmKToKKyAgICAgICAgIyBJZiBfX2ZpbGVfXyBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgY2FsbGVyIGlzIF9fbWFpbl9fLCBhbmQgc3lzLmFyZ3YKKyAgICAgICAgIyBpcyBub3Qgc2V0LCB0aGVuICdfX21haW5fXycgaXMgdGhlIGZpbGUgbmFtZS4KKyAgICAgICAgZmlsZW5hbWUgPSB3YXJuaW5nX3Rlc3RzLl9fZmlsZV9fCisgICAgICAgIG1vZHVsZV9uYW1lID0gd2FybmluZ190ZXN0cy5fX25hbWVfXworICAgICAgICBhcmd2ID0gc3lzLmFyZ3YKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHdhcm5pbmdfdGVzdHMuX19maWxlX18KKyAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuX19uYW1lX18gPSAnX19tYWluX18nCisgICAgICAgICAgICBkZWwgc3lzLmFyZ3YKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3Nfc3RhdGUoc2VsZi5tb2R1bGUpOgorICAgICAgICAgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuaW5uZXIoJ3NwYW0xMCcsIHN0YWNrbGV2ZWw9MSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5maWxlbmFtZSwgJ19fbWFpbl9fJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuX19maWxlX18gPSBmaWxlbmFtZQorICAgICAgICAgICAgd2FybmluZ190ZXN0cy5fX25hbWVfXyA9IG1vZHVsZV9uYW1lCisgICAgICAgICAgICBzeXMuYXJndiA9IGFyZ3YKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfZmlsZW5hbWVfbWFpbl93aXRoX2FyZ3ZfZW1wdHlfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIElmIF9fZmlsZV9fIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjYWxsZXIgaXMgX19tYWluX18sIGFuZCBzeXMuYXJndlswXQorICAgICAgICAjIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gJ19fbWFpbl9fIGlzIHRoZSBmaWxlIG5hbWUuCisgICAgICAgICMgVGVzdHMgaXNzdWUgMjc0My4KKyAgICAgICAgZmlsZV9uYW1lID0gd2FybmluZ190ZXN0cy5fX2ZpbGVfXworICAgICAgICBtb2R1bGVfbmFtZSA9IHdhcm5pbmdfdGVzdHMuX19uYW1lX18KKyAgICAgICAgYXJndiA9IHN5cy5hcmd2CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCB3YXJuaW5nX3Rlc3RzLl9fZmlsZV9fCisgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLl9fbmFtZV9fID0gJ19fbWFpbl9fJworICAgICAgICAgICAgc3lzLmFyZ3YgPSBbJyddCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzX3N0YXRlKHNlbGYubW9kdWxlKToKKyAgICAgICAgICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLmlubmVyKCdzcGFtMTEnLCBzdGFja2xldmVsPTEpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0uZmlsZW5hbWUsICdfX21haW5fXycpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLl9fZmlsZV9fID0gZmlsZV9uYW1lCisgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLl9fbmFtZV9fID0gbW9kdWxlX25hbWUKKyAgICAgICAgICAgIHN5cy5hcmd2ID0gYXJndgorCisgICAgZGVmIHRlc3Rfd2Fybl9leHBsaWNpdF90eXBlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyB3YXJuX2V4cGxpY2l0KCkgc2hvdWxkIGVycm9yIG91dCBncmFjZWZ1bGx5IGlmIGl0IGlzIGdpdmVuIG9iamVjdHMKKyAgICAgICAgIyBvZiB0aGUgd3JvbmcgdHlwZXMuCisgICAgICAgICMgbGluZW5vIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGludGVnZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCBVc2VyV2FybmluZywgTm9uZSwgTm9uZSkKKyAgICAgICAgIyBFaXRoZXIgJ21lc3NhZ2UnIG5lZWRzIHRvIGJlIGFuIGluc3RhbmNlIG9mIFdhcm5pbmcgb3IgJ2NhdGVnb3J5JworICAgICAgICAjIG5lZWRzIHRvIGJlIGEgc3ViY2xhc3MuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCBOb25lLCBOb25lLCAxKQorICAgICAgICAjICdyZWdpc3RyeScgbXVzdCBiZSBhIGRpY3Qgb3IgTm9uZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgV2FybmluZywgTm9uZSwgMSwgcmVnaXN0cnk9NDIpCisKKyAgICBkZWYgdGVzdF9iYWRfc3RyKHNlbGYpOgorICAgICAgICAjIGlzc3VlIDY0MTUKKyAgICAgICAgIyBXYXJuaW5ncyBpbnN0YW5jZSB3aXRoIGEgYmFkIGZvcm1hdCBzdHJpbmcgZm9yIF9fc3RyX18gc2hvdWxkIG5vdAorICAgICAgICAjIHRyaWdnZXIgYSBidXMgZXJyb3IuCisgICAgICAgIGNsYXNzIEJhZFN0cldhcm5pbmcoV2FybmluZyk6CisgICAgICAgICAgICAiIiJXYXJuaW5nIHdpdGggYSBiYWQgZm9ybWF0IHN0cmluZyBmb3IgX19zdHJfXy4iIiIKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoIkEgYmFkIGZvcm1hdHRlZCBzdHJpbmcgJShlcnIpIiAlCisgICAgICAgICAgICAgICAgICAgICAgICB7ImVyciIgOiAidGhlcmUgaXMgbm8gJShlcnIpcyJ9KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKEJhZFN0cldhcm5pbmcoKSkKKworCitjbGFzcyBDV2FyblRlc3RzKEJhc2VUZXN0LCBXYXJuVGVzdHMpOgorICAgIG1vZHVsZSA9IGNfd2FybmluZ3MKKworICAgICMgQXMgYW4gZWFybHkgYWRvcHRlciwgd2Ugc2FuaXR5IGNoZWNrIHRoZQorICAgICMgdGVzdF9zdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUgdXRpbGl0eSBmdW5jdGlvbgorICAgIGRlZiB0ZXN0X2FjY2VsZXJhdGVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9yaWdpbmFsX3dhcm5pbmdzIGlzIHNlbGYubW9kdWxlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoc2VsZi5tb2R1bGUud2FybiwgJ2Z1bmNfY29kZScpKQorCitjbGFzcyBQeVdhcm5UZXN0cyhCYXNlVGVzdCwgV2FyblRlc3RzKToKKyAgICBtb2R1bGUgPSBweV93YXJuaW5ncworCisgICAgIyBBcyBhbiBlYXJseSBhZG9wdGVyLCB3ZSBzYW5pdHkgY2hlY2sgdGhlCisgICAgIyB0ZXN0X3N1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSB1dGlsaXR5IGZ1bmN0aW9uCisgICAgZGVmIHRlc3RfcHVyZV9weXRob24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3JpZ2luYWxfd2FybmluZ3MgaXMgc2VsZi5tb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYubW9kdWxlLndhcm4sICdmdW5jX2NvZGUnKSkKKworCitjbGFzcyBXQ21kTGluZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2ltcHJvcGVyX2lucHV0KHNlbGYpOgorICAgICAgICAjIFVzZXMgdGhlIHByaXZhdGUgX3NldG9wdGlvbigpIGZ1bmN0aW9uIHRvIHRlc3QgdGhlIHBhcnNpbmcKKyAgICAgICAgIyBvZiBjb21tYW5kLWxpbmUgd2FybmluZyBhcmd1bWVudHMKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhtb2R1bGU9c2VsZi5tb2R1bGUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5tb2R1bGUuX09wdGlvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuX3NldG9wdGlvbiwgJzE6MjozOjQ6NTo2JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYubW9kdWxlLl9PcHRpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLl9zZXRvcHRpb24sICdib2d1czo6V2FybmluZycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLm1vZHVsZS5fT3B0aW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5fc2V0b3B0aW9uLCAnaWdub3JlOjI6OjQ6LTUnKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuX3NldG9wdGlvbignZXJyb3I6Oldhcm5pbmc6OjAnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVXNlcldhcm5pbmcsIHNlbGYubW9kdWxlLndhcm4sICdjb252ZXJ0IHRvIGVycm9yJykKKworICAgIGRlZiB0ZXN0X2ltcHJvcGVyX29wdGlvbihzZWxmKToKKyAgICAgICAgIyBTYW1lIGFzIGFib3ZlLCBidXQgY2hlY2sgdGhhdCB0aGUgbWVzc2FnZSBpcyBwcmludGVkIG91dCB3aGVuCisgICAgICAgICMgdGhlIGludGVycHJldGVyIGlzIGV4ZWN1dGVkLiBUaGlzIGFsc28gY2hlY2tzIHRoYXQgb3B0aW9ucyBhcmUKKyAgICAgICAgIyBhY3R1YWxseSBwYXJzZWQgYXQgYWxsLgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItV3h4eCIsICItYyIsICJwYXNzIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiIkludmFsaWQgLVcgb3B0aW9uIGlnbm9yZWQ6IGludmFsaWQgYWN0aW9uOiAneHh4JyIsIGVycikKKworICAgIGRlZiB0ZXN0X3dhcm5pbmdzX2Jvb3RzdHJhcChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSB3YXJuaW5ncyBtb2R1bGUgZG9lcyBnZXQgbG9hZGVkIHdoZW4gLVc8c29tZSBvcHRpb24+CisgICAgICAgICMgaXMgdXNlZCAoc2VlIGlzc3VlICMxMDM3MiBmb3IgYW4gZXhhbXBsZSBvZiBzaWxlbnQgYm9vdHN0cmFwIGZhaWx1cmUpLgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItV2kiLCAiLWMiLAorICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5tb2R1bGVzWyd3YXJuaW5ncyddLndhcm4oJ2ZvbycsIFJ1bnRpbWVXYXJuaW5nKSIpCisgICAgICAgICMgJy1XaScgd2FzIG9ic2VydmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3V0LnN0cmlwKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYidSdW50aW1lV2FybmluZycsIGVycikKKworY2xhc3MgQ1dDbWRMaW5lVGVzdHMoQmFzZVRlc3QsIFdDbWRMaW5lVGVzdHMpOgorICAgIG1vZHVsZSA9IGNfd2FybmluZ3MKKworY2xhc3MgUHlXQ21kTGluZVRlc3RzKEJhc2VUZXN0LCBXQ21kTGluZVRlc3RzKToKKyAgICBtb2R1bGUgPSBweV93YXJuaW5ncworCisKK2NsYXNzIF9XYXJuaW5nc1Rlc3RzKEJhc2VUZXN0KToKKworICAgICIiIlRlc3RzIHNwZWNpZmljIHRvIHRoZSBfd2FybmluZ3MgbW9kdWxlLiIiIgorCisgICAgbW9kdWxlID0gY193YXJuaW5ncworCisgICAgZGVmIHRlc3RfZmlsdGVyKHNlbGYpOgorICAgICAgICAjIEV2ZXJ5dGhpbmcgc2hvdWxkIGZ1bmN0aW9uIGV2ZW4gaWYgJ2ZpbHRlcnMnIGlzIG5vdCBpbiB3YXJuaW5ncy4KKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCAiIiwgV2FybmluZywgIiIsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVc2VyV2FybmluZywgc2VsZi5tb2R1bGUud2FybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnZlcnQgdG8gZXJyb3InKQorICAgICAgICAgICAgZGVsIHNlbGYubW9kdWxlLmZpbHRlcnMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVzZXJXYXJuaW5nLCBzZWxmLm1vZHVsZS53YXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udmVydCB0byBlcnJvcicpCisKKyAgICBkZWYgdGVzdF9vbmNlcmVnaXN0cnkoc2VsZik6CisgICAgICAgICMgUmVwbGFjaW5nIG9yIHJlbW92aW5nIHRoZSBvbmNlcmVnaXN0cnkgc2hvdWxkIGJlIG9rYXkuCisgICAgICAgIGdsb2JhbCBfX3dhcm5pbmdyZWdpc3RyeV9fCisgICAgICAgIG1lc3NhZ2UgPSBVc2VyV2FybmluZygnb25jZXJlZ2lzdHJ5IHRlc3QnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcmlnaW5hbF9yZWdpc3RyeSA9IHNlbGYubW9kdWxlLm9uY2VyZWdpc3RyeQorICAgICAgICAgICAgX193YXJuaW5ncmVnaXN0cnlfXyA9IHt9CisgICAgICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoIm9uY2UiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KG1lc3NhZ2UsIFVzZXJXYXJuaW5nLCAiZmlsZSIsIDQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKKyAgICAgICAgICAgICAgICBkZWwgd1s6XQorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQobWVzc2FnZSwgVXNlcldhcm5pbmcsICJmaWxlIiwgNDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDApCisgICAgICAgICAgICAgICAgIyBUZXN0IHRoZSByZXNldHRpbmcgb2Ygb25jZXJlZ2lzdHJ5LgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLm9uY2VyZWdpc3RyeSA9IHt9CisgICAgICAgICAgICAgICAgX193YXJuaW5ncmVnaXN0cnlfXyA9IHt9CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybignb25jZXJlZ2lzdHJ5IHRlc3QnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZS5hcmdzLCBtZXNzYWdlLmFyZ3MpCisgICAgICAgICAgICAgICAgIyBSZW1vdmFsIG9mIG9uY2VyZWdpc3RyeSBpcyBva2F5LgorICAgICAgICAgICAgICAgIGRlbCB3WzpdCisgICAgICAgICAgICAgICAgZGVsIHNlbGYubW9kdWxlLm9uY2VyZWdpc3RyeQorICAgICAgICAgICAgICAgIF9fd2FybmluZ3JlZ2lzdHJ5X18gPSB7fQorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQobWVzc2FnZSwgVXNlcldhcm5pbmcsICJmaWxlIiwgNDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5vbmNlcmVnaXN0cnkgPSBvcmlnaW5hbF9yZWdpc3RyeQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9hY3Rpb24oc2VsZik6CisgICAgICAgICMgUmVwbGFjaW5nIG9yIHJlbW92aW5nIGRlZmF1bHRhY3Rpb24gc2hvdWxkIGJlIG9rYXkuCisgICAgICAgIG1lc3NhZ2UgPSBVc2VyV2FybmluZygiZGVmYXVsdGFjdGlvbiB0ZXN0IikKKyAgICAgICAgb3JpZ2luYWwgPSBzZWxmLm1vZHVsZS5kZWZhdWx0YWN0aW9uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5yZXNldHdhcm5pbmdzKCkKKyAgICAgICAgICAgICAgICByZWdpc3RyeSA9IHt9CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdChtZXNzYWdlLCBVc2VyV2FybmluZywgIjx0ZXN0PiIsIDQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeT1yZWdpc3RyeSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdbLTFdLm1lc3NhZ2UsIG1lc3NhZ2UpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVnaXN0cnkpLCAxKQorICAgICAgICAgICAgICAgIGRlbCB3WzpdCisgICAgICAgICAgICAgICAgIyBUZXN0IHJlbW92YWwuCisgICAgICAgICAgICAgICAgZGVsIHNlbGYubW9kdWxlLmRlZmF1bHRhY3Rpb24KKyAgICAgICAgICAgICAgICBfX3dhcm5pbmdyZWdpc3RyeV9fID0ge30KKyAgICAgICAgICAgICAgICByZWdpc3RyeSA9IHt9CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybl9leHBsaWNpdChtZXNzYWdlLCBVc2VyV2FybmluZywgIjx0ZXN0PiIsIDQzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeT1yZWdpc3RyeSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdbLTFdLm1lc3NhZ2UsIG1lc3NhZ2UpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVnaXN0cnkpLCAxKQorICAgICAgICAgICAgICAgIGRlbCB3WzpdCisgICAgICAgICAgICAgICAgIyBUZXN0IHNldHRpbmcuCisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuZGVmYXVsdGFjdGlvbiA9ICJpZ25vcmUiCisgICAgICAgICAgICAgICAgX193YXJuaW5ncmVnaXN0cnlfXyA9IHt9CisgICAgICAgICAgICAgICAgcmVnaXN0cnkgPSB7fQorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQobWVzc2FnZSwgVXNlcldhcm5pbmcsICI8dGVzdD4iLCA0NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnk9cmVnaXN0cnkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5kZWZhdWx0YWN0aW9uID0gb3JpZ2luYWwKKworICAgIGRlZiB0ZXN0X3Nob3d3YXJuaW5nX21pc3Npbmcoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHNob3d3YXJuaW5nKCkgbWlzc2luZyBpcyBva2F5LgorICAgICAgICB0ZXh0ID0gJ2RlbCBzaG93d2FybmluZyB0ZXN0JworICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT1zZWxmLm1vZHVsZSk6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiYWx3YXlzIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBkZWwgc2VsZi5tb2R1bGUuc2hvd3dhcm5pbmcKKyAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNhcHR1cmVkX291dHB1dCgnc3RkZXJyJykgYXMgc3RyZWFtOgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4odGV4dCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHJlYW0uZ2V0dmFsdWUoKQorICAgICAgICBzZWxmLmFzc2VydEluKHRleHQsIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X3Nob3d3YXJuaW5nX25vdF9jYWxsYWJsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhtb2R1bGU9c2VsZi5tb2R1bGUpOgorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImFsd2F5cyIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQorICAgICAgICAgICAgb2xkX3Nob3d3YXJuaW5nID0gc2VsZi5tb2R1bGUuc2hvd3dhcm5pbmcKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnNob3d3YXJuaW5nID0gMjMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubW9kdWxlLndhcm4sICJXYXJuaW5nISIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLnNob3d3YXJuaW5nID0gb2xkX3Nob3d3YXJuaW5nCisKKyAgICBkZWYgdGVzdF9zaG93X3dhcm5pbmdfb3V0cHV0KHNlbGYpOgorICAgICAgICAjIFdpdGggc2hvd2FybmluZygpIG1pc3NpbmcsIG1ha2Ugc3VyZSB0aGF0IG91dHB1dCBpcyBva2F5LgorICAgICAgICB0ZXh0ID0gJ3Rlc3Qgc2hvd193YXJuaW5nJworICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT1zZWxmLm1vZHVsZSk6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiYWx3YXlzIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBkZWwgc2VsZi5tb2R1bGUuc2hvd3dhcm5pbmcKKyAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNhcHR1cmVkX291dHB1dCgnc3RkZXJyJykgYXMgc3RyZWFtOgorICAgICAgICAgICAgICAgIHdhcm5pbmdfdGVzdHMuaW5uZXIodGV4dCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHJlYW0uZ2V0dmFsdWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5jb3VudCgnXG4nKSwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvbyBtYW55IG5ld2xpbmVzIGluICVyIiAlIHJlc3VsdCkKKyAgICAgICAgZmlyc3RfbGluZSwgc2Vjb25kX2xpbmUgPSByZXN1bHQuc3BsaXQoJ1xuJywgMSkKKyAgICAgICAgZXhwZWN0ZWRfZmlsZSA9IG9zLnBhdGguc3BsaXRleHQod2FybmluZ190ZXN0cy5fX2ZpbGVfXylbMF0gKyAnLnB5JworICAgICAgICBmaXJzdF9saW5lX3BhcnRzID0gZmlyc3RfbGluZS5yc3BsaXQoJzonLCAzKQorICAgICAgICBwYXRoLCBsaW5lLCB3YXJuaW5nX2NsYXNzLCBtZXNzYWdlID0gZmlyc3RfbGluZV9wYXJ0cworICAgICAgICBsaW5lID0gaW50KGxpbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfZmlsZSwgcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YXJuaW5nX2NsYXNzLCAnICcgKyBVc2VyV2FybmluZy5fX25hbWVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLCAnICcgKyB0ZXh0KQorICAgICAgICBleHBlY3RlZF9saW5lID0gJyAgJyArIGxpbmVjYWNoZS5nZXRsaW5lKHBhdGgsIGxpbmUpLnN0cmlwKCkgKyAnXG4nCisgICAgICAgIGFzc2VydCBleHBlY3RlZF9saW5lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vjb25kX2xpbmUsIGV4cGVjdGVkX2xpbmUpCisKKyAgICBkZWYgdGVzdF9maWxlbmFtZV9ub25lKHNlbGYpOgorICAgICAgICAjIGlzc3VlICMxMjQ2NzogcmFjZSBjb25kaXRpb24gaWYgYSB3YXJuaW5nIGlzIGVtaXR0ZWQgYXQgc2h1dGRvd24KKyAgICAgICAgZ2xvYmFsc19kaWN0ID0gZ2xvYmFscygpCisgICAgICAgIG9sZGZpbGUgPSBnbG9iYWxzX2RpY3RbJ19fZmlsZV9fJ10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImFsd2F5cyIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQorICAgICAgICAgICAgICAgIGdsb2JhbHNfZGljdFsnX19maWxlX18nXSA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKCd0ZXN0JywgVXNlcldhcm5pbmcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBnbG9iYWxzX2RpY3RbJ19fZmlsZV9fJ10gPSBvbGRmaWxlCisKKworY2xhc3MgV2FybmluZ3NEaXNwbGF5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVGVzdCB0aGUgZGlzcGxheWluZyBvZiB3YXJuaW5ncyBhbmQgdGhlIGFiaWxpdHkgdG8gb3ZlcmxvYWQgZnVuY3Rpb25zCisgICAgcmVsYXRlZCB0byBkaXNwbGF5aW5nIHdhcm5pbmdzLiIiIgorCisgICAgZGVmIHRlc3RfZm9ybWF0d2FybmluZyhzZWxmKToKKyAgICAgICAgbWVzc2FnZSA9ICJtc2ciCisgICAgICAgIGNhdGVnb3J5ID0gV2FybmluZworICAgICAgICBmaWxlX25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KHdhcm5pbmdfdGVzdHMuX19maWxlX18pWzBdICsgJy5weScKKyAgICAgICAgbGluZV9udW0gPSAzCisgICAgICAgIGZpbGVfbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVfbmFtZSwgbGluZV9udW0pLnN0cmlwKCkKKyAgICAgICAgZm9ybWF0ID0gIiVzOiVzOiAlczogJXNcbiAgJXNcbiIKKyAgICAgICAgZXhwZWN0ID0gZm9ybWF0ICUgKGZpbGVfbmFtZSwgbGluZV9udW0sIGNhdGVnb3J5Ll9fbmFtZV9fLCBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHNlbGYubW9kdWxlLmZvcm1hdHdhcm5pbmcobWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5LCBmaWxlX25hbWUsIGxpbmVfbnVtKSkKKyAgICAgICAgIyBUZXN0IHRoZSAnbGluZScgYXJndW1lbnQuCisgICAgICAgIGZpbGVfbGluZSArPSAiIGZvciB0aGUgd2luISIKKyAgICAgICAgZXhwZWN0ID0gZm9ybWF0ICUgKGZpbGVfbmFtZSwgbGluZV9udW0sIGNhdGVnb3J5Ll9fbmFtZV9fLCBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIHNlbGYubW9kdWxlLmZvcm1hdHdhcm5pbmcobWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5LCBmaWxlX25hbWUsIGxpbmVfbnVtLCBmaWxlX2xpbmUpKQorCisgICAgZGVmIHRlc3Rfc2hvd3dhcm5pbmcoc2VsZik6CisgICAgICAgIGZpbGVfbmFtZSA9IG9zLnBhdGguc3BsaXRleHQod2FybmluZ190ZXN0cy5fX2ZpbGVfXylbMF0gKyAnLnB5JworICAgICAgICBsaW5lX251bSA9IDMKKyAgICAgICAgZXhwZWN0ZWRfZmlsZV9saW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZV9uYW1lLCBsaW5lX251bSkuc3RyaXAoKQorICAgICAgICBtZXNzYWdlID0gJ21zZycKKyAgICAgICAgY2F0ZWdvcnkgPSBXYXJuaW5nCisgICAgICAgIGZpbGVfb2JqZWN0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBleHBlY3QgPSBzZWxmLm1vZHVsZS5mb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtKQorICAgICAgICBzZWxmLm1vZHVsZS5zaG93d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZV9uYW1lLCBsaW5lX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9vYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9vYmplY3QuZ2V0dmFsdWUoKSwgZXhwZWN0KQorICAgICAgICAjIFRlc3QgJ2xpbmUnIGFyZ3VtZW50LgorICAgICAgICBleHBlY3RlZF9maWxlX2xpbmUgKz0gImZvciB0aGUgd2luISIKKyAgICAgICAgZXhwZWN0ID0gc2VsZi5tb2R1bGUuZm9ybWF0d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX251bSwgZXhwZWN0ZWRfZmlsZV9saW5lKQorICAgICAgICBmaWxlX29iamVjdCA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi5tb2R1bGUuc2hvd3dhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVfbmFtZSwgbGluZV9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfb2JqZWN0LCBleHBlY3RlZF9maWxlX2xpbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBmaWxlX29iamVjdC5nZXR2YWx1ZSgpKQorCitjbGFzcyBDV2FybmluZ3NEaXNwbGF5VGVzdHMoQmFzZVRlc3QsIFdhcm5pbmdzRGlzcGxheVRlc3RzKToKKyAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCisKK2NsYXNzIFB5V2FybmluZ3NEaXNwbGF5VGVzdHMoQmFzZVRlc3QsIFdhcm5pbmdzRGlzcGxheVRlc3RzKToKKyAgICBtb2R1bGUgPSBweV93YXJuaW5ncworCisKK2NsYXNzIENhdGNoV2FybmluZ1Rlc3RzKEJhc2VUZXN0KToKKworICAgICIiIlRlc3QgY2F0Y2hfd2FybmluZ3MoKS4iIiIKKworICAgIGRlZiB0ZXN0X2NhdGNoX3dhcm5pbmdzX3Jlc3RvcmUoc2VsZik6CisgICAgICAgIHdtb2QgPSBzZWxmLm1vZHVsZQorICAgICAgICBvcmlnX2ZpbHRlcnMgPSB3bW9kLmZpbHRlcnMKKyAgICAgICAgb3JpZ19zaG93d2FybmluZyA9IHdtb2Quc2hvd3dhcm5pbmcKKyAgICAgICAgIyBFbnN1cmUgYm90aCBzaG93d2FybmluZyBhbmQgZmlsdGVycyBhcmUgcmVzdG9yZWQgd2hlbiByZWNvcmRpbmcKKyAgICAgICAgd2l0aCB3bW9kLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT13bW9kLCByZWNvcmQ9VHJ1ZSk6CisgICAgICAgICAgICB3bW9kLmZpbHRlcnMgPSB3bW9kLnNob3d3YXJuaW5nID0gb2JqZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2QuZmlsdGVycyBpcyBvcmlnX2ZpbHRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9kLnNob3d3YXJuaW5nIGlzIG9yaWdfc2hvd3dhcm5pbmcpCisgICAgICAgICMgU2FtZSB0ZXN0LCBidXQgd2l0aCByZWNvcmRpbmcgZGlzYWJsZWQKKyAgICAgICAgd2l0aCB3bW9kLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT13bW9kLCByZWNvcmQ9RmFsc2UpOgorICAgICAgICAgICAgd21vZC5maWx0ZXJzID0gd21vZC5zaG93d2FybmluZyA9IG9iamVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9kLmZpbHRlcnMgaXMgb3JpZ19maWx0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5zaG93d2FybmluZyBpcyBvcmlnX3Nob3d3YXJuaW5nKQorCisgICAgZGVmIHRlc3RfY2F0Y2hfd2FybmluZ3NfcmVjb3JkaW5nKHNlbGYpOgorICAgICAgICB3bW9kID0gc2VsZi5tb2R1bGUKKyAgICAgICAgIyBFbnN1cmUgd2FybmluZ3MgYXJlIHJlY29yZGVkIHdoZW4gcmVxdWVzdGVkCisgICAgICAgIHdpdGggd21vZC5jYXRjaF93YXJuaW5ncyhtb2R1bGU9d21vZCwgcmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcsIFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodykgaXMgbGlzdCkKKyAgICAgICAgICAgIHdtb2Quc2ltcGxlZmlsdGVyKCJhbHdheXMiKQorICAgICAgICAgICAgd21vZC53YXJuKCJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIod1stMV0ubWVzc2FnZSksICJmb28iKQorICAgICAgICAgICAgd21vZC53YXJuKCJiYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIod1stMV0ubWVzc2FnZSksICJiYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIod1swXS5tZXNzYWdlKSwgImZvbyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3WzFdLm1lc3NhZ2UpLCAiYmFyIikKKyAgICAgICAgICAgIGRlbCB3WzpdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcsIFtdKQorICAgICAgICAjIEVuc3VyZSB3YXJuaW5ncyBhcmUgbm90IHJlY29yZGVkIHdoZW4gbm90IHJlcXVlc3RlZAorICAgICAgICBvcmlnX3Nob3d3YXJuaW5nID0gd21vZC5zaG93d2FybmluZworICAgICAgICB3aXRoIHdtb2QuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXdtb2QsIHJlY29yZD1GYWxzZSkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3IGlzIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5zaG93d2FybmluZyBpcyBvcmlnX3Nob3d3YXJuaW5nKQorCisgICAgZGVmIHRlc3RfY2F0Y2hfd2FybmluZ3NfcmVlbnRyeV9ndWFyZChzZWxmKToKKyAgICAgICAgd21vZCA9IHNlbGYubW9kdWxlCisgICAgICAgICMgRW5zdXJlIGNhdGNoX3dhcm5pbmdzIGlzIHByb3RlY3RlZCBhZ2FpbnN0IGluY29ycmVjdCB1c2FnZQorICAgICAgICB4ID0gd21vZC5jYXRjaF93YXJuaW5ncyhtb2R1bGU9d21vZCwgcmVjb3JkPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgeC5fX2V4aXRfXykKKyAgICAgICAgd2l0aCB4OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB4Ll9fZW50ZXJfXykKKyAgICAgICAgIyBTYW1lIHRlc3QsIGJ1dCB3aXRoIHJlY29yZGluZyBkaXNhYmxlZAorICAgICAgICB4ID0gd21vZC5jYXRjaF93YXJuaW5ncyhtb2R1bGU9d21vZCwgcmVjb3JkPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHguX19leGl0X18pCisgICAgICAgIHdpdGggeDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgeC5fX2VudGVyX18pCisKKyAgICBkZWYgdGVzdF9jYXRjaF93YXJuaW5nc19kZWZhdWx0cyhzZWxmKToKKyAgICAgICAgd21vZCA9IHNlbGYubW9kdWxlCisgICAgICAgIG9yaWdfZmlsdGVycyA9IHdtb2QuZmlsdGVycworICAgICAgICBvcmlnX3Nob3d3YXJuaW5nID0gd21vZC5zaG93d2FybmluZworICAgICAgICAjIEVuc3VyZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBub3QgdG8gcmVjb3JkIHdhcm5pbmdzCisgICAgICAgIHdpdGggd21vZC5jYXRjaF93YXJuaW5ncyhtb2R1bGU9d21vZCkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3IGlzIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5zaG93d2FybmluZyBpcyBvcmlnX3Nob3d3YXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2QuZmlsdGVycyBpcyBub3Qgb3JpZ19maWx0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod21vZC5maWx0ZXJzIGlzIG9yaWdfZmlsdGVycykKKyAgICAgICAgaWYgd21vZCBpcyBzeXMubW9kdWxlc1snd2FybmluZ3MnXToKKyAgICAgICAgICAgICMgRW5zdXJlIHRoZSBkZWZhdWx0IG1vZHVsZSBpcyB0aGlzIG9uZQorICAgICAgICAgICAgd2l0aCB3bW9kLmNhdGNoX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodyBpcyBOb25lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9kLnNob3d3YXJuaW5nIGlzIG9yaWdfc2hvd3dhcm5pbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2QuZmlsdGVycyBpcyBub3Qgb3JpZ19maWx0ZXJzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2QuZmlsdGVycyBpcyBvcmlnX2ZpbHRlcnMpCisKKyAgICBkZWYgdGVzdF9jaGVja193YXJuaW5ncyhzZWxmKToKKyAgICAgICAgIyBFeHBsaWNpdCB0ZXN0cyBmb3IgdGhlIHRlc3Rfc3VwcG9ydCBjb252ZW5pZW5jZSB3cmFwcGVyCisgICAgICAgIHdtb2QgPSBzZWxmLm1vZHVsZQorICAgICAgICBpZiB3bW9kIGlzIG5vdCBzeXMubW9kdWxlc1snd2FybmluZ3MnXToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncyhxdWlldD1GYWxzZSkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody53YXJuaW5ncywgW10pCisgICAgICAgICAgICB3bW9kLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKKyAgICAgICAgICAgIHdtb2Qud2FybigiZm9vIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHcubWVzc2FnZSksICJmb28iKQorICAgICAgICAgICAgd21vZC53YXJuKCJiYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIody5tZXNzYWdlKSwgImJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Lndhcm5pbmdzWzBdLm1lc3NhZ2UpLCAiZm9vIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHcud2FybmluZ3NbMV0ubWVzc2FnZSksICJiYXIiKQorICAgICAgICAgICAgdy5yZXNldCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcud2FybmluZ3MsIFtdKQorCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAjIGRlZmF1bHRzIHRvIHF1aWV0PVRydWUgd2l0aG91dCBhcmd1bWVudAorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJ2ZvbycsIFVzZXJXYXJuaW5nKSk6CisgICAgICAgICAgICB3bW9kLndhcm4oImZvbyIpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJ1bnRpbWVXYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgIyBkZWZhdWx0cyB0byBxdWlldD1GYWxzZSB3aXRoIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnZm9vJywgUnVudGltZVdhcm5pbmcpKToKKyAgICAgICAgICAgICAgICB3bW9kLndhcm4oImZvbyIpCisKKworY2xhc3MgQ0NhdGNoV2FybmluZ1Rlc3RzKENhdGNoV2FybmluZ1Rlc3RzKToKKyAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCisKK2NsYXNzIFB5Q2F0Y2hXYXJuaW5nVGVzdHMoQ2F0Y2hXYXJuaW5nVGVzdHMpOgorICAgIG1vZHVsZSA9IHB5X3dhcm5pbmdzCisKKworY2xhc3MgRW52aXJvbm1lbnRWYXJpYWJsZVRlc3RzKEJhc2VUZXN0KToKKworICAgIGRlZiB0ZXN0X3NpbmdsZV93YXJuaW5nKHNlbGYpOgorICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBuZXdlbnZbIlBZVEhPTldBUk5JTkdTIl0gPSAiaWdub3JlOjpEZXByZWNhdGlvbldhcm5pbmciCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzdHIoc3lzLndhcm5vcHRpb25zKSkiXSwKKyAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuY29tbXVuaWNhdGUoKVswXSwgIlsnaWdub3JlOjpEZXByZWNhdGlvbldhcm5pbmcnXSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC53YWl0KCksIDApCisKKyAgICBkZWYgdGVzdF9jb21tYV9zZXBhcmF0ZWRfd2FybmluZ3Moc2VsZik6CisgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIG5ld2VudlsiUFlUSE9OV0FSTklOR1MiXSA9ICgiaWdub3JlOjpEZXByZWNhdGlvbldhcm5pbmcsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlnbm9yZTo6VW5pY29kZVdhcm5pbmciKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3RyKHN5cy53YXJub3B0aW9ucykpIl0sCisgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgZW52PW5ld2VudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmNvbW11bmljYXRlKClbMF0sCisgICAgICAgICAgICAgICAgIlsnaWdub3JlOjpEZXByZWNhdGlvbldhcm5pbmcnLCAnaWdub3JlOjpVbmljb2RlV2FybmluZyddIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLndhaXQoKSwgMCkKKworICAgIGRlZiB0ZXN0X2VudnZhcl9hbmRfY29tbWFuZF9saW5lKHNlbGYpOgorICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBuZXdlbnZbIlBZVEhPTldBUk5JTkdTIl0gPSAiaWdub3JlOjpEZXByZWNhdGlvbldhcm5pbmciCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1XIiAiaWdub3JlOjpVbmljb2RlV2FybmluZyIsCisgICAgICAgICAgICAgICAgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3RyKHN5cy53YXJub3B0aW9ucykpIl0sCisgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgZW52PW5ld2VudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmNvbW11bmljYXRlKClbMF0sCisgICAgICAgICAgICAgICAgIlsnaWdub3JlOjpVbmljb2RlV2FybmluZycsICdpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZyddIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLndhaXQoKSwgMCkKKworY2xhc3MgQ0Vudmlyb25tZW50VmFyaWFibGVUZXN0cyhFbnZpcm9ubWVudFZhcmlhYmxlVGVzdHMpOgorICAgIG1vZHVsZSA9IGNfd2FybmluZ3MKKworY2xhc3MgUHlFbnZpcm9ubWVudFZhcmlhYmxlVGVzdHMoRW52aXJvbm1lbnRWYXJpYWJsZVRlc3RzKToKKyAgICBtb2R1bGUgPSBweV93YXJuaW5ncworCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBweV93YXJuaW5ncy5vbmNlcmVnaXN0cnkuY2xlYXIoKQorICAgIGNfd2FybmluZ3Mub25jZXJlZ2lzdHJ5LmNsZWFyKCkKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENGaWx0ZXJUZXN0cywgUHlGaWx0ZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1dhcm5UZXN0cywgUHlXYXJuVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENXQ21kTGluZVRlc3RzLCBQeVdDbWRMaW5lVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9XYXJuaW5nc1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDV2FybmluZ3NEaXNwbGF5VGVzdHMsIFB5V2FybmluZ3NEaXNwbGF5VGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYXRjaFdhcm5pbmdUZXN0cywgUHlDYXRjaFdhcm5pbmdUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0Vudmlyb25tZW50VmFyaWFibGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFbnZpcm9ubWVudFZhcmlhYmxlVGVzdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dhdmUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF93YXZlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZjVmYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF93YXZlLnB5CkBAIC0wLDAgKzEsNDUgQEAKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCB3YXZlCitpbXBvcnQgdW5pdHRlc3QKKworbmNoYW5uZWxzID0gMgorc2FtcHdpZHRoID0gMgorZnJhbWVyYXRlID0gODAwMAorbmZyYW1lcyA9IDEwMAorCitjbGFzcyBUZXN0V2F2ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZiA9IE5vbmUKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5mLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9pdChzZWxmKToKKyAgICAgICAgc2VsZi5mID0gd2F2ZS5vcGVuKFRFU1RGTiwgJ3diJykKKyAgICAgICAgc2VsZi5mLnNldG5jaGFubmVscyhuY2hhbm5lbHMpCisgICAgICAgIHNlbGYuZi5zZXRzYW1wd2lkdGgoc2FtcHdpZHRoKQorICAgICAgICBzZWxmLmYuc2V0ZnJhbWVyYXRlKGZyYW1lcmF0ZSkKKyAgICAgICAgc2VsZi5mLnNldG5mcmFtZXMobmZyYW1lcykKKyAgICAgICAgb3V0cHV0ID0gJ1wwJyAqIG5mcmFtZXMgKiBuY2hhbm5lbHMgKiBzYW1wd2lkdGgKKyAgICAgICAgc2VsZi5mLndyaXRlZnJhbWVzKG91dHB1dCkKKyAgICAgICAgc2VsZi5mLmNsb3NlKCkKKworICAgICAgICBzZWxmLmYgPSB3YXZlLm9wZW4oVEVTVEZOLCAncmInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5jaGFubmVscywgc2VsZi5mLmdldG5jaGFubmVscygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNhbXB3aWR0aCwgc2VsZi5mLmdldHNhbXB3aWR0aCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyYW1lcmF0ZSwgc2VsZi5mLmdldGZyYW1lcmF0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5mcmFtZXMsIHNlbGYuZi5nZXRuZnJhbWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnJlYWRmcmFtZXMobmZyYW1lcyksIG91dHB1dCkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChUZXN0V2F2ZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfd2Vha3JlZi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dlYWtyZWYucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4NmNiNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dlYWtyZWYucHkKQEAgLTAsMCArMSwxMzk1IEBACitpbXBvcnQgZ2MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IFVzZXJMaXN0CitpbXBvcnQgd2Vha3JlZgoraW1wb3J0IG9wZXJhdG9yCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKyMgVXNlZCBpbiBSZWZlcmVuY2VzVGVzdENhc2UudGVzdF9yZWZfY3JlYXRlZF9kdXJpbmdfZGVsKCkgLgorcmVmX2Zyb21fZGVsID0gTm9uZQorCitjbGFzcyBDOgorICAgIGRlZiBtZXRob2Qoc2VsZik6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBDYWxsYWJsZToKKyAgICBiYXIgPSBOb25lCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgeCk6CisgICAgICAgIHNlbGYuYmFyID0geAorCisKK2RlZiBjcmVhdGVfZnVuY3Rpb24oKToKKyAgICBkZWYgZigpOiBwYXNzCisgICAgcmV0dXJuIGYKKworZGVmIGNyZWF0ZV9ib3VuZF9tZXRob2QoKToKKyAgICByZXR1cm4gQygpLm1ldGhvZAorCitkZWYgY3JlYXRlX3VuYm91bmRfbWV0aG9kKCk6CisgICAgcmV0dXJuIEMubWV0aG9kCisKKworY2xhc3MgT2JqZWN0OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLmFyZyA9IGFyZworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8T2JqZWN0ICVyPiIgJSBzZWxmLmFyZworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBPYmplY3QpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXJnID09IG90aGVyLmFyZworICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgT2JqZWN0KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmFyZyAhPSBvdGhlci5hcmcKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLmFyZykKKworY2xhc3MgUmVmQ3ljbGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmN5Y2xlID0gc2VsZgorCisKK2NsYXNzIFRlc3RCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jYmNhbGxlZCA9IDAKKworICAgIGRlZiBjYWxsYmFjayhzZWxmLCByZWYpOgorICAgICAgICBzZWxmLmNiY2FsbGVkICs9IDEKKworCitjbGFzcyBSZWZlcmVuY2VzVGVzdENhc2UoVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWNfcmVmKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Jhc2ljX3JlZihDKQorICAgICAgICBzZWxmLmNoZWNrX2Jhc2ljX3JlZihjcmVhdGVfZnVuY3Rpb24pCisgICAgICAgIHNlbGYuY2hlY2tfYmFzaWNfcmVmKGNyZWF0ZV9ib3VuZF9tZXRob2QpCisgICAgICAgIHNlbGYuY2hlY2tfYmFzaWNfcmVmKGNyZWF0ZV91bmJvdW5kX21ldGhvZCkKKworICAgICAgICAjIEp1c3QgbWFrZSBzdXJlIHRoZSB0cF9yZXByIGhhbmRsZXIgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24uCisgICAgICAgICMgTGl2ZSByZWZlcmVuY2U6CisgICAgICAgIG8gPSBDKCkKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihvKQorICAgICAgICByZXByKHdyKQorICAgICAgICAjIERlYWQgcmVmZXJlbmNlOgorICAgICAgICBkZWwgbworICAgICAgICByZXByKHdyKQorCisgICAgZGVmIHRlc3RfYmFzaWNfY2FsbGJhY2soc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfYmFzaWNfY2FsbGJhY2soQykKKyAgICAgICAgc2VsZi5jaGVja19iYXNpY19jYWxsYmFjayhjcmVhdGVfZnVuY3Rpb24pCisgICAgICAgIHNlbGYuY2hlY2tfYmFzaWNfY2FsbGJhY2soY3JlYXRlX2JvdW5kX21ldGhvZCkKKyAgICAgICAgc2VsZi5jaGVja19iYXNpY19jYWxsYmFjayhjcmVhdGVfdW5ib3VuZF9tZXRob2QpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9jYWxsYmFja3Moc2VsZik6CisgICAgICAgIG8gPSBDKCkKKyAgICAgICAgcmVmMSA9IHdlYWtyZWYucmVmKG8sIHNlbGYuY2FsbGJhY2spCisgICAgICAgIHJlZjIgPSB3ZWFrcmVmLnJlZihvLCBzZWxmLmNhbGxiYWNrKQorICAgICAgICBkZWwgbworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVmMSgpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgcmVmZXJlbmNlIHRvIGJlIGludmFsaWRhdGVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlZjIoKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHJlZmVyZW5jZSB0byBiZSBpbnZhbGlkYXRlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNiY2FsbGVkID09IDIsCisgICAgICAgICAgICAgICAgICAgICAiY2FsbGJhY2sgbm90IGNhbGxlZCB0aGUgcmlnaHQgbnVtYmVyIG9mIHRpbWVzIikKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX3NlbGZyZWZfY2FsbGJhY2tzKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgcmVmZXJlbmNlcyBhcmUgaW52YWxpZGF0ZWQgYmVmb3JlIGNhbGxiYWNrcyBhcmUgY2FsbGVkCisgICAgICAgICMKKyAgICAgICAgIyBXaGF0J3MgaW1wb3J0YW50IGhlcmUgaXMgdGhhdCB3ZSdyZSB1c2luZyB0aGUgZmlyc3QKKyAgICAgICAgIyByZWZlcmVuY2UgaW4gdGhlIGNhbGxiYWNrIGludm9rZWQgb24gdGhlIHNlY29uZCByZWZlcmVuY2UKKyAgICAgICAgIyAodGhlIG1vc3QgcmVjZW50bHkgY3JlYXRlZCByZWYgaXMgY2xlYW5lZCB1cCBmaXJzdCkuICBUaGlzCisgICAgICAgICMgdGVzdHMgdGhhdCBhbGwgcmVmZXJlbmNlcyB0byB0aGUgb2JqZWN0IGFyZSBpbnZhbGlkYXRlZAorICAgICAgICAjIGJlZm9yZSBhbnkgb2YgdGhlIGNhbGxiYWNrcyBhcmUgaW52b2tlZCwgc28gdGhhdCB3ZSBvbmx5CisgICAgICAgICMgaGF2ZSBvbmUgaW52b2NhdGlvbiBvZiBfd2Vha3JlZi5jOmNsZWFudXBfaGVscGVyKCkgYWN0aXZlCisgICAgICAgICMgZm9yIGEgcGFydGljdWxhciBvYmplY3QgYXQgYSB0aW1lLgorICAgICAgICAjCisgICAgICAgIGRlZiBjYWxsYmFjayhvYmplY3QsIHNlbGY9c2VsZik6CisgICAgICAgICAgICBzZWxmLnJlZigpCisgICAgICAgIGMgPSBDKCkKKyAgICAgICAgc2VsZi5yZWYgPSB3ZWFrcmVmLnJlZihjLCBjYWxsYmFjaykKKyAgICAgICAgcmVmMSA9IHdlYWtyZWYucmVmKGMsIGNhbGxiYWNrKQorICAgICAgICBkZWwgYworCisgICAgZGVmIHRlc3RfcHJveHlfcmVmKHNlbGYpOgorICAgICAgICBvID0gQygpCisgICAgICAgIG8uYmFyID0gMQorICAgICAgICByZWYxID0gd2Vha3JlZi5wcm94eShvLCBzZWxmLmNhbGxiYWNrKQorICAgICAgICByZWYyID0gd2Vha3JlZi5wcm94eShvLCBzZWxmLmNhbGxiYWNrKQorICAgICAgICBkZWwgbworCisgICAgICAgIGRlZiBjaGVjayhwcm94eSk6CisgICAgICAgICAgICBwcm94eS5iYXIKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh3ZWFrcmVmLlJlZmVyZW5jZUVycm9yLCBjaGVjaywgcmVmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMod2Vha3JlZi5SZWZlcmVuY2VFcnJvciwgY2hlY2ssIHJlZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHdlYWtyZWYuUmVmZXJlbmNlRXJyb3IsIGJvb2wsIHdlYWtyZWYucHJveHkoQygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2JjYWxsZWQgPT0gMikKKworICAgIGRlZiBjaGVja19iYXNpY19yZWYoc2VsZiwgZmFjdG9yeSk6CisgICAgICAgIG8gPSBmYWN0b3J5KCkKKyAgICAgICAgcmVmID0gd2Vha3JlZi5yZWYobykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlZigpIGlzIG5vdCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgIndlYWsgcmVmZXJlbmNlIHRvIGxpdmUgb2JqZWN0IHNob3VsZCBiZSBsaXZlIikKKyAgICAgICAgbzIgPSByZWYoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobyBpcyBvMiwKKyAgICAgICAgICAgICAgICAgICAgICI8cmVmPigpIHNob3VsZCByZXR1cm4gb3JpZ2luYWwgb2JqZWN0IGlmIGxpdmUiKQorCisgICAgZGVmIGNoZWNrX2Jhc2ljX2NhbGxiYWNrKHNlbGYsIGZhY3RvcnkpOgorICAgICAgICBzZWxmLmNiY2FsbGVkID0gMAorICAgICAgICBvID0gZmFjdG9yeSgpCisgICAgICAgIHJlZiA9IHdlYWtyZWYucmVmKG8sIHNlbGYuY2FsbGJhY2spCisgICAgICAgIGRlbCBvCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNiY2FsbGVkID09IDEsCisgICAgICAgICAgICAgICAgICAgICAiY2FsbGJhY2sgZGlkIG5vdCBwcm9wZXJseSBzZXQgJ2NiY2FsbGVkJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWYoKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgInJlZjIgc2hvdWxkIGJlIGRlYWQgYWZ0ZXIgZGVsZXRpbmcgb2JqZWN0IHJlZmVyZW5jZSIpCisKKyAgICBkZWYgdGVzdF9yZWZfcmV1c2Uoc2VsZik6CisgICAgICAgIG8gPSBDKCkKKyAgICAgICAgcmVmMSA9IHdlYWtyZWYucmVmKG8pCisgICAgICAgICMgY3JlYXRlIGEgcHJveHkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUncyBhbiBpbnRlcnZlbmluZyBjcmVhdGlvbgorICAgICAgICAjIGJldHdlZW4gdGhlc2UgdHdvOyBpdCBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlCisgICAgICAgIHByb3h5ID0gd2Vha3JlZi5wcm94eShvKQorICAgICAgICByZWYyID0gd2Vha3JlZi5yZWYobykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlZjEgaXMgcmVmMiwKKyAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2Ugb2JqZWN0IHcvb3V0IGNhbGxiYWNrIHNob3VsZCBiZSByZS11c2VkIikKKworICAgICAgICBvID0gQygpCisgICAgICAgIHByb3h5ID0gd2Vha3JlZi5wcm94eShvKQorICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYobykKKyAgICAgICAgcmVmMiA9IHdlYWtyZWYucmVmKG8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWYxIGlzIHJlZjIsCisgICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlIG9iamVjdCB3L291dCBjYWxsYmFjayBzaG91bGQgYmUgcmUtdXNlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudChvKSA9PSAyLAorICAgICAgICAgICAgICAgICAgICAgIndyb25nIHdlYWsgcmVmIGNvdW50IGZvciBvYmplY3QiKQorICAgICAgICBkZWwgcHJveHkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pID09IDEsCisgICAgICAgICAgICAgICAgICAgICAid3Jvbmcgd2VhayByZWYgY291bnQgZm9yIG9iamVjdCBhZnRlciBkZWxldGluZyBwcm94eSIpCisKKyAgICBkZWYgdGVzdF9wcm94eV9yZXVzZShzZWxmKToKKyAgICAgICAgbyA9IEMoKQorICAgICAgICBwcm94eTEgPSB3ZWFrcmVmLnByb3h5KG8pCisgICAgICAgIHJlZiA9IHdlYWtyZWYucmVmKG8pCisgICAgICAgIHByb3h5MiA9IHdlYWtyZWYucHJveHkobykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb3h5MSBpcyBwcm94eTIsCisgICAgICAgICAgICAgICAgICAgICAicHJveHkgb2JqZWN0IHcvb3V0IGNhbGxiYWNrIHNob3VsZCBoYXZlIGJlZW4gcmUtdXNlZCIpCisKKyAgICBkZWYgdGVzdF9iYXNpY19wcm94eShzZWxmKToKKyAgICAgICAgbyA9IEMoKQorICAgICAgICBzZWxmLmNoZWNrX3Byb3h5KG8sIHdlYWtyZWYucHJveHkobykpCisKKyAgICAgICAgTCA9IFVzZXJMaXN0LlVzZXJMaXN0KCkKKyAgICAgICAgcCA9IHdlYWtyZWYucHJveHkoTCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLCAicHJveHkgZm9yIGVtcHR5IFVzZXJMaXN0IHNob3VsZCBiZSBmYWxzZSIpCisgICAgICAgIHAuYXBwZW5kKDEyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihMKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAsICJwcm94eSBmb3Igbm9uLWVtcHR5IFVzZXJMaXN0IHNob3VsZCBiZSB0cnVlIikKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgcFs6XSA9IFsyLCAzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihMKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMywgcCwgInByb3h5IGRpZG4ndCBzdXBwb3J0IF9fY29udGFpbnNfXygpIHByb3Blcmx5IikKKyAgICAgICAgcFsxXSA9IDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMWzFdLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbMV0sIDUpCisgICAgICAgIEwyID0gVXNlckxpc3QuVXNlckxpc3QoTCkKKyAgICAgICAgcDIgPSB3ZWFrcmVmLnByb3h5KEwyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIHAyKQorICAgICAgICAjIyBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTDIpLCByZXByKHAyKSkKKyAgICAgICAgTDMgPSBVc2VyTGlzdC5Vc2VyTGlzdChyYW5nZSgxMCkpCisgICAgICAgIHAzID0gd2Vha3JlZi5wcm94eShMMykKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfcHkza193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMM1s6XSwgcDNbOl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEwzWzU6XSwgcDNbNTpdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMM1s6NV0sIHAzWzo1XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTDNbMjo1XSwgcDNbMjo1XSkKKworICAgIGRlZiB0ZXN0X3Byb3h5X3VuaWNvZGUoc2VsZik6CisgICAgICAgICMgU2VlIGJ1ZyA1MDM3CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5nIgorICAgICAgICAgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1InVuaWNvZGUiCisgICAgICAgIGluc3RhbmNlID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9fdW5pY29kZV9fIiwgZGlyKHdlYWtyZWYucHJveHkoaW5zdGFuY2UpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmljb2RlKHdlYWtyZWYucHJveHkoaW5zdGFuY2UpKSwgdSJ1bmljb2RlIikKKworICAgIGRlZiB0ZXN0X3Byb3h5X2luZGV4KHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMTAKKyAgICAgICAgbyA9IEMoKQorICAgICAgICBwID0gd2Vha3JlZi5wcm94eShvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmluZGV4KHApLCAxMCkKKworICAgIGRlZiB0ZXN0X3Byb3h5X2RpdihzZWxmKToKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICAgICAgZGVmIF9faWZsb29yZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiAyMQorICAgICAgICBvID0gQygpCisgICAgICAgIHAgPSB3ZWFrcmVmLnByb3h5KG8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvLyA1LCA0MikKKyAgICAgICAgcCAvLz0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIDIxKQorCisgICAgIyBUaGUgUHlXZWFrcmVmXyogQyBBUEkgaXMgZG9jdW1lbnRlZCBhcyBhbGxvd2luZyBlaXRoZXIgTlVMTCBvcgorICAgICMgTm9uZSBhcyB0aGUgdmFsdWUgZm9yIHRoZSBjYWxsYmFjaywgd2hlcmUgZWl0aGVyIG1lYW5zICJubworICAgICMgY2FsbGJhY2siLiAgVGhlICJubyBjYWxsYmFjayIgcmVmIGFuZCBwcm94eSBvYmplY3RzIGFyZSBzdXBwb3NlZAorICAgICMgdG8gYmUgc2hhcmVkIHNvIGxvbmcgYXMgdGhleSBleGlzdCBieSBhbGwgY2FsbGVycyBzbyBsb25nIGFzCisgICAgIyB0aGV5IGFyZSBhY3RpdmUuICBJbiBQeXRob24gMi4zLjMgYW5kIGVhcmxpZXIsIHRoaXMgZ3VhcmFudGVlCisgICAgIyB3YXMgbm90IGhvbm9yZWQsIGFuZCB3YXMgYnJva2VuIGluIGRpZmZlcmVudCB3YXlzIGZvcgorICAgICMgUHlXZWFrcmVmX05ld1JlZigpIGFuZCBQeVdlYWtyZWZfTmV3UHJveHkoKS4gIChUd28gdGVzdHMuKQorCisgICAgZGVmIHRlc3Rfc2hhcmVkX3JlZl93aXRob3V0X2NhbGxiYWNrKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3NoYXJlZF93aXRob3V0X2NhbGxiYWNrKHdlYWtyZWYucmVmKQorCisgICAgZGVmIHRlc3Rfc2hhcmVkX3Byb3h5X3dpdGhvdXRfY2FsbGJhY2soc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc2hhcmVkX3dpdGhvdXRfY2FsbGJhY2sod2Vha3JlZi5wcm94eSkKKworICAgIGRlZiBjaGVja19zaGFyZWRfd2l0aG91dF9jYWxsYmFjayhzZWxmLCBtYWtlcmVmKToKKyAgICAgICAgbyA9IE9iamVjdCgxKQorICAgICAgICBwMSA9IG1ha2VyZWYobywgTm9uZSkKKyAgICAgICAgcDIgPSBtYWtlcmVmKG8sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwMSBpcyBwMiwgImJvdGggY2FsbGJhY2tzIHdlcmUgTm9uZSBpbiB0aGUgQyBBUEkiKQorICAgICAgICBkZWwgcDEsIHAyCisgICAgICAgIHAxID0gbWFrZXJlZihvKQorICAgICAgICBwMiA9IG1ha2VyZWYobywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAxIGlzIHAyLCAiY2FsbGJhY2tzIHdlcmUgTlVMTCwgTm9uZSBpbiB0aGUgQyBBUEkiKQorICAgICAgICBkZWwgcDEsIHAyCisgICAgICAgIHAxID0gbWFrZXJlZihvKQorICAgICAgICBwMiA9IG1ha2VyZWYobykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAxIGlzIHAyLCAiYm90aCBjYWxsYmFja3Mgd2VyZSBOVUxMIGluIHRoZSBDIEFQSSIpCisgICAgICAgIGRlbCBwMSwgcDIKKyAgICAgICAgcDEgPSBtYWtlcmVmKG8sIE5vbmUpCisgICAgICAgIHAyID0gbWFrZXJlZihvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocDEgaXMgcDIsICJjYWxsYmFja3Mgd2VyZSBOb25lLCBOVUxMIGluIHRoZSBDIEFQSSIpCisKKyAgICBkZWYgdGVzdF9jYWxsYWJsZV9wcm94eShzZWxmKToKKyAgICAgICAgbyA9IENhbGxhYmxlKCkKKyAgICAgICAgcmVmMSA9IHdlYWtyZWYucHJveHkobykKKworICAgICAgICBzZWxmLmNoZWNrX3Byb3h5KG8sIHJlZjEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUocmVmMSkgaXMgd2Vha3JlZi5DYWxsYWJsZVByb3h5VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICJwcm94eSBpcyBub3Qgb2YgY2FsbGFibGUgdHlwZSIpCisgICAgICAgIHJlZjEoJ3R3aW5raWVzIScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvLmJhciA9PSAndHdpbmtpZXMhJywKKyAgICAgICAgICAgICAgICAgICAgICJjYWxsIHRocm91Z2ggcHJveHkgbm90IHBhc3NlZCB0aHJvdWdoIHRvIG9yaWdpbmFsIikKKyAgICAgICAgcmVmMSh4PSdTcGxhdC4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoby5iYXIgPT0gJ1NwbGF0LicsCisgICAgICAgICAgICAgICAgICAgICAiY2FsbCB0aHJvdWdoIHByb3h5IG5vdCBwYXNzZWQgdGhyb3VnaCB0byBvcmlnaW5hbCIpCisKKyAgICAgICAgIyBleHBlY3QgZHVlIHRvIHRvbyBmZXcgYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZjEpCisKKyAgICAgICAgIyBleHBlY3QgZHVlIHRvIHRvbyBtYW55IGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWYxLCAxLCAyLCAzKQorCisgICAgZGVmIGNoZWNrX3Byb3h5KHNlbGYsIG8sIHByb3h5KToKKyAgICAgICAgby5mb28gPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm94eS5mb28gPT0gMSwKKyAgICAgICAgICAgICAgICAgICAgICJwcm94eSBkb2VzIG5vdCByZWZsZWN0IGF0dHJpYnV0ZSBhZGRpdGlvbiIpCisgICAgICAgIG8uZm9vID0gMgorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJveHkuZm9vID09IDIsCisgICAgICAgICAgICAgICAgICAgICAicHJveHkgZG9lcyBub3QgcmVmbGVjdCBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIikKKyAgICAgICAgZGVsIG8uZm9vCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihwcm94eSwgJ2ZvbycpLAorICAgICAgICAgICAgICAgICAgICAgInByb3h5IGRvZXMgbm90IHJlZmxlY3QgYXR0cmlidXRlIHJlbW92YWwiKQorCisgICAgICAgIHByb3h5LmZvbyA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG8uZm9vID09IDEsCisgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IGRvZXMgbm90IHJlZmxlY3QgYXR0cmlidXRlIGFkZGl0aW9uIHZpYSBwcm94eSIpCisgICAgICAgIHByb3h5LmZvbyA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgby5mb28gPT0gMiwKKyAgICAgICAgICAgICJvYmplY3QgZG9lcyBub3QgcmVmbGVjdCBhdHRyaWJ1dGUgbW9kaWZpY2F0aW9uIHZpYSBwcm94eSIpCisgICAgICAgIGRlbCBwcm94eS5mb28KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG8sICdmb28nKSwKKyAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgZG9lcyBub3QgcmVmbGVjdCBhdHRyaWJ1dGUgcmVtb3ZhbCB2aWEgcHJveHkiKQorCisgICAgZGVmIHRlc3RfcHJveHlfZGVsZXRpb24oc2VsZik6CisgICAgICAgICMgVGVzdCBjbGVhcmluZyBvZiBTRiBidWcgIzc2Mjg5MQorICAgICAgICBjbGFzcyBGb286CisgICAgICAgICAgICByZXN1bHQgPSBOb25lCisgICAgICAgICAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwgYWNjZXNzb3IpOgorICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gYWNjZXNzb3IKKyAgICAgICAgZyA9IEZvbygpCisgICAgICAgIGYgPSB3ZWFrcmVmLnByb3h5KGcpCisgICAgICAgIGRlbCBmWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZXN1bHQsIDApCisKKyAgICBkZWYgdGVzdF9wcm94eV9ib29sKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2xlYXJpbmcgb2YgU0YgYnVnICMxMTcwNzY2CisgICAgICAgIGNsYXNzIExpc3QobGlzdCk6IHBhc3MKKyAgICAgICAgbHlzdCA9IExpc3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvb2wod2Vha3JlZi5wcm94eShseXN0KSksIGJvb2wobHlzdCkpCisKKyAgICBkZWYgdGVzdF9nZXR3ZWFrcmVmY291bnQoc2VsZik6CisgICAgICAgIG8gPSBDKCkKKyAgICAgICAgcmVmMSA9IHdlYWtyZWYucmVmKG8pCisgICAgICAgIHJlZjIgPSB3ZWFrcmVmLnJlZihvLCBzZWxmLmNhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJnb3Qgd3JvbmcgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlIG9iamVjdHMiKQorCisgICAgICAgIHByb3h5MSA9IHdlYWtyZWYucHJveHkobykKKyAgICAgICAgcHJveHkyID0gd2Vha3JlZi5wcm94eShvLCBzZWxmLmNhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gNCwKKyAgICAgICAgICAgICAgICAgICAgICJnb3Qgd3JvbmcgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlIG9iamVjdHMiKQorCisgICAgICAgIGRlbCByZWYxLCByZWYyLCBwcm94eTEsIHByb3h5MgorICAgICAgICBzZWxmLmFzc2VydFRydWUod2Vha3JlZi5nZXR3ZWFrcmVmY291bnQobykgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICJ3ZWFrIHJlZmVyZW5jZSBvYmplY3RzIG5vdCB1bmxpbmtlZCBmcm9tIgorICAgICAgICAgICAgICAgICAgICAgIiByZWZlcmVudCB3aGVuIGRpc2NhcmRlZC4iKQorCisgICAgICAgICMgYXNzdW1lcyBpbnRzIGRvIG5vdCBzdXBwb3J0IHdlYWtyZWZzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudCgxKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgImdvdCB3cm9uZyBudW1iZXIgb2Ygd2VhayByZWZlcmVuY2Ugb2JqZWN0cyBmb3IgaW50IikKKworICAgIGRlZiB0ZXN0X2dldHdlYWtyZWZzKHNlbGYpOgorICAgICAgICBvID0gQygpCisgICAgICAgIHJlZjEgPSB3ZWFrcmVmLnJlZihvLCBzZWxmLmNhbGxiYWNrKQorICAgICAgICByZWYyID0gd2Vha3JlZi5yZWYobywgc2VsZi5jYWxsYmFjaykKKyAgICAgICAgZGVsIHJlZjEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZnMobykgPT0gW3JlZjJdLAorICAgICAgICAgICAgICAgICAgICAgImxpc3Qgb2YgcmVmcyBkb2VzIG5vdCBtYXRjaCIpCisKKyAgICAgICAgbyA9IEMoKQorICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYobywgc2VsZi5jYWxsYmFjaykKKyAgICAgICAgcmVmMiA9IHdlYWtyZWYucmVmKG8sIHNlbGYuY2FsbGJhY2spCisgICAgICAgIGRlbCByZWYyCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrcmVmLmdldHdlYWtyZWZzKG8pID09IFtyZWYxXSwKKyAgICAgICAgICAgICAgICAgICAgICJsaXN0IG9mIHJlZnMgZG9lcyBub3QgbWF0Y2giKQorCisgICAgICAgIGRlbCByZWYxCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrcmVmLmdldHdlYWtyZWZzKG8pID09IFtdLAorICAgICAgICAgICAgICAgICAgICAgImxpc3Qgb2YgcmVmcyBub3QgY2xlYXJlZCIpCisKKyAgICAgICAgIyBhc3N1bWVzIGludHMgZG8gbm90IHN1cHBvcnQgd2Vha3JlZnMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZnMoMSkgPT0gW10sCisgICAgICAgICAgICAgICAgICAgICAibGlzdCBvZiByZWZzIGRvZXMgbm90IG1hdGNoIGZvciBpbnQiKQorCisgICAgZGVmIHRlc3RfbmV3c3R5bGVfbnVtYmVyX29wcyhzZWxmKToKKyAgICAgICAgY2xhc3MgRihmbG9hdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGYgPSBGKDIuMCkKKyAgICAgICAgcCA9IHdlYWtyZWYucHJveHkoZikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAgKyAxLjAgPT0gMy4wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMS4wICsgcCA9PSAzLjApICAjIHRoaXMgdXNlZCB0byBTRUdWCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3NfcHJvdGVjdGVkKHNlbGYpOgorICAgICAgICAjIENhbGxiYWNrcyBwcm90ZWN0ZWQgZnJvbSBhbHJlYWR5LXNldCBleGNlcHRpb25zPworICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgU0YgYnVnICM0Nzg1MzQuCisgICAgICAgIGNsYXNzIEJvZ3VzRXJyb3IoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGF0YSA9IHt9CisgICAgICAgIGRlZiByZW1vdmUoayk6CisgICAgICAgICAgICBkZWwgZGF0YVtrXQorICAgICAgICBkZWYgZW5jYXBzdWxhdGUoKToKKyAgICAgICAgICAgIGYgPSBsYW1iZGEgOiAoKQorICAgICAgICAgICAgZGF0YVt3ZWFrcmVmLnJlZihmLCByZW1vdmUpXSA9IE5vbmUKKyAgICAgICAgICAgIHJhaXNlIEJvZ3VzRXJyb3IKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZW5jYXBzdWxhdGUoKQorICAgICAgICBleGNlcHQgQm9ndXNFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhjZXB0aW9uIG5vdCBwcm9wZXJseSByZXN0b3JlZCIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVuY2Fwc3VsYXRlKCkKKyAgICAgICAgZXhjZXB0IEJvZ3VzRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4Y2VwdGlvbiBub3QgcHJvcGVybHkgcmVzdG9yZWQiKQorCisgICAgZGVmIHRlc3Rfc2ZfYnVnXzg0MDgyOShzZWxmKToKKyAgICAgICAgIyAid2Vha3JlZiBjYWxsYmFja3MgYW5kIGdjIGNvcnJ1cHQgbWVtb3J5IgorICAgICAgICAjIHN1YnR5cGVfZGVhbGxvYyBlcnJvbmVvdXNseSBleHBvc2VkIGEgbmV3LXN0eWxlIGluc3RhbmNlCisgICAgICAgICMgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcyBvZiBnZXR0aW5nIGRlYWxsb2NhdGVkIHRvIGdjLAorICAgICAgICAjIGNhdXNpbmcgZG91YmxlLWRlYWxsb2NhdGlvbiBpZiB0aGUgaW5zdGFuY2UgaGFkIGEgd2Vha3JlZgorICAgICAgICAjIGNhbGxiYWNrIHRoYXQgdHJpZ2dlcmVkIGdjLgorICAgICAgICAjIElmIHRoZSBidWcgZXhpc3RzLCB0aGVyZSBwcm9iYWJseSB3b24ndCBiZSBhbiBvYnZpb3VzIHN5bXB0b20KKyAgICAgICAgIyBpbiBhIHJlbGVhc2UgYnVpbGQuICBJbiBhIGRlYnVnIGJ1aWxkLCBhIHNlZ2ZhdWx0IHdpbGwgb2NjdXIKKyAgICAgICAgIyB3aGVuIHRoZSBzZWNvbmQgYXR0ZW1wdCB0byByZW1vdmUgdGhlIGluc3RhbmNlIGZyb20gdGhlICJsaXN0CisgICAgICAgICMgb2YgYWxsIG9iamVjdHMiIG9jY3Vycy4KKworICAgICAgICBpbXBvcnQgZ2MKKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYyA9IEMoKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGMsIGxhbWJkYSBpZ25vcmU6IGdjLmNvbGxlY3QoKSkKKyAgICAgICAgZGVsIGMKKworICAgICAgICAjIFRoZXJlIGVuZGV0aCB0aGUgZmlyc3QgcGFydC4gIEl0IGdldHMgd29yc2UuCisgICAgICAgIGRlbCB3cgorCisgICAgICAgIGMxID0gQygpCisgICAgICAgIGMxLmkgPSBDKCkKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihjMS5pLCBsYW1iZGEgaWdub3JlOiBnYy5jb2xsZWN0KCkpCisKKyAgICAgICAgYzIgPSBDKCkKKyAgICAgICAgYzIuYzEgPSBjMQorICAgICAgICBkZWwgYzEgICMgc3RpbGwgYWxpdmUgYmVjYXVzZSBjMiBwb2ludHMgdG8gaXQKKworICAgICAgICAjIE5vdyB3aGVuIHN1YnR5cGVfZGVhbGxvYyBnZXRzIGNhbGxlZCBvbiBjMiwgaXQncyBub3QgZW5vdWdoIGp1c3QKKyAgICAgICAgIyB0aGF0IGMyIGlzIGltbXVuZSBmcm9tIGdjIHdoaWxlIHRoZSB3ZWFrcmVmIGNhbGxiYWNrcyBhc3NvY2lhdGVkCisgICAgICAgICMgd2l0aCBjMiBleGVjdXRlICh0aGVyZSBhcmUgbm9uZSBpbiB0aGlzIDJuZCBoYWxmIG9mIHRoZSB0ZXN0LCBidHcpLgorICAgICAgICAjIHN1YnR5cGVfZGVhbGxvYyBnb2VzIG9uIHRvIGNhbGwgdGhlIGJhc2UgY2xhc3NlcycgZGVhbGxvY3MgdG9vLAorICAgICAgICAjIHNvIGFueSBnYyB0cmlnZ2VyZWQgYnkgd2Vha3JlZiBjYWxsYmFja3MgYXNzb2NpYXRlZCB3aXRoIGFueXRoaW5nCisgICAgICAgICMgdG9ybiBkb3duIGJ5IGEgYmFzZSBjbGFzcyBkZWFsbG9jIGNhbiBhbHNvIHRyaWdnZXIgZG91YmxlCisgICAgICAgICMgZGVhbGxvY2F0aW9uIG9mIGMyLgorICAgICAgICBkZWwgYzIKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX2luX2N5Y2xlXzEoc2VsZik6CisgICAgICAgIGltcG9ydCBnYworCisgICAgICAgIGNsYXNzIEoob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBJSShvYmplY3QpOgorICAgICAgICAgICAgZGVmIGFjYWxsYmFjayhzZWxmLCBpZ25vcmUpOgorICAgICAgICAgICAgICAgIHNlbGYuSgorCisgICAgICAgIEkgPSBJSSgpCisgICAgICAgIEkuSiA9IEoKKyAgICAgICAgSS53ciA9IHdlYWtyZWYucmVmKEosIEkuYWNhbGxiYWNrKQorCisgICAgICAgICMgTm93IEogYW5kIElJIGFyZSBlYWNoIGluIGEgc2VsZi1jeWNsZSAoYXMgYWxsIG5ldy1zdHlsZSBjbGFzcworICAgICAgICAjIG9iamVjdHMgYXJlLCBzaW5jZSB0aGVpciBfX21yb19fIHBvaW50cyBiYWNrIHRvIHRoZW0pLiAgSSBob2xkcworICAgICAgICAjIGJvdGggYSB3ZWFrIHJlZmVyZW5jZSAoSS53cikgYW5kIGEgc3Ryb25nIHJlZmVyZW5jZSAoSS5KKSB0byBjbGFzcworICAgICAgICAjIEouICBJIGlzIGFsc28gaW4gYSBjeWNsZSAoSS53ciBwb2ludHMgdG8gYSB3ZWFrcmVmIHRoYXQgcmVmZXJlbmNlcworICAgICAgICAjIEkuYWNhbGxiYWNrKS4gIFdoZW4gd2UgZGVsIHRoZXNlIHRocmVlLCB0aGV5IGFsbCBiZWNvbWUgdHJhc2gsIGJ1dAorICAgICAgICAjIHRoZSBjeWNsZXMgcHJldmVudCBhbnkgb2YgdGhlbSBmcm9tIGdldHRpbmcgY2xlYW5lZCB1cCBpbW1lZGlhdGVseS4KKyAgICAgICAgIyBJbnN0ZWFkIHRoZXkgaGF2ZSB0byB3YWl0IGZvciBjeWNsaWMgZ2MgdG8gZGVkdWNlIHRoYXQgdGhleSdyZQorICAgICAgICAjIHRyYXNoLgorICAgICAgICAjCisgICAgICAgICMgZ2MgdXNlZCB0byBjYWxsIHRwX2NsZWFyIG9uIGFsbCBvZiB0aGVtLCBhbmQgdGhlIG9yZGVyIGluIHdoaWNoCisgICAgICAgICMgaXQgZG9lcyB0aGF0IGlzIHByZXR0eSBhY2NpZGVudGFsLiAgVGhlIGV4YWN0IG9yZGVyIGluIHdoaWNoIHdlCisgICAgICAgICMgYnVpbHQgdXAgdGhlc2UgdGhpbmdzIG1hbmFnZXMgdG8gcHJvdm9rZSBnYyBpbnRvIHJ1bm5pbmcgdHBfY2xlYXIKKyAgICAgICAgIyBpbiBqdXN0IHRoZSByaWdodCBvcmRlciAoSSBsYXN0KS4gIENhbGxpbmcgdHBfY2xlYXIgb24gSUkgbGVhdmVzCisgICAgICAgICMgYmVoaW5kIGFuIGluc2FuZSBjbGFzcyBvYmplY3QgKGl0cyBfX21yb19fIGJlY29tZXMgTlVMTCkuICBDYWxsaW5nCisgICAgICAgICMgdHBfY2xlYXIgb24gSiBicmVha3MgaXRzIHNlbGYtY3ljbGUsIGJ1dCBKIGRvZXNuJ3QgZ2V0IGRlbGV0ZWQKKyAgICAgICAgIyBqdXN0IHRoZW4gYmVjYXVzZSBvZiB0aGUgc3Ryb25nIHJlZmVyZW5jZSBmcm9tIEkuSi4gIENhbGxpbmcKKyAgICAgICAgIyB0cF9jbGVhciBvbiBJIHN0YXJ0cyB0byBjbGVhciBJJ3MgX19kaWN0X18sIGFuZCBqdXN0IGhhcHBlbnMgdG8KKyAgICAgICAgIyBjbGVhciBJLkogZmlyc3QgLS0gSS53ciBpcyBzdGlsbCBpbnRhY3QuICBUaGF0IHJlbW92ZXMgdGhlIGxhc3QKKyAgICAgICAgIyByZWZlcmVuY2UgdG8gSiwgd2hpY2ggdHJpZ2dlcnMgdGhlIHdlYWtyZWYgY2FsbGJhY2suICBUaGUgY2FsbGJhY2sKKyAgICAgICAgIyB0cmllcyB0byBkbyAic2VsZi5KIiwgYW5kIGluc3RhbmNlcyBvZiBuZXctc3R5bGUgY2xhc3NlcyBsb29rIHVwCisgICAgICAgICMgYXR0cmlidXRlcyAoIkoiKSBpbiB0aGUgY2xhc3MgZGljdCBmaXJzdC4gIFRoZSBjbGFzcyAoSUkpIHdhbnRzIHRvCisgICAgICAgICMgc2VhcmNoIElJLl9fbXJvX18sIGJ1dCB0aGF0J3MgTlVMTC4gICBUaGUgcmVzdWx0IHdhcyBhIHNlZ2ZhdWx0IGluCisgICAgICAgICMgYSByZWxlYXNlIGJ1aWxkLCBhbmQgYW4gYXNzZXJ0IGZhaWx1cmUgaW4gYSBkZWJ1ZyBidWlsZC4KKyAgICAgICAgZGVsIEksIEosIElJCisgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfaW5fY3ljbGVfMihzZWxmKToKKyAgICAgICAgaW1wb3J0IGdjCisKKyAgICAgICAgIyBUaGlzIGlzIGp1c3QgbGlrZSB0ZXN0X2NhbGxiYWNrX2luX2N5Y2xlXzEsIGV4Y2VwdCB0aGF0IElJIGlzIGFuCisgICAgICAgICMgb2xkLXN0eWxlIGNsYXNzLiAgVGhlIHN5bXB0b20gaXMgZGlmZmVyZW50IHRoZW46ICBhbiBpbnN0YW5jZSBvZiBhbgorICAgICAgICAjIG9sZC1zdHlsZSBjbGFzcyBsb29rcyBpbiBpdHMgb3duIF9fZGljdF9fIGZpcnN0LiAgJ0onIGhhcHBlbnMgdG8KKyAgICAgICAgIyBnZXQgY2xlYXJlZCBmcm9tIEkuX19kaWN0X18gYmVmb3JlICd3cicsIGFuZCAnSicgd2FzIG5ldmVyIGluIElJJ3MKKyAgICAgICAgIyBfX2RpY3RfXywgc28gdGhlIGF0dHJpYnV0ZSBpc24ndCBmb3VuZC4gIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQKKyAgICAgICAgIyB0aGUgb2xkLXN0eWxlIElJIGRvZXNuJ3QgaGF2ZSBhIE5VTEwgX19tcm9fXyAoaXQgZG9lc24ndCBoYXZlIGFueQorICAgICAgICAjIF9fbXJvX18pLCBzbyBubyBzZWdmYXVsdCBvY2N1cnMuICBJbnN0ZWFkIGl0IGdvdDoKKyAgICAgICAgIyAgICB0ZXN0X2NhbGxiYWNrX2luX2N5Y2xlXzIgKF9fbWFpbl9fLlJlZmVyZW5jZXNUZXN0Q2FzZSkgLi4uCisgICAgICAgICMgICAgRXhjZXB0aW9uIGV4Y2VwdGlvbnMuQXR0cmlidXRlRXJyb3I6CisgICAgICAgICMgICAiSUkgaW5zdGFuY2UgaGFzIG5vIGF0dHJpYnV0ZSAnSiciIGluIDxib3VuZCBtZXRob2QgSUkuYWNhbGxiYWNrCisgICAgICAgICMgICAgICAgb2YgPD8uSUkgaW5zdGFuY2UgYXQgMHgwMEI5QjRCOD4+IGlnbm9yZWQKKworICAgICAgICBjbGFzcyBKKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgSUk6CisgICAgICAgICAgICBkZWYgYWNhbGxiYWNrKHNlbGYsIGlnbm9yZSk6CisgICAgICAgICAgICAgICAgc2VsZi5KCisKKyAgICAgICAgSSA9IElJKCkKKyAgICAgICAgSS5KID0gSgorICAgICAgICBJLndyID0gd2Vha3JlZi5yZWYoSiwgSS5hY2FsbGJhY2spCisKKyAgICAgICAgZGVsIEksIEosIElJCisgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfaW5fY3ljbGVfMyhzZWxmKToKKyAgICAgICAgaW1wb3J0IGdjCisKKyAgICAgICAgIyBUaGlzIG9uZSBicm9rZSB0aGUgZmlyc3QgcGF0Y2ggdGhhdCBmaXhlZCB0aGUgbGFzdCB0d28uICBJbiB0aGlzCisgICAgICAgICMgY2FzZSwgdGhlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhlIGNhbGxiYWNrIGFyZW4ndCBhbHNvIHJlYWNoYWJsZQorICAgICAgICAjIGZyb20gdGhlIG9iamVjdCAoYzEpICp0cmlnZ2VyaW5nKiB0aGUgY2FsbGJhY2s6ICB5b3UgY2FuIGdldCB0bworICAgICAgICAjIGMxIGZyb20gYzIsIGJ1dCBub3QgdmljZS12ZXJzYS4gIFRoZSByZXN1bHQgd2FzIHRoYXQgYzIncyBfX2RpY3RfXworICAgICAgICAjIGdvdCB0cF9jbGVhcidlZCBieSB0aGUgdGltZSB0aGUgYzIuY2IgY2FsbGJhY2sgZ290IGludm9rZWQuCisKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBjYihzZWxmLCBpZ25vcmUpOgorICAgICAgICAgICAgICAgIHNlbGYubWUKKyAgICAgICAgICAgICAgICBzZWxmLmMxCisgICAgICAgICAgICAgICAgc2VsZi53cgorCisgICAgICAgIGMxLCBjMiA9IEMoKSwgQygpCisKKyAgICAgICAgYzIubWUgPSBjMgorICAgICAgICBjMi5jMSA9IGMxCisgICAgICAgIGMyLndyID0gd2Vha3JlZi5yZWYoYzEsIGMyLmNiKQorCisgICAgICAgIGRlbCBjMSwgYzIKKyAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja19pbl9jeWNsZV80KHNlbGYpOgorICAgICAgICBpbXBvcnQgZ2MKKworICAgICAgICAjIExpa2UgdGVzdF9jYWxsYmFja19pbl9jeWNsZV8zLCBleGNlcHQgYzIgYW5kIGMxIGhhdmUgZGlmZmVyZW50CisgICAgICAgICMgY2xhc3Nlcy4gIGMyJ3MgY2xhc3MgKEMpIGlzbid0IHJlYWNoYWJsZSBmcm9tIGMxIHRoZW4sIHNvIHByb3RlY3RpbmcKKyAgICAgICAgIyBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHRoZSBkeWluZyBvYmplY3QgKGMxKSBpc24ndCBlbm91Z2ggdG8gc3RvcAorICAgICAgICAjIGMyJ3MgY2xhc3MgKEMpIGZyb20gZ2V0dGluZyB0cF9jbGVhcidlZCBiZWZvcmUgYzIuY2IgaXMgaW52b2tlZC4KKyAgICAgICAgIyBUaGUgcmVzdWx0IHdhcyBhIHNlZ2ZhdWx0IChDLl9fbXJvX18gd2FzIE5VTEwgd2hlbiB0aGUgY2FsbGJhY2sKKyAgICAgICAgIyB0cmllZCB0byBsb29rIHVwIHNlbGYubWUpLgorCisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBjYihzZWxmLCBpZ25vcmUpOgorICAgICAgICAgICAgICAgIHNlbGYubWUKKyAgICAgICAgICAgICAgICBzZWxmLmMxCisgICAgICAgICAgICAgICAgc2VsZi53cgorCisgICAgICAgIGNsYXNzIEQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYzEsIGMyID0gRCgpLCBDKCkKKworICAgICAgICBjMi5tZSA9IGMyCisgICAgICAgIGMyLmMxID0gYzEKKyAgICAgICAgYzIud3IgPSB3ZWFrcmVmLnJlZihjMSwgYzIuY2IpCisKKyAgICAgICAgZGVsIGMxLCBjMiwgQywgRAorICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX2luX2N5Y2xlX3Jlc3VycmVjdGlvbihzZWxmKToKKyAgICAgICAgaW1wb3J0IGdjCisKKyAgICAgICAgIyBEbyBzb21ldGhpbmcgbmFzdHkgaW4gYSB3ZWFrcmVmIGNhbGxiYWNrOiAgcmVzdXJyZWN0IG9iamVjdHMKKyAgICAgICAgIyBmcm9tIGRlYWQgY3ljbGVzLiAgRm9yIHRoaXMgdG8gYmUgYXR0ZW1wdGVkLCB0aGUgd2Vha3JlZiBhbmQKKyAgICAgICAgIyBpdHMgY2FsbGJhY2sgbXVzdCBhbHNvIGJlIHBhcnQgb2YgdGhlIGN5Y2xpYyB0cmFzaCAoZWxzZSB0aGUKKyAgICAgICAgIyBvYmplY3RzIHJlYWNoYWJsZSB2aWEgdGhlIGNhbGxiYWNrIGNvdWxkbid0IGJlIGluIGN5Y2xpYyB0cmFzaAorICAgICAgICAjIHRvIGJlZ2luIHdpdGggLS0gdGhlIGNhbGxiYWNrIHdvdWxkIGFjdCBsaWtlIGFuIGV4dGVybmFsIHJvb3QpLgorICAgICAgICAjIEJ1dCBnYyBjbGVhcnMgdHJhc2ggd2Vha3JlZnMgd2l0aCBjYWxsYmFja3MgZWFybHkgbm93LCB3aGljaAorICAgICAgICAjIGRpc2FibGVzIHRoZSBjYWxsYmFja3MsIHNvIHRoZSBjYWxsYmFja3Mgc2hvdWxkbid0IGdldCBjYWxsZWQKKyAgICAgICAgIyBhdCBhbGwgKGFuZCBzbyBub3RoaW5nIGFjdHVhbGx5IGdldHMgcmVzdXJyZWN0ZWQpLgorCisgICAgICAgIGFsaXN0ID0gW10KKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLmF0dHJpYnV0ZSA9IHZhbHVlCisKKyAgICAgICAgICAgIGRlZiBhY2FsbGJhY2soc2VsZiwgaWdub3JlKToKKyAgICAgICAgICAgICAgICBhbGlzdC5hcHBlbmQoc2VsZi5jKQorCisgICAgICAgIGMxLCBjMiA9IEMoMSksIEMoMikKKyAgICAgICAgYzEuYyA9IGMyCisgICAgICAgIGMyLmMgPSBjMQorICAgICAgICBjMS53ciA9IHdlYWtyZWYucmVmKGMyLCBjMS5hY2FsbGJhY2spCisgICAgICAgIGMyLndyID0gd2Vha3JlZi5yZWYoYzEsIGMyLmFjYWxsYmFjaykKKworICAgICAgICBkZWYgQ193ZW50X2F3YXkoaWdub3JlKToKKyAgICAgICAgICAgIGFsaXN0LmFwcGVuZCgiQyB3ZW50IGF3YXkiKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKEMsIENfd2VudF9hd2F5KQorCisgICAgICAgIGRlbCBjMSwgYzIsIEMgICAjIG1ha2UgdGhlbSBhbGwgdHJhc2gKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGlzdCwgW10pICAjIGRlbCBpc24ndCBlbm91Z2ggdG8gcmVjbGFpbSBhbnl0aGluZworCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAjIGMxLndyIGFuZCBjMi53ciB3ZXJlIHBhcnQgb2YgdGhlIGN5Y2xpYyB0cmFzaCwgc28gc2hvdWxkIGhhdmUKKyAgICAgICAgIyBiZWVuIGNsZWFyZWQgd2l0aG91dCB0aGVpciBjYWxsYmFja3MgZXhlY3V0aW5nLiAgT1RPSCwgdGhlIHdlYWtyZWYKKyAgICAgICAgIyB0byBDIGlzIGJvdW5kIHRvIGEgZnVuY3Rpb24gbG9jYWwgKHdyKSwgYW5kIHdhc24ndCB0cmFzaCwgc28gdGhhdAorICAgICAgICAjIGNhbGxiYWNrIHNob3VsZCBoYXZlIGJlZW4gaW52b2tlZCB3aGVuIEMgd2VudCBhd2F5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsaXN0LCBbIkMgd2VudCBhd2F5Il0pCisgICAgICAgICMgVGhlIHJlbWFpbmluZyB3ZWFrcmVmIHNob3VsZCBiZSBkZWFkIG5vdyAoaXRzIGNhbGxiYWNrIHJhbikuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3IoKSwgTm9uZSkKKworICAgICAgICBkZWwgYWxpc3RbOl0KKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxpc3QsIFtdKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tzX29uX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICBpbXBvcnQgZ2MKKworICAgICAgICAjIFNldCB1cCB3ZWFrcmVmIGNhbGxiYWNrcyAqb24qIHdlYWtyZWYgY2FsbGJhY2tzLgorICAgICAgICBhbGlzdCA9IFtdCisgICAgICAgIGRlZiBzYWZlX2NhbGxiYWNrKGlnbm9yZSk6CisgICAgICAgICAgICBhbGlzdC5hcHBlbmQoInNhZmVfY2FsbGJhY2sgY2FsbGVkIikKKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgY2Ioc2VsZiwgaWdub3JlKToKKyAgICAgICAgICAgICAgICBhbGlzdC5hcHBlbmQoImNiIGNhbGxlZCIpCisKKyAgICAgICAgYywgZCA9IEMoKSwgQygpCisgICAgICAgIGMub3RoZXIgPSBkCisgICAgICAgIGQub3RoZXIgPSBjCisgICAgICAgIGNhbGxiYWNrID0gYy5jYgorICAgICAgICBjLndyID0gd2Vha3JlZi5yZWYoZCwgY2FsbGJhY2spICAgICAjIHRoaXMgd29uJ3QgdHJpZ2dlcgorICAgICAgICBkLndyID0gd2Vha3JlZi5yZWYoY2FsbGJhY2ssIGQuY2IpICAjIGRpdHRvCisgICAgICAgIGV4dGVybmFsX3dyID0gd2Vha3JlZi5yZWYoY2FsbGJhY2ssIHNhZmVfY2FsbGJhY2spICAjIGJ1dCB0aGlzIHdpbGwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4dGVybmFsX3dyKCkgaXMgY2FsbGJhY2spCisKKyAgICAgICAgIyBUaGUgd2Vha3JlZnMgYXR0YWNoZWQgdG8gYyBhbmQgZCBzaG91bGQgZ2V0IGNsZWFyZWQsIHNvIHRoYXQKKyAgICAgICAgIyBDLmNiIGlzIG5ldmVyIGNhbGxlZC4gIEJ1dCBleHRlcm5hbF93ciBpc24ndCBwYXJ0IG9mIHRoZSBjeWNsaWMKKyAgICAgICAgIyB0cmFzaCwgYW5kIG5vIGN5Y2xpYyB0cmFzaCBpcyByZWFjaGFibGUgZnJvbSBpdCwgc28gc2FmZV9jYWxsYmFjaworICAgICAgICAjIHNob3VsZCBnZXQgaW52b2tlZCB3aGVuIHRoZSBib3VuZCBtZXRob2Qgb2JqZWN0IGNhbGxiYWNrIChjLmNiKQorICAgICAgICAjIC0tIHdoaWNoIGlzIGl0c2VsZiBhIGNhbGxiYWNrLCBhbmQgYWxzbyBwYXJ0IG9mIHRoZSBjeWNsaWMgdHJhc2ggLS0KKyAgICAgICAgIyBnZXRzIHJlY2xhaW1lZCBhdCB0aGUgZW5kIG9mIGdjLgorCisgICAgICAgIGRlbCBjYWxsYmFjaywgYywgZCwgQworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsaXN0LCBbXSkgICMgZGVsIGlzbid0IGVub3VnaCB0byBjbGVhbiB1cCBjeWNsZXMKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxpc3QsIFsic2FmZV9jYWxsYmFjayBjYWxsZWQiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHRlcm5hbF93cigpLCBOb25lKQorCisgICAgICAgIGRlbCBhbGlzdFs6XQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGlzdCwgW10pCisKKyAgICBkZWYgdGVzdF9nY19kdXJpbmdfcmVmX2NyZWF0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2djX2R1cmluZ19jcmVhdGlvbih3ZWFrcmVmLnJlZikKKworICAgIGRlZiB0ZXN0X2djX2R1cmluZ19wcm94eV9jcmVhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19nY19kdXJpbmdfY3JlYXRpb24od2Vha3JlZi5wcm94eSkKKworICAgIGRlZiBjaGVja19nY19kdXJpbmdfY3JlYXRpb24oc2VsZiwgbWFrZXJlZik6CisgICAgICAgIHRocmVzaG9sZHMgPSBnYy5nZXRfdGhyZXNob2xkKCkKKyAgICAgICAgZ2Muc2V0X3RocmVzaG9sZCgxLCAxLCAxKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgY2FsbGJhY2soKmFyZ3MpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJlZmVyZW5jZWQgPSBBKCkKKworICAgICAgICBhID0gQSgpCisgICAgICAgIGEuYSA9IGEKKyAgICAgICAgYS53ciA9IG1ha2VyZWYocmVmZXJlbmNlZCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIG5vdyBtYWtlIHN1cmUgdGhlIG9iamVjdCBhbmQgdGhlIHJlZiBnZXQgbGFiZWxlZCBhcworICAgICAgICAgICAgIyBjeWNsaWMgdHJhc2g6CisgICAgICAgICAgICBhID0gQSgpCisgICAgICAgICAgICB3ZWFrcmVmLnJlZihyZWZlcmVuY2VkLCBjYWxsYmFjaykKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZ2Muc2V0X3RocmVzaG9sZCgqdGhyZXNob2xkcykKKworICAgIGRlZiB0ZXN0X3JlZl9jcmVhdGVkX2R1cmluZ19kZWwoc2VsZik6CisgICAgICAgICMgQnVnICMxMzc3ODU4CisgICAgICAgICMgQSB3ZWFrcmVmIGNyZWF0ZWQgaW4gYW4gb2JqZWN0J3MgX19kZWxfXygpIHdvdWxkIGNyYXNoIHRoZQorICAgICAgICAjIGludGVycHJldGVyIHdoZW4gdGhlIHdlYWtyZWYgd2FzIGNsZWFuZWQgdXAgc2luY2UgaXQgd291bGQgcmVmZXIgdG8KKyAgICAgICAgIyBub24tZXhpc3RlbnQgbWVtb3J5LiAgVGhpcyB0ZXN0IHNob3VsZCBub3Qgc2VnZmF1bHQgdGhlIGludGVycHJldGVyLgorICAgICAgICBjbGFzcyBUYXJnZXQob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGdsb2JhbCByZWZfZnJvbV9kZWwKKyAgICAgICAgICAgICAgICByZWZfZnJvbV9kZWwgPSB3ZWFrcmVmLnJlZihzZWxmKQorCisgICAgICAgIHcgPSBUYXJnZXQoKQorCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAzNjM0CisgICAgICAgICMgPHdlYWtyZWYgdG8gY2xhc3M+Ll9faW5pdF9fKCkgZG9lc24ndCBjaGVjayBlcnJvcnMgY29ycmVjdGx5CisgICAgICAgIHIgPSB3ZWFrcmVmLnJlZihFeGNlcHRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgci5fX2luaXRfXywgMCwgMCwgMCwgMCwgMCkKKyAgICAgICAgIyBObyBleGNlcHRpb24gc2hvdWxkIGJlIHJhaXNlZCBoZXJlCisgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfY2xhc3NlcyhzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGJvdGggb2xkLXN0eWxlIGNsYXNzZXMgYW5kIG5ldy1zdHlsZSBjbGFzc2VzCisgICAgICAgICMgYXJlIHdlYWtyZWZhYmxlLgorICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEI6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGwgPSBbXQorICAgICAgICB3ZWFrcmVmLnJlZihpbnQpCisgICAgICAgIGEgPSB3ZWFrcmVmLnJlZihBLCBsLmFwcGVuZCkKKyAgICAgICAgQSA9IE5vbmUKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIFthXSkKKyAgICAgICAgYiA9IHdlYWtyZWYucmVmKEIsIGwuYXBwZW5kKQorICAgICAgICBCID0gTm9uZQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgW2EsIGJdKQorCisgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CisgICAgICAgICMgQWxpdmUgd2Vha3JlZnMgZGVmZXIgZXF1YWxpdHkgdGVzdGluZyB0byB0aGVpciB1bmRlcmx5aW5nIG9iamVjdC4KKyAgICAgICAgeCA9IE9iamVjdCgxKQorICAgICAgICB5ID0gT2JqZWN0KDEpCisgICAgICAgIHogPSBPYmplY3QoMikKKyAgICAgICAgYSA9IHdlYWtyZWYucmVmKHgpCisgICAgICAgIGIgPSB3ZWFrcmVmLnJlZih5KQorICAgICAgICBjID0gd2Vha3JlZi5yZWYoeikKKyAgICAgICAgZCA9IHdlYWtyZWYucmVmKHgpCisgICAgICAgICMgTm90ZSBob3cgd2UgZGlyZWN0bHkgdGVzdCB0aGUgb3BlcmF0b3JzIGhlcmUsIHRvIHN0cmVzcyBib3RoCisgICAgICAgICMgX19lcV9fIGFuZCBfX25lX18uCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhID09IGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSAhPSBiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGEgPT0gYykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgIT0gYykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhICE9IGQpCisgICAgICAgIGRlbCB4LCB5LCB6CisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBmb3IgciBpbiBhLCBiLCBjOgorICAgICAgICAgICAgIyBTYW5pdHkgY2hlY2sKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocigpLCBOb25lKQorICAgICAgICAjIERlYWQgd2Vha3JlZnMgY29tcGFyZSBieSBpZGVudGl0eTogd2hldGhlciBgYWAgYW5kIGBkYCBhcmUgdGhlCisgICAgICAgICMgc2FtZSB3ZWFrcmVmIG9iamVjdCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIHNpbmNlIHRoZXkgcG9pbnRlZAorICAgICAgICAjIHRvIHRoZSBzYW1lIG9yaWdpbmFsIG9iamVjdCBhbmQgZGlkbid0IGhhdmUgYSBjYWxsYmFjay4KKyAgICAgICAgIyAoc2VlIGlzc3VlICMxNjQ1MykuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSA9PSBiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYSAhPSBiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGEgPT0gYykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgIT0gYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhID09IGQsIGEgaXMgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICE9IGQsIGEgaXMgbm90IGQpCisKKyAgICBkZWYgdGVzdF9oYXNoaW5nKHNlbGYpOgorICAgICAgICAjIEFsaXZlIHdlYWtyZWZzIGhhc2ggdGhlIHNhbWUgYXMgdGhlIHVuZGVybHlpbmcgb2JqZWN0CisgICAgICAgIHggPSBPYmplY3QoNDIpCisgICAgICAgIHkgPSBPYmplY3QoNDIpCisgICAgICAgIGEgPSB3ZWFrcmVmLnJlZih4KQorICAgICAgICBiID0gd2Vha3JlZi5yZWYoeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGEpLCBoYXNoKDQyKSkKKyAgICAgICAgZGVsIHgsIHkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICMgRGVhZCB3ZWFrcmVmczoKKyAgICAgICAgIyAtIHJldGFpbiB0aGVpciBoYXNoIGlzIHRoZXkgd2VyZSBoYXNoZWQgd2hlbiBhbGl2ZTsKKyAgICAgICAgIyAtIG90aGVyd2lzZSwgY2Fubm90IGJlIGhhc2hlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGEpLCBoYXNoKDQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNoLCBiKQorCisgICAgZGVmIHRlc3RfdHJhc2hjYW5fMTY2MDIoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE2NjAyOiB3aGVuIGEgd2Vha3JlZidzIHRhcmdldCB3YXMgcGFydCBvZiBhIGxvbmcKKyAgICAgICAgIyBkZWFsbG9jYXRpb24gY2hhaW4sIHRoZSB0cmFzaGNhbiBtZWNoYW5pc20gY291bGQgZGVsYXkgY2xlYXJpbmcKKyAgICAgICAgIyBvZiB0aGUgd2Vha3JlZiBhbmQgbWFrZSB0aGUgdGFyZ2V0IG9iamVjdCB2aXNpYmxlIGZyb20gb3V0c2lkZQorICAgICAgICAjIGNvZGUgZXZlbiB0aG91Z2ggaXRzIHJlZmNvdW50IGhhZCBkcm9wcGVkIHRvIDAuICBBIGNyYXNoIGVuc3VlZC4KKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCk6CisgICAgICAgICAgICAgICAgaWYgbm90IHBhcmVudDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgd3NlbGYgPSB3ZWFrcmVmLnJlZihzZWxmKQorICAgICAgICAgICAgICAgIGRlZiBjYih3cGFyZW50KToKKyAgICAgICAgICAgICAgICAgICAgbyA9IHdzZWxmKCkKKyAgICAgICAgICAgICAgICBzZWxmLndwYXJlbnQgPSB3ZWFrcmVmLnJlZihwYXJlbnQsIGNiKQorCisgICAgICAgIGQgPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KCkKKyAgICAgICAgcm9vdCA9IGMgPSBDKE5vbmUpCisgICAgICAgIGZvciBuIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICBkW2NdID0gYyA9IEMoYykKKyAgICAgICAgZGVsIHJvb3QKKyAgICAgICAgZ2MuY29sbGVjdCgpCisKKworY2xhc3MgU3ViY2xhc3NhYmxlV2Vha3JlZlRlc3RDYXNlKFRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3JlZnMoc2VsZik6CisgICAgICAgIGNsYXNzIE15UmVmKHdlYWtyZWYucmVmKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYiwgY2FsbGJhY2s9Tm9uZSwgdmFsdWU9NDIpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgICAgIHN1cGVyKE15UmVmLCBzZWxmKS5fX2luaXRfXyhvYiwgY2FsbGJhY2spCisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKE15UmVmLCBzZWxmKS5fX2NhbGxfXygpCisgICAgICAgIG8gPSBPYmplY3QoImZvbyIpCisgICAgICAgIG1yID0gTXlSZWYobywgdmFsdWU9MjQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtcigpIGlzIG8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXIudmFsdWUsIDI0KQorICAgICAgICBkZWwgbworICAgICAgICBzZWxmLmFzc2VydFRydWUobXIoKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfcmVmc19kb250X3JlcGxhY2Vfc3RhbmRhcmRfcmVmcyhzZWxmKToKKyAgICAgICAgY2xhc3MgTXlSZWYod2Vha3JlZi5yZWYpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvID0gT2JqZWN0KDQyKQorICAgICAgICByMSA9IE15UmVmKG8pCisgICAgICAgIHIyID0gd2Vha3JlZi5yZWYobykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIxIGlzIG5vdCByMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3ZWFrcmVmLmdldHdlYWtyZWZzKG8pLCBbcjIsIHIxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3ZWFrcmVmLmdldHdlYWtyZWZjb3VudChvKSwgMikKKyAgICAgICAgcjMgPSBNeVJlZihvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pLCAzKQorICAgICAgICByZWZzID0gd2Vha3JlZi5nZXR3ZWFrcmVmcyhvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZWZzKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIyIGlzIHJlZnNbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocjEsIHJlZnNbMTpdKQorICAgICAgICBzZWxmLmFzc2VydEluKHIzLCByZWZzWzE6XSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3JlZnNfZG9udF9jb25mbGF0ZV9jYWxsYmFja3Moc2VsZik6CisgICAgICAgIGNsYXNzIE15UmVmKHdlYWtyZWYucmVmKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbyA9IE9iamVjdCg0MikKKyAgICAgICAgcjEgPSBNeVJlZihvLCBpZCkKKyAgICAgICAgcjIgPSBNeVJlZihvLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMSBpcyBub3QgcjIpCisgICAgICAgIHJlZnMgPSB3ZWFrcmVmLmdldHdlYWtyZWZzKG8pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocjEsIHJlZnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocjIsIHJlZnMpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc19yZWZzX3dpdGhfc2xvdHMoc2VsZik6CisgICAgICAgIGNsYXNzIE15UmVmKHdlYWtyZWYucmVmKToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9ICJzbG90MSIsICJzbG90MiIKKyAgICAgICAgICAgIGRlZiBfX25ld19fKHR5cGUsIG9iLCBjYWxsYmFjaywgc2xvdDEsIHNsb3QyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gd2Vha3JlZi5yZWYuX19uZXdfXyh0eXBlLCBvYiwgY2FsbGJhY2spCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgb2IsIGNhbGxiYWNrLCBzbG90MSwgc2xvdDIpOgorICAgICAgICAgICAgICAgIHNlbGYuc2xvdDEgPSBzbG90MQorICAgICAgICAgICAgICAgIHNlbGYuc2xvdDIgPSBzbG90MgorICAgICAgICAgICAgZGVmIG1ldGgoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2xvdDEgKyBzZWxmLnNsb3QyCisgICAgICAgIG8gPSBPYmplY3QoNDIpCisgICAgICAgIHIgPSBNeVJlZihvLCBOb25lLCAiYWJjIiwgImRlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5zbG90MSwgImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5zbG90MiwgImRlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5tZXRoKCksICJhYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIociwgIl9fZGljdF9fIikpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc19yZWZzX3dpdGhfY3ljbGUoc2VsZik6CisgICAgICAgICMgQnVnICMzMTEwCisgICAgICAgICMgQW4gaW5zdGFuY2Ugb2YgYSB3ZWFrcmVmIHN1YmNsYXNzIGNhbiBoYXZlIGF0dHJpYnV0ZXMuCisgICAgICAgICMgSWYgc3VjaCBhIHdlYWtyZWYgaG9sZHMgdGhlIG9ubHkgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0LAorICAgICAgICAjIGRlbGV0aW5nIHRoZSB3ZWFrcmVmIHdpbGwgZGVsZXRlIHRoZSBvYmplY3QuIEluIHRoaXMgY2FzZSwKKyAgICAgICAgIyB0aGUgY2FsbGJhY2sgbXVzdCBub3QgYmUgY2FsbGVkLCBiZWNhdXNlIHRoZSByZWYgb2JqZWN0IGlzCisgICAgICAgICMgYmVpbmcgZGVsZXRlZC4KKyAgICAgICAgY2xhc3MgTXlSZWYod2Vha3JlZi5yZWYpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgVXNlIGEgbG9jYWwgY2FsbGJhY2ssIGZvciAicmVncnRlc3QgLVI6OiIKKyAgICAgICAgIyB0byBkZXRlY3QgcmVmY291bnRpbmcgcHJvYmxlbXMKKyAgICAgICAgZGVmIGNhbGxiYWNrKHcpOgorICAgICAgICAgICAgc2VsZi5jYmNhbGxlZCArPSAxCisKKyAgICAgICAgbyA9IEMoKQorICAgICAgICByMSA9IE15UmVmKG8sIGNhbGxiYWNrKQorICAgICAgICByMS5vID0gbworICAgICAgICBkZWwgbworCisgICAgICAgIGRlbCByMSAjIFVzZWQgdG8gY3Jhc2ggaGVyZQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYmNhbGxlZCwgMCkKKworICAgICAgICAjIFNhbWUgdGVzdCwgd2l0aCB0d28gd2Vha3JlZnMgdG8gdGhlIHNhbWUgb2JqZWN0CisgICAgICAgICMgKHNpbmNlIGNvZGUgcGF0aHMgYXJlIGRpZmZlcmVudCkKKyAgICAgICAgbyA9IEMoKQorICAgICAgICByMSA9IE15UmVmKG8sIGNhbGxiYWNrKQorICAgICAgICByMiA9IE15UmVmKG8sIGNhbGxiYWNrKQorICAgICAgICByMS5yID0gcjIKKyAgICAgICAgcjIubyA9IG8KKyAgICAgICAgZGVsIG8KKyAgICAgICAgZGVsIHIyCisKKyAgICAgICAgZGVsIHIxICMgVXNlZCB0byBjcmFzaCBoZXJlCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNiY2FsbGVkLCAwKQorCisKK2NsYXNzIE1hcHBpbmdUZXN0Q2FzZShUZXN0QmFzZSk6CisKKyAgICBDT1VOVCA9IDEwCisKKyAgICBkZWYgY2hlY2tfbGVuX2N5Y2xlcyhzZWxmLCBkaWN0X3R5cGUsIGNvbnMpOgorICAgICAgICBOID0gMjAKKyAgICAgICAgaXRlbXMgPSBbUmVmQ3ljbGUoKSBmb3IgaSBpbiByYW5nZShOKV0KKyAgICAgICAgZGN0ID0gZGljdF90eXBlKGNvbnMobykgZm9yIG8gaW4gaXRlbXMpCisgICAgICAgICMgS2VlcCBhbiBpdGVyYXRvciBhbGl2ZQorICAgICAgICBpdCA9IGRjdC5pdGVyaXRlbXMoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXh0KGl0KQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVsIGl0ZW1zCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBuMSA9IGxlbihkY3QpCisgICAgICAgIGRlbCBpdAorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgbjIgPSBsZW4oZGN0KQorICAgICAgICAjIG9uZSBpdGVtIG1heSBiZSBrZXB0IGFsaXZlIGluc2lkZSB0aGUgaXRlcmF0b3IKKyAgICAgICAgc2VsZi5hc3NlcnRJbihuMSwgKDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4yLCAwKQorCisgICAgZGVmIHRlc3Rfd2Vha19rZXllZF9sZW5fY3ljbGVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2xlbl9jeWNsZXMod2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSwgbGFtYmRhIGs6IChrLCAxKSkKKworICAgIGRlZiB0ZXN0X3dlYWtfdmFsdWVkX2xlbl9jeWNsZXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbGVuX2N5Y2xlcyh3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnksIGxhbWJkYSBrOiAoMSwgaykpCisKKyAgICBkZWYgY2hlY2tfbGVuX3JhY2Uoc2VsZiwgZGljdF90eXBlLCBjb25zKToKKyAgICAgICAgIyBFeHRlbmRlZCBzYW5pdHkgY2hlY2tzIGZvciBsZW4oKSBpbiB0aGUgZmFjZSBvZiBjeWNsaWMgY29sbGVjdGlvbgorICAgICAgICBzZWxmLmFkZENsZWFudXAoZ2Muc2V0X3RocmVzaG9sZCwgKmdjLmdldF90aHJlc2hvbGQoKSkKKyAgICAgICAgZm9yIHRoIGluIHJhbmdlKDEsIDEwMCk6CisgICAgICAgICAgICBOID0gMjAKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoMCkKKyAgICAgICAgICAgIGdjLnNldF90aHJlc2hvbGQodGgsIHRoLCB0aCkKKyAgICAgICAgICAgIGl0ZW1zID0gW1JlZkN5Y2xlKCkgZm9yIGkgaW4gcmFuZ2UoTildCisgICAgICAgICAgICBkY3QgPSBkaWN0X3R5cGUoY29ucyhvKSBmb3IgbyBpbiBpdGVtcykKKyAgICAgICAgICAgIGRlbCBpdGVtcworICAgICAgICAgICAgIyBBbGwgaXRlbXMgd2lsbCBiZSBjb2xsZWN0ZWQgYXQgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gcGFzcworICAgICAgICAgICAgaXQgPSBkY3QuaXRlcml0ZW1zKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuZXh0KGl0KQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgbjEgPSBsZW4oZGN0KQorICAgICAgICAgICAgZGVsIGl0CisgICAgICAgICAgICBuMiA9IGxlbihkY3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChuMSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKG4xLCBOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobjIsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChuMiwgbjEpCisKKyAgICBkZWYgdGVzdF93ZWFrX2tleWVkX2xlbl9yYWNlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2xlbl9yYWNlKHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnksIGxhbWJkYSBrOiAoaywgMSkpCisKKyAgICBkZWYgdGVzdF93ZWFrX3ZhbHVlZF9sZW5fcmFjZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19sZW5fcmFjZSh3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnksIGxhbWJkYSBrOiAoMSwgaykpCisKKyAgICBkZWYgdGVzdF93ZWFrX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIworICAgICAgICAjICBUaGlzIGV4ZXJjaXNlcyBkLmNvcHkoKSwgZC5pdGVtcygpLCBkW10sIGRlbCBkW10sIGxlbihkKS4KKyAgICAgICAgIworICAgICAgICBkaWN0LCBvYmplY3RzID0gc2VsZi5tYWtlX3dlYWtfdmFsdWVkX2RpY3QoKQorICAgICAgICBmb3IgbyBpbiBvYmplY3RzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pID09IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIG51bWJlciBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gJXIhIiAlIG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobyBpcyBkaWN0W28uYXJnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAid3Jvbmcgb2JqZWN0IHJldHVybmVkIGJ5IHdlYWsgZGljdCEiKQorICAgICAgICBpdGVtczEgPSBkaWN0Lml0ZW1zKCkKKyAgICAgICAgaXRlbXMyID0gZGljdC5jb3B5KCkuaXRlbXMoKQorICAgICAgICBpdGVtczEuc29ydCgpCisgICAgICAgIGl0ZW1zMi5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGl0ZW1zMSA9PSBpdGVtczIsCisgICAgICAgICAgICAgICAgICAgICAiY2xvbmluZyBvZiB3ZWFrLXZhbHVlZCBkaWN0aW9uYXJ5IGRpZCBub3Qgd29yayEiKQorICAgICAgICBkZWwgaXRlbXMxLCBpdGVtczIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihkaWN0KSA9PSBzZWxmLkNPVU5UKQorICAgICAgICBkZWwgb2JqZWN0c1swXQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGRpY3QpID09IChzZWxmLkNPVU5UIC0gMSksCisgICAgICAgICAgICAgICAgICAgICAiZGVsZXRpbmcgb2JqZWN0IGRpZCBub3QgY2F1c2UgZGljdGlvbmFyeSB1cGRhdGUiKQorICAgICAgICBkZWwgb2JqZWN0cywgbworICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGRpY3QpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAiZGVsZXRpbmcgdGhlIHZhbHVlcyBkaWQgbm90IGNsZWFyIHRoZSBkaWN0aW9uYXJ5IikKKyAgICAgICAgIyByZWdyZXNzaW9uIG9uIFNGIGJ1ZyAjNDQ3MTUyOgorICAgICAgICBkaWN0ID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGRpY3QuX19nZXRpdGVtX18sIDEpCisgICAgICAgIGRpY3RbMl0gPSBDKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGRpY3QuX19nZXRpdGVtX18sIDIpCisKKyAgICBkZWYgdGVzdF93ZWFrX2tleXMoc2VsZik6CisgICAgICAgICMKKyAgICAgICAgIyAgVGhpcyBleGVyY2lzZXMgZC5jb3B5KCksIGQuaXRlbXMoKSwgZFtdID0gdiwgZFtdLCBkZWwgZFtdLAorICAgICAgICAjICBsZW4oZCksIGluIGQuCisgICAgICAgICMKKyAgICAgICAgZGljdCwgb2JqZWN0cyA9IHNlbGYubWFrZV93ZWFrX2tleWVkX2RpY3QoKQorICAgICAgICBmb3IgbyBpbiBvYmplY3RzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdlYWtyZWYuZ2V0d2Vha3JlZmNvdW50KG8pID09IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIG51bWJlciBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gJXIhIiAlIG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoby5hcmcgaXMgZGljdFtvXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAid3Jvbmcgb2JqZWN0IHJldHVybmVkIGJ5IHdlYWsgZGljdCEiKQorICAgICAgICBpdGVtczEgPSBkaWN0Lml0ZW1zKCkKKyAgICAgICAgaXRlbXMyID0gZGljdC5jb3B5KCkuaXRlbXMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2V0KGl0ZW1zMSkgPT0gc2V0KGl0ZW1zMiksCisgICAgICAgICAgICAgICAgICAgICAiY2xvbmluZyBvZiB3ZWFrLWtleWVkIGRpY3Rpb25hcnkgZGlkIG5vdCB3b3JrISIpCisgICAgICAgIGRlbCBpdGVtczEsIGl0ZW1zMgorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGRpY3QpID09IHNlbGYuQ09VTlQpCisgICAgICAgIGRlbCBvYmplY3RzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZGljdCkgPT0gKHNlbGYuQ09VTlQgLSAxKSwKKyAgICAgICAgICAgICAgICAgICAgICJkZWxldGluZyBvYmplY3QgZGlkIG5vdCBjYXVzZSBkaWN0aW9uYXJ5IHVwZGF0ZSIpCisgICAgICAgIGRlbCBvYmplY3RzLCBvCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZGljdCkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICJkZWxldGluZyB0aGUga2V5cyBkaWQgbm90IGNsZWFyIHRoZSBkaWN0aW9uYXJ5IikKKyAgICAgICAgbyA9IE9iamVjdCg0MikKKyAgICAgICAgZGljdFtvXSA9ICJXaGF0IGlzIHRoZSBtZWFuaW5nIG9mIHRoZSB1bml2ZXJzZT8iCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obywgZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigzNCwgZGljdCkKKworICAgIGRlZiB0ZXN0X3dlYWtfa2V5ZWRfaXRlcnMoc2VsZik6CisgICAgICAgIGRpY3QsIG9iamVjdHMgPSBzZWxmLm1ha2Vfd2Vha19rZXllZF9kaWN0KCkKKyAgICAgICAgc2VsZi5jaGVja19pdGVycyhkaWN0KQorCisgICAgICAgICMgVGVzdCBrZXlyZWZzKCkKKyAgICAgICAgcmVmcyA9IGRpY3Qua2V5cmVmcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlZnMpLCBsZW4ob2JqZWN0cykpCisgICAgICAgIG9iamVjdHMyID0gbGlzdChvYmplY3RzKQorICAgICAgICBmb3Igd3IgaW4gcmVmczoKKyAgICAgICAgICAgIG9iID0gd3IoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvYiwgZGljdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2IuYXJnLCBkaWN0W29iXSkKKyAgICAgICAgICAgIG9iamVjdHMyLnJlbW92ZShvYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2JqZWN0czIpLCAwKQorCisgICAgICAgICMgVGVzdCBpdGVya2V5cmVmcygpCisgICAgICAgIG9iamVjdHMyID0gbGlzdChvYmplY3RzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaXN0KGRpY3QuaXRlcmtleXJlZnMoKSkpLCBsZW4ob2JqZWN0cykpCisgICAgICAgIGZvciB3ciBpbiBkaWN0Lml0ZXJrZXlyZWZzKCk6CisgICAgICAgICAgICBvYiA9IHdyKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob2IsIGRpY3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iLmFyZywgZGljdFtvYl0pCisgICAgICAgICAgICBvYmplY3RzMi5yZW1vdmUob2IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9iamVjdHMyKSwgMCkKKworICAgIGRlZiB0ZXN0X3dlYWtfdmFsdWVkX2l0ZXJzKHNlbGYpOgorICAgICAgICBkaWN0LCBvYmplY3RzID0gc2VsZi5tYWtlX3dlYWtfdmFsdWVkX2RpY3QoKQorICAgICAgICBzZWxmLmNoZWNrX2l0ZXJzKGRpY3QpCisKKyAgICAgICAgIyBUZXN0IHZhbHVlcmVmcygpCisgICAgICAgIHJlZnMgPSBkaWN0LnZhbHVlcmVmcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlZnMpLCBsZW4ob2JqZWN0cykpCisgICAgICAgIG9iamVjdHMyID0gbGlzdChvYmplY3RzKQorICAgICAgICBmb3Igd3IgaW4gcmVmczoKKyAgICAgICAgICAgIG9iID0gd3IoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYiwgZGljdFtvYi5hcmddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYi5hcmcsIGRpY3Rbb2IuYXJnXS5hcmcpCisgICAgICAgICAgICBvYmplY3RzMi5yZW1vdmUob2IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9iamVjdHMyKSwgMCkKKworICAgICAgICAjIFRlc3QgaXRlcnZhbHVlcmVmcygpCisgICAgICAgIG9iamVjdHMyID0gbGlzdChvYmplY3RzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaXN0KGRpY3QuaXRlcnZhbHVlcmVmcygpKSksIGxlbihvYmplY3RzKSkKKyAgICAgICAgZm9yIHdyIGluIGRpY3QuaXRlcnZhbHVlcmVmcygpOgorICAgICAgICAgICAgb2IgPSB3cigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iLCBkaWN0W29iLmFyZ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iLmFyZywgZGljdFtvYi5hcmddLmFyZykKKyAgICAgICAgICAgIG9iamVjdHMyLnJlbW92ZShvYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2JqZWN0czIpLCAwKQorCisgICAgZGVmIGNoZWNrX2l0ZXJzKHNlbGYsIGRpY3QpOgorICAgICAgICAjIGl0ZW0gaXRlcmF0b3I6CisgICAgICAgIGl0ZW1zID0gZGljdC5pdGVtcygpCisgICAgICAgIGZvciBpdGVtIGluIGRpY3QuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBpdGVtcy5yZW1vdmUoaXRlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihpdGVtcykgPT0gMCwgIml0ZXJpdGVtcygpIGRpZCBub3QgdG91Y2ggYWxsIGl0ZW1zIikKKworICAgICAgICAjIGtleSBpdGVyYXRvciwgdmlhIF9faXRlcl9fKCk6CisgICAgICAgIGtleXMgPSBkaWN0LmtleXMoKQorICAgICAgICBmb3IgayBpbiBkaWN0OgorICAgICAgICAgICAga2V5cy5yZW1vdmUoaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihrZXlzKSA9PSAwLCAiX19pdGVyX18oKSBkaWQgbm90IHRvdWNoIGFsbCBrZXlzIikKKworICAgICAgICAjIGtleSBpdGVyYXRvciwgdmlhIGl0ZXJrZXlzKCk6CisgICAgICAgIGtleXMgPSBkaWN0LmtleXMoKQorICAgICAgICBmb3IgayBpbiBkaWN0Lml0ZXJrZXlzKCk6CisgICAgICAgICAgICBrZXlzLnJlbW92ZShrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGtleXMpID09IDAsICJpdGVya2V5cygpIGRpZCBub3QgdG91Y2ggYWxsIGtleXMiKQorCisgICAgICAgICMgdmFsdWUgaXRlcmF0b3I6CisgICAgICAgIHZhbHVlcyA9IGRpY3QudmFsdWVzKCkKKyAgICAgICAgZm9yIHYgaW4gZGljdC5pdGVydmFsdWVzKCk6CisgICAgICAgICAgICB2YWx1ZXMucmVtb3ZlKHYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4odmFsdWVzKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgIml0ZXJ2YWx1ZXMoKSBkaWQgbm90IHRvdWNoIGFsbCB2YWx1ZXMiKQorCisgICAgZGVmIHRlc3RfbWFrZV93ZWFrX2tleWVkX2RpY3RfZnJvbV9kaWN0KHNlbGYpOgorICAgICAgICBvID0gT2JqZWN0KDMpCisgICAgICAgIGRpY3QgPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KHtvOjM2NH0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaWN0W29dID09IDM2NCkKKworICAgIGRlZiB0ZXN0X21ha2Vfd2Vha19rZXllZF9kaWN0X2Zyb21fd2Vha19rZXllZF9kaWN0KHNlbGYpOgorICAgICAgICBvID0gT2JqZWN0KDMpCisgICAgICAgIGRpY3QgPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KHtvOjM2NH0pCisgICAgICAgIGRpY3QyID0gd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeShkaWN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGljdFtvXSA9PSAzNjQpCisKKyAgICBkZWYgbWFrZV93ZWFrX2tleWVkX2RpY3Qoc2VsZik6CisgICAgICAgIGRpY3QgPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KCkKKyAgICAgICAgb2JqZWN0cyA9IG1hcChPYmplY3QsIHJhbmdlKHNlbGYuQ09VTlQpKQorICAgICAgICBmb3IgbyBpbiBvYmplY3RzOgorICAgICAgICAgICAgZGljdFtvXSA9IG8uYXJnCisgICAgICAgIHJldHVybiBkaWN0LCBvYmplY3RzCisKKyAgICBkZWYgbWFrZV93ZWFrX3ZhbHVlZF9kaWN0KHNlbGYpOgorICAgICAgICBkaWN0ID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KCkKKyAgICAgICAgb2JqZWN0cyA9IG1hcChPYmplY3QsIHJhbmdlKHNlbGYuQ09VTlQpKQorICAgICAgICBmb3IgbyBpbiBvYmplY3RzOgorICAgICAgICAgICAgZGljdFtvLmFyZ10gPSBvCisgICAgICAgIHJldHVybiBkaWN0LCBvYmplY3RzCisKKyAgICBkZWYgY2hlY2tfcG9waXRlbShzZWxmLCBrbGFzcywga2V5MSwgdmFsdWUxLCBrZXkyLCB2YWx1ZTIpOgorICAgICAgICB3ZWFrZGljdCA9IGtsYXNzKCkKKyAgICAgICAgd2Vha2RpY3Rba2V5MV0gPSB2YWx1ZTEKKyAgICAgICAgd2Vha2RpY3Rba2V5Ml0gPSB2YWx1ZTIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbih3ZWFrZGljdCkgPT0gMikKKyAgICAgICAgaywgdiA9IHdlYWtkaWN0LnBvcGl0ZW0oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHdlYWtkaWN0KSA9PSAxKQorICAgICAgICBpZiBrIGlzIGtleTE6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodiBpcyB2YWx1ZTEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodiBpcyB2YWx1ZTIpCisgICAgICAgIGssIHYgPSB3ZWFrZGljdC5wb3BpdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbih3ZWFrZGljdCkgPT0gMCkKKyAgICAgICAgaWYgayBpcyBrZXkxOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYgaXMgdmFsdWUxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYgaXMgdmFsdWUyKQorCisgICAgZGVmIHRlc3Rfd2Vha192YWx1ZWRfZGljdF9wb3BpdGVtKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3BvcGl0ZW0od2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleTEiLCBDKCksICJrZXkyIiwgQygpKQorCisgICAgZGVmIHRlc3Rfd2Vha19rZXllZF9kaWN0X3BvcGl0ZW0oc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcG9waXRlbSh3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQygpLCAidmFsdWUgMSIsIEMoKSwgInZhbHVlIDIiKQorCisgICAgZGVmIGNoZWNrX3NldGRlZmF1bHQoc2VsZiwga2xhc3MsIGtleSwgdmFsdWUxLCB2YWx1ZTIpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsdWUxIGlzIG5vdCB2YWx1ZTIsCisgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCB0ZXN0IgorICAgICAgICAgICAgICAgICAgICAgIiAtLSB2YWx1ZSBwYXJhbWV0ZXJzIG11c3QgYmUgZGlzdGluY3Qgb2JqZWN0cyIpCisgICAgICAgIHdlYWtkaWN0ID0ga2xhc3MoKQorICAgICAgICBvID0gd2Vha2RpY3Quc2V0ZGVmYXVsdChrZXksIHZhbHVlMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvLCB2YWx1ZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCB3ZWFrZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3ZWFrZGljdC5nZXQoa2V5KSwgdmFsdWUxKQorICAgICAgICBzZWxmLmFzc2VydElzKHdlYWtkaWN0W2tleV0sIHZhbHVlMSkKKworICAgICAgICBvID0gd2Vha2RpY3Quc2V0ZGVmYXVsdChrZXksIHZhbHVlMikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvLCB2YWx1ZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCB3ZWFrZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3ZWFrZGljdC5nZXQoa2V5KSwgdmFsdWUxKQorICAgICAgICBzZWxmLmFzc2VydElzKHdlYWtkaWN0W2tleV0sIHZhbHVlMSkKKworICAgIGRlZiB0ZXN0X3dlYWtfdmFsdWVkX2RpY3Rfc2V0ZGVmYXVsdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zZXRkZWZhdWx0KHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXkiLCBDKCksIEMoKSkKKworICAgIGRlZiB0ZXN0X3dlYWtfa2V5ZWRfZGljdF9zZXRkZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3NldGRlZmF1bHQod2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMoKSwgInZhbHVlIDEiLCAidmFsdWUgMiIpCisKKyAgICBkZWYgY2hlY2tfdXBkYXRlKHNlbGYsIGtsYXNzLCBkaWN0KToKKyAgICAgICAgIworICAgICAgICAjICBUaGlzIGV4ZXJjaXNlcyBkLnVwZGF0ZSgpLCBsZW4oZCksIGQua2V5cygpLCBpbiBkLAorICAgICAgICAjICBkLmdldCgpLCBkW10uCisgICAgICAgICMKKyAgICAgICAgd2Vha2RpY3QgPSBrbGFzcygpCisgICAgICAgIHdlYWtkaWN0LnVwZGF0ZShkaWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3ZWFrZGljdCksIGxlbihkaWN0KSkKKyAgICAgICAgZm9yIGsgaW4gd2Vha2RpY3Qua2V5cygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBkaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICJteXN0ZXJpb3VzIG5ldyBrZXkgYXBwZWFyZWQgaW4gd2VhayBkaWN0IikKKyAgICAgICAgICAgIHYgPSBkaWN0LmdldChrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh2LCB3ZWFrZGljdFtrXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModiwgd2Vha2RpY3QuZ2V0KGspKQorICAgICAgICBmb3IgayBpbiBkaWN0LmtleXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgd2Vha2RpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9yaWdpbmFsIGtleSBkaXNhcHBlYXJlZCBpbiB3ZWFrIGRpY3QiKQorICAgICAgICAgICAgdiA9IGRpY3Rba10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModiwgd2Vha2RpY3Rba10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHYsIHdlYWtkaWN0LmdldChrKSkKKworICAgIGRlZiB0ZXN0X3dlYWtfdmFsdWVkX2RpY3RfdXBkYXRlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3VwZGF0ZSh3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsxOiBDKCksICdhJzogQygpLCBDKCk6IEMoKX0pCisKKyAgICBkZWYgdGVzdF93ZWFrX2tleWVkX2RpY3RfdXBkYXRlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3VwZGF0ZSh3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7QygpOiAxLCBDKCk6IDIsIEMoKTogM30pCisKKyAgICBkZWYgdGVzdF93ZWFrX2tleWVkX2RlbGl0ZW0oc2VsZik6CisgICAgICAgIGQgPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KCkKKyAgICAgICAgbzEgPSBPYmplY3QoJzEnKQorICAgICAgICBvMiA9IE9iamVjdCgnMicpCisgICAgICAgIGRbbzFdID0gJ3NvbWV0aGluZycKKyAgICAgICAgZFtvMl0gPSAnc29tZXRoaW5nJworICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGQpID09IDIpCisgICAgICAgIGRlbCBkW28xXQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGQpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmtleXMoKSA9PSBbbzJdKQorCisgICAgZGVmIHRlc3Rfd2Vha192YWx1ZWRfZGVsaXRlbShzZWxmKToKKyAgICAgICAgZCA9IHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSgpCisgICAgICAgIG8xID0gT2JqZWN0KCcxJykKKyAgICAgICAgbzIgPSBPYmplY3QoJzInKQorICAgICAgICBkWydzb21ldGhpbmcnXSA9IG8xCisgICAgICAgIGRbJ3NvbWV0aGluZyBlbHNlJ10gPSBvMgorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGQpID09IDIpCisgICAgICAgIGRlbCBkWydzb21ldGhpbmcnXQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGQpID09IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLml0ZW1zKCkgPT0gWygnc29tZXRoaW5nIGVsc2UnLCBvMildKQorCisgICAgZGVmIHRlc3Rfd2Vha19rZXllZF9iYWRfZGVsaXRlbShzZWxmKToKKyAgICAgICAgZCA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoKQorICAgICAgICBvID0gT2JqZWN0KCcxJykKKyAgICAgICAgIyBBbiBhdHRlbXB0IHRvIGRlbGV0ZSBhbiBvYmplY3QgdGhhdCBpc24ndCB0aGVyZSBzaG91bGQgcmFpc2UKKyAgICAgICAgIyBLZXlFcnJvci4gIEl0IGRpZG4ndCBiZWZvcmUgMi4zLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5fX2RlbGl0ZW1fXywgbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQuX19nZXRpdGVtX18sIG8pCisKKyAgICAgICAgIyBJZiBhIGtleSBpc24ndCBvZiBhIHdlYWtseSByZWZlcmVuY2FibGUgdHlwZSwgX19nZXRpdGVtX18gYW5kCisgICAgICAgICMgX19zZXRpdGVtX18gcmFpc2UgVHlwZUVycm9yLiAgX19kZWxpdGVtX18gc2hvdWxkIHRvby4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLl9fZGVsaXRlbV9fLCAgMTMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5fX2dldGl0ZW1fXywgIDEzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuX19zZXRpdGVtX18sICAxMywgMTMpCisKKyAgICBkZWYgdGVzdF93ZWFrX2tleWVkX2Nhc2NhZGluZ19kZWxldGVzKHNlbGYpOgorICAgICAgICAjIFNGIGJ1ZyA3NDI4NjAuICBGb3Igc29tZSByZWFzb24sIGJlZm9yZSAyLjMgX19kZWxpdGVtX18gaXRlcmF0ZWQKKyAgICAgICAgIyBvdmVyIHRoZSBrZXlzIHZpYSBzZWxmLmRhdGEuaXRlcmtleXMoKS4gIElmIHRoaW5ncyB2YW5pc2hlZCBmcm9tCisgICAgICAgICMgdGhlIGRpY3QgZHVyaW5nIHRoaXMgKG9yIGdvdCBhZGRlZCksIHRoYXQgY2F1c2VkIGEgUnVudGltZUVycm9yLgorCisgICAgICAgIGQgPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KCkKKyAgICAgICAgbXV0YXRlID0gRmFsc2UKKworICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IGkKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaGFzaChzZWxmLnZhbHVlKQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgbXV0YXRlOgorICAgICAgICAgICAgICAgICAgICAjIFNpZGUgZWZmZWN0IHRoYXQgbXV0YXRlcyB0aGUgZGljdCwgYnkgcmVtb3ZpbmcgdGhlCisgICAgICAgICAgICAgICAgICAgICMgbGFzdCBzdHJvbmcgcmVmZXJlbmNlIHRvIGEga2V5LgorICAgICAgICAgICAgICAgICAgICBkZWwgb2Jqc1stMV0KKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorCisgICAgICAgIG9ianMgPSBbQyhpKSBmb3IgaSBpbiByYW5nZSg0KV0KKyAgICAgICAgZm9yIG8gaW4gb2JqczoKKyAgICAgICAgICAgIGRbb10gPSBvLnZhbHVlCisgICAgICAgIGRlbCBvICAgIyBub3cgdGhlIG9ubHkgc3Ryb25nIHJlZmVyZW5jZXMgdG8ga2V5cyBhcmUgaW4gb2JqcworICAgICAgICAjIEZpbmQgdGhlIG9yZGVyIGluIHdoaWNoIGl0ZXJrZXlzIHNlZXMgdGhlIGtleXMuCisgICAgICAgIG9ianMgPSBkLmtleXMoKQorICAgICAgICAjIFJldmVyc2UgaXQsIHNvIHRoYXQgdGhlIGl0ZXJhdGlvbiBpbXBsZW1lbnRhdGlvbiBvZiBfX2RlbGl0ZW1fXworICAgICAgICAjIGhhcyB0byBrZWVwIGxvb3BpbmcgdG8gZmluZCB0aGUgZmlyc3Qgb2JqZWN0IHdlIGRlbGV0ZS4KKyAgICAgICAgb2Jqcy5yZXZlcnNlKCkKKworICAgICAgICAjIFR1cm4gb24gbXV0YXRpb24gaW4gQy5fX2VxX18uICBUaGUgZmlyc3QgdGltZSB0aHJ1IHRoZSBsb29wLAorICAgICAgICAjIHVuZGVyIHRoZSBpdGVya2V5cygpIGJ1c2luZXNzIHRoZSBmaXJzdCBjb21wYXJpc29uIHdpbGwgZGVsZXRlCisgICAgICAgICMgdGhlIGxhc3QgaXRlbSBpdGVya2V5cygpIHdvdWxkIHNlZSwgYW5kIHRoYXQgY2F1c2VzIGEKKyAgICAgICAgIyAgICAgUnVudGltZUVycm9yOiBkaWN0aW9uYXJ5IGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uCisgICAgICAgICMgd2hlbiB0aGUgaXRlcmtleXMoKSBsb29wIGdvZXMgYXJvdW5kIHRvIHRyeSBjb21wYXJpbmcgdGhlIG5leHQKKyAgICAgICAgIyBrZXkuICBBZnRlciB0aGlzIHdhcyBmaXhlZCwgaXQganVzdCBkZWxldGVzIHRoZSBsYXN0IG9iamVjdCAqb3VyKgorICAgICAgICAjICJmb3IgbyBpbiBvYmoiIGxvb3Agd291bGQgaGF2ZSBnb3R0ZW4gdG8uCisgICAgICAgIG11dGF0ZSA9IFRydWUKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGZvciBvIGluIG9ianM6CisgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICBkZWwgZFtvXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgMikKKworZnJvbSB0ZXN0IGltcG9ydCBtYXBwaW5nX3Rlc3RzCisKK2NsYXNzIFdlYWtWYWx1ZURpY3Rpb25hcnlUZXN0Q2FzZShtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6CisgICAgIiIiQ2hlY2sgdGhhdCBXZWFrVmFsdWVEaWN0aW9uYXJ5IGNvbmZvcm1zIHRvIHRoZSBtYXBwaW5nIHByb3RvY29sIiIiCisgICAgX19yZWYgPSB7ImtleTEiOk9iamVjdCgxKSwgImtleTIiOk9iamVjdCgyKSwgImtleTMiOk9iamVjdCgzKX0KKyAgICB0eXBlMnRlc3QgPSB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkKKyAgICBkZWYgX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19yZWYuY29weSgpCisKK2NsYXNzIFdlYWtLZXlEaWN0aW9uYXJ5VGVzdENhc2UobWFwcGluZ190ZXN0cy5CYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wpOgorICAgICIiIkNoZWNrIHRoYXQgV2Vha0tleURpY3Rpb25hcnkgY29uZm9ybXMgdG8gdGhlIG1hcHBpbmcgcHJvdG9jb2wiIiIKKyAgICBfX3JlZiA9IHtPYmplY3QoImtleTEiKToxLCBPYmplY3QoImtleTIiKToyLCBPYmplY3QoImtleTMiKTozfQorICAgIHR5cGUydGVzdCA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkKKyAgICBkZWYgX3JlZmVyZW5jZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19yZWYuY29weSgpCisKK2xpYnJlZnRlc3QgPSAiIiIgRG9jdGVzdCBmb3IgZXhhbXBsZXMgaW4gdGhlIGxpYnJhcnkgcmVmZXJlbmNlOiB3ZWFrcmVmLnJzdAorCis+Pj4gaW1wb3J0IHdlYWtyZWYKKz4+PiBjbGFzcyBEaWN0KGRpY3QpOgorLi4uICAgICBwYXNzCisuLi4KKz4+PiBvYmogPSBEaWN0KHJlZD0xLCBncmVlbj0yLCBibHVlPTMpICAgIyB0aGlzIG9iamVjdCBpcyB3ZWFrIHJlZmVyZW5jYWJsZQorPj4+IHIgPSB3ZWFrcmVmLnJlZihvYmopCis+Pj4gcHJpbnQgcigpIGlzIG9iagorVHJ1ZQorCis+Pj4gaW1wb3J0IHdlYWtyZWYKKz4+PiBjbGFzcyBPYmplY3Q6CisuLi4gICAgIHBhc3MKKy4uLgorPj4+IG8gPSBPYmplY3QoKQorPj4+IHIgPSB3ZWFrcmVmLnJlZihvKQorPj4+IG8yID0gcigpCis+Pj4gbyBpcyBvMgorVHJ1ZQorPj4+IGRlbCBvLCBvMgorPj4+IHByaW50IHIoKQorTm9uZQorCis+Pj4gaW1wb3J0IHdlYWtyZWYKKz4+PiBjbGFzcyBFeHRlbmRlZFJlZih3ZWFrcmVmLnJlZik6CisuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYiwgY2FsbGJhY2s9Tm9uZSwgKiphbm5vdGF0aW9ucyk6CisuLi4gICAgICAgICBzdXBlcihFeHRlbmRlZFJlZiwgc2VsZikuX19pbml0X18ob2IsIGNhbGxiYWNrKQorLi4uICAgICAgICAgc2VsZi5fX2NvdW50ZXIgPSAwCisuLi4gICAgICAgICBmb3IgaywgdiBpbiBhbm5vdGF0aW9ucy5pdGVyaXRlbXMoKToKKy4uLiAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGssIHYpCisuLi4gICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKy4uLiAgICAgICAgICcnJ1JldHVybiBhIHBhaXIgY29udGFpbmluZyB0aGUgcmVmZXJlbnQgYW5kIHRoZSBudW1iZXIgb2YKKy4uLiAgICAgICAgIHRpbWVzIHRoZSByZWZlcmVuY2UgaGFzIGJlZW4gY2FsbGVkLgorLi4uICAgICAgICAgJycnCisuLi4gICAgICAgICBvYiA9IHN1cGVyKEV4dGVuZGVkUmVmLCBzZWxmKS5fX2NhbGxfXygpCisuLi4gICAgICAgICBpZiBvYiBpcyBub3QgTm9uZToKKy4uLiAgICAgICAgICAgICBzZWxmLl9fY291bnRlciArPSAxCisuLi4gICAgICAgICAgICAgb2IgPSAob2IsIHNlbGYuX19jb3VudGVyKQorLi4uICAgICAgICAgcmV0dXJuIG9iCisuLi4KKz4+PiBjbGFzcyBBOiAgICMgbm90IGluIGRvY3MgZnJvbSBoZXJlLCBqdXN0IHRlc3RpbmcgdGhlIEV4dGVuZGVkUmVmCisuLi4gICAgIHBhc3MKKy4uLgorPj4+IGEgPSBBKCkKKz4+PiByID0gRXh0ZW5kZWRSZWYoYSwgZm9vPTEsIGJhcj0iYmF6IikKKz4+PiByLmZvbworMQorPj4+IHIuYmFyCisnYmF6JworPj4+IHIoKVsxXQorMQorPj4+IHIoKVsxXQorMgorPj4+IHIoKVswXSBpcyBhCitUcnVlCisKKworPj4+IGltcG9ydCB3ZWFrcmVmCis+Pj4gX2lkMm9ial9kaWN0ID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KCkKKz4+PiBkZWYgcmVtZW1iZXIob2JqKToKKy4uLiAgICAgb2lkID0gaWQob2JqKQorLi4uICAgICBfaWQyb2JqX2RpY3Rbb2lkXSA9IG9iagorLi4uICAgICByZXR1cm4gb2lkCisuLi4KKz4+PiBkZWYgaWQyb2JqKG9pZCk6CisuLi4gICAgIHJldHVybiBfaWQyb2JqX2RpY3Rbb2lkXQorLi4uCis+Pj4gYSA9IEEoKSAgICAgICAgICAgICAjIGZyb20gaGVyZSwganVzdCB0ZXN0aW5nCis+Pj4gYV9pZCA9IHJlbWVtYmVyKGEpCis+Pj4gaWQyb2JqKGFfaWQpIGlzIGEKK1RydWUKKz4+PiBkZWwgYQorPj4+IHRyeToKKy4uLiAgICAgaWQyb2JqKGFfaWQpCisuLi4gZXhjZXB0IEtleUVycm9yOgorLi4uICAgICBwcmludCAnT0snCisuLi4gZWxzZToKKy4uLiAgICAgcHJpbnQgJ1dlYWtWYWx1ZURpY3Rpb25hcnkgZXJyb3InCitPSworCisiIiIKKworX190ZXN0X18gPSB7J2xpYnJlZnRlc3QnIDogbGlicmVmdGVzdH0KKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIFJlZmVyZW5jZXNUZXN0Q2FzZSwKKyAgICAgICAgTWFwcGluZ1Rlc3RDYXNlLAorICAgICAgICBXZWFrVmFsdWVEaWN0aW9uYXJ5VGVzdENhc2UsCisgICAgICAgIFdlYWtLZXlEaWN0aW9uYXJ5VGVzdENhc2UsCisgICAgICAgIFN1YmNsYXNzYWJsZVdlYWtyZWZUZXN0Q2FzZSwKKyAgICAgICAgKQorICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdChzeXMubW9kdWxlc1tfX25hbWVfX10pCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfd2Vha3NldC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dlYWtzZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllMDkxZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dlYWtzZXQucHkKQEAgLTAsMCArMSw0NTAgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKK2Zyb20gd2Vha3JlZiBpbXBvcnQgcHJveHksIHJlZiwgV2Vha1NldAoraW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgY29weQoraW1wb3J0IHN0cmluZworaW1wb3J0IG9zCitmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZHJhbmdlLCBzaHVmZmxlCitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGdjCitpbXBvcnQgY29udGV4dGxpYgorCisKK2NsYXNzIEZvbzoKKyAgICBwYXNzCisKK2NsYXNzIFNvbWVDbGFzcyhvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiB0eXBlKG90aGVyKSAhPSB0eXBlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBvdGhlci52YWx1ZSA9PSBzZWxmLnZhbHVlCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9fZXFfXyhvdGhlcikKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goKFNvbWVDbGFzcywgc2VsZi52YWx1ZSkpCisKK2NsYXNzIFJlZkN5Y2xlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmN5Y2xlID0gc2VsZgorCitjbGFzcyBUZXN0V2Vha1NldCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgbmVlZCB0byBrZWVwIHJlZmVyZW5jZXMgdG8gdGhlbQorICAgICAgICBzZWxmLml0ZW1zID0gW1NvbWVDbGFzcyhjKSBmb3IgYyBpbiAoJ2EnLCAnYicsICdjJyldCisgICAgICAgIHNlbGYuaXRlbXMyID0gW1NvbWVDbGFzcyhjKSBmb3IgYyBpbiAoJ3gnLCAneScsICd6JyldCisgICAgICAgIHNlbGYubGV0dGVycyA9IFtTb21lQ2xhc3MoYykgZm9yIGMgaW4gc3RyaW5nLmFzY2lpX2xldHRlcnNdCisgICAgICAgIHNlbGYuYWJfaXRlbXMgPSBbU29tZUNsYXNzKGMpIGZvciBjIGluICdhYiddCisgICAgICAgIHNlbGYuYWJjZGVfaXRlbXMgPSBbU29tZUNsYXNzKGMpIGZvciBjIGluICdhYmNkZSddCisgICAgICAgIHNlbGYuZGVmX2l0ZW1zID0gW1NvbWVDbGFzcyhjKSBmb3IgYyBpbiAnZGVmJ10KKyAgICAgICAgc2VsZi5hYl93ZWFrc2V0ID0gV2Vha1NldChzZWxmLmFiX2l0ZW1zKQorICAgICAgICBzZWxmLmFiY2RlX3dlYWtzZXQgPSBXZWFrU2V0KHNlbGYuYWJjZGVfaXRlbXMpCisgICAgICAgIHNlbGYuZGVmX3dlYWtzZXQgPSBXZWFrU2V0KHNlbGYuZGVmX2l0ZW1zKQorICAgICAgICBzZWxmLnMgPSBXZWFrU2V0KHNlbGYuaXRlbXMpCisgICAgICAgIHNlbGYuZCA9IGRpY3QuZnJvbWtleXMoc2VsZi5pdGVtcykKKyAgICAgICAgc2VsZi5vYmogPSBTb21lQ2xhc3MoJ0YnKQorICAgICAgICBzZWxmLmZzID0gV2Vha1NldChbc2VsZi5vYmpdKQorCisgICAgZGVmIHRlc3RfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgd2Vha3NldG1ldGhvZHMgPSBkaXIoV2Vha1NldCkKKyAgICAgICAgZm9yIG1ldGhvZCBpbiBkaXIoc2V0KToKKyAgICAgICAgICAgIGlmIG1ldGhvZCA9PSAndGVzdF9jX2FwaScgb3IgbWV0aG9kLnN0YXJ0c3dpdGgoJ18nKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihtZXRob2QsIHdlYWtzZXRtZXRob2RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICJXZWFrU2V0IG1pc3NpbmcgbWV0aG9kICIgKyBtZXRob2QpCisKKyAgICBkZWYgdGVzdF9uZXdfb3JfaW5pdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBXZWFrU2V0LCBbXSwgMikKKworICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zKSwgbGVuKHNlbGYuZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuZnMpLCAxKQorICAgICAgICBkZWwgc2VsZi5vYmoKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5mcyksIDApCisKKyAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5sZXR0ZXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjIGluIHNlbGYucywgYyBpbiBzZWxmLmQpCisgICAgICAgICMgMSBpcyBub3Qgd2Vha3JlZidhYmxlLCBidXQgdGhhdCBUeXBlRXJyb3IgaXMgY2F1Z2h0IGJ5IF9fY29udGFpbnNfXworICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm9iaiwgc2VsZi5mcykKKyAgICAgICAgZGVsIHNlbGYub2JqCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oU29tZUNsYXNzKCdGJyksIHNlbGYuZnMpCisKKyAgICBkZWYgdGVzdF91bmlvbihzZWxmKToKKyAgICAgICAgdSA9IHNlbGYucy51bmlvbihzZWxmLml0ZW1zMikKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5sZXR0ZXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjIGluIHUsIGMgaW4gc2VsZi5kIG9yIGMgaW4gc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBXZWFrU2V0KHNlbGYuaXRlbXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodSksIFdlYWtTZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnVuaW9uLCBbW11dKQorICAgICAgICBmb3IgQyBpbiBzZXQsIGZyb3plbnNldCwgZGljdC5mcm9ta2V5cywgbGlzdCwgdHVwbGU6CisgICAgICAgICAgICB4ID0gV2Vha1NldChzZWxmLml0ZW1zICsgc2VsZi5pdGVtczIpCisgICAgICAgICAgICBjID0gQyhzZWxmLml0ZW1zMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLnVuaW9uKGMpLCB4KQorICAgICAgICAgICAgZGVsIGMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odSksIGxlbihzZWxmLml0ZW1zKSArIGxlbihzZWxmLml0ZW1zMikpCisgICAgICAgIHNlbGYuaXRlbXMyLnBvcCgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih1KSwgbGVuKHNlbGYuaXRlbXMpICsgbGVuKHNlbGYuaXRlbXMyKSkKKworICAgIGRlZiB0ZXN0X29yKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5zLnVuaW9uKHNlbGYuaXRlbXMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyB8IHNldChzZWxmLml0ZW1zMiksIGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zIHwgZnJvemVuc2V0KHNlbGYuaXRlbXMyKSwgaSkKKworICAgIGRlZiB0ZXN0X2ludGVyc2VjdGlvbihzZWxmKToKKyAgICAgICAgcyA9IFdlYWtTZXQoc2VsZi5sZXR0ZXJzKQorICAgICAgICBpID0gcy5pbnRlcnNlY3Rpb24oc2VsZi5pdGVtczIpCisgICAgICAgIGZvciBjIGluIHNlbGYubGV0dGVyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYyBpbiBpLCBjIGluIHNlbGYuaXRlbXMyIGFuZCBjIGluIHNlbGYubGV0dGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBXZWFrU2V0KHNlbGYubGV0dGVycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpKSwgV2Vha1NldCkKKyAgICAgICAgZm9yIEMgaW4gc2V0LCBmcm96ZW5zZXQsIGRpY3QuZnJvbWtleXMsIGxpc3QsIHR1cGxlOgorICAgICAgICAgICAgeCA9IFdlYWtTZXQoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkuaW50ZXJzZWN0aW9uKEMoc2VsZi5pdGVtcykpLCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpKSwgbGVuKHNlbGYuaXRlbXMyKSkKKyAgICAgICAgc2VsZi5pdGVtczIucG9wKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGkpLCBsZW4oc2VsZi5pdGVtczIpKQorCisgICAgZGVmIHRlc3RfaXNkaXNqb2ludChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucy5pc2Rpc2pvaW50KFdlYWtTZXQoc2VsZi5pdGVtczIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBzZWxmLnMuaXNkaXNqb2ludChXZWFrU2V0KHNlbGYubGV0dGVycykpKQorCisgICAgZGVmIHRlc3RfYW5kKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5zLmludGVyc2VjdGlvbihzZWxmLml0ZW1zMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgJiBzZXQoc2VsZi5pdGVtczIpLCBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyAmIGZyb3plbnNldChzZWxmLml0ZW1zMiksIGkpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbmNlKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5zLmRpZmZlcmVuY2Uoc2VsZi5pdGVtczIpCisgICAgICAgIGZvciBjIGluIHNlbGYubGV0dGVyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYyBpbiBpLCBjIGluIHNlbGYuZCBhbmQgYyBub3QgaW4gc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBXZWFrU2V0KHNlbGYuaXRlbXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaSksIFdlYWtTZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLmRpZmZlcmVuY2UsIFtbXV0pCisKKyAgICBkZWYgdGVzdF9zdWIoc2VsZik6CisgICAgICAgIGkgPSBzZWxmLnMuZGlmZmVyZW5jZShzZWxmLml0ZW1zMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMgLSBzZXQoc2VsZi5pdGVtczIpLCBpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyAtIGZyb3plbnNldChzZWxmLml0ZW1zMiksIGkpCisKKyAgICBkZWYgdGVzdF9zeW1tZXRyaWNfZGlmZmVyZW5jZShzZWxmKToKKyAgICAgICAgaSA9IHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZShzZWxmLml0ZW1zMikKKyAgICAgICAgZm9yIGMgaW4gc2VsZi5sZXR0ZXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjIGluIGksIChjIGluIHNlbGYuZCkgXiAoYyBpbiBzZWxmLml0ZW1zMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBXZWFrU2V0KHNlbGYuaXRlbXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaSksIFdlYWtTZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlLCBbW11dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpKSwgbGVuKHNlbGYuaXRlbXMpICsgbGVuKHNlbGYuaXRlbXMyKSkKKyAgICAgICAgc2VsZi5pdGVtczIucG9wKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGkpLCBsZW4oc2VsZi5pdGVtcykgKyBsZW4oc2VsZi5pdGVtczIpKQorCisgICAgZGVmIHRlc3RfeG9yKHNlbGYpOgorICAgICAgICBpID0gc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlKHNlbGYuaXRlbXMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucyBeIHNldChzZWxmLml0ZW1zMiksIGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zIF4gZnJvemVuc2V0KHNlbGYuaXRlbXMyKSwgaSkKKworICAgIGRlZiB0ZXN0X3N1Yl9hbmRfc3VwZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmFiX3dlYWtzZXQgPD0gc2VsZi5hYmNkZV93ZWFrc2V0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5hYmNkZV93ZWFrc2V0IDw9IHNlbGYuYWJjZGVfd2Vha3NldCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuYWJjZGVfd2Vha3NldCA+PSBzZWxmLmFiX3dlYWtzZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5hYmNkZV93ZWFrc2V0IDw9IHNlbGYuZGVmX3dlYWtzZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5hYmNkZV93ZWFrc2V0ID49IHNlbGYuZGVmX3dlYWtzZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXQoJ2EnKS5pc3N1YnNldCgnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXQoJ2FiYycpLmlzc3VwZXJzZXQoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXQoJ2EnKS5pc3N1YnNldCgnY2JzJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2V0KCdjYnMnKS5pc3N1cGVyc2V0KCdhJykpCisKKyAgICBkZWYgdGVzdF9sdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuYWJfd2Vha3NldCA8IHNlbGYuYWJjZGVfd2Vha3NldCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmFiY2RlX3dlYWtzZXQgPCBzZWxmLmRlZl93ZWFrc2V0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuYWJfd2Vha3NldCA8IHNlbGYuYWJfd2Vha3NldCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShXZWFrU2V0KCkgPCBXZWFrU2V0KCkpCisKKyAgICBkZWYgdGVzdF9ndChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuYWJjZGVfd2Vha3NldCA+IHNlbGYuYWJfd2Vha3NldCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmFiY2RlX3dlYWtzZXQgPiBzZWxmLmRlZl93ZWFrc2V0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuYWJfd2Vha3NldCA+IHNlbGYuYWJfd2Vha3NldCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShXZWFrU2V0KCkgPiBXZWFrU2V0KCkpCisKKyAgICBkZWYgdGVzdF9nYyhzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgYSBuZXN0IG9mIGN5Y2xlcyB0byBleGVyY2lzZSBvdmVyYWxsIHJlZiBjb3VudCBjaGVjaworICAgICAgICBzID0gV2Vha1NldChGb28oKSBmb3IgaSBpbiByYW5nZSgxMDAwKSkKKyAgICAgICAgZm9yIGVsZW0gaW4gczoKKyAgICAgICAgICAgIGVsZW0uY3ljbGUgPSBzCisgICAgICAgICAgICBlbGVtLnN1YiA9IGVsZW0KKyAgICAgICAgICAgIGVsZW0uc2V0ID0gV2Vha1NldChbZWxlbV0pCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc193aXRoX2N1c3RvbV9oYXNoKHNlbGYpOgorICAgICAgICAjIEJ1ZyAjMTI1NzczMQorICAgICAgICBjbGFzcyBIKFdlYWtTZXQpOgorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQoaWQoc2VsZikgJiAweDdmZmZmZmZmKQorICAgICAgICBzPUgoKQorICAgICAgICBmPXNldCgpCisgICAgICAgIGYuYWRkKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocywgZikKKyAgICAgICAgZi5yZW1vdmUocykKKyAgICAgICAgZi5hZGQocykKKyAgICAgICAgZi5kaXNjYXJkKHMpCisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICBzID0gV2Vha1NldCgpCisgICAgICAgIHMuX19pbml0X18oc2VsZi5pdGVtcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZWxmLnMpCisgICAgICAgIHMuX19pbml0X18oc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgV2Vha1NldChzZWxmLml0ZW1zMikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcy5fX2luaXRfXywgcywgMik7CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcy5fX2luaXRfXywgMSk7CisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9pZGVudGl0eShzZWxmKToKKyAgICAgICAgcyA9IFdlYWtTZXQoc2VsZi5pdGVtcykKKyAgICAgICAgdCA9IFdlYWtTZXQocykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzKSwgaWQodCkpCisKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIHNlbGYucykKKworICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgorICAgICAgICBzZWxmLnMuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucywgV2Vha1NldChbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYucyksIDApCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBkdXAgPSBzZWxmLnMuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBkdXApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoc2VsZi5zKSwgaWQoZHVwKSkKKworICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgeCA9IFNvbWVDbGFzcygnUScpCisgICAgICAgIHNlbGYucy5hZGQoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih4LCBzZWxmLnMpCisgICAgICAgIGR1cCA9IHNlbGYucy5jb3B5KCkKKyAgICAgICAgc2VsZi5zLmFkZCh4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucywgZHVwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5hZGQsIFtdKQorICAgICAgICBzZWxmLmZzLmFkZChGb28oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLmZzKSA9PSAxKQorICAgICAgICBzZWxmLmZzLmFkZChzZWxmLm9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihzZWxmLmZzKSA9PSAxKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgorICAgICAgICB4ID0gU29tZUNsYXNzKCdhJykKKyAgICAgICAgc2VsZi5zLnJlbW92ZSh4KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHgsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHNlbGYucy5yZW1vdmUsIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnJlbW92ZSwgW10pCisKKyAgICBkZWYgdGVzdF9kaXNjYXJkKHNlbGYpOgorICAgICAgICBhLCBxID0gU29tZUNsYXNzKCdhJyksIFNvbWVDbGFzcygnUScpCisgICAgICAgIHNlbGYucy5kaXNjYXJkKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYSwgc2VsZi5zKQorICAgICAgICBzZWxmLnMuZGlzY2FyZChxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5kaXNjYXJkLCBbXSkKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYucykpOgorICAgICAgICAgICAgZWxlbSA9IHNlbGYucy5wb3AoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBzZWxmLnMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLnMucG9wKQorCisgICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgorICAgICAgICByZXR2YWwgPSBzZWxmLnMudXBkYXRlKHNlbGYuaXRlbXMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHZhbCwgTm9uZSkKKyAgICAgICAgZm9yIGMgaW4gKHNlbGYuaXRlbXMgKyBzZWxmLml0ZW1zMik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMudXBkYXRlLCBbW11dKQorCisgICAgZGVmIHRlc3RfdXBkYXRlX3NldChzZWxmKToKKyAgICAgICAgc2VsZi5zLnVwZGF0ZShzZXQoc2VsZi5pdGVtczIpKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorCisgICAgZGVmIHRlc3RfaW9yKHNlbGYpOgorICAgICAgICBzZWxmLnMgfD0gc2V0KHNlbGYuaXRlbXMyKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorCisgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX3VwZGF0ZShzZWxmKToKKyAgICAgICAgcmV0dmFsID0gc2VsZi5zLmludGVyc2VjdGlvbl91cGRhdGUoc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIGlmIGMgaW4gc2VsZi5pdGVtczIgYW5kIGMgaW4gc2VsZi5pdGVtczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLmludGVyc2VjdGlvbl91cGRhdGUsIFtbXV0pCisKKyAgICBkZWYgdGVzdF9pYW5kKHNlbGYpOgorICAgICAgICBzZWxmLnMgJj0gc2V0KHNlbGYuaXRlbXMyKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIGlmIGMgaW4gc2VsZi5pdGVtczIgYW5kIGMgaW4gc2VsZi5pdGVtczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbmNlX3VwZGF0ZShzZWxmKToKKyAgICAgICAgcmV0dmFsID0gc2VsZi5zLmRpZmZlcmVuY2VfdXBkYXRlKHNlbGYuaXRlbXMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHZhbCwgTm9uZSkKKyAgICAgICAgZm9yIGMgaW4gKHNlbGYuaXRlbXMgKyBzZWxmLml0ZW1zMik6CisgICAgICAgICAgICBpZiBjIGluIHNlbGYuaXRlbXMgYW5kIGMgbm90IGluIHNlbGYuaXRlbXMyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuZGlmZmVyZW5jZV91cGRhdGUsIFtbXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZSwgW1tdXSkKKworICAgIGRlZiB0ZXN0X2lzdWIoc2VsZik6CisgICAgICAgIHNlbGYucyAtPSBzZXQoc2VsZi5pdGVtczIpCisgICAgICAgIGZvciBjIGluIChzZWxmLml0ZW1zICsgc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgaWYgYyBpbiBzZWxmLml0ZW1zIGFuZCBjIG5vdCBpbiBzZWxmLml0ZW1zMjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCisKKyAgICBkZWYgdGVzdF9zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUoc2VsZik6CisgICAgICAgIHJldHZhbCA9IHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUoc2VsZi5pdGVtczIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQorICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgIGlmIChjIGluIHNlbGYuaXRlbXMpIF4gKGMgaW4gc2VsZi5pdGVtczIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuc3ltbWV0cmljX2RpZmZlcmVuY2VfdXBkYXRlLCBbW11dKQorCisgICAgZGVmIHRlc3RfaXhvcihzZWxmKToKKyAgICAgICAgc2VsZi5zIF49IHNldChzZWxmLml0ZW1zMikKKyAgICAgICAgZm9yIGMgaW4gKHNlbGYuaXRlbXMgKyBzZWxmLml0ZW1zMik6CisgICAgICAgICAgICBpZiAoYyBpbiBzZWxmLml0ZW1zKSBeIChjIGluIHNlbGYuaXRlbXMyKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCisKKyAgICBkZWYgdGVzdF9pbnBsYWNlX29uX3NlbGYoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLnMuY29weSgpCisgICAgICAgIHQgfD0gdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHNlbGYucykKKyAgICAgICAgdCAmPSB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgc2VsZi5zKQorICAgICAgICB0IC09IHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBXZWFrU2V0KCkpCisgICAgICAgIHQgPSBzZWxmLnMuY29weSgpCisgICAgICAgIHQgXj0gdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIFdlYWtTZXQoKSkKKworICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAgICAjIGlzc3VlIDU5NjQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucyA9PSBzZWxmLnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnMgPT0gV2Vha1NldChzZWxmLml0ZW1zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnMgPT0gc2V0KHNlbGYuaXRlbXMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucyA9PSBsaXN0KHNlbGYuaXRlbXMpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucyA9PSB0dXBsZShzZWxmLml0ZW1zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnMgPT0gMSkKKworICAgIGRlZiB0ZXN0X3dlYWtfZGVzdHJveV93aGlsZV9pdGVyYXRpbmcoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzcxMDU6IGl0ZXJhdG9ycyBzaG91bGRuJ3QgY3Jhc2ggd2hlbiBhIGtleSBpcyBpbXBsaWNpdGx5IHJlbW92ZWQKKyAgICAgICAgIyBDcmVhdGUgbmV3IGl0ZW1zIHRvIGJlIHN1cmUgbm8tb25lIGVsc2UgaG9sZHMgYSByZWZlcmVuY2UKKyAgICAgICAgaXRlbXMgPSBbU29tZUNsYXNzKGMpIGZvciBjIGluICgnYScsICdiJywgJ2MnKV0KKyAgICAgICAgcyA9IFdlYWtTZXQoaXRlbXMpCisgICAgICAgIGl0ID0gaXRlcihzKQorICAgICAgICBuZXh0KGl0KSAgICAgICAgICAgICAjIFRyaWdnZXIgaW50ZXJuYWwgaXRlcmF0aW9uCisgICAgICAgICMgRGVzdHJveSBhbiBpdGVtCisgICAgICAgIGRlbCBpdGVtc1stMV0KKyAgICAgICAgZ2MuY29sbGVjdCgpICAgICMganVzdCBpbiBjYXNlCisgICAgICAgICMgV2UgaGF2ZSByZW1vdmVkIGVpdGhlciB0aGUgZmlyc3QgY29uc3VtZWQgaXRlbXMsIG9yIGFub3RoZXIgb25lCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obGVuKGxpc3QoaXQpKSwgW2xlbihpdGVtcyksIGxlbihpdGVtcykgLSAxXSkKKyAgICAgICAgZGVsIGl0CisgICAgICAgICMgVGhlIHJlbW92YWwgaGFzIGJlZW4gY29tbWl0dGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCBsZW4oaXRlbXMpKQorCisgICAgZGVmIHRlc3Rfd2Vha19kZXN0cm95X2FuZF9tdXRhdGVfd2hpbGVfaXRlcmF0aW5nKHNlbGYpOgorICAgICAgICAjIElzc3VlICM3MTA1OiBpdGVyYXRvcnMgc2hvdWxkbid0IGNyYXNoIHdoZW4gYSBrZXkgaXMgaW1wbGljaXRseSByZW1vdmVkCisgICAgICAgIGl0ZW1zID0gW1NvbWVDbGFzcyhjKSBmb3IgYyBpbiBzdHJpbmcuYXNjaWlfbGV0dGVyc10KKyAgICAgICAgcyA9IFdlYWtTZXQoaXRlbXMpCisgICAgICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiB0ZXN0Y29udGV4dCgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGl0ID0gaXRlcihzKQorICAgICAgICAgICAgICAgIG5leHQoaXQpCisgICAgICAgICAgICAgICAgIyBTY2hlZHVsZSBhbiBpdGVtIGZvciByZW1vdmFsIGFuZCByZWNyZWF0ZSBpdAorICAgICAgICAgICAgICAgIHUgPSBTb21lQ2xhc3Moc3RyKGl0ZW1zLnBvcCgpKSkKKyAgICAgICAgICAgICAgICBnYy5jb2xsZWN0KCkgICAgICAjIGp1c3QgaW4gY2FzZQorICAgICAgICAgICAgICAgIHlpZWxkIHUKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgaXQgPSBOb25lICAgICAgICAgICAjIHNob3VsZCBjb21taXQgYWxsIHJlbW92YWxzCisKKyAgICAgICAgd2l0aCB0ZXN0Y29udGV4dCgpIGFzIHU6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUsIHMpCisgICAgICAgIHdpdGggdGVzdGNvbnRleHQoKSBhcyB1OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMucmVtb3ZlLCB1KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUsIHMpCisgICAgICAgIHdpdGggdGVzdGNvbnRleHQoKSBhcyB1OgorICAgICAgICAgICAgcy5hZGQodSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1LCBzKQorICAgICAgICB0ID0gcy5jb3B5KCkKKyAgICAgICAgd2l0aCB0ZXN0Y29udGV4dCgpIGFzIHU6CisgICAgICAgICAgICBzLnVwZGF0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgbGVuKHQpKQorICAgICAgICB3aXRoIHRlc3Rjb250ZXh0KCkgYXMgdToKKyAgICAgICAgICAgIHMuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgMCkKKworICAgIGRlZiB0ZXN0X2xlbl9jeWNsZXMoc2VsZik6CisgICAgICAgIE4gPSAyMAorICAgICAgICBpdGVtcyA9IFtSZWZDeWNsZSgpIGZvciBpIGluIHJhbmdlKE4pXQorICAgICAgICBzID0gV2Vha1NldChpdGVtcykKKyAgICAgICAgZGVsIGl0ZW1zCisgICAgICAgIGl0ID0gaXRlcihzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXh0KGl0KQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIG4xID0gbGVuKHMpCisgICAgICAgIGRlbCBpdAorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgbjIgPSBsZW4ocykKKyAgICAgICAgIyBvbmUgaXRlbSBtYXkgYmUga2VwdCBhbGl2ZSBpbnNpZGUgdGhlIGl0ZXJhdG9yCisgICAgICAgIHNlbGYuYXNzZXJ0SW4objEsICgwLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMiwgMCkKKworICAgIGRlZiB0ZXN0X2xlbl9yYWNlKHNlbGYpOgorICAgICAgICAjIEV4dGVuZGVkIHNhbml0eSBjaGVja3MgZm9yIGxlbigpIGluIHRoZSBmYWNlIG9mIGN5Y2xpYyBjb2xsZWN0aW9uCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChnYy5zZXRfdGhyZXNob2xkLCAqZ2MuZ2V0X3RocmVzaG9sZCgpKQorICAgICAgICBmb3IgdGggaW4gcmFuZ2UoMSwgMTAwKToKKyAgICAgICAgICAgIE4gPSAyMAorICAgICAgICAgICAgZ2MuY29sbGVjdCgwKQorICAgICAgICAgICAgZ2Muc2V0X3RocmVzaG9sZCh0aCwgdGgsIHRoKQorICAgICAgICAgICAgaXRlbXMgPSBbUmVmQ3ljbGUoKSBmb3IgaSBpbiByYW5nZShOKV0KKyAgICAgICAgICAgIHMgPSBXZWFrU2V0KGl0ZW1zKQorICAgICAgICAgICAgZGVsIGl0ZW1zCisgICAgICAgICAgICAjIEFsbCBpdGVtcyB3aWxsIGJlIGNvbGxlY3RlZCBhdCBuZXh0IGdhcmJhZ2UgY29sbGVjdGlvbiBwYXNzCisgICAgICAgICAgICBpdCA9IGl0ZXIocykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuZXh0KGl0KQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgbjEgPSBsZW4ocykKKyAgICAgICAgICAgIGRlbCBpdAorICAgICAgICAgICAgbjIgPSBsZW4ocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG4xLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobjEsIE4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChuMiwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKG4yLCBuMSkKKworCitkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0V2Vha1NldCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfd2hpY2hkYi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3doaWNoZGIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI3ZTMyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3doaWNoZGIucHkKQEAgLTAsMCArMSw2OCBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIiIiVGVzdCBzY3JpcHQgZm9yIHRoZSB3aGljaGRiIG1vZHVsZQorICAgYmFzZWQgb24gdGVzdF9hbnlkYm0ucHkKKyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2hpY2hkYgoraW1wb3J0IGdsb2IKKworX2ZuYW1lID0gdGVzdC50ZXN0X3N1cHBvcnQuVEVTVEZOCisKKyMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKK2FueWRibSA9IHRlc3QudGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2FueWRibScsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKworZGVmIF9kZWxldGVfZmlsZXMoKToKKyAgICAjIHdlIGRvbid0IGtub3cgdGhlIHByZWNpc2UgbmFtZSB0aGUgdW5kZXJseWluZyBkYXRhYmFzZSB1c2VzCisgICAgIyBzbyB3ZSB1c2UgZ2xvYiB0byBsb2NhdGUgYWxsIG5hbWVzCisgICAgZm9yIGYgaW4gZ2xvYi5nbG9iKF9mbmFtZSArICIqIik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhmKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworY2xhc3MgV2hpY2hEQlRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIEFjdHVhbCB0ZXN0IG1ldGhvZHMgYXJlIGFkZGVkIHRvIG5hbWVzcGFjZQorICAgICMgYWZ0ZXIgY2xhc3MgZGVmaW5pdGlvbi4KKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5fX2luaXRfXyhzZWxmLCAqYXJncykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgX2RlbGV0ZV9maWxlcygpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIF9kZWxldGVfZmlsZXMoKQorCitmb3IgbmFtZSBpbiBhbnlkYm0uX25hbWVzOgorICAgICMgd2UgZGVmaW5lIGEgbmV3IHRlc3QgbWV0aG9kIGZvciBlYWNoCisgICAgIyBjYW5kaWRhdGUgZGF0YWJhc2UgbW9kdWxlLgorICAgIHRyeToKKyAgICAgICAgIyBTaWxlbmNlIFB5M2sgd2FybmluZworICAgICAgICBtb2QgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKG5hbWUsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKyAgICBleGNlcHQgdW5pdHRlc3QuU2tpcFRlc3Q6CisgICAgICAgIGNvbnRpbnVlCisKKyAgICBkZWYgdGVzdF93aGljaGRiX25hbWUoc2VsZiwgbmFtZT1uYW1lLCBtb2Q9bW9kKToKKyAgICAgICAgIyBDaGVjayB3aGV0aGVyIHdoaWNoZGIgY29ycmVjdGx5IGd1ZXNzZXMgbW9kdWxlIG5hbWUKKyAgICAgICAgIyBmb3IgZGF0YWJhc2VzIG9wZW5lZCB3aXRoIG1vZHVsZSBtb2QuCisgICAgICAgICMgVHJ5IHdpdGggZW1wdHkgZmlsZXMgZmlyc3QKKyAgICAgICAgZiA9IG1vZC5vcGVuKF9mbmFtZSwgJ2MnKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCB3aGljaGRiLndoaWNoZGIoX2ZuYW1lKSkKKyAgICAgICAgIyBOb3cgYWRkIGEga2V5CisgICAgICAgIGYgPSBtb2Qub3BlbihfZm5hbWUsICd3JykKKyAgICAgICAgZlsiMSJdID0gIjEiCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIHdoaWNoZGIud2hpY2hkYihfZm5hbWUpKQorICAgIHNldGF0dHIoV2hpY2hEQlRlc3RDYXNlLCJ0ZXN0X3doaWNoZGJfJXMiICUgbmFtZSwgdGVzdF93aGljaGRiX25hbWUpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0cnk6CisgICAgICAgIHRlc3QudGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChXaGljaERCVGVzdENhc2UpCisgICAgZmluYWxseToKKyAgICAgICAgX2RlbGV0ZV9maWxlcygpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dpbnJlZy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dpbnJlZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDVkMDQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfd2lucmVnLnB5CkBAIC0wLDAgKzEsNDU5IEBACisjIFRlc3QgdGhlIHdpbmRvd3Mgc3BlY2lmaWMgd2luMzJyZWcgbW9kdWxlLgorIyBPbmx5IHdpbjMycmVnIGZ1bmN0aW9ucyBub3QgaGl0IGhlcmU6IEZsdXNoS2V5LCBMb2FkS2V5IGFuZCBTYXZlS2V5CisKK2ltcG9ydCBvcywgc3lzLCBlcnJubworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAordGhyZWFkaW5nID0gdGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoInRocmVhZGluZyIpCitmcm9tIHBsYXRmb3JtIGltcG9ydCBtYWNoaW5lCisKKyMgRG8gdGhpcyBmaXJzdCBzbyB0ZXN0IHdpbGwgYmUgc2tpcHBlZCBpZiBtb2R1bGUgZG9lc24ndCBleGlzdAordGVzdF9zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ193aW5yZWcnKQorIyBOb3cgaW1wb3J0IGV2ZXJ5dGhpbmcKK2Zyb20gX3dpbnJlZyBpbXBvcnQgKgorCit0cnk6CisgICAgUkVNT1RFX05BTUUgPSBzeXMuYXJndltzeXMuYXJndi5pbmRleCgiLS1yZW1vdGUiKSsxXQorZXhjZXB0IChJbmRleEVycm9yLCBWYWx1ZUVycm9yKToKKyAgICBSRU1PVEVfTkFNRSA9IE5vbmUKKworIyB0dXBsZSBvZiAobWFqb3IsIG1pbm9yKQorV0lOX1ZFUiA9IHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpWzoyXQorIyBTb21lIHRlc3RzIHNob3VsZCBvbmx5IHJ1biBvbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcyB3aGVyZSBXT1c2NCB3aWxsIGJlLgorV0lONjRfTUFDSElORSA9IFRydWUgaWYgbWFjaGluZSgpID09ICJBTUQ2NCIgZWxzZSBGYWxzZQorCisjIFN0YXJ0aW5nIHdpdGggV2luZG93cyA3IGFuZCBXaW5kb3dzIFNlcnZlciAyMDA4IFIyLCBXT1c2NCBubyBsb25nZXIgdXNlcworIyByZWdpc3RyeSByZWZsZWN0aW9uIGFuZCBmb3JtZXJseSByZWZsZWN0ZWQga2V5cyBhcmUgc2hhcmVkIGluc3RlYWQuCisjIFdpbmRvd3MgNyBhbmQgV2luZG93cyBTZXJ2ZXIgMjAwOCBSMiBhcmUgdmVyc2lvbiA2LjEuIER1ZSB0byB0aGlzLCBzb21lCisjIHRlc3RzIGFyZSBvbmx5IHZhbGlkIHVwIHVudGlsIDYuMQorSEFTX1JFRkxFQ1RJT04gPSBUcnVlIGlmIFdJTl9WRVIgPCAoNiwgMSkgZWxzZSBGYWxzZQorCisjIFVzZSBhIHBlci1wcm9jZXNzIGtleSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgdGVzdCBydW5zIChidWlsZGJvdCEpIGZyb20KKyMgc3RvbXBpbmcgb24gZWFjaCBvdGhlci4KK3Rlc3Rfa2V5X2Jhc2UgPSAiUHl0aG9uIFRlc3QgS2V5IFslZF0gLSBEZWxldGUgTWUiICUgKG9zLmdldHBpZCgpLCkKK3Rlc3Rfa2V5X25hbWUgPSAiU09GVFdBUkVcXCIgKyB0ZXN0X2tleV9iYXNlCisjIE9uIE9TJ2VzIHRoYXQgc3VwcG9ydCByZWZsZWN0aW9uIHdlIHNob3VsZCB0ZXN0IHdpdGggYSByZWZsZWN0ZWQga2V5Cit0ZXN0X3JlZmxlY3Rfa2V5X25hbWUgPSAiU09GVFdBUkVcXENsYXNzZXNcXCIgKyB0ZXN0X2tleV9iYXNlCisKK3Rlc3RfZGF0YSA9IFsKKyAgICAoIkludCBWYWx1ZSIsICAgICA0NSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19EV09SRCksCisgICAgKCJTdHJpbmcgVmFsIiwgICAgIkEgc3RyaW5nIHZhbHVlIiwgICAgICAgICAgICAgICAgICAgICAgICBSRUdfU1opLAorICAgICgiU3RyaW5nRXhwYW5kIiwgICJUaGUgcGF0aCBpcyAlcGF0aCUiLCAgICAgICAgICAgICAgICAgICAgUkVHX0VYUEFORF9TWiksCisgICAgKCJNdWx0aS1zdHJpbmciLCAgWyJMb3RzIiwgIm9mIiwgInN0cmluZyIsICJ2YWx1ZXMiXSwgICAgICBSRUdfTVVMVElfU1opLAorICAgICgiUmF3IERhdGEiLCAgICAgICgiYmluYXJ5IitjaHIoMCkrImRhdGEiKSwgICAgICAgICAgICAgICAgUkVHX0JJTkFSWSksCisgICAgKCJCaWcgU3RyaW5nIiwgICAgIngiKigyKioxNC0xKSwgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfU1opLAorICAgICgiQmlnIEJpbmFyeSIsICAgICJ4IiooMioqMTQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX0JJTkFSWSksCitdCisKK2lmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgdGVzdF9kYXRhICs9IFsKKyAgICAgICAgKHVuaWNvZGUoIlVuaWNvZGUgVmFsIiksICB1bmljb2RlKCJBIFVuaWNvZGUgdmFsdWUiKSwgUkVHX1NaLCksCisgICAgICAgICgiVW5pY29kZUV4cGFuZCIsIHVuaWNvZGUoIlRoZSBwYXRoIGlzICVwYXRoJSIpLCBSRUdfRVhQQU5EX1NaKSwKKyAgICAgICAgKCJNdWx0aS11bmljb2RlIiwgW3VuaWNvZGUoIkxvdHMiKSwgdW5pY29kZSgib2YiKSwgdW5pY29kZSgidW5pY29kZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZSgidmFsdWVzIildLCBSRUdfTVVMVElfU1opLAorICAgICAgICAoIk11bHRpLW1peGVkIiwgICBbdW5pY29kZSgiVW5pY29kZSIpLCB1bmljb2RlKCJhbmQiKSwgInN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVzIl0sIFJFR19NVUxUSV9TWiksCisgICAgXQorCitjbGFzcyBCYXNlV2lucmVnVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXN0IGtleSBpcyBhYnNlbnQgd2hlbiB0aGUgdGVzdAorICAgICAgICAjIHN0YXJ0cy4KKyAgICAgICAgc2VsZi5kZWxldGVfdHJlZShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkKKworICAgIGRlZiBkZWxldGVfdHJlZShzZWxmLCByb290LCBzdWJrZXkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoa2V5ID0gT3BlbktleShyb290LCBzdWJrZXksIEtFWV9BTExfQUNDRVNTKQorICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgIyBzdWJrZXkgZG9lcyBub3QgZXhpc3QKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN1YnN1YmtleSA9IEVudW1LZXkoaGtleSwgMCkKKyAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICAgICAgIyBubyBtb3JlIHN1YmtleXMKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgc2VsZi5kZWxldGVfdHJlZShoa2V5LCBzdWJzdWJrZXkpCisgICAgICAgIENsb3NlS2V5KGhrZXkpCisgICAgICAgIERlbGV0ZUtleShyb290LCBzdWJrZXkpCisKKyAgICBkZWYgX3dyaXRlX3Rlc3RfZGF0YShzZWxmLCByb290X2tleSwgQ3JlYXRlS2V5PUNyZWF0ZUtleSk6CisgICAgICAgICMgU2V0IHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIGtleS4KKyAgICAgICAgU2V0VmFsdWUocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUsIFJFR19TWiwgIkRlZmF1bHQgdmFsdWUiKQorICAgICAgICBrZXkgPSBDcmVhdGVLZXkocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUpCisgICAgICAgICMgQ3JlYXRlIGEgc3ViLWtleQorICAgICAgICBzdWJfa2V5ID0gQ3JlYXRlS2V5KGtleSwgInN1Yl9rZXkiKQorICAgICAgICAjIEdpdmUgdGhlIHN1Yi1rZXkgc29tZSBuYW1lZCB2YWx1ZXMKKworICAgICAgICBmb3IgdmFsdWVfbmFtZSwgdmFsdWVfZGF0YSwgdmFsdWVfdHlwZSBpbiB0ZXN0X2RhdGE6CisgICAgICAgICAgICBTZXRWYWx1ZUV4KHN1Yl9rZXksIHZhbHVlX25hbWUsIDAsIHZhbHVlX3R5cGUsIHZhbHVlX2RhdGEpCisKKyAgICAgICAgIyBDaGVjayB3ZSB3cm90ZSBhcyBtYW55IGl0ZW1zIGFzIHdlIHRob3VnaHQuCisgICAgICAgIG5rZXlzLCBudmFsdWVzLCBzaW5jZV9tb2QgPSBRdWVyeUluZm9LZXkoa2V5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5rZXlzLCAxLCAiTm90IHRoZSBjb3JyZWN0IG51bWJlciBvZiBzdWIga2V5cyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnZhbHVlcywgMSwgIk5vdCB0aGUgY29ycmVjdCBudW1iZXIgb2YgdmFsdWVzIikKKyAgICAgICAgbmtleXMsIG52YWx1ZXMsIHNpbmNlX21vZCA9IFF1ZXJ5SW5mb0tleShzdWJfa2V5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5rZXlzLCAwLCAiTm90IHRoZSBjb3JyZWN0IG51bWJlciBvZiBzdWIga2V5cyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnZhbHVlcywgbGVuKHRlc3RfZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICJOb3QgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHZhbHVlcyIpCisgICAgICAgICMgQ2xvc2UgdGhpcyBrZXkgdGhpcyB3YXkuLi4KKyAgICAgICAgIyAoYnV0IGJlZm9yZSB3ZSBkbywgY29weSB0aGUga2V5IGFzIGFuIGludGVnZXIgLSB0aGlzIGFsbG93cworICAgICAgICAjIHVzIHRvIHRlc3QgdGhhdCB0aGUga2V5IHJlYWxseSBnZXRzIGNsb3NlZCkuCisgICAgICAgIGludF9zdWJfa2V5ID0gaW50KHN1Yl9rZXkpCisgICAgICAgIENsb3NlS2V5KHN1Yl9rZXkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFF1ZXJ5SW5mb0tleShpbnRfc3ViX2tleSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiSXQgYXBwZWFycyB0aGUgQ2xvc2VLZXkoKSBmdW5jdGlvbiBkb2VzICIKKyAgICAgICAgICAgICAgICAgICAgICAibm90IGNsb3NlIHRoZSBhY3R1YWwga2V5ISIpCisgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICAjIC4uLiBhbmQgY2xvc2UgdGhhdCBrZXkgdGhhdCB3YXkgOi0pCisgICAgICAgIGludF9rZXkgPSBpbnQoa2V5KQorICAgICAgICBrZXkuQ2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBRdWVyeUluZm9LZXkoaW50X2tleSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiSXQgYXBwZWFycyB0aGUga2V5LkNsb3NlKCkgZnVuY3Rpb24gIgorICAgICAgICAgICAgICAgICAgICAgICJkb2VzIG5vdCBjbG9zZSB0aGUgYWN0dWFsIGtleSEiKQorICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBfcmVhZF90ZXN0X2RhdGEoc2VsZiwgcm9vdF9rZXksIE9wZW5LZXk9T3BlbktleSk6CisgICAgICAgICMgQ2hlY2sgd2UgY2FuIGdldCBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIGtleS4KKyAgICAgICAgdmFsID0gUXVlcnlWYWx1ZShyb290X2tleSwgdGVzdF9rZXlfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsICJEZWZhdWx0IHZhbHVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiUmVnaXN0cnkgZGlkbid0IGdpdmUgYmFjayB0aGUgY29ycmVjdCB2YWx1ZSIpCisKKyAgICAgICAga2V5ID0gT3BlbktleShyb290X2tleSwgdGVzdF9rZXlfbmFtZSkKKyAgICAgICAgIyBSZWFkIHRoZSBzdWIta2V5cworICAgICAgICB3aXRoIE9wZW5LZXkoa2V5LCAic3ViX2tleSIpIGFzIHN1Yl9rZXk6CisgICAgICAgICAgICAjIENoZWNrIEkgY2FuIGVudW1lcmF0ZSBvdmVyIHRoZSB2YWx1ZXMuCisgICAgICAgICAgICBpbmRleCA9IDAKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gRW51bVZhbHVlKHN1Yl9rZXksIGluZGV4KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGF0YSwgdGVzdF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRpZG4ndCByZWFkIGJhY2sgdGhlIGNvcnJlY3QgdGVzdCBkYXRhIikKKyAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4ICsgMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRleCwgbGVuKHRlc3RfZGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaWRuJ3QgcmVhZCB0aGUgY29ycmVjdCBudW1iZXIgb2YgaXRlbXMiKQorICAgICAgICAgICAgIyBDaGVjayBJIGNhbiBkaXJlY3RseSBhY2Nlc3MgZWFjaCBpdGVtCisgICAgICAgICAgICBmb3IgdmFsdWVfbmFtZSwgdmFsdWVfZGF0YSwgdmFsdWVfdHlwZSBpbiB0ZXN0X2RhdGE6CisgICAgICAgICAgICAgICAgcmVhZF92YWwsIHJlYWRfdHlwID0gUXVlcnlWYWx1ZUV4KHN1Yl9rZXksIHZhbHVlX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkX3ZhbCwgdmFsdWVfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZGlyZWN0bHkgcmVhZCB0aGUgdmFsdWUiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZF90eXAsIHZhbHVlX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGRpcmVjdGx5IHJlYWQgdGhlIHZhbHVlIikKKyAgICAgICAgc3ViX2tleS5DbG9zZSgpCisgICAgICAgICMgRW51bWVyYXRlIG91ciBtYWluIGtleS4KKyAgICAgICAgcmVhZF92YWwgPSBFbnVtS2V5KGtleSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkX3ZhbCwgInN1Yl9rZXkiLCAiUmVhZCBzdWJrZXkgdmFsdWUgd3JvbmciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBFbnVtS2V5KGtleSwgMSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiV2FzIGFibGUgdG8gZ2V0IGEgc2Vjb25kIGtleSB3aGVuIEkgb25seSBoYXZlIG9uZSEiKQorICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBrZXkuQ2xvc2UoKQorCisgICAgZGVmIF9kZWxldGVfdGVzdF9kYXRhKHNlbGYsIHJvb3Rfa2V5KToKKyAgICAgICAga2V5ID0gT3BlbktleShyb290X2tleSwgdGVzdF9rZXlfbmFtZSwgMCwgS0VZX0FMTF9BQ0NFU1MpCisgICAgICAgIHN1Yl9rZXkgPSBPcGVuS2V5KGtleSwgInN1Yl9rZXkiLCAwLCBLRVlfQUxMX0FDQ0VTUykKKyAgICAgICAgIyBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGRlbGV0ZSB0aGUgdmFsdWVzIGJlZm9yZSBkZWxldGluZworICAgICAgICAjIHRoZSBrZXkgKGFsdGhvdWdoIHN1YmtleXMgbXVzdCBub3QgZXhpc3QpLiAgV2UgZGVsZXRlIHRoZW0KKyAgICAgICAgIyBtYW51YWxseSBqdXN0IHRvIHByb3ZlIHdlIGNhbiA6LSkKKyAgICAgICAgZm9yIHZhbHVlX25hbWUsIHZhbHVlX2RhdGEsIHZhbHVlX3R5cGUgaW4gdGVzdF9kYXRhOgorICAgICAgICAgICAgRGVsZXRlVmFsdWUoc3ViX2tleSwgdmFsdWVfbmFtZSkKKworICAgICAgICBua2V5cywgbnZhbHVlcywgc2luY2VfbW9kID0gUXVlcnlJbmZvS2V5KHN1Yl9rZXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmtleXMsIDAsICJzdWJrZXkgbm90IGVtcHR5IGJlZm9yZSBkZWxldGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG52YWx1ZXMsIDAsICJzdWJrZXkgbm90IGVtcHR5IGJlZm9yZSBkZWxldGUiKQorICAgICAgICBzdWJfa2V5LkNsb3NlKCkKKyAgICAgICAgRGVsZXRlS2V5KGtleSwgInN1Yl9rZXkiKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgU2hvdWxkbnQgYmUgYWJsZSB0byBkZWxldGUgaXQgdHdpY2UhCisgICAgICAgICAgICBEZWxldGVLZXkoa2V5LCAic3ViX2tleSIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkRlbGV0aW5nIHRoZSBrZXkgdHdpY2Ugc3VjY2VlZGVkIikKKyAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGtleS5DbG9zZSgpCisgICAgICAgIERlbGV0ZUtleShyb290X2tleSwgdGVzdF9rZXlfbmFtZSkKKyAgICAgICAgIyBPcGVuaW5nIHNob3VsZCBub3cgZmFpbCEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gT3BlbktleShyb290X2tleSwgdGVzdF9rZXlfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQ291bGQgb3BlbiB0aGUgbm9uLWV4aXN0ZW50IGtleSIpCisgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6ICMgVXNlIHRoaXMgZXJyb3IgbmFtZSB0aGlzIHRpbWUKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBfdGVzdF9hbGwoc2VsZiwgcm9vdF9rZXkpOgorICAgICAgICBzZWxmLl93cml0ZV90ZXN0X2RhdGEocm9vdF9rZXkpCisgICAgICAgIHNlbGYuX3JlYWRfdGVzdF9kYXRhKHJvb3Rfa2V5KQorICAgICAgICBzZWxmLl9kZWxldGVfdGVzdF9kYXRhKHJvb3Rfa2V5KQorCitjbGFzcyBMb2NhbFdpbnJlZ1Rlc3RzKEJhc2VXaW5yZWdUZXN0cyk6CisKKyAgICBkZWYgdGVzdF9yZWdpc3RyeV93b3JrcyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9hbGwoSEtFWV9DVVJSRU5UX1VTRVIpCisKKyAgICBkZWYgdGVzdF9yZWdpc3RyeV93b3Jrc19leHRlbmRlZF9mdW5jdGlvbnMoc2VsZik6CisgICAgICAgICMgU3Vic3RpdHV0ZSB0aGUgcmVndWxhciBDcmVhdGVLZXkgYW5kIE9wZW5LZXkgY2FsbHMgd2l0aCB0aGVpcgorICAgICAgICAjIGV4dGVuZGVkIGNvdW50ZXJwYXJ0cy4KKyAgICAgICAgIyBOb3RlOiBEZWxldGVLZXlFeCBpcyBub3QgdXNlZCBoZXJlIGJlY2F1c2UgaXQgaXMgcGxhdGZvcm0gZGVwZW5kZW50CisgICAgICAgIGNrZSA9IGxhbWJkYSBrZXksIHN1Yl9rZXk6IENyZWF0ZUtleUV4KGtleSwgc3ViX2tleSwgMCwgS0VZX0FMTF9BQ0NFU1MpCisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3RfZGF0YShIS0VZX0NVUlJFTlRfVVNFUiwgY2tlKQorCisgICAgICAgIG9rZSA9IGxhbWJkYSBrZXksIHN1Yl9rZXk6IE9wZW5LZXlFeChrZXksIHN1Yl9rZXksIDAsIEtFWV9SRUFEKQorICAgICAgICBzZWxmLl9yZWFkX3Rlc3RfZGF0YShIS0VZX0NVUlJFTlRfVVNFUiwgb2tlKQorCisgICAgICAgIHNlbGYuX2RlbGV0ZV90ZXN0X2RhdGEoSEtFWV9DVVJSRU5UX1VTRVIpCisKKyAgICBkZWYgdGVzdF9jb25uZWN0X3JlZ2lzdHJ5X3RvX2xvY2FsX21hY2hpbmVfd29ya3Moc2VsZik6CisgICAgICAgICMgcGVyZm9ybSBtaW5pbWFsIENvbm5lY3RSZWdpc3RyeSB0ZXN0IHdoaWNoIGp1c3QgaW52b2tlcyBpdAorICAgICAgICBoID0gQ29ubmVjdFJlZ2lzdHJ5KE5vbmUsIEhLRVlfTE9DQUxfTUFDSElORSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChoLmhhbmRsZSwgMCkKKyAgICAgICAgaC5DbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oYW5kbGUsIDApCisKKyAgICBkZWYgdGVzdF9pbmV4aXN0YW50X3JlbW90ZV9yZWdpc3RyeShzZWxmKToKKyAgICAgICAgY29ubmVjdCA9IGxhbWJkYTogQ29ubmVjdFJlZ2lzdHJ5KCJhYmNkZWZnaGlqa2wiLCBIS0VZX0NVUlJFTlRfVVNFUikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBjb25uZWN0KQorCisgICAgZGVmIHRlc3RfZXhwYW5kX2Vudmlyb25tZW50X3N0cmluZ3Moc2VsZik6CisgICAgICAgIHIgPSBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3ModSIld2luZGlyJVxcdGVzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyKSwgdW5pY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCBvcy5lbnZpcm9uWyJ3aW5kaXIiXSArICJcXHRlc3QiKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBoYW5kbGUgaXMgY2xvc2VkIGlmIGFuIGV4Y2VwdGlvbiBvY2N1cnMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBDb25uZWN0UmVnaXN0cnkoTm9uZSwgSEtFWV9MT0NBTF9NQUNISU5FKSBhcyBoOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaC5oYW5kbGUsIDApCisgICAgICAgICAgICAgICAgcmFpc2UgV2luZG93c0Vycm9yCisgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGFuZGxlLCAwKQorCisgICAgZGVmIHRlc3RfY2hhbmdpbmdfdmFsdWUoc2VsZik6CisgICAgICAgICMgSXNzdWUyODEwOiBBIHJhY2UgY29uZGl0aW9uIGluIDIuNiBhbmQgMy4xIG1heSBjYXVzZQorICAgICAgICAjIEVudW1WYWx1ZSBvciBRdWVyeVZhbHVlIHRvIHJhaXNlICJXaW5kb3dzRXJyb3I6IE1vcmUgZGF0YSBpcworICAgICAgICAjIGF2YWlsYWJsZSIKKyAgICAgICAgZG9uZSA9IEZhbHNlCisKKyAgICAgICAgY2xhc3MgVmVyeUFjdGl2ZVRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICAgICAgd2l0aCBDcmVhdGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUpIGFzIGtleToKKyAgICAgICAgICAgICAgICAgICAgdXNlX3Nob3J0ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBsb25nX3N0cmluZyA9ICd4JyoyMDAwCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBkb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcyA9ICd4JyBpZiB1c2Vfc2hvcnQgZWxzZSBsb25nX3N0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgdXNlX3Nob3J0ID0gbm90IHVzZV9zaG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgU2V0VmFsdWUoa2V5LCAnY2hhbmdpbmdfdmFsdWUnLCBSRUdfU1osIHMpCisKKyAgICAgICAgdGhyZWFkID0gVmVyeUFjdGl2ZVRocmVhZCgpCisgICAgICAgIHRocmVhZC5zdGFydCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggQ3JlYXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9rZXlfbmFtZSsnXFxjaGFuZ2luZ192YWx1ZScpIGFzIGtleToKKyAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZSgxMDAwKToKKyAgICAgICAgICAgICAgICAgICAgbnVtX3N1YmtleXMsIG51bV92YWx1ZXMsIHQgPSBRdWVyeUluZm9LZXkoa2V5KQorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShudW1fdmFsdWVzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBFbnVtVmFsdWUoa2V5LCBpKQorICAgICAgICAgICAgICAgICAgICAgICAgUXVlcnlWYWx1ZShrZXksIG5hbWVbMF0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkb25lID0gVHJ1ZQorICAgICAgICAgICAgdGhyZWFkLmpvaW4oKQorICAgICAgICAgICAgd2l0aCBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lLCAwLCBLRVlfQUxMX0FDQ0VTUykgYXMga2V5OgorICAgICAgICAgICAgICAgIERlbGV0ZUtleShrZXksICdjaGFuZ2luZ192YWx1ZScpCisgICAgICAgICAgICBEZWxldGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUpCisKKyAgICBkZWYgdGVzdF9sb25nX2tleShzZWxmKToKKyAgICAgICAgIyBJc3N1ZTI4MTAsIGluIDIuNiBhbmQgMy4xIHdoZW4gdGhlIGtleSBuYW1lIHdhcyBleGFjdGx5IDI1NgorICAgICAgICAjIGNoYXJhY3RlcnMsIEVudW1LZXkgcmFpc2VkICJXaW5kb3dzRXJyb3I6IE1vcmUgZGF0YSBpcworICAgICAgICAjIGF2YWlsYWJsZSIKKyAgICAgICAgbmFtZSA9ICd4JyoyNTYKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBDcmVhdGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUpIGFzIGtleToKKyAgICAgICAgICAgICAgICBTZXRWYWx1ZShrZXksIG5hbWUsIFJFR19TWiwgJ3gnKQorICAgICAgICAgICAgICAgIG51bV9zdWJrZXlzLCBudW1fdmFsdWVzLCB0ID0gUXVlcnlJbmZvS2V5KGtleSkKKyAgICAgICAgICAgICAgICBFbnVtS2V5KGtleSwgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHdpdGggT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSwgMCwgS0VZX0FMTF9BQ0NFU1MpIGFzIGtleToKKyAgICAgICAgICAgICAgICBEZWxldGVLZXkoa2V5LCBuYW1lKQorICAgICAgICAgICAgRGVsZXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorCisgICAgZGVmIHRlc3RfZHluYW1pY19rZXkoc2VsZik6CisgICAgICAgICMgSXNzdWUyODEwLCB3aGVuIHRoZSB2YWx1ZSBpcyBkeW5hbWljYWxseSBnZW5lcmF0ZWQsIHRoZXNlCisgICAgICAgICMgcmFpc2UgIldpbmRvd3NFcnJvcjogTW9yZSBkYXRhIGlzIGF2YWlsYWJsZSIgaW4gMi42IGFuZCAzLjEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgRW51bVZhbHVlKEhLRVlfUEVSRk9STUFOQ0VfREFUQSwgMCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5vLkVQRVJNLCBlcnJuby5FQUNDRVMpOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImFjY2VzcyBkZW5pZWQgdG8gcmVnaXN0cnkga2V5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoYXJlIHlvdSBydW5uaW5nIGluIGEgbm9uLWludGVyYWN0aXZlIHNlc3Npb24/KSIpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBRdWVyeVZhbHVlRXgoSEtFWV9QRVJGT1JNQU5DRV9EQVRBLCBOb25lKQorCisgICAgIyBSZWZsZWN0aW9uIHJlcXVpcmVzIFhQIHg2NC9WaXN0YSBhdCBhIG1pbmltdW0uIFhQIGRvZXNuJ3QgaGF2ZSB0aGlzIHN0dWZmCisgICAgIyBvciBEZWxldGVLZXlFeCBzbyBtYWtlIHN1cmUgdGhlaXIgdXNlIHJhaXNlcyBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoV0lOX1ZFUiA8ICg1LCAyKSwgIlJlcXVpcmVzIFdpbmRvd3MgWFAiKQorICAgIGRlZiB0ZXN0X3JlZmxlY3Rpb25fdW5zdXBwb3J0ZWQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggQ3JlYXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKSBhcyBjazoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNrLmhhbmRsZSwgMCkKKworICAgICAgICAgICAga2V5ID0gT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5LmhhbmRsZSwgMCkKKworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBEaXNhYmxlUmVmbGVjdGlvbktleShrZXkpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIEVuYWJsZVJlZmxlY3Rpb25LZXkoa2V5KQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBRdWVyeVJlZmxlY3Rpb25LZXkoa2V5KQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBEZWxldGVLZXlFeChIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIERlbGV0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkKKworICAgIGRlZiB0ZXN0X3NldHZhbHVlZXhfdmFsdWVfcmFuZ2Uoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgSXNzdWUgIzE0NDIwLCBhY2NlcHQgcHJvcGVyIHJhbmdlcyBmb3IgU2V0VmFsdWVFeC4KKyAgICAgICAgIyBQeTJSZWcsIHdoaWNoIGdldHMgY2FsbGVkIGJ5IFNldFZhbHVlRXgsIHdhcyB1c2luZyBQeUxvbmdfQXNMb25nLAorICAgICAgICAjIHRodXMgcmFpc2luZyBPdmVyZmxvd0Vycm9yLiBUaGUgaW1wbGVtZW50YXRpb24gbm93IHVzZXMKKyAgICAgICAgIyBQeUxvbmdfQXNVbnNpZ25lZExvbmcgdG8gbWF0Y2ggRFdPUkQncyBzaXplLgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIENyZWF0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkgYXMgY2s6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjay5oYW5kbGUsIDApCisgICAgICAgICAgICAgICAgU2V0VmFsdWVFeChjaywgInRlc3RfbmFtZSIsIE5vbmUsIFJFR19EV09SRCwgMHg4MDAwMDAwMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIERlbGV0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkKKworICAgIGRlZiB0ZXN0X3F1ZXJ5dmFsdWVleF9yZXR1cm5fdmFsdWUoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgSXNzdWUgIzE2NzU5LCByZXR1cm4gdW5zaWduZWQgaW50IGZyb20gUXVlcnlWYWx1ZUV4LgorICAgICAgICAjIFJlZzJQeSwgd2hpY2ggZ2V0cyBjYWxsZWQgYnkgUXVlcnlWYWx1ZUV4LCB3YXMgcmV0dXJuaW5nIGEgdmFsdWUKKyAgICAgICAgIyBnZW5lcmF0ZWQgYnkgUHlMb25nX0Zyb21Mb25nLiBUaGUgaW1wbG1lbnRhdGlvbiBub3cgdXNlcworICAgICAgICAjIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nIHRvIG1hdGNoIERXT1JEJ3Mgc2l6ZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBDcmVhdGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUpIGFzIGNrOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY2suaGFuZGxlLCAwKQorICAgICAgICAgICAgICAgIHRlc3RfdmFsID0gMHg4MDAwMDAwMAorICAgICAgICAgICAgICAgIFNldFZhbHVlRXgoY2ssICJ0ZXN0X25hbWUiLCBOb25lLCBSRUdfRFdPUkQsIHRlc3RfdmFsKQorICAgICAgICAgICAgICAgIHJldF92YWwsIHJldF90eXBlID0gUXVlcnlWYWx1ZUV4KGNrLCAidGVzdF9uYW1lIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldF90eXBlLCBSRUdfRFdPUkQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXRfdmFsLCB0ZXN0X3ZhbCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIERlbGV0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkKKworCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKFJFTU9URV9OQU1FLCAiU2tpcHBpbmcgcmVtb3RlIHJlZ2lzdHJ5IHRlc3RzIikKK2NsYXNzIFJlbW90ZVdpbnJlZ1Rlc3RzKEJhc2VXaW5yZWdUZXN0cyk6CisKKyAgICBkZWYgdGVzdF9yZW1vdGVfcmVnaXN0cnlfd29ya3Moc2VsZik6CisgICAgICAgIHJlbW90ZV9rZXkgPSBDb25uZWN0UmVnaXN0cnkoUkVNT1RFX05BTUUsIEhLRVlfQ1VSUkVOVF9VU0VSKQorICAgICAgICBzZWxmLl90ZXN0X2FsbChyZW1vdGVfa2V5KQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKFdJTjY0X01BQ0hJTkUsICJ4NjQgc3BlY2lmaWMgcmVnaXN0cnkgdGVzdHMiKQorY2xhc3MgV2luNjRXaW5yZWdUZXN0cyhCYXNlV2lucmVnVGVzdHMpOgorCisgICAgZGVmIHRlc3RfcmVmbGVjdGlvbl9mdW5jdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGNhbiBjYWxsIHRoZSBxdWVyeSwgZW5hYmxlLCBhbmQgZGlzYWJsZSBmdW5jdGlvbnMKKyAgICAgICAgIyBvbiBhIGtleSB3aGljaCBpc24ndCBvbiB0aGUgcmVmbGVjdGlvbiBsaXN0IHdpdGggbm8gY29uc2VxdWVuY2VzLgorICAgICAgICB3aXRoIE9wZW5LZXkoSEtFWV9MT0NBTF9NQUNISU5FLCAiU29mdHdhcmUiKSBhcyBrZXk6CisgICAgICAgICAgICAjIEhLTE1cU29mdHdhcmUgaXMgcmVkaXJlY3RlZCBidXQgbm90IHJlZmxlY3RlZCBpbiBhbGwgT1NlcworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFF1ZXJ5UmVmbGVjdGlvbktleShrZXkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBFbmFibGVSZWZsZWN0aW9uS2V5KGtleSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIERpc2FibGVSZWZsZWN0aW9uS2V5KGtleSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoUXVlcnlSZWZsZWN0aW9uS2V5KGtleSkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfUkVGTEVDVElPTiwgIk9TIGRvZXNuJ3Qgc3VwcG9ydCByZWZsZWN0aW9uIikKKyAgICBkZWYgdGVzdF9yZWZsZWN0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB3ZSBjYW4gY3JlYXRlLCBvcGVuLCBhbmQgZGVsZXRlIGtleXMgaW4gdGhlIDMyLWJpdAorICAgICAgICAjIGFyZWEuIEJlY2F1c2Ugd2UgYXJlIGRvaW5nIHRoaXMgaW4gYSBrZXkgd2hpY2ggZ2V0cyByZWZsZWN0ZWQsCisgICAgICAgICMgdGVzdCB0aGUgZGlmZmVyZW5jZXMgb2YgMzIgYW5kIDY0LWJpdCBrZXlzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCisgICAgICAgICMgcmVmbGVjdGlvbiBvY2N1cnMgKGllLiB3aGVuIHRoZSBjcmVhdGVkIGtleSBpcyBjbG9zZWQpLgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIENyZWF0ZUtleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9BTExfQUNDRVNTIHwgS0VZX1dPVzY0XzMyS0VZKSBhcyBjcmVhdGVkX2tleToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNyZWF0ZWRfa2V5LmhhbmRsZSwgMCkKKworICAgICAgICAgICAgICAgICMgVGhlIGtleSBzaG91bGQgbm93IGJlIGF2YWlsYWJsZSBpbiB0aGUgMzItYml0IGFyZWEKKyAgICAgICAgICAgICAgICB3aXRoIE9wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX0FMTF9BQ0NFU1MgfCBLRVlfV09XNjRfMzJLRVkpIGFzIGtleToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkuaGFuZGxlLCAwKQorCisgICAgICAgICAgICAgICAgIyBXcml0ZSBhIHZhbHVlIHRvIHdoYXQgY3VycmVudGx5IGlzIG9ubHkgaW4gdGhlIDMyLWJpdCBhcmVhCisgICAgICAgICAgICAgICAgU2V0VmFsdWVFeChjcmVhdGVkX2tleSwgIiIsIDAsIFJFR19TWiwgIjMyS0VZIikKKworICAgICAgICAgICAgICAgICMgVGhlIGtleSBpcyBub3QgcmVmbGVjdGVkIHVudGlsIGNyZWF0ZWRfa2V5IGlzIGNsb3NlZC4KKyAgICAgICAgICAgICAgICAjIFRoZSA2NC1iaXQgdmVyc2lvbiBvZiB0aGUga2V5IHNob3VsZCBub3QgYmUgYXZhaWxhYmxlIHlldC4KKyAgICAgICAgICAgICAgICBvcGVuX2ZhaWwgPSBsYW1iZGE6IE9wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX1JFQUQgfCBLRVlfV09XNjRfNjRLRVkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcGVuX2ZhaWwpCisKKyAgICAgICAgICAgICMgTm93IGV4cGxpY2l0bHkgb3BlbiB0aGUgNjQtYml0IHZlcnNpb24gb2YgdGhlIGtleQorICAgICAgICAgICAgd2l0aCBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX0FMTF9BQ0NFU1MgfCBLRVlfV09XNjRfNjRLRVkpIGFzIGtleToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleS5oYW5kbGUsIDApCisgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIG9yaWdpbmFsIHZhbHVlIHdlIHNldCBpcyB0aGVyZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjMyS0VZIiwgUXVlcnlWYWx1ZShrZXksICIiKSkKKyAgICAgICAgICAgICAgICAjIFNldCBhIG5ldyB2YWx1ZSwgd2hpY2ggd2lsbCBnZXQgcmVmbGVjdGVkIHRvIDMyLWJpdAorICAgICAgICAgICAgICAgIFNldFZhbHVlRXgoa2V5LCAiIiwgMCwgUkVHX1NaLCAiNjRLRVkiKQorCisgICAgICAgICAgICAjIFJlZmxlY3Rpb24gdXNlcyBhICJsYXN0LXdyaXRlciB3aW5zIHBvbGljeSwgc28gdGhlIHZhbHVlIHdlIHNldAorICAgICAgICAgICAgIyBvbiB0aGUgNjQtYml0IGtleSBzaG91bGQgYmUgdGhlIHNhbWUgb24gMzItYml0CisgICAgICAgICAgICB3aXRoIE9wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUkVBRCB8IEtFWV9XT1c2NF8zMktFWSkgYXMga2V5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjY0S0VZIiwgUXVlcnlWYWx1ZShrZXksICIiKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIERlbGV0ZUtleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBLRVlfV09XNjRfMzJLRVksIDApCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfUkVGTEVDVElPTiwgIk9TIGRvZXNuJ3Qgc3VwcG9ydCByZWZsZWN0aW9uIikKKyAgICBkZWYgdGVzdF9kaXNhYmxlX3JlZmxlY3Rpb24oc2VsZik6CisgICAgICAgICMgTWFrZSB1c2Ugb2YgYSBrZXkgd2hpY2ggZ2V0cyByZWRpcmVjdGVkIGFuZCByZWZsZWN0ZWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBDcmVhdGVLZXlFeChIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUyB8IEtFWV9XT1c2NF8zMktFWSkgYXMgY3JlYXRlZF9rZXk6CisgICAgICAgICAgICAgICAgIyBRdWVyeVJlZmxlY3Rpb25LZXkgcmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUga2V5IGlzIGRpc2FibGVkCisgICAgICAgICAgICAgICAgZGlzYWJsZWQgPSBRdWVyeVJlZmxlY3Rpb25LZXkoY3JlYXRlZF9rZXkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGRpc2FibGVkKSwgYm9vbCkKKyAgICAgICAgICAgICAgICAjIEhLQ1VcU29mdHdhcmVcQ2xhc3NlcyBpcyByZWZsZWN0ZWQgYnkgZGVmYXVsdAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGlzYWJsZWQpCisKKyAgICAgICAgICAgICAgICBEaXNhYmxlUmVmbGVjdGlvbktleShjcmVhdGVkX2tleSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoUXVlcnlSZWZsZWN0aW9uS2V5KGNyZWF0ZWRfa2V5KSkKKworICAgICAgICAgICAgIyBUaGUga2V5IGlzIG5vdyBjbG9zZWQgYW5kIHdvdWxkIG5vcm1hbGx5IGJlIHJlZmxlY3RlZCB0byB0aGUKKyAgICAgICAgICAgICMgNjQtYml0IGFyZWEsIGJ1dCBsZXQncyBtYWtlIHN1cmUgdGhhdCBkaWRuJ3QgaGFwcGVuLgorICAgICAgICAgICAgb3Blbl9mYWlsID0gbGFtYmRhOiBPcGVuS2V5RXgoSEtFWV9DVVJSRU5UX1VTRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUkVBRCB8IEtFWV9XT1c2NF82NEtFWSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3Blbl9mYWlsKQorCisgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgMzItYml0IGtleSBpcyBhY3R1YWxseSB0aGVyZQorICAgICAgICAgICAgd2l0aCBPcGVuS2V5RXgoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9SRUFEIHwgS0VZX1dPVzY0XzMyS0VZKSBhcyBrZXk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkuaGFuZGxlLCAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgRGVsZXRlS2V5RXgoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9XT1c2NF8zMktFWSwgMCkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbl9udW1iZXJzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvcikgYXMgY3R4OgorICAgICAgICAgICAgUXVlcnlWYWx1ZShIS0VZX0NMQVNTRVNfUk9PVCwgJ3NvbWVfdmFsdWVfdGhhdF9kb2VzX25vdF9leGlzdCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZXhjZXB0aW9uLmVycm5vLCAyKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChMb2NhbFdpbnJlZ1Rlc3RzLCBSZW1vdGVXaW5yZWdUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbjY0V2lucmVnVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgaWYgbm90IFJFTU9URV9OQU1FOgorICAgICAgICBwcmludCAiUmVtb3RlIHJlZ2lzdHJ5IGNhbGxzIGNhbiBiZSB0ZXN0ZWQgdXNpbmciLAorICAgICAgICBwcmludCAiJ3Rlc3Rfd2lucmVnLnB5IC0tcmVtb3RlIFxcXFxtYWNoaW5lX25hbWUnIgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF93aW5zb3VuZC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dpbnNvdW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZGVjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF93aW5zb3VuZC5weQpAQCAtMCwwICsxLDI1NiBAQAorIyBSaWRpY3Vsb3VzbHkgc2ltcGxlIHRlc3Qgb2YgdGhlIHdpbnNvdW5kIG1vZHVsZSBmb3IgV2luZG93cy4KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAordGVzdF9zdXBwb3J0LnJlcXVpcmVzKCdhdWRpbycpCitpbXBvcnQgdGltZQoraW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworCit3aW5zb3VuZCA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd3aW5zb3VuZCcpCitjdHlwZXMgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnY3R5cGVzJykKK2ltcG9ydCBfd2lucmVnCisKK2RlZiBoYXNfc291bmQoc291bmQpOgorICAgICIiIkZpbmQgb3V0IGlmIGEgcGFydGljdWxhciBldmVudCBpcyBjb25maWd1cmVkIHdpdGggYSBkZWZhdWx0IHNvdW5kIiIiCisgICAgdHJ5OgorICAgICAgICAjIEFzayB0aGUgbWl4ZXIgQVBJIGZvciB0aGUgbnVtYmVyIG9mIGRldmljZXMgaXQga25vd3MgYWJvdXQuCisgICAgICAgICMgV2hlbiB0aGVyZSBhcmUgbm8gZGV2aWNlcywgUGxheVNvdW5kIHdpbGwgZmFpbC4KKyAgICAgICAgaWYgY3R5cGVzLndpbmRsbC53aW5tbS5taXhlckdldE51bURldnMoKSBpcyAwOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAga2V5ID0gX3dpbnJlZy5PcGVuS2V5RXgoX3dpbnJlZy5IS0VZX0NVUlJFTlRfVVNFUiwKKyAgICAgICAgICAgICAgICAiQXBwRXZlbnRzXFNjaGVtZXNcQXBwc1wuRGVmYXVsdFx7MH1cLkRlZmF1bHQiLmZvcm1hdChzb3VuZCkpCisgICAgICAgIHZhbHVlID0gX3dpbnJlZy5FbnVtVmFsdWUoa2V5LCAwKVsxXQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgdSIiOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorCitjbGFzcyBCZWVwVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBBcyB3aXRoIFBsYXlTb3VuZFRlc3QsIGluY29ycG9yYXRlIHRoZSBfaGF2ZV9zb3VuZGNhcmQoKSBjaGVjaworICAgICMgaW50byBvdXIgdGVzdCBtZXRob2RzLiAgSWYgdGhlcmUncyBubyBhdWRpbyBkZXZpY2UgcHJlc2VudCwKKyAgICAjIHdpbnNvdW5kLkJlZXAgcmV0dXJucyAwIGFuZCBHZXRMYXN0RXJyb3IoKSByZXR1cm5zIDEyNywgd2hpY2gKKyAgICAjIGlzOiBFUlJPUl9QUk9DX05PVF9GT1VORCAoIlRoZSBzcGVjaWZpZWQgcHJvY2VkdXJlIGNvdWxkIG5vdAorICAgICMgYmUgZm91bmQiKS4gIChGV0lXLCB2aXJ0dWFsL0h5cGVyLVYgc3lzdGVtcyBmYWxsIHVuZGVyIHRoaXMKKyAgICAjIHNjZW5hcmlvIGFzIHRoZXkgaGF2ZSBubyBzb3VuZCBkZXZpY2VzIHdoYXRzb2V2ZXIgIChub3QgZXZlbgorICAgICMgYSBsZWdhY3kgQmVlcCBkZXZpY2UpLikKKworICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3aW5zb3VuZC5CZWVwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB3aW5zb3VuZC5CZWVwLCAzNiwgNzUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHdpbnNvdW5kLkJlZXAsIDMyNzY4LCA3NSkKKworICAgIGRlZiB0ZXN0X2V4dHJlbWVzKHNlbGYpOgorICAgICAgICBzZWxmLl9iZWVwKDM3LCA3NSkKKyAgICAgICAgc2VsZi5fYmVlcCgzMjc2NywgNzUpCisKKyAgICBkZWYgdGVzdF9pbmNyZWFzaW5nZnJlcXVlbmN5KHNlbGYpOgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoMTAwLCAyMDAwLCAxMDApOgorICAgICAgICAgICAgc2VsZi5fYmVlcChpLCA3NSkKKworICAgIGRlZiBfYmVlcChzZWxmLCAqYXJncyk6CisgICAgICAgICMgdGhlc2UgdGVzdHMgdXNlZCB0byB1c2UgX2hhdmVfc291bmRjYXJkKCksIGJ1dCBpdCdzIHF1aXRlCisgICAgICAgICMgcG9zc2libGUgdG8gaGF2ZSBhIHNvdW5kY2FyZCwgYW5kIHlldCBoYXZlIHRoZSBiZWVwIGRyaXZlcgorICAgICAgICAjIGRpc2FibGVkLiBTbyBiYXNpY2FsbHksIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgd2hldGhlcgorICAgICAgICAjIGEgYmVlcCBzaG91bGQgYmUgcHJvZHVjZWQgb3Igbm90LCBzbyBjdXJyZW50bHkgaWYgdGhlc2UKKyAgICAgICAgIyB0ZXN0cyBmYWlsIHdlJ3JlIGlnbm9yaW5nIHRoZW0KKyAgICAgICAgIworICAgICAgICAjIFhYWCB0aGUgcmlnaHQgZml4IGZvciB0aGlzIGlzIHRvIGRlZmluZSBzb21ldGhpbmcgbGlrZQorICAgICAgICAjIF9oYXZlX2VuYWJsZWRfYmVlcF9kcml2ZXIoKSBhbmQgdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUKKyAgICAgICAgIyB0cnkvZXhjZXB0IGJlbG93CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpbnNvdW5kLkJlZXAoKmFyZ3MpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKK2NsYXNzIE1lc3NhZ2VCZWVwVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRpbWUuc2xlZXAoMC41KQorCisgICAgZGVmIHRlc3RfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3aW5zb3VuZC5NZXNzYWdlQmVlcCwgImJhZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgd2luc291bmQuTWVzc2FnZUJlZXAsIDQyLCA0MikKKyAgICAgICAgd2luc291bmQuTWVzc2FnZUJlZXAoKQorCisgICAgZGVmIHRlc3Rfb2soc2VsZik6CisgICAgICAgIHdpbnNvdW5kLk1lc3NhZ2VCZWVwKHdpbnNvdW5kLk1CX09LKQorCisgICAgZGVmIHRlc3RfYXN0ZXJpc2soc2VsZik6CisgICAgICAgIHdpbnNvdW5kLk1lc3NhZ2VCZWVwKHdpbnNvdW5kLk1CX0lDT05BU1RFUklTSykKKworICAgIGRlZiB0ZXN0X2V4Y2xhbWF0aW9uKHNlbGYpOgorICAgICAgICB3aW5zb3VuZC5NZXNzYWdlQmVlcCh3aW5zb3VuZC5NQl9JQ09ORVhDTEFNQVRJT04pCisKKyAgICBkZWYgdGVzdF9oYW5kKHNlbGYpOgorICAgICAgICB3aW5zb3VuZC5NZXNzYWdlQmVlcCh3aW5zb3VuZC5NQl9JQ09OSEFORCkKKworICAgIGRlZiB0ZXN0X3F1ZXN0aW9uKHNlbGYpOgorICAgICAgICB3aW5zb3VuZC5NZXNzYWdlQmVlcCh3aW5zb3VuZC5NQl9JQ09OUVVFU1RJT04pCisKKworY2xhc3MgUGxheVNvdW5kVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgd2luc291bmQuUGxheVNvdW5kKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHdpbnNvdW5kLlBsYXlTb3VuZCwgImJhZCIsICJiYWQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgIHdpbnNvdW5kLlBsYXlTb3VuZCwKKyAgICAgICAgICAgICJub25lIiwgd2luc291bmQuU05EX0FTWU5DIHwgd2luc291bmQuU05EX01FTU9SWQorICAgICAgICApCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNfc291bmQoIlN5c3RlbUFzdGVyaXNrIiksICJObyBkZWZhdWx0IFN5c3RlbUFzdGVyaXNrIikKKyAgICBkZWYgdGVzdF9hbGlhc19hc3RlcmlzayhzZWxmKToKKyAgICAgICAgaWYgX2hhdmVfc291bmRjYXJkKCk6CisgICAgICAgICAgICB3aW5zb3VuZC5QbGF5U291bmQoJ1N5c3RlbUFzdGVyaXNrJywgd2luc291bmQuU05EX0FMSUFTKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgIHdpbnNvdW5kLlBsYXlTb3VuZCwKKyAgICAgICAgICAgICAgICAnU3lzdGVtQXN0ZXJpc2snLCB3aW5zb3VuZC5TTkRfQUxJQVMKKyAgICAgICAgICAgICkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc19zb3VuZCgiU3lzdGVtRXhjbGFtYXRpb24iKSwgIk5vIGRlZmF1bHQgU3lzdGVtRXhjbGFtYXRpb24iKQorICAgIGRlZiB0ZXN0X2FsaWFzX2V4Y2xhbWF0aW9uKHNlbGYpOgorICAgICAgICBpZiBfaGF2ZV9zb3VuZGNhcmQoKToKKyAgICAgICAgICAgIHdpbnNvdW5kLlBsYXlTb3VuZCgnU3lzdGVtRXhjbGFtYXRpb24nLCB3aW5zb3VuZC5TTkRfQUxJQVMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kLAorICAgICAgICAgICAgICAgICdTeXN0ZW1FeGNsYW1hdGlvbicsIHdpbnNvdW5kLlNORF9BTElBUworICAgICAgICAgICAgKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzX3NvdW5kKCJTeXN0ZW1FeGl0IiksICJObyBkZWZhdWx0IFN5c3RlbUV4aXQiKQorICAgIGRlZiB0ZXN0X2FsaWFzX2V4aXQoc2VsZik6CisgICAgICAgIGlmIF9oYXZlX3NvdW5kY2FyZCgpOgorICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kKCdTeXN0ZW1FeGl0Jywgd2luc291bmQuU05EX0FMSUFTKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgIHdpbnNvdW5kLlBsYXlTb3VuZCwKKyAgICAgICAgICAgICAgICAnU3lzdGVtRXhpdCcsIHdpbnNvdW5kLlNORF9BTElBUworICAgICAgICAgICAgKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzX3NvdW5kKCJTeXN0ZW1IYW5kIiksICJObyBkZWZhdWx0IFN5c3RlbUhhbmQiKQorICAgIGRlZiB0ZXN0X2FsaWFzX2hhbmQoc2VsZik6CisgICAgICAgIGlmIF9oYXZlX3NvdW5kY2FyZCgpOgorICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kKCdTeXN0ZW1IYW5kJywgd2luc291bmQuU05EX0FMSUFTKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgIHdpbnNvdW5kLlBsYXlTb3VuZCwKKyAgICAgICAgICAgICAgICAnU3lzdGVtSGFuZCcsIHdpbnNvdW5kLlNORF9BTElBUworICAgICAgICAgICAgKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzX3NvdW5kKCJTeXN0ZW1RdWVzdGlvbiIpLCAiTm8gZGVmYXVsdCBTeXN0ZW1RdWVzdGlvbiIpCisgICAgZGVmIHRlc3RfYWxpYXNfcXVlc3Rpb24oc2VsZik6CisgICAgICAgIGlmIF9oYXZlX3NvdW5kY2FyZCgpOgorICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kKCdTeXN0ZW1RdWVzdGlvbicsIHdpbnNvdW5kLlNORF9BTElBUykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICB3aW5zb3VuZC5QbGF5U291bmQsCisgICAgICAgICAgICAgICAgJ1N5c3RlbVF1ZXN0aW9uJywgd2luc291bmQuU05EX0FMSUFTCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9hbGlhc19mYWxsYmFjayhzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3QgY2FuJ3QgYmUgZXhwZWN0ZWQgdG8gd29yayBvbiBhbGwgc3lzdGVtcy4gIFRoZSBNUworICAgICAgICAjIFBsYXlTb3VuZCgpIGRvY3Mgc2F5OgorICAgICAgICAjCisgICAgICAgICMgICAgIElmIGl0IGNhbm5vdCBmaW5kIHRoZSBzcGVjaWZpZWQgc291bmQsIFBsYXlTb3VuZCB1c2VzIHRoZQorICAgICAgICAjICAgICBkZWZhdWx0IHN5c3RlbSBldmVudCBzb3VuZCBlbnRyeSBpbnN0ZWFkLiAgSWYgdGhlIGZ1bmN0aW9uCisgICAgICAgICMgICAgIGNhbiBmaW5kIG5laXRoZXIgdGhlIHN5c3RlbSBkZWZhdWx0IGVudHJ5IG5vciB0aGUgZGVmYXVsdAorICAgICAgICAjICAgICBzb3VuZCwgaXQgbWFrZXMgbm8gc291bmQgYW5kIHJldHVybnMgRkFMU0UuCisgICAgICAgICMKKyAgICAgICAgIyBJdCdzIGtub3duIHRvIHJldHVybiBGQUxTRSBvbiBzb21lIHJlYWwgc3lzdGVtcy4KKworICAgICAgICAjIHdpbnNvdW5kLlBsYXlTb3VuZCgnISIkJSYvKCMrKicsIHdpbnNvdW5kLlNORF9BTElBUykKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgdGVzdF9hbGlhc19ub2ZhbGxiYWNrKHNlbGYpOgorICAgICAgICBpZiBfaGF2ZV9zb3VuZGNhcmQoKToKKyAgICAgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIGFzc2VydGluZyBSdW50aW1lRXJyb3IKKyAgICAgICAgICAgICMgd2lsbCBnZXQgcmFpc2VkOiAgeW91IGNhbm5vdCBjb252ZXJ0IHRoaXMgdG8KKyAgICAgICAgICAgICMgc2VsZi5hc3NlcnRSYWlzZXMoLi4uKSBmb3JtLiAgVGhlIGF0dGVtcHQgbWF5IG9yIG1heSBub3QKKyAgICAgICAgICAgICMgcmFpc2UgUnVudGltZUVycm9yLCBidXQgaXQgc2hvdWxkbid0IHJhaXNlIGFueXRoaW5nIG90aGVyCisgICAgICAgICAgICAjIHRoYW4gUnVudGltZUVycm9yLCBhbmQgdGhhdCdzIGFsbCB3ZSdyZSB0cnlpbmcgdG8gdGVzdAorICAgICAgICAgICAgIyBoZXJlLiAgVGhlIE1TIGRvY3MgYXJlbid0IGNsZWFyIGFib3V0IHdoZXRoZXIgdGhlIFNESworICAgICAgICAgICAgIyBQbGF5U291bmQoKSB3aXRoIFNORF9BTElBUyBhbmQgU05EX05PREVGQVVMVCB3aWxsIHJldHVybgorICAgICAgICAgICAgIyBUcnVlIG9yIEZhbHNlIHdoZW4gdGhlIGFsaWFzIGlzIHVua25vd24uICBPbiBUaW0ncyBXaW5YUAorICAgICAgICAgICAgIyBib3ggdG9kYXksIGl0IHJldHVybnMgVHJ1ZSAobm8gZXhjZXB0aW9uIGlzIHJhaXNlZCkuICBXaGF0CisgICAgICAgICAgICAjIHdlJ2QgcmVhbGx5IGxpa2UgdG8gdGVzdCBpcyB0aGF0IG5vIHNvdW5kIGlzIHBsYXllZCwgYnV0CisgICAgICAgICAgICAjIHRoYXQgcmVxdWlyZXMgZmlyc3Qgd2lyaW5nIGFuIGVhcmRydW0gY2xhc3MgaW50byB1bml0dGVzdAorICAgICAgICAgICAgIyA8d2luaz4uCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kKAorICAgICAgICAgICAgICAgICAgICAnISIkJSYvKCMrKicsCisgICAgICAgICAgICAgICAgICAgIHdpbnNvdW5kLlNORF9BTElBUyB8IHdpbnNvdW5kLlNORF9OT0RFRkFVTFQKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICB3aW5zb3VuZC5QbGF5U291bmQsCisgICAgICAgICAgICAgICAgJyEiJCUmLygjKyonLCB3aW5zb3VuZC5TTkRfQUxJQVMgfCB3aW5zb3VuZC5TTkRfTk9ERUZBVUxUCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9zdG9wYXN5bmMoc2VsZik6CisgICAgICAgIGlmIF9oYXZlX3NvdW5kY2FyZCgpOgorICAgICAgICAgICAgd2luc291bmQuUGxheVNvdW5kKAorICAgICAgICAgICAgICAgICdTeXN0ZW1RdWVzdGlvbicsCisgICAgICAgICAgICAgICAgd2luc291bmQuU05EX0FMSUFTIHwgd2luc291bmQuU05EX0FTWU5DIHwgd2luc291bmQuU05EX0xPT1AKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC41KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpbnNvdW5kLlBsYXlTb3VuZCgKKyAgICAgICAgICAgICAgICAgICAgJ1N5c3RlbVF1ZXN0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgd2luc291bmQuU05EX0FMSUFTIHwgd2luc291bmQuU05EX05PU1RPUAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZTogIyB0aGUgZmlyc3Qgc291bmQgbWlnaHQgYWxyZWFkeSBiZSBmaW5pc2hlZAorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHdpbnNvdW5kLlBsYXlTb3VuZChOb25lLCB3aW5zb3VuZC5TTkRfUFVSR0UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIElzc3VlIDgzNjc6IFBsYXlTb3VuZChOb25lLCB3aW5zb3VuZC5TTkRfUFVSR0UpCisgICAgICAgICAgICAjIGRvZXMgbm90IHJhaXNlIG9uIHN5c3RlbXMgd2l0aG91dCBhIHNvdW5kIGNhcmQuCisgICAgICAgICAgICBwYXNzCisKKworZGVmIF9nZXRfY3NjcmlwdF9wYXRoKCk6CisgICAgIiIiUmV0dXJuIHRoZSBmdWxsIHBhdGggdG8gY3NjcmlwdC5leGUgb3IgTm9uZS4iIiIKKyAgICBmb3IgZGlyIGluIG9zLmVudmlyb24uZ2V0KCJQQVRIIiwgIiIpLnNwbGl0KG9zLnBhdGhzZXApOgorICAgICAgICBjc2NyaXB0X3BhdGggPSBvcy5wYXRoLmpvaW4oZGlyLCAiY3NjcmlwdC5leGUiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjc2NyaXB0X3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuIGNzY3JpcHRfcGF0aAorCitfX2hhdmVfc291bmRjYXJkX2NhY2hlID0gTm9uZQorZGVmIF9oYXZlX3NvdW5kY2FyZCgpOgorICAgICIiIlJldHVybiBUcnVlIGlmZiB0aGlzIGNvbXB1dGVyIGhhcyBhIHNvdW5kY2FyZC4iIiIKKyAgICBnbG9iYWwgX19oYXZlX3NvdW5kY2FyZF9jYWNoZQorICAgIGlmIF9faGF2ZV9zb3VuZGNhcmRfY2FjaGUgaXMgTm9uZToKKyAgICAgICAgY3NjcmlwdF9wYXRoID0gX2dldF9jc2NyaXB0X3BhdGgoKQorICAgICAgICBpZiBjc2NyaXB0X3BhdGggaXMgTm9uZToKKyAgICAgICAgICAgICMgQ291bGQgbm90IGZpbmQgY3NjcmlwdC5leGUgdG8gcnVuIG91ciBWQlNjcmlwdCBoZWxwZXIuIERlZmF1bHQKKyAgICAgICAgICAgICMgdG8gVHJ1ZTogbW9zdCBjb21wdXRlcnMgdGhlc2UgZGF5cyAqZG8qIGhhdmUgYSBzb3VuZGNhcmQuCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGNoZWNrX3NjcmlwdCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoZWNrX3NvdW5kY2FyZC52YnMiKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbY3NjcmlwdF9wYXRoLCBjaGVja19zY3JpcHRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBfX2hhdmVfc291bmRjYXJkX2NhY2hlID0gbm90IHAud2FpdCgpCisgICAgcmV0dXJuIF9faGF2ZV9zb3VuZGNhcmRfY2FjaGUKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChCZWVwVGVzdCwgTWVzc2FnZUJlZXBUZXN0LCBQbGF5U291bmRUZXN0KQorCitpZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfd2l0aC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dpdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk2NDUxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3dpdGgucHkKQEAgLTAsMCArMSw3NTAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisiIiJVbml0IHRlc3RzIGZvciB0aGUgd2l0aCBzdGF0ZW1lbnQgc3BlY2lmaWVkIGluIFBFUCAzNDMuIiIiCisKKworX19hdXRob3JfXyA9ICJNaWtlIEJsYW5kIgorX19lbWFpbF9fID0gIm1ibGFuZCBhdCBhY20gZG90IG9yZyIKKworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQorZnJvbSBjb250ZXh0bGliIGltcG9ydCBHZW5lcmF0b3JDb250ZXh0TWFuYWdlciwgY29udGV4dG1hbmFnZXIKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCisKK2NsYXNzIE1vY2tDb250ZXh0TWFuYWdlcihHZW5lcmF0b3JDb250ZXh0TWFuYWdlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdlbik6CisgICAgICAgIEdlbmVyYXRvckNvbnRleHRNYW5hZ2VyLl9faW5pdF9fKHNlbGYsIGdlbikKKyAgICAgICAgc2VsZi5lbnRlcl9jYWxsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmV4aXRfY2FsbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5leGl0X2FyZ3MgPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLmVudGVyX2NhbGxlZCA9IFRydWUKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvckNvbnRleHRNYW5hZ2VyLl9fZW50ZXJfXyhzZWxmKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICBzZWxmLmV4aXRfY2FsbGVkID0gVHJ1ZQorICAgICAgICBzZWxmLmV4aXRfYXJncyA9ICh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKQorICAgICAgICByZXR1cm4gR2VuZXJhdG9yQ29udGV4dE1hbmFnZXIuX19leGl0X18oc2VsZiwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCB0cmFjZWJhY2spCisKKworZGVmIG1vY2tfY29udGV4dG1hbmFnZXIoZnVuYyk6CisgICAgZGVmIGhlbHBlcigqYXJncywgKiprd2RzKToKKyAgICAgICAgcmV0dXJuIE1vY2tDb250ZXh0TWFuYWdlcihmdW5jKCphcmdzLCAqKmt3ZHMpKQorICAgIHJldHVybiBoZWxwZXIKKworCitjbGFzcyBNb2NrUmVzb3VyY2Uob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYueWllbGRlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuc3RvcHBlZCA9IEZhbHNlCisKKworQG1vY2tfY29udGV4dG1hbmFnZXIKK2RlZiBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpOgorICAgIG1vY2sgPSBNb2NrUmVzb3VyY2UoKQorICAgIHRyeToKKyAgICAgICAgbW9jay55aWVsZGVkID0gVHJ1ZQorICAgICAgICB5aWVsZCBtb2NrCisgICAgZmluYWxseToKKyAgICAgICAgbW9jay5zdG9wcGVkID0gVHJ1ZQorCisKK2NsYXNzIE5lc3RlZChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICptYW5hZ2Vycyk6CisgICAgICAgIHNlbGYubWFuYWdlcnMgPSBtYW5hZ2VycworICAgICAgICBzZWxmLmVudGVyZWQgPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmVudGVyZWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNvbnRleHQgaXMgbm90IHJlZW50cmFudCIpCisgICAgICAgIHNlbGYuZW50ZXJlZCA9IGRlcXVlKCkKKyAgICAgICAgdmFycyA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBtZ3IgaW4gc2VsZi5tYW5hZ2VyczoKKyAgICAgICAgICAgICAgICB2YXJzLmFwcGVuZChtZ3IuX19lbnRlcl9fKCkpCisgICAgICAgICAgICAgICAgc2VsZi5lbnRlcmVkLmFwcGVuZGxlZnQobWdyKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fX2V4aXRfXygqc3lzLmV4Y19pbmZvKCkpOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiB2YXJzCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKToKKyAgICAgICAgIyBCZWhhdmUgbGlrZSBuZXN0ZWQgd2l0aCBzdGF0ZW1lbnRzCisgICAgICAgICMgZmlyc3QgaW4sIGxhc3Qgb3V0CisgICAgICAgICMgTmV3IGV4Y2VwdGlvbnMgb3ZlcnJpZGUgb2xkIG9uZXMKKyAgICAgICAgZXggPSBleGNfaW5mbworICAgICAgICBmb3IgbWdyIGluIHNlbGYuZW50ZXJlZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBtZ3IuX19leGl0X18oKmV4KToKKyAgICAgICAgICAgICAgICAgICAgZXggPSAoTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBleCA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIHNlbGYuZW50ZXJlZCA9IE5vbmUKKyAgICAgICAgaWYgZXggaXMgbm90IGV4Y19pbmZvOgorICAgICAgICAgICAgcmFpc2UgZXhbMF0sIGV4WzFdLCBleFsyXQorCisKK2NsYXNzIE1vY2tOZXN0ZWQoTmVzdGVkKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKm1hbmFnZXJzKToKKyAgICAgICAgTmVzdGVkLl9faW5pdF9fKHNlbGYsICptYW5hZ2VycykKKyAgICAgICAgc2VsZi5lbnRlcl9jYWxsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmV4aXRfY2FsbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5leGl0X2FyZ3MgPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLmVudGVyX2NhbGxlZCA9IFRydWUKKyAgICAgICAgcmV0dXJuIE5lc3RlZC5fX2VudGVyX18oc2VsZikKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgorICAgICAgICBzZWxmLmV4aXRfY2FsbGVkID0gVHJ1ZQorICAgICAgICBzZWxmLmV4aXRfYXJncyA9IGV4Y19pbmZvCisgICAgICAgIHJldHVybiBOZXN0ZWQuX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKQorCisKK2NsYXNzIEZhaWx1cmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3ROYW1lRXJyb3Ioc2VsZik6CisgICAgICAgIGRlZiBmb29Ob3REZWNsYXJlZCgpOgorICAgICAgICAgICAgd2l0aCBmb286IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yLCBmb29Ob3REZWNsYXJlZCkKKworICAgIGRlZiB0ZXN0RW50ZXJBdHRyaWJ1dGVFcnJvcihzZWxmKToKKyAgICAgICAgY2xhc3MgTGFja3NFbnRlcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgZm9vTGFja3NFbnRlcigpOgorICAgICAgICAgICAgZm9vID0gTGFja3NFbnRlcigpCisgICAgICAgICAgICB3aXRoIGZvbzogcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZm9vTGFja3NFbnRlcikKKworICAgIGRlZiB0ZXN0RXhpdEF0dHJpYnV0ZUVycm9yKHNlbGYpOgorICAgICAgICBjbGFzcyBMYWNrc0V4aXQob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGRlZiBmb29MYWNrc0V4aXQoKToKKyAgICAgICAgICAgIGZvbyA9IExhY2tzRXhpdCgpCisgICAgICAgICAgICB3aXRoIGZvbzogcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZm9vTGFja3NFeGl0KQorCisgICAgZGVmIGFzc2VydFJhaXNlc1N5bnRheEVycm9yKHNlbGYsIGNvZGVzdHIpOgorICAgICAgICBkZWYgc2hvdWxkUmFpc2VTeW50YXhFcnJvcihzKToKKyAgICAgICAgICAgIGNvbXBpbGUocywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgc2hvdWxkUmFpc2VTeW50YXhFcnJvciwgY29kZXN0cikKKworICAgIGRlZiB0ZXN0QXNzaWdubWVudFRvTm9uZUVycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1N5bnRheEVycm9yKCd3aXRoIG1vY2sgYXMgTm9uZTpcbiAgcGFzcycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzU3ludGF4RXJyb3IoCisgICAgICAgICAgICAnd2l0aCBtb2NrIGFzIChOb25lKTpcbicKKyAgICAgICAgICAgICcgIHBhc3MnKQorCisgICAgZGVmIHRlc3RBc3NpZ25tZW50VG9FbXB0eVR1cGxlRXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzU3ludGF4RXJyb3IoCisgICAgICAgICAgICAnd2l0aCBtb2NrIGFzICgpOlxuJworICAgICAgICAgICAgJyAgcGFzcycpCisKKyAgICBkZWYgdGVzdEFzc2lnbm1lbnRUb1R1cGxlT25seUNvbnRhaW5pbmdOb25lRXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzU3ludGF4RXJyb3IoJ3dpdGggbW9jayBhcyBOb25lLDpcbiAgcGFzcycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzU3ludGF4RXJyb3IoCisgICAgICAgICAgICAnd2l0aCBtb2NrIGFzIChOb25lLCk6XG4nCisgICAgICAgICAgICAnICBwYXNzJykKKworICAgIGRlZiB0ZXN0QXNzaWdubWVudFRvVHVwbGVDb250YWluaW5nTm9uZUVycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1N5bnRheEVycm9yKAorICAgICAgICAgICAgJ3dpdGggbW9jayBhcyAoZm9vLCBOb25lLCBiYXIpOlxuJworICAgICAgICAgICAgJyAgcGFzcycpCisKKyAgICBkZWYgdGVzdEVudGVyVGhyb3dzKHNlbGYpOgorICAgICAgICBjbGFzcyBFbnRlclRocm93cyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkVudGVyIHRocmV3IikKKyAgICAgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGRlZiBzaG91bGRUaHJvdygpOgorICAgICAgICAgICAgY3QgPSBFbnRlclRocm93cygpCisgICAgICAgICAgICBzZWxmLmZvbyA9IE5vbmUKKyAgICAgICAgICAgIHdpdGggY3QgYXMgc2VsZi5mb286CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNob3VsZFRocm93KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZm9vLCBOb25lKQorCisgICAgZGVmIHRlc3RFeGl0VGhyb3dzKHNlbGYpOgorICAgICAgICBjbGFzcyBFeGl0VGhyb3dzKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoNDIpCisgICAgICAgIGRlZiBzaG91bGRUaHJvdygpOgorICAgICAgICAgICAgd2l0aCBFeGl0VGhyb3dzKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNob3VsZFRocm93KQorCitjbGFzcyBDb250ZXh0bWFuYWdlckFzc2VydGlvbk1peGluKG9iamVjdCk6CisgICAgVEVTVF9FWENFUFRJT04gPSBSdW50aW1lRXJyb3IoInRlc3QgZXhjZXB0aW9uIikKKworICAgIGRlZiBhc3NlcnRJbldpdGhNYW5hZ2VySW52YXJpYW50cyhzZWxmLCBtb2NrX21hbmFnZXIpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUobW9ja19tYW5hZ2VyLmVudGVyX2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtb2NrX21hbmFnZXIuZXhpdF9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9ja19tYW5hZ2VyLmV4aXRfYXJncywgTm9uZSkKKworICAgIGRlZiBhc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50cyhzZWxmLCBtb2NrX21hbmFnZXIsIGV4aXRfYXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2NrX21hbmFnZXIuZW50ZXJfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobW9ja19tYW5hZ2VyLmV4aXRfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2tfbWFuYWdlci5leGl0X2FyZ3MsIGV4aXRfYXJncykKKworICAgIGRlZiBhc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c05vRXJyb3Ioc2VsZiwgbW9ja19tYW5hZ2VyKToKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50cyhtb2NrX21hbmFnZXIsCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgTm9uZSkpCisKKyAgICBkZWYgYXNzZXJ0SW5XaXRoR2VuZXJhdG9ySW52YXJpYW50cyhzZWxmLCBtb2NrX2dlbmVyYXRvcik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2NrX2dlbmVyYXRvci55aWVsZGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1vY2tfZ2VuZXJhdG9yLnN0b3BwZWQpCisKKyAgICBkZWYgYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c05vRXJyb3Ioc2VsZiwgbW9ja19nZW5lcmF0b3IpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUobW9ja19nZW5lcmF0b3IueWllbGRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfZ2VuZXJhdG9yLnN0b3BwZWQpCisKKyAgICBkZWYgcmFpc2VUZXN0RXhjZXB0aW9uKHNlbGYpOgorICAgICAgICByYWlzZSBzZWxmLlRFU1RfRVhDRVBUSU9OCisKKyAgICBkZWYgYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNXaXRoRXJyb3Ioc2VsZiwgbW9ja19tYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNfdHlwZT1Ob25lKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfbWFuYWdlci5lbnRlcl9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2NrX21hbmFnZXIuZXhpdF9jYWxsZWQpCisgICAgICAgIGlmIGV4Y190eXBlIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2tfbWFuYWdlci5leGl0X2FyZ3NbMV0sIHNlbGYuVEVTVF9FWENFUFRJT04pCisgICAgICAgICAgICBleGNfdHlwZSA9IHR5cGUoc2VsZi5URVNUX0VYQ0VQVElPTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrX21hbmFnZXIuZXhpdF9hcmdzWzBdLCBleGNfdHlwZSkKKyAgICAgICAgIyBUZXN0IHRoZSBfX2V4aXRfXyBhcmd1bWVudHMuIElzc3VlICM3ODUzCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtb2NrX21hbmFnZXIuZXhpdF9hcmdzWzFdLCBleGNfdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtb2NrX21hbmFnZXIuZXhpdF9hcmdzWzJdLCBOb25lKQorCisgICAgZGVmIGFzc2VydEFmdGVyV2l0aEdlbmVyYXRvckludmFyaWFudHNXaXRoRXJyb3Ioc2VsZiwgbW9ja19nZW5lcmF0b3IpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUobW9ja19nZW5lcmF0b3IueWllbGRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfZ2VuZXJhdG9yLnN0b3BwZWQpCisKKworY2xhc3MgTm9uZXhjZXB0aW9uYWxUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSwgQ29udGV4dG1hbmFnZXJBc3NlcnRpb25NaXhpbik6CisgICAgZGVmIHRlc3RJbmxpbmVHZW5lcmF0b3JTeW50YXgoc2VsZik6CisgICAgICAgIHdpdGggbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKToKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0VW5ib3VuZEdlbmVyYXRvcihzZWxmKToKKyAgICAgICAgbW9jayA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKKyAgICAgICAgd2l0aCBtb2NrOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzTm9FcnJvcihtb2NrKQorCisgICAgZGVmIHRlc3RJbmxpbmVHZW5lcmF0b3JCb3VuZFN5bnRheChzZWxmKToKKyAgICAgICAgd2l0aCBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpIGFzIGZvbzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoR2VuZXJhdG9ySW52YXJpYW50cyhmb28pCisgICAgICAgICMgRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlJ2xsIHRyeSB0byBrZWVwIHRoZSBib3VuZCBuYW1lcyBmcm9tIGxlYWtpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzTm9FcnJvcihmb28pCisKKyAgICBkZWYgdGVzdElubGluZUdlbmVyYXRvckJvdW5kVG9FeGlzdGluZ1ZhcmlhYmxlKHNlbGYpOgorICAgICAgICBmb28gPSBOb25lCisgICAgICAgIHdpdGggbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKSBhcyBmb286CisgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aEdlbmVyYXRvckludmFyaWFudHMoZm9vKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aEdlbmVyYXRvckludmFyaWFudHNOb0Vycm9yKGZvbykKKworICAgIGRlZiB0ZXN0SW5saW5lR2VuZXJhdG9yQm91bmRUb0RvdHRlZFZhcmlhYmxlKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkgYXMgc2VsZi5mb286CisgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aEdlbmVyYXRvckludmFyaWFudHMoc2VsZi5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c05vRXJyb3Ioc2VsZi5mb28pCisKKyAgICBkZWYgdGVzdEJvdW5kR2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBtb2NrID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQorICAgICAgICB3aXRoIG1vY2sgYXMgZm9vOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzKGZvbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobW9jaykKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzTm9FcnJvcihmb28pCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNOb0Vycm9yKG1vY2spCisKKyAgICBkZWYgdGVzdE5lc3RlZFNpbmdsZVN0YXRlbWVudHMoc2VsZik6CisgICAgICAgIG1vY2tfYSA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKKyAgICAgICAgd2l0aCBtb2NrX2EgYXMgZm9vOgorICAgICAgICAgICAgbW9ja19iID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQorICAgICAgICAgICAgd2l0aCBtb2NrX2IgYXMgYmFyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobW9ja19hKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobW9ja19iKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoR2VuZXJhdG9ySW52YXJpYW50cyhmb28pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzKGJhcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNOb0Vycm9yKG1vY2tfYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c05vRXJyb3IoYmFyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhNYW5hZ2VySW52YXJpYW50cyhtb2NrX2EpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aEdlbmVyYXRvckludmFyaWFudHMoZm9vKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzTm9FcnJvcihtb2NrX2EpCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c05vRXJyb3IoZm9vKQorCisKK2NsYXNzIE5lc3RlZE5vbmV4Y2VwdGlvbmFsVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UsCisgICAgQ29udGV4dG1hbmFnZXJBc3NlcnRpb25NaXhpbik6CisgICAgZGVmIHRlc3RTaW5nbGVBcmdJbmxpbmVHZW5lcmF0b3JTeW50YXgoc2VsZik6CisgICAgICAgIHdpdGggTmVzdGVkKG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkpOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RTaW5nbGVBcmdCb3VuZFRvTm9uVHVwbGUoc2VsZik6CisgICAgICAgIG0gPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCisgICAgICAgICMgVGhpcyB3aWxsIGJpbmQgYWxsIHRoZSBhcmd1bWVudHMgdG8gbmVzdGVkKCkgaW50byBhIHNpbmdsZSBsaXN0CisgICAgICAgICMgYXNzaWduZWQgdG8gZm9vLgorICAgICAgICB3aXRoIE5lc3RlZChtKSBhcyBmb286CisgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNOb0Vycm9yKG0pCisKKyAgICBkZWYgdGVzdFNpbmdsZUFyZ0JvdW5kVG9TaW5nbGVFbGVtZW50UGFyZW50aGVzaXplZExpc3Qoc2VsZik6CisgICAgICAgIG0gPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCisgICAgICAgICMgVGhpcyB3aWxsIGJpbmQgYWxsIHRoZSBhcmd1bWVudHMgdG8gbmVzdGVkKCkgaW50byBhIHNpbmdsZSBsaXN0CisgICAgICAgICMgYXNzaWduZWQgdG8gZm9vLgorICAgICAgICB3aXRoIE5lc3RlZChtKSBhcyAoZm9vKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobSkKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c05vRXJyb3IobSkKKworICAgIGRlZiB0ZXN0U2luZ2xlQXJnQm91bmRUb011bHRpcGxlRWxlbWVudFR1cGxlRXJyb3Ioc2VsZik6CisgICAgICAgIGRlZiBzaG91bGRUaHJvd1ZhbHVlRXJyb3IoKToKKyAgICAgICAgICAgIHdpdGggTmVzdGVkKG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkpIGFzIChmb28sIGJhcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzaG91bGRUaHJvd1ZhbHVlRXJyb3IpCisKKyAgICBkZWYgdGVzdFNpbmdsZUFyZ1VuYm91bmQoc2VsZik6CisgICAgICAgIG1vY2tfY29udGV4dG1hbmFnZXIgPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCisgICAgICAgIG1vY2tfbmVzdGVkID0gTW9ja05lc3RlZChtb2NrX2NvbnRleHRtYW5hZ2VyKQorICAgICAgICB3aXRoIG1vY2tfbmVzdGVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhNYW5hZ2VySW52YXJpYW50cyhtb2NrX2NvbnRleHRtYW5hZ2VyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhNYW5hZ2VySW52YXJpYW50cyhtb2NrX25lc3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c05vRXJyb3IobW9ja19jb250ZXh0bWFuYWdlcikKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c05vRXJyb3IobW9ja19uZXN0ZWQpCisKKyAgICBkZWYgdGVzdE11bHRpcGxlQXJnVW5ib3VuZChzZWxmKToKKyAgICAgICAgbSA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKKyAgICAgICAgbiA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKKyAgICAgICAgbyA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKKyAgICAgICAgbW9ja19uZXN0ZWQgPSBNb2NrTmVzdGVkKG0sIG4sIG8pCisgICAgICAgIHdpdGggbW9ja19uZXN0ZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKG0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKG4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKG1vY2tfbmVzdGVkKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzTm9FcnJvcihtKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzTm9FcnJvcihuKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzTm9FcnJvcihvKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzTm9FcnJvcihtb2NrX25lc3RlZCkKKworICAgIGRlZiB0ZXN0TXVsdGlwbGVBcmdCb3VuZChzZWxmKToKKyAgICAgICAgbW9ja19uZXN0ZWQgPSBNb2NrTmVzdGVkKG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCksCisgICAgICAgICAgICBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpLCBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpKQorICAgICAgICB3aXRoIG1vY2tfbmVzdGVkIGFzIChtLCBuLCBvKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoR2VuZXJhdG9ySW52YXJpYW50cyhtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzKG4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aEdlbmVyYXRvckludmFyaWFudHMobykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobW9ja19uZXN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c05vRXJyb3IobSkKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzTm9FcnJvcihuKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aEdlbmVyYXRvckludmFyaWFudHNOb0Vycm9yKG8pCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNOb0Vycm9yKG1vY2tfbmVzdGVkKQorCisKK2NsYXNzIEV4Y2VwdGlvbmFsVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UsIENvbnRleHRtYW5hZ2VyQXNzZXJ0aW9uTWl4aW4pOgorICAgIGRlZiB0ZXN0U2luZ2xlUmVzb3VyY2Uoc2VsZik6CisgICAgICAgIGNtID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQorICAgICAgICBkZWYgc2hvdWxkVGhyb3coKToKKyAgICAgICAgICAgIHdpdGggY20gYXMgc2VsZi5yZXNvdXJjZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKGNtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoR2VuZXJhdG9ySW52YXJpYW50cyhzZWxmLnJlc291cmNlKQorICAgICAgICAgICAgICAgIHNlbGYucmFpc2VUZXN0RXhjZXB0aW9uKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzaG91bGRUaHJvdykKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c1dpdGhFcnJvcihjbSkKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzV2l0aEVycm9yKHNlbGYucmVzb3VyY2UpCisKKyAgICBkZWYgdGVzdEV4Y2VwdGlvbk5vcm1hbGl6ZWQoc2VsZik6CisgICAgICAgIGNtID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQorICAgICAgICBkZWYgc2hvdWxkVGhyb3coKToKKyAgICAgICAgICAgIHdpdGggY20gYXMgc2VsZi5yZXNvdXJjZToKKyAgICAgICAgICAgICAgICAjIE5vdGUgdGhpcyByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCAxIC8vIDAgcHJvZHVjZXMgYW4gZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgIyB0aGF0IGlzIG5vdCBub3JtYWxpemVkIGltbWVkaWF0ZWx5LgorICAgICAgICAgICAgICAgIDEgLy8gMAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2hvdWxkVGhyb3cpCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNXaXRoRXJyb3IoY20sIFplcm9EaXZpc2lvbkVycm9yKQorCisgICAgZGVmIHRlc3ROZXN0ZWRTaW5nbGVTdGF0ZW1lbnRzKHNlbGYpOgorICAgICAgICBtb2NrX2EgPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCisgICAgICAgIG1vY2tfYiA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKKyAgICAgICAgZGVmIHNob3VsZFRocm93KCk6CisgICAgICAgICAgICB3aXRoIG1vY2tfYSBhcyBzZWxmLmZvbzoKKyAgICAgICAgICAgICAgICB3aXRoIG1vY2tfYiBhcyBzZWxmLmJhcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhNYW5hZ2VySW52YXJpYW50cyhtb2NrX2EpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobW9ja19iKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aEdlbmVyYXRvckludmFyaWFudHMoc2VsZi5mb28pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoR2VuZXJhdG9ySW52YXJpYW50cyhzZWxmLmJhcikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yYWlzZVRlc3RFeGNlcHRpb24oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNob3VsZFRocm93KQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzV2l0aEVycm9yKG1vY2tfYSkKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c1dpdGhFcnJvcihtb2NrX2IpCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c1dpdGhFcnJvcihzZWxmLmZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzV2l0aEVycm9yKHNlbGYuYmFyKQorCisgICAgZGVmIHRlc3RNdWx0aXBsZVJlc291cmNlc0luU2luZ2xlU3RhdGVtZW50KHNlbGYpOgorICAgICAgICBjbV9hID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQorICAgICAgICBjbV9iID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQorICAgICAgICBtb2NrX25lc3RlZCA9IE1vY2tOZXN0ZWQoY21fYSwgY21fYikKKyAgICAgICAgZGVmIHNob3VsZFRocm93KCk6CisgICAgICAgICAgICB3aXRoIG1vY2tfbmVzdGVkIGFzIChzZWxmLnJlc291cmNlX2EsIHNlbGYucmVzb3VyY2VfYik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhNYW5hZ2VySW52YXJpYW50cyhjbV9hKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMoY21fYikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKG1vY2tfbmVzdGVkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoR2VuZXJhdG9ySW52YXJpYW50cyhzZWxmLnJlc291cmNlX2EpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzKHNlbGYucmVzb3VyY2VfYikKKyAgICAgICAgICAgICAgICBzZWxmLnJhaXNlVGVzdEV4Y2VwdGlvbigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2hvdWxkVGhyb3cpCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNXaXRoRXJyb3IoY21fYSkKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c1dpdGhFcnJvcihjbV9iKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzV2l0aEVycm9yKG1vY2tfbmVzdGVkKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aEdlbmVyYXRvckludmFyaWFudHNXaXRoRXJyb3Ioc2VsZi5yZXNvdXJjZV9hKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aEdlbmVyYXRvckludmFyaWFudHNXaXRoRXJyb3Ioc2VsZi5yZXNvdXJjZV9iKQorCisgICAgZGVmIHRlc3ROZXN0ZWRFeGNlcHRpb25CZWZvcmVJbm5lclN0YXRlbWVudChzZWxmKToKKyAgICAgICAgbW9ja19hID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQorICAgICAgICBtb2NrX2IgPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCisgICAgICAgIHNlbGYuYmFyID0gTm9uZQorICAgICAgICBkZWYgc2hvdWxkVGhyb3coKToKKyAgICAgICAgICAgIHdpdGggbW9ja19hIGFzIHNlbGYuZm9vOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobW9ja19hKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoR2VuZXJhdG9ySW52YXJpYW50cyhzZWxmLmZvbykKKyAgICAgICAgICAgICAgICBzZWxmLnJhaXNlVGVzdEV4Y2VwdGlvbigpCisgICAgICAgICAgICAgICAgd2l0aCBtb2NrX2IgYXMgc2VsZi5iYXI6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzaG91bGRUaHJvdykKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c1dpdGhFcnJvcihtb2NrX2EpCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c1dpdGhFcnJvcihzZWxmLmZvbykKKworICAgICAgICAjIFRoZSBpbm5lciBzdGF0ZW1lbnQgc3R1ZmYgc2hvdWxkIG5ldmVyIGhhdmUgYmVlbiB0b3VjaGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iYXIsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobW9ja19iLmVudGVyX2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtb2NrX2IuZXhpdF9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9ja19iLmV4aXRfYXJncywgTm9uZSkKKworICAgIGRlZiB0ZXN0TmVzdGVkRXhjZXB0aW9uQWZ0ZXJJbm5lclN0YXRlbWVudChzZWxmKToKKyAgICAgICAgbW9ja19hID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQorICAgICAgICBtb2NrX2IgPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCisgICAgICAgIGRlZiBzaG91bGRUaHJvdygpOgorICAgICAgICAgICAgd2l0aCBtb2NrX2EgYXMgc2VsZi5mb286CisgICAgICAgICAgICAgICAgd2l0aCBtb2NrX2IgYXMgc2VsZi5iYXI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobW9ja19hKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aE1hbmFnZXJJbnZhcmlhbnRzKG1vY2tfYikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzKHNlbGYuZm9vKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluV2l0aEdlbmVyYXRvckludmFyaWFudHMoc2VsZi5iYXIpCisgICAgICAgICAgICAgICAgc2VsZi5yYWlzZVRlc3RFeGNlcHRpb24oKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNob3VsZFRocm93KQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzV2l0aEVycm9yKG1vY2tfYSkKKyAgICAgICAgc2VsZi5hc3NlcnRBZnRlcldpdGhNYW5hZ2VySW52YXJpYW50c05vRXJyb3IobW9ja19iKQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aEdlbmVyYXRvckludmFyaWFudHNXaXRoRXJyb3Ioc2VsZi5mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c05vRXJyb3Ioc2VsZi5iYXIpCisKKyAgICBkZWYgdGVzdFJhaXNlZFN0b3BJdGVyYXRpb24xKHNlbGYpOgorICAgICAgICAjIEZyb20gYnVnIDE0NjI0ODUKKyAgICAgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiBjbSgpOgorICAgICAgICAgICAgeWllbGQKKworICAgICAgICBkZWYgc2hvdWxkVGhyb3coKToKKyAgICAgICAgICAgIHdpdGggY20oKToKKyAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKCJmcm9tIHdpdGgiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIHNob3VsZFRocm93KQorCisgICAgZGVmIHRlc3RSYWlzZWRTdG9wSXRlcmF0aW9uMihzZWxmKToKKyAgICAgICAgIyBGcm9tIGJ1ZyAxNDYyNDg1CisgICAgICAgIGNsYXNzIGNtKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVmIHNob3VsZFRocm93KCk6CisgICAgICAgICAgICB3aXRoIGNtKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbigiZnJvbSB3aXRoIikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBzaG91bGRUaHJvdykKKworICAgIGRlZiB0ZXN0UmFpc2VkU3RvcEl0ZXJhdGlvbjMoc2VsZik6CisgICAgICAgICMgQW5vdGhlciB2YXJpYW50IHdoZXJlIHRoZSBleGNlcHRpb24gaGFzbid0IGJlZW4gaW5zdGFudGlhdGVkCisgICAgICAgICMgRnJvbSBidWcgMTcwNTE3MAorICAgICAgICBAY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIGNtKCk6CisgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIGRlZiBzaG91bGRUaHJvdygpOgorICAgICAgICAgICAgd2l0aCBjbSgpOgorICAgICAgICAgICAgICAgIHJhaXNlIGl0ZXIoW10pLm5leHQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIHNob3VsZFRocm93KQorCisgICAgZGVmIHRlc3RSYWlzZWRHZW5lcmF0b3JFeGl0MShzZWxmKToKKyAgICAgICAgIyBGcm9tIGJ1ZyAxNDYyNDg1CisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgY20oKToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgZGVmIHNob3VsZFRocm93KCk6CisgICAgICAgICAgICB3aXRoIGNtKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgR2VuZXJhdG9yRXhpdCgiZnJvbSB3aXRoIikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhHZW5lcmF0b3JFeGl0LCBzaG91bGRUaHJvdykKKworICAgIGRlZiB0ZXN0UmFpc2VkR2VuZXJhdG9yRXhpdDIoc2VsZik6CisgICAgICAgICMgRnJvbSBidWcgMTQ2MjQ4NQorICAgICAgICBjbGFzcyBjbSAob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgc2hvdWxkVGhyb3coKToKKyAgICAgICAgICAgIHdpdGggY20oKToKKyAgICAgICAgICAgICAgICByYWlzZSBHZW5lcmF0b3JFeGl0KCJmcm9tIHdpdGgiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEdlbmVyYXRvckV4aXQsIHNob3VsZFRocm93KQorCisgICAgZGVmIHRlc3RFcnJvcnNJbkJvb2woc2VsZik6CisgICAgICAgICMgaXNzdWU0NTg5OiBfX2V4aXRfXyByZXR1cm4gY29kZSBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uCisgICAgICAgICMgd2hlbiBsb29raW5nIGF0IGl0cyB0cnV0aCB2YWx1ZS4KKworICAgICAgICBjbGFzcyBjbShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJvb2xfY29udmVyc2lvbik6CisgICAgICAgICAgICAgICAgY2xhc3MgQm9vbDoKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvb2xfY29udmVyc2lvbigpCisgICAgICAgICAgICAgICAgc2VsZi5leGl0X3Jlc3VsdCA9IEJvb2woKQorICAgICAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMworICAgICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGEsIGIsIGMpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmV4aXRfcmVzdWx0CisKKyAgICAgICAgZGVmIHRydWVBc0Jvb2woKToKKyAgICAgICAgICAgIHdpdGggY20obGFtYmRhOiBUcnVlKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBOT1Qgc2VlIHRoaXMiKQorICAgICAgICB0cnVlQXNCb29sKCkKKworICAgICAgICBkZWYgZmFsc2VBc0Jvb2woKToKKyAgICAgICAgICAgIHdpdGggY20obGFtYmRhOiBGYWxzZSk6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgcmFpc2UiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgZmFsc2VBc0Jvb2wpCisKKyAgICAgICAgZGVmIGZhaWxBc0Jvb2woKToKKyAgICAgICAgICAgIHdpdGggY20obGFtYmRhOiAxIC8vIDApOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIE5PVCBzZWUgdGhpcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBmYWlsQXNCb29sKQorCisKK2NsYXNzIE5vbkxvY2FsRmxvd0NvbnRyb2xUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdFdpdGhCcmVhayhzZWxmKToKKyAgICAgICAgY291bnRlciA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGNvdW50ZXIgKz0gMQorICAgICAgICAgICAgd2l0aCBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpOgorICAgICAgICAgICAgICAgIGNvdW50ZXIgKz0gMTAKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgY291bnRlciArPSAxMDAgIyBOb3QgcmVhY2hlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50ZXIsIDExKQorCisgICAgZGVmIHRlc3RXaXRoQ29udGludWUoc2VsZik6CisgICAgICAgIGNvdW50ZXIgPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBjb3VudGVyICs9IDEKKyAgICAgICAgICAgIGlmIGNvdW50ZXIgPiAyOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB3aXRoIG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCk6CisgICAgICAgICAgICAgICAgY291bnRlciArPSAxMAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBjb3VudGVyICs9IDEwMCAjIE5vdCByZWFjaGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRlciwgMTIpCisKKyAgICBkZWYgdGVzdFdpdGhSZXR1cm4oc2VsZik6CisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGNvdW50ZXIgPSAwCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGNvdW50ZXIgKz0gMQorICAgICAgICAgICAgICAgIHdpdGggbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKToKKyAgICAgICAgICAgICAgICAgICAgY291bnRlciArPSAxMAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY291bnRlcgorICAgICAgICAgICAgICAgIGNvdW50ZXIgKz0gMTAwICMgTm90IHJlYWNoZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28oKSwgMTEpCisKKyAgICBkZWYgdGVzdFdpdGhZaWVsZChzZWxmKToKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2l0aCBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpOgorICAgICAgICAgICAgICAgIHlpZWxkIDEyCisgICAgICAgICAgICAgICAgeWllbGQgMTMKKyAgICAgICAgeCA9IGxpc3QoZ2VuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgWzEyLCAxM10pCisKKyAgICBkZWYgdGVzdFdpdGhSYWlzZShzZWxmKToKKyAgICAgICAgY291bnRlciA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY291bnRlciArPSAxCisgICAgICAgICAgICB3aXRoIG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCk6CisgICAgICAgICAgICAgICAgY291bnRlciArPSAxMAorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICAgICAgY291bnRlciArPSAxMDAgIyBOb3QgcmVhY2hlZAorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudGVyLCAxMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IHJhaXNlIFJ1bnRpbWVFcnJvciIpCisKKworY2xhc3MgQXNzaWdubWVudFRhcmdldFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0U2luZ2xlQ29tcGxleFRhcmdldChzZWxmKToKKyAgICAgICAgdGFyZ2V0cyA9IHsxOiBbMCwgMSwgMl19CisgICAgICAgIHdpdGggbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKSBhcyB0YXJnZXRzWzFdWzBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJnZXRzLmtleXMoKSwgWzFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJnZXRzWzFdWzBdLl9fY2xhc3NfXywgTW9ja1Jlc291cmNlKQorICAgICAgICB3aXRoIG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkgYXMgdGFyZ2V0cy52YWx1ZXMoKVswXVsxXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyZ2V0cy5rZXlzKCksIFsxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyZ2V0c1sxXVsxXS5fX2NsYXNzX18sIE1vY2tSZXNvdXJjZSkKKyAgICAgICAgd2l0aCBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpIGFzIHRhcmdldHNbMl06CisgICAgICAgICAgICBrZXlzID0gdGFyZ2V0cy5rZXlzKCkKKyAgICAgICAgICAgIGtleXMuc29ydCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIFsxLCAyXSkKKyAgICAgICAgY2xhc3MgQzogcGFzcworICAgICAgICBibGFoID0gQygpCisgICAgICAgIHdpdGggbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKSBhcyBibGFoLmZvbzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzYXR0cihibGFoLCAiZm9vIiksIFRydWUpCisKKyAgICBkZWYgdGVzdE11bHRpcGxlQ29tcGxleFRhcmdldHMoc2VsZik6CisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOiByZXR1cm4gMSwgMiwgMworICAgICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHQsIHYsIHRiKTogcGFzcworICAgICAgICB0YXJnZXRzID0gezE6IFswLCAxLCAyXX0KKyAgICAgICAgd2l0aCBDKCkgYXMgKHRhcmdldHNbMV1bMF0sIHRhcmdldHNbMV1bMV0sIHRhcmdldHNbMV1bMl0pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJnZXRzLCB7MTogWzEsIDIsIDNdfSkKKyAgICAgICAgd2l0aCBDKCkgYXMgKHRhcmdldHMudmFsdWVzKClbMF1bMl0sIHRhcmdldHMudmFsdWVzKClbMF1bMV0sIHRhcmdldHMudmFsdWVzKClbMF1bMF0pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJnZXRzLCB7MTogWzMsIDIsIDFdfSkKKyAgICAgICAgd2l0aCBDKCkgYXMgKHRhcmdldHNbMV0sIHRhcmdldHNbMl0sIHRhcmdldHNbM10pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJnZXRzLCB7MTogMSwgMjogMiwgMzogM30pCisgICAgICAgIGNsYXNzIEI6IHBhc3MKKyAgICAgICAgYmxhaCA9IEIoKQorICAgICAgICB3aXRoIEMoKSBhcyAoYmxhaC5vbmUsIGJsYWgudHdvLCBibGFoLnRocmVlKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmxhaC5vbmUsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJsYWgudHdvLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChibGFoLnRocmVlLCAzKQorCisKK2NsYXNzIEV4aXRTd2FsbG93c0V4Y2VwdGlvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0RXhpdFRydWVTd2FsbG93c0V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgY2xhc3MgQWZyaWNhblN3YWxsb3c6CisgICAgICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgdCwgdiwgdGIpOiByZXR1cm4gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIEFmcmljYW5Td2FsbG93KCk6CisgICAgICAgICAgICAgICAgMSAvLyAwCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiWmVyb0RpdmlzaW9uRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiBzd2FsbG93ZWQiKQorCisgICAgZGVmIHRlc3RFeGl0RmFsc2VEb2VzbnRTd2FsbG93RXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBjbGFzcyBFdXJvcGVhblN3YWxsb3c6CisgICAgICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgdCwgdiwgdGIpOiByZXR1cm4gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBFdXJvcGVhblN3YWxsb3coKToKKyAgICAgICAgICAgICAgICAxIC8vIDAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJaZXJvRGl2aXNpb25FcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCIpCisKKworY2xhc3MgTmVzdGVkV2l0aCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBEdW1teShvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9Tm9uZSwgZ29iYmxlPUZhbHNlKToKKyAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmCisgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIHNlbGYuZ29iYmxlID0gZ29iYmxlCisgICAgICAgICAgICBzZWxmLmVudGVyX2NhbGxlZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLmV4aXRfY2FsbGVkID0gRmFsc2UKKworICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5lbnRlcl9jYWxsZWQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCisgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgorICAgICAgICAgICAgc2VsZi5leGl0X2NhbGxlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuZXhjX2luZm8gPSBleGNfaW5mbworICAgICAgICAgICAgaWYgc2VsZi5nb2JibGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGNsYXNzIEluaXRSYWlzZXMob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOiByYWlzZSBSdW50aW1lRXJyb3IoKQorCisgICAgY2xhc3MgRW50ZXJSYWlzZXMob2JqZWN0KToKKyAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKTogcmFpc2UgUnVudGltZUVycm9yKCkKKyAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6IHBhc3MKKworICAgIGNsYXNzIEV4aXRSYWlzZXMob2JqZWN0KToKKyAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKTogcGFzcworICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKTogcmFpc2UgUnVudGltZUVycm9yKCkKKworICAgIGRlZiB0ZXN0Tm9FeGNlcHRpb25zKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuRHVtbXkoKSBhcyBhLCBzZWxmLkR1bW15KCkgYXMgYjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmVudGVyX2NhbGxlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLmVudGVyX2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZXhpdF9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLmV4aXRfY2FsbGVkKQorCisgICAgZGVmIHRlc3RFeGNlcHRpb25JbkV4cHJMaXN0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuRHVtbXkoKSBhcyBhLCBzZWxmLkluaXRSYWlzZXMoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZW50ZXJfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5leGl0X2NhbGxlZCkKKworICAgIGRlZiB0ZXN0RXhjZXB0aW9uSW5FbnRlcihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLkR1bW15KCkgYXMgYSwgc2VsZi5FbnRlclJhaXNlcygpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnYm9keSBvZiBiYWQgd2l0aCBleGVjdXRlZCcpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1J1bnRpbWVFcnJvciBub3QgcmVyYWlzZWQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5lbnRlcl9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmV4aXRfY2FsbGVkKQorCisgICAgZGVmIHRlc3RFeGNlcHRpb25JbkV4aXQoc2VsZik6CisgICAgICAgIGJvZHlfZXhlY3V0ZWQgPSBGYWxzZQorICAgICAgICB3aXRoIHNlbGYuRHVtbXkoZ29iYmxlPVRydWUpIGFzIGEsIHNlbGYuRXhpdFJhaXNlcygpOgorICAgICAgICAgICAgYm9keV9leGVjdXRlZCA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZW50ZXJfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5leGl0X2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJvZHlfZXhlY3V0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYS5leGNfaW5mb1swXSwgTm9uZSkKKworICAgIGRlZiB0ZXN0RW50ZXJSZXR1cm5zVHVwbGUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5EdW1teSh2YWx1ZT0oMSwyKSkgYXMgKGExLCBhMiksIFwKKyAgICAgICAgICAgICBzZWxmLkR1bW15KHZhbHVlPSgxMCwgMjApKSBhcyAoYjEsIGIyKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgYTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGEyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxMCwgYjEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIwLCBiMikKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChGYWlsdXJlVGVzdENhc2UsIE5vbmV4Y2VwdGlvbmFsVGVzdENhc2UsCisgICAgICAgICAgICAgICAgIE5lc3RlZE5vbmV4Y2VwdGlvbmFsVGVzdENhc2UsIEV4Y2VwdGlvbmFsVGVzdENhc2UsCisgICAgICAgICAgICAgICAgIE5vbkxvY2FsRmxvd0NvbnRyb2xUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgQXNzaWdubWVudFRhcmdldFRlc3RDYXNlLAorICAgICAgICAgICAgICAgICBFeGl0U3dhbGxvd3NFeGNlcHRpb25UZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgTmVzdGVkV2l0aCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF93c2dpcmVmLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfd3NnaXJlZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2Q0Yzg2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3Rfd3NnaXJlZi5weQpAQCAtMCwwICsxLDU2MCBAQAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBuZXN0ZWRfc2NvcGVzICAgICMgQmFja3dhcmQgY29tcGF0IGZvciAyLjEKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCitmcm9tIHdzZ2lyZWYudXRpbCBpbXBvcnQgc2V0dXBfdGVzdGluZ19kZWZhdWx0cworZnJvbSB3c2dpcmVmLmhlYWRlcnMgaW1wb3J0IEhlYWRlcnMKK2Zyb20gd3NnaXJlZi5oYW5kbGVycyBpbXBvcnQgQmFzZUhhbmRsZXIsIEJhc2VDR0lIYW5kbGVyCitmcm9tIHdzZ2lyZWYgaW1wb3J0IHV0aWwKK2Zyb20gd3NnaXJlZi52YWxpZGF0ZSBpbXBvcnQgdmFsaWRhdG9yCitmcm9tIHdzZ2lyZWYuc2ltcGxlX3NlcnZlciBpbXBvcnQgV1NHSVNlcnZlciwgV1NHSVJlcXVlc3RIYW5kbGVyLCBkZW1vX2FwcAorZnJvbSB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIgaW1wb3J0IG1ha2Vfc2VydmVyCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSBTb2NrZXRTZXJ2ZXIgaW1wb3J0IEJhc2VTZXJ2ZXIKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2NsYXNzIE1vY2tTZXJ2ZXIoV1NHSVNlcnZlcik6CisgICAgIiIiTm9uLXNvY2tldCBIVFRQIHNlcnZlciIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl9hZGRyZXNzLCBSZXF1ZXN0SGFuZGxlckNsYXNzKToKKyAgICAgICAgQmFzZVNlcnZlci5fX2luaXRfXyhzZWxmLCBzZXJ2ZXJfYWRkcmVzcywgUmVxdWVzdEhhbmRsZXJDbGFzcykKKyAgICAgICAgc2VsZi5zZXJ2ZXJfYmluZCgpCisKKyAgICBkZWYgc2VydmVyX2JpbmQoc2VsZik6CisgICAgICAgIGhvc3QsIHBvcnQgPSBzZWxmLnNlcnZlcl9hZGRyZXNzCisgICAgICAgIHNlbGYuc2VydmVyX25hbWUgPSBob3N0CisgICAgICAgIHNlbGYuc2VydmVyX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuc2V0dXBfZW52aXJvbigpCisKKworY2xhc3MgTW9ja0hhbmRsZXIoV1NHSVJlcXVlc3RIYW5kbGVyKToKKyAgICAiIiJOb24tc29ja2V0IEhUVFAgaGFuZGxlciIiIgorICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gc2VsZi5yZXF1ZXN0CisgICAgICAgIHNlbGYucmZpbGUsIHNlbGYud2ZpbGUgPSBzZWxmLmNvbm5lY3Rpb24KKworICAgIGRlZiBmaW5pc2goc2VsZik6CisgICAgICAgIHBhc3MKKworCitkZWYgaGVsbG9fYXBwKGVudmlyb24sc3RhcnRfcmVzcG9uc2UpOgorICAgIHN0YXJ0X3Jlc3BvbnNlKCIyMDAgT0siLCBbCisgICAgICAgICgnQ29udGVudC1UeXBlJywndGV4dC9wbGFpbicpLAorICAgICAgICAoJ0RhdGUnLCdNb24sIDA1IEp1biAyMDA2IDE4OjQ5OjU0IEdNVCcpCisgICAgXSkKKyAgICByZXR1cm4gWyJIZWxsbywgd29ybGQhIl0KKworZGVmIHJ1bl9hbW9jayhhcHA9aGVsbG9fYXBwLCBkYXRhPSJHRVQgLyBIVFRQLzEuMFxuXG4iKToKKyAgICBzZXJ2ZXIgPSBtYWtlX3NlcnZlcigiIiwgODAsIGFwcCwgTW9ja1NlcnZlciwgTW9ja0hhbmRsZXIpCisgICAgaW5wLCBvdXQsIGVyciwgb2xkZXJyID0gU3RyaW5nSU8oZGF0YSksIFN0cmluZ0lPKCksIFN0cmluZ0lPKCksIHN5cy5zdGRlcnIKKyAgICBzeXMuc3RkZXJyID0gZXJyCisKKyAgICB0cnk6CisgICAgICAgIHNlcnZlci5maW5pc2hfcmVxdWVzdCgoaW5wLG91dCksICgiMTI3LjAuMC4xIiw4ODg4KSkKKyAgICBmaW5hbGx5OgorICAgICAgICBzeXMuc3RkZXJyID0gb2xkZXJyCisKKyAgICByZXR1cm4gb3V0LmdldHZhbHVlKCksIGVyci5nZXR2YWx1ZSgpCisKKworZGVmIGNvbXBhcmVfZ2VuZXJpY19pdGVyKG1ha2VfaXQsbWF0Y2gpOgorICAgICIiIlV0aWxpdHkgdG8gY29tcGFyZSBhIGdlbmVyaWMgMi4xLzIuMisgaXRlcmF0b3Igd2l0aCBhbiBpdGVyYWJsZQorCisgICAgSWYgcnVubmluZyB1bmRlciBQeXRob24gMi4yKywgdGhpcyB0ZXN0cyB0aGUgaXRlcmF0b3IgdXNpbmcgaXRlcigpL25leHQoKSwKKyAgICBhcyB3ZWxsIGFzIF9fZ2V0aXRlbV9fLiAgJ21ha2VfaXQnIG11c3QgYmUgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBmcmVzaAorICAgIGl0ZXJhdG9yIHRvIGJlIHRlc3RlZCAoc2luY2UgdGhpcyBtYXkgdGVzdCB0aGUgaXRlcmF0b3IgdHdpY2UpLiIiIgorCisgICAgaXQgPSBtYWtlX2l0KCkKKyAgICBuID0gMAorICAgIGZvciBpdGVtIGluIG1hdGNoOgorICAgICAgICBpZiBub3QgaXRbbl09PWl0ZW06IHJhaXNlIEFzc2VydGlvbkVycm9yCisgICAgICAgIG4rPTEKKyAgICB0cnk6CisgICAgICAgIGl0W25dCisgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVG9vIG1hbnkgaXRlbXMgZnJvbSBfX2dldGl0ZW1fXyIsaXQpCisKKyAgICB0cnk6CisgICAgICAgIGl0ZXIsIFN0b3BJdGVyYXRpb24KKyAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgIyBPbmx5IHRlc3QgaXRlciBtb2RlIHVuZGVyIDIuMisKKyAgICAgICAgaXQgPSBtYWtlX2l0KCkKKyAgICAgICAgaWYgbm90IGl0ZXIoaXQpIGlzIGl0OiByYWlzZSBBc3NlcnRpb25FcnJvcgorICAgICAgICBmb3IgaXRlbSBpbiBtYXRjaDoKKyAgICAgICAgICAgIGlmIG5vdCBpdC5uZXh0KCk9PWl0ZW06IHJhaXNlIEFzc2VydGlvbkVycm9yCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGl0Lm5leHQoKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJUb28gbWFueSBpdGVtcyBmcm9tIC5uZXh0KCkiLGl0KQorCisKK2NsYXNzIEludGVncmF0aW9uVGVzdHMoVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrX2hlbGxvKHNlbGYsIG91dCwgaGFzX2xlbmd0aD1UcnVlKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsCisgICAgICAgICAgICAiSFRUUC8xLjAgMjAwIE9LXHJcbiIKKyAgICAgICAgICAgICJTZXJ2ZXI6IFdTR0lTZXJ2ZXIvMC4xIFB5dGhvbi8iK3N5cy52ZXJzaW9uLnNwbGl0KClbMF0rIlxyXG4iCisgICAgICAgICAgICAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXHJcbiIKKyAgICAgICAgICAgICJEYXRlOiBNb24sIDA1IEp1biAyMDA2IDE4OjQ5OjU0IEdNVFxyXG4iICsKKyAgICAgICAgICAgIChoYXNfbGVuZ3RoIGFuZCAgIkNvbnRlbnQtTGVuZ3RoOiAxM1xyXG4iIG9yICIiKSArCisgICAgICAgICAgICAiXHJcbiIKKyAgICAgICAgICAgICJIZWxsbywgd29ybGQhIgorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9wbGFpbl9oZWxsbyhzZWxmKToKKyAgICAgICAgb3V0LCBlcnIgPSBydW5fYW1vY2soKQorICAgICAgICBzZWxmLmNoZWNrX2hlbGxvKG91dCkKKworICAgIGRlZiB0ZXN0X3ZhbGlkYXRlZF9oZWxsbyhzZWxmKToKKyAgICAgICAgb3V0LCBlcnIgPSBydW5fYW1vY2sodmFsaWRhdG9yKGhlbGxvX2FwcCkpCisgICAgICAgICMgdGhlIG1pZGRsZXdhcmUgZG9lc24ndCBzdXBwb3J0IGxlbigpLCBzbyBjb250ZW50LWxlbmd0aCBpc24ndCB0aGVyZQorICAgICAgICBzZWxmLmNoZWNrX2hlbGxvKG91dCwgaGFzX2xlbmd0aD1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV92YWxpZGF0aW9uX2Vycm9yKHNlbGYpOgorICAgICAgICBkZWYgYmFkX2FwcChlbnZpcm9uLHN0YXJ0X3Jlc3BvbnNlKToKKyAgICAgICAgICAgIHN0YXJ0X3Jlc3BvbnNlKCIyMDAgT0siLCAoJ0NvbnRlbnQtVHlwZScsJ3RleHQvcGxhaW4nKSkKKyAgICAgICAgICAgIHJldHVybiBbIkhlbGxvLCB3b3JsZCEiXQorICAgICAgICBvdXQsIGVyciA9IHJ1bl9hbW9jayh2YWxpZGF0b3IoYmFkX2FwcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuZW5kc3dpdGgoCisgICAgICAgICAgICAiQSBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuICBQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4iCisgICAgICAgICkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBlcnIuc3BsaXRsaW5lcygpWy0yXSwKKyAgICAgICAgICAgICJBc3NlcnRpb25FcnJvcjogSGVhZGVycyAoKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpKSBtdXN0IgorICAgICAgICAgICAgIiBiZSBvZiB0eXBlIGxpc3Q6IDx0eXBlICd0dXBsZSc+IgorICAgICAgICApCisKKworY2xhc3MgVXRpbGl0eVRlc3RzKFRlc3RDYXNlKToKKworICAgIGRlZiBjaGVja1NoaWZ0KHNlbGYsc25faW4scGlfaW4scGFydCxzbl9vdXQscGlfb3V0KToKKyAgICAgICAgZW52ID0geydTQ1JJUFRfTkFNRSc6c25faW4sJ1BBVEhfSU5GTyc6cGlfaW59CisgICAgICAgIHV0aWwuc2V0dXBfdGVzdGluZ19kZWZhdWx0cyhlbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXRpbC5zaGlmdF9wYXRoX2luZm8oZW52KSxwYXJ0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudlsnUEFUSF9JTkZPJ10scGlfb3V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudlsnU0NSSVBUX05BTUUnXSxzbl9vdXQpCisgICAgICAgIHJldHVybiBlbnYKKworICAgIGRlZiBjaGVja0RlZmF1bHQoc2VsZiwga2V5LCB2YWx1ZSwgYWx0PU5vbmUpOgorICAgICAgICAjIENoZWNrIGRlZmF1bHRpbmcgd2hlbiBlbXB0eQorICAgICAgICBlbnYgPSB7fQorICAgICAgICB1dGlsLnNldHVwX3Rlc3RpbmdfZGVmYXVsdHMoZW52KQorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBTdHJpbmdJTyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZW52W2tleV0sIFN0cmluZ0lPKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnZba2V5XSwgdmFsdWUpCisKKyAgICAgICAgIyBDaGVjayBleGlzdGluZyB2YWx1ZQorICAgICAgICBlbnYgPSB7a2V5OmFsdH0KKyAgICAgICAgdXRpbC5zZXR1cF90ZXN0aW5nX2RlZmF1bHRzKGVudikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudltrZXldIGlzIGFsdCkKKworICAgIGRlZiBjaGVja0Nyb3NzRGVmYXVsdChzZWxmLGtleSx2YWx1ZSwqKmt3KToKKyAgICAgICAgdXRpbC5zZXR1cF90ZXN0aW5nX2RlZmF1bHRzKGt3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGt3W2tleV0sdmFsdWUpCisKKyAgICBkZWYgY2hlY2tBcHBVUkkoc2VsZix1cmksKiprdyk6CisgICAgICAgIHV0aWwuc2V0dXBfdGVzdGluZ19kZWZhdWx0cyhrdykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1dGlsLmFwcGxpY2F0aW9uX3VyaShrdyksdXJpKQorCisgICAgZGVmIGNoZWNrUmVxVVJJKHNlbGYsdXJpLHF1ZXJ5PTEsKiprdyk6CisgICAgICAgIHV0aWwuc2V0dXBfdGVzdGluZ19kZWZhdWx0cyhrdykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1dGlsLnJlcXVlc3RfdXJpKGt3LHF1ZXJ5KSx1cmkpCisKKyAgICBkZWYgY2hlY2tGVyhzZWxmLHRleHQsc2l6ZSxtYXRjaCk6CisKKyAgICAgICAgZGVmIG1ha2VfaXQodGV4dD10ZXh0LHNpemU9c2l6ZSk6CisgICAgICAgICAgICByZXR1cm4gdXRpbC5GaWxlV3JhcHBlcihTdHJpbmdJTyh0ZXh0KSxzaXplKQorCisgICAgICAgIGNvbXBhcmVfZ2VuZXJpY19pdGVyKG1ha2VfaXQsbWF0Y2gpCisKKyAgICAgICAgaXQgPSBtYWtlX2l0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpdC5maWxlbGlrZS5jbG9zZWQpCisKKyAgICAgICAgZm9yIGl0ZW0gaW4gaXQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpdC5maWxlbGlrZS5jbG9zZWQpCisKKyAgICAgICAgaXQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXQuZmlsZWxpa2UuY2xvc2VkKQorCisgICAgZGVmIHRlc3RTaW1wbGVTaGlmdHMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tTaGlmdCgnJywnLycsICcnLCAnLycsICcnKQorICAgICAgICBzZWxmLmNoZWNrU2hpZnQoJycsJy94JywgJ3gnLCAnL3gnLCAnJykKKyAgICAgICAgc2VsZi5jaGVja1NoaWZ0KCcvJywnJywgTm9uZSwgJy8nLCAnJykKKyAgICAgICAgc2VsZi5jaGVja1NoaWZ0KCcvYScsJy94L3knLCAneCcsICcvYS94JywgJy95JykKKyAgICAgICAgc2VsZi5jaGVja1NoaWZ0KCcvYScsJy94LycsICAneCcsICcvYS94JywgJy8nKQorCisgICAgZGVmIHRlc3ROb3JtYWxpemVkU2hpZnRzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrU2hpZnQoJy9hL2InLCAnLy4uL3knLCAnLi4nLCAnL2EnLCAnL3knKQorICAgICAgICBzZWxmLmNoZWNrU2hpZnQoJycsICcvLi4veScsICcuLicsICcnLCAnL3knKQorICAgICAgICBzZWxmLmNoZWNrU2hpZnQoJy9hL2InLCAnLy95JywgJ3knLCAnL2EvYi95JywgJycpCisgICAgICAgIHNlbGYuY2hlY2tTaGlmdCgnL2EvYicsICcvL3kvJywgJ3knLCAnL2EvYi95JywgJy8nKQorICAgICAgICBzZWxmLmNoZWNrU2hpZnQoJy9hL2InLCAnLy4veScsICd5JywgJy9hL2IveScsICcnKQorICAgICAgICBzZWxmLmNoZWNrU2hpZnQoJy9hL2InLCAnLy4veS8nLCAneScsICcvYS9iL3knLCAnLycpCisgICAgICAgIHNlbGYuY2hlY2tTaGlmdCgnL2EvYicsICcvLy8uLy4uLy95Ly4vLycsICcuLicsICcvYScsICcveS8nKQorICAgICAgICBzZWxmLmNoZWNrU2hpZnQoJy9hL2InLCAnLy8vJywgJycsICcvYS9iLycsICcnKQorICAgICAgICBzZWxmLmNoZWNrU2hpZnQoJy9hL2InLCAnLy4vLycsICcnLCAnL2EvYi8nLCAnJykKKyAgICAgICAgc2VsZi5jaGVja1NoaWZ0KCcvYS9iJywgJy94Ly8nLCAneCcsICcvYS9iL3gnLCAnLycpCisgICAgICAgIHNlbGYuY2hlY2tTaGlmdCgnL2EvYicsICcvLicsIE5vbmUsICcvYS9iJywgJycpCisKKyAgICBkZWYgdGVzdERlZmF1bHRzKHNlbGYpOgorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBbCisgICAgICAgICAgICAoJ1NFUlZFUl9OQU1FJywnMTI3LjAuMC4xJyksCisgICAgICAgICAgICAoJ1NFUlZFUl9QT1JUJywgJzgwJyksCisgICAgICAgICAgICAoJ1NFUlZFUl9QUk9UT0NPTCcsJ0hUVFAvMS4wJyksCisgICAgICAgICAgICAoJ0hUVFBfSE9TVCcsJzEyNy4wLjAuMScpLAorICAgICAgICAgICAgKCdSRVFVRVNUX01FVEhPRCcsJ0dFVCcpLAorICAgICAgICAgICAgKCdTQ1JJUFRfTkFNRScsJycpLAorICAgICAgICAgICAgKCdQQVRIX0lORk8nLCcvJyksCisgICAgICAgICAgICAoJ3dzZ2kudmVyc2lvbicsICgxLDApKSwKKyAgICAgICAgICAgICgnd3NnaS5ydW5fb25jZScsIDApLAorICAgICAgICAgICAgKCd3c2dpLm11bHRpdGhyZWFkJywgMCksCisgICAgICAgICAgICAoJ3dzZ2kubXVsdGlwcm9jZXNzJywgMCksCisgICAgICAgICAgICAoJ3dzZ2kuaW5wdXQnLCBTdHJpbmdJTygiIikpLAorICAgICAgICAgICAgKCd3c2dpLmVycm9ycycsIFN0cmluZ0lPKCkpLAorICAgICAgICAgICAgKCd3c2dpLnVybF9zY2hlbWUnLCdodHRwJyksCisgICAgICAgIF06CisgICAgICAgICAgICBzZWxmLmNoZWNrRGVmYXVsdChrZXksdmFsdWUpCisKKyAgICBkZWYgdGVzdENyb3NzRGVmYXVsdHMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tDcm9zc0RlZmF1bHQoJ0hUVFBfSE9TVCcsImZvby5iYXIiLFNFUlZFUl9OQU1FPSJmb28uYmFyIikKKyAgICAgICAgc2VsZi5jaGVja0Nyb3NzRGVmYXVsdCgnd3NnaS51cmxfc2NoZW1lJywiaHR0cHMiLEhUVFBTPSJvbiIpCisgICAgICAgIHNlbGYuY2hlY2tDcm9zc0RlZmF1bHQoJ3dzZ2kudXJsX3NjaGVtZScsImh0dHBzIixIVFRQUz0iMSIpCisgICAgICAgIHNlbGYuY2hlY2tDcm9zc0RlZmF1bHQoJ3dzZ2kudXJsX3NjaGVtZScsImh0dHBzIixIVFRQUz0ieWVzIikKKyAgICAgICAgc2VsZi5jaGVja0Nyb3NzRGVmYXVsdCgnd3NnaS51cmxfc2NoZW1lJywiaHR0cCIsSFRUUFM9ImZvbyIpCisgICAgICAgIHNlbGYuY2hlY2tDcm9zc0RlZmF1bHQoJ1NFUlZFUl9QT1JUJywiODAiLEhUVFBTPSJmb28iKQorICAgICAgICBzZWxmLmNoZWNrQ3Jvc3NEZWZhdWx0KCdTRVJWRVJfUE9SVCcsIjQ0MyIsSFRUUFM9Im9uIikKKworICAgIGRlZiB0ZXN0R3Vlc3NTY2hlbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXRpbC5ndWVzc19zY2hlbWUoe30pLCAiaHR0cCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXRpbC5ndWVzc19zY2hlbWUoeydIVFRQUyc6ImZvbyJ9KSwgImh0dHAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHV0aWwuZ3Vlc3Nfc2NoZW1lKHsnSFRUUFMnOiJvbiJ9KSwgImh0dHBzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1dGlsLmd1ZXNzX3NjaGVtZSh7J0hUVFBTJzoieWVzIn0pLCAiaHR0cHMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHV0aWwuZ3Vlc3Nfc2NoZW1lKHsnSFRUUFMnOiIxIn0pLCAiaHR0cHMiKQorCisgICAgZGVmIHRlc3RBcHBVUklzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrQXBwVVJJKCJodHRwOi8vMTI3LjAuMC4xLyIpCisgICAgICAgIHNlbGYuY2hlY2tBcHBVUkkoImh0dHA6Ly8xMjcuMC4wLjEvc3BhbSIsIFNDUklQVF9OQU1FPSIvc3BhbSIpCisgICAgICAgIHNlbGYuY2hlY2tBcHBVUkkoImh0dHA6Ly9zcGFtLmV4YW1wbGUuY29tOjIwNzEvIiwKKyAgICAgICAgICAgIEhUVFBfSE9TVD0ic3BhbS5leGFtcGxlLmNvbToyMDcxIiwgU0VSVkVSX1BPUlQ9IjIwNzEiKQorICAgICAgICBzZWxmLmNoZWNrQXBwVVJJKCJodHRwOi8vc3BhbS5leGFtcGxlLmNvbS8iLAorICAgICAgICAgICAgU0VSVkVSX05BTUU9InNwYW0uZXhhbXBsZS5jb20iKQorICAgICAgICBzZWxmLmNoZWNrQXBwVVJJKCJodHRwOi8vMTI3LjAuMC4xLyIsCisgICAgICAgICAgICBIVFRQX0hPU1Q9IjEyNy4wLjAuMSIsIFNFUlZFUl9OQU1FPSJzcGFtLmV4YW1wbGUuY29tIikKKyAgICAgICAgc2VsZi5jaGVja0FwcFVSSSgiaHR0cHM6Ly8xMjcuMC4wLjEvIiwgSFRUUFM9Im9uIikKKyAgICAgICAgc2VsZi5jaGVja0FwcFVSSSgiaHR0cDovLzEyNy4wLjAuMTo4MDAwLyIsIFNFUlZFUl9QT1JUPSI4MDAwIiwKKyAgICAgICAgICAgIEhUVFBfSE9TVD1Ob25lKQorCisgICAgZGVmIHRlc3RSZXFVUklzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrUmVxVVJJKCJodHRwOi8vMTI3LjAuMC4xLyIpCisgICAgICAgIHNlbGYuY2hlY2tSZXFVUkkoImh0dHA6Ly8xMjcuMC4wLjEvc3BhbSIsIFNDUklQVF9OQU1FPSIvc3BhbSIpCisgICAgICAgIHNlbGYuY2hlY2tSZXFVUkkoImh0dHA6Ly8xMjcuMC4wLjEvc3BhbW1pdHkvc3BhbSIsCisgICAgICAgICAgICBTQ1JJUFRfTkFNRT0iL3NwYW1taXR5IiwgUEFUSF9JTkZPPSIvc3BhbSIpCisgICAgICAgIHNlbGYuY2hlY2tSZXFVUkkoImh0dHA6Ly8xMjcuMC4wLjEvc3BhbW1pdHkvc3BhbTtoYW0iLAorICAgICAgICAgICAgU0NSSVBUX05BTUU9Ii9zcGFtbWl0eSIsIFBBVEhfSU5GTz0iL3NwYW07aGFtIikKKyAgICAgICAgc2VsZi5jaGVja1JlcVVSSSgiaHR0cDovLzEyNy4wLjAuMS9zcGFtbWl0eS9zcGFtO2Nvb2tpZT0xMjM0LDU2NzgiLAorICAgICAgICAgICAgU0NSSVBUX05BTUU9Ii9zcGFtbWl0eSIsIFBBVEhfSU5GTz0iL3NwYW07Y29va2llPTEyMzQsNTY3OCIpCisgICAgICAgIHNlbGYuY2hlY2tSZXFVUkkoImh0dHA6Ly8xMjcuMC4wLjEvc3BhbW1pdHkvc3BhbT9zYXk9bmkiLAorICAgICAgICAgICAgU0NSSVBUX05BTUU9Ii9zcGFtbWl0eSIsIFBBVEhfSU5GTz0iL3NwYW0iLFFVRVJZX1NUUklORz0ic2F5PW5pIikKKyAgICAgICAgc2VsZi5jaGVja1JlcVVSSSgiaHR0cDovLzEyNy4wLjAuMS9zcGFtbWl0eS9zcGFtIiwgMCwKKyAgICAgICAgICAgIFNDUklQVF9OQU1FPSIvc3BhbW1pdHkiLCBQQVRIX0lORk89Ii9zcGFtIixRVUVSWV9TVFJJTkc9InNheT1uaSIpCisKKyAgICBkZWYgdGVzdEZpbGVXcmFwcGVyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrRlcoInh5eiIqNTAsIDEyMCwgWyJ4eXoiKjQwLCJ4eXoiKjEwXSkKKworICAgIGRlZiB0ZXN0SG9wQnlIb3Aoc2VsZik6CisgICAgICAgIGZvciBob3AgaW4gKAorICAgICAgICAgICAgIkNvbm5lY3Rpb24gS2VlcC1BbGl2ZSBQcm94eS1BdXRoZW50aWNhdGUgUHJveHktQXV0aG9yaXphdGlvbiAiCisgICAgICAgICAgICAiVEUgVHJhaWxlcnMgVHJhbnNmZXItRW5jb2RpbmcgVXBncmFkZSIKKyAgICAgICAgKS5zcGxpdCgpOgorICAgICAgICAgICAgZm9yIGFsdCBpbiBob3AsIGhvcC50aXRsZSgpLCBob3AudXBwZXIoKSwgaG9wLmxvd2VyKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHV0aWwuaXNfaG9wX2J5X2hvcChhbHQpKQorCisgICAgICAgICMgTm90IGNvbXByZWhlbnNpdmUsIGp1c3QgYSBmZXcgcmFuZG9tIGhlYWRlciBuYW1lcworICAgICAgICBmb3IgaG9wIGluICgKKyAgICAgICAgICAgICJBY2NlcHQgQ2FjaGUtQ29udHJvbCBEYXRlIFByYWdtYSBUcmFpbGVyIFZpYSBXYXJuaW5nIgorICAgICAgICApLnNwbGl0KCk6CisgICAgICAgICAgICBmb3IgYWx0IGluIGhvcCwgaG9wLnRpdGxlKCksIGhvcC51cHBlcigpLCBob3AubG93ZXIoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHV0aWwuaXNfaG9wX2J5X2hvcChhbHQpKQorCitjbGFzcyBIZWFkZXJUZXN0cyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdE1hcHBpbmdJbnRlcmZhY2Uoc2VsZik6CisgICAgICAgIHRlc3QgPSBbKCd4JywneScpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihIZWFkZXJzKFtdKSksMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oSGVhZGVycyh0ZXN0WzpdKSksMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChIZWFkZXJzKHRlc3RbOl0pLmtleXMoKSwgWyd4J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSGVhZGVycyh0ZXN0WzpdKS52YWx1ZXMoKSwgWyd5J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSGVhZGVycyh0ZXN0WzpdKS5pdGVtcygpLCB0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEhlYWRlcnModGVzdCkuaXRlbXMoKSBpcyB0ZXN0KSAgIyBtdXN0IGJlIGNvcHkhCisKKyAgICAgICAgaD1IZWFkZXJzKFtdKQorICAgICAgICBkZWwgaFsnZm9vJ10gICAjIHNob3VsZCBub3QgcmFpc2UgYW4gZXJyb3IKKworICAgICAgICBoWydGb28nXSA9ICdiYXInCisgICAgICAgIGZvciBtIGluIGguaGFzX2tleSwgaC5fX2NvbnRhaW5zX18sIGguZ2V0LCBoLmdldF9hbGwsIGguX19nZXRpdGVtX186CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSgnZm9vJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSgnRm9vJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSgnRk9PJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0oJ2JhcicpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaFsnZm9vJ10sJ2JhcicpCisgICAgICAgIGhbJ2ZvbyddID0gJ2JheicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoWydGT08nXSwnYmF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmdldF9hbGwoJ2ZvbycpLFsnYmF6J10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmdldCgiZm9vIiwid2hlZSIpLCAiYmF6IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmdldCgiem9vIiwid2hlZSIpLCAid2hlZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5zZXRkZWZhdWx0KCJmb28iLCJ3aGVlIiksICJiYXoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguc2V0ZGVmYXVsdCgiem9vIiwid2hlZSIpLCAid2hlZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaFsiZm9vIl0sImJheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaFsiem9vIl0sIndoZWUiKQorCisgICAgZGVmIHRlc3RSZXF1aXJlTGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBIZWFkZXJzLCAiZm9vIikKKworCisgICAgZGVmIHRlc3RFeHRyYXMoc2VsZik6CisgICAgICAgIGggPSBIZWFkZXJzKFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihoKSwnXHJcbicpCisKKyAgICAgICAgaC5hZGRfaGVhZGVyKCdmb28nLCdiYXInLGJhej0ic3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaFsnZm9vJ10sICdiYXI7IGJhej0ic3BhbSInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihoKSwnZm9vOiBiYXI7IGJhej0ic3BhbSJcclxuXHJcbicpCisKKyAgICAgICAgaC5hZGRfaGVhZGVyKCdGb28nLCdiYXInLGNoZWVzZT1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZ2V0X2FsbCgnZm9vJyksCisgICAgICAgICAgICBbJ2JhcjsgYmF6PSJzcGFtIicsICdiYXI7IGNoZWVzZSddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGgpLAorICAgICAgICAgICAgJ2ZvbzogYmFyOyBiYXo9InNwYW0iXHJcbicKKyAgICAgICAgICAgICdGb286IGJhcjsgY2hlZXNlXHJcbicKKyAgICAgICAgICAgICdcclxuJworICAgICAgICApCisKKworY2xhc3MgRXJyb3JIYW5kbGVyKEJhc2VDR0lIYW5kbGVyKToKKyAgICAiIiJTaW1wbGUgaGFuZGxlciBzdWJjbGFzcyBmb3IgdGVzdGluZyBCYXNlSGFuZGxlciIiIgorCisgICAgIyBCYXNlSGFuZGxlciByZWNvcmRzIHRoZSBPUyBlbnZpcm9ubWVudCBhdCBpbXBvcnQgdGltZSwgYnV0IGVudnZhcnMKKyAgICAjIG1pZ2h0IGhhdmUgYmVlbiBjaGFuZ2VkIGxhdGVyIGJ5IG90aGVyIHRlc3RzLCB3aGljaCB0cmlwcyB1cAorICAgICMgSGFuZGxlclRlc3RzLnRlc3RFbnZpcm9uKCkuCisgICAgb3NfZW52aXJvbiA9IGRpY3Qob3MuZW52aXJvbi5pdGVtcygpKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsKiprdyk6CisgICAgICAgIHNldHVwX3Rlc3RpbmdfZGVmYXVsdHMoa3cpCisgICAgICAgIEJhc2VDR0lIYW5kbGVyLl9faW5pdF9fKAorICAgICAgICAgICAgc2VsZiwgU3RyaW5nSU8oJycpLCBTdHJpbmdJTygpLCBTdHJpbmdJTygpLCBrdywKKyAgICAgICAgICAgIG11bHRpdGhyZWFkPVRydWUsIG11bHRpcHJvY2Vzcz1UcnVlCisgICAgICAgICkKKworY2xhc3MgVGVzdEhhbmRsZXIoRXJyb3JIYW5kbGVyKToKKyAgICAiIiJTaW1wbGUgaGFuZGxlciBzdWJjbGFzcyBmb3IgdGVzdGluZyBCYXNlSGFuZGxlciwgdy9lcnJvciBwYXNzdGhydSIiIgorCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgcmFpc2UgICAjIGZvciB0ZXN0aW5nLCB3ZSB3YW50IHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nCisKKworY2xhc3MgSGFuZGxlclRlc3RzKFRlc3RDYXNlKToKKworICAgIGRlZiBjaGVja0Vudmlyb25BdHRycyhzZWxmLCBoYW5kbGVyKToKKyAgICAgICAgZW52ID0gaGFuZGxlci5lbnZpcm9uCisgICAgICAgIGZvciBhdHRyIGluIFsKKyAgICAgICAgICAgICd2ZXJzaW9uJywnbXVsdGl0aHJlYWQnLCdtdWx0aXByb2Nlc3MnLCdydW5fb25jZScsJ2ZpbGVfd3JhcHBlcicKKyAgICAgICAgXToKKyAgICAgICAgICAgIGlmIGF0dHI9PSdmaWxlX3dyYXBwZXInIGFuZCBoYW5kbGVyLndzZ2lfZmlsZV93cmFwcGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihoYW5kbGVyLCd3c2dpXycrYXR0ciksZW52Wyd3c2dpLicrYXR0cl0pCisKKyAgICBkZWYgY2hlY2tPU0Vudmlyb24oc2VsZixoYW5kbGVyKToKKyAgICAgICAgZW1wdHkgPSB7fTsgc2V0dXBfdGVzdGluZ19kZWZhdWx0cyhlbXB0eSkKKyAgICAgICAgZW52ID0gaGFuZGxlci5lbnZpcm9uCisgICAgICAgIGZyb20gb3MgaW1wb3J0IGVudmlyb24KKyAgICAgICAgZm9yIGssdiBpbiBlbnZpcm9uLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBrIG5vdCBpbiBlbXB0eToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudltrXSx2KQorICAgICAgICBmb3Igayx2IGluIGVtcHR5Lml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGssIGVudikKKworICAgIGRlZiB0ZXN0RW52aXJvbihzZWxmKToKKyAgICAgICAgaCA9IFRlc3RIYW5kbGVyKFg9IlkiKQorICAgICAgICBoLnNldHVwX2Vudmlyb24oKQorICAgICAgICBzZWxmLmNoZWNrRW52aXJvbkF0dHJzKGgpCisgICAgICAgIHNlbGYuY2hlY2tPU0Vudmlyb24oaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmVudmlyb25bIlgiXSwiWSIpCisKKyAgICBkZWYgdGVzdENHSUVudmlyb24oc2VsZik6CisgICAgICAgIGggPSBCYXNlQ0dJSGFuZGxlcihOb25lLE5vbmUsTm9uZSx7fSkKKyAgICAgICAgaC5zZXR1cF9lbnZpcm9uKCkKKyAgICAgICAgZm9yIGtleSBpbiAnd3NnaS51cmxfc2NoZW1lJywgJ3dzZ2kuaW5wdXQnLCAnd3NnaS5lcnJvcnMnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIGguZW52aXJvbikKKworICAgIGRlZiB0ZXN0U2NoZW1lKHNlbGYpOgorICAgICAgICBoPVRlc3RIYW5kbGVyKEhUVFBTPSJvbiIpOyBoLnNldHVwX2Vudmlyb24oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZW52aXJvblsnd3NnaS51cmxfc2NoZW1lJ10sJ2h0dHBzJykKKyAgICAgICAgaD1UZXN0SGFuZGxlcigpOyBoLnNldHVwX2Vudmlyb24oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZW52aXJvblsnd3NnaS51cmxfc2NoZW1lJ10sJ2h0dHAnKQorCisgICAgZGVmIHRlc3RBYnN0cmFjdE1ldGhvZHMoc2VsZik6CisgICAgICAgIGggPSBCYXNlSGFuZGxlcigpCisgICAgICAgIGZvciBuYW1lIGluIFsKKyAgICAgICAgICAgICdfZmx1c2gnLCdnZXRfc3RkaW4nLCdnZXRfc3RkZXJyJywnYWRkX2NnaV92YXJzJworICAgICAgICBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgZ2V0YXR0cihoLG5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBoLl93cml0ZSwgInRlc3QiKQorCisgICAgZGVmIHRlc3RDb250ZW50TGVuZ3RoKHNlbGYpOgorICAgICAgICAjIERlbW8gb25lIHJlYXNvbiBpdGVyYXRpb24gaXMgYmV0dGVyIHRoYW4gd3JpdGUoKS4uLiAgOykKKworICAgICAgICBkZWYgdHJpdmlhbF9hcHAxKGUscyk6CisgICAgICAgICAgICBzKCcyMDAgT0snLFtdKQorICAgICAgICAgICAgcmV0dXJuIFtlWyd3c2dpLnVybF9zY2hlbWUnXV0KKworICAgICAgICBkZWYgdHJpdmlhbF9hcHAyKGUscyk6CisgICAgICAgICAgICBzKCcyMDAgT0snLFtdKShlWyd3c2dpLnVybF9zY2hlbWUnXSkKKyAgICAgICAgICAgIHJldHVybiBbXQorCisgICAgICAgIGRlZiB0cml2aWFsX2FwcDQoZSxzKToKKyAgICAgICAgICAgICMgU2ltdWxhdGUgYSByZXNwb25zZSB0byBhIEhFQUQgcmVxdWVzdAorICAgICAgICAgICAgcygnMjAwIE9LJyxbKCdDb250ZW50LUxlbmd0aCcsICcxMjM0NScpXSkKKyAgICAgICAgICAgIHJldHVybiBbXQorCisgICAgICAgIGggPSBUZXN0SGFuZGxlcigpCisgICAgICAgIGgucnVuKHRyaXZpYWxfYXBwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgIlN0YXR1czogMjAwIE9LXHJcbiIKKyAgICAgICAgICAgICJDb250ZW50LUxlbmd0aDogNFxyXG4iCisgICAgICAgICAgICAiXHJcbiIKKyAgICAgICAgICAgICJodHRwIikKKworICAgICAgICBoID0gVGVzdEhhbmRsZXIoKQorICAgICAgICBoLnJ1bih0cml2aWFsX2FwcDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5zdGRvdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICJTdGF0dXM6IDIwMCBPS1xyXG4iCisgICAgICAgICAgICAiXHJcbiIKKyAgICAgICAgICAgICJodHRwIikKKworCisgICAgICAgIGggPSBUZXN0SGFuZGxlcigpCisgICAgICAgIGgucnVuKHRyaXZpYWxfYXBwNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgYidTdGF0dXM6IDIwMCBPS1xyXG4nCisgICAgICAgICAgICBiJ0NvbnRlbnQtTGVuZ3RoOiAxMjM0NVxyXG4nCisgICAgICAgICAgICBiJ1xyXG4nKQorCisgICAgZGVmIHRlc3RCYXNpY0Vycm9yT3V0cHV0KHNlbGYpOgorCisgICAgICAgIGRlZiBub25fZXJyb3JfYXBwKGUscyk6CisgICAgICAgICAgICBzKCcyMDAgT0snLFtdKQorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgZGVmIGVycm9yX2FwcChlLHMpOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlRoaXMgc2hvdWxkIGJlIGNhdWdodCBieSBoYW5kbGVyIikKKworICAgICAgICBoID0gRXJyb3JIYW5kbGVyKCkKKyAgICAgICAgaC5ydW4obm9uX2Vycm9yX2FwcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnN0ZG91dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgIlN0YXR1czogMjAwIE9LXHJcbiIKKyAgICAgICAgICAgICJDb250ZW50LUxlbmd0aDogMFxyXG4iCisgICAgICAgICAgICAiXHJcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5zdGRlcnIuZ2V0dmFsdWUoKSwiIikKKworICAgICAgICBoID0gRXJyb3JIYW5kbGVyKCkKKyAgICAgICAgaC5ydW4oZXJyb3JfYXBwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguc3Rkb3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICAiU3RhdHVzOiAlc1xyXG4iCisgICAgICAgICAgICAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXHJcbiIKKyAgICAgICAgICAgICJDb250ZW50LUxlbmd0aDogJWRcclxuIgorICAgICAgICAgICAgIlxyXG4lcyIgJSAoaC5lcnJvcl9zdGF0dXMsbGVuKGguZXJyb3JfYm9keSksaC5lcnJvcl9ib2R5KSkKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGguc3RkZXJyLmdldHZhbHVlKCkuZmluZCgiQXNzZXJ0aW9uRXJyb3IiKSwgLTEpCisKKyAgICBkZWYgdGVzdEVycm9yQWZ0ZXJPdXRwdXQoc2VsZik6CisgICAgICAgIE1TRyA9ICJTb21lIG91dHB1dCBoYXMgYmVlbiBzZW50IgorICAgICAgICBkZWYgZXJyb3JfYXBwKGUscyk6CisgICAgICAgICAgICBzKCIyMDAgT0siLFtdKShNU0cpCisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVGhpcyBzaG91bGQgYmUgY2F1Z2h0IGJ5IGhhbmRsZXIiKQorCisgICAgICAgIGggPSBFcnJvckhhbmRsZXIoKQorICAgICAgICBoLnJ1bihlcnJvcl9hcHApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5zdGRvdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICJTdGF0dXM6IDIwMCBPS1xyXG4iCisgICAgICAgICAgICAiXHJcbiIrTVNHKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGguc3RkZXJyLmdldHZhbHVlKCkuZmluZCgiQXNzZXJ0aW9uRXJyb3IiKSwgLTEpCisKKyAgICBkZWYgdGVzdEhlYWRlckZvcm1hdHMoc2VsZik6CisKKyAgICAgICAgZGVmIG5vbl9lcnJvcl9hcHAoZSxzKToKKyAgICAgICAgICAgIHMoJzIwMCBPSycsW10pCisgICAgICAgICAgICByZXR1cm4gW10KKworICAgICAgICBzdGRwYXQgPSAoCisgICAgICAgICAgICByIkhUVFAvJXMgMjAwIE9LXHJcbiIKKyAgICAgICAgICAgIHIiRGF0ZTogXHd7M30sIFsgMDEyM11cZCBcd3szfSBcZHs0fSBcZFxkOlxkXGQ6XGRcZCBHTVRcclxuIgorICAgICAgICAgICAgciIlcyIgciJDb250ZW50LUxlbmd0aDogMFxyXG4iIHIiXHJcbiIKKyAgICAgICAgKQorICAgICAgICBzaG9ydHBhdCA9ICgKKyAgICAgICAgICAgICJTdGF0dXM6IDIwMCBPS1xyXG4iICJDb250ZW50LUxlbmd0aDogMFxyXG4iICJcclxuIgorICAgICAgICApCisKKyAgICAgICAgZm9yIHNzdyBpbiAiRm9vQmFyLzEuMCIsIE5vbmU6CisgICAgICAgICAgICBzdyA9IHNzdyBhbmQgIlNlcnZlcjogJXNcclxuIiAlIHNzdyBvciAiIgorCisgICAgICAgICAgICBmb3IgdmVyc2lvbiBpbiAiMS4wIiwgIjEuMSI6CisgICAgICAgICAgICAgICAgZm9yIHByb3RvIGluICJIVFRQLzAuOSIsICJIVFRQLzEuMCIsICJIVFRQLzEuMSI6CisKKyAgICAgICAgICAgICAgICAgICAgaCA9IFRlc3RIYW5kbGVyKFNFUlZFUl9QUk9UT0NPTD1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgaC5vcmlnaW5fc2VydmVyID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgaC5odHRwX3ZlcnNpb24gPSB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIGguc2VydmVyX3NvZnR3YXJlID0gc3N3CisgICAgICAgICAgICAgICAgICAgIGgucnVuKG5vbl9lcnJvcl9hcHApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hvcnRwYXQsaC5zdGRvdXQuZ2V0dmFsdWUoKSkKKworICAgICAgICAgICAgICAgICAgICBoID0gVGVzdEhhbmRsZXIoU0VSVkVSX1BST1RPQ09MPXByb3RvKQorICAgICAgICAgICAgICAgICAgICBoLm9yaWdpbl9zZXJ2ZXIgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGguaHR0cF92ZXJzaW9uID0gdmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBoLnNlcnZlcl9zb2Z0d2FyZSA9IHNzdworICAgICAgICAgICAgICAgICAgICBoLnJ1bihub25fZXJyb3JfYXBwKQorICAgICAgICAgICAgICAgICAgICBpZiBwcm90bz09IkhUVFAvMC45IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5zdGRvdXQuZ2V0dmFsdWUoKSwiIikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZS5tYXRjaChzdGRwYXQlKHZlcnNpb24sc3cpLCBoLnN0ZG91dC5nZXR2YWx1ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RkcGF0JSh2ZXJzaW9uLHN3KSwgaC5zdGRvdXQuZ2V0dmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0Q2xvc2VPbkVycm9yKHNlbGYpOgorICAgICAgICBzaWRlX2VmZmVjdHMgPSB7J2Nsb3NlX2NhbGxlZCc6IEZhbHNlfQorICAgICAgICBNU0cgPSBiIlNvbWUgb3V0cHV0IGhhcyBiZWVuIHNlbnQiCisgICAgICAgIGRlZiBlcnJvcl9hcHAoZSxzKToKKyAgICAgICAgICAgIHMoIjIwMCBPSyIsW10pKE1TRykKKyAgICAgICAgICAgIGNsYXNzIENyYXNoeUl0ZXJhYmxlKG9iamVjdCk6CisgICAgICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgYidibGFoJworICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlRoaXMgc2hvdWxkIGJlIGNhdWdodCBieSBoYW5kbGVyIikKKworICAgICAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgc2lkZV9lZmZlY3RzWydjbG9zZV9jYWxsZWQnXSA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBDcmFzaHlJdGVyYWJsZSgpCisKKyAgICAgICAgaCA9IEVycm9ySGFuZGxlcigpCisgICAgICAgIGgucnVuKGVycm9yX2FwcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWRlX2VmZmVjdHNbJ2Nsb3NlX2NhbGxlZCddLCBUcnVlKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94ZHJsaWIucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94ZHJsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJhODg4NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3hkcmxpYi5weQpAQCAtMCwwICsxLDU4IEBACitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCB4ZHJsaWIKKworY2xhc3MgWERSVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF94ZHIoc2VsZik6CisgICAgICAgIHAgPSB4ZHJsaWIuUGFja2VyKCkKKworICAgICAgICBzID0gJ2hlbGxvIHdvcmxkJworICAgICAgICBhID0gWyd3aGF0JywgJ2lzJywgJ2hhcG5pbicsICdkb2N0b3InXQorCisgICAgICAgIHAucGFja19pbnQoNDIpCisgICAgICAgIHAucGFja19pbnQoLTE3KQorICAgICAgICBwLnBhY2tfdWludCg5KQorICAgICAgICBwLnBhY2tfYm9vbChUcnVlKQorICAgICAgICBwLnBhY2tfYm9vbChGYWxzZSkKKyAgICAgICAgcC5wYWNrX3VoeXBlcig0NUwpCisgICAgICAgIHAucGFja19mbG9hdCgxLjkpCisgICAgICAgIHAucGFja19kb3VibGUoMS45KQorICAgICAgICBwLnBhY2tfc3RyaW5nKHMpCisgICAgICAgIHAucGFja19saXN0KHJhbmdlKDUpLCBwLnBhY2tfdWludCkKKyAgICAgICAgcC5wYWNrX2FycmF5KGEsIHAucGFja19zdHJpbmcpCisKKyAgICAgICAgIyBub3cgdmVyaWZ5CisgICAgICAgIGRhdGEgPSBwLmdldF9idWZmZXIoKQorICAgICAgICB1cCA9IHhkcmxpYi5VbnBhY2tlcihkYXRhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXAuZ2V0X3Bvc2l0aW9uKCksIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cC51bnBhY2tfaW50KCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVwLnVucGFja19pbnQoKSwgLTE3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVwLnVucGFja191aW50KCksIDkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cC51bnBhY2tfYm9vbCgpIGlzIFRydWUpCisKKyAgICAgICAgIyByZW1lbWJlciBwb3NpdGlvbgorICAgICAgICBwb3MgPSB1cC5nZXRfcG9zaXRpb24oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodXAudW5wYWNrX2Jvb2woKSBpcyBGYWxzZSkKKworICAgICAgICAjIHJld2luZCBhbmQgdW5wYWNrIGFnYWluCisgICAgICAgIHVwLnNldF9wb3NpdGlvbihwb3MpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cC51bnBhY2tfYm9vbCgpIGlzIEZhbHNlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXAudW5wYWNrX3VoeXBlcigpLCA0NUwpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwodXAudW5wYWNrX2Zsb2F0KCksIDEuOSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCh1cC51bnBhY2tfZG91YmxlKCksIDEuOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cC51bnBhY2tfc3RyaW5nKCksIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXAudW5wYWNrX2xpc3QodXAudW5wYWNrX3VpbnQpLCByYW5nZSg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cC51bnBhY2tfYXJyYXkodXAudW5wYWNrX3N0cmluZyksIGEpCisgICAgICAgIHVwLmRvbmUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgdXAudW5wYWNrX3VpbnQpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFhEUlRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbF9ldHJlZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTE2MWNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5CkBAIC0wLDAgKzEsMTkwNyBAQAorIyB4bWwuZXRyZWUgdGVzdC4gIFRoaXMgZmlsZSBjb250YWlucyBlbm91Z2ggdGVzdHMgdG8gbWFrZSBzdXJlIHRoYXQKKyMgYWxsIGluY2x1ZGVkIGNvbXBvbmVudHMgd29yayBhcyB0aGV5IHNob3VsZC4KKyMgTGFyZ2UgcGFydHMgYXJlIGV4dHJhY3RlZCBmcm9tIHRoZSB1cHN0cmVhbSB0ZXN0IHN1aXRlLgorCisjIElNUE9SVEFOVDogdGhlIHNhbWUgZG9jdGVzdHMgYXJlIHJ1biBmcm9tICJ0ZXN0X3htbF9ldHJlZV9jIiBpbgorIyBvcmRlciB0byBlbnN1cmUgY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgQyBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlCisjIFB5dGhvbiBpbXBsZW1lbnRhdGlvbi4KKyMKKyMgRm9yIHRoaXMgcHVycG9zZSwgdGhlIG1vZHVsZS1sZXZlbCAiRVQiIHN5bWJvbCBpcyB0ZW1wb3JhcmlseQorIyBtb25rZXktcGF0Y2hlZCB3aGVuIHJ1bm5pbmcgdGhlICJ0ZXN0X3htbF9ldHJlZV9jIiB0ZXN0IHN1aXRlLgorIyBEb24ndCByZS1pbXBvcnQgInhtbC5ldHJlZS5FbGVtZW50VHJlZSIgbW9kdWxlIGluIHRoZSBkb2NzdHJpbmcsCisjIGV4Y2VwdCBpZiB0aGUgdGVzdCBpcyBzcGVjaWZpYyB0byB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uLgorCitpbXBvcnQgc3lzCitpbXBvcnQgY2dpCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBmaW5kZmlsZQorCitmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUgYXMgRVQKKworU0lNUExFX1hNTEZJTEUgPSBmaW5kZmlsZSgic2ltcGxlLnhtbCIsIHN1YmRpcj0ieG1sdGVzdGRhdGEiKQorU0lNUExFX05TX1hNTEZJTEUgPSBmaW5kZmlsZSgic2ltcGxlLW5zLnhtbCIsIHN1YmRpcj0ieG1sdGVzdGRhdGEiKQorCitTQU1QTEVfWE1MID0gIiIiXAorPGJvZHk+CisgIDx0YWcgY2xhc3M9J2EnPnRleHQ8L3RhZz4KKyAgPHRhZyBjbGFzcz0nYicgLz4KKyAgPHNlY3Rpb24+CisgICAgPHRhZyBjbGFzcz0nYicgaWQ9J2lubmVyJz5zdWJ0ZXh0PC90YWc+CisgIDwvc2VjdGlvbj4KKzwvYm9keT4KKyIiIgorCitTQU1QTEVfU0VDVElPTiA9ICIiIlwKKzxzZWN0aW9uPgorICA8dGFnIGNsYXNzPSdiJyBpZD0naW5uZXInPnN1YnRleHQ8L3RhZz4KKyAgPG5leHR0YWcgLz4KKyAgPG5leHRzZWN0aW9uPgorICAgIDx0YWcgLz4KKyAgPC9uZXh0c2VjdGlvbj4KKzwvc2VjdGlvbj4KKyIiIgorCitTQU1QTEVfWE1MX05TID0gIiIiCis8Ym9keSB4bWxucz0iaHR0cDovL2VmZmJvdC5vcmcvbnMiPgorICA8dGFnPnRleHQ8L3RhZz4KKyAgPHRhZyAvPgorICA8c2VjdGlvbj4KKyAgICA8dGFnPnN1YnRleHQ8L3RhZz4KKyAgPC9zZWN0aW9uPgorPC9ib2R5PgorIiIiCisKKworZGVmIHNhbml0eSgpOgorICAgICIiIgorICAgIEltcG9ydCBzYW5pdHkuCisKKyAgICA+Pj4gZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlCisgICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50SW5jbHVkZQorICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFBhdGgKKyAgICAiIiIKKworZGVmIGNoZWNrX21ldGhvZChtZXRob2QpOgorICAgIGlmIG5vdCBoYXNhdHRyKG1ldGhvZCwgJ19fY2FsbF9fJyk6CisgICAgICAgIHByaW50IG1ldGhvZCwgIm5vdCBjYWxsYWJsZSIKKworZGVmIHNlcmlhbGl6ZShlbGVtLCB0b19zdHJpbmc9VHJ1ZSwgKipvcHRpb25zKToKKyAgICBpbXBvcnQgU3RyaW5nSU8KKyAgICBmaWxlID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgIHRyZWUgPSBFVC5FbGVtZW50VHJlZShlbGVtKQorICAgIHRyZWUud3JpdGUoZmlsZSwgKipvcHRpb25zKQorICAgIGlmIHRvX3N0cmluZzoKKyAgICAgICAgcmV0dXJuIGZpbGUuZ2V0dmFsdWUoKQorICAgIGVsc2U6CisgICAgICAgIGZpbGUuc2VlaygwKQorICAgICAgICByZXR1cm4gZmlsZQorCitkZWYgc3VtbWFyaXplKGVsZW0pOgorICAgIGlmIGVsZW0udGFnID09IEVULkNvbW1lbnQ6CisgICAgICAgIHJldHVybiAiPENvbW1lbnQ+IgorICAgIHJldHVybiBlbGVtLnRhZworCitkZWYgc3VtbWFyaXplX2xpc3Qoc2VxKToKKyAgICByZXR1cm4gW3N1bW1hcml6ZShlbGVtKSBmb3IgZWxlbSBpbiBzZXFdCisKK2RlZiBub3JtYWxpemVfY3JsZih0cmVlKToKKyAgICBmb3IgZWxlbSBpbiB0cmVlLml0ZXIoKToKKyAgICAgICAgaWYgZWxlbS50ZXh0OgorICAgICAgICAgICAgZWxlbS50ZXh0ID0gZWxlbS50ZXh0LnJlcGxhY2UoIlxyXG4iLCAiXG4iKQorICAgICAgICBpZiBlbGVtLnRhaWw6CisgICAgICAgICAgICBlbGVtLnRhaWwgPSBlbGVtLnRhaWwucmVwbGFjZSgiXHJcbiIsICJcbiIpCisKK2RlZiBjaGVja19zdHJpbmcoc3RyaW5nKToKKyAgICBsZW4oc3RyaW5nKQorICAgIGZvciBjaGFyIGluIHN0cmluZzoKKyAgICAgICAgaWYgbGVuKGNoYXIpICE9IDE6CisgICAgICAgICAgICBwcmludCAiZXhwZWN0ZWQgb25lLWNoYXJhY3RlciBzdHJpbmcsIGdvdCAlciIgJSBjaGFyCisgICAgbmV3X3N0cmluZyA9IHN0cmluZyArICIiCisgICAgbmV3X3N0cmluZyA9IHN0cmluZyArICIgIgorICAgIHN0cmluZ1s6MF0KKworZGVmIGNoZWNrX21hcHBpbmcobWFwcGluZyk6CisgICAgbGVuKG1hcHBpbmcpCisgICAga2V5cyA9IG1hcHBpbmcua2V5cygpCisgICAgaXRlbXMgPSBtYXBwaW5nLml0ZW1zKCkKKyAgICBmb3Iga2V5IGluIGtleXM6CisgICAgICAgIGl0ZW0gPSBtYXBwaW5nW2tleV0KKyAgICBtYXBwaW5nWyJrZXkiXSA9ICJ2YWx1ZSIKKyAgICBpZiBtYXBwaW5nWyJrZXkiXSAhPSAidmFsdWUiOgorICAgICAgICBwcmludCAiZXhwZWN0ZWQgdmFsdWUgc3RyaW5nLCBnb3QgJXIiICUgbWFwcGluZ1sia2V5Il0KKworZGVmIGNoZWNrX2VsZW1lbnQoZWxlbWVudCk6CisgICAgaWYgbm90IEVULmlzZWxlbWVudChlbGVtZW50KToKKyAgICAgICAgcHJpbnQgIm5vdCBhbiBlbGVtZW50IgorICAgIGlmIG5vdCBoYXNhdHRyKGVsZW1lbnQsICJ0YWciKToKKyAgICAgICAgcHJpbnQgIm5vIHRhZyBtZW1iZXIiCisgICAgaWYgbm90IGhhc2F0dHIoZWxlbWVudCwgImF0dHJpYiIpOgorICAgICAgICBwcmludCAibm8gYXR0cmliIG1lbWJlciIKKyAgICBpZiBub3QgaGFzYXR0cihlbGVtZW50LCAidGV4dCIpOgorICAgICAgICBwcmludCAibm8gdGV4dCBtZW1iZXIiCisgICAgaWYgbm90IGhhc2F0dHIoZWxlbWVudCwgInRhaWwiKToKKyAgICAgICAgcHJpbnQgIm5vIHRhaWwgbWVtYmVyIgorCisgICAgY2hlY2tfc3RyaW5nKGVsZW1lbnQudGFnKQorICAgIGNoZWNrX21hcHBpbmcoZWxlbWVudC5hdHRyaWIpCisgICAgaWYgZWxlbWVudC50ZXh0IGlzIG5vdCBOb25lOgorICAgICAgICBjaGVja19zdHJpbmcoZWxlbWVudC50ZXh0KQorICAgIGlmIGVsZW1lbnQudGFpbCBpcyBub3QgTm9uZToKKyAgICAgICAgY2hlY2tfc3RyaW5nKGVsZW1lbnQudGFpbCkKKyAgICBmb3IgZWxlbSBpbiBlbGVtZW50OgorICAgICAgICBjaGVja19lbGVtZW50KGVsZW0pCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZWxlbWVudCB0cmVlIHRlc3RzCisKK2RlZiBpbnRlcmZhY2UoKToKKyAgICByIiIiCisgICAgVGVzdCBlbGVtZW50IHRyZWUgaW50ZXJmYWNlLgorCisgICAgPj4+IGVsZW1lbnQgPSBFVC5FbGVtZW50KCJ0YWciKQorICAgID4+PiBjaGVja19lbGVtZW50KGVsZW1lbnQpCisgICAgPj4+IHRyZWUgPSBFVC5FbGVtZW50VHJlZShlbGVtZW50KQorICAgID4+PiBjaGVja19lbGVtZW50KHRyZWUuZ2V0cm9vdCgpKQorCisgICAgPj4+IGVsZW1lbnQgPSBFVC5FbGVtZW50KCJ0XHhlNGciLCBrZXk9InZhbHVlIikKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW1lbnQpCisgICAgPj4+IHJlcHIoZWxlbWVudCkgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICI8RWxlbWVudCAndFxceGU0ZycgYXQgMHguLi4+IgorICAgID4+PiBlbGVtZW50ID0gRVQuRWxlbWVudCgidGFnIiwga2V5PSJ2YWx1ZSIpCisKKyAgICBNYWtlIHN1cmUgYWxsIHN0YW5kYXJkIGVsZW1lbnQgbWV0aG9kcyBleGlzdC4KKworICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5hcHBlbmQpCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmV4dGVuZCkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaW5zZXJ0KQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5yZW1vdmUpCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmdldGNoaWxkcmVuKQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5maW5kKQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVyZmluZCkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZmluZGFsbCkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZmluZHRleHQpCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmNsZWFyKQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5nZXQpCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LnNldCkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQua2V5cykKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlbXMpCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZXIpCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZXJ0ZXh0KQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5nZXRpdGVyYXRvcikKKworICAgIFRoZXNlIG1ldGhvZHMgcmV0dXJuIGFuIGl0ZXJhYmxlLiBTZWUgYnVnIDY0NzIuCisKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlcigidGFnIikubmV4dCkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlcmZpbmQoInRhZyIpLm5leHQpCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZXJmaW5kKCIqIikubmV4dCkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKHRyZWUuaXRlcigidGFnIikubmV4dCkKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKHRyZWUuaXRlcmZpbmQoInRhZyIpLm5leHQpCisgICAgPj4+IGNoZWNrX21ldGhvZCh0cmVlLml0ZXJmaW5kKCIqIikubmV4dCkKKworICAgIFRoZXNlIGFsaWFzZXMgYXJlIHByb3ZpZGVkOgorCisgICAgPj4+IGFzc2VydCBFVC5YTUwgPT0gRVQuZnJvbXN0cmluZworICAgID4+PiBhc3NlcnQgRVQuUEkgPT0gRVQuUHJvY2Vzc2luZ0luc3RydWN0aW9uCisgICAgPj4+IGFzc2VydCBFVC5YTUxQYXJzZXIgPT0gRVQuWE1MVHJlZUJ1aWxkZXIKKyAgICAiIiIKKworZGVmIHNpbXBsZW9wcygpOgorICAgICIiIgorICAgIEJhc2ljIG1ldGhvZCBzYW5pdHkgY2hlY2tzLgorCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoIjxib2R5Pjx0YWcvPjwvYm9keT4iKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPGJvZHk+PHRhZyAvPjwvYm9keT4nCisgICAgPj4+IGUgPSBFVC5FbGVtZW50KCJ0YWcyIikKKyAgICA+Pj4gZWxlbS5hcHBlbmQoZSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzxib2R5Pjx0YWcgLz48dGFnMiAvPjwvYm9keT4nCisgICAgPj4+IGVsZW0ucmVtb3ZlKGUpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8Ym9keT48dGFnIC8+PC9ib2R5PicKKyAgICA+Pj4gZWxlbS5pbnNlcnQoMCwgZSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzxib2R5Pjx0YWcyIC8+PHRhZyAvPjwvYm9keT4nCisgICAgPj4+IGVsZW0ucmVtb3ZlKGUpCisgICAgPj4+IGVsZW0uZXh0ZW5kKFtlXSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzxib2R5Pjx0YWcgLz48dGFnMiAvPjwvYm9keT4nCisgICAgPj4+IGVsZW0ucmVtb3ZlKGUpCisKKyAgICA+Pj4gZWxlbWVudCA9IEVULkVsZW1lbnQoInRhZyIsIGtleT0idmFsdWUiKQorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyAxCisgICAgJzx0YWcga2V5PSJ2YWx1ZSIgLz4nCisgICAgPj4+IHN1YmVsZW1lbnQgPSBFVC5FbGVtZW50KCJzdWJ0YWciKQorICAgID4+PiBlbGVtZW50LmFwcGVuZChzdWJlbGVtZW50KQorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyAyCisgICAgJzx0YWcga2V5PSJ2YWx1ZSI+PHN1YnRhZyAvPjwvdGFnPicKKyAgICA+Pj4gZWxlbWVudC5pbnNlcnQoMCwgc3ViZWxlbWVudCkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnQpICMgMworICAgICc8dGFnIGtleT0idmFsdWUiPjxzdWJ0YWcgLz48c3VidGFnIC8+PC90YWc+JworICAgID4+PiBlbGVtZW50LnJlbW92ZShzdWJlbGVtZW50KQorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyA0CisgICAgJzx0YWcga2V5PSJ2YWx1ZSI+PHN1YnRhZyAvPjwvdGFnPicKKyAgICA+Pj4gZWxlbWVudC5yZW1vdmUoc3ViZWxlbWVudCkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnQpICMgNQorICAgICc8dGFnIGtleT0idmFsdWUiIC8+JworICAgID4+PiBlbGVtZW50LnJlbW92ZShzdWJlbGVtZW50KQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBWYWx1ZUVycm9yOiBsaXN0LnJlbW92ZSh4KTogeCBub3QgaW4gbGlzdAorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyA2CisgICAgJzx0YWcga2V5PSJ2YWx1ZSIgLz4nCisgICAgPj4+IGVsZW1lbnRbMDowXSA9IFtzdWJlbGVtZW50LCBzdWJlbGVtZW50LCBzdWJlbGVtZW50XQorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudFsxXSkKKyAgICAnPHN1YnRhZyAvPicKKyAgICA+Pj4gZWxlbWVudFsxOjldID09IFtlbGVtZW50WzFdLCBlbGVtZW50WzJdXQorICAgIFRydWUKKyAgICA+Pj4gZWxlbWVudFs6OToyXSA9PSBbZWxlbWVudFswXSwgZWxlbWVudFsyXV0KKyAgICBUcnVlCisgICAgPj4+IGRlbCBlbGVtZW50WzE6Ml0KKyAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnQpCisgICAgJzx0YWcga2V5PSJ2YWx1ZSI+PHN1YnRhZyAvPjxzdWJ0YWcgLz48L3RhZz4nCisgICAgIiIiCisKK2RlZiBjZGF0YSgpOgorICAgICIiIgorICAgIFRlc3QgQ0RBVEEgaGFuZGxpbmcgKGV0YykuCisKKyAgICA+Pj4gc2VyaWFsaXplKEVULlhNTCgiPHRhZz5oZWxsbzwvdGFnPiIpKQorICAgICc8dGFnPmhlbGxvPC90YWc+JworICAgID4+PiBzZXJpYWxpemUoRVQuWE1MKCI8dGFnPiYjMTA0OyYjMTAxOyYjMTA4OyYjMTA4OyYjMTExOzwvdGFnPiIpKQorICAgICc8dGFnPmhlbGxvPC90YWc+JworICAgID4+PiBzZXJpYWxpemUoRVQuWE1MKCI8dGFnPjwhW0NEQVRBW2hlbGxvXV0+PC90YWc+IikpCisgICAgJzx0YWc+aGVsbG88L3RhZz4nCisgICAgIiIiCisKKyMgT25seSB3aXRoIFB5dGhvbiBpbXBsZW1lbnRhdGlvbgorZGVmIHNpbXBsZWZpbmQoKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmQgbWV0aG9kcyB1c2luZyB0aGUgZWxlbWVudHBhdGggZmFsbGJhY2suCisKKyAgICA+Pj4gZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlCisKKyAgICA+Pj4gQ3VycmVudEVsZW1lbnRQYXRoID0gRWxlbWVudFRyZWUuRWxlbWVudFBhdGgKKyAgICA+Pj4gRWxlbWVudFRyZWUuRWxlbWVudFBhdGggPSBFbGVtZW50VHJlZS5fU2ltcGxlRWxlbWVudFBhdGgoKQorICAgID4+PiBlbGVtID0gRWxlbWVudFRyZWUuWE1MKFNBTVBMRV9YTUwpCisgICAgPj4+IGVsZW0uZmluZCgidGFnIikudGFnCisgICAgJ3RhZycKKyAgICA+Pj4gRWxlbWVudFRyZWUuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgidGFnIikudGFnCisgICAgJ3RhZycKKyAgICA+Pj4gZWxlbS5maW5kdGV4dCgidGFnIikKKyAgICAndGV4dCcKKyAgICA+Pj4gZWxlbS5maW5kdGV4dCgidG9nIikKKyAgICA+Pj4gZWxlbS5maW5kdGV4dCgidG9nIiwgImRlZmF1bHQiKQorICAgICdkZWZhdWx0JworICAgID4+PiBFbGVtZW50VHJlZS5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgidGFnIikKKyAgICAndGV4dCcKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0YWciKSkKKyAgICBbJ3RhZycsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZyIpKQorICAgIFsndGFnJywgJ3RhZycsICd0YWcnXQorCisgICAgUGF0aCBzeW50YXggZG9lc24ndCB3b3JrIGluIHRoaXMgY2FzZS4KKworICAgID4+PiBlbGVtLmZpbmQoInNlY3Rpb24vdGFnIikKKyAgICA+Pj4gZWxlbS5maW5kdGV4dCgic2VjdGlvbi90YWciKQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vdGFnIikpCisgICAgW10KKworICAgID4+PiBFbGVtZW50VHJlZS5FbGVtZW50UGF0aCA9IEN1cnJlbnRFbGVtZW50UGF0aAorICAgICIiIgorCitkZWYgZmluZCgpOgorICAgICIiIgorICAgIFRlc3QgZmluZCBtZXRob2RzIChpbmNsdWRpbmcgeHBhdGggc3ludGF4KS4KKworICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUwpCisgICAgPj4+IGVsZW0uZmluZCgidGFnIikudGFnCisgICAgJ3RhZycKKyAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgidGFnIikudGFnCisgICAgJ3RhZycKKyAgICA+Pj4gZWxlbS5maW5kKCJzZWN0aW9uL3RhZyIpLnRhZworICAgICd0YWcnCisgICAgPj4+IGVsZW0uZmluZCgiLi90YWciKS50YWcKKyAgICAndGFnJworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCIuL3RhZyIpLnRhZworICAgICd0YWcnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoIi90YWciKS50YWcKKyAgICAndGFnJworICAgID4+PiBlbGVtWzJdID0gRVQuWE1MKFNBTVBMRV9TRUNUSU9OKQorICAgID4+PiBlbGVtLmZpbmQoInNlY3Rpb24vbmV4dHRhZyIpLnRhZworICAgICduZXh0dGFnJworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCJzZWN0aW9uL3RhZyIpLnRhZworICAgICd0YWcnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoInRvZyIpCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoInRvZy9mb28iKQorICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0YWciKQorICAgICd0ZXh0JworICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJzZWN0aW9uL25leHR0YWciKQorICAgICcnCisgICAgPj4+IGVsZW0uZmluZHRleHQoInNlY3Rpb24vbmV4dHRhZyIsICJkZWZhdWx0IikKKyAgICAnJworICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciKQorICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciLCAiZGVmYXVsdCIpCisgICAgJ2RlZmF1bHQnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0YWciKQorICAgICd0ZXh0JworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgidG9nL2ZvbyIpCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0b2cvZm9vIiwgImRlZmF1bHQiKQorICAgICdkZWZhdWx0JworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgiLi90YWciKQorICAgICd0ZXh0JworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgiL3RhZyIpCisgICAgJ3RleHQnCisgICAgPj4+IGVsZW0uZmluZHRleHQoInNlY3Rpb24vdGFnIikKKyAgICAnc3VidGV4dCcKKyAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZHRleHQoInNlY3Rpb24vdGFnIikKKyAgICAnc3VidGV4dCcKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuIikpCisgICAgWydib2R5J10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0YWciKSkKKyAgICBbJ3RhZycsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInRvZyIpKQorICAgIFtdCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgidG9nL2ZvbyIpKQorICAgIFtdCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKiIpKQorICAgIFsndGFnJywgJ3RhZycsICdzZWN0aW9uJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWciKSkKKyAgICBbJ3RhZycsICd0YWcnLCAndGFnJywgJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi90YWciKSkKKyAgICBbJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8vdGFnIikpCisgICAgWyd0YWcnLCAndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLyoiKSkKKyAgICBbJ3RhZycsICduZXh0dGFnJywgJ25leHRzZWN0aW9uJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLy8qIikpCisgICAgWyd0YWcnLCAnbmV4dHRhZycsICduZXh0c2VjdGlvbicsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vLi8vKiIpKQorICAgIFsndGFnJywgJ25leHR0YWcnLCAnbmV4dHNlY3Rpb24nLCAndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqLyoiKSkKKyAgICBbJ3RhZycsICduZXh0dGFnJywgJ25leHRzZWN0aW9uJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqLy8qIikpCisgICAgWyd0YWcnLCAnbmV4dHRhZycsICduZXh0c2VjdGlvbicsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovdGFnIikpCisgICAgWyd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovLi90YWciKSkKKyAgICBbJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi90YWciKSkKKyAgICBbJ3RhZycsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZyIpKQorICAgIFsndGFnJywgJ3RhZycsICd0YWcnLCAndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy4vdGFnIikpCisgICAgWyd0YWcnLCAndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWdbQGNsYXNzXSIpKQorICAgIFsndGFnJywgJ3RhZycsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZ1tAY2xhc3M9J2EnXSIpKQorICAgIFsndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWdbQGNsYXNzPSdiJ10iKSkKKyAgICBbJ3RhZycsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZ1tAaWRdIikpCisgICAgWyd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3NlY3Rpb25bdGFnXSIpKQorICAgIFsnc2VjdGlvbiddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vc2VjdGlvbltlbGVtZW50XSIpKQorICAgIFtdCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi4vdGFnIikpCisgICAgW10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLy4uL3RhZyIpKQorICAgIFsndGFnJywgJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmRhbGwoIi4vdGFnIikpCisgICAgWyd0YWcnLCAndGFnJ10KKworICAgIEZvbGxvd2luZyBleGFtcGxlIGlzIGludmFsaWQgaW4gMS4yLgorICAgIEEgbGVhZGluZyAnKicgaXMgYXNzdW1lZCBpbiAxLjMuCisKKyAgICA+Pj4gZWxlbS5maW5kYWxsKCJzZWN0aW9uLy8iKSA9PSBlbGVtLmZpbmRhbGwoInNlY3Rpb24vLyoiKQorICAgIFRydWUKKworICAgIEVUJ3MgUGF0aCBtb2R1bGUgaGFuZGxlcyB0aGlzIGNhc2UgaW5jb3JyZWN0bHk7IHRoaXMgZ2l2ZXMKKyAgICBhIHdhcm5pbmcgaW4gMS4zLCBhbmQgdGhlIGJlaGF2aW91ciB3aWxsIGJlIG1vZGlmaWVkIGluIDEuNC4KKworICAgID4+PiBzdW1tYXJpemVfbGlzdChFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kYWxsKCIvdGFnIikpCisgICAgWyd0YWcnLCAndGFnJ10KKworICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUxfTlMpCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgidGFnIikpCisgICAgW10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnIikpCisgICAgWyd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJywgJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3todHRwOi8vZWZmYm90Lm9yZy9uc310YWciKSkKKyAgICBbJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnLCAne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZycsICd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJ10KKyAgICAiIiIKKworZGVmIGZpbGVfaW5pdCgpOgorICAgICIiIgorICAgID4+PiBpbXBvcnQgU3RyaW5nSU8KKworICAgID4+PiBzdHJpbmdmaWxlID0gU3RyaW5nSU8uU3RyaW5nSU8oU0FNUExFX1hNTCkKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGZpbGU9c3RyaW5nZmlsZSkKKyAgICA+Pj4gdHJlZS5maW5kKCJ0YWciKS50YWcKKyAgICAndGFnJworICAgID4+PiB0cmVlLmZpbmQoInNlY3Rpb24vdGFnIikudGFnCisgICAgJ3RhZycKKworICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoZmlsZT1TSU1QTEVfWE1MRklMRSkKKyAgICA+Pj4gdHJlZS5maW5kKCJlbGVtZW50IikudGFnCisgICAgJ2VsZW1lbnQnCisgICAgPj4+IHRyZWUuZmluZCgiZWxlbWVudC8uLi9lbXB0eS1lbGVtZW50IikudGFnCisgICAgJ2VtcHR5LWVsZW1lbnQnCisgICAgIiIiCisKK2RlZiBiYWRfZmluZCgpOgorICAgICIiIgorICAgIENoZWNrIGJhZCBvciB1bnN1cHBvcnRlZCBwYXRoIGV4cHJlc3Npb25zLgorCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTCkKKyAgICA+Pj4gZWxlbS5maW5kYWxsKCIvdGFnIikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgU3ludGF4RXJyb3I6IGNhbm5vdCB1c2UgYWJzb2x1dGUgcGF0aCBvbiBlbGVtZW50CisgICAgIiIiCisKK2RlZiBwYXRoX2NhY2hlKCk6CisgICAgIiIiCisgICAgQ2hlY2sgdGhhdCB0aGUgcGF0aCBjYWNoZSBiZWhhdmVzIHNhbmVseS4KKworICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUwpCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDEwKTogRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgnLi8nK3N0cihpKSkKKyAgICA+Pj4gY2FjaGVfbGVuXzEwID0gbGVuKEVULkVsZW1lbnRQYXRoLl9jYWNoZSkKKyAgICA+Pj4gZm9yIGkgaW4gcmFuZ2UoMTApOiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCcuLycrc3RyKGkpKQorICAgID4+PiBsZW4oRVQuRWxlbWVudFBhdGguX2NhY2hlKSA9PSBjYWNoZV9sZW5fMTAKKyAgICBUcnVlCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDIwKTogRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgnLi8nK3N0cihpKSkKKyAgICA+Pj4gbGVuKEVULkVsZW1lbnRQYXRoLl9jYWNoZSkgPiBjYWNoZV9sZW5fMTAKKyAgICBUcnVlCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDYwMCk6IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoJy4vJytzdHIoaSkpCisgICAgPj4+IGxlbihFVC5FbGVtZW50UGF0aC5fY2FjaGUpIDwgNTAwCisgICAgVHJ1ZQorICAgICIiIgorCitkZWYgY29weSgpOgorICAgICIiIgorICAgIFRlc3QgY29weSBoYW5kbGluZyAoZXRjKS4KKworICAgID4+PiBpbXBvcnQgY29weQorICAgID4+PiBlMSA9IEVULlhNTCgiPHRhZz5oZWxsbzxmb28vPjwvdGFnPiIpCisgICAgPj4+IGUyID0gY29weS5jb3B5KGUxKQorICAgID4+PiBlMyA9IGNvcHkuZGVlcGNvcHkoZTEpCisgICAgPj4+IGUxLmZpbmQoImZvbyIpLnRhZyA9ICJiYXIiCisgICAgPj4+IHNlcmlhbGl6ZShlMSkKKyAgICAnPHRhZz5oZWxsbzxiYXIgLz48L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlMikKKyAgICAnPHRhZz5oZWxsbzxiYXIgLz48L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlMykKKyAgICAnPHRhZz5oZWxsbzxmb28gLz48L3RhZz4nCisKKyAgICAiIiIKKworZGVmIGF0dHJpYigpOgorICAgICIiIgorICAgIFRlc3QgYXR0cmlidXRlIGhhbmRsaW5nLgorCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciKQorICAgID4+PiBlbGVtLmdldCgia2V5IikgIyAxLjEKKyAgICA+Pj4gZWxlbS5nZXQoImtleSIsICJkZWZhdWx0IikgIyAxLjIKKyAgICAnZGVmYXVsdCcKKyAgICA+Pj4gZWxlbS5zZXQoImtleSIsICJ2YWx1ZSIpCisgICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDEuMworICAgICd2YWx1ZScKKworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIiwga2V5PSJ2YWx1ZSIpCisgICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDIuMQorICAgICd2YWx1ZScKKyAgICA+Pj4gZWxlbS5hdHRyaWIgIyAyLjIKKyAgICB7J2tleSc6ICd2YWx1ZSd9CisKKyAgICA+Pj4gYXR0cmliID0geyJrZXkiOiAidmFsdWUifQorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIiwgYXR0cmliKQorICAgID4+PiBhdHRyaWIuY2xlYXIoKSAjIGNoZWNrIGZvciBhbGlhc2luZyBpc3N1ZXMKKyAgICA+Pj4gZWxlbS5nZXQoImtleSIpICMgMy4xCisgICAgJ3ZhbHVlJworICAgID4+PiBlbGVtLmF0dHJpYiAjIDMuMgorICAgIHsna2V5JzogJ3ZhbHVlJ30KKworICAgID4+PiBhdHRyaWIgPSB7ImtleSI6ICJ2YWx1ZSJ9CisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciLCAqKmF0dHJpYikKKyAgICA+Pj4gYXR0cmliLmNsZWFyKCkgIyBjaGVjayBmb3IgYWxpYXNpbmcgaXNzdWVzCisgICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDQuMQorICAgICd2YWx1ZScKKyAgICA+Pj4gZWxlbS5hdHRyaWIgIyA0LjIKKyAgICB7J2tleSc6ICd2YWx1ZSd9CisKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIsIHsia2V5IjogIm90aGVyIn0sIGtleT0idmFsdWUiKQorICAgID4+PiBlbGVtLmdldCgia2V5IikgIyA1LjEKKyAgICAndmFsdWUnCisgICAgPj4+IGVsZW0uYXR0cmliICMgNS4yCisgICAgeydrZXknOiAndmFsdWUnfQorCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCd0ZXN0JykKKyAgICA+Pj4gZWxlbS50ZXh0ID0gImFhIgorICAgID4+PiBlbGVtLnNldCgndGVzdGEnLCAndGVzdHZhbCcpCisgICAgPj4+IGVsZW0uc2V0KCd0ZXN0YicsICd0ZXN0MicpCisgICAgPj4+IEVULnRvc3RyaW5nKGVsZW0pCisgICAgJzx0ZXN0IHRlc3RhPSJ0ZXN0dmFsIiB0ZXN0Yj0idGVzdDIiPmFhPC90ZXN0PicKKyAgICA+Pj4gc29ydGVkKGVsZW0ua2V5cygpKQorICAgIFsndGVzdGEnLCAndGVzdGInXQorICAgID4+PiBzb3J0ZWQoZWxlbS5pdGVtcygpKQorICAgIFsoJ3Rlc3RhJywgJ3Rlc3R2YWwnKSwgKCd0ZXN0YicsICd0ZXN0MicpXQorICAgID4+PiBlbGVtLmF0dHJpYlsndGVzdGInXQorICAgICd0ZXN0MicKKyAgICA+Pj4gZWxlbS5hdHRyaWJbJ3Rlc3RiJ10gPSAndGVzdDEnCisgICAgPj4+IGVsZW0uYXR0cmliWyd0ZXN0YyddID0gJ3Rlc3QyJworICAgID4+PiBFVC50b3N0cmluZyhlbGVtKQorICAgICc8dGVzdCB0ZXN0YT0idGVzdHZhbCIgdGVzdGI9InRlc3QxIiB0ZXN0Yz0idGVzdDIiPmFhPC90ZXN0PicKKyAgICAiIiIKKworZGVmIG1ha2VlbGVtZW50KCk6CisgICAgIiIiCisgICAgVGVzdCBtYWtlZWxlbWVudCBoYW5kbGluZy4KKworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIikKKyAgICA+Pj4gYXR0cmliID0geyJrZXkiOiAidmFsdWUifQorICAgID4+PiBzdWJlbGVtID0gZWxlbS5tYWtlZWxlbWVudCgic3VidGFnIiwgYXR0cmliKQorICAgID4+PiBpZiBzdWJlbGVtLmF0dHJpYiBpcyBhdHRyaWI6CisgICAgLi4uICAgICBwcmludCAiYXR0cmliIGFsaWFzaW5nIgorICAgID4+PiBlbGVtLmFwcGVuZChzdWJlbGVtKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZz48c3VidGFnIGtleT0idmFsdWUiIC8+PC90YWc+JworCisgICAgPj4+IGVsZW0uY2xlYXIoKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZyAvPicKKyAgICA+Pj4gZWxlbS5hcHBlbmQoc3ViZWxlbSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjwvdGFnPicKKyAgICA+Pj4gZWxlbS5leHRlbmQoW3N1YmVsZW0sIHN1YmVsZW1dKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZz48c3VidGFnIGtleT0idmFsdWUiIC8+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjxzdWJ0YWcga2V5PSJ2YWx1ZSIgLz48L3RhZz4nCisgICAgPj4+IGVsZW1bOl0gPSBbc3ViZWxlbV0KKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjwvdGFnPicKKyAgICA+Pj4gZWxlbVs6XSA9IHR1cGxlKFtzdWJlbGVtXSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjwvdGFnPicKKworICAgICIiIgorCitkZWYgcGFyc2VmaWxlKCk6CisgICAgIiIiCisgICAgVGVzdCBwYXJzaW5nIGZyb20gZmlsZS4KKworICAgID4+PiB0cmVlID0gRVQucGFyc2UoU0lNUExFX1hNTEZJTEUpCisgICAgPj4+IG5vcm1hbGl6ZV9jcmxmKHRyZWUpCisgICAgPj4+IHRyZWUud3JpdGUoc3lzLnN0ZG91dCkKKyAgICA8cm9vdD4KKyAgICAgICA8ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9lbGVtZW50PgorICAgICAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAorICAgICAgIDxlbXB0eS1lbGVtZW50IC8+CisgICAgPC9yb290PgorICAgID4+PiB0cmVlID0gRVQucGFyc2UoU0lNUExFX05TX1hNTEZJTEUpCisgICAgPj4+IG5vcm1hbGl6ZV9jcmxmKHRyZWUpCisgICAgPj4+IHRyZWUud3JpdGUoc3lzLnN0ZG91dCkKKyAgICA8bnMwOnJvb3QgeG1sbnM6bnMwPSJuYW1lc3BhY2UiPgorICAgICAgIDxuczA6ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9uczA6ZWxlbWVudD4KKyAgICAgICA8bnMwOmVsZW1lbnQ+dGV4dDwvbnMwOmVsZW1lbnQ+dGFpbAorICAgICAgIDxuczA6ZW1wdHktZWxlbWVudCAvPgorICAgIDwvbnMwOnJvb3Q+CisKKyAgICA+Pj4gd2l0aCBvcGVuKFNJTVBMRV9YTUxGSUxFKSBhcyBmOgorICAgIC4uLiAgICAgZGF0YSA9IGYucmVhZCgpCisKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKCkKKyAgICA+Pj4gcGFyc2VyLnZlcnNpb24gICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgJ0V4cGF0IC4uLicKKyAgICA+Pj4gcGFyc2VyLmZlZWQoZGF0YSkKKyAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKHBhcnNlci5jbG9zZSgpKQorICAgIDxyb290PgorICAgICAgIDxlbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L2VsZW1lbnQ+CisgICAgICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsCisgICAgICAgPGVtcHR5LWVsZW1lbnQgLz4KKyAgICA8L3Jvb3Q+CisKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MVHJlZUJ1aWxkZXIoKSAjIDEuMiBjb21wYXRpYmlsaXR5CisgICAgPj4+IHBhcnNlci5mZWVkKGRhdGEpCisgICAgPj4+IHByaW50IHNlcmlhbGl6ZShwYXJzZXIuY2xvc2UoKSkKKyAgICA8cm9vdD4KKyAgICAgICA8ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9lbGVtZW50PgorICAgICAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAorICAgICAgIDxlbXB0eS1lbGVtZW50IC8+CisgICAgPC9yb290PgorCisgICAgPj4+IHRhcmdldCA9IEVULlRyZWVCdWlsZGVyKCkKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKHRhcmdldD10YXJnZXQpCisgICAgPj4+IHBhcnNlci5mZWVkKGRhdGEpCisgICAgPj4+IHByaW50IHNlcmlhbGl6ZShwYXJzZXIuY2xvc2UoKSkKKyAgICA8cm9vdD4KKyAgICAgICA8ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9lbGVtZW50PgorICAgICAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAorICAgICAgIDxlbXB0eS1lbGVtZW50IC8+CisgICAgPC9yb290PgorICAgICIiIgorCitkZWYgcGFyc2VsaXRlcmFsKCk6CisgICAgIiIiCisgICAgPj4+IGVsZW1lbnQgPSBFVC5YTUwoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW1lbnQpLndyaXRlKHN5cy5zdGRvdXQpCisgICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+CisgICAgPj4+IGVsZW1lbnQgPSBFVC5mcm9tc3RyaW5nKCI8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4iKQorICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzeXMuc3Rkb3V0KQorICAgIDxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPgorICAgID4+PiBzZXF1ZW5jZSA9IFsiPGh0bWw+PGJvZHk+IiwgInRleHQ8L2JvIiwgImR5PjwvaHRtbD4iXQorICAgID4+PiBlbGVtZW50ID0gRVQuZnJvbXN0cmluZ2xpc3Qoc2VxdWVuY2UpCisgICAgPj4+IHByaW50IEVULnRvc3RyaW5nKGVsZW1lbnQpCisgICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+CisgICAgPj4+IHByaW50ICIiLmpvaW4oRVQudG9zdHJpbmdsaXN0KGVsZW1lbnQpKQorICAgIDxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPgorICAgID4+PiBFVC50b3N0cmluZyhlbGVtZW50LCAiYXNjaWkiKQorICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdhc2NpaSc/PlxcbjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIKKyAgICA+Pj4gXywgaWRzID0gRVQuWE1MSUQoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCisgICAgPj4+IGxlbihpZHMpCisgICAgMAorICAgID4+PiBfLCBpZHMgPSBFVC5YTUxJRCgiPGh0bWw+PGJvZHkgaWQ9J2JvZHknPnRleHQ8L2JvZHk+PC9odG1sPiIpCisgICAgPj4+IGxlbihpZHMpCisgICAgMQorICAgID4+PiBpZHNbImJvZHkiXS50YWcKKyAgICAnYm9keScKKyAgICAiIiIKKworZGVmIGl0ZXJwYXJzZSgpOgorICAgICIiIgorICAgIFRlc3QgaXRlcnBhcnNlIGludGVyZmFjZS4KKworICAgID4+PiBpdGVycGFyc2UgPSBFVC5pdGVycGFyc2UKKworICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKFNJTVBMRV9YTUxGSUxFKQorICAgID4+PiBhY3Rpb24sIGVsZW0gPSBuZXh0KGNvbnRleHQpCisgICAgPj4+IHByaW50IGFjdGlvbiwgZWxlbS50YWcKKyAgICBlbmQgZWxlbWVudAorICAgID4+PiBmb3IgYWN0aW9uLCBlbGVtIGluIGNvbnRleHQ6CisgICAgLi4uICAgcHJpbnQgYWN0aW9uLCBlbGVtLnRhZworICAgIGVuZCBlbGVtZW50CisgICAgZW5kIGVtcHR5LWVsZW1lbnQKKyAgICBlbmQgcm9vdAorICAgID4+PiBjb250ZXh0LnJvb3QudGFnCisgICAgJ3Jvb3QnCisKKyAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShTSU1QTEVfTlNfWE1MRklMRSkKKyAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgorICAgIC4uLiAgIHByaW50IGFjdGlvbiwgZWxlbS50YWcKKyAgICBlbmQge25hbWVzcGFjZX1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIGVuZCB7bmFtZXNwYWNlfWVtcHR5LWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1yb290CisKKyAgICA+Pj4gZXZlbnRzID0gKCkKKyAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShTSU1QTEVfWE1MRklMRSwgZXZlbnRzKQorICAgID4+PiBmb3IgYWN0aW9uLCBlbGVtIGluIGNvbnRleHQ6CisgICAgLi4uICAgcHJpbnQgYWN0aW9uLCBlbGVtLnRhZworCisgICAgPj4+IGV2ZW50cyA9ICgpCisgICAgPj4+IGNvbnRleHQgPSBpdGVycGFyc2UoU0lNUExFX1hNTEZJTEUsIGV2ZW50cz1ldmVudHMpCisgICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKKyAgICAuLi4gICBwcmludCBhY3Rpb24sIGVsZW0udGFnCisKKyAgICA+Pj4gZXZlbnRzID0gKCJzdGFydCIsICJlbmQiKQorICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKFNJTVBMRV9YTUxGSUxFLCBldmVudHMpCisgICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKKyAgICAuLi4gICBwcmludCBhY3Rpb24sIGVsZW0udGFnCisgICAgc3RhcnQgcm9vdAorICAgIHN0YXJ0IGVsZW1lbnQKKyAgICBlbmQgZWxlbWVudAorICAgIHN0YXJ0IGVsZW1lbnQKKyAgICBlbmQgZWxlbWVudAorICAgIHN0YXJ0IGVtcHR5LWVsZW1lbnQKKyAgICBlbmQgZW1wdHktZWxlbWVudAorICAgIGVuZCByb290CisKKyAgICA+Pj4gZXZlbnRzID0gKCJzdGFydCIsICJlbmQiLCAic3RhcnQtbnMiLCAiZW5kLW5zIikKKyAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShTSU1QTEVfTlNfWE1MRklMRSwgZXZlbnRzKQorICAgID4+PiBmb3IgYWN0aW9uLCBlbGVtIGluIGNvbnRleHQ6CisgICAgLi4uICAgaWYgYWN0aW9uIGluICgic3RhcnQiLCAiZW5kIik6CisgICAgLi4uICAgICBwcmludCBhY3Rpb24sIGVsZW0udGFnCisgICAgLi4uICAgZWxzZToKKyAgICAuLi4gICAgIHByaW50IGFjdGlvbiwgZWxlbQorICAgIHN0YXJ0LW5zICgnJywgJ25hbWVzcGFjZScpCisgICAgc3RhcnQge25hbWVzcGFjZX1yb290CisgICAgc3RhcnQge25hbWVzcGFjZX1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIHN0YXJ0IHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIGVuZCB7bmFtZXNwYWNlfWVsZW1lbnQKKyAgICBzdGFydCB7bmFtZXNwYWNlfWVtcHR5LWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1lbXB0eS1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9cm9vdAorICAgIGVuZC1ucyBOb25lCisKKyAgICA+Pj4gZXZlbnRzID0gKCJzdGFydCIsICJlbmQiLCAiYm9ndXMiKQorICAgID4+PiB3aXRoIG9wZW4oU0lNUExFX1hNTEZJTEUsICJyYiIpIGFzIGY6CisgICAgLi4uICAgICBpdGVycGFyc2UoZiwgZXZlbnRzKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBWYWx1ZUVycm9yOiB1bmtub3duIGV2ZW50ICdib2d1cycKKworICAgID4+PiBpbXBvcnQgU3RyaW5nSU8KKworICAgID4+PiBzb3VyY2UgPSBTdHJpbmdJTy5TdHJpbmdJTygKKyAgICAuLi4gICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+XFxuIgorICAgIC4uLiAgICAgIjxib2R5IHhtbG5zPSdodHRwOi8vJiMyMzM7ZmZib3Qub3JnL25zJ1xcbiIKKyAgICAuLi4gICAgICIgICAgICB4bWxuczpjbFxceGU5PSdodHRwOi8vZWZmYm90Lm9yZy9ucyc+dGV4dDwvYm9keT5cXG4iKQorICAgID4+PiBldmVudHMgPSAoInN0YXJ0LW5zIiwpCisgICAgPj4+IGNvbnRleHQgPSBpdGVycGFyc2Uoc291cmNlLCBldmVudHMpCisgICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKKyAgICAuLi4gICAgIHByaW50IGFjdGlvbiwgZWxlbQorICAgIHN0YXJ0LW5zICgnJywgdSdodHRwOi8vXFx4ZTlmZmJvdC5vcmcvbnMnKQorICAgIHN0YXJ0LW5zICh1J2NsXFx4ZTknLCAnaHR0cDovL2VmZmJvdC5vcmcvbnMnKQorCisgICAgPj4+IHNvdXJjZSA9IFN0cmluZ0lPLlN0cmluZ0lPKCI8ZG9jdW1lbnQgLz5qdW5rIikKKyAgICA+Pj4gdHJ5OgorICAgIC4uLiAgIGZvciBhY3Rpb24sIGVsZW0gaW4gaXRlcnBhcnNlKHNvdXJjZSk6CisgICAgLi4uICAgICBwcmludCBhY3Rpb24sIGVsZW0udGFnCisgICAgLi4uIGV4Y2VwdCBFVC5QYXJzZUVycm9yLCB2OgorICAgIC4uLiAgIHByaW50IHYKKyAgICBlbmQgZG9jdW1lbnQKKyAgICBqdW5rIGFmdGVyIGRvY3VtZW50IGVsZW1lbnQ6IGxpbmUgMSwgY29sdW1uIDEyCisgICAgIiIiCisKK2RlZiB3cml0ZWZpbGUoKToKKyAgICAiIiIKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIpCisgICAgPj4+IGVsZW0udGV4dCA9ICJ0ZXh0IgorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZz50ZXh0PC90YWc+JworICAgID4+PiBFVC5TdWJFbGVtZW50KGVsZW0sICJzdWJ0YWciKS50ZXh0ID0gInN1YnRleHQiCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPnRleHQ8c3VidGFnPnN1YnRleHQ8L3N1YnRhZz48L3RhZz4nCisKKyAgICBUZXN0IHRhZyBzdXBwcmVzc2lvbgorICAgID4+PiBlbGVtLnRhZyA9IE5vbmUKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJ3RleHQ8c3VidGFnPnN1YnRleHQ8L3N1YnRhZz4nCisgICAgPj4+IGVsZW0uaW5zZXJ0KDAsIEVULkNvbW1lbnQoImNvbW1lbnQiKSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICAgICAjIGFzc3VtZXMgMS4zCisgICAgJ3RleHQ8IS0tY29tbWVudC0tPjxzdWJ0YWc+c3VidGV4dDwvc3VidGFnPicKKyAgICA+Pj4gZWxlbVswXSA9IEVULlBJKCJrZXkiLCAidmFsdWUiKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAndGV4dDw/a2V5IHZhbHVlPz48c3VidGFnPnN1YnRleHQ8L3N1YnRhZz4nCisgICAgIiIiCisKK2RlZiBjdXN0b21fYnVpbGRlcigpOgorICAgICIiIgorICAgIFRlc3QgcGFyc2VyIHcuIGN1c3RvbSBidWlsZGVyLgorCisgICAgPj4+IHdpdGggb3BlbihTSU1QTEVfWE1MRklMRSkgYXMgZjoKKyAgICAuLi4gICAgIGRhdGEgPSBmLnJlYWQoKQorICAgID4+PiBjbGFzcyBCdWlsZGVyOgorICAgIC4uLiAgICAgZGVmIHN0YXJ0KHNlbGYsIHRhZywgYXR0cmliKToKKyAgICAuLi4gICAgICAgICBwcmludCAic3RhcnQiLCB0YWcKKyAgICAuLi4gICAgIGRlZiBlbmQoc2VsZiwgdGFnKToKKyAgICAuLi4gICAgICAgICBwcmludCAiZW5kIiwgdGFnCisgICAgLi4uICAgICBkZWYgZGF0YShzZWxmLCB0ZXh0KToKKyAgICAuLi4gICAgICAgICBwYXNzCisgICAgPj4+IGJ1aWxkZXIgPSBCdWlsZGVyKCkKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKHRhcmdldD1idWlsZGVyKQorICAgID4+PiBwYXJzZXIuZmVlZChkYXRhKQorICAgIHN0YXJ0IHJvb3QKKyAgICBzdGFydCBlbGVtZW50CisgICAgZW5kIGVsZW1lbnQKKyAgICBzdGFydCBlbGVtZW50CisgICAgZW5kIGVsZW1lbnQKKyAgICBzdGFydCBlbXB0eS1lbGVtZW50CisgICAgZW5kIGVtcHR5LWVsZW1lbnQKKyAgICBlbmQgcm9vdAorCisgICAgPj4+IHdpdGggb3BlbihTSU1QTEVfTlNfWE1MRklMRSkgYXMgZjoKKyAgICAuLi4gICAgIGRhdGEgPSBmLnJlYWQoKQorICAgID4+PiBjbGFzcyBCdWlsZGVyOgorICAgIC4uLiAgICAgZGVmIHN0YXJ0KHNlbGYsIHRhZywgYXR0cmliKToKKyAgICAuLi4gICAgICAgICBwcmludCAic3RhcnQiLCB0YWcKKyAgICAuLi4gICAgIGRlZiBlbmQoc2VsZiwgdGFnKToKKyAgICAuLi4gICAgICAgICBwcmludCAiZW5kIiwgdGFnCisgICAgLi4uICAgICBkZWYgZGF0YShzZWxmLCB0ZXh0KToKKyAgICAuLi4gICAgICAgICBwYXNzCisgICAgLi4uICAgICBkZWYgcGkoc2VsZiwgdGFyZ2V0LCBkYXRhKToKKyAgICAuLi4gICAgICAgICBwcmludCAicGkiLCB0YXJnZXQsIHJlcHIoZGF0YSkKKyAgICAuLi4gICAgIGRlZiBjb21tZW50KHNlbGYsIGRhdGEpOgorICAgIC4uLiAgICAgICAgIHByaW50ICJjb21tZW50IiwgcmVwcihkYXRhKQorICAgID4+PiBidWlsZGVyID0gQnVpbGRlcigpCisgICAgPj4+IHBhcnNlciA9IEVULlhNTFBhcnNlcih0YXJnZXQ9YnVpbGRlcikKKyAgICA+Pj4gcGFyc2VyLmZlZWQoZGF0YSkKKyAgICBwaSBwaSAnZGF0YScKKyAgICBjb21tZW50ICcgY29tbWVudCAnCisgICAgc3RhcnQge25hbWVzcGFjZX1yb290CisgICAgc3RhcnQge25hbWVzcGFjZX1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIHN0YXJ0IHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIGVuZCB7bmFtZXNwYWNlfWVsZW1lbnQKKyAgICBzdGFydCB7bmFtZXNwYWNlfWVtcHR5LWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1lbXB0eS1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9cm9vdAorCisgICAgIiIiCisKK2RlZiBnZXRjaGlsZHJlbigpOgorICAgICIiIgorICAgIFRlc3QgRWxlbWVudC5nZXRjaGlsZHJlbigpCisKKyAgICA+Pj4gd2l0aCBvcGVuKFNJTVBMRV9YTUxGSUxFLCAiciIpIGFzIGY6CisgICAgLi4uICAgICB0cmVlID0gRVQucGFyc2UoZikKKyAgICA+Pj4gZm9yIGVsZW0gaW4gdHJlZS5nZXRyb290KCkuaXRlcigpOgorICAgIC4uLiAgICAgc3VtbWFyaXplX2xpc3QoZWxlbS5nZXRjaGlsZHJlbigpKQorICAgIFsnZWxlbWVudCcsICdlbGVtZW50JywgJ2VtcHR5LWVsZW1lbnQnXQorICAgIFtdCisgICAgW10KKyAgICBbXQorICAgID4+PiBmb3IgZWxlbSBpbiB0cmVlLmdldGl0ZXJhdG9yKCk6CisgICAgLi4uICAgICBzdW1tYXJpemVfbGlzdChlbGVtLmdldGNoaWxkcmVuKCkpCisgICAgWydlbGVtZW50JywgJ2VsZW1lbnQnLCAnZW1wdHktZWxlbWVudCddCisgICAgW10KKyAgICBbXQorICAgIFtdCisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQorICAgID4+PiBsZW4oZWxlbS5nZXRjaGlsZHJlbigpKQorICAgIDMKKyAgICA+Pj4gbGVuKGVsZW1bMl0uZ2V0Y2hpbGRyZW4oKSkKKyAgICAxCisgICAgPj4+IGVsZW1bOl0gPT0gZWxlbS5nZXRjaGlsZHJlbigpCisgICAgVHJ1ZQorICAgID4+PiBjaGlsZDEgPSBlbGVtWzBdCisgICAgPj4+IGNoaWxkMiA9IGVsZW1bMl0KKyAgICA+Pj4gZGVsIGVsZW1bMToyXQorICAgID4+PiBsZW4oZWxlbS5nZXRjaGlsZHJlbigpKQorICAgIDIKKyAgICA+Pj4gY2hpbGQxID09IGVsZW1bMF0KKyAgICBUcnVlCisgICAgPj4+IGNoaWxkMiA9PSBlbGVtWzFdCisgICAgVHJ1ZQorICAgID4+PiBlbGVtWzA6Ml0gPSBbY2hpbGQyLCBjaGlsZDFdCisgICAgPj4+IGNoaWxkMiA9PSBlbGVtWzBdCisgICAgVHJ1ZQorICAgID4+PiBjaGlsZDEgPT0gZWxlbVsxXQorICAgIFRydWUKKyAgICA+Pj4gY2hpbGQxID09IGVsZW1bMF0KKyAgICBGYWxzZQorICAgID4+PiBlbGVtLmNsZWFyKCkKKyAgICA+Pj4gZWxlbS5nZXRjaGlsZHJlbigpCisgICAgW10KKyAgICAiIiIKKworZGVmIHdyaXRlc3RyaW5nKCk6CisgICAgIiIiCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCisgICAgPj4+IEVULnRvc3RyaW5nKGVsZW0pCisgICAgJzxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPicKKyAgICA+Pj4gZWxlbSA9IEVULmZyb21zdHJpbmcoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCisgICAgPj4+IEVULnRvc3RyaW5nKGVsZW0pCisgICAgJzxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPicKKyAgICAiIiIKKworZGVmIGNoZWNrX2VuY29kaW5nKGVuY29kaW5nKToKKyAgICAiIiIKKyAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoImFzY2lpIikKKyAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoInVzLWFzY2lpIikKKyAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoImlzby04ODU5LTEiKQorICAgID4+PiBjaGVja19lbmNvZGluZygiaXNvLTg4NTktMTUiKQorICAgID4+PiBjaGVja19lbmNvZGluZygiY3A0MzciKQorICAgID4+PiBjaGVja19lbmNvZGluZygibWFjLXJvbWFuIikKKyAgICAiIiIKKyAgICBFVC5YTUwoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9JyVzJz8+PHhtbCAvPiIgJSBlbmNvZGluZykKKworZGVmIGVuY29kaW5nKCk6CisgICAgciIiIgorICAgIFRlc3QgZW5jb2RpbmcgaXNzdWVzLgorCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciKQorICAgID4+PiBlbGVtLnRleHQgPSB1ImFiYyIKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+YWJjPC90YWc+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAnPHRhZz5hYmM8L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKQorICAgICc8dGFnPmFiYzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJpc28tODg1OS0xIikKKyAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/PlxuPHRhZz5hYmM8L3RhZz4iCisKKyAgICA+Pj4gZWxlbS50ZXh0ID0gIjwmXCJcJz4iCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPiZsdDsmYW1wOyJcJyZndDs8L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXRmLTgiKQorICAgICc8dGFnPiZsdDsmYW1wOyJcJyZndDs8L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKSAjIGNkYXRhIGNoYXJhY3RlcnMKKyAgICAnPHRhZz4mbHQ7JmFtcDsiXCcmZ3Q7PC90YWc+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9Imlzby04ODU5LTEiKQorICAgICc8P3htbCB2ZXJzaW9uPVwnMS4wXCcgZW5jb2Rpbmc9XCdpc28tODg1OS0xXCc/PlxuPHRhZz4mbHQ7JmFtcDsiXCcmZ3Q7PC90YWc+JworCisgICAgPj4+IGVsZW0uYXR0cmliWyJrZXkiXSA9ICI8JlwiXCc+IgorICAgID4+PiBlbGVtLnRleHQgPSBOb25lCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnIGtleT0iJmx0OyZhbXA7JnF1b3Q7XCcmZ3Q7IiAvPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgJzx0YWcga2V5PSImbHQ7JmFtcDsmcXVvdDtcJyZndDsiIC8+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InVzLWFzY2lpIikKKyAgICAnPHRhZyBrZXk9IiZsdDsmYW1wOyZxdW90O1wnJmd0OyIgLz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0iaXNvLTg4NTktMSIpCisgICAgJzw/eG1sIHZlcnNpb249XCcxLjBcJyBlbmNvZGluZz1cJ2lzby04ODU5LTFcJz8+XG48dGFnIGtleT0iJmx0OyZhbXA7JnF1b3Q7XCcmZ3Q7IiAvPicKKworICAgID4+PiBlbGVtLnRleHQgPSB1J1x4ZTVceGY2XHhmNjw+JworICAgID4+PiBlbGVtLmF0dHJpYi5jbGVhcigpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPiYjMjI5OyYjMjQ2OyYjMjQ2OyZsdDsmZ3Q7PC90YWc+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAnPHRhZz5ceGMzXHhhNVx4YzNceGI2XHhjM1x4YjYmbHQ7Jmd0OzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1cy1hc2NpaSIpCisgICAgJzx0YWc+JiMyMjk7JiMyNDY7JiMyNDY7Jmx0OyZndDs8L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0iaXNvLTg4NTktMSIpCisgICAgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz5cbjx0YWc+XHhlNVx4ZjZceGY2Jmx0OyZndDs8L3RhZz4iCisKKyAgICA+Pj4gZWxlbS5hdHRyaWJbImtleSJdID0gdSdceGU1XHhmNlx4ZjY8PicKKyAgICA+Pj4gZWxlbS50ZXh0ID0gTm9uZQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZyBrZXk9IiYjMjI5OyYjMjQ2OyYjMjQ2OyZsdDsmZ3Q7IiAvPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgJzx0YWcga2V5PSJceGMzXHhhNVx4YzNceGI2XHhjM1x4YjYmbHQ7Jmd0OyIgLz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKQorICAgICc8dGFnIGtleT0iJiMyMjk7JiMyNDY7JiMyNDY7Jmx0OyZndDsiIC8+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9Imlzby04ODU5LTEiKQorICAgICc8P3htbCB2ZXJzaW9uPVwnMS4wXCcgZW5jb2Rpbmc9XCdpc28tODg1OS0xXCc/PlxuPHRhZyBrZXk9Ilx4ZTVceGY2XHhmNiZsdDsmZ3Q7IiAvPicKKyAgICAiIiIKKworZGVmIG1ldGhvZHMoKToKKyAgICByIiIiCisgICAgVGVzdCBzZXJpYWxpemF0aW9uIG1ldGhvZHMuCisKKyAgICA+Pj4gZSA9IEVULlhNTCgiPGh0bWw+PGxpbmsvPjxzY3JpcHQ+MSAmbHQ7IDI8L3NjcmlwdD48L2h0bWw+IikKKyAgICA+Pj4gZS50YWlsID0gIlxuIgorICAgID4+PiBzZXJpYWxpemUoZSkKKyAgICAnPGh0bWw+PGxpbmsgLz48c2NyaXB0PjEgJmx0OyAyPC9zY3JpcHQ+PC9odG1sPlxuJworICAgID4+PiBzZXJpYWxpemUoZSwgbWV0aG9kPU5vbmUpCisgICAgJzxodG1sPjxsaW5rIC8+PHNjcmlwdD4xICZsdDsgMjwvc2NyaXB0PjwvaHRtbD5cbicKKyAgICA+Pj4gc2VyaWFsaXplKGUsIG1ldGhvZD0ieG1sIikKKyAgICAnPGh0bWw+PGxpbmsgLz48c2NyaXB0PjEgJmx0OyAyPC9zY3JpcHQ+PC9odG1sPlxuJworICAgID4+PiBzZXJpYWxpemUoZSwgbWV0aG9kPSJodG1sIikKKyAgICAnPGh0bWw+PGxpbms+PHNjcmlwdD4xIDwgMjwvc2NyaXB0PjwvaHRtbD5cbicKKyAgICA+Pj4gc2VyaWFsaXplKGUsIG1ldGhvZD0idGV4dCIpCisgICAgJzEgPCAyXG4nCisgICAgIiIiCisKK2RlZiBpdGVyYXRvcnMoKToKKyAgICAiIiIKKyAgICBUZXN0IGl0ZXJhdG9ycy4KKworICAgID4+PiBlID0gRVQuWE1MKCI8aHRtbD48Ym9keT50aGlzIGlzIGEgPGk+cGFyYWdyYXBoPC9pPi48L2JvZHk+Li48L2h0bWw+IikKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZS5pdGVyKCkpCisgICAgWydodG1sJywgJ2JvZHknLCAnaSddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGUuZmluZCgiYm9keSIpLml0ZXIoKSkKKyAgICBbJ2JvZHknLCAnaSddCisgICAgPj4+IHN1bW1hcml6ZShuZXh0KGUuaXRlcigpKSkKKyAgICAnaHRtbCcKKyAgICA+Pj4gIiIuam9pbihlLml0ZXJ0ZXh0KCkpCisgICAgJ3RoaXMgaXMgYSBwYXJhZ3JhcGguLi4nCisgICAgPj4+ICIiLmpvaW4oZS5maW5kKCJib2R5IikuaXRlcnRleHQoKSkKKyAgICAndGhpcyBpcyBhIHBhcmFncmFwaC4nCisgICAgPj4+IG5leHQoZS5pdGVydGV4dCgpKQorICAgICd0aGlzIGlzIGEgJworCisgICAgTWV0aG9kIGl0ZXJwYXJzZSBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhdG9yLiBTZWUgYnVnIDY0NzIuCisKKyAgICA+Pj4gc291cmNlZmlsZSA9IHNlcmlhbGl6ZShlLCB0b19zdHJpbmc9RmFsc2UpCisgICAgPj4+IG5leHQoRVQuaXRlcnBhcnNlKHNvdXJjZWZpbGUpKSAgIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAoJ2VuZCcsIDxFbGVtZW50ICdpJyBhdCAweC4uLj4pCisKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKE5vbmUpCisgICAgPj4+IHRyZWUuaXRlcigpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIEF0dHJpYnV0ZUVycm9yOiAnTm9uZVR5cGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdpdGVyJworICAgICIiIgorCitFTlRJVFlfWE1MID0gIiIiXAorPCFET0NUWVBFIHBvaW50cyBbCis8IUVOVElUWSAlIHVzZXItZW50aXRpZXMgU1lTVEVNICd1c2VyLWVudGl0aWVzLnhtbCc+CisldXNlci1lbnRpdGllczsKK10+Cis8ZG9jdW1lbnQ+JmVudGl0eTs8L2RvY3VtZW50PgorIiIiCisKK2RlZiBlbnRpdHkoKToKKyAgICAiIiIKKyAgICBUZXN0IGVudGl0eSBoYW5kbGluZy4KKworICAgIDEpIGdvb2QgZW50aXRpZXMKKworICAgID4+PiBlID0gRVQuWE1MKCI8ZG9jdW1lbnQgdGl0bGU9JyYjeDgyMzA7Jz50ZXN0PC9kb2N1bWVudD4iKQorICAgID4+PiBzZXJpYWxpemUoZSkKKyAgICAnPGRvY3VtZW50IHRpdGxlPSImIzMzMzI4OyI+dGVzdDwvZG9jdW1lbnQ+JworCisgICAgMikgYmFkIGVudGl0aWVzCisKKyAgICA+Pj4gRVQuWE1MKCI8ZG9jdW1lbnQ+JmVudGl0eTs8L2RvY3VtZW50PiIpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFBhcnNlRXJyb3I6IHVuZGVmaW5lZCBlbnRpdHk6IGxpbmUgMSwgY29sdW1uIDEwCisKKyAgICA+Pj4gRVQuWE1MKEVOVElUWV9YTUwpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFBhcnNlRXJyb3I6IHVuZGVmaW5lZCBlbnRpdHkgJmVudGl0eTs6IGxpbmUgNSwgY29sdW1uIDEwCisKKyAgICAzKSBjdXN0b20gZW50aXR5CisKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKCkKKyAgICA+Pj4gcGFyc2VyLmVudGl0eVsiZW50aXR5Il0gPSAidGV4dCIKKyAgICA+Pj4gcGFyc2VyLmZlZWQoRU5USVRZX1hNTCkKKyAgICA+Pj4gcm9vdCA9IHBhcnNlci5jbG9zZSgpCisgICAgPj4+IHNlcmlhbGl6ZShyb290KQorICAgICc8ZG9jdW1lbnQ+dGV4dDwvZG9jdW1lbnQ+JworICAgICIiIgorCitkZWYgZXJyb3IoeG1sKToKKyAgICAiIiIKKworICAgIFRlc3QgZXJyb3IgaGFuZGxpbmcuCisKKyAgICA+Pj4gaXNzdWJjbGFzcyhFVC5QYXJzZUVycm9yLCBTeW50YXhFcnJvcikKKyAgICBUcnVlCisgICAgPj4+IGVycm9yKCJmb28iKS5wb3NpdGlvbgorICAgICgxLCAwKQorICAgID4+PiBlcnJvcigiPHRhZz4mZm9vOzwvdGFnPiIpLnBvc2l0aW9uCisgICAgKDEsIDUpCisgICAgPj4+IGVycm9yKCJmb29iYXI8IikucG9zaXRpb24KKyAgICAoMSwgNikKKworICAgICIiIgorICAgIHRyeToKKyAgICAgICAgRVQuWE1MKHhtbCkKKyAgICBleGNlcHQgRVQuUGFyc2VFcnJvcjoKKyAgICAgICAgcmV0dXJuIHN5cy5leGNfdmFsdWUKKworZGVmIG5hbWVzcGFjZSgpOgorICAgICIiIgorICAgIFRlc3QgbmFtZXNwYWNlIGlzc3Vlcy4KKworICAgIDEpIHhtbCBuYW1lc3BhY2UKKworICAgID4+PiBlbGVtID0gRVQuWE1MKCI8dGFnIHhtbDpsYW5nPSdlbicgLz4iKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjEKKyAgICAnPHRhZyB4bWw6bGFuZz0iZW4iIC8+JworCisgICAgMikgb3RoZXIgIndlbGwta25vd24iIG5hbWVzcGFjZXMKKworICAgID4+PiBlbGVtID0gRVQuWE1MKCI8cmRmOlJERiB4bWxuczpyZGY9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMnIC8+IikKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMi4xCisgICAgJzxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgLz4nCisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTCgiPGh0bWw6aHRtbCB4bWxuczpodG1sPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyAvPiIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDIuMgorICAgICc8aHRtbDpodG1sIHhtbG5zOmh0bWw9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIC8+JworCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoIjxzb2FwOkVudmVsb3BlIHhtbG5zOnNvYXA9J2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUnIC8+IikKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMi4zCisgICAgJzxuczA6RW52ZWxvcGUgeG1sbnM6bnMwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlIiAvPicKKworICAgIDMpIHVua25vd24gbmFtZXNwYWNlcworICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUxfTlMpCisgICAgPj4+IHByaW50IHNlcmlhbGl6ZShlbGVtKQorICAgIDxuczA6Ym9keSB4bWxuczpuczA9Imh0dHA6Ly9lZmZib3Qub3JnL25zIj4KKyAgICAgIDxuczA6dGFnPnRleHQ8L25zMDp0YWc+CisgICAgICA8bnMwOnRhZyAvPgorICAgICAgPG5zMDpzZWN0aW9uPgorICAgICAgICA8bnMwOnRhZz5zdWJ0ZXh0PC9uczA6dGFnPgorICAgICAgPC9uczA6c2VjdGlvbj4KKyAgICA8L25zMDpib2R5PgorICAgICIiIgorCitkZWYgcW5hbWUoKToKKyAgICAiIiIKKyAgICBUZXN0IFFOYW1lIGhhbmRsaW5nLgorCisgICAgMSkgZGVjb3JhdGVkIHRhZ3MKKworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgie3VyaX10YWciKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjEKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIC8+JworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudChFVC5RTmFtZSgie3VyaX10YWciKSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMS4yCisgICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiAvPicKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoRVQuUU5hbWUoInVyaSIsICJ0YWciKSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMS4zCisgICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiAvPicKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoRVQuUU5hbWUoInVyaSIsICJ0YWciKSkKKyAgICA+Pj4gc3ViZWxlbSA9IEVULlN1YkVsZW1lbnQoZWxlbSwgRVQuUU5hbWUoInVyaSIsICJ0YWcxIikpCisgICAgPj4+IHN1YmVsZW0gPSBFVC5TdWJFbGVtZW50KGVsZW0sIEVULlFOYW1lKCJ1cmkiLCAidGFnMiIpKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjQKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiPjxuczA6dGFnMSAvPjxuczA6dGFnMiAvPjwvbnMwOnRhZz4nCisKKyAgICAyKSBkZWNvcmF0ZWQgYXR0cmlidXRlcworCisgICAgPj4+IGVsZW0uY2xlYXIoKQorICAgID4+PiBlbGVtLmF0dHJpYlsie3VyaX1rZXkiXSA9ICJ2YWx1ZSIKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMi4xCisgICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiBuczA6a2V5PSJ2YWx1ZSIgLz4nCisKKyAgICA+Pj4gZWxlbS5jbGVhcigpCisgICAgPj4+IGVsZW0uYXR0cmliW0VULlFOYW1lKCJ7dXJpfWtleSIpXSA9ICJ2YWx1ZSIKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMi4yCisgICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiBuczA6a2V5PSJ2YWx1ZSIgLz4nCisKKyAgICAzKSBkZWNvcmF0ZWQgdmFsdWVzIGFyZSBub3QgY29udmVydGVkIGJ5IGRlZmF1bHQsIGJ1dCB0aGUKKyAgICAgICBRTmFtZSB3cmFwcGVyIGNhbiBiZSB1c2VkIGZvciB2YWx1ZXMKKworICAgID4+PiBlbGVtLmNsZWFyKCkKKyAgICA+Pj4gZWxlbS5hdHRyaWJbInt1cml9a2V5Il0gPSAie3VyaX12YWx1ZSIKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMy4xCisgICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiBuczA6a2V5PSJ7dXJpfXZhbHVlIiAvPicKKworICAgID4+PiBlbGVtLmNsZWFyKCkKKyAgICA+Pj4gZWxlbS5hdHRyaWJbInt1cml9a2V5Il0gPSBFVC5RTmFtZSgie3VyaX12YWx1ZSIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDMuMgorICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSIgbnMwOmtleT0ibnMwOnZhbHVlIiAvPicKKworICAgID4+PiBlbGVtLmNsZWFyKCkKKyAgICA+Pj4gc3ViZWxlbSA9IEVULkVsZW1lbnQoInRhZyIpCisgICAgPj4+IHN1YmVsZW0uYXR0cmliWyJ7dXJpMX1rZXkiXSA9IEVULlFOYW1lKCJ7dXJpMn12YWx1ZSIpCisgICAgPj4+IGVsZW0uYXBwZW5kKHN1YmVsZW0pCisgICAgPj4+IGVsZW0uYXBwZW5kKHN1YmVsZW0pCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDMuMworICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSIgeG1sbnM6bnMxPSJ1cmkxIiB4bWxuczpuczI9InVyaTIiPjx0YWcgbnMxOmtleT0ibnMyOnZhbHVlIiAvPjx0YWcgbnMxOmtleT0ibnMyOnZhbHVlIiAvPjwvbnMwOnRhZz4nCisKKyAgICA0KSBEaXJlY3QgUU5hbWUgdGVzdHMKKworICAgID4+PiBzdHIoRVQuUU5hbWUoJ25zJywgJ3RhZycpKQorICAgICd7bnN9dGFnJworICAgID4+PiBzdHIoRVQuUU5hbWUoJ3tuc310YWcnKSkKKyAgICAne25zfXRhZycKKyAgICA+Pj4gcTEgPSBFVC5RTmFtZSgnbnMnLCAndGFnJykKKyAgICA+Pj4gcTIgPSBFVC5RTmFtZSgnbnMnLCAndGFnJykKKyAgICA+Pj4gcTEgPT0gcTIKKyAgICBUcnVlCisgICAgPj4+IHEyID0gRVQuUU5hbWUoJ25zJywgJ290aGVyLXRhZycpCisgICAgPj4+IHExID09IHEyCisgICAgRmFsc2UKKyAgICA+Pj4gcTEgPT0gJ25zOnRhZycKKyAgICBGYWxzZQorICAgID4+PiBxMSA9PSAne25zfXRhZycKKyAgICBUcnVlCisgICAgIiIiCisKK2RlZiBkb2N0eXBlX3B1YmxpYygpOgorICAgICIiIgorICAgIFRlc3QgUFVCTElDIGRvY3R5cGUuCisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTCgnPCFET0NUWVBFIGh0bWwgUFVCTElDJworICAgIC4uLiAgICcgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIicKKyAgICAuLi4gICAnICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4nCisgICAgLi4uICAgJzxodG1sPnRleHQ8L2h0bWw+JykKKworICAgICIiIgorCitkZWYgeHBhdGhfdG9rZW5pemVyKHApOgorICAgICIiIgorICAgIFRlc3QgdGhlIFhQYXRoIHRva2VuaXplci4KKworICAgID4+PiAjIHRlc3RzIGZyb20gdGhlIHhtbCBzcGVjaWZpY2F0aW9uCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiKiIpCisgICAgWycqJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJ0ZXh0KCkiKQorICAgIFsndGV4dCcsICcoKSddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiQG5hbWUiKQorICAgIFsnQCcsICduYW1lJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJAKiIpCisgICAgWydAJywgJyonXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoInBhcmFbMV0iKQorICAgIFsncGFyYScsICdbJywgJzEnLCAnXSddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigicGFyYVtsYXN0KCldIikKKyAgICBbJ3BhcmEnLCAnWycsICdsYXN0JywgJygpJywgJ10nXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIiovcGFyYSIpCisgICAgWycqJywgJy8nLCAncGFyYSddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiL2RvYy9jaGFwdGVyWzVdL3NlY3Rpb25bMl0iKQorICAgIFsnLycsICdkb2MnLCAnLycsICdjaGFwdGVyJywgJ1snLCAnNScsICddJywgJy8nLCAnc2VjdGlvbicsICdbJywgJzInLCAnXSddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiY2hhcHRlci8vcGFyYSIpCisgICAgWydjaGFwdGVyJywgJy8vJywgJ3BhcmEnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi8vcGFyYSIpCisgICAgWycvLycsICdwYXJhJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIvL29saXN0L2l0ZW0iKQorICAgIFsnLy8nLCAnb2xpc3QnLCAnLycsICdpdGVtJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuIikKKyAgICBbJy4nXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi4vL3BhcmEiKQorICAgIFsnLicsICcvLycsICdwYXJhJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuLiIpCisgICAgWycuLiddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiLi4vQGxhbmciKQorICAgIFsnLi4nLCAnLycsICdAJywgJ2xhbmcnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoImNoYXB0ZXJbdGl0bGVdIikKKyAgICBbJ2NoYXB0ZXInLCAnWycsICd0aXRsZScsICddJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJlbXBsb3llZVtAc2VjcmV0YXJ5IGFuZCBAYXNzaXN0YW50XSIpCisgICAgWydlbXBsb3llZScsICdbJywgJ0AnLCAnc2VjcmV0YXJ5JywgJycsICdhbmQnLCAnJywgJ0AnLCAnYXNzaXN0YW50JywgJ10nXQorCisgICAgPj4+ICMgYWRkaXRpb25hbCB0ZXN0cworICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIntodHRwOi8vc3BhbX1lZ2ciKQorICAgIFsne2h0dHA6Ly9zcGFtfWVnZyddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiLi9zcGFtLmVnZyIpCisgICAgWycuJywgJy8nLCAnc3BhbS5lZ2cnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi4vL3todHRwOi8vc3BhbX1lZ2ciKQorICAgIFsnLicsICcvLycsICd7aHR0cDovL3NwYW19ZWdnJ10KKyAgICAiIiIKKyAgICBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFBhdGgKKyAgICBvdXQgPSBbXQorICAgIGZvciBvcCwgdGFnIGluIEVsZW1lbnRQYXRoLnhwYXRoX3Rva2VuaXplcihwKToKKyAgICAgICAgb3V0LmFwcGVuZChvcCBvciB0YWcpCisgICAgcmV0dXJuIG91dAorCitkZWYgcHJvY2Vzc2luZ2luc3RydWN0aW9uKCk6CisgICAgIiIiCisgICAgVGVzdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gZGlyZWN0bHkKKworICAgID4+PiBFVC50b3N0cmluZyhFVC5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oJ3Rlc3QnLCAnaW5zdHJ1Y3Rpb24nKSkKKyAgICAnPD90ZXN0IGluc3RydWN0aW9uPz4nCisgICAgPj4+IEVULnRvc3RyaW5nKEVULlBJKCd0ZXN0JywgJ2luc3RydWN0aW9uJykpCisgICAgJzw/dGVzdCBpbnN0cnVjdGlvbj8+JworCisgICAgSXNzdWUgIzI3NDYKKworICAgID4+PiBFVC50b3N0cmluZyhFVC5QSSgndGVzdCcsICc8dGVzdGluZyY+JykpCisgICAgJzw/dGVzdCA8dGVzdGluZyY+Pz4nCisgICAgPj4+IEVULnRvc3RyaW5nKEVULlBJKCd0ZXN0JywgdSc8dGVzdGluZyY+XHhlMycpLCAnbGF0aW4xJykKKyAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nbGF0aW4xJz8+XFxuPD90ZXN0IDx0ZXN0aW5nJj5cXHhlMz8+IgorICAgICIiIgorCisjCisjIHhpbmNsdWRlIHRlc3RzIChzYW1wbGVzIGZyb20gYXBwZW5kaXggQyBvZiB0aGUgeGluY2x1ZGUgc3BlY2lmaWNhdGlvbikKKworWElOQ0xVREUgPSB7fQorCitYSU5DTFVERVsiQzEueG1sIl0gPSAiIiJcCis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzxkb2N1bWVudCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgIDxwPjEyMCBNeiBpcyBhZGVxdWF0ZSBmb3IgYW4gYXZlcmFnZSBob21lIHVzZXIuPC9wPgorICA8eGk6aW5jbHVkZSBocmVmPSJkaXNjbGFpbWVyLnhtbCIvPgorPC9kb2N1bWVudD4KKyIiIgorCitYSU5DTFVERVsiZGlzY2xhaW1lci54bWwiXSA9ICIiIlwKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPGRpc2NsYWltZXI+CisgIDxwPlRoZSBvcGluaW9ucyByZXByZXNlbnRlZCBoZXJlaW4gcmVwcmVzZW50IHRob3NlIG9mIHRoZSBpbmRpdmlkdWFsCisgIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIG9mZmljaWFsIHBvbGljeSBlbmRvcnNlZCBieSB0aGlzCisgIG9yZ2FuaXphdGlvbi48L3A+Cis8L2Rpc2NsYWltZXI+CisiIiIKKworWElOQ0xVREVbIkMyLnhtbCJdID0gIiIiXAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8ZG9jdW1lbnQgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgorICA8cD5UaGlzIGRvY3VtZW50IGhhcyBiZWVuIGFjY2Vzc2VkCisgIDx4aTppbmNsdWRlIGhyZWY9ImNvdW50LnR4dCIgcGFyc2U9InRleHQiLz4gdGltZXMuPC9wPgorPC9kb2N1bWVudD4KKyIiIgorCitYSU5DTFVERVsiY291bnQudHh0Il0gPSAiMzI0Mzg3IgorCitYSU5DTFVERVsiQzJiLnhtbCJdID0gIiIiXAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8ZG9jdW1lbnQgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgorICA8cD5UaGlzIGRvY3VtZW50IGhhcyBiZWVuIDxlbT5hY2Nlc3NlZDwvZW0+CisgIDx4aTppbmNsdWRlIGhyZWY9ImNvdW50LnR4dCIgcGFyc2U9InRleHQiLz4gdGltZXMuPC9wPgorPC9kb2N1bWVudD4KKyIiIgorCitYSU5DTFVERVsiQzMueG1sIl0gPSAiIiJcCis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzxkb2N1bWVudCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgIDxwPlRoZSBmb2xsb3dpbmcgaXMgdGhlIHNvdXJjZSBvZiB0aGUgImRhdGEueG1sIiByZXNvdXJjZTo8L3A+CisgIDxleGFtcGxlPjx4aTppbmNsdWRlIGhyZWY9ImRhdGEueG1sIiBwYXJzZT0idGV4dCIvPjwvZXhhbXBsZT4KKzwvZG9jdW1lbnQ+CisiIiIKKworWElOQ0xVREVbImRhdGEueG1sIl0gPSAiIiJcCis8P3htbCB2ZXJzaW9uPScxLjAnPz4KKzxkYXRhPgorICA8aXRlbT48IVtDREFUQVtCcm9va3MgJiBTaGllbGRzXV0+PC9pdGVtPgorPC9kYXRhPgorIiIiCisKK1hJTkNMVURFWyJDNS54bWwiXSA9ICIiIlwKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPGRpdiB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgIDx4aTppbmNsdWRlIGhyZWY9ImV4YW1wbGUudHh0IiBwYXJzZT0idGV4dCI+CisgICAgPHhpOmZhbGxiYWNrPgorICAgICAgPHhpOmluY2x1ZGUgaHJlZj0iZmFsbGJhY2stZXhhbXBsZS50eHQiIHBhcnNlPSJ0ZXh0Ij4KKyAgICAgICAgPHhpOmZhbGxiYWNrPjxhIGhyZWY9Im1haWx0bzpib2JAZXhhbXBsZS5vcmciPlJlcG9ydCBlcnJvcjwvYT48L3hpOmZhbGxiYWNrPgorICAgICAgPC94aTppbmNsdWRlPgorICAgIDwveGk6ZmFsbGJhY2s+CisgIDwveGk6aW5jbHVkZT4KKzwvZGl2PgorIiIiCisKK1hJTkNMVURFWyJkZWZhdWx0LnhtbCJdID0gIiIiXAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8ZG9jdW1lbnQgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgorICA8cD5FeGFtcGxlLjwvcD4KKyAgPHhpOmluY2x1ZGUgaHJlZj0ie30iLz4KKzwvZG9jdW1lbnQ+CisiIiIuZm9ybWF0KGNnaS5lc2NhcGUoU0lNUExFX1hNTEZJTEUsIFRydWUpKQorCitkZWYgeGluY2x1ZGVfbG9hZGVyKGhyZWYsIHBhcnNlPSJ4bWwiLCBlbmNvZGluZz1Ob25lKToKKyAgICB0cnk6CisgICAgICAgIGRhdGEgPSBYSU5DTFVERVtocmVmXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmFpc2UgSU9FcnJvcigicmVzb3VyY2Ugbm90IGZvdW5kIikKKyAgICBpZiBwYXJzZSA9PSAieG1sIjoKKyAgICAgICAgZnJvbSB4bWwuZXRyZWUuRWxlbWVudFRyZWUgaW1wb3J0IFhNTAorICAgICAgICByZXR1cm4gWE1MKGRhdGEpCisgICAgcmV0dXJuIGRhdGEKKworZGVmIHhpbmNsdWRlKCk6CisgICAgciIiIgorICAgIEJhc2ljIGluY2x1c2lvbiBleGFtcGxlIChYSW5jbHVkZSBDLjEpCisKKyAgICA+Pj4gZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlIGFzIEVUCisgICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50SW5jbHVkZQorCisgICAgPj4+IGRvY3VtZW50ID0geGluY2x1ZGVfbG9hZGVyKCJDMS54bWwiKQorICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCisgICAgPj4+IHByaW50IHNlcmlhbGl6ZShkb2N1bWVudCkgIyBDMQorICAgIDxkb2N1bWVudD4KKyAgICAgIDxwPjEyMCBNeiBpcyBhZGVxdWF0ZSBmb3IgYW4gYXZlcmFnZSBob21lIHVzZXIuPC9wPgorICAgICAgPGRpc2NsYWltZXI+CisgICAgICA8cD5UaGUgb3BpbmlvbnMgcmVwcmVzZW50ZWQgaGVyZWluIHJlcHJlc2VudCB0aG9zZSBvZiB0aGUgaW5kaXZpZHVhbAorICAgICAgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgb2ZmaWNpYWwgcG9saWN5IGVuZG9yc2VkIGJ5IHRoaXMKKyAgICAgIG9yZ2FuaXphdGlvbi48L3A+CisgICAgPC9kaXNjbGFpbWVyPgorICAgIDwvZG9jdW1lbnQ+CisKKyAgICBUZXh0dWFsIGluY2x1c2lvbiBleGFtcGxlIChYSW5jbHVkZSBDLjIpCisKKyAgICA+Pj4gZG9jdW1lbnQgPSB4aW5jbHVkZV9sb2FkZXIoIkMyLnhtbCIpCisgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIHhpbmNsdWRlX2xvYWRlcikKKyAgICA+Pj4gcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIEMyCisgICAgPGRvY3VtZW50PgorICAgICAgPHA+VGhpcyBkb2N1bWVudCBoYXMgYmVlbiBhY2Nlc3NlZAorICAgICAgMzI0Mzg3IHRpbWVzLjwvcD4KKyAgICA8L2RvY3VtZW50PgorCisgICAgVGV4dHVhbCBpbmNsdXNpb24gYWZ0ZXIgc2libGluZyBlbGVtZW50IChiYXNlZCBvbiBtb2RpZmllZCBYSW5jbHVkZSBDLjIpCisKKyAgICA+Pj4gZG9jdW1lbnQgPSB4aW5jbHVkZV9sb2FkZXIoIkMyYi54bWwiKQorICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCisgICAgPj4+IHByaW50KHNlcmlhbGl6ZShkb2N1bWVudCkpICMgQzJiCisgICAgPGRvY3VtZW50PgorICAgICAgPHA+VGhpcyBkb2N1bWVudCBoYXMgYmVlbiA8ZW0+YWNjZXNzZWQ8L2VtPgorICAgICAgMzI0Mzg3IHRpbWVzLjwvcD4KKyAgICA8L2RvY3VtZW50PgorCisgICAgVGV4dHVhbCBpbmNsdXNpb24gb2YgWE1MIGV4YW1wbGUgKFhJbmNsdWRlIEMuMykKKworICAgID4+PiBkb2N1bWVudCA9IHhpbmNsdWRlX2xvYWRlcigiQzMueG1sIikKKyAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgeGluY2x1ZGVfbG9hZGVyKQorICAgID4+PiBwcmludCBzZXJpYWxpemUoZG9jdW1lbnQpICMgQzMKKyAgICA8ZG9jdW1lbnQ+CisgICAgICA8cD5UaGUgZm9sbG93aW5nIGlzIHRoZSBzb3VyY2Ugb2YgdGhlICJkYXRhLnhtbCIgcmVzb3VyY2U6PC9wPgorICAgICAgPGV4YW1wbGU+Jmx0Oz94bWwgdmVyc2lvbj0nMS4wJz8mZ3Q7CisgICAgJmx0O2RhdGEmZ3Q7CisgICAgICAmbHQ7aXRlbSZndDsmbHQ7IVtDREFUQVtCcm9va3MgJmFtcDsgU2hpZWxkc11dJmd0OyZsdDsvaXRlbSZndDsKKyAgICAmbHQ7L2RhdGEmZ3Q7CisgICAgPC9leGFtcGxlPgorICAgIDwvZG9jdW1lbnQ+CisKKyAgICBGYWxsYmFjayBleGFtcGxlIChYSW5jbHVkZSBDLjUpCisgICAgTm90ZSEgRmFsbGJhY2sgc3VwcG9ydCBpcyBub3QgeWV0IGltcGxlbWVudGVkCisKKyAgICA+Pj4gZG9jdW1lbnQgPSB4aW5jbHVkZV9sb2FkZXIoIkM1LnhtbCIpCisgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIHhpbmNsdWRlX2xvYWRlcikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgSU9FcnJvcjogcmVzb3VyY2Ugbm90IGZvdW5kCisgICAgPj4+ICMgcHJpbnQgc2VyaWFsaXplKGRvY3VtZW50KSAjIEM1CisgICAgIiIiCisKK2RlZiB4aW5jbHVkZV9kZWZhdWx0KCk6CisgICAgIiIiCisgICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50SW5jbHVkZQorCisgICAgPj4+IGRvY3VtZW50ID0geGluY2x1ZGVfbG9hZGVyKCJkZWZhdWx0LnhtbCIpCisgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQpCisgICAgPj4+IHByaW50IHNlcmlhbGl6ZShkb2N1bWVudCkgIyBkZWZhdWx0CisgICAgPGRvY3VtZW50PgorICAgICAgPHA+RXhhbXBsZS48L3A+CisgICAgICA8cm9vdD4KKyAgICAgICA8ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9lbGVtZW50PgorICAgICAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAorICAgICAgIDxlbXB0eS1lbGVtZW50IC8+CisgICAgPC9yb290PgorICAgIDwvZG9jdW1lbnQ+CisgICAgIiIiCisKKyMKKyMgYmFkbHkgZm9ybWF0dGVkIHhpOmluY2x1ZGUgdGFncworCitYSU5DTFVERV9CQUQgPSB7fQorCitYSU5DTFVERV9CQURbIkIxLnhtbCJdID0gIiIiXAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8ZG9jdW1lbnQgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgorICA8cD4xMjAgTXogaXMgYWRlcXVhdGUgZm9yIGFuIGF2ZXJhZ2UgaG9tZSB1c2VyLjwvcD4KKyAgPHhpOmluY2x1ZGUgaHJlZj0iZGlzY2xhaW1lci54bWwiIHBhcnNlPSJCQURfVFlQRSIvPgorPC9kb2N1bWVudD4KKyIiIgorCitYSU5DTFVERV9CQURbIkIyLnhtbCJdID0gIiIiXAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8ZGl2IHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KKyAgICA8eGk6ZmFsbGJhY2s+PC94aTpmYWxsYmFjaz4KKzwvZGl2PgorIiIiCisKK2RlZiB4aW5jbHVkZV9mYWlsdXJlcygpOgorICAgIHIiIiIKKyAgICBUZXN0IGZhaWx1cmUgdG8gbG9jYXRlIGluY2x1ZGVkIFhNTCBmaWxlLgorCisgICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50SW5jbHVkZQorCisgICAgPj4+IGRlZiBub25lX2xvYWRlcihocmVmLCBwYXJzZXIsIGVuY29kaW5nPU5vbmUpOgorICAgIC4uLiAgICAgcmV0dXJuIE5vbmUKKworICAgID4+PiBkb2N1bWVudCA9IEVULlhNTChYSU5DTFVERVsiQzEueG1sIl0pCisgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIGxvYWRlcj1ub25lX2xvYWRlcikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgRmF0YWxJbmNsdWRlRXJyb3I6IGNhbm5vdCBsb2FkICdkaXNjbGFpbWVyLnhtbCcgYXMgJ3htbCcKKworICAgIFRlc3QgZmFpbHVyZSB0byBsb2NhdGUgaW5jbHVkZWQgdGV4dCBmaWxlLgorCisgICAgPj4+IGRvY3VtZW50ID0gRVQuWE1MKFhJTkNMVURFWyJDMi54bWwiXSkKKyAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgbG9hZGVyPW5vbmVfbG9hZGVyKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBGYXRhbEluY2x1ZGVFcnJvcjogY2Fubm90IGxvYWQgJ2NvdW50LnR4dCcgYXMgJ3RleHQnCisKKyAgICBUZXN0IGJhZCBwYXJzZSB0eXBlLgorCisgICAgPj4+IGRvY3VtZW50ID0gRVQuWE1MKFhJTkNMVURFX0JBRFsiQjEueG1sIl0pCisgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIGxvYWRlcj1ub25lX2xvYWRlcikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgRmF0YWxJbmNsdWRlRXJyb3I6IHVua25vd24gcGFyc2UgdHlwZSBpbiB4aTppbmNsdWRlIHRhZyAoJ0JBRF9UWVBFJykKKworICAgIFRlc3QgeGk6ZmFsbGJhY2sgb3V0c2lkZSB4aTppbmNsdWRlLgorCisgICAgPj4+IGRvY3VtZW50ID0gRVQuWE1MKFhJTkNMVURFX0JBRFsiQjIueG1sIl0pCisgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIGxvYWRlcj1ub25lX2xvYWRlcikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgRmF0YWxJbmNsdWRlRXJyb3I6IHhpOmZhbGxiYWNrIHRhZyBtdXN0IGJlIGNoaWxkIG9mIHhpOmluY2x1ZGUgKCd7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZX1mYWxsYmFjaycpCisgICAgIiIiCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcmVwb3J0ZWQgYnVncworCitkZWYgYnVnX3htbHRvb2xraXQyMSgpOgorICAgICIiIgorCisgICAgbWFyc2hhbGxlciBnaXZlcyBvYnNjdXJlIGVycm9ycyBmb3Igbm9uLXN0cmluZyB2YWx1ZXMKKworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgxMjMpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIHRhZworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBUeXBlRXJyb3I6IGNhbm5vdCBzZXJpYWxpemUgMTIzICh0eXBlIGludCkKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoImVsZW0iKQorICAgID4+PiBlbGVtLnRleHQgPSAxMjMKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgdGV4dAorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBUeXBlRXJyb3I6IGNhbm5vdCBzZXJpYWxpemUgMTIzICh0eXBlIGludCkKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoImVsZW0iKQorICAgID4+PiBlbGVtLnRhaWwgPSAxMjMKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgdGFpbAorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBUeXBlRXJyb3I6IGNhbm5vdCBzZXJpYWxpemUgMTIzICh0eXBlIGludCkKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoImVsZW0iKQorICAgID4+PiBlbGVtLnNldCgxMjMsICIxMjMiKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyBhdHRyaWJ1dGUga2V5CisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgiZWxlbSIpCisgICAgPj4+IGVsZW0uc2V0KCIxMjMiLCAxMjMpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIGF0dHJpYnV0ZSB2YWx1ZQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBUeXBlRXJyb3I6IGNhbm5vdCBzZXJpYWxpemUgMTIzICh0eXBlIGludCkKKworICAgICIiIgorCitkZWYgYnVnX3htbHRvb2xraXQyNSgpOgorICAgICIiIgorCisgICAgdHlwbyBpbiBFbGVtZW50VHJlZS5maW5kdGV4dAorCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTCkKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW0pCisgICAgPj4+IHRyZWUuZmluZHRleHQoInRhZyIpCisgICAgJ3RleHQnCisgICAgPj4+IHRyZWUuZmluZHRleHQoInNlY3Rpb24vdGFnIikKKyAgICAnc3VidGV4dCcKKworICAgICIiIgorCitkZWYgYnVnX3htbHRvb2xraXQyOCgpOgorICAgICIiIgorCisgICAgLi8vdGFnIGNhdXNlcyBleGNlcHRpb25zCisKKyAgICA+Pj4gdHJlZSA9IEVULlhNTCgiPGRvYz48dGFibGU+PHRib2R5Lz48L3RhYmxlPjwvZG9jPiIpCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KHRyZWUuZmluZGFsbCgiLi8vdGhlYWQiKSkKKyAgICBbXQorICAgID4+PiBzdW1tYXJpemVfbGlzdCh0cmVlLmZpbmRhbGwoIi4vL3Rib2R5IikpCisgICAgWyd0Ym9keSddCisKKyAgICAiIiIKKworZGVmIGJ1Z194bWx0b29sa2l0WDEoKToKKyAgICAiIiIKKworICAgIGR1bXAoKSBkb2Vzbid0IGZsdXNoIHRoZSBvdXRwdXQgYnVmZmVyCisKKyAgICA+Pj4gdHJlZSA9IEVULlhNTCgiPGRvYz48dGFibGU+PHRib2R5Lz48L3RhYmxlPjwvZG9jPiIpCisgICAgPj4+IEVULmR1bXAodHJlZSk7IHN5cy5zdGRvdXQud3JpdGUoInRhaWwiKQorICAgIDxkb2M+PHRhYmxlPjx0Ym9keSAvPjwvdGFibGU+PC9kb2M+CisgICAgdGFpbAorCisgICAgIiIiCisKK2RlZiBidWdfeG1sdG9vbGtpdDM5KCk6CisgICAgIiIiCisKKyAgICBub24tYXNjaWkgZWxlbWVudCBhbmQgYXR0cmlidXRlIG5hbWVzIGRvZXNuJ3Qgd29yaworCisgICAgPj4+IHRyZWUgPSBFVC5YTUwoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz48dFx4ZTRnIC8+IikKKyAgICA+Pj4gRVQudG9zdHJpbmcodHJlZSwgInV0Zi04IikKKyAgICAnPHRcXHhjM1xceGE0ZyAvPicKKworICAgID4+PiB0cmVlID0gRVQuWE1MKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+PHRhZyBceGU0dHRyPSd2JiMyMjg7bHVlJyAvPiIpCisgICAgPj4+IHRyZWUuYXR0cmliCisgICAge3UnXFx4ZTR0dHInOiB1J3ZcXHhlNGx1ZSd9CisgICAgPj4+IEVULnRvc3RyaW5nKHRyZWUsICJ1dGYtOCIpCisgICAgJzx0YWcgXFx4YzNcXHhhNHR0cj0idlxceGMzXFx4YTRsdWUiIC8+JworCisgICAgPj4+IHRyZWUgPSBFVC5YTUwoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz48dFx4ZTRnPnRleHQ8L3RceGU0Zz4iKQorICAgID4+PiBFVC50b3N0cmluZyh0cmVlLCAidXRmLTgiKQorICAgICc8dFxceGMzXFx4YTRnPnRleHQ8L3RcXHhjM1xceGE0Zz4nCisKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnQodSJ0XHUwMGU0ZyIpCisgICAgPj4+IEVULnRvc3RyaW5nKHRyZWUsICJ1dGYtOCIpCisgICAgJzx0XFx4YzNcXHhhNGcgLz4nCisKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnQoInRhZyIpCisgICAgPj4+IHRyZWUuc2V0KHUiXHUwMGU0dHRyIiwgdSJ2XHUwMGU0bHVlIikKKyAgICA+Pj4gRVQudG9zdHJpbmcodHJlZSwgInV0Zi04IikKKyAgICAnPHRhZyBcXHhjM1xceGE0dHRyPSJ2XFx4YzNcXHhhNGx1ZSIgLz4nCisKKyAgICAiIiIKKworZGVmIGJ1Z194bWx0b29sa2l0NTQoKToKKyAgICAiIiIKKworICAgIHByb2JsZW1zIGhhbmRsaW5nIGludGVybmFsbHkgZGVmaW5lZCBlbnRpdGllcworCisgICAgPj4+IGUgPSBFVC5YTUwoIjwhRE9DVFlQRSBkb2MgWzwhRU5USVRZIGxkb3RzICcmI3g4MjMwOyc+XT48ZG9jPiZsZG90czs8L2RvYz4iKQorICAgID4+PiBzZXJpYWxpemUoZSkKKyAgICAnPGRvYz4mIzMzMzI4OzwvZG9jPicKKworICAgICIiIgorCitkZWYgYnVnX3htbHRvb2xraXQ1NSgpOgorICAgICIiIgorCisgICAgbWFrZSBzdXJlIHdlJ3JlIHJlcG9ydGluZyB0aGUgZmlyc3QgZXJyb3IsIG5vdCB0aGUgbGFzdAorCisgICAgPj4+IGUgPSBFVC5YTUwoIjwhRE9DVFlQRSBkb2MgU1lTVEVNICdkb2MuZHRkJz48ZG9jPiZsZG90czsmbmRvdHM7JnJkb3RzOzwvZG9jPiIpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFBhcnNlRXJyb3I6IHVuZGVmaW5lZCBlbnRpdHkgJmxkb3RzOzogbGluZSAxLCBjb2x1bW4gMzYKKworICAgICIiIgorCitjbGFzcyBFeGNlcHRpb25GaWxlOgorICAgIGRlZiByZWFkKHNlbGYsIHgpOgorICAgICAgICByYWlzZSBJT0Vycm9yCisKK2RlZiB4bWx0b29sa2l0NjAoKToKKyAgICAiIiIKKworICAgIEhhbmRsZSBjcmFzaCBpbiBzdHJlYW0gc291cmNlLgorICAgID4+PiB0cmVlID0gRVQucGFyc2UoRXhjZXB0aW9uRmlsZSgpKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBJT0Vycm9yCisKKyAgICAiIiIKKworWE1MVE9PTEtJVDYyX0RPQyA9ICIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgcGF0ZW50LWFwcGxpY2F0aW9uLXB1YmxpY2F0aW9uIFNZU1RFTSAicGFwLXYxNS0yMDAxLTAxLTMxLmR0ZCIgW10+Cis8cGF0ZW50LWFwcGxpY2F0aW9uLXB1YmxpY2F0aW9uPgorPHN1YmRvYy1hYnN0cmFjdD4KKzxwYXJhZ3JhcGggaWQ9IkEtMDAwMSIgbHZsPSIwIj5BIG5ldyBjdWx0aXZhciBvZiBCZWdvbmlhIHBsYW50IG5hbWVkICZsc3F1bztCQ1Q5ODAxQkVHJnJzcXVvOy48L3BhcmFncmFwaD4KKzwvc3ViZG9jLWFic3RyYWN0PgorPC9wYXRlbnQtYXBwbGljYXRpb24tcHVibGljYXRpb24+IiIiCisKKworZGVmIHhtbHRvb2xraXQ2MigpOgorICAgICIiIgorCisgICAgRG9uJ3QgY3Jhc2ggd2hlbiB1c2luZyBjdXN0b20gZW50aXRpZXMuCisKKyAgICA+Pj4geG1sdG9vbGtpdDYyKCkKKyAgICB1J0EgbmV3IGN1bHRpdmFyIG9mIEJlZ29uaWEgcGxhbnQgbmFtZWQgXHUyMDE4QkNUOTgwMUJFR1x1MjAxOS4nCisKKyAgICAiIiIKKyAgICBFTlRJVElFUyA9IHt1J3JzcXVvJzogdSdcdTIwMTknLCB1J2xzcXVvJzogdSdcdTIwMTgnfQorICAgIHBhcnNlciA9IEVULlhNTFRyZWVCdWlsZGVyKCkKKyAgICBwYXJzZXIuZW50aXR5LnVwZGF0ZShFTlRJVElFUykKKyAgICBwYXJzZXIuZmVlZChYTUxUT09MS0lUNjJfRE9DKQorICAgIHQgPSBwYXJzZXIuY2xvc2UoKQorICAgIHJldHVybiB0LmZpbmQoJy4vL3BhcmFncmFwaCcpLnRleHQKKworZGVmIHhtbHRvb2xraXQ2MygpOgorICAgICIiIgorCisgICAgQ2hlY2sgcmVmZXJlbmNlIGxlYWsuCisgICAgPj4+IHhtbHRvb2xraXQ2MygpCisgICAgPj4+IGNvdW50ID0gc3lzLmdldHJlZmNvdW50KE5vbmUpCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDEwMDApOgorICAgIC4uLiAgICAgeG1sdG9vbGtpdDYzKCkKKyAgICA+Pj4gc3lzLmdldHJlZmNvdW50KE5vbmUpIC0gY291bnQKKyAgICAwCisKKyAgICAiIiIKKyAgICB0cmVlID0gRVQuVHJlZUJ1aWxkZXIoKQorICAgIHRyZWUuc3RhcnQoInRhZyIsIHt9KQorICAgIHRyZWUuZGF0YSgidGV4dCIpCisgICAgdHJlZS5lbmQoInRhZyIpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitkZWYgYnVnXzIwMDcwOF9uZXdsaW5lKCk6CisgICAgciIiIgorCisgICAgUHJlc2VydmUgbmV3bGluZXMgaW4gYXR0cmlidXRlcy4KKworICAgID4+PiBlID0gRVQuRWxlbWVudCgnU29tZVRhZycsIHRleHQ9ImRlZiBfZigpOlxuICByZXR1cm4gM1xuIikKKyAgICA+Pj4gRVQudG9zdHJpbmcoZSkKKyAgICAnPFNvbWVUYWcgdGV4dD0iZGVmIF9mKCk6JiMxMDsgIHJldHVybiAzJiMxMDsiIC8+JworICAgID4+PiBFVC5YTUwoRVQudG9zdHJpbmcoZSkpLmdldCgidGV4dCIpCisgICAgJ2RlZiBfZigpOlxuICByZXR1cm4gM1xuJworICAgID4+PiBFVC50b3N0cmluZyhFVC5YTUwoRVQudG9zdHJpbmcoZSkpKQorICAgICc8U29tZVRhZyB0ZXh0PSJkZWYgX2YoKTomIzEwOyAgcmV0dXJuIDMmIzEwOyIgLz4nCisKKyAgICAiIiIKKworZGVmIGJ1Z18yMDA3MDhfY2xvc2UoKToKKyAgICAiIiIKKworICAgIFRlc3QgZGVmYXVsdCBidWlsZGVyLgorICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIoKSAjIGRlZmF1bHQKKyAgICA+Pj4gcGFyc2VyLmZlZWQoIjxlbGVtZW50PnNvbWUgdGV4dDwvZWxlbWVudD4iKQorICAgID4+PiBzdW1tYXJpemUocGFyc2VyLmNsb3NlKCkpCisgICAgJ2VsZW1lbnQnCisKKyAgICBUZXN0IGN1c3RvbSBidWlsZGVyLgorICAgID4+PiBjbGFzcyBFY2hvVGFyZ2V0OgorICAgIC4uLiAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgIC4uLiAgICAgICAgIHJldHVybiBFVC5FbGVtZW50KCJlbGVtZW50IikgIyBzaW11bGF0ZSByb290CisgICAgPj4+IHBhcnNlciA9IEVULlhNTFBhcnNlcihFY2hvVGFyZ2V0KCkpCisgICAgPj4+IHBhcnNlci5mZWVkKCI8ZWxlbWVudD5zb21lIHRleHQ8L2VsZW1lbnQ+IikKKyAgICA+Pj4gc3VtbWFyaXplKHBhcnNlci5jbG9zZSgpKQorICAgICdlbGVtZW50JworCisgICAgIiIiCisKK2RlZiBidWdfMjAwNzA5X2RlZmF1bHRfbmFtZXNwYWNlKCk6CisgICAgIiIiCisKKyAgICA+Pj4gZSA9IEVULkVsZW1lbnQoIntkZWZhdWx0fWVsZW0iKQorICAgID4+PiBzID0gRVQuU3ViRWxlbWVudChlLCAie2RlZmF1bHR9ZWxlbSIpCisgICAgPj4+IHNlcmlhbGl6ZShlLCBkZWZhdWx0X25hbWVzcGFjZT0iZGVmYXVsdCIpICMgMQorICAgICc8ZWxlbSB4bWxucz0iZGVmYXVsdCI+PGVsZW0gLz48L2VsZW0+JworCisgICAgPj4+IGUgPSBFVC5FbGVtZW50KCJ7ZGVmYXVsdH1lbGVtIikKKyAgICA+Pj4gcyA9IEVULlN1YkVsZW1lbnQoZSwgIntkZWZhdWx0fWVsZW0iKQorICAgID4+PiBzID0gRVQuU3ViRWxlbWVudChlLCAie25vdC1kZWZhdWx0fWVsZW0iKQorICAgID4+PiBzZXJpYWxpemUoZSwgZGVmYXVsdF9uYW1lc3BhY2U9ImRlZmF1bHQiKSAjIDIKKyAgICAnPGVsZW0geG1sbnM9ImRlZmF1bHQiIHhtbG5zOm5zMT0ibm90LWRlZmF1bHQiPjxlbGVtIC8+PG5zMTplbGVtIC8+PC9lbGVtPicKKworICAgID4+PiBlID0gRVQuRWxlbWVudCgie2RlZmF1bHR9ZWxlbSIpCisgICAgPj4+IHMgPSBFVC5TdWJFbGVtZW50KGUsICJ7ZGVmYXVsdH1lbGVtIikKKyAgICA+Pj4gcyA9IEVULlN1YkVsZW1lbnQoZSwgImVsZW0iKSAjIHVucHJlZml4ZWQgbmFtZQorICAgID4+PiBzZXJpYWxpemUoZSwgZGVmYXVsdF9uYW1lc3BhY2U9ImRlZmF1bHQiKSAjIDMKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgVmFsdWVFcnJvcjogY2Fubm90IHVzZSBub24tcXVhbGlmaWVkIG5hbWVzIHdpdGggZGVmYXVsdF9uYW1lc3BhY2Ugb3B0aW9uCisKKyAgICAiIiIKKworZGVmIGJ1Z18yMDA3MDlfcmVnaXN0ZXJfbmFtZXNwYWNlKCk6CisgICAgIiIiCisKKyAgICA+Pj4gRVQudG9zdHJpbmcoRVQuRWxlbWVudCgie2h0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC99dGl0bGUiKSkKKyAgICAnPG5zMDp0aXRsZSB4bWxuczpuczA9Imh0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC8iIC8+JworICAgID4+PiBFVC5yZWdpc3Rlcl9uYW1lc3BhY2UoImZvbyIsICJodHRwOi8vbmFtZXNwYWNlLmludmFsaWQvZG9lcy9ub3QvZXhpc3QvIikKKyAgICA+Pj4gRVQudG9zdHJpbmcoRVQuRWxlbWVudCgie2h0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC99dGl0bGUiKSkKKyAgICAnPGZvbzp0aXRsZSB4bWxuczpmb289Imh0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC8iIC8+JworCisgICAgQW5kIHRoZSBEdWJsaW4gQ29yZSBuYW1lc3BhY2UgaXMgaW4gdGhlIGRlZmF1bHQgbGlzdDoKKworICAgID4+PiBFVC50b3N0cmluZyhFVC5FbGVtZW50KCJ7aHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS99dGl0bGUiKSkKKyAgICAnPGRjOnRpdGxlIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgLz4nCisKKyAgICAiIiIKKworZGVmIGJ1Z18yMDA3MDlfZWxlbWVudF9jb21tZW50KCk6CisgICAgIiIiCisKKyAgICBOb3Qgc3VyZSBpZiB0aGlzIGNhbiBiZSBmaXhlZCwgcmVhbGx5IChzaW5jZSB0aGUgc2VyaWFsaXplciBuZWVkcworICAgIEVULkNvbW1lbnQsIG5vdCBjRVQuY29tbWVudCkuCisKKyAgICA+Pj4gYSA9IEVULkVsZW1lbnQoJ2EnKQorICAgID4+PiBhLmFwcGVuZChFVC5Db21tZW50KCdmb28nKSkKKyAgICA+Pj4gYVswXS50YWcgPT0gRVQuQ29tbWVudAorICAgIFRydWUKKworICAgID4+PiBhID0gRVQuRWxlbWVudCgnYScpCisgICAgPj4+IGEuYXBwZW5kKEVULlBJKCdmb28nKSkKKyAgICA+Pj4gYVswXS50YWcgPT0gRVQuUEkKKyAgICBUcnVlCisKKyAgICAiIiIKKworZGVmIGJ1Z18yMDA3MDlfZWxlbWVudF9pbnNlcnQoKToKKyAgICAiIiIKKworICAgID4+PiBhID0gRVQuRWxlbWVudCgnYScpCisgICAgPj4+IGIgPSBFVC5TdWJFbGVtZW50KGEsICdiJykKKyAgICA+Pj4gYyA9IEVULlN1YkVsZW1lbnQoYSwgJ2MnKQorICAgID4+PiBkID0gRVQuRWxlbWVudCgnZCcpCisgICAgPj4+IGEuaW5zZXJ0KDAsIGQpCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGEpCisgICAgWydkJywgJ2InLCAnYyddCisgICAgPj4+IGEuaW5zZXJ0KC0xLCBkKQorICAgID4+PiBzdW1tYXJpemVfbGlzdChhKQorICAgIFsnZCcsICdiJywgJ2QnLCAnYyddCisKKyAgICAiIiIKKworZGVmIGJ1Z18yMDA3MDlfaXRlcl9jb21tZW50KCk6CisgICAgIiIiCisKKyAgICA+Pj4gYSA9IEVULkVsZW1lbnQoJ2EnKQorICAgID4+PiBiID0gRVQuU3ViRWxlbWVudChhLCAnYicpCisgICAgPj4+IGNvbW1lbnRfYiA9IEVULkNvbW1lbnQoIlRFU1QtYiIpCisgICAgPj4+IGIuYXBwZW5kKGNvbW1lbnRfYikKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoYS5pdGVyKEVULkNvbW1lbnQpKQorICAgIFsnPENvbW1lbnQ+J10KKworICAgICIiIgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHJlcG9ydGVkIG9uIGJ1Z3MucHl0aG9uLm9yZworCitkZWYgYnVnXzE1MzQ2MzAoKToKKyAgICAiIiIKKworICAgID4+PiBib2IgPSBFVC5UcmVlQnVpbGRlcigpCisgICAgPj4+IGUgPSBib2IuZGF0YSgiZGF0YSIpCisgICAgPj4+IGUgPSBib2Iuc3RhcnQoInRhZyIsIHt9KQorICAgID4+PiBlID0gYm9iLmVuZCgidGFnIikKKyAgICA+Pj4gZSA9IGJvYi5jbG9zZSgpCisgICAgPj4+IHNlcmlhbGl6ZShlKQorICAgICc8dGFnIC8+JworCisgICAgIiIiCisKK2RlZiBjaGVja19pc3N1ZTYyMzMoKToKKyAgICAiIiIKKworICAgID4+PiBlID0gRVQuWE1MKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSd1dGYtOCc/Pjxib2R5PnRcXHhjM1xceGEzZzwvYm9keT4iKQorICAgID4+PiBFVC50b3N0cmluZyhlLCAnYXNjaWknKQorICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdhc2NpaSc/Plxcbjxib2R5PnQmIzIyNztnPC9ib2R5PiIKKyAgICA+Pj4gZSA9IEVULlhNTCgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pjxib2R5PnRcXHhlM2c8L2JvZHk+IikKKyAgICA+Pj4gRVQudG9zdHJpbmcoZSwgJ2FzY2lpJykKKyAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nYXNjaWknPz5cXG48Ym9keT50JiMyMjc7ZzwvYm9keT4iCisKKyAgICAiIiIKKworZGVmIGNoZWNrX2lzc3VlMzE1MSgpOgorICAgICIiIgorCisgICAgPj4+IGUgPSBFVC5YTUwoJzxwcmVmaXg6bG9jYWxuYW1lIHhtbG5zOnByZWZpeD0iJHtzdHVmZn0iLz4nKQorICAgID4+PiBlLnRhZworICAgICd7JHtzdHVmZn19bG9jYWxuYW1lJworICAgID4+PiB0ID0gRVQuRWxlbWVudFRyZWUoZSkKKyAgICA+Pj4gRVQudG9zdHJpbmcoZSkKKyAgICAnPG5zMDpsb2NhbG5hbWUgeG1sbnM6bnMwPSIke3N0dWZmfSIgLz4nCisKKyAgICAiIiIKKworZGVmIGNoZWNrX2lzc3VlNjU2NSgpOgorICAgICIiIgorCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoIjxib2R5Pjx0YWcvPjwvYm9keT4iKQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtKQorICAgIFsndGFnJ10KKyAgICA+Pj4gbmV3ZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQorICAgID4+PiBlbGVtWzpdID0gbmV3ZWxlbVs6XQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtKQorICAgIFsndGFnJywgJ3RhZycsICdzZWN0aW9uJ10KKworICAgICIiIgorCitkZWYgY2hlY2tfaHRtbF9lbXB0eV9lbGVtc19zZXJpYWxpemF0aW9uKHNlbGYpOgorICAgICMgaXNzdWUgMTU5NzAKKyAgICAjIGZyb20gaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9pbmRleC9lbGVtZW50cy5odG1sCisgICAgIiIiCisKKyAgICA+Pj4gZW1wdHlfZWxlbXMgPSBbJ0FSRUEnLCAnQkFTRScsICdCQVNFRk9OVCcsICdCUicsICdDT0wnLCAnRlJBTUUnLCAnSFInLAorICAgIC4uLiAgICAgICAgICAgICAgICAnSU1HJywgJ0lOUFVUJywgJ0lTSU5ERVgnLCAnTElOSycsICdNRVRBJywgJ1BBUkFNJ10KKyAgICA+Pj4gZWxlbXMgPSAnJy5qb2luKCc8JXMgLz4nICUgZWxlbSBmb3IgZWxlbSBpbiBlbXB0eV9lbGVtcykKKyAgICA+Pj4gc2VyaWFsaXplKEVULlhNTCgnPGh0bWw+JXM8L2h0bWw+JyAlIGVsZW1zKSwgbWV0aG9kPSdodG1sJykKKyAgICAnPGh0bWw+PEFSRUE+PEJBU0U+PEJBU0VGT05UPjxCUj48Q09MPjxGUkFNRT48SFI+PElNRz48SU5QVVQ+PElTSU5ERVg+PExJTks+PE1FVEE+PFBBUkFNPjwvaHRtbD4nCisgICAgPj4+IHNlcmlhbGl6ZShFVC5YTUwoJzxodG1sPiVzPC9odG1sPicgJSBlbGVtcy5sb3dlcigpKSwgbWV0aG9kPSdodG1sJykKKyAgICAnPGh0bWw+PGFyZWE+PGJhc2U+PGJhc2Vmb250Pjxicj48Y29sPjxmcmFtZT48aHI+PGltZz48aW5wdXQ+PGlzaW5kZXg+PGxpbms+PG1ldGE+PHBhcmFtPjwvaHRtbD4nCisgICAgPj4+IGVsZW1zID0gJycuam9pbignPCVzPjwvJXM+JyAlIChlbGVtLCBlbGVtKSBmb3IgZWxlbSBpbiBlbXB0eV9lbGVtcykKKyAgICA+Pj4gc2VyaWFsaXplKEVULlhNTCgnPGh0bWw+JXM8L2h0bWw+JyAlIGVsZW1zKSwgbWV0aG9kPSdodG1sJykKKyAgICAnPGh0bWw+PEFSRUE+PEJBU0U+PEJBU0VGT05UPjxCUj48Q09MPjxGUkFNRT48SFI+PElNRz48SU5QVVQ+PElTSU5ERVg+PExJTks+PE1FVEE+PFBBUkFNPjwvaHRtbD4nCisgICAgPj4+IHNlcmlhbGl6ZShFVC5YTUwoJzxodG1sPiVzPC9odG1sPicgJSBlbGVtcy5sb3dlcigpKSwgbWV0aG9kPSdodG1sJykKKyAgICAnPGh0bWw+PGFyZWE+PGJhc2U+PGJhc2Vmb250Pjxicj48Y29sPjxmcmFtZT48aHI+PGltZz48aW5wdXQ+PGlzaW5kZXg+PGxpbms+PG1ldGE+PHBhcmFtPjwvaHRtbD4nCisKKyAgICAiIiIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK2NsYXNzIENsZWFuQ29udGV4dChvYmplY3QpOgorICAgICIiIlByb3ZpZGUgZGVmYXVsdCBuYW1lc3BhY2UgbWFwcGluZyBhbmQgcGF0aCBjYWNoZS4iIiIKKyAgICBjaGVja3dhcm5pbmdzID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHF1aWV0PUZhbHNlKToKKyAgICAgICAgaWYgc3lzLmZsYWdzLm9wdGltaXplID49IDI6CisgICAgICAgICAgICAjIHVuZGVyIC1PTywgZG9jdGVzdHMgY2Fubm90IGJlIHJ1biBhbmQgdGhlcmVmb3JlIG5vdCBhbGwgd2FybmluZ3MKKyAgICAgICAgICAgICMgd2lsbCBiZSBlbWl0dGVkCisgICAgICAgICAgICBxdWlldCA9IFRydWUKKyAgICAgICAgZGVwcmVjYXRpb25zID0gKAorICAgICAgICAgICAgIyBTZWFyY2ggYmVoYXZpb3VyIGlzIGJyb2tlbiBpZiBzZWFyY2ggcGF0aCBzdGFydHMgd2l0aCAiLyIuCisgICAgICAgICAgICAoIlRoaXMgc2VhcmNoIGlzIGJyb2tlbiBpbiAxLjMgYW5kIGVhcmxpZXIsIGFuZCB3aWxsIGJlIGZpeGVkICIKKyAgICAgICAgICAgICAiaW4gYSBmdXR1cmUgdmVyc2lvbi4gIElmIHlvdSByZWx5IG9uIHRoZSBjdXJyZW50IGJlaGF2aW91ciwgIgorICAgICAgICAgICAgICJjaGFuZ2UgaXQgdG8gJy4rJyIsIEZ1dHVyZVdhcm5pbmcpLAorICAgICAgICAgICAgIyBFbGVtZW50LmdldGNoaWxkcmVuKCkgYW5kIEVsZW1lbnQuZ2V0aXRlcmF0b3IoKSBhcmUgZGVwcmVjYXRlZC4KKyAgICAgICAgICAgICgiVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gICIKKyAgICAgICAgICAgICAiVXNlIC4rIGluc3RlYWQuIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwKKyAgICAgICAgICAgICgiVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gICIKKyAgICAgICAgICAgICAiVXNlIC4rIGluc3RlYWQuIiwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICAjIFhNTFBhcnNlci5kb2N0eXBlKCkgaXMgZGVwcmVjYXRlZC4KKyAgICAgICAgICAgICgiVGhpcyBtZXRob2Qgb2YgWE1MUGFyc2VyIGlzIGRlcHJlY2F0ZWQuICBEZWZpbmUgZG9jdHlwZS4uICIKKyAgICAgICAgICAgICAibWV0aG9kIG9uIHRoZSBUcmVlQnVpbGRlciB0YXJnZXQuIiwgRGVwcmVjYXRpb25XYXJuaW5nKSkKKyAgICAgICAgc2VsZi5jaGVja3dhcm5pbmdzID0gdGVzdF9zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCpkZXByZWNhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWlldD1xdWlldCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZQorICAgICAgICBzZWxmLl9uc21hcCA9IEVsZW1lbnRUcmVlLl9uYW1lc3BhY2VfbWFwCisgICAgICAgIHNlbGYuX3BhdGhfY2FjaGUgPSBFbGVtZW50VHJlZS5FbGVtZW50UGF0aC5fY2FjaGUKKyAgICAgICAgIyBDb3B5IHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBtYXBwaW5nCisgICAgICAgIEVsZW1lbnRUcmVlLl9uYW1lc3BhY2VfbWFwID0gc2VsZi5fbnNtYXAuY29weSgpCisgICAgICAgICMgQ29weSB0aGUgcGF0aCBjYWNoZSAoc2hvdWxkIGJlIGVtcHR5KQorICAgICAgICBFbGVtZW50VHJlZS5FbGVtZW50UGF0aC5fY2FjaGUgPSBzZWxmLl9wYXRoX2NhY2hlLmNvcHkoKQorICAgICAgICBzZWxmLmNoZWNrd2FybmluZ3MuX19lbnRlcl9fKCkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZQorICAgICAgICAjIFJlc3RvcmUgbWFwcGluZyBhbmQgcGF0aCBjYWNoZQorICAgICAgICBFbGVtZW50VHJlZS5fbmFtZXNwYWNlX21hcCA9IHNlbGYuX25zbWFwCisgICAgICAgIEVsZW1lbnRUcmVlLkVsZW1lbnRQYXRoLl9jYWNoZSA9IHNlbGYuX3BhdGhfY2FjaGUKKyAgICAgICAgc2VsZi5jaGVja3dhcm5pbmdzLl9fZXhpdF9fKCphcmdzKQorCisKK2RlZiB0ZXN0X21haW4obW9kdWxlX25hbWU9J3htbC5ldHJlZS5FbGVtZW50VHJlZScpOgorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF94bWxfZXRyZWUKKworICAgIHVzZV9weV9tb2R1bGUgPSAobW9kdWxlX25hbWUgPT0gJ3htbC5ldHJlZS5FbGVtZW50VHJlZScpCisKKyAgICAjIFRoZSBzYW1lIGRvY3Rlc3RzIGFyZSB1c2VkIGZvciBib3RoIHRoZSBQeXRob24gYW5kIHRoZSBDIGltcGxlbWVudGF0aW9ucworICAgIGFzc2VydCB0ZXN0X3htbF9ldHJlZS5FVC5fX25hbWVfXyA9PSBtb2R1bGVfbmFtZQorCisgICAgIyBYWFggdGhlIEMgbW9kdWxlIHNob3VsZCBnaXZlIHRoZSBzYW1lIHdhcm5pbmdzIGFzIHRoZSBQeXRob24gbW9kdWxlCisgICAgd2l0aCBDbGVhbkNvbnRleHQocXVpZXQ9bm90IHVzZV9weV9tb2R1bGUpOgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF94bWxfZXRyZWUsIHZlcmJvc2l0eT1UcnVlKQorCisgICAgIyBUaGUgbW9kdWxlIHNob3VsZCBub3QgYmUgY2hhbmdlZCBieSB0aGUgdGVzdHMKKyAgICBhc3NlcnQgdGVzdF94bWxfZXRyZWUuRVQuX19uYW1lX18gPT0gbW9kdWxlX25hbWUKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzRhNGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkKQEAgLTAsMCArMSw1NSBAQAorIyB4bWwuZXRyZWUgdGVzdCBmb3IgY0VsZW1lbnRUcmVlCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCBwcmVjaXNpb25iaWdtZW10ZXN0LCBfMkcKK2ltcG9ydCB1bml0dGVzdAorCitjRVQgPSB0ZXN0X3N1cHBvcnQuaW1wb3J0X21vZHVsZSgneG1sLmV0cmVlLmNFbGVtZW50VHJlZScpCisKKworIyBjRWxlbWVudFRyZWUgc3BlY2lmaWMgdGVzdHMKKworZGVmIHNhbml0eSgpOgorICAgICIiIgorICAgIEltcG9ydCBzYW5pdHkuCisKKyAgICA+Pj4gZnJvbSB4bWwuZXRyZWUgaW1wb3J0IGNFbGVtZW50VHJlZQorICAgICIiIgorCisKK2NsYXNzIE1pc2NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBJc3N1ZSAjODY1MS4KKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV8yRyArIDEwMCwgbWVtdXNlPTEpCisgICAgZGVmIHRlc3RfbGVuZ3RoX292ZXJmbG93KHNlbGYsIHNpemUpOgorICAgICAgICBpZiBzaXplIDwgXzJHICsgMTAwOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgibm90IGVub3VnaCBmcmVlIG1lbW9yeSwgbmVlZCBhdCBsZWFzdCAyIEdCIikKKyAgICAgICAgZGF0YSA9IGIneCcgKiBzaXplCisgICAgICAgIHBhcnNlciA9IGNFVC5YTUxQYXJzZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBwYXJzZXIuZmVlZCwgZGF0YSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRhdGEgPSBOb25lCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF94bWxfZXRyZWUsIHRlc3RfeG1sX2V0cmVlX2MKKworICAgICMgUnVuIHRoZSB0ZXN0cyBzcGVjaWZpYyB0byB0aGUgQyBpbXBsZW1lbnRhdGlvbgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3htbF9ldHJlZV9jLCB2ZXJib3NpdHk9VHJ1ZSkKKworICAgICMgQXNzaWduIHRoZSBDIGltcGxlbWVudGF0aW9uIGJlZm9yZSBydW5uaW5nIHRoZSBkb2N0ZXN0cworICAgICMgUGF0Y2ggdGhlIF9fbmFtZV9fLCB0byBwcmV2ZW50IGNvbmZ1c2lvbiB3aXRoIHRoZSBwdXJlIFB5dGhvbiB0ZXN0CisgICAgcHlFVCA9IHRlc3RfeG1sX2V0cmVlLkVUCisgICAgcHlfX25hbWVfXyA9IHRlc3RfeG1sX2V0cmVlLl9fbmFtZV9fCisgICAgdGVzdF94bWxfZXRyZWUuRVQgPSBjRVQKKyAgICBpZiBfX25hbWVfXyAhPSAnX19tYWluX18nOgorICAgICAgICB0ZXN0X3htbF9ldHJlZS5fX25hbWVfXyA9IF9fbmFtZV9fCisgICAgdHJ5OgorICAgICAgICAjIFJ1biB0aGUgc2FtZSB0ZXN0IHN1aXRlIGFzIHhtbC5ldHJlZS5FbGVtZW50VHJlZQorICAgICAgICB0ZXN0X3htbF9ldHJlZS50ZXN0X21haW4obW9kdWxlX25hbWU9J3htbC5ldHJlZS5jRWxlbWVudFRyZWUnKQorICAgIGZpbmFsbHk6CisgICAgICAgIHRlc3RfeG1sX2V0cmVlLkVUID0gcHlFVAorICAgICAgICB0ZXN0X3htbF9ldHJlZS5fX25hbWVfXyA9IHB5X19uYW1lX18KKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sbGliLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1sbGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2Njk3OGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94bWxsaWIucHkKQEAgLTAsMCArMSw0OCBAQAorJycnVGVzdCBtb2R1bGUgdG8gdGhlc3QgdGhlIHhtbGxpYiBtb2R1bGUuCisgICBTam9lcmQgTXVsbGVuZGVyCisnJycKKwordGVzdGRvYyA9ICIiIlwKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSd5ZXMnID8+Cis8IS0tIGNvbW1lbnRzIGFyZW4ndCBhbGxvd2VkIGJlZm9yZSB0aGUgPD94bWw/PiB0YWcsCisgICAgIGJ1dCB0aGV5IGFyZSBhbGxvd2VkIGJlZm9yZSB0aGUgPCFET0NUWVBFPiB0YWcgLS0+Cis8P3Byb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIGFyZSBhbGxvd2VkIGluIHRoZSBzYW1lIHBsYWNlcyBhcyBjb21tZW50cyA/PgorPCFET0NUWVBFIGdyZWV0aW5nIFsKKyAgPCFFTEVNRU5UIGdyZWV0aW5nICgjUENEQVRBKT4KK10+Cis8Z3JlZXRpbmc+SGVsbG8sIHdvcmxkITwvZ3JlZXRpbmc+CisiIiIKKworbnNkb2MgPSAiPGZvbyB4bWxucz0nVVJJJyBhdHRyPSd2YWwnLz4iCisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKyMgU2lsZW5jZSBQeTNrIHdhcm5pbmcKK3htbGxpYiA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd4bWxsaWInLCBkZXByZWNhdGVkPVRydWUpCisKK2NsYXNzIFhNTFBhcnNlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgcGFyc2VyID0geG1sbGliLlhNTFBhcnNlcigpCisgICAgICAgIGZvciBjIGluIHRlc3Rkb2M6CisgICAgICAgICAgICBwYXJzZXIuZmVlZChjKQorICAgICAgICBwYXJzZXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9uYW1lc3BhY2Uoc2VsZik6CisgICAgICAgIGNsYXNzIEgoeG1sbGliLlhNTFBhcnNlcik6CisgICAgICAgICAgICBkZWYgdW5rbm93bl9zdGFydHRhZyhzZWxmLCBuYW1lLCBhdHRyKToKKyAgICAgICAgICAgICAgICBzZWxmLm5hbWUsIHNlbGYuYXR0ciA9IG5hbWUsIGF0dHIKKyAgICAgICAgaD1IKCkKKyAgICAgICAgaC5mZWVkKG5zZG9jKQorICAgICAgICBoLmNsb3NlKCkKKyAgICAgICAgIyBUaGUgZGVmYXVsdCBuYW1lc3BhY2UgYXBwbGllcyB0byBlbGVtZW50cy4uLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubmFtZSwgIlVSSSBmb28iKQorICAgICAgICAjIGJ1dCBub3QgdG8gYXR0cmlidXRlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguYXR0ciwgeydhdHRyJzondmFsJ30pCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoWE1MUGFyc2VyVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbHJwYy5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3htbHJwYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTY1ZmRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeG1scnBjLnB5CkBAIC0wLDAgKzEsMTAyNyBAQAoraW1wb3J0IGJhc2U2NAoraW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgeG1scnBjbGliCitpbXBvcnQgU2ltcGxlWE1MUlBDU2VydmVyCitpbXBvcnQgbWltZXRvb2xzCitpbXBvcnQgaHR0cGxpYgoraW1wb3J0IHNvY2tldAoraW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgb3MKK2ltcG9ydCByZQorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKwordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKK3RyeToKKyAgICB1bmljb2RlCitleGNlcHQgTmFtZUVycm9yOgorICAgIGhhdmVfdW5pY29kZSA9IEZhbHNlCitlbHNlOgorICAgIGhhdmVfdW5pY29kZSA9IFRydWUKKworYWxpc3QgPSBbeydhc3RyaW5nJzogJ2Zvb0BiYXIuYmF6LnNwYW0nLAorICAgICAgICAgICdhZmxvYXQnOiA3MjgzLjQzLAorICAgICAgICAgICdhbmludCc6IDIqKjIwLAorICAgICAgICAgICdhc2hvcnRsb25nJzogMkwsCisgICAgICAgICAgJ2Fub3RoZXJsaXN0JzogWycuenl4LjQxJ10sCisgICAgICAgICAgJ2FiYXNlNjQnOiB4bWxycGNsaWIuQmluYXJ5KCJteSBkb2cgaGFzIGZsZWFzIiksCisgICAgICAgICAgJ2Jvb2xlYW4nOiB4bWxycGNsaWIuRmFsc2UsCisgICAgICAgICAgJ3VuaWNvZGUnOiB1J1x1NDAwMFx1NjAwMFx1ODAwMCcsCisgICAgICAgICAgdSd1a2V5XHU0MDAwJzogJ3JlZ3VsYXIgdmFsdWUnLAorICAgICAgICAgICdkYXRldGltZTEnOiB4bWxycGNsaWIuRGF0ZVRpbWUoJzIwMDUwMjEwVDExOjQxOjIzJyksCisgICAgICAgICAgJ2RhdGV0aW1lMic6IHhtbHJwY2xpYi5EYXRlVGltZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICgyMDA1LCAwMiwgMTAsIDExLCA0MSwgMjMsIDAsIDEsIC0xKSksCisgICAgICAgICAgJ2RhdGV0aW1lMyc6IHhtbHJwY2xpYi5EYXRlVGltZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGV0aW1lLmRhdGV0aW1lKDIwMDUsIDAyLCAxMCwgMTEsIDQxLCAyMykpLAorICAgICAgICAgIH1dCisKK2NsYXNzIFhNTFJQQ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2R1bXBfbG9hZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB4bWxycGNsaWIubG9hZHMoeG1scnBjbGliLmR1bXBzKChhbGlzdCwpKSlbMF1bMF0pCisKKyAgICBkZWYgdGVzdF9kdW1wX2JhcmVfZGF0ZXRpbWUoc2VsZik6CisgICAgICAgICMgVGhpcyBjaGVja3MgdGhhdCBhbiB1bndyYXBwZWQgZGF0ZXRpbWUuZGF0ZSBvYmplY3QgY2FuIGJlIGhhbmRsZWQKKyAgICAgICAgIyBieSB0aGUgbWFyc2hhbGxpbmcgY29kZS4gIFRoaXMgY2FuJ3QgYmUgZG9uZSB2aWEgdGVzdF9kdW1wX2xvYWQoKQorICAgICAgICAjIHNpbmNlIHdpdGggdXNlX2RhdGV0aW1lIHNldCB0byAxIHRoZSB1bm1hcnNoYWxsZXIgd291bGQgY3JlYXRlCisgICAgICAgICMgZGF0ZXRpbWUgb2JqZWN0cyBmb3IgdGhlICdkYXRldGltZVsxMjNdJyBrZXlzIGFzIHdlbGwKKyAgICAgICAgZHQgPSBkYXRldGltZS5kYXRldGltZSgyMDA1LCAwMiwgMTAsIDExLCA0MSwgMjMpCisgICAgICAgIHMgPSB4bWxycGNsaWIuZHVtcHMoKGR0LCkpCisgICAgICAgIChuZXdkdCwpLCBtID0geG1scnBjbGliLmxvYWRzKHMsIHVzZV9kYXRldGltZT0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2R0LCBkdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBOb25lKQorCisgICAgICAgIChuZXdkdCwpLCBtID0geG1scnBjbGliLmxvYWRzKHMsIHVzZV9kYXRldGltZT0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2R0LCB4bWxycGNsaWIuRGF0ZVRpbWUoJzIwMDUwMjEwVDExOjQxOjIzJykpCisKKyAgICBkZWYgdGVzdF9kYXRldGltZV9iZWZvcmVfMTkwMChzZWxmKToKKyAgICAgICAgIyBzYW1lIGFzIGJlZm9yZSBidXQgd2l0aCBhIGRhdGUgYmVmb3JlIDE5MDAKKyAgICAgICAgZHQgPSBkYXRldGltZS5kYXRldGltZSgxLCAwMiwgMTAsIDExLCA0MSwgMjMpCisgICAgICAgIHMgPSB4bWxycGNsaWIuZHVtcHMoKGR0LCkpCisgICAgICAgIChuZXdkdCwpLCBtID0geG1scnBjbGliLmxvYWRzKHMsIHVzZV9kYXRldGltZT0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2R0LCBkdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBOb25lKQorCisgICAgICAgIChuZXdkdCwpLCBtID0geG1scnBjbGliLmxvYWRzKHMsIHVzZV9kYXRldGltZT0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2R0LCB4bWxycGNsaWIuRGF0ZVRpbWUoJzAwMDEwMjEwVDExOjQxOjIzJykpCisKKyAgICBkZWYgdGVzdF9jbXBfZGF0ZXRpbWVfRGF0ZVRpbWUoc2VsZik6CisgICAgICAgIG5vdyA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpCisgICAgICAgIGR0ID0geG1scnBjbGliLkRhdGVUaW1lKG5vdy50aW1ldHVwbGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR0ID09IG5vdykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdyA9PSBkdCkKKyAgICAgICAgdGhlbiA9IG5vdyArIGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPTQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aGVuID49IGR0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZHQgPCB0aGVuKQorCisgICAgZGVmIHRlc3RfYnVnXzExNjQ5MTIgKHNlbGYpOgorICAgICAgICBkID0geG1scnBjbGliLkRhdGVUaW1lKCkKKyAgICAgICAgKChuZXdfZCwpLCBkdW1teSkgPSB4bWxycGNsaWIubG9hZHMoeG1scnBjbGliLmR1bXBzKChkLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHJlc3BvbnNlPVRydWUpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobmV3X2QudmFsdWUsIHN0cikKKworICAgICAgICAjIENoZWNrIHRoYXQgdGhlIG91dHB1dCBvZiBkdW1wcygpIGlzIHN0aWxsIGFuIDgtYml0IHN0cmluZworICAgICAgICBzID0geG1scnBjbGliLmR1bXBzKChuZXdfZCwpLCBtZXRob2RyZXNwb25zZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uocywgc3RyKQorCisgICAgZGVmIHRlc3RfbmV3c3R5bGVfY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFQob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdCA9IFQoKQorICAgICAgICB0LnggPSAxMDAKKyAgICAgICAgdC55ID0gIkhlbGxvIgorICAgICAgICAoKHQyLCksIGR1bW15KSA9IHhtbHJwY2xpYi5sb2Fkcyh4bWxycGNsaWIuZHVtcHMoKHQsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIsIHQuX19kaWN0X18pCisKKyAgICBkZWYgdGVzdF9kdW1wX2JpZ19sb25nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCB4bWxycGNsaWIuZHVtcHMsICgyTCoqOTksKSkKKworICAgIGRlZiB0ZXN0X2R1bXBfYmFkX2RpY3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgeG1scnBjbGliLmR1bXBzLCAoeygxLDIsMyk6IDF9LCkpCisKKyAgICBkZWYgdGVzdF9kdW1wX3JlY3Vyc2l2ZV9zZXEoc2VsZik6CisgICAgICAgIGwgPSBbMSwyLDNdCisgICAgICAgIHQgPSBbMyw0LDUsbF0KKyAgICAgICAgbC5hcHBlbmQodCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB4bWxycGNsaWIuZHVtcHMsIChsLCkpCisKKyAgICBkZWYgdGVzdF9kdW1wX3JlY3Vyc2l2ZV9kaWN0KHNlbGYpOgorICAgICAgICBkID0geycxJzoxLCAnMic6MX0KKyAgICAgICAgdCA9IHsnMyc6MywgJ2QnOmR9CisgICAgICAgIGRbJ3QnXSA9IHQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB4bWxycGNsaWIuZHVtcHMsIChkLCkpCisKKyAgICBkZWYgdGVzdF9kdW1wX2JpZ19pbnQoc2VsZik6CisgICAgICAgIGlmIHN5cy5tYXhpbnQgPiAyTCoqMzEtMToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHhtbHJwY2xpYi5kdW1wcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQoMkwqKjM0KSwpKQorCisgICAgICAgIHhtbHJwY2xpYi5kdW1wcygoeG1scnBjbGliLk1BWElOVCwgeG1scnBjbGliLk1JTklOVCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHhtbHJwY2xpYi5kdW1wcywgKHhtbHJwY2xpYi5NQVhJTlQrMSwpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCB4bWxycGNsaWIuZHVtcHMsICh4bWxycGNsaWIuTUlOSU5ULTEsKSkKKworICAgICAgICBkZWYgZHVtbXlfd3JpdGUocyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbSA9IHhtbHJwY2xpYi5NYXJzaGFsbGVyKCkKKyAgICAgICAgbS5kdW1wX2ludCh4bWxycGNsaWIuTUFYSU5ULCBkdW1teV93cml0ZSkKKyAgICAgICAgbS5kdW1wX2ludCh4bWxycGNsaWIuTUlOSU5ULCBkdW1teV93cml0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbS5kdW1wX2ludCwgeG1scnBjbGliLk1BWElOVCsxLCBkdW1teV93cml0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbS5kdW1wX2ludCwgeG1scnBjbGliLk1JTklOVC0xLCBkdW1teV93cml0ZSkKKworCisgICAgZGVmIHRlc3RfZHVtcF9ub25lKHNlbGYpOgorICAgICAgICB2YWx1ZSA9IGFsaXN0ICsgW05vbmVdCisgICAgICAgIGFyZzEgPSAoYWxpc3QgKyBbTm9uZV0sKQorICAgICAgICBzdHJnID0geG1scnBjbGliLmR1bXBzKGFyZzEsIGFsbG93X25vbmU9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB4bWxycGNsaWIubG9hZHMoc3RyZylbMF1bMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgeG1scnBjbGliLmR1bXBzLCAoYXJnMSwpKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9lbmNvZGluZ19pc3N1ZXMoc2VsZik6CisgICAgICAgICMgU0YgYnVnICMxMTE1OTg5OiB3cm9uZyBkZWNvZGluZyBpbiAnX3N0cmluZ2lmeScKKyAgICAgICAgdXRmOCA9ICIiIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz4KKyAgICAgICAgICAgICAgICAgIDxwYXJhbXM+CisgICAgICAgICAgICAgICAgICAgIDxwYXJhbT48dmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5hYmMgXHg5NTwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgIDwvdmFsdWU+PC9wYXJhbT4KKyAgICAgICAgICAgICAgICAgICAgPHBhcmFtPjx2YWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICA8c3RydWN0PgorICAgICAgICAgICAgICAgICAgICAgICAgPG1lbWJlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+ZGVmIFx4OTY8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT48c3RyaW5nPmdoaSBceDk3PC9zdHJpbmc+PC92YWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tZW1iZXI+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3N0cnVjdD4KKyAgICAgICAgICAgICAgICAgICAgICA8L3ZhbHVlPjwvcGFyYW0+CisgICAgICAgICAgICAgICAgICA8L3BhcmFtcz4KKyAgICAgICAgICAgICAgICAgICIiIgorCisgICAgICAgICMgc3lzLnNldGRlZmF1bHRlbmNvZGluZygpIG5vcm1hbGx5IGRvZXNuJ3QgZXhpc3QgYWZ0ZXIgc2l0ZS5weSBpcworICAgICAgICAjIGxvYWRlZC4gIEltcG9ydCBhIHRlbXBvcmFyeSBmcmVzaCBjb3B5IHRvIGdldCBhY2Nlc3MgdG8gaXQKKyAgICAgICAgIyBidXQgdGhlbiByZXN0b3JlIHRoZSBvcmlnaW5hbCBjb3B5IHRvIGF2b2lkIG1lc3Npbmcgd2l0aAorICAgICAgICAjIG90aGVyIHBvdGVudGlhbGx5IG1vZGlmaWVkIHN5cyBtb2R1bGUgYXR0cmlidXRlcworICAgICAgICBvbGRfZW5jb2RpbmcgPSBzeXMuZ2V0ZGVmYXVsdGVuY29kaW5nKCkKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuQ2xlYW5JbXBvcnQoJ3N5cycpOgorICAgICAgICAgICAgaW1wb3J0IHN5cyBhcyB0ZW1wX3N5cworICAgICAgICAgICAgdGVtcF9zeXMuc2V0ZGVmYXVsdGVuY29kaW5nKCJpc28tODg1OS0xIikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAocywgZCksIG0gPSB4bWxycGNsaWIubG9hZHModXRmOCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdGVtcF9zeXMuc2V0ZGVmYXVsdGVuY29kaW5nKG9sZF9lbmNvZGluZykKKworICAgICAgICBpdGVtcyA9IGQuaXRlbXMoKQorICAgICAgICBpZiBoYXZlX3VuaWNvZGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHUiYWJjIFx4OTUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHMsIHVuaWNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBbKHUiZGVmIFx4OTYiLCB1ImdoaSBceDk3IildKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0ZW1zWzBdWzBdLCB1bmljb2RlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0ZW1zWzBdWzFdLCB1bmljb2RlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiYWJjIFx4YzJceDk1IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbXMsIFsoImRlZiBceGMyXHg5NiIsICJnaGkgXHhjMlx4OTciKV0pCisKKworY2xhc3MgSGVscGVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2VzY2FwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4bWxycGNsaWIuZXNjYXBlKCJhJmIiKSwgImEmYW1wO2IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhtbHJwY2xpYi5lc2NhcGUoImE8YiIpLCAiYSZsdDtiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4bWxycGNsaWIuZXNjYXBlKCJhPmIiKSwgImEmZ3Q7YiIpCisKK2NsYXNzIEZhdWx0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGYgPSB4bWxycGNsaWIuRmF1bHQoNDIsICdUZXN0IEZhdWx0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGYpLCAiPEZhdWx0IDQyOiAnVGVzdCBGYXVsdCc+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGYpLCBzdHIoZikpCisKKyAgICBkZWYgdGVzdF9kdW1wX2ZhdWx0KHNlbGYpOgorICAgICAgICBmID0geG1scnBjbGliLkZhdWx0KDQyLCAnVGVzdCBGYXVsdCcpCisgICAgICAgIHMgPSB4bWxycGNsaWIuZHVtcHMoKGYsKSkKKyAgICAgICAgKG5ld2YsKSwgbSA9IHhtbHJwY2xpYi5sb2FkcyhzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2YsIHsnZmF1bHRDb2RlJzogNDIsICdmYXVsdFN0cmluZyc6ICdUZXN0IEZhdWx0J30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgTm9uZSkKKworICAgICAgICBzID0geG1scnBjbGliLk1hcnNoYWxsZXIoKS5kdW1wcyhmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWxycGNsaWIuRmF1bHQsIHhtbHJwY2xpYi5sb2FkcywgcykKKworCitjbGFzcyBEYXRlVGltZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgorICAgICAgICB0ID0geG1scnBjbGliLkRhdGVUaW1lKCkKKworICAgIGRlZiB0ZXN0X3RpbWUoc2VsZik6CisgICAgICAgIGQgPSAxMTgxMzk5OTMwLjAzNjk1MgorICAgICAgICB0ID0geG1scnBjbGliLkRhdGVUaW1lKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQpLCB0aW1lLnN0cmZ0aW1lKCIlWSVtJWRUJUg6JU06JVMiLCB0aW1lLmxvY2FsdGltZShkKSkpCisKKyAgICBkZWYgdGVzdF90aW1lX3R1cGxlKHNlbGYpOgorICAgICAgICBkID0gKDIwMDcsNiw5LDEwLDM4LDUwLDUsMTYwLDApCisgICAgICAgIHQgPSB4bWxycGNsaWIuRGF0ZVRpbWUoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodCksICcyMDA3MDYwOVQxMDozODo1MCcpCisKKyAgICBkZWYgdGVzdF90aW1lX3N0cnVjdChzZWxmKToKKyAgICAgICAgZCA9IHRpbWUubG9jYWx0aW1lKDExODEzOTk5MzAuMDM2OTUyKQorICAgICAgICB0ID0geG1scnBjbGliLkRhdGVUaW1lKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQpLCAgdGltZS5zdHJmdGltZSgiJVklbSVkVCVIOiVNOiVTIiwgZCkpCisKKyAgICBkZWYgdGVzdF9kYXRldGltZV9kYXRldGltZShzZWxmKToKKyAgICAgICAgZCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMDcsMSwyLDMsNCw1KQorICAgICAgICB0ID0geG1scnBjbGliLkRhdGVUaW1lKGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQpLCAnMjAwNzAxMDJUMDM6MDQ6MDUnKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMDcsMSwyLDMsNCw1KQorICAgICAgICB0ID0geG1scnBjbGliLkRhdGVUaW1lKGQpCisgICAgICAgIHZhbCA9IjxEYXRlVGltZSAnMjAwNzAxMDJUMDM6MDQ6MDUnIGF0ICV4PiIgJSBpZCh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksIHZhbCkKKworICAgIGRlZiB0ZXN0X2RlY29kZShzZWxmKToKKyAgICAgICAgZCA9ICcgMjAwNzA5MDhUMDc6MTE6MTMgICcKKyAgICAgICAgdDEgPSB4bWxycGNsaWIuRGF0ZVRpbWUoKQorICAgICAgICB0MS5kZWNvZGUoZCkKKyAgICAgICAgdHJlZiA9IHhtbHJwY2xpYi5EYXRlVGltZShkYXRldGltZS5kYXRldGltZSgyMDA3LDksOCw3LDExLDEzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdHJlZikKKworICAgICAgICB0MiA9IHhtbHJwY2xpYi5fZGF0ZXRpbWUoZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdHJlZikKKworY2xhc3MgQmluYXJ5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHQgPSB4bWxycGNsaWIuQmluYXJ5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodCksICcnKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nKHNlbGYpOgorICAgICAgICBkID0gJ1x4MDFceDAyXHgwM2FiYzEyM1x4ZmZceGZlJworICAgICAgICB0ID0geG1scnBjbGliLkJpbmFyeShkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0KSwgZCkKKworICAgIGRlZiB0ZXN0X2RlY29kZShzZWxmKToKKyAgICAgICAgZCA9ICdceDAxXHgwMlx4MDNhYmMxMjNceGZmXHhmZScKKyAgICAgICAgZGUgPSBiYXNlNjQuZW5jb2Rlc3RyaW5nKGQpCisgICAgICAgIHQxID0geG1scnBjbGliLkJpbmFyeSgpCisgICAgICAgIHQxLmRlY29kZShkZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodDEpLCBkKQorCisgICAgICAgIHQyID0geG1scnBjbGliLl9iaW5hcnkoZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQyKSwgZCkKKworCitBRERSID0gUE9SVCA9IFVSTCA9IE5vbmUKKworIyBUaGUgZXZ0IGlzIHNldCB0d2ljZS4gIEZpcnN0IHdoZW4gdGhlIHNlcnZlciBpcyByZWFkeSB0byBzZXJ2ZS4KKyMgU2Vjb25kIHdoZW4gdGhlIHNlcnZlciBoYXMgYmVlbiBzaHV0ZG93bi4gIFRoZSB1c2VyIG11c3QgY2xlYXIKKyMgdGhlIGV2ZW50IGFmdGVyIGl0IGhhcyBiZWVuIHNldCB0aGUgZmlyc3QgdGltZSB0byBjYXRjaCB0aGUgc2Vjb25kIHNldC4KK2RlZiBodHRwX3NlcnZlcihldnQsIG51bXJlcXVlc3RzLCByZXF1ZXN0SGFuZGxlcj1Ob25lKToKKyAgICBjbGFzcyBUZXN0SW5zdGFuY2VDbGFzczoKKyAgICAgICAgZGVmIGRpdihzZWxmLCB4LCB5KToKKyAgICAgICAgICAgIHJldHVybiB4IC8vIHkKKworICAgICAgICBkZWYgX21ldGhvZEhlbHAoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICBpZiBuYW1lID09ICdkaXYnOgorICAgICAgICAgICAgICAgIHJldHVybiAnVGhpcyBpcyB0aGUgZGl2IGZ1bmN0aW9uJworCisgICAgZGVmIG15X2Z1bmN0aW9uKCk6CisgICAgICAgICcnJ1RoaXMgaXMgbXkgZnVuY3Rpb24nJycKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGNsYXNzIE15WE1MUlBDU2VydmVyKFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIpOgorICAgICAgICBkZWYgZ2V0X3JlcXVlc3Qoc2VsZik6CisgICAgICAgICAgICAjIEVuc3VyZSB0aGUgc29ja2V0IGlzIGFsd2F5cyBub24tYmxvY2tpbmcuICBPbiBMaW51eCwgc29ja2V0CisgICAgICAgICAgICAjIGF0dHJpYnV0ZXMgYXJlIG5vdCBpbmhlcml0ZWQgbGlrZSB0aGV5IGFyZSBvbiAqQlNEIGFuZCBXaW5kb3dzLgorICAgICAgICAgICAgcywgcG9ydCA9IHNlbGYuc29ja2V0LmFjY2VwdCgpCisgICAgICAgICAgICBzLnNldGJsb2NraW5nKFRydWUpCisgICAgICAgICAgICByZXR1cm4gcywgcG9ydAorCisgICAgaWYgbm90IHJlcXVlc3RIYW5kbGVyOgorICAgICAgICByZXF1ZXN0SGFuZGxlciA9IFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcgorICAgIHNlcnYgPSBNeVhNTFJQQ1NlcnZlcigoImxvY2FsaG9zdCIsIDApLCByZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nUmVxdWVzdHM9RmFsc2UsIGJpbmRfYW5kX2FjdGl2YXRlPUZhbHNlKQorICAgIHRyeToKKyAgICAgICAgc2Vydi5zb2NrZXQuc2V0dGltZW91dCgzKQorICAgICAgICBzZXJ2LnNlcnZlcl9iaW5kKCkKKyAgICAgICAgZ2xvYmFsIEFERFIsIFBPUlQsIFVSTAorICAgICAgICBBRERSLCBQT1JUID0gc2Vydi5zb2NrZXQuZ2V0c29ja25hbWUoKQorICAgICAgICAjY29ubmVjdCB0byBJUCBhZGRyZXNzIGRpcmVjdGx5LiAgVGhpcyBhdm9pZHMgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKCkKKyAgICAgICAgI3RyeWluZyB0byBjb25uZWN0IHRvICJsb2NhbGhvc3QiIHVzaW5nIGFsbCBhZGRyZXNzIGZhbWlsaWVzLCB3aGljaAorICAgICAgICAjY2F1c2VzIHNsb3dkb3duIGUuZy4gb24gdmlzdGEgd2hpY2ggc3VwcG9ydHMgQUZfSU5FVDYuICBUaGUgc2VydmVyIGxpc3RlbnMKKyAgICAgICAgI29uIEFGX0lORVQgb25seS4KKyAgICAgICAgVVJMID0gImh0dHA6Ly8lczolZCIlKEFERFIsIFBPUlQpCisgICAgICAgIHNlcnYuc2VydmVyX2FjdGl2YXRlKCkKKyAgICAgICAgc2Vydi5yZWdpc3Rlcl9pbnRyb3NwZWN0aW9uX2Z1bmN0aW9ucygpCisgICAgICAgIHNlcnYucmVnaXN0ZXJfbXVsdGljYWxsX2Z1bmN0aW9ucygpCisgICAgICAgIHNlcnYucmVnaXN0ZXJfZnVuY3Rpb24ocG93KQorICAgICAgICBzZXJ2LnJlZ2lzdGVyX2Z1bmN0aW9uKGxhbWJkYSB4LHk6IHgreSwgJ2FkZCcpCisgICAgICAgIHNlcnYucmVnaXN0ZXJfZnVuY3Rpb24obXlfZnVuY3Rpb24pCisgICAgICAgIHNlcnYucmVnaXN0ZXJfaW5zdGFuY2UoVGVzdEluc3RhbmNlQ2xhc3MoKSkKKyAgICAgICAgZXZ0LnNldCgpCisKKyAgICAgICAgIyBoYW5kbGUgdXAgdG8gJ251bXJlcXVlc3RzJyByZXF1ZXN0cworICAgICAgICB3aGlsZSBudW1yZXF1ZXN0cyA+IDA6CisgICAgICAgICAgICBzZXJ2LmhhbmRsZV9yZXF1ZXN0KCkKKyAgICAgICAgICAgIG51bXJlcXVlc3RzIC09IDEKKworICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyAgICAgICAgcGFzcworICAgIGZpbmFsbHk6CisgICAgICAgIHNlcnYuc29ja2V0LmNsb3NlKCkKKyAgICAgICAgUE9SVCA9IE5vbmUKKyAgICAgICAgZXZ0LnNldCgpCisKK2RlZiBodHRwX211bHRpX3NlcnZlcihldnQsIG51bXJlcXVlc3RzLCByZXF1ZXN0SGFuZGxlcj1Ob25lKToKKyAgICBjbGFzcyBUZXN0SW5zdGFuY2VDbGFzczoKKyAgICAgICAgZGVmIGRpdihzZWxmLCB4LCB5KToKKyAgICAgICAgICAgIHJldHVybiB4IC8vIHkKKworICAgICAgICBkZWYgX21ldGhvZEhlbHAoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICBpZiBuYW1lID09ICdkaXYnOgorICAgICAgICAgICAgICAgIHJldHVybiAnVGhpcyBpcyB0aGUgZGl2IGZ1bmN0aW9uJworCisgICAgZGVmIG15X2Z1bmN0aW9uKCk6CisgICAgICAgICcnJ1RoaXMgaXMgbXkgZnVuY3Rpb24nJycKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGNsYXNzIE15WE1MUlBDU2VydmVyKFNpbXBsZVhNTFJQQ1NlcnZlci5NdWx0aVBhdGhYTUxSUENTZXJ2ZXIpOgorICAgICAgICBkZWYgZ2V0X3JlcXVlc3Qoc2VsZik6CisgICAgICAgICAgICAjIEVuc3VyZSB0aGUgc29ja2V0IGlzIGFsd2F5cyBub24tYmxvY2tpbmcuICBPbiBMaW51eCwgc29ja2V0CisgICAgICAgICAgICAjIGF0dHJpYnV0ZXMgYXJlIG5vdCBpbmhlcml0ZWQgbGlrZSB0aGV5IGFyZSBvbiAqQlNEIGFuZCBXaW5kb3dzLgorICAgICAgICAgICAgcywgcG9ydCA9IHNlbGYuc29ja2V0LmFjY2VwdCgpCisgICAgICAgICAgICBzLnNldGJsb2NraW5nKFRydWUpCisgICAgICAgICAgICByZXR1cm4gcywgcG9ydAorCisgICAgaWYgbm90IHJlcXVlc3RIYW5kbGVyOgorICAgICAgICByZXF1ZXN0SGFuZGxlciA9IFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcgorICAgIGNsYXNzIE15UmVxdWVzdEhhbmRsZXIocmVxdWVzdEhhbmRsZXIpOgorICAgICAgICBycGNfcGF0aHMgPSBbXQorCisgICAgc2VydiA9IE15WE1MUlBDU2VydmVyKCgibG9jYWxob3N0IiwgMCksIE15UmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPUZhbHNlLCBiaW5kX2FuZF9hY3RpdmF0ZT1GYWxzZSkKKyAgICBzZXJ2LnNvY2tldC5zZXR0aW1lb3V0KDMpCisgICAgc2Vydi5zZXJ2ZXJfYmluZCgpCisgICAgdHJ5OgorICAgICAgICBnbG9iYWwgQUREUiwgUE9SVCwgVVJMCisgICAgICAgIEFERFIsIFBPUlQgPSBzZXJ2LnNvY2tldC5nZXRzb2NrbmFtZSgpCisgICAgICAgICNjb25uZWN0IHRvIElQIGFkZHJlc3MgZGlyZWN0bHkuICBUaGlzIGF2b2lkcyBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKQorICAgICAgICAjdHJ5aW5nIHRvIGNvbm5lY3QgdG8gImxvY2FsaG9zdCIgdXNpbmcgYWxsIGFkZHJlc3MgZmFtaWxpZXMsIHdoaWNoCisgICAgICAgICNjYXVzZXMgc2xvd2Rvd24gZS5nLiBvbiB2aXN0YSB3aGljaCBzdXBwb3J0cyBBRl9JTkVUNi4gIFRoZSBzZXJ2ZXIgbGlzdGVucworICAgICAgICAjb24gQUZfSU5FVCBvbmx5LgorICAgICAgICBVUkwgPSAiaHR0cDovLyVzOiVkIiUoQUREUiwgUE9SVCkKKyAgICAgICAgc2Vydi5zZXJ2ZXJfYWN0aXZhdGUoKQorICAgICAgICBwYXRocyA9IFsiL2ZvbyIsICIvZm9vL2JhciJdCisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgZCA9IHNlcnYuYWRkX2Rpc3BhdGNoZXIocGF0aCwgU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ0Rpc3BhdGNoZXIoKSkKKyAgICAgICAgICAgIGQucmVnaXN0ZXJfaW50cm9zcGVjdGlvbl9mdW5jdGlvbnMoKQorICAgICAgICAgICAgZC5yZWdpc3Rlcl9tdWx0aWNhbGxfZnVuY3Rpb25zKCkKKyAgICAgICAgc2Vydi5nZXRfZGlzcGF0Y2hlcihwYXRoc1swXSkucmVnaXN0ZXJfZnVuY3Rpb24ocG93KQorICAgICAgICBzZXJ2LmdldF9kaXNwYXRjaGVyKHBhdGhzWzFdKS5yZWdpc3Rlcl9mdW5jdGlvbihsYW1iZGEgeCx5OiB4K3ksICdhZGQnKQorICAgICAgICBldnQuc2V0KCkKKworICAgICAgICAjIGhhbmRsZSB1cCB0byAnbnVtcmVxdWVzdHMnIHJlcXVlc3RzCisgICAgICAgIHdoaWxlIG51bXJlcXVlc3RzID4gMDoKKyAgICAgICAgICAgIHNlcnYuaGFuZGxlX3JlcXVlc3QoKQorICAgICAgICAgICAgbnVtcmVxdWVzdHMgLT0gMQorCisgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgc2Vydi5zb2NrZXQuY2xvc2UoKQorICAgICAgICBQT1JUID0gTm9uZQorICAgICAgICBldnQuc2V0KCkKKworIyBUaGlzIGZ1bmN0aW9uIHByZXZlbnRzIGVycm9ycyBsaWtlOgorIyAgICA8UHJvdG9jb2xFcnJvciBmb3IgbG9jYWxob3N0OjU3NTI3L1JQQzI6IDUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3I+CitkZWYgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgorICAgICcnJ1JldHVybnMgVHJ1ZSBpZiB0aGUgZ2l2ZW4gUHJvdG9jb2xFcnJvciBpcyB0aGUgcHJvZHVjdCBvZiBhIHNlcnZlci1zaWRlCisgICAgICAgZXhjZXB0aW9uIGNhdXNlZCBieSB0aGUgJ3RlbXBvcmFyaWx5IHVuYXZhaWxhYmxlJyByZXNwb25zZSBzb21ldGltZXMKKyAgICAgICBnaXZlbiBieSBvcGVyYXRpb25zIG9uIG5vbi1ibG9ja2luZyBzb2NrZXRzLicnJworCisgICAgIyBzb21ldGltZXMgd2UgZ2V0IGEgLTEgZXJyb3IgY29kZSBhbmQvb3IgZW1wdHkgaGVhZGVycworICAgIHRyeToKKyAgICAgICAgaWYgZS5lcnJjb2RlID09IC0xIG9yIGUuaGVhZGVycyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZXhjX21lc3MgPSBlLmhlYWRlcnMuZ2V0KCdYLWV4Y2VwdGlvbicpCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAjIElnbm9yZSBzb2NrZXQuZXJyb3JzIGhlcmUuCisgICAgICAgIGV4Y19tZXNzID0gc3RyKGUpCisKKyAgICBpZiBleGNfbWVzcyBhbmQgJ3RlbXBvcmFyaWx5IHVuYXZhaWxhYmxlJyBpbiBleGNfbWVzcy5sb3dlcigpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcmV0dXJuIEZhbHNlCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBCYXNlU2VydmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHJlcXVlc3RIYW5kbGVyID0gTm9uZQorICAgIHJlcXVlc3RfY291bnQgPSAxCisgICAgdGhyZWFkRnVuYyA9IHN0YXRpY21ldGhvZChodHRwX3NlcnZlcikKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBlbmFibGUgdHJhY2ViYWNrIHJlcG9ydGluZworICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDU2VydmVyLl9zZW5kX3RyYWNlYmFja19oZWFkZXIgPSBUcnVlCisKKyAgICAgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICAjIHN0YXJ0IHNlcnZlciB0aHJlYWQgdG8gaGFuZGxlIHJlcXVlc3RzCisgICAgICAgIHNlcnZfYXJncyA9IChzZWxmLmV2dCwgc2VsZi5yZXF1ZXN0X2NvdW50LCBzZWxmLnJlcXVlc3RIYW5kbGVyKQorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLnRocmVhZEZ1bmMsIGFyZ3M9c2Vydl9hcmdzKS5zdGFydCgpCisKKyAgICAgICAgIyB3YWl0IGZvciB0aGUgc2VydmVyIHRvIGJlIHJlYWR5CisgICAgICAgIHNlbGYuZXZ0LndhaXQoMTApCisgICAgICAgIHNlbGYuZXZ0LmNsZWFyKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyB3YWl0IG9uIHRoZSBzZXJ2ZXIgdGhyZWFkIHRvIHRlcm1pbmF0ZQorICAgICAgICBzZWxmLmV2dC53YWl0KDEwKQorCisgICAgICAgICMgZGlzYWJsZSB0cmFjZWJhY2sgcmVwb3J0aW5nCisgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIuX3NlbmRfdHJhY2ViYWNrX2hlYWRlciA9IEZhbHNlCisKKyMgTk9URTogVGhlIHRlc3RzIGluIFNpbXBsZVNlcnZlclRlc3RDYXNlIHdpbGwgaWdub3JlIGZhaWx1cmVzIGNhdXNlZCBieQorIyAidGVtcG9yYXJpbHkgdW5hdmFpbGFibGUiIGV4Y2VwdGlvbnMgcmFpc2VkIGluIFNpbXBsZVhNTFJQQ1NlcnZlci4gIFRoaXMKKyMgY29uZGl0aW9uIG9jY3VycyBpbmZyZXF1ZW50bHkgb24gc29tZSBwbGF0Zm9ybXMsIGZyZXF1ZW50bHkgb24gb3RoZXJzLCBhbmQKKyMgaXMgYXBwYXJlbnRseSBjYXVzZWQgYnkgdXNpbmcgU2ltcGxlWE1MUlBDU2VydmVyIHdpdGggYSBub24tYmxvY2tpbmcgc29ja2V0CisjIElmIHRoZSBzZXJ2ZXIgY2xhc3MgaXMgdXBkYXRlZCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUgdG8gaGFuZGxlIHRoaXMKKyMgc2l0dWF0aW9uIG1vcmUgZ3JhY2VmdWxseSwgdGhlc2UgdGVzdHMgc2hvdWxkIGJlIG1vZGlmaWVkIGFwcHJvcHJpYXRlbHkuCisKK2NsYXNzIFNpbXBsZVNlcnZlclRlc3RDYXNlKEJhc2VTZXJ2ZXJUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc2ltcGxlMShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvciksIGU6CisgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycworICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKKyAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzXG4lcyIgJSAoZSwgZ2V0YXR0cihlLCAiaGVhZGVycyIsICIiKSkpCisKKyAgICBkZWYgdGVzdF9ub25hc2NpaShzZWxmKToKKyAgICAgICAgc3RhcnRfc3RyaW5nID0gJ1BcTntMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIENJUkNVTUZMRVh9dCcKKyAgICAgICAgZW5kX3N0cmluZyA9ICdoXE57TEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBIT1JOfW4nCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYWRkKHN0YXJ0X3N0cmluZywgZW5kX3N0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3N0cmluZyArIGVuZF9zdHJpbmcpCisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0IHVuYXZhaWxhYmxlIGVycm9ycy4KKyAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CisgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlc1xuJXMiICUgKGUsIGdldGF0dHIoZSwgImhlYWRlcnMiLCAiIikpKQorCisgICAgZGVmIHRlc3RfdW5pY29kZV9ob3N0KHNlbGYpOgorICAgICAgICBzZXJ2ZXIgPSB4bWxycGNsaWIuU2VydmVyUHJveHkodSJodHRwOi8vJXM6JWQvUlBDMiIlKEFERFIsIFBPUlQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlci5hZGQoImEiLCB1Ilx4ZTkiKSwgdSJhXHhlOSIpCisKKyAgICAjIFtjaF0gVGhlIHRlc3QgNDA0IGlzIGNhdXNpbmcgbG90cyBvZiBmYWxzZSBhbGFybXMuCisgICAgZGVmIFhYWHRlc3RfNDA0KHNlbGYpOgorICAgICAgICAjIHNlbmQgUE9TVCB3aXRoIGh0dHBsaWIsIGl0IHNob3VsZCByZXR1cm4gNDA0IGhlYWRlciBhbmQKKyAgICAgICAgIyAnTm90IEZvdW5kJyBtZXNzYWdlLgorICAgICAgICBjb25uID0gaHR0cGxpYi5IVFRQQ29ubmVjdGlvbihBRERSLCBQT1JUKQorICAgICAgICBjb25uLnJlcXVlc3QoJ1BPU1QnLCAnL3RoaXMtaXMtbm90LXZhbGlkJykKKyAgICAgICAgcmVzcG9uc2UgPSBjb25uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgY29ubi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXMsIDQwNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5yZWFzb24sICdOb3QgRm91bmQnKQorCisgICAgZGVmIHRlc3RfaW50cm9zcGVjdGlvbjEoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQorICAgICAgICAgICAgbWV0aCA9IHAuc3lzdGVtLmxpc3RNZXRob2RzKCkKKyAgICAgICAgICAgIGV4cGVjdGVkX21ldGhvZHMgPSBzZXQoWydwb3cnLCAnZGl2JywgJ215X2Z1bmN0aW9uJywgJ2FkZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtLmxpc3RNZXRob2RzJywgJ3N5c3RlbS5tZXRob2RIZWxwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXN0ZW0ubWV0aG9kU2lnbmF0dXJlJywgJ3N5c3RlbS5tdWx0aWNhbGwnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KG1ldGgpLCBleHBlY3RlZF9tZXRob2RzKQorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpLCBlOgorICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKKyAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CisgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlc1xuJXMiICUgKGUsIGdldGF0dHIoZSwgImhlYWRlcnMiLCAiIikpKQorCisgICAgZGVmIHRlc3RfaW50cm9zcGVjdGlvbjIoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgdGVzdCBfbWV0aG9kSGVscCgpCisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKKyAgICAgICAgICAgIGRpdmhlbHAgPSBwLnN5c3RlbS5tZXRob2RIZWxwKCdkaXYnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZoZWxwLCAnVGhpcyBpcyB0aGUgZGl2IGZ1bmN0aW9uJykKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSwgZToKKyAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCisgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgorICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dAorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXNcbiVzIiAlIChlLCBnZXRhdHRyKGUsICJoZWFkZXJzIiwgIiIpKSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X2ludHJvc3BlY3Rpb24zKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHRlc3QgbmF0aXZlIGRvYworICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCisgICAgICAgICAgICBteWZ1bmN0aW9uID0gcC5zeXN0ZW0ubWV0aG9kSGVscCgnbXlfZnVuY3Rpb24nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChteWZ1bmN0aW9uLCAnVGhpcyBpcyBteSBmdW5jdGlvbicpCisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvciksIGU6CisgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycworICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKKyAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzXG4lcyIgJSAoZSwgZ2V0YXR0cihlLCAiaGVhZGVycyIsICIiKSkpCisKKyAgICBkZWYgdGVzdF9pbnRyb3NwZWN0aW9uNChzZWxmKToKKyAgICAgICAgIyB0aGUgU2ltcGxlWE1MUlBDU2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBzaWduYXR1cmVzLCBidXQKKyAgICAgICAgIyBhdCBsZWFzdCBjaGVjayB0aGF0IHdlIGNhbiB0cnkgbWFraW5nIHRoZSBjYWxsCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQorICAgICAgICAgICAgZGl2c2lnID0gcC5zeXN0ZW0ubWV0aG9kU2lnbmF0dXJlKCdkaXYnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZzaWcsICdzaWduYXR1cmVzIG5vdCBzdXBwb3J0ZWQnKQorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpLCBlOgorICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKKyAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CisgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlc1xuJXMiICUgKGUsIGdldGF0dHIoZSwgImhlYWRlcnMiLCAiIikpKQorCisgICAgZGVmIHRlc3RfbXVsdGljYWxsKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKKyAgICAgICAgICAgIG11bHRpY2FsbCA9IHhtbHJwY2xpYi5NdWx0aUNhbGwocCkKKyAgICAgICAgICAgIG11bHRpY2FsbC5hZGQoMiwzKQorICAgICAgICAgICAgbXVsdGljYWxsLnBvdyg2LDgpCisgICAgICAgICAgICBtdWx0aWNhbGwuZGl2KDEyNyw0MikKKyAgICAgICAgICAgIGFkZF9yZXN1bHQsIHBvd19yZXN1bHQsIGRpdl9yZXN1bHQgPSBtdWx0aWNhbGwoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRfcmVzdWx0LCAyKzMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvd19yZXN1bHQsIDYqKjgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdl9yZXN1bHQsIDEyNy8vNDIpCisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvciksIGU6CisgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycworICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKKyAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzXG4lcyIgJSAoZSwgZ2V0YXR0cihlLCAiaGVhZGVycyIsICIiKSkpCisKKyAgICBkZWYgdGVzdF9ub25fZXhpc3RpbmdfbXVsdGljYWxsKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKKyAgICAgICAgICAgIG11bHRpY2FsbCA9IHhtbHJwY2xpYi5NdWx0aUNhbGwocCkKKyAgICAgICAgICAgIG11bHRpY2FsbC50aGlzX2lzX25vdF9leGlzdHMoKQorICAgICAgICAgICAgcmVzdWx0ID0gbXVsdGljYWxsKCkKKworICAgICAgICAgICAgIyByZXN1bHQucmVzdWx0cyBjb250YWluczsKKyAgICAgICAgICAgICMgW3snZmF1bHRDb2RlJzogMSwgJ2ZhdWx0U3RyaW5nJzogJzx0eXBlIFwnZXhjZXB0aW9ucy5FeGNlcHRpb25cJz46JworICAgICAgICAgICAgIyAgICdtZXRob2QgInRoaXNfaXNfbm90X2V4aXN0cyIgaXMgbm90IHN1cHBvcnRlZCc+fV0KKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQucmVzdWx0c1swXVsnZmF1bHRDb2RlJ10sIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5yZXN1bHRzWzBdWydmYXVsdFN0cmluZyddLAorICAgICAgICAgICAgICAgICc8dHlwZSBcJ2V4Y2VwdGlvbnMuRXhjZXB0aW9uXCc+Om1ldGhvZCAidGhpc19pc19ub3RfZXhpc3RzIiAnCisgICAgICAgICAgICAgICAgJ2lzIG5vdCBzdXBwb3J0ZWQnKQorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpLCBlOgorICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKKyAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CisgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlc1xuJXMiICUgKGUsIGdldGF0dHIoZSwgImhlYWRlcnMiLCAiIikpKQorCisgICAgZGVmIHRlc3RfZG90dGVkX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgIyBSYWlzZXMgYW4gQXR0cmlidXRlRXJyb3IgYmVjYXVzZSBwcml2YXRlIG1ldGhvZHMgYXJlIG5vdCBhbGxvd2VkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLnJlc29sdmVfZG90dGVkX2F0dHJpYnV0ZSwgc3RyLCAnX19hZGQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShTaW1wbGVYTUxSUENTZXJ2ZXIucmVzb2x2ZV9kb3R0ZWRfYXR0cmlidXRlKHN0ciwgJ3RpdGxlJykpCisgICAgICAgICMgR2V0IHRoZSB0ZXN0IHRvIHJ1biBmYXN0ZXIgYnkgc2VuZGluZyBhIHJlcXVlc3Qgd2l0aCB0ZXN0X3NpbXBsZTEuCisgICAgICAgICMgVGhpcyBhdm9pZHMgd2FpdGluZyBmb3IgdGhlIHNvY2tldCB0aW1lb3V0LgorICAgICAgICBzZWxmLnRlc3Rfc2ltcGxlMSgpCisKKyAgICBkZWYgdGVzdF9wYXJ0aWFsX3Bvc3Qoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBhIHBhcnRpYWwgUE9TVCBkb2Vzbid0IG1ha2UgdGhlIHNlcnZlciBsb29wOiBpc3N1ZSAjMTQwMDEuCisgICAgICAgIGNvbm4gPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKEFERFIsIFBPUlQpCisgICAgICAgIGNvbm4ucmVxdWVzdCgnUE9TVCcsICcvUlBDMiBIVFRQLzEuMFxyXG5Db250ZW50LUxlbmd0aDogMTAwXHJcblxyXG5ieWUnKQorICAgICAgICBjb25uLmNsb3NlKCkKKworY2xhc3MgTXVsdGlQYXRoU2VydmVyVGVzdENhc2UoQmFzZVNlcnZlclRlc3RDYXNlKToKKyAgICB0aHJlYWRGdW5jID0gc3RhdGljbWV0aG9kKGh0dHBfbXVsdGlfc2VydmVyKQorICAgIHJlcXVlc3RfY291bnQgPSAyCisgICAgZGVmIHRlc3RfcGF0aDEoc2VsZik6CisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKyIvZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWxycGNsaWIuRmF1bHQsIHAuYWRkLCA2LCA4KQorICAgIGRlZiB0ZXN0X3BhdGgyKHNlbGYpOgorICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCsiL2Zvby9iYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYWRkKDYsOCksIDYrOCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1scnBjbGliLkZhdWx0LCBwLnBvdywgNiwgOCkKKworI0EgdGVzdCBjYXNlIHRoYXQgdmVyaWZpZXMgdGhhdCBhIHNlcnZlciB1c2luZyB0aGUgSFRUUC8xLjEga2VlcC1hbGl2ZSBtZWNoYW5pc20KKyNkb2VzIGluZGVlZCBzZXJ2ZSBzdWJzZXF1ZW50IHJlcXVlc3RzIG9uIHRoZSBzYW1lIGNvbm5lY3Rpb24KK2NsYXNzIEJhc2VLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZShCYXNlU2VydmVyVGVzdENhc2UpOgorICAgICNhIHJlcXVlc3QgaGFuZGxlciB0aGF0IHN1cHBvcnRzIGtlZXAtYWxpdmUgYW5kIGxvZ3MgcmVxdWVzdHMgaW50byBhCisgICAgI2NsYXNzIHZhcmlhYmxlCisgICAgY2xhc3MgUmVxdWVzdEhhbmRsZXIoU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyKToKKyAgICAgICAgcGFyZW50Q2xhc3MgPSBTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIKKyAgICAgICAgcHJvdG9jb2xfdmVyc2lvbiA9ICdIVFRQLzEuMScKKyAgICAgICAgbXlSZXF1ZXN0cyA9IFtdCisgICAgICAgIGRlZiBoYW5kbGUoc2VsZik6CisgICAgICAgICAgICBzZWxmLm15UmVxdWVzdHMuYXBwZW5kKFtdKQorICAgICAgICAgICAgc2VsZi5yZXFpZHggPSBsZW4oc2VsZi5teVJlcXVlc3RzKS0xCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnRDbGFzcy5oYW5kbGUoc2VsZikKKyAgICAgICAgZGVmIGhhbmRsZV9vbmVfcmVxdWVzdChzZWxmKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYucGFyZW50Q2xhc3MuaGFuZGxlX29uZV9yZXF1ZXN0KHNlbGYpCisgICAgICAgICAgICBzZWxmLm15UmVxdWVzdHNbc2VsZi5yZXFpZHhdLmFwcGVuZChzZWxmLnJhd19yZXF1ZXN0bGluZSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIHJlcXVlc3RIYW5kbGVyID0gUmVxdWVzdEhhbmRsZXIKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICNjbGVhciByZXF1ZXN0IGxvZworICAgICAgICBzZWxmLlJlcXVlc3RIYW5kbGVyLm15UmVxdWVzdHMgPSBbXQorICAgICAgICByZXR1cm4gQmFzZVNlcnZlclRlc3RDYXNlLnNldFVwKHNlbGYpCisKKyNBIHRlc3QgY2FzZSB0aGF0IHZlcmlmaWVzIHRoYXQgYSBzZXJ2ZXIgdXNpbmcgdGhlIEhUVFAvMS4xIGtlZXAtYWxpdmUgbWVjaGFuaXNtCisjZG9lcyBpbmRlZWQgc2VydmUgc3Vic2VxdWVudCByZXF1ZXN0cyBvbiB0aGUgc2FtZSBjb25uZWN0aW9uCitjbGFzcyBLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTEoQmFzZUtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQorICAgICAgICAjZG8gdGhyZWUgcmVxdWVzdHMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisKKyAgICAgICAgI3RoZXkgc2hvdWxkIGhhdmUgYWxsIGJlZW4gaGFuZGxlZCBieSBhIHNpbmdsZSByZXF1ZXN0IGhhbmRsZXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5SZXF1ZXN0SGFuZGxlci5teVJlcXVlc3RzKSwgMSkKKworICAgICAgICAjY2hlY2sgdGhhdCB3ZSBkaWQgYXQgbGVhc3QgdHdvICh0aGUgdGhpcmQgbWF5IGJlIHBlbmRpbmcgYXBwZW5kCisgICAgICAgICNkdWUgdG8gdGhyZWFkIHNjaGVkdWxpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihzZWxmLlJlcXVlc3RIYW5kbGVyLm15UmVxdWVzdHNbLTFdKSwgMikKKworI3Rlc3Qgc3BlY2lhbCBhdHRyaWJ1dGUgYWNjZXNzIG9uIHRoZSBzZXJ2ZXJwcm94eSwgdGhyb3VnaCB0aGUgX19jYWxsX18KKyNmdW5jdGlvbi4KK2NsYXNzIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMihCYXNlS2VlcGFsaXZlU2VydmVyVGVzdENhc2UpOgorICAgICNhc2sgZm9yIHR3byBrZWVwYWxpdmUgcmVxdWVzdHMgdG8gYmUgaGFuZGxlZC4KKyAgICByZXF1ZXN0X2NvdW50PTIKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKKyAgICAgICAgI2RvIHNvbWUgcmVxdWVzdHMgd2l0aCBjbG9zZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgcCgiY2xvc2UiKSgpICN0aGlzIHNob3VsZCB0cmlnZ2VyIGEgbmV3IGtlZXAtYWxpdmUgcmVxdWVzdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorCisgICAgICAgICN0aGV5IHNob3VsZCBoYXZlIGFsbCBiZWVuIHR3byByZXF1ZXN0IGhhbmRsZXJzLCBlYWNoIGhhdmluZyBsb2dnZWQgYXQgbGVhc3QKKyAgICAgICAgI3R3byBjb21wbGV0ZSByZXF1ZXN0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLlJlcXVlc3RIYW5kbGVyLm15UmVxdWVzdHMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChsZW4oc2VsZi5SZXF1ZXN0SGFuZGxlci5teVJlcXVlc3RzWy0xXSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihzZWxmLlJlcXVlc3RIYW5kbGVyLm15UmVxdWVzdHNbLTJdKSwgMikKKworICAgIGRlZiB0ZXN0X3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCisgICAgICAgICNkbyBzb21lIHJlcXVlc3RzIHdpdGggY2xvc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgcCgidHJhbnNwb3J0IikuY2xvc2UoKSAjc2FtZSBhcyBhYm92ZSwgcmVhbGx5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuUmVxdWVzdEhhbmRsZXIubXlSZXF1ZXN0cyksIDIpCisKKyNBIHRlc3QgY2FzZSB0aGF0IHZlcmlmaWVzIHRoYXQgZ3ppcCBlbmNvZGluZyB3b3JrcyBpbiBib3RoIGRpcmVjdGlvbnMKKyMoZm9yIGEgcmVxdWVzdCBhbmQgdGhlIHJlc3BvbnNlKQorY2xhc3MgR3ppcFNlcnZlclRlc3RDYXNlKEJhc2VTZXJ2ZXJUZXN0Q2FzZSk6CisgICAgI2EgcmVxdWVzdCBoYW5kbGVyIHRoYXQgc3VwcG9ydHMga2VlcC1hbGl2ZSBhbmQgbG9ncyByZXF1ZXN0cyBpbnRvIGEKKyAgICAjY2xhc3MgdmFyaWFibGUKKyAgICBjbGFzcyBSZXF1ZXN0SGFuZGxlcihTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIpOgorICAgICAgICBwYXJlbnRDbGFzcyA9IFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcgorICAgICAgICBwcm90b2NvbF92ZXJzaW9uID0gJ0hUVFAvMS4xJworCisgICAgICAgIGRlZiBkb19QT1NUKHNlbGYpOgorICAgICAgICAgICAgI3N0b3JlIGNvbnRlbnQgb2YgbGFzdCByZXF1ZXN0IGluIGNsYXNzCisgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5jb250ZW50X2xlbmd0aCA9IGludChzZWxmLmhlYWRlcnNbImNvbnRlbnQtbGVuZ3RoIl0pCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnRDbGFzcy5kb19QT1NUKHNlbGYpCisgICAgcmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlcgorCisgICAgY2xhc3MgVHJhbnNwb3J0KHhtbHJwY2xpYi5UcmFuc3BvcnQpOgorICAgICAgICAjY3VzdG9tIHRyYW5zcG9ydCwgc3RvcmVzIHRoZSByZXNwb25zZSBsZW5ndGggZm9yIG91ciBwZXJ1c2FsCisgICAgICAgIGZha2VfZ3ppcCA9IEZhbHNlCisgICAgICAgIGRlZiBwYXJzZV9yZXNwb25zZShzZWxmLCByZXNwb25zZSk6CisgICAgICAgICAgICBzZWxmLnJlc3BvbnNlX2xlbmd0aD1pbnQocmVzcG9uc2UuZ2V0aGVhZGVyKCJjb250ZW50LWxlbmd0aCIsIDApKQorICAgICAgICAgICAgcmV0dXJuIHhtbHJwY2xpYi5UcmFuc3BvcnQucGFyc2VfcmVzcG9uc2Uoc2VsZiwgcmVzcG9uc2UpCisKKyAgICAgICAgZGVmIHNlbmRfY29udGVudChzZWxmLCBjb25uZWN0aW9uLCBib2R5KToKKyAgICAgICAgICAgIGlmIHNlbGYuZmFrZV9nemlwOgorICAgICAgICAgICAgICAgICNhZGQgYSBsb25lIGd6aXAgaGVhZGVyIHRvIGluZHVjZSBkZWNvZGUgZXJyb3IgcmVtb3RlbHkKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnB1dGhlYWRlcigiQ29udGVudC1FbmNvZGluZyIsICJnemlwIikKKyAgICAgICAgICAgIHJldHVybiB4bWxycGNsaWIuVHJhbnNwb3J0LnNlbmRfY29udGVudChzZWxmLCBjb25uZWN0aW9uLCBib2R5KQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBCYXNlU2VydmVyVGVzdENhc2Uuc2V0VXAoc2VsZikKKworICAgIGRlZiB0ZXN0X2d6aXBfcmVxdWVzdChzZWxmKToKKyAgICAgICAgdCA9IHNlbGYuVHJhbnNwb3J0KCkKKyAgICAgICAgdC5lbmNvZGVfdGhyZXNob2xkID0gTm9uZQorICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCwgdHJhbnNwb3J0PXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgYSA9IHNlbGYuUmVxdWVzdEhhbmRsZXIuY29udGVudF9sZW5ndGgKKyAgICAgICAgdC5lbmNvZGVfdGhyZXNob2xkID0gMCAjdHVybiBvbiByZXF1ZXN0IGVuY29kaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgYiA9IHNlbGYuUmVxdWVzdEhhbmRsZXIuY29udGVudF9sZW5ndGgKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGE+YikKKworICAgIGRlZiB0ZXN0X2JhZF9nemlwX3JlcXVlc3Qoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLlRyYW5zcG9ydCgpCisgICAgICAgIHQuZW5jb2RlX3RocmVzaG9sZCA9IE5vbmUKKyAgICAgICAgdC5mYWtlX2d6aXAgPSBUcnVlCisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMLCB0cmFuc3BvcnQ9dCkKKyAgICAgICAgY20gPSBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZS5jb21waWxlKHIiXGI0MDBcYiIpKQorICAgICAgICB3aXRoIGNtOgorICAgICAgICAgICAgcC5wb3coNiwgOCkKKworICAgIGRlZiB0ZXN0X2dzaXBfcmVzcG9uc2Uoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLlRyYW5zcG9ydCgpCisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMLCB0cmFuc3BvcnQ9dCkKKyAgICAgICAgb2xkID0gc2VsZi5yZXF1ZXN0SGFuZGxlci5lbmNvZGVfdGhyZXNob2xkCisgICAgICAgIHNlbGYucmVxdWVzdEhhbmRsZXIuZW5jb2RlX3RocmVzaG9sZCA9IE5vbmUgI25vIGVuY29kaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgYSA9IHQucmVzcG9uc2VfbGVuZ3RoCisgICAgICAgIHNlbGYucmVxdWVzdEhhbmRsZXIuZW5jb2RlX3RocmVzaG9sZCA9IDAgI2Fsd2F5cyBlbmNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBiID0gdC5yZXNwb25zZV9sZW5ndGgKKyAgICAgICAgc2VsZi5yZXF1ZXN0SGFuZGxlci5lbmNvZGVfdGhyZXNob2xkID0gb2xkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhPmIpCisKKyNUZXN0IHNwZWNpYWwgYXR0cmlidXRlcyBvZiB0aGUgU2VydmVyUHJveHkgb2JqZWN0CitjbGFzcyBTZXJ2ZXJQcm94eVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLnNldFVwKHNlbGYpCisgICAgICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgICAgIHNlbGYudXJsID0gVVJMCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFdpdGhvdXQgdGhyZWFkaW5nLCBodHRwX3NlcnZlcigpIGFuZCBodHRwX211bHRpX3NlcnZlcigpIHdpbGwgbm90CisgICAgICAgICAgICAjIGJlIGV4ZWN1dGVkIGFuZCBVUkwgaXMgc3RpbGwgZXF1YWwgdG8gTm9uZS4gJ2h0dHA6Ly8nIGlzIGEganVzdAorICAgICAgICAgICAgIyBlbm91Z2ggdG8gY2hvb3NlIHRoZSBzY2hlbWUgKEhUVFApCisgICAgICAgICAgICBzZWxmLnVybCA9ICdodHRwOi8vJworCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoc2VsZi51cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgnY2xvc2UnKSgpLCBOb25lKQorCisgICAgZGVmIHRlc3RfdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICB0ID0geG1scnBjbGliLlRyYW5zcG9ydCgpCisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoc2VsZi51cmwsIHRyYW5zcG9ydD10KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoJ3RyYW5zcG9ydCcpLCB0KQorCisjIFRoaXMgaXMgYSBjb250cml2ZWQgd2F5IHRvIG1ha2UgYSBmYWlsdXJlIG9jY3VyIG9uIHRoZSBzZXJ2ZXIgc2lkZQorIyBpbiBvcmRlciB0byB0ZXN0IHRoZSBfc2VuZF90cmFjZWJhY2tfaGVhZGVyIGZsYWcgb24gdGhlIHNlcnZlcgorY2xhc3MgRmFpbGluZ01lc3NhZ2VDbGFzcyhtaW1ldG9vbHMuTWVzc2FnZSk6CisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIGtleSA9IGtleS5sb3dlcigpCisgICAgICAgIGlmIGtleSA9PSAnY29udGVudC1sZW5ndGgnOgorICAgICAgICAgICAgcmV0dXJuICdJIGFtIGJyb2tlbicKKyAgICAgICAgcmV0dXJuIG1pbWV0b29scy5NZXNzYWdlLl9fZ2V0aXRlbV9fKHNlbGYsIGtleSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgRmFpbGluZ1NlcnZlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgIyBzdGFydCBzZXJ2ZXIgdGhyZWFkIHRvIGhhbmRsZSByZXF1ZXN0cworICAgICAgICBzZXJ2X2FyZ3MgPSAoc2VsZi5ldnQsIDEpCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWh0dHBfc2VydmVyLCBhcmdzPXNlcnZfYXJncykuc3RhcnQoKQorCisgICAgICAgICMgd2FpdCBmb3IgdGhlIHNlcnZlciB0byBiZSByZWFkeQorICAgICAgICBzZWxmLmV2dC53YWl0KCkKKyAgICAgICAgc2VsZi5ldnQuY2xlYXIoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIHdhaXQgb24gdGhlIHNlcnZlciB0aHJlYWQgdG8gdGVybWluYXRlCisgICAgICAgIHNlbGYuZXZ0LndhaXQoKQorICAgICAgICAjIHJlc2V0IGZsYWcKKyAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlci5fc2VuZF90cmFjZWJhY2tfaGVhZGVyID0gRmFsc2UKKyAgICAgICAgIyByZXNldCBtZXNzYWdlIGNsYXNzCisgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5NZXNzYWdlQ2xhc3MgPSBtaW1ldG9vbHMuTWVzc2FnZQorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCBmbGFnIGlzIGZhbHNlIGJ5IGRlZmF1bHQKKyAgICAgICAgZmxhZ3ZhbCA9IFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIuX3NlbmRfdHJhY2ViYWNrX2hlYWRlcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsYWd2YWwsIEZhbHNlKQorCisgICAgICAgICMgZW5hYmxlIHRyYWNlYmFjayByZXBvcnRpbmcKKyAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlci5fc2VuZF90cmFjZWJhY2tfaGVhZGVyID0gVHJ1ZQorCisgICAgICAgICMgdGVzdCBhIGNhbGwgdGhhdCBzaG91bGRuJ3QgZmFpbCBqdXN0IGFzIGEgc21va2UgdGVzdAorICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSwgZToKKyAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCisgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgorICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dAorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXNcbiVzIiAlIChlLCBnZXRhdHRyKGUsICJoZWFkZXJzIiwgIiIpKSkKKworICAgIGRlZiB0ZXN0X2ZhaWxfbm9faW5mbyhzZWxmKToKKyAgICAgICAgIyB1c2UgdGhlIGJyb2tlbiBtZXNzYWdlIGNsYXNzCisgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlci5NZXNzYWdlQ2xhc3MgPSBGYWlsaW5nTWVzc2FnZUNsYXNzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCisgICAgICAgICAgICBwLnBvdyg2LDgpCisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvciksIGU6CisgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycworICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKSBhbmQgaGFzYXR0cihlLCAiaGVhZGVycyIpOgorICAgICAgICAgICAgICAgICMgVGhlIHR3byBzZXJ2ZXItc2lkZSBlcnJvciBoZWFkZXJzIHNob3VsZG4ndCBiZSBzZW50IGJhY2sgaW4gdGhpcyBjYXNlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuaGVhZGVycy5nZXQoIlgtZXhjZXB0aW9uIikgaXMgTm9uZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5oZWFkZXJzLmdldCgiWC10cmFjZWJhY2siKSBpcyBOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdQcm90b2NvbEVycm9yIG5vdCByYWlzZWQnKQorCisgICAgZGVmIHRlc3RfZmFpbF93aXRoX2luZm8oc2VsZik6CisgICAgICAgICMgdXNlIHRoZSBicm9rZW4gbWVzc2FnZSBjbGFzcworICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIuTWVzc2FnZUNsYXNzID0gRmFpbGluZ01lc3NhZ2VDbGFzcworCisgICAgICAgICMgQ2hlY2sgdGhhdCBlcnJvcnMgaW4gdGhlIHNlcnZlciBzZW5kIGJhY2sgZXhjZXB0aW9uL3RyYWNlYmFjaworICAgICAgICAjIGluZm8gd2hlbiBmbGFnIGlzIHNldAorICAgICAgICBTaW1wbGVYTUxSUENTZXJ2ZXIuU2ltcGxlWE1MUlBDU2VydmVyLl9zZW5kX3RyYWNlYmFja19oZWFkZXIgPSBUcnVlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCisgICAgICAgICAgICBwLnBvdyg2LDgpCisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvciksIGU6CisgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycworICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKSBhbmQgaGFzYXR0cihlLCAiaGVhZGVycyIpOgorICAgICAgICAgICAgICAgICMgV2Ugc2hvdWxkIGdldCBlcnJvciBpbmZvIGluIHRoZSByZXNwb25zZQorICAgICAgICAgICAgICAgIGV4cGVjdGVkX2VyciA9ICJpbnZhbGlkIGxpdGVyYWwgZm9yIGludCgpIHdpdGggYmFzZSAxMDogJ0kgYW0gYnJva2VuJyIKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuaGVhZGVycy5nZXQoIngtZXhjZXB0aW9uIiksIGV4cGVjdGVkX2VycikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5oZWFkZXJzLmdldCgieC10cmFjZWJhY2siKSBpcyBub3QgTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnUHJvdG9jb2xFcnJvciBub3QgcmFpc2VkJykKKworY2xhc3MgQ0dJSGFuZGxlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY2dpID0gU2ltcGxlWE1MUlBDU2VydmVyLkNHSVhNTFJQQ1JlcXVlc3RIYW5kbGVyKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jZ2kgPSBOb25lCisKKyAgICBkZWYgdGVzdF9jZ2lfZ2V0KHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52WydSRVFVRVNUX01FVEhPRCddID0gJ0dFVCcKKyAgICAgICAgICAgICMgaWYgdGhlIG1ldGhvZCBpcyBHRVQgYW5kIG5vIHJlcXVlc3RfdGV4dCBpcyBnaXZlbiwgaXQgcnVucyBoYW5kbGVfZ2V0CisgICAgICAgICAgICAjIGdldCBzeXNvdXQgb3V0cHV0CisgICAgICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBkYXRhX291dDoKKyAgICAgICAgICAgICAgICBzZWxmLmNnaS5oYW5kbGVfcmVxdWVzdCgpCisKKyAgICAgICAgICAgICMgcGFyc2UgU3RhdHVzIGhlYWRlcgorICAgICAgICAgICAgZGF0YV9vdXQuc2VlaygwKQorICAgICAgICAgICAgaGFuZGxlID0gZGF0YV9vdXQucmVhZCgpCisgICAgICAgICAgICBzdGF0dXMgPSBoYW5kbGUuc3BsaXQoKVsxXQorICAgICAgICAgICAgbWVzc2FnZSA9ICcgJy5qb2luKGhhbmRsZS5zcGxpdCgpWzI6NF0pCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAnNDAwJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZSwgJ0JhZCBSZXF1ZXN0JykKKworCisgICAgZGVmIHRlc3RfY2dpX3htbHJwY19yZXNwb25zZShzZWxmKToKKyAgICAgICAgZGF0YSA9ICIiIjw/eG1sIHZlcnNpb249JzEuMCc/PgorICAgICAgICA8bWV0aG9kQ2FsbD4KKyAgICAgICAgICAgIDxtZXRob2ROYW1lPnRlc3RfbWV0aG9kPC9tZXRob2ROYW1lPgorICAgICAgICAgICAgPHBhcmFtcz4KKyAgICAgICAgICAgICAgICA8cGFyYW0+CisgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT48c3RyaW5nPmZvbzwvc3RyaW5nPjwvdmFsdWU+CisgICAgICAgICAgICAgICAgPC9wYXJhbT4KKyAgICAgICAgICAgICAgICA8cGFyYW0+CisgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT48c3RyaW5nPmJhcjwvc3RyaW5nPjwvdmFsdWU+CisgICAgICAgICAgICAgICAgPC9wYXJhbT4KKyAgICAgICAgICAgIDwvcGFyYW1zPgorICAgICAgICA8L21ldGhvZENhbGw+CisgICAgICAgICIiIgorCisgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnYsIFwKKyAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgZGF0YV9vdXQsIFwKKyAgICAgICAgICAgICB0ZXN0X3N1cHBvcnQuY2FwdHVyZWRfc3RkaW4oKSBhcyBkYXRhX2luOgorICAgICAgICAgICAgZGF0YV9pbi53cml0ZShkYXRhKQorICAgICAgICAgICAgZGF0YV9pbi5zZWVrKDApCisgICAgICAgICAgICBlbnZbJ0NPTlRFTlRfTEVOR1RIJ10gPSBzdHIobGVuKGRhdGEpKQorICAgICAgICAgICAgc2VsZi5jZ2kuaGFuZGxlX3JlcXVlc3QoKQorICAgICAgICBkYXRhX291dC5zZWVrKDApCisKKyAgICAgICAgIyB3aWxsIHJlc3BvbmQgZXhjZXB0aW9uLCBpZiBzbywgb3VyIGdvYWwgaXMgYWNoaWV2ZWQgOykKKyAgICAgICAgaGFuZGxlID0gZGF0YV9vdXQucmVhZCgpCisKKyAgICAgICAgIyBzdGFydCB3aXRoIDQ0dGggY2hhciBzbyBhcyBub3QgdG8gZ2V0IGh0dHAgaGVhZGVyLCB3ZSBqdXN0IG5lZWQgb25seSB4bWwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeG1scnBjbGliLkZhdWx0LCB4bWxycGNsaWIubG9hZHMsIGhhbmRsZVs0NDpdKQorCisgICAgICAgICMgQWxzbyB0ZXN0IHRoZSBjb250ZW50LWxlbmd0aCByZXR1cm5lZCAgYnkgaGFuZGxlX3JlcXVlc3QKKyAgICAgICAgIyBVc2luZyB0aGUgc2FtZSB0ZXN0IG1ldGhvZCBpbm9yZGVyIHRvIGF2b2lkIGFsbCB0aGUgZGF0YXBhc3NpbmcKKyAgICAgICAgIyBib2lsZXJwbGF0ZSBjb2RlLgorICAgICAgICAjIFRlc3QgZm9yIGJ1ZzogaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTUwNDAKKworICAgICAgICBjb250ZW50ID0gaGFuZGxlW2hhbmRsZS5maW5kKCI8P3htbCIpOl0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgaW50KHJlLnNlYXJjaCgnQ29udGVudC1MZW5ndGg6IChcZCspJywgaGFuZGxlKS5ncm91cCgxKSksCisgICAgICAgICAgICBsZW4oY29udGVudCkpCisKKworY2xhc3MgRmFrZVNvY2tldDoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5kYXRhID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorCisgICAgZGVmIHNlbmQoc2VsZiwgYnVmKToKKyAgICAgICAgc2VsZi5kYXRhLndyaXRlKGJ1ZikKKyAgICAgICAgcmV0dXJuIGxlbihidWYpCisKKyAgICBkZWYgc2VuZGFsbChzZWxmLCBidWYpOgorICAgICAgICBzZWxmLmRhdGEud3JpdGUoYnVmKQorCisgICAgZGVmIGdldHZhbHVlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kYXRhLmdldHZhbHVlKCkKKworICAgIGRlZiBtYWtlZmlsZShzZWxmLCB4PSdyJywgeT0tMSk6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBwYXNzCisKK2NsYXNzIEZha2VUcmFuc3BvcnQoeG1scnBjbGliLlRyYW5zcG9ydCk6CisgICAgIiIiQSBUcmFuc3BvcnQgaW5zdGFuY2UgdGhhdCByZWNvcmRzIGluc3RlYWQgb2Ygc2VuZGluZyBhIHJlcXVlc3QuCisKKyAgICBUaGlzIGNsYXNzIHJlcGxhY2VzIHRoZSBhY3R1YWwgc29ja2V0IHVzZWQgYnkgaHR0cGxpYiB3aXRoIGEKKyAgICBGYWtlU29ja2V0IG9iamVjdCB0aGF0IHJlY29yZHMgdGhlIHJlcXVlc3QuICBJdCBkb2Vzbid0IHByb3ZpZGUgYQorICAgIHJlc3BvbnNlLgorICAgICIiIgorCisgICAgZGVmIG1ha2VfY29ubmVjdGlvbihzZWxmLCBob3N0KToKKyAgICAgICAgY29ubiA9IHhtbHJwY2xpYi5UcmFuc3BvcnQubWFrZV9jb25uZWN0aW9uKHNlbGYsIGhvc3QpCisgICAgICAgIGNvbm4uc29jayA9IHNlbGYuZmFrZV9zb2NrZXQgPSBGYWtlU29ja2V0KCkKKyAgICAgICAgcmV0dXJuIGNvbm4KKworY2xhc3MgVHJhbnNwb3J0U3ViY2xhc3NUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgaXNzdWVfcmVxdWVzdChzZWxmLCB0cmFuc3BvcnRfY2xhc3MpOgorICAgICAgICAiIiJSZXR1cm4gYW4gSFRUUCByZXF1ZXN0IG1hZGUgdmlhIHRyYW5zcG9ydF9jbGFzcy4iIiIKKyAgICAgICAgdHJhbnNwb3J0ID0gdHJhbnNwb3J0X2NsYXNzKCkKKyAgICAgICAgcHJveHkgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoImh0dHA6Ly9leGFtcGxlLmNvbS8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQ9dHJhbnNwb3J0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm94eS5wb3coNiwgOCkKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiB0cmFuc3BvcnQuZmFrZV9zb2NrZXQuZ2V0dmFsdWUoKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHRlc3RfY3VzdG9tX3VzZXJfYWdlbnQoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3RUcmFuc3BvcnQoRmFrZVRyYW5zcG9ydCk6CisKKyAgICAgICAgICAgIGRlZiBzZW5kX3VzZXJfYWdlbnQoc2VsZiwgY29ubik6CisgICAgICAgICAgICAgICAgeG1scnBjbGliLlRyYW5zcG9ydC5zZW5kX3VzZXJfYWdlbnQoc2VsZiwgY29ubikKKyAgICAgICAgICAgICAgICBjb25uLnB1dGhlYWRlcigiWC1UZXN0IiwgInRlc3RfY3VzdG9tX3VzZXJfYWdlbnQiKQorCisgICAgICAgIHJlcSA9IHNlbGYuaXNzdWVfcmVxdWVzdChUZXN0VHJhbnNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJYLVRlc3Q6IHRlc3RfY3VzdG9tX3VzZXJfYWdlbnRcclxuIiwgcmVxKQorCisgICAgZGVmIHRlc3Rfc2VuZF9ob3N0KHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0VHJhbnNwb3J0KEZha2VUcmFuc3BvcnQpOgorCisgICAgICAgICAgICBkZWYgc2VuZF9ob3N0KHNlbGYsIGNvbm4sIGhvc3QpOgorICAgICAgICAgICAgICAgIHhtbHJwY2xpYi5UcmFuc3BvcnQuc2VuZF9ob3N0KHNlbGYsIGNvbm4sIGhvc3QpCisgICAgICAgICAgICAgICAgY29ubi5wdXRoZWFkZXIoIlgtVGVzdCIsICJ0ZXN0X3NlbmRfaG9zdCIpCisKKyAgICAgICAgcmVxID0gc2VsZi5pc3N1ZV9yZXF1ZXN0KFRlc3RUcmFuc3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlgtVGVzdDogdGVzdF9zZW5kX2hvc3RcclxuIiwgcmVxKQorCisgICAgZGVmIHRlc3Rfc2VuZF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0VHJhbnNwb3J0KEZha2VUcmFuc3BvcnQpOgorCisgICAgICAgICAgICBkZWYgc2VuZF9yZXF1ZXN0KHNlbGYsIGNvbm4sIHVybCwgYm9keSk6CisgICAgICAgICAgICAgICAgeG1scnBjbGliLlRyYW5zcG9ydC5zZW5kX3JlcXVlc3Qoc2VsZiwgY29ubiwgdXJsLCBib2R5KQorICAgICAgICAgICAgICAgIGNvbm4ucHV0aGVhZGVyKCJYLVRlc3QiLCAidGVzdF9zZW5kX3JlcXVlc3QiKQorCisgICAgICAgIHJlcSA9IHNlbGYuaXNzdWVfcmVxdWVzdChUZXN0VHJhbnNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJYLVRlc3Q6IHRlc3Rfc2VuZF9yZXF1ZXN0XHJcbiIsIHJlcSkKKworICAgIGRlZiB0ZXN0X3NlbmRfY29udGVudChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdFRyYW5zcG9ydChGYWtlVHJhbnNwb3J0KToKKworICAgICAgICAgICAgZGVmIHNlbmRfY29udGVudChzZWxmLCBjb25uLCBib2R5KToKKyAgICAgICAgICAgICAgICBjb25uLnB1dGhlYWRlcigiWC1UZXN0IiwgInRlc3Rfc2VuZF9jb250ZW50IikKKyAgICAgICAgICAgICAgICB4bWxycGNsaWIuVHJhbnNwb3J0LnNlbmRfY29udGVudChzZWxmLCBjb25uLCBib2R5KQorCisgICAgICAgIHJlcSA9IHNlbGYuaXNzdWVfcmVxdWVzdChUZXN0VHJhbnNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJYLVRlc3Q6IHRlc3Rfc2VuZF9jb250ZW50XHJcbiIsIHJlcSkKKworQHRlc3Rfc3VwcG9ydC5yZWFwX3RocmVhZHMKK2RlZiB0ZXN0X21haW4oKToKKyAgICB4bWxycGNfdGVzdHMgPSBbWE1MUlBDVGVzdENhc2UsIEhlbHBlclRlc3RDYXNlLCBEYXRlVGltZVRlc3RDYXNlLAorICAgICAgICAgQmluYXJ5VGVzdENhc2UsIEZhdWx0VGVzdENhc2UsIFRyYW5zcG9ydFN1YmNsYXNzVGVzdENhc2VdCisgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChTaW1wbGVTZXJ2ZXJUZXN0Q2FzZSkKKyAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMSkKKyAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMikKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBnemlwCisgICAgICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoR3ppcFNlcnZlclRlc3RDYXNlKQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcGFzcyAjZ3ppcCBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVpbGQKKyAgICB4bWxycGNfdGVzdHMuYXBwZW5kKE11bHRpUGF0aFNlcnZlclRlc3RDYXNlKQorICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoU2VydmVyUHJveHlUZXN0Q2FzZSkKKyAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEZhaWxpbmdTZXJ2ZXJUZXN0Q2FzZSkKKyAgICB4bWxycGNfdGVzdHMuYXBwZW5kKENHSUhhbmRsZXJUZXN0Q2FzZSkKKworICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnhtbHJwY190ZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeHBpY2tsZS5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3hwaWNrbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMzYTMzZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3hwaWNrbGUucHkKQEAgLTAsMCArMSwyNjQgQEAKKyMgdGVzdF9waWNrbGUgZHVtcHMgYW5kIGxvYWRzIHBpY2tsZXMgdmlhIHBpY2tsZS5weS4KKyMgdGVzdF9jcGlja2xlIGRvZXMgdGhlIHNhbWUsIGJ1dCB2aWEgdGhlIGNQaWNrbGUgbW9kdWxlLgorIyBUaGlzIHRlc3QgY292ZXJzIHRoZSBvdGhlciB0d28gY2FzZXMsIG1ha2luZyBwaWNrbGVzIHdpdGggb25lIG1vZHVsZSBhbmQKKyMgbG9hZGluZyB0aGVtIHZpYSB0aGUgb3RoZXIuIEl0IGFsc28gdGVzdHMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aAorIyBwcmV2aW91cyB2ZXJzaW9uIG9mIFB5dGhvbiBieSBib3VuY2luZyBwaWNrbGVkIG9iamVjdHMgdGhyb3VnaCBQeXRob24gMi40CisjIGFuZCBQeXRob24gMi41IHJ1bm5pbmcgdGhpcyBmaWxlLgorCitpbXBvcnQgY1BpY2tsZQoraW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHBpY2tsZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKKyMgTW9zdCBkaXN0cm8tc3VwcGxpZWQgUHl0aG9ucyBkb24ndCBpbmNsdWRlIHRoZSB0ZXN0cworIyBvciB0ZXN0IHN1cHBvcnQgZmlsZXMsIGFuZCBzb21lIGRvbid0IGluY2x1ZGUgYSB3YXkgdG8gZ2V0IHRoZXNlIGJhY2sgZXZlbiBpZgorIyB5b3UncmUgd2lsbCB0byBpbnN0YWxsIGV4dHJhIHBhY2thZ2VzIChsaWtlIFVidW50dSkuIERvaW5nIHRoaW5ncyBsaWtlIHRoaXMKKyMgInByb3ZpZGVzIiBhIHBpY2tsZXRlc3RlciBtb2R1bGUgZm9yIG9sZGVyIHZlcnNpb25zIG9mIFB5dGhvbiB0aGF0IG1heSBiZQorIyBpbnN0YWxsZWQgd2l0aG91dCBpdC4gTm90ZSB0aGF0IG9uZSBvdGhlciBkZXNpZ24gZm9yIHRoaXMgaW52b2x2ZXMgbWVzc2luZworIyB3aXRoIHN5cy5wYXRoLCB3aGljaCBpcyBsZXNzIHByZWNpc2UuCittb2RfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlja2xldGVzdGVyLnB5IikpCitwaWNrbGV0ZXN0ZXIgPSB0eXBlcy5Nb2R1bGVUeXBlKCJ0ZXN0LnBpY2tsZXRlc3RlciIpCitleGVjIGNvbXBpbGUob3Blbihtb2RfcGF0aCkucmVhZCgpLCBtb2RfcGF0aCwgJ2V4ZWMnKSBpbiBwaWNrbGV0ZXN0ZXIuX19kaWN0X18KK0Fic3RyYWN0UGlja2xlVGVzdHMgPSBwaWNrbGV0ZXN0ZXIuQWJzdHJhY3RQaWNrbGVUZXN0cworaWYgcGlja2xldGVzdGVyLl9fbmFtZV9fIGluIHN5cy5tb2R1bGVzOgorICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiRGlkIG5vdCBleHBlY3QgdG8gZmluZCB0ZXN0LnBpY2tsZXRlc3RlciBsb2FkZWQiKQorc3lzLm1vZHVsZXNbcGlja2xldGVzdGVyLl9fbmFtZV9fXSA9IHBpY2tsZXRlc3RlcgorCisKK2NsYXNzIER1bXBDUGlja2xlX0xvYWRQaWNrbGUoQWJzdHJhY3RQaWNrbGVUZXN0cyk6CisKKyAgICBlcnJvciA9IEtleUVycm9yCisKKyAgICBkZWYgZHVtcHMoc2VsZiwgYXJnLCBwcm90bz0wLCBmYXN0PUZhbHNlKToKKyAgICAgICAgIyBJZ25vcmUgZmFzdAorICAgICAgICByZXR1cm4gY1BpY2tsZS5kdW1wcyhhcmcsIHByb3RvKQorCisgICAgZGVmIGxvYWRzKHNlbGYsIGJ1Zik6CisgICAgICAgICMgSWdub3JlIGZhc3QKKyAgICAgICAgcmV0dXJuIHBpY2tsZS5sb2FkcyhidWYpCisKK2NsYXNzIER1bXBQaWNrbGVfTG9hZENQaWNrbGUoQWJzdHJhY3RQaWNrbGVUZXN0cyk6CisKKyAgICBlcnJvciA9IGNQaWNrbGUuQmFkUGlja2xlR2V0CisKKyAgICBkZWYgZHVtcHMoc2VsZiwgYXJnLCBwcm90bz0wLCBmYXN0PUZhbHNlKToKKyAgICAgICAgIyBJZ25vcmUgZmFzdAorICAgICAgICByZXR1cm4gcGlja2xlLmR1bXBzKGFyZywgcHJvdG8pCisKKyAgICBkZWYgbG9hZHMoc2VsZiwgYnVmKToKKyAgICAgICAgIyBJZ25vcmUgZmFzdAorICAgICAgICByZXR1cm4gY1BpY2tsZS5sb2FkcyhidWYpCisKK2RlZiBoYXZlX3B5dGhvbl92ZXJzaW9uKG5hbWUpOgorICAgICIiIkNoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIG5hbWUgaXMgYSB2YWxpZCBQeXRob24gYmluYXJ5IGFuZCBoYXMKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC4KKworICAgIFRoaXMgcmVzcGVjdHMgeW91ciBQQVRILgorCisgICAgQXJnczoKKyAgICAgICAgbmFtZTogc2hvcnQgc3RyaW5nIG5hbWUgb2YgYSBQeXRob24gYmluYXJ5IHN1Y2ggYXMgInB5dGhvbjIuNCIuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBUcnVlIGlmIHRoZSBuYW1lIGlzIHZhbGlkLCBGYWxzZSBvdGhlcndpc2UuCisgICAgIiIiCisgICAgcmV0dXJuIG9zLnN5c3RlbShuYW1lICsgIiAtYyAnaW1wb3J0IHRlc3QudGVzdF9zdXBwb3J0JyIpID09IDAKKworCitjbGFzcyBBYnN0cmFjdENvbXBhdFRlc3RzKEFic3RyYWN0UGlja2xlVGVzdHMpOgorCisgICAgbW9kdWxlID0gTm9uZQorICAgIHB5dGhvbiA9IE5vbmUKKyAgICBlcnJvciA9IE5vbmUKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHl0aG9uKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5tb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmVycm9yKQorCisgICAgZGVmIHNlbmRfdG9fd29ya2VyKHNlbGYsIHB5dGhvbiwgb2JqLCBwcm90byk6CisgICAgICAgICIiIkJvdW5jZSBhIHBpY2tsZWQgb2JqZWN0IHRocm91Z2ggYW5vdGhlciB2ZXJzaW9uIG9mIFB5dGhvbi4KKworICAgICAgICBUaGlzIHdpbGwgcGlja2xlIHRoZSBvYmplY3QsIHNlbmQgaXQgdG8gYSBjaGlsZCBwcm9jZXNzIHdoZXJlIGl0IHdpbGwgYmUKKyAgICAgICAgdW5waWNrbGVkLCB0aGVuIHJlcGlja2xlZCBhbmQgc2VudCBiYWNrIHRvIHRoZSBwYXJlbnQgcHJvY2Vzcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgcHl0aG9uOiB0aGUgbmFtZSBvZiB0aGUgUHl0aG9uIGJpbmFyeSB0byBzdGFydC4KKyAgICAgICAgICAgIG9iajogb2JqZWN0IHRvIHBpY2tsZS4KKyAgICAgICAgICAgIHByb3RvOiBwaWNrbGUgcHJvdG9jb2wgbnVtYmVyIHRvIHVzZS4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVGhlIHBpY2tsZWQgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzLgorICAgICAgICAiIiIKKyAgICAgICAgIyBQcmV2ZW50IHRoZSBzdWJwcm9jZXNzIGZyb20gcGlja2luZyB1cCBpbnZhbGlkIC5weWMgZmlsZXMuCisgICAgICAgIHRhcmdldCA9IF9fZmlsZV9fCisgICAgICAgIGlmIHRhcmdldFstMV0gaW4gKCJjIiwgIm8iKToKKyAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldFs6LTFdCisKKyAgICAgICAgZGF0YSA9IHNlbGYubW9kdWxlLmR1bXBzKChwcm90bywgb2JqKSwgcHJvdG8pCisgICAgICAgIHdvcmtlciA9IHN1YnByb2Nlc3MuUG9wZW4oW3B5dGhvbiwgdGFyZ2V0LCAid29ya2VyIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSB3b3JrZXIuY29tbXVuaWNhdGUoZGF0YSkKKyAgICAgICAgaWYgd29ya2VyLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihzdGRlcnIpCisgICAgICAgIHJldHVybiBzdGRvdXQKKworICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvPTAsIGZhc3Q9RmFsc2UpOgorICAgICAgICByZXR1cm4gc2VsZi5zZW5kX3RvX3dvcmtlcihzZWxmLnB5dGhvbiwgYXJnLCBwcm90bykKKworICAgIGRlZiBsb2FkcyhzZWxmLCBpbnB1dCk6CisgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZS5sb2FkcyhpbnB1dCkKKworICAgICMgVGhlc2UgdGVzdHMgYXJlIGRpc2FibGVkIGJlY2F1c2UgdGhleSByZXF1aXJlIHNvbWUgc3BlY2lhbCBzZXR1cAorICAgICMgb24gdGhlIHdvcmtlciB0aGF0J3MgaGFyZCB0byBrZWVwIGluIHN5bmMuCisgICAgZGVmIHRlc3RfZ2xvYmFsX2V4dDEoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2dsb2JhbF9leHQyKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9nbG9iYWxfZXh0NChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgIyBUaGlzIGlzIGEgY3V0LWRvd24gdmVyc2lvbiBvZiBwaWNrbGV0ZXN0ZXIncyB0ZXN0X2Zsb2F0LiBCYWNrd2FyZHMKKyAgICAjIGNvbXBhdGliaWxpdHkgZm9yIHRoZSB2YWx1ZXMgaW4gZm9yX2Jpbl9wcm90b3Mgd2FzIGV4cGxpY2l0bHkgYnJva2VuIGluCisgICAgIyByNjg5MDMgdG8gZml4IGEgYnVnLgorICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgorICAgICAgICBmb3JfYmluX3Byb3RvcyA9IFs0Ljk0ZS0zMjQsIDFlLTMxMF0KKyAgICAgICAgbmVnX2Zvcl9iaW5fcHJvdG9zID0gWy14IGZvciB4IGluIGZvcl9iaW5fcHJvdG9zXQorICAgICAgICB0ZXN0X3ZhbHVlcyA9IFswLjAsIDdlLTMwOCwgNi42MjZlLTM0LCAwLjEsIDAuNSwKKyAgICAgICAgICAgICAgICAgICAgICAgMy4xNCwgMjYzLjQ0NTgyMDYyMzc0MDUzLCA2LjAyMmUyMywgMWUzMF0KKyAgICAgICAgdGVzdF9wcm90bzBfdmFsdWVzID0gdGVzdF92YWx1ZXMgKyBbLXggZm9yIHggaW4gdGVzdF92YWx1ZXNdCisgICAgICAgIHRlc3RfdmFsdWVzID0gdGVzdF9wcm90bzBfdmFsdWVzICsgZm9yX2Jpbl9wcm90b3MgKyBuZWdfZm9yX2Jpbl9wcm90b3MKKworICAgICAgICBmb3IgdmFsdWUgaW4gdGVzdF9wcm90bzBfdmFsdWVzOgorICAgICAgICAgICAgcGlja2xlID0gc2VsZi5kdW1wcyh2YWx1ZSwgMCkKKyAgICAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMocGlja2xlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgZ290KQorCisgICAgICAgIGZvciBwcm90byBpbiBwaWNrbGV0ZXN0ZXIucHJvdG9jb2xzWzE6XToKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiB0ZXN0X3ZhbHVlczoKKyAgICAgICAgICAgICAgICBwaWNrbGUgPSBzZWxmLmR1bXBzKHZhbHVlLCBwcm90bykKKyAgICAgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHBpY2tsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBnb3QpCisKKyAgICAjIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdhcyBleHBsaWNpdGx5IGJyb2tlbiBpbiByNjc5MzQgdG8gZml4IGEgYnVnLgorICAgIGRlZiB0ZXN0X3VuaWNvZGVfaGlnaF9wbGFuZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgIyBUaGlzIHRlc3RzIGEgZml4IHRoYXQncyBpbiAyLjcgb25seQorICAgIGRlZiB0ZXN0X2R5bmFtaWNfY2xhc3Moc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGlmIHRlc3Rfc3VwcG9ydC5oYXZlX3VuaWNvZGU6CisgICAgICAgICMgVGhpcyBpcyBhIGN1dC1kb3duIHZlcnNpb24gb2YgcGlja2xldGVzdGVyJ3MgdGVzdF91bmljb2RlLiBCYWNrd2FyZHMKKyAgICAgICAgIyBjb21wYXRpYmlsaXR5IHdhcyBleHBsaWNpdGx5IGJyb2tlbiBpbiByNjc5MzQgdG8gZml4IGEgYnVnLgorICAgICAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgorICAgICAgICAgICAgZW5kY2FzZXMgPSBbdScnLCB1JzxcXHU+JywgdSc8XFxcdTEyMzQ+JywgdSc8XG4+JywgdSc8XFw+J10KKyAgICAgICAgICAgIGZvciBwcm90byBpbiBwaWNrbGV0ZXN0ZXIucHJvdG9jb2xzOgorICAgICAgICAgICAgICAgIGZvciB1IGluIGVuZGNhc2VzOgorICAgICAgICAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyh1LCBwcm90bykKKyAgICAgICAgICAgICAgICAgICAgdTIgPSBzZWxmLmxvYWRzKHApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIsIHUpCisKKworZGVmIHJ1bl9jb21wYXRfdGVzdChweXRob25fbmFtZSk6CisgICAgcmV0dXJuICh0ZXN0X3N1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgieHBpY2tsZSIpIGFuZAorICAgICAgICAgICAgaGF2ZV9weXRob25fdmVyc2lvbihweXRob25fbmFtZSkpCisKKworIyBUZXN0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIuNC4KK2lmIG5vdCBydW5fY29tcGF0X3Rlc3QoInB5dGhvbjIuNCIpOgorICAgIGNsYXNzIENQaWNrbGVQeXRob24yNENvbXBhdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIHBhc3MKK2Vsc2U6CisgICAgY2xhc3MgQ1BpY2tsZVB5dGhvbjI0Q29tcGF0KEFic3RyYWN0Q29tcGF0VGVzdHMpOgorCisgICAgICAgIG1vZHVsZSA9IGNQaWNrbGUKKyAgICAgICAgcHl0aG9uID0gInB5dGhvbjIuNCIKKyAgICAgICAgZXJyb3IgPSBjUGlja2xlLkJhZFBpY2tsZUdldAorCisgICAgICAgICMgRGlzYWJsZSB0aGVzZSB0ZXN0cyBmb3IgUHl0aG9uIDIuNC4gTWFraW5nIHRoZW0gcGFzcyB3b3VsZCByZXF1aXJlCisgICAgICAgICMgbm9udHJpdmlhbGx5IG1vbmtleXBhdGNoaW5nIHRoZSBwaWNrbGV0ZXN0ZXIgbW9kdWxlIGluIHRoZSB3b3JrZXIuCisgICAgICAgIGRlZiB0ZXN0X3JlZHVjZV9jYWxsc19iYXNlKHNlbGYpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGRlZiB0ZXN0X3JlZHVjZV9leF9jYWxsc19iYXNlKHNlbGYpOgorICAgICAgICAgICAgcGFzcworCitjbGFzcyBQaWNrbGVQeXRob24yNENvbXBhdChDUGlja2xlUHl0aG9uMjRDb21wYXQpOgorCisgICAgbW9kdWxlID0gcGlja2xlCisgICAgZXJyb3IgPSBLZXlFcnJvcgorCisKKyMgVGVzdCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLjUuCitpZiBub3QgcnVuX2NvbXBhdF90ZXN0KCJweXRob24yLjUiKToKKyAgICBjbGFzcyBDUGlja2xlUHl0aG9uMjVDb21wYXQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBwYXNzCitlbHNlOgorICAgIGNsYXNzIENQaWNrbGVQeXRob24yNUNvbXBhdChBYnN0cmFjdENvbXBhdFRlc3RzKToKKworICAgICAgICBtb2R1bGUgPSBjUGlja2xlCisgICAgICAgIHB5dGhvbiA9ICJweXRob24yLjUiCisgICAgICAgIGVycm9yID0gY1BpY2tsZS5CYWRQaWNrbGVHZXQKKworY2xhc3MgUGlja2xlUHl0aG9uMjVDb21wYXQoQ1BpY2tsZVB5dGhvbjI1Q29tcGF0KToKKworICAgIG1vZHVsZSA9IHBpY2tsZQorICAgIGVycm9yID0gS2V5RXJyb3IKKworCisjIFRlc3QgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi42LgoraWYgbm90IHJ1bl9jb21wYXRfdGVzdCgicHl0aG9uMi42Iik6CisgICAgY2xhc3MgQ1BpY2tsZVB5dGhvbjI2Q29tcGF0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgcGFzcworZWxzZToKKyAgICBjbGFzcyBDUGlja2xlUHl0aG9uMjZDb21wYXQoQWJzdHJhY3RDb21wYXRUZXN0cyk6CisKKyAgICAgICAgbW9kdWxlID0gY1BpY2tsZQorICAgICAgICBweXRob24gPSAicHl0aG9uMi42IgorICAgICAgICBlcnJvciA9IGNQaWNrbGUuQmFkUGlja2xlR2V0CisKK2NsYXNzIFBpY2tsZVB5dGhvbjI2Q29tcGF0KENQaWNrbGVQeXRob24yNkNvbXBhdCk6CisKKyAgICBtb2R1bGUgPSBwaWNrbGUKKyAgICBlcnJvciA9IEtleUVycm9yCisKKworZGVmIHdvcmtlcl9tYWluKGluX3N0cmVhbSwgb3V0X3N0cmVhbSk6CisgICAgbWVzc2FnZSA9IGNQaWNrbGUubG9hZChpbl9zdHJlYW0pCisgICAgcHJvdG9jb2wsIG9iaiA9IG1lc3NhZ2UKKyAgICBjUGlja2xlLmR1bXAob2JqLCBvdXRfc3RyZWFtLCBwcm90b2NvbCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgaWYgbm90IHRlc3Rfc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCJ4cGlja2xlIik6CisgICAgICAgIHByaW50ID4+c3lzLnN0ZGVyciwgInRlc3RfeHBpY2tsZSAtLSBza2lwcGluZyBiYWNrd2FyZHMgY29tcGF0IHRlc3RzLiIKKyAgICAgICAgcHJpbnQgPj5zeXMuc3RkZXJyLCAiVXNlICdyZWdydGVzdC5weSAtdSB4cGlja2xlJyB0byBydW4gdGhlbS4iCisgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgRHVtcENQaWNrbGVfTG9hZFBpY2tsZSwKKyAgICAgICAgRHVtcFBpY2tsZV9Mb2FkQ1BpY2tsZSwKKyAgICAgICAgQ1BpY2tsZVB5dGhvbjI0Q29tcGF0LAorICAgICAgICBDUGlja2xlUHl0aG9uMjVDb21wYXQsCisgICAgICAgIENQaWNrbGVQeXRob24yNkNvbXBhdCwKKyAgICAgICAgUGlja2xlUHl0aG9uMjRDb21wYXQsCisgICAgICAgIFBpY2tsZVB5dGhvbjI1Q29tcGF0LAorICAgICAgICBQaWNrbGVQeXRob24yNkNvbXBhdCwKKyAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgaWYgIndvcmtlciIgaW4gc3lzLmFyZ3Y6CisgICAgICAgIHdvcmtlcl9tYWluKHN5cy5zdGRpbiwgc3lzLnN0ZG91dCkKKyAgICBlbHNlOgorICAgICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeHJhbmdlLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfeHJhbmdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYzBlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF94cmFuZ2UucHkKQEAgLTAsMCArMSwyMTggQEAKKyMgUHl0aG9uIHRlc3Qgc2V0IC0tIGJ1aWx0LWluIGZ1bmN0aW9ucworCitpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQsIHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgcGlja2xlCitpbXBvcnQgaXRlcnRvb2xzCisKK2ltcG9ydCB3YXJuaW5ncword2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgInVuaXR0ZXN0IikKKworIyBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMgKDMgYXJncyBvbmx5KSwgZm9yIGNvbXBhcmlzb24KK2RlZiBweXJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKToKKyAgICBpZiAoc3RhcnQgLSBzdG9wKSAvLyBzdGVwIDwgMDoKKyAgICAgICAgIyByZXBsYWNlIHN0b3Agd2l0aCBuZXh0IGVsZW1lbnQgaW4gdGhlIHNlcXVlbmNlIG9mIGludGVnZXJzCisgICAgICAgICMgdGhhdCBhcmUgY29uZ3J1ZW50IHRvIHN0YXJ0IG1vZHVsbyBzdGVwLgorICAgICAgICBzdG9wICs9IChzdGFydCAtIHN0b3ApICUgc3RlcAorICAgICAgICB3aGlsZSBzdGFydCAhPSBzdG9wOgorICAgICAgICAgICAgeWllbGQgc3RhcnQKKyAgICAgICAgICAgIHN0YXJ0ICs9IHN0ZXAKKworZGVmIHB5cmFuZ2VfcmV2ZXJzZWQoc3RhcnQsIHN0b3AsIHN0ZXApOgorICAgIHN0b3AgKz0gKHN0YXJ0IC0gc3RvcCkgJSBzdGVwCisgICAgcmV0dXJuIHB5cmFuZ2Uoc3RvcCAtIHN0ZXAsIHN0YXJ0IC0gc3RlcCwgLXN0ZXApCisKKworY2xhc3MgWHJhbmdlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGFzc2VydF9pdGVyYXRvcnNfZXF1YWwoc2VsZiwgeHMsIHlzLCB0ZXN0X2lkLCBsaW1pdD1Ob25lKToKKyAgICAgICAgIyBjaGVjayB0aGF0IGFuIGl0ZXJhdG9yIHhzIG1hdGNoZXMgdGhlIGV4cGVjdGVkIHJlc3VsdHMgeXMsCisgICAgICAgICMgdXAgdG8gYSBnaXZlbiBsaW1pdC4KKyAgICAgICAgaWYgbGltaXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB4cyA9IGl0ZXJ0b29scy5pc2xpY2UoeHMsIGxpbWl0KQorICAgICAgICAgICAgeXMgPSBpdGVydG9vbHMuaXNsaWNlKHlzLCBsaW1pdCkKKyAgICAgICAgc2VudGluZWwgPSBvYmplY3QoKQorICAgICAgICBwYWlycyA9IGl0ZXJ0b29scy5pemlwX2xvbmdlc3QoeHMsIHlzLCBmaWxsdmFsdWU9c2VudGluZWwpCisgICAgICAgIGZvciBpLCAoeCwgeSkgaW4gZW51bWVyYXRlKHBhaXJzKToKKyAgICAgICAgICAgIGlmIHggPT0geToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxpZiB4ID09IHNlbnRpbmVsOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgne306IGl0ZXJhdG9yIGVuZGVkIHVuZXhwZWN0ZWRseSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdhdCBwb3NpdGlvbiB7fTsgZXhwZWN0ZWQge30nLmZvcm1hdCh0ZXN0X2lkLCBpLCB5KSkKKyAgICAgICAgICAgIGVsaWYgeSA9PSBzZW50aW5lbDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3t9OiB1bmV4cGVjdGVkIGV4Y2VzcyBlbGVtZW50IHt9IGF0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uIHt9Jy5mb3JtYXQodGVzdF9pZCwgeCwgaSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgne306IHdyb25nIGVsZW1lbnQgYXQgcG9zaXRpb24ge307JworICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhwZWN0ZWQge30sIGdvdCB7fScuZm9ybWF0KHRlc3RfaWQsIGksIHksIHgpKQorCisgICAgZGVmIGFzc2VydF94cmFuZ2VzX2VxdWl2YWxlbnQoc2VsZiwgeCwgeSk6CisgICAgICAgICMgQ2hlY2sgdGhhdCB0d28geHJhbmdlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGluIHRoZSBzZW5zZSBvZiB0aGUKKyAgICAgICAgIyBhc3NvY2lhdGVkIHNlcXVlbmNlcyBiZWluZyB0aGUgc2FtZS4gIFdlIHdhbnQgdG8gdXNlIHRoaXMgZm9yIGxhcmdlCisgICAgICAgICMgeHJhbmdlIG9iamVjdHMsIHNvIGluc3RlYWQgb2YgY29udmVydGluZyB0byBsaXN0cyBhbmQgY29tcGFyaW5nCisgICAgICAgICMgZGlyZWN0bHkgd2UgZG8gYSBudW1iZXIgb2YgaW5kaXJlY3QgY2hlY2tzLgorICAgICAgICBpZiBsZW4oeCkgIT0gbGVuKHkpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCd7fSBhbmQge30gaGF2ZSBkaWZmZXJlbnQgJworICAgICAgICAgICAgICAgICAgICAgICdsZW5ndGhzOiB7fSBhbmQge30gJy5mb3JtYXQoeCwgeSwgbGVuKHgpLCBsZW4oeSkpKQorICAgICAgICBpZiBsZW4oeCkgPj0gMToKKyAgICAgICAgICAgIGlmIHhbMF0gIT0geVswXToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3t9IGFuZCB7fSBoYXZlIGRpZmZlcmVudCBpbml0aWFsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsZW1lbnRzOiB7fSBhbmQge30gJy5mb3JtYXQoeCwgeSwgeFswXSwgeVswXSkpCisgICAgICAgICAgICBpZiB4Wy0xXSAhPSB5Wy0xXToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3t9IGFuZCB7fSBoYXZlIGRpZmZlcmVudCBmaW5hbCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICdlbGVtZW50czoge30gYW5kIHt9ICcuZm9ybWF0KHgsIHksIHhbLTFdLCB5Wy0xXSkpCisgICAgICAgIGlmIGxlbih4KSA+PSAyOgorICAgICAgICAgICAgeF9zdGVwID0geFsxXSAtIHhbMF0KKyAgICAgICAgICAgIHlfc3RlcCA9IHlbMV0gLSB5WzBdCisgICAgICAgICAgICBpZiB4X3N0ZXAgIT0geV9zdGVwOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgne30gYW5kIHt9IGhhdmUgZGlmZmVyZW50IHN0ZXA6ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3t9IGFuZCB7fSAnLmZvcm1hdCh4LCB5LCB4X3N0ZXAsIHlfc3RlcCkpCisKKyAgICBkZWYgdGVzdF94cmFuZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4cmFuZ2UoMykpLCBbMCwgMSwgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4cmFuZ2UoMSwgNSkpLCBbMSwgMiwgMywgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4cmFuZ2UoMCkpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHhyYW5nZSgtMykpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHhyYW5nZSgxLCAxMCwgMykpLCBbMSwgNCwgN10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4cmFuZ2UoNSwgLTUsIC0zKSksIFs1LCAyLCAtMSwgLTRdKQorCisgICAgICAgIGEgPSAxMAorICAgICAgICBiID0gMTAwCisgICAgICAgIGMgPSA1MAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4cmFuZ2UoYSwgYSsyKSksIFthLCBhKzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeHJhbmdlKGErMiwgYSwgLTFMKSksIFthKzIsIGErMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4cmFuZ2UoYSs0LCBhLCAtMikpLCBbYSs0LCBhKzJdKQorCisgICAgICAgIHNlcSA9IGxpc3QoeHJhbmdlKGEsIGIsIGMpKQorICAgICAgICBzZWxmLmFzc2VydEluKGEsIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiLCBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIDIpCisKKyAgICAgICAgc2VxID0gbGlzdCh4cmFuZ2UoYiwgYSwgLWMpKQorICAgICAgICBzZWxmLmFzc2VydEluKGIsIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihhLCBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIDIpCisKKyAgICAgICAgc2VxID0gbGlzdCh4cmFuZ2UoLWEsIC1iLCAtYykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oLWEsIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigtYiwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXEpLCAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgeHJhbmdlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHhyYW5nZSwgMSwgMiwgMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgeHJhbmdlLCAxLCAyLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHhyYW5nZSwgMTAqKjEwMCwgMTAqKjEwMSwgMTAqKjEwMSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHhyYW5nZSwgMCwgInNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHhyYW5nZSwgMCwgNDIsICJzcGFtIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4cmFuZ2UoMCwgc3lzLm1heGludCwgc3lzLm1heGludC0xKSksIDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgeHJhbmdlLCAtc3lzLm1heGludCwgc3lzLm1heGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgeHJhbmdlLCAwLCAyKnN5cy5tYXhpbnQpCisKKyAgICAgICAgciA9IHhyYW5nZSgtc3lzLm1heGludCwgc3lzLm1heGludCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ociksIHN5cy5tYXhpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHhyYW5nZSwgLXN5cy5tYXhpbnQtMSwgc3lzLm1heGludCwgMikKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgorICAgICAgICB0ZXN0Y2FzZXMgPSBbKDEzLCksICgwLCAxMSksICgtMjIsIDEwKSwgKDIwLCAzLCAtMSksCisgICAgICAgICAgICAgICAgICAgICAoMTMsIDIxLCAzKSwgKC0yLCAyLCAyKV0KKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBmb3IgdCBpbiB0ZXN0Y2FzZXM6CisgICAgICAgICAgICAgICAgciA9IHhyYW5nZSgqdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhyLCBwcm90bykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QocikpCisKKyAgICAgICAgTSA9IG1pbihzeXMubWF4aW50LCBzeXMubWF4c2l6ZSkKKyAgICAgICAgbGFyZ2VfdGVzdGNhc2VzID0gdGVzdGNhc2VzICsgWworICAgICAgICAgICAgKDAsIE0sIDEpLAorICAgICAgICAgICAgKE0sIDAsIC0xKSwKKyAgICAgICAgICAgICgwLCBNLCBNIC0gMSksCisgICAgICAgICAgICAoTSAvLyAyLCBNLCAxKSwKKyAgICAgICAgICAgICgwLCAtTSwgLTEpLAorICAgICAgICAgICAgKDAsIC1NLCAxIC0gTSksCisgICAgICAgICAgICAoLU0sIE0sIDIpLAorICAgICAgICAgICAgKC1NLCBNLCAxMDI0KSwKKyAgICAgICAgICAgICgtTSwgTSwgMTA1ODUpLAorICAgICAgICAgICAgKE0sIC1NLCAtMiksCisgICAgICAgICAgICAoTSwgLU0sIC0xMDI0KSwKKyAgICAgICAgICAgIChNLCAtTSwgLTEwNTg1KSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBmb3IgdCBpbiBsYXJnZV90ZXN0Y2FzZXM6CisgICAgICAgICAgICAgICAgciA9IHhyYW5nZSgqdCkKKyAgICAgICAgICAgICAgICByX291dCA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMociwgcHJvdG8pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3hyYW5nZXNfZXF1aXZhbGVudChyX291dCwgcikKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCByZXByIG9mIGFuIHhyYW5nZSBpcyBhIHZhbGlkIHJlcHJlc2VudGF0aW9uCisgICAgICAgICMgb2YgdGhhdCB4cmFuZ2UuCisKKyAgICAgICAgIyBWYWxpZCB4cmFuZ2VzIGhhdmUgYXQgbW9zdCBtaW4oc3lzLm1heGludCwgc3lzLm1heHNpemUpIGVsZW1lbnRzLgorICAgICAgICBNID0gbWluKHN5cy5tYXhpbnQsIHN5cy5tYXhzaXplKQorCisgICAgICAgIHRlc3RjYXNlcyA9IFsKKyAgICAgICAgICAgICgxMywpLAorICAgICAgICAgICAgKDAsIDExKSwKKyAgICAgICAgICAgICgtMjIsIDEwKSwKKyAgICAgICAgICAgICgyMCwgMywgLTEpLAorICAgICAgICAgICAgKDEzLCAyMSwgMyksCisgICAgICAgICAgICAoLTIsIDIsIDIpLAorICAgICAgICAgICAgKDAsIE0sIDEpLAorICAgICAgICAgICAgKE0sIDAsIC0xKSwKKyAgICAgICAgICAgICgwLCBNLCBNIC0gMSksCisgICAgICAgICAgICAoTSAvLyAyLCBNLCAxKSwKKyAgICAgICAgICAgICgwLCAtTSwgLTEpLAorICAgICAgICAgICAgKDAsIC1NLCAxIC0gTSksCisgICAgICAgICAgICAoLU0sIE0sIDIpLAorICAgICAgICAgICAgKC1NLCBNLCAxMDI0KSwKKyAgICAgICAgICAgICgtTSwgTSwgMTA1ODUpLAorICAgICAgICAgICAgKE0sIC1NLCAtMiksCisgICAgICAgICAgICAoTSwgLU0sIC0xMDI0KSwKKyAgICAgICAgICAgIChNLCAtTSwgLTEwNTg1KSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIHQgaW4gdGVzdGNhc2VzOgorICAgICAgICAgICAgciA9IHhyYW5nZSgqdCkKKyAgICAgICAgICAgIHJfb3V0ID0gZXZhbChyZXByKHIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfeHJhbmdlc19lcXVpdmFsZW50KHIsIHJfb3V0KQorCisgICAgZGVmIHRlc3RfcmFuZ2VfaXRlcmF0b3JzKHNlbGYpOgorICAgICAgICAjIHNlZSBpc3N1ZSA3Mjk4CisgICAgICAgIGxpbWl0cyA9IFtiYXNlICsgamlnZ2xlCisgICAgICAgICAgICAgICAgICBmb3IgTSBpbiAoMioqMzIsIDIqKjY0KQorICAgICAgICAgICAgICAgICAgZm9yIGJhc2UgaW4gKC1NLCAtTS8vMiwgMCwgTS8vMiwgTSkKKyAgICAgICAgICAgICAgICAgIGZvciBqaWdnbGUgaW4gKC0yLCAtMSwgMCwgMSwgMildCisgICAgICAgIHRlc3RfcmFuZ2VzID0gWyhzdGFydCwgZW5kLCBzdGVwKQorICAgICAgICAgICAgICAgICAgICAgICBmb3Igc3RhcnQgaW4gbGltaXRzCisgICAgICAgICAgICAgICAgICAgICAgIGZvciBlbmQgaW4gbGltaXRzCisgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdGVwIGluICgtMioqNjMsIC0yKiozMSwgLTIsIC0xLCAxLCAyKV0KKworICAgICAgICBmb3Igc3RhcnQsIGVuZCwgc3RlcCBpbiB0ZXN0X3JhbmdlczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpdGVyMSA9IHhyYW5nZShzdGFydCwgZW5kLCBzdGVwKQorICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpdGVyMiA9IHB5cmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcCkKKyAgICAgICAgICAgICAgICB0ZXN0X2lkID0gInhyYW5nZSh7fSwge30sIHt9KSIuZm9ybWF0KHN0YXJ0LCBlbmQsIHN0ZXApCisgICAgICAgICAgICAgICAgIyBjaGVjayBmaXJzdCAxMDAgZW50cmllcworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2l0ZXJhdG9yc19lcXVhbChpdGVyMSwgaXRlcjIsIHRlc3RfaWQsIGxpbWl0PTEwMCkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGl0ZXIxID0gcmV2ZXJzZWQoeHJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApKQorICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpdGVyMiA9IHB5cmFuZ2VfcmV2ZXJzZWQoc3RhcnQsIGVuZCwgc3RlcCkKKyAgICAgICAgICAgICAgICB0ZXN0X2lkID0gInJldmVyc2VkKHhyYW5nZSh7fSwge30sIHt9KSkiLmZvcm1hdChzdGFydCwgZW5kLCBzdGVwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2l0ZXJhdG9yc19lcXVhbChpdGVyMSwgaXRlcjIsIHRlc3RfaWQsIGxpbWl0PTEwMCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFhyYW5nZVRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3ppcGZpbGUucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF96aXBmaWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllM2EyOGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF96aXBmaWxlLnB5CkBAIC0wLDAgKzEsMTUzOCBAQAorIyBXZSBjYW4gdGVzdCBwYXJ0IG9mIHRoZSBtb2R1bGUgd2l0aG91dCB6bGliLgordHJ5OgorICAgIGltcG9ydCB6bGliCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgemxpYiA9IE5vbmUKKworaW1wb3J0IG9zCitpbXBvcnQgaW8KK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3RydWN0CitpbXBvcnQgemlwZmlsZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIHRlbXBmaWxlIGltcG9ydCBUZW1wb3JhcnlGaWxlCitmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZGludCwgcmFuZG9tCitmcm9tIHVuaXR0ZXN0IGltcG9ydCBza2lwVW5sZXNzCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgVEVTVEZOX1VOSUNPREUsIFRFU1RGTl9FTkNPRElORywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX3VuaXR0ZXN0LCBmaW5kZmlsZSwgdW5saW5rCit0cnk6CisgICAgVEVTVEZOX1VOSUNPREUuZW5jb2RlKFRFU1RGTl9FTkNPRElORykKK2V4Y2VwdCAoVW5pY29kZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICMgRWl0aGVyIHRoZSBmaWxlIHN5c3RlbSBlbmNvZGluZyBpcyBOb25lLCBvciB0aGUgZmlsZSBuYW1lCisgICAgIyBjYW5ub3QgYmUgZW5jb2RlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gZW5jb2RpbmcuCisgICAgVEVTVEZOX1VOSUNPREUgPSBOb25lCisKK1RFU1RGTjIgPSBURVNURk4gKyAiMiIKK1RFU1RGTkRJUiA9IFRFU1RGTiArICJkIgorRklYRURURVNUX1NJWkUgPSAxMDAwCisKK1NNQUxMX1RFU1RfREFUQSA9IFsoJ196aXB0ZXN0MScsICcxcTJ3M2U0cjV0JyksCisgICAgICAgICAgICAgICAgICAgKCd6aXB0ZXN0MmRpci9femlwdGVzdDInLCAncWF3c2VkcmZ0ZycpLAorICAgICAgICAgICAgICAgICAgICgnemlwdGVzdDJkaXIvemlwdGVzdDNkaXIvX3ppcHRlc3QzJywgJ2F6c3hkY2Z2Z2InKSwKKyAgICAgICAgICAgICAgICAgICAoJ3ppcHRlc3QyZGlyL3ppcHRlc3QzZGlyL3ppcHRlc3Q0ZGlyL196aXB0ZXN0MycsICc2eTd1OGk5bzBwJyldCisKKworY2xhc3MgVGVzdHNXaXRoU291cmNlRmlsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxpbmVfZ2VuID0gWyJaaXBmaWxlIHRlc3QgbGluZSAlZC4gcmFuZG9tIGZsb2F0OiAlZiIgJSAoaSwgcmFuZG9tKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKEZJWEVEVEVTVF9TSVpFKV0KKyAgICAgICAgc2VsZi5kYXRhID0gJ1xuJy5qb2luKHNlbGYubGluZV9nZW4pICsgJ1xuJworCisgICAgICAgICMgTWFrZSBhIHNvdXJjZSBmaWxlIHdpdGggc29tZSBsaW5lcworICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YSkKKworICAgIGRlZiBtYWtlX3Rlc3RfYXJjaGl2ZShzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgImFub3RoZXIubmFtZSIpCisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCJzdHJmaWxlIiwgc2VsZi5kYXRhKQorCisgICAgZGVmIHppcF90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKworICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKFRFU1RGTiksIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgiYW5vdGhlci5uYW1lIiksIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgic3RyZmlsZSIpLCBzZWxmLmRhdGEpCisKKyAgICAgICAgICAgICMgUHJpbnQgdGhlIFpJUCBkaXJlY3RvcnkKKyAgICAgICAgICAgIGZwID0gU3RyaW5nSU8oKQorICAgICAgICAgICAgc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBmcAorICAgICAgICAgICAgICAgIHppcGZwLnByaW50ZGlyKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHN0ZG91dAorCisgICAgICAgICAgICBkaXJlY3RvcnkgPSBmcC5nZXR2YWx1ZSgpCisgICAgICAgICAgICBsaW5lcyA9IGRpcmVjdG9yeS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpbmVzKSwgNCkgIyBOdW1iZXIgb2YgZmlsZXMgKyBoZWFkZXIKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignRmlsZSBOYW1lJywgbGluZXNbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdNb2RpZmllZCcsIGxpbmVzWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignU2l6ZScsIGxpbmVzWzBdKQorCisgICAgICAgICAgICBmbiwgZGF0ZSwgdGltZV8sIHNpemUgPSBsaW5lc1sxXS5zcGxpdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZuLCAnYW5vdGhlci5uYW1lJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lLnN0cnB0aW1lKGRhdGUsICclWS0lbS0lZCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUuc3RycHRpbWUodGltZV8sICclSDolTTolUycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBzdHIobGVuKHNlbGYuZGF0YSkpKQorCisgICAgICAgICAgICAjIENoZWNrIHRoZSBuYW1lbGlzdAorICAgICAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuYW1lcyksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKFRFU1RGTiwgbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJhbm90aGVyLm5hbWUiLCBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0cmZpbGUiLCBuYW1lcykKKworICAgICAgICAgICAgIyBDaGVjayBpbmZvbGlzdAorICAgICAgICAgICAgaW5mb3MgPSB6aXBmcC5pbmZvbGlzdCgpCisgICAgICAgICAgICBuYW1lcyA9IFtpLmZpbGVuYW1lIGZvciBpIGluIGluZm9zXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obmFtZXMpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihURVNURk4sIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiYW5vdGhlci5uYW1lIiwgbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJzdHJmaWxlIiwgbmFtZXMpCisgICAgICAgICAgICBmb3IgaSBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkuZmlsZV9zaXplLCBsZW4oc2VsZi5kYXRhKSkKKworICAgICAgICAgICAgIyBjaGVjayBnZXRpbmZvCisgICAgICAgICAgICBmb3Igbm0gaW4gKFRFU1RGTiwgImFub3RoZXIubmFtZSIsICJzdHJmaWxlIik6CisgICAgICAgICAgICAgICAgaW5mbyA9IHppcGZwLmdldGluZm8obm0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLmZpbGVuYW1lLCBubSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8uZmlsZV9zaXplLCBsZW4oc2VsZi5kYXRhKSkKKworICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRlc3R6aXAgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24KKyAgICAgICAgICAgIHppcGZwLnRlc3R6aXAoKQorCisgICAgZGVmIHRlc3Rfc3RvcmVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgZGVmIHppcF9vcGVuX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorCisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBkYXRhMSA9IFtdCisgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oVEVTVEZOKSBhcyB6aXBvcGVuMToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMS5yZWFkKDI1NikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIHppcGRhdGExLmFwcGVuZChyZWFkX2RhdGEpCisKKyAgICAgICAgICAgIHppcGRhdGEyID0gW10KKyAgICAgICAgICAgIHdpdGggemlwZnAub3BlbigiYW5vdGhlci5uYW1lIikgYXMgemlwb3BlbjI6CisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgcmVhZF9kYXRhID0gemlwb3BlbjIucmVhZCgyNTYpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICB6aXBkYXRhMi5hcHBlbmQocmVhZF9kYXRhKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4oemlwZGF0YTEpLCBzZWxmLmRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4oemlwZGF0YTIpLCBzZWxmLmRhdGEpCisKKyAgICBkZWYgdGVzdF9vcGVuX3N0b3JlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9vcGVuX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgZGVmIHRlc3Rfb3Blbl92aWFfemlwX2luZm8oc2VsZik6CisgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigibmFtZSIsICJmb28iKQorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoIm5hbWUiLCAiYmFyIikKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgaW5mb3MgPSB6aXBmcC5pbmZvbGlzdCgpCisgICAgICAgICAgICBkYXRhID0gIiIKKyAgICAgICAgICAgIGZvciBpbmZvIGluIGluZm9zOgorICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihpbmZvKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGYucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YSA9PSAiZm9vYmFyIiBvciBkYXRhID09ICJiYXJmb28iKQorICAgICAgICAgICAgZGF0YSA9ICIiCisgICAgICAgICAgICBmb3IgaW5mbyBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICBkYXRhICs9IHppcGZwLnJlYWQoaW5mbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhID09ICJmb29iYXIiIG9yIGRhdGEgPT0gImJhcmZvbyIpCisKKyAgICBkZWYgemlwX3JhbmRvbV9vcGVuX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorCisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBkYXRhMSA9IFtdCisgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oVEVTVEZOKSBhcyB6aXBvcGVuMToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMS5yZWFkKHJhbmRpbnQoMSwgMTAyNCkpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICB6aXBkYXRhMS5hcHBlbmQocmVhZF9kYXRhKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4oemlwZGF0YTEpLCBzZWxmLmRhdGEpCisKKyAgICBkZWYgdGVzdF9yYW5kb21fb3Blbl9zdG9yZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfcmFuZG9tX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBkZWYgdGVzdF91bml2ZXJhbF9yZWFkYWhlYWRzKHNlbGYpOgorICAgICAgICBmID0gU3RyaW5nSU8oKQorCisgICAgICAgIGRhdGEgPSAnYVxyXG4nICogMTYgKiAxMDI0CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICd3JywgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKFRFU1RGTiwgZGF0YSkKKworICAgICAgICBkYXRhMiA9ICcnCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICdyJykgYXMgemlwZnA6CisgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oVEVTVEZOLCAnclUnKSBhcyB6aXBvcGVuOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHppcG9wZW46CisgICAgICAgICAgICAgICAgICAgIGRhdGEyICs9IGxpbmUKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGRhdGEyLnJlcGxhY2UoJ1xuJywgJ1xyXG4nKSkKKworICAgIGRlZiB6aXBfcmVhZGxpbmVfcmVhZF90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKworICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oVEVTVEZOKSBhcyB6aXBvcGVuOgorICAgICAgICAgICAgICAgIGRhdGEgPSAnJworICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHJlYWQgPSB6aXBvcGVuLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBkYXRhICs9IHJlYWQKKworICAgICAgICAgICAgICAgICAgICByZWFkID0gemlwb3Blbi5yZWFkKDEwMCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBkYXRhICs9IHJlYWQKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHNlbGYuZGF0YSkKKworICAgIGRlZiB6aXBfcmVhZGxpbmVfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCisKKyAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKFRFU1RGTikgYXMgemlwb3BlbjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmxpbmVfZ2VuOgorICAgICAgICAgICAgICAgICAgICBsaW5lZGF0YSA9IHppcG9wZW4ucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVkYXRhLCBsaW5lICsgJ1xuJykKKworICAgIGRlZiB6aXBfcmVhZGxpbmVzX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorCisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihURVNURk4pIGFzIHpvOgorICAgICAgICAgICAgICAgIHppcGxpbmVzID0gem8ucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBmb3IgbGluZSwgemlwbGluZSBpbiB6aXAoc2VsZi5saW5lX2dlbiwgemlwbGluZXMpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGxpbmUsIGxpbmUgKyAnXG4nKQorCisgICAgZGVmIHppcF9pdGVybGluZXNfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCisKKyAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIHppcGZwLm9wZW4oVEVTVEZOKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBsaW5lLCBsaW5lICsgJ1xuJykKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX3JlYWRfc3RvcmVkKHNlbGYpOgorICAgICAgICAjIElzc3VlICM3NjEwOiBjYWxscyB0byByZWFkbGluZSgpIGludGVybGVhdmVkIHdpdGggY2FsbHMgdG8gcmVhZCgpLgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3JlYWRsaW5lX3JlYWRfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9zdG9yZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfcmVhZGxpbmVfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXNfc3RvcmVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3JlYWRsaW5lc190ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKworICAgIGRlZiB0ZXN0X2l0ZXJsaW5lc19zdG9yZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfaXRlcmxpbmVzX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3Rfb3Blbl9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9vcGVuX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmFuZG9tX29wZW5fZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfcmFuZG9tX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9yZWFkX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICAjIElzc3VlICM3NjEwOiBjYWxscyB0byByZWFkbGluZSgpIGludGVybGVhdmVkIHdpdGggY2FsbHMgdG8gcmVhZCgpLgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3JlYWRsaW5lX3JlYWRfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9yZWFkbGluZV90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRsaW5lc19kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9yZWFkbGluZXNfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9pdGVybGluZXNfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfaXRlcmxpbmVzX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfbG93X2NvbXByZXNzaW9uKHNlbGYpOgorICAgICAgICAiIiJDaGVjayBmb3IgY2FzZXMgd2hlcmUgY29tcHJlc3NlZCBkYXRhIGlzIGxhcmdlciB0aGFuIG9yaWdpbmFsLiIiIgorICAgICAgICAjIENyZWF0ZSB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigic3RyZmlsZSIsICcxMicpCisKKyAgICAgICAgIyBHZXQgYW4gb3BlbiBvYmplY3QgZm9yIHN0cmZpbGUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oInN0cmZpbGUiKSBhcyBvcGVub2JqOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Blbm9iai5yZWFkKDEpLCAnMScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVub2JqLnJlYWQoMSksICcyJykKKworICAgIGRlZiB0ZXN0X2Fic29sdXRlX2FyY25hbWVzKHNlbGYpOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICIvYWJzb2x1dGUiKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAubmFtZWxpc3QoKSwgWyJhYnNvbHV0ZSJdKQorCisgICAgZGVmIHRlc3RfYXBwZW5kX3RvX3ppcF9maWxlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGFwcGVuZGluZyB0byBhbiBleGlzdGluZyB6aXBmaWxlLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiYSIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigic3RyZmlsZSIsIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAubmFtZWxpc3QoKSwgW1RFU1RGTiwgInN0cmZpbGUiXSkKKworICAgIGRlZiB0ZXN0X2FwcGVuZF90b19ub25femlwX2ZpbGUoc2VsZik6CisgICAgICAgICIiIlRlc3QgYXBwZW5kaW5nIHRvIGFuIGV4aXN0aW5nIGZpbGUgdGhhdCBpcyBub3QgYSB6aXBmaWxlLiIiIgorICAgICAgICAjIE5PVEU6IHRoaXMgdGVzdCBmYWlscyBpZiBsZW4oZCkgPCAyMiBiZWNhdXNlIG9mIHRoZSBmaXJzdAorICAgICAgICAjIGxpbmUgImZwaW4uc2VlaygtMjIsIDIpIiBpbiBfRW5kUmVjRGF0YQorICAgICAgICBkYXRhID0gJ0kgYW0gbm90IGEgWmlwRmlsZSEnKjEwCisgICAgICAgIHdpdGggb3BlbihURVNURk4yLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkYXRhKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJhIiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgVEVTVEZOKQorCisgICAgICAgIHdpdGggb3BlbihURVNURk4yLCAncmInKSBhcyBmOgorICAgICAgICAgICAgZi5zZWVrKGxlbihkYXRhKSkKKyAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5uYW1lbGlzdCgpLCBbVEVTVEZOXSkKKworICAgIGRlZiB0ZXN0X2lnbm9yZXNfbmV3bGluZV9hdF9lbmQoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgVEVTVEZOKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOMiwgJ2EnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiXHJcblwwMFwwMFwwMCIpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoemlwZnAsIHppcGZpbGUuWmlwRmlsZSkKKworICAgIGRlZiB0ZXN0X2lnbm9yZXNfc3R1ZmZfYXBwZW5kZWRfcGFzdF9jb21tZW50cyhzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAuY29tbWVudCA9IGIidGhpcyBpcyBhIGNvbW1lbnQiCisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTjIsICdhJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoImFiY2RlZlxyXG4iKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHppcGZwLCB6aXBmaWxlLlppcEZpbGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLmNvbW1lbnQsIGIidGhpcyBpcyBhIGNvbW1lbnQiKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZGVmYXVsdF9uYW1lKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGNhbGxpbmcgWmlwRmlsZS53cml0ZSB3aXRob3V0IGFyY25hbWUgc3BlY2lmaWVkCisgICAgICAgIHByb2R1Y2VzIHRoZSBleHBlY3RlZCByZXN1bHQuIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoVEVTVEZOKSwgb3BlbihURVNURk4pLnJlYWQoKSkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9wZXJfZmlsZV9jb21wcmVzc2lvbihzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBmaWxlcyB3aXRoaW4gYSBaaXAgYXJjaGl2ZSBjYW4gaGF2ZSBkaWZmZXJlbnQKKyAgICAgICAgY29tcHJlc3Npb24gb3B0aW9ucy4iIiIKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgJ3N0b3JlbWUnLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICdkZWZsYXRlbWUnLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICAgICAgICAgIHNpbmZvID0gemlwZnAuZ2V0aW5mbygnc3RvcmVtZScpCisgICAgICAgICAgICBkaW5mbyA9IHppcGZwLmdldGluZm8oJ2RlZmxhdGVtZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpbmZvLmNvbXByZXNzX3R5cGUsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGluZm8uY29tcHJlc3NfdHlwZSwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBkZWYgdGVzdF93cml0ZV90b19yZWFkb25seShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCB0cnlpbmcgdG8gY2FsbCB3cml0ZSgpIG9uIGEgcmVhZG9ubHkgWmlwRmlsZSBvYmplY3QKKyAgICAgICAgcmFpc2VzIGEgUnVudGltZUVycm9yLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigic29tZWZpbGUudHh0IiwgImJvZ3VzIikKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGZwLndyaXRlLCBURVNURk4pCisKKyAgICBkZWYgdGVzdF9leHRyYWN0KHNlbGYpOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICBmb3IgZnBhdGgsIGZkYXRhIGluIFNNQUxMX1RFU1RfREFUQToKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXN0cihmcGF0aCwgZmRhdGEpCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBmcGF0aCwgZmRhdGEgaW4gU01BTExfVEVTVF9EQVRBOgorICAgICAgICAgICAgICAgIHdyaXR0ZW5maWxlID0gemlwZnAuZXh0cmFjdChmcGF0aCkKKworICAgICAgICAgICAgICAgICMgbWFrZSBzdXJlIGl0IHdhcyB3cml0dGVuIHRvIHRoZSByaWdodCBwbGFjZQorICAgICAgICAgICAgICAgIGNvcnJlY3RmaWxlID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBmcGF0aCkKKyAgICAgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgoY29ycmVjdGZpbGUpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXR0ZW5maWxlLCBjb3JyZWN0ZmlsZSkKKworICAgICAgICAgICAgICAgICMgbWFrZSBzdXJlIGNvcnJlY3QgZGF0YSBpcyBpbiBjb3JyZWN0IGZpbGUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZkYXRhLCBvcGVuKHdyaXR0ZW5maWxlLCAicmIiKS5yZWFkKCkpCisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHdyaXR0ZW5maWxlKQorCisgICAgICAgICMgcmVtb3ZlIHRoZSB0ZXN0IGZpbGUgc3ViZGlyZWN0b3JpZXMKKyAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksICd6aXB0ZXN0MmRpcicpKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9hbGwoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBmcGF0aCwgZmRhdGEgaW4gU01BTExfVEVTVF9EQVRBOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKGZwYXRoLCBmZGF0YSkKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAuZXh0cmFjdGFsbCgpCisgICAgICAgICAgICBmb3IgZnBhdGgsIGZkYXRhIGluIFNNQUxMX1RFU1RfREFUQToKKyAgICAgICAgICAgICAgICBvdXRmaWxlID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBmcGF0aCkKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmRhdGEsIG9wZW4ob3V0ZmlsZSwgInJiIikucmVhZCgpKQorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvdXRmaWxlKQorCisgICAgICAgICMgcmVtb3ZlIHRoZSB0ZXN0IGZpbGUgc3ViZGlyZWN0b3JpZXMKKyAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksICd6aXB0ZXN0MmRpcicpKQorCisgICAgZGVmIGNoZWNrX2ZpbGUoc2VsZiwgZmlsZW5hbWUsIGNvbnRlbnQpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUpKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBjb250ZW50KQorCisgICAgQHNraXBVbmxlc3MoVEVTVEZOX1VOSUNPREUsICJObyBVbmljb2RlIGZpbGVzeXN0ZW0gc2VtYW50aWNzIG9uIHRoaXMgcGxhdGZvcm0uIikKKyAgICBkZWYgdGVzdF9leHRyYWN0X3VuaWNvZGVfZmlsZW5hbWVzKHNlbGYpOgorICAgICAgICBmbmFtZXMgPSBbdSdmb28udHh0Jywgb3MucGF0aC5iYXNlbmFtZShURVNURk5fVU5JQ09ERSldCisgICAgICAgIGNvbnRlbnQgPSAnVGVzdCBmb3IgdW5pY29kZSBmaWxlbmFtZScKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIGZuYW1lIGluIGZuYW1lczoKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXN0cihmbmFtZSwgY29udGVudCkKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIGZuYW1lIGluIGZuYW1lczoKKyAgICAgICAgICAgICAgICB3cml0dGVuZmlsZSA9IHppcGZwLmV4dHJhY3QoZm5hbWUpCisKKyAgICAgICAgICAgICAgICAjIG1ha2Ugc3VyZSBpdCB3YXMgd3JpdHRlbiB0byB0aGUgcmlnaHQgcGxhY2UKKyAgICAgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZm5hbWUpCisgICAgICAgICAgICAgICAgY29ycmVjdGZpbGUgPSBvcy5wYXRoLm5vcm1wYXRoKGNvcnJlY3RmaWxlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JpdHRlbmZpbGUsIGNvcnJlY3RmaWxlKQorCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKHdyaXR0ZW5maWxlLCBjb250ZW50KQorICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh3cml0dGVuZmlsZSkKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfaGFja2Vyc19hcmNuYW1lcyhzZWxmKToKKyAgICAgICAgaGFja25hbWVzID0gWworICAgICAgICAgICAgKCcuLi9mb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgICgnZm9vLy4uL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAoJ2Zvby8uLi8uLi9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKCdmb28vYmFyLy4uJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgICgnLi8uLi9mb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgICgnL2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKCcvZm9vLy4uL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAoJy9mb28vLi4vLi4vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgXQorICAgICAgICBpZiBvcy5wYXRoLnNlcCA9PSAnXFwnOgorICAgICAgICAgICAgaGFja25hbWVzLmV4dGVuZChbCisgICAgICAgICAgICAgICAgKHInLi5cZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAgICAgKHInLi5cL2Zvb1wvYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgICAgICAocidmb28vXC4uXC9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgICAgIChyJ2Zvb1wvLi4vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAgICAgKHInQzpmb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgICAgICAocidDOi9mb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgICAgICAocidDOi8vZm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAgICAgKHInQzpcZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAgICAgKHInLy9jb25reS9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAgICAgKHInXFxjb25reVxtb3VudHBvaW50XGZvb1xiYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAgICAgKHInLy8vY29ua3kvbW91bnRwb2ludC9mb28vYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAorICAgICAgICAgICAgICAgIChyJ1xcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKKyAgICAgICAgICAgICAgICAocicvL2Nvbmt5Ly9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAgICAgKHInXFxjb25reVxcbW91bnRwb2ludFxmb29cYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAorICAgICAgICAgICAgICAgIChyJy8vPy9DOi9mb28vYmFyJywgJ18vQ18vZm9vL2JhcicpLAorICAgICAgICAgICAgICAgIChyJ1xcP1xDOlxmb29cYmFyJywgJ18vQ18vZm9vL2JhcicpLAorICAgICAgICAgICAgICAgIChyJ0M6Ly4uL0M6L2Zvby9iYXInLCAnQ18vZm9vL2JhcicpLAorICAgICAgICAgICAgICAgIChyJ2E6YlxjPGQ+ZXxmImc/aCppJywgJ2IvY19kX2VfZl9nX2hfaScpLAorICAgICAgICAgICAgICAgICgnLi4vLi4vZm9vLi4vLi4vYmEuLnInLCAnZm9vL2JhLi5yJyksCisgICAgICAgICAgICBdKQorICAgICAgICBlbHNlOiAgIyBVbml4CisgICAgICAgICAgICBoYWNrbmFtZXMuZXh0ZW5kKFsKKyAgICAgICAgICAgICAgICAoJy8vZm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAgICAgKCcuLi8uLi9mb28uLi8uLi9iYS4ucicsICdmb28uLi9iYS4ucicpLAorICAgICAgICAgICAgICAgIChyJ2Zvby8uLlxiYXInLCByJ2Zvby8uLlxiYXInKSwKKyAgICAgICAgICAgIF0pCisKKyAgICAgICAgZm9yIGFyY25hbWUsIGZpeGVkbmFtZSBpbiBoYWNrbmFtZXM6CisgICAgICAgICAgICBjb250ZW50ID0gYidmb29iYXInICsgYXJjbmFtZS5lbmNvZGUoKQorICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgJ3cnLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgICAgIHppbmZvID0gemlwZmlsZS5aaXBJbmZvKCkKKyAgICAgICAgICAgICAgICAjIHByZXNlcnZlIGJhY2tzbGFzaGVzCisgICAgICAgICAgICAgICAgemluZm8uZmlsZW5hbWUgPSBhcmNuYW1lCisgICAgICAgICAgICAgICAgemluZm8uZXh0ZXJuYWxfYXR0ciA9IDBvNjAwIDw8IDE2CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoemluZm8sIGNvbnRlbnQpCisKKyAgICAgICAgICAgIGFyY25hbWUgPSBhcmNuYW1lLnJlcGxhY2Uob3Muc2VwLCAiLyIpCisgICAgICAgICAgICB0YXJnZXRwYXRoID0gb3MucGF0aC5qb2luKCd0YXJnZXQnLCAnc3ViZGlyJywgJ3N1YnN1YicpCisgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGguam9pbih0YXJnZXRwYXRoLCAqZml4ZWRuYW1lLnNwbGl0KCcvJykpCisKKyAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICdyJykgYXMgemlwZnA6CisgICAgICAgICAgICAgICAgd3JpdHRlbmZpbGUgPSB6aXBmcC5leHRyYWN0KGFyY25hbWUsIHRhcmdldHBhdGgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cml0dGVuZmlsZSwgY29ycmVjdGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ImV4dHJhY3QgJXIiICUgYXJjbmFtZSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZmlsZShjb3JyZWN0ZmlsZSwgY29udGVudCkKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoJ3RhcmdldCcpCisKKyAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICdyJykgYXMgemlwZnA6CisgICAgICAgICAgICAgICAgemlwZnAuZXh0cmFjdGFsbCh0YXJnZXRwYXRoKQorICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKGNvcnJlY3RmaWxlLCBjb250ZW50KQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSgndGFyZ2V0JykKKworICAgICAgICAgICAgY29ycmVjdGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksICpmaXhlZG5hbWUuc3BsaXQoJy8nKSkKKworICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgJ3InKSBhcyB6aXBmcDoKKyAgICAgICAgICAgICAgICB3cml0dGVuZmlsZSA9IHppcGZwLmV4dHJhY3QoYXJjbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXR0ZW5maWxlLCBjb3JyZWN0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iZXh0cmFjdCAlciIgJSBhcmNuYW1lKQorICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKGNvcnJlY3RmaWxlLCBjb250ZW50KQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShmaXhlZG5hbWUuc3BsaXQoJy8nKVswXSkKKworICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgJ3InKSBhcyB6aXBmcDoKKyAgICAgICAgICAgICAgICB6aXBmcC5leHRyYWN0YWxsKCkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZmlsZShjb3JyZWN0ZmlsZSwgY29udGVudCkKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZml4ZWRuYW1lLnNwbGl0KCcvJylbMF0pCisKKyAgICAgICAgICAgIG9zLnJlbW92ZShURVNURk4yKQorCisgICAgZGVmIHRlc3Rfd3JpdGVzdHJfY29tcHJlc3Npb24oc2VsZik6CisgICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IikKKyAgICAgICAgemlwZnAud3JpdGVzdHIoImEudHh0IiwgImhlbGxvIHdvcmxkIiwgY29tcHJlc3NfdHlwZT16aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgIGlmIHpsaWI6CisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigiYi50eHQiLCAiaGVsbG8gd29ybGQiLCBjb21wcmVzc190eXBlPXppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgICAgIGluZm8gPSB6aXBmcC5nZXRpbmZvKCdhLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5jb21wcmVzc190eXBlLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICAgICAgaWYgemxpYjoKKyAgICAgICAgICAgIGluZm8gPSB6aXBmcC5nZXRpbmZvKCdiLnR4dCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8uY29tcHJlc3NfdHlwZSwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKworICAgIGRlZiB6aXBfdGVzdF93cml0ZXN0cl9wZXJtaXNzaW9ucyhzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgd3JpdGVzdHIgY3JlYXRlcyBmaWxlcyB3aXRoIG1vZGUgMDYwMCwKKyAgICAgICAgIyB3aGVuIGl0IGlzIHBhc3NlZCBhIG5hbWUgcmF0aGVyIHRoYW4gYSBaaXBJbmZvIGluc3RhbmNlLgorCisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICB6aW5mbyA9IHppcGZwLmdldGluZm8oJ3N0cmZpbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aW5mby5leHRlcm5hbF9hdHRyLCAwNjAwIDw8IDE2KQorCisgICAgZGVmIHRlc3Rfd3JpdGVzdHJfcGVybWlzc2lvbnMoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfdGVzdF93cml0ZXN0cl9wZXJtaXNzaW9ucyhmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCB0aGUgemlwZmlsZSBpcyBjbG9zZWQgYWZ0ZXIgdGhlICd3aXRoJyBibG9jay4iIiIKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBmcGF0aCwgZmRhdGEgaW4gU01BTExfVEVTVF9EQVRBOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKGZwYXRoLCBmZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoemlwZnAuZnAgaXMgbm90IE5vbmUsICd6aXBmcCBpcyBub3Qgb3BlbicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmcC5mcCBpcyBOb25lLCAnemlwZnAgaXMgbm90IGNsb3NlZCcpCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmcC5mcCBpcyBub3QgTm9uZSwgJ3ppcGZwIGlzIG5vdCBvcGVuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppcGZwLmZwIGlzIE5vbmUsICd6aXBmcCBpcyBub3QgY2xvc2VkJykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX29uX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCB0aGUgemlwZmlsZSBpcyBjbG9zZWQgaWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBpbiB0aGUKKyAgICAgICAgJ3dpdGgnIGJsb2NrLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoZnBhdGgsIGZkYXRhKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikgYXMgemlwZnAyOgorICAgICAgICAgICAgICAgIHJhaXNlIHppcGZpbGUuQmFkWmlwZmlsZSgpCisgICAgICAgIGV4Y2VwdCB6aXBmaWxlLkJhZFppcGZpbGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoemlwZnAyLmZwIGlzIE5vbmUsICd6aXBmcCBpcyBub3QgY2xvc2VkJykKKworICAgIGRlZiB0ZXN0X2FkZF9maWxlX2JlZm9yZV8xOTgwKHNlbGYpOgorICAgICAgICAjIFNldCBhdGltZSBhbmQgbXRpbWUgdG8gMTk3MC0wMS0wMQorICAgICAgICBvcy51dGltZShURVNURk4sICgwLCAwKSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHppcGZwLndyaXRlLCBURVNURk4pCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgIHVubGluayhURVNURk4yKQorCisKK2NsYXNzIFRlc3RaaXA2NEluU21hbGxGaWxlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUaGVzZSB0ZXN0cyB0ZXN0IHRoZSBaSVA2NCBmdW5jdGlvbmFsaXR5IHdpdGhvdXQgdXNpbmcgbGFyZ2UgZmlsZXMsCisgICAgIyBzZWUgdGVzdF96aXBmaWxlNjQgZm9yIHByb3BlciB0ZXN0cy4KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fbGltaXQgPSB6aXBmaWxlLlpJUDY0X0xJTUlUCisgICAgICAgIHppcGZpbGUuWklQNjRfTElNSVQgPSA1CisKKyAgICAgICAgbGluZV9nZW4gPSAoIlRlc3Qgb2YgemlwZmlsZSBsaW5lICVkLiIgJSBpCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIEZJWEVEVEVTVF9TSVpFKSkKKyAgICAgICAgc2VsZi5kYXRhID0gJ1xuJy5qb2luKGxpbmVfZ2VuKQorCisgICAgICAgICMgTWFrZSBhIHNvdXJjZSBmaWxlIHdpdGggc29tZSBsaW5lcworICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YSkKKworICAgIGRlZiBsYXJnZV9maWxlX2V4Y2VwdGlvbl90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkxhcmdlWmlwRmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcGZwLndyaXRlLCBURVNURk4sICJhbm90aGVyLm5hbWUiKQorCisgICAgZGVmIGxhcmdlX2ZpbGVfZXhjZXB0aW9uX3Rlc3QyKHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkxhcmdlWmlwRmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcGZwLndyaXRlc3RyLCAiYW5vdGhlci5uYW1lIiwgc2VsZi5kYXRhKQorCisgICAgZGVmIHRlc3RfbGFyZ2VfZmlsZV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi5sYXJnZV9maWxlX2V4Y2VwdGlvbl90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYubGFyZ2VfZmlsZV9leGNlcHRpb25fdGVzdDIoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgZGVmIHppcF90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24sIGFsbG93WmlwNjQ9VHJ1ZSkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICJhbm90aGVyLm5hbWUiKQorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCBURVNURk4pCisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigic3RyZmlsZSIsIHNlbGYuZGF0YSkKKworICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKFRFU1RGTiksIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgiYW5vdGhlci5uYW1lIiksIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgic3RyZmlsZSIpLCBzZWxmLmRhdGEpCisKKyAgICAgICAgICAgICMgUHJpbnQgdGhlIFpJUCBkaXJlY3RvcnkKKyAgICAgICAgICAgIGZwID0gU3RyaW5nSU8oKQorICAgICAgICAgICAgc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBmcAorICAgICAgICAgICAgICAgIHppcGZwLnByaW50ZGlyKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHN0ZG91dAorCisgICAgICAgICAgICBkaXJlY3RvcnkgPSBmcC5nZXR2YWx1ZSgpCisgICAgICAgICAgICBsaW5lcyA9IGRpcmVjdG9yeS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpbmVzKSwgNCkgIyBOdW1iZXIgb2YgZmlsZXMgKyBoZWFkZXIKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignRmlsZSBOYW1lJywgbGluZXNbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdNb2RpZmllZCcsIGxpbmVzWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignU2l6ZScsIGxpbmVzWzBdKQorCisgICAgICAgICAgICBmbiwgZGF0ZSwgdGltZV8sIHNpemUgPSBsaW5lc1sxXS5zcGxpdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZuLCAnYW5vdGhlci5uYW1lJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lLnN0cnB0aW1lKGRhdGUsICclWS0lbS0lZCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUuc3RycHRpbWUodGltZV8sICclSDolTTolUycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBzdHIobGVuKHNlbGYuZGF0YSkpKQorCisgICAgICAgICAgICAjIENoZWNrIHRoZSBuYW1lbGlzdAorICAgICAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuYW1lcyksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKFRFU1RGTiwgbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJhbm90aGVyLm5hbWUiLCBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0cmZpbGUiLCBuYW1lcykKKworICAgICAgICAgICAgIyBDaGVjayBpbmZvbGlzdAorICAgICAgICAgICAgaW5mb3MgPSB6aXBmcC5pbmZvbGlzdCgpCisgICAgICAgICAgICBuYW1lcyA9IFtpLmZpbGVuYW1lIGZvciBpIGluIGluZm9zXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obmFtZXMpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihURVNURk4sIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiYW5vdGhlci5uYW1lIiwgbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJzdHJmaWxlIiwgbmFtZXMpCisgICAgICAgICAgICBmb3IgaSBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkuZmlsZV9zaXplLCBsZW4oc2VsZi5kYXRhKSkKKworICAgICAgICAgICAgIyBjaGVjayBnZXRpbmZvCisgICAgICAgICAgICBmb3Igbm0gaW4gKFRFU1RGTiwgImFub3RoZXIubmFtZSIsICJzdHJmaWxlIik6CisgICAgICAgICAgICAgICAgaW5mbyA9IHppcGZwLmdldGluZm8obm0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLmZpbGVuYW1lLCBubSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8uZmlsZV9zaXplLCBsZW4oc2VsZi5kYXRhKSkKKworICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRlc3R6aXAgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24KKyAgICAgICAgICAgIHppcGZwLnRlc3R6aXAoKQorCisgICAgZGVmIHRlc3Rfc3RvcmVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBkZWYgdGVzdF9hYnNvbHV0ZV9hcmNuYW1lcyhzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93WmlwNjQ9VHJ1ZSkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICIvYWJzb2x1dGUiKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAubmFtZWxpc3QoKSwgWyJhYnNvbHV0ZSJdKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB6aXBmaWxlLlpJUDY0X0xJTUlUID0gc2VsZi5fbGltaXQKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgdW5saW5rKFRFU1RGTjIpCisKKworY2xhc3MgUHlaaXBGaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3dyaXRlX3B5ZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlB5WmlwRmlsZShUZW1wb3JhcnlGaWxlKCksICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICBmbiA9IF9fZmlsZV9fCisgICAgICAgICAgICBpZiBmbi5lbmRzd2l0aCgnLnB5YycpIG9yIGZuLmVuZHN3aXRoKCcucHlvJyk6CisgICAgICAgICAgICAgICAgZm4gPSBmbls6LTFdCisKKyAgICAgICAgICAgIHppcGZwLndyaXRlcHkoZm4pCisKKyAgICAgICAgICAgIGJuID0gb3MucGF0aC5iYXNlbmFtZShmbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYm4sIHppcGZwLm5hbWVsaXN0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYm4gKyAnbycgaW4gemlwZnAubmFtZWxpc3QoKSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJuICsgJ2MnIGluIHppcGZwLm5hbWVsaXN0KCkpCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlB5WmlwRmlsZShUZW1wb3JhcnlGaWxlKCksICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICBmbiA9IF9fZmlsZV9fCisgICAgICAgICAgICBpZiBmbi5lbmRzd2l0aCgoJy5weWMnLCAnLnB5bycpKToKKyAgICAgICAgICAgICAgICBmbiA9IGZuWzotMV0KKworICAgICAgICAgICAgemlwZnAud3JpdGVweShmbiwgInRlc3RwYWNrYWdlIikKKworICAgICAgICAgICAgYm4gPSAiJXMvJXMiICUgKCJ0ZXN0cGFja2FnZSIsIG9zLnBhdGguYmFzZW5hbWUoZm4pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihibiwgemlwZnAubmFtZWxpc3QoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShibiArICdvJyBpbiB6aXBmcC5uYW1lbGlzdCgpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm4gKyAnYycgaW4gemlwZnAubmFtZWxpc3QoKSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3B5dGhvbl9wYWNrYWdlKHNlbGYpOgorICAgICAgICBpbXBvcnQgZW1haWwKKyAgICAgICAgcGFja2FnZWRpciA9IG9zLnBhdGguZGlybmFtZShlbWFpbC5fX2ZpbGVfXykKKworICAgICAgICB3aXRoIHppcGZpbGUuUHlaaXBGaWxlKFRlbXBvcmFyeUZpbGUoKSwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlcHkocGFja2FnZWRpcikKKworICAgICAgICAgICAgIyBDaGVjayBmb3IgYSBjb3VwbGUgb2YgbW9kdWxlcyBhdCBkaWZmZXJlbnQgbGV2ZWxzIG9mIHRoZQorICAgICAgICAgICAgIyBoaWVyYXJjaHkKKyAgICAgICAgICAgIG5hbWVzID0gemlwZnAubmFtZWxpc3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdlbWFpbC9fX2luaXRfXy5weW8nIGluIG5hbWVzIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYWlsL19faW5pdF9fLnB5YycgaW4gbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2VtYWlsL21pbWUvdGV4dC5weW8nIGluIG5hbWVzIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYWlsL21pbWUvdGV4dC5weWMnIGluIG5hbWVzKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcHl0aG9uX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgb3MubWtkaXIoVEVTVEZOMikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMS5weSIpLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKCJwcmludCg0MilcbiIpCisKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIm1vZDIucHkiKSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZSgicHJpbnQoNDIgKiA0MilcbiIpCisKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIm1vZDIudHh0IiksICJ3IikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoImJsYSBibGEgYmxhXG4iKQorCisgICAgICAgICAgICB6aXBmcCAgPSB6aXBmaWxlLlB5WmlwRmlsZShUZW1wb3JhcnlGaWxlKCksICJ3IikKKyAgICAgICAgICAgIHppcGZwLndyaXRlcHkoVEVTVEZOMikKKworICAgICAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ21vZDEucHljJyBpbiBuYW1lcyBvciAnbW9kMS5weW8nIGluIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdtb2QyLnB5YycgaW4gbmFtZXMgb3IgJ21vZDIucHlvJyBpbiBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21vZDIudHh0JywgbmFtZXMpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOMikKKworICAgIGRlZiB0ZXN0X3dyaXRlX25vbl9weWZpbGUoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5QeVppcEZpbGUoVGVtcG9yYXJ5RmlsZSgpLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgb3BlbihURVNURk4sICd3Jykud3JpdGUoJ21vc3QgZGVmaW5pdGVseSBub3QgYSBweXRob24gZmlsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGZwLndyaXRlcHksIFRFU1RGTikKKyAgICAgICAgICAgIG9zLnJlbW92ZShURVNURk4pCisKKworY2xhc3MgT3RoZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgemlwc193aXRoX2JhZF9jcmMgPSB7CisgICAgICAgIHppcGZpbGUuWklQX1NUT1JFRDogKAorICAgICAgICAgICAgYidQS1wwMDNcMDA0XDAyNFwwXDBcMFwwXDAgXDIxM1wyMTI7OnInCisgICAgICAgICAgICBiJ1wyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDAwMGFmJworICAgICAgICAgICAgYidpbGVoZWxsbyxBd29ybGRQJworICAgICAgICAgICAgYidLXDAwMVwwMDJcMDI0XDAwM1wwMjRcMFwwXDBcMFwwIFwyMTNcMjEyOzonCisgICAgICAgICAgICBiJ3JcMjUzXDM3N1xmXDBcMFwwXGZcMFwwXDBcMDA1XDBcMFwwXDAnCisgICAgICAgICAgICBiJ1wwXDBcMFwwXDBcMFwwXDIwMFwwMDFcMFwwXDBcMDAwYWZpJworICAgICAgICAgICAgYidsZVBLXDAwNVwwMDZcMFwwXDBcMFwwMDFcMFwwMDFcMDAwM1wwMDAnCisgICAgICAgICAgICBiJ1wwXDAvXDBcMFwwXDBcMCcpLAorICAgICAgICB6aXBmaWxlLlpJUF9ERUZMQVRFRDogKAorICAgICAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDBceDAwXHgwMFx4MDhceDAwbn1ceDBjPUZBJworICAgICAgICAgICAgYidLRVx4MTBceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJworICAgICAgICAgICAgYidpbGVceGNiSFx4Y2RceGM5XHhjOVcoXHhjZi9ceGNhSVx4YzlceGEwJworICAgICAgICAgICAgYic9XHgxM1x4MDBQS1x4MDFceDAyXHgxNFx4MDNceDE0XHgwMFx4MDBceDAwXHgwOFx4MDBuJworICAgICAgICAgICAgYid9XHgwYz1GQUtFXHgxMFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1JworICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ODBceDAxXHgwMFx4MDBceDAwJworICAgICAgICAgICAgYidceDAwYWZpbGVQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwJworICAgICAgICAgICAgYidceDAxXHgwMDNceDAwXHgwMFx4MDAzXHgwMFx4MDBceDAwXHgwMFx4MDAnKSwKKyAgICB9CisKKyAgICBkZWYgdGVzdF91bmljb2RlX2ZpbGVuYW1lcyhzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAidyIpIGFzIHpmOgorICAgICAgICAgICAgemYud3JpdGVzdHIodSJmb28udHh0IiwgIlRlc3QgZm9yIHVuaWNvZGUgZmlsZW5hbWUiKQorICAgICAgICAgICAgemYud3JpdGVzdHIodSJceGY2LnR4dCIsICJUZXN0IGZvciB1bmljb2RlIGZpbGVuYW1lIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh6Zi5pbmZvbGlzdCgpWzBdLmZpbGVuYW1lLCB1bmljb2RlKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgInIiKSBhcyB6ZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemYuZmlsZWxpc3RbMF0uZmlsZW5hbWUsICJmb28udHh0IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemYuZmlsZWxpc3RbMV0uZmlsZW5hbWUsIHUiXHhmNi50eHQiKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX25vbl9leGlzdGVudF9maWxlX2Zvcl9hcHBlbmQoc2VsZik6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKFRFU1RGTik6CisgICAgICAgICAgICBvcy51bmxpbmsoVEVTVEZOKQorCisgICAgICAgIGZpbGVuYW1lID0gJ3Rlc3RmaWxlLnR4dCcKKyAgICAgICAgY29udGVudCA9ICdoZWxsbywgd29ybGQuIHRoaXMgaXMgc29tZSBjb250ZW50LicKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICdhJykgYXMgemY6CisgICAgICAgICAgICAgICAgemYud3JpdGVzdHIoZmlsZW5hbWUsIGNvbnRlbnQpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdDb3VsZCBub3QgYXBwZW5kIGRhdGEgdG8gYSBub24tZXhpc3RlbnQgemlwIGZpbGUuJykKKworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoVEVTVEZOKSkKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICdyJykgYXMgemY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpmLnJlYWQoZmlsZW5hbWUpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3RfY2xvc2VfZXJyb25lb3VzX2ZpbGUoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBaaXBGaWxlIGNvbnN0cnVjdG9yIGNsb3NlcyB0aGUgZmlsZSBvYmplY3QKKyAgICAgICAgIyBpdCBvcGVucyBpZiB0aGVyZSdzIGFuIGVycm9yIGluIHRoZSBmaWxlLiAgSWYgaXQgZG9lc24ndCwgdGhlCisgICAgICAgICMgdHJhY2ViYWNrIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBaaXBGaWxlIG9iamVjdCBhbmQsIGluZGlyZWN0bHksCisgICAgICAgICMgdGhlIGZpbGUgb2JqZWN0LgorICAgICAgICAjIE9uIFdpbmRvd3MsIHRoaXMgY2F1c2VzIHRoZSBvcy51bmxpbmsoKSBjYWxsIHRvIGZhaWwgYmVjYXVzZSB0aGUKKyAgICAgICAgIyB1bmRlcmx5aW5nIGZpbGUgaXMgc3RpbGwgb3Blbi4gIFRoaXMgaXMgU0YgYnVnICM0MTIyMTQuCisgICAgICAgICMKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgInciKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKCJ0aGlzIGlzIG5vdCBhIGxlZ2FsIHppcCBmaWxlXG4iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB6ZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4pCisgICAgICAgIGV4Y2VwdCB6aXBmaWxlLkJhZFppcGZpbGU6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9pc196aXBfZXJyb25lb3VzX2ZpbGUoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgaXNfemlwZmlsZSgpIGNvcnJlY3RseSBpZGVudGlmaWVzIG5vbi16aXAgZmlsZXMuIiIiCisgICAgICAgICMgLSBwYXNzaW5nIGEgZmlsZW5hbWUKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgInciKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKCJ0aGlzIGlzIG5vdCBhIGxlZ2FsIHppcCBmaWxlXG4iKQorICAgICAgICBjaGsgPSB6aXBmaWxlLmlzX3ppcGZpbGUoVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNoaykKKyAgICAgICAgIyAtIHBhc3NpbmcgYSBmaWxlIG9iamVjdAorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAicmIiKSBhcyBmcDoKKyAgICAgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShmcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY2hrKQorICAgICAgICAjIC0gcGFzc2luZyBhIGZpbGUtbGlrZSBvYmplY3QKKyAgICAgICAgZnAgPSBTdHJpbmdJTygpCisgICAgICAgIGZwLndyaXRlKCJ0aGlzIGlzIG5vdCBhIGxlZ2FsIHppcCBmaWxlXG4iKQorICAgICAgICBjaGsgPSB6aXBmaWxlLmlzX3ppcGZpbGUoZnApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgY2hrKQorICAgICAgICBmcC5zZWVrKDAsIDApCisgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShmcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjaGspCisKKyAgICBkZWYgdGVzdF9kYW1hZ2VkX3ppcGZpbGUoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgemlwZmlsZXMgd2l0aCBtaXNzaW5nIGJ5dGVzIGF0IHRoZSBlbmQgcmFpc2UgQmFkWmlwRmlsZS4iIiIKKyAgICAgICAgIyAtIENyZWF0ZSBhIHZhbGlkIHppcCBmaWxlCisgICAgICAgIGZwID0gaW8uQnl0ZXNJTygpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGZwLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCBiIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorICAgICAgICB6aXBmaWxlZGF0YSA9IGZwLmdldHZhbHVlKCkKKworICAgICAgICAjIC0gTm93IGNyZWF0ZSBjb3BpZXMgb2YgaXQgbWlzc2luZyB0aGUgbGFzdCBOIGJ5dGVzIGFuZCBtYWtlIHN1cmUKKyAgICAgICAgIyAgIGEgQmFkWmlwRmlsZSBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gd2UgdHJ5IHRvIG9wZW4gaXQKKyAgICAgICAgZm9yIE4gaW4gcmFuZ2UobGVuKHppcGZpbGVkYXRhKSk6CisgICAgICAgICAgICBmcCA9IGlvLkJ5dGVzSU8oemlwZmlsZWRhdGFbOk5dKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5CYWRaaXBmaWxlLCB6aXBmaWxlLlppcEZpbGUsIGZwKQorCisgICAgZGVmIHRlc3RfaXNfemlwX3ZhbGlkX2ZpbGUoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgaXNfemlwZmlsZSgpIGNvcnJlY3RseSBpZGVudGlmaWVzIHppcCBmaWxlcy4iIiIKKyAgICAgICAgIyAtIHBhc3NpbmcgYSBmaWxlbmFtZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKyAgICAgICAgY2hrID0gemlwZmlsZS5pc196aXBmaWxlKFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoaykKKyAgICAgICAgIyAtIHBhc3NpbmcgYSBmaWxlIG9iamVjdAorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAicmIiKSBhcyBmcDoKKyAgICAgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShmcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaGspCisgICAgICAgICAgICBmcC5zZWVrKDAsIDApCisgICAgICAgICAgICB6aXBfY29udGVudHMgPSBmcC5yZWFkKCkKKyAgICAgICAgIyAtIHBhc3NpbmcgYSBmaWxlLWxpa2Ugb2JqZWN0CisgICAgICAgIGZwID0gU3RyaW5nSU8oKQorICAgICAgICBmcC53cml0ZSh6aXBfY29udGVudHMpCisgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShmcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoaykKKyAgICAgICAgZnAuc2VlaygwLCAwKQorICAgICAgICBjaGsgPSB6aXBmaWxlLmlzX3ppcGZpbGUoZnApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaGspCisKKyAgICBkZWYgdGVzdF9ub25fZXhpc3RlbnRfZmlsZV9yYWlzZXNfSU9FcnJvcihzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgd2UgZG9uJ3QgcmFpc2UgYW4gQXR0cmlidXRlRXJyb3Igd2hlbiBhIHBhcnRpYWxseS1jb25zdHJ1Y3RlZAorICAgICAgICAjIFppcEZpbGUgaW5zdGFuY2UgaXMgZmluYWxpemVkOyB0aGlzIHRlc3RzIGZvciByZWdyZXNzaW9uIG9uIFNGIHRyYWNrZXIKKyAgICAgICAgIyBidWcgIzQwMzg3MS4KKworICAgICAgICAjIFRoZSBidWcgd2UncmUgdGVzdGluZyBmb3IgY2F1c2VkIGFuIEF0dHJpYnV0ZUVycm9yIHRvIGJlIHJhaXNlZAorICAgICAgICAjIHdoZW4gYSBaaXBGaWxlIGluc3RhbmNlIHdhcyBjcmVhdGVkIGZvciBhIGZpbGUgdGhhdCBkaWQgbm90CisgICAgICAgICMgZXhpc3Q7IHRoZSAuZnAgbWVtYmVyIHdhcyBub3QgaW5pdGlhbGl6ZWQgYnV0IHdhcyBuZWVkZWQgYnkgdGhlCisgICAgICAgICMgX19kZWxfXygpIG1ldGhvZC4gIFNpbmNlIHRoZSBBdHRyaWJ1dGVFcnJvciBpcyBpbiB0aGUgX19kZWxfXygpLAorICAgICAgICAjIGl0IGlzIGlnbm9yZWQsIGJ1dCB0aGUgdXNlciBzaG91bGQgYmUgc3VmZmljaWVudGx5IGFubm95ZWQgYnkKKyAgICAgICAgIyB0aGUgbWVzc2FnZSBvbiB0aGUgb3V0cHV0IHRoYXQgcmVncmVzc2lvbiB3aWxsIGJlIG5vdGljZWQKKyAgICAgICAgIyBxdWlja2x5LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB6aXBmaWxlLlppcEZpbGUsIFRFU1RGTikKKworICAgIGRlZiB0ZXN0X2VtcHR5X2ZpbGVfcmFpc2VzX0JhZFppcEZpbGUoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3JykgYXMgZjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5CYWRaaXBmaWxlLCB6aXBmaWxlLlppcEZpbGUsIFRFU1RGTikKKworICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAndycpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoInNob3J0IGZpbGUiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcGZpbGUsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOKQorCisgICAgZGVmIHRlc3RfY2xvc2VkX3ppcF9yYWlzZXNfUnVudGltZUVycm9yKHNlbGYpOgorICAgICAgICAiIiJWZXJpZnkgdGhhdCB0ZXN0emlwKCkgZG9lc24ndCBzd2FsbG93IGluYXBwcm9wcmlhdGUgZXhjZXB0aW9ucy4iIiIKKyAgICAgICAgZGF0YSA9IFN0cmluZ0lPKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZGF0YSwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorCisgICAgICAgICMgVGhpcyBpcyBjb3JyZWN0OyBjYWxsaW5nIC5yZWFkIG9uIGEgY2xvc2VkIFppcEZpbGUgc2hvdWxkIHJhaXNlCisgICAgICAgICMgYSBSdW50aW1lRXJyb3IsIGFuZCBzbyBzaG91bGQgY2FsbGluZyAudGVzdHppcC4gIEFuIGVhcmxpZXIKKyAgICAgICAgIyB2ZXJzaW9uIG9mIC50ZXN0emlwIHdvdWxkIHN3YWxsb3cgdGhpcyBleGNlcHRpb24gKGFuZCBhbnkgb3RoZXIpCisgICAgICAgICMgYW5kIHJlcG9ydCB0aGF0IHRoZSBmaXJzdCBmaWxlIGluIHRoZSBhcmNoaXZlIHdhcyBjb3JydXB0LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGYucmVhZCwgImZvby50eHQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGYub3BlbiwgImZvby50eHQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGYudGVzdHppcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmLndyaXRlc3RyLCAiYm9ndXMudHh0IiwgImJvZ3VzIikKKyAgICAgICAgb3BlbihURVNURk4sICd3Jykud3JpdGUoJ3ppcGZpbGUgdGVzdCBkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmLndyaXRlLCBURVNURk4pCisKKyAgICBkZWYgdGVzdF9iYWRfY29uc3RydWN0b3JfbW9kZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBiYWQgbW9kZXMgcGFzc2VkIHRvIFppcEZpbGUgY29uc3RydWN0b3IgYXJlIGNhdWdodC4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmaWxlLlppcEZpbGUsIFRFU1RGTiwgInEiKQorCisgICAgZGVmIHRlc3RfYmFkX29wZW5fbW9kZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBiYWQgbW9kZXMgcGFzc2VkIHRvIFppcEZpbGUub3BlbiBhcmUgY2F1Z2h0LiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAjIHJlYWQgdGhlIGRhdGEgdG8gbWFrZSBzdXJlIHRoZSBmaWxlIGlzIHRoZXJlCisgICAgICAgICAgICB6aXBmLnJlYWQoImZvby50eHQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmLm9wZW4sICJmb28udHh0IiwgInEiKQorCisgICAgZGVmIHRlc3RfcmVhZDAoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgY2FsbGluZyByZWFkKDApIG9uIGEgWmlwRXh0RmlsZSBvYmplY3QgcmV0dXJucyBhbiBlbXB0eQorICAgICAgICBzdHJpbmcgYW5kIGRvZXNuJ3QgYWR2YW5jZSBmaWxlIHBvaW50ZXIuIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorICAgICAgICAgICAgIyByZWFkIHRoZSBkYXRhIHRvIG1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB0aGVyZQorICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oImZvby50eHQiKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShGSVhFRFRFU1RfU0laRSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDApLCAnJykKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKworICAgIGRlZiB0ZXN0X29wZW5fbm9uX2V4aXN0ZW50X2l0ZW0oc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgYXR0ZW1wdGluZyB0byBjYWxsIG9wZW4oKSBmb3IgYW4gaXRlbSB0aGF0IGRvZXNuJ3QKKyAgICAgICAgZXhpc3QgaW4gdGhlIGFyY2hpdmUgcmFpc2VzIGEgUnVudGltZUVycm9yLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHppcGYub3BlbiwgImZvby50eHQiLCAiciIpCisKKyAgICBkZWYgdGVzdF9iYWRfY29tcHJlc3Npb25fbW9kZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBiYWQgY29tcHJlc3Npb24gbWV0aG9kcyBwYXNzZWQgdG8gWmlwRmlsZS5vcGVuIGFyZQorICAgICAgICBjYXVnaHQuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4sICJ3IiwgLTEpCisKKyAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF9jb21wcmVzc2lvbihzZWxmKToKKyAgICAgICAgIyBkYXRhIGlzIGRlY2xhcmVkIGFzIHNocnVuaywgYnV0IGFjdHVhbGx5IGRlZmxhdGVkCisgICAgICAgIGRhdGEgPSAoYidQS1x4MDNceDA0Llx4MDBceDAwXHgwMFx4MDFceDAwXHhlNENceGExQFx4MDBceDAwXHgwMCcKKyAgICAgICAgYidceDAwXHgwMlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAweFx4MDNceDAwUEtceDAxJworICAgICAgICBiJ1x4MDIuXHgwMy5ceDAwXHgwMFx4MDBceDAxXHgwMFx4ZTRDXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwJworICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICBiJ1x4ODBceDAxXHgwMFx4MDBceDAwXHgwMHhQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAnCisgICAgICAgIGInL1x4MDBceDAwXHgwMCFceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oZGF0YSksICdyJykgYXMgemlwZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHppcGYub3BlbiwgJ3gnKQorCisgICAgZGVmIHRlc3RfbnVsbF9ieXRlX2luX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGEgZmlsZW5hbWUgY29udGFpbmluZyBhIG51bGwgYnl0ZSBpcyBwcm9wZXJseQorICAgICAgICB0ZXJtaW5hdGVkLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dFx4MDBxcXEiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGYubmFtZWxpc3QoKSwgWydmb28udHh0J10pCisKKyAgICBkZWYgdGVzdF9zdHJ1Y3Rfc2l6ZXMoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgWklQIGludGVybmFsIHN0cnVjdHVyZSBzaXplcyBhcmUgY2FsY3VsYXRlZCBjb3JyZWN0bHkuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZmlsZS5zaXplRW5kQ2VudERpciwgMjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZmlsZS5zaXplQ2VudHJhbERpciwgNDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZmlsZS5zaXplRW5kQ2VudERpcjY0LCA1NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmaWxlLnNpemVFbmRDZW50RGlyNjRMb2NhdG9yLCAyMCkKKworICAgIGRlZiB0ZXN0X2NvbW1lbnRzKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGNvbW1lbnRzIG9uIHRoZSBhcmNoaXZlIGFyZSBoYW5kbGVkIHByb3Blcmx5LiIiIgorCisgICAgICAgICMgY2hlY2sgZGVmYXVsdCBjb21tZW50IGlzIGVtcHR5CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGYuY29tbWVudCwgJycpCisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGYuY29tbWVudCwgJycpCisKKyAgICAgICAgIyBjaGVjayBhIHNpbXBsZSBzaG9ydCBjb21tZW50CisgICAgICAgIGNvbW1lbnQgPSAnQnJhdmVseSB0YWtpbmcgdG8gaGlzIGZlZXQsIGhlIGJlYXQgYSB2ZXJ5IGJyYXZlIHJldHJlYXQuJworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi5jb21tZW50ID0gY29tbWVudAorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZi5jb21tZW50LCBjb21tZW50KQorCisgICAgICAgICMgY2hlY2sgYSBjb21tZW50IG9mIG1heCBsZW5ndGgKKyAgICAgICAgY29tbWVudDIgPSAnJy5qb2luKFsnJWQnICUgKGkqKjMgJSAxMCkgZm9yIGkgaW4geHJhbmdlKCgxIDw8IDE2KS0xKV0pCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLmNvbW1lbnQgPSBjb21tZW50MgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmLmNvbW1lbnQsIGNvbW1lbnQyKQorCisgICAgICAgICMgY2hlY2sgYSBjb21tZW50IHRoYXQgaXMgdG9vIGxvbmcgaXMgdHJ1bmNhdGVkCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLmNvbW1lbnQgPSBjb21tZW50MiArICdvb3BzJworICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZi5jb21tZW50LCBjb21tZW50MikKKworICAgIGRlZiB0ZXN0X2NoYW5nZV9jb21tZW50X2luX2VtcHR5X2FyY2hpdmUoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgImEiLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHppcGYuZmlsZWxpc3QpCisgICAgICAgICAgICB6aXBmLmNvbW1lbnQgPSBiInRoaXMgaXMgYSBjb21tZW50IgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZi5jb21tZW50LCBiInRoaXMgaXMgYSBjb21tZW50IikKKworICAgIGRlZiB0ZXN0X2NoYW5nZV9jb21tZW50X2luX25vbmVtcHR5X2FyY2hpdmUoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICJhIiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppcGYuZmlsZWxpc3QpCisgICAgICAgICAgICB6aXBmLmNvbW1lbnQgPSBiInRoaXMgaXMgYSBjb21tZW50IgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZi5jb21tZW50LCBiInRoaXMgaXMgYSBjb21tZW50IikKKworICAgIGRlZiBjaGVja190ZXN0emlwX3dpdGhfYmFkX2NyYyhzZWxmLCBjb21wcmVzc2lvbik6CisgICAgICAgICIiIlRlc3RzIHRoYXQgZmlsZXMgd2l0aCBiYWQgQ1JDcyByZXR1cm4gdGhlaXIgbmFtZSBmcm9tIHRlc3R6aXAuIiIiCisgICAgICAgIHppcGRhdGEgPSBzZWxmLnppcHNfd2l0aF9iYWRfY3JjW2NvbXByZXNzaW9uXQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oemlwZGF0YSksIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgIyB0ZXN0emlwIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IGNvcnJ1cHQgZmlsZSwgb3IgTm9uZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWZpbGUnLCB6aXBmLnRlc3R6aXAoKSkKKworICAgIGRlZiB0ZXN0X3Rlc3R6aXBfd2l0aF9iYWRfY3JjX3N0b3JlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja190ZXN0emlwX3dpdGhfYmFkX2NyYyh6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfdGVzdHppcF93aXRoX2JhZF9jcmNfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdGVzdHppcF93aXRoX2JhZF9jcmMoemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBkZWYgY2hlY2tfcmVhZF93aXRoX2JhZF9jcmMoc2VsZiwgY29tcHJlc3Npb24pOgorICAgICAgICAiIiJUZXN0cyB0aGF0IGZpbGVzIHdpdGggYmFkIENSQ3MgcmFpc2UgYSBCYWRaaXBmaWxlIGV4Y2VwdGlvbiB3aGVuIHJlYWQuIiIiCisgICAgICAgIHppcGRhdGEgPSBzZWxmLnppcHNfd2l0aF9iYWRfY3JjW2NvbXByZXNzaW9uXQorCisgICAgICAgICMgVXNpbmcgWmlwRmlsZS5yZWFkKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTyh6aXBkYXRhKSwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcGZpbGUsIHppcGYucmVhZCwgJ2FmaWxlJykKKworICAgICAgICAjIFVzaW5nIFppcEV4dEZpbGUucmVhZCgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oemlwZGF0YSksIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ2FmaWxlJywgJ3InKSBhcyBjb3JydXB0X2ZpbGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5CYWRaaXBmaWxlLCBjb3JydXB0X2ZpbGUucmVhZCkKKworICAgICAgICAjIFNhbWUgd2l0aCBzbWFsbCByZWFkcyAoaW4gb3JkZXIgdG8gZXhlcmNpc2UgdGhlIGJ1ZmZlcmluZyBsb2dpYykKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTyh6aXBkYXRhKSwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICB3aXRoIHppcGYub3BlbignYWZpbGUnLCAncicpIGFzIGNvcnJ1cHRfZmlsZToKKyAgICAgICAgICAgICAgICBjb3JydXB0X2ZpbGUuTUlOX1JFQURfU0laRSA9IDIKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIGNvcnJ1cHRfZmlsZS5yZWFkKDIpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfcmVhZF93aXRoX2JhZF9jcmNfc3RvcmVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlYWRfd2l0aF9iYWRfY3JjKHppcGZpbGUuWklQX1NUT1JFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yZWFkX3dpdGhfYmFkX2NyY19kZWZsYXRlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWFkX3dpdGhfYmFkX2NyYyh6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgIGRlZiBjaGVja19yZWFkX3JldHVybl9zaXplKHNlbGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgIyBJc3N1ZSAjOTgzNzogWmlwRXh0RmlsZS5yZWFkKCkgc2hvdWxkbid0IHJldHVybiBtb3JlIGJ5dGVzCisgICAgICAgICMgdGhhbiByZXF1ZXN0ZWQuCisgICAgICAgIGZvciB0ZXN0X3NpemUgaW4gKDEsIDQwOTUsIDQwOTYsIDQwOTcsIDE2Mzg0KToKKyAgICAgICAgICAgIGZpbGVfc2l6ZSA9IHRlc3Rfc2l6ZSArIDEKKyAgICAgICAgICAgIGp1bmsgPSBiJycuam9pbihzdHJ1Y3QucGFjaygnQicsIHJhbmRpbnQoMCwgMjU1KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiByYW5nZShmaWxlX3NpemUpKQorICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTygpLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmOgorICAgICAgICAgICAgICAgIHppcGYud3JpdGVzdHIoJ2ZvbycsIGp1bmspCisgICAgICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ2ZvbycsICdyJykgYXMgZnA6CisgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWQodGVzdF9zaXplKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpLCB0ZXN0X3NpemUpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JldHVybl9zaXplX3N0b3JlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWFkX3JldHVybl9zaXplKHppcGZpbGUuWklQX1NUT1JFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yZWFkX3JldHVybl9zaXplX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlYWRfcmV0dXJuX3NpemUoemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBkZWYgdGVzdF9lbXB0eV96aXBmaWxlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgY3JlYXRpbmcgYSBmaWxlIGluICd3JyBvciAnYScgbW9kZSBhbmQgY2xvc2luZyB3aXRob3V0CisgICAgICAgICMgYWRkaW5nIGFueSBmaWxlcyB0byB0aGUgYXJjaGl2ZXMgY3JlYXRlcyBhIHZhbGlkIGVtcHR5IFpJUCBmaWxlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikKKyAgICAgICAgZXhjZXB0IHppcGZpbGUuQmFkWmlwZmlsZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVW5hYmxlIHRvIGNyZWF0ZSBlbXB0eSBaSVAgZmlsZSBpbiAndycgbW9kZSIpCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJhIikgYXMgemlwZjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlVuYWJsZSB0byBjcmVhdGUgZW1wdHkgWklQIGZpbGUgaW4gJ2EnIG1vZGUiKQorCisgICAgZGVmIHRlc3Rfb3Blbl9lbXB0eV9maWxlKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE3MTA3MDM6IENoZWNrIHRoYXQgb3BlbmluZyBhIGZpbGUgd2l0aCBsZXNzIHRoYW4gMjIgYnl0ZXMKKyAgICAgICAgIyByYWlzZXMgYSBCYWRaaXBmaWxlIGV4Y2VwdGlvbiAocmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzbHkgdW5oZWxwZnVsCisgICAgICAgICMgSU9FcnJvcikKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcGZpbGUsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOLCAncicpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfemlwaW5mb19iZWZvcmVfMTk4MChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgemlwZmlsZS5aaXBJbmZvLCAnc2V2ZW50aWVzJywgKDE5NzksIDEsIDEsIDAsIDAsIDApKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICB1bmxpbmsoVEVTVEZOMikKKworCitjbGFzcyBEZWNyeXB0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkNoZWNrIHRoYXQgWklQIGRlY3J5cHRpb24gd29ya3MuIFNpbmNlIHRoZSBsaWJyYXJ5IGRvZXMgbm90CisgICAgc3VwcG9ydCBlbmNyeXB0aW9uIGF0IHRoZSBtb21lbnQsIHdlIHVzZSBhIHByZS1nZW5lcmF0ZWQgZW5jcnlwdGVkCisgICAgWklQIGZpbGUuIiIiCisKKyAgICBkYXRhID0gKAorICAgICdQS1x4MDNceDA0XHgxNFx4MDBceDAxXHgwMFx4MDBceDAwblx4OTJpLiN5XHhlZj8mXHgwMFx4MDBceDAwXHgxYVx4MDAnCisgICAgJ1x4MDBceDAwXHgwOFx4MDBceDAwXHgwMHRlc3QudHh0XHhmYVx4MTBceGEwZ2x5fFx4ZmEtXHhjNVx4YzA9XHhmOXknCisgICAgJ1x4MThceGUwXHhhOHJceGIzWn1MZ1x4YmNceGFlXHhmOXxceDliXHgxOVx4ZTRceDhiXHhiYVx4YmIpXHg4Y1x4YjBceGRibCcKKyAgICAnUEtceDAxXHgwMlx4MTRceDAwXHgxNFx4MDBceDAxXHgwMFx4MDBceDAwblx4OTJpLiN5XHhlZj8mXHgwMFx4MDBceDAwJworICAgICdceDFhXHgwMFx4MDBceDAwXHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMCBceDAwXHhiNlx4ODEnCisgICAgJ1x4MDBceDAwXHgwMFx4MDB0ZXN0LnR4dFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDZceDAwJworICAgICdceDAwXHgwMExceDAwXHgwMFx4MDBceDAwXHgwMCcgKQorICAgIGRhdGEyID0gKAorICAgICdQS1x4MDNceDA0XHgxNFx4MDBcdFx4MDBceDA4XHgwMFx4Y2Z9Mzh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyJworICAgICdceDAwXHgwMFx4MDRceDAwXHgxNVx4MDB6ZXJvVVRcdFx4MDBceDAzXHhkNlx4OGJceDkyR1x4ZGFceDhiXHg5MkdVeFx4MDQnCisgICAgJ1x4MDBceGU4XHgwM1x4ZThceDAzXHhjNzxNXHhiNWFceGNlWFx4YTNZJlx4OGJ7b0VceGQ3XHg5ZFx4OGNceDk4XHgwMlx4YzAnCisgICAgJ1BLXHgwN1x4MDh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDBQS1x4MDFceDAyXHgxN1x4MDMnCisgICAgJ1x4MTRceDAwXHRceDAwXHgwOFx4MDBceGNmfTM4eHVceGFhXHhiMlx4MTRceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwJworICAgICdceDA0XHgwMFxyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhhNFx4ODFceDAwXHgwMFx4MDBceDAwemUnCisgICAgJ3JvVVRceDA1XHgwMFx4MDNceGQ2XHg4Ylx4OTJHVXhceDAwXHgwMFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMScKKyAgICAnXHgwMFx4MDFceDAwP1x4MDBceDAwXHgwMFtceDAwXHgwMFx4MDBceDAwXHgwMCcgKQorCisgICAgcGxhaW4gPSAnemlwZmlsZS5weSBlbmNyeXB0aW9uIHRlc3QnCisgICAgcGxhaW4yID0gJ1x4MDAnKjUxMgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YSkKKyAgICAgICAgc2VsZi56aXAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAiciIpCisgICAgICAgIHdpdGggb3BlbihURVNURk4yLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YTIpCisgICAgICAgIHNlbGYuemlwMiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuemlwLmNsb3NlKCkKKyAgICAgICAgb3MudW5saW5rKFRFU1RGTikKKyAgICAgICAgc2VsZi56aXAyLmNsb3NlKCkKKyAgICAgICAgb3MudW5saW5rKFRFU1RGTjIpCisKKyAgICBkZWYgdGVzdF9ub19wYXNzd29yZChzZWxmKToKKyAgICAgICAgIyBSZWFkaW5nIHRoZSBlbmNyeXB0ZWQgZmlsZSB3aXRob3V0IHBhc3N3b3JkCisgICAgICAgICMgbXVzdCBnZW5lcmF0ZSBhIFJ1blRpbWUgZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2VsZi56aXAucmVhZCwgInRlc3QudHh0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLnppcDIucmVhZCwgInplcm8iKQorCisgICAgZGVmIHRlc3RfYmFkX3Bhc3N3b3JkKHNlbGYpOgorICAgICAgICBzZWxmLnppcC5zZXRwYXNzd29yZCgicGVybCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2VsZi56aXAucmVhZCwgInRlc3QudHh0IikKKyAgICAgICAgc2VsZi56aXAyLnNldHBhc3N3b3JkKCJwZXJsIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLnppcDIucmVhZCwgInplcm8iKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X2dvb2RfcGFzc3dvcmQoc2VsZik6CisgICAgICAgIHNlbGYuemlwLnNldHBhc3N3b3JkKCJweXRob24iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuemlwLnJlYWQoInRlc3QudHh0IiksIHNlbGYucGxhaW4pCisgICAgICAgIHNlbGYuemlwMi5zZXRwYXNzd29yZCgiMTIzNDUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuemlwMi5yZWFkKCJ6ZXJvIiksIHNlbGYucGxhaW4yKQorCisKK2NsYXNzIFRlc3RzV2l0aFJhbmRvbUJpbmFyeUZpbGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGRhdGFjb3VudCA9IHJhbmRpbnQoMTYsIDY0KSoxMDI0ICsgcmFuZGludCgxLCAxMDI0KQorICAgICAgICBzZWxmLmRhdGEgPSAnJy5qb2luKHN0cnVjdC5wYWNrKCc8ZicsIHJhbmRvbSgpKnJhbmRpbnQoLTEwMDAsIDEwMDApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShkYXRhY291bnQpKQorCisgICAgICAgICMgTWFrZSBhIHNvdXJjZSBmaWxlIHdpdGggc29tZSBsaW5lcworICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgdW5saW5rKFRFU1RGTjIpCisKKyAgICBkZWYgbWFrZV90ZXN0X2FyY2hpdmUoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICAjIENyZWF0ZSB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICJhbm90aGVyLm5hbWUiKQorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCBURVNURk4pCisKKyAgICBkZWYgemlwX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorCisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICB0ZXN0ZGF0YSA9IHppcGZwLnJlYWQoVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGVzdGRhdGEpLCBsZW4oc2VsZi5kYXRhKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGRhdGEsIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgiYW5vdGhlci5uYW1lIiksIHNlbGYuZGF0YSkKKworICAgIGRlZiB0ZXN0X3N0b3JlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBkZWYgemlwX29wZW5fdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCisKKyAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGRhdGExID0gW10KKyAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihURVNURk4pIGFzIHppcG9wZW4xOgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4xLnJlYWQoMjU2KQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgemlwZGF0YTEuYXBwZW5kKHJlYWRfZGF0YSkKKworICAgICAgICAgICAgemlwZGF0YTIgPSBbXQorICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKCJhbm90aGVyLm5hbWUiKSBhcyB6aXBvcGVuMjoKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMi5yZWFkKDI1NikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIHppcGRhdGEyLmFwcGVuZChyZWFkX2RhdGEpCisKKyAgICAgICAgICAgIHRlc3RkYXRhMSA9ICcnLmpvaW4oemlwZGF0YTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0ZGF0YTEpLCBsZW4oc2VsZi5kYXRhKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGRhdGExLCBzZWxmLmRhdGEpCisKKyAgICAgICAgICAgIHRlc3RkYXRhMiA9ICcnLmpvaW4oemlwZGF0YTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0ZGF0YTIpLCBsZW4oc2VsZi5kYXRhKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGRhdGEyLCBzZWxmLmRhdGEpCisKKyAgICBkZWYgdGVzdF9vcGVuX3N0b3JlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9vcGVuX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X29wZW5fZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIGlvLkJ5dGVzSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9vcGVuX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBkZWYgemlwX3JhbmRvbV9vcGVuX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorCisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBkYXRhMSA9IFtdCisgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oVEVTVEZOKSBhcyB6aXBvcGVuMToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMS5yZWFkKHJhbmRpbnQoMSwgMTAyNCkpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICB6aXBkYXRhMS5hcHBlbmQocmVhZF9kYXRhKQorCisgICAgICAgICAgICB0ZXN0ZGF0YSA9ICcnLmpvaW4oemlwZGF0YTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0ZGF0YSksIGxlbihzZWxmLmRhdGEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZGF0YSwgc2VsZi5kYXRhKQorCisgICAgZGVmIHRlc3RfcmFuZG9tX29wZW5fc3RvcmVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3JhbmRvbV9vcGVuX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JhbmRvbV9vcGVuX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfcmFuZG9tX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworCitAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCitjbGFzcyBUZXN0c1dpdGhNdWx0aXBsZU9wZW5zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX0RFRkxBVEVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCdvbmVzJywgJzEnKkZJWEVEVEVTVF9TSVpFKQorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoJ3R3b3MnLCAnMicqRklYRURURVNUX1NJWkUpCisKKyAgICBkZWYgdGVzdF9zYW1lX2ZpbGUoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgKHdoZW4gdGhlIFppcEZpbGUgaXMgaW4gY29udHJvbCBvZiBjcmVhdGluZyBmaWxlIG9iamVjdHMpCisgICAgICAgICMgbXVsdGlwbGUgb3BlbigpIGNhbGxzIGNhbiBiZSBtYWRlIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHpvcGVuMSA9IHppcGYub3Blbignb25lcycpCisgICAgICAgICAgICB6b3BlbjIgPSB6aXBmLm9wZW4oJ29uZXMnKQorICAgICAgICAgICAgZGF0YTEgPSB6b3BlbjEucmVhZCg1MDApCisgICAgICAgICAgICBkYXRhMiA9IHpvcGVuMi5yZWFkKDUwMCkKKyAgICAgICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKDUwMCkKKyAgICAgICAgICAgIGRhdGEyICs9IHpvcGVuMi5yZWFkKDUwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsIGRhdGEyKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW50X2ZpbGUoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgKHdoZW4gdGhlIFppcEZpbGUgaXMgaW4gY29udHJvbCBvZiBjcmVhdGluZyBmaWxlIG9iamVjdHMpCisgICAgICAgICMgbXVsdGlwbGUgb3BlbigpIGNhbGxzIGNhbiBiZSBtYWRlIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHdpdGggemlwZi5vcGVuKCdvbmVzJykgYXMgem9wZW4xLCB6aXBmLm9wZW4oJ3R3b3MnKSBhcyB6b3BlbjI6CisgICAgICAgICAgICAgICAgZGF0YTEgPSB6b3BlbjEucmVhZCg1MDApCisgICAgICAgICAgICAgICAgZGF0YTIgPSB6b3BlbjIucmVhZCg1MDApCisgICAgICAgICAgICAgICAgZGF0YTEgKz0gem9wZW4xLnJlYWQoNTAwKQorICAgICAgICAgICAgICAgIGRhdGEyICs9IHpvcGVuMi5yZWFkKDUwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsICcxJypGSVhFRFRFU1RfU0laRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsICcyJypGSVhFRFRFU1RfU0laRSkKKworICAgIGRlZiB0ZXN0X2ludGVybGVhdmVkKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0ICh3aGVuIHRoZSBaaXBGaWxlIGlzIGluIGNvbnRyb2wgb2YgY3JlYXRpbmcgZmlsZSBvYmplY3RzKQorICAgICAgICAjIG11bHRpcGxlIG9wZW4oKSBjYWxscyBjYW4gYmUgbWFkZSB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlci4KKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICB3aXRoIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMSwgemlwZi5vcGVuKCd0d29zJykgYXMgem9wZW4yOgorICAgICAgICAgICAgICAgIGRhdGExID0gem9wZW4xLnJlYWQoNTAwKQorICAgICAgICAgICAgICAgIGRhdGEyID0gem9wZW4yLnJlYWQoNTAwKQorICAgICAgICAgICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKDUwMCkKKyAgICAgICAgICAgICAgICBkYXRhMiArPSB6b3BlbjIucmVhZCg1MDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCAnMScqRklYRURURVNUX1NJWkUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEyLCAnMicqRklYRURURVNUX1NJWkUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHVubGluayhURVNURk4yKQorCisKK2NsYXNzIFRlc3RXaXRoRGlyZWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIG9zLm1rZGlyKFRFU1RGTjIpCisKKyAgICBkZWYgdGVzdF9leHRyYWN0X2RpcihzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZmluZGZpbGUoInppcGRpci56aXAiKSkgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYuZXh0cmFjdGFsbChURVNURk4yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgImEiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihURVNURk4yLCAiYSIsICJiIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKFRFU1RGTjIsICJhIiwgImIiLCAiYyIpKSkKKworICAgIGRlZiB0ZXN0X2J1Z182MDUwKHNlbGYpOgorICAgICAgICAjIEV4dHJhY3Rpb24gc2hvdWxkIHN1Y2NlZWQgaWYgZGlyZWN0b3JpZXMgYWxyZWFkeSBleGlzdAorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgImEiKSkKKyAgICAgICAgc2VsZi50ZXN0X2V4dHJhY3RfZGlyKCkKKworICAgIGRlZiB0ZXN0X3N0b3JlX2RpcihzZWxmKToKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKFRFU1RGTjIsICJ4IikpCisgICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAidyIpCisgICAgICAgIHppcGYud3JpdGUob3MucGF0aC5qb2luKFRFU1RGTjIsICJ4IiksICJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppcGYuZmlsZWxpc3RbMF0uZmlsZW5hbWUuZW5kc3dpdGgoIngvIikpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOMikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoVEVTVEZOKToKKyAgICAgICAgICAgIHVubGluayhURVNURk4pCisKKworY2xhc3MgVW5pdmVyc2FsTmV3bGluZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubGluZV9nZW4gPSBbIlRlc3Qgb2YgemlwZmlsZSBsaW5lICVkLiIgJSBpCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKEZJWEVEVEVTVF9TSVpFKV0KKyAgICAgICAgc2VsZi5zZXBzID0gKCdccicsICdcclxuJywgJ1xuJykKKyAgICAgICAgc2VsZi5hcmNkYXRhLCBzZWxmLmFyY2ZpbGVzID0ge30sIHt9CisgICAgICAgIGZvciBuLCBzIGluIGVudW1lcmF0ZShzZWxmLnNlcHMpOgorICAgICAgICAgICAgc2VsZi5hcmNkYXRhW3NdID0gcy5qb2luKHNlbGYubGluZV9nZW4pICsgcworICAgICAgICAgICAgc2VsZi5hcmNmaWxlc1tzXSA9ICclcy0lZCcgJSAoVEVTVEZOLCBuKQorICAgICAgICAgICAgb3BlbihzZWxmLmFyY2ZpbGVzW3NdLCAid2IiKS53cml0ZShzZWxmLmFyY2RhdGFbc10pCisKKyAgICBkZWYgbWFrZV90ZXN0X2FyY2hpdmUoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICAjIENyZWF0ZSB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3IgZm4gaW4gc2VsZi5hcmNmaWxlcy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZShmbiwgZm4pCisKKyAgICBkZWYgcmVhZF90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKworICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAgICAgemlwZGF0YSA9IGZwLnJlYWQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmNkYXRhW3NlcF0sIHppcGRhdGEpCisKKyAgICBkZWYgcmVhZGxpbmVfcmVhZF90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKworICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIikKKyAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgorICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyB6aXBvcGVuOgorICAgICAgICAgICAgICAgIGRhdGEgPSAnJworICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHJlYWQgPSB6aXBvcGVuLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBkYXRhICs9IHJlYWQKKworICAgICAgICAgICAgICAgICAgICByZWFkID0gemlwb3Blbi5yZWFkKDUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZGF0YSArPSByZWFkCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc2VsZi5hcmNkYXRhWydcbiddKQorCisgICAgICAgIHppcGZwLmNsb3NlKCkKKworICAgIGRlZiByZWFkbGluZV90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKworICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyB6aXBvcGVuOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmxpbmVfZ2VuOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZWRhdGEgPSB6aXBvcGVuLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZWRhdGEsIGxpbmUgKyAnXG4nKQorCisgICAgZGVmIHJlYWRsaW5lc190ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKworICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAgICAgemlwbGluZXMgPSBmcC5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIGZvciBsaW5lLCB6aXBsaW5lIGluIHppcChzZWxmLmxpbmVfZ2VuLCB6aXBsaW5lcyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArICdcbicpCisKKyAgICBkZWYgaXRlcmxpbmVzX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorCisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSwgemlwbGluZSBpbiB6aXAoc2VsZi5saW5lX2dlbiwgemlwZnAub3BlbihmbiwgInJVIikpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGxpbmUsIGxpbmUgKyAnXG4nKQorCisgICAgZGVmIHRlc3RfcmVhZF9zdG9yZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi5yZWFkX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfcmVhZF9zdG9yZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzc2MTA6IGNhbGxzIHRvIHJlYWRsaW5lKCkgaW50ZXJsZWF2ZWQgd2l0aCBjYWxscyB0byByZWFkKCkuCisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi5yZWFkbGluZV9yZWFkX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfc3RvcmVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYucmVhZGxpbmVfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXNfc3RvcmVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYucmVhZGxpbmVzX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgZGVmIHRlc3RfaXRlcmxpbmVzX3N0b3JlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLml0ZXJsaW5lc190ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKworICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9yZWFkX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBTdHJpbmdJTygpKToKKyAgICAgICAgICAgIHNlbGYucmVhZF90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRsaW5lX3JlYWRfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzc2MTA6IGNhbGxzIHRvIHJlYWRsaW5lKCkgaW50ZXJsZWF2ZWQgd2l0aCBjYWxscyB0byByZWFkKCkuCisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi5yZWFkbGluZV9yZWFkX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIFN0cmluZ0lPKCkpOgorICAgICAgICAgICAgc2VsZi5yZWFkbGluZV90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRsaW5lc19kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLnJlYWRsaW5lc190ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X2l0ZXJsaW5lc19kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgU3RyaW5nSU8oKSk6CisgICAgICAgICAgICBzZWxmLml0ZXJsaW5lc190ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6CisgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCisgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgIHVubGluayhURVNURk4yKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoVGVzdHNXaXRoU291cmNlRmlsZSwgVGVzdFppcDY0SW5TbWFsbEZpbGVzLCBPdGhlclRlc3RzLAorICAgICAgICAgICAgICAgICBQeVppcEZpbGVUZXN0cywgRGVjcnlwdGlvblRlc3RzLCBUZXN0c1dpdGhNdWx0aXBsZU9wZW5zLAorICAgICAgICAgICAgICAgICBUZXN0V2l0aERpcmVjdG9yeSwgVW5pdmVyc2FsTmV3bGluZVRlc3RzLAorICAgICAgICAgICAgICAgICBUZXN0c1dpdGhSYW5kb21CaW5hcnlGaWxlcykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfemlwZmlsZTY0LnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfemlwZmlsZTY0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZjNkY2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF96aXBmaWxlNjQucHkKQEAgLTAsMCArMSwxMjQgQEAKKyMgVGVzdHMgb2YgdGhlIGZ1bGwgWklQNjQgZnVuY3Rpb25hbGl0eSBvZiB6aXBmaWxlCisjIFRoZSB0ZXN0X3N1cHBvcnQucmVxdWlyZXMgY2FsbCBpcyB0aGUgb25seSByZWFzb24gZm9yIGtlZXBpbmcgdGhpcyBzZXBhcmF0ZQorIyBmcm9tIHRlc3RfemlwZmlsZQorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKKworIyBYWFgobm5vcndpdHopOiBkaXNhYmxlIHRoaXMgdGVzdCBieSBsb29raW5nIGZvciBleHRyYSBsYXJnZmlsZSByZXNvdXJjZQorIyB3aGljaCBkb2Vzbid0IGV4aXN0LiAgVGhpcyB0ZXN0IHRha2VzIG92ZXIgMzAgbWludXRlcyB0byBydW4gaW4gZ2VuZXJhbAorIyBhbmQgcmVxdWlyZXMgbW9yZSBkaXNrIHNwYWNlIHRoYW4gbW9zdCBvZiB0aGUgYnVpbGRib3RzLgordGVzdF9zdXBwb3J0LnJlcXVpcmVzKAorICAgICAgICAnZXh0cmFsYXJnZWZpbGUnLAorICAgICAgICAndGVzdCByZXF1aXJlcyBsb2FkcyBvZiBkaXNrLXNwYWNlIGJ5dGVzIGFuZCBhIGxvbmcgdGltZSB0byBydW4nCisgICAgKQorCisjIFdlIGNhbiB0ZXN0IHBhcnQgb2YgdGhlIG1vZHVsZSB3aXRob3V0IHpsaWIuCit0cnk6CisgICAgaW1wb3J0IHpsaWIKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB6bGliID0gTm9uZQorCitpbXBvcnQgemlwZmlsZSwgb3MsIHVuaXR0ZXN0CitpbXBvcnQgdGltZQoraW1wb3J0IHN5cworCitmcm9tIHRlbXBmaWxlIGltcG9ydCBUZW1wb3JhcnlGaWxlCisKK2Zyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0CisKK1RFU1RGTjIgPSBURVNURk4gKyAiMiIKKworIyBIb3cgbXVjaCB0aW1lIGluIHNlY29uZHMgY2FuIHBhc3MgYmVmb3JlIHdlIHByaW50IGEgJ1N0aWxsIHdvcmtpbmcnIG1lc3NhZ2UuCitfUFJJTlRfV09SS0lOR19NU0dfSU5URVJWQUwgPSA1ICogNjAKKworY2xhc3MgVGVzdHNXaXRoU291cmNlRmlsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIENyZWF0ZSB0ZXN0IGRhdGEuCisgICAgICAgICMgeHJhbmdlKCkgaXMgaW1wb3J0YW50IGhlcmUgLS0gZG9uJ3Qgd2FudCB0byBjcmVhdGUgaW1tb3J0YWwgc3BhY2UKKyAgICAgICAgIyBmb3IgYSBtaWxsaW9uIGludHMuCisgICAgICAgIGxpbmVfZ2VuID0gKCJUZXN0IG9mIHppcGZpbGUgbGluZSAlZC4iICUgaSBmb3IgaSBpbiB4cmFuZ2UoMTAwMDAwMCkpCisgICAgICAgIHNlbGYuZGF0YSA9ICdcbicuam9pbihsaW5lX2dlbikKKworICAgICAgICAjIEFuZCB3cml0ZSBpdCB0byBhIGZpbGUuCisgICAgICAgIGZwID0gb3BlbihURVNURk4sICJ3YiIpCisgICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YSkKKyAgICAgICAgZnAuY2xvc2UoKQorCisgICAgZGVmIHppcFRlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICAjIENyZWF0ZSB0aGUgWklQIGFyY2hpdmUuCisgICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24sIGFsbG93WmlwNjQ9VHJ1ZSkKKworICAgICAgICAjIEl0IHdpbGwgY29udGFpbiBlbm91Z2ggY29waWVzIG9mIHNlbGYuZGF0YSB0byByZWFjaCBhYm91dCA2R0Igb2YKKyAgICAgICAgIyByYXcgZGF0YSB0byBzdG9yZS4KKyAgICAgICAgZmlsZWNvdW50ID0gNioxMDI0KiozIC8vIGxlbihzZWxmLmRhdGEpCisKKyAgICAgICAgbmV4dF90aW1lID0gdGltZS50aW1lKCkgKyBfUFJJTlRfV09SS0lOR19NU0dfSU5URVJWQUwKKyAgICAgICAgZm9yIG51bSBpbiByYW5nZShmaWxlY291bnQpOgorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoInRlc3RmbiVkIiAlIG51bSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgIyBQcmludCBzdGlsbCB3b3JraW5nIG1lc3NhZ2Ugc2luY2UgdGhpcyB0ZXN0IGNhbiBiZSByZWFsbHkgc2xvdworICAgICAgICAgICAgaWYgbmV4dF90aW1lIDw9IHRpbWUudGltZSgpOgorICAgICAgICAgICAgICAgIG5leHRfdGltZSA9IHRpbWUudGltZSgpICsgX1BSSU5UX1dPUktJTkdfTVNHX0lOVEVSVkFMCisgICAgICAgICAgICAgICAgcHJpbnQgPj5zeXMuX19zdGRvdXRfXywgKAorICAgICAgICAgICAgICAgICAgICcgIHppcFRlc3Qgc3RpbGwgd3JpdGluZyAlZCBvZiAlZCwgYmUgcGF0aWVudC4uLicgJQorICAgICAgICAgICAgICAgICAgIChudW0sIGZpbGVjb3VudCkpCisgICAgICAgICAgICAgICAgc3lzLl9fc3Rkb3V0X18uZmx1c2goKQorICAgICAgICB6aXBmcC5jbG9zZSgpCisKKyAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQorICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKQorICAgICAgICBmb3IgbnVtIGluIHJhbmdlKGZpbGVjb3VudCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoInRlc3RmbiVkIiAlIG51bSksIHNlbGYuZGF0YSkKKyAgICAgICAgICAgICMgUHJpbnQgc3RpbGwgd29ya2luZyBtZXNzYWdlIHNpbmNlIHRoaXMgdGVzdCBjYW4gYmUgcmVhbGx5IHNsb3cKKyAgICAgICAgICAgIGlmIG5leHRfdGltZSA8PSB0aW1lLnRpbWUoKToKKyAgICAgICAgICAgICAgICBuZXh0X3RpbWUgPSB0aW1lLnRpbWUoKSArIF9QUklOVF9XT1JLSU5HX01TR19JTlRFUlZBTAorICAgICAgICAgICAgICAgIHByaW50ID4+c3lzLl9fc3Rkb3V0X18sICgKKyAgICAgICAgICAgICAgICAgICAnICB6aXBUZXN0IHN0aWxsIHJlYWRpbmcgJWQgb2YgJWQsIGJlIHBhdGllbnQuLi4nICUKKyAgICAgICAgICAgICAgICAgICAobnVtLCBmaWxlY291bnQpKQorICAgICAgICAgICAgICAgIHN5cy5fX3N0ZG91dF9fLmZsdXNoKCkKKyAgICAgICAgemlwZnAuY2xvc2UoKQorCisgICAgZGVmIHRlc3RTdG9yZWQoc2VsZik6CisgICAgICAgICMgVHJ5IHRoZSB0ZW1wIGZpbGUgZmlyc3QuICBJZiB3ZSBkbyBURVNURk4yIGZpcnN0LCB0aGVuIGl0IGhvZ3MKKyAgICAgICAgIyBnaWdhYnl0ZXMgb2YgZGlzayBzcGFjZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB0ZXN0LgorICAgICAgICBmb3IgZiBpbiBUZW1wb3JhcnlGaWxlKCksIFRFU1RGTjI6CisgICAgICAgICAgICBzZWxmLnppcFRlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgaWYgemxpYjoKKyAgICAgICAgZGVmIHRlc3REZWZsYXRlZChzZWxmKToKKyAgICAgICAgICAgICMgVHJ5IHRoZSB0ZW1wIGZpbGUgZmlyc3QuICBJZiB3ZSBkbyBURVNURk4yIGZpcnN0LCB0aGVuIGl0IGhvZ3MKKyAgICAgICAgICAgICMgZ2lnYWJ5dGVzIG9mIGRpc2sgc3BhY2UgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdGVzdC4KKyAgICAgICAgICAgIGZvciBmIGluIFRlbXBvcmFyeUZpbGUoKSwgVEVTVEZOMjoKKyAgICAgICAgICAgICAgICBzZWxmLnppcFRlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBmbmFtZSBpbiBURVNURk4sIFRFU1RGTjI6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmbmFtZSk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZuYW1lKQorCisKK2NsYXNzIE90aGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0TW9yZVRoYW42NGtGaWxlcyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgbW9yZSB0aGFuIDY0ayBmaWxlcyBjYW4gYmUgYWRkZWQgdG8gYW4gYXJjaGl2ZSwKKyAgICAgICAgIyBhbmQgdGhhdCB0aGUgcmVzdWx0aW5nIGFyY2hpdmUgY2FuIGJlIHJlYWQgcHJvcGVybHkgYnkgWmlwRmlsZQorICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpCisgICAgICAgIHppcGYuZGVidWcgPSAxMDAKKyAgICAgICAgbnVtZmlsZXMgPSAoMSA8PCAxNikgKiAzLzIKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG51bWZpbGVzKToKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvbyUwOGQiICUgaSwgIiVkIiAlIChpKiozICUgNTcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih6aXBmLm5hbWVsaXN0KCkpLCBudW1maWxlcykKKyAgICAgICAgemlwZi5jbG9zZSgpCisKKyAgICAgICAgemlwZjIgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oemlwZjIubmFtZWxpc3QoKSksIG51bWZpbGVzKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobnVtZmlsZXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmMi5yZWFkKCJmb28lMDhkIiAlIGkpLCAiJWQiICUgKGkqKjMgJSA1NykpCisgICAgICAgIHppcGYuY2xvc2UoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKFRFU1RGTikKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhURVNURk4yKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFRlc3RzV2l0aFNvdXJjZUZpbGUsIE90aGVyVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3ppcGltcG9ydC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3ppcGltcG9ydC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjY3MzhhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5CkBAIC0wLDAgKzEsNDcyIEBACitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBtYXJzaGFsCitpbXBvcnQgaW1wCitpbXBvcnQgc3RydWN0CitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0Citmcm9tIHRlc3QudGVzdF9pbXBvcnRob29rcyBpbXBvcnQgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UsIHRlc3Rfc3JjLCB0ZXN0X2NvCisKKyMgc29tZSB0ZXN0cyBjYW4gYmUgcmFuIGV2ZW4gd2l0aG91dCB6bGliCit0cnk6CisgICAgaW1wb3J0IHpsaWIKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB6bGliID0gTm9uZQorCitmcm9tIHppcGZpbGUgaW1wb3J0IFppcEZpbGUsIFppcEluZm8sIFpJUF9TVE9SRUQsIFpJUF9ERUZMQVRFRAorCitpbXBvcnQgemlwaW1wb3J0CitpbXBvcnQgbGluZWNhY2hlCitpbXBvcnQgZG9jdGVzdAoraW1wb3J0IGluc3BlY3QKK2ltcG9ydCBTdHJpbmdJTworZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGV4dHJhY3RfdGIsIGV4dHJhY3Rfc3RhY2ssIHByaW50X3RiCityYWlzZV9zcmMgPSAnZGVmIGRvX3JhaXNlKCk6IHJhaXNlIFR5cGVFcnJvclxuJworCitkZWYgbWFrZV9weWMoY28sIG10aW1lKToKKyAgICBkYXRhID0gbWFyc2hhbC5kdW1wcyhjbykKKyAgICBpZiB0eXBlKG10aW1lKSBpcyB0eXBlKDAuMCk6CisgICAgICAgICMgTWFjIG10aW1lcyBuZWVkIGEgYml0IG9mIHNwZWNpYWwgY2FzaW5nCisgICAgICAgIGlmIG10aW1lIDwgMHg3ZmZmZmZmZjoKKyAgICAgICAgICAgIG10aW1lID0gaW50KG10aW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXRpbWUgPSBpbnQoLTB4MTAwMDAwMDAwTCArIGxvbmcobXRpbWUpKQorICAgIHB5YyA9IGltcC5nZXRfbWFnaWMoKSArIHN0cnVjdC5wYWNrKCI8aSIsIGludChtdGltZSkpICsgZGF0YQorICAgIHJldHVybiBweWMKKworZGVmIG1vZHVsZV9wYXRoX3RvX2RvdHRlZF9uYW1lKHBhdGgpOgorICAgIHJldHVybiBwYXRoLnJlcGxhY2Uob3Muc2VwLCAnLicpCisKK05PVyA9IHRpbWUudGltZSgpCit0ZXN0X3B5YyA9IG1ha2VfcHljKHRlc3RfY28sIE5PVykKKworCitpZiBfX2RlYnVnX186CisgICAgcHljX2V4dCA9ICIucHljIgorZWxzZToKKyAgICBweWNfZXh0ID0gIi5weW8iCisKKworVEVTVE1PRCA9ICJ6aXB0ZXN0bW9kdWxlIgorVEVTVFBBQ0sgPSAiemlwdGVzdHBhY2thZ2UiCitURVNUUEFDSzIgPSAiemlwdGVzdHBhY2thZ2UyIgorVEVNUF9aSVAgPSBvcy5wYXRoLmFic3BhdGgoImp1bms5NTE0MiIgKyBvcy5leHRzZXAgKyAiemlwIikKKworCitjbGFzcyBVbmNvbXByZXNzZWRaaXBJbXBvcnRUZXN0Q2FzZShJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSk6CisKKyAgICBjb21wcmVzc2lvbiA9IFpJUF9TVE9SRUQKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBXZSdyZSByZXVzaW5nIHRoZSB6aXAgYXJjaGl2ZSBwYXRoLCBzbyB3ZSBtdXN0IGNsZWFyIHRoZQorICAgICAgICAjIGNhY2hlZCBkaXJlY3RvcnkgaW5mbyBhbmQgbGluZWNhY2hlCisgICAgICAgIGxpbmVjYWNoZS5jbGVhcmNhY2hlKCkKKyAgICAgICAgemlwaW1wb3J0Ll96aXBfZGlyZWN0b3J5X2NhY2hlLmNsZWFyKCkKKyAgICAgICAgSW1wb3J0SG9va3NCYXNlVGVzdENhc2Uuc2V0VXAoc2VsZikKKworICAgIGRlZiBkb1Rlc3Qoc2VsZiwgZXhwZWN0ZWRfZXh0LCBmaWxlcywgKm1vZHVsZXMsICoqa3cpOgorICAgICAgICB6ID0gWmlwRmlsZShURU1QX1pJUCwgInciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbmFtZSwgKG10aW1lLCBkYXRhKSBpbiBmaWxlcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHppbmZvID0gWmlwSW5mbyhuYW1lLCB0aW1lLmxvY2FsdGltZShtdGltZSkpCisgICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IHNlbGYuY29tcHJlc3Npb24KKyAgICAgICAgICAgICAgICB6LndyaXRlc3RyKHppbmZvLCBkYXRhKQorICAgICAgICAgICAgei5jbG9zZSgpCisKKyAgICAgICAgICAgIHN0dWZmID0ga3cuZ2V0KCJzdHVmZiIsIE5vbmUpCisgICAgICAgICAgICBpZiBzdHVmZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIFByZXBlbmQgJ3N0dWZmJyB0byB0aGUgc3RhcnQgb2YgdGhlIHppcGZpbGUKKyAgICAgICAgICAgICAgICBmID0gb3BlbihURU1QX1pJUCwgInJiIikKKyAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICAgICAgICAgIGYgPSBvcGVuKFRFTVBfWklQLCAid2IiKQorICAgICAgICAgICAgICAgIGYud3JpdGUoc3R1ZmYpCisgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgVEVNUF9aSVApCisKKyAgICAgICAgICAgIG1vZCA9IF9faW1wb3J0X18oIi4iLmpvaW4obW9kdWxlcyksIGdsb2JhbHMoKSwgbG9jYWxzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiX19kdW1teV9fIl0pCisKKyAgICAgICAgICAgIGNhbGwgPSBrdy5nZXQoJ2NhbGwnKQorICAgICAgICAgICAgaWYgY2FsbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjYWxsKG1vZCkKKworICAgICAgICAgICAgaWYgZXhwZWN0ZWRfZXh0OgorICAgICAgICAgICAgICAgIGZpbGUgPSBtb2QuZ2V0X2ZpbGUoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZSwgb3MucGF0aC5qb2luKFRFTVBfWklQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1vZHVsZXMpICsgZXhwZWN0ZWRfZXh0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgei5jbG9zZSgpCisgICAgICAgICAgICBvcy5yZW1vdmUoVEVNUF9aSVApCisKKyAgICBkZWYgdGVzdEFGYWtlWmxpYihzZWxmKToKKyAgICAgICAgIworICAgICAgICAjIFRoaXMgY291bGQgY2F1c2UgYSBzdGFjayBvdmVyZmxvdyBiZWZvcmU6IGltcG9ydGluZyB6bGliLnB5CisgICAgICAgICMgZnJvbSBhIGNvbXByZXNzZWQgYXJjaGl2ZSB3b3VsZCBjYXVzZSB6bGliIHRvIGJlIGltcG9ydGVkCisgICAgICAgICMgd2hpY2ggd291bGQgZmluZCB6bGliLnB5IGluIHRoZSBhcmNoaXZlLCB3aGljaCB3b3VsZC4uLiBldGMuCisgICAgICAgICMKKyAgICAgICAgIyBUaGlzIHRlc3QgKm11c3QqIGJlIGV4ZWN1dGVkIGZpcnN0OiBpdCBtdXN0IGJlIHRoZSBmaXJzdCBvbmUKKyAgICAgICAgIyB0byB0cmlnZ2VyIHppcGltcG9ydCB0byBpbXBvcnQgemxpYiAoemlwaW1wb3J0IGNhY2hlcyB0aGUKKyAgICAgICAgIyB6bGliLmRlY29tcHJlc3MgZnVuY3Rpb24gb2JqZWN0LCBhZnRlciB3aGljaCB0aGUgcHJvYmxlbSBiZWluZworICAgICAgICAjIHRlc3RlZCBoZXJlIHdvdWxkbid0IGJlIGEgcHJvYmxlbSBhbnltb3JlLi4uCisgICAgICAgICMgKEhlbmNlIHRoZSAnQScgaW4gdGhlIHRlc3QgbWV0aG9kIG5hbWU6IHRvIG1ha2UgaXQgdGhlIGZpcnN0CisgICAgICAgICMgaXRlbSBpbiBhIGxpc3Qgc29ydGVkIGJ5IG5hbWUsIGxpa2UgdW5pdHRlc3QubWFrZVN1aXRlKCkgZG9lcy4pCisgICAgICAgICMKKyAgICAgICAgIyBUaGlzIHRlc3QgZmFpbHMgb24gcGxhdGZvcm1zIG9uIHdoaWNoIHRoZSB6bGliIG1vZHVsZSBpcworICAgICAgICAjIHN0YXRpY2FsbHkgbGlua2VkLCBidXQgdGhlIHByb2JsZW0gaXQgdGVzdHMgZm9yIGNhbid0CisgICAgICAgICMgb2NjdXIgaW4gdGhhdCBjYXNlIChidWlsdGluIG1vZHVsZXMgYXJlIGFsd2F5cyBmb3VuZCBmaXJzdCksCisgICAgICAgICMgc28gd2UnbGwgc2ltcGx5IHNraXAgaXQgdGhlbi4gQnVnICM3NjU0NTYuCisgICAgICAgICMKKyAgICAgICAgaWYgInpsaWIiIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiAiemxpYiIgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbInpsaWIiXQorICAgICAgICBmaWxlcyA9IHsiemxpYi5weSI6IChOT1csIHRlc3Rfc3JjKX0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5kb1Rlc3QoIi5weSIsIGZpbGVzLCAiemxpYiIpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGlmIHNlbGYuY29tcHJlc3Npb24gIT0gWklQX0RFRkxBVEVEOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgdGVzdCB0byBub3QgcmFpc2UgSW1wb3J0RXJyb3IiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5jb21wcmVzc2lvbiAhPSBaSVBfU1RPUkVEOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgdGVzdCB0byByYWlzZSBJbXBvcnRFcnJvciIpCisKKyAgICBkZWYgdGVzdFB5KHNlbGYpOgorICAgICAgICBmaWxlcyA9IHtURVNUTU9EICsgIi5weSI6IChOT1csIHRlc3Rfc3JjKX0KKyAgICAgICAgc2VsZi5kb1Rlc3QoIi5weSIsIGZpbGVzLCBURVNUTU9EKQorCisgICAgZGVmIHRlc3RQeWMoc2VsZik6CisgICAgICAgIGZpbGVzID0ge1RFU1RNT0QgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5Yyl9CisgICAgICAgIHNlbGYuZG9UZXN0KHB5Y19leHQsIGZpbGVzLCBURVNUTU9EKQorCisgICAgZGVmIHRlc3RCb3RoKHNlbGYpOgorICAgICAgICBmaWxlcyA9IHtURVNUTU9EICsgIi5weSI6IChOT1csIHRlc3Rfc3JjKSwKKyAgICAgICAgICAgICAgICAgVEVTVE1PRCArIHB5Y19leHQ6IChOT1csIHRlc3RfcHljKX0KKyAgICAgICAgc2VsZi5kb1Rlc3QocHljX2V4dCwgZmlsZXMsIFRFU1RNT0QpCisKKyAgICBkZWYgdGVzdEVtcHR5UHkoc2VsZik6CisgICAgICAgIGZpbGVzID0ge1RFU1RNT0QgKyAiLnB5IjogKE5PVywgIiIpfQorICAgICAgICBzZWxmLmRvVGVzdChOb25lLCBmaWxlcywgVEVTVE1PRCkKKworICAgIGRlZiB0ZXN0QmFkTWFnaWMoc2VsZik6CisgICAgICAgICMgbWFrZSBweWMgbWFnaWMgd29yZCBpbnZhbGlkLCBmb3JjaW5nIGxvYWRpbmcgZnJvbSAucHkKKyAgICAgICAgbTAgPSBvcmQodGVzdF9weWNbMF0pCisgICAgICAgIG0wIF49IDB4MDQgICMgZmxpcCBhbiBhcmJpdHJhcnkgYml0CisgICAgICAgIGJhZG1hZ2ljX3B5YyA9IGNocihtMCkgKyB0ZXN0X3B5Y1sxOl0KKyAgICAgICAgZmlsZXMgPSB7VEVTVE1PRCArICIucHkiOiAoTk9XLCB0ZXN0X3NyYyksCisgICAgICAgICAgICAgICAgIFRFU1RNT0QgKyBweWNfZXh0OiAoTk9XLCBiYWRtYWdpY19weWMpfQorICAgICAgICBzZWxmLmRvVGVzdCgiLnB5IiwgZmlsZXMsIFRFU1RNT0QpCisKKyAgICBkZWYgdGVzdEJhZE1hZ2ljMihzZWxmKToKKyAgICAgICAgIyBtYWtlIHB5YyBtYWdpYyB3b3JkIGludmFsaWQsIGNhdXNpbmcgYW4gSW1wb3J0RXJyb3IKKyAgICAgICAgbTAgPSBvcmQodGVzdF9weWNbMF0pCisgICAgICAgIG0wIF49IDB4MDQgICMgZmxpcCBhbiBhcmJpdHJhcnkgYml0CisgICAgICAgIGJhZG1hZ2ljX3B5YyA9IGNocihtMCkgKyB0ZXN0X3B5Y1sxOl0KKyAgICAgICAgZmlsZXMgPSB7VEVTVE1PRCArIHB5Y19leHQ6IChOT1csIGJhZG1hZ2ljX3B5Yyl9CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZG9UZXN0KCIucHkiLCBmaWxlcywgVEVTVE1PRCkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBJbXBvcnRFcnJvcjsgaW1wb3J0IGZyb20gYmFkIHB5YyIpCisKKyAgICBkZWYgdGVzdEJhZE1UaW1lKHNlbGYpOgorICAgICAgICB0MyA9IG9yZCh0ZXN0X3B5Y1s3XSkKKyAgICAgICAgdDMgXj0gMHgwMiAgIyBmbGlwIHRoZSBzZWNvbmQgYml0IC0tIG5vdCB0aGUgZmlyc3QgYXMgdGhhdCBvbmUKKyAgICAgICAgICAgICAgICAgICAgIyBpc24ndCBzdG9yZWQgaW4gdGhlIC5weSdzIG10aW1lIGluIHRoZSB6aXAgYXJjaGl2ZS4KKyAgICAgICAgYmFkdGltZV9weWMgPSB0ZXN0X3B5Y1s6N10gKyBjaHIodDMpICsgdGVzdF9weWNbODpdCisgICAgICAgIGZpbGVzID0ge1RFU1RNT0QgKyAiLnB5IjogKE5PVywgdGVzdF9zcmMpLAorICAgICAgICAgICAgICAgICBURVNUTU9EICsgcHljX2V4dDogKE5PVywgYmFkdGltZV9weWMpfQorICAgICAgICBzZWxmLmRvVGVzdCgiLnB5IiwgZmlsZXMsIFRFU1RNT0QpCisKKyAgICBkZWYgdGVzdFBhY2thZ2Uoc2VsZik6CisgICAgICAgIHBhY2tkaXIgPSBURVNUUEFDSyArIG9zLnNlcAorICAgICAgICBmaWxlcyA9IHtwYWNrZGlyICsgIl9faW5pdF9fIiArIHB5Y19leHQ6IChOT1csIHRlc3RfcHljKSwKKyAgICAgICAgICAgICAgICAgcGFja2RpciArIFRFU1RNT0QgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5Yyl9CisgICAgICAgIHNlbGYuZG9UZXN0KHB5Y19leHQsIGZpbGVzLCBURVNUUEFDSywgVEVTVE1PRCkKKworICAgIGRlZiB0ZXN0RGVlcFBhY2thZ2Uoc2VsZik6CisgICAgICAgIHBhY2tkaXIgPSBURVNUUEFDSyArIG9zLnNlcAorICAgICAgICBwYWNrZGlyMiA9IHBhY2tkaXIgKyBURVNUUEFDSzIgKyBvcy5zZXAKKyAgICAgICAgZmlsZXMgPSB7cGFja2RpciArICJfX2luaXRfXyIgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5YyksCisgICAgICAgICAgICAgICAgIHBhY2tkaXIyICsgIl9faW5pdF9fIiArIHB5Y19leHQ6IChOT1csIHRlc3RfcHljKSwKKyAgICAgICAgICAgICAgICAgcGFja2RpcjIgKyBURVNUTU9EICsgcHljX2V4dDogKE5PVywgdGVzdF9weWMpfQorICAgICAgICBzZWxmLmRvVGVzdChweWNfZXh0LCBmaWxlcywgVEVTVFBBQ0ssIFRFU1RQQUNLMiwgVEVTVE1PRCkKKworICAgIGRlZiB0ZXN0WmlwSW1wb3J0ZXJNZXRob2RzKHNlbGYpOgorICAgICAgICBwYWNrZGlyID0gVEVTVFBBQ0sgKyBvcy5zZXAKKyAgICAgICAgcGFja2RpcjIgPSBwYWNrZGlyICsgVEVTVFBBQ0syICsgb3Muc2VwCisgICAgICAgIGZpbGVzID0ge3BhY2tkaXIgKyAiX19pbml0X18iICsgcHljX2V4dDogKE5PVywgdGVzdF9weWMpLAorICAgICAgICAgICAgICAgICBwYWNrZGlyMiArICJfX2luaXRfXyIgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5YyksCisgICAgICAgICAgICAgICAgIHBhY2tkaXIyICsgVEVTVE1PRCArIHB5Y19leHQ6IChOT1csIHRlc3RfcHljKX0KKworICAgICAgICB6ID0gWmlwRmlsZShURU1QX1pJUCwgInciKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbmFtZSwgKG10aW1lLCBkYXRhKSBpbiBmaWxlcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHppbmZvID0gWmlwSW5mbyhuYW1lLCB0aW1lLmxvY2FsdGltZShtdGltZSkpCisgICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IHNlbGYuY29tcHJlc3Npb24KKyAgICAgICAgICAgICAgICB6LndyaXRlc3RyKHppbmZvLCBkYXRhKQorICAgICAgICAgICAgei5jbG9zZSgpCisKKyAgICAgICAgICAgIHppID0gemlwaW1wb3J0LnppcGltcG9ydGVyKFRFTVBfWklQKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5hcmNoaXZlLCBURU1QX1pJUCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuaXNfcGFja2FnZShURVNUUEFDSyksIFRydWUpCisgICAgICAgICAgICBtb2QgPSB6aS5sb2FkX21vZHVsZShURVNUUEFDSykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X2ZpbGVuYW1lKFRFU1RQQUNLKSwgbW9kLl9fZmlsZV9fKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmlzX3BhY2thZ2UocGFja2RpciArICdfX2luaXRfXycpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuaXNfcGFja2FnZShwYWNrZGlyICsgVEVTVFBBQ0syKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuaXNfcGFja2FnZShwYWNrZGlyMiArIFRFU1RNT0QpLCBGYWxzZSkKKworICAgICAgICAgICAgbW9kX3BhdGggPSBwYWNrZGlyMiArIFRFU1RNT0QKKyAgICAgICAgICAgIG1vZF9uYW1lID0gbW9kdWxlX3BhdGhfdG9fZG90dGVkX25hbWUobW9kX3BhdGgpCisgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZF9uYW1lKQorICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbW9kX25hbWVdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmdldF9zb3VyY2UoVEVTVFBBQ0spLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfc291cmNlKG1vZF9wYXRoKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X2ZpbGVuYW1lKG1vZF9wYXRoKSwgbW9kLl9fZmlsZV9fKQorICAgICAgICAgICAgIyBUbyBwYXNzIGluIHRoZSBtb2R1bGUgbmFtZSBpbnN0ZWFkIG9mIHRoZSBwYXRoLCB3ZSBtdXN0IHVzZSB0aGUgcmlnaHQgaW1wb3J0ZXIKKyAgICAgICAgICAgIGxvYWRlciA9IG1vZC5fX2xvYWRlcl9fCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRfc291cmNlKG1vZF9uYW1lKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldF9maWxlbmFtZShtb2RfbmFtZSksIG1vZC5fX2ZpbGVfXykKKworICAgICAgICAgICAgIyB0ZXN0IHByZWZpeCBhbmQgYXJjaGl2ZXBhdGggbWVtYmVycworICAgICAgICAgICAgemkyID0gemlwaW1wb3J0LnppcGltcG9ydGVyKFRFTVBfWklQICsgb3Muc2VwICsgVEVTVFBBQ0spCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppMi5hcmNoaXZlLCBURU1QX1pJUCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkyLnByZWZpeCwgVEVTVFBBQ0sgKyBvcy5zZXApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB6LmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZShURU1QX1pJUCkKKworICAgIGRlZiB0ZXN0WmlwSW1wb3J0ZXJNZXRob2RzSW5TdWJEaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHBhY2tkaXIgPSBURVNUUEFDSyArIG9zLnNlcAorICAgICAgICBwYWNrZGlyMiA9IHBhY2tkaXIgKyBURVNUUEFDSzIgKyBvcy5zZXAKKyAgICAgICAgZmlsZXMgPSB7cGFja2RpcjIgKyAiX19pbml0X18iICsgcHljX2V4dDogKE5PVywgdGVzdF9weWMpLAorICAgICAgICAgICAgICAgICBwYWNrZGlyMiArIFRFU1RNT0QgKyBweWNfZXh0OiAoTk9XLCB0ZXN0X3B5Yyl9CisKKyAgICAgICAgeiA9IFppcEZpbGUoVEVNUF9aSVAsICJ3IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIG5hbWUsIChtdGltZSwgZGF0YSkgaW4gZmlsZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICB6aW5mbyA9IFppcEluZm8obmFtZSwgdGltZS5sb2NhbHRpbWUobXRpbWUpKQorICAgICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3R5cGUgPSBzZWxmLmNvbXByZXNzaW9uCisgICAgICAgICAgICAgICAgei53cml0ZXN0cih6aW5mbywgZGF0YSkKKyAgICAgICAgICAgIHouY2xvc2UoKQorCisgICAgICAgICAgICB6aSA9IHppcGltcG9ydC56aXBpbXBvcnRlcihURU1QX1pJUCArIG9zLnNlcCArIHBhY2tkaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmFyY2hpdmUsIFRFTVBfWklQKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5wcmVmaXgsIHBhY2tkaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmlzX3BhY2thZ2UoVEVTVFBBQ0syKSwgVHJ1ZSkKKyAgICAgICAgICAgIG1vZCA9IHppLmxvYWRfbW9kdWxlKFRFU1RQQUNLMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X2ZpbGVuYW1lKFRFU1RQQUNLMiksIG1vZC5fX2ZpbGVfXykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5pc19wYWNrYWdlKFRFU1RQQUNLMiArIG9zLnNlcCArICdfX2luaXRfXycpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuaXNfcGFja2FnZShURVNUUEFDSzIgKyBvcy5zZXAgKyBURVNUTU9EKSwgRmFsc2UpCisKKyAgICAgICAgICAgIG1vZF9wYXRoID0gVEVTVFBBQ0syICsgb3Muc2VwICsgVEVTVE1PRAorICAgICAgICAgICAgbW9kX25hbWUgPSBtb2R1bGVfcGF0aF90b19kb3R0ZWRfbmFtZShtb2RfcGF0aCkKKyAgICAgICAgICAgIF9faW1wb3J0X18obW9kX25hbWUpCisgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1ttb2RfbmFtZV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X3NvdXJjZShURVNUUEFDSzIpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfc291cmNlKG1vZF9wYXRoKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X2ZpbGVuYW1lKG1vZF9wYXRoKSwgbW9kLl9fZmlsZV9fKQorICAgICAgICAgICAgIyBUbyBwYXNzIGluIHRoZSBtb2R1bGUgbmFtZSBpbnN0ZWFkIG9mIHRoZSBwYXRoLCB3ZSBtdXN0IHVzZSB0aGUgcmlnaHQgaW1wb3J0ZXIKKyAgICAgICAgICAgIGxvYWRlciA9IG1vZC5fX2xvYWRlcl9fCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRfc291cmNlKG1vZF9uYW1lKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldF9maWxlbmFtZShtb2RfbmFtZSksIG1vZC5fX2ZpbGVfXykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHouY2xvc2UoKQorICAgICAgICAgICAgb3MucmVtb3ZlKFRFTVBfWklQKQorCisgICAgZGVmIHRlc3RHZXREYXRhKHNlbGYpOgorICAgICAgICB6ID0gWmlwRmlsZShURU1QX1pJUCwgInciKQorICAgICAgICB6LmNvbXByZXNzaW9uID0gc2VsZi5jb21wcmVzc2lvbgorICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lID0gInRlc3RkYXRhLmRhdCIKKyAgICAgICAgICAgIGRhdGEgPSAiIi5qb2luKFtjaHIoeCkgZm9yIHggaW4gcmFuZ2UoMjU2KV0pICogNTAwCisgICAgICAgICAgICB6LndyaXRlc3RyKG5hbWUsIGRhdGEpCisgICAgICAgICAgICB6LmNsb3NlKCkKKyAgICAgICAgICAgIHppID0gemlwaW1wb3J0LnppcGltcG9ydGVyKFRFTVBfWklQKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCB6aS5nZXRfZGF0YShuYW1lKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3ppcGltcG9ydGVyIG9iamVjdCcsIHJlcHIoemkpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgei5jbG9zZSgpCisgICAgICAgICAgICBvcy5yZW1vdmUoVEVNUF9aSVApCisKKyAgICBkZWYgdGVzdEltcG9ydGVyQXR0cihzZWxmKToKKyAgICAgICAgc3JjID0gIiIiaWYgMTogICMgaW5kZW50IGhhY2sKKyAgICAgICAgZGVmIGdldF9maWxlKCk6CisgICAgICAgICAgICByZXR1cm4gX19maWxlX18KKyAgICAgICAgaWYgX19sb2FkZXJfXy5nZXRfZGF0YSgic29tZS5kYXRhIikgIT0gInNvbWUgZGF0YSI6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvciwgImJhZCBkYXRhIlxuIiIiCisgICAgICAgIHB5YyA9IG1ha2VfcHljKGNvbXBpbGUoc3JjLCAiPD8/Pz4iLCAiZXhlYyIpLCBOT1cpCisgICAgICAgIGZpbGVzID0ge1RFU1RNT0QgKyBweWNfZXh0OiAoTk9XLCBweWMpLAorICAgICAgICAgICAgICAgICAic29tZS5kYXRhIjogKE5PVywgInNvbWUgZGF0YSIpfQorICAgICAgICBzZWxmLmRvVGVzdChweWNfZXh0LCBmaWxlcywgVEVTVE1PRCkKKworICAgIGRlZiB0ZXN0SW1wb3J0X1dpdGhTdHVmZihzZWxmKToKKyAgICAgICAgIyB0cnkgaW1wb3J0aW5nIGZyb20gYSB6aXBmaWxlIHdoaWNoIGNvbnRhaW5zIGFkZGl0aW9uYWwKKyAgICAgICAgIyBzdHVmZiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlCisgICAgICAgIGZpbGVzID0ge1RFU1RNT0QgKyAiLnB5IjogKE5PVywgdGVzdF9zcmMpfQorICAgICAgICBzZWxmLmRvVGVzdCgiLnB5IiwgZmlsZXMsIFRFU1RNT0QsCisgICAgICAgICAgICAgICAgICAgIHN0dWZmPSJTb21lIFN0dWZmIiozMSkKKworICAgIGRlZiBhc3NlcnRNb2R1bGVTb3VyY2Uoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldHNvdXJjZShtb2R1bGUpLCB0ZXN0X3NyYykKKworICAgIGRlZiB0ZXN0R2V0U291cmNlKHNlbGYpOgorICAgICAgICBmaWxlcyA9IHtURVNUTU9EICsgIi5weSI6IChOT1csIHRlc3Rfc3JjKX0KKyAgICAgICAgc2VsZi5kb1Rlc3QoIi5weSIsIGZpbGVzLCBURVNUTU9ELCBjYWxsPXNlbGYuYXNzZXJ0TW9kdWxlU291cmNlKQorCisgICAgZGVmIHRlc3RHZXRDb21waWxlZFNvdXJjZShzZWxmKToKKyAgICAgICAgcHljID0gbWFrZV9weWMoY29tcGlsZSh0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKSwgTk9XKQorICAgICAgICBmaWxlcyA9IHtURVNUTU9EICsgIi5weSI6IChOT1csIHRlc3Rfc3JjKSwKKyAgICAgICAgICAgICAgICAgVEVTVE1PRCArIHB5Y19leHQ6IChOT1csIHB5Yyl9CisgICAgICAgIHNlbGYuZG9UZXN0KHB5Y19leHQsIGZpbGVzLCBURVNUTU9ELCBjYWxsPXNlbGYuYXNzZXJ0TW9kdWxlU291cmNlKQorCisgICAgZGVmIHJ1bkRvY3Rlc3Qoc2VsZiwgY2FsbGJhY2spOgorICAgICAgICBmaWxlcyA9IHtURVNUTU9EICsgIi5weSI6IChOT1csIHRlc3Rfc3JjKSwKKyAgICAgICAgICAgICAgICAgInh5ei50eHQiOiAoTk9XLCAiPj4+IGxvZy5hcHBlbmQoVHJ1ZSlcbiIpfQorICAgICAgICBzZWxmLmRvVGVzdCgiLnB5IiwgZmlsZXMsIFRFU1RNT0QsIGNhbGw9Y2FsbGJhY2spCisKKyAgICBkZWYgZG9Eb2N0ZXN0RmlsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICBsb2cgPSBbXQorICAgICAgICBvbGRfbWFzdGVyLCBkb2N0ZXN0Lm1hc3RlciA9IGRvY3Rlc3QubWFzdGVyLCBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRvY3Rlc3QudGVzdGZpbGUoCisgICAgICAgICAgICAgICAgJ3h5ei50eHQnLCBwYWNrYWdlPW1vZHVsZSwgbW9kdWxlX3JlbGF0aXZlPVRydWUsCisgICAgICAgICAgICAgICAgZ2xvYnM9bG9jYWxzKCkKKyAgICAgICAgICAgICkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRvY3Rlc3QubWFzdGVyID0gb2xkX21hc3RlcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZyxbVHJ1ZV0pCisKKyAgICBkZWYgdGVzdERvY3Rlc3RGaWxlKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bkRvY3Rlc3Qoc2VsZi5kb0RvY3Rlc3RGaWxlKQorCisgICAgZGVmIGRvRG9jdGVzdFN1aXRlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIGxvZyA9IFtdCisgICAgICAgIGRvY3Rlc3QuRG9jRmlsZVRlc3QoCisgICAgICAgICAgICAneHl6LnR4dCcsIHBhY2thZ2U9bW9kdWxlLCBtb2R1bGVfcmVsYXRpdmU9VHJ1ZSwKKyAgICAgICAgICAgIGdsb2JzPWxvY2FscygpCisgICAgICAgICkucnVuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2csW1RydWVdKQorCisgICAgZGVmIHRlc3REb2N0ZXN0U3VpdGUoc2VsZik6CisgICAgICAgIHNlbGYucnVuRG9jdGVzdChzZWxmLmRvRG9jdGVzdFN1aXRlKQorCisgICAgZGVmIGRvVHJhY2ViYWNrKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1vZHVsZS5kb19yYWlzZSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHRiID0gc3lzLmV4Y19pbmZvKClbMl0udGJfbmV4dAorCisgICAgICAgICAgICBmLGxubyxuLGxpbmUgPSBleHRyYWN0X3RiKHRiLCAxKVswXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCByYWlzZV9zcmMuc3RyaXAoKSkKKworICAgICAgICAgICAgZixsbm8sbixsaW5lID0gZXh0cmFjdF9zdGFjayh0Yi50Yl9mcmFtZSwgMSlbMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgcmFpc2Vfc3JjLnN0cmlwKCkpCisKKyAgICAgICAgICAgIHMgPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgICAgICAgICBwcmludF90Yih0YiwgMSwgcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmdldHZhbHVlKCkuZW5kc3dpdGgocmFpc2Vfc3JjKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJUaGlzIG91Z2h0IHRvIGJlIGltcG9zc2libGUiKQorCisgICAgZGVmIHRlc3RUcmFjZWJhY2soc2VsZik6CisgICAgICAgIGZpbGVzID0ge1RFU1RNT0QgKyAiLnB5IjogKE5PVywgcmFpc2Vfc3JjKX0KKyAgICAgICAgc2VsZi5kb1Rlc3QoTm9uZSwgZmlsZXMsIFRFU1RNT0QsIGNhbGw9c2VsZi5kb1RyYWNlYmFjaykKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCitjbGFzcyBDb21wcmVzc2VkWmlwSW1wb3J0VGVzdENhc2UoVW5jb21wcmVzc2VkWmlwSW1wb3J0VGVzdENhc2UpOgorICAgIGNvbXByZXNzaW9uID0gWklQX0RFRkxBVEVECisKKworY2xhc3MgQmFkRmlsZVppcEltcG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgYXNzZXJ0WmlwRmFpbHVyZShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGltcG9ydC5aaXBJbXBvcnRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgemlwaW1wb3J0LnppcGltcG9ydGVyLCBmaWxlbmFtZSkKKworICAgIGRlZiB0ZXN0Tm9GaWxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFppcEZhaWx1cmUoJ0FkZmpka0ZKS0RGSmpka2xmanMnKQorCisgICAgZGVmIHRlc3RFbXB0eUZpbGVuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFppcEZhaWx1cmUoJycpCisKKyAgICBkZWYgdGVzdEJhZEFyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgemlwaW1wb3J0LnppcGltcG9ydGVyLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHppcGltcG9ydC56aXBpbXBvcnRlciwgVEVTVE1PRCwga3dkPU5vbmUpCisKKyAgICBkZWYgdGVzdEZpbGVuYW1lVG9vTG9uZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRaaXBGYWlsdXJlKCdBJyAqIDMzMDAwKQorCisgICAgZGVmIHRlc3RFbXB0eUZpbGUoc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoVEVTVE1PRCkKKyAgICAgICAgb3BlbihURVNUTU9ELCAndysnKS5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0WmlwRmFpbHVyZShURVNUTU9EKQorCisgICAgZGVmIHRlc3RGaWxlVW5yZWFkYWJsZShzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhURVNUTU9EKQorICAgICAgICBmZCA9IG9zLm9wZW4oVEVTVE1PRCwgb3MuT19DUkVBVCwgMDAwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0WmlwRmFpbHVyZShURVNUTU9EKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIyBJZiB3ZSBsZWF2ZSAidGhlIHJlYWQtb25seSBiaXQiIHNldCBvbiBXaW5kb3dzLCBub3RoaW5nIGNhbgorICAgICAgICAgICAgIyBkZWxldGUgVEVTVE1PRCwgYW5kIGxhdGVyIHRlc3RzIHN1ZmZlciBib2d1cyBmYWlsdXJlcy4KKyAgICAgICAgICAgIG9zLmNobW9kKFRFU1RNT0QsIDA2NjYpCisgICAgICAgICAgICB0ZXN0X3N1cHBvcnQudW5saW5rKFRFU1RNT0QpCisKKyAgICBkZWYgdGVzdE5vdFppcEZpbGUoc2VsZik6CisgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxpbmsoVEVTVE1PRCkKKyAgICAgICAgZnAgPSBvcGVuKFRFU1RNT0QsICd3KycpCisgICAgICAgIGZwLndyaXRlKCdhJyAqIDIyKQorICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0WmlwRmFpbHVyZShURVNUTU9EKQorCisgICAgIyBYWFg6IGRpc2FibGVkIHVudGlsIHRoaXMgd29ya3Mgb24gQmlnLWVuZGlhbiBtYWNoaW5lcworICAgIGRlZiBfdGVzdEJvZ3VzWmlwRmlsZShzZWxmKToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhURVNUTU9EKQorICAgICAgICBmcCA9IG9wZW4oVEVTVE1PRCwgJ3crJykKKyAgICAgICAgZnAud3JpdGUoc3RydWN0LnBhY2soJz1JJywgMHgwNjA1NEI1MCkpCisgICAgICAgIGZwLndyaXRlKCdhJyAqIDE4KQorICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHogPSB6aXBpbXBvcnQuemlwaW1wb3J0ZXIoVEVTVE1PRCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHouZmluZF9tb2R1bGUsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHoubG9hZF9tb2R1bGUsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHouaXNfcGFja2FnZSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgei5nZXRfY29kZSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgei5nZXRfZGF0YSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgei5nZXRfc291cmNlLCBOb25lKQorCisgICAgICAgICAgICBlcnJvciA9IHppcGltcG9ydC5aaXBJbXBvcnRFcnJvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6LmZpbmRfbW9kdWxlKCdhYmMnKSwgTm9uZSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3IsIHoubG9hZF9tb2R1bGUsICdhYmMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3IsIHouZ2V0X2NvZGUsICdhYmMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgei5nZXRfZGF0YSwgJ2FiYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgei5nZXRfc291cmNlLCAnYWJjJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmlzX3BhY2thZ2UsICdhYmMnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgemlwaW1wb3J0Ll96aXBfZGlyZWN0b3J5X2NhY2hlLmNsZWFyKCkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdHJ5OgorICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICAgICAgICBVbmNvbXByZXNzZWRaaXBJbXBvcnRUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgQ29tcHJlc3NlZFppcEltcG9ydFRlc3RDYXNlLAorICAgICAgICAgICAgICBCYWRGaWxlWmlwSW1wb3J0VGVzdENhc2UsCisgICAgICAgICAgICApCisgICAgZmluYWxseToKKyAgICAgICAgdGVzdF9zdXBwb3J0LnVubGluayhURVNUTU9EKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNjE3YWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weQpAQCAtMCwwICsxLDI1MCBAQAorIyBUaGlzIHRlc3QgbW9kdWxlIGNvdmVycyBzdXBwb3J0IGluIHZhcmlvdXMgcGFydHMgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkKKyMgZm9yIHdvcmtpbmcgd2l0aCBtb2R1bGVzIGxvY2F0ZWQgaW5zaWRlIHppcGZpbGVzCisjIFRoZSB0ZXN0cyBhcmUgY2VudHJhbGlzZWQgaW4gdGhpcyBmYXNoaW9uIHRvIG1ha2UgaXQgZWFzeSB0byBkcm9wIHRoZW0KKyMgaWYgYSBwbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQgemlwaW1wb3J0CitpbXBvcnQgdGVzdC50ZXN0X3N1cHBvcnQKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZXh0d3JhcAoraW1wb3J0IHppcGZpbGUKK2ltcG9ydCB6aXBpbXBvcnQKK2ltcG9ydCBkb2N0ZXN0CitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IGxpbmVjYWNoZQoraW1wb3J0IHBkYgoraW1wb3J0IHdhcm5pbmdzCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgKHNwYXduX3B5dGhvbiwga2lsbF9weXRob24sIHJ1bl9weXRob24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfZGlyLCBtYWtlX3NjcmlwdCwgbWFrZV96aXBfc2NyaXB0KQorCit2ZXJib3NlID0gdGVzdC50ZXN0X3N1cHBvcnQudmVyYm9zZQorCisjIExpYnJhcnkgbW9kdWxlcyBjb3ZlcmVkIGJ5IHRoaXMgdGVzdCBzZXQKKyMgIHBkYiAoSXNzdWUgNDIwMSkKKyMgIGluc3BlY3QgKElzc3VlIDQyMjMpCisjICBkb2N0ZXN0IChJc3N1ZSA0MTk3KQorCisjIE90aGVyIHRlc3QgbW9kdWxlcyB3aXRoIHppcGltcG9ydCByZWxhdGVkIHRlc3RzCisjICB0ZXN0X3ppcGltcG9ydCAob2YgY291cnNlISkKKyMgIHRlc3RfY21kX2xpbmVfc2NyaXB0IChjb3ZlcnMgdGhlIHppcGltcG9ydCBzdXBwb3J0IGluIHJ1bnB5KQorCisjIFJldHJpZXZlIHNvbWUgaGVscGVycyBmcm9tIG90aGVyIHRlc3QgY2FzZXMKK2Zyb20gdGVzdCBpbXBvcnQgKHRlc3RfZG9jdGVzdCwgc2FtcGxlX2RvY3Rlc3QsIHNhbXBsZV9kb2N0ZXN0X25vX2RvY3Rlc3RzLAorICAgICAgICAgICAgICAgICAgc2FtcGxlX2RvY3Rlc3Rfbm9fZG9jc3RyaW5ncykKK2Zyb20gdGVzdC50ZXN0X2ltcG9ydGhvb2tzIGltcG9ydCBJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZQorCisKK2RlZiBfcnVuX29iamVjdF9kb2N0ZXN0KG9iaiwgbW9kdWxlKToKKyAgICAjIERpcmVjdCBkb2N0ZXN0IG91dHB1dCAobm9ybWFsbHkganVzdCBlcnJvcnMpIHRvIHJlYWwgc3Rkb3V0OyBkb2N0ZXN0CisgICAgIyBvdXRwdXQgc2hvdWxkbid0IGJlIGNvbXBhcmVkIGJ5IHJlZ3J0ZXN0LgorICAgIHNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgIHN5cy5zdGRvdXQgPSB0ZXN0LnRlc3Rfc3VwcG9ydC5nZXRfb3JpZ2luYWxfc3Rkb3V0KCkKKyAgICB0cnk6CisgICAgICAgIGZpbmRlciA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcih2ZXJib3NlPXZlcmJvc2UsIHJlY3Vyc2U9RmFsc2UpCisgICAgICAgIHJ1bm5lciA9IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPXZlcmJvc2UpCisgICAgICAgICMgVXNlIHRoZSBvYmplY3QncyBmdWxseSBxdWFsaWZpZWQgbmFtZSBpZiBpdCBoYXMgb25lCisgICAgICAgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIG1vZHVsZSdzIG5hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZSA9ICIlcy4lcyIgJSAob2JqLl9fbW9kdWxlX18sIG9iai5fX25hbWVfXykKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXworICAgICAgICBmb3IgZXhhbXBsZSBpbiBmaW5kZXIuZmluZChvYmosIG5hbWUsIG1vZHVsZSk6CisgICAgICAgICAgICBydW5uZXIucnVuKGV4YW1wbGUpCisgICAgICAgIGYsIHQgPSBydW5uZXIuZmFpbHVyZXMsIHJ1bm5lci50cmllcworICAgICAgICBpZiBmOgorICAgICAgICAgICAgcmFpc2UgdGVzdC50ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCgiJWQgb2YgJWQgZG9jdGVzdHMgZmFpbGVkIiAlIChmLCB0KSkKKyAgICBmaW5hbGx5OgorICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZV9zdGRvdXQKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBwcmludCAnZG9jdGVzdCAoJXMpIC4uLiAlZCB0ZXN0cyB3aXRoIHplcm8gZmFpbHVyZXMnICUgKG1vZHVsZS5fX25hbWVfXywgdCkKKyAgICByZXR1cm4gZiwgdAorCisKKworY2xhc3MgWmlwU3VwcG9ydFRlc3RzKEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKToKKyAgICAjIFdlIHVzZSB0aGUgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UgdG8gcmVzdG9yZQorICAgICMgdGhlIHN0YXRlIG9mIHRoZSBpbXBvcnQgcmVsYXRlZCBpbmZvcm1hdGlvbgorICAgICMgaW4gdGhlIHN5cyBtb2R1bGUgYWZ0ZXIgZWFjaCB0ZXN0CisgICAgIyBXZSBhbHNvIGNsZWFyIHRoZSBsaW5lY2FjaGUgYW5kIHppcGltcG9ydCBjYWNoZQorICAgICMganVzdCB0byBhdm9pZCBhbnkgYm9ndXMgZXJyb3JzIGR1ZSB0byBuYW1lIHJldXNlIGluIHRoZSB0ZXN0cworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgbGluZWNhY2hlLmNsZWFyY2FjaGUoKQorICAgICAgICB6aXBpbXBvcnQuX3ppcF9kaXJlY3RvcnlfY2FjaGUuY2xlYXIoKQorICAgICAgICBJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZS5zZXRVcChzZWxmKQorCisKKyAgICBkZWYgdGVzdF9pbnNwZWN0X2dldHNvdXJjZV9pc3N1ZTQyMjMoc2VsZik6CisgICAgICAgIHRlc3Rfc3JjID0gImRlZiBmb28oKTogcGFzc1xuIgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgZDoKKyAgICAgICAgICAgIGluaXRfbmFtZSA9IG1ha2Vfc2NyaXB0KGQsICdfX2luaXRfXycsIHRlc3Rfc3JjKQorICAgICAgICAgICAgbmFtZV9pbl96aXAgPSBvcy5wYXRoLmpvaW4oJ3ppcF9wa2cnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShpbml0X25hbWUpKQorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KGQsICd0ZXN0X3ppcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X25hbWUsIG5hbWVfaW5femlwKQorICAgICAgICAgICAgb3MucmVtb3ZlKGluaXRfbmFtZSkKKyAgICAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCB6aXBfbmFtZSkKKyAgICAgICAgICAgIGltcG9ydCB6aXBfcGtnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0c291cmNlKHppcF9wa2cuZm9vKSwgdGVzdF9zcmMpCisKKyAgICBkZWYgdGVzdF9kb2N0ZXN0X2lzc3VlNDE5NyhzZWxmKToKKyAgICAgICAgIyBUbyBhdm9pZCBoYXZpbmcgdG8ga2VlcCB0d28gY29waWVzIG9mIHRoZSBkb2N0ZXN0IG1vZHVsZSdzCisgICAgICAgICMgdW5pdCB0ZXN0cyBpbiBzeW5jLCB0aGlzIHRlc3Qgd29ya3MgYnkgdGFraW5nIHRoZSBzb3VyY2Ugb2YKKyAgICAgICAgIyB0ZXN0X2RvY3Rlc3QgaXRzZWxmLCByZXdyaXRpbmcgaXQgYSBiaXQgdG8gY29wZSB3aXRoIGEgbmV3CisgICAgICAgICMgbG9jYXRpb24sIGFuZCB0aGVuIHRocm93aW5nIGl0IGluIGEgemlwIGZpbGUgdG8gbWFrZSBzdXJlCisgICAgICAgICMgZXZlcnl0aGluZyBzdGlsbCB3b3JrcyBjb3JyZWN0bHkKKyAgICAgICAgdGVzdF9zcmMgPSBpbnNwZWN0LmdldHNvdXJjZSh0ZXN0X2RvY3Rlc3QpCisgICAgICAgIHRlc3Rfc3JjID0gdGVzdF9zcmMucmVwbGFjZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2RvY3Rlc3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgdGVzdF96aXBwZWRfZG9jdGVzdCBhcyB0ZXN0X2RvY3Rlc3QiKQorICAgICAgICB0ZXN0X3NyYyA9IHRlc3Rfc3JjLnJlcGxhY2UoInRlc3QudGVzdF9kb2N0ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3ppcHBlZF9kb2N0ZXN0IikKKyAgICAgICAgdGVzdF9zcmMgPSB0ZXN0X3NyYy5yZXBsYWNlKCJ0ZXN0LnNhbXBsZV9kb2N0ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzYW1wbGVfemlwcGVkX2RvY3Rlc3QiKQorICAgICAgICAjIFRoZSBzYW1wbGUgZG9jdGVzdCBmaWxlcyByZXdyaXR0ZW4gdG8gaW5jbHVkZSBpbiB0aGUgemlwcGVkIHZlcnNpb24uCisgICAgICAgIHNhbXBsZV9zb3VyY2VzID0ge30KKyAgICAgICAgZm9yIG1vZCBpbiBbc2FtcGxlX2RvY3Rlc3QsIHNhbXBsZV9kb2N0ZXN0X25vX2RvY3Rlc3RzLAorICAgICAgICAgICAgICAgICAgICBzYW1wbGVfZG9jdGVzdF9ub19kb2NzdHJpbmdzXToKKyAgICAgICAgICAgIHNyYyA9IGluc3BlY3QuZ2V0c291cmNlKG1vZCkKKyAgICAgICAgICAgIHNyYyA9IHNyYy5yZXBsYWNlKCJ0ZXN0LnRlc3RfZG9jdGVzdCIsICJ0ZXN0X3ppcHBlZF9kb2N0ZXN0IikKKyAgICAgICAgICAgICMgUmV3cml0ZSB0aGUgbW9kdWxlIG5hbWUgc28gdGhhdCwgZm9yIGV4YW1wbGUsCisgICAgICAgICAgICAjICJ0ZXN0LnNhbXBsZV9kb2N0ZXN0IiBiZWNvbWVzICJzYW1wbGVfemlwcGVkX2RvY3Rlc3QiLgorICAgICAgICAgICAgbW9kX25hbWUgPSBtb2QuX19uYW1lX18uc3BsaXQoIi4iKVstMV0KKyAgICAgICAgICAgIG1vZF9uYW1lID0gbW9kX25hbWUucmVwbGFjZSgic2FtcGxlXyIsICJzYW1wbGVfemlwcGVkXyIpCisgICAgICAgICAgICBzYW1wbGVfc291cmNlc1ttb2RfbmFtZV0gPSBzcmMKKworICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgZDoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gbWFrZV9zY3JpcHQoZCwgJ3Rlc3RfemlwcGVkX2RvY3Rlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3NyYykKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChkLCAndGVzdF96aXAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUpCisgICAgICAgICAgICB6ID0gemlwZmlsZS5aaXBGaWxlKHppcF9uYW1lLCAnYScpCisgICAgICAgICAgICBmb3IgbW9kX25hbWUsIHNyYyBpbiBzYW1wbGVfc291cmNlcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHoud3JpdGVzdHIobW9kX25hbWUgKyAiLnB5Iiwgc3JjKQorICAgICAgICAgICAgei5jbG9zZSgpCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxlKHppcF9uYW1lLCAncicpCisgICAgICAgICAgICAgICAgcHJpbnQgJ0NvbnRlbnRzIG9mICVyOicgJSB6aXBfbmFtZQorICAgICAgICAgICAgICAgIHppcF9maWxlLnByaW50ZGlyKCkKKyAgICAgICAgICAgICAgICB6aXBfZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBvcy5yZW1vdmUoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgemlwX25hbWUpCisgICAgICAgICAgICBpbXBvcnQgdGVzdF96aXBwZWRfZG9jdGVzdAorICAgICAgICAgICAgIyBTb21lIG9mIHRoZSBkb2MgdGVzdHMgZGVwZW5kIG9uIHRoZSBjb2xvY2F0ZWQgdGV4dCBmaWxlcworICAgICAgICAgICAgIyB3aGljaCBhcmVuJ3QgYXZhaWxhYmxlIHRvIHRoZSB6aXBwZWQgdmVyc2lvbiAodGhlIGRvY3Rlc3QKKyAgICAgICAgICAgICMgbW9kdWxlIGN1cnJlbnRseSByZXF1aXJlcyByZWFsIGZpbGVuYW1lcyBmb3Igbm9uLWVtYmVkZGVkCisgICAgICAgICAgICAjIHRlc3RzKS4gU28gd2UncmUgZm9yY2VkIHRvIGJlIHNlbGVjdGl2ZSBhYm91dCB3aGljaCB0ZXN0cworICAgICAgICAgICAgIyB0byBydW4uCisgICAgICAgICAgICAjIGRvY3Rlc3QgY291bGQgcmVhbGx5IHVzZSBzb21lIEFQSXMgd2hpY2ggdGFrZSBhIHRleHQKKyAgICAgICAgICAgICMgc3RyaW5nIG9yIGEgZmlsZSBvYmplY3QgaW5zdGVhZCBvZiBhIGZpbGVuYW1lLi4uCisgICAgICAgICAgICBrbm93bl9nb29kX3Rlc3RzID0gWworICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlQ2xhc3MsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVDbGFzcy5OZXN0ZWRDbGFzcywKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LlNhbXBsZUNsYXNzLk5lc3RlZENsYXNzLl9faW5pdF9fLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlQ2xhc3MuX19pbml0X18sCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVDbGFzcy5hX2NsYXNzbWV0aG9kLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlQ2xhc3MuYV9wcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LlNhbXBsZUNsYXNzLmFfc3RhdGljbWV0aG9kLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlQ2xhc3MuZG91YmxlLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlQ2xhc3MuZ2V0LAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlTmV3U3R5bGVDbGFzcywKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LlNhbXBsZU5ld1N0eWxlQ2xhc3MuX19pbml0X18sCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVOZXdTdHlsZUNsYXNzLmRvdWJsZSwKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LlNhbXBsZU5ld1N0eWxlQ2xhc3MuZ2V0LAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3Qub2xkX3Rlc3QxLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3Qub2xkX3Rlc3QyLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3Qub2xkX3Rlc3QzLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3Qub2xkX3Rlc3Q0LAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3Quc2FtcGxlX2Z1bmMsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3QsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3RQYXJzZXIsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3RSdW5uZXIuYmFzaWNzLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF9Eb2NUZXN0UnVubmVyLmV4Y2VwdGlvbnMsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3RSdW5uZXIub3B0aW9uX2RpcmVjdGl2ZXMsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3RSdW5uZXIub3B0aW9uZmxhZ3MsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3RSdW5uZXIudmVyYm9zZV9mbGFnLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF9FeGFtcGxlLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF9kZWJ1ZywKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfcGRiX3NldF90cmFjZSwKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfcGRiX3NldF90cmFjZV9uZXN0ZWQsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X3Rlc3Rzb3VyY2UsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X3RyYWlsaW5nX3NwYWNlX2luX3Rlc3QsCisgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3RTdWl0ZSwKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jVGVzdEZpbmRlciwKKyAgICAgICAgICAgIF0KKyAgICAgICAgICAgICMgVGhlc2UgcmVtYWluaW5nIHRlc3RzIGFyZSB0aGUgb25lcyB3aGljaCBuZWVkIGFjY2VzcworICAgICAgICAgICAgIyB0byB0aGUgZGF0YSBmaWxlcywgc28gd2UgZG9uJ3QgcnVuIHRoZW0KKyAgICAgICAgICAgIGZhaWxfZHVlX3RvX21pc3NpbmdfZGF0YV9maWxlcyA9IFsKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jRmlsZVN1aXRlLAorICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF90ZXN0ZmlsZSwKKyAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfdW5pdHRlc3RfcmVwb3J0ZmxhZ3MsCisgICAgICAgICAgICBdCisgICAgICAgICAgICAjIE5lZWRlZCBmb3IgdGVzdF9Eb2NUZXN0UGFyc2VyIGFuZCB0ZXN0X2RlYnVnCisgICAgICAgICAgICBkZXByZWNhdGlvbnMgPSBbXQorICAgICAgICAgICAgaWYgX19kZWJ1Z19fOgorICAgICAgICAgICAgICAgICMgSWdub3JlIGFsbCB3YXJuaW5ncyBhYm91dCB0aGUgdXNlIG9mIGNsYXNzIFRlc3RlciBpbiB0aGlzIG1vZHVsZS4KKyAgICAgICAgICAgICAgICBkZXByZWNhdGlvbnMuYXBwZW5kKCgiY2xhc3MgVGVzdGVyIGlzIGRlcHJlY2F0ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpKQorICAgICAgICAgICAgaWYgc3lzLnB5M2t3YXJuaW5nOgorICAgICAgICAgICAgICAgIGRlcHJlY2F0aW9ucyArPSBbCisgICAgICAgICAgICAgICAgICAgICgiYmFja3F1b3RlIG5vdCBzdXBwb3J0ZWQiLCBTeW50YXhXYXJuaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgKCJleGVjZmlsZS4uIG5vdCBzdXBwb3J0ZWQiLCBEZXByZWNhdGlvbldhcm5pbmcpXQorICAgICAgICAgICAgd2l0aCB0ZXN0LnRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygqZGVwcmVjYXRpb25zKToKKyAgICAgICAgICAgICAgICBmb3Igb2JqIGluIGtub3duX2dvb2RfdGVzdHM6CisgICAgICAgICAgICAgICAgICAgIF9ydW5fb2JqZWN0X2RvY3Rlc3Qob2JqLCB0ZXN0X3ppcHBlZF9kb2N0ZXN0KQorCisgICAgZGVmIHRlc3RfZG9jdGVzdF9tYWluX2lzc3VlNDE5NyhzZWxmKToKKyAgICAgICAgdGVzdF9zcmMgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgICAgICBjbGFzcyBUZXN0OgorICAgICAgICAgICAgICAgICAgICAgICAgIj4+PiAnbGluZSAyJyIKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICBpbXBvcnQgZG9jdGVzdAorICAgICAgICAgICAgICAgICAgICBkb2N0ZXN0LnRlc3Rtb2QoKQorICAgICAgICAgICAgICAgICAgICAiIiIpCisgICAgICAgIHBhdHRlcm4gPSAnRmlsZSAiJXMiLCBsaW5lIDIsIGluICVzJworICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgZDoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gbWFrZV9zY3JpcHQoZCwgJ3NjcmlwdCcsIHRlc3Rfc3JjKQorICAgICAgICAgICAgZXhpdF9jb2RlLCBkYXRhID0gcnVuX3B5dGhvbihzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gcGF0dGVybiAlIChzY3JpcHRfbmFtZSwgIl9fbWFpbl9fLlRlc3QiKQorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAiRXhwZWN0ZWQgbGluZSIsIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgcHJpbnQgIkdvdCBzdGRvdXQ6IgorICAgICAgICAgICAgICAgIHByaW50IGRhdGEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQsIGRhdGEpCisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoZCwgInRlc3RfemlwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCAnX19tYWluX18ucHknKQorICAgICAgICAgICAgZXhpdF9jb2RlLCBkYXRhID0gcnVuX3B5dGhvbih6aXBfbmFtZSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gcGF0dGVybiAlIChydW5fbmFtZSwgIl9fbWFpbl9fLlRlc3QiKQorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAiRXhwZWN0ZWQgbGluZSIsIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgcHJpbnQgIkdvdCBzdGRvdXQ6IgorICAgICAgICAgICAgICAgIHByaW50IGRhdGEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQsIGRhdGEpCisKKyAgICBkZWYgdGVzdF9wZGJfaXNzdWU0MjAxKHNlbGYpOgorICAgICAgICB0ZXN0X3NyYyA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHBkYgorICAgICAgICAgICAgICAgICAgICBwZGIucnVuY2FsbChmKQorICAgICAgICAgICAgICAgICAgICAiIiIpCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBkOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBtYWtlX3NjcmlwdChkLCAnc2NyaXB0JywgdGVzdF9zcmMpCisgICAgICAgICAgICBwID0gc3Bhd25fcHl0aG9uKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgcC5zdGRpbi53cml0ZSgnbFxuJykKKyAgICAgICAgICAgIGRhdGEgPSBraWxsX3B5dGhvbihwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzY3JpcHRfbmFtZSwgZGF0YSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChkLCAidGVzdF96aXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUsICdfX21haW5fXy5weScpCisgICAgICAgICAgICBwID0gc3Bhd25fcHl0aG9uKHppcF9uYW1lKQorICAgICAgICAgICAgcC5zdGRpbi53cml0ZSgnbFxuJykKKyAgICAgICAgICAgIGRhdGEgPSBraWxsX3B5dGhvbihwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihydW5fbmFtZSwgZGF0YSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdC50ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KFppcFN1cHBvcnRUZXN0cykKKyAgICB0ZXN0LnRlc3Rfc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfemxpYi5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3psaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNkZmZkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3psaWIucHkKQEAgLTAsMCArMSw2MDkgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUsIHVubGluaywgcmVxdWlyZXMKK2ltcG9ydCBiaW5hc2NpaQoraW1wb3J0IHJhbmRvbQorZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgcHJlY2lzaW9uYmlnbWVtdGVzdCwgXzFHLCBfNEcKK2ltcG9ydCBzeXMKKwordHJ5OgorICAgIGltcG9ydCBtbWFwCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgbW1hcCA9IE5vbmUKKworemxpYiA9IGltcG9ydF9tb2R1bGUoJ3psaWInKQorCisKK2NsYXNzIENoZWNrc3VtVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgY2hlY2tzdW0gdGVzdCBjYXNlcworICAgIGRlZiB0ZXN0X2NyYzMyc3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5jcmMzMigiIiksIHpsaWIuY3JjMzIoIiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoemxpYi5jcmMzMigiYWJjIiwgMHhmZmZmZmZmZikpCisKKyAgICBkZWYgdGVzdF9jcmMzMmVtcHR5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuY3JjMzIoIiIsIDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuY3JjMzIoIiIsIDEpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuY3JjMzIoIiIsIDQzMiksIDQzMikKKworICAgIGRlZiB0ZXN0X2FkbGVyMzJzdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmFkbGVyMzIoIiIpLCB6bGliLmFkbGVyMzIoIiIsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoemxpYi5hZGxlcjMyKCJhYmMiLCAweGZmZmZmZmZmKSkKKworICAgIGRlZiB0ZXN0X2FkbGVyMzJlbXB0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmFkbGVyMzIoIiIsIDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuYWRsZXIzMigiIiwgMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5hZGxlcjMyKCIiLCA0MzIpLCA0MzIpCisKKyAgICBkZWYgYXNzZXJ0RXF1YWwzMihzZWxmLCBzZWVuLCBleHBlY3RlZCk6CisgICAgICAgICMgMzItYml0IHZhbHVlcyBtYXNrZWQgLS0gY2hlY2tzdW1zIG9uIDMyLSB2cyA2NC0gYml0IG1hY2hpbmVzCisgICAgICAgICMgVGhpcyBpcyBpbXBvcnRhbnQgaWYgYml0IDMxICgweDA4MDAwMDAwTCkgaXMgc2V0LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlZW4gJiAweDBGRkZGRkZGRkwsIGV4cGVjdGVkICYgMHgwRkZGRkZGRkZMKQorCisgICAgZGVmIHRlc3RfcGVuZ3VpbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwzMih6bGliLmNyYzMyKCJwZW5ndWluIiwgMCksIDB4MGU1YzFhMTIwTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbDMyKHpsaWIuY3JjMzIoInBlbmd1aW4iLCAxKSwgMHg0M2I2YWE5NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbDMyKHpsaWIuYWRsZXIzMigicGVuZ3VpbiIsIDApLCAweDBiY2YwMmY2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsMzIoemxpYi5hZGxlcjMyKCJwZW5ndWluIiwgMSksIDB4MGJkNjAyZjcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmNyYzMyKCJwZW5ndWluIiksIHpsaWIuY3JjMzIoInBlbmd1aW4iLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmFkbGVyMzIoInBlbmd1aW4iKSx6bGliLmFkbGVyMzIoInBlbmd1aW4iLDEpKQorCisgICAgZGVmIHRlc3RfYWJjZGVmZ2hpamtsbW5vcChzZWxmKToKKyAgICAgICAgIiIidGVzdCBpc3N1ZTEyMDIgY29tcGxpYW5jZTogc2lnbmVkIGNyYzMyLCBhZGxlcjMyIGluIDIueCIiIgorICAgICAgICBmb28gPSAnYWJjZGVmZ2hpamtsbW5vcCcKKyAgICAgICAgIyBleHBsaWNpdGx5IHRlc3Qgc2lnbmVkIGJlaGF2aW9yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5jcmMzMihmb28pLCAtMTgwODA4ODk0MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmNyYzMyKCdzcGFtJyksIDExMzg0MjU2NjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5hZGxlcjMyKGZvbytmb28pLCAtNzIxNDE2OTQzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuYWRsZXIzMignc3BhbScpLCA3MjI4NjY0MikKKworICAgIGRlZiB0ZXN0X3NhbWVfYXNfYmluYXNjaWlfY3JjMzIoc2VsZik6CisgICAgICAgIGZvbyA9ICdhYmNkZWZnaGlqa2xtbm9wJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmNyYzMyKGZvbyksIHpsaWIuY3JjMzIoZm9vKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5jcmMzMignc3BhbScpLCB6bGliLmNyYzMyKCdzcGFtJykpCisKKyAgICBkZWYgdGVzdF9uZWdhdGl2ZV9jcmNfaXZfaW5wdXQoc2VsZik6CisgICAgICAgICMgVGhlIHJhbmdlIG9mIHZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIGNyYyBzdGF0ZSBzaG91bGQgYmUKKyAgICAgICAgIyAtMioqMzEgdGhyb3VnaCAyKiozMi0xIHRvIGFsbG93IGlucHV0cyBhcnRpZmljYWxseSBjb25zdHJhaW5lZAorICAgICAgICAjIHRvIGEgc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuY3JjMzIoJ2hhbScsIC0xKSwgemxpYi5jcmMzMignaGFtJywgMHhmZmZmZmZmZkwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuY3JjMzIoJ3NwYW0nLCAtMzE0MTU5MyksCisgICAgICAgICAgICAgICAgICAgICAgICAgemxpYi5jcmMzMignc3BhbScsICAweGZmZDAxMDI3TCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5jcmMzMignc3BhbScsIC0oMioqMzEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB6bGliLmNyYzMyKCdzcGFtJywgICgyKiozMSkpKQorCisKK2NsYXNzIEV4Y2VwdGlvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIG1ha2Ugc3VyZSB3ZSBnZW5lcmF0ZSBzb21lIGV4cGVjdGVkIGVycm9ycworICAgIGRlZiB0ZXN0X2JhZGxldmVsKHNlbGYpOgorICAgICAgICAjIHNwZWNpZnlpbmcgY29tcHJlc3Npb24gbGV2ZWwgb3V0IG9mIHJhbmdlIGNhdXNlcyBhbiBlcnJvcgorICAgICAgICAjIChidXQgLTEgaXMgWl9ERUZBVUxUX0NPTVBSRVNTSU9OIGFuZCBhcHBhcmVudGx5IHRoZSB6bGliCisgICAgICAgICMgYWNjZXB0cyAwIHRvbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemxpYi5lcnJvciwgemxpYi5jb21wcmVzcywgJ0VSUk9SJywgMTApCisKKyAgICBkZWYgdGVzdF9iYWRjb21wcmVzc29iaihzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgZmFpbHVyZSBvbiBidWlsZGluZyBjb21wcmVzcyBvYmplY3Qgd2l0aCBiYWQgcGFyYW1zCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHpsaWIuY29tcHJlc3NvYmosIDEsIHpsaWIuREVGTEFURUQsIDApCisgICAgICAgICMgc3BlY2lmeWluZyB0b3RhbCBiaXRzIHRvbyBsYXJnZSBjYXVzZXMgYW4gZXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICB6bGliLmNvbXByZXNzb2JqLCAxLCB6bGliLkRFRkxBVEVELCB6bGliLk1BWF9XQklUUyArIDEpCisKKyAgICBkZWYgdGVzdF9iYWRkZWNvbXByZXNzb2JqKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSBmYWlsdXJlIG9uIGJ1aWxkaW5nIGRlY29tcHJlc3Mgb2JqZWN0IHdpdGggYmFkIHBhcmFtcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB6bGliLmRlY29tcHJlc3NvYmosIC0xKQorCisgICAgZGVmIHRlc3RfZGVjb21wcmVzc29ial9iYWRmbHVzaChzZWxmKToKKyAgICAgICAgIyB2ZXJpZnkgZmFpbHVyZSBvbiBjYWxsaW5nIGRlY29tcHJlc3NvYmouZmx1c2ggd2l0aCBiYWQgcGFyYW1zCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHpsaWIuZGVjb21wcmVzc29iaigpLmZsdXNoLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB6bGliLmRlY29tcHJlc3NvYmooKS5mbHVzaCwgLTEpCisKKworY2xhc3MgQmFzZUNvbXByZXNzVGVzdENhc2Uob2JqZWN0KToKKyAgICBkZWYgY2hlY2tfYmlnX2NvbXByZXNzX2J1ZmZlcihzZWxmLCBzaXplLCBjb21wcmVzc19mdW5jKToKKyAgICAgICAgXzFNID0gMTAyNCAqIDEwMjQKKyAgICAgICAgZm10ID0gIiUlMCVkeCIgJSAoMiAqIF8xTSkKKyAgICAgICAgIyBHZW5lcmF0ZSAxME1CIHdvcnRoIG9mIHJhbmRvbSwgYW5kIGV4cGFuZCBpdCBieSByZXBlYXRpbmcgaXQuCisgICAgICAgICMgVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB6bGliJ3MgbWVtb3J5IGlzIG5vdCBiaWcgZW5vdWdoIHRvIGV4cGxvaXQKKyAgICAgICAgIyBzdWNoIHNwcmVhZCBvdXQgcmVkdW5kYW5jeS4KKyAgICAgICAgZGF0YSA9ICcnLmpvaW4oW2JpbmFzY2lpLmEyYl9oZXgoZm10ICUgcmFuZG9tLmdldHJhbmRiaXRzKDggKiBfMU0pKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApXSkKKyAgICAgICAgZGF0YSA9IGRhdGEgKiAoc2l6ZSAvLyBsZW4oZGF0YSkgKyAxKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21wcmVzc19mdW5jKGRhdGEpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIFJlbGVhc2UgbWVtb3J5CisgICAgICAgICAgICBkYXRhID0gTm9uZQorCisgICAgZGVmIGNoZWNrX2JpZ19kZWNvbXByZXNzX2J1ZmZlcihzZWxmLCBzaXplLCBkZWNvbXByZXNzX2Z1bmMpOgorICAgICAgICBkYXRhID0gJ3gnICogc2l6ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21wcmVzc2VkID0gemxpYi5jb21wcmVzcyhkYXRhLCAxKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIyBSZWxlYXNlIG1lbW9yeQorICAgICAgICAgICAgZGF0YSA9IE5vbmUKKyAgICAgICAgZGF0YSA9IGRlY29tcHJlc3NfZnVuYyhjb21wcmVzc2VkKQorICAgICAgICAjIFNhbml0eSBjaGVjaworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkYXRhKSwgc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRhdGEuc3RyaXAoJ3gnKSksIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkYXRhID0gTm9uZQorCisKK2NsYXNzIENvbXByZXNzVGVzdENhc2UoQmFzZUNvbXByZXNzVGVzdENhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgY29tcHJlc3Npb24gaW4gb25lIGdvICh3aG9sZSBtZXNzYWdlIGNvbXByZXNzaW9uKQorICAgIGRlZiB0ZXN0X3NwZWVjaChzZWxmKToKKyAgICAgICAgeCA9IHpsaWIuY29tcHJlc3MoSEFNTEVUX1NDRU5FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuZGVjb21wcmVzcyh4KSwgSEFNTEVUX1NDRU5FKQorCisgICAgZGVmIHRlc3Rfc3BlZWNoMTI4KHNlbGYpOgorICAgICAgICAjIGNvbXByZXNzIG1vcmUgZGF0YQorICAgICAgICBkYXRhID0gSEFNTEVUX1NDRU5FICogMTI4CisgICAgICAgIHggPSB6bGliLmNvbXByZXNzKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5kZWNvbXByZXNzKHgpLCBkYXRhKQorCisgICAgZGVmIHRlc3RfaW5jb21wbGV0ZV9zdHJlYW0oc2VsZik6CisgICAgICAgICMgQW4gdXNlZnVsIGVycm9yIG1lc3NhZ2UgaXMgZ2l2ZW4KKyAgICAgICAgeCA9IHpsaWIuY29tcHJlc3MoSEFNTEVUX1NDRU5FKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCh6bGliLmVycm9yLAorICAgICAgICAgICAgIkVycm9yIC01IHdoaWxlIGRlY29tcHJlc3NpbmcgZGF0YTogaW5jb21wbGV0ZSBvciB0cnVuY2F0ZWQgc3RyZWFtIiwKKyAgICAgICAgICAgIHpsaWIuZGVjb21wcmVzcywgeFs6LTFdKQorCisgICAgIyBNZW1vcnkgdXNlIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRha2VzIGludG8gYWNjb3VudCBvdmVyYWxsb2NhdGlvbgorCisgICAgQHByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1fMUcgKyAxMDI0ICogMTAyNCwgbWVtdXNlPTMpCisgICAgZGVmIHRlc3RfYmlnX2NvbXByZXNzX2J1ZmZlcihzZWxmLCBzaXplKToKKyAgICAgICAgY29tcHJlc3MgPSBsYW1iZGEgczogemxpYi5jb21wcmVzcyhzLCAxKQorICAgICAgICBzZWxmLmNoZWNrX2JpZ19jb21wcmVzc19idWZmZXIoc2l6ZSwgY29tcHJlc3MpCisKKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV8xRyArIDEwMjQgKiAxMDI0LCBtZW11c2U9MikKKyAgICBkZWYgdGVzdF9iaWdfZGVjb21wcmVzc19idWZmZXIoc2VsZiwgc2l6ZSk6CisgICAgICAgIHNlbGYuY2hlY2tfYmlnX2RlY29tcHJlc3NfYnVmZmVyKHNpemUsIHpsaWIuZGVjb21wcmVzcykKKworCitjbGFzcyBDb21wcmVzc09iamVjdFRlc3RDYXNlKEJhc2VDb21wcmVzc1Rlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IGNvbXByZXNzaW9uIG9iamVjdAorICAgIGRlZiB0ZXN0X3BhaXIoc2VsZik6CisgICAgICAgICMgc3RyYWlnaHRmb3J3YXJkIGNvbXByZXNzL2RlY29tcHJlc3Mgb2JqZWN0cworICAgICAgICBkYXRhID0gSEFNTEVUX1NDRU5FICogMTI4CisgICAgICAgIGNvID0gemxpYi5jb21wcmVzc29iaigpCisgICAgICAgIHgxID0gY28uY29tcHJlc3MoZGF0YSkKKyAgICAgICAgeDIgPSBjby5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHpsaWIuZXJyb3IsIGNvLmZsdXNoKSAjIHNlY29uZCBmbHVzaCBzaG91bGQgbm90IHdvcmsKKyAgICAgICAgZGNvID0gemxpYi5kZWNvbXByZXNzb2JqKCkKKyAgICAgICAgeTEgPSBkY28uZGVjb21wcmVzcyh4MSArIHgyKQorICAgICAgICB5MiA9IGRjby5mbHVzaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgeTEgKyB5MikKKworICAgIGRlZiB0ZXN0X2NvbXByZXNzb3B0aW9ucyhzZWxmKToKKyAgICAgICAgIyBzcGVjaWZ5IGxvdHMgb2Ygb3B0aW9ucyB0byBjb21wcmVzc29iaigpCisgICAgICAgIGxldmVsID0gMgorICAgICAgICBtZXRob2QgPSB6bGliLkRFRkxBVEVECisgICAgICAgIHdiaXRzID0gLTEyCisgICAgICAgIG1lbWxldmVsID0gOQorICAgICAgICBzdHJhdGVneSA9IHpsaWIuWl9GSUxURVJFRAorICAgICAgICBjbyA9IHpsaWIuY29tcHJlc3NvYmoobGV2ZWwsIG1ldGhvZCwgd2JpdHMsIG1lbWxldmVsLCBzdHJhdGVneSkKKyAgICAgICAgeDEgPSBjby5jb21wcmVzcyhIQU1MRVRfU0NFTkUpCisgICAgICAgIHgyID0gY28uZmx1c2goKQorICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmood2JpdHMpCisgICAgICAgIHkxID0gZGNvLmRlY29tcHJlc3MoeDEgKyB4MikKKyAgICAgICAgeTIgPSBkY28uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEhBTUxFVF9TQ0VORSwgeTEgKyB5MikKKworICAgIGRlZiB0ZXN0X2NvbXByZXNzaW5jcmVtZW50YWwoc2VsZik6CisgICAgICAgICMgY29tcHJlc3Mgb2JqZWN0IGluIHN0ZXBzLCBkZWNvbXByZXNzIG9iamVjdCBhcyBvbmUtc2hvdAorICAgICAgICBkYXRhID0gSEFNTEVUX1NDRU5FICogMTI4CisgICAgICAgIGNvID0gemxpYi5jb21wcmVzc29iaigpCisgICAgICAgIGJ1ZnMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oZGF0YSksIDI1Nik6CisgICAgICAgICAgICBidWZzLmFwcGVuZChjby5jb21wcmVzcyhkYXRhW2k6aSsyNTZdKSkKKyAgICAgICAgYnVmcy5hcHBlbmQoY28uZmx1c2goKSkKKyAgICAgICAgY29tYnVmID0gJycuam9pbihidWZzKQorCisgICAgICAgIGRjbyA9IHpsaWIuZGVjb21wcmVzc29iaigpCisgICAgICAgIHkxID0gZGNvLmRlY29tcHJlc3MoJycuam9pbihidWZzKSkKKyAgICAgICAgeTIgPSBkY28uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHkxICsgeTIpCisKKyAgICBkZWYgdGVzdF9kZWNvbXBpbmMoc2VsZiwgZmx1c2g9RmFsc2UsIHNvdXJjZT1Ob25lLCBjeD0yNTYsIGRjeD02NCk6CisgICAgICAgICMgY29tcHJlc3Mgb2JqZWN0IGluIHN0ZXBzLCBkZWNvbXByZXNzIG9iamVjdCBpbiBzdGVwcworICAgICAgICBzb3VyY2UgPSBzb3VyY2Ugb3IgSEFNTEVUX1NDRU5FCisgICAgICAgIGRhdGEgPSBzb3VyY2UgKiAxMjgKKyAgICAgICAgY28gPSB6bGliLmNvbXByZXNzb2JqKCkKKyAgICAgICAgYnVmcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihkYXRhKSwgY3gpOgorICAgICAgICAgICAgYnVmcy5hcHBlbmQoY28uY29tcHJlc3MoZGF0YVtpOmkrY3hdKSkKKyAgICAgICAgYnVmcy5hcHBlbmQoY28uZmx1c2goKSkKKyAgICAgICAgY29tYnVmID0gJycuam9pbihidWZzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgemxpYi5kZWNvbXByZXNzKGNvbWJ1ZikpCisKKyAgICAgICAgZGNvID0gemxpYi5kZWNvbXByZXNzb2JqKCkKKyAgICAgICAgYnVmcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihjb21idWYpLCBkY3gpOgorICAgICAgICAgICAgYnVmcy5hcHBlbmQoZGNvLmRlY29tcHJlc3MoY29tYnVmW2k6aStkY3hdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIGRjby51bmNvbnN1bWVkX3RhaWwsICMjIyMjIyMjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoQSkgdWN0IHNob3VsZCBiZSAnJzogbm90ICVkIGxvbmciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihkY28udW5jb25zdW1lZF90YWlsKSkKKyAgICAgICAgaWYgZmx1c2g6CisgICAgICAgICAgICBidWZzLmFwcGVuZChkY28uZmx1c2goKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgY2h1bmsgPSBkY28uZGVjb21wcmVzcygnJykKKyAgICAgICAgICAgICAgICBpZiBjaHVuazoKKyAgICAgICAgICAgICAgICAgICAgYnVmcy5hcHBlbmQoY2h1bmspCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgZGNvLnVuY29uc3VtZWRfdGFpbCwgIyMjIyMjIyMKKyAgICAgICAgICAgICAgICAgICAgICAgICAiKEIpIHVjdCBzaG91bGQgYmUgJyc6IG5vdCAlZCBsb25nIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oZGNvLnVuY29uc3VtZWRfdGFpbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgJycuam9pbihidWZzKSkKKyAgICAgICAgIyBGYWlsdXJlIG1lYW5zOiAiZGVjb21wcmVzc29iaiB3aXRoIGluaXQgb3B0aW9ucyBmYWlsZWQiCisKKyAgICBkZWYgdGVzdF9kZWNvbXBpbmNmbHVzaChzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X2RlY29tcGluYyhmbHVzaD1UcnVlKQorCisgICAgZGVmIHRlc3RfZGVjb21waW1heChzZWxmLCBzb3VyY2U9Tm9uZSwgY3g9MjU2LCBkY3g9NjQpOgorICAgICAgICAjIGNvbXByZXNzIGluIHN0ZXBzLCBkZWNvbXByZXNzIGluIGxlbmd0aC1yZXN0cmljdGVkIHN0ZXBzCisgICAgICAgIHNvdXJjZSA9IHNvdXJjZSBvciBIQU1MRVRfU0NFTkUKKyAgICAgICAgIyBDaGVjayBhIGRlY29tcHJlc3Npb24gb2JqZWN0IHdpdGggbWF4X2xlbmd0aCBzcGVjaWZpZWQKKyAgICAgICAgZGF0YSA9IHNvdXJjZSAqIDEyOAorICAgICAgICBjbyA9IHpsaWIuY29tcHJlc3NvYmooKQorICAgICAgICBidWZzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCBjeCk6CisgICAgICAgICAgICBidWZzLmFwcGVuZChjby5jb21wcmVzcyhkYXRhW2k6aStjeF0pKQorICAgICAgICBidWZzLmFwcGVuZChjby5mbHVzaCgpKQorICAgICAgICBjb21idWYgPSAnJy5qb2luKGJ1ZnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgemxpYi5kZWNvbXByZXNzKGNvbWJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzZWQgZGF0YSBmYWlsdXJlJykKKworICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmooKQorICAgICAgICBidWZzID0gW10KKyAgICAgICAgY2IgPSBjb21idWYKKyAgICAgICAgd2hpbGUgY2I6CisgICAgICAgICAgICAjbWF4X2xlbmd0aCA9IDEgKyBsZW4oY2IpLy8xMAorICAgICAgICAgICAgY2h1bmsgPSBkY28uZGVjb21wcmVzcyhjYiwgZGN4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsZW4oY2h1bmspID4gZGN4LAorICAgICAgICAgICAgICAgICAgICAnY2h1bmsgdG9vIGJpZyAoJWQ+JWQpJyAlIChsZW4oY2h1bmspLCBkY3gpKQorICAgICAgICAgICAgYnVmcy5hcHBlbmQoY2h1bmspCisgICAgICAgICAgICBjYiA9IGRjby51bmNvbnN1bWVkX3RhaWwKKyAgICAgICAgYnVmcy5hcHBlbmQoZGNvLmZsdXNoKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgJycuam9pbihidWZzKSwgJ1dyb25nIGRhdGEgcmV0cmlldmVkJykKKworICAgIGRlZiB0ZXN0X2RlY29tcHJlc3NtYXhsZW4oc2VsZiwgZmx1c2g9RmFsc2UpOgorICAgICAgICAjIENoZWNrIGEgZGVjb21wcmVzc2lvbiBvYmplY3Qgd2l0aCBtYXhfbGVuZ3RoIHNwZWNpZmllZAorICAgICAgICBkYXRhID0gSEFNTEVUX1NDRU5FICogMTI4CisgICAgICAgIGNvID0gemxpYi5jb21wcmVzc29iaigpCisgICAgICAgIGJ1ZnMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oZGF0YSksIDI1Nik6CisgICAgICAgICAgICBidWZzLmFwcGVuZChjby5jb21wcmVzcyhkYXRhW2k6aSsyNTZdKSkKKyAgICAgICAgYnVmcy5hcHBlbmQoY28uZmx1c2goKSkKKyAgICAgICAgY29tYnVmID0gJycuam9pbihidWZzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHpsaWIuZGVjb21wcmVzcyhjb21idWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wcmVzc2VkIGRhdGEgZmFpbHVyZScpCisKKyAgICAgICAgZGNvID0gemxpYi5kZWNvbXByZXNzb2JqKCkKKyAgICAgICAgYnVmcyA9IFtdCisgICAgICAgIGNiID0gY29tYnVmCisgICAgICAgIHdoaWxlIGNiOgorICAgICAgICAgICAgbWF4X2xlbmd0aCA9IDEgKyBsZW4oY2IpLy8xMAorICAgICAgICAgICAgY2h1bmsgPSBkY28uZGVjb21wcmVzcyhjYiwgbWF4X2xlbmd0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKGNodW5rKSA+IG1heF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAnY2h1bmsgdG9vIGJpZyAoJWQ+JWQpJyAlIChsZW4oY2h1bmspLG1heF9sZW5ndGgpKQorICAgICAgICAgICAgYnVmcy5hcHBlbmQoY2h1bmspCisgICAgICAgICAgICBjYiA9IGRjby51bmNvbnN1bWVkX3RhaWwKKyAgICAgICAgaWYgZmx1c2g6CisgICAgICAgICAgICBidWZzLmFwcGVuZChkY28uZmx1c2goKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdoaWxlIGNodW5rOgorICAgICAgICAgICAgICAgIGNodW5rID0gZGNvLmRlY29tcHJlc3MoJycsIG1heF9sZW5ndGgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsZW4oY2h1bmspID4gbWF4X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2h1bmsgdG9vIGJpZyAoJWQ+JWQpJyAlIChsZW4oY2h1bmspLG1heF9sZW5ndGgpKQorICAgICAgICAgICAgICAgIGJ1ZnMuYXBwZW5kKGNodW5rKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICcnLmpvaW4oYnVmcyksICdXcm9uZyBkYXRhIHJldHJpZXZlZCcpCisKKyAgICBkZWYgdGVzdF9kZWNvbXByZXNzbWF4bGVuZmx1c2goc2VsZik6CisgICAgICAgIHNlbGYudGVzdF9kZWNvbXByZXNzbWF4bGVuKGZsdXNoPVRydWUpCisKKyAgICBkZWYgdGVzdF9tYXhsZW5taXNjKHNlbGYpOgorICAgICAgICAjIE1pc2MgdGVzdHMgb2YgbWF4X2xlbmd0aAorICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmooKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkY28uZGVjb21wcmVzcywgIiIsIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBkY28udW5jb25zdW1lZF90YWlsKQorCisgICAgZGVmIHRlc3RfY2xlYXJfdW5jb25zdW1lZF90YWlsKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMjA1MDogY2FsbGluZyBkZWNvbXByZXNzKCkgd2l0aG91dCBwcm92aWRpbmcgbWF4X2xlbmd0aAorICAgICAgICAjIHNob3VsZCBjbGVhciB0aGUgdW5jb25zdW1lZF90YWlsIGF0dHJpYnV0ZS4KKyAgICAgICAgY2RhdGEgPSAieFx4OWNLTEpceDA2XHgwMFx4MDJNXHgwMSIgICAgICMgImFiYyIKKyAgICAgICAgZGNvID0gemxpYi5kZWNvbXByZXNzb2JqKCkKKyAgICAgICAgZGRhdGEgPSBkY28uZGVjb21wcmVzcyhjZGF0YSwgMSkKKyAgICAgICAgZGRhdGEgKz0gZGNvLmRlY29tcHJlc3MoZGNvLnVuY29uc3VtZWRfdGFpbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY28udW5jb25zdW1lZF90YWlsLCAiIikKKworICAgIGRlZiB0ZXN0X2ZsdXNoZXMoc2VsZik6CisgICAgICAgICMgVGVzdCBmbHVzaCgpIHdpdGggdGhlIHZhcmlvdXMgb3B0aW9ucywgdXNpbmcgYWxsIHRoZQorICAgICAgICAjIGRpZmZlcmVudCBsZXZlbHMgaW4gb3JkZXIgdG8gcHJvdmlkZSBtb3JlIHZhcmlhdGlvbnMuCisgICAgICAgIHN5bmNfb3B0ID0gWydaX05PX0ZMVVNIJywgJ1pfU1lOQ19GTFVTSCcsICdaX0ZVTExfRkxVU0gnXQorICAgICAgICBzeW5jX29wdCA9IFtnZXRhdHRyKHpsaWIsIG9wdCkgZm9yIG9wdCBpbiBzeW5jX29wdAorICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHpsaWIsIG9wdCldCisgICAgICAgIGRhdGEgPSBIQU1MRVRfU0NFTkUgKiA4CisKKyAgICAgICAgZm9yIHN5bmMgaW4gc3luY19vcHQ6CisgICAgICAgICAgICBmb3IgbGV2ZWwgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgICAgIG9iaiA9IHpsaWIuY29tcHJlc3NvYmooIGxldmVsICkKKyAgICAgICAgICAgICAgICBhID0gb2JqLmNvbXByZXNzKCBkYXRhWzozMDAwXSApCisgICAgICAgICAgICAgICAgYiA9IG9iai5mbHVzaCggc3luYyApCisgICAgICAgICAgICAgICAgYyA9IG9iai5jb21wcmVzcyggZGF0YVszMDAwOl0gKQorICAgICAgICAgICAgICAgIGQgPSBvYmouZmx1c2goKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemxpYi5kZWNvbXByZXNzKCcnLmpvaW4oW2EsYixjLGRdKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLCAoIkRlY29tcHJlc3MgZmFpbGVkOiBmbHVzaCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZGU9JWksIGxldmVsPSVpIikgJSAoc3luYywgbGV2ZWwpKQorICAgICAgICAgICAgICAgIGRlbCBvYmoKKworICAgIGRlZiB0ZXN0X29kZF9mbHVzaChzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBvZGQgZmx1c2hpbmcgYnVncyBub3RlZCBpbiAyLjAsIGFuZCBob3BlZnVsbHkgZml4ZWQgaW4gMi4xCisgICAgICAgIGltcG9ydCByYW5kb20KKworICAgICAgICBpZiBoYXNhdHRyKHpsaWIsICdaX1NZTkNfRkxVU0gnKToKKyAgICAgICAgICAgICMgVGVzdGluZyBvbiAxN0sgb2YgInJhbmRvbSIgZGF0YQorCisgICAgICAgICAgICAjIENyZWF0ZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3Igb2JqZWN0cworICAgICAgICAgICAgY28gPSB6bGliLmNvbXByZXNzb2JqKHpsaWIuWl9CRVNUX0NPTVBSRVNTSU9OKQorICAgICAgICAgICAgZGNvID0gemxpYi5kZWNvbXByZXNzb2JqKCkKKworICAgICAgICAgICAgIyBUcnkgMTdLIG9mIGRhdGEKKyAgICAgICAgICAgICMgZ2VuZXJhdGUgcmFuZG9tIGRhdGEgc3RyZWFtCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBJbiAyLjMgYW5kIGxhdGVyLCBXaWNobWFubkhpbGwgaXMgdGhlIFJORyBvZiB0aGUgYnVnIHJlcG9ydAorICAgICAgICAgICAgICAgIGdlbiA9IHJhbmRvbS5XaWNobWFubkhpbGwoKQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgIyAyLjIgY2FsbGVkIGl0IFJhbmRvbQorICAgICAgICAgICAgICAgICAgICBnZW4gPSByYW5kb20uUmFuZG9tKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgb3RoZXJzIG1pZ2h0IHNpbXBseSBoYXZlIGEgc2luZ2xlIFJORworICAgICAgICAgICAgICAgICAgICBnZW4gPSByYW5kb20KKyAgICAgICAgICAgIGdlbi5zZWVkKDEpCisgICAgICAgICAgICBkYXRhID0gZ2VuYmxvY2soMSwgMTcgKiAxMDI0LCBnZW5lcmF0b3I9Z2VuKQorCisgICAgICAgICAgICAjIGNvbXByZXNzLCBzeW5jLWZsdXNoLCBhbmQgZGVjb21wcmVzcworICAgICAgICAgICAgZmlyc3QgPSBjby5jb21wcmVzcyhkYXRhKQorICAgICAgICAgICAgc2Vjb25kID0gY28uZmx1c2goemxpYi5aX1NZTkNfRkxVU0gpCisgICAgICAgICAgICBleHBhbmRlZCA9IGRjby5kZWNvbXByZXNzKGZpcnN0ICsgc2Vjb25kKQorCisgICAgICAgICAgICAjIGlmIGRlY29tcHJlc3NlZCBkYXRhIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBpbnB1dCBkYXRhLCBjaG9rZS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kZWQsIGRhdGEsICIxN0sgcmFuZG9tIHNvdXJjZSBkb2Vzbid0IG1hdGNoIikKKworICAgIGRlZiB0ZXN0X2VtcHR5X2ZsdXNoKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBjYWxsaW5nIC5mbHVzaCgpIG9uIHVudXNlZCBvYmplY3RzIHdvcmtzLgorICAgICAgICAjIChCdWcgIzEwODMxMTAgLS0gY2FsbGluZyAuZmx1c2goKSBvbiBkZWNvbXByZXNzIG9iamVjdHMKKyAgICAgICAgIyBjYXVzZWQgYSBjb3JlIGR1bXAuKQorCisgICAgICAgIGNvID0gemxpYi5jb21wcmVzc29iaih6bGliLlpfQkVTVF9DT01QUkVTU0lPTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvLmZsdXNoKCkpICAjIFJldHVybnMgYSB6bGliIGhlYWRlcgorICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmooKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjby5mbHVzaCgpLCAiIikgIyBSZXR1cm5zIG5vdGhpbmcKKworICAgIGRlZiB0ZXN0X2RlY29tcHJlc3NfaW5jb21wbGV0ZV9zdHJlYW0oc2VsZik6CisgICAgICAgICMgVGhpcyBpcyAnZm9vJywgZGVmbGF0ZWQKKyAgICAgICAgeCA9ICd4XHg5Y0tceGNiXHhjZlx4MDdceDAwXHgwMlx4ODJceDAxRScKKyAgICAgICAgIyBGb3IgdGhlIHJlY29yZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuZGVjb21wcmVzcyh4KSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHpsaWIuZXJyb3IsIHpsaWIuZGVjb21wcmVzcywgeFs6LTVdKQorICAgICAgICAjIE9taXR0aW5nIHRoZSBzdHJlYW0gZW5kIHdvcmtzIHdpdGggZGVjb21wcmVzc29yIG9iamVjdHMKKyAgICAgICAgIyAoc2VlIGlzc3VlICM4NjcyKS4KKyAgICAgICAgZGNvID0gemxpYi5kZWNvbXByZXNzb2JqKCkKKyAgICAgICAgeSA9IGRjby5kZWNvbXByZXNzKHhbOi01XSkKKyAgICAgICAgeSArPSBkY28uZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksICdmb28nKQorCisgICAgZGVmIHRlc3RfZmx1c2hfd2l0aF9mcmVlZF9pbnB1dChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTY0MTE6IGRlY29tcHJlc3NvciBhY2Nlc3NlcyBpbnB1dCB0byBsYXN0IGRlY29tcHJlc3MoKSBjYWxsCisgICAgICAgICMgaW4gZmx1c2goKSwgZXZlbiBpZiB0aGlzIG9iamVjdCBoYXMgYmVlbiBmcmVlZCBpbiB0aGUgbWVhbndoaWxlLgorICAgICAgICBpbnB1dDEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCisgICAgICAgIGlucHV0MiA9ICdRV0VSVFlVSU9QQVNERkdISktMWlhDVkJOTScKKyAgICAgICAgZGF0YSA9IHpsaWIuY29tcHJlc3MoaW5wdXQxKQorICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmooKQorICAgICAgICBkY28uZGVjb21wcmVzcyhkYXRhLCAxKQorICAgICAgICBkZWwgZGF0YQorICAgICAgICBkYXRhID0gemxpYi5jb21wcmVzcyhpbnB1dDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGNvLmZsdXNoKCksIGlucHV0MVsxOl0pCisKKyAgICBpZiBoYXNhdHRyKHpsaWIuY29tcHJlc3NvYmooKSwgImNvcHkiKToKKyAgICAgICAgZGVmIHRlc3RfY29tcHJlc3Njb3B5KHNlbGYpOgorICAgICAgICAgICAgIyBUZXN0IGNvcHlpbmcgYSBjb21wcmVzc2lvbiBvYmplY3QKKyAgICAgICAgICAgIGRhdGEwID0gSEFNTEVUX1NDRU5FCisgICAgICAgICAgICBkYXRhMSA9IEhBTUxFVF9TQ0VORS5zd2FwY2FzZSgpCisgICAgICAgICAgICBjMCA9IHpsaWIuY29tcHJlc3NvYmooemxpYi5aX0JFU1RfQ09NUFJFU1NJT04pCisgICAgICAgICAgICBidWZzMCA9IFtdCisgICAgICAgICAgICBidWZzMC5hcHBlbmQoYzAuY29tcHJlc3MoZGF0YTApKQorCisgICAgICAgICAgICBjMSA9IGMwLmNvcHkoKQorICAgICAgICAgICAgYnVmczEgPSBidWZzMFs6XQorCisgICAgICAgICAgICBidWZzMC5hcHBlbmQoYzAuY29tcHJlc3MoZGF0YTApKQorICAgICAgICAgICAgYnVmczAuYXBwZW5kKGMwLmZsdXNoKCkpCisgICAgICAgICAgICBzMCA9ICcnLmpvaW4oYnVmczApCisKKyAgICAgICAgICAgIGJ1ZnMxLmFwcGVuZChjMS5jb21wcmVzcyhkYXRhMSkpCisgICAgICAgICAgICBidWZzMS5hcHBlbmQoYzEuZmx1c2goKSkKKyAgICAgICAgICAgIHMxID0gJycuam9pbihidWZzMSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmRlY29tcHJlc3MoczApLGRhdGEwK2RhdGEwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmRlY29tcHJlc3MoczEpLGRhdGEwK2RhdGExKQorCisgICAgICAgIGRlZiB0ZXN0X2JhZGNvbXByZXNzY29weShzZWxmKToKKyAgICAgICAgICAgICMgVGVzdCBjb3B5aW5nIGEgY29tcHJlc3Npb24gb2JqZWN0IGluIGFuIGluY29uc2lzdGVudCBzdGF0ZQorICAgICAgICAgICAgYyA9IHpsaWIuY29tcHJlc3NvYmooKQorICAgICAgICAgICAgYy5jb21wcmVzcyhIQU1MRVRfU0NFTkUpCisgICAgICAgICAgICBjLmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGMuY29weSkKKworICAgIGRlZiB0ZXN0X2RlY29tcHJlc3NfdW51c2VkX2RhdGEoc2VsZik6CisgICAgICAgICMgUmVwZWF0ZWQgY2FsbHMgdG8gZGVjb21wcmVzcygpIGFmdGVyIEVPRiBzaG91bGQgYWNjdW11bGF0ZSBkYXRhIGluCisgICAgICAgICMgZGNvLnVudXNlZF9kYXRhLCBpbnN0ZWFkIG9mIGp1c3Qgc3RvcmluZyB0aGUgYXJnIHRvIHRoZSBsYXN0IGNhbGwuCisgICAgICAgIHNvdXJjZSA9IGInYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCisgICAgICAgIHJlbWFpbmRlciA9IGInMDEyMzQ1Njc4OScKKyAgICAgICAgeSA9IHpsaWIuY29tcHJlc3Moc291cmNlKQorICAgICAgICB4ID0geSArIHJlbWFpbmRlcgorICAgICAgICBmb3IgbWF4bGVuIGluIDAsIDEwMDA6CisgICAgICAgICAgICBmb3Igc3RlcCBpbiAxLCAyLCBsZW4oeSksIGxlbih4KToKKyAgICAgICAgICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmooKQorICAgICAgICAgICAgICAgIGRhdGEgPSBiJycKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oeCksIHN0ZXApOgorICAgICAgICAgICAgICAgICAgICBpZiBpIDwgbGVuKHkpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkY28udW51c2VkX2RhdGEsIGInJykKKyAgICAgICAgICAgICAgICAgICAgaWYgbWF4bGVuID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGRjby5kZWNvbXByZXNzKHhbaSA6IGkgKyBzdGVwXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGNvLnVuY29uc3VtZWRfdGFpbCwgYicnKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSArPSBkY28uZGVjb21wcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNvLnVuY29uc3VtZWRfdGFpbCArIHhbaSA6IGkgKyBzdGVwXSwgbWF4bGVuKQorICAgICAgICAgICAgICAgIGRhdGEgKz0gZGNvLmZsdXNoKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIHNvdXJjZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjby51bmNvbnN1bWVkX3RhaWwsIGInJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRjby51bnVzZWRfZGF0YSwgcmVtYWluZGVyKQorCisgICAgaWYgaGFzYXR0cih6bGliLmRlY29tcHJlc3NvYmooKSwgImNvcHkiKToKKyAgICAgICAgZGVmIHRlc3RfZGVjb21wcmVzc2NvcHkoc2VsZik6CisgICAgICAgICAgICAjIFRlc3QgY29weWluZyBhIGRlY29tcHJlc3Npb24gb2JqZWN0CisgICAgICAgICAgICBkYXRhID0gSEFNTEVUX1NDRU5FCisgICAgICAgICAgICBjb21wID0gemxpYi5jb21wcmVzcyhkYXRhKQorCisgICAgICAgICAgICBkMCA9IHpsaWIuZGVjb21wcmVzc29iaigpCisgICAgICAgICAgICBidWZzMCA9IFtdCisgICAgICAgICAgICBidWZzMC5hcHBlbmQoZDAuZGVjb21wcmVzcyhjb21wWzozMl0pKQorCisgICAgICAgICAgICBkMSA9IGQwLmNvcHkoKQorICAgICAgICAgICAgYnVmczEgPSBidWZzMFs6XQorCisgICAgICAgICAgICBidWZzMC5hcHBlbmQoZDAuZGVjb21wcmVzcyhjb21wWzMyOl0pKQorICAgICAgICAgICAgczAgPSAnJy5qb2luKGJ1ZnMwKQorCisgICAgICAgICAgICBidWZzMS5hcHBlbmQoZDEuZGVjb21wcmVzcyhjb21wWzMyOl0pKQorICAgICAgICAgICAgczEgPSAnJy5qb2luKGJ1ZnMxKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMwLHMxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMCxkYXRhKQorCisgICAgICAgIGRlZiB0ZXN0X2JhZGRlY29tcHJlc3Njb3B5KHNlbGYpOgorICAgICAgICAgICAgIyBUZXN0IGNvcHlpbmcgYSBjb21wcmVzc2lvbiBvYmplY3QgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlCisgICAgICAgICAgICBkYXRhID0gemxpYi5jb21wcmVzcyhIQU1MRVRfU0NFTkUpCisgICAgICAgICAgICBkID0gemxpYi5kZWNvbXByZXNzb2JqKCkKKyAgICAgICAgICAgIGQuZGVjb21wcmVzcyhkYXRhKQorICAgICAgICAgICAgZC5mbHVzaCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkLmNvcHkpCisKKyAgICAjIE1lbW9yeSB1c2Ugb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdGFrZXMgaW50byBhY2NvdW50IG92ZXJhbGxvY2F0aW9uCisKKyAgICBAcHJlY2lzaW9uYmlnbWVtdGVzdChzaXplPV8xRyArIDEwMjQgKiAxMDI0LCBtZW11c2U9MykKKyAgICBkZWYgdGVzdF9iaWdfY29tcHJlc3NfYnVmZmVyKHNlbGYsIHNpemUpOgorICAgICAgICBjID0gemxpYi5jb21wcmVzc29iaigxKQorICAgICAgICBjb21wcmVzcyA9IGxhbWJkYSBzOiBjLmNvbXByZXNzKHMpICsgYy5mbHVzaCgpCisgICAgICAgIHNlbGYuY2hlY2tfYmlnX2NvbXByZXNzX2J1ZmZlcihzaXplLCBjb21wcmVzcykKKworICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzFHICsgMTAyNCAqIDEwMjQsIG1lbXVzZT0yKQorICAgIGRlZiB0ZXN0X2JpZ19kZWNvbXByZXNzX2J1ZmZlcihzZWxmLCBzaXplKToKKyAgICAgICAgZCA9IHpsaWIuZGVjb21wcmVzc29iaigpCisgICAgICAgIGRlY29tcHJlc3MgPSBsYW1iZGEgczogZC5kZWNvbXByZXNzKHMpICsgZC5mbHVzaCgpCisgICAgICAgIHNlbGYuY2hlY2tfYmlnX2RlY29tcHJlc3NfYnVmZmVyKHNpemUsIGRlY29tcHJlc3MpCisKKworZGVmIGdlbmJsb2NrKHNlZWQsIGxlbmd0aCwgc3RlcD0xMDI0LCBnZW5lcmF0b3I9cmFuZG9tKToKKyAgICAiIiJsZW5ndGgtYnl0ZSBzdHJlYW0gb2YgcmFuZG9tIGRhdGEgZnJvbSBhIHNlZWQgKGluIHN0ZXAtYnl0ZSBibG9ja3MpLiIiIgorICAgIGlmIHNlZWQgaXMgbm90IE5vbmU6CisgICAgICAgIGdlbmVyYXRvci5zZWVkKHNlZWQpCisgICAgcmFuZGludCA9IGdlbmVyYXRvci5yYW5kaW50CisgICAgaWYgbGVuZ3RoIDwgc3RlcCBvciBzdGVwIDwgMjoKKyAgICAgICAgc3RlcCA9IGxlbmd0aAorICAgIGJsb2NrcyA9IFtdCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuZ3RoLCBzdGVwKToKKyAgICAgICAgYmxvY2tzLmFwcGVuZCgnJy5qb2luKFtjaHIocmFuZGludCgwLDI1NSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2Uoc3RlcCldKSkKKyAgICByZXR1cm4gJycuam9pbihibG9ja3MpWzpsZW5ndGhdCisKKworCitkZWYgY2hvb3NlX2xpbmVzKHNvdXJjZSwgbnVtYmVyLCBzZWVkPU5vbmUsIGdlbmVyYXRvcj1yYW5kb20pOgorICAgICIiIlJldHVybiBhIGxpc3Qgb2YgbnVtYmVyIGxpbmVzIHJhbmRvbWx5IGNob3NlbiBmcm9tIHRoZSBzb3VyY2UiIiIKKyAgICBpZiBzZWVkIGlzIG5vdCBOb25lOgorICAgICAgICBnZW5lcmF0b3Iuc2VlZChzZWVkKQorICAgIHNvdXJjZXMgPSBzb3VyY2Uuc3BsaXQoJ1xuJykKKyAgICByZXR1cm4gW2dlbmVyYXRvci5jaG9pY2Uoc291cmNlcykgZm9yIG4gaW4gcmFuZ2UobnVtYmVyKV0KKworCisKK0hBTUxFVF9TQ0VORSA9ICIiIgorTEFFUlRFUworCisgICAgICAgTywgZmVhciBtZSBub3QuCisgICAgICAgSSBzdGF5IHRvbyBsb25nOiBidXQgaGVyZSBteSBmYXRoZXIgY29tZXMuCisKKyAgICAgICBFbnRlciBQT0xPTklVUworCisgICAgICAgQSBkb3VibGUgYmxlc3NpbmcgaXMgYSBkb3VibGUgZ3JhY2UsCisgICAgICAgT2NjYXNpb24gc21pbGVzIHVwb24gYSBzZWNvbmQgbGVhdmUuCisKK0xPUkQgUE9MT05JVVMKKworICAgICAgIFlldCBoZXJlLCBMYWVydGVzISBhYm9hcmQsIGFib2FyZCwgZm9yIHNoYW1lIQorICAgICAgIFRoZSB3aW5kIHNpdHMgaW4gdGhlIHNob3VsZGVyIG9mIHlvdXIgc2FpbCwKKyAgICAgICBBbmQgeW91IGFyZSBzdGF5J2QgZm9yLiBUaGVyZTsgbXkgYmxlc3Npbmcgd2l0aCB0aGVlIQorICAgICAgIEFuZCB0aGVzZSBmZXcgcHJlY2VwdHMgaW4gdGh5IG1lbW9yeQorICAgICAgIFNlZSB0aG91IGNoYXJhY3Rlci4gR2l2ZSB0aHkgdGhvdWdodHMgbm8gdG9uZ3VlLAorICAgICAgIE5vciBhbnkgdW5wcm9wb3J0aW9uZWQgdGhvdWdodCBoaXMgYWN0LgorICAgICAgIEJlIHRob3UgZmFtaWxpYXIsIGJ1dCBieSBubyBtZWFucyB2dWxnYXIuCisgICAgICAgVGhvc2UgZnJpZW5kcyB0aG91IGhhc3QsIGFuZCB0aGVpciBhZG9wdGlvbiB0cmllZCwKKyAgICAgICBHcmFwcGxlIHRoZW0gdG8gdGh5IHNvdWwgd2l0aCBob29wcyBvZiBzdGVlbDsKKyAgICAgICBCdXQgZG8gbm90IGR1bGwgdGh5IHBhbG0gd2l0aCBlbnRlcnRhaW5tZW50CisgICAgICAgT2YgZWFjaCBuZXctaGF0Y2gnZCwgdW5mbGVkZ2VkIGNvbXJhZGUuIEJld2FyZQorICAgICAgIE9mIGVudHJhbmNlIHRvIGEgcXVhcnJlbCwgYnV0IGJlaW5nIGluLAorICAgICAgIEJlYXIndCB0aGF0IHRoZSBvcHBvc2VkIG1heSBiZXdhcmUgb2YgdGhlZS4KKyAgICAgICBHaXZlIGV2ZXJ5IG1hbiB0aHkgZWFyLCBidXQgZmV3IHRoeSB2b2ljZTsKKyAgICAgICBUYWtlIGVhY2ggbWFuJ3MgY2Vuc3VyZSwgYnV0IHJlc2VydmUgdGh5IGp1ZGdtZW50LgorICAgICAgIENvc3RseSB0aHkgaGFiaXQgYXMgdGh5IHB1cnNlIGNhbiBidXksCisgICAgICAgQnV0IG5vdCBleHByZXNzJ2QgaW4gZmFuY3k7IHJpY2gsIG5vdCBnYXVkeTsKKyAgICAgICBGb3IgdGhlIGFwcGFyZWwgb2Z0IHByb2NsYWltcyB0aGUgbWFuLAorICAgICAgIEFuZCB0aGV5IGluIEZyYW5jZSBvZiB0aGUgYmVzdCByYW5rIGFuZCBzdGF0aW9uCisgICAgICAgQXJlIG9mIGEgbW9zdCBzZWxlY3QgYW5kIGdlbmVyb3VzIGNoaWVmIGluIHRoYXQuCisgICAgICAgTmVpdGhlciBhIGJvcnJvd2VyIG5vciBhIGxlbmRlciBiZTsKKyAgICAgICBGb3IgbG9hbiBvZnQgbG9zZXMgYm90aCBpdHNlbGYgYW5kIGZyaWVuZCwKKyAgICAgICBBbmQgYm9ycm93aW5nIGR1bGxzIHRoZSBlZGdlIG9mIGh1c2JhbmRyeS4KKyAgICAgICBUaGlzIGFib3ZlIGFsbDogdG8gdGhpbmUgb3duc2VsZiBiZSB0cnVlLAorICAgICAgIEFuZCBpdCBtdXN0IGZvbGxvdywgYXMgdGhlIG5pZ2h0IHRoZSBkYXksCisgICAgICAgVGhvdSBjYW5zdCBub3QgdGhlbiBiZSBmYWxzZSB0byBhbnkgbWFuLgorICAgICAgIEZhcmV3ZWxsOiBteSBibGVzc2luZyBzZWFzb24gdGhpcyBpbiB0aGVlIQorCitMQUVSVEVTCisKKyAgICAgICBNb3N0IGh1bWJseSBkbyBJIHRha2UgbXkgbGVhdmUsIG15IGxvcmQuCisKK0xPUkQgUE9MT05JVVMKKworICAgICAgIFRoZSB0aW1lIGludml0ZXMgeW91OyBnbzsgeW91ciBzZXJ2YW50cyB0ZW5kLgorCitMQUVSVEVTCisKKyAgICAgICBGYXJld2VsbCwgT3BoZWxpYTsgYW5kIHJlbWVtYmVyIHdlbGwKKyAgICAgICBXaGF0IEkgaGF2ZSBzYWlkIHRvIHlvdS4KKworT1BIRUxJQQorCisgICAgICAgJ1RpcyBpbiBteSBtZW1vcnkgbG9jaydkLAorICAgICAgIEFuZCB5b3UgeW91cnNlbGYgc2hhbGwga2VlcCB0aGUga2V5IG9mIGl0LgorCitMQUVSVEVTCisKKyAgICAgICBGYXJld2VsbC4KKyIiIgorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoCisgICAgICAgIENoZWNrc3VtVGVzdENhc2UsCisgICAgICAgIEV4Y2VwdGlvblRlc3RDYXNlLAorICAgICAgICBDb21wcmVzc1Rlc3RDYXNlLAorICAgICAgICBDb21wcmVzc09iamVjdFRlc3RDYXNlCisgICAgKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdGFsbC5weSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0YWxsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNWNmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdGFsbC5weQpAQCAtMCwwICsxLDEwIEBACisjIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgLS0geW91IHNob3VsZCB1c2UgcmVncnRlc3QgaW5zdGVhZCBvZiB0aGlzIG1vZHVsZS4KK2Zyb20gd2FybmluZ3MgaW1wb3J0IHdhcm5weTNrCit3YXJucHkzaygidGhlIHRlc3QudGVzdGFsbCBtb2R1bGUgaGFzIGJlZW4gcmVtb3ZlZCBpbiBQeXRob24gMy4wIiwKKyAgICAgICAgICAgIHN0YWNrbGV2ZWw9MikKK2RlbCB3YXJucHkzaworCisKK2ltcG9ydCBzeXMsIHJlZ3J0ZXN0CitzeXMuYXJndlsxOl0gPSBbIi12diJdCityZWdydGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0Y29kZWMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdGNvZGVjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYTc1NGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdGNvZGVjLnB5CkBAIC0wLDAgKzEsNDggQEAKKyIiIiBUZXN0IENvZGVjcyAodXNlZCBieSB0ZXN0X2NoYXJtYXBjb2RlYykKKworV3JpdHRlbiBieSBNYXJjLUFuZHJlIExlbWJ1cmcgKG1hbEBsZW1idXJnLmNvbSkuCisKKyhjKSBDb3B5cmlnaHQgMjAwMCBHdWlkbyB2YW4gUm9zc3VtLgorCisiIiIjIgoraW1wb3J0IGNvZGVjcworCisjIyMgQ29kZWMgQVBJcworCitjbGFzcyBDb2RlYyhjb2RlY3MuQ29kZWMpOgorCisgICAgZGVmIGVuY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxlcnJvcnMsZW5jb2RpbmdfbWFwKQorCisgICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxlcnJvcnMsZGVjb2RpbmdfbWFwKQorCitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CisgICAgcGFzcworCitjbGFzcyBTdHJlYW1SZWFkZXIoQ29kZWMsY29kZWNzLlN0cmVhbVJlYWRlcik6CisgICAgcGFzcworCisjIyMgZW5jb2RpbmdzIG1vZHVsZSBBUEkKKworZGVmIGdldHJlZ2VudHJ5KCk6CisKKyAgICByZXR1cm4gKENvZGVjKCkuZW5jb2RlLENvZGVjKCkuZGVjb2RlLFN0cmVhbVJlYWRlcixTdHJlYW1Xcml0ZXIpCisKKyMjIyBEZWNvZGluZyBNYXAKKworZGVjb2RpbmdfbWFwID0gY29kZWNzLm1ha2VfaWRlbnRpdHlfZGljdChyYW5nZSgyNTYpKQorZGVjb2RpbmdfbWFwLnVwZGF0ZSh7CisgICAgICAgIDB4Nzg6IHUiYWJjIiwgIyAxLW4gZGVjb2RpbmcgbWFwcGluZworICAgICAgICAiYWJjIjogMHgwMDc4LCMgMS1uIGVuY29kaW5nIG1hcHBpbmcKKyAgICAgICAgMHgwMTogTm9uZSwgICAjIGRlY29kaW5nIG1hcHBpbmcgdG8gPHVuZGVmaW5lZD4KKyAgICAgICAgMHg3OTogdSIiLCAgICAjIGRlY29kaW5nIG1hcHBpbmcgdG8gPHJlbW92ZSBjaGFyYWN0ZXI+Cit9KQorCisjIyMgRW5jb2RpbmcgTWFwCisKK2VuY29kaW5nX21hcCA9IHt9Citmb3Igayx2IGluIGRlY29kaW5nX21hcC5pdGVtcygpOgorICAgIGVuY29kaW5nX21hcFt2XSA9IGsKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0aW1nLnV1ZSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0aW1nLnV1ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWI3MTNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RpbWcudXVlCkBAIC0wLDAgKzEsMTE3MCBAQAorYmVnaW4gNzU1IHRlc3QucmF3aW1nCitNX19fWV4vXEEkUTNfKjFMQ19RTDQnL1w7JUFTXyVRKDZfUVA3Jj9cQiZBV18nQTw3X1FUNSYvXDckQTNfCitNJjEwOF9RODQlT1w3JTE/XyRRIDZfUTwzJy9cOiRRX18nMTw7X1IkOiZPXDUkUTdfJyFEOF9TSFctT1xcCitNLkNXXzE0MSpfVEUpMy9dLzNVK18nMURBX1IsPClPXEInIjNfMjQ5LF9UPSQyT10kMEQ3Xy4zPFpfVDEiCitNMT9dLjMkX180NF0yX1FEMicvXDslIVtfKjI0TV9VMTY2X101NVVTXzU1PTxfVVE+OF9dPDdGL18lMSQ5CitNX1FINidPXEIoMkNfNjVBPl9VNTg3P104NyVbXzY1TT5fUUA1Jl9cQCciM18lUTg8X1UlMzQ/XTw2RTdfCitNNVU5L19VLTE0X1w6JUFfXydBSEJfVEEmMi9cXS9DQ18yNEkkX1JERypPXEInQjtfKSIsSV9VSTs3L107CitNNjU7XzdFQTZfWCVcPy9eIT9HV183RV1AX1UhNDVPXTQ1VVNfNFU1Ol9VKTQ2X10uNCU/XzJUVTRfVDkoCitNM19dIzE0U18xJEUvX1RBKTQvXSgxVFtfMUQ9Ll9USS81P10pMkUnXzIkPS5fVC0lMy9dKTJVK18yJEUwCitNX1Q5JzNPXSMxJE9fMEQxLF9UISIyT10jMTRTXzFERS5fVDUoMz9dJDFUU18wJC0oX1QxJzMvXSEwVENfCitNMFQpKF9TXF4xL10jMERDXzA0LShfU0RcMD9cWzAkN18wI10lX1NZIDE/XFovJCdfLkNRIV9TSFwwP1xbCitNLlNbXy9TVSBfUTQzJU9cRShSO18lUTQ4X1MwUi0/XDclMUNfKVI0SF9RMDIlP1wyJCEvXyUhKDVfUSwxCitNJS9cNSRRO19ePltVX1NYVC9PXEYnIk9fJ1FEQV9RRDQmL1w2JDE3XyUxIDRfUTwyJU9cOiUxR18mISw3CitNX1E0MCUvXDgkUT9fJVEwM19RPDMlP1w6JTFPXycxPD9fUUw0J09cTClSV18oMVQ/X1FQNyZfXDUkUTtfCitNJ0FQP19RVDsnT1w8JkFXXzAzXSJfVEUnMk9cOiVBW18nQUhDX1FUOCcvXDglITtfJyFAOl9RXDsnP1xACitNJlFfXyhBVEFfUjA/KF9cSChSP18mMSw7X1FANCcvXD0nUjNfMlRdMV9UVS80T10wNCUvXzQ1JTRfVTE0CitNNV9cNyRRT18mMTQ9X1JcTSwvXUk6NjtfNTU5N19VJTM0P10xNCRfXychPD1fUiw8Ki9cOCUxT182JUE1CitNX1VBODU/XTs2JS9fNSUhMl9RTDcoL1w7JkInXzYlOThfVU06NF9dOzY1M18pMihBX1IkPSk/XDwmMV9fCitNN1VVQF9UPSUxX1xNKlJXXyhCIEJfUkBHKU9dMjRUV18+N1lYX1kmMUNPXU86RlNfNVU9Ol9VKTQ1X10xCitNNFU7XzQlKTdfVFkvNU9dKTQlO18yJF01X1QxKDQvXSUxRSdfMURBMF9UPSk0L10mMiRfXzEkOS1fVCUjCitNMk9dJDFEV18wNC0qX1QhIjI/XSAwREdfMDQtKl9UMSYzP10hMFRLXy9EJSZfVCklMk9dITEkR18xJD0sCitNX1QlIzJPXSEwVEtfLzNdJl9UISIyP10gMEQ/Xy9EISVfU10hMU9cXjAkN18uM00gX1NUXzEvXFwvRC9fCitNLkNRIV9TVFsvT1xXLTM/XyxDIFJfUyBOLC9cTSoyT18pQihEX1E4MiUvXDckUTdfJTEgNF9RKC0kP1w3CitNJEE7XyUxIDRfUTgxJT9fX10/S18rUjROX1Q8XjJfXEEnIitfJkE0OV9RODElP1w1JCEzXyYhLDdfUTgxCitNJT9cNiQxN18lMSA0X1FAMyVfXDckMUdfJVEoOF9QVCgjL11WPEczXzI0MSpfUUQ1JV9cOiYhL18mITQ0CitNX1EoMCRfXDUkUTtfJTEsNl9RLDElL1wzJDEzXyMwTC5fUUQ1Jz9cPSYyK18nMUA8X1FANCVPXDMjUSdfCitNJSEgMl9RPDIlT1w2JDE3XyYxMDhfUVA3Jl9cNCQhQ18lUSw7X1FYOyg/XD0mUVtfKDFcQV9TJE8sP1xfCitNLzNfXzMkSSxfUTwzJl9cOSUxV18pMixGX1UlMTNPXTE0VSdfM1UpLF9VKTIzX1w9JiFTXyhRUEZfUUg3CitNJz9dOTY1O181NTUyX1U5MzNPXTg1JTtfJlE8QF9RRDgnX104NVU7XzY1STRfVUE5NE9cRShSN18nIUxBCitNX1FMOigvXTw2VidfNzVRQl9WJUA5T1w3JUFTXykiMEdfVT04Nj9dMDQkV181VSUvX1VZNjUvXTY0RSNfCitNPkdVV19WIUM3P103NjU/XzVFPThfVFExNU9dKzNVP18yRSE6X1Q9KjVPXS40JUNfMkRRM19UPSk0L10nCitNMjUjXzE0PS5fVDkoM19dJzI1I18xJDktX1NZIDFfXSAwREdfLlNVJF9ULSUzL10gMFRDXzA0MSlfVEktCitNNE9cXjA0O18vVCUoX1NdITIvXF4wJD9fMEQxK19TWSAxP1xeMCQ3Xy9UJSZfU1kgMT9cWi5DV18sQyhVCitNX1JUTSwvXEcpUktfKlJES19SQEYqL1xKKiJLXyhSJENfUjRBKF9cSSkyP18oQVhAX1JYSisvXDklIUNfCitNJSBcM19RQDMlX1wzI0ErXyYhLDdfX0tRXD9cQCVRW18mUTA8X1FMNiZPXDgkUT9fJTEgNF9RNDAlL1w1CitNJCEzXyUxIDRfUTQwJS9cNCNRL18lUSg2X1E8MyU/XDckQTtfJFBYMl9RQDMmP1w8JTFfXyYhLDdfUTQyCitNJD9cNCQhK18kMFwyX1EoMCRfXDMkMTNfJFEkNF9RLDElL1w0JEE3XyVBKDpfUVA4KD9cOyVBS18nIUA6CitNX1FcOyc/XDslUUdfJVEoNl9RNDAlL1w1JCEzXyUgXDNfUSwvJV9cNyRRT18nQUQ/X1FcOSc/XD0mMU9fCitNKFIgP19SPEQoX1xBJ0FXXyVBKDpfUUA0Jy9cQCdCJ18yVE0oX1RVLzMvXS40REtfM0RdKF9RUDgmT1w+CitNJVInXyZRQD5fVTk2NF9dOjZFP183JUU0X1VFNTVfXDglIVdfJkFEQF9WIT85P109N0VfXzg2KUNfU1RcCitNMF9cNiVRW18mUVRCX1YlQjo/XUI4Rk9fODYlTF9RPDcoL1xCKFJLXzNFITVfVS01Nk9dNzRFQ18pUVxDCitNX1I0RChfXTs2VUNfNzVZOF9WTUo6P141RFk3X0EoIiJfVUU2NT9dODYlT180VTU6X1UhMjY/XS40JT9fCitNMlRVNF9URSs0T10rMzUzXzFURTBfVCkkMl9dJDFEV18xJDktX1QtJTMvXSEwVEtfMDQtKl9TWSExT10gCitNMFRDXzAkLShfVCUkMj9cXC9EN18vM10mX1NUXzFPXF4wJD9fLzNdJF9TUF4wX1xdL1QzXy4jSF9fUyhQCitNLF9cSioiS18qUkRLX1JARiovXEgpQkNfKjI8SV9SPEUpX1xEKEIzXylSLEVfUkBEKU9cSSkyP18qMjRHCitNX1I0QCkvXDgkUT9fJVEoNl9RQDMlX1w0I1EvX15fK1JfUjg7KC9cOyRBR18lUSw1X1FAMyVfXDUkITNfCitNJTEgNF9RNDAlL1w1JCEzXyUxIDRfUTAvJF9cNyRBO18lUSw1X1E8MyU/XDUkITNfJiEkO19TMEouP1w6CitNJFFPXyUxIDRfUTAvJT9cMSNRK18kQSAzX1EkLyRPXC8jMSNfIzBUMF9RIDAkX1w/JyIrXyZRPD9fUTgxCitNJT9cNSQxL18kUFwxX1EwMCRPXDIjMSdfJFBYMl9RKC0kP1wzI0ErXyQxIDdfUTwzJl9cOCRBS18mMSQ1CitNX1FENCVPXE0qIkNfMTQkX19TVFouP1w2JEFLXyYhMD1fUkRGKy9dMjQ1I18zNSUvX1UlMzQvXTI0VFdfCitNKVIwQ19SIDwpP1w9JyIrXzZVVTtfVi1COD9dPTZVQ185Vi1FX1FENSdPXDomIidfNkVJQ19WKUM6T11ICitNOjcjXzE0NTBfUTQ2Jz9cOiciJ183VV1IX1YxRDtfXUI4RldfJEEoPV9RTDspL11BOEZHXzdGIUhfViU/CitNOi9cPyZSL18nIVhDX1NZIC9PXFouI0tfJ0FQP19SQEUqX106NTUjXzglTTZfVzlSPC9dRDg2I181RUE7CitNX1U9OTcvXTo3JidfNDUtOF9UUTE1X10qM0U7XzE0RTFfVEEqND9dJTFUW18xNDktX1QtJTMvXSUxVFtfCitNMEQ1Kl9TUF8xL1xdMCQ3XzA0MSlfU1UgMT9cXjAkP18vI1klX1NQXjE/XFguQ19fLkNEX19SUEssP1xJCitNKiJbXytCUE5fUkhIKk9cSioiS18pUjRHX1JERyo/XEUoUjdfKiI4SF9SNEMpP1xGKEIzXylSLEVfUig+CitNKC9cRSgyL18pQiRFX1IsPihPXFcsQztfKSFcQ19RODElP19cXC8vXydBMDdfUyRJKy9cTClSR18nITw7CitNX1EwLyRfXDUkITNfJSBcM19RNDAlL1w1JCEzXyUgXDNfUTwyJU9cMyNRQ18lUSg4X1FAMyVfXDgkMUdfCitNJFBQM19RPDElP1w1JCEzXyQxJDRfUSgwJF9cMiQhL18kMFwyX1EkLyRPXDAkIS9fIzBcMl9RNDMlT1xACitNJlFfXyUxLDZfUSgwJF9cMSNRK18kMFwyX1EkLyRPXDAjQSdfJDBcMl9RIC4kP1wxJEEvXyYhPD5fUUA0CitNJy9cQScxX18kMFwxX1RJJjEvXTU0JEtfKFIoQV9RLDEmT1w1JFFTXysyUFJfVS00NT9dLTQlN181RUU+CitNX1VZPThfXFArMy9fJyFAQF9RPDgnX10+OFZHXzhGJUhfVilBOV9dQzhGR18mITg/X1E8NCgvXT43VjtfCitNOCYlSF9WIUE6L100NUVPXyZRSEFfUUA3J09dRTkmS185NjFKX1VdPjkvXDklUiNfJyFIQ19UVS00L1xRCitNLFMjXylSPEpfUUw6KD9cOSYhW18wNCBfX1JUSytPXEAnIjNfKVIwSl9UIF0uL10iL0QjXygxWERfUVw/CitNKE9dRDk1X19ASC1dX1k6NUUvXUc5NkNfNTVFO19VNTg3P10uNCU/XzJESTNfVEEnM09dJjFUW18xND0uCitNX1QlJjMvXF4wVENfMCQ1Kl9TWSMyL1xdMEQ/Xy9EISNfU1heMD9cVC0jP18rUlxSX1JQSis/XEsqMlNfCitNKkJAS19SSEgqX1xLKjJPXyoiOEhfUkRHKj9cSClCQ18qMjxKX1I4RClfXEUoUjtfKTIsRl9SOEQpT1xECitNKEIzXykiKERfUjBCKS9cRChCM18pIihEX1IoQChPXEYpIjtfJEBYMF9fX1ZeP1xAJiFPXydBRDtfUUQ1CitNJV9cOSUhQ18lUSg2X1FQNyZfXDklIUNfJUEkNV9RODElP1w1JCEzXyYhLDdfUTwxJT9cQCZRT18lUTAzCitNX1E8NCZPXD4oIjdfJ0IgQ19SQEwrT1w7J1InXyQxJDRfUSQxJS9cMCQhL18kISAzX1EoMCRfXDMjQStfCitNJkEwOF9XIUg7L1w3JEE7XyRBIDNfUSQvJE9cMSNRK18kMFwyX1EgLiQ/XDEjUStfJCBYMV9RRDknL10vCitNMlUvXy1TKFhfUixAJl9cXS5TL181VSEkX1VJMDA/XT41VE9fJkE0O19RQDQnL1xYLUNHXy8jTFpfU1khCitNME9dMTRVQ180NSk5X1JQTS0vXD8mUi9fJVFAP19WJUY7L11IOVZbXzs2UVJfVl1OPT9cNiUhV18mUUBECitNX1VVOzkvXUY5RkdfOVZBSV9VTTo4L1w4JUFfXyZBREBfVi1DOU9dSDpGQ185NjlHX1E4NScvXDQkUUtfCitNNUU9OF9VXUE3T102NUVHXyVBNDxfUUQ4J09dIC9TW18pUjRIX1FINidPXEInUjdfOVYtQV9WJTw4L1w8CitNJiIjXygyIEZfVD0lMV9cPichW18qIjhIX1VZPDdPXVo9NyNfSjomPV9XPVI9L107NiVbXzUlNTxfVFkuCitNNV9dJDFEW18vNC0rX1NAWzAvXFkvJCdfK1MoV19SREwsP1xLKjJTXytSSE5fUlRIKy9cTSoiU18qUkRMCitNX1JASCpfXEYpQkdfKUI4SV9SOEYqP1xFKTJDXyoiQEtfUjxHKk9cRylSS18pIjBHX1IwRClfXEUpMkNfCitNKiI4SF9SPEUpX1xFKFI3XykyLEVfUjRDKT9cRShSN18qIjhIX1IoQChPXE0qMk9fXi8jU19SREQpT1w9CitNJjFPXyZRRDtfV1FXPl9cNiQxN18mQTQ5X1FENCYvXDgkUT9fJiEsN19RXDonT1xGKDI3XzJUNSNfWSIrCitNQT9eK0I4M18nUVxCX1YpRzsvXTI2JUtfMkRZMF9TPFcuT1xLKzMjXyoiSE1fUjBGKj9cOichX18lMTQ4CitNX1EwNCVfXDklIUNfJFBUMV9RKDAkX1wzJDEzXyQwXDJfUSQvJE9cMCNBJ18kMFwyX1EkLyRPXDAjQSdfCitNJDBYNF9TWFgwL1w9JVFPXylSLDtfVEklLj9dPjREL187JUUnX1c1QDUvXEkoMjdfLEJUU19UMSAwT10iCitNMCNXXzU1ISpfVSUsMU9dJzBEK18uQzRZX1FcOyhfXDcmIV9fNFVBPl9VLTI2P10vM0UzXzVVOT1fUUA2CitNJ19cWy4kM18sUlxYX1VNOTZfXTs3JTtfNiU5OV9RSDcoX1w5JiFfXzZVUT1fVV1DNl9dQDhGI18mITw9CitNX1FIOSdfXT84NV9fOCYpP19VWT44P1w4JVFbXyVRODxfVDUkMF9cVi0jP18mITA8X1FUOigvXUs5RjtfCitNOzZBTl9RRDUnT1w8JlIrXztWUVJfUVQ6KC9cQygyM181VTU3X1I4QCkvXEwpIkNfNERVLV9VTTY1T14gCitNPldPX0E4IiJfVDEgME9cVCxDM18pIjBHX1FcPikvXDsmQiNfJEEkN19SKEIpP1xIKUJHXypSRExfUyhQCitNLF9cUi0jP18tU0RcX1NEWy9PXFovI19fLjNNIF9TQFovX1xWLiNXXy0zPFxfUyhULV9cTCtDJ18qIkhNCitNX1I8SSsvXEoqIktfKiI4SF9SQEYqL1xIKUJDXylSNEdfUjxFKV9cRikiO18qIjhIX1FENSVfX1xdLz9fCitNKVIoRF9RRDcmP1w2JVFDX0RJIjNfUVw6J09cOCRRP18mISw3X1E8MiVPXDQkQTdfJTEsNl9RRDQmL10kCitNLyNDX0VZJidfWUY4RD9fIVEsN19NK0ZeX1peU00/XlZNKz9fUDtGXV9WNUM5P11HOkZPXzc2IUFfUyxWCitNLV9cRCoyR18oMjhGX1IgQykvXEMpIjdfKEIgQl9RVDsnT1w4JUFHXyVBMDdfUSAuJD9cMyNBK18kUFgyCitNX1EoLSQ/XEInMidfL1NEXV9SUEYpL10+NVRPXzpWJTZfVVUvMC9dXDklN18/RjE5X1JUPihPXEgoUkdfCitNLVMsVV9TWFstT11FNkRfXzg1PSlfVT0sMT9cXC1DM18mQTg+X1E8OCdfXFwvVDNfLzNRIl9RWDsoP1w8CitNJlInXyNQVDZfUjhCKl9cTShCP18pMig9X1VJPDRfXTM0NTNfJlFARF9RRDkoT105NyVXXzVVUTZfVUk8CitNNj9cOSYxU18mMUA+X1VZQjgvXU88Nl9fOSYxR19RQDcnT1w8JlInXy9UJF9fUkRJKy9cOSUxV18nMURBCitNX1NcXS9fXD0mQiNfJjE0Pl9RPDYnP1xRLCM7XyZRQD5fUVA6Jz9dSjo2Q18oQVxLX1IgPSo/XTAyVF9fCitNMyQ5JF9SSEInT1xIKCFTXzNUSSVfVkFFOC9eKUE4P182JTk5X1RFJzJPXDUlIUtfMjRRMV9UOSkzT1xcCitNL1QzXzAkLShfU1khMU9dIjE0S18xNEEtX1QhIzIvXSExJEdfL1QhJ19TSFswT1xcLzQzXy4zTSBfU0xdCitNMC9cXS9UK18rUyRUX1JMTCs/XEwqQlNfKjI8SV9SREcqP1xIKUJDXyoiOEhfUkBGKi9cPSZRV18lQSg0CitNX187UlwvXF8uQ0tfKzJMTV9SPEcqT146RilPXyYhLDdfUUAzJV9cOSUhQ18nIUA6X1E0MyU/XDonMVtfCitNJiE4OV9RXDsmP146RThfX0Y5Mi5fXTs5Vk9fL1RdN19ULSMzX1xXKFJPXytPXCNfOEU5N19UPSIwT11fCitNQDdfXzhFXT5fVS0zNC9dIjBDX18sUyxQX1JYTipfXFguUzdfLSM4U19STE0qX1xDKFI7XychRDhfUTgzCitNJE9cMSMhI18lMSA2X1IgOSY/XSUwU1NfNUUtKF9WVUM1P14gPEYvXzxWNTZfVlk8M09dTzZUV183NFkvCitNX1VNNzdfXEgqUyNfMTQoXV9WPTs0T11GNjRTXzZVISVfVEkmMS9cQydSP18mQUA7X1U1NTRPXD4nMVNfCitNJkE0NV9RRDYnL1w4JVFbXydRRD1fVEBOKD9dKi4iS180RS0sX1Q5JTJfXEAmUj9fJVFEQV9VWUc7P11CCitNOVZTXzomPUZfUVQ6KC9cOyZSO18wRDEsX1NAWi8/XE0rIy9fJiE4P19RODUmX1xcMDNXXyMwXDJfUTAxCitNJz9cOCVBX18kMUQ9X1Q1JzMvXDglMU9fJSE4O19UUS4zL1w6JiFPXyhSIEZfVjlEOU9cTCojJ18nUUxDCitNX1ZBRjovXT02RiNfKFIgRl9UOSQxX1xBJ1IrXykiKEVfVSEqMi9dJS9TV18xRDEnX1E0NSdPXUI5JkdfCitNNCRdNV9UUSs0P10pMiRbXzI0TTBfVDkoMz9cXzA0O18wJCknX1RVLDRPXFUtI0tfLCJcVV9SVEwsT1xLCitNKkMjXypSSFBfUkhJK19cSSoiW18pUjxKX1JESipfXEkqQk9fKjJIS19STEkrL1xJKVJLXypCQEtfUUw5CitNJy9cOSUxP19cXzdSX1NQXi8vXEEnUidfQ1hKLl9UXS00L1w2JSE/XyVRNDhfUTQzJU9cQyZRX18mMTA4CitNX1FUQCg/XDYmITtfJlFcPV9ZIjFCX15CRlk3X1U8Xy1fXTsrUk9fNVI8N19UXEskX1xXJ09fXj5ESS9fCitNJSBcMV9RRDomX1w7JVFHXyYhLDNfUUQ0JS9cPiYxR18lQSQxX1I0RigvXFItMl9fMCQsXV9UKSUvX1xSCitNLEJfXytCWEtfUiRAJ19cMSNRJ18oIUw7X1QxIi5fXSQwMztfNyUpJF9XSUs3T10zMSM/XzBDLEZfVS0iCitNLT9dOjJUT18nQUQ/X1IsRSovXTIzND9fOzYpN19WNTgyX11LN0UnXzk1UTVfVSktND9dLjJUS186RkFDCitNX1E0MSRfXDYkQTNfJkE8PV9RODMmP1xKJ0FfXzYjVExfVFRYKU9dSDdVQ187RklMX1FYNyg/XEAnUjtfCitNNFVNP19WJUU5X14pQig/XyUhJDdfUTwzJy9eIkAoL18/WCVeX1YtQzlPXDglQV9fJSEsOV9UWSwxX1w2CitNJFErXyYxND5fUUA3J09cOCgiM181JTk7X1EsMCVPXEAoQj9fNjVJO19RLDImL1xIKVJbXzkmMUdfUzBQCitNLj9cPyZSL185VjVHX1YlPjkvXDMkITtfNVU1OF9RWDwnX1xDKDIzXzk2LUZfUVA7KD9cNiVBX18xVEk1CitNX1IgPCdPXUQ3VV9fQEdVXV9VVTg2L10uMyRfXzJESS1fVF0vNE9dJjFER18wJCknX1QpJDI/XF4wJDdfCitNLzNdJF9TWSAxP1xZLlQjXy9EISVfU1RfMS9cXS80I18vU10iX1NYXjA/XF8vVCtfL0NZIV9TUFwvX1xTCitNLFM7XygiIENfUUg2Ji9fXF5PP18qUkBHX1FANiYvXDsmMVNfKzJUUF9RQDgmX1w2JUFHXyUhMDdfUVg9CitNKS9cNCVBT18lMUA5X1JERig/XD4nUiNfQ1haLV9ZWjhEL18zU0xHX1RcTylfXTcrUV9fM1JMM19SXDZdCitNX1ouN0YvXDgkQTtfJjFEPF9RQDMlX1w8JiFLXyZBODhfUVA4Jk9cNyRRN18kMSgzX1FUPidfXDsnMUtfCitNKSI8QV9RUEAmL10gMFNXXykyPERfUTQ3JT9cPiZBQ18yND0gX1U5MzIvXUk3VSdfPiY5PF9VQSgvT10lCitNLiJXXzREPFxfVikzNF9cOiRBO18mIUg4X1cpTDkvXUU2VSdfOzYhM19WSToyT11TOUVPXzU1IStfVkVHCitNOC9dOjYlJ18kUFgwX1E0MCUvXDUkQUNfJ1FIPF9UNFYsP107L0JTXzJDID1fWTomPz9eJj9XX18pIVRECitNX1JERisvXUI6JktfPydeIF9YRipCX1w3JSFLXyZRODxfV01XPT9dTzw2Q184RjFBX1FIOSgvXDclQVNfCitNMTQgW19UXSkxX1w7JTFXXyUxPDxfUUhCKU9cWS5UI18mMTg8X1EwNiZfXScyNFNfI1EgN19RUDwpP10wCitNNEU/Xy1DJF1fUVw7KF9dQTdWJ182JTU7X1EsMCVPXTg1RUdfJ0FQP19RXD0oL1xbLkQjXyYhPD1fUTAxCitNJV9cNiRRR18mMTA4X1EoLCQvXEopIkNfMkQxKF9VKTA0T11UPEczXzclSTxfVUE2Ni9dKzM1K18xVEkvCitNX1Q5KTNPXSIxNEtfL1QpJ19TTF4wX1xYLlQjXyxTOFtfUlhQLT9cTiszL18rQlRTX1JYTSxfXEsrMyNfCitNKlJUUF9SWFAsX1xLKzMjXyghWEBfX19UXT9cTylSS18mMUQ8X1dNXj9fXjNFKTdfJVE8Ol9RVD0oL11JCitNOTY/Xzs2UVJfUSg1Jk9cRilSQ18nITAwX1JQSCpPXjBCWE9fRikyLF9cWy1RT180VD0jX1Q8UyxfXTswCitNU09fKlArU19JSUo9X1FYNydPXDsmIVtfJTEoOF9RNDYlX1wzJSE3XyVBPDhfUSAxJE9cLiMxL18nIUxBCitNX1FAOSZPXD4oIVtfKiJUR19TUSEuX1xLLCJTXypTIExfUlxLKj9dIS8jO181VSUnX1ZBPjQvXUI0JDtfCitNNCQgVl9UNForX109NFRDXzdVKS1fUTQwJE9cMCQhL187RkVDX1ZRQjYvXVs7RidfPjZNPF9YMVc6T11DCitNNyU7XzglUTRfVyVMOU9cPiVBR18lMSA2X1EoMCRfXEAmMUdfNSQkWV9WJSMrP100LVI3X0QnVVVfWF4nCitNQT9cSykiT184JV1FX1UhNDVPXTA0VTNfMyRVLl9QPCYjL1xDKDIzXzE0JF9fVSk2Mz9cRioiN18nQVRDCitNX1FANyc/XS0xRCNfNiUhLl9RTDYnL1w3JUFTXyojIFRfVTk4Nz9cOyYhW18lITg7X1QxJjI/XDQlQU9fCitNJzFUSF9UMSYyX1xNKlMzXydRUEJfVFksM09dLzMlK18lISQ3X1VBNjY/XD4nIV9fJUEwN19RJCwkL1w6CitNJUFDXyYhLDVfUiQ6Jk9cOyVBU18kUFw3X1FMNydfXD0mMidfJyFIPV9SID4oP1w/JzIjXzRFITNfVl1RCitNPS9dNTY1T18zNSUzX1RJLjQvXSMyJFdfL1QxKV9TWSMyL1xfMSRHXzAkJShfVC0iMj9dIjA0Q18wRCUoCitNX1NUXzEvXF0wNC9fLkNZIF9TOFovL1w1JFE3X15PK1VfUzBPLT9cRChSR187VklKX1k6MkQvXD4mMVdfCitNKzJATF9aIjVFL14rP1dPXycxPDtfUUg5J19cPSZRV18nMVg/X1k2MEQvXj5FOFtfU1xLJV9dOy9TX184CitNU1xfX1UsSyZfXUMsUV9ePUUpM18mQTQ3X1FUOSZfXDUkUTdfJVE0N19RQDYmL1w6JiFLXyRRJDNfUSwxCitNJF9cOyYxT18nIUg8X1FQOicvXEcrIjtfLjNYXF9SSE8rX1xGKyJDXy0zME1fUlxKKS9dKzEzV182VS0pCitNX1ddUzpPXS0wM0NfMTNMUV9UVSUuX11QOFU7XygxRDVfUlxLKz9dLzEjV188RjU4X1dVUDhfXV08Rj9fCitNQUdNUF9XIUg3T11FOEU/XzxHIUhfUzhSLS9cPCYxX18mUUQ7X1JUSChPXFoqIVtfOEQoTF9UQE8nT15eCitNS1pLXzo2JT9fUyRNK19dQzlWR184NlFNX1VFPzg/XTQ2RVNfLVNUX19TTSEwX1xMLEMzXzNVLTVfUSQzCitNJU9cLSMxI18oIVhBX1NQWS0vXi1CKENfKDFMQ19SLEApT1xRLUNPXzdGIUVfUTgzJj9cOSZSI18yRE0sCitNX1IgPShfXDwmIiNfKUIwR19SJD8oT1w8JkFXXzIkOSlfVEkoMl9cNCQxP180NFk0X1FcPChPXDAjMS9fCitNJUEkNV9RQDMlX1w0I1EvXyZRODpfUUQ2Jy9cNSRBQ18lQSw5X1FYOyg/XDolUVdfJSEkN19RTDgnT1w7CitNJiFbXykyLEVfUjRDKT9dJzE0P189Ny1VX1VdPzhPXS40JTdfMkRRMV9ULSUyT10hMFRDXy9EISVfU1BeCitNMF9cWy80K18sMyxWX1MkUy1PXFQtQ0dfK1MkVF9RRDcmT19YXC8vXzFUKShfUkxKLC9cPyZBS187Vj1FCitNX1IwPyhfXEAoQjdfKCIgPV9SJD4mP1w1JFE7XyZBRD9fUVw3Jk9cTisiW19DOEIoX1laNUNPXy9STDdfCitNVExPK19dPy5TT188VExbX1VMSyVfWiI3RV9cRCdSJ18nMUQ7X1E4NCVPXDclMT9fJjE8OV9RSDgmT1wzCitNJDEvXyRBIDJfUUg4Jk9cPCZBU18mQUA6X1I8TClPXFcvI0tfKkJcT19SNEspX1xPLDJbXyoiOENfU1BZCitNLS9dJC9TR18xU1xdX1FMMiRPXEMnIVNfJ0FEOV9TLEopL10kLyNDXzREVS1fVkE/Nj9dRjZFJ188Njk7CitNX1dJTTgvXiU9VkNfPjclR19WOUM2L11MOlYjXy0zLFBfUiA+KD9cQigiK18qIjBCX1JUPiYvXSYqUUtfCitNLiIkNV9dMyZQX140QyhLXydBSDhfVVU/Ny9dQTsmP182RiE8X1VdRTg/XUk7Vk9fNzYtP19TVSMvX10qCitNM1RfXyQxLDZfUFwvJE9cNiUhP18tUzBPX1RRJzFfXEAmQitfJiE0O19TMFkvT108N0YvXzY1OTxfUyBSCitNLV9dMDQ1K18kQFw1X1IgPCkvXDclMUNfJUEwN19RTDknL1w2JSE/XyghWEFfUTQyJi9cRCgyP18lISQ3CitNX1FYOyg/XDolMUdfJkE0OV9RODElP1w0I1EvXyVRMDpfUTgzJj9cOCUxT18lMSg4X1E4MyY/XDQkMT9fCitNJUEsOV9RRDYnL1w0JCFDXyghUERfUTQxJj9cQydSP18tMzhXX1UtNTRfXUU5VjdfMkRRKl9USSwzX10kCitNMURHXzA0LSZfU1kgMF9dIjEkP18vVCUkX1NMXTAvXF4wJC9fLjNEXF9fT1NdT1xHKEJDXygyIEZfWFopCitNQj9dVTtWV18qQjRJX1FANiY/Xl1NWzdfTzs2UV9RUDcmX1w4JVFXXyYxNDdfUTQzJT9eMkM4V19HSTYuCitNX1xLJVAvXzZTXF9fVz0zNF9dUzJTT18yUUwnX0gpPjdfUVw6Jy9cNyRRN18lMSw1X1E4NCVPXDklUUdfCitNJyFIPF9RLDEkX1wzJDEvXyZBQDpfUUw5Jl9cOyYxT18pIkRDX1M0Wi4vXE4sUy9fKUJQSF9TMFUrX1xMCitNKjIzXzJUOSBfVEUjLl9dQzY1N182NSUtX1RJJTAvXFktQydfLCJQTl9SMEIpP1w4JUFHXyYhODlfUUw3CitNJj9cPyZRR18rIjQ/X1ghVjsvXUc2VVNfOEVROl9WRUY4P10gLzNTXydBSDxfUUQ3Jj9cVCxCX18pUVA7CitNX1RIUylfXFkpMVdfUktWXF9YLVk9P1xAJjFHXysiSExfUyxaLk9dKDJUU18qMkhLX1YlQjhfXV0/R19fCitNJDEoM19bLlVOL1w7JzIjXyVBODlfUVA6Jz9cSSlCJ19PO0JYX1YhOjhPXDsmIVtfLEM8XF9TQFovX1w/CitNJyIrXyoiSE9fVCEhME9cNyUhS18pUixLX1EsMSUvXCwiQFdfLEMgU19RODQlX1wyJCEvXydRUEJfUUA1CitNJl9cMyQhO18kMFg0X1FAMyVfXDklIUNfJUEkNV9RNDAlL1wyI1E3XyZBPD1fUSwwJU9cMiNRN18mMTg8CitNX1EkLiUvXDolUVdfJFEgNl9RODImT1w3JFFPXyUxJDlfUTgyJk9cPycyI18rIkhNX1JUSytPXTI0JS9fCitNMjRJK19UNSgyP10kMVRDXzBUOSdfU10hMS9cXjAkL18wNC0mX1QpJDFfXSAwRDdfX19DW19SKD8pP1w1CitNJUFXXydRUDtfU1BWLS9cQCZRX18oUVRBX1JYPydfXEclUTNfKEFIPl9RLDUmT1wxJSE3XzAkJSJfWEImCitNQF9eO0U4V19RXCpdX107L1NfXz1VLTNfVl0nLV9dJyVQP14+RVk/XychPDlfUTgyJS9cNCRBM18kIFgwCitNX1E0MyU/XD0mUVdfJFEkM19RPDUlX1w5JVFHXywiWFBfUUg4Jk9cRSpCO18sQzxVX1MsWC4vXEQqQjtfCitNLyNAUF9SQEQnL11POyY/XzhFUTRfV11VPD9dTDhVU187NkE8X1chSjgvXVU6Ri9fPEY5PV9XLUY2X11KCitNNyUvXzREWSxfVSkuNC9dPTYlL187NjE9X1ZJPjg/XSUuQ19fJ1FIOl9SWEorL1w7JTFHXyVRLDVfUjBDCitNKE9cPyZBU18tIjQ/X1I8OSVPXTc0RTNfPlctUV9SND0oL1xFKSJLXylCSExfUiBAKF9cSClCR18mMTg8CitNX1ZBRzs/XEAnUjdfRylaQV9RPDknL1w6JkFXXycxTD5fUiw+Jj9fJFA8I186Jj1NX1IsQClPXDcmQV9fCitNJVFEPl9RKC8lP1w4JVFXXypSUE1fUVQ7J09cQCciM18kUSQ0X1E4NCVfXFUsUztfIzBMLl9RODQlX1xRCitNK0MzXy4jMFxfUUg2J09cOyVRX18lUSg2X1FINSY/XDYkMTdfJTEgNF9RODMmP1w3JSFLXyUhJDdfUTgzCitNJj9cMSNBM18kMFg0X1E4MyY/XDUkQUNfJUEsOV9RTDknL1w5JVFLXyYxPDlfUSQtJT9cMyNRP18uIzBcCitNX1JMSCtPXEcqMlNfPEc5VF9VKTQ0T10qMzRbXzEkQSpfVDEmMj9dIzE0Q18xRDkpX1Q5KDJfX19cTy9fCitNKkI0SV9SIEIqP10iL0QjXzBTTFlfUzRPLF9cNyUhS19EWE4uX1lKMkQvXEopMkdfJVFEPl9RUDonL1xJCitNKUI3X0NYWidfWTY1Qy9fJFBLV19VTFssX103KlI/XzpTXFtfUzwrIV9aJj1GX1xHKSIvXyVBKDRfUTwyCitNJU9cMyQxM18lUTQ3X1E4NCVPXDUkUTdfJTEsNV9RQDYmL1xDKDIvXyZRRDtfUjBIKU9cWS9DU18rUzBSCitNX1IwSSlfXFsuU0NfJlIsTV9TOSY4L10jM1ZLXy0zSTNfUyBaM09cXTNVV18rI1EsX1I8TC9PXEssRCNfCitNLkQxL19VWUI6T11IOVY7XztGPU9fWCFZPF9eJD5GX188VjE+X1leN0U/XS8zNF9fMjQ9JF9RXDsnP1w8CitNJiFLXyhSNEhfU1kqNF9cNiszK18zVilOX1haSE0/XDwpMjdfKTIgQF9TUF8wL10oMzRPXzVFOTNfVFUsCitNMl9dLDM0W19MSzJXX1FAOygvXlRLWy9fJ0FQPl9RXEIoX1w+JkFTXygxXDxfW0ZVTF9dODRVP18lQTQ8CitNX1EoLyU/XDIkIS9fJCBYMV9RODQlX1w/JzIjXyUxLDZfUTQzJU9cNCRBN18kUSQ0X1EkLyRPXDMkMTNfCitNJEEgM19TPFMuX1xSK0M/XycxREJfUUg2J19cMiNRN18lUTQ4X1E8NSYvXDclMUNfI1BUMF9SID4oP1w3CitNJTFDXyQgWDFfUUg4Jl9cNCRBN18lISg1X1EwMiU/XDMkQUdfJFEoOF9RMDQlX1wzJSE3XyUhNDxfUSAuCitNJV9dMTNVK18nUVA7X1ZZTzwvXUY5JidfQTghWl9VMTM0T10sNCUrXzE0RStfVEEoMl9dKjIkT18xVDUoCitNX19fUFsvXFstIzNfKjJIS19UVScxP1xVKzJPXy1DIFRfUUg3Jz9dOTQ1M184VU05X1I8QilPXDsnMitfCitNKUIwRl9TOFMsT14vQ0g/X0YpQi9fXDMiTz9fOVQ8X19VXFMrX11LL1NPXyVOS0dfSko6RF9UXSwyX1w1CitNJDEvXyVBJDVfUSwxJS9cNyUxP18lQTA2X1E0MyU/XDUkUTdfJUEwNl9RWDwnT1w6JiFLXyhCOERfU0BdCitNLl9cUC0zL18oUkBGX1M0WS1fXDcnUkdfIlE8Ul9QUDMtX1woJFMrXypTUUpfUVhZPU9cSTJXV18pVSIhCitNX1NZTEdPXEw2SFNfLEVOLF9UNUhEL10uOUhXXzMlMT5fWT4tQE9dVzpWK18uIyhQX1NdIDA/XSgyJDdfCitNOkZZRV9WSU45T11VQFg7Xy5VVVFfV1ZPUS9eQFFeI18+KipSX1c2JEEvXiQ+V09fMFNdIV9RTEMoL1xNCitNLFJfXzBUQSZfVzVaPk9eWFAsK18lMVxDX1tWW09PXDwmQVNfJkFUPl9RWDonL1w1JiErX01aRkZfWU4gCitNQU9cNCNRN18kMSQ0X1EwMiU/XDQkQTdfJCBYMV9RMDIlP1wzJDEzXyRRJDRfUSQvJE9cMiQhL18lMSw2CitNX1EsMSUvXDQkQTdfJ0FMQV9RLC8lX1wxIzE3XyQgUDRfUSQvJE9cOiYhT18mMTw6X1FANiY/XDIkIS9fCitNJzFMPl9RMDIlP1w6JiFPXyRAXDVfUSgvJT9cNSRBQ18lMSg4X1EsMiYvXDEkUUNfJFE0Ol9RPDknT1wxCitNJEFHXyRRKDhfUyhQLE9cPycxS19IOVI8X1heJEBfXUg3JT9fOUVVPV9WITw3T10+NkVTXzJEOShfVSUtCitNM19dMjQlL19fXzNUX1JQRyo/XD4oIjdfKDFYPV9SWEYpL10sMURLXyhSIEZfUjg+KD9cSihCI18nMUA8CitNX1FAOidfXDwmQVNfPUctUl9YLiI+X144RihfX08rSlVfXUMwU09fPlRdK19WPFstX1w2Wk4/XkpJSjNfCitNMVQxI19RODIlL1w3JEE7XyVRNDhfUUg4Jk9cNyUxP18mITg4X1E8NSVfXDclMT9fJlFEO19RVDsnP1w/CitNKFInXywzOFRfUyxYLU9cPShCI18uIzhRX1IwQidfXD8nIitfJUEsP19RMDEqL1xQLVU3XydTJTVfUiBWCitNNy9cTzUnP18uVkotX1JVOkBPXD4xNl9fKyU1WV9SWSg7X11cQFhHX0dJIiFfVlFANV9dJTAzX18rQyRSCitNX1JITypfXT84VUtfQDddWl9VVUY7P105PykvXztZWlZfWV8hVl9eI0k7R19IOjpLX1MsTCsvXFQtMztfCitNNTVJOF9XWiA/P11MOlZLXyoyUE1fWiJESU9dPjhWQ19QTCMjX1EsMSRfXDAkUTNfJ0FIPF9SLEEmT15YCitNS1pHX0JXUVxfUTwxJT9cNiUhP18lISg1X1EwMiU/XDMkMTNfJFEkNF9RLDElL1wyJCEvXyRBIDNfUSwxCitNJS9cMiQhL18kUSQ0X1FIOCZfXSkxVEtfJTEsNl9RIC4kP1wyJCEvXyRBIDNfUiA+KD9cQigiL18oUiRECitNX1E8NSYvXSQwRDdfJSEoNV9RIC4kP1w0JCFDXyRAWDZfUUg2J09cRyhST18sMlhUX1NAUy4/XS4yJSNfCitNODVJRF9RJC4mX1w0JDFXXychQEBfVChdMD9eTUoqS19MSkpIX1dNTzpPXUw5NjdfQlgqIl9XIUc5X11MCitNOTY3XzclPTdfVCxeME9fX14/S18pUjhNX1JITy5fXFUtI0tfKiIoQF9VPTE1P1w+JlInX0VJJjNfWzJMCitNSk9cXi4zV18jQSA1X1FIOCZPXD4mUUtfQCdZV19ZNjNCX15cTks3X1VdJy9fXU8wU19fN1MsT19QSz5WCitNX1pWSUlfXEQoMiNfJkE4OF9RNDAlL1wzJDEzXyYxPDlfUTw1JV9cOCVBQ18lUTQ3X1E8NSVfXDsmMU9fCitNJ1FUP19RXEMoP1xPLVMzXy4jVFtfUVBBJ19cVC4jS18nUiRGX1FIPSdPXDElQVNfJVFITF9RPEIoX10jCitNNiUrXz44XjdfWTpRTy9dXEYqI183R0IjX1QtNzk/XSg5NydfLEQ9RF9XRVs+P142QSc7XzwmNTpfVE0nCitNMT9dIjE0O18sMzhSX1haL0IvXVo9VztfJyFERl9UJTo8P14hTCwrX0Y8NzlfWFJXUj9eSk47R18uIzRUCitNX1NEXi9PXUQ6Nj9fUzxHJ19YXipCT1w8JiFLX0NIWjFfViVDOi9eRkkqP18kUSw2X1MgUy0vXEUoQidfCitNREg6IV9WMT82P1w7JzFLXyZRPDlfUUQ0Ji9cPSZRW18lMSw2X1EoMCRfXDIkIS9fJEEgM19RJC8kT1wxCitNI1ErXyRBIDNfUSgwJF9cLSJQW18mUUQ8X1UhLzU/XSgxVFdfJSEoNV9RKDAkX1wvIzEjXyQgWDFfUUg4CitNJl9cNyUxQ18kMFwyX1BAJiI/XDIkIS9fJkE0OV9UOSIyT1xfLzQ7Xy5DSSVfUSQvJi9cUiozI18wIzRaCitNX1hFXkBfXTgxVSdfOjVVTF9WMTo6X11XO0dPXztWQU9fWi4+SC9ePUVZN18yRD0iX1U1MzU/XzZSTE9fCitNNlUtMV9USSMwX1w6JTE3XychODpfX19YXF9dIS80O180VUFKX1EwMiU/XEQpIidfO1YxSV9RPDQmT1wzCitNJSE3XyohVDxfUTgwJS9cNyVBU18mQTg4X1heKkJPXV8+JytfRzk+L19aVktJT18yVCxXX1YtIyxfXT8rCitNUV9eTUoqL19KWkZGX1FENiU/XDslUUdfJkE0OV9RLDElL1w3JTFDXyQwXDJfUTAyJT9cNSRBQ18lQTA3CitNX1E4NCVPXFkuIz9fKSIsQl9SRFgtL1xVLjM/XyYxVDtfUlxULC9cRShCQ18nMVw8X1EwOihPXDcmU09fCitNJyFYQV9VTTk1T14rRilXX0I6LkZfWDY5Rz9dRTs2X182Jik/X1U9TzsvXEUwRytfPidVW19YTVU8X11PCitNOTVLXzNURSdfUjBFKU9cQykyK19HOTItX1VVTDw/XD8rRDdfJCJNI19XVkVOT147Ul4/X0g8U0RfW1MgCitNUE9dMDFUP18qMjxJX1YhRDhPXy5SLDtfRjkyNF9RTDkmX15bTltbXzJEUTFfW0JXT09cOSZRW184Ji1ECitNX1FANCRPXEEnMU9fKUIkQV9RRDQlT1w0I1E3XyYhODlfUihAKF9cPSZRW18kQSAzX1EkLyRPXDIkIS9fCitNJUEwN19RLDElL1wxI1EnXyQwXDFfUFQrI09cPCYxX18sU00rX1EoMidfXDUjUS9fJEEsNF9RIDAkX1w4CitNJUFHXykiKEVfUTw1Ji9cOCVBQ18lUTQ3X1FANCVPXDolMT9fJyE8PV9QVC8lT1wnIyErXyIgPC5fUSwuCitNJE9cPCZBP18nUUwzX1dZSTlfXV04RytfMiJZKV9VLF01X10iLUNfX0M4KiFfVTkxND9cWS5TW18rMlxUCitNX1xbIlBfXE4sUydfMyRVLl9RVDgnL1w3JSFLX19fM1FfU0RULk9cNyVSM18pQiRFX1JESyovXV08Rz9fCitNJkE8PV9YSitDL15SSVo7XzwmSU5fUSwyJi9cOiVBQ18lUSgyX1c9UDpPXjtFOFdfTis6UV9bVl1OT18hCitNT0tHX0o6Jj1fWVI6RT9ePEZJP18pMihBX1IgPCdPXDwlUU9fJFEkNF9RSDgmX1wzJDEzXyVRNDhfUTw0CitNJk9cNyUxQ18oIVhAX1FEOCVfXD8nQVdfKkNEVV9TPFsuP1w4JyFLXytDOFJfUjxCKU9cRylBX18pIkRVCitNX1FQRjJfXDQmUidfL1NMWV9YMilDT143SypbX0A5OjhfV0ImQT9dRTs2R183NzFPX1IxITw/XVk/R1NfCitNRTddXV9XPU04T10oMEQjXyoySEtfUixFKE9eP0QoT18mMixHX1M5PzxPXTtDOkNfOTkuT19VVjFMT10wCitNPzlPX0pLIlpfVV01Ni9cTCpCU18lIUA2X10jKlIvXkBGWU9fJ0FQPl9bIlBMX10iMSRHX0xLIlNfUUg6CitNJz9dUz03Q18lMSg4X1FYQikvXEUqMk9fJSEwN19RLC4kT1w2JSE/XyZBQDtfUTw1Ji9cMiQhL18lMSw2CitNX1EsMSUvXDAjQSdfJDBcMl9RJC8kP1wxI1EnXyNQVDBfUUw4J09cPylDU18lIThFX1FUOCZPXEUoIjNfCitNJEEgM19RRDcmT1xMKkJXXycxTD5fUTw1JV9cNSRRN18zNEUrX1JERClPXDokQTtfJUEoNF9RKDEkL1xBCitNJ1IrXyQxODxfUUA+KC9cTCoyQ18nUSw2X1YxOjs/XDskQktfQygiNV9YJVY/P10lLyNTXygxWD1fU1EgCitNL09cUCxDI19TXDMjX1MgVSxfXScyJEdfKCFMP19RSDgmX19fXF8rXyoiIENfUjBBKV9cQSchU18vVCReCitNX1cxSTtPXDAjMS9fKTI4R19TNEoqP1xHKDI3XyUhLDlfUUw3Jj9dOzVFO185ViE6X1oiOkRPXkVIWVtfCitNQCg2IV9ZUj1FX14yRChPXz1HRVNfV0FYPT9cNyUhL18mITA2X1E8MiVPXDEjUStfJUEwN19RMDIlP1w3CitNJTFDXyUxKDhfUTg0JV9cQygyL18mUUg5X1FQOyZPXEctQytfLiNQWl9RQDwmT1xPLlNDXykyKEFfUzhQCitNKU9cRisjU18nQj0wX1E0OyhfXEInQVNfNSVNO19VMUc5X11UQkhHXz5YWihfViFKOD9dOTwmT18rRE1bCitNX1c9XD5PXjlAWCdfPTZNQF9XOVA7T1xKKlJTXywjKE9fWF4uQF9dSjhGI18jIjxSX1cmSFAvXiNMPFdfCitNOEk6V19XRkJQL15TTFtTXztGKUNfUjBCKS9cTixDI19TXEcnX1leOkZPXEwqQlNfSUo6SV9SSEwsP15RCitNSzpPXyZRQDdfVilDOk9cRykjJ18vI0UlX1IkQio/XDQkUUdfJDEkNF9RLDElL1w2JSE/XyRBIDNfUSwxCitNJS9cOiYhT18lUTQ4X1EkLyRPXDEjUStfJEEgMl9RKDAkT1wwI0EnXychRD9fUVBDMD9cKiMxX18kIEwrCitNX1JAQyk/XDglMU9fJjE8Ol9SMEIpP1xAJ0InXycxTD1fUihAKE9dSjlGQ18pQiRDX1EsLydfXDgmIi9fCitNJTFAPV9RSEUsL1w+KUNLXy4zVSVfUjxCJz9cVStSP187Jk1KX1BQLSNPXkRISV9fLTMgS19SJDwnL1w2CitNJiE7Xy9ELF9fVFEqMT9fJU47N18xVFEqX1JYTywvXDklIUNfJiE4OV9fR01bT1xHJ1IrXyVBJDVfUVg7CitNJk9cPScxS19GSFoxX1JARSpfXEgqMktfLDJER19SSEUpX1w1JEFDXyhCIEJfV1lZPj9dOzVFI19IWUozCitNX1kyMkM/XU49NltfRDk6MF9XSV09X11OPTZbXzxHLU1fUTAxJC9cOSUhQ18mMTA4X1E4NCVfXDglQUdfCitNJiE4OV9RRDcmT1w5JVFLXyVBMDdfUiA+KC9cNyVBN18mUUg5X1I8UywvXFQuMz9fJUFIOF9TQF4wL1xBCitNJ1FTXydBPDFfVDkuN09cRCs1U18mQUxGX1IgPiZfXEYtIy9fQUlOPV9XLilCX11BPVc3XzZWMT1fVVlVCitNPC9cTjNXS18+J1FeX1lSJ0BPXUc2RFdfQkgpXl9RXEAoP1xPLDJfX0FYWiJfWkY1Qz9dMDYmK185KTJJCitNX1dGSFAvXjtTPkNfNldSM19bUldPP14iPUc/XydSIEFfU0xeL19fL1I8P19KKiZBX1MkTyw/XE8rUytfCitNKkJET19VUTg1T1w9JkFHXzBUKShfUEQoJT9cPSVCK18oIUhCX1FENicvXDAkUTNfJTE0OF9RMDIlP1wxCitNI1ErXyVBMDdfUVw9KC9cNiUhP18kMFwyX1EkLyRPXDIkIS9fJEEgMl9RKDAkX1w1JEFDXycyLSNfUSQ2CitNLC9cMSNRK18lUSQ1X1JERStPXEcpIktfLCJUU19SWEwrX1xRK1MnXylCMEZfUVg6Jy9dIi8zX18oQjReCitNX1RJMTlfXDQnQlNfKFMtLV9USTY9P1wrIyFXXygxRDVfViU8Mk9dIy9DR18mISw1X1oqPUdfXEopIlNfCitNJkE0O19RNDclP10pMyQ7XzQkXShfWlJCR09cOScxT18mIUQ6X1JARio/XFArQyNfX19LWV9STEMpX1wyCitNJDE/XychVD5fV0VXPS9eRkVZQ18lMSw1X1JETStfXltNOy9fRyk+OV9RQDMmP1w9JlFbXyVRKDJfVDUpCitNMD9eSEc5O19BOC1eX1Y1TzlPXiVDOC9fOycxSl9WPU85P11JOzY3XyVRNDdfUUg3Jz9cOiYhT18mITg4CitNX1FMOSZfXD4nIVtfJyFIPF9RQDYmL1w6JiFLXyZBQDpfUUA2Ji9cNyYhR18qIlxPX1MoWy5fXDQmMUdfCitNLTMgXF9SKEYnP1xAJUFfXycyRFBfUiRWOy9cNiUiM18oQVw+X1IkTS0vXipJKj9fQElWRF9VVVQ+P10mCitNNERfXzQ2SU9fUlU1Py9dVD44T19EOCFSX1ctQDVPXj5ESFdfKDIoQ19RXDsnP14yQkg7X0lZVjJfWUZKCitNTV9dVkhLU19GLDM4X1pHLVhPXEouVENfQiguI19ZVjhEX1w+J0InXzJUSTBfXDcgUE9eTklKR18uQ0BaCitNX1NAWy8vXSszRF9fL0QtI19RSD0nT14iP0gjXyYhRDpfUUQ5Jy9cPCchX18kUSw2X1EwNCVfXDYlQUdfCitNJUE4OV9RSDonP1xdLzQjXydRXEJfUUQ5Jy9cPydSK18jQFgxX1EwLiVPXDQjUS9fJDBcMl9RKDAmP1w4CitNKENXXyhCSTZfUTg8LU9cOCYiJ181JFFHX1QgXjFfXEspUl9fJlFIQV9YLiE/T10yM1RbXyZBODhfUjxCCitNKU9cLSRCM18nIixRX1MoVTAvXUc7OC9fPUgmQF9RXEQtT1w9JUE7Xy4iVEZfUiw/Jz9cPSVBO19LOj5FCitNX1JMSCtPXD8mUi9fJSEoNF9WKUM3P1w7JlFDXyxTJExfUUw4JV9cNSRRO18qMlRLX1FANiYvX19eLz9fCitNMFNMX19RXD4pL1w1JUE/XykyNEJfWyZFSU9cOyYxT18mMUw+X1FEMyQ/XDYkMS9fJyE8PV9RTDknL14yCitNQzhXXzE0RSFfWio3RC9dXz83Q183JjU+X1Y5TTk/XUA5VV9fODZBQF9WMUg4L1w4JUFDXyYxODxfUTg0CitNJV9cNiUhO18mQUA6X1FUOyc/XDYlITtfJTEsNV9RKDAkT1w5JVFHXyVRNDdfUTw4Jj9cRisyV18tI1RdCitNX1EwOSY/XFMsI1NfKDJAPl9RSDAmP1wpJEFHXyZSRUFfUUw3KV9cRygxX18mIUg9X1MxKzJPXiVIOjNfCitNOSdBXF9UVTY1T10yOjZDXyxVQVdfVyVSPz9eN0AmV19BNz1OX1pCQEdPXEEnUitfJ1FUP19YVipBP15ICitNSDk3X0Q6Kk9fUjUvOj9eU1NeM19NPEs8X1EsPSlfXipBN19fQFghW19RWEIpL105NlYjX09bTl1fW1ZZCitNTl9cTCwzJ18tJCBfX1MwXS8/XSw2JT9fKSI8SF9ZMixDX1w5JDEzXyVBMDdfUUg6Jz9cMCQhL18mIUA7CitNX1E0NSYvXD4nQidfJ0FYQV9ULSMxT1xKKkJXXygiIENfUkhKKz9cMiRBN18lIFg2X1EwLyRfXC4jIF9fCitNJFEkOl9RNEEvL1w6KTUzXyciPSpfUyhVM09dQjUnS19AJ1onX1BUMCU/XDUkQVtfJCBULF9VIS0zL1w5CitNJTE/XyghTD9fVC0iMi9dNjUlO184VVE8X1o6QkpPXU47VztfJUEwN19RRDIkT1xRKTInXydRSDpfUUw0CitNJS9eSUhaJ18lISQ3X1EsLyVfXC8jMF9fOEYtPV9ZTjtGL1xdLzNLXycxTD1fUUw5Jy9cTStCQ18mQTg4CitNX19fWF1fXSwxJENfKTIwSl9RWD8oL1xPLSMjX09bOlZfUUQ3Jj9cRCkiP19MWk5JX1tKVU1fXDslQVNfCitNJDBcMl9RWDkmP1w/KFFPX0g5Oi9fWCFePj9cVC8jQ18uM1xbX1JUUytfXFUuUz9fNzYhOl9RQDYmL1w0CitNJDE/XyUhKDVfUSwxJF9cNSRRN18lMSw1X1E0MyU/XDMkMS9fJSEoNF9RRDcmP1w5JVFHXyVBPDhfUiRICitNKi9cUS5DS18kQTw3X1JUTS4vXEMqUidfKFFEQl9RXEUrP1w/KzY3Xy1DNSZfUzxYLE9cXzAzW18sU0BSCitNX1lGRUkvXjlJOkdfO0c1VV9UXUU4X1xTNjdHXz0nUjBfWEIgP09eJkA4J19LKjpKX1FMNicvXD4nIVtfCitNQzhaKF9ZVjhDL10oNjY7XzFWVihfWl8vWT9dVENKL18xJTE+X1gyJEA/XjlGSTNfKVJUT19TIFUuT15QCitNS0sjX1BbXyFfVjFJOj9dPDomP189J01bX1gyKUI/XjFDWSdfSioiQ19RQDMlP1w1JFE7XyZBSD1fUSAwCitNJF9cNyVRS18jQFgxX1E4NiY/XD0nMiNfJ0FYQV9RXD8oT1w5JjFTXyYxRDxfUFwvJE9cMyMxN18kUFgyCitNX1EgLiQ/XDQkQU9fJTFYVl9RREM0L1w7KTRLXyUhRFdfVjUvPy9dXj44N18kIUA6X1FIOilfXD0mMU9fCitNNTUpMV9SQEQpT1xQKlJfXylSLEVfUig4Jl9cUikyS18+NyFXX1QkVi0/XUA1RUdfJDBYNF9RMDAkT1w2CitNJEEzXyYxKDJfWTYvQz9cNSRBQ18lISA4X1E8NSVfXT03RUNfR0laO19TJFIsX1w8JyFfXycxTD1fVE0qCitNMF9eJ0EoL19fXzdSX1QgWi9PXDsnIi9fJiFEOl9XQVo9X15cTTs3XyZBQDpfUTQzJU9cRidRX18mQTg4CitNX1E4MyY/XD0nIitfQlg6Jl9SSEspL149RShXX0BYJVxfUlxXLS9cSCsyT18mMVw7X1JUUytfXTM2NSdfCitNJiE4OF9RMDElX1w0JEE3XyUxLDVfUTAyJS9cMyQxL18lISg0X1E0MyU/XDQkQTNfJjE8OV9RRDcmP1w3CitNJiFHXyhCPEdfUlBVLT9cOygiI18tMzxfX1E4PiZPXD0lMUdfJjFcR19SMFY7T1w5J1JfXylCSEJfUlRQCitNKk9cVisyO18uUzhWX1ZVUDw/XSYzVF9fLCUlQ19RTTBBT1w7LlcvXy4kXVpfVVFIPV9eWkxLO18oQVRDCitNX1IgPCdPXi1DWDtfSEleNF9VLUA6X10rOygvXzFWTiBfUiUiNi9cQS1EK18qMkxJX1leQUdPXyNRTD9fCitNQShGLl9cLyRRP15fTytPXzZFVT5fW1sjUF9cXjA0K19TPEcrX1YlOTcvXjdDWStfJjE8OV9SNEUqL1w5CitNJjFTXyRRLDZfUTw3Jk9cMCQhL18nQVhBX1IsQylPXEgqIk9fJjFEPF9RTDsnT1w1JTFDXyQhIDNfUSwuCitNJS9cMyNBK18kQSAzX1FMOig/XDUnIyNfJkIlK19ROD0wP1w7JyNPXzlEXVlfVy1QPz9cSi0zO18nUiBLCitNX1dVWj4/XScxJC9fJiEwNl9SVEgrL10nMERDXzEzTSRfVCxUL19eJD8oO184NS00X1omOUc/XDQkQU9fCitNJFE0OF9RLDEkX1w8JVE/X0VZJi9fUFQrI09cNSRBQ18mITw2X1Y1RjgvXUs6NjtfLTM4V19RSDwoP1w0CitNJEEzXzUlKSpfW1ZaTj9fX11PI181NF0zX1M0WjFPXEgpMk9fKSIgPl9bJk5LP1w5JTE/XyZBNDlfViU2CitNNT9dQzY1N18mUTw1X1FUPCZfXEonIVdfKiJEQl9ZNjRCP14nQigrXykyUExfUVxGKU9cPilCL18qQyhOCitNX1RJNjM/XDgmMUtfJUEkN19RLDElL1w2JSE/XyVBMDdfUTg0JV9cMyQxM18lISg0X1EwMiUvXDYlITtfCitNJjE8OV9RPDUlX1w/KEIvXylTLFJfUEwyJE9cTS0zK18jUSRAX1FMOCRfXDcoMlNfJjMhRV9RWEEsX1xBCitNJ1FDXysiSEVfU1BaKl9cRyhBV18yRDxcX1gqKEEvXEMwRjNfKyU+JV9RUSBCX1xNM0k7XzI2PV1fXCJOCitNTE9cOidSM18oUUQ8X1kiMEA/Xj5HKTdfQyhaM19ZRkRKX143SFsrXzFVQUVfU0kmMk9eLkFIK19KKjZECitNX11XNVYvXjNGKUNfSjpKS19cJl9PL15aTjtDX1YtLzdfW0pWTS9fKVBMK188VllOX1g2IkA/XE8rQldfCitNJiFIPV9RSDwnX1wyJEE3XyYhODlfUFQuI19dODZVU180NTE1X1IoRSlPXEAnQidfKSIoRV9RVDsnT1wzCitNJDEzXyVBIDRfUTAvJF9cMSNRK18lITA3X1FURi9PXDwoVSdfJSFVIl9RUEAvL1xOJ0NLXzg2OVJfVUU+CitNN09dSzs2S19FOS4uX1UlLTJfXDckQTtfKyJAUF9RWD0oX1xSKlMrXy5DJFhfV1lZP19dNDJUT19KOiJACitNX1FQNyY/XDglQUdfJFEoOF9RRDQlT15FR1lXXyYhLDdfUTQzJU9cOiYxQ19AOCVYX1lGNkQ/XFwuIztfCitNKUIoRF9RRDglX10zMzQvX1ArVlxfX19UXC9dXT1HO18mMUhBX1EgLiQ/XihBKCtfSko+Rl9RWDonL1w9CitNJiFTXz0mRUhfVllGOS9cOiUxN18nMUw9X1JcRypPXDcoIUdfLUNUU19TSSIvT1xGKzJXXyhSOEdfUUQ9CitNJl9cSStCS18xRSEnX1FMPCc/XDklIUtfJTEsNl9RQDYmP1w4JUFHXyYhODlfUTAyJT9cNiUhO18lMSw1CitNX1E4NCVPXDklUUdfJTEsNV9RWEEoT1xDK1JbXyQhPDdfUkxTLC9cNCVCN18mUUAzX1EwPio/XDksNkNfCitNK1MtKF9UQSYwX1xEKSInXysyTENfU0hQLF9cWSxST18vU1RaX1IxIDhPXEw1WDdfJ0Q6MV9SSStEX10kCitNN1c/X01aNklfUSw6Jk9cQiVRU19DOSFeX1ouQEUvXVg8JltfUDs2WF9dKytVP1w8J0I7Xy4jTFxfWzZICitNSF9eSUkqM19WPF8yX1dWIkBPXjtHSV9fUkw3IF9bSlRMT188VE03X1IrWlpfXFsmUS9dXj43R19CODolCitNX1FcPic/XDcmMVNfJTE8Ol9RJDElL1w3JTFDXyUhNDZfUFgvJC9cXzAkJ18nQVxAX1I8RSovXEUoUjtfCitNKCFYQV9RMDIlP1w2JCEzXyUgXDNfUFwtJC9cLyNRK18nIjRdX1FMQTQ/XDMnRCNfJUFMVF9SXEAuP11JCitNO0dLXzkmRUlfVkFKOV9eKUFYK180RFksX1IwPyhfXFwuJCNfMUQ1K19RJCokP1xaLDNDX0MoPi1fVi06CitNNk9eQkY5R18nUUg8X1E4NCVfXDMkQUNfJyE8OV9aSkRIT1xUK1MvXyZBQDtfUjxGKT9dXz9XO18/N0lVCitNX1NcViwvXEspQidfJ1FINF9VOSwwP18rUDwzX19fM1FfWiY2RT9cOiVRO18nQUg8X1M8VCxfXlZMWytfCitNJUEoNF9RXDonT1w+JjFfXyUxKDhfUTw5KC9cNCZCK189VyFXX1FQRCgvXipDWEdfPjdZXF9TNSEwL1xZCitNMEQrXy40LSBfU00mMD9dIjNEN18kQSw0X1FENCZPXDUkUTtfJTEsNl9RODQlX1w3JTFDXyUhKDVfUTg0CitNJU9cNyUxP18lQTA2X1FENyY/XDglQUNfJzIgQV9SKE4rP1xAKVI/XysjMFFfUSw1KS9cPCYxM18iUTRACitNX1FIUjpfXDknUzdfMCNcXl9UISIwL1xLLCJLXydRUEJfUzhUKz9cVy4zO18nUzk5X1JFN0EvXDoxSSNfCitNKlRKMl9TRTI7X15RR1onXyVBWDpfUjg7KC9eKkJXW19JOV43X1ZBOjZfX0pWPUdfWi1DPF9TRFQtT11ZCitNPjc7X1U8RyRfWjY+R09fOFMsX19DOSoyX1dSI0BfXyhRS19fTztCU19eIzdVX18qUDtPX09bPlVfWEolCitNQT9dUTtGV18rQlRMX1FIPCdfXDYmIU9fJSEwN19RQDYmP1wvIzBfXyRRJDNfUSwxJF9cRChCM18nQVA/CitNX1FQOic/XDklUUtfJSEoNV9RNC8kX1w0I1EvXyQgWDFfUSwzJU9cOCdST18nUjUlX1EkNyw/XDolUldfCitNNiRFQl9WMUk9P11EOjZHXzVFQTVfWDYjP09dMTM0T18mQTQ5X1UpLjVPXV8/SDNfP1dBX19YIVc/T15WCitNTDs/X0E3UVxfWjo9Rz9cPCVRR18nIUg9X1FQOyg/XDwlUUdfSzo+RV9YOiFBP1xbLjNTXytSWE1fWDomCitNPz9ePUZJN18yNDRdX1FIOCRfXDomITdfLSJUR19bWlhPL19fXk9LX08rJlBfUjxCKE9cRCgiK18pIVw/CitNX1hWKkI/XC8iUFdfJTEgNF9bKkhJL15XSlo/XydRPDVfUVA5Ji9cPyUxQ18oIjBCX1k6NkRfXT84Ri9fCitNLSQpIV9TQSYxP1xaMjQ3Xy9EVShfVC0vMU9cMSUhN18mUTg8X1EsMSUvXDglQUdfJjE8Ol9RPDUmL1w0CitNJEE3XyYxPDlfUTg0JU9cPCZBU18lMSw1X1FANiYvXDwoMidfKUMoUV9SKEkqP1xFKyJTXyYxVExfUVw7CitNJj9cLiUyJ18oM01UX1FIPy4vXEcpQjdfKlJUSl9TMFstL1xVLiNHXytTLEtfUyRWLC9cPCw1L18qVTokCitNX1E5JENPXE4zOTdfLiUlVF9aTjhGL1w6KEFfXydBMDdfV1FbPS9eQkZJO184JTE3X143N1YvX0tXLVdfCitNK0JISF9cIyFOX15QSjovX0oqJkFfXVMtVD9eJkJYT184NklKX103NFM/Xl1OSzdfV11HN19cTyRPT15cCitNTVsrX0M4QipfViE9Ny9cUyxDJ18mQVA/X1E4OCc/XDQlIT9fJiE4OV9RKDAkX1wyJCEvXyRRJDRfUjhECitNKU9cPidCJ18mQUg9X1EwNCVfXDEkMTNfJSBcM19RMC8kX1wzJDEzXyRBKDVfUTw6Jl9cOicyW18jMSRACitNX1FAMShPXEUmQldfKVJUVV9TOFsuP100NUUvXzU1KS1fVTEwM09cOSUhQ180NFk0X1JYSyw/XEInMi9fCitNK0I0TF9WWUk7X10tMSQzX0tKNkVfUUAzJT9cNSRRO18jQFQ0X1EwLyRfXkxJWj9fPydBWl9TQFYuL1xQCitNLCJXX0VJOi1fWiY8RU9dLDJEL18nQVg7X1IsQShfXEgoUi9fTVs2WF9fX1FbP15KR0onXygxWERfUUg6CitNJz9eJUAoI19NSyZRX1EoLiQvXDglQUdfJzE4Nl9STEQpL1w5JTE/XyUxPDpfVkFCOU9cNSchU19GSVY+CitNX1NIXS9PXE4vU19fLDQpIl9TMSYxL1xaMyRDXzJFLSxfUTA1JU9cNiRRR18nITg6X1FENyZPXD4nIV9fCitNJTEsNl9RLDElL1w2JSE/XyUhKDVfUVA6Jz9cOiYhT18lMTQ4X1FIPigvXEIrUyNfJkIoRF9SKEorT1wzCitNJzI/XyhBWEBfUUg9Kj9cQS5HN18pIjkhX1JIRSgvXTE0NDtfLlNMTl9VQTkzL1xRLSJDXydCID1fUUBPCitNMy9cPzJHM18iMzldX1JJK0UvXEIvVl9fUSpeS19RMDgoL1xGKDFPXz0nMVFfWkJDRz9dKS9TT19aTU87CitNX18rPFc/XEIoIVdfR1k+NV9dOydRX15ZTjs7X1ZcXzBfWUI5Rk9dNjclW19TXEMoX1tKUkwvXzpUTSNfCitNUEtKWF9bTlNLX15FRlozXzREVS1fUihAJz9cPicyM18lITg7X1E8NSYvXDwmIUtfJCBUM19RLDAlT1wzCitNJDEzXypSREtfUkxLK09cOSZSI18lITg7X1EkMyYvXEQpMjtfLTM4V19TWF8wL10rMyRXXyoiOElfUTg4CitNJl9cTCwzJ185RkFGX1UhNDRPXFwvQ09fNVUpLV9WUUA2X11fPFZTXzxGSUhfUVg5Jz9dMDJEW18oMVBCCitNX1EgKiRPXEwpQltfOyY5Tl9VUTM0X15NSSozXyZBNDdfUTw1Ji9cLyNRS18kQSQ+X1IoPypfXDYjUUdfCitNJTEwOl9RPDgmP15CRzlXX0lJWjxfVEkoMD9dJjEjV18zREUjX1UpLDEvXV89Vy9fX18jTF9bJkVKL1w+CitNJlInXyZRTD5fUjRAKC9dVTwnI18mMTQ3X1EkLyRPXkpIWi9fTEpOS19RPDMlP1wzJTFDXydBSDxfUiRJCitNKU9eUUtKV19QO1JcX1c9XEA/XSk0NTdfMFRNLV9UKSsyX10qM1RHXyVRNDdfUSwwJU9cMiQhL18mQUA7CitNX1EwMiU/XDUkUTtfJFEkNF9RMDQlX1wyJEE3XyYxRDxfUUg6Jz9cOCYhT18mUVxBX1IgTStPXEIqQlNfCitNKFJES19RSEUrL1xDKTIvXykyOFFfUjkiPl9cPykjW18pUixBX1M0ViwvXScxM1dfNUU5K19UVS8xT1xBCitNKFInXyUyUSlfUiErPT9cKS1HV18pRD4wX1FQWTo/XlFHKUNfJTFEQV9SOEEmX10zNFUjX0cpPjFfVCBWCitNLE9fTlddX19bXUc6X1MgTipfXzlUPF9fV10jMF9XTVk9T187UzxbX0dZVj9fVDUpMl9fM1QsX19LOk5ICitNX103M1QvXlxOSz9fSFlaOV9aRj9KL1xUK1JfXychSDdfUzRYLz9cPihSL18lQUg4X1NAWi1fXFMrUydfCitNJkE4OF9XIU07L10mMSQnXyoiPEZfUzBWLS9eQkkqK18oUjRDX1VdQTdPXSozJEdfMDQtIF9TXSEvT105CitNNlVDXzNEWStfViU8NV9eOUM4Q19NWjZBX1xCVEwvXzFOKy9fVDs2Tl9cVlRJX100MFNXXyhRSEFfVTUvCitNNV9dWDxHS18+JyVbX1dZV0A/Xk5JWydfSileP19aXkZJT1w6JTE/XyVRNDhfUTw5KC9cNCUyI18oUihTCitNX1FINytPXDolUldfJFEgQl9RRDUpP1w0IyFLXyQgUDRfUzBRLC9cXy9DL18yVEBcX1NAVitfX19cXl9fCitNTVpOTl9RNDImL1w3JVFLXz03IVBfU1RYLi9cNiRBM18mITg5X1I4PydfXDslITNfJlE8OV9RNDcmT10qCitNMjRDXy0jUFhfXC5bTj9fSlZdT19YLScyX14rMFUvXzlSLENfVFwvIF9ZXjpFL1w/JlFXXyUxKDhfUSwzCitNJU9cOCVBR18kUSQ0X1FENyZPXDUkUTtfJCEgM19RIDIlP1w5JlFbXyVRRDxfUTQ1Ji9cOScxX18oIlROCitNX1IsSys/XEgqUlNfJzJIT19SNEspX1xMK0M7XykkJVdfUjRLMT9cQydSJ18pIjhEX1NcXS1PXTE0NENfCitNNzVZN19RQDkmT1wuKSQzXyY0MU5fUDhTPk9cSDI5K18nQ01LX1tORkhPXEApIlNfKTIgOl9UTSsyL15BCitNRyk7Xy5DIExfXjc2VU9fUFZNT18tQzBRX11DMFNPXz5TXF9fRkk6NF9dWy9UL15FSDovXzJEUS9fXSMpCitNUj9eTElKM19VLFssX1wiWk4vXyRPK0NfTzsuXF9TKE0rP1xSLCJXXzIkOShfWU47Ri9eOEVJJ18vM0xUCitNX1pGRUhfXFMrUldfS1pSR19UIF4tX148Rkk3Xy4zSFRfVzVWPC9cRyoiK18xNEUhX1M4WixPXSQyJCNfCitNMEQ4Xl9UOSwxL100NCRDX1JLPk9fXEpSSj9fKUw6Q19QWkZAX1tSQUVPXzVOKlNfT1pSQl9ULFcsX1w+CitNJjFXXzFUKShfUTwzJT9cPyZRV18pMiRDX1QoXjAvXF8tUzdfSFlKOl9RTDYmL1w3JTFDXyUhJDdfUTwzCitNJy9cLSMhR18lIShFX1FUOSxfXDwmIytfJlFAT19RNDIqL1w/JkMzXylCLFBfUzBSKz9cVCxCT180JTUzCitNX19fVlxPXyFNKy9fJ1FYRF9RKDQlX1w9JjE/XykhXD9fUiQ9J19cNSRRO18tIkRIX1QsWC1fXD8mQVNfCitNJkFIPV9UMSYxL1xQLiMzX1BbRlVfXyc8Vk9fR1ZdP19YPTcxX11XMFJfXzlTPDtfR0k+MV9SLEAnX1w2CitNJiFXXyVRTD1fUVxCKF9cPScyI18oIiBDX1IoQik/XEUqMk9fKTJMTV9SOEwrT1xKLCMrXysjIFJfUyhYCitNLk9cRSxDL18pQyRSX1JITys/XD8qQydfKTMgSV9SNEcrT1xEL1c3XyozJStfUjBCKS9cRyoiR18xVD0kCitNX1UxNTNfXTI1NF9fKUJAS19QXEQwL1w4MFZfXyFDKVxfUjknQ19cQy9GV19OKj5HX1MgTy0/XEspQidfCitNLFMkTl9aIjtFP1xUKyJDX1pdUz1fXl85Vk9cTCoyQ19VTFctX11PLFMvXVs8Vl9fVVw7Jl9bIktKX10qCitNMkRXX1ZdLzFfW0pPS09fKk9bW19RO0JXX1w6XE4vXylPXENfKyJASl9cIlxOT11aPScrX0w6UkdfU1RYCitNLE9eKkA3S18zRFElX1Y1PjYvXixBR1tfMSQkVl9aJkBGP1xOK1JDX0pKRkJfUlBLKS9dPjglP18wJDBbCitNX1QtJy9PXSExM1NfNiVdM19aNj5ET18pS1o7X1E6Sj9fXEpSSj9fKkxKR19RWyJEX1xKU0lfXFsrUk9fCitNL0NIXF9RXD0oL1xNKkJHXzIkRSNfVEkrMT9dMjRUV180RS0tX1RRKDFPXSsxRDtfJjE0N19RNDUmL1w3CitNJEEzXyVAWDhfUTgwJ09cNyUxW18lQSxKX1E0MSpfXDclMl9fJkFMVF9SJDovL1w+JiJTXycxUDtfUjRECitNKF9eKEBYP19fXytSX1xWXE1PXEAnUjtfJUFMQV9ULSEvT1xFKSIvXyVBMDZfUUg4Jl9eLD9XW19GSFItCitNX1IkNyZPXEAmUidfLkNcX19TNFctP15fTks3X1wuJzxfXlc/Vy9fQ1U9K19WTEsnX14nMVNPXlJKWjdfCitNL1QkX19SXFouX1xOLkNHXyszRFhfUlRZLi9cTi5DR18rU0xaX1JUWC4/XE4uM0tfLSNdIF9TKF0vT1xOCitNLlNTXytTUF1fUjhTLS9cQCsyW18nMlhEX1IkRS0vXDsqQkdfLCNAWl9SNF09L1xILFRTXydSIEFfUkRGCitNKT9cSSoyO18yRFUnX1NIXi1PXFYtU0NfJVIkUF9RXFs5X1wwLygjXydEIV9fUkhdOV9eP0ZaL18wU0BXCitNX1I8RSovXEspQiNfR1lWNl9TLE4qP19LVy1XX1tdQzlfUkxGKk9fL1FcT19ZLFsvX1tST0pPXylPW09fCitNTVsmT19UWSsyT187VExTX00qUkhfXEcgUC9fNlFcK19ULCJdX1xXJVI/XEgqIk9fUjwmX19dLyVQT18hCitNTztPXy4zVFVfWiY4RD9cSyxCO19NKlJCX1QsXSxfXi5DOCtfSClaN19VVTs1L15MSVonXzBDTFVfVV0/CitNNU9dKTMkI184Ji03X1U1ODMvXSkzJCNfUFs+Tl9dMllMT15MRUhbX09aOj9fXicoUF9fOlA8I19UW1ZfCitNX1FMNCUvXD8nIU9fN1VVOl9SOEQnX1xbL1NXXysiXFBfU0xeL19cVy5DT18uM1RbX1VZQDdPXT84JidfCitNMlRNLl9RMDAmL1w0I1FPXyNRMDBfUUQ3Kk9cNiQyV18lUSxNX1E0NCw/XDMkQz9fLjM1K19TLFIuP10kCitNMUQzXzBUNSNfXScoUi9fX1xfP19TS1JZX1FcPCo/XDwnUk9fMyRFKF9RUDsmT1w5JVFHXyYxPDpfUVA2CitNJ09cQCZCK18nITw9X1FANiY/XSczJFNfLzNcXV9bXlpNP19MVz1DX1wtVzdfXSJdTV9fSFVdJ19YLScrCitNX1pOSkhfXFkwJCNfK1NMX19SQFAsT1xMLTM3XyozNFRfUkBULF9cRyxTK18pIlxQX1IsTitfXEMrQl9fCitNKEJUTl9SOFEsT1xLLUM/XypDNFZfUjxSLF9cTC1CV18tNDU5X1EgPilfXD8oMjNfKzRBXl9SSFQzX1xDCitNKFI7XysiQEpfUlxNKU9dODVUU184Vik3X1VRODVPXC0lQj9fIyI5MV9RJFo/L1w+MSgrXylTRT9fWypNCitNTF9cSylCQ18nQVRDX1IwPyY/XjxHKS9fLDJcSF9eW0JXP19RVl1TXy4zPFpfXEskUi9fP1MsU19OOlJHCitNX1wmV0xfXyBOS0NfNERdLl9dSzFSX15cTSsjX05LLlNfXFMjTz9fNlIsN19TTDsqX1I0RSovXyxRLCtfCitNVkxTKV9VTTM0P1xZLiMnX1A7VlVfUihHJl9eID83K18uM1BQX1s+XEwvXT02JStfSTlaOF9ZQi9CP11ZCitNOzZDXzEkMFtfVSk1Mj9dKjM0J18xNEBcX1YlQTVPXyZOKl9fW10vLF9eIydQL19FUktfX1wtPzBfXSsjCitNUF9cQCVBX18lMSA2X1FANCVPXEUoQidfK1JUSl9RODMkT1xVLDMvXzBTXSFfUUg2Ji9cRigyJ182JS0zCitNX1c1UDxPXitBOEdfJEFUOF9RQDQuX1xMJ1VLXychSSFfUUA5LE9cMyQiV18mMThaX1I8RTFPXFIsJCNfCitNKUI0S19SPEcqT1xIKjJLX1YsSytfX1tPXC9fJk0rI18vQ1ElX1IwSCwvXDglQS9fJiE8Nl9RNDMlP1w1CitNJFE7X0hJVj9fWl5HSk9cOSUhQ18lQTg5X1I0SipPXFUtUzdfTTsiS19dUy1SL19AVD0nX0NYOiZfVklFCitNOT9dPTclT18yNF0rX1JMVi1fXE4uQ19fK0M4Wl9SSFMsX1xKLUM3XylDKFFfUihOKz9cRiwzK18oQlROCitNX1IoTStPXEMrQl9fJUFYQF9RTEMpP1w9KTI/XygiQEpfUlxRKi9cRDAlT18jITxPX1IkPSdfXEAuVydfCitNKSJVK19RSDknX1xDJ0IrXydRTDlfU0RXLC9dKjIkI18zJD0nX1E0OStPXDwrNSdfJzM9Q19SRSA6T1w/CitNKjQzXzZFMThfUkBFKl9cPygiP18nQUg8X1IwQikvXEgpQi9fWU1TOF9eXzxXL10jMFQ7XzpWOUpfXUMpCitNUj9eX0xKV19NWlZJX1wyXk8vXTEzRFdfVFxLJF9bVlNLX15ISTozX1JMNl9fWyZFSD9fJE8sI18rMlRQCitNX1s+T0s/Xz5ULFdfLFJAR19aJjxFT100NSRPXzpGST9fXCJWSy9cVi5SX19HOio2X1QkXy4vXltOSy9fCitNMDNcWF9aWklIX100NSRPXy5TWFJfVTk5Mz9dMjU0R18zRFUiX10/J09PX1RVPF9fWkxfKF9dOl9OT15JCitNRVkvXzIjXF9fUSwwJU9cNSRBQ18mMTA4X1E8MyU/XFArMlNfJUEsMl9RVDkmX1xHKFI3XyYhMDZfUVA5CitNJi9cTSoiQ18zREUrX1lONUY/XC8iU19fSVorLF9bOlNPX15OSF1DXyUhJFxfUiA+L19cSSlEL184Ri1OCitNX1NIWy8vXEYpQkdfKSIsSl9SUEwrX18yUkxDX19fK01fWDFSOi9cNiUhP18lITg7X1VZPTVPXSkxVDNfCitNJyFAOl9RUDcmX1xCJTEzXycxJCxfUUw2JU9cNCUhP18kUUA4X1JETSpfXktJSjtfV10jK19bKktKX1xQCitNLSM7XypDKFRfUkxYLj9cSi1DL18rU1BdX1JIVi5fXEssUz9fKjMoUl9SRFUtL1xELCJfXykjIE9fUkhSCitNLS9cSixDM18oIkBKX1FAQykvXDooQjNfKCI4SF9SQE4sL1xGKyJbXysiUENfUVBbNz9cJyRSW18nMTQ4CitNX1FUVzwvXEcsVStfKVI0SF9RWDknX1xEJ1IvXydRUDtfUjBDKE9cSClCR18oUVBDX1FUOykvXEMoUlNfCitNKFIgP19RUD0qL1xIKFI/XylCNEtfUlBILC9cUysjL18rQkRNX1M8VS4vXzVTLFNfWi07M19YWi9EL145CitNRSlDX1UsNyVfXD5YTF9eTkkqI19RS1pcX1VZOTY/XyxQS1tfRChKKF9UPSgyP18nUTwjXyxCSEhfXFMkCitNUi9cRCkiP19OKyJMX11DKlFfXy5QPCNfQSdVV19SKEQmX18qUUtbXzIjUFVfWlJMSF9eTEsqL18sIlxICitNX1pOTEk/XFcuUy9fRCkqKV9TXF8tL10kMTNDXzw3JURfVjlHNk9eMUJYL19WLDZfX11bIk9fXklEOFtfCitNKVFAOF9SRD0oL1wyIzBfXyQwXCxfUkxLJy9cUi0xX18sMzA9X1JcUyc/XE4sIldfLEMsVF9TJFIsX1xRCitNLEMvXypCREhfUTQzJT9cOCVBQ18zRFEvX1E0OC5fXkFHKztfOUYlPF9aPkJOT1w8JlNfXyhSKF9fVU07CitNO09cUy4jK18uM1RVX1IgPyk/XEsqIzNfOTYxSl9cQyJQL19UWk8zXzVUOSZfUjRBKj9cOycyN18nMVA7CitNX1FENyZPXDsmIVtfJlE8QF9RUDgoP1w7JVFfXyYxODxfUUQ3Jk9cQCdCJ18mUUg5X1FIOCU/XFIqIk9fCitNVkxbKl9URTI0T1xVLzQnXy0zVF9fUyRcLz9cTy1TR18qQyhUX1I8Tyw/XD8pUkdfJlIsRV9RREEoX1w5CitNKDIvXygiMEZfUVA+KD9cNycxX18mMiRDX1FIRSlPXD4qMktfKDJQTV9SJEwrP1xOLTJHXy1URUVfUSQ5CitNKj9cOiYxQ18oQlEuX1JMVDE/XEAoQiNfJ0FIQ19RXEEpT1xCKTI7XyhSOEdfUkBNKz9cUC0zL18sQzRWCitNX1MwUy4/XFwuJCdfL0M4WV9VQTMzT14mP0dLX00qQktfXCZcT09eRkZZM18xVDEqX14zPVc/X1JWXTtfCitNPjcxVF9dSzJVP185UixDX1QrTllfWClaPU9fJE4rR18pQiRDX1wrIVAvXTAzRSdfLSM4W19bXl1PX10/CitNNzVfX08rJlhfUkxHKj9eW0xKU19XTFsrX1YlOTVfXFYtMltfUjw2XV9WPUY3X1xfLkMzX1BbSlRfU0RXCitNLC9eTkhJV187Jjk+X1NIWitfXVQ9Jj9fOjY9OF9YIVs6P11XO1VPXz0nIUFfUlhJKS9cQCZRT18kUFgyCitNX1EkMCVPXDMlITdfJiE0O19RQDIlT1w3JEBTXy1TJEFfU0xXKD9cVC0iJ18tQzBMX1E8NiU/XEQoQjNfCitNKSIoRF9SJD8oP1w3JTFDXyRBIDNfUSwzJU9cPygyM18hQEhQX1M8TjhfXlRIXUdfMTNBS19VJSw5L1w8CitNJjI3Xy9EJSZfUUxAJ09cTSwyX19HOVZGX1dNWUI/XEoqUytfUSteWl9fI0ZbX10iK0I7Xy1STERfUzBLCitNKT9cXCsyP18xMzhQX1NASygvXSQuIkdfM0NUUF9VNSItT105MiNDXzpVTShfVzk8M09eIzlUU19AVlkxCitNX1g1XD0/X0FTXFNfUkw7KF9TPFkvT1xDKjJPXyhSTE1fUlBSLS9cRysyX18pMkxNX1IoSCpPXDooIitfCitNKFJES19QXDUlX1xDKTJDXyNRJDRfUUxBKF9cOSgyL18mUixFX1FcRyo/XEIqQlNfKTJUT19SRF0rT11ICitNO1dPXylSLFNfUVRGKz9cQCo0J18pMy0qX1E4QSxPXF0uI1tfMFNcXV9XIUw6T15GR0lTX1JbWl1fXTcqCitNUj9fRlVdJ19bPT8vX15bM1RPX01WLTtfWj07LF9dRylPX1xHKSIvXyoiTFBfWiI3RC9dODRVN19ZLU87CitNX15TNFQ/XVo9NzdfVDxHLF9dQydRX185UUw7XyhSID9fW15aTy9dLjNFJ19AWCVcX1lKNkUvXjtGOU9fCitNUlw/JV9XOVc8P18hTitDXypCOEhfW0pRSl9fQFQsV19MKkJGX1wnIE4/XUg5JVNfLyM8UV9aSkhIP10zCitNM0RDXy1DME1fXCJbTT9cUitCO19QO1pTX1dJVzpfXVs+NktfP1dFSV9XUVY5T1xcLkMvXy0jRFVfUFw1CitNJD9cQCkiK18mUVA9X1IoQChPXEgpQkNfKVI4RV9SQEYoP1xXLTMjXycxSDVfUjBAJ09dKjFUO18kQSAzCitNX1EoMCRfXDclMUNfJEEgM19RODQlX1w1JFE7XyQxJDRfUUA6Jz9cXTBDW18oUjxWX1VRPjxfXj1EOFNfCitNOyYtPV9USSUxP14xRSk3XyxTUFxfVDkrMj9eMUQ5S18nQVBMX1JASSwvXjBDWENfX15fQl9bUjI6T15ZCitNQ1YnX0s4RTxfWlojNT9eV0JVX19NKEU5X1syKzVfXldCVUdfTyhZO19bPio1L15XQlUvX084RTdfWkYgCitNNU9eMT41W19WLEpbX14zMVJfXEwrMltfJFE0Ol9RKDYmL1w2JkFTXyRRNDhfUkBKKz9cMCRBN18pUkRMCitNX1FEOydPXEYqIk9fJSE4OV9SNEcqT1wxJFE7XyZSJENfUUhCKS9cPykyP18oMjxJX1IsSSpfXEkrUydfCitNKyNMWl9SIEIqP1xAK0Q/Xy5ERUxfUkRZOT9dMzdYM19TTEM2X11fLVI/X0lULE9fXC0zMV9fNzlVT19VCitNVj07X1xNOzlfXzM2VS9fS1UsX19YXU8/X1hWL0dPXy9RXE9fM0NQWF9TKFEtX1w3KEJHX0dJQi5fVzVLCitNOV9fRVY9U19cLUM1X1dVWD4vXypQTDdfVjxDKF9dWypRT14qQTdfX1NcPyNfVz1VPE9fKlFLW18/Rz1RCitNX1haKkIvXyhPW0NfO1ZdRl9bXldMX1xDKCFfX05bJk1fXVsuUl9dXz1XN18zVFknX1NIVitPXyFOSzNfCitNPzdNVF9TJFAqP15TS0pDXzM0USVfV0FWO09eIT42X189VylGX1dZWjpfXVs9JjtfOyY5PF9RXD0nX10wCitNMyRLXzRUTSdfUiQ7Jj9cQCZRT18rQkRNX1NQXC4/XTA0VFdfLSM8WF9RXEMoP1w7JzIrXyRAWDZfUVA4CitNJk9cOyYxU18mMTg8X1FINyc/XDYkUUdfJiE4OV9RQDYmP1w2JUFHXyYhSD1fVSEkNj9dJS9EQ184JVk5CitNX1tGR0w/XE4oUkNfR0lOOl9ZXkBIP1xDKUI/XyoiUEpfWEYpRE9cRykzN18pUkBPX1MwWC1PX19cLi9fCitNUylVTV9cSjo5X18rRyY3X1BZMTpfXDo0Nl9fIkQlP19QOF04X1wiMzVfXyBDVVNfUDhRNl9bWjA0X15JCitNPzRPXzFCXDhfViVDOD9fLFE8N19XPSctX1FYRylfXDAlMUtfJzFcRF9RUEAoT1w4JkFXXylSRExfUTA4CitNJk9cRypSV18mMVQ/X1JESytPXDUlUUtfKiJIT19RKDQmP1w9KCI3XydCKERfUixIKi9cTCwzJ18sQ0BaCitNX1JMUC0/XF0wVE9fSDoqTV9SQF02T109OUhfX1Y8Uz9fXyM5Vk9fVVU8T19cLUc6X18jOlYvX1FWPTtfCitNW01TOF9eX0BWX19NWD1DX1hdQzdfVVVFQT9cXjQ5P18rNFFcX1tXI1RfXTAxJD9fM0RRNV9RVEgrX14/CitNRjhfXz9HNU9fXjc5Vy9fTFRdK180RF0uX1QoXS9fXzhSPEdfWU0nLF9ZSi9BL18rUDs/XypCQEFfW15ZCitNS19eLkE3W189VylMX1w6Xk0vXT43RSdfQCdJUl9SKEAmX15RSkozX1gsWytfWDFZPi9eSEhZV19NOyZJCitNX1MoUCovXFYtMltfTztSVV9aMj9GT1xDKSFXX0Y5Ni1fVyVFNy9dVTtGK186Vjk6X1dFVDovXEAnMUNfCitNJzFcQl9RRDclL1xeLzM7XywjLE1fVFUzM19dRzk2P184Rik/X1Q5KzE/XEkrQltfKEJESV9SSE0sT1w4CitNJVFbXyZRRDtfWUoyRT9eQEYpT19IWU4+X1paRko/XlNKSktfTlsqUl9bUlVNP18kT1tfX1EsWl1fVU1ACitNNk9dODY2I19KWy5PX1JMTSwvXjZESUtfLDJQUF9TOFItL11XPTc/X0I4RjRfUjBCLE9cPSdCN18rMyxVCitNX19fVFtPXzRGVidfUylZUV9bWiUwX18iRFVXX09ZITZfXDI1Nl9fIEQ1P19PWSU3X1teLDVfXyFENStfCitNREZRJV9SVDsjP108NFUvXzgmITdfXSsnUC9fPVNMX18qUyRTX1JUUi4vXF4wJDdfKTJES19SOEgqX1xNCitNLFM3XyhCSExfUjBMK09cNichW18rIyBSX1EwNiY/XEkqUyNfJSEsOV9TMFMuP1xBJ1IrXyYhWEBfUixLCitNKz9cRitDK18qUyBWX1NAVC1PXzRSPFtfWCxfN19eRzdVL19NVj0nX1w9SzVfXyc5VU9fU1ZNR19eLVM5CitNX18vN1RfX0FSPDtfXi4vP19aLjlFP1xWLFQjXyk1Mi5fUVhTQD9cSzRYS19QPCstX1U9MDVfXEcmIi9fCitNPSdBWl9ZXjdDP14nQEdXX1c9LzZfXVspU09cOScxX19GOT45X1xbIFA/XzhRXD9fOUVFNF9cXylQP1xICitNKVI7XzE0KF1fWClbPT9cXi8jN182VUkzX1QkXC1fXDMkMFNfIyBIJ19aSkJIL18uUFwrX1ErUlhfVSEuCitNMV9dIDEjT182RTEsX1s6Skk/XSowU1dfKyJURl9bPlBJL14iPiZLX0U4TiBfWTIpP09dQTY0X18rUlRKCitNX1NAWzAvXUE4VjtfOEY1P19VLTQzP1xSLDJLXzMkSSNfUlhMKj9cUi0jK18oUkhKX1FEPSdfXDsnMiNfCitNJVFEPF9RXEEpL1xNK1MrX0VYVilfWiY0Q19eQ0VJJ19GWFopX1k2LEFPXjFCKCtfQygtXV9YUiM/P14kCitNPzc/XypCOEhfViVBOk9eVkxLT18sQlhWX1haK0Q/XDYlIT9fJCBYMF9YNV9AX11aPTgnXypCRFpfUkRJCitNLE9dLDQ1O19fXydLX1w2LDRPXyBERjdfU1k5NF9cKjM3P18pRjYrX1IpQUFfXDY1N09fKkVVO19SKUVJCitNX1YhJSgvXEYmQTdfKEFQQF9SJD8qL10vM1RTX1NcLlxfXj82VU9cTyxTN18lUURAX1FUPChPXEMpUkdfCitNJlFUQF9SLEkqX1xQLiNLXyoiXE9fUUA9Jz9cSytCX18mIUQ6X1NMXC1PXSYyNC9fKjMgUF9RREMpX1w8CitNKFJfXyhSOFFfUzhTLj9fMVIsQ19aLTsyX15XOlUvX1ZXXUtfXi1fOl9fKzxVL19TVy0/X11dTzhfXzs3CitNVV9fTFUtJ19RSyZPX1I0OScvXE8qMydfOUZBT19RIDQqP1xBNVknXykjTihfUi0sQi9eXU88U183VUE/CitNX1ZBNzlfXD8oQj9fSElKMF9ZIitBT189VF07X1Y8Ry1fU0khMD9fJVBMJ19XTE8rX1xGXU9PXFotUztfCitNJyFUPl9RWDsoP1xHKEI7XykiIEJfUVA6Jy9cOSZBT18oIVRDX1FAOCZfXDclMUNfPDY9Sl9YTiNBT14+CitNRjlHXz0nIU5fWk5ISF9fLk8rQ18rQkBAX1JcUik/XydPOltfR1hdXF9ZTi4/P14xQignXzc1UTtfVFkxCitNNU9cWTA0T18tM10qX1NEXjEvXEksMltfK1M8U19TWSMvX1xcL0NPXyhSKEFfUlhTLF9cRytTJ18qMlhTCitNX1FUQShfXEEpUkdfJ1I8SV9STFguP11COSY/XzxHIVNfVlVLO09dSDlGR184JjFGX1VBPjgvXTQ2RVNfCitNNCU5OF9VJTI0X10vM0U3XzlGOVVfWl5JTV9dWD0nV19CKDYrX1g6JEFfXklJWkdfQkgyKF9XXVpBT1xFCitNKSM3Xy4jQSFfVlFOPD9fX10uW19VWVlEX1xaQDxfXzZHNU9fUzlVSl9cSjk5L18sRlY7X1M5UUdfWzovCitNN09dQC9TX18nMSBDX1FcQSdfXTY0JENfOkYxSF9TXSAuP18zUVwjX1ldLzVfU0BaLz9cPSciL18mMTg8CitNX1JUUSxfXFYuI09fKVJUT19SRFEsX1xNLEMrXyUhQDZfUzRXLT9dJTEkL18rQlxQX1EwNCVfXDsnMiNfCitNKkJQT19VLS41L18vUSxHX1pdQzhfXzM9Vi9fV1ctN19dXVcyX187PFRfX1lXPUtfXC0/Ml9eXzhUX19KCitNVT0nX0lJMjFfV0VRPS9cUytDM18rMlxXX1ZZVD9PXU07VytfJ0IgT19RQSxBP1xBLyhHXykkUipfW1pfCitNUk9dXD1XP18oUSxBX1EgMyYvXjpESENfQVgpXV9dIyZSP18/UjxPX0ZZVjtfXEclUF9fNFEsJ19WPEslCitNX1NMUy1PXDUlUVtfJiFAO19SNEMpT1w+J0InXygyLEZfUkRNK19cSCpDJ18zRSU2X1E0NiVfXjFCOD9fCitNVFwjIF9dIl1PP15ERikzXzMkLF1fVC0kLz9dMzVUW19CSDFcX1lSK0E/XUk4VidfNkVJPV9TUSQzT1xXCitNMSU3Xy1UPTtfUyUiNj9cWjI1U18sU1EjX1JIUCxPXEEpUkdfLUNIXF9RODgmX1xHKVJLXyxDQFpfUyxfCitNMF9cSyxDQ18rQ0heX1JQVy4vXDkoMi9fKiJQTl9dSzJVP187VE0rX1g9QzhfXVs1VT9fSFY9S19ZXTc3CitNX15DNlYvX0dVPT9fXS4vQ19dMylTT11YPFdfX0wqVllfV0lWP09eID84L19MWyZUX1pWS0s/XiI/KCNfCitNQSdeK19SPEYtX1xFKTJbXzsmSUxfX19SWj9fP0omW19RKUVNX11WRjlPXydGVkdfU0lJSF9cLjA2X15fCitNREZHXzAhXFdfUyRCMD9cLSUhM18nMUw9X1lGKUAvXi1AN1NfM0RNIF9dOylRL19RVl1TXy0jPFhfUiA/CitNKT9cOiVRV18rIyBSX1EsNSZPXEEpMj9fJyIsQ19TIFUsP10kMjQvXyxDKE9fUUg4JT9cSClSW18mUTw/CitNX1ZZRTsvXz1TTStfXS1bPF9fRz9XL19YVy1DX19eIzxfX0M8Vi9fWFdNN19dXV82X18nOFY/X1FVXTNfCitNO0VJNl9TJEgoT1xNKVFfXysiQEpfUlREJ09cSigxS18tMyBLX1JAQiZPXDwnMkNfJzRSIl9SQSZEL1xGCitNMzhDX088KyhfWTo0Qz9cRCYyI18mIUg/X1heKT9fXidBJ19fUlwrIl9dVyRRP15cTTs3X1IsKyBfXSckCitNT19fOVErX182NFErX1JATCtPXEIpUj9fJ1IoQ19RPDomX1w/KSIzXytTOFZfUSw4Jz9cMyYxT18lMUQ3CitNX1M8UisvXy5QO1NfUDtGVV9TRFssT11bQSc/X0NYVihfUlhAJz9cPCUhK18jMVA8X1JdIDNPXFUxNTdfCitNLVRNQV9TKSc4X1xOMFVfXyw0OT5fUyUiNj9cVC8kO18lQUA7X1EwNic/XFotU1dfJjE4PF9RPDknT1xPCitNLVNPXycyRE1fUiRKLD9cQywzM18oUyBRX1MgUi0/XEspMkdfWV0vL19fKztVT19PVk03X11eKz1fXz9CCitNV09fWlk+J19dPiM7X18/Qlc/X11YTU9fU1tGWl9WQUI6T15JSlsjX0Q4VjVfV1lbQD9eWE07T19JWjZICitNX1ZVRzpfXVo9WC9fKFIwVV9SQEksL1xJKVJHX19fN0tfXUZFOy9fLUlHU19WSjFBX1xKQTgvXyVFNVtfCitNTzkxQ19RXC0gL1xAJiNLXywiSSZfUkhJLC9cXC8jR18zVEklX1NEVCtPXF0tMydfVSwzIV9eVzlVP1xWCitNLlNHXyhSQE1fUjBEKV9cTSxDK18lQUg4X1MkUyw/XF8vQ1dfKzMoUl9SKEYqL1xHKjJTXycxQD5fVlFGCitNOS9fJE1bK19bTTszX18nN1UvX1ZXPUNfXF1bOV9fJz5WL19YV11LX1tNTzNfX0c8Vi9fQlRdL180REkuCitNX1FUOykvXEwtVENfJyIoTF9WTUI2X1xAKyRHXyoyMERfUjxJKU9cUy81K18pUjxUX1FATTFPXF06KVNfCitNLFVCOV9SVStAX18kUU03X0dJWjtfUVQ1Ji9cOSVRS19ASDVZX1g+JUBPXylPW09fVUxDJV9bUk9NL11KCitNOCYvX1Q8NyFfXFJdTi9dTTlWN18pQkBLX1IoRys/XFYuM1tfKUJITF9USS40L1xbL1QnXzFUUSxfU0xeCitNL19cQCgyK18nUVQ/X107KlM/XyZPK19fJkE4OF9RWDonL1xRLUNPXypCMEhfUTg+KE9cTi9UV18sM104CitNX1NFIzM/XF00JitfLCQxQF9SOFMxT1wxJVFfXy5EPThfUlhZMS9cPSZBR18qUyBcX1JQTCtfXUE4NjNfCitNKyMwXl9TPSExP1xAKyJPXysjNFtfUjBRLU9cSy1TT18pQlBOX1JUSys/X0dWLS9fW11LNV9fKz1WP19VCitNV11XX14uJ0JfXztAV09fVlg9V19eLic8X19fR1gvX0ZVPTdfPEclWF9aVk9NL145RSlLXzw2UVJfWyJLCitNTD9eSEhaR19AR1VfX1VJPDkvXD8pQzNfLCMkWF9YTixDP19dXC5PX1g6TVFfXFpDPF9fPUhVW19WSj1LCitNX1pWJTpfXEgmUTtfJiEsN19RICklP1w4JFFHXy1DLE5fU0RUK19cUSoyP18mUTw1X1MgSylPXytPO0tfCitNWz1POF9TRF4vT1w8KDI/XyghXEVfUyRXK19dJzJUK18sUzBOX1FQOSYvXEkpMj9fKVIgQF9YVV8/L184CitNUFtbX1tNQy9fXz89VS9fW1ddP19cXVc0X19DPlU/X1RXTTdfXE4rOF9fN0JWL19BU1xPX1YsNytfU1EkCitNNS9cTTA1N18uVDU6X1I9ITsvXDcoIltfR1kuJF9SIFE1P107NzYzXyVRWERfUUxTNk9cQywkR18kQlEtCitNX1I9NkM/XEw2OUdfLDRWJl9bWl5TP15OTCpXXzAjQFtfUUQ0Ji9eIUEnQ19AJ1lbX1w6XE4vXzVRTCdfCitNTkpaUV9YJVk/P18mTztXX1I7Vl5fVDEgME9cLyUxP18mIUhBX1IsRyo/XDMlUUdfJSFAOl9RQDwnT1wxCitNJSE3XydBXEBfUyRPLD9cWS0zP18tQyRXX1NAWTAvXFcuNCNfJyFMQl9SOE8rX1xCKDI/XycySFdfUlReCitNNU9cUS9FJ18pMkhPX1FYSC1fXSUzVjNfRUk2O19aWklJL11XP0hLXywjSShfWypNSz9cWS9UR18wNCkjCitNX10nLVNfXFAtI1NfLTNVIV9RTEQpL1xMLFNHXygiVFJfUyRdMD9cOCdCI18lMTg3X11fMFJfX1JXPUNfCitNXT1POF9fRzxWX19XVl1XX11NVz5fXyM5Vk9fT1ZNQ19bXUc3X1lKLkQ/XiRBSFdfSipOUF9aIjtHX11GCitNODY3X0sqPktfWjpBST9dUztHI18kMSg9X1IgRi1PXE4rQz9fSDlWP19fU1BaX189SVZXX1JKIVJfXDo3CitNNz9eTkQnS18uMihTX1FYNy0/XEspJCtfKiIkU19RUDcnP1w/JkFLXyghRDlfUUgzJk9cPSYhU18qMjRDCitNX1xbIk8/X1NXLT9fL1NUWl9TRFcuP11BNkVLXy1DQFVfUVA8Jj9cRykyK18rUkhKX1lCLEE/XkZFSFdfCitNVFtWVF9eXzNSX19FU1w7X1wtQy9fXlcxUj9fTFVMV19cTTszX14rKVIvXlJIKVdfTio6Q19UOFotT182CitNU01DXy0kPTlfUzEuNy9cWy9ER18uJToiX1FcPyhPXlFGR1dfKTNNQl9ULSUzL1xaL1NfXycjJTRfUThACitNLS9cQCxEW18lU0FNX1I9LEM/XEwwJ0tfTltHKV9YKipBT1xEKCIrXyYhLDdfVz1aO09dVj0nJ19NOk5HCitNX10/J09PXl5MOyNfOCVNP19VKS0zX15QSkpbX0IoSi9fUiRGKl9cPCdSM18mMVQ/X1JUUSxfXFItQ0NfCitNKVJMTV9SNEYpX1w+JyFbXydRTD1fWUY0RU9cWC1TV18xRE0xX1JcVC5PXDckUU9fKCIwQl9SJD4pL1xBCitNK0NPXywkITBfU0RbMF9eSUhKK19IKipRX1RVNzlPXVs+V1tfWU4jPl9ZKjlJX1xWL1RXX1BbQldfU0BdCitNMF9cWS9DU19TLEMmX1M8WTA/XFovVDNfJkIkQV9TIFUuX1wzJkIjXydCLEhfUlBKKz9cSSgyM19ZXS8vCitNX15XOFRfX0tWPTdfXE4zQV9fS0RXL19WVz07X1w9UzdfXVssUi9fSVVdR18yNC0rX1dSJUMvXjhGWiNfCitNSTouRV9USSYyL15ESCorX0hJWkBfV0VTPV9cRylTM18oUkBaX1JQTC1fXk1JOkNfX18rSV9dRkM6T18gCitNRVZXXz81UFhfUVQ7JU9cMSNBT18lISQ+X1FEMSk/XFQrRCtfJCBUOV9RODQlX1w4JFFHXyUgVDVfUSgvCitNJT9cSyoiP19RO05XX18jNlM/XktISU9fOlY1Q19SLDklP1xFKCIzXyYxMDpfUSwuJC9cPCVRP18kQFQtCitNX1IoPSdfXD8mIV9fKFFQRF9SSD8nT1xUKSInXy4iLEFfUlg8Jj9cRyYxS18oQVQ/X1FUQigvXVU+Nz9fCitNMFQ1I19dOzFUX106OldPXyZCOEpfUTg5KS9cRjNIO18mQVxLX1cpQjRPXD0tJVtfPFctXF9VOTUzT1xCCitNLCQ/XzcmKUxfUkRQMU9cKydUU18oQ1FbX1JAWj0vXlhNPD9fNzYtP19TPFguP1w0JEE3Xz0nOU1fVSkwCitNMz9dRzdVT19UPCpcX1tKT0tPXSoyJEtfQig2JF9YQiNBX10qMyUnXysjJFZfUlRQLT9cRSoyT18qMkxOCitNX1IkQylPXDMlQT9fJlFUO19RXD0nX1w/JlFXX0JYMiRfUyxTLU9cUS0jR18qUlxRX1FAMyVfXDQkQF9fCitNKCFMP19RUEYsL1xAKyMvX087PltfXkM7Vk9dXD84W18vJFE2X1clWD9PXz9WTVtfLVNVLV9TOF0yX18nCitNTls/XzA0OSxfU0RfLl9fOFRNI18sQyxaX1MoVS5PXEsrUydfKlJUVF9SSEosX1w7JzIrX08rMlhfWDFYCitNPl9fQ1NMR19EN1VVX1NYVStfXSYxI19fXE4nNF9ZXic+L15MRkhTX0BXPU5fXV8wVS9dITAkP183NjlNCitNX1QhIzIvXjtGOU9fJjE0N19ZSjZGL15HSFo3XzwmTU9fUihCLD9cRSojS18rUlxYX1paRkpPX19bTTtfCitNUVlNU19TWD4hL1w8JTE3XyYxMDhfUTQwJS9cNyRBO18lQSQ1X1EsMSUvXDYlIT9fJTEsNl9RNDMlT1w0CitNJEEzXyUhLDlfUUQ0Ji9eXkxKW19aLTctX1ZJPTYvXEUnIVNfMkQgXF9USSUxP1w5JTE/XyVBKDRfUUg2CitNJi9dMTJUX18tMlxTX1I4QCkvXFksUz9fJUEkNV9RPDIlT1w5JSFDXyZBNDlfUUw5Jy9cNSYxT18uRDEhCitNX1UlNjQvXFItVC9fWy1PLl9TNSM2L1xHKFInXyQhOEZfUzE6Qz9cOyZSS180VCBYX1FUSTFPXDknIltfCitNJkFIPV9RND0sP1w7KTMjXycyIFlfUSA8Lj9cQy1WM18oI1VXX1pWUVFPXjJDOF9fKzJcVF9RODkmT11QCitNPEZfXy0jNE9fVEEmL19fK05bQ19LWjZIX1JESyo/XSAuUzdfTlsuT19YRiRBL11dP0dfXyoyVE9fUUw/CitNKD9cPiZSJ18pUihEX1RBIy8/XDkmQTNfJDEkNF9SREcqT14mP0dTXytSVFBfUSw2Jl9cMCRRM18qQlhMCitNX1Y9Rjk/XFAsMytfJzIgRV9TRF4xL1xVLFM7XysyUEtfVCEjNT9cUTA0S19ASSIvX11XOVZfXFAtJEdfCitNLUQhL19bXldMX1xVLkQjXy8kJF9fXFcpUV9cTywzQ18tQzxeX1NYXjFfXEcqQzdfKTI0Ul9RREIqL14nCitNQEgzX006WlVfXVszUi9eJjw2N180VSknX1JUTCk/Xz9ULE9fQ0dFTV9aRjhCL11IOSVTX1RMKyZfU10hCitNMi9cVi5EK18wVCkoX1lCNkYvXEInQiNfRTkmM19ZPjNFP11KOiZPXykyNFBfUiRDLE9cVC0jP19LOkJOCitNX19fTVgvXEwnUFtfJ1FQQl9RVDooL1xBJ0FXXydBRD1fUUQ0Ji9cOSUhQ18lQTA3X1IgPig/XE8rMyNfCitNLVM0WF9TRFswL1xfMCQ/XzVFJTdfXDpZTS9fTlZdL19CR1FZX1Q0Vi5PXEklUUdfJUBcL19RLC8kP1w4CitNJSE7XzclQTpfVk1FOj9dPTVVT18yJCkmX1VNNTY/XTU0JTNfJTEgNF9RWDknP1wyIzEnX0M4PiVfWlZFCitNSF9eXU4rL19OKyJMX1o2REpfXyJMOjNfNEYpXF9SLEAnX1wzJjIvXzFFTitfUUQ7KF9dPjRUQ18kUUBRCitNX1FIPCpfXDIkQTdfJUFUS19SSFMuT1w1JVJTXyNBNElfUSA7Lz9cQzA3R19IWkZfX1hKIkFPXEkoMk9fCitNJTEsNl9WOUU5L1xCKEFfXyxTME5fWFolP19eQkcpS18lUTQ3X1JIRyhPXihAJ1NfQyg2JV9RXDonL1w5CitNJVFLXyVBMDZfUTA0JV9cOCUxM18sMjg/X1Y1PTY/XTg0VT9fLSMoVV9YQiA/T101NDRfX0AoKV9fWDooCitNQT9cVy8jQ18mIUxAX1YtQzlPXU46NkdfTCpSTl9bVlpOP11XPVZbXy5TWSNfU0EjMS9dXEIoN19XLUM6CitNX1NEXTRPXFEuVEtfT0s6Ul9TLFgvT1xeMFQnX1NcTylfUyhULl9dIjBUS18tUz0gX1JUUC5fXEUqIy9fCitNKFJUUV9bUlNMX15WSlsjX1gtLyZfWEFOOC9dMjIzT184RUEtX18nPFVfXi8+RltfRyhdXl9WRUM2X180CitNUSxDXy4jSSFfU0BcMS9cXi80L19EKFowX1IgPCdPXT42RVNfLSMgUl9WVUs7T1xGKUMnXygyLFJfUyxTCitNLU9eT0pLI19eLT9IX1FAOiYvXDYkQU9fJiBYN19RMDIlL1w1JCEzXyRQWDJfUUAzJV9cWS1TS18vU1UgCitNX1RJKDJfXSUwVDtfMCQpKV9ULSUzP10nMERDX1QrXllfXlc3U19eJD03O18oIUA8X1FQNyY/XDckUTdfCitNJiEwNl9SXEsrP10sMiRLXzZVNTlfVFEmMk9cNCNBK18oUVRBX1MkTCwvXSAuU19fJkE0OV9RMC8kX15aCitNS1pDX1E7JklfWiIpQS9eIDsmQ186Vi1GX1tCRkYvXFMxRjNfJiFEOl9RKDcnL1xDKUUjXyUxQD1fVVE4CitNMj9cOiYiT18nMVRIX1FIOCZPXDYmIiNfKFJQUl9RODYpP1w0JUFbXyYhUFFfUihaOl9eNEVaQ19JKU47CitNX1QsXjBPXDwlQUtfMDNRIF9RSDgmT1w7JzFLXzJEQSBfWiY+Rj9cOiVBQ18rIkxKX1QhIC8/XFIrUltfCitNJFBcMV9RSDUmP1w+JlFLXyoiUEpfVkVJOU9dQjRER19NWkpFX1wqWk9PXEUoIjNfOVVdPV9ZXjdEX19CCitNV01TXzw3LVFfVE0vND9cVi4jV183VUk1X1YpNjQ/XS8zNSNfNiUpNl9UVS0wT10rMkRHXyYxUD1fVzVeCitNP09fPVY9T18vJCE1X1JIVDBfXl9NWy9fMSRFL19TQF0uX18vUlxHXyoyTFJfU1ReMT9dIDAkR18qUlhZCitNX1I4TC0vXDkpIjdfUDs6VV9cKlJNT19DVSxbXz01VTRfVSEmLl9dOzQ0L19aXTMvX1ddTDgvXitARydfCitNOUYhOF9dMyJRT10hMFRLXy5DWSZfVDUkMk9dXj8nW18oUVxBX1FcOyc/XEInQiNfOjY9Sl9RQDgoX1w1CitNJVI7XzMkUS9fWypNTD9fWVYvP18lQSQ1X1IkMSU/XD0jUUNfJSEoNV9RNDAlL1w4JFE/XyVRKDhfUFgpCitNIz9cVSwjM18xRDEnX1UhLTRfXSYxVStfNUVFRF9UUSczP18mTTpfX1ldKy5fWFFfP09cOyYxT18lMUA5CitNX1E0MyU/XDglITtfJkE4OF9RODIlL1wxIlBfXyNAQCxfUiA6J09cOyUxR18lIFwzX1IgOydfXDQjUS9fCitNJ0FEPV9TXF4sX15dTSo7X1ArKklfW1JWS09fJ09bT19KSU4uX1RBOz4/XTM0JTtfJkFcP19STEYyT1w8CitNJ0InXzYlOSdfUVg4KU9cPycyO18mMTw6X1EwNCc/XEUrIytfJFE4Ql9QUC0lL1w6JkI/XyMhSSFfVDkmCitNND9fIE47L18pQkBGX1FYOSc/XDYkMTdfJUE4OV9RKDUlT1xFKUFfXzVFLS5fUiw/KD9cQShSJ18pIkRFCitNX1NdJDBPXD8oUidfNFUlM19WWUw6P14qQjhDXycxXD1fWE1YO09fKE0rI19VTD8rX1IsPSg/XTo1JStfCitNUFtWW19eKzpXP14hP0gzXyoiSFFfUiA7KD9dUTk2J18/Ry1MX1NIXDA/XDckQUNfNiU5Ll9TMFEsL1xaCitNLiNPXzs3JVNfXUc2VT9cWi9VJ18sM00pX1wqWk1PXSAxNE9fLjNYXF9cQyNQX1xHKlJXXy9EISNfVDknCitNM09cSCpTO18sQzheX1E8QihfXyNOOzdfUUsyVl9dPy5SL10yMFNXXzBDWFZfVSEoL09fTFUtJ188JiU0CitNX1c5Ujc/XUE2VS9fVTwvJ19UNSgzP1xZLzQ3Xy1DLFlfVl1NPC9cRSgyL18nQUg8X1IgPCdPXVU8VztfCitNQCdeLF9SUE0vT1xRLFNDX0wqTk9fXlc7Wj9cQiYiK18jUSA3X1EgMiVfXDolMT9fJjEwNl9RNDAkT1w5CitNJSE7XyghSDhfUyhOKy9dKjE0R18uUzxfX1RNKDUvXSkyNTtfLjM0Xl9bRkxKX11LNzVbXzJULF9fVl1KCitNOS9dPzZVR18lUSg2X1Q1IDEvXkNHSitfJjEwOF9SND8oX10pMFQ/X0EnWiJfVl1JOz9dRzg2N185ViVFCitNX1ghWj9PXD4mIVNfK1JIRF9aRj9FP14vQDdDXzpWLTlfVyVANk9eMkM4Q18wJS1FX1IkOSlfXDkmMVNfCitNKFIkVF9SIEEqL11GODVPXyVBKDpfUVw/Kk9cNiVCJ18nQVhJX1I8Si1PXE0sI1NfJSEwQV9RMDMoL1w3CitNJjJbXydSJElfWD4kQF9cNiYhV18mMUA+X1I8RSovXFArQydfJzFMPl9RWD0nL1xNKyJPXy0jLFJfVCkhCitNMC9cTisyU18qUlRKX1dBXT1fXkBHST9fQ0hCJl9eIzVWT1w7JyFXXzs1US9fXVcoUF9fTVU9S18sMkRNCitNX1QkXC8vXlVNWzdfWE1DO19YOiRBX1xSLkNbXycxTERfVklEOi9dSDk2I180NTkwX1ZFRzhPXSQwM1NfCitNOFVdPV9SNEIoP14pQjhTX1hdVztfU1EgM19cXDFFM19NWypNX1QlJjMvXF0wJCdfSClaQV9TIFotX10gCitNMUQrXzI0QS5fUzhZMS9cSSpDN18oQkhMX1wyWU4vXyRNO0dfVjxXKF9UVSQvP10hLlMvXzREPSBfXjMzCitNVF9dPDREQ185VjEzX1U9KjE/XzVQLDtfMSQ9LF9YJiRCP11WPDc/XzYlKTpfVTUwNS9cPSZBR18nMUA+CitNX1ZdSjtPXVE7N1dfKiJFIl9SUE4tT11JOyZXX1hNQ0FfUkBDKV9cPighW18sUyRMX1M8Uyw/XSEvM09fCitNM1RJJV9VNTAyT10mMDNPXzAzWFlfVDkkMD9cXC5DU18qQkRQX1MoUy9PXFgtQ19fLEJMS19dNyhRX15ICitNR1lHXz1HIUhfVkVEN19cPSYhS18oIUw/X1EoLSQ/XVA6Vl9fJzE8O19UJFsvX1w7JTFHXzY1LTdfUTgwCitNJS9cRSdSL186Ni1HX1FUNyZfXD0nQUNfOTYtPF9ZIilAX147RkkvX0M3TVhfWjo8Ri9cXzQlW18lMSxDCitNX1FEOydPXEAnQydfJjFEQl9SNEMoL1xNKlMzXysyVFhfUkxLLU9cRSkzI18oIiRMX1I4RyxPXDQlIV9fCitNJFEgPF9RQDcqL1w8JzJDXzZVVUBfUixCKi9cRChBX18tQyxOX1Q5Iy9PXSIvU0tfL0NQWV9RWD4mX1xfCitNL1NTXzBULSBfUjBCKS9cPygxX18vVDEgX1Y9RDdfXy1SLC9fWk1PQF9SPEcqT1xdLTJPX1VcOyBfXy87CitNWC9cRydSL18tIlxPX1tCVU0vX0FVPUNfRVk+Ol9UTTU2P1w2JiFfXylSQElfVlVMOT9dKzNUP184Ri08CitNX1JISyk/XT85JiNfNDVFNl9YSi5EL19BVl1HXy9ULTJfU1EmNS9eWk07I18wNDksX1QhIzEvXytSPFNfCitNLiQlIV9UJSYxT10qMjUjXywzMF9fUkBKLE9cRCsiW19QW0JXX1taT0xfXy9RTDtfMFNcXV9TTFktT10uCitNMiQ7X1YtIzNfVD0nMS9dMDRUV18yNDklX10vIlJPXTE1JUdfTUtGXl9WRUQ6T15ER0o7XylCJEVfVklHCitNOU9eQUcqK188NlFQX1c9U0BfXEwrNDtfK0MgWF9WJUA3X19HVk1HXy9DQFZfUzhVLS9cWS1TR18vM10nCitNX1FYQSsvXDsmQiNfKFFcQV9TKEsqX1xVLCMrXy5TPFlfU0xaLj9cUyxTO18rMlRWX1M8WTA/XEoqIk9fCitNOkVVPF9VSS8yL11WO0YzX0FHXVlfUVg5Jl9cOCRRP18nMUA8X1FUOCcvXDslMUdfNyU5Ol9RWDgnL1w6CitNJSFDXydBQDxfUjxBKT9cRigiM18oQVBAX1E0LiNPXj5EOSNfLFIwRF9SMDkmL1xHJjFLXzNEPSFfU0EjCitNM09cOiRSM18lITQ2X1E8NClfXEkrIz9fLDMsVl9SMEQrX1w9JzJDXygyJExfUVA8KV9cNCVBW18kISA5CitNX1EsMSZPXDMjUUNfJUEsQF9RPDopP1xIKzMvXy8jSF1fU1xdLk9cXS5TO18vM0xWX1NcXS4vXFErUydfCitNJ0FQP19RSDgmX1w8JkFXXychSD1fUTw3Jk9cOCZRU19CWD4lX10jKFEvX0lVXU9fKjI4TF9TNFMrT180CitNUVwrX1tdPzxfUlhGKk9cUSsiU19NSyZRX15HOVc/XjhGKU9fNiY5SV9ZUkRLT1wzJUFPXzNEWStfV01dCitNPk9dNzYlR18qUlRQX1JEUy1fXFgxVFNfQFhCLV9dTzVUX10gMSUvXy40LTFfWE4mQD9cXjBUR18xREUqCitNX1xPKVMvXFEuI1tfMEQ1Kl9TWF0xL1xJKyM/Xy0zPF9fUkBQLE9fIU1LN19PSl5TX10vMVNPXSMwVCNfCitNMDQ9I19VSTo1X18sUkw/XzNVJS5fVUE9Nj9dOzc1S19UK18lX1RJLTRPXlRNW1NfOkY1S19ZUjZHT1xGCitNKDI3X0lKLkJfWVY4R09dSjk2R189NyYhX1JESjBfXFItI1NfQjgyKF9dQzBXT1wzJUI/Xy40PTxfUSQ+CitNLl9dITMmN18qIl0lX1FMPSsvXDwnIj9fKDFIQl9SVEYrP1xQKlMnXyxTJFRfUzBPLF9cXzA0O18tQ0EgCitNX1NIWC5fXzhSPEdfUytWV19XRU44X11ZOzZDXyZBNDdfViE7N19dMTMlI18lUSg2X1IoPCgvXEUnUi9fCitNM0RBLF9VSTQ2L14gPkdbXywiSE5fUTgwJS9cVywzN18mMTw5X1FQOCZPXEInMV9fJ1FUP19RMDAkT1xOCitNKjIvXy80NS9fUTAqJj9cMyQxM18kUSBCX1IkRCtfXEAoMkNfJyFQRV9RPDcoL1w8JyI3XyZBSENfUihCCitNKl9cOyZSM18lQTA9X1E8MycvXDUkQVtfJSEwQV9RNDkoP10oMjRLXzI0TSlfUkhNK09cPCdSI18mQVQ+CitNX1FAOidfXDglUVtfJkE4Pl9RWD8pT1xGKTJPXy4jSF1fUVBBKD9cWi5TU19PK0ZUX14/NVY/XEYoIkNfCitNK0MoUF9cKlZMP19VVz4jXypCKEZfUlxKKk9eU0sqU19WLE8qX1oqPUg/XTc6Vl9fRloqTl9ZPjlIP1xHCitNKUJTXydBVENfUihGK09dRTlGV19MOzsiX1Q5PTo/XiJCWSdfVl03M19ULSY0T1xaMSUrX0xaWklfVC0lCitNMy9cWy9DX19PS1JfX1MkVi8vXFsvNDdfMCNZJ19SPEssX1xOLCNDXykyVE9fWCVZPV9eW0tbK19XLEsmCitNX11bK1E/Xz5TPD9fVzxHIV9eKylQT18wTls7X1YsMyBfXSZaTT9fP1I8T180VTk7X1o2SEs/XTc0RUNfCitNQkg6Ll9SNEApL15CR1lbX0ZZOjpfVjVAOS9dUDtHW18pUkEhX1MsVS8/XU48V0dfWV0zRF9SLD0qX1xQCitNLkRDXyZSIFJfUiRGLi9cOCZSU18lMTRAX1FMNicvXDklMT9fJyFAOl9SPEMpP1xVLDMvXzBTUFxfUzhRCitNLV9cUSwjP18rQkBMX1Y1PTZfXVA6Ni9fMyREXl9UWSsxT1xCJzFfXyYxLDdfUTwxJT9cNCNBK18mISg2CitNX1IsPSg/XDkkUT9fJUEgNF9RXDQmP1w3I1EvXyVRJDVfUUg1Jj9cNiQxL18pIVxBX1IwPyg/XEQnUidfCitNJEEgMl9RUDckT1wsJDFXXyNRLEJfUSguJV9cOCRRX18lQSQ9X1FQNyhfXDwmQi9fJVE4PV9RODUnL1w5CitNJiFfXycxVEZfUUw7KU9cOyZSO18lMTRAX1EoMCY/XDMkMUtfJUE0O19SUE0rT1xOLCMvXyYxTD5fUixFCitNKi9cRioiT18oIkBKX1JITiwvXE0rMyNfKlJcUV9SREoqX1xPK1MrXydCKERfVC0oMz9dJTJEQ19UK18lCitNX1JcRis/XEgqMktfS0oqPV9fNz1YL1xJKDI3XysiPElfW1JQTF9fMlQ8S19MWipNX1RJRzxPXVJBSEtfCitNMjVRRF9WWVdBP10yNEVfXzUlUUxfU1kqND9dWERKN18zRkFWX1dKIEBPXztUXF9fOiY9VF9TIFsxT15ACitNR0k7XzAjXSZfU00hMF9eXk5LU18rIlxUX1NEWzBPXSsyNStfKlJYWV9SNEgsX1xDK1MvX0A3UVxfXD5cCitNUD9eR0RYT19POi42X1siNkIvXyFKKT9fUismP19cVlJIP18hSTk/X1I7KkZfXU8nUF9dOjclX19LSyJYCitNX1VBNTZfXVU8N0dfKVIoRl9ZTjlFT14vQlhXXzc1QTpfVk1LPk9cSSskN18tIzBdX1ZBPThPX01WPi9fCitNKEFAQV9RVDwoX1w9JyIvXyoyLEtfUUAyJk9cOCRRP18nUVQ/X1IwQChPXD4mQVNfJyFAOl9RSDYmL1w+CitNJVE/XykyIEZfU1RcMF9cRigiM19IWUY8X1syTksvXilBSCdfKyJESF9RWDgnL1w0I0ErX0taRk1fUUw1CitNJj9dUDpGW18qIihGX1VNNTY/XFcsMzdfRjhaM19WMTw4L14iPygjXyRQWDJfUTQwJE9cRigyL18pUihECitNX1FcOicvXC4jQSdfJUEoNF9RKD4sX1xILTUrXyRBJD5fUSgvJl9cNCQxV18lUTBAX1FMOCkvXD4mUj9fCitNJ1FQSF9RSDcoX1xAJ0I/XydRVEZfUUg4KD9cMiQhR18kMSA3X1EoMSYvXDMkQUNfJSEsOV9SJEMpT1w+CitNKCIvXy5DUF9fU0hcL19cNCZBU18tU0RcX1UhKzNfXjRCOFtfOlYxS19YKV1AX10iMCQvXzhWJUNfWjZDCitNSC9fSVZNT18qUjRJX1JYTipfXy1QO1NfXE1LPV9SOD4oT1xJKSI7X0wqIkhfXCMgTz9eWko7R18sVFE9CitNX1Y5VT5fXU9BKSNfO0g6OV9VRVhCT11SRCo7XztZIjxfViotR19cSC8kS19ASDInX11DMFMvXS4zNUtfCitNLjQxL19VUT41P1xaLlQrXyxTPFlfVylTPS9cUCxTQ18vI1klX1QkXzIvXFItNCNfKlJQV19SME4sT15bCitNTEsrX1M8IyVfXCJMSS9eV0c5I19MWUYrX1wuSkY/XyRKSTdfUzpeOl9cLkRET18pTClfX1gsRyRfVzFVCitNPU9eSUpLJ183VUk+X1Y5QjpPXEUoIjNfRTkuMF9YUihCT11FOCYrXz03NiRfUlRQMj9cUCwjR19LWkJICitNX15HPFlfXDskMUtfKUFcRl9SIDsnX1xCJzIvXykhXEVfUjxEKk9cTSpDI18mISw3X1FUOSZfXDckUTdfCitNJTEkM19RPDAkL1w8JVFXXy8zUSNfUjA+KE9dIixDS18sMiBGX1IkNSVPXEYmUiNfJyEsOl9RVDcmX10tCitNMVRPXyZBMDhfUTwxJT9cPCVBS18qQjBIX1FQNiZPXD4kUUNfJSBQMF9RUDYmT1w3JEE7XyVBJDNfUVQ4CitNJk9cRyhCM18nUUg8X1FMOScvXD4mQUNfJEFISl9ROD0sP1w3JVIrXyZRTEZfUUw7KU9cOyZSO18nIUhDCitNX1FUOykvXD4nIjdfKjI8UF9SWEssP1xQKzMvXyVRMDpfUSwwJU9cMyRRO18kQSg1X1E0NCZfXDQkQU9fCitNKEIwSV9TWSAwX1xKKyJfXypCUE9fUlhOLD9dNDVFR18wVDUoX1E8LyRfXDckUU9fLSMsWl9TJEwsL10rCitNMUQ7X0o6KjxfXk84Vi9cSilCQ18rMkhFX1xGXU1PX0tUXTtfKzI0SV9TKE0rX15TSSpHXz8oKVpfW05RCitNTl9dIDUmK19EWEIvX1taXVJPXSI1VkdfMVcqJF9UPV1BX15UT1w7XzglQUxfUlkjM19dTj43S19XTTsyCitNX1RFKDU/XE0uJC9fKyMwSl9UVS41P1xbLzQjXytTKFNfUjxMLD9cWS5UK18yREExX1MoVTAvXEsrIz9fCitNJlIsR19ZUjBEP18sTzwrX1BaXkdfW1pERV9eXUhZN19PWjo1X1w6TkZfXyVKWUNfUSo6Nl9cMk1IL18/CitNUUwnXzw3IU9fWy5TTU9dMTMkW182NS07X1I4QSk/XjBDSE9fQigyJl9WOUE4X11GOUc3XypSWSdfUyhSCitNLl9eSEgqL19ZPU9MX1MwTC1PXE0pUl9fJ0FMQV9SSEwsP1xDKTJTXygxXEhfUlhJLT9cPyZCI18nQUg8CitNX1FAMyU/XDolQUNfKUIkQ19SNEMpT10hMCQ7XylSLEVfUUAzJj9cNyUxQ18lQTw4X1EwNiZfXDAiUF9fCitNJkEwOF9RRDMlX1w5JFE/XyRAUDBfUUg0Ji9cMyMxJ18mUTQ5X1FMMyVfXDEiMFdfJDBML19RJCwkL1w2CitNJDEvXychPDlfUiw+KC9cQydCI18nMUA6X1IsPCVPXDwnQi9fKiIsSV9RWDooT1w9JzI7XycxVEZfUVA9CitNKi9cTCpTK18sQyRXX1IgPyk/XDglUVdfJkE8PV9RSDcnP1w5JUFTXyVRMDpfUTw3Jk9cPSciK18pQjRMCitNX1FUOilPXDclQVNfN0VZQV9TIFAsX10sMyRfXytCSExfUVRAKD9cWjBEM18mMUw+X1E0NydfXDwnIjdfCitNJFE4N19WLT83P18kTzs/X1pNSzdfUkhGKi9cRygxX19MSjo/X14vK1NPXFAqIlNfLCJQTl9cLldMX11OCitNPVcjX05bNllfU10yNy9eMEQ5K19QTDMpX1M8XTM/XFkwNTdfPkgmJ19dMyxST11IOic/Xy8kOTVfU1EiCitNMS9dVDsmQ18zJE04X1JYWTEvXDEmUStfKEIwSV9TQFovP1w1JkFLXylCTFBfU0RcMD9dKTIkX18sQzheCitNX1MwVTAvXEApMktfSloqQl9cOldPL15MRlk3X0pJMitfWkIzQV9eP0JXV19FWEFbX1k+JT5fXVs6JiNfCitNQkdRU19ePzJTP11DOFYjX0paTk5fVEklMT9dKDE0T18oIUw/X1gpXz9PXUk5Nj9fOSVdQ19VVT07L1xDCitNKVNXXy8jVSRfWTYwRU9fRFQ+P18qMjhMX1MgVjAvXFYsU19fKFIsTF9RLDQnX1wzJSFfXy5TUSdfUkxECitNKy9cTisiW18vUzBTX1VJMjVPXTk2NVNfLSM8WF9SVFIsT1xGKTIzXyhBVD9fUjRAKE9cQicxX18pMiBCCitNX1JQRClfXEQnIV9fKjIkRF9STEMpT1xJKSI7XyhRWEBfUkBDKT9cRigyL18pQiRBX1IkPCcvXEQnUV9fCitNKSFcP19RSDUlP1xCJzFXXylSKEJfUjA/J19cQiZBW18oUVA8X1IkPyhPXDgoMytfJCE8SV9RWD4pX1xMCitNKjJfXygiIElfUVg7KV9cNiQxV18lUSg+X1E8MidPXDYlIVdfJjE8QF9RVDspL1w/JzI7XyZBSENfUTw3CitNKC9cPCciN18sUyxcX1U9NDZPXEoqIk9fJCBYMV9RSDgmX11AOCVXXz4nSVdfU1BfMC9cNSVRS18nQiBFCitNX1QtIDFPXDkpQj9fNjVNPl9cNlJMT19SVT0nXy1SPE9fUixDKU9eKUJYK19SWz5ZX1M0SitfXFErUydfCitNU0wqWV9WXVVBP18sUDwjXy5UQTlfWSIuRD9fKlE8N18tI1ktX1JcWzJPXVk/R1tfVl07MV9WVU8/T1xSCitNMEU3XyszTFpfVTEyMl9dMjQ1W18sQ1EqX1FEPSdfXDUmMU9fLEM4WF9TSF4wL1xaL1Q3Xy8zXSJfVFEuCitNND9cUC0jU18pMkxVX1IkRCo/XUs6Jj9fTlsiVV9dLyhRX18tUFtfX1UsSyZfXVMyU09fRVY9N19aLUs3CitNX143N1UvX0pXLUdfXU4rPl9VUT43L11MO0cnXykiJEBfU0xZLl9cPycyI18xRDEnX1FIOCZfXTs2RidfCitNJ0FcUF9SMEcuL1xULiNLX0BIIiJfXiczW19cSyszN18yJSU/X1JYUC9fXDonMkNfKUJIWV9RVEEsL1wwCitNJSIvXzVVITpfVkVLO09eXkwrJ19RK0cgX1Y1RTtPXS40JUNfMURFLl9SSEUpX1xFJ0FbXygxSDpfUiw8CitNJy9cQychU18qIiRBX1IkOiZPXEkoQitfK0I8R19TJEoqT1xGJ1FfXypCLENfUlRGKU9cSikyN18pUihCCitNX1JUSCovXEspQjtfLSJcT19SREQpL1xFKCIjXygxUDxfUVxBJ19dLC9TW18vIzRfX1QtR0MvXTQ7KFdfCitNIzEwSF9RPDQoL1w3JTFbXyYhNEFfUSwwJy9cOCUyJ18nMUhGX1FINykvXD8nIkdfJjE4Q19SID0qT1xUCitNLENPXyoyQE9fVEEnM09cPydCN18nQVA/X1EsMSUvXC8jMSNfIlBELF9RPDImL10iLiNPXydBMDBfUUA6CitNJV9cNiVRI18tQzROX1IkWCxfXS03Vi9fL1QlKF9dPyhQX1xSKVJbXychXERfU0EiLi9dRTY1S18tMlxTCitNX1NAVC1PXypPSzdfKTJMW19cXyRQX1xWMFUzX0Y5PjpfXFcoUi9dIDJFR18uNDU0X1ZJUzxfXVM8Jk9fCitNPzdeLl9TJSA0X1xUMCNfXzFUNF5fVTk1OE9cQisjS18vRCkkX1NEXS9fXF8wVDdfLzQlI19TUSExX1xXCitNLjNTXy9EISNfUyBULy9cRyszP18oMjBJX1I0Ryk/XkJHKiNfWU0nL19fT0JXP19YV11LX15OJzxfX1dGCitNWD9fWlhdW19eLic8X19HQlc/X1RWLUtfOzZNTV9SOEYqP1xYLTMjX0RZKjFfUjRDKT9cQigiK18oMVxBCitNX1UtMjY/XE4rVCNfKSI8WF9TOFovL10vMzRfX1hNJ0lfUzBTLk9dNTcmQ18oIVxMX1FQOyhPXEIoIkdfCitNKDFcSF9SJD8qL1xSK0M/XyZRWENfXSMhUT9fOVItK183JU1MX1RRLzgvXF8vVENfKlIsRl9STEAnX1xMCitNKSIrXyoyJD9fUkxDKD9cTClCM18rUkRHX1JEQyg/XEYoIVtfKSFQOl9SVEUoX1xOKUIzXysyNENfUlxICitNKi9cVCtSX18oUVg+X1JUSCovXFUsIyNfJ0FEOV9SVEgqL1xEJ1FfXykiKERfWE1ePj9dJS1TQ18pQzE1CitNX1EoPi5fXDgmMktfJUEsP19RODUoT1w+JzJLXyZBSEVfUVg+Kj9cOCYiL18lISw6X1MoUS4vXD8nQjdfCitNKCFcRl9RWDwnX1w+JyFfXychSD1fUjxFKi9cSSlSS18kUSQ0X1IkPyhPXEYpIj9fJyFMQV9WKTY0T18jCitNTEpTXzhWRUtfUVhZLk9cKikiP18nRD0sX1YyJUQ/XTo/OEtfSFpaSV9TOFEsX1xNKiJbX01LSlJfXFJaCitNTy9dJy8kJ18qMjxJX1xKXk0/XSQyRUtfVTxLKV9TQSU1T14rQjhTX1IsLyNfVCksNl9cVzBVK18qQzhVCitNX1RRKjE/XiNBOTNfKSJZIl9SOFIsP10hL1NDXzNUWTtfUUxFLF9cUC0jO18qQlhQX1JcUy0/XEcqUldfCitNKjJYVF9SXFEtL1xLKzMjXyszJFlfUkhQLk9cQSkiR18pIkBGX1M0VS4vXyhOS09fUUsyVl9cJk9MP15dCitNSlpXX0s5XkBfWiY1RU9eQUU5O19GOFYuX1ktWD9PXSoxNEdfLUMwVl9VLS4yL11OO0ZPXyZBRDhfUjhFCitNKS9dQjg2I182JT0+X1JASS5PXEQpU0NfLSNAWl9UQSYyL19BU14vXywyUFBfUihDKk9cUitDO18pMiBCCitNX1EwLyRfXD4mMVdfLDJQUF9ULF8xX1xIKkJfX1MrXyRfXUcoVE9dODVGR18xREU7X1QtIzNPXEkoMjdfCitNKkFcPl9TMEkqL1xOKFIrXypSID9fUyBIKS9cTClSK18tIlxKX1JAQydPXFIqQjtfLEI8Rl9SXEQoX1xOCitNKFIrXyoyKEJfUkhFKT9cPCVRP18lUSgyX1FUOCZPXD0mIUtfJzFAOF9STEYpT1w9JUFXX0E3SVNfVzlJCitNNy9dJy4kL18sQkRaX1I0PiovXD4mQi9fJkFERl9RRDopP1w4JiInXyoyRFJfUyRRLk9cSysiV18oUihBCitNX1IkPyg/XD8nMV9fJ1FUQF9RUDonP1w3JTFDXy0zMFpfUTw0Jk9cNSUxQ18nUiBBX1JcSSs/XEMpIjdfCitNNFRJJF9YNVY8L11NPSdLXzVZJkdfVEIoSV9cUDwoX18uRjooX1JIUDFPXVA2RU9fLVIoR19SMEEpX15WCitNS1pHX1QrRlpfViU0Nj9cTysyX19TPCZYX1ZJSz1PXzpUPSdfMDRNOl9VIS40P18gT0wjXzFFIT9fU1kqCitNNj9cNyhSK18xRDEhX1gyIkRPXEQrM1tfKyM0VV9SNEInP10rMkU/XysjNSNfU0RcMD9cWi9EI18xNEUrCitNX1MsWS5fXFcvJCdfLDMsVl9RJDMlT1xRLUNTXykiPFJfUixGKl9cOygiI18sIyxUX1suTktPXzVTTFtfCitNVjxfMl9dPzBUL19AVC0zX1ktKzZfXCZQTU9eUkhaP19bXTc4X11bM1YvXUs5RkNfPSZdSV9SUE4qX1xHCitNKUI3X0A3XVpfVk1JOS9dJjE0T18qMkxaX1FIPStPXFEtMz9fMTQ5J19dWzFYX1xIKCJLXyghTD9fUiQ9CitNKT9cQicyL18mUTg6X1FcOidPXEgoUj9fJlFAPl9RRDUlX15FR0lbX1ZMXzZfVC0jM09cXC8kT18wI0koCitNX1MkSiw/XEcoIiNfKFFQPF9STEQpL1xGJ1FfXysiLENfUzRMKy9cWCtSX18sIjxHX1MoSypfXEspIjNfCitNKVIgQF9STEQpL1xLKFI/XyUxIDRfUTQ1Ji9cOyUxR18nITQ8X1FQNyZfXEAmIU9fKlIoQl9SLEEoX11SCitNOzY/XzFTVE9fWiYzRC9fMlE9I184RU1HX1FEOik/XD4oMlNfLFMoWF9SNEMpT1xAJ0InXydBUD9fUixACitNJ19cQSdBV18oMVBAX1IkPChPXEYnUjtfJ0FEPV9RUDsoT1xPLFNPX0ZJJjhfWVJBSD9cVjNUW18xNV1ICitNX1NIVzEvXjNAWE9fTjpKTl9WJTo4P19EVz4/Xz9IJjJfVCUpNz9cTipDK19GWTo6X1xfIE5PXFcrIydfCitNKlJATl9bOklJL15dS0pfXz83KVlfUkBDKF9fJU47I19GWSYtX1xDJ1NPXSwzRTdfJUEwNl9XXiFCL10jCitNMzVPXy5EOTVfUVRMKi9dLDNFL19DWEo8X1JAUjFPXD8oUjdfMkRNLF9RWEAqL1xIKlNTXy5TVSRfUzBYCitNLk9dIjIkS18uVCUjX1JYUS1PXE4sMztfKjJQUV9SSE0sT1xGKlMnXyoiTFBfUzBWLj9cRCkyO19QS0JNCitNX1s+Q0ZfX0BSPDNfQldFT19aIi1BP15bSlpDXzhVTTlfVS0rMD9fRlUtI19YTFcrX1k6K0JPXFUuQ0tfCitNLFNAXV9SJD4nP14wQkgrXz5XRVFfUjhGKj9cRSojM18qUlhfX1UtMjYvXiVBOCtfVixPPV9SWEYsL1xRCitNKyMjXydRTENfUUw3J19cQidSN18nMUhAX1MgTSxfXFEsM0tfJVEwOl9TPFAsL19DVS1HXy5TQSRfU1xfCitNM09cXi4kO18sUlBTX1I4PydfXEcoIiNfKzI4Rl9SOD8nX1xWK0MnXyxCSE1fUzhOLD9cQiZBV18nQTw3CitNX1JIQyhfXEkoQitfKjIoQl9SNEApL1w+JlInXychRD9fUVQ6KC9cSChSR18qUjhKX1JMQylPXE0pIjNfCitNKSIsQl9WPUU4L11GODVPXyohVDxfWypHS09dUzs3N18pQjxOX1FUPChfXEInMidfKCFMP19RWDknP1xBCitNJyIjXyhRWERfUig9KF9cPyZCI18mQTA8X1I0PyhfXEEnIiNfKUI0TF9STE8tX15CRjlHX0laRkxfV1I5CitNST9dPEFZX18wI001X1ZFMzovXk9HSkdfOiVZQV9dUy9TT14tQ0k3Xy5UTTVfUz0iMF9eLkNZI19VPDsgCitNX1NYUy4vXEcpIktfRikuLl9ZXjREX142QkhXXydBRDtfXDpaTF9cWiwiU19PW1slX1QlIzJPXT43JVtfCitNLSM4XV9TUSc0T1xcMlUnXydSRD9fVDUoME9eNUUpT18qMlxZX1VRPzkvXDsoIjdfK0M5IF9RQEIsL1xdCitNMURTXy0jSFxfVCEiMT9cOSVRS18lUUQ+X1JUUC0/XEkrIydfK0MkVl9SJEYrL1xCKTJLXytDIFNfU0RaCitNLl9eXk0qR19LOUYxX14rK1FPXiw+RyNfRihBXl9cIlRLP11fPFZTX0opNilfXj83VS9fLk9MK18xM0hfCitNX1JcUi1fXSExRDtfMFQkXF9YVi1AL11FOVVbXypCREhfUlRNLi9dVz0oO18xQ10nX1tOUU0vX0FVLjtfCitNLEJIVF9SNEApL1w2JEFLXyYxQD9fUVw+KT9cPSciL18oIVxGX1FYPipfXEcqIl9fOTVZPl9dXzBUP1xXCitNLTNbXywjIF9fVDBeMy9dIi5UK18rMjhGX1I0PidPXEUnQVtfKEFMO19TIEorT1w5JSFDXyUxIDRfUTwyCitNJU9cOiRBN18oQUw7X1JMRCkvXEspIjNfLUMkUV9SND0oL11ePEc3Xzg1RTxfUjA/KF9cQSciI18qUixGCitNX1JcRilPXEcpQjdfNzYlP19XUiA/T146RFkvXytSNEhfUVw7Jz9cOSZBT18nUUg8X1IgOidPXEInIiNfCitNJ1FEPV9SLD0oP1w4JFE/XychPDtfUVQ6Jj9dNDREX19DWEosX1RdKjNPXD8nQjdfLzQlKV9VPTw2L18gCitNUEw3X1RdJ0FfW1JXUj9cQyciV18yNC0xX103LlYvX0pXPVNfWk07OF9aPjxKP10qMEU7Xy8iLFRfVz1OCitNPT9fI00qW18yVCElX1IkPikvXUw6VktfLCJMRl9ZTi5DP1xJKFI/X04qVkZfUkA+Jk9dSTomX18xJDktCitNX1FMPylfXFcwJFtfMURdQF9TXSIzT1wwIzFLXyIwIDJfUig3K09cLiFRR18qMjBQX1FMOykvXFEtJCNfCitNKiJcXV9SMEYrP1w5JjFTXzI0RSxfUTA0JV9cOycyK18qMlBRX1JcUi1fXE4sMztfKSJET19SLEYqX1xGCitNKiJPXy8zWF9fW1pUSj9eU0dZP19ZTF8qX1kuIT1fXi4+Vy9fUDsqTV9WRT82X10+NERHX1tNXzpfXjMzCitNVF9fN1IsR18xNCEkX1NEWi5fXEMoMVtfODVdOl9STFArT1xJKzJPXzFURTFfUzBUMV9cVCtTT19UTDsvCitNX10zJFYvXSUvRDtfKFIgRl9SJD8qL1xXLVQrXy4zSSVfVS00N19cRilCX18qIkBTX1FcPyovXSgwJC9fCitNV0xfL19ULF8yL10jMFUrXy8jRSZfVCBbMD9cRCchX18qMiBAX1MoSSo/XFMqQktfJjEsN19RSDUmX1w+CitNJjFfXycxQDxfUUwzJU9cQCYxR18pMVg+X1JAQSg/XFAqIjNfRDhCIl9dPyhQX11KN0VLXylSKERfUiQ7CitNJ19cSCgiL18sMkBIX1IwQidfXT44Vi9fOEY5SF9YSiVBP10wMiQ7XyghVDxfUVw9J19cQychU18pMVRBCitNX1IkOydfXEYoIjNfKkIoRV9UXSkxX14xQ0hHX0cpPjFfWzJQSi9cViwzJ18sIkxPX1ddXkE/XFQuJCNfCitNOSY5RF9bTlZOT188VU1bX1UtMzFfW1cjT19eS0w7L19VLSc3X15TO1ZfX1JXLTNfTjs2V19TXTA1T1w1CitNKSIzXz1XQVlfW0pNSi9dPTRVO18nQVA/X1FUPCZfXjBCSENfMTNEVV9SLD4oT15FRjkzX0BHRVlfUlxRCitNLj9cUi0jU18rMzUlX1NJJTVPXCgjUi9fKTFUWF9WSURHT10xM0kjXy4jQVFfUUA7Mk9cOiRCV18rUkRfCitNX1EwMSkvXDclUitfJiEsN19RTDgnT1xBKDIzX0oqQktfUkxOLF9cTCtDL18tQ0ReX1JQTi0/XEMqIltfCitNJ0IkRl9SNEcqT1xTLDMvX1ArOkxfWyo/RV9fPlFML19EWCVXX1g1VDtPXk1GWV9fOyZJTF9YKVs9P19ECitNVV07X1hcWyxfWyI/R19eW0xLK18pUjRIX1JcSitPXFQsMyNfKCI4SF9VXUY5T1xMLSNbXyxDPSlfUyBQCitNLl9fM1JdN19VPEdCX1Q9KzM/XEcsU1NfJSFYTV9TIFAvP1w+J1JLXyZBTEZfUjA9KV9cOCQxQ18mMSw7CitNX1JYRytfX0RVPUdfMVQhKl9TVF0zL1xWLUQvXzNUSTBfUkg+KV9cSSciJ18rMiw/X1JcQykvXDolIUNfCitNKEFQQF9SKD0nX1xKKEI3XylSIEBfUkRCKE9cSykiM18qMihCX1MwSilPXUU5RiNfWC0vMl9YJU88P1xFCitNJzIjXykxVEBfUlBFKT9cSikiK18qUjxFX1VdPzhPXTk3Ri9fJyE8OV9cQlxOL1xFJ0FbXyhSIEZfUig8CitNKC9cNSNAW18mMTA4X1ZBQzlfXEgnQUtfS1oiOl9cJl9NX18kTisvX1ArKk9fUzRULF9cQydSJ18mUTw/CitNX1M8WjE/XS00JEtfUjwvJ19eMzdYT19GVV1DXzk1XTVfVkFANy9fQ1UtQ19cTV8/X18vPVZfXyVPLC9fCitNLyQlLV9SNEQqX1xeLUMzXzY1LTFfVlFHOV9cQScxX188Nj1DX1JMQCdfXEUnUi9fJ0FURF9ZLidCL1xRCitNLCM/XzA0UT1fU0RdMy9cXDIkV18hQExHX1Y5Q0YvXFktRjtfJiEgTF9RTCwnT1w+JCFHXydROD1fUUw5CitNLF9dNzVYI180RSlZX1BcLydPXEUoIiNfK0MwXF9ULSEwX187VE0rXypCRFBfUlhNLS9cVi4kI18qUlhZCitNX1I4SixPXEEpIkdfKlJETF9TSFUtX15fTCpLX1VMLl1fXlc4VU9ePkJYL19BOCFUX11DIFNfXSAzRT9fCitNK0FUQ19XOVZBP182UVw/Xy4jIFNfVl1MPE9cVS0jT18tMyBSX1tOU0tfXjBFWSNfMDQxJV9VST06L1xTCitNLiRLXytSTFRfWjI9Sj9fJlA9R18sQzRaX1FQQCovXDMkQV9fJlE8OV9RLDMlT1w2JVFbXychPENfUVA3CitNJz9cMiNBO18qQjBMX10jJFFfXTMzJTtfMCQhL19UJSEzT10wMlUnXysiKEVfUkw/KE9dLDA0I18tUlBLCitNX1VBLTMvXjdDWFdfLSJUTV9SMD8oP1xGJ1FfXypSMERfUkxEKS9cSCgyJ18sQkBEX1hGKkEvX0FVLS9fCitNQldFW19SLDsnT1xFJzIjXypSMERfUlRHKT9cTSoyP184JiFDX1UtODc/XEcoQjNfRlkmLV9SMD0nP1w6CitNJVFXXyhRWEJfWUIsQV9eRkZZS181VSEwX1JQQCcvXl5MSltfQDguIV9aXkVKL186U10zXyxDIFJfUjRBCitNKF9cPyZSL18tQ0UkX1NYXy4/XylPW09fWE0vNF9eLzZUP10xM1Q/Xy8jQFZfXFMhUU9fR1YtU19dPV89CitNX1xTI1JPXFgvNEdfJlFIQV9TKEoqL1xXLDJfXzBDVF1fUUQ1JV9cQSZBS18pMVg+X1IgPCdPXEAnMi9fCitNPkcpUF9TUF4xP10nNVY/Xy5UNTNfU0UiME9cOyVDK186NTokX1E0LCc/XDMlIU9fJEBYNl9RODAmL1w0CitNJDFbXyVROD1fUEgmJU9cUSpUJ18mMTQ+X1I0PCcvXF8wVE9fMjQ9KV9dOzFUP1xAJ1I3XytCVFNfUyRTCitNLk9cTixDS18sIzRbX1I0SCs/XFArQydfKDFQPl9YTVs8T18hSzo3X1o9MzBfWUIlPl9dUTs2N19SWzssCitNX1E8SS1fXEYnQkNfJ1I0VV9cPl9PP1xNKiJLXzEjXSVfUlRJLD9cWCwzJ19HWTYrX1g2JD8/Xi1CSEdfCitNOUY5T19SSE0vT10lMDRHX1ErVydfXUsjWC9cRSciL18mISQ4X1IkMCZPXEEmQidfJlFMRF9SKEgsL1xNCitNLCNPXykyMEpfUlhNLS9dNTQ1R19VTFMvX1QoWzE/XFsuVEtfNFUtQF9VLS41L1xQKiI7XygxNDhfUlBACitNKD9dLjEzX19PWy5MX11TL1JPXSYvQ1NfKiIoRl9SLDsnT1xJKEIrXykxWD5fUkRCKE9cUyoyN19COEokCitNX11bMVQvXkBDSSNfKiIgQ19SPD8oT1xIKDInXysiOERfUyBMKk9dPzdWK183NilHX1I0QChPXlBISUdfCitNOTVBM19aOj5HL15GRylDX1BbPlBfWVo2RS9cSChSN18qQihFX1U9KDIvXjRESF9fV00rNV9eKzNWL1xPCitNK0JXXykiIEJfUig+KU9cVy5EN18vNCEhX1tSVExPXzpSXE9fWE1bPF9VNTo1L1xVLFM3XzglRUBfWi44CitNRz9fTVVdQ19TTDcsX1NRITM/XDwmUitfOEVJOF9VNS8zP1w6JTE3XyhRXEFfUiQ/KD9cPCZBU18nUVQ/CitNX1FcPSdfXTgzNFNfMiRFMF9UOTM5L10hMiU7XylRVFBfU1RLKz9eS0RIJ189RUk3X1VIXS8vXjg9NltfCitNQTYlN19YMUI3X1xLJiErX0VIJV9fWj4xRF9cNCFAL18tUkRGX1QpJDMvXSkyRE9fVT0rMV9RUD4oP1xMCitNKzJbXy9UKSdfUyBVLl9cTCwzP18pIjxMX1FQOic/XDwlUUdfQic5TF9cJktIT19KVSxTX0U4IVRfVz1PCitNOT9fNU89K18mIkhYX1JQRStfXEMsI1dfSSoiPl9SUEgqT1xcLVNXXytSQFJfVCBYLU9eQEUoN19AR0VTCitNX1hFXT9PXT82Vi9fKUJEVV9TTFowL15cTVtXX1MrUzhfUkRKLD9cNCdSO18mUVREX1IoQis/XEUqQztfCitNLyQxLl9RLDooL1xFKSJLXypSSFBfU0RWLy9cPyYhQ18vM0UiX1NMWzJPXSoyRUdfNFUhNl9STEMoP1xYCitNKyJXXypBWEFfUkxEJ09eN0JYK19WLFMlX1VFLjM/XEopQkNfKCFMPV9SSEMoX1xKKFIvXyoiJEFfUyBGCitNKE9eKUJIM19XTScwX1oyMkUvXEgoIi9fKVFcQl9SSEMoX1xLKTIvXytSREdfVlVOO19dQDk2S18pQiRDCitNX1oyMUE/XyBLOjdfUVtOVF9cNllML18oTls7X0pKLkNfUkBFKl9cRShSO18xQ0BVX1s+UEpPXz9ULSNfCitNWk1PPF9TMFEsL1xEKCIrXydBSEJfUzxaMT9dJjNFK185RVlBX10vJ1JPXVs+N09fPkdVXl9XNVs/P11ICitNOTZPX0tKLkhfXy9BV09fOFM9M18yNFk6X1FEOig/XEgoQiNfKUFcP19SOEEoP1xBJzFfXychUD9fUiA+CitNKD9cQSdSJ18nQUw6X1Q4Vy1fXSEuVC9fMVRdP19VOTs5X10sM0U3XyMwLCxfUkw0J19cUigyP18lMEg3CitNX1IkNCdfXEclUV9fJjBUNl9SJDooT1w4IlFDXylBQEdfUiA6KE9eNkJIT18xJCkrX1Q9KDI/XzFULF9fCitNKyJYUV9UUS4zL1w5JyFXXygiNEpfU1EhMV9cSStDL18yJC0nX11bNlY/Xik+Jk9fUDpOQl9eRzNSX144CitNQSc7Xz9XMUlfXT5bU19cPCtDQ18rIjRMX1I4US8vXjFEKF9fKjI4RV9TOFAtL1xJKFJPXzFTXFtfWU4rCitNPl9eMUFHX19EOC4kX1RFJDJPXEIpMyNfKFIsRl9aWkxLT189U047XylSTFNfU00pNi9cRypTL18tQzhTCitNX1QpIC8/XF8uU0dfJlEsMV9SUE0pX1xNLFJfXzY2JT1fXTcyVD9cWC40I18rMyBcX1NIVzEvXUk5JkNfCitNKyIoRV9SWEQpX1xGJ1FfXylCKEBfU1RcLT9fN1JcP187JU07X1I4PydfXEEnQVdfKVIgQF9SXEYpT1xNCitNKDIrXy0yQEdfWFouQl9fPlQ9I19MWipCX1JERCkvXEQnUV9fKiIsQ19SSEUpP1xYLCJbXzk2PUVfVilJCitNOj9cQicyJ19GOFIhX1wuUkxPXiM/JztfOjY9Ql9eNzZWT15NSDorXyoyOEVfUjRAKC9cWCxSV19POzJOCitNX10zKFEvX0RXLUtfLiM0VF9SMEAoT1xAJyIzXyxDNSBfU1klMT9fIkxbL19TK15eX15fRFhfXVE6RztfCitNMVUtPF9VWT04X15ZSlpTX1o9SzRfXjcwVT9dJTE1K18mIUhBX1IwPyg/XEYoQjNfKFFcQV9SIDwnT1xACitNJyFbXygxVD9fUig+KC9cPiZBU18tMjxIX1RNJjMvXTU4Jk9fNDVNRV9UPS03P1xIKiM/XzglVU9fVylOCitNRS9cQyhDR18kISA/X1BULSZPXCoiMTtfJlFEWl9SUEc0P1xZLSU7XydSJEhfWj5FSE9dOTU1W18wRDUmCitNX107M1RPXEsrMyNfLiNIWF9TNFctL1xSLTNLXywjJFxfUkBQLS9fJk5LT19ZXUM9X1k1Xz1PXylMKk9fCitNWTxTK19ZWiY9X11bPDY/X1VcIzNfUiBTL19cQSZSL18rUzRfX1YpRjovXEUpUjdfLDJQTl9SJEApX10uCitNMUQzX0InRUxfWEFdPU9eMUBIL18yVDErX1IsRSsvXFUtM0NfSDlSPF9cMyNUL1w+JyFHXyhRTD9fUTw7CitNJj9cPykxP18vRCxXX1NFIi0/XE0uQldfKFJYO19SKSIrP11JQ1gjX1FMNyRfVEUkMk9dIC9EP18tMlxXCitNX1QgWS4/XE4oQi9fKTFMPl9STEQpL1xFKDFfXygiMDxfXEMjT09eIzwnI18sQjBFX1IwPSc/XEcoIiNfCitNLFJISl9SVEEoT1xQKFIrX0FYPiRfXUstUy9eX0tKW18qMjBEX1IwPydfXE0qIkNfLCJMS19TOE4rL11FCitNOVY3XzdWOUZfUiw+KE9dVjsmJ186RVU8X1hSKkBfXixDWEdfWV1DPF9bIkRJP1xPKyJPXylCJEFfUkxKCitNKF9eTUlKI19SK0pXX15PQFdfXFErQldfKFFcQV9RTDcnX1xQLFNbXy8kLSNfW15OS09eX0wrI19cTjdECitNX1ZZSD1PXSk1RidfNUU9Pl9bKkZKP19BVTxbX1ldKzdfU1xfMy9cQChCR18pMiBCX1IsPyg/XEMnUidfCitNKCFQPl9SIDwnT1xBJzFfXyhBWEBfUVg6Jy9cSyhSJ18yNE0uX1Q5MjZfXTo5NlNfMSRdOl9TRSMzT1xKCitNLDNfXyxDJS5fUyBHOF9cVCpGX18vUzlcX1VNMUZPXDglNEdfOTVeK19UJF03P1xZMDRPX0U5MjNfVUE0CitNNz9dLDNVI19WPTs1X1MgUi1fXFAsMytfMjRNKV9TIFIuP1xRLENXXylSXFNfXC5XTi9fRFU9S18/RyVMCitNX1wiS0o/XzxSPEdfQUcpTl9XPU45X180Tz0jXyUiPFNfUjQ/KV9cVzAkW18uM10nX1IkQylPXFArIzNfCitNKDIwT19UUSgyT11YOkYnXz1GTURfWSohQD9dJi80M18oUjBLX1NYXC9fXlZKWktfT1wzKl9TWSgtX1xWCitNMEMvXytUIFBfVFFDNC9cWTUkL18jIkQ3X1NZPzM/XFMzQ1dfLyVJKl9ZQk1IP185VDxXXzJUPS9fUzBVCitNMC9cTSpDO18wU1kgX1I4PSc/XEUmUVtfKVIgQF9SPEMoP10uM1RDX1Q8PyNfWVIpQj9cRicxV18oQVQ9CitNX1I8QCgvXEwoUi9fK0IoQ19TKEUpL11bPldDX1VcSylfXEJXTV9cSChSL18pMiBAX1I8QihPXEkpIjNfCitNK0I4RF9TVF8vP109OSYzXydRSD5fV01QOT9dSDY1R19MSk5FX1lOOUUvX0RVPUdfTVpOTF9TLFArX1xHCitNKEIrXygyKDtfWlpJSF9eTUdZU19ZPUM3X1MsTitPXEUoMi9fKSIgSF9TRFwxX1xZL0NbX1AqVk1fWj42CitNRU9fTlddX184VVVLX1NBKTVPXSMxVF9fSloiRV9eJzRTX19GVD07Xy8zVSpfUiBCKj9cSChSN18pQihECitNX1I0QShfXEInQiNfKEFYQF9SKD4oL1xCJ0IjXyhBWEBfUiw7JV9dMTQkX18vJDUsX1hCKkQ/XitCOE9fCitNMjRdMV9TTSczL10gMiUrXz4nSV9fVDknM09cSCtDQ18nIjRTX1RRNTU/XVk+R09fUVwnKV9TRF4yT14rCitNQjhPXzNUTTRfVCklMU9fKVFMN18rUyBXX1JESSsvXjhGOUtfLyNZJl9TPFgwX1xPLVNPX09LKlNfXiszCitNVi9dVzxGU19SO1pXX11fMlM/XjlDWE9fRkk2L19dWydWT1xVMiUzXylCIEhfU0kiMy9cTixTQ186JkVKCitNX1QoXTA/XFUtI09fNERRKl9bNklIT109NiVDX0QoMidfU0hVLl9cQSoiW18wVDUoX1pGREkvXyZSLF9fCitNK0Q0Ul9UUU81X11VQ1dLXyojXExfUiBMKl9cUS5DL18tVDBZX1JAVC8/XF8wRTNfUkwrJV9ePzhUT1xbCitNLlQzXy8kIS9fVE0pNj9dJjBES18rQjBHX1JUQylPXEcnQVtfLCJISF9WLTw1T18+VCxXX0o5QjhfUjhDCitNKE9cQSdBV18pUiBAX1JYRSk/XE4oQi9fLDIwQ19UMSUvX183UixDX1MrTltfUkBDKF9cRSgiI18pIVw/CitNX1I4QSg/XE4pUj9fKlJES19TSF8vX1w/JkFbXztVXTZfV11POy9eMUIoK19JKV46X15DOVZPXlpLSl9fCitNKzJISV9SLD4nT1xEKTFbX0taRkFfWS4nQF9fQlU9M18vQ0RZX1IsPyg/XEMoIjtfMSQ9Ml9UMSgyT15cCitNSypHX0RYKiJfXj84Vi9eIz84T18tVEE2X1VdQjs/XjxFKUNfVkxbKV9eOzRVT1xWLVQrXytDIFdfUkBECitNKU9cRyhSN18oQVhAX1IsPyg/XEInQiNfKEFYQF9SJD0nX1xDJ1InXyohVDxfVD0jMT9dMTQlO19QK0cgCitNX15LOVhfXT01Rj9fLzQpNF9UKSk2X11dPUgjX006RlJfXj89Wy9dNDRGN184NiVQX1hSIkJfX0BUXUNfCitNLyNdJF9YWjBDT10wM0U/XzBENSZfXFsrUk9cSCozI18qUkhQX1hGKENPXFMtI19fK0MgWF9SWFYuT18kCitNTitHX1lNOzpfXSchTi9fM046U19VWz5PX1xSUEsvXjlDODtfVjwzN19SLFEwL1xFKDJHXylCTFFfV0FYCitNPT9ePUYpK19EKE4rX1ghWz5fXihAN09fOVYhOl9VUT05L141RCkzXyoiSE1fUz0jMV9cWzEkM185Rk1LCitNX11bO1NfXE0qQkdfLCJYV19TQF4uT11fP0hPXzlELipfWi1bS19dJSskT19KSEpdX1dNOEYvXzNQTFNfCitNWy1LMF9USSYzX1xeL0RPXzRVKT9fU1RcMF9cSyhSJ18rUixEX1MgRCk/XF4tIyNfPEY5P19dPyhQX15MCitNRzlXXypSLEZfUiA7Jz9cRydSK18sUkhKX1JcRChfXFEpMiNfQjg+IF9dVytSL18yUDwnXylCJEFfUjA/CitNJ19cSChSL18qUjhGX1JAQylfXEkpIkNfKUIkRV9RXDonT11TOFYjX0MoIVtfV0lXPE9eR0g5X19YPS8wCitNX1xKX09PXE8rIk9fKTIgQl9SUEgpT18kTUo/Xz02VUlfXj8+V09cWi0zN18pUixFX1IwQik/XTI1NiNfCitNMSQ9M19bSktJP11VOVYzX1o9TzxfWTYpRE9dIDJFQ183JV1KX1ouO0dPXj9GKUNfWi1PNl9ULSMzT1xOCitNLDNTXypCOEhfUjhCKS9cQydSJ18pIiBCX1IoPigvXEInQiNfKCFQPl9SKD4oL1w3JCFDXyoyWFRfXEslCitNUl9eXE0rQ19XLS8zX1UlNTkvXEEqMy9fMCQ9M19WUU49P143Q0hbX1csVzJfVFkxNz9dTDtHN189VlVQCitNX11XLlRfXSQxVStfQUhOK19WJT86L1xeMDQrX1FMJyFfUjxGKz9cSypDJ19EWSY6X1M8WDBfXFcuQ19fCitNKUJQVl9bQktKT18tTjtPX01aKjZfXDJIRk9eW0dJK19QOjY3X1lOKj5PXzRSLT9fK0JZIV9SJEMqX1xZCitNLTM/X0M3UVZfXUsjTV9dIS0zO18pUixFX1YhPjY/XiRBN19fQihCK19ZMi9EX11QPDcrXzJFLTNfVTU6CitNNk9eJ0I4U19aK08/X1hBLkgvXkY5LSdfUVlTMl9VUSg0P1xVJjMvXzFTIFtfUzROKi9eKT83R19GSEY0CitNX10zKFEvX01WTTNfNFRdN19TPFcxL100NFYjXzZVSUFfUkhCKC9cSydSI18rUixEX1NUUytfXiM9VyNfCitNVSw3IF9cMlVNP1xLKFI7XyghTD1fUkRBKS9cVCpST18sMjhFX1NQUCpfXipCKCdfVyxLJ19dMyNQX1xOCitNKjJHXylCJEFfUiw+J09cSikyN18pUihGX1FINSY/XEEnIiNfJyE8O19VMSQwP142Qkg3XzhWITtfWkZDCitNSD9fO1M8S19VPEspX1MkTis/XEgoUjdfKzJER19cNldKL10+NUUrX1ktTztfU1BXLV9cRyhSN18nMUw+CitNX1QhIzNPXFsvREtfTComO19VXTEzT19EVU0/X0s6JkpfVCktNi9dMzVVX183RT03X1glWj5PX0RVXStfCitNM1RdOl9SVFAuX1xEKCIrXykyJENfUiw/KD9cRCgiK18oQVhAX1IsPyg/XEYoQjNfKDFUP19STEMoP1xTCitNLDJTXzc0WS5fWkI+Rk9fN1NcV18zVS1CX1JMUy8/XSAxVS9fNyVZRV9YXiZBT19GVV1TXzI0UThfVSk0CitNNl9dQzY1U19WTE8wX1NIXTIvXV5AWC9fODVdSF9URSwzP18+Vj1HXytSWFVfUlxOLT9eNERJT18vI1UoCitNX1NVIDE/XE4tI1tfTUpGSF9cIkxLT15KRDhLX0hIQV1fWko0Qy9eWUdZM19DR11SX1xLI1NfXFAsU1tfCitNKFI4R19YVV9AL14zQDdXX1dMTyVfVEhcLz9cPCVBW18oMVxCX1VRPjZfXUs7VldfPSclUF9XXV4/P11XCitNPydLXzlWTUlfVVVAOD9fRlE9O187REFJX11SVVYvX1tYTVdfNTRBLV9SREIrL1xJKUMrXy0zNSBfV0lTCitNOV9eNUM3V19SW15aX14zMFMvXScxJEtfLFMtIF9TQFcxL102NTVTXyoyJD9fUyhGKV9cUylSQ18tIkhGCitNX1kmJT9PXzlSTDdfUTs6Vl9STEMpT1xCJzFfXykxVEBfUlhFKT9cSyghX18tQkhFX1gqID4/XzJQK1dfCitNVEwnIV9SREQpL1xFKCIjXylCJEFfUig9Jz9cPCVRT18lQSQ1X1E8MiVPXDslQUtfMTM0Ul9aPjtFT10uCitNMlQ7X0lKIj5fXVcvUy9fN1MsT18sIlRMX1I4QShfXFIrQlNfUSs6R19VNS0yP19CVj1HXy5DNFVfUjhCCitNKS9cOiYhT18oUjhRX1QpJTQ/XkZFWSdfNEQxIV9eJzNVL15XSysvXy8kQTFfVTk7OD9eOURZJ19EKEYpCitNX15HPFVfXSYxRSdfLiNNJl9SPEMpP1xHKFI3XykyJENfUjhCKS9cTSoyT19LSkpMX1IsPyg/XEgpIjtfCitNOzYhNV9YLVs6X14+QVdPXzwmLThfXUsyVC9dMzVWO18rMzRfX1Q1LDYvXTo3Ji9fPzcxVF9eRzpXX10lCitNMiUzXzNVJThfViE2Nj9fPlNdM18xJD0yX1haM0RfXVQ8R09fMTRBKV9cRyRRL1xULFNLXysiTFJfWUo4CitNSD9cUy0jX18uI00gX1IwSi0vXktHSVdfS0lKPF9YWV09X11QOSVXXzBDTFVfWSokPl9dWzomI19SW18oCitNX1QkXzA/XFgsUltfOUVNOl9TWFwuP1xKKyJLXy1DMFZfUiA9KF9cVi1TQ189J0FWX1ZJTTxPXjlFSTdfCitNOiY5Q19XIVU8P100NUUvXzUlNS9fXkM7VU9dOzQ0P19ZLT8yX14rLlVfXT40RS9fLSMkRV9SUEgpT10kCitNLlQrXz5GWUVfWFolPV9fKU8rT19XPEclX1QkXzA/XFEsM1tfMSQxMV9UQSczT1xQKkJDXypBWD9fUyxHCitNKi9cVytCQ19GKFYmX11DKVEvXzNQTCtfKkIoRV9SLD4oL1xGJ0InXysyMERfUlhGKS9cVisyP187RkVDCitNX11LKFE/Xy9PS1tfKlI4Rl9SNEAoL1xEJ1FfXyoiLENfUTAvJF9cNCQhK18lQSQ1X1FAMyVfXFApQitfCitNTEo2QF9ULSEuT15aTCpTX1RcPyNfXVMxVC9cVCtSX18pUihEX1NAVCxPXl9MWjNfMjNcW19eNzlWT10iCitNLzNfXylCKERfUiA7J19cQylDJ18wRC0uX1pCPEVfXFQqIjNfV00nMF9cOllPT1xcMiUnXzVFVUNfWTYwCitNQl9eO0UpM19aXVs5X1UhMDZfXF0wJE9fKUIkQ19SPEMpP1xJKTI/XzVFKTRfVj1COS9dMzNVJ18oUVhCCitNX1JMRyo/XEopQjNfMVQ9JF9WPTg3L14kQDg/X1YtIzNfVUFAOk9dLTVFV18yJF07X1U1OjgvXVQ6Vk9fCitNWU1HPl9ULSY0T100NlYnXzFDWSFfXU8vVE9dIDFFI188Jy1UX1ZFSDtfXScyRE9fR0lKPF9TMFYuX1xNCitNKyMrX0lKKktfUzhZMS9cTyxDP18rQzBeX1leMkQ/XlFHWidfOlVdOl9VUTc0P11IOjYvXztGSUJfV1VLCitNOV9fI0xLQ19VTFMoX10mX08vXVY4NV9fSkomQV9SMEMqP1xfLVNPXylCMEFfWE4uQi9dRzsmS180NTU9CitNX1clUDtfXV4/Jz9fNVVFNl9VITEyX10zNDRHX1hdLypfVj04NF9fQVRNK19ZPSMrX1ZRQDg/XFEqQydfCitNLjMsW19TUFgwP14rQEdPXz9HNU5fW1pSSz9fQFMsM18zNDktX1NMXTMvXSkyVUtfLkM4X19TIEgqX1xMCitNKTI3XytSSEVfUlxKKS9eL0JYL19TPCZaX10rIE8/XE4pMjdfKSFcP19SREIoT1xKKFIvXyoiJEFfUjxECitNJ19dRDZVN19QSy5OX1xTIE5fXE0pMi9fKUFcP19SMD0nP1xKKFIvXyhRRENfUiw8Jy9cQCYyJ18qIiRLCitNX1FcRCgvXl1JSidfPldNUF9cIktJX18mUDtTX1ZdLzFfUzBNKz9cRCdSJ18vMzRTX1pKREUvXTUyNDdfCitNWV1DOV9USSQyL1xJKFI/XyhBUEBfUiA+KV9cTStTM19CKDYkX1QgWixPX0JVLSdfUjtDIF9UTTQ4T10kCitNMjU3X0U4Xi1fWi48Ry9fRlUtI183JTVBX1NIWzFPXE0pUk9fLCJITl9aSkVJX1xbLUM7X0FXTVxfWU4yCitNRj9cQScyN18oQVBAX1IsPSZfXEsrMktfLVJYTl9SIDsnX18wUTxLXzVWJUVfVE03N09dKTQlU180VU0/CitNX1ZVSDovXz5UXUNfMCQtL19TXSs1L1xULEMzX1M8OyZfU1EhMz9dKjFUO184JiVCX1QtKDM/XTAyVF9fCitNKzMkU19SVE0sL15KSSpTXzA0NS1fU00gMT9cSSwzT182RSkwX10jJFE/XipDOFtfP1deIl9ZXj1JT102CitNNzYvXytDPF5fU0xdME9cTilSP18sMkBIX1syR0hPXEopMj9fKCIgSV9UUScyP14nQSdHX0k6MjlfVj1MCitNOi9dTD0nQ184VzleX1g6KEM/XiJAR19fMVQ1Il9VSTU0L184UitbXzw2KTxfXVcvUy9fRlRMS189VklJCitNX1M0TSw/XF8uI19fMFNVJV9WPUA2T11OOVYnX0sqKj5fXVsrUT9dTTlGW18wVDE1X1U5NzovXScwRFtfCitNKzI0SF9SVEYpT1xLKUInXy1DJEtfVlFIOC9fKU87O19VLCpfX1JMQihPXEQnUV9fKUFcP19SVEYpT1xKCitNKFIvXysyPEVfVEkiL09cSighU19SW15bX1JMQihPXEQnMVdfKEFMO19STEQpL1xFJVFfXyhRTDdfUig7CitNKE9cTilCR18oIiQ6X1xaUktPXVM8Rj9fUFpGRl9bQlNLT189VT0vXy1CXE9fUiw+KC9cXy1TN19FOF1fCitNX1chRDgvXzpSXFNfOTVdQ19SREMpX1xDJzInXyghWEdfU1RfMS9dJTBEJ19NOl5HX11DKlFfXzFQLENfCitNMDRJOF9VMTk5P14wQkhDX0gpRjlfXi8xUz9dVzwnU18xRD0yX1JAQyk/XEopMj9fSyo2RV9ZMixCT14rCitNP0dXX0cpJjZfUjRAKU9cSihCN18/VzFTX1VJPDZPXyRPO1dfTUsuUl9bUk5NT10tNTVfXzBEUTpfVEUuCitNOC9dJzNFM188NlFMX14rN1cvXSwzVU9fLjQ1Ll9YMiJBL186VF0vXy4zWSpfU1ReL19dNzY1U18vM10mCitNX1JARys/XDQmIUtfKSIwR19bTlVPP10iMURbXzA0OStfUyRZMF9eMUI4P19XXS80X1U9ST1fXFczNi9fCitNKVNRNV9TISU3P10oNycjXyVSJE9fUVQ/KE9cRikyM180JDUqX1MgRytPXD8mQVtfSTleN19bIkVHT14uCitNQVgnXzs2XU1fVllWPk9dNjooU18yJSVCX1UhOjJfXSwzJEdfNFRZLl9dPyhOX11aOyYvX1Y8VyZfXjcyCitNUi9eIDxGX18qQiRBX1QkWS8/XSkwREdfOkYtPV9WPUI3P10vMVQ3X1RcMl9fViU8OC9cWS8kP184VjlSCitNX1QtIDFPXE4pUj9fKlIwRF9SWEkpL1xIKFFXXzxWXUdfW1ZRSk9fNlEsJ18qUihCX1IkPCcvXEMnIVNfCitNKkIsQ19STEQpL1xTKkJLXygxUDxfUjA/J19fLFAsJ18rMjBEX1I0PidPXEcoIiNfKiIkQV9SQD0nL1xCCitNKDFLXyVBOENfUkRFKz9cPCcxP19SSlZJX1ctUDk/XyxMKldfTCpCRF9dXzdVP1xWK1JfXykhXEFfUyBICitNKU9dWDxGK19BJ0FUX11bL1QvXUw5RktfKiIoRl9SOEApL1w9JlIzXy9EISVfU1BZLi9eVUtaP19YPS8wCitNX103JFMvXSw1Ni9fMSRFNV9YMV4/L14qQFgvX1VMMyBfWEojQ19dJzIlL18rIkBKX1JcSCovXk9JKi9fCitNSllWOl9YPVc9L15CRUk/XytSRE1fUkxDKD9eSkRJN180NEUsX1xOX1AvXl9MKyNfTio+TV9VQUE5X10rCitNNVYjXy9UOTRfVD0vNF9dMjM0V19XLSc2X1UtNjhPXSMzVUNfQSgqJF9dMy1TP1xdMERbXycyLEVfUlxRCitNLU9dLzNVQ18pQjxOX1NJIDBPXEgqIk9fT0tDIF9USS41T1xSLVNTXywzRSNfV1VVPF9fOVM8W18tJC0wCitNX1I8WzNfXSE1JlNfLDNdNl9WJUI8X1xDJyI7XytCNEVfUkBBKD9dQDYlU18sQkhOX1xLIk9PXkJFWSNfCitNQkhCI19UXTM0P1xdMEQrXzxXTV1fU0krNj9dQTgmO182NVEwX1UhLjFfXUM2VSdfVEw6V19WRT01L183CitNUiwrX1hMXyVfWDVXPS9cTChSL18sUkxOX1Q0XzBfXUg4VVtfLDJUS19SND4nT182UjwzX0FILiJfVUlACitNOE9eL0VZT184Ri1EX1JMRilPXE4pUj9fKzI0QV9STEYoP11BNzU3X0hZPjBfXTMiT19cSSgiI18oQVQ9CitNX1IwPSc/XEspIjNfK1JASF9SWEUpP1xCJ0FTXzNUVShfXE8gT19cTSkiM18oUVA8X1JMRCkvXE0pQjtfCitNKDE0Pl9VNTg4X1xAKSUnXy1TIT9fUVg8J19fJ0paP188RklAX1w+TUpPXjRDWEtfVy0nMF9TQE8rX1xECitNJ1InXypCKEBfVVU2Mi9dVjpGN19WXFMtX1g1XUAvXEgoQjtfKCFIPl9RRDkoT1xeL1Q7Xy4zQFdfWzZPCitNSV9fM1FMJ19WLD8tX1QtLTYvXSUyVTdfP0c5VF9VRTQ1L18oTjszX0I4LitfVF0yNz9cRShSN18rIjxHCitNX1pGPUY/XlNJKV9fRkhOJl9aTj1HT1xEJyFfXysyOEZfUyRGKl9dIjI0R19HSipAX1pWS0lPXUI2RUNfCitNMyVBN19UNTE1T10hMiUzXzMlMThfVChfL09fRVY9U18xREU1X1QpLDVPXUs6Nk9fUkwvI19TQF0yP1xKCitNLDM/XyQxKDlfVEEoND9dKTJVK18wND0pX1JISis/XldMO0dfLyQhKF9SUFEtT1xQLUNbXz5XNVNfXUsuCitNU19cQykyS18nIiRHX1UtNjhPXEkpIyNfKEFUQV9SKEAnP1xEKEFXXyhCPEVfVUk5Ni9dTTk2L19XPScsCitNX1sqSEkvXSw0VS9fLENYXV9YRjBEL10+ODY7Xzw3QUxfWSooP09eMkFIJ18/Ry1MX1paQkRfXyxRW09fCitNNyUlKl9aOjJDT19BUjwjX0Y4QihfUyRJKy9cWC0zT18xI1UlX1I4QSg/XEAnUVtfK0JQTl9bXlZML14oCitNQFgvXy8kKSRfVjlSPU9dTzw3Q18rUkhKX1MkRik/XEsoIV9fKSIgPl9VTTk0T10iLjMvX1QsKl9fUyBICitNKU9cQiZRT18pMVg+X1MgSSo/XEgoMidfKkIsQ19SXEkoP14wQjdPX1I7VlhfUkxEKS9cQicxV18qIixDCitNX1JERCkvXEsoQkdfNiYpP19SIEk2L1xcLyY/XychWDxfW1ZISF9dQjRER19NWkpFX1cxUTsvXz1TLFNfCitNL0M0VV9SLEEoX1xIKCIvXy9DQFZfU0xUK09dRzZVU19FKE4rX1JMRCkvXD4mMV9fJkFIQ19TUSAyL1xcCitNLkNTX0lZTjZfXD5ZTC9fO1I8V18yJSE6X1RFMDdPXS8xVE9fKEIkR19VISUvT14hPldfXzBEKS9fUVQ7CitNJ09cRycyI19JSUI1X10nJU9PXkpGST9fTUo+R19TJEgqL1xHKFI3Xy1DUF5fVFEwNE9dODUlO19JSVo8CitNX1M0Wi1PXEIqUk9fMiUlOF9UOS83P10wNDVTX0FYRixfXi80Vi9dMjQmI18tVCUrX1VdQDg/Xl5OW0tfCitNLUNFJV9SQEstX1xfMDRHXzFEQS9fVDUoMz9dKDNFI18qMkRMX1pWSUw/XSkyNStfLDNAXl9TJFUtX10rCitNMjQ7X1JcKyJfUjRAKE9cQiZBV19OOlZQX1JAQyk/XEAnMi9fJyFMQV9RODYmP1xFKiJHX0xaUkZfXUMrCitNUU9fQlVNK19OWz5VX1QpJzFfXVA9RytfNEVBNF9TRF4wX19DVV0vX1tdUzRfXlM5VD9fU1gtQ19eXj8/CitNX1wyW00/XSUuUz9fPkZRSV9dMl5NP146Qkg/XysyOEZfU1xdMC9cVitTO18nIVQ+X1NQWy5PXjREKFtfCitNTDo2QF9XIUg7L1xHKVMzXzBEQThfVjlEPS9cRScyI18rQixCX1JUQig/XEUoMV9fKTIsPl9SIDglL18vCitNUEwnXysyOEZfUVw4Ji9cQiZRT18qMihCX1JcSCovXE0pQjtfLCJIQl9ZLiw/T18sUCtPXypSMERfUig9CitNJz9cRSgiI18rMkBIX1JMQihPXT85JVtfN0Y1U19VSTo5P1w7JjEzX1BKVkhfVDxZLC9eRkc5P184NV06CitNX11bLVM/XSQuU09fKEIgQl9RWDknP1xOKlJLXyxCWExfVz1PPE9eQkY5R18rMjhGX1IkPChPXD4nQj9fCitNMDQ9MV9UPScyT147RDhXX006RkJfXUsoUk9dMjZGM18xJFFAX1FcPipfXDYmUiNfNFRRJl9WNT85X1xJCitNKSMjXypCKEZfU0BJKz9eTEVZN19WPEMiX1k+JUBPXVk6RktfKlIoQl9SPEMpP1xPLEM/XzNFJTZfUzxXCitNLk9eJkA4L18nIVxAX1BcNSVfXSs0NUdfMCQ9M19UPSg0X14pQlhbX1ZcUzBfVDUjNF9cVzA0T18oQixECitNX1NAVS0vXEwrU09fLzQhLF9UKSQzL10sM0U3XzJUWTNfVCkoMk9cRSkyQ19MOlZVX1QlITJPXE8sU09fCitNLUNEXl9URSsyP14wQlhXXygxVD9fUlxIKi9cWCtSX18wQ1RdX1RBJjIvXUo5NjdfRDhGJ19aRj1GP19LCitNVy07X1U8QyNfVUkwMy9dUzs2T186Jj1GX1RdNDRPXF4xRC9fM0UpMF9cPlJLP19YVz07X149WzdfX1tDCitNVy9fXVktV19QKypTX1JMQylPXEEmUUdfSzlKMF9aPjhEX1xQKkJDXzA0IF9fUzhRLF9dJTJUV18xJEEmCitNX1kmKEBPXjpDKEdfQ0guKF9SUEouT10kMTVTXzw2VV1fUkxDKU9cTShCJ18sIjREX1FYOiYvXD4nIT9fCitNJkEwMl9cQl9PX1xHKEIzXyhBVD1fUiQ6Jk9cRygiI18qUjBEX1JYRylfXE0pUV9fQVghUl9cXyNPT1xICitNKDInXyghTDtfUjhBKD9cRigyJ18pQjBBX1VRQDdPXUc7JktfOSYtQl9SKD4nL15dSiovXy1SVENfWVY4CitNRE9cXS5TO19XTFctX1YlODYvXEMoMi9fKiIsRV9TOFMrT14gPlc3XzMkMSBfWkpCSC9cSihSL18oIUxBCitNX1FEOShPXF0xJSNfLzNZJV9YXidBP105MzRHX1gsWzJfVDEsNU9dIDIlQ18rQkRPX1RJJjIvXiE+JytfCitNKDIkTF9TNFIvT1xIKFI3XywyPEpfWiYxQ09fIEw6T19KKTozX1s2RklPXEwoUi9fKUIoRF9TPFkwL10uCitNNCU/XyYhSD9fVFkuND9cPigiN18wJC0oX1RRMDYvXFswNE9fM0UhOF9WSUw7X180UTxHXy5TRSlfUkRTCitNLz9dJzIkR187VlFLX1I0SC0vXFMtRCtfL0QhKF9VUT45P10rM0UvXy0jSFxfUVA8J19ePkZKK18xRDkvCitNX1JQTy5fXE4sIz9fLDMwVV9UTSo0L15LSSozX1ZcWy1fXkc4Vi9fS1dNV19YTTMxX1teTUo/XjVBJ1tfCitNPVYxPF9ePzJTP19NVl0/X1RcTydfXTsrUk9fM1NcV18vVCkjX1ZdUTtfX0pWXTtfXj1bN19fX0RXP19fCitNWT1bX19eNz5fX19HWC9eQkQ5P18oUUw/X1FENCUvXiw+VltfSSkyK19SNEAoL1xeLlNLXzEjXF9fUz0hCitNMT9dJDI0N19DSC1cX1heIT9PXklIKiNfL1NRKF9TWSA1P104NEYjXytCPEdfUlRBKE9cTShCJ18qQjRACitNX1FQOiU/XUc4RVdfUltfIF9SSEUpX1xBJyFbXydRQDhfUjxAKC9cUipST18rIjRFX1JQSCgvXiE/JyNfCitNUVtOVl9SREIoT1xBJyFTXyhRWD5fUlhJKj9cSCoiN184JilFX1Y1SzlfXUQ5Jj9fKEFUPV9cKk5JT1xfCitNLSJXX0BYKVtfUUw8JU9fOlJcU188RjlHX1JERSlfXFAqIjNfNERJIF9XSVE4X106M1RDX0taMkNfUyRMCitNKy9cPCVRV18rIkhTX1NFIzM/XEkqQydfP1c5Vl9SOEAnT182UjxbXzJEVThfVDUoNF9eJz8nT183RUE2CitNX1JAQCdPXSwzVUtfLkNRJF9RWDonL1xLKUJDX0c5KjFfWypHSC9eXEpKO19POlpOX1JQQyhfXEYoQjNfCitNLTM4XV9VOTg4L1xAKEJHXychWENfWFItRS9dKjMlL18wJCUoX1Y5RzxPXSYyNTNfO0chU19aXkNJL10lCitNMFUvXyojIFpfVkFKOz9cWi4jT18pMkBUX1I4SS0/XSAwREtfNUVBP19ULSUyT1xXLzNfXysyVFBfVkVFCitNOz9cXzAkP18sIyRcX1M0Vy9PXSYyRFNfK1MkVl9XWVI7T15AQlhHX1Q7RlZfVzVCNy9fOFJNK182JFk4CitNX1JAQSpfXEAmUidfWj0zMl9eJy9SX10lL0NDXzNEOSJfVFUtMk9dXT8nT19XLF8uX19DOVRfX19aPidfCitNX147P19fX0dYL19fWU1fX18+Mz1fWVIkQz9cSiZCK18wM0xZX1dVTDdPXVs6VidfKSFcQ19UJFktX10iCitNLkNDXytTQF5fUyhVLU9eK0BHT18+NlFHX1taVEwvXFYtM1NfM1UpRF9UUSg2L1xLKFI7XypSJERfUlxDCitNKS9cTCgxS18qQjA8X1dBUDlPXzJRXCNfLEJAS19SIDonT1xBJjFTXytSOEZfUlhDKE9cTikyN18pUixBCitNX1ZNSjdfXlhLWkdfKiIkQV9SJDwnT1xDJ0FbXysiQEZfUlBDKF9dQjhWM184Rk1LX1YlRDk/XEAnQU9fCitNTkpGO19SND0mX11XPidHXyYhPDZfXDJdTz9eNEFIP18qIiA+X1I4PiZPXTs0ND9fOTVRLl9WKT41T15ZCitNSypPXypSSElfUjg/KU9cOSUxW18uJCUoX1I8Ris/XFAqQltfKUJARl9XTVM8P1xfLlQzXy0zTStfVTE1CitNNy9dLzQ1M18xNE0zX1RRMjcvXFouNCNfJ0FAPF9STEMpT15RSVovX0opVjZfW0JERy9eV0laM18rMihHCitNX1I0PyhfXFArUzdfM0RdNl9SMEYrT11MO1dLXzc1WUlfVTk/OT9dNTQ1R18tUzUlX1QhKjY/XFcvI1NfCitNKzJMRl9TXSAyX1xHK1NfXytTOSRfUyRWME9cPCdCV18mQVRIX1QxJjNPXFwvRC9fLTM0WF9TUF8xL1xFCitNKSJLXypCPE1fU10hMU9cVC4kI18tQ0BfX1NAWi9fXEYpQkdfSCk6J19cNk1KT19HVCwvX0hZLV9fXS8nCitNUi9cXi1TX18pMVxHX1JEQihPX0tUXTtfVTwvJV9ULF8wP11IOkZXXzRVVUFfWzZRS19fWFg9U19fLjdACitNX19fR1dPX19ZPVNfX147PV9fX0RXP19fWi4nX01ZVkBfUyQ/KD9dKS8zR189RiU1X1ddTThfXEInMidfCitNLUJYTF9TXFctP1xEKUJXXykiKERfV1VZPD9dTTg1U19LKiI8X1MoTi1PXTY2VldfMjRFOF9TJEwrT1xICitNJ0InXywiMEVfUyxIKD9cTioiI187NjU7X1xGXk1fXFMqMlNfKCFIPl9SJDknL1xQKVI/XytSMENfUlxGCitNKU9cQScxT183VVkzX1haJT9fXEcoIiNfKFFYQF9RXDomT1xKKUIzXysyMERfVUU6Nl9dOjhWL186NlFNCitNX1FYPShfXlFJOVtfJ1E8Ol9TPFcuT10jMCNPX087NlNfWi43Ri9cSihCN18qMixBX1U1LDE/XS4xU09fCitNOzZNRF9cOllOL1xOKzJTXyghREBfUkRFK09dMDMlU18rQlhXX1E0PSY/XSQvU0dfOyYhPF9TQFMuP10pCitNNCVbXzE0WTxfVCUmMy9dIjIlK18vRDUxX1QhJDMvXD0mUVdfKTFYPl9bIkRHX148QygvX00qIjhfWy5DCitNSC9cSSdCL18pIVhCX1M4VS5fXTU1VVtfKlMkWV9VWUY8L10/OCZPXzc2OUxfVUU1Nz9cTyszV18uJCksCitNX1NEXS5fXkhKOi9fKSJMUV9RWEgvP1xGKzQnXycyKE5fUVRCKV9cUC1DQ18uM1EhX1FEOydPXDomQVdfCitNLVNIX19SSEkrX1xCJ1I3Xy5DUSFfUkxPLV9cUi0jT18rUyRWX1M8Vy5PXjxEWCtfUUpWSF9eQzBQP15ECitNRFdTX1MrXl5fU0xULl9cQSdSQ18pQiRHX143MFMvXy9QO1tfNkVRP19TRF0vX14gPjdHX1w+IzpfX09CCitNVT9fX1ktR19fXjdBX19fQ1dfX19ZPVtfX143PF9fV0RXP15GRDhXXytCKD5fU1xYLE9dRDQ0N189Rjk8CitNX1FINSY/XSAuIztfLCJARl9SREUrP1xFKFI3XzomQT9fVU0yMy9eWEpKP18sIkhSX1RZMThfXSYyJT9fCitNLCJMTV9STEEpL1xUKiJHXywiND5fUkBCJk9eLUE3T19RS05UX1JYRClfXD8mMVdfJ1E8Ol9SUEMoX1xNCitNKEInXysiLENfUjhCKC9cWi4yW183VTkwX1I4PydfXD8mQVNfKiIsQ19SIDwmT1xNKSIzXzRVMTVfVVlHCitNOV9dQjk2O18oIVRDX1pKOURfXFgqUktfNkUxMl9XJUs4X15USko7X0lZTjxfUjhAKS9cRihSK182NSksCitNX1QsXSxfXVY9Jl9fUltaXV9SREgpX1xBJkInXyghUEVfU0ReMk9dIDBEN19ASCFYX1lCLkJPXEAnMi9fCitNNkVRRF9UQS82X10tNVY3XzA0NS1fVC0mNE9dLDVGM18zNTU/X1IgQShPXE8qMj9fSjlWNl9aKixAX15MCitNRUhbX0hZLjBfUkQ+KF9cRCdCK18qQlBRX1RFMDVPXSs1JU9fMlU1P19VITE3L108OTZPX01bLltfVCRfCitNM19cSStTR19FWS47X1IoPyk/XEstNCNfKUJYXl9RSD4rP1xBKCI7X0E4IiBfVFkyNC9cVS5DQ18mMUw+CitNX1NEWC9PXSExJEdfJ0FUQ19TNFIuL1xBKFJDXyoiUFRfUjRHK09cXC9EL18vQ1khX1lGLz5fXyFJSV9fCitNWSxOWl9ZRiY7T18zUFtLX0VIQilfUyxNLD9cRyhCM19ZXSsmX1w6XU1fXS81VU9fODY9SV9eJyxUP19WCitNV01PX19OPztfX19IV19fW1dNV19QWjZHX19TQFcvX19ZXVtfX147P19bLkRHT1xGJ0FLXy4zME5fVT0qCitNLz9dUThVS18mISg2X1MoSSo/XEYnMVdfKiIkSV9RVDkmX10rMyQ3XzQ0QSFfXEJWTF9cSCdCP184NjFVCitNX1Q1KDUvXFgsUy9fKVFUQF9TLEcqT1xTKiInXypSND1fVllFN09eX00qV18sQkRJX1IkPCdPXD8lUUtfCitNKlIoQl9TJEYpP1xKKDInXylSJD9fUkhIKC9cXy4jK18oIUA7X1IgOyc/XEcoQitfKTIkP19SSEMoX10vCitNNCUnXzc2OUZfViVEOT9cQydCK19JWTIqX1ZZPTVfXTw0JD9fPCY5O19aSj5GP15TSTo7XylSKEZfUjBACitNKE9dKTEjX18sQlRHX1ctUTtPXytQK19fKyJESF9SLD0oP1xBJzI3XyhSXFZfU0hcLk9dSjc1Q18oUVhACitNX1QxKTU/XSMyRTtfMDRFM19ULS02L10vNEVXXzJVITxfVE01OS9dLDVWK18oMjBFX1JUSChfXkdFWFtfCitNTko2OV9aNi9BX10kLUMvXylRVEBfUjhAKS9cTitDJ18vJC0pX1Q9MDVfXUM5Vl9fSEoqS19VMT05L1xOCitNKlMnXy0zMSFfUzRaMU9cOiYiQ18uMz0nX1JIUjBPXDwoIkNfKCIgQ19YUihBT11HNlU7X0JIWiZfWDorCitNQV9dXD8nX18tU0ReX1RZMTVPXDsnMitfKkI8TV9TOFgvP1w/KFJPXyszKFhfUyxVLk9cXy9UK19BV0lHCitNX1taQ0YvXzZOWktfQFchOF9cNk1JL15BREhXXywySEpfUkhDKF9fSVM8X19RW0snX1MwWTRPXF8vVTNfCitNNCQxPV9VRTM5X11ANyZTXzpWPVdfV01GPE9eLj1HT19fLis/X19fSFc/X19aTidfSFkqMl9SQDwnP1xYCitNLCJbXzIjWFRfVjk6NT9cOyRBK18qUixGX1IsPSg/XEspMkdfKEFYQF9TWFstT10jLVMjX1JLNlNfUlhGCitNKk9dLTNFR185VjFQX1MkSSk/XE8oUjNfKkFQRF9STEInL1xFJ0FDXzsmLTxfWy5ISD9cVisyV18nUUg8CitNX1FQNCVfXE0pIjNfKzIoQV9SVEQpL1xFJ0FbXygxWDlfUkxKKF9cNiRBM18nQUQ9X1JEQSkvXEYnMVdfCitNKiIwQl9TXSEvX11AOjZHXzhWPUlfUiA+KD9eQEM4J184JSEmX1NETSlPXT81NE9fRCgxX19bNkhJX1xGCitNJ0InXylBUD9fUzRQLE9cTisiW184NVU/X1w+Xk9PXE4pMjdfKFFYQF9SJD8oT1w7JzIrXy1DPF5fVFUxCitNNj9cXjEkW18rQyhaX1RFLzY/XSIyNTdfMTRZPF9UISo1P10mNCVPXy9EQTNfVEUzN09cQShSQ18qMiQ9CitNX1pCOENPXlhJOU9fOkVJN19YNVg9X1xCJlFPXykiKERfUkBDKF9cVC4zX18wREEyX1siR0lfXkVIKiNfCitNMjRZOl9UVSszP1xYLkQrXygyTFpfU0EjNS9cSCw0K18nMVRIX1JERCovXkFHOU9fNiUtJ19aPjxEP14pCitNQjdbXzc1TThfXT8xVj9cWS8kJ18yVFkzX1IkQyovXE0rUzNfKzJcVF9SSE4tT1xLLCM7Xy4jTSBfU10hCitNMS9dSzdVI19LOUImX1tKQkRfXUM0RDNfTFlSPV9SXEMpT1xAKDIrXylCJENfXlMwVF9eW0tLL185VylZCitNX1Q9KDNfX0ZWLiNfWj1HQV9eSzpYT19GVU1bX1lNR0RfXVMsVS9fWlk+J19fXkM7X19fRlZfXkNFKTdfCitNKFFEPF9SXEgqL10gLVMjXzglOTJfUUgxJD9cRidCJ18oIUg+X1IwPihPXD4mQVNfKzJMSF9SLDslX18iCitNTFpXXy4zNFNfVCknMy9dTDwnK18tQlhMX1JYQihfXFEpMkNfLFJIRF9SMD0lX1xRKiInX0RYQiFfU0RQCitNLC9cQSchW18nUTw6X1JIQSg/XFApMjNfK1I4Rl9SND4nT1w4JSErXychSDdfUTQwJS9cOyVBS18pQVhBCitNX1JAPydfXEopQjNfMTQ9JV9WLUw7L11AOSY7XyghXEVfWElYO09dMDBDR18qUVw7X1Q0Wyw/XVU6NjNfCitNTkpWTF9SREEpL1xGJlIrXytSQE9fUVA+KD9cLyRBL180NE0pX1JEQCgvXEEnIVtfKCFYQV9RTD0oT1xJCitNKkMnXy8kIShfVDksNU9cTSwzR182RiFKX1NdJjRPXSk0RiNfMzU9Ql9ULS02L10iMyU/XzQ1TUZfUiRDCitNKi9cSihCI19JKTotX1RIXCxfXik/R1dfJiBcL19SMD8oP1xBJyIjXzQkPSdfVCkkMj9dJTJVL185VV09CitNX1cpTTs/XF0wRFtfK1JUT19TXSEyP10lNEY3XysjOSVfUkBILD9dMTIkQ19NKyJOX1YxOzUvXl1LKV9fCitNSFheJ19VPTg0P11IOzZHX09bVyBfUyhULj9dLzQ1O18oMixIX1MgUi1fXEsrMytfKDIsS19SVE8tT1xaCitNLyQnXy1DOFlfVjE7NS9eIzxWR18/RllFX1dRUTpPXE4oIidfKTFUQF9SLEEoX1xIKFI3X1wtOzNfXDZYCitNTV9dNzc1X18sQlRNX19HPVY/X19YPU9fX14nO19fX0JXL19fWU1fX19eO0JfX19KWF9fX1o+I19fXjc+CitNX1oiMUU/XEImQVtfKjIwRl9TKEspP103MzRHXychLDNfUjQ9KC9cPiYhU18nQTg6X1FMNyY/XEQpMjtfCitNJ0FEO19bVlBKX1xRK1JTXzY2JUVfWConQy9cWCwjL18tIkBJX1JcRChfXFEqIitfJ0E4Ml9UKFksT10zCitNMiQnXypSKEJfUig9J19cPiVBR18qQiRBX1JIPydPXEsoUidfKTFYPl9RMC8kP1w3JEE7XyUxIDZfUTAvCitNJF9cRScyI18qUihCX1JMRyk/XEorIktfOVchUF9WRU07X1w/J0I3Xz8mUUNfVUkuMV9cUSlCN18xI0xUCitNX1VRMDJfXyJNOzNfKyIwR19SOD0pL1xDJzInXyoyPERfV1FVO19dTjkmI18oMUA4X1FUOCZPXDglQUdfCitNJyFYQ19RODcnT10gMSRTXzQ1PUFfUihGK09dLDRFU18vVDkyX1Q9MDdPXF0xVStfMTRdOl9UMS42P10pCitNNFVbXylSNE5fUkQ9J09dODMkN19BJ01VX1FYOSY/XEcoUjdfKFFYQl9SJDwoT11QODYnX0NIRi1fVCUmCitNMy9dPTYlL19IWV49X1NRITM/XE8rMl9fLkNRJF9UNS43L1xKKlMrXzglSThfWkI9Ry9dOzVFI19QKy5ICitNX1o2MkFPXi9AV0tfMERJJl9VLTs1X11QPEcjXy1DPF5fVFkvNU9cSCpCX18uQ1EhX1JQTixfXD4oIkNfCitNKCIkSF9TTFowL1xEKEI3XydBSDhfVChaLU9dMDE0M18oMVQ/X1I0QShfXEInQiNfKFFcQV9SOEIpL19JCitNVS0jX0hZVjtfVlFUPU9dMjM0X19dPV89X19LQVgvX1tYTidfX043RF9fX0lYT19fWj4rX19eS0JfX19LCitNWU9fX1peO19FOEItX1IkOCdfXEEnIiNfKkI0QF9USSIwL1w1I0BbXykhUD9fUVQ3Jl9cQCYhT18nQUw6CitNX1JARClPXTMzJFNfTSo+Rl9TKFAsT11BOiZbXzJEXTVfUlxHKl9cUyoiP18rQjBAX1JcRSg/XDslMS9fCitNK0JAQF9TXFcrP1w7JFEnXyoyMEZfUVg5Jl9cSyhCK18sMjhFX1JEQCgvXEgoIi9fJUEgNF9RUDYnT1wzCitNI0EzXyUgXDNfUiQ8J09cRSdBW18qQjRFX1NAWi4vXUk8RytfOFY9SV9RTDooP11OOEVHXzg1NTBfUyBHCitNKV9cWy1SX18tUlhHX1w+WU1PXFEqMlNfKTIgQl9TTFYsP14rQEdPXzo1RS9fUVQxIz9cSSgiI18qQjRHCitNX1MwUi0/XDcmMVtfKSI0TF9URS01P102NyY7XzEkSTRfVF00OC9cWjA0V18wRE05X1UtOjlPXSMzNUNfCitNMUUlPF9UWTc5P1xCJ0I/XysiKEVfVzVLOV9cOyVBJ18pQihEX1IgPig/XEEnIiNfJzE4PV9ZSi1DL19ACitNVi1PXy9EJSZfViE7NU9eOEUpK18tM00jX1MgUCxfXSszVT9fJkFcRV9YTilBT15RSVovXzhVSTpfWkpECitNRy9eOkJXW19JWUIrX1Y1RTcvXFwyREdfKlM8VF9UXTQ0L10gMEQ/XzRFNTpfUUw9KE9cWi4zX18qQlBRCitNX1IsRCpfXEcpUyNfMFQlJF9STEcqP1xFKDIvXy4zKFJfXCZZTy9cSioiT18nQVhBX1IkQCdfXEgoUi9fCitNKjIwRF9bSktKX11TPCZfXzc2NUlfUlxJKz9fVlgtQ19fPi84X19fSFc/X19aXiNfXl4zP19fX0tZX19fCitNWk47X19eV0dfX1dKWS9eLT8oO18oITw+X1FUOydPXD8mQVNfLjMwVl9RPDMlP1w8JiFLXydBSDxfUiw/CitNJz9dUztGR19NKk5FX1UhIy9PXTIyRENfKjI8SV9UMSwzT10jMiRXXywiTE1fUkhDKF9cRidRX18qMihCCitNX1FAMiVPXEMoIU9fKTI0OF9RODIkL1xDJ0IrXydBSDxfUkxEKS9cTCkiK18pUihEX1I8QilPXDYkMTdfCitNJTEgNF9RMDAkT1w8JiFLXykiIEJfUjBAKE9cSihCN18rMkxNX1ZBUTw/XT05JjNfJ0FMQV9VOS8wX11SCitNOSYnXyhBVEFfU0BeLk9cQydBQ19RKz5SX1JcRypPXEMoIV9fPzc1U19SLDYlP1xFJzFPXyhBVEFfUjA8CitNJ19cSCgyJ18oMVRFX1FAOCg/XEEoMktfMVRBM19UWTE3P10tNFYvXzFEWT5fVDUtNz9cWjBFK182VV1OCitNX1RdOTlfXSc1Ri9fM1VBRl9SPEYrP1xEJ1IvXyghTD9fUjA/KF9cRikiO18nQUg8X1FMNyY/XDckQTNfCitNTks6VF9dWzFVT10lMSRLXzZFKS5fWT4xQ19cWS4zU187VyFXX1UhMDY/XUU6JkdfP1ddXF9YIVg9L15cCitNSlo3X0dZMi1fWT4sQT9dRDclQ18xVFUpX1M9IjBfXEotMztfLSNMW19YLilBP10pM1UnXykyMEpfUyhPCitNLT9cQShSQ18pUlRPX1IsRCtfXFovI0dfWS4nQF9STEgrT1xBJyFbX0lJTjpfUiQ5Jy9cPyciK18rQkxKCitNX1ouQUY/XjxGOTNfVUxHKF9bRk1KP19BVV0vX14uO0NfX09CVl9fX1ldW19fXj8+X19fSFdfX19aTitfCitNX15PQ19fW0pYT19fWl4vX19OT0NfV1VMPU9cPiUxU18mITg5X1FAMyU/XE0qIktfJiEwNl9RSDYmL1w8CitNJiFLXzY1ISpfU0BPKj9cVCtCU18wM1BeX1Q1IDBPXEIoIi9fMDRFLV9VOTs4P1xIKFI3XypSMERfUjg/CitNJ19cTCkyN18lQSA0X1FINyVPXDwmQTdfJTEkM19RODIlL1w7JVFHXylBXD9fUlhGKS9cRidRX18pMiBCCitNX1E4MSRfXDslQUNfKTIgQF9SREQpL1xGKDInXylCJEFfUjw/KE9cRikiO185VyFQX1YtSjpPXD4mUidfCitNM0Q8W19WXUE3T1w7JUFLXzAkNSVfUUw6Jj9dRzhFU18pQjA/X1FYPygvXDckQTtfKEFIPl9SJD8oT1xBCitNJ0IzXygxRDxfUig7Jl9cOyVRX18oIihKX1NEWzBfXF8xNF9fMkUlPV9UKSs2P1xaMFUnXzFEXT1fVTk/CitNOz9cXzMlR18yJTVCX1RFNDdfXS01VidfLVM4XF9SQEMpX1xAJlFfXyghTD9fWCVZPy9cSSgyM18nITw5CitNX1FMNyY/Xj5GKTtfS0leRF9ULSUyT103NERXX0Q4SipfVEEiMU9fQ1U9V19ZPUtBX1kmL0YvXTw1JT9fCitNTypSQ19bUklHP11dPlczXzI0USZfU10kME9cWTFUO18rQzxXX1NFIjBPXi5FOTdfK0M0VV9TPF0vX1xZCitNLiNbXyYhNDtfUyRTLi9cVS5TV18qQkxWX1UhLjJfXzxVPTdfKTI4TV9RODcmL1xXLCMjXylSJEVfUUAzCitNJV9cPighV185VklEX1dFVjw/X0BULD9fU0tCT19fU0RWX19YV003X18uKzlfX19GVz9fX1ldW19fXkM/CitNX19fSlhPX19aXi9fX05LQl9fW0pYT19fWl4vXztFVUdfUiQ4J19cMyQxM18mMTA2X1IgOyc/XDUkMS9fCitNJkE4OF9RSDYmL1xEJyFLXyohXD9fVCxeL09cXS8jT18wU1UhX1FYOyg/XSk0JTtfM0UpOl9TOFAtL1xJCitNKEIrXypSMERfUkhDKF9cNiRBM18lMSw1X1EsMSRfXDQkQTNfJEBYMF9SIDwnT1xDJyFTXy0iUEpfUjg/CitNJ19cSShCK18pIVQ9X1JAQSg/XEkoUidfKjIsQV9SREMoP1xMKUIzXypCKEVfUlhMK09dQjpWT185NlFMCitNX1IgPShfXFstIkNfQUdBVV9RQDMlX1w3JVEzXzdVVThfVUk4ND9cQychU18mQUA7X1IoPSg/XEMmUV9fCitNKCFMP19SKD0oX1xAJiFPXyoyKEJfUjRBKj9cRClCW18rQzBcX1NNIzM/XFwxRSdfMERRN19USTQ3X10kCitNM0VHXzFVJTxfU1koNU9dITIlM183RVlHX1kmM0YvXSEvVCtfKEFUQV9SREQqL1xFKCIzXzNULSZfUkA5CitNJz9cPiVBR18nQUg8X11TNFRPX1BXXjdfMFQ1Kl9WNUM3T14iQCgrXzglST5fXkM2Vk9fSVc9W19WLSs6CitNX15bQFg/Xl1LSidfQkgpWF9UVS8zP1xYMDQnXy4kPSdfUlxZLz9dJTJES19COSYuX1MgWS4/XSEzJFdfCitNL1Q9K19SLEIqL14/RyorXyxTNFpfUlBULU9cUSxDV183NUU3X147OFY/XSowNENfRikqMF9ZRjRDX14vCitNQ0hXX0M4TihfVjFJOV9dPTkmM185RjU+X15XPVRfX1ZXLSdfX11fNV9fW0NWL19fWU1XX19eOz1fX19FCitNVy9fX1otX19fXk9DX19TSFgvX1pZTVtfX05LQl9fX0pYT106MjUvXygxQD9fUUw5Jy9cPSYhS18mISw1CitNX1E0MSRfXDYkQTNfJUEoNF9RVDYnP1xFJ1IvXy8jPFdfVDUiLz9cPCUhQ18mQTg+X1RVMzZfXSgyVTtfCitNL1NEXV9SPEAoL1xCJlFPXyoiJEFfUTQyJD9cMyQxM18mITg5X1EoMCRPXDMjUSdfJzFEO19SND4nT1xSCitNKkJDXyoyJD9fUyBIKU9cSihCI18rIjBCX1JAQCcvXE8pUi9fK0I4Ql9SSEInT1xKKFIvXyhSJENfVUlDCitNOF9dQzpGS18pMihIX1MgSSc/XjhCSD9fLTMgVF9XNVA6T10lMEM/XyhRTDdfUVAtJE9cQiZBV18oMUw5CitNX1I8PCZfXEEnMU9fJ1FIPl9SLDsnT1xFJ0FbXykyJElfUzBWL09cVC5EK18wVE01X1NVJzRPXFUvVEdfCitNMCRJNF9UXTk4X1xYMERTXywzTSlfU1heMz9eS0g6T19JKVpCX1NMVi5PXEYoMjdfKDFQQF9RUDcmX10yCitNMFQ/XyxCLEdfUig4Jl9cLyMwX19KOVo9X14vMlYvXTs3NitfNyVJNV9XJVY9T11BNyYjX1ktKzRfXi85CitNVT9fSFguM19OSlZIX1hBXjwvXSw0NE9fLkNcX19TXScyP1xBK1MrXzQ1OTxfWEIsQk9cVi8jQ18wVE0tCitNX1NJJjJPXFowRDtfJ1FYRF9dQzVWX1xWLiNXXytDOFhfUlxQLl9dPTY1P19aPT85X1VVKzM/X0BUPE9fCitNR0kyKV9VXUA2P109NyU3XzYlVT1fVTlCOD9dTztGP19bLV80X18/P1VPX11XPTdfXl1fN19fU0JWP19fCis+WU1XX19OMztfX19HV09fX1pOK19eXj8/X19bSlhPX11aPidfX15DQQorIAorZW5kCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdGltZ3IudXVlIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RpbWdyLnV1ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmU5NDg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RpbWdyLnV1ZQpAQCAtMCwwICsxLDExNzAgQEAKK2JlZ2luIDc1NSB0ZXN0LnJhd2ltZy5yZXYKK01fVUkpNF9cQSYhX18mUUQ8X1FUOCZPXDgkUTdfJTEkM19RODIlL1w2JEEzXycxOD1fUjQ/KF9cXC1TP18KK00xNChdX1FQNCYvXDolQVtfMzUtO19UQSs1T1xfLjNXXylSIEBfUig7Jl9cSCgyJ18lMSgxX1EsMSUvXDgKK00lQUdfJEEgMl9RLC8kP1w9JjFPXykxWD5fUyhKKi9cSSgxX18sIkBGX1JIQigvXEwpIitfKiIgPF9SXEcKK00oX1xOKUIrXypCKD5fUkhDKF9cQygyL182Ri1DX1YtSjpPXEUoQkNfLCJEPV9ZQipBX1xVLCMzXz03IUoKK01fVDUiLV9cQyZRP18nIFQyX1IoOic/XEEmUUdfKVFQO19SJD0mX1w/JkFbXyhRTD5fUjQ+J09cRSgyR18KK00tIzheX1MwWjBPXSMyVTdfLzQ9Ml9TNF8yP10gMkUzXzNVRUNfU0EiMy9cUS5UR18vQ1ktX1pOQUpfXkQKK01HSitfLlM4Wl9SOEEpP1xBJyIjXychPDtfVSkjMV9cUihSP18oQUA7X1BcLSNfXklHSVdfWF0rOF9VTT0KK004T108NkU3Xzw3OVZfViU8OC9fRFRNM19YXUc1X15DQFkvXlpLOkNfQidZUF9UUTEyX1xaL1NfXy9UPSkKK01fUiRPLE9dMTVFU19CKFIqX1M4XC4vXSMyVFdfLkQ5Kl9TSSIxT1w/J0IzX1YtNztfUzhYLz9cTi1DQ18KK00rUyBbX1VVOTVfX0lVXUdfNzRNLV9eIzFSX14+RShHXzdWITlfVVU8NT9dODc1V181RilBX1ZdTjlfX0wKK01XXTNfXV1fNl9fVz1VP19bV10/X18uKzlfX19GVz9fXlktT19fXj8+X19fSlhPX1tZXV9fX05LQl9fV0kKK01YP19fWi4nXztFVUdfUiQ4J19cMyQxM18mMTA2X1IgOyc/XDUkMS9fJkE4OF9RSDYmL1xEJyFLXyohXD8KK01fVCxeL09cXS8jT18wU1UhX1FYOyg/XSk0JTtfM0UpOl9TOFAtL1xJKEIrXypSMERfUkhDKF9cNiRBM18KK00lMSw1X1EsMSRfXDQkQTNfJEBYMF9SIDwnT1xDJyFTXy0iUEpfUjg/J19cSShCK18pIVQ9X1JAQSg/XEkKK00oUidfKjIsQV9SREMoP1xMKUIzXypCKEVfUlhMK09dQjpWT185NlFMX1IgPShfXFstIkNfQUdBVV9RQDMKK00lX1w3JVEzXzdVVThfVUk4ND9cQychU18mQUA7X1IoPSg/XEMmUV9fKCFMP19SKD0oX1xAJiFPXyoyKEIKK01fUjRBKj9cRClCW18rQzBcX1NNIzM/XFwxRSdfMERRN19USTQ3X10kM0VHXzFVJTxfU1koNU9dITIlM18KK003RVlHX1kmM0YvXSEvVCtfKEFUQV9SREQqL1xFKCIzXzNULSZfUkA5Jz9cPiVBR18nQUg8X11TNFRPX1AKK01XXjdfMFQ1Kl9WNUM3T14iQCgrXzglST5fXkM2Vk9fSVc9W19WLSs6X15bQFg/Xl1LSidfQkgpWF9UVS8KK00zP1xYMDQnXy4kPSdfUlxZLz9dJTJES19COSYuX1MgWS4/XSEzJFdfL1Q9K19SLEIqL14/RyorXyxTNFoKK01fUlBULU9cUSxDV183NUU3X147OFY/XSowNENfRikqMF9ZRjRDX14vQ0hXX0M4TihfVjFJOV9dPTkmM18KK005RjU+X15XPVRfX1ZXLSdfX11fNV9fW0NWL19fWU1XX19eOz1fX19FVy9fX1otX19fXk9DX19TSFgvX1oKK01ZTVtfX05LQl9fX0pYT11dOyc7XydBNDxfUUA2Jj9cOCRRN18rMkBKX1FANCVPXDolQUNfJyFAOl9VRTAKK00yT1xYK1JHXy0iWExfVCRcL09dJTAkK18oQiBDX1QlKTM/XTY2VidfKiIsRV9STEQpL1xGJ1FfXysiNEUKK01fUTgwJS9cOiVRO18nIUg1X1E0MSRfXDYkQTNfJlE8OV9SOD8nX1xOKUIzXylBXD9fUjRAKE9cNiQxL18KK00mUTg4X1I0QCgvXEkpIjNfKUIkQV9SOEEoP1xHJ1IrXylCMEZfVj1QPC9dQzpGS18nQUxBX1RZJy5fXU8KK004NVtfJlE4Ol9UISUxP1w7JkFHXzlWKTxfUjhEJ19cPidSI18lUSg2X1IoOidPXEEnUitfKDFYRF9SJDkKK00nL1xCJlFPXyZRPD9fUiBCKk9cWS5UL18vVDUvX1RJMTc/XSIyVUdfLkQtMV9UOS83P102N1ZXXy9UUTkKK01fVEE1OE9dKTUlX18zNT1BX1M8Vi8vXEgoUj9fKCFMP19SIDsnX14hPjdTXyoyJERfUVA3Jj9cOyVRR18KK01HSUI2X1paP0kvXSMxNEtfNVUpLV9ZJipCT10oMEQ7X1hdNz1fXjc6WD9eMUNZQ183JTE3X1tSTEhfXlwKK01KOVdfPzdNVF9URSwxT1xfMSQrXy40PSZfUlhXLV9cWTBEK19DSTY1X1JYVS0/XFcvM19fLjNAXl9RQDUKK00mX1xRLFNDXy0zTF1fUkhLLU9dMDNET19XLTc1X1I0Ris/XDYlUUNfLVMgUF9SPEEpP1w4JFE/XydCID0KK01fVj1KOS9dWT1HJ19YLSMnX1xaWEtfX1xZLU9fXi1bNV9fU0JWP19fWU1XX19ePz5fX19IV19fX1pOK18KK01fXk9DX19bSlhPX15aTitfX15PQ19YVVxBT1xAJVFbXycxTD5fUVw6Jy9cWS0jO18lUSw1X1FQOCZPXD4KK00mQVNfKFFcPV9XLU46P15USlo3XzQkLF5fVSkqMi9cSSlSR18xJFEuX1QtKDM/XFAqUldfKkIsQ19SOD8KK00nX1xJKEIrXyYhKDZfUixAJl9cRSkxQ18lQSgwX1IsPihPXD4mQVNfKlIwRF9SUEQoT1xHKEIzXylSKEYKK01fUTgxJT9cNSQhM18lISAyX1FQOCZPXEQoIitfKSIgQl9SSEIpP1xNKlJXXzonJVFfVVVEOS9cPiZSJ18KK001RF0jX1cpRDg/XEInMidfLiNYWl9SLD4mL18kTVsrXytSPEpfUixAJ19dXT03L18oUTg1X1I0PSZfXEIKK00nMidfKSFQP19SQEEoP1xBJzI3XyYhQEFfUiRBKk9dJzIlL18zRSU9X1RVMzhfXSYzRVtfMTRVPV9TSSIKK000T107N1ZbXzNVRUdfVD02OF9dLzYmO18pUjhNX1IwPyhfXEAmUV9fKSFcQ19SOEQpT1w+JkFTXyZRPDkKK01fUTwyJS9eWk1LM19XTSc2X1Q1JDJPXTo0RFtfRVkmL19TRFkvL11PPCc/XzQlITlfVjVIOj9dXz9XU18KK01AJ0FUX1tSS0k/Xj9FKFdfRVhSJV9WMTw2L10nMzRHXy1UKSNfUkhVLU9cVC5TT19AWEYlX1RFLzQ/XEUKK00pIktfLEJcVV9SJEMqL1xHKzJfXyhSME9fU0hcLj9fRFg+I18qUkBOX1IkPCdPXkZGWUtfKDFEPF9RXDwKK00oT1xOKlJLX0haJjlfWVI5RS9fNlI8Q19OOlZJX14nN1RfX1hZTi9fXl4rO19fX0dXT19fWV1bX19eQz8KK01fX19KWE9fX1peL19fTktCX19fS1hfX15aXi9fRThCLV9SJDgnX1xBJyIjXypCNEBfVEkiMC9cNSNAW18KK00pIVA/X1FUNyZfXEAmIU9fJ0FMOl9SQEQpT10zMyRTX00qPkZfUyhQLE9dQTomW18yRF01X1JcRypfXFMKK00qIj9fK0IwQF9SXEUoP1w7JTEvXytCQEBfU1xXKz9cOyRRJ18qMjBGX1FYOSZfXEsoQitfLDI4RV9SREAKK00oL1xIKCIvXyVBIDRfUVA2J09cMyNBM18lIFwzX1IkPCdPXEUnQVtfKkI0RV9TQFouL11JPEcrXzhWPUkKK01fUUw6KD9dTjhFR184NTUwX1MgRylfXFstUl9fLVJYR19cPllNT1xRKjJTXykyIEJfU0xWLD9eK0BHT18KK006NUUvX1FUMSM/XEkoIiNfKkI0R19TMFItP1w3JjFbXykiNExfVEUtNT9dNjcmO18xJEk0X1RdNDgvXFoKK00wNFdfMERNOV9VLTo5T10jMzVDXzFFJTxfVFk3OT9cQidCP18rIihFX1c1SzlfXDslQSdfKUIoRF9SID4KK00oP1xBJyIjXycxOD1fWUotQy9fQFYtT18vRCUmX1YhOzVPXjhFKStfLTNNI19TIFAsX10rM1U/XyZBXEUKK01fWE4pQU9eUUlaL184VUk6X1pKREcvXjpCV1tfSVlCK19WNUU3L1xcMkRHXypTPFRfVF00NC9dIDBEP18KK000RTU6X1FMPShPXFouM19fKkJQUV9SLEQqX1xHKVMjXzBUJSRfUkxHKj9cRSgyL18uMyhSX1wmWU8vXEoKK00qIk9fJ0FYQV9SJEAnX1xIKFIvXyoyMERfW0pLSl9dUzwmX183NjVJX1JcSSs/X1ZYLUNfXz4vOF9fX0gKK01XP19fWl4jX15eMz9fX19LWV9fX1pOO19fXldHX19XSlkvXkBEOTdfKEFIPl9SREQpT1xSKlI3XzVUVSkKK01fUVAzJF9cRScyI18nQUA8X1FYNiZPXDslUUdfKSI0Rl9RWDkmX15dTCpPXywyXExfVUVBOT9eIkFYU18KK00uIyBTX1MwSCo/XE8pIi9fLDJAQl9RWDYkT10iLjMrXzRUQSFfUkxCKE9cQicxX18nQTg5X1JIQSg/XEoKK00nUVtfKlIsQV9SND4nT1w0I1EnXyVRKDZfUTQwJU9cNCNRL18pMVRAX1JMQihPXEspUjdfKkJQSl9WPVAKK008L11JOzZfXydRWEVfV1FMOF9dOjNEP18sMjhFX1QwWy0vXTw0JE9fUEs2VF9SUEQpX1xGJzIzXyhRVEEKK01fUkRHKS9dXD02X187RjFAX1IkOCYvXD0mIUtfJiE4OV9RUD4oX1w2JVFbXzAkMSxfVSU3OD9cQilCW18KK00zJSk8X1NdJjRPXSc0JVtfLzQ9Ml9UNS82T10kM0VHXzI1LT5fUjxFK09cSScxW182JFElX1gxWz0/XD4KK00mMUdfKVIsRV9SLD4oT1xBJyIrXzwmJUFfWFopQz9dITFEU183NUEzX1ouP0c/XFwwNFdfK1JUT19TSFwKK00xL10lM0VTXypCTFJfViE6Ni9eSEc5U182VTkwX1wiU0ovXkVESDtfQ1gtWl9UKSoxT10zNlU/XzwnKVAKK01fUzhXL09dLjNVO18qIkhPX1NIXDA/XEwrQy9fJ0IgSF9SIEEqL1xbLkQjXykiKEVfUVg6Ji9dIi5DO18KK000JDUkX1IkPSdfXEUoMi9fKEFYQF9SLD8oP1xGKEIzX1o9MzBfWi49Rl9dTD0nO180RFUvX183P1c/X1oKK01YPiNfXl4rQV9fW0VZL19fWj4rX19eR0JfX19KWE9fX1peO19fXk9GX1ouNEU/XEMmMVNfK1JASF9UIFcKK00sL11ANUUrXyZBJDFfUjg+KD9cQCZBW18pIVhCX1FYOicvXE0qUkNfKFFMN19cKlNLP1xZLTMvXzBEPSwKK01fVlFQPE9cVitCU18rQihDX1MkRSovXFMqQjNfKSFUN19TJEgoP14zQignXy4zIFBfUiQ8J09cPyVRS18KK00qQiRBX1MgRSkvXE8pQjtfKTFYPl9RQDQkT1w8JkE/XyUxIDRfUUw2Jk9cRidCJ18qIVw/X1JIRikvXSUKK00xVDdfOFZRTF9WIUQ5T1xAJ1I3X0JHQU5fVSEiLj9cSydRT18xM0xRX1c1STkvXlpLOlNfKjIkRF9SODsKK00oT1xPKiJfXychWEFfUFwyJF9dMTJUR18qMiBAX1IkPCdPXEAnQidfJlFUQl9SREosP1xcMCRDXzFEUTYKK01fUlRRLj9dOjgmS18vVDkyX1RFMjgvXS01VitfMFRVOF9UKSw1X10xNlY7XygyLEhfUkhCKC9eREVIV18KK00yQ1BTX1hFXj8/XDgjUF9fKSFcQV9SJDwoL10wMVQ/XzBEMSlfVDUrNF9dRzdVV188RlVNX1NVIjNPXE8KK00rMl9fL1QlKV9UNTI5P1xMLUQ3XyoiQFFfVSUoMi9eVEwqW185JU00X1tWTEdfXkNDWD9fNVVBMV9WQU0KK006P15fTzwjXyxDMFlfVF0xNU9cQShSQ18sIyhXX1JMTSxPXEEoUk9fKzJcVl9TSFwwP1xWLUNHXzklTTQKK01fWC1TOj9dXjtGN18/JyVKX1JYQCg/XEUnMiNfKFIkQ19SQEMpP19QVU0vX1E7QldfVT09N19cUisyV18KK01ePVc5X19fQVZfX19YPU9fX14rPF9fX0ZXX19fWU4rX19eS0NfX19JWC9fX1k9W19IWSoyX1JAPCc/XFgKK00sIltfMiNYVF9WOTo1P1w7JEErXypSLEZfUiw9KD9cSykyR18oQVhAX1NYWy1PXSMtUyNfUks2U19SWEYKK00qT10tM0VHXzlWMVBfUyRJKT9cTyhSM18qQVBEX1JMQicvXEUnQUNfOyYtPF9bLkhIP1xWKzJXXydRSDwKK01fUVA0JV9cTSkiM18rMihBX1JURCkvXEUnQVtfKDFYOV9STEooX1w2JEEzXydBRD1fUkRBKS9cRicxV18KK00qIjBCX1NdIS9fXUA6NkdfOFY9SV9SID4oP15AQzgnXzglISZfU0RNKU9dPzU0T19EKDFfX1s2SElfXEYKK00nQidfKUFQP19TNFAsT1xOKyJbXzg1VT9fXD5eT09cTikyN18oUVhAX1IkPyhPXDsnMitfLUM8Xl9UVTEKK002P1xeMSRbXytDKFpfVEUvNj9dIjI1N18xNFk8X1QhKjU/XSY0JU9fL0RBM19URTM3T1xBKFJDXyoyJD0KK01fWkI4Q09eWEk5T186RUk3X1g1WD1fXEImUU9fKSIoRF9SQEMoX1xULjNfXzBEQTJfWyJHSV9eRUgqI18KK00yNFk6X1RVKzM/XFguRCtfKDJMWl9TQSM1L1xILDQrXycxVEhfUkREKi9eQUc5T182JS0nX1o+PEQ/XikKK01CN1tfNzVNOF9dPzFWP1xZLyQnXzJUWTNfUiRDKi9cTStTM18rMlxUX1JITi1PXEssIztfLiNNIF9TXSEKK00xL11LN1UjX0s5QiZfW0pCRF9dQzREM19MWVI9X1JcQylPXEAoMitfKUIkQ19eUzBUX15bS0svXzlXKVkKK01fVD0oM19fRlYuI19aPUdBX15LOlhPX0ZVTVtfWU1HRF9dUyxVL19aWT4nX19eQztfX19GVl9eU0kpW18KK00pQVg6X1NEVCtPXTcyQ1dfPDYtOl9RQDIlT1xSKjJHXylBVD1fUkBBKj9cPSYxT18yVFElX1UlKDA/XygKK01NSy9fKiFYR19WJUQ9P10lMiUzXy4jLFNfUjw9KC9cUylSS18sUkBBX1JMRSc/XU45NVtfT1syTV9TKEkKK00qP1xBJyFbXydRPDpfUkxCKE9cUSlCN18qQiRBX1I8QSdfXEoqIiNfL1NAUl9SIDgmX1xAJlFXXylSKEIKK01fUjRBJ19cSihSL18zVSExX1VVRjlPXUE5JjdfKFFYQl9aPjRCT11ONzU/XzclISdfVyFGNl9eSkdJR18KK01MWjZGX1I8QilPXEQoIitfMjQwX19TKE0pX11TPDZbX1JcIl9fUlBJKi9cQycyJ18oMVRFX1IsTy1PXFoKK00vI0tfOkVVOF9SLD4oL10kMjU3XzBUSTZfVCUpNF9dIzM1Q18zVSk9X1RNMDcvXSs1NjNfMyU9Ql9SJEQKK00pP1xNKiIvX0lZPi5fW0pFRj9eRUNYP18xIzhTX1I8PSgvXEYoIjNfK0JYUV9TUSMyP10nNCU/XzhWPU8KK01fWipCSl9dNDc2M18rQkxRX1M0VDA/XFUuRDtfJkFASF9TRFcxX1xKLEQrXyciIEhfUiBAKF9eLEIoO18KK005VU02X1hKLkFPXiZCWD9fPydRX19TPFkvT10uNDU7XyZRVEJfUkhHKz9cVi4jV18nUixLX1JUUi4vXFMKK00tM0tfL1NdIl9YPVo5X15eSFlDX1VLTkpfWC1QNi9fJUs6M19IOSotX1MkSipPXEooUi9fWjxXL19cPloKK01RX1xULjUrXy9TXTRfVSEkNz9dOTRWP184JVFMX1ZNRz1fXVs5RytfQ0c5W19fU0JXX19fWi1XX19eS0EKK01fWjoxQz9cTihBW18vU0BSX1YxMTE/XVY5RVNfJkE0OV9UIFgtT1xQKiI7XyoyNE1fUjRDKT9dSDolX18KK002VSksX1tCSklfXFAqQytfM0UlQ19UOSg1X1xQKlJXXypSJERfUzBIKj9cUCkxW18qIig6X1hWJT5fXyYKK01OWzNfK0IwR19RXDknP1w/JVFLXysiLENfUlRCKD9cTChSL18pQihAX1NIWStPXT81RSNfKUFcP19RXDoKK00nL1xIKFIvXyghUDpfUlREKS9dMzUlN183Rj1HX1YpRTlPXEAnMi9fSklGM19TQEsqT106NSUrXzw2TUMKK01fWzJKSU9eR0ZZU18pQiBEX1I4QyhPXTk0RFNfMFNUU19XOVQ7X18rT0tXXyoyQEdfUiQ6KD9cQCciN18KK00uM1kqX1QhIjE/XiJAJ0NfRihaKl9SID0oX106NyYzXzIkXTtfVFU3OT9dITE0V18wVDkyX1RRNjkvXS0KK001NV9fKCIkQl9SXEkpX15JRzk7X0hIUiNfWlI2Q09eQ0RZI18qMVhDX1IwPihPXEorIydfMjUhNl9UTTQKK002X10rNTVfXzQlJTxfVVFFOl9eV0xbT18wM10vX1JETy4/XjdEWU9fKEFcRV9STFUwL1xGK0NbXyZBWE0KK01fUiRAKU9eJUAoI18zRSkwX1M0Wi4vXDkmUVtfLjNAXl9UJSQyP1w+JzIvXy0zKFhfUiRDKi9cSCsjM18KK00pMjxOX1NQXjBfXF4vRCdfRjhdW19cJkZHX19EUltLX0Y4OU5fXS8jTk9eNkIoR18sUlRRX1I8QikvX0cKK01UTDtfUUtWV19UXTc2X11BOVZHX1g8UzFfXzs+Vl9fXlldT19fXkM/X19PPlc/XyNJOj9fXy4jPF9fX0cKK01XT19fWU1fX01ZVkBfUyQ/KD9dKS8zR189RiU1X1ddTThfXEInMidfLUJYTF9TXFctP1xEKUJXXykiKEQKK01fV1VZPD9dTTg1U19LKiI8X1MoTi1PXTY2VldfMjRFOF9TJEwrT1xIJ0InXywiMEVfUyxIKD9cTioiI18KK007NjU7X1xGXk1fXFMqMlNfKCFIPl9SJDknL1xQKVI/XytSMENfUlxGKU9cQScxT183VVkzX1haJT9fXEcKK00oIiNfKFFYQF9RXDomT1xKKUIzXysyMERfVUU6Nl9dOjhWL186NlFNX1FYPShfXlFJOVtfJ1E8Ol9TPFcKK00uT10jMCNPX087NlNfWi43Ri9cSihCN18qMixBX1U1LDE/XS4xU09fOzZNRF9cOllOL1xOKzJTXyghREAKK01fUkRFK09dMDMlU18rQlhXX1E0PSY/XSQvU0dfOyYhPF9TQFMuP10pNCVbXzE0WTxfVCUmMy9dIjIlK18KK00vRDUxX1QhJDMvXD0mUVdfKTFYPl9bIkRHX148QygvX00qIjhfWy5DSC9cSSdCL18pIVhCX1M4VS5fXTUKK001VVtfKlMkWV9VWUY8L10/OCZPXzc2OUxfVUU1Nz9cTyszV18uJCksX1NEXS5fXkhKOi9fKSJMUV9RWEgKK00vP1xGKzQnXycyKE5fUVRCKV9cUC1DQ18uM1EhX1FEOydPXDomQVdfLVNIX19SSEkrX1xCJ1I3Xy5DUSEKK01fUkxPLV9cUi0jT18rUyRWX1M8Vy5PXjxEWCtfUUpWSF9eQzBQP15ERFdTX1MrXl5fU0xULl9cQSdSQ18KK00pQiRHX143MFMvXy9QO1tfNkVRP19TRF0vX14gPjdHX1w+IzpfX09CVT9fX1ktR19fXjdBX19fQ1dfX18KK01ZPVtfX143PF9fV0RXP148QShXXypBSEJfVCRbLj9dXTslW18+Vk1BX1IwPyhfXSEuMz9fMENIWF9SXFgKK00vT1xSLTM7X0JYKVtfV0VMOV9eXk0rI18tQzRcX1RdMjkvXSwyJUNfKlIsRl9STEEpL1xPKFIzXysiJDoKK01fUkhEJy9dWDwmO19UTD8gX1MoSCpfXEAmQVtfKDFEPF9SXEYpT1xOKFIrXytCNEVfUjxDKD9dSzpFX18KK01OKl5JX1JAQSg/XEEnIVtfKFFYPl9SUEgpT1xMKFIvXzhGLURfVilLOl9dQTkmN18oIVg7X1tKSUZfXEUKK00nMU9fPVdBWV9RQDclT18kTztXX0UoOidfUkBAJ09cRidBS182VSUnX1Y1PDNPXUI3RTtfTjpSS19STEoKK00qP1xGJ1I7XyYxND5fU0EhMi9cRylCV18sIkhOX1I4SClPXVs8VydfL1NNJF9TNFsyX100NTVTXzNVJTQKK01fVDUrNF9dLDRFU18uQ0UgX1FYOCcvXEsoUjtfTDo+Q19aQj1FT15YSSlTX01aPkRfUlRCKV9cRSdSL18KK00sIlxVX1RZLzVPXEQpQltfOyZdWl9VVT46P102N1Y3XzU1JTlfUzxVMT9dIDJFR18tU1BcX1JUSylPXF8KK00wJE9fKVJcX19SXFYxL1xRLUQrXychWE1fUUg9Ki9dJDFEW18vI1kjX1M0VS4vXFwvVDNfKTIwSl9SSEcKK00rP1xfMDQ7Xy0jQSBfUzhYL19cWC5DX18pQjhJX1oiNkFfXyVLOktfWV0jI19aLjM/X18zUVxDXy9DPF8KK01fUjQ/KV9cSShCK19aXS82X103I1E/XSMvVCdfOiZJTV9VLT04P15VTDpfX14uJzxfX1NFWC9fX1ldW18KK01fXjc8X19fRlc/X19ZLVdfX15DQV9aKjFFX1xDJlFfXyYxMDRfWFFbO09eREUoT18pMiBAX1NYWy5PXSQKK00vU19fLVQlJV9UMSkxP14uQFdTX0NYJV5fWkZASC9cXy8kQ18vRCE1X1VBMjgvXE4pUj9fKzIkQl9SVEIKK00oP1xKKTIjXychSDVfVj1CNz9fK09cI18qQjRHX1IkPCdPXD8mIUNfKVIgQF9TKEsqX1xMKTI3XysiQEAKK01fWCVcPC9fJ05bO18qMihCX1IkPCcvXEMnQVtfK0JESV9SQEgpP11AOEY3Xzk2TUdfVjFEOV9cQicxV18KK01QSlpGX1NcVCs/XiNAR09fJlFQNl9dSytTL11SOUY/XyoyNEdfUyBIKS9dMjJEI18+RyVDX1VJLzIvXk8KK01JKi9fLDJQTF9RUDcnP1xMKkMvXy40LS1fUkRKLD9dXz1HO18pQiA+X107KVNPXSozNUNfMTRBM19YPVwKK00+X10+NiU7XyoiID5fVFEvNk9cWi8kM18nQUg8X1JMRiovXj1ESSdfTEo+QF9bUkpJT15dS0pbXysiLEMKK01fUjhCKS9cVS1DV181RUFAX1IgQio/XDwnQi9fQyhWNF9USSw0X10gMDRDXzlGPVJfVDkpNS9dTjwnL18KK01LWi5EX1Q1IzRfXEgsI0tfOiZJTV9TSFguX1xFKiMzXylCRFVfVCEiMk9dNjYlX18wVDUqX1M8XS9fXE0KK00rMyNfOjY1TV9TXSAxX1xQLDNTXy0zPF5fVDkqMy9cTywzO18/RylOX1oiK0I/XzFOOztfPTYpPF9dQyoKK01UT104M0VDXyoiJEtfUiA7KD9fSVUtK19YPF8rX1Q0Xi4vXS4xRCtfMzRVKl9XVVw+X188U1xbX14tRzMKK01fX19JWD9fX1lNX19fXj9AX19fRldfX11ZLVdfUCsqU19STEMpT1xBJlFHX0s5SjBfWj44RF9cUCpCQ18KK00wNCBfX1M4USxfXSUyVFdfMSRBJl9ZJihAT146QyhHX0NILihfUlBKLk9dJDE1U188NlVdX1JMQylPXE0KK00oQidfLCI0RF9RWDomL1w+JyE/XyZBMDJfXEJfT19cRyhCM18oQVQ9X1IkOiZPXEcoIiNfKlIwRF9SWEcKK00pX1xNKVFfX0FYIVJfXF8jT09cSCgyJ18oIUw7X1I4QSg/XEYoMidfKUIwQV9VUUA3T11HOyZLXzkmLUIKK01fUig+Jy9eXUoqL18tUlRDX1lWOERPXF0uUztfV0xXLV9WJTg2L1xDKDIvXyoiLEVfUzhTK09eID5XN18KK00zJDEgX1pKQkgvXEooUi9fKCFMQV9RRDkoT1xdMSUjXy8zWSVfWF4nQT9dOTM0R19YLFsyX1QxLDVPXSAKK00yJUNfK0JET19USSYyL14hPicrXygyJExfUzRSL09cSChSN18sMjxKX1omMUNPXyBMOk9fSik6M19bNkYKK01JT1xMKFIvXylCKERfUzxZMC9dLjQlP18mIUg/X1RZLjQ/XD4oIjdfMCQtKF9UUTA2L1xbMDRPXzNFITgKK01fVklMO19fNFE8R18uU0UpX1JEUy8/XScyJEdfO1ZRS19SNEgtL1xTLUQrXy9EIShfVVE+OT9dKzNFL18KK00tI0hcX1FQPCdfXj5GSitfMUQ5L19SUE8uX1xOLCM/XywzMFVfVE0qNC9eS0kqM19WXFstX15HOFYvX0sKK01XTVdfWE0zMV9bXk1KP141QSdbXz1WMTxfXj8yUz9fTVZdP19UXE8nX107K1JPXzNTXFdfL1QpI19WXVEKK007X19KVl07X149WzdfX19EVz9fX1k9W19fXjc+X19fR1gvXyROWzdfMTNMV19XSUw6P180T0s3X0ZISicKK01fUlRGKU9cXy80I18tQlxWX1FQPSdPXFwuU0tfRSkiLl9bJkVIL11QOiZTXylSPFRfVCkoNi9dRjknM18KK00pMVRAX1JYQyhPXE0oQidfKTIkP19SNEMnT1xAJiEzX1NcKyFfUlRGKU9cPyYhQ18oQUw7X1JEQihPXE8KK00qIkNfKzI4Rl9TIEooT14zQydbX1MsIltfUkxEKS9cQicxV18pMiBAX1JUSCovXEsoQitfN1YxPl9VWUUKK008X106NkY3XyZRRDRfXCpNSi9dJy4zI19JSVY3X1YlPzZPXz5TPFdfMSNMW19SKEAoT1w+JjFXXytCTEoKK01fUyhOKy9dVztXK19ISUY5X1JURilPXEEnIitfJ0FYR19UJSc0P10nMVRLX0ZZJi1fWzZJSE9fOlIsS18KK000RUlEX1QxLDgvXD8nQk9fJUFMQF9VLSwxT11FN1Y/XyoyMFBfUkhCKU9cWCoyV19LKT41X11HKFBPXjcKK01BOCtfPjZJSl9STEIoT1xHKFI3XytTKFdfVFkxNU9cVy1TS19BSCYjX1FQPygvXC8lMT9fMlUlOV9UIScKK000X10nMiUvX0I4Ti5fXU8sVC9dJTBVL18tVCUrX1IoQykvXFgtMzNfKyJcW19TVSAzL10iMSRTXzMkWTUKK01fVE0uNF9dIjIkS18pMjRIX1smTU0/XSEwNEtfK1MsW19TOFkvT10pMlRHX0QoTi1fUiQ9J19cTyoiQ18KK00uIlxPX1QoXS8/XSgxRENfOkY1RV9ZJilBX15JRzlHX1pdUzZfXTcoUF9dOjQkU188VlVLX1ZBRzlPXS8KK001JStfL0Q5I19UWTI0L18nTEpXX14tVzZfX0c+VV9fXlhdU19fPjM9X1xTJ05fXTw0NEtfSUkqLl9eJykKK01QL145QihDXywyRExfU0BVLl9dJC80N18pQiRBX1IgPydPXE4rIltfT1s6UF9YQiNAX1xcMEQzXzlHKVYKK01fVl1RPi9cTypCS18sMjhFX1JMQCdfXEQoIVtfNlVFMl9UKFksX18wUEtfXywiQEZfUig7Jl9cRSdBW18KK00sIkRJX1JAQSg/XEooUi9fK1JEQV9ZIik+X18pTztDXypSMERfUig9Jz9cSChSL18qMjBEX1JMQio/XTgKK004RV9fKCJFOF9TUFw5X1w8J0FTX086QkNfVikyMj9eV0pKN189JyVMX11XLFMvXF4tMzdfKFIkQ19SQEAKK00oX1xeLiM7Xy5TME5fVj07Ny9eNEJYT18qUjBEX1FYOSdfXDomQi9fLyQhKF9TUFovL15HRlk7X1FbRlAKK01fXU8pUz9dKDQlS18yNSE+X1RdJzJfXEIoMj9fNCQ0Xl9YJVs/X10iMERfXycxTD5fUjw9KC9eRkYpN18KK01UPDZeX1pKOkVfXlZJWj9fLDJASF9SPEMpP1xWLyNbXzMlITJfVUE0NU9eRkdJU18tM0hWX1IoSypfXSgKK000NUNfMURdPV9VITE3L14nQjhTX1hdMzhfVSkwOC9cVzA0T183ViFBX1taW05PXFYuNDdfKiJMV19TXSEKK00yP10mMiRfXzE0QS1fVEEuNC9cSSoyU19LOkZRX1RFKTRPXFEuI1tfLDM0V19UTSkxT18rUEwrXykyIEIKK01fUig6Jz9eWUs7I18qIixFX1IgPShfXDwmUidfJUE4OV9SNEgqP15TSyo7X1YsTyZfXis2VE9eW01bN18KK00wRD0nX1chVjxPXTI2JTNfLjNZI19eLzdUX19PVy0zX1stRzFfXy9AVi9fW1ldX19UTDpXX1ZFPTUvXzcKK01SLCtfWExfJV9YNVc9L1xMKFIvXyxSTE5fVDRfMF9dSDhVW18sMlRLX1I0PidPXzZSPDNfQUguIl9VSUAKK004T14vRVlPXzhGLURfUkxGKU9cTilSP18rMjRBX1JMRig/XUE3NTdfSFk+MF9dMyJPX1xJKCIjXyhBVD0KK01fUjA9Jz9cSykiM18rUkBIX1JYRSk/XEInQVNfM1RVKF9cTyBPX1xNKSIzXyhRUDxfUkxEKS9cTSlCO18KK00oMTQ+X1U1ODhfXEApJSdfLVMhP19RWDwnX18nSlo/XzxGSUBfXD5NSk9eNENYS19XLScwX1NATytfXEQKK00nUidfKkIoQF9VVTYyL11WOkY3X1ZcUy1fWDVdQC9cSChCO18oIUg+X1FEOShPXF4vVDtfLjNAV19bNk8KK01JX18zUUwnX1YsPy1fVC0tNi9dJTJVN18/RzlUX1VFNDUvXyhOOzNfQjguK19UXTI3P1xFKFI3XysiPEcKK01fWkY9Rj9eU0kpX19GSE4mX1pOPUdPXEQnIV9fKzI4Rl9TJEYqX10iMjRHX0dKKkBfWlZLSU9dQjZFQ18KK00zJUE3X1Q1MTVPXSEyJTNfMyUxOF9UKF8vT19FVj1TXzFERTVfVCksNU9dSzo2T19STC8jX1NAXTI/XEoKK00sMz9fJDEoOV9UQSg0P10pMlUrXzA0PSlfUkhKKz9eV0w7R18vJCEoX1JQUS1PXFAtQ1tfPlc1U19dSy4KK01TX1xDKTJLXyciJEdfVS02OE9cSSkjI18oQVRBX1IoQCc/XEQoQVdfKEI8RV9VSTk2L11NOTYvX1c9JywKK01fWypISS9dLDRVL18sQ1hdX1hGMEQvXT44NjtfPDdBTF9ZKig/T14yQUgnXz9HLUxfWlpCRF9fN1IrT18KK00+RlFDX11HLVFPX0VUTENfQCcpT19SSEEoP10hLjNXXzI0KSlfVklDNz9dRzhFV18zVD0lX10vJE9fXUEKK003JiNfLjNRJ19WLUY8T10jMCQ7XytCPEdfUkxEKS9cTioyM18qIiw9X1ctTzlfXl1MOktfVUwzIV9STEIKK00oT1xBJyFTXyhRUDxfUkhDKF9cSykiM18sUkhKX1IkPCcvXEQnUV9fUywjIV9SVEQpL1xFJ0FbXylSIEAKK01fUkBBKD9cSCcxU18oQiQ6X1E4NihfXEkpMldfJyFUN19cSk1KP11TPCY3X1MrIk1fWyJISS9fP1VdN18KK00tQlxPX1IwPyg/XFAqIjtfPicpQl9YMVg9L18+U10jXzsmOUpfUkBCKU9cRigiM18nMUxEX1NZIDE/XFwKK00uM0NfTTpeR19eJzNUL181USxTXzMlNUNfVDEpNT9eJD9HU19CSC4jX107JFAvXipAWF9fMVRBM19SUEgKK00qT1xPKiJDX0taMkNfWk49Rk9eJz1XM19ISTo3X1JcSSs/XEsoUidfSkkqNV9VJSkzL18rT1wjX09bIlAKK01fW0JHSz9dODg2P18yVT1AX1NdJjUvXSczVS9fNERVLV9dUzFVT10zNUYrXzBUXThfWDIiQS9fNFM8V18KK00vNCkuX1FUQyk/XE8sMztfM1RdOF9SOEcrT1xaMCQrXyoiQEtfW1pYUC9dKjNFO18sQzxcX1MkWTBfXV0KK009Ny9fVjxXLl9TMSM0L1xHLlRfXzA1MUxfUyRfNU9dQThHL18oUVBGX1JYRSk/XEgoMidfOCVBPF9TKEoKK00rT18qUEtbX0hJPjBfWEooQF9dLzRVJ18vNCkiX1ctWz8/XFoyVUdfODYhRl9VRTw0L10wM0Q/XzhVTTEKK01fXUMoT09dUThFU19XPF8sX147MlJPXVc6RkdfLTJUUV9TXFgvX10jLzQ3XzlWITpfVllHOD9eTEhJW18KK01XTE8lX1ZVRjtPXSMxJTdfNUU9SF9UPSIzT1xNKTJDXysyOEZfUkxGKD9cViwyT187JkFAX1xGXU1PXzQKK01QS19fKlIoQl9SMD8nX1xGJ1FfXysyOEZfUkhDKF9cTSlSN18yRCheX1JIQCcvXytPW09fKlIoQl9SMD0KK00nP1xCJlFPXypSMERfUjQ3J19cQyZRP18oQUxCX1JYRio/XEAoMUtfU0sqTl9XLVI5X18jSjo7X04rLk4KK01fXVc1VF9cVitSX18oUVhAX1NcVy0/XjVDV19fPCYxQF9dSytTL11FN1YvXyoyLEdfUiw9KD9cQCdCP18KK00vM10kX1Q1IjA/XlVLWj9fVixLJ19dJyBSL10hMkVDXzUlRUVfWSIqQi9eQEY5R19YXSctX1c9UD8vXSYKK00xVStfKiIsRV9SSEUpX15MSTo3X0UoUipfWE1ePz9ePEQ5O18pMiBGX1JIQik/XV89Jy9fNkVROl9cMl0KK01PP15WTFsrX08qWlZfVFU1N19dIjMlS18yNFlAX1Q9LjUvXVE7JlNfWE0/PF9UUS82X1xZMTRbX0EoKiQKK01fXUszVF9cWS9ES18vM1hfX1U9OTcvXF0vVDtfKiI8TV9RMDgmT1xEKSI/X05bNl1fVCkmM09dITFET18KK00sM0UjX1kmKUFfXz9UXTNfNVZFV19TPS04X1xHLyU3XywkNT1fVEE8PC9cNygyX18nMVxCX1I4RSkvXTAKK00xNEtfLCI8Tl9RXDonT15FR1k/X0wqNj5fWFonQD9dTTtWV187RzlaX1U5SEMvXSg0NitfNCVJK19UUSwKK00yP10zM0RbX1hdLypfVj04NF9fQVRNK19ZPSMrX1ZRQDg/XFEqQydfLjMsW19TUFgwP14rQEdPXz9HNU4KK01fW1pSSz9fQFMsM18zNDktX1NMXTMvXSkyVUtfLkM4X19TIEgqX1xMKTI3XytSSEVfUlxKKS9eL0JYL18KK01TPCZaX10rIE8/XE4pMjdfKSFcP19SREIoT1xKKFIvXyoiJEFfUjxEJ19dRDZVN19QSy5OX1xTIE5fXE0KK00pMi9fKUFcP19SMD0nP1xKKFIvXyhRRENfUiw8Jy9cQCYyJ18qIiRLX1FcRCgvXl1JSidfPldNUF9cIksKK01JX18mUDtTX1ZdLzFfUzBNKz9cRCdSJ18vMzRTX1pKREUvXTUyNDdfWV1DOV9USSQyL1xJKFI/XyhBUEAKK01fUiA+KV9cTStTM19CKDYkX1QgWixPX0JVLSdfUjtDIF9UTTQ4T10kMjU3X0U4Xi1fWi48Ry9fRlUtI18KK003JTVBX1NIWzFPXE0pUk9fLCJITl9aSkVJX1xbLUM7X0FXTVxfWU4yRj9cQScyN18oQVBAX1IsPSZfXEsKK00rMktfLVJYTl9SIDsnX18wUTxLXzVWJUVfVE03N09dKTQlU180VU0/X1ZVSDovXz5UXUNfMCQtL19TXSsKK001L1xULEMzX1M8OyZfU1EhMz9dKjFUO184JiVCX1QtKDM/XTAyVF9fKzMkU19SVE0sL15KSSpTXzA0NS0KK01fU00gMT9cSSwzT182RSkwX10jJFE/XipDOFtfP1deIl9ZXj1JT102NzYvXytDPF5fU0xdME9cTilSP18KK00sMkBIX1syR0hPXEopMj9fKCIgSV9UUScyP14nQSdHX0k6MjlfVj1MOi9dTD0nQ184VzleX1g6KEM/XiIKK01AR19fMVQ1Il9VSTU0L19IVl07XzZVJSdfXjM3VE9fQlNNP183RSkzX1MwUSk/XEwqIjtfMSNNIl9XSU4KK005P14uQTc/X1I7UltfXVcpUT9dIS9UJ18sMyReX1QxJDQ/XSgxVFtfLCJISF9SSD4nX1xTKVJDXy1SWEgKK01fWUItQU9fOFI8M19UXCsiX1JIQik/XEMnQiNfKUFYQV9SVEQpL1xOKUIzXy1CVEdfVllJOF9fOlIsN18KK01TW1peX1JMRilPXEUoIiNfKSFcP19SQEMoX1w0I1EvXyUhIDJfUTgxJT9cOCRRP18sIjhCX1sqRUgvXSMKK00wM0tfTksiTF9dLydQX188VD0jXy0iXE9fUjxCKS9cWC0jK19PWy5EX1REXy5fX0VWPUtfMENUX19SOEIKK00pL1xAJlFfXyhSOFFfVCkjM09eSEcpP18tIkBEX11bMVQvXyZOO1tfLyRBMV9VOT04X141RChPX0ZZMjQKK01fXk8+Vj9dMDQlT18vNCErX1I4QShfXEcoUjdfKjI0R19VOTI1L11HOEYzXzRUXTFfUiw+KE9cSylSR18KK00qQjhEX1Q9JzEvXUc2JVNfQSgmJ19dQzBUX104OCZLXzM1OT1fVEEvNl9dNTZGI189Jk1LX147OVdPXSMKK00xRStfNSVNQV9UOF4wP187U10rXzAkOTBfVyFTPS9dSTomX18xVEkrX1laOkcvXFQtQ09fKzJQUl9aOkIKK01KX1xWLjQzXytTKFdfUlhUL09eP0RJJ19MOV5BX1ZNPzZPXTw1VSdfOiZFQ19WWUo4T11dOlY/X1BbKlgKK01fXTssUi9fMU9bU189RiU/X1pKQUg/XEQoUkdfL1M8W19SOEQoP14rQ0hDXzlWUUpfVSU1Nz9dUTwmX18KK00/R1FXX1U9OTVPXTA0NE9fNFUlKV9eOyVVT11OMiZHX1crNzhfX09CVz9dNTIkV18qMihMX1JERixPXFUKK00tNCNfPkctR19ZNi0/P18rT1tLX1ktIyxfVD0kMk9cUyxUI18uIz0kX1U5NTcvXEkoMV9fLEI4R19TLEcKK00qL1xUKkI7X0Q4NV5fXUcqUT9fJU1LO18qUixGX1IoPSdfXEUnMiNfK0I0RV9STEAnX1xWKkI3X0BIIVkKK01fXSsgTz9fMlA8J18qMjBEX1I0QCgvXEYoMidfKEFUPV9RUDcmX1w2JDE3XyVRKDZfUUw2Jk9dJS0zK18KK01JWU42X1RZKzFPXkZIKVtfVzxfLF9dPyxSX1xQKzJTXylCJENfUyhOKy9fJE1KP181NFUpX14rOVY/XFoKK00tMzdfKUIoRF9RSDgmX1xDKUMnXzBENTFfWjo3RD9dMjEkJ19YPS80X1s+TExfXFwyJSdfNUVNQV9ZRjMKK01EP14wQjhHX1o9UzdfVDkmND9cWC5UO18pUixFX1I8Qyk/XEUoMi9fKUIoRF9SVEkqX15OSkpTXyhRXEEKK01fUkBEKU9dTTglN19AV01LX1laJz5fXVA4VUNfVk0rMF9VLTc5T1xNLTNfXzE0UThfVUk8OF9dXT0nM18KK01aPUs/X1Q1KDUvXS80NUNfOCU5OV9dWy9VL10kMVUrX0NJLjNfVzFSPl9dJTIkR19SPDMkX1MwUy5PXEwKK00qUytfRklCQV9TLFQvX1xYLlQjXykiSFRfWk4+Rz9eTkZJU19DR1VXX1chRDc/XSIuUzdfREgxW19XTUgKK004L18rT1xDXzAzXSFfU0BTK09dRjZVS18vQ1BZX1JITCpPXFYtIztfKCFUQ19TOFcuL11UPic7XzpGVVIKK01fWUY2RT9dSDlGL188JzVRX1UxNjRfXTQ1NF9fWitPP19YQS5IL15GOS0nX1FZUzJfVVEoND9cVSYzL18KK00xUyBbX1M0TiovXik/N0dfRkhGNF9dMyhRL19NVk0zXzRUXTdfUzxXMS9dNDRWI182VUlBX1JIQigvXEsKK00nUiNfK1IsRF9TVFMrX14jPVcjX1UsNyBfXDJVTT9cSyhSO18oIUw9X1JEQSkvXFQqUk9fLDI4RV9TUFAKK00qX14qQignX1csSydfXTMjUF9cTioyR18pQiRBX1IsPidPXEopMjdfKVIoRl9RSDUmP1xBJyIjXychPDsKK01fVTEkMD9eNkJIN184ViE7X1pGQ0g/XztTPEtfVTxLKV9TJE4rP1xIKFI3XysyREdfXDZXSi9dPjVFK18KK01ZLU87X1NQVy1fXEcoUjdfJzFMPl9UISMzT1xbL0RLX0wqJjtfVV0xM09fRFVNP19LOiZKX1QpLTYvXTMKK001VV9fN0U9N19YJVo+T19EVV0rXzNUXTpfUlRQLl9cRCgiK18pMiRDX1IsPyg/XEQoIitfKEFYQF9SLD8KK00oP1xGKEIzXygxVD9fUkxDKD9cUywyU183NFkuX1pCPkZPXzdTXFdfM1UtQl9STFMvP10gMVUvXzclWUUKK01fWF4mQU9fRlVdU18yNFE4X1UpNDZfXUM2NVNfVkxPMF9TSF0yL11eQFgvXzg1XUhfVEUsMz9fPlY9R18KK00rUlhVX1JcTi0/XjRESU9fLyNVKF9TVSAxP1xOLSNbX01KRkhfXCJMS09eSkQ4S19ISEFdX1pKNEMvXlkKK01HWTNfQ0ddUl9cSyNTX1xQLFNbXyhSOEdfWFVfQC9eM0A3V19XTE8lX1RIXC8/XDwlQVtfKDFcQl9VUT4KK002X11LO1ZXXz0nJVBfV11ePz9dVz8nS185Vk1JX1VVQDg/Xz5WXF9fKzJISV9TIE4tX1xYL0NLXz9XWisKK01fVjkjQk9eQz5aX18xMlErX1pKKk8/XVs2KUNfVFwrLF9eUzpUL10qMURfXy9DWStfVS0yN19cXS8kL18KK00qUixBX1JcQykvXFApIjdfL0MwUF9XKUY3X183UiwvX0spVj1fUkxDKU9cQCZRV18pUVxCX1MsSipPXE8KK00pIi9fLDI0QF9YRidAL189UlxDX1RMJyFfUjhBKD9cRCdRX18qIixDX1JMRilPXEgoUj9fKjIwSF9SOEEKK00pP1w/JkFbXzxWLUBfWFIgPl9dWj1XK19JWiY/X14nM1QvXypPW1tfK1JQS19SNEAoT1xMKiI7X1ErOkcKK01fVzVNOj9fR1dNW18uQzRVX1I8Qyk/XEQoQjdfNEU1QF9UMSc0X15aSlo3Xz02PURfXkc7Vy9eNUI5K18KK00wJEk4X1VRPzpPXkNGWVtfR1lCOF9eQztVT10jMFRbXytDJFxfUkhGKi9cRihCM18oUVxBX1IwQChPXEIKK00nQiNfKEFYQF9SIDwnT1xCJ0IjXyVRIDhfUkROLS9fKlE8T19PKzJYX11TM1RfXTE1NjNfKDJEU19UIScKK000X11MO0c3X0VYWi5fXVMtVE9dLjQ1V187JllVX1c9TTwvXz1TTS9fMSQ9Ml9YOitCX11BN1ZDXy9EJSIKK01fXDshUD9cRylCV18qUkhRX1kuMUZPXFcuJC9fLVNIX19SOEwtT15YSlpLX1M7RltfWz5CRU9fJEopS18KK01OWVoyX1wmRUVfXjtCR0tfVSxDN19SWE4wP1xBKFJPXy4zNFdfWFVcPU9fOlBbP18wMzRWX1I8Qyk/XUAKK003RUdfQSg1X19YQihCX140Q1kvXzwnJVJfVEkzNF9dNTZFS19BWEYsX1w7KFNfXE4xMytfMyZdN19XNi8KK00+T1xIL1JTXygiUEtfUyRaLF9cVzEjR18qIzBdX1NdIjUvXypQTDdfWV1DMl9TTFsxL1xcMCRfXzJURTkKK01fVDkiMk9cTikiP18rMixGX1I8PidPXFAqQkNfOFVRNl9dWzBTP15JRilDXylCLEJfUiQ+Jz9cRygiI18KK00rQjRFX1JYQihfXFEpIi9fMSQ0X19dPyhSL18sTltPXyoiLENfUjRAKC9cRCdRX18pQiRBX1JYRylfXEsKK00qMk9fLkNcX19RXDonT11PN1U7Xz9WXUxfWSYoQE9eREdZS19aLUc6X1tKTktfXE0qQkdfKFFYPl9SMEUKK00nT15PSjonX0RYPiNfXis1VS9cXi4zR18oUVxBX1IsQClPXSQxVStfMSRBKl9bUkxKP14zQEgrX1ldQzgKK01fWC1dQl9cVzIlO183VilNX1lSNEYvXzpTTEdfWU0zNl9TOFcwT1xOLCM/XyoiMEZfUjxDKT9cQidCI18KK00oUVxBX1IoPigvXEInQiNfKDFUP19SLD8oP1xIJzFTXzFULSVfVSUwNU9fIE48I19aTUdDX1VVNjlfXF0KK00wRTNfMERFO19XVVZAL15VSjsrX1ldV0xfVTEyOT9dQTg3I19DKCorX14jM1YvXFwvVDNfQ0kiLl9VIS4KK001X10iMTQ7X1NMTypfUkBJLC9cSypDI19COEIuX1MsVC9fXE4sI0NfK0M4Wl9cMlhOP19GVU1LX1Q8JlgKK01fXS5ZSy9fN01aX19TKyJMX1lGLUFPXzlRLT9fKFMlIF9SNEEqP1xGKlMnXz4nQVVfWVY4RE9eMEJYT18KK01AJ01bX1hCIT5fXUc4JUtfNyVVRF9ZNjBFL1xIKkJXXy1ULSdfU00kMS9dRjpWT19PXDMqX1NZKC1fXFYKK00wQy9fK1QgUF9UUUM0L1xZNSQvXyMiRDdfU1k/Mz9cUzNDV18vJUkqX1lCTUg/XzlUPFdfMlQ9L19TMFUKK00wL1xNKkM7XzBTWSBfUjg9Jz9cRSZRW18pUiBAX1I8Qyg/XS4zVENfVDw/I19ZUilCP1xGJzFXXyhBVD0KK01fUjxAKC9cTChSL18rQihDX1MoRSkvXVs+V0NfVVxLKV9cQldNX1xIKFIvXykyIEBfUjxCKE9cSSkiM18KK00rQjhEX1NUXy8/XT05JjNfJ1FIPl9XTVA5P11INjVHX0xKTkVfWU45RS9fRFU9R19NWk5MX1MsUCtfXEcKK00oQitfKDIoO19aWklIX15NR1lTX1k9QzdfUyxOK09cRSgyL18pIiBIX1NEXDFfXFkvQ1tfUCpWTV9aPjYKK01FT19OV11fXzhVVUtfU0EpNU9dIzFUX19KWiJFX14nNFNfX0ZUPTtfLzNVKl9SIEIqP1xIKFI3XylCKEQKK01fUjRBKF9cQidCI18oQVhAX1IoPigvXEInQiNfKEFYQF9SLDslX10xNCRfXy8kNSxfWEIqRD9eK0I4T18KK00yNF0xX1NNJzMvXSAyJStfPidJX19UOSczT1xIK0NDXyciNFNfVFE1NT9dWT5HT19RXCcpX1NEXjJPXisKK01COE9fM1RNNF9UKSUxT18pUUw3XytTIFdfUkRJKy9eOEY5S18vI1kmX1M8WDBfXE8tU09fT0sqU19eKzMKK01WL11XPEZTX1I7WldfXV8yUz9eOUNYT19GSTYvX11bJ1ZPXFUyJTNfKUIgSF9TSSIzL1xOLFNDXzomRUoKK01fVChdMD9cVS0jT180RFEqX1s2SUhPXT02JUNfRCgyJ19TSFUuX1xBKiJbXzBUNShfWkZESS9fJFBdI18KK00nQVA5X1IsOydfXDcmUUdfJ1I0N19TWSMtX1xZMEM3XyszSE1fUixOJl9cQjBCV186OF4gX1w7JVEvXSkKK00xJEtfMCNZJ19TNE8tX10gLjNHXytCKENfUjQ7J09cSykiM18pMiQ/X1IgRCcvXyhQW1tfQFchUF9TKEQKK00pP1xEJzFXXylSIEBfUyxKKk9cTSgyK18sIixCX1g+J0EvXzpTPFNfT1paTl9SREQpL1xEJ1FfXysyQEgKK01fUyBLKl9cVitCU185Nj1FX1VdRjlPXEMnQitfPUZRQV9WST03L14sQkgvX0MoXilfXj84Vy9eUEkqN18KK00rUlBLX1I4QSg/XEsqQi9fSzo6QF9cQlpNX19LWC1fXywyWE1fUiw/KD9cOyVRX18sIyxeX1NRIzBfXl8KK01LSltfT1siUF9fK0VZL11OOic7XzI1OUFfVTk3N09eUklKR19YPTcuX14/MlVfXF8vVFNfKCIoSV9SNEAKK00oT1xDJ1InXyhRXEFfUiA8J09cQCchW18oMVQ/X1IoPigvXD4mQVNfKlIsQV9URSszT10mNEVPXzZGNUwKK01fVDEvNk9cWTBUW18qQyRfX1MoUTNPXFApVi9fLSJJT19TXFY/L107NDlLXyYhNSlfVjU/Ql9dIS81V18KK00uNCUrX1k2NERfXTg1JVdfMyRdMF9dRzZVP1xQLEM/XywjJFJfVEUrMj9cUCxDR18sMyhdX1I8TyxfXyMKK01NW0NfWS03Ol9XWVE7L18gSlpHX1csRylfWDlSO09dVztGP19VK1cwX1EwRyxfXEUnUj9fLVQhLl9TRF8KK00xX1xBKFI7XywiUFRfUiREK19dLDIkS18+JklBX1c5SzkvXjJAOCdfMUNVJF9SLEQqX1xeLyNfX01KTkoKK01fXVcuWU9cRypTL18uVEU4X1I8SyxfXFYtQy9fMEQgXV9TXFsuP1w7JFEnXysiVEdfUlRTK19dOTg1V18KK01VPSsxX1NAWTAvXE0sI1NfLkM9JF9WRUQ6L1xMKEI3XytCMEdfUjg/J19cRihCI18vM1BVX10/K1FfXUwKK002VU9fKUFcP19SJD4nP1xHKCIjXytSOEZfUlRBKE9cVSoiP19DSForX11bMVQvXlNISitfKjIwRF9SMD8KK00nX1xIKFIvXypCNEVfU0BQK09dRTlWN184RkVJX1IoPSg/XjlDKCdfUFsqUl9YLVw9T11JOVYrX1k9OzoKK01fWlZBSE9cSSlCN18pMiBAX1NAUys/Xl1NKltfVSxDJF9eMzxWT1xYLTMzXykiIEJfUiA8KS9cUi00I18KK00vRDUlX1wqU0xfXyxPW1tfW14zQ19XJUo9T10nNFVTXzdFVUNfW0ZLSy9fSVZNM19ZPSM1X1Q1JTRPXDgKK00mQidfKSFcQV9SOEIpL1xDJ1InXyghUD5fUiA8J09cQScxX18oQVhAX1FYOicvXFUpUkNfMlQ5LF9VNUAKK006X10xNlY3XzFUVT1fUkBILV9dQDc2X188Rlo0X1IsQi4/XDAkIV9fIzBUOl9QSCklT1w7JjNLXysiPTEKK01fU0RUNU9cPygyQ19JWjZCX1VFNTdPXSIxNDtfVU0vMl9STE0sL1xYLkNDXy0zPFRfUyhVLk9cUCwzU18KK00qIyBUX1w6Wk5fX0dWLVdfRTddVl9cRlBKX19FUyxPX0dIOVdfV01ROV9fN1AtL18oIyxfX1IkOyhfXE8KK00tM19fOEY5SF9SNEcpP1xRKyJbXygyIEdfVFkmMS9eKD42U19CJ1VWX1kmIkBfXSsxJE9fKFI0TF9TNFUKK00uL15BRylTX1MrUzhfUkRKLD9cNCdSO18mUVREX1IoQis/XEUqQztfLyQxLl9RLDooL1xFKSJLXypSSFAKK01fU0RWLy9cPyYhQ18vM0UiX1NMWzJPXSoyRUdfNFUhNl9STEMoP1xYKyJXXypBWEFfUkxEJ09eN0JYK18KK01WLFMlX1VFLjM/XEopQkNfKCFMPV9SSEMoX1xKKFIvXyoiJEFfUyBGKE9eKUJIM19XTScwX1oyMkUvXEgKK00oIi9fKVFcQl9SSEMoX1xLKTIvXytSREdfVlVOO19dQDk2S18pQiRDX1oyMUE/XyBLOjdfUVtOVF9cNlkKK01ML18oTls7X0pKLkNfUkBFKl9cRShSO18xQ0BVX1s+UEpPXz9ULSNfWk1PPF9TMFEsL1xEKCIrXydBSEIKK01fUzxaMT9dJjNFK185RVlBX10vJ1JPXVs+N09fPkdVXl9XNVs/P11IOTZPX0tKLkhfXy9BV09fOFM9M18KK00yNFk6X1FEOig/XEgoQiNfKUFcP19SOEEoP1xBJzFfXychUD9fUiA+KD9cQSdSJ18nQUw6X1Q4Vy1fXSEKK00uVC9fMVRdP19VOTs5X10sM0U3XyMwLCxfUkw0J19cUigyP18lMEg3X1IkNCdfXEclUV9fJjBUNl9SJDoKK00oT1w4IlFDXylBQEdfUiA6KE9eNkJIT18xJCkrX1Q9KDI/XzFULF9fKyJYUV9UUS4zL1w5JyFXXygiNEoKK01fU1EhMV9cSStDL18yJC0nX11bNlY/Xik+Jk9fUDpOQl9eRzNSX144QSc7Xz9XMUlfXT5bU19cPCtDQ18KK00rIjRMX1I4US8vXjFEKF9fKjI4RV9TOFAtL1xJKFJPXzFTXFtfWU4rPl9eMUFHX19EOC4kX1RFJDJPXEIKK00pMyNfKFIsRl9aWkxLT186UF4jXykxUENfUUAxJi9cQSQhS18oMUhBX1FMOykvXEIqIyNfKzMgW19SNEQKK00qT1xOKzMzXzU1JTlfXTssU19dIi5UN18uU00qX1UtMzgvXTMzRTNfLCJARl9SJDUmL1xMKCInXzNENF8KK01fW15TSy9fPFNcS18xQ1hcX1JAQilPXEMmUVtfKjIoQl9SND4nT1xJKEIrXyxSREVfWEYqQS9fPlQ9I18KK01IKFowX1JAQChfXEcnUitfKiIkQV9SUEYpL1xQKyJLXzdVXUJfVVVCOV9cRSgiK19MKio5X1Y1ODRfXkYKK01HSVNfSUlSOF9cLldML14+RUkzXyoiLEVfUkhCKT9dNzIkQ19FKSovX11bMlU/X0JUXUNfK1JYTV9SMEAKK00oT1xCJ0I7Xy1TSSVfU1UgMD9eXE0rK19WTE8rX14rPlcvXTU2RTNfLTMsVV9WITk4L15DRilXX1s9PzgKK01fXFslUy9cXDA0V18nIUxCX1YpOjYvXTUzVFdfJkE0NV9SLD8oP1xBJ1InXychSDxfUVw9J19cPycxX18KK002JFUsX1RBKTQvXSY0VjNfMDRBNl9SPD0sL1xdKlJXX0pZKiFfVzk6NV9dOi8zU19GJzVOX1g1QTVfXiQKK004RV9fKlFAMl9ZOiE/X15HRDkvXyUgOCNfUzxJKU9dIjEkU18yNEkrX103MlQ/XDwnQidfKyJUTl9TXSIKK00xX1xQLTNPXysjJFdfUjBHKy9cPCZBV18nITw5X1hBVjsvXyFKWitfWk0zLF9ZNiA9L11XO1Y3X1U7VzIKK01fUUBKLi9cTCkyX18oUyBdX1oyQEdPXEwqIktfLyM8XV9SXEgsT10gLiM7X0gpMiVfWClZPF9eKT83W18KK003VU1DX1I4SS0/XFsuRCNfTys+XV9cOyFWP1xSLTNLXyciIEhfUSwyJ19cOyVRR18kUSw2X1E4NydPXDwKK00lUi9fJyE8PV9RKC4lT1xKKSJTX1QsMydfVS0sNU9dIDAkX18wNCUuX1UhKzQ/XEwoQjdfKlFcQl9UUSEKK00wL1xXKyJPXzYkVSxfWT4vQz9cVCsyV18pIVxBX1I4PydfXEspIjNfKlIwRF9SQEEoP1xSKiIzX0I4SiQKK01fXic0VF9eKz43T18oUUw+X1I0PSgvXEspIjNfKzI8RV9SVEkpX11AOCYvXzRVQT1fUjxCKS9eO0Q4V18KK00pIVQ9X1FINyc/XEMnQitfRihSJ19aOjtGT103NCUjXysiIDxfW1pSS09eIUBYJ19LWjZIX11LL1UvXFIKK00sIytfKTIkQ19RXDsoX1xWLjQzXy9DXFlfXEZfTl9fQlRdM19YXTsxX1UlLzFfXFwuIztfUywnJl9ePzgKK01XL19VV11XX1MsLypfU0BdMj9cOyZCJ18sQkhIX1M8UStfXSIvM1dfJjE0N19SJDomT1xFJ0FbXyghUD4KK01fUiA9KF9dWjxHI18vI1klX1Q9NzlfXFsxNS9fLjQpIl9RTDYsT11JNUgzXyUwUD1fUSw0Jl9cMiNBO18KK00lQSA4X1EwMSdPXDclQVdfIkA4Nl9TJEswP1w5JTFbXykxUDxfU10jMl9dKTFUR19VTScxX1IgPyk/XE4KK00rMy9fLDMsWl9SWFIuT1xQLTNPXykyQE1fUyBOLD9cQSchW19CV01SX1wmTUk/X0lVLSNfRig1W19XJU0KK005P18rTUxTXyVSRFdfUjg+Ki9cPykzN19RW15dX1JUSCpPXSQvVDdfKzJEUV9TQFEsP14/RThPX0E4MV0KK01fWFYqQj9dRjlGX18qQlReX1Q1ITI/XyRPPD9fVTxHQl9UPSszP1xHLFNTXyUhWE1fUyBQLz9cPidSS18KK00mQUxGX1IwPSlfXDgkMUNfJjEsO19SWEcrX19EVT1HXzFUISpfU1RdMy9cVi1EL18zVEkwX1JIPilfXEkKK00nIidfKzIsP19SXEMpL1w6JSFDXyhBUEBfUig9J19cSihCN18pUiBAX1JEQihPXEspIjNfKjIoQl9TMEoKK00pT11FOUYjX1gtLzJfWCVPPD9cRScyI18pMVRAX1JQRSk/XEopIitfKlI8RV9VXT84T105N0YvXychPDkKK01fXEJcTi9cRSdBW18oUiBGX1IoPCgvXDUjQFtfJjEwOF9WQUM5X1xIJ0FLX0taIjpfXCZfTV9fJE4rL18KK01QKypPX1M0VCxfXEMnUidfJlE8P19TPFoxP10tNCRLX1I8LydfXjM3WE9fRlVdQ185NV01X1ZBQDcvX0MKK01VLUNfXE1fP19fLz1WX18lTywvXy8kJS1fUjREKl9cXi1DM182NS0xX1ZRRzlfXEEnMV9fPDY9Q19STEAKK00nX1xFJ1IvXydBVERfWS4nQi9cUSwjP18wNFE9X1NEXTMvXFwyJFdfIUBMR19WOUNGL1xZLUY7XyYhIEwKK01fUUwsJ09cPiQhR18nUTg9X1FMOSxfXTc1WCNfNEUpWV9QXC8nT1xFKCIjXytDMFxfVC0hMF9fO1RNK18KK00qQkRQX1JYTS0vXFYuJCNfKlJYWV9SOEosT1xBKSJHXypSRExfU0hVLV9eX0wqS19VTC5dX15XOFVPXj4KK01CWC9fQTghVF9dQyBTX10gM0U/XytBVENfVzlWQT9fNlFcP18uIyBTX1ZdTDxPXFUtI09fLTMgUl9bTlMKK01LX14wRVkjXzA0MSVfVUk9Oi9cUy4kS18rUkxUX1oyPUo/XzRRLUNfMTNZJl9SLEApT1xBJ1JDXy1TPSIKK01fU0RaMT9dMzUlX18pQjhPX1JASCxfXD8nUkNfMiQhI19dWy9TX10jL1RDXzBULTJfU1BZMU9dIC5UJ18KK00pIVA/X1JEQCgvXFIqMkdfLFJISl9RRDMlX1w6JTFPXydBRD9fUVQ4Jy9cOyRRO18oIUQ5X1I0PidPXEgKK00oMidfLCJARF9ZJihAT183UiwvXzpFWTpfUjxCKS9cQSZRX18qIiBDX1MkSCovXEQoQV9fN0YtQ19WKUYKK006L14qQTg3XzQkQSZfUiA9Jy9cPycxX18oUVA8X1I0PSg/XEEmUV9fKUIgRF9SSEIpP10vMjQ/X0Q4WikKK01fWVI3RD9eVEwqQ18tQyRRX1MgSytfXV8/SDdfLSNBIF9WMUY5L15bTUtLX1ctOz5fXTM0VD9eXVBbX18KK01KWyZTX10zMVVfX0xWXU9fXE1TNF9bRlVNX1xfNCU7XyUyMERfVz1YPj9eWks6Q183NS02X1FYPCdfXD0KK00nIU9fRChKKF9UNFktP1xDJ0IrX0k5RjRfWClZPj9cTywzR18sQzBcX1JUVTE/XFoxNTtfIiBcQ19SND0KK00uL11KOSlbXzQ0WjBfU0BYPD9cOCZUS18mQShNX1JcSS9fXDQkMjNfJVE8Ql9RQDMlX1w7JiFbXygyJEQKK01fWkJISl9cSytDL18rIlhTX1M4WS9PXEwrQzdfKFJATl9RWEEpT1xFKVJLXyxTJFNfXCJWSy9eUkdZP18KK01XTDsjX1kuIT1fXiU9JltfSzlOP19WUUo7L14iPlc3X1ktPzZfXi8uUy9eUEdZX19OWypSX1I8RSovXE8KK00qQltfLSMkUF9SIEYqL10/OUY7XysjMF5fUyhXMj9cUCwjT19UXE81X14nNFlPXFIqQzNfKTIgRF9RODIKK00mT1w5JiFfXydRWEVfUVQ8KF9cQCdSO18nQVhLX1I8SCtfXUU3RVtfV10jMV9TPFUvT1xQLCNfXzEjWSwKK01fVChbME9cTSlCO18pMVg+X1I0PidPXEImUU9fLCJITl9RRDQmL1w1JCEzXyVRKDZfUUgyJT9cQiZRT18KK00qUjBEX1JMRCkvXFYsMydfKTFUQF9XWVI9P11BNjVTXykhXENfUiQ8KC9cSyhSO18rUjhGX1I8Rik/XT0KK004NV9fPyghXl9ZSjNEX1xPKTJDXydRTD1fUUQ6Jl9cPyZBU18oIUg+X1IoPCgvXD8mMVdfKFFUQV9RQDMKK00lX1w8JVFPXycxSDlfVTEyM19eL0JIU18zVEkuX1FcPik/XF0wNEdfNVVROF9cIyJRP18zVD4nX08rPykKK01fUiw8Kz9dKTBVJ19VPFs4X15LPVcvX0pVTUNfSVlSSV9USSI1T1xcKFMzXz1WWVVfXC5US09dKzAkN18KK00oMVhEX1ZRSzpPXFAqUjtfRlhaLV9SREMpX15YSzo7XyohWDpfVkVIO19dJDFEV18mUVxHX1M9IDNPXSYKK00zViNfL1QpLl9RIC0mT1wpICErXyhBPE5fUFgnJj9cSSkjI18mUUxEX1MkVDAvXEgrU1dfKSI4TV9RRDkKK00nL10pMjRTXyUhMDdfUUw9KE9cSSsjJ18rUyhXX1JYUS1PXEQqMl9fKFI4S19SOEgqX1xdL0NfX09LMkkKK01fWy4/RV9fRlNcS19EWCVXX1hZWzxfXyFMSldfOjVdO19VWTIyP19OV11LX1ktLzNfXT8oUj9dJTAkM18KK00uM0hbX1IsQSdPXUE3VUtfKlMgTl9SRE0qX10nMjUnXy0jMSdfUzBPLl9fMlFMX19WLE89X1JYRiwvXFEKK00rIyNfJ1FMQ19RTDcnX1xCJ1I3XycxSEBfUyBNLF9cUSwzS18lUTA6X1M8UCwvX0NVLUdfLlNBJF9TXF8KK00zT1xeLiQ7XyxSUFNfUjg/J19cRygiI18rMjhGX1I4PydfXFYrQydfLEJITV9TOE4sP1xCJkFXXydBPDcKK01fUkhDKF9cSShCK18qMihCX1I0QCkvXD4mUidfJyFEP19RVDooL1xIKFJHXypSOEpfUkxDKU9cTSkiM18KK00pIixCX1Y9RTgvXUY4NU9fKiFUPF9bKkdLT11TOzc3XylCPE5fUVQ8KF9cQicyJ18oIUw/X1FYOSc/XEEKK00nIiNfKFFYRF9SKD0oX1w/JkIjXyZBMDxfUjQ/KF9cQSciI18pQjRMX1JMTy1fXkJGOUdfSVpGTF9XUjkKK01JP108QVlfXzAjTTVfVkUzOi9eT0dKR186JVlBX11TL1NPXi1DSTdfLlRNNV9TPSIwX14uQ1kjX1U8OyAKK01fU1hTLi9cRykiS19GKS4uX1leNERfXjZCSFdfJ0FEO19cOlpMX1xaLCJTX09bWyVfVCUjMk9dPjclW18KK00tIzhdX1NRJzRPXFwyVSdfJ1JEP19UNSgwT141RSlPXyoyXFlfVVE/OS9cOygiN18rQzkgX1FAQiwvXF0KK00xRFNfLSNIXF9UISIxP1w5JVFLXyVRRD5fUlRQLT9cSSsjJ18rQyRWX1IkRisvXEIpMktfK0MgU19TRFoKK00uX15eTSpHX0s5RjFfXisrUU9eLD5HI19GKEFeX1wiVEs/XV88VlNfSik2KV9ePzdVL18uT0wrXzEzSF8KK01fUlxSLV9dITFEO18wVCRcX1hWLUAvXUU5VVtfKkJESF9SVE0uL11XPSg7XzFDXSdfW05RTS9fPlQ+L18KK00qIiBKX1IgOydfXEEnMjdfKEFUQ19RTDYmT1w/JkFbXyoiLEdfUUw4J09cOSUxP19JOVo+X11LL1VPXSMKK00wVFtfLyNRK19UIFoyL1xRKkMnXylSIEBfUiw8Jy9cSykiM18pQVw/X1JQQyhfXFUrIlNfLiJcT19TIEcKK00pX1xSKlJPXypSMERfUjxAKC9cSykiM18qUixHX1E0MCUvXDUlMUNfJlE0OV9RUDUnL1w8JVFPXyghQDsKK01fUkxCKE9cQygyL188RlVHX1Q8XStfXkFEWSNfVEw3MF9WKTs5X1w5JkI3XydCJExfUyxSLi9cRShSO18KK00oIVhBX1FYPCdfXEMoIV9fKDFYPV9SJDwoL1xBJyIrXylBXEZfUVg5Jz9cPCZSK18rUyxbX1lKMUYvXjwKK01IOidfLURdLl9UNT86L1xaLVQzX0RYLitfW0ZKS09dQTZGJ19ZLVdHX1daIURPXSEyNVdfK0JIUl9ZTjYKK01GT18vUCtLXy1SUFFfUkxIK09eVko6M19POlpPX1dVUj4/XEgoUi9fUTtGUF9ZTjFDP18oUVxbXzMkWTUKK01fUTg0JU9dX0A4Q18wVFU7X1NJJjU/XD0rIkNfMyRZM19YXipHL1xILEQ7XydSLEVfVEkrMy9cPigiQ18KK00qIkxcX1NMXTEvXFQuI0tfMERBKl9TTSEwX1xOLDM7XytDJFZfUkRMLD9cSiszK18pQkxRX1JASywvXFQKK00tQ0dfKSI0Rl9cKlhLP15XSFlPX1gsRyRfWE1ZO19eQEM4N19OWk5IX1YtOzY/XTMyVCdfWU0zMF9eKy0KK01SX142QlhLXy0zSFpfUyxYLz9cQSdBV19EKEoiX1dNWTw/XEYpQkdfKTJAVF9STE4vX10zNEVDX0E4NiIKK01fXicvWF9cUSsjI18oQixKX1MoTi1PXEUoIitfJSBcM19RWDknP1xRKyMjXzBTXSdfUkBKK19fLE9cM18KK01WPEMyX1VBNjo/XSYyNU9fMFQtLl9SREEpP1xKJ1FbXy0iREhfUlhDKE9cSyghX18sIkBEX1JQRyhPXFQKK00rUktfKiIsPl9TKEopT1xSKVI7XytSMENfUlhDKE9cSShCK18qQjRFX1FQNyVfXDckQStfJzFAOl9RVDgKK00mT1w9JiFDXypSOEZfUVQ2Jz9eJT5HL189RkU8X1Q8WDBfXFIqM0tfKTFYSF9RWDooX1w6JjI7XyYxSEUKK01fUUA4KD9cSSozK18sMyRaX1JMTCs/XEMoQidfKDFcQV9RXD0nX1w/JzIjXychSD1fUTw1Ji9cVS0jS18KK00lUTA6X1E0NSYvXD8oIidfK1JETV9SLEQpP10zMkQzX0E3OVBfVlVUPk9dN0Q6P18yKEJHX1MhUENfXFoKK005SENfKkMhJl9XITo2X1xXKEI/XykiJEdfWzpPSj9fME47S184NTE5X1JcTStfXy1QO0NfOkZNVl9dSzEKK01UP10hMlVLXzQkWTFfXCJeUC9dJjQlX18vREk5X1E8QyhPXSYxJCdfQSgqMl9SME0vT1xMLTM3XykyKD0KK01fVE0qNV9cTC00L18uM1EhX1NIXjAvXSUyNE9fLFNEW19TPFwwP1xRLFM7XyQxLDZfUyRWLy9cRClTK18KK00oUjhLX1FMQCgvXFAsUzNfTFpaTl9dNy5TT185U10rX1VdIzBfXiMwVS9fRFRNO19QOyJWX1sqQ0lfX08KK01VPUNfV00vOF9WTUY6L11UO1ZHXysiWEtfUjxGKT9eIT9XS186VkVEX1Q5JTJfXEkqU0tfJkFUTl9TJFUKK00tX10lMUQ/X1hNJ0lfUzBTLk9dNTcmQ18oIVxMX1FQOyhPXEIoIkdfKDFcSF9SJD8qL1xSK0M/XyZRWEMKK01fXSMhUT9fOVItK183JU1MX1RRLzgvXF8vVENfKlIsRl9STEAnX1xMKSIrXyoyJD9fUkxDKD9cTClCM18KK00rUkRHX1JEQyg/XEYoIVtfKSFQOl9SVEUoX1xOKUIzXysyNENfUlxIKi9cVCtSX18oUVg+X1JUSCovXFUKK00sIyNfJ0FEOV9SVEgqL1xEJ1FfXykiKERfWE1ePj9dJS1TQ18pQzE1X1EoPi5fXDgmMktfJUEsP19RODUKK00oT1w+JzJLXyZBSEVfUVg+Kj9cOCYiL18lISw6X1MoUS4vXD8nQjdfKCFcRl9RWDwnX1w+JyFfXychSD0KK01fUjxFKi9cSSlSS18kUSQ0X1IkPyhPXEYpIj9fJyFMQV9WKTY0T18jTEpTXzhWRUtfUVhZLk9cKikiP18KK00nRD0sX1YyJUQ/XTo/OEtfSFpaSV9TOFEsX1xNKiJbX01LSlJfXFJaTy9dJy8kJ18qMjxJX1xKXk0/XSQKK00yRUtfVTxLKV9TQSU1T14rQjhTX1IsLyNfVCksNl9cVzBVK18qQzhVX1RRKjE/XiNBOTNfKSJZIl9SOFIKK00sP10hL1NDXzNUWTtfUUxFLF9cUC0jO18qQlhQX1JcUy0/XEcqUldfKjJYVF9SXFEtL1xLKzMjXyszJFkKK01fUkhQLk9cQSkiR18pIkBGX1M0VS4vXyhOS09fUUsyVl9cJk9MP15dSlpXX0s5XkBfWiY1RU9eQUU5O18KK01GOFYuX1ktWD9PXSoxNEdfLUMwVl9VLS4yL11OO0ZPXyZBRDhfUjhFKS9dQjg2I182JT0+X1JASS5PXEQKK00pU0NfLSNAWl9UQSYyL19BVF5fXypSVFVfVEExN19cTiwjX18mQVRIX1I4Si4/XD0oMyNfJCEwQ19VPTAKK002T11JOlZbX09LIlFfXDJZUC9dRTk2W18zRSE4X1Q5KTNPXEopMj9fKTFYPl9SJDomT1xDJyFTXyhRUDwKK01fUkBBKD9cQSZBS18qMihCX1JYRylfXFEqQktfKUFcP19SSEMoX1xNKUI7XypCNEVfUjxCKE9cTSoiQ18KK00qUjhGX1MwTytfXEkpIjNfKTIgQF9SJDwnL1w/KDFfXzMjXF5fU1BVL19dIzlYU181JlItX1BUNCovXDcKK00lIiNfJVE0Pl9RQDUoP1wzJCFTXyYhNEFfUVQ6KU9cOiVSM18nUVBJX1FENihfXEAnMktfLSMoW19SREgKK00rX10oMVRbXydRWEVfUVg8J19cMyQxM18jUFQwX1BMKSMvXDckQUNfMENAW19RWDQkL1w4JkE/XyVBPDAKK01fUzhVK09cQS4jL18zNV1DX1NdITIvXzdSLC9fLEI8Tl9RUD8pL1xYMENDXzk1RTpfUzRPLF9cWC0jO18KK01SS1pVX1I0Sy5fXy9RLC9fLUQtNF9ZRjdGT18tUixDXzAkSTlfU0UlNS9dSjxXL188VyFLX1dVX0NPXFEKK00wJS9fLSQgX19UPSUvT102NTYrXyhCUFpfU1kiMS9cWS8zX18vVC0lX1NVITBfXFwwND9fLVNEXF9TWSAKK00wX1xQLSNTXylSVFdfUiREKj9cRSlSN19ISVJAX147MVNfX1tYTVdfXi1fOl9fS0FXL19dWU4nX15OLz4KK01fX0NBVy9fWVhNV19dLUM6X1ZVSzs/XEYpQkdfLiM0UF9ZLjJEP1xFKFI3XyhCIEJfUiQ/KD9dMzRFR18KK00rQl0gX1IwRy4vXFYuQ1NfM1RVL19eMzFZX1xJKUJTXywjOSBfUzhTL19cQyhSU18kUTA/X1EsNCdfXFsKK00vJD9fKlIwTF9SWEwrT1xfLSMvXzZFKTZfVUU5Ny9cVC1TQ18rMyhSX1I4RSkvXEInMV9fKTIgQl9SKD0KK00nX1xFKCIrXysiMEdfUjA8J19cSSgyM18qUixGX1JERClPXEMnQiNfKiIsRV9SOEEoX1xGKDInXygxUDwKK01fUjA/J19cRCdRX18mQTQ1X1IoPSc/XEcoQitfKSFcP19SKDonT1xDJyFTXygxXEJfUUBBLE9cMCVSR18KK00nQVhHX1JQSStfXEAoIkdfJ0FMR19RODEnP1w3JEFbXyVRKD5fUTg0Jz9cOSVSI18nMUxEX1FcPSlPXDoKK00mQi9fJVE8QF9RUDwpP1xTLFNTXzVVMTpfUkhIKl9cMCNBJ18mQUA7X1YhQDc/XVg+Rz9fLyNdIF9RNDcKK00mT1w+KCI3XzBUISZfUURGKV9dOTZVW19ROypSX18rNVQ/XFcpUl9fKFIsRl9YRitAT18rTVtHXy0ySE8KK01fUyRPLD9fLlBLR187VzYlX1xTIVAvXFsyJUdfRChaMV9cSyVRP1xUL0RXXytTTSpfV0VeP09fO1VNJ18KK007Nl1eX1MpIjU/XE0uU0tfNSUpK19VKTE3T1xSLyRLXyYxVD9fUTQ5Jl9cUi1DQ18uQ1kgX1NIXzE/XF0KK00vVCtfMyRZMV9TIFQvL1xFKlM3XygyMElfVk1IOV9eW0wrN19UXEMnX1xXI09fXzRSTDtfVy0rLl9eNzkKK01VP19IVk0/X1k9PzRfXks8Vj9fVlhNW183JVk8X1ZRTjw/XEQoMiNfLlNEW19RXD0oL10mMSQ/XyZBQDsKK01fVU06OD9cPidTI18pIjxYX1MwWC5PXiJAKCtfWT1PTF9TMEwtT1xNKVJfXydBTEFfUkhMLD9cQykyU18KK00oMVxIX1JYSS0/XD8mQiNfJ0FIPF9RQDMlP1w6JUFDXylCJENfUjRDKU9dITAkO18pUixFX1FAMyY/XDcKK00lMUNfJUE8OF9RMDYmX1wwIlBfXyZBMDhfUUQzJV9cOSRRP18kQFAwX1FINCYvXDMjMSdfJlE0OV9RTDMKK00lX1wxIjBXXyQwTC9fUSQsJC9cNiQxL18nITw5X1IsPigvXEMnQiNfJzFAOl9SLDwlT1w8J0IvXyoiLEkKK01fUVg6KE9cPScyO18nMVRGX1FQPSovXEwqUytfLEMkV19SID8pP1w4JVFXXyZBPD1fUUg3Jz9cOSVBU18KK00lUTA6X1E8NyZPXD0nIitfKUI0TF9RVDopT1w3JUFTXzdFWUFfUyBQLF9dLDMkX18rQkhMX1FUQCg/XFoKK00wRDNfJjFMPl9RNDcnX1w8JyI3XyRRODdfVi0/Nz9fJE87P19aTUs3X1JIRiovXEcoMV9fTEo6P19eLysKK01TT1xQKiJTXywiUE5fXC5XTF9dTj1XI19OWzZZX1NdMjcvXjBEOStfUEwzKV9TPF0zP1xZMDU3Xz5IJicKK01fXTMsUk9dSDonP18vJDk1X1NRIjEvXVQ7JkNfMyRNOF9SWFkxL1wxJlErXyhCMElfU0BaLz9cNSZBS18KK00pQkxQX1NEXDA/XSkyJF9fLEM4Xl9TMFUwL1xAKTJLX0paKkJfXDpXTy9eTEZZN19KSTIrX1pCM0FfXj8KK01CV1dfRVhBW19ZPiU+X11bOiYjX0JHUVNfXj8yUz9dQzhWI19KWk5OX1RJJTE/XSgxNE9fKCFMP19YKV8KK00/T11JOTY/XzklXUNfVVU9Oy9cQylTV18vI1UkX1k2MEVPX0lXLj9fJlEkOl9SOD8pT1xAJlFfXyhBVEMKK01fUjA/KT9cRykiS18rMkhQX1FAMyVfXD0mMU9fJVEsNV9RNDEkX1w3JCEjXychPD1fU1RcMF9cRCdCK18KK00wQyhaX1MkQClPXEElMTtfKUFMQF9RUDMmT1w9JVFPXzM0PStfUUg0Ji9cNyQxN18nITg6X1JIRCovXDwKK00lQUtfJ0EsOF9RMCwkL1w8JUFLXyVRKDZfUTgxJF9cPSYhS18pUihEX1FcOicvXDsmMVNfJ0FIOF9RKDoKK00qT1w2JzMnXyVRPEJfUUw7KU9cOyZSO18mUUxGX1FQOihfXD0mUjNfJ0FQRV9SREcsL1xOKlMnXywiVFMKK01fUTw0Jk9cMyQhO18kUSw2X1EoMiU/XDUlIU9fJSEoO19SKEQqP1xeMCQvXypCUE9fUkhMK19cTitDJ18KK001JTk5X1QtJTIvXDcjUS9fJVEsO19TMFMuT1xRKyMjXzJUOSZfWkZCRy9fS1YtQ18qQjhIX1JUSik/XykKK01POztfWl0vNl9SVEUqP1xSKzJfX0xaMklfV1IiPk9eW0w7T18wJTFCX1kuKENfXl5PPEtfMEU9SV9UPVIKK01BL10nPzg/X00rXyZfViE4Oy9cTjBUX187R0VaX11bNlRPXSkyJTdfKzNBI19SUFQqT10tM0U3Xy5TVSAKK01fUlxSLF9cRysjJ18uM00iX1RJKDQ/XFItNCNfKlJQV19RTEMpX148RCknX1MrVyJfXC5PSV9eXkkpP18KK01POi41X1teRkU/XyZLSU9fUTpOOF9cMkZFT18kSzojX1dcOyFfVyVQO19eU0xbO180NFEuX1VFMzZfXEYKK00oMjdfRChaK19YQiRBT11GODYvXzlGOVVfUkxOMV9cUixDT19KKiJDX15XOVhfXEImIidfJzFQQ19RVDwKK00oX1xJKFJPXyYhKDpfUUAzJV9cPycxX18pIiBCX1FYOicvXDwmIUtfJkE4OF9RWDclX1xFKCI7Xy8zUSMKK01fUjhAKS9eQ0Y5U19NKlpMX1hGJkA/XEwqMkNfJ0FAPF9RMC4kT15PSjpXXyZRNDlfVyFKO09cSChCO18KK002VTU5X1M8US0/XjlDSS9fOSVRQF9YKVxAL1wzI0ErXyUxIDJfUjhBKF9cRyhCM18nUUg8X1BYLiQ/XDYKK00kQTNfJEFYU19SQFU0T1wyJDFbXyRAXDtfUTAxJz9cNyUiI18mUUBEX1FYOylfXD8nIkNfJkE8Q19SID4KK00pX1w/JzI7XyZBQEFfUSgwJj9cMSQhP18kQSQ4X1EsMiYvXDQkUUdfKDIsRl9RWEAoX1xaLyNfXy5DUF8KK01fUTA6Jy9cVy4zU180JE0vX1kyKUNPXUs5Jk9fQEdWI19UKSAwX11DODYvX0k6LkBfXkc6Vl9cSykyR18KK00rQlhLX1xXIU8vX1JWTVdfKUFYQl9SREQpT15QSCpDX1AsIl1fW0pJTj9cUzMlV185RzVbX1ZeJEQvXU4KK01BSUdfNjdCKl9XKjBJT11PRClTXzhIVj9fUkBcMk9eIkEoP19WLSMsX1RZLTZPXFkxJF9fNyVZNV9TSFsKK00wT1xTLVNHXzxHLVRfUyBTLi9cXC9EN18wM10oX1MoVTAvXEsrIz9fKSJYUl9bTlJMT18tUCw3X1AqUkQKK01fWz49RC9eU0Y4T19QWko5X1wySkU/Xy1LWUtfUFoyMl9cRlBHX19AUjwzXz0nNVZfWkZKTD9dPzZFW18KK005RilKX1I0QCkvXjVEWSNfQyhCKl9WNUA4T11VPTgzXyszISlfUyBQLj9eT0oqQ19ZXTNEX1IsPSpfXFAKK00uRENfJlIgUl9SJEYuL1w4JlJTXyUxNEBfUUw2Jy9cOSUxP18nIUA6X1I8Qyk/XFUsMy9fMFNQXF9TOFEKK00tX1xRLCM/XytCQExfVjU9Nl9dUDo2L18zJEReX1RZKzFPXEInMV9fJjEsN19RPDElP1w0I0ErXyYhKDYKK01fUiw9KD9cOSRRP18lQSA0X1FcNCY/XDcjUS9fJVEkNV9RSDUmP1w2JDEvXykhXEFfUjA/KD9cRCdSJ18KK00kQSAyX1FQNyRPXCwkMVdfI1EsQl9RKC4lX1w4JFFfXyVBJD1fUVA3KF9cPCZCL18lUTg9X1E4NScvXDkKK00mIV9fJzFURl9RTDspT1w7JlI7XyUxNEBfUSgwJj9cMyQxS18lQTQ7X1JQTStPXE4sIy9fJjFMPl9SLEUKK00qL1xGKiJPXygiQEpfUkhOLC9cTSszI18qUlxRX1JESipfXE8rUytfJ0IoRF9ULSgzP10lMkRDX1QrXyUKK01fUlxGKz9cSCoyS19LSio9X183PVgvXEkoMjdfKyI8SV9bUlBMX18yVDxLX0xaKk1fVElHPE9dUkFIS18KK00yNVFEX1ZZV0E/XTI0RV9fNSVRTF9TWSo0P11YREo3XzNGQVZfV0ogQE9fO1RcX186Jj1UX1MgWzFPXkAKK01HSTtfMCNdJl9TTSEwX15eTktTXysiXFRfU0RbME9dKzI1K18qUlhZX1I0SCxfXEMrUy9fQDdRXF9cPlwKK01QP15HRFhPX086LjZfWyI2Qi9fIUopP19SKyY/X1xWUkg/XyFJOT9fUjsqRl9dTydQX106NyVfX0tLIlgKK01fVUE1Nl9dVTw3R18pUihGX1lOOUVPXi9CWFdfNzVBOl9WTUs+T1xJKyQ3Xy0jMF1fVkE9OE9fOFQtW18KK00kUThHX1NFJzcvXDEnQ09fMDRRRV9SQE8xP1w7JzJTXychUEdfUiQ6KE9cTSlCV18sIkxRX1MsUS0vXFQKK00rUy9fL1QlJl9TOFgwL1xaLiNPX1YsRylfXFJdTV9dWTtGL18+NlVIX1FINSVfXUA2VV9fNDRRMF9RPDIKK00lT1xCJyIjXykxXENfVFkoMy9dOjUlQ19AJ0leX1MgSitPXDYkITNfLVMkVV9RRDcmP1w8JiFLXyhBVD8KK01fUVw9J19cNCQhK18rQkRDX1NVJTNfXDQiQUdfJFEkNF9RLDAoT1xBKSJfXygiJEhfUVA8KT9cNyVSI18KK00nIVBFX1FIOihfXEIoQk9fJlFMRF9RODQnP1w3JFFTXyUxKD5fUTA0KD9cNSYyJ18yJEUqX1RFKzI/XEoKK00rMltfJyFcQF9RSD0nT1w4JkFfXyYhPD5fUUg2J09cPidSO18pQjRLX1NAWi8/XDwoMidfLkNMXF9bUlkKK01NL19HVT1HXylCIEhfUlhSLC9fIk1LJ19dPVdAX1JIQilPXE8qQktfTFpSTF9dQytST15CRzonXzVWTU8KK01fWU5CS09eN0Y6J18pUjhMX1FYPShfXEIpQltfOTY5TV9bJlZQT10mNzZHX0BITjFfXU81VF9dIzFFK18KK00uRDEyX1suTko/XSMxNFNfLlNYX19bWlxPX1xRLUNTXy5TVSVfVCBeMV9cRypTL18rQyBYX1I0TStfXiEKK00+Nz9fTlpeUl9dUypRT18+Ulw3X1dMVydfXVcpUD9fQlI8K19UK05WX11DJFAvXzFOSzdfV1xHK19VLTYKK002X15FSipXXzVVKThfWEomQ09cRSgiM19ISV4+X1lONkZPXUU4JjNfPCZZXl9SPEgwP1xTLTNXXztHLVkKK01fXj86Vj9cXi4jO18tQzRUX1NEVy4/XF0vVD9fJ0IkTF9RTDooL1xDJ1InXyxCTEtfUzRQLE9cWy1TR18KK00uU0hZX1MsUy1PXE0rMztfLVNFIV9SSEgqX11KNzVTXzZEXShfVzlOOS9eJj9XR18nQUQ7X1FAMyVfXD0KK00mIVNfJzFAPF9RTDUmP108NUVLXydBQDxfUUg0Ji9cPiYhU18pUiRFX1I4QCkvXEInIiNfJTBYLl9ZWjEKK01EL1xTKSIzXykhRDhfUjw5Jk9dLjFUJ18uJC0uX1FIMykvXDQlMTtfJVEwR19SREwtX1xRLFM7XykiME8KK01fUVQ9Ki9cQSgyU18nIVBHX1EwNidPXDAkIUdfJFEkOl9RLC8mL1w2JFIjXyVRSEVfUkBNLF9cXC5DV18KK00vU1RaX1NUWy1PXF0uUztfL1NUWF9TJE8sP1w+JyFfXyZBQDtfUVA6Jz9cPCZBV18lUTw6X1FAOycvXisKK01BWDdfVCxDJF9eRzdWX1xJKUJTXy0zLE5fXTMnUE9fT1VdU18rQjhKX1MkTCsvXlZMOydfWj1HPV9ZQjgKK01GX104OUZHX0cqMk5fUSw2Jl9dLjNET18+V1VaX1U9ODY/XEsrMyNfKjMsV19TQSczL14jQihXX1ZdNzMKK01fVCEkNF9cWTBVJ19CWDohX1NZIzI/XSYyNEtfUlxHLF9TJFgvT10iMTRLXy9DVSRfUkRMLV9cVS1TX18KK00qIyBSX1wmVk0/Xl5LWy9fVF0nLl9ULSMwL10hMVQvXzZFSTdfXFMqUV9dLzQ0W182JVU5X1VNPTZPXzAKK01PXDdfMkRVMl9bMldPL11KOTZPX0cpOj5fUjhBKT9eRkhaK19HOUI+X1ZJRTo/XVU8OCdfKjJJI19TKFQKK00vL14pQShDX1hNQ0FfUkBDKV9cPighW18sUyRMX1M8Uyw/XSEvM09fM1RJJV9VNTAyT10mMDNPXzAzWFkKK01fVDkkMD9cXC5DU18qQkRQX1MoUy9PXFgtQ19fLEJMS19dNyhRX15IR1lHXz1HIUhfVkVEN19cPSYhS18KK00oIUw/X1EoLSQ/XVA6Vl9fJzE8O19UJFsvX1w7JTFHXzY1LTdfUTgwJS9cRSdSL186Ni1HX1FUNyZfXD0KK00nQUNfOTYtPF9ZIilAX147RkkvX0M3TVhfWjo8Ri9cXzQlW18lMSxDX1FEOydPXEAnQydfJjFEQl9SNEMKK00oL1xNKlMzXysyVFhfUkxLLU9cRSkzI18oIiRMX1I4RyxPXDQlIV9fJFEgPF9RQDcqL1w8JzJDXzZVVUAKK01fUixCKi9cRChBX18tQyxOX1Q5Iy9PXSIvU0tfL0NQWV9RWD4mX1xfL1NTXzBULSBfUjBCKS9cPygxX18KK00vVDEgX1Y9RDdfXy1SLC9fWk1PQF9SPEcqT1xdLTJPX1VcOyBfXy87WC9cRydSL18tIlxPX1tCVU0vX0EKK01VPUNfRVk+Ol9UTTU2P1w2JiFfXylSQElfVlVMOT9dKzNUP184Ri08X1JISyk/XT85JiNfNDVFNl9YSi4KK01EL19BVl1HXy9ULTJfU1EmNS9eWk07I18wNDksX1QhIzEvXytSPFNfLiQlIV9UJSYxT10qMjUjXywzMF8KK01fUkBKLE9cRCsiW19QW0JXX1taT0xfXy9RTDtfMFNcXV9TTFktT10uMiQ7X1YtIzNfVD0nMS9dMDRUV18KK00yNDklX10vIlJPXTE1JUdfTUtGXl9WRUQ6T15ER0o7XylCJEVfVklHOU9eQUcqK188NlFQX1c9U0BfXEwKK00rNDtfK0MgWF9WJUA3X19NVl5HXyhBQEJfUFwwJV9cMCRBP18mQTQ3X1FENCVPXDUkIStfJjEwNl9SIDoKK00mL1xSK0JTXzJENSlfU0xXL19dKzIlM18yNEU2X1NEVS9PXllLKk9fOlVVPl9UTSMvX11POkYzXzdVTTkKK01fUTwyJU9dJTAkM19IWVpCX1FENCYvXEUnUi9fMjQtJ19YMV5AT11POjZXXzlWJUVfVj1BOT9eID5HW18KK00nQUA8X1JcSikvXklHWTdfQ1glWF9WTUM2P11ROCVLX0RIVihfVCEzOT9cQSYyP18mMUQ8X1IsQS0vXEAKK00oMkNfOUYlO19RODImT1w/J1JLXyVBOEFfUVg+Kj9cRypDO18rMyBcX1EwNCg/XDQkUiNfJVFETl9RXEEKK00qP14nQSgvXyVBQD1fUUQ4J09cRykyQ18sIlhRX1FUOydPXD4nMVNfKzJQS19TMFMsT10iMDQjXytCVEwKK01fUkxNKk9dWD83P19IKVo3X1haKEFPX0BVPUtfJlFQPV9WVTwzX189UiwvX1s9NzpfUyRJKz9dIS8jU18KK01NOz5VX14rOFZfXiZBKD9fLENIXl9RVDspL11KOSZDXzomNUBfVSU2NC9dSTlWK18xJCRcX1YtPzc/XEUKK00oQidfQjhGLF9eLz1WX1xcMCRfXy8kOTRfWz5SSz9dITFEU18vNCEhX1oiPkg/XFAuQz9fMCQ5Il9URSgKK00zT1xWLjQzXyoySFVfUihKKy9fJE47Q19RKzZZX11HLVIvXS0xI1dfMDNMU19VKScwL19EVF0vXzclKSgKK01fVj1ENF9dNzJEN19VPCMmX1QxJzMvXiFBKEdfPUclV19VQTI2T101NCUzXycxSDlfUVQ4J09dTzpGW18KK008NlVdX1JASTBPXEwrQztfOjZRTV9fRzhdX1w2JDE3XygxJDVfUVQvJi9cNCRBN18lMSA0X1FAMyVfXDcKK00kQUNfI0BELV9TNFAtL10mMSQ/XzQkVTNfVDknNE9dNjY2M18zJD0tX1w6VUtfX0dUTFtfQyddXl9RTDkKK00mX1w1JiFHXyUxLDVfUUA0JU9cOiVBQ18lQSg0X1EkKyNfXC4iIFNfKCFIPl9RTDUmP1w0I1EvXyghTD8KK01fUTAvJF9cPiYxV18vU1hTX1tWVElPXyBMSkdfTys6Tl9cPl9OX15KRlhbXzIlTVlfVS0wNU9cOidRX18KK00qUjkqX1FQPig/XTg1RD9fJ0FARl9RXD0pT1w5JVFLXyUhMD1fUjRMLE9cMyVCK18jIFQ0X1FIOilfXCwKK00mRCdfMUQ5MV9cIllMX1xGKiI7XydBRD1fUTgxJT9cNiVBR18kQTQ2X1I0RidfXTY0VFtfKFFcQV9SJEMKK00oP1xEKjI3Xy9UMSJfUVxDKD9dMzQ1L187RlFJX1hKKUIvXD0nUVdfQldBTl9cQlRML182UVxPXyhRVEEKK01fVUk0NE9fI087T19YTUs9X1glXkEvXEgqQydfKCFMQV9XJUU4P11ePFZTXy5DUSFfUTwyJi9dODVEW18KK00tIyRQX1NIWC5fXU08Ny9fVj07NV9TSF80P1xRLlRHX1BLSlZfVCElMl9cWS9DU19SLC8jX1I8Sys/XF4KK00wJC9fMUQ9Ll9SQEstT1xSLUNbXyVSKENfXC5ZTT9fJk0rO19VXFsoX1UpIy8/XSIvQztfNCRAXl9eUzQKK01UP11QODUzXz1HKT1fViU7NF9fNVBcP18xNEEtX1NEXTE/XFYsU0dfO1ZVUF9SNEEoX1w+JkFTXyghUD4KK01fVzVTPU9eID9YU18rIlReX1MkUy4vXlBKWl9fXi0/SF9RQDomL1w2JEFPXyYgWDdfUTAyJS9cNSQhM18KK00kUFgyX1FAMyVfXFktU0tfL1NVIF9USSgyX10lMFQ7XzAkKSlfVC0lMz9dJzBEQ19UK15ZX15XN1NfXiQKK009NztfKCFAPF9RUDcmP1w3JFE3XyYhMDZfUlxLKz9dLDIkS182VTU5X1RRJjJPXDQjQStfKFFUQV9TJEwKK00sL10gLlNfXyZBNDlfUTAvJF9eWktaQ19ROyZJX1oiKUEvXiA7JkNfOlYtRl9bQkZGL1xTMUYzXyYhRDoKK01fUSg3Jy9cQylFI18lMUA9X1VRODI/XDomIk9fJzFUSF9RSDgmT1w2JiIjXyhSUFJfUTg2KT9cNCVBW18KK00mIVBRX1IoWjpfXjRFWkNfSSlOO19ULF4wT1w8JUFLXzAzUSBfUUg4Jk9cOycxS18yREEgX1omPkY/XDoKK00lQUNfKyJMSl9UISAvP1xSK1JbXyRQXDFfUUg1Jj9cPiZRS18qIlBKX1ZFSTlPXUI0REdfTVpKRV9cKloKK01PT1xFKCIzXzlVXT1fWV43RF9fQldNU188Ny1RX1RNLzQ/XFYuI1dfN1VJNV9WKTY0P10vMzUjXzYlKTYKK01fVFUtME9dKzJER18mMVA9X1c1Xj9PXz1WPU9fLyQhNV9SSFQwX15fTVsvXzEkRS9fU0BdLl9fL1JcR18KK00qMkxSX1NUXjE/XSAwJEdfKlJYWV9SOEwtL1w5KSI3X1A7OlVfXCpSTU9fQ1UsW189NVU0X1UhJi5fXTsKK000NC9fWl0zL19XXUw4L14rQEcnXzlGIThfXTMiUU9dITBUS18uQ1kmX1Q1JDJPXV4/J1tfKFFcQV9RXDsKK00nP1xCJ0IjXzo2PUpfUUA4KF9cNSVSO18zJFEvX1sqTUw/X19bPiNfKyFcLl9RXDwoT1w9JkIjXygxWD0KK01fUVg5Jz9cOSUhQ18mMTA4X1E4NCVfXEAnQidfK1JUUF9TPFUuL1xZLlQjXy9UISdfVTkxNV9fJk47M18KK01bTU8zX1hJXD4/XSUtQ0tfKjE8OV9ROC8jX1wzI1EnXyYhMDZfVVE4Nk9dSzk2R183NT07X1RBIjFPXTsKK001NUdfNTUhNF9RNDAlL1w+JjFXXyRAVDFfWFYnQT9eTUk6L19PO0JTX1tCUEsvXkVJKk9fUEsmRF9VKUIKK00/L1xDKCFfXyRRRENfVDk7Ql9cOSZSL183RS0oX1EsOCw/XDonIk9fJEEoNV9ROD0qX1xKLFNLXyUxPEwKK01fUFg1Kj9cMCZTV18oVCVZX1ouSU9fXipASDtfKjIkS19RNDMlT11GOTYzXyhCKD9fUyxUK09eLkE3X18KK01ISVI6X1E8NSVfXEopUitfQighXF9YUiVBP1w/JkFTXyYxPDpfUTg0JU9cNCUhP18mITQ0X1MkRidfXUUKK003NUdfNiUtN19TMFItP14oQCdbXzU1JS9fWCIiP19eJkIoN18tU1BYX1FAOygvXUM4VjtfO0ZFSV9bIkwKK01LT15dTktHXz1XPU5fU0xeMF9cWDBUM18/KEIlX11TOFZPXFkvNStfLDNNKl9bWlZMT1xTLiNbXy9ELSEKK01fXF8rUj9cUi0jT18wRC0qX1M8VzAvXE0sI09fKTJAU19SLE0sP15cTFsvX01KTlBfXiMzUU9eKDtGI18KK000RERbX1YpODM/X1FXLT9fQ1dJTl9ZUi8/T11JOFVPX1UsMyhfU0BaMD9cWC8kM18vQ1UjX1kiLkQvXEAKK00nIVtfN0VJPF9TMFAsT11NOlZbXylCOFFfUiRDLE9cUyxTO19LWkpQX19fTlVPXydGVy9fL0FYJF9RUDUKK00lP1w5JSFDXyUxIDRfUTwyJU9cNiQxN18kUSQ0X1E4NCVfXDUkUTtfJTEsNl9RMDIlL1w0JFFHXyYxMDgKK01fW1pSS09fSFU8V186RVU4X1I0PCcvXSowI1NfMkQ1JV9RRDUlX1w2JEEzXyZBODhfVSUrM19cVStTL18KK00pQiBEX1NEUy1fXDYkMTdfJVEoNl9RRDQmL1w6JTFHXyZRRDxfUTQ5Jl9cWjEkJ180NTkwX1MoVzBfX0wKK01WXFtfLTQtOF9SPEMoP1wwJUI7Xy0lSi1fUUw7Kk9dMzAjQ18nMkUmX1FEPCtPXDomQVdfJTFUUV9RTEUKK00sL1w9KCNHXyQhUFlfUixXOS9cQC83P19LOycmX1kqLUNfXE0rUzNfJUFEOl9XIVI7X1xULTJfXzIkOF8KK01fXE5bTi9eT0k6Q18qMkxJX1QgWy0/XltMWl9fQjgyJF9XVV4/X1xJKzJfXyZRXEFfUVg7KD9cRyhCM18KK00yJCxdX1FEOiUvXDEkMTNfKjI8Sl9YOV4/L1xPKzMjXyRRODtfUSAzJS9cSitCU185VjlFX1MgUSxPXD0KK00oIjdfLjNZJF9TNFMtT1xNKyJPXzAkLTVfUyUhMk9eIkQoX19XPUc7X1MgVDI/XFYwJF9fT1s+U19TNFoKK00wL1xcMDNfX1M8RydfUlxRLi9cVi1TW18vQ1knX1I8Si0/XEUpMytfJjIoSF9YPiJBL15VS0s3X1dNLygKK01fWDlROT9dMzREP18rMlBFX11fMFJfXi4+NldfSjlCKF9WQUQ3L18yUEw7Xy9UJShfUzhaME9dIzBEQ18KK01GKTo4X1IoPigvXjVEOS9fRVkuNV9WSUg6X1xFKTMjXygyLFJfUzBULV9eTUoqW19fXytJX11GQzpPXyAKK01FVldfPzVQWF9RVDslT1wxI0FPXyUhJD5fUUQxKT9cVCtEK18kIFQ5X1E4NCVfXDgkUUdfJSBUNV9RKC8KK00lP1xLKiI/X1E7TldfXyM2Uz9eS0hJT186VjVDX1IsOSU/XEUoIjNfJjEwOl9RLC4kL1w8JVE/XyRAVC0KK01fUig9J19cPyYhX18oUVBEX1JIPydPXFQpIidfLiIsQV9SWDwmP1xHJjFLXyhBVD9fUVRCKC9dVT43P18KK00wVDUjX107MVRfXTo6V09fJkI4Sl9RODkpL1xGM0g7XyZBXEtfVylCNE9cPS0lW188Vy1cX1U5NTNPXEIKK00sJD9fNyYpTF9SRFAxT1wrJ1RTXyhDUVtfUkBaPS9eWE08P183Ni0/X1M8WC4/XDQkQTdfPSc5TV9VKTAKK00zP11HN1VPX1Q8KlxfW0pPS09dKjIkS19CKDYkX1hCI0FfXSozJSdfKyMkVl9SVFAtP1xFKjJPXyoyTE4KK01fUiRDKU9cMyVBP18mUVQ7X1FcPSdfXD8mUVdfQlgyJF9TLFMtT1xRLSNHXypSXFFfUUAzJV9cNCRAX18KK00oIUw/X1FQRiwvXEArIy9fTzs+W19eQztWT11cPzhbXy8kUTZfVyVYP09fP1ZNW18tU1UtX1M4XTJfXycKK01OWz9fMDQ5LF9TRF8uX184VE0jXyxDLFpfUyhVLk9cSytTJ18qUlRUX1JISixfXDsnMitfTysyWF9YMVgKK00+X19DU0xHX0Q3VVVfU1hVK19dJjEjX19cTic0X1leJz4vXkxGSFNfQFc9Tl9dXzBVL10hMCQ/Xzc2OU0KK01fVCEjMi9eO0Y5T18mMTQ3X1lKNkYvXkdIWjdfPCZNT19SKEIsP1xFKiNLXytSXFhfWlpGSk9fXFwuT18KK01XOj1NX1xKQDxPXyZFVVdfS0khWl9TREIsX1w+JVM3XypSMSJfUkBBLF9cPCVRV18nUUg6X1IgOSY/XDoKK00kUUtfJzFAPF9SREUoX18uUEtXX1xdUzdfU1xdLk9cWS1TR184NUk6X1M4WC0/XDwnIUdfKVI0Ql9SXEoKK00qT144Qyg3X0lJOi1fXS5dTS9fT1RcT19ZPF8mX18jOFNfX01UPEdfWy07LV9fKzZUX19CUjxDX0xKIj0KK01fW0JGSF9dJi5DO19VTFs4X1MxJzY/XFQzRVNfLlNZKV9TQTZAT1w/J1IrX0w5SV1fUjRbOE9dIzE0U18KK00uQ1xfX1FQUTUvXDYoIzNfKCMpLl9RPFg7P1xHMyhXXyskIVpfW05ZUj9eIkJIO18pIiBCX1FAMyVfXVcKK00+RltfPUcxUV9bNktJX183UVtbX09LJlBfViE7N19dMjM0X19MKkpOX1hCKkNfXEEpQk9fJyFcRF9RRD0KK00nX1xNLDMvXyxDOFhfUjxLKz9cRSlCP18nQVA+X1FcOyc/XjlFKTtfLiM8XV9UOSs0P1xPLSNLXyVRLDsKK01fUiBEKE9cQSdCM18oMlhbX1MhIDQvXFkuVC9fSjoqQl9aIkJMP10tNVY7Xz5XTV5fXjtAV09eMkY6P18KK00tQ10tX1wuWE1fXFgvNC9fLjNYXF9cUyhRT1xXLjQnXy5DXSRfUUhBKD9cUC0zT18kUUhAX1FYQyovXEwKK00qQldfKjIkRF9ePzNTX19NVi0vX1pdRzVfXytEWD9fWlktU19dTVc2X18nPFVfXz5TLENfWj0/OV9URSMKK00yX11cQThTX0YpTkBfWjZDST9dKjFEQ19JKiJCX1oqPkgvXVk8Vz9fKVI8VF9SLEguT1xMKyM/X0s6NkgKK01fX1dQWl9fQUpXJ19TSi1TX11WQzdPXzpJVk9fSzg1S19SQDslT1w4JFE/XyQgRDVfUUAzJj9cVixSW18KK00uMzBPX1MkSSlfXDslUTdfLCJMRl9cTl1OT19NVl1DXy4zWF5fUVBBKV9cQCdSN18sMzxPX1Q9KzBPXFMKK00tIltfJyFEOF9SREUpX1xHKCIjX0M3XVxfXUMjT09fTlYsX19dXVc0X19PP1VfX1NXPTNfXi1bNV9fMz4KK01VP19SWE1DX10+KzhfXicvUl9fOFE8T18vJDE0X1JVITU/XFsxNUtfKVQlTF9RPEArT14/RFgzXygjJTUKK01fVU09OS9cNydCM18mUy06X1IsUDI/XDIrJFdfKVU6LV9SUTlGP1xRMzg7X09LWy1fWlpQSz9dIC4jT18KK00mMTA4X1gmJD4vXiA/R09fUUtSWF9dNyZQP15aS0snX0A3RV1fXDpdTz9fKU87W18xJCEiX1BcNSVfXDgKK00mQidfKFI8SV9RLDcmP1w0JiFLXyYhUD5fUSQ0JT9cPidSI18sMlxRX1NEVS1fXFYsMz9fLiNFIF9TPFkKK00wL1w8JlIrXylCXE9fUihBKV9cPSpDP18rM1k2X1MkXjQ/XEUqQl9fJ0JAV19UNS85L142RTlPX0tKRkQKK01fVz1eQk9cUC5EQ19MSlZNX1NEXzI/XSEwRC9fVDxXL19TIFQvL1xVLzQnXyZSMERfUlBTLj9cQCszK18KK00sM1UhX1FAPigvXDUlQT9fV10jK19fKz1WL19VVl1DX149UztfXz87Vz9fVlc9W19cLUc6X15fOlYvX08KK01WPT9fRkhaMV9YMiZDP15ISlsjX0gpTj9fVjlBOT9eTElaT19JSiZFX1ctTjwvXDEkQVdfKCI4Vl9SWE4KK00tX15BRzlfX19fN0tfXUZFOy9fLUlHU19WSjFBX1xKQTgvXyVFNVtfTzkxQ19RXC0gL1xAJiNLXywiSSYKK01fUkhJLC9cXC8jR18zVEklX1NEVCtPXF0tMydfVSwzIV9eVzlVP1xWLlNHXyhSQE1fUjBEKV9cTSxDK18KK00lQUg4X1MkUyw/XF8vQ1dfKzMoUl9SKEYqL1xHKjJTXycxQD5fVlFGOS9fJE1bK19bTTszX18nN1UvX1YKK01XPUNfXF1bOV9fJz5WL19YV11LX1tNTzNfX0c8Vi9fQlRdL180REkuX1FUOykvXEwtVENfJyIoTF9WTUIKK002X1xAKyRHXyoyMERfUjxJKU9cUy81K18pUjxUX1FATTFPXF06KVNfLFVCOV9SVStAX18kUU03X0dJWjsKK01fUVQ1Ji9cOSVRS19ASDVZX1g+JUBPXylPW09fVUxDJV9bUk9NL11KOCYvX1Q8NyFfXFJdTi9dTTlWN18KK00pQkBLX1IoRys/XFYuM1tfKUJITF9USS40L1xbL1QnXzFUUSxfU0xeL19cQCgyK18nUVQ/X107KlM/XyYKK01PK19fJkE4OF9RWDonL1xRLUNPXypCMEhfUTg+KE9cTi9UV18sM104X1NFIzM/XF00JitfLCQxQF9SOFMKK00xT1wxJVFfXy5EPThfUlhZMS9cPSZBR18qUyBcX1JQTCtfXUE4NjNfKyMwXl9TPSExP1xAKyJPXysjNFsKK01fUjBRLU9cSy1TT18pQlBOX1JUSys/X0dWLS9fW11LNV9fKz1WP19VV11XX14uJ0JfXztAV09fVlg9V18KK01eLic8X19fR1gvX0ZVPTdfPEclWF9aVk9NL145RSlLXzw2UVJfWyJLTD9eSEhaR19AR1VfX1VJPDkvXD8KK00pQzNfLCMkWF9YTixDP19fXE5HX1daQU5fXDI5Oz9fPUlGO19RWU1JX1xaOjovXyNEJU9fT1kpSV9UID8KK00tX1xRKEQnXyMxMDRfUVQ7Jz9eOUI4I19DOCVcX1RZKzAvXzZSPDNfXD1PPF9TMFcuL1xAJ1I3XyZBPD0KK01fUlBQLE9cMyUxS18oMjRHX1FQQyhfXFAtMydfMSRFI19TKFIrX1w6JiE3XyoiPE5fUUw3J19dTjk2U18KK01XPFsyX18zPlcvX1lXXVNfXi1TOF9fX0BXL19YVy1DX14tWzVfXz8/VU9fUVYtR19cPT80X1ZZOjVPXFEKK00qIitfKzI8P19SUEgqT1xNKSFbXypCJDpfUzRQKl9cSChBS18nIVRIX1FVLEBPXEgxSSNfKURWKF9bVyIKK01SL142RShXXykhREBfUUA6J19eL0I3X19BWDFfX1xPIlBPXz1RLDdfTys2VV9cQyJQL18xUStfX1Y8Ml8KK01fVUUsMl9cSCsiW18oQjxHX1FcQihfXDcmQU9fJ1IwRF9SXFYtT1wzJiFXXyRRRDtfUTQ5JV9cVyxCU18KK01TTCZcX1wmWU0/XFkuUytfPlgxV19YXi1CL1xOKCFXXychMDJfUFQ8Jy9cTzAkW18tNDU1X1M9Kzg/XFIKK00xVi9fK0QtP19TJSY3T1xRMEVHXy0jUSZfUTg4Jl9cNCVBV18uQzxdX1FENicvXDcmMVtfK1M8W19RVEkKK00rP1xBKkMnXyhTJFRfUixQLD9cUCxDN18qUjRJX14/M1NfX1JWXTtfW11LNV9fP0JXP19XWE1bX15ON0EKK01fXzdAVl9fV1hNV19fPis7X1xeWU5PXUg4RktfSjpOUF9ZJi1FP11ePlgnX04rNltfWj5FSi9dTTlWT18KK00+Rz4jX1IsRC0/XEgqMyNfKjI8SV9fX1RbT183R0YzX1NKIVNfXTo9Nl9fLUc2S19SSUVEX1xSOzlPXy0KK01HJj9fTUhdPl9WIF8vX1w9JCIvXydSJD9fVTkwMi9dSjkmQ18vVCBZX10vJ1AvX0dUXTdfLiNIXV9RVDwKK00oX1w5JUFTXyszJFNfUzhYLl9cRysyX18qMyRTX1JUUixPXDQmITtfLTM8VV9UNSQwX1xOK1MjXyUhMDcKK01fUUw9KC9cSisiX180VFk0X1xfJFI/X0tWLUNfXS1XOF9fPzxVP19XVz0rX11NUzNfX0c9Vk9fUFVdK18KK01bXUMzX15LNVQ/XkZFKSdfPjclVF9TLE4tL1xNK1M/XztHMV5fVlVPPE9cPigiX18mJFIlX1IkXEI/XEQKK00zKEtfT0tfKl9XUVc9X1xDJFInXyQhLDhfWUoyQi9eJ0BHV19ULDspX11fKVJfXjtHOU9fUjw3I19dMyQKK01QP185Ukw3Xy5TLFZfUTQ3J09cOCYhT18pMixGX1FYPig/XEEoUjtfKjJUT19SQEosP10uNDU7XyUxODcKK01fWSYpQV9fM1AsI19UK1ZdX1oyOEUvXSwwU1dfMFQwXV9VLTczT14qQSdTX0coTiVfVkVDOD9dOjZFV18KK00vJDEuX1M9JDU/XFcxVU9fLDQpOV9TSSk3L1xTLyQvXypDIFJfUiRHKj9cVi5DU18lQUA7X1I8RypPXFIKK00uI0tfLFNdI19STFIuL1xOLkNbXysjPFhfUURBKF9cSCsiW19WTSs1X11PMlRPX0FWLUNfV003NV9eQzkKK01WT19HVT0/X1otOzhfXj81VV9fVFheL19VLEcuX1dBUz9fXlBLO0dfPkc5Xl9YIV1AX15TTDszX0s6Tk0KK01fWClcQC9eJD9YT18pUjhXX1I0RStPXUw6RlNfX18nS19cNiw0T18gREY3X1NZOTRfXCozNz9fKUY2K18KK01SKUFBX1w2NTdPXypFVTtfUilFSV9WISUoL1xGJkE3XyhBUEBfUiQ/Ki9dLzNUU19TXC5cX14/NlVPXE8KK00sUzdfJVFEQF9RVDwoT1xDKVJHXyZRVEBfUixJKl9cUC4jS18qIlxPX1FAPSc/XEsrQl9fJiFEOl9TTFwKK00tT10mMjQvXyozIFBfUURDKV9cPChSX18oUjhRX1M4Uy4/XzFSLENfWi07Ml9eVzpVL19WV11LX14tXzoKK01fXys8VS9fU1ctP19dXU84X187N1VfX0xVLSdfUUsmT19SNDknL1xPKjMnXzlGQU9fUSA0Kj9cQTVZJ18KK00pI04oX1ItLEIvXl1PPFNfN1VBP19WQTc5X1w/KEI/X0hJSjBfWSIrQU9fPVRdO19WPEctX1NJITA/XyUKK01QTCdfV0xPK19cRl1PT1xaLVM7XychVD5fUVg7KD9cRyhCO18pIiBCX1FQOicvXDkmQU9fKCFUQ19RQDgKK00mX1w3JTFDXzw2PUpfWE4jQU9ePkY5R189JyFOX1pOSEhfXy5PK0NfK0JAQF9SXFIpP18nTzpbX0dYXVwKK01fWU4uPz9eMUIoJ183NVE7X1RZMTVPXFkwNE9fLTNdKl9TRF4xL1xJLDJbXytTPFNfU1kjL19cXC9DT18KK00oUihBX1JYUyxfXEcrUydfKjJYU19RVEEoX1xBKVJHXydSPElfUkxYLj9dQjkmP188RyFTX1ZVSztPXUgKK005RkdfOCYxRl9VQT44L100NkVTXzQlOThfVSUyNF9dLzNFN185RjlVX1peSU1fXVg9J1dfQig2K19YOiQKK01BX15JSVpHX0JIMihfV11aQU9cRSkjN18uI0EhX1ZRTjw/X19dLltfVSlNQV9cUj48P15eQTQvX1BJLT0KK01fW14wNU9fJEU1T19QKSU3X1teMTVfXl9DJT9fUDklMl9ZKUwxP1xNJlBXXzclLTNfViFANV9fMlFcI18KK01XPFsvX1JMUSxfXE0sQ0NfL0QhJV9SNEkqX1xGKiJPXyszLFVfUihKKy9cRCsiW18lQVA+X1JQUCxPXDQKK00lQUdfKjJMUF9RMDMmP1xULFNHXygxXEJfUUA+KC9cQypSV18pQlhSX1JMUC1PXFgtIztfVSxHLl9eIy8KK01VX19JVV0zX1s9RzFfXyc6VT9fUVY9O19cXUs5X19DPFY/X1NVXS9fWDxHJl9fQ0NXX15DRjk3Xy1DLSAKK01fUjU0Q09cPixYJ18qVS4qX1wnIlM/XTc0JT9fKVFAQ19XMVg+T14/RVhXX0FYKV1fXVczVU9fPlI8W18KK00mMVQ/X1lGN0Y/Xy5QLCdfViw/J19WOTk1L18vUjwnXyoiPEZfVDUiLz9eIj5XN18vQ1BVX1VNOjRfXSEKK00vIz9fJFEkLF9QUCohX15KSEojX1NMLyJfXDJcTi9dMDNEP18wJDBbX1VJNDMvXlZKSjdfMkQsXV9SUE0KK00pT15XTCozX0BHQUpfWTYrQC9eNEI3W184NUUvX1JcTSpPXFguVCNfODYtRl9WKUU3X10zNSRXXyxDJEoKK01fVFEqMF9cTisiR18sQzBSX1IsSipPXDknMV9fJlFUQF9RPDknL1w/KDIzXysyXFJfWT4tQj9eQUUoX18KK01IWToxX1lOLkI/XjVDKDtfRDhCIl9YUiM/P14sQFdXX0EnVVdfUkhGKi9dQTg2S19NSypbX1MoTi1PXi4KK01CWSdfJUEwN19RIC4kL14lP1gvXz5HNiFfUkhJLk9cSSozK18zJSU2X19fUFhfXyxHNldfUklJR19cTjwKK005P18jRSVLX1FJMTtfXCowNV9fIUNVQ19QKS03X1wiLzcvXyFDJTtfT0khM19aRV0yX10mK1FDXzg2LUEKK01fXFMlUT9fPVQ8V18nQjxHX1EgNSZPXD0nUjNfJyIgQl9RQDonP1xHKjJTXyUhQDpfUjxLKz9cOScxX18KK00qMkxOX1E0NyZPXEgqQl9fJEEwOV9RVEApP1w+KEIzXyhSQEhfUlBRLD9cUi4jS18qUyBVX1NVIzJfXkEKK01ISldfKiNVOl9VVUZDX185Uy1fX1wtRzpfXzc1Ul9fUFY9S19cLUs4X18nOVVPX05XLUNfW14jO19eV0EKK01WL19DVi0/Xzc2NiVfU1kxRV9cTTMnU19PPC8zX1UhJDFfXS4zJTdfJzJAT19ZXjlDX11ePTZfX1k9RzwKK01fXlMzVE9dMjNUW18wQ1RfX11DKVI/X0ZUPFNfRkheJF9cTyFNX1xKKiInX09bRk9fWFolP09dVzxGU18KK01RS1pUX1VZPjQ/XiA+RytfKEIgO19bJkpJL19AU0xPX0EnRVhfWkJDRz9eVUw6R18sQyBIX1M4VStPXl0KK01PKzdfSSleOl9SLEQnP145RThXXzw2NTxfVzVOOE9dSzlFS18+NzFIX1IgPSYvXD0nUitfJjE8NF9TWF0KK00tT1xQLFJXXzM1LS9fVj1FOV9dQjhFX18xRE0lX1JETitPXEIqMkdfKkJUUl9RQDcnT1w7JjFPX0ZJKjUKK01fWiI4Rl9eQ0ZZW19LSjpJX1suSkpPXltMSytfTys2VV9cMl9PX18kU0tXXzZWITpfVUE5OC9eS0xaX18KK00qUlRQX1k6MkZPXFErIyNfLUMoVF9XPVU9X14pQjkzXykiKFJfUVQ+KT9cTSxTN19fXl9CX1tSMjpPXlkKK01DVidfSzhFPF9aWiM1P15XQlVfX00oRTlfWzIrNV9eV0JVR19PKFk7X1s+KjUvXldCVS9fTzhFN19aRiAKK001T14xPjVbX1YsSltfXjMxUl9cTCsyW18kUTQ6X1EoNiYvXDYmQVNfJFE0OF9SQEorP1wwJEE3XylSREwKK01fUUQ7J09cRioiT18lITg5X1I0RypPXDEkUTtfJlIkQ19RSEIpL1w/KTI/XygyPElfUixJKl9cSStTJ18KK00rI0xaX1IgQio/XEArRD9fLkRFTF9SRFk5P10zN1gzX1NMQzZfXV8tUj9fSVQsT19cLTMxX183OVVPX1UKK01WPTtfXE07OV9fMzZVL19LVSxfX1hdTz9fWFYvR09fL1FcT18zQ1BYX1MoUS1fXDcoQkdfR0lCLl9XNUsKK005X19FVj1TX1wtQzVfV1VYPi9fKlBMN19WPEMoX11bKlFPXipBN19fU1w/I19XPVU8T18qUUtbXz9HPVEKK01fWFoqQi9fKE9bQ187Vl1GX1teV0xfXEMoIV9fTlsmTV9dWy5SX11fPVc3XzNUWSdfU0hWK09fIU5LM18KK00/N01UX1MkUCo/XlNLSkNfMzRRJV9XQVY7T14hPjZfXz1XKUZfV1laOl9dWz0mO187Jjk8X1FcPSdfXTAKK00zJEtfNFRNJ19SJDsmP1xAJlFPXytCRE1fU1BcLj9dMDRUV18tIzxYX1FcQyg/XDsnMitfJEBYNl9RUDgKK00mT1w7JjFTXyYxODxfUUg3Jz9cNiRRR18mITg5X1FANiY/XDYlQUdfJiFIPV9VISQ2P10lL0RDXzglWTkKK01fW0ZHTD9cTihSQ19HSU46X1leQEg/XEMpQj9fKiJQSl9YRilET1xHKTM3XylSQE9fUzBYLU9fUFlOX18KK00wQlhGX1M8SykvXFQqUjdfLyJUR19UNFYsL1xYKlIjXzEjQElfVFhdLC9dNTBDO182NEBYX1ZNOzIvXVYKK003JFtfQFY9LF9YLU40P14lPyc3X1g8XyxfXEsmUi9cVy4zW18oUkRLX1IsSys/XEwsQzNfKVJUT19SNEsKK00rP1xCKiJLXyZCIEJfUixJKl9cLyUxP18oUjRIX1BcMSUvXDsoMi9fJjIkQ19RTEMpP1w/KVJHXyhCSEwKK01fUjRNK19cSS8yW186Jl1bX1I8QyxfXD0pQldfKCJFIV9SNFMyT1w2KDMrXy8zQF5fVCxfLz9dUDsmS18KK01JSVo8X1xOXk8/XzVSTEdfWU0/MV9eVzdTX19OVF0rX1s9QzZfXkc2Uy9fOVI7X18pUjBDX1JASywvXkAKK01FWSNfNiUtNV9eMztWX19MVS0nXz5HNVVfXScpUy9fOFFcP19WPDsmX1IsQCdfXl9OS1NfM0RZMV9YLiEKK00/L146RUkzX0ZZRjtfXE8nUT9dVj1XJ19QO0JYX1JIRiovXlpMOk9fWC0jLV9bIkhJT18hUCtHXzomMTwKK01fU1BXLD9eSkoqJ180VFkoX1M4VCs/XyBOWzdfLEJYRl9cJl5MX11aPVZPXz5XRUpfV11ZOj9dXD1GO18KK00vI0hTX1MwWS0/XC8lMSdfKCIwQl9RTDwnP1xCKCIrXyoiOEhfUjxGKT9cSClCJ18tUzRQX1FUOiU/XEQKK00oIVtfMkQ9Jl9RKDAkX1wyJCEvXyVRNDhfUSgwJF9cNiUhP18lMSw2X1EkMSUvXDgmQVdfLzQoXl9SLEcKK00tT108N0cvX0c5JixfVlFDNz9dKjE0N19EOTI1X1MsXC8vXSYyVEdfRDkmOl9RWDwrL1xIKjMjX0QoXigKK01fXzNKXS9dNzFEO18pMiRJX1FMPSk/XD0nIU9fJjE8Ol9RTDgnT1w7JVIjXychQEFfUUw3J19cOSVBU18KK00mMTw6X1IgPig/XDsmQUdfJkFANV9TKEgqX186U0xLXzI1KTJfUzRdMD9cVS8zX18sM1BdX1JcVy4/XEoKK00sQzNfKVJcUV9RXEcqP1w7KFI3XyYyJENfUURBKF9cQCkiO18nIVhBX1E8PSdfXDkoMi9fJkI0Rl9RWEkKK00qT1xBKyJXXygyUE1fUlhVKj9cVzI2N18kMURJX1FIOSYvXEIrJFtfKlMxJV9SIEIoL1w+JkIvXydSJEYKK01fUihFKU9cQylCP18qIlRNX1MgVSxfXFItMztfLSMsWV9TUFgwP1xeLUNHXzYlLS5fWDlePk9eVEoqT18KK01QO1JeX1o6O0UvXScxJEtfWS1XPV9fKztVT11ZPSczX1ZNKzVfXUcoUi9fME5bR19AR0lWX1wyWE4/XEYKK00oMi9fUEwnIF9VIS40P1xULUNPX09bVl9fVV09N19eXEw7Q18qUjxJX1tOUksvXz5TTE9fODVFN19TOFUKK00rT18pUTtXXzlWOT9fU1xaLS9fI05LM18uMzxQX1paQkc/XUw5RVtfLkNIT19XMVQ5X11JOVVDX0AnTUkKK01fVz1PNl9dVDwmJ18rQkREX1IgOyZfXDMjQStfJDEgNl9RLDQlP1w4JTFPXyYhKDZfUTwyIy9cVywyJ18KK00uUzxBX1MwVCg/XFYtIlNfJVE4NV9SMEIpL1xEKEIzXygxXEFfUTw1Ji9cMiQhL18kUSw2X1FcQSkvXCYKK00iQyNfLVJZQ19bMkNWP10lLiZPXzQ0UURfUVA5KT9cXjA0O18mUiA+X1JUUStfXj1HOjtfPldGKV9SSEsKK00sT18kT1tLX19fK01fWDFSOi9cNiUhP18lITg7X1VZPTVPXSkxVDNfJyFAOl9RUDcmX1xCJTEzXycxJCwKK01fUUw2JU9cNCUhP18kUUA4X1JETSpfXktJSjtfV10jK19bKktKX1xQLSM7XypDKFRfUkxYLj9cSi1DL18KK00rU1BdX1JIVi5fXEssUz9fKjMoUl9SRFUtL1xELCJfXykjIE9fUkhSLS9cSixDM18oIkBKX1FAQykvXDoKK00oQjNfKCI4SF9SQE4sL1xGKyJbXysiUENfUVBbNz9cJyRSW18nMTQ4X1FUVzwvXEcsVStfKVI0SF9RWDkKK00nX1xEJ1IvXydRUDtfUjBDKE9cSClCR18oUVBDX1FUOykvXEMoUlNfKFIgP19RUD0qL1xIKFI/XylCNEsKK01fUlBILC9cUysjL18rQkRNX1M8VS4vXzVTLFNfWi07M19YWi9EL145RSlDX1UsNyVfXD5YTF9eTkkqI18KK01RS1pcX1VZOTY/XyxQS1tfRChKKF9UPSgyP18nUTwjXyxCSEhfXFMkUi9cRCkiP19OKyJMX11DKlFfXy4KK01QPCNfQSdVV19SKEQmX18qUUtbXzIjUFVfWlJMSF9eTEsqL18sIlxIX1pOTEk/XFcuUy9fRCkqKV9TXF8KK00tL10kMTNDXzw3JURfVjlHNk9eMUJYL19WLDZfX11bIk9fXklEOFtfKVFAOF9SRD0oL1wyIzBfXyQwXCwKK01fUkxLJy9cUi0xX18sMzA9X1JcUyc/XE4sIldfLEMsVF9TJFIsX1xRLEMvXypCREhfUTQzJT9cOCVBQ18KK00zRFEvX1E0OC5fXkFHKztfOUYlPF9aPkJOT1w8JlNfXyhSKF9fVU07O09cUy4jK18uM1RVX1IgPyk/XEsKK00qIzNfOTYxSl9cQyJQL19eW18jX1FLMlBfU1hcMT9cRCojI18mITgzX1FANyVPXDUkUTdfJTEsNl9aKj0KK01HX15PSVpLXyYxMDhfUTg2Jj9cRSpCS18tMzxVX1s2UEpfXzxTPENfWC0nMV9YXiZBT11KOTY3Xzc1UTsKK01fVEUvMl9cSy1DP18rQ0hfX1JYVi5PXEosUy9fKkM4VV9SOFIsP1xCK0JXXylDJFJfUihNK09cQisyW18KK00oUlhPX1E4PigvXDsoUjdfJzI0R19SIEgqT1xPLDJDXykkITtfUFA3K19cQScxX18oI01RX1IwTTJfXDoKK00mMV9fKFFYQl9RXDsmP1xZLVMjXzJEQSBfVFEnMV9cNSYyW18nIlUxX1FUVzhfXEkwJktfJ1JFJF9VSTQKK002L1xIKTJPXydSIEdfUVg6Jy9cRChCM18qIjhDX147PFYvX09XLVNfMFQtJl9WTUY6T184UjxHX09bKk0KK01fWz5NSj9fJE9LU180NFktX10vKlEvXl1MWl9fSio2RF9cSyVPX15RSTonX1ErUyBfUlRNLC9eV0taV18KK01XTSMtX1MsSClfXkFHKTtfNSUxK19WSUo3X18gTUpTXy1DTE9fWVZCRU9dIS9TQ19OW0pTX1QkXy4vXk4KK01KOi9fNSUxK19TTF4sT102NjRXXzRFNSlfVFktME9fN1FbW19dLTcvX15LL1IvXzZPW0tfSjk+M19UQF8KK00vX1wzJCE7XyUxKDhfUUQ0Ji9cNyRRN18sIlRMX1E4MyRPXD0mMU9fKVIsRV9RQDQlT1w8JjFDXysyQEgKK01fVFkpMl9eO0U5R18jUExfX1o+QlMvXlZMW19fS0ovOF9RMDEvL1xAJ0NfXyoyOSNfVilDO09cWi5TU18KK00pQjhJX1IwQypPXEwrIl9fVExLKF9fX1NdX18uTytHXydRUElfUVA/Kl9dLDI0Q18nIUw6X1FENyY/XDkKK00lUUtfJyE4Pl9SIDooT1w8JVFXXyYhODlfVD0sMy9cXS9TV19PW0pVX15TPVYvX1BXPT9fVCtWV19eQzcKK01UP19AVDxPX0paSkNfU0UgMC9cTy5TX18qIyBSX1JQVS0/XEktMzNfKiMwU19SPFMsT1xEK1MjXyhSWE8KK01fUixOK19cQisyW18pQyRSX1JMVi1fXEotMztfKVMoU19SUFYrP1xVMTVHXyQhWEdfUVxBKS9cTTInW18KK00qQzEvX1IsQylPXEwqIktfK1JURl9VQTczL11DOEU/XzclQTZfUFQ2KV9cLClFJ18kM0lcX1FZJEBPXEcKK00uNV9fTEpWU19STEYqL1w+JzIvXykhXDlfWVI8RF9cUStSQ19bTis9X18nO1cvXFktU0tfUkwzKF9dXywKK01TL15ZSyo/X1A7PlNfXCJaTi9dMjNUW19WTScrX1tSVEwvXlpMWy9fUywuXV9dOyhRP18uUUxLXykyNEgKK01fXFMkUE9fOlMsR182VS0xX1NEWCw/XyFPOzdfKEI8O19YIV08T1xZLyMjX01bUlBfVVU4NE9eRUdJQ18KK01GKF4pX1dFTTovXSQxI09fNEU1KV9USS0wP10lMiNTXzg2JTZfXDpYS19fT1RcU19YLD8gX143Kk9fX1AKK01VXSNfVEwvI19SIDYnX1w1JCE7XyYhMDZfUjRCKD9cTysyS18lQSwyX1M0USxfXSMvVCdfJkE4OF9SOEEKK00oP104NFUvXz03IVJfWE4lQj9cMicxQ18mITBbX1JQPzZPXDwmRCdfJiFEUl9RLDArP1w5JUNLXylSNSYKK01fUyhQMC9cRikyT18pUjxKX1JASSpPXzhSTE9fX18rUl9cVlxNT1xAJ1I7XyVBTEFfVC0hL09cRSkiL18KK00lQTA2X1FIOCZfXiw/V1tfRkhSLV9SJDcmT1xAJlInXy5DXF9fUzRXLT9eX05LN19cLic8X15XP1cvX0MKK01VPStfVkxLJ19eJzFTT15SSlo3Xy9UJF9fUlxaLl9cTi5DR18rM0RYX1JUWS4vXE4uQ0dfK1NMWl9SVFgKK00uP1xOLjNLXy0jXSBfUyhdL09cTi5TU18rU1BdX1I4Uy0vXEArMltfJzJYRF9SJEUtL1w7KkJHXywjQFoKK01fUjRdPS9cSCxUU18nUiBBX1JERik/XEkqMjtfMkRVJ19TSF4tT1xWLVNDXyVSJFBfUVxbOV9cMC8oI18KK00nRCFfX1JIXTlfXj9GWi9fMFNAV19SPEUqL1xLKUIjX0dZVjZfUyxOKj9fS1ctV19bXUM5X1JMRipPXy8KK01RXE9fWSxbL19bUk9KT18pT1tPX01bJk9fVFkrMk9fO1RMU19NKlJIX1xHIFAvXzZRXCtfVCwiXV9cVyUKK01SP1xIKiJPX1I8Jl9fXS8lUE9fIU87T18uM1RVX1omOEQ/XEssQjtfTSpSQl9ULF0sX14uQzgrX0gpWjcKK01fVVU7NS9eTElaJ18wQ0xVX1VdPzVPXSkzJCNfOCYtN19VNTgzL10pMyQjX1BbPk5fXTJZTE9eTEVIW18KK01PWjo/X14nKFBfXzpQPCNfVFtWX19RTDQlL1w/JyFPXzdVVTpfUjhEJ19cWy9TV18rIlxQX1NMXi9fXFcKK00uQ09fLjNUW19VWUA3T10/OCYnXzJUTS5fUTAwJi9cNCNRT18jUTAwX1FENypPXDYkMldfJVEsTV9RNDQKK00sP1wzJEM/Xy4zNStfUyxSLj9dJDFEM18wVDUjX10nKFIvX19dTytfUDsyU19RXD4pL1wyJSE/XycxRDcKK01fUjA/J19cQScxX18lMSw2X1MwSSovXSMuIz9fJ1FIPF9RSDonP10kMUQzXywjQFRfXC5ZTT9fUVctS18KK01ZXU83X14nNVQ/Xz1ULE9fVjxXJl9ZWjdEP1xDKCFfXyVBQD1fUTw7Jz9cPyhCL18nMVRAX1IgQChfXEIKK00oQjdfKTJES19SNEsrP1xGKyJbXypDIFJfUlBQLE9cUi4jS18pMyhTX1I4USxPXEorUldfJ1JIUV9SNFAKK00qP1xFKVJbXykjXVVfUkRRMl9cRChCM18pUkBJX1Q9JzEvXTQ1NF9fNEU1L19SOEgqX1wvKSQjXyYkLU8KK01fUDhSPy9cRjFYX18oU1lNX1tCR0lfXFArUzdfKlI4QV9TLFErT15ARlk3Xy0iUEhfXk88Vz9fT1Y9S18KK00rIkRIX107LVM/XztTLFNfPlctT19dPyZRT15QSlpPXzJESS1fXU8zVD9eWktaW19SS15eX1w2WE1fXyYKK01PK0NfUjtfKF9SUEgqT18gTytLXz5HMVJfWyZMSV9cXS4jK19CSCVaX1RZLDE/XUU3RUNfQyg5Xl9UMSEKK00tT15BSClHXytCXEhfWkpJSE9cTCpSM183RiE3X1QhJC5fXSMxU1tfMDQ0XF9VQT80X15FR0krX1I6XkYKK01fXDZKR19fKkxKR19SSypJX1w+UEkvXypMWj9fLlJcS19TWFovL1w/JzIjXysySElfVEEpMF9dKjJUN18KK000RS0tX1UpMzM/XSwyJDtfMlQ5Jl9RRDUlX1w1JTFDXyVRKDRfUTguJi9cNiQhW18lUTQ+X1E4MypPXDUKK00kMk9fJVE0T19RSDstL1xBJkNTXydBQExfUVQ8Jl9cRSkiL19CKC4nX19fU1tfXldKWltfJTEoOF9RPDcKK00mT11VPCcjXy8zQFhfUTgyJS9cOCVBR18pQVw/X1FMNCUvXDslUUdfJTE8Ol9USSkyL1xULyNDX1BbTlkKK01fXks7Vl9fQFQ9K19YTSM0X11HKFIvXzNQXCNfR1lKNF9RXDsnP1w1JEFDXyRRLDZfUUA2Jj9cMyQxM18KK00mMTw6X1E0MyVPXDAkIS9fJCEoNV9RRDsnT1w3JjFTXyUxNDhfUUQ9J19cQCsyW18oUkxNX1JASysvXD0KK00qQl9fKTJMR19SUE4tT1xEMDc/XykyTSVfUiw/KD9cRClCM18vU1RWX1UlMTIvXT03RT9fJiFEOl9QWEQKK00xL1w5MSZbXyFDLVpfUkEpRE9cPi5WT19OWjpCX1IgRCsvXEUoIUtfMlRNKF9aJjxFT1xaLCJTX1k9OzYKK01fXyM6Vl9cVi0jJ19WLSMuX11bL1NfXjpFSTNfV0xfMF9aNkFIX10qMyRfX1QsRylfWlJGSS9fNFNMU18KK01QK0pYX1wyXE4vXl1MW1NfLEJUTV9TKFArP10oMURDX0ZZTjhfWUI2RD9cXS5TM19KOjZDX1MsTys/Xk8KK01LKj9fMCNYV19ZUjpFP1xZLkMzXz03OVBfUjxIKE9dJTI0J18tQ0hSX1QxKDAvXSIxQ1tfMURRJF9VMTAKK00yL18qTVpfX1JLKklfXEZRSi9fI0o6I19PKiY2X102WEsvXl9LKitfMFM8U19RWDknP10nMERDXyVRLDUKK01fUVw7Jz9cRSgyL18wQ1kgX1NcVy0/XkNGSUtfJlE4OF9RPDUmL1w0JDE/XyVRLDxfUFQsJj9cNCRCN18KK00nMURTX1FQOCxPXDsmIl9fJTEoSF9RXDotL1xGKFMjXy0jKE1fUzBSKl9dMDU1L19fXyNMX1smRUovXD4KK00mUidfJlFMPl9SNEAoL11VPCcjXyYxNDdfUSQvJE9eSkhaL19MSk5LX1E8MyU/XDMlMUNfJ0FIPF9SJEkKK00pT15RS0pXX1A7UlxfVz1cQD9dKTQ1N18wVE0tX1QpKzJfXSozVEdfJVE0N19RLDAlT1wyJCEvXyZBQDsKK01fUTAyJT9cNSRRO18kUSQ0X1EwNCVfXDIkQTdfJjFEPF9RSDonP1w4JiFPXyZRXEFfUiBNK09cQipCU18KK00oUkRLX1FIRSsvXEMpMi9fKTI4UV9SOSI+X1w/KSNbXylSLEFfUzRWLC9dJzEzV181RTkrX1RVLzFPXEEKK00oUidfJTJRKV9SISs9P1wpLUdXXylEPjBfUVBZOj9eUUcpQ18lMURBX1I4QSZfXTM0VSNfRyk+MV9UIFYKK00sT19OV11fX1tdRzpfUyBOKl9fOVQ8X19XXSMwX1dNWT1PXztTPFtfR1lWP19UNSkyX18zVCxfX0s6TkgKK01fXTczVC9eXE5LP19IWVo5X1pGP0ovXFQrUl9fJyFIN19TNFgvP1w+KFIvXyVBSDhfU0BaLV9cUytTJ18KK00mQTg4X1chTTsvXSYxJCdfKiI8Rl9TMFYtL15CSSorXyhSNENfVV1BN09dKjMkR18wNC0gX1NdIS9PXTkKK002VUNfM0RZK19WJTw1X145QzhDX01aNkFfXEJUTC9fMU4rL19UOzZOX1xWVElfXTQwU1dfKFFIQV9VNS8KK001X11YPEdLXz4nJVtfV1lXQD9eTklbJ19KKV4/X1peRklPXDolMT9fJVE0OF9RPDkoL1w0JTIjXyhSKFMKK01fUUg3K09cOiVSV18kUSBCX1FENSk/XDQjIUtfJCBQNF9TMFEsL1xfL0MvXzJUQFxfU0BWK19fX1w+V18KK01KSVpBX1IkPikvXDomQVdfQTgiIF9bOlFMP1wyI0EjXyYhODlfUVQ2JU9cSykiM18mMTQ3X1E0NyZPXUgKK004RjtfJTFQPF9ZSj1HT1xaLzNbXytDXF9fUyUiME9cVDFEM18uRFEoX1RJMzMvXDQlMTtfJUEsOV9RUDYKK00mT1w5JVFLXydBUD9fUTQzJU9cMyQxM18lQTA3X1EwMiU/XDwmQVdfJkFAO19RNDUmL1w6J0IjXyhCXFAKK01fUUhCKS9cQipCW18kUVRHX1IoPigvXDonMkdfKDNJVV9SMEYwP1xKKTIjXzQ1JSZfU0xbK09dODY0U18KK00sMzBIX1FYQCc/XDgrVFNfJ1RJVF9QRFY/P1xKMlkzXyhDXU9fXDJPSl9cNCYiI18pQiQ7X1cxVDw/XkgKK01IWVdfMjNcW19eSztWX19SVy1XXyhCID1fWV43RT9fNlFcP19OO0ZWX11PL1QvXjhGOUtfNUVRPl9cXygKK01SL15aTEsjX1ZNKzBfXCpaTi9eW0xaX19JOU5EX1UpLTM/XEIoIVdfJ0FURF9RMDYmX1w3JTFDXychQDoKK01fUSAtJF9cMyQhO18kUSQ0X1JMSSpfXEsqUltfJjFMQF9RMDYmX1wxJFFDXykiNEZfUzRWLV9cXi9UI18KK00yVFEtX1JARio/XDYmIU9fKyMkUV9WOUg5T10wNSUrXy8jWFtfVT0yMz9dTDglT18/Vy1MX1cpSjovXD4KK00mMVdfNCRJLl9SJDwoT1wwIkErXysiOE5fVlFGO09dPDRVL19LOjJEX1FINSVfXDclMUNfI1BcOl9RKDEKK00nT1xCJ1JPXyVAXDlfUTQ0Jk9cNyYhR19ISVY9X1o6PkcvXSoyJCdfMUQwXV9UWSkwX10yMyQzXz9XPVMKK01fX19aXk9eXEw7I18pUihCX1IwQChPXEQnUV9fQzhKKV9QXCsjP1w1JCEzX0xKQkRfWz5LSV9cPyVRN18KK00nIUQ4X1FcNSYvXEApIitfRUk6M19VXUI4X1xUMEQnXy4kOSVfU0kpMT9cXjM0Q18wVF0mX1EkNCU/XDsKK00lQVNfJFEkNF9RQDYmP1w5JVFLXyVRNDhfUTAyJT9cOSVRR18lQTA2X1FQOicvXDUkUTdfJiE4OF9RUEEKK00oP1xGLEMnXyhCRElfUjRMKy9cOScyU18nUUw5X1BYNSg/XEEuVzNfJkFcWF9SPEYpP1xLKzJLXy0jTFQKK01fUzRYLj9cTyxST18sMzhQX1FQUTRfXEs1SDNfJUQyLl9SWS1FP1xYNDczX0pZQjhfUUhCJ19cPiUhP18KK00/J01UX1oqOkVPXUA1JT9fWT0/OF9eTzxXP1xOKkJDX1AsJltfWyJJSF9eSEg6J19XLFcxX1g6K0JfXUEKK006RktfVT0zLV9bVlpNP18/Vj0/X1JcMl5fW1JXTE9eLUIoS184JVU8X1MsUiw/XDonIV9fJUFAPV9RMDQKK00lX1w4JUFHXyRBIDNfUSgwJF9cMyQxM18pQjBGX1FYPig/XDomQVdfJSEwN19RJDElL1w0I1EvXyUgXDMKK01fUSwxJS9cMiRBN18lUUg7X1FIPStPXC0kMiNfJiEkQl9SNDorP1xHKzM3Xy1DTFlfVTE2NF9dNTREV18KK001JSEuX1FENCYvXTEzRTNfK0JMUV9SKD0oX1xOKTJTXztGRU9fVFUkMS9eTkk6N18mISw1X1E0MyVPXC4KK00jMTNfJSBcM19aUkdJX11cPidLXy4jOFhfUyBQKz9eNkVIV19IOVI2X1RRKjBfXD4nQU9fKFIkQ19SQEMKK00oX15XTTtDX19fM1FfWiY2RT9cOiVRO18nQUg8X1M8VCxfXlZMWytfJUEoNF9RXDonT1w+JjFfXyUxKDgKK01fUTw5KC9cNCZCK189VyFXX1FQRCgvXipDWEdfPjdZXF9TNSEwL1xZMEQrXy40LSBfU00mMD9dIjNEN18KK00kQSw0X1FENCZPXDUkUTtfJTEsNl9RODQlX1w3JTFDXyUhKDVfUTg0JU9cNyUxP18lQTA2X1FENyY/XDgKK00lQUNfJzIgQV9SKE4rP1xAKVI/XysjMFFfUSw1KS9cPCYxM18iUTRAX1FIUjpfXDknUzdfMCNcXl9UISIKK00wL1xLLCJLXydRUEJfUzhUKz9cVy4zO18nUzk5X1JFN0EvXDoxSSNfKlRKMl9TRTI7X15RR1onXyVBWDoKK01fUjg7KC9eKkJXW19JOV43X1ZBOjZfX0pWPUdfWi1DPF9TRFQtT11ZPjc7X1U8RyRfWjY+R09fOFMsX18KK01DOSoyX1dSI0BfXyhRS19fTztCU19eIzdVX18qUDtPX09bPlVfWEolQT9dUTtGV18rQlRMX1FIPCdfXDYKK00mIU9fJSEwN19RQDYmP1wvIzBfXyRRJDNfUSwxJF9cRChCM18nQVA/X1FQOic/XDklUUtfJSEoNV9RNC8KK00kX1w0I1EvXyQgWDFfUSwzJU9cOCdST18nUjUlX1EkNyw/XDolUldfNiRFQl9WMUk9P11EOjZHXzVFQTUKK01fWDYjP09dMTM0T18mQTQ5X1UpLjVPXV8/SDNfP1dBX19YIVc/T15WTDs/X0E3UVxfWjo9Rz9cPCVRR18KK00nIUg9X1FQOyg/XDwlUUdfSzo+RV9YOiFBP1xbLjNTXytSWE1fWDomPz9ePUZJN18yNDRdX1FIOCRfXDoKK00mITdfLSJUR19bWlhPL19fXS8jXz83OVZfUUQ6KD9cMCNBJ19CKDIiX1pKR0lPXD4mQVNfJzFAPF9XMUkKK006L11OOUYzXyZBNDVfUVQ7Jz9cTylSS18lUiA5X1M4XSxfXFowQ1tfKUJUTV9SLEYpX1w5JzFPXyoyWEoKK01fVDkwMV9cOychV18mMTA6X1E0MyVPXDglQUdfJiE4OV9RQDYmP1w0JEE3XyVBMDZfUTQzJT9cNiUhO18KK00mMTw5X1E0MyU/XD4oMitfKFJcTl9RIDclX1xLLFMjXyUhOEVfUUw4JF9cNCdCR18mMyVIX1JcUzIvXSgKK00xRC9fKSIwQV9SVEsoX1xaLCMvXy4zLEtfU1xdLk9cRDAmK18rJT4lX1FZJkQ/XEoyWS9fMSVdV19bPkUKK01KP1wzJkFLXyhBPDxfWFYwP09eQ0gpM18+JyFOX1wmVU4vXzJSXTdfJyFYRl9TQFsvL15VSiovX0o6MkQKK01fXUcvVE9dXUBIK19GWVo/X1xLJVAvXlpNKytfVy0rNV9cQl5OT18uUUwzXz9HRVlfWEYmQT9cPydBV18KK00lUUQ8X1E0NyZPXDEkMTNfJVE0OF9RMDUlT1wuI1EjXy9UISFfUVg/KC9cRykyQ18pMixGX1IgPig/XDQKK00kQTdfJUEgNF9RMC8kX1wvIzEjXyNQXDJfUVBFLz9cOyg1J18kUVkgX1E4Oy0vXE8oI0dfOjZZWl9WMUkKK006P11IOkY/X0I4PiJfVSkuMy9cRCdSL18vI0EgX1Q5JTJfXDEiQSdfLkMkWF9YUidDP11DNkVLX0hJRjkKK01fUVw6Jy9cNiUhP18kUSg4X1FQNyY/XkpJKitfLSJcU19RSDgmX1xHKUI3Xz9XXVZfV1VaPT9cXy1DI18KK00qUjhBX1FcOiUvXTYzJCdfUlwnJF9fX1ZcL101M1UvXy0zSSZfUkBFKl9cRCghW19MOlpNX1FENSVfXDoKK00lMUdfODU5NV9WLTk1P1w7JVE3XycxUDtfUkg8Jz9cSCoyK19FOTIpX1g+KEBPXEUrIlNfJ1I4Rl9RWEYKK00oX1xKLEJbXzJFOS1fUUA5Jk9cNiQxP18kUSQ0X1E4NCVfXDYlIT9fJUEwN19RLDElL1w0JEEzXyUhKDQKK01fUTg0JU9cOSVRR18lUTQ3X1FcQihfXEcsUytfIlEoMl9SVFUsT1wvJDIjXyZRQDNfUTxBKy9cOSwmN18KK00nQiRTX1IkPyYvXEwqQjdfLyNIS19SPEInP10qMVNTX0BIQiRfUi0iOS9cTDVYN18nJCIrX1JVLkVPXSkKK005V1dfUCpaUl9RSD8pL1xDJjFTX0QpIiFfWVo8RT9eLENJL19GOjJLX1k+Q0xPXSc2JjdfLkQ5Kl9YWiYKK01AT15ISTozX1c9NzhfWS44Ri9eSUpKT19QO15cX1tKWU4vXzhUXT9fTks6VF9cRyJQT11TO0ZbX0E4KiEKK01fUlxOKz9cOCZBV18mQVA/X1EoMiU/XDglQUdfIzBYL19VQTs3L10xNSU3XyhCNEZfUiA+KD9cRChCN18KK00nMUw+X1EsMSUvXDYkITNfJSBcM19RJC8kT1w0JSE/XycyOF5fUVBDND9cNCc0K18nIiBcX1JYPi5PXUEKK005RytfNjVZPl9WTU06T141RFhbXzQ0VStfUTwyJU9cTCojI18nQVRDX1MoSyxPXFosM0NfP0dFX19VMSsKK00yX15JSCojXychPDlfUUA2Jj9cMyRBQ18mMTA2X1o2P0c/XDgkUT9fJTEsNl9RSDkmL14hQDdDX0Y5OjEKK01fU1BYLU9cRihCM18mMUA3X1UtLTBfXyBPO1NfX183Ul9UIFovT1w7JyIvXyYhRDpfV0FaPV9eXE07N18KK00mQUA6X1E0MyVPXEYnUV9fJkE4OF9RODMmP1w9JyIrX0JYOiZfUkhLKS9ePUUoV19AWCVcX1JcVy0vXEgKK00rMk9fJjFcO19SVFMrX10zNjUnXyYhODhfUTAxJV9cNCRBN18lMSw1X1EwMiUvXDMkMS9fJSEoNF9RNDMKK00lP1w0JEEzXyYxPDlfUUQ3Jj9cNyYhR18oQjxHX1JQVS0/XDsoIiNfLTM8X19ROD4mT1w9JTFHXyYxXEcKK01fUjBWO09cOSdSX18pQkhCX1JUUCpPXFYrMjtfLlM4Vl9WVVA8P10mM1RfXywlJUNfUU0wQU9cOy5XL18KK00uJF1aX1VRSD1fXlpMSztfKEFUQ19SIDwnT14tQ1g7X0hJXjRfVS1AOl9dKzsoL18xVk4gX1IlIjYvXEEKK00tRCtfKjJMSV9ZXkFHT18jUUw/X0EoRi5fXC8kUT9eX08rT182RVU+X1tbI1BfXF4wNCtfUzxHK19WJTkKK003L143Q1krXyYxPDlfUjRFKi9cOSYxU18kUSw2X1E8NyZPXDAkIS9fJ0FYQV9SLEMpT1xIKiJPXyYxRDwKK01fUUw7J09cNSUxQ18kISAzX1EsLiUvXDMjQStfJEEgM19RTDooP1w1JyMjXyZCJStfUTg9MD9cOycjT18KK005RF1ZX1ctUD8/XEotMztfJ1IgS19XVVo+P10nMSQvXyYhMDZfUlRIKy9dJzBEQ18xM00kX1QsVC9fXiQKK00/KDtfODUtNF9aJjlHP1w0JEFPXyRRNDhfUSwxJF9cPCVRP19FWSYvX1BUKyNPXDUkQUNfJiE8Nl9WNUYKK004L11LOjY7Xy0zOFdfUUg8KD9cNCRBM181JSkqX1tWWk4/X19eLz9fMyQxKF9SNEQqT1w+J1IjXytTMFAKK01fW15WTU9cOSVRR18pIjBHX1suS0o/XlpNOz9fJlE4PF9RJC8kT1w+JjFHXydSLDtfWiY2Q19eID9HR18KK00tI1BYX1NEXy5fXE0sUl9fLTNMV19VVUA2T1w4JUFDXyUhJDdfUTAyJT9cMyQxL18lMSw1X1E0MyU/XDUKK00kUTdfJFEkM19RMDIlL1w5JVFHXyYxPDlfUTg3Ji9cQSoiQ18sM0haX1EoNyVfXE0rM0NfKFJMQV9SLDkKK00oT1w/KTJXXydSVUVfUzhVMU9cVy4jK18vVCReX1MsWCxPXjlJOjNfRjo2SV9WWVU9P10vOTYvXyxVRVkKK01fVzFcRC9eKEAnW19BSCYhX1pSRkpPXDslQVNfJ0FQPl9YVi5CL149RihTXzIlRUZfVD1NQi9eT1NeN18KK009KFpDX1QxNDdPXiRBKCdfRjlKNF9SPE0rX1xQLTNLX0wqWlBfXC5fUD9dRDo2R183JkFHX1cxWz5fXiQKK01COEdfRDheMV9aQkBIX1w4JFE3XyUxLDZfUUg6Jz9cMCQhL18lUTw6X1BYLiQ/XDYlQUdfJzFUQF9RWD4KK00oP1w/J1IrXyYxRDxfUUQ5Jy9cLyNRK18kUFQ1X1EsLiRPXDAjQSdfJSEoO19RND4tT1w5KFUjXyZSNSoKK01fUTA5LV9dRTNXU18/R0YlX1EgOCZPXDomQj9fJzFEO19VNTI0P1xIKSI7XywiTE9fUjxDKT9cQiYhT18KK00sQjRKX1dFUD1fXSEtQzdfOCU5OV9RJC4lL1w0JCErXyVBKDRfUUQyJE9eNUNYV18lMSg4X1EwMCYvXDcKK00lMT9fNzVZOF9ZWj5GX1xRLEMvXychUD9fUVQ7Jz9dKzJEL19BWDIjX19fWF1fXSMuU19fJ1FYRF9RNDYKK00lX1xFKTIrX0w6NkZfUUw5Jl9cOSZRW18mMSwxX1E4MSRfXDwlUVdfJlFEPF9ZKi1DP10lMjQnX0hJPjAKK01fV11dPi9dPDk1W185RlVFX1YhRzdfXUE6JiNfOSZBQF9RQDYmL1w5JUFTXyVBMDdfUTg0JU9cOiYhS18KK00nMUw9X1E4NCVPXDUkUTdfJEEgMl9RRDcmP1w3JTE/XyVRQDlfUjhNKz9cVC8zV18lIUQ5X1MsUC8vXEEKK00qIVtfJkEgOV9QRDImP1w7KjYnXyZRPEdfUjxBJ19cOCZBV18tJE0qX1g2QUkvXUQ+J1NfMzU5Nl9VKUkKK006L1xTNic/Xzw3KV1fWT4gOz9eJT1WW19KKiI+X1IkPyhPXD8nMV9fQzhKJV9aQkFFP14xSEpfXyk0XUkKK01fWy8vWS9eVVJNU18kUVRHX1hKJT9fXiNAJ09fJ0IoRF9VRTs4L15fTltXX087RltfUlBRLD9cVDAjX18KK00tI1RdX1RRODVfXEQpUkNfRShSL19RRDElL1w2JSE/XyZBSD1fUSAwJF9cOCYhT18lMTQ4X1FYPig/XD4KK00nQidfMFQtJl9SSEorP1xAKCIvXypCSE1fUSgyJT9cNCNBO18lIFwzX1BYLCNfXDMkMUtfJTIkXF9RSEUKK001L1w8KVRLXyxDNS5fVik0Pk9eID9IP18jMSA1X1E0MidPXDAjMFNfNCRVLF9RRDUlX1xAJlFfXzBUKSgKK01fVTk0NU9dQzclU19JSipKX1ZZTz1PXDYlIT9fJjEoMl9TJEUoP1w/JkFLXyZRMDRfWkZDSD9cNCQxP18KK00kUFw3X1BcLSNfXUI4VVdfRllOOF9TVF0uT1w9JlFXXyZRRDxfUlROKi9cOiVBQ19fX0tZX1JMQylfXDIKK00kMT9fJyFUPl9XRVc9L15GRVlDXyUxLDVfUkRNK19eW007L19HKT45X1FAMyY/XD0mUVtfJVEoMl9UNSkKK00wP15IRzk7X0E4LV5fVjVPOU9eJUM4L187JzFKX1Y9Tzk/XUk7NjdfJVE0N19RSDcnP1w6JiFPXyYhODgKK01fUUw5Jl9cPichW18nIUg8X1FANiYvXDomIUtfJkFAOl9RQDYmL1w3JiFHXyoiXE9fUyhbLl9cNCYxR18KK00tMyBcX1IoRic/XEAlQV9fJzJEUF9SJFY7L1w2JSIzXyhBXD5fUiRNLS9eKkkqP19ASVZEX1VVVD4/XSYKK000RF9fNDZJT19SVTU/L11UPjhPX0Q4IVJfVy1ANU9ePkRIV18oMihDX1FcOyc/XjJCSDtfSVlWMl9ZRkoKK01NX11WSEtTX0YsMzhfWkctWE9cSi5UQ19CKC4jX1lWOERfXD4nQidfMlRJMF9cNyBQT15OSUpHXy5DQFoKK01fU0BbLy9dKzNEX18vRC0jX1FIPSdPXiI/SCNfJiFEOl9RRDknL1w8JyFfXyRRLDZfUTA0JV9cNiVBR18KK00lQTg5X1FIOic/XF0vNCNfJ1FcQl9RRDknL1w/J1IrXyNAWDFfUTAuJU9cNCNRL18kMFwyX1EoMCY/XDgKK00oQ1dfKEJJNl9RODwtT1w4JiInXzUkUUdfVCBeMV9cSylSX18mUUhBX1guIT9PXTIzVFtfJkE4OF9SPEIKK00pT1wtJEIzXyciLFFfUyhVMC9dRzs4L189SCZAX1FcRC1PXD0lQTtfLiJURl9SLD8nP1w9JUE7X0s6PkUKK01fUkxIK09cPyZSL18lISg0X1YpQzc/XDsmUUNfLFMkTF9RTDglX1w1JFE7XyoyVEtfUUA2Ji9fWVs+W18KK00pUVxCX1E4MSU/XD4mUUtfJzFUOl9ZSi5EP1xIKTJPXyoiREpfUyRJKV9cSikyP18lMSg4X1IoQChPXV4KK00+N0dfNlU5MF9aLjpEX140REhXXztHNU5fWSY2RC9dWj83P187RzVOX1cpUzs/XDQkMSNfJjEwOF9RRDQKK00mL1w2JSE/XyYhODlfUUA2Jj9cOSVRS18mMTw6X1E4NCVfXEAnQiNfJVE4NV9RTDomP1xHLFMjXy0jRFcKK01fUTg6Ji9cWC9EI18oMVw8X1FYNyQ/XSYzRVtfKSJVPF9RSDspT1xAJ0FPXylDMFNfWDo7Rz9dU0I4T18KK004Nz1VX1VNRDc/XT49NyNfK0RdWl9XQVw/T148QVgrXzlVSS1fWEoiP09cPygiJ18rUyRPX1g+LkBPXkkKK01FOFdfNCVBQl9WMjRKP11ZSiwjX0ZcV0hfVU1cRF9eXE1bV19ARzlXX1FcQCg/XFsvQ19fU1xHJ19aQkEKK01IP1xRK1MnXytSXFJfUkhJK19dPDYlO18nMUg5X1QtIjIvXCkiITdfJzE4Ql9SIDooT1w5JUFTXyQhLDQKK01fUTQ1Ji9cNCRBN18kMFwyX1E4NCVfXD8nMiNfJUEwN19RJC8kT1wxI1ErXyRBIDNfUSgwJE9cMiQhL18KK00lMSg4X1FUQzBfXDElQyNfJDBcMl9RPDElP1xJKTJbXylSMEpfUyBNLF9cTisiX18sMlxRX1I4RClPXD4KK00mQVNfMENUX19SKEUvT10qNDY/XyUhWExfUixTMz9dKjVHN18iUFA9X1IkOSU/XUE3JEtfMFNYWV9RQDMKK00lP15CRzlfXypCMExfUUg1Jl9cNSVRN18yNFEmX1UhLzIvXkxISVtfJjFUO19RQDkmT1xIKUJHXywiWFAKK01fX19TXE9cSCgiL18pIiRHX1IkPCcvXF8wM1tfPSZFTl9RIC0kX1xFKUI/Xy0ySElfUjxBKT9cNCRRR18KK00mUTw5X1VNNjVPXUc4JUtfSClKMl9aNkNHT14gQTgnX0cpVjdfWSowQl9dVj43L18+J0FVX1E8NCRfXDgKK00lITtfJVEoNl9RJC8kT1w2JSE/XyUhKDVfUTw1Ji9cNSRBQ18lQTA3X1IsQShfXDsmQUdfJyFMOl9SPFYKK00sT1xYLyNLXyYhUDpfUlxbLi9cRShCJ18tQyBGX1I4TC8vXD4pVSNfJTFMQ19SKD4nL100NlVPXzUmPUcKK01fVzIqQj9dW0NIQ184JklBX1VFUDpfXE4yV09fPVdRWl9ZRiNAP11VOlYjXz1HIU5fUkhLKy9cUCxCX18KK01DWFojX1ZJQjgvXCwpUytfPDpDIF9YLlFTP11CRUs/Xz46KyBfWy5TTy9dTjhGL18pIihEX1JYUiwvXy8KK01SPD9fR1lKOl9SUEorL15GSUpHXypCUFFfWyZNSl9cOyYhP184Ri1KX1I8RCw/XFwuNDdfKDIoSV9RMDMKK00mP1wxJDEzXyRRJDRfUTg0JV9cMiQhL18kUSQ0X1FIOCZfXDclMUNfJDBcMl9RJC8kT1wyJCErXyRBIDIKK01fUSAuJD9cPCYxX18nIi0hX1BILSdfXDAiUE9fKiIsRV9RQDUmX1w5JVFLXykiKEVfUiA+KD9cPSZRV18KK00oQiBCX1ZJRjovXEYoMi9fJFBcP19RQDgoX1w1JiFXXyZCNFBfUVhGLk9cWS80N18pUig9X1M0TylfXUwKK006VktfIyBULl9aMkJHX1xVLCJPXygxUDxfUTg4JU9cXjBTX18zJEklX1w2WU0/XSczJEtfK0JcUF9RRDQKK00mL1w4JUFHX19fM1FfU0RULk9cNyVSM18pQiRFX1JESyovXV08Rz9fJkE8PV9YSitDL15SSVo7XzwmSU4KK01fUSwyJi9cOiVBQ18lUSgyX1c9UDpPXjtFOFdfTis6UV9bVl1OT18hT0tHX0o6Jj1fWVI6RT9ePEZJP18KK00pMihBX1IgPCdPXDwlUU9fJFEkNF9RSDgmX1wzJDEzXyVRNDhfUTw0Jk9cNyUxQ18oIVhAX1FEOCVfXD8KK00nQVdfKkNEVV9TPFsuP1w4JyFLXytDOFJfUjxCKU9cRylBX18pIkRVX1FQRjJfXDQmUidfL1NMWV9YMikKK01DT143SypbX0A5OjhfV0ImQT9dRTs2R183NzFPX1IxITw/XVk/R1NfRTddXV9XPU04T10oMEQjXyoySEsKK01fUixFKE9eP0QoT18mMixHX1M5PzxPXTtDOkNfOTkuT19VVjFMT10wPzlPX0pLIlpfVV01Ni9cTCpCU18KK00lIUA2X10jKlIvXkBGWU9fJ0FQPl9bIlBMX10iMSRHX0xLIlNfUUg6Jz9dUz03Q18lMSg4X1FYQikvXEUKK00qMk9fJSEwN19RLC4kT1w2JSE/XyZBQDtfUTw1Ji9cMiQhL18lMSw2X1EsMSUvXDAjQSdfJDBcMl9RJC8KK00kP1wxI1EnXyNQVDBfUUw4J09cPylDU18lIThFX1FUOCZPXEUoIjNfJEEgM19RRDcmT1xMKkJXXycxTD4KK01fUTw1JV9cNSRRN18zNEUrX1JERClPXDokQTtfJUEoNF9RKDEkL1xBJ1IrXyQxODxfUUA+KC9cTCoyQ18KK00nUSw2X1YxOjs/XDskQktfQygiNV9YJVY/P10lLyNTXygxWD1fU1EgL09cUCxDI19TXDMjX1MgVSxfXScKK00yJEdfKCFMP19RSDgmX19fXi8vXzAzVSZfVS04Ok9cNCRBN18pIjBBX1ZdRDo/XDclIUtfJFEwNV9SQD0KK00nL1w2JCEzXyVRODxfUUg2Ji9eL0JIS18/V0FSX1lWN0NfXk1KWjtfVE0jLV9dQzBTL183Ulw/X0s6QkMKK01fWk5JSU9cOSVBN18mUTw5X1FINSY/XDMkMTNfJVE0OF9RJC8kT1w0JEE3XyUxKDhfUTg0JV9cNiUhO18KK00uM0BXX1IwQyhPXEkuIzNfLTNEV19RRD0mX1xPLSMjXykyKEhfUVQ/Jy9cNCZCK18lUUxbX1FQPig/XTsKK002NTtfQllCPV9YRkNJT14lRjlXXzk2VU9fVUFCN19dNztWU18pNClSX1dBXT5fXis9Ny9fO1Y1Ol9UXSkKK00xX1xEKTI7XyhSNEJfWVY0Qz9dPTsnJ18nUlklX1EgSzBfXV1JO0tfRlxPR19aJyxZL15cUCwrXzQkPScKK01fUkRHKj9dQDkmK19TTEMmX1lGNEUvXDsmMU9fTltOXl9USSw0P15YTVtbXyYxTD5fViFDOS9cOCUhK18KK00oMVQ7X1I4QSg/XDklITtfJSBcNV9RQDYmP1xCKCIvXycxTD5fUSgwJF9cMSNRK18kQSAzX1E4NCVfXDMKK00kMTNfJDBcMV9RJC8kP1wtIlBbXychRD9fUyxbMl9cMiRBX18lMFwzX1EoMyUvXDAkIS9fJiE4OV9SMEIKK00pP1w3JTFDXyYhODhfUTw1JV9cOCUhO18mQTQ3X1FQNyc/XC0jUTtfIVBQMl9QQCcjT1wzI0ErXychSDcKK01fUVw7JF9dXjo2P18/NilSX1RATjI/XTMvNT9fMEM4X19YViJAP102NDUnXy4zTF5fUlRPLS9fLlBML18KK00rQyxRX1RRLTNPXD0mIVNfJVEwOl9fX1leT1xHKUJXXypCXFtfUzRULk9cSChCI181VSU1X1FYOyg/XjYKK01EOS9fTSpSSl9TWFkvP1wuJCE3XyZBQDpfUVg7Jk9eID9HP19FOS4rX1tSWk0/XzdUPF9fVl0jL19dPywKK01SX18iTVs7X0s6RkdfUjBBKC9cOiVBQ18lMSA0X1EsMSUvXDklUUdfJVE0N19RQDYmL1w3JTE/XyVRNDcKK01fUUw5Jl9cPycxX18nUixBX1JcVy0vXFgvM09fJyIkP19TMFguT1w/KDI7XyZBVD5fUSQ2Jy9cNyZCU18KK00lUihDX1QtODRPXVlDWT9fRUsmXF9XUjhIL10+PigvXzBVPUVfVEFFPD9cUjFWM18+N01ZX1k6JD1PXVAKK005NUtfMlQ9JV9UKSUxT1xRLUMrX0NIXihfV0lXPU9cPCYyO18wNUlRX1gmUFBPXjlRPUdfQys/KV9aSlkKK01OP1xYLTMzXy4zWF5fVjFJOV9fLVI8P19DWEoqX1FQOCZPXi5DSSdfODYtSF9aOkRJX1wzJFE7XywjLFQKK01fUjRCKD9eMkFIJ185JV05X1FMPSZPXDslUUdfJjEwOF9RVDsnT1w1JFE7XyRBIDNfUSgwJF9cMiQhL18KK00kMFwyX1EkLyRPXDIkIS9fJEEgM19QVCsjT1w7JjFTXzQkXTVfVEEnMz9cNCRBN18kQSAzX1BcLSQvXDAKK00jQSdfJkFAO19RPDUmL1wxI1ErXyIgOClfUSgwJF9cOiUxR18xRCkqX1NcXTFPXFouRDdfJDBcOF9TKEkKK00sL10gLTNLX0I3WiNfVUEnND9dSTc2U185JUlLX1c9Tj5fXU86Jl9fSFlaQF9ZVjdFP10qMVQrXzU1LTUKK01fXTsqUl9dOzRVJ18yRC0jX1FINSU/XDwlQUtfX18zVF9SUEcqP1w+KCI3XygxWD1fUlhGKS9dLDFES18KK00oUiBGX1I4Pig/XEooQiNfJzFAPF9RQDonX1w8JkFTXz1HLVJfWC4iPl9eOEYoX19PK0pVX11DMFNPXz4KK01UXStfVjxbLV9cNlpOP15KSUozXzFUMSNfUTgyJS9cNyRBO18lUTQ4X1FIOCZPXDclMT9fJiE4OF9RPDUKK00lX1w3JTE/XyZRRDtfUVQ7Jz9cPyhSJ18sMzhUX1MsWC1PXD0oQiNfLiM4UV9SMEInX1w/JyIrXyVBLD8KK01fUTAxKi9cUC1VN18nUyU1X1IgVjcvXE81Jz9fLlZKLV9SVTpAT1w+MTZfXyslNVlfUlkoO19dXEBYR18KK01HSSIhX1ZRQDVfXSUwM19fK0MkUl9SSE8qX10/OFVLX0A3XVpfVVVGOz9dOT8pL187WVpWX1lfIVZfXiMKK01JO0dfSDo6S19TLEwrL1xULTM7XzU1SThfV1ogPz9dTDpWS18qMlBNX1oiRElPXT44VkNfUEwjI19RLDEKK00kX1wwJFEzXydBSDxfUixBJk9eWEtaR19CV1FcX1E8MSU/XDYlIT9fJSEoNV9RMDIlP1wzJDEzXyRRJDQKK01fUSwxJS9cMiQhL18kQSAzX1EsMSUvXDIkIS9fJFEkNF9RSDgmX10pMVRLXyUxLDZfUSAuJD9cMiQhL18KK00kQSAzX1IgPig/XEIoIi9fKFIkRF9RPDUmL10kMEQ3XyUhKDVfUSAuJD9cNCQhQ18kQFg2X1FINidPXEcKK00oUk9fLDJYVF9TQFMuP10uMiUjXzg1SURfUSQuJl9cNCQxV18nIUBAX1QoXTA/Xk1KKktfTEpKSF9XTU8KK006T11MOTY3X0JYKiJfVyFHOV9dTDk2N183JT03X1QsXjBPX19cLlNfLlMwVF9SREoqX10tMVQ3Xy0yVEsKK01fUzhQLS9cOiVRV182NSU0X1YtOzY/XEcoQjtfJlFUQl9SOEQpT1xWLFMrX0NYWidfWUI4Q19fJFBLV18KK01WPScvX10/LFJfXzpTXFtfUTtKWV9aSkZJL10vMyRPXyUxJDNfUTgxJT9cMyQxM18lUTQ3X1E4NCVPXDUKK00kUTdfJTEsNV9RODQlT1w+JyFbXyZBQDpfUihGKS9cWC8zT18sIzRTX1IsSClPXFUuMz9fJVFcSV9QTDcKK00sT1wsJFM/XyIhLFJfUkxcOk9cPi43O18qNE1dX1I9MEA/XF47KVtfKyVKLF9TKTtDL10lOikjXzNGOi0KK01fVFE0N09eN0M4K189Vk1CX1NAUiwvXF8wJCdfMiRBJV9WSU45P11KO0Y7Xz04LiZfU009PD9dXUtcM18KK01ILD9AX1dCQkxPXVVBKDNfQSdNW19ULF8wP1w7KFIjXyszLE9fVC0oMU9dVT5HS19OLCMiX1E0PyhfXl0KK01OW1tfJyFIPF9RSD0nT1w+JkFTXyUxQDJfWz5JSU9eO0AoO18lIFw1X1EkMSUvXDQkQTdfJSEoNV9RIC4KK00kP1w0JEE3XyRRJDRfUSwxJS9cMSNRK18kQSAzX1E0MyVPXDMkMTNfJSEoNV9RWDsoP1wzI1E/XyQwVDUKK01fUSAsJS9cMSNRK18mQUA7X1FENyZPXDglQUdfJEEgM19RVDsnT1w0JEE3XyZBQDtfUSgvJT9cMiNRN18KK00lMSg4X1E0MiYvXDMkQUNfJDEsOF9RLDUmT1w3JjFbXyQxKDlfUSwyJi9cUiwjK18nUVQ6X1omPEcvXi8KK01BKC9fOiVRN19WOT03P11ANyVbXzdFSTxfVEkmMi9dMTM0X180RSEzX19fUlxfXEopMkdfKCIoSV9UKF4KK00wL10jLlNHXy0yXFNfUTw0Jk9eM0JYW19GSSowX1JIRSo/XDcmMVtfJyFIPF9SREYpP14vQ0g/X0U5NiwKK01fXDMiTz9fNlNMU19VPEspX11LL1NPXy1QTCdfSDlWO19SPEQoX1w2JEEzXyVRKDZfUSwxJS9cNyUxP18KK00lQTA2X1E0MyU/XDUkUTdfJiE4OF9SLEEoX1w7JjFPXykiQEZfU0ReLy9cTy0jK18pIkRHX1NMWy4vXDsKK00oUldfLUQ5QF9ULS86T1xVLkUvXywjSS5fU1UvNz9cTC8kU18pUlBeX1JMUjAvXFoxJF9fN0YpSl9WQUcKK005T11OOVZfX0AnRVNfWDFaO19dUzklW19HWT41X1RdLTNfXSkxVDNfJ1FMPV9RUDgmT1xDKTJDXy9ESTMKK01fUThNLE9dLzhGW19DSkJVX1FQRSk/XEUoIiNfLyNdIF9UQS0yX102NUUvXzM0UStfVFEtM09eUk0rP18KK00mIUxAX1syT0xfXD4nIVtfJ1IoQ19RWDonL1xBJ1FTX047NlNfVUEzNV9cNiUxU18kQFw1X1EoMCRfXDAKK00jQSdfJUEwN19RXD0oL1w1JFE7XyUxLDZfUTAyJT9cMyQxM18kMFwyX1EsMSUvXDIkIS9fLVMsW19TKE4KK00tX1w9JjIrXyZBOD9fUSgvJT9cNyUxQ18lUTQ4X1E8NSYvXC8jMSNfKCFYQV9RPDUmL1wwI0EnXyZBQDsKK01fUTAyJT9cNCRBN18lISg1X1EsMiY/XDMkQUNfJSEwN19RLDQlP1w0JTFTXyQgWDdfVSUvNE9cPychT18KK007Rl1QX1Y5RDg/XiVAJ0tfNSUtMl9UUTA0T10lMjRPXzIkQStfVEkoMl9dJzE0Q19fX0NbX1IoPyk/XDUKK00lQVdfJ1FQO19TUFYtL1xAJlFfXyhRVEFfUlg/J19cRyVRM18oQUg+X1EsNSZPXDElITdfMCQlIl9YQiYKK01AX147RThXX1FcKl1fXTsvU19fPVUtM19WXSctX10nJVA/Xj5FWT9fJyE8OV9RODIlL1w0JEEzXyQgWDAKK01fUTQzJT9cPSZRV18kUSQzX1E8NSVfXDklUUdfLCJYUF9RSDgmT1xFKkI7XyxDPFVfUyxYLi9cRCpCO18KK00vI0BQX1JARCcvXU87Jj9fOEVRNF9XXVU8P11MOFVTXzs2QTxfVyFKOC9dVTpGL188Rjk9X1ctRjZfXUoKK003JS9fNERZLF9VKS40L109NiUvXzs2MT1fVkk+OD9dJS5DX18nUUg6X1JYSisvXDslMUdfJVEsNV9SMEMKK00oT1w/JkFTXy0iND9fUjw5JU9dNzRFM18+Vy1RX1I0PSgvXEUpIktfKUJITF9SIEAoX1xIKUJHXyYxODwKK01fVkFHOz9cQCdSN19HKVpBX1E8OScvXDomQVdfJzFMPl9SLD4mP18kUDwjXzomPU1fUixAKU9cNyZBX18KK00lUUQ+X1EoLyU/XDglUVdfKlJQTV9RVDsnT1xAJyIzXyRRJDRfUTg0JV9cVSxTO18jMEwuX1E4NCVfXFEKK00rQzNfLiMwXF9RSDYnT1w7JVFfXyVRKDZfUUg1Jj9cNiQxN18lMSA0X1E4MyY/XDclIUtfJSEkN19RODMKK00mP1wxI0EzXyQwWDRfUTgzJj9cNSRBQ18lQSw5X1FMOScvXDklUUtfJjE8OV9RJC0lP1wzI1E/Xy4jMFwKK01fUkxIK09cRyoyU188RzlUX1UpNDRPXSozNFtfMSRBKl9UMSYyP10jMTRDXzFEOSlfVDkoMl9fW1xfO18KK00pUihIX1IkQClPXi5COEdfPTZdTV9SSEUqP1w4JUFHX087PlVfW1ZVTD9cPCVRT18mITw9X1FENSVfXDUKK00kUTdfREhWLV9ZWjVDT18qUTwjX1VMXy9fXVc0VS9fPFRMW19UTDshX1oiN0VfXD8mQVNfJVEsNV9RNDMKK00lP1w2JSE7XyYxPDlfUVA6Jy9cMyQxL18kUSQzX1FIOCZPXDsmMU9fJlFEO19SMEkoX1xVLkNDXytDLFMKK01fUjhMKi9cVC0yX18rIkREX1RNJjAvXSkwU09fOFVFNV9VRTEzP10qMTQjXy4zOFFfUyBMK09cRChCN18KK00mITg5X1FANiY/XDslUUdfJ1FMOV9SUEUnX14gPUZTXzlVTTxfVik8Nk9dSTlGJ18wI1RcX1FYOicvXDkKK00lUUdfLSMoT19SPDwmX10qLFI/Xy4yND1fXEpdTy9eIz43N18oIUQ5X1JQSisvXFMuQ0tfMiRNLF9SREoKK00qX11BOEYvXz83WV9fUSQyJF9eU007Q18mUVRAX1E4NiY/XDwmQVdfKjI4QV9bVlhOL11ANkYrXyZRQD4KK01fUyhXLy9cWC5DX18nUVBCX1JASitfXSAwNCtfJVEwOl9SPEMqX1wzJDEzXyMgSC1fUyhQLF9cNiUhP18KK00kQSAzX1FcPChPXDglMU9fJFEgNl9RJC4lL1w4JFE/XyYxMDhfUTgxJT9cNSQhM18kQFw1X1FINyc/XDMKK00kITtfJEBcNV9RRDYnL1wxI0EzXyZBPD1fUSwwJU9cNiRBS18lUSw7X1E0MSY/XDYkQUtfJ1FUQF9SUEoKK00rP1xNKlJbXzRFITNfVEUqMl9dJTIkR18xJD0oX1QtJjFfXF8wNDNfL0QhI19UJSMxT10iMSQ/XzAkKSUKK01fX0NQXF9dJzBEQ18qUkhQX1FcOiZPXU85VjdfKSFcQ19SIEIpP1xAKCFXXygxWDlfUTQzJU9cOiYxX18KK00nUTw6X1JYTCtPXi1CKENfR0k2Ll9cXypRP18yUlxPX1VcWy5fXVMyU09fNlJMN19IKT43X1IwPyg/XD0KK00mMU9fJUEwNl9RPDUlX1w5JVFHXyZBQDpfUSwxJF9cMiQhK18mQUA6X1FQOicvXDomIUtfKVJQRl9TPFwKK00uT1xKK1JfXykyTEdfUlxRK09cSClCL18vI0RUX1QwXy4/XScvU1dfJlEoMl9SLDwnL1w+JjFHXyxSSEQKK01fVDBcLi9dMjM0V186JV05X1Y5OjQ/XVE5RU9fPkZVQF9YNVc6L11ZPDY/XzlGLThfVlFLOC9cVSxTI18KK00oIVhBX1IoQChPXEgpIitfKzFYOF9UOEsmT1xYKDE3X1UsOyNfWTIsQk9cPiZBQ183NV08X1YlTDlfXToKK004JVNfN1Y1QV9WRU86X109OFVfXy80LF9fVEkvM19cMSRRO18jUFwyX1E4NCVfXFctIl9fMyQ9J19SIDoKK00oT1w4JTFPXy0jRF5fVVE+OF9dOTVFU18sIyhXX1UhMTRPXDIjUTdfKCFQRF9RPDUmL1w2JSE/XyZRRDwKK01fUTg0JV9cQCdCJ18lMSg4X1IwQSlfXDQkMT9fJ0FMQV9RSDUmP1w6JTFHXyVBJDVfUTAvJF9cNyUhS18KK00lQSw5X1FANSZfXDUkQUNfJUEsOV9RMDElX1w2JFFHXyYxODxfUTAwJi9cQCciM18lMSQ5X1IsPylfXFUKK00tQz9fNFU1M19WNUc5P10qMyRLXzJEUS9fVDEmMj9dITBUO18vRCEjX1QpJDFfXF8wNDNfLlNVIF9TWSAKK00wX1xZLjNTX15PK1VfUzBPLT9cRChSR187VklKX1k6MkQvXD4mMVdfKzJATF9aIjVFL14rP1dPXycxPDsKK01fUUg5J19cPSZRV18nMVg/X1k2MEQvXj5FOFtfU1xLJV9dOy9TX184U1xfX1UsSyZfXUMsUV9ePUUpM18KK00mQTQ3X1FUOSZfXDUkUTdfJVE0N19RQDYmL1w6JiFLXyRRJDNfUSwxJF9cOyYxT18nIUg8X1FQOicvXEcKK00rIjtfLjNYXF9SSE8rX1xGKyJDXy0zME1fUlxKKS9dKzEzV182VS0pX1ddUzpPXS0wM0NfMTNMUV9UVSUKK00uX11QOFU7XygxRDVfUlxLKz9dLzEjV188RjU4X1dVUDhfXV08Rj9fQUdNUF9XIUg3T11FOEU/XzxHIUgKK01fUzhSLS9cPCYxX18mUUQ7X1JUSChPXFoqIVtfOEQoTF9UQE8nT15eS1pLXzo2JT9fUyRNK19dQzlWR18KK004NlFNX1VFPzg/XTQ2RVNfLVNUX19TTSEwX1xMLEMzXzNVLTVfUSQzJU9cLSMxI18oIVhBX1NQWS0vXi0KK01CKENfKDFMQ19SLEApT1xRLUNPXzdGIUVfUTgzJj9cOSZSI18yRE0sX1IgPShfXDwmIiNfKUIwR19SJD8KK00oT1w8JkFXXzIkOSlfVEkoMl9cNCQxP180NFk0X1FcPChPXDAjMS9fJUEkNV9RQDMlX1w0I1EvXyZRODoKK01fUUQ2Jy9cNSRBQ18lQSw5X1FYOyg/XDolUVdfJSEkN19RTDgnT1w7JiFbXykyLEVfUjRDKT9dJzE0P18KK009Ny1VX1VdPzhPXS40JTdfMkRRMV9ULSUyT10hMFRDXy9EISVfU1BeMF9cWy80K18sMyxWX1MkUy1PXFQKK00tQ0dfK1MkVF9RRDcmT19fXS83XytSPEpfUUQ5Jy9dWz9HX19EWTI1X1E8NyZPXD0nMiNfOjY1R19WVUwKK008T1wyJTFLXylCPEhfUVA0JC9cTCoiS19EKE4rX1lCNEMvXy5TPDtfVS0nMF9dJyxTL182VCxbX1JMIlwKK01fWjo6Rz9cPiVRW18mUUA+X1E0MiYvXDUlQT9fJFEwNV9RODcmL1wwJDErXyNAVDNfUVA7KD9cOCYxS18KK00nQiA+X1JATSlfXFwwM09fKlMgTF9STFArL1xPKlJHXzAzUFZfVT0xMV9dSDdFI184RSEmX1UhIC1PXSUKK00uQl9fNzUtKF9VXTIzP1w1JCErXyQhIDNfVllJOF9dTDhFQ18+VllBX1dFSzcvXiQ9VktfOFVRNl9WITwKK001L11ROyY7XydBODlfUTQwJU9cMiQhL18oIUQ5X1UxIS4/XUEwUldfNSM8RV9ZIV09P14vQVg3XypSMEsKK01fViE/OT9dMDUlO180JS00X1RRLTNPXCchQFNfKFIkRF9UNSEvX10yNURXXylCQEVfUVg9KF9cOCVRV18KK00zNDkgX1VBMDNPXDslQVNfJVE4PF9SQFAtL102NiVXXyZRQD5fUTA2Jl9dJDFER18lITg7X1FUPSovXSQKK00xRE9fKzJMVF9RXDwoT10uMyRbXzNUUTJfUTAxJV9dODVFR18nQVA/X1E4NCVfXDEjISNfJkE4OF9RQDMKK00lP1xBJkFLXyZRODxfUSwvJV9cOyVRX18nMURBX1FQOic/XEAnQidfJ1FUQF9VKTA0X11PPDczXzU1RTsKK01fVFUxNF9dKjNFI18wVEEtX1NdJDI/XF4wVENfL1QxKV9UISEyL10jMERHXzBEJShfVCkhMi9cXS9UM18KK00vNCUjX1NIXjAvXFYuQ1NfJTEsNV9fU1pdX1xLKiI/XyYhODhfUUw5Jy9cTSszI18mIUA7X1E4NiY/XDQKK00lIT9fJ0FURF9RMDYmX1w1JiFHXyoyOEFfUVg/KC9eL0NIV19HSUIwX10vLlI/XzNSXEdfVTxPJ19dLyoKK01RL18rUTtXX0hZPjhfUUAyJU9cOSYxU18mISw3X1FQOCZPXDolQUNfJyFAOl9RPDMlP1wxJEEvXycxWD8KK01fUUw9Jk9cRClSJ18nIiA4X1QhIy8/XEUpUjNfJTE8NV9RWDomL10pMVQjXzVFLShfVkU/ND9dWDlFU18KK002JEBeX1Q0WCs/XTIxU1NfOEUtM19RSDIlT1w4JkFDXzxGUURfVjU7ND9dTTglL186RUkqX1ctRjZfXTUKK000JE9fOjY9QF9VSTg0P1wzI0EjXyUxIDRfUTQyJi9cPyZBU18xMzhRX1VMXisvXSosIVdfRUg5XV9YOV8KK00/X1xEJzIzXyoyOExfVilIOk9dXD9YI19COEorX1E8NCZPXDslQVNfPlc9VV9WXVE6L11COSYnXyZBREAKK01fUTw2Jy9dJTAjT18zVEUnX1FMNSc/XDUlUVNfJkIoRl9TRFswL1w5JUFTXyUhODtfVD0pMy9cLyQhP18KK00nIVBFX1UhMjVfXFYsM1dfJ1FMQ19WJT84P104NTVPXyRRIDZfVUE2Nj9cPichX18nUVRAX1NMWjAvXDgKK00lUVdfJSEkN19RODMmP1w5JSFDXyRAUDBfUkhEKi9dKjEkQ180RSEyX1cxUj0vXTw2RVNfNiU5OF9UTS0KK000T10nMkRfXzFERS5fVCklMk9cXzBEP18uU1kjX1NAWzAvXFMtQ09fK0MgVV9SWE0sX1xOKzMvXytCVFMKK01fUkxNLC9cSyszI18rQyBTX1JMTSwvXEAnQiNfXF83Ul9TUF4vL1xBJ1InX0NYSi5fVF0tNC9cNiUhP18KK00lUTQ4X1E0MyVPXEMmUV9fJjEwOF9RVEAoP1w2JiE7XyZRXD1fWSIxQl9eQkZZN19VPF8tX107K1JPXzUKK01SPDdfVFxLJF9cVydPX14+REkvXyUgXDFfUUQ6Jl9cOyVRR18mISwzX1FENCUvXD4mMUdfJUEkMV9SNEYKK00oL1xSLTJfXzAkLF1fVCklL19cUixCX18rQlhLX1IkQCdfXDEjUSdfKCFMO19UMSIuX10kMDM7XzclKSQKK01fV0lLN09dMzEjP18wQyxGX1UtIi0/XToyVE9fJ0FEP19SLEUqL10yMzQ/Xzs2KTdfVjU4Ml9dSzdFJ18KK005NVE1X1UpLTQ/XS4yVEtfOkZBQ19RNDEkX1w2JEEzXyZBPD1fUTgzJj9cSidBX182I1RMX1RUWClPXUgKK003VUNfO0ZJTF9RWDcoP1xAJ1I7XzRVTT9fViVFOV9eKUIoP18lISQ3X1E8MycvXiJAKC9fP1glXl9WLUMKK005T1w4JUFfXyUhLDlfVFksMV9cNiRRK18mMTQ+X1FANydPXDgoIjNfNSU5O19RLDAlT1xAKEI/XzY1STsKK01fUSwyJi9cSClSW185JjFHX1MwUC4/XD8mUi9fOVY1R19WJT45L1wzJCE7XzVVNThfUVg8J19cQygyM18KK005Ni1GX1FQOyg/XDYlQV9fMVRJNV9SIDwnT11EN1VfX0BHVV1fVVU4Ni9dLjMkX18yREktX1RdLzRPXSYKK00xREdfMCQpJ19UKSQyP1xeMCQ3Xy8zXSRfU1kgMT9cWS5UI18vRCElX1NUXzEvXF0vNCNfL1NdIl9TWF4KK00wP1xfL1QrXy9DWSFfU1BcL19cUyxTO18oIiBDX1FINiYvX1ZcTyNfL1NIWl9SVEsrP1xHKVJLX0ZJQjsKK01fUUAzJV9cOCRRP18mMTA4X1FQOCZPXDUkUTdfJkFUPl9RQDYmP1w/JlFHX0ZJNi9fWUY0Q09fNlY9S18KK01TXS81X10jMFRfXy1SLEtfUltfIF9WKTY1X10nMEQrXz9YJV9fVik/N09dMzRVI18wRChfX1MsUywvXE4KK00rQk9fLiNMVV9TMFYsX1xLKzJPXyhSLEZfUVA5Ji9cNiRRK18kMFAwX1E0MCVPXEAmMUdfMTQsXF9VOTMKK00yL11NOFU3X0AnKUNfVy1FNU9dTjckW187VU0tX1VVLjNfXTs1VV9fKiJMUF9UNSIvP11HNlUrXzlFRSwKK01fVU0wMT9dKjFEM18oUVxHX1FIOCZfXTU1NStfJ0FUPF9RSDUlP1w5JUFTXyYhPD5fUVw5Jz9dKCtCJ18KK00yQ0BKX1UpMzMvXSYxNE9fKCFMR19RPDkoP10+OVZXXzhGPUxfVkFHOU9cPSZCI18mUUxGX1QpJDMvXFgKK00uQ1dfKzJQU19RQDYnX1w2JTFPXy8kJF1fUFQvJE9cNCQxV18mITg/X1EkOSc/XSUxVFNfJiE0O19RMDYKK00mX10sM0RTXyZBQDtfUixAKU9dRjkmO18rIkBRX1FcOyhfXUg5RkNfNzVJQF9SLEApT10mMSQ/XygxXEIKK01fUjBCKT9dMDJEQ18xM1xdX1Q5JDFfXDUlMVtfOEYxSV9VIS81P10sMlUnXzI0QS5fVEUrNC9dJjIkV18KK00vVCUmX1QhIjFfXS0zJStfLTMwWl9TIE8tP1xNKyMrXypSSFBfUkxKLC9cSioyX18qMkBOX1I8RypPXEkKK00qQk9fKjJIS19SREoqX1xLKjJTXyoyPEpfUkhIKl9cOyYxU18mMTQ3X19TVF1fXEcoQjNfJjE8OV9RODcKK00mL14yRCkvXydRSD5fUUAzJV9cOCRRP18lUSg2X1EwMiU/XDUkUTtfJjEwOF9UMFwuL143RDg/X0Y5QjEKK01fXCckUT9eVE47W19LWy5VX1s6VE1fXyFOO1dfOTYtRV9WPUo6X109OCYnXyxTOFdfUjBJKj9cQSlCO18KK00oIixEX1IsRCk/XEIoIitfJzFMPl9RQDYmP1w2JSE/XyQgWDFfUSwuJE9cMyNBK18kQFQxX1IoPSg/XF8KK00uM1dfKyI4RF9VWTcyX11LODU7Xzc0XSBfV1FENT9dXjklR18rMVhCX1JAQyo/XFcsUzdfL0NMVl9WNToKK00zX11BNVRHXzVUUSVfU1BWLS9cOiVBW18lUUA/X1NQXzEvXF0vJCtfJ0FMQV9RUDsoP1wvIzE7XylCKEsKK01fUlRCKV9cRShBV182RVEzX1UtMTUvXDsmIjNfJjFEQl9VRTw3P103NyU7XzZFUTlfUUQ5Jy9cOSYhW18KK003RilAX1ZdUTtfXUQ5Jj9fJiE8Pl9RUDsoP1xfMDNfXyoyRExfUUQ1Jz9cPSYyJ18vU1RfX1FUOigvXDkKK00lMVtfJVE4PV9TJFAtT1w7JiFbXychSD1fVklJOi9cQidST18oIVRJX1UhKzNfXSwxRDNfKkIoPl9SQEAKK00nL10vMkQ3XzomNUBfWEYlQV9dODVFR18yND0qX1E0NCZPXSkzJSdfMURFLl9TUF8xL10gMFRDXy9EJSYKK01fVCklMk9dJTIkV18wJC0oX1QlJDI/XF8wJD9fLkNNIl9TUF0xL1xZLlQjXy5TVSBfU1RfME9cTywzM18KK00qUlBNX1JQSisvXEkpUkdfKjI8SV9SQEYqL1xIKUJDXyoiOEhfUVQ7Jz9cNiRBM19eLyNTX1JERClPXD0KK00mMU9fJlFEO19XUVc+X1w2JDE3XyZBNDlfUUQ0Ji9cOCRRP18mISw3X1FcOidPXEYoMjdfMlQ1I19ZIisKK01BP14rQjgzXydRXEJfVilHOy9dMjYlS18yRFkwX1M8Vy5PXEsrMyNfKiJITV9SMEYqP1w6JyFfXyUxNDgKK01fUTA0JV9cOSUhQ18kUFQxX1EoMCRfXDMkMTNfJDBcMl9RJC8kT1wwI0EnXyQwXDJfUSQvJE9cMCNBJ18KK00kMFg0X1NYWDAvXD0lUU9fKVIsO19USSUuP10+NEQvXzslRSdfVzVANS9cSSgyN18sQlRTX1QxIDBPXSIKK00wI1dfNTUhKl9VJSwxT10nMEQrXy5DNFlfUVw7KF9cNyYhX180VUE+X1UtMjY/XS8zRTNfNVU5PV9RQDYKK00nX1xbLiQzXyxSXFhfVU05Nl9dOzclO182JTk5X1FINyhfXDkmIV9fNlVRPV9VXUM2X11AOEYjXyYhPD0KK01fUUg5J19dPzg1X184Jik/X1VZPjg/XDglUVtfJVE4PF9UNSQwX1xWLSM/XyYhMDxfUVQ6KC9dSzlGO18KK007NkFOX1FENSdPXDwmUitfO1ZRUl9RVDooL1xDKDIzXzVVNTdfUjhAKS9cTCkiQ180RFUtX1VNNjVPXiAKK00+V09fQTgiIl9UMSAwT1xULEMzXykiMEdfUVw+KS9cOyZCI18kQSQ3X1IoQik/XEgpQkdfKlJETF9TKFAKK00sX1xSLSM/Xy1TRFxfU0RbL09cWi8jX18uM00gX1NAWi9fXFYuI1dfLTM8XF9TKFQtX1xMK0MnXyoiSE0KK01fUjxJKy9cSioiS18qIjhIX1JARiovXEgpQkNfKVI0R19SPEUpX1xGKSI7XyoiOEhfUUQ1JV9fX11PR18KK00oIUA7X1FYOSZfXDklMT9fJjEwOF9RPDIlT1w8JVFPXyYxMDhfUTgxJT9cNiQxN18lMSA0X1FAMyVfXDcKK00kMTdfKCFMO19RPDQkX1w3JSFLXydCIEVfUVhAKF9cSCsiW18mUVxBX1EkMSUvXDEkMTNfJCEgM19RIDAKK00kX1wyJCEvXyRQWDJfUUg0Ji9dUDomU18lUSg2X1EoMCRfXDEjUStfJDBcMl9RJC8kT1wwI0EnXyQwXDIKK01fUSAuJD9cOSYxU18zVE0zX1M8Ui4vXEMoIU9fLzNMU19VPTAxL106NCQnXzdFPStfUUg1Jl9cOCUhU18KK00uIzhZX1NQWy5PXF4wNCtfNDUtOF9VJTI2P1xMKzMzXydRTENfUTw4J19dQTlGU186Jj1OX1ZVTDxPXU8KK007RzdfJUEwPV9RTDgpL109NlYzXzlGOUlfVj1IOj9dOzZGI18mITg/X1FIOSgvXUM4VjtfOiZJSF9WNUYKK005X1w2JTFTXyUhLDpfVTk3Ni9dPzg1W181RTk5X1E4NScvXDkmIVtfMCNcXl9SPEUqL1w6JUFbXyhBXEUKK01fVj1DOD9dQTcmI18nIUBAX1IkQClPXScxND9fJ0FQPl9SQEYqL10+NyVbXz5HNVBfWkZBRz9dVzxHM18KK002VUE+X1UxNTcvXS4zRT9fMSQ5Ll9TVSMyX1xYLlQjXy4zUSFfUlxSLV9cSSsjJ18qUkRMX1JcSitPXE0KK00qIlNfKzJATF9STEkrL1xIKiJPXylCOElfUjhGKj9cRilCR18pMjRIX1JASCpfXEcpUktfKVI8Sl9SMEQKK00pX1xEKSI/XykyNEhfUkBGKi9cRykyP18pMixFX1I0Qyk/XEUoUjdfKTIsRV9SQEYqL1xCKCIrXysyREsKK01fX1NQXF9cPiUhP18sMkRMX1JQRyo/XDwlUU9fJSBcM19RNDAlL1w0I1EvXyUxIDRfUTQwJS9cNCNRL18KK00lUSg2X1EsLyYvXDckQUNfJiEsN19RQDEmP1wzIyEvXyVRJDVfUTQwJS9cMSQxM18kQSAzX1EoMCRfXDEKK00jUStfJDBcMl9RIDAkX1wtI1ErXyUxLDZfUiA7J19cNSRRO18kQSAzX1EkLyRPXDEjUStfJDBcMl9RIC4KK00kP1wxI1ErXyQgWDFfUSQyJF9cOCVRW18mITA8X1IkPSdfXDEjUSdfMkQ5JF9VNTAyT1xDKEInXyRRJDoKK01fUTQzJy9cTSsjK180VTE1X1RVMDU/XTY2NVtfN0VVQ19TIE0sX1w8JiIjXyVRQD9fVVlDOj9dQjg2Q18KK004RiVHX1YtQjo/XDglQV9fJVEwQF9VWT85T11AODZDXzgmJUhfVTE2Nl9cOyZCJ18mITw+X1Y1RDpPXUUKK005JktfN1VZRF9RRDcoL1w8JkIvXzM0VTBfUyRTLC9cRylSS18mUUhBX1FEOCdPXSEwI19fKzJMTl9SIDwKK00pL1xHKSJLXzAjVFhfVCheMC9cQSdCM18nUVxCX1YxRTdfXiJAV1dfRUk2NF9WPUU6L101NjVPXzU1QT0KK01fVFkwNV9dKjJFL18yJD0uX1Q5JzNPXSUxVFtfMDQ5LF9TWSMyL10gMTRLXy9ELShfU1UiMV9cXjAkL18KK00vQ1khX1MwVC1fXE8rUytfKyJITV9STEkrL1xKKiJPXypCQEtfUkxJKl9cSClCQ18qMjxJX1JARiovXEkKK00pUktfKUIwR19SNEMpT1xFKFI7XylCMEZfUjBCKS9cRChCM18pIihEX1IwQikvXEQoQjNfKEIgQl9SOEQKK00pT1wyI0EjX15fK1JfUjg7KC9cOyRBR18lUSw1X1FAMyVfXDUkITNfJTEgNF9RNDAlL1w1JCEzXyUxIDQKK01fUTAvJF9cNyRBO18lUSw1X1E8MyU/XDUkITNfJiEkO19TMEouP1w6JFFPXyUxIDRfUTAvJT9cMSNRK18KK00kQSAzX1EkLyRPXC8jMSNfIzBUMF9RIDAkX1w/JyIrXyZRPD9fUTgxJT9cNSQxL18kUFwxX1EwMCRPXDIKK00jMSdfJFBYMl9RKC0kP1wzI0ErXyQxIDdfUTwzJl9cOCRBS18mMSQ1X1FENCVPXE0qIkNfMTQkX19TVFoKK00uP1w2JEFLXyYhMD1fUkRGKy9dMjQ1I18zNSUvX1UlMzQvXTI0VFdfKVIwQ19SIDwpP1w9JyIrXzZVVTsKK01fVi1COD9dPTZVQ185Vi1FX1FENSdPXDomIidfNkVJQ19WKUM6T11IOjcjXzE0NTBfUTQ2Jz9cOiciJ18KK003VV1IX1YxRDtfXUI4RldfJEEoPV9RTDspL11BOEZHXzdGIUhfViU/Oi9cPyZSL18nIVhDX1NZIC9PXFoKK00uI0tfJ0FQP19SQEUqX106NTUjXzglTTZfVzlSPC9dRDg2I181RUE7X1U9OTcvXTo3JidfNDUtOF9UUTEKK001X10qM0U7XzE0RTFfVEEqND9dJTFUW18xNDktX1QtJTMvXSUxVFtfMEQ1Kl9TUF8xL1xdMCQ3XzA0MSkKK01fU1UgMT9cXjAkP18vI1klX1NQXjE/XFguQ19fLkNEX19SUEssP1xJKiJbXytCUE5fUkhIKk9cSioiS18KK00pUjRHX1JERyo/XEUoUjdfKiI4SF9SNEMpP1xGKEIzXylSLEVfUig+KC9cRSgyL18pQiRFX1IsPihPXFcKK00sQztfKSFcQ19RODElP19aXD8nXyghPD5fUUw0Jy9cOyVBS18mISw3X1E0MCUvXDUkITNfJTEgNF9RNDAKK00lL1w1JCEzXyUgXDNfUTwyJU9cNyRRN18lUSg2X1EsLiRPXDgkUUdfJyE0P19RQDMlX1w1JEEnXyUhIDIKK01fUSQvJE9cMiQhL18kUSQ0X1EsMSUvXDMkMTNfJSEoNV9RODImT1w8JiInXyZRODpfUVA4Jk9cPyZRV18KK00mUTw5X1E8MiVPXDUkITNfJTEgNF9RMC8kX1wzI1E/XyVRLDtfUVg5J19cPyYxV18nMUQ7X1IsQCdfXEcKK00pIi9fKDFYPV9RODImT1w4JSFTXyghWEFfVE0rMi9dLTNUU18zRSkqX1RZLzIvXDwmIUtfJ0E8QV9RTDgKK00nT102NUUvXzZFSTdfVVE5NS9dOTU1P18mITA9X1FIOSgvXUA3VjdfNzVZP19WJUI4X1xdLyQvXyVBPD4KK01fUUw9KE9dQThGR184RilLX1YlQTsvXDclUiNfKEIsSl9UWTA1P10zNTVLXzVVKThfUjw/KF9cRSkiL18KK002VU04X1VVPjYvXUs6RkdfRTkuNV9YMiBAT105NUU3XzYlQTtfVS01Nk9dMDRFR18zRSE3X1RNLTUvXSkKK00yVStfMlRVNF9UPSk0L10iMSRPXzEkOS1fVDEmMz9dIzE0U18wNC0qX1QlIzJPXF4wNDtfMCQtKF9UISMKK00yL10hMSRHXy8jWSVfU1RfMU9cXS9UO18vRCEnX1NUXzEvXFwvRC9fLzNdJF9TQFovX1xSLCMvXypCQEoKK01fUkxJKl9cSClCQ18qIjhIX1JERyo/XEcpMj9fKSIoRF9SPEMpP1xIKSI7XyoyNEdfUkRFKV9cRSgiM18KK00mISw3X1E8MiVPXDgkUT9fJSBcM19fX1VeT1xPKTJbXzFTWStfUiQ8KE9cOiUxR18lQSQ1X1E0MCUvXDgKK00kUT9fJUEkNV9RODElP1w1JCEzXyYhLDdfUTwxJj9cNyRBQ18jMEAsX1c5Uj0vXSkxJEtfJjE0N19RSDgKK00kX1w4JTEzXyRBIDNfUTQzJU9cNSRRO18kUSQ0X1EsMSUvXC0iUFtfJjE0PV9RVDkoT1w9JiFTXyYhMDYKK01fUSwvJD9cNCQhK18lUSg2X1E4MSU/XDklIUNfJyE8O19RMDAmL1w3JFFPXydBTEFfUVQ7J09cQSdSJ18KK00sMlxRX1NcXS9fXSwyRFNfJVEsO19RRDUnP1xFKFI7XzQ1JS5fVSUzND9dLzREU180RSkvX1FUOCcvXEMKK00nIjtfJkE8PV9VRTk1T101NTUrXzVFLS5fVUE0NU9cOyVSI18mMUA/X1VBNzVPXTk2RTNfNiVFMl9SNEMKK00pP1w8JlInXyZRSEBfVVE7OD9dPTcmK184NiFGX1E8NicvXEQpIj9fNVVBOV9VITAzP103NDRfXzdFOTQKK01fVTkyNC9dWj83P184Ji09X1U9OTVfXTY1VUNfMyUlNl9UTS81X10qNCVLXzFUSTZfVFkwNi9dKjMlL18KK00xVEUwX1Q9KTQvXSUxVFtfMURBL19UPSk0L10kMURXXy9EISdfVCEiMj9cWy80M18wVDUsX1QhIzIvXSEKK00xJEdfMkRVMl9TWSExT1xfMDRDXy9UJShfU1kgMV9dIjEkT18vRCElX1NZIDE/XF8wNDtfL0QhJV9TSFoKK00vP1xSLEM3XysyVFBfUjxHKk9cSyoyT18qIjhIX1JISCpPXEMoMi9fKTIkQ19SREUpX1xCJ0IjXytCSEwKK01fUUQ0Ji9cNCNRL18mISw3X1EsLiRPXDgkUT9fXj5bVV9TWFQvT1xGJyJPXydRREFfUUQ0Ji9cNiQxN18KK00lMSA0X1E8MiVPXDolMUdfJiEsN19RNDAlL1w4JFE/XyVRMDNfUTwzJT9cOiUxT18nMTw/X1FMNCdPXEwKK00pUldfKDFUP19RUDcmX1w1JFE7XydBUD9fUVQ7J09cPCZBV18wM10iX1RFJzJPXDolQVtfJ0FIQ19RVDgKK00nL1w4JSE7XychQDpfUVw7Jz9cQCZRX18oQVRBX1IwPyhfXEgoUj9fJjEsO19RQDQnL1w9J1IzXzJUXTEKK01fVFUvNE9dMDQlL180NSU0X1UxNDVfXDckUU9fJjE0PV9SXE0sL11JOjY7XzU1OTdfVSUzND9dMTQkX18KK00nITw9X1IsPCovXDglMU9fNiVBNV9VQTg1P107NiUvXzUlITJfUUw3KC9cOyZCJ182JTk4X1VNOjRfXTsKK002NTNfKTIoQV9SJD0pP1w8JjFfXzdVVUBfVD0lMV9cTSpSV18oQiBCX1JARylPXTI0VFdfPjdZWF9ZJjEKK01DT11POkZTXzVVPTpfVSk0NV9dMTRVO180JSk3X1RZLzVPXSk0JTtfMiRdNV9UMSg0L10lMUUnXzFEQTAKK01fVD0pNC9dJjIkX18xJDktX1QlIzJPXSQxRFdfMDQtKl9UISIyP10gMERHXzA0LSpfVDEmMz9dITBUS18KK00vRCUmX1QpJTJPXSExJEdfMSQ9LF9UJSMyT10hMFRLXy8zXSZfVCEiMj9dIDBEP18vRCElX1NdITFPXF4KK00wJDdfLjNNIF9TVF8xL1xcL0QvXy5DUSFfU1RbL09cVy0zP18sQyBSX1MgTiwvXE0qMk9fKUIoRF9RODIKK00lL1w3JFE3XyUxIDRfUSgtJD9cNyRBO18lMSA0X1E4MSU/X19eP0NfKDEsNF9SRDsoX1w7JSFTXyZRODwKK01fUTwyJU9cPCVRR18oQUg9X1FYNyVfXD0lMUNfJVEoNF9RRDQmL1w2JSE7XyVRNDdfUSwwJU9cNyRRU18KK00mQSw/X1FUNyZfXEEmQUtfJTEsNV9RUDkmL1xaLVM7Xy8jSF1fVDUkMk9dKTI0U18zVF0yX1FUOSg/XEMKK00nIjtfKEFQRF9URSYzL10nMSRLXzEkKSVfU0RXLk9dJDBEN18zRFEvX1UlLzRPXDkkQVNfJlEwPl9SREUKK00rP100NUVPXzU1PTxfVTU3Ny9dPDdGL183JVlDX1E0MSY/XDolQVtfKEIkSF9VRTg3T101NiVXXzYlUT4KK01fVUU7N09cOCUxT18oIVBEX1E8NicvXTE0VSdfNyVJNV9VPTYzX10zNDUvXyZBOD9fUVg6KE9dKDFEQ18KK00vM1hYX1RFKjEvXEkpUktfKEFYRl9SMEMqP106NlVTXzZVRTZfVVk4NU9eIT8nU19AN1ldX1VZPzgvXTAKK001JTtfNSU9PF9VLTU2T10yNSVPXzNFITdfVE0tNS9dJjIkX18wVDUsX1QxKTNfXSgyNSNfMiQ9Ll9UOScKK00zT10qM1U3XzI0STFfVEEnM09dIzE0U18yNE0yX1RBKTQvXSYxVFtfMFQxK19UKSQzL10gMERLXzBUNSwKK01fVDkpM09dJTIkV18xJD0sX1QhIzIvXSQxVFNfMDQtKF9ULSIyL1xfL0QzXzBUKShfVCUjMi9cWS8kJ18KK00uVCElX1QgXzE/XF4wJDdfLkNRIV9TSFwwP1xaLyQnXy5TTF5fU1xdMC9cNSRRO18pMixGX1E8NSYvXFQKKz4sQzdfJVE0OF9SPEUqL1w0JEE3XyRBIDNfUTAyJT9cMyQxM18lMSw2CisgCitlbmQKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC90ZXN0cmdiLnV1ZSBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0cmdiLnV1ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTg4ZWI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RyZ2IudXVlCkBAIC0wLDAgKzEsOTcxIEBACitiZWdpbiA2NDQgdGVzdC5yZ2IKK00gPUghIDAgIyAnVCA6MCAjICAgICAgICAgL1wgICAgIDNGRUU9Nz1FKCUtUDo2NUc5NlFTPScpQTg3MCAKK00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK00gICAgICAgICAgICAgICAgICAgICAgICAgIE84ICAgLTZAICAjTVQgICEhQCAgIDFXMCAgJFVIICAhMzYKK00gICA2NUAgICVdRCAgIUU5ICAgOlcgICAnJVwgICFXPyAgID84QCAgKC40ICAiKUggICBDWkAgICk2TCAKK00gIjtKICAgSDsgICAqPlwgICJNUiAgIExdMCAgK0dAICAiX1ogICBRPzAgICxQICAgIzIjICAgViFAICAKK00tWEQgICNEKyAgIFpDQCAgLyEgICAjVjMgICBfJUAgIDApRCAgJCg8ICAhI0dQICAxMiggICQ6RSAgISgKK00qICAgMjpMICAkTE4gICEsTDAgIDNDLCAgJF5WICAhMS4wICA0S1AgICUwXyAgITVQQCAgNVQ0ICAlQygKK00gICE6MlAgIDZcWCAgJVUxICAhPlUgICA4JTwgICYnOiAgIUM3MCAgOS4gICAmOUMgICFHWUAgIDo2RCAKK00gJktMICAhTDtQICA7PyggICZdVSAgIVBeICAgPEdMICAnL14gICFVQDAgID1QMCAgJ0InICAhWiJAICAKK00+WFQgICdUMCAgIV5EUCAgQCE4ICAoJjkgICIjJyAgIEEpRCAgKDg8ICAiJ0dQICBCMiggIChKQyAgIiwKK00pICAgQzo8ICAoXEogICIwSzAgIERDICAgKS5TICAiNS1AICBFSzQgIClAVSAgIjlMUCAgRlMoICApUlMKK00gICI+LSAgIEdbLCAgKiROICAiQklQICBJIkAgICo2RSAgIkcpQCAgSiooICAgUTggICAtVlAgICNVWCAKK00gISM/ICAgMjcgICAkXUAgICE1NiAgIDZVUCAgJiVEICAhRzogICA7NzAgICcuICAgIVlAICAgP1hQICAKK00oNjggICIrSCAgIEQ6UCAgKT5IICAiPUogICBIWzAgICpHICAgIk9TICAgTT1AICArT0AgICMhWyAgIFEKK01fQCAgLFgkICAjNCQgICBWQVAgIC4gRCAgI0YsICAgWyNQICAvKSQgICNYNCAgIF9FUCAgMDFIICAkKj0KK00gICEkKCAgIDE6LCAgJDxGICAhKEowICAyQlAgICROTyAgIS0sMCAgM0swICAlIFcgICExTkAgIDRTVCAKK00gJTMgICAhNjBQICA1XDggICVFKSAgITpTICAgNyRcICAlVzIgICE/NTAgIDgtQCAgJik7ICAhQ1dAICAKK005NiQgICY7RCAgIUg5UCAgOj5IICAmTU0gICFMXCAgIDtHLCAgJl9WICAhUT4wICA8T1AgICcxXyAgIVYKK00gQCAgPVg0ICAnRCggICFaQlAgID8gWCAgJ1YxICAhXyUgICBAKTwgICgoOiAgIiNGUCAgQTFIICAoOj0KK00gICIoKCAgIEI6LCAgKExEICAiLEkwICBDQkAgICheSyAgIjErQCAgREskICApMFQgICI1TVAgIEVTOCAKK00gKUJWICAiOi0gICBGWywgIClUVCAgIj5MUCAgSCMwICAqJkwgICJDKiAgIEkqPCAgKjhGICAiR0kgICAKK01KMiQgICBTOSAgIC43ICAgI11cICAhJT4gICAyVlAgICUlPCAgITc2ICAgNzYgICAmLUQgICFJOyAgIDsKK01XQCAgJzVcICAhW0EgICBAOSAgICg+PCAgIi1JICAgRFsgICApRkQgICI/SyAgIEk7QCAgKk8kICAiUVQKK00gICBNXVAgICtXRCAgIyNcICAgUj9QICAtICggICM2JSAgIFciICAgLihIICAjSC0gICBbRCAgIC8xKCAKK00gI1o1ICAhICYgICAwOUwgICQsPiAgISRIMCAgMUIwICAkPkcgICEpKkAgIDJKVCAgJFBQICAhLUxAICAKK00zUzQgICUiWCAgITIuUCAgNFtYICAlNSEgICE2USAgIDYkPCAgJUcqICAhOzMwICA3LSAgICVZMyAgIT8KK01VQCAgODVEICAmKzwgICFEN1AgIDk+KCAgJj1FICAhSFogICA6RkwgICZPTiAgIU08MCAgO08wICAnIVcKK00gICFRXkAgIDxXVCAgJzQgICAhVkBQICA+IDggICdGKSAgIVsjICAgPyhcICAnWDIgICFfRTAgIEAxQCAKK00gKCo7ICAiJCZAICBBOUwgICg8PiAgIihIMCAgQkIwICAoTkMgICItKUAgIENKRCAgKSBMICAiMUtQICAKK01EUyggICkyVSAgIjYuICAgRVs8ICApRFcgICI6TTAgIEcjMCAgKVZVICAiPy0gICBIKzQgICooSyAgIkMKK01KMCAgSTI4ICAqOkcgICJIKFAgIEo6KCAgICIgICAgIEAwICAgKCQgICAhXyAgICA/UCAgICdYICAgIiAKK00gICAgQDAgICAoICAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiAgICAgQDAgICAnXCAKK00gICIgICAgIEAwICAgKCQgICAiISAgICBAMCAgICggICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAKK00gKCAgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICAKK01AMCAgICgkICAgIiEgICAgQCAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEKK00gICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAKK00gICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAKK00gKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgP1AgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICAKK01AMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEKK00gICAgP1AgICAoJCAgICFeICAgIEAwICAgJ1wgICAiISAgICA/QCAgICdcICAgIiEgICAgQDAgICAoJCAKK00gICFfICAgID9QICAgJ1wgICAiICAgICBAMCAgICggICAgIiEgICAgQDAgICAnXCAgICIhICAgIEAwICAKK00gKCQgICAiISAgICBAMCAgICdcICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICAKK01AMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEKK00gICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAKK00gICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAKK00gKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICAKK01AMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICA/UCAgICgkICAgIiEKK00gICAgQDAgICAoJCAgICFfICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAKK00gICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIV8gICAgQDAgICAnXCAgICIhICAgID9QICAKK00gKCQgICAiISAgICBAMCAgICgkICAgIV8gICAgP1AgICAnXCAgICIgICAgIEAwICAgKCAgICAiISAgICAKK01AMCAgICggICAgIiEgICAgQDAgICAoJCAgICIhICAgID9QICAgKCQgICAiISAgICBAMCAgICgkICAgIiEKK00gICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQCAgICAoJCAKK00gICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAKK00gKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICAKK01AMCAgICgkICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEKK00gICAgQDAgICAoJCAgICIhICAgIEAwICAgKCQgICAiISAgICBAMCAgICgkICAgIiEgICAgQDAgICAoJCAKK00gICIhICAgID9QICAgKCQgICAiISAgICBAMCAgICdcICAgIiEgICAgQDAgICAoJCAgICIhICAgIEAwICAKK00gKCQgICAiISAgICA/MCAgICdYICAgIVwgICAgPzAgICAnXCAgICFfICAgID9QICAgJ0QgICAhXCAgICAKK00/UCAgICdcICAgIV8gICAgP1AgICAoJ0peITBDJyFQNiYxVDcmITA4JUE8NichXDsmQTQ4LUNVKjMlKEEKK00pQjEsMkQ0WjE0XTInIVhNNlVRPDhWLDknQkE+NzVZPiZSMDw0NTUvNFFcQjIjQSQqQjhJNyU5Nj8nVUAKK001RVE6NlU9NDNUUS80JFkuNTUlLjMlKTAzRE0sMkRRLjM0USgzJEEoMSRBKDAwLSUgVCYrL0QgNilBQFUKK00mIkA1JFE0ISUgJDYgLldZJFFMNCVBKDcmQTw1JEEwNCUxIDMkUTw6JFFEVy5EMSkzUUQ8JyQ5JDBDPSIKK00zJFwyJSI1NjVVPT43QSQ2KDVBODclTDUnITkzNkU5MSVBSSYvREhHJ0ItOzY1QVw/RV00NVU1NDQkVSgKK00xNEUpMVQ9LzJEPSUyVEUnMSQxIjE0RSgxVC0nMFQoXjBELFwwI10gIFNSKy5TVDMoUTRSJTI0MiQhKCEKK00kMCQzIC5XXygyRDsmUTw8KEFYPSVRRDYlUSw3JkFUQSUxUFovJDUpM1FUQyhERScxI0UkM0UkOSZSRTQKK001NTU8NyE0OihFRTU2JUQ4KCE9MTclPTMmQVkoLzRESShCMTo2VVohQDVZMDUlLTIzRE0mMFQxKDIkOSoKK00yNEEjMjRBJjBUKSAwVDklMSQhJDA0LF8wVCRZLlQgXiBTSisuU1w1KTE8VCVSPDQkQTAhJFAkNSAvT1UKK00vQkxBJiE0NCVBRDclITwzJTFMPydCVD8mUTg/J0FVIjJBWEMnITg6JzFcQShSPDsnIjExNEUtNDVRTD0KK00sJjk3NDRcPSohTTU1NS0yKCIlODRVMEEpMV1AMVJUQilEVVhDRlE6NVU5NzVFOTU0JSUwNCRdLTJEVSoKK00yNEUqMzRJJjJERSwyREkmMjQ9JTFENSAxJC0hL0M8UiwiTEQlITQ0JDE4ISUgJDUgKztOLSFQOSUhJDAKK00kQTQzJCEsNCRRNDclIjw9JVEsPCZRSF8xUTg6JiEwOCZRTD0nUiwzJSFdLzNVITE1ISw1KzZFNjRVIDcKK00nITQjNiwpMCVRSTY2RURCJzFFPTEyTEApVS1eRDZJNzUlLTIzVSEvMiQ5KDI0QSYwVDkjMEQpIzFELSEKK00xNDEnMFQsXzBEKSAwNCBbL1NYXC5TNFArQkRCJEEsMCMxKCEkICQxIC9PWS9COD8mMTg1JVFIOCUxQDcKK00lUUg9JlJQQSchND4nMVEhMjFIPicxQDwnUiBCKSJAOSYhVSszNSExNSE8OStWRTU0NSQ8KFFBODYlTTQKK00mUU04NlVMRSgxUT8xUlRCKiUpWUQ2XTc0RSUwM0RFKDEkNSYxVDkkMDQxITAkISExJCReMEQlJDA0JF0KK00wJCBeL1NYWS8zUFovMzxSLCJURiVBPDUkQTwhJTAkNiAvT1orRExCJjE0NCVRNDUlITw5JiBRVDJBPDMKK00lISw2JUEwNCNBVEInITgxJEE4NSYhTDgmUiQ+KDMkXzMhTD0pRFkxMyRcPClBVTY0RFk2KCFdNjUlKEUKK00oMiFBOEY4PClVRS0zVTEwPVVVNzYlOTc2RTk4NFUhMDNEXTAzND0pMSRRKDI1KSYyJEEnMlQ1JTFENF0KK00tMyBKKlJASihSLEcoIlA4JFE8ISRAJDcgLi9VKTNYPCUxJDAkUSQxJCEsMSRAQVIxITQ4JTEgMyRRJDEKK00iUTQ5JiEwLyQhKDElITwwJFFMOydSXF0yQSw1KFUlMzRFKDgnIT05NTUtNCVRQTc2RURDJlFJOzcmIDYKK00pJUEwNDU5Mj82LTk1VSUvNCRJMDMkRSkxVEEpMUQhIi80NSMxJFQjMDk1IDEkISAwNCBaLEJURyoyOEgKK00oMiRFJ0JINCNRLCEjQCQzIC9PXytUPEEmQTg1JiE4NiUxQDclUFVWMjFEOiYhKDUlMSwzIzFEPScxQDMKK00lITw2JjFQNCVRWD0oMyRfMyE8OSk1JTEzVSg9KFFJOTU1OTgmUUU4NjVARSchTTw3NiQ3KSU9MDVVWTYKK00+RiE3NURRKzJEPS4yRD0nMTQ5JzEjWSAuVC0gMDRIXi9TXF4wQ1heL1NYWixCVEcqUkBKKFI0SShCWDkKK00lIUAhJFAkOCAoN1EnQVA6JVA0NEMhLDYlMTgyJjFcNyQxKDIkUCw0WEE0OigxSDonMUQ2JSEwMyVRTD8KK00nMUw/KFFUOiciJSgzJEkoJkIkPjRVPTQ1UVRAOTVdQzBRWEI6Nk1MKCJJNTZFQEMoVUE4Ojk2IjU1TToKK002NT00NEUxMDJUVS0zJEkqMURBKDI0NSYxRD0kMFQwXyxSSEsqIkBJKVIwRSlCPEcpITw2IDE8ISRQIiUKK01cMTw0JUEsJSQoUC8kQSwyI0EsNSRRKDAjUSAjJDhUMiRBQDYmIUw3JEEgMCNQXDMgUUcyKCIwPiRBMD4KK00yVF0yM1FANyYlOTo2NTQ0JjVdPjhDUDcnNilCODE8QzQlNTInUjE7N0ZKM0AlOTg1NSkwMzRNLTI0MSYKK00xRDUjMFQlIzBUMF4vU10gL1NYXy5DIEgqMjhGKVI0QihSMEUpMiAzJEAkMyAwXCBBP0hAJlFMOCExNiEKK00lICw3QiEsOCchQDUlISQyIFEvQiUhODwmUVA/JlE8NSUxMDMlUVg/JzIsRygxODgoJE0tM0RYPCdBTTYKK002RVE5JiFJQDc2JF0lQU1BOEYkNyhEWTM1UjxFNlVVS0U4MTk2JS0wM0RNKTJUPSIxJDEjMDQkXjAkISEKK00vI1RdL0NUXC8zQFIqQkxIKiJERykiPEgqMkRFJiE8ISYgJDQgKDdSKCFENSVQNDRcMSw2JTE0NCZTRDsKK00lITQyJFEoMCQhLEInUTQzJDEoMSRBJDIlUUw6JTE4SC9TRDonMlEwM1UhLShSNEI2ViU4OTFYQThWSVAKK000IVRBOiZdTScyMUk6JkBDKFNYWidSTTA1RyFANlVRQTYlPTY0NSUuMzRRLjJEMSUyNDUnMTQ0Xy9TJE4KK00rQkhKKVJERSoiNEQpMiBDKTIoViAyLCElMCIlXEFMMiRRLCUkLyQvJEEsMyQhJEokUSAvI1EgLyMwVDAKK00nITwxJDBcMCMwWC0jQSAzJEEkNCokJFokQTBGNDUlMzRSMDwnJVVCNlYsNSYlSUM6NDQ2JyVdRDhBKDsKK004RiE/JlFZIC4hUEU1NU1SODVBOTclLTEzREUqMVQ5JTFUNF8wJDEgMCNYXi5DREsqIlBIKiI0RyhSOEMKK00oQiw+KDIkPixAJD8gMSQgQT9MRiZRPDghMTYhJSAsN1sxNDgtIUg1JSEkMiQwXC0kIVw7JUE0MyUhKDMKK00kQSwxJVFAOSYyVSUvMTg4KjUpLTQ1KEcoIVU7OFVVRyYxSTo4RkElJTFJPzkmKDImViU+ODFcPC9DSD4KK00qJUlAPUYxNjVVSTEzJEklMiQ1JTBUNSIvI1UhLzNYXC8jQForIkROKkJIRyoyNEgpMjhHKEI0RihTPCEKK00pICQ2IClbUyVSUEkmUSw0JFEwNCRRODgmITw5JFE0NCUhLDMkQSgzJEE4PyVBLCMkS0wxJEEkMydBUD8KK00kNDEqKDFIPCxFNTU3RixTKCFdSTomPUknUiFGOiZBOygxWUo6RjBAKFUgUCpCJD4vUlhEKkNBICkiKT8KK00/OTFINlVVNzRQLS5CVFEoMkRBJzBUJFcsQlRMIFJOJSoiREgqQjwjKUA0REAyKCEpQCQwIClbUCUiREcKK00lUFwwI1EgMCNRKC8kQSwxIyEkMCQxIDAjUFwwI1EsOyRRICMjW0wuI1BYMiVRMD0jVDkwKEEkMyslMTAKK002NVRNJiFBQzg2JUIlQTE/ODYlNiZBPUQ5JVg3JkRUUylRSDgwIkw8KSNUXidBXUVAWTVFNjVBMDJALScKK01FRDkjMTQtIjAjWFQrUkhJKiJASSlCPEYpUjBDKFIwJShIJEAgMjAhI0AiPl8hWFErIVA0JTEwNSUxMDcKK00kUTw4JiEsNyUxJDIkQSQxJCBUNSghNDIgUSc0JCEkMCQxQDgoMSUqNTIsMyUyVTMzNTk+LCFQNzdGKUIKK004UUA3N0YhQDUhTDg5NjU/JjFRLSwyPDsmNCRNKCI9IDBCJD85KCo2OVU1NTNESSgxRDUhL0QgXi8zWF4KK00tIlxMKlJISipSQEkqIkRGKTI0RiEyMiEoQCRGIDEoIEVPRDsmUTw4JUFMOCUxNDQlUTQ7JFFIRShSWEEKK00lITAjJFg0MiYmUDYkUCwyUTEkMiQxUTMuIUxTMSQlKyZRUFkuRCk4NjMwQydWUU48RzQ9KSYxSTo2ID8KK00oJjlIOVFQOjYlWTknIVheKiFYRTg2IEApRDw+KiVZUEc3MT43JT0uMlQhIS1TJEwrQCxMQDJMIyo4REgKK00qUkhKKVI8SCoiPCQpOCRIIDIoISpQIjZdQUA5JTEwMiVRMDEkMSAzJDFMNCUiIEArIVwxJDAsMEEwWDQKK006ISgwIFBfKSNAXC4mNExSKCNNMDQlPDUlIzhbMDUtMisxTDg5Rj1MO0EwODZWOUg2QTg5OFZJRiUxLTcKK004NTg1JiNcRSVBXUM3IUBAMTFQRjcnNkE8RUE1M0Q5Iy5TUFIrIkRKKiJASSogLEZCMjRIKVI8RCkiNEYKK00pMDBDQDI4ISggJEkgKVtfKCFYOSYxPDwmMTg2JTFANyghPDcnQVhIJlEkMSQhIDIkUUlQJVEoIyQ8RDAKK00kMSA5M1M8Qy81PTo3QUg4LiNQXjQ1JEwnUT1BOiZVTyVBTT05Rj07JiFJQzomNDYlJTk/NUE4OTAiPDoKK00oRj1BJyIlJydCQT4+SkVXNlUxLjEjVFguMlxJKlJcTSsyTEggUjopKTJARylSMEQpMkBHISI2ISogJEIKK00gMlQgXT8sRiZRTVslMUQ4JVE8Pik0LiVBIilMNkUgWiwiVEknUUA3JiEkMyUhKDIkMSgyJDExICZRTFkKK00wVD00KTMtIi80SSYwQ0RDJ1VZOTUlVD8xI0E7NUVEQydVVTs4IVQ/N1VdQSdBUSMtUVBAOUZYPihHKEAKK00pJTxEKiRVNj5YKSItIjxEKCE8RSoyUFMtU1BeL1QgXy8zUFcsMlRMKkAsSEBSPEcpQCRIIDE8IF0/IEQKK00mMUVXJDE0NCRRLDooNDYrQjFdRzYkWFcrMkhGJyE0NCUgVDAkMFwvI0BcLyNAWFglUi0lNEVFQCgyVSAKK00wJSEsMEM0OyYlQTIzRTg2LiJdOTclODcmJVFDOEE8OTg2KT4lUTkkLSEwOjlGQDUmVlA6KDU0QCkkVTYKK00+WCEgLEIwPiZBJEIpQkRQLSNEWy8jTFouIzxUK0JISSogLEZAUjRFKSAkRiAxNCBdP0BJJzFNXCVBSDkKK00mIUA/KUROMEJRXUI0REhXKlJARCZBNDQmMSwyJFEkMSQhJDEkISReJzI9KjdGUVUqMykkMEU1MTFTSD8KK00lVS0zM1U8OC5TLTs2VUA6JjVNPzghQDo3ViE+JiE9JS1BQD06VlQ5JyZcPShVPEYrJSk7QCg1JC0iMD8KK00mUShCKiJMUixDPFkuQ0RYLUM0UisiQEcqQCxIQFI8RylAJEggMUQgXi88RCYxQjMnQTw3JUE0NiYjQicKK01EPDZeTTs+XTk2TUEtUkRGKSI0QidBRDckMSgyJDIkXSkkTTYwJTU5KEJEVS1EXSkxMzA+J1QxIigyJDYKK00qUjw9NFUwRChFVTY2MVA+OCZdRydCJF8rIVRBL1IgPiczOD4nNkBLKjRdJCdBUSU4KD05MkFJMTNEMSgKK00xREktMiRFJzBEMSAwJChUKzJQSSowLEggMVQhJSAiQF0iKDclWSA6JFEsMiRBLDQvKSY4UStGU00rRUMKK006RiBWKjI4QykiIDslQTAjI0lALSczREY1ViUvOSYwPihTLFs2RT0sLUE4OC9TUDsmUFQjKEgxPDQxQDkKK00gVVJTJjFBQjw2MDcmVCRJJTFEXSZBNDYsIUA6OjFcPTJUOEIoJElFQTU5JyUkUSkvVC0hMTRBIzEkIFsKK00vM0xdL1MkTCpCPEcgUjghJlAkMiAvQ1wpUUQ2REFcOCYhPDQlMUUkRVlHIU0qXlZQNjVHNzMsRCgyIEMKK00oQVQ4JUEgMyRRKEIvUlE+OlVVXD9CVEgtU1lFODU8XCZBPFwvMVg8I1I4TSk1STMmUUU5NVVIOSY1WU8KK005IUA8L1JEOSczXD0mMTxRJlFRSihCITAzIkhIM1ZCKTYkRDUyNDhcMCNZIjE0ISEvU0hcLjNMXStSTEwKK00qMkQjKiAkPSAxOCBdPyBaKzJKOyVRPDgmQTQ+JjFGL0NNSzVUXEsgNVQpXzdFIF8sIkxVLFJMRiYhKDAKK00lQURcMiU1QzVEWS0zVVxQLzUpLDE0MEcmVSg8JTFQPicyJEozJExHKDZVTDlCIEYzI1RTJ1FMXSRBVD8KK00nNFA7JlRQOylGOFEoVkFAKUQ8Qik0QF0xUVlJNTUlLjQkVSYxVShaLTMoUCwiXE4qQCxLQFJQSipQJDwKK00gMTwgUE8oWipSPjgkUSw0JiEsPSVBTjVFLUczVCxCXzVEKiE3VS0iLFJYWy1CVEMmMSwsJCFFIzRWLVIKK005NVE7M0U8SzBFTTk0JDg/JiU0PSUxODcmMlhYNFQ0OyYwLUdMIUg7MSNITCVBNSEjUSQ2JjQ8NSVEWDgKK00oJjBIJlY5OigkMD8oREhfMSE1RDNUTSgyVEEhMERQVCtSUEoqQkRIKVAsSkBSREcqICQ5IDE0IF0/OF8KK00rMj46JiFAOSchNDomIV46Rj07L1QsVys4RD1fOEUtIixSWFgtIkxDJyE4MSUyISU1RlYgPFZZTzc1TEgKK00xNj1GNlRIQyZFND4mQUQ4J1RBKjREOEAlVVlCOiFUOzBDQE0mIThcIzEwOCQ0NDglJFA6KFY4TCdWQT0KK00oVDhBKSUhJTFBNUI0JFEpMjQ4XzAkVFUsIlRLKlJISSlQLElAUkxJKkAkOyAxRCBeXyhcKDhZMCVRQDYKK00nUUBBJUFWK0U8VypRPDJfRFEkOyYxLDQmMSRAK1NUXytSTD8kMUxbLUQxPi1SOFUyUVxIMVU9KzQ1NTEKK00yRiwzJSFUOSdSUEY2JlBBKUVdR0FRPDxAV1lGJ1FFJyRBWD4pJUw2KVVMOCtGPFkoVj1EJUVAPykmOEEKK00nVTQ+N1dVODNUVTIyND0pMTQxJTAkNSQwJCkhMEQkXy1AJEMgMUAgXl80XidYSS0lITQzJlEwQCYhXjEKK01GXF8rUjxLJ0RAXDolUSw0JjEkRi00LSUsQlhAI1FNIjA1KUsxIy0iMlFERTM2KTg3RVEtMlZAMSRBPDMKK00nQ1RYN1ZINydVTUVCISQzQCglQyVBLSwkUTQ3KCU4MChFSDIpVjBQJlY1PiQlNDwoNiw7JURIPDdXVTgKK00zJEkvMUQpJDAjXSAuVCBfLzNcXi9TWFwsUCRAIDE4IF5fLFwoOF0vJUE8NShRRD0lQU4wSE03NlU9Ly0KK01HQTA5JlFAOSdBOEUsRCEiLEJYQSQyISQxJVFaNFQpMzZBWEM0RlVFOlY1MjNGSDUlQUg2KkVBLTomWD4KK00oJS1BQjEwN0BHXUMmITEuJUFEOCYlMDMoJUQzKiYwVCdWPUEkVTw+KFY0PCVEPEA5KCk9M0RJLzFEISIKK00vQ1ReLjNYXS8zXF4vU1hcLFAkQCAxSCBdPzxHJiFQUCZRRDcpIUw5KDIiLUQsRylRXDJdRiE4PCVRSDgKK00mQTQzJ1FIQSYjVEQlMUEgMiUlPC9CVFw0UTg4OSUlMzJFTSs4JSQwJSFAPCwyUD0/N1xEKyZKIEJRSDwKK009NkFBKCFQWzFRVDwpRCA8JlRQNyk1PF0oViU7JUVEPygkID0lUUQ4JCJBKDRHMTw2JSkvM0RJJzBUIFsKK00tMCxTQFMgUCxQJFAgMiAgXT9ISCVBRE0mITg0JzE4OClBXi5GLFsrUlxLJUVRKDkkUUA2JiEsMidBVEcKK00oJCxHJVFJJzRVXUYyI0EnNFEoOjslTUA2RjkwOVVALiQhKDotQ1hQQUdcPSlGQV9CQTA2PVclRCYxOSAKK00yMTQ3KENMNiVERDAnJShRJlVdNSQlODwnM0g3JDEsNCMiMSQ0Jyk6NURVKjI0NSIvQ0xWLCA0TUAzICEKK00rMCQ+IC8zXCpRQDsrMUA2JSFYNCUyRD5DWVszVF03M1JaLDgmMUA8JkFQNyQxVDspIVEgKTE0PjI1OUkKK00+JUElNEYoOiYnKUU7NklTNTZFOiRRNDUnVDU7Mkk6JikiRUI/KEQ3JldNTzhBSDcxNFw7JTFIWSYxMScKK00jUVEwLUFdQTYhLTgnQVxbJiEwNiYxKEoyRSlUNyVBKzFUOSIvU0xYLFAwTkBSTEsrQCRLIDIgIF5fNEoKK00nJ141JkIhRzxBSEgkIkorQyw7MFMsWlxHMVg+JiE8NSYhKDMoMUg+KVNMTCsiRFYxVSEmLUJdKDMxKDMKK004VUFBNyZJNjUmODklQSw5LjJURT04NEs5NTk0M0BQRC9UVEUoUVUgM0FQPC0lVD4mVEQ7KiRMVChEWTIKK00lVUQ/JVEgOCUxSDwlUVxBJzIkQDRXMTs0VSEtMjRBKTIkRSgyJDEjMCAkXCAxNCBeXzBHJjdaNCVRVUUKK007ITRHJSJCK0UsVzFTLSMgRkE8OCRBODQlUSQtJlFEQCs0JFAsIkxcNDVZMDAjSTM0QSAwOjYpTjpXPTwKK003JlA2JCEgOTA0LFc/ODxEN1UxMzMwOEEwNThIJzE9JjQhODYsJUA4JUQ4Nic0OEsnJFEsJDU4PCUgUDYKK00kUUg2I1E8OSZBWD00JyU5NDRZKDEkLSQwNCkhMDNdIS9AJFogMSwgXl9cTyY3TjMlUVVJOzEoRiciUjAKK01GLFs0VD07KklBWDslMTQzJUEgLichQD4qI1BLKlJdITVWQUI0JDU9N1E0MDtGUVs+ODFDOCckPiUxKEAKK001JiU0RChcSzglITAzIDxDMTUoRidBQS02IUw3KiU4OyUkMDQnNDBNJ1RZLyUlQD4lQSQ6JiIkOyRRTD0KK00nIiA/NEZdNTM0SSMvU1hfMCQtIjBDVF0uQCRWIDE0IF5fNFUqNkowJzJSND5RTD8nMV4wQ0w3L1NcOycKK01FITw7JTE8OCZBLDMmUVA8KUNQTyoiVEQvNEVKLiMkWzVBNE0vNUFDOVchPjVWQFQnUUxCJ0JQPkpFXE8KK006NlVBNyNdIy0lNDYkIiRUQiIsRi5WNDkoJFBDKCI8Qic0RSslVTBCJFE0NyRRSDwmIURBJzE8PidCNEUKK00xVzVCNTUlKjIkNSMwQzhWLjAkVCAxSCBeXyhPKFZKMiYyQjU/UTw5JlFaMEU8Sy9TXEssRSE0OSRRNDYKK00mISQxJjFIOisjWE8rIzBKMTUtUzAzTSU4UURLMSY1UDxHTUg4RyBSJjFESCokKE9LViRNOVZRPzZDVSEKK00sRSwzIzFYWUIhTEAtRiAzJlRMPSYiMD8mRDkoJDRYPCMxJDMjUTg2JEEsOyVRJDgmIixDMTctPzQkUSUKK00wVCBeLzMsUy1AJFEgMTwgXl9IVCkmXjYnQlZAQlFUOicxVjVHTF82Vi0zOEcxSD0lMTw4JkEsMyZRUDwKK00pU0RKKUM0TzJVTV8zNDUtPCIkTzNXKV0/ODlQOTcoVichTE0uRikoT0ZEUThWJTk1IzxbKyRcMSMyIFwKK01DMiRDLDVYNiY0SEAnIjhBJyRBKiUlJD8kITg4JSFMOSUxOD4mQTA7JlI0RTFXNT8zREkjMDNYXC5TJFEKK00tICRPIDFEIF5fLSgsIUlFKFI0PSYxOD8mQlooQ0w3K1NMWyVFUiQ7JUE8OSZBLDImQVA6KUNITylSWEMKK00tI0RdJEFQOSkjQS02NSU7OCZBRzYmIFAoMihCJiFINVBYSDg3Jj08ODZNPy9UXDYkQTxPMVIoOy9GLTwKK00tVSg1KSFANychPEEmIjw3KDFEOSUxLDomMUw4JjE8OSchQEQmMjxXNFY1KjNURSYwVD0kMCAlIyAzUCAKK01eXyEiKkFJRydSKEAnQSw5JVJSKEU8SytTTSsqRVFcOSUhNDcmISQwJiFIOCsjUE8qUyRGLjNcXyRBUDkKK00qQ1EtN1VJRjs3PVE4VkxTJ0IgRCdCTEFRSFA6N1ZRQDk2XUMwVFwzI1EwVDFRSDUuNVk2LEUkLychNDQKK00mMTA+JEIkMSZRNDUkMFw0JFE0MiRRJDMlQSA8JDFcVjU2PSwzJDkjMCQxIS8wJSAgM0QgXl9BJypRXU8KK00pIiBAKDE0OidSWi1HTF8yVV1TNkgiMD0lQTw5JkEsMiZBUDopUzxKKTJcSC8kMScmUiw+LFQxMjomOVEKK00+SDVZOUZQVSgiKEgrNDhYVSkwPjc2JTo3VkU9LzRIMSNROFczIiA4LSVROSwlIDIoITw2JlE4QCUyMDQKK00nQUg6JUEwNyVBQDUlQTA2JjEwQCUyLFU0VjUqMkQxIS9EKF8uUCReIDNEIEtPOEgpSEVNKjFGVUwxTD0KK00lUTYtQ0wjL1UsWyFFUVA1JTE4OSchLDMmQUw7KFNAUyoiXEQwI001MzQgUStCNCQmPEQ/OyVROjgzUDwKK00mMlw7KVFWXD0xREwuRFBLOFdcM04iIDknMiZYOEFYXC9SKE8wQUhLJSBUUyVRLEImUTg0JVFANSUhND0KK00lQTQ8JSFUNiZBTDkmQiBNK0UtKzI0QScxJC0mIDQ8ITEwI1tcUihAQjZcRSVLPlUlUTw1JFhWNVE8XzQKK01UTDo3JkEsMyUhPDokMSQ4JjFESS5DLEwtMkUmMFVFMTEzOEwoQTg2JVFMRT1FTTw5Q1Q6JVMoPCxSNl0KK00+MURKLkRMSjhHWDJNMVQ2JkI6WDZBQFcuQVBKMDEwQyQwSFAlISA8JTEgLiRRMDEkIFw3JCBcNiNBPDAKK00kQSwxJEFUSipVISoyJD0mMDQhIyA0MCEwQCNbXlI8QUNHNEomK1ZdJyFAOSU5Kj5STTs9Vy0qQCdRPDUKK00lQUQ8JFEsOiZRTEQtMlhGLSJRKzI2LTkyQ0RQKSFAOCZRXExAJj1COjQgPiYzMEcyQ0cqQFIgTCxUQEkKK004N1QxTFFMNiciRl04IUxSLiFcSDAhPEckUFBSJUEoPyYhLDEmIUQ2JTEoOiRRKDkkMUgzJUE8NSVBXEwKK00rNSkpMTQxIy9TWSEgNCghMCAjW15SND0mUzA/KDFcNCdBSDUwSC4tTzxfNFM8JjcmMTA0JCE0PSRRPDkKK00sIUhGLTNARiwhUUc1JyU8NyYhQzc1TTMzJSEzNzYkXyZCUDklMig8J1E5NDwyIEorIixJJyZURUgxUD0KK00nQUcgOzI4PydBND0rMVhEJSE8ViNBPFQvIVg/JUFENSUhRDolUUQ0JSFEOCYxUDomMTQ3LyJYTD0lKS4KK00yREUoIDREITJQI1teIVw2JyM4OycxXDcmQTQ0MDg6NVBMXzRUPDY3JVEoMiNBLDskMTQ3K0FASi1TQEoKK00uIjFMNyc1QzomSUo5Rjk8M0RZODklWFomQkg1JFIsOikxRTI8UVREKkIgRiVGPD9HQUQ6JlFbITlSIDoKK00mMFw3KyFMPCQxMFMiUTBOLSE4NyRBNDEkISw0JDEsLiNBLDIkUUQ3JVBULy0iQEk9RTEtMiQ5JSA0OCEKK00yICNbX1IoNSdTUEAoUlhHKEEsMTAoQjtRXTs9Vl0mPichODQkITQ9JFE8OSwhSEUsQyxELyJBTzhHXUwKK007NyFVPEctSjRFKT07NkklJ1JYOyVSMD8tIj03PlI0RSlCIEgmNkBARyE8OicyLyQ6Iiw3JVEoOCpRVEAKK00kUThVIzE4US4hSDslUUg2JTE4NyUhODEkMTg1JUFMOSYxJDMuIkxHPEUpKjEkMSMgRDggWD8sSSo0IFkKK00sUUouRCJEPiciNidDK1csUjxbIUZSLDQlQTA3JUE0NSYiLDspQ1BSKVNATTgmSTMzRVUsL0QhLzpGOU8KK008Vl0+RTRdJCcxSEg0UylOTTI0QDAkTTMyVFpXKCssPihRUDxMVTw8JTEsMSVSIDYlQTQ0JEEwMy5TPEIKK00nUTQjJig0MCgxQDEmUCw1QzFEOCVRNDwlVSg7PCYlWjRFKCMyUCUoIC4nUikyKF4uUlw0QlkoRSYxSEYKK01DSTciU0xLL1BJVEQkQSgxJTEwMyRROEEmMkBeLSJEWyhUOS8uQ0kvLyJQUjEmKUc5V0VaOSk9LTFRTDgKK00pNEhNOEpARSgjXS01RFEtTSFOTyciKDonWzUzJTBcMCNBMD0kUSwyJDBcMSQjLE4mMTgvIFE2JSMxWDUKK00jQUAlJEhUNCUhNC4zUVFPOSghMzQkRSggNEAhMTAjQV9SSEAwRCxVJVkuOipBPDwqOF41US07NVZMVkEKK00pUTg3JFE8NiUxNDgoUUxELjJcRC5RTFYwUzRQLzJQRypTST46JlogQScuPzNURD8nIixeJUReLiciNFwKK00yJTktMysoOE0hWD8nQiZZNiE4MiRBIDYnUTQ1JSEsMSRRKFcsQVQ6JEAsN0EwXEAlUSA6IFEyLyRRLDQKK00kUTAwNDFdTjlINTQzJDUoIDRIITFQI0pbIzBLMTJMVCc1MTkpQihGLEg+L088XytTS0ZEMlEsNSUhPDYKK00lMTQ2J0FIRC5TLEYtUkRSLVMpSj1HViFHSFIsRChVPkBGKFAwNDVFOUg5UVEuIlJBJ00hKCJdJj5MKEMKK01PQVA+JyEqRkFBNDQlMTQxJTEwNCRBLDYlITRBJVE0NCRBTDomMSw+JTFMNSUwMDhDMUg+JjFAUiZJUiMKK001VVU+NyRAITNQJTMgKTtQLSJJJyszIDc0NUxCJzIwU0NJQyJUPFMvTko5LCBRJzElMTAzJFEwPCYiOF0KK00tMkBZJ1E8MyRTUFkyVSFMNkVNSDlFMi06UykgMiZZTkBVVk9RWiokPlNcQyxUQVpQIV5bJkFUOiYqRiAKK00jUSQyJEBYMiQxJC8kISwxJEFMLyMwUC8mITw2JCFMMiYgXC8gUSouJFE0OSRBKFAnOVIkNyVVPDZEOCEKK00zMCUwIC9PXy5SRS0tMzg6NjYsRyZSOFZDWUMkVj0/OlE6SS8lMTgzJVE4NSUxOD4mQihYLCIsVSVQTCwKK00iIkw+KjI8XisjKSUzRFI3PVNAXzImSUo9M01dSCdBVUEkLDsrNC1VTiE2XSchSD4lOz47JSEkNCUhIDQKK00kUSwxJEE0MyUhWDMkMSAxJkFEOCRBVDQmQSgyJTE0MyQxLDckMSxSJ1omLzomOUA3REghNDAlMiAtL1QKK00qMjQ9KSRIRigyIDwnUVFSPlheVVNNKy1OOjEjJSE4OCZBPDglUTw7JzIkVC1CIFEnUig/KiU1NTcnPi0KK01ARl1ZO1hGITVTXFIqVUlaOzkuVlZbRksrIzk4PzZITUlGQyMkUTA8JkpFXCUxPDUlMCw0STEsMyUhLDQKK00mVEg2JDEsMygyLEQmJDQ1JDFANidCTFQuNSFEJlFUQDA6Skg6RjYiOVY0ITVQJSIgLS9UKVIgPilEOEAKK00nQig4JkFJU0BJQlpULS8uTko5JCRBKDUmITQ2JTE0OSZSLFYuIihWKEFQMyQzPFEtRTFKNkQ1NTIoLjAKK004JCRRK1YtXzlHUj5QOjZGKyM1OkAmTExJJi8gJDEsOig6XVwkMTAyJEAsMUkxIDAkMSAxJiQ8MyNBIDAKK00nQiBBJTQoMiNBIC4lQixOLFRBOiNBJDgvOkJKO1Y2IjlWNCE1UCReIC0vXyshWEErRFBDKUJIPSYhUVYKK01AWUJcVi1bOVE6SSclQTw3JkE8OCVRPDsnMVxRLFFUWCkhXDYlIyA/KCJcWysxWEwrR1I+OyQ0TipFXiEKK003NUVPR1guQSxTMTU/RlBJSCVbIiRRID4oW0IrJVE4NCUgLDNJMSgyJFEoMyZERDUkISgyKCIoQyVUMDQKK00kITAyJkI8US4kWUEkMTA8MEpWUj5WUis8JlAhNyAlIyAtL1orM0xaKCU0QURaSF0lMUg6PVhOVVNcXysKK01NSjxAJiEwNCYxPDglUTw7J1IkVC5RXFopQVg8KyItMkVbUkBAVjVROSdFVjZENSYsSEFWKUcnIlY8RlkKK00tI1lHUVhIOkQ2QkclQzBBQDVEOiYxQD4lQCwzSTEoMiRRLC4nJTUtJTEsMCQxTDgkQEQzJjRJJjExQFAKK00uSC0xOyZNWztaIjUwRTcrNDQsISUwJDogLS9ZKUJcVChFJDtEOlBZJCFAOz9JLlpUPSMsTVpEQSVBIDEKK00lUTQ2JTE0OScyLFcvMiRYKDFUNiZCKThDWyY4PiU9RTFXTiQ5ND0lLUhdVyY1SlBROz5ZLTNZSVI4SDgKK01DRi5EJFMsQkFFXD0lUTA7JFAsMEkwXC8kISArJjRdJyRBIC0jQUA1I1A4MCU0KF0uQFxJLTdZJzc1SU4KK006KVo3MVUvKjRULCElMCQ2IC0vXylSSFUqJTw+RUswXiNBSD5AKTZcVV1PN1BKVEQmQTQzJjE8OCVRPDsKK00nUVxPLiFQVCdRSDElUT0jPjk5XDdELSgsR0Y2PCRNIiw4WVonJCYhRjhSSi4jRURTOFw8Q0YmRiRTIEUKK01ERjA7JlFEPSUwLDJJMSQxJEEoLSZVISglISgvJCFINyQwQDImRDhfLkEkUjAoRTg6NjFXO1ouPTJFNzYKK002VEghJkAkPCAvT1MxRkg1KDZEOiUxUDQnIUIqPEheRlM8UydIWjg1JjFENCYhKDUmITw2LVIoVC1RTFAKK00qIVBCLlIlNkc6Oj07VV1MPEdNUzZEPEYoSFVRMTQuWlleMyIxUkVCUUkwO09FJl4nRjAyJlIkNiUxREMKK00nQSwyJFE8NCQxJC4nVEw/JFEwMyYyNDgmITw2JVFUNiRAWDIlUS1HPERFNy9YJTEvQzMjLDRYIScgJDoKK00gL09YLzVAMikmMDQlIVQwJUE6Kj4pPktULSMrSipENiVRNDElMFwyJEEwNC4iLFguMVRUKEFcOiZRWTkKK01GKi45OzYpTzBHVVU5NERFKTkxTCtCTkVSXFMgMVI9RFIpMDlOVFJXJlYsNCcyJDQjUThAJlEgLyQhMDEKK00jUFwrJjNMMiNRLDAlQig1JUE0NCUxPC8jIDwuJkFNSThCWF0tSCkxLlJfIixUVCEmICQ0IC9PXzA1LDQKK00pJlw3JFJANiVRSi8/WVZNVE1DN0s6TDkmUUgzJVEkNCUxODYuMjBJLTFETykxVDQlUVE7QlhGJTk1QTcKK00pN0IrO1RcRChZVT0nUSFdRlomXDQiRUBTSUQ7TlRKWCY2IDgoMjg5JSFAQicxKDEkQTgzJDEkLScjLDIKK00lMSgwJiIwNyYhPDgmQVAtIVBAMychXV4/NEEzMEhVNi4yVy4rRFAhJzAkNyAvT1EuQjBFKic8PUMqOU4KK00mIUAyOkhWUU5LRj1FOTxBJ0FMNCZRMDgmQUBAJVFUVS4xSFIpQVxVMlIkWUNKWjhBNkVPPDdRXThEIEsKK00oSExHPEpCT0xJTlo2IlA2UilMPkxURlMnN0A4KSJMNyRBPDsmISw2JSEkMiQxJDAnQ1BFJkIwMyZCVD4KK00lUTUrKUE4NCQiKDwoIkA2OzJKNT8zUD0vQyMjLFREISdQJDsgLT9ULSE8QSpXKDdCWj1KJEE4MjwpNlYKK01PO1pBRklIQichPDEmISQ1JSE0PiYhWFkuUVBWKEI4SSlBTFtCOlI2QUZVVDA3WV87NChKKTkgQzdYVjMKK01EN1ZQNTJIOFJJTDxMJDJQJkc0MihCRDQjQTA4JTEgMyQwWCMjWiQtJiI4NiYiIDAlUkg7JTEtKSkhKDIKK00kMVw2J0JEMzZBKiA9Q1A+MCMrJC00QCEmUCQ4IClPXy4xPEYqN1Q6QkspUCRRSDc9WU5YTzwmSUcpUEUKK00oIVAzJkEsIyVbREAmMVxKLVFATilSPEQnITBfQSk+IT4mNT0pJ0Y1PVRASShZXDktRU1FNzUiSjdSUDQKK01UKiA+TCQqUiZHLDUnQjQ0JFE4OiVRKDUkUSAjJDokLyZRXDQnMjQyJjJQPSVRNS0qMUg2JEIkMSYiUD8KK005IU4sQDQ0QS8jIy8sJDwhKCAkOiAtO1IoUjw8L0ZYMylSREUmMUU2NkkqPkA5Pis8VzQzJUE4MiVRNDgKK00mITxDJjFIUi5BSFgoMjhcNCIsPDZWPilCJiVLPldKITgmWEwrWC1ALEwjLU1cIlw4UjBQUVlITEozJksKK00lVkhRMTJEOSUhMDckUTA7JiAwMkgxJD8wMVwrKTFMOikyJD0oRkBDJ1IsPSwjSSUnMj1KI0lcSychOF8KK00xOzUqLCAkOCAxRCBeXyxAKDFRITowVEYqQiQzJVU5QEZKLiVHOSFZPiEwNCRAXDQkQTQyJSIkOiZTOFwKK00nI0xCLCJQRyZRWTs5WEouOkchKz8oLUs8IkxSQ0YoR0orJjZISy1CKEMrKUZCSkYrKlQ4OFIwWShBLDEKK00kMTAwJDFANSNQXDAkIFg5KFBUKyhRNDcoQVg7KCY4QSNRQDgpMjhdKEJdSyM6KFAnIUEjMktFLCtQJDQKK00gMTggXl9cSCkiJF89ISBFLTI8NCZVTUdIKjYgRykpVj4hPDglUSQ2JSE8NSVCLDsnIjxYJiJcRS1COD4KK00lMik0NScxWzglRE49WUVVPUJIUENWSCw8OC1CPjstTikiWy9HUlJGKkskOzhCPFwoMTAxJFE4MiRRSDcKK00kMSQyJEEgPCcgSDAqIUA5KSIgPShGSEYkUUA1JkFYWSlTNUwjKjBVKDE4XjMsNScrQCQ5IDFAIF5eWEIKK00lMUg6RDJMSilSPDgoR0UwRFhVTkQnPU47MSA4JiE8OSYxSDolUiA1JjMgVyYkIDwkNVk8KUFMU0c4TVUKK003NyFaP0gpLT9CJE9ASFVCSjwjSERbVVcoM18nSDMkUitVODkyITRCKEFQNCYhNDIlUiA3JEEoMyRBLDgKK00wUyAyJTJYSixSXFEpQVBfL0Y8TDM3ND0lNEhZJTlcTCZRNSYyKVg7JkAkSSAzICBFTlQ/JDFMPUNCNEkKK00qMjQyKCdFNkZJKVVFR1VVPFEkIyUrXDYlQTw3JSFYNiZDLFkmQ1g/JVRYTSZRWFRGWEVXOSc1Lz8oPToKK01AQiBRQ0k1OEUqQy0/Kz1WKCNbKUgyXE8qNUA6MEBANiZBODMlMSgvJSFUNCNQXCMkKiAyKFE4LyQyNEQKK00rMlBPKSFIXSk1JD4sVTgsJjVQXiRZVEQlMT0sM1ooPSYwJEYgMlggVi9ERyVBWD1GQkBILDJINShHWTsKK01IWTFORDdJTjxBMDkmMTg4JiFEOSVCIDcmUjxUJUNAQSdEOEQmQiBGQUctQTZVWE4+KVFHQkFcT0FaRTAKK005J0Y7NltSIidTTy9KIyRPKkVQPTBQRD0oIUQwJTEwMSVBXDYkMSQjJEogNScxJDElUkRHLCJYUSlBWSIKK00oREg0KFRIKyg2JSMmKihKJkE1KTQqUDkmICRIIDMgIF5fREclUVlURiE0T0xZRDknQSkhRUdZRkBWSUUKK005MTw9JlFAOydBUDgmQUg4JjJcWyYzUD0nUyFMKSFYVElaMVkzVl1cQlcpNkMyLD1BSSpXTy1DQjIoLjMKK00oNSMiSjNIXDNULD5AIUg8J1E4NyYxRD0wIig8KEEkNiRRKDkvNThWKDY9JytSJV4zQUBGKSMlIEBaIFYKK00lQjg9JUo0TihRMT0mIlA3JUAkSyAxQCBeX0hDJDFVV0VRLE1NOTwzJlEpKUc4LU9DNzFPOzE0NyYhODkKK00nIUg2JiFANiYiXFsmMyBGJUJEViUhXE1JKVVUNEZJNT44IUBEQig7QklWSkhMMy0uWC44J0RLIElDQFsKK00zRCw9P0FEOSchLDQlQTg6LzFcOSdQWC4jUFwwKEJIPCYkUF4pUUohM1E4QiRCLFU7OCREJUJUPyVKPEgKK00mUSlDJlMkOCRQJE0gMTggXl9cSyRBUVlJQTRJTllQOCcxPSVKKDVFQTZRRzoxPDomQUA7J0FQOCZBSDgKK00lUkBSJSM0QighVEElQihBQkgpPTFFJE09KSVTR0IkP0RKPjk9SUJJKkhCPSdETyVLQ0hYMlNYOkBBQDkKK00nISw0JUE4Oi8xXDknUFg0JSEkMiYiKDYmJTEgKlFOIzRBSEcjMVBSOVc4PyczQEMnOlRLJ1ExQiZTLDsKK00lMCRJIDFAIF5fPF8pITxCSUFMPiQxLD0nKFUhRCdBPjk1XUA4IUA8JVE4OicxODUkQUQ3JjJUXSYzUD4KK00mMUVBKVFcPTJKMVw1RkFXPzZVTkdCKD9BOTZPOj4zPClXXVspJiJdTlMkXy81PEhDUTA3JzEsOyYiJEEKK00xQlRDKzE0NiRQXDovJTEqM0dKJyUxWCwzITw/MiU5PEpHODckQiQ6JSokNyVQXT1GI0g9JyAkSCAxQCAKK01eX0BbJ0E4RUkxRDskUSQ3JjhVKUVXVUU7Nj1IOiE4NiUhMDgmUTAzJCE8NSYiVF0mMyBIJCEoSSVSJDoKK00yWiVYNUZFODxIIVdIIVw9QkomQjNcXyonODYgKEVOW04zJSAvNUBHQyEkNCZBIDglMVg+MFJIQCpBKC4KK00jUFAxKDI0Ry01MV4kISgtMzE0OzBFMTxIRlw0JEI0OiUqLDEjUFVDRlNUOyYwJE4gMTggXl9dIydRNEUKK01MMUw5JjE4PCZZKSVIR108OUYhQTkhQDklQTg6JzE4NSRBRDclUjhUJSMsQSZARDsmUjw4LSg1RDM1KFMKK008OT4lSiIkP0M6QjEpOy5VJFhKIydFRl9PMlBULSRQREUhRDYmQSA4JTFYPjBSSEAqQSg0JSBYMyUxSDwKK00sRiogIzE0MDQhREAwVTlDSUZYNiYzJD8mWkQ0JFBdQkZTVD0mUCRNIDFIIEY/PSgqQiBQTUFER0o7PDwKK00kQUQ7Q1dEWC5SXFc2QUA3JTEsIyU9XDMlIUQ5JiJAWiVTQEEoQlVFMUMoXixKMkk9Ni1ZRCdaIUpBUD4KK01CKFFGQi42QzdIJjQrU0pQUDZFRz5YRjFIUTQ2JzEsOiQxREAoMig8JyEoNSRBJDstRSEqLVdSJSZCPDsKK000MjhPKTFMSj1TNTklISg0JEhUOCYhPThGUyw/JzAlIyA4LCBGP0EkKSFcVE1BPERKWzQ2I1FEQ0VHWFwKK00vUyxbOCE4MSRBJCMkWCgxJEAsN1ZCQFolUlRLJjI0TS0zQSEuKjZFPTY1OT8oIiFJQTg8Q0lBOTs8Xi4KK001KDI6KzM2Tk9WRUg+WEYvSCEsMyZBIDcjQTg9J0FcOSYwXC0jQFgyJ0IsRSY0XVkmIUg5NEIwSyhRQEUKK008Izk2I0EgMiRIXDIkITU+R0MoPCZQJSogODAgRj9dLCkxWE9PUURETFtIOyQxWD9IOCBULjJUVTcxQDQKK00lISwjJT1cMyUhRDklQiRRJEJUQyhRXD8tQzxfLFlGOTtEXFM9KEImSyFMPkM5VSgxWl1UMSgyOSlTIlAKK01QVjE8PSgyMUohQDUmQSA3I0E4PSdBXDkmMFwzJFEgNCUxRDslJjVeJCFIPTUyQFApUihSPjQlQCQxMDYKK00mOTQ1JSE9PUdDJDwnMCUrIDg8IEdPKF4oUUlXTTFINidRQDkoSDhEQzdQVCpRTE80MUA3JTE0NCRRMDUKK00lICw5VkI8VSgjXDomMj1OK1IoSilDOVEzVi4mPFdJV01CLD5BSTFLQFghODBCRj5RWFslTlVbIzBMTTwKK01EQURIJyE4OiRSJEYqUVA+JiEsNCRBLEEsJE0hLldFXS1CTVkwUThMMiQwX0FFMj0mUUAzJVhcLiYhOUAKK005QzxBJSAlKiA7RCBeXzRaJyFFWk0xQDMnUTgzJyg4S0UoJFcrMVxTNjE4MSRBLDIkMSgzJEE8NyYiPFUKK00oIzw+JTFcVidSSFArMzlQM1UlMC5UXUhMQVQ8Q1ldQDsmTSItQk5BUUhHJE8lVyMwPEU5Q1E8RSYxLDcKK00kIVhDKiFEOyUxIC4jQSA6JyIkPSckXVAtMiFaMSEwSDBDTFQ/JS45JEE0MSVZJCskQT1GOjM4PCRAJTIKK00gO0ggXl9dICZRQVhPIUg1KUFINic4TEpHOCxPKiFETTRRQDQlITQ0JFEwNSUhRDklUihMJlM0NicxREQKK00mMjhNLUNNTTFDIDsmU0E8TkIoQEM6KTMyVDxBKDJGP1BYMyNPVUpeL0xVQUVRREUmMSw3JCFYQyohRDsKK00lMSAzJFEoOyUxSDYmVjlTKkFdXTFRQE0xVDUjQSYmQSUhLDMnKTwtJTFBRTpTNDolICU0IDtUIEYvITMKK00xQkw+SzE8OTU1NDUmUVRCQjgoTClCLE4zMUg3JSAsNyBRMz0lQUQ3KFMoMixCIDMrJjRTJiI0SyczUiQKK005KDYrRUdWUikhUiFFOS5LTEY1KkBKMzhGKk5cTi0+VFBGWiErMVQ/JTFELzclNEYoMjQ+JSEwMyRBPF4KK000NChcLkcpPjpIWSslQyBDLENBXzJaIDkmMUA2RzE8NiYnQjEtQjA3IDQsIU8gIjhdRFxaKTIiTiUxNTYKK002MTw8JyJGNEIiUEYpQyk2JjEkMSBRM0AkMSgyJSE8NShDLDItMSQ4KDMgQSdSSFooRD4oMEU9IDNGPk4KK00nUUYwRyhaREhVQSZBSjc1RipKX049LlZQRloiK0FIPCRBOC42VTBFJ0IoOyQxIC8jUTBGKFFUQCdGOT4KK007OS0tJEJAPSpTJVkyWiA3JUEoNEdRLDMmOCY2LiIoOCA0VCFPMCI4X1U0VSoiMlEmMUlBOFFMPSpCQjUKK01BUjQ/J0JJKiYhODMgUTtAJFEwNCVBRDcnUjwrKzBcOyVRRD4oMlBcKVRKIihSUDwrNEcgJkIuMEdIUjkKK01FVDxaQ0pDPURaRyFOTUJaUjcuJStRQDokQUAtNiUkQigiMD0kUTg0JDEwPSchMDwrRiU5Olk1MSVSUD4KK00sQ0leNSpEPCYhLDlJMUA1JkgmOS8iODkgNSwhUCAiOFwnOEEkOCpGJyFRSDkhND0qQURTL0JURyZSSScKK00nMUg2IFFHQCUxODUlQUQ1KEJYNywiNDMqNkEoMFIkQyxSTFo4SDYxRFc+SSZBUV5FJlpYVTI4XEhaMzIKK01ASV8gTE02WlEnRiUnMVA6JSFANiQkJEAqIjhBJTEwMyQhKF00NCBULjdJSTlYKSwoVCErJDNCLTZJRDwKK00lUUA5SEMsOyk3OVUsIiQ0IDQkIVEgIjhdJzg6I0gyRyZBQUk5QTQ7KVIgXTBCVEYnMlkwJyEwMyBRO0AKK00kQTAzJSE8MygyXDcsUTg4J0MkUzFCMEssIyxdMCU9JjJVXkUmQT4wSCciVVJRWFtKKjMvQElbJU0tKl4KK01RR0YmJ0FENyQxNDUjVCA/KTIsPiRBIC8jMFxFKDFYOygmWUk6SD0uJ1NBJSJDJic2SUQ6JSEoN0kiXDgKK00pR11aLUI4OiA0UCFQMCI4X1dUOSQoQkonQVVUO0FIPStRPFYuQjhDJjJFJiZRRDUgUUNAJSE4NSVBRDUKK00nQiwwKlEwOyUhRE8yIjBNLkNEXykiUD4qRDJXJFIqLUhXQyFUQVBYTTpHOT85TypOTVMoU0daKSdRPDUKK00kMTw0I0NcPilSNEAlITg0I1BcPCZRLDYrVkVEOihFMikjUSYkM0osOFooPyVBLDxKQzA6KVddXS9STD8KK00gNTghUlAjW1w5NDYnIy5SJSFYPyYiIEI9UiIpPyQhIjAkJSUlIUg2JUE8OCUxODclQUQ4KDJURywyMDQKK00oJkxVL0QgSihCVFY2ODIwREZeQSZCIV5FVU85VyM5VlEpWy9ESC5fTF0+W004NU0rIVw7JVFELyRRLEQKK00nUVQ6JTEsMyQxOEsxMyRNOEc1STU3WSsmNTokP1daVz8pVDknMiQ5STg0XCs3VjUvMSw1IDI8IU8gI1sKK01dKTg3JkMyUyRBSDkkQUQ6PCIyLz9EJSIwVDkuJFEwMyRRMDUkQTA1JSE8NigiWEctITQ5JTMoPy9UKFAKK00nIzBZLUU9JjJFKj8nQU4rR1VLOVYjMVlSOVssREgvJk4tPyFNWDVOKzFQOCUhOC0kMSRCJyFINyRAXC8KK00jQSw/KTE8NzI2RUk2KC0tJTRZXj4nPlE/KVQ3JkFMN0lYJFkrSDo6MTFAOCAyVCFOICNOX1okOidDPlYKK00lQVw+JTE8ND1RUio+MzRZLjNNIiRBRDUlMTg3JSE4NyVBRDgnMihAKyEsPCJRSDkwJCBLJ1M4VydSRDoKK00qU0ZRJUI6Kkk2Q0paI0VZVTo3OEM3UyhPPiMqT1hJUStBSDYlIUAvJFEsRCdBUDklITQ0JCEsOCdRJDoKK002JjFENUg1MSZFKV8/WCJWQTo4JCcoRk1BQ0xPQUlVKSZBSCEtICZeIC9PWkwiKEInWEQtJSoyRyUxQDgKK00oSS1DMDQ1JTIkODUnITA5JkFANSYxODwlMUBBLDJETCshREE9I0BFKkMwWSpTITNBKFo1PSlAPyVXMjYKK001XUM9KitOQ0g9Jis6TFZVVVtaUkJFUFEnUVQ3JjEsMyUiOEEnMTw0JFEsNCUxTE4oIihNLTNFMzM0WDgKK001IyRDKyZdJEkxNDYlIS5HPkNATUM5OSMmUiwhKFAmWCAvT1pMMihAJ1hIKyQqQkslUUQ1KSk5QjBEOSkKK00zNFw0JUEkNiVRNDIlUTA6JFE4QSxCREwnMUw1LlFcRiszTFgsUzhRNUQxLTQ5QEIlJ046NS0/PCpMJkkKK01IPFYrOk0yWlY8MldCJVRSJyFANCVBIDAkMjA+JkEwMSNQXDEkQUg9JDEkOiszTTY0RSA0M0JMPSk2RSQKK01JMSwzIzBeRz4jOFBFSVEqJ0IkIShQJlUgL09fTyI8RCkoVC8lOypXJ1FQPygpOT8tI0BaL0QsMSZRLDgKK00mMTw0JjE4PCUxQDwpQihFJjFcLigxSEcqUzBVK1MkPCpROE4uKkw6J0dSQjguN0srTCJQSi1SJjg9Nl0KK01XXE5cQzYgUyZBODQmISgyJFI4PiZBMDElITAzJEE8OiMxQEUpUzk0NTUwOTQyWEIrRlktS0FANSNBMkwKK00/I0BQRUolLCdCLCEqICZXIC9PTUgyMD1AKyQwJjE4RCVRSUYnKVheL1QpJDIkUDYmMUg6J1E4NCVRND0KK00mUUBALCIwTilSIEk9NCRAMUJZLCohVSw9J1Y0O1pMQCZXJj0uXU89Jzk3J01NIjo3TEJQVCtCT0kkVD0KK00pIUw4JkEsNiUiTE4oIUw4KUM9IDMyRDssNjkyLlRVOzsmQD0zQigyK0ZZM0khPDgmQVhLJjFIOUc5USEKK00vNCwhMSAlUyAvT1FHQVg6QCskLiVBOEQlMT1CJylUXS9UKSYzJSw1JFE4NychLDElISg6JiE0PitSKEoKK00nMVg9LkI4RTQzTTktIiBPMkM5Ky9aXDgoNzJDL11PPCgpPydOPF45NyxCUlRLSlNGVFRAJzE4NSYgVDAKK00kMkRLJlE4MykzOF8zIjg4LDZBNC9FKUA8Vkg5MkFQKilGOTNJITQ1I1EkPyNRMDhHOVkoMSREITMgJVcKK00gL09fSkIkOkE7ODImIVRLJjE1SCU5SForQyRULkRINCVBUDknQTQzJUEwPCZBNDooQUhCJFIoOigyMEoKK000M004LDFYOCdQREooTDA0KUcySDI+S1IoSV82Tj1OODVMXlpWTCpbSTUoQidBMDcnISAzJFJMSyYxMDEKK00pIzReMlJANismOTAvJT1MP1coPjQiJDArJlE8SzFINyNRKEIlQTQ3SEo5KjFEWCE0QCVfIC9PTEoiJD4KK00oJyA3JEouSyUxQDwpSlZcQDU1LTJURDclQSw7JTE4NCVRNDwnMUxBK0JQSysiLFE+U1hBLCNVKzFCJSkKK009N1YwOjlAQSZVIjEsTV86KlxfMD1MWj8yXF5IVCs+OUoiXDcvMiw4LVMkODskJEYtKihDN0RFIC9FQSsKK001WEJBTCsuTklTVEE1V0lbQDsmP0lBPDgoIiBTK0JUQikxSDQsIywhLyAkTyAvT1BJMUw7KCcgNSNaLksKK00kUTQ6KjpaXD8lJSsyVFw1JCEgOCRBLDElISg5JkFAPysySEkpMjRGMEIwQy1ENTYzUixMMlM5Jy45UDkKK00oNS43LU1fOStNJzA+PFY9Mj0iS1RbSj5HUlw6LiIsOi5CXDY7NDBHLUowRTg0USMwNU0uNyhWRU0rQlUKK01NJCw6M1cpUT1aPj9JQTQ1JjE0QiVRPDAlMFAsLDNYITIgJFYgL09fTDFYOyk3NDkkOkpSJVEsPig7JyEKK009VEUjMERINyRRKDolITQzJSEoOSZBQDsoIihDJkIsRSlBXEctND02MzIkNSggREYnKyQ1KUUuPDAuW08KK00sLUc/Pl1OPzE9Lk1VO1JDSjMwPC0xWDYuIyw6PCQ4SC0qKEM3VEkhL1VFLjg5RldSLScxUzUwQzU3QVgKK00/SlpIS1FINyVRMEMmQUgzJjEwMC0jXCEyUCRYIC9PT0tBQDo8I0A0JjFcNCYxSSguK0c7VE0zKFApMD0KK00mITg5JSFINiRRND4nIUA/K0JUTCtSPFY9VDRBKSM5KDVRSSQ7R0oyOlooTCZEQjYrLTs7LDxbL0UtIkMKK00zXEZEUytCWE8iVE0yKUIxLSosTUlTPjUtJyBCMDMpIC9EMShLWkZISCk6TEhDLD0yITQ9KFQgVUZBQDgKK00lUVA5KTMsUitSQFQsIlQhKlAlMyAvT1NKUSg3PCNAMiVBXDQlUT0pLytPO1Q9IyhQWUg7JEEsNiQxPDMKK00kISg7JjE0PSsyTEsqQkxOMDJMPylDVTE3QUREMSMtKS5aOEQoJE48LC07Oi0tIy9FTF5BMyxGRlNLSlwKK01MUlRQMUlONi5aNE9LI1o6Lkc4SDIzSSgxRFEwTVsqUUo6JlhLIzw5MEEsOygzWFdGQTg1JDEsLCRBRDgKK00mISg6KFMoISxAJTUgL09fTVE0Nz0zVDYmIjg7JlE1Ki0sL0pYLis5VFlcPyUxLDgkUUQ1JCEgOSVRNDkKK00oIixIJzI0TCkiNEMpI10xNzFALiYwOEgnS0xAKTROQS5ON1AtTUM+Rk1aRTJNIkxVLCMkTzMoUjIpTjgKK00vOkRTS1QiPC43NEcxMzkkMEQ5NFJMSylQW1M1T1QsPjFRPD8pNChfSFFMNyUhPC0lIVQ8JlE0PylDMCEKK00tICUwIC9PUkxSMDclUVw/JUJAVychVSQtKzc6VV0nK1FJJD8nMVRDKCIsRSpSVE4sQyhaLFMoTSwyRE4KK009NExEKjQxLzNSTSA7V1IvOzo8VSgyWjUqLVc6KixXLDtcOkszPSZOT0s+WFIiSlo8SjxSPkQ1OD9DOjkKK00qKihENVNMXi8lLjJJSV5JSjoyRypTUEAqNC0lMzRVJjFBPDglIUA+J0JISytTMFwrIUwhKFAmJyAvT1YKK01NIVg0JjFcPSRSRFgmQUkmLitHPFZdNzBTOTxAJiFMQicyIEIqMkxMLCMgWCxDJE8qQyBHL1MkQiokPTUKK001MkBEMFMpJy9KPE8pQyY7Ky1TOSo8Vyw8XDpLMk0uT09bQlxPUkJcPSpQWEA0UT5BRCZAK1pESzgkMScKK00xNV4+S1pKUkxLIlMrU0g9KkRFKzRVLSgxQTQ1JEBYMCUxLDElMUw6JiFQISkgJiMgL09fUDFcMicyMEEKK00lMzEjJ1FJJCwsL1FZXic9VjlYQyVBPD8nMiBCKTI0RipCUFIpMjhKJ1I0RSkiREQpVD00NEI4LyYgOEYKK00oW0BQKlMuQC0uT08rLTs7Pl0+UDJNTlpSTDcmUjJTID5LJF1CRFlFQyQyQStKSEw3RCEjMDVCRVI8NyoKK01STD8qLlNYPys0QSo0RSksMlFENSVRODYlUTg1JVFIQSdBVCEpMCYoIC9PUk1COEEvQiw2JldaLSZCJF8KK00tOzc8Vy0rJ1NKNF8uU0RYLiNEWi4zSSAvQ1BdLSJYRC0iRFo9JFBBKTI5Jy1DQFA5WCFfOVosVyoiIjYKK00qPVc5KkxPL0pLTk8yTFJIUCwqXVIyTl9QS0xVRDI6QixYKjc1KiRVNUQhNzMkIk5MSFo/UFwiXyUhTToKK00nU1RQL1NMWzdGJS4mIUwwKkJUTSwzPSsuNDAhMFAnKCAvT1JPIVw7MDIwNCYnXiwlUUxfLVtLQVddNyoKK01UOk0hLkNIWS4zSFsuI0RfLzNMXCxSVE4pMkhYLzMsQClCRS0vQzxBLlNRIC85TFgpMjo9K01TOClMPy4KK01LW15RMl0qTFAsPyBRMkMhUTtUXUYjKkwvOFY+Nlo8WzdUUUM2JFJXTjk6RlIsJl0lIVE9KSNcTy9DSF0KK004JiErJCBcNCVRJDMlIShVLEQ4ITEwJyggL09fUzIgNjBSNDYmSFI6KDIgWi07X1BbPi86WDsoXytSWE0KK00rMlhPKzJYVCxCWE8pQiA9KDFMUCkyQD8qMkUqLkM4NydRID4qSV0jKVJOPyxeT08qXF9ETyxGVzNNTlQKK01SPTswUzJDKVRcJFlIMk5UMFhaQDc6USI3VEVANTRHI1UqUl9YPUszJlFdPylDTEwuUzxZN0VdKyUhMC8KK00mMTg3JTEsWSxUMCEwUCcxIC9PV04yREsyIUg5JkFYQicxRSwvOzc4VVs/MVJaLSAvUyhVLSMsUiwiXE8KK00rQyhXLUMsTTYyPEQ/RFxGKkI5LDVVOEc0N1IiN1ssSChRRjMqLVc8LkxDLElbLlgzTE5QTFtXJVJCQyIKK01SNSRRTTFNUiwrITJGKEVILlRFIS8lOk9TLCJfVCwsPyVBOEEqQShTMDFAQTRXKikmI006MDMoTS5EOSAKK00qUkghKkAnKyAvT1NPIVA/MjFMNyVRODolUTksL1tLPVc7VzdUOkkgLlMgVS0zMFMrUlhOKzMkVi0zKFYKK00xMVhBMiMwQyoiVTc4RUA2KUNJJC46VEYnMV48K14rOy1cMyxLKz5aM10mVExcLyhRQjckUyUsWE8yPV0KK00vK1E4R0hdTTElNS0yJiZYVFw/KlVcLDYkITBCKzEsUS9ROEE0VyIlJzEwPyZBRDAlQjRQKTI8ISowJyoKK00gL09fU0FcPDMhUDkmMVBAJyFBJy87X0xcLSNIWCpMWStSQEwqMkBHKSIsQyhCOEsqQjxMLTEgPysySEMKK00rIl04OFVQLSMhJD4pWyhLJ0IyPCw+W1EuPEs/TjwnIDRNSlxOTFM2U0I3LFZFTFlQMiogLjs9PUk5QVkKK00xJSkqMTYnJlteI0VcLShAJTFARStROFUwUUhGNic2KyRBQEwnIUAzJjI8UilCPCEqICc4IC9PUEwkNFAKK00kUTg1JUleSiYhREotOk8oVDg5RTZUTFcvU0hTLTMkTSxCWE4rUiBFKVJISDZSXD88NEw/KEFEUDAkPE4KK000Ni1KMSVASylRUEQoXUM8MUZLKUs6RlwzPDJPSSteQVAjIk1TMj42MlVeTCtZOFhMU0JDMlMpLTI0Kl4KK01TXEJaRFNcNiYhQDUrISg7KTE4OCokTjkvXFJfViNQXzBWWFwqMkghK1AnKCAvT09NI1BIJUE8MyRZVkcKK00lIThKLVsjLVQ4OUU3JFxWLkM4Uy1DKE4sMlRNK0FYQykyQFEwITw9LlJUOSdBTFcyJDw5KzM9ICo1MEUKK00oIUhCKU1TPDBWOylMSlZeM0xKU0k8NkVPIlZPVCJCPDUmSlYuWihfTkNeSTUjWTk1NFcnVTxeX0VTXDAKK00kQTAzKzEsOShRMDkqJEY1IloqU0hRJD4pRixbKUIsISsgJyogL09eUUNYRCYhQDUlOipPJjE4RS07NzwKK01YKF1KNzRESytCWEoqQjhCKUIoQihRODsnMiBPKSBQQSgiMDooUVxZMkRQNSchVEknVUhIJ1FYRCouO08KK00wVk84T1s/JDQ9Ll1KLEpRUSJWV1dDLkE1JksgLUlVIU5UJk41I002NERbN10uSzZKNEAzJTFENywhOD0KK00pUUA8KzRaOyNaPlZLQTBAKjYoWilCMCErICcyIC9PTTohPDs1RDA6JlEwLCVBPDgqWjsrSlM4VC4zLF0KK00uUzxSLSJcTy0jMEopIjBILCJYQzcyWDg8JShIJ1IsOyhCREMpIlA/KiI8SywjLE0uLFMzRClDJUxaIlwKK002O1ooMjwgSFIiPkxRXCFXJltYVUhaLEhJMy4pLSNBRDZILl9PWFg4KCBcLCchXD0nMlRULFMsSCUxQS8KK00uWzk8TkNcXztDKFUpMzAhOkAnICAvT1I8QTA2NzQ8OCVRNDElQTA4Kzo7MEpTMFIuIzhcLUMsUi0zIFAKK00sQyhIKFIoRitCUEwuUSw1LVMsRSYxXDwoUjg8JlIsQCcyLEUqIlBJLTxTNkNZMyVOKjJeNjwqKjIsNEoKK01RIjJQUkwlXSksOFxLKlBPSyNOMi9UNVE5WE8lUEkkOCcwVC8qUzRULFMgUyxDKEkkUTksJilRQUhBTEIKK002U0BdJ1JAITkgJyIgL09fQSE4NDdERDwnIig9JlEwMyo6Tz9MQyBKKlJITypCTEkqMjBEKkJIQCYhSEAKK00qIjhMJyA8PScyPEcnQjA/KSJAQycyLEMnIkBGKyMsTi1dN0hDSUc0UVpbJjdMUjAxXDxSUyIyWFYsWiQKK00oTEkoSypQUEpTPjAvVDFROUknOFdKREcqMSgxKlMoUStSWFIsMyRKJTFBLiU6JUZJUVBDNlMsWSgiTCEKK005MCcoIC4zVDFCREUmUUg+KCIkPychSEEmMTRLUkUpIS9TVFktIyRJKTIsQylCJD8oUjhKKzJUSTkyRDgKK00zRDRAKFI4RilSVFMtQ0UhLjRZWkpbWjQyTVc2PS03KE43OlkoXCExLltdP04iRkxSVTxOTzVcVE0jIj0KK003Ql1HNiZFOzgyMDskQTg1JlE4LCBSJjQrITREKSIkOCRROEQsJi85OlYwRTFBWE9JSEQhLEAmWiAvT0oKK00xQiQ9JyE8OCVRQDclQTw+JkFASFNFKF0vM1BXLEJcRyhSJEEpIVg9KDI0SSsiUFUyMUQ5KyMwQiZCJEUKK00pQlRVLTMsWC1FLV5KK1I7MS1XOz0tKyhOV0pYKDwlLi1LVT1MMj5SU0VEVVE2OFpOQz5COUNJVDlXTU8KK008IkQ7I0EgNCUxKDIsMzxULSE4QihBXDUkISxBIkJaQy4kUDkwMiBRRzdEISpQJl8gL09UNVI0OycxRDsKK00mUVA7JjFEQCZRSFJWRERVLTMkTypCPD8mUUQ5KCFQNyYxSD4oMiROLVEkOihCTEAnQVxCKFJAUCxDMFwKK00vRUImTSwmRjFeM1I+PUs5VCgrJClMKTAtK10/TyJOW1dGJFZSNjxfUFNGTjsjSVQ6OCFXPSJYQCRRJDMKK00mIUA3LVNMVC1BPEQpIiQ3JEEsPyFDPlQxNSQ8L0FMTUc3TCEqQCckIC9PTylCMEUpUyBAKjMgVi4kQS4KK00zJSVVUyxAXipSVFQrUlRKKEJMNyohMEMoUjRJKyJcTj5TLE0wNEhSL0NVSkcrVylUPF8yVUxSXyhTIjAKK001PU8xPTxTJ1FBXlw0N1I0Rlw1UU4iQktTOjpZNyMmQTIiVlUpSy1LOkZFRixTNDEoQVRCKiI0QSwhND4KK00xQSwzJiEsNyVBMD0vQzlTQyVVJUUzUSlGQlAhLCAmKCAuJ0YrQkxLKzM4Sy4jVSIyJU08OVZZXFNcOFkKK00qMkxSKzJMSCgiRDUpMSRBKDIsRypCVF07UixGKjMsQS4jXUxHS1sqVV0/M1YtOykpIk43NF1PND08RycKK01RQiJaM0gmNkY8PVdOIjpRVCpDIDkjPkgzQzJbK0tZVz43RVYuQ0Q1KSFQQCBSOjctMUhAMVEgMCUxIDQKK00kUSQ6MEI9PkQ2LSVFI1ErRDFQISowJi8gL09QMEM8VC8kNFgxJFk1NjZNVkBYLiVYPEhXKFIsTClSNEIKK00mQiwvKFBcOyYxTD8oQjRJOiI8PSgiNDYvNC1QSUxPNVlOV05bPkc5KVJCQDYuM0w+TSc4VjIuXzNILjoKK01GXE1WUDJKWlgrIyE6I1JKNFM7ICxMJVo+V11cLyMwLyghTEIqIjxILVFURDJBKDIlUSg2JTEkOC8yLTwKK01HNlEqRDMtJkQxWCEqICYwIC5PQjpGJTw1NV05NVVFOzUlLTc1RVpbUlJYOiYhUDgrMTRMJ0JMOSpBOEMKK00pIjxJKlMkWio0PUw5ODM2UjxPMVVNOzlVLF8/R0xMWC1SRi45XVM1Piw3KFFHXyM8S1lRQitBRkxRXk0KK01SVzUnK0sxVCo6QSU7Rl1GOlY5PCdUSScmMUxNLjRUWCgyKDYmQVA8JzAwOUMhVTkyJUZRKilKQSlSSjIKK00tMCRPIDM4IFsuXjJDWEYjQlhGK0JYWipCWEYgPjxLMSsxNDYmQTRKJEJEOyohOEckUiRCKTI8SStTTEIKK00rRERZN1xDLVQtMzlWPTs2VS1OL1FTUFEoSUFLVj1BWFBMQypBPD1VUUc+Kk9WXlcoKycuPVRYVk5HTFAKK01LRFFWPjcpWj0mOD0zJEw7JlJEXDRTPEMnMFg4JjE4NyRQLDZDIUkkL0VaRyhZTkApQlIpKTAkSCAzQCAKK01eX15cTjpWTk1bMlRNW1JXTVtWSUQ9Q0QrISwyJUEsSCQiPDkpQTBFJDFMOidSJEMqMlBAKCNISTRcWz8KK01aPyNVXT8rVFpeLi1TVFhSJVlZVVk/IV1STUc+QkxdV1JHWi5SJl5fKFtPPj9UXFpQN1RRTFRVWEA3PV4KK00+VlA/NCUsQSgiWFw0IzA/JlEoPCZRRDolQUA4JUFBMDE2IlkrSVo/KFJCKSlQJEcgMzAgXl4tTTlWNToKK002VT04NVVRNjRUTDg4PDctKVFIRChBVEwmQlQ/K0FITyYyNEQqIyRaLTROTTZIXz9WTE86Vi07OFZdQzcKK01BOT1cVFQ9NStYXU9XLSkuL1xHLEErPEFLV1lMTSUlUiZaMys+KVZJKiJaVUZBVi03Jik6OiFAQiUjOE0KK00zVj0/MTJYSSxBWDtFOU4+SjpKUk07Xl02RiJPLClIUC0nPjQsQCRFIDM0IF5fIj1GSVI0RSkiL0RYXiwKK01EJ1RPOFw3MSlRND8oIUhJJiJMPSpRPEolIiBCKiMkWCwkLkIvNjssVj03OVZNRzxYLic4OTUlLFBUMSwKK00qKUVVVj0tLy88RzFDXCRITjg1Uk9FWVooKksuPjouUSwjNlxHUjI1OTZZRj0hVD8lU1RTNFY1QjJSWEkKK00rMTw5RElCO0lKSlJNO18uOCVGUys5KEwsRzYpKEAkPiAzLCBeX18sUkxPI1FMKyFQLCMhT0pFJjg8Uz0KK00nQSA9JyFARyUiPDkqMTRIJEFUPihSUFIqU1ZBKiVXOVwvN1BcLydOW15XQzczWE1PNSEuJzldXlk+UTIKK00wTUNGRkxMSk9YWVdRRVogKEsnQEEqQlUsQzpdSSIuOTw3NUs+MiA9JjNYUDM2PUIxQkRCKkFAO0ZKIkMKK01LSy5bTywzJDZVQksqWThRLUc+KSkgJD0gMlQgQV5ZQTw0LT01RUwjNV8lMjEwVTM1XCMvLFNBJSpSTFUKK00rIlg+LEFEUCYzREIoIlRSLUM7LlVdMzFVPTs5Vj0vJldZNSBDSCYqUzU8Qz5IVV1VTFg/RjwnJzUsJEYKK00vNzRVNFM8LCFaIyJOJDxbMyo0XSlKMUpAJ1kvKkQhRjdUVEowUkRSKkFcQCciMFJCOF4xQjg6Ij83VVcKK00qJkpbLUkkNyQoLiEuQCRSIDU4IF5fMjtHSDYzRCk2MUQ4UjE7IU0zOCw/LiwzKSAqMkBTKkJQPCwhOEsKK00kUyw/J0JMTiwjMylTXT85Vk1HOlctPylYWURTNSMtM1BFIDg+KT4iVFxEPUVcIyc2PERHMEdMXDZDUDEKK00iSisjTyRZJDUqSSMrOyFYQlhFOSszTUM5NTBRMkJQVCpBVD0mMiRPQzkyNkNIUihAWC1dKUYmUitITDQKK00jR11VKjAkSSA1JCBeX180UytbIk9cMyBPW18hREJVPDgtKz0qUlReKTI4TShCMDYrITBJJSMwQSYiLEYKK00qU0M0WC5HTVw/J1NeLy9BXiosVikxWEtQNTxHPSleJ1c9WDlGPFs4OUxcSDE4KF42VCQzIypLLlElISAKK002SzkqKys+IkU5MUErU0FBOEUsUjMiWFIoUUQ7JVFcTUVaJkNGWTYxQyhSJCpGJlYsSFg2JCg1WipAJEkKK00gNFAgXl5NMjk1MT04RiU+NUZEQCUyIEgzK1M2LTIgQioyIEsuQlw9K1FIVjBTIEcrUyRZUi0rNFZNSzQKK01VXUM3VDpcPCw2XElEOEIoUyVdRylZIiZVTFUhUDxOXi1BWEEpQig8JlIsOyYmSiZGNlpDTiIgRUtHUV0KK01ANU02MlRJJCtDLF8uUiRTLDMsQyoyRFk5Vy1OOjY5QDclQTM1NzZXPzhOJ0o4QiYtMCUhIDckIF5fJiwKK01ESTozRjlCNUVZRSUmQVA/M1wvNixRRDwpUVRJLiJcPStBRFwyMyBDKFI4U1ItOzpXXV88Vy1PN1UrJDkKK00qNkA0NVNNLE81QTcoSUorVFxFIVBMTl0tUVQ7KEIgOiZBVDglNj4jRjciSE8iQFJPOF4uQiVRMTAzXF4KK00sMz0jL0IoUytSWEEpUjxYOSchSzlGMT42RTkyM0Y6ST0oNiRJWDFaKSAkWCA2WCBeX18lUCxfIlI8QyUKK01STEFAKUIoQTNcX0crUTw9KFFMQywiQDgqUUBbMUJEOSciLFZUPkNNXU9DUlxfP1ZbLDhFK1Y4MCgyMEMKK01PNV1IJ1oqMFc9RFpRPVspLkFQPilSMDwmMiA4JVcmK0dHMktTQlhPUVleO0Q1VS4uMzRZKjJcXi8iLE4KK00pUkQ9KDFcSzhHKU06JiE4NSUhMTNWOk8+KEImSjhJXykwJFggNlAgXl5ZRDxVTUo5JjlHN0NcQydUQUgKK00uPCM1LzIsPCxTTE8sUyg2LTQsUCVSIE81LEc4Vi03MlRdSzJUXSYxPSMwVz9HKE9BOEYqUkc8QSYoQV0KK01SPE47UFwnJS1BWDspQiRGK1MlNiVYPyBPOTBdLzRZXEE2JT0zRTU7NjVRIyxCRFwmUkhaMFNAXi4iLE4KK01VPSs4VT1LN1YtP0NTR15ZP0guVEs4IistUCROIDZQIF5fMj5IKVY9RjlOPENTXDAoNSFEMCw/My5BUDYKK00sM0BNLDMoOC1UME8lIVRMM0wzOFc9Uz1XLVc3Vi02NDwyWE89JlxAMyNRLE9XPDMkWSoiUUxGPVE8MyoKK00sUTw4KFFYQysySTElSEcgTzlBIzElPiRCVi06MSQxJzBERFwsIjxaJiI8WC9TKFotUiRMVE0rOFU9RzUKK01VTTdDUjcuTT1HVlFKV1FfKUAkRSA2SCBeX183U007LVJMUy1NRiA9J1U5Si9dL0cuIVQ5KzM4RyoyVDQKK00tNDROJSFMSjRcX0tdLz9XXU9HUFteSkY+MyxNO0ZUPiYiJERPR1BDJClKJ1QtXjtSPTM5LlE0OCkxWEEKK00qMkEuJTknM1QqMSwwVS4qRyZFOi8jPFcsM0hTKkIkViVCPFIsUkxOKyFESFZNT0FXTkNHWi4/VFUnQlAKK00+SCJTSzgqJClQJEUgNlAgXl5FTjs2OUk6JU1JLVQkNCc4IVwwLDM8LiI0PSxBSEcoUyUjK1E0TidWUzIKK01XLVM4Vy1DNVVNRzQ1Qig/KkFYOipRSEhASSIoUihUQCdXXV9QTDZVUCteXzJSWEcoUUxELUFUOyVSUlwKK01NMylXQiFUMickWTU4Ni0/N0VFJiZRVF0nIVhbKzMkVCwzNElTXTs1Vz1bQVZdVztORkpQRTgmW0omTiMKK00tMCRQIDJEIF5fKkhGOjo7RkkiMidSKDQmWEYhMlxHOy1RXDcsITRFKFM1KSxBQEclVjcuV01fPFgtUz4KK01XXUM3NkJARyoiMEEsIig9MyQ5LVBJMDkmSEYkUEwyVVBMMyQzIlBHKEFIRC1BQDkmMyshTjNOJEMyIDQKK00nJCElMlQ9IzFEKFwmIThXJUFEVyoySFEsIyhFVF1POlhOK0VYLitCTjYqS0M3TlVJNj1XKSAkSSAyPCAKK01eX18/US1XJ1NMLl8wIyQtJzlGLTNNO1EtIiA6KyEsQScjISQsQUhIJlZbPV0vR1hfX0NYXV8nUTtDJE0KK00rIlRKLTJAPCcyQEZPOThEJiheJ1JdVlxSLSc5NjJAQidRPD8rUSwzJTM/LlAzRVtDUlg8IzJcVS1TKE4KK00sMyRUJUEwWiYxPE8nMiRDKFMgS1lfK09dXz9aXT8/XVNWQklEN1pYSVZVWihQJEggMkQgXl5NTD8mJUAKK003RiwgLkQ4UC40NE4sPCc1LjJURyxBQFEvMyhIKyFZRExNLzRWLUc4Vk0vOFRUWEQyIlE7MjIwRjRDMSYKK01HKUYjVTlMOCZHRiJOXDZUOFwmWDkyTE0vQlEwMDRQXyhBXy1PUUA8LlJAQjM1QS04RiEmJ1VBJCYzUE8KK005I1klKlNMVi5SWE1UXTc5Vz4rPlc9U0BVN0JURkcqUUo3XUQtICRYIDhUIF5fNkVJSjJBRTkwLSYiSEkKK00vJEhULTwzOS5SQEQsQUhTL0MoRioxQUZNXTs3Vz1bPlddTzxUVEg7LVIpQisiMEkvMjxNOiVBK1FJWDUKK00lWDYlT1xCTzgsNl05UkBHLjJJLi9UUF4oMVcqTyE4Oi1CMD4vU10jNCQwUyVUPFkmQyBMODMxISsjNFEKK00tUlBLVi1LPVdeJ0BYPidHVTcmT0UmUktIV1U8KUAkUSA4UCBeX185Uz1LKlE7VD8oIyBKLyRcWS89M00KK00tQixEKzE4US9SVEIpUVVMUS5bUV1PL1FeLltZWEUoPSshUUsoIkRHLFI8OC8zLE1RKVg9JjgqJ1I9OlwKK006TScsOzI4Qi1COSouVDxbKCFfNlFBSD4sMkg2K0MkWS8zIEYkM0hOJzJMTDgyUFcoIlBEKlI4TVleX1IKK01dP0NWXU9DX1lHKk1GNyZQSigpOidQJFAgOEwgXl5NUTxVWUs6UTg3JTFETitSPDUpS0s4L0I8RStUKE4KK00mIjxAPytbL1UtPzRVPTc4VixPKzUlNTo7IlokNTYwRDZERS1DOUYmUzpUWyYnQVtOLCZRPztWXjBBPEEKK00qMUQ6J0E0QCwzPFcwJCBCK1I8VzVFJE8tVjI7SShJKEs0RSNTU1EhKSNEUjAyIDdSXUM4Vl1XPlZNQzcKK01EOFZQR1Y2S0k3ID0tQCRXIDlcIF5fIktIWi5HQTFMMyIxLFMtIkQ3KltXOy9CJD8tVExUJjI0QD9cLzgKK01XPV89V01bQlhMXyUxJCUlMDIiMyw1VD4sUyBMNUVFLU9LIFglKDFeTyw6Tj47Vl0wITQ6KVE8OCchMD8KK00rUzRRLjNEOytSJEovQ1hKKiReNUo3WFpLM10iUzMwXSkjLE0vMVg2VC1XO1ctTz1WPUs5Q0g6S0ZWJkcKK01INlgyKUAkTiA5VCBeX1dBU01XOksyQDgkIUBWLjMkOywsT00uMVBALDQ8UyciREdDPUNOXV9PU14vM1IKK01dPic4LyJUWylRPj8oJUw3JlIsMilSUFFPSlkgJjgmIFFNNlpAPDspMSBcOChRLDQmISQ+LDNEVi4jPDwKK00pQig9KzMkRSdENjZLRzxQTENFIVQzIFUmUlBALDFANVdfK1VePz9WXC5fT0ZIMkhIJjpMSUcsMSggJE4KK00gOiQgXl5NTTxFVVosUzUiLFFUOiYxSDwoW1c3LkNFOi0xREIqSDYtTSxPJlNcRy1UXEI9SFM7ODY1USkKK01AQildOERQXzUjMS47OFVaUjg4QiVWWVFJW1pQN1ReTkNSTEQnUyxYKzI8Pic5OF00M0g7KEIwWzQkLkIKK01MNjleV0o9LU1ULFxRRCUkKDNMQCoiVERTXS81WD1TNlVcQzkyWFJASTRCQkgnPFQuQCRXIDpAIF5fIkcKK01IKT4wKEE8RCgxPDomMSw4KTwrPC8zPTouIVBFKkhSNk89Ly9WLSc2VUxGQElDSy4xVFheNUFeOi5UNF8KK00sMiBSLiRRIE44SEAkV0lUSlw+UTZUVkpCQjg/JzMkVipSODwmWTBXMlMwMykhWE4wI05CSEU9W1gpRF8KK01OI1ReUiNEXygzNDooUkhBVF1DOVkuMz1XLFM3MFg2O0hUOkBHRyxHKiAkTCA6NCBeX1M9Ukw6Ti4xWEsKK00qIVA/KCFIPSo8W1MvU0VBLUFQRytZQkZUXl9FXC5XTFxOKlJOJDs2LSMwWy4hXlEpNCxaJyE4QCVSPEwKK01OWChEJic9Vk09Pl44JSpQQiIkPCYyVFIpUjQ+J1lEWDFCXDcoIiRBLCNGSUgkVVtZSShWUFNAWVMjPFoKK00mQyAzJ0JQSVleV0tcT0tWXD1bSTI3UjhJNEpESEdERyhQJEwgOlQgXl5FSjszQDYmUVhFMEFENyYxNDUKK00pWz8tRlYsNSkhSDAlUFQ/J1IwPigyJDkmQVxAPVQvMz5SSERBQk0yN0dRLjFWUSYzJ01UUVVcWSU2VS0KK002W1JOMkgyJzQzOFUqUlhGJVFMPyc4MFYuMyQ3I1FcUCxbTzpDRTleV0RVK01UUFtUI0haLDMwUyhLQVsKK01SNzRPL10xWEMmWzQxVlUoRlE+OEk2XFEuQCRYIDpIIF5fKkNFVVA7I0EkMStAVDQkUFQvKitPNkhGNDkKK00oITAuJVBUPSYhUD8pIiw8JjFUQj40NzE6Ujg5M0FdQi0nLTUsJihQJ1NQWk02LFgkRzkwN1wqTzIoNiMKK00zIyRQKjJMQyVBVD0mWDBTLSJcMyRBTEYrKz87PzRRWFZDVF1OVDhfVEMsVStSVEonOzFYU0dUVTEuJicKK01GRz8wMCY5I0YxNjZIVkxCKiAkTyA6OCBeX185UCdUPSQxMDktISA2JiEwMipcN1BKVkxDKTFEMychKEIKK00nUixKLSNATilSKD09NC82NkFINilBSVInNy02KEVQSSJSKEhOJVRXJScxMjldJloySEIoMkJQTSkyREEKK00kUUw/J1hMUywyTDglIiA8KCtXSD8jUVFXUzxWUVQkWVYjKFIqUkxKJltSJFhZJF4xTyo/SygvPzA1VSAKK01GUUY6SVcgQikwJE8gOlggXl05UyEhNDglITg1JSE8NiVBMDkmKlstNiFQXDExPDQmJFxTKSM8NSVBQDkKK00nIU0hNCQvLjYiJEZDMkhYMUJYPSwzIFkuNjFXUUhcVCZGXE8vW0JIKjM2T0EnXE8oMiRELzEwNCpHUFAKK00mUTBMOTMoRTEjOEs1NEovVlRFL0xUIF9RU0BeMVM0UiooMlVSJjUnKTxNTUIlUyYyJCkoRiIiM0U2TFAKK00sQCRXIDpYIF5eWjsnQTQ0JCEoMSQxMDMkUSgzJSsrNTcxUSAxMTQyJURMTygjLDEkQTA1JjFFJDVDPzsKK00wUiw2NkFNICoxUDonMjRAJyM8XUw4VE8mNyhVMUtORSpTTlNBJ1hNJ1FMQjBRSDEpV1hNJUEsTjlDJEAKK00vQyxMMFQmMFYzMSBNU0khUjMkVy9CSEUoSCpOVFclMistIVlGJjMiMDNJIkVBWjFEVkBFKFAkVCA6QCAKK01eX18nL0FQOSUxPDYkUTg1JTEwNCY7W0g6QjUqMkFENiZFJFUpQ0Q2JVFEOiZRNFo0MytMLTI8MC0hTTMKK00nMUQ6JTFMPSQiLEBLOShNJUcgVDIsTk8qNCJbQjdUSSZRWEcyIUQxKjg4TyRRIEo5UyA9LjM0TTAjJiIKK01XMyBWT1M0XFMyXFYvQjxFJjg+VVdIOTMrPV4uSjZDMi9TOSNGIio1RVZIRSgwJFQgOlQgXl4gLihCID0KK00nMUA4JVIkUC4kISc1WzMzPjNIOSNRJDY2RkU7MUVFNCUhVDFBOi5TSypORD8hXENCUi0oLDJMNSpTSEwKK00qM1VZT1g4SyVGMD8rR146JVIpXEExUDolQTw0J1VFNy03WS8/WDRYKCY5SUtLRU4wVDIlVkUpKkxDWSEKK01SM00qMCNMUyw7LlBRRiBbMz09Tj9FTygwNDEjRCFZPCxGWFEsQCRWIDsgIEFOVD8nIUg+JjAsNFxBWE0KK00tM00gNDtHOz8jODcjUFw0NiY1NzBFNTAkIUQtQVo2WEwqMlE4QiA5NlFNMyYhUDInMyw3JTFNIUo4KEEKK00kVjRCLSg2PCUyPiBBMUg3JSEwNSlFVTMsSCExQEhAXCZWLUlLK0lXL0QuKFYjVFtNQ0EjUlMxIy1TIEgKK00rOy5LVFZZKTYtUVpDVi8kLkNQXUNBUTosJkxGKFAkUyA6SCBeX1xMJ1FUQSdBRDklQiBPLVNEXzVMO04KK01CRDRJJUEsODcmTT0yJU01JTFYMkM6Vl1OKjciNEIsMzFBRT4kUUgyJUJINSNBIENIWEhJJTY4QixYWkIKK00lUkooQyFcOSVBMDgsNjU4LShBNUAoOFcmJi1OTCtVVy5TQVxXI0RRT0MsXlNTKSItUlRFKFtSVlgoQTIKK004TyYvRyZHNC4jQF5EIiE+LSZURigwJFMgOlwgXl5AOCZRPDQlISg3LkQhKzFERS0yK0cvPUFQOSUxOE0KK00yRUUqJEIkUC9RRDNKKkYkOiY6ODkhSDw0IVUpKlJAOigjKEUnQyVLSilNIiZEIDomRCI5JiJIXStBJDkKK00mQklGMjo2XiklVjNXJyUxLzU1MTQlOSIyMVVeVlU1I0xUXFtSMyklMjNEVCk7NlZTRTBbMFxdQDw1QyYKK00yRDkqP0IkPSgmSEMpQCUvIDskIF5dPDokQFgyJCBYMy1TVSgwVCklMEtfNz0xQDckUTBLMiU1JiNBVEwKK00uUTQvS1smKTsmLkYxQUQ3KUFBOCYhVDgmIlA2JUFQWkVZTF4lQ1A4JzRCPiVCTSArUFw1JlJRSTRKSloKK00oJV43V0ctLy4lSTYzNSktMkFRXlY0IFRNVERdUlJMXjAiWEwpKzpSVSVVJjQ9MUxARiMiMFNZJD8hXDsKK00nRjw4JVAlLCA6VCBeX0A4JUFANCUxLDguM10qMTQhIzFdI01BIiA8JVFATzMlTSwlIixRMCFINE5MNkAKK01AJk5YLFFAMihRNTwmQVQ6JUIsNiUhQEJFKjEjJyQkOiZUSkEmQlEgLEEsOidCQUk4Sz8iKTY+P1hHJSsKK00tRV1CM1VBLTJRRVVXM1BKT1QwWFNSRF0wIkxGJjwnIlhXNTA2Xk1fQlY7NDAzSSU/Qiw/KEZEOCUwJSwKK00gOyggXl88NSUxQDUlITw4IzMxJzRVKUQzOl8uP0FMOSUxODglIFwsJ0FEMydRLD0sWjpJS0tOLj41OD8KK00yQiUnKUI4OiczKEIlIj0hNDssRicxNDklQV0uKDIkRTBCJTM6OEA9O0sjKyg1KltXODBRKDYlTDAxQS4KK00sI01TVTUlKU1ETFxQUlUjM0M4XihbNlZSI1RWL00lNDc1LyczNDRZPCIsPCdHOiwvQCRYIDpcIF5dQDEKK00kMFwyJCEsMiIzISQzND05MVs3Mj9RRDgkUTA2JEBMKCZBNC8mUFw5L0syUk1LXjs2VSA/KUFZNiYhVDcKK00lIlA2IzFIOjFLREgmMSQ2JTI5MydSLEkxIi0xOyhEPz4rMycnNTJdVkdYSiZWNVMvISk2LDNBUVVDXFsKK01ORDReUFJNIDFSTFYoS0ZUU0QsXjItMUE8RU8jMiNUUzsyJDonJy1fKzAkUyA6TCBeX0Q2KDFUNCUxQDcKK00jQzUmNCQ5NjMsO0dDIUw1JTFAOiVBJC4oIUw0KCEwPi9bVyBPLD5KMiUsOipRUTgnQVw5JSI0MyMhSCwKK00xTCBGJ0E4NiRCNTYoUiREL1FdMztISD1CXEM2KFVLI1hIJEgoJyVeLkE9OC0jSU1WM0hRUEQgWVIiPF4KK00xQkBSJVwvJlVVKSI0LlFQPUYnNTEzRFY7UjQ+KCc2ICsgJFEgOyAgQE5EQiBRP1YlQSg2JiJRKS9VMTYKK00vSk0+L1YxOSVEMkImIi0nQEZVRTk3WDwpKTVYNjVKKDkyPDwtIkE7JkJIQSozOFwoMiBOKjgsPSdCQFEKK00nQVBLLEQgTCpHPjdBTUg9M1wvOiszUlVWWDxeKSZBQDQmKFw3MiYsVlRdNEs0USFIMz0iM0QwVSsrQlkKK01SI1RTMC0tKDRUNyYzKEVXNkUwOSdGWV0wQCRWIDZUIF5dTDgkISg1JSEgNCZCWSUtVEEpLTpRPTBWSTsKK00kRCI+JSFdIz9GRUE4N0g4KkleIThWIi00UUQ5KDIlQSRBXDYnQkhQJSEsOSg4MDgmIjROJlFUTCxUJE0KK00rN1Y+Qi00PDcsQzUqM1JXVigwWiZWMUU1Rj0hN1IqKVc0ISZMRDkgR0NJJjIjREoqS0ZVUzQwWzFdLTIKK005JEsgMVgxUTRFIDomJklNKjAkTiA2UCBeXlRCI1EgOiYxNDkoIykqLlRNKS47RUsyVl0/JVQ2QyYyNSkKK01BJl1HOVggPitaRi86VyYyMCIkOShSIUYlQVw2J0I8TSUhMDcnWDw2JjI8UCcxWE0tJChOKldCQENOIDsKK007PVdNLDQmVVhIOFInNklINDZFJDhSNilYU1BcTVQkXUgjISAyMzhJKEwzJFY0VSE0TjE8OVU/NTEoJVYKK002JTQ9JzZdUSogJEwgNkQgXl4kRydCUFEuVDUqLlNFIS8jIF4vUk8nRjZBPyZBXDE7UUxfJjU8NChWPDsKK00mJVIjRFdCODdCLD4sMihALSNAViwiUFInUVBIKiYgSCdSWF4uQ0Q7LyQgRCdUIT9QXiBKKlwjQChSXlQKK01WKUk5J1JFRTFVUEU4JTowVjUpNEwkUSRTJCUmNCNcUitLPlNRQ1RWMU0tJDM0Nyo2O1lKSUI1RkhHIiMKK00xQCRYIDVcIF5dQEMoIyRTLzRJMDAzWSQuQkRTLUJPKEdXIUQmIUwtOlE8WyU1LDAnViw3J0YuKUZHTjwKK000ISw7J0FEQypSVEspMiRHJSEgNyc1VEIoQy0jL1NQPi9ULEIoNDFEUi1MRy08OzsnUl5VVTk9NSYiQUwKK00zVixLOSVGLlZULSZNNDkjUjQlJjIzMEorK0JPUUNcWTItISc0VDsiNStFREdCJUdHJlFTKzAkUCA2ICAKK01eXihIJ0MsVzA0XTUxRCUmLyJIUi4jKzVKJzlJJzIgMjwhVSEmVUQ2KTZEPSc2NjBGWFZGL1E0OSghREUKK00rMlRLKTIgRiUhLDgnJUxDKSM5JjBDWD4vVCxEJ1NdR1M+SEcvPT9TKVMyWFg5PSslQj1NMlYoSjdVJioKK01YM1xcTkQlIFJTQSEyQyRIKSwuXlNULFszTUEnNCRHMzQ7OUlJIjlKSDclVysgJE4gNiQgXl1EVi0jRScKK00rIiBBKlMoWS4zOFYwMk08MiYxWSZRPDwnIUU6JyFAPCkyMEAjSSBEJiFJITNCMDYpUzxWK1JATClRWDkKK00mQUBAKTMsXS5DOFYuIyQ/JlFUPSZBUiVRLUxMK0wrPCpCUlFXOU1JS0FNKz5FRFAtVFItVFUtMUA0RSoKK01TI1kqMSM8XyxLNlNTRCEjNVw9LjY1SyU0S1FLR0I2QkdGRiEwUCRcIDhAIF5dSFgtMzxfKDFIPypTIFcKK00uQyxNLjJBPTNWWV8mMSw4JiE1NiYhMDgoMiA8I0kkRCYxRScwUSw1JSJQUykhVEEnITgwJDBcMyZCVFoKK00vM0xbLzJcPCYhSDolUU4nUi08RixcPzcpQlJRVjlBRkkhOS4/NUBNLFQ+KFU0MSNBRC0pUjNBJS8yUFcKK00sKzpPVDQtJzZMSTE3NVZfMzs9RUVCJkNGJjVRKkAkVCA4MCBeXjxeLUNEXSdBTEMsQzRbLlMsTS1SSUoKK002RzomJ0FAPScxTTwnQUg+KVI4QiU5WFMpIj0uLiFINCVSRFEpIVRBJyEwMCRRLDYlUkBcL1NUXS9TJD4KK00mQVA8JVFCK1QuREktPTNPK0MmVlo5QThHIS0uPlU8SyozQiNWVCBZQlNZJlJTJSIvQkRVKiwmXlRULSEKK002TFEvNiVPMDJLMUpHIjpGRzZJVSowJFIgOEQgXl1YRzcjTUUxMlBHKEJUUS0jLSYwI08pTVYtSCVVXTAKK00lQiBDMyVBXitBMFUmMUg/J1EoQzNRRDQoQlxIKTIgRShSTEQnMVA+KDIlKjIyWEAnQVw+J0I4Sy8yJFwKK01NLURILCsnQClCSkxSSiVPS0okTChSWU1QRkYxVFUpMko0UF9PU1ElMVMsWCtXPlJRTDcnUDwqVlArNysKK002WlU4Q0IyPkZGMV4wMCRdIDdEIF5dIDYxUVksK1FUPCZCOEssMl0hLiNDKU82WU0lNU0sJEFQPzIlMVoKK00qQSBRJVFAPScxIEkxMEgxJCIwQSchPDwmQig7JSEsMiUhRSkyUlQ/JzFINyVBXEUuQiRbTj00QCxLOz0KK00oQkpMUllVS0hJREYnMjlGTUVWK1U0OSRLRDReTyM4XS9CTFArN0ZPUkxPLVI8RltRK0spNUpBMkFCIj8KK01FRiFOKiAkVSA3LCBeXUAzLjElISohTDwoMlRQLFMwXy1DSzhTJ0VZJkYhMSVSKEUzRUogLCE4VyYxUEIKK00nUTBOLzEwMyRSJEAnITw8JkIoOyVBPDUlITUoMjJIPCZBQDgmQVhGLiFQWk8uPEYrTCtVKkJeU1YqKTcKK01GWTxHJ0IpRUw0OiJWVCxaTFQsW09DJFswIjxOKTgmW1ctWz5XPiswVi0nPzRaNTdCQjZCRlY1UClQJFMKK00gNlggSD4wSzIjKFgrIiA8JVFIRSxTUFctUlE7OFNZJidRPDUkQThBJVEwOSRRNDkkUCxBQyEoMicyKDcKK00nUVRDKFFUPCdQLEZSIiA5JkFMTixRWEgqUkhQLCMkSyxCMS0yLDRNKklXQCkyRlNSSlVSQkYyJTdWUTEKK01JNzoiU1cxJkVEOSNPIzEiNENEUyxXUyFCWTooRVleQUVaOyM3W0E7PjI6NkM1SVoxMCRdIDYoIEg9MD0KK00uQiBGJlE0NiUxQEMsM1BRLCJBPTo0RSsnMSwxI0EoPSRRIDQjUSQ1JDAsP1VRIDckMSwuJFEkNyZBODUKK00mIVQ7JlE0MCQxNE0sIUxFKiJATisyXEorUikoMktcRio6Kz0oMj5QVDopR0FFUVc0RVEqREZCIFRWPFsKK01HQ10hTkJcWzIyWEgrV1JcRFouNkorJlJJOysnNyshNTwyKjlCVUFLKyAkVCA1VCBIPjxDLCFMQSYhNDsKK00mMVBHLTQsViwyWUU8JFEuKEFENyUhQEMmMTg/JVE8OiVALERVUSg8IyBcMiYhODwnITw2JjFUOyZRNDIKK00kUThMK0FEQylCIEorMkxJK1FZIzE9IE8qKltVKjJSXFRLLSo8REVONEUwXj4kWVpWVkBQSCQgW09CUFkKK00yUkxFKFgnJ0lbVlBQPEMtUDxHOzZKWTg9Mj47Q1VVSyowJFQgNkAgXl4sQShSLEsmQTw/KEFQOiYhPEYKK00wUjI8SygkSCchKk0mNlhGNjM2MzgoIDIkQixEJyEkNCxVKD4mUVRAKSI8SChSPEYoMUQ3JiFAOSlCLF8KK00vUVBcM1hZS0BULUNILUxJKltTPShCOkhPO0U9PlkiOUJKOjxHVEonUyVJLzU0KFk9I0ElMiQgVyxLKyUKK01JKSIrRjk2OkRJXyQ9SyU+OkIyMEJGKiQyMCRZIDpAIF5dRDgnIVBDJEEsPSghSDglQTxALyIiOUtIOEkKK00mIFpJJTZIQjUzJi43J1AuJCIkQiZAWDInQzQxI1EkNCYhTDwlUVg9JiEgMCQxKDMoUiBcLyFIWTJYRUQKK00/NCFBSF1IRStMJzonQjJAUCpFLD04MiY+KSIwQzNSJFQkVSQ3Q0xXPFMsXi9TNEwrSysgSylWOUpKSk8KK01JKyMpPTpJOjhCIjNCJiFVLCAkUCA6QCBeXlRCJzFUSSYhQD8pIVg8JkFYRS8yOkNNKERMJ0EyTyZXIEgKK002Uz45OSgoMyUyOEcnUFg2JEJAMiRBMDcmUVg/JkIgPyZBKDEkQSw0KDFYWi5BMFc0KTFLQEQpQ0k+REsKK00rTFdSKUJGUFArSFM5Rl1ONjcpTzhCQiJWJFhZNyNIUzxDIFwwMyhLKStPLVArPlNQXDMtUFxHQD0qRT8KK005QjY1QyY1VSswJFAgOlwgSj48OilBXEMpMkhQJVFMNSRRID0wUihaKUE4QCZBTSsmITQ6KiFIOCQhSDYKK00kUUhEJyFQOCpDJEIgUjsvKFIwRSwjJFMmQTg2JTFMOyo0LE8rUyU5MiEsOy5DISZHLUBIKTs7NioyXkkKK00+S01CQ1xJSUEoPyY7JF1aVEU1IypFNSAsUyUiNDQgVylZJyJJWT41RTlOOEVKIyE7WzkuNlI2K0FGLVUKK00xUCRbIDosIEo9UDEnUUw9J1IwSiRRRDMkMSA3LyFYUighNDskUT0nJSEkNikhODMjITgyJDFAQiZBRDoKK00mQVQ3IFFPLyZBTDwpUkxNJSEgMyRBMDIpJCBMKyJZNjEwXDMsUlEmSE1ARipLVzMpMlZEQEslNEIrVTcKK008R1ZfNiQtWVVEQFgtJFhdLEJQWzIjNEwoWSJdS1oyQ0lKWktJSlcmPCstLDRSJi5BJiVGK0AkUiA6ICAKK01KPkQ7KUIgQikiPE0mIVQ3JTE8PC8yMSIsMiRGJyFVLSZBPDwqQVA+JSFQNyVBVEcnUUw+JEE4NyBRTy8KK00nIVQ+KjJYUCVRLDMkQTQ0KENYSipCWTQwUTw3LSMlK0o+TEorPEdLKzMqUz8rTSBEW1kiMVQ+VDgiWU4KK01XRERNKyRUWytSPFkyQyhLJllTLFBbWl1PXDslUSwzPzw7LTE2MjowQiY5RipQJFIgOkAgS15QVitSJFEKK00rIkBVKCFQNSYiLEYxQjQ5JiFAOyNRQDclUSA4JDFENyMwXDAkUURAKCFINihSREIpQjhILEM8RSBRVykKK00nIUg6KEJQRicmJFMzUlBBMSFYPykxPT1NXTxIJ1lfLisiWlM8K0U8RExFLTU4Pyo9VTUkOiVBJCRCRF0KK00mQyEhM1NZICpKKlxFOE4nPzdNWzgnLy04KlklMlFdXjlWLUwvMCUkIDk4IEo9TEwpUUxMKTFcSSZBSDMKK00lQiRDMCIsMyUxPDYiUTAzJFBQNCMxNDMiMEwsJDE8PidBQDwnQiw6IFFWIypTJD8gUT8pJUEwNyciNDoKK00lRVhQMyJIQDBBTDcnITk/Tz1IRig6OysqIlJXPVs1MkQ8MF0wOCcsOiQ5IjskTFkmUjBaJkJMXDIjOFUKK00pOipXRlkyM0JYQiU6J1MyOFpNJTExTV85NV09KVAkXSA5ICBHPjRUKzFYSihSJE4nUVg4JkI4RTAyPDgKK00lUTg0JCFIOSYxKDokUUw7IFEnOyVBUEMoUVRDJyJAPicxVDwrIyhAJiFIOiYxPDcnMjg9JVVYUDMiWD0KK00uQUQ1JyEtQ1EuSEopWytDLCMjIztLTF9ELChXLjdLNDojUFw9JFBOJDIoWCUyOFkyMyhUKCpPJksqSkgKK01HWT43PlhLRzhaTSoyIiIiOjYxPShQJFwgOTQgXl48TDAjXEwnUV0nKyJYUzVFUFgsQjA/KEFcQilRXEQKK00pQjhAKTIsQSchXD8lMVRCJ1FYPChDKEkpUlxJKVFUPidBVEApIjhDKCI0XDZCTDEmVVVXMCFIRTFCPT4KK01MTSRPKUgqWStTJllBPCE5RDw1LTJHWzE/RTRaMlVZKidRTFgwJDUiNDNQVSo2PlVRW18mU003N1UtRz4KK003JyRALlIhJyZWJFAuICRaIDgoIF5dJEYtQyxDJSEwXCkiUFQ0RURXLEI0PSghVEApIVBBKFIwPihSJEEKK00nIVw/JTFUQidRSDwnUiQ3J0JEQCZRJDIkQTA3JlFUOiVRUFM1IkAuJiYhWi9RPEAwIjk7TE00RyhYTlcKK00qQl8iPTwlKENMNF4uV1s2O1QoWzRFJFwnMURWL0NcXzNDMEspJkJQUiwvKlRNRzpVXVNCN0ZYQS4xVSQKK00mJUg/KVAkWCA4ICBeXjBJLCM4QyRRLFsqUlhfNkVEVCsyOEIpMihFKyIwSSpSREMqIjhGKDIwRCZCKEcKK00pIihDKDFAMCdCUEAnQTg3JVE4OScxXDolUVBTNVJIMCZGIVgvITQ+MFFFOVE/KFcoWEcrLTMnLjtcUFsKK01ELEhUK1dHOzszKE01JShSJjE0Ui5DSF0zIyBFKDZOW1RcVzRXLjdIWT5LVjcmUEQuUV0mJkVMPikgJFQKK00gOCggXl5cVTdTXEguMyBDNkZaUVAmWTgzQjw+JkFQPCgxSEIpUkg/KFI4RShCQEYrUjBAJyFcXi9YUi0KK00qIiA+KDFQQSlCMEkoUkhbK1RYRSdRMDAjIUBbJCE8MCtDLUMyLCxOKSNBOixTOlUuXC00RkxBOTUnLUsKK01DRSxfL0YoWjEjXSUwVDxcMFNQVyoyNkBTXVc6Vy4nPlctVzo7MkRQRDI0Qig1RSAuICRcIDRcIF5dLE0KK000MyA9KkIkNDQmTlBONjUwMjI0PiZBUDwoMUhCKVJIPyhSOEUoQkBGK1IwQCciJF8tNj1MJSEwNSUxIDUKK00mQTw8JUFUUiokPD4nISQtIjEoWCUhSDctM0E/MDxARydUKTkrUzJeKlwxI0VcQSoxNy1QP1QhIDE1NEwKK00wQ1UjMDQkWTAjME0pIj48VD4rP1g+O0NYPis4OlI4VURCLEAnVShPKVAkWiA0VCBeXiRLMiJYOilBVDAKK001VkZeUSY1LjFCSEUoMixDKiIkSStDJEYqQlRKKVJUSy0iREUoMV0sLyQtNCMxPDcmISw4JzFIPyYyIFQKK00qNEA/J0EsLyJRPSInQUA2LUIlLS9dPFInI0FFLTNDKik8XFZGPFUgLjZJUz8zJFQxVThCL0NEXy8zUFcKK00vQyBHKDI2QllPT1heT1daXi9HVDsyOFhEUjRCKDUsTikgJFYgNFwgXl5EWjoiUEIqMkBILVIvJVRGUUAKK00yIjg/KEFcQSkiPEEnQUhDKSIsSCtRWEgsIURIJ1IxWS4lNFsqQVxCKkI0SShRSFgpMjg/J1FUSCpBMEIKK00pUiUySyZMWilUUjFCSkRTK0sqXDAyRlU2TEU2QywtOzRDNSVFJChRLiVMUy1DIFUrMzBULCNEWioyOFgKK01OWzpRSzoiNkVIWV4yMzkoOlFARDglWFouICRaIDRAIF5dJFM3IVw7KCFcPytBWyFSJU0vL1IsQCkiJEMKK00pQkRDKCFQRSlCNEgrUVhILCFESCdSKV4tUzA+JjEsNScxSD4mISxRJ0FcPCchSEUpUSQ/KSFNNkxGRFkKK00pJD4lPzpYUSorSlovIj5eMkxJJUI8LSwwUzkqQTJYUi9UWEUtIlhTKlJYUSszJFApIkBVTksyT0pZXjUKK01FOFVYMTMxLjtBREU4NTxJKVAkWCA0OCBeXihUNTIgPChCJEEsQU8wVjVRLC9STEsrIkRLKyJcSSlCME0KK00rQlRPLSIsTS0xWE0pIjIrMTI4MiYhODYnQUg+JiEwUidSID4nQVBHKjEsQSlBUUJQViw+IkFZRDZKLFYKK00rOzssMVJHKjEtNFhCXEEiLVJJLEBSMEYwNFw7LCJITylSRE8qUlRKKDIwVVIsOyFPOlZBSDlGMzJDOTMKK007QUhGOEVASCkgJFQgNEAgXl4sUCpDOEIkUVRQMVJfJFRGRTszQjQ+KiIoPykiKEonQjhGKFIoQikxPDIKK00mQUg4KUFVUzckLFoqIixGKTIkUi5CVEEoMVxAJzFAWiZBQEErMjUkPCdKR0lYXigxRUxHKVpGWjYyXlgKK009TSU6NDwhPzYyKSFEQ1hVJzU9IzA0ISsuVCRWJUNQUipSIFRLTFsyVC0zNk1KPzhWJkFJKlI1WjkkTFoKK00rQCRXIDQ8IEgsXEwoUlhAI1FETC9SSl9SJTkpMFIkPyoyLEAqIjxPKFJIRykiLEIpMTwyIFFDOClBOVoKK006M0BJJ0FIOSZBQEksMlBCJ1FUPSZBNFQlITRAKjIxKj1HMjFCJyFGLCVIQig6Xlk1IlchOl0lKzNLWTAKK00yQi0kQEJUVShESFUvI1kpLjNQUyRTOEcpQiBTS0xbL1QtIzJMKi81VFY5TytCOV86NDRLJzAkVSA0OCAKK01ILiRRKEMoRSUhWFEwUkMsVjVBJjBSREotIlhLLCJQVCojKFIrUlhJKkFQNyBRVzgqUVYlPUQ8UikxWDoKK00mMUBJLDJMQygxXD8nITxVJVE0PytSLTNBNlU3MiMgWipHIFcpKzswODJfLTpNSSE0LCEmL0E9JkEiMEwKK00pNExMLjNJJSxTPFEkMyREKFFMUExdNzlVXiNEUDsrT1dGTVQrIj4hOlQ4SSZAJFEgNDQgXl4sSidSNEMKK00mQVhHJ0E+PlVEWSsyIyRAJyIwPyhSUE8pUkxEKCIwRyUhQDknIUw7KEItRytZIzA5UjRMLiI4QSdRXD0KK00oIihGJzIoW0YqJS46JDIrS0YnR0RFVFJGS0hRK0oyTz4yLlBDPFk1JUhBOzUyQTNHJDhFMyJAXDEjSSoKK00wUzhWLDMoUSwjREZLOU8kO1g2SDY0JzBSWEhaLzFWIjwyRFQvUCU4IDgoIEdNJEAmUVQ9JUFIQyYhNj4KK01TVCxcLkJIQCciMD8oUlBPKVJMRCgiMEMkICw1VkE8OChCJU0vOS8lNlFIQSxCLD4nIiA+JyFQPyYxTFMKK01EOiUvN1M+I0pFSz1ANERKRUwgTCoqRk48Qi5ZRDw9LiUoJS0xQlEuQkMoQzJSIEsvM0EoMDMkUSsiVEsKK00qUzhFTiovKT44Vks2VE80UzhMWi4hWio+MjhIK0AlMiA4NCBMPVhIKCIkQiZRXEgmUUZFVkQsXDAjJEcKK00oUkxGKyM0WCwjKEspUkxLJTE0OychUEAqUi1SMVonMjhBRD4sUjRAJ0IsIyg8PEYnQVBPRklQVjEzSjMKK01ONidEP0QkTkZcXFcqWzpdPzJDJUZcQSwlR10jLkFVLENSQD8yQVhILlMxIi5SWE4qMkhGKiMwRFBLP0AKK01CWiJbOFUvRlhJOFUsUiYwPlI4RSpQJTMgODQgXl1UUCwiLD8pMiBTLkFIUFY0MS4xQyw/KCI4PywyVFEKK00nMTxDKEIoRCgxXEAqMkhGKSIpQDZRUk49MlhDKDFcPSgiMEMoIVBDKCJQV0Y6UkVHVTVISjYnLkU1NSMKK01ELCBYKkhaM0MxTlMrLDUqN0NVMjQxXSJGU0VEKTQgUDMjUSUmQVhVLDM4TCpDLFtKOScmPCdaTTsoRzQKK01QQ1xXMUNSIDdCQFhBQCUnIDswIF5cTEYrIUw3J1FITSwxMFBVI0BfLiJQPygiOD8rQkhOJkE8QyhCKEAKK00mUUQ6KFI4QykiLUU4MVZHOzI8PCcxTDknIVg9JkEwPyciNE9GOkY5QVNNM0dFWy9DRE0iQ1w4UykpLjQKK01CQUZaLCtZIzcjOScyUkUoRSJdPygjOEIxQ0kiJVFEUCsjJEYpMyBaTSlHKz5IQlQ8WTc3T0NIUjFEJi0KK005UkRNPSAkXyA7JCBeXUBOLDFcOyhBVFAsMTxXWFNMXy9DLEYpUlRGLUMoVihBWEoqMkRFJ0FQPSoiTEsKK00rMjFHOUJCUjxSOD0oQiA+KDIsQidRSEUoMjhLSEo9XDckIUlLVkM8QzNMV0NNNF4pWUI/RUFbJi5LXSEKK003QzBcLyFdJUUyRTwmUlg4LzMxICYxPE0qMlhBKEJYWU9KV0JDKUMgP1pDR1NENE8wNC4tOTJITT1QJSYKK00gO0wgXl44VCkhSD8pMixGKlJdPlQzWF8zJChGJ0FYOytBQDQlQTQ7KSIwUSgnNTwoUiBGKUI1Pz9JLEgKK00nMUw8J0IgPSgxPDsmNF4sM0I1KTYsN0FSMlUxVi1TOEo1OFQ9OlklKSZIRkMyPkYmRl0tKVRZQDNBSDIKK00rQURQKSQgXSsxUSwlUihRLVM4TypSTF9KOT8qPVcuTTZURzpUXEUkLlFZOitCTTExUCRbIDxcIEpNMEoKK00oISg4J0FQPydCQT5UIzRQL0NMRidBWDsqQTAwJEEoOykiMFEnNyk5J1FQQylCOUFAKSxFJlAsOlNBUDkKK00nMSw3JkUqKjJBWSE3LCsxTVFRI1NNVzZHJChDO0sxICdGTEtDQi5NJ0ZBJidUIS8wQFQgJVA8RCZTME8KK00pQUUpJSFUTCxDJEkpQkBeTSlfL0A3TlI3VSs/VFxBIC5CJT8sIlUpLSAkTyA8OCBeXiRSKTE4OSdRVEAKK00nQj1FV1M8UDEkKE0pMjRCLCFENSVRSEIqUkxWKTdZQSkiJEsrUj09PylITydRRD8oIig/KFFAPCc1Mi8KK00zUVxdNVwjM08iLSlVPktKSVRIXD1cLSsoNlBQRlJGWComRSQmUz0mL1EgKShAWEkmUyRIKSFFKSUhTEkKK00rUlhEKFI4XU9LL0ZEWFshOjVbTlktPSUuMi1BKlJFJy0gJFQgPSggXl1BJilCQSIxNVxPLFJBI1NUQTIKK00xRCQ/KCJESiVRTD8nITg5J0IkREBMLTopIVxDKiFdQzooNSYnIVw8KDFcRCk0PilEOkBRK1g1IDkrSz4KK01UO15TVV1PNE1VOEQ+OkE2J1FOKC0yKjQ+M0RcMTU4Qy4pWjA8NEhNL1IwQiVRWERKUyxTL0M0TilCSFMKK01LKT8jPVZaPzsnNzZTKV5SKiJYUComOF4yMCRbID00IF5cMF4oIVxXLkUwRiohXSBTU10jLjNMPCgiREoKK00kUTQ5JiEsOSdCJEhCLEE+KEFMQCoiKUM5SDUoJzFUPCcxTEAoREYuRVsgUSpXWFg5Szs2VSwuUVQ9TzwKK01NNSBEPipVMychUiouMVo5PjMkVC00NC8nNjEuLiFMMioxJDckUUBBSiJYTi4yWEgoMjxRTUlfJkA3MjsKK006R083U0leUikySFEpRjhULVAkUCA8TCBeXTElKFIkVy41LEYqIV0oV0QtIy8kIEQqMyhTJjFIPicxTEAKK00pMkBQRD09SilSJEgsMjE+OEhJMCghXEMpMiRGKkReMUcrMFYsJ1xUOStPPFUrVktVLlNSTjNcNT1bST0KK00nQVYwMTIuRUBCXFIrM0goKTZJMS4hQDorUTA3JiFMQUoiTEwtQlBDJ0I0U1ArKz5EWDZNOygrRFhbIlsKK00pUlxUKCVcTCxAJFAgPSwgXl4pLS8iVF0qQjhHJiFMT1Y0SSwwVSBHKDFcRCYiID8pMiBCKSIoRjgtKVEKK00oIiBFKEI1QjhRRlgnQjhAI0FBRyZJSldMWlxTKDFdJTJMP0JWJTU8Vi1fO1BUVEstJSVHJ1YsPyhSMigKK00tVVUsMzI+ODlCUD4mMVRTQCdEPigjUSNUQyBUMCNEUioyUFdKS1c2QFczLzVSLiVRUy1SLlMqT0QkNUgKK00yQCRUIDpEIF5cRSssUVhQJ1FMPSQxLEdVNCBdLURIPiciLEMlIVA9KEIgQikiKEo5TS1PJzFURSkiPT8KK003QT5cJ0IgPCNBMUMnSiJfTisoVCdRPFo0LC83VVVdQFUtXz1PJCRELUUtRyc2PEAnUVYnLCRQXTIgTUMKK00tQSAsJCE4OTVVKC8oIzEhVEJETS4iWEopIkRVTCwvOEJYIyAzQVVWUVMhTC0jIlNFVDE9LiAkSyA5VCAKK01eXTUnKVEwUCdBSEQmIUROWSQ8XS1EXEoqMlRPJkIoQipCPEkqUkRUOT4iISkyNEwqQk0/NjFTKCkyLEIKK00lMUVIKipfIVEsIFUoUUxXMzxHRFlGNUhYXytTUTNQRS9FRUwoNyRLKTFaMyw0JFkvIDlGLjFAOydBXDsKK001VSgvKTJZI1ZSSE4tQkxGKDJMWk9dO01HSDc4MCJZVlVDQU8tMzZbRCQlOixQJE8gOjAgXl1EWiohXDkKK00lQVhDJzE4TFFVOS8zRSRFKEQgSzMoVE0oMVxEKSIkREEtLVsnQiBEKTI9QzcyMi0nMVRCQVlJMCcqWiEKK01KLTBSKFItJC47TzRUNDxWUU1TPVJEREEqIlxdJVFIPidCLVAxNj0zMEMqJCcxTDYmIVg9JUQkPickTSkKK01UMjRTLkNIWyszJD48SjcwPlY3LC1SQFVPMkklLDMmKz84RU8vQCUpIDw8IEFMJFUoISg3JFAsN1xAWEQKK01RJFEgMDRMQidUJEwzOFxNJ1FcRCkiJEhCTTFZJlFURClSRUA2IioxJzE8PkMpTTAoKyojSTxcUCgxTFkKK00vW18zVURcWFA9Qz9QU1Q6KkMkXSUxSD4nIVVSL0U9JTBBOTYjITAuJCEkNiFCTDUnJC0nVDFcTSxTKFUKK00qIlg8PlpXNEE2VlYqMVhFT1JAXyozJjVBKElGKzAlISA7VCBeXDhSJyEsOyRRODwnIShKVCUtIDA1IEwKK00qVFBXNik8VCkiOEsqUkBSQj4mKyhSNEsrMlVANFI+OykhSENGKjk3KytaIUtdSFIpMVxWL0xHQlhVJFwKK01TLj9VUyNAOyxDPSImMiRFKCIhWi8kPFsuMU1JJTEsMiVBMDciQyQ5KTNdKVVCIE4sMlhQKTMgQUJcJ0kKK01GJycrJVI4P1FSVSQrM0I/QThVRipAJSUgPDAgXl4gQyYhSEEpIyBbKkMxOVNUNSo4JTBGJiIkX0ssSFwKK00pQVhCJ0IoRUEtIjAoUihBKSJJQjlSKjk0WVI4TCkwRSk0Qi9VPUBNKEI5JTA7KytXJTBVOClXOFMkVEIKK002JFQ1KDIkPCdRXSw0JjE2LCJWITVTUU41VVwyP1ksIylEUStUMiROMVNMVyshVDk7KissPSY3Mi4iXF0KK01HQkhdLEM6JTxXWUMtMCUgIDtUIF5cLDwkMSA6JlJAUCkiVTFTI0xbNFRYSCUyISVMXFxeKEFMQidCKEkKK01CTSYuKCFcQSlCUT84QiJCNilaPE1ZOEMoREIyVE0sTighWFowKzMrV0VIUzY5QzdRNCQ7NkRcNSdRXDoKK00nMVUtMjUtKCcyTjI2Q1VVODYoOEA5JCYqNDEqVEFYTTBDNFEpUUg3PUpPNEAmXl0qQjRQSCJAVyojQjQKK00+N1U7KjAkWiA7PCBeXUhFJiIkQSZSKE0pMlk1VUQoWzRVLFAoMlEuT11RJioiLEkpMkRTQj1aQCoiPEgKK00rIyE/NzI2UDk6OkZQWVhIKkU+NFdOKE8pIihXLztTOlhFNFU4Ki9NU0NQPDhFNDooUiQ8J1FdODIkOSEKK00pU1ZLPUVKOEE4MEtFSjw0LVQpKVUxUEwvUyBMKSFQPEIsJ0pFNz81JiJQQ0kiUFwrVCJAQEhFPylAJFsKK00gO1AgXl1AUSlCME0tRFhAKkMgXCYkKSo2NThBKzIkPkBMNS0qIVRDKFIkQkEtIjQoUihDKFI9TzpCLiUKK01JOzJQTUosSylDNkpULVBQKEIpJTRGJyo+V1ldOlpDPlUlSEEoIVxBJ1FcQSgxSFcwVV1HNTBQPylRPD8KK00nUThCJiI8QkJUTSlTUyUsJzJJJyxUPzk6WisrPUZHLy4iUFxDUjRUKlNNWz9YMSosICRGIDpYIF5bUEoKK00nUVRCKkQwOikiSFYmI0RbMkUgQyshWERCXFEuKUFMQyhSJEZCTSYyKCFcQykyRU45MiYxSztOWU5aLEUKK00oU0JQVC1MUSghSFozRVsnPjdVWzk6L0FTNFg6KEFcQScxUD4nUUxXLlRdOzNALDQoMEg0JVBUOiJRQDoKK01CRCkoVCJZLiciNSErRC82PipPM0EnMlsrQjRRRCI4UChTXitBSC0kKTAkQyA6UCBeXFBJJSFMQikzUDMKK00pMkxZJ1NUWzJFLEsuIkhLRV1BOSpCIEoqQkBQQj1aRCoiPEoqUl1NOCI6RFAsPyVSKkhIKTQ6V1deSFQKK00pIVhXMUY7Mz5XSVU6KltTViREOSoiOEYoMVBAKDFZJjA0PTYzIFRLLEE0QSlRREEmIjhARUQxJ1QyUSwKK00mMiBcKjRDPkI8J0lGJ183JyJQRkQyRFYqND47RDklKShAJEMgOlggXl44UzYjLFMvM0QxKVJdPVQ0IFwKK00xJkBFKVFcQC08PTsnUVRAKUIoR0JdIkIpIVxDKTJZRToyJiFMRzlCVkooRSgiVk5RLUhUKEIxIDE7Ll4KK01YVzk8OFpTNFU1KEEoMjBBJ0FYPyghUEgzJk1FNzM9T0UjRD8mQThaNDU4SEhFWSZUQyBYLSNIXC0rTz0KK009Sk8rPVY/My9SLF86IjROKVQxTD1ILSsrICRYIDlQIF5cWEsyMkxWMCNMMyszLUFUQ0RQLVYwQikhXEIKK00vLE07J1FYQClCJEhDTSZCKSFcQykzIUc6MVYsTEdRR1VKJEYoIy5UUi1QVSghUFUxOy5fWSZJMzc6TzoKK01UJDQ6J1IoPychUD0nQUhHMUYhOzMyQT07QigwIzBEOSlTMEFJNTUlVFJUWi1TNFEsK0s4P1sjLEFHJyAKK00sUUxVOUI8TCgkOVk/OCkkKTAkVSA5UCBeXVRHLlI8VjBDXDsrIlU5VTNATS5GREwrQjhGLz09TClCJEcKK00rUlRVQ01aUyoyMEgqQ0FFOEIqOVBYLUlZOlRJKTNCXVUuMFgpIiBSL0wrLFtXJSc3S0dJWTQ0OCkiOEMKK00oIiBBKEFYVTJVNTExUkFAPEIsMCMwSDsrI0Q/SVVFIlVCTFgtMyhQKiw7R0U8R0VHR083KCIkTzhCNFEKK00oNFooQiklKyhQJFUgOiQgXl0gOSdRRDctUzRNJlJWIFEkSSctU0RDJ0IwPycrWVApMVRAKkIoQkEsUk4KK00pIVxIKlJRRTlCKUE3KC4pVyo0SygyLkBNXVxNKDFcXjBaWlBZJzlBN0pHLlVUUEkoQiRBJ0FYPyghUEEKK00zRU1MNkRYXzNGLU8/KUkpQlVVK0RVVTBVMzxSMjNEXSxbQzo7KkcpO0Y/MCxSPS4xUjhUK1RJQTkoJSQKK00qUCRfIDpIIF5cLDwmUUxFMFQoWitEKi9RNDBeK1NEQiZSMEEpLC1QKSFUQCpCJENBXFZOKSFcSCpSWUcKK005QVlMNzhKL1YqMEwoMkpGTk4gTidRPFMwWlpQWTZBNjVaOzVUQ1xCKCFcPychUD0nQUhDMlUpRTNULFEKK00sMjxKLUUkNTdTVSFFJTEvVUMoUTJTKFIrWz81PDpPKTxGWl0pUV0gL1IsTCkkQUo6WCRdKSAkXCA6TCAKK01eXDA+KFE8Py9DRE0oUilJUURFIC00IE4pMkxFKCxCIyxCMEcsUlRQQV1KXyoyME0sIzlFN1ItVjpIUiwKK01ZWyBPKUJOTVIuTFEoUUxQLyteX1xGWSk1SytBWVNcQCkyLEMoIiBBKEFYSzI0OToxI0RKLEMgVC9VTDgKK005NCRZRTVBLFYzIFAyMyBRKVwvRD9MIzxBRz80JSI0Vy4yJFAoNFFYPUkpJihQJF4gOzggUVxIVyxTITAKK00wUT0tLzRKQVM0XSAtRCA9J0IgQTIsLiknMVRAKFIsRD4sRlcoUiBCKSIwXTkhWUU2OjY0VjpQTyhBTkMKK01HLTxOKFJBJy9KVjZXVk02M1o3L1VESEkpMjBDITIiTyVUXSxEOE0xMyUpXzNDQFM1N08pMkhNNDFMNFcKK00rKUkmMFNOU1YmUldTOE4vVkUwSDMjQUowM00qSEVCJy5SWCEyICZEICw/JDIkKSA4VTBJN1RZOks9JScKK00tMkheJzFMQChUXydCMVQ9KCIsQik3TypNUixAKEIwRi9WMDo8JUZLRj02SywiKEJKOV84K0IkQC8jWk0KK01FTV09MjQ+QFUtJF0oQixCKDA0PktRTTAxOEopM1Q9KD5EPE4pNTVaUDNaKTJUNyYsIkY5L0NAV0xNLVIKK01PTSovRTw9KCgkKFM6M1RUMypFOEEjNEggNDQhSSAjJ09TWFYrVFBZIyNYUy8pQzkyUzBNMFI4RSlSPS4KK01UOVBGKEI8TCtDKVtVXEBIKTI8SStDVT0nV01ITElPRE1TLEcoOlpNWTMsRSkjRFlQKj9OOFNBI0peJ0YKK00vMiBIKUI0JShKXEM0M1IoQlREWzAnQSYqIVEsPjw8WUJUXSJSMlxJRiNQVytbW0I9XEc/RjlLPi0yOFoKK00rRkEiLTUqVTc5IFooMCUjIDpEIF5cXFI1V0hMKlMsWS81MyVURDEvNjRIRylBWEg1TFY4KEFUQCkyLEMKK00vXEJbKFIgPygyPEsvUVk2OygqOlZKXEknQVpBQF0wWSgyOTIySkYiVihNNjs5QylVRChXKUI0QCgyIEAKK00nUiQ8MTU7IFhWPTQ2WCJSWyY1UEJdQSRDRT0mUkMgUENDXFguS0c6TipST0soOzcwIkRRPTkqKz5XTToKK005KTBNMVAlJCA2TCBeXEElO1hcXysjSSQtJCsiViNNIDI0KEQoUVhKNy0iOChRWEApMihEMTxCWyhSID8KK00oMjxJL1FJPztYQj9WOlhKJ0I2SUFdNFknUiEnMipSIlYnVSg4STMuVSM8UCkiLD4nUVg+JzFcPTBVIlkKK01WNTkiMjc6SVc1KUFATSxfRCRZJVJSREpCIzBQLUtDNlA7RldMKFckLDIkSz4pQis+WCVANzkgSjBQJSQKK00gNkwgXlw4TjMnNEgoIyRXKiNfKllTTFwyVDhOKzI8UDhdWkkpQiRHK0JYUTEtPywqIjREKUJYSy5BXU8KK00/WSZEWitITShSMk9EXiheKFItJDErUjNZWCxXN1lTOllDOE4qIjxCKFIoQigyLEgxVScgWkVUXTBHVlUKK01ZVTFBQy4gXENFISJTQkBLQjMsTitMM0ZUPS83UylHOShSNEY+KVYwQChBRzcpNEgtUCRbIDY4IF5cXEkKK00tU0orQkpdK085QyxUJF0rN1QsQSkiNFA3XC49KUFUQipCLEBALEMhKDFcQylCPEgpMVlAPlcqP1QrWEsKK00oQjpHOj1YVSkyNUA0WjVEVykpODpJWjhVRFhcKiIwQShCIEAnQiA4LSxOWFRWMFM0VzYuVEVVVTwtLTIKK01CVkEiUDJUUUZELF8tSkpbRUlKMkVXSzcwMkxXPUs8Vik1RV9CWS1SNFAlOiA4UCBeXUxKK0NZXjBXTEwKK01CRUMiVkQ4XjRDUEMoUjBUOUxCPShRTD8qQjBFQVxPISgxXEMpQixEKDFJQ0AnPkFUW1xMKCJCVjs9WFUKK00oUik1MVpNR1ZYRSo3WU44VlQsUSlCKD8oIVg+JyFYMCtMNlRUVTRJMVZaLlM1JU47PFknQlVdIVAyOEoKK01EM0BaKypOWUhKQj5JOEsoK0IsVT8sLFUoVVolQihdUTRQJTogOEQgXl1YTSwjQV85Si0lSkdPM1skSF4KK000U1RLK1MgXjxNPkwqUiBHLFJcUUI9VzIpQjBIKlJASSlBXVNDJ0pHWDxITykyUyQ9PjxaKVIxMjErSVUKK01aOTUgNyouP1okLE4qQjhDKSIoQigiKDcqPEpcVyUkQTAmUjdXJFlMPV1VJEFGJF5RQjxLRFM8VylLQy0KK01NXDJbUDlPNCtCJFlDPUkhKVYiJEIpMVAyQCU1IDg8IF5dXkBUPSkxLFNMSD45MyRVJT0kOCYkQCgiME8KK008LCJVKUFURCpSNEtAPD8jKjIkPikyODkoIU0hQTVOQVJMRE0pMj5INE1MVykxWS4ySU0uVVpJODdVPVoKK01URUhbKEIsQShCIEEpIVxBKyRaOlM2KF00VjYmVyVBOzctIShAVkEtVjM0VUZUQSUvSkJOQkdWLEUnKy8KK00vQj4gPzw0XSdCKTs7NyFdPkAlSSA2JCBeW00uOSlRKCYzIE4/OEcoVkRcVzRVSEInUixTPVw2VShRTEEKK00qUjhQQixLIyoyJD4pMig1JyE9JEJGIkNTPEhOKFJGVzVNTFcoUU0jL0olMVVKJS01VT1aVVRcUCgiJD8KK00oIVg/KEFUQyw0Wj5TVSxTMVVaJlVUUTQ2PExdQFVdLFYyWE5EQ1UgLSpGTEQ4QjRHV18jLFI5X0A8TFwKK00lQV0+O1clXj8gJUsgNiAgXl5CKElMPTwtNDxVQjlLNFs1LFc1JUxKKlJcXUBdMyQqUiBJLSMkXEJNUzQKK00rQjhDKkI8OigxUTRFRi5JVl00USoiVyU3TjBcKVFVIC5bIT9ZKlUiNFVaIVkkXE0pIjRDKSIoQylCJEsKK00sVVZIVVRcSzAlUi9ZREUyOF1IWj9GJSlXQlxPRSNQXStLOyBKSipKTjhbKiwiLi1EXVkqJyIlPDpXMV8KK009UCVHIDVUIF5dOUlWLVUtKyMpIDlXVlpTJEkgMSVQPylSQEY/TDZWKUFcQCkxXEU+O1chKSIgQScxTDUKK00lQUhSRUQ6PlMsTEwoUlJHMj1EVSkhTFE0OSUhVSstMTg5JilVVSUmKTI0QykiTkwoMjk1OldNOFQmOF8KK002Ji1UV1UxODY9MTJEV00pUSNIUkgzXSAtKVY8PVVUVT5WIygwMlk6LjJIVihTQVY8STVDPDAlMyA0XCAKK01eXDUoTT4pKChCOFU8WFZfVCQwUy1VNEEpQjxKQTxKVihRVD0pMiBKQCwjISkiIEEnMTwxJEE4VUZUTkAKK01TXFBNKDJaVjM9RFUoQUBGMTk9JFRaUSg2WS4pVyQ4WyhSLEEoQkZKJ1IxQD5YPUNURTxVMyVRVFZEQTEKK001TF0nRFcpKFEjLEtGIzBbKklaOj82MFtBJkJfL1MtOy8iUFQnMz1YOzk5Rj0wJTYgNTQgXl45TlcvTTUKK00qMkRVPkk3K1kkPFMuJThJLEMsVEQ9RyUqUihFK0JMVkBNKzIqMjRGKEFQNiVRTSVJVFpGVz08UClDKyQKK001PihaKUFIQzBKOTJYOzxcNUlGMFo0OFgpUjxFKUJWTihSQU1AWVlQVkUsTTE1SV1aNDUvOC1ZJENHMSUKK01SMzBMRkMsWCkqTk5DRyEiREdPKzAzQUYvQkhWKCM5VDpJRUg8ICk0IC9PNjFdKzc0UjRGMEY1V05cNSEKK00vRSUuKiFcSCooOyRQQjRAKDIwRClWLyVPQjhAJ1IsMyRBNDcoSiBaSywvMCtSMFJJI086L1IwPyw0WjcKK00pLSJeNDYuK0UtRTsyUixFKVUxRDQyKEkpJDE8QV0tSjc1TUA6XVkyODQnMjQnMU8yWVBbLEpNJC1TWjEKK01INUkxOFYpR04sQlw3WiRJLlImKDpFVU89VTghMlAlKSAvTzs0PT8uNEMkSC5WWiVPLERfLDQxJypBWEcKK00rSFcpUEIoPidCMEYrNkcoT0I4QCdSLC8kISQzKUo1IUwsPzErUihUTFNfOS8yKDspRC48Ki0mWTIlVjAKK01FLVkwMCIkQyk1KUIzUVhHKUQ9OEA9IUA1RF06Ol1FJjZTWy8xRy1IMklIVisqKFksQzIyR1VdNzo2SUsKK01MTFJfODokQy1SMi47JTVQPyVEIjQwI1taJU9EWEVYVCskMVpDTEc9MDMlJDIjIEosUz44Vi0sSihSOE0KK00rQzlOVkxcSykyMEglITA2JiMiUjBbSzNXIzBHLitdKVk0KEYoIi0iSiMzPlFDUTZFOU9LNCNURilSRTYKK005VSxDKlJJJzlYMzg2JFUoNTczRjBVMSZWVCFQOjQ+Pi0iVkYtQlxOR1slSzcmQU4/PC82VDc6SikjXEYKK01CVj0xPDdZNyA1ICE0UCNbUkUvMlJWJFEuVCVbO0pXJDM0UTovUkxFKTIyI05LVEUnUihDKDFdNUtLTEMKK00nUVRDKFFQQSpSIkE8Kj5cVDJUQSxZMSVWNEBHKCI8VEEjKzFQJik1QzlTMDg0OEsrSjxWPylERSghTEoKK00rQV8qOTVZPDdWQzgzVTBUUURVJjhEVS8sUyJMMzQ0WzQsNi5ASjlDL0QoRyoqKEcqNEVZRjZBWD9IVV8KK00gNCghNCAjW1RVQzJUJiBKLFNCIj07KywxQ1UrLUJARSpCSitQPCBFJ1IoQygyMTtMXCBFJ1FUQyYxUDkKK00oMjJGPlpPIVRSVD8tOjEpViQwQychWE9BM0s0TiUxKUNZUzQ1M0xHKko0Vj5ZKD0nIVRNK0FPJTg1PTAKK002VkMzMFRMUlFEJSc4NEErLDJWRDE0IFE0TDItP1lVPS1TVEcqKjxFKCQ+JEkmUVQ9SEIiIDQ0ITUwI1sKK01YVj9BWTZQUS4zUis/S1tAMzNNKS5DIEwrUl4vUz0oTikiREoqIj1EUExQTSlCMEooUixAKiFeXT5cIyYKK01WUzBELzpJNVlUSEkoQiBNQiQjQlI0TSRFOi9GNyNITSwqSFtBWUxBKEIsSy1SIzA1VE0pNFZXPjAjXFQKK01TM1EqOCQtMCsyVkowM0xJNk0iKj9ZXTYrQ0xOLDswSigkUidJNj1MOFg6IiA0PCE2QCNbT0VTLFJGRFEKK00vVDU6ODlbJTtFNUgzQkBGKDJNQE1LXEInUVxGKFI0XicrTEInMUxEJ1E8QioxSk45WjpOVFJcQC03XUAKK01TJixHKDI9JDA6PydSJUFFQilHLT8lKEUpWjYqPzk4Rik3LTpPOypWN1VJQDUmUzw2VFokVFRIXzckOE0KK00mQj5dM0RNI0FdMVc4VTU9PCJcQikkSE4nST4+QDZVWkMmKSsgNEQhM0AjW1ImKy9URkhNLiNVQDlaKysKK005RDE3MEI0RilDJUhPPChCJ1FcRihSPSIoK1xCJzFMRCVRTDspQiZSPEpGU1UyXD4tWF1EUlVcQycxWF8KK00wSl8qUCRJOUJJRzE8JDxDKTo2LD9JJEAoRzE8TzsuTjU0US4zRlM3M1Q2IlRTWF42M1xHJiIyVTFEOFkKK01CPS1JMzNRJTciJD8pNDRHJkleRUFWXVY6JSU6IDRQITNAI1tWJyc9WUc8VS9ULUc7SlM+OzQtNjFSVE0KK00qUzlMUj0wSykiOE0qQlUqKkxMSykiKEspMixCK0IjLjxcLlhXMzhDL1k1UFZGNEkoUiBdMTs3OFQ0JTQKK01EKiNDPVQ4SCpKUjRCWVBFKkddOlErOlwzNCkpMVcnQjMjRiRWQ0RdNVNUSCUiMlswRCRRRD1dNy1SPFAKK00yITw9KUUgUCdaNlBDRlVONURBMCA0UCE0UCNbTlYvJlImXEEvNEU9NzQ2XzgkPVIxQjxEKSFVR0pMJEIKK00nIVBDKSJIPCdcJEQnQiBBJyFIQysxPkk5OlZEVTJcQSlGKVRUJkhGKSIxJS4qPzBTJi01PygvIENVLEoKK00qKi46PSk8TSg5NSxQKyJNOVYhNDRUVzY4RUIkUzRYRS1FQE4wQk8gNUNRIzxcWTAzVlE2PFI4RSg1UE4KK01PSSIjNDQpXTY2OTAgNDwhNDAjW1ImUy1URyhBLjQpQzhEPyQ3I1FGMCI8RCoyLU9MPDBCJyFQQykiSDwKK00nXCBEJ0IgQScyJDYpMVZNPCsiSFVSXD8qJylYU1Y4QighTSAuOl8zUSU1KT9ILyRAVEBIKioyPT1ZOEkKK00oWSkpT1siRzg1PSYzVFcxNUReIlM0KEMsNFxHMCJCWDNDPFk9PFUjLlUwXzhBUEUoNUBKUEk+KDRUKVsKK00yViE8IDRYITZQI1tVV0s5WTggSjA0RUo5VF8zODNFQzBSWEsrQkFTTz04SygyLEoqUyxBKSxQTSkyPEgKK00qIig2KjFTKjxcUlBXUzhELCdCJFdGUEgpQVReLys3QVU0USRBKEs2QkQ8TCtaXktBWihPKlpJMVJbXlgKK002JExfMVUrPDRULiRVI1Q9K1RcRi5CQl4yQyhRPz1EVClUJFE4MixOKiYgUlJKKiozU1VTLkYlOSA1ICEKK004UCNbTVUzIlE3MEMrRC0+KlFbJEBGKjs5IjhHKDIlNUQrXEAnMVREKiI0PDIrXEQnIjBGJ0YtMTdRXkcKK004KkoqVCJcQSgkQUVTOCBGJ0IpJi1aPyFTNUE1PSUyVEJVVEUpWUY/QUlYPylCTSlIKjk4NVU5NDYjWzwKK001NTlLUFREVyY1JTIyMlZZMiM4XjxcXEopVihQKDFUPSk1QUNTKjEzLzkhRjsnWiEgNlAhRFAjW1FFVygKK01TVzxDKlNdQysxWylAViI3OFI4RykyOT1FXChAJzFURCoiND4zPCBEJyIwRiU1QEQsIVJLOkpWL1QyXD8KK00oRTlKUydUQiZBRF8uKl8mUVRVKz1FMllAVShDKVlWREJZVDwpQjkpSEpNOjYlJSg1I185MjRRSVBTVFEKK00kREErMVJKUTAjJFY9PFhFKDU4RCcyIEIpVUVFVDpBMy9JIUE+KEImIDcsIUhAI1tURkc3WEg0TCxUNUgKK00sMjc2QUVKLzhCTE4rMk1BSF0wSShCMEsrUlhCM1xMTShSTE0oNTRALVFbJzxMPjRXI0BEKkVVVlZYNEgKK00oIUReLjs3M1YkLSU/RUcoQjRcRSsqRlNGSkxEKzMlIkdKVUIzJDUhMyQrRTFEKUtSQ0BKJDRBKTAySlcKK00vIlBQPl1IQyclLEkoQihEKEVJTVc7KSwsSEU+PDkqMiA3WCFLQCNbTlRKLlAoQEwuVDRBJ0JaUEBUMVYKK00+IkhFJ1FZMixbXEYmUVhJKDIsQT5bQEQnMixEKjVdODlRUkMyOjVMUyM0QyhTOE43KExEJ1ItKC8pOlAKK01TNUk+MlI8Xj9UXD4oKTZeRVo8SCkzWTI1SVBWKlVBPTcoUzg4JE1BTkQ0VzI0XS00IlJRNENYVzFMKEIKK00nOyBFKFIkOSo6OyZUSzUnPEUxI1RdMzEgPUAhV1AjW1FVJjJSOEBJLTNUQSdSUlZAVClSPDJIRigiITkKK00uPChIJlFYSSgyLElCO1REJzIsRChGKEkvIVpINEpJUVMjNEEoI0BUNlhMRCYxSSAuSU5ZUjUhMDFSJSUKK00+VCg7JzlDJUZKPEgoU1EwNSlYWipVJS80OEc0NCQlQE5TREswNEEoM0JGSTIzQFUyPChAJkpUQycxTDYKK00qKlMrVUs9Jz1FQF5VXVM5ID4gIVlQI1tTJVJGWDlEUS4kMEYoIlpfQiNRRjtSXFEqUjE7ME0gUChCNFAKK00qIkhPRCxESyhCQEkqVUBALyFSXThLPVRXM1hDKiNYWzlZMEsnQUhcLyo/J1ZUQSkzUikwQDQoPSlaOzEKK01KSzhRKVM5LDYqOFUoREEmNCg/QzRDPT9PQzhIL1Q5JTIiRk0yMyRRMlxMRShLREgoIVA2KTsvOFhLTSIKK008JShZWF5fTCA/LCFeUCNbTTM9SU04PEYwIzg+LkhaQDsjMTg9IiBCKDFcPiUsJEYmIUxCKiI4Qj9LTEQKK00nMiBIKEVZUzkxMkgsKT06UzNMQicySEw8SURGKEI9MTJIVkJSRjFAKlIhJjlTIEYrOTciQEZIQikzPTYKK00uSCxAJVVFMzRYWzA0VExELSNNLDMlNTMyQkJVMkNMXjI4VD8qIlxdMiY2J0Y9OyMzJk1GNEQtMEs9OzcKK00gPVAhVzAjW05TTUxPSEhGLzJcPS5ZIkU6Ij0oOSFUQyhCJEMmLChGJiFMQioiOEpDLCBEJzIgSChGMUUKK002QUZNLjlVP1MzTEAmMkxOO1lERichWScxWSZJUiVJLCdBTSw3UjBCKjk/KEE2SEIoUykxLVgkPyU1JScKK00yKE8sMFQkQy0yXSAxJFkuMiI2TTAzLFkyWEw9KiJcXTFGNilHPVMoNCZVRzUkOTJMTVc+ID4sIVkgI1sKK01RJDVaVSlITS9TODwvKTJRPCI9IjlCNE4rMjRFKCxcTSdSKEkrUlRQRFxQSyhCNE0qVV0+NkFPIjFaOUEKK01XRDBCJ0JYUj1aKE0oMVkhMVlOVVZFKSQnUTkzOTJESi4qUzlFV0RLKVJdLi1YODwjVE0gMVhHOzEzPEIKK00uIlBdMERRKzBCNlEwMlxWMjkgQStTQSIyJkoxSj5PNTZHLUgzU1kuUV9DWSA/WCFfMCJCTFI4OUQpLEgKK00vUy0tMUgqKUIjSTw/MjhBKSFANyRLXEQnMUhAKSI8PzxLWEEmUCxBVUVZSjhBUkMoWShWUzVAQykyWVUKK00wKiBDKDIpMDE4NSlURTk4K1RBUisjWEUqSFpLRFo4QykkITcnVSRFMiVBKzYmXykyM1UpOlMxIjImNTMKK00vIV5CM1NMVy01IkRTPUM9VDpFXjcsVzdRXEstMFZfNlVdVz4gPVghWCAjW0xCLDtGSUBKMCMlKzIoQiwKK01AUkklOzIsQikxSDwlK1xCJzFIQCkiPEdALCxBJlIkQSkmIUw4UVpIKzlAW1M1QEEoUy1bMSooQyZRRSQKK00vSD0tU0RRKCo0OVgoMyhDKVkmUUVKOEMoQ0UwJkRYQDBVISE0JlMlLjMtKDsiQFYwJVkuLkFSOjFCXFAKK00tJEpEU01DPlUqViQ5LSs7UlxPLzBHJztXTjNFID40IVlQIkJQIkxBSzo8UDAzOSUxKSY6Q0JRJDwyTE0KK00sIVg+JkxARyhCJEcqUlhNQVxcSCggLEZVJVFHOSIqXS1ZVF1XRiRDKiM6IDMqSEooIURdLzhdOVgkMSAKK00rREohKDM0SCw6JyBKKzRMKUM9LiYkWD4wJFBbM0ZLNC5SRSc7UjRTL0VRKy0hUj4xQlBOLDROS1ZeR0sKK01YS141PV4/TVRdOzMvVl9KXjAzXyAvTjcnUTFOQlIgWi9UNSU/J1pAMiU1QClSKEEoITU9UCI8PiYiIEsKK00pMiFQTUIoPCdCREU5Nj1HJzo4TT5ROyw5UjxEMCYtKEhSUD0sVFRRPUFbLjYlLVs1QVk6MSFQSEQ6IkYKK01LQixELzYgSShZMTMyJyk0PFoxMy5GVFstIzUqN1RIXywmVScvI1ksLUZaKU1FUzI2IkxBVExMWDBESVsKK01TTS9BV14gIVdQJz0gL04xJlExW0UiIFsvVCUpQFgmQC8kITIpUiRCKTFJQk9SNDwmIiBLKTJBXE5SKDwKK00nQkRIOEZNRCc6WFRAQVMrOUI0SDJHJS9JIlA3KkQsSj1CIykzNEFcNiIhLy8hSEZESj5KS0IsQi1FQEIKK00nSFUsMDY9KTwqLSMsJkhYKiJFIjYkNF0rNjUgLDM9Kiw3KitONisqM0IkO1UsXF4xRFVcU11HSVlOPCEKK01ZQCdEIC9CQihRRixJIjReMSM9JENIXkkvU1k4K0JUTSpBUUdSUkhBJ1I8UisiUiFRUkRBKFJYSDgmNUQKK00oTChfQFFPOjxCRFA0R0k6S1MkPCsjREk/Ujs2MkQ2JzdCQSwuQVhLRzsqXE8yUEYtNThAJyhRKjAmOSYKK007Sl0lKiZAWikyOSA1RCxXKzZEXywjNSYrV1pAVDc3ODYiQEBaPiUlM0RVXVcvQCRfUCddIC9OLShDRT4KK004MixXLiNYVj5WPlAvJjE4KUIwRCZBUUZQIkw+JyI4QikyJT9KMiQ+J0I4QzkmTUUmWUw7PjE6XUFRWDoKK00xVFk2SlJERidEQE0rQjlRMSRNPDUlLTwwIVBGSFk6PEkiPEMtNThOPkZFRTY0NTkvIjkrL1QxIisyQS4KK00wU0EkKkJVJjAjXF8qOD5KUFdfKC9SPEJVTDUhOzYmT1cuIz5XLVQhVzAnQSAvTiQmQ01MOlFcWS5DQFUKK01ARlJULTUpKChSJEMoMjFQUVJAOiYyOEMpMi1KS1IkPCdCQEM4Vk1EJ0pEPT4hPl1BQiA+NDVRPksiSD8KK00lNCRGKkJBUy5TTTU0NE0yLjFAQ0lZVkRJUig/K1RcRjtVWT80MzUqLyJNICtTOFYnQVUmL0M0XykiPSEKK00uI0BaKUk6TVQpLyctUVxCVFwsXzpFVlFYPjdHWT44IVkgJ0ggL0I8KkQlXT5SMSEwQlxSQldGXi1EXSwKK00qUkxPKyJJWFRDKEAoMlxOK0I9S04iQEEoUlBMOEYpQSgrSEU9UUMkRSJARjZWNUJOMkxGJjNARywiOVsKK00vUzU0M1Q1LC5BWEtMOkJYTVJURSwkWEQ7JVU2NTM9IC1SVF8pUlxRJyFJJC8jNFwpMkhfLSM4WClKIyUKK01ZWi8zL0I0SVpdNSM6JS5VXi9QJV9QI1tIIiRZNTYsQSsjNE0pJyU8RyM5TTYiWEEpMiRANls8TCdBUEcKK00oUjg7NFdcQCghSEQpJU1DOzIuPiZDSFtMWUBFKDQ0WzkrQEwoIlk8LVFEWTcjRT43JFEyNDRQPSdJXiMKK01GKiBDKENNPi43IUs7JVRdMyNOQywzVSErQjxYMDFYPS9SXEUwMzxbLUNKIkosJVxPQ0xIKVxSXjdTXVkKK01WTTc5WD1fPiA9UCFXMCNbRzFcXTg2VD0rQzxGKEdFQUgiWTsyMlA+KSJASDk7WEkmQURHKSI4PTdINEAKK00nQUhGKSVJQzshVkUlUz0gTTk8QihUUSc6W0RNJjI1LCtBVF84Iy0wM0Q5KDE0MDsnSjIsSCosPidDNTcKK00sNjlAOUU0TTBDVkkqUkBNKEIoVi8hTDouQkQ/LyJcVCwzPjNLPSIzT1MwPyg9IyE3I1VZWC4rRFk+L0UKK00gPjQhWSAjV01TJSk9R1xCLUNcRCknVU1LIyk2MjMkSCwjLE47PERTKCIkUCtSXEE3WFhHKFFcSis1RToKK006MVpRJ1M9I086LEoqNTUuOzw4TigiRTArQTUkOyNBKTE0JSIvRCA9KTsiPE0rLEkpIzk1KlVZPzc1RE8KK00uI0ZIKSFYRicxVFAuMUQ6LVJIQi5CTFIrUz48UU5CRFMjTEEpTjcvNkNGIFw/TCVfUCddIC9OLSdDKSUKK003IURWKUJURTdUUkcsRi03KzIwSSdBSVtNIjw9JkIsQShSIE40IVw8KFFIRDU2PUYoWSxKNEYuRkciMEIKK00zIy1PTzI8QSk0SSU+KEhDOSVNRTM1KUQ3UihHRUguLkQiLEIsNTk7N1VRS05UXFlGUjUgL0JURkAlIFgKK00nQ1kpKFNASC0iWSMwN04/TkZaWkIzJERRSz07Oj0nO1ZdXz1JXVAhV0AnPyAvTjEoQ0ExOUE0WCoiNEMKK006JSpKKkUlKCpSJEgpMiolTlIwOSVSLEIoUihZNUFcOihRUEQ1Jj1FJzlESzUmTkpGUiBDNENVVE9CQDoKK00nI1kiQChYPTckXTcxNDk2NTIkSUc4UjZEUVg+KyUhNDU1JUVMU1xPRFFcVStBWEBAJShaJlNBJCczKEMKK00rIjxeL0heRlJYOyNCIlRCVEtVNzlcUz5ZXkM+ST4gIVlQJ0YgL05GK0NdRD1BSSAsIkRFOiVOWCwkWSYKK00sIkxULCJCLVFCWD8nUlBNKyI4WjdSOD8qIiBNNFVZQigqSFg2RyZUSVI4RjY0LVZSUkRBKCNFIEBJQEAKK002REEtMDQtLDMyIE9KOipMSFJERCpERSsyVSE8TVQkSUVSKEspQUhBQTRYVSYzRSEnQzRBKiI0XC9JRyEKK01ZKUczRUMsR1lcOS84PidWX09fW1BfUCJfUCNbR0FITi81SDYqMVRJJlQ1IUxSPVU1IyxAKkIkPTdKVEkKK00nQUhCKTIkPygjKDsnMig/KFUlRjkyKio1VD07Rjo4RihDXEc7S1xIKDI0Vi5FQEA1NTkzNiVVPDkmKEUKK00oWFo5QVMsQCkjJSk1Vl5LOSMlITFCQScwQkBDQUU6JkFXXF41QihNLzJMWC5EKUdGKkk4SShUSihcXycKK000RTE9OVZRVzxHTz8gPVQhWDAjW0khWFQyRiwyKjFUQSY0UShNQVlEMiMsPSlSQEU5OzBJJyE8QilCJEEKK00qI0A4JlIoQShVIUY5IVo0NzUhRkdKNEIoJDBNPDwgSScxVE8vJVQ+MjRJKTM1KTA1NTxEKik+RUNTOD0KK00oIlkjNCY+QjcyTFQuQUBXLEIgQEIlTi5CV1BZNDFURy4iLFItM11aSFtNUEs5KEooXFZaLjNdJDRVUUcKK005RztCID5AIVpAI1tMUjhZNVckOCxCOEgnNE0xUiJBQTEzQEcsUyxLO0tcUigxXEssMkhHKkNcQCgiPEUKK00qRF09ODIuRztFUVBKSyxHKSREUjxcTEwoUiRDLkZIQzEkLSEwVF0rMlRQQSs6PlpJNDBHKUJYXDFWLkIKK001IlhVLTFIWSpBUEBDJj4qQUdQVzNBTEotQVxNLFNeJ09NOiNROiRRKk5HJy0jXTA2NiFLPlhbXCBPXCAKK01eWSg9K0MxNSRCOEEqMiBWLCssSjY3IEUpIjA8JiVSQSsxUDcpIiREJ0FEQyUhVEQnMihfOjZEQUA0OEYKK00yV15HKDFcUitFXl4pMiBCKENZOTNDSTk1NVE1NlUtPiohVi5GVT1XJlIwQy9VKkdIJUktMENJNDBCQEgKK01GVD4xP0VDOTA1LEgtIzBWLUQhJDQoOjMxKVRGKEIvM0xXRS9YLidCV04zNFgwKzsgL04yJyMgXjZBKEMKK00nMjQ+LlM+VSlEWUQqMiw8KEFZQ0oiVDolIjBCKSFYPipBKDkoMVREMDZFRydIVTArNTYkSiFYPCwiUT0KK01PQjQ+J1FUVzQ0MFIzVEUuMkUhKDRSLEFGKjU6PiFMQihTRShJWiEuMlNISzBTJD0pKVUzRyhFO1QzUS4KK00oUlxPK0MgWzA1XjhIRSo8KFIkQVQqWVIyLUM5Vk07OVMuNCFaICdGIClKQyojQSg5QUxLKFJMQi9ELyoKK00rRFVHLDJcSipSNUxMUzg/JyAsTVdCNEEqUTg+KjI4SC9WIUMoKiFALjVeME0yOEYtMllBUVJYQygxTFYKK00zM1hOMjQpJTAkOF4yMiRJSitBSkEyKEQqIzEiTCo1KTMzQEEuIkA9KjolOElYRT1VU0UrKDJUTSpCTFgKK00vVk5NTkYuUytSIEZbK01HMV47SVpOO0ZXL0giX1AjW0UxUEgsJSgxKDFYQiciQDdLMy0sPEJQQyoiMDcKK00oOCRQJ0FIQSkiOD4kQTw0JkIkPykkNUw5QjVOLjFMUTkqUEQoQlxBJFREQCdCJEIsNEE2LjZJMjgmKTgKK001VjhIKChUUz8wXEEoJD0pNFVVTTNCXSk5NDRRMipZNEdYPTE6PCBZNUJAVyxCTFYwM0U0OjY1SigyIEMKK00pPS5XN1JXOVZdTzxXXitDID4gIVdAI1tFIURILVU4MSdBSD4mQkw7TFM1JzwiWEIpMkg9KihAUCchPEEKK00pMjg+JSFIMCVBWD8pRD1MOSFdWDBBXFs6OlRBJlJAPiRETEAnIVg9KkQhLCw2ISY0RT0tMyVMQyhJOFwKK00/QFw/JyQ9JDJVXU0wQlUhNEM4SDIrITtLKF04OztUVDQyLFIrMixPLyM5OzxWWVEoIVRBKF06WDcyVz0KK01YPidCWU47SiA+RCFZMCNVSFIsTzAmIDopQiBEJ0JUQ1BDRSI7IzhOLDMsRCw5LFkoMVxKLCJcRSYhUDUKK00mUjhIKkQ1QzgiIio0Ik0lPTtISSlCXDwjVSRJKDIgOyozUSYrNUhfMjRVIzBFJEEqSjEqQjFARCg1ISIKK00xNj1SLzJcXzEyUEg0OzFETzotNzorXFIzUiRQKlIkTS5DOURAV1lcK0I0QyovIyU1UytZIi9cIF4pND4KK00pQjUpJFIgPCZBREYmWkxMOThQUyoyLEIkQykhKEFcOSgxWEEnQSQ2JUEsQChCNEo8JlxFOFQ8RS0kTlQKK00pUjBBKSZdQCYhSDkoUVksODJZPDRFWTI2RUU+K0FZJT0xREUoQilBQzRRM0c0VE8xJVBSNilRMEooOVoKK00xRT1QL0U4TzAzLEgqJCBFJiM5JCdSLEAoMjMwRlc5L1c+I0FZIC9CIE44IF5ZJDopIk0tJFFUOCVBPEUKK00mOyBPODg8UCoiMEglQ0UoKEFUNigxXEMnQFwyJCBcPShCPEw8JlQ+OyRYRi5VIlUpIVQ9KVc1RCYhQDYKK00nQT0kNVI5MjFFISczVFkzKTFVLD5RREMnQVFBQjQ5OEdUJE0vJFhLNklVNkxZKiMyRU1SLVRcSi8iWEAKK00oM0hCJkNJJScyJD4nUis0RzcxLVdeJ0JZPkdJWkArSyAvQkAoQkRSNVFQRSdBWDspIVpdLDVGIi4jME8KK00sMVkiNFJMQidCSEoqUjQ0JVE0NCkyTEsqRj1JJ1dROiw0MTxQQlBGKFJFXDtCJD0mIVA2MCUkQjMjXScKK00vNDUkMjI8STYoMD4pUixBPChZITc6LFwrU0klKkYiSDZcIkVDVCkzPCM5LiojSEwnQiBbKSFZIjQiJEUKK00oQixGWjotTDRPN1peX1glX1AjW0MxXEAoJCAuJ1FMOyZCOSxJQylONTJMRygiJDMoIlQxKUFMQikyIEMKK00lIVg0JFFYPikzQVI6MiU5NCI8TylbOEwoQyVbM1BUQClTND4rJTVGNSYhLTY2OTg3JjRHKTY8MSkiJEAKK00nOFM7MUU6MjBTLTcpODpDNklRXkJVUSktJSEnNkIoXywyTFAxIkRDLEtQSygxXEMpKk1POjJXOFYtV0AKK01XXj9GID48IVkgI1tCIUA8KTQoLichPDgmUjEsSVMhSDNSPEgpIjQ1KiM8MykhREIpQiBAJCE4LiNRUD4KK00pM0lSOVFJQjUyPFcrS0RJKCM6IjYxJEApMyg5KTRVPDJFMSEyVUktNDU8PihGTDYoQVg8JUhXODA1TjQKK00uUyEvJ1hGRzZKMitGJjUqLVUxIjUxVFkrIjBHMDI8QSxLREgnQiBDKSpNUDkyR0BYXkNLWS5PSiA+VCEKK01aQCNZRTIkQSpESDUpIVRAJ0JBM00jKUEyQlxTK0JcOytDXDsqMVhLLDJESCVBUDMlIiRFKkNBSThRTU4KK004MyBbLVw8USkzTis6MVRJKkMwNykkRTYxJFxaMEUtIzFEWEIrJzQ7KUIgQSc5S0AvRiI4LTMhKyZITlEKK004Wko6SVY0XCpUXSA0QUxaKkIsRzBSTEUuPCRKJ0IkSCo7SVM3Ml9WXz9fX15QL18gP1QgXlg4PidBUFYKK00lMUg8JzZGRS9EQEkzRFRNKFFcQiVBTDgkIig8KSIoRClBNDQkQUhCKEI0TTw2MEEwViRBLkFCUipBXVMKK00lMUxBJ1IkRSgySTM3Ni0+NzUpTjlWLUYrMiw/KFI4PCYxMlRVREkuQ1NRVzY2RVw9KjYtQTVBKTBTOFsKK01BNSRKLTJATytTR0ArQVo6JyIoSkY5MyhKPS9DVl1bPldeK0NYQCtDIC9NXCVRTDotISw4JkFdTkpULSoKK00pVFEoKlIsPyhBKEApMSg+JkIwRChCKDEkISA4KCIgQipXJUQmVF1EJzNYPk1SPEA9MTg9JzFQQScxQEEKK00yJSUzM0RVIjdVRTY2Ijg/JlFcRCZBPDJNTSUkNEkkWTwlIUg/V0JLRShRPDM0KFUuWEUvKSJcQysyMFwKK01YMkA8RlFEPCpaJjlSOlc3WU4rR1leQ0paXkgiWlAjVUMyID0nU0Q3JyFYQzxbMTA0QkUkMFMgSilCRDgKK00oUjQ2KFFYSysiPEclQTQ0JyIwRCpCVUg3MVk2PEIoWChcME8oV1RDKTIoRCoiJDgoND0uMzQ5JS5FTS8KK00xVFxHKSIgRClBWDslW0s+MTVKNy42XTA5N14gTyleNzkkPFcqQzIjMjI0UigyPEMuTjBLKDo4QSdSWkMKK01HLTpZWD9DWyE/XiFfQCdfID9YIF5XODwmMTRKJUFAOjJCREwvRChDMzYkRSkhXEUlITg1JFEwOSdSMD8KK00oQSw4KCIwQSgyKEY8JkhBLlVYOjExRTwnUiA2J0IoRCchTD8qRC0vNzVFMTc2VTk4RV1BLyI8PydXUEQKK00mMUY2SSRJLUJEOz1YOUE3SFlVVDFEKSYtVCo1LTNcXiZTQF0tRE81KzFAUCkxPD05JycnS11PNVY9Vz4KK01XXitDWEAnQiA+LCBeVlA1JUEsSCUhODg0IlxOLyQgQDI1TEMpIVxFJCE8OiQxKDcnUjg/KCEkNigiMEEKK00oMVxEPCZIOzFWJDYxMUlCKSFcMiZBXD4mMUw3KENNJTQ0TSMzVV0sNTUxNy1CLDsmV0RBJVE+OEdUNTIKK01CRCs1VkhdNEsqRVszJDEnLVQqNS0zVFglMyxbKlRbNSlBPFAoMSxAOkc7ME4uMz5YTjtHWi5LS1pAJ0oKK00gPkwgTFdUPiYhQE0mIUg8NjNAVDA0NEIwNThIKlI4TCVBSDwlMTg7KUJYRikxODspMkRGKUI8RjlWLD4KK00zRlw7MCFNRylBWDcoQCxBT1IoOygjRF8yRChaMUU4XzIkRS0tUkBAKCgkSSchTj5LRC03RDRDQ1k5JTwKK01PK1FdMjNcWStDRi4rQzxZJiMkVSpFIzwpMThXKVFAPjlXR0BTT1NYXyA3X0A/WCFfQCdfICldRydRMDYKK00nMSw4JiFIPy9DTSEoNTk6LSIoRChRMDUkUTAwJ0FQSidSKD0hIic4KSI0TjpWUEMqJzQ3JSVBMSchTEEKK00nUVxDJlIoSStDUS00NT0/NjVRNjUmPjgwQiRIKSQ4PSYxUzJZNEk+QEVbOldNS0FIN0EtMDQ8XTJIWFkKK00zNExISENIVi81PzkyKSIvQzhBRzklWzNUPTc4Vz1XPFdeL0BXQCtCICohPSYhJDQmUSQ2JUFQPy9DUF0KK00mVSEyLCIoRChRKDMkMSguJyFQTCdSKD0oMCxDViI4QismTUwnMzFYJFE9PTYhUDgnMUw7JzFAQigyOFQKK00wVDksNSRZMTIkQT5EU1w9KSIhIyYxODpVLV0lOFghOlVNVzJYKloiM1QlJy40SjEuNFEnKElQVS0jKTkKK01WJCYyRShaKzo2MUVXPVM/WF47Rlk+Q0taLjgiWkAiQDtCJDMmMiA1JkFIRCokLF0wUVkpM0M4SSpSSDYKK00lMSw0JEIgQy0iOEkpIkAjKj0kTCpCWUI5MiBbQUFANzdVSEMmQihDKCIoQCoyNEQrQ0xcMERJJDFTWSEKK003SSUhKEJERTNSQD4nTVNQMFY2IjguQ0lWLlpdQkRUWC4iXSVCMyEhL1IuPyxSUFE3PjkqRilGL0M2MT0KK005TldWX19YJV9YK1xeQCdeID9cIE0lLD8nIUg1JFEwNCcyLFcvMUA+NlU4XSghTEEkMTA5JEEkOydCQD8KK00pQiBCJyIsQidCLEM4VkhIJzg8VDpDPDckQVQ5JlFMIydMMEkvRCk1NERFNDhUUSkzOk5CLkI0QCZUPEcKK00mUF49ViYpNT1GIzRVPjJIPCRMXzIzKTxCQ0EtMkQ4RFZTVFguVT85MzxOKTY1NT04Nj80VU03N1Y9VzsKK01XTis/WEArQSAvTSkmIUQ4JFEkMiRBOD8tVCg0JUUtKy4yIDsoMSgxJUEgLyYxWEooMkBCKSIgRylCKEMKK00oNi1KKEJGKiwnISImUFQ6JlFQPSZBTD4oMzhaMlQ8XzJFRSIuU1pBR0M4QSchPSMoUUAtR00pPTZHOTwKK01UTUdASzdZMS9UPE81SFBcMlQ5IidNNFgtQyE5VVRPMUUmITw3NilOV11fPVdeK0ZZLj9KWV5IIVowJ0gKK00gL006KDFMPSYhNDYlQVRFLyQ0PCZEVSgvUjxCKiE0MyYhKDMnMjRSKjMgSisiQE8rQkhKKFVJQykzIjgKK00tNzUlKFFQQigyPEEnUixFKTMwVDBTVFUwJFxYLDNaS0kjTEYoMVEyLEIoL0o+LTs3JyVBWS4vSE5IQSwKK0guQ1xBNDhAVjBTSFonXUBWK0JdPVo1V0BHRV09NiU5T1svP11eX1NfX09fX15fWCFfMCdfICAgIAorIAorZW5kCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdHRhci50YXIgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdHRhci50YXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwMTgyYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90ZXN0dGFyLnRhcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weSBiL2xpYi9weXRob24yLjcvdGVzdC90Zl9pbmhlcml0X2NoZWNrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YjgwZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weQpAQCAtMCwwICsxLDI1IEBACisjIEhlbHBlciBzY3JpcHQgZm9yIHRlc3RfdGVtcGZpbGUucHkuICBhcmd2WzJdIGlzIHRoZSBudW1iZXIgb2YgYSBmaWxlCisjIGRlc2NyaXB0b3Igd2hpY2ggc2hvdWxkIF9ub3RfIGJlIG9wZW4uICBDaGVjayB0aGlzIGJ5IGF0dGVtcHRpbmcgdG8KKyMgd3JpdGUgdG8gaXQgLS0gaWYgd2Ugc3VjY2VlZCwgc29tZXRoaW5nIGlzIHdyb25nLgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKKwordmVyYm9zZSA9IChzeXMuYXJndlsxXSA9PSAndicpCit0cnk6CisgICAgZmQgPSBpbnQoc3lzLmFyZ3ZbMl0pCisKKyAgICB0cnk6CisgICAgICAgIG9zLndyaXRlKGZkLCAiYmxhdCIpCisgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAjIFN1Y2Nlc3MgLS0gY291bGQgbm90IHdyaXRlIHRvIGZkLgorICAgICAgICBzeXMuZXhpdCgwKQorICAgIGVsc2U6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJmZCAlZCBpcyBvcGVuIGluIGNoaWxkIiAlIGZkKQorICAgICAgICBzeXMuZXhpdCgxKQorCitleGNlcHQgU3RhbmRhcmRFcnJvcjoKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICByYWlzZQorICAgIHN5cy5leGl0KDEpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGhyZWFkZWRfaW1wb3J0X2hhbmdlcnMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdGhyZWFkZWRfaW1wb3J0X2hhbmdlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc1MDg3NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC90aHJlYWRlZF9pbXBvcnRfaGFuZ2Vycy5weQpAQCAtMCwwICsxLDQyIEBACisjIFRoaXMgaXMgYSBoZWxwZXIgbW9kdWxlIGZvciB0ZXN0X3RocmVhZGVkX2ltcG9ydC4gIFRoZSB0ZXN0IGltcG9ydHMgdGhpcworIyBtb2R1bGUsIGFuZCB0aGlzIG1vZHVsZSB0cmllcyB0byBydW4gdmFyaW91cyBQeXRob24gbGlicmFyeSBmdW5jdGlvbnMgaW4KKyMgdGhlaXIgb3duIHRocmVhZCwgYXMgYSBzaWRlIGVmZmVjdCBvZiBiZWluZyBpbXBvcnRlZC4gIElmIHRoZSBzcGF3bmVkCisjIHRocmVhZCBkb2Vzbid0IGNvbXBsZXRlIGluIFRJTUVPVVQgc2Vjb25kcywgYW4gImFwcGVhcmVkIHRvIGhhbmciIG1lc3NhZ2UKKyMgaXMgYXBwZW5kZWQgdG8gdGhlIG1vZHVsZS1nbG9iYWwgYGVycm9yc2AgbGlzdC4gIFRoYXQgbGlzdCByZW1haW5zIGVtcHR5CisjIGlmIChhbmQgb25seSBpZikgYWxsIGZ1bmN0aW9ucyB0ZXN0ZWQgY29tcGxldGUuCisKK1RJTUVPVVQgPSAxMAorCitpbXBvcnQgdGhyZWFkaW5nCisKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IG9zLnBhdGgKKworZXJyb3JzID0gW10KKworIyBUaGlzIGNsYXNzIG1lcmVseSBydW5zIGEgZnVuY3Rpb24gaW4gaXRzIG93biB0aHJlYWQgVC4gIFRoZSB0aHJlYWQgaW1wb3J0aW5nCisjIHRoaXMgbW9kdWxlIGhvbGRzIHRoZSBpbXBvcnQgbG9jaywgc28gaWYgdGhlIGZ1bmN0aW9uIGNhbGxlZCBieSBUIHRyaWVzCisjIHRvIGRvIGl0cyBvd24gaW1wb3J0cyBpdCB3aWxsIGJsb2NrIHdhaXRpbmcgZm9yIHRoaXMgbW9kdWxlJ3MgaW1wb3J0CisjIHRvIGNvbXBsZXRlLgorY2xhc3MgV29ya2VyKHRocmVhZGluZy5UaHJlYWQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jdGlvbiwgYXJncyk6CisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCisgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYuZnVuY3Rpb24oKnNlbGYuYXJncykKKworZm9yIG5hbWUsIGZ1bmMsIGFyZ3MgaW4gWworICAgICAgICAjIEJ1ZyAxNDczNzY6ICBUZW1wb3JhcnlGaWxlIGh1bmcgb24gV2luZG93cywgc3RhcnRpbmcgaW4gUHl0aG9uIDIuNC4KKyAgICAgICAgKCJ0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlIiwgdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSwgKCkpLAorCisgICAgICAgICMgVGhlIHJlYWwgY2F1c2UgZm9yIGJ1ZyAxNDczNzY6ICBudHBhdGguYWJzcGF0aCgpIGNhdXNlZCB0aGUgaGFuZy4KKyAgICAgICAgKCJvcy5wYXRoLmFic3BhdGgiLCBvcy5wYXRoLmFic3BhdGgsICgnLicsKSksCisgICAgICAgIF06CisKKyAgICB0ID0gV29ya2VyKGZ1bmMsIGFyZ3MpCisgICAgdC5zdGFydCgpCisgICAgdC5qb2luKFRJTUVPVVQpCisgICAgaWYgdC5pc19hbGl2ZSgpOgorICAgICAgICBlcnJvcnMuYXBwZW5kKCIlcyBhcHBlYXJlZCB0byBoYW5nIiAlIG5hbWUpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdGltZV9oYXNobGliLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3RpbWVfaGFzaGxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmY3MDdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3RpbWVfaGFzaGxpYi5weQpAQCAtMCwwICsxLDg3IEBACisjIEl0J3MgaW50ZW5kZWQgdGhhdCB0aGlzIHNjcmlwdCBiZSBydW4gYnkgaGFuZC4gIEl0IHJ1bnMgc3BlZWQgdGVzdHMgb24KKyMgaGFzaGxpYiBmdW5jdGlvbnM7IGl0IGRvZXMgbm90IHRlc3QgZm9yIGNvcnJlY3RuZXNzLgorCitpbXBvcnQgc3lzLCB0aW1lCitpbXBvcnQgaGFzaGxpYgorCisKK2RlZiBjcmVhdG9yRnVuYygpOgorICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgImVlaywgY3JlYXRvckZ1bmMgbm90IG92ZXJyaWRkZW4iCisKK2RlZiB0ZXN0X3NjYWxlZF9tc2coc2NhbGUsIG5hbWUpOgorICAgIGl0ZXJhdGlvbnMgPSAxMDYyMDEvc2NhbGUgKiAyMAorICAgIGxvbmdTdHIgPSAnWicqc2NhbGUKKworICAgIGxvY2FsQ0YgPSBjcmVhdG9yRnVuYworICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICBmb3IgZiBpbiB4cmFuZ2UoaXRlcmF0aW9ucyk6CisgICAgICAgIHggPSBsb2NhbENGKGxvbmdTdHIpLmRpZ2VzdCgpCisgICAgZW5kID0gdGltZS50aW1lKCkKKworICAgIHByaW50ICgnJTIuMmYnICUgKGVuZC1zdGFydCkpLCAic2Vjb25kcyIsIGl0ZXJhdGlvbnMsICJ4IiwgbGVuKGxvbmdTdHIpLCAiYnl0ZXMiLCBuYW1lCisKK2RlZiB0ZXN0X2NyZWF0ZSgpOgorICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKKyAgICBmb3IgZiBpbiB4cmFuZ2UoMjAwMDApOgorICAgICAgICBkID0gY3JlYXRvckZ1bmMoKQorICAgIGVuZCA9IHRpbWUudGltZSgpCisKKyAgICBwcmludCAoJyUyLjJmJyAlIChlbmQtc3RhcnQpKSwgInNlY29uZHMiLCAnWzIwMDAwIGNyZWF0aW9uc10nCisKK2RlZiB0ZXN0X3plcm8oKToKKyAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgZm9yIGYgaW4geHJhbmdlKDIwMDAwKToKKyAgICAgICAgeCA9IGNyZWF0b3JGdW5jKCkuZGlnZXN0KCkKKyAgICBlbmQgPSB0aW1lLnRpbWUoKQorCisgICAgcHJpbnQgKCclMi4yZicgJSAoZW5kLXN0YXJ0KSksICJzZWNvbmRzIiwgJ1syMDAwMCAiIiBkaWdlc3RzXScKKworCisKK2hOYW1lID0gc3lzLmFyZ3ZbMV0KKworIworIyBzZXR1cCBvdXIgY3JlYXRvckZ1bmMgdG8gdGVzdCB0aGUgcmVxdWVzdGVkIGhhc2gKKyMKK2lmIGhOYW1lIGluICgnX21kNScsICdfc2hhJyk6CisgICAgZXhlYyAnaW1wb3J0ICcraE5hbWUKKyAgICBleGVjICdjcmVhdG9yRnVuYyA9ICcraE5hbWUrJy5uZXcnCisgICAgcHJpbnQgInRlc3Rpbmcgc3BlZWQgb2Ygb2xkIiwgaE5hbWUsICJsZWdhY3kgaW50ZXJmYWNlIgorZWxpZiBoTmFtZSA9PSAnX2hhc2hsaWInIGFuZCBsZW4oc3lzLmFyZ3YpID4gMzoKKyAgICBpbXBvcnQgX2hhc2hsaWIKKyAgICBleGVjICdjcmVhdG9yRnVuYyA9IF9oYXNobGliLiVzJyAlIHN5cy5hcmd2WzJdCisgICAgcHJpbnQgInRlc3Rpbmcgc3BlZWQgb2YgX2hhc2hsaWIuJXMiICUgc3lzLmFyZ3ZbMl0sIGdldGF0dHIoX2hhc2hsaWIsIHN5cy5hcmd2WzJdKQorZWxpZiBoTmFtZSA9PSAnX2hhc2hsaWInIGFuZCBsZW4oc3lzLmFyZ3YpID09IDM6CisgICAgaW1wb3J0IF9oYXNobGliCisgICAgZXhlYyAnY3JlYXRvckZ1bmMgPSBsYW1iZGEgeD1faGFzaGxpYi5uZXcgOiB4KCVyKScgJSBzeXMuYXJndlsyXQorICAgIHByaW50ICJ0ZXN0aW5nIHNwZWVkIG9mIF9oYXNobGliLm5ldyglcikiICUgc3lzLmFyZ3ZbMl0KK2VsaWYgaGFzYXR0cihoYXNobGliLCBoTmFtZSkgYW5kIGNhbGxhYmxlKGdldGF0dHIoaGFzaGxpYiwgaE5hbWUpKToKKyAgICBjcmVhdG9yRnVuYyA9IGdldGF0dHIoaGFzaGxpYiwgaE5hbWUpCisgICAgcHJpbnQgInRlc3Rpbmcgc3BlZWQgb2YgaGFzaGxpYi4iK2hOYW1lLCBnZXRhdHRyKGhhc2hsaWIsIGhOYW1lKQorZWxzZToKKyAgICBleGVjICJjcmVhdG9yRnVuYyA9IGxhbWJkYSB4PWhhc2hsaWIubmV3IDogeCglcikiICUgaE5hbWUKKyAgICBwcmludCAidGVzdGluZyBzcGVlZCBvZiBoYXNobGliLm5ldyglcikiICUgaE5hbWUKKwordHJ5OgorICAgIHRlc3RfY3JlYXRlKCkKK2V4Y2VwdCBWYWx1ZUVycm9yOgorICAgIHByaW50CisgICAgcHJpbnQgInBhc3MgYXJndW1lbnQocykgbmFtaW5nIHRoZSBoYXNoIHRvIHJ1biBhIHNwZWVkIHRlc3Qgb246IgorICAgIHByaW50ICIgJ19tZDUnIGFuZCAnX3NoYScgdGVzdCB0aGUgbGVnYWN5IGJ1aWx0aW4gbWQ1IGFuZCBzaGEiCisgICAgcHJpbnQgIiAnX2hhc2hsaWInICdvcGVuc3NsX2hOYW1lJyAnZmFzdCcgdGVzdHMgdGhlIGJ1aWx0aW4gX2hhc2hsaWIiCisgICAgcHJpbnQgIiAnX2hhc2hsaWInICdoTmFtZScgdGVzdHMgYnVpbHRpbiBfaGFzaGxpYi5uZXcoc2hhRk9PKSIKKyAgICBwcmludCAiICdoTmFtZScgdGVzdHMgdGhlIGhhc2hsaWIuaE5hbWUoKSBpbXBsZW1lbnRhdGlvbiBpZiBpdCBleGlzdHMiCisgICAgcHJpbnQgIiAgICAgICAgIG90aGVyd2lzZSBpdCB1c2VzIGhhc2hsaWIubmV3KGhOYW1lKS4iCisgICAgcHJpbnQKKyAgICByYWlzZQorCit0ZXN0X3plcm8oKQordGVzdF9zY2FsZWRfbXNnKHNjYWxlPTEwNjIwMSwgbmFtZT0nW2h1Z2UgZGF0YV0nKQordGVzdF9zY2FsZWRfbXNnKHNjYWxlPTEwNjIwLCBuYW1lPSdbbGFyZ2UgZGF0YV0nKQordGVzdF9zY2FsZWRfbXNnKHNjYWxlPTEwNjIsIG5hbWU9J1ttZWRpdW0gZGF0YV0nKQordGVzdF9zY2FsZWRfbXNnKHNjYWxlPTQyNCwgbmFtZT0nWzQqc21hbGwgZGF0YV0nKQordGVzdF9zY2FsZWRfbXNnKHNjYWxlPTMzNiwgbmFtZT0nWzMqc21hbGwgZGF0YV0nKQordGVzdF9zY2FsZWRfbXNnKHNjYWxlPTIxMiwgbmFtZT0nWzIqc21hbGwgZGF0YV0nKQordGVzdF9zY2FsZWRfbXNnKHNjYWxlPTEwNiwgbmFtZT0nW3NtYWxsIGRhdGFdJykKK3Rlc3Rfc2NhbGVkX21zZyhzY2FsZT1jcmVhdG9yRnVuYygpLmRpZ2VzdF9zaXplLCBuYW1lPSdbZGlnZXN0X3NpemUgZGF0YV0nKQordGVzdF9zY2FsZWRfbXNnKHNjYWxlPTEwLCBuYW1lPSdbdGlueSBkYXRhXScpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdG9rZW5pemVfdGVzdHMudHh0IGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rva2VuaXplX3Rlc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWYzYmYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3Rva2VuaXplX3Rlc3RzLnR4dApAQCAtMCwwICsxLDE3OCBAQAorIyBUZXN0cyBmb3IgdGhlICd0b2tlbml6ZScgbW9kdWxlLgorIyBMYXJnZSBiaXRzIHN0b2xlbiBmcm9tIHRlc3RfZ3JhbW1hci5weS4gCisKKyMgQ29tbWVudHMKKyIjIgorIycKKyMiCisjXAorICAgICAgICMKKyAgICAjIGFiYworJycnIworIycnJworCit4ID0gMSAgIworCisjIEJhbGFuY2luZyBjb250aW51YXRpb24KKworYSA9ICgzLCA0LAorICA1LCA2KQoreSA9IFszLCA0LAorICA1XQoreiA9IHsnYSc6NSwKKyAgJ2InOjZ9Cit4ID0gKGxlbihgeWApICsgNSp4IC0gYVsKKyAgIDMgXQorICAgLSB4ICsgbGVuKHsKKyAgIH0KKyAgICApCisgICkKKworIyBCYWNrc2xhc2ggbWVhbnMgbGluZSBjb250aW51YXRpb246Cit4ID0gMSBcCisrIDEKKworIyBCYWNrc2xhc2ggZG9lcyBub3QgbWVhbnMgY29udGludWF0aW9uIGluIGNvbW1lbnRzIDpcCit4ID0gMAorCisjIE9yZGluYXJ5IGludGVnZXJzCisweGZmIDw+IDI1NQorMDM3NyA8PiAyNTUKKzIxNDc0ODM2NDcgICAhPSAwMTc3Nzc3Nzc3NzcKKy0yMTQ3NDgzNjQ3LTEgIT0gMDIwMDAwMDAwMDAwCiswMzc3Nzc3Nzc3NzcgIT0gLTEKKzB4ZmZmZmZmZmYgIT0gLTEKKworIyBMb25nIGludGVnZXJzCit4ID0gMEwKK3ggPSAwbAoreCA9IDB4ZmZmZmZmZmZmZmZmZmZmZkwKK3ggPSAweGZmZmZmZmZmZmZmZmZmZmZsCit4ID0gMDc3Nzc3Nzc3Nzc3Nzc3Nzc3TAoreCA9IDA3Nzc3Nzc3Nzc3Nzc3Nzc3N2wKK3ggPSAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTBMCit4ID0gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwbAorCisjIEZsb2F0aW5nLXBvaW50IG51bWJlcnMKK3ggPSAzLjE0Cit4ID0gMzE0LgoreCA9IDAuMzE0CisjIFhYWCB4ID0gMDAwLjMxNAoreCA9IC4zMTQKK3ggPSAzZTE0Cit4ID0gM0UxNAoreCA9IDNlLTE0Cit4ID0gM2UrMTQKK3ggPSAzLmUxNAoreCA9IC4zZTE0Cit4ID0gMy4xZTQKKworIyBTdHJpbmcgbGl0ZXJhbHMKK3ggPSAnJzsgeSA9ICIiOworeCA9ICdcJyc7IHkgPSAiJyI7Cit4ID0gJyInOyB5ID0gIlwiIjsKK3ggPSAiZG9lc24ndCBcInNocmlua1wiIGRvZXMgaXQiCit5ID0gJ2RvZXNuXCd0ICJzaHJpbmsiIGRvZXMgaXQnCit4ID0gImRvZXMgXCJzaHJpbmtcIiBkb2Vzbid0IGl0IgoreSA9ICdkb2VzICJzaHJpbmsiIGRvZXNuXCd0IGl0JworeCA9ICIiIgorVGhlICJxdWljayIKK2Jyb3duIGZveAoranVtcHMgb3ZlcgordGhlICdsYXp5JyBkb2cuCisiIiIKK3kgPSAnXG5UaGUgInF1aWNrIlxuYnJvd24gZm94XG5qdW1wcyBvdmVyXG50aGUgXCdsYXp5XCcgZG9nLlxuJworeSA9ICcnJworVGhlICJxdWljayIKK2Jyb3duIGZveAoranVtcHMgb3ZlcgordGhlICdsYXp5JyBkb2cuCisnJyc7Cit5ID0gIlxuXAorVGhlIFwicXVpY2tcIlxuXAorYnJvd24gZm94XG5cCitqdW1wcyBvdmVyXG5cCit0aGUgJ2xhenknIGRvZy5cblwKKyI7Cit5ID0gJ1xuXAorVGhlIFwicXVpY2tcIlxuXAorYnJvd24gZm94XG5cCitqdW1wcyBvdmVyXG5cCit0aGUgXCdsYXp5XCcgZG9nLlxuXAorJzsKK3ggPSByJ1xcJyArIFInXFwnCit4ID0gcidcJycgKyAnJworeSA9IHInJycKK2ZvbyBiYXIgXFwKK2JheicnJyArIFInJycKK2ZvbycnJworeSA9IHIiIiJmb28KK2JhciBcXCBiYXoKKyIiIiArIFInJydzcGFtCisnJycKK3ggPSB1J2FiYycgKyBVJ0FCQycKK3kgPSB1ImFiYyIgKyBVIkFCQyIKK3ggPSB1cidhYmMnICsgVXInQUJDJyArIHVSJ0FCQycgKyBVUidBQkMnCit5ID0gdXIiYWJjIiArIFVyIkFCQyIgKyB1UiJBQkMiICsgVVIiQUJDIgoreCA9IHVyJ1xcJyArIFVSJ1xcJworeCA9IHVyJ1wnJyArICcnCit5ID0gdXInJycKK2ZvbyBiYXIgXFwKK2JheicnJyArIFVSJycnCitmb28nJycKK3kgPSBVciIiImZvbworYmFyIFxcIGJhegorIiIiICsgdVInJydzcGFtCisnJycKKworIyBJbmRlbnRhdGlvbgoraWYgMToKKyAgICB4ID0gMgoraWYgMToKKyAgICAgICAgeCA9IDIKK2lmIDE6CisgICAgd2hpbGUgMDoKKyAgICAgaWYgMDoKKyAgICAgICAgICAgeCA9IDIKKyAgICAgeCA9IDIKK2lmIDA6CisgIGlmIDI6CisgICB3aGlsZSAwOgorICAgICAgICBpZiAxOgorICAgICAgICAgIHggPSAyCisKKyMgT3BlcmF0b3JzCisKK2RlZiBkMjIoYSwgYiwgYz0xLCBkPTIpOiBwYXNzCitkZWYgZDAxdihhPTEsICpyZXN0dCwgKipyZXN0ZCk6IHBhc3MKKworKHgsIHkpIDw+ICh7J2EnOjF9LCB7J2InOjJ9KQorCisjIGNvbXBhcmlzb24KK2lmIDEgPCAxID4gMSA9PSAxID49IDEgPD0gMSA8PiAxICE9IDEgaW4gMSBub3QgaW4gMSBpcyAxIGlzIG5vdCAxOiBwYXNzCisKKyMgYmluYXJ5Cit4ID0gMSAmIDEKK3ggPSAxIF4gMQoreCA9IDEgfCAxCisKKyMgc2hpZnQKK3ggPSAxIDw8IDEgPj4gMQorCisjIGFkZGl0aXZlCit4ID0gMSAtIDEgKyAxIC0gMSArIDEKKworIyBtdWx0aXBsaWNhdGl2ZQoreCA9IDEgLyAxICogMSAlIDEKKworIyB1bmFyeQoreCA9IH4xIF4gMSAmIDEgfCAxICYgMSBeIC0xCit4ID0gLTEqMS8xICsgMSoxIC0gLS0tMSoxCisKKyMgc2VsZWN0b3IKK2ltcG9ydCBzeXMsIHRpbWUKK3ggPSBzeXMubW9kdWxlc1sndGltZSddLnRpbWUoKQorCitAc3RhdGljbWV0aG9kCitkZWYgZm9vKCk6IHBhc3MKKwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3RyYWNlZG1vZHVsZXMvX19pbml0X18ucHkgYi9saWIvcHl0aG9uMi43L3Rlc3QvdHJhY2VkbW9kdWxlcy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2ZhNGYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3RyYWNlZG1vZHVsZXMvX19pbml0X18ucHkKQEAgLTAsMCArMSw0IEBACisiIiJUaGlzIHBhY2thZ2UgY29udGFpbnMgbW9kdWxlcyB0aGF0IGhlbHAgdGVzdGluZyB0aGUgdHJhY2UucHkgbW9kdWxlLiBOb3RlCit0aGF0IHRoZSBleGFjdCBsb2NhdGlvbiBvZiBmdW5jdGlvbnMgaW4gdGhlc2UgbW9kdWxlcyBpcyBpbXBvcnRhbnQsIGFzIHRyYWNlLnB5Cit0YWtlcyB0aGUgcmVhbCBsaW5lIG51bWJlcnMgaW50byBhY2NvdW50LgorIiIiCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3QvdHJhY2VkbW9kdWxlcy90ZXN0bW9kLnB5IGIvbGliL3B5dGhvbjIuNy90ZXN0L3RyYWNlZG1vZHVsZXMvdGVzdG1vZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDI3NzZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3RyYWNlZG1vZHVsZXMvdGVzdG1vZC5weQpAQCAtMCwwICsxLDkgQEAKK2RlZiBmdW5jKHgpOgorICAgIGIgPSB4ICsgMQorICAgIHJldHVybiBiICsgMgorCitkZWYgZnVuYzIoKToKKyAgICAiIiJUZXN0IGZ1bmN0aW9uIGZvciBpc3N1ZSA5OTM2ICIiIgorICAgIHJldHVybiAoMSwKKyAgICAgICAgICAgIDIsCisgICAgICAgICAgICAzKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3dhcm5pbmdfdGVzdHMucHkgYi9saWIvcHl0aG9uMi43L3Rlc3Qvd2FybmluZ190ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDUxOWVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3dhcm5pbmdfdGVzdHMucHkKQEAgLTAsMCArMSw5IEBACisjIEhlbHBlciBtb2R1bGUgZm9yIHRlc3RpbmcgdGhlIHNraXBtb2R1bGVzIGFyZ3VtZW50IG9mIHdhcm5pbmdzLndhcm4oKQorCitpbXBvcnQgd2FybmluZ3MKKworZGVmIG91dGVyKG1lc3NhZ2UsIHN0YWNrbGV2ZWw9MSk6CisgICAgaW5uZXIobWVzc2FnZSwgc3RhY2tsZXZlbCkKKworZGVmIGlubmVyKG1lc3NhZ2UsIHN0YWNrbGV2ZWw9MSk6CisgICAgd2FybmluZ3Mud2FybihtZXNzYWdlLCBzdGFja2xldmVsPXN0YWNrbGV2ZWwpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3Rlc3Qvd2luX2NvbnNvbGVfaGFuZGxlci5weSBiL2xpYi9weXRob24yLjcvdGVzdC93aW5fY29uc29sZV9oYW5kbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZmNlZTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3Rlc3Qvd2luX2NvbnNvbGVfaGFuZGxlci5weQpAQCAtMCwwICsxLDQ5IEBACisiIiJTY3JpcHQgdXNlZCB0byB0ZXN0IG9zLmtpbGwgb24gV2luZG93cywgZm9yIGlzc3VlICMxMjIwMjEyCisKK1RoaXMgc2NyaXB0IGlzIHN0YXJ0ZWQgYXMgYSBzdWJwcm9jZXNzIGluIHRlc3Rfb3MgYW5kIGlzIHVzZWQgdG8gdGVzdCB0aGUKK0NUUkxfQ19FVkVOVCBhbmQgQ1RSTF9CUkVBS19FVkVOVCBzaWduYWxzLCB3aGljaCByZXF1aXJlcyBhIGN1c3RvbSBoYW5kbGVyCit0byBiZSB3cml0dGVuIGludG8gdGhlIGtpbGwgdGFyZ2V0LgorCitTZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNjg1MDQ5JTI4dj1WUy44NSUyOS5hc3B4IGZvciBhCitzaW1pbGFyIGV4YW1wbGUgaW4gQy4KKyIiIgorCitmcm9tIGN0eXBlcyBpbXBvcnQgd2ludHlwZXMsIFdJTkZVTkNUWVBFCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgY3R5cGVzCitpbXBvcnQgbW1hcAoraW1wb3J0IHN5cworCisjIEZ1bmN0aW9uIHByb3RvdHlwZSBmb3IgdGhlIGhhbmRsZXIgZnVuY3Rpb24uIFJldHVybnMgQk9PTCwgdGFrZXMgYSBEV09SRC4KK0hhbmRsZXJSb3V0aW5lID0gV0lORlVOQ1RZUEUod2ludHlwZXMuQk9PTCwgd2ludHlwZXMuRFdPUkQpCisKK2RlZiBfY3RybF9oYW5kbGVyKHNpZyk6CisgICAgIiIiSGFuZGxlIGEgc2lnIGV2ZW50IGFuZCByZXR1cm4gMCB0byB0ZXJtaW5hdGUgdGhlIHByb2Nlc3MiIiIKKyAgICBpZiBzaWcgPT0gc2lnbmFsLkNUUkxfQ19FVkVOVDoKKyAgICAgICAgcGFzcworICAgIGVsaWYgc2lnID09IHNpZ25hbC5DVFJMX0JSRUFLX0VWRU5UOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIlVOS05PV04gRVZFTlQiKQorICAgIHJldHVybiAwCisKK2N0cmxfaGFuZGxlciA9IEhhbmRsZXJSb3V0aW5lKF9jdHJsX2hhbmRsZXIpCisKKworU2V0Q29uc29sZUN0cmxIYW5kbGVyID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMi5TZXRDb25zb2xlQ3RybEhhbmRsZXIKK1NldENvbnNvbGVDdHJsSGFuZGxlci5hcmd0eXBlcyA9IChIYW5kbGVyUm91dGluZSwgd2ludHlwZXMuQk9PTCkKK1NldENvbnNvbGVDdHJsSGFuZGxlci5yZXN0eXBlID0gd2ludHlwZXMuQk9PTAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgICMgQWRkIG91ciBjb25zb2xlIGNvbnRyb2wgaGFuZGxpbmcgZnVuY3Rpb24gd2l0aCB2YWx1ZSAxCisgICAgaWYgbm90IFNldENvbnNvbGVDdHJsSGFuZGxlcihjdHJsX2hhbmRsZXIsIDEpOgorICAgICAgICBwcmludCgiVW5hYmxlIHRvIGFkZCBTZXRDb25zb2xlQ3RybEhhbmRsZXIiKQorICAgICAgICBleGl0KC0xKQorCisgICAgIyBBd2FrZW4gbWFpbCBwcm9jZXNzCisgICAgbSA9IG1tYXAubW1hcCgtMSwgMSwgc3lzLmFyZ3ZbMV0pCisgICAgbVswXSA9ICcxJworCisgICAgIyBEbyBub3RoaW5nIGJ1dCB3YWl0IGZvciB0aGUgc2lnbmFsCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3dyb25nY2VydC5wZW0gYi9saWIvcHl0aG9uMi43L3Rlc3Qvd3JvbmdjZXJ0LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjkyZjliCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3dyb25nY2VydC5wZW0KQEAgLTAsMCArMSwzMiBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJQ1hBSUJBQUtCZ1FDODlaTnhqVGdXZ3E3WjFnMHRKNjV3K2s3bE5BajVJZ2pMYjE1NVVrVXJ6MFhzSERuSAorRmxic1ZVZzJYdGs2K2JvMlVFWUl6TjdjSW01SW1wbXlXLzJ6MEoxSURWRGx2UjJ4SjY1OXhyRTB2NWMyY0I2VAorZjlsbk5Ud3BTb2VLMjROZDdKd3E0ajl2azk1ZkxyZHFzQnEwL0tWbHNDWGVpeFMvQ2FxcWR1WGZ2d0lEQVFBQgorQW9HQVFGa280dXlDZ3pmeHI0RXpiNE1wNXBOM05wcW55NStKZXkzcjhFalNBWDlPZ24rQ05ZZ29CY2R0RmdicQorMXlpZi8wc0s3b2hHQkpVOUZVQ0F3cnFOQkk5WkhCNnJjeTdkeCtnVUxPbVJCR2NrbG4xbzVTMStzbVZkbU9zVworN3pVVkxCVkJ5S3VOV3FUWUZsemZWZDZzNGlpWHRBRTJpSG4zR0N5WWRsSUN3ckVDUVFEaE1RVnhIZDNFRmJ6ZworU0ZtSkJUQVJsWjJHS0EzYzFnL2g5L1hia0VQUTkvUndJM3ZuakoyUmFTbmpsZm9MbDhUT2NmMHVPR2JPRXlGZQorMTlSdkNMWGpBa0VBMXMrVUU1emlGK1lWa1czV29sRENRMmtRNVdHOStjY2ZOZWJmaDZiNjdCN0xuNWlHMFNiZwora3k5Y2pzTzNqYk1KUXRsekFRbkgxODUwb1JENUdpNTFkUUpBSWJIQ0RMRFpVOU9rMVRJK0kyQmhWdUE2RjY2NgorbEVaN1RlWmFKU1lxMzRPYVVZVWRyd0c5T2Rxd1o5c3k5TFVhdjRFU3p1MmxoRVFjaENKcktNbjIzUUpBUmVxcworWkxIVWVUamZYa1ZrN2RIaFdQV1NsVVo2QWhtSWxBL0FRN1BheWcyLzh3TS9Ka1pFSkVQdkdWeWttczlpUFVydgorZnJBRFJyK2hBR2U0M0lld25RSkJBSldLWmxsUGdLdUVCUHdvRWxkSE5TOG5SdTYxRDdIenhFelEyeG5maitOaworMmZnZjFNQXp6VFJzaWtmR0VOaFZzVldlcU9jaWpXYjZnNWdzeUNtbFJwYz0KKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNzRENDQWhtZ0F3SUJBZ0lKQU9xWU9ZRkpmRUVvTUEwR0NTcUdTSWIzRFFFQkJRVUFNRVV4Q3pBSkJnTlYKK0JBWVRBa0ZWTVJNd0VRWURWUVFJRXdwVGIyMWxMVk4wWVhSbE1TRXdId1lEVlFRS0V4aEpiblJsY201bGRDQlgKK2FXUm5hWFJ6SUZCMGVTQk1kR1F3SGhjTk1EZ3dOakkyTVRneE5UVXlXaGNOTURrd05qSTJNVGd4TlRVeVdqQkYKK01Rc3dDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQk1LVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFQ2hNWVNXNTAKK1pYSnVaWFFnVjJsa1oybDBjeUJRZEhrZ1RIUmtNSUdmTUEwR0NTcUdTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0IKK2dRQzg5Wk54alRnV2dxN1oxZzB0SjY1dytrN2xOQWo1SWdqTGIxNTVVa1VyejBYc0hEbkhGbGJzVlVnMlh0azYKKytibzJVRVlJek43Y0ltNUltcG15Vy8yejBKMUlEVkRsdlIyeEo2NTl4ckUwdjVjMmNCNlRmOWxuTlR3cFNvZUsKKzI0TmQ3SndxNGo5dms5NWZMcmRxc0JxMC9LVmxzQ1hlaXhTL0NhcXFkdVhmdndJREFRQUJvNEduTUlHa01CMEcKK0ExVWREZ1FXQkJUY3RNdEkzRU85T2pMSTB4OVpvMmlma3dJaU5qQjFCZ05WSFNNRWJqQnNnQlRjdE10STNFTzkKK09qTEkweDlabzJpZmt3SWlOcUZKcEVjd1JURUxNQWtHQTFVRUJoTUNRVlV4RXpBUkJnTlZCQWdUQ2xOdmJXVXQKK1UzUmhkR1V4SVRBZkJnTlZCQW9UR0VsdWRHVnlibVYwSUZkcFpHZHBkSE1nVUhSNUlFeDBaSUlKQU9xWU9ZRkoKK2ZFRW9NQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQVF3YTdqeWEvRGZoYURuN0UKK3VzUGtwZ0lYOFdDTDJCMVNxblJUWEVaZkJQUFZxL2NVbUZHeUVWUlZBVHlTUnVNd2k4UFhiVmNPaFhYdW9jQSsKKzQzVytpSXNEOXBYYXBDWmhoT2VyQ3ExOFRDMWRXSzk4dkxVc29LOFBNakI2ZTVIL084YnFvanYwRWVDK2Z5Q3cKK2VTSGo1anBDOGlaS2pDSEJuK21BaTRjUTUxND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC94bWx0ZXN0ZGF0YS9zaW1wbGUtbnMueG1sIGIvbGliL3B5dGhvbjIuNy90ZXN0L3htbHRlc3RkYXRhL3NpbXBsZS1ucy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFmMzRiMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC94bWx0ZXN0ZGF0YS9zaW1wbGUtbnMueG1sCkBAIC0wLDAgKzEsNyBAQAorPD9waSBkYXRhPz4KKzwhLS0gY29tbWVudCAtLT4KKzxyb290IHhtbG5zPSduYW1lc3BhY2UnPgorICAgPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudD4KKyAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAorICAgPGVtcHR5LWVsZW1lbnQvPgorPC9yb290PgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3htbHRlc3RkYXRhL3NpbXBsZS54bWwgYi9saWIvcHl0aG9uMi43L3Rlc3QveG1sdGVzdGRhdGEvc2ltcGxlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODhjMmM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3htbHRlc3RkYXRhL3NpbXBsZS54bWwKQEAgLTAsMCArMSw2IEBACis8IS0tIGNvbW1lbnQgLS0+Cis8cm9vdD4KKyAgIDxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQ+CisgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWwKKyAgIDxlbXB0eS1lbGVtZW50Lz4KKzwvcm9vdD4KZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC94bWx0ZXN0ZGF0YS90ZXN0LnhtbCBiL2xpYi9weXRob24yLjcvdGVzdC94bWx0ZXN0ZGF0YS90ZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWY5MmZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3htbHRlc3RkYXRhL3Rlc3QueG1sCkBAIC0wLDAgKzEsMTE1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzxIVE1MIHhtbG5zOnBwPSJodHRwOi8vd3d3Lmlzb2dlbi5jb20vcGF1bC9wb3N0LXByb2Nlc3NvciI+Cis8VElUTEU+SW50cm9kdWN0aW9uIHRvIFhTTDwvVElUTEU+Cis8SDE+SW50cm9kdWN0aW9uIHRvIFhTTDwvSDE+CisJCisKKwkKKwkJPEhSLz4KKwkJPEgyPk92ZXJ2aWV3Cis8L0gyPgorCQk8VUw+CisJCQorCTxMST4xLkludHJvPC9MST4KKworCTxMST4yLkhpc3Rvcnk8L0xJPgorCisJPExJPjMuWFNMIEJhc2ljczwvTEk+CisKKwk8TEk+THVuY2g8L0xJPgorCisJPExJPjQuQW4gWE1MIERhdGEgTW9kZWw8L0xJPgorCisJPExJPjUuWFNMIFBhdHRlcm5zPC9MST4KKworCTxMST42LlhTTCBUZW1wbGF0ZXM8L0xJPgorCisJPExJPjcuWFNMIEZvcm1hdHRpbmcgTW9kZWwKKzwvTEk+CisKKwkJPC9VTD4KKwkKKworCisJCisKKwkKKwkJPEhSLz4KKwkJPEgyPkludHJvPC9IMj4KKwkJPFVMPgorCQkKKwk8TEk+V2hvIGFtIEk/PC9MST4KKworCTxMST5XaG8gYXJlIHlvdT88L0xJPgorCisJPExJPldoeSBhcmUgd2UgaGVyZT8KKzwvTEk+CisKKwkJPC9VTD4KKwkKKworCisJCisKKwkKKwkJPEhSLz4KKwkJPEgyPkhpc3Rvcnk6IFhNTCBhbmQgU0dNTDwvSDI+CisJCTxVTD4KKwkJCisJPExJPlhNTCBpcyBhIHN1YnNldCBvZiBTR01MLjwvTEk+CisKKwk8TEk+U0dNTCBhbGxvd3MgdGhlIHNlcGFyYXRpb24gb2YgYWJzdHJhY3QgY29udGVudCBmcm9tIGZvcm1hdHRpbmcuPC9MST4KKworCTxMST5BbHNvIG9uZSBvZiBYTUwncyBwcmltYXJ5IHZpcnR1ZXMgKGluIHRoZSBkb2MgcHVibGlzaGluZyBkb21haW4pLgorPC9MST4KKworCQk8L1VMPgorCQorCisKKwkKKworCQorCQk8SFIvPgorCQk8SDI+SGlzdG9yeTogV2hhdCBhcmUgc3R5bGVzaGVldHM/PC9IMj4KKwkJPFVMPgorCQkKKwk8TEk+U3R5bGVzaGVldHMgc3BlY2lmeSB0aGUgZm9ybWF0dGluZyBvZiBTR01ML1hNTCBkb2N1bWVudHMuPC9MST4KKworCTxMST5TdHlsZXNoZWV0cyBwdXQgdGhlICZxdW90O3N0eWxlJnF1b3Q7IGJhY2sgaW50byBkb2N1bWVudHMuPC9MST4KKworCTxMST5OZXcgWW9yayBUaW1lcyBjb250ZW50K05ZVCBTdHlsZXNoZWV0ID0gTllUIHBhcGVyCis8L0xJPgorCisJCTwvVUw+CisJCisKKworCQorCisJCisJCTxIUi8+CisJCTxIMj5IaXN0b3J5OiBGT1NJPC9IMj4KKwkJPFVMPgorCQkKKwk8TEk+Rk9TSTogJnF1b3Q7Rm9ybWF0dGVkIE91dHB1dCBTcGVjaWZpY2F0aW9uIEluc3RhbmNlJnF1b3Q7Cis8VUw+CisJPExJPk1JTC1TVEQtMjgwMDEKKwk8L0xJPgorCisJPExJPkZPU0kncyBhcmUgU0dNTCBkb2N1bWVudHMKKwk8L0xJPgorCisJPExJPkEgc3R5bGVzaGVldCBmb3IgYW5vdGhlciBkb2N1bWVudAorCTwvTEk+Cis8L1VMPjwvTEk+CisKKwk8TEk+T2Jzb2xldGUgYnV0IGltcGxlbWVudGVkLi4uCis8L0xJPgorCisJCTwvVUw+CisJCisKKworCQorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3htbHRlc3RkYXRhL3Rlc3QueG1sLm91dCBiL2xpYi9weXRob24yLjcvdGVzdC94bWx0ZXN0ZGF0YS90ZXN0LnhtbC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRhYjFhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdGVzdC94bWx0ZXN0ZGF0YS90ZXN0LnhtbC5vdXQKQEAgLTAsMCArMSwxMTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTEiPz4KKzxIVE1MIHhtbG5zOnBwPSJodHRwOi8vd3d3Lmlzb2dlbi5jb20vcGF1bC9wb3N0LXByb2Nlc3NvciI+Cis8VElUTEU+SW50cm9kdWN0aW9uIHRvIFhTTDwvVElUTEU+Cis8SDE+SW50cm9kdWN0aW9uIHRvIFhTTDwvSDE+CisJCisKKwkKKwkJPEhSPjwvSFI+CisJCTxIMj5PdmVydmlldworPC9IMj4KKwkJPFVMPgorCQkKKwk8TEk+MS5JbnRybzwvTEk+CisKKwk8TEk+Mi5IaXN0b3J5PC9MST4KKworCTxMST4zLlhTTCBCYXNpY3M8L0xJPgorCisJPExJPkx1bmNoPC9MST4KKworCTxMST40LkFuIFhNTCBEYXRhIE1vZGVsPC9MST4KKworCTxMST41LlhTTCBQYXR0ZXJuczwvTEk+CisKKwk8TEk+Ni5YU0wgVGVtcGxhdGVzPC9MST4KKworCTxMST43LlhTTCBGb3JtYXR0aW5nIE1vZGVsCis8L0xJPgorCisJCTwvVUw+CisJCisKKworCQorCisJCisJCTxIUj48L0hSPgorCQk8SDI+SW50cm88L0gyPgorCQk8VUw+CisJCQorCTxMST5XaG8gYW0gST88L0xJPgorCisJPExJPldobyBhcmUgeW91PzwvTEk+CisKKwk8TEk+V2h5IGFyZSB3ZSBoZXJlPworPC9MST4KKworCQk8L1VMPgorCQorCisKKwkKKworCQorCQk8SFI+PC9IUj4KKwkJPEgyPkhpc3Rvcnk6IFhNTCBhbmQgU0dNTDwvSDI+CisJCTxVTD4KKwkJCisJPExJPlhNTCBpcyBhIHN1YnNldCBvZiBTR01MLjwvTEk+CisKKwk8TEk+U0dNTCBhbGxvd3MgdGhlIHNlcGFyYXRpb24gb2YgYWJzdHJhY3QgY29udGVudCBmcm9tIGZvcm1hdHRpbmcuPC9MST4KKworCTxMST5BbHNvIG9uZSBvZiBYTUwncyBwcmltYXJ5IHZpcnR1ZXMgKGluIHRoZSBkb2MgcHVibGlzaGluZyBkb21haW4pLgorPC9MST4KKworCQk8L1VMPgorCQorCisKKwkKKworCQorCQk8SFI+PC9IUj4KKwkJPEgyPkhpc3Rvcnk6IFdoYXQgYXJlIHN0eWxlc2hlZXRzPzwvSDI+CisJCTxVTD4KKwkJCisJPExJPlN0eWxlc2hlZXRzIHNwZWNpZnkgdGhlIGZvcm1hdHRpbmcgb2YgU0dNTC9YTUwgZG9jdW1lbnRzLjwvTEk+CisKKwk8TEk+U3R5bGVzaGVldHMgcHV0IHRoZSAic3R5bGUiIGJhY2sgaW50byBkb2N1bWVudHMuPC9MST4KKworCTxMST5OZXcgWW9yayBUaW1lcyBjb250ZW50K05ZVCBTdHlsZXNoZWV0ID0gTllUIHBhcGVyCis8L0xJPgorCisJCTwvVUw+CisJCisKKworCQorCisJCisJCTxIUj48L0hSPgorCQk8SDI+SGlzdG9yeTogRk9TSTwvSDI+CisJCTxVTD4KKwkJCisJPExJPkZPU0k6ICJGb3JtYXR0ZWQgT3V0cHV0IFNwZWNpZmljYXRpb24gSW5zdGFuY2UiCis8VUw+CisJPExJPk1JTC1TVEQtMjgwMDEKKwk8L0xJPgorCisJPExJPkZPU0kncyBhcmUgU0dNTCBkb2N1bWVudHMKKwk8L0xJPgorCisJPExJPkEgc3R5bGVzaGVldCBmb3IgYW5vdGhlciBkb2N1bWVudAorCTwvTEk+Cis8L1VMPjwvTEk+CisKKwk8TEk+T2Jzb2xldGUgYnV0IGltcGxlbWVudGVkLi4uCis8L0xJPgorCisJCTwvVUw+CisJCisKKworCQorPC9IVE1MPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdGVzdC94bWx0ZXN0cy5weSBiL2xpYi9weXRob24yLjcvdGVzdC94bWx0ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjAzNzA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3htbHRlc3RzLnB5CkBAIC0wLDAgKzEsMjEgQEAKKyMgQ29udmVuaWVuY2UgdGVzdCBtb2R1bGUgdG8gcnVuIGFsbCBvZiB0aGUgWE1MLXJlbGF0ZWQgdGVzdHMgaW4gdGhlCisjIHN0YW5kYXJkIGxpYnJhcnkuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZXN0LnRlc3Rfc3VwcG9ydAorCit0ZXN0LnRlc3Rfc3VwcG9ydC52ZXJib3NlID0gMAorCitkZWYgcnVudGVzdChuYW1lKToKKyAgICBfX2ltcG9ydF9fKG5hbWUpCisgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICBpZiBoYXNhdHRyKG1vZHVsZSwgInRlc3RfbWFpbiIpOgorICAgICAgICBtb2R1bGUudGVzdF9tYWluKCkKKworcnVudGVzdCgidGVzdC50ZXN0X21pbmlkb20iKQorcnVudGVzdCgidGVzdC50ZXN0X3B5ZXhwYXQiKQorcnVudGVzdCgidGVzdC50ZXN0X3NheCIpCitydW50ZXN0KCJ0ZXN0LnRlc3RfeG1sX2V0cmVlIikKK3J1bnRlc3QoInRlc3QudGVzdF94bWxfZXRyZWVfYyIpCitydW50ZXN0KCJ0ZXN0LnRlc3RfeG1sbGliIikKK3J1bnRlc3QoInRlc3QudGVzdF94bWxycGMiKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy90ZXN0L3ppcGRpci56aXAgYi9saWIvcHl0aG9uMi43L3Rlc3QvemlwZGlyLnppcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzIxZDdhCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy90ZXN0L3ppcGRpci56aXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy91bml0dGVzdC90ZXN0L19faW5pdF9fLnB5IGIvbGliL3B5dGhvbjIuNy91bml0dGVzdC90ZXN0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YjczMGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3VuaXR0ZXN0L3Rlc3QvX19pbml0X18ucHkKQEAgLTAsMCArMSwyMSBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworCitoZXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorbG9hZGVyID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIKKworZGVmIHN1aXRlKCk6CisgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKGhlcmUpOgorICAgICAgICBpZiBmbi5zdGFydHN3aXRoKCJ0ZXN0IikgYW5kIGZuLmVuZHN3aXRoKCIucHkiKToKKyAgICAgICAgICAgIG1vZG5hbWUgPSAidW5pdHRlc3QudGVzdC4iICsgZm5bOi0zXQorICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RuYW1lKQorICAgICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbW9kbmFtZV0KKyAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kdWxlKSkKKyAgICByZXR1cm4gc3VpdGUKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oZGVmYXVsdFRlc3Q9InN1aXRlIikKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdW5pdHRlc3QvdGVzdC9kdW1teS5weSBiL2xpYi9weXRob24yLjcvdW5pdHRlc3QvdGVzdC9kdW1teS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGYxNGU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy91bml0dGVzdC90ZXN0L2R1bW15LnB5CkBAIC0wLDAgKzEgQEAKKyMgRW1wdHkgbW9kdWxlIGZvciB0ZXN0aW5nIHRoZSBsb2FkaW5nIG9mIG1vZHVsZXMKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5IGIvbGliL3B5dGhvbjIuNy91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFjZjAzYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5CkBAIC0wLDAgKzEsMTE5IEBACitpbXBvcnQgdW5pdHRlc3QKKworCitjbGFzcyBUZXN0SGFzaGluZyhvYmplY3QpOgorICAgICIiIlVzZWQgYXMgYSBtaXhpbiBmb3IgVGVzdENhc2UiIiIKKworICAgICMgQ2hlY2sgZm9yIGEgdmFsaWQgX19oYXNoX18gaW1wbGVtZW50YXRpb24KKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICBmb3Igb2JqXzEsIG9ial8yIGluIHNlbGYuZXFfcGFpcnM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2gob2JqXzEpID09IGhhc2gob2JqXzIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVyIGFuZCAlciBkbyBub3QgaGFzaCBlcXVhbCIgJSAob2JqXzEsIG9ial8yKSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlByb2JsZW0gaGFzaGluZyAlciBhbmQgJXI6ICVzIiAlIChvYmpfMSwgb2JqXzIsIGUpKQorCisgICAgICAgIGZvciBvYmpfMSwgb2JqXzIgaW4gc2VsZi5uZV9wYWlyczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBoYXNoKG9ial8xKSA9PSBoYXNoKG9ial8yKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCIlcyBhbmQgJXMgaGFzaCBlcXVhbCwgYnV0IHNob3VsZG4ndCIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9ial8xLCBvYmpfMikpCisgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJQcm9ibGVtIGhhc2hpbmcgJXMgYW5kICVzOiAlcyIgJSAob2JqXzEsIG9ial8yLCBlKSkKKworCitjbGFzcyBUZXN0RXF1YWxpdHkob2JqZWN0KToKKyAgICAiIiJVc2VkIGFzIGEgbWl4aW4gZm9yIFRlc3RDYXNlIiIiCisKKyAgICAjIENoZWNrIGZvciBhIHZhbGlkIF9fZXFfXyBpbXBsZW1lbnRhdGlvbgorICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAgICBmb3Igb2JqXzEsIG9ial8yIGluIHNlbGYuZXFfcGFpcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9ial8xLCBvYmpfMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqXzIsIG9ial8xKQorCisgICAgIyBDaGVjayBmb3IgYSB2YWxpZCBfX25lX18gaW1wbGVtZW50YXRpb24KKyAgICBkZWYgdGVzdF9uZShzZWxmKToKKyAgICAgICAgZm9yIG9ial8xLCBvYmpfMiBpbiBzZWxmLm5lX3BhaXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChvYmpfMSwgb2JqXzIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG9ial8yLCBvYmpfMSkKKworCitjbGFzcyBMb2dnaW5nUmVzdWx0KHVuaXR0ZXN0LlRlc3RSZXN1bHQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2cpOgorICAgICAgICBzZWxmLl9ldmVudHMgPSBsb2cKKyAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuX19pbml0X18oKQorCisgICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnc3RhcnRUZXN0JykKKyAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuc3RhcnRUZXN0KHRlc3QpCisKKyAgICBkZWYgc3RhcnRUZXN0UnVuKHNlbGYpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdGFydFRlc3RSdW4nKQorICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5zdGFydFRlc3RSdW4oKQorCisgICAgZGVmIHN0b3BUZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdG9wVGVzdCcpCisgICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0b3BUZXN0KHRlc3QpCisKKyAgICBkZWYgc3RvcFRlc3RSdW4oc2VsZik6CisgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0b3BUZXN0UnVuJykKKyAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuc3RvcFRlc3RSdW4oKQorCisgICAgZGVmIGFkZEZhaWx1cmUoc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRGYWlsdXJlJykKKyAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkRmFpbHVyZSgqYXJncykKKworICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkU3VjY2VzcycpCisgICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZFN1Y2Nlc3MoKmFyZ3MpCisKKyAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRFcnJvcicpCisgICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZEVycm9yKCphcmdzKQorCisgICAgZGVmIGFkZFNraXAoc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRTa2lwJykKKyAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkU2tpcCgqYXJncykKKworICAgIGRlZiBhZGRFeHBlY3RlZEZhaWx1cmUoc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRFeHBlY3RlZEZhaWx1cmUnKQorICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRFeHBlY3RlZEZhaWx1cmUoKmFyZ3MpCisKKyAgICBkZWYgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRVbmV4cGVjdGVkU3VjY2VzcycpCisgICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZFVuZXhwZWN0ZWRTdWNjZXNzKCphcmdzKQorCisKK2NsYXNzIFJlc3VsdFdpdGhOb1N0YXJ0VGVzdFJ1blN0b3BUZXN0UnVuKG9iamVjdCk6CisgICAgIiIiQW4gb2JqZWN0IGhvbm91cmluZyBUZXN0UmVzdWx0IGJlZm9yZSBzdGFydFRlc3RSdW4vc3RvcFRlc3RSdW4uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZmFpbHVyZXMgPSBbXQorICAgICAgICBzZWxmLmVycm9ycyA9IFtdCisgICAgICAgIHNlbGYudGVzdHNSdW4gPSAwCisgICAgICAgIHNlbGYuc2tpcHBlZCA9IFtdCisgICAgICAgIHNlbGYuZXhwZWN0ZWRGYWlsdXJlcyA9IFtdCisgICAgICAgIHNlbGYudW5leHBlY3RlZFN1Y2Nlc3NlcyA9IFtdCisgICAgICAgIHNlbGYuc2hvdWxkU3RvcCA9IEZhbHNlCisKKyAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcFRlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBhZGRFcnJvcihzZWxmLCB0ZXN0KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGFkZEZhaWx1cmUoc2VsZiwgdGVzdCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsIHRlc3QpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgd2FzU3VjY2Vzc2Z1bChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdW5pdHRlc3QvdGVzdC90ZXN0X2Fzc2VydGlvbnMucHkgYi9saWIvcHl0aG9uMi43L3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYmE2MTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5CkBAIC0wLDAgKzEsMjg2IEBACitpbXBvcnQgZGF0ZXRpbWUKKworaW1wb3J0IHVuaXR0ZXN0CisKKworY2xhc3MgVGVzdF9Bc3NlcnRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9BbG1vc3RFcXVhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxLjAwMDAwMDAxLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoMS4wMDAwMDAxLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCwgMS4wMDAwMDAxLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCwgMS4wMDAwMDAwMSwgMS4wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMS4xLCAxLjAsIHBsYWNlcz0wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwsIDEuMSwgMS4wLCBwbGFjZXM9MSkKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAsIC4xKy4xaiwgcGxhY2VzPTApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoMCwgLjErLjFqLCBwbGFjZXM9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsLCAwLCAuMSsuMWosIHBsYWNlcz0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwsIDAsIC4xKy4xaiwgcGxhY2VzPTApCisKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChmbG9hdCgnaW5mJyksIGZsb2F0KCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCgnaW5mJyksIGZsb2F0KCdpbmYnKSkKKworICAgIGRlZiB0ZXN0X0Ftb3N0RXF1YWxXaXRoRGVsdGEoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMS4xLCAxLjAsIGRlbHRhPTAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxLjAsIDEuMSwgZGVsdGE9MC41KQorICAgICAgICBzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsKDEuMSwgMS4wLCBkZWx0YT0wLjA1KQorICAgICAgICBzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsKDEuMCwgMS4xLCBkZWx0YT0wLjA1KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMS4xLCAxLjAsIGRlbHRhPTAuMDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMS4xLCAxLjAsIGRlbHRhPTAuNSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMSwgMS4wLCBwbGFjZXM9MiwgZGVsdGE9MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLjEsIDEuMCwgcGxhY2VzPTIsIGRlbHRhPTIpCisKKyAgICAgICAgZmlyc3QgPSBkYXRldGltZS5kYXRldGltZS5ub3coKQorICAgICAgICBzZWNvbmQgPSBmaXJzdCArIGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPTEwKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZpcnN0LCBzZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE9ZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9MjApKQorICAgICAgICBzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsKGZpcnN0LCBzZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE9ZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9NSkpCisKKyAgICBkZWYgdGVzdF9hc3NlcnRSYWlzZXMoc2VsZik6CisgICAgICAgIGRlZiBfcmFpc2UoZSk6CisgICAgICAgICAgICByYWlzZSBlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBfcmFpc2UsIEtleUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgX3JhaXNlLCBLZXlFcnJvcigia2V5IikpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBsYW1iZGE6IE5vbmUpCisgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIktleUVycm9yIG5vdCByYWlzZWQiLCBlLmFyZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImFzc2VydFJhaXNlcygpIGRpZG4ndCBmYWlsIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIF9yYWlzZSwgVmFsdWVFcnJvcikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImFzc2VydFJhaXNlcygpIGRpZG4ndCBsZXQgZXhjZXB0aW9uIHBhc3MgdGhyb3VnaCIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY20uZXhjZXB0aW9uLCBlKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoImtleSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiS2V5RXJyb3Igbm90IHJhaXNlZCIsIGUuYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiYXNzZXJ0UmFpc2VzKCkgZGlkbid0IGZhaWwiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJhc3NlcnRSYWlzZXMoKSBkaWRuJ3QgbGV0IGV4Y2VwdGlvbiBwYXNzIHRocm91Z2giKQorCisgICAgZGVmIHRlc3RBc3NlcnROb3RSZWdleHBNYXRjaGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE5vdFJlZ2V4cE1hdGNoZXMoJ0FsYSBtYSBrb3RhJywgcidyKycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90UmVnZXhwTWF0Y2hlcygnQWxhIG1hIGtvdGEnLCByJ2sudCcsICdNZXNzYWdlJykKKyAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIidrb3QnIiwgZS5hcmdzWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignTWVzc2FnZScsIGUuYXJnc1swXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnYXNzZXJ0Tm90UmVnZXhwTWF0Y2hlcyBzaG91bGQgaGF2ZSBmYWlsZWQuJykKKworCitjbGFzcyBUZXN0TG9uZ01lc3NhZ2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCB0aGUgaW5kaXZpZHVhbCBhc3NlcnRzIGhvbm91ciBsb25nTWVzc2FnZS4KKyAgICBUaGlzIGFjdHVhbGx5IHRlc3RzIGFsbCB0aGUgbWVzc2FnZSBiZWhhdmlvdXIgZm9yCisgICAgYXNzZXJ0cyB0aGF0IHVzZSBsb25nTWVzc2FnZS4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdGFibGVUZXN0RmFsc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgbG9uZ01lc3NhZ2UgPSBGYWxzZQorICAgICAgICAgICAgZmFpbHVyZUV4Y2VwdGlvbiA9IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbgorCisgICAgICAgICAgICBkZWYgdGVzdFRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFRlc3RhYmxlVGVzdFRydWUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgbG9uZ01lc3NhZ2UgPSBUcnVlCisgICAgICAgICAgICBmYWlsdXJlRXhjZXB0aW9uID0gc2VsZi5mYWlsdXJlRXhjZXB0aW9uCisKKyAgICAgICAgICAgIGRlZiB0ZXN0VGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi50ZXN0YWJsZVRydWUgPSBUZXN0YWJsZVRlc3RUcnVlKCd0ZXN0VGVzdCcpCisgICAgICAgIHNlbGYudGVzdGFibGVGYWxzZSA9IFRlc3RhYmxlVGVzdEZhbHNlKCd0ZXN0VGVzdCcpCisKKyAgICBkZWYgdGVzdERlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodW5pdHRlc3QuVGVzdENhc2UubG9uZ01lc3NhZ2UpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRNc2coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXN0YWJsZUZhbHNlLl9mb3JtYXRNZXNzYWdlKE5vbmUsICJmb28iKSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXN0YWJsZUZhbHNlLl9mb3JtYXRNZXNzYWdlKCJmb28iLCAiYmFyIiksICJmb28iKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXN0YWJsZVRydWUuX2Zvcm1hdE1lc3NhZ2UoTm9uZSwgImZvbyIpLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRlc3RhYmxlVHJ1ZS5fZm9ybWF0TWVzc2FnZSgiZm9vIiwgImJhciIpLCAiYmFyIDogZm9vIikKKworICAgICAgICAjIFRoaXMgYmxvd3MgdXAgaWYgX2Zvcm1hdE1lc3NhZ2UgdXNlcyBzdHJpbmcgY29uY2F0ZW5hdGlvbgorICAgICAgICBzZWxmLnRlc3RhYmxlVHJ1ZS5fZm9ybWF0TWVzc2FnZShvYmplY3QoKSwgJ2ZvbycpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRNZXNzYWdlX3VuaWNvZGVfZXJyb3Ioc2VsZik6CisgICAgICAgIG9uZSA9ICcnLmpvaW4oY2hyKGkpIGZvciBpIGluIHJhbmdlKDI1NSkpCisgICAgICAgICMgdGhpcyB1c2VkIHRvIGNhdXNlIGEgVW5pY29kZURlY29kZUVycm9yIGNvbnN0cnVjdGluZyBtc2cKKyAgICAgICAgc2VsZi50ZXN0YWJsZVRydWUuX2Zvcm1hdE1lc3NhZ2Uob25lLCB1J1x1RkZGRCcpCisKKyAgICBkZWYgYXNzZXJ0TWVzc2FnZXMoc2VsZiwgbWV0aG9kTmFtZSwgYXJncywgZXJyb3JzKToKKyAgICAgICAgZGVmIGdldE1ldGhvZChpKToKKyAgICAgICAgICAgIHVzZVRlc3RhYmxlRmFsc2UgID0gaSA8IDIKKyAgICAgICAgICAgIGlmIHVzZVRlc3RhYmxlRmFsc2U6CisgICAgICAgICAgICAgICAgdGVzdCA9IHNlbGYudGVzdGFibGVGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0ZXN0ID0gc2VsZi50ZXN0YWJsZVRydWUKKyAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHRlc3QsIG1ldGhvZE5hbWUpCisKKyAgICAgICAgZm9yIGksIGV4cGVjdGVkX3JlZ2V4cCBpbiBlbnVtZXJhdGUoZXJyb3JzKToKKyAgICAgICAgICAgIHRlc3RNZXRob2QgPSBnZXRNZXRob2QoaSkKKyAgICAgICAgICAgIGt3YXJncyA9IHt9CisgICAgICAgICAgICB3aXRoTXNnID0gaSAlIDIKKyAgICAgICAgICAgIGlmIHdpdGhNc2c6CisgICAgICAgICAgICAgICAga3dhcmdzID0geyJtc2ciOiAib29wcyJ9CisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9yZWdleHA9ZXhwZWN0ZWRfcmVnZXhwKToKKyAgICAgICAgICAgICAgICB0ZXN0TWV0aG9kKCphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiB0ZXN0QXNzZXJ0VHJ1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0VHJ1ZScsIChGYWxzZSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXkZhbHNlIGlzIG5vdCB0cnVlJCIsICJeb29wcyQiLCAiXkZhbHNlIGlzIG5vdCB0cnVlJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeRmFsc2UgaXMgbm90IHRydWUgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRGYWxzZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0RmFsc2UnLCAoVHJ1ZSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXlRydWUgaXMgbm90IGZhbHNlJCIsICJeb29wcyQiLCAiXlRydWUgaXMgbm90IGZhbHNlJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeVHJ1ZSBpcyBub3QgZmFsc2UgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3ROb3RFcXVhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0Tm90RXF1YWwnLCAoMSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeMSA9PSAxJCIsICJeb29wcyQiLCAiXjEgPT0gMSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjEgPT0gMSA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFsbW9zdEVxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRBbG1vc3RFcXVhbCcsICgxLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4xICE9IDIgd2l0aGluIDcgcGxhY2VzJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjEgIT0gMiB3aXRoaW4gNyBwbGFjZXMkIiwgIl4xICE9IDIgd2l0aGluIDcgcGxhY2VzIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0Tm90QWxtb3N0RXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydE5vdEFsbW9zdEVxdWFsJywgKDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXjEgPT0gMSB3aXRoaW4gNyBwbGFjZXMkIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMSA9PSAxIHdpdGhpbiA3IHBsYWNlcyQiLCAiXjEgPT0gMSB3aXRoaW4gNyBwbGFjZXMgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RfYmFzZUFzc2VydEVxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdfYmFzZUFzc2VydEVxdWFsJywgKDEsIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXjEgIT0gMiQiLCAiXm9vcHMkIiwgIl4xICE9IDIkIiwgIl4xICE9IDIgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRTZXF1ZW5jZUVxdWFsKHNlbGYpOgorICAgICAgICAjIEVycm9yIG1lc3NhZ2VzIGFyZSBtdWx0aWxpbmUgc28gbm90IHRlc3Rpbmcgb24gZnVsbCBtZXNzYWdlCisgICAgICAgICMgYXNzZXJ0VHVwbGVFcXVhbCBhbmQgYXNzZXJ0TGlzdEVxdWFsIGRlbGVnYXRlIHRvIHRoaXMgbWV0aG9kCisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydFNlcXVlbmNlRXF1YWwnLCAoW10sIFtOb25lXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJcKyBcW05vbmVcXSQiLCAiXm9vcHMkIiwgciJcKyBcW05vbmVcXSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlwrIFxbTm9uZVxdIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0U2V0RXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydFNldEVxdWFsJywgKHNldCgpLCBzZXQoW05vbmVdKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJOb25lJCIsICJeb29wcyQiLCAiTm9uZSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uZSA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydEluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRJbicsIChOb25lLCBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydeTm9uZSBub3QgZm91bmQgaW4gXFtcXSQnLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ15Ob25lIG5vdCBmb3VuZCBpbiBcW1xdJCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdeTm9uZSBub3QgZm91bmQgaW4gXFtcXSA6IG9vcHMkJ10pCisKKyAgICBkZWYgdGVzdEFzc2VydE5vdEluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnROb3RJbicsIChOb25lLCBbTm9uZV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnXk5vbmUgdW5leHBlY3RlZGx5IGZvdW5kIGluIFxbTm9uZVxdJCcsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXk5vbmUgdW5leHBlY3RlZGx5IGZvdW5kIGluIFxbTm9uZVxdJCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdeTm9uZSB1bmV4cGVjdGVkbHkgZm91bmQgaW4gXFtOb25lXF0gOiBvb3BzJCddKQorCisgICAgZGVmIHRlc3RBc3NlcnREaWN0RXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydERpY3RFcXVhbCcsICh7fSwgeydrZXknOiAndmFsdWUnfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3IiXCsgXHsna2V5JzogJ3ZhbHVlJ1x9JCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCsgXHsna2V5JzogJ3ZhbHVlJ1x9JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcKyBceydrZXknOiAndmFsdWUnXH0gOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydERpY3RDb250YWluc1N1YnNldCcsICh7J2tleSc6ICd2YWx1ZSd9LCB7fSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeTWlzc2luZzogJ2tleSckIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeTWlzc2luZzogJ2tleSckIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5NaXNzaW5nOiAna2V5JyA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydE11bHRpTGluZUVxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRNdWx0aUxpbmVFcXVhbCcsICgiIiwgImZvbyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyIlwrIGZvbyQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJcKyBmb28kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJcKyBmb28gOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRMZXNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRMZXNzJywgKDIsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXjIgbm90IGxlc3MgdGhhbiAxJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjIgbm90IGxlc3MgdGhhbiAxJCIsICJeMiBub3QgbGVzcyB0aGFuIDEgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRMZXNzRXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydExlc3NFcXVhbCcsICgyLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4yIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMSQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4yIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjIgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byAxIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0R3JlYXRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0R3JlYXRlcicsICgxLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4xIG5vdCBncmVhdGVyIHRoYW4gMiQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4xIG5vdCBncmVhdGVyIHRoYW4gMiQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjEgbm90IGdyZWF0ZXIgdGhhbiAyIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0R3JlYXRlckVxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRHcmVhdGVyRXF1YWwnLCAoMSwgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeMSBub3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDIkIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMSBub3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDIkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4xIG5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMiA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydElzTm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0SXNOb25lJywgKCdub3QgTm9uZScsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4nbm90IE5vbmUnIGlzIG5vdCBOb25lJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXidub3QgTm9uZScgaXMgbm90IE5vbmUkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4nbm90IE5vbmUnIGlzIG5vdCBOb25lIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0SXNOb3ROb25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRJc05vdE5vbmUnLCAoTm9uZSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXnVuZXhwZWN0ZWRseSBOb25lJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXnVuZXhwZWN0ZWRseSBOb25lJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJedW5leHBlY3RlZGx5IE5vbmUgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRJcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0SXMnLCAoTm9uZSwgJ2ZvbycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXk5vbmUgaXMgbm90ICdmb28nJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXk5vbmUgaXMgbm90ICdmb28nJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeTm9uZSBpcyBub3QgJ2ZvbycgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRJc05vdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0SXNOb3QnLCAoTm9uZSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJedW5leHBlY3RlZGx5IGlkZW50aWNhbDogTm9uZSQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl51bmV4cGVjdGVkbHkgaWRlbnRpY2FsOiBOb25lJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJedW5leHBlY3RlZGx5IGlkZW50aWNhbDogTm9uZSA6IG9vcHMkIl0pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5IGIvbGliL3B5dGhvbjIuNy91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFiOTFjMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5CkBAIC0wLDAgKzEsMjg0IEBACitpbXBvcnQgZ2MKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHdlYWtyZWYKKworZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKKworaW1wb3J0IHVuaXR0ZXN0CisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2tpbGwnKSwgIlRlc3QgcmVxdWlyZXMgb3Mua2lsbCIpCitAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSJ3aW4zMiIsICJUZXN0IGNhbm5vdCBydW4gb24gV2luZG93cyIpCitAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAnZnJlZWJzZDYnLCAiVGVzdCBraWxscyByZWdydGVzdCBvbiBmcmVlYnNkNiAiCisgICAgImlmIHRocmVhZHMgaGF2ZSBiZWVuIHVzZWQiKQorY2xhc3MgVGVzdEJyZWFrKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbnRfaGFuZGxlciA9IE5vbmUKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fZGVmYXVsdF9oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKQorICAgICAgICBpZiBzZWxmLmludF9oYW5kbGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzZWxmLmludF9oYW5kbGVyKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNlbGYuX2RlZmF1bHRfaGFuZGxlcikKKyAgICAgICAgdW5pdHRlc3Quc2lnbmFscy5fcmVzdWx0cyA9IHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnkoKQorICAgICAgICB1bml0dGVzdC5zaWduYWxzLl9pbnRlcnJ1cHRfaGFuZGxlciA9IE5vbmUKKworCisgICAgZGVmIHRlc3RJbnN0YWxsSGFuZGxlcihzZWxmKToKKyAgICAgICAgZGVmYXVsdF9oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKQorICAgICAgICB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwgZGVmYXVsdF9oYW5kbGVyKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCisgICAgICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJLZXlib2FyZEludGVycnVwdCBub3QgaGFuZGxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVuaXR0ZXN0LnNpZ25hbHMuX2ludGVycnVwdF9oYW5kbGVyLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0UmVnaXN0ZXJSZXN1bHQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB1bml0dGVzdC5yZWdpc3RlclJlc3VsdChyZXN1bHQpCisKKyAgICAgICAgZm9yIHJlZiBpbiB1bml0dGVzdC5zaWduYWxzLl9yZXN1bHRzOgorICAgICAgICAgICAgaWYgcmVmIGlzIHJlc3VsdDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiByZWYgaXMgbm90IHJlc3VsdDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm9kZCBvYmplY3QgaW4gcmVzdWx0IHNldCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInJlc3VsdCBub3QgZm91bmQiKQorCisKKyAgICBkZWYgdGVzdEludGVycnVwdENhdWdodChzZWxmKToKKyAgICAgICAgZGVmYXVsdF9oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcigpCisgICAgICAgIHVuaXR0ZXN0LnJlZ2lzdGVyUmVzdWx0KHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCksIGRlZmF1bHRfaGFuZGxlcikKKworICAgICAgICBkZWYgdGVzdChyZXN1bHQpOgorICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHSU5UKQorICAgICAgICAgICAgcmVzdWx0LmJyZWFrQ2F1Z2h0ID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zaG91bGRTdG9wKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3QocmVzdWx0KQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIktleWJvYXJkSW50ZXJydXB0IG5vdCBoYW5kbGVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5icmVha0NhdWdodCkKKworCisgICAgZGVmIHRlc3RTZWNvbmRJbnRlcnJ1cHQoc2VsZik6CisgICAgICAgICMgQ2FuJ3QgdXNlIHNraXBJZiBkZWNvcmF0b3IgYmVjYXVzZSB0aGUgc2lnbmFsIGhhbmRsZXIgbWF5IGhhdmUKKyAgICAgICAgIyBiZWVuIGNoYW5nZWQgYWZ0ZXIgZGVmaW5pbmcgdGhpcyBtZXRob2QuCisgICAgICAgIGlmIHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCkgPT0gc2lnbmFsLlNJR19JR046CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJ0ZXN0IHJlcXVpcmVzIFNJR0lOVCB0byBub3QgYmUgaWdub3JlZCIpCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcigpCisgICAgICAgIHVuaXR0ZXN0LnJlZ2lzdGVyUmVzdWx0KHJlc3VsdCkKKworICAgICAgICBkZWYgdGVzdChyZXN1bHQpOgorICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHSU5UKQorICAgICAgICAgICAgcmVzdWx0LmJyZWFrQ2F1Z2h0ID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zaG91bGRTdG9wKQorICAgICAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdJTlQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIlNlY29uZCBLZXlib2FyZEludGVycnVwdCBub3QgcmFpc2VkIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0KHJlc3VsdCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTZWNvbmQgS2V5Ym9hcmRJbnRlcnJ1cHQgbm90IHJhaXNlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuYnJlYWtDYXVnaHQpCisKKworICAgIGRlZiB0ZXN0VHdvUmVzdWx0cyhzZWxmKToKKyAgICAgICAgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXIoKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB1bml0dGVzdC5yZWdpc3RlclJlc3VsdChyZXN1bHQpCisgICAgICAgIG5ld19oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKQorCisgICAgICAgIHJlc3VsdDIgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdW5pdHRlc3QucmVnaXN0ZXJSZXN1bHQocmVzdWx0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpLCBuZXdfaGFuZGxlcikKKworICAgICAgICByZXN1bHQzID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgZGVmIHRlc3QocmVzdWx0KToKKyAgICAgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCisgICAgICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0lOVCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0KHJlc3VsdCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJLZXlib2FyZEludGVycnVwdCBub3QgaGFuZGxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zaG91bGRTdG9wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Mi5zaG91bGRTdG9wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdDMuc2hvdWxkU3RvcCkKKworCisgICAgZGVmIHRlc3RIYW5kbGVyUmVwbGFjZWRCdXRDYWxsZWQoc2VsZik6CisgICAgICAgICMgQ2FuJ3QgdXNlIHNraXBJZiBkZWNvcmF0b3IgYmVjYXVzZSB0aGUgc2lnbmFsIGhhbmRsZXIgbWF5IGhhdmUKKyAgICAgICAgIyBiZWVuIGNoYW5nZWQgYWZ0ZXIgZGVmaW5pbmcgdGhpcyBtZXRob2QuCisgICAgICAgIGlmIHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCkgPT0gc2lnbmFsLlNJR19JR046CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJ0ZXN0IHJlcXVpcmVzIFNJR0lOVCB0byBub3QgYmUgaWdub3JlZCIpCisgICAgICAgICMgSWYgb3VyIGhhbmRsZXIgaGFzIGJlZW4gcmVwbGFjZWQgKGlzIG5vIGxvbmdlciBpbnN0YWxsZWQpIGJ1dCBpcworICAgICAgICAjIGNhbGxlZCBieSB0aGUgKm5ldyogaGFuZGxlciwgdGhlbiBpdCBpc24ndCBzYWZlIHRvIGRlbGF5IHRoZQorICAgICAgICAjIFNJR0lOVCBhbmQgd2Ugc2hvdWxkIGltbWVkaWF0ZWx5IGRlbGVnYXRlIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIKKyAgICAgICAgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXIoKQorCisgICAgICAgIGhhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpCisgICAgICAgIGRlZiBuZXdfaGFuZGxlcihmcmFtZSwgc2lnbnVtKToKKyAgICAgICAgICAgIGhhbmRsZXIoZnJhbWUsIHNpZ251bSkKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBuZXdfaGFuZGxlcikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQgPSBvcy5nZXRwaWQoKQorICAgICAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdJTlQpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVwbGFjZWQgYnV0IGRlbGVnYXRlZCBoYW5kbGVyIGRvZXNuJ3QgcmFpc2UgaW50ZXJydXB0IikKKworICAgIGRlZiB0ZXN0UnVubmVyKHNlbGYpOgorICAgICAgICAjIENyZWF0aW5nIGEgVGV4dFRlc3RSdW5uZXIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYXJndW1lbnQgc2hvdWxkCisgICAgICAgICMgcmVnaXN0ZXIgdGhlIFRleHRUZXN0UmVzdWx0IGl0IGNyZWF0ZXMKKyAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoc3RyZWFtPVN0cmluZ0lPKCkpCisKKyAgICAgICAgcmVzdWx0ID0gcnVubmVyLnJ1bih1bml0dGVzdC5UZXN0U3VpdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyZXN1bHQsIHVuaXR0ZXN0LnNpZ25hbHMuX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdFdlYWtSZWZlcmVuY2VzKHNlbGYpOgorICAgICAgICAjIENhbGxpbmcgcmVnaXN0ZXJSZXN1bHQgb24gYSByZXN1bHQgc2hvdWxkIG5vdCBrZWVwIGl0IGFsaXZlCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB1bml0dGVzdC5yZWdpc3RlclJlc3VsdChyZXN1bHQpCisKKyAgICAgICAgcmVmID0gd2Vha3JlZi5yZWYocmVzdWx0KQorICAgICAgICBkZWwgcmVzdWx0CisKKyAgICAgICAgIyBGb3Igbm9uLXJlZmVyZW5jZSBjb3VudGluZyBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgZ2MuY29sbGVjdCgpO2djLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWYoKSkKKworCisgICAgZGVmIHRlc3RSZW1vdmVSZXN1bHQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICB1bml0dGVzdC5yZWdpc3RlclJlc3VsdChyZXN1bHQpCisKKyAgICAgICAgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pdHRlc3QucmVtb3ZlUmVzdWx0KHJlc3VsdCkpCisKKyAgICAgICAgIyBTaG91bGQgdGhpcyByYWlzZSBhbiBlcnJvciBpbnN0ZWFkPworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHVuaXR0ZXN0LnJlbW92ZVJlc3VsdCh1bml0dGVzdC5UZXN0UmVzdWx0KCkpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCisgICAgICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0LnNob3VsZFN0b3ApCisKKyAgICBkZWYgdGVzdE1haW5JbnN0YWxsc0hhbmRsZXIoc2VsZik6CisgICAgICAgIGZhaWxmYXN0ID0gb2JqZWN0KCkKKyAgICAgICAgdGVzdCA9IG9iamVjdCgpCisgICAgICAgIHZlcmJvc2l0eSA9IG9iamVjdCgpCisgICAgICAgIHJlc3VsdCA9IG9iamVjdCgpCisgICAgICAgIGRlZmF1bHRfaGFuZGxlciA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCkKKworICAgICAgICBjbGFzcyBGYWtlUnVubmVyKG9iamVjdCk6CisgICAgICAgICAgICBpbml0QXJncyA9IFtdCisgICAgICAgICAgICBydW5BcmdzID0gW10KKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHNlbGYuaW5pdEFyZ3MuYXBwZW5kKChhcmdzLCBrd2FyZ3MpKQorICAgICAgICAgICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bkFyZ3MuYXBwZW5kKHRlc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgIGNsYXNzIFByb2dyYW0odW5pdHRlc3QuVGVzdFByb2dyYW0pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhdGNoYnJlYWspOgorICAgICAgICAgICAgICAgIHNlbGYuZXhpdCA9IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi52ZXJib3NpdHkgPSB2ZXJib3NpdHkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWxmYXN0ID0gZmFpbGZhc3QKKyAgICAgICAgICAgICAgICBzZWxmLmNhdGNoYnJlYWsgPSBjYXRjaGJyZWFrCisgICAgICAgICAgICAgICAgc2VsZi50ZXN0UnVubmVyID0gRmFrZVJ1bm5lcgorICAgICAgICAgICAgICAgIHNlbGYudGVzdCA9IHRlc3QKKyAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IE5vbmUKKworICAgICAgICBwID0gUHJvZ3JhbShGYWxzZSkKKyAgICAgICAgcC5ydW5UZXN0cygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLmluaXRBcmdzLCBbKCgpLCB7J2J1ZmZlcic6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJib3NpdHknOiB2ZXJib3NpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWlsZmFzdCc6IGZhaWxmYXN0fSldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZha2VSdW5uZXIucnVuQXJncywgW3Rlc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVzdWx0LCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpLCBkZWZhdWx0X2hhbmRsZXIpCisKKyAgICAgICAgRmFrZVJ1bm5lci5pbml0QXJncyA9IFtdCisgICAgICAgIEZha2VSdW5uZXIucnVuQXJncyA9IFtdCisgICAgICAgIHAgPSBQcm9ncmFtKFRydWUpCisgICAgICAgIHAucnVuVGVzdHMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFrZVJ1bm5lci5pbml0QXJncywgWygoKSwgeydidWZmZXInOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmVyYm9zaXR5JzogdmVyYm9zaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFpbGZhc3QnOiBmYWlsZmFzdH0pXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLnJ1bkFyZ3MsIFt0ZXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlc3VsdCwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwgZGVmYXVsdF9oYW5kbGVyKQorCisgICAgZGVmIHRlc3RSZW1vdmVIYW5kbGVyKHNlbGYpOgorICAgICAgICBkZWZhdWx0X2hhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpCisgICAgICAgIHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyKCkKKyAgICAgICAgdW5pdHRlc3QucmVtb3ZlSGFuZGxlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwgZGVmYXVsdF9oYW5kbGVyKQorCisgICAgICAgICMgY2hlY2sgdGhhdCBjYWxsaW5nIHJlbW92ZUhhbmRsZXIgbXVsdGlwbGUgdGltZXMgaGFzIG5vIGlsbC1lZmZlY3QKKyAgICAgICAgdW5pdHRlc3QucmVtb3ZlSGFuZGxlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwgZGVmYXVsdF9oYW5kbGVyKQorCisgICAgZGVmIHRlc3RSZW1vdmVIYW5kbGVyQXNEZWNvcmF0b3Ioc2VsZik6CisgICAgICAgIGRlZmF1bHRfaGFuZGxlciA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXIoKQorCisgICAgICAgIEB1bml0dGVzdC5yZW1vdmVIYW5kbGVyCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCksIGRlZmF1bHRfaGFuZGxlcikKKworICAgICAgICB0ZXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpLCBkZWZhdWx0X2hhbmRsZXIpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdraWxsJyksICJUZXN0IHJlcXVpcmVzIG9zLmtpbGwiKQorQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0id2luMzIiLCAiVGVzdCBjYW5ub3QgcnVuIG9uIFdpbmRvd3MiKQorQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gJ2ZyZWVic2Q2JywgIlRlc3Qga2lsbHMgcmVncnRlc3Qgb24gZnJlZWJzZDYgIgorICAgICJpZiB0aHJlYWRzIGhhdmUgYmVlbiB1c2VkIikKK2NsYXNzIFRlc3RCcmVha0RlZmF1bHRJbnRIYW5kbGVyKFRlc3RCcmVhayk6CisgICAgaW50X2hhbmRsZXIgPSBzaWduYWwuZGVmYXVsdF9pbnRfaGFuZGxlcgorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAna2lsbCcpLCAiVGVzdCByZXF1aXJlcyBvcy5raWxsIikKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09IndpbjMyIiwgIlRlc3QgY2Fubm90IHJ1biBvbiBXaW5kb3dzIikKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICdmcmVlYnNkNicsICJUZXN0IGtpbGxzIHJlZ3J0ZXN0IG9uIGZyZWVic2Q2ICIKKyAgICAiaWYgdGhyZWFkcyBoYXZlIGJlZW4gdXNlZCIpCitjbGFzcyBUZXN0QnJlYWtTaWduYWxJZ25vcmVkKFRlc3RCcmVhayk6CisgICAgaW50X2hhbmRsZXIgPSBzaWduYWwuU0lHX0lHTgorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAna2lsbCcpLCAiVGVzdCByZXF1aXJlcyBvcy5raWxsIikKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09IndpbjMyIiwgIlRlc3QgY2Fubm90IHJ1biBvbiBXaW5kb3dzIikKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICdmcmVlYnNkNicsICJUZXN0IGtpbGxzIHJlZ3J0ZXN0IG9uIGZyZWVic2Q2ICIKKyAgICAiaWYgdGhyZWFkcyBoYXZlIGJlZW4gdXNlZCIpCitjbGFzcyBUZXN0QnJlYWtTaWduYWxEZWZhdWx0KFRlc3RCcmVhayk6CisgICAgaW50X2hhbmRsZXIgPSBzaWduYWwuU0lHX0RGTApkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weSBiL2xpYi9weXRob24yLjcvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkyYjAxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkKQEAgLTAsMCArMSwxMTI0IEBACitpbXBvcnQgZGlmZmxpYgoraW1wb3J0IHBwcmludAoraW1wb3J0IHBpY2tsZQoraW1wb3J0IHJlCitpbXBvcnQgc3lzCisKK2Zyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIC5zdXBwb3J0IGltcG9ydCAoCisgICAgVGVzdEVxdWFsaXR5LCBUZXN0SGFzaGluZywgTG9nZ2luZ1Jlc3VsdCwgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4KKykKKworCitjbGFzcyBUZXN0KG9iamVjdCk6CisgICAgIktlZXAgdGhlc2UgVGVzdENhc2UgY2xhc3NlcyBvdXQgb2YgdGhlIG1haW4gbmFtZXNwYWNlIgorCisgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6IHBhc3MKKyAgICAgICAgZGVmIHRlc3QxKHNlbGYpOiBwYXNzCisKKyAgICBjbGFzcyBCYXIoRm9vKToKKyAgICAgICAgZGVmIHRlc3QyKHNlbGYpOiBwYXNzCisKKyAgICBjbGFzcyBMb2dnaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAiIiJBIHRlc3QgY2FzZSB3aGljaCBsb2dzIGl0cyBjYWxscy4iIiIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRzKToKKyAgICAgICAgICAgIHN1cGVyKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlLCBzZWxmKS5fX2luaXRfXygndGVzdCcpCisgICAgICAgICAgICBzZWxmLmV2ZW50cyA9IGV2ZW50cworCisgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZXZlbnRzLmFwcGVuZCgnc2V0VXAnKQorCisgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgc2VsZi5ldmVudHMuYXBwZW5kKCd0ZXN0JykKKworICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICAgICBzZWxmLmV2ZW50cy5hcHBlbmQoJ3RlYXJEb3duJykKKworCitjbGFzcyBUZXN0X1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlLCBUZXN0RXF1YWxpdHksIFRlc3RIYXNoaW5nKToKKworICAgICMjIyBTZXQgdXAgYXR0cmlidXRlcyB1c2VkIGJ5IGluaGVyaXRlZCB0ZXN0cworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgVXNlZCBieSBUZXN0SGFzaGluZy50ZXN0X2hhc2ggYW5kIFRlc3RFcXVhbGl0eS50ZXN0X2VxCisgICAgZXFfcGFpcnMgPSBbKFRlc3QuRm9vKCd0ZXN0MScpLCBUZXN0LkZvbygndGVzdDEnKSldCisKKyAgICAjIFVzZWQgYnkgVGVzdEVxdWFsaXR5LnRlc3RfbmUKKyAgICBuZV9wYWlycyA9IFsoVGVzdC5Gb28oJ3Rlc3QxJyksIFRlc3QuRm9vKCdydW5UZXN0JykpCisgICAgICAgICAgICAgICAsKFRlc3QuRm9vKCd0ZXN0MScpLCBUZXN0LkJhcigndGVzdDEnKSkKKyAgICAgICAgICAgICAgICwoVGVzdC5Gb28oJ3Rlc3QxJyksIFRlc3QuQmFyKCd0ZXN0MicpKV0KKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgL1NldCB1cCBhdHRyaWJ1dGVzIHVzZWQgYnkgaW5oZXJpdGVkIHRlc3RzCisKKworICAgICMgImNsYXNzIFRlc3RDYXNlKFttZXRob2ROYW1lXSkiCisgICAgIyAuLi4KKyAgICAjICJFYWNoIGluc3RhbmNlIG9mIFRlc3RDYXNlIHdpbGwgcnVuIGEgc2luZ2xlIHRlc3QgbWV0aG9kOiB0aGUKKyAgICAjIG1ldGhvZCBuYW1lZCBtZXRob2ROYW1lLiIKKyAgICAjIC4uLgorICAgICMgIm1ldGhvZE5hbWUgZGVmYXVsdHMgdG8gInJ1blRlc3QiLiIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgaXQgcmVhbGx5IGlzIG9wdGlvbmFsLCBhbmQgdGhhdCBpdCBkZWZhdWx0cyB0byB0aGUgcHJvcGVyCisgICAgIyB0aGluZy4KKyAgICBkZWYgdGVzdF9pbml0X19ub190ZXN0X25hbWUoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6IHJhaXNlIFR5cGVFcnJvcigpCisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdCgpLmlkKClbLTEzOl0sICcuVGVzdC5ydW5UZXN0JykKKworICAgICMgImNsYXNzIFRlc3RDYXNlKFttZXRob2ROYW1lXSkiCisgICAgIyAuLi4KKyAgICAjICJFYWNoIGluc3RhbmNlIG9mIFRlc3RDYXNlIHdpbGwgcnVuIGEgc2luZ2xlIHRlc3QgbWV0aG9kOiB0aGUKKyAgICAjIG1ldGhvZCBuYW1lZCBtZXRob2ROYW1lLiIKKyAgICBkZWYgdGVzdF9pbml0X190ZXN0X25hbWVfX3ZhbGlkKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOiByYWlzZSBUeXBlRXJyb3IoKQorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6IHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3QoJ3Rlc3QnKS5pZCgpWy0xMDpdLCAnLlRlc3QudGVzdCcpCisKKyAgICAjICJjbGFzcyBUZXN0Q2FzZShbbWV0aG9kTmFtZV0pIgorICAgICMgLi4uCisgICAgIyAiRWFjaCBpbnN0YW5jZSBvZiBUZXN0Q2FzZSB3aWxsIHJ1biBhIHNpbmdsZSB0ZXN0IG1ldGhvZDogdGhlCisgICAgIyBtZXRob2QgbmFtZWQgbWV0aG9kTmFtZS4iCisgICAgZGVmIHRlc3RfaW5pdF9fdGVzdF9uYW1lX19pbnZhbGlkKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOiByYWlzZSBUeXBlRXJyb3IoKQorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6IHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBUZXN0KCd0ZXN0Zm9vJykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKKworICAgICMgIlJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoZSB0aGlzIHRlc3Qgb2JqZWN0LiBGb3IKKyAgICAjIFRlc3RDYXNlIGluc3RhbmNlcywgdGhpcyB3aWxsIGFsd2F5cyBiZSAxIgorICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6IHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZvbygndGVzdCcpLmNvdW50VGVzdENhc2VzKCksIDEpCisKKyAgICAjICJSZXR1cm4gdGhlIGRlZmF1bHQgdHlwZSBvZiB0ZXN0IHJlc3VsdCBvYmplY3QgdG8gYmUgdXNlZCB0byBydW4gdGhpcworICAgICMgdGVzdC4gRm9yIFRlc3RDYXNlIGluc3RhbmNlcywgdGhpcyB3aWxsIGFsd2F5cyBiZQorICAgICMgdW5pdHRlc3QuVGVzdFJlc3VsdDsgIHN1YmNsYXNzZXMgb2YgVGVzdENhc2Ugc2hvdWxkCisgICAgIyBvdmVycmlkZSB0aGlzIGFzIG5lY2Vzc2FyeS4iCisgICAgZGVmIHRlc3RfZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmVzdWx0ID0gRm9vKCkuZGVmYXVsdFRlc3RSZXN1bHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgdW5pdHRlc3QuVGVzdFJlc3VsdCkKKworICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKKyAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCisgICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAorICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgc2V0VXAoKSByYWlzZXMKKyAgICAjIGFuIGV4Y2VwdGlvbi4KKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZXJyb3JfaW5fc2V0VXAoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS5zZXRVcCgpCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgRm9vLnNldFVwJykKKworICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ2FkZEVycm9yJywgJ3N0b3BUZXN0J10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiV2l0aCBhIHRlbXBvcmFyeSByZXN1bHQgc3RvcFRlc3RSdW4gaXMgY2FsbGVkIHdoZW4gc2V0VXAgZXJyb3JzLgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl9zZXRVcF9kZWZhdWx0X3Jlc3VsdChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKworICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIGRlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBMb2dnaW5nUmVzdWx0KHNlbGYuZXZlbnRzKQorCisgICAgICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS5zZXRVcCgpCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgRm9vLnNldFVwJykKKworICAgICAgICBGb28oZXZlbnRzKS5ydW4oKQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0UnVuJywgJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICdhZGRFcnJvcicsCisgICAgICAgICAgICAgICAgICAgICdzdG9wVGVzdCcsICdzdG9wVGVzdFJ1biddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKKyAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCisgICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAorICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgdGhlIHRlc3QgcmFpc2VzCisgICAgIyBhbiBlcnJvciAoYXMgb3Bwb3NlZCB0byBhIGZhaWx1cmUpLgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl90ZXN0KHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKworICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28udGVzdCcpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ2FkZEVycm9yJywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0J10KKyAgICAgICAgRm9vKGV2ZW50cykucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiV2l0aCBhIGRlZmF1bHQgcmVzdWx0LCBhbiBlcnJvciBpbiB0aGUgdGVzdCBzdGlsbCByZXN1bHRzIGluIHN0b3BUZXN0UnVuCisgICAgIyBiZWluZyBjYWxsZWQuIgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl90ZXN0X2RlZmF1bHRfcmVzdWx0KHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorCisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIExvZ2dpbmdSZXN1bHQoc2VsZi5ldmVudHMpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikudGVzdCgpCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgRm9vLnRlc3QnKQorCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3RSdW4nLCAnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAnYWRkRXJyb3InLAorICAgICAgICAgICAgICAgICAgICAndGVhckRvd24nLCAnc3RvcFRlc3QnLCAnc3RvcFRlc3RSdW4nXQorICAgICAgICBGb28oZXZlbnRzKS5ydW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCisgICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQorICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKKyAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCisgICAgIworICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHRoZSB0ZXN0IHNpZ25hbHMKKyAgICAjIGEgZmFpbHVyZSAoYXMgb3Bwb3NlZCB0byBhbiBlcnJvcikuCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2ZhaWx1cmVfaW5fdGVzdChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikudGVzdCgpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdyYWlzZWQgYnkgRm9vLnRlc3QnKQorCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICdhZGRGYWlsdXJlJywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0J10KKyAgICAgICAgRm9vKGV2ZW50cykucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiV2hlbiBhIHRlc3QgZmFpbHMgd2l0aCBhIGRlZmF1bHQgcmVzdWx0IHN0b3BUZXN0UnVuIGlzIHN0aWxsIGNhbGxlZC4iCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2ZhaWx1cmVfaW5fdGVzdF9kZWZhdWx0X3Jlc3VsdChzZWxmKToKKworICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIGRlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBMb2dnaW5nUmVzdWx0KHNlbGYuZXZlbnRzKQorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3JhaXNlZCBieSBGb28udGVzdCcpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdFJ1bicsICdzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICdhZGRGYWlsdXJlJywKKyAgICAgICAgICAgICAgICAgICAgJ3RlYXJEb3duJywgJ3N0b3BUZXN0JywgJ3N0b3BUZXN0UnVuJ10KKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgRm9vKGV2ZW50cykucnVuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAorICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKKyAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCisgICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0ZWFyRG93bigpIHJhaXNlcworICAgICMgYW4gZXhjZXB0aW9uLgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl90ZWFyRG93bihzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlYXJEb3duKCkKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28udGVhckRvd24nKQorCisgICAgICAgIEZvbyhldmVudHMpLnJ1bihyZXN1bHQpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsICdhZGRFcnJvcicsCisgICAgICAgICAgICAgICAgICAgICdzdG9wVGVzdCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgICMgIldoZW4gdGVhckRvd24gZXJyb3JzIHdpdGggYSBkZWZhdWx0IHJlc3VsdCBzdG9wVGVzdFJ1biBpcyBzdGlsbCBjYWxsZWQuIgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl90ZWFyRG93bl9kZWZhdWx0X3Jlc3VsdChzZWxmKToKKworICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIGRlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBMb2dnaW5nUmVzdWx0KHNlbGYuZXZlbnRzKQorICAgICAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikudGVhckRvd24oKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IEZvby50ZWFyRG93bicpCisKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgRm9vKGV2ZW50cykucnVuKCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdFJ1bicsICdzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdhZGRFcnJvcicsICdzdG9wVGVzdCcsICdzdG9wVGVzdFJ1biddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgICMgIlRlc3RDYXNlLnJ1bigpIHN0aWxsIHdvcmtzIHdoZW4gdGhlIGRlZmF1bHRUZXN0UmVzdWx0IGlzIGEgVGVzdFJlc3VsdAorICAgICMgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHN0YXJ0VGVzdFJ1biBhbmQgc3RvcFRlc3RSdW4uCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfZGVmYXVsdF9yZXN1bHQoc2VsZik6CisKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBkZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4oKQorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIEZvbygndGVzdCcpLnJ1bigpCisKKyAgICAjICJUaGlzIGNsYXNzIGF0dHJpYnV0ZSBnaXZlcyB0aGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgdGVzdCgpIG1ldGhvZC4KKyAgICAjIElmIGEgdGVzdCBmcmFtZXdvcmsgbmVlZHMgdG8gdXNlIGEgc3BlY2lhbGl6ZWQgZXhjZXB0aW9uLCBwb3NzaWJseSB0bworICAgICMgY2FycnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgaXQgbXVzdCBzdWJjbGFzcyB0aGlzIGV4Y2VwdGlvbiBpbgorICAgICMgb3JkZXIgdG8gYGBwbGF5IGZhaXInJyB3aXRoIHRoZSBmcmFtZXdvcmsuICBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGlzCisgICAgIyBhdHRyaWJ1dGUgaXMgQXNzZXJ0aW9uRXJyb3IiCisgICAgZGVmIHRlc3RfZmFpbHVyZUV4Y2VwdGlvbl9fZGVmYXVsdChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoRm9vKCd0ZXN0JykuZmFpbHVyZUV4Y2VwdGlvbiBpcyBBc3NlcnRpb25FcnJvcikKKworICAgICMgIlRoaXMgY2xhc3MgYXR0cmlidXRlIGdpdmVzIHRoZSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoZSB0ZXN0KCkgbWV0aG9kLgorICAgICMgSWYgYSB0ZXN0IGZyYW1ld29yayBuZWVkcyB0byB1c2UgYSBzcGVjaWFsaXplZCBleGNlcHRpb24sIHBvc3NpYmx5IHRvCisgICAgIyBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBpdCBtdXN0IHN1YmNsYXNzIHRoaXMgZXhjZXB0aW9uIGluCisgICAgIyBvcmRlciB0byBgYHBsYXkgZmFpcicnIHdpdGggdGhlIGZyYW1ld29yay4iCisgICAgIworICAgICMgTWFrZSBzdXJlIFRlc3RDYXNlLnJ1bigpIHJlc3BlY3RzIHRoZSBkZXNpZ25hdGVkIGZhaWx1cmVFeGNlcHRpb24KKyAgICBkZWYgdGVzdF9mYWlsdXJlRXhjZXB0aW9uX19zdWJjbGFzc2luZ19fZXhwbGljaXRfcmFpc2Uoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoKQorCisgICAgICAgICAgICBmYWlsdXJlRXhjZXB0aW9uID0gUnVudGltZUVycm9yCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEZvbygndGVzdCcpLmZhaWx1cmVFeGNlcHRpb24gaXMgUnVudGltZUVycm9yKQorCisKKyAgICAgICAgRm9vKCd0ZXN0JykucnVuKHJlc3VsdCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdhZGRGYWlsdXJlJywgJ3N0b3BUZXN0J10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiVGhpcyBjbGFzcyBhdHRyaWJ1dGUgZ2l2ZXMgdGhlIGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhlIHRlc3QoKSBtZXRob2QuCisgICAgIyBJZiBhIHRlc3QgZnJhbWV3b3JrIG5lZWRzIHRvIHVzZSBhIHNwZWNpYWxpemVkIGV4Y2VwdGlvbiwgcG9zc2libHkgdG8KKyAgICAjIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIGl0IG11c3Qgc3ViY2xhc3MgdGhpcyBleGNlcHRpb24gaW4KKyAgICAjIG9yZGVyIHRvIGBgcGxheSBmYWlyJycgd2l0aCB0aGUgZnJhbWV3b3JrLiIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgVGVzdENhc2UucnVuKCkgcmVzcGVjdHMgdGhlIGRlc2lnbmF0ZWQgZmFpbHVyZUV4Y2VwdGlvbgorICAgIGRlZiB0ZXN0X2ZhaWx1cmVFeGNlcHRpb25fX3N1YmNsYXNzaW5nX19pbXBsaWNpdF9yYWlzZShzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZm9vIikKKworICAgICAgICAgICAgZmFpbHVyZUV4Y2VwdGlvbiA9IFJ1bnRpbWVFcnJvcgorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGb28oJ3Rlc3QnKS5mYWlsdXJlRXhjZXB0aW9uIGlzIFJ1bnRpbWVFcnJvcikKKworCisgICAgICAgIEZvbygndGVzdCcpLnJ1bihyZXN1bHQpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnYWRkRmFpbHVyZScsICdzdG9wVGVzdCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgICMgIlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4iCisgICAgZGVmIHRlc3Rfc2V0VXAoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyAuLi4gYW5kIG5vdGhpbmcgc2hvdWxkIGhhcHBlbgorICAgICAgICBGb28oKS5zZXRVcCgpCisKKyAgICAjICJUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuIgorICAgIGRlZiB0ZXN0X3RlYXJEb3duKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgLi4uIGFuZCBub3RoaW5nIHNob3VsZCBoYXBwZW4KKyAgICAgICAgRm9vKCkudGVhckRvd24oKQorCisgICAgIyAiUmV0dXJuIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyB0ZXN0IGNhc2UuIgorICAgICMKKyAgICAjIEJlY2F1c2Ugb2YgdGhlIHZhZ3VlIG5hdHVyZSBvZiB0aGUgZG9jcywgSSdtIG5vdCBnb2luZyB0byBsb2NrIHRoaXMKKyAgICAjIHRlc3QgZG93biB0b28gbXVjaC4gUmVhbGx5IGFsbCB0aGF0IGNhbiBiZSBhc3NlcnRlZCBpcyB0aGF0IHRoZSBpZCgpCisgICAgIyB3aWxsIGJlIGEgc3RyaW5nIChlaXRoZXIgOC1ieXRlIG9yIHVuaWNvZGUgLS0gYWdhaW4sIGJlY2F1c2UgdGhlIGRvY3MKKyAgICAjIGp1c3Qgc2F5ICJzdHJpbmciKQorICAgIGRlZiB0ZXN0X2lkKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShGb28oKS5pZCgpLCBiYXNlc3RyaW5nKQorCisgICAgIyAiSWYgcmVzdWx0IGlzIG9taXR0ZWQgb3IgTm9uZSwgYSB0ZW1wb3JhcnkgcmVzdWx0IG9iamVjdCBpcyBjcmVhdGVkCisgICAgIyBhbmQgdXNlZCwgYnV0IGlzIG5vdCBtYWRlIGF2YWlsYWJsZSB0byB0aGUgY2FsbGVyLiBBcyBUZXN0Q2FzZSBvd25zIHRoZQorICAgICMgdGVtcG9yYXJ5IHJlc3VsdCBzdGFydFRlc3RSdW4gYW5kIHN0b3BUZXN0UnVuIGFyZSBjYWxsZWQuCisKKyAgICBkZWYgdGVzdF9ydW5fX3VzZXNfZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQorCisgICAgICAgICAgICBkZWYgZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgICMgTWFrZSBydW4oKSBmaW5kIGEgcmVzdWx0IG9iamVjdCBvbiBpdHMgb3duCisgICAgICAgIEZvbygndGVzdCcpLnJ1bigpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdFJ1bicsICdzdGFydFRlc3QnLCAndGVzdCcsICdhZGRTdWNjZXNzJywKKyAgICAgICAgICAgICdzdG9wVGVzdCcsICdzdG9wVGVzdFJ1biddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0U2hvcnREZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuc2hvcnREZXNjcmlwdGlvbigpKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RTaG9ydERlc2NyaXB0aW9uV2l0aE9uZUxpbmVEb2NzdHJpbmcoc2VsZik6CisgICAgICAgICIiIlRlc3RzIHNob3J0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGRvY3N0cmluZy4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzZWxmLnNob3J0RGVzY3JpcHRpb24oKSwKKyAgICAgICAgICAgICAgICAnVGVzdHMgc2hvcnREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgZG9jc3RyaW5nLicpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdFNob3J0RGVzY3JpcHRpb25XaXRoTXVsdGlMaW5lRG9jc3RyaW5nKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBzaG9ydERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgZG9jc3RyaW5nLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCBvbmx5IHRoZSBmaXJzdCBsaW5lIG9mIGEgZG9jc3RyaW5nIGlzCisgICAgICAgIHJldHVybmVkIHVzZWQgaW4gdGhlIHNob3J0IGRlc2NyaXB0aW9uLCBubyBtYXR0ZXIgaG93IGxvbmcgdGhlCisgICAgICAgIHdob2xlIHRoaW5nIGlzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzZWxmLnNob3J0RGVzY3JpcHRpb24oKSwKKyAgICAgICAgICAgICAgICAgJ1Rlc3RzIHNob3J0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGxvbmdlciAnCisgICAgICAgICAgICAgICAgICdkb2NzdHJpbmcuJykKKworICAgIGRlZiB0ZXN0QWRkVHlwZUVxdWFsaXR5RnVuYyhzZWxmKToKKyAgICAgICAgY2xhc3MgU2FkU25ha2Uob2JqZWN0KToKKyAgICAgICAgICAgICIiIkR1bW15IGNsYXNzIGZvciB0ZXN0X2FkZFR5cGVFcXVhbGl0eUZ1bmMuIiIiCisgICAgICAgIHMxLCBzMiA9IFNhZFNuYWtlKCksIFNhZFNuYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzMSwgczIpCisgICAgICAgIGRlZiBBbGxTbmFrZXNDcmVhdGVkRXF1YWwoYSwgYiwgbXNnPU5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIHR5cGUoYSkgaXMgdHlwZShiKSBpcyBTYWRTbmFrZQorICAgICAgICBzZWxmLmFkZFR5cGVFcXVhbGl0eUZ1bmMoU2FkU25ha2UsIEFsbFNuYWtlc0NyZWF0ZWRFcXVhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMSwgczIpCisgICAgICAgICMgTm8gdGhpcyBkb2Vzbid0IGNsZWFuIHVwIGFuZCByZW1vdmUgdGhlIFNhZFNuYWtlIGVxdWFsaXR5IGZ1bmMKKyAgICAgICAgIyBmcm9tIHRoaXMgVGVzdENhc2UgaW5zdGFuY2UgYnV0IHNpbmNlIGl0cyBhIGxvY2FsIG5vdGhpbmcgZWxzZQorICAgICAgICAjIHdpbGwgZXZlciBub3RpY2UgdGhhdC4KKworICAgIGRlZiB0ZXN0QXNzZXJ0SXMoc2VsZik6CisgICAgICAgIHRoaW5nID0gb2JqZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0aGluZywgdGhpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJcywgdGhpbmcsIG9iamVjdCgpKQorCisgICAgZGVmIHRlc3RBc3NlcnRJc05vdChzZWxmKToKKyAgICAgICAgdGhpbmcgPSBvYmplY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHRoaW5nLCBvYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydElzTm90LCB0aGluZywgdGhpbmcpCisKKyAgICBkZWYgdGVzdEFzc2VydElzSW5zdGFuY2Uoc2VsZik6CisgICAgICAgIHRoaW5nID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRoaW5nLCBsaXN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpbmcsIGRpY3QpCisKKyAgICBkZWYgdGVzdEFzc2VydE5vdElzSW5zdGFuY2Uoc2VsZik6CisgICAgICAgIHRoaW5nID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHRoaW5nLCBkaWN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpbmcsIGxpc3QpCisKKyAgICBkZWYgdGVzdEFzc2VydEluKHNlbGYpOgorICAgICAgICBhbmltYWxzID0geydtb25rZXknOiAnYmFuYW5hJywgJ2Nvdyc6ICdncmFzcycsICdzZWFsJzogJ2Zpc2gnfQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigyLCBbMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ21vbmtleScsIGFuaW1hbHMpCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZCcsICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDAsIFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignb3R0ZXInLCBhbmltYWxzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJbiwgJ3gnLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEluLCA0LCBbMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJbiwgJ2VsZXBoYW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWFscykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0Tm90SW4sICdjJywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnROb3RJbiwgMSwgWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0Tm90SW4sICdjb3cnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYWxzKQorCisgICAgZGVmIHRlc3RBc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHt9LCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoe30sIHsnYSc6IDF9KQorICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCh7J2EnOiAxfSwgeydhJzogMX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHsnYSc6IDF9LCB7J2EnOiAxLCAnYic6IDJ9KQorICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCh7J2EnOiAxLCAnYic6IDJ9LCB7J2EnOiAxLCAnYic6IDJ9KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHsxOiAib25lIn0sIHt9KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHsnYSc6IDJ9LCB7J2EnOiAxfSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCh7J2MnOiAxfSwgeydhJzogMX0pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoeydhJzogMSwgJ2MnOiAxfSwgeydhJzogMX0pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoeydhJzogMSwgJ2MnOiAxfSwgeydhJzogMX0pCisKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCIiLCBVbmljb2RlV2FybmluZykpOgorICAgICAgICAgICAgb25lID0gJycuam9pbihjaHIoaSkgZm9yIGkgaW4gcmFuZ2UoMjU1KSkKKyAgICAgICAgICAgICMgdGhpcyB1c2VkIHRvIGNhdXNlIGEgVW5pY29kZURlY29kZUVycm9yIGNvbnN0cnVjdGluZyB0aGUgZmFpbHVyZSBtc2cKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCh7J2Zvbyc6IG9uZX0sIHsnZm9vJzogdSdcdUZGRkQnfSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0RXF1YWwoc2VsZik6CisgICAgICAgIGVxdWFsX3BhaXJzID0gWworICAgICAgICAgICAgICAgICgoKSwgKCkpLAorICAgICAgICAgICAgICAgICh7fSwge30pLAorICAgICAgICAgICAgICAgIChbXSwgW10pLAorICAgICAgICAgICAgICAgIChzZXQoKSwgc2V0KCkpLAorICAgICAgICAgICAgICAgIChmcm96ZW5zZXQoKSwgZnJvemVuc2V0KCkpXQorICAgICAgICBmb3IgYSwgYiBpbiBlcXVhbF9wYWlyczoKKyAgICAgICAgICAgICMgVGhpcyBtZXNzIG9mIHRyeSBleGNlcHRzIGlzIHRvIHRlc3QgdGhlIGFzc2VydEVxdWFsIGJlaGF2aW9yCisgICAgICAgICAgICAjIGl0c2VsZi4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnYXNzZXJ0RXF1YWwoJXIsICVyKSBmYWlsZWQnICUgKGEsIGIpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYiwgbXNnPSdmb28nKQorICAgICAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Fzc2VydEVxdWFsKCVyLCAlcikgd2l0aCBtc2c9IGZhaWxlZCcgJSAoYSwgYikpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiLCAnZm9vJykKKyAgICAgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb246CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnRFcXVhbCglciwgJXIpIHdpdGggdGhpcmQgcGFyYW1ldGVyIGZhaWxlZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAoYSwgYikpCisKKyAgICAgICAgdW5lcXVhbF9wYWlycyA9IFsKKyAgICAgICAgICAgICAgICgoKSwgW10pLAorICAgICAgICAgICAgICAgKHt9LCBzZXQoKSksCisgICAgICAgICAgICAgICAoc2V0KFs0LDFdKSwgZnJvemVuc2V0KFs0LDJdKSksCisgICAgICAgICAgICAgICAoZnJvemVuc2V0KFs0LDVdKSwgc2V0KFsyLDNdKSksCisgICAgICAgICAgICAgICAoc2V0KFszLDRdKSwgc2V0KFs1LDRdKSldCisgICAgICAgIGZvciBhLCBiIGluIHVuZXF1YWxfcGFpcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0RXF1YWwsIGEsIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0RXF1YWwsIGEsIGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRFcXVhbCwgYSwgYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nZm9vJykKKworICAgIGRlZiB0ZXN0RXF1YWxpdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFtdLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKCgpLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKFtdLCAoKSkKKworICAgICAgICBhID0gWzAsICdhJywgW11dCisgICAgICAgIGIgPSBbXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1bml0dGVzdC5UZXN0Q2FzZS5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCwgYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModW5pdHRlc3QuVGVzdENhc2UuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwsIHR1cGxlKGEpLCB0dXBsZShiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModW5pdHRlc3QuVGVzdENhc2UuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsLCBhLCB0dXBsZShiKSkKKworICAgICAgICBiLmV4dGVuZChhKQorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChhLCBiKQorICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwodHVwbGUoYSksIHR1cGxlKGIpKQorICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoYSwgdHVwbGUoYikpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbCh0dXBsZShhKSwgYikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGlzdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhLCB0dXBsZShiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFR1cGxlRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlKGEpLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGlzdEVxdWFsLCBOb25lLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGUoYikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCB0dXBsZShiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExpc3RFcXVhbCwgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFR1cGxlRXF1YWwsIDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKHt9LCB7fSkKKworICAgICAgICBjID0geyAneCc6IDEgfQorICAgICAgICBkID0ge30KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModW5pdHRlc3QuVGVzdENhc2UuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwsIGMsIGQpCisKKyAgICAgICAgZC51cGRhdGUoYykKKyAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoYywgZCkKKworICAgICAgICBkWyd4J10gPSAwCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVuaXR0ZXN0LlRlc3RDYXNlLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsLCBjLCBkLCAnVGhlc2UgYXJlIHVuZXF1YWwnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnREaWN0RXF1YWwsIE5vbmUsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnREaWN0RXF1YWwsIFtdLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0RGljdEVxdWFsLCAxLCAxKQorCisgICAgZGVmIHRlc3RBc3NlcnRTZXF1ZW5jZUVxdWFsTWF4RGlmZihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm1heERpZmYsIDgwKjgpCisgICAgICAgIHNlcTEgPSAnYScgKyAneCcgKiA4MCoqMgorICAgICAgICBzZXEyID0gJ2InICsgJ3gnICogODAqKjIKKyAgICAgICAgZGlmZiA9ICdcbicuam9pbihkaWZmbGliLm5kaWZmKHBwcmludC5wZm9ybWF0KHNlcTEpLnNwbGl0bGluZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KHNlcTIpLnNwbGl0bGluZXMoKSkpCisgICAgICAgICMgdGhlICsxIGlzIHRoZSBsZWFkaW5nIFxuIGFkZGVkIGJ5IGFzc2VydFNlcXVlbmNlRXF1YWwKKyAgICAgICAgb21pdHRlZCA9IHVuaXR0ZXN0LmNhc2UuRElGRl9PTUlUVEVEICUgKGxlbihkaWZmKSArIDEsKQorCisgICAgICAgIHNlbGYubWF4RGlmZiA9IGxlbihkaWZmKS8vMgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoc2VxMSwgc2VxMikKKyAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgbXNnID0gZS5hcmdzWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2Fzc2VydFNlcXVlbmNlRXF1YWwgZGlkIG5vdCBmYWlsLicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4obXNnKSA8IGxlbihkaWZmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvbWl0dGVkLCBtc2cpCisKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gbGVuKGRpZmYpICogMgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoc2VxMSwgc2VxMikKKyAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgbXNnID0gZS5hcmdzWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2Fzc2VydFNlcXVlbmNlRXF1YWwgZGlkIG5vdCBmYWlsLicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4obXNnKSA+IGxlbihkaWZmKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihvbWl0dGVkLCBtc2cpCisKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoc2VxMSwgc2VxMikKKyAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgbXNnID0gZS5hcmdzWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2Fzc2VydFNlcXVlbmNlRXF1YWwgZGlkIG5vdCBmYWlsLicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4obXNnKSA+IGxlbihkaWZmKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihvbWl0dGVkLCBtc2cpCisKKyAgICBkZWYgdGVzdFRydW5jYXRlTWVzc2FnZShzZWxmKToKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gMQorICAgICAgICBtZXNzYWdlID0gc2VsZi5fdHJ1bmNhdGVNZXNzYWdlKCdmb28nLCAnYmFyJykKKyAgICAgICAgb21pdHRlZCA9IHVuaXR0ZXN0LmNhc2UuRElGRl9PTUlUVEVEICUgbGVuKCdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2UsICdmb28nICsgb21pdHRlZCkKKworICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl90cnVuY2F0ZU1lc3NhZ2UoJ2ZvbycsICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2UsICdmb29iYXInKQorCisgICAgICAgIHNlbGYubWF4RGlmZiA9IDQKKyAgICAgICAgbWVzc2FnZSA9IHNlbGYuX3RydW5jYXRlTWVzc2FnZSgnZm9vJywgJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZSwgJ2Zvb2JhcicpCisKKyAgICBkZWYgdGVzdEFzc2VydERpY3RFcXVhbFRydW5jYXRlcyhzZWxmKToKKyAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LlRlc3RDYXNlKCdhc3NlcnRFcXVhbCcpCisgICAgICAgIGRlZiB0cnVuY2F0ZShtc2csIGRpZmYpOgorICAgICAgICAgICAgcmV0dXJuICdmb28nCisgICAgICAgIHRlc3QuX3RydW5jYXRlTWVzc2FnZSA9IHRydW5jYXRlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3QuYXNzZXJ0RGljdEVxdWFsKHt9LCB7MTogMH0pCisgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAnZm9vJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnYXNzZXJ0RGljdEVxdWFsIGRpZCBub3QgZmFpbCcpCisKKyAgICBkZWYgdGVzdEFzc2VydE11bHRpTGluZUVxdWFsVHJ1bmNhdGVzKHNlbGYpOgorICAgICAgICB0ZXN0ID0gdW5pdHRlc3QuVGVzdENhc2UoJ2Fzc2VydEVxdWFsJykKKyAgICAgICAgZGVmIHRydW5jYXRlKG1zZywgZGlmZik6CisgICAgICAgICAgICByZXR1cm4gJ2ZvbycKKyAgICAgICAgdGVzdC5fdHJ1bmNhdGVNZXNzYWdlID0gdHJ1bmNhdGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdC5hc3NlcnRNdWx0aUxpbmVFcXVhbCgnZm9vJywgJ2JhcicpCisgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAnZm9vJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnYXNzZXJ0TXVsdGlMaW5lRXF1YWwgZGlkIG5vdCBmYWlsJykKKworICAgIGRlZiB0ZXN0QXNzZXJ0RXF1YWxfZGlmZlRocmVzaG9sZChzZWxmKToKKyAgICAgICAgIyBjaGVjayB0aHJlc2hvbGQgdmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kaWZmVGhyZXNob2xkLCAyKioxNikKKyAgICAgICAgIyBkaXNhYmxlIG1hZERpZmYgdG8gZ2V0IGRpZmYgbWFya2VycworICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisKKyAgICAgICAgIyBzZXQgYSBsb3dlciB0aHJlc2hvbGQgdmFsdWUgYW5kIGFkZCBhIGNsZWFudXAgdG8gcmVzdG9yZSBpdAorICAgICAgICBvbGRfdGhyZXNob2xkID0gc2VsZi5fZGlmZlRocmVzaG9sZAorICAgICAgICBzZWxmLl9kaWZmVGhyZXNob2xkID0gMioqOAorICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzZXRhdHRyKHNlbGYsICdfZGlmZlRocmVzaG9sZCcsIG9sZF90aHJlc2hvbGQpKQorCisgICAgICAgICMgdW5kZXIgdGhlIHRocmVzaG9sZDogZGlmZiBtYXJrZXIgKF4pIGluIGVycm9yIG1lc3NhZ2UKKyAgICAgICAgcyA9IHUneCcgKiAoMioqNykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICsgJ2EnLCBzICsgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEluKCdeJywgc3RyKGNtLmV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyArICdhJywgcyArICdhJykKKworICAgICAgICAjIG92ZXIgdGhlIHRocmVzaG9sZDogZGlmZiBub3QgdXNlZCBhbmQgbWFya2VyICheKSBub3QgaW4gZXJyb3IgbWVzc2FnZQorICAgICAgICBzID0gdSd4JyAqICgyKio5KQorICAgICAgICAjIGlmIHRoZSBwYXRoIHRoYXQgdXNlcyBkaWZmbGliIGlzIHRha2VuLCBfdHJ1bmNhdGVNZXNzYWdlIHdpbGwgYmUKKyAgICAgICAgIyBjYWxsZWQgLS0gcmVwbGFjZSBpdCB3aXRoIGV4cGxvZGluZ1RydW5jYXRpb24gdG8gdmVyaWZ5IHRoYXQgdGhpcworICAgICAgICAjIGRvZXNuJ3QgaGFwcGVuCisgICAgICAgIGRlZiBleHBsb2RpbmdUcnVuY2F0aW9uKG1lc3NhZ2UsIGRpZmYpOgorICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXJyb3IoJ3RoaXMgc2hvdWxkIG5vdCBiZSByYWlzZWQnKQorICAgICAgICBvbGRfdHJ1bmNhdGUgPSBzZWxmLl90cnVuY2F0ZU1lc3NhZ2UKKyAgICAgICAgc2VsZi5fdHJ1bmNhdGVNZXNzYWdlID0gZXhwbG9kaW5nVHJ1bmNhdGlvbgorICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzZXRhdHRyKHNlbGYsICdfdHJ1bmNhdGVNZXNzYWdlJywgb2xkX3RydW5jYXRlKSkKKworICAgICAgICBzMSwgczIgPSBzICsgJ2EnLCBzICsgJ2InCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEsIHMyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdeJywgc3RyKGNtLmV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICclciAhPSAlcicgJSAoczEsIHMyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICsgJ2EnLCBzICsgJ2EnKQorCisgICAgZGVmIHRlc3RBc3NlcnRJdGVtc0VxdWFsKHNlbGYpOgorICAgICAgICBhID0gb2JqZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKFsxLCAyLCAzXSwgWzMsIDIsIDFdKQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoWydmb28nLCAnYmFyJywgJ2JheiddLCBbJ2JhcicsICdiYXonLCAnZm9vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChbYSwgYSwgMiwgMiwgM10sIChhLCAyLCAzLCBhLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKFsxLCAiMiIsICJhIiwgImEiXSwgWyJhIiwgIjIiLCBUcnVlLCAiYSJdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWzEsIDJdICsgWzNdICogMTAwLCBbMV0gKiAxMDAgKyBbMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJdGVtc0VxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbMSwgIjIiLCAiYSIsICJhIl0sIFsiYSIsICIyIiwgVHJ1ZSwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJdGVtc0VxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbMTBdLCBbMTAsIDExXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEl0ZW1zRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMCwgMTFdLCBbMTBdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwLCAxMSwgMTBdLCBbMTAsIDExXSkKKworICAgICAgICAjIFRlc3QgdGhhdCBzZXF1ZW5jZXMgb2YgdW5oYXNoYWJsZSBvYmplY3RzIGNhbiBiZSB0ZXN0ZWQgZm9yIHNhbWVuZXNzOgorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoW1sxLCAyXSwgWzMsIDRdLCAwXSwgW0ZhbHNlLCBbMywgNF0sIFsxLCAyXV0pCisgICAgICAgICMgVGVzdCB0aGF0IGl0ZXJhdG9yIG9mIHVuaGFzaGFibGUgb2JqZWN0cyBjYW4gYmUgdGVzdGVkIGZvciBzYW1lbmVzczoKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKGl0ZXIoWzEsIDIsIFtdLCAzLCA0XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyKFsxLCAyLCBbXSwgMywgNF0pKQorCisgICAgICAgICMgaGFzaGFibGUgdHlwZXMsIGJ1dCBub3Qgb3JkZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJdGVtc0VxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbXSwgW2Rpdm1vZCwgJ3gnLCAxLCA1aiwgMmosIGZyb3plbnNldCgpXSkKKyAgICAgICAgIyBjb21wYXJpbmcgZGljdHMKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKFt7J2EnOiAxfSwgeydiJzogMn1dLCBbeydiJzogMn0sIHsnYSc6IDF9XSkKKyAgICAgICAgIyBjb21wYXJpbmcgaGV0ZXJvZ2Vub3VzIG5vbi1oYXNoYWJsZSBzZXF1ZW5jZXMKKyAgICAgICAgc2VsZi5hc3NlcnRJdGVtc0VxdWFsKFsxLCAneCcsIGRpdm1vZCwgW11dLCBbZGl2bW9kLCBbXSwgJ3gnLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEl0ZW1zRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtdLCBbZGl2bW9kLCBbXSwgJ3gnLCAxLCA1aiwgMmosIHNldCgpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEl0ZW1zRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtbMV1dLCBbWzJdXSkKKworICAgICAgICAjIFNhbWUgZWxlbWVudHMsIGJ1dCBub3Qgc2FtZSBzZXF1ZW5jZSBsZW5ndGgKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEl0ZW1zRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLCAxLCAyXSwgWzIsIDFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWzEsIDEsICIyIiwgImEiLCAiYSJdLCBbIjIiLCAiMiIsIFRydWUsICJhIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJdGVtc0VxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbMSwgeydiJzogMn0sIE5vbmUsIFRydWVdLCBbeydiJzogMn0sIFRydWUsIE5vbmVdKQorCisgICAgICAgICMgU2FtZSBlbGVtZW50cyB3aGljaCBkb24ndCByZWxpYWJseSBjb21wYXJlLCBpbgorICAgICAgICAjIGRpZmZlcmVudCBvcmRlciwgc2VlIGlzc3VlIDEwMjQyCisgICAgICAgIGEgPSBbezIsNH0sIHsxLDJ9XQorICAgICAgICBiID0gYVs6Oi0xXQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoYSwgYikKKworICAgICAgICAjIHRlc3QgdXRpbGl0eSBmdW5jdGlvbnMgc3VwcG9ydGluZyBhc3NlcnRJdGVtc0VxdWFsKCkKKworICAgICAgICBkaWZmcyA9IHNldCh1bml0dGVzdC51dGlsLl9jb3VudF9kaWZmX2FsbF9wdXJwb3NlKCdhYWFiY2NkJywgJ2FiYmJjY2UnKSkKKyAgICAgICAgZXhwZWN0ZWQgPSB7KDMsMSwnYScpLCAoMSwzLCdiJyksICgxLDAsJ2QnKSwgKDAsMSwnZScpfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmZzLCBleHBlY3RlZCkKKworICAgICAgICBkaWZmcyA9IHVuaXR0ZXN0LnV0aWwuX2NvdW50X2RpZmZfYWxsX3B1cnBvc2UoW1tdXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZnMsIFsoMSwgMCwgW10pXSkKKworICAgICAgICBkaWZmcyA9IHNldCh1bml0dGVzdC51dGlsLl9jb3VudF9kaWZmX2hhc2hhYmxlKCdhYWFiY2NkJywgJ2FiYmJjY2UnKSkKKyAgICAgICAgZXhwZWN0ZWQgPSB7KDMsMSwnYScpLCAoMSwzLCdiJyksICgxLDAsJ2QnKSwgKDAsMSwnZScpfQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmZzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0QXNzZXJ0U2V0RXF1YWwoc2VsZik6CisgICAgICAgIHNldDEgPSBzZXQoKQorICAgICAgICBzZXQyID0gc2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbChzZXQxLCBzZXQyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgTm9uZSwgc2V0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBbXSwgc2V0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBzZXQxLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIHNldDEsIFtdKQorCisgICAgICAgIHNldDEgPSBzZXQoWydhJ10pCisgICAgICAgIHNldDIgPSBzZXQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIHNldDEsIHNldDIpCisKKyAgICAgICAgc2V0MSA9IHNldChbJ2EnXSkKKyAgICAgICAgc2V0MiA9IHNldChbJ2EnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbChzZXQxLCBzZXQyKQorCisgICAgICAgIHNldDEgPSBzZXQoWydhJ10pCisgICAgICAgIHNldDIgPSBzZXQoWydhJywgJ2InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBzZXQxLCBzZXQyKQorCisgICAgICAgIHNldDEgPSBzZXQoWydhJ10pCisgICAgICAgIHNldDIgPSBmcm96ZW5zZXQoWydhJywgJ2InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBzZXQxLCBzZXQyKQorCisgICAgICAgIHNldDEgPSBzZXQoWydhJywgJ2InXSkKKyAgICAgICAgc2V0MiA9IGZyb3plbnNldChbJ2EnLCAnYiddKQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKHNldDEsIHNldDIpCisKKyAgICAgICAgc2V0MSA9IHNldCgpCisgICAgICAgIHNldDIgPSAiZm9vIgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIHNldDEsIHNldDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgc2V0Miwgc2V0MSkKKworICAgICAgICAjIG1ha2Ugc3VyZSBhbnkgc3RyaW5nIGZvcm1hdHRpbmcgaXMgdHVwbGUtc2FmZQorICAgICAgICBzZXQxID0gc2V0KFsoMCwgMSksICgyLCAzKV0pCisgICAgICAgIHNldDIgPSBzZXQoWyg0LCA1KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgc2V0MSwgc2V0MikKKworICAgIGRlZiB0ZXN0SW5lcXVhbGl0eShzZWxmKToKKyAgICAgICAgIyBUcnkgaW50cworICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoMiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoMiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCwgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3MsIDIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCAxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzc0VxdWFsLCAyLCAxKQorCisgICAgICAgICMgVHJ5IEZsb2F0cworICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoMS4xLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKDEuMSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCgxLjAsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKDEuMCwgMS4xKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgxLjAsIDEuMSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoMS4wLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCAxLjAsIDEuMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsIDEuMCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsLCAxLjAsIDEuMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3MsIDEuMSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgMS4wLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzRXF1YWwsIDEuMSwgMS4wKQorCisgICAgICAgICMgVHJ5IFN0cmluZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKCdidWcnLCAnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoJ2J1ZycsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCgnYW50JywgJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcygnYW50JywgJ2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKCdhbnQnLCAnYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoJ2FudCcsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgJ2FudCcsICdidWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgJ2FudCcsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsLCAnYW50JywgJ2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCAnYnVnJywgJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCAnYW50JywgJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzRXF1YWwsICdidWcnLCAnYW50JykKKworICAgICAgICAjIFRyeSBVbmljb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih1J2J1ZycsIHUnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwodSdidWcnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHUnYW50JywgdSdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydExlc3ModSdhbnQnLCB1J2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHUnYW50JywgdSdidWcnKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCh1J2FudCcsIHUnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsIHUnYW50JywgdSdidWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgdSdhbnQnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwsIHUnYW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdSdidWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgdSdidWcnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCB1J2FudCcsIHUnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3NFcXVhbCwgdSdidWcnLCB1J2FudCcpCisKKyAgICAgICAgIyBUcnkgTWl4ZWQgU3RyaW5nL1VuaWNvZGUKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKCdidWcnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih1J2J1ZycsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCgnYnVnJywgdSdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCh1J2J1ZycsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCgnYW50JywgdSdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCh1J2FudCcsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoJ2FudCcsIHUnYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHUnYW50JywgJ2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKCdhbnQnLCB1J2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHUnYW50JywgJ2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKCdhbnQnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHUnYW50JywgJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCAnYW50JywgdSdidWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgdSdhbnQnLCAnYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsICdhbnQnLCB1J2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCB1J2FudCcsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsLCAnYW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdSdidWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsLCB1J2FudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdidWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgJ2J1ZycsIHUnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3MsIHUnYnVnJywgJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCAnYW50JywgdSdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgdSdhbnQnLCAnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3NFcXVhbCwgJ2J1ZycsIHUnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3NFcXVhbCwgdSdidWcnLCAnYW50JykKKworICAgIGRlZiB0ZXN0QXNzZXJ0TXVsdGlMaW5lRXF1YWwoc2VsZik6CisgICAgICAgIHNhbXBsZV90ZXh0ID0gYiIiIlwKK2h0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvMi4zL2xpYi9tb2R1bGUtdW5pdHRlc3QuaHRtbAordGVzdCBjYXNlCisgICAgQSB0ZXN0IGNhc2UgaXMgdGhlIHNtYWxsZXN0IHVuaXQgb2YgdGVzdGluZy4gWy4uLl0KKyIiIgorICAgICAgICByZXZpc2VkX3NhbXBsZV90ZXh0ID0gYiIiIlwKK2h0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvMi40LjEvbGliL21vZHVsZS11bml0dGVzdC5odG1sCit0ZXN0IGNhc2UKKyAgICBBIHRlc3QgY2FzZSBpcyB0aGUgc21hbGxlc3QgdW5pdCBvZiB0ZXN0aW5nLiBbLi4uXSBZb3UgbWF5IHByb3ZpZGUgeW91cgorICAgIG93biBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90IHN1YmNsYXNzIGZyb20gVGVzdENhc2UsIG9mIGNvdXJzZS4KKyIiIgorICAgICAgICBzYW1wbGVfdGV4dF9lcnJvciA9IGIiIiJcCistIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvMi4zL2xpYi9tb2R1bGUtdW5pdHRlc3QuaHRtbAorPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorKyBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jLzIuNC4xL2xpYi9tb2R1bGUtdW5pdHRlc3QuaHRtbAorPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eCisgIHRlc3QgY2FzZQorLSAgICAgQSB0ZXN0IGNhc2UgaXMgdGhlIHNtYWxsZXN0IHVuaXQgb2YgdGVzdGluZy4gWy4uLl0KKysgICAgIEEgdGVzdCBjYXNlIGlzIHRoZSBzbWFsbGVzdCB1bml0IG9mIHRlc3RpbmcuIFsuLi5dIFlvdSBtYXkgcHJvdmlkZSB5b3VyCis/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrKysrKysrKysrKysrKysrKysrKworKyAgICAgb3duIGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBub3Qgc3ViY2xhc3MgZnJvbSBUZXN0Q2FzZSwgb2YgY291cnNlLgorIiIiCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgZm9yIHR5cGVfY2hhbmdlciBpbiAobGFtYmRhIHg6IHgsIGxhbWJkYSB4OiB4LmRlY29kZSgndXRmOCcpKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFsKHR5cGVfY2hhbmdlcihzYW1wbGVfdGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX2NoYW5nZXIocmV2aXNlZF9zYW1wbGVfdGV4dCkpCisgICAgICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgICMgbmVlZCB0byByZW1vdmUgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGVycm9yIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICBlcnJvciA9IHN0cihlKS5lbmNvZGUoJ3V0ZjgnKS5zcGxpdCgnXG4nLCAxKVsxXQorCisgICAgICAgICAgICAgICAgIyBhc3NlcnRNdWx0aUxpbmVFcXVhbCBpcyBob29rZWQgdXAgYXMgdGhlIGRlZmF1bHQgZm9yCisgICAgICAgICAgICAgICAgIyB1bmljb2RlIHN0cmluZ3MgLSBzbyB3ZSBjYW4ndCB1c2UgaXQgZm9yIHRoaXMgY2hlY2sKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2FtcGxlX3RleHRfZXJyb3IgPT0gZXJyb3IpCisKKyAgICBkZWYgdGVzdEFzZXJ0RXF1YWxTaW5nbGVMaW5lKHNlbGYpOgorICAgICAgICBzYW1wbGVfdGV4dCA9IHUibGFkZW4gc3dhbGxvd3MgZmx5IHNsb3dseSIKKyAgICAgICAgcmV2aXNlZF9zYW1wbGVfdGV4dCA9IHUidW5sYWRlbiBzd2FsbG93cyBmbHkgcXVpY2tseSIKKyAgICAgICAgc2FtcGxlX3RleHRfZXJyb3IgPSAiIiJcCistIGxhZGVuIHN3YWxsb3dzIGZseSBzbG93bHkKKz8gICAgICAgICAgICAgICAgICAgIF5eXl4KKysgdW5sYWRlbiBzd2FsbG93cyBmbHkgcXVpY2tseQorPyArKyAgICAgICAgICAgICAgICAgICBeXl5eXgorIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2FtcGxlX3RleHQsIHJldmlzZWRfc2FtcGxlX3RleHQpCisgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGVycm9yID0gc3RyKGUpLnNwbGl0KCdcbicsIDEpWzFdCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2FtcGxlX3RleHRfZXJyb3IgPT0gZXJyb3IpCisKKyAgICBkZWYgdGVzdEFzc2VydElzTm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydElzTm9uZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKCdEalpvUGxvR2VhcnMgb24gUmFpbHMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXNOb3ROb25lLCBOb25lKQorCisgICAgZGVmIHRlc3RBc3NlcnRSZWdleHBNYXRjaGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoJ2FzZGZhYmFzZGYnLCByJ2FiKycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc2FhYXMnLCByJ2FhYWEnKQorCisgICAgZGVmIHRlc3RBc3NlcnRSYWlzZXNSZWdleHAoc2VsZik6CisgICAgICAgIGNsYXNzIEV4Y2VwdGlvbk1vY2soRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgU3R1YigpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uTW9jaygnV2UgZXhwZWN0JykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChFeGNlcHRpb25Nb2NrLCByZS5jb21waWxlKCdleHBlY3QkJyksIFN0dWIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKEV4Y2VwdGlvbk1vY2ssICdleHBlY3QkJywgU3R1YikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoRXhjZXB0aW9uTW9jaywgdSdleHBlY3QkJywgU3R1YikKKworICAgIGRlZiB0ZXN0QXNzZXJ0Tm90UmFpc2VzUmVnZXhwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24sICdeRXhjZXB0aW9uIG5vdCByYWlzZWQkJywKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCwgRXhjZXB0aW9uLCByZS5jb21waWxlKCd4JyksCisgICAgICAgICAgICAgICAgbGFtYmRhOiBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24sICdeRXhjZXB0aW9uIG5vdCByYWlzZWQkJywKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCwgRXhjZXB0aW9uLCAneCcsCisgICAgICAgICAgICAgICAgbGFtYmRhOiBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24sICdeRXhjZXB0aW9uIG5vdCByYWlzZWQkJywKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCwgRXhjZXB0aW9uLCB1J3gnLAorICAgICAgICAgICAgICAgIGxhbWJkYTogTm9uZSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0UmFpc2VzUmVnZXhwTWlzbWF0Y2goc2VsZik6CisgICAgICAgIGRlZiBTdHViKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1VuZXhwZWN0ZWQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKAorICAgICAgICAgICAgICAgIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICByJyJcXkV4cGVjdGVkXCQiIGRvZXMgbm90IG1hdGNoICJVbmV4cGVjdGVkIicsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAsIEV4Y2VwdGlvbiwgJ15FeHBlY3RlZCQnLAorICAgICAgICAgICAgICAgIFN0dWIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKAorICAgICAgICAgICAgICAgIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICByJyJcXkV4cGVjdGVkXCQiIGRvZXMgbm90IG1hdGNoICJVbmV4cGVjdGVkIicsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAsIEV4Y2VwdGlvbiwgdSdeRXhwZWN0ZWQkJywKKyAgICAgICAgICAgICAgICBTdHViKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCgKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgciciXF5FeHBlY3RlZFwkIiBkb2VzIG5vdCBtYXRjaCAiVW5leHBlY3RlZCInLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwLCBFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgcmUuY29tcGlsZSgnXkV4cGVjdGVkJCcpLCBTdHViKQorCisgICAgZGVmIHRlc3RBc3NlcnRSYWlzZXNFeGNWYWx1ZShzZWxmKToKKyAgICAgICAgY2xhc3MgRXhjZXB0aW9uTW9jayhFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGRlZiBTdHViKGZvbyk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb25Nb2NrKGZvbykKKyAgICAgICAgdiA9ICJwYXJ0aWN1bGFyIHZhbHVlIgorCisgICAgICAgIGN0eCA9IHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbk1vY2spCisgICAgICAgIHdpdGggY3R4OgorICAgICAgICAgICAgU3R1Yih2KQorICAgICAgICBlID0gY3R4LmV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZSwgRXhjZXB0aW9uTW9jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIHYpCisKKyAgICBkZWYgdGVzdFN5bm9ueW1Bc3NlcnRNZXRob2ROYW1lcyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB1bmRvY3VtZW50ZWQgbWV0aG9kIG5hbWUgc3lub255bXMuCisKKyAgICAgICAgUGxlYXNlIGRvIG5vdCB1c2UgdGhlc2UgbWV0aG9kcyBuYW1lcyBpbiB5b3VyIG93biBjb2RlLgorCisgICAgICAgIFRoaXMgdGVzdCBjb25maXJtcyB0aGVpciBjb250aW51ZWQgZXhpc3RlbmNlIGFuZCBmdW5jdGlvbmFsaXR5CisgICAgICAgIGluIG9yZGVyIHRvIGF2b2lkIGJyZWFraW5nIGV4aXN0aW5nIGNvZGUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscygzLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygzLCAzKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFscygyLjAsIDIuMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbHMoMy4wLCA1LjApCisgICAgICAgIHNlbGYuYXNzZXJ0XyhUcnVlKQorCisgICAgZGVmIHRlc3RQZW5kaW5nRGVwcmVjYXRpb25NZXRob2ROYW1lcyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBmYWlsKiBtZXRob2RzIHBlbmRpbmcgZGVwcmVjYXRpb24sIHRoZXkgd2lsbCB3YXJuIGluIDMuMi4KKworICAgICAgICBEbyBub3QgdXNlIHRoZXNlIG1ldGhvZHMuICBUaGV5IHdpbGwgZ28gYXdheSBpbiAzLjMuCisgICAgICAgICIiIgorICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5jaGVja193YXJuaW5ncygpOgorICAgICAgICAgICAgc2VsZi5mYWlsSWZFcXVhbCgzLCA1KQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwoMywgMykKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzc0FsbW9zdEVxdWFsKDIuMCwgMi4wKQorICAgICAgICAgICAgc2VsZi5mYWlsSWZBbG1vc3RFcXVhbCgzLjAsIDUuMCkKKyAgICAgICAgICAgIHNlbGYuZmFpbFVubGVzcyhUcnVlKQorICAgICAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhIF86IDMuMTQgKyB1J3NwYW0nKQorICAgICAgICAgICAgc2VsZi5mYWlsSWYoRmFsc2UpCisKKyAgICBkZWYgdGVzdERlZXBjb3B5KHNlbGYpOgorICAgICAgICAjIElzc3VlOiA1NjYwCisgICAgICAgIGNsYXNzIFRlc3RhYmxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdE5vdGhpbmcoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRlc3QgPSBUZXN0YWJsZVRlc3QoJ3Rlc3ROb3RoaW5nJykKKworICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGJsb3cgdXAKKyAgICAgICAgZGVlcGNvcHkodGVzdCkKKworICAgIGRlZiB0ZXN0S2V5Ym9hcmRJbnRlcnJ1cHQoc2VsZik6CisgICAgICAgIGRlZiBfcmFpc2Uoc2VsZj1Ob25lKToKKyAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisgICAgICAgIGRlZiBub3RoaW5nKHNlbGYpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFRlc3QxKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRlc3Rfc29tZXRoaW5nID0gX3JhaXNlCisKKyAgICAgICAgY2xhc3MgVGVzdDIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgc2V0VXAgPSBfcmFpc2UKKyAgICAgICAgICAgIHRlc3Rfc29tZXRoaW5nID0gbm90aGluZworCisgICAgICAgIGNsYXNzIFRlc3QzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRlc3Rfc29tZXRoaW5nID0gbm90aGluZworICAgICAgICAgICAgdGVhckRvd24gPSBfcmFpc2UKKworICAgICAgICBjbGFzcyBUZXN0NCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9zb21ldGhpbmcoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKF9yYWlzZSkKKworICAgICAgICBmb3Iga2xhc3MgaW4gKFRlc3QxLCBUZXN0MiwgVGVzdDMsIFRlc3Q0KToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQpOgorICAgICAgICAgICAgICAgIGtsYXNzKCd0ZXN0X3NvbWV0aGluZycpLnJ1bigpCisKKyAgICBkZWYgdGVzdFN5c3RlbUV4aXQoc2VsZik6CisgICAgICAgIGRlZiBfcmFpc2Uoc2VsZj1Ob25lKToKKyAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKKyAgICAgICAgZGVmIG5vdGhpbmcoc2VsZik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgVGVzdDEodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgdGVzdF9zb21ldGhpbmcgPSBfcmFpc2UKKworICAgICAgICBjbGFzcyBUZXN0Mih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBzZXRVcCA9IF9yYWlzZQorICAgICAgICAgICAgdGVzdF9zb21ldGhpbmcgPSBub3RoaW5nCisKKyAgICAgICAgY2xhc3MgVGVzdDModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgdGVzdF9zb21ldGhpbmcgPSBub3RoaW5nCisgICAgICAgICAgICB0ZWFyRG93biA9IF9yYWlzZQorCisgICAgICAgIGNsYXNzIFRlc3Q0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X3NvbWV0aGluZyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoX3JhaXNlKQorCisgICAgICAgIGZvciBrbGFzcyBpbiAoVGVzdDEsIFRlc3QyLCBUZXN0MywgVGVzdDQpOgorICAgICAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgICAgICBrbGFzcygndGVzdF9zb21ldGhpbmcnKS5ydW4ocmVzdWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKworICAgIGRlZiB0ZXN0UGlja2xlKHNlbGYpOgorICAgICAgICAjIElzc3VlIDEwMzI2CisKKyAgICAgICAgIyBDYW4ndCB1c2UgVGVzdENhc2UgY2xhc3NlcyBkZWZpbmVkIGluIFRlc3QgY2xhc3MgYXMKKyAgICAgICAgIyBwaWNrbGUgZG9lcyBub3Qgd29yayB3aXRoIGlubmVyIGNsYXNzZXMKKyAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LlRlc3RDYXNlKCdydW4nKQorICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKworICAgICAgICAgICAgIyBibGV3IHVwIHByaW9yIHRvIGZpeAorICAgICAgICAgICAgcGlja2xlZF90ZXN0ID0gcGlja2xlLmR1bXBzKHRlc3QsIHByb3RvY29sPXByb3RvY29sKQorCisgICAgICAgICAgICB1bnBpY2tsZWRfdGVzdCA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkX3Rlc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QsIHVucGlja2xlZF90ZXN0KQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkgYi9saWIvcHl0aG9uMi43L3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwMzFhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdW5pdHRlc3QvdGVzdC90ZXN0X2Rpc2NvdmVyeS5weQpAQCAtMCwwICsxLDM3NiBAQAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKKworaW1wb3J0IHVuaXR0ZXN0CisKKworY2xhc3MgVGVzdERpc2NvdmVyeSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIEhlYXZpbHkgbW9ja2VkIHRlc3RzIHNvIEkgY2FuIGF2b2lkIGhpdHRpbmcgdGhlIGZpbGVzeXN0ZW0KKyAgICBkZWYgdGVzdF9nZXRfbmFtZV9mcm9tX3BhdGgoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIGxvYWRlci5fdG9wX2xldmVsX2RpciA9ICcvZm9vJworICAgICAgICBuYW1lID0gbG9hZGVyLl9nZXRfbmFtZV9mcm9tX3BhdGgoJy9mb28vYmFyL2Jhei5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgJ2Jhci5iYXonKQorCisgICAgICAgIGlmIG5vdCBfX2RlYnVnX186CisgICAgICAgICAgICAjIGFzc2VydHMgYXJlIG9mZgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICBsb2FkZXIuX2dldF9uYW1lX2Zyb21fcGF0aCgnL2Jhci9iYXoucHknKQorCisgICAgZGVmIHRlc3RfZmluZF90ZXN0cyhzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgb3JpZ2luYWxfbGlzdGRpciA9IG9zLmxpc3RkaXIKKyAgICAgICAgZGVmIHJlc3RvcmVfbGlzdGRpcigpOgorICAgICAgICAgICAgb3MubGlzdGRpciA9IG9yaWdpbmFsX2xpc3RkaXIKKyAgICAgICAgb3JpZ2luYWxfaXNmaWxlID0gb3MucGF0aC5pc2ZpbGUKKyAgICAgICAgZGVmIHJlc3RvcmVfaXNmaWxlKCk6CisgICAgICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IG9yaWdpbmFsX2lzZmlsZQorICAgICAgICBvcmlnaW5hbF9pc2RpciA9IG9zLnBhdGguaXNkaXIKKyAgICAgICAgZGVmIHJlc3RvcmVfaXNkaXIoKToKKyAgICAgICAgICAgIG9zLnBhdGguaXNkaXIgPSBvcmlnaW5hbF9pc2RpcgorCisgICAgICAgIHBhdGhfbGlzdHMgPSBbWyd0ZXN0MS5weScsICd0ZXN0Mi5weScsICdub3RfYV90ZXN0LnB5JywgJ3Rlc3RfZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QuZm9vJywgJ3Rlc3Qtbm90LWEtbW9kdWxlLnB5JywgJ2Fub3RoZXJfZGlyJ10sCisgICAgICAgICAgICAgICAgICAgICAgWyd0ZXN0My5weScsICd0ZXN0NC5weScsIF1dCisgICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgcGF0aDogcGF0aF9saXN0cy5wb3AoMCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfbGlzdGRpcikKKworICAgICAgICBkZWYgaXNkaXIocGF0aCk6CisgICAgICAgICAgICByZXR1cm4gcGF0aC5lbmRzd2l0aCgnZGlyJykKKyAgICAgICAgb3MucGF0aC5pc2RpciA9IGlzZGlyCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2lzZGlyKQorCisgICAgICAgIGRlZiBpc2ZpbGUocGF0aCk6CisgICAgICAgICAgICAjIGFub3RoZXJfZGlyIGlzIG5vdCBhIHBhY2thZ2UgYW5kIHNvIHNob3VsZG4ndCBiZSByZWN1cnNlZCBpbnRvCisgICAgICAgICAgICByZXR1cm4gbm90IHBhdGguZW5kc3dpdGgoJ2RpcicpIGFuZCBub3QgJ2Fub3RoZXJfZGlyJyBpbiBwYXRoCisgICAgICAgIG9zLnBhdGguaXNmaWxlID0gaXNmaWxlCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2lzZmlsZSkKKworICAgICAgICBsb2FkZXIuX2dldF9tb2R1bGVfZnJvbV9uYW1lID0gbGFtYmRhIHBhdGg6IHBhdGggKyAnIG1vZHVsZScKKyAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUgPSBsYW1iZGEgbW9kdWxlOiBtb2R1bGUgKyAnIHRlc3RzJworCisgICAgICAgIHRvcF9sZXZlbCA9IG9zLnBhdGguYWJzcGF0aCgnL2ZvbycpCisgICAgICAgIGxvYWRlci5fdG9wX2xldmVsX2RpciA9IHRvcF9sZXZlbAorICAgICAgICBzdWl0ZSA9IGxpc3QobG9hZGVyLl9maW5kX3Rlc3RzKHRvcF9sZXZlbCwgJ3Rlc3QqLnB5JykpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbbmFtZSArICcgbW9kdWxlIHRlc3RzJyBmb3IgbmFtZSBpbgorICAgICAgICAgICAgICAgICAgICAoJ3Rlc3QxJywgJ3Rlc3QyJyldCisgICAgICAgIGV4cGVjdGVkLmV4dGVuZChbKCd0ZXN0X2Rpci4lcycgJSBuYW1lKSArICcgbW9kdWxlIHRlc3RzJyBmb3IgbmFtZSBpbgorICAgICAgICAgICAgICAgICAgICAoJ3Rlc3QzJywgJ3Rlc3Q0JyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2ZpbmRfdGVzdHNfd2l0aF9wYWNrYWdlKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBvcmlnaW5hbF9saXN0ZGlyID0gb3MubGlzdGRpcgorICAgICAgICBkZWYgcmVzdG9yZV9saXN0ZGlyKCk6CisgICAgICAgICAgICBvcy5saXN0ZGlyID0gb3JpZ2luYWxfbGlzdGRpcgorICAgICAgICBvcmlnaW5hbF9pc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQorICAgICAgICBkZWYgcmVzdG9yZV9pc2ZpbGUoKToKKyAgICAgICAgICAgIG9zLnBhdGguaXNmaWxlID0gb3JpZ2luYWxfaXNmaWxlCisgICAgICAgIG9yaWdpbmFsX2lzZGlyID0gb3MucGF0aC5pc2RpcgorICAgICAgICBkZWYgcmVzdG9yZV9pc2RpcigpOgorICAgICAgICAgICAgb3MucGF0aC5pc2RpciA9IG9yaWdpbmFsX2lzZGlyCisKKyAgICAgICAgZGlyZWN0b3JpZXMgPSBbJ2FfZGlyZWN0b3J5JywgJ3Rlc3RfZGlyZWN0b3J5JywgJ3Rlc3RfZGlyZWN0b3J5MiddCisgICAgICAgIHBhdGhfbGlzdHMgPSBbZGlyZWN0b3JpZXMsIFtdLCBbXSwgW11dCisgICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgcGF0aDogcGF0aF9saXN0cy5wb3AoMCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfbGlzdGRpcikKKworICAgICAgICBvcy5wYXRoLmlzZGlyID0gbGFtYmRhIHBhdGg6IFRydWUKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfaXNkaXIpCisKKyAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBsYW1iZGEgcGF0aDogb3MucGF0aC5iYXNlbmFtZShwYXRoKSBub3QgaW4gZGlyZWN0b3JpZXMKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfaXNmaWxlKQorCisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgcGF0aHMgPSBbXQorICAgICAgICAgICAgbG9hZF90ZXN0c19hcmdzID0gW10KKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICAgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhzLmFwcGVuZChwYXRoKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUocGF0aCkgPT0gJ3Rlc3RfZGlyZWN0b3J5JzoKKyAgICAgICAgICAgICAgICAgICAgZGVmIGxvYWRfdGVzdHMobG9hZGVyLCB0ZXN0cywgcGF0dGVybik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRfdGVzdHNfYXJncy5hcHBlbmQoKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdsb2FkX3Rlc3RzJworICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRfdGVzdHMgPSBsb2FkX3Rlc3RzCisKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhdGggPT0gb3RoZXIucGF0aAorCisgICAgICAgICAgICAjIFNpbGVuY2UgcHkzayB3YXJuaW5nCisgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUKKworICAgICAgICBsb2FkZXIuX2dldF9tb2R1bGVfZnJvbV9uYW1lID0gbGFtYmRhIG5hbWU6IE1vZHVsZShuYW1lKQorICAgICAgICBkZWYgbG9hZFRlc3RzRnJvbU1vZHVsZShtb2R1bGUsIHVzZV9sb2FkX3Rlc3RzKToKKyAgICAgICAgICAgIGlmIHVzZV9sb2FkX3Rlc3RzOgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbigndXNlX2xvYWRfdGVzdHMgc2hvdWxkIGJlIEZhbHNlIGZvciBwYWNrYWdlcycpCisgICAgICAgICAgICByZXR1cm4gbW9kdWxlLnBhdGggKyAnIG1vZHVsZSB0ZXN0cycKKyAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUgPSBsb2FkVGVzdHNGcm9tTW9kdWxlCisKKyAgICAgICAgbG9hZGVyLl90b3BfbGV2ZWxfZGlyID0gJy9mb28nCisgICAgICAgICMgdGhpcyB0aW1lIG5vICcucHknIG9uIHRoZSBwYXR0ZXJuIHNvIHRoYXQgaXQgY2FuIG1hdGNoCisgICAgICAgICMgYSB0ZXN0IHBhY2thZ2UKKyAgICAgICAgc3VpdGUgPSBsaXN0KGxvYWRlci5fZmluZF90ZXN0cygnL2ZvbycsICd0ZXN0KicpKQorCisgICAgICAgICMgV2Ugc2hvdWxkIGhhdmUgbG9hZGVkIHRlc3RzIGZyb20gdGhlIHRlc3RfZGlyZWN0b3J5IHBhY2thZ2UgYnkgY2FsbGluZyBsb2FkX3Rlc3RzCisgICAgICAgICMgYW5kIGRpcmVjdGx5IGZyb20gdGhlIHRlc3RfZGlyZWN0b3J5MiBwYWNrYWdlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydsb2FkX3Rlc3RzJywgJ3Rlc3RfZGlyZWN0b3J5MicgKyAnIG1vZHVsZSB0ZXN0cyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vZHVsZS5wYXRocywgWyd0ZXN0X2RpcmVjdG9yeScsICd0ZXN0X2RpcmVjdG9yeTInXSkKKworICAgICAgICAjIGxvYWRfdGVzdHMgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZSB3aXRoIGxvYWRlciwgdGVzdHMgYW5kIHBhdHRlcm4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUubG9hZF90ZXN0c19hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsobG9hZGVyLCAndGVzdF9kaXJlY3RvcnknICsgJyBtb2R1bGUgdGVzdHMnLCAndGVzdConKV0pCisKKyAgICBkZWYgdGVzdF9kaXNjb3ZlcihzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgb3JpZ2luYWxfaXNmaWxlID0gb3MucGF0aC5pc2ZpbGUKKyAgICAgICAgb3JpZ2luYWxfaXNkaXIgPSBvcy5wYXRoLmlzZGlyCisgICAgICAgIGRlZiByZXN0b3JlX2lzZmlsZSgpOgorICAgICAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBvcmlnaW5hbF9pc2ZpbGUKKworICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGxhbWJkYSBwYXRoOiBGYWxzZQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9pc2ZpbGUpCisKKyAgICAgICAgb3JpZ19zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCisgICAgICAgIGRlZiByZXN0b3JlX3BhdGgoKToKKyAgICAgICAgICAgIHN5cy5wYXRoWzpdID0gb3JpZ19zeXNfcGF0aAorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9wYXRoKQorCisgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLm5vcm1wYXRoKCcvZm9vJykpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgbG9hZGVyLmRpc2NvdmVyKCcvZm9vL2JhcicsIHRvcF9sZXZlbF9kaXI9Jy9mb28nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLl90b3BfbGV2ZWxfZGlyLCBmdWxsX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZnVsbF9wYXRoLCBzeXMucGF0aCkKKworICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGxhbWJkYSBwYXRoOiBUcnVlCisgICAgICAgIG9zLnBhdGguaXNkaXIgPSBsYW1iZGEgcGF0aDogVHJ1ZQorCisgICAgICAgIGRlZiByZXN0b3JlX2lzZGlyKCk6CisgICAgICAgICAgICBvcy5wYXRoLmlzZGlyID0gb3JpZ2luYWxfaXNkaXIKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfaXNkaXIpCisKKyAgICAgICAgX2ZpbmRfdGVzdHNfYXJncyA9IFtdCisgICAgICAgIGRlZiBfZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4pOgorICAgICAgICAgICAgX2ZpbmRfdGVzdHNfYXJncy5hcHBlbmQoKHN0YXJ0X2RpciwgcGF0dGVybikpCisgICAgICAgICAgICByZXR1cm4gWyd0ZXN0cyddCisgICAgICAgIGxvYWRlci5fZmluZF90ZXN0cyA9IF9maW5kX3Rlc3RzCisgICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gc3RyCisKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIuZGlzY292ZXIoJy9mb28vYmFyL2JheicsICdwYXR0ZXJuJywgJy9mb28vYmFyJykKKworICAgICAgICB0b3BfbGV2ZWxfZGlyID0gb3MucGF0aC5hYnNwYXRoKCcvZm9vL2JhcicpCisgICAgICAgIHN0YXJ0X2RpciA9IG9zLnBhdGguYWJzcGF0aCgnL2Zvby9iYXIvYmF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZSwgIlsndGVzdHMnXSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLl90b3BfbGV2ZWxfZGlyLCB0b3BfbGV2ZWxfZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9maW5kX3Rlc3RzX2FyZ3MsIFsoc3RhcnRfZGlyLCAncGF0dGVybicpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0b3BfbGV2ZWxfZGlyLCBzeXMucGF0aCkKKworICAgIGRlZiB0ZXN0X2Rpc2NvdmVyX3dpdGhfbW9kdWxlc190aGF0X2ZhaWxfdG9faW1wb3J0KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBsaXN0ZGlyID0gb3MubGlzdGRpcgorICAgICAgICBvcy5saXN0ZGlyID0gbGFtYmRhIF86IFsndGVzdF90aGlzX2RvZXNfbm90X2V4aXN0LnB5J10KKyAgICAgICAgaXNmaWxlID0gb3MucGF0aC5pc2ZpbGUKKyAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBsYW1iZGEgXzogVHJ1ZQorICAgICAgICBvcmlnX3N5c19wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgZGVmIHJlc3RvcmUoKToKKyAgICAgICAgICAgIG9zLnBhdGguaXNmaWxlID0gaXNmaWxlCisgICAgICAgICAgICBvcy5saXN0ZGlyID0gbGlzdGRpcgorICAgICAgICAgICAgc3lzLnBhdGhbOl0gPSBvcmlnX3N5c19wYXRoCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlKQorCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmRpc2NvdmVyKCcuJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5nZXRjd2QoKSwgc3lzLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKKyAgICAgICAgdGVzdCA9IGxpc3QobGlzdChzdWl0ZSlbMF0pWzBdICMgZXh0cmFjdCB0ZXN0IGZyb20gc3VpdGUKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHRlc3QudGVzdF90aGlzX2RvZXNfbm90X2V4aXN0KCkKKworICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19wYXJzZUFyZ3Moc2VsZik6CisgICAgICAgICMgSGFoYSAtIHRha2UgdGhhdCB1bmluc3RhbnRpYWJsZSBjbGFzcworICAgICAgICBwcm9ncmFtID0gb2JqZWN0Ll9fbmV3X18odW5pdHRlc3QuVGVzdFByb2dyYW0pCisKKyAgICAgICAgYXJncyA9IFtdCisgICAgICAgIGRlZiBkb19kaXNjb3ZlcnkoYXJndik6CisgICAgICAgICAgICBhcmdzLmV4dGVuZChhcmd2KQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBkb19kaXNjb3ZlcnkKKyAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnLCAnZGlzY292ZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbXSkKKworICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbJ3NvbWV0aGluZycsICdkaXNjb3ZlcicsICdmb28nLCAnYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgWydmb28nLCAnYmFyJ10pCisKKyAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfZG9fZGlzY292ZXJ5X3Rvb19tYW55X2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgY2xhc3MgU3RvcChFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgdXNhZ2VFeGl0KCk6CisgICAgICAgICAgICByYWlzZSBTdG9wCisKKyAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLnVzYWdlRXhpdCA9IHVzYWdlRXhpdAorICAgICAgICBwcm9ncmFtLnRlc3RMb2FkZXIgPSBOb25lCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTdG9wKToKKyAgICAgICAgICAgICMgdG9vIG1hbnkgYXJncworICAgICAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5KFsnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJ10pCisKKworICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19kb19kaXNjb3ZlcnlfdXNlc19kZWZhdWx0X2xvYWRlcihzZWxmKToKKyAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorCisgICAgICAgIGNsYXNzIExvYWRlcihvYmplY3QpOgorICAgICAgICAgICAgYXJncyA9IFtdCisgICAgICAgICAgICBkZWYgZGlzY292ZXIoc2VsZiwgc3RhcnRfZGlyLCBwYXR0ZXJuLCB0b3BfbGV2ZWxfZGlyKToKKyAgICAgICAgICAgICAgICBzZWxmLmFyZ3MuYXBwZW5kKChzdGFydF9kaXIsIHBhdHRlcm4sIHRvcF9sZXZlbF9kaXIpKQorICAgICAgICAgICAgICAgIHJldHVybiAndGVzdHMnCisKKyAgICAgICAgcHJvZ3JhbS50ZXN0TG9hZGVyID0gTG9hZGVyKCkKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5KFsnLXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMb2FkZXIuYXJncywgWygnLicsICd0ZXN0Ki5weScsIE5vbmUpXSkKKworICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19kb19kaXNjb3ZlcnlfY2FsbHNfbG9hZGVyKHNlbGYpOgorICAgICAgICBwcm9ncmFtID0gb2JqZWN0Ll9fbmV3X18odW5pdHRlc3QuVGVzdFByb2dyYW0pCisKKyAgICAgICAgY2xhc3MgTG9hZGVyKG9iamVjdCk6CisgICAgICAgICAgICBhcmdzID0gW10KKyAgICAgICAgICAgIGRlZiBkaXNjb3ZlcihzZWxmLCBzdGFydF9kaXIsIHBhdHRlcm4sIHRvcF9sZXZlbF9kaXIpOgorICAgICAgICAgICAgICAgIHNlbGYuYXJncy5hcHBlbmQoKHN0YXJ0X2RpciwgcGF0dGVybiwgdG9wX2xldmVsX2RpcikpCisgICAgICAgICAgICAgICAgcmV0dXJuICd0ZXN0cycKKworICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWyctdiddLCBMb2FkZXI9TG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udmVyYm9zaXR5LCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udGVzdCwgJ3Rlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMb2FkZXIuYXJncywgWygnLicsICd0ZXN0Ki5weScsIE5vbmUpXSkKKworICAgICAgICBMb2FkZXIuYXJncyA9IFtdCisgICAgICAgIHByb2dyYW0gPSBvYmplY3QuX19uZXdfXyh1bml0dGVzdC5UZXN0UHJvZ3JhbSkKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5KFsnLS12ZXJib3NlJ10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCcuJywgJ3Rlc3QqLnB5JywgTm9uZSldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoW10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCcuJywgJ3Rlc3QqLnB5JywgTm9uZSldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWydmaXNoJ10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCdmaXNoJywgJ3Rlc3QqLnB5JywgTm9uZSldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWydmaXNoJywgJ2VnZ3MnXSwgTG9hZGVyPUxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnRlc3QsICd0ZXN0cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTG9hZGVyLmFyZ3MsIFsoJ2Zpc2gnLCAnZWdncycsIE5vbmUpXSkKKworICAgICAgICBMb2FkZXIuYXJncyA9IFtdCisgICAgICAgIHByb2dyYW0gPSBvYmplY3QuX19uZXdfXyh1bml0dGVzdC5UZXN0UHJvZ3JhbSkKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5KFsnZmlzaCcsICdlZ2dzJywgJ2hhbSddLCBMb2FkZXI9TG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udGVzdCwgJ3Rlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMb2FkZXIuYXJncywgWygnZmlzaCcsICdlZ2dzJywgJ2hhbScpXSkKKworICAgICAgICBMb2FkZXIuYXJncyA9IFtdCisgICAgICAgIHByb2dyYW0gPSBvYmplY3QuX19uZXdfXyh1bml0dGVzdC5UZXN0UHJvZ3JhbSkKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5KFsnLXMnLCAnZmlzaCddLCBMb2FkZXI9TG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udGVzdCwgJ3Rlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMb2FkZXIuYXJncywgWygnZmlzaCcsICd0ZXN0Ki5weScsIE5vbmUpXSkKKworICAgICAgICBMb2FkZXIuYXJncyA9IFtdCisgICAgICAgIHByb2dyYW0gPSBvYmplY3QuX19uZXdfXyh1bml0dGVzdC5UZXN0UHJvZ3JhbSkKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5KFsnLXQnLCAnZmlzaCddLCBMb2FkZXI9TG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udGVzdCwgJ3Rlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMb2FkZXIuYXJncywgWygnLicsICd0ZXN0Ki5weScsICdmaXNoJyldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWyctcCcsICdmaXNoJ10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCcuJywgJ2Zpc2gnLCBOb25lKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHJvZ3JhbS5mYWlsZmFzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwcm9ncmFtLmNhdGNoYnJlYWspCisKKyAgICAgICAgTG9hZGVyLmFyZ3MgPSBbXQorICAgICAgICBwcm9ncmFtID0gb2JqZWN0Ll9fbmV3X18odW5pdHRlc3QuVGVzdFByb2dyYW0pCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeShbJy1wJywgJ2VnZ3MnLCAnLXMnLCAnZmlzaCcsICctdicsICctZicsICctYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9hZGVyPUxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnRlc3QsICd0ZXN0cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTG9hZGVyLmFyZ3MsIFsoJ2Zpc2gnLCAnZWdncycsIE5vbmUpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnZlcmJvc2l0eSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2dyYW0uZmFpbGZhc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9ncmFtLmNhdGNoYnJlYWspCisKKyAgICBkZWYgdGVzdF9kZXRlY3RfbW9kdWxlX2NsYXNoKHNlbGYpOgorICAgICAgICBjbGFzcyBNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIF9fZmlsZV9fID0gJ2Jhci9mb28ucHknCisgICAgICAgIHN5cy5tb2R1bGVzWydmb28nXSA9IE1vZHVsZQorICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmFic3BhdGgoJ2ZvbycpCisgICAgICAgIG9yaWdpbmFsX2xpc3RkaXIgPSBvcy5saXN0ZGlyCisgICAgICAgIG9yaWdpbmFsX2lzZmlsZSA9IG9zLnBhdGguaXNmaWxlCisgICAgICAgIG9yaWdpbmFsX2lzZGlyID0gb3MucGF0aC5pc2RpcgorCisgICAgICAgIGRlZiBjbGVhbnVwKCk6CisgICAgICAgICAgICBvcy5saXN0ZGlyID0gb3JpZ2luYWxfbGlzdGRpcgorICAgICAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBvcmlnaW5hbF9pc2ZpbGUKKyAgICAgICAgICAgIG9zLnBhdGguaXNkaXIgPSBvcmlnaW5hbF9pc2RpcgorICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydmb28nXQorICAgICAgICAgICAgaWYgZnVsbF9wYXRoIGluIHN5cy5wYXRoOgorICAgICAgICAgICAgICAgIHN5cy5wYXRoLnJlbW92ZShmdWxsX3BhdGgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQorCisgICAgICAgIGRlZiBsaXN0ZGlyKF8pOgorICAgICAgICAgICAgcmV0dXJuIFsnZm9vLnB5J10KKyAgICAgICAgZGVmIGlzZmlsZShfKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGRlZiBpc2RpcihfKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIG9zLmxpc3RkaXIgPSBsaXN0ZGlyCisgICAgICAgIG9zLnBhdGguaXNmaWxlID0gaXNmaWxlCisgICAgICAgIG9zLnBhdGguaXNkaXIgPSBpc2RpcgorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIG1vZF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoJ2JhcicpCisgICAgICAgIGV4cGVjdGVkX2RpciA9IG9zLnBhdGguYWJzcGF0aCgnZm9vJykKKyAgICAgICAgbXNnID0gcmUuZXNjYXBlKHIiJ2ZvbycgbW9kdWxlIGluY29ycmVjdGx5IGltcG9ydGVkIGZyb20gJXIuIEV4cGVjdGVkICVyLiAiCisgICAgICAgICAgICAgICAgIklzIHRoaXMgbW9kdWxlIGdsb2JhbGx5IGluc3RhbGxlZD8iICUgKG1vZF9kaXIsIGV4cGVjdGVkX2RpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKAorICAgICAgICAgICAgSW1wb3J0RXJyb3IsICdeJXMkJyAlIG1zZywgbG9hZGVyLmRpc2NvdmVyLAorICAgICAgICAgICAgc3RhcnRfZGlyPSdmb28nLCBwYXR0ZXJuPSdmb28ucHknCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMucGF0aFswXSwgZnVsbF9wYXRoKQorCisKKyAgICBkZWYgdGVzdF9kaXNjb3ZlcnlfZnJvbV9kb3R0ZWRfcGF0aChzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgdGVzdHMgPSBbc2VsZl0KKyAgICAgICAgZXhwZWN0ZWRQYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZSh1bml0dGVzdC50ZXN0Ll9fZmlsZV9fKSkKKworICAgICAgICBzZWxmLndhc1J1biA9IEZhbHNlCisgICAgICAgIGRlZiBfZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4pOgorICAgICAgICAgICAgc2VsZi53YXNSdW4gPSBUcnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0X2RpciwgZXhwZWN0ZWRQYXRoKQorICAgICAgICAgICAgcmV0dXJuIHRlc3RzCisgICAgICAgIGxvYWRlci5fZmluZF90ZXN0cyA9IF9maW5kX3Rlc3RzCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmRpc2NvdmVyKCd1bml0dGVzdC50ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYud2FzUnVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLl90ZXN0cywgdGVzdHMpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdW5pdHRlc3QvdGVzdC90ZXN0X2Z1bmN0aW9udGVzdGNhc2UucHkgYi9saWIvcHl0aG9uMi43L3VuaXR0ZXN0L3Rlc3QvdGVzdF9mdW5jdGlvbnRlc3RjYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZGQ4NzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3VuaXR0ZXN0L3Rlc3QvdGVzdF9mdW5jdGlvbnRlc3RjYXNlLnB5CkBAIC0wLDAgKzEsMTQ4IEBACitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdAorCisKK2NsYXNzIFRlc3RfRnVuY3Rpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4gRm9yCisgICAgIyBUZXN0Q2FzZSBpbnN0YW5jZXMsIHRoaXMgd2lsbCBhbHdheXMgYmUgMSIKKyAgICBkZWYgdGVzdF9jb3VudFRlc3RDYXNlcyhzZWxmKToKKyAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5jb3VudFRlc3RDYXNlcygpLCAxKQorCisgICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAorICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKKyAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCisgICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiBzZXRVcCgpIHJhaXNlcworICAgICMgYW4gZXhjZXB0aW9uLgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl9zZXRVcChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgZGVmIHNldFVwKCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCdzZXRVcCcpCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBzZXRVcCcpCisKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQorCisgICAgICAgIGRlZiB0ZWFyRG93bigpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQorCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAnYWRkRXJyb3InLCAnc3RvcFRlc3QnXQorICAgICAgICB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKHRlc3QsIHNldFVwLCB0ZWFyRG93bikucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAorICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKKyAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCisgICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0aGUgdGVzdCByYWlzZXMKKyAgICAjIGFuIGVycm9yIChhcyBvcHBvc2VkIHRvIGEgZmFpbHVyZSkuCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3Rlc3Qoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgIGRlZiBzZXRVcCgpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgnc2V0VXAnKQorCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZXN0JykKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IHRlc3QnKQorCisgICAgICAgIGRlZiB0ZWFyRG93bigpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQorCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICdhZGRFcnJvcicsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdzdG9wVGVzdCddCisgICAgICAgIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UodGVzdCwgc2V0VXAsIHRlYXJEb3duKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCisgICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQorICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKKyAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCisgICAgIworICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHRoZSB0ZXN0IHNpZ25hbHMKKyAgICAjIGEgZmFpbHVyZSAoYXMgb3Bwb3NlZCB0byBhbiBlcnJvcikuCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2ZhaWx1cmVfaW5fdGVzdChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgZGVmIHNldFVwKCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCdzZXRVcCcpCisKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQorICAgICAgICAgICAgc2VsZi5mYWlsKCdyYWlzZWQgYnkgdGVzdCcpCisKKyAgICAgICAgZGVmIHRlYXJEb3duKCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZWFyRG93bicpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ2FkZEZhaWx1cmUnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnc3RvcFRlc3QnXQorICAgICAgICB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKHRlc3QsIHNldFVwLCB0ZWFyRG93bikucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAorICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKKyAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCisgICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0ZWFyRG93bigpIHJhaXNlcworICAgICMgYW4gZXhjZXB0aW9uLgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl90ZWFyRG93bihzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgZGVmIHNldFVwKCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCdzZXRVcCcpCisKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQorCisgICAgICAgIGRlZiB0ZWFyRG93bigpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgdGVhckRvd24nKQorCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsICdhZGRFcnJvcicsCisgICAgICAgICAgICAgICAgICAgICdzdG9wVGVzdCddCisgICAgICAgIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UodGVzdCwgc2V0VXAsIHRlYXJEb3duKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJSZXR1cm4gYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIHRlc3QgY2FzZS4iCisgICAgIworICAgICMgQmVjYXVzZSBvZiB0aGUgdmFndWUgbmF0dXJlIG9mIHRoZSBkb2NzLCBJJ20gbm90IGdvaW5nIHRvIGxvY2sgdGhpcworICAgICMgdGVzdCBkb3duIHRvbyBtdWNoLiBSZWFsbHkgYWxsIHRoYXQgY2FuIGJlIGFzc2VydGVkIGlzIHRoYXQgdGhlIGlkKCkKKyAgICAjIHdpbGwgYmUgYSBzdHJpbmcgKGVpdGhlciA4LWJ5dGUgb3IgdW5pY29kZSAtLSBhZ2FpbiwgYmVjYXVzZSB0aGUgZG9jcworICAgICMganVzdCBzYXkgInN0cmluZyIpCisgICAgZGVmIHRlc3RfaWQoc2VsZik6CisgICAgICAgIHRlc3QgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodGVzdC5pZCgpLCBiYXNlc3RyaW5nKQorCisgICAgIyAiUmV0dXJucyBhIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXN0LCBvciBOb25lIGlmIG5vIGRlc2NyaXB0aW9uCisgICAgIyBoYXMgYmVlbiBwcm92aWRlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgcmV0dXJucworICAgICMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRlc3QgbWV0aG9kJ3MgZG9jc3RyaW5nLCBpZiBhdmFpbGFibGUsIG9yIE5vbmUuIgorICAgIGRlZiB0ZXN0X3Nob3J0RGVzY3JpcHRpb25fX25vX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5zaG9ydERlc2NyaXB0aW9uKCksIE5vbmUpCisKKyAgICAjICJSZXR1cm5zIGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHRlc3QsIG9yIE5vbmUgaWYgbm8gZGVzY3JpcHRpb24KKyAgICAjIGhhcyBiZWVuIHByb3ZpZGVkLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCByZXR1cm5zCisgICAgIyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdGVzdCBtZXRob2QncyBkb2NzdHJpbmcsIGlmIGF2YWlsYWJsZSwgb3IgTm9uZS4iCisgICAgZGVmIHRlc3Rfc2hvcnREZXNjcmlwdGlvbl9fc2luZ2xlbGluZV9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGRlc2MgPSAidGhpcyB0ZXN0cyBmb28iCisgICAgICAgIHRlc3QgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSwgZGVzY3JpcHRpb249ZGVzYykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Quc2hvcnREZXNjcmlwdGlvbigpLCAidGhpcyB0ZXN0cyBmb28iKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9saWIvcHl0aG9uMi43L3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkgYi9saWIvcHl0aG9uMi43L3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0NGEyMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdW5pdHRlc3QvdGVzdC90ZXN0X2xvYWRlci5weQpAQCAtMCwwICsxLDEyODYgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcworCisKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIFRlc3RfVGVzdExvYWRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyAiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgVGVzdENhc2UtZGVyaXZlZAorICAgICMgY2xhc3MgdGVzdENhc2VDbGFzcyIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tVGVzdENhc2Uoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcworCisgICAgICAgIHRlc3RzID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXSkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbyksIHRlc3RzKQorCisgICAgIyAiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgVGVzdENhc2UtZGVyaXZlZAorICAgICMgY2xhc3MgdGVzdENhc2VDbGFzcyIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgaXQgZG9lcyB0aGUgcmlnaHQgdGhpbmcgZXZlbiBpZiBubyB0ZXN0cyB3ZXJlIGZvdW5kCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbVRlc3RDYXNlX19ub19tYXRjaGVzKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKKworICAgICAgICBlbXB0eV9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShGb28pLCBlbXB0eV9zdWl0ZSkKKworICAgICMgIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIFRlc3RDYXNlLWRlcml2ZWQKKyAgICAjIGNsYXNzIHRlc3RDYXNlQ2xhc3MiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIGlmIGxvYWRUZXN0c0Zyb21UZXN0Q2FzZSgpIGlzIGdpdmVuIGFuIG9iamVjdAorICAgICMgdGhhdCBpc24ndCBhIHN1YmNsYXNzIG9mIFRlc3RDYXNlPyBTcGVjaWZpY2FsbHksIHdoYXQgaGFwcGVucworICAgICMgaWYgdGVzdENhc2VDbGFzcyBpcyBhIHN1YmNsYXNzIG9mIFRlc3RTdWl0ZT8KKyAgICAjCisgICAgIyBUaGlzIGlzIGNoZWNrZWQgZm9yIHNwZWNpZmljYWxseSBpbiB0aGUgY29kZSwgc28gd2UgYmV0dGVyIGFkZCBhCisgICAgIyB0ZXN0IGZvciBpdC4KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tVGVzdENhc2VfX1Rlc3RTdWl0ZV9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgTm90QVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RTdWl0ZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoTm90QVRlc3RDYXNlKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdTaG91bGQgcmFpc2UgVHlwZUVycm9yJykKKworICAgICMgIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIFRlc3RDYXNlLWRlcml2ZWQKKyAgICAjIGNsYXNzIHRlc3RDYXNlQ2xhc3MiCisgICAgIworICAgICMgTWFrZSBzdXJlIGxvYWRUZXN0c0Zyb21UZXN0Q2FzZSgpIHBpY2tzIHVwIHRoZSBkZWZhdWx0IHRlc3QgbWV0aG9kCisgICAgIyBuYW1lIChhcyBzcGVjaWZpZWQgYnkgVGVzdENhc2UpLCBldmVuIHRob3VnaCB0aGUgbWV0aG9kIG5hbWUgZG9lcworICAgICMgbm90IG1hdGNoIHRoZSBkZWZhdWx0IFRlc3RMb2FkZXIudGVzdE1ldGhvZFByZWZpeCBzdHJpbmcKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tVGVzdENhc2VfX2RlZmF1bHRfbWV0aG9kX25hbWUoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgICMgVGhpcyBoYXMgdG8gYmUgZmFsc2UgZm9yIHRoZSB0ZXN0IHRvIHN1Y2NlZWQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgncnVuVGVzdCcuc3RhcnRzd2l0aChsb2FkZXIudGVzdE1ldGhvZFByZWZpeCkpCisKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW0ZvbygncnVuVGVzdCcpXSkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZQorCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjICJUaGlzIG1ldGhvZCBzZWFyY2hlcyBgbW9kdWxlYCBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb20gVGVzdENhc2UiCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fVGVzdENhc2Vfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorCisgICAgICAgIGV4cGVjdGVkID0gW2xvYWRlci5zdWl0ZUNsYXNzKFtNeVRlc3RDYXNlKCd0ZXN0JyldKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgZXhwZWN0ZWQpCisKKyAgICAjICJUaGlzIG1ldGhvZCBzZWFyY2hlcyBgbW9kdWxlYCBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb20gVGVzdENhc2UiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIGlmIG5vIHRlc3RzIGFyZSBmb3VuZCAobm8gVGVzdENhc2UgaW5zdGFuY2VzKT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTW9kdWxlX19ub19UZXN0Q2FzZV9pbnN0YW5jZXMoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbXSkKKworICAgICMgIlRoaXMgbWV0aG9kIHNlYXJjaGVzIGBtb2R1bGVgIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbSBUZXN0Q2FzZSIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgaWYgbm8gdGVzdHMgYXJlIGZvdW5kIChUZXN0Q2FzZXMgaW5zdGFuY2VzLCBidXQgbm8gdGVzdHMpPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21Nb2R1bGVfX25vX1Rlc3RDYXNlX3Rlc3RzKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbbG9hZGVyLnN1aXRlQ2xhc3MoKV0pCisKKyAgICAjICJUaGlzIG1ldGhvZCBzZWFyY2hlcyBgbW9kdWxlYCBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb20gVGVzdENhc2UicworICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyBpZiBsb2FkVGVzdHNGcm9tTW9kdWxlKCkgaXMgZ2l2ZW4gc29tZXRoaW5nIG90aGVyCisgICAgIyB0aGFuIGEgbW9kdWxlPworICAgICMKKyAgICAjIFhYWCBDdXJyZW50bHksIGl0IHN1Y2NlZWRzIGFueXdheS4gVGhpcyBmbGV4aWJpbGl0eQorICAgICMgc2hvdWxkIGVpdGhlciBiZSBkb2N1bWVudGVkIG9yIGxvYWRUZXN0c0Zyb21Nb2R1bGUoKSBzaG91bGQKKyAgICAjIHJhaXNlIGEgVHlwZUVycm9yCisgICAgIworICAgICMgWFhYIENlcnRhaW4gcGVvcGxlIGFyZSB1c2luZyB0aGlzIGJlaGF2aW91ci4gV2UnbGwgYWRkIGEgdGVzdCBmb3IgaXQKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTW9kdWxlX19ub3RfYV9tb2R1bGUoc2VsZik6CisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIE5vdEFNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIHRlc3RfMiA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShOb3RBTW9kdWxlKQorCisgICAgICAgIHJlZmVyZW5jZSA9IFt1bml0dGVzdC5UZXN0U3VpdGUoW015VGVzdENhc2UoJ3Rlc3QnKV0pXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCByZWZlcmVuY2UpCisKKworICAgICMgQ2hlY2sgdGhhdCBsb2FkVGVzdHNGcm9tTW9kdWxlIGhvbm9ycyAob3Igbm90KSBhIG1vZHVsZQorICAgICMgd2l0aCBhIGxvYWRfdGVzdHMgZnVuY3Rpb24uCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fbG9hZF90ZXN0cyhzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQorCisgICAgICAgIGxvYWRfdGVzdHNfYXJncyA9IFtdCisgICAgICAgIGRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRlc3RzLCB1bml0dGVzdC5UZXN0U3VpdGUpCisgICAgICAgICAgICBsb2FkX3Rlc3RzX2FyZ3MuZXh0ZW5kKChsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0cworICAgICAgICBtLmxvYWRfdGVzdHMgPSBsb2FkX3Rlc3RzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCB1bml0dGVzdC5UZXN0U3VpdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZF90ZXN0c19hcmdzLCBbbG9hZGVyLCBzdWl0ZSwgTm9uZV0pCisKKyAgICAgICAgbG9hZF90ZXN0c19hcmdzID0gW10KKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtLCB1c2VfbG9hZF90ZXN0cz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkX3Rlc3RzX2FyZ3MsIFtdKQorCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fZmF1bHR5X2xvYWRfdGVzdHMoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKworICAgICAgICBkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignc29tZSBmYWlsdXJlJykKKyAgICAgICAgbS5sb2FkX3Rlc3RzID0gbG9hZF90ZXN0cworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgdW5pdHRlc3QuVGVzdFN1aXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCisgICAgICAgIHRlc3QgPSBsaXN0KHN1aXRlKVswXQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgInNvbWUgZmFpbHVyZSIsIHRlc3QubSkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUoKQorCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCkKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMKKyAgICAjIElzIFZhbHVlRXJyb3IgcmFpc2VkIGluIHJlc3BvbnNlIHRvIGFuIGVtcHR5IG5hbWU/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX2VtcHR5X25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnJykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIkVtcHR5IG1vZHVsZSBuYW1lIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHRoZSBuYW1lIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycz8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fbWFsZm9ybWVkX25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgICMgWFhYIFNob3VsZCB0aGlzIHJhaXNlIFZhbHVlRXJyb3Igb3IgSW1wb3J0RXJyb3I/CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnYWJjICgpIC8vJykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8gYQorICAgICMgbW9kdWxlIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIGEgbW9kdWxlIGJ5IHRoYXQgbmFtZSBjYW4ndCBiZSBmb3VuZD8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fdW5rbm93bl9tb2R1bGVfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdzZGFzZmFzZmFzZGYnKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIk5vIG1vZHVsZSBuYW1lZCBzZGFzZmFzZmFzZGYiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBJbXBvcnRFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHRoZSBtb2R1bGUgaXMgZm91bmQsIGJ1dCB0aGUgYXR0cmlidXRlIGNhbid0PworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX191bmtub3duX2F0dHJfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd1bml0dGVzdC5zZGFzZmFzZmFzZGYnKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgd2hlbiB3ZSBwcm92aWRlIHRoZSBtb2R1bGUsIGJ1dCB0aGUgYXR0cmlidXRlIGNhbid0IGJlCisgICAgIyBmb3VuZD8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfdW5rbm93bl9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3NkYXNmYXNmYXNkZicsIHVuaXR0ZXN0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjIC4uLgorICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCisgICAgIworICAgICMgRG9lcyBsb2FkVGVzdHNGcm9tTmFtZSByYWlzZSBWYWx1ZUVycm9yIHdoZW4gcGFzc2VkIGFuIGVtcHR5CisgICAgIyBuYW1lIHJlbGF0aXZlIHRvIGEgcHJvdmlkZWQgbW9kdWxlPworICAgICMKKyAgICAjIFhYWCBTaG91bGQgcHJvYmFibHkgcmFpc2UgYSBWYWx1ZUVycm9yIGluc3RlYWQgb2YgYW4gQXR0cmlidXRlRXJyb3IKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfZW1wdHlfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCcnLCB1bml0dGVzdCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjIC4uLgorICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gYW4gaW1wb3NzaWJsZSBuYW1lIGlzIGdpdmVuLCByZWxhdGl2ZSB0byB0aGUgcHJvdmlkZWQKKyAgICAjIGBtb2R1bGVgPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9tYWxmb3JtZWRfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgIyBYWFggU2hvdWxkIHRoaXMgcmFpc2UgQXR0cmlidXRlRXJyb3Igb3IgVmFsdWVFcnJvcj8KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdhYmMgKCkgLy8nLCB1bml0dGVzdCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCisKKyAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgorICAgICMKKyAgICAjIERvZXMgbG9hZFRlc3RzRnJvbU5hbWUgcmFpc2UgVHlwZUVycm9yIHdoZW4gdGhlIGBtb2R1bGVgIGFyZ3VtZW50CisgICAgIyBpc24ndCBhIG1vZHVsZSBvYmplY3Q/CisgICAgIworICAgICMgWFhYIEFjY2VwdHMgdGhlIG5vdC1hLW1vZHVsZSBvYmplY3QsIGlnbm9ybmluZyB0aGUgb2JqZWN0J3MgdHlwZQorICAgICMgVGhpcyBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIG9yIHRoZSBtZXRob2QgbmFtZSBzaG91bGQgYmUgY2hhbmdlZAorICAgICMKKyAgICAjIFhYWCBTb21lIHBlb3BsZSBhcmUgcmVseWluZyBvbiB0aGlzLCBzbyBrZWVwIGl0IGZvciBub3cKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfbm90X2FfbW9kdWxlKHNlbGYpOgorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBOb3RBTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICB0ZXN0XzIgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0XzInLCBOb3RBTW9kdWxlKQorCisgICAgICAgIHJlZmVyZW5jZSA9IFtNeVRlc3RDYXNlKCd0ZXN0JyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIHJlZmVyZW5jZSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIworICAgICMgRG9lcyBpdCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIG5hbWUgcmVzb2x2ZXMgdG8gYW4gaW52YWxpZAorICAgICMgb2JqZWN0PworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9iYWRfb2JqZWN0KHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIG0udGVzdGNhc2VfMSA9IG9iamVjdCgpCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdGNhc2VfMScsIG0pCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBUeXBlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5CisgICAgIyByZXNvbHZlIGVpdGhlciB0byAuLi4gYSB0ZXN0IGNhc2UgY2xhc3MiCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3JlbGF0aXZlX1Rlc3RDYXNlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0Y2FzZV8xJywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW015VGVzdENhc2UoJ3Rlc3QnKV0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9UZXN0U3VpdGUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtNeVRlc3RDYXNlKCd0ZXN0JyldKQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdHN1aXRlJywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbTXlUZXN0Q2FzZSgndGVzdCcpXSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bworICAgICMgLi4uIGEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV90ZXN0bWV0aG9kKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0Y2FzZV8xLnRlc3QnLCBtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtNeVRlc3RDYXNlKCd0ZXN0JyldKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjCisgICAgIyBEb2VzIGxvYWRUZXN0c0Zyb21OYW1lKCkgcmFpc2UgdGhlIHByb3BlciBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8KKyAgICAjIHJlc29sdmUgImEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIiB0aGF0IGRvZXNuJ3QgZXhpc3QKKyAgICAjIGZvciB0aGUgZ2l2ZW4gbmFtZSAocmVsYXRpdmUgdG8gYSBwcm92aWRlZCBtb2R1bGUpPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9pbnZhbGlkX3Rlc3RtZXRob2Qoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0Y2FzZV8xLnRlc3Rmb28nLCBtKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgInR5cGUgb2JqZWN0ICdNeVRlc3RDYXNlJyBoYXMgbm8gYXR0cmlidXRlICd0ZXN0Zm9vJyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgLi4uIFRlc3RTdWl0ZSBpbnN0YW5jZSIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fY2FsbGFibGVfX1Rlc3RTdWl0ZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICB0ZXN0Y2FzZV8xID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgIHRlc3RjYXNlXzIgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgZGVmIHJldHVybl9UZXN0U3VpdGUoKToKKyAgICAgICAgICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RjYXNlXzEsIHRlc3RjYXNlXzJdKQorICAgICAgICBtLnJldHVybl9UZXN0U3VpdGUgPSByZXR1cm5fVGVzdFN1aXRlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdyZXR1cm5fVGVzdFN1aXRlJywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3Rlc3RjYXNlXzEsIHRlc3RjYXNlXzJdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIFRlc3RDYXNlIC4uLiBpbnN0YW5jZSIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fY2FsbGFibGVfX1Rlc3RDYXNlX2luc3RhbmNlKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIHRlc3RjYXNlXzEgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgZGVmIHJldHVybl9UZXN0Q2FzZSgpOgorICAgICAgICAgICAgcmV0dXJuIHRlc3RjYXNlXzEKKyAgICAgICAgbS5yZXR1cm5fVGVzdENhc2UgPSByZXR1cm5fVGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3JldHVybl9UZXN0Q2FzZScsIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFt0ZXN0Y2FzZV8xXSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bworICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSBUZXN0Q2FzZSAuLi4gaW5zdGFuY2UiCisgICAgIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgI092ZXJyaWRlIHRoZSBzdWl0ZUNsYXNzIGF0dHJpYnV0ZSB0byBlbnN1cmUgdGhhdCB0aGUgc3VpdGVDbGFzcworICAgICNhdHRyaWJ1dGUgaXMgdXNlZAorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19jYWxsYWJsZV9fVGVzdENhc2VfaW5zdGFuY2VfUHJvcGVyU3VpdGVDbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgU3ViVGVzdFN1aXRlKHVuaXR0ZXN0LlRlc3RTdWl0ZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgdGVzdGNhc2VfMSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICBkZWYgcmV0dXJuX1Rlc3RDYXNlKCk6CisgICAgICAgICAgICByZXR1cm4gdGVzdGNhc2VfMQorICAgICAgICBtLnJldHVybl9UZXN0Q2FzZSA9IHJldHVybl9UZXN0Q2FzZQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IFN1YlRlc3RTdWl0ZQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgncmV0dXJuX1Rlc3RDYXNlJywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3Rlc3RjYXNlXzFdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MiCisgICAgIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgI092ZXJyaWRlIHRoZSBzdWl0ZUNsYXNzIGF0dHJpYnV0ZSB0byBlbnN1cmUgdGhhdCB0aGUgc3VpdGVDbGFzcworICAgICNhdHRyaWJ1dGUgaXMgdXNlZAorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV90ZXN0bWV0aG9kX1Byb3BlclN1aXRlQ2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFN1YlRlc3RTdWl0ZSh1bml0dGVzdC5UZXN0U3VpdGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzPVN1YlRlc3RTdWl0ZQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdGNhc2VfMS50ZXN0JywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbTXlUZXN0Q2FzZSgndGVzdCcpXSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bworICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIGlmIHRoZSBjYWxsYWJsZSByZXR1cm5zIHNvbWV0aGluZyBlbHNlPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19jYWxsYWJsZV9fd3JvbmdfdHlwZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBkZWYgcmV0dXJuX3dyb25nKCk6CisgICAgICAgICAgICByZXR1cm4gNgorICAgICAgICBtLnJldHVybl93cm9uZyA9IHJldHVybl93cm9uZworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3JldHVybl93cm9uZycsIG0pCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUgZmFpbGVkIHRvIHJhaXNlIFR5cGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIGNhbiByZWZlciB0byBtb2R1bGVzIGFuZCBwYWNrYWdlcyB3aGljaCBoYXZlIG5vdCBiZWVuCisgICAgIyBpbXBvcnRlZDsgdGhleSB3aWxsIGJlIGltcG9ydGVkIGFzIGEgc2lkZS1lZmZlY3QiCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX21vZHVsZV9ub3RfbG9hZGVkKHNlbGYpOgorICAgICAgICAjIFdlJ3JlIGdvaW5nIHRvIHRyeSB0byBsb2FkIHRoaXMgbW9kdWxlIGFzIGEgc2lkZS1lZmZlY3QsIHNvIGl0CisgICAgICAgICMgYmV0dGVyIG5vdCBiZSBsb2FkZWQgYmVmb3JlIHdlIHRyeS4KKyAgICAgICAgIworICAgICAgICBtb2R1bGVfbmFtZSA9ICd1bml0dGVzdC50ZXN0LmR1bW15JworICAgICAgICBzeXMubW9kdWxlcy5wb3AobW9kdWxlX25hbWUsIE5vbmUpCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKG1vZHVsZV9uYW1lKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW10pCisKKyAgICAgICAgICAgICMgbW9kdWxlIHNob3VsZCBub3cgYmUgbG9hZGVkLCB0aGFua3MgdG8gbG9hZFRlc3RzRnJvbU5hbWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGVfbmFtZSwgc3lzLm1vZHVsZXMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBtb2R1bGVfbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCkKKworICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoKQorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgIlNpbWlsYXIgdG8gbG9hZFRlc3RzRnJvbU5hbWUoKSwgYnV0IHRha2VzIGEgc2VxdWVuY2Ugb2YgbmFtZXMgcmF0aGVyCisgICAgIyB0aGFuIGEgc2luZ2xlIG5hbWUuIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyBpZiB0aGF0IHNlcXVlbmNlIG9mIG5hbWVzIGlzIGVtcHR5PworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fZW1wdHlfbmFtZV9saXN0KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtdKQorCisgICAgIyAiU2ltaWxhciB0byBsb2FkVGVzdHNGcm9tTmFtZSgpLCBidXQgdGFrZXMgYSBzZXF1ZW5jZSBvZiBuYW1lcyByYXRoZXIKKyAgICAjIHRoYW4gYSBzaW5nbGUgbmFtZS4iCisgICAgIyAuLi4KKyAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyBpZiB0aGF0IHNlcXVlbmNlIG9mIG5hbWVzIGlzIGVtcHR5PworICAgICMKKyAgICAjIFhYWCBTaG91bGQgdGhpcyByYWlzZSBhIFZhbHVlRXJyb3Igb3IganVzdCByZXR1cm4gYW4gZW1wdHkgVGVzdFN1aXRlPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fcmVsYXRpdmVfZW1wdHlfbmFtZV9saXN0KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoW10sIHVuaXR0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbXSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIworICAgICMgSXMgVmFsdWVFcnJvciByYWlzZWQgaW4gcmVzcG9uc2UgdG8gYW4gZW1wdHkgbmFtZT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX2VtcHR5X25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWycnXSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIkVtcHR5IG1vZHVsZSBuYW1lIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgd2hlbiBwcmVzZW50ZWQgd2l0aCBhbiBpbXBvc3NpYmxlIG1vZHVsZSBuYW1lPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fbWFsZm9ybWVkX25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgICMgWFhYIFNob3VsZCB0aGlzIHJhaXNlIFZhbHVlRXJyb3Igb3IgSW1wb3J0RXJyb3I/CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydhYmMgKCkgLy8nXSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgd2hlbiBubyBtb2R1bGUgY2FuIGJlIGZvdW5kIGZvciB0aGUgZ2l2ZW4gbmFtZT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3Vua25vd25fbW9kdWxlX25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydzZGFzZmFzZmFzZGYnXSkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJObyBtb2R1bGUgbmFtZWQgc2Rhc2Zhc2Zhc2RmIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIEltcG9ydEVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gdGhlIG1vZHVsZSBjYW4gYmUgZm91bmQsIGJ1dCBub3QgdGhlIGF0dHJpYnV0ZT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3Vua25vd25fYXR0cl9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsndW5pdHRlc3Quc2Rhc2Zhc2Zhc2RmJywgJ3VuaXR0ZXN0J10pCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3NkYXNmYXNmYXNkZiciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjIC4uLgorICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gZ2l2ZW4gYW4gdW5rbm93biBhdHRyaWJ1dGUgb24gYSBzcGVjaWZpZWQgYG1vZHVsZWAKKyAgICAjIGFyZ3VtZW50PworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fdW5rbm93bl9uYW1lX3JlbGF0aXZlXzEoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydzZGFzZmFzZmFzZGYnXSwgdW5pdHRlc3QpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3NkYXNmYXNmYXNkZiciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMgLi4uCisgICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKKyAgICAjCisgICAgIyBEbyB1bmtub3duIGF0dHJpYnV0ZXMgKHJlbGF0aXZlIHRvIGEgcHJvdmlkZWQgbW9kdWxlKSBzdGlsbCByYWlzZSBhbgorICAgICMgZXhjZXB0aW9uIGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mIHZhbGlkIGF0dHJpYnV0ZSBuYW1lcz8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3Vua25vd25fbmFtZV9yZWxhdGl2ZV8yKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnVGVzdENhc2UnLCAnc2Rhc2Zhc2Zhc2RmJ10sIHVuaXR0ZXN0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjIC4uLgorICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gZmFjZWQgd2l0aCB0aGUgZW1wdHkgc3RyaW5nPworICAgICMKKyAgICAjIFhYWCBUaGlzIGN1cnJlbnRseSByYWlzZXMgQXR0cmlidXRlRXJyb3IsIHRob3VnaCBWYWx1ZUVycm9yIGlzIHByb2JhYmx5CisgICAgIyBtb3JlIGFwcHJvcHJpYXRlCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9lbXB0eV9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnJ10sIHVuaXR0ZXN0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIyAuLi4KKyAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHByZXNlbnRlZCB3aXRoIGFuIGltcG9zc2libGUgYXR0cmlidXRlIG5hbWU/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9tYWxmb3JtZWRfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgIyBYWFggU2hvdWxkIHRoaXMgcmFpc2UgQXR0cmlidXRlRXJyb3Igb3IgVmFsdWVFcnJvcj8KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ2FiYyAoKSAvLyddLCB1bml0dGVzdCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQorCisgICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKKyAgICAjCisgICAgIyBEb2VzIGxvYWRUZXN0c0Zyb21OYW1lcygpIG1ha2Ugc3VyZSB0aGUgcHJvdmlkZWQgYG1vZHVsZWAgaXMgaW4gZmFjdAorICAgICMgYSBtb2R1bGU/CisgICAgIworICAgICMgWFhYIFRoaXMgdmFsaWRhdGlvbiBpcyBjdXJyZW50bHkgbm90IGRvbmUuIFRoaXMgZmxleGliaWxpdHkgc2hvdWxkCisgICAgIyBlaXRoZXIgYmUgZG9jdW1lbnRlZCBvciBhIFR5cGVFcnJvciBzaG91bGQgYmUgcmFpc2VkLgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fcmVsYXRpdmVfbm90X2FfbW9kdWxlKHNlbGYpOgorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBOb3RBTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICB0ZXN0XzIgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RfMiddLCBOb3RBTW9kdWxlKQorCisgICAgICAgIHJlZmVyZW5jZSA9IFt1bml0dGVzdC5UZXN0U3VpdGUoW015VGVzdENhc2UoJ3Rlc3QnKV0pXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCByZWZlcmVuY2UpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMKKyAgICAjIERvZXMgaXQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBuYW1lIHJlc29sdmVzIHRvIGFuIGludmFsaWQKKyAgICAjIG9iamVjdD8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX2JhZF9vYmplY3Qoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgbS50ZXN0Y2FzZV8xID0gb2JqZWN0KCkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEnXSwgbSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIFR5cGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIHRlc3QgY2FzZSBjbGFzcyIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX1Rlc3RDYXNlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEnXSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBleHBlY3RlZCA9IGxvYWRlci5zdWl0ZUNsYXNzKFtNeVRlc3RDYXNlKCd0ZXN0JyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbZXhwZWN0ZWRdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSBUZXN0U3VpdGUgaW5zdGFuY2UiCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9UZXN0U3VpdGUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtNeVRlc3RDYXNlKCd0ZXN0JyldKQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWyd0ZXN0c3VpdGUnXSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbbS50ZXN0c3VpdGVdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvIC4uLiBhCisgICAgIyB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MiCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV90ZXN0bWV0aG9kKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEudGVzdCddLCBtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorCisgICAgICAgIHJlZl9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbTXlUZXN0Q2FzZSgndGVzdCcpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3JlZl9zdWl0ZV0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8gLi4uIGEKKyAgICAjIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcyIKKyAgICAjCisgICAgIyBEb2VzIHRoZSBtZXRob2QgZ3JhY2VmdWxseSBoYW5kbGUgbmFtZXMgdGhhdCBpbml0aWFsbHkgbG9vayBsaWtlIHRoZXkKKyAgICAjIHJlc29sdmUgdG8gImEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIiBidXQgZG9uJ3Q/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9pbnZhbGlkX3Rlc3RtZXRob2Qoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEudGVzdGZvbyddLCBtKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgInR5cGUgb2JqZWN0ICdNeVRlc3RDYXNlJyBoYXMgbm8gYXR0cmlidXRlICd0ZXN0Zm9vJyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgLi4uIFRlc3RTdWl0ZSBpbnN0YW5jZSIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX2NhbGxhYmxlX19UZXN0U3VpdGUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgdGVzdGNhc2VfMSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICB0ZXN0Y2FzZV8yID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgIGRlZiByZXR1cm5fVGVzdFN1aXRlKCk6CisgICAgICAgICAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0Y2FzZV8xLCB0ZXN0Y2FzZV8yXSkKKyAgICAgICAgbS5yZXR1cm5fVGVzdFN1aXRlID0gcmV0dXJuX1Rlc3RTdWl0ZQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydyZXR1cm5fVGVzdFN1aXRlJ10sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisKKyAgICAgICAgZXhwZWN0ZWQgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RjYXNlXzEsIHRlc3RjYXNlXzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbZXhwZWN0ZWRdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIFRlc3RDYXNlIC4uLiBpbnN0YW5jZSIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX2NhbGxhYmxlX19UZXN0Q2FzZV9pbnN0YW5jZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICB0ZXN0Y2FzZV8xID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgIGRlZiByZXR1cm5fVGVzdENhc2UoKToKKyAgICAgICAgICAgIHJldHVybiB0ZXN0Y2FzZV8xCisgICAgICAgIG0ucmV0dXJuX1Rlc3RDYXNlID0gcmV0dXJuX1Rlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3JldHVybl9UZXN0Q2FzZSddLCBtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorCisgICAgICAgIHJlZl9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdGNhc2VfMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtyZWZfc3VpdGVdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZSIKKyAgICAjCisgICAgIyBBcmUgc3RhdGljbWV0aG9kcyBoYW5kbGVkIGNvcnJlY3RseT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX2NhbGxhYmxlX19jYWxsX3N0YXRpY21ldGhvZChzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBUZXN0MSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdGVzdGNhc2VfMSA9IFRlc3QxKCd0ZXN0JykKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVzdGNhc2VfMQorICAgICAgICBtLkZvbyA9IEZvbworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydGb28uZm9vJ10sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisKKyAgICAgICAgcmVmX3N1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0Y2FzZV8xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3JlZl9zdWl0ZV0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHRoZSBjYWxsYWJsZSByZXR1cm5zIHNvbWV0aGluZyBlbHNlPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fY2FsbGFibGVfX3dyb25nX3R5cGUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgZGVmIHJldHVybl93cm9uZygpOgorICAgICAgICAgICAgcmV0dXJuIDYKKyAgICAgICAgbS5yZXR1cm5fd3JvbmcgPSByZXR1cm5fd3JvbmcKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3JldHVybl93cm9uZyddLCBtKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyBmYWlsZWQgdG8gcmFpc2UgVHlwZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgY2FuIHJlZmVyIHRvIG1vZHVsZXMgYW5kIHBhY2thZ2VzIHdoaWNoIGhhdmUgbm90IGJlZW4KKyAgICAjIGltcG9ydGVkOyB0aGV5IHdpbGwgYmUgaW1wb3J0ZWQgYXMgYSBzaWRlLWVmZmVjdCIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX21vZHVsZV9ub3RfbG9hZGVkKHNlbGYpOgorICAgICAgICAjIFdlJ3JlIGdvaW5nIHRvIHRyeSB0byBsb2FkIHRoaXMgbW9kdWxlIGFzIGEgc2lkZS1lZmZlY3QsIHNvIGl0CisgICAgICAgICMgYmV0dGVyIG5vdCBiZSBsb2FkZWQgYmVmb3JlIHdlIHRyeS4KKyAgICAgICAgIworICAgICAgICBtb2R1bGVfbmFtZSA9ICd1bml0dGVzdC50ZXN0LmR1bW15JworICAgICAgICBzeXMubW9kdWxlcy5wb3AobW9kdWxlX25hbWUsIE5vbmUpCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbbW9kdWxlX25hbWVdKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3VuaXR0ZXN0LlRlc3RTdWl0ZSgpXSkKKworICAgICAgICAgICAgIyBtb2R1bGUgc2hvdWxkIG5vdyBiZSBsb2FkZWQsIHRoYW5rcyB0byBsb2FkVGVzdHNGcm9tTmFtZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZV9uYW1lLCBzeXMubW9kdWxlcykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG1vZHVsZV9uYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcygpCisKKyAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIuZ2V0VGVzdENhc2VOYW1lcygpCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyAiUmV0dXJuIGEgc29ydGVkIHNlcXVlbmNlIG9mIG1ldGhvZCBuYW1lcyBmb3VuZCB3aXRoaW4gdGVzdENhc2VDbGFzcyIKKyAgICAjCisgICAgIyBUZXN0LmZvb2JhciBpcyBkZWZpbmVkIHRvIG1ha2Ugc3VyZSBnZXRUZXN0Q2FzZU5hbWVzKCkgcmVzcGVjdHMKKyAgICAjIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4CisgICAgZGVmIHRlc3RfZ2V0VGVzdENhc2VOYW1lcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vYmFyKHNlbGYpOiBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhUZXN0KSwgWyd0ZXN0XzEnLCAndGVzdF8yJ10pCisKKyAgICAjICJSZXR1cm4gYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgbWV0aG9kIG5hbWVzIGZvdW5kIHdpdGhpbiB0ZXN0Q2FzZUNsYXNzIgorICAgICMKKyAgICAjIERvZXMgZ2V0VGVzdENhc2VOYW1lcygpIGJlaGF2ZSBhcHByb3ByaWF0ZWx5IGlmIG5vIHRlc3RzIGFyZSBmb3VuZD8KKyAgICBkZWYgdGVzdF9nZXRUZXN0Q2FzZU5hbWVzX19ub190ZXN0cyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgZm9vYmFyKHNlbGYpOiBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhUZXN0KSwgW10pCisKKyAgICAjICJSZXR1cm4gYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgbWV0aG9kIG5hbWVzIGZvdW5kIHdpdGhpbiB0ZXN0Q2FzZUNsYXNzIgorICAgICMKKyAgICAjIEFyZSBub3QtVGVzdENhc2VzIGhhbmRsZWQgZ3JhY2VmdWxseT8KKyAgICAjCisgICAgIyBYWFggVGhpcyBzaG91bGQgcmFpc2UgYSBUeXBlRXJyb3IsIG5vdCByZXR1cm4gYSBsaXN0CisgICAgIworICAgICMgWFhYIEl0J3MgdG9vIGxhdGUgaW4gdGhlIDIuNSByZWxlYXNlIGN5Y2xlIHRvIGZpeCB0aGlzLCBidXQgaXQgc2hvdWxkCisgICAgIyBwcm9iYWJseSBiZSByZXZpc2l0ZWQgZm9yIDIuNgorICAgIGRlZiB0ZXN0X2dldFRlc3RDYXNlTmFtZXNfX25vdF9hX1Rlc3RDYXNlKHNlbGYpOgorICAgICAgICBjbGFzcyBCYWRDYXNlKGludCk6CisgICAgICAgICAgICBkZWYgdGVzdF9mb28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBuYW1lcyA9IGxvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKEJhZENhc2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lcywgWyd0ZXN0X2ZvbyddKQorCisgICAgIyAiUmV0dXJuIGEgc29ydGVkIHNlcXVlbmNlIG9mIG1ldGhvZCBuYW1lcyBmb3VuZCB3aXRoaW4gdGVzdENhc2VDbGFzcyIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgaW5oZXJpdGVkIG5hbWVzIGFyZSBoYW5kbGVkLgorICAgICMKKyAgICAjIFRlc3RQLmZvb2JhciBpcyBkZWZpbmVkIHRvIG1ha2Ugc3VyZSBnZXRUZXN0Q2FzZU5hbWVzKCkgcmVzcGVjdHMKKyAgICAjIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4CisgICAgZGVmIHRlc3RfZ2V0VGVzdENhc2VOYW1lc19faW5oZXJpdGFuY2Uoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3RQKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29iYXIoc2VsZik6IHBhc3MKKworICAgICAgICBjbGFzcyBUZXN0QyhUZXN0UCk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8zKHNlbGYpOiBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgbmFtZXMgPSBbJ3Rlc3RfMScsICd0ZXN0XzInLCAndGVzdF8zJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhUZXN0QyksIG5hbWVzKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIuZ2V0VGVzdENhc2VOYW1lcygpCisKKyAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIudGVzdE1ldGhvZFByZWZpeAorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgIlN0cmluZyBnaXZpbmcgdGhlIHByZWZpeCBvZiBtZXRob2QgbmFtZXMgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcworICAgICMgdGVzdCBtZXRob2RzIgorICAgICMKKyAgICAjIEltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGlzIHRoYXQgdGVzdE1ldGhvZFByZWZpeCBpcyByZXNwZWN0ZWQgYnkKKyAgICAjIGFsbCBsb2FkVGVzdHNGcm9tKiBtZXRob2RzLgorICAgIGRlZiB0ZXN0X3Rlc3RNZXRob2RQcmVmaXhfX2xvYWRUZXN0c0Zyb21UZXN0Q2FzZShzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCisKKyAgICAgICAgdGVzdHNfMSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCdmb29fYmFyJyldKQorICAgICAgICB0ZXN0c18yID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXSkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAnZm9vJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgdGVzdHNfMSkKKworICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICd0ZXN0JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgdGVzdHNfMikKKworICAgICMgIlN0cmluZyBnaXZpbmcgdGhlIHByZWZpeCBvZiBtZXRob2QgbmFtZXMgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcworICAgICMgdGVzdCBtZXRob2RzIgorICAgICMKKyAgICAjIEltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGlzIHRoYXQgdGVzdE1ldGhvZFByZWZpeCBpcyByZXNwZWN0ZWQgYnkKKyAgICAjIGFsbCBsb2FkVGVzdHNGcm9tKiBtZXRob2RzLgorICAgIGRlZiB0ZXN0X3Rlc3RNZXRob2RQcmVmaXhfX2xvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgdGVzdHNfMSA9IFt1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygnZm9vX2JhcicpXSldCisgICAgICAgIHRlc3RzXzIgPSBbdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXSldCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ2ZvbycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pKSwgdGVzdHNfMSkKKworICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICd0ZXN0JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkpLCB0ZXN0c18yKQorCisgICAgIyAiU3RyaW5nIGdpdmluZyB0aGUgcHJlZml4IG9mIG1ldGhvZCBuYW1lcyB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzCisgICAgIyB0ZXN0IG1ldGhvZHMiCisgICAgIworICAgICMgSW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gaXMgdGhhdCB0ZXN0TWV0aG9kUHJlZml4IGlzIHJlc3BlY3RlZCBieQorICAgICMgYWxsIGxvYWRUZXN0c0Zyb20qIG1ldGhvZHMuCisgICAgZGVmIHRlc3RfdGVzdE1ldGhvZFByZWZpeF9fbG9hZFRlc3RzRnJvbU5hbWUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgdGVzdHNfMSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCdmb29fYmFyJyldKQorICAgICAgICB0ZXN0c18yID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXSkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAnZm9vJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnRm9vJywgbSksIHRlc3RzXzEpCisKKyAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAndGVzdCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ0ZvbycsIG0pLCB0ZXN0c18yKQorCisgICAgIyAiU3RyaW5nIGdpdmluZyB0aGUgcHJlZml4IG9mIG1ldGhvZCBuYW1lcyB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzCisgICAgIyB0ZXN0IG1ldGhvZHMiCisgICAgIworICAgICMgSW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gaXMgdGhhdCB0ZXN0TWV0aG9kUHJlZml4IGlzIHJlc3BlY3RlZCBieQorICAgICMgYWxsIGxvYWRUZXN0c0Zyb20qIG1ldGhvZHMuCisgICAgZGVmIHRlc3RfdGVzdE1ldGhvZFByZWZpeF9fbG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcworICAgICAgICBtLkZvbyA9IEZvbworCisgICAgICAgIHRlc3RzXzEgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3VuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCdmb29fYmFyJyldKV0pCisgICAgICAgIHRlc3RzXzIgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldKQorICAgICAgICB0ZXN0c18yID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0c18yXSkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAnZm9vJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydGb28nXSwgbSksIHRlc3RzXzEpCisKKyAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAndGVzdCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnRm9vJ10sIG0pLCB0ZXN0c18yKQorCisgICAgIyAiVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ3Rlc3QnIgorICAgIGRlZiB0ZXN0X3Rlc3RNZXRob2RQcmVmaXhfX2RlZmF1bHRfdmFsdWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPT0gJ3Rlc3QnKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIudGVzdE1ldGhvZFByZWZpeAorCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyAiRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgorICAgICMgZ2V0VGVzdENhc2VOYW1lcygpIGFuZCBhbGwgdGhlIGxvYWRUZXN0c0Zyb21YKCkgbWV0aG9kcyIKKyAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYpOgorICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIC1jbXAoeCwgeSkKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSByZXZlcnNlZF9jbXAKKworICAgICAgICB0ZXN0cyA9IGxvYWRlci5zdWl0ZUNsYXNzKFtGb28oJ3Rlc3RfMicpLCBGb28oJ3Rlc3RfMScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbyksIHRlc3RzKQorCisgICAgIyAiRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgorICAgICMgZ2V0VGVzdENhc2VOYW1lcygpIGFuZCBhbGwgdGhlIGxvYWRUZXN0c0Zyb21YKCkgbWV0aG9kcyIKKyAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fbG9hZFRlc3RzRnJvbU1vZHVsZShzZWxmKToKKyAgICAgICAgZGVmIHJldmVyc2VkX2NtcCh4LCB5KToKKyAgICAgICAgICAgIHJldHVybiAtY21wKHgsIHkpCisKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworICAgICAgICBtLkZvbyA9IEZvbworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSByZXZlcnNlZF9jbXAKKworICAgICAgICB0ZXN0cyA9IFtsb2FkZXIuc3VpdGVDbGFzcyhbRm9vKCd0ZXN0XzInKSwgRm9vKCd0ZXN0XzEnKV0pXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkpLCB0ZXN0cykKKworICAgICMgIkZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29tcGFyZSBtZXRob2QgbmFtZXMgd2hlbiBzb3J0aW5nIHRoZW0gaW4KKyAgICAjIGdldFRlc3RDYXNlTmFtZXMoKSBhbmQgYWxsIHRoZSBsb2FkVGVzdHNGcm9tWCgpIG1ldGhvZHMiCisgICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX2xvYWRUZXN0c0Zyb21OYW1lKHNlbGYpOgorICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIC1jbXAoeCwgeSkKKworICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IHJldmVyc2VkX2NtcAorCisgICAgICAgIHRlc3RzID0gbG9hZGVyLnN1aXRlQ2xhc3MoW0ZvbygndGVzdF8yJyksIEZvbygndGVzdF8xJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnRm9vJywgbSksIHRlc3RzKQorCisgICAgIyAiRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgorICAgICMgZ2V0VGVzdENhc2VOYW1lcygpIGFuZCBhbGwgdGhlIGxvYWRUZXN0c0Zyb21YKCkgbWV0aG9kcyIKKyAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fbG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYpOgorICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIC1jbXAoeCwgeSkKKworICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IHJldmVyc2VkX2NtcAorCisgICAgICAgIHRlc3RzID0gW2xvYWRlci5zdWl0ZUNsYXNzKFtGb28oJ3Rlc3RfMicpLCBGb28oJ3Rlc3RfMScpXSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnRm9vJ10sIG0pKSwgdGVzdHMpCisKKyAgICAjICJGdW5jdGlvbiB0byBiZSB1c2VkIHRvIGNvbXBhcmUgbWV0aG9kIG5hbWVzIHdoZW4gc29ydGluZyB0aGVtIGluCisgICAgIyBnZXRUZXN0Q2FzZU5hbWVzKCkiCisgICAgIworICAgICMgRG9lcyBpdCBhY3R1YWxseSBhZmZlY3QgZ2V0VGVzdENhc2VOYW1lcygpPworICAgIGRlZiB0ZXN0X3NvcnRUZXN0TWV0aG9kc1VzaW5nX19nZXRUZXN0Q2FzZU5hbWVzKHNlbGYpOgorICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIC1jbXAoeCwgeSkKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSByZXZlcnNlZF9jbXAKKworICAgICAgICB0ZXN0X25hbWVzID0gWyd0ZXN0XzInLCAndGVzdF8xJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhGb28pLCB0ZXN0X25hbWVzKQorCisgICAgIyAiVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGJ1aWx0LWluIGNtcCgpIGZ1bmN0aW9uIgorICAgIGRlZiB0ZXN0X3NvcnRUZXN0TWV0aG9kc1VzaW5nX19kZWZhdWx0X3ZhbHVlKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyBpcyBjbXApCisKKyAgICAjICJpdCBjYW4gYmUgc2V0IHRvIE5vbmUgdG8gZGlzYWJsZSB0aGUgc29ydC4iCisgICAgIworICAgICMgWFhYIEhvdyBpcyB0aGlzIGRpZmZlcmVudCBmcm9tIHJlYXNzaWduaW5nIGNtcD8gQXJlIHRoZSB0ZXN0cyByZXR1cm5lZAorICAgICMgaW4gYSByYW5kb20gb3JkZXIgb3Igc29tZXRoaW5nPyBUaGlzIGJlaGF2aW91ciBzaG91bGQgZGllCisgICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX05vbmUoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IE5vbmUKKworICAgICAgICB0ZXN0X25hbWVzID0gWyd0ZXN0XzInLCAndGVzdF8xJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoRm9vKSksIHNldCh0ZXN0X25hbWVzKSkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nCisKKyAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIuc3VpdGVDbGFzcworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgIkNhbGxhYmxlIG9iamVjdCB0aGF0IGNvbnN0cnVjdHMgYSB0ZXN0IHN1aXRlIGZyb20gYSBsaXN0IG9mIHRlc3RzLiIKKyAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19sb2FkVGVzdHNGcm9tVGVzdENhc2Uoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcworCisgICAgICAgIHRlc3RzID0gW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gbGlzdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgdGVzdHMpCisKKyAgICAjIEl0IGlzIGltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBUZXN0TG9hZGVyLnN1aXRlQ2xhc3MgdGhhdAorICAgICMgYWxsIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbSogbWV0aG9kcyByZXNwZWN0IGl0LiBMZXQncyBtYWtlIHN1cmUKKyAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19sb2FkVGVzdHNGcm9tTW9kdWxlKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcworICAgICAgICBtLkZvbyA9IEZvbworCisgICAgICAgIHRlc3RzID0gW1tGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXV0KKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3MgPSBsaXN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSksIHRlc3RzKQorCisgICAgIyBJdCBpcyBpbXBsaWNpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgVGVzdExvYWRlci5zdWl0ZUNsYXNzIHRoYXQKKyAgICAjIGFsbCBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb20qIG1ldGhvZHMgcmVzcGVjdCBpdC4gTGV0J3MgbWFrZSBzdXJlCisgICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fbG9hZFRlc3RzRnJvbU5hbWUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgdGVzdHMgPSBbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0KKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3MgPSBsaXN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdGb28nLCBtKSwgdGVzdHMpCisKKyAgICAjIEl0IGlzIGltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBUZXN0TG9hZGVyLnN1aXRlQ2xhc3MgdGhhdAorICAgICMgYWxsIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbSogbWV0aG9kcyByZXNwZWN0IGl0LiBMZXQncyBtYWtlIHN1cmUKKyAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19sb2FkVGVzdHNGcm9tTmFtZXMoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgdGVzdHMgPSBbW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldXQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnRm9vJ10sIG0pLCB0ZXN0cykKKworICAgICMgIlRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBUZXN0U3VpdGUgY2xhc3MiCisgICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fZGVmYXVsdF92YWx1ZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2FkZXIuc3VpdGVDbGFzcyBpcyB1bml0dGVzdC5UZXN0U3VpdGUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkgYi9saWIvcHl0aG9uMi43L3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZDkwOTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5CkBAIC0wLDAgKzEsMjU1IEBACitmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworCitjbGFzcyBUZXN0X1Rlc3RQcm9ncmFtKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Rpc2NvdmVyeV9mcm9tX2RvdHRlZF9wYXRoKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0ZXN0cyA9IFtzZWxmXQorICAgICAgICBleHBlY3RlZFBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKHVuaXR0ZXN0LnRlc3QuX19maWxlX18pKQorCisgICAgICAgIHNlbGYud2FzUnVuID0gRmFsc2UKKyAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybik6CisgICAgICAgICAgICBzZWxmLndhc1J1biA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnRfZGlyLCBleHBlY3RlZFBhdGgpCisgICAgICAgICAgICByZXR1cm4gdGVzdHMKKyAgICAgICAgbG9hZGVyLl9maW5kX3Rlc3RzID0gX2ZpbmRfdGVzdHMKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIuZGlzY292ZXIoJ3VuaXR0ZXN0LnRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi53YXNSdW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuX3Rlc3RzLCB0ZXN0cykKKworICAgICMgSG9ycmlibGUgd2hpdGUgYm94IHRlc3QKKyAgICBkZWYgdGVzdE5vRXhpdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gb2JqZWN0KCkKKyAgICAgICAgdGVzdCA9IG9iamVjdCgpCisKKyAgICAgICAgY2xhc3MgRmFrZVJ1bm5lcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3QgPSB0ZXN0CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgIHJ1bm5lciA9IEZha2VSdW5uZXIoKQorCisgICAgICAgIG9sZFBhcnNlQXJncyA9IHVuaXR0ZXN0LlRlc3RQcm9ncmFtLnBhcnNlQXJncworICAgICAgICBkZWYgcmVzdG9yZVBhcnNlQXJncygpOgorICAgICAgICAgICAgdW5pdHRlc3QuVGVzdFByb2dyYW0ucGFyc2VBcmdzID0gb2xkUGFyc2VBcmdzCisgICAgICAgIHVuaXR0ZXN0LlRlc3RQcm9ncmFtLnBhcnNlQXJncyA9IGxhbWJkYSAqYXJnczogTm9uZQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZVBhcnNlQXJncykKKworICAgICAgICBkZWYgcmVtb3ZlVGVzdCgpOgorICAgICAgICAgICAgZGVsIHVuaXR0ZXN0LlRlc3RQcm9ncmFtLnRlc3QKKyAgICAgICAgdW5pdHRlc3QuVGVzdFByb2dyYW0udGVzdCA9IHRlc3QKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlbW92ZVRlc3QpCisKKyAgICAgICAgcHJvZ3JhbSA9IHVuaXR0ZXN0LlRlc3RQcm9ncmFtKHRlc3RSdW5uZXI9cnVubmVyLCBleGl0PUZhbHNlLCB2ZXJib3NpdHk9MikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0ucmVzdWx0LCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVubmVyLnRlc3QsIHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS52ZXJib3NpdHksIDIpCisKKyAgICBjbGFzcyBGb29CYXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBkZWYgdGVzdFBhc3Moc2VsZik6CisgICAgICAgICAgICBhc3NlcnQgVHJ1ZQorICAgICAgICBkZWYgdGVzdEZhaWwoc2VsZik6CisgICAgICAgICAgICBhc3NlcnQgRmFsc2UKKworICAgIGNsYXNzIEZvb0JhckxvYWRlcih1bml0dGVzdC5UZXN0TG9hZGVyKToKKyAgICAgICAgIiIiVGVzdCBsb2FkZXIgdGhhdCByZXR1cm5zIGEgc3VpdGUgY29udGFpbmluZyBGb29CYXIuIiIiCisgICAgICAgIGRlZiBsb2FkVGVzdHNGcm9tTW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKAorICAgICAgICAgICAgICAgIFtzZWxmLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0X1Rlc3RQcm9ncmFtLkZvb0JhcildKQorCisKKyAgICBkZWYgdGVzdF9Ob25FeGl0KHNlbGYpOgorICAgICAgICBwcm9ncmFtID0gdW5pdHRlc3QubWFpbihleGl0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2PVsiZm9vYmFyIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXI9dW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoc3RyZWFtPVN0cmluZ0lPKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0TG9hZGVyPXNlbGYuRm9vQmFyTG9hZGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHByb2dyYW0sICdyZXN1bHQnKSkKKworCisgICAgZGVmIHRlc3RfRXhpdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBTeXN0ZW1FeGl0LAorICAgICAgICAgICAgdW5pdHRlc3QubWFpbiwKKyAgICAgICAgICAgIGFyZ3Y9WyJmb29iYXIiXSwKKyAgICAgICAgICAgIHRlc3RSdW5uZXI9dW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoc3RyZWFtPVN0cmluZ0lPKCkpLAorICAgICAgICAgICAgZXhpdD1UcnVlLAorICAgICAgICAgICAgdGVzdExvYWRlcj1zZWxmLkZvb0JhckxvYWRlcigpKQorCisKKyAgICBkZWYgdGVzdF9FeGl0QXNEZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFN5c3RlbUV4aXQsCisgICAgICAgICAgICB1bml0dGVzdC5tYWluLAorICAgICAgICAgICAgYXJndj1bImZvb2JhciJdLAorICAgICAgICAgICAgdGVzdFJ1bm5lcj11bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09U3RyaW5nSU8oKSksCisgICAgICAgICAgICB0ZXN0TG9hZGVyPXNlbGYuRm9vQmFyTG9hZGVyKCkpCisKKworY2xhc3MgSW5pdGlhbGlzYWJsZVByb2dyYW0odW5pdHRlc3QuVGVzdFByb2dyYW0pOgorICAgIGV4aXQgPSBGYWxzZQorICAgIHJlc3VsdCA9IE5vbmUKKyAgICB2ZXJib3NpdHkgPSAxCisgICAgZGVmYXVsdFRlc3QgPSBOb25lCisgICAgdGVzdFJ1bm5lciA9IE5vbmUKKyAgICB0ZXN0TG9hZGVyID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIKKyAgICBwcm9nTmFtZSA9ICd0ZXN0JworICAgIHRlc3QgPSAndGVzdCcKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBwYXNzCisKK1JFU1VMVCA9IG9iamVjdCgpCisKK2NsYXNzIEZha2VSdW5uZXIob2JqZWN0KToKKyAgICBpbml0QXJncyA9IE5vbmUKKyAgICB0ZXN0ID0gTm9uZQorICAgIHJhaXNlRXJyb3IgPSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgRmFrZVJ1bm5lci5pbml0QXJncyA9IGt3YXJncworICAgICAgICBpZiBGYWtlUnVubmVyLnJhaXNlRXJyb3I6CisgICAgICAgICAgICBGYWtlUnVubmVyLnJhaXNlRXJyb3IgPSBGYWxzZQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCisKKyAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgorICAgICAgICBGYWtlUnVubmVyLnRlc3QgPSB0ZXN0CisgICAgICAgIHJldHVybiBSRVNVTFQKKworY2xhc3MgVGVzdENvbW1hbmRMaW5lQXJncyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucHJvZ3JhbSA9IEluaXRpYWxpc2FibGVQcm9ncmFtKCkKKyAgICAgICAgc2VsZi5wcm9ncmFtLmNyZWF0ZVRlc3RzID0gbGFtYmRhOiBOb25lCisgICAgICAgIEZha2VSdW5uZXIuaW5pdEFyZ3MgPSBOb25lCisgICAgICAgIEZha2VSdW5uZXIudGVzdCA9IE5vbmUKKyAgICAgICAgRmFrZVJ1bm5lci5yYWlzZUVycm9yID0gRmFsc2UKKworICAgIGRlZiB0ZXN0SGVscEFuZFVua25vd24oc2VsZik6CisgICAgICAgIHByb2dyYW0gPSBzZWxmLnByb2dyYW0KKyAgICAgICAgZGVmIHVzYWdlRXhpdChtc2c9Tm9uZSk6CisgICAgICAgICAgICBwcm9ncmFtLm1zZyA9IG1zZworICAgICAgICAgICAgcHJvZ3JhbS5leGl0ID0gVHJ1ZQorICAgICAgICBwcm9ncmFtLnVzYWdlRXhpdCA9IHVzYWdlRXhpdAorCisgICAgICAgIGZvciBvcHQgaW4gJy1oJywgJy1IJywgJy0taGVscCc6CisgICAgICAgICAgICBwcm9ncmFtLmV4aXQgPSBGYWxzZQorICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvZ3JhbS5leGl0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJvZ3JhbS5tc2cpCisKKyAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsICctJCddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvZ3JhbS5leGl0KQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwcm9ncmFtLm1zZykKKworICAgIGRlZiB0ZXN0VmVyYm9zaXR5KHNlbGYpOgorICAgICAgICBwcm9ncmFtID0gc2VsZi5wcm9ncmFtCisKKyAgICAgICAgZm9yIG9wdCBpbiAnLXEnLCAnLS1xdWlldCc6CisgICAgICAgICAgICBwcm9ncmFtLnZlcmJvc2l0eSA9IDEKKyAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnZlcmJvc2l0eSwgMCkKKworICAgICAgICBmb3Igb3B0IGluICctdicsICctLXZlcmJvc2UnOgorICAgICAgICAgICAgcHJvZ3JhbS52ZXJib3NpdHkgPSAxCisgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS52ZXJib3NpdHksIDIpCisKKyAgICBkZWYgdGVzdEJ1ZmZlckNhdGNoRmFpbGZhc3Qoc2VsZik6CisgICAgICAgIHByb2dyYW0gPSBzZWxmLnByb2dyYW0KKyAgICAgICAgZm9yIGFyZywgYXR0ciBpbiAoKCdidWZmZXInLCAnYnVmZmVyJyksICgnZmFpbGZhc3QnLCAnZmFpbGZhc3QnKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJ2NhdGNoJywgJ2NhdGNoYnJlYWsnKSk6CisgICAgICAgICAgICBpZiBhdHRyID09ICdjYXRjaCcgYW5kIG5vdCBoYXNJbnN0YWxsSGFuZGxlcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBzaG9ydF9vcHQgPSAnLSVzJyAlIGFyZ1swXQorICAgICAgICAgICAgbG9uZ19vcHQgPSAnLS0lcycgJSBhcmcKKyAgICAgICAgICAgIGZvciBvcHQgaW4gc2hvcnRfb3B0LCBsb25nX29wdDoKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIE5vbmUpCisKKyAgICAgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSkKKworICAgICAgICAgICAgZm9yIG9wdCBpbiBzaG9ydF9vcHQsIGxvbmdfb3B0OgorICAgICAgICAgICAgICAgIG5vdF9ub25lID0gb2JqZWN0KCkKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIG5vdF9ub25lKQorCisgICAgICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHByb2dyYW0sIGF0dHIpLCBub3Rfbm9uZSkKKworICAgIGRlZiB0ZXN0UnVuVGVzdHNSdW5uZXJDbGFzcyhzZWxmKToKKyAgICAgICAgcHJvZ3JhbSA9IHNlbGYucHJvZ3JhbQorCisgICAgICAgIHByb2dyYW0udGVzdFJ1bm5lciA9IEZha2VSdW5uZXIKKyAgICAgICAgcHJvZ3JhbS52ZXJib3NpdHkgPSAndmVyYm9zaXR5JworICAgICAgICBwcm9ncmFtLmZhaWxmYXN0ID0gJ2ZhaWxmYXN0JworICAgICAgICBwcm9ncmFtLmJ1ZmZlciA9ICdidWZmZXInCisKKyAgICAgICAgcHJvZ3JhbS5ydW5UZXN0cygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLmluaXRBcmdzLCB7J3ZlcmJvc2l0eSc6ICd2ZXJib3NpdHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWxmYXN0JzogJ2ZhaWxmYXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidWZmZXInOiAnYnVmZmVyJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFrZVJ1bm5lci50ZXN0LCAndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5yZXN1bHQsIFJFU1VMVCkKKworICAgIGRlZiB0ZXN0UnVuVGVzdHNSdW5uZXJJbnN0YW5jZShzZWxmKToKKyAgICAgICAgcHJvZ3JhbSA9IHNlbGYucHJvZ3JhbQorCisgICAgICAgIHByb2dyYW0udGVzdFJ1bm5lciA9IEZha2VSdW5uZXIoKQorICAgICAgICBGYWtlUnVubmVyLmluaXRBcmdzID0gTm9uZQorCisgICAgICAgIHByb2dyYW0ucnVuVGVzdHMoKQorCisgICAgICAgICMgQSBuZXcgRmFrZVJ1bm5lciBzaG91bGQgbm90IGhhdmUgYmVlbiBpbnN0YW50aWF0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoRmFrZVJ1bm5lci5pbml0QXJncykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZha2VSdW5uZXIudGVzdCwgJ3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0ucmVzdWx0LCBSRVNVTFQpCisKKyAgICBkZWYgdGVzdFJ1blRlc3RzT2xkUnVubmVyQ2xhc3Moc2VsZik6CisgICAgICAgIHByb2dyYW0gPSBzZWxmLnByb2dyYW0KKworICAgICAgICBGYWtlUnVubmVyLnJhaXNlRXJyb3IgPSBUcnVlCisgICAgICAgIHByb2dyYW0udGVzdFJ1bm5lciA9IEZha2VSdW5uZXIKKyAgICAgICAgcHJvZ3JhbS52ZXJib3NpdHkgPSAndmVyYm9zaXR5JworICAgICAgICBwcm9ncmFtLmZhaWxmYXN0ID0gJ2ZhaWxmYXN0JworICAgICAgICBwcm9ncmFtLmJ1ZmZlciA9ICdidWZmZXInCisgICAgICAgIHByb2dyYW0udGVzdCA9ICd0ZXN0JworCisgICAgICAgIHByb2dyYW0ucnVuVGVzdHMoKQorCisgICAgICAgICMgSWYgaW5pdGlhbGl6aW5nIHJhaXNlcyBhIHR5cGUgZXJyb3IgaXQgc2hvdWxkIGJlIHJldHJpZWQKKyAgICAgICAgIyB3aXRob3V0IHRoZSBuZXcga2V5d29yZCBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLmluaXRBcmdzLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLnRlc3QsICd0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLnJlc3VsdCwgUkVTVUxUKQorCisgICAgZGVmIHRlc3RDYXRjaEJyZWFrSW5zdGFsbHNIYW5kbGVyKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1sndW5pdHRlc3QubWFpbiddCisgICAgICAgIG9yaWdpbmFsID0gbW9kdWxlLmluc3RhbGxIYW5kbGVyCisgICAgICAgIGRlZiByZXN0b3JlKCk6CisgICAgICAgICAgICBtb2R1bGUuaW5zdGFsbEhhbmRsZXIgPSBvcmlnaW5hbAorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZSkKKworICAgICAgICBzZWxmLmluc3RhbGxlZCA9IEZhbHNlCisgICAgICAgIGRlZiBmYWtlSW5zdGFsbEhhbmRsZXIoKToKKyAgICAgICAgICAgIHNlbGYuaW5zdGFsbGVkID0gVHJ1ZQorICAgICAgICBtb2R1bGUuaW5zdGFsbEhhbmRsZXIgPSBmYWtlSW5zdGFsbEhhbmRsZXIKKworICAgICAgICBwcm9ncmFtID0gc2VsZi5wcm9ncmFtCisgICAgICAgIHByb2dyYW0uY2F0Y2hicmVhayA9IFRydWUKKworICAgICAgICBwcm9ncmFtLnRlc3RSdW5uZXIgPSBGYWtlUnVubmVyCisKKyAgICAgICAgcHJvZ3JhbS5ydW5UZXN0cygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmluc3RhbGxlZCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5IGIvbGliL3B5dGhvbjIuNy91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNjhjMWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3VuaXR0ZXN0L3Rlc3QvdGVzdF9yZXN1bHQucHkKQEAgLTAsMCArMSw1NjcgQEAKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZXh0d3JhcAorZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF9zdXBwb3J0CisKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIFRlc3RfVGVzdFJlc3VsdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBOb3RlOiB0aGVyZSBhcmUgbm90IHNlcGFyYXRlIHRlc3RzIGZvciBUZXN0UmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSwKKyAgICAjIFRlc3RSZXN1bHQuZXJyb3JzLCBUZXN0UmVzdWx0LmZhaWx1cmVzLCBUZXN0UmVzdWx0LnRlc3RzUnVuIG9yCisgICAgIyBUZXN0UmVzdWx0LnNob3VsZFN0b3AgYmVjYXVzZSB0aGVzZSBvbmx5IGhhdmUgbWVhbmluZyBpbiB0ZXJtcyBvZgorICAgICMgb3RoZXIgVGVzdFJlc3VsdCBtZXRob2RzLgorICAgICMKKyAgICAjIEFjY29yZGluZ2x5LCB0ZXN0cyBmb3IgdGhlIGFmb3JlbmFtZWQgYXR0cmlidXRlcyBhcmUgaW5jb3Jwb3JhdGVkCisgICAgIyBpbiB3aXRoIHRoZSB0ZXN0cyBmb3IgdGhlIGRlZmluaW5nIG1ldGhvZHMuCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdC5fc3Rkb3V0X2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVzdWx0Ll9zdGRlcnJfYnVmZmVyKQorCisKKyAgICAjICJUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHRvIHNpZ25hbCB0aGF0IHRoZSBzZXQgb2YgdGVzdHMgYmVpbmcKKyAgICAjIHJ1biBzaG91bGQgYmUgYWJvcnRlZCBieSBzZXR0aW5nIHRoZSBUZXN0UmVzdWx0J3Mgc2hvdWxkU3RvcAorICAgICMgYXR0cmlidXRlIHRvIFRydWUuIgorICAgIGRlZiB0ZXN0X3N0b3Aoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorCisgICAgICAgIHJlc3VsdC5zdG9wKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBUcnVlKQorCisgICAgIyAiQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSB0ZXN0IGlzIGFib3V0IHRvIGJlIHJ1bi4gVGhlIGRlZmF1bHQKKyAgICAjIGltcGxlbWVudGF0aW9uIHNpbXBseSBpbmNyZW1lbnRzIHRoZSBpbnN0YW5jZSdzIHRlc3RzUnVuIGNvdW50ZXIuIgorICAgIGRlZiB0ZXN0X3N0YXJ0VGVzdChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRlc3QgPSBGb28oJ3Rlc3RfMScpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdCh0ZXN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQorCisgICAgICAgIHJlc3VsdC5zdG9wVGVzdCh0ZXN0KQorCisgICAgIyAiQ2FsbGVkIGFmdGVyIHRoZSB0ZXN0IGNhc2UgdGVzdCBoYXMgYmVlbiBleGVjdXRlZCwgcmVnYXJkbGVzcyBvZgorICAgICMgdGhlIG91dGNvbWUuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4iCisgICAgZGVmIHRlc3Rfc3RvcFRlc3Qoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorCisgICAgICAgIHJlc3VsdC5zdGFydFRlc3QodGVzdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKKworICAgICAgICByZXN1bHQuc3RvcFRlc3QodGVzdCkKKworICAgICAgICAjIFNhbWUgdGVzdHMgYXMgYWJvdmU7IG1ha2Ugc3VyZSBub3RoaW5nIGhhcyBjaGFuZ2VkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQorCisgICAgIyAiQ2FsbGVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGVzdHMgYXJlIHJ1bi4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLiIKKyAgICBkZWYgdGVzdF9zdGFydFRlc3RSdW5fc3RvcFRlc3RSdW4oc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuc3RhcnRUZXN0UnVuKCkKKyAgICAgICAgcmVzdWx0LnN0b3BUZXN0UnVuKCkKKworICAgICMgImFkZFN1Y2Nlc3ModGVzdCkiCisgICAgIyAuLi4KKyAgICAjICJDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIHRlc3Qgc3VjY2VlZHMiCisgICAgIyAuLi4KKyAgICAjICJ3YXNTdWNjZXNzZnVsKCkgLSBSZXR1cm5zIFRydWUgaWYgYWxsIHRlc3RzIHJ1biBzbyBmYXIgaGF2ZSBwYXNzZWQsCisgICAgIyBvdGhlcndpc2UgcmV0dXJucyBGYWxzZSIKKyAgICAjIC4uLgorICAgICMgInRlc3RzUnVuIC0gVGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4gc28gZmFyLiIKKyAgICAjIC4uLgorICAgICMgImVycm9ycyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKKyAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoaWNoIHJhaXNlZCBhbgorICAgICMgdW5leHBlY3RlZCBleGNlcHRpb24uIENvbnRhaW5zIGZvcm1hdHRlZAorICAgICMgdHJhY2ViYWNrcyBpbnN0ZWFkIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgorICAgICMgLi4uCisgICAgIyAiZmFpbHVyZXMgLSBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBUZXN0Q2FzZSBpbnN0YW5jZXMgYW5kCisgICAgIyBmb3JtYXR0ZWQgdHJhY2ViYWNrcy4gRWFjaCB0dXBsZSByZXByZXNlbnRzIGEgdGVzdCB3aGVyZSBhIGZhaWx1cmUgd2FzCisgICAgIyBleHBsaWNpdGx5IHNpZ25hbGxlZCB1c2luZyB0aGUgVGVzdENhc2UuZmFpbCooKSBvciBUZXN0Q2FzZS5hc3NlcnQqKCkKKyAgICAjIG1ldGhvZHMuIENvbnRhaW5zIGZvcm1hdHRlZCB0cmFjZWJhY2tzIGluc3RlYWQKKyAgICAjIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgorICAgIGRlZiB0ZXN0X2FkZFN1Y2Nlc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorCisgICAgICAgIHJlc3VsdC5zdGFydFRlc3QodGVzdCkKKyAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3ModGVzdCkKKyAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHRlc3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCisKKyAgICAjICJhZGRGYWlsdXJlKHRlc3QsIGVycikiCisgICAgIyAuLi4KKyAgICAjICJDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIHRlc3Qgc2lnbmFscyBhIGZhaWx1cmUuIGVyciBpcyBhIHR1cGxlIG9mCisgICAgIyB0aGUgZm9ybSByZXR1cm5lZCBieSBzeXMuZXhjX2luZm8oKTogKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIgorICAgICMgLi4uCisgICAgIyAid2FzU3VjY2Vzc2Z1bCgpIC0gUmV0dXJucyBUcnVlIGlmIGFsbCB0ZXN0cyBydW4gc28gZmFyIGhhdmUgcGFzc2VkLAorICAgICMgb3RoZXJ3aXNlIHJldHVybnMgRmFsc2UiCisgICAgIyAuLi4KKyAgICAjICJ0ZXN0c1J1biAtIFRoZSB0b3RhbCBudW1iZXIgb2YgdGVzdHMgcnVuIHNvIGZhci4iCisgICAgIyAuLi4KKyAgICAjICJlcnJvcnMgLSBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBUZXN0Q2FzZSBpbnN0YW5jZXMgYW5kCisgICAgIyBmb3JtYXR0ZWQgdHJhY2ViYWNrcy4gRWFjaCB0dXBsZSByZXByZXNlbnRzIGEgdGVzdCB3aGljaCByYWlzZWQgYW4KKyAgICAjIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLiBDb250YWlucyBmb3JtYXR0ZWQKKyAgICAjIHRyYWNlYmFja3MgaW5zdGVhZCBvZiBzeXMuZXhjX2luZm8oKSByZXN1bHRzLiIKKyAgICAjIC4uLgorICAgICMgImZhaWx1cmVzIC0gQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgVGVzdENhc2UgaW5zdGFuY2VzIGFuZAorICAgICMgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hlcmUgYSBmYWlsdXJlIHdhcworICAgICMgZXhwbGljaXRseSBzaWduYWxsZWQgdXNpbmcgdGhlIFRlc3RDYXNlLmZhaWwqKCkgb3IgVGVzdENhc2UuYXNzZXJ0KigpCisgICAgIyBtZXRob2RzLiBDb250YWlucyBmb3JtYXR0ZWQgdHJhY2ViYWNrcyBpbnN0ZWFkCisgICAgIyBvZiBzeXMuZXhjX2luZm8oKSByZXN1bHRzLiIKKyAgICBkZWYgdGVzdF9hZGRGYWlsdXJlKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdGVzdCA9IEZvbygndGVzdF8xJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdC5mYWlsKCJmb28iKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNfaW5mb190dXBsZSA9IHN5cy5leGNfaW5mbygpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdCh0ZXN0KQorICAgICAgICByZXN1bHQuYWRkRmFpbHVyZSh0ZXN0LCBleGNfaW5mb190dXBsZSkKKyAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHRlc3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQorCisgICAgICAgIHRlc3RfY2FzZSwgZm9ybWF0dGVkX2V4YyA9IHJlc3VsdC5mYWlsdXJlc1swXQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdF9jYXNlIGlzIHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmb3JtYXR0ZWRfZXhjLCBzdHIpCisKKyAgICAjICJhZGRFcnJvcih0ZXN0LCBlcnIpIgorICAgICMgLi4uCisgICAgIyAiQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSB0ZXN0IHJhaXNlcyBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiBlcnIKKyAgICAjIGlzIGEgdHVwbGUgb2YgdGhlIGZvcm0gcmV0dXJuZWQgYnkgc3lzLmV4Y19pbmZvKCk6CisgICAgIyAodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykiCisgICAgIyAuLi4KKyAgICAjICJ3YXNTdWNjZXNzZnVsKCkgLSBSZXR1cm5zIFRydWUgaWYgYWxsIHRlc3RzIHJ1biBzbyBmYXIgaGF2ZSBwYXNzZWQsCisgICAgIyBvdGhlcndpc2UgcmV0dXJucyBGYWxzZSIKKyAgICAjIC4uLgorICAgICMgInRlc3RzUnVuIC0gVGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4gc28gZmFyLiIKKyAgICAjIC4uLgorICAgICMgImVycm9ycyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKKyAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoaWNoIHJhaXNlZCBhbgorICAgICMgdW5leHBlY3RlZCBleGNlcHRpb24uIENvbnRhaW5zIGZvcm1hdHRlZAorICAgICMgdHJhY2ViYWNrcyBpbnN0ZWFkIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgorICAgICMgLi4uCisgICAgIyAiZmFpbHVyZXMgLSBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBUZXN0Q2FzZSBpbnN0YW5jZXMgYW5kCisgICAgIyBmb3JtYXR0ZWQgdHJhY2ViYWNrcy4gRWFjaCB0dXBsZSByZXByZXNlbnRzIGEgdGVzdCB3aGVyZSBhIGZhaWx1cmUgd2FzCisgICAgIyBleHBsaWNpdGx5IHNpZ25hbGxlZCB1c2luZyB0aGUgVGVzdENhc2UuZmFpbCooKSBvciBUZXN0Q2FzZS5hc3NlcnQqKCkKKyAgICAjIG1ldGhvZHMuIENvbnRhaW5zIGZvcm1hdHRlZCB0cmFjZWJhY2tzIGluc3RlYWQKKyAgICAjIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgorICAgIGRlZiB0ZXN0X2FkZEVycm9yKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdGVzdCA9IEZvbygndGVzdF8xJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXhjX2luZm9fdHVwbGUgPSBzeXMuZXhjX2luZm8oKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorCisgICAgICAgIHJlc3VsdC5zdGFydFRlc3QodGVzdCkKKyAgICAgICAgcmVzdWx0LmFkZEVycm9yKHRlc3QsIGV4Y19pbmZvX3R1cGxlKQorICAgICAgICByZXN1bHQuc3RvcFRlc3QodGVzdCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCisKKyAgICAgICAgdGVzdF9jYXNlLCBmb3JtYXR0ZWRfZXhjID0gcmVzdWx0LmVycm9yc1swXQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdF9jYXNlIGlzIHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmb3JtYXR0ZWRfZXhjLCBzdHIpCisKKyAgICBkZWYgdGVzdEdldERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZiksCisgICAgICAgICAgICAgICAgJ3Rlc3RHZXREZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcgKCcgKyBfX25hbWVfXyArCisgICAgICAgICAgICAgICAgJy5UZXN0X1Rlc3RSZXN1bHQpJykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0R2V0RGVzY3JpcHRpb25XaXRoT25lTGluZURvY3N0cmluZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGRvY3N0cmluZy4iIiIKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZiksCisgICAgICAgICAgICAgICAoJ3Rlc3RHZXREZXNjcmlwdGlvbldpdGhPbmVMaW5lRG9jc3RyaW5nICcKKyAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0UmVzdWx0KVxuJworICAgICAgICAgICAgICAgICdUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgZG9jc3RyaW5nLicpKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RHZXREZXNjcmlwdGlvbldpdGhNdWx0aUxpbmVEb2NzdHJpbmcoc2VsZik6CisgICAgICAgICIiIlRlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgZG9jc3RyaW5nLgorICAgICAgICBUaGUgc2Vjb25kIGxpbmUgb2YgdGhlIGRvY3N0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYpLAorICAgICAgICAgICAgICAgKCd0ZXN0R2V0RGVzY3JpcHRpb25XaXRoTXVsdGlMaW5lRG9jc3RyaW5nICcKKyAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0UmVzdWx0KVxuJworICAgICAgICAgICAgICAgICdUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyICcKKyAgICAgICAgICAgICAgICAnZG9jc3RyaW5nLicpKQorCisgICAgZGVmIHRlc3RTdGFja0ZyYW1lVHJpbW1pbmcoc2VsZik6CisgICAgICAgIGNsYXNzIEZyYW1lKG9iamVjdCk6CisgICAgICAgICAgICBjbGFzcyB0Yl9mcmFtZShvYmplY3QpOgorICAgICAgICAgICAgICAgIGZfZ2xvYmFscyA9IHt9CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC5faXNfcmVsZXZhbnRfdGJfbGV2ZWwoRnJhbWUpKQorCisgICAgICAgIEZyYW1lLnRiX2ZyYW1lLmZfZ2xvYmFsc1snX191bml0dGVzdCddID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Ll9pc19yZWxldmFudF90Yl9sZXZlbChGcmFtZSkpCisKKyAgICBkZWYgdGVzdEZhaWxGYXN0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgcmVzdWx0Ll9leGNfaW5mb190b19zdHJpbmcgPSBsYW1iZGEgKl86ICcnCisgICAgICAgIHJlc3VsdC5mYWlsZmFzdCA9IFRydWUKKyAgICAgICAgcmVzdWx0LmFkZEVycm9yKE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuc2hvdWxkU3RvcCkKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgcmVzdWx0Ll9leGNfaW5mb190b19zdHJpbmcgPSBsYW1iZGEgKl86ICcnCisgICAgICAgIHJlc3VsdC5mYWlsZmFzdCA9IFRydWUKKyAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUoTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zaG91bGRTdG9wKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuX2V4Y19pbmZvX3RvX3N0cmluZyA9IGxhbWJkYSAqXzogJycKKyAgICAgICAgcmVzdWx0LmZhaWxmYXN0ID0gVHJ1ZQorICAgICAgICByZXN1bHQuYWRkVW5leHBlY3RlZFN1Y2Nlc3MoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zaG91bGRTdG9wKQorCisgICAgZGVmIHRlc3RGYWlsRmFzdFNldEJ5UnVubmVyKHNlbGYpOgorICAgICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09U3RyaW5nSU8oKSwgZmFpbGZhc3Q9VHJ1ZSkKKyAgICAgICAgZGVmIHRlc3QocmVzdWx0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuZmFpbGZhc3QpCisgICAgICAgIHJ1bm5lci5ydW4odGVzdCkKKworCitjbGFzc0RpY3QgPSBkaWN0KHVuaXR0ZXN0LlRlc3RSZXN1bHQuX19kaWN0X18pCitmb3IgbSBpbiAoJ2FkZFNraXAnLCAnYWRkRXhwZWN0ZWRGYWlsdXJlJywgJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJywKKyAgICAgICAgICAgJ19faW5pdF9fJyk6CisgICAgZGVsIGNsYXNzRGljdFttXQorCitkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtPU5vbmUsIGRlc2NyaXB0aW9ucz1Ob25lLCB2ZXJib3NpdHk9Tm9uZSk6CisgICAgc2VsZi5mYWlsdXJlcyA9IFtdCisgICAgc2VsZi5lcnJvcnMgPSBbXQorICAgIHNlbGYudGVzdHNSdW4gPSAwCisgICAgc2VsZi5zaG91bGRTdG9wID0gRmFsc2UKKyAgICBzZWxmLmJ1ZmZlciA9IEZhbHNlCisKK2NsYXNzRGljdFsnX19pbml0X18nXSA9IF9faW5pdF9fCitPbGRSZXN1bHQgPSB0eXBlKCdPbGRSZXN1bHQnLCAob2JqZWN0LCksIGNsYXNzRGljdCkKKworY2xhc3MgVGVzdF9PbGRUZXN0UmVzdWx0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBhc3NlcnRPbGRSZXN1bHRXYXJuaW5nKHNlbGYsIHRlc3QsIGZhaWx1cmVzKToKKyAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCJUZXN0UmVzdWx0IGhhcyBubyBhZGQuKyBtZXRob2QsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKSk6CisgICAgICAgICAgICByZXN1bHQgPSBPbGRSZXN1bHQoKQorICAgICAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgZmFpbHVyZXMpCisKKyAgICBkZWYgdGVzdE9sZFRlc3RSZXN1bHQoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RTa2lwKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2Zvb2JhcicpCisgICAgICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCisgICAgICAgICAgICBkZWYgdGVzdEV4cGVjdGVkRmFpbChzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKKyAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIGRlZiB0ZXN0VW5leHBlY3RlZFN1Y2Nlc3Moc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGZvciB0ZXN0X25hbWUsIHNob3VsZF9wYXNzIGluICgoJ3Rlc3RTa2lwJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3Rlc3RFeHBlY3RlZEZhaWwnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgndGVzdFVuZXhwZWN0ZWRTdWNjZXNzJywgRmFsc2UpKToKKyAgICAgICAgICAgIHRlc3QgPSBUZXN0KHRlc3RfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0T2xkUmVzdWx0V2FybmluZyh0ZXN0LCBpbnQobm90IHNob3VsZF9wYXNzKSkKKworICAgIGRlZiB0ZXN0T2xkVGVzdFRlc3VsdFNldHVwKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdubyByZWFzb24nKQorICAgICAgICAgICAgZGVmIHRlc3RGb28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydE9sZFJlc3VsdFdhcm5pbmcoVGVzdCgndGVzdEZvbycpLCAwKQorCisgICAgZGVmIHRlc3RPbGRUZXN0UmVzdWx0Q2xhc3Moc2VsZik6CisgICAgICAgIEB1bml0dGVzdC5za2lwKCdubyByZWFzb24nKQorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0Rm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRPbGRSZXN1bHRXYXJuaW5nKFRlc3QoJ3Rlc3RGb28nKSwgMCkKKworICAgIGRlZiB0ZXN0T2xkUmVzdWx0V2l0aFJ1bm5lcihzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdEZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHJlc3VsdGNsYXNzPU9sZFJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbT1TdHJpbmdJTygpKQorICAgICAgICAjIFRoaXMgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gaWYgVGV4dFRlc3RSdW5uZXIgY2FuJ3QgaGFuZGxlIG9sZAorICAgICAgICAjIHRlc3QgcmVzdWx0IG9iamVjdHMKKyAgICAgICAgcnVubmVyLnJ1bihUZXN0KCd0ZXN0Rm9vJykpCisKKworY2xhc3MgTW9ja1RyYWNlYmFjayhvYmplY3QpOgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZm9ybWF0X2V4Y2VwdGlvbigqXyk6CisgICAgICAgIHJldHVybiBbJ0EgdHJhY2ViYWNrJ10KKworZGVmIHJlc3RvcmVfdHJhY2ViYWNrKCk6CisgICAgdW5pdHRlc3QucmVzdWx0LnRyYWNlYmFjayA9IHRyYWNlYmFjaworCisKK2NsYXNzIFRlc3RPdXRwdXRCdWZmZXJpbmcodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl9yZWFsX291dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5fcmVhbF9lcnIgPSBzeXMuc3RkZXJyCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9yZWFsX291dAorICAgICAgICBzeXMuc3RkZXJyID0gc2VsZi5fcmVhbF9lcnIKKworICAgIGRlZiB0ZXN0QnVmZmVyT3V0cHV0T2ZmKHNlbGYpOgorICAgICAgICByZWFsX291dCA9IHNlbGYuX3JlYWxfb3V0CisgICAgICAgIHJlYWxfZXJyID0gc2VsZi5fcmVhbF9lcnIKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuYnVmZmVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVhbF9vdXQsIHN5cy5zdGRvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVhbF9lcnIsIHN5cy5zdGRlcnIpCisKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdChzZWxmKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVhbF9vdXQsIHN5cy5zdGRvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVhbF9lcnIsIHN5cy5zdGRlcnIpCisKKyAgICBkZWYgdGVzdEJ1ZmZlck91dHB1dFN0YXJ0VGVzdEFkZFN1Y2Nlc3Moc2VsZik6CisgICAgICAgIHJlYWxfb3V0ID0gc2VsZi5fcmVhbF9vdXQKKyAgICAgICAgcmVhbF9lcnIgPSBzZWxmLl9yZWFsX2VycgorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC5idWZmZXIpCisKKyAgICAgICAgcmVzdWx0LmJ1ZmZlciA9IFRydWUKKworICAgICAgICBzZWxmLmFzc2VydElzKHJlYWxfb3V0LCBzeXMuc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydElzKHJlYWxfZXJyLCBzeXMuc3RkZXJyKQorCisgICAgICAgIHJlc3VsdC5zdGFydFRlc3Qoc2VsZikKKworICAgICAgICBzZWxmLmFzc2VydElzTm90KHJlYWxfb3V0LCBzeXMuc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHJlYWxfZXJyLCBzeXMuc3RkZXJyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLnN0ZG91dCwgU3RyaW5nSU8pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuc3RkZXJyLCBTdHJpbmdJTykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKQorCisgICAgICAgIG91dF9zdHJlYW0gPSBzeXMuc3Rkb3V0CisgICAgICAgIGVycl9zdHJlYW0gPSBzeXMuc3RkZXJyCisKKyAgICAgICAgcmVzdWx0Ll9vcmlnaW5hbF9zdGRvdXQgPSBTdHJpbmdJTygpCisgICAgICAgIHJlc3VsdC5fb3JpZ2luYWxfc3RkZXJyID0gU3RyaW5nSU8oKQorCisgICAgICAgIHByaW50ICdmb28nCisgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICdiYXInCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRfc3RyZWFtLmdldHZhbHVlKCksICdmb29cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyX3N0cmVhbS5nZXR2YWx1ZSgpLCAnYmFyXG4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Ll9vcmlnaW5hbF9zdGRvdXQuZ2V0dmFsdWUoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Ll9vcmlnaW5hbF9zdGRlcnIuZ2V0dmFsdWUoKSwgJycpCisKKyAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKKyAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHNlbGYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuc3Rkb3V0LCByZXN1bHQuX29yaWdpbmFsX3N0ZG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuc3RkZXJyLCByZXN1bHQuX29yaWdpbmFsX3N0ZGVycikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5fb3JpZ2luYWxfc3Rkb3V0LmdldHZhbHVlKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5fb3JpZ2luYWxfc3RkZXJyLmdldHZhbHVlKCksICcnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0X3N0cmVhbS5nZXR2YWx1ZSgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJfc3RyZWFtLmdldHZhbHVlKCksICcnKQorCisKKyAgICBkZWYgZ2V0U3RhcnRlZFJlc3VsdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJlc3VsdC5idWZmZXIgPSBUcnVlCisgICAgICAgIHJlc3VsdC5zdGFydFRlc3Qoc2VsZikKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHRlc3RCdWZmZXJPdXRwdXRBZGRFcnJvck9yRmFpbHVyZShzZWxmKToKKyAgICAgICAgdW5pdHRlc3QucmVzdWx0LnRyYWNlYmFjayA9IE1vY2tUcmFjZWJhY2sKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfdHJhY2ViYWNrKQorCisgICAgICAgIGZvciBtZXNzYWdlX2F0dHIsIGFkZF9hdHRyLCBpbmNsdWRlX2Vycm9yIGluIFsKKyAgICAgICAgICAgICgnZXJyb3JzJywgJ2FkZEVycm9yJywgVHJ1ZSksCisgICAgICAgICAgICAoJ2ZhaWx1cmVzJywgJ2FkZEZhaWx1cmUnLCBGYWxzZSksCisgICAgICAgICAgICAoJ2Vycm9ycycsICdhZGRFcnJvcicsIFRydWUpLAorICAgICAgICAgICAgKCdmYWlsdXJlcycsICdhZGRGYWlsdXJlJywgRmFsc2UpCisgICAgICAgIF06CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmdldFN0YXJ0ZWRSZXN1bHQoKQorICAgICAgICAgICAgYnVmZmVyZWRfb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICAgICAgYnVmZmVyZWRfZXJyID0gc3lzLnN0ZGVycgorICAgICAgICAgICAgcmVzdWx0Ll9vcmlnaW5hbF9zdGRvdXQgPSBTdHJpbmdJTygpCisgICAgICAgICAgICByZXN1bHQuX29yaWdpbmFsX3N0ZGVyciA9IFN0cmluZ0lPKCkKKworICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZG91dCwgJ2ZvbycKKyAgICAgICAgICAgIGlmIGluY2x1ZGVfZXJyb3I6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgJ2JhcicKKworCisgICAgICAgICAgICBhZGRGdW5jdGlvbiA9IGdldGF0dHIocmVzdWx0LCBhZGRfYXR0cikKKyAgICAgICAgICAgIGFkZEZ1bmN0aW9uKHNlbGYsIChOb25lLCBOb25lLCBOb25lKSkKKyAgICAgICAgICAgIHJlc3VsdC5zdG9wVGVzdChzZWxmKQorCisgICAgICAgICAgICByZXN1bHRfbGlzdCA9IGdldGF0dHIocmVzdWx0LCBtZXNzYWdlX2F0dHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHRfbGlzdCksIDEpCisKKyAgICAgICAgICAgIHRlc3QsIG1lc3NhZ2UgPSByZXN1bHRfbGlzdFswXQorICAgICAgICAgICAgZXhwZWN0ZWRPdXRNZXNzYWdlID0gdGV4dHdyYXAuZGVkZW50KCIiIgorICAgICAgICAgICAgICAgIFN0ZG91dDoKKyAgICAgICAgICAgICAgICBmb28KKyAgICAgICAgICAgICIiIikKKyAgICAgICAgICAgIGV4cGVjdGVkRXJyTWVzc2FnZSA9ICcnCisgICAgICAgICAgICBpZiBpbmNsdWRlX2Vycm9yOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkRXJyTWVzc2FnZSA9IHRleHR3cmFwLmRlZGVudCgiIiIKKyAgICAgICAgICAgICAgICBTdGRlcnI6CisgICAgICAgICAgICAgICAgYmFyCisgICAgICAgICAgICAiIiIpCisgICAgICAgICAgICBleHBlY3RlZEZ1bGxNZXNzYWdlID0gJ0EgdHJhY2ViYWNrJXMlcycgJSAoZXhwZWN0ZWRPdXRNZXNzYWdlLCBleHBlY3RlZEVyck1lc3NhZ2UpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModGVzdCwgc2VsZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Ll9vcmlnaW5hbF9zdGRvdXQuZ2V0dmFsdWUoKSwgZXhwZWN0ZWRPdXRNZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuX29yaWdpbmFsX3N0ZGVyci5nZXR2YWx1ZSgpLCBleHBlY3RlZEVyck1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFsKG1lc3NhZ2UsIGV4cGVjdGVkRnVsbE1lc3NhZ2UpCisKKyAgICBkZWYgdGVzdEJ1ZmZlclNldHVwQ2xhc3Moc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuYnVmZmVyID0gVHJ1ZQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgMS8vMAorICAgICAgICAgICAgZGVmIHRlc3RfZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdF9mb28nKV0pCisgICAgICAgIHN1aXRlKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisKKyAgICBkZWYgdGVzdEJ1ZmZlclRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuYnVmZmVyID0gVHJ1ZQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgMS8vMAorICAgICAgICAgICAgZGVmIHRlc3RfZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdF9mb28nKV0pCisgICAgICAgIHN1aXRlKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisKKyAgICBkZWYgdGVzdEJ1ZmZlclNldFVwTW9kdWxlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgcmVzdWx0LmJ1ZmZlciA9IFRydWUKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgICAgICAgICAxLy8wCisKKyAgICAgICAgRm9vLl9fbW9kdWxlX18gPSAnTW9kdWxlJworICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN5cy5tb2R1bGVzLnBvcCwgJ01vZHVsZScpCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3RfZm9vJyldKQorICAgICAgICBzdWl0ZShyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAxKQorCisgICAgZGVmIHRlc3RCdWZmZXJUZWFyRG93bk1vZHVsZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJlc3VsdC5idWZmZXIgPSBUcnVlCisKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X2ZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgMS8vMAorCisgICAgICAgIEZvby5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgc3lzLm1vZHVsZXNbJ01vZHVsZSddID0gTW9kdWxlCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzeXMubW9kdWxlcy5wb3AsICdNb2R1bGUnKQorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0X2ZvbycpXSkKKyAgICAgICAgc3VpdGUocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5IGIvbGliL3B5dGhvbjIuNy91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxY2VmYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3VuaXR0ZXN0L3Rlc3QvdGVzdF9ydW5uZXIucHkKQEAgLTAsMCArMSwyNjYgQEAKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGNTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2ltcG9ydCBwaWNrbGUKKworZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdCwgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4KKworCitjbGFzcyBUZXN0Q2xlYW5VcCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdENsZWFuVXAoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3RhYmxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdE5vdGhpbmcoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRlc3QgPSBUZXN0YWJsZVRlc3QoJ3Rlc3ROb3RoaW5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0Ll9jbGVhbnVwcywgW10pCisKKyAgICAgICAgY2xlYW51cHMgPSBbXQorCisgICAgICAgIGRlZiBjbGVhbnVwMSgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgY2xlYW51cHMuYXBwZW5kKCgxLCBhcmdzLCBrd2FyZ3MpKQorCisgICAgICAgIGRlZiBjbGVhbnVwMigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgY2xlYW51cHMuYXBwZW5kKCgyLCBhcmdzLCBrd2FyZ3MpKQorCisgICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMSwgMSwgMiwgMywgZm91cj0naGVsbG8nLCBmaXZlPSdnb29kYnllJykKKyAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5fY2xlYW51cHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyhjbGVhbnVwMSwgKDEsIDIsIDMpLCBkaWN0KGZvdXI9J2hlbGxvJywgZml2ZT0nZ29vZGJ5ZScpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFudXAyLCAoKSwge30pXSkKKworICAgICAgICByZXN1bHQgPSB0ZXN0LmRvQ2xlYW51cHMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xlYW51cHMsIFsoMiwgKCksIHt9KSwgKDEsICgxLCAyLCAzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QoZm91cj0naGVsbG8nLCBmaXZlPSdnb29kYnllJykpXSkKKworICAgIGRlZiB0ZXN0Q2xlYW5VcFdpdGhFcnJvcnMoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3RhYmxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdE5vdGhpbmcoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIE1vY2tSZXN1bHQob2JqZWN0KToKKyAgICAgICAgICAgIGVycm9ycyA9IFtdCisgICAgICAgICAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgdGVzdCwgZXhjX2luZm8pOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZCgodGVzdCwgZXhjX2luZm8pKQorCisgICAgICAgIHJlc3VsdCA9IE1vY2tSZXN1bHQoKQorICAgICAgICB0ZXN0ID0gVGVzdGFibGVUZXN0KCd0ZXN0Tm90aGluZycpCisgICAgICAgIHRlc3QuX3Jlc3VsdEZvckRvQ2xlYW51cHMgPSByZXN1bHQKKworICAgICAgICBleGMxID0gRXhjZXB0aW9uKCdmb28nKQorICAgICAgICBleGMyID0gRXhjZXB0aW9uKCdiYXInKQorICAgICAgICBkZWYgY2xlYW51cDEoKToKKyAgICAgICAgICAgIHJhaXNlIGV4YzEKKworICAgICAgICBkZWYgY2xlYW51cDIoKToKKyAgICAgICAgICAgIHJhaXNlIGV4YzIKKworICAgICAgICB0ZXN0LmFkZENsZWFudXAoY2xlYW51cDEpCisgICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMikKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRlc3QuZG9DbGVhbnVwcygpKQorCisgICAgICAgICh0ZXN0MSwgKFR5cGUxLCBpbnN0YW5jZTEsIF8pKSwgKHRlc3QyLCAoVHlwZTIsIGluc3RhbmNlMiwgXykpID0gcmV2ZXJzZWQoTW9ja1Jlc3VsdC5lcnJvcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHRlc3QxLCBUeXBlMSwgaW5zdGFuY2UxKSwgKHRlc3QsIEV4Y2VwdGlvbiwgZXhjMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHRlc3QyLCBUeXBlMiwgaW5zdGFuY2UyKSwgKHRlc3QsIEV4Y2VwdGlvbiwgZXhjMikpCisKKyAgICBkZWYgdGVzdENsZWFudXBJblJ1bihzZWxmKToKKyAgICAgICAgYmxvd1VwID0gRmFsc2UKKyAgICAgICAgb3JkZXJpbmcgPSBbXQorCisgICAgICAgIGNsYXNzIFRlc3RhYmxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdzZXRVcCcpCisgICAgICAgICAgICAgICAgaWYgYmxvd1VwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ2ZvbycpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0Tm90aGluZyhzZWxmKToKKyAgICAgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3Rlc3QnKQorCisgICAgICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCd0ZWFyRG93bicpCisKKyAgICAgICAgdGVzdCA9IFRlc3RhYmxlVGVzdCgndGVzdE5vdGhpbmcnKQorCisgICAgICAgIGRlZiBjbGVhbnVwMSgpOgorICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdjbGVhbnVwMScpCisgICAgICAgIGRlZiBjbGVhbnVwMigpOgorICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdjbGVhbnVwMicpCisgICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMSkKKyAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAyKQorCisgICAgICAgIGRlZiBzdWNjZXNzKHNvbWVfdGVzdCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvbWVfdGVzdCwgdGVzdCkKKyAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgnc3VjY2VzcycpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzID0gc3VjY2VzcworCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmRlcmluZywgWydzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbGVhbnVwMicsICdjbGVhbnVwMScsICdzdWNjZXNzJ10pCisKKyAgICAgICAgYmxvd1VwID0gVHJ1ZQorICAgICAgICBvcmRlcmluZyA9IFtdCisgICAgICAgIHRlc3QgPSBUZXN0YWJsZVRlc3QoJ3Rlc3ROb3RoaW5nJykKKyAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAxKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkZXJpbmcsIFsnc2V0VXAnLCAnY2xlYW51cDEnXSkKKworICAgIGRlZiB0ZXN0VGVzdENhc2VEZWJ1Z0V4ZWN1dGVzQ2xlYW51cHMoc2VsZik6CisgICAgICAgIG9yZGVyaW5nID0gW10KKworICAgICAgICBjbGFzcyBUZXN0YWJsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgnc2V0VXAnKQorICAgICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwMSkKKworICAgICAgICAgICAgZGVmIHRlc3ROb3RoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgndGVzdCcpCisKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3RlYXJEb3duJykKKworICAgICAgICB0ZXN0ID0gVGVzdGFibGVUZXN0KCd0ZXN0Tm90aGluZycpCisKKyAgICAgICAgZGVmIGNsZWFudXAxKCk6CisgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ2NsZWFudXAxJykKKyAgICAgICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMikKKyAgICAgICAgZGVmIGNsZWFudXAyKCk6CisgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ2NsZWFudXAyJykKKworICAgICAgICB0ZXN0LmRlYnVnKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmRlcmluZywgWydzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywgJ2NsZWFudXAxJywgJ2NsZWFudXAyJ10pCisKKworY2xhc3MgVGVzdF9UZXh0VGVzdFJ1bm5lcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgZm9yIFRleHRUZXN0UnVubmVyLiIiIgorCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJ1bm5lci5mYWlsZmFzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShydW5uZXIuYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bm5lci52ZXJib3NpdHksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXIuZGVzY3JpcHRpb25zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bm5lci5yZXN1bHRjbGFzcywgdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQpCisKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2luaGVyaXRhbmNlKHNlbGYpOgorICAgICAgICBjbGFzcyBBUmVzdWx0KHVuaXR0ZXN0LlRlc3RSZXN1bHQpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwgZGVzY3JpcHRpb25zLCB2ZXJib3NpdHkpOgorICAgICAgICAgICAgICAgIHN1cGVyKEFSZXN1bHQsIHNlbGYpLl9faW5pdF9fKHN0cmVhbSwgZGVzY3JpcHRpb25zLCB2ZXJib3NpdHkpCisKKyAgICAgICAgY2xhc3MgQVRleHRSZXN1bHQodW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQsIEFSZXN1bHQpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgVGhpcyB1c2VkIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiBkdWUgdG8gVGV4dFRlc3RSZXN1bHQgbm90IHBhc3NpbmcKKyAgICAgICAgIyBvbiBhcmd1bWVudHMgaW4gaXRzIF9faW5pdF9fIHN1cGVyIGNhbGwKKyAgICAgICAgQVRleHRSZXN1bHQoTm9uZSwgTm9uZSwgTm9uZSkKKworCisgICAgZGVmIHRlc3RCdWZmZXJBbmRGYWlsZmFzdChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdEZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09U3RyaW5nSU8oKSwgZmFpbGZhc3Q9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXI9VHJ1ZSkKKyAgICAgICAgIyBVc2Ugb3VyIHJlc3VsdCBvYmplY3QKKyAgICAgICAgcnVubmVyLl9tYWtlUmVzdWx0ID0gbGFtYmRhOiByZXN1bHQKKyAgICAgICAgcnVubmVyLnJ1bihUZXN0KCd0ZXN0Rm9vJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5mYWlsZmFzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5idWZmZXIpCisKKyAgICBkZWYgdGVzdFJ1bm5lclJlZ2lzdGVyc1Jlc3VsdChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdEZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG9yaWdpbmFsUmVnaXN0ZXJSZXN1bHQgPSB1bml0dGVzdC5ydW5uZXIucmVnaXN0ZXJSZXN1bHQKKyAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgIHVuaXR0ZXN0LnJ1bm5lci5yZWdpc3RlclJlc3VsdCA9IG9yaWdpbmFsUmVnaXN0ZXJSZXN1bHQKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHN0cmVhbT1TdHJpbmdJTygpKQorICAgICAgICAjIFVzZSBvdXIgcmVzdWx0IG9iamVjdAorICAgICAgICBydW5uZXIuX21ha2VSZXN1bHQgPSBsYW1iZGE6IHJlc3VsdAorCisgICAgICAgIHNlbGYud2FzUmVnaXN0ZXJlZCA9IDAKKyAgICAgICAgZGVmIGZha2VSZWdpc3RlclJlc3VsdCh0aGlzUmVzdWx0KToKKyAgICAgICAgICAgIHNlbGYud2FzUmVnaXN0ZXJlZCArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoaXNSZXN1bHQsIHJlc3VsdCkKKyAgICAgICAgdW5pdHRlc3QucnVubmVyLnJlZ2lzdGVyUmVzdWx0ID0gZmFrZVJlZ2lzdGVyUmVzdWx0CisKKyAgICAgICAgcnVubmVyLnJ1bih1bml0dGVzdC5UZXN0U3VpdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndhc1JlZ2lzdGVyZWQsIDEpCisKKyAgICBkZWYgdGVzdF93b3Jrc193aXRoX3Jlc3VsdF93aXRob3V0X3N0YXJ0VGVzdFJ1bl9zdG9wVGVzdFJ1bihzZWxmKToKKyAgICAgICAgY2xhc3MgT2xkVGV4dFJlc3VsdChSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bik6CisgICAgICAgICAgICBzZXBhcmF0b3IyID0gJycKKyAgICAgICAgICAgIGRlZiBwcmludEVycm9ycyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgUnVubmVyKHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihSdW5uZXIsIHNlbGYpLl9faW5pdF9fKFN0cmluZ0lPKCkpCisKKyAgICAgICAgICAgIGRlZiBfbWFrZVJlc3VsdChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gT2xkVGV4dFJlc3VsdCgpCisKKyAgICAgICAgcnVubmVyID0gUnVubmVyKCkKKyAgICAgICAgcnVubmVyLnJ1bih1bml0dGVzdC5UZXN0U3VpdGUoKSkKKworICAgIGRlZiB0ZXN0X3N0YXJ0VGVzdFJ1bl9zdG9wVGVzdFJ1bl9jYWxsZWQoc2VsZik6CisgICAgICAgIGNsYXNzIExvZ2dpbmdUZXh0UmVzdWx0KExvZ2dpbmdSZXN1bHQpOgorICAgICAgICAgICAgc2VwYXJhdG9yMiA9ICcnCisgICAgICAgICAgICBkZWYgcHJpbnRFcnJvcnMoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIExvZ2dpbmdSdW5uZXIodW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50cyk6CisgICAgICAgICAgICAgICAgc3VwZXIoTG9nZ2luZ1J1bm5lciwgc2VsZikuX19pbml0X18oU3RyaW5nSU8oKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9ldmVudHMgPSBldmVudHMKKworICAgICAgICAgICAgZGVmIF9tYWtlUmVzdWx0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBMb2dnaW5nVGV4dFJlc3VsdChzZWxmLl9ldmVudHMpCisKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcnVubmVyID0gTG9nZ2luZ1J1bm5lcihldmVudHMpCisgICAgICAgIHJ1bm5lci5ydW4odW5pdHRlc3QuVGVzdFN1aXRlKCkpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3RSdW4nLCAnc3RvcFRlc3RSdW4nXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9waWNrbGVfdW5waWNrbGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzcxOTc6IGEgVGV4dFRlc3RSdW5uZXIgc2hvdWxkIGJlICh1bilwaWNrbGVhYmxlLiBUaGlzIGlzCisgICAgICAgICMgcmVxdWlyZWQgYnkgdGVzdF9tdWx0aXByb2Nlc3NpbmcgdW5kZXIgV2luZG93cyAoaW4gdmVyYm9zZSBtb2RlKS4KKyAgICAgICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8gYXMgUGlja2xlYWJsZUlPCisgICAgICAgICMgY1N0cmluZ0lPIG9iamVjdHMgYXJlIG5vdCBwaWNrbGVhYmxlLCBidXQgU3RyaW5nSU8gb2JqZWN0cyBhcmUuCisgICAgICAgIHN0cmVhbSA9IFBpY2tsZWFibGVJTygiZm9vIikKKyAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoc3RyZWFtKQorICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHMgPSBwaWNrbGUuZHVtcHMocnVubmVyLCBwcm90b2NvbD1wcm90b2NvbCkKKyAgICAgICAgICAgIG9iaiA9IHBpY2tsZS5sb2FkcyhzKQorICAgICAgICAgICAgIyBTdHJpbmdJTyBvYmplY3RzIG5ldmVyIGNvbXBhcmUgZXF1YWwsIGEgY2hlYXAgdGVzdCBpbnN0ZWFkLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc3RyZWFtLmdldHZhbHVlKCksIHN0cmVhbS5nZXR2YWx1ZSgpKQorCisgICAgZGVmIHRlc3RfcmVzdWx0Y2xhc3Moc2VsZik6CisgICAgICAgIGRlZiBNb2NrUmVzdWx0Q2xhc3MoKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKyAgICAgICAgU1RSRUFNID0gb2JqZWN0KCkKKyAgICAgICAgREVTQ1JJUFRJT05TID0gb2JqZWN0KCkKKyAgICAgICAgVkVSQk9TSVRZID0gb2JqZWN0KCkKKyAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoU1RSRUFNLCBERVNDUklQVElPTlMsIFZFUkJPU0lUWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Y2xhc3M9TW9ja1Jlc3VsdENsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bm5lci5yZXN1bHRjbGFzcywgTW9ja1Jlc3VsdENsYXNzKQorCisgICAgICAgIGV4cGVjdGVkcmVzdWx0ID0gKHJ1bm5lci5zdHJlYW0sIERFU0NSSVBUSU9OUywgVkVSQk9TSVRZKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bm5lci5fbWFrZVJlc3VsdCgpLCBleHBlY3RlZHJlc3VsdCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5IGIvbGliL3B5dGhvbjIuNy91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NTY4MTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcHl0aG9uMi43L3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkKQEAgLTAsMCArMSw1MDggQEAKK2ltcG9ydCBzeXMKKworZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCisKK2ltcG9ydCB1bml0dGVzdAorCisKK2RlZiByZXN1bHRGYWN0b3J5KCpfKToKKyAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKworY2xhc3MgVGVzdFNldHVwcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0UnVubmVyKHNlbGYpOgorICAgICAgICByZXR1cm4gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIocmVzdWx0Y2xhc3M9cmVzdWx0RmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbT1TdHJpbmdJTygpKQorICAgIGRlZiBydW5UZXN0cyhzZWxmLCAqY2FzZXMpOgorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIGZvciBjYXNlIGluIGNhc2VzOgorICAgICAgICAgICAgdGVzdHMgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoY2FzZSkKKyAgICAgICAgICAgIHN1aXRlLmFkZFRlc3RzKHRlc3RzKQorCisgICAgICAgIHJ1bm5lciA9IHNlbGYuZ2V0UnVubmVyKCkKKworICAgICAgICAjIGNyZWF0aW5nIGEgbmVzdGVkIHN1aXRlIGV4cG9zZXMgc29tZSBwb3RlbnRpYWwgYnVncworICAgICAgICByZWFsU3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICByZWFsU3VpdGUuYWRkVGVzdChzdWl0ZSkKKyAgICAgICAgIyBhZGRpbmcgZW1wdHkgc3VpdGVzIHRvIHRoZSBlbmQgZXhwb3NlcyBwb3RlbnRpYWwgYnVncworICAgICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0LlRlc3RTdWl0ZSgpKQorICAgICAgICByZWFsU3VpdGUuYWRkVGVzdCh1bml0dGVzdC5UZXN0U3VpdGUoKSkKKyAgICAgICAgcmV0dXJuIHJ1bm5lci5ydW4ocmVhbFN1aXRlKQorCisgICAgZGVmIHRlc3Rfc2V0dXBfY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgc2V0VXBDYWxsZWQgPSAwCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC5zZXRVcENhbGxlZCArPSAxCisgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2Uuc2V0VXBDbGFzcygpCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0LnNldFVwQ2FsbGVkLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCisKKyAgICBkZWYgdGVzdF90ZWFyZG93bl9jbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICB0ZWFyRG93bkNhbGxlZCA9IDAKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0LnRlYXJEb3duQ2FsbGVkICs9IDEKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS50ZWFyRG93bkNsYXNzKCkKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoVGVzdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3QudGVhckRvd25DYWxsZWQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKworICAgIGRlZiB0ZXN0X3RlYXJkb3duX2NsYXNzX3R3b19jbGFzc2VzKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRlYXJEb3duQ2FsbGVkID0gMAorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3QudGVhckRvd25DYWxsZWQgKz0gMQorICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLnRlYXJEb3duQ2xhc3MoKQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgVGVzdDIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgdGVhckRvd25DYWxsZWQgPSAwCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdDIudGVhckRvd25DYWxsZWQgKz0gMQorICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLnRlYXJEb3duQ2xhc3MoKQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5UZXN0cyhUZXN0LCBUZXN0MikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3QudGVhckRvd25DYWxsZWQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdDIudGVhckRvd25DYWxsZWQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKworICAgIGRlZiB0ZXN0X2Vycm9yX2luX3NldHVwY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEJyb2tlblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZm9vJykKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoQnJva2VuVGVzdCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisgICAgICAgIGVycm9yLCBfID0gcmVzdWx0LmVycm9yc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnJvciksCisgICAgICAgICAgICAgICAgICAgICdzZXRVcENsYXNzICglcy5Ccm9rZW5UZXN0KScgJSBfX25hbWVfXykKKworICAgIGRlZiB0ZXN0X2Vycm9yX2luX3RlYXJkb3duX2NsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRvcm5Eb3duID0gMAorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3QudG9ybkRvd24gKz0gMQorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZm9vJykKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFRlc3QyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRvcm5Eb3duID0gMAorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3QyLnRvcm5Eb3duICs9IDEKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2ZvbycpCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QsIFRlc3QyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdC50b3JuRG93biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0Mi50b3JuRG93biwgMSkKKworICAgICAgICBlcnJvciwgXyA9IHJlc3VsdC5lcnJvcnNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAndGVhckRvd25DbGFzcyAoJXMuVGVzdCknICUgX19uYW1lX18pCisKKyAgICBkZWYgdGVzdF9jbGFzc19ub3RfdG9ybmRvd25fd2hlbl9zZXR1cF9mYWlscyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICB0b3JuRG93biA9IEZhbHNlCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC50b3JuRG93biA9IFRydWUKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2ZvbycpCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYucnVuVGVzdHMoVGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShUZXN0LnRvcm5Eb3duKQorCisgICAgZGVmIHRlc3RfY2xhc3Nfbm90X3NldHVwX29yX3Rvcm5kb3duX3doZW5fc2tpcHBlZChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBjbGFzc1NldFVwID0gRmFsc2UKKyAgICAgICAgICAgIHRvcm5Eb3duID0gRmFsc2UKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0LmNsYXNzU2V0VXAgPSBUcnVlCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC50b3JuRG93biA9IFRydWUKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgVGVzdCA9IHVuaXR0ZXN0LnNraXAoImhvcCIpKFRlc3QpCisgICAgICAgIHNlbGYucnVuVGVzdHMoVGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShUZXN0LmNsYXNzU2V0VXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVGVzdC50b3JuRG93bikKKworICAgIGRlZiB0ZXN0X3NldHVwX3RlYXJkb3duX29yZGVyX3dpdGhfcGF0aG9sb2dpY2FsX3N1aXRlKHNlbGYpOgorICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBjbGFzcyBNb2R1bGUxKG9iamVjdCk6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnTW9kdWxlMS5zZXRVcE1vZHVsZScpCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnTW9kdWxlMS50ZWFyRG93bk1vZHVsZScpCisKKyAgICAgICAgY2xhc3MgTW9kdWxlMihvYmplY3QpOgorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ01vZHVsZTIuc2V0VXBNb2R1bGUnKQorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ01vZHVsZTIudGVhckRvd25Nb2R1bGUnKQorCisgICAgICAgIGNsYXNzIFRlc3QxKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnc2V0dXAgMScpCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ3RlYXJkb3duIDEnKQorICAgICAgICAgICAgZGVmIHRlc3RPbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ1Rlc3QxLnRlc3RPbmUnKQorICAgICAgICAgICAgZGVmIHRlc3RUd28oc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ1Rlc3QxLnRlc3RUd28nKQorCisgICAgICAgIGNsYXNzIFRlc3QyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnc2V0dXAgMicpCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ3RlYXJkb3duIDInKQorICAgICAgICAgICAgZGVmIHRlc3RPbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ1Rlc3QyLnRlc3RPbmUnKQorICAgICAgICAgICAgZGVmIHRlc3RUd28oc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ1Rlc3QyLnRlc3RUd28nKQorCisgICAgICAgIGNsYXNzIFRlc3QzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnc2V0dXAgMycpCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ3RlYXJkb3duIDMnKQorICAgICAgICAgICAgZGVmIHRlc3RPbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ1Rlc3QzLnRlc3RPbmUnKQorICAgICAgICAgICAgZGVmIHRlc3RUd28oc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ1Rlc3QzLnRlc3RUd28nKQorCisgICAgICAgIFRlc3QxLl9fbW9kdWxlX18gPSBUZXN0Mi5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgVGVzdDMuX19tb2R1bGVfXyA9ICdNb2R1bGUyJworICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUxCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUyJ10gPSBNb2R1bGUyCisKKyAgICAgICAgZmlyc3QgPSB1bml0dGVzdC5UZXN0U3VpdGUoKFRlc3QxKCd0ZXN0T25lJyksKSkKKyAgICAgICAgc2Vjb25kID0gdW5pdHRlc3QuVGVzdFN1aXRlKChUZXN0MSgndGVzdFR3bycpLCkpCisgICAgICAgIHRoaXJkID0gdW5pdHRlc3QuVGVzdFN1aXRlKChUZXN0MigndGVzdE9uZScpLCkpCisgICAgICAgIGZvdXJ0aCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoVGVzdDIoJ3Rlc3RUd28nKSwpKQorICAgICAgICBmaWZ0aCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoVGVzdDMoJ3Rlc3RPbmUnKSwpKQorICAgICAgICBzaXh0aCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoVGVzdDMoJ3Rlc3RUd28nKSwpKQorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoZmlyc3QsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgZmlmdGgsIHNpeHRoKSkKKworICAgICAgICBydW5uZXIgPSBzZWxmLmdldFJ1bm5lcigpCisgICAgICAgIHJlc3VsdCA9IHJ1bm5lci5ydW4oc3VpdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydNb2R1bGUxLnNldFVwTW9kdWxlJywgJ3NldHVwIDEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnVGVzdDEudGVzdE9uZScsICdUZXN0MS50ZXN0VHdvJywgJ3RlYXJkb3duIDEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnc2V0dXAgMicsICdUZXN0Mi50ZXN0T25lJywgJ1Rlc3QyLnRlc3RUd28nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhcmRvd24gMicsICdNb2R1bGUxLnRlYXJEb3duTW9kdWxlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ01vZHVsZTIuc2V0VXBNb2R1bGUnLCAnc2V0dXAgMycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdUZXN0My50ZXN0T25lJywgJ1Rlc3QzLnRlc3RUd28nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhcmRvd24gMycsICdNb2R1bGUyLnRlYXJEb3duTW9kdWxlJ10pCisKKyAgICBkZWYgdGVzdF9zZXR1cF9tb2R1bGUoc2VsZik6CisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgbW9kdWxlU2V0dXAgPSAwCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgICAgICAgICBNb2R1bGUubW9kdWxlU2V0dXAgKz0gMQorCisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoVGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUubW9kdWxlU2V0dXAsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKworICAgIGRlZiB0ZXN0X2Vycm9yX2luX3NldHVwX21vZHVsZShzZWxmKToKKyAgICAgICAgY2xhc3MgTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICBtb2R1bGVTZXR1cCA9IDAKKyAgICAgICAgICAgIG1vZHVsZVRvcm5Eb3duID0gMAorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgTW9kdWxlLm1vZHVsZVNldHVwICs9IDEKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2ZvbycpCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgICAgICAgICBNb2R1bGUubW9kdWxlVG9ybkRvd24gKz0gMQorCisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgY2xhc3NTZXRVcCA9IEZhbHNlCisgICAgICAgICAgICBjbGFzc1Rvcm5Eb3duID0gRmFsc2UKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0LmNsYXNzU2V0VXAgPSBUcnVlCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC5jbGFzc1Rvcm5Eb3duID0gVHJ1ZQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgVGVzdDIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIFRlc3QyLl9fbW9kdWxlX18gPSAnTW9kdWxlJworICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QsIFRlc3QyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vZHVsZS5tb2R1bGVTZXR1cCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUubW9kdWxlVG9ybkRvd24sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFRlc3QuY2xhc3NTZXRVcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShUZXN0LmNsYXNzVG9ybkRvd24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAxKQorICAgICAgICBlcnJvciwgXyA9IHJlc3VsdC5lcnJvcnNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyb3IpLCAnc2V0VXBNb2R1bGUgKE1vZHVsZSknKQorCisgICAgZGVmIHRlc3RfdGVzdGNhc2Vfd2l0aF9taXNzaW5nX21vZHVsZShzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgVGVzdC5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgc3lzLm1vZHVsZXMucG9wKCdNb2R1bGUnLCBOb25lKQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoVGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDIpCisKKyAgICBkZWYgdGVzdF90ZWFyZG93bl9tb2R1bGUoc2VsZik6CisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgbW9kdWxlVG9ybkRvd24gPSAwCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgICAgICAgICBNb2R1bGUubW9kdWxlVG9ybkRvd24gKz0gMQorCisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoVGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUubW9kdWxlVG9ybkRvd24sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKworICAgIGRlZiB0ZXN0X2Vycm9yX2luX3RlYXJkb3duX21vZHVsZShzZWxmKToKKyAgICAgICAgY2xhc3MgTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICBtb2R1bGVUb3JuRG93biA9IDAKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgICAgICAgICAgICAgIE1vZHVsZS5tb2R1bGVUb3JuRG93biArPSAxCisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdmb28nKQorCisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgY2xhc3NTZXRVcCA9IEZhbHNlCisgICAgICAgICAgICBjbGFzc1Rvcm5Eb3duID0gRmFsc2UKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0LmNsYXNzU2V0VXAgPSBUcnVlCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC5jbGFzc1Rvcm5Eb3duID0gVHJ1ZQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgVGVzdDIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIFRlc3QyLl9fbW9kdWxlX18gPSAnTW9kdWxlJworICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QsIFRlc3QyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vZHVsZS5tb2R1bGVUb3JuRG93biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShUZXN0LmNsYXNzU2V0VXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShUZXN0LmNsYXNzVG9ybkRvd24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAxKQorICAgICAgICBlcnJvciwgXyA9IHJlc3VsdC5lcnJvcnNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyb3IpLCAndGVhckRvd25Nb2R1bGUgKE1vZHVsZSknKQorCisgICAgZGVmIHRlc3Rfc2tpcHRlc3RfaW5fc2V0dXBjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ2ZvbycpCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LnNraXBwZWQpLCAxKQorICAgICAgICBza2lwcGVkID0gcmVzdWx0LnNraXBwZWRbMF1bMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2tpcHBlZCksICdzZXRVcENsYXNzICglcy5UZXN0KScgJSBfX25hbWVfXykKKworICAgIGRlZiB0ZXN0X3NraXB0ZXN0X2luX3NldHVwbW9kdWxlKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ2ZvbycpCisKKyAgICAgICAgVGVzdC5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgc3lzLm1vZHVsZXNbJ01vZHVsZSddID0gTW9kdWxlCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5UZXN0cyhUZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5za2lwcGVkKSwgMSkKKyAgICAgICAgc2tpcHBlZCA9IHJlc3VsdC5za2lwcGVkWzBdWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNraXBwZWQpLCAnc2V0VXBNb2R1bGUgKE1vZHVsZSknKQorCisgICAgZGVmIHRlc3Rfc3VpdGVfZGVidWdfZXhlY3V0ZXNfc2V0dXBzX2FuZF90ZWFyZG93bnMoc2VsZik6CisgICAgICAgIG9yZGVyaW5nID0gW10KKworICAgICAgICBjbGFzcyBNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcE1vZHVsZSgpOgorICAgICAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgnc2V0VXBNb2R1bGUnKQorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCd0ZWFyRG93bk1vZHVsZScpCisKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdzZXRVcENsYXNzJykKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3RlYXJEb3duQ2xhc3MnKQorICAgICAgICAgICAgZGVmIHRlc3Rfc29tZXRoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgndGVzdF9zb21ldGhpbmcnKQorCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQorCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3QpCisgICAgICAgIHN1aXRlLmRlYnVnKCkKKyAgICAgICAgZXhwZWN0ZWRPcmRlciA9IFsnc2V0VXBNb2R1bGUnLCAnc2V0VXBDbGFzcycsICd0ZXN0X3NvbWV0aGluZycsICd0ZWFyRG93bkNsYXNzJywgJ3RlYXJEb3duTW9kdWxlJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmRlcmluZywgZXhwZWN0ZWRPcmRlcikKKworICAgIGRlZiB0ZXN0X3N1aXRlX2RlYnVnX3Byb3BhZ2F0ZXNfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgY2xhc3MgTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgICAgICAgICBpZiBwaGFzZSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3NldFVwTW9kdWxlJykKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgICAgICAgICAgICAgIGlmIHBoYXNlID09IDE6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigndGVhckRvd25Nb2R1bGUnKQorCisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIGlmIHBoYXNlID09IDI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignc2V0VXBDbGFzcycpCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgaWYgcGhhc2UgPT0gMzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCd0ZWFyRG93bkNsYXNzJykKKyAgICAgICAgICAgIGRlZiB0ZXN0X3NvbWV0aGluZyhzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBwaGFzZSA9PSA0OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3Rlc3Rfc29tZXRoaW5nJykKKworICAgICAgICBUZXN0Ll9fbW9kdWxlX18gPSAnTW9kdWxlJworICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUKKworICAgICAgICBfc3VpdGUgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdCkKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KF9zdWl0ZSkKKworICAgICAgICBtZXNzYWdlcyA9ICgnc2V0VXBNb2R1bGUnLCAndGVhckRvd25Nb2R1bGUnLCAnc2V0VXBDbGFzcycsICd0ZWFyRG93bkNsYXNzJywgJ3Rlc3Rfc29tZXRoaW5nJykKKyAgICAgICAgZm9yIHBoYXNlLCBtc2cgaW4gZW51bWVyYXRlKG1lc3NhZ2VzKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoRXhjZXB0aW9uLCBtc2cpOgorICAgICAgICAgICAgICAgIHN1aXRlLmRlYnVnKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL2xpYi9weXRob24yLjcvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5IGIvbGliL3B5dGhvbjIuNy91bml0dGVzdC90ZXN0L3Rlc3Rfc2tpcHBpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY2MzlkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9weXRob24yLjcvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5CkBAIC0wLDAgKzEsMTY4IEBACitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdAorCisKK2NsYXNzIFRlc3RfVGVzdFNraXBwaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3NraXBwaW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfc2tpcF9tZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJza2lwIikKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3Rfc2tpcF9tZSIpCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIFsnc3RhcnRUZXN0JywgJ2FkZFNraXAnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0LCAic2tpcCIpXSkKKworICAgICAgICAjIFRyeSBsZXR0aW5nIHNldFVwIHNraXAgdGhlIHRlc3Qgbm93LgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInRlc3RpbmciKQorICAgICAgICAgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKTogcGFzcworICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF9ub3RoaW5nIikKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgWydzdGFydFRlc3QnLCAnYWRkU2tpcCcsICdzdG9wVGVzdCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKworICAgIGRlZiB0ZXN0X3NraXBwaW5nX2RlY29yYXRvcnMoc2VsZik6CisgICAgICAgIG9wX3RhYmxlID0gKCh1bml0dGVzdC5za2lwVW5sZXNzLCBGYWxzZSwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICh1bml0dGVzdC5za2lwSWYsIFRydWUsIEZhbHNlKSkKKyAgICAgICAgZm9yIGRlY28sIGRvX3NraXAsIGRvbnRfc2tpcCBpbiBvcF90YWJsZToKKyAgICAgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICAgICAgQGRlY28oZG9fc2tpcCwgInRlc3RpbmciKQorICAgICAgICAgICAgICAgIGRlZiB0ZXN0X3NraXAoc2VsZik6IHBhc3MKKworICAgICAgICAgICAgICAgIEBkZWNvKGRvbnRfc2tpcCwgInRlc3RpbmciKQorICAgICAgICAgICAgICAgIGRlZiB0ZXN0X2RvbnRfc2tpcChzZWxmKTogcGFzcworICAgICAgICAgICAgdGVzdF9kb19za2lwID0gRm9vKCJ0ZXN0X3NraXAiKQorICAgICAgICAgICAgdGVzdF9kb250X3NraXAgPSBGb28oInRlc3RfZG9udF9za2lwIikKKyAgICAgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0X2RvX3NraXAsIHRlc3RfZG9udF9za2lwXSkKKyAgICAgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgICAgIHN1aXRlLnJ1bihyZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuc2tpcHBlZCksIDEpCisgICAgICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ2FkZFNraXAnLCAnc3RvcFRlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0VGVzdCcsICdhZGRTdWNjZXNzJywgJ3N0b3BUZXN0J10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0X2RvX3NraXAsICJ0ZXN0aW5nIildKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKKyAgICBkZWYgdGVzdF9za2lwX2NsYXNzKHNlbGYpOgorICAgICAgICBAdW5pdHRlc3Quc2tpcCgidGVzdGluZyIpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoMSkKKyAgICAgICAgcmVjb3JkID0gW10KKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfMSIpCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0XSkKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0LCAidGVzdGluZyIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQsIFtdKQorCisgICAgZGVmIHRlc3Rfc2tpcF9ub25fdW5pdHRlc3RfY2xhc3Nfb2xkX3N0eWxlKHNlbGYpOgorICAgICAgICBAdW5pdHRlc3Quc2tpcCgidGVzdGluZyIpCisgICAgICAgIGNsYXNzIE1peGluOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgICAgICAgICByZWNvcmQuYXBwZW5kKDEpCisgICAgICAgIGNsYXNzIEZvbyhNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgcGFzcworICAgICAgICByZWNvcmQgPSBbXQorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF8xIikKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RdKQorICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZCwgW10pCisKKyAgICBkZWYgdGVzdF9za2lwX25vbl91bml0dGVzdF9jbGFzc19uZXdfc3R5bGUoc2VsZik6CisgICAgICAgIEB1bml0dGVzdC5za2lwKCJ0ZXN0aW5nIikKKyAgICAgICAgY2xhc3MgTWl4aW4ob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6CisgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgxKQorICAgICAgICBjbGFzcyBGb28oTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmVjb3JkID0gW10KKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfMSIpCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0XSkKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0LCAidGVzdGluZyIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQsIFtdKQorCisgICAgZGVmIHRlc3RfZXhwZWN0ZWRfZmFpbHVyZShzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIGRlZiB0ZXN0X2RpZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImhlbHAgbWUhIikKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfZGllIikKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3N0YXJ0VGVzdCcsICdhZGRFeHBlY3RlZEZhaWx1cmUnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZXhwZWN0ZWRGYWlsdXJlc1swXVswXSwgdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKKyAgICBkZWYgdGVzdF91bmV4cGVjdGVkX3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCisgICAgICAgICAgICBkZWYgdGVzdF9kaWUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF9kaWUiKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnc3RhcnRUZXN0JywgJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0LmZhaWx1cmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC51bmV4cGVjdGVkU3VjY2Vzc2VzLCBbdGVzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorCisgICAgZGVmIHRlc3Rfc2tpcF9kb2VzbnRfcnVuX3NldHVwKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgd2FzU2V0VXAgPSBGYWxzZQorICAgICAgICAgICAgd2FzVG9ybkRvd24gPSBGYWxzZQorICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgICAgIEZvby53YXNTZXRVcCA9IFRydWUKKyAgICAgICAgICAgIGRlZiB0b3JuRG93bihzZWxmKToKKyAgICAgICAgICAgICAgICBGb28ud2FzVG9ybkRvd24gPSBUcnVlCisgICAgICAgICAgICBAdW5pdHRlc3Quc2tpcCgndGVzdGluZycpCisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF8xIikKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RdKQorICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEZvby53YXNTZXRVcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGb28ud2FzVG9ybkRvd24pCisKKyAgICBkZWYgdGVzdF9kZWNvcmF0ZWRfc2tpcChzZWxmKToKKyAgICAgICAgZGVmIGRlY29yYXRvcihmdW5jKToKKyAgICAgICAgICAgIGRlZiBpbm5lcigqYSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmEpCisgICAgICAgICAgICByZXR1cm4gaW5uZXIKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQGRlY29yYXRvcgorICAgICAgICAgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3RpbmcnKQorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfMSIpCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0XSkKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0LCAidGVzdGluZyIpXSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvbGliL3B5dGhvbjIuNy91bml0dGVzdC90ZXN0L3Rlc3Rfc3VpdGUucHkgYi9saWIvcHl0aG9uMi43L3VuaXR0ZXN0L3Rlc3QvdGVzdF9zdWl0ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmZiNTI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3B5dGhvbjIuNy91bml0dGVzdC90ZXN0L3Rlc3Rfc3VpdGUucHkKQEAgLTAsMCArMSwzNjcgQEAKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgc3lzCitmcm9tIC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0LCBUZXN0RXF1YWxpdHkKKworCisjIyMgU3VwcG9ydCBjb2RlIGZvciBUZXN0X1Rlc3RTdWl0ZQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBUZXN0KG9iamVjdCk6CisgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgIGRlZiB0ZXN0XzMoc2VsZik6IHBhc3MKKyAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6IHBhc3MKKworZGVmIF9ta19UZXN0U3VpdGUoKm5hbWVzKToKKyAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKFRlc3QuRm9vKG4pIGZvciBuIGluIG5hbWVzKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworY2xhc3MgVGVzdF9UZXN0U3VpdGUodW5pdHRlc3QuVGVzdENhc2UsIFRlc3RFcXVhbGl0eSk6CisKKyAgICAjIyMgU2V0IHVwIGF0dHJpYnV0ZXMgbmVlZGVkIGJ5IGluaGVyaXRlZCB0ZXN0cworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgVXNlZCBieSBUZXN0RXF1YWxpdHkudGVzdF9lcQorICAgIGVxX3BhaXJzID0gWyh1bml0dGVzdC5UZXN0U3VpdGUoKSwgdW5pdHRlc3QuVGVzdFN1aXRlKCkpLAorICAgICAgICAgICAgICAgICh1bml0dGVzdC5UZXN0U3VpdGUoKSwgdW5pdHRlc3QuVGVzdFN1aXRlKFtdKSksCisgICAgICAgICAgICAgICAoX21rX1Rlc3RTdWl0ZSgndGVzdF8xJyksIF9ta19UZXN0U3VpdGUoJ3Rlc3RfMScpKV0KKworICAgICMgVXNlZCBieSBUZXN0RXF1YWxpdHkudGVzdF9uZQorICAgIG5lX3BhaXJzID0gWyh1bml0dGVzdC5UZXN0U3VpdGUoKSwgX21rX1Rlc3RTdWl0ZSgndGVzdF8xJykpLAorICAgICAgICAgICAgICAgICh1bml0dGVzdC5UZXN0U3VpdGUoW10pLCBfbWtfVGVzdFN1aXRlKCd0ZXN0XzEnKSksCisgICAgICAgICAgICAgICAgKF9ta19UZXN0U3VpdGUoJ3Rlc3RfMScsICd0ZXN0XzInKSwgX21rX1Rlc3RTdWl0ZSgndGVzdF8xJywgJ3Rlc3RfMycpKSwKKyAgICAgICAgICAgICAgICAoX21rX1Rlc3RTdWl0ZSgndGVzdF8xJyksIF9ta19UZXN0U3VpdGUoJ3Rlc3RfMicpKV0KKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgL1NldCB1cCBhdHRyaWJ1dGVzIG5lZWRlZCBieSBpbmhlcml0ZWQgdGVzdHMKKworICAgICMjIyBUZXN0cyBmb3IgVGVzdFN1aXRlLl9faW5pdF9fCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyAiY2xhc3MgVGVzdFN1aXRlKFt0ZXN0c10pIgorICAgICMKKyAgICAjIFRoZSB0ZXN0cyBpdGVyYWJsZSBzaG91bGQgYmUgb3B0aW9uYWwKKyAgICBkZWYgdGVzdF9pbml0X190ZXN0c19vcHRpb25hbChzZWxmKToKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMCkKKworICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKKyAgICAjIC4uLgorICAgICMgIklmIHRlc3RzIGlzIGdpdmVuLCBpdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGluZGl2aWR1YWwgdGVzdCBjYXNlcworICAgICMgb3Igb3RoZXIgdGVzdCBzdWl0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYnVpbGQgdGhlIHN1aXRlIGluaXRpYWxseSIKKyAgICAjCisgICAgIyBUZXN0U3VpdGUgc2hvdWxkIGRlYWwgd2l0aCBlbXB0eSB0ZXN0cyBpdGVyYWJsZXMgYnkgYWxsb3dpbmcgdGhlCisgICAgIyBjcmVhdGlvbiBvZiBhbiBlbXB0eSBzdWl0ZQorICAgIGRlZiB0ZXN0X2luaXRfX2VtcHR5X3Rlc3RzKHNlbGYpOgorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCisKKyAgICAjICJjbGFzcyBUZXN0U3VpdGUoW3Rlc3RzXSkiCisgICAgIyAuLi4KKyAgICAjICJJZiB0ZXN0cyBpcyBnaXZlbiwgaXQgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiBpbmRpdmlkdWFsIHRlc3QgY2FzZXMKKyAgICAjIG9yIG90aGVyIHRlc3Qgc3VpdGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkIHRoZSBzdWl0ZSBpbml0aWFsbHkiCisgICAgIworICAgICMgVGVzdFN1aXRlIHNob3VsZCBhbGxvdyBhbnkgaXRlcmFibGUgdG8gcHJvdmlkZSB0ZXN0cworICAgIGRlZiB0ZXN0X2luaXRfX3Rlc3RzX2Zyb21fYW55X2l0ZXJhYmxlKHNlbGYpOgorICAgICAgICBkZWYgdGVzdHMoKToKKyAgICAgICAgICAgIHlpZWxkIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICAgICAgeWllbGQgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisKKyAgICAgICAgc3VpdGVfMSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSh0ZXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzEuY291bnRUZXN0Q2FzZXMoKSwgMikKKworICAgICAgICBzdWl0ZV8yID0gdW5pdHRlc3QuVGVzdFN1aXRlKHN1aXRlXzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGVfMi5jb3VudFRlc3RDYXNlcygpLCAyKQorCisgICAgICAgIHN1aXRlXzMgPSB1bml0dGVzdC5UZXN0U3VpdGUoc2V0KHN1aXRlXzEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzMuY291bnRUZXN0Q2FzZXMoKSwgMikKKworICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKKyAgICAjIC4uLgorICAgICMgIklmIHRlc3RzIGlzIGdpdmVuLCBpdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGluZGl2aWR1YWwgdGVzdCBjYXNlcworICAgICMgb3Igb3RoZXIgdGVzdCBzdWl0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYnVpbGQgdGhlIHN1aXRlIGluaXRpYWxseSIKKyAgICAjCisgICAgIyBEb2VzIFRlc3RTdWl0ZSgpIGFsc28gYWxsb3cgb3RoZXIgVGVzdFN1aXRlKCkgaW5zdGFuY2VzIHRvIGJlIHByZXNlbnQKKyAgICAjIGluIHRoZSB0ZXN0cyBpdGVyYWJsZT8KKyAgICBkZWYgdGVzdF9pbml0X19UZXN0U3VpdGVfaW5zdGFuY2VzX2luX3Rlc3RzKHNlbGYpOgorICAgICAgICBkZWYgdGVzdHMoKToKKyAgICAgICAgICAgIGZ0YyA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICAgICAgeWllbGQgdW5pdHRlc3QuVGVzdFN1aXRlKFtmdGNdKQorICAgICAgICAgICAgeWllbGQgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUodGVzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyAvVGVzdHMgZm9yIFRlc3RTdWl0ZS5fX2luaXRfXworCisgICAgIyBDb250YWluZXIgdHlwZXMgc2hvdWxkIHN1cHBvcnQgdGhlIGl0ZXIgcHJvdG9jb2wKKyAgICBkZWYgdGVzdF9pdGVyKHNlbGYpOgorICAgICAgICB0ZXN0MSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICB0ZXN0MiA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgodGVzdDEsIHRlc3QyKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbdGVzdDEsIHRlc3QyXSkKKworICAgICMgIlJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoZSB0aGlzIHRlc3Qgb2JqZWN0LgorICAgICMgLi4udGhpcyBtZXRob2QgaXMgYWxzbyBpbXBsZW1lbnRlZCBieSB0aGUgVGVzdFN1aXRlIGNsYXNzLCB3aGljaCBjYW4KKyAgICAjIHJldHVybiBsYXJnZXIgW2dyZWF0ZXIgdGhhbiAxXSB2YWx1ZXMiCisgICAgIworICAgICMgUHJlc3VtYWJseSBhbiBlbXB0eSBUZXN0U3VpdGUgcmV0dXJucyAwPworICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX3plcm9fc2ltcGxlKHNlbGYpOgorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAwKQorCisgICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuCisgICAgIyAuLi50aGlzIG1ldGhvZCBpcyBhbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBUZXN0U3VpdGUgY2xhc3MsIHdoaWNoIGNhbgorICAgICMgcmV0dXJuIGxhcmdlciBbZ3JlYXRlciB0aGFuIDFdIHZhbHVlcyIKKyAgICAjCisgICAgIyBQcmVzdW1hYmx5IGFuIGVtcHR5IFRlc3RTdWl0ZSAoZXZlbiBpZiBpdCBjb250YWlucyBvdGhlciBlbXB0eQorICAgICMgVGVzdFN1aXRlIGluc3RhbmNlcykgcmV0dXJucyAwPworICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX3plcm9fbmVzdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0MSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3VuaXR0ZXN0LlRlc3RTdWl0ZSgpXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCisKKyAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4KKyAgICAjIC4uLnRoaXMgbWV0aG9kIGlzIGFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIFRlc3RTdWl0ZSBjbGFzcywgd2hpY2ggY2FuCisgICAgIyByZXR1cm4gbGFyZ2VyIFtncmVhdGVyIHRoYW4gMV0gdmFsdWVzIgorICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX3NpbXBsZShzZWxmKToKKyAgICAgICAgdGVzdDEgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgdGVzdDIgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKHRlc3QxLCB0ZXN0MikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQorCisgICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuCisgICAgIyAuLi50aGlzIG1ldGhvZCBpcyBhbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBUZXN0U3VpdGUgY2xhc3MsIHdoaWNoIGNhbgorICAgICMgcmV0dXJuIGxhcmdlciBbZ3JlYXRlciB0aGFuIDFdIHZhbHVlcyIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgdGhpcyBob2xkcyBmb3IgbmVzdGVkIFRlc3RTdWl0ZSBpbnN0YW5jZXMsIHRvbworICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX25lc3RlZChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdDEodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3QxKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdDIoc2VsZik6IHBhc3MKKworICAgICAgICB0ZXN0MiA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICB0ZXN0MyA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICBjaGlsZCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoVGVzdDEoJ3Rlc3QyJyksIHRlc3QyKSkKKyAgICAgICAgcGFyZW50ID0gdW5pdHRlc3QuVGVzdFN1aXRlKCh0ZXN0MywgY2hpbGQsIFRlc3QxKCd0ZXN0MScpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmVudC5jb3VudFRlc3RDYXNlcygpLCA0KQorCisgICAgIyAiUnVuIHRoZSB0ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWl0ZSwgY29sbGVjdGluZyB0aGUgcmVzdWx0IGludG8KKyAgICAjIHRoZSB0ZXN0IHJlc3VsdCBvYmplY3QgcGFzc2VkIGFzIHJlc3VsdC4iCisgICAgIworICAgICMgQW5kIGlmIHRoZXJlIGFyZSBubyB0ZXN0cz8gV2hhdCB0aGVuPworICAgIGRlZiB0ZXN0X3J1bl9fZW1wdHlfc3VpdGUoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbXSkKKworICAgICMgIk5vdGUgdGhhdCB1bmxpa2UgVGVzdENhc2UucnVuKCksIFRlc3RTdWl0ZS5ydW4oKSByZXF1aXJlcyB0aGUKKyAgICAjICJyZXN1bHQgb2JqZWN0IHRvIGJlIHBhc3NlZCBpbi4iCisgICAgZGVmIHRlc3RfcnVuX19yZXF1aXJlc19yZXN1bHQoc2VsZik6CisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWl0ZS5ydW4oKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgVHlwZUVycm9yIikKKworICAgICMgIlJ1biB0aGUgdGVzdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VpdGUsIGNvbGxlY3RpbmcgdGhlIHJlc3VsdCBpbnRvCisgICAgIyB0aGUgdGVzdCByZXN1bHQgb2JqZWN0IHBhc3NlZCBhcyByZXN1bHQuIgorICAgIGRlZiB0ZXN0X3J1bihzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgY2xhc3MgTG9nZ2luZ0Nhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHJ1bihzZWxmLCByZXN1bHQpOgorICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3J1biAlcycgJSBzZWxmLl90ZXN0TWV0aG9kTmFtZSkKKworICAgICAgICAgICAgZGVmIHRlc3QxKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdDIoc2VsZik6IHBhc3MKKworICAgICAgICB0ZXN0cyA9IFtMb2dnaW5nQ2FzZSgndGVzdDEnKSwgTG9nZ2luZ0Nhc2UoJ3Rlc3QyJyldCisKKyAgICAgICAgdW5pdHRlc3QuVGVzdFN1aXRlKHRlc3RzKS5ydW4ocmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbJ3J1biB0ZXN0MScsICdydW4gdGVzdDInXSkKKworICAgICMgIkFkZCBhIFRlc3RDYXNlIC4uLiB0byB0aGUgc3VpdGUiCisgICAgZGVmIHRlc3RfYWRkVGVzdF9fVGVzdENhc2Uoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcworCisgICAgICAgIHRlc3QgPSBGb28oJ3Rlc3QnKQorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICAgICAgc3VpdGUuYWRkVGVzdCh0ZXN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3Rlc3RdKQorCisgICAgIyAiQWRkIGEgLi4uIFRlc3RTdWl0ZSB0byB0aGUgc3VpdGUiCisgICAgZGVmIHRlc3RfYWRkVGVzdF9fVGVzdFN1aXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6IHBhc3MKKworICAgICAgICBzdWl0ZV8yID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3QnKV0pCisKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KHN1aXRlXzIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbc3VpdGVfMl0pCisKKyAgICAjICJBZGQgYWxsIHRoZSB0ZXN0cyBmcm9tIGFuIGl0ZXJhYmxlIG9mIFRlc3RDYXNlIGFuZCBUZXN0U3VpdGUKKyAgICAjIGluc3RhbmNlcyB0byB0aGlzIHRlc3Qgc3VpdGUuIgorICAgICMKKyAgICAjICJUaGlzIGlzIGVxdWl2YWxlbnQgdG8gaXRlcmF0aW5nIG92ZXIgdGVzdHMsIGNhbGxpbmcgYWRkVGVzdCgpIGZvcgorICAgICMgZWFjaCBlbGVtZW50IgorICAgIGRlZiB0ZXN0X2FkZFRlc3RzKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworCisgICAgICAgIHRlc3RfMSA9IEZvbygndGVzdF8xJykKKyAgICAgICAgdGVzdF8yID0gRm9vKCd0ZXN0XzInKQorICAgICAgICBpbm5lcl9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdF8yXSkKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZCB0ZXN0XzEKKyAgICAgICAgICAgIHlpZWxkIHRlc3RfMgorICAgICAgICAgICAgeWllbGQgaW5uZXJfc3VpdGUKKworICAgICAgICBzdWl0ZV8xID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc3VpdGVfMS5hZGRUZXN0cyhnZW4oKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGVfMSksIGxpc3QoZ2VuKCkpKQorCisgICAgICAgICMgIlRoaXMgaXMgZXF1aXZhbGVudCB0byBpdGVyYXRpbmcgb3ZlciB0ZXN0cywgY2FsbGluZyBhZGRUZXN0KCkgZm9yCisgICAgICAgICMgZWFjaCBlbGVtZW50IgorICAgICAgICBzdWl0ZV8yID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgZm9yIHQgaW4gZ2VuKCk6CisgICAgICAgICAgICBzdWl0ZV8yLmFkZFRlc3QodCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzEsIHN1aXRlXzIpCisKKyAgICAjICJBZGQgYWxsIHRoZSB0ZXN0cyBmcm9tIGFuIGl0ZXJhYmxlIG9mIFRlc3RDYXNlIGFuZCBUZXN0U3VpdGUKKyAgICAjIGluc3RhbmNlcyB0byB0aGlzIHRlc3Qgc3VpdGUuIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyBpZiBpdCBkb2Vzbid0IGdldCBhbiBpdGVyYWJsZT8KKyAgICBkZWYgdGVzdF9hZGRUZXN0X19ub25pdGVyYWJsZShzZWxmKToKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1aXRlLmFkZFRlc3RzKDUpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBUeXBlRXJyb3IiKQorCisgICAgZGVmIHRlc3RfYWRkVGVzdF9fbm9uY2FsbGFibGUoc2VsZik6CisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdWl0ZS5hZGRUZXN0LCA1KQorCisgICAgZGVmIHRlc3RfYWRkVGVzdF9fY2FzZXN1aXRlY2xhc3Moc2VsZik6CisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdWl0ZS5hZGRUZXN0LCBUZXN0X1Rlc3RTdWl0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdWl0ZS5hZGRUZXN0LCB1bml0dGVzdC5UZXN0U3VpdGUpCisKKyAgICBkZWYgdGVzdF9hZGRUZXN0c19fc3RyaW5nKHNlbGYpOgorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3VpdGUuYWRkVGVzdHMsICJmb28iKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25faW5fc3VpdGUoc2VsZik6CisgICAgICAgIGRlZiBmKF8pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHN1aXRlLmFkZFRlc3QoZikKKworICAgICAgICAjIHdoZW4gdGhlIGJ1ZyBpcyBmaXhlZCB0aGlzIGxpbmUgd2lsbCBub3QgY3Jhc2gKKyAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKworCisKKyAgICBkZWYgdGVzdF9iYXNldGVzdHN1aXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHdhc1NldFVwID0gRmFsc2UKKyAgICAgICAgICAgIHdhc1Rvcm5Eb3duID0gRmFsc2UKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBjbHMud2FzU2V0VXAgPSBUcnVlCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgY2xzLndhc1Rvcm5Eb3duID0gVHJ1ZQorICAgICAgICAgICAgZGVmIHRlc3RQYXNzKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0RmFpbChzZWxmKToKKyAgICAgICAgICAgICAgICBmYWlsCisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgd2FzU2V0VXAgPSBGYWxzZQorICAgICAgICAgICAgd2FzVG9ybkRvd24gPSBGYWxzZQorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgTW9kdWxlLndhc1NldFVwID0gVHJ1ZQorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgTW9kdWxlLndhc1Rvcm5Eb3duID0gVHJ1ZQorCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3lzLm1vZHVsZXMucG9wLCAnTW9kdWxlJykKKworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LkJhc2VUZXN0U3VpdGUoKQorICAgICAgICBzdWl0ZS5hZGRUZXN0cyhbVGVzdCgndGVzdFBhc3MnKSwgVGVzdCgndGVzdEZhaWwnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMikKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShNb2R1bGUud2FzU2V0VXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoTW9kdWxlLndhc1Rvcm5Eb3duKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFRlc3Qud2FzU2V0VXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVGVzdC53YXNUb3JuRG93bikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAyKQorCisKKyAgICBkZWYgdGVzdF9vdmVycmlkaW5nX2NhbGwoc2VsZik6CisgICAgICAgIGNsYXNzIE15U3VpdGUodW5pdHRlc3QuVGVzdFN1aXRlKToKKyAgICAgICAgICAgIGNhbGxlZCA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RTdWl0ZS5fX2NhbGxfXyhzZWxmLCAqYXJncywgKiprdykKKworICAgICAgICBzdWl0ZSA9IE15U3VpdGUoKQorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgd3JhcHBlciA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHdyYXBwZXIuYWRkVGVzdChzdWl0ZSkKKyAgICAgICAgd3JhcHBlcihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWl0ZS5jYWxsZWQpCisKKyAgICAgICAgIyByZXVzaW5nIHJlc3VsdHMgc2hvdWxkIGJlIHBlcm1pdHRlZCBldmVuIGlmIGFib21pbmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuX3Rlc3RSdW5FbnRlcmVkKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9yZXBvLnByb3AgYi9yZXBvLnByb3AKaW5kZXggZGM3NmIxNS4uMTU2Zjc5NiAxMDA2NDQKLS0tIGEvcmVwby5wcm9wCisrKyBiL3JlcG8ucHJvcApAQCAtMSw0MSArMSw0OSBAQAotcGxhdGZvcm0vYmlvbmljIDhkOTJhZmUzMjI2NWJlOGMzNmVhMmFkYjNjNDA1OTI5OGNkNTgzZWIKLXBsYXRmb3JtL2RldmVsb3BtZW50IDU0MjEyZjk4ODE0NjU3OGRkMDE0YzQyYThiMWU2NmU5OGFiNzQwZTcKLXBsYXRmb3JtL2V4dGVybmFsL2Nocm9taXRlIGY5YTkxMmY2Y2ZiYzBjOGU5NDE5Y2FmYjBjN2IxNjk4OTI2ZGNlNWYKLXBsYXRmb3JtL21hbmlmZXN0IGQwMzU2NjVjOGQ5YWE3YTI2YThkNTkwODE4Nzc3NjkyZTgxYWI2ZGUKLXBsYXRmb3JtL25kayBkNjM1ODM2YjY5OTUzZDkxNTY4YTY4NmY1NjEzYjE3ODdkYzNlMWJkCi1wbGF0Zm9ybS9wcmVidWlsdHMvY2xhbmcvZGFyd2luLXg4Ni9ob3N0LzMuNiAyZjgyZTY0Nzk5NWRlMThiNDc0MTEwOTExOTdkNDc3MTRhNTAyMDE1Ci1wbGF0Zm9ybS9wcmVidWlsdHMvY2xhbmcvaG9zdC93aW5kb3dzLXg4NiBmODE1YzJiZTM1MjUyYTc4ZDNjMGY0YWVkNDE2MzA4MjdmNDFlNzFkCi1wbGF0Zm9ybS9wcmVidWlsdHMvY2xhbmcvbGludXgteDg2L2hvc3QvMy42IGFjN2JlMzdhN2EwY2FiZWIzNGMzMzViZjVkODg4MmFmY2JhNGVmYTAKLXBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9hYXJjaDY0L2FhcmNoNjQtbGludXgtYW5kcm9pZC00LjkgZTgyMWM2NDlmMzdmM2FhZmEyZjg0ZTkxOWJkZjAwNmExNjNiMWI3NgorcGxhdGZvcm0vYmlvbmljIGUyM2RmOTM5MTVkZDg5YWU5NjYxZGRlZDNjNTFiZmQ1YTBiZDE4NWUKK3BsYXRmb3JtL2RldmVsb3BtZW50IDY5ODBmNWRjNWU4NzdmZTk5Mzg2ODQ3M2ZmZGE2MTExZGViMDY5NTQKK3BsYXRmb3JtL2V4dGVybmFsL2dvb2dsZXRlc3QgMDEzZWU2ZmNjYjZiYjllYmQ2MjE1YjUwNGYwZWVmNDVkY2NmZGU0ZQorcGxhdGZvcm0vZXh0ZXJuYWwvc2hhZGVyYy9nbHNsYW5nIGMxY2NkNGJmOTFkNjY1YTE5YzdlZDI2OTRmZTY1YmYxNzM4YTY4NDUKK3BsYXRmb3JtL2V4dGVybmFsL3NoYWRlcmMvc2hhZGVyYyAwOGY4ZTQ5NTk4NzExZjEwNzQyMmI2MDI3YzI2ZDY5NTdhMjQxZTFkCitwbGF0Zm9ybS9leHRlcm5hbC9zaGFkZXJjL3NwaXJ2LXRvb2xzIGVkMGI4ODY2YzQ3YjI2YzlmZTJhNzI4YjczMzkyZjZiYWVmYTIxNTgKK3BsYXRmb3JtL2V4dGVybmFsL3Z1bGthbi12YWxpZGF0aW9uLWxheWVycyA2MTMwZGNhNTc5OGFmYjllMDhlMmI3ZTUzMmFlZjVkMmViZDRkNzA2CitwbGF0Zm9ybS9tYW5pZmVzdCAwZWIzNTIxNGNhNmY2OTU0ZGVkNDRlNjk4NDRiYmViZTE5NmJmNDc2CitwbGF0Zm9ybS9uZGsgOTI3NDg0NThiNzJmODllM2Q4ZjljNDMxY2NiNjE1YmVjOGUyMGMyNgorcGxhdGZvcm0vcHJlYnVpbHRzL2NsYW5nL2hvc3QvZGFyd2luLXg4NiAzM2YwMDYzMTI4ZTRkNmFiN2Y2Mzc4MmM5Y2QzMmRiNGU4MzI4NDhkCitwbGF0Zm9ybS9wcmVidWlsdHMvY2xhbmcvaG9zdC9saW51eC14ODYgNzdhNDAzY2RkNzI1YTNiYTc1YTRkODZkNzc3Y2MxYjIzNDNlYmExYQorcGxhdGZvcm0vcHJlYnVpbHRzL2NsYW5nL2hvc3Qvd2luZG93cy14ODYgOTdlYmRhZGRhZTYxY2UzYTY2NmU4YTlhNjIwZmMzY2M5ODI4YmI4NQorcGxhdGZvcm0vcHJlYnVpbHRzL2NtYWtlL2Rhcndpbi14ODYgZDQ0MTBkYTFhYzMwN2Y0YzgzNjJhMmIwYWU3MjdjNjgyYWUwNmVkNAorcGxhdGZvcm0vcHJlYnVpbHRzL2NtYWtlL2xpbnV4LXg4NiAwOTFjYWFmZGE0NGY3ZmU1MmE5NDM4N2IyZWFmY2YyMDRlYTkwOWQzCitwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2Rhcndpbi14ODYvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LWFuZHJvaWQtNC45IDUxZmE3N2YxMGY4YzVlZTY1OGJmYWYzZTVhMmEyOWViZDhkZTUwZDIKIHBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9hcm0vYXJtLWVhYmktNC44IDZkMDhjYTlmNDVmZjY4NTY0OGZkMTNjNzViZjVjYWM0YjExYzE5YmIKLXBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvZGFyd2luLXg4Ni9hcm0vYXJtLWxpbnV4LWFuZHJvaWRlYWJpLTQuOSA4MzE4OTMwOWVlMDIzMTRhZDllNzE0N2I5NmM2YTg5M2U1Y2YxY2EwCitwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2Rhcndpbi14ODYvYXJtL2FybS1saW51eC1hbmRyb2lkZWFiaS00LjkgMzlmZDk1NzdmZTM4OTVhNjhhOTIxMjE2ODM2ZWJkZDQ2YjQyNTVhOAogcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2hvc3QvaGVhZGVycyA0YWM0ZjdjYzQxY2YzYzllMzZmYzNkNmNmMzdmZDFjZmE5NTg3YTY4Ci1wbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2Rhcndpbi14ODYvaG9zdC9pNjg2LWFwcGxlLWRhcndpbi00LjIuMSA4ODM0OTU4NzU1YWNjMjkxZDEyNmJhN2VlMzhhYzczMWQwNGY5YzllCi1wbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2Rhcndpbi14ODYvbWlwcy9taXBzNjRlbC1saW51eC1hbmRyb2lkLTQuOSBhYTY1ZGUwNGY3OGM5Yzg3ODA1YmUwMDY2NmFlMGM2YmJlMGViZmI2Ci1wbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2Rhcndpbi14ODYveDg2L3g4Nl82NC1saW51eC1hbmRyb2lkLTQuOSBjMDM3MWVmYjI1MzY1ZjQ0ZTBhZDRlYTYxYTc0ZDZlNGZiODRmM2NlCi1wbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9hYXJjaDY0L2FhcmNoNjQtbGludXgtYW5kcm9pZC00LjkgOTRjYzkyMzRiYjZhZGVmOWQ3MDE4MTkxODBhM2MyZGI4MzYwZWEzMQorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L2hvc3QvaTY4Ni1hcHBsZS1kYXJ3aW4tNC4yLjEgZWM1YWE2NmFhYTQ5NjRjMjc1NjRkMGVjODRkYzFmMThhMmQ3MmI3ZQorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L21pcHMvbWlwczY0ZWwtbGludXgtYW5kcm9pZC00LjkgNGJhNDhkNGFjZTYzNDA0MzA0ZjIwMWRjN2Q1ZTg3YWM1NWZjN2Q1OQorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9kYXJ3aW4teDg2L3g4Ni94ODZfNjQtbGludXgtYW5kcm9pZC00LjkgMjUwMGJkOWFhYTY0MGMxNzk3MzBkZjdmNzMxNWQ1ZWU5MGU0YzNjMQorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LWFuZHJvaWQtNC45IDQyM2MwMjY1MTc2YmNhYmQxYzg4NWY4Y2Y2ZjBjZWRmNjdkM2Y1OWIKIHBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2FybS9hcm0tZWFiaS00LjggMjZlOTNmNmFmNDdmN2JkM2E5YmViNWMxMDJhNWY0NWUxOWJmYTM4YQotcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvYXJtL2FybS1saW51eC1hbmRyb2lkZWFiaS00LjkgYTcwNzI0ZmFlNGQ0YzU3MWU1NjU3MzQwZjgwYTBjMTMwZDUyODNlYwotcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvaG9zdC94ODZfNjQtbGludXgtZ2xpYmMyLjExLTQuOCA2M2IyMDlmZWFjMGIwNDVmNWZjNjg4MTBmZDJlNjViZjFjYTUxZTJmCi1wbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9ob3N0L3g4Nl82NC1saW51eC1nbGliYzIuMTUtNC44IGY2MWE0NTk0NzhjZGMzMWU4YWFlMjJhMTgyY2RiZjgxNGJhMDgwMTIKLXBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2hvc3QveDg2XzY0LXc2NC1taW5ndzMyLTQuOCBmNjkxY2FlMmYyNTZkNWY3MjM4OGMwY2U5MTEzMDA3YTUzYWQzMzNhCi1wbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9taXBzL21pcHM2NGVsLWxpbnV4LWFuZHJvaWQtNC45IDU5NDYxZGYxNDE4YjM3NzFjMTFmMTk1N2JiOGY3ZjQxZTM5OTQ0N2QKLXBsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L3g4Ni94ODZfNjQtbGludXgtYW5kcm9pZC00LjkgYzFhMzlkZGVmODQ5NmViODRjNDk4ODM0MjNhMjIwZTdkZmU4MGQwNgotcGxhdGZvcm0vcHJlYnVpbHRzL25kayA0OTRlOThjMmFjYTcxNDc2ZDlmOTM4M2MxMjA1YTcxNzJkZGRkMzQzCi1wbGF0Zm9ybS9wcmVidWlsdHMvcHl0aG9uL2Rhcndpbi14ODYvMi43LjUgZGFjZjJkZTU3NjUxNmYyNzUxNDIwZWI2MGI4ZGFmNjRkMGY5MTY3NwotcGxhdGZvcm0vcHJlYnVpbHRzL3B5dGhvbi9saW51eC14ODYvMi43LjUgNTgzNjUyZjFiNmUyMTNlYTE3NjMwOTk3MzZkYWJjODA3MDc5OGQ0NwotdG9vbGNoYWluL2JpbnV0aWxzIDA0MmMyMjBiYzJkMmM0OGVjZjQxMGIwZGZmZmIzODhhNWQ1N2NjY2MKLXRvb2xjaGFpbi9idWlsZCA3OWI1NzAxZjFlMmYwZGVlNjg5NThjN2M0MjA2Y2RmOWM0NGYxMjYxCitwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9hcm0vYXJtLWxpbnV4LWFuZHJvaWRlYWJpLTQuOSA4ODc1NzRmOThlOTc0NzVkNmZiMmY5MWE4ZjdiMjQ2MDI0NjYwMTdhCitwbGF0Zm9ybS9wcmVidWlsdHMvZ2NjL2xpbnV4LXg4Ni9ob3N0L3g4Nl82NC1saW51eC1nbGliYzIuMTEtNC44IDEyNzM0MzFhMTg5NzE3ODQyZjAzMzU3M2ViOGM3NzdlMTNkZDg4YjcKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L2hvc3QveDg2XzY0LWxpbnV4LWdsaWJjMi4xNS00LjggNzNjYTk5MTk2NzIzZjgxMGRhZDQyMzkwZDE1NDY1NDM1NGY1N2MxNgorcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYvaG9zdC94ODZfNjQtdzY0LW1pbmd3MzItNC44IGM3OTVlZWQ3NDNiYzZjZWU0ZWFkNTQwN2NjMjM3YzQzYWJmNmZhMjYKK3BsYXRmb3JtL3ByZWJ1aWx0cy9nY2MvbGludXgteDg2L21pcHMvbWlwczY0ZWwtbGludXgtYW5kcm9pZC00LjkgODhiZmVjYWI1YjcwMGExZjZhNjAxNDM0ZDU4MTZmYWI2YzkyNjFmYworcGxhdGZvcm0vcHJlYnVpbHRzL2djYy9saW51eC14ODYveDg2L3g4Nl82NC1saW51eC1hbmRyb2lkLTQuOSBlM2I5M2E4ZjQ0ZDQzMTAxYjM5NmQ0MWVmMzA1NjI4ODU3MTRlMTMwCitwbGF0Zm9ybS9wcmVidWlsdHMvbmRrIDA2NzdjOTA1Nzk1ZWFjMmI2OTk4MDEwNWM0NDUxNGRmODEzYWVkMjMKK3BsYXRmb3JtL3ByZWJ1aWx0cy9uaW5qYS9kYXJ3aW4teDg2IGNjMTQ3YWUyOTU2ZTk2Mjc5MDg1YWJmYWRkYTI3NjdiNTBlZGMyY2MKK3BsYXRmb3JtL3ByZWJ1aWx0cy9uaW5qYS9saW51eC14ODYgNTQzMTEyYzY3NDRhY2I3YTAxOGFjMzYxMThlYjJhODYyODM0ODA5YgorcGxhdGZvcm0vcHJlYnVpbHRzL3B5dGhvbi9kYXJ3aW4teDg2LzIuNy41IDBjNTk1OGIxNjM2YzQ3ZWQ3YzI4NGY4NTljOGU4MDVmZDA2YTBlNjMKK3BsYXRmb3JtL3ByZWJ1aWx0cy9weXRob24vbGludXgteDg2LzIuNy41IDk4NzA4MzRhMWY2MTY4OWFhZmYxZWVkZGEwZTFlZTczZDcxNTA3NjMKK3Rvb2xjaGFpbi9iaW51dGlscyBkOTI5Y2ZkNTBkNzcwMzY0ZmQ2NTJkMjUyYWJjMTk1OThiMGNjODRjCit0b29sY2hhaW4vYnVpbGQgZjI4MDY1NzQ2MWFlZTU0YjZkMjgwNzg4MWQ4YTc3ODMyZjRlNzk0YwogdG9vbGNoYWluL2Nsb29nIDYwNDc5M2VhYjk3ZDM2MGFlZjcyOWYwNjQ2NzQ1NjllZTZkYmYzZTEKIHRvb2xjaGFpbi9leHBhdCA0MDE3MmEwYWU5ZDQwYTA2OGYxZTFhNDhmZmNmNmExY2NmNzY1ZWQ1Ci10b29sY2hhaW4vZ2NjIDgxNzYyNDcxZGZmNjYyZGUzMDY2MDM3ZjQyNWQ0ZGFkYzIwYmU0MGYKLXRvb2xjaGFpbi9nZGIgYzlmOWY1NGQzNjEyNDQ0OGNmMThkNTc5MjNlYzgwMWNhODQ0NzhiNQordG9vbGNoYWluL2djYyAzNzkxZGFmZWIyZDU4YmM2YzQ1NzUzZjRjZGYwZmE1NDMxOTYzY2ZhCit0b29sY2hhaW4vZ2RiIGFiZTVjMDhhZWU4ZjI2MDJjNDBhOTUxZGFlNjRkYWFjNGJlYjU5N2EKIHRvb2xjaGFpbi9nbXAgYjJhY2Q1ZGJmNDc4NjhhYzViNWJjODQ0ZTE2ZDJjYWRjYmQ0YzgxMAotdG9vbGNoYWluL2lzbCBiMDVkNDU3Mjk1OGM1ZDQ5N2RhNzkzZjMzMTcwODRiYWI5MGMzMDMzCit0b29sY2hhaW4vaXNsIDBjY2Y5NTcyNmFmOGNlNThhZDYxZmY0NzRhZGRiY2UzYTMxYmE5OWMKIHRvb2xjaGFpbi9tcGMgODM1ZDE2ZTkyZWVkODc1NjM4YThiNWQ1NTIwMzRjM2IxYWFlMDQ1YgogdG9vbGNoYWluL21wZnIgZGU5NzlmYzM3N2RiNzY2NTkxZTdmZWFmMDUyZjBkZTU5YmU0NmU3NgotdG9vbGNoYWluL25ka19jaHJvbWl0ZV9jb25maWcgYWFmMGJjN2M1YzMzYWE5MmYyYjc5NjUzN2NlYTQ0MzA5ZjUxNGUwOQogdG9vbGNoYWluL3BwbCA5NzkwNjJkMzYyYmM1YTFjMDA4MDQyMzdiNDA4YjE5YjQ2MThmYjI0Ci10b29sY2hhaW4vcHl0aG9uIDVkNGFmYWZlMzYyY2ZhYmY2YzQ3ODNhMTFjNGM4MGRmNWFmYTFlMWYKK3Rvb2xjaGFpbi9weXRob24gNmE3ZmM5YmZkMjFkYTg1ZGRhOTdhOGJjZDI5NTJlMGJmYmRlZDQyNAogdG9vbGNoYWluL3NlZCA0NWRmMjNkNmRjOGI1MWVhNWNkOTAzZDAyM2MxMGZkN2Q3MjQxNWI5Ci10b29sY2hhaW4veWFzbSBjNzhlYmU5YTQ0Y2Y2OWM0NmZkNGUzMTg1ZmVmNjJlNTY3YjVhZDRhClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQordG9vbGNoYWluL3h6IDU5NTQwN2Y1YTIzN2U5YmZkNjgyMWQ3MDA5NmQzODgyNWVjOWM0ZTAKK3Rvb2xjaGFpbi95YXNtIGExNTlmZTA3MzgwOWI0MTM4Y2Y5MGI3Mjk4ZWEzMWVhMTdhZjg1YzAKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9weXRob24vZ2RiL0ZyYW1lRGVjb3JhdG9yLnB5IGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvRnJhbWVEZWNvcmF0b3IucHkKaW5kZXggOGI2NGVlOS4uZDZiZmExZSAxMDA2NDQKLS0tIGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvRnJhbWVEZWNvcmF0b3IucHkKKysrIGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvRnJhbWVEZWNvcmF0b3IucHkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvRnJhbWVJdGVyYXRvci5weSBiL3NoYXJlL2dkYi9weXRob24vZ2RiL0ZyYW1lSXRlcmF0b3IucHkKaW5kZXggMWU5NmFiMC4uNzBkZmFmMyAxMDA2NDQKLS0tIGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvRnJhbWVJdGVyYXRvci5weQorKysgYi9zaGFyZS9nZGIvcHl0aG9uL2dkYi9GcmFtZUl0ZXJhdG9yLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9weXRob24vZ2RiL19faW5pdF9fLnB5IGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvX19pbml0X18ucHkKaW5kZXggODE3ODllNS4uNTIwNWNjOSAxMDA2NDQKLS0tIGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvX19pbml0X18ucHkKKysrIGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvX19pbml0X18ucHkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxMC0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvY29tbWFuZC9fX2luaXRfXy5weSBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvX19pbml0X18ucHkKaW5kZXggYmI3N2NkNy4uODQzM2Q1MCAxMDA2NDQKLS0tIGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvY29tbWFuZC9fX2luaXRfXy5weQorKysgYi9zaGFyZS9nZGIvcHl0aG9uL2dkYi9jb21tYW5kL19faW5pdF9fLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvZXhwbG9yZS5weSBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvZXhwbG9yZS5weQppbmRleCA4OGYzZTlhLi42YzlmMTdiIDEwMDY0NAotLS0gYS9zaGFyZS9nZGIvcHl0aG9uL2dkYi9jb21tYW5kL2V4cGxvcmUucHkKKysrIGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvY29tbWFuZC9leHBsb3JlLnB5CkBAIC0xLDUgKzEsNSBAQAogIyBHREIgJ2V4cGxvcmUnIGNvbW1hbmQuCi0jIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvY29tbWFuZC9mcmFtZV9maWx0ZXJzLnB5IGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvY29tbWFuZC9mcmFtZV9maWx0ZXJzLnB5CmluZGV4IGQ4OGNiOTYuLmM5ZDRmM2UgMTAwNjQ0Ci0tLSBhL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvZnJhbWVfZmlsdGVycy5weQorKysgYi9zaGFyZS9nZGIvcHl0aG9uL2dkYi9jb21tYW5kL2ZyYW1lX2ZpbHRlcnMucHkKQEAgLTEsNSArMSw1IEBACiAjIEZyYW1lLWZpbHRlciBjb21tYW5kcy4KLSMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvcHl0aG9uL2dkYi9jb21tYW5kL3ByZXR0eV9wcmludGVycy5weSBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvcHJldHR5X3ByaW50ZXJzLnB5CmluZGV4IGFmZThmYjguLjIxYmIwZDYgMTAwNjQ0Ci0tLSBhL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvcHJldHR5X3ByaW50ZXJzLnB5CisrKyBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvcHJldHR5X3ByaW50ZXJzLnB5CkBAIC0xLDUgKzEsNSBAQAogIyBQcmV0dHktcHJpbnRlciBjb21tYW5kcy4KLSMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvcHl0aG9uL2dkYi9jb21tYW5kL3Byb21wdC5weSBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvcHJvbXB0LnB5CmluZGV4IDRhYzRjYjYuLmM3ZmMwZDggMTAwNjQ0Ci0tLSBhL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvcHJvbXB0LnB5CisrKyBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvcHJvbXB0LnB5CkBAIC0xLDUgKzEsNSBAQAogIyBFeHRlbmRlZCBwcm9tcHQuCi0jIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvY29tbWFuZC90eXBlX3ByaW50ZXJzLnB5IGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvY29tbWFuZC90eXBlX3ByaW50ZXJzLnB5CmluZGV4IDEyMDM5ODkuLmM4M2VkMzUgMTAwNjQ0Ci0tLSBhL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvdHlwZV9wcmludGVycy5weQorKysgYi9zaGFyZS9nZGIvcHl0aG9uL2dkYi9jb21tYW5kL3R5cGVfcHJpbnRlcnMucHkKQEAgLTEsNSArMSw1IEBACiAjIFR5cGUgcHJpbnRlciBjb21tYW5kcy4KLSMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvcHl0aG9uL2dkYi9jb21tYW5kL3Vud2luZGVycy5weSBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvdW53aW5kZXJzLnB5CmluZGV4IDFhNWFlZDkuLmE5YjlkOGEgMTAwNjQ0Ci0tLSBhL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvdW53aW5kZXJzLnB5CisrKyBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQvdW53aW5kZXJzLnB5CkBAIC0xLDUgKzEsNSBAQAogIyBVbndpbmRlciBjb21tYW5kcy4KLSMgQ29weXJpZ2h0IDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAyMDE1LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQveG1ldGhvZHMucHkgYi9zaGFyZS9nZGIvcHl0aG9uL2dkYi9jb21tYW5kL3htZXRob2RzLnB5CmluZGV4IDA3ODhhODEuLjQ2ZjdiNjYgMTAwNjQ0Ci0tLSBhL3NoYXJlL2dkYi9weXRob24vZ2RiL2NvbW1hbmQveG1ldGhvZHMucHkKKysrIGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvY29tbWFuZC94bWV0aG9kcy5weQpAQCAtMSw1ICsxLDUgQEAKICMgWG1ldGhvZCBjb21tYW5kcy4KLSMgQ29weXJpZ2h0IDIwMTMtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IDIwMTMtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvZnJhbWVzLnB5IGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvZnJhbWVzLnB5CmluZGV4IGQ1MWI1NzkuLjZhZTkyZWQgMTAwNjQ0Ci0tLSBhL3NoYXJlL2dkYi9weXRob24vZ2RiL2ZyYW1lcy5weQorKysgYi9zaGFyZS9nZGIvcHl0aG9uL2dkYi9mcmFtZXMucHkKQEAgLTEsNSArMSw1IEBACiAjIEZyYW1lLWZpbHRlciBjb21tYW5kcy4KLSMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvcHl0aG9uL2dkYi9mdW5jdGlvbi9fX2luaXRfXy5weSBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2Z1bmN0aW9uL19faW5pdF9fLnB5CmluZGV4IDI1Y2EyODUuLjUyMjA3ODcgMTAwNjQ0Ci0tLSBhL3NoYXJlL2dkYi9weXRob24vZ2RiL2Z1bmN0aW9uL19faW5pdF9fLnB5CisrKyBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2Z1bmN0aW9uL19faW5pdF9fLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9weXRob24vZ2RiL2Z1bmN0aW9uL2NhbGxlcl9pcy5weSBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2Z1bmN0aW9uL2NhbGxlcl9pcy5weQppbmRleCA3YTdiZTlkLi41Yjg5MTkxIDEwMDY0NAotLS0gYS9zaGFyZS9nZGIvcHl0aG9uL2dkYi9mdW5jdGlvbi9jYWxsZXJfaXMucHkKKysrIGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvZnVuY3Rpb24vY2FsbGVyX2lzLnB5CkBAIC0xLDUgKzEsNSBAQAogIyBDYWxsZXItaXMgZnVuY3Rpb25zLgotIyBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9weXRob24vZ2RiL2Z1bmN0aW9uL3N0cmZucy5weSBiL3NoYXJlL2dkYi9weXRob24vZ2RiL2Z1bmN0aW9uL3N0cmZucy5weQppbmRleCAwMjg3YzlhLi4wNmEzN2FkIDEwMDY0NAotLS0gYS9zaGFyZS9nZGIvcHl0aG9uL2dkYi9mdW5jdGlvbi9zdHJmbnMucHkKKysrIGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvZnVuY3Rpb24vc3RyZm5zLnB5CkBAIC0xLDUgKzEsNSBAQAogIyBVc2VmdWwgZ2RiIHN0cmluZyBjb252ZW5pZW5jZSBmdW5jdGlvbnMuCi0jIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvcHJpbnRlci9fX2luaXRfXy5weSBiL3NoYXJlL2dkYi9weXRob24vZ2RiL3ByaW50ZXIvX19pbml0X18ucHkKaW5kZXggMTNhMDYzNC4uYThhYzhiYyAxMDA2NDQKLS0tIGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvcHJpbnRlci9fX2luaXRfXy5weQorKysgYi9zaGFyZS9nZGIvcHl0aG9uL2dkYi9wcmludGVyL19faW5pdF9fLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9weXRob24vZ2RiL3ByaW50ZXIvYm91bmRfcmVnaXN0ZXJzLnB5IGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvcHJpbnRlci9ib3VuZF9yZWdpc3RlcnMucHkKaW5kZXggZTM3MmU1OS4uOWZmOTRhYSAxMDA2NDQKLS0tIGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvcHJpbnRlci9ib3VuZF9yZWdpc3RlcnMucHkKKysrIGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvcHJpbnRlci9ib3VuZF9yZWdpc3RlcnMucHkKQEAgLTEsNSArMSw1IEBACiAjIFByZXR0eS1wcmludGVycyBmb3IgYm91bmRzIHJlZ2lzdGVycy4KLSMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvcHl0aG9uL2dkYi9wcmludGluZy5weSBiL3NoYXJlL2dkYi9weXRob24vZ2RiL3ByaW50aW5nLnB5CmluZGV4IGZmMjBmNzEuLjYzYzNhZWIgMTAwNjQ0Ci0tLSBhL3NoYXJlL2dkYi9weXRob24vZ2RiL3ByaW50aW5nLnB5CisrKyBiL3NoYXJlL2dkYi9weXRob24vZ2RiL3ByaW50aW5nLnB5CkBAIC0xLDUgKzEsNSBAQAogIyBQcmV0dHktcHJpbnRlciB1dGlsaXRpZXMuCi0jIENvcHlyaWdodCAoQykgMjAxMC0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjM5LDcgKzIzOSw3IEBACiAgICAgICAgIGlmIG5vdCBhbnlfZm91bmQgb3IgdiAhPSAwOgogICAgICAgICAgICAgIyBMZWZ0b3ZlciB2YWx1ZS4KICAgICAgICAgICAgIGZsYWdfbGlzdC5hcHBlbmQoJzx1bmtub3duOiAweCV4PicgJSB2KQotICAgICAgICByZXR1cm4gIjB4JXggWyVzXSIgJSAoc2VsZi52YWwsICIgfCAiLmpvaW4oZmxhZ19saXN0KSkKKyAgICAgICAgcmV0dXJuICIweCV4IFslc10iICUgKGludChzZWxmLnZhbCksICIgfCAiLmpvaW4oZmxhZ19saXN0KSkKIAogY2xhc3MgRmxhZ0VudW1lcmF0aW9uUHJpbnRlcihQcmV0dHlQcmludGVyKToKICAgICAiIiJBIHByZXR0eS1wcmludGVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHByaW50IGEgZmxhZy1zdHlsZSBlbnVtZXJhdGlvbi4KQEAgLTI2Myw3ICsyNjMsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuZW51bWVyYXRvcnMuYXBwZW5kKChmaWVsZC5uYW1lLCBmaWVsZC5lbnVtdmFsKSkKICAgICAgICAgICAgICMgU29ydGluZyB0aGUgZW51bWVyYXRvcnMgYnkgdmFsdWUgdXN1YWxseSBkb2VzIHRoZSByaWdodAogICAgICAgICAgICAgIyB0aGluZy4KLSAgICAgICAgICAgIHNlbGYuZW51bWVyYXRvcnMuc29ydChrZXkgPSBsYW1iZGEgeDogeC5lbnVtdmFsKQorICAgICAgICAgICAgc2VsZi5lbnVtZXJhdG9ycy5zb3J0KGtleSA9IGxhbWJkYSB4OiB4WzFdKQogCiAgICAgICAgIGlmIHNlbGYuZW5hYmxlZDoKICAgICAgICAgICAgIHJldHVybiBfRW51bUluc3RhbmNlKHNlbGYuZW51bWVyYXRvcnMsIHZhbCkKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9weXRob24vZ2RiL3Byb21wdC5weSBiL3NoYXJlL2dkYi9weXRob24vZ2RiL3Byb21wdC5weQppbmRleCA5ZGUxNDMzLi4xNWY0YTFkIDEwMDY0NAotLS0gYS9zaGFyZS9nZGIvcHl0aG9uL2dkYi9wcm9tcHQucHkKKysrIGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvcHJvbXB0LnB5CkBAIC0xLDUgKzEsNSBAQAogIyBFeHRlbmRlZCBwcm9tcHQgdXRpbGl0aWVzLgotIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9weXRob24vZ2RiL3R5cGVzLnB5IGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvdHlwZXMucHkKaW5kZXggNWM5ZjVhOS4uYzIyZThhOSAxMDA2NDQKLS0tIGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvdHlwZXMucHkKKysrIGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvdHlwZXMucHkKQEAgLTEsNSArMSw1IEBACiAjIFR5cGUgdXRpbGl0aWVzLgotIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9weXRob24vZ2RiL3Vud2luZGVyLnB5IGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvdW53aW5kZXIucHkKaW5kZXggMzU1NGU5Yy4uMTRiMjc1OCAxMDA2NDQKLS0tIGEvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvdW53aW5kZXIucHkKKysrIGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIvdW53aW5kZXIucHkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9weXRob24vZ2RiL3htZXRob2QucHkgYi9zaGFyZS9nZGIvcHl0aG9uL2dkYi94bWV0aG9kLnB5CmluZGV4IDZhY2MyM2MuLmFhMGNmMGEgMTAwNjQ0Ci0tLSBhL3NoYXJlL2dkYi9weXRob24vZ2RiL3htZXRob2QucHkKKysrIGIvc2hhcmUvZ2RiL3B5dGhvbi9nZGIveG1ldGhvZC5weQpAQCAtMSw1ICsxLDUgQEAKICMgUHl0aG9uIHNpZGUgb2YgdGhlIHN1cHBvcnQgZm9yIHhtZXRob2RzLgotIyBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9zeXNjYWxscy9hYXJjaDY0LWxpbnV4LnhtbCBiL3NoYXJlL2dkYi9zeXNjYWxscy9hYXJjaDY0LWxpbnV4LnhtbAppbmRleCA1MzdkNzg5Li5lMWZhMGRhIDEwMDY0NAotLS0gYS9zaGFyZS9nZGIvc3lzY2FsbHMvYWFyY2g2NC1saW51eC54bWwKKysrIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL2FhcmNoNjQtbGludXgueG1sCkBAIC0xLDUgKzEsNSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKICAgICAgYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvc3lzY2FsbHMvYW1kNjQtbGludXgueG1sIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL2FtZDY0LWxpbnV4LnhtbAppbmRleCAxNzFjYTkyLi4wNzRiNTg3IDEwMDY0NAotLS0gYS9zaGFyZS9nZGIvc3lzY2FsbHMvYW1kNjQtbGludXgueG1sCisrKyBiL3NoYXJlL2dkYi9zeXNjYWxscy9hbWQ2NC1saW51eC54bWwKQEAgLTEsNSArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis8IS0tIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCiAgICAgIGFyZSBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodApkaWZmIC0tZ2l0IGEvc2hhcmUvZ2RiL3N5c2NhbGxzL2FybS1saW51eC54bWwgYi9zaGFyZS9nZGIvc3lzY2FsbHMvYXJtLWxpbnV4LnhtbAppbmRleCA1ZjdhMzVhLi5jMGE0NTZiIDEwMDY0NAotLS0gYS9zaGFyZS9nZGIvc3lzY2FsbHMvYXJtLWxpbnV4LnhtbAorKysgYi9zaGFyZS9nZGIvc3lzY2FsbHMvYXJtLWxpbnV4LnhtbApAQCAtMSw1ICsxLDUgQEAKIDw/eG1sIHZlcnNpb249IjEuMCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKICAgICAgYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvc3lzY2FsbHMvZ2RiLXN5c2NhbGxzLmR0ZCBiL3NoYXJlL2dkYi9zeXNjYWxscy9nZGItc3lzY2FsbHMuZHRkCmluZGV4IGIwNTk3NmUuLjNkZWRhMTIgMTAwNjQ0Ci0tLSBhL3NoYXJlL2dkYi9zeXNjYWxscy9nZGItc3lzY2FsbHMuZHRkCisrKyBiL3NoYXJlL2dkYi9zeXNjYWxscy9nZGItc3lzY2FsbHMuZHRkCkBAIC0xLDQgKzEsNCBAQAotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKICAgICAgYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvc3lzY2FsbHMvaTM4Ni1saW51eC54bWwgYi9zaGFyZS9nZGIvc3lzY2FsbHMvaTM4Ni1saW51eC54bWwKaW5kZXggNzEyMWFmNS4uYWFiMDNlYyAxMDA2NDQKLS0tIGEvc2hhcmUvZ2RiL3N5c2NhbGxzL2kzODYtbGludXgueG1sCisrKyBiL3NoYXJlL2dkYi9zeXNjYWxscy9pMzg2LWxpbnV4LnhtbApAQCAtMSw1ICsxLDUgQEAKIDw/eG1sIHZlcnNpb249IjEuMCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKICAgICAgYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvc3lzY2FsbHMvbWlwcy1uMzItbGludXgueG1sIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL21pcHMtbjMyLWxpbnV4LnhtbAppbmRleCA1Y2YzM2JmLi43MzE4YWUxIDEwMDY0NAotLS0gYS9zaGFyZS9nZGIvc3lzY2FsbHMvbWlwcy1uMzItbGludXgueG1sCisrKyBiL3NoYXJlL2dkYi9zeXNjYWxscy9taXBzLW4zMi1saW51eC54bWwKQEAgLTEsNSArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDExLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis8IS0tIENvcHlyaWdodCAoQykgMjAxMS0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCiAgICAgIGFyZSBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodApkaWZmIC0tZ2l0IGEvc2hhcmUvZ2RiL3N5c2NhbGxzL21pcHMtbjY0LWxpbnV4LnhtbCBiL3NoYXJlL2dkYi9zeXNjYWxscy9taXBzLW42NC1saW51eC54bWwKaW5kZXggM2M4OWMyYS4uYjQ1ZjRiOSAxMDA2NDQKLS0tIGEvc2hhcmUvZ2RiL3N5c2NhbGxzL21pcHMtbjY0LWxpbnV4LnhtbAorKysgYi9zaGFyZS9nZGIvc3lzY2FsbHMvbWlwcy1uNjQtbGludXgueG1sCkBAIC0xLDUgKzEsNSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAogICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9zeXNjYWxscy9taXBzLW8zMi1saW51eC54bWwgYi9zaGFyZS9nZGIvc3lzY2FsbHMvbWlwcy1vMzItbGludXgueG1sCmluZGV4IGVmOGU0MjEuLjk0ZmEzZjcgMTAwNjQ0Ci0tLSBhL3NoYXJlL2dkYi9zeXNjYWxscy9taXBzLW8zMi1saW51eC54bWwKKysrIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL21pcHMtbzMyLWxpbnV4LnhtbApAQCAtMSw1ICsxLDUgQEAKIDw/eG1sIHZlcnNpb249IjEuMCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDExLTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKICAgICAgYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvc3lzY2FsbHMvcHBjLWxpbnV4LnhtbCBiL3NoYXJlL2dkYi9zeXNjYWxscy9wcGMtbGludXgueG1sCmluZGV4IGNlMmQzNGYuLjcxZTdjZDYgMTAwNjQ0Ci0tLSBhL3NoYXJlL2dkYi9zeXNjYWxscy9wcGMtbGludXgueG1sCisrKyBiL3NoYXJlL2dkYi9zeXNjYWxscy9wcGMtbGludXgueG1sCkBAIC0xLDUgKzEsNSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAwOS0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAogICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9zeXNjYWxscy9wcGM2NC1saW51eC54bWwgYi9zaGFyZS9nZGIvc3lzY2FsbHMvcHBjNjQtbGludXgueG1sCmluZGV4IGE0NTYzMTcuLjY5MDZlN2UgMTAwNjQ0Ci0tLSBhL3NoYXJlL2dkYi9zeXNjYWxscy9wcGM2NC1saW51eC54bWwKKysrIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL3BwYzY0LWxpbnV4LnhtbApAQCAtMSw1ICsxLDUgQEAKIDw/eG1sIHZlcnNpb249IjEuMCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKICAgICAgYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvc3lzY2FsbHMvczM5MC1saW51eC54bWwgYi9zaGFyZS9nZGIvc3lzY2FsbHMvczM5MC1saW51eC54bWwKaW5kZXggYTQ1MDExZS4uNmMwNTkzZiAxMDA2NDQKLS0tIGEvc2hhcmUvZ2RiL3N5c2NhbGxzL3MzOTAtbGludXgueG1sCisrKyBiL3NoYXJlL2dkYi9zeXNjYWxscy9zMzkwLWxpbnV4LnhtbApAQCAtMSw1ICsxLDUgQEAKIDw/eG1sIHZlcnNpb249IjEuMCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgICAgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKICAgICAgYXJlIHBlcm1pdHRlZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvc3lzY2FsbHMvczM5MHgtbGludXgueG1sIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL3MzOTB4LWxpbnV4LnhtbAppbmRleCBmMmMwNDZjLi41NjNlNTIxIDEwMDY0NAotLS0gYS9zaGFyZS9nZGIvc3lzY2FsbHMvczM5MHgtbGludXgueG1sCisrKyBiL3NoYXJlL2dkYi9zeXNjYWxscy9zMzkweC1saW51eC54bWwKQEAgLTEsNSArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis8IS0tIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAgICAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCiAgICAgIGFyZSBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodApkaWZmIC0tZ2l0IGEvc2hhcmUvZ2RiL3N5c2NhbGxzL3NwYXJjLWxpbnV4LnhtbCBiL3NoYXJlL2dkYi9zeXNjYWxscy9zcGFyYy1saW51eC54bWwKaW5kZXggYTcxMWU3Mi4uNzAxMTVhYiAxMDA2NDQKLS0tIGEvc2hhcmUvZ2RiL3N5c2NhbGxzL3NwYXJjLWxpbnV4LnhtbAorKysgYi9zaGFyZS9nZGIvc3lzY2FsbHMvc3BhcmMtbGludXgueG1sCkBAIC0xLDUgKzEsNSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAxMC0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAogICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9zeXNjYWxscy9zcGFyYzY0LWxpbnV4LnhtbCBiL3NoYXJlL2dkYi9zeXNjYWxscy9zcGFyYzY0LWxpbnV4LnhtbAppbmRleCBjN2MxNDlkLi43ZGQ2MmI0IDEwMDY0NAotLS0gYS9zaGFyZS9nZGIvc3lzY2FsbHMvc3BhcmM2NC1saW51eC54bWwKKysrIGIvc2hhcmUvZ2RiL3N5c2NhbGxzL3NwYXJjNjQtbGludXgueG1sCkBAIC0xLDUgKzEsNSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAxMC0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAogICAgICBhcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKZGlmZiAtLWdpdCBhL3NoYXJlL2dkYi9zeXN0ZW0tZ2RiaW5pdC9lbGlub3MucHkgYi9zaGFyZS9nZGIvc3lzdGVtLWdkYmluaXQvZWxpbm9zLnB5CmluZGV4IDU5NDRhYmMuLjc5NTMwY2MgMTAwNjQ0Ci0tLSBhL3NoYXJlL2dkYi9zeXN0ZW0tZ2RiaW5pdC9lbGlub3MucHkKKysrIGIvc2hhcmUvZ2RiL3N5c3RlbS1nZGJpbml0L2VsaW5vcy5weQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9zaGFyZS9nZGIvc3lzdGVtLWdkYmluaXQvd3JzLWxpbnV4LnB5IGIvc2hhcmUvZ2RiL3N5c3RlbS1nZGJpbml0L3dycy1saW51eC5weQppbmRleCBiMzQ1Mzg5Li41YzczZGY0IDEwMDY0NAotLS0gYS9zaGFyZS9nZGIvc3lzdGVtLWdkYmluaXQvd3JzLWxpbnV4LnB5CisrKyBiL3NoYXJlL2dkYi9zeXN0ZW0tZ2RiaW5pdC93cnMtbGludXgucHkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvc2hhcmUvbWFuL21hbjEvcHl0aG9uLjEgYi9zaGFyZS9tYW4vbWFuMS9weXRob24uMQpkZWxldGVkIGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggODIyZDYyZi4uMDAwMDAwMAotLS0gYS9zaGFyZS9tYW4vbWFuMS9weXRob24uMQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXB5dGhvbjIuMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NoYXJlL21hbi9tYW4xL3B5dGhvbi4xIGIvc2hhcmUvbWFuL21hbjEvcHl0aG9uLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzllZGJjYQotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlL21hbi9tYW4xL3B5dGhvbi4xCkBAIC0wLDAgKzEsNDczIEBACisuVEggUFlUSE9OICIxIiAiJERhdGUkIgorCisuXCIgVG8gdmlldyB0aGlzIGZpbGUgd2hpbGUgZWRpdGluZywgcnVuIGl0IHRocm91Z2ggZ3JvZmY6CisuXCIgICBncm9mZiAtVGFzY2lpIC1tYW4gcHl0aG9uLm1hbiB8IGxlc3MKKworLlNIIE5BTUUKK3B5dGhvbiBcLSBhbiBpbnRlcnByZXRlZCwgaW50ZXJhY3RpdmUsIG9iamVjdC1vcmllbnRlZCBwcm9ncmFtbWluZyBsYW5ndWFnZQorLlNIIFNZTk9QU0lTCisuQiBweXRob24KK1sKKy5CIFwtQgorXQorWworLkIgXC1kCitdCitbCisuQiBcLUUKK10KK1sKKy5CIFwtaAorXQorWworLkIgXC1pCitdCitbCisuQiBcLW0gCisuSSBtb2R1bGUtbmFtZQorXQorLmJyCisgICAgICAgWworLkIgXC1PCitdCitbCisuQiBcLU9PCitdCitbCisuQiBcLVIKK10KK1sKKy5CIC1RCisuSSBhcmd1bWVudAorXQorWworLkIgXC1zCitdCitbCisuQiBcLVMKK10KK1sKKy5CIFwtdAorXQorWworLkIgXC11CitdCisuYnIKKyAgICAgICBbCisuQiBcLXYKK10KK1sKKy5CIFwtVgorXQorWworLkIgXC1XCisuSSBhcmd1bWVudAorXQorWworLkIgXC14CitdCitbCisuQiBcLTMKK10KK1sKKy5CIFwtPworXQorLmJyCisgICAgICAgWworLkIgXC1jCisuSSBjb21tYW5kCit8CisuSSBzY3JpcHQKK3wKK1wtCitdCitbCisuSSBhcmd1bWVudHMKK10KKy5TSCBERVNDUklQVElPTgorUHl0aG9uIGlzIGFuIGludGVycHJldGVkLCBpbnRlcmFjdGl2ZSwgb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nCitsYW5ndWFnZSB0aGF0IGNvbWJpbmVzIHJlbWFya2FibGUgcG93ZXIgd2l0aCB2ZXJ5IGNsZWFyIHN5bnRheC4KK0ZvciBhbiBpbnRyb2R1Y3Rpb24gdG8gcHJvZ3JhbW1pbmcgaW4gUHl0aG9uIHlvdSBhcmUgcmVmZXJyZWQgdG8gdGhlCitQeXRob24gVHV0b3JpYWwuCitUaGUgUHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlIGRvY3VtZW50cyBidWlsdC1pbiBhbmQgc3RhbmRhcmQgdHlwZXMsCitjb25zdGFudHMsIGZ1bmN0aW9ucyBhbmQgbW9kdWxlcy4KK0ZpbmFsbHksIHRoZSBQeXRob24gUmVmZXJlbmNlIE1hbnVhbCBkZXNjcmliZXMgdGhlIHN5bnRheCBhbmQKK3NlbWFudGljcyBvZiB0aGUgY29yZSBsYW5ndWFnZSBpbiAocGVyaGFwcyB0b28pIG11Y2ggZGV0YWlsLgorKFRoZXNlIGRvY3VtZW50cyBtYXkgYmUgbG9jYXRlZCB2aWEgdGhlCisuQiAiSU5URVJORVQgUkVTT1VSQ0VTIgorYmVsb3c7IHRoZXkgbWF5IGJlIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbSBhcyB3ZWxsLikKKy5QUAorUHl0aG9uJ3MgYmFzaWMgcG93ZXIgY2FuIGJlIGV4dGVuZGVkIHdpdGggeW91ciBvd24gbW9kdWxlcyB3cml0dGVuIGluCitDIG9yIEMrKy4KK09uIG1vc3Qgc3lzdGVtcyBzdWNoIG1vZHVsZXMgbWF5IGJlIGR5bmFtaWNhbGx5IGxvYWRlZC4KK1B5dGhvbiBpcyBhbHNvIGFkYXB0YWJsZSBhcyBhbiBleHRlbnNpb24gbGFuZ3VhZ2UgZm9yIGV4aXN0aW5nCithcHBsaWNhdGlvbnMuCitTZWUgdGhlIGludGVybmFsIGRvY3VtZW50YXRpb24gZm9yIGhpbnRzLgorLlBQCitEb2N1bWVudGF0aW9uIGZvciBpbnN0YWxsZWQgUHl0aG9uIG1vZHVsZXMgYW5kIHBhY2thZ2VzIGNhbiBiZSAKK3ZpZXdlZCBieSBydW5uaW5nIHRoZSAKKy5CIHB5ZG9jCitwcm9ncmFtLiAgCisuU0ggQ09NTUFORCBMSU5FIE9QVElPTlMKKy5UUAorLkIgXC1CCitEb24ndCB3cml0ZQorLkkgLnB5W2NvXQorZmlsZXMgb24gaW1wb3J0LiBTZWUgYWxzbyBQWVRIT05ET05UV1JJVEVCWVRFQ09ERS4KKy5UUAorLkJJICJcLWMgIiBjb21tYW5kCitTcGVjaWZ5IHRoZSBjb21tYW5kIHRvIGV4ZWN1dGUgKHNlZSBuZXh0IHNlY3Rpb24pLgorVGhpcyB0ZXJtaW5hdGVzIHRoZSBvcHRpb24gbGlzdCAoZm9sbG93aW5nIG9wdGlvbnMgYXJlIHBhc3NlZCBhcworYXJndW1lbnRzIHRvIHRoZSBjb21tYW5kKS4KKy5UUAorLkIgXC1kCitUdXJuIG9uIHBhcnNlciBkZWJ1Z2dpbmcgb3V0cHV0IChmb3Igd2l6YXJkcyBvbmx5LCBkZXBlbmRpbmcgb24KK2NvbXBpbGF0aW9uIG9wdGlvbnMpLgorLlRQCisuQiBcLUUKK0lnbm9yZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbGlrZSBQWVRIT05QQVRIIGFuZCBQWVRIT05IT01FIHRoYXQgbW9kaWZ5Cit0aGUgYmVoYXZpb3Igb2YgdGhlIGludGVycHJldGVyLgorLlRQCisuQiBcLWggIiwgIiBcLT8gIiwgIlwtXC1oZWxwCitQcmludHMgdGhlIHVzYWdlIGZvciB0aGUgaW50ZXJwcmV0ZXIgZXhlY3V0YWJsZSBhbmQgZXhpdHMuCisuVFAKKy5CIFwtaQorV2hlbiBhIHNjcmlwdCBpcyBwYXNzZWQgYXMgZmlyc3QgYXJndW1lbnQgb3IgdGhlIFxmQlwtY1xmUCBvcHRpb24gaXMKK3VzZWQsIGVudGVyIGludGVyYWN0aXZlIG1vZGUgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBzY3JpcHQgb3IgdGhlCitjb21tYW5kLiAgSXQgZG9lcyBub3QgcmVhZCB0aGUgJFBZVEhPTlNUQVJUVVAgZmlsZS4gIFRoaXMgY2FuIGJlCit1c2VmdWwgdG8gaW5zcGVjdCBnbG9iYWwgdmFyaWFibGVzIG9yIGEgc3RhY2sgdHJhY2Ugd2hlbiBhIHNjcmlwdAorcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKy5UUAorLkJJICJcLW0gIiBtb2R1bGUtbmFtZQorU2VhcmNoZXMgCisuSSBzeXMucGF0aCAKK2ZvciB0aGUgbmFtZWQgbW9kdWxlIGFuZCBydW5zIHRoZSBjb3JyZXNwb25kaW5nIAorLkkgLnB5IAorZmlsZSBhcyBhIHNjcmlwdC4KKy5UUAorLkIgXC1PCitUdXJuIG9uIGJhc2ljIG9wdGltaXphdGlvbnMuICBUaGlzIGNoYW5nZXMgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiBmb3IKK2NvbXBpbGVkIChieXRlY29kZSkgZmlsZXMgZnJvbQorLkkgLnB5YwordG8gXGZJLnB5b1xmUC4gIEdpdmVuIHR3aWNlLCBjYXVzZXMgZG9jc3RyaW5ncyB0byBiZSBkaXNjYXJkZWQuCisuVFAKKy5CIFwtT08KK0Rpc2NhcmQgZG9jc3RyaW5ncyBpbiBhZGRpdGlvbiB0byB0aGUgXGZCLU9cZlAgb3B0aW1pemF0aW9ucy4KKy5UUAorLkIgXC1SCitUdXJuIG9uICJoYXNoIHJhbmRvbWl6YXRpb24iLCBzbyB0aGF0IHRoZSBoYXNoKCkgdmFsdWVzIG9mIHN0ciwgYnl0ZXMgYW5kCitkYXRldGltZSBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcHNldWRvLXJhbmRvbSB2YWx1ZS4KK0FsdGhvdWdoIHRoZXkgcmVtYWluIGNvbnN0YW50IHdpdGhpbiBhbiBpbmRpdmlkdWFsIFB5dGhvbiBwcm9jZXNzLCB0aGV5IGFyZQorbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2YgUHl0aG9uLgorLklQCitUaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGEgZGVuaWFsIG9mIHNlcnZpY2UKK2NhdXNlZCBieSBjYXJlZnVsbHktY2hvc2VuIGlucHV0cyB0aGF0IGV4cGxvaXQgdGhlIHdvcnN0IGNhc2UgcGVyZm9ybWFuY2UKK29mIGEgZGljdCBjb25zdHJ1Y3Rpb24sIE8obl4yKSBjb21wbGV4aXR5LiAgU2VlCitodHRwOi8vd3d3Lm9jZXJ0Lm9yZy9hZHZpc29yaWVzL29jZXJ0LTIwMTEtMDAzLmh0bWwKK2ZvciBkZXRhaWxzLgorLlRQCisuQkkgIlwtUSAiIGFyZ3VtZW50CitEaXZpc2lvbiBjb250cm9sOyBzZWUgUEVQIDIzOC4gIFRoZSBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiAib2xkIiAodGhlCitkZWZhdWx0LCBpbnQvaW50IGFuZCBsb25nL2xvbmcgcmV0dXJuIGFuIGludCBvciBsb25nKSwgIm5ldyIgKG5ldworZGl2aXNpb24gc2VtYW50aWNzLCBpLmUuIGludC9pbnQgYW5kIGxvbmcvbG9uZyByZXR1cm5zIGEgZmxvYXQpLAorIndhcm4iIChvbGQgZGl2aXNpb24gc2VtYW50aWNzIHdpdGggYSB3YXJuaW5nIGZvciBpbnQvaW50IGFuZAorbG9uZy9sb25nKSwgb3IgIndhcm5hbGwiIChvbGQgZGl2aXNpb24gc2VtYW50aWNzIHdpdGggYSB3YXJuaW5nIGZvcgorYWxsIHVzZSBvZiB0aGUgZGl2aXNpb24gb3BlcmF0b3IpLiAgRm9yIGEgdXNlIG9mICJ3YXJuYWxsIiwgc2VlIHRoZQorVG9vbHMvc2NyaXB0cy9maXhkaXYucHkgc2NyaXB0LgorLlRQCisuQiBcLXMKK0Rvbid0IGFkZCB1c2VyIHNpdGUgZGlyZWN0b3J5IHRvIHN5cy5wYXRoLgorLlRQCisuQiBcLVMKK0Rpc2FibGUgdGhlIGltcG9ydCBvZiB0aGUgbW9kdWxlCisuSSBzaXRlCithbmQgdGhlIHNpdGUtZGVwZW5kZW50IG1hbmlwdWxhdGlvbnMgb2YKKy5JIHN5cy5wYXRoCit0aGF0IGl0IGVudGFpbHMuCisuVFAKKy5CIFwtdAorSXNzdWUgYSB3YXJuaW5nIHdoZW4gYSBzb3VyY2UgZmlsZSBtaXhlcyB0YWJzIGFuZCBzcGFjZXMgZm9yCitpbmRlbnRhdGlvbiBpbiBhIHdheSB0aGF0IG1ha2VzIGl0IGRlcGVuZCBvbiB0aGUgd29ydGggb2YgYSB0YWIKK2V4cHJlc3NlZCBpbiBzcGFjZXMuICBJc3N1ZSBhbiBlcnJvciB3aGVuIHRoZSBvcHRpb24gaXMgZ2l2ZW4gdHdpY2UuCisuVFAKKy5CIFwtdQorRm9yY2Ugc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIHRvIGJlIHRvdGFsbHkgdW5idWZmZXJlZC4gIE9uIHN5c3RlbXMKK3doZXJlIGl0IG1hdHRlcnMsIGFsc28gcHV0IHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyciBpbiBiaW5hcnkgbW9kZS4KK05vdGUgdGhhdCB0aGVyZSBpcyBpbnRlcm5hbCBidWZmZXJpbmcgaW4geHJlYWRsaW5lcygpLCByZWFkbGluZXMoKSBhbmQKK2ZpbGUtb2JqZWN0IGl0ZXJhdG9ycyAoImZvciBsaW5lIGluIHN5cy5zdGRpbiIpIHdoaWNoIGlzIG5vdAoraW5mbHVlbmNlZCBieSB0aGlzIG9wdGlvbi4gIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHlvdSB3aWxsIHdhbnQgdG8gdXNlCisic3lzLnN0ZGluLnJlYWRsaW5lKCkiIGluc2lkZSBhICJ3aGlsZSAxOiIgbG9vcC4KKy5UUAorLkIgXC12CitQcmludCBhIG1lc3NhZ2UgZWFjaCB0aW1lIGEgbW9kdWxlIGlzIGluaXRpYWxpemVkLCBzaG93aW5nIHRoZSBwbGFjZQorKGZpbGVuYW1lIG9yIGJ1aWx0LWluIG1vZHVsZSkgZnJvbSB3aGljaCBpdCBpcyBsb2FkZWQuICBXaGVuIGdpdmVuCit0d2ljZSwgcHJpbnQgYSBtZXNzYWdlIGZvciBlYWNoIGZpbGUgdGhhdCBpcyBjaGVja2VkIGZvciB3aGVuIAorc2VhcmNoaW5nIGZvciBhIG1vZHVsZS4gIEFsc28gcHJvdmlkZXMgaW5mb3JtYXRpb24gb24gbW9kdWxlIGNsZWFudXAKK2F0IGV4aXQuCisuVFAKKy5CIFwtViAiLCAiIFwtXC12ZXJzaW9uCitQcmludHMgdGhlIFB5dGhvbiB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdHMuCisuVFAKKy5CSSAiXC1XICIgYXJndW1lbnQKK1dhcm5pbmcgY29udHJvbC4gIFB5dGhvbiBzb21ldGltZXMgcHJpbnRzIHdhcm5pbmcgbWVzc2FnZSB0bworLklSIHN5cy5zdGRlcnIgLgorQSB0eXBpY2FsIHdhcm5pbmcgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtOgorLklCIGZpbGUgIjoiIGxpbmUgIjogIiBjYXRlZ29yeSAiOiAiIG1lc3NhZ2UuCitCeSBkZWZhdWx0LCBlYWNoIHdhcm5pbmcgaXMgcHJpbnRlZCBvbmNlIGZvciBlYWNoIHNvdXJjZSBsaW5lIHdoZXJlIGl0CitvY2N1cnMuICBUaGlzIG9wdGlvbiBjb250cm9scyBob3cgb2Z0ZW4gd2FybmluZ3MgYXJlIHByaW50ZWQuCitNdWx0aXBsZQorLkIgXC1XCitvcHRpb25zIG1heSBiZSBnaXZlbjsgd2hlbiBhIHdhcm5pbmcgbWF0Y2hlcyBtb3JlIHRoYW4gb25lCitvcHRpb24sIHRoZSBhY3Rpb24gZm9yIHRoZSBsYXN0IG1hdGNoaW5nIG9wdGlvbiBpcyBwZXJmb3JtZWQuCitJbnZhbGlkCisuQiBcLVcKK29wdGlvbnMgYXJlIGlnbm9yZWQgKGEgd2FybmluZyBtZXNzYWdlIGlzIHByaW50ZWQgYWJvdXQgaW52YWxpZAorb3B0aW9ucyB3aGVuIHRoZSBmaXJzdCB3YXJuaW5nIGlzIGlzc3VlZCkuICBXYXJuaW5ncyBjYW4gYWxzbyBiZQorY29udHJvbGxlZCBmcm9tIHdpdGhpbiBhIFB5dGhvbiBwcm9ncmFtIHVzaW5nIHRoZQorLkkgd2FybmluZ3MKK21vZHVsZS4KKworVGhlIHNpbXBsZXN0IGZvcm0gb2YKKy5JIGFyZ3VtZW50CitpcyBvbmUgb2YgdGhlIGZvbGxvd2luZworLkkgYWN0aW9uCitzdHJpbmdzIChvciBhIHVuaXF1ZSBhYmJyZXZpYXRpb24pOgorLkIgaWdub3JlCit0byBpZ25vcmUgYWxsIHdhcm5pbmdzOworLkIgZGVmYXVsdAordG8gZXhwbGljaXRseSByZXF1ZXN0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIChwcmludGluZyBlYWNoIHdhcm5pbmcgb25jZQorcGVyIHNvdXJjZSBsaW5lKTsKKy5CIGFsbAordG8gcHJpbnQgYSB3YXJuaW5nIGVhY2ggdGltZSBpdCBvY2N1cnMgKHRoaXMgbWF5IGdlbmVyYXRlIG1hbnkKK21lc3NhZ2VzIGlmIGEgd2FybmluZyBpcyB0cmlnZ2VyZWQgcmVwZWF0ZWRseSBmb3IgdGhlIHNhbWUgc291cmNlCitsaW5lLCBzdWNoIGFzIGluc2lkZSBhIGxvb3ApOworLkIgbW9kdWxlCit0byBwcmludCBlYWNoIHdhcm5pbmcgb25seSB0aGUgZmlyc3QgdGltZSBpdCBvY2N1cnMgaW4gZWFjaAorbW9kdWxlOworLkIgb25jZQordG8gcHJpbnQgZWFjaCB3YXJuaW5nIG9ubHkgdGhlIGZpcnN0IHRpbWUgaXQgb2NjdXJzIGluIHRoZSBwcm9ncmFtOyBvcgorLkIgZXJyb3IKK3RvIHJhaXNlIGFuIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIHByaW50aW5nIGEgd2FybmluZyBtZXNzYWdlLgorCitUaGUgZnVsbCBmb3JtIG9mCisuSSBhcmd1bWVudAoraXMKKy5JQiBhY3Rpb24gOiBtZXNzYWdlIDogY2F0ZWdvcnkgOiBtb2R1bGUgOiBsaW5lLgorSGVyZSwKKy5JIGFjdGlvbgoraXMgYXMgZXhwbGFpbmVkIGFib3ZlIGJ1dCBvbmx5IGFwcGxpZXMgdG8gbWVzc2FnZXMgdGhhdCBtYXRjaCB0aGUKK3JlbWFpbmluZyBmaWVsZHMuICBFbXB0eSBmaWVsZHMgbWF0Y2ggYWxsIHZhbHVlczsgdHJhaWxpbmcgZW1wdHkKK2ZpZWxkcyBtYXkgYmUgb21pdHRlZC4gIFRoZQorLkkgbWVzc2FnZQorZmllbGQgbWF0Y2hlcyB0aGUgc3RhcnQgb2YgdGhlIHdhcm5pbmcgbWVzc2FnZSBwcmludGVkOyB0aGlzIG1hdGNoIGlzCitjYXNlLWluc2Vuc2l0aXZlLiAgVGhlCisuSSBjYXRlZ29yeQorZmllbGQgbWF0Y2hlcyB0aGUgd2FybmluZyBjYXRlZ29yeS4gIFRoaXMgbXVzdCBiZSBhIGNsYXNzIG5hbWU7IHRoZQorbWF0Y2ggdGVzdCB3aGV0aGVyIHRoZSBhY3R1YWwgd2FybmluZyBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSBpcyBhCitzdWJjbGFzcyBvZiB0aGUgc3BlY2lmaWVkIHdhcm5pbmcgY2F0ZWdvcnkuICBUaGUgZnVsbCBjbGFzcyBuYW1lIG11c3QKK2JlIGdpdmVuLiAgVGhlCisuSSBtb2R1bGUKK2ZpZWxkIG1hdGNoZXMgdGhlIChmdWxseS1xdWFsaWZpZWQpIG1vZHVsZSBuYW1lOyB0aGlzIG1hdGNoIGlzCitjYXNlLXNlbnNpdGl2ZS4gIFRoZQorLkkgbGluZQorZmllbGQgbWF0Y2hlcyB0aGUgbGluZSBudW1iZXIsIHdoZXJlIHplcm8gbWF0Y2hlcyBhbGwgbGluZSBudW1iZXJzIGFuZAoraXMgdGh1cyBlcXVpdmFsZW50IHRvIGFuIG9taXR0ZWQgbGluZSBudW1iZXIuCisuVFAKKy5CIFwteAorU2tpcCB0aGUgZmlyc3QgbGluZSBvZiB0aGUgc291cmNlLiAgVGhpcyBpcyBpbnRlbmRlZCBmb3IgYSBET1MKK3NwZWNpZmljIGhhY2sgb25seS4gIFdhcm5pbmc6IHRoZSBsaW5lIG51bWJlcnMgaW4gZXJyb3IgbWVzc2FnZXMgd2lsbAorYmUgb2ZmIGJ5IG9uZSEKKy5UUAorLkIgXC0zCitXYXJuIGFib3V0IFB5dGhvbiAzLnggaW5jb21wYXRpYmlsaXRpZXMgdGhhdCAydG8zIGNhbm5vdCB0cml2aWFsbHkgZml4LgorLlNIIElOVEVSUFJFVEVSIElOVEVSRkFDRQorVGhlIGludGVycHJldGVyIGludGVyZmFjZSByZXNlbWJsZXMgdGhhdCBvZiB0aGUgVU5JWCBzaGVsbDogd2hlbgorY2FsbGVkIHdpdGggc3RhbmRhcmQgaW5wdXQgY29ubmVjdGVkIHRvIGEgdHR5IGRldmljZSwgaXQgcHJvbXB0cyBmb3IKK2NvbW1hbmRzIGFuZCBleGVjdXRlcyB0aGVtIHVudGlsIGFuIEVPRiBpcyByZWFkOyB3aGVuIGNhbGxlZCB3aXRoIGEKK2ZpbGUgbmFtZSBhcmd1bWVudCBvciB3aXRoIGEgZmlsZSBhcyBzdGFuZGFyZCBpbnB1dCwgaXQgcmVhZHMgYW5kCitleGVjdXRlcyBhCisuSSBzY3JpcHQKK2Zyb20gdGhhdCBmaWxlOword2hlbiBjYWxsZWQgd2l0aAorLkIgXC1jCisuSSBjb21tYW5kLAoraXQgZXhlY3V0ZXMgdGhlIFB5dGhvbiBzdGF0ZW1lbnQocykgZ2l2ZW4gYXMKKy5JIGNvbW1hbmQuCitIZXJlCisuSSBjb21tYW5kCittYXkgY29udGFpbiBtdWx0aXBsZSBzdGF0ZW1lbnRzIHNlcGFyYXRlZCBieSBuZXdsaW5lcy4KK0xlYWRpbmcgd2hpdGVzcGFjZSBpcyBzaWduaWZpY2FudCBpbiBQeXRob24gc3RhdGVtZW50cyEKK0luIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCB0aGUgZW50aXJlIGlucHV0IGlzIHBhcnNlZCBiZWZvcmUgaXQgaXMKK2V4ZWN1dGVkLgorLlBQCitJZiBhdmFpbGFibGUsIHRoZSBzY3JpcHQgbmFtZSBhbmQgYWRkaXRpb25hbCBhcmd1bWVudHMgdGhlcmVhZnRlciBhcmUKK3Bhc3NlZCB0byB0aGUgc2NyaXB0IGluIHRoZSBQeXRob24gdmFyaWFibGUKKy5JIHN5cy5hcmd2ICwKK3doaWNoIGlzIGEgbGlzdCBvZiBzdHJpbmdzICh5b3UgbXVzdCBmaXJzdAorLkkgaW1wb3J0IHN5cwordG8gYmUgYWJsZSB0byBhY2Nlc3MgaXQpLgorSWYgbm8gc2NyaXB0IG5hbWUgaXMgZ2l2ZW4sCisuSSBzeXMuYXJndlswXQoraXMgYW4gZW1wdHkgc3RyaW5nOyBpZgorLkIgXC1jCitpcyB1c2VkLAorLkkgc3lzLmFyZ3ZbMF0KK2NvbnRhaW5zIHRoZSBzdHJpbmcKKy5JICctYycuCitOb3RlIHRoYXQgb3B0aW9ucyBpbnRlcnByZXRlZCBieSB0aGUgUHl0aG9uIGludGVycHJldGVyIGl0c2VsZgorYXJlIG5vdCBwbGFjZWQgaW4KKy5JIHN5cy5hcmd2LgorLlBQCitJbiBpbnRlcmFjdGl2ZSBtb2RlLCB0aGUgcHJpbWFyeSBwcm9tcHQgaXMgYD4+Pic7IHRoZSBzZWNvbmQgcHJvbXB0Cisod2hpY2ggYXBwZWFycyB3aGVuIGEgY29tbWFuZCBpcyBub3QgY29tcGxldGUpIGlzIGAuLi4nLgorVGhlIHByb21wdHMgY2FuIGJlIGNoYW5nZWQgYnkgYXNzaWdubWVudCB0bworLkkgc3lzLnBzMQorb3IKKy5JIHN5cy5wczIuCitUaGUgaW50ZXJwcmV0ZXIgcXVpdHMgd2hlbiBpdCByZWFkcyBhbiBFT0YgYXQgYSBwcm9tcHQuCitXaGVuIGFuIHVuaGFuZGxlZCBleGNlcHRpb24gb2NjdXJzLCBhIHN0YWNrIHRyYWNlIGlzIHByaW50ZWQgYW5kCitjb250cm9sIHJldHVybnMgdG8gdGhlIHByaW1hcnkgcHJvbXB0OyBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgdGhlCitpbnRlcnByZXRlciBleGl0cyBhZnRlciBwcmludGluZyB0aGUgc3RhY2sgdHJhY2UuCitUaGUgaW50ZXJydXB0IHNpZ25hbCByYWlzZXMgdGhlCisuSSBLZXlib2FyZFwlSW50ZXJydXB0CitleGNlcHRpb247IG90aGVyIFVOSVggc2lnbmFscyBhcmUgbm90IGNhdWdodCAoZXhjZXB0IHRoYXQgU0lHUElQRSBpcworc29tZXRpbWVzIGlnbm9yZWQsIGluIGZhdm9yIG9mIHRoZQorLkkgSU9FcnJvcgorZXhjZXB0aW9uKS4gIEVycm9yIG1lc3NhZ2VzIGFyZSB3cml0dGVuIHRvIHN0ZGVyci4KKy5TSCBGSUxFUyBBTkQgRElSRUNUT1JJRVMKK1RoZXNlIGFyZSBzdWJqZWN0IHRvIGRpZmZlcmVuY2UgZGVwZW5kaW5nIG9uIGxvY2FsIGluc3RhbGxhdGlvbgorY29udmVudGlvbnM7ICR7cHJlZml4fSBhbmQgJHtleGVjX3ByZWZpeH0gYXJlIGluc3RhbGxhdGlvbi1kZXBlbmRlbnQKK2FuZCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgZm9yIEdOVSBzb2Z0d2FyZTsgdGhleSBtYXkgYmUgdGhlIHNhbWUuCitUaGUgZGVmYXVsdCBmb3IgYm90aCBpcyBcZkkvdXNyL2xvY2FsXGZQLgorLklQIFxmSSR7ZXhlY19wcmVmaXh9L2Jpbi9weXRob25cZlAKK1JlY29tbWVuZGVkIGxvY2F0aW9uIG9mIHRoZSBpbnRlcnByZXRlci4KKy5QUAorLkkgJHtwcmVmaXh9L2xpYi9weXRob248dmVyc2lvbj4KKy5icgorLkkgJHtleGVjX3ByZWZpeH0vbGliL3B5dGhvbjx2ZXJzaW9uPgorLlJTCitSZWNvbW1lbmRlZCBsb2NhdGlvbnMgb2YgdGhlIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgdGhlIHN0YW5kYXJkCittb2R1bGVzLgorLlJFCisuUFAKKy5JICR7cHJlZml4fS9pbmNsdWRlL3B5dGhvbjx2ZXJzaW9uPgorLmJyCisuSSAke2V4ZWNfcHJlZml4fS9pbmNsdWRlL3B5dGhvbjx2ZXJzaW9uPgorLlJTCitSZWNvbW1lbmRlZCBsb2NhdGlvbnMgb2YgdGhlIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgdGhlIGluY2x1ZGUgZmlsZXMKK25lZWRlZCBmb3IgZGV2ZWxvcGluZyBQeXRob24gZXh0ZW5zaW9ucyBhbmQgZW1iZWRkaW5nIHRoZQoraW50ZXJwcmV0ZXIuCisuUkUKKy5JUCBcZkl+Ly5weXRob25yYy5weVxmUAorVXNlci1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBmaWxlIGxvYWRlZCBieSB0aGUgXGZJdXNlclxmUCBtb2R1bGU7Citub3QgdXNlZCBieSBkZWZhdWx0IG9yIGJ5IG1vc3QgYXBwbGljYXRpb25zLgorLlNIIEVOVklST05NRU5UIFZBUklBQkxFUworLklQIFBZVEhPTkhPTUUKK0NoYW5nZSB0aGUgbG9jYXRpb24gb2YgdGhlIHN0YW5kYXJkIFB5dGhvbiBsaWJyYXJpZXMuICBCeSBkZWZhdWx0LCB0aGUKK2xpYnJhcmllcyBhcmUgc2VhcmNoZWQgaW4gJHtwcmVmaXh9L2xpYi9weXRob248dmVyc2lvbj4gYW5kCiske2V4ZWNfcHJlZml4fS9saWIvcHl0aG9uPHZlcnNpb24+LCB3aGVyZSAke3ByZWZpeH0gYW5kICR7ZXhlY19wcmVmaXh9CithcmUgaW5zdGFsbGF0aW9uLWRlcGVuZGVudCBkaXJlY3RvcmllcywgYm90aCBkZWZhdWx0aW5nIHRvCitcZkkvdXNyL2xvY2FsXGZQLiAgV2hlbiAkUFlUSE9OSE9NRSBpcyBzZXQgdG8gYSBzaW5nbGUgZGlyZWN0b3J5LCBpdHMgdmFsdWUKK3JlcGxhY2VzIGJvdGggJHtwcmVmaXh9IGFuZCAke2V4ZWNfcHJlZml4fS4gIFRvIHNwZWNpZnkgZGlmZmVyZW50IHZhbHVlcworZm9yIHRoZXNlLCBzZXQgJFBZVEhPTkhPTUUgdG8gJHtwcmVmaXh9OiR7ZXhlY19wcmVmaXh9LgorLklQIFBZVEhPTlBBVEgKK0F1Z21lbnRzIHRoZSBkZWZhdWx0IHNlYXJjaCBwYXRoIGZvciBtb2R1bGUgZmlsZXMuCitUaGUgZm9ybWF0IGlzIHRoZSBzYW1lIGFzIHRoZSBzaGVsbCdzICRQQVRIOiBvbmUgb3IgbW9yZSBkaXJlY3RvcnkKK3BhdGhuYW1lcyBzZXBhcmF0ZWQgYnkgY29sb25zLgorTm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzIGFyZSBzaWxlbnRseSBpZ25vcmVkLgorVGhlIGRlZmF1bHQgc2VhcmNoIHBhdGggaXMgaW5zdGFsbGF0aW9uIGRlcGVuZGVudCwgYnV0IGdlbmVyYWxseQorYmVnaW5zIHdpdGggJHtwcmVmaXh9L2xpYi9weXRob248dmVyc2lvbj4gKHNlZSBQWVRIT05IT01FIGFib3ZlKS4KK1RoZSBkZWZhdWx0IHNlYXJjaCBwYXRoIGlzIGFsd2F5cyBhcHBlbmRlZCB0byAkUFlUSE9OUEFUSC4KK0lmIGEgc2NyaXB0IGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHNjcmlwdCBpcworaW5zZXJ0ZWQgaW4gdGhlIHBhdGggaW4gZnJvbnQgb2YgJFBZVEhPTlBBVEguCitUaGUgc2VhcmNoIHBhdGggY2FuIGJlIG1hbmlwdWxhdGVkIGZyb20gd2l0aGluIGEgUHl0aG9uIHByb2dyYW0gYXMgdGhlCit2YXJpYWJsZQorLkkgc3lzLnBhdGggLgorLklQIFBZVEhPTlNUQVJUVVAKK0lmIHRoaXMgaXMgdGhlIG5hbWUgb2YgYSByZWFkYWJsZSBmaWxlLCB0aGUgUHl0aG9uIGNvbW1hbmRzIGluIHRoYXQKK2ZpbGUgYXJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgZmlyc3QgcHJvbXB0IGlzIGRpc3BsYXllZCBpbiBpbnRlcmFjdGl2ZQorbW9kZS4KK1RoZSBmaWxlIGlzIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG5hbWUgc3BhY2Ugd2hlcmUgaW50ZXJhY3RpdmUgY29tbWFuZHMKK2FyZSBleGVjdXRlZCBzbyB0aGF0IG9iamVjdHMgZGVmaW5lZCBvciBpbXBvcnRlZCBpbiBpdCBjYW4gYmUgdXNlZAord2l0aG91dCBxdWFsaWZpY2F0aW9uIGluIHRoZSBpbnRlcmFjdGl2ZSBzZXNzaW9uLgorWW91IGNhbiBhbHNvIGNoYW5nZSB0aGUgcHJvbXB0cworLkkgc3lzLnBzMQorYW5kCisuSSBzeXMucHMyCitpbiB0aGlzIGZpbGUuCisuSVAgUFlUSE9OWTJLCitTZXQgdGhpcyB0byBhIG5vbi1lbXB0eSBzdHJpbmcgdG8gY2F1c2UgdGhlIFxmSXRpbWVcZlAgbW9kdWxlIHRvCityZXF1aXJlIGRhdGVzIHNwZWNpZmllZCBhcyBzdHJpbmdzIHRvIGluY2x1ZGUgNC1kaWdpdCB5ZWFycywgb3RoZXJ3aXNlCisyLWRpZ2l0IHllYXJzIGFyZSBjb252ZXJ0ZWQgYmFzZWQgb24gcnVsZXMgZGVzY3JpYmVkIGluIHRoZSBcZkl0aW1lXGZQCittb2R1bGUgZG9jdW1lbnRhdGlvbi4KKy5JUCBQWVRIT05PUFRJTUlaRQorSWYgdGhpcyBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nIGl0IGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZwordGhlIFxmQlwtT1xmUCBvcHRpb24uIElmIHNldCB0byBhbiBpbnRlZ2VyLCBpdCBpcyBlcXVpdmFsZW50IHRvCitzcGVjaWZ5aW5nIFxmQlwtT1xmUCBtdWx0aXBsZSB0aW1lcy4KKy5JUCBQWVRIT05ERUJVRworSWYgdGhpcyBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nIGl0IGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZwordGhlIFxmQlwtZFxmUCBvcHRpb24uIElmIHNldCB0byBhbiBpbnRlZ2VyLCBpdCBpcyBlcXVpdmFsZW50IHRvCitzcGVjaWZ5aW5nIFxmQlwtZFxmUCBtdWx0aXBsZSB0aW1lcy4KKy5JUCBQWVRIT05ET05UV1JJVEVCWVRFQ09ERQorSWYgdGhpcyBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nIGl0IGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZwordGhlIFxmQlwtQlxmUCBvcHRpb24gKGRvbid0IHRyeSB0byB3cml0ZQorLkkgLnB5W2NvXQorZmlsZXMpLgorLklQIFBZVEhPTklOU1BFQ1QKK0lmIHRoaXMgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZyBpdCBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcKK3RoZSBcZkJcLWlcZlAgb3B0aW9uLgorLklQIFBZVEhPTklPRU5DT0RJTkcKK0lmIHRoaXMgaXMgc2V0IGJlZm9yZSBydW5uaW5nIHRoZSBpbnRlcnByZXRlciwgaXQgb3ZlcnJpZGVzIHRoZSBlbmNvZGluZyB1c2VkCitmb3Igc3RkaW4vc3Rkb3V0L3N0ZGVyciwgaW4gdGhlIHN5bnRheAorLklCIGVuY29kaW5nbmFtZSAiOiIgZXJyb3JoYW5kbGVyCitUaGUKKy5JQiBlcnJvcmhhbmRsZXIKK3BhcnQgaXMgb3B0aW9uYWwgYW5kIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIHN0ci5lbmNvZGUuIEZvciBzdGRlcnIsIHRoZQorLklCIGVycm9yaGFuZGxlcgorIHBhcnQgaXMgaWdub3JlZDsgdGhlIGhhbmRsZXIgd2lsbCBhbHdheXMgYmUgXCdiYWNrc2xhc2hyZXBsYWNlXCcuCisuSVAgUFlUSE9OTk9VU0VSU0lURQorSWYgdGhpcyBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nIGl0IGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyB0aGUKK1xmQlwtc1xmUCBvcHRpb24gKERvbid0IGFkZCB0aGUgdXNlciBzaXRlIGRpcmVjdG9yeSB0byBzeXMucGF0aCkuCisuSVAgUFlUSE9OVU5CVUZGRVJFRAorSWYgdGhpcyBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nIGl0IGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZwordGhlIFxmQlwtdVxmUCBvcHRpb24uCisuSVAgUFlUSE9OVkVSQk9TRQorSWYgdGhpcyBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nIGl0IGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZwordGhlIFxmQlwtdlxmUCBvcHRpb24uIElmIHNldCB0byBhbiBpbnRlZ2VyLCBpdCBpcyBlcXVpdmFsZW50IHRvCitzcGVjaWZ5aW5nIFxmQlwtdlxmUCBtdWx0aXBsZSB0aW1lcy4gCisuSVAgUFlUSE9OV0FSTklOR1MKK0lmIHRoaXMgaXMgc2V0IHRvIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZyBpdCBpcyBlcXVpdmFsZW50IHRvCitzcGVjaWZ5aW5nIHRoZSBcZkJcLVdcZlAgb3B0aW9uIGZvciBlYWNoIHNlcGFyYXRlIHZhbHVlLgorLklQIFBZVEhPTkhBU0hTRUVECitJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byAicmFuZG9tIiwgdGhlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBzcGVjaWZ5aW5nCit0aGUgXGZCLVJcZlAgb3B0aW9uOiBhIHJhbmRvbSB2YWx1ZSBpcyB1c2VkIHRvIHNlZWQgdGhlIGhhc2hlcyBvZiBzdHIsCitieXRlcyBhbmQgZGF0ZXRpbWUgb2JqZWN0cy4KKworSWYgUFlUSE9OSEFTSFNFRUQgaXMgc2V0IHRvIGFuIGludGVnZXIgdmFsdWUsIGl0IGlzIHVzZWQgYXMgYSBmaXhlZCBzZWVkIGZvcgorZ2VuZXJhdGluZyB0aGUgaGFzaCgpIG9mIHRoZSB0eXBlcyBjb3ZlcmVkIGJ5IHRoZSBoYXNoIHJhbmRvbWl6YXRpb24uICBJdHMKK3B1cnBvc2UgaXMgdG8gYWxsb3cgcmVwZWF0YWJsZSBoYXNoaW5nLCBzdWNoIGFzIGZvciBzZWxmdGVzdHMgZm9yIHRoZQoraW50ZXJwcmV0ZXIgaXRzZWxmLCBvciB0byBhbGxvdyBhIGNsdXN0ZXIgb2YgcHl0aG9uIHByb2Nlc3NlcyB0byBzaGFyZSBoYXNoCit2YWx1ZXMuCisKK1RoZSBpbnRlZ2VyIG11c3QgYmUgYSBkZWNpbWFsIG51bWJlciBpbiB0aGUgcmFuZ2UgWzAsNDI5NDk2NzI5NV0uICBTcGVjaWZ5aW5nCit0aGUgdmFsdWUgMCB3aWxsIGxlYWQgdG8gdGhlIHNhbWUgaGFzaCB2YWx1ZXMgYXMgd2hlbiBoYXNoIHJhbmRvbWl6YXRpb24gaXMKK2Rpc2FibGVkLgorLlNIIEFVVEhPUgorVGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmCisuU0ggSU5URVJORVQgUkVTT1VSQ0VTCitNYWluIHdlYnNpdGU6ICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvCisuYnIKK0RvY3VtZW50YXRpb246ICBodHRwOi8vZG9jcy5weXRob24ub3JnLworLmJyCitEZXZlbG9wZXIgcmVzb3VyY2VzOiAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS8KKy5icgorRG93bmxvYWRzOiAgaHR0cDovL3B5dGhvbi5vcmcvZG93bmxvYWQvCisuYnIKK01vZHVsZSByZXBvc2l0b3J5OiAgaHR0cDovL3B5cGkucHl0aG9uLm9yZy8KKy5icgorTmV3c2dyb3VwczogIGNvbXAubGFuZy5weXRob24sIGNvbXAubGFuZy5weXRob24uYW5ub3VuY2UKKy5TSCBMSUNFTlNJTkcKK1B5dGhvbiBpcyBkaXN0cmlidXRlZCB1bmRlciBhbiBPcGVuIFNvdXJjZSBsaWNlbnNlLiAgU2VlIHRoZSBmaWxlCisiTElDRU5TRSIgaW4gdGhlIFB5dGhvbiBzb3VyY2UgZGlzdHJpYnV0aW9uIGZvciBpbmZvcm1hdGlvbiBvbiB0ZXJtcyAmCitjb25kaXRpb25zIGZvciBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZyBQeXRob24gYW5kIGZvciBhCitESVNDTEFJTUVSIE9GIEFMTCBXQVJSQU5USUVTLgpkaWZmIC0tZ2l0IGEvc2hhcmUvbWFuL21hbjEvcHl0aG9uMi4xIGIvc2hhcmUvbWFuL21hbjEvcHl0aG9uMi4xCmRlbGV0ZWQgZmlsZSBtb2RlIDEyMDAwMAppbmRleCBhZmM1Njg3Li4wMDAwMDAwCi0tLSBhL3NoYXJlL21hbi9tYW4xL3B5dGhvbjIuMQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXB5dGhvbjIuNy4xClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2hhcmUvbWFuL21hbjEvcHl0aG9uMi4xIGIvc2hhcmUvbWFuL21hbjEvcHl0aG9uMi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZWRiY2EKLS0tIC9kZXYvbnVsbAorKysgYi9zaGFyZS9tYW4vbWFuMS9weXRob24yLjEKQEAgLTAsMCArMSw0NzMgQEAKKy5USCBQWVRIT04gIjEiICIkRGF0ZSQiCisKKy5cIiBUbyB2aWV3IHRoaXMgZmlsZSB3aGlsZSBlZGl0aW5nLCBydW4gaXQgdGhyb3VnaCBncm9mZjoKKy5cIiAgIGdyb2ZmIC1UYXNjaWkgLW1hbiBweXRob24ubWFuIHwgbGVzcworCisuU0ggTkFNRQorcHl0aG9uIFwtIGFuIGludGVycHJldGVkLCBpbnRlcmFjdGl2ZSwgb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nIGxhbmd1YWdlCisuU0ggU1lOT1BTSVMKKy5CIHB5dGhvbgorWworLkIgXC1CCitdCitbCisuQiBcLWQKK10KK1sKKy5CIFwtRQorXQorWworLkIgXC1oCitdCitbCisuQiBcLWkKK10KK1sKKy5CIFwtbSAKKy5JIG1vZHVsZS1uYW1lCitdCisuYnIKKyAgICAgICBbCisuQiBcLU8KK10KK1sKKy5CIFwtT08KK10KK1sKKy5CIFwtUgorXQorWworLkIgLVEKKy5JIGFyZ3VtZW50CitdCitbCisuQiBcLXMKK10KK1sKKy5CIFwtUworXQorWworLkIgXC10CitdCitbCisuQiBcLXUKK10KKy5icgorICAgICAgIFsKKy5CIFwtdgorXQorWworLkIgXC1WCitdCitbCisuQiBcLVcKKy5JIGFyZ3VtZW50CitdCitbCisuQiBcLXgKK10KK1sKKy5CIFwtMworXQorWworLkIgXC0/CitdCisuYnIKKyAgICAgICBbCisuQiBcLWMKKy5JIGNvbW1hbmQKK3wKKy5JIHNjcmlwdAorfAorXC0KK10KK1sKKy5JIGFyZ3VtZW50cworXQorLlNIIERFU0NSSVBUSU9OCitQeXRob24gaXMgYW4gaW50ZXJwcmV0ZWQsIGludGVyYWN0aXZlLCBvYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1pbmcKK2xhbmd1YWdlIHRoYXQgY29tYmluZXMgcmVtYXJrYWJsZSBwb3dlciB3aXRoIHZlcnkgY2xlYXIgc3ludGF4LgorRm9yIGFuIGludHJvZHVjdGlvbiB0byBwcm9ncmFtbWluZyBpbiBQeXRob24geW91IGFyZSByZWZlcnJlZCB0byB0aGUKK1B5dGhvbiBUdXRvcmlhbC4KK1RoZSBQeXRob24gTGlicmFyeSBSZWZlcmVuY2UgZG9jdW1lbnRzIGJ1aWx0LWluIGFuZCBzdGFuZGFyZCB0eXBlcywKK2NvbnN0YW50cywgZnVuY3Rpb25zIGFuZCBtb2R1bGVzLgorRmluYWxseSwgdGhlIFB5dGhvbiBSZWZlcmVuY2UgTWFudWFsIGRlc2NyaWJlcyB0aGUgc3ludGF4IGFuZAorc2VtYW50aWNzIG9mIHRoZSBjb3JlIGxhbmd1YWdlIGluIChwZXJoYXBzIHRvbykgbXVjaCBkZXRhaWwuCisoVGhlc2UgZG9jdW1lbnRzIG1heSBiZSBsb2NhdGVkIHZpYSB0aGUKKy5CICJJTlRFUk5FVCBSRVNPVVJDRVMiCitiZWxvdzsgdGhleSBtYXkgYmUgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtIGFzIHdlbGwuKQorLlBQCitQeXRob24ncyBiYXNpYyBwb3dlciBjYW4gYmUgZXh0ZW5kZWQgd2l0aCB5b3VyIG93biBtb2R1bGVzIHdyaXR0ZW4gaW4KK0Mgb3IgQysrLgorT24gbW9zdCBzeXN0ZW1zIHN1Y2ggbW9kdWxlcyBtYXkgYmUgZHluYW1pY2FsbHkgbG9hZGVkLgorUHl0aG9uIGlzIGFsc28gYWRhcHRhYmxlIGFzIGFuIGV4dGVuc2lvbiBsYW5ndWFnZSBmb3IgZXhpc3RpbmcKK2FwcGxpY2F0aW9ucy4KK1NlZSB0aGUgaW50ZXJuYWwgZG9jdW1lbnRhdGlvbiBmb3IgaGludHMuCisuUFAKK0RvY3VtZW50YXRpb24gZm9yIGluc3RhbGxlZCBQeXRob24gbW9kdWxlcyBhbmQgcGFja2FnZXMgY2FuIGJlIAordmlld2VkIGJ5IHJ1bm5pbmcgdGhlIAorLkIgcHlkb2MKK3Byb2dyYW0uICAKKy5TSCBDT01NQU5EIExJTkUgT1BUSU9OUworLlRQCisuQiBcLUIKK0Rvbid0IHdyaXRlCisuSSAucHlbY29dCitmaWxlcyBvbiBpbXBvcnQuIFNlZSBhbHNvIFBZVEhPTkRPTlRXUklURUJZVEVDT0RFLgorLlRQCisuQkkgIlwtYyAiIGNvbW1hbmQKK1NwZWNpZnkgdGhlIGNvbW1hbmQgdG8gZXhlY3V0ZSAoc2VlIG5leHQgc2VjdGlvbikuCitUaGlzIHRlcm1pbmF0ZXMgdGhlIG9wdGlvbiBsaXN0IChmb2xsb3dpbmcgb3B0aW9ucyBhcmUgcGFzc2VkIGFzCithcmd1bWVudHMgdG8gdGhlIGNvbW1hbmQpLgorLlRQCisuQiBcLWQKK1R1cm4gb24gcGFyc2VyIGRlYnVnZ2luZyBvdXRwdXQgKGZvciB3aXphcmRzIG9ubHksIGRlcGVuZGluZyBvbgorY29tcGlsYXRpb24gb3B0aW9ucykuCisuVFAKKy5CIFwtRQorSWdub3JlIGVudmlyb25tZW50IHZhcmlhYmxlcyBsaWtlIFBZVEhPTlBBVEggYW5kIFBZVEhPTkhPTUUgdGhhdCBtb2RpZnkKK3RoZSBiZWhhdmlvciBvZiB0aGUgaW50ZXJwcmV0ZXIuCisuVFAKKy5CIFwtaCAiLCAiIFwtPyAiLCAiXC1cLWhlbHAKK1ByaW50cyB0aGUgdXNhZ2UgZm9yIHRoZSBpbnRlcnByZXRlciBleGVjdXRhYmxlIGFuZCBleGl0cy4KKy5UUAorLkIgXC1pCitXaGVuIGEgc2NyaXB0IGlzIHBhc3NlZCBhcyBmaXJzdCBhcmd1bWVudCBvciB0aGUgXGZCXC1jXGZQIG9wdGlvbiBpcwordXNlZCwgZW50ZXIgaW50ZXJhY3RpdmUgbW9kZSBhZnRlciBleGVjdXRpbmcgdGhlIHNjcmlwdCBvciB0aGUKK2NvbW1hbmQuICBJdCBkb2VzIG5vdCByZWFkIHRoZSAkUFlUSE9OU1RBUlRVUCBmaWxlLiAgVGhpcyBjYW4gYmUKK3VzZWZ1bCB0byBpbnNwZWN0IGdsb2JhbCB2YXJpYWJsZXMgb3IgYSBzdGFjayB0cmFjZSB3aGVuIGEgc2NyaXB0CityYWlzZXMgYW4gZXhjZXB0aW9uLgorLlRQCisuQkkgIlwtbSAiIG1vZHVsZS1uYW1lCitTZWFyY2hlcyAKKy5JIHN5cy5wYXRoIAorZm9yIHRoZSBuYW1lZCBtb2R1bGUgYW5kIHJ1bnMgdGhlIGNvcnJlc3BvbmRpbmcgCisuSSAucHkgCitmaWxlIGFzIGEgc2NyaXB0LgorLlRQCisuQiBcLU8KK1R1cm4gb24gYmFzaWMgb3B0aW1pemF0aW9ucy4gIFRoaXMgY2hhbmdlcyB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uIGZvcgorY29tcGlsZWQgKGJ5dGVjb2RlKSBmaWxlcyBmcm9tCisuSSAucHljCit0byBcZkkucHlvXGZQLiAgR2l2ZW4gdHdpY2UsIGNhdXNlcyBkb2NzdHJpbmdzIHRvIGJlIGRpc2NhcmRlZC4KKy5UUAorLkIgXC1PTworRGlzY2FyZCBkb2NzdHJpbmdzIGluIGFkZGl0aW9uIHRvIHRoZSBcZkItT1xmUCBvcHRpbWl6YXRpb25zLgorLlRQCisuQiBcLVIKK1R1cm4gb24gImhhc2ggcmFuZG9taXphdGlvbiIsIHNvIHRoYXQgdGhlIGhhc2goKSB2YWx1ZXMgb2Ygc3RyLCBieXRlcyBhbmQKK2RhdGV0aW1lIG9iamVjdHMgYXJlICJzYWx0ZWQiIHdpdGggYW4gdW5wcmVkaWN0YWJsZSBwc2V1ZG8tcmFuZG9tIHZhbHVlLgorQWx0aG91Z2ggdGhleSByZW1haW4gY29uc3RhbnQgd2l0aGluIGFuIGluZGl2aWR1YWwgUHl0aG9uIHByb2Nlc3MsIHRoZXkgYXJlCitub3QgcHJlZGljdGFibGUgYmV0d2VlbiByZXBlYXRlZCBpbnZvY2F0aW9ucyBvZiBQeXRob24uCisuSVAKK1RoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwgb2Ygc2VydmljZQorY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGUgd29yc3QgY2FzZSBwZXJmb3JtYW5jZQorb2YgYSBkaWN0IGNvbnN0cnVjdGlvbiwgTyhuXjIpIGNvbXBsZXhpdHkuICBTZWUKK2h0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbAorZm9yIGRldGFpbHMuCisuVFAKKy5CSSAiXC1RICIgYXJndW1lbnQKK0RpdmlzaW9uIGNvbnRyb2w7IHNlZSBQRVAgMjM4LiAgVGhlIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mICJvbGQiICh0aGUKK2RlZmF1bHQsIGludC9pbnQgYW5kIGxvbmcvbG9uZyByZXR1cm4gYW4gaW50IG9yIGxvbmcpLCAibmV3IiAobmV3CitkaXZpc2lvbiBzZW1hbnRpY3MsIGkuZS4gaW50L2ludCBhbmQgbG9uZy9sb25nIHJldHVybnMgYSBmbG9hdCksCisid2FybiIgKG9sZCBkaXZpc2lvbiBzZW1hbnRpY3Mgd2l0aCBhIHdhcm5pbmcgZm9yIGludC9pbnQgYW5kCitsb25nL2xvbmcpLCBvciAid2FybmFsbCIgKG9sZCBkaXZpc2lvbiBzZW1hbnRpY3Mgd2l0aCBhIHdhcm5pbmcgZm9yCithbGwgdXNlIG9mIHRoZSBkaXZpc2lvbiBvcGVyYXRvcikuICBGb3IgYSB1c2Ugb2YgIndhcm5hbGwiLCBzZWUgdGhlCitUb29scy9zY3JpcHRzL2ZpeGRpdi5weSBzY3JpcHQuCisuVFAKKy5CIFwtcworRG9uJ3QgYWRkIHVzZXIgc2l0ZSBkaXJlY3RvcnkgdG8gc3lzLnBhdGguCisuVFAKKy5CIFwtUworRGlzYWJsZSB0aGUgaW1wb3J0IG9mIHRoZSBtb2R1bGUKKy5JIHNpdGUKK2FuZCB0aGUgc2l0ZS1kZXBlbmRlbnQgbWFuaXB1bGF0aW9ucyBvZgorLkkgc3lzLnBhdGgKK3RoYXQgaXQgZW50YWlscy4KKy5UUAorLkIgXC10CitJc3N1ZSBhIHdhcm5pbmcgd2hlbiBhIHNvdXJjZSBmaWxlIG1peGVzIHRhYnMgYW5kIHNwYWNlcyBmb3IKK2luZGVudGF0aW9uIGluIGEgd2F5IHRoYXQgbWFrZXMgaXQgZGVwZW5kIG9uIHRoZSB3b3J0aCBvZiBhIHRhYgorZXhwcmVzc2VkIGluIHNwYWNlcy4gIElzc3VlIGFuIGVycm9yIHdoZW4gdGhlIG9wdGlvbiBpcyBnaXZlbiB0d2ljZS4KKy5UUAorLkIgXC11CitGb3JjZSBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gYmUgdG90YWxseSB1bmJ1ZmZlcmVkLiAgT24gc3lzdGVtcword2hlcmUgaXQgbWF0dGVycywgYWxzbyBwdXQgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIGluIGJpbmFyeSBtb2RlLgorTm90ZSB0aGF0IHRoZXJlIGlzIGludGVybmFsIGJ1ZmZlcmluZyBpbiB4cmVhZGxpbmVzKCksIHJlYWRsaW5lcygpIGFuZAorZmlsZS1vYmplY3QgaXRlcmF0b3JzICgiZm9yIGxpbmUgaW4gc3lzLnN0ZGluIikgd2hpY2ggaXMgbm90CitpbmZsdWVuY2VkIGJ5IHRoaXMgb3B0aW9uLiAgVG8gd29yayBhcm91bmQgdGhpcywgeW91IHdpbGwgd2FudCB0byB1c2UKKyJzeXMuc3RkaW4ucmVhZGxpbmUoKSIgaW5zaWRlIGEgIndoaWxlIDE6IiBsb29wLgorLlRQCisuQiBcLXYKK1ByaW50IGEgbWVzc2FnZSBlYWNoIHRpbWUgYSBtb2R1bGUgaXMgaW5pdGlhbGl6ZWQsIHNob3dpbmcgdGhlIHBsYWNlCisoZmlsZW5hbWUgb3IgYnVpbHQtaW4gbW9kdWxlKSBmcm9tIHdoaWNoIGl0IGlzIGxvYWRlZC4gIFdoZW4gZ2l2ZW4KK3R3aWNlLCBwcmludCBhIG1lc3NhZ2UgZm9yIGVhY2ggZmlsZSB0aGF0IGlzIGNoZWNrZWQgZm9yIHdoZW4gCitzZWFyY2hpbmcgZm9yIGEgbW9kdWxlLiAgQWxzbyBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBtb2R1bGUgY2xlYW51cAorYXQgZXhpdC4KKy5UUAorLkIgXC1WICIsICIgXC1cLXZlcnNpb24KK1ByaW50cyB0aGUgUHl0aG9uIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBleGVjdXRhYmxlIGFuZCBleGl0cy4KKy5UUAorLkJJICJcLVcgIiBhcmd1bWVudAorV2FybmluZyBjb250cm9sLiAgUHl0aG9uIHNvbWV0aW1lcyBwcmludHMgd2FybmluZyBtZXNzYWdlIHRvCisuSVIgc3lzLnN0ZGVyciAuCitBIHR5cGljYWwgd2FybmluZyBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm06CisuSUIgZmlsZSAiOiIgbGluZSAiOiAiIGNhdGVnb3J5ICI6ICIgbWVzc2FnZS4KK0J5IGRlZmF1bHQsIGVhY2ggd2FybmluZyBpcyBwcmludGVkIG9uY2UgZm9yIGVhY2ggc291cmNlIGxpbmUgd2hlcmUgaXQKK29jY3Vycy4gIFRoaXMgb3B0aW9uIGNvbnRyb2xzIGhvdyBvZnRlbiB3YXJuaW5ncyBhcmUgcHJpbnRlZC4KK011bHRpcGxlCisuQiBcLVcKK29wdGlvbnMgbWF5IGJlIGdpdmVuOyB3aGVuIGEgd2FybmluZyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUKK29wdGlvbiwgdGhlIGFjdGlvbiBmb3IgdGhlIGxhc3QgbWF0Y2hpbmcgb3B0aW9uIGlzIHBlcmZvcm1lZC4KK0ludmFsaWQKKy5CIFwtVworb3B0aW9ucyBhcmUgaWdub3JlZCAoYSB3YXJuaW5nIG1lc3NhZ2UgaXMgcHJpbnRlZCBhYm91dCBpbnZhbGlkCitvcHRpb25zIHdoZW4gdGhlIGZpcnN0IHdhcm5pbmcgaXMgaXNzdWVkKS4gIFdhcm5pbmdzIGNhbiBhbHNvIGJlCitjb250cm9sbGVkIGZyb20gd2l0aGluIGEgUHl0aG9uIHByb2dyYW0gdXNpbmcgdGhlCisuSSB3YXJuaW5ncworbW9kdWxlLgorCitUaGUgc2ltcGxlc3QgZm9ybSBvZgorLkkgYXJndW1lbnQKK2lzIG9uZSBvZiB0aGUgZm9sbG93aW5nCisuSSBhY3Rpb24KK3N0cmluZ3MgKG9yIGEgdW5pcXVlIGFiYnJldmlhdGlvbik6CisuQiBpZ25vcmUKK3RvIGlnbm9yZSBhbGwgd2FybmluZ3M7CisuQiBkZWZhdWx0Cit0byBleHBsaWNpdGx5IHJlcXVlc3QgdGhlIGRlZmF1bHQgYmVoYXZpb3IgKHByaW50aW5nIGVhY2ggd2FybmluZyBvbmNlCitwZXIgc291cmNlIGxpbmUpOworLkIgYWxsCit0byBwcmludCBhIHdhcm5pbmcgZWFjaCB0aW1lIGl0IG9jY3VycyAodGhpcyBtYXkgZ2VuZXJhdGUgbWFueQorbWVzc2FnZXMgaWYgYSB3YXJuaW5nIGlzIHRyaWdnZXJlZCByZXBlYXRlZGx5IGZvciB0aGUgc2FtZSBzb3VyY2UKK2xpbmUsIHN1Y2ggYXMgaW5zaWRlIGEgbG9vcCk7CisuQiBtb2R1bGUKK3RvIHByaW50IGVhY2ggd2FybmluZyBvbmx5IHRoZSBmaXJzdCB0aW1lIGl0IG9jY3VycyBpbiBlYWNoCittb2R1bGU7CisuQiBvbmNlCit0byBwcmludCBlYWNoIHdhcm5pbmcgb25seSB0aGUgZmlyc3QgdGltZSBpdCBvY2N1cnMgaW4gdGhlIHByb2dyYW07IG9yCisuQiBlcnJvcgordG8gcmFpc2UgYW4gZXhjZXB0aW9uIGluc3RlYWQgb2YgcHJpbnRpbmcgYSB3YXJuaW5nIG1lc3NhZ2UuCisKK1RoZSBmdWxsIGZvcm0gb2YKKy5JIGFyZ3VtZW50CitpcworLklCIGFjdGlvbiA6IG1lc3NhZ2UgOiBjYXRlZ29yeSA6IG1vZHVsZSA6IGxpbmUuCitIZXJlLAorLkkgYWN0aW9uCitpcyBhcyBleHBsYWluZWQgYWJvdmUgYnV0IG9ubHkgYXBwbGllcyB0byBtZXNzYWdlcyB0aGF0IG1hdGNoIHRoZQorcmVtYWluaW5nIGZpZWxkcy4gIEVtcHR5IGZpZWxkcyBtYXRjaCBhbGwgdmFsdWVzOyB0cmFpbGluZyBlbXB0eQorZmllbGRzIG1heSBiZSBvbWl0dGVkLiAgVGhlCisuSSBtZXNzYWdlCitmaWVsZCBtYXRjaGVzIHRoZSBzdGFydCBvZiB0aGUgd2FybmluZyBtZXNzYWdlIHByaW50ZWQ7IHRoaXMgbWF0Y2ggaXMKK2Nhc2UtaW5zZW5zaXRpdmUuICBUaGUKKy5JIGNhdGVnb3J5CitmaWVsZCBtYXRjaGVzIHRoZSB3YXJuaW5nIGNhdGVnb3J5LiAgVGhpcyBtdXN0IGJlIGEgY2xhc3MgbmFtZTsgdGhlCittYXRjaCB0ZXN0IHdoZXRoZXIgdGhlIGFjdHVhbCB3YXJuaW5nIGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlIGlzIGEKK3N1YmNsYXNzIG9mIHRoZSBzcGVjaWZpZWQgd2FybmluZyBjYXRlZ29yeS4gIFRoZSBmdWxsIGNsYXNzIG5hbWUgbXVzdAorYmUgZ2l2ZW4uICBUaGUKKy5JIG1vZHVsZQorZmllbGQgbWF0Y2hlcyB0aGUgKGZ1bGx5LXF1YWxpZmllZCkgbW9kdWxlIG5hbWU7IHRoaXMgbWF0Y2ggaXMKK2Nhc2Utc2Vuc2l0aXZlLiAgVGhlCisuSSBsaW5lCitmaWVsZCBtYXRjaGVzIHRoZSBsaW5lIG51bWJlciwgd2hlcmUgemVybyBtYXRjaGVzIGFsbCBsaW5lIG51bWJlcnMgYW5kCitpcyB0aHVzIGVxdWl2YWxlbnQgdG8gYW4gb21pdHRlZCBsaW5lIG51bWJlci4KKy5UUAorLkIgXC14CitTa2lwIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBzb3VyY2UuICBUaGlzIGlzIGludGVuZGVkIGZvciBhIERPUworc3BlY2lmaWMgaGFjayBvbmx5LiAgV2FybmluZzogdGhlIGxpbmUgbnVtYmVycyBpbiBlcnJvciBtZXNzYWdlcyB3aWxsCitiZSBvZmYgYnkgb25lIQorLlRQCisuQiBcLTMKK1dhcm4gYWJvdXQgUHl0aG9uIDMueCBpbmNvbXBhdGliaWxpdGllcyB0aGF0IDJ0bzMgY2Fubm90IHRyaXZpYWxseSBmaXguCisuU0ggSU5URVJQUkVURVIgSU5URVJGQUNFCitUaGUgaW50ZXJwcmV0ZXIgaW50ZXJmYWNlIHJlc2VtYmxlcyB0aGF0IG9mIHRoZSBVTklYIHNoZWxsOiB3aGVuCitjYWxsZWQgd2l0aCBzdGFuZGFyZCBpbnB1dCBjb25uZWN0ZWQgdG8gYSB0dHkgZGV2aWNlLCBpdCBwcm9tcHRzIGZvcgorY29tbWFuZHMgYW5kIGV4ZWN1dGVzIHRoZW0gdW50aWwgYW4gRU9GIGlzIHJlYWQ7IHdoZW4gY2FsbGVkIHdpdGggYQorZmlsZSBuYW1lIGFyZ3VtZW50IG9yIHdpdGggYSBmaWxlIGFzIHN0YW5kYXJkIGlucHV0LCBpdCByZWFkcyBhbmQKK2V4ZWN1dGVzIGEKKy5JIHNjcmlwdAorZnJvbSB0aGF0IGZpbGU7Cit3aGVuIGNhbGxlZCB3aXRoCisuQiBcLWMKKy5JIGNvbW1hbmQsCitpdCBleGVjdXRlcyB0aGUgUHl0aG9uIHN0YXRlbWVudChzKSBnaXZlbiBhcworLkkgY29tbWFuZC4KK0hlcmUKKy5JIGNvbW1hbmQKK21heSBjb250YWluIG11bHRpcGxlIHN0YXRlbWVudHMgc2VwYXJhdGVkIGJ5IG5ld2xpbmVzLgorTGVhZGluZyB3aGl0ZXNwYWNlIGlzIHNpZ25pZmljYW50IGluIFB5dGhvbiBzdGF0ZW1lbnRzIQorSW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIHRoZSBlbnRpcmUgaW5wdXQgaXMgcGFyc2VkIGJlZm9yZSBpdCBpcworZXhlY3V0ZWQuCisuUFAKK0lmIGF2YWlsYWJsZSwgdGhlIHNjcmlwdCBuYW1lIGFuZCBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGVyZWFmdGVyIGFyZQorcGFzc2VkIHRvIHRoZSBzY3JpcHQgaW4gdGhlIFB5dGhvbiB2YXJpYWJsZQorLkkgc3lzLmFyZ3YgLAord2hpY2ggaXMgYSBsaXN0IG9mIHN0cmluZ3MgKHlvdSBtdXN0IGZpcnN0CisuSSBpbXBvcnQgc3lzCit0byBiZSBhYmxlIHRvIGFjY2VzcyBpdCkuCitJZiBubyBzY3JpcHQgbmFtZSBpcyBnaXZlbiwKKy5JIHN5cy5hcmd2WzBdCitpcyBhbiBlbXB0eSBzdHJpbmc7IGlmCisuQiBcLWMKK2lzIHVzZWQsCisuSSBzeXMuYXJndlswXQorY29udGFpbnMgdGhlIHN0cmluZworLkkgJy1jJy4KK05vdGUgdGhhdCBvcHRpb25zIGludGVycHJldGVkIGJ5IHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgaXRzZWxmCithcmUgbm90IHBsYWNlZCBpbgorLkkgc3lzLmFyZ3YuCisuUFAKK0luIGludGVyYWN0aXZlIG1vZGUsIHRoZSBwcmltYXJ5IHByb21wdCBpcyBgPj4+JzsgdGhlIHNlY29uZCBwcm9tcHQKKyh3aGljaCBhcHBlYXJzIHdoZW4gYSBjb21tYW5kIGlzIG5vdCBjb21wbGV0ZSkgaXMgYC4uLicuCitUaGUgcHJvbXB0cyBjYW4gYmUgY2hhbmdlZCBieSBhc3NpZ25tZW50IHRvCisuSSBzeXMucHMxCitvcgorLkkgc3lzLnBzMi4KK1RoZSBpbnRlcnByZXRlciBxdWl0cyB3aGVuIGl0IHJlYWRzIGFuIEVPRiBhdCBhIHByb21wdC4KK1doZW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbiBvY2N1cnMsIGEgc3RhY2sgdHJhY2UgaXMgcHJpbnRlZCBhbmQKK2NvbnRyb2wgcmV0dXJucyB0byB0aGUgcHJpbWFyeSBwcm9tcHQ7IGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCB0aGUKK2ludGVycHJldGVyIGV4aXRzIGFmdGVyIHByaW50aW5nIHRoZSBzdGFjayB0cmFjZS4KK1RoZSBpbnRlcnJ1cHQgc2lnbmFsIHJhaXNlcyB0aGUKKy5JIEtleWJvYXJkXCVJbnRlcnJ1cHQKK2V4Y2VwdGlvbjsgb3RoZXIgVU5JWCBzaWduYWxzIGFyZSBub3QgY2F1Z2h0IChleGNlcHQgdGhhdCBTSUdQSVBFIGlzCitzb21ldGltZXMgaWdub3JlZCwgaW4gZmF2b3Igb2YgdGhlCisuSSBJT0Vycm9yCitleGNlcHRpb24pLiAgRXJyb3IgbWVzc2FnZXMgYXJlIHdyaXR0ZW4gdG8gc3RkZXJyLgorLlNIIEZJTEVTIEFORCBESVJFQ1RPUklFUworVGhlc2UgYXJlIHN1YmplY3QgdG8gZGlmZmVyZW5jZSBkZXBlbmRpbmcgb24gbG9jYWwgaW5zdGFsbGF0aW9uCitjb252ZW50aW9uczsgJHtwcmVmaXh9IGFuZCAke2V4ZWNfcHJlZml4fSBhcmUgaW5zdGFsbGF0aW9uLWRlcGVuZGVudAorYW5kIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBmb3IgR05VIHNvZnR3YXJlOyB0aGV5IG1heSBiZSB0aGUgc2FtZS4KK1RoZSBkZWZhdWx0IGZvciBib3RoIGlzIFxmSS91c3IvbG9jYWxcZlAuCisuSVAgXGZJJHtleGVjX3ByZWZpeH0vYmluL3B5dGhvblxmUAorUmVjb21tZW5kZWQgbG9jYXRpb24gb2YgdGhlIGludGVycHJldGVyLgorLlBQCisuSSAke3ByZWZpeH0vbGliL3B5dGhvbjx2ZXJzaW9uPgorLmJyCisuSSAke2V4ZWNfcHJlZml4fS9saWIvcHl0aG9uPHZlcnNpb24+CisuUlMKK1JlY29tbWVuZGVkIGxvY2F0aW9ucyBvZiB0aGUgZGlyZWN0b3JpZXMgY29udGFpbmluZyB0aGUgc3RhbmRhcmQKK21vZHVsZXMuCisuUkUKKy5QUAorLkkgJHtwcmVmaXh9L2luY2x1ZGUvcHl0aG9uPHZlcnNpb24+CisuYnIKKy5JICR7ZXhlY19wcmVmaXh9L2luY2x1ZGUvcHl0aG9uPHZlcnNpb24+CisuUlMKK1JlY29tbWVuZGVkIGxvY2F0aW9ucyBvZiB0aGUgZGlyZWN0b3JpZXMgY29udGFpbmluZyB0aGUgaW5jbHVkZSBmaWxlcworbmVlZGVkIGZvciBkZXZlbG9waW5nIFB5dGhvbiBleHRlbnNpb25zIGFuZCBlbWJlZGRpbmcgdGhlCitpbnRlcnByZXRlci4KKy5SRQorLklQIFxmSX4vLnB5dGhvbnJjLnB5XGZQCitVc2VyLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZpbGUgbG9hZGVkIGJ5IHRoZSBcZkl1c2VyXGZQIG1vZHVsZTsKK25vdCB1c2VkIGJ5IGRlZmF1bHQgb3IgYnkgbW9zdCBhcHBsaWNhdGlvbnMuCisuU0ggRU5WSVJPTk1FTlQgVkFSSUFCTEVTCisuSVAgUFlUSE9OSE9NRQorQ2hhbmdlIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RhbmRhcmQgUHl0aG9uIGxpYnJhcmllcy4gIEJ5IGRlZmF1bHQsIHRoZQorbGlicmFyaWVzIGFyZSBzZWFyY2hlZCBpbiAke3ByZWZpeH0vbGliL3B5dGhvbjx2ZXJzaW9uPiBhbmQKKyR7ZXhlY19wcmVmaXh9L2xpYi9weXRob248dmVyc2lvbj4sIHdoZXJlICR7cHJlZml4fSBhbmQgJHtleGVjX3ByZWZpeH0KK2FyZSBpbnN0YWxsYXRpb24tZGVwZW5kZW50IGRpcmVjdG9yaWVzLCBib3RoIGRlZmF1bHRpbmcgdG8KK1xmSS91c3IvbG9jYWxcZlAuICBXaGVuICRQWVRIT05IT01FIGlzIHNldCB0byBhIHNpbmdsZSBkaXJlY3RvcnksIGl0cyB2YWx1ZQorcmVwbGFjZXMgYm90aCAke3ByZWZpeH0gYW5kICR7ZXhlY19wcmVmaXh9LiAgVG8gc3BlY2lmeSBkaWZmZXJlbnQgdmFsdWVzCitmb3IgdGhlc2UsIHNldCAkUFlUSE9OSE9NRSB0byAke3ByZWZpeH06JHtleGVjX3ByZWZpeH0uCisuSVAgUFlUSE9OUEFUSAorQXVnbWVudHMgdGhlIGRlZmF1bHQgc2VhcmNoIHBhdGggZm9yIG1vZHVsZSBmaWxlcy4KK1RoZSBmb3JtYXQgaXMgdGhlIHNhbWUgYXMgdGhlIHNoZWxsJ3MgJFBBVEg6IG9uZSBvciBtb3JlIGRpcmVjdG9yeQorcGF0aG5hbWVzIHNlcGFyYXRlZCBieSBjb2xvbnMuCitOb24tZXhpc3RlbnQgZGlyZWN0b3JpZXMgYXJlIHNpbGVudGx5IGlnbm9yZWQuCitUaGUgZGVmYXVsdCBzZWFyY2ggcGF0aCBpcyBpbnN0YWxsYXRpb24gZGVwZW5kZW50LCBidXQgZ2VuZXJhbGx5CitiZWdpbnMgd2l0aCAke3ByZWZpeH0vbGliL3B5dGhvbjx2ZXJzaW9uPiAoc2VlIFBZVEhPTkhPTUUgYWJvdmUpLgorVGhlIGRlZmF1bHQgc2VhcmNoIHBhdGggaXMgYWx3YXlzIGFwcGVuZGVkIHRvICRQWVRIT05QQVRILgorSWYgYSBzY3JpcHQgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc2NyaXB0IGlzCitpbnNlcnRlZCBpbiB0aGUgcGF0aCBpbiBmcm9udCBvZiAkUFlUSE9OUEFUSC4KK1RoZSBzZWFyY2ggcGF0aCBjYW4gYmUgbWFuaXB1bGF0ZWQgZnJvbSB3aXRoaW4gYSBQeXRob24gcHJvZ3JhbSBhcyB0aGUKK3ZhcmlhYmxlCisuSSBzeXMucGF0aCAuCisuSVAgUFlUSE9OU1RBUlRVUAorSWYgdGhpcyBpcyB0aGUgbmFtZSBvZiBhIHJlYWRhYmxlIGZpbGUsIHRoZSBQeXRob24gY29tbWFuZHMgaW4gdGhhdAorZmlsZSBhcmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBmaXJzdCBwcm9tcHQgaXMgZGlzcGxheWVkIGluIGludGVyYWN0aXZlCittb2RlLgorVGhlIGZpbGUgaXMgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgbmFtZSBzcGFjZSB3aGVyZSBpbnRlcmFjdGl2ZSBjb21tYW5kcworYXJlIGV4ZWN1dGVkIHNvIHRoYXQgb2JqZWN0cyBkZWZpbmVkIG9yIGltcG9ydGVkIGluIGl0IGNhbiBiZSB1c2VkCit3aXRob3V0IHF1YWxpZmljYXRpb24gaW4gdGhlIGludGVyYWN0aXZlIHNlc3Npb24uCitZb3UgY2FuIGFsc28gY2hhbmdlIHRoZSBwcm9tcHRzCisuSSBzeXMucHMxCithbmQKKy5JIHN5cy5wczIKK2luIHRoaXMgZmlsZS4KKy5JUCBQWVRIT05ZMksKK1NldCB0aGlzIHRvIGEgbm9uLWVtcHR5IHN0cmluZyB0byBjYXVzZSB0aGUgXGZJdGltZVxmUCBtb2R1bGUgdG8KK3JlcXVpcmUgZGF0ZXMgc3BlY2lmaWVkIGFzIHN0cmluZ3MgdG8gaW5jbHVkZSA0LWRpZ2l0IHllYXJzLCBvdGhlcndpc2UKKzItZGlnaXQgeWVhcnMgYXJlIGNvbnZlcnRlZCBiYXNlZCBvbiBydWxlcyBkZXNjcmliZWQgaW4gdGhlIFxmSXRpbWVcZlAKK21vZHVsZSBkb2N1bWVudGF0aW9uLgorLklQIFBZVEhPTk9QVElNSVpFCitJZiB0aGlzIGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcgaXQgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nCit0aGUgXGZCXC1PXGZQIG9wdGlvbi4gSWYgc2V0IHRvIGFuIGludGVnZXIsIGl0IGlzIGVxdWl2YWxlbnQgdG8KK3NwZWNpZnlpbmcgXGZCXC1PXGZQIG11bHRpcGxlIHRpbWVzLgorLklQIFBZVEhPTkRFQlVHCitJZiB0aGlzIGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcgaXQgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nCit0aGUgXGZCXC1kXGZQIG9wdGlvbi4gSWYgc2V0IHRvIGFuIGludGVnZXIsIGl0IGlzIGVxdWl2YWxlbnQgdG8KK3NwZWNpZnlpbmcgXGZCXC1kXGZQIG11bHRpcGxlIHRpbWVzLgorLklQIFBZVEhPTkRPTlRXUklURUJZVEVDT0RFCitJZiB0aGlzIGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcgaXQgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nCit0aGUgXGZCXC1CXGZQIG9wdGlvbiAoZG9uJ3QgdHJ5IHRvIHdyaXRlCisuSSAucHlbY29dCitmaWxlcykuCisuSVAgUFlUSE9OSU5TUEVDVAorSWYgdGhpcyBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nIGl0IGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZwordGhlIFxmQlwtaVxmUCBvcHRpb24uCisuSVAgUFlUSE9OSU9FTkNPRElORworSWYgdGhpcyBpcyBzZXQgYmVmb3JlIHJ1bm5pbmcgdGhlIGludGVycHJldGVyLCBpdCBvdmVycmlkZXMgdGhlIGVuY29kaW5nIHVzZWQKK2ZvciBzdGRpbi9zdGRvdXQvc3RkZXJyLCBpbiB0aGUgc3ludGF4CisuSUIgZW5jb2RpbmduYW1lICI6IiBlcnJvcmhhbmRsZXIKK1RoZQorLklCIGVycm9yaGFuZGxlcgorcGFydCBpcyBvcHRpb25hbCBhbmQgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gc3RyLmVuY29kZS4gRm9yIHN0ZGVyciwgdGhlCisuSUIgZXJyb3JoYW5kbGVyCisgcGFydCBpcyBpZ25vcmVkOyB0aGUgaGFuZGxlciB3aWxsIGFsd2F5cyBiZSBcJ2JhY2tzbGFzaHJlcGxhY2VcJy4KKy5JUCBQWVRIT05OT1VTRVJTSVRFCitJZiB0aGlzIGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcgaXQgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIHRoZQorXGZCXC1zXGZQIG9wdGlvbiAoRG9uJ3QgYWRkIHRoZSB1c2VyIHNpdGUgZGlyZWN0b3J5IHRvIHN5cy5wYXRoKS4KKy5JUCBQWVRIT05VTkJVRkZFUkVECitJZiB0aGlzIGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcgaXQgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nCit0aGUgXGZCXC11XGZQIG9wdGlvbi4KKy5JUCBQWVRIT05WRVJCT1NFCitJZiB0aGlzIGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcgaXQgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nCit0aGUgXGZCXC12XGZQIG9wdGlvbi4gSWYgc2V0IHRvIGFuIGludGVnZXIsIGl0IGlzIGVxdWl2YWxlbnQgdG8KK3NwZWNpZnlpbmcgXGZCXC12XGZQIG11bHRpcGxlIHRpbWVzLiAKKy5JUCBQWVRIT05XQVJOSU5HUworSWYgdGhpcyBpcyBzZXQgdG8gYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nIGl0IGlzIGVxdWl2YWxlbnQgdG8KK3NwZWNpZnlpbmcgdGhlIFxmQlwtV1xmUCBvcHRpb24gZm9yIGVhY2ggc2VwYXJhdGUgdmFsdWUuCisuSVAgUFlUSE9OSEFTSFNFRUQKK0lmIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICJyYW5kb20iLCB0aGUgZWZmZWN0IGlzIHRoZSBzYW1lIGFzIHNwZWNpZnlpbmcKK3RoZSBcZkItUlxmUCBvcHRpb246IGEgcmFuZG9tIHZhbHVlIGlzIHVzZWQgdG8gc2VlZCB0aGUgaGFzaGVzIG9mIHN0ciwKK2J5dGVzIGFuZCBkYXRldGltZSBvYmplY3RzLgorCitJZiBQWVRIT05IQVNIU0VFRCBpcyBzZXQgdG8gYW4gaW50ZWdlciB2YWx1ZSwgaXQgaXMgdXNlZCBhcyBhIGZpeGVkIHNlZWQgZm9yCitnZW5lcmF0aW5nIHRoZSBoYXNoKCkgb2YgdGhlIHR5cGVzIGNvdmVyZWQgYnkgdGhlIGhhc2ggcmFuZG9taXphdGlvbi4gIEl0cworcHVycG9zZSBpcyB0byBhbGxvdyByZXBlYXRhYmxlIGhhc2hpbmcsIHN1Y2ggYXMgZm9yIHNlbGZ0ZXN0cyBmb3IgdGhlCitpbnRlcnByZXRlciBpdHNlbGYsIG9yIHRvIGFsbG93IGEgY2x1c3RlciBvZiBweXRob24gcHJvY2Vzc2VzIHRvIHNoYXJlIGhhc2gKK3ZhbHVlcy4KKworVGhlIGludGVnZXIgbXVzdCBiZSBhIGRlY2ltYWwgbnVtYmVyIGluIHRoZSByYW5nZSBbMCw0Mjk0OTY3Mjk1XS4gIFNwZWNpZnlpbmcKK3RoZSB2YWx1ZSAwIHdpbGwgbGVhZCB0byB0aGUgc2FtZSBoYXNoIHZhbHVlcyBhcyB3aGVuIGhhc2ggcmFuZG9taXphdGlvbiBpcworZGlzYWJsZWQuCisuU0ggQVVUSE9SCitUaGUgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb246IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YKKy5TSCBJTlRFUk5FVCBSRVNPVVJDRVMKK01haW4gd2Vic2l0ZTogIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8KKy5icgorRG9jdW1lbnRhdGlvbjogIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvCisuYnIKK0RldmVsb3BlciByZXNvdXJjZXM6ICBodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlLworLmJyCitEb3dubG9hZHM6ICBodHRwOi8vcHl0aG9uLm9yZy9kb3dubG9hZC8KKy5icgorTW9kdWxlIHJlcG9zaXRvcnk6ICBodHRwOi8vcHlwaS5weXRob24ub3JnLworLmJyCitOZXdzZ3JvdXBzOiAgY29tcC5sYW5nLnB5dGhvbiwgY29tcC5sYW5nLnB5dGhvbi5hbm5vdW5jZQorLlNIIExJQ0VOU0lORworUHl0aG9uIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGFuIE9wZW4gU291cmNlIGxpY2Vuc2UuICBTZWUgdGhlIGZpbGUKKyJMSUNFTlNFIiBpbiB0aGUgUHl0aG9uIHNvdXJjZSBkaXN0cmlidXRpb24gZm9yIGluZm9ybWF0aW9uIG9uIHRlcm1zICYKK2NvbmRpdGlvbnMgZm9yIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiBhbmQgZm9yIGEKK0RJU0NMQUlNRVIgT0YgQUxMIFdBUlJBTlRJRVMuCmRpZmYgLS1naXQgYS9zaGFyZS9wcmV0dHktcHJpbnRlcnMvbGlic3RkY3h4L2djYy00LjgvX19pbml0X18ucHkgYi9zaGFyZS9wcmV0dHktcHJpbnRlcnMvbGlic3RkY3h4L2djYy00LjguMy9fX2luaXRfXy5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2hhcmUvcHJldHR5LXByaW50ZXJzL2xpYnN0ZGN4eC9nY2MtNC44L19faW5pdF9fLnB5CnJlbmFtZSB0byBzaGFyZS9wcmV0dHktcHJpbnRlcnMvbGlic3RkY3h4L2djYy00LjguMy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvc2hhcmUvcHJldHR5LXByaW50ZXJzL2xpYnN0ZGN4eC9nY2MtNC44L3ByaW50ZXJzLnB5IGIvc2hhcmUvcHJldHR5LXByaW50ZXJzL2xpYnN0ZGN4eC9nY2MtNC44LjMvcHJpbnRlcnMucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNoYXJlL3ByZXR0eS1wcmludGVycy9saWJzdGRjeHgvZ2NjLTQuOC9wcmludGVycy5weQpyZW5hbWUgdG8gc2hhcmUvcHJldHR5LXByaW50ZXJzL2xpYnN0ZGN4eC9nY2MtNC44LjMvcHJpbnRlcnMucHkKZGlmZiAtLWdpdCBhL3NoYXJlL3ByZXR0eS1wcmludGVycy9saWJzdGRjeHgvZ2NjLTQuOS9wcmludGVycy5weSBiL3NoYXJlL3ByZXR0eS1wcmludGVycy9saWJzdGRjeHgvZ2NjLTQuOS9wcmludGVycy5weQppbmRleCAxZmEwOGZiLi42NWI4YTkzIDEwMDY0NAotLS0gYS9zaGFyZS9wcmV0dHktcHJpbnRlcnMvbGlic3RkY3h4L2djYy00LjkvcHJpbnRlcnMucHkKKysrIGIvc2hhcmUvcHJldHR5LXByaW50ZXJzL2xpYnN0ZGN4eC9nY2MtNC45L3ByaW50ZXJzLnB5CkBAIC00NDMsMTEgKzQ0MywxMiBAQAogCiAgICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFsKToKICAgICAgICAgc2VsZi52YWwgPSB2YWwKKyAgICAgICAgdmFsdHlwZSA9IHNlbGYudmFsLnR5cGUudGVtcGxhdGVfYXJndW1lbnQoMCkuc3RyaXBfdHlwZWRlZnMoKQorICAgICAgICBub2RldHlwZSA9IGdkYi5sb29rdXBfdHlwZSgnc3RkOjpfUmJfdHJlZV9ub2RlPCcgKyBzdHIodmFsdHlwZSkgKyAnPicpCisgICAgICAgIHNlbGYubGlua190eXBlID0gbm9kZXR5cGUuc3RyaXBfdHlwZWRlZnMoKS5wb2ludGVyKCkKIAogICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgotICAgICAgICB0eXBlbmFtZSA9IHN0cihzZWxmLnZhbC50eXBlLnN0cmlwX3R5cGVkZWZzKCkpICsgJzo6X0xpbmtfdHlwZScKLSAgICAgICAgbm9kZXR5cGUgPSBnZGIubG9va3VwX3R5cGUodHlwZW5hbWUpLnN0cmlwX3R5cGVkZWZzKCkKLSAgICAgICAgbm9kZSA9IHNlbGYudmFsLmNhc3Qobm9kZXR5cGUpLmRlcmVmZXJlbmNlKCkKKyAgICAgICAgbm9kZSA9IHNlbGYudmFsWydfTV9ub2RlJ10uY2FzdChzZWxmLmxpbmtfdHlwZSkuZGVyZWZlcmVuY2UoKQogICAgICAgICByZXR1cm4gZ2V0X3ZhbHVlX2Zyb21fUmJfdHJlZV9ub2RlKG5vZGUpCiAKIGNsYXNzIFN0ZERlYnVnSXRlcmF0b3JQcmludGVyOgpkaWZmIC0tZ2l0IGEvc2hhcmUvcHJldHR5LXByaW50ZXJzL3N0bHBvcnQvZ3BwZnMtMC4yL0NPUFlJTkcgYi9zaGFyZS9wcmV0dHktcHJpbnRlcnMvc3RscG9ydC9ncHBmcy0wLjIvQ09QWUlORwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQzMjU0MC4uMDAwMDAwMAotLS0gYS9zaGFyZS9wcmV0dHktcHJpbnRlcnMvc3RscG9ydC9ncHBmcy0wLjIvQ09QWUlORworKysgL2Rldi9udWxsCkBAIC0xLDY3NiArMCwwIEBACi0KLQkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCi0JCSAgICAgICBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNwotCi0gQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgotIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwotIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgotCi0JCQkgICAgUHJlYW1ibGUKLQotICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgotc29mdHdhcmUgYW5kIG90aGVyIGtpbmRzIG9mIHdvcmtzLgotCi0gIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAotdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIHRoZSB3b3Jrcy4gIEJ5IGNvbnRyYXN0LAotdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8KLXNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQotc29mdHdhcmUgZm9yIGFsbCBpdHMgdXNlcnMuICBXZSwgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdXNlIHRoZQotR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vc3Qgb2Ygb3VyIHNvZnR3YXJlOyBpdCBhcHBsaWVzIGFsc28gdG8KLWFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwoteW91ciBwcm9ncmFtcywgdG9vLgotCi0gIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKLXByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKLWhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKLXRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91Ci13YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldwotZnJlZSBwcm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCi0KLSAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBwcmV2ZW50IG90aGVycyBmcm9tIGRlbnlpbmcgeW91Ci10aGVzZSByaWdodHMgb3IgYXNraW5nIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4gIFRoZXJlZm9yZSwgeW91IGhhdmUKLWNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgoteW91IG1vZGlmeSBpdDogcmVzcG9uc2liaWxpdGllcyB0byByZXNwZWN0IHRoZSBmcmVlZG9tIG9mIG90aGVycy4KLQotICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCi1ncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBwYXNzIG9uIHRvIHRoZSByZWNpcGllbnRzIHRoZSBzYW1lCi1mcmVlZG9tcyB0aGF0IHlvdSByZWNlaXZlZC4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZQotb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKLWtub3cgdGhlaXIgcmlnaHRzLgotCi0gIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKLSgxKSBhc3NlcnQgY29weXJpZ2h0IG9uIHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBMaWNlbnNlCi1naXZpbmcgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IGl0LgotCi0gIEZvciB0aGUgZGV2ZWxvcGVycycgYW5kIGF1dGhvcnMnIHByb3RlY3Rpb24sIHRoZSBHUEwgY2xlYXJseSBleHBsYWlucwotdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIHNvZnR3YXJlLiAgRm9yIGJvdGggdXNlcnMnIGFuZAotYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwotY2hhbmdlZCwgc28gdGhhdCB0aGVpciBwcm9ibGVtcyB3aWxsIG5vdCBiZSBhdHRyaWJ1dGVkIGVycm9uZW91c2x5IHRvCi1hdXRob3JzIG9mIHByZXZpb3VzIHZlcnNpb25zLgotCi0gIFNvbWUgZGV2aWNlcyBhcmUgZGVzaWduZWQgdG8gZGVueSB1c2VycyBhY2Nlc3MgdG8gaW5zdGFsbCBvciBydW4KLW1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBzb2Z0d2FyZSBpbnNpZGUgdGhlbSwgYWx0aG91Z2ggdGhlIG1hbnVmYWN0dXJlcgotY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKLXByb3RlY3RpbmcgdXNlcnMnIGZyZWVkb20gdG8gY2hhbmdlIHRoZSBzb2Z0d2FyZS4gIFRoZSBzeXN0ZW1hdGljCi1wYXR0ZXJuIG9mIHN1Y2ggYWJ1c2Ugb2NjdXJzIGluIHRoZSBhcmVhIG9mIHByb2R1Y3RzIGZvciBpbmRpdmlkdWFscyB0bwotdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCi1oYXZlIGRlc2lnbmVkIHRoaXMgdmVyc2lvbiBvZiB0aGUgR1BMIHRvIHByb2hpYml0IHRoZSBwcmFjdGljZSBmb3IgdGhvc2UKLXByb2R1Y3RzLiAgSWYgc3VjaCBwcm9ibGVtcyBhcmlzZSBzdWJzdGFudGlhbGx5IGluIG90aGVyIGRvbWFpbnMsIHdlCi1zdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKLW9mIHRoZSBHUEwsIGFzIG5lZWRlZCB0byBwcm90ZWN0IHRoZSBmcmVlZG9tIG9mIHVzZXJzLgotCi0gIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuCi1TdGF0ZXMgc2hvdWxkIG5vdCBhbGxvdyBwYXRlbnRzIHRvIHJlc3RyaWN0IGRldmVsb3BtZW50IGFuZCB1c2Ugb2YKLXNvZnR3YXJlIG9uIGdlbmVyYWwtcHVycG9zZSBjb21wdXRlcnMsIGJ1dCBpbiB0aG9zZSB0aGF0IGRvLCB3ZSB3aXNoIHRvCi1hdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKLW1ha2UgaXQgZWZmZWN0aXZlbHkgcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHRoZSBHUEwgYXNzdXJlcyB0aGF0Ci1wYXRlbnRzIGNhbm5vdCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgcHJvZ3JhbSBub24tZnJlZS4KLQotICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAotbW9kaWZpY2F0aW9uIGZvbGxvdy4KLQotCQkgICAgICAgVEVSTVMgQU5EIENPTkRJVElPTlMKLQotICAwLiBEZWZpbml0aW9ucy4KLQotICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLQotICAiQ29weXJpZ2h0IiBhbHNvIG1lYW5zIGNvcHlyaWdodC1saWtlIGxhd3MgdGhhdCBhcHBseSB0byBvdGhlciBraW5kcyBvZgotd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KLSAKLSAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCi1MaWNlbnNlLiAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICAiTGljZW5zZWVzIiBhbmQKLSJyZWNpcGllbnRzIiBtYXkgYmUgaW5kaXZpZHVhbHMgb3Igb3JnYW5pemF0aW9ucy4KLQotICBUbyAibW9kaWZ5IiBhIHdvcmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrCi1pbiBhIGZhc2hpb24gcmVxdWlyaW5nIGNvcHlyaWdodCBwZXJtaXNzaW9uLCBvdGhlciB0aGFuIHRoZSBtYWtpbmcgb2YgYW4KLWV4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQotZWFybGllciB3b3JrIG9yIGEgd29yayAiYmFzZWQgb24iIHRoZSBlYXJsaWVyIHdvcmsuCi0KLSAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKLW9uIHRoZSBQcm9ncmFtLgotCi0gIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKLXBlcm1pc3Npb24sIHdvdWxkIG1ha2UgeW91IGRpcmVjdGx5IG9yIHNlY29uZGFyaWx5IGxpYWJsZSBmb3IKLWluZnJpbmdlbWVudCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcsIGV4Y2VwdCBleGVjdXRpbmcgaXQgb24gYQotY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKLWRpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlCi1wdWJsaWMsIGFuZCBpbiBzb21lIGNvdW50cmllcyBvdGhlciBhY3Rpdml0aWVzIGFzIHdlbGwuCi0KLSAgVG8gImNvbnZleSIgYSB3b3JrIG1lYW5zIGFueSBraW5kIG9mIHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlcgotcGFydGllcyB0byBtYWtlIG9yIHJlY2VpdmUgY29waWVzLiAgTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoCi1hIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgotCi0gIEFuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzICJBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIgotdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQotZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpCi10ZWxscyB0aGUgdXNlciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvIHRoZQotZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQotd29yayB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYKLXRoZSBpbnRlcmZhY2UgcHJlc2VudHMgYSBsaXN0IG9mIHVzZXIgY29tbWFuZHMgb3Igb3B0aW9ucywgc3VjaCBhcyBhCi1tZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgotCi0gIDEuIFNvdXJjZSBDb2RlLgotCi0gIFRoZSAic291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrCi1mb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICAiT2JqZWN0IGNvZGUiIG1lYW5zIGFueSBub24tc291cmNlCi1mb3JtIG9mIGEgd29yay4KLQotICBBICJTdGFuZGFyZCBJbnRlcmZhY2UiIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbAotc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgotaW50ZXJmYWNlcyBzcGVjaWZpZWQgZm9yIGEgcGFydGljdWxhciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgb25lIHRoYXQKLWlzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2luZyBpbiB0aGF0IGxhbmd1YWdlLgotCi0gIFRoZSAiU3lzdGVtIExpYnJhcmllcyIgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyCi10aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZgotcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgotQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0Ci1NYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4KLWltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCi0iTWFqb3IgQ29tcG9uZW50IiwgaW4gdGhpcyBjb250ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQKLShrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0KLShpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCi1wcm9kdWNlIHRoZSB3b3JrLCBvciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KLQotICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCi10aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlCi13b3JrKSBydW4gdGhlIG9iamVjdCBjb2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvCi1jb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKLVN5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUKLXByb2dyYW1zIHdoaWNoIGFyZSB1c2VkIHVubW9kaWZpZWQgaW4gcGVyZm9ybWluZyB0aG9zZSBhY3Rpdml0aWVzIGJ1dAotd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCi1pbmNsdWRlcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggc291cmNlIGZpbGVzIGZvcgotdGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5Ci1saW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKLXN1Y2ggYXMgYnkgaW50aW1hdGUgZGF0YSBjb21tdW5pY2F0aW9uIG9yIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRob3NlCi1zdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuCi0KLSAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCB1c2VycwotY2FuIHJlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nCi1Tb3VyY2UuCi0KLSAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhIHdvcmsgaW4gc291cmNlIGNvZGUgZm9ybSBpcyB0aGF0Ci1zYW1lIHdvcmsuCi0KLSAgMi4gQmFzaWMgUGVybWlzc2lvbnMuCi0KLSAgQWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YKLWNvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkCi1jb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCi1wZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiAgVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYQotY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzCi1jb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgotcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCi0KLSAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdAotY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMKLWluIGZvcmNlLiAgWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2UKLW9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQotd2l0aCBmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aAotdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8KLW5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKLWZvciB5b3UgbXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24KLWFuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZgoteW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KLQotICBDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlcgotdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCi1tYWtlcyBpdCB1bm5lY2Vzc2FyeS4KLQotICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgotCi0gIE5vIGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbAotbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCi0xMSBvZiB0aGUgV0lQTyBjb3B5cmlnaHQgdHJlYXR5IGFkb3B0ZWQgb24gMjAgRGVjZW1iZXIgMTk5Niwgb3IKLXNpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciByZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2gKLW1lYXN1cmVzLgotCi0gIFdoZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQKLWNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgotaXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0bwotdGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvcgotbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKLXVzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZgotdGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KLQotICA0LiBDb252ZXlpbmcgVmVyYmF0aW0gQ29waWVzLgotCi0gIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQotcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKLWFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsKLWtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQotbm9uLXBlcm1pc3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5IHRvIHRoZSBjb2RlOwota2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwKLXJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgotCi0gIFlvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwKLWFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCi0KLSAgNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy4KLQotICBZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvCi1wcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZQotdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6Ci0KLSAgICBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQKLSAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCi0KLSAgICBiKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcwotICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgotICAgIDcuICBUaGlzIHJlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1aXJlbWVudCBpbiBzZWN0aW9uIDQgdG8KLSAgICAia2VlcCBpbnRhY3QgYWxsIG5vdGljZXMiLgotCi0gICAgYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMKLSAgICBMaWNlbnNlIHRvIGFueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gIFRoaXMKLSAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNwotICAgIGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsCi0gICAgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuICBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8KLSAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90Ci0gICAgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24gaWYgeW91IGhhdmUgc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KLQotICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5Ci0gICAgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlCi0gICAgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIKLSAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KLQotICBBIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50Ci13b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAotYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwKLWluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4KLSJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAotdXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycwotYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiAgSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrCi1pbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgotcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KLQotICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KLQotICBZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcwotb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCi1tYWNoaW5lLXJlYWRhYmxlIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCi1pbiBvbmUgb2YgdGhlc2Ugd2F5czoKLQotICAgIGEpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKLSAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZQotICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KLSAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KLQotICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKLSAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IGEKLSAgICB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgYW5kIHZhbGlkIGZvciBhcwotICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAotICAgIG1vZGVsLCB0byBnaXZlIGFueW9uZSB3aG8gcG9zc2Vzc2VzIHRoZSBvYmplY3QgY29kZSBlaXRoZXIgKDEpIGEKLSAgICBjb3B5IG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYWxsIHRoZSBzb2Z0d2FyZSBpbiB0aGUKLSAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAotICAgIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZSwgZm9yIGEgcHJpY2Ugbm8KLSAgICBtb3JlIHRoYW4geW91ciByZWFzb25hYmxlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHRoaXMKLSAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCi0gICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJnZS4KLQotICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCi0gICAgd3JpdHRlbiBvZmZlciB0byBwcm92aWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoaXMKLSAgICBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgb2NjYXNpb25hbGx5IGFuZCBub25jb21tZXJjaWFsbHksIGFuZAotICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAotICAgIHdpdGggc3Vic2VjdGlvbiA2Yi4KLQotICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCi0gICAgcGxhY2UgKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gdGhlCi0gICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW4gdGhlIHNhbWUgd2F5IHRocm91Z2ggdGhlIHNhbWUgcGxhY2UgYXQgbm8KLSAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKLSAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gIElmIHRoZSBwbGFjZSB0bwotICAgIGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZQotICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQotICAgIHRoYXQgc3VwcG9ydHMgZXF1aXZhbGVudCBjb3B5aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbgotICAgIGNsZWFyIGRpcmVjdGlvbnMgbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlCi0gICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQotICAgIENvcnJlc3BvbmRpbmcgU291cmNlLCB5b3UgcmVtYWluIG9ibGlnYXRlZCB0byBlbnN1cmUgdGhhdCBpdCBpcwotICAgIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8gc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCi0KLSAgICBlKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkCi0gICAgeW91IGluZm9ybSBvdGhlciBwZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcKLSAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCi0gICAgY2hhcmdlIHVuZGVyIHN1YnNlY3Rpb24gNmQuCi0KLSAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCi1mcm9tIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBuZWVkIG5vdCBiZQotaW5jbHVkZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLgotCi0gIEEgIlVzZXIgUHJvZHVjdCIgaXMgZWl0aGVyICgxKSBhICJjb25zdW1lciBwcm9kdWN0Iiwgd2hpY2ggbWVhbnMgYW55Ci10YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJzb25hbCwgZmFtaWx5LAotb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgotaW50byBhIGR3ZWxsaW5nLiAgSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0LAotZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuICBGb3IgYSBwYXJ0aWN1bGFyCi1wcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKLXR5cGljYWwgb3IgY29tbW9uIHVzZSBvZiB0aGF0IGNsYXNzIG9mIHByb2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cwotb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIKLWFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAotaXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwKLWNvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50Ci10aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KLQotICAiSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIiBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsCi1wcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKLWFuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlciBQcm9kdWN0IGZyb20KLWEgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGUgaW5mb3JtYXRpb24gbXVzdAotc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKLWNvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoIHNvbGVseSBiZWNhdXNlCi1tb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS4KLQotICBJZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvcgotc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMKLXBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQotVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYQotZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlzIGNoYXJhY3Rlcml6ZWQpLCB0aGUKLUNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCi1ieSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLiAgQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkKLWlmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsCi1tb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCi1iZWVuIGluc3RhbGxlZCBpbiBST00pLgotCi0gIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKLXJlcXVpcmVtZW50IHRvIGNvbnRpbnVlIHRvIHByb3ZpZGUgc3VwcG9ydCBzZXJ2aWNlLCB3YXJyYW50eSwgb3IgdXBkYXRlcwotZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LCBvciBmb3IKLXRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKLW5ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kCi1hZHZlcnNlbHkgYWZmZWN0cyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXR3b3JrIG9yIHZpb2xhdGVzIHRoZSBydWxlcyBhbmQKLXByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCi0KLSAgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gcHJvdmlkZWQsCi1pbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5Ci1kb2N1bWVudGVkIChhbmQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbgotc291cmNlIGNvZGUgZm9ybSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yCi11bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KLQotICA3LiBBZGRpdGlvbmFsIFRlcm1zLgotCi0gICJBZGRpdGlvbmFsIHBlcm1pc3Npb25zIiBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzCi1MaWNlbnNlIGJ5IG1ha2luZyBleGNlcHRpb25zIGZyb20gb25lIG9yIG1vcmUgb2YgaXRzIGNvbmRpdGlvbnMuCi1BZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCi1iZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50Ci10aGF0IHRoZXkgYXJlIHZhbGlkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiAgSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucwotYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQotdW5kZXIgdGhvc2UgcGVybWlzc2lvbnMsIGJ1dCB0aGUgZW50aXJlIFByb2dyYW0gcmVtYWlucyBnb3Zlcm5lZCBieQotdGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zLgotCi0gIFdoZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KLXJlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZgotaXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgotcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pICBZb3UgbWF5IHBsYWNlCi1hZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssCi1mb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCi0KLSAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91Ci1hZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCi10aGF0IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0ZXJtczoKLQotICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQotICAgIHRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCi0KLSAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKLSAgICBhdXRob3IgYXR0cmlidXRpb25zIGluIHRoYXQgbWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlIExlZ2FsCi0gICAgTm90aWNlcyBkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3IKLQotICAgIGMpIFByb2hpYml0aW5nIG1pc3JlcHJlc2VudGF0aW9uIG9mIHRoZSBvcmlnaW4gb2YgdGhhdCBtYXRlcmlhbCwgb3IKLSAgICByZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbgotICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKLQotICAgIGQpIExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNlbnNvcnMgb3IKLSAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKLQotICAgIGUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUKLSAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKLQotICAgIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQKLSAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgotICAgIGl0KSB3aXRoIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIG9mIGxpYWJpbGl0eSB0byB0aGUgcmVjaXBpZW50LCBmb3IKLSAgICBhbnkgbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uCi0gICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgotCi0gIEFsbCBvdGhlciBub24tcGVybWlzc2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkICJmdXJ0aGVyCi1yZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91Ci1yZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcwotZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggYSB0ZXJtIHRoYXQgaXMgYSBmdXJ0aGVyCi1yZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCi1hIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMKLUxpY2Vuc2UsIHlvdSBtYXkgYWRkIHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcwotb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKLW5vdCBzdXJ2aXZlIHN1Y2ggcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nLgotCi0gIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKLW11c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZQotYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nCi13aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgotCi0gIEFkZGl0aW9uYWwgdGVybXMsIHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmUsIG1heSBiZSBzdGF0ZWQgaW4gdGhlCi1mb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwotdGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5LgotCi0gIDguIFRlcm1pbmF0aW9uLgotCi0gIFlvdSBtYXkgbm90IHByb3BhZ2F0ZSBvciBtb2RpZnkgYSBjb3ZlcmVkIHdvcmsgZXhjZXB0IGFzIGV4cHJlc3NseQotcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgotbW9kaWZ5IGl0IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyCi10aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkCi1wYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCi0KLSAgSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIKLWxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQotcHJvdmlzaW9uYWxseSwgdW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZAotZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodAotaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKLXByaW9yIHRvIDYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KLQotICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKLXJlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQotdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQotcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Ci1jb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCi15b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KLQotICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQotbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCi10aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5Ci1yZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRoZSBzYW1lCi1tYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLgotCi0gIDkuIEFjY2VwdGFuY2UgTm90IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLgotCi0gIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgotcnVuIGEgY29weSBvZiB0aGUgUHJvZ3JhbS4gIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yawotb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24KLXRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCi1ub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IKLW1vZGlmeSBhbnkgY292ZXJlZCB3b3JrLiAgVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvCi1ub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKLWNvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uCi0KLSAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgotCi0gIEVhY2ggdGltZSB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkKLXJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZAotcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuICBZb3UgYXJlIG5vdCByZXNwb25zaWJsZQotZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCi0KLSAgQW4gImVudGl0eSB0cmFuc2FjdGlvbiIgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbgotb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbgotb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKLXdvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0Ci10cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIKLWxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZAotZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUKLUNvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZgotdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgotCi0gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZQotcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKLW5vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZgotcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgeW91IG1heSBub3QgaW5pdGlhdGUgbGl0aWdhdGlvbgotKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKLWFueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvcgotc2FsZSwgb3IgaW1wb3J0aW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LgotCi0gIDExLiBQYXRlbnRzLgotCi0gIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKLUxpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGJhc2VkLiAgVGhlCi13b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzICJjb250cmlidXRvciB2ZXJzaW9uIi4KLQotICBBIGNvbnRyaWJ1dG9yJ3MgImVzc2VudGlhbCBwYXRlbnQgY2xhaW1zIiBhcmUgYWxsIHBhdGVudCBjbGFpbXMKLW93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IKLWhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZAotYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLAotYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEKLWNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCi1wdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQKLXBhdGVudCBzdWJsaWNlbnNlcyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgotdGhpcyBMaWNlbnNlLgotCi0gIEVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCi1wYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KLW1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZAotcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi4KLQotICBJbiB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEgInBhdGVudCBsaWNlbnNlIiBpcyBhbnkgZXhwcmVzcwotYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50Ci0oc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCi1zdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiAgVG8gImdyYW50IiBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYQotcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEKLXBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KLQotICBJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLAotYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKLXRvIGNvcHksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJvdWdoIGEKLXB1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsCi10aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCi1hdmFpbGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhlIGJlbmVmaXQgb2YgdGhlCi1wYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lcgotY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudAotbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuICAiS25vd2luZ2x5IHJlbHlpbmciIG1lYW5zIHlvdSBoYXZlCi1hY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUKLWNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKLWluIGEgY291bnRyeSwgd291bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4gdGhhdAotY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KLSAgCi0gIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKLWFycmFuZ2VtZW50LCB5b3UgY29udmV5LCBvciBwcm9wYWdhdGUgYnkgcHJvY3VyaW5nIGNvbnZleWFuY2Ugb2YsIGEKLWNvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcwotcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Ci1vciBjb252ZXkgYSBzcGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmssIHRoZW4gdGhlIHBhdGVudCBsaWNlbnNlCi15b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZAotd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCi0KLSAgQSBwYXRlbnQgbGljZW5zZSBpcyAiZGlzY3JpbWluYXRvcnkiIGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgd2l0aGluCi10aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwotY29uZGl0aW9uZWQgb24gdGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgcmlnaHRzIHRoYXQgYXJlCi1zcGVjaWZpY2FsbHkgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkCi13b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwotaW4gdGhlIGJ1c2luZXNzIG9mIGRpc3RyaWJ1dGluZyBzb2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudAotdG8gdGhlIHRoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcKLXRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQotcGFydGllcyB3aG8gd291bGQgcmVjZWl2ZSB0aGUgY292ZXJlZCB3b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5Ci1wYXRlbnQgbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3b3JrCi1jb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQotZm9yIGFuZCBpbiBjb25uZWN0aW9uIHdpdGggc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRoYXQKLWNvbnRhaW4gdGhlIGNvdmVyZWQgd29yaywgdW5sZXNzIHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwKLW9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCi0KLSAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZwotYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKLW90aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4KLQotICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KLQotICBJZiBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCi1vdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90Ci1leGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdCBjb252ZXkgYQotY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCi1MaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQotbm90IGNvbnZleSBpdCBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlIHRvIHRlcm1zIHRoYXQgb2JsaWdhdGUgeW91Ci10byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVydGhlciBjb252ZXlpbmcgZnJvbSB0aG9zZSB0byB3aG9tIHlvdSBjb252ZXkKLXRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwotTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gY29udmV5aW5nIHRoZSBQcm9ncmFtLgotCi0gIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotCi0gIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUKLXBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKLXVuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGludG8gYSBzaW5nbGUKLWNvbWJpbmVkIHdvcmssIGFuZCB0byBjb252ZXkgdGhlIHJlc3VsdGluZyB3b3JrLiAgVGhlIHRlcm1zIG9mIHRoaXMKLUxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLAotYnV0IHRoZSBzcGVjaWFsIHJlcXVpcmVtZW50cyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotc2VjdGlvbiAxMywgY29uY2VybmluZyBpbnRlcmFjdGlvbiB0aHJvdWdoIGEgbmV0d29yayB3aWxsIGFwcGx5IHRvIHRoZQotY29tYmluYXRpb24gYXMgc3VjaC4KLQotICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YKLXRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKLWJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwotYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCi0KLSAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKLVByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBHZW5lcmFsCi1QdWJsaWMgTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZQotb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKLXZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi1Gb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZQotR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCi1ieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotCi0gIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKLXZlcnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzCi1wdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91Ci10byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KLQotICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudAotcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQotYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYQotbGF0ZXIgdmVyc2lvbi4KLQotICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KLQotICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCi1BUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUCi1IT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZCi1PRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLVRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLVBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNCi1JUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKLUFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KLQotICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCi0KLSAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCi1XSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTCi1USEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkKLUdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRQotVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgotREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQKLVBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLAotRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotU1VDSCBEQU1BR0VTLgotCi0gIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCi0KLSAgSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkCi1hYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKLXJldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcwotYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQotUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQotY29weSBvZiB0aGUgUHJvZ3JhbSBpbiByZXR1cm4gZm9yIGEgZmVlLgotCi0JCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCi0KLQkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCi0KLSAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAotcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAotZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCi0KLSAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKLXRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKLXN0YXRlIHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKLXRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgotCi0gICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KLSAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi1BbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KLQotICBJZiB0aGUgcHJvZ3JhbSBkb2VzIHRlcm1pbmFsIGludGVyYWN0aW9uLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0Ci1ub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6Ci0KLSAgICA8cHJvZ3JhbT4gIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+Ci0gICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KLSAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0Ci0gICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgotCi1UaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKLXBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB5b3VyIHByb2dyYW0ncyBjb21tYW5kcwotbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQgdXNlIGFuICJhYm91dCBib3giLgotCi0gIFlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciBzY2hvb2wsCi1pZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LgotRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKLTxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLQotICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCi1pbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UKLW1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aAotdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCi1QdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4gIEJ1dCBmaXJzdCwgcGxlYXNlIHJlYWQKLTxodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS93aHktbm90LWxncGwuaHRtbD4uCi0KZGlmZiAtLWdpdCBhL3NoYXJlL3ByZXR0eS1wcmludGVycy9zdGxwb3J0L2dwcGZzLTAuMi9DaGFuZ2VMb2cgYi9zaGFyZS9wcmV0dHktcHJpbnRlcnMvc3RscG9ydC9ncHBmcy0wLjIvQ2hhbmdlTG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWZlMTYxLi4wMDAwMDAwCi0tLSBhL3NoYXJlL3ByZXR0eS1wcmludGVycy9zdGxwb3J0L2dwcGZzLTAuMi9DaGFuZ2VMb2cKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1ncHBmcyAoMC4yKQotCi0gICogQWRkIHN1cHBvcnQgZm9yIHN0ZDo6dHIxOjp1bm9yZGVyZWRfe211bHRpLH17bWFwLHNldH0sIHN0ZDo6YXV0b19wdHIsCi0gICAgc3RkOjp0cjE6OnNoYXJlZF9wdHIgYW5kIHN0ZDo6dHIxOjp3ZWFrX3B0ci4KLSAgKiBGaXggZGlzcGxheSBvZiBlbXB0eSBzdHJpbmdzIHdpdGggU1RMcG9ydCA1LjAueCBpZgotICAgIF9TVExQX0ZPUkNFX1NUUklOR19URVJNSU5BVElPTiBpcyBub3QgZW5hYmxlZC4KLQotIC0tIEpvYWNoaW0gUmVpY2hlbCA8am9hY2hpbS5yZWljaGVsQGdteC5kZT4gIE1vbiwgMDQgT2N0IDIwMTAgMjA6MTA6MTQgKzAyMDAKLQotZ3BwZnMgKDAuMSkKLQotICAqIEluaXRpYWwgcmVsZWFzZS4KLQotIC0tIEpvYWNoaW0gUmVpY2hlbCA8am9hY2hpbS5yZWljaGVsQGdteC5kZT4gIFRodSwgMzAgU2VwIDIwMTAgMTg6NDA6NDIgKzAyMDAKZGlmZiAtLWdpdCBhL3NoYXJlL3ByZXR0eS1wcmludGVycy9zdGxwb3J0L2dwcGZzLTAuMi9SRUFETUUgYi9zaGFyZS9wcmV0dHktcHJpbnRlcnMvc3RscG9ydC9ncHBmcy0wLjIvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmYxOGM2Li4wMDAwMDAwCi0tLSBhL3NoYXJlL3ByZXR0eS1wcmludGVycy9zdGxwb3J0L2dwcGZzLTAuMi9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1HREIgcHJldHR5IHByaW50ZXJzIGZvciBTVExwb3J0Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoaXMgcHl0aG9uIG1vZHVsZSBwcm92aWRlcyBHREIgcHJldHR5IHByaW50ZXJzIGZvciB0aGUgY29udGFpbmVycyBmcm9tCi1TVExwb3J0LiBJdCBpcyBiYXNlZCBvbiBhIHNpbWlsYXIgcHl0aG9uIG1vZHVsZSBmb3IgbGlic3RkYysrIFsxXS4gSXQgaGFzCi1iZWVuIHRlc3RlZCB3aXRoIEdEQiA3LjAuMS83LjIgYW5kIFNUTHBvcnQgNC42LjIvNS4wLjMvNS4xLjcvNS4yLjEuCi0KLVsxXSBzdm46Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rL2xpYnN0ZGMrKy12My9weXRob24KLQotCi1JbnN0YWxsYXRpb24KLS0tLS0tLS0tLS0tLQotCi1UbyBpbnN0YWxsIHRoZSBweXRob24gbW9kdWxlIGNvcHkgdGhlICJzdGxwb3J0IiBzdWJkaXJlY3RvcnkgdG8gc29tZSBwbGFjZS4KLVRvIGVuYWJsZSB0aGUgcHJldHR5IHByaW50ZXIgYWRkIHRoZSBmb2xsb3dpbmcgY29kZSB0byAkSE9NRS8uZ2RiaW5pdDoKLQotICAgIHB5dGhvbgotICAgIGltcG9ydCBzeXMKLQotICAgIHN5cy5wYXRoLmluc2VydCAoMCwgJy9wYXRoL3RvL2Rpci9jb250YWluaW5nL3RoZS9zdGxwb3J0L2RpcicpCi0gICAgaW1wb3J0IHN0bHBvcnQucHJpbnRlcnMKLSAgICBzdGxwb3J0LnByaW50ZXJzLnJlZ2lzdGVyX3N0bHBvcnRfcHJpbnRlcnMgKE5vbmUpCi0KLSAgICAjIHNlZSB0aGUgcHl0aG9uIG1vZHVsZSBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGVzZSBvcHRpb25zCi0gICAgIyBzdGxwb3J0LnByaW50ZXJzLnN0bHBvcnRfdmVyc2lvbiAgICAgICAgICAgPSA1LjIKLSAgICAjIHN0bHBvcnQucHJpbnRlcnMucHJpbnRfdmVjdG9yX3dpdGhfaW5kaWNlcyA9IEZhbHNlCi0gICAgCi0gICAgZW5kCi0KLQotVGVzdGluZwotLS0tLS0tLQotCi1UbyB0ZXN0IHRoZSBwcmV0dHkgcHJpbnRlcnMsIGdvIHRvIHRoZSB0ZXN0IGRpcmVjdG9yeSBhbmQgc2V0IHVwIHRoZSBTVExwb3J0Ci1kaXJlY3RvcnkgaW4gdGhlIE1ha2VmaWxlLiBDYWxsaW5nIG1ha2Ugc2hvdWxkIHRoZW4gY29tcGlsZSB0d28gZXhlY3V0YWJsZXMKLSh3aXRoIGFuZCB3aXRob3V0IC1EX1NUTFBfREVCVUcpIGFuZCBpbnZva2UgR0RCIHdpdGggdGhlIHN1cHBsaWVkIHNjcmlwdC4gSWYKLXRoZSBwcmV0dHkgcHJpbnRlcnMgd29yayB0aGUgdmFyaWFibGVzIGZyb20gdGVzdC5jcHAgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhCi1jb252ZW5pZW50IHdheS4KLQotTm90ZSB0aGF0IEdEQiBwcmVmZXJzIHB5dGhvbiBtb2R1bGVzIGZyb20gJEhPTUUvLmdkYmluaXQgb3ZlciB0aG9zZSBmcm9tCi0uZ2RiaW5pdCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gSWYgeW91IGFkYXB0ZWQgJEhPTUUvLmdkYmluaXQgYXMKLWRlc2NyaWJlZCBhYm92ZSB0aGUgbG9jYXRpb24gdGhlcmUgd2lsbCBiZSB1c2VkLiBPdGhlcndpc2UsIHRlc3QvLmdkYmluaXQgd2lsbAotbG9hZCBzdGxwb3J0L3ByaW50ZXJzLnB5LgpkaWZmIC0tZ2l0IGEvc2hhcmUvcHJldHR5LXByaW50ZXJzL3N0bHBvcnQvZ3BwZnMtMC4yL3N0bHBvcnQvX19pbml0X18ucHkgYi9zaGFyZS9wcmV0dHktcHJpbnRlcnMvc3RscG9ydC9ncHBmcy0wLjIvc3RscG9ydC9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGIxMzc4OS4uMDAwMDAwMAotLS0gYS9zaGFyZS9wcmV0dHktcHJpbnRlcnMvc3RscG9ydC9ncHBmcy0wLjIvc3RscG9ydC9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLQpkaWZmIC0tZ2l0IGEvc2hhcmUvcHJldHR5LXByaW50ZXJzL3N0bHBvcnQvZ3BwZnMtMC4yL3N0bHBvcnQvcHJpbnRlcnMucHkgYi9zaGFyZS9wcmV0dHktcHJpbnRlcnMvc3RscG9ydC9ncHBmcy0wLjIvc3RscG9ydC9wcmludGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgyZTYyYy4uMDAwMDAwMAotLS0gYS9zaGFyZS9wcmV0dHktcHJpbnRlcnMvc3RscG9ydC9ncHBmcy0wLjIvc3RscG9ydC9wcmludGVycy5weQorKysgL2Rldi9udWxsCkBAIC0xLDcyNyArMCwwIEBACi0jIEdEQiBwcmV0dHkgcHJpbnRlcnMgZm9yIFNUTHBvcnQuCi0jCi0jIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEpvYWNoaW0gUmVpY2hlbAotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLQotCi0jIHB5bGludDogZGlzYWJsZT1DMDEwMyxDMDExMSxSMDIwMSxSMDkwMwotCi0KLWltcG9ydCBnZGIKLWltcG9ydCByZQotCi0KLSMgU2V0IHRoZSBTVExwb3J0IHZlcnNpb24gd2hpY2ggaXMgbmVlZGVkIGZvciBhIGZldyBmZWF0dXJlcy4KLSMKLSMgLSBmb3Igc3RkOjpsaXN0OgotIyAgIFNUTHBvcnQgb2xkZXIgdGhhbiA1LjA/Ci0jIC0gZm9yIHN0ZDo6ZGVxdWUsIHN0ZDo6c3RhY2ssIGFuZCBzdGQ6OnF1ZXVlIG9uIDY0Yml0IHN5c3RlbXM6Ci0jICAgU1RMcG9ydCBvbGRlciB0aGFuIDUuMj8KLXN0bHBvcnRfdmVyc2lvbiA9IDUuMgotCi0jIEluZGljYXRlcyB3aGV0aGVyIHN0ZDo6dmVjdG9yIGlzIHByaW50ZWQgd2l0aCBpbmRpY2VzLgotcHJpbnRfdmVjdG9yX3dpdGhfaW5kaWNlcyA9IEZhbHNlCi0KLQotZGVmIGxvb2t1cF9zdGxwb3J0X3R5cGUgKHR5cGVuYW1lKToKLSAgICAiTG9vayB1cCBhIHR5cGUgaW4gdGhlIHB1YmxpYyBTVExwb3J0IG5hbWVzcGFjZS4iCi0KLSAgICBuYW1lc3BhY2VzID0gWydzdGQ6OicsICdzdGxwZF9zdGQ6OicsICdzdGxwX3N0ZDo6JywgJ19TVEw6OiddCi0gICAgZm9yIG5hbWVzcGFjZSBpbiBuYW1lc3BhY2VzOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gZ2RiLmxvb2t1cF90eXBlIChuYW1lc3BhY2UgKyB0eXBlbmFtZSkKLSAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLQotZGVmIGxvb2t1cF9zdGxwb3J0X3ByaXZfdHlwZSAodHlwZW5hbWUpOgotICAgICJMb29rIHVwIGEgdHlwZSBpbiB0aGUgcHJpdmF0ZSBTVExwb3J0IG5hbWVzcGFjZS4iCi0KLSAgICBuYW1lc3BhY2VzID0gWydzdGQ6OnByaXY6OicsICdzdGxwZF9zdGQ6OnByaXY6OicsICdzdGxwX3ByaXY6OicsICdzdGxwX3N0ZDo6cHJpdjo6JywKLSAgICAgICAgICAgICAgICAgICdzdGxwZF9zdGQ6OicsICdzdGxwX3N0ZDo6JywgJ19TVEw6OiddCi0gICAgZm9yIG5hbWVzcGFjZSBpbiBuYW1lc3BhY2VzOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gZ2RiLmxvb2t1cF90eXBlIChuYW1lc3BhY2UgKyB0eXBlbmFtZSkKLSAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLQotCi1kZWYgZ2V0X25vbl9kZWJ1Z19pbXBsICh2YWx1ZSwgbWVtYmVyID0gTm9uZSk6Ci0gICAgIlJldHVybiB0aGUgbm9uLWRlYnVnIGltcGxlbWVudGF0aW9uIG9mIHZhbHVlIG9yIHZhbHVlW21lbWJlcl0uIgotICAgIGlmIG1lbWJlcjoKLSAgICAgICAgdmFsdWUgPSB2YWx1ZVttZW1iZXJdCi0gICAgdHJ5OgotICAgICAgICByZXR1cm4gdmFsdWVbJ19NX25vbl9kYmdfaW1wbCddCi0gICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKLSAgICAgICAgcmV0dXJuIHZhbHVlCi0KLQotY2xhc3MgUmJ0cmVlSXRlcmF0b3I6Ci0KLSAgICBkZWYgX19pbml0X18gKHNlbGYsIHJidHJlZSk6Ci0gICAgICAgIHRyZWUgPSBnZXRfbm9uX2RlYnVnX2ltcGwgKHJidHJlZSAsICdfTV90JykKLSAgICAgICAgc2VsZi5zaXplID0gdHJlZVsnX01fbm9kZV9jb3VudCddCi0gICAgICAgIHNlbGYubm9kZSA9IHRyZWVbJ19NX2hlYWRlciddWydfTV9kYXRhJ11bJ19NX2xlZnQnXQotICAgICAgICBzZWxmLmNvdW50ID0gMAotCi0gICAgZGVmIF9faXRlcl9fIChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2xlbl9fIChzZWxmKToKLSAgICAgICAgcmV0dXJuIGludCAoc2VsZi5zaXplKQotCi0gICAgZGVmIG5leHQgKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmNvdW50ID09IHNlbGYuc2l6ZToKLSAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLSAgICAgICAgcmVzdWx0ID0gc2VsZi5ub2RlCi0gICAgICAgIHNlbGYuY291bnQgKz0gMQotICAgICAgICBpZiBzZWxmLmNvdW50IDwgc2VsZi5zaXplOgotICAgICAgICAgICAgbm9kZSA9IHNlbGYubm9kZQotICAgICAgICAgICAgIyBJcyB0aGVyZSBhIHJpZ2h0IGNoaWxkPwotICAgICAgICAgICAgaWYgbm9kZS5kZXJlZmVyZW5jZSgpWydfTV9yaWdodCddOgotICAgICAgICAgICAgICAgICMgV2FsayBkb3duIHRvIGxlZnQtbW9zdCBjaGlsZCBpbiByaWdodCBzdWJ0cmVlLgotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmRlcmVmZXJlbmNlKClbJ19NX3JpZ2h0J10KLSAgICAgICAgICAgICAgICB3aGlsZSBub2RlLmRlcmVmZXJlbmNlKClbJ19NX2xlZnQnXToKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUuZGVyZWZlcmVuY2UoKVsnX01fbGVmdCddCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgV2FsayB1cCB0byBmaXJzdCBwYXJlbnQgcmVhY2hlZCB2aWEgbGVmdCBzdWJ0cmVlLgotICAgICAgICAgICAgICAgIHBhcmVudCA9IG5vZGUuZGVyZWZlcmVuY2UoKVsnX01fcGFyZW50J10KLSAgICAgICAgICAgICAgICB3aGlsZSBub2RlID09IHBhcmVudC5kZXJlZmVyZW5jZSgpWydfTV9yaWdodCddOgotICAgICAgICAgICAgICAgICAgICBub2RlID0gcGFyZW50Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5kZXJlZmVyZW5jZSgpWydfTV9wYXJlbnQnXQotICAgICAgICAgICAgICAgIG5vZGUgPSBwYXJlbnQKLSAgICAgICAgICAgIHNlbGYubm9kZSA9IG5vZGUKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0KLWNsYXNzIEJpdHNldFByaW50ZXI6Ci0gICAgIlByZXR0eSBwcmludGVyIGZvciBzdGQ6OmJpdHNldC4iCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZW5hbWUsIHZhbCk6Ci0gICAgICAgIHNlbGYudHlwZW5hbWUgPSB0eXBlbmFtZQotICAgICAgICBzZWxmLnZhbCAgICAgID0gdmFsCi0KLSAgICBkZWYgdG9fc3RyaW5nIChzZWxmKToKLSAgICAgICAgIyBJZiB0ZW1wbGF0ZV9hcmd1bWVudCBoYW5kbGVkIHZhbHVlcywgd2UgY291bGQgcHJpbnQgdGhlCi0gICAgICAgICMgc2l6ZS4gIE9yIHdlIGNvdWxkIHVzZSBhIHJlZ2V4cCBvbiB0aGUgdHlwZS4KLSAgICAgICAgcmV0dXJuICclcycgJSAoc2VsZi50eXBlbmFtZSkKLQotICAgIGRlZiBjaGlsZHJlbiAoc2VsZik6Ci0gICAgICAgIHdvcmRzID0gc2VsZi52YWxbJ19NX3cnXQotCi0gICAgICAgICMgVGhlIF9NX3cgbWVtYmVyIGNhbiBiZSBlaXRoZXIgYW4gdW5zaWduZWQgbG9uZywgb3IgYW4KLSAgICAgICAgIyBhcnJheS4gIFRoaXMgZGVwZW5kcyBvbiB0aGUgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gdXNlZC4KLSAgICAgICAgIyBJZiBpdCBpcyBhIHNpbmdsZSBsb25nLCBjb252ZXJ0IHRvIGEgc2luZ2xlIGVsZW1lbnQgbGlzdC4KLSAgICAgICAgaWYgd29yZHMudHlwZS5jb2RlID09IGdkYi5UWVBFX0NPREVfQVJSQVk6Ci0gICAgICAgICAgICB3b3JkX3NpemUgPSB3b3Jkcy50eXBlLnRhcmdldCAoKS5zaXplb2YKLSAgICAgICAgICAgIG5fd29yZHMgICA9IHdvcmRzLnR5cGUuc2l6ZW9mIC8gd29yZF9zaXplCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB3b3JkX3NpemUgPSB3b3Jkcy50eXBlLnNpemVvZiAKLSAgICAgICAgICAgIG5fd29yZHMgICA9IDEKLSAgICAgICAgICAgIHdvcmRzICAgICA9IFt3b3Jkc10KLQotICAgICAgICByZXN1bHQgPSBbXQotICAgICAgICB3b3JkID0gMAotICAgICAgICB3aGlsZSB3b3JkIDwgbl93b3JkczoKLSAgICAgICAgICAgIHcgPSB3b3Jkc1t3b3JkXQotICAgICAgICAgICAgYml0ID0gMAotICAgICAgICAgICAgd2hpbGUgdyAhPSAwOgotICAgICAgICAgICAgICAgIGlmIHcgJiAxOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kICgoJ1slZF0nICUgKHdvcmQgKiB3b3JkX3NpemUgKiA4ICsgYml0KSwgMSkpCi0gICAgICAgICAgICAgICAgYml0ICs9IDEKLSAgICAgICAgICAgICAgICB3ID0gdyA+PiAxCi0gICAgICAgICAgICB3b3JkICs9IDEKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0KLWNsYXNzIERlcXVlUHJpbnRlcjoKLSAgICAiUHJldHR5IHByaW50ZXIgZm9yIHN0ZDo6ZGVxdWUuIgotCi0gICAgY2xhc3MgSXRlcmF0b3I6Ci0gICAgICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgc3RhcnRfbm9kZSwgc3RhcnRfY3VyLCBzdGFydF9sYXN0LAotICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaF9jdXIsIGJ1ZmZlcl9zaXplKToKLSAgICAgICAgICAgIHNlbGYubm9kZSAgICAgICAgPSBzdGFydF9ub2RlCi0gICAgICAgICAgICBzZWxmLml0ZW0gICAgICAgID0gc3RhcnRfY3VyCi0gICAgICAgICAgICBzZWxmLm5vZGVfbGFzdCAgID0gc3RhcnRfbGFzdAotICAgICAgICAgICAgc2VsZi5sYXN0ICAgICAgICA9IGZpbmlzaF9jdXIKLSAgICAgICAgICAgIHNlbGYuYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZQotICAgICAgICAgICAgc2VsZi5jb3VudCAgICAgICA9IDAKLQotICAgICAgICBkZWYgX19pdGVyX18gKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgICAgICBkZWYgbmV4dCAoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLml0ZW0gPT0gc2VsZi5sYXN0OgotICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLSAgICAgICAgICAgIHJlc3VsdCA9ICgnWyVkXScgJSBzZWxmLmNvdW50LCBzZWxmLml0ZW0uZGVyZWZlcmVuY2UoKSkKLSAgICAgICAgICAgIHNlbGYuY291bnQgKz0gMQotICAgICAgICAgICAgc2VsZi5pdGVtICArPSAxCi0gICAgICAgICAgICBpZiBzZWxmLml0ZW0gPT0gc2VsZi5ub2RlX2xhc3Q6Ci0gICAgICAgICAgICAgICAgc2VsZi5ub2RlICs9IDEKLSAgICAgICAgICAgICAgICBzZWxmLml0ZW0gPSBzZWxmLm5vZGVbMF0KLSAgICAgICAgICAgICAgICBzZWxmLm5vZGVfbGFzdCA9IHNlbGYuaXRlbSArIHNlbGYuYnVmZmVyX3NpemUKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQKLQotICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgdHlwZW5hbWUsIHZhbCk6Ci0gICAgICAgIHNlbGYudHlwZW5hbWUgPSB0eXBlbmFtZQotICAgICAgICBzZWxmLnZhbCA9IGdldF9ub25fZGVidWdfaW1wbCAodmFsKQotICAgICAgICBzaXplID0gdmFsLnR5cGUudGVtcGxhdGVfYXJndW1lbnQoMCkuc2l6ZW9mCi0gICAgICAgICMgc2VlIE1BWF9CWVRFUyBpbiBzdGxwb3J0L3N0bC9fYWxsb2MuaAotICAgICAgICBpZiBzdGxwb3J0X3ZlcnNpb24gPCA1LjI6Ci0gICAgICAgICAgICBibG9ja3NpemUgPSAxMjgKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGJsb2Nrc2l6ZSA9IDMyICogZ2RiLmxvb2t1cF90eXBlICgidm9pZCIpLnBvaW50ZXIoKS5zaXplb2YKLSAgICAgICAgaWYgc2l6ZSA8IGJsb2Nrc2l6ZToKLSAgICAgICAgICAgIHNlbGYuYnVmZmVyX3NpemUgPSBpbnQgKGJsb2Nrc2l6ZSAvIHNpemUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmJ1ZmZlcl9zaXplID0gMQotCi0gICAgZGVmIHRvX3N0cmluZyAoc2VsZik6Ci0gICAgICAgIHN0YXJ0ICAgPSBzZWxmLnZhbFsnX01fc3RhcnQnXQotICAgICAgICBmaW5pc2ggID0gc2VsZi52YWxbJ19NX2ZpbmlzaCddCi0gICAgICAgIGRlbHRhX24gPSBmaW5pc2hbJ19NX25vZGUnXSAtIHN0YXJ0WydfTV9ub2RlJ10gLSAxCi0gICAgICAgIGRlbHRhX3MgPSBzdGFydFsnX01fbGFzdCddIC0gc3RhcnRbJ19NX2N1ciddCi0gICAgICAgIGRlbHRhX2YgPSBmaW5pc2hbJ19NX2N1ciddIC0gZmluaXNoWydfTV9maXJzdCddCi0gICAgICAgIGlmIGRlbHRhX24gPT0gLTE6Ci0gICAgICAgICAgICBzaXplID0gZGVsdGFfZgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2l6ZSA9IHNlbGYuYnVmZmVyX3NpemUgKiBkZWx0YV9uICsgZGVsdGFfcyArIGRlbHRhX2YKLSAgICAgICAgdGEwID0gc2VsZi52YWwudHlwZS50ZW1wbGF0ZV9hcmd1bWVudCAoMCkKLSAgICAgICAgcmV0dXJuICclczwlcz4gd2l0aCAlZCBlbGVtZW50cycgJSAoc2VsZi50eXBlbmFtZSwgdGEwLCBpbnQgKHNpemUpKQotCi0gICAgZGVmIGNoaWxkcmVuIChzZWxmKToKLSAgICAgICAgc3RhcnQgID0gc2VsZi52YWxbJ19NX3N0YXJ0J10KLSAgICAgICAgZmluaXNoID0gc2VsZi52YWxbJ19NX2ZpbmlzaCddCi0gICAgICAgIHJldHVybiBzZWxmLkl0ZXJhdG9yIChzdGFydFsnX01fbm9kZSddLCBzdGFydFsnX01fY3VyJ10sCi0gICAgICAgICAgICBzdGFydFsnX01fbGFzdCddLCBmaW5pc2hbJ19NX2N1ciddLCBzZWxmLmJ1ZmZlcl9zaXplKQotCi0gICAgZGVmIGRpc3BsYXlfaGludCAoc2VsZik6Ci0gICAgICAgIHJldHVybiAnYXJyYXknCi0KLQotY2xhc3MgTGlzdFByaW50ZXI6Ci0gICAgIlByZXR0eSBwcmludGVyIGZvciBzdGQ6Omxpc3QuIgotCi0gICAgY2xhc3MgSXRlcmF0b3I6Ci0gICAgICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgbm9kZV90eXBlLCBoZWFkKToKLSAgICAgICAgICAgIHNlbGYubm9kZV90eXBlID0gbm9kZV90eXBlCi0gICAgICAgICAgICAjIHNlZSBlbXB0eSgpIGluIHN0bHBvcnQvc3RsL19saXN0LmgKLSAgICAgICAgICAgIGlmIHN0bHBvcnRfdmVyc2lvbiA8IDUuMDoKLSAgICAgICAgICAgICAgICBzZWxmLnNlbnRpbmVsID0gaGVhZAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLnNlbnRpbmVsID0gaGVhZC5hZGRyZXNzCi0gICAgICAgICAgICBzZWxmLml0ZW0gID0gaGVhZFsnX01fbmV4dCddCi0gICAgICAgICAgICBzZWxmLmNvdW50ID0gMAotCi0gICAgICAgIGRlZiBfX2l0ZXJfXyAoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgICAgIGRlZiBuZXh0IChzZWxmKToKLSAgICAgICAgICAgIGlmIHNlbGYuaXRlbSA9PSBzZWxmLnNlbnRpbmVsOgotICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLSAgICAgICAgICAgIG5vZGUgPSBzZWxmLml0ZW0uY2FzdCAoc2VsZi5ub2RlX3R5cGUpLmRlcmVmZXJlbmNlKCkKLSAgICAgICAgICAgIHNlbGYuaXRlbSA9IG5vZGVbJ19NX25leHQnXQotICAgICAgICAgICAgY291bnQgPSBzZWxmLmNvdW50Ci0gICAgICAgICAgICBzZWxmLmNvdW50ICs9IDEKLSAgICAgICAgICAgIHJldHVybiAoJ1slZF0nICUgY291bnQsIG5vZGVbJ19NX2RhdGEnXSkKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlbmFtZSwgdmFsKToKLSAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCi0gICAgICAgIHNlbGYudmFsID0gZ2V0X25vbl9kZWJ1Z19pbXBsICh2YWwpCi0KLSAgICBkZWYgY2hpbGRyZW4gKHNlbGYpOgotICAgICAgICB0YTAgICAgICAgPSBzZWxmLnZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50KDApCi0gICAgICAgIG5vZGVfdHlwZSA9IGxvb2t1cF9zdGxwb3J0X3ByaXZfdHlwZSAoJ19MaXN0X25vZGU8JXM+JyAlIHRhMCkucG9pbnRlcigpCi0gICAgICAgIHJldHVybiBzZWxmLkl0ZXJhdG9yIChub2RlX3R5cGUsIHNlbGYudmFsWydfTV9ub2RlJ11bJ19NX2RhdGEnXSkKLQotICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgotICAgICAgICB0YTAgPSBzZWxmLnZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50ICgwKQotICAgICAgICAjIHNlZSBlbXB0eSgpIGluIHN0bHBvcnQvc3RsL19saXN0LmgKLSAgICAgICAgaWYgc3RscG9ydF92ZXJzaW9uIDwgNS4wOgotICAgICAgICAgICAgc2VudGluZWwgPSBzZWxmLnZhbFsnX01fbm9kZSddWydfTV9kYXRhJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbnRpbmVsID0gc2VsZi52YWxbJ19NX25vZGUnXVsnX01fZGF0YSddLmFkZHJlc3MKLSAgICAgICAgaWYgc2VsZi52YWxbJ19NX25vZGUnXVsnX01fZGF0YSddWydfTV9uZXh0J10gPT0gc2VudGluZWw6Ci0gICAgICAgICAgICByZXR1cm4gJ2VtcHR5ICVzPCVzPicgJSAoc2VsZi50eXBlbmFtZSwgdGEwKQotICAgICAgICByZXR1cm4gJyVzPCVzPicgJSAoc2VsZi50eXBlbmFtZSwgdGEwKQotCi0gICAgZGVmIGRpc3BsYXlfaGludCAoc2VsZik6Ci0gICAgICAgIHJldHVybiAnYXJyYXknCi0KLQotY2xhc3MgTWFwUHJpbnRlcjoKLSAgICAiUHJldHR5IHByaW50ZXIgZm9yIHN0ZDo6bWFwIGFuZCBzdGQ6Om11bHRpbWFwLiIKLQotICAgIGNsYXNzIEl0ZXJhdG9yOgotCi0gICAgICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgcmJpdGVyLCBub2RlX3R5cGUpOgotICAgICAgICAgICAgc2VsZi5yYml0ZXIgICAgPSByYml0ZXIKLSAgICAgICAgICAgIHNlbGYubm9kZV90eXBlID0gbm9kZV90eXBlCi0gICAgICAgICAgICBzZWxmLmNvdW50ICAgICA9IDAKLQotICAgICAgICBkZWYgX19pdGVyX18gKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgICAgICBkZWYgbmV4dCAoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLmNvdW50ICUgMiA9PSAwOgotICAgICAgICAgICAgICAgIGl0ZW0gPSBzZWxmLnJiaXRlci5uZXh0KCkuZGVyZWZlcmVuY2UoKQotICAgICAgICAgICAgICAgIHNlbGYucGFpciA9IChpdGVtLmNhc3QgKHNlbGYubm9kZV90eXBlKSlbJ19NX3ZhbHVlX2ZpZWxkJ10KLSAgICAgICAgICAgICAgICBlbGVtZW50ID0gc2VsZi5wYWlyWydmaXJzdCddCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBzZWxmLnBhaXJbJ3NlY29uZCddCi0gICAgICAgICAgICBjb3VudCA9IHNlbGYuY291bnQKLSAgICAgICAgICAgIHNlbGYuY291bnQgKz0gMQotICAgICAgICAgICAgcmV0dXJuICgnWyVkXScgJSBjb3VudCwgZWxlbWVudCkKLQotICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgdHlwZW5hbWUsIHZhbCk6Ci0gICAgICAgIHNlbGYudHlwZW5hbWUgPSB0eXBlbmFtZQotICAgICAgICBzZWxmLnZhbCA9IHZhbAotCi0gICAgZGVmIGNoaWxkcmVuIChzZWxmKToKLSAgICAgICAga2V5X3R5cGUgICA9IHNlbGYudmFsLnR5cGUudGVtcGxhdGVfYXJndW1lbnQgKDApCi0gICAgICAgIHZhbHVlX3R5cGUgPSBzZWxmLnZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50ICgxKQotICAgICAgICBwYWlyX3R5cGUgIFwKLSAgICAgICAgICAgID0gbG9va3VwX3N0bHBvcnRfdHlwZSAoJ3BhaXI8JXMgY29uc3QsJXM+JyAlIChrZXlfdHlwZSx2YWx1ZV90eXBlKSkKLSAgICAgICAgbm9kZV90eXBlICBcCi0gICAgICAgICAgICA9IGxvb2t1cF9zdGxwb3J0X3ByaXZfdHlwZSAoJ19SYl90cmVlX25vZGU8JXMgPicgJSBzdHIgKHBhaXJfdHlwZSkpCi0gICAgICAgIHJldHVybiBzZWxmLkl0ZXJhdG9yIChSYnRyZWVJdGVyYXRvciAoc2VsZi52YWwpLCBub2RlX3R5cGUpCi0KLSAgICBkZWYgdG9fc3RyaW5nIChzZWxmKToKLSAgICAgICAgdGEwID0gc2VsZi52YWwudHlwZS50ZW1wbGF0ZV9hcmd1bWVudCAoMCkKLSAgICAgICAgY291bnQgPSBnZXRfbm9uX2RlYnVnX2ltcGwgKHNlbGYudmFsLCAnX01fdCcpWydfTV9ub2RlX2NvdW50J10KLSAgICAgICAgcmV0dXJuICgnJXM8JXM+IHdpdGggJWQgZWxlbWVudHMnICUgKHNlbGYudHlwZW5hbWUsIHRhMCwgY291bnQpKQotCi0gICAgZGVmIGRpc3BsYXlfaGludCAoc2VsZik6Ci0gICAgICAgIHJldHVybiAnbWFwJwotCi0KLWNsYXNzIFNldFByaW50ZXI6Ci0gICAgIlByZXR0eSBwcmludGVyIGZvciBzdGQ6OnNldCBhbmQgc3RkOjptdWx0aXNldC4iCi0KLSAgICBjbGFzcyBJdGVyYXRvcjoKLSAgICAgICAgZGVmIF9faW5pdF9fIChzZWxmLCByYml0ZXIsIG5vZGVfdHlwZSk6Ci0gICAgICAgICAgICBzZWxmLnJiaXRlciAgICA9IHJiaXRlcgotICAgICAgICAgICAgc2VsZi5ub2RlX3R5cGUgPSBub2RlX3R5cGUKLSAgICAgICAgICAgIHNlbGYuY291bnQgICAgID0gMAotCi0gICAgICAgIGRlZiBfX2l0ZXJfXyAoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgICAgIGRlZiBuZXh0IChzZWxmKToKLSAgICAgICAgICAgIGl0ZW0gPSBzZWxmLnJiaXRlci5uZXh0KCkuZGVyZWZlcmVuY2UoKQotICAgICAgICAgICAgZWxlbWVudCA9IChpdGVtLmNhc3QgKHNlbGYubm9kZV90eXBlKSlbJ19NX3ZhbHVlX2ZpZWxkJ10KLSAgICAgICAgICAgIGNvdW50ID0gc2VsZi5jb3VudAotICAgICAgICAgICAgc2VsZi5jb3VudCArPSAxCi0gICAgICAgICAgICByZXR1cm4gKCdbJWRdJyAlIGNvdW50LCBlbGVtZW50KQotCi0gICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFsKToKLSAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCi0gICAgICAgIHNlbGYudmFsID0gdmFsCi0KLSAgICBkZWYgY2hpbGRyZW4gKHNlbGYpOgotICAgICAgICB2YWx1ZV90eXBlID0gc2VsZi52YWwudHlwZS50ZW1wbGF0ZV9hcmd1bWVudCAoMCkKLSAgICAgICAgbm9kZV90eXBlICBcCi0gICAgICAgICAgICA9IGxvb2t1cF9zdGxwb3J0X3ByaXZfdHlwZSAoJ19SYl90cmVlX25vZGU8JXM+JyAlICh2YWx1ZV90eXBlKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuSXRlcmF0b3IgKFJidHJlZUl0ZXJhdG9yIChzZWxmLnZhbCksIG5vZGVfdHlwZSkKLQotICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgotICAgICAgICB0YTAgPSBzZWxmLnZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50ICgwKQotICAgICAgICBjb3VudCA9IGdldF9ub25fZGVidWdfaW1wbCAoc2VsZi52YWwsICdfTV90JylbJ19NX25vZGVfY291bnQnXQotICAgICAgICByZXR1cm4gKCclczwlcz4gd2l0aCAlZCBlbGVtZW50cycgJSAoc2VsZi50eXBlbmFtZSwgdGEwLCBjb3VudCkpCi0KLSAgICBkZWYgZGlzcGxheV9oaW50IChzZWxmKToKLSAgICAgICAgcmV0dXJuICdhcnJheScKLQotCi1jbGFzcyBTbGlzdFByaW50ZXI6Ci0gICAgIlByZXR0eSBwcmludGVyIGZvciBzdGQ6OnNsaXN0LiIKLQotICAgIGNsYXNzIEl0ZXJhdG9yOgotICAgICAgICBkZWYgX19pbml0X18gKHNlbGYsIG5vZGVfdHlwZSwgaGVhZCk6Ci0gICAgICAgICAgICBzZWxmLm5vZGVfdHlwZSA9IG5vZGVfdHlwZQotICAgICAgICAgICAgc2VsZi5pdGVtICA9IGhlYWRbJ19NX25leHQnXQotICAgICAgICAgICAgc2VsZi5jb3VudCA9IDAKLQotICAgICAgICBkZWYgX19pdGVyX18gKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgICAgICBkZWYgbmV4dCAoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLml0ZW0gPT0gMDoKLSAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0gICAgICAgICAgICBub2RlID0gc2VsZi5pdGVtLmNhc3QgKHNlbGYubm9kZV90eXBlKS5kZXJlZmVyZW5jZSgpCi0gICAgICAgICAgICBzZWxmLml0ZW0gPSBub2RlWydfTV9uZXh0J10KLSAgICAgICAgICAgIGNvdW50ID0gc2VsZi5jb3VudAotICAgICAgICAgICAgc2VsZi5jb3VudCArPSAxCi0gICAgICAgICAgICByZXR1cm4gKCdbJWRdJyAlIGNvdW50LCBub2RlWydfTV9kYXRhJ10pCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZW5hbWUsIHZhbCk6Ci0gICAgICAgIHNlbGYudHlwZW5hbWUgPSB0eXBlbmFtZQotICAgICAgICBzZWxmLnZhbCA9IGdldF9ub25fZGVidWdfaW1wbCAodmFsKQotCi0gICAgZGVmIGNoaWxkcmVuIChzZWxmKToKLSAgICAgICAgdGEwICAgICAgID0gc2VsZi52YWwudHlwZS50ZW1wbGF0ZV9hcmd1bWVudCgwKQotICAgICAgICBub2RlX3R5cGUgPSBsb29rdXBfc3RscG9ydF9wcml2X3R5cGUgKCdfU2xpc3Rfbm9kZTwlcz4nICUgdGEwKS5wb2ludGVyKCkKLSAgICAgICAgcmV0dXJuIHNlbGYuSXRlcmF0b3IgKG5vZGVfdHlwZSwgc2VsZi52YWxbJ19NX2hlYWQnXVsnX01fZGF0YSddKQotCi0gICAgZGVmIHRvX3N0cmluZyAoc2VsZik6Ci0gICAgICAgIHRhMCA9IHNlbGYudmFsLnR5cGUudGVtcGxhdGVfYXJndW1lbnQgKDApCi0gICAgICAgIGlmIHNlbGYudmFsWydfTV9oZWFkJ11bJ19NX2RhdGEnXVsnX01fbmV4dCddID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJ2VtcHR5ICVzPCVzPicgJSAoc2VsZi50eXBlbmFtZSwgdGEwKQotICAgICAgICByZXR1cm4gJyVzPCVzPicgJSAoc2VsZi50eXBlbmFtZSwgdGEwKQotCi0gICAgZGVmIGRpc3BsYXlfaGludCAoc2VsZik6Ci0gICAgICAgIHJldHVybiAnYXJyYXknCi0KLQotY2xhc3MgU3RyaW5nUHJpbnRlcjoKLSAgICAiUHJldHR5IHByaW50ZXIgZm9yIHN0ZDo6c3RyaW5nIG9yIHN0ZDo6d3N0cmluZy4iCi0KLSAgICBkZWYgX19pbml0X18gKHNlbGYsIF90eXBlbmFtZSwgdmFsKToKLSAgICAgICAgc2VsZi52YWwgPSBnZXRfbm9uX2RlYnVnX2ltcGwgKHZhbCkKLQotICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIFNUTHBvcnQgNS4yIGFuZCBsYXRlcgotICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsWydfTV9zdGFydF9vZl9zdG9yYWdlJ11bJ19NX2RhdGEnXQotICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgU1RMcG9ydCA1LjAgYW5kIDUuMSB3aXRoIHNob3J0IHN0cmluZyBvcHRpbWl6YXRpb24KLSAgICAgICAgICAgICAgICBzdGF0aWNfYnVmID0gc2VsZi52YWxbJ19NX2J1ZmZlcnMnXVsnX01fc3RhdGljX2J1ZiddCi0gICAgICAgICAgICAgICAgZGF0YSAgICAgICA9IHNlbGYudmFsWydfTV9lbmRfb2Zfc3RvcmFnZSddWydfTV9kYXRhJ10KLSAgICAgICAgICAgICAgICBpZiBzdGF0aWNfYnVmLmFkZHJlc3MgKyAxID09IGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgIHRhMCAgICA9IHNlbGYudmFsLnR5cGUudGVtcGxhdGVfYXJndW1lbnQgKDApCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0ICA9IHN0YXRpY19idWYuY2FzdCAodGEwLnBvaW50ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgZmluaXNoID0gc2VsZi52YWxbJ19NX2ZpbmlzaCddCi0gICAgICAgICAgICAgICAgICAgIGlmIHN0YXJ0ID09IGZpbmlzaDoKLSAgICAgICAgICAgICAgICAgICAgICAgICMgU1RMcG9ydCA1LjAgd2l0aG91dCBfU1RMUF9GT1JDRV9TVFJJTkdfVEVSTUlOQVRJT04KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiIgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWxbJ19NX2J1ZmZlcnMnXVsnX01fZHluYW1pY19idWYnXQotICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKLSAgICAgICAgICAgICAgICAjIFNUTHBvcnQgNS4wIGFuZCA1LjEgd2l0aG91dCBzaG9ydCBzdHJpbmcgb3B0aW1pemF0aW9uLAotICAgICAgICAgICAgICAgICMgYW5kIFNUTHBvcnQgNC42Ci0gICAgICAgICAgICAgICAgc3RhcnQgID0gc2VsZi52YWxbJ19NX3N0YXJ0J10KLSAgICAgICAgICAgICAgICBmaW5pc2ggPSBzZWxmLnZhbFsnX01fZmluaXNoJ10KLSAgICAgICAgICAgICAgICBpZiBzdGFydCA9PSBmaW5pc2g6Ci0gICAgICAgICAgICAgICAgICAgICMgU1RMcG9ydCA1LjAgd2l0aG91dCBfU1RMUF9GT1JDRV9TVFJJTkdfVEVSTUlOQVRJT04KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIiCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0Ci0KLSAgICBkZWYgZGlzcGxheV9oaW50IChzZWxmKToKLSAgICAgICAgcmV0dXJuICdzdHJpbmcnCi0KLQotY2xhc3MgVmVjdG9yUHJpbnRlcjoKLSAgICAiUHJldHR5IHByaW50ZXIgZm9yIHN0ZDo6dmVjdG9yLiIKLQotICAgIGNsYXNzIEl0ZXJhdG9yOgotCi0gICAgICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgc3RhcnQsIGZpbmlzaCwgYml0X3ZlY3Rvcik6Ci0gICAgICAgICAgICBzZWxmLmJpdF92ZWN0b3IgPSBiaXRfdmVjdG9yCi0gICAgICAgICAgICBzZWxmLmNvdW50ICAgICAgPSAwCi0gICAgICAgICAgICBpZiBiaXRfdmVjdG9yOgotICAgICAgICAgICAgICAgIHNlbGYuaXRlbSAgID0gc3RhcnRbJ19NX3AnXQotICAgICAgICAgICAgICAgIHNlbGYuaW8gICAgID0gc3RhcnRbJ19NX29mZnNldCddCi0gICAgICAgICAgICAgICAgc2VsZi5maW5pc2ggPSBmaW5pc2hbJ19NX3AnXQotICAgICAgICAgICAgICAgIHNlbGYuZm8gICAgID0gZmluaXNoWydfTV9vZmZzZXQnXQotICAgICAgICAgICAgICAgIHNlbGYuaXNpemUgID0gOCAqIHNlbGYuaXRlbS5kZXJlZmVyZW5jZSgpLnR5cGUuc2l6ZW9mCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuaXRlbSAgID0gc3RhcnQKLSAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaCA9IGZpbmlzaAotCi0gICAgICAgIGRlZiBfX2l0ZXJfXyAoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgICAgIGRlZiBuZXh0IChzZWxmKToKLSAgICAgICAgICAgIGNvdW50ID0gc2VsZi5jb3VudAotICAgICAgICAgICAgc2VsZi5jb3VudCArPSAxCi0gICAgICAgICAgICBpZiBzZWxmLmJpdF92ZWN0b3I6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5pdGVtID09IHNlbGYuZmluaXNoIGFuZCBzZWxmLmlvID09IHNlbGYuZm86Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLSAgICAgICAgICAgICAgICBlbGVtZW50ID0gc2VsZi5pdGVtLmRlcmVmZXJlbmNlKCkKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IDAKLSAgICAgICAgICAgICAgICBpZiBlbGVtZW50ICYgKDEgPDwgc2VsZi5pbyk6Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gMQotICAgICAgICAgICAgICAgIHNlbGYuaW8gKz0gMQotICAgICAgICAgICAgICAgIGlmIHNlbGYuaW8gPj0gc2VsZi5pc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5pdGVtICs9IDEKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5pbyAgID0gIDAKLSAgICAgICAgICAgICAgICByZXR1cm4gKCdbJWRdJyAlIGNvdW50LCB2YWx1ZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5pdGVtID09IHNlbGYuZmluaXNoOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0gICAgICAgICAgICAgICAgZWxlbWVudCA9IHNlbGYuaXRlbS5kZXJlZmVyZW5jZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5pdGVtICs9IDEKLSAgICAgICAgICAgICAgICByZXR1cm4gKCdbJWRdJyAlIGNvdW50LCBlbGVtZW50KQotCi0gICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFsKToKLSAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCi0gICAgICAgIHNlbGYudmFsID0gZ2V0X25vbl9kZWJ1Z19pbXBsICh2YWwpCi0gICAgICAgIHNlbGYuYml0X3ZlY3RvciBcCi0gICAgICAgICAgICA9IHZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50ICgwKS5jb2RlID09IGdkYi5UWVBFX0NPREVfQk9PTAotCi0gICAgZGVmIGNoaWxkcmVuIChzZWxmKToKLSAgICAgICAgc3RhcnQgID0gc2VsZi52YWxbJ19NX3N0YXJ0J10KLSAgICAgICAgZmluaXNoID0gc2VsZi52YWxbJ19NX2ZpbmlzaCddCi0gICAgICAgIHJldHVybiBzZWxmLkl0ZXJhdG9yIChzdGFydCwgZmluaXNoLCBzZWxmLmJpdF92ZWN0b3IpCi0KLSAgICBkZWYgdG9fc3RyaW5nIChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5iaXRfdmVjdG9yOgotICAgICAgICAgICAgc3RhcnQgICAgPSBzZWxmLnZhbFsnX01fc3RhcnQnXVsnX01fcCddCi0gICAgICAgICAgICBzbyAgICAgICA9IHNlbGYudmFsWydfTV9zdGFydCddWydfTV9vZmZzZXQnXQotICAgICAgICAgICAgZmluaXNoICAgPSBzZWxmLnZhbFsnX01fZmluaXNoJ11bJ19NX3AnXQotICAgICAgICAgICAgZm8gICAgICAgPSBzZWxmLnZhbFsnX01fZmluaXNoJ11bJ19NX29mZnNldCddCi0gICAgICAgICAgICBlbmQgICAgICA9IHNlbGYudmFsWydfTV9lbmRfb2Zfc3RvcmFnZSddWydfTV9kYXRhJ10KLSAgICAgICAgICAgIGlzaXplICAgID0gOCAqIHN0YXJ0LmRlcmVmZXJlbmNlKCkudHlwZS5zaXplb2YKLSAgICAgICAgICAgIGxlbmd0aCAgID0gKGlzaXplIC0gc28pICsgaXNpemUgKiAoZmluaXNoIC0gc3RhcnQgLSAxKSArIGZvCi0gICAgICAgICAgICBjYXBhY2l0eSA9IGlzaXplICogKGVuZCAtIHN0YXJ0KQotICAgICAgICAgICAgcmV0dXJuICgnJXM8Ym9vbD4gb2YgbGVuZ3RoICVkLCBjYXBhY2l0eSAlZCcKLSAgICAgICAgICAgICAgICAlIChzZWxmLnR5cGVuYW1lLCBsZW5ndGgsIGNhcGFjaXR5KSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHN0YXJ0ICAgID0gc2VsZi52YWxbJ19NX3N0YXJ0J10KLSAgICAgICAgICAgIGZpbmlzaCAgID0gc2VsZi52YWxbJ19NX2ZpbmlzaCddCi0gICAgICAgICAgICBlbmQgICAgICA9IHNlbGYudmFsWydfTV9lbmRfb2Zfc3RvcmFnZSddWydfTV9kYXRhJ10KLSAgICAgICAgICAgIGxlbmd0aCAgID0gZmluaXNoIC0gc3RhcnQKLSAgICAgICAgICAgIGNhcGFjaXR5ID0gZW5kIC0gc3RhcnQKLSAgICAgICAgICAgIHRhMCAgICAgID0gc2VsZi52YWwudHlwZS50ZW1wbGF0ZV9hcmd1bWVudCAoMCkKLSAgICAgICAgICAgIHJldHVybiAoJyVzPCVzPiBvZiBsZW5ndGggJWQsIGNhcGFjaXR5ICVkJwotICAgICAgICAgICAgICAgICUgKHNlbGYudHlwZW5hbWUsIHRhMCwgbGVuZ3RoLCBjYXBhY2l0eSkpCi0KLSAgICBkZWYgZGlzcGxheV9oaW50IChzZWxmKToKLSAgICAgICAgaWYgcHJpbnRfdmVjdG9yX3dpdGhfaW5kaWNlczoKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gJ2FycmF5JwotCi0KLWNsYXNzIFdyYXBwZXJQcmludGVyOgotICAgICJQcmV0dHkgcHJpbnRlciBmb3Igc3RkOjpzdGFjaywgc3RkOjpxdWV1ZSwgYW5kIHN0ZDo6cHJpb3JpdHlfcXVldWUuIgotCi0gICAgZGVmIF9faW5pdF9fIChzZWxmLCB0eXBlbmFtZSwgdmFsKToKLSAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCi0gICAgICAgIHNlbGYudmFsID0gdmFsCi0gICAgICAgIHNlbGYudmlzdWFsaXplciA9IGdkYi5kZWZhdWx0X3Zpc3VhbGl6ZXIgKHZhbFsnYyddKQotCi0gICAgZGVmIGNoaWxkcmVuIChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYudmlzdWFsaXplci5jaGlsZHJlbigpCi0KLSAgICBkZWYgdG9fc3RyaW5nIChzZWxmKToKLSAgICAgICAgdGEwID0gc2VsZi52YWwudHlwZS50ZW1wbGF0ZV9hcmd1bWVudCAoMCkKLSAgICAgICAgcmV0dXJuICgnJXM8JXM+LCB3cmFwcGluZyAlcycKLSAgICAgICAgICAgICUgKHNlbGYudHlwZW5hbWUsIHRhMCwgc2VsZi52aXN1YWxpemVyLnRvX3N0cmluZygpKSkKLQotICAgIGRlZiBkaXNwbGF5X2hpbnQgKHNlbGYpOgotICAgICAgICBpZiBoYXNhdHRyIChzZWxmLnZpc3VhbGl6ZXIsICdkaXNwbGF5X2hpbnQnKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZpc3VhbGl6ZXIuZGlzcGxheV9oaW50KCkKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotCi1jbGFzcyBVbm9yZGVyZWRNYXBQcmludGVyOgotICAgICIiIlByZXR0eSBwcmludGVyIGZvciBzdGQ6OnRyMTo6dW5vcmRlcmVkX21hcAotICAgIGFuZCBzdGQ6OnRyMTo6dW5vcmRlcmVkX211bHRpbWFwLiIiIgotCi0gICAgY2xhc3MgSXRlcmF0b3I6Ci0gICAgICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgbm9kZV90eXBlLCBoZWFkKToKLSAgICAgICAgICAgIHNlbGYubm9kZV90eXBlID0gbm9kZV90eXBlCi0gICAgICAgICAgICBzZWxmLml0ZW0gID0gaGVhZFsnX01fbmV4dCddCi0gICAgICAgICAgICBzZWxmLmNvdW50ID0gMAotCi0gICAgICAgIGRlZiBfX2l0ZXJfXyAoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgICAgIGRlZiBuZXh0IChzZWxmKToKLSAgICAgICAgICAgIGlmIHNlbGYuaXRlbSA9PSAwIGFuZCBzZWxmLmNvdW50ICUgMiA9PSAwOgotICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLSAgICAgICAgICAgIGlmIHNlbGYuY291bnQgJSAyID09IDA6Ci0gICAgICAgICAgICAgICAgc2VsZi5wYWlyID0gc2VsZi5pdGVtLmNhc3QgKHNlbGYubm9kZV90eXBlKS5kZXJlZmVyZW5jZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5pdGVtID0gc2VsZi5wYWlyWydfTV9uZXh0J10KLSAgICAgICAgICAgICAgICBlbGVtZW50ID0gc2VsZi5wYWlyWydfTV9kYXRhJ11bJ2ZpcnN0J10KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZWxlbWVudCA9IHNlbGYucGFpclsnX01fZGF0YSddWydzZWNvbmQnXQotICAgICAgICAgICAgY291bnQgPSBzZWxmLmNvdW50Ci0gICAgICAgICAgICBzZWxmLmNvdW50ICs9IDEKLSAgICAgICAgICAgIHJldHVybiAoJ1slZF0nICUgY291bnQsIGVsZW1lbnQpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZW5hbWUsIHZhbCk6Ci0gICAgICAgIHNlbGYudHlwZW5hbWUgPSB0eXBlbmFtZQotICAgICAgICBzZWxmLnZhbCA9IGdldF9ub25fZGVidWdfaW1wbCAodmFsKQotCi0gICAgZGVmIGNoaWxkcmVuIChzZWxmKToKLSAgICAgICAga2V5X3R5cGUgICA9IHNlbGYudmFsLnR5cGUudGVtcGxhdGVfYXJndW1lbnQgKDApCi0gICAgICAgIHZhbHVlX3R5cGUgPSBzZWxmLnZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50ICgxKQotICAgICAgICBwYWlyX3R5cGUgIFwKLSAgICAgICAgICAgID0gbG9va3VwX3N0bHBvcnRfdHlwZSAoJ3BhaXI8JXMgY29uc3QsJXM+JyAlIChrZXlfdHlwZSx2YWx1ZV90eXBlKSkKLSAgICAgICAgbm9kZV90eXBlICBcCi0gICAgICAgICAgICA9IGxvb2t1cF9zdGxwb3J0X3ByaXZfdHlwZSAoJ19TbGlzdF9ub2RlPCVzID4nCi0gICAgICAgICAgICAgICAgJSBzdHIgKHBhaXJfdHlwZSkpLnBvaW50ZXIoKQotICAgICAgICBlbGVtZW50cyA9IGdldF9ub25fZGVidWdfaW1wbCAoc2VsZi52YWwsICdfTV9odCcpWydfTV9lbGVtcyddCi0gICAgICAgIHJldHVybiBzZWxmLkl0ZXJhdG9yIChub2RlX3R5cGUsIGVsZW1lbnRzWydfTV9oZWFkJ11bJ19NX2RhdGEnXSkKLQotICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgotICAgICAgICB0YTAgPSBzZWxmLnZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50ICgwKQotICAgICAgICBsZW5ndGggPSBnZXRfbm9uX2RlYnVnX2ltcGwgKHNlbGYudmFsLCAnX01faHQnKVsnX01fbnVtX2VsZW1lbnRzJ10KLSAgICAgICAgaWYgbGVuZ3RoID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJ2VtcHR5ICVzPCVzPicgJSAoc2VsZi50eXBlbmFtZSwgdGEwKQotICAgICAgICByZXR1cm4gJyVzPCVzPiB3aXRoICVkIGVsZW1lbnRzJyAlIChzZWxmLnR5cGVuYW1lLCB0YTAsIGxlbmd0aCkKLQotICAgIGRlZiBkaXNwbGF5X2hpbnQgKHNlbGYpOgotICAgICAgICByZXR1cm4gJ21hcCcKLQotCi1jbGFzcyBVbm9yZGVyZWRTZXRQcmludGVyOgotICAgICIiIlByZXR0eSBwcmludGVyIGZvciBzdGQ6OnRyMTo6dW5vcmRlcmVkX3NldAotICAgIGFuZCBzdGQ6OnRyMTo6dW5vcmRlcmVkX211bHRpc2V0LiIiIgotCi0gICAgY2xhc3MgSXRlcmF0b3I6Ci0gICAgICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgbm9kZV90eXBlLCBoZWFkKToKLSAgICAgICAgICAgIHNlbGYubm9kZV90eXBlID0gbm9kZV90eXBlCi0gICAgICAgICAgICBzZWxmLml0ZW0gID0gaGVhZFsnX01fbmV4dCddCi0gICAgICAgICAgICBzZWxmLmNvdW50ID0gMAotCi0gICAgICAgIGRlZiBfX2l0ZXJfXyAoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgICAgIGRlZiBuZXh0IChzZWxmKToKLSAgICAgICAgICAgIGlmIHNlbGYuaXRlbSA9PSAwOgotICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLSAgICAgICAgICAgIG5vZGUgPSBzZWxmLml0ZW0uY2FzdCAoc2VsZi5ub2RlX3R5cGUpLmRlcmVmZXJlbmNlKCkKLSAgICAgICAgICAgIHNlbGYuaXRlbSA9IG5vZGVbJ19NX25leHQnXQotICAgICAgICAgICAgY291bnQgPSBzZWxmLmNvdW50Ci0gICAgICAgICAgICBzZWxmLmNvdW50ICs9IDEKLSAgICAgICAgICAgIHJldHVybiAoJ1slZF0nICUgY291bnQsIG5vZGVbJ19NX2RhdGEnXSkKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlbmFtZSwgdmFsKToKLSAgICAgICAgc2VsZi50eXBlbmFtZSA9IHR5cGVuYW1lCi0gICAgICAgIHNlbGYudmFsID0gZ2V0X25vbl9kZWJ1Z19pbXBsICh2YWwpCi0KLSAgICBkZWYgY2hpbGRyZW4gKHNlbGYpOgotICAgICAgICB0YTAgPSBzZWxmLnZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50KDApCi0gICAgICAgIG5vZGVfdHlwZSA9IGxvb2t1cF9zdGxwb3J0X3ByaXZfdHlwZSAoJ19TbGlzdF9ub2RlPCVzPicgJSB0YTApLnBvaW50ZXIoKQotICAgICAgICBlbGVtZW50cyA9IGdldF9ub25fZGVidWdfaW1wbCAoc2VsZi52YWwsICdfTV9odCcpWydfTV9lbGVtcyddCi0gICAgICAgIHJldHVybiBzZWxmLkl0ZXJhdG9yIChub2RlX3R5cGUsIGVsZW1lbnRzWydfTV9oZWFkJ11bJ19NX2RhdGEnXSkKLQotICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgotICAgICAgICB0YTAgPSBzZWxmLnZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50ICgwKQotICAgICAgICBsZW5ndGggPSBnZXRfbm9uX2RlYnVnX2ltcGwgKHNlbGYudmFsLCAnX01faHQnKVsnX01fbnVtX2VsZW1lbnRzJ10KLSAgICAgICAgaWYgbGVuZ3RoID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJ2VtcHR5ICVzPCVzPicgJSAoc2VsZi50eXBlbmFtZSwgdGEwKQotICAgICAgICByZXR1cm4gJyVzPCVzPiB3aXRoICVkIGVsZW1lbnRzJyAlIChzZWxmLnR5cGVuYW1lLCB0YTAsIGxlbmd0aCkKLQotICAgIGRlZiBkaXNwbGF5X2hpbnQgKHNlbGYpOgotICAgICAgICByZXR1cm4gJ2FycmF5JwotCi0KLWNsYXNzIEF1dG9wdHJQcmludGVyOgotICAgICJQcmV0dHkgcHJpbnRlciBmb3Igc3RkOjphdXRvX3B0ci4iCi0KLSAgICBkZWYgX19pbml0X18gKHNlbGYsIHR5cGVuYW1lLCB2YWwpOgotICAgICAgICBzZWxmLnR5cGVuYW1lID0gdHlwZW5hbWUKLSAgICAgICAgc2VsZi52YWwgPSB2YWwKLQotICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgotICAgICAgICB0YTAgPSBzZWxmLnZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50ICgwKQotICAgICAgICBwb2ludGVyID0gc2VsZi52YWxbJ19NX3AnXS5jYXN0ICh0YTAucG9pbnRlcigpKQotICAgICAgICBpZiBwb2ludGVyID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gKCclczwlcz4gKGVtcHR5KScgJSAoc2VsZi50eXBlbmFtZSwgdGEwKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAoJyVzPCVzPiwgcG9pbnRpbmcgdG8gJXMnCi0gICAgICAgICAgICAgICAgJSAoc2VsZi50eXBlbmFtZSwgdGEwLCBwb2ludGVyLmRlcmVmZXJlbmNlKCkpKQotCi0gICAgZGVmIGRpc3BsYXlfaGludCAoc2VsZik6Ci0gICAgICAgIHJldHVybiBOb25lCi0KLQotY2xhc3MgU2hhcmVkcHRyUHJpbnRlcjoKLSAgICAiUHJldHR5IHByaW50ZXIgZm9yIHN0ZDo6c2hhcmVkX3B0ciBhbmQgc3RkOjp3ZWFrX3B0ci4iCi0KLSAgICBkZWYgX19pbml0X18gKHNlbGYsIHR5cGVuYW1lLCB2YWwpOgotICAgICAgICBzZWxmLnR5cGVuYW1lID0gdHlwZW5hbWUKLSAgICAgICAgc2VsZi52YWwgPSB2YWwKLQotICAgIGRlZiB0b19zdHJpbmcgKHNlbGYpOgotICAgICAgICB0YTAgPSBzZWxmLnZhbC50eXBlLnRlbXBsYXRlX2FyZ3VtZW50ICgwKQotICAgICAgICBwb2ludGVyID0gc2VsZi52YWxbJ3B4J10uY2FzdCAodGEwLnBvaW50ZXIoKSkKLSAgICAgICAgaWYgcG9pbnRlciA9PSAwOgotICAgICAgICAgICAgcmV0dXJuICgnJXM8JXM+IChlbXB0eSknICUgKHNlbGYudHlwZW5hbWUsIHRhMCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb3VudCA9IHNlbGYudmFsWydwbiddWydwaV8nXVsndXNlX2NvdW50XyddCi0gICAgICAgICAgICByZXR1cm4gKCclczwlcz4gKGNvdW50ICVkKSwgcG9pbnRpbmcgdG8gJXMnCi0gICAgICAgICAgICAgICAgJSAoc2VsZi50eXBlbmFtZSwgdGEwLCBjb3VudCwgcG9pbnRlci5kZXJlZmVyZW5jZSgpKSkKLQotICAgIGRlZiBkaXNwbGF5X2hpbnQgKHNlbGYpOgotICAgICAgICByZXR1cm4gTm9uZQotCi0KLWRlZiBsb29rdXBfZnVuY3Rpb24gKHZhbCk6Ci0gICAgIkxvb2stdXAgYW5kIHJldHVybiBhIHByZXR0eS1wcmludGVyIHRoYXQgY2FuIHByaW50IHZhbC4iCi0KLSAgICB0eXBlID0gdmFsLnR5cGUKLSAgICBpZiB0eXBlLmNvZGUgPT0gZ2RiLlRZUEVfQ09ERV9SRUY6Ci0gICAgICAgIHR5cGUgPSB0eXBlLnRhcmdldCgpCi0gICAgdHlwZSA9IHR5cGUudW5xdWFsaWZpZWQoKS5zdHJpcF90eXBlZGVmcygpCi0KLSAgICB0eXBlbmFtZSA9IHR5cGUudGFnCi0gICAgaWYgdHlwZW5hbWUgPT0gTm9uZToKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGZvciBmdW5jdGlvbiBpbiBwcmV0dHlfcHJpbnRlcnNfZGljdDoKLSAgICAgICAgaWYgZnVuY3Rpb24uc2VhcmNoICh0eXBlbmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gcHJldHR5X3ByaW50ZXJzX2RpY3RbZnVuY3Rpb25dICh2YWwpCi0gICAgcmV0dXJuIE5vbmUKLQotCi1kZWYgcmVnaXN0ZXJfc3RscG9ydF9wcmludGVycyAob2JqKToKLSAgICAiUmVnaXN0ZXIgU1RMcG9ydCBwcmV0dHktcHJpbnRlcnMgd2l0aCBvYmplY3QgZmlsZSBvYmouIgotCi0gICAgaWYgb2JqID09IE5vbmU6Ci0gICAgICAgIG9iaiA9IGdkYgotICAgIG9iai5wcmV0dHlfcHJpbnRlcnMuYXBwZW5kIChsb29rdXBfZnVuY3Rpb24pCi0KLQotCi1wcmV0dHlfcHJpbnRlcnNfZGljdCA9IHt9Ci0KLWRlZiBhZGRfZW50cnkgKHJlZ2V4LCBwcmludGVyLCB0eXBlbmFtZSk6Ci0gICAgcHJlZml4ID0gIl4oc3RscGQ/X3N0ZHxfU1RMfHN0ZCk6OiIKLSAgICBzdWZmaXggPSAiPC4qPiQiCi0gICAgaWYgdHlwZW5hbWUgIT0gTm9uZToKLSAgICAgICAgdHlwZW5hbWUgPSAic3RkOjoiICsgdHlwZW5hbWUKLSAgICBpZiByZWdleFswOjVdID09ICJib29zdCI6Ci0gICAgICAgIHByZWZpeCA9ICIiCi0gICAgcHJldHR5X3ByaW50ZXJzX2RpY3RbcmUuY29tcGlsZSAocHJlZml4K3JlZ2V4K3N1ZmZpeCldIFwKLSAgICAgICAgPSBsYW1iZGEgdmFsOiBwcmludGVyICh0eXBlbmFtZSwgdmFsKQotCi1hZGRfZW50cnkgKCJiYXNpY19zdHJpbmciLCAgIFN0cmluZ1ByaW50ZXIsICBOb25lKQotYWRkX2VudHJ5ICgiYml0c2V0IiwgICAgICAgICBCaXRzZXRQcmludGVyLCAgImJpdHNldCIpCi1hZGRfZW50cnkgKCJkZXF1ZSIsICAgICAgICAgIERlcXVlUHJpbnRlciwgICAiZGVxdWUiKQotYWRkX2VudHJ5ICgibWFwIiwgICAgICAgICAgICBNYXBQcmludGVyLCAgICAgIm1hcCIpCi1hZGRfZW50cnkgKCJsaXN0IiwgICAgICAgICAgIExpc3RQcmludGVyLCAgICAibGlzdCIpCi1hZGRfZW50cnkgKCJtdWx0aW1hcCIsICAgICAgIE1hcFByaW50ZXIsICAgICAibXVsdGltYXAiKQotYWRkX2VudHJ5ICgibXVsdGlzZXQiLCAgICAgICBTZXRQcmludGVyLCAgICAgIm11bHRpc2V0IikKLWFkZF9lbnRyeSAoInF1ZXVlIiwgICAgICAgICAgV3JhcHBlclByaW50ZXIsICJxdWV1ZSIpCi1hZGRfZW50cnkgKCJwcmlvcml0eV9xdWV1ZSIsIFdyYXBwZXJQcmludGVyLCAicHJpb3JpdHlfcXVldWUiKQotYWRkX2VudHJ5ICgic2V0IiwgICAgICAgICAgICBTZXRQcmludGVyLCAgICAgInNldCIpCi1hZGRfZW50cnkgKCJzbGlzdCIsICAgICAgICAgIFNsaXN0UHJpbnRlciwgICAic2xpc3QiKQotYWRkX2VudHJ5ICgic3RhY2siLCAgICAgICAgICBXcmFwcGVyUHJpbnRlciwgInN0YWNrIikKLWFkZF9lbnRyeSAoInZlY3RvciIsICAgICAgICAgVmVjdG9yUHJpbnRlciwgICJ2ZWN0b3IiKQotCi1hZGRfZW50cnkgKCJ0cjE6OnVub3JkZXJlZF9tYXAiLCAgICAgIFVub3JkZXJlZE1hcFByaW50ZXIsICJ0cjE6OnVub3JkZXJlZF9tYXAiKQotYWRkX2VudHJ5ICgidHIxOjp1bm9yZGVyZWRfbXVsdGltYXAiLCBVbm9yZGVyZWRNYXBQcmludGVyLCAidHIxOjp1bm9yZGVyZWRfbXVsdGltYXAiKQotYWRkX2VudHJ5ICgidHIxOjp1bm9yZGVyZWRfc2V0IiwgICAgICBVbm9yZGVyZWRTZXRQcmludGVyLCAidHIxOjp1bm9yZGVyZWRfc2V0IikKLWFkZF9lbnRyeSAoInRyMTo6dW5vcmRlcmVkX211bHRpc2V0IiwgVW5vcmRlcmVkU2V0UHJpbnRlciwgInRyMTo6dW5vcmRlcmVkX211bHRpc2V0IikKLQotYWRkX2VudHJ5ICgiYXV0b19wdHIiLCAgICAgICAgICBBdXRvcHRyUHJpbnRlciwgICAiYXV0b19wdHIiKQotYWRkX2VudHJ5ICgiYm9vc3Q6OnNoYXJlZF9wdHIiLCBTaGFyZWRwdHJQcmludGVyLCAidHIxOjpzaGFyZWRfcHRyIikKLWFkZF9lbnRyeSAoImJvb3N0Ojp3ZWFrX3B0ciIsICAgU2hhcmVkcHRyUHJpbnRlciwgInRyMTo6d2Vha19wdHIiKQpkaWZmIC0tZ2l0IGEvc2hhcmUvcHJldHR5LXByaW50ZXJzL3N0bHBvcnQvZ3BwZnMtMC4yL3Rlc3QvLmdkYmluaXQgYi9zaGFyZS9wcmV0dHktcHJpbnRlcnMvc3RscG9ydC9ncHBmcy0wLjIvdGVzdC8uZ2RiaW5pdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM0MmY2Ny4uMDAwMDAwMAotLS0gYS9zaGFyZS9wcmV0dHktcHJpbnRlcnMvc3RscG9ydC9ncHBmcy0wLjIvdGVzdC8uZ2RiaW5pdAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLXB5dGhvbgotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLXN5cy5wYXRoLmluc2VydCAoMCwgb3MuZ2V0Y3dkKCkgKyAnLy4uJykKLWltcG9ydCBzdGxwb3J0LnByaW50ZXJzCi1zdGxwb3J0LnByaW50ZXJzLnJlZ2lzdGVyX3N0bHBvcnRfcHJpbnRlcnMgKE5vbmUpCi0KLSMgc3RscG9ydC5wcmludGVycy5zdGxwb3J0X3ZlcnNpb24gICAgICAgICAgID0gNS4yCi0jIHN0bHBvcnQucHJpbnRlcnMucHJpbnRfdmVjdG9yX3dpdGhfaW5kaWNlcyA9IEZhbHNlCi0KLWVuZApkaWZmIC0tZ2l0IGEvc2hhcmUvcHJldHR5LXByaW50ZXJzL3N0bHBvcnQvZ3BwZnMtMC4yL3Rlc3QvTWFrZWZpbGUgYi9zaGFyZS9wcmV0dHktcHJpbnRlcnMvc3RscG9ydC9ncHBmcy0wLjIvdGVzdC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI2OGZiNy4uMDAwMDAwMAotLS0gYS9zaGFyZS9wcmV0dHktcHJpbnRlcnMvc3RscG9ydC9ncHBmcy0wLjIvdGVzdC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi1DWFg9ZysrCi1HREI9Z2RiCi0KLSMgQWRqdXN0IGFuZCB1bmNvbW1lbnQgdG8gZW5hYmxlIHRoZSBjb3JyZXNwb25kaW5nIHRlc3RzCi0jIFNUTFBPUlQ0Nl9ST09UX0RJUj0vdXNyL2xvY2FsL3N0bHBvcnQtNC42LjIKLSMgU1RMUE9SVDUwX1JPT1RfRElSPS91c3IvbG9jYWwvc3RscG9ydC01LjAuMwotIyBTVExQT1JUNTFfUk9PVF9ESVI9L3Vzci9sb2NhbC9zdGxwb3J0LTUuMS43Ci0jIFNUTFBPUlQ1Ml9ST09UX0RJUj0vdXNyL2xvY2FsL3N0bHBvcnQtNS4yLjEKLQotIyBUbyBlbmFibGUgQm9vc3Qgc3VwcG9ydCB5b3UgbWlnaHQgbmVlZCB0byBwYXRjaAotIyAkKFNUTFBPUlQ1Ml9ST09UX0RJUikvaW5jbHVkZS9zdGxwb3J0L3N0bC90eXBlX3RyYWl0cy5oCi0jIHRvIGluY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9jb25zdC5ocHA+LgotIyBTVExQT1JUNTJfVVNFX0JPT1NUX1NVUFBPUlQ9MQotCi0KLQotIyBDb21tb24gZmxhZ3MgZm9yIFNUTHBvcnQgNC42LnggdGVzdHMKLVNUTFBPUlQ0Nl9GTEFHUyA9IFwKLSAgJChDWFhGTEFHUykgJChMREZMQUdTKSBcCi0gIC1JJChTVExQT1JUNDZfUk9PVF9ESVIpL2luY2x1ZGUvc3RscG9ydCBcCi0gIC1MJChTVExQT1JUNDZfUk9PVF9ESVIpL2xpYiBcCi0gIC1XbCwtUiQoU1RMUE9SVDQ2X1JPT1RfRElSKS9saWIgXAotICAtcHRocmVhZAotCi0jIENvbW1vbiBmbGFncyBmb3IgU1RMcG9ydCA1LjAueCB0ZXN0cwotU1RMUE9SVDUwX0ZMQUdTID0gXAotICAkKENYWEZMQUdTKSAkKExERkxBR1MpIFwKLSAgLUkkKFNUTFBPUlQ1MF9ST09UX0RJUikvaW5jbHVkZS9zdGxwb3J0IFwKLSAgLUwkKFNUTFBPUlQ1MF9ST09UX0RJUikvbGliIFwKLSAgLVdsLC1SJChTVExQT1JUNTBfUk9PVF9ESVIpL2xpYiBcCi0gIC1wdGhyZWFkCi0KLSMgQ29tbW9uIGZsYWdzIGZvciBTVExwb3J0IDUuMS54IHRlc3RzCi1TVExQT1JUNTFfRkxBR1MgPSBcCi0gICQoQ1hYRkxBR1MpICQoTERGTEFHUykgXAotICAtSSQoU1RMUE9SVDUxX1JPT1RfRElSKS9pbmNsdWRlL3N0bHBvcnQgXAotICAtTCQoU1RMUE9SVDUxX1JPT1RfRElSKS9saWIgXAotICAtV2wsLVIkKFNUTFBPUlQ1MV9ST09UX0RJUikvbGliIFwKLSAgLXB0aHJlYWQKLQotIyBDb21tb24gZmxhZ3MgZm9yIFNUTHBvcnQgNS4yLnggdGVzdHMKLVNUTFBPUlQ1Ml9GTEFHUyA9IFwKLSAgJChDWFhGTEFHUykgJChMREZMQUdTKSBcCi0gIC1JJChTVExQT1JUNTJfUk9PVF9ESVIpL2luY2x1ZGUvc3RscG9ydCBcCi0gIC1MJChTVExQT1JUNTJfUk9PVF9ESVIpL2xpYiBcCi0gIC1XbCwtUiQoU1RMUE9SVDUyX1JPT1RfRElSKS9saWIgXAotICAtcHRocmVhZAotCi1pZm5lcSAoJChTVExQT1JUNTJfVVNFX0JPT1NUX1NVUFBPUlQpLCkKLVNUTFBPUlQ1Ml9GTEFHUyArPSAtRF9TVExQX1VTRV9CT09TVF9TVVBQT1JUCi1lbmRpZgotCi0KLQotIyBBZGQgU1RMcG9ydCA0LjYueCB0ZXN0cyB0byAkKFRBUkdFVFMpIChpZiBlbmFibGVkKQotaWZuZXEgKCQoU1RMUE9SVDQ2X1JPT1RfRElSKSwpCi1UQVJHRVRTICs9IHRlc3Rfc3RscG9ydDQ2IHRlc3Rfc3RscG9ydDQ2ZAotZW5kaWYKLQotIyBBZGQgU1RMcG9ydCA1LjAueCB0ZXN0cyB0byAkKFRBUkdFVFMpIChpZiBlbmFibGVkKQotaWZuZXEgKCQoU1RMUE9SVDUwX1JPT1RfRElSKSwpCi1UQVJHRVRTICs9IHRlc3Rfc3RscG9ydDUwIHRlc3Rfc3RscG9ydDUwZAotZW5kaWYKLQotIyBBZGQgU1RMcG9ydCA1LjEueCB0ZXN0cyB0byAkKFRBUkdFVFMpIChpZiBlbmFibGVkKQotaWZuZXEgKCQoU1RMUE9SVDUxX1JPT1RfRElSKSwpCi1UQVJHRVRTICs9IHRlc3Rfc3RscG9ydDUxIHRlc3Rfc3RscG9ydDUxZAotZW5kaWYKLQotIyBBZGQgU1RMcG9ydCA1LjIueCB0ZXN0cyB0byAkKFRBUkdFVFMpIChpZiBlbmFibGVkKQotaWZuZXEgKCQoU1RMUE9SVDUyX1JPT1RfRElSKSwpCi1UQVJHRVRTICs9IHRlc3Rfc3RscG9ydDUyIHRlc3Rfc3RscG9ydDUyZAotZW5kaWYKLQotCi0KLWRlZmF1bHQ6IHJ1bgotaWZlcSAoJChUQVJHRVRTKSwpCi0JQGVjaG8gIllvdSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgU1RMcG9ydCBkaXJlY3RvcnkgYXQgdGhlIHN0YXJ0IG9mIHRoZSBNYWtlZmlsZS4iCi1lbmRpZgotCi1ydW46IGJ1aWxkCi1pZm5lcSAoJChUQVJHRVRTKSwpCi0JZm9yIFRBUkdFVCBpbiAkKFRBUkdFVFMpOyBkbyBcCi0JICBlY2hvICJSdW5uaW5nIHRlc3QgZm9yICQkVEFSR0VUIjsgXAotCSAgJChHREIpIC1iYXRjaCAteCBzY3JpcHQgLi8kJFRBUkdFVDsgXAotCWRvbmUKLWVuZGlmCi0KLWJ1aWxkOiAkKFRBUkdFVFMpCi0KLXRlc3Rfc3RscG9ydDQ2OiB0ZXN0LmNwcCBNYWtlZmlsZQotCSQoQ1hYKSAtbyAkQCAkPCAtZyAkKFNUTFBPUlQ0Nl9GTEFHUykgLWxzdGxwb3J0X2djYwotCi10ZXN0X3N0bHBvcnQ0NmQ6IHRlc3QuY3BwIE1ha2VmaWxlCi0JJChDWFgpIC1vICRAICQ8IC1nICQoU1RMUE9SVDQ2X0ZMQUdTKSAtbHN0bHBvcnRfZ2NjX3N0bGRlYnVnIC1EX1NUTFBfREVCVUcKLQotdGVzdF9zdGxwb3J0NTA6IHRlc3QuY3BwIE1ha2VmaWxlCi0JJChDWFgpIC1vICRAICQ8IC1nICQoU1RMUE9SVDUwX0ZMQUdTKSAtbHN0bHBvcnQKLQotdGVzdF9zdGxwb3J0NTBkOiB0ZXN0LmNwcCBNYWtlZmlsZQotCSQoQ1hYKSAtbyAkQCAkPCAtZyAkKFNUTFBPUlQ1MF9GTEFHUykgLWxzdGxwb3J0c3RsZyAtRF9TVExQX0RFQlVHCi0KLXRlc3Rfc3RscG9ydDUxOiB0ZXN0LmNwcCBNYWtlZmlsZQotCSQoQ1hYKSAtbyAkQCAkPCAtZyAkKFNUTFBPUlQ1MV9GTEFHUykgLWxzdGxwb3J0Ci0KLXRlc3Rfc3RscG9ydDUxZDogdGVzdC5jcHAgTWFrZWZpbGUKLQkkKENYWCkgLW8gJEAgJDwgLWcgJChTVExQT1JUNTFfRkxBR1MpIC1sc3RscG9ydHN0bGcgLURfU1RMUF9ERUJVRwotCi10ZXN0X3N0bHBvcnQ1MjogdGVzdC5jcHAgTWFrZWZpbGUKLQkkKENYWCkgLW8gJEAgJDwgLWcgJChTVExQT1JUNTJfRkxBR1MpIC1sc3RscG9ydAotCi10ZXN0X3N0bHBvcnQ1MmQ6IHRlc3QuY3BwIE1ha2VmaWxlCi0JJChDWFgpIC1vICRAICQ8IC1nICQoU1RMUE9SVDUyX0ZMQUdTKSAtbHN0bHBvcnRzdGxnIC1EX1NUTFBfREVCVUcKLQotY2xlYW46Ci0Jcm0gLWYgdGVzdF9zdGxwb3J0KgpkaWZmIC0tZ2l0IGEvc2hhcmUvcHJldHR5LXByaW50ZXJzL3N0bHBvcnQvZ3BwZnMtMC4yL3Rlc3Qvc2NyaXB0IGIvc2hhcmUvcHJldHR5LXByaW50ZXJzL3N0bHBvcnQvZ3BwZnMtMC4yL3Rlc3Qvc2NyaXB0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDlmZjNlLi4wMDAwMDAwCi0tLSBhL3NoYXJlL3ByZXR0eS1wcmludGVycy9zdGxwb3J0L2dwcGZzLTAuMi90ZXN0L3NjcmlwdAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLWIgZm9vCi1yCi1maW4KLXAgc3RyaW5nMQotcCBzdHJpbmcyCi1wIHN0cmluZzMKLXAgd3N0cmluZzEKLXAgd3N0cmluZzIKLXAgd3N0cmluZzMKLXAgdmVjdG9yMQotcCB2ZWN0b3IyCi1wIG1hcDEKLXAgbXVsdGltYXAxCi1wIHNldDEKLXAgbXVsdGlzZXQxCi1wIGxpc3QxCi1wIGxpc3QyCi1wIHNsaXN0MQotcCBzbGlzdDIKLXAgZGVxdWUxCi1wIGRlcXVlMgotcCBzdGFjazEKLXAgcXVldWUxCi1wIHByaW9yaXR5X3F1ZXVlMQotcCBiaXRzZXQxCi1wIGJpdHNldDIKLXAgdW5vcmRlcmVkX21hcDEKLXAgdW5vcmRlcmVkX21hcDIKLXAgdW5vcmRlcmVkX211bHRpbWFwMQotcCB1bm9yZGVyZWRfbXVsdGltYXAyCi1wIHVub3JkZXJlZF9zZXQxCi1wIHVub3JkZXJlZF9zZXQyCi1wIHVub3JkZXJlZF9tdWx0aXNldDEKLXAgdW5vcmRlcmVkX211bHRpc2V0MgotcCBhdXRvX3B0cjEKLXAgYXV0b19wdHIyCi1wIHNoYXJlZF9wdHIxCi1wIHNoYXJlZF9wdHIyCi1wIHdlYWtfcHRyMQotcCB3ZWFrX3B0cjIKLXEKZGlmZiAtLWdpdCBhL3NoYXJlL3ByZXR0eS1wcmludGVycy9zdGxwb3J0L2dwcGZzLTAuMi90ZXN0L3Rlc3QuY3BwIGIvc2hhcmUvcHJldHR5LXByaW50ZXJzL3N0bHBvcnQvZ3BwZnMtMC4yL3Rlc3QvdGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MGVmMWYuLjAwMDAwMDAKLS0tIGEvc2hhcmUvcHJldHR5LXByaW50ZXJzL3N0bHBvcnQvZ3BwZnMtMC4yL3Rlc3QvdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotI2luY2x1ZGUgPGJpdHNldD4KLSNpbmNsdWRlIDxkZXF1ZT4KLSNpbmNsdWRlIDxsaXN0PgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8cXVldWU+Ci0jaW5jbHVkZSA8c2V0PgotI2lmZGVmIF9TVExQT1JUX1ZFUlNJT04KLSNpbmNsdWRlIDxzbGlzdD4KLSNlbmRpZiAvLyBfU1RMUE9SVF9WRVJTSU9OCi0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHN0YWNrPgotI2lmIF9TVExQT1JUX1ZFUlNJT04gPj0gMHg1MjAKLSNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgotI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+Ci0jZW5kaWYgLy9fU1RMUE9SVF9WRVJTSU9OID49IDB4NTIwCi0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaWZkZWYgX1NUTFBPUlRfVkVSU0lPTgotI2RlZmluZSBTVERfVFIxIHN0ZDo6dHIxCi0jZWxzZSAvLyBfU1RMUE9SVF9WRVJTSU9OCi0jZGVmaW5lIFNURF9UUjEgc3RkCi0jZW5kaWYgLy8gX1NUTFBPUlRfVkVSU0lPTgotCi1zdHJ1Y3QgTGFyZ2UgewotICBjaGFyIG1fZm9vWzEwMF07Ci19OwotCi12b2lkIGZvbygpIHsgfQotCi1pbnQgbWFpbigpIHsKLQotICBzdGQ6OnN0cmluZyBzdHJpbmcxID0gIiI7Ci0gIHN0ZDo6c3RyaW5nIHN0cmluZzIgPSAiYSBzaG9ydCBzdHJpbmciOwotICBzdGQ6OnN0cmluZyBzdHJpbmczID0gImEgdmVyeSBsb25nIHN0cmluZyAuLi4iOwotCi0gIHN0ZDo6d3N0cmluZyB3c3RyaW5nMSA9IEwiIjsKLSAgc3RkOjp3c3RyaW5nIHdzdHJpbmcyID0gTCJhIHNob3J0IHN0cmluZyI7Ci0gIHN0ZDo6d3N0cmluZyB3c3RyaW5nMyA9IEwiYSB2ZXJ5IGxvbmcgc3RyaW5nIC4uLiI7Ci0KLSAgc3RkOjp2ZWN0b3I8aW50PiB2ZWN0b3IxOwotICB2ZWN0b3IxLnB1c2hfYmFjayggMTAwKTsKLSAgdmVjdG9yMS5wdXNoX2JhY2soIDIwMCk7Ci0gIHZlY3RvcjEucHVzaF9iYWNrKCAzMDApOwotCi0gIHN0ZDo6dmVjdG9yPGJvb2w+IHZlY3RvcjI7Ci0gIHZlY3RvcjIucHVzaF9iYWNrKCB0cnVlKTsKLSAgdmVjdG9yMi5wdXNoX2JhY2soIGZhbHNlKTsKLSAgdmVjdG9yMi5wdXNoX2JhY2soIHRydWUpOwotCi0gIHN0ZDo6bWFwPGludCxpbnQ+IG1hcDE7Ci0gIG1hcDFbMV0gPSAtMTsKLSAgbWFwMVsyMV0gPSAtMjE7Ci0gIG1hcDFbNDJdID0gLTQyOwotCi0gIHN0ZDo6bXVsdGltYXA8aW50LGludD4gbXVsdGltYXAxOwotICBtdWx0aW1hcDEuaW5zZXJ0IChzdGQ6OnBhaXI8aW50LGludD4gKDEsIC0xKSk7Ci0gIG11bHRpbWFwMS5pbnNlcnQgKHN0ZDo6cGFpcjxpbnQsaW50PiAoMSwgLTIpKTsKLSAgbXVsdGltYXAxLmluc2VydCAoc3RkOjpwYWlyPGludCxpbnQ+ICgyMSwgLTIxKSk7Ci0gIG11bHRpbWFwMS5pbnNlcnQgKHN0ZDo6cGFpcjxpbnQsaW50PiAoMjEsIC0yMikpOwotICBtdWx0aW1hcDEuaW5zZXJ0IChzdGQ6OnBhaXI8aW50LGludD4gKDQyLCAtNDIpKTsKLSAgbXVsdGltYXAxLmluc2VydCAoc3RkOjpwYWlyPGludCxpbnQ+ICg0MiwgLTQzKSk7Ci0KLSAgc3RkOjpzZXQ8aW50PiBzZXQxOwotICBzZXQxLmluc2VydCggMTAwKTsKLSAgc2V0MS5pbnNlcnQoIDIwMCk7Ci0gIHNldDEuaW5zZXJ0KCAzMDApOwotCi0gIHN0ZDo6bXVsdGlzZXQ8aW50PiBtdWx0aXNldDE7Ci0gIG11bHRpc2V0MS5pbnNlcnQoIDEwMCk7Ci0gIG11bHRpc2V0MS5pbnNlcnQoIDEwMCk7Ci0gIG11bHRpc2V0MS5pbnNlcnQoIDIwMCk7Ci0gIG11bHRpc2V0MS5pbnNlcnQoIDIwMCk7Ci0gIG11bHRpc2V0MS5pbnNlcnQoIDMwMCk7Ci0gIG11bHRpc2V0MS5pbnNlcnQoIDMwMCk7Ci0KLSAgc3RkOjpsaXN0PGludD4gbGlzdDE7Ci0gIHN0ZDo6bGlzdDxpbnQ+IGxpc3QyOwotICBsaXN0MS5wdXNoX2JhY2soIDEwMCk7Ci0gIGxpc3QxLnB1c2hfYmFjayggMjAwKTsKLSAgbGlzdDEucHVzaF9iYWNrKCAzMDApOwotCi0jaWZkZWYgX1NUTFBPUlRfVkVSU0lPTgotICBzdGQ6OnNsaXN0PGludD4gc2xpc3QxOwotICBzdGQ6OnNsaXN0PGludD4gc2xpc3QyOwotICBzbGlzdDEucHVzaF9mcm9udCggMTAwKTsKLSAgc2xpc3QxLnB1c2hfZnJvbnQoIDIwMCk7Ci0gIHNsaXN0MS5wdXNoX2Zyb250KCAzMDApOwotI2Vsc2UgLy8gX1NUTFBPUlRfVkVSU0lPTgotICBzdGQ6OnN0cmluZyBzbGlzdDEgPSAic3RkOjpzbGlzdCBub3Qgc3VwcG9ydGVkIjsKLSAgc3RkOjpzdHJpbmcgc2xpc3QyID0gInN0ZDo6c2xpc3Qgbm90IHN1cHBvcnRlZCI7Ci0jZW5kaWYgLy8gX1NUTFBPUlRfVkVSU0lPTgotCi0gIHN0ZDo6ZGVxdWU8aW50PiBkZXF1ZTE7Ci0gIGRlcXVlMS5wdXNoX2Zyb250KCAxMDApOwotICBkZXF1ZTEucHVzaF9mcm9udCggMjAwKTsKLSAgZGVxdWUxLnB1c2hfZnJvbnQoIDMwMCk7Ci0KLSAgc3RkOjpkZXF1ZTxMYXJnZT4gZGVxdWUyOwotICBkZXF1ZTIucHVzaF9iYWNrKCBMYXJnZSgpKTsKLSAgZGVxdWUyLnB1c2hfYmFjayggTGFyZ2UoKSk7Ci0gIGRlcXVlMi5wdXNoX2Zyb250KCBMYXJnZSgpKTsKLQotICBzdGQ6OnN0YWNrPGludD4gc3RhY2sxOwotICBzdGFjazEucHVzaCggMTAwKTsKLSAgc3RhY2sxLnB1c2goIDIwMCk7Ci0gIHN0YWNrMS5wdXNoKCAzMDApOwotCi0gIHN0ZDo6cXVldWU8aW50PiBxdWV1ZTE7Ci0gIHF1ZXVlMS5wdXNoKCAxMDApOwotICBxdWV1ZTEucHVzaCggMjAwKTsKLSAgcXVldWUxLnB1c2goIDMwMCk7Ci0KLSAgc3RkOjpwcmlvcml0eV9xdWV1ZTxpbnQ+IHByaW9yaXR5X3F1ZXVlMTsKLSAgcHJpb3JpdHlfcXVldWUxLnB1c2goIDIwMCk7Ci0gIHByaW9yaXR5X3F1ZXVlMS5wdXNoKCAxMDApOwotICBwcmlvcml0eV9xdWV1ZTEucHVzaCggMzAwKTsKLQotICBzdGQ6OmJpdHNldDwxMDA+IGJpdHNldDE7Ci0gIGJpdHNldDFbMl0gPSAxOwotICBiaXRzZXQxWzQyXSA9IDE7Ci0gIGJpdHNldDFbNjRdID0gMTsKLSAgCi0gIHN0ZDo6Yml0c2V0PDE+IGJpdHNldDI7Ci0gIGJpdHNldDJbMF0gPSAxOwotCi0jaWYgX1NUTFBPUlRfVkVSU0lPTiA+PSAweDUyMAotICBTVERfVFIxOjp1bm9yZGVyZWRfbWFwPGludCxpbnQ+IHVub3JkZXJlZF9tYXAxOwotICBTVERfVFIxOjp1bm9yZGVyZWRfbWFwPGludCxpbnQ+IHVub3JkZXJlZF9tYXAyOwotICBmb3IoIGludCBpID0gMDsgaSA8IDU7ICsraSkKLSAgICAgIHVub3JkZXJlZF9tYXAxW2kqaV0gPSAtaSppOwotCi0gIFNURF9UUjE6OnVub3JkZXJlZF9tdWx0aW1hcDxpbnQsaW50PiB1bm9yZGVyZWRfbXVsdGltYXAxOwotICBTVERfVFIxOjp1bm9yZGVyZWRfbXVsdGltYXA8aW50LGludD4gdW5vcmRlcmVkX211bHRpbWFwMjsKLSAgZm9yKCBpbnQgaSA9IDA7IGkgPCA1OyArK2kpIHsKLSAgICAgIHVub3JkZXJlZF9tdWx0aW1hcDEuaW5zZXJ0KCBzdGQ6OnBhaXI8aW50LGludD4oIGkqaSwgLWkqaSkpOwotICAgICAgdW5vcmRlcmVkX211bHRpbWFwMS5pbnNlcnQoIHN0ZDo6cGFpcjxpbnQsaW50PiggaSppLCAgaSppKSk7Ci0gIH0KLQotICBTVERfVFIxOjp1bm9yZGVyZWRfc2V0PGludD4gdW5vcmRlcmVkX3NldDE7Ci0gIFNURF9UUjE6OnVub3JkZXJlZF9zZXQ8aW50PiB1bm9yZGVyZWRfc2V0MjsKLSAgZm9yKCBpbnQgaSA9IDA7IGkgPCA1OyArK2kpCi0gICAgICB1bm9yZGVyZWRfc2V0MS5pbnNlcnQoIGkqaSk7Ci0gIAotICBTVERfVFIxOjp1bm9yZGVyZWRfbXVsdGlzZXQ8aW50PiB1bm9yZGVyZWRfbXVsdGlzZXQxOwotICBTVERfVFIxOjp1bm9yZGVyZWRfbXVsdGlzZXQ8aW50PiB1bm9yZGVyZWRfbXVsdGlzZXQyOwotICBmb3IoIGludCBpID0gMDsgaSA8IDU7ICsraSkgewotICAgICAgdW5vcmRlcmVkX211bHRpc2V0MS5pbnNlcnQoIC1pKmkpOwotICAgICAgdW5vcmRlcmVkX211bHRpc2V0MS5pbnNlcnQoICBpKmkpOwotICB9Ci0jZWxzZSAvLyBfU1RMUE9SVF9WRVJTSU9OIDwgMHg1MjAKLSAgc3RkOjpzdHJpbmcgdW5vcmRlcmVkX21hcDEgPSAic3RkOjp0cjE6OnVub3JkZXJlZF9tYXAgbm90IHN1cHBvcnRlZCI7Ci0gIHN0ZDo6c3RyaW5nIHVub3JkZXJlZF9tYXAyID0gInN0ZDo6dHIxOjp1bm9yZGVyZWRfbWFwIG5vdCBzdXBwb3J0ZWQiOwotICBzdGQ6OnN0cmluZyB1bm9yZGVyZWRfbXVsdGltYXAxID0gInN0ZDo6dHIxOjp1bm9yZGVyZWRfbXVsdGltYXAgbm90IHN1cHBvcnRlZCI7Ci0gIHN0ZDo6c3RyaW5nIHVub3JkZXJlZF9tdWx0aW1hcDIgPSAic3RkOjp0cjE6OnVub3JkZXJlZF9tdWx0aW1hcCBub3Qgc3VwcG9ydGVkIjsKLSAgc3RkOjpzdHJpbmcgdW5vcmRlcmVkX3NldDEgPSAic3RkOjp0cjE6OnVub3JkZXJlZF9zZXQgbm90IHN1cHBvcnRlZCI7Ci0gIHN0ZDo6c3RyaW5nIHVub3JkZXJlZF9zZXQyID0gInN0ZDo6dHIxOjp1bm9yZGVyZWRfc2V0IG5vdCBzdXBwb3J0ZWQiOwotICBzdGQ6OnN0cmluZyB1bm9yZGVyZWRfbXVsdGlzZXQxID0gInN0ZDo6dHIxOjp1bm9yZGVyZWRfbXVsdGlzZXQgbm90IHN1cHBvcnRlZCI7Ci0gIHN0ZDo6c3RyaW5nIHVub3JkZXJlZF9tdWx0aXNldDIgPSAic3RkOjp0cjE6OnVub3JkZXJlZF9tdWx0aXNldCBub3Qgc3VwcG9ydGVkIjsKLSNlbmRpZiAvLyBfU1RMUE9SVF9WRVJTSU9OIDwgMHg1MjAKLQotICBzdGQ6OmF1dG9fcHRyPExhcmdlPiBhdXRvX3B0cjEoIG5ldyBMYXJnZSgpKTsKLSAgc3RkOjphdXRvX3B0cjxMYXJnZT4gYXV0b19wdHIyOwotCi0jaWZkZWYgX1NUTFBfVVNFX0JPT1NUX1NVUFBPUlQKLSAgU1REX1RSMTo6c2hhcmVkX3B0cjxMYXJnZT4gc2hhcmVkX3B0cjEoIG5ldyBMYXJnZSk7Ci0gIFNURF9UUjE6OnNoYXJlZF9wdHI8TGFyZ2U+IHNoYXJlZF9wdHIyOwotICAKLSAgU1REX1RSMTo6d2Vha19wdHI8TGFyZ2U+IHdlYWtfcHRyMSggc2hhcmVkX3B0cjEpOwotICBTVERfVFIxOjp3ZWFrX3B0cjxMYXJnZT4gd2Vha19wdHIyOwotI2Vsc2UgLy8gX1NUTFBfVVNFX0JPT1NUX1NVUFBPUlQKLSAgc3RkOjpzdHJpbmcgc2hhcmVkX3B0cjEgPSAic3RkOjp0cjE6OnNoYXJlZF9wdHIgbm90IHN1cHBvcnRlZCI7Ci0gIHN0ZDo6c3RyaW5nIHNoYXJlZF9wdHIyID0gInN0ZDo6dHIxOjpzaGFyZWRfcHRyIG5vdCBzdXBwb3J0ZWQiOwotCi0gIHN0ZDo6c3RyaW5nIHdlYWtfcHRyMSA9ICJzdGQ6OnRyMTo6d2Vha19wdHIgbm90IHN1cHBvcnRlZCI7Ci0gIHN0ZDo6c3RyaW5nIHdlYWtfcHRyMiA9ICJzdGQ6OnRyMTo6d2Vha19wdHIgbm90IHN1cHBvcnRlZCI7Ci0jZW5kaWYgLy8gX1NUTFBfVVNFX0JPT1NUX1NVUFBPUlQKLSAgCi0gIGZvbygpOwotICByZXR1cm4gMDsKLX0K